ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzU4MzEKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjYgQEAKKyoucHljCisqLnB5bworLyoucGF0Y2gKK2J1aWxkKi8KK3B5c2h0YWJsZXMucHkKK3BzdGFnZS8KK3NjcmlwdHMvb2UtZ2l0LXByb3h5LXNvY2tzCitzb3VyY2VzLworbWV0YS0qLworIW1ldGEtc2tlbGV0b24KKyFtZXRhLXNlbGZ0ZXN0Citob2ItaW1hZ2UtKi5iYgorKi5zd3AKKyoub3JpZworKi5yZWoKKyp+CishbWV0YS15b2N0bworIW1ldGEteW9jdG8tYnNwCishbWV0YS15b2N0by1pbXBvcnRlZAorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC5odG1sCitkb2N1bWVudGF0aW9uL3VzZXItbWFudWFsL3VzZXItbWFudWFsLnBkZgorZG9jdW1lbnRhdGlvbi91c2VyLW1hbnVhbC91c2VyLW1hbnVhbC50Z3oKK3B1bGwtKi8KK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvYmFja2xvZy50eHQKK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbG9nLyoKK2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvLmNhY2hlLyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8udGVtcGxhdGVjb25mIGIvLnRlbXBsYXRlY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjUwYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvLnRlbXBsYXRlY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgVGVtcGxhdGUgc2V0dGluZ3MKK1RFTVBMQVRFQ09ORj0ke1RFTVBMQVRFQ09ORjotbWV0YS15b2N0by9jb25mfQpkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYTZlNgotLS0gL2Rldi9udWxsCisrKyBiL0xJQ0VOU0UKQEAgLTAsMCArMSwxNCBAQAorRGlmZmVyZW50IGNvbXBvbmVudHMgb2YgT3BlbkVtYmVkZGVkIGFyZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZXMgKGEgbWl4CitvZiBNSVQgYW5kIEdQTHYyKS4gUGxlYXNlIHNlZToKKworbWV0YS9DT1BZSU5HLkdQTHYyIChHUEx2MikKK21ldGEvQ09QWUlORy5NSVQgKE1JVCkKK21ldGEtc2VsZnRlc3QvQ09QWUlORy5NSVQgKE1JVCkKK21ldGEtc2tlbGV0b24vQ09QWUlORy5NSVQgKE1JVCkKKworQWxsIG1ldGFkYXRhIGlzIE1JVCBsaWNlbnNlZCB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4gU291cmNlIGNvZGUKK2luY2x1ZGVkIGluIHRyZWUgZm9yIGluZGl2aWR1YWwgcmVjaXBlcyBpcyB1bmRlciB0aGUgTElDRU5TRSBzdGF0ZWQgaW4KK3RoZSBhc3NvY2lhdGVkIHJlY2lwZSAoLmJiIGZpbGUpIHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLgorCitMaWNlbnNlIGluZm9ybWF0aW9uIGZvciBhbnkgb3RoZXIgZmlsZXMgaXMgZWl0aGVyIGV4cGxpY2l0bHkgc3RhdGVkIAorb3IgZGVmYXVsdHMgdG8gR1BMIHZlcnNpb24gMi4KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQ5MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FCkBAIC0wLDAgKzEsNTggQEAKK1Bva3kKKz09PT0KKworUG9reSBpcyBhbiBpbnRlZ3JhdGlvbiBvZiB2YXJpb3VzIGNvbXBvbmVudHMgdG8gZm9ybSBhIGNvbXBsZXRlIHByZXBhY2thZ2VkCitidWlsZCBzeXN0ZW0gYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50LiBJdCBmZWF0dXJlcyBzdXBwb3J0IGZvciBidWlsZGluZworY3VzdG9taXNlZCBlbWJlZGRlZCBkZXZpY2Ugc3R5bGUgaW1hZ2VzLiBUaGVyZSBhcmUgcmVmZXJlbmNlIGRlbW8gaW1hZ2VzCitmZWF0dXJpbmcgYSBYMTEvTWF0Y2hib3gvR1RLIHRoZW1lZCBVSSBjYWxsZWQgU2F0by4gVGhlIHN5c3RlbSBzdXBwb3J0cworY3Jvc3MtYXJjaGl0ZWN0dXJlIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHVzaW5nIFFFTVUgZW11bGF0aW9uIGFuZCBhCitzdGFuZGFsb25lIHRvb2xjaGFpbiBhbmQgU0RLIHdpdGggSURFIGludGVncmF0aW9uLgorCitBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaGFyZHdhcmUgdGhhdCBQb2t5IHN1cHBvcnRzCitpcyBhdmFpbGFibGUgaW4gUkVBRE1FLmhhcmR3YXJlLiBGdXJ0aGVyIGhhcmR3YXJlIHN1cHBvcnQgY2FuIGVhc2lseSBiZSBhZGRlZAoraW4gdGhlIGZvcm0gb2YgbGF5ZXJzIHdoaWNoIGV4dGVuZCB0aGUgc3lzdGVtcyBjYXBhYmlsaXRpZXMgaW4gYSBtb2R1bGFyIHdheS4KKworQXMgYW4gaW50ZWdyYXRpb24gbGF5ZXIgUG9reSBjb25zaXN0cyBvZiBzZXZlcmFsIHVwc3RyZWFtIHByb2plY3RzIHN1Y2ggYXMgCitCaXRCYWtlLCBPcGVuRW1iZWRkZWQtQ29yZSwgWW9jdG8gZG9jdW1lbnRhdGlvbiBhbmQgdmFyaW91cyBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIAorZS5nLiBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQuIFBva3kgaXMgaW4gdHVybiBhIGNvbXBvbmVudCBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKworVGhlIFlvY3RvIFByb2plY3QgaGFzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gaW5jbHVkaW5nIGEgCityZWZlcmVuY2UgbWFudWFsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKKyAgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK09wZW5FbWJlZGRlZC1Db3JlIGlzIGEgbGF5ZXIgY29udGFpbmluZyB0aGUgY29yZSBtZXRhZGF0YSBmb3IgY3VycmVudCB2ZXJzaW9ucworb2YgT3BlbkVtYmVkZGVkLiBJdCBpcyBkaXN0cm8tbGVzcyAoY2FuIGJ1aWxkIGEgZnVuY3Rpb25hbCBpbWFnZSB3aXRoCitESVNUUk8gPSAibm9kaXN0cm8iKSBhbmQgY29udGFpbnMgb25seSBlbXVsYXRlZCBtYWNoaW5lIHN1cHBvcnQuCisKK0ZvciBpbmZvcm1hdGlvbiBhYm91dCBPcGVuRW1iZWRkZWQsIHNlZSB0aGUgT3BlbkVtYmVkZGVkIHdlYnNpdGU6CisgICAgaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnLworCitXaGVyZSB0byBTZW5kIFBhdGNoZXMKKz09PT09PT09PT09PT09PT09PT09PQorCitBcyBQb2t5IGlzIGFuIGludGVncmF0aW9uIHJlcG9zaXRvcnkgKGJ1aWx0IHVzaW5nIGEgdG9vbCBjYWxsZWQgY29tYm8tbGF5ZXIpLAorcGF0Y2hlcyBhZ2FpbnN0IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgc2hvdWxkIGJlIHNlbnQgdG8gdGhlaXIgcmVzcGVjdGl2ZQordXBzdHJlYW1zOgorCitiaXRiYWtlOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZS8KKyAgICBNYWlsaW5nIGxpc3Q6IGJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitkb2N1bWVudGF0aW9uOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1kb2NzLworICAgIE1haWxpbmcgbGlzdDogeW9jdG9AeW9jdG9wcm9qZWN0Lm9yZworCittZXRhLXlvY3RvKC1ic3ApOgorICAgIEdpdCByZXBvc2l0b3J5OiBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvKC1ic3ApCisgICAgTWFpbGluZyBsaXN0OiBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworRXZlcnl0aGluZyBlbHNlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBtYWlsaW5nIGxpc3QuICBJZiBpbgorZG91YnQsIGNoZWNrIHRoZSBvZS1jb3JlIGdpdCByZXBvc2l0b3J5IGZvciB0aGUgY29udGVudCB5b3UgaW50ZW5kIHRvIG1vZGlmeS4KK0JlZm9yZSBzZW5kaW5nLCBiZSBzdXJlIHRoZSBwYXRjaGVzIGFwcGx5IGNsZWFubHkgdG8gdGhlIGN1cnJlbnQgb2UtY29yZSBnaXQKK3JlcG9zaXRvcnkuCisKKyAgICBHaXQgcmVwb3NpdG9yeTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlLworICAgIE1haWxpbmcgbGlzdDogb3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZworCitOb3RlOiBUaGUgc2NyaXB0cyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRyZWF0ZWQgd2l0aCBleHRyYSBjYXJlIGFzIGl0IGlzIGEgbWl4IG9mCitvZS1jb3JlIGFuZCBwb2t5LXNwZWNpZmljIGZpbGVzLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLmhhcmR3YXJlIGIvUkVBRE1FLmhhcmR3YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzRjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUuaGFyZHdhcmUKQEAgLTAsMCArMSw1MDAgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUG9reSBIYXJkd2FyZSBSRUFETUUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGdpdmVzIGRldGFpbHMgYWJvdXQgdXNpbmcgUG9reSB3aXRoIHRoZSByZWZlcmVuY2UgbWFjaGluZXMKK3N1cHBvcnRlZCBvdXQgb2YgdGhlIGJveC4gQSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkIHJlZmVyZW5jZSB0YXJnZXQgbWFjaGluZXMKK2NhbiBiZSBmb3VuZCBieSBsb29raW5nIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXM6CisKKyAgIG1ldGEvY29uZi9tYWNoaW5lLworICAgbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lLworCitJZiB5b3UgYXJlIGluIGRvdWJ0IGFib3V0IHVzaW5nIFBva3kvT3BlbkVtYmVkZGVkIHdpdGggeW91ciBoYXJkd2FyZSwgY29uc3VsdAordGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgYm9hcmQvZGV2aWNlLgorCitTdXBwb3J0IGZvciBhZGRpdGlvbmFsIGRldmljZXMgaXMgbm9ybWFsbHkgYWRkZWQgYnkgY3JlYXRpbmcgQlNQIGxheWVycyAtIGZvcgorbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIHRoZSBZb2N0byBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKK0d1aWRlIC0gZG9jdW1lbnRhdGlvbiBzb3VyY2UgaXMgaW4gZG9jdW1lbnRhdGlvbi9ic3BndWlkZSBvciBkb3dubG9hZCB0aGUgUERGCitmcm9tOgorCisgICBodHRwOi8veW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uCisKK1N1cHBvcnQgZm9yIHBoeXNpY2FsIHJlZmVyZW5jZSBoYXJkd2FyZSBoYXMgbm93IGJlZW4gc3BsaXQgb3V0IGludG8gYQorbWV0YS15b2N0by1ic3AgbGF5ZXIgd2hpY2ggY2FuIGJlIHJlbW92ZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIGxheWVycyBpZiBub3QKK25lZWRlZC4KKworCitRRU1VIEVtdWxhdGlvbiBUYXJnZXRzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHNpbXBsaWZ5IGRldmVsb3BtZW50LCB0aGUgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIGJ1aWxkaW5nIGltYWdlcyB0bword29yayB3aXRoIHRoZSBRRU1VIGVtdWxhdG9yIGluIHN5c3RlbSBlbXVsYXRpb24gbW9kZS4gU2V2ZXJhbCBhcmNoaXRlY3R1cmVzCithcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKworICAqIEFSTSAocWVtdWFybSkKKyAgKiB4ODYgKHFlbXV4ODYpCisgICogeDg2LTY0IChxZW11eDg2LTY0KQorICAqIFBvd2VyUEMgKHFlbXVwcGMpCisgICogTUlQUyAocWVtdW1pcHMpCisKK1VzZSBvZiB0aGUgUUVNVSBpbWFnZXMgaXMgY292ZXJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUgdmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgdGFyZ2V0IGlzIGdpdmVuCitpbiBicmFja2V0cy4KKworCitIYXJkd2FyZSBSZWZlcmVuY2UgQm9hcmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgorCisgICogVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKyAgKiBGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgYm9hcmQncyBzZWN0aW9uIGJlbG93LiBUaGUgYXBwcm9wcmlhdGUgTUFDSElORQordmFyaWFibGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgYm9hcmQgaXMgZ2l2ZW4gaW4gYnJhY2tldHMuCisKK1JlZmVyZW5jZSBCb2FyZCBNYWludGVuYW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NlbmQgcHVsbCByZXF1ZXN0cywgcGF0Y2hlcywgY29tbWVudHMgb3IgcXVlc3Rpb25zIGFib3V0IG1ldGEteW9jdG8tYnNwcyB0byBwb2t5QHlvY3RvcHJvamVjdC5vcmcKKworTWFpbnRhaW5lcnM6IEtldmluIEhhbyA8a2V4aW4uaGFvQHdpbmRyaXZlci5jb20+CisgICAgICAgICAgICAgQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CisKK0NvbnN1bWVyIERldmljZXMKKz09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBjb25zdW1lciBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIG1ldGEteW9jdG8tYnNwIGxheWVyOgorCisgICogSW50ZWwgeDg2IGJhc2VkIFBDcyBhbmQgZGV2aWNlcyAoZ2VuZXJpY3g4NikKKyAgKiBVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgZGV2aWNlJ3Mgc2VjdGlvbiBiZWxvdy4gVGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUKK3ZhcmlhYmxlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSBpcyBnaXZlbiBpbiBicmFja2V0cy4KKworCisKKyAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpYyBIYXJkd2FyZSBEb2N1bWVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0ludGVsIHg4NiBiYXNlZCBQQ3MgYW5kIGRldmljZXMgKGdlbmVyaWN4ODYpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGdlbmVyaWN4ODYgTUFDSElORSBpcyB0ZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6CisKK0ludGVsIFhlb24vQ29yZSBpLVNlcmllczoKKyAgKyBJbnRlbCBSb21sZXkgU2VydmVyOiBTYW5keSBCcmlkZ2UgWGVvbiBwcm9jZXNzb3IsIEM2MDAgUENIIChQYXRzYnVyZyksIChDYW5vZSBQYXNzIENSQikKKyAgKyBJbnRlbCBSb21sZXkgU2VydmVyOiBJdnkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoSW50ZWwgU0RQIFMyUjMpCisgICsgSW50ZWwgQ3J5c3RhbCBGb3Jlc3QgU2VydmVyOiBTYW5keSBCcmlkZ2UgWGVvbiBwcm9jZXNzb3IsIERIODl4eCBQQ0ggKENhdmUgQ3JlZWspLCAoU3RhcmdvIENSQikKKyAgKyBJbnRlbCBDaGllZiBSaXZlciBNb2JpbGU6IEl2eSBCcmlkZ2UgTW9iaWxlIHByb2Nlc3NvciwgUU03NyBQQ0ggKFBhbnRoZXIgUG9pbnQtTSksIChFbWVyYWxkIExha2UgSUkgQ1JCLCBTYWJpbm8gQ2FueW9uIENSQikKKyAgKyBJbnRlbCBIdXJvbiBSaXZlciBNb2JpbGU6IFNhbmR5IEJyaWRnZSBwcm9jZXNzb3IsIFFNNjcgUENIIChDb3VnYXIgUG9pbnQpLCAoRW1lcmFsZCBMYWtlIENSQiwgRVZPQyBFQzctMTgxN0xOQVIgYm9hcmQpCisgICsgSW50ZWwgQ2FscGVsbGEgUGxhdGZvcm06IENvcmUgaTcgcHJvY2Vzc29yLCBRTTU3IFBDSCAoSWJleCBQZWFrLU0pLCAoUmVkIEZvcnQgQ1JCLCBFbWVyc29uIE1BVFhNIENPUkUtNDExLUIpCisgICsgSW50ZWwgTmVoYWxlbS9XZXN0bWVyZS1FUCBTZXJ2ZXI6IFhlb24gNTZ4eC81NXh4IHByb2Nlc3NvcnMsIDU1MjAgY2hpcHNldCwgSUNIMTBSIElPSCAoODI4MDEpLCAoSGFubGFuIENyZWVrIENSQikKKyAgKyBJbnRlbCBOZWhhbGVtIFdvcmtzdGF0aW9uOiBYZW9uIDU2eHgvNTV4eCBwcm9jZXNzb3JzLCBTeXN0ZW0gU0M1NjUwU0NXUyAoR3JlZW5jaXR5IENSQikKKyAgKyBJbnRlbCBQaWNrZXQgUG9zdCBTZXJ2ZXI6IFhlb24gNTZ4eC81NXh4IHByb2Nlc3NvcnMgKEphc3BlciBGb3Jlc3QpLCAzNDIwIGNoaXBzZXQgKEliZXggUGVhayksIChPc2FnZSBDUkIpCisgICsgSW50ZWwgU3RvcmFnZSBQbGF0Zm9ybTogU2FuZHkgQnJpZGdlIFhlb24gcHJvY2Vzc29yLCBDNjAwIFBDSCAoUGF0c2J1cmcpLCAoT2FrIENyZWVrIENhbnlvbiBDUkIpCisgICsgSW50ZWwgU2hhcmsgQmF5IENsaWVudCBQbGF0Zm9ybTogSGFzd2VsbCBwcm9jZXNzb3IsIEx5bnhQb2ludCBQQ0gsIChXYWxudXQgQ2FueW9uIENSQiwgTGF2YSBDYW55b24gQ1JCLCBCYXNraW5nIFJpZGdlIENSQiwgRmxhdGhlYWQgQ3JlZWsgQ1JCKQorICArIEludGVsIFNoYXJrIEJheSBVbHRyYWJvb2sgUGxhdGZvcm06IEhhc3dlbGwgVUxUIHByb2Nlc3NvciwgTHlueCBQb2ludC1MUCBQQ0gsIChXaGl0ZVRpcCBNb3VudGFpbiAxIENSQikKKworSW50ZWwgQXRvbSBwbGF0Zm9ybXM6CisgICsgSW50ZWwgZW1iZWRkZWQgTWVubG93OiBJbnRlbCBBdG9tIFo1MTAvNTMwIENQVSwgU3lzdGVtIENvbnRyb2xsZXIgSHViIFVTMTVXIChQb3J0d2VsbCBOQU5PLTgwNDQpCisgICsgSW50ZWwgTHVuYSBQaWVyOiBJbnRlbCBBdG9tIE40eHgvRDV4eCBzZXJpZXMgQ1BVIChha2E6IFBpbmV2aWV3LUQgJiAtTSksIDgyODAxSE0gSS9PIEh1YiAoSUNIOE0pLCAoQWR2YW50ZWNoIEFJTUItMjEyLCBNb29uIENyZWVrIENSQikKKyAgKyBJbnRlbCBRdWVlbnMgQmF5IHBsYXRmb3JtOiBJbnRlbCBBdG9tIEU2eHggQ1BVIChha2E6IFR1bm5lbCBDcmVlayksIFRvcGNsaWZmIEVHMjBUIEkvTyBIdWIgKEVtZXJzb24gTklUWC0zMTUsIENyb3duIEJheSBDUkIsIE1pbm5vdyBCb2FyZCkKKyAgKyBJbnRlbCBGaXNoIFJpdmVyIElzbGFuZCBwbGF0Zm9ybTogSW50ZWwgQXRvbSBFNnh4IENQVSAoYWthOiBUdW5uZWwgQ3JlZWspLCBUb3BjbGlmZiBFRzIwVCBJL08gSHViIChLb250cm9uIEtNMk04MDYpCisgICsgSW50ZWwgQ2VkYXIgVHJhaWwgcGxhdGZvcm06IEludGVsIEF0b20gTjIwMDAgJiBEMjAwMCBzZXJpZXMgQ1BVIChha2E6IENlZGFydmlldyksIE5NMTAgRXhwcmVzcyBDaGlwc2V0IChOb3JjbyBraXQgQklTLTY2MzAsIENlZGFyIFJvY2sgQ1JCKQorCithbmQgaXMgbGlrZWx5IHRvIHdvcmsgb24gbWFueSB1bmxpc3RlZCBBdG9tL0NvcmUvWGVvbiBiYXNlZCBkZXZpY2VzLiBUaGUgTUFDSElORQordHlwZSBzdXBwb3J0cyBldGhlcm5ldCwgd2lmaSwgc291bmQsIGFuZCBJbnRlbC92ZXNhIGdyYXBoaWNzIGJ5IGRlZmF1bHQgaW4KK2FkZGl0aW9uIHRvIGNvbW1vbiBQQyBpbnB1dCBkZXZpY2VzLCBidXNzZXMsIGFuZCBzbyBvbi4KKworRGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UsIGl0IGNhbiBib290IGZyb20gYSB0cmFkaXRpb25hbCBoYXJkLWRpc2ssIGEgVVNCIGRldmljZSwKK29yIG92ZXIgdGhlIG5ldHdvcmsuIFdyaXRpbmcgZ2VuZXJhdGVkIGltYWdlcyB0byBwaHlzaWNhbCBtZWRpYSBpcworc3RyYWlnaHRmb3J3YXJkIHdpdGggYSBjYXZlYXQgZm9yIFVTQiBkZXZpY2VzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFzc3VtZSB0aGUKK3RhcmdldCBib290IGRldmljZSBpcyAvZGV2L3NkYiwgYmUgc3VyZSB0byB2ZXJpZnkgdGhpcyBhbmQgdXNlIHRoZSBjb3JyZWN0CitkZXZpY2UgYXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgcnVuIGFzIHJvb3QgYW5kIGFyZSBub3QgcmV2ZXJzYWJsZS4KKworVVNCIERldmljZToKKyAgMS4gQnVpbGQgYSBsaXZlIGltYWdlLiBUaGlzIGltYWdlIHR5cGUgY29uc2lzdHMgb2YgYSBzaW1wbGUgZmlsZXN5c3RlbQorICAgICB3aXRob3V0IGEgcGFydGl0aW9uIHRhYmxlLCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgVVNCIGtleXMsIGFuZCB3aXRoIHRoZQorICAgICBkZWZhdWx0IHNldHVwIGZvciB0aGUgZ2VuZXJpY3g4NiBtYWNoaW5lLCB0aGlzIGltYWdlIHR5cGUgaXMgYnVpbHQKKyAgICAgYXV0b21hdGljYWxseSBmb3IgYW55IGltYWdlIHlvdSBidWlsZC4gRm9yIGV4YW1wbGU6CisKKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorCisgIDIuIFVzZSB0aGUgImRkIiB1dGlsaXR5IHRvIHdyaXRlIHRoZSBpbWFnZSB0byB0aGUgcmF3IGJsb2NrIGRldmljZS4gRm9yCisgICAgIGV4YW1wbGU6CisKKyAgICAgIyBkZCBpZj1jb3JlLWltYWdlLW1pbmltYWwtZ2VuZXJpY3g4Ni5oZGRpbWcgb2Y9L2Rldi9zZGIKKworICBJZiB0aGUgZGV2aWNlIGZhaWxzIHRvIGJvb3Qgd2l0aCAiQm9vdCBlcnJvciIgZGlzcGxheWVkLCBvciBhcHBhcmVudGx5CisgIHN0b3BzIGp1c3QgYWZ0ZXIgdGhlIFNZU0xJTlVYIHZlcnNpb24gYmFubmVyLCBpdCBpcyBsaWtlbHkgdGhlIEJJT1MgY2Fubm90CisgIHVuZGVyc3RhbmQgdGhlIHBoeXNpY2FsIGxheW91dCBvZiB0aGUgZGlzayAob3IgcmF0aGVyIGl0IGV4cGVjdHMgYQorICBwYXJ0aWN1bGFyIGxheW91dCBhbmQgY2Fubm90IGhhbmRsZSBhbnl0aGluZyBlbHNlKS4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZQorICBzb2x1dGlvbnMgdG8gdGhpcyBwcm9ibGVtOgorCisgIDEuIENoYW5nZSB0aGUgQklPUyBVU0IgRGV2aWNlIHNldHRpbmcgdG8gSEREIG1vZGUuIFRoZSBsYWJlbCB3aWxsIHZhcnkgYnkKKyAgICAgZGV2aWNlLCBidXQgdGhlIGlkZWEgaXMgdG8gZm9yY2UgQklPUyB0byByZWFkIHRoZSBDeWxpbmRlci9IZWFkL1NlY3RvcgorICAgICBnZW9tZXRyeSBmcm9tIHRoZSBkZXZpY2UuCisKKyAgMi4gV2l0aG91dCBzdWNoIGFuIG9wdGlvbiwgdGhlIEJJT1MgZ2VuZXJhbGx5IGJvb3RzIHRoZSBkZXZpY2UgaW4gVVNCLVpJUAorICAgICBtb2RlLiBUbyB3cml0ZSBhbiBpbWFnZSB0byBhIFVTQiBkZXZpY2UgdGhhdCB3aWxsIGJlIGJvb3RhYmxlIGluCisgICAgIFVTQi1aSVAgbW9kZSwgY2Fycnkgb3V0IHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKKworICAgICBhLiBEZXRlcm1pbmUgdGhlIGdlb21ldHJ5IG9mIHlvdXIgVVNCIGRldmljZSB1c2luZyBmZGlzazoKKworICAgICAjIGZkaXNrIC9kZXYvc2RiCisgICAgIENvbW1hbmQgKG0gZm9yIGhlbHApOiBwCisKKyAgICAgRGlzayAvZGV2L3NkYjogNDAxMSBNQiwgNDAxMTQ5MTMyOCBieXRlcworICAgICAxMjQgaGVhZHMsIDYyIHNlY3RvcnMvdHJhY2ssIDEwMTkgY3lsaW5kZXJzLCB0b3RhbCA3ODM0OTQ0IHNlY3RvcnMKKyAgICAgLi4uCisKKyAgICAgQ29tbWFuZCAobSBmb3IgaGVscCk6IHEKKworICAgICBiLiBDb25maWd1cmUgdGhlIFVTQiBkZXZpY2UgZm9yIFVTQi1aSVAgbW9kZToKKyAgICAgCisgICAgICMgbWtkaXNraW1hZ2UgLTQgL2Rldi9zZGIgMTAxOSAxMjQgNjIKKworICAgICBXaGVyZSAxMDE5LCAxMjQgYW5kIDYyIGFyZSB0aGUgY3lsaW5kZXIsIGhlYWQgYW5kIHNlY3RvcnMvdHJhY2sgY291bnRzCisgICAgIGFzIHJlcG9ydGVkIGJ5IGZkaXNrIChzdWJzdGl0dXRlIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgZm9yIHlvdXIgZGV2aWNlKS4KKyAgICAgV2hlbiB0aGUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCBhbmQgdGhlIGFjY2VzcyBMRUQgKGlmIGFueSkgb24gdGhlCisgICAgIGRldmljZSBzdG9wcyBmbGFzaGluZywgcmVtb3ZlIGFuZCByZWluc2VydCB0aGUgZGV2aWNlIHRvIGFsbG93IHRoZQorICAgICBrZXJuZWwgdG8gZGV0ZWN0IHRoZSBuZXcgcGFydGl0aW9uIGxheW91dC4KKworICAgICBjLiBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UgdG8gdGhlIFVTQi1aSVAgbW9kZSBkZXZpY2U6CisKKyAgICAgIyBta2RpciAvdG1wL2ltYWdlCisgICAgICMgbWtkaXIgL3RtcC91c2JrZXkKKyAgICAgIyBtb3VudCAtbyBsb29wIGNvcmUtaW1hZ2UtbWluaW1hbC1nZW5lcmljeDg2LmhkZGltZyAgL3RtcC9pbWFnZQorICAgICAjIG1vdW50IC9kZXYvc2RiNCAvdG1wL3VzYmtleQorICAgICAjIGNwIC1yZiAvdG1wL2ltYWdlLyogL3RtcC91c2JrZXkKKworICAgICBkLiBJbnN0YWxsIHRoZSBzeXNsaW51eCBib290IGxvYWRlcjoKKworICAgICAjIHN5c2xpbnV4IC9kZXYvc2RiNAorCisgICAgIGUuIFVubW91bnQgZXZlcnl0aGluZzoKKworICAgICAjIHVtb3VudCAvdG1wL2ltYWdlCisgICAgICMgdW1vdW50IC90bXAvdXNia2V5CisKKyAgSW5zdGFsbCB0aGUgYm9vdCBkZXZpY2UgaW4gdGhlIHRhcmdldCBib2FyZCBhbmQgY29uZmlndXJlIHRoZSBCSU9TIHRvIGJvb3QKKyAgZnJvbSBpdC4KKworICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBVU0ItWklQIHNjZW5hcmlvLCBzZWUgdGhlIHN5c2xpbnV4IGRvY3VtZW50YXRpb246CisgIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1ib290L3N5c2xpbnV4L3N5c2xpbnV4LmdpdDthPWJsb2JfcGxhaW47Zj1kb2MvdXNia2V5LnR4dDtoYj1IRUFECisKKworVGV4YXMgSW5zdHJ1bWVudHMgQmVhZ2xlYm9uZSAoYmVhZ2xlYm9uZSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBCZWFnbGVib25lIGlzIGFuIEFSTSBDb3J0ZXgtQTggZGV2ZWxvcG1lbnQgYm9hcmQgd2l0aCBVU0IsIEV0aGVybmV0LCAyRC8zRAorYWNjZWxlcmF0ZWQgZ3JhcGhpY3MsIGF1ZGlvLCBzZXJpYWwsIEpUQUcsIGFuZCBTRC9NTUMuIFRoZSBCbGFjayBhZGRzIGEgZmFzdGVyCitDUFUsIG1vcmUgUkFNLCBlTU1DIGZsYXNoIGFuZCBhIG1pY3JvIEhETUkgcG9ydC4gVGhlIGJlYWdsZWJvbmUgTUFDSElORSBpcwordGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOgorCisgIG8gQmVhZ2xlYm9uZSBCbGFjayBBNgorICBvIEJlYWdsZWJvbmUgQTYgKHRoZSBvcmlnaW5hbCAiV2hpdGUiIG1vZGVsKQorCitUaGUgQmVhZ2xlYm9uZSBCbGFjayBoYXMgZU1NQywgd2hpbGUgdGhlIFdoaXRlIGRvZXMgbm90LiBQcmVzc2luZyB0aGUgVVNFUi9CT09UCitidXR0b24gd2hlbiBwb3dlcmluZyBvbiB3aWxsIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgYm9vdCBvcmRlci4gQnV0IGZvciB0aGUgc2FrZQorb2Ygc2ltcGxpY2l0eSwgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB5b3UgaGF2ZSBlcmFzZWQgdGhlIGVNTUMgb24gdGhlIEJsYWNrLAorc28gaXRzIGJvb3QgYmVoYXZpb3IgbWF0Y2hlcyB0aGF0IG9mIHRoZSBXaGl0ZSBhbmQgYm9vdHMgb2ZmIG9mIFNEIGNhcmQuIFRvIGRvCit0aGlzLCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZyb20gdGhlIHUtYm9vdCBwcm9tcHQ6CisKKyAgICAjIG1tYyBkZXYgMQorICAgICMgbW1jIGVyYXNlIDAgNTEyCisKK1RvIGZ1cnRoZXIgdGFpbG9yIHRoZXNlIGluc3RydWN0aW9ucyBmb3IgeW91ciBib2FyZCwgcGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ib25lIGFuZCBodHRwOi8vd3d3LmJlYWdsZWJvYXJkLm9yZy9ibGFjaworCitGcm9tIGEgTGludXggc3lzdGVtIHdpdGggYWNjZXNzIHRvIHRoZSBpbWFnZSBmaWxlcyBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHMKK2FzIHJvb3QsIHJlcGxhY2luZyBtbWNibGswKiB3aXRoIHRoZSBTRCBjYXJkIGRldmljZSBvbiB5b3VyIG1hY2hpbmUgKHN1Y2ggYXMgc2RjCitpZiB1c2VkIHZpYSBhIHVzYiBjYXJkIHJlYWRlcik6CisKKyAgMS4gUGFydGl0aW9uIGFuZCBmb3JtYXQgYW4gU0QgY2FyZDoKKyAgICAgIyBmZGlzayAtbHUgL2Rldi9tbWNibGswCisKKyAgICAgRGlzayAvZGV2L21tY2JsazA6IDM5NTEgTUIsIDM5NTEwMzQzNjggYnl0ZXMKKyAgICAgMjU1IGhlYWRzLCA2MyBzZWN0b3JzL3RyYWNrLCA0ODAgY3lsaW5kZXJzLCB0b3RhbCA3NzE2ODY0IHNlY3RvcnMKKyAgICAgVW5pdHMgPSBzZWN0b3JzIG9mIDEgKiA1MTIgPSA1MTIgYnl0ZXMKKworICAgICAgICAgICAgIERldmljZSBCb290ICAgICAgU3RhcnQgICAgICAgICBFbmQgICAgICBCbG9ja3MgIElkIFN5c3RlbQorICAgICAvZGV2L21tY2JsazBwMSAgICogICAgICAgICAgNjMgICAgICAxNDQ1ODQgICAgICAgNzIyNjEgICBjIFdpbjk1IEZBVDMyIChMQkEpCisgICAgIC9kZXYvbW1jYmxrMHAyICAgICAgICAgIDE0NDU4NSAgICAgIDQ2NTg4NCAgICAgIDE2MDY1MCAgODMgTGludXgKKworICAgICAjIG1rZnMudmZhdCAtRiAxNiAtbiAiYm9vdCIgL2Rldi9tbWNibGswcDEKKyAgICAgIyBta2UyZnMgLWogLUwgInJvb3QiIC9kZXYvbW1jYmxrMHAyCisKKyAgVGhlIGZvbGxvd2luZyBhc3N1bWVzIHRoZSBTRCBjYXJkIHBhcnRpdGlvbnMgMSBhbmQgMiBhcmUgbW91bnRlZCBhdAorICAvbWVkaWEvYm9vdCBhbmQgL21lZGlhL3Jvb3QgcmVzcGVjdGl2ZWx5LiBSZW1vdmluZyB0aGUgY2FyZCBhbmQgcmVpbnNlcnRpbmcKKyAgaXQgd2lsbCBkbyBqdXN0IHRoYXQgb24gbW9zdCBtb2Rlcm4gTGludXggZGVza3RvcCBlbnZpcm9ubWVudHMuCisKKyAgVGhlIGZpbGVzIHJlZmVyZW5jZWQgYmVsb3cgYXJlIG1hZGUgYXZhaWxhYmxlIGFmdGVyIHRoZSBidWlsZCBpbgorICBidWlsZC90bXAvZGVwbG95L2ltYWdlcy4KKworICAyLiBJbnN0YWxsIHRoZSBib290IGxvYWRlcnMKKyAgICAgIyBjcCBNTE8tYmVhZ2xlYm9uZSAvbWVkaWEvYm9vdC9NTE8KKyAgICAgIyBjcCB1LWJvb3QtYmVhZ2xlYm9uZS5pbWcgL21lZGlhL2Jvb3QvdS1ib290LmltZworCisgIDMuIEluc3RhbGwgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAjIHRhciB4IC1DIC9tZWRpYS9yb290IC1mIGNvcmUtaW1hZ2UtJElNQUdFX1RZUEUtYmVhZ2xlYm9uZS50YXIuYnoyCisKKyAgNC4gSWYgdXNpbmcgY29yZS1pbWFnZS1iYXNlIG9yIGNvcmUtaW1hZ2Utc2F0byBpbWFnZXMsIHRoZSBTRCBjYXJkIGlzIHJlYWR5CisgICAgIGFuZCByb290ZnMgYWxyZWFkeSBjb250YWlucyB0aGUga2VybmVsLCBtb2R1bGVzIGFuZCBkZXZpY2UgdHJlZSAoRFRCKQorICAgICBmaWxlcyBuZWNlc3NhcnkgdG8gYmUgYm9vdGVkIHdpdGggVS1ib290J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBzbworICAgICBza2lwIGRpcmVjdGx5IHRvIHN0ZXAgOC4KKyAgICAgRm9yIGNvcmUtaW1hZ2UtbWluaW1hbCwgcHJvY2VlZCB0aHJvdWdoIG5leHQgc3RlcHMuCisKKyAgNS4gSWYgdXNpbmcgY29yZS1pbWFnZS1taW5pbWFsIHJvb3RmcywgaW5zdGFsbCB0aGUgbW9kdWxlcworICAgICAjIHRhciB4IC1DIC9tZWRpYS9yb290IC1mIG1vZHVsZXMtYmVhZ2xlYm9uZS50Z3oKKworICA2LiBJZiB1c2luZyBjb3JlLWltYWdlLW1pbmltYWwgcm9vdGZzLCBpbnN0YWxsIHRoZSBrZXJuZWwgekltYWdlIGludG8gL2Jvb3QKKyAgICAgZGlyZWN0b3J5IG9mIHJvb3RmcworICAgICAjIGNwIHpJbWFnZS1iZWFnbGVib25lLmJpbiAvbWVkaWEvcm9vdC9ib290L3pJbWFnZQorCisgIDcuIElmIHVzaW5nIGNvcmUtaW1hZ2UtbWluaW1hbCByb290ZnMsIGFsc28gaW5zdGFsbCBkZXZpY2UgdHJlZSAoRFRCKSBmaWxlcworICAgICBpbnRvIC9ib290IGRpcmVjdG9yeSBvZiByb290ZnMKKyAgICAgIyBjcCB6SW1hZ2UtYW0zMzV4LWJvbmUuZHRiIC9tZWRpYS9yb290L2Jvb3QvYW0zMzV4LWJvbmUuZHRiCisgICAgICMgY3AgekltYWdlLWFtMzM1eC1ib25lYmxhY2suZHRiIC9tZWRpYS9yb290L2Jvb3QvYW0zMzV4LWJvbmVibGFjay5kdGIKKworICA4LiBVbm1vdW50IHRoZSBTRCBwYXJ0aXRpb25zLCBpbnNlcnQgdGhlIFNEIGNhcmQgaW50byB0aGUgQmVhZ2xlYm9uZSwgYW5kCisgICAgIGJvb3QgdGhlIEJlYWdsZWJvbmUKKworCitGcmVlc2NhbGUgTVBDODMxNUUtUkRCIChtcGM4MzE1ZS1yZGIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBNUEM4MzE1IFBvd2VyUEMgcmVmZXJlbmNlIHBsYXRmb3JtIChNUEM4MzE1RS1SREIpIGlzIGFpbWVkIGF0IGhhcmR3YXJlIGFuZAorc29mdHdhcmUgZGV2ZWxvcG1lbnQgb2YgbmV0d29yayBhdHRhY2hlZCBzdG9yYWdlIChOQVMpIGFuZCBkaWdpdGFsIG1lZGlhIHNlcnZlcgorYXBwbGljYXRpb25zLiBUaGUgTVBDODMxNUUtUkRCIGZlYXR1cmVzIHRoZSBQb3dlclFVSUNDIElJIFBybyBwcm9jZXNzb3IsIHdoaWNoCitpbmNsdWRlcyBhIGJ1aWx0LWluIHNlY3VyaXR5IGFjY2VsZXJhdG9yLgorCisoTm90ZTogeW91IG1heSBmaW5kIGl0IGVhc2llciB0byBvcmRlciBNUEM4MzE1RS1SREJBOyB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlCitzYW1lIGJvYXJkIGluIGFuIGVuY2xvc3VyZSB3aXRoIGFjY2Vzc29yaWVzLiBJbiBhbnkgY2FzZSBpdCBpcyBmdWxseQorY29tcGF0aWJsZSB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gaGVyZS4pCisKK1NldHVwIGluc3RydWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZzoKKyogTkZTIHJvb3Qgc2V0dXAgb24geW91ciB3b3Jrc3RhdGlvbgorKiBURlRQIHNlcnZlciBpbnN0YWxsZWQgb24geW91ciB3b3Jrc3RhdGlvbgorKiBTdHJhaWdodC10aHJ1IDktY29uZHVjdG9yIHNlcmlhbCBjYWJsZSAoREI5LCBNL0YpIGNvbm5lY3RlZCBmcm9tIHlvdXIgCisgIFBDIHRvIFVBUlQxCisqIEV0aGVybmV0IGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgZXRoZXJuZXQgcG9ydCBvbiB0aGUgYm9hcmQKKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitOb3RlOiBpZiB5b3UgaGF2ZSBhbHRlcmVkIHlvdXIgYm9hcmQncyBldGhlcm5ldCBNQUMgYWRkcmVzcyhlcykgZnJvbSB0aGUKK2RlZmF1bHRzLCBvciB5b3UgbmVlZCB0byBkbyBzbyBiZWNhdXNlIHlvdSB3YW50IG11bHRpcGxlIGJvYXJkcyBvbiB0aGUgc2FtZQorbmV0d29yaywgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRoZSBkdHMgZmlsZSAocGF0Y2gKK2xpbnV4L2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlKS4gSWYKK3lvdSBoYXZlIGxlZnQgdGhlbSBhdCB0aGUgZmFjdG9yeSBkZWZhdWx0IHRoZW4geW91IHNob3VsZG4ndCBuZWVkIHRvIGRvCithbnl0aGluZyBoZXJlLgorCistLS0gQm9vdGluZyBmcm9tIE5GUyByb290IC0tLQorCitMb2FkIHRoZSBrZXJuZWwgYW5kIGR0YiAoZGV2aWNlIHRyZWUgYmxvYiksIGFuZCBib290IHRoZSBzeXN0ZW0gYXMgZm9sbG93czoKKworIDEuIEdldCB0aGUga2VybmVsICh1SW1hZ2UtbXBjODMxNWUtcmRiLmJpbikgYW5kIGR0YiAodUltYWdlLW1wYzgzMTVlLXJkYi5kdGIpCisgICAgZmlsZXMgZnJvbSB0aGUgdG1wL2RlcGxveSBkaXJlY3RvcnksIGFuZCBtYWtlIHRoZW0gYXZhaWxhYmxlIG9uIHlvdXIgVEZUUAorICAgIHNlcnZlci4KKworIDIuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAorICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAorICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgorCisgICQgcGljb2NvbSAvZGV2L3R0eVVTQjAgLWIgMTE1MjAwCisKKyAzLiBQb3dlciB1cCBvciByZXNldCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkCisgICAgdG8gZ2V0IHRvIHRoZSBVLUJvb3QgY29tbWFuZCBsaW5lCisKKyA0LiBTZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworID0+IHNldGVudiBpcGFkZHIgPGJvYXJkIGlwPgorID0+IHNldGVudiBzZXJ2ZXJpcCA8dGZ0cCBzZXJ2ZXIgaXA+CisgPT4gc2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjoyNTUuMjU1LjI1NS4wOm1wYzgzMTVlOmV0aDA6b2ZmIGNvbnNvbGU9dHR5UzAsMTE1MjAwCisKKyA1LiBEb3dubG9hZCB0aGUga2VybmVsIGFuZCBkdGIsIGFuZCBib290OgorCisgPT4gdGZ0cCAxMDAwMDAwIHVJbWFnZS1tcGM4MzE1ZS1yZGIuYmluCisgPT4gdGZ0cCAyMDAwMDAwIHVJbWFnZS1tcGM4MzE1ZS1yZGIuZHRiCisgPT4gYm9vdG0gMTAwMDAwMCAtIDIwMDAwMDAKKworLS0tIEJvb3RpbmcgZnJvbSBKRkZTMiByb290IC0tLQorCisgMS4gRmlyc3QgYm9vdCB0aGUgYm9hcmQgd2l0aCBORlMgcm9vdC4KKworIDIuIEVyYXNlIHRoZSBNVEQgcGFydGl0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyByb290OgorCisgICAgJCBmbGFzaF9lcmFzZWFsbCAgL2Rldi9tdGQzCisKKyAzLiBDb3B5IHRoZSBKRkZTMiBpbWFnZSB0byB0aGUgTVREIHBhcnRpdGlvbjoKKworICAgICQgZmxhc2hjcCBjb3JlLWltYWdlLW1pbmltYWwtbXBjODMxNWUtcmRiLmpmZnMyIC9kZXYvbXRkMworCisgNC4gVGhlbiByZWJvb3QgdGhlIGJvYXJkIGFuZCBzZXQgdXAgdGhlIGVudmlyb25tZW50IGluIFUtQm9vdDoKKworICAgID0+IHNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2szIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDAKKworCitVYmlxdWl0aSBOZXR3b3JrcyBFZGdlUm91dGVyIExpdGUgKGVkZ2Vyb3V0ZXIpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBFZGdlUm91dGVyIExpdGUgaXMgcGFydCBvZiB0aGUgRWRnZU1heCBzZXJpZXMuIEl0IGlzIGEgTUlQUzY0IHJvdXRlcgorKGJhc2VkIG9uIHRoZSBDYXZpdW0gT2N0ZW9uIHByb2Nlc3Nvcikgd2l0aCA1MTJNQiBvZiBSQU0sIHdoaWNoIHVzZXMgYW4KK2ludGVybmFsIFVTQiBwZW5kcml2ZSBmb3Igc3RvcmFnZS4KKworU2V0dXAgaW5zdHJ1Y3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHdpbGwgbmVlZCB0aGUgZm9sbG93aW5nOgorKiBSSjQ1IC0+IHNlcmlhbCAoInJvbGxvdmVyIikgY2FibGUgY29ubmVjdGVkIGZyb20geW91ciBQQyB0byB0aGUgQ09OU09MRQorICBwb3J0IG9uIHRoZSBkZXZpY2UKKyogRXRoZXJuZXQgY29ubmVjdGVkIHRvIHRoZSBmaXJzdCBldGhlcm5ldCBwb3J0IG9uIHRoZSBib2FyZAorCitJZiB1c2luZyBORlMgYXMgcGFydCBvZiB0aGUgc2V0dXAgcHJvY2VzcywgeW91IHdpbGwgYWxzbyBuZWVkOgorKiBORlMgcm9vdCBzZXR1cCBvbiB5b3VyIHdvcmtzdGF0aW9uCisqIFRGVFAgc2VydmVyIGluc3RhbGxlZCBvbiB5b3VyIHdvcmtzdGF0aW9uIChpZiBmZXRjaGluZyB0aGUga2VybmVsIGZyb20KKyAgVEZUUCwgc2VlIGJlbG93KS4KKworLS0tIFByZXBhcmF0aW9uIC0tLQorCitCdWlsZCBhbiBpbWFnZSAoZS5nLiBjb3JlLWltYWdlLW1pbmltYWwpIHVzaW5nICJlZGdlcm91dGVyIiBhcyB0aGUgTUFDSElORS4KK0luIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXQgaXMgYmFzZWQgb24gY29yZS1pbWFnZS1taW5pbWFsLiBBbm90aGVyIHRhcmdldAorbWF5IGJlIHNpbWlsaWFyIHdpdGggaXQuCisKKy0tLSBCb290aW5nIGZyb20gTkZTIHJvb3QgLyBrZXJuZWwgdmlhIFRGVFAgLS0tCisKK0xvYWQgdGhlIGtlcm5lbCwgYW5kIGJvb3QgdGhlIHN5c3RlbSBhcyBmb2xsb3dzOgorCisgMS4gR2V0IHRoZSBrZXJuZWwgKHZtbGludXgpIGZpbGUgZnJvbSB0aGUgdG1wL2RlcGxveS9pbWFnZXMvZWRnZXJvdXRlcgorICAgIGRpcmVjdG9yeSwgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgb24geW91ciBURlRQIHNlcnZlci4KKworIDIuIENvbm5lY3QgdGhlIGJvYXJkJ3MgZmlyc3Qgc2VyaWFsIHBvcnQgdG8geW91ciB3b3Jrc3RhdGlvbiBhbmQgdGhlbiBzdGFydCB1cAorICAgIHlvdXIgZmF2b3VyaXRlIHNlcmlhbCB0ZXJtaW5hbCBzbyB0aGF0IHlvdSB3aWxsIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aAorICAgIHRoZSBzZXJpYWwgY29uc29sZS4gSWYgeW91IGRvbid0IGhhdmUgYSBmYXZvdXJpdGUsIHBpY29jb20gaXMgc3VnZ2VzdGVkOgorCisgICQgcGljb2NvbSAvZGV2L3R0eVMwIC1iIDExNTIwMAorCisgMy4gUG93ZXIgdXAgb3IgcmVzZXQgdGhlIGJvYXJkIGFuZCBwcmVzcyBhIGtleSBvbiB0aGUgdGVybWluYWwgd2hlbiBwcm9tcHRlZAorICAgIHRvIGdldCB0byB0aGUgVS1Cb290IGNvbW1hbmQgbGluZQorCisgNC4gU2V0IHVwIHRoZSBlbnZpcm9ubWVudCBpbiBVLUJvb3Q6CisKKyA9PiBzZXRlbnYgaXBhZGRyIDxib2FyZCBpcD4KKyA9PiBzZXRlbnYgc2VydmVyaXAgPHRmdHAgc2VydmVyIGlwPgorCisgNS4gRG93bmxvYWQgdGhlIGtlcm5lbCBhbmQgYm9vdDoKKworID0+IHRmdHAgdGZ0cCAkbG9hZGFkZHIgdm1saW51eAorID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD08bmZzcm9vdCBpcD46PHJvb3RmcyBwYXRoPiBpcD08Ym9hcmQgaXA+OjxzZXJ2ZXIgaXA+OjxnYXRld2F5IGlwPjo8bmV0bWFzaz46ZWRnZXJvdXRlcjpldGgwOm9mZiBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo1MTJrKGJvb3QwKSw1MTJrKGJvb3QxKSw2NGtAMzA3MmsoZWVwcm9tKQorCistLS0gQm9vdGluZyBmcm9tIFVTQiByb290IC0tLQorCitUbyBib290IGZyb20gdGhlIFVTQiBkaXNrLCB5b3UgZWl0aGVyIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGVkZ2Vyb3V0ZXIKK2JveCBhbmQgcG9wdWxhdGUgaXQgZnJvbSBhbm90aGVyIGNvbXB1dGVyLCBvciB1c2UgYSBwcmV2aW91c2x5IGJvb3RlZCBORlMKK2ltYWdlIGFuZCBwb3B1bGF0ZSBmcm9tIHRoZSBlZGdlcm91dGVyIGl0c2VsZi4KKworVHlwZSAxOiBNb3VudGVkIFVTQiBkaXNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gYm9vdCBmcm9tIHRoZSBVU0IgZGlzayB0aGVyZSBhcmUgdHdvIGF2YWlsYWJsZSBwYXJ0aXRpb25zIG9uIHRoZSBmYWN0b3J5CitVU0Igc3RvcmFnZS4gVGhlIHJlc3Qgb2YgdGhpcyBndWlkZSBhc3N1bWVzIHRoYXQgdGhlc2UgcGFydGl0aW9ucyBhcmUgbGVmdAoraW50YWN0LiBJZiB5b3UgY2hhbmdlIHRoZSBwYXJ0aXRpb24gc2NoZW1lLCB5b3UgbXVzdCB1cGRhdGUgeW91ciBib290IG1ldGhvZAorYXBwcm9wcmlhdGVseS4KKworVGhlIHN0YW5kYXJkIHBhcnRpdGlvbnMgYXJlOgorCisgIC0gMTogdmZhdCBwYXJ0aXRpb24gY29udGFpbmluZyBmYWN0b3J5IGtlcm5lbHMKKyAgLSAyOiBleHQzIHBhcnRpdGlvbiBmb3IgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKworWW91IGNhbiBwbGFjZSB0aGUga2VybmVsIG9uIGVpdGhlciBwYXJ0aXRpb24gMSwgb3IgcGFydGl0aW9uIDIsIGJ1dCB0aGUgcm9vZnMKK211c3QgZ28gb24gcGFydGl0aW9uIDIgKGR1ZSB0byBpdHMgc2l6ZSkuCisKK05vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQorICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKKyAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgorCitTdGVwczoKKworIDEuIFJlbW92ZSB0aGUgVVNCIGRpc2sgZnJvbSB0aGUgZWRnZXJvdXRlciBhbmQgaW5zZXJ0IGl0IGludG8gYSBjb21wdXRlcgorICAgIHRoYXQgaGFzIGFjY2VzcyB0byB5b3VyIGJ1aWxkIGFydGlmYWN0cy4KKworIDIuIENvcHkgdGhlIGtlcm5lbCBpbWFnZSB0byB0aGUgVVNCIHN0b3JhZ2UgKGFzc3VtaW5nIGRpc2NvdmVyZWQgYXMgJ3NkYicgb24KKyAgICB0aGUgZGV2ZWxvcG1lbnQgbWFjaGluZSk6CisKKyAgICAyYSkgaWYgYm9vdGluZyBmcm9tIHZmYXQKKyAKKyAgICAgICAgIyBtb3VudCAvZGV2L3NkYjEgL21udAorICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50CisgICAgICAgICMgdW1vdW50IC9tbnQKKworICAgIDJiKSBpZiBib290aW5nIGZyb20gZXh0MworCisgICAgICAgICMgbWtmcy5leHQzIC1JIDEyOCAvZGV2L3NkYjIKKyAgICAgICAgIyBtb3VudCAvZGV2L3NkYjIgL21udAorICAgICAgICAjIG1rZGlyIC9tbnQvYm9vdAorICAgICAgICAjIGNwIHRtcC9kZXBsb3kvaW1hZ2VzL2VkZ2Vyb3V0ZXIvdm1saW51eCAvbW50L2Jvb3QKKyAgICAgICAgIyB1bW91bnQgL21udAorCisgMy4gRXh0cmFjdCB0aGUgcm9vdGZzIHRvIHRoZSBVU0Igc3RvcmFnZSBleHQzIHBhcnRpdGlvbgorCisgICAgICAgICMgbW91bnQgL2Rldi9zZGIyIC9tbnQKKyAgICAgICAgIyB0YXIgLXh2anBmIGNvcmUtaW1hZ2UtbWluaW1hbC1YWFgudGFyLmJ6MiAtQyAvbW50CisgICAgICAgICMgdW1vdW50IC9tbnQKKworIDQuIFJlYm9vdCB0aGUgYm9hcmQgYW5kIHByZXNzIGEga2V5IG9uIHRoZSB0ZXJtaW5hbCB3aGVuIHByb21wdGVkIHRvIGdldCB0byB0aGUgVS1Cb290CisgICAgY29tbWFuZCBsaW5lOgorCisgNS4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgICAgNWEpIHZmYXQgYm9vdAorCisgICAgICAgICA9PiBmYXRsb2FkIHVzYiAwOjEgJGxvYWRhZGRyIHZtbGludXgKKworICAgIDViKSBleHQzIGJvb3QKKworICAgICAgICAgPT4gZXh0MmxvYWQgdXNiIDA6MiAkbG9hZGFkZHIgYm9vdC92bWxpbnV4CisgCisgICAgPT4gYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L3NkYTIgcncgcm9vdHdhaXQgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkKKyAKKworVHlwZSAyOiBORlMKKy0tLS0tLS0tLS0tCisKK05vdGU6IElmIHlvdSBwbGFjZSB0aGUga2VybmVsIG9uIHRoZSBleHQzIHBhcnRpdGlvbiwgeW91IG11c3QgcmUtY3JlYXRlIHRoZQorICAgICAgZXh0MyBmaWxlc3lzdGVtLCBzaW5jZSB0aGUgZmFjdG9yeSB1LWJvb3QgY2FuIG9ubHkgaGFuZGxlIDEyOCBieXRlIGlub2RlcyBhbmQKKyAgICAgIGNhbm5vdCByZWFkIHRoZSBwYXJ0aXRpb24gb3RoZXJ3aXNlLgorCisgICAgICBUaGVzZSBib290IGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCB5b3UgaGF2ZSByZWNyZWF0ZWQgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aXRoCisgICAgICAxMjggYnl0ZSBpbm9kZXMsIHlvdSBoYXZlIGFuIHVwZGF0ZWQgdWJvb3Qgb3IgeW91IGFyZSBydW5uaW5nIGFuZCBpbWFnZSBjYXBhYmxlCisgICAgICBvZiBtYWtpbmcgdGhlIGZpbGVzeXN0ZW0gb24gdGhlIGJvYXJkIGl0c2VsZi4KKworCisgMS4gQm9vdCBmcm9tIE5GUyByb290CisKKyAyLiBNb3VudCB0aGUgVVNCIGRpc2sgcGFydGl0aW9uIDIgYW5kIHRoZW4gZXh0cmFjdCB0aGUgY29udGVudHMgb2YKKyAgICB0bXAvZGVwbG95L2NvcmUtaW1hZ2UtWFhYWC50YXIuYnoyIGludG8gaXQuCisKKyAgICBCZWZvcmUgc3RhcnRpbmcsIGNvcHkgY29yZS1pbWFnZS1taW5pbWFsLXh4eC50YXIuYnoyIGFuZCB2bWxpbnV4IGludG8KKyAgICByb290ZnMgcGF0aCBvbiB5b3VyIHdvcmtzdGF0aW9uLgorCisgICAgYW5kIHRoZW4sCisgIAorICAgICAgIyBtb3VudCAvZGV2L3NkYTIgL21lZGlhL3NkYTIKKyAgICAgICMgdGFyIC14dmpwZiBjb3JlLWltYWdlLW1pbmltYWwtWFhYLnRhci5iejIgLUMgL21lZGlhL3NkYTIKKyAgICAgICMgY3Agdm1saW51eCAvbWVkaWEvc2RhMi9ib290L3ZtbGludXgKKyAgICAgICMgdW1vdW50IC9tZWRpYS9zZGEyCisgICAgICAjIHJlYm9vdAorCisgMy4gUmVib290IHRoZSBib2FyZCBhbmQgcHJlc3MgYSBrZXkgb24gdGhlIHRlcm1pbmFsIHdoZW4gcHJvbXB0ZWQgdG8gZ2V0IHRvIHRoZSBVLUJvb3QKKyAgICBjb21tYW5kIGxpbmU6CisKKyAgICAjIHJlYm9vdAorCisgNC4gTG9hZCB0aGUga2VybmVsIGFuZCBib290OgorCisgICAgICA9PiBleHQybG9hZCB1c2IgMDoyICRsb2FkYWRkciBib290L3ZtbGludXgKKyAgICAgID0+IGJvb3RvY3RsaW51eCAkbG9hZGFkZHIgY29yZW1hc2s9MHgzIHJvb3Q9L2Rldi9zZGEyIHJ3IHJvb3R3YWl0IG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjUxMmsoYm9vdDApLDUxMmsoYm9vdDEpLDY0a0AzMDcyayhlZXByb20pCmRpZmYgLS1naXQgYS9iaXRiYWtlL0FVVEhPUlMgYi9iaXRiYWtlL0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvQVVUSE9SUwpAQCAtMCwwICsxLDEwIEBACitUaW0gQW5zZWxsIDxtaXRocm9AbWl0aGlzLm5ldD4KK1BoaWwgQmx1bmRlbGwgPHBiQGhhbmRoZWxkcy5vcmc+CitTZWIgRnJhbmtlbmd1bCA8c2ViQGZyYW5rZW5ndWwub3JnPgorSG9sZ2VyIEZyZXl0aGVyIDxob2xnZXJAbW9pamktbW9iaWxlLmNvbT4KK01hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luQGp1c3praWV3aWN6LmNvbS5wbD4KK0NocmlzIExhcnNvbiA8a2VyZ290aEBoYW5kaGVsZHMub3JnPgorVWxyaWNoIEx1Y2thcyA8bHVja2FzQG11c29mdC5kZT4KK01pY2tleSBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CitSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CitIb2xnZXIgU2NodXJpZyA8aG9sZ2Vyc2NodXJpZ0BnbXguZGU+CmRpZmYgLS1naXQgYS9iaXRiYWtlL0NPUFlJTkcgYi9iaXRiYWtlL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvQ09QWUlORwpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9iaXRiYWtlL0NoYW5nZUxvZyBiL2JpdGJha2UvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzJhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL0NoYW5nZUxvZwpAQCAtMCwwICsxLDMxNyBAQAorQ2hhbmdlcyBpbiBCaXRiYWtlIDEuOS54OgorCS0gQWRkIFBFIChQYWNrYWdlIEVwb2NoKSBzdXBwb3J0IGZyb20gUGhpbGlwcCBaYWJlbCAocEg1KQorCS0gVHJlYXQgcHl0aG9uIGZ1bmN0aW9ucyB0aGUgc2FtZSBhcyBzaGVsbCBmdW5jdGlvbnMgZm9yIGxvZ2dpbmcKKwktIFVzZSBUTVBESVIvYW5vbmZ1bmMgYXMgYSBfX2Fub25mdW5jIHRlbXAgZGlyZWN0b3J5IChUKQorCS0gQ2F0Y2ggdHJ1bmNhdGVkIGNhY2hlIGZpbGUgZXJyb3JzCisJLSBBbGxvdyBvcGVyYXRpb25zIG90aGVyIHRoYW4gYXNzaWdubWVudCBvbiBmbGFnIHZhcmlhYmxlcworCS0gQWRkIGNvZGUgdG8gaGFuZGxlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisJLSBGaXggY2FjaGUgZXJyb3JzIHdoZW4gZ2VuZXJhdGlvbiBkb3RHcmFwaHMKKwktIE1ha2Ugc3VyZSBfX2luaGVyaXRfY2FjaGUgaXMgdXBkYXRlZCBiZWZvcmUgY2FsbGluZyBpbmNsdWRlKCkgKGZyb20gTWljaGFlbCBLcmVsaW4pCisJLSBGaXggYnVnIHdoZW4gdGFyZ2V0IHdhcyBpbiBBU1NVTUVfUFJPVklERUQgKCMyMjM2KQorCS0gUmFpc2UgUGFyc2VFcnJvciBmb3IgZmlsZW5hbWVzIHdpdGggbXVsdGlwbGUgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBpbmZpbml0ZWx5IGxvb3BpbmcgKCMyMDYyKQorCS0gRml4IGludmFsaWQgcmVnZXhwIGluIEJCTUFTSyBlcnJvciBoYW5kbGluZyAobWlzc2luZyBpbXBvcnQpICgjMTEyNCkKKwktIFByb21vdGUgY2VydGFpbiB3YXJuaW5ncyBmcm9tIGRlYnVnIHRvIG5vdGUgMiBsZXZlbAorCS0gVXBkYXRlIG1hbnVhbAorCS0gQ29ycmVjdGx5IHJlZGlyZWN0IHN0ZGluIHdoZW4gZm9ya2luZworCS0gSWYgcGFyc2luZyBlcnJvcnMgYXJlIGZvdW5kLCBleGl0LCB0b28gbWFueSB1c2VycyBtaXNzIHRoZSBlcnJvcnMKKwktIFJlbW92ZSBzdXByaW91cnMgUFJFRkVSUkVEX1BST1ZJREVSIHdhcm5pbmdzCisJLSBzdm4gZmV0Y2hlcjogQWRkIF9idWlsZHN2bmNvbW1hbmQgZnVuY3Rpb24KKwktIEltcHJvdmUgY2VydGFpbiBlcnJvciBtZXNzYWdlcworCS0gUmV3cml0ZSBzdm4gZmV0Y2hlciB0byBtYWtlIGFkZGluZyBleHRyYSBvcGVyYXRpb25zIGVhc2llciAKKwkgIGFzIHBhcnQgb2YgZnV0dXJlIFNSQ0RBVEU9Im5vdyIgZml4ZXMKKwkgIChyZXF1aXJlcyBuZXcgRkVUQ0hDTURfc3ZuIGRlZmluaXRpb24gaW4gYml0YmFrZS5jb25mKQorCS0gQ2hhbmdlIFNWTkRJUiBsYXlvdXQgdG8gYmUgbW9yZSB1bmlxdWUgKGZpeGVzICMyNjQ0IGFuZCAjMjYyNCkKKwktIEFkZCBDb25maWdQYXJzZWQgRXZlbnQgYWZ0ZXIgY29uZmlndXJhdGlvbiBwYXJzaW5nIGlzIGNvbXBsZXRlCisJLSBBZGQgU1JDUkVWIHN1cHBvcnQgZm9yIHN2biBmZXRjaGVyCisJLSBkYXRhLmVtaXRfdmFyKCkgLSBvbmx5IGNhbGwgZ2V0VmFyIGlmIHdlIG5lZWQgdGhlIHZhcmlhYmxlCisJLSBTdG9wIGdlbmVyYXRpbmcgdGhlIEEgdmFyaWFibGUgKHNlZW1zIHRvIGJlIGxlZ2FjeSBjb2RlKQorCS0gTWFrZSBzdXJlIGludGVydGFzayBkZXBlbmRzIGdldCBwcm9jZXNzZWQgY29ycmVjdGluZyBpbiByZWN1cnNpdmUgZGVwZW5kcworCS0gQWRkIHBuLVBOIHRvIG92ZXJyaWRlcyB3aGVuIGV2YWx1YXRpbmcgUFJFRkVSUkVEX1ZFUlNJT04KKwktIEltcHJvdmUgdGhlIHByb2dyZXNzIGluZGljYXRvciBieSBza2lwcGluZyB0YXNrcyB0aGF0IGhhdmUgCisJICBhbHJlYWR5IHJ1biBiZWZvcmUgc3RhcnRpbmcgdGhlIGJ1aWxkIHJhdGhlciB0aGFuIGR1cmluZyBpdAorCS0gQWRkIHByb2ZpbGluZyBvcHRpb24gKC1QKQorCS0gQWRkIEJCX1NSQ1JFVl9QT0xJQ1kgdmFyaWFibGUgKGNsZWFyIG9yIGNhY2hlKSB0byBjb250cm9sIFNSQ1JFViBjYWNoZQorCS0gQWRkIFNSQ1JFVl9GT1JNQVQgc3VwcG9ydAorCS0gRml4IGxvY2FsIGZldGNoZXIncyBsb2NhbHBhdGggcmV0dXJuIHZhbHVlcworCS0gQXBwbHkgT1ZFUlJJREVTIGJlZm9yZSBwZXJmb3JtaW5nIGltbWVkaWF0ZSBleHBhbnNpb25zCisJLSBBbGxvdyB0aGUgLWIgLWUgb3B0aW9uIGNvbWJpbmF0aW9uIHRvIHRha2UgcmVndWxhciBleHByZXNzaW9ucworCS0gRml4IGhhbmRsaW5nIG9mIHZhcmlhYmxlcyB3aXRoIGV4cGFuc2lvbiBpbiB0aGUgbmFtZSB1c2luZyBfYXBwZW5kL19wcmVwZW5kCisJICBlLmcuIFJSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94eXogPSAiYWJjIgorCS0gQWRkIHBsYWluIG1lc3NhZ2UgZnVuY3Rpb24gdG8gYmIubXNnCisJLSBTb3J0IHRoZSBsaXN0IG9mIHByb3ZpZGVycyBiZWZvcmUgcHJvY2Vzc2luZyBzbyBkZXBlbmRlbmN5IHByb2JsZW1zIGFyZSAKKwkgIHJlcHJvZHVjaWJsZSByYXRoZXIgdGhhbiBlZmZlY3RpdmVseSByYW5kb20KKwktIEZpeC9pbXByb3ZlIGJpdGJha2UgLXMgb3V0cHV0CisJLSBBZGQgbG9ja2luZyBmb3IgZmV0Y2hlcnMgc28gb25seSBvbmUgdHJpZXMgdG8gZmV0Y2ggYSBnaXZlbiBmaWxlIGF0IGEgZ2l2ZW4gdGltZQorCS0gRml4IGludCgwKS9Ob25lIGNvbmZ1c2lvbiBpbiBydW5xdWV1ZS5weSB3aGljaCBjYXVzZXMgcmFuZG9tIGdhcHMgaW4gZGVwZW5kZW5jeSBjaGFpbnMJICAKKwktIEV4cGFuZCBkYXRhIGluIGFkZHRhc2tzCisJLSBQcmludCB0aGUgbGlzdCBvZiBtaXNzaW5nIERFUEVORFMsUkRFUEVORFMgZm9yIHRoZSAiTm8gYnVpbGRhYmxlIHByb3ZpZGVycyBhdmFpbGFibGUgZm9yIHJlcXVpcmVkLi4uLiIKKwkgIGVycm9yIG1lc3NhZ2UuCisJLSBSZXdvcmsgYWRkX3Rhc2sgdG8gYmUgbW9yZSBlZmZpY2llbnQgKDYlIHNwZWVkdXAsIDclIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyByZWR1Y3Rpb24pCisJLSBTb3J0IGRpZ3JhcGggb3V0cHV0IHRvIG1ha2UgYnVpbGRzIG1vcmUgcmVwcm9kdWNpYmxlCisJLSBTcGxpdCBleHBhbmRLZXlzIGludG8gdHdvIGZvciBsb29wcyB0byBiZW5lZml0IGZyb20gdGhlIGV4cGFuZF9jYWNoZSAoMTIlIHNwZWVkdXApCisJLSBydW5xdWV1ZS5weTogRml4IGlkZXBlbmRzIGhhbmRsaW5nIHRvIGF2b2lkIGRlcGVuZGVuY3kgZXJyb3JzCisJLSBDbGVhciB0aGUgdGVybWluYWwgVE9TVE9QIGZsYWcgaWYgc2V0IChhbmQgd2FybiB0aGUgdXNlcikKKwktIEZpeCByZWdyZXNzaW9uIGZyb20gcjY1MyBhbmQgbWFrZSBTUkNEQVRFL0NWU0RBVEUgd29yayBmb3IgcGFja2FnZXMgYWdhaW4KKwktIEZpeCBhIGJ1ZyBpbiBiYi5kZWNvZGV1cmwgd2hlcmUgaHR0cDovL3NvbWUud2hlcmUuY29tL3NvbWVmaWxlLnRneiBkZWNvZGVkIHRvIGhvc3Q9IiIgKCMxNTMwKQorCS0gV2FybiBhYm91dCBtYWxmb3JtZWQgUFJFRkVSUkVEX1BST1ZJREVSUyAoIzEwNzIpCisJLSBBZGQgc3VwcG9ydCBmb3IgQkJfTklDRV9MRVZFTCBvcHRpb24gKCMxNjI3KQorCS0gUHN5Y28gaXMgdXNlZCBvbmx5IG9uIHg4NiBhcyB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBvdGhlciBhcmNoaXRlY3R1cmVzLgorCS0gU29ydCBpbml0aWFsIHByb3ZpZGVycyBsaXN0IGJ5IGRlZmF1bHQgcHJlZmVyZW5jZSAoIzExNDUsICMyMDI0KQorCS0gSW1wcm92ZSBwcm92aWRlciBzb3J0aW5nIHNvIHByZWZlcmVkIHZlcnNpb25zIGhhdmUgcHJlZmVyZW5jZSBvdmVyIGxhdGVzdCB2ZXJzaW9ucyAoIzc2OCkKKwktIERldGVjdCBidWlsZHMgb2YgdGFza3Mgd2l0aCBvdmVybGFwcGluZyBwcm92aWRlcnMgYW5kIHdhcm4gKHdpbGwgYmVjb21lIGEgZmF0YWwgZXJyb3IpICgjMTM1OSkKKwktIEFkZCBNVUxUSV9QUk9WSURFUl9XSElURUxJU1QgdmFyaWFibGUgdG8gYWxsb3cga25vd24gc2FmZSBtdWx0aXBsZSBwcm92aWRlcnMgdG8gYmUgbGlzdGVkCisJLSBIYW5kbGUgcGF0aHMgaW4gc3ZuIGZldGNoZXIgbW9kdWxlIHBhcmFtZXRlcgorCS0gU3VwcG9ydCB0aGUgc3ludGF4ICJleHBvcnQgVkFSSUFCTEUiCisJLSBBZGQgYnpyIGZldGNoZXIKKwktIEFkZCBzdXBwb3J0IGZvciBjbGVhbmluZyBkaXJlY3RvcmllcyBiZWZvcmUgYSB0YXNrIGluIHRoZSBmb3JtOgorCSAgZG9fdGFza25hbWVbY2xlYW5kaXJzXSA9ICJkaXIiCisJLSBienIgZmV0Y2hlciB0d2Vha3MgZnJvbSBSb2JlcnQgU2NodXN0ZXIgKCMyOTEzKQorCS0gQWRkIG1lcmN1cmlhbCAoaGcpIGZldGNoZXIgZnJvbSBSb2JlcnQgU2NodXN0ZXIgKCMyOTEzKQorCS0gRG9uJ3QgYWRkIGR1cGxpY2F0ZXMgdG8gQkJQQVRICisJLSBGaXggcHJlZmVycmVkX3ZlcnNpb24gcmV0dXJuIHZhbHVlcyAocHJvdmlkZXJzLnB5KQorCS0gRml4ICdkZXBlbmRzJyBmbGFnIHNwbGl0dGluZworCS0gRml4IHVuZXhwb3J0IGhhbmRsaW5nICgjMzEzNSkKKwktIEFkZCBiYi5jb3B5ZmlsZSBmdW5jdGlvbiBzaW1pbGFyIHRvIGJiLm1vdmVmaWxlIChhbmQgaW1wcm92ZSBtb3ZlZmlsZSBlcnJvciByZXBvcnRpbmcpCisJLSBBbGxvdyBtdWx0aXBsZSBvcHRpb25zIGZvciBkZXB0YXNrIGZsYWcKKwktIFVzZSBnaXQtZmV0Y2ggaW5zdGVhZCBvZiBnaXQtcHVsbCByZW1vdmluZyBhbnkgbmVlZCBmb3IgbWVyZ2VzIHdoZW4gCisJICBmZXRjaGluZyAod2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaW5kZXgpLiBGaXhlcyBmZXRjaCBlcnJvcnMuCisJLSBBZGQgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTIG9wdGlvbiwgc2V0IHRvIDAgdG8gbWFrZSBnaXQgZmV0Y2hlcyAKKwkgIGZhc3RlciBhdCB0aGUgZXhwZW5zZSBvZiBub3QgY3JlYXRpbmcgbWlycm9yIHRhcmJhbGxzLgorCS0gU1JDUkVWIGhhbmRsaW5nIHVwZGF0ZXMsIGltcHJvdmVtZW50cyBhbmQgZml4ZXMgZnJvbSBQb2t5CisJLSBBZGQgYmIudXRpbHMubG9ja2ZpbGUoKSBhbmQgYmIudXRpbHMudW5sb2NrZmlsZSgpIGZyb20gUG9reQorCS0gQWRkIHN1cHBvcnQgZm9yIHRhc2sgc2VsZnN0YW1wIGFuZCBsb2NrZmlsZXMgZmxhZ3MKKwktIERpc2FibGUgdGFzayBudW1iZXIgYWNjZWxlcmF0aW9uIHNpbmNlIGl0IGNhbiBhbGxvdyB0aGUgdGFza3MgdG8gcnVuIAorCSAgb3V0IG9mIHNlcXVlbmNlCisJLSBJbXByb3ZlIHJ1bnF1ZXVlIGNvZGUgY29tbWVudHMKKwktIEFkZCB0YXNrIHNjaGVkdWxlciBhYnN0cmFjdGlvbiBhbmQgc29tZSBleGFtcGxlIHNjaGVkdWxlcnMKKwktIEltcHJvdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSBjaGFpbiBkZWJ1Z2dpbmcgY29kZSBhbmQgdXNlciBmZWVkYmFjaworCS0gRG9uJ3QgZ2l2ZSBhIHN0YWNrdHJhY2UgZm9yIGludmFsaWQgdGFza3MsIGhhdmUgYSB1c2VyIGZyaWVuZGx5IG1lc3NhZ2UgKCMzNDMxKQorCS0gQWRkIHN1cHBvcnQgZm9yICItZSB0YXJnZXQiICgjMzQzMikKKwktIEZpeCBzaGVsbCBzaG93ZGF0YSBjb21tYW5kICgjMzI1OSkKKwktIEZpeCBzaGVsbCBkYXRhIHVwZGF0aW5nIHByb2JsZW1zICgjMTg4MCkKKwktIFByb3Blcmx5IHJhaXNlIGVycm9ycyBmb3IgaW52YWxpZCBzb3VyY2UgVVJJIHByb3RvY29scworCS0gQ2hhbmdlIHRoZSB3Z2V0IGZldGNoZXIgZmFpbHVyZSBoYW5kbGluZyB0byBhdm9pZCBsb2NrZmlsZSBwcm9ibGVtcworCS0gQWRkIHN1cHBvcnQgZm9yIGJyYW5jaGVzIGluIGdpdCBmZXRjaGVyIChPdGF2aW8gU2FsdmFkb3IsIE1pY2hhZWwgTGF1ZXIpCisJLSBNYWtlIHRhc2tkYXRhIGFuZCBydW5xdWV1ZSBlcnJvcnMgbW9yZSB1c2VyIGZyaWVuZGx5CisJLSBBZGQgbm9yZWN1cnNlIGFuZCBmdWxscGF0aCBvcHRpb25zIHRvIGN2cyBmZXRjaGVyCisJLSBGaXggZXhpdCBjb2RlIGZvciBidWlsZCBmYWlsdXJlcyBpbiAtLWNvbnRpbnVlIG1vZGUKKwktIEZpeCBnaXQgYnJhbmNoIHRhZ3MgZmV0Y2hpbmcKKwktIENoYW5nZSBwYXJzZUNvbmZpZ3VyYXRpb25GaWxlIHNvIGl0IHdvcmtzIG9uIHJlYWwgZGF0YSwgbm90IGEgY29weQorCS0gSGFuZGxlICdiYXNlJyBpbmhlcml0IGFuZCBhbGwgb3RoZXIgSU5IRVJJVHMgZnJvbSBwYXJzZUNvbmZpZ3VyYXRpb25GaWxlIAorCSAgaW5zdGVhZCBvZiBCQkhhbmRsZXIKKwktIEZpeCBnZXRWYXJGbGFncyBidWcgaW4gZGF0YV9zbWFydAorCS0gT3B0bWlzZSBjYWNoZSBoYW5kbGluZyBieSBtb3JlIHF1aWNrbHkgZGV0ZWN0aW5nIGFuIGludmFsaWQgY2FjaGUsIG9ubHkgCisJICBzYXZpbmcgdGhlIGNhY2hlIHdoZW4gaXRzIGNoYW5nZWQsIG1vdmluZyB0aGUgY2FjaGUgdmFsaWRpdHkgY2hlY2sgaW50bworCSAgdGhlIHBhcnNpbmcgbG9vcCBhbmQgZmFjdG9yaW5nIHNvbWUgZ2V0VmFyIGNhbGxzIG91dHNpZGUgYSBmb3IgbG9vcAorCS0gQ29va2VyOiBSZW1vdmUgYSBkZWJ1ZyBtZXNzYWdlIGZyb20gdGhlIHBhcnNpbmcgbG9vcCB0byBsb3dlciBvdmVyaGVhZAorCS0gQ29udmVydCBidWlsZC5weSBleGVjX3Rhc2sgdG8gdXNlIGdldFZhckZsYWdzCisJLSBVcGRhdGUgc2hlbGwgdG8gdXNlIGNvb2tlci5idWlsZEZpbGUKKwktIEFkZCBTdGFtcFVwZGF0ZSBldmVudAorCS0gQ29udmVydCAtYiBvcHRpb24gdG8gdXNlIHRhc2tkYXRhL3J1bnF1ZXVlCisJLSBSZW1vdmUgZGlncmFwaCBhbmQgc3dpdGNoIHRvIG5ldyBzdGFtcCBjaGVja2luZyBjb2RlLiBleGVjX3Rhc2sgbm8gbG9uZ2VyCisJICBob25vdXJzIGRlcGVuZGVuY2llcworCS0gTWFrZSBmZXRjaGVyIHRpbWVzdGFtcCB1cGRhdGluZyBub24tZmF0YWwgd2hlbiBwZXJtaXNzaW9ucyBkb24ndCBhbGxvdyAKKwkgIHVwZGF0ZXMKKwktIEFkZCBCQl9TQ0hFRFVMRVIgdmFyaWFibGUvb3B0aW9uICgiY29tcGxldGlvbiIgb3IgInNwZWVkIikgY29udHJvbGxpbmcKKwkgIHRoZSB3YXkgYml0YmFrZSBzY2hlZHVsZXMgdGFza3MKKwktIEFkZCBCQl9TVEFNUF9QT0xJQ1kgdmFyaWFibGUvb3B0aW9uICgicGVyZmlsZSIgb3IgImZ1bGwiKSBjb250cm9sbGluZworCSAgaG93IGV4dGVuc2l2ZWx5IHN0YW1wcyBhcmUgbG9va2VkIGF0IGZvciB2YWxpZGl0eQorCS0gV2hlbiBoYW5kbGluZyBidWlsZCB0YXJnZXQgZmFpbHVyZXMgbWFrZSBzdXJlIGlkZXBlbmRzIGFyZSBjaGVja2VkIGFuZAorCSAgZmFpbGVkIHdoZXJlIG5lZWRlZC4gRml4ZXMgLS1jb250aW51ZSBtb2RlIGNyYXNoZXMuCisJLSBGaXggLWYgKGZvcmNlKSBpbiBjb25qdW5jdGlvbiB3aXRoIC1iCisJLSBGaXggcHJvYmxlbXMgd2l0aCByZWNyZGVwdGFzayBoYW5kbGluZyB3aGVyZSBzb21lIGlkZXBlbmRzIHdlcmVuJ3QgaGFuZGxlZAorCSAgY29ycmVjdGx5LgorCS0gSGFuZGxlIGV4aXQgY29kZXMgY29ycmVjdGx5IChmcm9tIHBINSkKKwktIFdvcmsgYXJvdW5kIHJlZnMvSEVBRCBpc3N1ZXMgd2l0aCBnaXQgb3ZlciBodHRwICgjMzQxMCkKKwktIEFkZCBwcm94eSBzdXBwb3J0IHRvIHRoZSBDVlMgZmV0Y2hlciAoZnJvbSBDeXJpbCBDaGVtcGFyYXRoeSkKKwktIEltcHJvdmUgcnVuZmV0Y2hjbWQgc28gZXJyb3JzIGFyZSBzZWVuIGFuZCB2YXJpb3VzIEdJVCB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkCisJLSBBZGQgYWJpbGl0eSB0byBmZXRjaGVycyB0byBjaGVjayBVUkwgdmFsaWRpdHkgd2l0aG91dCBkb3dubG9hZGluZworCS0gSW1wcm92ZSBydW50aW1lIFBSRUZFUlJFRF9QUk9WSURFUlMgd2FybmluZyBtZXNzYWdlCisJLSBBZGQgQkJfU1RBTVBfV0hJVEVMSVNUIG9wdGlvbiB3aGljaCBjb250YWlucyBhIGxpc3Qgb2Ygc3RhbXBzIHRvIGlnbm9yZSB3aGVuCisJICBjaGVja2luZyBzdGFtcCBkZXBlbmRlbmNpZXMgYW5kIHVzaW5nIGEgQkJfU1RBTVBfUE9MSUNZIG9mICJ3aGl0ZWxpc3QiCisJLSBObyBsb25nZXIgd2VpZ2h0IHByb3ZpZGVycyBvbiB0aGUgYmFzaXMgb2YgYSBwYWNrYWdlIGJlaW5nICJhbHJlYWR5IHN0YWdlZCIuIFRoaXMKKwkgIGxlYWRzIHRvIGJ1aWxkcyBiZWluZyBub24tZGV0ZXJtaW5pc3RpYy4KKwktIEZsdXNoIHN0ZG91dC9zdGRlcnIgYmVmb3JlIGZvcmtpbmcgdG8gZml4IGR1cGxpY2F0ZSBjb25zb2xlIG91dHB1dAorCS0gTWFrZSBzdXJlIHJlY3JkZXBzIHRhc2tzIGluY2x1ZGUgYWxsIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzIG9mIGEgZ2l2ZW4gZm4KKwktIEFkZCBiYi5ydW5xdWV1ZS5jaGVja19zdGFtcF9mbigpIGZvciB1c2UgYnkgcGFja2FnZWQtc3RhZ2luZworCS0gQWRkIFBFUlNJU1RFTlRfRElSIHRvIHN0b3JlIHRoZSBQZXJzaXN0RGF0YSBpbiBhIHBlcnNpc3RlbnQKKwkgIGRpcmVjdG9yeSAhPSB0aGUgY2FjaGUgZGlyLgorCS0gQWRkIG1kNSBhbmQgc2hhMjU2IGNoZWNrc3VtIGdlbmVyYXRpb24gZnVuY3Rpb25zIHRvIHV0aWxzLnB5CisJLSBDb3JyZWN0bHkgaGFuZGxlICctJyBjaGFyYWN0ZXJzIGluIGNsYXNzIG5hbWVzICgjMjk1OCkKKwktIE1ha2Ugc3VyZSBleHBhbmRLZXlzIGhhcyBiZWVuIGNhbGxlZCBvbiB0aGUgZGF0YSBkaWN0aW9uYXJ5IGJlZm9yZSBydW5uaW5nIHRhc2tzCisJLSBDb3JyZWN0bHkgYWRkIGEgdGFzayBvdmVycmlkZSBpbiB0aGUgZm9ybSB0YXNrLVRBU0tOQU1FLgorCS0gUmV2ZXJ0IHRoZSAnLScgY2hhcmFjdGVyIGZpeCBpbiBjbGFzcyBuYW1lcyBzaW5jZSBpdCBicmVha3MgdGhpbmdzCisJLSBXaGVuIGEgcmVnZXhwIGZhaWxzIHRvIGNvbXBpbGUgZm9yIFBBQ0tBR0VTX0RZTkFNSUMsIHByaW50IGEgbW9yZSB1c2VmdWwgZXJyb3IgKCM0NDQ0KQorCS0gQWxsb3cgdG8gY2hlY2tvdXQgQ1ZTIGJ5IERhdGUgYW5kIFRpbWUuIEp1c3QgYWRkIEhIbW0gdG8gdGhlIFNSQ0RBVEUuCisJLSBNb3ZlIHBydW5lZGlyIGZ1bmN0aW9uIHRvIHV0aWxzLnB5IGFuZCBhZGQgZXhwbG9kZV9kZXBfdmVyc2lvbnMgZnVuY3Rpb24KKwktIFJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBTUkNSRVYgPT0gJ0lOVkFMSUQnCisJLSBGaXggaGcgZmV0Y2hlciB1c2VybmFtZS9wYXNzd29yZCBoYW5kbGluZyBhbmQgZml4IGNyYXNoCisJLSBGaXggUEFDS0FHRVNfRFlOQU1JQyBoYW5kbGluZyBvZiBwYWNrYWdlcyB3aXRoICcrKycgaW4gdGhlIG5hbWUKKwktIFJlbmFtZSBfX2RlcGVuZHMgdG8gX19iYXNlX2RlcGVuZHMgYWZ0ZXIgY29uZmlndXJhdGlvbiBwYXJzaW5nIHNvIHdlIGRvbid0CisJICByZWNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uZmlnIGZpbGVzIHRpbWUgYWZ0ZXIgdGltZQorCS0gQWRkIGJldHRlciBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGhhbmRsaW5nLiBCeSBkZWZhdWx0IGl0IHdpbGwgbm93IG9ubHkgcGFzcyBjZXJ0YWluIAorCSAgd2hpdGVsaXN0ZWQgdmFyaWFibGVzIGludG8gdGhlIGRhdGEgc3RvcmUuIElmIEJCX1BSRVNFUlZFX0VOViBpcyBzZXQgYml0YmFrZSB3aWxsIHVzZQorCSAgYWxsIHZhcmlhYmxlIGZyb20gdGhlIGVudmlyb25tZW50LiBJZiBCQl9FTlZfV0hJVEVMSVNUIGlzIHNldCwgdGhhdCB3aGl0ZWxpc3Qgd2lsbCBiZQorCSAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBiaXRiYWtlIG9uZS4gQWx0ZXJuYXRpdmVseSwgQkJfRU5WX0VYVFJBV0hJVEUgY2FuIGJlIHVzZWQKKwkgIHRvIGV4dGVuZCB0aGUgaW50ZXJuYWwgd2hpdGVsaXN0LgorCS0gUGVyZm9yY2UgZmV0Y2hlciBmaXggdG8gdXNlIGNvbW1hbmRsaW5lIG9wdGlvbnMgaW5zdGVhZCBvZiBiZWluZyBvdmVycmlkZW4gYnkgdGhlIGVudmlyb25tZW50CisJLSBiYi51dGlscy5wcnVuZWRpciBjYW4gY29wZSB3aXRoIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVlcyB3aXRob3V0IGV4Y2VwdGlvbnMKKwktIHVzZSBAcmV2IHdoZW4gZG9pbmcgYSBzdm4gY2hlY2tvdXQKKwktIEFkZCBvc2MgZmV0Y2hlciAoZnJvbSBKb3NodWEgTG9jayBpbiBQb2t5KQorCS0gV2hlbiBTUkNSRVYgYXV0b3JldmlzaW9uaW5nIGZvciBhIHJlY2lwZSBpcyBpbiB1c2UsIGRvbid0IGNhY2hlIHRoZSByZWNpcGUKKwktIEFkZCB0cnlhbHRjb25maWdzIG9wdGlvbiB0byBjb250cm9sIHdoZXRoZXIgYml0YmFrZSB0cnlzIHVzaW5nIGFsdGVybmF0aXZlIHByb3ZpZGVycworCSAgdG8gZnVsZmlsIGZhaWxlZCBkZXBlbmRlbmNpZXMuIEl0IGRlZmF1bHRzIHRvIG9mZiwgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2luY2UgdGhpcworCSAgYmVoYXZpb3VyIGNvbmZ1c2VzIG1hbnkgdXNlcnMgYW5kIGlzbid0IG9mdGVuIHVzZWZ1bC4KKwktIEltcHJvdmUgbG9jayBmaWxlIGZ1bmN0aW9uIGVycm9yIGhhbmRsaW5nCisJLSBBZGQgdXNlcm5hbWUgaGFuZGxpbmcgdG8gdGhlIGdpdCBmZXRjaGVyIChSb2JlcnQgQnJhZ2cpCisJLSBBZGQgc3VwcG9ydCBmb3IgSFRUUF9QUk9YWSBhbmQgSFRUUF9QUk9YWV9JR05PUkUgdmFyaWFibGVzIHRvIHRoZSB3Z2V0IGZldGNoZXIKKwktIEV4cG9ydCBtb3JlIHZhcmlhYmxlcyB0byB0aGUgZmV0Y2hlciBjb21tYW5kcyB0byBhbGxvdyBzc2ggY2hlY2tvdXRzIGFuZCBjaGVja291dHMgdGhyb3VnaCAKKwkgIHByb3hpZXMgdG8gd29yayBiZXR0ZXIuIChmcm9tIFBva3kpCisJLSBBbHNvIGFsbG93IHVzZXIgYW5kIHBzd2Qgb3B0aW9ucyBpbiBTUkNfVVJJcyBnbG9iYWxseSAoZnJvbSBQb2t5KQorCS0gSW1wcm92ZSBwcm94eSBoYW5kbGluZyB3aGVuIHVzaW5nIG1pcnJvcnMgKGZyb20gUG9reSkKKwktIEFkZCBiYi51dGlscy5wcnVuZV9zdWZmaXggZnVuY3Rpb24KKwktIEZpeCBoZyBjaGVja291dHMgb2Ygc3BlY2lmaWMgcmV2aXNpb25zIChmcm9tIFBva3kpCisJLSBGaXggd2dldCBmZXRjaGluZyBvZiB1cmxzIHdpdGggcGFyYW1ldGVycyBzcGVjaWZpZWQgKGZyb20gUG9reSkKKwktIEFkZCB1c2VybmFtZSBoYW5kbGluZyB0byBnaXQgZmV0Y2hlciAoZnJvbSBQb2t5KQorCS0gU2V0IEhPTUUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgZmV0Y2hlciBjb21tYW5kcyAoZnJvbSBQb2t5KQorCS0gTWFrZSBzdXJlIGFsbG93ZWQgdmFyaWFibGVzIGluaGVyaXRlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCBhcmUgZXhwb3J0ZWQgYWdhaW4gKGZyb20gUG9reSkKKwktIFdoZW4gcnVubmluZyBhIHN0YWdlIHRhc2sgaW4gYmJzaGVsbCwgcnVuIHBvcHVsYXRlX3N0YWdpbmcsIG5vdCB0aGUgc3RhZ2UgdGFzayAoZnJvbSBQb2t5KQorCS0gRml4ICsgY2hhcmFjdGVyIGVzY2FwaW5nIGZyb20gUEFDS0FHRVNfRFlOQU1JQyAodGhhbmtzIE90YXZpbyBTYWx2YWRvcikKKwktIEFkZGl0aW9uIG9mIEJCQ0xBU1NFWFRFTkQgc3VwcG9ydCBmb3IgYWxsb3dpbmcgb25lIHJlY2lwZSB0byBwcm92aWRlIG11bHRpcGxlIHRhcmdldHMgKGZyb20gUG9reSkKKworQ2hhbmdlcyBpbiBCaXRiYWtlIDEuOC4wOgorCS0gUmVsZWFzZSAxLjcueCBhcyBhIHN0YWJsZSBzZXJpZXMKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNy54OgorCS0gTWFqb3IgdXBkYXRlcyBvZiB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBhbmQgZXhlY3V0aW9uCisJICBvZiB0YXNrcy4gQ29kZSBmcm9tIGJpbi9iaXRiYWtlIHJlcGxhY2VkIHdpdGggcnVucXVldWUucHkKKwkgIGFuZCB0YXNrZGF0YS5weQorCS0gTmV3IHRhc2sgZXhlY3V0aW9uIGNvZGUgc3VwcG9ydHMgbXVsdGl0aHJlYWRpbmcgd2l0aCBhIHNpbXBsaXN0aWMKKwkgIHRocmVhZGluZyBhbGdvcml0aG0gY29udHJvbGxlZCBieSBCQl9OVU1CRVJfVEhSRUFEUworCS0gQ2hhbmdlIG9mIHRoZSBTVk4gRmV0Y2hlciB0byBrZWVwIHRoZSBjaGVja291dCBhcm91bmQKKwkgIGNvdXJ0c2V5IG9mIFBhdWwgU29rb2xvdnNreSAoIzEzNjcpCisJLSBQQVRIIGZpeCB0byBiYmltYWdlICgjMTEwOCkKKwktIEFsbG93IGRlYnVnIGRvbWFpbnMgdG8gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZSAoLWwpCisJLSBBbGxvdyAnaW50ZXJhY3RpdmUnIHRhc2tzCisJLSBMb2dnaW5nIG1lc3NhZ2UgaW1wcm92ZW1lbnRzCisJLSBEcm9wIG5vdyB1bmVlZGVkIEJVSUxEX0FMTF9ERVBTIHZhcmlhYmxlCisJLSBBZGQgc3VwcG9ydCBmb3Igd2lsZGNhcmRzIHRvIC1iIG9wdGlvbgorCS0gTWFqb3Igb3ZlcmhhdWwgb2YgdGhlIGZldGNoZXJzIG1ha2luZyBhIGxhcmdlIGFtb3VudCBvZiBjb2RlIGNvbW1vbgorCSAgaW5jbHVkaW5nIG1pcnJvcmluZyBjb2RlCisJLSBGZXRjaGVycyBub3cgdG91Y2ggbWQ1IHN0YW1wcyB1cG9uIGFjY2VzcyAodG8gc2hvdyBhY3Rpdml0eSkKKwktIEZpeCAtZiBmb3JjZSBvcHRpb24gd2hlbiB1c2VkIHdpdGhvdXQgLWIgKGxvbmcgc3RhbmRpbmcgYnVnKQorCS0gQWRkIGV4cGFuZF9jYWNoZSB0byBkYXRhX2NhY2hlLnB5LCBjYWNoaW5nIGV4cGFuZGVkIGRhdGEgKHNwZWVkdXApCisJLSBBbGxvdyB2ZXJzaW9uIGZpZWxkIGluIERFUEVORFMgKGlnbm9yZWQgZm9yIG5vdykKKwktIEFkZCBhYm9ydCBmbGFnIHN1cHBvcnQgdG8gdGhlIHNoZWxsCisJLSBNYWtlIGluaGVyaXQgZmFpbCBpZiB0aGUgY2xhc3MgZG9lc24ndCBleGlzdCAoIzE0NzgpCisJLSBGaXggZGF0YS5lbWl0X2VudigpIHRvIGV4cGFuZCBrZXluYW1lcyBhcyB3ZWxsIGFzIHZhbHVlcworCS0gQWRkIHNzaCBmZXRjaGVyCisJLSBBZGQgcGVyZm9yY2UgZmV0Y2hlcgorCS0gTWFrZSBQUkVGRVJSRURfUFJPVklERVJfZm9vYmFyIGRlZmF1bHRzIHRvIGZvb2JhciBpZiBhdmFpbGFibGUKKwktIFNoYXJlIHRoZSBwYXJzZXIncyBtdGltZV9jYWNoZSwgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBzdGF0IHN5c2NhbGxzCisJLSBDb21waWxlIGFsbCBhbm9uZnVuY3MgYXQgb25jZSEgCisJICAqKiogQW5vbmZ1bmNzIG11c3Qgbm93IHVzZSBjb21tb24gc3BhY2luZyBmb3JtYXQgKioqCisJLSBNZW1vcmlzZSB0aGUgbGlzdCBvZiBoYW5kbGVycyBpbiBfX0JCSEFORExFUlMgYW5kIHRhc2tzIGluIF9fQkJUQVNLUworCSAgVGhpcyByZW1vdmVzIDIgbWlsbGlvbiBmdW5jdGlvbiBjYWxscyByZXN1bHRpbmcgaW4gYSA1LTEwJSBzcGVlZHVwCisJLSBBZGQgbWFucGFnZQorCS0gVXBkYXRlIGdlbmVyYXRlRG90R3JhcGggdG8gdXNlIHRhc2tEYXRhL3J1blF1ZXVlIGltcHJvdmluZyBhY2N1cmFjeQorCSAgYW5kIGFsc28gYWRkaW5nIGEgdGFzayBkZXBlbmRlbmN5IGdyYXBoCisJLSBGaXgvc3RhbmRhcmRpc2Ugb24gR1BMdjIgbGljZW5jZQorCS0gTW92ZSBtb3N0IGZ1bmN0aW9uYWxpdHkgZnJvbSBiaW4vYml0YmFrZSB0byBjb29rZXIucHkgYW5kIHNwbGl0IGludG8KKwkgIHNlcGFyYXRlIGZ1bmNpdG9ucworCS0gQ1ZTIGZldGNoZXI6IEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1kZWZhdWx0IHBvcnQKKwktIEFkZCBCQklOQ0xVREVMT0dTX0xJTkVTLCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHJlYWQgZnJvbSBhbnkgbG9nZmlsZQorCS0gRHJvcCBzaGViYW5ncyBmcm9tIGxpYi9iYiBzY3JpcHRzCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjYuMDoKKwktIEJldHRlciBtc2cgaGFuZGxpbmcKKwktIENPVyBkaWN0IGltcGxlbWVudGF0aW9uIGZyb20gVGltIEFuc2VsbCAobWl0aHJvKSBsZWFkaW5nCisJICB0byBiZXR0ZXIgcGVyZm9ybWFuY2UKKwktIFNwZWVkIHVwIG9mIC1zCisKK0NoYW5nZXMgaW4gQml0YmFrZSAxLjQuNDoKKwktIFNSQ0RBVEUgbm93IGhhbmRsaW5nIGNvdXJ0c2V5IEp1c3RpbiBQYXRyaW4KKwktICMxMDE3IGZpeCB0byB3b3JrIHdpdGggcm1fd29yaworCitDaGFuZ2VzIGluIEJpdEJha2UgMS40LjI6CisJLSBTZW5kIGxvZ3MgdG8gb2UucGFzdGViaW4uY29tIGluc3RlYWQgb2YgcGFzdGViaW4uY29tCisJICBmaXhlcyAjODU2CisJLSBDb3B5IHRoZSBpbnRlcm5hbCBiaXRiYWtlIGRhdGEgYmVmb3JlIGJ1aWxkaW5nIHRoZQorCSAgZGVwZW5kZW5jeSBncmFwaC4gVGhpcyBmaXhlcyBuYW5vIG5vdCBoYXZpbmcgYQorCSAgdmlydHVhbC9saWJjIGRlcGVuZGVuY3kKKwktIEFsbG93IG11bHRpcGxlIFRBUkJBTExfU1RBU0ggZW50cmllcworCS0gQ2FjaGUsIGNoZWNrIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGJlZm9yZSBjaGFuZ2luZworCSAgaW50byBpdAorCS0gZ2l0IHNwZWVkdXAgY2xvbmluZyBieSBub3QgZG9pbmcgYSBjaGVja291dAorCS0gYWxsb3cgdG8gaGF2ZSBzcGFjZXMgaW4gZmlsZW5hbWVzICguY29uZiwgLmJiLCAuYmJjbGFzcykKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuNC4wOgorCS0gRml4IHRvIGNoZWNrIGJvdGggUkRFUEVORFMgYW5kIFJERVBFTkRTXyR7UE59CisJLSBGaXggYSBSREVQRU5EUyBwYXJzaW5nIGJ1ZyBpbiB1dGlsczpleHBsb2RlX2RlcHMoKQorCS0gVXBkYXRlIGdpdCBmZXRjaGVyIGJlaGF2aW91ciB0byBtYXRjaCBnaXQgY2hhbmdlcworCS0gQVNTVU1FX1BST1ZJREVEIGFsbG93ZWQgdG8gaW5jbHVkZSBydW50aW1lIHBhY2thZ2VzCisJLSBnaXQgZmV0Y2hlciBjbGVhbnVwIGFuZCBlZmZpY2VuY3kgaW1wcm92ZW1lbnRzCisJLSBDaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgY2FjaGUKKwktIFVwZGF0ZSB1c2VybWFudWFsIHRvIGRvY3VtZW50IHRoZSBGZXRjaGVycworCS0gTWFqb3IgY2hhbmdlcyB0byBjYWNoaW5nIHdpdGggYSBuZXcgc3RyYXRlZ3kKKwkgIGdpdmluZyBhIG1ham9yIHBlcmZvcm1hbmNlIGluY3JlYXNlIHdoZW4gcmVwYXJzaW5nCisJICB3aXRoIGZldyBkYXRhIGNoYW5nZXMKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuMy4zOgorCS0gQ3JlYXRlIGEgbmV3IEZldGNoZXIgbW9kdWxlIHRvIGVhc2UgdGhlCisJICBkZXZlbG9wbWVudCBvZiBuZXcgRmV0Y2hlcnMuCisJICBJc3N1ZSAjNDM4IGZpeGVkIGJ5IHJwdXJkaWVAb3BlbmVkaGFuZC5jb20KKwktIE1ha2UgdGhlIFN1YnZlcnNpb24gZmV0Y2hlciBob25vciB0aGUgU1JDIERhdGUKKwkgIChDVlNEQVRFKS4KKwkgIElzc3VlICM1NTUgZml4ZWQgYnkgY2hyaXNAb3BlbmVkaGFuZC5jb20KKwktIEV4cGFuZCBQUkVGRVJSRURfUFJPVklERVIgcHJvcGVybHkKKwkgIElzc3VlICM0MzYgZml4ZWQgYnkgcnBydWRpZUBvcGVuZWRoYW5kLmNvbQorCS0gVHlwbyBmaXggZm9yIElzc3VlICM1MzEgYnkgUGhpbGlwcCBaYWJlbCBmb3IgdGhlCisJICBCaXRCYWtlIFNoZWxsCisJLSBJbnRyb2R1Y2UgYSBuZXcgc3BlY2lhbCB2YXJpYWJsZSBTUkNEQVRFIGFzCisJICBhIGdlbmVyaWMgbmFtaW5nIHRvIHJlcGxhY2UgQ1ZTREFURS4KKwktIEludHJvZHVjZSBhIG5ldyBrZXl3b3JkICdyZXF1aXJlZCcuIEluIGNvbnRyYXN0CisJICB0byAnaW5jbHVkZScgcGFyc2luZyB3aWxsIGZhaWwgaWYgYSB0byBiZSBpbmNsdWRlZAorCSAgZmlsZSBjYW4gbm90IGJlIGZvdW5kLgorCS0gUmVtb3ZlIGhhcmRjb2Rpbmcgb2YgdGhlIFNUQU1QIGRpcmVjdG9yeS4gUGF0Y2gKKwkgIGNvdXJ0c2V5IHBIaWxpcHAgWmFiZWwKKwktIFRyYWNrIHRoZSBSREVQRU5EUyBvZiBlYWNoIHBhY2thZ2UgKHJwdXJkaWVAb3BlbmVkaGFuZC5jb20pCisJLSBJbnRyb2R1Y2UgQlVJTERfQUxMX0RFUFMgdG8gYnVpbGQgYWxsIFJERVBFTkRTLiBFLmcKKwkgIHRoaXMgaXMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIE1ldGEgUGFja2FnZXMuCisJICAocnB1cmRpZUBvcGVuZWRoYW5kLmNvbSkuCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjMuMjoKKwktIHJlaW50ZWdyYXRpb24gb2YgbWFrZS5weSBpbnRvIEJpdEJha2UKKwktIGJicmVhZCBpcyBnb25lLCB1c2UgYml0YmFrZSAtZQorCS0gbG90cyBvZiBzaGVsbCB1cGRhdGVzIGFuZCBidWdmaXhlcworCS0gSW50cm9kdWN0aW9uIG9mIHRoZSAuPSBhbmQgPS4gb3BlcmF0b3IKKwktIFNvcnQgdmFyaWFibGVzLCBrZXlzIGFuZCBncm91cHMgaW4gYml0ZG9jCisJLSBGaXggcmVncmVzc2lvbiBpbiB0aGUgaGFuZGxpbmcgb2YgQkJDT0xMRUNUSU9OUworCS0gVXBkYXRlIHRoZSBiaXRiYWtlIHVzZXJtYW51YWwKKworQ2hhbmdlcyBpbiBCaXRCYWtlIDEuMy4wOgorCS0gYWRkIGJpdGJha2UgaW50ZXJhY3RpdmUgc2hlbGwgKGJpdGJha2UgLWkpCisJLSByZWZhY3RvciBiaXRiYWtlIHV0aWxpdHkgaW4gT08gc3R5bGUKKwktIGtpbGwgZGVmYXVsdCBhcmd1bWVudHMgaW4gbWV0aG9kcyBpbiB0aGUgYmIuZGF0YSBtb2R1bGUKKwktIGtpbGwgZGVmYXVsdCBhcmd1bWVudHMgaW4gbWV0aG9kcyBpbiB0aGUgYmIuZmV0Y2ggbW9kdWxlCisJLSB0aGUgaHR0cC9odHRwcy9mdHAgZmV0Y2hlciB3aWxsIGZhaWwgaWYgdGhlIHRvIGJlIAorCSAgZG93bmxvYWRlZCBmaWxlIHdhcyBub3QgZm91bmQgaW4gRExfRElSICh0aGlzIGlzIG5lZWRlZAorCSAgdG8gYXZvaWQgdW5wYWNraW5nIHRoZSBzb3VyY2Vmb3JnZSBtaXJyb3IgcGFnZSkKKwktIFN3aXRjaCB0byBhIGNvdyBsaWtlIGRhdGEgaW5zdGFuY2UgZm9yIHBlcnNpc3RlbnQgYW5kIG5vbgorCSAgcGVyc2lzdGluZyBtb2RlIChjYWxsZWQgZGF0YV9zbWFydC5weSkKKwktIENoYW5nZWQgdGhlIGNhbGxiYWNrIG9mIGJiLm1ha2UuY29sbGVjdF9iYmZpbGVzIHRvIGNhcnJ5CisJICBhZGRpdGlvbmFsIHBhcmFtZXRlcnMKKwktIERyYXN0aWNhbGx5IHJlZHVjZWQgdGhlIGFtb3VudCBvZiBuZWVkZWQgUkFNIGJ5IG5vdCBob2xkaW5nCisJICBlYWNoIGRhdGEgaW5zdGFuY2UgaW4gbWVtb3J5IHdoZW4gdXNpbmcgYSBjYWNoZS9wZXJzaXN0ZW50CisJICBzdG9yYWdlCisKK0NoYW5nZXMgaW4gQml0QmFrZSAxLjIuMToKKwlUaGUgMS4yLjEgcmVsZWFzZSBpcyBtZWFudCBhcyBhIGludGVybWVkaWF0ZSByZWxlYXNlIHRvIGxheSB0aGUKKwlncm91bmQgZm9yIG1vcmUgcmFkaWNhbCBjaGFuZ2VzLiBUaGUgbW9zdCBub3RhYmxlIGNoYW5nZXMgYXJlOgorCisJLSBEbyBub3QgaGFyZGNvZGUge30sIHVzZSBiYi5kYXRhLmluaXQoKSBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvCisJICBnZXQgYSBpbnN0YW5jZSBvZiBhIGRhdGEgY2xhc3MKKwktIGJiLmRhdGEuaW5pdCgpIGlzIGEgZmFjdG9yeSBhbmQgdGhlIG9sZCBiYi5kYXRhIG1ldGhvZHMgYXJlIGRlbGVnYXRlcworCS0gRG8gbm90IHVzZSBkZWVwY29weSB1c2UgYmIuZGF0YS5jcmVhdGVDb3B5KCkgaW5zdGVhZC4KKwktIFJlbW92ZWQgZGVmYXVsdCBhcmd1bWVudHMgaW4gYmIuZmV0Y2gKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9IRUFERVIgYi9iaXRiYWtlL0hFQURFUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODU5MjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9IRUFERVIKQEAgLTAsMCArMSwxOSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyMgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvTElDRU5TRSBiL2JpdGJha2UvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTAxNDBjCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9MSUNFTlNFCkBAIC0wLDAgKzEsMTAgQEAKK0JpdEJha2UgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4wLiBTZWUgQ09QWUlORyBmb3IgZnVydGhlciBkZXRhaWxzLgorCitUaGUgZm9sbG93aW5nIGV4dGVybmFsIGNvbXBvbmVudHMgYXJlIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb2Z0d2FyZToKKworKiBUaGUgVG9hc3RlciBTaW1wbGUgVUkgYXBwbGljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgRGphbmdvIHByb2plY3QgdGVtcGxhdGUsIHRoZSBmaWxlcyBvZiB3aGljaCBhcmUgY292ZXJlZCBieSB0aGUgQlNEIGxpY2Vuc2UgYW5kIGFyZSBjb3B5cmlnaHQgKGMpIERqYW5nbyBTb2Z0d2FyZQorRm91bmRhdGlvbiBhbmQgaW5kaXZpZHVhbCBjb250cmlidXRvcnMuCisKKyogVHdpdHRlciBCb290c3RyYXAgKGluY2x1ZGluZyBHbHlwaGljb25zKSwgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wLgorCisqIGpRdWVyeSBpcyByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2JpdGJha2UvYmluL2JpdGJha2UgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzZDEzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlCkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYicpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcmRhdGEKK2Zyb20gYmIubWFpbiBpbXBvcnQgYml0YmFrZV9tYWluLCBCaXRCYWtlQ29uZmlnUGFyYW1ldGVycywgQkJNYWluRXhjZXB0aW9uCisKK19fdmVyc2lvbl9fID0gIjEuMjcuMSIKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBpZiBfX3ZlcnNpb25fXyAhPSBiYi5fX3ZlcnNpb25fXzoKKyAgICAgICAgc3lzLmV4aXQoIkJpdGJha2UgY29yZSB2ZXJzaW9uIGFuZCBwcm9ncmFtIHZlcnNpb24gbWlzbWF0Y2ghIikKKyAgICB0cnk6CisgICAgICAgIHN5cy5leGl0KGJpdGJha2VfbWFpbihCaXRCYWtlQ29uZmlnUGFyYW1ldGVycyhzeXMuYXJndiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZXJkYXRhLkNvb2tlckNvbmZpZ3VyYXRpb24oKSkpCisgICAgZXhjZXB0IEJCTWFpbkV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgIHN5cy5leGl0KGVycikKKyAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWRpZmZzaWdzIGIvYml0YmFrZS9iaW4vYml0YmFrZS1kaWZmc2lncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOTZmMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9iaW4vYml0YmFrZS1kaWZmc2lncwpAQCAtMCwwICsxLDEzOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgYml0YmFrZS1kaWZmc2lncworIyBCaXRCYWtlIHRhc2sgc2lnbmF0dXJlIGRhdGEgY29tcGFyaXNvbiB1dGlsaXR5CisjCisjIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKKworaW1wb3J0IGJiLnRpbmZvaWwKK2ltcG9ydCBiYi5zaWdnZW4KKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1kaWZmc2lncycpCisKK2RlZiBmaW5kX2NvbXBhcmVfdGFzayhiYmhhbmRsZXIsIHBuLCB0YXNrbmFtZSk6CisgICAgIiIiIEZpbmQgdGhlIG1vc3QgcmVjZW50IHNpZ25hdHVyZSBmaWxlcyBmb3IgdGhlIHNwZWNpZmllZCBQTi90YXNrIGFuZCBjb21wYXJlIHRoZW0gIiIiCisKKyAgICBkZWYgZ2V0X2hhc2h2YWwoc2lnaW5mbyk6CisgICAgICAgIGlmIHNpZ2luZm8uZW5kc3dpdGgoJy5zaWdpbmZvJyk6CisgICAgICAgICAgICByZXR1cm4gc2lnaW5mby5ycGFydGl0aW9uKCc6JylbMl0ucGFydGl0aW9uKCdfJylbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzaWdpbmZvLnJwYXJ0aXRpb24oJy4nKVsyXQorCisgICAgaWYgbm90IGhhc2F0dHIoYmIuc2lnZ2VuLCAnZmluZF9zaWdpbmZvJyk6CisgICAgICAgIGxvZ2dlci5lcnJvcignTWV0YWRhdGEgZG9lcyBub3Qgc3VwcG9ydCBmaW5kaW5nIHNpZ25hdHVyZSBkYXRhIGZpbGVzJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCB0YXNrbmFtZS5zdGFydHN3aXRoKCdkb18nKToKKyAgICAgICAgdGFza25hbWUgPSAnZG9fJXMnICUgdGFza25hbWUKKworICAgIGZpbGVkYXRlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8ocG4sIHRhc2tuYW1lLCBOb25lLCBiYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgbGF0ZXN0ZmlsZXMgPSBzb3J0ZWQoZmlsZWRhdGVzLmtleXMoKSwga2V5PWxhbWJkYSBmOiBmaWxlZGF0ZXNbZl0pWy0zOl0KKyAgICBpZiBub3QgbGF0ZXN0ZmlsZXM6CisgICAgICAgIGxvZ2dlci5lcnJvcignTm8gc2lnZGF0YSBmaWxlcyBmb3VuZCBtYXRjaGluZyAlcyAlcycgJSAocG4sIHRhc2tuYW1lKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBlbGlmIGxlbihsYXRlc3RmaWxlcykgPCAyOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ09ubHkgb25lIG1hdGNoaW5nIHNpZ2RhdGEgZmlsZSBmb3VuZCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrICglcyAlcyknICUgKHBuLCB0YXNrbmFtZSkpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgZWxzZToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgbGF0ZXN0ZmlsZXMgY29udGFpbiAzIGVsZW1lbnRzIGFuZCB0aGUgZmlyc3QgdHdvIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZS4KKyAgICAgICAgIyBJbiB0aGlzIGNhc2UsIHdlIGRlbGV0ZSB0aGUgc2Vjb25kIGVsZW1lbnQuCisgICAgICAgICMgVGhlIGFib3ZlIGNhc2UgaXMgYWN0dWFsbHkgdGhlIG1vc3QgY29tbW9uIG9uZS4gQmVjYXVzZSB3ZSBtYXkgaGF2ZSBzaWdkYXRhIGZpbGUgYW5kIHNpZ2luZm8KKyAgICAgICAgIyBmaWxlIGhhdmluZyB0aGUgc2FtZSBoYXNoIHZhbHVlLiBDb21wYXJpbmcgc3VjaCB0d28gZmlsZXMgbWFrZXMgbm8gc2Vuc2UuCisgICAgICAgIGlmIGxlbihsYXRlc3RmaWxlcykgPT0gMzoKKyAgICAgICAgICAgIGhhc2gwID0gZ2V0X2hhc2h2YWwobGF0ZXN0ZmlsZXNbMF0pCisgICAgICAgICAgICBoYXNoMSA9IGdldF9oYXNodmFsKGxhdGVzdGZpbGVzWzFdKQorICAgICAgICAgICAgaWYgaGFzaDAgPT0gaGFzaDE6CisgICAgICAgICAgICAgICAgbGF0ZXN0ZmlsZXMucG9wKDEpCisKKyAgICAgICAgIyBEZWZpbmUgcmVjdXJzaW9uIGNhbGxiYWNrCisgICAgICAgIGRlZiByZWN1cnNlY2Ioa2V5LCBoYXNoMSwgaGFzaDIpOgorICAgICAgICAgICAgaGFzaGVzID0gW2hhc2gxLCBoYXNoMl0KKyAgICAgICAgICAgIGhhc2hmaWxlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8oa2V5LCBOb25lLCBoYXNoZXMsIGJiaGFuZGxlci5jb25maWdfZGF0YSkKKworICAgICAgICAgICAgcmVjb3V0ID0gW10KKyAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IDI6CisgICAgICAgICAgICAgICAgb3V0MiA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGhhc2hmaWxlc1toYXNoMV0sIGhhc2hmaWxlc1toYXNoMl0sIHJlY3Vyc2VjYikKKyAgICAgICAgICAgICAgICByZWNvdXQuZXh0ZW5kKGxpc3QoJyAgJyArIGwgZm9yIGwgaW4gb3V0MikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY291dC5hcHBlbmQoIlVuYWJsZSB0byBmaW5kIG1hdGNoaW5nIHNpZ2RhdGEgZm9yICVzIHdpdGggaGFzaGVzICVzIG9yICVzIiAlIChrZXksIGhhc2gxLCBoYXNoMikpCisKKyAgICAgICAgICAgIHJldHVybiByZWNvdXQKKworICAgICAgICAjIFJlY3Vyc2UgaW50byBzaWduYXR1cmUgY29tcGFyaXNvbgorICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhsYXRlc3RmaWxlc1swXSwgbGF0ZXN0ZmlsZXNbMV0sIHJlY3Vyc2VjYikKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgcHJpbnQgJ1xuJy5qb2luKG91dHB1dCkKKyAgICBzeXMuZXhpdCgwKQorCisKKworcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgIGRlc2NyaXB0aW9uID0gIkNvbXBhcmVzIHNpZ2luZm8vc2lnZGF0YSBmaWxlcyB3cml0dGVuIG91dCBieSBCaXRCYWtlIiwKKyAgICB1c2FnZSA9ICIiIgorICAlcHJvZyAtdCByZWNpcGVuYW1lIHRhc2tuYW1lCisgICVwcm9nIHNpZ2RhdGFmaWxlMSBzaWdkYXRhZmlsZTIKKyAgJXByb2cgc2lnZGF0YWZpbGUxIiIiKQorCitwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10YXNrIiwKKyAgICAgICAgaGVscCA9ICJmaW5kIHRoZSBzaWduYXR1cmUgZGF0YSBmaWxlcyBmb3IgbGFzdCB0d28gcnVucyBvZiB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIGNvbXBhcmUgdGhlbSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJ0YXNrYXJncyIsIG5hcmdzPTIsIG1ldGF2YXI9J3JlY2lwZW5hbWUgdGFza25hbWUnKQorCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKK2lmIG9wdGlvbnMudGFza2FyZ3M6CisgICAgdGluZm9pbCA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICBmaW5kX2NvbXBhcmVfdGFzayh0aW5mb2lsLCBvcHRpb25zLnRhc2thcmdzWzBdLCBvcHRpb25zLnRhc2thcmdzWzFdKQorZWxzZToKKyAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsc2U6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoc3lzLmFyZ3ZbMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZSkpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBleGNlcHQgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBkYXRhIC0gZW5zdXJlIHlvdSBhcmUgc3BlY2lmeWluZyBzaWdkYXRhL3NpZ2luZm8gZmlsZXMnKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICBwcmludCAnXG4nLmpvaW4ob3V0cHV0KQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9iaW4vYml0YmFrZS1kdW1wc2lnIGIvYml0YmFrZS9iaW4vYml0YmFrZS1kdW1wc2lnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1NmQ5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlLWR1bXBzaWcKQEAgLTAsMCArMSw2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgYml0YmFrZS1kdW1wc2lnCisjIEJpdEJha2UgdGFzayBzaWduYXR1cmUgZHVtcCB1dGlsaXR5CisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKKworaW1wb3J0IGJiLnNpZ2dlbgorCitkZWYgbG9nZ2VyX2NyZWF0ZShuYW1lLCBvdXRwdXQ9c3lzLnN0ZGVycik6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKG91dHB1dCkKKyAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICBpZiBvdXRwdXQuaXNhdHR5KCk6CisgICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCdiaXRiYWtlLWR1bXBzaWcnKQorCitwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgZGVzY3JpcHRpb24gPSAiRHVtcHMgc2lnaW5mby9zaWdkYXRhIGZpbGVzIHdyaXR0ZW4gb3V0IGJ5IEJpdEJha2UiLAorICAgIHVzYWdlID0gIiIiCisgICVwcm9nIHNpZ2RhdGFmaWxlIiIiKQorCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKK2lmIGxlbihhcmdzKSA9PSAxOgorICAgIHBhcnNlci5wcmludF9oZWxwKCkKK2Vsc2U6CisgICAgaW1wb3J0IGNQaWNrbGUKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IGJiLnNpZ2dlbi5kdW1wX3NpZ2ZpbGUoYXJnc1sxXSkKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGV4Y2VwdCBjUGlja2xlLlVucGlja2xpbmdFcnJvciwgRU9GRXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBzaWduYXR1cmUgZGF0YSAtIGVuc3VyZSB5b3UgYXJlIHNwZWNpZnlpbmcgYSBzaWdkYXRhL3NpZ2luZm8gZmlsZScpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvdXRwdXQ6CisgICAgICAgIHByaW50ICdcbicuam9pbihvdXRwdXQpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycyBiL2JpdGJha2UvYmluL2JpdGJha2UtbGF5ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiMTMwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlLWxheWVycwpAQCAtMCwwICsxLDEwNzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgc2NyaXB0IGhhcyBzdWJjb21tYW5kcyB3aGljaCBvcGVyYXRlIGFnYWluc3QgeW91ciBiaXRiYWtlIGxheWVycywgZWl0aGVyCisjIGRpc3BsYXlpbmcgdXNlZnVsIGluZm9ybWF0aW9uLCBvciBhY3RpbmcgYWdhaW5zdCB0aGVtLgorIyBTZWUgdGhlIGhlbHAgb3V0cHV0IGZvciBkZXRhaWxzIG9uIGF2YWlsYWJsZSBjb21tYW5kcy4KKworIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZm5tYXRjaAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJlCitpbXBvcnQgaHR0cGxpYiwgdXJscGFyc2UsIGpzb24KK2ltcG9ydCBzdWJwcm9jZXNzCisKK2JpbmRpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK3RvcGRpciA9IG9zLnBhdGguZGlybmFtZShiaW5kaXIpCitzeXMucGF0aFswOjBdID0gW29zLnBhdGguam9pbih0b3BkaXIsICdsaWInKV0KKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBiYi50aW5mb2lsCisKKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSwgb3V0cHV0PXN5cy5zdGRlcnIpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgaWYgb3V0cHV0LmlzYXR0eSgpOgorICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKKworbG9nZ2VyID0gbG9nZ2VyX2NyZWF0ZSgnYml0YmFrZS1sYXllcnMnLCBzeXMuc3Rkb3V0KQorCitjbGFzcyBVc2VyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIENvbW1hbmRzKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJiaGFuZGxlciA9IE5vbmUKKyAgICAgICAgc2VsZi5iYmxheWVycyA9IFtdCisKKyAgICBkZWYgaW5pdF9iYmhhbmRsZXIoc2VsZiwgY29uZmlnX29ubHkgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmJiaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyID0gYmIudGluZm9pbC5UaW5mb2lsKHRyYWNraW5nPVRydWUpCisgICAgICAgICAgICBzZWxmLmJibGF5ZXJzID0gKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIucHJlcGFyZShjb25maWdfb25seSkKKyAgICAgICAgICAgIGxheWVyY29uZnMgPSBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS52YXJoaXN0b3J5LmdldF92YXJpYWJsZV9pdGVtc19maWxlcygnQkJGSUxFX0NPTExFQ1RJT05TJywgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEpCisgICAgICAgICAgICBzZWxmLmJiZmlsZV9jb2xsZWN0aW9ucyA9IHtsYXllcjogb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShwYXRoKSkgZm9yIGxheWVyLCBwYXRoIGluIGxheWVyY29uZnMuaXRlcml0ZW1zKCl9CisKKworICAgIGRlZiBkb19zaG93X2xheWVycyhzZWxmLCBhcmdzKToKKyAgICAgICAgIiIic2hvdyBjdXJyZW50IGNvbmZpZ3VyZWQgbGF5ZXJzIiIiCisgICAgICAgIHNlbGYuaW5pdF9iYmhhbmRsZXIoY29uZmlnX29ubHkgPSBUcnVlKQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMiICUgKCJsYXllciIubGp1c3QoMjApLCAicGF0aCIubGp1c3QoNDApLCAicHJpb3JpdHkiKSkKKyAgICAgICAgbG9nZ2VyLnBsYWluKCc9JyAqIDc0KQorICAgICAgICBmb3IgbGF5ZXIsIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGxheWVyZGlyID0gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgICVzICAlZCIgJSAobGF5ZXJuYW1lLmxqdXN0KDIwKSwgbGF5ZXJkaXIubGp1c3QoNDApLCBwcmkpKQorCisKKyAgICBkZWYgZG9fYWRkX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBsYXllciB0byBiYmxheWVycy5jb25mCisKK0FkZHMgdGhlIHNwZWNpZmllZCBsYXllciB0byBiYmxheWVycy5jb25mCisiIiIKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5sYXllcmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZG9lc24ndCBleGlzdFxuIikKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgbGF5ZXJfY29uZiA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsYXllcl9jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNwZWNpZmllZCBsYXllciBkaXJlY3RvcnkgZG9lc24ndCBjb250YWluIGEgY29uZi9sYXllci5jb25mIGZpbGVcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmZcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIChub3RhZGRlZCwgXykgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgbGF5ZXJkaXIsIE5vbmUpCisgICAgICAgIGlmIG5vdGFkZGVkOgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbm90YWRkZWQ6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU3BlY2lmaWVkIGxheWVyICVzIGlzIGFscmVhZHkgaW4gQkJMQVlFUlNcbiIgJSBpdGVtKQorCisKKyAgICBkZWYgZG9fcmVtb3ZlX2xheWVyKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJSZW1vdmUgYSBsYXllciBmcm9tIGJibGF5ZXJzLmNvbmYKKworUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGxheWVyIGZyb20gYmJsYXllcnMuY29uZgorIiIiCisgICAgICAgIGJibGF5ZXJzX2NvbmYgPSBvcy5wYXRoLmpvaW4oJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyc19jb25mKToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmZcbiIpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIGFyZ3MubGF5ZXJkaXIuc3RhcnRzd2l0aCgnKicpOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBhcmdzLmxheWVyZGlyCisgICAgICAgIGVsaWYgbm90ICcvJyBpbiBhcmdzLmxheWVyZGlyOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSAnKi8lcycgJSBhcmdzLmxheWVyZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChhcmdzLmxheWVyZGlyKQorICAgICAgICAoXywgbm90cmVtb3ZlZCkgPSBiYi51dGlscy5lZGl0X2JibGF5ZXJzX2NvbmYoYmJsYXllcnNfY29uZiwgTm9uZSwgbGF5ZXJkaXIpCisgICAgICAgIGlmIG5vdHJlbW92ZWQ6CisgICAgICAgICAgICBmb3IgaXRlbSBpbiBub3RyZW1vdmVkOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIk5vIGxheWVycyBtYXRjaGluZyAlcyBmb3VuZCBpbiBCQkxBWUVSU1xuIiAlIGl0ZW0pCisgICAgICAgICAgICByZXR1cm4gMQorCisKKyAgICBkZWYgZ2V0X2pzb25fZGF0YShzZWxmLCBhcGl1cmwpOgorICAgICAgICBwcm94eV9zZXR0aW5ncyA9IG9zLmVudmlyb24uZ2V0KCJodHRwX3Byb3h5IiwgTm9uZSkKKyAgICAgICAgY29ubiA9IE5vbmUKKyAgICAgICAgX3BhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgcGF0aCA9IF9wYXJzZWR1cmwucGF0aAorICAgICAgICBxdWVyeSA9IF9wYXJzZWR1cmwucXVlcnkKKyAgICAgICAgZGVmIHBhcnNlX3VybCh1cmwpOgorICAgICAgICAgICAgcGFyc2VkdXJsID0gdXJscGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgaWYgcGFyc2VkdXJsLm5ldGxvY1swXSA9PSAnWyc6CisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHBhcnNlZHVybC5uZXRsb2NbMTpdLnNwbGl0KCddJywgMSkKKyAgICAgICAgICAgICAgICBpZiAnOicgaW4gcG9ydDoKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHBvcnQucnNwbGl0KCc6JywgMSlbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJzZWR1cmwubmV0bG9jLmNvdW50KCc6JykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgKGhvc3QsIHBvcnQpID0gcGFyc2VkdXJsLm5ldGxvYy5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHBhcnNlZHVybC5uZXRsb2MKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiAoaG9zdCwgODAgaWYgcG9ydCBpcyBOb25lIGVsc2UgaW50KHBvcnQpKQorCisgICAgICAgIGlmIHByb3h5X3NldHRpbmdzIGlzIE5vbmU6CisgICAgICAgICAgICBob3N0LCBwb3J0ID0gcGFyc2VfdXJsKGFwaXVybCkKKyAgICAgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QoIkdFVCIsIHBhdGggKyAiPyIgKyBxdWVyeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBwYXJzZV91cmwocHJveHlfc2V0dGluZ3MpCisgICAgICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0KQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCJHRVQiLCBhcGl1cmwpCisKKyAgICAgICAgciA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBpZiByLnN0YXR1cyAhPSAyMDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byByZWFkICIgKyBwYXRoICsgIjogJWQgJXMiICUgKHIuc3RhdHVzLCByLnJlYXNvbikpCisgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHIucmVhZCgpKQorCisKKyAgICBkZWYgZ2V0X2xheWVyX2RlcHMoc2VsZiwgbGF5ZXJuYW1lLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtLCBzZWxmbmFtZT1GYWxzZSk6CisgICAgICAgIGRlZiBsYXllcml0ZW1zX2luZm9faWQoaXRlbXNfbmFtZSwgbGF5ZXJpdGVtcyk6CisgICAgICAgICAgICBsaXRlbXNfaWQgPSBOb25lCisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnbmFtZSddID09IGl0ZW1zX25hbWU6CisgICAgICAgICAgICAgICAgICAgIGxpdGVtc19pZCA9IGxpWydpZCddCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4gbGl0ZW1zX2lkCisKKyAgICAgICAgZGVmIGxheWVyYnJhbmNoZXNfaW5mbyhpdGVtc19pZCwgbGF5ZXJicmFuY2hlcyk6CisgICAgICAgICAgICBsYnJhbmNoID0ge30KKyAgICAgICAgICAgIGZvciBsYiBpbiBsYXllcmJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGlmIGxiWydsYXllciddID09IGl0ZW1zX2lkIGFuZCBsYlsnYnJhbmNoJ10gPT0gYnJhbmNobnVtOgorICAgICAgICAgICAgICAgICAgICBsYnJhbmNoWydpZCddID0gbGJbJ2lkJ10KKyAgICAgICAgICAgICAgICAgICAgbGJyYW5jaFsndmNzX3N1YmRpciddID0gbGJbJ3Zjc19zdWJkaXInXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxicmFuY2gKKworICAgICAgICBkZWYgbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbyhsYl9pZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbGRfZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgbGQgaW4gbGF5ZXJkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgaWYgbGRbJ2xheWVyYnJhbmNoJ10gPT0gbGJfaWQgYW5kIG5vdCBsZFsnZGVwZW5kZW5jeSddIGluIGxkX2RlcHM6CisgICAgICAgICAgICAgICAgICAgIGxkX2RlcHMuYXBwZW5kKGxkWydkZXBlbmRlbmN5J10pCisgICAgICAgICAgICBpZiBub3QgbGRfZGVwczoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSBkZXBlbmRlbmN5IG9mIGxheWVyRGVwZW5kZW5jaWVzIGlzIG5vdCBmb3VuZC4iKQorICAgICAgICAgICAgcmV0dXJuIGxkX2RlcHMKKworICAgICAgICBkZWYgbGF5ZXJpdGVtc19pbmZvX25hbWVfc3ViZGlyKGl0ZW1zX2lkLCBsYXllcml0ZW1zKToKKyAgICAgICAgICAgIGxpdGVtcyA9IHt9CisgICAgICAgICAgICBmb3IgbGkgaW4gbGF5ZXJpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBsaVsnaWQnXSA9PSBpdGVtc19pZDoKKyAgICAgICAgICAgICAgICAgICAgbGl0ZW1zWyd2Y3NfdXJsJ10gPSBsaVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgICAgIGxpdGVtc1snbmFtZSddID0gbGlbJ25hbWUnXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIGxpdGVtcworCisgICAgICAgIGlmIHNlbGZuYW1lOgorICAgICAgICAgICAgc2VsZmlkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgICAgIGxiaW5mbyA9IGxheWVyYnJhbmNoZXNfaW5mbyhzZWxmaWQsIGxheWVyYnJhbmNoZXMpCisgICAgICAgICAgICBpZiBsYmluZm86CisgICAgICAgICAgICAgICAgc2VsZnN1YmRpciA9IGxiaW5mb1sndmNzX3N1YmRpciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGZ1cmwgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoc2VsZmlkLCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBpZiBzZWxmdXJsOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmdXJsLCBzZWxmc3ViZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBsYXllciAlcyBnaXQgcmVwbyBhbmQgc3ViZGlyIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGRpY3QgPSB7fQorICAgICAgICBpdGVtc2lkID0gbGF5ZXJpdGVtc19pbmZvX2lkKGxheWVybmFtZSwgbGF5ZXJpdGVtcykKKyAgICAgICAgaWYgbm90IGl0ZW1zaWQ6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBOb25lCisgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcykKKyAgICAgICAgaWYgbGJpZDoKKyAgICAgICAgICAgIGxiaWQgPSBsYXllcmJyYW5jaGVzX2luZm8oaXRlbXNpZCwgbGF5ZXJicmFuY2hlcylbJ2lkJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgaXMgbm90IGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgYnJhbmNoIiAlIGxheWVybmFtZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgIGZvciBkZXBlbmRlbmN5IGluIGxheWVyZGVwZW5kZW5jaWVzX2luZm8obGJpZCwgbGF5ZXJkZXBlbmRlbmNpZXMpOgorICAgICAgICAgICAgbG5hbWUgPSBsYXllcml0ZW1zX2luZm9fbmFtZV9zdWJkaXIoZGVwZW5kZW5jeSwgbGF5ZXJpdGVtcylbJ25hbWUnXQorICAgICAgICAgICAgbHVybCA9IGxheWVyaXRlbXNfaW5mb19uYW1lX3N1YmRpcihkZXBlbmRlbmN5LCBsYXllcml0ZW1zKVsndmNzX3VybCddCisgICAgICAgICAgICBsc3ViZGlyID0gbGF5ZXJicmFuY2hlc19pbmZvKGRlcGVuZGVuY3ksIGxheWVyYnJhbmNoZXMpWyd2Y3Nfc3ViZGlyJ10KKyAgICAgICAgICAgIGxkaWN0W2xuYW1lXSA9IGx1cmwsIGxzdWJkaXIKKyAgICAgICAgcmV0dXJuIE5vbmUsIGxkaWN0CisKKworICAgIGRlZiBnZXRfZmV0Y2hfbGF5ZXIoc2VsZiwgZmV0Y2hkaXIsIHVybCwgc3ViZGlyLCBmZXRjaF9sYXllcik6CisgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2xheWVyX25hbWUodXJsKQorICAgICAgICBpZiBvcy5wYXRoLnNwbGl0ZXh0KGxheWVybmFtZSlbMV0gPT0gJy5naXQnOgorICAgICAgICAgICAgbGF5ZXJuYW1lID0gb3MucGF0aC5zcGxpdGV4dChsYXllcm5hbWUpWzBdCisgICAgICAgIHJlcG9kaXIgPSBvcy5wYXRoLmpvaW4oZmV0Y2hkaXIsIGxheWVybmFtZSkKKyAgICAgICAgbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4ocmVwb2Rpciwgc3ViZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVwb2Rpcik6CisgICAgICAgICAgICBpZiBmZXRjaF9sYXllcjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoJ2dpdCBjbG9uZSAlcyAlcycgJSAodXJsLCByZXBvZGlyKSwgc2hlbGwgPSBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gZG93bmxvYWQgJXMiICUgdXJsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcm5hbWUsIGxheWVyZGlyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiUmVwb3NpdG9yeSAlcyBuZWVkcyB0byBiZSBmZXRjaGVkIiAlIHVybCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJuYW1lLCBsYXllcmRpcgorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGxheWVyZGlyKToKKyAgICAgICAgICAgIHJldHVybiBsYXllcm5hbWUsIGxheWVyZGlyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGlzIG5vdCBpbiAlcyIgJSAodXJsLCBzdWJkaXIpKQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisKKyAgICBkZWYgZG9fbGF5ZXJpbmRleF9mZXRjaChzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiRmV0Y2hlcyBhIGxheWVyIGZyb20gYSBsYXllciBpbmRleCBhbG9uZyB3aXRoIGl0cyBkZXBlbmRlbnQgbGF5ZXJzLCBhbmQgYWRkcyB0aGVtIHRvIGNvbmYvYmJsYXllcnMuY29uZi4KKyIiIgorICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKGNvbmZpZ19vbmx5ID0gVHJ1ZSkKKyAgICAgICAgYXBpdXJsID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19MQVlFUklOREVYX1VSTCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBhcGl1cmw6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBnZXQgQkJMQVlFUlNfTEFZRVJJTkRFWF9VUkwiKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGFwaXVybFstMV0gIT0gJy8nOgorICAgICAgICAgICAgICAgIGFwaXVybCArPSAnLycKKyAgICAgICAgICAgIGFwaXVybCArPSAiYXBpLyIKKyAgICAgICAgYXBpbGlua3MgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpdXJsKQorICAgICAgICBicmFuY2hlcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snYnJhbmNoZXMnXSkKKworICAgICAgICBicmFuY2hudW0gPSAwCisgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXM6CisgICAgICAgICAgICBpZiBicmFuY2hbJ25hbWUnXSA9PSBhcmdzLmJyYW5jaDoKKyAgICAgICAgICAgICAgICBicmFuY2hudW0gPSBicmFuY2hbJ2lkJ10KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBicmFuY2hudW0gPT0gMDoKKyAgICAgICAgICAgIHZhbGlkYnJhbmNoZXMgPSAnLCAnLmpvaW4oW2JyYW5jaFsnbmFtZSddIGZvciBicmFuY2ggaW4gYnJhbmNoZXNdKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIGxheWVyIGJyYW5jaCBuYW1lICIlcyIuIFZhbGlkIGJyYW5jaGVzOiAlcycgJSAoYXJncy5icmFuY2gsIHZhbGlkYnJhbmNoZXMpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZ25vcmVfbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGNvbGxlY3Rpb24gaW4gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgbG5hbWUgPSBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YS5nZXRWYXIoJ0JCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV8lcycgJSBjb2xsZWN0aW9uLCBUcnVlKQorICAgICAgICAgICAgaWYgbG5hbWU6CisgICAgICAgICAgICAgICAgaWdub3JlX2xheWVycy5hcHBlbmQobG5hbWUpCisKKyAgICAgICAgaWYgYXJncy5pZ25vcmU6CisgICAgICAgICAgICBpZ25vcmVfbGF5ZXJzLmV4dGVuZChhcmdzLmlnbm9yZS5zcGxpdCgnLCcpKQorCisgICAgICAgIGxheWVyaXRlbXMgPSBzZWxmLmdldF9qc29uX2RhdGEoYXBpbGlua3NbJ2xheWVySXRlbXMnXSkKKyAgICAgICAgbGF5ZXJicmFuY2hlcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snbGF5ZXJCcmFuY2hlcyddKQorICAgICAgICBsYXllcmRlcGVuZGVuY2llcyA9IHNlbGYuZ2V0X2pzb25fZGF0YShhcGlsaW5rc1snbGF5ZXJEZXBlbmRlbmNpZXMnXSkKKyAgICAgICAgaW52YWx1ZW5hbWVzID0gW10KKyAgICAgICAgcmVwb3VybHMgPSB7fQorICAgICAgICBwcmludGxheWVycyA9IFtdCisgICAgICAgIGRlZiBxdWVyeV9kZXBlbmRlbmNpZXMobGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKToKKyAgICAgICAgICAgIGRlcHNsYXllciA9IFtdCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBpbnZhbHVlbmFtZSwgbGF5ZXJkaWN0ID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0pCisgICAgICAgICAgICAgICAgaWYgbGF5ZXJkaWN0OgorICAgICAgICAgICAgICAgICAgICByZXBvdXJsc1tsYXllcm5hbWVdID0gc2VsZi5nZXRfbGF5ZXJfZGVwcyhsYXllcm5hbWUsIGxheWVyaXRlbXMsIGxheWVyYnJhbmNoZXMsIGxheWVyZGVwZW5kZW5jaWVzLCBicmFuY2hudW0sIHNlbGZuYW1lPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcmRpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGF5ZXIgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzbGF5ZXIuYXBwZW5kKGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRsYXllcnMuYXBwZW5kKChsYXllcm5hbWUsIGxheWVyLCBsYXllcmRpY3RbbGF5ZXJdWzBdLCBsYXllcmRpY3RbbGF5ZXJdWzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsYXllciBpbiBpZ25vcmVfbGF5ZXJzIGFuZCBub3QgbGF5ZXIgaW4gcmVwb3VybHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3VybHNbbGF5ZXJdID0gKGxheWVyZGljdFtsYXllcl1bMF0sIGxheWVyZGljdFtsYXllcl1bMV0pCisgICAgICAgICAgICAgICAgaWYgaW52YWx1ZW5hbWUgYW5kIG5vdCBpbnZhbHVlbmFtZSBpbiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIGludmFsdWVuYW1lcy5hcHBlbmQoaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gZGVwc2xheWVyCisKKyAgICAgICAgZGVwc2xheWVycyA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhhcmdzLmxheWVybmFtZSwgbGF5ZXJpdGVtcywgbGF5ZXJicmFuY2hlcywgbGF5ZXJkZXBlbmRlbmNpZXMsIGJyYW5jaG51bSkKKyAgICAgICAgd2hpbGUgZGVwc2xheWVyczoKKyAgICAgICAgICAgIGRlcHNsYXllciA9IHF1ZXJ5X2RlcGVuZGVuY2llcyhkZXBzbGF5ZXJzLCBsYXllcml0ZW1zLCBsYXllcmJyYW5jaGVzLCBsYXllcmRlcGVuZGVuY2llcywgYnJhbmNobnVtKQorICAgICAgICAgICAgZGVwc2xheWVycyA9IGRlcHNsYXllcgorICAgICAgICBpZiBpbnZhbHVlbmFtZXM6CisgICAgICAgICAgICBmb3IgaW52YWx1ZW5hbWUgaW4gaW52YWx1ZW5hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignTGF5ZXIgIiVzIiBub3QgZm91bmQgaW4gbGF5ZXIgaW5kZXgnICUgaW52YWx1ZW5hbWUpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBsb2dnZXIucGxhaW4oIiVzICAlcyAgJXMgICVzIiAlICgiTGF5ZXIiLmxqdXN0KDE5KSwgIlJlcXVpcmVkIGJ5Ii5sanVzdCgxOSksICJHaXQgcmVwb3NpdG9yeSIubGp1c3QoNTQpLCAiU3ViZGlyZWN0b3J5IikpCisgICAgICAgIGxvZ2dlci5wbGFpbignPScgKiAxMTUpCisgICAgICAgIGZvciBsYXllcm5hbWUgaW4gYXJncy5sYXllcm5hbWU6CisgICAgICAgICAgICBsYXllcnVybCA9IHJlcG91cmxzW2xheWVybmFtZV0KKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGxheWVybmFtZS5sanVzdCgyMCksICctJy5sanVzdCgyMCksIGxheWVydXJsWzBdLmxqdXN0KDU1KSwgbGF5ZXJ1cmxbMV0pKQorICAgICAgICBwcmludGVkbGF5ZXJzID0gW10KKyAgICAgICAgZm9yIGxheWVyLCBkZXBlbmRlbmN5LCBnaXRyZXBvLCBzdWJkaXJlY3RvcnkgaW4gcHJpbnRsYXllcnM6CisgICAgICAgICAgICBpZiBkZXBlbmRlbmN5IGluIHByaW50ZWRsYXllcnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMgJXMiICUgKGRlcGVuZGVuY3kubGp1c3QoMjApLCBsYXllci5sanVzdCgyMCksIGdpdHJlcG8ubGp1c3QoNTUpLCBzdWJkaXJlY3RvcnkpKQorICAgICAgICAgICAgcHJpbnRlZGxheWVycy5hcHBlbmQoZGVwZW5kZW5jeSkKKworICAgICAgICBpZiByZXBvdXJsczoKKyAgICAgICAgICAgIGZldGNoZGlyID0gc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQkxBWUVSU19GRVRDSF9ESVInLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGZldGNoZGlyOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2Fubm90IGdldCBCQkxBWUVSU19GRVRDSF9ESVIiKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmV0Y2hkaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGZldGNoZGlyKQorICAgICAgICAgICAgYWRkbGF5ZXJzID0gW10KKyAgICAgICAgICAgIGZvciByZXBvdXJsLCBzdWJkaXIgaW4gcmVwb3VybHMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgbmFtZSwgbGF5ZXJkaXIgPSBzZWxmLmdldF9mZXRjaF9sYXllcihmZXRjaGRpciwgcmVwb3VybCwgc3ViZGlyLCBub3QgYXJncy5zaG93X29ubHkpCisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICAgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93bgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIGFkZGxheWVycy5hcHBlbmQoKHN1YmRpciwgbmFtZSwgbGF5ZXJkaXIpKQorICAgICAgICBpZiBub3QgYXJncy5zaG93X29ubHk6CisgICAgICAgICAgICBmb3Igc3ViZGlyLCBuYW1lLCBsYXllcmRpciBpbiBzZXQoYWRkbGF5ZXJzKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIHN1YmRpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiQWRkaW5nIGxheWVyIFwiJXNcIiB0byBjb25mL2JibGF5ZXJzLmNvbmYiICUgc3ViZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCJBZGRpbmcgbGF5ZXIgXCIlc1wiIHRvIGNvbmYvYmJsYXllcnMuY29uZiIgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGFyZ3MgPSBhcmdwYXJzZS5OYW1lc3BhY2UoKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGFyZ3MubGF5ZXJkaXIgPSBsYXllcmRpcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2FkZF9sYXllcihsb2NhbGFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworCisgICAgZGVmIGRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJGaW5kIGxheWVyIGRlcGVuZGVuY2llcyBmcm9tIGxheWVyIGluZGV4LgorIiIiCisgICAgICAgIGFyZ3Muc2hvd19vbmx5ID0gVHJ1ZQorICAgICAgICBhcmdzLmlnbm9yZSA9IFtdCisgICAgICAgIHNlbGYuZG9fbGF5ZXJpbmRleF9mZXRjaChhcmdzKQorCisKKyAgICBkZWYgdmVyc2lvbl9zdHIoc2VsZiwgcGUsIHB2LCBwciA9IE5vbmUpOgorICAgICAgICB2ZXJzdHIgPSAiJXMiICUgcHYKKyAgICAgICAgaWYgcHI6CisgICAgICAgICAgICB2ZXJzdHIgPSAiJXMtJXMiICUgKHZlcnN0ciwgcHIpCisgICAgICAgIGlmIHBlOgorICAgICAgICAgICAgdmVyc3RyID0gIiVzOiVzIiAlIChwZSwgdmVyc3RyKQorICAgICAgICByZXR1cm4gdmVyc3RyCisKKworICAgIGRlZiBkb19zaG93X292ZXJsYXllZChzZWxmLCBhcmdzKToKKyAgICAgICAgIiIibGlzdCBvdmVybGF5ZWQgcmVjaXBlcyAod2hlcmUgdGhlIHNhbWUgcmVjaXBlIGV4aXN0cyBpbiBhbm90aGVyIGxheWVyKQorCitMaXN0cyB0aGUgbmFtZXMgb2Ygb3ZlcmxheWVkIHJlY2lwZXMgYW5kIHRoZSBhdmFpbGFibGUgdmVyc2lvbnMgaW4gZWFjaAorbGF5ZXIsIHdpdGggdGhlIHByZWZlcnJlZCB2ZXJzaW9uIGZpcnN0LiBOb3RlIHRoYXQgc2tpcHBlZCByZWNpcGVzIHRoYXQKK2FyZSBvdmVybGF5ZWQgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgaXRlbXNfbGlzdGVkID0gc2VsZi5saXN0X3JlY2lwZXMoJ092ZXJsYXllZCByZWNpcGVzJywgTm9uZSwgVHJ1ZSwgYXJncy5zYW1lX3ZlcnNpb24sIGFyZ3MuZmlsZW5hbWVzLCBUcnVlLCBOb25lKQorCisgICAgICAgICMgQ2hlY2sgZm9yIG92ZXJsYXllZCAuYmJjbGFzcyBmaWxlcworICAgICAgICBjbGFzc2VzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICBjbGFzc2RpciA9IG9zLnBhdGguam9pbihsYXllcmRpciwgJ2NsYXNzZXMnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgIGZvciBjbGFzc2ZpbGUgaW4gb3MubGlzdGRpcihjbGFzc2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguc3BsaXRleHQoY2xhc3NmaWxlKVsxXSA9PSAnLmJiY2xhc3MnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1tjbGFzc2ZpbGVdLmFwcGVuZChjbGFzc2RpcikKKworICAgICAgICAjIExvY2F0aW5nIGNsYXNzZXMgYW5kIG90aGVyIGZpbGVzIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiByZWNpcGVzIC0KKyAgICAgICAgIyBsYXllciBwcmlvcml0eSBpcyBub3QgYSBmYWN0b3I7IGluc3RlYWQgQml0QmFrZSB1c2VzIHRoZSBmaXJzdCBtYXRjaGluZworICAgICAgICAjIGZpbGUgaW4gQkJQQVRILCB3aGljaCBpcyBtYW5pcHVsYXRlZCBkaXJlY3RseSBieSBlYWNoIGxheWVyJ3MKKyAgICAgICAgIyBjb25mL2xheWVyLmNvbmYgaW4gdHVybiwgdGh1cyB0aGUgb3JkZXIgb2YgbGF5ZXJzIGluIGJibGF5ZXJzLmNvbmYgaXMgYQorICAgICAgICAjIGZhY3RvciAtIGhvd2V2ZXIsIGVhY2ggbGF5ZXIuY29uZiBpcyBmcmVlIHRvIGVpdGhlciBwcmVwZW5kIG9yIGFwcGVuZCB0bworICAgICAgICAjIEJCUEFUSCAob3IgaW5kZWVkIGRvIGNyYXp5IHN0dWZmIHdpdGggaXQpLiBUaHVzIHRoZSBvcmRlciBpbiBCQlBBVEggbWlnaHQKKyAgICAgICAgIyBub3QgYmUgZXhhY3RseSB0aGUgb3JkZXIgcHJlc2VudCBpbiBiYmxheWVycy5jb25mIGVpdGhlci4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgIG92ZXJsYXllZF9jbGFzc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciAoY2xhc3NmaWxlLCBjbGFzc2RpcnMpIGluIGNsYXNzZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxlbihjbGFzc2RpcnMpID4gMToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3ZlcmxheWVkX2NsYXNzX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJz09PSBPdmVybGF5ZWQgY2xhc3NlcyA9PT0nKQorICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWRfY2xhc3NfZm91bmQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBtYWluZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgb3MucGF0aC5qb2luKCdjbGFzc2VzJywgY2xhc3NmaWxlKSkKKyAgICAgICAgICAgICAgICBpZiBhcmdzLmZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclcycgJSBtYWluZmlsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGVmZmVjdGl2ZWx5IGhhdmUgdG8gZ3Vlc3MgdGhlIGxheWVyIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCclczonICUgY2xhc3NmaWxlKQorICAgICAgICAgICAgICAgICAgICBtYWlubGF5ZXJuYW1lID0gJz8nCisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBzZWxmLmJibGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXJkaXIsICdjbGFzc2VzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1haW5maWxlLnN0YXJ0c3dpdGgoY2xhc3NkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5sYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgJXMnICUgbWFpbmxheWVybmFtZSkKKyAgICAgICAgICAgICAgICBmb3IgY2xhc3NkaXIgaW4gY2xhc3NkaXJzOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjbGFzc2RpciwgY2xhc3NmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBmdWxscGF0aCAhPSBtYWluZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZ3MuZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcgICVzJyAlIGZ1bGxwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICAlcycgJSBzZWxmLmdldF9sYXllcl9uYW1lKG9zLnBhdGguZGlybmFtZShjbGFzc2RpcikpKQorCisgICAgICAgIGlmIG92ZXJsYXllZF9jbGFzc19mb3VuZDoKKyAgICAgICAgICAgIGl0ZW1zX2xpc3RlZCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IGl0ZW1zX2xpc3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gb3ZlcmxheWVkIGZpbGVzIGZvdW5kLicpCisKKworICAgIGRlZiBkb19zaG93X3JlY2lwZXMoc2VsZiwgYXJncyk6CisgICAgICAgICIiImxpc3QgYXZhaWxhYmxlIHJlY2lwZXMsIHNob3dpbmcgdGhlIGxheWVyIHRoZXkgYXJlIHByb3ZpZGVkIGJ5CisKK0xpc3RzIHRoZSBuYW1lcyBvZiByZWNpcGVzIGFuZCB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIGluIGVhY2gKK2xheWVyLCB3aXRoIHRoZSBwcmVmZXJyZWQgdmVyc2lvbiBmaXJzdC4gT3B0aW9uYWxseSB5b3UgbWF5IHNwZWNpZnkKK3Buc3BlYyB0byBtYXRjaCBhIHNwZWNpZmllZCByZWNpcGUgbmFtZSAoc3VwcG9ydHMgd2lsZGNhcmRzKS4gTm90ZSB0aGF0Citza2lwcGVkIHJlY2lwZXMgd2lsbCBhbHNvIGJlIGxpc3RlZCwgd2l0aCBhICIgKHNraXBwZWQpIiBzdWZmaXguCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgaW5oZXJpdGxpc3QgPSBhcmdzLmluaGVyaXRzLnNwbGl0KCcsJykgaWYgYXJncy5pbmhlcml0cyBlbHNlIFtdCisgICAgICAgIGlmIGluaGVyaXRsaXN0IG9yIGFyZ3MucG5zcGVjIG9yIGFyZ3MubXVsdGlwbGU6CisgICAgICAgICAgICB0aXRsZSA9ICdNYXRjaGluZyByZWNpcGVzOicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRpdGxlID0gJ0F2YWlsYWJsZSByZWNpcGVzOicKKyAgICAgICAgc2VsZi5saXN0X3JlY2lwZXModGl0bGUsIGFyZ3MucG5zcGVjLCBGYWxzZSwgRmFsc2UsIGFyZ3MuZmlsZW5hbWVzLCBhcmdzLm11bHRpcGxlLCBpbmhlcml0bGlzdCkKKworCisgICAgZGVmIGxpc3RfcmVjaXBlcyhzZWxmLCB0aXRsZSwgcG5zcGVjLCBzaG93X292ZXJsYXllZF9vbmx5LCBzaG93X3NhbWVfdmVyX29ubHksIHNob3dfZmlsZW5hbWVzLCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHksIGluaGVyaXRzKToKKyAgICAgICAgaWYgaW5oZXJpdHM6CisgICAgICAgICAgICBiYnBhdGggPSBzdHIoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICAgICAgICAgIGZvciBjbGFzc25hbWUgaW4gaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgY2xhc3NmaWxlID0gJ2NsYXNzZXMvJXMuYmJjbGFzcycgJSBjbGFzc25hbWUKKyAgICAgICAgICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjbGFzc2ZpbGUsIGhpc3Rvcnk9RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBVc2VyRXJyb3IoJ05vIGNsYXNzIG5hbWVkICVzIGZvdW5kIGluIEJCUEFUSCcgJSBjbGFzc2ZpbGUpCisKKyAgICAgICAgcGtnX3BuID0gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSwgcGtnX3BuKQorICAgICAgICBhbGxwcm92aWRlcnMgPSBiYi5wcm92aWRlcnMuYWxsUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSBsaXN0IHNraXBwZWQgcmVjaXBlcworICAgICAgICAjIFdlIGFyZSBsYXJnZWx5IGd1ZXNzaW5nIGFib3V0IFBOLCBQViBhbmQgdGhlIHByZWZlcnJlZCB2ZXJzaW9uIGhlcmUsCisgICAgICAgICMgYnV0IHdlIGhhdmUgbm8gY2hvaWNlIHNpbmNlIHNraXBwZWQgcmVjaXBlcyBhcmUgbm90IGZ1bGx5IHBhcnNlZAorICAgICAgICBza2lwbGlzdCA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5za2lwbGlzdC5rZXlzKCkKKyAgICAgICAgc2tpcGxpc3Quc29ydCgga2V5PWxhbWJkYSBmaWxlaXRlbTogc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uY2FsY19iYmZpbGVfcHJpb3JpdHkoZmlsZWl0ZW0pICkKKyAgICAgICAgc2tpcGxpc3QucmV2ZXJzZSgpCisgICAgICAgIGZvciBmbiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgIHJlY2lwZV9wYXJ0cyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdLnNwbGl0KCdfJykKKyAgICAgICAgICAgIHAgPSByZWNpcGVfcGFydHNbMF0KKyAgICAgICAgICAgIGlmIGxlbihyZWNpcGVfcGFydHMpID4gMToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgcmVjaXBlX3BhcnRzWzFdLCBOb25lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXIgPSAoTm9uZSwgJ3Vua25vd24nLCBOb25lKQorICAgICAgICAgICAgYWxscHJvdmlkZXJzW3BdLmFwcGVuZCgodmVyLCBmbikpCisgICAgICAgICAgICBpZiBub3QgcCBpbiBwa2dfcG46CisgICAgICAgICAgICAgICAgcGtnX3BuW3BdID0gJ2R1bW15JworICAgICAgICAgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uc1twXSA9ICh2ZXIsIGZuKQorCisgICAgICAgIGRlZiBwcmludF9pdGVtKGYsIHBuLCB2ZXIsIGxheWVyLCBpc3ByZWYpOgorICAgICAgICAgICAgaWYgZiBpbiBza2lwbGlzdDoKKyAgICAgICAgICAgICAgICBza2lwcGVkID0gJyAoc2tpcHBlZCknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSAnJworICAgICAgICAgICAgaWYgc2hvd19maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzJXMiLCBmLCBza2lwcGVkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyVzIiwgZiwgc2tpcHBlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNwcmVmOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oIiVzOiIsIHBuKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiICAlcyAlcyVzIiwgbGF5ZXIubGp1c3QoMjApLCB2ZXIsIHNraXBwZWQpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorCisgICAgICAgIHByZWZmaWxlcyA9IFtdCisgICAgICAgIGl0ZW1zX2xpc3RlZCA9IEZhbHNlCisgICAgICAgIGZvciBwIGluIHNvcnRlZChwa2dfcG4pOgorICAgICAgICAgICAgaWYgcG5zcGVjOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2gocCwgcG5zcGVjKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbGVuKGFsbHByb3ZpZGVyc1twXSkgPiAxIG9yIG5vdCBzaG93X211bHRpX3Byb3ZpZGVyX29ubHk6CisgICAgICAgICAgICAgICAgcHJlZiA9IHByZWZlcnJlZF92ZXJzaW9uc1twXQorICAgICAgICAgICAgICAgIHJlYWxmbiA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocHJlZlsxXSkKKyAgICAgICAgICAgICAgICBwcmVmZmlsZSA9IHJlYWxmblswXQorCisgICAgICAgICAgICAgICAgIyBXZSBvbmx5IGRpc3BsYXkgb25jZSBwZXIgcmVjaXBlLCB3ZSBzaG91bGQgcHJlZmVyIG5vbiBleHRlbmRlZCB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIHJlY2lwZSBpZiBwcmVzZW50IChzbyBlLmcuIGluIE9wZW5FbWJlZGRlZCwgb3BlbnNzbCByYXRoZXIgdGhhbiBuYXRpdmVzZGstb3BlbnNzbAorICAgICAgICAgICAgICAgICMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHNvcnQgZmlyc3QpLgorICAgICAgICAgICAgICAgIGlmIHJlYWxmblsxXSBhbmQgcmVhbGZuWzBdIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfZm46CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hjb3VudCA9IDAKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlX2luaGVyaXRzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEuaW5oZXJpdHMuZ2V0KHByZWZmaWxlLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiByZWNpcGVfaW5oZXJpdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHNfcmUubWF0Y2goY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNscykpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbGFzc25hbWUgaW4gZ2xvYmFsX2luaGVyaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgY2xhc3NuYW1lIGluIGluaGVyaXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaGNvdW50ICE9IGxlbihpbmhlcml0cyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG1hdGNoIC0gc2tpcCB0aGlzIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHByZWZmaWxlIG5vdCBpbiBwcmVmZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHByZWZsYXllciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIocHJlZmZpbGUpCisgICAgICAgICAgICAgICAgICAgIG11bHRpbGF5ZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzYW1lX3ZlciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcHJvdnMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcHJvdiBpbiBhbGxwcm92aWRlcnNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92ZmlsZSA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocHJvdlsxXSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZsYXllciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIocHJvdmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92cy5hcHBlbmQoKHByb3ZmaWxlLCBwcm92bGF5ZXIsIHByb3ZbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdmxheWVyICE9IHByZWZsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWxheWVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdlswXSAhPSBwcmVmWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVfdmVyID0gRmFsc2UKKworICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlsYXllciBvciBub3Qgc2hvd19vdmVybGF5ZWRfb25seSkgYW5kIChzYW1lX3ZlciBvciBub3Qgc2hvd19zYW1lX3Zlcl9vbmx5KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtc19saXN0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gJXMgPT09JyAlIHRpdGxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zX2xpc3RlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2l0ZW0ocHJlZmZpbGUsIHAsIHNlbGYudmVyc2lvbl9zdHIocHJlZlswXVswXSwgcHJlZlswXVsxXSksIHByZWZsYXllciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocHJvdmZpbGUsIHByb3ZsYXllciwgcHJvdnZlcikgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdmZpbGUgIT0gcHJlZmZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2l0ZW0ocHJvdmZpbGUsIHAsIHNlbGYudmVyc2lvbl9zdHIocHJvdnZlclswXSwgcHJvdnZlclsxXSksIHByb3ZsYXllciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSB3ZSBkb24ndCBzaG93IHR3byBlbnRyaWVzIGZvciBCQkNMQVNTRVhURU5EZWQgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmZpbGVzLmFwcGVuZChwcmVmZmlsZSkKKworICAgICAgICByZXR1cm4gaXRlbXNfbGlzdGVkCisKKworICAgIGRlZiBkb19mbGF0dGVuKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJmbGF0dGVuIGxheWVyIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIG91dHB1dCBkaXJlY3RvcnkuCisKK1Rha2VzIHRoZSBzcGVjaWZpZWQgbGF5ZXJzIChvciBhbGwgbGF5ZXJzIGluIHRoZSBjdXJyZW50IGxheWVyCitjb25maWd1cmF0aW9uIGlmIG5vbmUgYXJlIHNwZWNpZmllZCkgYW5kIGJ1aWxkcyBhICJmbGF0dGVuZWQiIGRpcmVjdG9yeQorY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgYWxsIGxheWVycywgd2l0aCBhbnkgb3ZlcmxheWVkIHJlY2lwZXMgcmVtb3ZlZAorYW5kIGJiYXBwZW5kcyBhcHBlbmRlZCB0byB0aGUgY29ycmVzcG9uZGluZyByZWNpcGVzLiBOb3RlIHRoYXQgc29tZSBtYW51YWwKK2NsZWFudXAgbWF5IHN0aWxsIGJlIG5lY2Vzc2FyeSBhZnRlcndhcmRzLCBpbiBwYXJ0aWN1bGFyOgorCisqIHdoZXJlIG5vbi1yZWNpcGUgZmlsZXMgKHN1Y2ggYXMgcGF0Y2hlcykgYXJlIG92ZXJ3cml0dGVuICh0aGUgZmxhdHRlbgorICBjb21tYW5kIHdpbGwgc2hvdyBhIHdhcm5pbmcgZm9yIHRoZXNlKQorKiB3aGVyZSBhbnl0aGluZyBiZXlvbmQgdGhlIG5vcm1hbCBsYXllciBzZXR1cCBoYXMgYmVlbiBhZGRlZCB0bworICBsYXllci5jb25mIChvbmx5IHRoZSBsb3dlc3QgcHJpb3JpdHkgbnVtYmVyIGxheWVyJ3MgbGF5ZXIuY29uZiBpcyB1c2VkKQorKiBvdmVycmlkZGVuL2FwcGVuZGVkIGl0ZW1zIGZyb20gYmJhcHBlbmRzIHdpbGwgbmVlZCB0byBiZSB0aWRpZWQgdXAKKyogd2hlbiB0aGUgZmxhdHRlbmVkIGxheWVycyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlICh0aGUKKyAgZmxhdHRlbiBjb21tYW5kIHNob3VsZCBzaG93IGEgd2FybmluZyB3aGVuIHRoaXMgd2lsbCBjYXVzZSBhIHByb2JsZW0pCisKK1dhcm5pbmc6IGlmIHlvdSBmbGF0dGVuIHNldmVyYWwgbGF5ZXJzIHdoZXJlIGFub3RoZXIgbGF5ZXIgaXMgaW50ZW5kZWQgdG8KK2JlIHVzZWQgImluYmV0d2VlbiIgdGhlbSAoaW4gbGF5ZXIgcHJpb3JpdHkgb3JkZXIpIHN1Y2ggdGhhdCByZWNpcGVzIC8KK2JiYXBwZW5kcyBpbiB0aGUgbGF5ZXJzIGludGVyYWN0LCBhbmQgdGhlbiBhdHRlbXB0IHRvIHVzZSB0aGUgbmV3IG91dHB1dAorbGF5ZXIgdG9nZXRoZXIgd2l0aCB0aGF0IG90aGVyIGxheWVyLCB5b3UgbWF5IG5vIGxvbmdlciBnZXQgdGhlIHNhbWUKK2J1aWxkIHJlc3VsdHMgKGFzIHRoZSBsYXllciBwcmlvcml0eSBvcmRlciBoYXMgZWZmZWN0aXZlbHkgY2hhbmdlZCkuCisiIiIKKyAgICAgICAgaWYgbGVuKGFyZ3MubGF5ZXIpID09IDE6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0lmIHlvdSBzcGVjaWZ5IGxheWVycyB0byBmbGF0dGVuIHlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgdHdvJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgb3V0cHV0ZGlyID0gYXJncy5vdXRwdXRkaXIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0cHV0ZGlyKSBhbmQgb3MubGlzdGRpcihvdXRwdXRkaXIpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdEaXJlY3RvcnkgJXMgZXhpc3RzIGFuZCBpcyBub24tZW1wdHksIHBsZWFzZSBjbGVhciBpdCBvdXQgZmlyc3QnICUgb3V0cHV0ZGlyKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKCkKKyAgICAgICAgbGF5ZXJzID0gc2VsZi5iYmxheWVycworICAgICAgICBpZiBsZW4oYXJncy5sYXllcikgPiAyOgorICAgICAgICAgICAgbGF5ZXJuYW1lcyA9IGFyZ3MubGF5ZXIKKyAgICAgICAgICAgIGZvdW5kX2xheWVybmFtZXMgPSBbXQorICAgICAgICAgICAgZm91bmRfbGF5ZXJkaXJzID0gW10KKyAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgbGF5ZXJuYW1lID0gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgICAgICAgICBpZiBsYXllcm5hbWUgaW4gbGF5ZXJuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfbGF5ZXJkaXJzLmFwcGVuZChsYXllcmRpcikKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfbGF5ZXJuYW1lcy5hcHBlbmQobGF5ZXJuYW1lKQorCisgICAgICAgICAgICBmb3IgbGF5ZXJuYW1lIGluIGxheWVybmFtZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGxheWVybmFtZSBpbiBmb3VuZF9sYXllcm5hbWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIGxheWVyICVzIGluIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgcGxlYXNlIHJ1biAiJXMgc2hvdy1sYXllcnMiIHRvIGxpc3QgY29uZmlndXJlZCBsYXllcnMnICUgKGxheWVybmFtZSwgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGxheWVycyA9IGZvdW5kX2xheWVyZGlycworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGF5ZXJuYW1lcyA9IFtdCisKKyAgICAgICAgIyBFbnN1cmUgYSBzcGVjaWZpZWQgcGF0aCBtYXRjaGVzIG91ciBsaXN0IG9mIGxheWVycworICAgICAgICBkZWYgbGF5ZXJfcGF0aF9tYXRjaChwYXRoKToKKyAgICAgICAgICAgIGZvciBsYXllcmRpciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKG9zLnBhdGguam9pbihsYXllcmRpciwgJycpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyZGlyCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGFwcGxpZWRfYXBwZW5kcyA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICBvdmVybGF5ZWQgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24ub3ZlcmxheWVkLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIG9mIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLm92ZXJsYXllZFtmXToKKyAgICAgICAgICAgICAgICAgICAgaWYgb2Yuc3RhcnRzd2l0aChsYXllcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5ZWQuYXBwZW5kKG9mKQorCisgICAgICAgICAgICBsb2dnZXIucGxhaW4oJ0NvcHlpbmcgZmlsZXMgZnJvbSAlcy4uLicgJSBsYXllciApCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhsYXllcik6CisgICAgICAgICAgICAgICAgZm9yIGYxIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmMWZ1bGwgPSBvcy5zZXAuam9pbihbcm9vdCwgZjFdKQorICAgICAgICAgICAgICAgICAgICBpZiBmMWZ1bGwgaW4gb3ZlcmxheWVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgIFNraXBwaW5nIG92ZXJsYXllZCBmaWxlICVzJyAlIGYxZnVsbCApCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ICE9ICcuYmJhcHBlbmQnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gZjFmdWxsW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5zZXAuam9pbihbb3V0cHV0ZGlyLGZkZXN0XSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmZGVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmRlc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmMSA9PSAnbGF5ZXIuY29uZicgYW5kIHJvb3QuZW5kc3dpdGgoJy9jb25mJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgU2tpcHBpbmcgbGF5ZXIgY29uZmlnIGZpbGUgJXMnICUgZjFmdWxsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignT3ZlcndyaXRpbmcgZmlsZSAlcycsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGYxZnVsbCwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ID09ICcuYmInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXBwZW5kIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZjFmdWxsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyAgQXBwbHlpbmcgYXBwZW5kICVzIHRvICVzJyAlIChhcHBlbmQsIGZkZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcGx5X2FwcGVuZChhcHBlbmQsIGZkZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWRfYXBwZW5kcy5hcHBlbmQoYXBwZW5kKQorCisgICAgICAgICMgVGFrZSBjYXJlIG9mIHdoZW4gc29tZSBsYXllcnMgYXJlIGV4Y2x1ZGVkIGFuZCB5ZXQgd2UgaGF2ZSBpbmNsdWRlZCBiYmFwcGVuZHMgZm9yIHRob3NlIHJlY2lwZXMKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLmNvbGxlY3Rpb24uYmJhcHBlbmRzOgorICAgICAgICAgICAgKHJlY2lwZW5hbWUsIGFwcGVuZG5hbWUpID0gYgorICAgICAgICAgICAgaWYgYXBwZW5kbmFtZSBub3QgaW4gYXBwbGllZF9hcHBlbmRzOgorICAgICAgICAgICAgICAgIGZpcnN0X2FwcGVuZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBsYXllciA9IGxheWVyX3BhdGhfbWF0Y2goYXBwZW5kbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RfYXBwZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hcHBseV9hcHBlbmQoYXBwZW5kbmFtZSwgZmlyc3RfYXBwZW5kKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBhcHBlbmRuYW1lW2xlbihsYXllcik6XQorICAgICAgICAgICAgICAgICAgICAgICAgZmRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnNlcC5qb2luKFtvdXRwdXRkaXIsZmRlc3RdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmRlc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoYXBwZW5kbmFtZSwgZmRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcHBlbmQgPSBmZGVzdAorCisgICAgICAgICMgR2V0IHRoZSByZWdleCBmb3IgdGhlIGZpcnN0IGxheWVyIGluIG91ciBsaXN0ICh3aGljaCBpcyB3aGVyZSB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgd2lsbAorICAgICAgICAjIGhhdmUgY29tZSBmcm9tKQorICAgICAgICBmaXJzdF9yZWdleCA9IE5vbmUKKyAgICAgICAgbGF5ZXJkaXIgPSBsYXllcnNbMF0KKyAgICAgICAgZm9yIGxheWVybmFtZSwgcGF0dGVybiwgcmVnZXgsIF8gaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4Lm1hdGNoKG9zLnBhdGguam9pbihsYXllcmRpciwgJ3Rlc3QnKSk6CisgICAgICAgICAgICAgICAgZmlyc3RfcmVnZXggPSByZWdleAorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgZmlyc3RfcmVnZXg6CisgICAgICAgICAgICAjIEZpbmQgdGhlIEJCRklMRVMgZW50cmllcyB0aGF0IG1hdGNoICh3aGljaCB3aWxsIGhhdmUgY29tZSBmcm9tIHRoaXMgY29uZi9sYXllci5jb25mIGZpbGUpCisgICAgICAgICAgICBiYmZpbGVzID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpKS5zcGxpdCgpCisgICAgICAgICAgICBiYmZpbGVzX2xheWVyID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIGJiZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlyc3RfcmVnZXgubWF0Y2goaXRlbSk6CisgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLCBpdGVtW2xlbihsYXllcmRpcikrMTpdKQorICAgICAgICAgICAgICAgICAgICBiYmZpbGVzX2xheWVyLmFwcGVuZChuZXdwYXRoKQorCisgICAgICAgICAgICBpZiBiYmZpbGVzX2xheWVyOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBhbGwgaW1wb3J0YW50IGxheWVyIGZpbGVzIG1hdGNoIEJCRklMRVMKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvdXRwdXRkaXIpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZjEgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYxKVsxXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXh0IGluIFsnLmJiJywgJy5iYmFwcGVuZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYxZnVsbCA9IG9zLnNlcC5qb2luKFtyb290LCBmMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJiZmlsZXNfbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmMWZ1bGwsIGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlfZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlbnRyeV9mb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkZpbGUgJXMgZG9lcyBub3QgbWF0Y2ggdGhlIGZsYXR0ZW5lZCBsYXllcidzIEJCRklMRVMgc2V0dGluZywgeW91IG1heSBuZWVkIHRvIGVkaXQgY29uZi9sYXllci5jb25mIG9yIG1vdmUgdGhlIGZpbGUgZWxzZXdoZXJlIiAlIGYxZnVsbCkKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyZGlyID0gc2VsZi5nZXRfZmlsZV9sYXllcmRpcihmaWxlbmFtZSkKKyAgICAgICAgaWYgbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfbGF5ZXJfbmFtZShsYXllcmRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPycKKworICAgIGRlZiBnZXRfZmlsZV9sYXllcmRpcihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxheWVyID0gYmIudXRpbHMuZ2V0X2ZpbGVfbGF5ZXIoZmlsZW5hbWUsIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICByZXR1cm4gc2VsZi5iYmZpbGVfY29sbGVjdGlvbnMuZ2V0KGxheWVyLCBOb25lKQorCisgICAgZGVmIHJlbW92ZV9sYXllcl9wcmVmaXgoc2VsZiwgZik6CisgICAgICAgICIiIlJlbW92ZSB0aGUgbGF5ZXJfZGlyIHByZWZpeCwgZS5nLiwgZiA9IC9wYXRoL3RvL2xheWVyX2Rpci9mb28vYmxhaCwgdGhlCisgICAgICAgICAgIHJldHVybiB2YWx1ZSB3aWxsIGJlOiBsYXllcl9kaXIvZm9vL2JsYWgiIiIKKyAgICAgICAgZl9sYXllcmRpciA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXJkaXIoZikKKyAgICAgICAgaWYgbm90IGZfbGF5ZXJkaXI6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZfbGF5ZXJkaXIpLCAnJykKKyAgICAgICAgcmV0dXJuIGZbbGVuKHByZWZpeCk6XSBpZiBmLnN0YXJ0c3dpdGgocHJlZml4KSBlbHNlIGYKKworICAgIGRlZiBnZXRfbGF5ZXJfbmFtZShzZWxmLCBsYXllcmRpcik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKGxheWVyZGlyLnJzdHJpcChvcy5zZXApKQorCisgICAgZGVmIGFwcGx5X2FwcGVuZChzZWxmLCBhcHBlbmRuYW1lLCByZWNpcGVuYW1lKToKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZG5hbWUsICdyJykgYXMgYXBwZW5kZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihyZWNpcGVuYW1lLCAnYScpIGFzIHJlY2lwZWZpbGU6CisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgIHJlY2lwZWZpbGUud3JpdGUoJyMjIyMjIGJiYXBwZW5kZWQgZnJvbSAlcyAjIyMjI1xuJyAlIHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYXBwZW5kbmFtZSkpCisgICAgICAgICAgICAgICAgcmVjaXBlZmlsZS53cml0ZWxpbmVzKGFwcGVuZGZpbGUucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgZG9fc2hvd19hcHBlbmRzKHNlbGYsIGFyZ3MpOgorICAgICAgICAiIiJsaXN0IGJiYXBwZW5kIGZpbGVzIGFuZCByZWNpcGUgZmlsZXMgdGhleSBhcHBseSB0bworCitMaXN0cyByZWNpcGVzIHdpdGggdGhlIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIHRoZW0gYXMgc3ViaXRlbXMuCisiIiIKKyAgICAgICAgc2VsZi5pbml0X2JiaGFuZGxlcigpCisKKyAgICAgICAgbG9nZ2VyLnBsYWluKCc9PT0gQXBwZW5kZWQgcmVjaXBlcyA9PT0nKQorCisgICAgICAgIHBubGlzdCA9IGxpc3Qoc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuLmtleXMoKSkKKyAgICAgICAgcG5saXN0LnNvcnQoKQorICAgICAgICBhcHBlbmRzID0gRmFsc2UKKyAgICAgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvd19hcHBlbmRzX2Zvcl9wbihwbik6CisgICAgICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNob3dfYXBwZW5kc19mb3Jfc2tpcHBlZCgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IFRydWUKKworICAgICAgICBpZiBub3QgYXBwZW5kczoKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbignTm8gYXBwZW5kIGZpbGVzIGZvdW5kJykKKworICAgIGRlZiBzaG93X2FwcGVuZHNfZm9yX3BuKHNlbGYsIHBuKToKKyAgICAgICAgZmlsZW5hbWVzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BuW3BuXQorCisgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfcG4pCisgICAgICAgIGJlc3RfZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGJlc3RbM10pCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc2hvd19hcHBlbmRzX291dHB1dChmaWxlbmFtZXMsIGJlc3RfZmlsZW5hbWUpCisKKyAgICBkZWYgc2hvd19hcHBlbmRzX2Zvcl9za2lwcGVkKHNlbGYpOgorICAgICAgICBmaWxlbmFtZXMgPSBbb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXIuc2tpcGxpc3QuaXRlcmtleXMoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuc2hvd19hcHBlbmRzX291dHB1dChmaWxlbmFtZXMsIE5vbmUsICIgKHNraXBwZWQpIikKKworICAgIGRlZiBzaG93X2FwcGVuZHNfb3V0cHV0KHNlbGYsIGZpbGVuYW1lcywgYmVzdF9maWxlbmFtZSwgbmFtZV9zdWZmaXggPSAnJyk6CisgICAgICAgIGFwcGVuZGVkLCBtaXNzaW5nID0gc2VsZi5nZXRfYXBwZW5kc19mb3JfZmlsZXMoZmlsZW5hbWVzKQorICAgICAgICBpZiBhcHBlbmRlZDoKKyAgICAgICAgICAgIGZvciBiYXNlbmFtZSwgYXBwZW5kcyBpbiBhcHBlbmRlZDoKKyAgICAgICAgICAgICAgICBsb2dnZXIucGxhaW4oJyVzJXM6JywgYmFzZW5hbWUsIG5hbWVfc3VmZml4KQorICAgICAgICAgICAgICAgIGZvciBhcHBlbmQgaW4gYXBwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCcgICVzJywgYXBwZW5kKQorCisgICAgICAgICAgICBpZiBiZXN0X2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGlmIGJlc3RfZmlsZW5hbWUgaW4gbWlzc2luZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJyVzOiBtaXNzaW5nIGFwcGVuZCBmb3IgcHJlZmVycmVkIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2ZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldF9hcHBlbmRzX2Zvcl9maWxlcyhzZWxmLCBmaWxlbmFtZXMpOgorICAgICAgICBhcHBlbmRlZCwgbm90YXBwZW5kZWQgPSBbXSwgW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIF8sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4oZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQorICAgICAgICAgICAgYXBwZW5kcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBhcHBlbmRzOgorICAgICAgICAgICAgICAgIGFwcGVuZGVkLmFwcGVuZCgoYmFzZW5hbWUsIGxpc3QoYXBwZW5kcykpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3RhcHBlbmRlZC5hcHBlbmQoYmFzZW5hbWUpCisgICAgICAgIHJldHVybiBhcHBlbmRlZCwgbm90YXBwZW5kZWQKKworICAgIGRlZiBkb19zaG93X2Nyb3NzX2RlcGVuZHMoc2VsZiwgYXJncyk6CisgICAgICAgICIiIlNob3cgZGVwZW5kZW5jaWVzIGJldHdlZW4gcmVjaXBlcyB0aGF0IGNyb3NzIGxheWVyIGJvdW5kYXJpZXMuCisKK0ZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHJlY2lwZXMgdGhhdCBjcm9zcyBsYXllciBib3VuZGFyaWVzLgorCitOT1RFOiAuYmJhcHBlbmQgZmlsZXMgY2FuIGltcGFjdCB0aGUgZGVwZW5kZW5jaWVzLgorIiIiCisgICAgICAgIGlnbm9yZV9sYXllcnMgPSAoYXJncy5pZ25vcmUgb3IgJycpLnNwbGl0KCcsJykKKworICAgICAgICBzZWxmLmluaXRfYmJoYW5kbGVyKCkKKworICAgICAgICBwa2dfZm4gPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5wa2dfZm4KKyAgICAgICAgYmJwYXRoID0gc3RyKHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLmdldFZhcignQkJQQVRIJywgVHJ1ZSkpCisgICAgICAgIHNlbGYucmVxdWlyZV9yZSA9IHJlLmNvbXBpbGUociJyZXF1aXJlXHMrKC4rKSIpCisgICAgICAgIHNlbGYuaW5jbHVkZV9yZSA9IHJlLmNvbXBpbGUociJpbmNsdWRlXHMrKC4rKSIpCisgICAgICAgIHNlbGYuaW5oZXJpdF9yZSA9IHJlLmNvbXBpbGUociJpbmhlcml0XHMrKC4rKSIpCisKKyAgICAgICAgZ2xvYmFsX2luaGVyaXQgPSAoc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICAjIFRoZSBiYidzIERFUEVORFMgYW5kIFJERVBFTkRTCisgICAgICAgIGZvciBmIGluIHBrZ19mbjoKKyAgICAgICAgICAgIGYgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGYpWzBdCisgICAgICAgICAgICAjIEdldCB0aGUgbGF5ZXJuYW1lIHRoYXQgdGhlIGZpbGUgaXMgaW4KKyAgICAgICAgICAgIGxheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoZikKKworICAgICAgICAgICAgIyBUaGUgREVQRU5EUworICAgICAgICAgICAgZGVwcyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmRlcHNbZl0KKyAgICAgICAgICAgIGZvciBwbiBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGlmIHBuIGluIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbjoKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvbmZpZ19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJERVBFTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0WzNdLCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgUkRQRU5EUworICAgICAgICAgICAgYWxsX3JkZXBzID0gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucnVuZGVwc1tmXS52YWx1ZXMoKQorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGR1cGxpY2F0ZWQgb3IgbnVsbCBvbmUuCisgICAgICAgICAgICBzb3J0ZWRfcmRlcHMgPSB7fQorICAgICAgICAgICAgIyBUaGUgYWxsX3JkZXBzIGlzIHRoZSBsaXN0IGluIGxpc3QsIHNvIHdlIG5lZWQgdHdvIGZvciBsb29wcworICAgICAgICAgICAgZm9yIGsxIGluIGFsbF9yZGVwczoKKyAgICAgICAgICAgICAgICBmb3IgazIgaW4gazE6CisgICAgICAgICAgICAgICAgICAgIHNvcnRlZF9yZGVwc1trMl0gPSAxCisgICAgICAgICAgICBhbGxfcmRlcHMgPSBzb3J0ZWRfcmRlcHMua2V5cygpCisgICAgICAgICAgICBmb3IgcmRlcCBpbiBhbGxfcmRlcHM6CisgICAgICAgICAgICAgICAgYWxsX3AgPSBiYi5wcm92aWRlcnMuZ2V0UnVudGltZVByb3ZpZGVycyhzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSwgcmRlcCkKKyAgICAgICAgICAgICAgICBpZiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZiBpbiBhbGxfcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHJlY2lwZSBwcm92aWRlcyB0aGlzIG9uZSBpdHNlbGYsIGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGJiLnByb3ZpZGVycy5maWx0ZXJQcm92aWRlcnNSdW5UaW1lKGFsbF9wLCByZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYmhhbmRsZXIuY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YSlbMF1bMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jcm9zc19kZXBlbmRzKCJSREVQRU5EUyIsIGxheWVybmFtZSwgZiwgYmVzdCwgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisKKyAgICAgICAgICAgICMgVGhlIFJSRUNPTU1FTkRTCisgICAgICAgICAgICBhbGxfcnJlY3MgPSBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5ydW5yZWNzW2ZdLnZhbHVlcygpCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBvciBudWxsIG9uZS4KKyAgICAgICAgICAgIHNvcnRlZF9ycmVjcyA9IHt9CisgICAgICAgICAgICAjIFRoZSBhbGxfcnJlY3MgaXMgdGhlIGxpc3QgaW4gbGlzdCwgc28gd2UgbmVlZCB0d28gZm9yIGxvb3BzCisgICAgICAgICAgICBmb3IgazEgaW4gYWxsX3JyZWNzOgorICAgICAgICAgICAgICAgIGZvciBrMiBpbiBrMToKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkX3JyZWNzW2syXSA9IDEKKyAgICAgICAgICAgIGFsbF9ycmVjcyA9IHNvcnRlZF9ycmVjcy5rZXlzKCkKKyAgICAgICAgICAgIGZvciBycmVjIGluIGFsbF9ycmVjczoKKyAgICAgICAgICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLCBycmVjKQorICAgICAgICAgICAgICAgIGlmIGFsbF9wOgorICAgICAgICAgICAgICAgICAgICBpZiBmIGluIGFsbF9wOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgcmVjaXBlIHByb3ZpZGVzIHRoaXMgb25lIGl0c2VsZiwgaWdub3JlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVyc1J1blRpbWUoYWxsX3AsIHJyZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJiaGFuZGxlci5jb25maWdfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhKVswXVswXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2Nyb3NzX2RlcGVuZHMoIlJSRUNPTU1FTkRTIiwgbGF5ZXJuYW1lLCBmLCBiZXN0LCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKworICAgICAgICAgICAgIyBUaGUgaW5oZXJpdCBjbGFzcworICAgICAgICAgICAgY2xzX3JlID0gcmUuY29tcGlsZSgnY2xhc3Nlcy8nKQorICAgICAgICAgICAgaWYgZiBpbiBzZWxmLmJiaGFuZGxlci5jb29rZXJfZGF0YS5pbmhlcml0czoKKyAgICAgICAgICAgICAgICBpbmhlcml0cyA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLmluaGVyaXRzW2ZdCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBpbmhlcml0czoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgaW5oZXJpdHMnIGZvcm1hdCBpcyBbY2xhc3Nlcy9jbHMsIC9wYXRoL3RvL2NsYXNzZXMvY2xzXQorICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSB0aGUgY2xhc3Nlcy9jbHMuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjbHNfcmUubWF0Y2goY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShjbHMpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NuYW1lIGluIGdsb2JhbF9pbmhlcml0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0X2xheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoY2xzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5oZXJpdF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgaW5oZXJpdF9sYXllcm5hbWUgaW4gaWdub3JlX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXJncy5maWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfc2hvcnQgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGNscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmX3Nob3J0ID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgaW5oZXJpdHMgJXMiICUgKGZfc2hvcnQsIGNscykpCisKKyAgICAgICAgICAgICMgVGhlICdyZXF1aXJlL2luY2x1ZGUgeHh4JyBpbiB0aGUgYmIgZmlsZQorICAgICAgICAgICAgcHZfcmUgPSByZS5jb21waWxlKHIiXCR7UFZ9IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmLCAncicpIGFzIGZuZmlsZToKKyAgICAgICAgICAgICAgICBsaW5lID0gZm5maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICBtLCBrZXl3b3JkID0gc2VsZi5tYXRjaF9yZXF1aXJlX2luY2x1ZGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCB0aGUgJ3JlcXVpcmUvaW5jbHVkZSB4eHh4JworICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkX2ZpbGUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAjIFJlcGxhY2UgdGhlICR7UFZ9IHdpdGggdGhlIHJlYWwgUFYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHB2X3JlLnNlYXJjaChuZWVkZWRfZmlsZSkgYW5kIGYgaW4gc2VsZi5iYmhhbmRsZXIuY29va2VyX2RhdGEucGtnX3BlcHZwcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdiA9IHNlbGYuYmJoYW5kbGVyLmNvb2tlcl9kYXRhLnBrZ19wZXB2cHJbZl1bMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWRfZmlsZSA9IHJlLnN1YihyIlwke1BWfSIsIHB2LCBuZWVkZWRfZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpbnRfY3Jvc3NfZmlsZXMoYmJwYXRoLCBrZXl3b3JkLCBsYXllcm5hbWUsIGYsIG5lZWRlZF9maWxlLCBhcmdzLmZpbGVuYW1lcywgaWdub3JlX2xheWVycykKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZuZmlsZS5yZWFkbGluZSgpCisKKyAgICAgICAgIyBUaGUgInJlcXVpcmUvaW5jbHVkZSB4eHgiIGluIGNvbmYvbWFjaGluZS8qLmNvbmYsIC5pbmMgYW5kIC5iYmNsYXNzCisgICAgICAgIGNvbmZfcmUgPSByZS5jb21waWxlKCIuKi9jb25mL21hY2hpbmUvW15cL10qXC5jb25mJCIpCisgICAgICAgIGluY19yZSA9IHJlLmNvbXBpbGUoIi4qXC5pbmMkIikKKyAgICAgICAgIyBUaGUgImluaGVyaXQgeHh4IiBpbiAuYmJjbGFzcworICAgICAgICBiYmNsYXNzX3JlID0gcmUuY29tcGlsZSgiLipcLmJiY2xhc3MkIikKKyAgICAgICAgZm9yIGxheWVyZGlyIGluIHNlbGYuYmJsYXllcnM6CisgICAgICAgICAgICBsYXllcm5hbWUgPSBzZWxmLmdldF9sYXllcl9uYW1lKGxheWVyZGlyKQorICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHMgPSBjb25mX3JlLm1hdGNoKGYpIG9yIGluY19yZS5tYXRjaChmKSBvciBiYmNsYXNzX3JlLm1hdGNoKGYpCisgICAgICAgICAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZiwgJ3InKSBhcyBmZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gZmZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX3JlcXVpcmVfaW5jbHVkZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9ubHkgYmJjbGFzcyBoYXMgdGhlICJpbmhlcml0IHh4eCIgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmJjbGFzcz0iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbSBhbmQgZi5lbmRzd2l0aCgiLmJiY2xhc3MiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIGtleXdvcmQgPSBzZWxmLm1hdGNoX2luaGVyaXQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiY2xhc3M9Ii5iYmNsYXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbmQgYSAncmVxdWlyZS9pbmNsdWRlIHh4eHgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaW50X2Nyb3NzX2ZpbGVzKGJicGF0aCwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBtLmdyb3VwKDEpICsgYmJjbGFzcywgYXJncy5maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmZmlsZS5yZWFkbGluZSgpCisKKyAgICBkZWYgcHJpbnRfY3Jvc3NfZmlsZXMoc2VsZiwgYmJwYXRoLCBrZXl3b3JkLCBsYXllcm5hbWUsIGYsIG5lZWRlZF9maWxlbmFtZSwgc2hvd19maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpOgorICAgICAgICAiIiJQcmludCB0aGUgZGVwZW5kcyB0aGF0IGNyb3NzZXMgYSBsYXllciBib3VuZGFyeSIiIgorICAgICAgICBuZWVkZWRfZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgbmVlZGVkX2ZpbGVuYW1lKQorICAgICAgICBpZiBuZWVkZWRfZmlsZToKKyAgICAgICAgICAgICMgV2hpY2ggbGF5ZXIgaXMgdGhpcyBmaWxlIGZyb20KKyAgICAgICAgICAgIG5lZWRlZF9sYXllcm5hbWUgPSBzZWxmLmdldF9maWxlX2xheWVyKG5lZWRlZF9maWxlKQorICAgICAgICAgICAgaWYgbmVlZGVkX2xheWVybmFtZSAhPSBsYXllcm5hbWUgYW5kIG5vdCBuZWVkZWRfbGF5ZXJuYW1lIGluIGlnbm9yZV9sYXllcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBmID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KGYpCisgICAgICAgICAgICAgICAgICAgIG5lZWRlZF9maWxlID0gc2VsZi5yZW1vdmVfbGF5ZXJfcHJlZml4KG5lZWRlZF9maWxlKQorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJXMgJXMgJXMiICUoZiwga2V5d29yZCwgbmVlZGVkX2ZpbGUpKQorCisgICAgZGVmIG1hdGNoX2luaGVyaXQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIk1hdGNoIHRoZSBpbmhlcml0IHh4eCBsaW5lIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5pbmhlcml0X3JlLm1hdGNoKGxpbmUpLCAiaW5oZXJpdHMiKQorCisgICAgZGVmIG1hdGNoX3JlcXVpcmVfaW5jbHVkZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiTWF0Y2ggdGhlIHJlcXVpcmUvaW5jbHVkZSB4eHggbGluZSIiIgorICAgICAgICBtID0gc2VsZi5yZXF1aXJlX3JlLm1hdGNoKGxpbmUpCisgICAgICAgIGtleXdvcmQgPSAicmVxdWlyZXMiCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgbSA9IHNlbGYuaW5jbHVkZV9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAga2V5d29yZCA9ICJpbmNsdWRlcyIKKyAgICAgICAgcmV0dXJuIChtLCBrZXl3b3JkKQorCisgICAgZGVmIGNoZWNrX2Nyb3NzX2RlcGVuZHMoc2VsZiwga2V5d29yZCwgbGF5ZXJuYW1lLCBmLCBuZWVkZWRfZmlsZSwgc2hvd19maWxlbmFtZXMsIGlnbm9yZV9sYXllcnMpOgorICAgICAgICAiIiJQcmludCB0aGUgREVQRU5EUy9SREVQRU5EUyBmaWxlIHRoYXQgY3Jvc3NlcyBhIGxheWVyIGJvdW5kYXJ5IiIiCisgICAgICAgIGJlc3RfcmVhbGZuID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihuZWVkZWRfZmlsZSlbMF0KKyAgICAgICAgbmVlZGVkX2xheWVybmFtZSA9IHNlbGYuZ2V0X2ZpbGVfbGF5ZXIoYmVzdF9yZWFsZm4pCisgICAgICAgIGlmIG5lZWRlZF9sYXllcm5hbWUgIT0gbGF5ZXJuYW1lIGFuZCBub3QgbmVlZGVkX2xheWVybmFtZSBpbiBpZ25vcmVfbGF5ZXJzOgorICAgICAgICAgICAgaWYgbm90IHNob3dfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLnJlbW92ZV9sYXllcl9wcmVmaXgoZikKKyAgICAgICAgICAgICAgICBiZXN0X3JlYWxmbiA9IHNlbGYucmVtb3ZlX2xheWVyX3ByZWZpeChiZXN0X3JlYWxmbikKKworICAgICAgICAgICAgbG9nZ2VyLnBsYWluKCIlcyAlcyAlcyIgJSAoZiwga2V5d29yZCwgYmVzdF9yZWFsZm4pKQorCisKK2RlZiBtYWluKCk6CisKKyAgICBjbWRzID0gQ29tbWFuZHMoKQorCisgICAgZGVmIGFkZF9jb21tYW5kKGNtZG5hbWUsIGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIENvbnZlcnQgZG9jc3RyaW5nIGZvciBmdW5jdGlvbiB0byBoZWxwIChvbmUtbGluZXIgc2hvd24gaW4gbWFpbiAtLWhlbHApIGFuZCBkZXNjcmlwdGlvbiAoc2hvd24gaW4gc3ViY29tbWFuZCAtLWhlbHApCisgICAgICAgIGRvY3NwbGl0ID0gZnVuY3Rpb24uX19kb2NfXy5zcGxpdGxpbmVzKCkKKyAgICAgICAgaGVscCA9IGRvY3NwbGl0WzBdCisgICAgICAgIGlmIGxlbihkb2NzcGxpdCkgPiAxOgorICAgICAgICAgICAgZGVzYyA9ICdcbicuam9pbihkb2NzcGxpdFsxOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXNjID0gaGVscAorICAgICAgICBzdWJwYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoY21kbmFtZSwgKmFyZ3MsIGhlbHA9aGVscCwgZGVzY3JpcHRpb249ZGVzYywgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd1RleHRIZWxwRm9ybWF0dGVyLCAqKmt3YXJncykKKyAgICAgICAgc3VicGFyc2VyLnNldF9kZWZhdWx0cyhmdW5jPWZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc3VicGFyc2VyCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iQml0QmFrZSBsYXllcnMgdXRpbGl0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywgbWV0YXZhcj0nPHN1YmNvbW1hbmQ+JykKKworICAgIHBhcnNlcl9zaG93X2xheWVycyA9IGFkZF9jb21tYW5kKCdzaG93LWxheWVycycsIGNtZHMuZG9fc2hvd19sYXllcnMpCisKKyAgICBwYXJzZXJfYWRkX2xheWVyID0gYWRkX2NvbW1hbmQoJ2FkZC1sYXllcicsIGNtZHMuZG9fYWRkX2xheWVyKQorICAgIHBhcnNlcl9hZGRfbGF5ZXIuYWRkX2FyZ3VtZW50KCdsYXllcmRpcicsIGhlbHA9J0xheWVyIGRpcmVjdG9yeSB0byBhZGQnKQorCisgICAgcGFyc2VyX3JlbW92ZV9sYXllciA9IGFkZF9jb21tYW5kKCdyZW1vdmUtbGF5ZXInLCBjbWRzLmRvX3JlbW92ZV9sYXllcikKKyAgICBwYXJzZXJfcmVtb3ZlX2xheWVyLmFkZF9hcmd1bWVudCgnbGF5ZXJkaXInLCBoZWxwPSdMYXllciBkaXJlY3RvcnkgdG8gcmVtb3ZlICh3aWxkY2FyZHMgYWxsb3dlZCwgZW5jbG9zZSBpbiBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisgICAgcGFyc2VyX3JlbW92ZV9sYXllci5zZXRfZGVmYXVsdHMoZnVuYz1jbWRzLmRvX3JlbW92ZV9sYXllcikKKworICAgIHBhcnNlcl9zaG93X292ZXJsYXllZCA9IGFkZF9jb21tYW5kKCdzaG93LW92ZXJsYXllZCcsIGNtZHMuZG9fc2hvd19vdmVybGF5ZWQpCisgICAgcGFyc2VyX3Nob3dfb3ZlcmxheWVkLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGZvcm1hdHRpbmcsIGxpc3QgZmlsZW5hbWVzIG9mIGhpZ2hlciBwcmlvcml0eSByZWNpcGVzIHdpdGggdGhlIG9uZXMgdGhleSBvdmVybGF5IGluZGVudGVkIHVuZGVybmVhdGgnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9zaG93X292ZXJsYXllZC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2FtZS12ZXJzaW9uJywgaGVscD0nb25seSBsaXN0IG92ZXJsYXllZCByZWNpcGVzIHdoZXJlIHRoZSB2ZXJzaW9uIGlzIHRoZSBzYW1lJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIHBhcnNlcl9zaG93X3JlY2lwZXMgPSBhZGRfY29tbWFuZCgnc2hvdy1yZWNpcGVzJywgY21kcy5kb19zaG93X3JlY2lwZXMpCisgICAgcGFyc2VyX3Nob3dfcmVjaXBlcy5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmlsZW5hbWVzJywgaGVscD0naW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtYXR0aW5nLCBsaXN0IGZpbGVuYW1lcyBvZiBoaWdoZXIgcHJpb3JpdHkgcmVjaXBlcyB3aXRoIHRoZSBvbmVzIHRoZXkgb3ZlcmxheSBpbmRlbnRlZCB1bmRlcm5lYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tdWx0aXBsZScsIGhlbHA9J29ubHkgbGlzdCB3aGVyZSBtdWx0aXBsZSByZWNpcGVzIChpbiB0aGUgc2FtZSBsYXllciBvciBkaWZmZXJlbnQgbGF5ZXJzKSBleGlzdCBmb3IgdGhlIHNhbWUgcmVjaXBlIG5hbWUnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9zaG93X3JlY2lwZXMuYWRkX2FyZ3VtZW50KCctaScsICctLWluaGVyaXRzJywgaGVscD0nb25seSBsaXN0IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBuYW1lZCBjbGFzcycsIG1ldGF2YXI9J0NMQVNTJywgZGVmYXVsdD0nJykKKyAgICBwYXJzZXJfc2hvd19yZWNpcGVzLmFkZF9hcmd1bWVudCgncG5zcGVjJywgbmFyZ3M9Jz8nLCBoZWxwPSdvcHRpb25hbCByZWNpcGUgbmFtZSBzcGVjaWZpY2F0aW9uICh3aWxkY2FyZHMgYWxsb3dlZCwgZW5jbG9zZSBpbiBxdW90ZXMgdG8gYXZvaWQgc2hlbGwgZXhwYW5zaW9uKScpCisKKyAgICBwYXJzZXJfc2hvd19hcHBlbmRzID0gYWRkX2NvbW1hbmQoJ3Nob3ctYXBwZW5kcycsIGNtZHMuZG9fc2hvd19hcHBlbmRzKQorCisgICAgcGFyc2VyX2ZsYXR0ZW4gPSBhZGRfY29tbWFuZCgnZmxhdHRlbicsIGNtZHMuZG9fZmxhdHRlbikKKyAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ2xheWVyJywgbmFyZ3M9JyonLCBoZWxwPSdPcHRpb25hbCBsYXllcihzKSB0byBmbGF0dGVuIChvdGhlcndpc2UgYWxsIGFyZSBmbGF0dGVuZWQpJykKKyAgICBwYXJzZXJfZmxhdHRlbi5hZGRfYXJndW1lbnQoJ291dHB1dGRpcicsIGhlbHA9J091dHB1dCBkaXJlY3RvcnknKQorCisgICAgcGFyc2VyX3Nob3dfY3Jvc3NfZGVwZW5kcyA9IGFkZF9jb21tYW5kKCdzaG93LWNyb3NzLWRlcGVuZHMnLCBjbWRzLmRvX3Nob3dfY3Jvc3NfZGVwZW5kcykKKyAgICBwYXJzZXJfc2hvd19jcm9zc19kZXBlbmRzLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1maWxlbmFtZXMnLCBoZWxwPSdzaG93IGZ1bGwgZmlsZSBwYXRoJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfc2hvd19jcm9zc19kZXBlbmRzLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pZ25vcmUnLCBoZWxwPSdpZ25vcmUgZGVwZW5kZW5jaWVzIG9uIGl0ZW1zIGluIHRoZSBzcGVjaWZpZWQgbGF5ZXIocykgKHNwbGl0IG11bHRpcGxlIGxheWVyIG5hbWVzIHdpdGggY29tbWFzLCBubyBzcGFjZXMpJywgbWV0YXZhcj0nTEFZRVJOQU1FJykKKworICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoID0gYWRkX2NvbW1hbmQoJ2xheWVyaW5kZXgtZmV0Y2gnLCBjbWRzLmRvX2xheWVyaW5kZXhfZmV0Y2gpCisgICAgcGFyc2VyX2xheWVyaW5kZXhfZmV0Y2guYWRkX2FyZ3VtZW50KCctbicsICctLXNob3ctb25seScsIGhlbHA9J3Nob3cgZGVwZW5kZW5jaWVzIGFuZCBkbyBub3RoaW5nIGVsc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWInLCAnLS1icmFuY2gnLCBoZWxwPSdicmFuY2ggbmFtZSB0byBmZXRjaCAoZGVmYXVsdCAlKGRlZmF1bHQpcyknLCBkZWZhdWx0PSdtYXN0ZXInKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnLWknLCAnLS1pZ25vcmUnLCBoZWxwPSdhc3N1bWUgdGhlIHNwZWNpZmllZCBsYXllcnMgZG8gbm90IG5lZWQgdG8gYmUgZmV0Y2hlZC9hZGRlZCAoc2VwYXJhdGUgbXVsdGlwbGUgbGF5ZXJzIHdpdGggY29tbWFzLCBubyBzcGFjZXMpJywgbWV0YXZhcj0nTEFZRVInKQorICAgIHBhcnNlcl9sYXllcmluZGV4X2ZldGNoLmFkZF9hcmd1bWVudCgnbGF5ZXJuYW1lJywgbmFyZ3M9JysnLCBoZWxwPSdsYXllciB0byBmZXRjaCcpCisKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMgPSBhZGRfY29tbWFuZCgnbGF5ZXJpbmRleC1zaG93LWRlcGVuZHMnLCBjbWRzLmRvX2xheWVyaW5kZXhfc2hvd19kZXBlbmRzKQorICAgIHBhcnNlcl9sYXllcmluZGV4X3Nob3dfZGVwZW5kcy5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnJhbmNoJywgaGVscD0nYnJhbmNoIG5hbWUgdG8gZmV0Y2ggKGRlZmF1bHQgJShkZWZhdWx0KXMpJywgZGVmYXVsdD0nbWFzdGVyJykKKyAgICBwYXJzZXJfbGF5ZXJpbmRleF9zaG93X2RlcGVuZHMuYWRkX2FyZ3VtZW50KCdsYXllcm5hbWUnLCBuYXJncz0nKycsIGhlbHA9J2xheWVyIHRvIHF1ZXJ5JykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgdHJ5OgorICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICBleGNlcHQgVXNlckVycm9yIGFzIGVycjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihlcnIpKQorICAgICAgICByZXQgPSAxCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlLXByc2VydgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOGQ3YWNiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9iaW4vYml0YmFrZS1wcnNlcnYKQEAgLTAsMCArMSw1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLCdsaWInKSkKKworaW1wb3J0IHByc2VydgoraW1wb3J0IHByc2Vydi5zZXJ2CisKK19fdmVyc2lvbl9fPSIxLjAuMCIKKworUFJIT1NUX0RFRkFVTFQ9JzAuMC4wLjAnCitQUlBPUlRfREVGQVVMVD04NTg1CisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICB2ZXJzaW9uPSJCaXRiYWtlIFBSIFNlcnZpY2UgQ29yZSB2ZXJzaW9uICVzLCAlJXByb2cgdmVyc2lvbiAlcyIgJSAocHJzZXJ2Ll9fdmVyc2lvbl9fLCBfX3ZlcnNpb25fXyksCisgICAgICAgIHVzYWdlID0gIiVwcm9nIDwgLS1zdGFydCB8IC0tc3RvcCA+IFtvcHRpb25zXSIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maWxlIiwgaGVscD0iZGF0YWJhc2UgZmlsZW5hbWUoZGVmYXVsdDogcHJzZXJ2LnNxbGl0ZTMpIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iZGJmaWxlIiwgdHlwZT0ic3RyaW5nIiwgZGVmYXVsdD0icHJzZXJ2LnNxbGl0ZTMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZyIsIGhlbHA9ImxvZyBmaWxlbmFtZShkZWZhdWx0OiBwcnNlcnYubG9nKSIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImxvZ2ZpbGUiLCB0eXBlPSJzdHJpbmciLCBkZWZhdWx0PSJwcnNlcnYubG9nIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1sb2dsZXZlbCIsIGhlbHA9ImxvZ2dpbmcgbGV2ZWwsIGkuZS4gQ1JJVElDQUwsIEVSUk9SLCBXQVJOSU5HLCBJTkZPLCBERUJVRyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgdHlwZT0ic3RyaW5nIiwgZGVzdD0ibG9nbGV2ZWwiLCBkZWZhdWx0ID0gIklORk8iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXN0YXJ0IiwgaGVscD0ic3RhcnQgZGFlbW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzdGFydCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc3RvcCIsIGhlbHA9InN0b3AgZGFlbW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJzdG9wIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1ob3N0IiwgaGVscD0iaXAgYWRkcmVzcyB0byBiaW5kIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iaG9zdCIsIHR5cGU9InN0cmluZyIsIGRlZmF1bHQ9UFJIT1NUX0RFRkFVTFQpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tcG9ydCIsIGhlbHA9InBvcnQgbnVtYmVyKGRlZmF1bHQ6IDg1ODUpIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icG9ydCIsIHR5cGU9ImludCIsIGRlZmF1bHQ9UFJQT1JUX0RFRkFVTFQpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisgICAgcHJzZXJ2LmluaXRfbG9nZ2VyKG9zLnBhdGguYWJzcGF0aChvcHRpb25zLmxvZ2ZpbGUpLG9wdGlvbnMubG9nbGV2ZWwpCisKKyAgICBpZiBvcHRpb25zLnN0YXJ0OgorICAgICAgICByZXQ9cHJzZXJ2LnNlcnYuc3RhcnRfZGFlbW9uKG9wdGlvbnMuZGJmaWxlLCBvcHRpb25zLmhvc3QsIG9wdGlvbnMucG9ydCxvcy5wYXRoLmFic3BhdGgob3B0aW9ucy5sb2dmaWxlKSkKKyAgICBlbGlmIG9wdGlvbnMuc3RvcDoKKyAgICAgICAgcmV0PXByc2Vydi5zZXJ2LnN0b3BfZGFlbW9uKG9wdGlvbnMuaG9zdCwgb3B0aW9ucy5wb3J0KQorICAgIGVsc2U6CisgICAgICAgIHJldD1wYXJzZXIucHJpbnRfaGVscCgpCisgICAgcmV0dXJuIHJldAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvYmluL2JpdGJha2Utc2VsZnRlc3QgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlLXNlbGZ0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MmViMWIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlLXNlbGZ0ZXN0CkBAIC0wLDAgKzEsNTUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cywgbG9nZ2luZworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksICdsaWInKSkKKworaW1wb3J0IHVuaXR0ZXN0Cit0cnk6CisgICAgaW1wb3J0IGJiCitleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdChzdHIoZXhjKSkKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQoJ3VzYWdlOiBbQkJfU0tJUF9ORVRURVNUUz15ZXNdICVzIFstdl0gW3Rlc3RuYW1lMSBbdGVzdG5hbWUyXS4uLl0nICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkpCisKK3ZlcmJvc2l0eSA9IDEKKwordGVzdHMgPSBzeXMuYXJndlsxOl0KK2lmICctdicgaW4gc3lzLmFyZ3Y6CisgICAgdGVzdHMucmVtb3ZlKCctdicpCisgICAgdmVyYm9zaXR5ID0gMgorCitpZiB0ZXN0czoKKyAgICBpZiAnLS1oZWxwJyBpbiBzeXMuYXJndlsxOl06CisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMCkKK2Vsc2U6CisgICAgdGVzdHMgPSBbImJiLnRlc3RzLmNvZGVwYXJzZXIiLAorICAgICAgICAgICAgICJiYi50ZXN0cy5jb3ciLAorICAgICAgICAgICAgICJiYi50ZXN0cy5kYXRhIiwKKyAgICAgICAgICAgICAiYmIudGVzdHMuZmV0Y2giLAorICAgICAgICAgICAgICJiYi50ZXN0cy5wYXJzZSIsCisgICAgICAgICAgICAgImJiLnRlc3RzLnV0aWxzIl0KKworZm9yIHQgaW4gdGVzdHM6CisgICAgdCA9ICcuJy5qb2luKHQuc3BsaXQoJy4nKVs6M10pCisgICAgX19pbXBvcnRfXyh0KQorCit1bml0dGVzdC5tYWluKGFyZ3Y9WyJiaXRiYWtlLXNlbGZ0ZXN0Il0gKyB0ZXN0cywgdmVyYm9zaXR5PXZlcmJvc2l0eSkKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIgYi9iaXRiYWtlL2Jpbi9iaXRiYWtlLXdvcmtlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjE3Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9iaW4vYml0YmFrZS13b3JrZXIKQEAgLTAsMCArMSw0MzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICdsaWInKSkKK2Zyb20gYmIgaW1wb3J0IGZldGNoMgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGVycm5vCitpbXBvcnQgc2lnbmFsCisKKyMgVXNlcnMgc2hvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcyBjb2RlIGRpcmVjdGx5CitpZiBsZW4oc3lzLmFyZ3YpICE9IDIgb3Igbm90IHN5cy5hcmd2WzFdLnN0YXJ0c3dpdGgoImRlY2FmYmFkIik6CisgICAgcHJpbnQoImJpdGJha2Utd29ya2VyIGlzIG1lYW50IGZvciBpbnRlcm5hbCBleGVjdXRpb24gYnkgYml0YmFrZSBpdHNlbGYsIHBsZWFzZSBkb24ndCB1c2UgaXQgc3RhbmRhbG9uZS4iKQorICAgIHN5cy5leGl0KDEpCisKK3Byb2ZpbGluZyA9IEZhbHNlCitpZiBzeXMuYXJndlsxXSA9PSAiZGVjYWZiYWRiYWQiOgorICAgIHByb2ZpbGluZyA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjUHJvZmlsZSBhcyBwcm9maWxlCisgICAgZXhjZXB0OgorICAgICAgICBpbXBvcnQgcHJvZmlsZQorCisjIFVuYnVmZmVyIHN0ZG91dCB0byBhdm9pZCBsb2cgdHJ1bmNhdGlvbiBpbiB0aGUgZXZlbnQKKyMgb2YgYW4gdW5vcmRlcmx5IGV4aXQgYXMgd2VsbCBhcyB0byBwcm92aWRlIHRpbWVseQorIyB1cGRhdGVzIHRvIGxvZyBmaWxlcyBmb3IgdXNlIHdpdGggdGFpbAordHJ5OgorICAgIGlmIHN5cy5zdGRvdXQubmFtZSA9PSAnPHN0ZG91dD4nOgorICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKK2V4Y2VwdDoKKyAgICBwYXNzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBiYi5tc2cubm90ZSgxLCBiYi5tc2cuZG9tYWluLkNhY2hlLCAiSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworCit3b3JrZXJfcGlwZSA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKK2JiLnV0aWxzLm5vbmJsb2NraW5nZmQod29ya2VyX3BpcGUpCisKK2hhbmRsZXIgPSBiYi5ldmVudC5Mb2dIYW5kbGVyKCkKK2xvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKK2lmIDA6CisgICAgIyBDb2RlIHRvIHdyaXRlIG91dCBhIGxvZyBmaWxlIG9mIGFsbCBldmVudHMgcGFzc2luZyB0aHJvdWdoIHRoZSB3b3JrZXIKKyAgICBsb2dmaWxlbmFtZSA9ICIvdG1wL3dvcmtlcmxvZ2ZpbGUiCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBjb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihsb2dmaWxlbmFtZSkKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlbG9nKQorICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlbG9nKQorCit3b3JrZXJfcXVldWUgPSAiIgorCitkZWYgd29ya2VyX2ZpcmUoZXZlbnQsIGQpOgorICAgIGRhdGEgPSAiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgIjwvZXZlbnQ+IgorICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoZGF0YSkKKworZGVmIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoZXZlbnQpOgorICAgIGdsb2JhbCB3b3JrZXJfcXVldWUKKworICAgIHdvcmtlcl9xdWV1ZSA9IHdvcmtlcl9xdWV1ZSArIGV2ZW50CisgICAgd29ya2VyX2ZsdXNoKCkKKworZGVmIHdvcmtlcl9mbHVzaCgpOgorICAgIGdsb2JhbCB3b3JrZXJfcXVldWUsIHdvcmtlcl9waXBlCisKKyAgICBpZiBub3Qgd29ya2VyX3F1ZXVlOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgd3JpdHRlbiA9IG9zLndyaXRlKHdvcmtlcl9waXBlLCB3b3JrZXJfcXVldWUpCisgICAgICAgIHdvcmtlcl9xdWV1ZSA9IHdvcmtlcl9xdWV1ZVt3cml0dGVuOl0KKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOIGFuZCBlLmVycm5vICE9IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgcmFpc2UKKworZGVmIHdvcmtlcl9jaGlsZF9maXJlKGV2ZW50LCBkKToKKyAgICBnbG9iYWwgd29ya2VyX3BpcGUKKworICAgIGRhdGEgPSAiPGV2ZW50PiIgKyBwaWNrbGUuZHVtcHMoZXZlbnQpICsgIjwvZXZlbnQ+IgorICAgIHRyeToKKyAgICAgICAgd29ya2VyX3BpcGUud3JpdGUoZGF0YSkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgc2lndGVybV9oYW5kbGVyKE5vbmUsIE5vbmUpCisgICAgICAgIHJhaXNlCisKK2JiLmV2ZW50Lndvcmtlcl9maXJlID0gd29ya2VyX2ZpcmUKKworbGYgPSBOb25lCisjbGYgPSBvcGVuKCIvdG1wL3dvcmtlcmNvbW1hbmRsb2ciLCAidysiKQorZGVmIHdvcmtlcmxvZ193cml0ZShtc2cpOgorICAgIGlmIGxmOgorICAgICAgICBsZi53cml0ZShtc2cpCisgICAgICAgIGxmLmZsdXNoKCkKKworZGVmIHNpZ3Rlcm1faGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICBvcy5raWxscGcoMCwgc2lnbmFsLlNJR1RFUk0pCisgICAgc3lzLmV4aXQoKQorCitkZWYgZm9ya19vZmZfdGFzayhjZmcsIGRhdGEsIHdvcmtlcmRhdGEsIGZuLCB0YXNrLCB0YXNrbmFtZSwgYXBwZW5kcywgdGFza2RlcGRhdGEsIHF1aWV0ZXJyb3JzPUZhbHNlKToKKyAgICAjIFdlIG5lZWQgdG8gc2V0dXAgdGhlIGVudmlyb25tZW50IEJFRk9SRSB0aGUgZm9yaywgc2luY2UKKyAgICAjIGEgZm9yaygpIG9yIGV4ZWMqKCkgYWN0aXZhdGVzIFBTRVVETy4uLgorCisgICAgZW52YmFja3VwID0ge30KKyAgICBmYWtlZW52ID0ge30KKyAgICB1bWFzayA9IE5vbmUKKworICAgIHRhc2tkZXAgPSB3b3JrZXJkYXRhWyJ0YXNrZGVwcyJdW2ZuXQorICAgIGlmICd1bWFzaycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsndW1hc2snXToKKyAgICAgICAgIyB1bWFzayBtaWdodCBjb21lIGluIGFzIGEgbnVtYmVyIG9yIHRleHQgc3RyaW5nLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIHVtYXNrID0gaW50KHRhc2tkZXBbJ3VtYXNrJ11bdGFza25hbWVdLDgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgdW1hc2sgPSB0YXNrZGVwWyd1bWFzayddW3Rhc2tuYW1lXQorCisgICAgIyBXZSBjYW4ndCB1c2UgdGhlIGZha2Vyb290IGVudmlyb25tZW50IGluIGEgZHJ5IHJ1biBhcyBpdCBwb3NzaWJseSBoYXNuJ3QgYmVlbiBidWlsdAorICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXSBhbmQgbm90IGNmZy5kcnlfcnVuOgorICAgICAgICBlbnZ2YXJzID0gKHdvcmtlcmRhdGFbImZha2Vyb290ZW52Il1bZm5dIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluICh2YXIuc3BsaXQoJz0nKSBmb3IgdmFyIGluIGVudnZhcnMpOgorICAgICAgICAgICAgZW52YmFja3VwW2tleV0gPSBvcy5lbnZpcm9uLmdldChrZXkpCisgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZmFrZWVudltrZXldID0gdmFsdWUKKworICAgICAgICBmYWtlZGlycyA9ICh3b3JrZXJkYXRhWyJmYWtlcm9vdGRpcnMiXVtmbl0gb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIHAgaW4gZmFrZWRpcnM6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdSdW5uaW5nICVzOiVzIHVuZGVyIGZha2Vyb290LCBmYWtlZGlyczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbiwgdGFza25hbWUsICcsICcuam9pbihmYWtlZGlycykpKQorICAgIGVsc2U6CisgICAgICAgIGVudnZhcnMgPSAod29ya2VyZGF0YVsiZmFrZXJvb3Rub2VudiJdW2ZuXSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAodmFyLnNwbGl0KCc9JykgZm9yIHZhciBpbiBlbnZ2YXJzKToKKyAgICAgICAgICAgIGVudmJhY2t1cFtrZXldID0gb3MuZW52aXJvbi5nZXQoa2V5KQorICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGZha2VlbnZba2V5XSA9IHZhbHVlCisKKyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKworICAgIHRyeToKKyAgICAgICAgcGlwZWluLCBwaXBlb3V0ID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVpbiA9IG9zLmZkb3BlbihwaXBlaW4sICdyYicsIDQwOTYpCisgICAgICAgIHBpcGVvdXQgPSBvcy5mZG9wZW4ocGlwZW91dCwgJ3diJywgMCkKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmb3JrIGZhaWxlZDogJWQgKCVzKSIgJSAoZS5lcnJubywgZS5zdHJlcnJvcikpCisKKyAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgZGVmIGNoaWxkKCk6CisgICAgICAgICAgICBnbG9iYWwgd29ya2VyX3BpcGUKKyAgICAgICAgICAgIHBpcGVpbi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ3Rlcm1faGFuZGxlcikKKyAgICAgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2lndGVybV9oYW5kbGVyKQorICAgICAgICAgICAgYmIudXRpbHMuc2lnbmFsX29uX3BhcmVudF9leGl0KCJTSUdURVJNIikKKworICAgICAgICAgICAgIyBTYXZlIG91dCB0aGUgUElEIHNvIHRoYXQgdGhlIGV2ZW50IGNhbiBpbmNsdWRlIGl0IHRoZQorICAgICAgICAgICAgIyBldmVudHMKKyAgICAgICAgICAgIGJiLmV2ZW50Lndvcmtlcl9waWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgYmIuZXZlbnQud29ya2VyX2ZpcmUgPSB3b3JrZXJfY2hpbGRfZmlyZQorICAgICAgICAgICAgd29ya2VyX3BpcGUgPSBwaXBlb3V0CisKKyAgICAgICAgICAgICMgTWFrZSB0aGUgY2hpbGQgdGhlIHByb2Nlc3MgZ3JvdXAgbGVhZGVyIGFuZCBlbnN1cmUgbm8KKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGN1cnJlbnQgdGVybWluYWwKKyAgICAgICAgICAgICMgVGhpcyBlbnN1cmVzIHNpZ25hbHMgc2VudCB0byB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgbGlrZSBDdHJsK0MKKyAgICAgICAgICAgICMgZG9uJ3Qgc3RvcCB0aGUgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAgICAgb3Muc2V0c2lkKCkKKyAgICAgICAgICAgICMgTm8gc3RkaW4KKyAgICAgICAgICAgIG5ld3NpID0gb3Mub3Blbihvcy5kZXZudWxsLCBvcy5PX1JEV1IpCisgICAgICAgICAgICBvcy5kdXAyKG5ld3NpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisKKyAgICAgICAgICAgIGlmIHVtYXNrOgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKHVtYXNrKQorCisgICAgICAgICAgICBkYXRhLnNldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsICIxIikKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9UQVNLREVQREFUQSIsIHRhc2tkZXBkYXRhKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsIHdvcmtlcmRhdGFbImJ1aWxkbmFtZSJdKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoIkRBVEUiLCB3b3JrZXJkYXRhWyJkYXRlIl0pCisgICAgICAgICAgICBkYXRhLnNldFZhcigiVElNRSIsIHdvcmtlcmRhdGFbInRpbWUiXSkKKyAgICAgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5zZXRfdGFza2RhdGEod29ya2VyZGF0YVsic2lnZGF0YSJdKQorICAgICAgICAgICAgcmV0ID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRoZV9kYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRzLCBkYXRhKQorICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhcignQkJfVEFTS0hBU0gnLCB3b3JrZXJkYXRhWyJydW5xX2hhc2giXVt0YXNrXSkKKworICAgICAgICAgICAgICAgICMgZXhwb3J0ZWRfdmFycygpIHJldHVybnMgYSBnZW5lcmF0b3Igd2hpY2ggKmNhbm5vdCogYmUgcGFzc2VkIHRvIG9zLmVudmlyb24udXBkYXRlKCkgCisgICAgICAgICAgICAgICAgIyBzdWNjZXNzZnVsbHkuIFdlIGFsc28gbmVlZCB0byB1bnNldCBhbnl0aGluZyBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGljaCBzaG91bGRuJ3QgYmUgdGhlcmUgCisgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGJiLmRhdGEuZXhwb3J0ZWRfdmFycyh0aGVfZGF0YSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCisgICAgICAgICAgICAgICAgZm9yIGUsIHYgaW4gZXhwb3J0czoKKyAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvbltlXSA9IHYKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBmYWtlZW52OgorICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2VdID0gZmFrZWVudltlXQorICAgICAgICAgICAgICAgICAgICB0aGVfZGF0YS5zZXRWYXIoZSwgZmFrZWVudltlXSkKKyAgICAgICAgICAgICAgICAgICAgdGhlX2RhdGEuc2V0VmFyRmxhZyhlLCAnZXhwb3J0JywgIjEiKQorCisgICAgICAgICAgICAgICAgaWYgcXVpZXRlcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHRoZV9kYXRhLnNldFZhckZsYWcodGFza25hbWUsICJxdWlldGVycm9ycyIsICIxIikKKworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0ZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoc3RyKGV4YykpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBjZmcuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICByZXR1cm4gYmIuYnVpbGQuZXhlY190YXNrKGZuLCB0YXNrbmFtZSwgdGhlX2RhdGEsIGNmZy5wcm9maWxlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGlmIG5vdCBwcm9maWxpbmc6CisgICAgICAgICAgICBvcy5fZXhpdChjaGlsZCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS0lcy5sb2ciICUgKGZuLnJlcGxhY2UoIi8iLCAiLSIpICsgIi0iICsgdGFza25hbWUpCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgICAgIHRyeTogCisgICAgICAgICAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgY2hpbGQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZm5hbWUpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQocmV0KQorICAgIGVsc2U6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGVudmJhY2t1cC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25ba2V5XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQorCisgICAgcmV0dXJuIHBpZCwgcGlwZWluLCBwaXBlb3V0CisKK2NsYXNzIHJ1blF1ZXVlV29ya2VyUGlwZSgpOgorICAgICIiIgorICAgIEFic3RyYWN0aW9uIGZvciBhIHBpcGUgYmV0d2VlbiBhIHdvcmtlciB0aHJlYWQgYW5kIHRoZSB3b3JrZXIgc2VydmVyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVpbiwgcGlwZW91dCk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBwaXBlaW4KKyAgICAgICAgaWYgcGlwZW91dDoKKyAgICAgICAgICAgIHBpcGVvdXQuY2xvc2UoKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHN0YXJ0ID0gbGVuKHNlbGYucXVldWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUgPSBzZWxmLnF1ZXVlICsgc2VsZi5pbnB1dC5yZWFkKDEwMjQwMCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUdBSU46CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBlbmQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgd2hpbGUgaW5kZXggIT0gLTE6CisgICAgICAgICAgICB3b3JrZXJfZmlyZV9wcmVwaWNrbGVkKHNlbGYucXVldWVbOmluZGV4KzhdKQorICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrODpdCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9ldmVudD4iKQorICAgICAgICByZXR1cm4gKGVuZCA+IHN0YXJ0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLnJlYWQoKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxlbihzZWxmLnF1ZXVlKSA+IDA6CisgICAgICAgICAgICBwcmludCgiV2FybmluZywgd29ya2VyIGNoaWxkIGxlZnQgcGFydGlhbCBtZXNzYWdlOiAlcyIgJSBzZWxmLnF1ZXVlKQorICAgICAgICBzZWxmLmlucHV0LmNsb3NlKCkKKworbm9ybWFsZXhpdCA9IEZhbHNlCisKK2NsYXNzIEJpdGJha2VXb3JrZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGluKToKKyAgICAgICAgc2VsZi5pbnB1dCA9IGRpbgorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorICAgICAgICBzZWxmLmNvb2tlcmNmZyA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmJ1aWxkX3BpZHMgPSB7fQorICAgICAgICBzZWxmLmJ1aWxkX3BpcGVzID0ge30KKyAgICAKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbikKKyAgICAgICAgIyBMZXQgU0lHSFVQIGV4aXQgYXMgU0lHVEVSTQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisKKyAgICBkZWYgc2lndGVybV9leGNlcHRpb24oc2VsZiwgc2lnbnVtLCBzdGFja2ZyYW1lKToKKyAgICAgICAgaWYgc2lnbnVtID09IHNpZ25hbC5TSUdURVJNOgorICAgICAgICAgICAgYmIud2FybigiV29ya2VyIHJlY2lldmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBlbGlmIHNpZ251bSA9PSBzaWduYWwuU0lHSFVQOgorICAgICAgICAgICAgYmIud2FybigiV29ya2VyIHJlY2lldmVkIFNJR0hVUCwgc2h1dHRpbmcgZG93bi4uLiIpCisgICAgICAgIHNlbGYuaGFuZGxlX2ZpbmlzaG5vdyhOb25lKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzaWduYWwuU0lHX0RGTCkKKyAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgc2VydmUoc2VsZik6ICAgICAgICAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIChyZWFkeSwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLmlucHV0XSArIFtpLmlucHV0IGZvciBpIGluIHNlbGYuYnVpbGRfcGlwZXMudmFsdWVzKCldLCBbXSAsIFtdLCAxKQorICAgICAgICAgICAgaWYgc2VsZi5pbnB1dCBpbiByZWFkeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHIgPSBzZWxmLmlucHV0LnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRU9GIG9uIHBpcGUsIHNlcnZlciBtdXN0IGhhdmUgdGVybWluYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbihzaWduYWwuU0lHVEVSTSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyByCisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2l0ZW0oImNvb2tlcmNvbmZpZyIsIHNlbGYuaGFuZGxlX2Nvb2tlcmNmZykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJ3b3JrZXJkYXRhIiwgc2VsZi5oYW5kbGVfd29ya2VyZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJydW50YXNrIiwgc2VsZi5oYW5kbGVfcnVudGFzaykKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pdGVtKCJmaW5pc2hub3ciLCBzZWxmLmhhbmRsZV9maW5pc2hub3cpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicGluZyIsIHNlbGYuaGFuZGxlX3BpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaXRlbSgicXVpdCIsIHNlbGYuaGFuZGxlX3F1aXQpCisKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuYnVpbGRfcGlwZXM6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaXBlXS5yZWFkKCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkX3BpZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc193YWl0cGlkKCkKKyAgICAgICAgICAgIHdvcmtlcl9mbHVzaCgpCisKKworICAgIGRlZiBoYW5kbGVfaXRlbShzZWxmLCBpdGVtLCBmdW5jKToKKyAgICAgICAgaWYgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKCI8IiArIGl0ZW0gKyAiPiIpOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvIiArIGl0ZW0gKyAiPiIpCisgICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMToKKyAgICAgICAgICAgICAgICBmdW5jKHNlbGYucXVldWVbKGxlbihpdGVtKSArIDIpOmluZGV4XSkKKyAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlID0gc2VsZi5xdWV1ZVsoaW5kZXggKyBsZW4oaXRlbSkgKyAzKTpdCisgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvIiArIGl0ZW0gKyAiPiIpCisKKyAgICBkZWYgaGFuZGxlX2Nvb2tlcmNmZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jb29rZXJjZmcgPSBwaWNrbGUubG9hZHMoZGF0YSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IGJiLmNvb2tlcmRhdGEuQ29va2VyRGF0YUJ1aWxkZXIoc2VsZi5jb29rZXJjZmcsIHdvcmtlcj1UcnVlKQorICAgICAgICBzZWxmLmRhdGFidWlsZGVyLnBhcnNlQmFzZUNvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLmRhdGFidWlsZGVyLmRhdGEKKworICAgIGRlZiBoYW5kbGVfd29ya2VyZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi53b3JrZXJkYXRhID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RGVidWdMZXZlbCA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdGRlYnVnIl0KKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlID0gc2VsZi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0dmVyYm9zZSJdCisgICAgICAgIGJiLm1zZy5sb2dnZXJWZXJib3NlTG9ncyA9IHNlbGYud29ya2VyZGF0YVsibG9nZGVmYXVsdHZlcmJvc2Vsb2dzIl0KKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gc2VsZi53b3JrZXJkYXRhWyJsb2dkZWZhdWx0ZG9tYWluIl0KKyAgICAgICAgc2VsZi5kYXRhLnNldFZhcigiUFJTRVJWX0hPU1QiLCBzZWxmLndvcmtlcmRhdGFbInByaG9zdCJdKQorCisgICAgZGVmIGhhbmRsZV9waW5nKHNlbGYsIF8pOgorICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHBpbmdcbiIpCisKKyAgICAgICAgbG9nZ2VyLndhcm4oIlBvbmcgZnJvbSBiaXRiYWtlLXdvcmtlciEiKQorCisgICAgZGVmIGhhbmRsZV9xdWl0KHNlbGYsIGRhdGEpOgorICAgICAgICB3b3JrZXJsb2dfd3JpdGUoIkhhbmRsaW5nIHF1aXRcbiIpCisKKyAgICAgICAgZ2xvYmFsIG5vcm1hbGV4aXQKKyAgICAgICAgbm9ybWFsZXhpdCA9IFRydWUKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGRlZiBoYW5kbGVfcnVudGFzayhzZWxmLCBkYXRhKToKKyAgICAgICAgZm4sIHRhc2ssIHRhc2tuYW1lLCBxdWlldGVycm9ycywgYXBwZW5kcywgdGFza2RlcGRhdGEgPSBwaWNrbGUubG9hZHMoZGF0YSkKKyAgICAgICAgd29ya2VybG9nX3dyaXRlKCJIYW5kbGluZyBydW50YXNrICVzICVzICVzXG4iICUgKHRhc2ssIGZuLCB0YXNrbmFtZSkpCisKKyAgICAgICAgcGlkLCBwaXBlaW4sIHBpcGVvdXQgPSBmb3JrX29mZl90YXNrKHNlbGYuY29va2VyY2ZnLCBzZWxmLmRhdGEsIHNlbGYud29ya2VyZGF0YSwgZm4sIHRhc2ssIHRhc2tuYW1lLCBhcHBlbmRzLCB0YXNrZGVwZGF0YSwgcXVpZXRlcnJvcnMpCisKKyAgICAgICAgc2VsZi5idWlsZF9waWRzW3BpZF0gPSB0YXNrCisgICAgICAgIHNlbGYuYnVpbGRfcGlwZXNbcGlkXSA9IHJ1blF1ZXVlV29ya2VyUGlwZShwaXBlaW4sIHBpcGVvdXQpCisKKyAgICBkZWYgcHJvY2Vzc193YWl0cGlkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIG5vbmUgaXMgdGhlcmUgYXJlIG5vIHByb2Nlc3NlcyBhd2FpdGluZyByZXN1bHQgY29sbGVjdGlvbiwgb3RoZXJ3aXNlCisgICAgICAgIGNvbGxlY3QgdGhlIHByb2Nlc3MgZXhpdCBjb2RlcyBhbmQgY2xvc2UgdGhlIGluZm9ybWF0aW9uIHBpcGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoLTEsIG9zLldOT0hBTkcpCisgICAgICAgICAgICBpZiBwaWQgPT0gMCBvciBvcy5XSUZTVE9QUEVEKHN0YXR1cyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHdvcmtlcmxvZ193cml0ZSgiRXhpdCBjb2RlIG9mICVzIGZvciBwaWQgJXNcbiIgJSAoc3RhdHVzLCBwaWQpKQorCisgICAgICAgIGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgc3RhdHVzID0gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFBlciBzaGVsbCBjb252ZW50aW9ucyBmb3IgJD8sIHdoZW4gYSBwcm9jZXNzIGV4aXRzIGR1ZSB0bworICAgICAgICAgICAgIyBhIHNpZ25hbCwgd2UgcmV0dXJuIGFuIGV4aXQgY29kZSBvZiAxMjggKyBTSUdOVU0KKyAgICAgICAgICAgIHN0YXR1cyA9IDEyOCArIG9zLldURVJNU0lHKHN0YXR1cykKKworICAgICAgICB0YXNrID0gc2VsZi5idWlsZF9waWRzW3BpZF0KKyAgICAgICAgZGVsIHNlbGYuYnVpbGRfcGlkc1twaWRdCisKKyAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaWRdLmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuYnVpbGRfcGlwZXNbcGlkXQorCisgICAgICAgIHdvcmtlcl9maXJlX3ByZXBpY2tsZWQoIjxleGl0Y29kZT4iICsgcGlja2xlLmR1bXBzKCh0YXNrLCBzdGF0dXMpKSArICI8L2V4aXRjb2RlPiIpCisKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaG5vdyhzZWxmLCBfKToKKyAgICAgICAgaWYgc2VsZi5idWlsZF9waWRzOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byByZW1haW5pbmcgJXMgdGFza3MiLCBsZW4oc2VsZi5idWlsZF9waWRzKSkKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuYnVpbGRfcGlkcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwoLWssIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKC0xLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgcGlwZSBpbiBzZWxmLmJ1aWxkX3BpcGVzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9waXBlc1twaXBlXS5yZWFkKCkKKwordHJ5OgorICAgIHdvcmtlciA9IEJpdGJha2VXb3JrZXIoc3lzLnN0ZGluKQorICAgIGlmIG5vdCBwcm9maWxpbmc6CisgICAgICAgIHdvcmtlci5zZXJ2ZSgpCisgICAgZWxzZToKKyAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS13b3JrZXIubG9nIgorICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgd29ya2VyLnNlcnZlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKHByb2ZuYW1lKQorICAgICAgICAgICAgYmIudXRpbHMucHJvY2Vzc19wcm9maWxlbG9nKHByb2ZuYW1lKQorZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICBpZiBub3Qgbm9ybWFsZXhpdDoKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKQord2hpbGUgbGVuKHdvcmtlcl9xdWV1ZSk6CisgICAgd29ya2VyX2ZsdXNoKCkKK3dvcmtlcmxvZ193cml0ZSgiZXhpdHRpbmciKQorc3lzLmV4aXQoMCkKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9iaW4vYml0ZG9jIGIvYml0YmFrZS9iaW4vYml0ZG9jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3NmQ4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi9iaXRkb2MKQEAgLTAsMCArMSw1MzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3B0cGFyc2UsIG9zLCBzeXMKKworIyBiaXRiYWtlCitzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbGliJykpCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5wYXJzZQorZnJvbSAgIHN0cmluZyBpbXBvcnQgc3BsaXQsIGpvaW4KKworX192ZXJzaW9uX18gPSAiMC4wLjIiCisKK2NsYXNzIEhUTUxGb3JtYXR0ZXI6CisgICAgIiIiCisgICAgU2ltcGxlIGNsYXNzIHRvIGhlbHAgdG8gZ2VuZXJhdGUgc29tZSBzb3J0IG9mIEhUTUwgZmlsZXMuIEl0IGlzCisgICAgcXVpdGUgaW5mZXJpb3Igc29sdXRpb24gY29tcGFyZWQgdG8gZG9jYm9vaywgZ3RrZG9jLCBkb3h5Z2VuIGJ1dCBpdAorICAgIHNob3VsZCB3b3JrIGZvciBub3cuCisgICAgV2UndmUgYSBnbG9iYWwgaW50cm9kdWN0aW9uIHNpdGUgKGluZGV4Lmh0bWwpIGFuZCB0aGVuIG9uZSBzaXRlIGZvcgorICAgIHRoZSBsaXN0IG9mIGtleXMgKGFscGhhYmV0aWNhbCBzb3J0ZWQpIGFuZCBvbmUgZm9yIHRoZSBsaXN0IG9mIGdyb3VwcywKKyAgICBvbmUgc2l0ZSBmb3IgZWFjaCBrZXkgd2l0aCBsaW5rcyB0byB0aGUgcmVsYXRpb25zIGFuZCBncm91cHMuCisKKyAgICAgICAgaW5kZXguaHRtbAorICAgICAgICBhbGxfa2V5cy5odG1sCisgICAgICAgIGFsbF9ncm91cHMuaHRtbAorICAgICAgICBncm91cE5BTUUuaHRtbAorICAgICAgICBrZXlOQU1FLmh0bWwKKyAgICAiIiIKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHRleHQsICpwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBGcm9tIHB5ZG9jLi4uIGFsbW9zdCBpZGVudGljYWwgYXQgbGVhc3QKKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHBhaXJzOgorICAgICAgICAgICAgKGEsIGIpID0gcGFpcnNbMF0KKyAgICAgICAgICAgIHRleHQgPSBqb2luKHNwbGl0KHRleHQsIGEpLCBiKQorICAgICAgICAgICAgcGFpcnMgPSBwYWlyc1sxOl0KKyAgICAgICAgcmV0dXJuIHRleHQKKyAgICBkZWYgZXNjYXBlKHNlbGYsIHRleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgRXNjYXBlIHN0cmluZyB0byBiZSBjb25mb3JtIEhUTUwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJlcGxhY2UodGV4dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcmJywgJyZhbXA7JyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPCcsICcmbHQ7JyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPicsICcmZ3Q7JyApICkKKyAgICBkZWYgY3JlYXRlTmF2aWdhdG9yKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBuYXZnaWF0b3IKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIiI8dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KKzx0ciB2YWxpZ249Im1pZGRsZSI+Cis8dGQ+PGEgYWNjZXNza2V5PSJnIiBocmVmPSJpbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJhbGxfZ3JvdXBzLmh0bWwiPkdyb3VwczwvYT48L3RkPgorPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iYWxsX2tleXMuaHRtbCI+S2V5czwvYT48L3RkPgorPC90cj48L3RhYmxlPgorIiIiCisKKyAgICBkZWYgcmVsYXRlZEtleXMoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgSFRNTCB0byBsaW5rIHRvIGZvcmVpZ24ga2V5cworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oaXRlbS5yZWxhdGVkKCkpID09IDA6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICB0eHQgPSAiPHA+PGI+U2VlIGFsc286PC9iPjxicj4iCisgICAgICAgIHR4dHMgPSBbXQorICAgICAgICBmb3IgaXQgaW4gaXRlbS5yZWxhdGVkKCk6CisgICAgICAgICAgICB0eHRzLmFwcGVuZCgiIiI8YSBocmVmPSJrZXklKGl0KXMuaHRtbCI+JShpdClzPC9hPiIiIiAlIHZhcnMoKSApCisKKyAgICAgICAgcmV0dXJuIHR4dCArICIsIi5qb2luKHR4dHMpCisKKyAgICBkZWYgZ3JvdXBzKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIEhUTUwgdG8gbGluayB0byByZWxhdGVkIGdyb3VwcworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oaXRlbS5ncm91cHMoKSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisKKyAgICAgICAgdHh0ID0gIjxwPjxiPlNlZSBhbHNvOjwvYj48YnI+IgorICAgICAgICB0eHRzID0gW10KKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW0uZ3JvdXBzKCk6CisgICAgICAgICAgICB0eHRzLmFwcGVuZCggIiIiPGEgaHJlZj0iZ3JvdXAlcy5odG1sIj4lczwvYT4gIiIiICUgKGdyb3VwLCBncm91cCkgKQorCisgICAgICAgIHJldHVybiB0eHQgKyAiLCIuam9pbih0eHRzKQorCisKKyAgICBkZWYgY3JlYXRlS2V5U2l0ZShzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHNpdGUgZm9yIGEga2V5LiBJdCBjb250YWlucyB0aGUgaGVhZGVyL25hdmlnYXRvciwgYSBoZWFkaW5nLAorICAgICAgICB0aGUgZGVzY3JpcHRpb24sIGxpbmtzIHRvIHJlbGF0ZWQga2V5cyBhbmQgdG8gdGhlIGdyb3Vwcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuICIiIjwhZG9jdHlwZSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+S2V5ICVzPC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+JXM8L3NwYW4+PC9oMj4KKworPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgorPGgyPlN5bm9wc2lzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+UmVsYXRlZCBLZXlzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Cis8aDI+R3JvdXBzPC9oMj4KKzxwPgorJXMKKzwvcD4KKzwvZGl2PgorCisKKzwvYm9keT4KKyIiIiAgICAgJSAoaXRlbS5uYW1lKCksIHNlbGYuY3JlYXRlTmF2aWdhdG9yKCksIGl0ZW0ubmFtZSgpLCAKKyAgICAgICAgICAgc2VsZi5lc2NhcGUoaXRlbS5kZXNjcmlwdGlvbigpKSwgc2VsZi5yZWxhdGVkS2V5cyhpdGVtKSwgc2VsZi5ncm91cHMoaXRlbSkpCisKKyAgICBkZWYgY3JlYXRlR3JvdXBzU2l0ZShzZWxmLCBkb2MpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBHcm91cCBPdmVydmlldyBzaXRlCisgICAgICAgICIiIgorCisgICAgICAgIGdyb3VwcyA9ICIiCisgICAgICAgIHNvcnRlZF9ncm91cHMgPSBzb3J0ZWQoZG9jLmdyb3VwcygpKQorICAgICAgICBmb3IgZ3JvdXAgaW4gc29ydGVkX2dyb3VwczoKKyAgICAgICAgICAgIGdyb3VwcyArPSAiIiI8YSBocmVmPSJncm91cCVzLmh0bWwiPiVzPC9hPjxicj4iIiIgJSAoZ3JvdXAsIGdyb3VwKQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkdyb3VwIG92ZXJ2aWV3PC90aXRsZT48L2hlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorJXMKKzxoMj5BdmFpbGFibGUgR3JvdXBzPC9oMj4KKyVzCis8L2JvZHk+CisiIiIgJSAoc2VsZi5jcmVhdGVOYXZpZ2F0b3IoKSwgZ3JvdXBzKQorCisgICAgZGVmIGNyZWF0ZUluZGV4KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBpbmRleCBmaWxlCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPkJpdGJha2UgRG9jdW1lbnRhdGlvbjwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+RG9jdW1lbnRhdGlvbiBFbnRyYW5jZTwvaDI+Cis8YSBocmVmPSJhbGxfZ3JvdXBzLmh0bWwiPkFsbCBhdmFpbGFibGUgZ3JvdXBzPC9hPjxicj4KKzxhIGhyZWY9ImFsbF9rZXlzLmh0bWwiPkFsbCBhdmFpbGFibGUga2V5czwvYT48YnI+Cis8L2JvZHk+CisiIiIgJSBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpCisKKyAgICBkZWYgY3JlYXRlS2V5c1NpdGUoc2VsZiwgZG9jKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBPdmVydmlldyBvZiBhbGwgYXZpbGFibGUga2V5cworICAgICAgICAiIiIKKyAgICAgICAga2V5cyA9ICIiCisgICAgICAgIHNvcnRlZF9rZXlzID0gc29ydGVkKGRvYy5kb2Nfa2V5cygpKQorICAgICAgICBmb3Iga2V5IGluIHNvcnRlZF9rZXlzOgorICAgICAgICAgICAga2V5cyArPSAiIiI8YSBocmVmPSJrZXklcy5odG1sIj4lczwvYT48YnI+IiIiICUgKGtleSwga2V5KQorCisgICAgICAgIHJldHVybiAiIiI8IWRvY3R5cGUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+PGhlYWQ+PHRpdGxlPktleSBvdmVydmlldzwvdGl0bGU+PC9oZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKyVzCis8aDI+QXZhaWxhYmxlIEtleXM8L2gyPgorJXMKKzwvYm9keT4KKyIiIiAlIChzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBrZXlzKQorCisgICAgZGVmIGNyZWF0ZUdyb3VwU2l0ZShzZWxmLCBnciwgaXRlbXMsIF9kZXNjcmlwdGlvbiA9IE5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgc2l0ZSBmb3IgYSBncm91cDoKKyAgICAgICAgR3JvdXAgdGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBpdGVtcyBjb250YWluIHRoZSBuYW1lIG9mIHRoZSBrZXlzCisgICAgICAgIGluc2lkZSB0aGlzIGdyb3VwCisgICAgICAgICIiIgorICAgICAgICBncm91cHMgPSAiIgorICAgICAgICBkZXNjcmlwdGlvbiA9ICIiCisKKyAgICAgICAgIyBjcmVhdGUgYSBzZWN0aW9uIHdpdGggdGhlIGdyb3VwIGRlc2NyaXB0aW9ucworICAgICAgICBpZiBfZGVzY3JpcHRpb246CisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKz0gIjxoMiBEZXNjcmlwdGlvbiBvZiBHcm96cCAlczwvaDI+IiAlIGdyCisgICAgICAgICAgICBkZXNjcmlwdGlvbiAgKz0gX2Rlc2NyaXB0aW9uCisKKyAgICAgICAgaXRlbXMuc29ydChsYW1iZGEgeCwgeTpjbXAoeC5uYW1lKCksIHkubmFtZSgpKSkKKyAgICAgICAgZm9yIGdyb3VwIGluIGl0ZW1zOgorICAgICAgICAgICAgZ3JvdXBzICs9ICIiIjxhIGhyZWY9ImtleSVzLmh0bWwiPiVzPC9hPjxicj4iIiIgJSAoZ3JvdXAubmFtZSgpLCBncm91cC5uYW1lKCkpCisKKyAgICAgICAgcmV0dXJuICIiIjwhZG9jdHlwZSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD48aGVhZD48dGl0bGU+R3JvdXAgJXM8L3RpdGxlPjwvaGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+CislcworJXMKKzxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KKzxoMj5LZXlzIGluIEdyb3VwICVzPC9oMj4KKzxwcmUgY2xhc3M9InN5bm9wc2lzIj4KKyVzCis8L3ByZT4KKzwvZGl2PgorPC9ib2R5PgorIiIiICUgKGdyLCBzZWxmLmNyZWF0ZU5hdmlnYXRvcigpLCBkZXNjcmlwdGlvbiwgZ3IsIGdyb3VwcykKKworCisKKyAgICBkZWYgY3JlYXRlQ1NTKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoZSBDU1MgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiIi5zeW5vcHNpcywgLmNsYXNzc3lub3BzaXMKK3sKKyAgYmFja2dyb3VuZDogI2VlZWVlZTsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYWFhYTsKKyAgcGFkZGluZzogMC41ZW07Cit9CisucHJvZ3JhbWxpc3RpbmcKK3sKKyAgYmFja2dyb3VuZDogI2VlZWVmZjsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2FhYWFmZjsKKyAgcGFkZGluZzogMC41ZW07Cit9CisudmFyaWFibGVsaXN0Cit7CisgIHBhZGRpbmc6IDRweDsKKyAgbWFyZ2luLWxlZnQ6IDNlbTsKK30KKy52YXJpYWJsZWxpc3QgdGQ6Zmlyc3QtY2hpbGQKK3sKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KK3RhYmxlLm5hdmlnYXRpb24KK3sKKyAgYmFja2dyb3VuZDogI2ZmZWVlZTsKKyAgYm9yZGVyOiBzb2xpZCAxcHggI2ZmYWFhYTsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworfQorLm5hdmlnYXRpb24gYQoreworICBjb2xvcjogIzc3MDAwMDsKK30KKy5uYXZpZ2F0aW9uIGE6dmlzaXRlZAoreworICBjb2xvcjogIzU1MDAwMDsKK30KKy5uYXZpZ2F0aW9uIC50aXRsZQoreworICBmb250LXNpemU6IDIwMCU7Cit9CitkaXYucmVmbmFtZWRpdgoreworICBtYXJnaW4tdG9wOiAyZW07Cit9CitkaXYuZ2FsbGVyeS1mbG9hdAoreworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMTBweDsKK30KK2Rpdi5nYWxsZXJ5LWZsb2F0IGltZworeworICBib3JkZXItc3R5bGU6IG5vbmU7Cit9CitkaXYuZ2FsbGVyeS1zcGFjZXIKK3sKKyAgY2xlYXI6IGJvdGg7Cit9CithCit7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KK2E6aG92ZXIKK3sKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjRkYwMDAwOworfQorIiIiCisKKworCitjbGFzcyBEb2N1bWVudGF0aW9uSXRlbToKKyAgICAiIiIKKyAgICBBIGNsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBjb25maWd1cmF0aW9uCisgICAgaXRlbS4gSXQgY29udGFpbnMgdGhlIGtleSBuYW1lLCBkZXNjcmlwdGlvbiwgYSBsaXN0IG9mIHJlbGF0ZWQgbmFtZXMsCisgICAgYW5kIHRoZSBncm91cCB0aGlzIGl0ZW0gaXMgY29udGFpbmVkIGluLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9ncm91cHMgID0gW10KKyAgICAgICAgc2VsZi5fcmVsYXRlZCA9IFtdCisgICAgICAgIHNlbGYuX25hbWUgICAgPSAiIgorICAgICAgICBzZWxmLl9kZXNjICAgID0gIiIKKworICAgIGRlZiBncm91cHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ncm91cHMKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIGRlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzYworCisgICAgZGVmIHJlbGF0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWxhdGVkCisKKyAgICBkZWYgc2V0TmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBzZXREZXNjcmlwdGlvbihzZWxmLCBkZXNjKToKKyAgICAgICAgc2VsZi5fZGVzYyA9IGRlc2MKKworICAgIGRlZiBhZGRHcm91cChzZWxmLCBncm91cCk6CisgICAgICAgIHNlbGYuX2dyb3Vwcy5hcHBlbmQoZ3JvdXApCisKKyAgICBkZWYgYWRkUmVsYXRpb24oc2VsZiwgcmVsYXRpb24pOgorICAgICAgICBzZWxmLl9yZWxhdGVkLmFwcGVuZChyZWxhdGlvbikKKworICAgIGRlZiBzb3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9yZWxhdGVkLnNvcnQoKQorICAgICAgICBzZWxmLl9ncm91cHMuc29ydCgpCisKKworY2xhc3MgRG9jdW1lbnRhdGlvbjoKKyAgICAiIiIKKyAgICBIb2xkcyB0aGUgZG9jdW1lbnRhdGlvbi4uLiB3aXRoIG1hcHBpbmdzIGZyb20ga2V5IHRvIGl0ZW1zLi4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX19rZXlzICAgPSB7fQorICAgICAgICBzZWxmLl9fZ3JvdXBzID0ge30KKworICAgIGRlZiBpbnNlcnRfZG9jX2l0ZW0oc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBJbnNlcnQgdGhlIERvYyBJdGVtIGludG8gdGhlIGludGVybmFsIGxpc3QKKyAgICAgICAgb2YgcmVwcmVzZW50YXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGl0ZW0uc29ydCgpCisgICAgICAgIHNlbGYuX19rZXlzW2l0ZW0ubmFtZSgpXSA9IGl0ZW0KKworICAgICAgICBmb3IgZ3JvdXAgaW4gaXRlbS5ncm91cHMoKToKKyAgICAgICAgICAgIGlmIG5vdCBncm91cCBpbiBzZWxmLl9fZ3JvdXBzOgorICAgICAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdID0gW10KKyAgICAgICAgICAgIHNlbGYuX19ncm91cHNbZ3JvdXBdLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgc2VsZi5fX2dyb3Vwc1tncm91cF0uc29ydCgpCisKKworICAgIGRlZiBkb2NfaXRlbShzZWxmLCBrZXkpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBEb2N1bWVudGF0aW9uSW5zdGFuY2UgZGVzY3JpYmluZyB0aGUga2V5CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2tleXNba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRvY19rZXlzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBkb2N1bWVudGVkIEtFWVMgKG5hbWVzKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19rZXlzLmtleXMoKQorCisgICAgZGVmIGdyb3VwcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbmFtZXMgb2YgYXZhaWxhYmxlIGdyb3VwcworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19ncm91cHMua2V5cygpCisKKyAgICBkZWYgZ3JvdXBfY29udGVudChzZWxmLCBncm91cF9uYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Yga2V5cy9uYW1lcyB0aGF0IGFyZSBpbiBhIHNwZWNlZmljCisgICAgICAgIGdyb3VwIG9yIHRoZSBlbXB0eSBsaXN0CisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dyb3Vwc1tncm91cF9uYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gW10KKworCitkZWYgcGFyc2VfY21kbGluZShhcmdzKToKKyAgICAiIiIKKyAgICBQYXJzZSB0aGUgQ01EIGxpbmUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbi10dXBsZQorICAgICIiIgorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCB2ZXJzaW9uID0gIkJpdGJha2UgRG9jdW1lbnRhdGlvbiBUb29sIENvcmUgdmVyc2lvbiAlcywgJSVwcm9nIHZlcnNpb24gJXMiICUgKGJiLl9fdmVyc2lvbl9fLCBfX3ZlcnNpb25fXykpCisgICAgdXNhZ2UgID0gIiIiJXByb2cgW29wdGlvbnNdCisKK0NyZWF0ZSBhIHNldCBvZiBodG1sIHBhZ2VzIChkb2N1bWVudGF0aW9uKSBmb3IgYSBiaXRiYWtlLmNvbmYuLi4uCisiIiIKKworICAgICMgQWRkIHRoZSBuZWVkZWQgb3B0aW9ucworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLWMiLCAiLS1jb25maWciLCBoZWxwID0gIlVzZSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBzb3VyY2UiLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImNvbmZpZyIsIGRlZmF1bHQgPSBvcy5wYXRoLmpvaW4oImNvbmYiLCAiZG9jdW1lbnRhdGlvbi5jb25mIikgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oICItbyIsICItLW91dHB1dCIsIGhlbHAgPSAiT3V0cHV0IGRpcmVjdG9yeSBmb3IgaHRtbCBmaWxlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAib3V0cHV0IiwgZGVmYXVsdCA9ICJodG1sLyIgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oICItRCIsICAiLS1kZWJ1ZyIsIGhlbHAgPSAiSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImNvdW50IiwgZGVzdCA9ICJkZWJ1ZyIsIGRlZmF1bHQgPSAwICkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCAiLXYiLCAiLS12ZXJib3NlIiwgaGVscCA9ICJvdXRwdXQgbW9yZSBjaGl0LWNoYXIgdG8gdGhlIHRlcm1pbmFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInZlcmJvc2UiLCBkZWZhdWx0ID0gRmFsc2UgKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCBzeXMuYXJndiApCisgCisgICAgYmIubXNnLmluaXRfbXNnY29uZmlnKG9wdGlvbnMudmVyYm9zZSwgb3B0aW9ucy5kZWJ1ZykKKworICAgIHJldHVybiBvcHRpb25zLmNvbmZpZywgb3B0aW9ucy5vdXRwdXQKKworZGVmIG1haW4oKToKKyAgICAiIiIKKyAgICBUaGUgbWFpbiBNZXRob2QKKyAgICAiIiIKKworICAgIChjb25maWdfZmlsZSwgb3V0cHV0X2RpcikgPSBwYXJzZV9jbWRsaW5lKCBzeXMuYXJndiApCisKKyAgICAjIHJpZ2h0IHRvIGxldCB1cyBsb2FkIHRoZSBmaWxlIG5vdworICAgIHRyeToKKyAgICAgICAgZG9jdW1lbnRhdGlvbiA9IGJiLnBhcnNlLmhhbmRsZSggY29uZmlnX2ZpbGUsIGJiLmRhdGEuaW5pdCgpICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgYmIuZmF0YWwoICJVbmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfZmlsZSApCisgICAgZXhjZXB0IGJiLnBhcnNlLlBhcnNlRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCAiVW5hYmxlIHRvIHBhcnNlICVzIiAlIGNvbmZpZ19maWxlICkKKworICAgIGlmIGlzaW5zdGFuY2UoZG9jdW1lbnRhdGlvbiwgZGljdCk6CisgICAgICAgIGRvY3VtZW50YXRpb24gPSBkb2N1bWVudGF0aW9uWyIiXQorCisgICAgIyBBc3N1bWluZyB3ZSd2ZSB0aGUgZmlsZSBsb2FkZWQgbm93LCB3ZSB3aWxsIGluaXRpYWxpemUgdGhlICd0cmVlJworICAgIGRvYyA9IERvY3VtZW50YXRpb24oKQorCisgICAgIyBkZWZpbmVkIHN0YXRlcworICAgIHN0YXRlX2JlZ2luID0gMAorICAgIHN0YXRlX3NlZSAgID0gMQorICAgIHN0YXRlX2dyb3VwID0gMgorCisgICAgZm9yIGtleSBpbiBiYi5kYXRhLmtleXMoZG9jdW1lbnRhdGlvbik6CisgICAgICAgIGRhdGEgICA9IGRvY3VtZW50YXRpb24uZ2V0VmFyRmxhZyhrZXksICJkb2MiKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBUaGUgRG9jdW1lbnRhdGlvbiBub3cgc3RhcnRzCisgICAgICAgIGRvY19pbnMgPSBEb2N1bWVudGF0aW9uSXRlbSgpCisgICAgICAgIGRvY19pbnMuc2V0TmFtZShrZXkpCisKKworICAgICAgICB0b2tlbnMgPSBkYXRhLnNwbGl0KCcgJykKKyAgICAgICAgc3RhdGUgPSBzdGF0ZV9iZWdpbgorICAgICAgICBzdHJpbmc9ICIiCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnN0cmlwKCcsJykKKworICAgICAgICAgICAgaWYgbm90IHN0YXRlID09IHN0YXRlX3NlZSBhbmQgdG9rZW4gPT0gIkBzZWUiOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfc2VlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbm90IHN0YXRlID09IHN0YXRlX2dyb3VwIGFuZCB0b2tlbiAgPT0gIkBncm91cCI6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZV9ncm91cAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHN0YXRlID09IHN0YXRlX2JlZ2luOgorICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICVzIiAlIHRva2VuCisgICAgICAgICAgICBlbGlmIHN0YXRlID09IHN0YXRlX3NlZToKKyAgICAgICAgICAgICAgICBkb2NfaW5zLmFkZFJlbGF0aW9uKHRva2VuKQorICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBzdGF0ZV9ncm91cDoKKyAgICAgICAgICAgICAgICBkb2NfaW5zLmFkZEdyb3VwKHRva2VuKQorCisgICAgICAgICMgc2V0IHRoZSBkZXNjcmlwdGlvbgorICAgICAgICBkb2NfaW5zLnNldERlc2NyaXB0aW9uKHN0cmluZykKKyAgICAgICAgZG9jLmluc2VydF9kb2NfaXRlbShkb2NfaW5zKQorCisgICAgIyBsZXQgdXMgY3JlYXRlIHRoZSBIVE1MIG5vdworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRwdXRfZGlyKQorICAgIG9zLmNoZGlyKG91dHB1dF9kaXIpCisKKyAgICAjIExldCB1cyBjcmVhdGUgdGhlIHNpdGVzIG5vdy4gV2UgZG8gaXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcgorICAgICMgU3RhcnQgd2l0aCB0aGUgaW5kZXguaHRtbC4gSXQgd2lsbCBwb2ludCB0byBzaXRlcyBleHBsYWluaW5nIGFsbAorICAgICMga2V5cyBhbmQgZ3JvdXBzCisgICAgaHRtbF9zbGF2ZSA9IEhUTUxGb3JtYXR0ZXIoKQorCisgICAgZiA9IGZpbGUoJ3N0eWxlLmNzcycsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUNTUygpCisKKyAgICBmID0gZmlsZSgnaW5kZXguaHRtbCcsICd3JykKKyAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUluZGV4KCkKKworICAgIGYgPSBmaWxlKCdhbGxfZ3JvdXBzLmh0bWwnLCAndycpCisgICAgcHJpbnQgPj4gZiwgaHRtbF9zbGF2ZS5jcmVhdGVHcm91cHNTaXRlKGRvYykKKworICAgIGYgPSBmaWxlKCdhbGxfa2V5cy5odG1sJywgJ3cnKQorICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlS2V5c1NpdGUoZG9jKQorCisgICAgIyBub3cgZm9yIGVhY2ggZ3JvdXAgY3JlYXRlIHRoZSBzaXRlCisgICAgZm9yIGdyb3VwIGluIGRvYy5ncm91cHMoKToKKyAgICAgICAgZiA9IGZpbGUoJ2dyb3VwJXMuaHRtbCcgJSBncm91cCwgJ3cnKQorICAgICAgICBwcmludCA+PiBmLCBodG1sX3NsYXZlLmNyZWF0ZUdyb3VwU2l0ZShncm91cCwgZG9jLmdyb3VwX2NvbnRlbnQoZ3JvdXApKQorCisgICAgIyBub3cgZm9yIHRoZSBrZXlzCisgICAgZm9yIGtleSBpbiBkb2MuZG9jX2tleXMoKToKKyAgICAgICAgZiA9IGZpbGUoJ2tleSVzLmh0bWwnICUgZG9jLmRvY19pdGVtKGtleSkubmFtZSgpLCAndycpCisgICAgICAgIHByaW50ID4+IGYsIGh0bWxfc2xhdmUuY3JlYXRlS2V5U2l0ZShkb2MuZG9jX2l0ZW0oa2V5KSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9iaW4vaW1hZ2Utd3JpdGVyIGIvYml0YmFrZS9iaW4vaW1hZ2Utd3JpdGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkNzExNjcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi9pbWFnZS13cml0ZXIKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwgJ2xpYicpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCisKK2ltcG9ydCBndGsKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHB5Z3RrCisKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuZGVwbG95aW1hZ2VkaWFsb2cgaW1wb3J0IERlcGxveUltYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuaW1hZ2VzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IEltYWdlU2VsZWN0aW9uRGlhbG9nCisKKyMgSSBwdXQgYWxsIHRoZSBmcyBiaXRiYWtlIHN1cHBvcnRlZCBoZXJlLiBOZWVkIG1vcmUgdGVzdC4KK0RFUExPWUFCTEVfSU1BR0VfVFlQRVMgPSBbImpmZnMyIiwgImNyYW1mcyIsICJleHQyIiwgImV4dDMiLCAiZXh0NCIsICJidHJmcyIsICJzcXVhc2hmcyIsICJ1YmkiLCAidm1kayJdCitUaXRsZSA9ICJVU0IgSW1hZ2UgV3JpdGVyIgorCitjbGFzcyBEZXBsb3lXaW5kb3coZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3BhdGg9JycpOgorICAgICAgICBzdXBlcihEZXBsb3lXaW5kb3csIHNlbGYpLl9faW5pdF9fKCkKKworICAgICAgICBpZiBsZW4oaW1hZ2VfcGF0aCkgPiAwOgorICAgICAgICAgICAgdmFsaWQgPSBUcnVlCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaW1hZ2VfcGF0aCk6CisgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5JbnZhbGlkIGltYWdlIGZpbGUgcGF0aDogJXMuPC9iPlxuUHJlc3MgPGI+U2VsZWN0IEltYWdlPC9iPiB0byBzZWxlY3QgYW4gaW1hZ2UuIiAlIGltYWdlX3BhdGgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChpbWFnZV9wYXRoKQorICAgICAgICAgICAgICAgIGV4dGVuZF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChpbWFnZV9wYXRoKVsxXVsxOl0KKyAgICAgICAgICAgICAgICBpZiBleHRlbmRfbmFtZSBub3QgaW4gREVQTE9ZQUJMRV9JTUFHRV9UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+VW5kZXBsb3lhYmxlIGltZ2UgdHlwZTogJXM8L2I+XG5QcmVzcyA8Yj5TZWxlY3QgSW1hZ2U8L2I+IHRvIHNlbGVjdCBhbiBpbWFnZS4iICUgZXh0ZW5kX25hbWUKKworICAgICAgICAgICAgaWYgbm90IHZhbGlkOgorICAgICAgICAgICAgICAgIGltYWdlX3BhdGggPSAnJworICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLlNUT0NLX0RJQUxPR19JTkZPKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlhbG9nID0gRGVwbG95SW1hZ2VEaWFsb2coVGl0bGUsIGltYWdlX3BhdGgsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19OT19TRVBBUkFUT1IsIE5vbmUsIHN0YW5kYWxvbmU9VHJ1ZSkKKyAgICAgICAgY2xvc2VfYnV0dG9uID0gc2VsZi5kZXBsb3lfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGNsb3NlX2J1dHRvbikKKyAgICAgICAgY2xvc2VfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBndGsubWFpbl9xdWl0KQorCisgICAgICAgIHdyaXRlX2J1dHRvbiA9IHNlbGYuZGVwbG95X2RpYWxvZy5hZGRfYnV0dG9uKCJXcml0ZSBVU0IgaW1hZ2UiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHdyaXRlX2J1dHRvbikKKworICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnLCBzZWxmLnNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuY29ubmVjdCgnZGVzdHJveScsIGd0ay5tYWluX3F1aXQpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5kZXBsb3lfZGlhbG9nLnNob3coKQorCisgICAgZGVmIHNlbGVjdF9pbWFnZV9jbGlja2VkX2NiKHNlbGYsIGRpYWxvZyk6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGRpYWxvZyA9IEltYWdlU2VsZWN0aW9uRGlhbG9nKGN3ZCwgREVQTE9ZQUJMRV9JTUFHRV9UWVBFUywgVGl0bGUsIHNlbGYsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUgKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKworICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaWYgbm90IGRpYWxvZy5pbWFnZV9uYW1lczoKKyAgICAgICAgICAgICAgICBsYmwgPSAiPGI+Tm8gc2VsZWN0aW9ucyBtYWRlPC9iPlxuQ2xpY2tlZCB0aGUgcmFkaW8gYnV0dG9uIHRvIHNlbGVjdCBhIGltYWdlLiIKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5TVE9DS19ESUFMT0dfSU5GTykKKyAgICAgICAgICAgICAgICBidXR0b24gPSBjcnVtYnNfZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICBjcnVtYnNfZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgIyBnZXQgdGhlIGZ1bGwgcGF0aCBvZiBpbWFnZQorICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihkaWFsb2cuaW1hZ2VfZm9sZGVyLCBkaWFsb2cuaW1hZ2VfbmFtZXNbMF0pCisgICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3RleHRfYnVmZmVyKGltYWdlX3BhdGgpCisgICAgICAgICAgICBzZWxmLmRlcGxveV9kaWFsb2cuc2V0X2ltYWdlX3BhdGgoaW1hZ2VfcGF0aCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgWy1oXSBbaW1hZ2VfZmlsZV0KKworJXByb2cgd3JpdGVzIGJvb3RhYmxlIGltYWdlcyB0byBVU0IgZGV2aWNlcy4gWW91IGNhbgorcHJvdmlkZSB0aGUgaW1hZ2UgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIHNlbGVjdCBpdCB1c2luZyB0aGUgR1VJLiIiIikKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICBpbWFnZV9maWxlID0gYXJnc1sxXSBpZiBsZW4oYXJncykgPiAxIGVsc2UgJycKKyAgICBkdyA9IERlcGxveVdpbmRvdyhpbWFnZV9maWxlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRyeToKKyAgICAgICAgbWFpbigpCisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoMykKZGlmZiAtLWdpdCBhL2JpdGJha2UvYmluL3RvYXN0ZXIgYi9iaXRiYWtlL2Jpbi90b2FzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMWNlMmMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2Jpbi90b2FzdGVyCkBAIC0wLDAgKzEsMzUyIEBACisjIS9iaW4vc2gKKyMgKGMpIDIwMTMgSW50ZWwgQ29ycC4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworIyBUaGlzIHNjcmlwdCBjYW4gYmUgcnVuIGluIHR3byBtb2Rlcy4KKworIyBXaGVuIHVzZWQgd2l0aCAic291cmNlIiwgZnJvbSBhIGJ1aWxkIGRpcmVjdG9yeSwKKyMgaXQgZW5hYmxlcyB0b2FzdGVyIGV2ZW50IGxvZ2dpbmcgYW5kIHN0YXJ0cyB0aGUgYml0YmFrZSByZXNpZGVudCBzZXJ2ZXIuCisjIHVzZSBhczogIHNvdXJjZSB0b2FzdGVyIFtzdGFydHxzdG9wXSBbbm93ZWJdIFtub3VpXQorCisjIFdoZW4gaXQgaXMgY2FsbGVkIGFzIGEgc3RhbmQtYWxvbmUgc2NyaXB0LCBpdCBzdGFydHMganVzdCB0aGUKKyMgd2ViIHNlcnZlciwgYW5kIHRoZSBidWlsZGluZyBzaGFsbCBiZSBkb25lIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UuCisjIEFzIHNjcmlwdCwgaXQgd2lsbCBub3QgcmV0dXJuIHRvIHRoZSBjb21tYW5kIHByb21wdC4gU3RvcCB3aXRoIEN0cmwtQy4KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8ga2lsbCBhIGJhY2tncm91bmQgdG9hc3RlciBkZXZlbG9wbWVudCBzZXJ2ZXIKKword2Vic2VydmVyS2lsbEFsbCgpCit7CisgICAgbG9jYWwgcGlkZmlsZQorICAgIGZvciBwaWRmaWxlIGluICR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQ7IGRvCisgICAgICAgIGlmIFsgLWYgJHtwaWRmaWxlfSBdOyB0aGVuCisgICAgICAgICAgICBwaWQ9YGNhdCAke3BpZGZpbGV9YAorICAgICAgICAgICAgd2hpbGUga2lsbCAtMCAkcGlkIDI+L2Rldi9udWxsOyBkbworICAgICAgICAgICAgICAgIGtpbGwgLVNJR1RFUk0gLSRwaWQgMj4vZGV2L251bGwKKyAgICAgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgICAgICAgIyBLaWxsIHByb2Nlc3NlcyBpZiB0aGV5IGFyZSBzdGlsbCBydW5uaW5nIC0gbWF5IGhhcHBlbiBpbiBpbnRlcmFjdGl2ZSBzaGVsbHMKKyAgICAgICAgICAgICAgICBwcyBmdXggfCBncmVwICJweXRob24uKm1hbmFnZS5weSBydW5zZXJ2ZXIiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IHhhcmdzIGtpbGwKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHJtICAke3BpZGZpbGV9CisgICAgICAgIGZpCisgICAgZG9uZQorfQorCit3ZWJzZXJ2ZXJTdGFydEFsbCgpCit7CisgICAgIyBkbyBub3Qgc3RhcnQgaWYgdG9hc3Rlcm1haW4gcG9pbnRzIHRvIGEgdmFsaWQgcHJvY2VzcworICAgIGlmICEgY2F0ICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIiAyPi9kZXYvbnVsbCB8IHhhcmdzIC1Je30ga2lsbCAtMCB7fSA7IHRoZW4KKyAgICAgICAgcmV0dmFsPTEKKyAgICAgICAgcm0gIiR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQiCisgICAgZmkKKworICAgIHJldHZhbD0wCisgICAgaWYgWyAiJFRPQVNURVJfTUFOQUdFRCIgJz0nICcxJyBdOyB0aGVuCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBzeW5jZGIgfHwgcmV0dmFsPTEKKyAgICBlbHNlCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBzeW5jZGIgLS1ub2lucHV0IHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBweXRob24gJEJCQkFTRURJUi9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0gfHwgcmV0dmFsPTIKKyAgICBpZiBbICRyZXR2YWwgLWVxIDEgXTsgdGhlbgorICAgICAgICBlY2hvICJGYWlsZWQgZGIgc3luYywgc3RvcHBpbmcgc3lzdGVtIHN0YXJ0IiAxPiYyCisgICAgZWxpZiBbICRyZXR2YWwgLWVxIDIgXTsgdGhlbgorICAgICAgICBwcmludGYgIlxuRXJyb3Igb24gbWlncmF0aW9uLCB0cnlpbmcgdG8gcmVjb3Zlci4uLiBcbiIKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIDAwMDFfaW5pdGlhbCAtLWZha2UKKyAgICAgICAgcmV0dmFsPTAKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBpZiBbICIkVE9BU1RFUl9NQU5BR0VEIiA9ICcxJyBdOyB0aGVuCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIGJsZGNvbnRyb2wgfHwgcmV0dmFsPTEKKyAgICAgICAgcHl0aG9uICRCQkJBU0VESVIvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MgIC0tdHJhY2ViYWNrIHx8IHJldHZhbD0xCisgICAgZmkKKyAgICBpZiBbICRyZXR2YWwgLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJTdGFydGluZyB3ZWJzZXJ2ZXIuLi4iCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5zZXJ2ZXIgIjAuMC4wLjA6JFdFQl9QT1JUIiA8L2Rldi9udWxsID4+JHtCVUlMRERJUn0vdG9hc3Rlcl93ZWIubG9nIDI+JjEgJiBlY2hvICQhID4ke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgaWYgISBjYXQgIiR7QlVJTERESVJ9Ly50b2FzdGVybWFpbi5waWQiIHwgeGFyZ3MgLUl7fSBraWxsIC0wIHt9IDsgdGhlbgorICAgICAgICAgICAgcmV0dmFsPTEKKyAgICAgICAgICAgIHJtICIke0JVSUxERElSfS8udG9hc3Rlcm1haW4ucGlkIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJXZWJzZXJ2ZXIgYWRkcmVzczogIGh0dHA6Ly8wLjAuMC4wOiRXRUJfUE9SVC8iCisgICAgICAgIGZpCisgICAgZmkKKyAgICByZXR1cm4gJHJldHZhbAorfQorCisjIEhlbHBlciBmdW5jdGlvbnMgdG8gYWRkIGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZpbGUKKworYWRkdG9Db25maWd1cmF0aW9uKCkKK3sKKyAgICBmaWxlPSQxCisgICAgc2hpZnQKKyAgICBlY2hvICIjQ3JlYXRlZCBieSB0b2FzdGVyIHN0YXJ0IHNjcmlwdCIgPiAke0JVSUxERElSfS9jb25mLyRmaWxlCisgICAgZm9yIHZhciBpbiAiJEAiOyBkbyBlY2hvICR2YXIgPj4gJHtCVUlMRERJUn0vY29uZi8kZmlsZTsgZG9uZQorfQorCitJTlNUT1BTWVNURU09MAorCisjIGRlZmluZSB0aGUgc3RvcCBjb21tYW5kCitzdG9wX3N5c3RlbSgpCit7CisgICAgIyBwcmV2ZW50IHJlZW50cnkKKyAgICBpZiBbICRJTlNUT1BTWVNURU0gLWVxIDEgXTsgdGhlbiByZXR1cm47IGZpCisgICAgSU5TVE9QU1lTVEVNPTEKKyAgICBpZiBbIC1mICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkIF07IHRoZW4KKyAgICAgICAga2lsbCBgY2F0ICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkYCAyPi9kZXYvbnVsbAorICAgICAgICBybSAke0JVSUxERElSfS8udG9hc3RlcnVpLnBpZAorICAgIGZpCisgICAgQkJTRVJWRVI9MC4wLjAuMDotMSBiaXRiYWtlIC1tCisgICAgdW5zZXQgQkJTRVJWRVIKKyAgICB3ZWJzZXJ2ZXJLaWxsQWxsCisgICAgIyBmb3JjZSBzdG9wIGFueSBtaXNiZWhhdmluZyBiaXRiYWtlIHNlcnZlcgorICAgIGxzb2YgYml0YmFrZS5sb2NrIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGdyZXAgIlswLTldXCsiIHwgeGFyZ3MgLW4xIC1yIGtpbGwKKyAgICB0cmFwIC0gU0lHSFVQCisgICAgI3RyYXAgLSBTSUdDSExECisgICAgSU5TVE9QU1lTVEVNPTAKK30KKworY2hlY2tfcGlkYnlmaWxlKCkgeworICAgIFsgLWUgJDEgXSAmJiBraWxsIC0wIGBjYXQgJDFgIDI+L2Rldi9udWxsCit9CisKKworbm90aWZ5X2NobGRleGl0KCkgeworICAgIGlmIFsgJE5PVE9BU1RFUlVJIC1lcSAwIF07IHRoZW4KKyAgICAgICAgY2hlY2tfcGlkYnlmaWxlICR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkICYmIHJldHVybgorICAgICAgICBzdG9wX3N5c3RlbQorICAgIGZpCit9CisKKwordmVyaWZ5X3ByZXJlcSgpIHsKKyAgICAjIFZlcmlmeSBwcmVyZXF1aXNpdGVzCisKKyAgICBpZiAhIGVjaG8gImltcG9ydCBkamFuZ287IHByaW50ICgxLCkgPT0gZGphbmdvLlZFUlNJT05bMDoxXSBhbmQgZGphbmdvLlZFUlNJT05bMToyXVswXSBpbiAoNiwpIiB8IHB5dGhvbiAyPi9kZXYvbnVsbCB8IGdyZXAgVHJ1ZSA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIHByaW50ZiAiVGhpcyBwcm9ncmFtIG5lZWRzIERqYW5nbyAxLjYuIFBsZWFzZSBpbnN0YWxsIHdpdGhcblxucGlwIGluc3RhbGwgZGphbmdvPT0xLjZcbiIKKyAgICAgICAgcmV0dXJuIDIKKyAgICBmaQorCisgICAgaWYgISBlY2hvICJpbXBvcnQgc291dGg7IHByaW50IHJlZHVjZShsYW1iZGEgeCwgeTogMiBpZiB4PT0yIGVsc2UgMCBpZiB4ID09IDAgZWxzZSB5LCBtYXAobGFtYmRhIHg6IDErY21wKHhbMV0teFswXSwwKSwgemlwKFswLDgsNF0sIG1hcChpbnQsc291dGguX192ZXJzaW9uX18uc3BsaXQoXCIuXCIpKSkpKSA+IDAiIHwgcHl0aG9uIDI+L2Rldi9udWxsIHwgZ3JlcCBUcnVlID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgcHJpbnRmICJUaGlzIHByb2dyYW0gbmVlZHMgU291dGggMC44LjQuIFBsZWFzZSBpbnN0YWxsIHdpdGhcblxucGlwIGluc3RhbGwgc291dGg9PTAuOC40XG4iCisgICAgICAgIHJldHVybiAyCisgICAgZmkKKyAgICByZXR1cm4gMAorfQorCisKKyMgcmVhZCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycworaWYgWyAtbiAiJEJBU0hfU09VUkNFIiBdIDsgdGhlbgorICAgIFRPQVNURVI9JHtCQVNIX1NPVVJDRX0KK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdIDsgdGhlbgorICAgIFRPQVNURVI9JHsoJSk6LSV4fQorZWxzZQorICAgIFRPQVNURVI9JDAKK2ZpCisKK0JCQkFTRURJUj1gZGlybmFtZSAkVE9BU1RFUmAvLi4KKworUlVOTklORz0wCisKK05PVE9BU1RFUlVJPTAKK1dFQlNFUlZFUj0xCitUT0FTVEVSX0JSQkU9IiIKK1dFQl9QT1JUPSI4MDAwIgorTk9CUk9XU0VSPTAKKworZm9yIHBhcmFtIGluICQqOyBkbworICAgIGNhc2UgJHBhcmFtIGluCisgICAgbm91aSApCisgICAgICAgICAgICBOT1RPQVNURVJVST0xCisgICAgOzsKKyAgICBub3dlYiApCisgICAgICAgICAgICBXRUJTRVJWRVI9MAorICAgIDs7CisgICAgbm9icm93c2VyICkKKyAgICAgICAgICAgIE5PQlJPV1NFUj0xCisgICAgOzsKKyAgICBicmJlPSogKQorICAgICAgICAgICAgVE9BU1RFUl9CUkJFPSQnXG4nIlRPQVNURVJfQlJCRT1cIiIke3BhcmFtIyo9fSJcIiIKKyAgICA7OworICAgIHdlYnBvcnQ9KikKKyAgICAgICAgICAgIFdFQl9QT1JUPSIke3BhcmFtIyo9fSIKKyAgICBlc2FjCitkb25lCisKK1sgLW4gIiR7QkFTSF9TT1VSQ0V9IiBdICYmIFNSQ0ZJTEU9JHtCQVNIX1NPVVJDRX0gfHwgU1JDRklMRT0kXworCitpZiBbIGBiYXNlbmFtZSBcIiQwXCJgID0gYGJhc2VuYW1lIFwiJHtTUkNGSUxFfVwiYCBdOyB0aGVuCisgICAgIyBXZSBhcmUgY2FsbGVkIGFzIHN0YW5kYWxvbmUuIFdlIHJlZnVzZSB0byBydW4gaW4gYSBidWlsZCBlbnZpcm9ubWVudCAtIHdlIG5lZWQgdGhlIGludGVyYWN0aXZlIG1vZGUgZm9yIHRoYXQuCisgICAgIyBTdGFydCBqdXN0IHRoZSB3ZWIgc2VydmVyLCBwb2ludCB0aGUgd2ViIGJyb3dzZXIgdG8gdGhlIGludGVyZmFjZSwgYW5kIHN0YXJ0IGFueSBEamFuZ28gc2VydmljZXMuCisKKyAgICBpZiAhIHZlcmlmeV9wcmVyZXE7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IENvdWxkIG5vdCB2ZXJpZnkgdGhhdCB0aGUgbmVlZGVkIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkLiBQbGVhc2UgdXNlIHZpcnR1YWxlbnYgYW5kIHBpcCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBsaXN0ZWQgaW4gdG9hc3Rlci1yZXF1aXJlbWVudHMudHh0IiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiBbIC1uICIkQlVJTERESVIiIF07IHRoZW4KKyAgICAgICAgcHJpbnRmICJFcnJvcjogSXQgbG9va3MgbGlrZSB5b3Ugc291cmNlZCBvZS1pbml0LWJ1aWxkLWVudi4gVG9hc3RlciBjYW5ub3Qgc3RhcnQgaW4gYnVpbGQgbW9kZSBmcm9tIGFuIG9lLWNvcmUgYnVpbGQgZW52aXJvbm1lbnQuXG4gWW91IHNob3VsZCBiZSBzdGFydGluZyBUb2FzdGVyIGZyb20gYSBuZXcgdGVybWluYWwgd2luZG93LiIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgIyBEZWZpbmUgYSBmYWtlIGJ1aWxkZGlyIHdoZXJlIG9ubHkgdGhlIHBpZCBmaWxlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZC4gTm8gcmVhbCBidWlsZHMgd2lsbCB0YWtlIHBsYWNlIGhlcmUuCisgICAgQlVJTERESVI9L3RtcC90b2FzdGVyXyQkCisgICAgaWYgWyAtZCAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIlByZXZpb3VzIHRvYXN0ZXIgcnVuIGRpcmVjdG9yeSAkQlVJTERESVIgZm91bmQsIGNvd2FyZGx5IHJlZnVzaW5nIHRvIHN0YXJ0LiBQbGVhc2UgcmVtb3ZlIHRoZSBkaXJlY3Rvcnkgd2hlbiB0aGF0IHRvYXN0ZXIgaW5zdGFuY2UgaXMgb3ZlciIgMj4mMQorICAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgbWtkaXIgLXAgIiRCVUlMRERJUiIKKworICAgIFJVTk5JTkc9MQorICAgIHRyYXBfY3RybGMoKSB7CisgICAgICAgIGVjaG8gIioqIFN0b3BwaW5nIHN5c3RlbSIKKyAgICAgICAgd2Vic2VydmVyS2lsbEFsbAorICAgICAgICBSVU5OSU5HPTAKKyAgICB9CisKKyAgICBkb19jbGVhbnVwKCkgeworICAgICAgICBmaW5kICIkQlVJTERESVIiIC10eXBlIGYgfCB4YXJncyBybQorICAgICAgICBybWRpciAiJEJVSUxERElSIgorICAgIH0KKyAgICBjbGVhbnVwKCkgeworICAgICAgICBpZiBncmVwIC1pciBlcnJvciAiJEJVSUxERElSIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICBpZiBncmVwIC1pcm4gIlRoYXQgcG9ydCBpcyBhbHJlYWR5IGluIHVzZSIgIiRCVUlMRERJUiI7IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJZb3UgY2FuIHVzZSB0aGUgXCJ3ZWJwb3J0PVBPUlROVU1CRVJcIiBwYXJhbWV0ZXIgdG8gc3RhcnQgVG9hc3RlciBvbiBhIGRpZmZlcmVudCBwb3J0IChwb3J0ICRXRUJfUE9SVCBpcyBhbHJlYWR5IGluIHVzZSkiCisgICAgICAgICAgICAgICAgZG9fY2xlYW51cAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZiAiXG5FcnJvcnMgZm91bmQgaW4gdGhlIFRvYXN0ZXIgbG9nIGZpbGVzIHByZXNlbnQgaW4gJyRCVUlMRERJUicuIERpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkLlxuIFBsZWFzZSByZXZpZXcgdGhlIGVycm9ycyBhbmQgbm90aWZ5IHRvYXN0ZXJAeW9jdG9wcm9qZWN0Lm9yZyBvciBzdWJtaXQgYSBidWcgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Ub2FzdGVyIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiTm8gZXJyb3JzIGZvdW5kLCByZW1vdmluZyB0aGUgcnVuIGRpcmVjdG9yeSAnJEJVSUxERElSJyIKKyAgICAgICAgICAgIGRvX2NsZWFudXAKKyAgICAgICAgZmkKKyAgICB9CisgICAgVE9BU1RFUl9NQU5BR0VEPTEKKyAgICBleHBvcnQgVE9BU1RFUl9NQU5BR0VEPTEKKyAgICBpZiBbICRXRUJTRVJWRVIgLWd0IDAgXSAmJiAhIHdlYnNlcnZlclN0YXJ0QWxsOyB0aGVuCisgICAgICAgIGVjaG8gIkZhaWxlZCB0byBzdGFydCB0aGUgd2ViIHNlcnZlciwgc3RvcHBpbmciIDE+JjIKKyAgICAgICAgY2xlYW51cAorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGlmIFsgJFdFQlNFUlZFUiAtZ3QgMCBdICYmIFsgJE5PQlJPV1NFUiAtZXEgMCBdICA7IHRoZW4KKyAgICAgICAgZWNobyAiU3RhcnRpbmcgYnJvd3Nlci4uLiIKKyAgICAgICAgeGRnLW9wZW4gaHR0cDovLzEyNy4wLjAuMTokV0VCX1BPUlQvID4vZGV2L251bGwgMj4mMSAmCisgICAgZmkKKyAgICB0cmFwIHRyYXBfY3RybGMgMgorICAgIGVjaG8gIlRvYXN0ZXIgaXMgbm93IHJ1bm5pbmcuIFlvdSBjYW4gc3RvcCBpdCB3aXRoIEN0cmwtQyIKKyAgICB3aGlsZSBbICRSVU5OSU5HIC1ndCAwIF07IGRvCisgICAgICAgIHB5dGhvbiAkQkJCQVNFRElSL2xpYi90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHMgMj4mMSB8IHRlZSAtYSAiJEJVSUxERElSL3RvYXN0ZXIubG9nIgorICAgICAgICBzbGVlcCAxCisgICAgZG9uZQorICAgIGNsZWFudXAKKyAgICBlY2hvICIqKioqIEV4aXQiCisgICAgZXhpdCAwCitmaQorCisKK2lmICEgdmVyaWZ5X3ByZXJlcTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBDb3VsZCBub3QgdmVyaWZ5IHRoYXQgdGhlIG5lZWRlZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZC4gUGxlYXNlIHVzZSB2aXJ0dWFsZW52IGFuZCBwaXAgdG8gaW5zdGFsbCBkZXBlbmRlbmNpZXMgbGlzdGVkIGluIHRvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dCIgMT4mMgorICAgIHJldHVybiAxCitmaQorCisKKyMgV2UgbWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGN1cnJlbnQgc2hlbGwgYW5kIGluIGEgZ29vZCBlbnZpcm9ubWVudAoraWYgWyAteiAiJEJVSUxERElSIiBdIHx8ICAhIHdoaWNoIGJpdGJha2UgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBCdWlsZCBlbnZpcm9ubWVudCBpcyBub3Qgc2V0dXAgb3IgYml0YmFrZSBpcyBub3QgaW4gcGF0aC4iIDE+JjIKKyAgICByZXR1cm4gMgorZmkKKworCisjIERldGVybWluZSB0aGUgYWN0aW9uLiBJZiBzcGVjaWZpZWQgYnkgYXJndW1lbnRzLCBmaW5lLCBpZiBub3QsIHRvZ2dsZSBpdAoraWYgWyAiJDEiID0gJ3N0YXJ0JyBdIHx8IFsgIiQxIiA9ICdzdG9wJyBdOyB0aGVuCisgICAgQ01EPSIkMSIKK2Vsc2UKKyAgICBpZiBbIC16ICIkQkJTRVJWRVIiIF07IHRoZW4KKyAgICAgICAgQ01EPSJzdGFydCIKKyAgICBlbHNlCisgICAgICAgIENNRD0ic3RvcCIKKyAgICBmaQorZmkKKworZWNobyAiVGhlIHN5c3RlbSB3aWxsICRDTUQuIgorCisjIE1ha2Ugc3VyZSBpdCdzIHNhZmUgdG8gcnVuIGJ5IGNoZWNraW5nIGJpdGJha2UgbG9jaworCitsb2NrPTEKK2lmIFsgLWUgJEJVSUxERElSL2JpdGJha2UubG9jayBdOyB0aGVuCisgICAgcHl0aG9uIC1jICJpbXBvcnQgZmNudGw7IGZjbnRsLmZsb2NrKG9wZW4oXCIkQlVJTERESVIvYml0YmFrZS5sb2NrXCIpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpIiAyPi9kZXYvbnVsbCB8fCBsb2NrPTAKK2ZpCisKK2lmIFsgJHtDTUR9ID0gJ3N0YXJ0JyBdICYmIFsgJGxvY2sgLWVxIDAgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBiaXRiYWtlIGxvY2sgc3RhdGUgZXJyb3IuIEZpbGUgbG9ja3Mgc2hvdyB0aGF0IHRoZSBzeXN0ZW0gaXMgb24uIiAxPiYyCisgICAgZWNobyAiUGxlYXNlIHdhaXQgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIHRvIGZpbmlzaCwgc3RvcCBhbmQgdGhlbiBzdGFydCB0aGUgc3lzdGVtIGFnYWluLiIgMT4mMgorICAgIHJldHVybiAzCitmaQorCitpZiBbICR7Q01EfSA9ICdzdGFydCcgXSAmJiBbIC1lICRCVUlMRERJUi8udG9hc3Rlcm1haW4ucGlkIF0gJiYga2lsbCAtMCBgY2F0ICRCVUlMRERJUi8udG9hc3Rlcm1haW4ucGlkYDsgdGhlbgorICAgIGVjaG8gIldhcm5pbmc6IGJpdGJha2UgYXBwZWFycyB0byBiZSBkZWFkLCBidXQgdGhlIFRvYXN0ZXIgd2ViIHNlcnZlciBpcyBydW5uaW5nLiBTb21ldGhpbmcgZmlzaHkgaXMgZ29pbmcgb24uIiAxPiYyCisgICAgZWNobyAiQ2xlYW5pbmcgdXAgdGhlIHdlYiBzZXJ2ZXIgdG8gc3RhcnQgZnJvbSBhIGNsZWFuIHNsYXRlLiIKKyAgICB3ZWJzZXJ2ZXJLaWxsQWxsCitmaQorCisKKyMgRXhlY3V0ZSB0aGUgY29tbWFuZHMKKworY2FzZSAkQ01EIGluCisgICAgc3RhcnQgKQorICAgICAgICBzdGFydF9zdWNjZXNzPTEKKyAgICAgICAgYWRkdG9Db25maWd1cmF0aW9uIHRvYXN0ZXIuY29uZiAiSU5IRVJJVCs9XCJ0b2FzdGVyIGJ1aWxkaGlzdG9yeVwiIiAkVE9BU1RFUl9CUkJFCisgICAgICAgIGlmIFsgJFdFQlNFUlZFUiAtZ3QgMCBdICYmICEgd2Vic2VydmVyU3RhcnRBbGw7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkZhaWxlZCAke0NNRH0uIgorICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgZmkKKyAgICAgICAgdW5zZXQgQkJTRVJWRVIKKyAgICAgICAgUFJFUkVBRD0iIgorICAgICAgICBpZiBbIC1lICR7QlVJTERESVJ9L2NvbmYvdG9hc3Rlci1wcmUuY29uZiBdOyB0aGVuCisgICAgICAgICAgICBybSAke0JVSUxERElSfS9jb25mL3RvYXN0ZXItcHJlLmNvbmYKKyAgICAgICAgZmkKKyAgICAgICAgYml0YmFrZSAkUFJFUkVBRCAtLXBvc3RyZWFkIGNvbmYvdG9hc3Rlci5jb25mIC0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIDAuMC4wLjA6MAorICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgIHN0YXJ0X3N1Y2Nlc3M9MAorICAgICAgICAgICAgZWNobyAiQml0YmFrZSBzZXJ2ZXIgc3RhcnQgZmFpbGVkIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBvcnQgQkJTRVJWRVI9MC4wLjAuMDotMQorICAgICAgICAgICAgaWYgWyAkTk9UT0FTVEVSVUkgLWVxIDAgXTsgdGhlbiAgICAgICAgIyB3ZSBzdGFydCB0aGUgVE9BU1RFUlVJIG9ubHkgaWYgbm90IGluaGliaXRlZAorICAgICAgICAgICAgICAgIGJpdGJha2UgLS1vYnNlcnZlLW9ubHkgLXUgdG9hc3RlcnVpID4+JHtCVUlMRERJUn0vdG9hc3Rlcl91aS5sb2cgMj4mMSAmIGVjaG8gJCEgPiR7QlVJTERESVJ9Ly50b2FzdGVydWkucGlkCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBpZiBbICRzdGFydF9zdWNjZXNzIC1lcSAxIF07IHRoZW4KKyAgICAgICAgICAgICMgc2V0IGZhaWwgc2FmZSBzdG9wIHN5c3RlbSBvbiB0ZXJtaW5hbCBleGl0CisgICAgICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUAorICAgICAgICAgICAgZWNobyAiU3VjY2Vzc2Z1bCAke0NNRH0uIgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBmYWlsZWQgc3RhcnQsIGRvIHN0b3AKKyAgICAgICAgICAgIHN0b3Bfc3lzdGVtCisgICAgICAgICAgICBlY2hvICJGYWlsZWQgJHtDTUR9LiIKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgICMgc3RvcCBzeXN0ZW0gb24gdGVybWluYWwgZXhpdAorICAgICAgICBzZXQgLW8gbW9uaXRvcgorICAgICAgICB0cmFwIHN0b3Bfc3lzdGVtIFNJR0hVUAorICAgICAgICAjdHJhcCBub3RpZnlfY2hsZGV4aXQgU0lHQ0hMRAorICAgIDs7CisgICAgc3RvcCApCisgICAgICAgIHN0b3Bfc3lzdGVtCisgICAgICAgIGVjaG8gIlN1Y2Nlc3NmdWwgJHtDTUR9LiIKKyAgICA7OworZXNhYworCmRpZmYgLS1naXQgYS9iaXRiYWtlL2Jpbi90b2FzdGVyLWV2ZW50cmVwbGF5IGIvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTVhN2FlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9iaW4vdG9hc3Rlci1ldmVudHJlcGxheQpAQCAtMCwwICsxLDE3NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgICAgICAgIEFsZXggRGFtaWFuCisjCisjIFRoaXMgZmlsZSByZS11c2VzIGNvZGUgc3ByZWFkIHRocm91Z2hvdXQgb3RoZXIgQml0YmFrZSBzb3VyY2UgZmlsZXMuCisjIEFzIHN1Y2gsIGFsbCBvdGhlciBjb3B5cmlnaHRzIGJlbG9uZyB0byB0aGVpciBvd24gcmlnaHQgaG9sZGVycy4KKyMKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUaGlzIGNvbW1hbmQgdGFrZXMgYSBmaWxlbmFtZSBhcyBhIHNpbmdsZSBwYXJhbWV0ZXIuIFRoZSBmaWxlbmFtZSBpcyByZWFkCisjIGFzIGEgYnVpbGQgZXZlbnRsb2csIGFuZCB0aGUgVG9hc3RlclVJIGlzIHVzZWQgdG8gcHJvY2VzcyBldmVudHMgaW4gdGhlIGZpbGUKKyMgYW5kIGxvZyBkYXRhIGluIHRoZSBkYXRhYmFzZQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsIGxvZ2dpbmcKKworIyBtYW5nbGUgc3lzcGF0aCB0byBhbGxvdyBlYXN5IGltcG9ydCBvZiBtb2R1bGVzCitzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJykpCisKKworaW1wb3J0IGJiLmNvb2tlcgorZnJvbSBiYi51aSBpbXBvcnQgdG9hc3RlcnVpCitpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZworCitpbXBvcnQganNvbiwgcGlja2xlCisKKworY2xhc3MgRmlsZVJlYWRFdmVudHNTZXJ2ZXJDb25uZWN0aW9uKCk6CisgICAgIiIiICBFbXVsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSBiaXRiYWtlIHNlcnZlciB0aGF0IGZlZWRzCisgICAgICAgIGV2ZW50cyBjb21pbmcgYWN0dWFsbHkgcmVhZCBmcm9tIGEgc2F2ZWQgbG9nIGZpbGUuCisgICAgIiIiCisKKyAgICBjbGFzcyBNb2NrQ29ubmVjdGlvbigpOgorICAgICAgICAiIiIgZmlsbC1pbiBmb3IgdGhlIHByb3h5IHRvIHRoZSBzZXJ2ZXIuIHdlIGp1c3QgcmV0dXJuIGdlbmVyaWMgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKKyAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKworICAgICAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kQXJyYXkpOgorICAgICAgICAgICAgIiIiIGVtdWxhdGVzIHJ1bm5pbmcgYSBjb21tYW5kIG9uIHRoZSBzZXJ2ZXI7IG9ubHkgcmVhZC1vbmx5IGNvbW1hbmRzIGFyZSBhY2NlcHRlZCAiIiIKKyAgICAgICAgICAgIGNvbW1hbmRfbmFtZSA9IGNvbW1hbmRBcnJheVswXQorCisgICAgICAgICAgICBpZiBjb21tYW5kX25hbWUgPT0gImdldFZhcmlhYmxlIjoKKyAgICAgICAgICAgICAgICBpZiBjb21tYW5kQXJyYXlbMV0gaW4gc2VsZi5fc2MuX3ZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9zYy5fdmFyaWFibGVzW2NvbW1hbmRBcnJheVsxXV1bJ3YnXSwgTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5vbmUsICJNaXNzaW5nIHZhcmlhYmxlIikKKworICAgICAgICAgICAgZWxpZiBjb21tYW5kX25hbWUgPT0gImdldEFsbEtleXNXaXRoRmxhZ3MiOgorICAgICAgICAgICAgICAgIGR1bXAgPSB7fQorICAgICAgICAgICAgICAgIGZsYWdsaXN0ID0gY29tbWFuZEFycmF5WzFdCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5fc2MuX3ZhcmlhYmxlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBrLnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NjLl92YXJpYWJsZXNba11bJ3YnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBba10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2JyA6IHYgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlzdG9yeScgOiBzZWxmLl9zYy5fdmFyaWFibGVzW2tdWydoaXN0b3J5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkIGluIGZsYWdsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdW2RdID0gc2VsZi5fc2MuX3ZhcmlhYmxlc1trXVtkXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChlKQorICAgICAgICAgICAgICAgIHJldHVybiAoZHVtcCwgTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb21tYW5kICVzIG5vdCBpbXBsZW1lbnRlZCIgJSBjb21tYW5kQXJyYXlbMF0pCisKKyAgICAgICAgZGVmIHRlcm1pbmF0ZVNlcnZlcihzZWxmKToKKyAgICAgICAgICAgICIiIiBkbyBub3QgZG8gYW55dGhpbmcgIiIiCisgICAgICAgICAgICBwYXNzCisKKworCisgICAgY2xhc3MgRXZlbnRSZWFkZXIoKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjKToKKyAgICAgICAgICAgIHNlbGYuX3NjID0gc2MKKyAgICAgICAgICAgIHNlbGYuZmlyc3RyYWlzZSA9IDAKKworICAgICAgICBkZWYgX2NyZWF0ZV9ldmVudChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgIGRlZiBfaW1wb3J0X2NsYXNzKG5hbWUpOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obmFtZSkgPiAwCisgICAgICAgICAgICAgICAgYXNzZXJ0ICIuIiBpbiBuYW1lLCBuYW1lCisKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gbmFtZS5zdHJpcCgpLnNwbGl0KCIuIikKKyAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gIi4iLmpvaW4oY29tcG9uZW50c1s6LTFdKQorICAgICAgICAgICAgICAgIG1vZHVsZWtsYXNzID0gY29tcG9uZW50c1stMV0KKworICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlbmFtZSwgZnJvbWxpc3Q9W3N0cihtb2R1bGVrbGFzcyldKQorICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG1vZHVsZSwgbW9kdWxla2xhc3MpCisKKyAgICAgICAgICAgICMgd2UgYnVpbGQgYSB0b2FzdGVyIGV2ZW50IG91dCBvZiBjdXJyZW50IGV2ZW50IGxvZyBsaW5lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZlbnRfZGF0YSA9IGpzb24ubG9hZHMobGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGV2ZW50X2NsYXNzID0gX2ltcG9ydF9jbGFzcyhldmVudF9kYXRhWydjbGFzcyddKQorICAgICAgICAgICAgICAgIGV2ZW50X29iamVjdCA9IHBpY2tsZS5sb2Fkcyhqc29uLmxvYWRzKGV2ZW50X2RhdGFbJ3ZhcnMnXSkpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgbG9hZGluZyAiLCBsaW5lKQorICAgICAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnRfb2JqZWN0LCBldmVudF9jbGFzcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBsb2FkaW5nIG9iamVjdHMgJXMgY2xhc3MgJXMgIiwgZXZlbnRfb2JqZWN0LCBldmVudF9jbGFzcykKKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50X29iamVjdAorCisgICAgICAgIGRlZiB3YWl0RXZlbnQoc2VsZiwgdGltZW91dCk6CisKKyAgICAgICAgICAgIG5leHRsaW5lID0gc2VsZi5fc2MuX2V2ZW50ZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsZW4obmV4dGxpbmUpID09IDA6CisgICAgICAgICAgICAgICAgIyB0aGUgYnVpbGQgZGF0YSBlbmRlZCwgd2hpbGUgdG9hc3RlcnVpIHN0aWxsIHdhaXRzIGZvciBldmVudHMuCisgICAgICAgICAgICAgICAgIyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgc2VydmVyIHdhcyBhYnJ1cHRseSBzdG9wcGVkLCBzbyB3ZSBzaW11bGF0ZSB0aGlzCisgICAgICAgICAgICAgICAgc2VsZi5maXJzdHJhaXNlICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZpcnN0cmFpc2UgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NjLmxpbmVubyArPSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX2V2ZW50KG5leHRsaW5lKQorCisKKyAgICBkZWYgX3JlYWRWYXJpYWJsZXMoc2VsZiwgdmFyaWFibGVsaW5lKToKKyAgICAgICAgc2VsZi5fdmFyaWFibGVzID0ganNvbi5sb2Fkcyh2YXJpYWJsZWxpbmUuc3RyaXAoKSlbJ2FsbHZhcmlhYmxlcyddCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24uTW9ja0Nvbm5lY3Rpb24oc2VsZikKKyAgICAgICAgc2VsZi5fZXZlbnRmaWxlID0gb3BlbihmaWxlX25hbWUsICJyIikKKworICAgICAgICAjIHdlIGV4cGVjdCB0byBoYXZlIHRoZSB2YXJpYWJsZSBkdW1wIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZQorICAgICAgICBzZWxmLmxpbmVubyA9IDEKKyAgICAgICAgc2VsZi5fcmVhZFZhcmlhYmxlcyhzZWxmLl9ldmVudGZpbGUucmVhZGxpbmUoKSkKKworICAgICAgICBzZWxmLmV2ZW50cyA9IEZpbGVSZWFkRXZlbnRzU2VydmVyQ29ubmVjdGlvbi5FdmVudFJlYWRlcihzZWxmKQorCisKKworCisKK2NsYXNzIE1vY2tDb25maWdQYXJhbWV0ZXJzKCk6CisgICAgIiIiIHN0YW5kLWluIGZvciBjb29rZXJkYXRhLkNvbmZpZ1BhcmFtZXRlcnM7IGFzIHdlIGRvbid0IHJlYWxseSBjb25maWcgYSBjb29rZXIsIHRoaXMKKyAgICAgICAgc2VydmVzIGp1c3QgdG8gc3VwcGx5IG5lZWRlZCBpbnRlcmZhY2VzIGZvciB0aGUgdG9hc3RlciB1aSB0byB3b3JrICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5vYnNlcnZlX29ubHkgPSBUcnVlICAgICAgICAgICAgIyB3ZSBjYW4gb25seSByZWFkIGZpbGVzCisKKworIyBydW4gdG9hc3RlciB1aSBvbiBvdXIgbW9jayBiaXRiYWtlIGNsYXNzCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgorICAgICAgICBwcmludCgiVXNhZ2U6ICVzIGV2ZW50LmxvZyAiICUgc3lzLmFyZ3ZbMF0pCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlX25hbWUgPSBzeXMuYXJndlstMV0KKyAgICBtb2NrX2Nvbm5lY3Rpb24gPSBGaWxlUmVhZEV2ZW50c1NlcnZlckNvbm5lY3Rpb24oZmlsZV9uYW1lKQorICAgIGNvbmZpZ1BhcmFtcyA9IE1vY2tDb25maWdQYXJhbWV0ZXJzKCkKKworICAgICMgcnVuIHRoZSBtYWluIHByb2dyYW0gYW5kIHNldCBleGl0IGNvZGUgdG8gdGhlIHJldHVybmVkIHZhbHVlCisgICAgc3lzLmV4aXQodG9hc3RlcnVpLm1haW4obW9ja19jb25uZWN0aW9uLmNvbm5lY3Rpb24sIG1vY2tfY29ubmVjdGlvbi5ldmVudHMsIGNvbmZpZ1BhcmFtcykpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2NvbnRyaWIvUkVBRE1FIGIvYml0YmFrZS9jb250cmliL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWU1MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9jb250cmliL1JFQURNRQpAQCAtMCwwICsxIEBACitUaGlzIGRpcmVjdG9yeSBpcyBmb3IgYWRkaXRpb25hbCBjb250cmlidXRlZCBmaWxlcyB3aGljaCBtYXkgYmUgdXNlZnVsLgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9jb250cmliL2JiZGV2LnNoIGIvYml0YmFrZS9jb250cmliL2JiZGV2LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTc4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2NvbnRyaWIvYmJkZXYuc2gKQEAgLTAsMCArMSwzMSBAQAorIyBUaGlzIGlzIGEgc2hlbGwgZnVuY3Rpb24gdG8gYmUgc291cmNlZCBpbnRvIHlvdXIgc2hlbGwgb3IgcGxhY2VkIGluIHlvdXIgLnByb2ZpbGUsCisjIHdoaWNoIG1ha2VzIHNldHRpbmcgdGhpbmdzIHVwIGZvciBCaXRCYWtlIGEgYml0IGVhc2llci4KKyMKKyMgVGhlIGF1dGhvciBkaXNjbGFpbXMgY29weXJpZ2h0IHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYW5kIHBsYWNlcyBpdCBpbiB0aGUKKyMgcHVibGljIGRvbWFpbi4KKworYmJkZXYgKCkgeworCWxvY2FsIEJCRElSIFBLR0RJUiBCVUlMRERJUgorCWlmIHRlc3QgeCIkMSIgPSAieC0taGVscCI7IHRoZW4gZWNobyA+JjIgInN5bnRheDogYmJkZXYgW2JiZGlyIFtwa2dkaXIgW2J1aWxkZGlyXV1dIjsgcmV0dXJuIDE7IGZpCisJaWYgdGVzdCB4IiQxIiA9IHg7IHRoZW4gQkJESVI9YHB3ZGA7IGVsc2UgQkJESVI9JDE7IGZpCisJaWYgdGVzdCB4IiQyIiA9IHg7IHRoZW4gUEtHRElSPWBwd2RgOyBlbHNlIFBLR0RJUj0kMjsgZmkKKwlpZiB0ZXN0IHgiJDMiID0geDsgdGhlbiBCVUlMRERJUj1gcHdkYDsgZWxzZSBCVUlMRERJUj0kMzsgZmkKKworCUJCRElSPWByZWFkbGluayAtZiAkQkJESVJgCisJUEtHRElSPWByZWFkbGluayAtZiAkUEtHRElSYAorCUJVSUxERElSPWByZWFkbGluayAtZiAkQlVJTERESVJgCisJaWYgISAodGVzdCAtZCAkQkJESVIgJiYgdGVzdCAtZCAkUEtHRElSICYmIHRlc3QgLWQgJEJVSUxERElSKTsgdGhlbgorCQllY2hvID4mMiAic3ludGF4OiBiYmRldiBbYmJkaXIgW3BrZ2RpciBbYnVpbGRkaXJdXV0iCisJCXJldHVybiAxCisJZmkKKwkKKwlQQVRIPSRCQkRJUi9iaW46JFBBVEgKKwlCQlBBVEg9JEJCRElSCisJaWYgdGVzdCB4IiRCQkRJUiIgIT0geCIkUEtHRElSIjsgdGhlbgorCQlCQlBBVEg9JFBLR0RJUjokQkJQQVRICisJZmkKKwlpZiB0ZXN0IHgiJFBLR0RJUiIgIT0geCIkQlVJTERESVIiOyB0aGVuCisJCUJCUEFUSD0kQlVJTERESVI6JEJCUEFUSAorCWZpCisJZXhwb3J0IEJCUEFUSAorfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkgYi9iaXRiYWtlL2NvbnRyaWIvZHVtcF9jYWNoZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWYyMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9jb250cmliL2R1bXBfY2FjaGUucHkKQEAgLTAsMCArMSw2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjCisjIFRoaXMgaXMgdXNlZCBmb3IgZHVtcGluZyB0aGUgYmJfY2FjaGUuZGF0LCB0aGUgb3V0cHV0IGZvcm1hdCBpczoKKyMgcmVjaXBlX3BhdGggUE4gUFYgUEFDS0FHRVMKKyMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKyMgRm9yIGltcG9ydGluZyBiYi5jYWNoZQorc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSksICcuLi9saWInKSkKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IENvcmVSZWNpcGVJbmZvCisKK2ltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorCitkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICIiIgorICAgIEdldCB0aGUgbWFwcGluZyBmb3IgdGhlIHRhcmdldCByZWNpcGUuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3YpICE9IDE6CisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIkVycm9yLCBuZWVkIG9uZSBhcmd1bWVudCEiCisgICAgICAgIHJldHVybiAyCisKKyAgICBjYWNoZWZpbGUgPSBhcmd2WzBdCisKKyAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkKKyAgICAgICAgd2hpbGUgY2FjaGVmaWxlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtleSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgdmFsID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBDb3JlUmVjaXBlSW5mbykgYW5kIChub3QgdmFsLnNraXBwZWQpOgorICAgICAgICAgICAgICAgIHBuID0gdmFsLnBuCisgICAgICAgICAgICAgICAgIyBGaWx0ZXIgb3V0IHRoZSBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndmlydHVhbDpuYXRpdmU6Jykgb3IgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgMS4wIGlzIHRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIGEgbm8gUFYgcmVjaXBlLgorICAgICAgICAgICAgICAgIGlmIHZhbC5fX2RpY3RfXy5oYXNfa2V5KCJwdiIpOgorICAgICAgICAgICAgICAgICAgICBwdiA9IHZhbC5wdgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHB2ID0gIjEuMCIKKworICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyAlcyAlcyIgJSAoa2V5LCBwbiwgcHYsICcgJy5qb2luKHZhbC5wYWNrYWdlcykpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9jb250cmliL3ZpbS9mdGRldGVjdC9iaXRiYWtlLnZpbSBiL2JpdGJha2UvY29udHJpYi92aW0vZnRkZXRlY3QvYml0YmFrZS52aW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwZjhhZQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvY29udHJpYi92aW0vZnRkZXRlY3QvYml0YmFrZS52aW0KQEAgLTAsMCArMSwyNCBAQAorIiBWaW0gZmlsZXR5cGUgZGV0ZWN0aW9uIGZpbGUKKyIgTGFuZ3VhZ2U6ICAgICBCaXRCYWtlCisiIEF1dGhvcjogICAgICAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA4ICBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQHJzYWx2ZXRpLm5ldD4KKyIgTGljZW5jZTogICAgICBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGlzIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFZpbSBpdHNlbGYKKyIKKyIgVGhpcyBzZXRzIHVwIHRoZSBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciBCaXRCYWtlIGZpbGVzLCBsaWtlIC5iYiwgLmJiY2xhc3MgYW5kIC5pbmMKKworaWYgJmNvbXBhdGlibGUgfHwgdmVyc2lvbiA8IDYwMAorICAgIGZpbmlzaAorZW5kaWYKKworIiAuYmIsIC5iYmFwcGVuZCBhbmQgLmJiY2xhc3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLntiYixiYmFwcGVuZCxiYmNsYXNzfQlzZXQgZmlsZXR5cGU9Yml0YmFrZQorCisiIC5pbmMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmluYwkJc2V0IGZpbGV0eXBlPWJpdGJha2UKKworIiAuY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY29uZgorICAgIFwgaWYgKG1hdGNoKGV4cGFuZCgiJTpwOmgiKSwgImNvbmYiKSA+IDApIHwKKyAgICBcICAgICBzZXQgZmlsZXR5cGU9Yml0YmFrZSB8CisgICAgXCBlbmRpZgorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2NvbnRyaWIvdmltL2Z0cGx1Z2luL2JpdGJha2UudmltIGIvYml0YmFrZS9jb250cmliL3ZpbS9mdHBsdWdpbi9iaXRiYWtlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBkNzUzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9jb250cmliL3ZpbS9mdHBsdWdpbi9iaXRiYWtlLnZpbQpAQCAtMCwwICsxLDIgQEAKK3NldCBzdHM9NCBzdz00IGV0CitzZXQgY21zPSMlcwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9jb250cmliL3ZpbS9wbHVnaW4vbmV3YmIudmltIGIvYml0YmFrZS9jb250cmliL3ZpbS9wbHVnaW4vbmV3YmIudmltCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3NGUzMzgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2NvbnRyaWIvdmltL3BsdWdpbi9uZXdiYi52aW0KQEAgLTAsMCArMSw4NCBAQAorIiBWaW0gcGx1Z2luIGZpbGUKKyIgUHVycG9zZToJQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIG5ldyBiYiBmaWxlcworIiBBdXRob3I6CVJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAZ21haWwuY29tPgorIiBDb3B5cmlnaHQ6CUNvcHlyaWdodCAoQykgMjAwOCBSaWNhcmRvIFNhbHZldGkgPHJzYWx2ZXRpQGdtYWlsLmNvbT4KKyIKKyIgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIENPUFlJTkcuTUlUIGluCisiIHRoaXMgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIHRlcm1zLgorIgorIiBCYXNlZCBvbiB0aGUgZ2VudG9vLXN5bnRheCBwYWNrYWdlCisiCisiIFdpbGwgdHJ5IHRvIHVzZSBnaXQgdG8gZmluZCB0aGUgdXNlciBuYW1lIGFuZCBlbWFpbAorCitpZiAmY29tcGF0aWJsZSB8fCB2OnZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCisKK2Z1biEgPFNJRD5HZXRVc2VyTmFtZSgpCisgICAgbGV0IGw6dXNlcl9uYW1lID0gc3lzdGVtKCJnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZSIpCisgICAgaWYgdjpzaGVsbF9lcnJvcgorICAgICAgICByZXR1cm4gIlVua25vd24gVXNlciIKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKGw6dXNlcl9uYW1lLCAiXG4iLCAiIiwgIiIpCitlbmRmdW4KKworZnVuISA8U0lEPkdldFVzZXJFbWFpbCgpCisgICAgbGV0IGw6dXNlcl9lbWFpbCA9IHN5c3RlbSgiZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsIikKKyAgICBpZiB2OnNoZWxsX2Vycm9yCisgICAgICAgIHJldHVybiAidW5rbm93QHVzZXIub3JnIgorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGUobDp1c2VyX2VtYWlsLCAiXG4iLCAiIiwgIiIpCitlbmRmdW4KKworZnVuISBCQkhlYWRlcigpCisgICAgbGV0IGw6Y3VycmVudF95ZWFyID0gc3RyZnRpbWUoIiVZIikKKyAgICBsZXQgbDp1c2VyX25hbWUgPSA8U0lEPkdldFVzZXJOYW1lKCkKKyAgICBsZXQgbDp1c2VyX2VtYWlsID0gPFNJRD5HZXRVc2VyRW1haWwoKQorICAgIDAgcHV0ID0nIyBDb3B5cmlnaHQgKEMpICcgLiBsOmN1cnJlbnRfeWVhciAuCisgICAgICAgICAgICAgICAgXCAnICcgLiBsOnVzZXJfbmFtZSAuICcgPCcgLiBsOnVzZXJfZW1haWwgLiAnPicKKyAgICBwdXQgPScjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpJworICAgICQKK2VuZGZ1bgorCitmdW4hIE5ld0JCVGVtcGxhdGUoKQorICAgIGxldCBsOnBhc3RlID0gJnBhc3RlCisgICAgc2V0IG5vcGFzdGUKKyAgICAKKyAgICAiIEdldCB0aGUgaGVhZGVyCisgICAgY2FsbCBCQkhlYWRlcigpCisKKyAgICAiIE5ldyB0aGUgYmIgdGVtcGxhdGUKKyAgICBwdXQgPSdERVNDUklQVElPTiA9IFwiXCInCisgICAgcHV0ID0nSE9NRVBBR0UgPSBcIlwiJworICAgIHB1dCA9J0xJQ0VOU0UgPSBcIlwiJyAKKyAgICBwdXQgPSdTRUNUSU9OID0gXCJcIicKKyAgICBwdXQgPSdERVBFTkRTID0gXCJcIicKKyAgICBwdXQgPScnCisgICAgcHV0ID0nU1JDX1VSSSA9IFwiXCInCisKKyAgICAiIEdvIHRvIHRoZSBmaXJzdCBwbGFjZSB0byBlZGl0CisgICAgMAorICAgIC9eREVTQ1JJUFRJT04gPS8KKyAgICBleGVjICJub3JtYWwgMmZcIiIKKworICAgIGlmIHBhc3RlID09IDEKKyAgICAgICAgc2V0IHBhc3RlCisgICAgZW5kaWYKK2VuZGZ1bgorCitpZiAhZXhpc3RzKCJnOmJiX2NyZWF0ZV9vbl9lbXB0eSIpCisgICAgbGV0IGc6YmJfY3JlYXRlX29uX2VtcHR5ID0gMQorZW5kaWYKKworIiBkaXNhYmxlIGluIGNhc2Ugb2YgdmltZGlmZgoraWYgdjpwcm9nbmFtZSA9fiAidmltZGlmZiIKKyAgICBsZXQgZzpiYl9jcmVhdGVfb25fZW1wdHkgPSAwCitlbmRpZgorCithdWdyb3VwIE5ld0JCCisgICAgYXUgQnVmTmV3RmlsZSAqLmJiCisgICAgICAgICAgICAgICAgXCBpZiBnOmJiX2NyZWF0ZV9vbl9lbXB0eSB8CisgICAgICAgICAgICAgICAgXCAgICBjYWxsIE5ld0JCVGVtcGxhdGUoKSB8CisgICAgICAgICAgICAgICAgXCBlbmRpZgorYXVncm91cCBFTkQKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0gYi9iaXRiYWtlL2NvbnRyaWIvdmltL3N5bnRheC9iaXRiYWtlLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjU1ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9jb250cmliL3ZpbS9zeW50YXgvYml0YmFrZS52aW0KQEAgLTAsMCArMSwxMjYgQEAKKyIgVmltIHN5bnRheCBmaWxlCisiIExhbmd1YWdlOiAgICAgQml0QmFrZSBiYi9iYmNsYXNzZXMvaW5jCisiIEF1dGhvcjogICAgICAgQ2hyaXMgTGFyc29uIDxrZXJnb3RoQGhhbmRoZWxkcy5vcmc+CisiICAgICAgICAgICAgICAgUmljYXJkbyBTYWx2ZXRpIDxyc2FsdmV0aUByc2FsdmV0aS5uZXQ+CisiIENvcHlyaWdodDogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBDaHJpcyBMYXJzb24gPGtlcmdvdGhAaGFuZGhlbGRzLm9yZz4KKyIgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggIFJpY2FyZG8gU2FsdmV0aSA8cnNhbHZldGlAcnNhbHZldGkubmV0PgorIgorIiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgaW4KKyIgdGhpcyBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciB0aGUgdGVybXMuCisiCisiIFN5bnRheCBoaWdobGlnaHRpbmcgZm9yIGJiLCBiYmNsYXNzZXMgYW5kIGluYyBmaWxlcy4KKyIKKyIgSXQncyBhbiBlbnRpcmVseSBuZXcgdHlwZSwganVzdCBoYXMgc3BlY2lmaWMgc3ludGF4IGluIHNoZWxsIGFuZCBweXRob24gY29kZQorCitpZiAmY29tcGF0aWJsZSB8fCB2OnZlcnNpb24gPCA2MDAKKyAgICBmaW5pc2gKK2VuZGlmCitpZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQorICAgIGZpbmlzaAorZW5kaWYKKworc3luIGluY2x1ZGUgQHB5dGhvbiBzeW50YXgvcHl0aG9uLnZpbQoraWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKKyAgdW5sZXQgYjpjdXJyZW50X3N5bnRheAorZW5kaWYKKworIiBCaXRCYWtlIHN5bnRheAorCisiIE1hdGNoaW5nIGNhc2UKK3N5biBjYXNlIG1hdGNoCisKKyIgSW5kaWNhdGVzIHRoZSBlcnJvciB3aGVuIG5vdGhpbmcgaXMgbWF0Y2hlZAorc3luIG1hdGNoIGJiVW5tYXRjaGVkICAgICAgICAgICAiLiIKKworIiBDb21tZW50cworc3luIGNsdXN0ZXIgYmJDb21tZW50R3JvdXAgICAgICBjb250YWlucz1iYlRvZG8sQFNwZWxsCitzeW4ga2V5d29yZCBiYlRvZG8gICAgICAgICAgICAgIENPTUJBSyBGSVhNRSBUT0RPIFhYWCBjb250YWluZWQKK3N5biBtYXRjaCBiYkNvbW1lbnQgICAgICAgICAgICAgIiMuKiQiIGNvbnRhaW5zPUBiYkNvbW1lbnRHcm91cAorCisiIFN0cmluZyBoZWxwZXJzCitzeW4gbWF0Y2ggYmJRdW90ZSAgICAgICAgICAgICAgICtbJyJdKyBjb250YWluZWQgCitzeW4gbWF0Y2ggYmJEZWxpbWl0ZXIgICAgICAgICAgICJbKCl7fT1dIiBjb250YWluZWQKK3N5biBtYXRjaCBiYkFycmF5QnJhY2tldHMgICAgICAgIltcW1xdXSIgY29udGFpbmVkCisKKyIgQml0QmFrZSBzdHJpbmdzCitzeW4gbWF0Y2ggYmJDb250aW51ZSAgICAgICAgICAgICJcXCQiCitzeW4gcmVnaW9uIGJiU3RyaW5nICAgICAgICAgICAgIG1hdGNoZ3JvdXA9YmJRdW90ZSBzdGFydD0rIisgc2tpcD0rXFwkKyBlbmQ9KyIrIGNvbnRhaW5lZCBjb250YWlucz1iYlRvZG8sYmJDb250aW51ZSxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZSxAU3BlbGwKK3N5biByZWdpb24gYmJTdHJpbmcgICAgICAgICAgICAgbWF0Y2hncm91cD1iYlF1b3RlIHN0YXJ0PSsnKyBza2lwPStcXCQrIGVuZD0rJysgY29udGFpbmVkIGNvbnRhaW5zPWJiVG9kbyxiYkNvbnRpbnVlLGJiVmFyRGVyZWYsYmJWYXJQeVZhbHVlLEBTcGVsbAorCisiIFZhcnMgZGVmaW5pdGlvbgorc3luIG1hdGNoIGJiRXhwb3J0ICAgICAgICAgICAgIl5leHBvcnQiIG5leHRncm91cD1iYklkZW50aWZpZXIgc2tpcHdoaXRlCitzeW4ga2V5d29yZCBiYkV4cG9ydEZsYWcgICAgICAgIGV4cG9ydCBjb250YWluZWQgbmV4dGdyb3VwPWJiSWRlbnRpZmllciBza2lwd2hpdGUKK3N5biBtYXRjaCBiYklkZW50aWZpZXIgICAgICAgICAgIlthLXpBLVowLTlcLV9cLlwvXCtdXCsiIGRpc3BsYXkgY29udGFpbmVkCitzeW4gbWF0Y2ggYmJWYXJEZXJlZiAgICAgICAgICAgICIke1thLXpBLVowLTlcLV9cLlwvXCtdXCt9IiBjb250YWluZWQKK3N5biBtYXRjaCBiYlZhckVxICAgICAgICAgICAgICAgIlwoOj1cfCs9XHw9K1x8XC49XHw9XC5cfD89XHw/Pz1cfD1cKSIgY29udGFpbmVkIG5leHRncm91cD1iYlZhclZhbHVlCitzeW4gbWF0Y2ggYmJWYXJEZWYgICAgICAgICAgICAgICJeXChleHBvcnRccypcKVw/XChbYS16QS1aMC05XC1fXC5cL1wrXVwrXChfWyR7fWEtekEtWjAtOVwtX1wuXC9cK11cK1wpXD9cKVxzKlwoOj1cfCs9XHw9K1x8XC49XHw9XC5cfD89XHw/Pz1cfD1cKVxAPSIgY29udGFpbnM9YmJFeHBvcnRGbGFnLGJiSWRlbnRpZmllcixiYlZhckRlcmVmIG5leHRncm91cD1iYlZhckVxCitzeW4gbWF0Y2ggYmJWYXJWYWx1ZSAgICAgICAgICAgICIuKiQiIGNvbnRhaW5lZCBjb250YWlucz1iYlN0cmluZyxiYlZhckRlcmVmLGJiVmFyUHlWYWx1ZQorc3luIHJlZ2lvbiBiYlZhclB5VmFsdWUgICAgICAgICBzdGFydD0rJHtAKyBza2lwPStcXCQrIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBWYXJzIG1ldGFkYXRhIGZsYWdzCitzeW4gbWF0Y2ggYmJWYXJGbGFnRGVmICAgICAgICAgICJeXChbYS16QS1aMC05XC1fXC5dXCtcKVwoXFtbYS16QS1aMC05XC1fXC5dXCtcXVwpXEA9IiBjb250YWlucz1iYklkZW50aWZpZXIgbmV4dGdyb3VwPWJiVmFyRmxhZ0ZsYWcKK3N5biByZWdpb24gYmJWYXJGbGFnRmxhZyAgICAgICAgbWF0Y2hncm91cD1iYkFycmF5QnJhY2tldHMgc3RhcnQ9IlxbIiBlbmQ9IlxdXHMqXCg9XHwrPVx8PStcfD89XClcQD0iIGNvbnRhaW5lZCBjb250YWlucz1iYklkZW50aWZpZXIgbmV4dGdyb3VwPWJiVmFyRXEKKworIiBJbmNsdWRlcyBhbmQgcmVxdWlyZXMKK3N5biBrZXl3b3JkIGJiSW5jbHVkZSAgICAgICAgICAgaW5oZXJpdCBpbmNsdWRlIHJlcXVpcmUgY29udGFpbmVkIAorc3luIG1hdGNoIGJiSW5jbHVkZVJlc3QgICAgICAgICAiLiokIiBjb250YWluZWQgY29udGFpbnM9YmJTdHJpbmcsYmJWYXJEZXJlZgorc3luIG1hdGNoIGJiSW5jbHVkZUxpbmUgICAgICAgICAiXlwoaW5oZXJpdFx8aW5jbHVkZVx8cmVxdWlyZVwpXHNcKyIgY29udGFpbnM9YmJJbmNsdWRlIG5leHRncm91cD1iYkluY2x1ZGVSZXN0CisKKyIgQWRkIHRha3MgYW5kIHNpbWlsYXIKK3N5biBrZXl3b3JkIGJiU3RhdGVtZW50ICAgICAgICAgYWRkdGFzayBhZGRoYW5kbGVyIGFmdGVyIGJlZm9yZSBFWFBPUlRfRlVOQ1RJT05TIGNvbnRhaW5lZAorc3luIG1hdGNoIGJiU3RhdGVtZW50UmVzdCAgICAgICAiLiokIiBza2lwd2hpdGUgY29udGFpbmVkIGNvbnRhaW5zPWJiU3RhdGVtZW50CitzeW4gbWF0Y2ggYmJTdGF0ZW1lbnRMaW5lICAgICAgICJeXChhZGR0YXNrXHxhZGRoYW5kbGVyXHxhZnRlclx8YmVmb3JlXHxFWFBPUlRfRlVOQ1RJT05TXClcc1wrIiBjb250YWlucz1iYlN0YXRlbWVudCBuZXh0Z3JvdXA9YmJTdGF0ZW1lbnRSZXN0CisKKyIgT0UgSW1wb3J0YW50IEZ1bmN0aW9ucworc3luIGtleXdvcmQgYmJPRUZ1bmN0aW9ucyAgICAgICBkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2ggZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9fc3RhZ2UgZG9faW5zdGFsbCBkb19wYWNrYWdlIGNvbnRhaW5lZAorCisiIEdlbmVyaWMgRnVuY3Rpb25zCitzeW4gbWF0Y2ggYmJGdW5jdGlvbiAgICAgICAgICAgICJcaFswLTlBLVphLXpfLV0qIiBkaXNwbGF5IGNvbnRhaW5lZCBjb250YWlucz1iYk9FRnVuY3Rpb25zCisKKyIgQml0QmFrZSBzaGVsbCBtZXRhZGF0YQorc3luIGluY2x1ZGUgQHNoZWxsIHN5bnRheC9zaC52aW0KK2lmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCisgIHVubGV0IGI6Y3VycmVudF9zeW50YXgKK2VuZGlmCitzeW4ga2V5d29yZCBiYlNoRmFrZVJvb3RGbGFnICAgIGZha2Vyb290IGNvbnRhaW5lZAorc3luIG1hdGNoIGJiU2hGdW5jRGVmICAgICAgICAgICAiXlwoZmFrZXJvb3RccypcKVw/XChbMC05QS1aYS16XyR7fS1dXCtcKVwocHl0aG9uXClcQDwhXChccyooKVxzKlwpXCh7XClcQD0iIGNvbnRhaW5zPWJiU2hGYWtlUm9vdEZsYWcsYmJGdW5jdGlvbixiYlZhckRlcmVmLGJiRGVsaW1pdGVyIG5leHRncm91cD1iYlNoRnVuY1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gYmJTaEZ1bmNSZWdpb24gICAgICAgbWF0Y2hncm91cD1iYkRlbGltaXRlciBzdGFydD0ie1xzKiQiIGVuZD0iXn1ccyokIiBjb250YWluZWQgY29udGFpbnM9QHNoZWxsCisKKyIgUHl0aG9uIHZhbHVlIGluc2lkZSBzaGVsbCBmdW5jdGlvbnMKK3N5biByZWdpb24gc2hEZXJlZiAgICAgICAgIHN0YXJ0PSske0ArIHNraXA9K1xcJCsgZXhjbHVkZW5sIGVuZD0rfSsgY29udGFpbmVkIGNvbnRhaW5zPUBweXRob24KKworIiBCaXRCYWtlIHB5dGhvbiBtZXRhZGF0YQorc3luIGtleXdvcmQgYmJQeUZsYWcgICAgICAgICAgICBweXRob24gY29udGFpbmVkCitzeW4gbWF0Y2ggYmJQeUZ1bmNEZWYgICAgICAgICAgICJeXChweXRob25cc1wrXClcKFswLTlBLVphLXpfJHt9LV1cK1wpXD9cKFxzKigpXHMqXClcKHtcKVxAPSIgY29udGFpbnM9YmJQeUZsYWcsYmJGdW5jdGlvbixiYlZhckRlcmVmLGJiRGVsaW1pdGVyIG5leHRncm91cD1iYlB5RnVuY1JlZ2lvbiBza2lwd2hpdGUKK3N5biByZWdpb24gYmJQeUZ1bmNSZWdpb24gICAgICAgbWF0Y2hncm91cD1iYkRlbGltaXRlciBzdGFydD0ie1xzKiQiIGVuZD0iXn1ccyokIiBjb250YWluZWQgY29udGFpbnM9QHB5dGhvbgorCisiIEJpdEJha2UgJ2RlZidkIHB5dGhvbiBmdW5jdGlvbnMKK3N5biBrZXl3b3JkIGJiUHlEZWYgICAgICAgICAgICAgZGVmIGNvbnRhaW5lZAorc3luIHJlZ2lvbiBiYlB5RGVmUmVnaW9uICAgICAgICBzdGFydD0nXlwoZGVmXHNcK1wpXChbMC05QS1aYS16Xy1dXCtcKVwoXHMqKC4qKVxzKlwpOlxzKiQnIGVuZD0nXlwoXHNcfCRcKVxAIScgY29udGFpbnM9QHB5dGhvbgorCisiIEhpZ2hsaWdodGluZyBEZWZpbml0aW9ucworaGkgZGVmIGxpbmsgYmJVbm1hdGNoZWQgICAgICAgICBFcnJvcgoraGkgZGVmIGxpbmsgYmJJbmNsdWRlICAgICAgICAgICBJbmNsdWRlCitoaSBkZWYgbGluayBiYlRvZG8gICAgICAgICAgICAgIFRvZG8KK2hpIGRlZiBsaW5rIGJiQ29tbWVudCAgICAgICAgICAgQ29tbWVudAoraGkgZGVmIGxpbmsgYmJRdW90ZSAgICAgICAgICAgICBTdHJpbmcKK2hpIGRlZiBsaW5rIGJiU3RyaW5nICAgICAgICAgICAgU3RyaW5nCitoaSBkZWYgbGluayBiYkRlbGltaXRlciAgICAgICAgIEtleXdvcmQKK2hpIGRlZiBsaW5rIGJiQXJyYXlCcmFja2V0cyAgICAgU3RhdGVtZW50CitoaSBkZWYgbGluayBiYkNvbnRpbnVlICAgICAgICAgIFNwZWNpYWwKK2hpIGRlZiBsaW5rIGJiRXhwb3J0ICAgICAgICAgICAgVHlwZQoraGkgZGVmIGxpbmsgYmJFeHBvcnRGbGFnICAgICAgICBUeXBlCitoaSBkZWYgbGluayBiYklkZW50aWZpZXIJICAgIElkZW50aWZpZXIKK2hpIGRlZiBsaW5rIGJiVmFyRGVyZWYgICAgICAgICAgUHJlUHJvYworaGkgZGVmIGxpbmsgYmJWYXJEZWYgICAgICAgICAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYlZhclZhbHVlICAgICAgICAgIFN0cmluZworaGkgZGVmIGxpbmsgYmJTaEZha2VSb290RmxhZyAgICBUeXBlCitoaSBkZWYgbGluayBiYkZ1bmN0aW9uICAgICAgICAgIEZ1bmN0aW9uCitoaSBkZWYgbGluayBiYlB5RmxhZyAgICAgICAgICAgIFR5cGUKK2hpIGRlZiBsaW5rIGJiUHlEZWYgICAgICAgICAgICAgU3RhdGVtZW50CitoaSBkZWYgbGluayBiYlN0YXRlbWVudCAgICAgICAgIFN0YXRlbWVudAoraGkgZGVmIGxpbmsgYmJTdGF0ZW1lbnRSZXN0ICAgICBJZGVudGlmaWVyCitoaSBkZWYgbGluayBiYk9FRnVuY3Rpb25zICAgICAgIFNwZWNpYWwKK2hpIGRlZiBsaW5rIGJiVmFyUHlWYWx1ZSAgICAgICAgUHJlUHJvYworCitsZXQgYjpjdXJyZW50X3N5bnRheCA9ICJiYiIKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMIGIvYml0YmFrZS9kb2MvQ09QWUlORy5HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUIGIvYml0YmFrZS9kb2MvQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3ZDU3NAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IKK1RIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvTWFrZWZpbGUgYi9iaXRiYWtlL2RvYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzI4ZjRiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvTWFrZWZpbGUKQEAgLTAsMCArMSw5MSBAQAorIyBUaGlzIGlzIGEgc2luZ2xlIE1ha2VmaWxlIHRvIGhhbmRsZSBhbGwgZ2VuZXJhdGVkIEJpdEJha2UgZG9jdW1lbnRzLgorIyBUaGUgTWFrZWZpbGUgbmVlZHMgdG8gbGl2ZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkgYW5kIGFsbCBmaWd1cmVzIHVzZWQKKyMgaW4gYW55IG1hbnVhbHMgbXVzdCBiZSAuUE5HIGZpbGVzIGFuZCBsaXZlIGluIHRoZSBpbmRpdmlkdWFsIGJvb2sncyBmaWd1cmVzCisjIGRpcmVjdG9yeS4KKyMKKyMgVGhlIE1ha2VmaWxlIGhhcyB0aGVzZSB0YXJnZXRzOgorIworIyAgICBwZGY6ICAgICAgZ2VuZXJhdGVzIGEgUERGIHZlcnNpb24gb2YgYSBtYW51YWwuCisjICAgIGh0bWw6ICAgICBnZW5lcmF0ZXMgYW4gSFRNTCB2ZXJzaW9uIG9mIGEgbWFudWFsLgorIyAgICB0YXJiYWxsOiAgY3JlYXRlcyBhIHRhcmJhbGwgZm9yIHRoZSBkb2MgZmlsZXMuCisjICAgIHZhbGlkYXRlOiB2YWxpZGF0ZXMKKyMgICAgY2xlYW46ICAgIHJlbW92ZXMgZmlsZXMKKyMKKyMgVGhlIE1ha2VmaWxlIGdlbmVyYXRlcyBhbiBIVE1MIHZlcnNpb24gb2YgZXZlcnkgZG9jdW1lbnQuICBUaGUKKyMgdmFyaWFibGUgRE9DIGluZGljYXRlcyB0aGUgZm9sZGVyIG5hbWUgZm9yIGEgZ2l2ZW4gbWFudWFsLgorIworIyBUbyBidWlsZCBhIG1hbnVhbCwgeW91IG11c3QgaW52b2tlICdtYWtlJyB3aXRoIHRoZSBET0MgYXJndW1lbnQuCisjCisjIEV4YW1wbGVzOgorIworIyAgICAgbWFrZSBET0M9Yml0YmFrZS11c2VyLW1hbnVhbAorIyAgICAgbWFrZSBwZGYgRE9DPWJpdGJha2UtdXNlci1tYW51YWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIFVzZXIgTWFudWFsLgorIyBUaGUgc2Vjb25kIGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBQREYgdmVyc2lvbiBvZiB0aGUgVXNlciBNYW51YWwuCisjCisKK2lmZXEgKCQoRE9DKSxiaXRiYWtlLXVzZXItbWFudWFsKQorWFNMVE9QVFMgPSAtLXN0cmluZ3BhcmFtIGh0bWwuc3R5bGVzaGVldCBiaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcyBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGNoYXB0ZXIuYXV0b2xhYmVsIDEgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAgIC0teGluY2x1ZGUKK0FMTFBSRVEgPSBodG1sIHRhcmJhbGwKK1RBUkZJTEVTID0gYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MgYml0YmFrZS11c2VyLW1hbnVhbC5odG1sIGZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCisKK2VuZGlmCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSSSAgPSBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudAorWFNMX1hIVE1MX1VSSSA9ICQoWFNMX0JBU0VfVVJJKS94aHRtbC9kb2Nib29rLnhzbAorCithbGw6ICQoQUxMUFJFUSkKKworcGRmOgoraWZlcSAoJChET0MpLGJpdGJha2UtdXNlci1tYW51YWwpCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqKiogQnVpbGRpbmcuIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgLi4vdG9vbHMvZG9jYm9vay10by1wZGYgJChET0MpLnhtbCAuLi90ZW1wbGF0ZTsgY2QgLi4KK2VuZGlmCisKK2h0bWw6CitpZmVxICgkKERPQyksYml0YmFrZS11c2VyLW1hbnVhbCkKKyMgICAgICAgU2VlIGh0dHA6Ly93d3cuc2FnZWhpbGwubmV0L2RvY2Jvb2t4c2wvSHRtbE91dHB1dC5odG1sCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIEJ1aWxkaW5nICIkKERPQykKKwlAZWNobyAiICIKKwljZCAkKERPQyk7IHhzbHRwcm9jICQoWFNMVE9QVFMpIC1vICQoRE9DKS5odG1sICQoRE9DKS1jdXN0b21pemF0aW9uLnhzbCAkKERPQykueG1sOyBjZCAuLgorZW5kaWYKKwordGFyYmFsbDogaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDcmVhdGluZyBUYXJiYWxsIG9mIGRvY3VtZW50IGZpbGVzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgdGFyIC1jdnpmICQoRE9DKS50Z3ogJChUQVJGSUxFUyk7IGNkIC4uCisKK3ZhbGlkYXRlOgorCWNkICQoRE9DKTsgeG1sbGludCAtLXBvc3R2YWxpZCAtLXhpbmNsdWRlIC0tbm9vdXQgJChET0MpLnhtbDsgY2QgLi4KKworcHVibGlzaDoKKwlAaWYgdGVzdCAtZiAkKERPQykvJChET0MpLmh0bWw7IFwKKwkgIHRoZW4gXAorICAgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICAgIGVjaG8gIioqKioqKioqIFB1Ymxpc2hpbmcgIiQoRE9DKSIuaHRtbCI7IFwKKyAgICAgICAgICAgIGVjaG8gIiAiOyBcCisgICAgICAgICAgICBzY3AgLXIgJChNQU5VQUxTKSAkKFNUWUxFU0hFRVQpIGRvY3MueXA6L3Zhci93d3cvd3d3LnlvY3RvcHJvamVjdC5vcmctZG9jcy8kKFZFUikvJChET0MpOyBcCisgICAgICAgICAgICBjZCAkKERPQyk7IHNjcCAtciAkKEZJR1VSRVMpIGRvY3MueXA6L3Zhci93d3cvd3d3LnlvY3RvcHJvamVjdC5vcmctZG9jcy8kKFZFUikvJChET0MpOyBcCisJZWxzZSBcCisgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICBlY2hvICQoRE9DKSIuaHRtbCBtaXNzaW5nLiAgR2VuZXJhdGUgdGhlIGZpbGUgZmlyc3QgdGhlbiB0cnkgYWdhaW4uIjsgXAorICAgICAgICAgIGVjaG8gIiAiOyBcCisJZmkKKworY2xlYW46CisJcm0gLXJmICQoTUFOVUFMUyk7IHJtICQoRE9DKS8kKERPQykudGd6OwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvUkVBRE1FIGIvYml0YmFrZS9kb2MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwM2NmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy9SRUFETUUKQEAgLTAsMCArMSwzOSBAQAorRG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgQml0QmFrZSBkb2N1bWVudGF0aW9uLiAKKworTWFudWFsIE9yZ2FuaXphdGlvbgorPT09PT09PT09PT09PT09PT09PQorCitGb2xkZXJzIGV4aXN0IGZvciBpbmRpdmlkdWFsIG1hbnVhbHMgYXMgZm9sbG93czoKKworKiBiaXRiYWtlLXVzZXItbWFudWFsICAgICAgLSBUaGUgQml0QmFrZSBVc2VyIE1hbnVhbCAKKworRWFjaCBmb2xkZXIgaXMgc2VsZi1jb250YWluZWQgcmVnYXJkaW5nIGNvbnRlbnQgYW5kIGZpZ3VyZXMuCisKK0lmIHlvdSB3YW50IHRvIGZpbmQgSFRNTCB2ZXJzaW9ucyBvZiB0aGUgQml0QmFrZSBtYW51YWxzIG9uIHRoZSB3ZWIsIAorZ28gdG8gaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi4gCisKK01ha2VmaWxlCis9PT09PT09PQorCitUaGUgTWFrZWZpbGUgcHJvY2Vzc2VzIG1hbnVhbCBkaXJlY3RvcmllcyB0byBjcmVhdGUgSFRNTCwgUERGLAordGFyYmFsbHMsIGV0Yy4gIERldGFpbHMgb24gaG93IHRoZSBNYWtlZmlsZSB3b3JrIGFyZSBkb2N1bWVudGVkCitpbnNpZGUgdGhlIE1ha2VmaWxlLiAgU2VlIHRoYXQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBydW4gdGhlIG1ha2UgY29tbWFuZCBhbmQgcGFzcyBpdCB0aGUgbmFtZQorb2YgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBtYW51YWwncyBjb250ZW50cy4gCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1biBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSAKK2NyZWF0ZXMgYW4gSFRNTCBhbmQgYSBQREYgdmVyc2lvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KK1RoZSBET0MgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBtYW51YWwgeW91IGFyZSBtYWtpbmc6CisKKyAgICAgJCBtYWtlIERPQz1iaXRiYWtlLXVzZXItbWFudWFsCisKK3RlbXBsYXRlCis9PT09PT09PQorQ29udGFpbnMgdmFyaW91cyB0ZW1wbGF0ZXMsIGZvbnRzLCBhbmQgc29tZSBvbGQgUE5HIGZpbGVzLgorCit0b29scworPT09PT0KK0NvbnRhaW5zIGEgdG9vbCB0byBjb252ZXJ0IHRoZSBEb2NCb29rIGZpbGVzIHRvIFBERiBmb3JtYXQuCmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4NWVhNwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wiLz4KKworICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSIndXNlci1tYW51YWwtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKworPCEtLSAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+ICAtLT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWV4ZWN1dGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1MmUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1leGVjdXRpb24ueG1sCkBAIC0wLDAgKzEsOTEyIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIj4KKworPGNoYXB0ZXIgaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uIj4KKyAgICA8dGl0bGU+RXhlY3V0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcHJpbWFyeSBwdXJwb3NlIGZvciBydW5uaW5nIEJpdEJha2UgaXMgdG8gcHJvZHVjZSBzb21lIGtpbmQKKyAgICAgICAgb2Ygb3V0cHV0IHN1Y2ggYXMgYSBzaW5nbGUgaW5zdGFsbGFibGUgcGFja2FnZSwgYSBrZXJuZWwsIGEgc29mdHdhcmUKKyAgICAgICAgZGV2ZWxvcG1lbnQga2l0LCBvciBldmVuIGEgZnVsbCwgYm9hcmQtc3BlY2lmaWMgYm9vdGFibGUgTGludXggaW1hZ2UsCisgICAgICAgIGNvbXBsZXRlIHdpdGggYm9vdGxvYWRlciwga2VybmVsLCBhbmQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICBPZiBjb3Vyc2UsIHlvdSBjYW4gZXhlY3V0ZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICBjb21tYW5kIHdpdGggb3B0aW9ucyB0aGF0IGNhdXNlIGl0IHRvIGV4ZWN1dGUgc2luZ2xlIHRhc2tzLAorICAgICAgICBjb21waWxlIHNpbmdsZSByZWNpcGUgZmlsZXMsIGNhcHR1cmUgb3IgY2xlYXIgZGF0YSwgb3Igc2ltcGx5CisgICAgICAgIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIEJpdEJha2UncyBleGVjdXRpb24gcHJvY2VzcyBmcm9tIHN0YXJ0CisgICAgICAgIHRvIGZpbmlzaCB3aGVuIHlvdSB1c2UgaXQgdG8gY3JlYXRlIGFuIGltYWdlLgorICAgICAgICBUaGUgZXhlY3V0aW9uIHByb2Nlc3MgaXMgbGF1bmNoZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kCisgICAgICAgIGZvcm06CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSBjb21tYW5kIGFuZCBpdHMgb3B0aW9ucywKKyAgICAgICAgc2VlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdiaXRiYWtlLXVzZXItbWFudWFsLWNvbW1hbmQnPlRoZSBCaXRCYWtlIENvbW1hbmQ8L2xpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGV4ZWN1dGluZyBCaXRCYWtlLCB5b3Ugc2hvdWxkIHRha2UgYWR2YW50YWdlIG9mIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgIHBhcmFsbGVsIHRocmVhZCBleGVjdXRpb24gb24geW91ciBidWlsZCBob3N0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIHByb2plY3QncyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGNvbW1vbiBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUgZm9yIHlvdXIgYnVpbGQgaG9zdCBpcyB0byBydW4KKyAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBncmVwIHByb2Nlc3NvciAvcHJvYy9jcHVpbmZvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycywgd2hpY2ggdGFrZXMgaW50byAKKyAgICAgICAgICAgICAgICBhY2NvdW50IGh5cGVyLXRocmVhZGluZy4gCisgICAgICAgICAgICAgICAgVGh1cywgYSBxdWFkLWNvcmUgYnVpbGQgaG9zdCB3aXRoIGh5cGVyLXRocmVhZGluZyBtb3N0IGxpa2VseSAKKyAgICAgICAgICAgICAgICBzaG93cyBlaWdodCBwcm9jZXNzb3JzLCB3aGljaCBpcyB0aGUgdmFsdWUgeW91IHdvdWxkIHRoZW4gYXNzaWduIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgcG9zc2libHkgc2ltcGxlciBzb2x1dGlvbiBpcyB0aGF0IHNvbWUgTGludXggZGlzdHJpYnV0aW9ucworICAgICAgICAgICAgICAgIChlLmcuIERlYmlhbiBhbmQgVWJ1bnR1KSBwcm92aWRlIHRoZSA8ZmlsZW5hbWU+bmNwdXM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3BhcnNpbmctdGhlLWJhc2UtY29uZmlndXJhdGlvbi1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5QYXJzaW5nIHRoZSBCYXNlIENvbmZpZ3VyYXRpb24gTWV0YWRhdGE8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIEJpdEJha2UgZG9lcyBpcyBwYXJzZSBiYXNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIG1ldGFkYXRhLgorICAgICAgICAgICAgQmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGNvbnNpc3RzIG9mIHlvdXIgcHJvamVjdCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gZGV0ZXJtaW5lIHdoYXQKKyAgICAgICAgICAgIGxheWVycyBCaXRCYWtlIG5lZWRzIHRvIHJlY29nbml6ZSwgYWxsIG5lY2Vzc2FyeQorICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyAob25lIGZyb20gZWFjaCBsYXllciksCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIGRhdGEgaXRzZWxmIGlzIG9mIHZhcmlvdXMgdHlwZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEZXRhaWxzIGFib3V0IHBhcnRpY3VsYXIgcGllY2VzIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNsYXNzIERhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQW4gYWJzdHJhY3Rpb24gb2YgY29tbW9uIGJ1aWxkIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIChlLmcuIGhvdyB0byBidWlsZCBhIExpbnV4IGtlcm5lbCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJhdGlvbiBEYXRhOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1hY2hpbmUtc3BlY2lmaWMgc2V0dGluZ3MsIHBvbGljeSBkZWNpc2lvbnMsCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBkYXRhIGFjdHMgYXMgdGhlIGdsdWUgdG8gYmluZCBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGVzIGFyZSB1c2VkIHRvCisgICAgICAgICAgICBjb25zdHJ1Y3Qga2V5IHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz48ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpcyB1c2VkIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGNsYXNzIGZpbGVzIHVuZGVyIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3JpZXMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gaXMgdXNlZCB0byBsb2NhdGUgYm90aCByZWNpcGUKKyAgICAgICAgICAgIGFuZCByZWNpcGUgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgSWYgdGhlcmUgaXMgbm8gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0aGUgdXNlciBoYXMgc2V0IHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTmV4dCwgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdGhhdCB3YXMKKyAgICAgICAgICAgIGp1c3QgY29uc3RydWN0ZWQuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUgbWF5IGFsc28gaW5jbHVkZSBvdGhlcgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gZGlyZWN0aXZlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJpb3IgdG8gcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRiYWtlIGxvb2tzCisgICAgICAgICAgICBhdCBjZXJ0YWluIHZhcmlhYmxlcywgaW5jbHVkaW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9QUkVTRVJWRV9FTlYnPjxmaWxlbmFtZT5CQl9QUkVTRVJWRV9FTlY8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSVRCQUtFX1VJJz48ZmlsZW5hbWU+QklUQkFLRV9VSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXNzIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnRvIHRoZSBCaXRCYWtlCisgICAgICAgICAgICBleGVjdXRpb24gZW52aXJvbm1lbnQgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFzc2luZy1pbmZvcm1hdGlvbi1pbnRvLXRoZS1idWlsZC10YXNrLWVudmlyb25tZW50Jz5QYXNzaW5nIEluZm9ybWF0aW9uIEludG8gdGhlIEJ1aWxkIFRhc2sgRW52aXJvbm1lbnQ8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgYmFzZSBjb25maWd1cmF0aW9uIG1ldGFkYXRhIGlzIGdsb2JhbAorICAgICAgICAgICAgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIGFsbCByZWNpcGVzIGFuZCB0YXNrcyB0aGF0IGFyZSBleGVjdXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBmaXJzdCBzZWFyY2hlcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgYW4KKyAgICAgICAgICAgIG9wdGlvbmFsIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdGhhdCBpcyBhIHNwYWNlLWRlbGltaXRlZCBsaXN0IG9mICdsYXllcicgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBSZWNhbGwgdGhhdCBpZiBCaXRCYWtlIGNhbm5vdCBmaW5kIGEgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoZSB1c2VyIGhhcyBzZXQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gdmFyaWFibGVzIGRpcmVjdGx5IGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGVhY2ggZGlyZWN0b3J5IChsYXllcikgaW4gdGhpcyBsaXN0LCBhIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSBpcyBsb2NhdGVkIGFuZCBwYXJzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRJUic+PGZpbGVuYW1lPkxBWUVSRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBiZWluZyBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbGF5ZXIgd2FzIGZvdW5kLgorICAgICAgICAgICAgVGhlIGlkZWEgaXMgdGhlc2UgZmlsZXMgYXV0b21hdGljYWxseSBzZXQgdXAKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBvdGhlciB2YXJpYWJsZXMgY29ycmVjdGx5IGZvciBhIGdpdmVuIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB0aGVuIGV4cGVjdHMgdG8gZmluZCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgc29tZXdoZXJlIGluIHRoZSB1c2VyLXNwZWNpZmllZCA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBnZW5lcmFsbHkgaGFzIGluY2x1ZGUgZGlyZWN0aXZlcyB0byBwdWxsCisgICAgICAgICAgICBpbiBhbnkgb3RoZXIgbWV0YWRhdGEgc3VjaCBhcyBmaWxlcyBzcGVjaWZpYyB0byB0aGUgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICAgdGhlIG1hY2hpbmUsIHRoZSBsb2NhbCBlbnZpcm9ubWVudCwgYW5kIHNvIGZvcnRoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmx5IHZhcmlhYmxlIGRlZmluaXRpb25zIGFuZCBpbmNsdWRlIGRpcmVjdGl2ZXMgYXJlIGFsbG93ZWQKKyAgICAgICAgICAgIGluIEJpdEJha2UgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBTb21lIHZhcmlhYmxlcyBkaXJlY3RseSBpbmZsdWVuY2UgQml0QmFrZSdzIGJlaGF2aW9yLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIG1pZ2h0IGhhdmUgYmVlbiBzZXQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByZXZpb3VzbHkKKyAgICAgICAgICAgIG1lbnRpb25lZCBvciBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz4iCisgICAgICAgICAgICBjaGFwdGVyIHByZXNlbnRzIGEgZnVsbCBsaXN0IG9mIHZhcmlhYmxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgcGFyc2luZyBjb25maWd1cmF0aW9uIGZpbGVzLCBCaXRCYWtlIHVzZXMgaXRzIHJ1ZGltZW50YXJ5CisgICAgICAgICAgICBpbmhlcml0YW5jZSBtZWNoYW5pc20sIHdoaWNoIGlzIHRocm91Z2ggY2xhc3MgZmlsZXMsIHRvIGluaGVyaXQKKyAgICAgICAgICAgIHNvbWUgc3RhbmRhcmQgY2xhc3Nlcy4KKyAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIGEgY2xhc3Mgd2hlbiB0aGUgaW5oZXJpdCBkaXJlY3RpdmUgcmVzcG9uc2libGUKKyAgICAgICAgICAgIGZvciBnZXR0aW5nIHRoYXQgY2xhc3MgaXMgZW5jb3VudGVyZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQuCisgICAgICAgICAgICBPdGhlciBjbGFzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUJz48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYXJlIGFsc28gaW5jbHVkZWQuCisgICAgICAgICAgICBCaXRCYWtlIHNlYXJjaGVzIGZvciBjbGFzcyBmaWxlcyBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgdGhlIHBhdGhzIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgZ29vZCB3YXkgdG8gZ2V0IGFuIGlkZWEgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kCisgICAgICAgICAgICB0aGUgY2xhc3MgZmlsZXMgdXNlZCBpbiB5b3VyIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyB0bworICAgICAgICAgICAgcnVuIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUgPiBteWJiLmxvZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRXhhbWluaW5nIHRoZSB0b3Agb2YgdGhlIDxmaWxlbmFtZT5teWJiLmxvZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBzaG93cyB5b3UgdGhlIG1hbnkgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgIHVzZWQgaW4geW91ciBleGVjdXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGJlIGF3YXJlIG9mIGhvdyBCaXRCYWtlIHBhcnNlcyBjdXJseSBicmFjZXMuCisgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyBhIGNsb3NpbmcgY3VybHkgYnJhY2Ugd2l0aGluIHRoZSBmdW5jdGlvbiBhbmQKKyAgICAgICAgICAgICAgICB0aGUgY2hhcmFjdGVyIGhhcyBubyBsZWFkaW5nIHNwYWNlcywgQml0QmFrZSBwcm9kdWNlcyBhIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBlcnJvci4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGEgcGFpciBvZiBjdXJseSBicmFjZXMgaW4gYSBzaGVsbCBmdW5jdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgY2xvc2luZyBjdXJseSBicmFjZSBtdXN0IG5vdCBiZSBsb2NhdGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZQorICAgICAgICAgICAgICAgIHdpdGhvdXQgbGVhZGluZyBzcGFjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNhdXNlcyBCaXRCYWtlIHRvIHByb2R1Y2UgYSBwYXJzaW5nCisgICAgICAgICAgICAgICAgZXJyb3I6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKyAgICAgICAgIGNhdCAmbHQ7Jmx0OyAiRU9GIiAmZ3Q7ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKyAgICAgdXNhZ2UoKQorICAgICB7CisgICAgICAgZWNobyAidGVzdCIKKyAgICAgICAjIyMjIyMgVGhlIGZvbGxvd2luZyAifSIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGNhdXNlcyBhIHBhcnNpbmcgZXJyb3IgIyMjIyMjCisgICAgIH0KKyAgICAgRU9GCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV3JpdGluZyB0aGUgcmVjaXBlIHRoaXMgd2F5IGF2b2lkcyB0aGUgZXJyb3I6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKyAgICAgICAgIGNhdCAmbHQ7Jmx0OyAiRU9GIiAmZ3Q7ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKyAgICAgdXNhZ2UoKQorICAgICB7CisgICAgICAgZWNobyAidGVzdCIKKyAgICAgICAjIyMjIyNUaGUgZm9sbG93aW5nICJ9IiB3aXRoIGEgbGVhZGluZyBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYXZvaWRzIHRoZSBlcnJvciAjIyMjIyMKKyAgICAgIH0KKyAgICAgRU9GCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctYW5kLXBhcnNpbmctcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5Mb2NhdGluZyBhbmQgUGFyc2luZyBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIER1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwaGFzZSwgQml0QmFrZSB3aWxsIGhhdmUgc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIG5vdyB1c2VzIGl0IHRvIGNvbnN0cnVjdCBhIGxpc3Qgb2YgcmVjaXBlcyB0byBwYXJzZSwKKyAgICAgICAgICAgIGFsb25nIHdpdGggYW55IGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgdG8gYXBwbHkuCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSBmaWxlcyBhbmQgc3VwcG9ydHMgd2lsZGNhcmRzLgorICAgICAgICAgICAgQW4gZXhhbXBsZSB3b3VsZCBiZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFUyA9ICIvcGF0aC90by9iYmZpbGVzLyouYmIgL3BhdGgvdG8vYXBwZW5kcy8qLmJiYXBwZW5kIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQml0QmFrZSBwYXJzZXMgZWFjaCByZWNpcGUgYW5kIGFwcGVuZCBmaWxlIGxvY2F0ZWQKKyAgICAgICAgICAgIHdpdGggPGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPiBhbmQgc3RvcmVzIHRoZSB2YWx1ZXMgb2YKKyAgICAgICAgICAgIHZhcmlvdXMgdmFyaWFibGVzIGludG8gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZW5jb3VudGVyZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgRm9yIGVhY2ggZmlsZSwgYSBmcmVzaCBjb3B5IG9mIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMKKyAgICAgICAgICAgIG1hZGUsIHRoZW4gdGhlIHJlY2lwZSBpcyBwYXJzZWQgbGluZSBieSBsaW5lLgorICAgICAgICAgICAgQW55IGluaGVyaXQgc3RhdGVtZW50cyBjYXVzZSBCaXRCYWtlIHRvIGZpbmQgYW5kCisgICAgICAgICAgICB0aGVuIHBhcnNlIGNsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHVzaW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhcyB0aGUgc2VhcmNoIHBhdGguCisgICAgICAgICAgICBGaW5hbGx5LCBCaXRCYWtlIHBhcnNlcyBpbiBvcmRlciBhbnkgYXBwZW5kIGZpbGVzIGZvdW5kIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgY29tbW9uIGNvbnZlbnRpb24gaXMgdG8gdXNlIHRoZSByZWNpcGUgZmlsZW5hbWUgdG8gZGVmaW5lCisgICAgICAgICAgICBwaWVjZXMgb2YgbWV0YWRhdGEuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IHRoZSByZWNpcGUKKyAgICAgICAgICAgIG5hbWUgYW5kIHZlcnNpb24gYXJlIHVzZWQgdG8gc2V0IHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKKyAgICAgUFYgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzFdIG9yICcxLjAnfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgYSByZWNpcGUgY2FsbGVkICJzb21ldGhpbmdfMS4yLjMuYmIiIHdvdWxkIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdG8gInNvbWV0aGluZyIgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB0byAiMS4yLjMiLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSB0aGUgdGltZSBwYXJzaW5nIGlzIGNvbXBsZXRlIGZvciBhIHJlY2lwZSwgQml0QmFrZQorICAgICAgICAgICAgaGFzIGEgbGlzdCBvZiB0YXNrcyB0aGF0IHRoZSByZWNpcGUgZGVmaW5lcyBhbmQgYSBzZXQgb2YKKyAgICAgICAgICAgIGRhdGEgY29uc2lzdGluZyBvZiBrZXlzIGFuZCB2YWx1ZXMgYXMgd2VsbCBhcworICAgICAgICAgICAgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFza3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgZG9lcyBub3QgbmVlZCBhbGwgb2YgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEl0IG9ubHkgbmVlZHMgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGluZm9ybWF0aW9uIHRvIG1ha2UKKyAgICAgICAgICAgIGRlY2lzaW9ucyBhYm91dCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBCaXRCYWtlIGNhY2hlcyB0aGUgdmFsdWVzIGluIHdoaWNoIGl0IGlzCisgICAgICAgICAgICBpbnRlcmVzdGVkIGFuZCBkb2VzIG5vdCBzdG9yZSB0aGUgcmVzdCBvZiB0aGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBFeHBlcmllbmNlIGhhcyBzaG93biBpdCBpcyBmYXN0ZXIgdG8gcmUtcGFyc2UgdGhlIG1ldGFkYXRhIHRoYW4gdG8KKyAgICAgICAgICAgIHRyeSBhbmQgd3JpdGUgaXQgb3V0IHRvIHRoZSBkaXNrIGFuZCB0aGVuIHJlbG9hZCBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlcmUgcG9zc2libGUsIHN1YnNlcXVlbnQgQml0QmFrZSBjb21tYW5kcyByZXVzZSB0aGlzIGNhY2hlIG9mCisgICAgICAgICAgICByZWNpcGUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBUaGUgdmFsaWRpdHkgb2YgdGhpcyBjYWNoZSBpcyBkZXRlcm1pbmVkIGJ5IGZpcnN0IGNvbXB1dGluZyBhCisgICAgICAgICAgICBjaGVja3N1bSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEgKHNlZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hDT05GSUdfV0hJVEVMSVNUJz48ZmlsZW5hbWU+QkJfSEFTSENPTkZJR19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICBhbmQgdGhlbiBjaGVja2luZyBpZiB0aGUgY2hlY2tzdW0gbWF0Y2hlcy4KKyAgICAgICAgICAgIElmIHRoYXQgY2hlY2tzdW0gbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBjYWNoZSBhbmQgdGhlIHJlY2lwZQorICAgICAgICAgICAgYW5kIGNsYXNzIGZpbGVzIGhhdmUgbm90IGNoYW5nZWQsIEJpdGJha2UgaXMgYWJsZSB0byB1c2UKKyAgICAgICAgICAgIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIEJpdEJha2UgdGhlbiByZWxvYWRzIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2lwZQorICAgICAgICAgICAgaW5zdGVhZCBvZiByZXBhcnNpbmcgaXQgZnJvbSBzY3JhdGNoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZWNpcGUgZmlsZSBjb2xsZWN0aW9ucyBleGlzdCB0byBhbGxvdyB0aGUgdXNlciB0bworICAgICAgICAgICAgaGF2ZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGV4YWN0IHBhY2thZ2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb25lIGNvdWxkIGVhc2lseSB1c2UgdGhlbSB0byBtYWtlIG9uZSdzCisgICAgICAgICAgICBvd24gbG9jYWwgY29weSBvZiBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LCBidXQgd2l0aAorICAgICAgICAgICAgY3VzdG9tIG1vZGlmaWNhdGlvbnMgdGhhdCBvbmUgZG9lcyBub3Qgd2FudCB1cHN0cmVhbS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBCQkZJTEVTID0gIi9zdHVmZi9vcGVuZW1iZWRkZWQvKi8qLmJiIC9zdHVmZi9vcGVuZW1iZWRkZWQubW9kaWZpZWQvKi8qLmJiIgorICAgIEJCRklMRV9DT0xMRUNUSU9OUyA9ICJ1cHN0cmVhbSBsb2NhbCIKKyAgICBCQkZJTEVfUEFUVEVSTl91cHN0cmVhbSA9ICJeL3N0dWZmL29wZW5lbWJlZGRlZC8iCisgICAgQkJGSUxFX1BBVFRFUk5fbG9jYWwgPSAiXi9zdHVmZi9vcGVuZW1iZWRkZWQubW9kaWZpZWQvIgorICAgIEJCRklMRV9QUklPUklUWV91cHN0cmVhbSA9ICI1IgorICAgIEJCRklMRV9QUklPUklUWV9sb2NhbCA9ICIxMCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBsYXllcnMgbWVjaGFuaXNtIGlzIG5vdyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiBjb2xsZWN0aW5nCisgICAgICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgY29sbGVjdGlvbnMgY29kZSByZW1haW5zLCBpdHMgbWFpbiB1c2UgaXMgdG8gc2V0IGxheWVyCisgICAgICAgICAgICAgICAgcHJpb3JpdGllcyBhbmQgdG8gZGVhbCB3aXRoIG92ZXJsYXAgKGNvbmZsaWN0cykgYmV0d2VlbiBsYXllcnMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1wcm92aWRlcnMnPgorICAgICAgICA8dGl0bGU+UHJvdmlkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzc3VtaW5nIEJpdEJha2UgaGFzIGJlZW4gaW5zdHJ1Y3RlZCB0byBleGVjdXRlIGEgdGFyZ2V0CisgICAgICAgICAgICBhbmQgdGhhdCBhbGwgdGhlIHJlY2lwZSBmaWxlcyBoYXZlIGJlZW4gcGFyc2VkLCBCaXRCYWtlCisgICAgICAgICAgICBzdGFydHMgdG8gZmlndXJlIG91dCBob3cgdG8gYnVpbGQgdGhlIHRhcmdldC4KKyAgICAgICAgICAgIEJpdEJha2UgbG9va3MgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gbGlzdAorICAgICAgICAgICAgZm9yIGVhY2ggb2YgdGhlIHJlY2lwZXMuCisgICAgICAgICAgICBBIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgaXMgdGhlIGxpc3Qgb2YgbmFtZXMgYnkgd2hpY2gKKyAgICAgICAgICAgIHRoZSByZWNpcGUgY2FuIGJlIGtub3duLgorICAgICAgICAgICAgRWFjaCByZWNpcGUncyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIGNyZWF0ZWQKKyAgICAgICAgICAgIGltcGxpY2l0bHkgdGhyb3VnaCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICBhbmQgZXhwbGljaXRseSB0aHJvdWdoIHRoZSByZWNpcGUncworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBvcHRpb25hbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGF0IHJlY2lwZSdzCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBmb3VuZCB1bmRlciBhbiBhbHRlcm5hdGl2ZSBuYW1lIG9yIG5hbWVzIG90aGVyCisgICAgICAgICAgICB0aGFuIHRoZSBpbXBsaWNpdCA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBuYW1lLgorICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSBhIHJlY2lwZSBuYW1lZCA8ZmlsZW5hbWU+a2V5Ym9hcmRfMS4wLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNvbnRhaW5lZCB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUk9WSURFUyArPSAiZnVsbGtleWJvYXJkIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgZm9yIHRoaXMgcmVjaXBlIGJlY29tZXMKKyAgICAgICAgICAgICJrZXlib2FyZCIsIHdoaWNoIGlzIGltcGxpY2l0LCBhbmQgImZ1bGxrZXlib2FyZCIsIHdoaWNoIGlzIGV4cGxpY2l0LgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgZnVuY3Rpb25hbGl0eSBmb3VuZCBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmtleWJvYXJkXzEuMC5iYjwvZmlsZW5hbWU+IGNhbiBiZSBmb3VuZCB1bmRlciB0d28KKyAgICAgICAgICAgIGRpZmZlcmVudCBuYW1lcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYi1iaXRiYWtlLXByZWZlcmVuY2VzJz4KKyAgICAgICAgPHRpdGxlPlByZWZlcmVuY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0IGlzIG9ubHkgcGFydCBvZiB0aGUgc29sdXRpb24KKyAgICAgICAgICAgIGZvciBmaWd1cmluZyBvdXQgYSB0YXJnZXQncyByZWNpcGVzLgorICAgICAgICAgICAgQmVjYXVzZSB0YXJnZXRzIG1pZ2h0IGhhdmUgbXVsdGlwbGUgcHJvdmlkZXJzLCBCaXRCYWtlIG5lZWRzCisgICAgICAgICAgICB0byBwcmlvcml0aXplIHByb3ZpZGVycyBieSBkZXRlcm1pbmluZyBwcm92aWRlciBwcmVmZXJlbmNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gZXhhbXBsZSBpbiB3aGljaCBhIHRhcmdldCBoYXMgbXVsdGlwbGUgcHJvdmlkZXJzCisgICAgICAgICAgICBpcyAidmlydHVhbC9rZXJuZWwiLCB3aGljaCBpcyBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IGxpc3QgZm9yIGVhY2gga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEVhY2ggbWFjaGluZSBvZnRlbiBzZWxlY3RzIHRoZSBiZXN0IGtlcm5lbCBwcm92aWRlciBieSB1c2luZyBhCisgICAgICAgICAgICBsaW5lIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0byIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48ZmlsZW5hbWU+UFJFRkVSUkVEX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBpcyB0aGUgcHJvdmlkZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBCaXRiYWtlIGl0ZXJhdGVzIHRocm91Z2ggZWFjaCB0YXJnZXQgaXQgbmVlZHMgdG8gYnVpbGQgYW5kCisgICAgICAgICAgICByZXNvbHZlcyB0aGVtIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgdXNpbmcgdGhpcyBwcm9jZXNzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIGhvdyBwcm92aWRlcnMgYXJlIGNob3NlbiBpcyBtYWRlIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0CisgICAgICAgICAgICB0aGF0IG11bHRpcGxlIHZlcnNpb25zIG1pZ2h0IGV4aXN0IGZvciBhIGdpdmVuIHByb3ZpZGVyLgorICAgICAgICAgICAgQml0QmFrZSBkZWZhdWx0cyB0byB0aGUgaGlnaGVzdCB2ZXJzaW9uIG9mIGEgcHJvdmlkZXIuCisgICAgICAgICAgICBWZXJzaW9uIGNvbXBhcmlzb25zIGFyZSBtYWRlIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBEZWJpYW4uCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGEgcGFydGljdWxhciB2ZXJzaW9uLgorICAgICAgICAgICAgWW91IGNhbiBpbmZsdWVuY2UgdGhlIG9yZGVyIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGZpbGVzIGhhdmUgYSBwcmVmZXJlbmNlIG9mICIwIi4KKyAgICAgICAgICAgIFNldHRpbmcgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICItMSIgbWFrZXMgdGhlCisgICAgICAgICAgICByZWNpcGUgdW5saWtlbHkgdG8gYmUgdXNlZCB1bmxlc3MgaXQgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLgorICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gdG8gIjEiIG1ha2VzIGl0CisgICAgICAgICAgICBsaWtlbHkgdGhlIHJlY2lwZSBpcyB1c2VkLgorICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9WRVJTSU9OPC9maWxlbmFtZT4gb3ZlcnJpZGVzIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHNldHRpbmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gaXMgb2Z0ZW4gdXNlZCB0byBtYXJrIG5ld2VyCisgICAgICAgICAgICBhbmQgbW9yZSBleHBlcmltZW50YWwgcmVjaXBlIHZlcnNpb25zIHVudGlsIHRoZXkgaGF2ZSB1bmRlcmdvbmUKKyAgICAgICAgICAgIHN1ZmZpY2llbnQgdGVzdGluZyB0byBiZSBjb25zaWRlcmVkIHN0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUg4oCcdmVyc2lvbnPigJ0gb2YgYSBnaXZlbiByZWNpcGUsCisgICAgICAgICAgICBCaXRCYWtlIGRlZmF1bHRzIHRvIHNlbGVjdGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgICAgIHZlcnNpb24sIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorICAgICAgICAgICAgSWYgdGhlIHJlY2lwZSBpbiBxdWVzdGlvbiBoYXMgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgc2V0IGxvd2VyIHRoYW4gdGhlIG90aGVyIHJlY2lwZXMgKGRlZmF1bHQgaXMgMCksIHRoZW4KKyAgICAgICAgICAgIGl0IHdpbGwgbm90IGJlIHNlbGVjdGVkLgorICAgICAgICAgICAgVGhpcyBhbGxvd3MgdGhlIHBlcnNvbiBvciBwZXJzb25zIG1haW50YWluaW5nCisgICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBvZiByZWNpcGUgZmlsZXMgdG8gc3BlY2lmeQorICAgICAgICAgICAgdGhlaXIgcHJlZmVyZW5jZSBmb3IgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgdmVyc2lvbi4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHVzZXIgY2FuIHNwZWNpZnkgdGhlaXIgcHJlZmVycmVkIHZlcnNpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHRoZSBmaXJzdCByZWNpcGUgaXMgbmFtZWQgPGZpbGVuYW1lPmFfMS4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgd2lsbCBiZSBzZXQgdG8g4oCcYeKAnSwgYW5kIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIDEuMS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGh1cywgaWYgYSByZWNpcGUgbmFtZWQgPGZpbGVuYW1lPmFfMS4yLmJiPC9maWxlbmFtZT4gZXhpc3RzLCBCaXRCYWtlCisgICAgICAgICAgICB3aWxsIGNob29zZSAxLjIgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBpbiBhCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgQml0QmFrZSBwYXJzZXMsIHlvdQorICAgICAgICAgICAgY2FuIGNoYW5nZSB0aGF0IHByZWZlcmVuY2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX2EgPSAiMS4xIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIGEgcmVjaXBlIHRvIHByb3ZpZGUgdHdvIHZlcnNpb25zIC0tIGEgc3RhYmxlLAorICAgICAgICAgICAgICAgIG51bWJlcmVkIChhbmQgcHJlZmVycmVkKSB2ZXJzaW9uLCBhbmQgYSB2ZXJzaW9uIHRoYXQgaXMKKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNoZWNrZWQgb3V0IGZyb20gYSBzb3VyY2UgY29kZSByZXBvc2l0b3J5IHRoYXQKKyAgICAgICAgICAgICAgICBpcyBjb25zaWRlcmVkIG1vcmUgImJsZWVkaW5nIGVkZ2UiIGJ1dCBjYW4gYmUgc2VsZWN0ZWQgb25seQorICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiB0aGUgT3BlbkVtYmVkZGVkIGNvZGViYXNlLCB0aGVyZSBpcyBhIHN0YW5kYXJkLAorICAgICAgICAgICAgICAgIHZlcnNpb25lZCByZWNpcGUgZmlsZSBmb3IgQnVzeUJveCwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLjIyLjEuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBidXQgdGhlcmUgaXMgYWxzbyBhIEdpdC1iYXNlZCB2ZXJzaW9uLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94X2dpdC5iYjwvZmlsZW5hbWU+LCB3aGljaCBleHBsaWNpdGx5IGNvbnRhaW5zIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIERFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgdGhlIG51bWJlcmVkLCBzdGFibGUgdmVyc2lvbiBpcyBhbHdheXMgcHJlZmVycmVkCisgICAgICAgICAgICAgICAgdW5sZXNzIHRoZSBkZXZlbG9wZXIgc2VsZWN0cyBvdGhlcndpc2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItYml0YmFrZS1kZXBlbmRlbmNpZXMnPgorICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVhY2ggdGFyZ2V0IEJpdEJha2UgYnVpbGRzIGNvbnNpc3RzIG9mIG11bHRpcGxlIHRhc2tzIHN1Y2ggYXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mZXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+dW5wYWNrPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jb21waWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICBGb3IgYmVzdCBwZXJmb3JtYW5jZSBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIEJpdEJha2UgY29uc2lkZXJzIGVhY2gKKyAgICAgICAgICAgIHRhc2sgYXMgYW4gaW5kZXBlbmRlbnQKKyAgICAgICAgICAgIGVudGl0eSB3aXRoIGl0cyBvd24gc2V0IG9mIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIHRocm91Z2ggc2V2ZXJhbCB2YXJpYWJsZXMuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gYWJvdXQgdmFyaWFibGVzIEJpdEJha2UgdXNlcyBpbgorICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+VmFyaWFibGVzIEdsb3NzYXJ5PC9saW5rPgorICAgICAgICAgICAgbmVhciB0aGUgZW5kIG9mIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgQXQgYSBiYXNpYyBsZXZlbCwgaXQgaXMgc3VmZmljaWVudCB0byBrbm93IHRoYXQgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzIHdoZW4KKyAgICAgICAgICAgIGNhbGN1bGF0aW5nIGRlcGVuZGVuY2llcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IEJpdEJha2UgaGFuZGxlcyBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXBlbmRlbmNpZXMnPkRlcGVuZGVuY2llczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtdGFza2xpc3QnPgorICAgICAgICA8dGl0bGU+VGhlIFRhc2sgTGlzdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCYXNlZCBvbiB0aGUgZ2VuZXJhdGVkIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgIEJpdEJha2UgY2FuIG5vdyBjYWxjdWxhdGUgZXhhY3RseSB3aGF0IHRhc2tzIGl0IG5lZWRzIHRvIHJ1biBhbmQgaW4gd2hhdAorICAgICAgICAgICAgb3JkZXIgaXQgbmVlZHMgdG8gcnVuIHRoZW0uCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleGVjdXRpbmctdGFza3MnPkV4ZWN1dGluZyBUYXNrczwvbGluaz4iIHNlY3Rpb24gaGFzIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyBCaXRCYWtlIGNob29zZXMgd2hpY2ggdGFzayB0byBleGVjdXRlIG5leHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBidWlsZCBub3cgc3RhcnRzIHdpdGggQml0QmFrZSBmb3JraW5nIG9mZiB0aHJlYWRzIHVwIHRvIHRoZSBsaW1pdCBzZXQgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCaXRCYWtlIGNvbnRpbnVlcyB0byBmb3JrIHRocmVhZHMgYXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFza3MgcmVhZHkgdG8gcnVuLAorICAgICAgICAgICAgdGhvc2UgdGFza3MgaGF2ZSBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIG1ldCwgYW5kIHRoZSB0aHJlYWQgdGhyZXNob2xkIGhhcyBub3QgYmVlbgorICAgICAgICAgICAgZXhjZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHlvdSBjYW4gZ3JlYXRseSBzcGVlZCB1cCB0aGUgYnVpbGQgdGltZSBieSBwcm9wZXJseSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGVhY2ggdGFzayBjb21wbGV0ZXMsIGEgdGltZXN0YW1wIGlzIHdyaXR0ZW4gdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgIE9uIHN1YnNlcXVlbnQgcnVucywgQml0QmFrZSBsb29rcyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IHdpdGhpbgorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9zdGFtcHM8L2ZpbGVuYW1lPiBhbmQgZG9lcyBub3QgcmVydW4KKyAgICAgICAgICAgIHRhc2tzIHRoYXQgYXJlIGFscmVhZHkgY29tcGxldGVkIHVubGVzcyBhIHRpbWVzdGFtcCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLgorICAgICAgICAgICAgQ3VycmVudGx5LCBpbnZhbGlkIHRpbWVzdGFtcHMgYXJlIG9ubHkgY29uc2lkZXJlZCBvbiBhIHBlcgorICAgICAgICAgICAgcmVjaXBlIGZpbGUgYmFzaXMuCisgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc3RhbXAgaGFzIGEgdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIGNvbXBpbGUgdGltZXN0YW1wIGZvciBhIGdpdmVuIHRhcmdldCwgdGhlbiB0aGUgY29tcGlsZSB0YXNrIHdvdWxkIHJlcnVuLgorICAgICAgICAgICAgUnVubmluZyB0aGUgY29tcGlsZSB0YXNrIGFnYWluLCBob3dldmVyLCBoYXMgbm8gZWZmZWN0IG9uIG90aGVyIHByb3ZpZGVycworICAgICAgICAgICAgdGhhdCBkZXBlbmQgb24gdGhhdCB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGFjdCBmb3JtYXQgb2YgdGhlIHN0YW1wcyBpcyBwYXJ0bHkgY29uZmlndXJhYmxlLgorICAgICAgICAgICAgSW4gbW9kZXJuIHZlcnNpb25zIG9mIEJpdEJha2UsIGEgaGFzaCBpcyBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgIHN0YW1wIHNvIHRoYXQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgdGhlIHN0YW1wIGJlY29tZXMKKyAgICAgICAgICAgIGludmFsaWQgYW5kIHRoZSB0YXNrIGlzIGF1dG9tYXRpY2FsbHkgcmVydW4uCisgICAgICAgICAgICBUaGlzIGhhc2gsIG9yIHNpZ25hdHVyZSB1c2VkLCBpcyBnb3Zlcm5lZCBieSB0aGUgc2lnbmF0dXJlIHBvbGljeQorICAgICAgICAgICAgdGhhdCBpcyBjb25maWd1cmVkIChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uKS4KKyAgICAgICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwZW5kIGV4dHJhIG1ldGFkYXRhIHRvIHRoZSBzdGFtcCB1c2luZworICAgICAgICAgICAgdGhlICJzdGFtcC1leHRyYS1pbmZvIiB0YXNrIGZsYWcuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgT3BlbkVtYmVkZGVkIHVzZXMgdGhpcyBmbGFnIHRvIG1ha2Ugc29tZSB0YXNrcyBtYWNoaW5lLXNwZWNpZmljLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBTb21lIHRhc2tzIGFyZSBtYXJrZWQgYXMgIm5vc3RhbXAiIHRhc2tzLgorICAgICAgICAgICAgTm8gdGltZXN0YW1wIGZpbGUgaXMgY3JlYXRlZCB3aGVuIHRoZXNlIHRhc2tzIGFyZSBydW4uCisgICAgICAgICAgICBDb25zZXF1ZW50bHksICJub3N0YW1wIiB0YXNrcyBhcmUgYWx3YXlzIHJlcnVuLgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0YXNrcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2tzJz5UYXNrczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXhlY3V0aW5nLXRhc2tzJz4KKyAgICAgICAgPHRpdGxlPkV4ZWN1dGluZyBUYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUYXNrcyBjYW4gYmUgZWl0aGVyIGEgc2hlbGwgdGFzayBvciBhIFB5dGhvbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCBCaXRCYWtlIHdyaXRlcyBhIHNoZWxsIHNjcmlwdCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9ydW4uZG9fdGFza25hbWUucGlkPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCB0aGVuIGV4ZWN1dGVzIHRoZSBzY3JpcHQuCisgICAgICAgICAgICBUaGUgZ2VuZXJhdGVkIHNoZWxsIHNjcmlwdCBjb250YWlucyBhbGwgdGhlIGV4cG9ydGVkIHZhcmlhYmxlcywKKyAgICAgICAgICAgIGFuZCB0aGUgc2hlbGwgZnVuY3Rpb25zIHdpdGggYWxsIHZhcmlhYmxlcyBleHBhbmRlZC4KKyAgICAgICAgICAgIE91dHB1dCBmcm9tIHRoZSBzaGVsbCBzY3JpcHQgZ29lcyB0byB0aGUgZmlsZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7VH0vbG9nLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgZXhwYW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluIHRoZSBydW4gZmlsZSBhbmQKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgaW4gdGhlIGxvZyBmaWxlcyBpcyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdGVjaG5pcXVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgUHl0aG9uIHRhc2tzLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSB0YXNrIGludGVybmFsbHkgYW5kIGxvZ3MKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIHdpbGwgd3JpdGUgdGhlIGZ1bmN0aW9ucyB0byBmaWxlcworICAgICAgICAgICAgc2ltaWxhciB0byB0aGUgd2F5IHNoZWxsIHRhc2tzIGFyZSBoYW5kbGVkLgorICAgICAgICAgICAgTG9nZ2luZyB3aWxsIGJlIGhhbmRsZWQgaW4gYSB3YXkgc2ltaWxhciB0byBzaGVsbCB0YXNrcyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3JkZXIgaW4gd2hpY2ggQml0QmFrZSBydW5zIHRoZSB0YXNrcyBpcyBjb250cm9sbGVkIGJ5IGl0cworICAgICAgICAgICAgdGFzayBzY2hlZHVsZXIuCisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgdGhlIHNjaGVkdWxlciBhbmQgZGVmaW5lIGN1c3RvbQorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZXNlIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgdGhlCisgICAgICAgICAgICBiZWhhdmlvcjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU0NIRURVTEVSJz48ZmlsZW5hbWU+QkJfU0NIRURVTEVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUlMnPjxmaWxlbmFtZT5CQl9TQ0hFRFVMRVJTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGZ1bmN0aW9ucyBydW4gYmVmb3JlIGFuZCBhZnRlciBhIHRhc2sncyBtYWluCisgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgInByZWZ1bmNzIiBhbmQgInBvc3RmdW5jcyIgZmxhZ3Mgb2YgdGhlIHRhc2sKKyAgICAgICAgICAgIHRoYXQgbGlzdHMgdGhlIGZ1bmN0aW9ucyB0byBydW4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY2hlY2tzdW1zJz4KKyAgICAgICAgPHRpdGxlPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjaGVja3N1bSBpcyBhIHVuaXF1ZSBzaWduYXR1cmUgb2YgYSB0YXNrJ3MgaW5wdXRzLgorICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBhIHRhc2sgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdGFzaworICAgICAgICAgICAgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBhIGNoYW5nZSBpbiBhIHRhc2sncyBpbnB1dHMgdGhhdCB0cmlnZ2VycyBydW5uaW5nCisgICAgICAgICAgICB0aGUgdGFzaywgQml0QmFrZSBuZWVkcyB0byBkZXRlY3QgYWxsIHRoZSBpbnB1dHMgdG8gYSBnaXZlbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCB0aGlzIHR1cm5zIG91dCB0byBiZSBmYWlybHkgZWFzeSBiZWNhdXNlCisgICAgICAgICAgICBCaXRCYWtlIGdlbmVyYXRlcyBhICJydW4iIHNoZWxsIHNjcmlwdCBmb3IgZWFjaCB0YXNrIGFuZAorICAgICAgICAgICAgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgY2hlY2tzdW0gdGhhdCBnaXZlcyB5b3UgYSBnb29kIGlkZWEgb2Ygd2hlbgorICAgICAgICAgICAgdGhlIHRhc2sncyBkYXRhIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNvbXBsaWNhdGUgdGhlIHByb2JsZW0sIHNvbWUgdGhpbmdzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4KKyAgICAgICAgICAgIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgIEZpcnN0LCB0aGVyZSBpcyB0aGUgYWN0dWFsIHNwZWNpZmljIGJ1aWxkIHBhdGggb2YgYSBnaXZlbiB0YXNrIC0KKyAgICAgICAgICAgIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEl0IGRvZXMgbm90IG1hdHRlciBpZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcyBiZWNhdXNlIGl0IHNob3VsZCBub3QKKyAgICAgICAgICAgIGFmZmVjdCB0aGUgb3V0cHV0IGZvciB0YXJnZXQgcGFja2FnZXMuCisgICAgICAgICAgICBUaGUgc2ltcGxpc3RpYyBhcHByb2FjaCBmb3IgZXhjbHVkaW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB0byBzZXQKKyAgICAgICAgICAgIGl0IHRvIHNvbWUgZml4ZWQgdmFsdWUgYW5kIGNyZWF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSAicnVuIiBzY3JpcHQuCisgICAgICAgICAgICBCaXRCYWtlIGdvZXMgb25lIHN0ZXAgYmV0dGVyIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0hBU0hCQVNFX1dISVRFTElTVCc+PGZpbGVuYW1lPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIGEgbGlzdCBvZiB2YXJpYWJsZXMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQKKyAgICAgICAgICAgIHdoZW4gZ2VuZXJhdGluZyB0aGUgc2lnbmF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBwcm9ibGVtIHJlc3VsdHMgZnJvbSB0aGUgInJ1biIgc2NyaXB0cyBjb250YWluaW5nIGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICBtaWdodCBvciBtaWdodCBub3QgZ2V0IGNhbGxlZC4KKyAgICAgICAgICAgIFRoZSBpbmNyZW1lbnRhbCBidWlsZCBzb2x1dGlvbiBjb250YWlucyBjb2RlIHRoYXQgZmlndXJlcyBvdXQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBiZXR3ZWVuIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgY29kZSBpcyB1c2VkIHRvIHBydW5lIHRoZSAicnVuIiBzY3JpcHRzIGRvd24gdG8gdGhlIG1pbmltdW0gc2V0LAorICAgICAgICAgICAgdGhlcmVieSBhbGxldmlhdGluZyB0aGlzIHByb2JsZW0gYW5kIG1ha2luZyB0aGUgInJ1biIgc2NyaXB0cyBtdWNoIG1vcmUKKyAgICAgICAgICAgIHJlYWRhYmxlIGFzIGEgYm9udXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvIGZhciB3ZSBoYXZlIHNvbHV0aW9ucyBmb3Igc2hlbGwgc2NyaXB0cy4KKyAgICAgICAgICAgIFdoYXQgYWJvdXQgUHl0aG9uIHRhc2tzPworICAgICAgICAgICAgVGhlIHNhbWUgYXBwcm9hY2ggYXBwbGllcyBldmVuIHRob3VnaCB0aGVzZSB0YXNrcyBhcmUgbW9yZSBkaWZmaWN1bHQuCisgICAgICAgICAgICBUaGUgcHJvY2VzcyBuZWVkcyB0byBmaWd1cmUgb3V0IHdoYXQgdmFyaWFibGVzIGEgUHl0aG9uIGZ1bmN0aW9uIGFjY2Vzc2VzCisgICAgICAgICAgICBhbmQgd2hhdCBmdW5jdGlvbnMgaXQgY2FsbHMuCisgICAgICAgICAgICBBZ2FpbiwgdGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaXJzdCBmaWd1cmVzIG91dAorICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGNyZWF0ZXMgYSBjaGVja3N1bSBmb3IgdGhlIGRhdGEKKyAgICAgICAgICAgIHVzZWQgYXMgdGhlIGlucHV0IHRvIHRoZSB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaWtlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjYXNlLCBzaXR1YXRpb25zIGV4aXN0IHdoZXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBjYW4gaW5zdHJ1Y3QgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gaWdub3JlIGEgZGVwZW5kZW5jeQorICAgICAgICAgICAgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBlbnN1cmVzIHRoYXQgdGhlIDxmaWxlbmFtZT5QQUNLQUdFX0FSQ0hTPC9maWxlbmFtZT4gdmFyaWFibGUgZG9lcyBub3QKKyAgICAgICAgICAgIGRlcGVuZCBvbiB0aGUgdmFsdWUgb2YgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiwgZXZlbiBpZiBpdCBkb2VzIHJlZmVyZW5jZSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXF1YWxseSwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYWRkIGRlcGVuZGVuY2llcyBCaXRCYWtlCisgICAgICAgICAgICBpcyBub3QgYWJsZSB0byBmaW5kLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc10gPSAiTUFDSElORSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBleHBsaWNpdGx5IGFkZHMgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgZGVwZW5kZW5jeSBmb3IgPGZpbGVuYW1lPlBBQ0tBR0VfQVJDSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29uc2lkZXIgYSBjYXNlIHdpdGggaW4tbGluZSBQeXRob24sIGZvciBleGFtcGxlLCB3aGVyZSBCaXRCYWtlIGlzIG5vdAorICAgICAgICAgICAgYWJsZSB0byBmaWd1cmUgb3V0IGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIFdoZW4gcnVubmluZyBpbiBkZWJ1ZyBtb2RlIChpLmUuIHVzaW5nIDxmaWxlbmFtZT4tREREPC9maWxlbmFtZT4pLCBCaXRCYWtlCisgICAgICAgICAgICBwcm9kdWNlcyBvdXRwdXQgd2hlbiBpdCBkaXNjb3ZlcnMgc29tZXRoaW5nIGZvciB3aGljaCBpdCBjYW5ub3QgZmlndXJlIG91dAorICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaHVzIGZhciwgdGhpcyBzZWN0aW9uIGhhcyBsaW1pdGVkIGRpc2N1c3Npb24gdG8gdGhlIGRpcmVjdCBpbnB1dHMgaW50byBhIHRhc2suCisgICAgICAgICAgICBJbmZvcm1hdGlvbiBiYXNlZCBvbiBkaXJlY3QgaW5wdXRzIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiYmFzZWhhc2giIGluIHRoZQorICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIHRoZSBxdWVzdGlvbiBvZiBhIHRhc2sncyBpbmRpcmVjdCBpbnB1dHMgLSB0aGUKKyAgICAgICAgICAgIHRoaW5ncyB0aGF0IHdlcmUgYWxyZWFkeSBidWlsdCBhbmQgcHJlc2VudCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGZvciBhIHBhcnRpY3VsYXIgdGFzayBuZWVkcyB0byBhZGQgdGhlIGhhc2hlcworICAgICAgICAgICAgb2YgYWxsIHRoZSB0YXNrcyBvbiB3aGljaCB0aGUgcGFydGljdWxhciB0YXNrIGRlcGVuZHMuCisgICAgICAgICAgICBDaG9vc2luZyB3aGljaCBkZXBlbmRlbmNpZXMgdG8gYWRkIGlzIGEgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIGVmZmVjdCBpcyB0byBnZW5lcmF0ZSBhIG1hc3RlciBjaGVja3N1bSB0aGF0IGNvbWJpbmVzIHRoZSBiYXNlaGFzaAorICAgICAgICAgICAgYW5kIHRoZSBoYXNoZXMgb2YgdGhlIHRhc2sncyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSBjb2RlIGxldmVsLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHdheXMgYm90aCB0aGUgYmFzZWhhc2ggYW5kIHRoZQorICAgICAgICAgICAgZGVwZW5kZW50IHRhc2sgaGFzaGVzIGNhbiBiZSBpbmZsdWVuY2VkLgorICAgICAgICAgICAgV2l0aGluIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2UgY2FuIGdpdmUgQml0QmFrZSBzb21lIGV4dHJhIGluZm9ybWF0aW9uCisgICAgICAgICAgICB0byBoZWxwIGl0IGNvbnN0cnVjdCB0aGUgYmFzZWhhc2guCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBlZmZlY3RpdmVseSByZXN1bHRzIGluIGEgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgZXhjbHVkZXMgLSB2YXJpYWJsZXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGNoZWNrc3VtLgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHVzZXMgdmFyaWFibGVzIGZyb20gT3BlbkVtYmVkZGVkIHRvIGhlbHAgaWxsdXN0cmF0ZQorICAgICAgICAgICAgdGhlIGNvbmNlcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIERMX0RJUiBcCisgICAgICAgICBTU1RBVEVfRElSIFRISVNESVIgRklMRVNFWFRSQVBBVEhTIEZJTEVfRElSTkFNRSBIT01FIExPR05BTUUgU0hFTEwgVEVSTSBcCisgICAgICAgICBVU0VSIEZJTEVTUEFUSCBTVEFHSU5HX0RJUl9IT1NUIFNUQUdJTkdfRElSX1RBUkdFVCBDT1JFQkFTRSBQUlNFUlZfSE9TVCBcCisgICAgICAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAorICAgICAgICAgQ0NBQ0hFX0RJUiBFWFRFUk5BTF9UT09MQ0hBSU4gQ0NBQ0hFIENDQUNIRV9ESVNBQkxFIExJQ0VOU0VfUEFUSCBTREtQS0dTVUZGSVgiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBleGNsdWRlcyB0aGUgd29yayBkaXJlY3RvcnksIHdoaWNoIGlzIHBhcnQgb2YKKyAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJ1bGVzIGZvciBkZWNpZGluZyB3aGljaCBoYXNoZXMgb2YgZGVwZW5kZW50IHRhc2tzIHRvIGluY2x1ZGUgdGhyb3VnaAorICAgICAgICAgICAgZGVwZW5kZW5jeSBjaGFpbnMgYXJlIG1vcmUgY29tcGxleCBhbmQgYXJlIGdlbmVyYWxseSBhY2NvbXBsaXNoZWQgd2l0aCBhCisgICAgICAgICAgICBQeXRob24gZnVuY3Rpb24uCisgICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCisgICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCisgICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgorICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyBPcGVuRW1iZWRkZWQgQ29yZQorICAgICAgICAgICAgdXNlczogICJPRUJhc2ljIiBhbmQgIk9FQmFzaWNIYXNoIi4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGEgZHVtbXkgIm5vb3AiIHNpZ25hdHVyZSBoYW5kbGVyIGVuYWJsZWQgaW4gQml0QmFrZS4KKyAgICAgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBiZWhhdmlvciBpcyB1bmNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PRS1Db3JlPC9maWxlbmFtZT4gdXNlcyB0aGUgIk9FQmFzaWNIYXNoIiBzaWduYXR1cmUgaGFuZGxlciBieSBkZWZhdWx0CisgICAgICAgICAgICB0aHJvdWdoIHRoaXMgc2V0dGluZyBpbiB0aGUgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAiT0VCYXNpY0hhc2giIDxmaWxlbmFtZT5CQl9TSUdOQVRVUkVfSEFORExFUjwvZmlsZW5hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgIk9FQmFzaWMiIHZlcnNpb24gYnV0IGFkZHMgdGhlIHRhc2sgaGFzaCB0byB0aGUgc3RhbXAgZmlsZXMuCisgICAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYW55IG1ldGFkYXRhIGNoYW5nZSB0aGF0IGNoYW5nZXMgdGhlIHRhc2sgaGFzaCwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgY2F1c2luZyB0aGUgdGFzayB0byBiZSBydW4gYWdhaW4uCisgICAgICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gYnVtcAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcywgYW5kIGNoYW5nZXMgdG8gbWV0YWRhdGEgYXV0b21hdGljYWxseSByaXBwbGUgYWNyb3NzIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgZW5kIHJlc3VsdCBvZiB0aGVzZSBzaWduYXR1cmUgZ2VuZXJhdG9ycyBpcyB0bworICAgICAgICAgICAgbWFrZSBzb21lIGRlcGVuZGVuY3kgYW5kIGhhc2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfdGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggdGFzayBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCBkZXBlbmRlbnQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQkhBU0hERVBTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGRlcGVuZGVuY2llcyBmb3IgZWFjaCB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCBCaXRCYWtlJ3MgIi1TIiBvcHRpb24gbGV0cyB5b3UKKyAgICAgICAgICAgIGRlYnVnIEJpdGJha2UncyBwcm9jZXNzaW5nIG9mIHNpZ25hdHVyZXMuCisgICAgICAgICAgICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gLVMgYWxsb3cgZGlmZmVyZW50IGRlYnVnZ2luZyBtb2RlcworICAgICAgICAgICAgdG8gYmUgdXNlZCwgZWl0aGVyIHVzaW5nIEJpdEJha2UncyBvd24gZGVidWcgZnVuY3Rpb25zCisgICAgICAgICAgICBvciBwb3NzaWJseSB0aG9zZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YS9zaWduYXR1cmUgaGFuZGxlcgorICAgICAgICAgICAgaXRzZWxmLgorICAgICAgICAgICAgVGhlIHNpbXBsZXN0IHBhcmFtZXRlciB0byBwYXNzIGlzICJub25lIiwgd2hpY2ggY2F1c2VzIGEKKyAgICAgICAgICAgIHNldCBvZiBzaWduYXR1cmUgaW5mb3JtYXRpb24gdG8gYmUgd3JpdHRlbiBvdXQgaW50bworICAgICAgICAgICAgPGZpbGVuYW1lPlNUQU1QX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YXJnZXRzIHNwZWNpZmllZC4KKyAgICAgICAgICAgIFRoZSBvdGhlciBjdXJyZW50bHkgYXZhaWxhYmxlIHBhcmFtZXRlciBpcyAicHJpbnRkaWZmIiwKKyAgICAgICAgICAgIHdoaWNoIGNhdXNlcyBCaXRCYWtlIHRvIHRyeSB0byBlc3RhYmxpc2ggdGhlIGNsb3Nlc3QKKyAgICAgICAgICAgIHNpZ25hdHVyZSBtYXRjaCBpdCBjYW4gKGUuZy4gaW4gdGhlIHNzdGF0ZSBjYWNoZSkgYW5kIHRoZW4KKyAgICAgICAgICAgIHJ1biA8ZmlsZW5hbWU+Yml0YmFrZS1kaWZmc2lnczwvZmlsZW5hbWU+IG92ZXIgdGhlIG1hdGNoZXMKKyAgICAgICAgICAgIHRvIGRldGVybWluZSB0aGUgc3RhbXBzIGFuZCBkZWx0YSB3aGVyZSB0aGVzZSB0d28KKyAgICAgICAgICAgIHN0YW1wIHRyZWVzIGRpdmVyZ2UuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJdCBpcyBsaWtlbHkgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgQml0QmFrZSB3aWxsCisgICAgICAgICAgICAgICAgcHJvdmlkZSBvdGhlciBzaWduYXR1cmUgaGFuZGxlcnMgdHJpZ2dlcmVkIHRocm91Z2gKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsICItUyIgcGFyYW1ldGVycy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gY2hlY2tzdW0gbWV0YWRhdGEgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndGFzay1jaGVja3N1bXMtYW5kLXNldHNjZW5lJz5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZXRzY2VuZSc+CisgICAgICAgIDx0aXRsZT5TZXRzY2VuZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2V0c2NlbmUgcHJvY2VzcyBlbmFibGVzIEJpdEJha2UgdG8gaGFuZGxlICJwcmUtYnVpbHQiIGFydGlmYWN0cy4KKyAgICAgICAgICAgIFRoZSBhYmlsaXR5IHRvIGhhbmRsZSBhbmQgcmV1c2UgdGhlc2UgYXJ0aWZhY3RzIGFsbG93cyBCaXRCYWtlCisgICAgICAgICAgICB0aGUgbHV4dXJ5IG9mIG5vdCBoYXZpbmcgdG8gYnVpbGQgc29tZXRoaW5nIGZyb20gc2NyYXRjaCBldmVyeSB0aW1lLgorICAgICAgICAgICAgSW5zdGVhZCwgQml0QmFrZSBjYW4gdXNlLCB3aGVuIHBvc3NpYmxlLCBleGlzdGluZyBidWlsZCBhcnRpZmFjdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgbmVlZHMgdG8gaGF2ZSByZWxpYWJsZSBkYXRhIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW4KKyAgICAgICAgICAgIGFydGlmYWN0IGlzIGNvbXBhdGlibGUuCisgICAgICAgICAgICBTaWduYXR1cmVzLCBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHByb3ZpZGUgYW4gaWRlYWwKKyAgICAgICAgICAgIHdheSBvZiByZXByZXNlbnRpbmcgd2hldGhlciBhbiBhcnRpZmFjdCBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgSWYgYSBzaWduYXR1cmUgaXMgdGhlIHNhbWUsIGFuIG9iamVjdCBjYW4gYmUgcmV1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBhbiBvYmplY3QgY2FuIGJlIHJldXNlZCwgdGhlIHByb2JsZW0gdGhlbiBiZWNvbWVzIGhvdyB0bworICAgICAgICAgICAgcmVwbGFjZSBhIGdpdmVuIHRhc2sgb3Igc2V0IG9mIHRhc2tzIHdpdGggdGhlIHByZS1idWlsdCBhcnRpZmFjdC4KKyAgICAgICAgICAgIEJpdEJha2Ugc29sdmVzIHRoZSBwcm9ibGVtIHdpdGggdGhlICJzZXRzY2VuZSIgcHJvY2Vzcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBCaXRCYWtlIGlzIGFza2VkIHRvIGJ1aWxkIGEgZ2l2ZW4gdGFyZ2V0LCBiZWZvcmUgYnVpbGRpbmcgYW55dGhpbmcsCisgICAgICAgICAgICBpdCBmaXJzdCBhc2tzIHdoZXRoZXIgY2FjaGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYW55IG9mIHRoZQorICAgICAgICAgICAgdGFyZ2V0cyBpdCdzIGJ1aWxkaW5nLCBvciBhbnkgb2YgdGhlIGludGVybWVkaWF0ZSB0YXJnZXRzLgorICAgICAgICAgICAgSWYgY2FjaGVkIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSwgQml0QmFrZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gaW5zdGVhZCBvZgorICAgICAgICAgICAgcnVubmluZyB0aGUgbWFpbiB0YXNrcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBmaXJzdCBjYWxscyB0aGUgZnVuY3Rpb24gZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9IQVNIQ0hFQ0tfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9IQVNIQ0hFQ0tfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggYSBsaXN0IG9mIHRhc2tzIGFuZCBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICBoYXNoZXMgaXQgd2FudHMgdG8gYnVpbGQuCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGZhc3QgYW5kIHJldHVybnMgYSBsaXN0CisgICAgICAgICAgICBvZiB0aGUgdGFza3MgZm9yIHdoaWNoIGl0IGJlbGlldmVzIGluIGNhbiBvYnRhaW4gYXJ0aWZhY3RzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOZXh0LCBmb3IgZWFjaCBvZiB0aGUgdGFza3MgdGhhdCB3ZXJlIHJldHVybmVkIGFzIHBvc3NpYmlsaXRpZXMsCisgICAgICAgICAgICBCaXRCYWtlIGV4ZWN1dGVzIGEgc2V0c2NlbmUgdmVyc2lvbiBvZiB0aGUgdGFzayB0aGF0IHRoZSBwb3NzaWJsZQorICAgICAgICAgICAgYXJ0aWZhY3QgY292ZXJzLgorICAgICAgICAgICAgU2V0c2NlbmUgdmVyc2lvbnMgb2YgYSB0YXNrIGhhdmUgdGhlIHN0cmluZyAiX3NldHNjZW5lIiBhcHBlbmRlZCB0byB0aGUKKyAgICAgICAgICAgIHRhc2sgbmFtZS4KKyAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgdGhlIHRhc2sgd2l0aCB0aGUgbmFtZSA8ZmlsZW5hbWU+eHh4PC9maWxlbmFtZT4gaGFzCisgICAgICAgICAgICBhIHNldHNjZW5lIHRhc2sgbmFtZWQgPGZpbGVuYW1lPnh4eF9zZXRzY2VuZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNldHNjZW5lIHZlcnNpb24gb2YgdGhlIHRhc2sgZXhlY3V0ZXMgYW5kIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkKKyAgICAgICAgICAgIGFydGlmYWN0cyByZXR1cm5pbmcgZWl0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGFuIGFydGlmYWN0IGNhbiBjb3ZlciBtb3JlIHRoYW4gb25lIHRhc2suCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaXQgaXMgcG9pbnRsZXNzIHRvIG9idGFpbiBhIGNvbXBpbGVyIGlmIHlvdQorICAgICAgICAgICAgYWxyZWFkeSBoYXZlIHRoZSBjb21waWxlZCBiaW5hcnkuCisgICAgICAgICAgICBUbyBoYW5kbGUgdGhpcywgQml0QmFrZSBjYWxscyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBmdW5jdGlvbiBmb3IgZWFjaCBzdWNjZXNzZnVsIHNldHNjZW5lIHRhc2sgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCBpdCBuZWVkcworICAgICAgICAgICAgdG8gb2J0YWluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhhdCB0YXNrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCBhZnRlciBhbGwgdGhlIHNldHNjZW5lIHRhc2tzIGhhdmUgZXhlY3V0ZWQsIEJpdEJha2UgY2FsbHMgdGhlCisgICAgICAgICAgICBmdW5jdGlvbiBsaXN0ZWQgaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04nPjxmaWxlbmFtZT5CQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHdpdGggdGhlIGxpc3Qgb2YgdGFza3MgQml0QmFrZSB0aGlua3MgaGFzIGJlZW4gImNvdmVyZWQiLgorICAgICAgICAgICAgVGhlIG1ldGFkYXRhIGNhbiB0aGVuIGVuc3VyZSB0aGF0IHRoaXMgbGlzdCBpcyBjb3JyZWN0IGFuZCBjYW4KKyAgICAgICAgICAgIGluZm9ybSBCaXRCYWtlIHRoYXQgaXQgd2FudHMgc3BlY2lmaWMgdGFza3MgdG8gYmUgcnVuIHJlZ2FyZGxlc3MKKyAgICAgICAgICAgIG9mIHRoZSBzZXRzY2VuZSByZXN1bHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHNjZW5lIG1ldGFkYXRhIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+VGFzayBDaGVja3N1bXMgYW5kIFNldHNjZW5lPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTY4Y2ZhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWZldGNoaW5nLnhtbApAQCAtMCwwICsxLDc2NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyPgorPHRpdGxlPkZpbGUgRG93bmxvYWQgU3VwcG9ydDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSdzIGZldGNoIG1vZHVsZSBpcyBhIHN0YW5kYWxvbmUgcGllY2Ugb2YgbGlicmFyeSBjb2RlCisgICAgICAgIHRoYXQgZGVhbHMgd2l0aCB0aGUgaW50cmljYWNpZXMgb2YgZG93bmxvYWRpbmcgc291cmNlIGNvZGUKKyAgICAgICAgYW5kIGZpbGVzIGZyb20gcmVtb3RlIHN5c3RlbXMuCisgICAgICAgIEZldGNoaW5nIHNvdXJjZSBjb2RlIGlzIG9uZSBvZiB0aGUgY29ybmVyc3RvbmVzIG9mIGJ1aWxkaW5nIHNvZnR3YXJlLgorICAgICAgICBBcyBzdWNoLCB0aGlzIG1vZHVsZSBmb3JtcyBhbiBpbXBvcnRhbnQgcGFydCBvZiBCaXRCYWtlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY3VycmVudCBmZXRjaCBtb2R1bGUgaXMgY2FsbGVkICJmZXRjaDIiIGFuZCByZWZlcnMgdG8gdGhlCisgICAgICAgIGZhY3QgdGhhdCBpdCBpcyB0aGUgc2Vjb25kIG1ham9yIHZlcnNpb24gb2YgdGhlIEFQSS4KKyAgICAgICAgVGhlIG9yaWdpbmFsIHZlcnNpb24gaXMgb2Jzb2xldGUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29kZWJhc2UuCisgICAgICAgIFRodXMsIGluIGFsbCBjYXNlcywgImZldGNoIiByZWZlcnMgdG8gImZldGNoMiIgaW4gdGhpcworICAgICAgICBtYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1kb3dubG9hZC1mZXRjaCc+CisgICAgICAgIDx0aXRsZT5UaGUgRG93bmxvYWQgKEZldGNoKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHRha2VzIHNldmVyYWwgc3RlcHMgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZSBvciBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBmZXRjaGVyIGNvZGViYXNlIGRlYWxzIHdpdGggdHdvIGRpc3RpbmN0IHByb2Nlc3NlcyBpbiBvcmRlcjoKKyAgICAgICAgICAgIG9idGFpbmluZyB0aGUgZmlsZXMgZnJvbSBzb21ld2hlcmUgKGNhY2hlZCBvciBvdGhlcndpc2UpCisgICAgICAgICAgICBhbmQgdGhlbiB1bnBhY2tpbmcgdGhvc2UgZmlsZXMgaW50byBhIHNwZWNpZmljIGxvY2F0aW9uIGFuZAorICAgICAgICAgICAgcGVyaGFwcyBpbiBhIHNwZWNpZmljIHdheS4KKyAgICAgICAgICAgIEdldHRpbmcgYW5kIHVucGFja2luZyB0aGUgZmlsZXMgaXMgb2Z0ZW4gb3B0aW9uYWxseSBmb2xsb3dlZAorICAgICAgICAgICAgYnkgcGF0Y2hpbmcuCisgICAgICAgICAgICBQYXRjaGluZywgaG93ZXZlciwgaXMgbm90IGNvdmVyZWQgYnkgdGhpcyBtb2R1bGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb2RlIHRvIGV4ZWN1dGUgdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBwcm9jZXNzLCBhIGZldGNoLAorICAgICAgICAgICAgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGNvZGUgc2V0cyB1cCBhbiBpbnN0YW5jZSBvZiB0aGUgZmV0Y2ggY2xhc3MuCisgICAgICAgICAgICBUaGUgaW5zdGFuY2UgdXNlcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSTHMgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZW4gY2FsbHMgdGhlIDxmaWxlbmFtZT5kb3dubG9hZDwvZmlsZW5hbWU+CisgICAgICAgICAgICBtZXRob2QgdG8gZG93bmxvYWQgdGhlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgZmV0Y2ggY2xhc3MgaXMgdXN1YWxseSBmb2xsb3dlZCBieToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdGRpciA9IGwuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgZmV0Y2hlci51bnBhY2socm9vdGRpcikKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgY29kZSB1bnBhY2tzIHRoZSBkb3dubG9hZGVkIGZpbGVzIHRvIHRoZQorICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgY29udmVuaWVuY2UsIHRoZSBuYW1pbmcgaW4gdGhlc2UgZXhhbXBsZXMgbWF0Y2hlcworICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZXMgdXNlZCBieSBPcGVuRW1iZWRkZWQuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2VlIHRoZSBhYm92ZSBjb2RlIGluIGFjdGlvbiwgZXhhbWluZQorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgY2xhc3MgZmlsZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGVzIGFyZSBub3QgaGFyZGNvZGVkIGludG8gdGhlIGZldGNoZXIsIHNpbmNlIHRob3NlIGZldGNoZXIKKyAgICAgICAgICAgIG1ldGhvZHMgY2FuIGJlIChhbmQgYXJlKSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMuCisgICAgICAgICAgICBJbiBPcGVuRW1iZWRkZWQgZm9yIGV4YW1wbGUsIHRoZSBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY29kZSB1c2VzCisgICAgICAgICAgICB0aGUgZmV0Y2ggbW9kdWxlIHRvIGZldGNoIHRoZSBzc3RhdGUgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgICAgICAgIEJpdEJha2UgdHJpZXMgdG8gcmVzb2x2ZSB0aGUgVVJMcyBieSBsb29raW5nIGZvciBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgIGluIGEgc3BlY2lmaWMgc2VhcmNoIG9yZGVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZS1taXJyb3IgU2l0ZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBmaXJzdCB1c2VzIHByZS1taXJyb3JzIHRvIHRyeSBhbmQgZmluZCBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGxvY2F0aW9ucyBhcmUgZGVmaW5lZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBVUkk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgcHJlLW1pcnJvcnMgZmFpbCwgQml0QmFrZSB1c2VzIHRoZSBvcmlnaW5hbCBVUkwgKGUuZyBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1pcnJvciBTaXRlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiBmZXRjaCBmYWlsdXJlcyBvY2N1ciwgQml0QmFrZSBuZXh0IHVzZXMgbWlycm9yIGxvY2F0aW9ucyBhcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBlYWNoIFVSTCBwYXNzZWQgdG8gdGhlIGZldGNoZXIsIHRoZSBmZXRjaGVyCisgICAgICAgICAgICBjYWxscyB0aGUgc3VibW9kdWxlIHRoYXQgaGFuZGxlcyB0aGF0IHBhcnRpY3VsYXIgVVJMIHR5cGUuCisgICAgICAgICAgICBUaGlzIGJlaGF2aW9yIGNhbiBiZSB0aGUgc291cmNlIG9mIHNvbWUgY29uZnVzaW9uIHdoZW4geW91CisgICAgICAgICAgICBhcmUgcHJvdmlkaW5nIFVSTHMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIFVSTHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9naXQvcG9reTtwcm90b2NvbD1naXQKKyAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvZ2l0L3Bva3k7cHJvdG9jb2w9aHR0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgVVJMIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT53Z2V0PC9maWxlbmFtZT4gZmV0Y2hlciwgd2hpY2ggZG9lcyBub3QKKyAgICAgICAgICAgIHVuZGVyc3RhbmQgImdpdCIuCisgICAgICAgICAgICBUaGVyZWZvcmUsIHRoZSBsYXR0ZXIgY2FzZSBpcyB0aGUgY29ycmVjdCBmb3JtIHNpbmNlIHRoZQorICAgICAgICAgICAgR2l0IGZldGNoZXIgZG9lcyBrbm93IGhvdyB0byB1c2UgSFRUUCBhcyBhIHRyYW5zcG9ydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlcyB0aGF0IHNob3cgY29tbW9ubHkgdXNlZCBtaXJyb3IKKyAgICAgICAgICAgIGRlZmluaXRpb25zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTID89ICJcCisgICAgICAgICBienI6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBjdnM6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBoZzovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBvc2M6Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBwNDovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBzdm46Ly8uKi8uKiAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKKworICAgICBNSVJST1JTID0rICJcCisgICAgICAgICBmdHA6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBodHRwOi8vLiovLiogICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiBcCisgICAgICAgICBodHRwczovLy4qLy4qICAgIGh0dHA6Ly9zb21lbWlycm9yLm9yZy9zb3VyY2VzLyBcbiIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEl0IGlzIHVzZWZ1bCB0byBub3RlIHRoYXQgQml0QmFrZSBzdXBwb3J0cworICAgICAgICAgICAgY3Jvc3MtVVJMcy4KKyAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIG1pcnJvciBhIEdpdCByZXBvc2l0b3J5IG9uIGFuIEhUVFAKKyAgICAgICAgICAgIHNlcnZlciBhcyBhIHRhcmJhbGwuCisgICAgICAgICAgICBUaGlzIGlzIHdoYXQgdGhlIDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPiBtYXBwaW5nIGluCisgICAgICAgICAgICB0aGUgcHJldmlvdXMgZXhhbXBsZSBkb2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaW5jZSBuZXR3b3JrIGFjY2Vzc2VzIGFyZSBzbG93LCBCaXRiYWtlIG1haW50YWlucyBhCisgICAgICAgICAgICBjYWNoZSBvZiBmaWxlcyBkb3dubG9hZGVkIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICAgICAgICBBbnkgc291cmNlIGZpbGVzIHRoYXQgYXJlIG5vdCBsb2NhbCAoaS5lLgorICAgICAgICAgICAgZG93bmxvYWRlZCBmcm9tIHRoZSBJbnRlcm5ldCkgYXJlIHBsYWNlZCBpbnRvIHRoZSBkb3dubG9hZAorICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlsZSBpbnRlZ3JpdHkgaXMgb2Yga2V5IGltcG9ydGFuY2UgZm9yIHJlcHJvZHVjaW5nIGJ1aWxkcy4KKyAgICAgICAgICAgIEZvciBub24tbG9jYWwgYXJjaGl2ZSBkb3dubG9hZHMsIHRoZSBmZXRjaGVyIGNvZGUgY2FuIHZlcmlmeQorICAgICAgICAgICAgU0hBLTI1NiBhbmQgTUQ1IGNoZWNrc3VtcyB0byBlbnN1cmUgdGhlIGFyY2hpdmVzIGhhdmUgYmVlbgorICAgICAgICAgICAgZG93bmxvYWRlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlc2UgY2hlY2tzdW1zIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgdmFyZmxhZ3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSVttZDVzdW1dID0gIjxyZXBsYWNlYWJsZT52YWx1ZTwvcmVwbGFjZWFibGU+IgorICAgICBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiPHJlcGxhY2VhYmxlPnZhbHVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgY2hlY2tzdW1zIGFzIHBhcmFtZXRlcnMgb24gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFzIHNob3duIGJlbG93OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9mb29iYXIudGFyLmJ6MjttZDVzdW09NGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBtdWx0aXBsZSBVUklzIGV4aXN0LCB5b3UgY2FuIHNwZWNpZnkgdGhlIGNoZWNrc3VtcyBlaXRoZXIKKyAgICAgICAgICAgIGRpcmVjdGx5IGFzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBvciB5b3UgY2FuIG5hbWUgdGhlIFVSTHMuCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN5bnRheCBzaG93cyBob3cgeW91IG5hbWUgdGhlIFVSSXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2Zvb2Jhci50YXIuYnoyO25hbWU9Zm9vIgorICAgICBTUkNfVVJJW2Zvby5tZDVzdW1dID0gNGE4ZTBmMjM3ZTk2MWZkNzc4NWQxOWQwN2ZkYjk5NGQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFmdGVyIGEgZmlsZSBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCBoYXMgaGFkIGl0cyBjaGVja3N1bSBjaGVja2VkLAorICAgICAgICAgICAgYSAiLmRvbmUiIHN0YW1wIGlzIHBsYWNlZCBpbiA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhpcyBzdGFtcCBkdXJpbmcgc3Vic2VxdWVudCBidWlsZHMgdG8gYXZvaWQKKyAgICAgICAgICAgIGRvd25sb2FkaW5nIG9yIGNvbXBhcmluZyBhIGNoZWNrc3VtIGZvciB0aGUgZmlsZSBhZ2Fpbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCBsb2NhbCBzdG9yYWdlIGlzIHNhZmUgZnJvbSBkYXRhIGNvcnJ1cHRpb24uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB3ZXJlIG5vdCB0aGUgY2FzZSwgdGhlcmUgd291bGQgYmUgYmlnZ2VyIGlzc3VlcyB0byB3b3JyeSBhYm91dC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVFJJQ1RfQ0hFQ0tTVU0nPjxmaWxlbmFtZT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGlzIHNldCwgYW55IGRvd25sb2FkIHdpdGhvdXQgYSBjaGVja3N1bSB0cmlnZ2VycyBhbgorICAgICAgICAgICAgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05PX05FVFdPUksnPjxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBtYWtlIGFueSBhdHRlbXB0ZWQgbmV0d29yayBhY2Nlc3MgYSBmYXRhbAorICAgICAgICAgICAgZXJyb3IsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgY2hlY2tpbmcgdGhhdCBtaXJyb3JzIGFyZSBjb21wbGV0ZQorICAgICAgICAgICAgYXMgd2VsbCBhcyBvdGhlciB0aGluZ3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmItdGhlLXVucGFjayc+CisgICAgICAgIDx0aXRsZT5UaGUgVW5wYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSB1bnBhY2sgcHJvY2VzcyB1c3VhbGx5IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGRvd25sb2FkLgorICAgICAgICAgICAgRm9yIGFsbCBVUkxzIGV4Y2VwdCBHaXQgVVJMcywgQml0QmFrZSB1c2VzIHRoZSBjb21tb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiBtZXRob2QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZXhpc3QgdGhhdCB5b3UgY2FuIHNwZWNpZnkgd2l0aGluIHRoZQorICAgICAgICAgICAgVVJMIHRvIGdvdmVybiB0aGUgYmVoYXZpb3Igb2YgdGhlIHVucGFjayBzdGFnZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bnBhY2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgVVJMIGNvbXBvbmVudHMgYXJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlIGNvbXBvbmVudHMKKyAgICAgICAgICAgICAgICAgICAgYXJlIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjAiLCB0aGUgdW5wYWNrIHN0YWdlIGxlYXZlcyB0aGUgZmlsZSBhbG9uZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgYW4gYXJjaGl2ZSB0byBiZQorICAgICAgICAgICAgICAgICAgICBjb3BpZWQgaW4gYW5kIG5vdCBiZSB1bnBhY2tlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kb3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0byA8ZmlsZW5hbWU+LnppcDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmphcjwvZmlsZW5hbWU+IGZpbGVzIGFuZCBzcGVjaWZpZXMgd2hldGhlciB0bworICAgICAgICAgICAgICAgICAgICB1c2UgRE9TIGxpbmUgZW5kaW5nIGNvbnZlcnNpb24gb24gdGV4dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5iYXNlcGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdHMgdGhlIHVucGFjayBzdGFnZSB0byBzdHJpcCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZyb20gdGhlIHNvdXJjZSBwYXRoIHdoZW4gdW5wYWNraW5nLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnN1YmRpcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVbnBhY2tzIHRoZSBzcGVjaWZpYyBVUkwgdG8gdGhlIHNwZWNpZmllZCBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoZSB1bnBhY2sgY2FsbCBhdXRvbWF0aWNhbGx5IGRlY29tcHJlc3NlcyBhbmQgZXh0cmFjdHMgZmlsZXMKKyAgICAgICAgICAgIHdpdGggIi5aIiwgIi56IiwgIi5neiIsICIueHoiLCAiLnppcCIsICIuamFyIiwgIi5pcGsiLCAiLnJwbSIuCisgICAgICAgICAgICAiLnNycG0iLCAiLmRlYiIgYW5kICIuYnoyIiBleHRlbnNpb25zIGFzIHdlbGwgYXMgdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgICAgIG9mIHRhcmJhbGwgZXh0ZW5zaW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkLCB0aGUgR2l0IGZldGNoZXIgaGFzIGl0cyBvd24gdW5wYWNrIG1ldGhvZCB0aGF0CisgICAgICAgICAgICBpcyBvcHRpbWl6ZWQgdG8gd29yayB3aXRoIEdpdCB0cmVlcy4KKyAgICAgICAgICAgIEJhc2ljYWxseSwgdGhpcyBtZXRob2Qgd29ya3MgYnkgY2xvbmluZyB0aGUgdHJlZSBpbnRvIHRoZSBmaW5hbAorICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgY29tcGxldGVkIHVzaW5nIHJlZmVyZW5jZXMgc28gdGhhdCB0aGVyZSBpcworICAgICAgICAgICAgb25seSBvbmUgY2VudHJhbCBjb3B5IG9mIHRoZSBHaXQgbWV0YWRhdGEgbmVlZGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JiLWZldGNoZXJzJz4KKyAgICAgICAgPHRpdGxlPkZldGNoZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIG1lbnRpb25lZCBlYXJsaWVyLCB0aGUgVVJMIHByZWZpeCBkZXRlcm1pbmVzIHdoaWNoCisgICAgICAgICAgICBmZXRjaGVyIHN1Ym1vZHVsZSBCaXRCYWtlIHVzZXMuCisgICAgICAgICAgICBFYWNoIHN1Ym1vZHVsZSBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgVVJMIHBhcmFtZXRlcnMsCisgICAgICAgICAgICB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtZmlsZS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhbCBmaWxlIGZldGNoZXIgKDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBVUkxzIHRoYXQgYmVnaW4gd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lIHlvdSBzcGVjaWZ5IHdpdGhpbiB0aGUgVVJMIGNhbiBiZQorICAgICAgICAgICAgICAgIGVpdGhlciBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGEgZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZW5hbWUgaXMgcmVsYXRpdmUsIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgc2FtZSB3YXkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gZmluZCBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgICAgICBGYWlsaW5nIHRoYXQsCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRElSJz48ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIHJlbGF0aXZlIGZpbGUuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU0RJUjwvZmlsZW5hbWU+IGlzIGRlcHJlY2F0ZWQgYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSByZXBsYWNlZCB3aXRoIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiBpcyBsaWtlbHkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCwgeW91IHNob3VsZCBub3QgdXNlIHRoaXMgdmFyaWFibGUgaW4gYW55IG5ldyBjb2RlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgZm91bmQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBpcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgYnkgdGhlIHRpbWUgdGhlIDxmaWxlbmFtZT5kb3dubG9hZCgpPC9maWxlbmFtZT4gbWV0aG9kIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYSBkaXJlY3RvcnksIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICAgICAgdW5wYWNrZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIGV4YW1wbGUgVVJMcywgdGhlIGZpcnN0IHJlbGF0aXZlIGFuZAorICAgICAgICAgICAgICAgIHRoZSBzZWNvbmQgYWJzb2x1dGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZpbGU6Ly9yZWxhdGl2ZWZpbGUucGF0Y2giCisgICAgIFNSQ19VUkkgPSAiZmlsZTovLy9Vc2Vycy9pY2gvdmVyeV9pbXBvcnRhbnRfc29mdHdhcmUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2h0dHAtZnRwLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkhUVFAvRlRQIHdnZXQgZmV0Y2hlciAoPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cHM6Ly88L2ZpbGVuYW1lPik8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZldGNoZXIgb2J0YWlucyBmaWxlcyBmcm9tIHdlYiBhbmQgRlRQIHNlcnZlcnMuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxseSwgdGhlIGZldGNoZXIgdXNlcyB0aGUgd2dldCB1dGlsaXR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbmQgcGFyYW1ldGVycyB1c2VkIGFyZSBzcGVjaWZpZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFVENIQ01EX3dnZXQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgd2hpY2ggZGVmYXVsdHMKKyAgICAgICAgICAgICAgICB0byBzZW5zaWJsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgc3VwcG9ydHMgYSBwYXJhbWV0ZXIgImRvd25sb2FkZmlsZW5hbWUiIHRoYXQKKyAgICAgICAgICAgICAgICBhbGxvd3MgdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZSB0byBiZSBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZG93bmxvYWRlZCBmaWxlIGlzIHVzZWZ1bAorICAgICAgICAgICAgICAgIGZvciBhdm9pZGluZyBjb2xsaXNpb25zIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIGZpbGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGUgVVJMcyBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL29lLmhhbmRoZWxkcy5vcmcvbm90X3RoZXJlLmFhYyIKKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly9vZS5oYW5kaGVsZHMub3JnL25vdF90aGVyZV9hc193ZWxsLmFhYyIKKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly95b3VAb2UuaGFuZGhlbGRzLm9yZy9ob21lL3lvdS9zZWNyZXQucGxhbiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgIEJlY2F1c2UgVVJMIHBhcmFtZXRlcnMgYXJlIGRlbGltaXRlZCBieSBzZW1pLWNvbG9ucywgdGhpcyBjYW4KKyAgICAgICAgICAgICAgIGludHJvZHVjZSBhbWJpZ3VpdHkgd2hlbiBwYXJzaW5nIFVSTHMgdGhhdCBhbHNvIGNvbnRhaW4gc2VtaS1jb2xvbnMsCisgICAgICAgICAgICAgICBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2FiYzEyMy5vcmcvZ2l0Lz9wPWdjYy9nY2MuZ2l0O2E9c25hcHNob3Q7aD1hNWRkNDciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgU3VjaCBVUkxzIHNob3VsZCBzaG91bGQgYmUgbW9kaWZpZWQgYnkgcmVwbGFjaW5nIHNlbWktY29sb25zIHdpdGggJyZhbXA7JyBjaGFyYWN0ZXJzOgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMgdGhpcyBzaG91bGQgd29yay4gVHJlYXRpbmcgc2VtaS1jb2xvbnMgYW5kICcmYW1wOycgaW4gcXVlcmllcworICAgICAgICAgICAgICAgIGlkZW50aWNhbGx5IGlzIHJlY29tbWVuZGVkIGJ5IHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIChXM0MpLgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgVVJMLCB5b3UgbWF5IGhhdmUgdG8gc3BlY2lmeSB0aGUgbmFtZQorICAgICAgICAgICAgICAgIG9mIHRoZSBkb3dubG9hZGVkIGZpbGUgYXMgd2VsbDoKKyAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9hYmMxMjMub3JnL2dpdC8/cD1nY2MvZ2NjLmdpdCZhbXA7YT1zbmFwc2hvdCZhbXA7aD1hNWRkNDc7ZG93bmxvYWRmaWxlbmFtZT1teWZpbGUuYnoyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjdnMtZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+Q1ZTIGZldGNoZXIgKDxmaWxlbmFtZT4oY3ZzOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzdWJtb2R1bGUgaGFuZGxlcyBjaGVja2luZyBvdXQgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBDVlMgdmVyc2lvbiBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSBpdCB1c2luZyBhIG51bWJlciBvZiBkaWZmZXJlbnQgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkZFVENIQ01EX2N2czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSB0byB1c2Ugd2hlbiBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG5hbWUgaXMgdXN1YWxseSAiY3ZzIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBDVlMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpYWwgdmFsdWUgb2YgIm5vdyIgY2F1c2VzIHRoZSBjaGVja291dCB0bworICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXBkYXRlZCBvbiBldmVyeSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxsaW5rIGxpbmtlbmQ9J3Zhci1DVlNESVInPjxmaWxlbmFtZT5DVlNESVI8L2ZpbGVuYW1lPjwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGVyZSBhIHRlbXBvcmFyeSBjaGVja291dCBpcyBzYXZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBvZnRlbiA8ZmlsZW5hbWU+RExfRElSL2N2czwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9IT1NUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHRvIHVzZSBhcyBhICJwcm94eT0iIHBhcmFtZXRlciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jdnM8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPkNWU19QUk9YWV9QT1JUPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3J0IG51bWJlciB0byB1c2UgYXMgYSAicHJveHlwb3J0PSIgcGFyYW1ldGVyIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmN2czwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgVVJMIHN5bnRheCwKKyAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gY29uZmlndXJlIHRoZSBmZXRjaGVyIHdpdGggdmFyaW91cyBVUkwgcGFyYW1ldGVyczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1ldGhvZCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCBvdmVyIHdoaWNoIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIENWUyBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHByb3RvY29sIGlzICJwc2VydmVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmICJtZXRob2QiIGlzIHNldCB0byAiZXh0IiwgQml0QmFrZSBleGFtaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJyc2giIHBhcmFtZXRlciBhbmQgc2V0cyA8ZmlsZW5hbWU+Q1ZTX1JTSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgImRpciIgZm9yIGxvY2FsIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbW9kdWxlIHRvIGNoZWNrIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHN1cHBseSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0YWciOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmliZXMgd2hpY2ggQ1ZTIFRBRyBzaG91bGQgYmUgdXNlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBUQUcgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGF0ZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGRhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBubyAiZGF0ZSIgaXMgc3BlY2lmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNEQVRFJz48ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBjaGVja291dCBhIHNwZWNpZmljIGRhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lhbCB2YWx1ZSBvZiAibm93IiBjYXVzZXMgdGhlIGNoZWNrb3V0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkIG9uIGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImxvY2FsZGlyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCB0byByZW5hbWUgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZWx5LCB5b3UgYXJlIHJlbmFtaW5nIHRoZSBvdXRwdXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0byB3aGljaCB0aGUgbW9kdWxlIGlzIHVucGFja2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBmb3JjaW5nIHRoZSBtb2R1bGUgaW50byBhIHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSByZWxhdGl2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNWU0RJUic+PGZpbGVuYW1lPkNWU0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJyc2giPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgIm1ldGhvZCIgcGFyYW1ldGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InNjbWRhdGEiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIENWUyBtZXRhZGF0YSB0byBiZSBtYWludGFpbmVkIGluIHRoZSB0YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmV0Y2hlciBjcmVhdGVzIHdoZW4gc2V0IHRvICJrZWVwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJiYWxsIGlzIGV4cGFuZGVkIGludG8gdGhlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIENWUyBtZXRhZGF0YSBpcyByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ImZ1bGxwYXRoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgd2hldGhlciB0aGUgcmVzdWx0aW5nIGNoZWNrb3V0IGlzIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIGxldmVsLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgb3IgaXMgYXQgZGVlcGVyCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJub3JlY3Vyc2UiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIGZldGNoZXIgdG8gb25seSBjaGVja291dCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aCBubyByZWN1cnNlIGludG8gYW55IHN1YmRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InBvcnQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcG9ydCB0byB3aGljaCB0aGUgQ1ZTIHNlcnZlciBjb25uZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZSBVUkxzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJjdnM6Ly9DVlNST09UO21vZHVsZT1teW1vZHVsZTt0YWc9c29tZS12ZXJzaW9uO21ldGhvZD1leHQiCisgICAgIFNSQ19VUkkgPSAiY3ZzOi8vQ1ZTUk9PVDttb2R1bGU9bXltb2R1bGU7ZGF0ZT0yMDA2MDEyNjtsb2NhbGRpcj11c2V0aGF0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzdm4tZmV0Y2hlcic+CisgICAgICAgICAgICA8dGl0bGU+U3VidmVyc2lvbiAoU1ZOKSBGZXRjaGVyICg8ZmlsZW5hbWU+c3ZuOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBmZXRjaGVzIGNvZGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBTdWJ2ZXJzaW9uIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGlzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9zdm48L2ZpbGVuYW1lPiwgd2hpY2ggZGVmYXVsdHMKKyAgICAgICAgICAgICAgICB0byAic3ZuIi4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlcidzIHRlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzZXQgYnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1ZORElSJz48ZmlsZW5hbWU+U1ZORElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgPGZpbGVuYW1lPkRMX0RJUi9zdm48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im1vZHVsZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBzdm4gbW9kdWxlIHRvIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgcHJvdmlkZSB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyBwYXJhbWV0ZXIgYXMgdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSByZXBvc2l0b3J5IGRhdGEgeW91IHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icHJvdG9jb2wiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJvdG9jb2wgdG8gdXNlLCB3aGljaCBkZWZhdWx0cyB0byAic3ZuIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIG9wdGlvbnMgYXJlICJzdm4rc3NoIiBhbmQgInJzaCIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgInJzaCIsIHRoZSAicnNoIiBwYXJhbWV0ZXIgaXMgYWxzbyB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJldiI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdG8gY2hlY2tvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iZGF0ZSI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB0byBjaGVja291dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljIHJldmlzaW9ucyBhcmUgZ2VuZXJhbGx5IG11Y2ggc2FmZXIgdG8gY2hlY2tvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGJ5IGRhdGUgYXMgdGhleSBkbyBub3QgaW52b2x2ZSB0aW1lem9uZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIHRoZXkgYXJlIG11Y2ggbW9yZSBkZXRlcm1pbmlzdGljKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzY21kYXRhIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSDigJwuc3Zu4oCdIGRpcmVjdG9yaWVzIHRvIGJlIGF2YWlsYWJsZSBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUtdGltZSB3aGVuIHNldCB0byAia2VlcCIuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJ0cmFuc3BvcnR1c2VyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiByZXF1aXJlZCwgc2V0cyB0aGUgdXNlcm5hbWUgZm9yIHRoZSB0cmFuc3BvcnQuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHBhcmFtZXRlciBpcyBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0cmFuc3BvcnQgdXNlcm5hbWUgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXJuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSBtYWluIFVSTCwgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBzdWJ2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0d28gZXhhbXBsZXMgdXNpbmcgc3ZuOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJzdm46Ly9zdm4ub2UuaGFuZGhlbGRzLm9yZy9zdm47bW9kdWxlPXZpcDtwcm90bz1odHRwO3Jldj02NjciCisgICAgIFNSQ19VUkkgPSAic3ZuOi8vc3ZuLm9lLmhhbmRoZWxkcy5vcmcvc3ZuLzttb2R1bGU9b3BpZTtwcm90bz1zdm4rc3NoO2RhdGU9MjAwNjAxMjYiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dpdC1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5HaXQgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gdGhlIEdpdAorICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgZmV0Y2hlciB3b3JrcyBieSBjcmVhdGluZyBhIGJhcmUgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVtb3RlIGludG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR0lURElSJz48ZmlsZW5hbWU+R0lURElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzdWFsbHkgPGZpbGVuYW1lPkRMX0RJUi9naXQyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBiYXJlIGNsb25lIGlzIHRoZW4gY2xvbmVkIGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICB1bnBhY2sgc3RhZ2Ugd2hlbiBhIHNwZWNpZmljIHRyZWUgaXMgY2hlY2tlZCBvdXQuCisgICAgICAgICAgICAgICAgVGhpcyBpcyBkb25lIHVzaW5nIGFsdGVybmF0ZXMgYW5kIGJ5IHJlZmVyZW5jZSB0bworICAgICAgICAgICAgICAgIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlIGRhdGEgb24gdGhlIGRpc2sgYW5kCisgICAgICAgICAgICAgICAgbWFrZSB0aGUgdW5wYWNrIHByb2Nlc3MgZmFzdC4KKyAgICAgICAgICAgICAgICBUaGUgZXhlY3V0YWJsZSB1c2VkIGNhbiBiZSBzZXQgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRVRDSENNRF9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJwcm90b2NvbCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCB1c2VkIHRvIGZldGNoIHRoZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzICJnaXQiIHdoZW4gYSBob3N0bmFtZSBpcyBzZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIGhvc3RuYW1lIGlzIG5vdCBzZXQsIHRoZSBHaXQgcHJvdG9jb2wgaXMgImZpbGUiLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSAiaHR0cCIsICJodHRwcyIsICJzc2giIGFuZCAicnN5bmMiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Im5vY2hlY2tvdXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBub3QgY2hlY2tvdXQgc291cmNlIGNvZGUgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNraW5nIHdoZW4gc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIFVSTCB3aGVyZSB0aGVyZSBpcyBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZSB0byBjaGVja291dCBjb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+InJlYmFzZWFibGUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgY2FuIGJlIHJlYmFzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHNldCB0aGlzIHBhcmFtZXRlciB0byAiMSIgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9ucyBjYW4gYmVjb21lIGRldGFjaGVkIGZyb20gYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBzb3VyY2UgbWlycm9yIHRhcmJhbGwgaXMgZG9uZSBwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uLCB3aGljaCBoYXMgYSBsb3NzIG9mIGVmZmljaWVuY3kuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWJhc2luZyB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgY291bGQgY2F1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHJldmlzaW9uIHRvIGRpc2FwcGVhciBmcm9tIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gcmVtaW5kcyB0aGUgZmV0Y2hlciB0byBwcmVzZXJ2ZSB0aGUgbG9jYWwgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcmVmdWxseSBmb3IgZnV0dXJlIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4ibm9icmFuY2giOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBub3QgY2hlY2sgdGhlIFNIQSB2YWxpZGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCB3aGVuIHNldCB0byAiMSIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiMCIuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyBvcHRpb24gZm9yIHRoZSByZWNpcGUgdGhhdCByZWZlcnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21taXQgdGhhdCBpcyB2YWxpZCBmb3IgYSB0YWcgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJiYXJlY2xvbmUiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUZWxscyB0aGUgZmV0Y2hlciB0byBjbG9uZSBhIGJhcmUgY2xvbmUgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSB3aXRob3V0IGNoZWNraW5nIG91dCBhIHdvcmtpbmcgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIHJhdyBHaXQgbWV0YWRhdGEgaXMgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpbXBsaWVzIHRoZSAibm9jaGVja291dCIgcGFyYW1ldGVyIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iYnJhbmNoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJyYW5jaChlcykgb2YgdGhlIEdpdCB0cmVlIHRvIGNsb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdW5zZXQsIHRoaXMgaXMgYXNzdW1lZCB0byBiZSAibWFzdGVyIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnJhbmNoIHBhcmFtZXRlcnMgbXVjaCBtYXRjaCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4icmV2Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIHRvIHVzZSBmb3IgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgIm1hc3RlciIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4idGFnIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgdGFnIHRvIHVzZSBmb3IgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gY29ycmVjdGx5IHJlc29sdmUgdGFncywgQml0QmFrZSBtdXN0IGFjY2VzcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhhdCByZWFzb24sIHRhZ3MgYXJlIG9mdGVuIG5vdCB1c2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgZmFyIGFzIEdpdCBpcyBjb25jZXJuZWQsIHRoZSAidGFnIiBwYXJhbWV0ZXIgYmVoYXZlcworICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgdGhlICJyZXYiIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzdWJwYXRoIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTGltaXRzIHRoZSBjaGVja291dCB0byBhIHNwZWNpZmljIHN1YnBhdGggb2YgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgd2hvbGUgdHJlZSBpcyBjaGVja2VkIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJkZXN0c3VmZml4Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhdGggaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGNoZWNrb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHBhdGggaXMgPGZpbGVuYW1lPmdpdC88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZSBVUkxzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9naXQub2UuaGFuZGhlbGRzLm9yZy9naXQvdmlwLmdpdDt0YWc9dmVyc2lvbi0xIgorICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5vZS5oYW5kaGVsZHMub3JnL2dpdC92aXAuZ2l0O3Byb3RvY29sPWh0dHAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2dpdHNtLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkdpdCBTdWJtb2R1bGUgRmV0Y2hlciAoPGZpbGVuYW1lPmdpdHNtOi8vPC9maWxlbmFtZT4pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmZXRjaGVyIHN1Ym1vZHVsZSBpbmhlcml0cyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dpdC1mZXRjaGVyJz5HaXQgZmV0Y2hlcjwvbGluaz4gYW5kIGV4dGVuZHMKKyAgICAgICAgICAgICAgICB0aGF0IGZldGNoZXIncyBiZWhhdmlvciBieSBmZXRjaGluZyBhIHJlcG9zaXRvcnkncyBzdWJtb2R1bGVzLgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGlzIHBhc3NlZCB0byB0aGUgR2l0IGZldGNoZXIgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnaXQtZmV0Y2hlcic+R2l0IEZldGNoZXIgKDxmaWxlbmFtZT5naXQ6Ly88L2ZpbGVuYW1lPik8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Ob3RlcyBhbmQgV2FybmluZ3M8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNsZWFuIGEgcmVjaXBlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICc8ZmlsZW5hbWU+Z2l0Oi8vPC9maWxlbmFtZT4nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgJzxmaWxlbmFtZT5naXRzbTovLzwvZmlsZW5hbWU+JyBVUkxzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgR2l0IFN1Ym1vZHVsZXMgZmV0Y2hlciBpcyBub3QgYSBjb21wbGV0ZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmZXRjaGVyIGhhcyBrbm93biBpc3N1ZXMgd2hlcmUgaXQgZG9lcyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIHNvdXJjZSBtaXJyb3JpbmcgaW5mcmFzdHJ1Y3R1cmUgcHJvcGVybHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2xlYXJjYXNlLWZldGNoZXInPgorICAgICAgICAgICAgPHRpdGxlPkNsZWFyQ2FzZSBGZXRjaGVyICg8ZmlsZW5hbWU+Y2NyYzovLzwvZmlsZW5hbWU+KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmV0Y2hlciBzdWJtb2R1bGUgZmV0Y2hlcyBjb2RlIGZyb20gYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmF0aW9uYWxfQ2xlYXJDYXNlJz5DbGVhckNhc2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIGZldGNoZXIsIG1ha2Ugc3VyZSB5b3VyIHJlY2lwZSBoYXMgcHJvcGVyCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHNldHRpbmdzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiY2NyYzovL2NjLmV4YW1wbGUub3JnL2NjcmM7dm9iPS9leGFtcGxlX3ZvYjttb2R1bGU9L2V4YW1wbGVfbW9kdWxlIgorICAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgorICAgICBQViA9ICIke0BkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpLnJlcGxhY2UoIi8iLCAiKyIpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGZldGNoZXIgdXNlcyB0aGUgPGZpbGVuYW1lPnJjbGVhcnRvb2w8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24KKyAgICAgICAgICAgICAgICB3aGljaCBvbmUgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIG9wdGlvbnMgZm9yIHRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnZvYjwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZGluZyAiLyIgY2hhcmFjdGVyLCBvZiB0aGUgQ2xlYXJDYXNlIFZPQi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kaW5nICIvIiBjaGFyYWN0ZXIsIGluIHRoZSBzZWxlY3RlZCBWT0IuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSBjb21iaW5lZCB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5sb2FkPC9maWxlbmFtZT4gcnVsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2aWV3IGNvbmZpZyBzcGVjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+dm9iPC9maWxlbmFtZT4gYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiB2YWx1ZXMgZnJvbSB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5pbmcgdGhvc2UgdmFsdWVzIHJlc3VsdHMgaW4gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxvYWQgL2V4YW1wbGVfdm9iL2V4YW1wbGVfbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnByb3RvPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwcm90b2NvbCwgd2hpY2ggY2FuIGJlIGVpdGhlciA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgZmV0Y2hlciBjcmVhdGVzIGEgY29uZmlndXJhdGlvbiBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoaXMgc3BlY2lmaWNhdGlvbiB3cml0dGVuIHRvIGFuIGFyZWEgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICB1c2UgdGhlIDxmaWxlbmFtZT5DQ0FTRV9DVVNUT01fQ09ORklHX1NQRUM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIHRvIGRlZmluZSB3aGVyZSB0aGUgc3BlY2lmaWNhdGlvbiBpcyB3cml0dGVuLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IGxvc2VzIGl0cyBmdW5jdGlvbmFsaXR5IGlmIHlvdQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBpcyBzdGlsbCB1c2VkIHRvIGxhYmVsIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXZlIGFmdGVyIGEgZmV0Y2ggZXZlbiB0aG91Z2ggaXQgZG9lcyBub3QgZGVmaW5lIHdoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgZmV0Y2hlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIGEgY291cGxlIG9mIG90aGVyIGJlaGF2aW9ycyB3b3J0aCBtZW50aW9uaW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgPGZpbGVuYW1lPmNsZWFydG9vbDwvZmlsZW5hbWU+LCB0aGUgbG9naW4gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhcnRvb2w8L2ZpbGVuYW1lPiBpcyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9naW4gcmVxdWlyZSBubyBzcGVjaWFsIHN0ZXBzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSA8ZmlsZW5hbWU+cmNsZWFydG9vbDwvZmlsZW5hbWU+IHdpdGggYXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMsIGFuICJyY2xlYXJ0b29sIGxvZ2luIiBpcyBuZWNlc3NhcnkgYmVmb3JlIHVzaW5nIHRoZSBmZXRjaGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3RoZXItZmV0Y2hlcnMnPgorICAgICAgICAgICAgPHRpdGxlPk90aGVyIEZldGNoZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmV0Y2ggc3VibW9kdWxlcyBhbHNvIGV4aXN0IGZvciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJhemFhciAoPGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcmNlICg8ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUcmVlcyB1c2luZyBHaXQgQW5uZXggKDxmaWxlbmFtZT5naXRhbm5leDovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY3VyZSBGVFAgKDxmaWxlbmFtZT5zZnRwOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjdXJlIFNoZWxsICg8ZmlsZW5hbWU+c3NoOi8vPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVwbyAoPGZpbGVuYW1lPnJlcG86Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPU0MgKDxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBNZXJjdXJpYWwgKDxmaWxlbmFtZT5oZzovLzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgTm8gZG9jdW1lbnRhdGlvbiBjdXJyZW50bHkgZXhpc3RzIGZvciB0aGVzZSBsZXNzZXIgdXNlZAorICAgICAgICAgICAgICAgIGZldGNoZXIgc3VibW9kdWxlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgZmluZCB0aGUgY29kZSBoZWxwZnVsIGFuZCByZWFkYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdhdXRvLXJldmlzaW9ucyc+CisgICAgICAgIDx0aXRsZT5BdXRvIFJldmlzaW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSBuZWVkIHRvIGRvY3VtZW50IDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaGVsbG8ueG1sIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzYyOGNmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbApAQCAtMCwwICsxLDUwNiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxhcHBlbmRpeCBpZD0naGVsbG8td29ybGQtZXhhbXBsZSc+CisgICAgPHRpdGxlPkhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtaGVsbG8td29ybGQnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZSBIZWxsbyBXb3JsZDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2ltcGxlc3QgZXhhbXBsZSBjb21tb25seSB1c2VkIHRvIGRlbW9uc3RyYXRlIGFueSBuZXcKKyAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlIG9yIHRvb2wgaXMgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWxsb193b3JsZF9wcm9ncmFtIj5IZWxsbyBXb3JsZDwvdWxpbms+IgorICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgYXBwZW5kaXggZGVtb25zdHJhdGVzLCBpbiB0dXRvcmlhbCBmb3JtLCBIZWxsbworICAgICAgICAgICAgV29ybGQgd2l0aGluIHRoZSBjb250ZXh0IG9mIEJpdEJha2UuCisgICAgICAgICAgICBUaGUgdHV0b3JpYWwgZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUgYSBuZXcgcHJvamVjdAorICAgICAgICAgICAgYW5kIHRoZSBhcHBsaWNhYmxlIG1ldGFkYXRhIGZpbGVzIG5lY2Vzc2FyeSB0byBhbGxvdworICAgICAgICAgICAgQml0QmFrZSB0byBidWlsZCBpdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdleGFtcGxlLW9idGFpbmluZy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPk9idGFpbmluZyBCaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvYnRhaW5pbmctYml0YmFrZSc+T2J0YWluaW5nIEJpdEJha2U8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiBCaXRCYWtlLgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgc291cmNlIGNvZGUgb24geW91ciBtYWNoaW5lLCB0aGUgQml0QmFrZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFwcGVhcnMgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBscyAtYWwKKyAgICAgdG90YWwgMTAwCisgICAgIGRyd3hyd3hyLXguIDkgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCAuCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IEZlYiAgNCAxMDo0NSAuLgorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAgIDM2NSBOb3YgMjYgMDQ6NTUgQVVUSE9SUworICAgICBkcnd4cnd4ci14LiAyIHdtYXQgd21hdCAgNDA5NiBOb3YgMjYgMDQ6NTUgYmluCisgICAgIGRyd3hyd3hyLXguIDQgd21hdCB3bWF0ICA0MDk2IEphbiAzMSAxMzo0NCBidWlsZAorICAgICAtcnctcnctci0tLiAxIHdtYXQgd21hdCAxNjUwMSBOb3YgMjYgMDQ6NTUgQ2hhbmdlTG9nCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjbGFzc2VzCisgICAgIGRyd3hyd3hyLXguIDIgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjb25mCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBjb250cmliCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0IDE3OTg3IE5vdiAyNiAwNDo1NSBDT1BZSU5HCisgICAgIGRyd3hyd3hyLXguIDMgd21hdCB3bWF0ICA0MDk2IE5vdiAyNiAwNDo1NSBkb2MKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICAgNjkgTm92IDI2IDA0OjU1IC5naXRpZ25vcmUKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgICA4NDkgTm92IDI2IDA0OjU1IEhFQURFUgorICAgICBkcnd4cnd4ci14LiA1IHdtYXQgd21hdCAgNDA5NiBKYW4gMzEgMTM6NDQgbGliCisgICAgIC1ydy1ydy1yLS0uIDEgd21hdCB3bWF0ICAgMTk1IE5vdiAyNiAwNDo1NSBNQU5JRkVTVC5pbgorICAgICAtcnd4cnd4ci14LiAxIHdtYXQgd21hdCAgMzE5NSBKYW4gMzEgMTE6NTcgc2V0dXAucHkKKyAgICAgLXJ3LXJ3LXItLS4gMSB3bWF0IHdtYXQgIDI4ODcgTm92IDI2IDA0OjU1IFRPRE8KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBoYXZlIEJpdEJha2UgY2xvbmVkIHRvCisgICAgICAgICAgICBhIGRpcmVjdG9yeSB0aGF0IG1hdGNoZXMgdGhlIHByZXZpb3VzIGxpc3RpbmcgZXhjZXB0IGZvcgorICAgICAgICAgICAgZGF0ZXMgYW5kIHVzZXIgbmFtZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtYml0YmFrZS1lbnZpcm9ubWVudCc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBCaXRCYWtlIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpcnN0LCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgeW91IGNhbiBydW4gQml0QmFrZS4KKyAgICAgICAgICAgIFNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHdoZXJlIHlvdXIgbG9jYWwgQml0QmFrZQorICAgICAgICAgICAgZmlsZXMgYXJlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vYmluL2JpdGJha2UgLS12ZXJzaW9uCisgICAgIEJpdEJha2UgQnVpbGQgVG9vbCBDb3JlIHZlcnNpb24gMS4yMy4wLCBiaXRiYWtlIHZlcnNpb24gMS4yMy4wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgY29uc29sZSBvdXRwdXQgdGVsbHMgeW91IHdoYXQgdmVyc2lvbiB5b3UgYXJlIHJ1bm5pbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgdG8gcnVuIEJpdEJha2UgaXMgZnJvbSBhIGRpcmVjdG9yeSBvZiB5b3VyCisgICAgICAgICAgICBjaG9pY2UuCisgICAgICAgICAgICBUbyBiZSBhYmxlIHRvIHJ1biBCaXRCYWtlIGZyb20gYW55IGRpcmVjdG9yeSwgeW91IG5lZWQgdG8gYWRkIHRoZQorICAgICAgICAgICAgZXhlY3V0YWJsZSBiaW5hcnkgdG8geW91ciBiaW5hcnkgdG8geW91ciBzaGVsbCdzIGVudmlyb25tZW50CisgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgRmlyc3QsIGxvb2sgYXQgeW91ciBjdXJyZW50IDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAkUEFUSAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTmV4dCwgYWRkIHRoZSBkaXJlY3RvcnkgbG9jYXRpb24gZm9yIHRoZSBCaXRCYWtlIGJpbmFyeSB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhZGRzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgdG8gdGhlIGZyb250IG9mIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGV4cG9ydCBQQVRIPS9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2JpbjokUEFUSAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IHNob3VsZCBub3cgYmUgYWJsZSB0byBlbnRlciB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2hpbGUgd29ya2luZyBmcm9tIGFueSBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndGhlLWhlbGxvLXdvcmxkLWV4YW1wbGUnPgorICAgICAgICA8dGl0bGU+VGhlIEhlbGxvIFdvcmxkIEV4YW1wbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG92ZXJhbGwgZ29hbCBvZiB0aGlzIGV4ZXJjaXNlIGlzIHRvIGJ1aWxkIGEKKyAgICAgICAgICAgIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZSB1dGlsaXppbmcgdGFzayBhbmQgbGF5ZXIKKyAgICAgICAgICAgIGNvbmNlcHRzLgorICAgICAgICAgICAgQmVjYXVzZSB0aGlzIGlzIGhvdyBtb2Rlcm4gcHJvamVjdHMgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCB1dGlsaXplIEJpdEJha2UsIHRoZSBleGFtcGxlCisgICAgICAgICAgICBwcm92aWRlcyBhbiBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHRvIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRhcmdldHMsCisgICAgICAgICAgICB0aGUgZXhhbXBsZSBzdGFydHMgd2l0aCBub3RoaW5nIGJ1dCB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCwgd2hpY2ggY2F1c2VzIEJpdEJha2UgdG8gZmFpbCBhbmQgcmVwb3J0IHByb2JsZW1zLgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgcHJvZ3Jlc3NlcyBieSBhZGRpbmcgcGllY2VzIHRvIHRoZSBidWlsZCB0bworICAgICAgICAgICAgZXZlbnR1YWxseSBjb25jbHVkZSB3aXRoIGEgd29ya2luZywgbWluaW1hbCAiSGVsbG8gV29ybGQiCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGlsZSBldmVyeSBhdHRlbXB0IGlzIG1hZGUgdG8gZXhwbGFpbiB3aGF0IGlzIGhhcHBlbmluZyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBleGFtcGxlLCB0aGUgZGVzY3JpcHRpb25zIGNhbm5vdCBjb3ZlciBldmVyeXRoaW5nLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIEFsc28sIHlvdSBjYW4gYWN0aXZlbHkgcGFydGljaXBhdGUgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPjwvdWxpbms+CisgICAgICAgICAgICBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCB0aGUgQml0QmFrZSBidWlsZCB0b29sLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgd2FzIGluc3BpcmVkIGJ5IGFuZCBkcmV3IGhlYXZpbHkgZnJvbSB0aGVzZSBzb3VyY2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS95b2N0b0B5b2N0b3Byb2plY3Qub3JnL21zZzA5Mzc5Lmh0bWwiPk1haWxpbmcgTGlzdCBwb3N0IC0gVGhlIEJpdEJha2UgZXF1aXZhbGVudCBvZiAiSGVsbG8sIFdvcmxkISI8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9oYW1iZWRkZWQub3JnL2Jsb2cvMjAxMi8xMS8yNC9mcm9tLWJpdGJha2UtaGVsbG8td29ybGQtdG8tYW4taW1hZ2UvIj5IYW1iZWRkZWQgTGludXggYmxvZyBwb3N0IC0gRnJvbSBCaXRiYWtlIEhlbGxvIFdvcmxkIHRvIGFuIEltYWdlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgc3RhdGVkIGVhcmxpZXIsIHRoZSBnb2FsIG9mIHRoaXMgZXhhbXBsZQorICAgICAgICAgICAgaXMgdG8gZXZlbnR1YWxseSBjb21waWxlICJIZWxsbyBXb3JsZCIuCisgICAgICAgICAgICBIb3dldmVyLCBpdCBpcyB1bmtub3duIHdoYXQgQml0QmFrZSBuZWVkcyBhbmQgd2hhdCB5b3UgaGF2ZQorICAgICAgICAgICAgdG8gcHJvdmlkZSBpbiBvcmRlciB0byBhY2hpZXZlIHRoYXQgZ29hbC4KKyAgICAgICAgICAgIFJlY2FsbCB0aGF0IEJpdEJha2UgdXRpbGl6ZXMgdGhyZWUgdHlwZXMgb2YgbWV0YWRhdGEgZmlsZXM6CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjb25maWd1cmF0aW9uLWZpbGVzJz5Db25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NsYXNzZXMnPkNsYXNzZXM8L2xpbms+LCBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlY2lwZXMnPlJlY2lwZXM8L2xpbms+LgorICAgICAgICAgICAgQnV0IHdoZXJlIGRvIHRoZXkgZ28/CisgICAgICAgICAgICBIb3cgZG9lcyBCaXRCYWtlIGZpbmQgdGhlbT8KKyAgICAgICAgICAgIEJpdEJha2UncyBlcnJvciBtZXNzYWdpbmcgaGVscHMgeW91IGFuc3dlciB0aGVzZSB0eXBlcyBvZiBxdWVzdGlvbnMKKyAgICAgICAgICAgIGFuZCBoZWxwcyB5b3UgYmV0dGVyIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGlzIGdvaW5nIG9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIGNvbXBsZXRlICJIZWxsbyBXb3JsZCIgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgUHJvamVjdCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBGaXJzdCwgc2V0IHVwIGEgZGlyZWN0b3J5IGZvciB0aGUgIkhlbGxvIFdvcmxkIiBwcm9qZWN0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgaG93IHlvdSBjYW4gZG8gc28gaW4geW91ciBob21lIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgfi9oZWxsbworICAgICAkIGNkIH4vaGVsbG8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZGlyZWN0b3J5IHRoYXQgQml0QmFrZSB3aWxsIHVzZSB0byBkbyBhbGwgb2YKKyAgICAgICAgICAgICAgICBpdHMgd29yay4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGRpcmVjdG9yeSB0byBrZWVwIGFsbCB0aGUgbWV0YWZpbGVzIG5lZWRlZAorICAgICAgICAgICAgICAgIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgSGF2aW5nIGEgcHJvamVjdCBkaXJlY3RvcnkgaXMgYSBnb29kIHdheSB0byBpc29sYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBoYXZlIG5vdGhpbmcgYnV0IGEgcHJvamVjdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgUnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHNlZSB3aGF0CisgICAgICAgICAgICAgICAgaXQgZG9lczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBUaGUgQkJQQVRIIHZhcmlhYmxlIGlzIG5vdCBzZXQgYW5kIGJpdGJha2UgZGlkIG5vdAorICAgICBmaW5kIGEgY29uZi9iYmxheWVycy5jb25mIGZpbGUgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLgorICAgICBNYXliZSB5b3UgYWNjaWRlbnRhbGx5IGludm9rZWQgYml0YmFrZSBmcm9tIHRoZSB3cm9uZyBkaXJlY3Rvcnk/CisgICAgIERFQlVHOiBSZW1vdmVkIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50OgorICAgICBHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQsIFhER19DVVJSRU5UX0RFU0tUT1AsCisgICAgIEdOT01FX0tFWVJJTkdfQ09OVFJPTCwgRElTUExBWSwgU1NIX0FHRU5UX1BJRCwgTEFORywgbm9fcHJveHksCisgICAgIFhER19TRVNTSU9OX1BBVEgsIFhBVVRIT1JJVFksIFNFU1NJT05fTUFOQUdFUiwgU0hMVkwsCisgICAgIE1BTkRBVE9SWV9QQVRILCBDT01QSVpfQ09ORklHX1BST0ZJTEUsIFdJTkRPV0lELCBFRElUT1IsCisgICAgIEdQR19BR0VOVF9JTkZPLCBTU0hfQVVUSF9TT0NLLCBHRE1TRVNTSU9OLCBHTk9NRV9LRVlSSU5HX1BJRCwKKyAgICAgWERHX1NFQVRfUEFUSCwgWERHX0NPTkZJR19ESVJTLCBMRVNTT1BFTiwgREJVU19TRVNTSU9OX0JVU19BRERSRVNTLAorICAgICBfLCBYREdfU0VTU0lPTl9DT09LSUUsIERFU0tUT1BfU0VTU0lPTiwgTEVTU0NMT1NFLCBERUZBVUxUU19QQVRILAorICAgICBVQlVOVFVfTUVOVVBST1hZLCBPTERQV0QsIFhER19EQVRBX0RJUlMsIENPTE9SVEVSTSwgTFNfQ09MT1JTCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBtYWpvcml0eSBvZiB0aGlzIG91dHB1dCBpcyBzcGVjaWZpYyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICB0aGF0IGFyZSBub3QgZGlyZWN0bHkgcmVsZXZhbnQgdG8gQml0QmFrZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgdmVyeSBmaXJzdCBtZXNzYWdlIHJlZ2FyZGluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgaXMgcmVsZXZhbnQuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biBCaXRCYWtlLCBpdCBiZWdpbnMgbG9va2luZyBmb3IgbWV0YWRhdGEgZmlsZXMuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHdoYXQgdGVsbHMgQml0QmFrZSB3aGVyZSB0byBsb29rIGZvciB0aG9zZSBmaWxlcy4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaXMgbm90IHNldCBhbmQgeW91IG5lZWQgdG8gc2V0IGl0LgorICAgICAgICAgICAgICAgIFdpdGhvdXQgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LCBCaXRiYWtlIGNhbm5vdAorICAgICAgICAgICAgICAgIGZpbmQgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgIG9yIHJlY2lwZSBmaWxlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBhdCBhbGwuCisgICAgICAgICAgICAgICAgQml0QmFrZSBhbHNvIGNhbm5vdCBmaW5kIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXR0aW5nIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGV4YW1wbGUsIHlvdSBjYW4gc2V0IDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGluIHRoZSBzYW1lIG1hbm5lciB0aGF0IHlvdSBzZXQgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGVhcmxpZXIgaW4gdGhlIGFwcGVuZGl4LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgdGhvdWdoLCB0aGF0IGl0IGlzIG11Y2ggbW9yZSBmbGV4aWJsZSB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIHVwIGluIGEgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgZm9yIGVhY2ggcHJvamVjdC48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+RnJvbSB5b3VyIHNoZWxsLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIHNldCBhbmQKKyAgICAgICAgICAgICAgICBleHBvcnQgdGhlIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgQkJQQVRIPSI8cmVwbGFjZWFibGU+cHJvamVjdGRpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIHlvdXIgYWN0dWFsIHByb2plY3QgZGlyZWN0b3J5IGluIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGF0IGRpcmVjdG9yeSB0byBmaW5kIHRoZSBtZXRhZGF0YSBpdCBuZWVkcyBmb3IKKyAgICAgICAgICAgICAgICB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB5b3VyIHByb2plY3QgZGlyZWN0b3J5LCBkbyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICB0aWxkZSAoIn4iKSBjaGFyYWN0ZXIgYXMgQml0QmFrZSBkb2VzIG5vdCBleHBhbmQgdGhhdCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHNoZWxsIHdvdWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB5b3UgaGF2ZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gZGVmaW5lZCwgcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBFUlJPUjogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5IiwgbGluZSAxNjMsIGluIHdyYXBwZWQKKyAgICAgICAgIHJldHVybiBmdW5jKGZuLCAqYXJncykKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvY29va2VyZGF0YS5weSIsIGxpbmUgMTczLCBpbiBwYXJzZV9jb25maWdfZmlsZQorICAgICAgICAgcmV0dXJuIGJiLnBhcnNlLmhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkiLCBsaW5lIDk5LCBpbiBoYW5kbGUKKyAgICAgICAgIHJldHVybiBoWydoYW5kbGUnXShmbiwgZGF0YSwgaW5jbHVkZSkKKyAgICAgICBGaWxlICIvaG9tZS9zY290dC1sZW5vdm8vYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQ29uZkhhbmRsZXIucHkiLCBsaW5lIDEyMCwgaW4gaGFuZGxlCisgICAgICAgICBhYnNfZm4gPSByZXNvbHZlX2ZpbGUoZm4sIGRhdGEpCisgICAgICAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL3BhcnNlL19faW5pdF9fLnB5IiwgbGluZSAxMTcsIGluIHJlc29sdmVfZmlsZQorICAgICAgICAgcmFpc2UgSU9FcnJvcigiZmlsZSAlcyBub3QgZm91bmQgaW4gJXMiICUgKGZuLCBiYnBhdGgpKQorICAgICBJT0Vycm9yOiBmaWxlIGNvbmYvYml0YmFrZS5jb25mIG5vdCBmb3VuZCBpbiAvaG9tZS9zY290dC1sZW5vdm8vaGVsbG8KKworICAgICBFUlJPUjogVW5hYmxlIHRvIHBhcnNlIGNvbmYvYml0YmFrZS5jb25mOiBmaWxlIGNvbmYvYml0YmFrZS5jb25mIG5vdCBmb3VuZCBpbiAvaG9tZS9zY290dC1sZW5vdm8vaGVsbG8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBzYW1wbGUgb3V0cHV0IHNob3dzIHRoYXQgQml0QmFrZSBjb3VsZCBub3QgZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyB0aGUgZmlyc3QgdGhpbmcgQml0QmFrZSBtdXN0IGZpbmQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgICAgICAgICBBbmQsIHNpbmNlIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSBmb3IgdGhpcyBleGFtcGxlIGlzCisgICAgICAgICAgICAgICAgZW1wdHksIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSA8ZmlsZW5hbWU+Y29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0aW5nIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGluY2x1ZGVzIGEgbnVtYmVyIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgQml0QmFrZSB1c2VzIGZvciBtZXRhZGF0YSBhbmQgcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwgeW91IG5lZWQgdG8gY3JlYXRlIHRoZSBmaWxlIGluIHlvdXIgcHJvamVjdCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5lIHNvbWUga2V5IEJpdEJha2UgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jYW4tb3ZlcnZpZXctb2YtYml0YmFrZWNvbmYnPjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcHJvamVjdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1rZGlyIGNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRnJvbSB3aXRoaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB1c2UKKyAgICAgICAgICAgICAgICBzb21lIGVkaXRvciB0byBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHNvIHRoYXQgaXQgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRNUERJUiAgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz5UT1BESVI8L2xpbms+fS90bXAiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DQUNIRSc+Q0FDSEU8L2xpbms+ICAgPSAiJHtUTVBESVJ9L2NhY2hlIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPlNUQU1QPC9saW5rPiAgID0gIiR7VE1QRElSfS9zdGFtcHMiCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UJz5UPC9saW5rPiAgICAgICA9ICIke1RNUERJUn0vd29yayIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPkI8L2xpbms+ICAgICAgID0gIiR7VE1QRElSfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBlc3RhYmxpc2hlcyBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHRoYXQgQml0QmFrZSB1c2VzIGZvciBidWlsZCBvdXRwdXQgYW5kIGludGVybWVkaWF0ZSBmaWxlcyAob3RoZXIKKyAgICAgICAgICAgICAgICB0aGFuIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzZXRzY2VuZSc+U2V0c2NlbmU8L2xpbms+IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgSGVyZSwgdGhlIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvL3RtcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyBzYWZlbHkgZGVsZXRlIHRoZSA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluIG9yZGVyIHRvIHJlYnVpbGQgYSBCaXRCYWtlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IGZvciB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgcnVuIEJpdEJha2UuCisgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvZiB0aGUgb3RoZXIgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUsIGNsaWNrIG9uIHRoZSBsaW5rcyB0byB0YWtlIHlvdSB0byB0aGUgZGVmaW5pdGlvbnMgaW4KKyAgICAgICAgICAgICAgICB0aGUgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGUgPGZpbGVuYW1lPmNvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGV4aXN0cywgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFnYWluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyQgYml0YmFrZQorRVJST1I6IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE2MywgaW4gd3JhcHBlZAorICAgIHJldHVybiBmdW5jKGZuLCAqYXJncykKKyAgRmlsZSAiL2hvbWUvc2NvdHQtbGVub3ZvL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkiLCBsaW5lIDE3NywgaW4gX2luaGVyaXQKKyAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9CQkhhbmRsZXIucHkiLCBsaW5lIDkyLCBpbiBpbmhlcml0CisgICAgaW5jbHVkZShmbiwgZmlsZSwgbGluZW5vLCBkLCAiaW5oZXJpdCIpCisgIEZpbGUgIi9ob21lL3Njb3R0LWxlbm92by9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSIsIGxpbmUgMTAwLCBpbiBpbmNsdWRlCisgICAgcmFpc2UgUGFyc2VFcnJvcigiQ291bGQgbm90ICUoZXJyb3Jfb3V0KXMgZmlsZSAlKGZuKXMiICUgdmFycygpLCBvbGRmbiwgbGluZW5vKQorUGFyc2VFcnJvcjogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCisKK0VSUk9SOiBVbmFibGUgdG8gcGFyc2UgYmFzZTogUGFyc2VFcnJvciBpbiBjb25maWd1cmF0aW9uIElOSEVSSVRzOiBDb3VsZCBub3QgaW5oZXJpdCBmaWxlIGNsYXNzZXMvYmFzZS5iYmNsYXNzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBzYW1wbGUgb3V0cHV0LCBCaXRCYWtlIGNvdWxkIG5vdCBmaW5kIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIHRoYXQgZmlsZSBuZXh0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y2xhc3Nlcy9iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyBjbGFzcyBmaWxlcyB0byBwcm92aWRlIGNvbW1vbiBjb2RlIGFuZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsbHkgcmVxdWlyZWQgY2xhc3MgZm9yIEJpdEJha2UgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNsYXNzZXMvYmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbXBsaWNpdGx5IGluaGVyaXRlZCBieQorICAgICAgICAgICAgICAgIGV2ZXJ5IHJlY2lwZS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGxvb2tzIGZvciB0aGUgY2xhc3MgaW4gdGhlIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgKGkuZSA8ZmlsZW5hbWU+aGVsbG8vY2xhc3NlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gdGhpcyBleGFtcGxlKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Q3JlYXRlIHRoZSA8ZmlsZW5hbWU+Y2xhc3NlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRS9oZWxsbworICAgICAkIG1rZGlyIGNsYXNzZXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTW92ZSB0byB0aGUgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGJ5IGluc2VydGluZworICAgICAgICAgICAgICAgIHRoaXMgc2luZ2xlIGxpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGR0YXNrIGJ1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIHRhc2sgdGhhdCBCaXRCYWtlIHJ1bnMgaXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICBUaGlzIGlzIGFsbCB0aGUgZXhhbXBsZSBuZWVkcyBpbiBvcmRlciB0byBidWlsZCB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2FuIGhhdmUgbXVjaAorICAgICAgICAgICAgICAgIG1vcmUgZGVwZW5kaW5nIG9uIHdoaWNoIGJ1aWxkIGVudmlyb25tZW50cyBCaXRCYWtlIGlzCisgICAgICAgICAgICAgICAgc3VwcG9ydGluZy4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgeW91IGNhbiBsb29rIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2hhbWJlZGRlZC5vcmcvYmxvZy8yMDEyLzExLzI0L2Zyb20tYml0YmFrZS1oZWxsby13b3JsZC10by1hbi1pbWFnZS8jdGFza3MnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SdW4gQml0YmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlIDxmaWxlbmFtZT5jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBleGlzdHMsIHlvdSBjYW4gcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBhZ2FpbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZQorICAgICBOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJpdEJha2UgaXMgZmluYWxseSByZXBvcnRpbmcgbm8gZXJyb3JzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gc2VlIHRoYXQgaXQgcmVhbGx5IGRvZXMgbm90IGhhdmUgYW55dGhpbmcKKyAgICAgICAgICAgICAgICB0byBkby4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgYSByZWNpcGUgdGhhdCBnaXZlcyBCaXRCYWtlIHNvbWV0aGluZyB0byBkby4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRpbmcgYSBMYXllcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFdoaWxlIGl0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGZvciBzdWNoIGEgc21hbGwgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICBpdCBpcyBnb29kIHByYWN0aWNlIHRvIGNyZWF0ZSBhIGxheWVyIGluIHdoaWNoIHRvIGtlZXAgeW91cgorICAgICAgICAgICAgICAgIGNvZGUgc2VwYXJhdGUgZnJvbSB0aGUgZ2VuZXJhbCBtZXRhZGF0YSB1c2VkIGJ5IEJpdEJha2UuCisgICAgICAgICAgICAgICAgVGh1cywgdGhpcyBleGFtcGxlIGNyZWF0ZXMgYW5kIHVzZXMgYSBsYXllciBjYWxsZWQgIm15bGF5ZXIiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBhZGRpbmcgYSBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vaGFtYmVkZGVkLm9yZy9ibG9nLzIwMTIvMTEvMjQvZnJvbS1iaXRiYWtlLWhlbGxvLXdvcmxkLXRvLWFuLWltYWdlLyNhZGRpbmctYW4tZXhhbXBsZS1sYXllcic+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5NaW5pbWFsbHksIHlvdSBuZWVkIGEgcmVjaXBlIGZpbGUgYW5kIGEgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgaW4geW91ciBsYXllci4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBmaWxlIG5lZWRzIHRvIGJlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluc2lkZSB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgVXNlIHRoZXNlIGNvbW1hbmRzIHRvIHNldCB1cCB0aGUgbGF5ZXIgYW5kIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRQorICAgICAkIG1rZGlyIG15bGF5ZXIKKyAgICAgJCBjZCBteWxheWVyCisgICAgICQgbWtkaXIgY29uZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCUEFUSCAuPSAiOiR7PGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSRElSJz5MQVlFUkRJUjwvbGluaz59IgorCisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPiArPSAiJHtMQVlFUkRJUn0vKi5iYiIKKworICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX0NPTExFQ1RJT05TJz5CQkZJTEVfQ09MTEVDVElPTlM8L2xpbms+ICs9ICJteWxheWVyIgorICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFX1BBVFRFUk4nPkJCRklMRV9QQVRURVJOX215bGF5ZXI8L2xpbms+IDo9ICJeJHtMQVlFUkRJUn0vIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgdmFyaWFibGVzLCBjbGljayB0aGUgbGlua3MKKyAgICAgICAgICAgICAgICB0byBnbyB0byB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGdsb3NzYXJ5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbmVlZCB0byBjcmVhdGUgdGhlIHJlY2lwZSBmaWxlIG5leHQuCisgICAgICAgICAgICAgICAgSW5zaWRlIHlvdXIgbGF5ZXIgYXQgdGhlIHRvcC1sZXZlbCwgdXNlIGFuIGVkaXRvciBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgYSByZWNpcGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+cHJpbnRoZWxsby5iYjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBoYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVNDUklQVElPTic+REVTQ1JJUFRJT048L2xpbms+ID0gIlByaW50cyBIZWxsbyBXb3JsZCIKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz4gPSAncHJpbnRoZWxsbycKKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz4gPSAnMScKKworICAgICBweXRob24gZG9fYnVpbGQoKSB7CisgICAgICAgIGJiLnBsYWluKCIqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBiYi5wbGFpbigiKiAgICAgICAgICAgICAgICAgICoiKTsKKyAgICAgICAgYmIucGxhaW4oIiogIEhlbGxvLCBXb3JsZCEgICAqIik7CisgICAgICAgIGJiLnBsYWluKCIqICAgICAgICAgICAgICAgICAgKiIpOworICAgICAgICBiYi5wbGFpbigiKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIGZpbGUgc2ltcGx5IHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgbmFtZSwgdmVyc2lvbiwgYW5kIHRoZSA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIHByaW50cyBvdXQgIkhlbGxvIFdvcmxkIiB0byB0aGUgY29uc29sZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIGZvbGxvdyB0aGUgbGlua3MKKyAgICAgICAgICAgICAgICB0byB0aGUgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJ1biBCaXRiYWtlIFdpdGggYSBUYXJnZXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCBhIEJpdEJha2UgdGFyZ2V0IGV4aXN0cywgcnVuIHRoZSBjb21tYW5kIGFuZCBwcm92aWRlCisgICAgICAgICAgICAgICAgdGhhdCB0YXJnZXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FL2hlbGxvCisgICAgICQgYml0YmFrZSBwcmludGhlbGxvCisgICAgIEVSUk9SOiBubyByZWNpcGUgZmlsZXMgdG8gYnVpbGQsIGNoZWNrIHlvdXIgQkJQQVRIIGFuZCBCQkZJTEVTPworCisgICAgIFN1bW1hcnk6IFRoZXJlIHdhcyAxIEVSUk9SIG1lc3NhZ2Ugc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIHRoZSBsYXllciB3aXRoIHRoZSByZWNpcGUgYW5kIHRoZSBsYXllcgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBidXQgaXQgc3RpbGwgc2VlbXMgdGhhdCBCaXRCYWtlIGNhbm5vdAorICAgICAgICAgICAgICAgIGZpbmQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIGEgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICBsaXN0cyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICBXaXRob3V0IHRoaXMgZmlsZSwgQml0QmFrZSBjYW5ub3QgZmluZCB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGluZyA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gbG9jYXRlIGxheWVycyBuZWVkZWQgZm9yIHRoZSBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBtdXN0IHJlc2lkZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBvZiB0aGUgcHJvamVjdCAoaS5lLiA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+IGZvciB0aGlzCisgICAgICAgICAgICAgICAgZXhhbXBsZSkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlNldCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSA8ZmlsZW5hbWU+aGVsbG8vY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCB0aGVuIGNyZWF0ZSB0aGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL2hvbWUvJmx0O3lvdSZndDsvbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBwcm92aWRlIHlvdXIgb3duIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b3U8L2ZpbGVuYW1lPiBpbiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVuIEJpdGJha2UgV2l0aCBhIFRhcmdldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIHN1cHBsaWVkIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSwgcnVuIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgYW5kIHByb3ZpZGUKKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIHByaW50aGVsbG8KKyAgICAgUGFyc2luZyByZWNpcGVzOiAxMDAlIHwjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjfAorICAgICBUaW1lOiAwMDowMDowMAorICAgICBQYXJzaW5nIG9mIDEgLmJiIGZpbGVzIGNvbXBsZXRlICgwIGNhY2hlZCwgMSBwYXJzZWQpLiAxIHRhcmdldHMsIDAgc2tpcHBlZCwgMCBtYXNrZWQsIDAgZXJyb3JzLgorICAgICBOT1RFOiBSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMKKyAgICAgTk9URTogUHJlcGFyaW5nIFJ1blF1ZXVlCisgICAgIE5PVEU6IEV4ZWN1dGluZyBSdW5RdWV1ZSBUYXNrcworICAgICAqKioqKioqKioqKioqKioqKioqKgorICAgICAqICAgICAgICAgICAgICAgICAgKgorICAgICAqICBIZWxsbywgV29ybGQhICAgKgorICAgICAqICAgICAgICAgICAgICAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKgorICAgICBOT1RFOiBUYXNrcyBTdW1tYXJ5OiBBdHRlbXB0ZWQgMSB0YXNrcyBvZiB3aGljaCAwIGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGZpbmRzIHRoZSA8ZmlsZW5hbWU+cHJpbnRoZWxsbzwvZmlsZW5hbWU+IHJlY2lwZSBhbmQKKyAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgcnVucyB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIGZpcnN0IGV4ZWN1dGlvbiwgcmUtcnVubmluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBwcmludGhlbGxvPC9maWxlbmFtZT4gYWdhaW4gd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGluIGEgQml0QmFrZSBydW4gdGhhdCBwcmludHMgdGhlIHNhbWUgY29uc29sZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgZmlyc3QgdGltZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByaW50aGVsbG8uYmI8L2ZpbGVuYW1lPiByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPiB0YXNrIGV4ZWN1dGVzCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgQml0QmFrZSB3cml0ZXMgYSBzdGFtcCBmaWxlIGZvciB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIG5leHQgdGltZSB5b3UgYXR0ZW1wdCB0byBydW4gdGhlIHRhc2sKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhhdCBzYW1lIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBub3RpY2VzIHRoZSBzdGFtcCBhbmQgdGhlcmVmb3JlIGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdGFzayBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlLXJ1bi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRlbGV0ZSB0aGUgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBvciBydW4gPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW4gcHJpbnRoZWxsbzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJlLXJ1biB0aGUgYnVpbGQsIHRoZSAiSGVsbG8sIFdvcmxkISIgbWVzc2FnZSB3aWxsCisgICAgICAgICAgICAgICAgICAgIGJlIHByaW50ZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtaW50cm8ueG1sIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg4NjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDY4NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiPgorCis8Y2hhcHRlciBpZD0iYml0YmFrZS11c2VyLW1hbnVhbC1pbnRybyI+CisgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXZWxjb21lIHRvIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gYXR0ZW1wdHMgdG8gYmUgYXMgaW5kZXBlbmRlbnQgYXMgcG9zc2libGUgcmVnYXJkaW5nCisgICAgICAgIHN5c3RlbXMgdGhhdCB1c2UgQml0QmFrZSwgc3VjaCBhcyBPcGVuRW1iZWRkZWQgYW5kIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICBJbiBzb21lIGNhc2VzLCBzY2VuYXJpb3Mgb3IgZXhhbXBsZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mCisgICAgICAgIGEgYnVpbGQgc3lzdGVtIGFyZSB1c2VkIGluIHRoZSBtYW51YWwgdG8gaGVscCB3aXRoIHVuZGVyc3RhbmRpbmcuCisgICAgICAgIEZvciB0aGVzZSBjYXNlcywgdGhlIG1hbnVhbCBjbGVhcmx5IHN0YXRlcyB0aGUgY29udGV4dC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0iaW50cm8iPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZ1bmRhbWVudGFsbHksIEJpdEJha2UgaXMgYSBnZW5lcmljIHRhc2sgZXhlY3V0aW9uCisgICAgICAgICAgICBlbmdpbmUgdGhhdCBhbGxvd3Mgc2hlbGwgYW5kIFB5dGhvbiB0YXNrcyB0byBiZSBydW4KKyAgICAgICAgICAgIGVmZmljaWVudGx5IGFuZCBpbiBwYXJhbGxlbCB3aGlsZSB3b3JraW5nIHdpdGhpbgorICAgICAgICAgICAgY29tcGxleCBpbnRlci10YXNrIGRlcGVuZGVuY3kgY29uc3RyYWludHMuCisgICAgICAgICAgICBPbmUgb2YgQml0QmFrZSdzIG1haW4gdXNlcnMsIE9wZW5FbWJlZGRlZCwgdGFrZXMgdGhpcyBjb3JlCisgICAgICAgICAgICBhbmQgYnVpbGRzIGVtYmVkZGVkIExpbnV4IHNvZnR3YXJlIHN0YWNrcyB1c2luZworICAgICAgICAgICAgYSB0YXNrLW9yaWVudGVkIGFwcHJvYWNoLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25jZXB0dWFsbHksIEJpdEJha2UgaXMgc2ltaWxhciB0byBHTlUgTWFrZSBpbgorICAgICAgICAgICAgc29tZSByZWdhcmRzIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBleGVjdXRlcyB0YXNrcyBhY2NvcmRpbmcgdG8gcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgdGhhdCBidWlsZHMgdXAgdGhlIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIGFuZCByZWxhdGVkIHJlY2lwZSAiYXBwZW5kIiAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBmaWxlcywgY29uZmlndXJhdGlvbiAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICB1bmRlcmx5aW5nIGluY2x1ZGUgKDxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4pIGZpbGVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW4gY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGFkYXRhIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hhdCB0YXNrcyB0byBydW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGluY2x1ZGVzIGEgZmV0Y2hlciBsaWJyYXJ5IGZvciBvYnRhaW5pbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgZnJvbSB2YXJpb3VzIHBsYWNlcyBzdWNoIGFzIGxvY2FsIGZpbGVzLCBzb3VyY2UgY29udHJvbAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBvciB3ZWJzaXRlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgaW5zdHJ1Y3Rpb25zIGZvciBlYWNoIHVuaXQgdG8gYmUgYnVpbHQgKGUuZy4gYSBwaWVjZQorICAgICAgICAgICAgICAgICAgICBvZiBzb2Z0d2FyZSkgYXJlIGtub3duIGFzICJyZWNpcGUiIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBjb250YWluIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuaXQKKyAgICAgICAgICAgICAgICAgICAgKGRlcGVuZGVuY2llcywgc291cmNlIGZpbGUgbG9jYXRpb25zLCBjaGVja3N1bXMsIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBvbikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBpbmNsdWRlcyBhIGNsaWVudC9zZXJ2ZXIgYWJzdHJhY3Rpb24gYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VkIGZyb20gYSBjb21tYW5kIGxpbmUgb3IgdXNlZCBhcyBhIHNlcnZpY2Ugb3ZlcgorICAgICAgICAgICAgICAgICAgICBYTUwtUlBDIGFuZCBoYXMgc2V2ZXJhbCBkaWZmZXJlbnQgdXNlciBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Imhpc3RvcnktYW5kLWdvYWxzIj4KKyAgICAgICAgPHRpdGxlPkhpc3RvcnkgYW5kIEdvYWxzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2Ugd2FzIG9yaWdpbmFsbHkgYSBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQgcHJvamVjdC4KKyAgICAgICAgICAgIEl0IHdhcyBpbnNwaXJlZCBieSB0aGUgUG9ydGFnZSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBHZW50b28gTGludXggZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgT24gRGVjZW1iZXIgNywgMjAwNCwgT3BlbkVtYmVkZGVkIHByb2plY3QgdGVhbSBtZW1iZXIKKyAgICAgICAgICAgIENocmlzIExhcnNvbiBzcGxpdCB0aGUgcHJvamVjdCBpbnRvIHR3byBkaXN0aW5jdCBwaWVjZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CaXRCYWtlLCBhIGdlbmVyaWMgdGFzayBleGVjdXRvcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcGVuRW1iZWRkZWQsIGEgbWV0YWRhdGEgc2V0IHV0aWxpemVkIGJ5CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgVG9kYXksIEJpdEJha2UgaXMgdGhlIHByaW1hcnkgYmFzaXMgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvIj5PcGVuRW1iZWRkZWQ8L3VsaW5rPgorICAgICAgICAgICAgcHJvamVjdCwgd2hpY2ggaXMgYmVpbmcgdXNlZCB0byBidWlsZCBhbmQgbWFpbnRhaW4gTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuYW5nc3Ryb20tZGlzdHJpYnV0aW9uLm9yZy8nPkFuZ3N0cm9tIERpc3RyaWJ1dGlvbjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIHdoaWNoIGlzIGFsc28gYmVpbmcgdXNlZCBhcyB0aGUgYnVpbGQgdG9vbCBmb3IgTGludXggcHJvamVjdHMKKyAgICAgICAgICAgIHN1Y2ggYXMgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcnPllvY3RvIFByb2plY3Q8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUHJpb3IgdG8gQml0QmFrZSwgbm8gb3RoZXIgYnVpbGQgdG9vbCBhZGVxdWF0ZWx5IG1ldCB0aGUgbmVlZHMgb2YKKyAgICAgICAgICAgIGFuIGFzcGlyaW5nIGVtYmVkZGVkIExpbnV4IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEFsbCBvZiB0aGUgYnVpbGQgc3lzdGVtcyB1c2VkIGJ5IHRyYWRpdGlvbmFsIGRlc2t0b3AgTGludXgKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgbGFja2VkIGltcG9ydGFudCBmdW5jdGlvbmFsaXR5LCBhbmQgbm9uZSBvZiB0aGUKKyAgICAgICAgICAgIGFkIGhvYyBCdWlsZHJvb3QtYmFzZWQgc3lzdGVtcywgcHJldmFsZW50IGluIHRoZQorICAgICAgICAgICAgZW1iZWRkZWQgc3BhY2UsIHdlcmUgc2NhbGFibGUgb3IgbWFpbnRhaW5hYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGltcG9ydGFudCBvcmlnaW5hbCBnb2FscyBmb3IgQml0QmFrZSB3ZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBjcm9zcy1jb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgaW50ZXItcGFja2FnZSBkZXBlbmRlbmNpZXMgKGJ1aWxkIHRpbWUgb24KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYnVpbGQgdGltZSBvbiBuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLCBhbmQgcnVudGltZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBydW5uaW5nIGFueSBudW1iZXIgb2YgdGFza3Mgd2l0aGluIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGZldGNoaW5nCisgICAgICAgICAgICAgICAgICAgIHVwc3RyZWFtIHNvdXJjZXMsIHVucGFja2luZyB0aGVtLCBwYXRjaGluZyB0aGVtLAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmluZyB0aGVtLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgTGludXggZGlzdHJpYnV0aW9uIGFnbm9zdGljIGZvciBib3RoIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBhcmNoaXRlY3R1cmUgYWdub3N0aWMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBtdWx0aXBsZSBidWlsZCBhbmQgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW1zCisgICAgICAgICAgICAgICAgICAgIChlLmcuIEN5Z3dpbiwgdGhlIEJTRHMsIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgc2VsZiBjb250YWluZWQsIHJhdGhlciB0aGFuIHRpZ2h0bHkKKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBtYWNoaW5lJ3Mgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhhbmRsZSBjb25kaXRpb25hbCBtZXRhZGF0YSBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZGlzdHJpYnV0aW9uLCBhbmQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBlYXN5IHRvIHVzZSB0aGUgdG9vbHMgdG8gc3VwcGx5IGxvY2FsIG1ldGFkYXRhIGFuZCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IHdoaWNoIHRvIG9wZXJhdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmUgZWFzeSB0byB1c2UgQml0QmFrZSB0byBjb2xsYWJvcmF0ZSBiZXR3ZWVuIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIGZvciB0aGVpciBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZSBhbiBpbmhlcml0YW5jZSBtZWNoYW5pc20gdG8gc2hhcmUKKyAgICAgICAgICAgICAgICAgICAgY29tbW9uIG1ldGFkYXRhIGJldHdlZW4gbWFueSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIE92ZXIgdGltZSBpdCBiZWNhbWUgYXBwYXJlbnQgdGhhdCBzb21lIGZ1cnRoZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICB3ZXJlIG5lY2Vzc2FyeToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIYW5kbGUgdmFyaWFudHMgb2YgYSBiYXNlIHJlY2lwZSAoZS5nLiBuYXRpdmUsIHNkaywKKyAgICAgICAgICAgICAgICAgICAgYW5kIG11bHRpbGliKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGxpdCBtZXRhZGF0YSBpbnRvIGxheWVycyBhbmQgYWxsb3cgbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIHRvIGVuaGFuY2Ugb3Igb3ZlcnJpZGUgb3RoZXIgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93IHJlcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gc2V0IG9mIGlucHV0IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICB0byBhIHRhc2sgYXMgYSBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICAgICAgQmFzZWQgb24gdGhhdCBjaGVja3N1bSwgYWxsb3cgYWNjZWxlcmF0aW9uIG9mIGJ1aWxkcworICAgICAgICAgICAgICAgICAgICB3aXRoIHByZWJ1aWx0IGNvbXBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBCaXRCYWtlIHNhdGlzZmllcyBhbGwgdGhlIG9yaWdpbmFsIHJlcXVpcmVtZW50cyBhbmQgbWFueSBtb3JlCisgICAgICAgICAgICB3aXRoIGV4dGVuc2lvbnMgYmVpbmcgbWFkZSB0byB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSB0bworICAgICAgICAgICAgcmVmbGVjdCB0aGUgYWRkaXRpb25hbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICBGbGV4aWJpbGl0eSBhbmQgcG93ZXIgaGF2ZSBhbHdheXMgYmVlbiB0aGUgcHJpb3JpdGllcy4KKyAgICAgICAgICAgIEJpdEJha2UgaXMgaGlnaGx5IGV4dGVuc2libGUgYW5kIHN1cHBvcnRzIGVtYmVkZGVkIFB5dGhvbiBjb2RlIGFuZAorICAgICAgICAgICAgZXhlY3V0aW9uIG9mIGFueSBhcmJpdHJhcnkgdGFza3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iQ29uY2VwdHMiPgorICAgICAgICA8dGl0bGU+Q29uY2VwdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBpcyBhIHByb2dyYW0gd3JpdHRlbiBpbiB0aGUgUHl0aG9uIGxhbmd1YWdlLgorICAgICAgICAgICAgQXQgdGhlIGhpZ2hlc3QgbGV2ZWwsIEJpdEJha2UgaW50ZXJwcmV0cyBtZXRhZGF0YSwgZGVjaWRlcworICAgICAgICAgICAgd2hhdCB0YXNrcyBhcmUgcmVxdWlyZWQgdG8gcnVuLCBhbmQgZXhlY3V0ZXMgdGhvc2UgdGFza3MuCisgICAgICAgICAgICBTaW1pbGFyIHRvIEdOVSBNYWtlLCBCaXRCYWtlIGNvbnRyb2xzIGhvdyBzb2Z0d2FyZSBpcworICAgICAgICAgICAgYnVpbHQuCisgICAgICAgICAgICBHTlUgTWFrZSBhY2hpZXZlcyBpdHMgY29udHJvbCB0aHJvdWdoICJtYWtlZmlsZXMiLCB3aGlsZQorICAgICAgICAgICAgQml0QmFrZSB1c2VzICJyZWNpcGVzIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBleHRlbmRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBzaW1wbGUKKyAgICAgICAgICAgIHRvb2wgbGlrZSBHTlUgTWFrZSBieSBhbGxvd2luZyBmb3IgdGhlIGRlZmluaXRpb24gb2YgbXVjaCBtb3JlCisgICAgICAgICAgICBjb21wbGV4IHRhc2tzLCBzdWNoIGFzIGFzc2VtYmxpbmcgZW50aXJlIGVtYmVkZGVkIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBpbnRyb2R1Y2VzIHNldmVyYWwgY29uY2VwdHMKKyAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHVuZGVyc3Rvb2QgaW4gb3JkZXIgdG8gYmV0dGVyIGxldmVyYWdlCisgICAgICAgICAgICB0aGUgcG93ZXIgb2YgQml0QmFrZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBSZWNpcGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUgZmlsZSBleHRlbnNpb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4sIGFyZSB0aGUgbW9zdCBiYXNpYyBtZXRhZGF0YSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWNpcGUgZmlsZXMgcHJvdmlkZSBCaXRCYWtlIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGVzY3JpcHRpdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIChhdXRob3IsIGhvbWVwYWdlLCBsaWNlbnNlLCBhbmQgc28gb24pPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeGlzdGluZyBkZXBlbmRlbmNpZXMgKGJvdGggYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcyk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXJlIHRoZSBzb3VyY2UgY29kZSByZXNpZGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaG93IHRvIGZldGNoIGl0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBzb3VyY2UgY29kZSByZXF1aXJlcworICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBhdGNoZXMsIHdoZXJlIHRvIGZpbmQgdGhlbSwgYW5kIGhvdyB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHRvIGNvbmZpZ3VyZSBhbmQgY29tcGlsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVyZSBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugb3IgcGFja2FnZXMgY3JlYXRlZDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIGNvbnRleHQgb2YgQml0QmFrZSwgb3IgYW55IHByb2plY3QgdXRpbGl6aW5nIEJpdEJha2UKKyAgICAgICAgICAgICAgICBhcyBpdHMgYnVpbGQgc3lzdGVtLCBmaWxlcyB3aXRoIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBleHRlbnNpb24gYXJlIHJlZmVycmVkIHRvIGFzIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwYWNrYWdlIiBpcyBhbHNvIGNvbW1vbmx5IHVzZWQgdG8gZGVzY3JpYmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2luY2UgdGhlIHNhbWUgd29yZCBpcyB1c2VkIHRvIGRlc2NyaWJlIHBhY2thZ2VkCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmcm9tIGEgcHJvamVjdCwgaXQgaXMgYmVzdCB0byBtYWludGFpbiBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGl2ZSB0ZXJtIC0gInJlY2lwZXMiLgorICAgICAgICAgICAgICAgICAgICBQdXQgYW5vdGhlciB3YXksIGEgc2luZ2xlICJyZWNpcGUiIGZpbGUgaXMgcXVpdGUgY2FwYWJsZQorICAgICAgICAgICAgICAgICAgICBvZiBnZW5lcmF0aW5nIGEgbnVtYmVyIG9mIHJlbGF0ZWQgYnV0IHNlcGFyYXRlbHkgaW5zdGFsbGFibGUKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VzIi4KKyAgICAgICAgICAgICAgICAgICAgSW4gZmFjdCwgdGhhdCBhYmlsaXR5IGlzIGZhaXJseSBjb21tb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGRlZmluZQorICAgICAgICAgICAgICAgIHZhcmlvdXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBnb3Zlcm4gdGhlIHByb2plY3QncyBidWlsZAorICAgICAgICAgICAgICAgIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgZmFsbCBpbnRvIHNldmVyYWwgYXJlYXMgdGhhdCBkZWZpbmUKKyAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBvcHRpb25zLCBjb21waWxlciB0dW5pbmcgb3B0aW9ucywgZ2VuZXJhbCBjb21tb24KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIHNhbXBsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGxvY2F0ZWQgd2l0aGluIHRoZSBCaXRCYWtlIHNvdXJjZSB0cmVlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2xhc3Nlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q2xhc3NlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzLCB3aGljaCBhcmUgZGVub3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBleHRlbnNpb24sIGNvbnRhaW4KKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzZWZ1bCB0byBzaGFyZSBiZXR3ZWVuIG1ldGFkYXRhIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHNvdXJjZSB0cmVlIGN1cnJlbnRseSBjb21lcyB3aXRoIG9uZSBjbGFzcyBtZXRhZGF0YSBmaWxlCisgICAgICAgICAgICAgICAgY2FsbGVkIDxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gY2xhc3MgZmlsZXMgaXMgc3BlY2lhbCBzaW5jZSBpdAorICAgICAgICAgICAgICAgIGlzIGFsd2F5cyBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IGZvciBhbGwgcmVjaXBlcworICAgICAgICAgICAgICAgIGFuZCBjbGFzc2VzLgorICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHN0YW5kYXJkIGJhc2ljIHRhc2tzIHN1Y2gKKyAgICAgICAgICAgICAgICBhcyBmZXRjaGluZywgdW5wYWNraW5nLCBjb25maWd1cmluZyAoZW1wdHkgYnkgZGVmYXVsdCksCisgICAgICAgICAgICAgICAgY29tcGlsaW5nIChydW5zIGFueSBNYWtlZmlsZSBwcmVzZW50KSwgaW5zdGFsbGluZyAoZW1wdHkgYnkKKyAgICAgICAgICAgICAgICBkZWZhdWx0KSBhbmQgcGFja2FnaW5nIChlbXB0eSBieSBkZWZhdWx0KS4KKyAgICAgICAgICAgICAgICBUaGVzZSB0YXNrcyBhcmUgb2Z0ZW4gb3ZlcnJpZGRlbiBvciBleHRlbmRlZCBieSBvdGhlciBjbGFzc2VzCisgICAgICAgICAgICAgICAgYWRkZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGRldmVsb3BtZW50IHByb2Nlc3MuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5MYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgZnJvbSBlYWNoIG90aGVyLgorICAgICAgICAgICAgICAgIFdoaWxlIHlvdSBtaWdodCBmaW5kIGl0IHRlbXB0aW5nIHRvIGtlZXAgZXZlcnl0aGluZyBpbiBvbmUgbGF5ZXIKKyAgICAgICAgICAgICAgICB3aGVuIHdvcmtpbmcgb24gYSBzaW5nbGUgcHJvamVjdCwgdGhlIG1vcmUgbW9kdWxhciB5b3Ugb3JnYW5pemUKKyAgICAgICAgICAgICAgICB5b3VyIG1ldGFkYXRhLCB0aGUgZWFzaWVyIGl0IGlzIHRvIGNvcGUgd2l0aCBmdXR1cmUgY2hhbmdlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSBob3cgeW91IGNhbiB1c2UgbGF5ZXJzIHRvIGtlZXAgdGhpbmdzIG1vZHVsYXIsCisgICAgICAgICAgICAgICAgY29uc2lkZXIgY3VzdG9taXphdGlvbnMgeW91IG1pZ2h0IG1ha2UgdG8gc3VwcG9ydCBhIHNwZWNpZmljIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIFRoZXNlIHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIHR5cGljYWxseSByZXNpZGUgaW4gYSBzcGVjaWFsIGxheWVyLAorICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGEgZ2VuZXJhbCBsYXllciwgY2FsbGVkIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgTGF5ZXIuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBtYWNoaW5lIGN1c3RvbWl6YXRpb25zIHNob3VsZCBiZSBpc29sYXRlZCBmcm9tCisgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgbWV0YWRhdGEgdGhhdCBzdXBwb3J0IGEgbmV3IEdVSSBlbnZpcm9ubWVudCwgZm9yCisgICAgICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBnaXZlcyB5b3UgYSBjb3VwbGUgb2YgbGF5ZXJzOiBvbmUgZm9yIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIG9uZSBmb3IgdGhlIEdVSSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCwgaG93ZXZlciwgdGhhdCB0aGUgQlNQIGxheWVyIGNhbiBzdGlsbAorICAgICAgICAgICAgICAgIG1ha2UgbWFjaGluZS1zcGVjaWZpYyBhZGRpdGlvbnMgdG8gcmVjaXBlcyB3aXRoaW4KKyAgICAgICAgICAgICAgICB0aGUgR1VJIGVudmlyb25tZW50IGxheWVyIHdpdGhvdXQgcG9sbHV0aW5nIHRoZSBHVUkgbGF5ZXIgaXRzZWxmCisgICAgICAgICAgICAgICAgd2l0aCB0aG9zZSBtYWNoaW5lLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCBhIHJlY2lwZSB0aGF0IGlzIGEgQml0QmFrZSBhcHBlbmQKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZC1iYmFwcGVuZC1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzLCB3aGljaCBhcmUgZmlsZXMgdGhhdCBoYXZlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGV4dGVuc2lvbiwgZXh0ZW5kIG9yCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgaW5mb3JtYXRpb24gaW4gYW4gZXhpc3RpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZXhwZWN0cyBldmVyeSBhcHBlbmQgZmlsZSB0byBoYXZlIGEgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGFwcGVuZCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIHJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIHNhbWUgcm9vdCBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWVzIGNhbiBkaWZmZXIgb25seSBpbiB0aGUgZmlsZSB0eXBlIHN1ZmZpeCB1c2VkCisgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBpbiBhcHBlbmQgZmlsZXMgZXh0ZW5kcyBvcgorICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHVuZGVybHlpbmcsCisgICAgICAgICAgICAgICAgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgbmFtZSBhbiBhcHBlbmQgZmlsZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgd2lsZGNhcmQgY2hhcmFjdGVyICglKSB0byBhbGxvdyBmb3IgbWF0Y2hpbmcgcmVjaXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGFuIGFwcGVuZCBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJ1c3lib3hfMS4yMS4lLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoYXQgYXBwZW5kIGZpbGUgd291bGQgbWF0Y2ggYW55IDxmaWxlbmFtZT5idXN5Ym94XzEuMjEueC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFNvLCB0aGUgYXBwZW5kIGZpbGUgd291bGQgbWF0Y2ggdGhlIGZvbGxvd2luZyByZWNpcGUgbmFtZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBidXN5Ym94XzEuMjEuMS5iYgorICAgICBidXN5Ym94XzEuMjEuMi5iYgorICAgICBidXN5Ym94XzEuMjEuMy5iYgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiByZWNpcGUgd2FzIHVwZGF0ZWQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveF8xLjMuMC5iYjwvZmlsZW5hbWU+LCB0aGUgYXBwZW5kIG5hbWUgd291bGQgbm90CisgICAgICAgICAgICAgICAgbWF0Y2guCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IG5hbWVkIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idXN5Ym94XzEuJS5iYmFwcGVuZDwvZmlsZW5hbWU+LCB0aGVuIHlvdSB3b3VsZCBoYXZlIGEgbWF0Y2guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgeW91IGNvdWxkIG5hbWUgdGhlIGFwcGVuZCBmaWxlIHNvbWV0aGluZyBhcworICAgICAgICAgICAgICAgIHNpbXBsZSBhcyA8ZmlsZW5hbWU+YnVzeWJveF8lLmJiYXBwZW5kPC9maWxlbmFtZT4gdG8gYmUgZW50aXJlbHkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGluZGVwZW5kZW50LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J29idGFpbmluZy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPk9idGFpbmluZyBCaXRCYWtlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gb2J0YWluIEJpdEJha2Ugc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbG9uaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgR2l0IHRvIGNsb25lIHRoZSBCaXRCYWtlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3Igb2J0YWluaW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIENsb25pbmcgdGhlIHJlcG9zaXRvcnkgbWFrZXMgaXQgZWFzeSB0byBnZXQgYnVnIGZpeGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBoYXZlIGFjY2VzcyB0byBzdGFibGUgYnJhbmNoZXMgYW5kIHRoZSBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCBCaXRCYWtlLCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHN0YWJsZQorICAgICAgICAgICAgICAgICAgICBicmFuY2ggZm9yIGRldmVsb3BtZW50IHNpbmNlIHRoZSBtYXN0ZXIgYnJhbmNoIGlzIGZvcgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGRldmVsb3BtZW50IGFuZCBtaWdodCBjb250YWluIGxlc3Mgc3RhYmxlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IHVzdWFsbHkgbmVlZCBhIHZlcnNpb24gb2YgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICB0aGF0IG1hdGNoZXMgdGhlIG1ldGFkYXRhIHlvdSBhcmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXRhZGF0YSBpcyBnZW5lcmFsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgYnV0CisgICAgICAgICAgICAgICAgICAgIG5vdCBmb3J3YXJkIGNvbXBhdGlibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjbG9uZXMgdGhlIEJpdEJha2UgcmVwb3NpdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNsb25lcyB0aGUgQml0QmFrZSBHaXQgcmVwb3NpdG9yeSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGNhbGxlZCA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0ZSBhIGRpcmVjdG9yeSBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjbG9uZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgeW91IHdhbnQgdG8gY2FsbCB0aGUgbmV3IGRpcmVjdG9yeSBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBuYW1lcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmRldjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UgYmJkZXYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbGF0aW9uIHVzaW5nIHlvdXIgRGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgTWFuYWdlbWVudCBTeXN0ZW06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIGJlY2F1c2UgdGhlIEJpdEJha2UgdmVyc2lvbiB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHlvdXIgZGlzdHJpYnV0aW9uLCBpbiBtb3N0IGNhc2VzLAorICAgICAgICAgICAgICAgICAgICBpcyBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzIGJlaGluZCBhIHNuYXBzaG90IG9mIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFraW5nIGEgc25hcHNob3Qgb2YgQml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZGluZyBhIHNuYXBzaG90IG9mIEJpdEJha2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgcmVwb3NpdG9yeSBnaXZlcyB5b3UgYWNjZXNzIHRvIGEga25vd24KKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIG9yIHJlbGVhc2Ugb2YgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgR2l0IHJlcG9zaXRvcnksIGFzIGRlc2NyaWJlZCBlYXJsaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBnZXR0aW5nIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvbmluZyB0aGUgcmVwb3NpdG9yeSBtYWtlcyBpdCBlYXNpZXIgdG8gdXBkYXRlIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhcmUgYWRkZWQgdG8gdGhlIHN0YWJsZSBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIGRvd25sb2FkcyBhIHNuYXBzaG90IG9mCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdmVyc2lvbiAxLjE3LjA6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3Z2V0IGh0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlL3NuYXBzaG90L2JpdGJha2UtMS4xNy4wLnRhci5negorICAgICAkIHRhciB6eHB2ZiBiaXRiYWtlLTEuMTcuMC50YXIuZ3oKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBZnRlciBleHRyYWN0aW9uIG9mIHRoZSB0YXJiYWxsIHVzaW5nIHRoZSB0YXIgdXRpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgYSBkaXJlY3RvcnkgZW50aXRsZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UtMS4xNy4wPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgdGhlIEJpdEJha2UgdGhhdCBDb21lcyBXaXRoIFlvdXIKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgQ2hlY2tvdXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBmaW5hbCBwb3NzaWJpbGl0eSBmb3IgZ2V0dGluZyBhIGNvcHkgb2YgQml0QmFrZSBpcyB0aGF0IGl0CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY29tZXMgd2l0aCB5b3VyIGNoZWNrb3V0IG9mIGEgbGFyZ2VyIEJpdGJha2UtYmFzZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBzdWNoIGFzIFBva3kgb3IgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gbWFudWFsbHkgY2hlY2tpbmcgb3V0IGluZGl2aWR1YWwgbGF5ZXJzIGFuZAorICAgICAgICAgICAgICAgICAgICBnbHVpbmcgdGhlbSB0b2dldGhlciB5b3Vyc2VsZiwgeW91IGNhbiBjaGVjaworICAgICAgICAgICAgICAgICAgICBvdXQgYW4gZW50aXJlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNoZWNrb3V0IHdpbGwgYWxyZWFkeSBpbmNsdWRlIGEgdmVyc2lvbiBvZiBCaXRCYWtlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gdGhvcm91Z2hseSB0ZXN0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaGVjayBvdXQgYSBwYXJ0aWN1bGFyIEJpdEJha2UtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLCBjb25zdWx0IHRoYXQgYnVpbGQgc3lzdGVtJ3Mgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJpdGJha2UtdXNlci1tYW51YWwtY29tbWFuZCI+CisgICAgICAgIDx0aXRsZT5UaGUgQml0QmFrZSBDb21tYW5kPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlCisgICAgICAgICAgICB0byB0aGUgQml0QmFrZSB0b29sLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBCaXRCYWtlIGNvbW1hbmQgc3ludGF4IGFuZCBwcm92aWRlcworICAgICAgICAgICAgc2V2ZXJhbCBleGVjdXRpb24gZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNhZ2UtYW5kLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+VXNhZ2UgYW5kIHN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgdXNhZ2UgYW5kIHN5bnRheCBmb3IgQml0QmFrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtaAorICAgICBVc2FnZTogYml0YmFrZSBbb3B0aW9uc10gW3JlY2lwZW5hbWUvdGFyZ2V0IC4uLl0KKworICAgICAgICAgRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIChkZWZhdWx0IGlzICdidWlsZCcpIGZvciBhIGdpdmVuIHNldCBvZiB0YXJnZXQgcmVjaXBlcyAoLmJiIGZpbGVzKS4KKyAgICAgICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICAgICAgIHdpbGwgcHJvdmlkZSB0aGUgbGF5ZXIsIEJCRklMRVMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisKKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1iIEJVSUxERklMRSwgLS1idWlsZGZpbGU9QlVJTERGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdBUk5JTkc6IERvZXMgbm90IGhhbmRsZSBhbnkgZGVwZW5kZW5jaWVzIGZyb20gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAtaywgLS1jb250aW51ZSAgICAgICAgQ29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0aGF0IGZhaWxlZCBhbmQgYW55dGhpbmcgZGVwZW5kaW5nIG9uIGl0IGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBidWlsdCwgYXMgbXVjaCBhcyBwb3NzaWJsZSB3aWxsIGJlIGJ1aWx0IGJlZm9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZy4KKyAgICAgICAtYSwgLS10cnlhbHRjb25maWdzICAgQ29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisgICAgICAgLWYsIC0tZm9yY2UgICAgICAgICAgIEZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBleGlzdGluZyBzdGFtcCBmaWxlKS4KKyAgICAgICAtYyBDTUQsIC0tY21kPUNNRCAgICAgU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSAnY29tcGlsZScgb3IgJ3BvcHVsYXRlX3N5c3Jvb3QnIG9yICdsaXN0dGFza3MnIG1heQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLgorICAgICAgIC1DIElOVkFMSURBVEVfU1RBTVAsIC0tY2xlYXItc3RhbXA9SU5WQUxJREFURV9TVEFNUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhbGlkYXRlIHRoZSBzdGFtcCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRhcmdldChzKS4KKyAgICAgICAtciBQUkVGSUxFLCAtLXJlYWQ9UFJFRklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBiZWZvcmUgYml0YmFrZS5jb25mLgorICAgICAgIC1SIFBPU1RGSUxFLCAtLXBvc3RyZWFkPVBPU1RGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGFmdGVyIGJpdGJha2UuY29uZi4KKyAgICAgICAtdiwgLS12ZXJib3NlICAgICAgICAgT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuCisgICAgICAgLUQsIC0tZGVidWcgICAgICAgICAgIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIG9uY2UuCisgICAgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZ28gdGhyb3VnaCB0aGUgbW90aW9ucy4KKyAgICAgICAtUyBTSUdOQVRVUkVfSEFORExFUiwgLS1kdW1wLXNpZ25hdHVyZXM9U0lHTkFUVVJFX0hBTkRMRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVtcCBvdXQgdGhlIHNpZ25hdHVyZSBjb25zdHJ1Y3Rpb24gaW5mb3JtYXRpb24sIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gdGFzayBleGVjdXRpb24uIFRoZSBTSUdOQVRVUkVfSEFORExFUiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLiBUd28gY29tbW9uIHZhbHVlcyBhcmUgbm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRkaWZmIGJ1dCB0aGUgaGFuZGxlciBtYXkgZGVmaW5lIG1vcmUvbGVzcy4gbm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyBvbmx5IGR1bXAgdGhlIHNpZ25hdHVyZSwgcHJpbnRkaWZmIG1lYW5zIGNvbXBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1bXBlZCBzaWduYXR1cmUgd2l0aCB0aGUgY2FjaGVkIG9uZS4KKyAgICAgICAtcCwgLS1wYXJzZS1vbmx5ICAgICAgUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLgorICAgICAgIC1zLCAtLXNob3ctdmVyc2lvbnMgICBTaG93IGN1cnJlbnQgYW5kIHByZWZlcnJlZCB2ZXJzaW9ucyBvZiBhbGwgcmVjaXBlcy4KKyAgICAgICAtZSwgLS1lbnZpcm9ubWVudCAgICAgU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQvY2hhbmdlZC4KKyAgICAgICAtZywgLS1ncmFwaHZpeiAgICAgICAgU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyBpbiB0aGUgZG90IHN5bnRheC4KKyAgICAgICAtSSBFWFRSQV9BU1NVTUVfUFJPVklERUQsIC0taWdub3JlLWRlcHM9RVhUUkFfQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIChlcXVpdmFsZW50IHRvIEFTU1VNRV9QUk9WSURFRCkuIFVzZWZ1bCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIGRlcGVuZGVuY3kgZ3JhcGhzIG1vcmUgYXBwZWFsaW5nCisgICAgICAgLWwgREVCVUdfRE9NQUlOUywgLS1sb2ctZG9tYWlucz1ERUJVR19ET01BSU5TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgZGVidWcgbG9nZ2luZyBmb3IgdGhlIHNwZWNpZmllZCBsb2dnaW5nIGRvbWFpbnMKKyAgICAgICAtUCwgLS1wcm9maWxlICAgICAgICAgUHJvZmlsZSB0aGUgY29tbWFuZCBhbmQgc2F2ZSByZXBvcnRzLgorICAgICAgIC11IFVJLCAtLXVpPVVJICAgICAgICBUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChlLmcuIGtub3R0eSwgaG9iLCBkZXBleHApLgorICAgICAgIC10IFNFUlZFUlRZUEUsIC0tc2VydmVydHlwZT1TRVJWRVJUWVBFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBwcm9jZXNzIG9yIHhtbHJwYy4KKyAgICAgICAtLXRva2VuPVhNTFJQQ1RPS0VOICAgU3BlY2lmeSB0aGUgY29ubmVjdGlvbiB0b2tlbiB0byBiZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZyB0byBhIHJlbW90ZSBzZXJ2ZXIuCisgICAgICAgLS1yZXZpc2lvbnMtY2hhbmdlZCAgIFNldCB0aGUgZXhpdCBjb2RlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LgorICAgICAgIC0tc2VydmVyLW9ubHkgICAgICAgICBSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvb2tlcikgcHJvY2Vzcy4KKyAgICAgICAtQiBCSU5ELCAtLWJpbmQ9QklORCAgVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uCisgICAgICAgLS1uby1zZXRzY2VuZSAgICAgICAgIERvIG5vdCBydW4gYW55IHNldHNjZW5lIHRhc2tzLiBzc3RhdGUgd2lsbCBiZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuCisgICAgICAgLS1yZW1vdGUtc2VydmVyPVJFTU9URV9TRVJWRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdCB0byB0aGUgc3BlY2lmaWVkIHNlcnZlci4KKyAgICAgICAtbSwgLS1raWxsLXNlcnZlciAgICAgVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLgorICAgICAgIC0tb2JzZXJ2ZS1vbmx5ICAgICAgICBDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4KKyAgICAgICAtLXN0YXR1cy1vbmx5ICAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgcmVtb3RlIGJpdGJha2Ugc2VydmVyLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiaXRiYWtlLWV4YW1wbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhhbXBsZS1leGVjdXRpbmctYS10YXNrLWFnYWluc3QtYS1zaW5nbGUtcmVjaXBlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIGEgVGFzayBBZ2FpbnN0IGEgU2luZ2xlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW5nIHRhc2tzIGZvciBhIHNpbmdsZSByZWNpcGUgZmlsZSBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNwZWNpZnkgdGhlIGZpbGUgaW4gcXVlc3Rpb24sIGFuZCBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICBpdCBhbmQgZXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSB0YXNrLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGlzICJidWlsZOKAnS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBvYmV5cyBpbnRlci10YXNrIGRlcGVuZGVuY2llcyB3aGVuIGRvaW5nCisgICAgICAgICAgICAgICAgICAgIHNvLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgcnVucyB0aGUgYnVpbGQgdGFzaywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdGFzaywgb24gdGhlIDxmaWxlbmFtZT5mb29fMS4wLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1iIGZvb18xLjAuYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmQgcnVucyB0aGUgY2xlYW4gdGFzayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvby5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYiBmb28uYmIgLWMgY2xlYW4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAiLWIiIG9wdGlvbiBleHBsaWNpdGx5IGRvZXMgbm90IGhhbmRsZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRoYW4gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgaXQgaXMgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBzeW50YXggcHJlc2VudGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhlY3V0aW5nLXRhc2tzLWFnYWluc3QtYS1zZXQtb2YtcmVjaXBlLWZpbGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhlY3V0aW5nIFRhc2tzIEFnYWluc3QgYSBTZXQgb2YgUmVjaXBlIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21wbGV4aXRpZXMgaW50cm9kdWNlZAorICAgICAgICAgICAgICAgICAgICB3aGVuIG9uZSB3YW50cyB0byBtYW5hZ2UgbXVsdGlwbGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBDbGVhcmx5IHRoZXJlIG5lZWRzIHRvIGJlIGEgd2F5IHRvIHRlbGwgQml0QmFrZSB3aGF0CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGFyZSBhdmFpbGFibGUgYW5kLCBvZiB0aG9zZSwgd2hpY2ggeW91CisgICAgICAgICAgICAgICAgICAgIHdhbnQgdG8gZXhlY3V0ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlcmUgYWxzbyBuZWVkcyB0byBiZSBhIHdheSBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdG8gZXhwcmVzcyBpdHMgZGVwZW5kZW5jaWVzLCBib3RoIGZvciBidWlsZC10aW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBtdXN0IGJlIGEgd2F5IGZvciB5b3UgdG8gZXhwcmVzcyByZWNpcGUgcHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgb3Igd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHdoZW4gbm90IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICItLWJ1aWxkZmlsZSIgb3IgIi1iIiBvbmx5IGFjY2VwdHMgYSAiUFJPVklERVMiLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHByb3ZpZGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUgZmlsZSBnZW5lcmFsbHkgIlBST1ZJREVTIiBpdHMKKyAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VuYW1lIiBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGZvbworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlICJQUk9WSURFUyIgdGhlIHBhY2thZ2UgbmFtZSBhbmQgYWxzbyB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZSAiLWMiIG9wdGlvbiB0byB0ZWxsIEJpdEJha2UgdG8ganVzdCBleGVjdXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPiB0YXNrOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbiBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2dlbmVyYXRpbmctZGVwZW5kZW5jeS1ncmFwaHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIERlcGVuZGVuY3kgR3JhcGhzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlzIGFibGUgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jeSBncmFwaHMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb3Q8L2ZpbGVuYW1lPiBzeW50YXguCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29udmVydCB0aGVzZSBncmFwaHMgaW50byBpbWFnZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb3Q8L2ZpbGVuYW1lPiB0b29sIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5ncmFwaHZpei5vcmcnPkdyYXBodml6PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBncmFwaCwgQml0QmFrZSB3cml0ZXMgZm91ciBmaWxlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBhY2thZ2UtZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dzIEJpdEJha2UncyBrbm93bGVkZ2Ugb2YgZGVwZW5kZW5jaWVzIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIHRhcmdldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wbi1kZXBlbmRzLmRvdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgZGVwZW5kZW5jaWVzIGJldHdlZW4gYnVpbGQtdGltZSB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT50YXNrLWRlcGVuZHMuZG90PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBuLWJ1aWxkbGlzdDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgYSBzaW1wbGUgbGlzdCBvZiB0YXJnZXRzIHRoYXQgYXJlIHRvIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3RvcCBkZXBlbmRpbmcgb24gY29tbW9uIGRlcGVuZHMsIHVzZSB0aGUgIi1JIiBkZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIGFuZCBCaXRCYWtlIG9taXRzIHRoZW0gZnJvbSB0aGUgZ3JhcGguCisgICAgICAgICAgICAgICAgICAgIExlYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBvdXQgY2FuIHByb2R1Y2UgbW9yZSByZWFkYWJsZSBncmFwaHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgd2F5LCB5b3UgY2FuIHJlbW92ZSBmcm9tIHRoZSBncmFwaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IGZyb20gaW5oZXJpdGVkIGNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlcyB0aGF0IGNyZWF0ZSBkZXBlbmRlbmN5IGdyYXBocy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBleGFtcGxlIG9taXRzIGRlcGVuZHMgY29tbW9uIGluIE9wZW5FbWJlZGRlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSBncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWcgZm9vCisKKyAgICAgJCBiaXRiYWtlIC1nIC1JIHZpcnR1YWwva2VybmVsIC1JIGVnbGliYyBmb28KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOWQ4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtbWV0YWRhdGEueG1sCkBAIC0wLDAgKzEsMTgzMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxjaGFwdGVyIGlkPSJiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhIj4KKyAgICA8dGl0bGU+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdGJha2UgZmlsZXMgaGF2ZSB0aGVpciBvd24gc3ludGF4LgorICAgICAgICBUaGUgc3ludGF4IGhhcyBzaW1pbGFyaXRpZXMgdG8gc2V2ZXJhbAorICAgICAgICBvdGhlciBsYW5ndWFnZXMgYnV0IGFsc28gaGFzIHNvbWUgdW5pcXVlIGZlYXR1cmVzLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBhdmFpbGFibGUgc3ludGF4IGFuZCBvcGVyYXRvcnMKKyAgICAgICAgYXMgd2VsbCBhcyBwcm92aWRlcyBleGFtcGxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmFzaWMtc3ludGF4Jz4KKyAgICAgICAgPHRpdGxlPkJhc2ljIFN5bnRheDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSBiYXNpYyBzeW50YXggZXhhbXBsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYmFzaWMtdmFyaWFibGUtc2V0dGluZyc+CisgICAgICAgICAgICA8dGl0bGU+QmFzaWMgVmFyaWFibGUgU2V0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzZXRzIDxmaWxlbmFtZT5WQVJJQUJMRTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgInZhbHVlIi4KKyAgICAgICAgICAgICAgICBUaGlzIGFzc2lnbm1lbnQgb2NjdXJzIGltbWVkaWF0ZWx5IGFzIHRoZSBzdGF0ZW1lbnQgaXMgcGFyc2VkLgorICAgICAgICAgICAgICAgIEl0IGlzIGEgImhhcmQiIGFzc2lnbm1lbnQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICJ2YWx1ZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIGlmIHlvdSBpbmNsdWRlIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICBhbiBhc3NpZ25tZW50LCB0aGUgc3BhY2VzIGFyZSByZXRhaW5lZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFZBUklBQkxFID0gIiB2YWx1ZSIKKyAgICAgVkFSSUFCTEUgPSAidmFsdWUgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5WQVJJQUJMRTwvZmlsZW5hbWU+IHRvICIiIHNldHMgaXQgdG8gYW4gZW1wdHkgc3RyaW5nLAorICAgICAgICAgICAgICAgIHdoaWxlIHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvICIgIiBzZXRzIGl0IHRvIGEgYmxhbmsgc3BhY2UKKyAgICAgICAgICAgICAgICAoaS5lLiB0aGVzZSBhcmUgbm90IHRoZSBzYW1lIHZhbHVlcykuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVJJQUJMRSA9ICIiCisgICAgIFZBUklBQkxFID0gIiAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWV4cGFuc2lvbic+CisgICAgICAgICAgICA8dGl0bGU+VmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB2YXJpYWJsZXMgcmVmZXJlbmNpbmcgb25lIGFub3RoZXIncworICAgICAgICAgICAgICAgIGNvbnRlbnRzIHVzaW5nIGEgc3ludGF4IHRoYXQgaXMgc2ltaWxhciB0byBzaGVsbCBzY3JpcHRpbmcuCisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWluaW5nICJhdmFsIiBhbmQgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBldmFsdWF0aW5nIHRvCisgICAgICAgICAgICAgICAgInByZWF2YWxwb3N0IiBiYXNlZCBvbiB0aGF0IGN1cnJlbnQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICJhdmFsIgorICAgICBCID0gInByZSR7QX1wb3N0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUgdGhhdCB3aGVuZXZlciA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCwgaXRzIGV2YWx1YXRpb24gd2lsbCBkZXBlbmQgb24gdGhlIHN0YXRlIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBhdCB0aGF0IHRpbWUuCisgICAgICAgICAgICAgICAgVGh1cywgbGF0ZXIgZXZhbHVhdGlvbnMgb2YgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcmV2aW91cyBleGFtcGxlIGNvdWxkIHJlc3VsdCBpbiBkaWZmZXJlbnQgdmFsdWVzCisgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctYS1kZWZhdWx0LXZhbHVlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgZGVmYXVsdCB2YWx1ZSAoPz0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlICI/PSIgb3BlcmF0b3IgdG8gYWNoaWV2ZSBhICJzb2Z0ZXIiIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBmb3IgYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHR5cGUgb2YgYXNzaWdubWVudCBhbGxvd3MgeW91IHRvIGRlZmluZSBhIHZhcmlhYmxlIGlmIGl0CisgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIHdoZW4gdGhlIHN0YXRlbWVudCBpcyBwYXJzZWQsIGJ1dCB0byBsZWF2ZSB0aGUKKyAgICAgICAgICAgICAgICB2YWx1ZSBhbG9uZSBpZiB0aGUgdmFyaWFibGUgaGFzIGEgdmFsdWUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA/PSAiYXZhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgYXQgdGhlIHRpbWUgdGhpcyBzdGF0ZW1lbnQgaXMgcGFyc2VkLAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSByZXRhaW5zIGl0cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHNldCB0byAiYXZhbCIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBpcyBpbW1lZGlhdGUuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgbXVsdGlwbGUgIj89IiBhc3NpZ25tZW50cworICAgICAgICAgICAgICAgICAgICB0byBhIHNpbmdsZSB2YXJpYWJsZSBleGlzdCwgdGhlIGZpcnN0IG9mIHRob3NlIGVuZHMgdXAgZ2V0dGluZworICAgICAgICAgICAgICAgICAgICB1c2VkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLWEtd2Vhay1kZWZhdWx0LXZhbHVlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIGEgd2VhayBkZWZhdWx0IHZhbHVlICg/Pz0pPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEgIndlYWtlciIgYXNzaWdubWVudCB0aGFuIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIHNlY3Rpb24gYnkgdXNpbmcgdGhlICI/Pz0iIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgIFRoaXMgYXNzaWdubWVudCBiZWhhdmVzIGlkZW50aWNhbCB0byAiPz0iIGV4Y2VwdCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQgaXMgbWFkZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzaW5nIHByb2Nlc3MgcmF0aGVyCisgICAgICAgICAgICAgICAgdGhhbiBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHdoZW4gbXVsdGlwbGUgIj8/PSIgYXNzaWdubWVudHMgZXhpc3QsIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgb25lIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgQWxzbywgYW55ICI9IiBvciAiPz0iIGFzc2lnbm1lbnQgd2lsbCBvdmVycmlkZSB0aGUgdmFsdWUgc2V0IHdpdGgKKyAgICAgICAgICAgICAgICAiPz89Ii4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBID8/PSAic29tZXZhbHVlIgorICAgICBBID8/PSAic29tZW90aGVydmFsdWUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgc2V0IGJlZm9yZSB0aGUgYWJvdmUgc3RhdGVtZW50cyBhcmUgcGFyc2VkLAorICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSByZXRhaW5zIGl0cyB2YWx1ZS4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIG5vdCBzZXQsCisgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGlzIHNldCB0byAic29tZW90aGVydmFsdWUiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyBhc3NpZ25tZW50IGlzIGEgImxhenkiIG9yICJ3ZWFrIiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgYmVjYXVzZSBpdCBkb2VzIG5vdCBvY2N1ciB1bnRpbCB0aGUgZW5kCisgICAgICAgICAgICAgICAgb2YgdGhlIHBhcnNpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbW1lZGlhdGUtdmFyaWFibGUtZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbW1lZGlhdGUgdmFyaWFibGUgZXhwYW5zaW9uICg6PSk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgIjo9IiBvcGVyYXRvciByZXN1bHRzIGluIGEgdmFyaWFibGUncworICAgICAgICAgICAgICAgIGNvbnRlbnRzIGJlaW5nIGV4cGFuZGVkIGltbWVkaWF0ZWx5LAorICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUID0gIjEyMyIKKyAgICAgQSA6PSAiJHtCfSAke0F9IHRlc3QgJHtUfSIKKyAgICAgVCA9ICI0NTYiCisgICAgIEIgPSAiJHtUfSBidmFsIgorICAgICBDID0gImN2YWwiCisgICAgIEMgOj0gIiR7Q31hcHBlbmQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJ0ZXN0IDEyMyIgYmVjYXVzZSA8ZmlsZW5hbWU+JHtCfTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0F9PC9maWxlbmFtZT4gYXQgdGhlIHRpbWUgb2YgcGFyc2luZyBhcmUgdW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIHdoaWNoIGxlYXZlcyAidGVzdCAxMjMiLgorICAgICAgICAgICAgICAgIEFuZCwgdGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5DPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb250YWlucyAiY3ZhbGFwcGVuZCIgc2luY2UgPGZpbGVuYW1lPiR7Q308L2ZpbGVuYW1lPiBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGV4cGFuZHMgdG8gImN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICgrPSkgYW5kIHByZXBlbmRpbmcgKD0rKSBXaXRoIFNwYWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGVuZGluZyBhbmQgcHJlcGVuZGluZyB2YWx1ZXMgaXMgY29tbW9uIGFuZCBjYW4gYmUgYWNjb21wbGlzaGVkCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICIrPSIgYW5kICI9KyIgb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyBpbnNlcnQgYSBzcGFjZSBiZXR3ZWVuIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgdmFsdWUgYW5kIHByZXBlbmRlZCBvciBhcHBlbmRlZCB2YWx1ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2Ugb3BlcmF0b3JzIHRha2UgaW1tZWRpYXRlIGVmZmVjdCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQiA9ICJidmFsIgorICAgICBCICs9ICJhZGRpdGlvbmFsZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDID0rICJ0ZXN0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBjb250YWlucworICAgICAgICAgICAgICAgICJidmFsIGFkZGl0aW9uYWxkYXRhIiBhbmQgPGZpbGVuYW1lPkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zICJ0ZXN0IGN2YWwiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2FwcGVuZGluZy1hbmQtcHJlcGVuZGluZy13aXRob3V0LXNwYWNlcyc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nICguPSkgYW5kIFByZXBlbmRpbmcgKD0uKSBXaXRob3V0IFNwYWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGFwcGVuZCBvciBwcmVwZW5kIHZhbHVlcyB3aXRob3V0IGFuCisgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgc3BhY2UsIHVzZSB0aGUgIi49IiBhbmQgIj0uIiBvcGVyYXRvcnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIG9wZXJhdG9ycyB0YWtlIGltbWVkaWF0ZSBlZmZlY3QgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQiAuPSAiYWRkaXRpb25hbGRhdGEiCisgICAgIEMgPSAiY3ZhbCIKKyAgICAgQyA9LiAidGVzdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4gY29udGFpbnMKKyAgICAgICAgICAgICAgICAiYnZhbGFkZGl0aW9uYWxkYXRhIiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGNvbnRhaW5zICJ0ZXN0Y3ZhbCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXBwZW5kaW5nLWFuZC1wcmVwZW5kaW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nIChPdmVycmlkZSBTdHlsZSBTeW50YXgpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGFwcGVuZCBhbmQgcHJlcGVuZCBhIHZhcmlhYmxlJ3MgdmFsdWUKKyAgICAgICAgICAgICAgICB1c2luZyBhbiBvdmVycmlkZSBzdHlsZSBzeW50YXguCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgc3ludGF4LCBubyBzcGFjZXMgYXJlIGluc2VydGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcGVyYXRvcnMgZGlmZmVyIGZyb20gdGhlICI6PSIsICIuPSIsICI9LiIsICIrPSIsIGFuZCAiPSsiCisgICAgICAgICAgICAgICAgb3BlcmF0b3JzIGluIHRoYXQgdGhlaXIgZWZmZWN0cyBhcmUgZGVmZXJyZWQKKyAgICAgICAgICAgICAgICB1bnRpbCBhZnRlciBwYXJzaW5nIGNvbXBsZXRlcyByYXRoZXIgdGhhbiBiZWluZyBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEIgPSAiYnZhbCIKKyAgICAgQl9hcHBlbmQgPSAiIGFkZGl0aW9uYWwgZGF0YSIKKyAgICAgQyA9ICJjdmFsIgorICAgICBDX3ByZXBlbmQgPSAiYWRkaXRpb25hbCBkYXRhICIKKyAgICAgRCA9ICJkdmFsIgorICAgICBEX2FwcGVuZCA9ICJhZGRpdGlvbmFsIGRhdGEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiYnZhbCBhZGRpdGlvbmFsIGRhdGEiIGFuZCA8ZmlsZW5hbWU+QzwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiYWRkaXRpb25hbCBkYXRhIGN2YWwiLgorICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSA8ZmlsZW5hbWU+RDwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiZHZhbGFkZGl0aW9uYWwgZGF0YSIuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNvbnRyb2wgYWxsIHNwYWNpbmcgd2hlbiB5b3UgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSBzeW50YXguCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbW92aW5nLW92ZXJyaWRlLXN0eWxlLXN5bnRheCc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZhbCAoT3ZlcnJpZGUgU3R5bGUgU3ludGF4KTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gcmVtb3ZlIHZhbHVlcyBmcm9tIGxpc3RzIHVzaW5nIHRoZSByZW1vdmFsCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgc3R5bGUgc3ludGF4LgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSB2YWx1ZSBmb3IgcmVtb3ZhbCBjYXVzZXMgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQKKyAgICAgICAgICAgICAgICB2YWx1ZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBzeW50YXgsIEJpdEJha2UgZXhwZWN0cyBvbmUgb3IgbW9yZSBzdHJpbmdzLgorICAgICAgICAgICAgICAgIFN1cnJvdW5kaW5nIHNwYWNlcyBhcmUgcmVtb3ZlZCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPTyA9ICIxMjMgNDU2IDc4OSAxMjM0NTYgMTIzIDQ1NiAxMjMgNDU2IgorICAgICBGT09fcmVtb3ZlID0gIjEyMyIKKyAgICAgRk9PX3JlbW92ZSA9ICI0NTYiCisgICAgIEZPTzIgPSAiYWJjIGRlZiBnaGkgYWJjZGVmIGFiYyBkZWYgYWJjIGRlZiIKKyAgICAgRk9PMl9yZW1vdmUgPSAiYWJjIGRlZiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIDxmaWxlbmFtZT5GT088L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICAgICAgIjc4OSAxMjM0NTYiIGFuZCA8ZmlsZW5hbWU+Rk9PMjwvZmlsZW5hbWU+IGJlY29tZXMKKyAgICAgICAgICAgICAgICAiZ2hpIGFiY2RlZiIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndmFyaWFibGUtZmxhZy1zeW50YXgnPgorICAgICAgICAgICAgPHRpdGxlPlZhcmlhYmxlIEZsYWcgU3ludGF4PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVmFyaWFibGUgZmxhZ3MgYXJlIEJpdEJha2UncyBpbXBsZW1lbnRhdGlvbiBvZiB2YXJpYWJsZSBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgb3IgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBhIHdheSBvZiB0YWdnaW5nIGV4dHJhIGluZm9ybWF0aW9uIG9udG8gYSB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBvdXQgYWJvdXQgdmFyaWFibGUgZmxhZ3MgaW4gZ2VuZXJhbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFibGUtZmxhZ3MnPlZhcmlhYmxlIEZsYWdzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRlZmluZSwgYXBwZW5kLCBhbmQgcHJlcGVuZCB2YWx1ZXMgdG8gdmFyaWFibGUgZmxhZ3MuCisgICAgICAgICAgICAgICAgQWxsIHRoZSBzdGFuZGFyZCBzeW50YXggb3BlcmF0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCB3b3JrCisgICAgICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGZsYWdzIGV4Y2VwdCBmb3Igb3ZlcnJpZGUgc3R5bGUgc3ludGF4CisgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcmVtb3ZlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHNldCB2YXJpYWJsZSBmbGFnczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZPT1thXSA9ICJhYmMiCisgICAgIEZPT1tiXSA9ICIxMjMiCisgICAgIEZPT1thXSArPSAiNDU2IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPkZPTzwvZmlsZW5hbWU+IGhhcyB0d28gZmxhZ3M6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZmxhZ3MgYXJlIGltbWVkaWF0ZWx5IHNldCB0byAiYWJjIiBhbmQgIjEyMyIsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmE8L2ZpbGVuYW1lPiBmbGFnIGJlY29tZXMgImFiYyA0NTYiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBObyBuZWVkIGV4aXN0cyB0byBwcmUtZGVmaW5lIHZhcmlhYmxlIGZsYWdzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2ltcGx5IHN0YXJ0IHVzaW5nIHRoZW0uCisgICAgICAgICAgICAgICAgT25lIGV4dHJlbWVseSBjb21tb24gYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICBpcyB0byBhdHRhY2ggc29tZSBicmllZiBkb2N1bWVudGF0aW9uIHRvIGEgQml0QmFrZSB2YXJpYWJsZSBhcworICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDQUNIRVtkb2NdID0gIlRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgY2FjaGUgb2YgdGhlIG1ldGFkYXRhLiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5saW5lLXB5dGhvbi12YXJpYWJsZS1leHBhbnNpb24nPgorICAgICAgICAgICAgPHRpdGxlPklubGluZSBQeXRob24gVmFyaWFibGUgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgaW5saW5lIFB5dGhvbiB2YXJpYWJsZSBleHBhbnNpb24gdG8KKyAgICAgICAgICAgICAgICBzZXQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERBVEUgPSAiJHtAdGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKX0iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSByZXN1bHRzIGluIHRoZSA8ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmVpbmcgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByb2JhYmx5IHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgdGhpcyBmZWF0dXJlIGlzIHRvIGV4dHJhY3QKKyAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdmFyaWFibGVzIGZyb20gQml0QmFrZSdzIGludGVybmFsIGRhdGEgZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGluZXMgc2VsZWN0IHRoZSB2YWx1ZXMgb2YgYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICBhbmQgaXRzIHZlcnNpb24gbnVtYmVyLCByZXNwZWN0aXZlbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCisgICAgIFBWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Byb3ZpZGluZy1wYXRobmFtZXMnPgorICAgICAgICAgICAgPHRpdGxlPlByb3ZpZGluZyBQYXRobmFtZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgcGF0aG5hbWVzIGZvciB1c2Ugd2l0aCBCaXRCYWtlLAorICAgICAgICAgICAgICAgIGRvIG5vdCB1c2UgdGhlIHRpbGRlICgifiIpIGNoYXJhY3RlciBhcyBhIHNob3J0Y3V0CisgICAgICAgICAgICAgICAgZm9yIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgRG9pbmcgc28gbWlnaHQgY2F1c2UgQml0QmFrZSB0byBub3QgcmVjb2duaXplIHRoZQorICAgICAgICAgICAgICAgIHBhdGggc2luY2UgQml0QmFrZSBkb2VzIG5vdCBleHBhbmQgdGhpcyBjaGFyYWN0ZXIgaW4KKyAgICAgICAgICAgICAgICB0aGUgc2FtZSB3YXkgYSBzaGVsbCB3b3VsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW5zdGVhZCwgcHJvdmlkZSBhIGZ1bGxlciBwYXRoIGFzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBleGFtcGxlIGlsbHVzdHJhdGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgL2hvbWUvc2NvdHQtbGVub3ZvL0xheWVyQSBcCisgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz4KKyAgICAgICAgPHRpdGxlPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRvIGNvbnRyb2wgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZQorICAgICAgICAgICAgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIHVzZQorICAgICAgICAgICAgPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IGFzIGNvbmRpdGlvbmFsIG1ldGFkYXRhLAorICAgICAgICAgICAgdGFsa3MgYWJvdXQga2V5IGV4cGFuc2lvbiBpbiByZWxhdGlvbnNoaXAgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwgYW5kIHByb3ZpZGVzIHNvbWUgZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIGhlbHAgd2l0aCB1bmRlcnN0YW5kaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmRpdGlvbmFsLW1ldGFkYXRhJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25kaXRpb25hbCBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0byBjb25kaXRpb25hbGx5IHNlbGVjdAorICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIHZhcmlhYmxlIGFuZCB0byBjb25kaXRpb25hbGx5CisgICAgICAgICAgICAgICAgYXBwZW5kIG9yIHByZXBlbmQgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3RpbmcgYSBWYXJpYWJsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgYSBjb2xvbi1jaGFyYWN0ZXItc2VwYXJhdGVkIGxpc3QgdGhhdCBjb250YWlucyBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNhdGlzZnkgY29uZGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBoYXZlIGEgdmFyaWFibGUgdGhhdCBpcyBjb25kaXRpb25hbCBvbiDigJxhcm3igJ0sIGFuZCDigJxhcm3igJ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiwgdGhlbiB0aGUg4oCcYXJt4oCdLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSB2YXJpYWJsZSBpcyB1c2VkIHJhdGhlciB0aGFuIHRoZSBub24tY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJhcmNoaXRlY3R1cmU6b3M6bWFjaGluZSIKKyAgICAgVEVTVCA9ICJkZWZhdWx0IgorICAgICBURVNUX29zID0gIm9zc3BlY2lmaWMiCisgICAgIFRFU1Rfbm9vdmVycmlkZSA9ICJvdGhlcmNvbmR2YWx1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbGlzdHMgdGhyZWUgb3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgImFyY2hpdGVjdHVyZSIsICJvcyIsIGFuZCAibWFjaGluZSIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgPGZpbGVuYW1lPlRFU1Q8L2ZpbGVuYW1lPiBieSBpdHNlbGYgaGFzIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgImRlZmF1bHQiLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNlbGVjdCB0aGUgb3Mtc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgPGZpbGVuYW1lPlRFU1Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYnkgYXBwZW5kaW5nIHRoZSAib3MiIG92ZXJyaWRlIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS48ZmlsZW5hbWU+VEVTVF9vczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhpcywgY29uc2lkZXIgYSBwcmFjdGljYWwgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzdW1lcyBhbiBPcGVuRW1iZWRkZWQgbWV0YWRhdGEtYmFzZWQgTGludXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaW5lcyBmcm9tIHRoZSByZWNpcGUgZmlsZSBmaXJzdCBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIGJyYW5jaCB2YXJpYWJsZSA8ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSBkZWZhdWx0IHZhbHVlLCB0aGVuIGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlJBTkNIID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtCUkFOQ0hfcWVtdWFybSAgPSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCisgICAgIEtCUkFOQ0hfcWVtdW1pcHMgPSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCisgICAgIEtCUkFOQ0hfcWVtdXBwYyAgPSAic3RhbmRhcmQvcWVtdXBwYyIKKyAgICAgS0JSQU5DSF9xZW11eDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11eDg2LTY0ICA9ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKKyAgICAgS0JSQU5DSF9xZW11bWlwczY0ID0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nIGFuZCBQcmVwZW5kaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGFsc28gc3VwcG9ydHMgYXBwZW5kIGFuZCBwcmVwZW5kIG9wZXJhdGlvbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcyBiYXNlZCBvbiB3aGV0aGVyIGEgc3BlY2lmaWMgaXRlbSBpcworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EUyA9ICJnbGliYyBuY3Vyc2VzIgorICAgICBPVkVSUklERVMgPSAibWFjaGluZTpsb2NhbCIKKyAgICAgREVQRU5EU19hcHBlbmRfbWFjaGluZSA9ICJsaWJtYWQiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgImdsaWJjIG5jdXJzZXMgbGlibWFkIi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdhaW4sIHVzaW5nIGFuIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCByZWNpcGUgZmlsZSBhcyBhbiBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgd2lsbCBjb25kaXRpb25hbGx5IGFwcGVuZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXktZXhwYW5zaW9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXkgRXhwYW5zaW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgS2V5IGV4cGFuc2lvbiBoYXBwZW5zIHdoZW4gdGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIGZpbmFsaXplZAorICAgICAgICAgICAgICAgIGp1c3QgYmVmb3JlIEJpdEJha2UgZXhwYW5kcyBvdmVycmlkZXMuCisgICAgICAgICAgICAgICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhpcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSR7Qn0gPSAiWCIKKyAgICAgQiA9ICIyIgorICAgICBBMiA9ICJZIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFmdGVyIGFsbCB0aGUgcGFyc2luZyBpcyBjb21wbGV0ZSwgYW5kCisgICAgICAgICAgICAgICAgYmVmb3JlIGFueSBvdmVycmlkZXMgYXJlIGhhbmRsZWQsIEJpdEJha2UgZXhwYW5kcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gaW50byAiMiIuCisgICAgICAgICAgICAgICAgVGhpcyBleHBhbnNpb24gY2F1c2VzIDxmaWxlbmFtZT5BMjwvZmlsZW5hbWU+LCB3aGljaCB3YXMKKyAgICAgICAgICAgICAgICBzZXQgdG8gIlkiIGJlZm9yZSB0aGUgZXhwYW5zaW9uLCB0byBiZWNvbWUgIlgiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ZhcmlhYmxlLWludGVyYWN0aW9uLXdvcmtlZC1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXNwaXRlIHRoZSBwcmV2aW91cyBleHBsYW5hdGlvbnMgdGhhdCBzaG93IHRoZSBkaWZmZXJlbnQgZm9ybXMgb2YKKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbml0aW9ucywgaXQgY2FuIGJlIGhhcmQgdG8gd29yaworICAgICAgICAgICAgICAgIG91dCBleGFjdGx5IHdoYXQgaGFwcGVucyB3aGVuIHZhcmlhYmxlIG9wZXJhdG9ycywgY29uZGl0aW9uYWwKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMsIGFuZCB1bmNvbmRpdGlvbmFsIG92ZXJyaWRlcyBhcmUgY29tYmluZWQuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHNvbWUgY29tbW9uIHNjZW5hcmlvcyBhbG9uZworICAgICAgICAgICAgICAgIHdpdGggZXhwbGFuYXRpb25zIGZvciB2YXJpYWJsZSBpbnRlcmFjdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHR5cGljYWxseSBjb25mdXNlIHVzZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBvZnRlbiBjb25mdXNpb24gY29uY2VybmluZyB0aGUgb3JkZXIgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICBvdmVycmlkZXMgYW5kIHZhcmlvdXMgImFwcGVuZCIgb3BlcmF0b3JzIHRha2UgZWZmZWN0LgorICAgICAgICAgICAgICAgIFJlY2FsbCB0aGF0IGFuIGFwcGVuZCBvciBwcmVwZW5kIG9wZXJhdGlvbiB1c2luZyAiX2FwcGVuZCIKKyAgICAgICAgICAgICAgICBhbmQgIl9wcmVwZW5kIiBkb2VzIG5vdCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBhcyB3b3VsZCAiKz0iLCAiLj0iLCAiPSsiLCBvciAiPS4iLgorICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWiIKKyAgICAgQV9mb29fYXBwZW5kID0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICB1bmNvbmRpdGlvbmFsbHkgc2V0IHRvICJaIiBhbmQgIlgiIGlzCisgICAgICAgICAgICAgICAgdW5jb25kaXRpb25hbGx5IGFuZCBpbW1lZGlhdGVseSBhcHBlbmRlZCB0byB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIG92ZXJyaWRlcyBoYXZlIG5vdCBiZWVuIGFwcGxpZWQgeWV0LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldCB0byAiWCIgZHVlIHRvIHRoZSBhcHBlbmQKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBzaW1wbHkgZXF1YWxzICJaIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXBwbHlpbmcgb3ZlcnJpZGVzLCBob3dldmVyLCBjaGFuZ2VzIHRoaW5ncy4KKyAgICAgICAgICAgICAgICBTaW5jZSAiZm9vIiBpcyBsaXN0ZWQgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb25hbCB2YXJpYWJsZSA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+IGlzIHJlcGxhY2VkCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgImZvbyIgdmVyc2lvbiwgd2hpY2ggaXMgZXF1YWwgdG8gIlgiLgorICAgICAgICAgICAgICAgIFNvIGVmZmVjdGl2ZWx5LCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPiByZXBsYWNlcyA8ZmlsZW5hbWU+QTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3ZlcnJpZGUgYW5kCisgICAgICAgICAgICAgICAgdGhlIGFwcGVuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJmb28iCisgICAgIEEgPSAiWiIKKyAgICAgQV9hcHBlbmRfZm9vID0gIlgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIGJlZm9yZSBvdmVycmlkZXMgYXJlIGhhbmRsZWQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIloiIGFuZCA8ZmlsZW5hbWU+QV9hcHBlbmRfZm9vPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpcyBzZXQgdG8gIlgiLgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIG92ZXJyaWRlIGZvciAiZm9vIiBpcyBhcHBsaWVkLCBob3dldmVyLAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gZ2V0cyBhcHBlbmRlZCB3aXRoICJYIi4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21lcyAiWlgiLgorICAgICAgICAgICAgICAgIE5vdGljZSB0aGF0IHNwYWNlcyBhcmUgbm90IGFwcGVuZGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG5leHQgZXhhbXBsZSBoYXMgdGhlIG9yZGVyIG9mIHRoZSBhcHBlbmRzIGFuZCBvdmVycmlkZXMgcmV2ZXJzZWQKKyAgICAgICAgICAgICAgICBiYWNrIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgT1ZFUlJJREVTID0gImZvbyIKKyAgICAgQSA9ICJZIgorICAgICBBX2Zvb19hcHBlbmQgPSAiWiIKKyAgICAgQV9mb29fYXBwZW5kICs9ICJYIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCBiZWZvcmUgYW55IG92ZXJyaWRlcyBhcmUgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIlkiIHVzaW5nIGFuIGltbWVkaWF0ZSBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgIEFmdGVyIHRoaXMgaW1tZWRpYXRlIGFzc2lnbm1lbnQsIDxmaWxlbmFtZT5BX2ZvbzwvZmlsZW5hbWU+IGlzIHNldAorICAgICAgICAgICAgICAgIHRvICJaIiwgYW5kIHRoZW4gZnVydGhlciBhcHBlbmRlZCB3aXRoCisgICAgICAgICAgICAgICAgIlgiIGxlYXZpbmcgdGhlIHZhcmlhYmxlIHNldCB0byAiWiBYIi4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBhcHBseWluZyB0aGUgb3ZlcnJpZGUgZm9yICJmb28iIHJlc3VsdHMgaW4gdGhlIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAgdmFyaWFibGUgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBiZWNvbWluZyAiWiBYIiAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gaXMgcmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+QV9mb288L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmluYWwgZXhhbXBsZSBtaXhlcyBpbiBzb21lIHZhcnlpbmcgb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQSA9ICIxIgorICAgICBBX2FwcGVuZCA9ICIyIgorICAgICBBX2FwcGVuZCA9ICIzIgorICAgICBBICs9ICI0IgorICAgICBBIC49ICI1IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCB0aGUgdHlwZSBvZiBhcHBlbmQgb3BlcmF0b3JzIGFyZSBhZmZlY3RpbmcgdGhlCisgICAgICAgICAgICAgICAgb3JkZXIgb2YgYXNzaWdubWVudHMgYXMgQml0QmFrZSBwYXNzZXMgdGhyb3VnaCB0aGUgY29kZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHRpbWVzLgorICAgICAgICAgICAgICAgIEluaXRpYWxseSwgPGZpbGVuYW1lPkE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIjEgNDUiIGJlY2F1c2UKKyAgICAgICAgICAgICAgICBvZiB0aGUgdGhyZWUgc3RhdGVtZW50cyB0aGF0IHVzZSBpbW1lZGlhdGUgb3BlcmF0b3JzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZXNlIGFzc2lnbm1lbnRzIGFyZSBtYWRlLCBCaXRCYWtlIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgIFRob3NlIG9wZXJhdGlvbnMgcmVzdWx0IGluIDxmaWxlbmFtZT5BPC9maWxlbmFtZT4gYmVjb21pbmcgIjEgNDUyMyIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc2hhcmluZy1mdW5jdGlvbmFsaXR5Jz4KKyAgICAgICAgPHRpdGxlPlNoYXJpbmcgRnVuY3Rpb25hbGl0eTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBmb3IgbWV0YWRhdGEgc2hhcmluZyB0aHJvdWdoIGluY2x1ZGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIHBpZWNlIG9mIGNvbW1vbiBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBzdWNoIGFzIGEgdGFzayBkZWZpbml0aW9uIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgYmV0d2VlbgorICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSByZWNpcGUuCisgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGNyZWF0aW5nIGEgPGZpbGVuYW1lPi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZW4gdXNpbmcKKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aW5oZXJpdDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSBpbiB5b3VyIHJlY2lwZXMgdG8KKyAgICAgICAgICAgIGluaGVyaXQgdGhlIGNsYXNzIHdvdWxkIGJlIGEgY29tbW9uIHdheSB0byBzaGFyZSB0aGUgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBtZWNoYW5pc21zIEJpdEJha2UgcHJvdmlkZXMgdG8KKyAgICAgICAgICAgIGFsbG93IHlvdSB0byBzaGFyZSBmdW5jdGlvbmFsaXR5IGJldHdlZW4gcmVjaXBlcy4KKyAgICAgICAgICAgIFNwZWNpZmljYWxseSwgdGhlIG1lY2hhbmlzbXMgaW5jbHVkZSA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPklOSEVSSVQ8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+IGRpcmVjdGl2ZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYXRpbmctaW5jbHVkZS1hbmQtY2xhc3MtZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2F0aW5nIEluY2x1ZGUgYW5kIENsYXNzIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBsb2NhdGUgbmVlZGVkIGluY2x1ZGUgYW5kIGNsYXNzIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvCisgICAgICAgICAgICAgICAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBpbmNsdWRlIGFuZCBjbGFzcyBmaWxlcyB0byBiZSBmb3VuZCBieSBCaXRCYWtlLAorICAgICAgICAgICAgICAgIHRoZXkgbmVlZCB0byBiZSBsb2NhdGVkIGluIGEgImNsYXNzZXMiIHN1YmRpcmVjdG9yeSB0aGF0IGNhbgorICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmhlcml0LWRpcmVjdGl2ZSc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHdyaXRpbmcgYSByZWNpcGUgb3IgY2xhc3MgZmlsZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaGVyaXQ8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIGEgY2xhc3MgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbiByZWNpcGUKKyAgICAgICAgICAgICAgICBhbmQgY2xhc3MgZmlsZXMgKGkuZS4gPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlIGlzIGEgcnVkaW1lbnRhcnkKKyAgICAgICAgICAgICAgICBtZWFucyBvZiBzcGVjaWZ5aW5nIHdoYXQgY2xhc3NlcyBvZiBmdW5jdGlvbmFsaXR5IHlvdXIKKyAgICAgICAgICAgICAgICByZWNpcGVzIHJlcXVpcmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZWFzaWx5IGFic3RyYWN0IG91dCB0aGUgdGFza3MgaW52b2x2ZWQgaW4KKyAgICAgICAgICAgICAgICBidWlsZGluZyBhIHBhY2thZ2UgdGhhdCB1c2VzIEF1dG9jb25mIGFuZCBBdXRvbWFrZSBhbmQgcHV0CisgICAgICAgICAgICAgICAgdGhvc2UgdGFza3MgaW50byBhIGNsYXNzIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCBieSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgeW91ciByZWNpcGVzIGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIHRvIGluaGVyaXQgYW4gPGZpbGVuYW1lPmF1dG90b29scy5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY2xhc3MgZmlsZSB3b3VsZCBjb250YWluIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciB1c2luZworICAgICAgICAgICAgICAgIEF1dG90b29scyB0aGF0IGNvdWxkIGJlIHNoYXJlZCBhY3Jvc3MgcmVjaXBlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgQml0QmFrZSB3b3VsZCBzZWFyY2ggZm9yIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIGFueSB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkIGNsYXNzIHdpdGhpbiB5b3VyIHJlY2lwZSBieSBkb2luZyBzbworICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgImluaGVyaXQiIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jbHVkZS1kaXJlY3RpdmUnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1bmRlcnN0YW5kcyB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdGl2ZSBjYXVzZXMgQml0QmFrZSB0byBwYXJzZSB3aGF0ZXZlciBmaWxlIHlvdSBzcGVjaWZ5LAorICAgICAgICAgICAgICAgIGFuZCB0byBpbnNlcnQgdGhhdCBmaWxlIGF0IHRoYXQgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdGl2ZSBpcyBtdWNoIGxpa2UgaXRzIGVxdWl2YWxlbnQgaW4gTWFrZSBleGNlcHQKKyAgICAgICAgICAgICAgICB0aGF0IGlmIHRoZSBwYXRoIHNwZWNpZmllZCBvbiB0aGUgaW5jbHVkZSBsaW5lIGlzIGEgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICBwYXRoLCBCaXRCYWtlIGxvY2F0ZXMgdGhlIGZpcnN0IGZpbGUgaXQgY2FuIGZpbmQKKyAgICAgICAgICAgICAgICB3aXRoaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkZWQgYSByZWNpcGUgdG8gaW5jbHVkZSBzb21lCisgICAgICAgICAgICAgICAgc2VsZi10ZXN0IGRlZmluaXRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5jbHVkZSB0ZXN0X2RlZnMuaW5jCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSBhbiBlcnJvciB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGlmIHRoZSBmaWxlIHlvdQorICAgICAgICAgICAgICAgICAgICBhcmUgaW5jbHVkaW5nIGlzIGV4cGVjdGVkIHRvIGV4aXN0LCB5b3Ugc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZXF1aXJlLWluY2x1c2lvbic+PGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBzdXJlIHRoYXQgYW4gZXJyb3IgaXMgcHJvZHVjZWQgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlLWluY2x1c2lvbic+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBEaXJlY3RpdmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVuZGVyc3RhbmRzIHRoZSA8ZmlsZW5hbWU+cmVxdWlyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlLgorICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0aXZlIGJlaGF2ZXMganVzdCBsaWtlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0aXZlIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgQml0QmFrZSByYWlzZXMgYSBwYXJzaW5nIGVycm9yIGlmIHRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkIGNhbm5vdAorICAgICAgICAgICAgICAgIGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIFRodXMsIGFueSBmaWxlIHlvdSByZXF1aXJlIGlzIGluc2VydGVkIGludG8gdGhlIGZpbGUgdGhhdCBpcworICAgICAgICAgICAgICAgIGJlaW5nIHBhcnNlZCBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2ltaWxhciB0byBob3cgQml0QmFrZSBoYW5kbGVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naW5jbHVkZS1kaXJlY3RpdmUnPjxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIGlmIHRoZSBwYXRoIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIG9uIHRoZSByZXF1aXJlIGxpbmUgaXMgYSByZWxhdGl2ZSBwYXRoLCBCaXRCYWtlIGxvY2F0ZXMKKyAgICAgICAgICAgICAgICB0aGUgZmlyc3QgZmlsZSBpdCBjYW4gZmluZCB3aXRoaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIHR3byB2ZXJzaW9ucyBvZiBhIHJlY2lwZQorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5mb29fMS4yLjIuYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzIuMC4wLmJiPC9maWxlbmFtZT4pIHdoZXJlCisgICAgICAgICAgICAgICAgZWFjaCB2ZXJzaW9uIGNvbnRhaW5zIHNvbWUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgdGhhdCBjb3VsZCBiZQorICAgICAgICAgICAgICAgIHNoYXJlZC4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgY3JlYXRlIGFuIGluY2x1ZGUgZmlsZSBuYW1lZCA8ZmlsZW5hbWU+Zm9vLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29tbW9uIGRlZmluaXRpb25zIG5lZWRlZCB0byBidWlsZCAiZm9vIi4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBzdXJlIDxmaWxlbmFtZT5mb28uaW5jPC9maWxlbmFtZT4gaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBzYW1lIGRpcmVjdG9yeSBhcyB5b3VyIHR3byByZWNpcGUgZmlsZXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZXNlIGNvbmRpdGlvbnMgYXJlIHNldCB1cCwgeW91IGNhbiBzaGFyZSB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIHVzaW5nIGEgPGZpbGVuYW1lPnJlcXVpcmU8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgZnJvbSB3aXRoaW4gZWFjaAorICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgZm9vLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmhlcml0LWNvbmZpZ3VyYXRpb24tZGlyZWN0aXZlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IENvbmZpZ3VyYXRpb24gRGlyZWN0aXZlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4pLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IGRpcmVjdGl2ZSB0bworICAgICAgICAgICAgICAgIGluaGVyaXQgYSBjbGFzcy4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9ubHkgc3VwcG9ydHMgdGhpcyBkaXJlY3RpdmUgd2hlbiB1c2VkIHdpdGhpbgorICAgICAgICAgICAgICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkZWQgdG8gaW5oZXJpdCBhIGNsYXNzCisgICAgICAgICAgICAgICAgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPmFiYy5iYmNsYXNzPC9maWxlbmFtZT4gZnJvbSBhCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJhYmMiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgY2F1c2VzIHRoZSBuYW1lZAorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdCB0aGUgcG9pbnQgb2YgdGhlIGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgIEFzIHdpdGggdGhlIDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4gZGlyZWN0aXZlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIG11c3QgYmUgbG9jYXRlZCBpbiBhCisgICAgICAgICAgICAgICAgImNsYXNzZXMiIHN1YmRpcmVjdG9yeSBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBhcmUgcGFyc2VkCisgICAgICAgICAgICAgICAgICAgIGZpcnN0IGR1cmluZyBCaXRCYWtlJ3MgZXhlY3V0aW9uLCB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5IRVJJVDwvZmlsZW5hbWU+IHRvIGluaGVyaXQgYSBjbGFzcyBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cyB0aGUgY2xhc3MgZ2xvYmFsbHkgKGkuZS4gZm9yIGFsbCByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZnVuY3Rpb25zJz4KKyAgICAgICAgPHRpdGxlPkZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIG1vc3QgbGFuZ3VhZ2VzLCBmdW5jdGlvbnMgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgdGhhdAorICAgICAgICAgICAgYXJlIHVzZWQgdG8gYnVpbGQgdXAgb3BlcmF0aW9ucyBpbnRvIHRhc2tzLgorICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyB0aGVzZSB0eXBlcyBvZiBmdW5jdGlvbnM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb25zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyB3cml0dGVuIGluIHNoZWxsIHNjcmlwdCBhbmQgZXhlY3V0ZWQgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFzIGZ1bmN0aW9ucywgdGFza3MsIG9yIGJvdGguCisgICAgICAgICAgICAgICAgICAgIFRoZXkgY2FuIGFsc28gYmUgY2FsbGVkIGJ5IG90aGVyIHNoZWxsIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CaXRCYWtlIFN0eWxlIFB5dGhvbiBGdW5jdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBleGVjdXRlZCBieSBCaXRCYWtlIG9yIG90aGVyCisgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBmdW5jdGlvbnMgdXNpbmcgPGZpbGVuYW1lPmJiLmJ1aWxkLmV4ZWNfZnVuYygpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24gYW5kIGV4ZWN1dGVkIGJ5IFB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Bbm9ueW1vdXMgUHl0aG9uIEZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBQeXRob24gZnVuY3Rpb25zIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGZ1bmN0aW9uLCB5b3UgY2FuIG9ubHkKKyAgICAgICAgICAgIGRlZmluZSB0aGVtIGluIGNsYXNzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIGFuZCByZWNpcGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hlbGwtZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaGVsbCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGdW5jdGlvbnMgd3JpdHRlbiBpbiBzaGVsbCBzY3JpcHQgYW5kIGV4ZWN1dGVkIGVpdGhlcgorICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFzIGZ1bmN0aW9ucywgdGFza3MsIG9yIGJvdGguCisgICAgICAgICAgICAgICAgVGhleSBjYW4gYWxzbyBiZSBjYWxsZWQgYnkgb3RoZXIgc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBzaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc29tZV9mdW5jdGlvbiAoKSB7CisgICAgICAgICBlY2hvICJIZWxsbyBXb3JsZCIKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgdGhlc2UgdHlwZXMgb2YgZnVuY3Rpb25zIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgb3IgY2xhc3MgZmlsZXMsIHlvdSBuZWVkIHRvIGZvbGxvdyB0aGUgc2hlbGwgcHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICBydWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0cyBhcmUgZXhlY3V0ZWQgYnkgPGZpbGVuYW1lPi9iaW4vc2g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCBtYXkgbm90IGJlIGEgYmFzaCBzaGVsbCBidXQgbWlnaHQgYmUgc29tZXRoaW5nCisgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+ZGFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgbm90IHVzZSBCYXNoLXNwZWNpZmljIHNjcmlwdCAoYmFzaGlzbXMpLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2Utc3R5bGUtcHl0aG9uLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZSBTdHlsZSBQeXRob24gRnVuY3Rpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluIFB5dGhvbiBhbmQgZXhlY3V0ZWQgYnkKKyAgICAgICAgICAgICAgICBCaXRCYWtlIG9yIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuZXhlY19mdW5jKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSBCaXRCYWtlIGZ1bmN0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIHNvbWVfcHl0aG9uX2Z1bmN0aW9uICgpIHsKKyAgICAgICAgIGQuc2V0VmFyKCJURVhUIiwgIkhlbGxvIFdvcmxkIikKKyAgICAgICAgIHByaW50IGQuZ2V0VmFyKCJURVhUIiwgVHJ1ZSkKKyAgICAgfQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBQeXRob24gImJiIiBhbmQgIm9zIiBtb2R1bGVzIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgaW1wb3J0ZWQsIHlvdSBkbyBub3QgbmVlZCB0byBpbXBvcnQgdGhlc2UgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBBbHNvIGluIHRoZXNlIHR5cGVzIG9mIGZ1bmN0aW9ucywgdGhlIGRhdGFzdG9yZSAoImQiKQorICAgICAgICAgICAgICAgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZCBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3B5dGhvbi1mdW5jdGlvbnMnPgorICAgICAgICAgICAgPHRpdGxlPlB5dGhvbiBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIGFuZCBhcmUgZXhlY3V0ZWQgYnkKKyAgICAgICAgICAgICAgICBvdGhlciBQeXRob24gY29kZS4KKyAgICAgICAgICAgICAgICBFeGFtcGxlcyBvZiBQeXRob24gZnVuY3Rpb25zIGFyZSB1dGlsaXR5IGZ1bmN0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgeW91IGludGVuZCB0byBjYWxsIGZyb20gaW4tbGluZSBQeXRob24gb3IKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBvdGhlciBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiBnZXRfZGVwZW5kcyhkKToKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FQ09ORElUSU9OJywgVHJ1ZSk6CisgICAgICAgICAgICAgcmV0dXJuICJkZXBlbmRlbmN5d2l0aGNvbmQiCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHJldHVybiAiZGVwZW5kZW5jeSIKKyAgICAgU09NRUNPTkRJVElPTiA9ICIxIgorICAgICBERVBFTkRTID0gIiR7QGdldF9kZXBlbmRzKGQpfSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyB3b3VsZCByZXN1bHQgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgPGZpbGVuYW1lPmRlcGVuZGVuY3l3aXRoY29uZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHRoaW5ncyB0byBrbm93IGFib3V0IFB5dGhvbiBmdW5jdGlvbnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiBmdW5jdGlvbnMgY2FuIHRha2UgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEJpdEJha2UgZGF0YXN0b3JlIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IHBhc3MgaXQgaW4gYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICJiYiIgYW5kICJvcyIgUHl0aG9uIG1vZHVsZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBpbXBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Fub255bW91cy1weXRob24tZnVuY3Rpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5Bbm9ueW1vdXMgUHl0aG9uIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gcnVuIHNvbWUgY29kZSBkdXJpbmcKKyAgICAgICAgICAgICAgICBwYXJzaW5nIHRvIHNldCB2YXJpYWJsZXMgb3IgdG8gcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgcHJvZ3JhbW1hdGljYWxseS4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgY2FuIGRlZmluZSBhbiBhbm9ueW1vdXMgUHl0aG9uIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbmRpdGlvbmFsbHkgc2V0cyBhCisgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGFub3RoZXIgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgICAgICAgaWYgZC5nZXRWYXIoJ1NPTUVWQVInLCBUcnVlKSA9PSAndmFsdWUnOgorICAgICAgICAgICAgIGQuc2V0VmFyKCdBTk9USEVSVkFSJywgJ3ZhbHVlMicpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlICJfX2Fub255bW91cyIgZnVuY3Rpb24gbmFtZSBpcyBvcHRpb25hbCwgc28gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGV4YW1wbGUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uICgpIHsKKyAgICAgICAgIGlmIGQuZ2V0VmFyKCdTT01FVkFSJywgVHJ1ZSkgPT0gJ3ZhbHVlJzoKKyAgICAgICAgICAgICBkLnNldFZhcignQU5PVEhFUlZBUicsICd2YWx1ZTInKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdW5saWtlIG90aGVyIFB5dGhvbiBmdW5jdGlvbnMgYW5vbnltb3VzCisgICAgICAgICAgICAgICAgUHl0aG9uIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgZHVyaW5nIHBhcnNpbmcsIHRoZQorICAgICAgICAgICAgICAgICJkIiB2YXJpYWJsZSB3aXRoaW4gYW4gYW5vbnltb3VzIFB5dGhvbiBmdW5jdGlvbiByZXByZXNlbnRzCisgICAgICAgICAgICAgICAgdGhlIGRhdGFzdG9yZSBmb3IgdGhlIGVudGlyZSByZWNpcGUuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2FuIHNldCB2YXJpYWJsZSB2YWx1ZXMgaGVyZSBhbmQKKyAgICAgICAgICAgICAgICB0aG9zZSB2YWx1ZXMgY2FuIGJlIHBpY2tlZCB1cCBieSBvdGhlciBmdW5jdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmxleGlibGUtaW5oZXJpdGFuY2UtZm9yLWNsYXNzLWZ1bmN0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+RmxleGlibGUgSW5oZXJpdGFuY2UgZm9yIENsYXNzIEZ1bmN0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRocm91Z2ggY29kaW5nIHRlY2huaXF1ZXMgYW5kIHRoZSB1c2Ugb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhQT1JUX0ZVTkNUSU9OUzwvZmlsZW5hbWU+LCBCaXRCYWtlIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgZXhwb3J0aW5nIGEgZnVuY3Rpb24gZnJvbSBhIGNsYXNzIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcyBmdW5jdGlvbiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGZ1bmN0aW9uLCBidXQgY2FuIHN0aWxsIGJlIGNhbGxlZCBpZiBhIHJlY2lwZQorICAgICAgICAgICAgICAgIGluaGVyaXRpbmcgdGhlIGNsYXNzIG5lZWRzIHRvIGRlZmluZSBpdHMgb3duIHZlcnNpb24gb2YKKyAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVuZGVyc3RhbmQgdGhlIGJlbmVmaXRzIG9mIHRoaXMgZmVhdHVyZSwgY29uc2lkZXIKKyAgICAgICAgICAgICAgICB0aGUgYmFzaWMgc2NlbmFyaW8gd2hlcmUgYSBjbGFzcyBkZWZpbmVzIGEgdGFzayBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFuZCB5b3VyIHJlY2lwZSBpbmhlcml0cyB0aGUgY2xhc3MuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBiYXNpYyBzY2VuYXJpbywgeW91ciByZWNpcGUgaW5oZXJpdHMgdGhlIHRhc2sKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiBkZXNpcmVkLCB5b3VyIHJlY2lwZSBjYW4gYWRkIHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5IHVzaW5nIHRoZSAiX3ByZXBlbmQiIG9yICJfYXBwZW5kIiBvcGVyYXRpb25zCisgICAgICAgICAgICAgICAgcmVzcGVjdGl2ZWx5LCBvciBpdCBjYW4gcmVkZWZpbmUgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlbHkuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgaXQgcmVkZWZpbmVzIHRoZSBmdW5jdGlvbiwgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICBubyBtZWFucyAgZm9yIGl0IHRvIGNhbGwgdGhlIGNsYXNzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFBPUlRfRlVOQ1RJT05TPC9maWxlbmFtZT4gcHJvdmlkZXMgYSBtZWNoYW5pc20KKyAgICAgICAgICAgICAgICB0aGF0IGVuYWJsZXMgdGhlIHJlY2lwZSdzIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIG1ha2UgdXNlIG9mIHRoaXMgdGVjaG5pcXVlLCB5b3UgbmVlZCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdGhpbmdzIGluIHBsYWNlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBuZWVkcyB0byBkZWZpbmUgdGhlIGZ1bmN0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5jbGFzc25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT5fPC9maWxlbmFtZT48cmVwbGFjZWFibGU+ZnVuY3Rpb25uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGNsYXNzIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXIuYmJjbGFzczwvZmlsZW5hbWU+IGFuZCBhIGZ1bmN0aW9uIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4sIHRoZSBjbGFzcyBtdXN0IGRlZmluZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJhcl9kb19mb28KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2xhc3MgbmVlZHMgdG8gY29udGFpbiB0aGUgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYUE9SVF9GVU5DVElPTlMgPHJlcGxhY2VhYmxlPmZ1bmN0aW9ubmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHRoZSA8ZmlsZW5hbWU+YmFyLmJiY2xhc3M8L2ZpbGVuYW1lPiB3b3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhQT1JUX0ZVTkNUSU9OUyBkb19mb28KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjYWxsIHRoZSBmdW5jdGlvbiBhcHByb3ByaWF0ZWx5IGZyb20gd2l0aGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgc2FtZSBleGFtcGxlLCBpZiB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gY2FsbCB0aGUgY2xhc3MgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgY2FsbCA8ZmlsZW5hbWU+YmFyX2RvX2ZvbzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgPGZpbGVuYW1lPmRvX2ZvbzwvZmlsZW5hbWU+IHdhcyBhIHNoZWxsIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkVYUE9SVF9GVU5DVElPTlM8L2ZpbGVuYW1lPiB3YXMgdXNlZCBhcyBhYm92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUncyBmdW5jdGlvbiBjb3VsZCBjb25kaXRpb25hbGx5IGNhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19mb28oKSB7CisgICAgICAgICAgICAgaWYgWyBzb21lY29uZGl0aW9uIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBiYXJfZG9fZm9vCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIyBEbyBzb21ldGhpbmcgZWxzZQorICAgICAgICAgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNhbGwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhcyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHJlY2lwZSwgY2FsbCBpdCBhcyA8ZmlsZW5hbWU+ZG9fZm9vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZXNlIGNvbmRpdGlvbnMgbWV0LCB5b3VyIHNpbmdsZSByZWNpcGUKKyAgICAgICAgICAgICAgICBjYW4gZnJlZWx5IGNob29zZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGFzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGZpbGUgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCB1cCB0aGVzZSBjb25kaXRpb25zLCB5b3UgYXJlIGxpbWl0ZWQgdG8gdXNpbmcgb25lIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgb3IgdGhlIG90aGVyLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Rhc2tzJz4KKyAgICAgICAgPHRpdGxlPlRhc2tzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRhc2tzIGFyZSBCaXRCYWtlIGV4ZWN1dGlvbiB1bml0cyB0aGF0IG9yaWdpbmF0ZSBhcworICAgICAgICAgICAgZnVuY3Rpb25zIGFuZCBtYWtlIHVwIHRoZSBzdGVwcyB0aGF0IEJpdEJha2UgbmVlZHMgdG8gcnVuCisgICAgICAgICAgICBmb3IgZ2l2ZW4gcmVjaXBlLgorICAgICAgICAgICAgVGFza3MgYXJlIG9ubHkgc3VwcG9ydGVkIGluIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICBvciA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+KSBhbmQgY2xhc3MKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgZmlsZXMuCisgICAgICAgICAgICBCeSBjb252ZW50aW9uLCB0YXNrIG5hbWVzIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiZG9fIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgdGFzayB0aGF0IHByaW50cyBvdXQgdGhlIGRhdGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHB5dGhvbiBkb19wcmludGRhdGUgKCkgeworICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgIHByaW50IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsIHRpbWUuZ210aW1lKCkpCisgICAgIH0KKyAgICAgYWRkdGFzayBwcmludGRhdGUgYWZ0ZXIgZG9fZmV0Y2ggYmVmb3JlIGRvX2J1aWxkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJvbW90aW5nLWEtZnVuY3Rpb24tdG8tYS10YXNrJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm9tb3RpbmcgYSBGdW5jdGlvbiB0byBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbnkgZnVuY3Rpb24gY2FuIGJlIHByb21vdGVkIHRvIGEgdGFzayBieSBhcHBseWluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWRkdGFzazwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5hZGR0YXNrPC9maWxlbmFtZT4gY29tbWFuZCBhbHNvIGRlc2NyaWJlcworICAgICAgICAgICAgICAgIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHNlY3Rpb24gYnV0IHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBjb21tYW5kIHByb21vdGluZyBpdCB0byBhIHRhc2sKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5pbmcgc29tZSBkZXBlbmRlbmNpZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gZG9fcHJpbnRkYXRlICgpIHsKKyAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICBwcmludCB0aW1lLnN0cmZ0aW1lKCclWSVtJWQnLCB0aW1lLmdtdGltZSgpKQorICAgICB9CisgICAgIGFkZHRhc2sgcHJpbnRkYXRlIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHRoZW4gcHJvbW90ZWQKKyAgICAgICAgICAgICAgICBhcyBhIHRhc2suCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIGJlY29tZXMgYSBkZXBlbmRlbmN5IG9mCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2ssIHdoaWNoIGlzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBBbmQsIHRoZSA8ZmlsZW5hbWU+ZG9fcHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzayBpcyBkZXBlbmRlbnQgdXBvbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBvZiB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gdGFzayByZXN1bHRzCisgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5kb19wcmludGRhdGU8L2ZpbGVuYW1lPiB0YXNrIHJ1bm5pbmcgZmlyc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGVsZXRpbmctYS10YXNrJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZWxldGluZyBhIFRhc2s8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyB3ZWxsIGFzIGJlaW5nIGFibGUgdG8gYWRkIHRhc2tzLCB5b3UgY2FuIGRlbGV0ZSB0aGVtLgorICAgICAgICAgICAgICAgIFNpbXBseSB1c2UgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlbGV0ZSBhIHRhc2suCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGRlbGV0ZSB0aGUgZXhhbXBsZSB0YXNrIHVzZWQgaW4gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgc2VjdGlvbnMsIHlvdSB3b3VsZCB1c2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWx0YXNrIHByaW50ZGF0ZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZGVsZXRlIGEgdGFzayB1c2luZyB0aGUgPGZpbGVuYW1lPmRlbHRhc2s8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgYW5kIHRoZSB0YXNrIGhhcyBkZXBlbmRlbmNpZXMsIHRoZSBkZXBlbmRlbmNpZXMgYXJlCisgICAgICAgICAgICAgICAgbm90IHJlY29ubmVjdGVkLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIHRocmVlIHRhc2tzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2E8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBpcyBkZXBlbmRlbnQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYjwvZmlsZW5hbWU+LCB3aGljaCBpbiB0dXJuIGlzIGRlcGVuZGVudCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgR2l2ZW4gdGhpcyBzY2VuYXJpbywgaWYgeW91IHVzZSA8ZmlsZW5hbWU+ZGVsdGFzazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gZGVsZXRlIDxmaWxlbmFtZT5kb19iPC9maWxlbmFtZT4sIHRoZSBpbXBsaWNpdCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwIGJldHdlZW4gPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+IHRocm91Z2ggPGZpbGVuYW1lPmRvX2I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG5vIGxvbmdlciBleGlzdHMsIGFuZCA8ZmlsZW5hbWU+ZG9fYzwvZmlsZW5hbWU+IGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGFyZSBub3QgdXBkYXRlZCB0byBpbmNsdWRlIDxmaWxlbmFtZT5kb19hPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGh1cywgPGZpbGVuYW1lPmRvX2M8L2ZpbGVuYW1lPiBpcyBmcmVlIHRvIHJ1biBiZWZvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBkZXBlbmRlbmNpZXMgc3VjaCBhcyB0aGVzZSB0byByZW1haW4gaW50YWN0LCB1c2UKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+IHZhcmZsYWcgdG8gZGlzYWJsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIDxmaWxlbmFtZT5kZWx0YXNrPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlbGV0ZSBpdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2Jbbm9leGVjXSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXNzaW5nLWluZm9ybWF0aW9uLWludG8tdGhlLWJ1aWxkLXRhc2stZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhc3NpbmcgSW5mb3JtYXRpb24gSW50byB0aGUgQnVpbGQgVGFzayBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBhIHRhc2ssIEJpdEJha2UgdGlnaHRseSBjb250cm9scyB0aGUgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgb2YgdGhlIGJ1aWxkIHRhc2tzIHRvIG1ha2UKKyAgICAgICAgICAgICAgICBzdXJlIHVud2FudGVkIGNvbnRhbWluYXRpb24gZnJvbSB0aGUgYnVpbGQgbWFjaGluZSBjYW5ub3QKKyAgICAgICAgICAgICAgICBpbmZsdWVuY2UgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgaWYgeW91IGRvIHdhbnQgc29tZXRoaW5nIHRvIGdldCBwYXNzZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCB0YXNrIGVudmlyb25tZW50LCB5b3UgbXVzdCB0YWtlIHRoZXNlIHR3byBzdGVwczoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGwgQml0QmFrZSB0byBsb2FkIHdoYXQgeW91IHdhbnQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gc28gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9FTlZfRVhUUkFXSElURSc+PGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgYnVpbGQgc3lzdGVtIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2luZyB5b3VyIDxmaWxlbmFtZT4kSE9NRS8uY2NhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscyBCaXRCYWtlIHRvIGxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DQ0FDSEVfRElSPC9maWxlbmFtZT4gZnJvbSB0aGUgZW52aXJvbm1lbnQgaW50bworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGFzdG9yZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IEJCX0VOVl9FWFRSQVdISVRFPSIkQkJfRU5WX0VYVFJBV0hJVEUgQ0NBQ0hFX0RJUiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGVsbCBCaXRCYWtlIHRvIGV4cG9ydCB3aGF0IHlvdSBoYXZlIGxvYWRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlIHRvIHRoZSB0YXNrIGVudmlyb25tZW50IG9mIGV2ZXJ5IHJ1bm5pbmcgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgc29tZXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IGludG8gdGhlIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzIHN0ZXApIG9ubHkgbWFrZXMgaXQgYXZhaWxhYmxlIGluIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgaXQgdG8gdGhlIHRhc2sgZW52aXJvbm1lbnQgb2YgZXZlcnkgcnVubmluZyB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGEgY29tbWFuZCBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgaW4geW91ciBsb2NhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IENDQUNIRV9ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIHN0ZXBzIGlzIHRoYXQgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHMgdGhlIHZhcmlhYmxlIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgYnVpbGQgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoaW5ncyBsaWtlIHRoZSBzZXRzY2VuZSBjaGVja3N1bXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZG9pbmcgc28gcmVzdWx0cyBpbiB1bm5lY2Vzc2FyeSByZWJ1aWxkcyBvZiB0YXNrcywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdCB0aGUgdmFyaWFibGUgc28gdGhhdCB0aGUgc2V0c2NlbmUgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZXMgdGhlIGRlcGVuZGVuY3kgd2hlbiBpdCBjcmVhdGVzIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTb21ldGltZXMsIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIGZyb20gdGhlIG9yaWdpbmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBCaXRiYWtlIHNhdmVzIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQgaW50bworICAgICAgICAgICAgICAgIGEgc3BlY2lhbCB2YXJpYWJsZSBuYW1lZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9PUklHRU5WJz48ZmlsZW5hbWU+QkJfT1JJR0VOVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9PUklHRU5WPC9maWxlbmFtZT4gdmFyaWFibGUgcmV0dXJucyBhIGRhdGFzdG9yZQorICAgICAgICAgICAgICAgIG9iamVjdCB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBzdGFuZGFyZCBkYXRhc3RvcmUgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+Z2V0VmFyKCwgRmFsc2UpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGRhdGFzdG9yZSBvYmplY3QgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgdG8gZmluZCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTUExBWTwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKQorICAgICBiYXIgPSBvcmlnZW52LmdldFZhcigiQkFSIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIHJldHVybnMgPGZpbGVuYW1lPkJBUjwvZmlsZW5hbWU+IGZyb20gdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICAgZXhlY3V0aW9uIGVudmlyb25tZW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBCaXRCYWtlIGNsZWFucyB0aGUgZW52aXJvbm1lbnQgdG8gaW5jbHVkZSBvbmx5IHRob3NlCisgICAgICAgICAgICAgICAgdGhpbmdzIGV4cG9ydGVkIG9yIGxpc3RlZCBpbiBpdHMgd2hpdGVsaXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGlzIHJlcHJvZHVjaWJsZSBhbmQgY29uc2lzdGVudC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd2YXJpYWJsZS1mbGFncyc+CisgICAgICAgIDx0aXRsZT5WYXJpYWJsZSBGbGFnczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpIGhlbHAgY29udHJvbCBhIHRhc2sncyBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgQml0QmFrZSByZWFkcyBhbmQgd3JpdGVzIHZhcmZsYWdzIHRvIHRoZSBkYXRhc3RvcmUgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgY29tbWFuZCBmb3JtczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnZhcmlhYmxlPC9yZXBsYWNlYWJsZT4gPSBkLmdldFZhckZsYWdzKCI8cmVwbGFjZWFibGU+dmFyaWFibGU8L3JlcGxhY2VhYmxlPiIpCisgICAgIHNlbGYuZC5zZXRWYXJGbGFncygiRk9PIiwgeyJmdW5jIjogVHJ1ZX0pCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIHZhcmZsYWdzLCB0aGUgc2FtZSBzeW50YXgsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorICAgICAgICAgICAgb3ZlcnJpZGVzLCBhcHBsaWVzLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gc2V0LCBhcHBlbmQsIGFuZCBwcmVwZW5kIHZhcmZsYWdzIGp1c3QgbGlrZQorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWctc3ludGF4Jz5WYXJpYWJsZSBGbGFnIFN5bnRheDwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBkZXRhaWxzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGhhcyBhIGRlZmluZWQgc2V0IG9mIHZhcmZsYWdzIGF2YWlsYWJsZSBmb3IgcmVjaXBlcyBhbmQKKyAgICAgICAgICAgIGNsYXNzZXMuCisgICAgICAgICAgICBUYXNrcyBzdXBwb3J0IGEgbnVtYmVyIG9mIHRoZXNlIGZsYWdzIHdoaWNoIGNvbnRyb2wgdmFyaW91cworICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFzazoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jbGVhbmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW1wdHkgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgY3JlYXRlZCBiZWZvcmUgdGhlIHRhc2sgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZXBlbmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbnRlci10YXNrLWRlcGVuZGVuY2llcyc+SW50ZXItVGFzayBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBidWlsZC10aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnVpbGQtZGVwZW5kZW5jaWVzJz5CdWlsZCBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRpcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgdGhlIHRhc2sgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5sb2NrZmlsZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBvbmUgb3IgbW9yZSBsb2NrZmlsZXMgdG8gbG9jayB3aGlsZSB0aGUgdGFzaworICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZXMuCisgICAgICAgICAgICAgICAgICAgICBPbmx5IG9uZSB0YXNrIG1heSBob2xkIGEgbG9ja2ZpbGUsIGFuZCBhbnkgdGFzayB0aGF0CisgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyB0byBsb2NrIGFuIGFscmVhZHkgbG9ja2VkIGZpbGUgd2lsbCBibG9jayB1bnRpbAorICAgICAgICAgICAgICAgICAgICAgdGhlIGxvY2sgaXMgcmVsZWFzZWQuCisgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGZsYWcgdG8gYWNjb21wbGlzaCBtdXR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2lvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ub2V4ZWM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFya3MgdGhlIHRhc2tzIGFzIGJlaW5nIGVtcHR5IGFuZCBubyBleGVjdXRpb24gcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bm9leGVjPC9maWxlbmFtZT4gZmxhZyBjYW4gYmUgdXNlZCB0byBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgYXMgZGVwZW5kZW5jeSBwbGFjZWhvbGRlcnMsIG9yIHRvIGRpc2FibGUgdGFza3MgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICBlbHNld2hlcmUgdGhhdCBhcmUgbm90IG5lZWRlZCBpbiBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5vc3RhbXA6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGVsbHMgQml0QmFrZSB0byBub3QgZ2VuZXJhdGUgYSBzdGFtcCBmaWxlIGZvciBhIHRhc2ssCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGltcGxpZXMgdGhlIHRhc2sgc2hvdWxkIGFsd2F5cyBiZSBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wb3N0ZnVuY3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGUgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wcmVmdW5jczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUgdGFzayBleGVjdXRlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZGVwZW5kczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyBpbnRlci10YXNrIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ludGVyLXRhc2stZGVwZW5kZW5jaWVzJz5JbnRlci1UYXNrIERlcGVuZGVuY2llczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cmRlcHRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgdGFzayBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdydW50aW1lLWRlcGVuZGVuY2llcyc+UnVudGltZSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJlY2lkZXB0YXNrOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0IGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY3JkZXB0YXNrPC9maWxlbmFtZT4sIHNwZWNpZmllcyBhIHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5zcGVjdGVkIGZvciBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNyZGVwdGFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9scyB0YXNrIHJlY3Vyc2l2ZSBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWN1cnNpdmUtZGVwZW5kZW5jaWVzJz5SZWN1cnNpdmUgRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zdGFtcC1leHRyYS1pbmZvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEV4dHJhIHN0YW1wIGluZm9ybWF0aW9uIHRvIGFwcGVuZCB0byB0aGUgdGFzaydzIHN0YW1wLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBPcGVuRW1iZWRkZWQgdXNlcyB0aGlzIGZsYWcgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51bWFzazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgdW1hc2sgdG8gcnVuIHRoZSB0YXNrIHVuZGVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXZlcmFsIHZhcmZsYWdzIGFyZSB1c2VmdWwgZm9yIGNvbnRyb2xsaW5nIGhvdyBzaWduYXR1cmVzIGFyZQorICAgICAgICAgICAgY2FsY3VsYXRlZCBmb3IgdmFyaWFibGVzLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwcm9jZXNzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0byBhZGQgdG8gYSB2YXJpYWJsZSdzIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIGl0cyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB2YXJpYWJsZXMgdG8gdGhpcyBsaXN0IGlzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYSBmdW5jdGlvbiByZWZlcnMgdG8gYSB2YXJpYWJsZSBpbiBhIG1hbm5lciB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFsbG93IEJpdEJha2UgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgdmFyaWFibGUgaXMgcmVmZXJyZWQgdG8uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwc2V4Y2x1ZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gYSB2YXJpYWJsZSdzIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIGNhbGN1bGF0aW5nIGl0cyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwdmFsdWU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0LCBpbnN0cnVjdHMgQml0QmFrZSB0byBpZ25vcmUgdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYW5kIGluc3RlYWQgdXNlIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmFyaWFibGUncyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmFyZGVwdmFsdWVleGNsdWRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHBpcGUtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0byBleGNsdWRlCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHZhcmlhYmxlJ3MgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZXZlbnRzJz4KKyAgICAgICAgPHRpdGxlPkV2ZW50czwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGFsbG93cyBpbnN0YWxsYXRpb24gb2YgZXZlbnQgaGFuZGxlcnMgd2l0aGluCisgICAgICAgICAgICByZWNpcGUgYW5kIGNsYXNzIGZpbGVzLgorICAgICAgICAgICAgRXZlbnRzIGFyZSB0cmlnZ2VyZWQgYXQgY2VydGFpbiBwb2ludHMgZHVyaW5nIG9wZXJhdGlvbiwKKyAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGJlZ2lubmluZyBvZiBhbiBvcGVyYXRpb24gYWdhaW5zdCBhIGdpdmVuIHJlY2lwZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmJiPC9maWxlbmFtZT4gZmlsZSksIHRoZSBzdGFydCBvZiBhIGdpdmVuIHRhc2ssCisgICAgICAgICAgICB0YXNrIGZhaWx1cmUsIHRhc2sgc3VjY2VzcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgVGhlIGludGVudCBpcyB0byBtYWtlIGl0IGVhc3kgdG8gZG8gdGhpbmdzIGxpa2UgZW1haWwKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbiBvbiBidWlsZCBmYWlsdXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBldmVudCBoYW5kbGVyIHRoYXQKKyAgICAgICAgICAgIHByaW50cyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgYW5kIHRoZSBjb250ZW50IG9mCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkZJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYWRkaGFuZGxlciBteWNsYXNzX2V2ZW50aGFuZGxlcgorICAgICBweXRob24gbXljbGFzc19ldmVudGhhbmRsZXIoKSB7CisgICAgICAgICBmcm9tIGJiLmV2ZW50IGltcG9ydCBnZXROYW1lCisgICAgICAgICBmcm9tIGJiIGltcG9ydCBkYXRhCisgICAgICAgICBwcmludCgiVGhlIG5hbWUgb2YgdGhlIEV2ZW50IGlzICVzIiAlIGdldE5hbWUoZSkpCisgICAgICAgICBwcmludCgiVGhlIGZpbGUgd2UgcnVuIGZvciBpcyAlcyIgJSBkYXRhLmdldFZhcignRklMRScsIGUuZGF0YSwgVHJ1ZSkpCisgICAgIH0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXZlbnQgaGFuZGxlciBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIGFuIGV2ZW50IGlzCisgICAgICAgICAgICB0cmlnZ2VyZWQuCisgICAgICAgICAgICBBIGdsb2JhbCB2YXJpYWJsZSAiPGZpbGVuYW1lPmU8L2ZpbGVuYW1lPiIgaXMgZGVmaW5lZCBhbmQKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+ZS5kYXRhPC9maWxlbmFtZT4iIGNvbnRhaW5zIGFuIGluc3RhbmNlIG9mCisgICAgICAgICAgICAiPGZpbGVuYW1lPmJiLmRhdGE8L2ZpbGVuYW1lPiIuCisgICAgICAgICAgICBXaXRoIHRoZSA8ZmlsZW5hbWU+Z2V0TmFtZShlKTwvZmlsZW5hbWU+IG1ldGhvZCwgb25lIGNhbiBnZXQKKyAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyZWQgZXZlbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgeW91IHByb2JhYmx5IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzdWJzZXQgb2YgZXZlbnRzLAorICAgICAgICAgICAgeW91IHdvdWxkIGxpa2VseSB1c2UgdGhlIDxmaWxlbmFtZT5bZXZlbnRtYXNrXTwvZmlsZW5hbWU+IGZsYWcKKyAgICAgICAgICAgIGZvciB5b3VyIGV2ZW50IGhhbmRsZXIgdG8gYmUgc3VyZSB0aGF0IG9ubHkgY2VydGFpbiBldmVudHMKKyAgICAgICAgICAgIHRyaWdnZXIgdGhlIGhhbmRsZXIuCisgICAgICAgICAgICBHaXZlbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugb25seSB3YW50ZWQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ZhaWxlZDwvZmlsZW5hbWU+IGV2ZW50IHRvIHRyaWdnZXIgdGhhdAorICAgICAgICAgICAgZXZlbnQgaGFuZGxlci4KKyAgICAgICAgICAgIFVzZSB0aGUgZmxhZyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGRoYW5kbGVyIG15Y2xhc3NfZXZlbnRoYW5kbGVyCisgICAgIG15Y2xhc3NfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuYnVpbGQuVGFza0ZhaWxlZCIKKyAgICAgcHl0aG9uIG15Y2xhc3NfZXZlbnRoYW5kbGVyKCkgeworICAgICAgICAgZnJvbSBiYi5ldmVudCBpbXBvcnQgZ2V0TmFtZQorICAgICAgICAgZnJvbSBiYiBpbXBvcnQgZGF0YQorICAgICAgICAgcHJpbnQoIlRoZSBuYW1lIG9mIHRoZSBFdmVudCBpcyAlcyIgJSBnZXROYW1lKGUpKQorICAgICAgICAgcHJpbnQoIlRoZSBmaWxlIHdlIHJ1biBmb3IgaXMgJXMiICUgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBlLmRhdGEsIFRydWUpKQorICAgICB9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIER1cmluZyBhIHN0YW5kYXJkIGJ1aWxkLCB0aGUgZm9sbG93aW5nIGNvbW1vbiBldmVudHMgbWlnaHQgb2NjdXI6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkNvbmZpZ1BhcnNlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuUGFyc2VTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZVByb2dyZXNzKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5QYXJzZUNvbXBsZXRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQnVpbGRTdGFydGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5idWlsZC5UYXNrU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuYnVpbGQuVGFza0ludmFsaWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tGYWlsZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5jb29rZXIuQ29va2VyRXhpdCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIG90aGVyIGV2ZW50cyB0aGF0IG9jY3VyIGJhc2VkIG9uIHNwZWNpZmljIHJlcXVlc3RzCisgICAgICAgICAgICB0byB0aGUgc2VydmVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCgpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db3JlQmFzZUZpbGVzRm91bmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmIuZXZlbnQuQ29uZmlnRmlsZXNGb3VuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd2YXJpYW50cy1jbGFzcy1leHRlbnNpb24tbWVjaGFuaXNtJz4KKyAgICAgICAgPHRpdGxlPlZhcmlhbnRzIC0gQ2xhc3MgRXh0ZW5zaW9uIE1lY2hhbmlzbTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHR3byBmZWF0dXJlcyB0aGF0IGZhY2lsaXRhdGUgY3JlYXRpbmcKKyAgICAgICAgICAgIGZyb20gYSBzaW5nbGUgcmVjaXBlIGZpbGUgbXVsdGlwbGUgaW5jYXJuYXRpb25zIG9mIHRoYXQKKyAgICAgICAgICAgIHJlY2lwZSBmaWxlIHdoZXJlIGFsbCBpbmNhcm5hdGlvbnMgYXJlIGJ1aWxkYWJsZS4KKyAgICAgICAgICAgIFRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCVkVSU0lPTlMnPjxmaWxlbmFtZT5CQlZFUlNJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgbWVjaGFuaXNtIGZvciB0aGlzIGNsYXNzIGV4dGVuc2lvbiBpcyBleHRyZW1lbHkKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgVXN1YWxseSwgdGhlIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBST1ZJREVTJz48ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3b3VsZCBuZWVkIHRvIGJlIG1vZGlmaWVkIGJ5IHRoZSBleHRlbnNpb24gY2xhc3MuCisgICAgICAgICAgICAgICAgRm9yIHNwZWNpZmljIGV4YW1wbGVzLCBzZWUgdGhlIE9FLUNvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPm11bHRpbGliPC9maWxlbmFtZT4gY2xhc3Nlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzIHVzZWQgdG8gImV4dGVuZCIgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBmb3IgZWFjaCB2YXJpYW50LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCByZXN1bHRzIGluIGEgc2Vjb25kIGluY2FybmF0aW9uIG9mIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBiZWluZyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2Vjb25kIGluY2FybmF0aW9uIHdpbGwgaGF2ZSB0aGUgIm5hdGl2ZSIgY2xhc3MgaW5oZXJpdGVkLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+QkJWRVJTSU9OUzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgY29uZGl0aW9uYWwgbWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgKHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSkgZm9yIGEgc2luZ2xlIHZlcnNpb24sIG9yIGFuIG9wdGlvbmFsbHkgbmFtZWQgcmFuZ2Ugb2YgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQlZFUlNJT05TID0gIjEuMCAyLjAgZ2l0IgorICAgICBTUkNfVVJJX2dpdCA9ICJnaXQ6Ly9zb21ldXJsL3NvbWVwYXRoLmdpdCIKKworICAgICBCQlZFUlNJT05TID0gIjEuMC5bMC02XToxLjAuMCsgXCAxLjAuWzctOV06MS4wLjcrIgorICAgICBTUkNfVVJJX2FwcGVuZF8xLjAuNysgPSAiZmlsZTovL3NvbWVfcGF0Y2hfd2hpY2hfdGhlX25ld192ZXJzaW9uc19uZWVkLnBhdGNoO3BhdGNoPTEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJhbmdlIGRlZmF1bHRzIHRvIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBPcGVuRW1iZWRkZWQsIHRoZSByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vXzEuMC4wKy5iYjwvZmlsZW5hbWU+IGNyZWF0ZXMgYSBkZWZhdWx0IG5hbWUgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPjEuMC4wKzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHRoZSByYW5nZSBuYW1lIGlzIG5vdCBvbmx5IHBsYWNlZAorICAgICAgICAgICAgICAgICAgICBpbnRvIG92ZXJyaWRlcywgYnV0IGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgZm9yIHRoZSBtZXRhZGF0YSB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgYmFzZSByZWNpcGUgdmVyc2lvbnMgZm9yIHVzZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IHNlYXJjaCBwYXRocworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkRlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBhbGxvdyBmb3IgZWZmaWNpZW50IG9wZXJhdGlvbiBnaXZlbiBtdWx0aXBsZSBwcm9jZXNzZXMKKyAgICAgICAgICAgIGV4ZWN1dGluZyBpbiBwYXJhbGxlbCwgQml0QmFrZSBoYW5kbGVzIGRlcGVuZGVuY2llcyBhdAorICAgICAgICAgICAgdGhlIHRhc2sgbGV2ZWwuCisgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIGEgcm9idXN0IG1ldGhvZCB0byBoYW5kbGUgdGhlc2UgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgdHlwZXMgb2YgZGVwZW5kZW5jeSBtZWNoYW5pc21zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlcGVuZGVuY2llcy1pbnRlcm5hbC10by10aGUtYmItZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+RGVwZW5kZW5jaWVzIEludGVybmFsIHRvIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICB0byBtYW5hZ2UgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGludGVybmFsIHRvIGEgZ2l2ZW4gcmVjaXBlCisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiBkaXJlY3RpdmUgdG8KKyAgICAgICAgICAgICAgICBpbmRpY2F0ZSB3aGVuIGEgdGFzayBpcyBkZXBlbmRlbnQgb24gb3RoZXIgdGFza3Mgb3Igd2hlbgorICAgICAgICAgICAgICAgIG90aGVyIHRhc2tzIGRlcGVuZCBvbiB0aGF0IHJlY2lwZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBhZGR0YXNrIHByaW50ZGF0ZSBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPnByaW50ZGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBjb21wbGV0aW9uIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgQW5kLCB0aGUgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gZGVwZW5kcyBvbiB0aGUgY29tcGxldGlvbgorICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+cHJpbnRkYXRlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBtYW5hZ2UgYnVpbGQgdGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhlICJkZXB0YXNrIiB2YXJmbGFnIGZvciB0YXNrcyBzaWduaWZpZXMgdGhlIHRhc2sgb2YgZWFjaAorICAgICAgICAgICAgICAgIGl0ZW0gbGlzdGVkIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4gdGhhdCBtdXN0CisgICAgICAgICAgICAgICAgY29tcGxldGUgYmVmb3JlIHRoYXQgdGFzayBjYW4gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fY29uZmlndXJlW2RlcHRhc2tdID0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0YXNrIG9mIGVhY2ggaXRlbSBpbiA8ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+IG11c3QgY29tcGxldGUgYmVmb3JlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SdW50aW1lIERlcGVuZGVuY2llczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gbWFuYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgbGlzdHMgcnVudGltZQorICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhvc2UgcGFja2FnZXMgY2FuIGhhdmUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgVGhlICJyZGVwdGFzayIgZmxhZyBmb3IgdGFza3MgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSB0YXNrIG9mIGVhY2gKKyAgICAgICAgICAgICAgICBpdGVtIHJ1bnRpbWUgZGVwZW5kZW5jeSB3aGljaCBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGF0CisgICAgICAgICAgICAgICAgdGFzayBjYW4gYmUgZXhlY3V0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlX3FhW3JkZXB0YXNrXSA9ICJkb19wYWNrYWdlZGF0YSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgZWFjaCBpdGVtIGluIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IG11c3QgaGF2ZQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCBiZWZvcmUgPGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPiBjYW4gZXhlY3V0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWN1cnNpdmUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZWN1cnNpdmUgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSAicmVjcmRlcHRhc2siIGZsYWcgdG8gbWFuYWdlCisgICAgICAgICAgICAgICAgcmVjdXJzaXZlIHRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIEJpdEJha2UgbG9va3MgdGhyb3VnaCB0aGUgYnVpbGQtdGltZSBhbmQgcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aGUgY3VycmVudCByZWNpcGUsIGxvb2tzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgdGFzaydzIGludGVyLXRhc2sKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGFkZHMgZGVwZW5kZW5jaWVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICBsaXN0ZWQgdGFzay4KKyAgICAgICAgICAgICAgICBPbmNlIEJpdEJha2UgaGFzIGFjY29tcGxpc2hlZCB0aGlzLCBpdCByZWN1cnNpdmVseSB3b3JrcyB0aHJvdWdoCisgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY2llcyBvZiB0aG9zZSB0YXNrcy4KKyAgICAgICAgICAgICAgICBJdGVyYXRpdmUgcGFzc2VzIGNvbnRpbnVlIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGRpc2NvdmVyZWQKKyAgICAgICAgICAgICAgICBhbmQgYWRkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIG5vdCBvbmx5IGhhdmUgQml0QmFrZSBsb29rIGZvcgorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aG9zZSB0YXNrcywgYnV0IGFsc28gaGF2ZSBCaXRCYWtlIGxvb2sKKyAgICAgICAgICAgICAgICBmb3IgYnVpbGQtdGltZSBhbmQgcnVudGltZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcGVuZGVudAorICAgICAgICAgICAgICAgIHRhc2tzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgeW91IG5lZWQgdG8gcmVmZXJlbmNlIHRoZSB0YXNrIG5hbWUKKyAgICAgICAgICAgICAgICBpdHNlbGYgaW4gdGhlIHRhc2sgbGlzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2FbcmVjcmRlcHRhc2tdID0gImRvX2EgZG9fYiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW50ZXItdGFzay1kZXBlbmRlbmNpZXMnPgorICAgICAgICAgICAgPHRpdGxlPkludGVyLVRhc2sgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSAiZGVwZW5kcyIgZmxhZyBpbiBhIG1vcmUgZ2VuZXJpYyBmb3JtCisgICAgICAgICAgICAgICAgdG8gbWFuYWdlIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoaXMgbW9yZSBnZW5lcmljIGZvcm0gYWxsb3dzIGZvciBpbnRlci1kZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgY2hlY2tzIGZvciBzcGVjaWZpYyB0YXNrcyByYXRoZXIgdGhhbiBjaGVja3MgZm9yCisgICAgICAgICAgICAgICAgdGhlIGRhdGEgaW4gPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYXRjaFtkZXBlbmRzXSA9ICJxdWlsdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRhc2sgb2YgdGhlIHRhcmdldCA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBtdXN0IGhhdmUgY29tcGxldGVkIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiB0YXNrIGNhbiBleGVjdXRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgInJkZXBlbmRzIiBmbGFnIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgYnV0IHRha2VzIHRhcmdldHMKKyAgICAgICAgICAgICAgICBpbiB0aGUgcnVudGltZSBuYW1lc3BhY2UgaW5zdGVhZCBvZiB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgbmFtZXNwYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2FjY2Vzc2luZy1kYXRhc3RvcmUtdmFyaWFibGVzLXVzaW5nLXB5dGhvbic+CisgICAgICAgIDx0aXRsZT5BY2Nlc3NpbmcgRGF0YXN0b3JlIFZhcmlhYmxlcyBVc2luZyBQeXRob248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGFjY2VzcyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICBCaXRCYWtlIGRhdGFzdG9yZSB1c2luZyBQeXRob24gZnVuY3Rpb25zLgorICAgICAgICAgICAgVGhlIEJpdGJha2UgZGF0YXN0b3JlIGhhcyBhbiBBUEkgdGhhdCBhbGxvd3MgeW91IHRoaXMKKyAgICAgICAgICAgIGFjY2Vzcy4KKyAgICAgICAgICAgIEhlcmUgaXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBvcGVyYXRpb25zOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0nbm9uZSc+CisgICAgICAgICAgICAgICAgPHRncm91cCBjb2xzPScyJyBhbGlnbj0nbGVmdCcgY29sc2VwPScxJyByb3dzZXA9JzEnPgorICAgICAgICAgICAgICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSdjMScgY29sd2lkdGg9JzEqJy8+CisgICAgICAgICAgICAgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9J2MyJyBjb2x3aWR0aD0nMSonLz4KKyAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxlbXBoYXNpcz5PcGVyYXRpb248L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZW1waGFzaXM+RGVzY3JpcHRpb248L2VtcGhhc2lzPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmdldFZhcigiWCIsIGV4cGFuZD1GYWxzZSk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSAiWCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nICJleHBhbmQ9VHJ1ZSIgZXhwYW5kcyB0aGUgdmFsdWUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnNldFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+U2V0cyB0aGUgdmFyaWFibGUgIlgiIHRvICJ2YWx1ZSIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmFwcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhcigiWCIsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QWRkcyAidmFsdWUiIHRvIHRoZSBzdGFydCBvZiB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXIoIlgiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkRlbGV0ZXMgdGhlIHZhcmlhYmxlICJYIiBmcm9tIHRoZSBkYXRhc3RvcmUuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLnJlbmFtZVZhcigiWCIsICJZIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5SZW5hbWVzIHRoZSB2YXJpYWJsZSAiWCIgdG8gIlkiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFnKCJYIiwgZmxhZywgZXhwYW5kPUZhbHNlKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPkdldHMgdGhlbiBuYW1lZCBmbGFnIGZyb20gdGhlIHZhcmlhYmxlICJYIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgImV4cGFuZD1UcnVlIiBleHBhbmRzIHRoZSBuYW1lZCBmbGFnLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFnKCJYIiwgZmxhZywgInZhbHVlIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBuYW1lZCBmbGFnIGZvciB2YXJpYWJsZSAiWCIgdG8gInZhbHVlIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQuYXBwZW5kVmFyRmxhZygiWCIsIGZsYWcsICJ2YWx1ZSIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+QXBwZW5kcyAidmFsdWUiIHRvIHRoZSBuYW1lZCBmbGFnIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICJYIi48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGZpbGVuYW1lPmQucHJlcGVuZFZhckZsYWcoIlgiLCBmbGFnLCAidmFsdWUiKTwvZmlsZW5hbWU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPlByZXBlbmRzICJ2YWx1ZSIgdG8gdGhlIG5hbWVkIGZsYWcgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgIlgiLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5kZWxWYXJGbGFnKCJYIiwgZmxhZyk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIHRoZSBuYW1lZCBmbGFnIG9uIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWCIgZnJvbSB0aGUgZGF0YXN0b3JlLjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5zZXRWYXJGbGFncygiWCIsIGZsYWdzZGljdCk8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5TZXRzIHRoZSBmbGFncyBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5mbGFnc2RpY3QoKTwvZmlsZW5hbWU+IHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldFZhckZsYWdzPC9maWxlbmFtZT4gZG9lcyBub3QgY2xlYXIgcHJldmlvdXMgZmxhZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaW5rIG9mIHRoaXMgb3BlcmF0aW9uIGFzIDxmaWxlbmFtZT5hZGRWYXJGbGFnczwvZmlsZW5hbWU+LjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48ZmlsZW5hbWU+ZC5nZXRWYXJGbGFncygiWCIpPC9maWxlbmFtZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+UmV0dXJucyBhIDxmaWxlbmFtZT5mbGFnc2RpY3Q8L2ZpbGVuYW1lPiBvZiB0aGUgZmxhZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxmaWxlbmFtZT5kLmRlbFZhckZsYWdzKCJYIik8L2ZpbGVuYW1lPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij5EZWxldGVzIGFsbCB0aGUgZmxhZ3MgZm9yIHRoZSB2YXJpYWJsZSAiWCIuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgICAgPC9pbmZvcm1hbHRhYmxlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Rhc2stY2hlY2tzdW1zLWFuZC1zZXRzY2VuZSc+CisgICAgICAgIDx0aXRsZT5UYXNrIENoZWNrc3VtcyBhbmQgU2V0c2NlbmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIGNoZWNrc3VtcyAob3Igc2lnbmF0dXJlcykgYWxvbmcgd2l0aCB0aGUgc2V0c2NlbmUKKyAgICAgICAgICAgIHRvIGRldGVybWluZSBpZiBhIHRhc2sgbmVlZHMgdG8gYmUgcnVuLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRvIGhlbHAgdW5kZXJzdGFuZCBob3cgQml0QmFrZSBkb2VzIHRoaXMsIHRoZSBzZWN0aW9uIGFzc3VtZXMgYW4KKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBtZXRhZGF0YS1iYXNlZCBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGxpc3QgaXMgYSBwbGFjZSBob2xkZXIgb2YgY29udGVudCBleGlzdGVkIGZyb20gcHJldmlvdXMgd29yaworICAgICAgICAgICAgb24gdGhlIG1hbnVhbC4KKyAgICAgICAgICAgIFNvbWUgb3IgYWxsIG9mIGl0IHByb2JhYmx5IG5lZWRzIGludGVncmF0ZWQgaW50byB0aGUgc3Vic2VjdGlvbnMKKyAgICAgICAgICAgIHRoYXQgbWFrZSB1cCB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBGb3Igbm93LCBJIGhhdmUganVzdCBwcm92aWRlZCBhIHNob3J0IGdsb3NzYXJ5LWxpa2UgZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGZvciBlYWNoIHZhcmlhYmxlLgorICAgICAgICAgICAgVWx0aW1hdGVseSwgdGhpcyBsaXN0IGdvZXMgYXdheS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBwYXRoIHRvIGNyZWF0ZSBzdGFtcCBmaWxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlNUQU1QQ0xFQU48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgdGhlIGJhc2UgcGF0aCB0byBjcmVhdGUgc3RhbXAgZmlsZXMgYnV0IGNhbiB1c2Ugd2lsZGNhcmRzCisgICAgICAgICAgICAgICAgICAgIGZvciBtYXRjaGluZyBhIHJhbmdlIG9mIGZpbGVzIGZvciBjbGVhbiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NUQU1QX1dISVRFTElTVDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHN0YW1wIGZpbGVzIHRoYXQgYXJlIGxvb2tlZCBhdCB3aGVuIHRoZSBzdGFtcCBwb2xpY3kKKyAgICAgICAgICAgICAgICAgICAgaXMgIndoaXRlbGlzdCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfU1RBTVBfUE9MSUNZPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbW9kZSBmb3IgY29tcGFyaW5nIHRpbWVzdGFtcHMgb2Ygc3RhbXAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfSEFTSENIRUNLX0ZVTkNUSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZworICAgICAgICAgICAgICAgICAgICB0aGUgInNldHNjZW5lIiBwYXJ0IG9mIHRoZSB0YXNrJ3MgZXhlY3V0aW9uIGluIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHRvIHZhbGlkYXRlIHRoZSBsaXN0IG9mIHRhc2sgaGFzaGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhhdCB2ZXJpZmllcyB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwbGFubmVkIHRhc2sgZXhlY3V0aW9uIGJlZm9yZSB0aGUgbWFpbiB0YXNrIGV4ZWN1dGlvbgorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1NFVFNDRU5FX0RFUFZBTElEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgZnVuY3Rpb24gQml0QmFrZSBjYWxscyB0aGF0IGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgd2hldGhlciBCaXRCYWtlIHJlcXVpcmVzIGEgc2V0c2NlbmUgZGVwZW5kZW5jeSB0bworICAgICAgICAgICAgICAgICAgICBiZSBtZXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfVEFTS0hBU0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBXaXRoaW4gYW4gZXhlY3V0aW5nIHRhc2ssIHRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGhhc2gKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhc2sgYXMgcmV0dXJuZWQgYnkgdGhlIGN1cnJlbnRseSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2JpdGJha2UtdXNlci1tYW51YWwtcmVmLXZhcmlhYmxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlMWI5NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1yZWYtdmFyaWFibGVzLnhtbApAQCAtMCwwICsxLDIyNjIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzwhLS0gRHVtbXkgY2hhcHRlciAtLT4KKzxjaGFwdGVyIGlkPSdyZWYtdmFyaWFibGVzLWdsb3MnPgorCis8dGl0bGU+VmFyaWFibGVzIEdsb3NzYXJ5PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGxpc3RzIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBieSBCaXRCYWtlIGFuZCBnaXZlcyBhbiBvdmVydmlldworICAgIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBjb250ZW50cy4KKzwvcGFyYT4KKworPG5vdGU+CisgICAgRm9sbG93aW5nIGFyZSBzb21lIHBvaW50cyByZWdhcmRpbmcgdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeToKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhpcyBnbG9zc2FyeQorICAgICAgICAgICAgYXJlIHNwZWNpZmljIHRvIEJpdEJha2UuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBkZXNjcmlwdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhhdCBjb250ZXh0LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbHNvLCB2YXJpYWJsZXMgZXhpc3QgaW4gb3RoZXIgc3lzdGVtcyB0aGF0IHVzZSBCaXRCYWtlCisgICAgICAgICAgICAoZS5nLiBUaGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkKSB0aGF0IGhhdmUgbmFtZXMgaWRlbnRpY2FsCisgICAgICAgICAgICB0byB0aG9zZSBmb3VuZCBpbiB0aGlzIGdsb3NzYXJ5LgorICAgICAgICAgICAgRm9yIHN1Y2ggY2FzZXMsIHRoZSB2YXJpYWJsZXMgaW4gdGhvc2Ugc3lzdGVtcyBleHRlbmQgdGhlCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2YXJpYWJsZSBhcyBpdCBpcyBkZXNjcmliZWQgaGVyZSBpbgorICAgICAgICAgICAgdGhpcyBnbG9zc2FyeS4KKyAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmluYWxseSwgdGhlcmUgYXJlIHZhcmlhYmxlcyBtZW50aW9uZWQgaW4gdGhpcworICAgICAgICAgICAgZ2xvc3NhcnkgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBCaXRCYWtlIGdsb3NzYXJ5LgorICAgICAgICAgICAgVGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB2YXJpYWJsZXMgdXNlZCBpbiBzeXN0ZW1zIHRoYXQgdXNlCisgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L25vdGU+CisKKzxnbG9zc2FyeSBpZD0ncmVmLXZhcmlhYmxlcy1nbG9zc2FyeSc+CisKKyAgICA8cGFyYT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVNTVU1FX1BST1ZJREVEJz5BPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz5CPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DQUNIRSc+QzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5EPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWENMVURFX0ZST01fV09STEQnPkU8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZBS0VST09UJz5GPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HSVRESVInPkc8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhHRElSJz5IPC9saW5rPgorPCEtLSAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRElTQUJMRUQnPkk8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1qJz5KPC9saW5rPiAtLT4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtBUkNIJz5LPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFZRVJERVBFTkRTJz5MPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz5NPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1uJz5OPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz5PPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+UDwvbGluaz4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz5RPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlI8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNFQ1RJT04nPlM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVQnPlQ8L2xpbms+Cis8IS0tICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9DT05GSUcnPlU8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS12Jz5WPC9saW5rPiAtLT4KKzwhLS0gICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPlc8L2xpbms+IC0tPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS14Jz5YPC9saW5rPiAtLT4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteSc+WTwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXonPlo8L2xpbms+LS0+CisgICAgPC9wYXJhPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYSc+PHRpdGxlPkE8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1BST1ZJREVEJz48Z2xvc3N0ZXJtPkFTU1VNRV9QUk9WSURFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyByZWNpcGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcykgQml0QmFrZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGFzc3VtZXMgdGhlc2UgcmVjaXBlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkIENvcmUsIDxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtb3N0bHkgc3BlY2lmaWVzIG5hdGl2ZSB0b29scyB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBzcGVjaWZpZWQgYWxsb3dzIGZvciB0aGUgR2l0IGJpbmFyeSBmcm9tIHRoZSBob3N0IHRvCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWQgcmF0aGVyIHRoYW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1iJz48dGl0bGU+QjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CJz48Z2xvc3N0ZXJtPkI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBCaXRCYWtlIGV4ZWN1dGVzIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0FMTE9XRURfTkVUV09SS1MnPjxnbG9zc3Rlcm0+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhvc3QgbGlzdCBpcyBvbmx5IHVzZWQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTk9fTkVUV09SSyc+PGZpbGVuYW1lPkJCX05PX05FVFdPUks8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlaXRoZXIgbm90IHNldCBvciBzZXQgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbWl0ZWQgc3VwcG9ydCBmb3Igd2lsZGNhcmQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgaG9zdCBuYW1lcyBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0dGluZyBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdC5nbnUub3JnPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZ0cC5nbnUub3JnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb28uZ2l0LmdudS5vcmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0FMTE9XRURfTkVUV09SS1MgPSAiKi5nbnUub3JnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JzIG5vdCBpbiB0aGUgaG9zdCBsaXN0IGFyZSBza2lwcGVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlZCBpbiBkZWJ1Zy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRlbXB0cyB0byBhY2Nlc3MgbmV0d29ya3Mgbm90IGluIHRoZSBob3N0IGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZSBhIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHZlcnkgdXNlZnVsLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGhvc3QgeW91IHdhbnQgdG8gdXNlIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gcmVzdWx0cyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgZmV0Y2hlZCBmcm9tIGFuIGFsbG93ZWQgbG9jYXRpb24gYW5kIGF2b2lkcyByYWlzaW5nCisgICAgICAgICAgICAgICAgICAgIGFuIGVycm9yIHdoZW4gYSBob3N0IHRoYXQgaXMgbm90IGFsbG93ZWQgaXMgaW4gYQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIGZldGNoZXIgZG9lcyBub3QgYXR0ZW1wdCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGhvc3QgbGlzdGVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYWZ0ZXIgYQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsIGZldGNoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb2NjdXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0NPTlNPTEVMT0cnPjxnbG9zc3Rlcm0+QkJfQ09OU09MRUxPRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gYSBsb2cgZmlsZSBpbnRvIHdoaWNoIEJpdEJha2UncyB1c2VyCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSB3cml0ZXMgb3V0cHV0IGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfQ1VSUkVOVFRBU0snPjxnbG9zc3Rlcm0+QkJfQ1VSUkVOVFRBU0s8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIGRvZXMgbm90IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb188L2ZpbGVuYW1lPiBwcmVmaXguCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48Z2xvc3N0ZXJtPkJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gb2Z0ZW4gb2NjdXJzIHdoZW4gbGF5ZXJzIGdldCBvdXQgb2Ygc3luYworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+b2UtY29yZTwvZmlsZW5hbWU+IGJ1bXBzIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHZlcnNpb24gYW5kIHRoZSBvbGQgcmVjaXBlIG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciBsYXllciBoYXMgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbmV3IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB5ZXQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmYXRhbCBiZWhhdmlvciBpcyBzYWZlc3QgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgICAgICAgICB0aGUgc2FuZSByZWFjdGlvbiBnaXZlbiBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHdoZW4geW91ciBjaGFuZ2VzIGFyZSBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ERUZBVUxUX1RBU0snPjxnbG9zc3Rlcm0+QkJfREVGQVVMVF9UQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgdG8gdXNlIHdoZW4gbm9uZSBpcyBzcGVjaWZpZWQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIG5hbWUgc3BlY2lmaWVkIHNob3VsZCBub3QgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvXzwvZmlsZW5hbWU+IHByZWZpeC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxnbG9zc3Rlcm0+QkJfRElTS01PTl9ESVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE1vbml0b3JzIGRpc2sgc3BhY2UgYW5kIGF2YWlsYWJsZSBpbm9kZXMgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICBhbmQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSBidWlsZCBiYXNlZCBvbiB0aGVzZQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNrIHNwYWNlIG1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIiZsdDthY3Rpb24mZ3Q7LCZsdDtkaXImZ3Q7LCZsdDt0aHJlc2hvbGQmZ3Q7IFsuLi5dIgorCisgICAgIHdoZXJlOgorCisgICAgICAgICZsdDthY3Rpb24mZ3Q7IGlzOgorICAgICAgICAgICBBQk9SVDogICAgIEltbWVkaWF0ZWx5IGFib3J0IHRoZSBidWlsZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBTVE9QVEFTS1M6IFN0b3AgdGhlIGJ1aWxkIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgaGF2ZSBmaW5pc2hlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBXQVJOOiAgICAgIElzc3VlIGEgd2FybmluZyBidXQgY29udGludWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgd2hlbiBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGFzCisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGRlZmluZWQuCisKKyAgICAgICAgJmx0O2RpciZndDsgaXM6CisgICAgICAgICAgIEFueSBkaXJlY3RvcnkgeW91IGNob29zZS4gWW91IGNhbiBzcGVjaWZ5IG9uZSBvcgorICAgICAgICAgICBtb3JlIGRpcmVjdG9yaWVzIHRvIG1vbml0b3IgYnkgc2VwYXJhdGluZyB0aGUKKyAgICAgICAgICAgZ3JvdXBpbmdzIHdpdGggYSBzcGFjZS4gIElmIHR3byBkaXJlY3RvcmllcyBhcmUKKyAgICAgICAgICAgb24gdGhlIHNhbWUgZGV2aWNlLCBvbmx5IHRoZSBmaXJzdCBkaXJlY3RvcnkKKyAgICAgICAgICAgaXMgbW9uaXRvcmVkLgorCisgICAgICAgICZsdDt0aHJlc2hvbGQmZ3Q7IGlzOgorICAgICAgICAgICBFaXRoZXIgdGhlIG1pbmltdW0gYXZhaWxhYmxlIGRpc2sgc3BhY2UsCisgICAgICAgICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmcmVlIGlub2Rlcywgb3IKKyAgICAgICAgICAgYm90aC4gIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lLiAgVG8KKyAgICAgICAgICAgb21pdCBvbmUgb3IgdGhlIG90aGVyLCBzaW1wbHkgb21pdCB0aGUgdmFsdWUuCisgICAgICAgICAgIFNwZWNpZnkgdGhlIHRocmVzaG9sZCB1c2luZyBHLCBNLCBLIGZvciBHYnl0ZXMsCisgICAgICAgICAgIE1ieXRlcywgYW5kIEtieXRlcywgcmVzcGVjdGl2ZWx5LiBJZiB5b3UgZG8KKyAgICAgICAgICAgbm90IHNwZWNpZnkgRywgTSwgb3IgSywgS2J5dGVzIGlzIGFzc3VtZWQgYnkKKyAgICAgICAgICAgZGVmYXVsdC4gIERvIG5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUciCisgICAgIEJCX0RJU0tNT05fRElSUyA9ICJBQk9SVCwke1RNUERJUn0sLDEwMEsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGV4YW1wbGUgd29ya3Mgb25seSBpZiB5b3UgYWxzbyBzZXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAgICAgYWJvcnQgd2hlbiBlaXRoZXIgdGhlIGRpc2sgc3BhY2UgaW4gPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIGF2YWlsYWJsZSBmcmVlIGlub2RlcyBkcm9wcyBiZWxvdworICAgICAgICAgICAgICAgICAgICAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHR3byBkaXJlY3RvcmllcyBhcmUgcHJvdmlkZWQgd2l0aCB0aGUgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYWxzbyBpc3N1ZXMgYQorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nIHdoZW4gdGhlIGRpc2sgc3BhY2UgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NTVEFURV9ESVJ9PC9maWxlbmFtZT4gZGlyZWN0b3J5IGRyb3BzCisgICAgICAgICAgICAgICAgICAgIGJlbG93IDEgR2J5dGUgb3IgdGhlIG51bWJlciBvZiBmcmVlIGlub2RlcyBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBTdWJzZXF1ZW50IHdhcm5pbmdzIGFyZSBpc3N1ZWQgZHVyaW5nIGludGVydmFscyBhcworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBleGFtcGxlIHN0b3BzIHRoZSBidWlsZCBhZnRlciBhbGwgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZyB0YXNrcyBjb21wbGV0ZSB3aGVuIHRoZSBtaW5pbXVtIGRpc2sgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZHJvcHMgYmVsb3cgMSBHYnl0ZS4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBtb25pdG9yaW5nIG9jY3VycyBmb3IgdGhlIGZyZWUgaW5vZGVzIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIGV4YW1wbGUgaW1tZWRpYXRlbHkgYWJvcnRzIHRoZSBidWlsZCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZnJlZSBpbm9kZXMgaW4gdGhlIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgZHJvcHMgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgTm8gZGlzayBzcGFjZSBtb25pdG9yaW5nIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZiBvY2N1cnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0RJU0tNT05fV0FSTklOVEVSVkFMJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRlZmluZSBpdHMgYWN0aW9uIGFzICJXQVJOIi4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgc3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIG9yIG51bWJlciBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BlY3RpdmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB5b3UgZG8gdXNlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSAiV0FSTiIgYWN0aW9uLCB0aGUgZGlzayBtb25pdG9yaW5nIGludGVydmFsIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB0aGUgdmFyaWFibGUgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiJmx0O2Rpc2tfc3BhY2VfaW50ZXJ2YWwmZ3Q7LCZsdDtkaXNrX2lub2RlX2ludGVydmFsJmd0OyIKKworICAgICB3aGVyZToKKworICAgICAgICAmbHQ7ZGlza19zcGFjZV9pbnRlcnZhbCZndDsgaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIG1lbW9yeSBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKworICAgICAgICAmbHQ7ZGlza19pbm9kZV9pbnRlcnZhbCZndDsgaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIGZyZWUgaW5vZGVzIGV4cHJlc3NlZCBpbiBlaXRoZXIKKyAgICAgICAgICAgRywgTSwgb3IgSyBmb3IgR2J5dGVzLCBNYnl0ZXMsIG9yIEtieXRlcywKKyAgICAgICAgICAgcmVzcGVjdGl2ZWx5LiBZb3UgY2Fubm90IHVzZSBHQiwgTUIsIG9yIEtCLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1NTVEFURV9ESVJ9LDFHLDEwMEsiCisgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMID0gIjUwTSw1SyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB2YXJpYWJsZXMgY2F1c2UgQml0QmFrZSB0bworICAgICAgICAgICAgICAgICAgICBpc3N1ZSBzdWJzZXF1ZW50IHdhcm5pbmdzIGVhY2ggdGltZSB0aGUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIGRpc2sgc3BhY2UgZnVydGhlciByZWR1Y2VzIGJ5IDUwIE1ieXRlcyBvciB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIG9mIGZyZWUgaW5vZGVzIGZ1cnRoZXIgcmVkdWNlcyBieSA1IEtieXRlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U1NUQVRFX0RJUn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgd2FybmluZ3MgYmFzZWQgb24gdGhlIGludGVydmFsIG9jY3VyIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBhIHJlc3BlY3RpdmUgaW50ZXJ2YWwgaXMgcmVhY2hlZCBiZXlvbmQgdGhlIGluaXRpYWwgd2FybmluZworICAgICAgICAgICAgICAgICAgICAoaS5lLiAxIEdieXRlcyBhbmQgMTAwIEtieXRlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRU5WX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9FTlZfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgaW50ZXJuYWwgd2hpdGVsaXN0IG9mIHZhcmlhYmxlcyB0byBhbGxvdworICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsIGVudmlyb25tZW50IGludG8gQml0QmFrZSdzCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGUgZm9sbG93aW5nIGxpc3QgaXMgdXNlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1BSRVNFUlZFX0VOVic+PGZpbGVuYW1lPkJCX1BSRVNFUlZFX0VOVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48ZmlsZW5hbWU+QkJfRU5WX0VYVFJBV0hJVEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0VOVl9FWFRSQVdISVRFJz48Z2xvc3N0ZXJtPkJCX0VOVl9FWFRSQVdISVRFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhbiBhZGRpdGlvbmFsIHNldCBvZiB2YXJpYWJsZXMgdG8gYWxsb3cgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAod2hpdGVsaXN0KSBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbGlzdCBvZiB2YXJpYWJsZXMgYXJlIG9uIHRvcCBvZiB0aGUgaW50ZXJuYWwgbGlzdAorICAgICAgICAgICAgICAgICAgICBzZXQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0VOVl9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9FTlZfV0hJVEVMSVNUPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgaW4gb3JkZXIgZm9yIGl0IHRvIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9GRVRDSF9QUkVNSVJST1JPTkxZJz48Z2xvc3N0ZXJtPkJCX0ZFVENIX1BSRU1JUlJPUk9OTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gIjEiLCBjYXVzZXMgQml0QmFrZSdzIGZldGNoZXIgbW9kdWxlIHRvIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgc2VhcmNoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3Qgc2VhcmNoIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRklMRU5BTUUnPjxnbG9zc3Rlcm0+QkJfRklMRU5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIGZpbGVuYW1lIG9mIHRoZSByZWNpcGUgdGhhdCBvd25zIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+IHRhc2sgdGhhdAorICAgICAgICAgICAgICAgICAgICByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bXktcmVjaXBlLmJiPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nLCB0aGUgPGZpbGVuYW1lPkJCX0ZJTEVOQU1FPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgIi9mb28vcGF0aC9teS1yZWNpcGUuYmIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGdsb3NzdGVybT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIEdpdCBtZXRhZGF0YSwgdG8gYmUgcGxhY2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQW55b25lIHdpc2hpbmcgdG8gY3JlYXRlIGEgc291cmNlIG1pcnJvciB3b3VsZCB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgY3JlYXRpbmcgYW5kIHBsYWNpbmcgdGFyYmFsbHMgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCByZXBvc2l0b3JpZXMgaXMgbm90IHRoZSBkZWZhdWx0IGFjdGlvbiBieSBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSENPTkZJR19XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfSEFTSENPTkZJR19XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdmFyaWFibGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gYmFzZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLCB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25lIG9mIHRoZSB3YXlzIEJpdEJha2UgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlLXBhcnNlIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWluIG1ldGFkYXRhIGlzIHRocm91Z2ggY2hlY2tzdW1zIG9mIHRoZSB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGRhdGFzdG9yZSBvZiB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB2YXJpYWJsZXMgdGhhdCB5b3UgdHlwaWNhbGx5IHdhbnQgdG8gZXhjbHVkZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRvIHJlLXBhcnNlIGFuZCB0aHVzIHJlYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB5b3Ugd291bGQgdXN1YWxseSBleGNsdWRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USU1FPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5EQVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGVzZSB2YXJpYWJsZXMgYXJlIGFsd2F5cyBjaGFuZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBub3QgZXhjbHVkZSB0aGVtLCBCaXRCYWtlIHdvdWxkIG5ldmVyIHJldXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWNoZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9IQVNIQkFTRV9XSElURUxJU1QnPjxnbG9zc3Rlcm0+QkJfSEFTSEJBU0VfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGNoZWNrc3VtIGFuZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGRhdGEuCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlcyB0aGF0IGFyZSBleGNsdWRlZCBjYW4gdGhlcmVmb3JlIGNoYW5nZSB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgIGFmZmVjdGluZyB0aGUgY2hlY2tzdW0gbWVjaGFuaXNtLgorICAgICAgICAgICAgICAgICAgICBBIGNvbW1vbiBleGFtcGxlIHdvdWxkIGJlIHRoZSB2YXJpYWJsZSBmb3IgdGhlIHBhdGggb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlJ3Mgb3V0cHV0IHNob3VsZCBub3QgKGFuZCB1c3VhbGx5IGRvZXMgbm90KSBkZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCB3YXMgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSEFTSENIRUNLX0ZVTkNUSU9OJz48Z2xvc3N0ZXJtPkJCX0hBU0hDSEVDS19GVU5DVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAic2V0c2NlbmUiIHBhcnQgb2YgdGhlIHRhc2sncyBleGVjdXRpb24gaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGUgdGhlIGxpc3Qgb2YgdGFzayBoYXNoZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mIHNldHNjZW5lIHRhc2tzIHRoYXQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IGluIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvZGUsIHRoZSBvYmplY3RpdmUKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYSBnaXZlbiBzZXRzY2VuZSBmdW5jdGlvbiBpcyBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgdG8gd29yayBvciBub3QuCisgICAgICAgICAgICAgICAgICAgIEl0J3MgZWFzaWVyIHRvIGNoZWNrIHRoZSBsaXN0IG9mIHNldHNjZW5lIGZ1bmN0aW9ucyBpbgorICAgICAgICAgICAgICAgICAgICBvbmUgcGFzcyB0aGFuIHRvIGNhbGwgbWFueSBpbmRpdmlkdWFsIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV0dXJuZWQgbGlzdCBuZWVkIG5vdCBiZSBjb21wbGV0ZWx5IGFjY3VyYXRlLgorICAgICAgICAgICAgICAgICAgICBBIGdpdmVuIHNldHNjZW5lIHRhc2sgY2FuIHN0aWxsIGxhdGVyIGZhaWwuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSBkYXRhIHJldHVybmVkLCB0aGUgbW9yZQorICAgICAgICAgICAgICAgICAgICBlZmZpY2llbnQgdGhlIGJ1aWxkIHdpbGwgYmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfSU5WQUxJRENPTkYnPjxnbG9zc3Rlcm0+QkJfSU5WQUxJRENPTkY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q29uZmlnUGFyc2VkPC9maWxlbmFtZT4gZXZlbnQgdG8gdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICByZS1wYXJzaW5nIHRoZSBiYXNlIG1ldGFkYXRhIChpLmUuIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Q29uZmlnUGFyc2VkPC9maWxlbmFtZT4gZXZlbnQgY2FuIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gdHJpZ2dlciB0aGUgcmUtcGFyc2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQgcmVjdXJzaXZlIGxvb3BzIHdpdGggdGhpcworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0xPR0ZNVCc+PGdsb3NzdGVybT5CQl9MT0dGTVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZXMgc2F2ZWQgaW50bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJfTE9HRk1UPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIGFuZCB0aGUgbG9nIGZpbGUgbmFtZXMgZ2V0IGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxvZy57dGFza30ue3BpZH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBmb3JjZSBsb2cgZmlsZXMgdG8gdGFrZSBhIHNwZWNpZmljIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTklDRV9MRVZFTCc+PGdsb3NzdGVybT5CQl9OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBCaXRCYWtlIHRvIHJ1biBhdCBhIHNwZWNpZmljIHByaW9yaXR5CisgICAgICAgICAgICAgICAgICAgIChpLmUuIG5pY2UgbGV2ZWwpLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gcGVybWlzc2lvbnMgdXN1YWxseSBtZWFuIHRoYXQgQml0QmFrZSBjYW4gcmVkdWNlIGl0cworICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSBidXQgbm90IHJhaXNlIGl0IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1RBU0tfTklDRV9MRVZFTCc+PGZpbGVuYW1lPkJCX1RBU0tfTklDRV9MRVZFTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9OT19ORVRXT1JLJz48Z2xvc3N0ZXJtPkJCX05PX05FVFdPUks8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgbmV0d29yayBhY2Nlc3MgaW4gdGhlIEJpdEJha2UgZmV0Y2hlciBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgYWNjZXNzIGRpc2FibGVkLCBhbnkgY29tbWFuZCB0aGF0IGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgbmV0d29yayBiZWNvbWVzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxpbmcgbmV0d29yayBhY2Nlc3MgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBtaXJyb3JzLCBydW5uaW5nIGJ1aWxkcyB3aGVuIG5vdCBjb25uZWN0ZWQgdG8gdGhlIEludGVybmV0LAorICAgICAgICAgICAgICAgICAgICBhbmQgd2hlbiBvcGVyYXRpbmcgaW4gY2VydGFpbiBraW5kcyBvZiBmaXJld2FsbAorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxnbG9zc3Rlcm0+QkJfTlVNQkVSX1RIUkVBRFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhc2tzIEJpdEJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICBhdCBhbnkgb25lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gc3VwcG9ydHMgbXVsdGlwbGUgY29yZXMsCisgICAgICAgICAgICAgICAgICAgIGEgZ29vZCBydWxlIG9mIHRodW1iIGlzIHRvIHNldCB0aGlzIHZhcmlhYmxlIHRvIHR3aWNlIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgY29yZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMnPjxnbG9zc3Rlcm0+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgQml0QmFrZSB1c2VzIHdoZW4gcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIG51bWJlciBvZiB0aHJlYWRzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgY29yZXMgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9PUklHRU5WJz48Z2xvc3N0ZXJtPkJCX09SSUdFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBleHRlcm5hbCBlbnZpcm9ubWVudCBpbgorICAgICAgICAgICAgICAgICAgICB3aGljaCBCaXRCYWtlIHdhcyBydW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3B5IGlzIHRha2VuIGJlZm9yZSBhbnkgd2hpdGVsaXN0ZWQgdmFyaWFibGUgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBmaWx0ZXJlZCBpbnRvIEJpdEJha2UncyBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgdmFyaWFibGUgaXMgYSBkYXRhc3RvcmUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBiZSBxdWVyaWVkIHVzaW5nIHRoZSBub3JtYWwgZGF0YXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfUFJFU0VSVkVfRU5WJz48Z2xvc3N0ZXJtPkJCX1BSRVNFUlZFX0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXNhYmxlcyB3aGl0ZWxpc3RpbmcgYW5kIGluc3RlYWQgYWxsb3dzIGFsbCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCBpbnRvIEJpdEJha2UncworICAgICAgICAgICAgICAgICAgICBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1JVTkZNVCc+PGdsb3NzdGVybT5CQl9SVU5GTVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIHNjcmlwdCBmaWxlcworICAgICAgICAgICAgICAgICAgICAoaS5lLiBydW4gZmlsZXMpIHNhdmVkIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVCc+PGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPkJCX1JVTkZNVDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGlzIHVuZGVmaW5lZCBhbmQgdGhlIHJ1biBmaWxlIG5hbWVzIGdldCBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW4ue3Rhc2t9LntwaWR9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgcnVuIGZpbGVzIHRvIHRha2UgYSBzcGVjaWZpYyBuYW1lLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1JVTlRBU0snPjxnbG9zc3Rlcm0+QkJfUlVOVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgZG9lcyBub3QgaW5jbHVkZSB0aGUgImRvXyIgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlnPC9maWxlbmFtZT4sIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgICAiY29uZmlnIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TQ0hFRFVMRVInPjxnbG9zc3Rlcm0+QkJfU0NIRURVTEVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlbGVjdHMgdGhlIG5hbWUgb2YgdGhlIHNjaGVkdWxlciB0byB1c2UgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIG9mIEJpdEJha2UgdGFza3MuCisgICAgICAgICAgICAgICAgICAgIFRocmVlIG9wdGlvbnMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmJhc2ljPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyBmcmFtZXdvcmsgZnJvbSB3aGljaCBldmVyeXRoaW5nIGRlcml2ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRhc2tzIHRvIGJlIG9yZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljYWxseSBhcyB0aGV5IGFyZSBwYXJzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNwZWVkPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGVzIHRhc2tzIGZpcnN0IHRoYXQgaGF2ZSBtb3JlIHRhc2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJzcGVlZCIgb3B0aW9uIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb21wbGV0aW9uPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0aGUgc2NoZWR1bGVyIHRvIHRyeSB0byBjb21wbGV0ZSBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG9uY2UgaXRzIGJ1aWxkIGhhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TQ0hFRFVMRVJTJz48Z2xvc3N0ZXJtPkJCX1NDSEVEVUxFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBjdXN0b20gc2NoZWR1bGVycyB0byBpbXBvcnQuCisgICAgICAgICAgICAgICAgICAgIEN1c3RvbSBzY2hlZHVsZXJzIG5lZWQgdG8gYmUgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UnVuUXVldWVTY2hlZHVsZXI8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGhvdyB0byBzZWxlY3QgYSBzY2hlZHVsZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX1NDSEVEVUxFUic+PGZpbGVuYW1lPkJCX1NDSEVEVUxFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TRVRTQ0VORV9ERVBWQUxJRCc+PGdsb3NzdGVybT5CQl9TRVRTQ0VORV9ERVBWQUxJRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiBCaXRCYWtlIGNhbGxzIHRoYXQgZGV0ZXJtaW5lcworICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIEJpdEJha2UgcmVxdWlyZXMgYSBzZXRzY2VuZSBkZXBlbmRlbmN5IHRvIGJlIG1ldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBydW5uaW5nIGEgc2V0c2NlbmUgdGFzaywgQml0QmFrZSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICBrbm93IHdoaWNoIGRlcGVuZGVuY2llcyBvZiB0aGF0IHNldHNjZW5lIHRhc2sgYWxzbyBuZWVkCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgV2hldGhlciBkZXBlbmRlbmNpZXMgYWxzbyBuZWVkIHRvIGJlIHJ1biBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoZSBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIHJldHVybnMgYQorICAgICAgICAgICAgICAgICAgICAiVHJ1ZSIgb3IgIkZhbHNlIiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZGVwZW5kZW5jeSBuZWVkcworICAgICAgICAgICAgICAgICAgICB0byBiZSBtZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OJz48Z2xvc3N0ZXJtPkJCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBjYWxsIHRoYXQgdmVyaWZpZXMgdGhlIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgcGxhbm5lZCB0YXNrIGV4ZWN1dGlvbiBiZWZvcmUgdGhlIG1haW4gdGFzayBleGVjdXRpb24KKyAgICAgICAgICAgICAgICAgICAgaGFwcGVucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIEJpdEJha2UgaGFzIGEgbGlzdCBvZiBzZXRzY2VuZQorICAgICAgICAgICAgICAgICAgICB0YXNrcyB0aGF0IGhhdmUgcnVuIGFuZCBlaXRoZXIgc3VjY2VlZGVkIG9yIGZhaWxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYSB0YXNrIGxpc3QgY2hlY2sgdG8gc2VlIGlmIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgbWFrZSBzZW5zZS4KKyAgICAgICAgICAgICAgICAgICAgRXZlbiBpZiBCaXRCYWtlIHdhcyBwbGFubmluZyB0byBza2lwIGEgdGFzaywgdGhlCisgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYW4gZm9yY2UgQml0QmFrZSB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhc2ssIHdoaWNoIGlzIG5lY2Vzc2FyeSB1bmRlciBjZXJ0YWluIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY2lyY3Vtc3RhbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUyc+PGdsb3NzdGVybT5CQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB2YXJpYWJsZSBmbGFncyAodmFyZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIHNhZmVseSBleGNsdWRlZCBmcm9tIGNoZWNrc3VtCisgICAgICAgICAgICAgICAgICAgIGFuZCBkZXBlbmRlbmN5IGRhdGEgZm9yIGtleXMgaW4gdGhlIGRhdGFzdG9yZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGNoZWNrc3VtIG9yIGRlcGVuZGVuY3kgZGF0YSBmb3Iga2V5cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLCB0aGUgZmxhZ3Mgc2V0IGFnYWluc3QgdGhhdCBrZXkgYXJlIG5vcm1hbGx5CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdmFyZmxhZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3ZhcmlhYmxlLWZsYWdzJz5WYXJpYWJsZSBGbGFnczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU0lHTkFUVVJFX0hBTkRMRVInPjxnbG9zc3Rlcm0+QkJfU0lHTkFUVVJFX0hBTkRMRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGhhbmRsZXIgQml0QmFrZSB1c2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlIGhhbmRsZXIgZGVmaW5lcyB0aGUgd2F5IHN0YW1wIGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGFuZCBoYW5kbGVkLCBpZiBhbmQgaG93IHRoZSBzaWduYXR1cmUgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jb3Jwb3JhdGVkIGludG8gdGhlIHN0YW1wcywgYW5kIGhvdyB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgICAgIGl0c2VsZiBpcyBnZW5lcmF0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbmV3IHNpZ25hdHVyZSBoYW5kbGVyIGNhbiBiZSBhZGRlZCBieSBpbmplY3RpbmcgYSBjbGFzcworICAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TaWduYXR1cmVHZW5lcmF0b3I8L2ZpbGVuYW1lPiBjbGFzcyBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBnbG9iYWwgbmFtZXNwYWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NSQ1JFVl9QT0xJQ1knPjxnbG9zc3Rlcm0+QkJfU1JDUkVWX1BPTElDWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgZmV0Y2hlciB3aGVuIGl0IGludGVyYWN0cyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb250cm9sIHN5c3RlbXMgYW5kIGR5bmFtaWMgc291cmNlIHJldmlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQl9TUkNSRVZfUE9MSUNZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gd29ya2luZyB3aXRob3V0IGEgbmV0d29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdXNpbmcgb25lIG9mIHR3byBwb2xpY2llczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2FjaGU8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0YWlucyB0aGUgdmFsdWUgdGhlIHN5c3RlbSBvYnRhaW5lZCBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggdGltZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Y2xlYXI8L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVlcmllcyB0aGUgc291cmNlIGNvbnRyb2xzIHN5c3RlbSBldmVyeSB0aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggdGhpcyBwb2xpY3ksIHRoZXJlIGlzIG5vIGNhY2hlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAiY2xlYXIiIHBvbGljeSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfU1RBTVBfUE9MSUNZJz48Z2xvc3N0ZXJtPkJCX1NUQU1QX1BPTElDWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBtb2RlIHVzZWQgZm9yIGhvdyB0aW1lc3RhbXBzIG9mIHN0YW1wIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBjb21wYXJlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIG1vZGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wZXJmaWxlPC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVzdGFtcCBjb21wYXJpc29ucyBhcmUgb25seSBtYWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB0aW1lc3RhbXBzIG9mIGEgc3BlY2lmaWMgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZnVsbDwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lc3RhbXAgY29tcGFyaXNvbnMgYXJlIG1hZGUgZm9yIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+d2hpdGVsaXN0PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZW50aWNhbCB0byAiZnVsbCIgbW9kZSBleGNlcHQgdGltZXN0YW1wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbnMgYXJlIG1hZGUgZm9yIHJlY2lwZXMgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9TVEFNUF9XSElURUxJU1QnPjxmaWxlbmFtZT5CQl9TVEFNUF9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhbXAgcG9saWNpZXMgYXJlIGxhcmdlbHkgb2Jzb2xldGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjdGlvbiBvZiBzZXRzY2VuZSB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUQU1QX1dISVRFTElTVCc+PGdsb3NzdGVybT5CQl9TVEFNUF9XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgZmlsZXMgd2hvc2Ugc3RhbXAgZmlsZSB0aW1lc3RhbXBzIGFyZSBjb21wYXJlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFtcCBwb2xpY3kgbW9kZSBpcyBzZXQgdG8gIndoaXRlbGlzdCIuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzdGFtcCBwb2xpY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfU1RBTVBfUE9MSUNZJz48ZmlsZW5hbWU+QkJfU1RBTVBfUE9MSUNZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1NUUklDVF9DSEVDS1NVTSc+PGdsb3NzdGVybT5CQl9TVFJJQ1RfQ0hFQ0tTVU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyBhIG1vcmUgc3RyaWN0IGNoZWNrc3VtIG1lY2hhbmlzbSBmb3Igbm9uLWxvY2FsIFVSTHMuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBhIHZhbHVlIGNhdXNlcyBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHRvIHJlcG9ydCBhbiBlcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLWxvY2FsIFVSTAorICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90IGhhdmUgYXQgbGVhc3Qgb25lIGNoZWNrc3VtIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9UQVNLX05JQ0VfTEVWRUwnPjxnbG9zc3Rlcm0+QkJfVEFTS19OSUNFX0xFVkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyBzcGVjaWZpYyB0YXNrcyB0byBjaGFuZ2UgdGhlaXIgcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gbmljZSBsZXZlbCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgaW4gY29tYmluYXRpb24gd2l0aCB0YXNrCisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyB0byByYWlzZSBvciBsb3dlciBwcmlvcml0aWVzIG9mIHNwZWNpZmljIHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyc+WW9jdG8gUHJvamVjdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGF1dG9idWlsZGVyLCBRRU1VIGVtdWxhdGlvbiBpbiBpbWFnZXMgaXMgZ2l2ZW4gYSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYXMgY29tcGFyZWQgdG8gYnVpbGQgdGFza3MgdG8gZW5zdXJlIHRoYXQgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBzdWZmZXIgdGltZW91dHMgb24gbG9hZGVkIHN5c3RlbXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfVEFTS0hBU0gnPjxnbG9zc3Rlcm0+QkJfVEFTS0hBU0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aGluIGFuIGV4ZWN1dGluZyB0YXNrLCB0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBoYXNoCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXNrIGFzIHJldHVybmVkIGJ5IHRoZSBjdXJyZW50bHkgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX1ZFUkJPU0VfTE9HUyc+PGdsb3NzdGVybT5CQl9WRVJCT1NFX0xPR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaG93IHZlcmJvc2UgQml0QmFrZSBpcyBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQsIHNoZWxsIHNjcmlwdHMgZWNobyBjb21tYW5kcyBhbmQgc2hlbGwgc2NyaXB0IG91dHB1dAorICAgICAgICAgICAgICAgICAgICBhcHBlYXJzIG9uIHN0YW5kYXJkIG91dCAoc3Rkb3V0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9XT1JLRVJDT05URVhUJz48Z2xvc3N0ZXJtPkJCX1dPUktFUkNPTlRFWFQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgZXhlY3V0aW5nIGEgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXRzIHRoaXMgdmFyaWFibGUgdG8gIjEiIHdoZW4gYSB0YXNrIGlzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGV4ZWN1dGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgbm90IHNldCB3aGVuIHRoZSB0YXNrIGlzIGluIHNlcnZlciBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBwYXJzaW5nIG9yIGV2ZW50IGhhbmRsaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJDTEFTU0VYVEVORCc+PGdsb3NzdGVybT5CQkNMQVNTRVhURU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZXh0ZW5kIGEgcmVjaXBlIHNvIHRoYXQgaXQgYnVpbGRzIHZhcmlhbnRzCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlcyBvZiB0aGVzZSB2YXJpYW50cyBmb3IgcmVjaXBlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgQ29yZSBtZXRhZGF0YSBhcmUgIm5hdGl2ZXMiIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnF1aWx0LW5hdGl2ZTwvZmlsZW5hbWU+LCB3aGljaCBpcyBhIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgUXVpbHQgYnVpbHQgdG8gcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW07ICJjcm9zc2VzIiBzdWNoCisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgYSBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUgYnV0IHByb2R1Y2VzIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcnVuIG9uIHRoZSB0YXJnZXQgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsKKyAgICAgICAgICAgICAgICAgICAgIm5hdGl2ZXNkayIsIHdoaWNoIHRhcmdldHMgdGhlIFNESyBtYWNoaW5lIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjsgYW5kICJtdWxpdGxpYnMiIGluIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+bXVsdGlsaWI6PC9maWxlbmFtZT48cmVwbGFjZWFibGU+bXVsdGlsaWJfbmFtZTwvcmVwbGFjZWFibGU+Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYnVpbGQgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgcmVjaXBlIHdpdGggYSBtaW5pbWFsCisgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBjb2RlLCBpdCB1c3VhbGx5IGlzIGFzIHNpbXBsZSBhcyBhZGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibmF0aXZlIiB2YXJpYW50cyBhcmUgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkRFQlVHJz48Z2xvc3N0ZXJtPkJCREVCVUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0cyB0aGUgQml0QmFrZSBkZWJ1ZyBvdXRwdXQgbGV2ZWwgdG8gYSBzcGVjaWZpYyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhcyBpbmNyZW1lbnRlZCBieSB0aGUgPGZpbGVuYW1lPi1kPC9maWxlbmFtZT4gY29tbWFuZCBsaW5lCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZXh0ZXJuYWwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIGZvciBpdCB0byB3b3JrLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9DT0xMRUNUSU9OUyc+PGdsb3NzdGVybT5CQkZJTEVfQ09MTEVDVElPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIDxmaWxlbmFtZT5CQkZJTEVfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBlYWNoIGxheWVyIGFwcGVuZHMgaXRzIG5hbWUgdG8gdGhpcyB2YXJpYWJsZSBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJGSUxFX1BBVFRFUk4nPjxnbG9zc3Rlcm0+QkJGSUxFX1BBVFRFUk48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5WYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZCBtdXN0CisgICAgICAgICAgICAgICAgICAgIGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQkZJTEVfUEFUVEVSTl9lbWVubG93PC9maWxlbmFtZT4pLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9QUklPUklUWSc+PGdsb3NzdGVybT5CQkZJTEVfUFJJT1JJVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Bc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUgLSBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBsZXR0aW5nIHlvdSBjb250cm9sIHRoZSBwcmVjZWRlbmNlIGZvciB0aGUgbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2VkZW5jZSBlc3RhYmxpc2hlZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgc3RhbmRzIHJlZ2FyZGxlc3Mgb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGxheWVyIHRoYXQgaGFzIGEgcmVjaXBlIHdpdGggYSBoaWdoZXIgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gdmFsdWUgYnV0IGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IGlzIHNldCB0byBoYXZlIGEgbG93ZXIgcHJlY2VkZW5jZSBzdGlsbCBoYXMgYQorICAgICAgICAgICAgICAgICAgICBsb3dlciBwcmVjZWRlbmNlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5BIGxhcmdlciB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5CQkZJTEVfUFJJT1JJVFk8L2ZpbGVuYW1lPiB2YXJpYWJsZSByZXN1bHRzIGluIGEgaGlnaGVyCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgNiBoYXMgYSBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSB2YWx1ZSA1LgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBiYXNlZCBvbiBsYXllcgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgKHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUkRFUEVORFMnPkxBWUVSREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgcHJpb3JpdHksIGlmIHVuc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhIGxheWVyIHdpdGggbm8gZGVwZW5kZW5jaWVzLCBpcyB0aGUgbG93ZXN0IGRlZmluZWQgcHJpb3JpdHkgKyAxCisgICAgICAgICAgICAgICAgICAgIChvciAxIGlmIG5vIHByaW9yaXRpZXMgYXJlIGRlZmluZWQpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY29tbWFuZCA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnM8L2ZpbGVuYW1lPiB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBjb25maWd1cmVkIGxheWVycyBhbG9uZyB3aXRoIHRoZWlyIHByaW9yaXRpZXMuCisgICAgICAgICAgICAgICAgPC90aXA+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVTJz48Z2xvc3N0ZXJtPkJCRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5MaXN0IG9mIHJlY2lwZSBmaWxlcyBCaXRCYWtlIHVzZXMgdG8gYnVpbGQgc29mdHdhcmUuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFRCc+PGdsb3NzdGVybT5CQklOQ0xVREVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnRhaW5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWxsIG9mIGFsbCBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UncyBwYXJzZXIgaW5jbHVkZWQgZHVyaW5nIHBhcnNpbmcgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQklOQ0xVREVMT0dTJz48Z2xvc3N0ZXJtPkJCSU5DTFVERUxPR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGEgdmFsdWUsIGVuYWJsZXMgcHJpbnRpbmcgdGhlIHRhc2sgbG9nIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0aW5nIGEgZmFpbGVkIHRhc2suCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HU19MSU5FUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTX0xJTkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz48ZmlsZW5hbWU+QkJJTkNMVURFTE9HUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQsIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFzayBsb2cgZmlsZSB0byBwcmludCB3aGVuIHJlcG9ydGluZyBhIGZhaWxlZCB0YXNrLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+QkJJTkNMVURFTE9HU19MSU5FUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgZW50aXJlIGxvZyBpcyBwcmludGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCTEFZRVJTJz48Z2xvc3N0ZXJtPkJCTEFZRVJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+TGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBmb3VyIGxheWVycywgb25lIG9mIHdoaWNoIGlzIGEgY3VzdG9tLCB1c2VyLWRlZmluZWQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm1ldGEtbXlrZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkxBWUVSU19GRVRDSF9ESVInPjxnbG9zc3Rlcm0+QkJMQVlFUlNfRkVUQ0hfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldHMgdGhlIGJhc2UgbG9jYXRpb24gd2hlcmUgbGF5ZXJzIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgbG9jYXRpb24gaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0NPUkVCQVNFfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNldHRpbmcgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBsYXllcmluZGV4LWZldGNoPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIHRlbGxzIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVyczwvZmlsZW5hbWU+IHdoZXJlIHRvIHBsYWNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBmZXRjaGVkIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQk1BU0snPjxnbG9zc3Rlcm0+QkJNQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHJlY2lwZXMgYW5kIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gImhpZGUiIHRoZXNlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlnbm9yZXMgYW55IHJlY2lwZSBvciByZWNpcGUgYXBwZW5kIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFzIGlmIEJpdEJha2UgZG9lcyBub3Qgc2VlIHRoZW0gYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIG1hdGNoaW5nIGZpbGVzIGFyZSBub3QgcGFyc2VkIG9yIG90aGVyd2lzZQorICAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IEJpdEJha2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHByb3ZpZGUgaXMgcGFzc2VkIHRvIFB5dGhvbidzIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZnVsbCBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXggaW5mb3JtYXRpb24sIHNlZSBQeXRob24ncworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8yLjMvbGliL3JlLXN5bnRheC5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYSBjb21wbGV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZSBhbGwgcmVjaXBlIGFuZCByZWNpcGUgYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS10aS9yZWNpcGVzLW1pc2MvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbWFzayBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgb3IgcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hc2tzIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy98bWV0YS10aS9yZWNpcGVzLXRpL3BhY2thZ2Vncm91cC8iCisgICAgIEJCTUFTSyAuPSAifC4qbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5sZGFwIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5jdiIKKyAgICAgQkJNQVNLIC49ICJ8Lipsem1hIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5vdGljZSBob3cgdGhlIHZlcnRpY2FsIGJhciBpcyB1c2VkIHRvIGFwcGVuZCB0aGUgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBuYW1lLCB1c2UgdGhlIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaCBjaGFyYWN0ZXIgdG8gZW5zdXJlIHlvdSBtYXRjaCBqdXN0IHRoYXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IEJpdEJha2UgdG8gbG9jYXRlIGNsYXNzCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gQml0QmFrZSBmcm9tIGEgZGlyZWN0b3J5IG91dHNpZGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgeW91IG11c3QgYmUgc3VyZSB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+IHRvIHBvaW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgeW91IHdvdWxkIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBydW4gQml0QmFrZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEJCUEFUSD0iPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcmVjdG9yeTwvcmVwbGFjZWFibGU+IgorICAgICAkIGV4cG9ydCBCQlBBVEgKKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJTRVJWRVInPjxnbG9zc3Rlcm0+QkJTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB1c2VkIHdoZW4geW91IGVtcGxveSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlZFUlNJT05TJz48Z2xvc3N0ZXJtPkJCVkVSU0lPTlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIGEgc2luZ2xlIHJlY2lwZSB0byBidWlsZCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHByb2plY3QgZnJvbSBhIHNpbmdsZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFsc28gYWJsZSB0byBzcGVjaWZ5IGNvbmRpdGlvbmFsIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT1ZFUlJJREVTJz48ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBmb3IgYSBzaW5nbGUgdmVyc2lvbiBvciBmb3IgYW4gb3B0aW9uYWxseSBuYW1lZAorICAgICAgICAgICAgICAgICAgICByYW5nZSBvZiB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gPGZpbGVuYW1lPkJCVkVSU0lPTlM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndmFyaWFudHMtY2xhc3MtZXh0ZW5zaW9uLW1lY2hhbmlzbSc+VmFyaWFudHMgLSBDbGFzcyBFeHRlbnNpb24gTWVjaGFuaXNtPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CSVRCQUtFX1VJJz48Z2xvc3N0ZXJtPkJJVEJBS0VfVUk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCB0byBzcGVjaWZ5IHRoZSBVSSBtb2R1bGUgdG8gdXNlIHdoZW4gcnVubmluZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIHZhcmlhYmxlIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tdTwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGV4dGVybmFsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciBmb3IgaXQgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxETkFNRSc+PGdsb3NzdGVybT5CVUlMRE5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgZGVmYXVsdHMgdG8gYSBkYXRldGltZSBzdGFtcCBvZiB3aGVuIHRoZSBidWlsZCB3YXMKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBidXQgY2FuIGJlIGRlZmluZWQgYnkgdGhlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJaUkRJUic+PGdsb3NzdGVybT5CWlJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCBvZiBhIEJhemFhcgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYyc+PHRpdGxlPkM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0FDSEUnPjxnbG9zc3Rlcm0+Q0FDSEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIHRvIHN0b3JlIGEgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG1ldGFkYXRhIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyc2VkIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIHRpbWUgQml0QmFrZSBpcyBzdGFydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNWU0RJUic+PGdsb3NzdGVybT5DVlNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBmaWxlcyBjaGVja2VkIG91dCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgQ1ZTIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1kJz48dGl0bGU+RDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPjxnbG9zc3Rlcm0+REVGQVVMVF9QUkVGRVJFTkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBvZiB0aGlzIGlzIHZhcmlhYmxlIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICBpdCB0byAiLTEiIHdpdGhpbiBhIHJlY2lwZSBmb3IgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB2YXJpYWJsZSBpbiB0aGlzIHdheSBjYXVzZXMgdGhlIHN0YWJsZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gYnVpbGQgYnkgZGVmYXVsdCBpbiB0aGUgYWJzZW5jZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGJ1aWxkIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJpYXMgcHJvdmlkZWQgYnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIHdlYWsgYW5kIGlzIG92ZXJyaWRkZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPkJCRklMRV9QUklPUklUWTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiB0aGF0IHZhcmlhYmxlIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHR3byBsYXllcnMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQRU5EUyc+PGdsb3NzdGVybT5ERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUgImEiIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdGFzayBmb3IgcmVjaXBlICJhIgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBhbnl0aGluZyB0aGF0IHJlY2lwZSAiYiIgcHV0cyBpbnRvIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHdoZW4gcmVjaXBlICJhIiBpcyBjb25maWd1cmluZyBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW50aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVNDUklQVElPTic+PGdsb3NzdGVybT5ERVNDUklQVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxvbmcgZGVzY3JpcHRpb24gZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRExfRElSJz48Z2xvc3N0ZXJtPkRMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3dubG9hZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBnZXRzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGZvciBtaXJyb3JpbmcgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRhcmJhbGxzIG9mIEdpdCByZXBvc2l0b3JpZXMsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorCisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZSc+PHRpdGxlPkU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhDTFVERV9GUk9NX1dPUkxEJz48Z2xvc3N0ZXJtPkVYQ0xVREVfRlJPTV9XT1JMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RzIEJpdEJha2UgdG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIHdvcmxkIGJ1aWxkcyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSB3b3JsZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHdvcmxkIGJ1aWxkcywgQml0QmFrZSBsb2NhdGVzLCBwYXJzZXMgYW5kIGJ1aWxkcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBmb3VuZCBpbiBldmVyeSBsYXllciBleHBvc2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZXhjbHVkZSBhIHJlY2lwZSBmcm9tIGEgd29ybGQgYnVpbGQgdXNpbmcgdGhpcyB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgaW4gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBhZGRlZCB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWF5IHN0aWxsIGJlIGJ1aWx0IGR1cmluZyBhIHdvcmxkIGJ1aWxkIGluIG9yZGVyIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyBhIHJlY2lwZSB0byA8ZmlsZW5hbWU+RVhDTFVERV9GUk9NX1dPUkxEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb25seSBlbnN1cmVzIHRoYXQgdGhlIHJlY2lwZSBpcyBub3QgZXhwbGljaXRseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgbGlzdCBvZiBidWlsZCB0YXJnZXRzIGluIGEgd29ybGQgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWYnPjx0aXRsZT5GPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UJz48Z2xvc3N0ZXJtPkZBS0VST09UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgY29tbWFuZCB0byB1c2Ugd2hlbiBydW5uaW5nIGEgc2hlbGwgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICBpbiBhIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5GQUtFUk9PVDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9ic29sZXRlCisgICAgICAgICAgICAgICAgICAgICBhbmQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RkFLRVJPT1QqPC9maWxlbmFtZT4gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZXNlIGVudHJpZXMgaW4gdGhlIGdsb3NzYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UQkFTRUVOVic+PGdsb3NzdGVybT5GQUtFUk9PVEJBU0VFTlY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgd2hlbiBleGVjdXRpbmcKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVENNRCc+PGZpbGVuYW1lPkZBS0VST09UQ01EPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB0aGF0IHN0YXJ0cyB0aGUgYml0YmFrZS13b3JrZXIgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UQ01EJz48Z2xvc3N0ZXJtPkZBS0VST09UQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBDb250YWlucyB0aGUgY29tbWFuZCB0aGF0IHN0YXJ0cyB0aGUgYml0YmFrZS13b3JrZXIKKyAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgaW4gdGhlIGZha2Vyb290IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09URElSUyc+PGdsb3NzdGVybT5GQUtFUk9PVERJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIExpc3RzIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSBiZWZvcmUgcnVubmluZyBhIHRhc2sgaW4KKyAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWtlcm9vdCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GQUtFUk9PVEVOVic+PGdsb3NzdGVybT5GQUtFUk9PVEVOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrCisgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVEJBU0VFTlYnPjxmaWxlbmFtZT5GQUtFUk9PVEJBU0VFTlY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUZBS0VST09UTk9FTlYnPjxnbG9zc3Rlcm0+RkFLRVJPT1ROT0VOVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIHJ1bm5pbmcgYSB0YXNrCisgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbiB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICB0aGUgZmFrZXJvb3QgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GQUtFUk9PVEVOVic+PGZpbGVuYW1lPkZBS0VST09URU5WPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GRVRDSENNRCc+PGdsb3NzdGVybT5GRVRDSENNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBjb21tYW5kIHRoZSBCaXRCYWtlIGZldGNoZXIgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVzIHdoZW4gcnVubmluZyBmZXRjaCBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byB1c2UgYW4gb3ZlcnJpZGUgc3VmZml4IHdoZW4geW91IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKGUuZy4gPGZpbGVuYW1lPkZFVENIQ01EX2dpdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5GRVRDSENNRF9zdm48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRSc+PGdsb3NzdGVybT5GSUxFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyBhdCB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHNldHMgdGhpcyB2YXJpYWJsZSBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICB0byBpZGVudGlmeSB0aGUgZmlsZSBiZWluZyBwYXJzZWQuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYWxzbyBzZXRzIHRoaXMgdmFyaWFibGUgd2hlbiBhIHJlY2lwZSBpcyBiZWluZworICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCB0byBpZGVudGlmeSB0aGUgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNESVInPjxnbG9zc3Rlcm0+RklMRVNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIHNlYXJjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAibG9jYWwiIGZldGNoZXIgbW9kdWxlIHVzZXMgdGhlc2UgZGlyZWN0b3JpZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICBoYW5kbGluZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgaWYgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBmb3VuZCB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RklMRVNESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCBhbmQgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBpbiBhbGwgbmV3IGNvZGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU1BBVEgnPjxnbG9zc3Rlcm0+RklMRVNQQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBkaXJlY3RvcmllcyBCaXRCYWtlIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgImxvY2FsIiBmZXRjaGVyIG1vZHVsZSB1c2VzIHRoZXNlIGRpcmVjdG9yaWVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYmVoYXZlcyBsaWtlIGEgc2hlbGwgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBhcmUgc2VhcmNoZWQgbGVmdC10by1yaWdodCBpbiBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1nJz48dGl0bGU+RzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HSVRESVInPjxnbG9zc3Rlcm0+R0lURElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggYSBsb2NhbCBjb3B5IG9mIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgc3RvcmVkIHdoZW4gaXQgaXMgY2xvbmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWgnPjx0aXRsZT5IPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhHRElSJz48Z2xvc3N0ZXJtPkhHRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBNZXJjdXJpYWwKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9NRVBBR0UnPjxnbG9zc3Rlcm0+SE9NRVBBR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5XZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGZvdW5kLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1pJz48dGl0bGU+STwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhFUklUJz48Z2xvc3N0ZXJtPklOSEVSSVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCis8IS0tCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktaic+PHRpdGxlPko8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1rJz48dGl0bGU+SzwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbCc+PHRpdGxlPkw8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEFZRVJERVBFTkRTJz48Z2xvc3N0ZXJtPkxBWUVSREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPkxpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUgZGVwZW5kcy4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgbGF5ZXIgdmVyc2lvbiBmb3IgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyBpdCB0byB0aGUgZW5kIG9mIHRoZSBsYXllciBuYW1lIHdpdGggYSBjb2xvbiwgKGUuZy4gImFub3RoZXJsYXllcjozIgorICAgICAgICAgICAgICAgICAgICB0byBiZSBjb21wYXJlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUlZFUlNJT04nPjxmaWxlbmFtZT5MQVlFUlZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+X2Fub3RoZXJsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcHJvZHVjZXMgYW4gZXJyb3IgaWYgYW55IGRlcGVuZGVuY3kgaXMgbWlzc2luZyBvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXJzIGRvIG5vdCBtYXRjaCBleGFjdGx5IChpZiBzcGVjaWZpZWQpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYWxzbyB1c2UgdGhlIHNwZWNpZmljIGxheWVyIG5hbWUgYXMgYSBzdWZmaXgKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHZhcmlhYmxlIChlLmcuIDxmaWxlbmFtZT5MQVlFUkRFUEVORFNfbXlsYXllcjwvZmlsZW5hbWU+KS48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRJUic+PGdsb3NzdGVybT5MQVlFUkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdXNlZCBpbnNpZGUgdGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG5vdCBhdmFpbGFibGUgb3V0c2lkZSBvZiA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCByZWZlcmVuY2VzIGFyZSBleHBhbmRlZCBpbW1lZGlhdGVseSB3aGVuIHBhcnNpbmcgb2YgdGhlIGZpbGUgY29tcGxldGVzLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxBWUVSVkVSU0lPTic+PGdsb3NzdGVybT5MQVlFUlZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5PcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+PGZpbGVuYW1lPkxBWUVSREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW5vdGhlciBsYXllciBpbiBvcmRlciB0byBkZXBlbmQgb24gYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBsYXllci48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gdXNlIHRoZSBzcGVjaWZpYyBsYXllciBuYW1lIGFzIGEgc3VmZml4CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSB2YXJpYWJsZSAoZS5nLiA8ZmlsZW5hbWU+TEFZRVJERVBFTkRTX215bGF5ZXI8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRSc+PGdsb3NzdGVybT5MSUNFTlNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbSc+PHRpdGxlPk08L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUlSUk9SUyc+PGdsb3NzdGVybT5NSVJST1JTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggQml0QmFrZSBnZXRzIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gc2VhcmNoZXMgZm9yIHNvdXJjZSBjb2RlLCBpdCBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmllcyB0aGUgbG9jYWwgZG93bmxvYWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCB0aGUgYnVpbGQgc3lzdGVtIHRyaWVzIGxvY2F0aW9ucworICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+IGluIHRoYXQgb3JkZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTVVMVElfUFJPVklERVJfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPk1VTFRJX1BST1ZJREVSX1dISVRFTElTVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbGxvd3MgeW91IHRvIHN1cHByZXNzIEJpdEJha2Ugd2FybmluZ3MgY2F1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgdHdvIHNlcGFyYXRlIHJlY2lwZXMgdGhhdCBwcm92aWRlIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0YmFrZSBub3JtYWxseSBpc3N1ZXMgYSB3YXJuaW5nIHdoZW4gYnVpbGRpbmcgdHdvCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCByZWNpcGVzIHdoZXJlIGVhY2ggcHJvdmlkZXMgdGhlIHNhbWUgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNjZW5hcmlvIGlzIHVzdWFsbHkgc29tZXRoaW5nIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIHdhbnQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGNhc2VzIGRvIGV4aXN0IHdoZXJlIGl0IG1ha2VzIHNlbnNlLCBwYXJ0aWN1bGFybHkKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT52aXJ0dWFsLyo8L2ZpbGVuYW1lPiBuYW1lc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8gc3VwcHJlc3MgQml0QmFrZSdzIHdhcm5pbmdzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHZhcmlhYmxlLCBsaXN0IHByb3ZpZGVyIG5hbWVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBuYW1lcywgPGZpbGVuYW1lPnZpcnR1YWwva2VybmVsPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LW4nPjx0aXRsZT5OPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1vJz48dGl0bGU+TzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PVkVSUklERVMnPjxnbG9zc3Rlcm0+T1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gdG8gY29udHJvbAorICAgICAgICAgICAgICAgICAgICB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZSB0aGF0IHVzZXMgYW4gb3ZlcnJpZGVzCisgICAgICAgICAgICAgICAgICAgIGxpc3QgYmFzZWQgb24gbWFjaGluZSBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE9WRVJSSURFUyA9ICJhcm06eDg2Om1pcHM6cG93ZXJwYyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25kaXRpb25hbC1zeW50YXgtb3ZlcnJpZGVzJz5Db25kaXRpb25hbCBTeW50YXggKE92ZXJyaWRlcyk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktcCc+PHRpdGxlPlA8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGUgcmVjaXBlIGNyZWF0ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGdsb3NzdGVybT5QQUNLQUdFU19EWU5BTUlDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgcHJvbWlzZSB0aGF0IHlvdXIgcmVjaXBlIHNhdGlzZmllcyBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uYWwgbW9kdWxlcyB0aGF0IGFyZSBmb3VuZCBpbiBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGFjdHVhbGx5IHNhdGlzZnkgdGhlIGRlcGVuZGVuY2llcywgaXQgb25seSBzdGF0ZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCBiZSBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiBhIGhhcmQsIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIG9mIGFub3RoZXIgcGFja2FnZSBpcyBzYXRpc2ZpZWQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBidXQgYSBwYWNrYWdlIHdpdGggdGhlIG1vZHVsZSBuYW1lIGlzIG5ldmVyIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkLCB0aGVuIHRoZSBvdGhlciBwYWNrYWdlIHdpbGwgYmUgYnJva2VuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBFJz48Z2xvc3N0ZXJtPlBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgIHdheS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRVJTSVNURU5UX0RJUic+PGdsb3NzdGVybT5QRVJTSVNURU5UX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgZGF0YSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBkYXRhIHN0b3JlZCBpcyB0aGUgZGF0YSB0aGF0IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIHBlcnNpc3RlbnQgZGF0YSBBUEkgYW5kIHRoZSBkYXRhIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIFBSIFNlcnZlciBhbmQgUFIgU2VydmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QRic+PGdsb3NzdGVybT5QRjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHJlY2lwZSBvciBwYWNrYWdlIG5hbWUgYW5kIGluY2x1ZGVzIGFsbCB2ZXJzaW9uIGFuZCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBudW1iZXJzIChpLmUuIDxmaWxlbmFtZT5lZ2xpYmMtMi4xMy1yMjArc3ZucjE1NTA4LzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjItcjEvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBOJz48Z2xvc3N0ZXJtPlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHJlY2lwZSBuYW1lLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSJz48Z2xvc3N0ZXJtPlBSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGdsb3NzdGVybT5QUkVGRVJSRURfUFJPVklERVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2Ugd2hlbgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSByZWNpcGVzIHByb3ZpZGUgdGhlIHNhbWUgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgc3VmZml4IHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBpdGVtLCBhbmQgeW91IHNob3VsZCBzZXQgaXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gd2hpY2ggeW91IHdhbnQgdG8gZ2l2ZSBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAibGludXgteW9jdG8iCisgICAgIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPSAieHNlcnZlci14Zjg2IgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUlMnPjxnbG9zc3Rlcm0+UFJFRkVSUkVEX1BST1ZJREVSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHdoaWNoIHJlY2lwZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgY2FzZXMgd2hlcmUgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIHRoZSBzYW1lIGl0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxseSwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUlM8L2ZpbGVuYW1lPiBpcyBpZGVudGljYWwgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9QUk9WSURFUic+PGZpbGVuYW1lPlBSRUZFUlJFRF9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVJTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbGV0cyB5b3UgZGVmaW5lIHByZWZlcmVuY2VzIGZvciBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBzaXR1YXRpb25zIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJTID0gInh4eDp5eXkgYWFhOmJiYiAuLi4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmb3JtIGlzIGEgY29udmVuaWVudCByZXBsYWNlbWVudCBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfeHh4ID0gInl5eSIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX2FhYSA9ICJiYmIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGdsb3NzdGVybT5QUkVGRVJSRURfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsd2F5cyBzdWZmaXggdGhlIHZhcmlhYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIHNlbGVjdCwgYW5kIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZ2x5IGZvciBwcmVjZWRlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgIjxmaWxlbmFtZT4lPC9maWxlbmFtZT4iIGNoYXJhY3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIHNwZWNpZnlpbmcgdmVyc2lvbnMgdGhhdCBjb250YWluIGxvbmcgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbiA9ICIyLjcuMyIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPSAiMy4xMCUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVNSVJST1JTJz48Z2xvc3N0ZXJtPlBSRU1JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFkZGl0aW9uYWwgcGF0aHMgZnJvbSB3aGljaCBCaXRCYWtlIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgYWRkIGEgc3BlY2lmaWMgc2VydmVyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGF0dGVtcHQgYmVmb3JlIGFueSBvdGhlcnMgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8geW91ciBjb25maWd1cmF0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSRU1JUlJPUlNfcHJlcGVuZCA9ICJcCisgICAgIGdpdDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGZ0cDovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiBcCisgICAgIGh0dHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwczovLy4qLy4qIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9zb3VyY2VzLyBcbiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjaGFuZ2VzIGNhdXNlIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW50ZXJjZXB0CisgICAgICAgICAgICAgICAgICAgIEdpdCwgRlRQLCBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IHNvdXJjZXMgbWlycm9yLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSTHMgdG8gcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUk9WSURFUyc+PGdsb3NzdGVybT5QUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgYWxpYXNlcyBieSB3aGljaCBhIHBhcnRpY3VsYXIgcmVjaXBlIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBrbm93bi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYSByZWNpcGUncyBvd24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgaW1wbGljaXRseSBhbHJlYWR5IGluIGl0cyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsaXN0LgorICAgICAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBhbGlhc2VzIGFyZSBzeW5vbnltcyBmb3IgdGhlIHJlY2lwZSBhbmQgY2FuCisgICAgICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZworICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCBmcm9tIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPGZpbGVuYW1lPmxpYmF2XzAuOC4xMS5iYjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBST1ZJREVTICs9ICJsaWJwb3N0cHJvYyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4gc3RhdGVtZW50IHJlc3VsdHMgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlICJsaWJhdiIgcmVjaXBlIGFsc28gYmVpbmcga25vd24gYXMgImxpYnBvc3Rwcm9jIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUlNFUlZfSE9TVCc+PGdsb3NzdGVybT5QUlNFUlZfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmV0d29yayBiYXNlZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlIGhvc3QgYW5kIHBvcnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0aGUgPGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgc2V0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSU0VSVl9IT1NUID0gImxvY2FsaG9zdDowIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUgdmFyaWFibGUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzdGFydCBhIGxvY2FsIFBSIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IDxmaWxlbmFtZT5QUlNFUlZfSE9TVDwvZmlsZW5hbWU+IHRvIG90aGVyCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB0byB1c2UgYSByZW1vdGUgUFIgc2VydmljZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QVic+PGdsb3NzdGVybT5QVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0KKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1xJz48dGl0bGU+UTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKy0tPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcic+PHRpdGxlPlI8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUkRFUEVORFMnPjxnbG9zc3Rlcm0+UkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBidWlsdCBwYWNrYWdlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgIHlvdSB3aWxsIGdldCBhIGJ1aWxkIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRvIHBhY2thZ2VzIGJlaW5nIGJ1aWx0LCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB3aXRoIGFuIGF0dGFjaGVkIHBhY2thZ2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGFyZSBidWlsZGluZyBhIGRldmVsb3BtZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+cGVybDwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBkZXZlbG9wbWVudCBwYWNrYWdlIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgbmFtZSBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIHZlcnNpb25lZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIGRlcGVuZGVuY3kgb24gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAxLjIgb3IgZ3JlYXRlciBvZiB0aGUgcGFja2FnZSA8ZmlsZW5hbWU+Zm9vPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiZm9vICg+PSAxLjIpIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZC10aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUlBST1ZJREVTJz48Z2xvc3N0ZXJtPlJQUk9WSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAoYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUFJPVklERVNfJHtQTn0gPSAid2lkZ2V0LWFiaS0yIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCwgYnV0IG5lZWRzIHRoZW0gZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBleHRlbmRlZCB1c2FiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHN1cHBvcnRzIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlY29tbWVuZHMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlY29tbWVuZCBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcyc+PHRpdGxlPlM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VDVElPTic+PGdsb3NzdGVybT5TRUNUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLjwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUkknPjxnbG9zc3Rlcm0+U1JDX1VSSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgdGVsbHMgQml0QmFrZSB3aGljaCBiaXRzCisgICAgICAgICAgICAgICAgICAgIHRvIHB1bGwgZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgZmV0Y2ggYSBzaW5nbGUgdGFyYmFsbCBmcm9tIHRoZSBJbnRlcm5ldCwgdGhlIHJlY2lwZSBvcgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VzIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBlbnRyeSB0aGF0IHNwZWNpZmllcyB0aGF0IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCBhbmQgaW5jbHVkZSBhIGN1c3RvbSBmaWxlLCB0aGUgcmVjaXBlIG9yCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlIG5lZWRzIGFuIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzcGVjaWZpZXMgYWxsIHRob3NlIHNvdXJjZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgbGlzdCBleHBsYWlucyB0aGUgYXZhaWxhYmxlIFVSSSBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBmaWxlcywgd2hpY2ggYXJlIHVzdWFsbHkgZmlsZXMgc2hpcHBlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnpyOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmF6YWFyIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gT1NDIChPcGVuU1VTRSBCdWlsZCBzZXJ2aWNlKSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVwbyAoR2l0KSByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSW50ZXJuZXQgdXNpbmcgSFRUUC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHBzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyBIVFRQUy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgRlRQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y3ZzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgQ1ZTIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgTWVyY3VyaWFsICg8ZmlsZW5hbWU+aGc8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0PC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzaDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNlY3VyZSBzaGVsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFN1YnZlcnNpb24gKDxmaWxlbmFtZT5zdm48L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgd29ydGggbWVudGlvbmluZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnVucGFjazwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBDb250cm9scworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXRoZXIgb3Igbm90IHRvIHVucGFjayB0aGUgZmlsZSBpZiBpdCBpcyBhbiBhcmNoaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byB1bnBhY2sgdGhlIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zdWJkaXI8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gUGxhY2VzIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGV4dHJhY3RzIGl0cyBjb250ZW50cykgaW50byB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgdW51c3VhbCB0YXJiYWxscyBvciBvdGhlciBhcmNoaXZlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGhhdmUgdGhlaXIgZmlsZXMgYWxyZWFkeSBpbiBhIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSB0byBiZSB1c2VkIGZvciBhc3NvY2lhdGlvbiB3aXRoIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gY2hlY2tzdW1zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIGZpbGUgc3BlY2lmaWVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb3dubG9hZGZpbGVuYW1lPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlbmFtZSB1c2VkIHdoZW4gc3RvcmluZyB0aGUgZG93bmxvYWRlZCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUkNEQVRFJz48Z2xvc3N0ZXJtPlNSQ0RBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IGlmIHRoZSBzb3VyY2Ugd2FzIGZldGNoZWQgZnJvbSBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDUkVWJz48Z2xvc3N0ZXJtPlNSQ1JFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgU3VidmVyc2lvbiwgR2l0LCBNZXJjdXJpYWwgYW5kIEJhemFhci4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYnVpbGQgYSBmaXhlZCByZXZpc2lvbiBhbmQgeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgcGVyZm9ybWluZyBhIHF1ZXJ5IG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBldmVyeSB0aW1lCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgcGFyc2VzIHlvdXIgcmVjaXBlLCB5b3Ugc2hvdWxkIHNwZWNpZnkgYSA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGZ1bGwgcmV2aXNpb24gaWRlbnRpZmllciBhbmQgbm90IGp1c3QgYSB0YWcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDUkVWX0ZPUk1BVCc+PGdsb3NzdGVybT5TUkNSRVZfRk9STUFUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlbHBzIGNvbnN0cnVjdCB2YWxpZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB3aGVuIG11bHRpcGxlIHNvdXJjZSBjb250cm9sbGVkIFVSTHMgYXJlIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3lzdGVtIG5lZWRzIGhlbHAgY29uc3RydWN0aW5nIHRoZXNlIHZhbHVlcyB1bmRlciB0aGVzZQorICAgICAgICAgICAgICAgICAgICBjaXJjdW1zdGFuY2VzLgorICAgICAgICAgICAgICAgICAgICBFYWNoIGNvbXBvbmVudCBpbiB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBhc3NpZ25lZCBhIG5hbWUgYW5kIHRoZXNlIGFyZSByZWZlcmVuY2VkCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdpdGggVVJMcyBuYW1lZCAibWFjaGluZSIgYW5kICJtZXRhIi4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCA8ZmlsZW5hbWU+U1JDUkVWX0ZPUk1BVDwvZmlsZW5hbWU+IGNvdWxkIGxvb2sKKyAgICAgICAgICAgICAgICAgICAgbGlrZSAibWFjaGluZV9tZXRhIiBhbmQgdGhvc2UgbmFtZXMgd291bGQgaGF2ZSB0aGUgU0NNCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25zIHN1YnN0aXR1dGVkIGludG8gZWFjaCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgT25seSBvbmUgPGZpbGVuYW1lPkFVVE9JTkM8L2ZpbGVuYW1lPiBwbGFjZWhvbGRlciBpcyBhZGRlZAorICAgICAgICAgICAgICAgICAgICBhbmQgaWYgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBBbmQsIHRoaXMgcGxhY2Vob2xkZXIgaXMgcGxhY2VkIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgc3RyaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQU1QJz48Z2xvc3N0ZXJtPlNUQU1QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUENMRUFOJz48Z2xvc3N0ZXJtPlNUQU1QQ0xFQU48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVbmxpa2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCA8ZmlsZW5hbWU+U1RBTVBDTEVBTjwvZmlsZW5hbWU+IGNhbiBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkcyB0byBtYXRjaCB0aGUgcmFuZ2Ugb2YgZmlsZXMgYSBjbGVhbiBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIHJlbW92ZS4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIGEgY2xlYW4gb3BlcmF0aW9uIHRvIHJlbW92ZSBhbnkgb3RoZXIgc3RhbXBzCisgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSByZW1vdmluZyB3aGVuIGNyZWF0aW5nIGEgbmV3IHN0YW1wLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNVTU1BUlknPjxnbG9zc3Rlcm0+U1VNTUFSWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHNob3J0IHN1bW1hcnkgZm9yIHRoZSByZWNpcGUsIHdoaWNoIGlzIDcyIGNoYXJhY3RlcnMgb3IgbGVzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVk5ESVInPjxnbG9zc3Rlcm0+U1ZORElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZmlsZXMgY2hlY2tlZCBvdXQgb2YgYSBTdWJ2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhcmUgc3RvcmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS10Jz48dGl0bGU+VDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UJz48Z2xvc3N0ZXJtPlQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Qb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcworICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIGNvbnNpc3QgbW9zdGx5IG9mIHRhc2sgbG9ncyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cywgd2hlbiBidWlsZGluZyBhIHBhcnRpY3VsYXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPUERJUic+PGdsb3NzdGVybT5UT1BESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLQorICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXUnPjx0aXRsZT5VPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktdic+PHRpdGxlPlY8L3RpdGxlPgorICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXcnPjx0aXRsZT5XPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnkteCc+PHRpdGxlPlg8L3RpdGxlPgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS15Jz48dGl0bGU+WTwvdGl0bGU+CisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXonPjx0aXRsZT5aPC90aXRsZT4KKyAgICA8L2dsb3NzZGl2PgorLS0+CisKKworPC9nbG9zc2FyeT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLXN0eWxlLmNzcyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkYTJhNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9iaXRiYWtlLXVzZXItbWFudWFsLnhtbCBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmZjkzMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC54bWwKQEAgLTAsMCArMSw4OCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCI+CisKKzxib29rIGlkPSdiaXRiYWtlLXVzZXItbWFudWFsJyBsYW5nPSdlbicKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL2JpdGJha2UtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBCaXRCYWtlIFVzZXIgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQgUHVyZGllLCBDaHJpcyBMYXJzb24sIGFuZCA8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UGhpbCBCbHVuZGVsbDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkJpdEJha2UgQ29tbXVuaXR5PC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmJpdGJha2UtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworPCEtLQorIyBBZGQgaW4gc29tZSByZXZpc2lvbiBoaXN0b3J5IGlmIHdlIHdhbnQgaXQgaGVyZS4KKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+eC54PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+ZGQgbW9udGggeWVhcjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlNvbWUgcmVsZXZlbnQgY29tbWVudDwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPngueDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPmRkIG1vbnRoIHllYXI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5Tb21lIHJlbGV2ZW50IGNvbW1lbnQ8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj54Lng8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5kZCBtb250aCB5ZWFyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+U29tZSByZWxldmVudCBjb21tZW50PC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKy0tPgorCisgICAgICAgIDxjb3B5cmlnaHQ+CisgICAgICAgICAgICA8eWVhcj4yMDA0LTIwMTU8L3llYXI+CisgICAgICAgICAgICA8aG9sZGVyPlJpY2hhcmQgUHVyZGllPC9ob2xkZXI+CisgICAgICAgICAgICA8aG9sZGVyPkNocmlzIExhcnNvbjwvaG9sZGVyPgorICAgICAgICAgICAgPGhvbGRlcj5hbmQgUGhpbCBCbHVuZGVsbDwvaG9sZGVyPgorICAgICAgICA8L2NvcHlyaWdodD4KKworICAgICAgICA8bGVnYWxub3RpY2U+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gTGljZW5zZS4KKyAgICAgICAgICAgICAgICBUbyB2aWV3IGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHZpc2l0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LyI+aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LzwvdWxpbms+CisgICAgICAgICAgICAgICAgb3Igc2VuZCBhIGxldHRlciB0byBDcmVhdGl2ZSBDb21tb25zLCA0NDQgQ2FzdHJvIFN0cmVldCwKKyAgICAgICAgICAgICAgICBTdWl0ZSA5MDAsIE1vdW50YWluIFZpZXcsIENhbGlmb3JuaWEgOTQwNDEsIFVTQS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9sZWdhbG5vdGljZT4KKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtZXhlY3V0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJpdGJha2UtdXNlci1tYW51YWwtZmV0Y2hpbmcueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLXJlZi12YXJpYWJsZXMueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJiaXRiYWtlLXVzZXItbWFudWFsLWhlbGxvLnhtbCIvPgorCis8L2Jvb2s+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcgYi9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2ZpZ3VyZXMvYml0YmFrZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyOTAxNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL2JpdGJha2UtdXNlci1tYW51YWwvZmlndXJlcy9iaXRiYWtlLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy9iaXRiYWtlLXVzZXItbWFudWFsL2h0bWwuY3NzIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9odG1sLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVkZmQzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS11c2VyLW1hbnVhbC9odG1sLmNzcwpAQCAtMCwwICsxLDI4MSBAQAorLyogRmV1aWxsZSBkZSBzdHlsZSBEb2NCb29rIGR1IHByb2pldCBUcmFkdWMub3JnICAgICAgICAgICAgICAgICovCisvKiBEb2NCb29rIENTUyBzdHlsZXNoZWV0IG9mIHRoZSBUcmFkdWMub3JnIHByb2plY3QgICAgICAgICAgICAgKi8KKworLyogKGMpIEplYW4tUGhpbGlwcGUgR3XpcmFyZCAtIDE0IGFv+3QgMjAwNCAgICAgICAgICAgICAgICAgICAgICovCisvKiAoYykgSmVhbi1QaGlsaXBwZSBHdelyYXJkIC0gMTQgQXVndXN0IDIwMDQgICAgICAgICAgICAgICAgICAgKi8KKworLyogQ2V0dGUgZmV1aWxsZSBkZSBzdHlsZSBlc3QgbGlicmUsIHZvdXMgcG91dmV6IGxhICAgICAgICAgICAgICovCisvKiByZWRpc3RyaWJ1ZXIgZXQgbGEgbW9kaWZpZXIgc2Vsb24gbGVzIHRlcm1lcyBkZSBsYSBMaWNlbmNlICAgKi8KKy8qIEFydCBMaWJyZS4gVm91cyB0cm91dmVyZXogdW4gZXhlbXBsYWlyZSBkZSBjZXR0ZSBMaWNlbmNlIHN1ciAqLworLyogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvUGV0aXQtZ3VpZGUtZHUtdHJhZHVjdGV1ci5odG1sI2xpY2VuY2UtYXJ0LWxpYnJlICovCisKKy8qIFRoaXMgd29yayBvZiBhcnQgaXMgZnJlZSwgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAqLworLyogbW9kaWZ5IGl0IGFjY29yZGluZyB0byB0ZXJtcyBvZiB0aGUgRnJlZSBBcnQgbGljZW5zZS4gWW91ICAgICovCisvKiB3aWxsIGZpbmQgYSBzcGVjaW1lbiBvZiB0aGlzIGxpY2Vuc2Ugb24gdGhlIENvcHlsZWZ0ICAgICAgICAgKi8KKy8qIEF0dGl0dWRlIHdlYiBzaXRlOiBodHRwOi8vYXJ0bGlicmUub3JnIGFzIHdlbGwgYXMgb24gb3RoZXIgICAqLworLyogc2l0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBGcmVuY2ggdmVyc2lvbiBvZiB0aGlzIGxpY2VuY2UgYXMgc2hvd24gKi8KKy8qIG9uIGh0dHA6Ly90aWdyZXJheWUub3JnL1BldGl0LWd1aWRlLWR1LXRyYWR1Y3RldXIuaHRtbCNsaWNlbmNlLWFydC1saWJyZSAqLworLyogaXMgb25seSBvZmZpY2lhbCBsaWNlbmNlIG9mIHRoaXMgZG9jdW1lbnQuIFRoZSBFbmdsaXNoICAgICAgICovCisvKiBpcyBvbmx5IHByb3ZpZGVkIHRvIGhlbHAgeW91IHVuZGVyc3RhbmQgdGhpcyBsaWNlbmNlLiAgICAgICAgKi8KKworLyogTGEgZGVybmnocmUgdmVyc2lvbiBkZSBjZXR0ZSBmZXVpbGxlIGRlIHN0eWxlIGVzdCB0b3Vqb3VycyAgICovCisvKiBkaXNwb25pYmxlIHN1cqA6IGh0dHA6Ly90aWdyZXJheWUub3JnL3N0eWxlLmNzcyAgICAgICAgICAgICAgKi8KKy8qIEVsbGUgZXN0IOlnYWxlbWVudCBkaXNwb25pYmxlIHN1cqA6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogaHR0cDovL3d3dy50cmFkdWMub3JnL2RvY3MvSE9XVE8vbGVjdHVyZS9zdHlsZS5jc3MgICAgICAgICAgICovCisKKy8qIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHN0eWxlc2hlZXQgaXMgYXZhaWxhYmxlIGZyb206ICAgICAqLworLyogaHR0cDovL3RpZ3JlcmF5ZS5vcmcvc3R5bGUuY3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSBvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGh0dHA6Ly93d3cudHJhZHVjLm9yZy9kb2NzL0hPV1RPL2xlY3R1cmUvc3R5bGUuY3NzICAgICAgICAgICAqLworCisvKiBOJ2jpc2l0ZXogcGFzIOAgZW52b3llciB2b3MgY29tbWVudGFpcmVzIGV0IGNvcnJlY3Rpb25zIOAgICAgKi8KKy8qIEplYW4tUGhpbGlwcGUgR3XpcmFyZCA8amVhbi1waGlsaXBwZS5ndWVyYXJkQHRpZ3JlcmF5ZS5vcmc+ICAqLworCisvKiBQbGVhc2Ugc2VuZCBmZWVkYmFjayBhbmQgYnVnIHJlcG9ydHMgdG8gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEplYW4tUGhpbGlwcGUgR3XpcmFyZCA8amVhbi1waGlsaXBwZS5ndWVyYXJkQHRpZ3JlcmF5ZS5vcmc+ICAqLworCisvKiAkSWQ6IHN0eWxlLmNzcyx2IDEuMTQgMjAwNC8wOS8xMCAyMDoxMjowOSBmZXZyaWVyIEV4cCBmZXZyaWVyICQgKi8KKworLyogUHLpc2VudGF0aW9uIGfpbulyYWxlIGR1IGRvY3VtZW50ICovCisvKiBPdmVyYWxsIGRvY3VtZW50IHByZXNlbnRhdGlvbiAqLworCitib2R5IHsKKyAgICAvKgorICAgIGZvbnQtZmFtaWx5OiBBcG9sbGluZSwgIlVSVyBQYWxsYWRpbyBMIiwgR2FyYW1vbmQsIGpHYXJhbW9uZCwKKyAgICAgICAgICAgICAgICAgIkJpdHN0cmVhbSBDeWJlcmJpdCIsICJQYWxhdGlubyBMaW5vdHlwZSIsIHNlcmlmOworICAgICAqLworICAgIG1hcmdpbjogNyU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cit9CisKKy8qIFRhaWxsZSBkdSB0ZXh0ZSAqLworLyogVGV4dCBzaXplICovCisKKyogeyBmb250LXNpemU6IDEwMCU7IH0KKworLyogR2VzdGlvbiBkZXMgdGV4dGVzIG1pcyBlbiByZWxpZWYgaW1icmlxdelzICovCisvKiBFbWJlZGRlZCBlbXBoYXNpcyAqLworCitlbSB7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQorZW0gZW0geyBmb250LXN0eWxlOiBub3JtYWw7IH0KK2VtIGVtIGVtIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CisKKy8qIFRpdHJlcyAqLworLyogVGl0bGVzICovCisKK2gxIHsgZm9udC1zaXplOiAyMDAlOyBmb250LXdlaWdodDogOTAwOyB9CitoMiB7IGZvbnQtc2l6ZTogMTYwJTsgZm9udC13ZWlnaHQ6IDkwMDsgfQoraDMgeyBmb250LXNpemU6IDEzMCU7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CitoNCB7IGZvbnQtc2l6ZTogMTE1JTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KK2g1IHsgZm9udC1zaXplOiAxMDglOyBmb250LXdlaWdodDogYm9sZDsgfQoraDYgeyAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CisKKy8qIE5vbSBkZSBmYW1pbGxlIGVuIHBldGl0ZXMgbWFqdXNjdWxlcyAodW5pcXVlbWVudCBlbiBmcmFu52FpcykgKi8KKy8qIExhc3QgbmFtZXMgaW4gc21hbGwgY2FwcyAoZm9yIEZyZW5jaCBvbmx5KSAqLworCisqW2NsYXNzfj0ic3VybmFtZSJdOmxhbmcoZnIpIHsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzOyB9CisKKy8qIEJsb2NzIGRlIGNpdGF0aW9uICovCisvKiBRdW90YXRpb24gYmxvY3MgKi8KKworZGl2W2NsYXNzfj0iYmxvY2txdW90ZSJdIHsKKyAgYm9yZGVyOiBzb2xpZCAycHggI0FBQTsKKyAgcGFkZGluZzogNXB4OworICBtYXJnaW46IDVweDsKK30KKworZGl2W2NsYXNzfj0iYmxvY2txdW90ZSJdID4gdGFibGUgeworICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIEJsb2NzIGxpdOlyYXV4oDogZm9uZCBncmlzIGNsYWlyICovCisvKiBMaXRlcmFsIGJsb2NzOiBsaWdodCBncmF5IGJhY2tncm91bmQgKi8KKworKltjbGFzc349ImxpdGVyYWxsYXlvdXQiXSB7CisgIGJhY2tncm91bmQ6ICNmMGYwZjA7CisgIHBhZGRpbmc6IDVweDsKKyAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIFByb2dyYW1tZXMgZXQgY2FwdHVyZXMgdGV4dGWgOiBmb25kIGJsZXUgY2xhaXIgKi8KKy8qIExpc3RpbmcgYW5kIHRleHQgc2NyZWVuIHNuYXBzaG90czogbGlnaHQgYmx1ZSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJwcm9ncmFtbGlzdGluZyJdLCAqW2NsYXNzfj0ic2NyZWVuIl0geworICBiYWNrZ3JvdW5kOiAjZjBmMGZmOworICBwYWRkaW5nOiA1cHg7CisgIG1hcmdpbjogNXB4OworfQorCisvKiBMZXMgdGV4dGVzIOAgcmVtcGxhY2VyIHNvbnQgc3VybGlnbulzIGVuIHZlcnQgcOJsZSAqLworLyogUmVwbGFjZWFibGUgdGV4dCBpbiBoaWdobGlnaHRlZCBpbiBwYWxlIGdyZWVuICovCisKKypbY2xhc3N+PSJyZXBsYWNlYWJsZSJdIHsgCisgICAgYmFja2dyb3VuZC1jb2xvcjogIzk4ZmI5ODsKKyAgICBmb250LXN0eWxlOiBub3JtYWw7IH0KKworLyogVGFibGVzoDogZm9uZHMgZ3JpcyBjbGFpciAmIGJvcmRzIHNpbXBsZXMgKi8KKy8qIFRhYmxlczogbGlnaHQgZ3JheSBiYWNrZ3JvdW5kIGFuZCBzb2xpZCBib3JkZXJzICovCisKKypbY2xhc3N+PSJ0YWJsZSJdICpbY2xhc3N+PSJ0aXRsZSJdIHsgd2lkdGg6MTAwJTsgYm9yZGVyOiAwcHg7IH0KKwordGFibGUgeworICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKy8qIExpc3RlcyBzaW1wbGVzIGVuIHN0eWxlIHRhYmxlICovCisvKiBTaW1wbGVzIGxpc3RzIGluIHRhYmxlIHByZXNlbnRhdGlvbiAqLworCit0YWJsZVtjbGFzc349InNpbXBsZWxpc3QiXSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsKKyAgICBtYXJnaW46IDVweDsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjQUFBOworfQorCit0YWJsZVtjbGFzc349InNpbXBsZWxpc3QiXSB0ZCB7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI0FBQTsKK30KKworLyogTGVzIHRhYmxlcyAqLworLyogVGFibGVzICovCisKKypbY2xhc3N+PSJ0YWJsZSJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwOworICAgIGJvcmRlcjogc29saWQgMXB4ICNBQUE7Cit9CisqW2NsYXNzfj0iaW5mb3JtYWx0YWJsZSJdIHRhYmxlIHsgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMDsgfQorCit0aCx0ZCB7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgcGFkZGluZzogMC4xZW0gMC4zZW07CisgICAgZW1wdHktY2VsbHM6IHNob3c7IAorfQorCisvKiBBbGlnbmVtZW50IGRlcyBjb2xvbm5lcyAqLworLyogQ29sdW5tcyBhbGlnbm1lbnQgKi8KKwordGRbYWxpZ249Y2VudGVyXSAsICB0aFthbGlnbj1jZW50ZXJdICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfQordGRbYWxpZ249cmlnaHRdICwgICB0aFthbGlnbj1yaWdodF0gICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9Cit0ZFthbGlnbj1sZWZ0XSAsICAgIHRoW2FsaWduPWxlZnRdICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgfQordGRbYWxpZ249anVzdGlmeV0gLCB0aFthbGlnbj1qdXN0aWZ5XSB7IHRleHQtYWxpZ246IGp1c3RpZnk7IH0KKworLyogUGFzIGRlIG1hcmdlIGF1dG91ciBkZXMgaW1hZ2VzICovCisvKiBObyBpbnNpZGUgbWFyZ2lucyBmb3IgaW1hZ2VzICovCisKK2ltZyB7IGJvcmRlcjogMDsgfQorCisvKiBMZXMgbGllbnMgbmUgc29udCBwYXMgc291bGlnbulzICovCisvKiBObyB1bmRlcmxpbmVzIGZvciBsaW5rcyAqLworCis6bGluayAsIDp2aXNpdGVkICwgOmFjdGl2ZSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCisvKiBQcnVkZW5jZaA6IGNhZHJlIGphdW5lIGV0IGZvbmQgamF1bmUgY2xhaXIgKi8KKy8qIENhdXRpb246IHllbGxvdyBib3JkZXIgYW5kIGxpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJjYXV0aW9uIl0geworICAgIGJvcmRlcjogc29saWQgMnB4IHllbGxvdzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349ImNhdXRpb24iXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0iY2F1dGlvbiJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogTm90ZSBpbXBvcnRhbnRloDogY2FkcmUgamF1bmUgZXQgZm9uZCBqYXVuZSBjbGFpciAqLworLyogSW1wb3J0YW50OiB5ZWxsb3cgYm9yZGVyIGFuZCBsaWdodCB5ZWxsb3cgYmFja2dyb3VuZCAqLworCisqW2NsYXNzfj0iaW1wb3J0YW50Il0geworICAgIGJvcmRlcjogc29saWQgMnB4IHllbGxvdzsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmUwOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtOworICAgIG1hcmdpbjogNXB4OworfQorCisqW2NsYXNzfj0iaW1wb3J0YW50Il0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUKK30KKworKltjbGFzc349ImltcG9ydGFudCJdIHRhYmxlICB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZlMDsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qIE1pc2UgZW4g6XZpZGVuY2WgOiB0ZXh0ZSBs6WfocmVtZW50IHBsdXMgZ3JhbmQgKi8KKy8qIEhpZ2hsaWdodHM6IHNsaWdodGx5IGxhcmdlciB0ZXh0cyAqLworCisqW2NsYXNzfj0iaGlnaGxpZ2h0cyJdIHsKKyAgICBmb250LXNpemU6ICAxMTAlOworfQorCisvKiBOb3RloDogY2FkcmUgYmxldSBldCBmb25kIGJsZXUgY2xhaXIgKi8KKy8qIE5vdGVzOiBibHVlIGJvcmRlciBhbmQgbGlnaHQgYmx1ZSBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJub3RlIl0gICB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggIzcwOTlDNTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGZmOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349Im5vdGUiXSB0aCB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZQorfQorCisqW2NsYXNzfj0ibm90ZSJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGZmOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogQXN0dWNloDogY2FkcmUgdmVydCBldCBmb25kIHZlcnQgY2xhaXIgKi8KKy8qIFRpcDogZ3JlZW4gYm9yZGVyIGFuZCBsaWdodCBncmVlbiBiYWNrZ3JvdW5kICovCisKKypbY2xhc3N+PSJ0aXAiXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggIzAwZmYwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmZmZmOworICAgIHBhZGRpbmc6IDFlbSA2cHggMWVtIDsKKyAgICBtYXJnaW46IDVweDsKK30KKworKltjbGFzc349InRpcCJdIHRoIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisqW2NsYXNzfj0idGlwIl0gdGFibGUgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGZmZmY7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKiBBdmVydGlzc2VtZW50oDogY2FkcmUgcm91Z2UgZXQgZm9uZCByb3VnZSBjbGFpciAqLworLyogV2FybmluZzogcmVkIGJvcmRlciBhbmQgbGlnaHQgcmVkIGJhY2tncm91bmQgKi8KKworKltjbGFzc349Indhcm5pbmciXSB7CisgICAgYm9yZGVyOiBzb2xpZCAycHggI2ZmMDAwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMGYwOyAKKyAgICBwYWRkaW5nOiAxZW0gNnB4IDFlbSA7CisgICAgbWFyZ2luOiA1cHg7Cit9CisKKypbY2xhc3N+PSJ3YXJuaW5nIl0gdGggeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisgICAgICAgICAgICAgICAgICAgIAorCisqW2NsYXNzfj0id2FybmluZyJdIHRhYmxlIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmMGYwOworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyogRmluICovCisvKiBUaGUgRW5kICovCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL2JpdGJha2UuMSBiL2JpdGJha2UvZG9jL2JpdGJha2UuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmM4ZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvYml0YmFrZS4xCkBAIC0wLDAgKzEsMTQyIEBACisuXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhleSwgRU1BQ1M6IC0qLSBucm9mZiAtKi0KKy5cIiBGaXJzdCBwYXJhbWV0ZXIsIE5BTUUsIHNob3VsZCBiZSBhbGwgY2FwcworLlwiIFNlY29uZCBwYXJhbWV0ZXIsIFNFQ1RJT04sIHNob3VsZCBiZSAxLTgsIG1heWJlIHcvIHN1YnNlY3Rpb24KKy5cIiBvdGhlciBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkOiBzZWUgbWFuKDcpLCBtYW4oMSkKKy5USCBCSVRCQUtFIDEgIk5vdmVtYmVyIDE5LCAyMDA2IgorLlwiIFBsZWFzZSBhZGp1c3QgdGhpcyBkYXRlIHdoZW5ldmVyIHJldmlzaW5nIHRoZSBtYW5wYWdlLgorLlwiCisuXCIgU29tZSByb2ZmIG1hY3JvcywgZm9yIHJlZmVyZW5jZToKKy5cIiAubmggICAgICAgIGRpc2FibGUgaHlwaGVuYXRpb24KKy5cIiAuaHkgICAgICAgIGVuYWJsZSBoeXBoZW5hdGlvbgorLlwiIC5hZCBsICAgICAgbGVmdCBqdXN0aWZ5CisuXCIgLmFkIGIgICAgICBqdXN0aWZ5IHRvIGJvdGggbGVmdCBhbmQgcmlnaHQgbWFyZ2lucworLlwiIC5uZiAgICAgICAgZGlzYWJsZSBmaWxsaW5nCisuXCIgLmZpICAgICAgICBlbmFibGUgZmlsbGluZworLlwiIC5iciAgICAgICAgaW5zZXJ0IGxpbmUgYnJlYWsKKy5cIiAuc3AgPG4+ICAgIGluc2VydCBuKzEgZW1wdHkgbGluZXMKKy5cIiBmb3IgbWFucGFnZS1zcGVjaWZpYyBtYWNyb3MsIHNlZSBtYW4oNykKKy5TSCBOQU1FCitCaXRCYWtlIFwtIHNpbXBsZSB0b29sIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRhc2tzCisuU0ggU1lOT1BTSVMKKy5CIGJpdGJha2UKKy5SSSBbIG9wdGlvbnMgXSAiIHBhY2thZ2VuYW1lcyIKKy5icgorLlNIIERFU0NSSVBUSU9OCitUaGlzIG1hbnVhbCBwYWdlIGRvY3VtZW50cyBicmllZmx5IHRoZQorLkIgYml0YmFrZQorY29tbWFuZC4KKy5QUAorLlwiIFRlWCB1c2VycyBtYXkgYmUgbW9yZSBjb21mb3J0YWJsZSB3aXRoIHRoZSBcZkI8d2hhdGV2ZXI+XGZQIGFuZAorLlwiIFxmSTx3aGF0ZXZlcj5cZlAgZXNjYXBlIHNlcXVlbmNlcyB0byBpbnZvZGUgYm9sZCBmYWNlIGFuZCBpdGFsaWNzLCAKKy5cIiByZXNwZWN0aXZlbHkuCitcZkJiaXRiYWtlXGZQIGlzIGEgcHJvZ3JhbSB0aGF0IGV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgdGFzayAoZGVmYXVsdCBpcyAnYnVpbGQnKQorZm9yIGEgZ2l2ZW4gc2V0IG9mIEJpdEJha2UgZmlsZXMuCisuYnIKK0l0IGV4cGVjdHMgdGhhdCBCQkZJTEVTIGlzIGRlZmluZWQsIHdoaWNoIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8KK2JlIGV4ZWN1dGVkLiBCQkZJTEVTIGRvZXMgc3VwcG9ydCB3aWxkY2FyZHMuCisuYnIKK0RlZmF1bHQgQkJGSUxFUyBhcmUgdGhlIC5iYiBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisuU0ggT1BUSU9OUworVGhpcyBwcm9ncmFtIGZvbGxvdyB0aGUgdXN1YWwgR05VIGNvbW1hbmQgbGluZSBzeW50YXgsIHdpdGggbG9uZworb3B0aW9ucyBzdGFydGluZyB3aXRoIHR3byBkYXNoZXMgKGAtJykuCisuVFAKKy5CIFwtaCwgXC1cLWhlbHAKK1Nob3cgc3VtbWFyeSBvZiBvcHRpb25zLgorLlRQCisuQiBcLVwtdmVyc2lvbgorU2hvdyB2ZXJzaW9uIG9mIHByb2dyYW0uCisuVFAKKy5CIFwtYkJVSUxERklMRSwgXC1cLWJ1aWxkZmlsZT1CVUlMREZJTEUKK2V4ZWN1dGUgdGhlIHRhc2sgYWdhaW5zdCB0aGlzIC5iYiBmaWxlLCByYXRoZXIgdGhhbiBhIHBhY2thZ2UgZnJvbSBCQkZJTEVTLgorLlRQCisuQiBcLWssIFwtXC1jb250aW51ZQorY29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlIHRhcmdldCB0aGF0IGZhaWxlZCwgYW5kCit0aG9zZSB0aGF0IGRlcGVuZCBvbiBpdCwgY2Fubm90IGJlIHJlbWFkZSwgdGhlIG90aGVyIGRlcGVuZGVuY2llcyBvZiB0aGVzZQordGFyZ2V0cyBjYW4gYmUgcHJvY2Vzc2VkIGFsbCB0aGUgc2FtZS4KKy5UUAorLkIgXC1hLCBcLVwtdHJ5YWx0Y29uZmlncworY29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuCisuVFAKKy5CIFwtZiwgXC1cLWZvcmNlCitmb3JjZSBydW4gb2Ygc3BlY2lmaWVkIGNtZCwgcmVnYXJkbGVzcyBvZiBzdGFtcCBzdGF0dXMKKy5UUAorLkIgXC1pLCBcLVwtaW50ZXJhY3RpdmUKK2Ryb3AgaW50byB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhbHNvIGNhbGxlZCB0aGUgQml0QmFrZSBzaGVsbC4KKy5UUAorLkIgXC1jQ01ELCBcLVwtY21kPUNNRAorU3BlY2lmeSB0YXNrIHRvIGV4ZWN1dGUuIE5vdGUgdGhhdCB0aGlzIG9ubHkgZXhlY3V0ZXMgdGhlIHNwZWNpZmllZCB0YXNrIGZvcgordGhlIHByb3ZpZGVlIGFuZCB0aGUgcGFja2FnZXMgaXQgZGVwZW5kcyBvbiwgaS5lLiAnY29tcGlsZScgZG9lcyBub3QgaW1wbGljaXRseQorY2FsbCBzdGFnZSBmb3IgdGhlIGRlcGVuZGVuY2llcyAoSU9XOiB1c2Ugb25seSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcpLgorRGVwZW5kaW5nIG9uIHRoZSBiYXNlLmJiY2xhc3MgYSBsaXN0dGFza3MgdGFzayBpcyBkZWZpbmVkIGFuZCB3aWxsIHNob3cKK2F2YWlsYWJsZSB0YXNrcy4KKy5UUAorLkIgXC1yRklMRSwgXC1cLXJlYWQ9RklMRSAKK3JlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYKKy5UUAorLkIgXC12LCBcLVwtdmVyYm9zZQorb3V0cHV0IG1vcmUgY2hpdC1jaGF0IHRvIHRoZSB0ZXJtaW5hbAorLlRQCisuQiBcLUQsIFwtXC1kZWJ1ZworSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlIHRoYW4gb25jZS4KKy5UUAorLkIgXC1uLCBcLVwtZHJ5LXJ1bgorZG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zCisuVFAKKy5CIFwtcCwgXC1cLXBhcnNlLW9ubHkKK3F1aXQgYWZ0ZXIgcGFyc2luZyB0aGUgQkIgZmlsZXMgKGRldmVsb3BlcnMgb25seSkKKy5UUAorLkIgXC1zLCBcLVwtc2hvdy12ZXJzaW9ucworc2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHBhY2thZ2VzCisuVFAKKy5CIFwtZSwgXC1cLWVudmlyb25tZW50CitzaG93IHRoZSBnbG9iYWwgb3IgcGVyLXJlY2lwZSBlbnZpcm9ubWVudCAodGhpcyBpcyB3aGF0IHVzZWQgdG8gYmUgYmJyZWFkKQorLlRQCisuQiBcLWcsIFwtXC1ncmFwaHZpegorZW1pdCB0aGUgZGVwZW5kZW5jeSB0cmVlcyBvZiB0aGUgc3BlY2lmaWVkIHBhY2thZ2VzIGluIHRoZSBkb3Qgc3ludGF4CisuVFAKKy5CIFwtSUlHTk9SRURcX0RPVFxfREVQUywgXC1cLWlnbm9yZS1kZXBzPUlHTk9SRURfRE9UX0RFUFMKK1N0b3AgcHJvY2Vzc2luZyBhdCB0aGUgZ2l2ZW4gbGlzdCBvZiBkZXBlbmRlbmNpZXMgd2hlbiBnZW5lcmF0aW5nIGRlcGVuZGVuY3kKK2dyYXBocy4gVGhpcyBjYW4gaGVscCB0byBtYWtlIHRoZSBncmFwaCBtb3JlIGFwcGVhbGluZworLlRQCisuQiBcLWxERUJVR19ET01BSU5TLCBcLVwtbG9nLWRvbWFpbnM9REVCVUdfRE9NQUlOUworU2hvdyBkZWJ1ZyBsb2dnaW5nIGZvciB0aGUgc3BlY2lmaWVkIGxvZ2dpbmcgZG9tYWlucworLlRQCisuQiBcLVAsIFwtXC1wcm9maWxlCitwcm9maWxlIHRoZSBjb21tYW5kIGFuZCBwcmludCBhIHJlcG9ydAorLlRQCisuQiBcLXVVSSwgXC1cLXVpPVVJCitVc2VyIGludGVyZmFjZSB0byB1c2UuIEN1cnJlbnRseSwgaG9iLCBkZXBleHAsIGdvZ2dsZSBvciBuY3Vyc2VzIGNhbiBiZSBzcGVjaWZpZWQgYXMgVUkuCisuVFAKKy5CIFwtdFNFUlZFUlRZUEUsIFwtXC1zZXJ2ZXJ0eXBlPVNFUlZFUlRZUEUKK0Nob29zZSB3aGljaCBzZXJ2ZXIgdG8gdXNlLCBub25lLCBwcm9jZXNzIG9yIHhtbHJwYy4KKy5UUAorLkIgXC1cLXJldmlzaW9ucy1jaGFuZ2VkCitTZXQgdGhlIGV4aXQgY29kZSBkZXBlbmRpbmcgb24gd2hldGhlciB1cHN0cmVhbSBmbG9hdGluZyByZXZpc2lvbnMgaGF2ZSBjaGFuZ2VkIG9yIG5vdC4KKy5UUAorLkIgXC1cLXNlcnZlci1vbmx5CitSdW4gYml0YmFrZSB3aXRob3V0IFVJLCAgdGhlIGZyb250ZW5kIGNhbiBjb25uZWN0IHdpdGggYml0YmFrZSBzZXJ2ZXIgaXRzZWxmLgorLlRQCisuQiBcLUJCSU5ELCBcLVwtYmluZD1CSU5ECitUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4KKy5UUAorLkIgXC1cLW5vXC1zZXRzY2VuZQorRG8gbm90IHJ1biBhbnkgc2V0c2NlbmUgdGFza3MsIGZvcmNlcyBidWlsZHMuCisKKy5TSCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKK2JpdGJha2UgdXNlcyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb250cm9sIGl0cworb3BlcmF0aW9uOgorLlRQCisuQiBCSVRCQUtFX1VJCitUaGUgYml0YmFrZSB1c2VyIGludGVyZmFjZTsgb3ZlcnJpZGRlbiBieSB0aGUgXGZCLXVcZlAgY29tbWFuZGxpbmUgb3B0aW9uLgorCisuU0ggQVVUSE9SUworQml0QmFrZSB3YXMgd3JpdHRlbiBieSAKK1BoaWwgQmx1bmRlbGwsCitIb2xnZXIgRnJleXRoZXIsCitDaHJpcyBMYXJzb24sCitNaWNrZXkgTGF1ZXIsCitSaWNoYXJkIFB1cmRpZSwKK0hvbGdlciBTY2h1cmlnCisuUFAKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIHdyaXR0ZW4gYnkgTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW5AaHJ3Lm9uZS5wbD4KK2ZvciB0aGUgRGViaWFuIHByb2plY3QgKGJ1dCBtYXkgYmUgdXNlZCBieSBvdGhlcnMpLgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvcG9reS5lbnQgYi9iaXRiYWtlL2RvYy9wb2t5LmVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDMyZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvcG9reS5lbnQKQEAgLTAsMCArMSw1OSBAQAorPCFFTlRJVFkgRElTVFJPICIxLjQiPgorPCFFTlRJVFkgRElTVFJPX05BTUUgInRiZCI+Cis8IUVOVElUWSBZT0NUT19ET0NfVkVSU0lPTiAiMS40Ij4KKzwhRU5USVRZIFBPS1lWRVJTSU9OICI4LjAiPgorPCFFTlRJVFkgWU9DVE9fUE9LWSAicG9reS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsiPgorPCFFTlRJVFkgQ09QWVJJR0hUX1lFQVIgIjIwMTAtMjAxMyI+Cis8IUVOVElUWSBZT0NUT19ETF9VUkwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19IT01FX1VSTCAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQlVHWklMTEFfVVJMICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19XSUtJX1VSTCAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQUJfVVJMICJodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19HSVRfVVJMICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQURUUkVQT19VUkwgImh0dHA6Ly9hZHRyZXBvLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgT0VfSE9NRV9VUkwgImh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPRV9MSVNUU19VUkwgImh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL2NnaS1iaW4vbWFpbG1hbiI+Cis8IUVOVElUWSBPRV9ET0NTX1VSTCAiaHR0cDovL2RvY3Mub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPSF9IT01FX1VSTCAiaHR0cDovL28taGFuZC5jb20iPgorPCFFTlRJVFkgQklUQkFLRV9IT01FX1VSTCAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2JpdGJha2UvIj4KKzwhRU5USVRZIEVDTElQU0VfTUFJTl9VUkwgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj4KKzwhRU5USVRZIEVDTElQU0VfRExfVVJMICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmciPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9QTFVHSU5fVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9lY2xpcHNlLXBsdWdpbi8mRElTVFJPOyI+Cis8IUVOVElUWSBFQ0xJUFNFX1VQREFURVNfVVJMICImRUNMSVBTRV9ETF9VUkw7L3RtL3VwZGF0ZXMvMy4zIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9pbmRpZ28iPgorPCFFTlRJVFkgRUNMSVBTRV9KVU5PX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9qdW5vIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX0NEVF9VUkwgIiZFQ0xJUFNFX0RMX1VSTDt0b29scy9jZHQvcmVsZWFzZXMvaW5kaWdvIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVVJMICImWU9DVE9fSE9NRV9VUkw7L2RvY3MiPgorPCFFTlRJVFkgWU9DVE9fU09VUkNFU19VUkwgIiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8iPgorPCFFTlRJVFkgWU9DVE9fQUJfUE9SVF9VUkwgIiZZT0NUT19BQl9VUkw7OjgwMTAiPgorPCFFTlRJVFkgWU9DVE9fQUJfTklHSFRMWV9VUkwgIiZZT0NUT19BQl9VUkw7L25pZ2h0bHkvIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9wb2t5LyI+Cis8IUVOVElUWSBZT0NUT19SRUxFQVNFX0RMX1VSTCAiJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8veW9jdG8tJkRJU1RSTzsiPgorPCFFTlRJVFkgWU9DVE9fVE9PTENIQUlOX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy90b29sY2hhaW4vIj4KKzwhRU5USVRZIFlPQ1RPX0VDTElQU0VfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7L2VjbGlwc2UtcGx1Z2luL2luZGlnbzsiPgorPCFFTlRJVFkgWU9DVE9fQURUSU5TVEFMTEVSX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9hZHRfaW5zdGFsbGVyIj4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7LyZZT0NUT19QT0tZOy50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX01BQ0hJTkVTX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyI+Cis8IUVOVElUWSBZT0NUT19RRU1VX0RMX1VSTCAiJllPQ1RPX01BQ0hJTkVTX0RMX1VSTDsvcWVtdSI+Cis8IUVOVElUWSBZT0NUT19QWVRIT04taTY4Nl9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS1pNjg2LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLXg4Nl82NF9ETF9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL21pc2NzdXBwb3J0L3B5dGhvbi1uYXRpdmVzZGstc3RhbmRhbG9uZS14ODZfNjQudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1FTX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQURUX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2FkdC1tYW51YWwvYWR0LW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUkVGX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfQlNQX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JzcC1ndWlkZS9ic3AtZ3VpZGUuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0RFVl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0tFUk5FTF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19BRFRQQVRIX0RJUiAiL29wdC9wb2t5LyZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVEFSQkFMTCAiJllPQ1RPX1BPS1k7LnRhci5iejIiPgorPCFFTlRJVFkgT0VfSU5JVF9QQVRIICImWU9DVE9fUE9LWTsvb2UtaW5pdC1idWlsZC1lbnYiPgorPCFFTlRJVFkgT0VfSU5JVF9GSUxFICJvZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgd2dldCBnaXQtY29yZSBkaWZmc3RhdCB1bnppcCB0ZXhpbmZvIFwKKyAgICAgYnVpbGQtZXNzZW50aWFsIGNocnBhdGgiPgorPCFFTlRJVFkgRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMICJnYXdrIG1ha2Ugd2dldCB0YXIgYnppcDIgZ3ppcCBweXRob24gdW56aXAgcGVybCBwYXRjaCBcCisgICAgIGRpZmZ1dGlscyBkaWZmc3RhdCBnaXQgY3BwIGdjYyBnY2MtYysrIGVnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggXAorICAgICBjY2FjaGUiPgorPCFFTlRJVFkgT1BFTlNVU0VfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgInB5dGhvbiBnY2MgZ2NjLWMrKyBnaXQgY2hycGF0aCBtYWtlIHdnZXQgcHl0aG9uLXhtbCBcCisgICAgIGRpZmZzdGF0IHRleGluZm8gcHl0aG9uLWN1cnNlcyI+Cis8IUVOVElUWSBDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgbWFrZSB3Z2V0IHRhciBiemlwMiBnemlwIHB5dGhvbiB1bnppcCBwZXJsIHBhdGNoIFwKKyAgICAgZGlmZnV0aWxzIGRpZmZzdGF0IGdpdCBjcHAgZ2NjIGdjYy1jKysgZ2xpYmMtZGV2ZWwgdGV4aW5mbyBjaHJwYXRoIj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYS50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjZDZiNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4MjA0MwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmEueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2FuczwvZm9udC1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj45Mjg8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTIzNTwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xODM8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjEyODc8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zMjwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAwIi8+PHd4IHc9IjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDU5Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iOTUwIi8+PHd4IHc9Ijc3OSIvPjx3eCB3PSIyNzQiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjM5MCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MzAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg2Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI3NzAiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjU3NSIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNzUxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjU1Ii8+PHd4IHc9IjU1NyIvPjx3eCB3PSI4NjIiLz48d3ggdz0iNzQ4Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI2MDMiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjY5NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjczMSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iOTg4Ii8+PHd4IHc9IjY4NSIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjM5MCIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMzUyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1NzkiLz48d3ggdz0iMjc3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNDExIi8+PHd4IHc9IjUyMCIvPjx3eCB3PSIzOTIiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI4MTciLz48d3ggdz0iNTkxIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1ODkiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI5NzQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjgzMyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUxNyIvPjx3eCB3PSI2NzMiLz48d3ggdz0iNzU2Ii8+PHd4IHc9IjU4OCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNDcxIi8+PHd4IHc9IjQ3MSIvPjx3eCB3PSI3NjQiLz48d3ggdz0iOTgxIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI1MzAiLz48d3ggdz0iNDAwIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2MzciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI2NjgiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjg0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSIxMDY5Ii8+PHd4IHc9IjEwMjIiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI0OTQiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSIxNjYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSIzOTkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjYyOSIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSI1MTgiLz48d3ggdz0iMTM0MSIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjMxIi8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjczMSIvPjx3eCB3PSIyNzciLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU2MiIvPjx3eCB3PSIyODQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iNTI0Ii8+PHd4IHc9IjMzNiIvPjx3eCB3PSI3NzQiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjA0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNDAwIi8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1MjAiLz48d3ggdz0iNjk4Ii8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIzNjAiLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PGtlcm5pbmcga3B4MT0iMjQ2Ij48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNSI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDMiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTYiPjxwYWlyIGtlcm49IjM2IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iMzYiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSI1NSIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTEyIj48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMyI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NyI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTQ0Ij48cGFpciBrZXJuPSItNDAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTkiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzMiPjxwYWlyIGtlcm49IjMxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTYwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjQiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE2OSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49IjczIiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjAxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNjAiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODUiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iNDEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzQiPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAwIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyMiI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yNjIiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEyIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNTciLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OCI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODYiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIwOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEwMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjgxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMjkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIxIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NyI+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTg2IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTgxIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzciPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDkiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIwIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjQ5Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyNyI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTA0Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTQiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTgwIj48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xODgiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0MSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI1MyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjM2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MyI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNDAiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMzciPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzMiPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTMiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjExIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNzgiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTI1Ij48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MiI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MCI+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTEwNCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTUiPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9Ijg2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjI1MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTE1Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjM5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NSI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE5NyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xODMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii05NSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iOTIiPjxwYWlyIGtlcm49Ii0xNDIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTQ2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9Ijg5Ij48cGFpciBrZXJuPSItNzciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNDYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTEiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI1NiIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNzQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnR0ZiBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU2NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnhtbCBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb0JkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjMzMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvVmVyYU1vQmQueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Cb2xkPC9mb250LW5hbWU+PGZ1bGwtbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8gQm9sZDwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi0xOTwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+NjA1PC9yaWdodD48dG9wPjkyODwvdG9wPjwvYmJveD48ZmxhZ3M+MzQ8L2ZsYWdzPjxzdGVtdj4wPC9zdGVtdj48aXRhbGljYW5nbGU+MDwvaXRhbGljYW5nbGU+PHN1YnR5cGU+VFlQRTA8L3N1YnR5cGU+PG11bHRpYnl0ZS1leHRyYXM+PGNpZC10eXBlPkNJREZvbnRUeXBlMjwvY2lkLXR5cGU+PGRlZmF1bHQtd2lkdGg+MDwvZGVmYXVsdC13aWR0aD48YmZyYW5nZXM+PGJmIGdpPSIzIiB1ZT0iMTI2IiB1cz0iMzIiLz48YmYgZ2k9IjE3MiIgdWU9IjE2MCIgdXM9IjE2MCIvPjxiZiBnaT0iMTYzIiB1ZT0iMTYxIiB1cz0iMTYxIi8+PGJmIGdpPSIxMzIiIHVlPSIxNjMiIHVzPSIxNjIiLz48YmYgZ2k9IjE4OSIgdWU9IjE2NCIgdXM9IjE2NCIvPjxiZiBnaT0iMTUwIiB1ZT0iMTY1IiB1cz0iMTY1Ii8+PGJmIGdpPSIyMzEiIHVlPSIxNjYiIHVzPSIxNjYiLz48YmYgZ2k9IjEzNCIgdWU9IjE2NyIgdXM9IjE2NyIvPjxiZiBnaT0iMTQyIiB1ZT0iMTY4IiB1cz0iMTY4Ii8+PGJmIGdpPSIxMzkiIHVlPSIxNjkiIHVzPSIxNjkiLz48YmYgZ2k9IjE1NyIgdWU9IjE3MCIgdXM9IjE3MCIvPjxiZiBnaT0iMTY5IiB1ZT0iMTcxIiB1cz0iMTcxIi8+PGJmIGdpPSIxNjQiIHVlPSIxNzIiIHVzPSIxNzIiLz48YmYgZ2k9IjI1NiIgdWU9IjE3MyIgdXM9IjE3MyIvPjxiZiBnaT0iMTM4IiB1ZT0iMTc0IiB1cz0iMTc0Ii8+PGJmIGdpPSIyMTciIHVlPSIxNzUiIHVzPSIxNzUiLz48YmYgZ2k9IjEzMSIgdWU9IjE3NiIgdXM9IjE3NiIvPjxiZiBnaT0iMTQ3IiB1ZT0iMTc3IiB1cz0iMTc3Ii8+PGJmIGdpPSIyNDEiIHVlPSIxNzkiIHVzPSIxNzgiLz48YmYgZ2k9IjE0MSIgdWU9IjE4MCIgdXM9IjE4MCIvPjxiZiBnaT0iMTUxIiB1ZT0iMTgxIiB1cz0iMTgxIi8+PGJmIGdpPSIxMzYiIHVlPSIxODIiIHVzPSIxODIiLz48YmYgZ2k9IjE5NSIgdWU9IjE4MyIgdXM9IjE4MyIvPjxiZiBnaT0iMjIxIiB1ZT0iMTg0IiB1cz0iMTg0Ii8+PGJmIGdpPSIyNDAiIHVlPSIxODUiIHVzPSIxODUiLz48YmYgZ2k9IjE1OCIgdWU9IjE4NiIgdXM9IjE4NiIvPjxiZiBnaT0iMTcwIiB1ZT0iMTg3IiB1cz0iMTg3Ii8+PGJmIGdpPSIyNDMiIHVlPSIxOTAiIHVzPSIxODgiLz48YmYgZ2k9IjE2MiIgdWU9IjE5MSIgdXM9IjE5MSIvPjxiZiBnaT0iMTczIiB1ZT0iMTkyIiB1cz0iMTkyIi8+PGJmIGdpPSIyMDEiIHVlPSIxOTMiIHVzPSIxOTMiLz48YmYgZ2k9IjE5OSIgdWU9IjE5NCIgdXM9IjE5NCIvPjxiZiBnaT0iMTc0IiB1ZT0iMTk1IiB1cz0iMTk1Ii8+PGJmIGdpPSI5OCIgdWU9IjE5NyIgdXM9IjE5NiIvPjxiZiBnaT0iMTQ0IiB1ZT0iMTk4IiB1cz0iMTk4Ii8+PGJmIGdpPSIxMDAiIHVlPSIxOTkiIHVzPSIxOTkiLz48YmYgZ2k9IjIwMyIgdWU9IjIwMCIgdXM9IjIwMCIvPjxiZiBnaT0iMTAxIiB1ZT0iMjAxIiB1cz0iMjAxIi8+PGJmIGdpPSIyMDAiIHVlPSIyMDIiIHVzPSIyMDIiLz48YmYgZ2k9IjIwMiIgdWU9IjIwMyIgdXM9IjIwMyIvPjxiZiBnaT0iMjA3IiB1ZT0iMjA0IiB1cz0iMjA0Ii8+PGJmIGdpPSIyMDQiIHVlPSIyMDciIHVzPSIyMDUiLz48YmYgZ2k9IjIzMiIgdWU9IjIwOCIgdXM9IjIwOCIvPjxiZiBnaT0iMTAyIiB1ZT0iMjA5IiB1cz0iMjA5Ii8+PGJmIGdpPSIyMTAiIHVlPSIyMTAiIHVzPSIyMTAiLz48YmYgZ2k9IjIwOCIgdWU9IjIxMiIgdXM9IjIxMSIvPjxiZiBnaT0iMTc1IiB1ZT0iMjEzIiB1cz0iMjEzIi8+PGJmIGdpPSIxMDMiIHVlPSIyMTQiIHVzPSIyMTQiLz48YmYgZ2k9IjIzOSIgdWU9IjIxNSIgdXM9IjIxNSIvPjxiZiBnaT0iMTQ1IiB1ZT0iMjE2IiB1cz0iMjE2Ii8+PGJmIGdpPSIyMTMiIHVlPSIyMTciIHVzPSIyMTciLz48YmYgZ2k9IjIxMSIgdWU9IjIxOSIgdXM9IjIxOCIvPjxiZiBnaT0iMTA0IiB1ZT0iMjIwIiB1cz0iMjIwIi8+PGJmIGdpPSIyMzQiIHVlPSIyMjEiIHVzPSIyMjEiLz48YmYgZ2k9IjIzNiIgdWU9IjIyMiIgdXM9IjIyMiIvPjxiZiBnaT0iMTM3IiB1ZT0iMjIzIiB1cz0iMjIzIi8+PGJmIGdpPSIxMDYiIHVlPSIyMjQiIHVzPSIyMjQiLz48YmYgZ2k9IjEwNSIgdWU9IjIyNSIgdXM9IjIyNSIvPjxiZiBnaT0iMTA3IiB1ZT0iMjI2IiB1cz0iMjI2Ii8+PGJmIGdpPSIxMDkiIHVlPSIyMjciIHVzPSIyMjciLz48YmYgZ2k9IjEwOCIgdWU9IjIyOCIgdXM9IjIyOCIvPjxiZiBnaT0iMTEwIiB1ZT0iMjI5IiB1cz0iMjI5Ii8+PGJmIGdpPSIxNjAiIHVlPSIyMzAiIHVzPSIyMzAiLz48YmYgZ2k9IjExMSIgdWU9IjIzMSIgdXM9IjIzMSIvPjxiZiBnaT0iMTEzIiB1ZT0iMjMyIiB1cz0iMjMyIi8+PGJmIGdpPSIxMTIiIHVlPSIyMzMiIHVzPSIyMzMiLz48YmYgZ2k9IjExNCIgdWU9IjIzNSIgdXM9IjIzNCIvPjxiZiBnaT0iMTE3IiB1ZT0iMjM2IiB1cz0iMjM2Ii8+PGJmIGdpPSIxMTYiIHVlPSIyMzciIHVzPSIyMzciLz48YmYgZ2k9IjExOCIgdWU9IjIzOSIgdXM9IjIzOCIvPjxiZiBnaT0iMjMzIiB1ZT0iMjQwIiB1cz0iMjQwIi8+PGJmIGdpPSIxMjAiIHVlPSIyNDEiIHVzPSIyNDEiLz48YmYgZ2k9IjEyMiIgdWU9IjI0MiIgdXM9IjI0MiIvPjxiZiBnaT0iMTIxIiB1ZT0iMjQzIiB1cz0iMjQzIi8+PGJmIGdpPSIxMjMiIHVlPSIyNDQiIHVzPSIyNDQiLz48YmYgZ2k9IjEyNSIgdWU9IjI0NSIgdXM9IjI0NSIvPjxiZiBnaT0iMTI0IiB1ZT0iMjQ2IiB1cz0iMjQ2Ii8+PGJmIGdpPSIxODQiIHVlPSIyNDciIHVzPSIyNDciLz48YmYgZ2k9IjE2MSIgdWU9IjI0OCIgdXM9IjI0OCIvPjxiZiBnaT0iMTI3IiB1ZT0iMjQ5IiB1cz0iMjQ5Ii8+PGJmIGdpPSIxMjYiIHVlPSIyNTAiIHVzPSIyNTAiLz48YmYgZ2k9IjEyOCIgdWU9IjI1MiIgdXM9IjI1MSIvPjxiZiBnaT0iMjM1IiB1ZT0iMjUzIiB1cz0iMjUzIi8+PGJmIGdpPSIyMzciIHVlPSIyNTQiIHVzPSIyNTQiLz48YmYgZ2k9IjE4NiIgdWU9IjI1NSIgdXM9IjI1NSIvPjxiZiBnaT0iMjUxIiB1ZT0iMjYzIiB1cz0iMjYyIi8+PGJmIGdpPSIyNTMiIHVlPSIyNjkiIHVzPSIyNjgiLz48YmYgZ2k9IjAiIHVlPSIyNzAiIHVzPSIyNzAiLz48YmYgZ2k9IjAiIHVlPSIyNzEiIHVzPSIyNzEiLz48YmYgZ2k9IjAiIHVlPSIyNzIiIHVzPSIyNzIiLz48YmYgZ2k9IjI1NSIgdWU9IjI3MyIgdXM9IjI3MyIvPjxiZiBnaT0iMjQ2IiB1ZT0iMjg3IiB1cz0iMjg2Ii8+PGJmIGdpPSIyNDgiIHVlPSIzMDQiIHVzPSIzMDQiLz48YmYgZ2k9IjIxNCIgdWU9IjMwNSIgdXM9IjMwNSIvPjxiZiBnaT0iMjI1IiB1ZT0iMzIyIiB1cz0iMzIxIi8+PGJmIGdpPSIxNzYiIHVlPSIzMzkiIHVzPSIzMzgiLz48YmYgZ2k9IjI0OSIgdWU9IjM1MSIgdXM9IjM1MCIvPjxiZiBnaT0iMjI3IiB1ZT0iMzUzIiB1cz0iMzUyIi8+PGJmIGdpPSIxODciIHVlPSIzNzYiIHVzPSIzNzYiLz48YmYgZ2k9IjIyOSIgdWU9IjM4MiIgdXM9IjM4MSIvPjxiZiBnaT0iMTY2IiB1ZT0iNDAyIiB1cz0iNDAyIi8+PGJmIGdpPSIyMTUiIHVlPSI3MTAiIHVzPSI3MTAiLz48YmYgZ2k9IjIyNCIgdWU9IjcxMSIgdXM9IjcxMSIvPjxiZiBnaT0iMjE4IiB1ZT0iNzMwIiB1cz0iNzI4Ii8+PGJmIGdpPSIyMjMiIHVlPSI3MzEiIHVzPSI3MzEiLz48YmYgZ2k9IjIxNiIgdWU9IjczMiIgdXM9IjczMiIvPjxiZiBnaT0iMjIyIiB1ZT0iNzMzIiB1cz0iNzMzIi8+PGJmIGdpPSIxNTkiIHVlPSI5MzciIHVzPSI5MzciLz48YmYgZ2k9IjE1NSIgdWU9Ijk2MCIgdXM9Ijk2MCIvPjxiZiBnaT0iMTc4IiB1ZT0iODIxMiIgdXM9IjgyMTEiLz48YmYgZ2k9IjAiIHVlPSI4MjEzIiB1cz0iODIxMyIvPjxiZiBnaT0iMCIgdWU9IjgyMTQiIHVzPSI4MjE0Ii8+PGJmIGdpPSIwIiB1ZT0iODIxNSIgdXM9IjgyMTUiLz48YmYgZ2k9IjE4MiIgdWU9IjgyMTciIHVzPSI4MjE2Ii8+PGJmIGdpPSIxOTYiIHVlPSI4MjE4IiB1cz0iODIxOCIvPjxiZiBnaT0iMCIgdWU9IjgyMTkiIHVzPSI4MjE5Ii8+PGJmIGdpPSIxODAiIHVlPSI4MjIxIiB1cz0iODIyMCIvPjxiZiBnaT0iMTk3IiB1ZT0iODIyMiIgdXM9IjgyMjIiLz48YmYgZ2k9IjAiIHVlPSI4MjIzIiB1cz0iODIyMyIvPjxiZiBnaT0iMTMwIiB1ZT0iODIyNCIgdXM9IjgyMjQiLz48YmYgZ2k9IjE5NCIgdWU9IjgyMjUiIHVzPSI4MjI1Ii8+PGJmIGdpPSIxMzUiIHVlPSI4MjI2IiB1cz0iODIyNiIvPjxiZiBnaT0iMCIgdWU9IjgyMjciIHVzPSI4MjI3Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOCIgdXM9IjgyMjgiLz48YmYgZ2k9IjAiIHVlPSI4MjI5IiB1cz0iODIyOSIvPjxiZiBnaT0iMTcxIiB1ZT0iODIzMCIgdXM9IjgyMzAiLz48YmYgZ2k9IjE5OCIgdWU9IjgyNDAiIHVzPSI4MjQwIi8+PGJmIGdpPSIxOTAiIHVlPSI4MjUwIiB1cz0iODI0OSIvPjxiZiBnaT0iMjU4IiB1ZT0iODM2NCIgdXM9IjgzNjQiLz48YmYgZ2k9IjE0MCIgdWU9Ijg0ODIiIHVzPSI4NDgyIi8+PGJmIGdpPSIxNTIiIHVlPSI4NzA2IiB1cz0iODcwNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MDciIHVzPSI4NzA3Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOCIgdXM9Ijg3MDgiLz48YmYgZ2k9IjAiIHVlPSI4NzA5IiB1cz0iODcwOSIvPjxiZiBnaT0iMTY4IiB1ZT0iODcxMCIgdXM9Ijg3MTAiLz48YmYgZ2k9IjE1NCIgdWU9Ijg3MTkiIHVzPSI4NzE5Ii8+PGJmIGdpPSIwIiB1ZT0iODcyMCIgdXM9Ijg3MjAiLz48YmYgZ2k9IjE1MyIgdWU9Ijg3MjEiIHVzPSI4NzIxIi8+PGJmIGdpPSIyMzgiIHVlPSI4NzIyIiB1cz0iODcyMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjMiIHVzPSI4NzIzIi8+PGJmIGdpPSIwIiB1ZT0iODcyNCIgdXM9Ijg3MjQiLz48YmYgZ2k9IjE4OCIgdWU9Ijg3MjUiIHVzPSI4NzI1Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNiIgdXM9Ijg3MjYiLz48YmYgZ2k9IjAiIHVlPSI4NzI3IiB1cz0iODcyNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjgiIHVzPSI4NzI4Ii8+PGJmIGdpPSIyNTciIHVlPSI4NzI5IiB1cz0iODcyOSIvPjxiZiBnaT0iMTY1IiB1ZT0iODczMCIgdXM9Ijg3MzAiLz48YmYgZ2k9IjAiIHVlPSI4NzMxIiB1cz0iODczMSIvPjxiZiBnaT0iMCIgdWU9Ijg3MzIiIHVzPSI4NzMyIi8+PGJmIGdpPSIwIiB1ZT0iODczMyIgdXM9Ijg3MzMiLz48YmYgZ2k9IjE0NiIgdWU9Ijg3MzQiIHVzPSI4NzM0Ii8+PGJmIGdpPSIxNTYiIHVlPSI4NzQ3IiB1cz0iODc0NyIvPjxiZiBnaT0iMTY3IiB1ZT0iODc3NiIgdXM9Ijg3NzYiLz48YmYgZ2k9IjE0MyIgdWU9Ijg4MDAiIHVzPSI4ODAwIi8+PGJmIGdpPSIwIiB1ZT0iODgwMSIgdXM9Ijg4MDEiLz48YmYgZ2k9IjAiIHVlPSI4ODAyIiB1cz0iODgwMiIvPjxiZiBnaT0iMCIgdWU9Ijg4MDMiIHVzPSI4ODAzIi8+PGJmIGdpPSIxNDgiIHVlPSI4ODA1IiB1cz0iODgwNCIvPjxiZiBnaT0iMTg1IiB1ZT0iOTY3NCIgdXM9Ijk2NzQiLz48YmYgZ2k9IjE5MiIgdWU9IjY0MjU4IiB1cz0iNjQyNTciLz48YmYgZ2k9IjAiIHVlPSI2NTUzNSIgdXM9IjY1NTM1Ii8+PC9iZnJhbmdlcz48Y2lkLXdpZHRocyBzdGFydC1pbmRleD0iMCI+PHd4IHc9IjYwMiIvPjx3eCB3PSIwIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48L2ZvbnQtbWV0cmljcz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby50dGYgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZjBiNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnR0ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby54bWwgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9WZXJhTW9uby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwYTg2NgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL1ZlcmFNb25vLnhtbApAQCAtMCwwICsxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjxmb250LW1ldHJpY3MgbWV0cmljcy12ZXJzaW9uPSIyIiB0eXBlPSJUWVBFMCI+PGZvbnQtbmFtZT5CaXRzdHJlYW1WZXJhU2Fuc01vbm8tUm9tYW48L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZnVsbC1uYW1lPjxmYW1pbHktbmFtZT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseS1uYW1lPjxlbWJlZC8+PGNhcC1oZWlnaHQ+NzI5PC9jYXAtaGVpZ2h0Pjx4LWhlaWdodD41NDY8L3gtaGVpZ2h0Pjxhc2NlbmRlcj43NTk8L2FzY2VuZGVyPjxkZXNjZW5kZXI+LTI0MDwvZGVzY2VuZGVyPjxiYm94PjxsZWZ0Pi00PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZWYwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCkBAIC0wLDAgKzEsMzkgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorICAgIAorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6ZDpzZWN0aW9uIj4KKyAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoYW5jZXN0b3I6OmQ6c2VjdGlvbikrMSIvPgorICAgICAgICA8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDUiPjY8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDQiPjU8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDMiPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDIiPjM8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmQ6c2VjdDEiPjI8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJoeyRsZXZlbCsxfSIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj50aXRsZTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMgPSAwIj4KKyAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFuY2hvciI+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29uZGl0aW9uYWwiIHNlbGVjdD0iMCIvPgorICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPC94c2w6aWY+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRub2RlIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgIDwveHNsOmVsZW1lbnQ+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL2RiLXBkZi54c2wgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kYi1wZGYueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDA2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9kYi1wZGYueHNsCkBAIC0wLDAgKzEsNjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKyAgCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2ZvL2RvY2Jvb2sueHNsIiAvPgorCisgIDwhLS0gY2hlY2sgcHJvamVjdC1wbGFuLnNoIGZvciBob3cgdGhpcyBpcyBnZW5lcmF0ZWQsIG5lZWRlZCB0byB0d2VhayAKKyAgICAgICB0aGUgY292ZXIgcGFnZSAgICAgCisgICAgLS0+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIvdG1wL3RpdGxlcGFnZS54c2wiLz4gCisKKyAgPCEtLSBUbyBmb3JjZSBhIHBhZ2UgYnJlYWsgaW4gZG9jdW1lbnQsIGkuZSBwZXIgc2VjdGlvbiBhZGQgYSAKKyAgICAgIDw/aGFyZC1wYWdlYnJlYWs/PiB0YWcuCisgIC0tPgorIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24oJ2hhcmQtcGFnZWJyZWFrJykiPgorICAgPGZvOmJsb2NrIGJyZWFrLWJlZm9yZT0ncGFnZScgLz4KKyA8L3hzbDp0ZW1wbGF0ZT4KKworICA8IS0tRml4IGZvciBkZWZ1YWx0IGluZGVudCBnZXR0aW5nIFRPQyBhbGwgd2llcmQuLgorICAgICAgU2VlIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vbWwvZG9jYm9vay1hcHBzLzIwMDUtcTEvbXNnMDA0NTUuaHRtbCAKKyAgICAgIEZJWE1FOiBtdXN0IGJlIGEgYmV0dGVyIGZpeAorICAgIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuc3RhcnQuaW5kZW50IiBzZWxlY3Q9IicwJyIvPgorICA8IS0tPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5tYXJnaW4ubGVmdCIgc2VsZWN0PSInMCciLz4tLT4KKworICA8IS0tIHN0b3AgbG9uZy1pc2ggaGVhZGVyIHRpdGxlcyBnZXR0aW5nIHdyYXBwZWQgLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaGVhZGVyLmNvbHVtbi53aWR0aHMiPjEgMTAgMTwveHNsOnBhcmFtPgorCisgIDwhLS0gY3VzdG9taXNlIGhlYWRlcnMgYW5kIGZvb3RlcnMgYSBsaXR0bGUgLS0+IAorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iaGVhZC5zZXAucnVsZSI+CisgICA8eHNsOmlmIHRlc3Q9IiRoZWFkZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLWNvbG9yIj4jY2NjY2NjPC94c2w6YXR0cmlidXRlPgorICAgPC94c2w6aWY+CisgIDwveHNsOnRlbXBsYXRlPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZm9vdC5zZXAucnVsZSI+CisgICAgPHhzbDppZiB0ZXN0PSIkZm9vdGVyLnJ1bGUgIT0gMCI+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atd2lkdGgiPjAuNXB0PC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLXN0eWxlIj5zb2xpZDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC1jb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImhlYWRlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jY2NjY2NjPC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisgIDx4c2w6YXR0cmlidXRlLXNldCBuYW1lPSJmb290ZXIuY29udGVudC5wcm9wZXJ0aWVzIj4KKyAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjb2xvciI+I2NjY2NjYzwveHNsOmF0dHJpYnV0ZT4KKyAgPC94c2w6YXR0cmlidXRlLXNldD4KKworIAorICA8IS0tIGdlbmVyYWwgc2V0dGluZ3MgLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJmb3AxLmV4dGVuc2lvbnMiIHNlbGVjdD0iMSI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0icGFwZXIudHlwZSIgc2VsZWN0PSInQTQnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJib2R5LmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhc2FucyciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InRpdGxlLmZvbnQuZmFtaWx5IiBzZWxlY3Q9Iid2ZXJhc2FucyciPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9Im1vbm9zcGFjZS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYW1vbm8nIj48L3hzbDpwYXJhbT4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzg0M2JjCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsCkBAIC0wLDAgKzEsMjUgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisgIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJkIj4KKyAgCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZGl2aXNpb24udGl0bGUiPgorICAgIDx4c2w6cGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuIi8+CisgICAgCisgICAgPGgxPgorICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPnRpdGxlPC94c2w6YXR0cmlidXRlPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFuY2hvciI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJjb25kaXRpb25hbCIgc2VsZWN0PSIwIi8+CisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkbm9kZSIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L2gxPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL2RyYWZ0LnBuZyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL2RyYWZ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzA1MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvZHJhZnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljYzVjYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCkBAIC0wLDAgKzEsNTggQEAKKzxmb3AgdmVyc2lvbj0iMS4wIj4KKworICA8IS0tIFN0cmljdCB1c2VyIGNvbmZpZ3VyYXRpb24gLS0+CisgIDxzdHJpY3QtY29uZmlndXJhdGlvbj50cnVlPC9zdHJpY3QtY29uZmlndXJhdGlvbj4KKworICA8IS0tIFN0cmljdCBGTyB2YWxpZGF0aW9uIC0tPgorICA8c3RyaWN0LXZhbGlkYXRpb24+dHJ1ZTwvc3RyaWN0LXZhbGlkYXRpb24+CisKKyAgIDwhLS0KKyAgICBTZXQgdGhlIGJhc2VEaXIgc28gY29tbW9uL29wZW5lZGhhbmQuc3ZnIHJlZmVyZW5jZXMgaW4gcGxhbnMgc3RpbGwKKyAgICB3b3JrIG9rLiBOb3RlLCByZWxhdGl2ZSBmaWxlIHJlZmVyZW5jZXMgdG8gY3VycmVudCBkaXIgc2hvdWxkIHN0aWxsIHdvcmsuCisgICAgLS0+CQorICA8YmFzZT4uLi90ZW1wbGF0ZTwvYmFzZT4KKyAgPGZvbnQtYmFzZT4uLi90ZW1wbGF0ZTwvZm9udC1iYXNlPgorIAorICA8IS0tIFNvdXJjZSByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgICBzaXplIG9mIHBpeGVscyBpbiBTVkcgYW5kIGJpdG1hcCBpbWFnZXMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDxzb3VyY2UtcmVzb2x1dGlvbj43Mjwvc291cmNlLXJlc29sdXRpb24+IC0tPgorICA8IS0tIFRhcmdldCByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBzcGVjaWZ5aW5nIHRoZQorICAgICAgIHRhcmdldCByZXNvbHV0aW9uIGZvciBnZW5lcmF0ZWQgYml0bWFwcywgZGVmYXVsdDogNzJkcGkgLS0+CisgIDwhLS0gPHRhcmdldC1yZXNvbHV0aW9uPjcyPC90YXJnZXQtcmVzb2x1dGlvbj4gLS0+CisgCisgIDwhLS0gZGVmYXVsdCBwYWdlLWhlaWdodCBhbmQgcGFnZS13aWR0aCwgaW4gY2FzZQorICAgICAgIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBhdXRvIC0tPgorICA8ZGVmYXVsdC1wYWdlLXNldHRpbmdzIGhlaWdodD0iMTFpbiIgd2lkdGg9IjguMjZpbiIvPiAKKyAKKyAgPCEtLSA8dXNlLWNhY2hlPmZhbHNlPC91c2UtY2FjaGU+IC0tPgorIAorICA8cmVuZGVyZXJzPgorICAgIDxyZW5kZXJlciBtaW1lPSJhcHBsaWNhdGlvbi9wZGYiPgorICAgICAgPGZvbnRzPgorICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9uby54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9uby50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgIDwvZm9udD4KKworICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9CZC54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9CZC50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYS54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhLnR0ZiI+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJpdGFsaWMiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisgICAgICAgIAorICAgICAgICA8YXV0by1kZXRlY3QvPgorICAgICAgPC9mb250cz4KKyAgICA8L3JlbmRlcmVyPgorICA8L3JlbmRlcmVycz4KKzwvZm9wPgorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjM5MDBkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApAQCAtMCwwICsxLDIxIEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iLiIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkb2JqZWN0IiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDwveHNsOnBhcmFtPgorICAgIDxwIGNsYXNzPSJ0aXRsZSI+CisgICAgICA8Yj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdGl0bGUiLz48L2I+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG9iamVjdCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3A+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbApAQCAtMCwwICsxLDE0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIg0KKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQorICB4bWxuczpkPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayINCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCisNCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Imdsb3NzZW50cnkvZ2xvc3N0ZXJtIj4NCisgICAgPHhzbDphcHBseS1pbXBvcnRzLz4NCisgICAgPHhzbDppZiB0ZXN0PSIkZ2VuZXJhdGUucGVybWFsaW5rICE9IDAiPg0KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPg0KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLi4iLz4NCisgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KKyAgICA8L3hzbDppZj4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmExYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvcGVybWFsaW5rcy54c2wKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5wZXJtYWxpbmsiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InBlcm1hbGluay50ZXh0Ij7CtjwveHNsOnBhcmFtPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiLz4KKworICAgIDx4c2w6aWYgdGVzdD0iJGdlbmVyYXRlLnBlcm1hbGluayAhPSAnMCciPgorICAgICAgPHNwYW4gY2xhc3M9InBlcm1hbGluayI+CisgICAgICAgIDxhIGFsdD0iUGVybWFsaW5rIiB0aXRsZT0iUGVybWFsaW5rIj4KKyAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4KKyAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJocmVmLnRhcmdldCI+CisgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJvYmplY3QiICBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICAgIDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgICAgICA8eHNsOmNvcHktb2Ygc2VsZWN0PSIkcGVybWFsaW5rLnRleHQiLz4KKyAgICAgICAgPC9hPgorICAgICAgPC9zcGFuPgorICAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNmZmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDU1IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InNlY3Rpb24iCisgICAgICBzZWxlY3Q9IihhbmNlc3Rvcjo6c2VjdGlvbiB8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2ltcGxlc2VjdHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MXwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MnwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0M3wKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NSlbbGFzdCgpXSIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZW5kZXJhcyI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MSciPjE8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QyJyI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDMnIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NCciPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3Q1JyI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInJyIvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkcmVuZGVyYXMgIT0gJyciPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmVuZGVyYXMiLz4KKyAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24ubGV2ZWwiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJHNlY3Rpb24iLz4KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi5oZWFkaW5nIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWN0aW9uIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibGV2ZWwiIHNlbGVjdD0iJGxldmVsIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRzZWN0aW9uIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkbGV2ZWwgJmd0OyAwIj4KKyAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sIGIvYml0YmFrZS9kb2MvdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlYzExYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvZG9jL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCkBAIC0wLDAgKzEsMTI1OSBAQAorPCFET0NUWVBFIHQ6dGVtcGxhdGVzIFsKKzwhRU5USVRZIGhzaXplMCAiMTBwdCI+Cis8IUVOVElUWSBoc2l6ZTEgIjEycHQiPgorPCFFTlRJVFkgaHNpemUyICIxNC40cHQiPgorPCFFTlRJVFkgaHNpemUzICIxNy4yOHB0Ij4KKzwhRU5USVRZIGhzaXplNCAiMjAuNzM2cHQiPgorPCFFTlRJVFkgaHNpemU1ICIyNC44ODMycHQiPgorPCFFTlRJVFkgaHNpemUwc3BhY2UgIjcuNXB0Ij4gPCEtLSAwLjc1ICogaHNpemUwIC0tPgorPCFFTlRJVFkgaHNpemUxc3BhY2UgIjlwdCI+IDwhLS0gMC43NSAqIGhzaXplMSAtLT4KKzwhRU5USVRZIGhzaXplMnNwYWNlICIxMC44cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTIgLS0+Cis8IUVOVElUWSBoc2l6ZTNzcGFjZSAiMTIuOTZwdCI+IDwhLS0gMC43NSAqIGhzaXplMyAtLT4KKzwhRU5USVRZIGhzaXplNHNwYWNlICIxNS41NTJwdCI+IDwhLS0gMC43NSAqIGhzaXplNCAtLT4KKzwhRU5USVRZIGhzaXplNXNwYWNlICIxOC42NjI0cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTUgLS0+CitdPgorPHQ6dGVtcGxhdGVzIHhtbG5zOnQ9Imh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2sveHNsL3RlbXBsYXRlLzEuMCIKKwkgICAgIHhtbG5zOnBhcmFtPSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAvcGFyYW0iCisgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgJElkOiB0aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCx2IDEuMjMgMjAwMy8xMi8xNiAwMDozMDo0OSBib2JzdGF5dG9uIEV4cCAkCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERvY0Jvb2sgWFNMIFN0eWxlc2hlZXQgZGlzdHJpYnV0aW9uLgorICAgICBTZWUgLi4vUkVBRE1FIG9yIGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8gZm9yIGNvcHlyaWdodAorICAgICBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFydGljbGUiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iCisgICAgICAgICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIj4KKworICAgIDxtZWRpYW9iamVjdC8+CisKKyAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICA8c3VidGl0bGUgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXJ0aWNsZVsxXSIKKwkgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8Y29ycGF1dGhvciBzcGFjZS1iZWZvcmU9IjAuNWVtIgorICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiLz4KKyAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorICAgIDxhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisgICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC44ZW0iLz4KKworICAgIDxlbWFpbCBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICA8b3RoZXJjcmVkaXQgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxyZWxlYXNlaW5mbyBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGNvcHlyaWdodCBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPGxlZ2Fsbm90aWNlIHRleHQtYWxpZ249InN0YXJ0IgorICAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdD0iMC41aW4iCisgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodD0iMC41aW4iCisgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JGJvZHkuZm9udHNldH0iLz4KKyAgICA8cHViZGF0ZSBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisJPHBhcmE+PC9wYXJhPgorICAgIDxyZXZpc2lvbiBzcGFjZS1iZWZvcmU9IjAuNWVtIi8+CisgICAgPHJldmhpc3Rvcnkgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxhYnN0cmFjdCBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgIHRleHQtYWxpZ249InN0YXJ0IgorCSAgICAgIG1hcmdpbi1sZWZ0PSIwLjVpbiIKKyAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0PSIwLjVpbiIKKyAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskYm9keS5mb250c2V0fSIvPgorCisgICAgPHBhcmE+PC9wYXJhPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNldCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnNldFsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIi8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJib29rIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKworICAgICAgPG1lZGlhb2JqZWN0Lz4KKworPCEtLQorCisjIElmIHlvdSBsZWF2ZSB0aGlzIGJsb2NrIG9mIGNvZGUgaW4gdGhlbiB0aGUgdGV4dCB0aXRsZSBpbiB0aGUKKyMgPHRpdGxlPkJpdEJha2UgVXNlciBNYW51YWw8L3RpdGxlPiBzdGF0ZW1lbnQgb2YgdGhlCisjIGJpdGJha2UtdXNlci1tYW51YWwueG1sIGZpbGUgaXMgcmVuZGVyZWQgb24gdGhlIHRpdGxlIHBhZ2UgYmVsb3cgdGhlCisjIGltYWdlLiAgQ29tbWVudGluZyBpdCBvdXQgZ2V0cyBpdCBvdXQgb2YgdGhlcmUgeWV0IGFsbG93cyBpdAorIyB0byBiZSByZXRhaW5lZCBpbiB0aGUgdGFiIHRleHQgZm9yIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlCisjIG1hbnVhbC4KKworICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJvb2tbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorLS0+CisgICAgICA8c3VidGl0bGUKKwkJdGV4dC1hbGlnbj0iY2VudGVyIgorCQlmb250LXNpemU9IiZoc2l6ZTQ7IgorCQlzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCQkgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiCisJCSAgc3BhY2UtYmVmb3JlPSIyaW4iLz4KKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvciBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplMnNwYWNlOyIKKwkgICAgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIi8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorPCEtLQorIyBJZiB5b3UgbGVhdmUgdGhpcyBibG9jayBvZiBjb2RlIGluIHRoZW4gdGhlIHRleHQgdGl0bGUgaW4gdGhlCisjIDx0aXRsZT5CaXRCYWtlIFVzZXIgTWFudWFsPC90aXRsZT4gc3RhdGVtZW50IG9mIHRoZQorIyBiaXRiYWtlLXVzZXItbWFudWFsLnhtbCBmaWxlIGlzIHJlbmRlcmVkIG9uIHRoZSB0aXRsZSBwYWdlIGJlbG93IHRoZQorIyBpbWFnZS4gIENvbW1lbnRpbmcgaXQgb3V0IGdldHMgaXQgb3V0IG9mIHRoZXJlIHlldCBhbGxvd3MgaXQKKyMgdG8gYmUgcmV0YWluZWQgaW4gdGhlIHRhYiB0ZXh0IGZvciB0aGUgSFRNTCB2ZXJzaW9uIG9mIHRoZQorIyBtYW51YWwuCisKKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iYm9vay52ZXJzby50aXRsZSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CistLT4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cCB0Om5hbWVkLXRlbXBsYXRlPSJ2ZXJzby5hdXRob3Jncm91cCIvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHB1YmRhdGUgc3BhY2UtYmVmb3JlPSIxZW0iLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICAgIDxsZWdhbG5vdGljZSBmb250LXNpemU9IjhwdCIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICAgIDxmbzpibG9jayBicmVhay1hZnRlcj0icGFnZSIvPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgICAgPGZvOmJsb2NrIGJyZWFrLWFmdGVyPSJwYWdlIi8+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icGFydCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnBhcnRbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNHNwYWNlOyIKKwkgICAgICBmb250LXdlaWdodD0nYm9sZCcKKwkgICAgICBmb250LXN0eWxlPSdpdGFsaWMnCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwYXJ0aW50cm8iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICBzcGFjZS1iZWZvcmU9IjFlbSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgICBmb250LXNpemU9IiZoc2l6ZTI7IgorCSAgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgIGZvbnQtc3R5bGU9Iml0YWxpYyIKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZmVyZW5jZSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJkaXZpc2lvbi50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnJlZmVyZW5jZVsxXSIKKwkgICAgIHRleHQtYWxpZ249ImNlbnRlciIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTVzcGFjZTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIi8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc3lub3BzaXNkaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3Rpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QxIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZGVkaWNhdGlvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpkZWRpY2F0aW9uWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJwcmVmYWNlIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OnByZWZhY2VbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAvPgorICAgICAgPGF1dGhvci8+CisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJjaGFwdGVyIiB0OndyYXBwZXI9ImZvOmJsb2NrIgorICAgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Y2hhcHRlclsxXSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgICA8c3VidGl0bGUgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkJZm9udC1zdHlsZT0iaXRhbGljIgorCQlmb250LXNpemU9IiZoc2l6ZTI7IgorCQlmb250LXdlaWdodD0iYm9sZCIvPgorCisgICAgICA8Y29ycGF1dGhvciAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxhdXRob3Jncm91cCBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPGF1dGhvciAgICAgIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8b3RoZXJjcmVkaXQvPgorICAgICAgPHJlbGVhc2VpbmZvLz4KKyAgICAgIDxjb3B5cmlnaHQvPgorICAgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICAgIDxwdWJkYXRlLz4KKyAgICAgIDxyZXZpc2lvbi8+CisgICAgICA8cmV2aGlzdG9yeS8+CisgICAgICA8YWJzdHJhY3QvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJhcHBlbmRpeCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFwcGVuZGl4WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Rpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QxIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3Q0IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0NSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2ltcGxlc2VjdCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJiaWJsaW9ncmFwaHkiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZ3JhcGh5WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJiaWJsaW9kaXYiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2RpdlsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iZ2xvc3NhcnkiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NhcnlbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imdsb3NzZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpnbG9zc2RpdlsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNDsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iaW5kZXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6aW5kZXhbMV0iCisgICAgICAgICAgICAgcGFyYW06cGFnZXdpZGU9IjEiCisJICAgICBtYXJnaW4tbGVmdD0iMHB0IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8IS0tIFRoZSBpbmRleGRpdi50aXRsZSB0ZW1wbGF0ZSBpcyB1c2VkIHNvIHRoYXQgbWFudWFsIGFuZCAtLT4KKyAgPCEtLSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbmRleGRpdiB0aXRsZXMgZ2V0IHRoZSBzYW1lIC0tPgorICA8IS0tIGZvcm1hdHRpbmcuIC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImluZGV4ZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iaW5kZXhkaXYudGl0bGUiCisJICAgICBwYXJhbTp0aXRsZT0idGl0bGUiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZXRpbmRleCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpzZXRpbmRleFsxXSIKKyAgICAgICAgICAgICBwYXJhbTpwYWdld2lkZT0iMSIKKwkgICAgIG1hcmdpbi1sZWZ0PSIwcHQiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImNvbG9waG9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmNvbG9waG9uWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJ0YWJsZS5vZi5jb250ZW50cyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInVGFibGVvZkNvbnRlbnRzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi50YWJsZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlRhYmxlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZmlndXJlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mRmlndXJlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZXhhbXBsZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkV4YW1wbGVzJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ibGlzdC5vZi5lcXVhdGlvbnMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkVxdWF0aW9ucyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YucHJvY2VkdXJlcyIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJnZW50ZXh0IgorCSAgICAgcGFyYW06a2V5PSInTGlzdG9mUHJvY2VkdXJlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YudW5rbm93bnMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlVua25vd24nIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPC90OnRlbXBsYXRlcz4KZGlmZiAtLWdpdCBhL2JpdGJha2UvZG9jL3Rvb2xzL2RvY2Jvb2stdG8tcGRmIGIvYml0YmFrZS9kb2MvdG9vbHMvZG9jYm9vay10by1wZGYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTU4ZGVkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2RvYy90b29scy9kb2Nib29rLXRvLXBkZgpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKwkKK2lmIFsgLXogIiQxIiAtbyAteiAiJDIiIF07IHRoZW4KKyAgIGVjaG8gInVzYWdlOiBbLXZdICQwIDxkb2Nib29rIGZpbGU+IDx0ZW1wbGF0ZWRpcj4iCisgICBlY2hvCisgICBlY2hvICIqTk9URSogeW91IG5lZWQgeHNsdHByb2MsIGZvcCBhbmQgbndhbHNoIGRvY2Jvb2sgc3R5bGVzaGVldHMiIAorICAgZWNobyAiICAgICAgIGluc3RhbGxlZCBmb3IgdGhpcyB0byB3b3JrISIKKyAgIGVjaG8KKyAgIGV4aXQgMAorZmkKKworRk89YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5mby9gIHx8IGV4aXQgMQorUERGPWBlY2hvICQxIHwgc2VkIHMvLnhtbC8ucGRmL2AgfHwgZXhpdCAxCitURU1QTEFURURJUj0kMgorCisjIworIyBUaGVzZSBVUkkgc2hvdWxkIGJlIHJld3JpdHRlbiBieSB5b3VyIGRpc3RyaWJ1dGlvbidzIHhtbCBjYXRhbG9nIHRvCisjIG1hdGNoIHlvdXIgbG9jYWx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkk9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50IgorCisjIENyZWF0ZXMgYSB0ZW1wb3JhcnkgWFNMIHN0eWxlc2hlZXQgYmFzZWQgb24gdGl0bGVwYWdlLnhzbAoreHNsdHByb2MgLW8gL3RtcC90aXRsZXBhZ2UueHNsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRYU0xfQkFTRV9VUkkvdGVtcGxhdGUvdGl0bGVwYWdlLnhzbCBcCisgICAgICAgICAkVEVNUExBVEVESVIvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgfHwgZXhpdCAxCisKKyMgQ3JlYXRlcyB0aGUgZmlsZSBuZWVkZWQgZm9yIEZPUAoreHNsdHByb2MgLS14aW5jbHVkZSAgICAgICAgICAgICAgICAgICAgXAorCSAtLXN0cmluZ3BhcmFtIGh5cGhlbmF0ZSBmYWxzZSBcCisJIC0tc3RyaW5ncGFyYW0gZm9ybWFsLnRpdGxlLnBsYWNlbWVudCAiZmlndXJlIGFmdGVyIiBcCisJIC0tc3RyaW5ncGFyYW0gdWxpbmsuc2hvdyAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGJvZHkuZm9udC5tYXN0ZXIgIDkgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgdGl0bGUuZm9udC5tYXN0ZXIgIDExIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gZHJhZnQud2F0ZXJtYXJrLmltYWdlICIkVEVNUExBVEVESVIvZHJhZnQucG5nIiBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBjaGFwdGVyLmF1dG9sYWJlbCAxIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGFwcGVuZGl4LmF1dG9sYWJlbCBBIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwgMSBcCisgICAgICAgICAtLW91dHB1dCAkRk8gICAgICAgICAgICAgICBcCisgICAgICAgICAkVEVNUExBVEVESVIvZGItcGRmLnhzbCAgICBcCisJICQxICAgICAgICAgICAgICAgICB8fCBleGl0IDEKKworIyBJbnZva2VzIHRoZSBKYXZhIHZlcnNpb24gb2YgRk9QLiAgVXNlcyB0aGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUgY29tbW9uL2ZvcC1jb25maWcueG1sCitmb3AgLWMgJFRFTVBMQVRFRElSL2ZvcC1jb25maWcueG1sIC1mbyAkRk8gLXBkZiAkUERGICAgICAgIHx8IGV4aXQgMQorCitybSAtZiAkRk8KK3JtIC1mICAvdG1wL3RpdGxlcGFnZS54c2wKKworZWNobworZWNobyAiICMjIyMgU3VjY2VzcyEgJFBERiByZWFkeS4gIyMjIyIKK2VjaG8KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL0NPVy5weSBiL2JpdGJha2UvbGliL2JiL0NPVy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE3ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvQ09XLnB5CkBAIC0wLDAgKzEsMzIzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIGlzIGEgY29weSBvbiB3cml0ZSBkaWN0aW9uYXJ5IGFuZCBzZXQgd2hpY2ggYWJ1c2VzIGNsYXNzZXMgdG8gdHJ5IGFuZCBiZSBuaWNlIGFuZCBmYXN0LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgVGltIEFtc2VsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyNQbGVhc2UgTm90ZToKKyMgQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIG11dGFibGUgdHlwZXMgKGllIERpY3QgYW5kIExpc3RzKSAtIG9wZXJhdGlvbnMgaW52b2x2aW5nIHRoZXNlIGFyZSBTTE9XLgorIyBBc3NpZ24gYSBmaWxlIHRvIF9fd2Fybl9fIHRvIGdldCB3YXJuaW5ncyBhYm91dCBzbG93IG9wZXJhdGlvbnMuCisjCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBjb3B5CitpbXBvcnQgdHlwZXMKK0ltbXV0YWJsZVR5cGVzID0gKAorICAgIHR5cGVzLk5vbmVUeXBlLAorICAgIGJvb2wsCisgICAgY29tcGxleCwKKyAgICBmbG9hdCwKKyAgICBpbnQsCisgICAgbG9uZywKKyAgICB0dXBsZSwKKyAgICBmcm96ZW5zZXQsCisgICAgYmFzZXN0cmluZworKQorCitNVVRBQkxFID0gIl9fbXV0YWJsZV9fIgorCitjbGFzcyBDT1dNZXRhKHR5cGUpOgorICAgIHBhc3MKKworY2xhc3MgQ09XRGljdE1ldGEoQ09XTWV0YSk6CisgICAgX193YXJuX18gPSBGYWxzZQorICAgIF9faGFzbXV0YWJsZV9fID0gRmFsc2UKKyAgICBfX21hcmtlcl9fID0gdHVwbGUoKQorCisgICAgZGVmIF9fc3RyX18oY2xzKToKKyAgICAgICAgIyBGSVhNRTogSSBoYXZlIG1hZ2ljIG51bWJlcnMhCisgICAgICAgIHJldHVybiAiPENPV0RpY3QgTGV2ZWw6ICVpIEN1cnJlbnQgS2V5czogJWk+IiAlIChjbHMuX19jb3VudF9fLCBsZW4oY2xzLl9fZGljdF9fKSAtIDMpCisgICAgX19yZXByX18gPSBfX3N0cl9fCisKKyAgICBkZWYgY293KGNscyk6CisgICAgICAgIGNsYXNzIEMoY2xzKToKKyAgICAgICAgICAgIF9fY291bnRfXyA9IGNscy5fX2NvdW50X18gKyAxCisgICAgICAgIHJldHVybiBDCisgICAgY29weSA9IGNvdworICAgIF9fY2FsbF9fID0gY293CisKKyAgICBkZWYgX19zZXRpdGVtX18oY2xzLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIEltbXV0YWJsZVR5cGVzKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKKyAgICAgICAgICAgICAgICBjbHMuX19oYXNtdXRhYmxlX18gPSBUcnVlCisgICAgICAgICAgICBrZXkgKz0gTVVUQUJMRQorICAgICAgICBzZXRhdHRyKGNscywga2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2dldG11dGFibGVfXyhjbHMsIGtleSwgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBua2V5ID0ga2V5ICsgTVVUQUJMRQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gY2xzLl9fZGljdF9fW25rZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB2YWx1ZSA9IGdldGF0dHIoY2xzLCBua2V5KQorICAgICAgICBpZiByZWFkb25seToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGlmIG5vdCBjbHMuX193YXJuX18gaXMgRmFsc2UgYW5kIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDT1dNZXRhKToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBEb2luZyBhIGNvcHkgYmVjYXVzZSAlcyBpcyBhIG11dGFibGUgdHlwZS4iICUga2V5LCBmaWxlPWNscy5fX3dhcm5fXykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb3B5KCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weSh2YWx1ZSkKKyAgICAgICAgc2V0YXR0cihjbHMsIG5rZXksIHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIF9fZ2V0bWFya2VyX18gPSBbXQorICAgIGRlZiBfX2dldHJlYWRvbmx5X18oY2xzLCBrZXksIGRlZmF1bHQ9X19nZXRtYXJrZXJfXyk6CisgICAgICAgICIiIlwKKyAgICAgICAgR2V0IGEgdmFsdWUgKGV2ZW4gaWYgbXV0YWJsZSkgd2hpY2ggeW91IHByb21pc2Ugbm90IHRvIGNoYW5nZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMuX19nZXRpdGVtX18oa2V5LCBkZWZhdWx0LCBUcnVlKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywga2V5LCBkZWZhdWx0PV9fZ2V0bWFya2VyX18sIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihjbHMsIGtleSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNscy5fX2dldG11dGFibGVfXyhrZXksIHJlYWRvbmx5KQorCisgICAgICAgICAgICAjIFRoaXMgaXMgZm9yIHZhbHVlcyB3aGljaCBoYXZlIGJlZW4gZGVsZXRlZAorICAgICAgICAgICAgaWYgdmFsdWUgaXMgY2xzLl9fbWFya2VyX186CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImtleSAlcyBkb2VzIG5vdCBleGlzdC4iICUga2V5KQorCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBub3QgZGVmYXVsdCBpcyBjbHMuX19nZXRtYXJrZXJfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihzdHIoZSkpCisKKyAgICBkZWYgX19kZWxpdGVtX18oY2xzLCBrZXkpOgorICAgICAgICBjbHMuX19zZXRpdGVtX18oa2V5LCBjbHMuX19tYXJrZXJfXykKKworICAgIGRlZiBfX3JldmVydGl0ZW1fXyhjbHMsIGtleSk6CisgICAgICAgIGlmIG5vdCBjbHMuX19kaWN0X18uaGFzX2tleShrZXkpOgorICAgICAgICAgICAga2V5ICs9IE1VVEFCTEUKKyAgICAgICAgZGVsYXR0cihjbHMsIGtleSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBrZXkpOgorICAgICAgICByZXR1cm4gY2xzLmhhc19rZXkoa2V5KQorCisgICAgZGVmIGhhc19rZXkoY2xzLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IGNscy5fX2dldHJlYWRvbmx5X18oa2V5LCBjbHMuX19tYXJrZXJfXykKKyAgICAgICAgaWYgdmFsdWUgaXMgY2xzLl9fbWFya2VyX186CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpdGVyKGNscywgdHlwZSwgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBmb3Iga2V5IGluIGRpcihjbHMpOgorICAgICAgICAgICAgaWYga2V5LnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKE1VVEFCTEUpOgorICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihNVVRBQkxFKV0KKworICAgICAgICAgICAgaWYgdHlwZSA9PSAia2V5cyI6CisgICAgICAgICAgICAgICAgeWllbGQga2V5CisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiByZWFkb25seToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjbHMuX19nZXRyZWFkb25seV9fKGtleSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNsc1trZXldCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdHlwZSA9PSAidmFsdWVzIjoKKyAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZQorICAgICAgICAgICAgaWYgdHlwZSA9PSAiaXRlbXMiOgorICAgICAgICAgICAgICAgIHlpZWxkIChrZXksIHZhbHVlKQorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKKworICAgIGRlZiBpdGVya2V5cyhjbHMpOgorICAgICAgICByZXR1cm4gY2xzLml0ZXIoImtleXMiKQorICAgIGRlZiBpdGVydmFsdWVzKGNscywgcmVhZG9ubHk9RmFsc2UpOgorICAgICAgICBpZiBub3QgY2xzLl9fd2Fybl9fIGlzIEZhbHNlIGFuZCBjbHMuX19oYXNtdXRhYmxlX18gYW5kIHJlYWRvbmx5IGlzIEZhbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IElmIHlvdSBhcm4ndCBnb2luZyB0byBjaGFuZ2UgYW55IG9mIHRoZSB2YWx1ZXMgY2FsbCB3aXRoIFRydWUuIiwgZmlsZT1jbHMuX193YXJuX18pCisgICAgICAgIHJldHVybiBjbHMuaXRlcigidmFsdWVzIiwgcmVhZG9ubHkpCisgICAgZGVmIGl0ZXJpdGVtcyhjbHMsIHJlYWRvbmx5PUZhbHNlKToKKyAgICAgICAgaWYgbm90IGNscy5fX3dhcm5fXyBpcyBGYWxzZSBhbmQgY2xzLl9faGFzbXV0YWJsZV9fIGFuZCByZWFkb25seSBpcyBGYWxzZToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBJZiB5b3UgYXJuJ3QgZ29pbmcgdG8gY2hhbmdlIGFueSBvZiB0aGUgdmFsdWVzIGNhbGwgd2l0aCBUcnVlLiIsIGZpbGU9Y2xzLl9fd2Fybl9fKQorICAgICAgICByZXR1cm4gY2xzLml0ZXIoIml0ZW1zIiwgcmVhZG9ubHkpCisKK2NsYXNzIENPV1NldE1ldGEoQ09XRGljdE1ldGEpOgorICAgIGRlZiBfX3N0cl9fKGNscyk6CisgICAgICAgICMgRklYTUU6IEkgaGF2ZSBtYWdpYyBudW1iZXJzIQorICAgICAgICByZXR1cm4gIjxDT1dTZXQgTGV2ZWw6ICVpIEN1cnJlbnQgS2V5czogJWk+IiAlIChjbHMuX19jb3VudF9fLCBsZW4oY2xzLl9fZGljdF9fKSAtMykKKyAgICBfX3JlcHJfXyA9IF9fc3RyX18KKworICAgIGRlZiBjb3coY2xzKToKKyAgICAgICAgY2xhc3MgQyhjbHMpOgorICAgICAgICAgICAgX19jb3VudF9fID0gY2xzLl9fY291bnRfXyArIDEKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiBhZGQoY2xzLCB2YWx1ZSk6CisgICAgICAgIENPV0RpY3RNZXRhLl9fc2V0aXRlbV9fKGNscywgcmVwcihoYXNoKHZhbHVlKSksIHZhbHVlKQorCisgICAgZGVmIHJlbW92ZShjbHMsIHZhbHVlKToKKyAgICAgICAgQ09XRGljdE1ldGEuX19kZWxpdGVtX18oY2xzLCByZXByKGhhc2godmFsdWUpKSkKKworICAgIGRlZiBfX2luX18oY2xzLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBDT1dEaWN0TWV0YS5oYXNfa2V5KHJlcHIoaGFzaCh2YWx1ZSkpKQorCisgICAgZGVmIGl0ZXJrZXlzKGNscyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2V0cyBkb24ndCBoYXZlIGtleXMiKQorCisgICAgZGVmIGl0ZXJpdGVtcyhjbHMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldHMgZG9uJ3QgaGF2ZSAnaXRlbXMnIikKKworIyBUaGVzZSBhcmUgdGhlIGFjdHVhbCBjbGFzc2VzIHlvdSB1c2UhCitjbGFzcyBDT1dEaWN0QmFzZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBDT1dEaWN0TWV0YQorICAgIF9fY291bnRfXyA9IDAKKworY2xhc3MgQ09XU2V0QmFzZShvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBDT1dTZXRNZXRhCisgICAgX19jb3VudF9fID0gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGltcG9ydCBzeXMKKyAgICBDT1dEaWN0QmFzZS5fX3dhcm5fXyA9IHN5cy5zdGRlcnIKKyAgICBhID0gQ09XRGljdEJhc2UoKQorICAgIHByaW50KCJhIiwgYSkKKworICAgIGFbJ2EnXSA9ICdhJworICAgIGFbJ2InXSA9ICdiJworICAgIGFbJ2RpY3QnXSA9IHt9CisKKyAgICBiID0gYS5jb3B5KCkKKyAgICBwcmludCgiYiIsIGIpCisgICAgYlsnYyddID0gJ2InCisKKyAgICBwcmludCgpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGJbJ2RpY3QnXVsnYSddID0gJ2InCisgICAgYlsnYSddID0gJ2MnCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIHRyeToKKyAgICAgICAgYlsnZGljdDInXQorICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICBwcmludCgiT2theSEiKQorCisgICAgYVsnc2V0J10gPSBDT1dTZXRCYXNlKCkKKyAgICBhWydzZXQnXS5hZGQoIm8xIikKKyAgICBhWydzZXQnXS5hZGQoIm8xIikKKyAgICBhWydzZXQnXS5hZGQoIm8yIikKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoIi0tIikKKyAgICBwcmludCgiYiIsIGIpCisgICAgZm9yIHggaW4gYlsnc2V0J10uaXRlcnZhbHVlcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGJbJ3NldCddLmFkZCgnbzMnKQorCisgICAgcHJpbnQoImEiLCBhKQorICAgIGZvciB4IGluIGFbJ3NldCddLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiWydzZXQnXS5pdGVydmFsdWVzKCk6CisgICAgICAgIHByaW50KHgpCisgICAgcHJpbnQoKQorCisgICAgYVsnc2V0MiddID0gc2V0KCkKKyAgICBhWydzZXQyJ10uYWRkKCJvMSIpCisgICAgYVsnc2V0MiddLmFkZCgibzEiKQorICAgIGFbJ3NldDInXS5hZGQoIm8yIikKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGRlbCBiWydiJ10KKyAgICB0cnk6CisgICAgICAgIHByaW50KGJbJ2InXSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByaW50KCJZYXkhIGRlbGV0ZWQga2V5IHJhaXNlcyBlcnJvciIpCisKKyAgICBpZiBiLmhhc19rZXkoJ2InKToKKyAgICAgICAgcHJpbnQoIkJvbyEiKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJZYXkgLSBoYXNfa2V5IHdpdGggZGVsZXRlIHdvcmtzISIpCisKKyAgICBwcmludCgiYSIsIGEpCisgICAgZm9yIHggaW4gYS5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgiLS0iKQorICAgIHByaW50KCJiIiwgYikKKyAgICBmb3IgeCBpbiBiLml0ZXJpdGVtcyhyZWFkb25seT1UcnVlKToKKyAgICAgICAgcHJpbnQoeCkKKyAgICBwcmludCgpCisKKyAgICBiLl9fcmV2ZXJ0aXRlbV9fKCdiJykKKworICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKKworICAgIGIuX19yZXZlcnRpdGVtX18oJ2RpY3QnKQorICAgIHByaW50KCJhIiwgYSkKKyAgICBmb3IgeCBpbiBhLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCItLSIpCisgICAgcHJpbnQoImIiLCBiKQorICAgIGZvciB4IGluIGIuaXRlcml0ZW1zKHJlYWRvbmx5PVRydWUpOgorICAgICAgICBwcmludCh4KQorICAgIHByaW50KCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYmIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3OTQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTQyIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIEJ1aWxkIFN5c3RlbSBQeXRob24gTGlicmFyeQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMgIEhvbGdlciBTY2h1cmlnCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIEJhc2VkIG9uIEdlbnRvbydzIHBvcnRhZ2UucHkuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitfX3ZlcnNpb25fXyA9ICIxLjI3LjEiCisKK2ltcG9ydCBzeXMKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNywgMyk6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb3JyeSwgcHl0aG9uIDIuNy4zIG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIHZlcnNpb24gb2YgYml0YmFrZSIpCisKKworY2xhc3MgQkJIYW5kbGVkRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgVGhlIGJpZyBkaWxlbW1hIGZvciBnZW5lcmljIGJpdGJha2UgY29kZSBpcyB3aGF0IGluZm9ybWF0aW9uIHRvIGdpdmUgdGhlIHVzZXIKKyAgICB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuIEFueSBleGNlcHRpb24gaW5oZXJpdGluZyB0aGlzIGJhc2UgZXhjZXB0aW9uIGNsYXNzCisgICAgaGFzIGFscmVhZHkgcHJvdmlkZWQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdmlhIHNvbWUgJ2ZpcmVkJyBtZXNzYWdlIHR5cGUgc3VjaCBhcworICAgIGFuIGV4cGxpY2l0bHkgZmlyZWQgZXZlbnQgdXNpbmcgYmIuZmlyZSwgb3IgYSBiYi5lcnJvciBtZXNzYWdlLiBJZiBiaXRiYWtlIAorICAgIGVuY291bnRlcnMgYW4gZXhjZXB0aW9uIGRlcml2ZWQgZnJvbSB0aGlzIGNsYXNzLCBubyBiYWNrdHJhY2Ugb3Igb3RoZXIgaW5mb3JtYXRpb24gCisgICAgd2lsbCBiZSBnaXZlbiB0byB0aGUgdXNlciwgaXRzIGFzc3VtZWQgdGhlIGVhcmxpZXIgZXZlbnQgcHJvdmlkZWQgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLgorICAgICIiIgorICAgIHBhc3MKKworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCisKK2NsYXNzIE51bGxIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcGFzcworCitMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkKK2NsYXNzIEJCTG9nZ2VyKExvZ2dlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lLnNwbGl0KCIuIilbMF0gPT0gIkJpdEJha2UiOgorICAgICAgICAgICAgc2VsZi5kZWJ1ZyA9IHNlbGYuYmJkZWJ1ZworICAgICAgICBMb2dnZXIuX19pbml0X18oc2VsZiwgbmFtZSkKKworICAgIGRlZiBiYmRlYnVnKHNlbGYsIGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLkRFQlVHIC0gbGV2ZWwgKyAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBwbGFpbihzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmxvZyhsb2dnaW5nLklORk8gKyAxLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJib3NlKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nKGxvZ2dpbmcuSU5GTyAtIDEsIG1zZywgKmFyZ3MsICoqa3dhcmdzKQorCitsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyA9IEZhbHNlCitsb2dnaW5nLnNldExvZ2dlckNsYXNzKEJCTG9nZ2VyKQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCitsb2dnZXIuYWRkSGFuZGxlcihOdWxsSGFuZGxlcigpKQorbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcgLSAyKQorCisjIFRoaXMgaGFzIHRvIGJlIGltcG9ydGVkIGFmdGVyIHRoZSBzZXRMb2dnZXJDbGFzcywgYXMgdGhlIGltcG9ydCBvZiBiYi5tc2cKKyMgY2FuIHJlc3VsdCBpbiBjb25zdHJ1Y3Rpb24gb2YgdGhlIHZhcmlvdXMgbG9nZ2Vycy4KK2ltcG9ydCBiYi5tc2cKKworZnJvbSBiYiBpbXBvcnQgZmV0Y2gyIGFzIGZldGNoCitzeXMubW9kdWxlc1snYmIuZmV0Y2gnXSA9IHN5cy5tb2R1bGVzWydiYi5mZXRjaDInXQorCisjIE1lc3NhZ2luZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMKK2RlZiBwbGFpbigqYXJncyk6CisgICAgbG9nZ2VyLnBsYWluKCcnLmpvaW4oYXJncykpCisKK2RlZiBkZWJ1ZyhsdmwsICphcmdzKToKKyAgICBpZiBpc2luc3RhbmNlKGx2bCwgYmFzZXN0cmluZyk6CisgICAgICAgIGxvZ2dlci53YXJuKCJQYXNzZWQgaW52YWxpZCBkZWJ1ZyBsZXZlbCAnJXMnIHRvIGJiLmRlYnVnIiwgbHZsKQorICAgICAgICBhcmdzID0gKGx2bCwpICsgYXJncworICAgICAgICBsdmwgPSAxCisgICAgbG9nZ2VyLmRlYnVnKGx2bCwgJycuam9pbihhcmdzKSkKKworZGVmIG5vdGUoKmFyZ3MpOgorICAgIGxvZ2dlci5pbmZvKCcnLmpvaW4oYXJncykpCisKK2RlZiB3YXJuKCphcmdzKToKKyAgICBsb2dnZXIud2FybignJy5qb2luKGFyZ3MpKQorCitkZWYgZXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICBsb2dnZXIuZXJyb3IoJycuam9pbihhcmdzKSwgZXh0cmE9a3dhcmdzKQorCitkZWYgZmF0YWwoKmFyZ3MsICoqa3dhcmdzKToKKyAgICBsb2dnZXIuY3JpdGljYWwoJycuam9pbihhcmdzKSwgZXh0cmE9a3dhcmdzKQorICAgIHJhaXNlIEJCSGFuZGxlZEV4Y2VwdGlvbigpCisKK2RlZiBkZXByZWNhdGVkKGZ1bmMsIG5hbWU9Tm9uZSwgYWR2aWNlPSIiKToKKyAgICAiIiJUaGlzIGlzIGEgZGVjb3JhdG9yIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1hcmsgZnVuY3Rpb25zCisgICAgYXMgZGVwcmVjYXRlZC4gSXQgd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nIGJlaW5nIGVtaXR0ZWQKKyAgICB3aGVuIHRoZSBmdW5jdGlvbiBpcyB1c2VkLiIiIgorICAgIGltcG9ydCB3YXJuaW5ncworCisgICAgaWYgYWR2aWNlOgorICAgICAgICBhZHZpY2UgPSAiOiAlcyIgJSBhZHZpY2UKKyAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgIG5hbWUgPSBmdW5jLl9fbmFtZV9fCisKKyAgICBkZWYgbmV3RnVuYygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJDYWxsIHRvIGRlcHJlY2F0ZWQgZnVuY3Rpb24gJXMlcy4iICUgKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2aWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgbmV3RnVuYy5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICBuZXdGdW5jLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KKyAgICBuZXdGdW5jLl9fZGljdF9fLnVwZGF0ZShmdW5jLl9fZGljdF9fKQorICAgIHJldHVybiBuZXdGdW5jCisKKyMgRm9yIGNvbXBhdGliaWxpdHkKK2RlZiBkZXByZWNhdGVfaW1wb3J0KGN1cnJlbnQsIG1vZHVsZW5hbWUsIGZyb21saXN0LCByZW5hbWVzID0gTm9uZSk6CisgICAgIiIiSW1wb3J0IG9iamVjdHMgZnJvbSBvbmUgbW9kdWxlIGludG8gYW5vdGhlciwgd3JhcHBpbmcgdGhlbSB3aXRoIGEgRGVwcmVjYXRpb25XYXJuaW5nIiIiCisgICAgaW1wb3J0IHN5cworCisgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVuYW1lLCBmcm9tbGlzdCA9IGZyb21saXN0KQorICAgIGZvciBwb3NpdGlvbiwgb2JqbmFtZSBpbiBlbnVtZXJhdGUoZnJvbWxpc3QpOgorICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgb2JqbmFtZSkKKyAgICAgICAgbmV3b2JqID0gZGVwcmVjYXRlZChvYmosICJ7MH0uezF9Ii5mb3JtYXQoY3VycmVudCwgb2JqbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgezB9LnsxfSBpbnN0ZWFkIi5mb3JtYXQobW9kdWxlbmFtZSwgb2JqbmFtZSkpCisgICAgICAgIGlmIHJlbmFtZXM6CisgICAgICAgICAgICBuZXduYW1lID0gcmVuYW1lc1twb3NpdGlvbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld25hbWUgPSBvYmpuYW1lCisKKyAgICAgICAgc2V0YXR0cihzeXMubW9kdWxlc1tjdXJyZW50XSwgbmV3bmFtZSwgbmV3b2JqKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9idWlsZC5weSBiL2JpdGJha2UvbGliL2JiL2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGMzOTUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9idWlsZC5weQpAQCAtMCwwICsxLDc3MCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSAnQnVpbGQnIGltcGxlbWVudGF0aW9uCisjCisjIENvcmUgY29kZSBmb3IgZnVuY3Rpb24gZXhlY3V0aW9uIGFuZCB0YXNrIGhhbmRsaW5nIGluIHRoZQorIyBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBCYXNlZCBvbiBHZW50b28ncyBwb3J0YWdlLnB5LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBnbG9iCitpbXBvcnQgdGltZQoraW1wb3J0IHN0YXQKK2ltcG9ydCBiYgoraW1wb3J0IGJiLm1zZworaW1wb3J0IGJiLnByb2Nlc3MKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgbmVzdGVkCitmcm9tIGJiIGltcG9ydCBldmVudCwgdXRpbHMKKworYmJsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5CdWlsZCcpCisKK05VTEwgPSBvcGVuKG9zLmRldm51bGwsICdyKycpCisKK19fbXRpbWVfY2FjaGUgPSB7fQorCitkZWYgY2FjaGVkX210aW1lX25vZXJyb3IoZik6CisgICAgaWYgZiBub3QgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19tdGltZV9jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gMAorICAgIHJldHVybiBfX210aW1lX2NhY2hlW2ZdCisKK2RlZiByZXNldF9jYWNoZSgpOgorICAgIGdsb2JhbCBfX210aW1lX2NhY2hlCisgICAgX19tdGltZV9jYWNoZSA9IHt9CisKKyMgV2hlbiB3ZSBleGVjdXRlIGEgUHl0aG9uIGZ1bmN0aW9uLCB3ZSdkIGxpa2UgY2VydGFpbiB0aGluZ3MKKyMgaW4gYWxsIG5hbWVzcGFjZXMsIGhlbmNlIHdlIGFkZCB0aGVtIHRvIF9fYnVpbHRpbnNfXy4KKyMgSWYgd2UgZG8gbm90IGRvIHRoaXMgYW5kIHVzZSB0aGUgZXhlYyBnbG9iYWxzLCB0aGV5IHdpbGwKKyMgbm90IGJlIGF2YWlsYWJsZSB0byBzdWJmdW5jdGlvbnMuCitfX2J1aWx0aW5zX19bJ2JiJ10gPSBiYgorX19idWlsdGluc19fWydvcyddID0gb3MKKworY2xhc3MgRnVuY0ZhaWxlZChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lID0gTm9uZSwgbG9nZmlsZSA9IE5vbmUpOgorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBsb2dmaWxlCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgIHNlbGYubXNnID0gJ0Z1bmN0aW9uIGZhaWxlZDogJXMnICUgbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tc2cgPSAiRnVuY3Rpb24gZmFpbGVkIgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5sb2dmaWxlKToKKyAgICAgICAgICAgIG1zZyA9ICgiJXMgKGxvZyBmaWxlIGlzIGxvY2F0ZWQgYXQgJXMpIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYubXNnLCBzZWxmLmxvZ2ZpbGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gc2VsZi5tc2cKKyAgICAgICAgcmV0dXJuIG1zZworCitjbGFzcyBUYXNrQmFzZShldmVudC5FdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgdGFzayBldmVudHMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBsb2dmaWxlLCBkKToKKyAgICAgICAgc2VsZi5fdGFzayA9IHQKKyAgICAgICAgc2VsZi5fcGFja2FnZSA9IGQuZ2V0VmFyKCJQRiIsIFRydWUpCisgICAgICAgIHNlbGYudGFza2ZpbGUgPSBkLmdldFZhcigiRklMRSIsIFRydWUpCisgICAgICAgIHNlbGYudGFza25hbWUgPSBzZWxmLl90YXNrCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi50aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9ICJyZWNpcGUgJXM6IHRhc2sgJXM6ICVzIiAlIChkLmdldFZhcigiUEYiLCBUcnVlKSwgdCwgc2VsZi5nZXREaXNwbGF5TmFtZSgpKQorCisgICAgZGVmIGdldFRhc2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90YXNrCisKKyAgICBkZWYgc2V0VGFzayhzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5fdGFzayA9IHRhc2sKKworICAgIGRlZiBnZXREaXNwbGF5TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGJiLmV2ZW50LmdldE5hbWUoc2VsZilbNDpdCisKKyAgICB0YXNrID0gcHJvcGVydHkoZ2V0VGFzaywgc2V0VGFzaywgTm9uZSwgInRhc2sgcHJvcGVydHkiKQorCitjbGFzcyBUYXNrU3RhcnRlZChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gc3RhcnRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0LCBsb2dmaWxlLCB0YXNrZmxhZ3MsIGQpOgorICAgICAgICBzdXBlcihUYXNrU3RhcnRlZCwgc2VsZikuX19pbml0X18odCwgbG9nZmlsZSwgZCkKKyAgICAgICAgc2VsZi50YXNrZmxhZ3MgPSB0YXNrZmxhZ3MKKworY2xhc3MgVGFza1N1Y2NlZWRlZChUYXNrQmFzZSk6CisgICAgIiIiVGFzayBleGVjdXRpb24gY29tcGxldGVkIiIiCisKK2NsYXNzIFRhc2tGYWlsZWQoVGFza0Jhc2UpOgorICAgICIiIlRhc2sgZXhlY3V0aW9uIGZhaWxlZCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIGxvZ2ZpbGUsIG1ldGFkYXRhLCBlcnJwcmludGVkID0gRmFsc2UpOgorICAgICAgICBzZWxmLmVycnByaW50ZWQgPSBlcnJwcmludGVkCisgICAgICAgIHN1cGVyKFRhc2tGYWlsZWQsIHNlbGYpLl9faW5pdF9fKHRhc2ssIGxvZ2ZpbGUsIG1ldGFkYXRhKQorCitjbGFzcyBUYXNrRmFpbGVkU2lsZW50KFRhc2tCYXNlKToKKyAgICAiIiJUYXNrIGV4ZWN1dGlvbiBmYWlsZWQgKHNpbGVudGx5KSIiIgorICAgIGRlZiBnZXREaXNwbGF5TmFtZShzZWxmKToKKyAgICAgICAgIyBEb24ndCBuZWVkIHRvIHRlbGwgdGhlIHVzZXIgaXQgd2FzIHNpbGVudAorICAgICAgICByZXR1cm4gIkZhaWxlZCIKKworY2xhc3MgVGFza0ludmFsaWQoVGFza0Jhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIG1ldGFkYXRhKToKKyAgICAgICAgc3VwZXIoVGFza0ludmFsaWQsIHNlbGYpLl9faW5pdF9fKHRhc2ssIE5vbmUsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gIk5vIHN1Y2ggdGFzayAnJXMnIiAlIHRhc2sKKworCitjbGFzcyBMb2dUZWUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nZ2VyLCBvdXRmaWxlKToKKyAgICAgICAgc2VsZi5vdXRmaWxlID0gb3V0ZmlsZQorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLm91dGZpbGUubmFtZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6CisgICAgICAgIHNlbGYubG9nZ2VyLnBsYWluKHN0cmluZykKKyAgICAgICAgc2VsZi5vdXRmaWxlLndyaXRlKHN0cmluZykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYub3V0ZmlsZS5fX2VudGVyX18oKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNpbmZvKToKKyAgICAgICAgc2VsZi5vdXRmaWxlLl9fZXhpdF9fKCpleGNpbmZvKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxMb2dUZWUgezB9PicuZm9ybWF0KHNlbGYubmFtZSkKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYub3V0ZmlsZS5mbHVzaCgpCisKK2RlZiBleGVjX2Z1bmMoZnVuYywgZCwgZGlycyA9IE5vbmUpOgorICAgICIiIkV4ZWN1dGUgYSBCQiAnZnVuY3Rpb24nIiIiCisKKyAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgRmFsc2UpCisgICAgaWYgbm90IGJvZHk6CisgICAgICAgIGlmIGJvZHkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJGdW5jdGlvbiAlcyBkb2Vzbid0IGV4aXN0IiwgZnVuYykKKyAgICAgICAgcmV0dXJuCisKKyAgICBmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoZnVuYykKKyAgICBjbGVhbmRpcnMgPSBmbGFncy5nZXQoJ2NsZWFuZGlycycpCisgICAgaWYgY2xlYW5kaXJzOgorICAgICAgICBmb3IgY2RpciBpbiBkLmV4cGFuZChjbGVhbmRpcnMpLnNwbGl0KCk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoY2RpciwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjZGlyKQorCisgICAgaWYgZGlycyBpcyBOb25lOgorICAgICAgICBkaXJzID0gZmxhZ3MuZ2V0KCdkaXJzJykKKyAgICAgICAgaWYgZGlyczoKKyAgICAgICAgICAgIGRpcnMgPSBkLmV4cGFuZChkaXJzKS5zcGxpdCgpCisKKyAgICBpZiBkaXJzOgorICAgICAgICBmb3IgYWRpciBpbiBkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGFkaXIpCisgICAgICAgIGFkaXIgPSBkaXJzWy0xXQorICAgIGVsc2U6CisgICAgICAgIGFkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhZGlyKQorCisgICAgaXNweXRob24gPSBmbGFncy5nZXQoJ3B5dGhvbicpCisKKyAgICBsb2NrZmxhZyA9IGZsYWdzLmdldCgnbG9ja2ZpbGVzJykKKyAgICBpZiBsb2NrZmxhZzoKKyAgICAgICAgbG9ja2ZpbGVzID0gW2YgZm9yIGYgaW4gZC5leHBhbmQobG9ja2ZsYWcpLnNwbGl0KCldCisgICAgZWxzZToKKyAgICAgICAgbG9ja2ZpbGVzID0gTm9uZQorCisgICAgdGVtcGRpciA9IGQuZ2V0VmFyKCdUJywgVHJ1ZSkKKworICAgICMgb3IgZnVuYyBhbGxvd3MgaXRlbXMgdG8gYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgbm9ybWFsCisgICAgIyB0YXNrIHNldCwgc3VjaCBhcyBidWlsZGhpc3RvcnkKKyAgICB0YXNrID0gZC5nZXRWYXIoJ0JCX1JVTlRBU0snLCBUcnVlKSBvciBmdW5jCisgICAgaWYgdGFzayA9PSBmdW5jOgorICAgICAgICB0YXNrZnVuYyA9IHRhc2sKKyAgICBlbHNlOgorICAgICAgICB0YXNrZnVuYyA9ICIlcy4lcyIgJSAodGFzaywgZnVuYykKKworICAgIHJ1bmZtdCA9IGQuZ2V0VmFyKCdCQl9SVU5GTVQnLCBUcnVlKSBvciAicnVuLntmdW5jfS57cGlkfSIKKyAgICBydW5mbiA9IHJ1bmZtdC5mb3JtYXQodGFza2Z1bmM9dGFza2Z1bmMsIHRhc2s9dGFzaywgZnVuYz1mdW5jLCBwaWQ9b3MuZ2V0cGlkKCkpCisgICAgcnVuZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBydW5mbikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHJ1bmZpbGUpKQorCisgICAgIyBTZXR1cCB0aGUgY291cnRlc3kgbGluayB0byB0aGUgcnVuZm4sIG9ubHkgZm9yIHRhc2tzCisgICAgIyB3ZSBjcmVhdGUgdGhlIGxpbmsgJ2p1c3QnIGJlZm9yZSB0aGUgcnVuIHNjcmlwdCBpcyBjcmVhdGVkCisgICAgIyBpZiB3ZSBjcmVhdGUgaXQgYWZ0ZXIsIGFuZCBpZiB0aGUgcnVuIHNjcmlwdCBmYWlscywgdGhlbiB0aGUKKyAgICAjIGxpbmsgd29uJ3QgYmUgY3JlYXRlZCBhcyBhbiBleGNlcHRpb24gd291bGQgYmUgZmlyZWQuCisgICAgaWYgdGFzayA9PSBmdW5jOgorICAgICAgICBydW5saW5rID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdydW4uezB9Jy5mb3JtYXQodGFzaykpCisgICAgICAgIGlmIHJ1bmxpbms6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocnVubGluaykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsocnVuZm4sIHJ1bmxpbmspCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICB3aXRoIGJiLnV0aWxzLmZpbGVzbG9ja2VkKGxvY2tmaWxlcyk6CisgICAgICAgIGlmIGlzcHl0aG9uOgorICAgICAgICAgICAgZXhlY19mdW5jX3B5dGhvbihmdW5jLCBkLCBydW5maWxlLCBjd2Q9YWRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWNfZnVuY19zaGVsbChmdW5jLCBkLCBydW5maWxlLCBjd2Q9YWRpcikKKworX2Z1bmN0aW9uZm10ID0gIiIiCitkZWYge2Z1bmN0aW9ufShkKToKK3tib2R5fQorCit7ZnVuY3Rpb259KGQpCisiIiIKK2xvZ2Zvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorZGVmIGV4ZWNfZnVuY19weXRob24oZnVuYywgZCwgcnVuZmlsZSwgY3dkPU5vbmUpOgorICAgICIiIkV4ZWN1dGUgYSBweXRob24gQkIgJ2Z1bmN0aW9uJyIiIgorCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGNvZGUgPSBfZnVuY3Rpb25mbXQuZm9ybWF0KGZ1bmN0aW9uPWZ1bmMsIGJvZHk9ZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIGJiLmRhdGEuZW1pdF9mdW5jX3B5dGhvbihmdW5jLCBzY3JpcHQsIGQpCisKKyAgICBpZiBjd2Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9sZGRpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgb2xkZGlyID0gTm9uZQorICAgICAgICBvcy5jaGRpcihjd2QpCisKKyAgICBiYi5kZWJ1ZygyLCAiRXhlY3V0aW5nIHB5dGhvbiBmdW5jdGlvbiAlcyIgJSBmdW5jKQorCisgICAgdHJ5OgorICAgICAgICBjb21wID0gdXRpbHMuYmV0dGVyX2NvbXBpbGUoY29kZSwgZnVuYywgYmJmaWxlKQorICAgICAgICB1dGlscy5iZXR0ZXJfZXhlYyhjb21wLCB7ImQiOiBkfSwgY29kZSwgYmJmaWxlKQorICAgIGV4Y2VwdCAoYmIucGFyc2UuU2tpcFJlY2lwZSwgYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBGdW5jRmFpbGVkKGZ1bmMsIE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgYmIuZGVidWcoMiwgIlB5dGhvbiBmdW5jdGlvbiAlcyBmaW5pc2hlZCIgJSBmdW5jKQorCisgICAgICAgIGlmIGN3ZCBhbmQgb2xkZGlyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworZGVmIHNoZWxsX3RyYXBfY29kZSgpOgorICAgIHJldHVybiAnJycjIS9iaW4vc2hcbgorIyBFbWl0IGEgdXNlZnVsIGRpYWdub3N0aWMgaWYgc29tZXRoaW5nIGZhaWxzOgorYmJfZXhpdF9oYW5kbGVyKCkgeworICAgIHJldD0kPworICAgIGNhc2UgJHJldCBpbgorICAgIDApICA7OworICAgICopICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgICAgIiIpICAgZWNobyAiV0FSTklORzogZXhpdCBjb2RlICRyZXQgZnJvbSBhIHNoZWxsIGNvbW1hbmQuIjs7CisgICAgICAgICopICAgIGVjaG8gIldBUk5JTkc6ICR7QkFTSF9TT1VSQ0VbMF19OiR7QkFTSF9MSU5FTk9bMF19IGV4aXQgJHJldCBmcm9tCisgIFwiJEJBU0hfQ09NTUFORFwiIjs7CisgICAgICAgIGVzYWMKKyAgICAgICAgZXhpdCAkcmV0CisgICAgZXNhYworfQordHJhcCAnYmJfZXhpdF9oYW5kbGVyJyAwCitzZXQgLWUKKycnJworCitkZWYgZXhlY19mdW5jX3NoZWxsKGZ1bmMsIGQsIHJ1bmZpbGUsIGN3ZD1Ob25lKToKKyAgICAiIiJFeGVjdXRlIGEgc2hlbGwgZnVuY3Rpb24gZnJvbSB0aGUgbWV0YWRhdGEKKworICAgIE5vdGUgb24gZGlyZWN0b3J5IGJlaGF2aW9yLiAgVGhlICdkaXJzJyB2YXJmbGFnIHNob3VsZCBjb250YWluIGEgbGlzdAorICAgIG9mIHRoZSBkaXJlY3RvcmllcyB5b3UgbmVlZCBjcmVhdGVkIHByaW9yIHRvIGV4ZWN1dGlvbi4gIFRoZSBsYXN0CisgICAgaXRlbSBpbiB0aGUgbGlzdCBpcyB3aGVyZSB3ZSB3aWxsIGNoZGlyL2NkIHRvLgorICAgICIiIgorCisgICAgIyBEb24ndCBsZXQgdGhlIGVtaXR0ZWQgc2hlbGwgc2NyaXB0IG92ZXJyaWRlIFBXRAorICAgIGQuZGVsVmFyRmxhZygnUFdEJywgJ2V4cG9ydCcpCisKKyAgICB3aXRoIG9wZW4ocnVuZmlsZSwgJ3cnKSBhcyBzY3JpcHQ6CisgICAgICAgIHNjcmlwdC53cml0ZShzaGVsbF90cmFwX2NvZGUoKSkKKworICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYyhmdW5jLCBzY3JpcHQsIGQpCisKKyAgICAgICAgaWYgYmIubXNnLmxvZ2dlclZlcmJvc2VMb2dzOgorICAgICAgICAgICAgc2NyaXB0LndyaXRlKCJzZXQgLXhcbiIpCisgICAgICAgIGlmIGN3ZDoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiY2QgJyVzJ1xuIiAlIGN3ZCkKKyAgICAgICAgc2NyaXB0LndyaXRlKCIlc1xuIiAlIGZ1bmMpCisgICAgICAgIHNjcmlwdC53cml0ZSgnJycKKyMgY2xlYW51cAorcmV0PSQ/Cit0cmFwICcnIDAKK2V4aXQgJHJldAorJycnKQorCisgICAgb3MuY2htb2QocnVuZmlsZSwgMDc3NSkKKworICAgIGNtZCA9IHJ1bmZpbGUKKyAgICBpZiBkLmdldFZhckZsYWcoZnVuYywgJ2Zha2Vyb290Jyk6CisgICAgICAgIGZha2Vyb290Y21kID0gZC5nZXRWYXIoJ0ZBS0VST09UJywgVHJ1ZSkKKyAgICAgICAgaWYgZmFrZXJvb3RjbWQ6CisgICAgICAgICAgICBjbWQgPSBbZmFrZXJvb3RjbWQsIHJ1bmZpbGVdCisKKyAgICBpZiBiYi5tc2cubG9nZ2VyRGVmYXVsdFZlcmJvc2U6CisgICAgICAgIGxvZ2ZpbGUgPSBMb2dUZWUobG9nZ2VyLCBzeXMuc3Rkb3V0KQorICAgIGVsc2U6CisgICAgICAgIGxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgcmVhZGZpZm8oZGF0YSk6CisgICAgICAgIGxpbmVzID0gZGF0YS5zcGxpdCgnXDAnKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICBjbWQgPSBzcGxpdHZhbFswXQorICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsKSA+IDE6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICAgICBpZiBjbWQgPT0gJ2JicGxhaW4nOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2Jibm90ZSc6CisgICAgICAgICAgICAgICAgYmIubm90ZSh2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYndhcm4nOgorICAgICAgICAgICAgICAgIGJiLndhcm4odmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJlcnJvcic6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJmYXRhbCc6CisgICAgICAgICAgICAgICAgIyBUaGUgY2FsbGVyIHdpbGwgY2FsbCBleGl0IHRoZW1zZWx2ZXMsIHNvIGJiLmVycm9yKCkgaXMKKyAgICAgICAgICAgICAgICAjIHdoYXQgd2Ugd2FudCBoZXJlIHJhdGhlciB0aGFuIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICBiYi5lcnJvcih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgY21kID09ICdiYmZhdGFsX2xvZyc6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IodmFsdWUsIGZvcmNlbG9nPVRydWUpCisgICAgICAgICAgICBlbGlmIGNtZCA9PSAnYmJkZWJ1Zyc6CisgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSB2YWx1ZS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICAgICAgbGV2ZWwgPSBpbnQoc3BsaXR2YWxbMF0pCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbFsxXQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKGxldmVsLCB2YWx1ZSkKKworICAgIHRlbXBkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisgICAgZmlmb3BhdGggPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2ZpZm8uJXMnICUgb3MuZ2V0cGlkKCkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoZmlmb3BhdGgpOgorICAgICAgICBvcy51bmxpbmsoZmlmb3BhdGgpCisgICAgb3MubWtmaWZvKGZpZm9wYXRoKQorICAgIHdpdGggb3BlbihmaWZvcGF0aCwgJ3IrJykgYXMgZmlmbzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIkV4ZWN1dGluZyBzaGVsbCBmdW5jdGlvbiAlcyIgJSBmdW5jKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICdyKycpIGFzIHN0ZGluOgorICAgICAgICAgICAgICAgICAgICBiYi5wcm9jZXNzLnJ1bihjbWQsIHNoZWxsPUZhbHNlLCBzdGRpbj1zdGRpbiwgbG9nPWxvZ2ZpbGUsIGV4dHJhZmlsZXM9WyhmaWZvLHJlYWRmaWZvKV0pCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dmbiA9IGQuZ2V0VmFyKCdCQl9MT0dGSUxFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByYWlzZSBGdW5jRmFpbGVkKGZ1bmMsIGxvZ2ZuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpZm9wYXRoKQorCisgICAgYmIuZGVidWcoMiwgIlNoZWxsIGZ1bmN0aW9uICVzIGZpbmlzaGVkIiAlIGZ1bmMpCisKK2RlZiBfdGFza19kYXRhKGZuLCB0YXNrLCBkKToKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9GSUxFTkFNRScsIGZuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgdGFza1szOl0pCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJ3Rhc2stJXM6JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICh0YXNrWzM6XS5yZXBsYWNlKCdfJywgJy0nKSwgZC5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKSkpCisgICAgbG9jYWxkYXRhLmZpbmFsaXplKCkKKyAgICBiYi5kYXRhLmV4cGFuZEtleXMobG9jYWxkYXRhKQorICAgIHJldHVybiBsb2NhbGRhdGEKKworZGVmIF9leGVjX3Rhc2soZm4sIHRhc2ssIGQsIHF1aWV0ZXJyKToKKyAgICAiIiJFeGVjdXRlIGEgQkIgJ3Rhc2snCisKKyAgICBFeGVjdXRpb24gb2YgYSB0YXNrIGludm9sdmVzIGEgYml0IG1vcmUgc2V0dXAgdGhhbiBleGVjdXRpbmcgYSBmdW5jdGlvbiwKKyAgICBydW5uaW5nIGl0IHdpdGggaXRzIG93biBsb2NhbCBtZXRhZGF0YSwgYW5kIHdpdGggc29tZSB1c2VmdWwgdmFyaWFibGVzIHNldC4KKyAgICAiIiIKKyAgICBpZiBub3QgZC5nZXRWYXJGbGFnKHRhc2ssICd0YXNrJyk6CisgICAgICAgIGV2ZW50LmZpcmUoVGFza0ludmFsaWQodGFzaywgZCksIGQpCisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gc3VjaCB0YXNrOiAlcyIgJSB0YXNrKQorICAgICAgICByZXR1cm4gMQorCisgICAgbG9nZ2VyLmRlYnVnKDEsICJFeGVjdXRpbmcgdGFzayAlcyIsIHRhc2spCisKKyAgICBsb2NhbGRhdGEgPSBfdGFza19kYXRhKGZuLCB0YXNrLCBkKQorICAgIHRlbXBkaXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICBpZiBub3QgdGVtcGRpcjoKKyAgICAgICAgYmIuZmF0YWwoIlQgdmFyaWFibGUgbm90IHNldCwgdW5hYmxlIHRvIGJ1aWxkIikKKworICAgICMgQ2hhbmdlIG5pY2UgbGV2ZWwgaWYgd2UncmUgYXNrZWQgdG8KKyAgICBuaWNlID0gbG9jYWxkYXRhLmdldFZhcigiQkJfVEFTS19OSUNFX0xFVkVMIiwgVHJ1ZSkKKyAgICBpZiBuaWNlOgorICAgICAgICBjdXJuaWNlID0gb3MubmljZSgwKQorICAgICAgICBuaWNlID0gaW50KG5pY2UpIC0gY3VybmljZQorICAgICAgICBuZXduaWNlID0gb3MubmljZShuaWNlKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbmljZSB0byAlcyAiICUgbmV3bmljZSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZW1wZGlyKQorCisgICAgIyBEZXRlcm1pbmUgdGhlIGxvZ2ZpbGUgdG8gZ2VuZXJhdGUKKyAgICBsb2dmbXQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdCQl9MT0dGTVQnLCBUcnVlKSBvciAnbG9nLnt0YXNrfS57cGlkfScKKyAgICBsb2diYXNlID0gbG9nZm10LmZvcm1hdCh0YXNrPXRhc2ssIHBpZD1vcy5nZXRwaWQoKSkKKworICAgICMgRG9jdW1lbnQgdGhlIG9yZGVyIG9mIHRoZSB0YXNrcy4uLgorICAgIGxvZ29yZGVyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsb2cudGFza19vcmRlcicpCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4obG9nb3JkZXIsICdhJykgYXMgbG9nb3JkZXJmaWxlOgorICAgICAgICAgICAgbG9nb3JkZXJmaWxlLndyaXRlKCd7MH0gKHsxfSk6IHsyfVxuJy5mb3JtYXQodGFzaywgb3MuZ2V0cGlkKCksIGxvZ2Jhc2UpKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJPcGVuaW5nIGxvZyBmaWxlICclcyciLCBsb2dvcmRlcikKKyAgICAgICAgcGFzcworCisgICAgIyBTZXR1cCB0aGUgY291cnRlc3kgbGluayB0byB0aGUgbG9nZm4KKyAgICBsb2dsaW5rID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsb2cuezB9Jy5mb3JtYXQodGFzaykpCisgICAgbG9nZm4gPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgbG9nYmFzZSkKKyAgICBpZiBsb2dsaW5rOgorICAgICAgICBiYi51dGlscy5yZW1vdmUobG9nbGluaykKKworICAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnN5bWxpbmsobG9nYmFzZSwgbG9nbGluaykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgIHByZWZ1bmNzID0gbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ3ByZWZ1bmNzJywgZXhwYW5kPVRydWUpCisgICAgcG9zdGZ1bmNzID0gbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ3Bvc3RmdW5jcycsIGV4cGFuZD1UcnVlKQorCisgICAgY2xhc3MgRXJyb3JDaGVja0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi50cmlnZ2VyZWQgPSBGYWxzZQorICAgICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYsIGxvZ2dpbmcuRVJST1IpCisgICAgICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiBnZXRhdHRyKHJlY29yZCwgJ2ZvcmNlbG9nJywgRmFsc2UpOgorICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcmVkID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyZWQgPSBUcnVlCisKKyAgICAjIEhhbmRsZSBsb2dmaWxlcworICAgIHNpID0gb3BlbignL2Rldi9udWxsJywgJ3InKQorICAgIHRyeToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShsb2dmbikpCisgICAgICAgIGxvZ2ZpbGUgPSBvcGVuKGxvZ2ZuLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oIk9wZW5pbmcgbG9nIGZpbGUgJyVzJyIsIGxvZ2ZuKQorICAgICAgICBwYXNzCisKKyAgICAjIER1cCB0aGUgZXhpc3RpbmcgZmRzIHNvIHdlIGRvbnQgbG9zZSB0aGVtCisgICAgb3NpID0gW29zLmR1cChzeXMuc3RkaW4uZmlsZW5vKCkpLCBzeXMuc3RkaW4uZmlsZW5vKCldCisgICAgb3NvID0gW29zLmR1cChzeXMuc3Rkb3V0LmZpbGVubygpKSwgc3lzLnN0ZG91dC5maWxlbm8oKV0KKyAgICBvc2UgPSBbb3MuZHVwKHN5cy5zdGRlcnIuZmlsZW5vKCkpLCBzeXMuc3RkZXJyLmZpbGVubygpXQorCisgICAgIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KKyAgICBvcy5kdXAyKHNpLmZpbGVubygpLCBvc2lbMV0pCisgICAgb3MuZHVwMihsb2dmaWxlLmZpbGVubygpLCBvc29bMV0pCisgICAgb3MuZHVwMihsb2dmaWxlLmZpbGVubygpLCBvc2VbMV0pCisKKyAgICAjIEVuc3VyZSBQeXRob24gbG9nZ2luZyBnb2VzIHRvIHRoZSBsb2dmaWxlCisgICAgaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihsb2dmaWxlKQorICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2Zvcm1hdHRlcikKKyAgICAjIEFsd2F5cyBlbmFibGUgZnVsbCBkZWJ1ZyBvdXRwdXQgaW50byB0YXNrIGxvZ2ZpbGVzCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHIC0gMikKKyAgICBiYmxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisKKyAgICBlcnJjaGsgPSBFcnJvckNoZWNrSGFuZGxlcigpCisgICAgYmJsb2dnZXIuYWRkSGFuZGxlcihlcnJjaGspCisKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9MT0dGSUxFJywgbG9nZm4pCisgICAgbG9jYWxkYXRhLnNldFZhcignQkJfUlVOVEFTSycsIHRhc2spCisKKyAgICBmbGFncyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncyh0YXNrKQorCisgICAgZXZlbnQuZmlyZShUYXNrU3RhcnRlZCh0YXNrLCBsb2dmbiwgZmxhZ3MsIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICB0cnk6CisgICAgICAgIGZvciBmdW5jIGluIChwcmVmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgIGV4ZWNfZnVuYyhmdW5jLCBsb2NhbGRhdGEpCisgICAgICAgIGV4ZWNfZnVuYyh0YXNrLCBsb2NhbGRhdGEpCisgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICBleGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQorICAgIGV4Y2VwdCBGdW5jRmFpbGVkIGFzIGV4YzoKKyAgICAgICAgaWYgcXVpZXRlcnI6CisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWRTaWxlbnQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSksIGxvY2FsZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycnByaW50ZWQgPSBlcnJjaGsudHJpZ2dlcmVkCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICBldmVudC5maXJlKFRhc2tGYWlsZWQodGFzaywgbG9nZm4sIGxvY2FsZGF0YSwgZXJycHJpbnRlZCksIGxvY2FsZGF0YSkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKKyAgICAgICAgYmJsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUgYmFja3VwIGZkcworICAgICAgICBvcy5kdXAyKG9zaVswXSwgb3NpWzFdKQorICAgICAgICBvcy5kdXAyKG9zb1swXSwgb3NvWzFdKQorICAgICAgICBvcy5kdXAyKG9zZVswXSwgb3NlWzFdKQorCisgICAgICAgICMgQ2xvc2UgdGhlIGJhY2t1cCBmZHMKKyAgICAgICAgb3MuY2xvc2Uob3NpWzBdKQorICAgICAgICBvcy5jbG9zZShvc29bMF0pCisgICAgICAgIG9zLmNsb3NlKG9zZVswXSkKKyAgICAgICAgc2kuY2xvc2UoKQorCisgICAgICAgIGxvZ2ZpbGUuY2xvc2UoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dmbikgYW5kIG9zLnBhdGguZ2V0c2l6ZShsb2dmbikgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiWmVybyBzaXplIGxvZ2ZuICVzLCByZW1vdmluZyIsIGxvZ2ZuKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2ZuKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGxvZ2xpbmspCisgICAgZXZlbnQuZmlyZShUYXNrU3VjY2VlZGVkKHRhc2ssIGxvZ2ZuLCBsb2NhbGRhdGEpLCBsb2NhbGRhdGEpCisKKyAgICBpZiBub3QgbG9jYWxkYXRhLmdldFZhckZsYWcodGFzaywgJ25vc3RhbXAnKSBhbmQgbm90IGxvY2FsZGF0YS5nZXRWYXJGbGFnKHRhc2ssICdzZWxmc3RhbXAnKToKKyAgICAgICAgbWFrZV9zdGFtcCh0YXNrLCBsb2NhbGRhdGEpCisKKyAgICByZXR1cm4gMAorCitkZWYgZXhlY190YXNrKGZuLCB0YXNrLCBkLCBwcm9maWxlID0gRmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgcXVpZXRlcnIgPSBGYWxzZQorICAgICAgICBpZiBkLmdldFZhckZsYWcodGFzaywgInF1aWV0ZXJyb3JzIikgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBxdWlldGVyciA9IFRydWUKKworICAgICAgICBpZiBwcm9maWxlOgorICAgICAgICAgICAgcHJvZm5hbWUgPSAicHJvZmlsZS0lcy5sb2ciICUgKGQuZ2V0VmFyKCJQTiIsIFRydWUpICsgIi0iICsgdGFzaykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltcG9ydCBwcm9maWxlCisgICAgICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgICAgIHJldCA9IHByb2ZpbGUuUHJvZmlsZS5ydW5jYWxsKHByb2YsIF9leGVjX3Rhc2ssIGZuLCB0YXNrLCBkLCBxdWlldGVycikKKyAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhwcm9mbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZyhwcm9mbmFtZSkKKworICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIF9leGVjX3Rhc2soZm4sIHRhc2ssIGQsIHF1aWV0ZXJyKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKKyAgICAgICAgaWYgbm90IHF1aWV0ZXJyOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJCdWlsZCBvZiAlcyBmYWlsZWQiICUgKHRhc2spKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIGZhaWxlZGV2ZW50ID0gVGFza0ZhaWxlZCh0YXNrLCBOb25lLCBkLCBUcnVlKQorICAgICAgICAgICAgZXZlbnQuZmlyZShmYWlsZWRldmVudCwgZCkKKyAgICAgICAgcmV0dXJuIDEKKworZGVmIHN0YW1wX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUsIGJhc2Vvbmx5PUZhbHNlKToKKyAgICAiIiIKKyAgICBJbnRlcm5hbCBzdGFtcCBoZWxwZXIgZnVuY3Rpb24KKyAgICBNYWtlcyBzdXJlIHRoZSBzdGFtcCBkaXJlY3RvcnkgZXhpc3RzCisgICAgUmV0dXJucyB0aGUgc3RhbXAgcGF0aCtmaWxlbmFtZQorCisgICAgSW4gdGhlIGJpdGJha2UgY29yZSwgZCBjYW4gYmUgYSBDYWNoZURhdGEgYW5kIGZpbGVfbmFtZSB3aWxsIGJlIHNldC4KKyAgICBXaGVuIGNhbGxlZCBpbiB0YXNrIGNvbnRleHQsIGQgd2lsbCBiZSBhIGRhdGEgc3RvcmUsIGZpbGVfbmFtZSB3aWxsIG5vdCBiZSBzZXQKKyAgICAiIiIKKyAgICB0YXNrZmxhZ25hbWUgPSB0YXNrbmFtZQorICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIjoKKyAgICAgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wID0gZC5zdGFtcF9iYXNlW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgZC5zdGFtcFtmaWxlX25hbWVdCisgICAgICAgIGV4dHJhaW5mbyA9IGQuc3RhbXBfZXh0cmFpbmZvW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgIiIKKyAgICBlbHNlOgorICAgICAgICBzdGFtcCA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1iYXNlJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1NUQU1QJywgVHJ1ZSkKKyAgICAgICAgZmlsZV9uYW1lID0gZC5nZXRWYXIoJ0JCX0ZJTEVOQU1FJywgVHJ1ZSkKKyAgICAgICAgZXh0cmFpbmZvID0gZC5nZXRWYXJGbGFnKHRhc2tmbGFnbmFtZSwgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKSBvciAiIgorCisgICAgaWYgYmFzZW9ubHk6CisgICAgICAgIHJldHVybiBzdGFtcAorCisgICAgaWYgbm90IHN0YW1wOgorICAgICAgICByZXR1cm4KKworICAgIHN0YW1wID0gYmIucGFyc2Uuc2lnZ2VuLnN0YW1wZmlsZShzdGFtcCwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKQorCisgICAgc3RhbXBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3RhbXApCisgICAgaWYgY2FjaGVkX210aW1lX25vZXJyb3Ioc3RhbXBkaXIpID09IDA6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzdGFtcGRpcikKKworICAgIHJldHVybiBzdGFtcAorCitkZWYgc3RhbXBfY2xlYW5tYXNrX2ludGVybmFsKHRhc2tuYW1lLCBkLCBmaWxlX25hbWUpOgorICAgICIiIgorICAgIEludGVybmFsIHN0YW1wIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBzdGFtcCBjbGVhbmluZyBtYXNrCisgICAgUmV0dXJucyB0aGUgc3RhbXAgcGF0aCtmaWxlbmFtZQorCisgICAgSW4gdGhlIGJpdGJha2UgY29yZSwgZCBjYW4gYmUgYSBDYWNoZURhdGEgYW5kIGZpbGVfbmFtZSB3aWxsIGJlIHNldC4KKyAgICBXaGVuIGNhbGxlZCBpbiB0YXNrIGNvbnRleHQsIGQgd2lsbCBiZSBhIGRhdGEgc3RvcmUsIGZpbGVfbmFtZSB3aWxsIG5vdCBiZSBzZXQKKyAgICAiIiIKKyAgICB0YXNrZmxhZ25hbWUgPSB0YXNrbmFtZQorICAgIGlmIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKSBhbmQgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIjoKKyAgICAgICAgdGFza2ZsYWduYW1lID0gdGFza25hbWUucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wID0gZC5zdGFtcF9iYXNlX2NsZWFuW2ZpbGVfbmFtZV0uZ2V0KHRhc2tmbGFnbmFtZSkgb3IgZC5zdGFtcGNsZWFuW2ZpbGVfbmFtZV0KKyAgICAgICAgZXh0cmFpbmZvID0gZC5zdGFtcF9leHRyYWluZm9bZmlsZV9uYW1lXS5nZXQodGFza2ZsYWduYW1lKSBvciAiIgorICAgIGVsc2U6CisgICAgICAgIHN0YW1wID0gZC5nZXRWYXJGbGFnKHRhc2tmbGFnbmFtZSwgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKSBvciBkLmdldFZhcignU1RBTVBDTEVBTicsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGV4dHJhaW5mbyA9IGQuZ2V0VmFyRmxhZyh0YXNrZmxhZ25hbWUsICdzdGFtcC1leHRyYS1pbmZvJywgVHJ1ZSkgb3IgIiIKKworICAgIGlmIG5vdCBzdGFtcDoKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBjbGVhbm1hc2sgPSBiYi5wYXJzZS5zaWdnZW4uc3RhbXBjbGVhbm1hc2soc3RhbXAsIGZpbGVfbmFtZSwgdGFza25hbWUsIGV4dHJhaW5mbykKKworICAgIHJldHVybiBbY2xlYW5tYXNrLCBjbGVhbm1hc2sucmVwbGFjZSh0YXNrZmxhZ25hbWUsIHRhc2tmbGFnbmFtZSArICJfc2V0c2NlbmUiKV0KKworZGVmIG1ha2Vfc3RhbXAodGFzaywgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgQ3JlYXRlcy91cGRhdGVzIGEgc3RhbXAgZm9yIGEgZ2l2ZW4gdGFzaworICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgY2xlYW5tYXNrID0gc3RhbXBfY2xlYW5tYXNrX2ludGVybmFsKHRhc2ssIGQsIGZpbGVfbmFtZSkKKyAgICBmb3IgbWFzayBpbiBjbGVhbm1hc2s6CisgICAgICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihtYXNrKToKKyAgICAgICAgICAgICMgUHJlc2VydmUgc2lnZGF0YSBmaWxlcyBpbiB0aGUgc3RhbXBzIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgInNpZ2RhdGEiIGluIG5hbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy50YWludCcpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIHN0YW1wID0gc3RhbXBfaW50ZXJuYWwodGFzaywgZCwgZmlsZV9uYW1lKQorICAgICMgUmVtb3ZlIHRoZSBmaWxlIGFuZCByZWNyZWF0ZSB0byBmb3JjZSB0aW1lc3RhbXAKKyAgICAjIGNoYW5nZSBvbiBicm9rZW4gTkZTIGZpbGVzeXN0ZW1zCisgICAgaWYgc3RhbXA6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCkKKyAgICAgICAgb3BlbihzdGFtcCwgInciKS5jbG9zZSgpCisKKyAgICAjIElmIHdlJ3JlIGluIHRhc2sgY29udGV4dCwgd3JpdGUgb3V0IGEgc2lnbmF0dXJlIGZpbGUgZm9yIGVhY2ggdGFzaworICAgICMgYXMgaXQgY29tcGxldGVzCisgICAgaWYgbm90IHRhc2suZW5kc3dpdGgoIl9zZXRzY2VuZSIpIGFuZCB0YXNrICE9ICJkb19zZXRzY2VuZSIgYW5kIG5vdCBmaWxlX25hbWU6CisgICAgICAgIHN0YW1wYmFzZSA9IHN0YW1wX2ludGVybmFsKHRhc2ssIGQsIE5vbmUsIFRydWUpCisgICAgICAgIGZpbGVfbmFtZSA9IGQuZ2V0VmFyKCdCQl9GSUxFTkFNRScsIFRydWUpCisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Rhc2soZmlsZV9uYW1lLCB0YXNrLCBzdGFtcGJhc2UsIFRydWUpCisKK2RlZiBkZWxfc3RhbXAodGFzaywgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgUmVtb3ZlcyBhIHN0YW1wIGZvciBhIGdpdmVuIHRhc2sKKyAgICAoZCBjYW4gYmUgYSBkYXRhIGRpY3Qgb3IgZGF0YUNhY2hlKQorICAgICIiIgorICAgIHN0YW1wID0gc3RhbXBfaW50ZXJuYWwodGFzaywgZCwgZmlsZV9uYW1lKQorICAgIGJiLnV0aWxzLnJlbW92ZShzdGFtcCkKKworZGVmIHdyaXRlX3RhaW50KHRhc2ssIGQsIGZpbGVfbmFtZSA9IE5vbmUpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSAidGFpbnQiIGZpbGUgd2hpY2ggd2lsbCBmb3JjZSB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIGl0cworICAgIGRlcGVuZGVudHMgdG8gYmUgcmUtcnVuIHRoZSBuZXh0IHRpbWUgYnkgaW5mbHVlbmNpbmcgdGhlIHZhbHVlIG9mIGl0cworICAgIHRhc2toYXNoLgorICAgIChkIGNhbiBiZSBhIGRhdGEgZGljdCBvciBkYXRhQ2FjaGUpCisgICAgIiIiCisgICAgaW1wb3J0IHV1aWQKKyAgICBpZiBmaWxlX25hbWU6CisgICAgICAgIHRhaW50Zm4gPSBkLnN0YW1wW2ZpbGVfbmFtZV0gKyAnLicgKyB0YXNrICsgJy50YWludCcKKyAgICBlbHNlOgorICAgICAgICB0YWludGZuID0gZC5nZXRWYXIoJ1NUQU1QJywgVHJ1ZSkgKyAnLicgKyB0YXNrICsgJy50YWludCcKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHRhaW50Zm4pKQorICAgICMgVGhlIHNwZWNpZmljIGNvbnRlbnQgb2YgdGhlIHRhaW50IGZpbGUgaXMgbm90IHJlYWxseSBpbXBvcnRhbnQsCisgICAgIyB3ZSBqdXN0IG5lZWQgaXQgdG8gYmUgcmFuZG9tLCBzbyBhIHJhbmRvbSBVVUlEIGlzIHVzZWQKKyAgICB3aXRoIG9wZW4odGFpbnRmbiwgJ3cnKSBhcyB0YWludGY6CisgICAgICAgIHRhaW50Zi53cml0ZShzdHIodXVpZC51dWlkNCgpKSkKKworZGVmIHN0YW1wZmlsZSh0YXNrbmFtZSwgZCwgZmlsZV9uYW1lID0gTm9uZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBzdGFtcCBmb3IgYSBnaXZlbiB0YXNrCisgICAgKGQgY2FuIGJlIGEgZGF0YSBkaWN0IG9yIGRhdGFDYWNoZSkKKyAgICAiIiIKKyAgICByZXR1cm4gc3RhbXBfaW50ZXJuYWwodGFza25hbWUsIGQsIGZpbGVfbmFtZSkKKworZGVmIGFkZF90YXNrcyh0YXNrbGlzdCwgZCk6CisgICAgdGFza19kZXBzID0gZC5nZXRWYXIoJ190YXNrX2RlcHMnLCBGYWxzZSkKKyAgICBpZiBub3QgdGFza19kZXBzOgorICAgICAgICB0YXNrX2RlcHMgPSB7fQorICAgIGlmIG5vdCAndGFza3MnIGluIHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzWyd0YXNrcyddID0gW10KKyAgICBpZiBub3QgJ3BhcmVudHMnIGluIHRhc2tfZGVwczoKKyAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ10gPSB7fQorCisgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgIHRhc2sgPSBkLmV4cGFuZCh0YXNrKQorCisgICAgICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAndGFzaycsIDEpCisKKyAgICAgICAgaWYgbm90IHRhc2sgaW4gdGFza19kZXBzWyd0YXNrcyddOgorICAgICAgICAgICAgdGFza19kZXBzWyd0YXNrcyddLmFwcGVuZCh0YXNrKQorCisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFncyh0YXNrKQorICAgICAgICBkZWYgZ2V0VGFzayhuYW1lKToKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lIGluIHRhc2tfZGVwczoKKyAgICAgICAgICAgICAgICB0YXNrX2RlcHNbbmFtZV0gPSB7fQorICAgICAgICAgICAgaWYgbmFtZSBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBkZXB0YXNrID0gZC5leHBhbmQoZmxhZ3NbbmFtZV0pCisgICAgICAgICAgICAgICAgdGFza19kZXBzW25hbWVdW3Rhc2tdID0gZGVwdGFzaworICAgICAgICBnZXRUYXNrKCdkZXBlbmRzJykKKyAgICAgICAgZ2V0VGFzaygncmRlcGVuZHMnKQorICAgICAgICBnZXRUYXNrKCdkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygncmRlcHRhc2snKQorICAgICAgICBnZXRUYXNrKCdyZWNyZGVwdGFzaycpCisgICAgICAgIGdldFRhc2soJ3JlY2lkZXB0YXNrJykKKyAgICAgICAgZ2V0VGFzaygnbm9zdGFtcCcpCisgICAgICAgIGdldFRhc2soJ2Zha2Vyb290JykKKyAgICAgICAgZ2V0VGFzaygnbm9leGVjJykKKyAgICAgICAgZ2V0VGFzaygndW1hc2snKQorICAgICAgICB0YXNrX2RlcHNbJ3BhcmVudHMnXVt0YXNrXSA9IFtdCisgICAgICAgIGlmICdkZXBzJyBpbiBmbGFnczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZmxhZ3NbJ2RlcHMnXToKKyAgICAgICAgICAgICAgICBkZXAgPSBkLmV4cGFuZChkZXApCisgICAgICAgICAgICAgICAgdGFza19kZXBzWydwYXJlbnRzJ11bdGFza10uYXBwZW5kKGRlcCkKKworICAgICMgZG9uJ3QgYXNzdW1lIGhvbGRpbmcgYSByZWZlcmVuY2UKKyAgICBkLnNldFZhcignX3Rhc2tfZGVwcycsIHRhc2tfZGVwcykKKworZGVmIGFkZHRhc2sodGFzaywgYmVmb3JlLCBhZnRlciwgZCk6CisgICAgaWYgdGFza1s6M10gIT0gImRvXyI6CisgICAgICAgIHRhc2sgPSAiZG9fIiArIHRhc2sKKworICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAidGFzayIsIDEpCisgICAgYmJ0YXNrcyA9IGQuZ2V0VmFyKCdfX0JCVEFTS1MnLCBGYWxzZSkgb3IgW10KKyAgICBpZiB0YXNrIG5vdCBpbiBiYnRhc2tzOgorICAgICAgICBiYnRhc2tzLmFwcGVuZCh0YXNrKQorICAgIGQuc2V0VmFyKCdfX0JCVEFTS1MnLCBiYnRhc2tzKQorCisgICAgZXhpc3RpbmcgPSBkLmdldFZhckZsYWcodGFzaywgImRlcHMiKSBvciBbXQorICAgIGlmIGFmdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIHNldCB1cCBkZXBzIGZvciBmdW5jdGlvbgorICAgICAgICBmb3IgZW50cnkgaW4gYWZ0ZXIuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGVudHJ5IG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBleGlzdGluZy5hcHBlbmQoZW50cnkpCisgICAgZC5zZXRWYXJGbGFnKHRhc2ssICJkZXBzIiwgZXhpc3RpbmcpCisgICAgaWYgYmVmb3JlIGlzIG5vdCBOb25lOgorICAgICAgICAjIHNldCB1cCB0aGluZ3MgdGhhdCBkZXBlbmQgb24gdGhpcyBmdW5jCisgICAgICAgIGZvciBlbnRyeSBpbiBiZWZvcmUuc3BsaXQoKToKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZC5nZXRWYXJGbGFnKGVudHJ5LCAiZGVwcyIpIG9yIFtdCisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoZW50cnksICJkZXBzIiwgW3Rhc2tdICsgZXhpc3RpbmcpCisKK2RlZiBkZWx0YXNrKHRhc2ssIGQpOgorICAgIGlmIHRhc2tbOjNdICE9ICJkb18iOgorICAgICAgICB0YXNrID0gImRvXyIgKyB0YXNrCisKKyAgICBiYnRhc2tzID0gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXQorICAgIGlmIHRhc2sgaW4gYmJ0YXNrczoKKyAgICAgICAgYmJ0YXNrcy5yZW1vdmUodGFzaykKKyAgICAgICAgZC5zZXRWYXIoJ19fQkJUQVNLUycsIGJidGFza3MpCisKKyAgICBkLmRlbFZhckZsYWcodGFzaywgJ2RlcHMnKQorICAgIGZvciBiYnRhc2sgaW4gZC5nZXRWYXIoJ19fQkJUQVNLUycsIEZhbHNlKSBvciBbXToKKyAgICAgICAgZGVwcyA9IGQuZ2V0VmFyRmxhZyhiYnRhc2ssICdkZXBzJykgb3IgW10KKyAgICAgICAgaWYgdGFzayBpbiBkZXBzOgorICAgICAgICAgICAgZGVwcy5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyhiYnRhc2ssICdkZXBzJywgZGVwcykKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2NhY2hlLnB5IGIvYml0YmFrZS9saWIvYmIvY2FjaGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0ZDY2MAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2NhY2hlLnB5CkBAIC0wLDAgKzEsODM3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIENhY2hlIGltcGxlbWVudGF0aW9uCisjCisjIENhY2hpbmcgb2YgYml0YmFrZSB2YXJpYWJsZXMgYmVmb3JlIHRhc2sgZXhlY3V0aW9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgICBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisKKyMgYnV0IHNtYWxsIHNlY3Rpb25zIGJhc2VkIG9uIGNvZGUgZnJvbSBiaW4vYml0YmFrZToKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYmIudXRpbHMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQ2FjaGUiKQorCit0cnk6CisgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHBpY2tsZQorICAgIGxvZ2dlci5pbmZvKCJJbXBvcnRpbmcgY1BpY2tsZSBmYWlsZWQuICIKKyAgICAgICAgICAgICAgICAiRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLiIpCisKK19fY2FjaGVfdmVyc2lvbl9fID0gIjE0OCIKKworZGVmIGdldENhY2hlRmlsZShwYXRoLCBmaWxlbmFtZSwgZGF0YV9oYXNoKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIGZpbGVuYW1lICsgIi4iICsgZGF0YV9oYXNoKQorCisjIFJlY2lwZUluZm9Db21tb24gZGVmaW5lcyBjb21tb24gZGF0YSByZXRyaWV2aW5nIG1ldGhvZHMKKyMgZnJvbSBtZXRhIGRhdGEgZm9yIGNhY2hlcy4gQ29yZVJlY2lwZUluZm8gYXMgd2VsbCBhcyBvdGhlcgorIyBFeHRyYSBSZWNpcGVJbmZvIG5lZWRzIHRvIGluaGVyaXQgdGhpcyBjbGFzcworY2xhc3MgUmVjaXBlSW5mb0NvbW1vbihvYmplY3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxpc3R2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGNscy5nZXR2YXIodmFyLCBtZXRhZGF0YSkuc3BsaXQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGludHZhcihjbHMsIHZhciwgbWV0YWRhdGEpOgorICAgICAgICByZXR1cm4gaW50KGNscy5nZXR2YXIodmFyLCBtZXRhZGF0YSkgb3IgMCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkZXB2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhjbHMuZ2V0dmFyKHZhciwgbWV0YWRhdGEpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBrZ3ZhcihjbHMsIHZhciwgcGFja2FnZXMsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIGRpY3QoKHBrZywgY2xzLmRlcHZhcigiJXNfJXMiICUgKHZhciwgcGtnKSwgbWV0YWRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRhc2t2YXIoY2xzLCB2YXIsIHRhc2tzLCBtZXRhZGF0YSk6CisgICAgICAgIHJldHVybiBkaWN0KCh0YXNrLCBjbHMuZ2V0dmFyKCIlc190YXNrLSVzIiAlICh2YXIsIHRhc2spLCBtZXRhZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZsYWdsaXN0KGNscywgZmxhZywgdmFybGlzdCwgbWV0YWRhdGEsIHNxdWFzaD1GYWxzZSk6CisgICAgICAgIG91dF9kaWN0ID0gZGljdCgodmFyLCBtZXRhZGF0YS5nZXRWYXJGbGFnKHZhciwgZmxhZywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGZvciB2YXIgaW4gdmFybGlzdCkKKyAgICAgICAgaWYgc3F1YXNoOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QoKGssdikgZm9yIChrLHYpIGluIG91dF9kaWN0Lml0ZXJpdGVtcygpIGlmIHYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3V0X2RpY3QKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBnZXR2YXIoY2xzLCB2YXIsIG1ldGFkYXRhKToKKyAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICcnCisKKworY2xhc3MgQ29yZVJlY2lwZUluZm8oUmVjaXBlSW5mb0NvbW1vbik6CisgICAgX19zbG90c19fID0gKCkKKworICAgIGNhY2hlZmlsZSA9ICJiYl9jYWNoZS5kYXQiICAgCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG1ldGFkYXRhKTogICAgICAKKyAgICAgICAgc2VsZi5maWxlX2RlcGVuZHMgPSBtZXRhZGF0YS5nZXRWYXIoJ19fZGVwZW5kcycsIEZhbHNlKQorICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IGJiLnBhcnNlLmNhY2hlZF9tdGltZShmaWxlbmFtZSkKKyAgICAgICAgc2VsZi52YXJpYW50cyA9IHNlbGYubGlzdHZhcignX19WQVJJQU5UUycsIG1ldGFkYXRhKSArIFsnJ10KKyAgICAgICAgc2VsZi5hcHBlbmRzID0gc2VsZi5saXN0dmFyKCdfX0JCQVBQRU5EJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYubm9jYWNoZSA9IHNlbGYuZ2V0dmFyKCdfX0JCX0RPTlRfQ0FDSEUnLCBtZXRhZGF0YSkKKworICAgICAgICBzZWxmLnNraXByZWFzb24gPSBzZWxmLmdldHZhcignX19TS0lQUEVEJywgbWV0YWRhdGEpCisgICAgICAgIGlmIHNlbGYuc2tpcHJlYXNvbjoKKyAgICAgICAgICAgIHNlbGYucG4gPSBzZWxmLmdldHZhcignUE4nLCBtZXRhZGF0YSkgb3IgYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGZpbGVuYW1lLG1ldGFkYXRhKVswXQorICAgICAgICAgICAgc2VsZi5za2lwcGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5wcm92aWRlcyAgPSBzZWxmLmRlcHZhcignUFJPVklERVMnLCBtZXRhZGF0YSkKKyAgICAgICAgICAgIHNlbGYucnByb3ZpZGVzID0gc2VsZi5kZXB2YXIoJ1JQUk9WSURFUycsIG1ldGFkYXRhKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi50YXNrcyA9IG1ldGFkYXRhLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpCisKKyAgICAgICAgc2VsZi5wbiA9IHNlbGYuZ2V0dmFyKCdQTicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnBhY2thZ2VzID0gc2VsZi5saXN0dmFyKCdQQUNLQUdFUycsIG1ldGFkYXRhKQorICAgICAgICBpZiBub3Qgc2VsZi5wbiBpbiBzZWxmLnBhY2thZ2VzOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlcy5hcHBlbmQoc2VsZi5wbikKKworICAgICAgICBzZWxmLmJhc2V0YXNraGFzaGVzID0gc2VsZi50YXNrdmFyKCdCQl9CQVNFSEFTSCcsIHNlbGYudGFza3MsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmhhc2hmaWxlbmFtZSA9IHNlbGYuZ2V0dmFyKCdCQl9IQVNIRklMRU5BTUUnLCBtZXRhZGF0YSkKKworICAgICAgICBzZWxmLnRhc2tfZGVwcyA9IG1ldGFkYXRhLmdldFZhcignX3Rhc2tfZGVwcycsIEZhbHNlKSBvciB7J3Rhc2tzJzogW10sICdwYXJlbnRzJzoge319CisKKyAgICAgICAgc2VsZi5za2lwcGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5wZSA9IHNlbGYuZ2V0dmFyKCdQRScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnB2ID0gc2VsZi5nZXR2YXIoJ1BWJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHIgPSBzZWxmLmdldHZhcignUFInLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZWZhdWx0cHJlZiA9IHNlbGYuaW50dmFyKCdERUZBVUxUX1BSRUZFUkVOQ0UnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5ub3Rfd29ybGQgPSBzZWxmLmdldHZhcignRVhDTFVERV9GUk9NX1dPUkxEJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXAgPSBzZWxmLmdldHZhcignU1RBTVAnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zdGFtcGNsZWFuID0gc2VsZi5nZXR2YXIoJ1NUQU1QQ0xFQU4nLCBtZXRhZGF0YSkgICAgICAgIAorICAgICAgICBzZWxmLnN0YW1wX2Jhc2UgPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1iYXNlJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuc3RhbXBfYmFzZV9jbGVhbiA9IHNlbGYuZmxhZ2xpc3QoJ3N0YW1wLWJhc2UtY2xlYW4nLCBzZWxmLnRhc2tzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zdGFtcF9leHRyYWluZm8gPSBzZWxmLmZsYWdsaXN0KCdzdGFtcC1leHRyYS1pbmZvJywgc2VsZi50YXNrcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bXMgPSBzZWxmLmZsYWdsaXN0KCdmaWxlLWNoZWNrc3VtcycsIHNlbGYudGFza3MsIG1ldGFkYXRhLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2thZ2VzX2R5bmFtaWMgPSBzZWxmLmxpc3R2YXIoJ1BBQ0tBR0VTX0RZTkFNSUMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZXBlbmRzICAgICAgICAgID0gc2VsZi5kZXB2YXIoJ0RFUEVORFMnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5wcm92aWRlcyAgICAgICAgID0gc2VsZi5kZXB2YXIoJ1BST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucmRlcGVuZHMgICAgICAgICA9IHNlbGYuZGVwdmFyKCdSREVQRU5EUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJwcm92aWRlcyAgICAgICAgPSBzZWxmLmRlcHZhcignUlBST1ZJREVTJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucnJlY29tbWVuZHMgICAgICA9IHNlbGYuZGVwdmFyKCdSUkVDT01NRU5EUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJwcm92aWRlc19wa2cgICAgPSBzZWxmLnBrZ3ZhcignUlBST1ZJREVTJywgc2VsZi5wYWNrYWdlcywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucmRlcGVuZHNfcGtnICAgICA9IHNlbGYucGtndmFyKCdSREVQRU5EUycsIHNlbGYucGFja2FnZXMsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLnJyZWNvbW1lbmRzX3BrZyAgPSBzZWxmLnBrZ3ZhcignUlJFQ09NTUVORFMnLCBzZWxmLnBhY2thZ2VzLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5pbmhlcml0cyAgICAgICAgID0gc2VsZi5nZXR2YXIoJ19faW5oZXJpdF9jYWNoZScsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZha2Vyb290ZW52ICAgICAgPSBzZWxmLmdldHZhcignRkFLRVJPT1RFTlYnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5mYWtlcm9vdGRpcnMgICAgID0gc2VsZi5nZXR2YXIoJ0ZBS0VST09URElSUycsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmZha2Vyb290bm9lbnYgICAgPSBzZWxmLmdldHZhcignRkFLRVJPT1ROT0VOVicsIG1ldGFkYXRhKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGluaXRfY2FjaGVEYXRhKGNscywgY2FjaGVkYXRhKToKKyAgICAgICAgIyBDYWNoZURhdGEgaW4gQ29yZSBSZWNpcGVJbmZvIENsYXNzCisgICAgICAgIGNhY2hlZGF0YS50YXNrX2RlcHMgPSB7fQorICAgICAgICBjYWNoZWRhdGEucGtnX2ZuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wbiA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5wa2dfcGVwdnByID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnBrZ19kcCA9IHt9CisKKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wY2xlYW4gPSB7fQorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfYmFzZSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlX2NsZWFuID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2V4dHJhaW5mbyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5maWxlX2NoZWNrc3VtcyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5mbl9wcm92aWRlcyA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wbl9wcm92aWRlcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIGNhY2hlZGF0YS5hbGxfZGVwZW5kcyA9IFtdCisKKyAgICAgICAgY2FjaGVkYXRhLmRlcHMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGFja2FnZXMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucHJvdmlkZXJzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgY2FjaGVkYXRhLnJwcm92aWRlcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBjYWNoZWRhdGEucGFja2FnZXNfZHluYW1pYyA9IGRlZmF1bHRkaWN0KGxpc3QpCisKKyAgICAgICAgY2FjaGVkYXRhLnJ1bmRlcHMgPSBkZWZhdWx0ZGljdChsYW1iZGE6IGRlZmF1bHRkaWN0KGxpc3QpKQorICAgICAgICBjYWNoZWRhdGEucnVucmVjcyA9IGRlZmF1bHRkaWN0KGxhbWJkYTogZGVmYXVsdGRpY3QobGlzdCkpCisgICAgICAgIGNhY2hlZGF0YS5wb3NzaWJsZV93b3JsZCA9IFtdCisgICAgICAgIGNhY2hlZGF0YS51bml2ZXJzZV90YXJnZXQgPSBbXQorICAgICAgICBjYWNoZWRhdGEuaGFzaGZuID0ge30KKworICAgICAgICBjYWNoZWRhdGEuYmFzZXRhc2toYXNoID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmluaGVyaXRzID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290ZW52ID0ge30KKyAgICAgICAgY2FjaGVkYXRhLmZha2Vyb290bm9lbnYgPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RkaXJzID0ge30KKworICAgIGRlZiBhZGRfY2FjaGVEYXRhKHNlbGYsIGNhY2hlZGF0YSwgZm4pOgorICAgICAgICBjYWNoZWRhdGEudGFza19kZXBzW2ZuXSA9IHNlbGYudGFza19kZXBzCisgICAgICAgIGNhY2hlZGF0YS5wa2dfZm5bZm5dID0gc2VsZi5wbgorICAgICAgICBjYWNoZWRhdGEucGtnX3BuW3NlbGYucG5dLmFwcGVuZChmbikKKyAgICAgICAgY2FjaGVkYXRhLnBrZ19wZXB2cHJbZm5dID0gKHNlbGYucGUsIHNlbGYucHYsIHNlbGYucHIpCisgICAgICAgIGNhY2hlZGF0YS5wa2dfZHBbZm5dID0gc2VsZi5kZWZhdWx0cHJlZgorICAgICAgICBjYWNoZWRhdGEuc3RhbXBbZm5dID0gc2VsZi5zdGFtcAorICAgICAgICBjYWNoZWRhdGEuc3RhbXBjbGVhbltmbl0gPSBzZWxmLnN0YW1wY2xlYW4KKyAgICAgICAgY2FjaGVkYXRhLnN0YW1wX2Jhc2VbZm5dID0gc2VsZi5zdGFtcF9iYXNlCisgICAgICAgIGNhY2hlZGF0YS5zdGFtcF9iYXNlX2NsZWFuW2ZuXSA9IHNlbGYuc3RhbXBfYmFzZV9jbGVhbgorICAgICAgICBjYWNoZWRhdGEuc3RhbXBfZXh0cmFpbmZvW2ZuXSA9IHNlbGYuc3RhbXBfZXh0cmFpbmZvCisgICAgICAgIGNhY2hlZGF0YS5maWxlX2NoZWNrc3Vtc1tmbl0gPSBzZWxmLmZpbGVfY2hlY2tzdW1zCisKKyAgICAgICAgcHJvdmlkZXMgPSBbc2VsZi5wbl0KKyAgICAgICAgZm9yIHByb3ZpZGUgaW4gc2VsZi5wcm92aWRlczoKKyAgICAgICAgICAgIGlmIHByb3ZpZGUgbm90IGluIHByb3ZpZGVzOgorICAgICAgICAgICAgICAgIHByb3ZpZGVzLmFwcGVuZChwcm92aWRlKQorICAgICAgICBjYWNoZWRhdGEuZm5fcHJvdmlkZXNbZm5dID0gcHJvdmlkZXMKKworICAgICAgICBmb3IgcHJvdmlkZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wcm92aWRlcnNbcHJvdmlkZV0uYXBwZW5kKGZuKQorICAgICAgICAgICAgaWYgcHJvdmlkZSBub3QgaW4gY2FjaGVkYXRhLnBuX3Byb3ZpZGVzW3NlbGYucG5dOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5wbl9wcm92aWRlc1tzZWxmLnBuXS5hcHBlbmQocHJvdmlkZSkKKworICAgICAgICBmb3IgZGVwIGluIHNlbGYuZGVwZW5kczoKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gY2FjaGVkYXRhLmRlcHNbZm5dOgorICAgICAgICAgICAgICAgIGNhY2hlZGF0YS5kZXBzW2ZuXS5hcHBlbmQoZGVwKQorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBjYWNoZWRhdGEuYWxsX2RlcGVuZHM6CisgICAgICAgICAgICAgICAgY2FjaGVkYXRhLmFsbF9kZXBlbmRzLmFwcGVuZChkZXApCisKKyAgICAgICAgcnByb3ZpZGVzID0gc2VsZi5ycHJvdmlkZXMKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wYWNrYWdlc1twYWNrYWdlXS5hcHBlbmQoZm4pCisgICAgICAgICAgICBycHJvdmlkZXMgKz0gc2VsZi5ycHJvdmlkZXNfcGtnW3BhY2thZ2VdCisKKyAgICAgICAgZm9yIHJwcm92aWRlIGluIHJwcm92aWRlczoKKyAgICAgICAgICAgIGNhY2hlZGF0YS5ycHJvdmlkZXJzW3Jwcm92aWRlXS5hcHBlbmQoZm4pCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlc19keW5hbWljOgorICAgICAgICAgICAgY2FjaGVkYXRhLnBhY2thZ2VzX2R5bmFtaWNbcGFja2FnZV0uYXBwZW5kKGZuKQorCisgICAgICAgICMgQnVpbGQgaGFzaCBvZiBydW50aW1lIGRlcGVuZHMgYW5kIHJlY29tbWVuZHMKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gc2VsZi5wYWNrYWdlcyArIFtzZWxmLnBuXToKKyAgICAgICAgICAgIGNhY2hlZGF0YS5ydW5kZXBzW2ZuXVtwYWNrYWdlXSA9IGxpc3Qoc2VsZi5yZGVwZW5kcykgKyBzZWxmLnJkZXBlbmRzX3BrZ1twYWNrYWdlXQorICAgICAgICAgICAgY2FjaGVkYXRhLnJ1bnJlY3NbZm5dW3BhY2thZ2VdID0gbGlzdChzZWxmLnJyZWNvbW1lbmRzKSArIHNlbGYucnJlY29tbWVuZHNfcGtnW3BhY2thZ2VdCisKKyAgICAgICAgIyBDb2xsZWN0IGZpbGVzIHdlIG1heSBuZWVkIGZvciBwb3NzaWJsZSB3b3JsZC1kZXAKKyAgICAgICAgIyBjYWxjdWxhdGlvbnMKKyAgICAgICAgaWYgc2VsZi5ub3Rfd29ybGQ6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkVYQ0xVREUgRlJPTSBXT1JMRDogJXMiLCBmbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhY2hlZGF0YS5wb3NzaWJsZV93b3JsZC5hcHBlbmQoZm4pCisKKyAgICAgICAgIyBjcmVhdGUgYSBjb2xsZWN0aW9uIG9mIGFsbCB0YXJnZXRzIGZvciBzYW5pdHkgY2hlY2tpbmcKKyAgICAgICAgIyB0YXNrcywgc3VjaCBhcyB1cHN0cmVhbSB2ZXJzaW9ucywgbGljZW5zZSwgYW5kIHRvb2xzIGZvcgorICAgICAgICAjIHRhc2sgYW5kIGltYWdlIGNyZWF0aW9uLgorICAgICAgICBjYWNoZWRhdGEudW5pdmVyc2VfdGFyZ2V0LmFwcGVuZChzZWxmLnBuKQorCisgICAgICAgIGNhY2hlZGF0YS5oYXNoZm5bZm5dID0gc2VsZi5oYXNoZmlsZW5hbWUKKyAgICAgICAgZm9yIHRhc2ssIHRhc2toYXNoIGluIHNlbGYuYmFzZXRhc2toYXNoZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZGVudGlmaWVyID0gJyVzLiVzJyAlIChmbiwgdGFzaykKKyAgICAgICAgICAgIGNhY2hlZGF0YS5iYXNldGFza2hhc2hbaWRlbnRpZmllcl0gPSB0YXNraGFzaAorCisgICAgICAgIGNhY2hlZGF0YS5pbmhlcml0c1tmbl0gPSBzZWxmLmluaGVyaXRzCisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdGVudltmbl0gPSBzZWxmLmZha2Vyb290ZW52CisgICAgICAgIGNhY2hlZGF0YS5mYWtlcm9vdG5vZW52W2ZuXSA9IHNlbGYuZmFrZXJvb3Rub2VudgorICAgICAgICBjYWNoZWRhdGEuZmFrZXJvb3RkaXJzW2ZuXSA9IHNlbGYuZmFrZXJvb3RkaXJzCisKKworCitjbGFzcyBDYWNoZShvYmplY3QpOgorICAgICIiIgorICAgIEJpdEJha2UgQ2FjaGUgaW1wbGVtZW50YXRpb24KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhLCBkYXRhX2hhc2gsIGNhY2hlc19hcnJheSk6CisgICAgICAgICMgUGFzcyBjYWNoZXNfYXJyYXkgaW5mb3JtYXRpb24gaW50byBDYWNoZSBDb25zdHJ1Y3RvcgorICAgICAgICAjIEl0IHdpbGwgYmUgdXNlZCBsYXRlciBmb3IgZGVjaWRpbmcgd2hldGhlciB3ZSAKKyAgICAgICAgIyBuZWVkIGV4dHJhIGNhY2hlIGZpbGUgZHVtcC9sb2FkIHN1cHBvcnQgCisgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5ID0gY2FjaGVzX2FycmF5CisgICAgICAgIHNlbGYuY2FjaGVkaXIgPSBkYXRhLmdldFZhcigiQ0FDSEUiLCBUcnVlKQorICAgICAgICBzZWxmLmNsZWFuID0gc2V0KCkKKyAgICAgICAgc2VsZi5jaGVja2VkID0gc2V0KCkKKyAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGFfZm4gPSBOb25lCisgICAgICAgIHNlbGYuY2FjaGVjbGVhbiA9IFRydWUKKyAgICAgICAgc2VsZi5kYXRhX2hhc2ggPSBkYXRhX2hhc2gKKworICAgICAgICBpZiBzZWxmLmNhY2hlZGlyIGluIFtOb25lLCAnJ106CisgICAgICAgICAgICBzZWxmLmhhc19jYWNoZSA9IEZhbHNlCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm90IHVzaW5nIGEgY2FjaGUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJTZXQgQ0FDSEUgPSA8ZGlyZWN0b3J5PiB0byBlbmFibGUuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuaGFzX2NhY2hlID0gVHJ1ZQorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCAiYmJfY2FjaGUuZGF0Iiwgc2VsZi5kYXRhX2hhc2gpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVc2luZyBjYWNoZSBpbiAnJXMnIiwgc2VsZi5jYWNoZWRpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuY2FjaGVkaXIpCisKKyAgICAgICAgY2FjaGVfb2sgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVfb2sgPSBjYWNoZV9vayBhbmQgb3MucGF0aC5leGlzdHMoY2FjaGVmaWxlKQorICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKQorICAgICAgICBpZiBjYWNoZV9vazoKKyAgICAgICAgICAgIHNlbGYubG9hZF9jYWNoZWZpbGUoKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuY2FjaGVmaWxlKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPdXQgb2YgZGF0ZSBjYWNoZSBmb3VuZCwgcmVidWlsZGluZy4uLiIpCisKKyAgICBkZWYgbG9hZF9jYWNoZWZpbGUoc2VsZik6CisgICAgICAgICMgRmlyc3RseSwgdXNpbmcgY29yZSBjYWNoZSBmaWxlIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAjIHZhbGlkIGNoZWNraW5nCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNhY2hlZmlsZSwgInJiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5VbnBpY2tsZXIoY2FjaGVmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNhY2hlX3ZlciA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgYml0YmFrZV92ZXIgPSBwaWNrbGVkLmxvYWQoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnSW52YWxpZCBjYWNoZSwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGNhY2hlX3ZlciAhPSBfX2NhY2hlX3ZlcnNpb25fXzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnQ2FjaGUgdmVyc2lvbiBtaXNtYXRjaCwgcmVidWlsZGluZy4uLicpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIGJpdGJha2VfdmVyICE9IGJiLl9fdmVyc2lvbl9fOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdCaXRiYWtlIHZlcnNpb24gbWlzbWF0Y2gsIHJlYnVpbGRpbmcuLi4nKQorICAgICAgICAgICAgICAgIHJldHVybgorCisKKyAgICAgICAgY2FjaGVzaXplID0gMAorICAgICAgICBwcmV2aW91c19wcm9ncmVzcyA9IDAKKyAgICAgICAgcHJldmlvdXNfcGVyY2VudCA9IDAKKworICAgICAgICAjIENhbGN1bGF0ZSB0aGUgY29ycmVjdCBjYWNoZXNpemUgb2YgYWxsIHRob3NlIGNhY2hlIGZpbGVzCisgICAgICAgIGZvciBjYWNoZV9jbGFzcyBpbiBzZWxmLmNhY2hlc19hcnJheToKKyAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgIGNhY2hlZmlsZSA9IGdldENhY2hlRmlsZShzZWxmLmNhY2hlZGlyLCBjYWNoZV9jbGFzcy5jYWNoZWZpbGUsIHNlbGYuZGF0YV9oYXNoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihjYWNoZWZpbGUsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVzaXplICs9IG9zLmZzdGF0KGNhY2hlZmlsZS5maWxlbm8oKSkuc3Rfc2l6ZQorCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZChjYWNoZXNpemUpLCBzZWxmLmRhdGEpCisgICAgICAgIAorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZWZpbGUgPSBnZXRDYWNoZUZpbGUoc2VsZi5jYWNoZWRpciwgY2FjaGVfY2xhc3MuY2FjaGVmaWxlLCBzZWxmLmRhdGFfaGFzaCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2FjaGVmaWxlLCAicmIiKSBhcyBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuVW5waWNrbGVyKGNhY2hlZmlsZSkgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB3aGlsZSBjYWNoZWZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gcGlja2xlZC5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBpY2tsZWQubG9hZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlcGVuZHNfY2FjaGUuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtrZXldLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBlbmRzX2NhY2hlW2tleV0gPSBbdmFsdWVdCisgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgZmlyZSBldmVudHMgb24gZXZlbiBwZXJjZW50YWdlIGJvdW5kYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvZ3Jlc3MgPSBjYWNoZWZpbGUudGVsbCgpICsgcHJldmlvdXNfcHJvZ3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyY2VudCA9IDEwMCAqIGN1cnJlbnRfcHJvZ3Jlc3MgLyBjYWNoZXNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyY2VudCA+IHByZXZpb3VzX3BlcmNlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfcGVyY2VudCA9IGN1cnJlbnRfcGVyY2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MoY3VycmVudF9wcm9ncmVzcywgY2FjaGVzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19wcm9ncmVzcyArPSBjdXJyZW50X3Byb2dyZXNzCisKKyAgICAgICAgIyBOb3RlOiBkZXBlbmRzIGNhY2hlIG51bWJlciBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJzaW5nIGZpbGUgbnVtYmVycy4KKyAgICAgICAgIyBUaGUgc2FtZSBmaWxlIGhhcyBzZXZlcmFsIGNhY2hlcywgc3RpbGwgcmVnYXJkZWQgYXMgb25lIGl0ZW0gaW4gdGhlIGNhY2hlCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkKGNhY2hlc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuZGVwZW5kc19jYWNoZSkpLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSkKKworICAgIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdmlydHVhbGZuMnJlYWxmbih2aXJ0dWFsZm4pOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBhIHZpcnR1YWwgZmlsZSBuYW1lIHRvIGEgcmVhbCBvbmUgKyB0aGUgYXNzb2NpYXRlZCBzdWJjbGFzcyBrZXl3b3JkCisgICAgICAgICIiIgorCisgICAgICAgIGZuID0gdmlydHVhbGZuCisgICAgICAgIGNscyA9ICIiCisgICAgICAgIGlmIHZpcnR1YWxmbi5zdGFydHN3aXRoKCd2aXJ0dWFsOicpOgorICAgICAgICAgICAgZWxlbXMgPSB2aXJ0dWFsZm4uc3BsaXQoJzonKQorICAgICAgICAgICAgY2xzID0gIjoiLmpvaW4oZWxlbXNbMTotMV0pCisgICAgICAgICAgICBmbiA9IGVsZW1zWy0xXQorICAgICAgICByZXR1cm4gKGZuLCBjbHMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJlYWxmbjJ2aXJ0dWFsKHJlYWxmbiwgY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnQgYSByZWFsIGZpbGVuYW1lICsgdGhlIGFzc29jaWF0ZWQgc3ViY2xhc3Mga2V5d29yZCB0byBhIHZpcnR1YWwgZmlsZW5hbWUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNscyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiByZWFsZm4KKyAgICAgICAgcmV0dXJuICJ2aXJ0dWFsOiIgKyBjbHMgKyAiOiIgKyByZWFsZm4KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsb2FkRGF0YUZ1bGwoY2xzLCB2aXJ0dWFsZm4sIGFwcGVuZHMsIGNmZ0RhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgY29tcGxldGUgc2V0IG9mIGRhdGEgZm9yIGZuLgorICAgICAgICBUbyBkbyB0aGlzLCB3ZSBuZWVkIHRvIHBhcnNlIHRoZSBmaWxlLgorICAgICAgICAiIiIKKworICAgICAgICAoZm4sIHZpcnR1YWwpID0gY2xzLnZpcnR1YWxmbjJyZWFsZm4odmlydHVhbGZuKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUGFyc2luZyAlcyAoZnVsbCkiLCBmbikKKworICAgICAgICBjZmdEYXRhLnNldFZhcigiX19PTkxZRklOQUxJU0UiLCB2aXJ0dWFsIG9yICJkZWZhdWx0IikKKyAgICAgICAgYmJfZGF0YSA9IGNscy5sb2FkX2JiZmlsZShmbiwgYXBwZW5kcywgY2ZnRGF0YSkKKyAgICAgICAgcmV0dXJuIGJiX2RhdGFbdmlydHVhbF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZShjbHMsIGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICAiIiJQYXJzZSB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLCByZXR1cm5pbmcgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiIiIgorICAgICAgICBpbmZvcyA9IFtdCisgICAgICAgIGRhdGFzdG9yZXMgPSBjbHMubG9hZF9iYmZpbGUoZmlsZW5hbWUsIGFwcGVuZHMsIGNvbmZpZ2RhdGEpCisgICAgICAgIGRlcGVuZHMgPSBbXQorICAgICAgICBmb3IgdmFyaWFudCwgZGF0YSBpbiBzb3J0ZWQoZGF0YXN0b3Jlcy5pdGVyaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgaTogaVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgICAgICB2aXJ0dWFsZm4gPSBjbHMucmVhbGZuMnZpcnR1YWwoZmlsZW5hbWUsIHZhcmlhbnQpCisgICAgICAgICAgICBkZXBlbmRzID0gZGVwZW5kcyArIChkYXRhLmdldFZhcigiX19kZXBlbmRzIiwgRmFsc2UpIG9yIFtdKQorICAgICAgICAgICAgaWYgZGVwZW5kcyBhbmQgbm90IHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXIoIl9fZGVwZW5kcyIsIGRlcGVuZHMpCisKKyAgICAgICAgICAgIGluZm9fYXJyYXkgPSBbXQorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIGNhY2hlc19hcnJheToKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGNhY2hlX2NsYXNzKGZpbGVuYW1lLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICBpbmZvX2FycmF5LmFwcGVuZChpbmZvKQorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCh2aXJ0dWFsZm4sIGluZm9fYXJyYXkpKQorCisgICAgICAgIHJldHVybiBpbmZvcworCisgICAgZGVmIGxvYWQoc2VsZiwgZmlsZW5hbWUsIGFwcGVuZHMsIGNvbmZpZ2RhdGEpOgorICAgICAgICAiIiJPYnRhaW4gdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgICAgICAgdXNpbmcgY2FjaGVkIHZhbHVlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwYXJzaW5nLgorCisgICAgICAgIE5vdGUgdGhhdCBpZiBpdCBkb2VzIHBhcnNlIHRvIG9idGFpbiB0aGUgaW5mbywgaXQgd2lsbCBub3QKKyAgICAgICAgYXV0b21hdGljYWxseSBhZGQgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBjYWNoZSBvciB0byB5b3VyCisgICAgICAgIENhY2hlRGF0YS4gIFVzZSB0aGUgYWRkIG9yIGFkZF9pbmZvIG1ldGhvZCB0byBkbyBzbyBhZnRlcgorICAgICAgICBydW5uaW5nIHRoaXMsIG9yIHVzZSBsb2FkRGF0YSBpbnN0ZWFkLiIiIgorICAgICAgICBjYWNoZWQgPSBzZWxmLmNhY2hlVmFsaWQoZmlsZW5hbWUsIGFwcGVuZHMpCisgICAgICAgIGlmIGNhY2hlZDoKKyAgICAgICAgICAgIGluZm9zID0gW10KKyAgICAgICAgICAgICMgaW5mb19hcnJheSBpdGVtIGlzIGEgbGlzdCBvZiBbQ29yZVJlY2lwZUluZm8sIFhYWFJlY2lwZUluZm9dCisgICAgICAgICAgICBpbmZvX2FycmF5ID0gc2VsZi5kZXBlbmRzX2NhY2hlW2ZpbGVuYW1lXQorICAgICAgICAgICAgZm9yIHZhcmlhbnQgaW4gaW5mb19hcnJheVswXS52YXJpYW50czoKKyAgICAgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZpbGVuYW1lLCB2YXJpYW50KQorICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgodmlydHVhbGZuLCBzZWxmLmRlcGVuZHNfY2FjaGVbdmlydHVhbGZuXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlBhcnNpbmcgJXMiLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBjb25maWdkYXRhLCBzZWxmLmNhY2hlc19hcnJheSkKKworICAgICAgICByZXR1cm4gY2FjaGVkLCBpbmZvcworCisgICAgZGVmIGxvYWREYXRhKHNlbGYsIGZuLCBhcHBlbmRzLCBjZmdEYXRhLCBjYWNoZURhdGEpOgorICAgICAgICAiIiJMb2FkIHRoZSByZWNpcGUgaW5mbyBmb3IgdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgICAgICAgcGFyc2luZyBhbmQgYWRkaW5nIHRvIHRoZSBjYWNoZSBpZiBuZWNlc3NhcnksIGFuZCBhZGRpbmcKKyAgICAgICAgdGhlIHJlY2lwZSBpbmZvcm1hdGlvbiB0byB0aGUgc3VwcGxpZWQgQ2FjaGVEYXRhIGluc3RhbmNlLiIiIgorICAgICAgICBza2lwcGVkLCB2aXJ0dWFscyA9IDAsIDAKKworICAgICAgICBjYWNoZWQsIGluZm9zID0gc2VsZi5sb2FkKGZuLCBhcHBlbmRzLCBjZmdEYXRhKQorICAgICAgICBmb3IgdmlydHVhbGZuLCBpbmZvX2FycmF5IGluIGluZm9zOgorICAgICAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiU2tpcHBpbmcgJXM6ICVzIiwgdmlydHVhbGZuLCBpbmZvX2FycmF5WzBdLnNraXByZWFzb24pCisgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2luZm8odmlydHVhbGZuLCBpbmZvX2FycmF5LCBjYWNoZURhdGEsIG5vdCBjYWNoZWQpCisgICAgICAgICAgICAgICAgdmlydHVhbHMgKz0gMQorCisgICAgICAgIHJldHVybiBjYWNoZWQsIHNraXBwZWQsIHZpcnR1YWxzCisKKyAgICBkZWYgY2FjaGVWYWxpZChzZWxmLCBmbiwgYXBwZW5kcyk6CisgICAgICAgICIiIgorICAgICAgICBJcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGZuPworICAgICAgICBGYXN0IHZlcnNpb24sIG5vIHRpbWVzdGFtcHMgY2hlY2tlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZuIG5vdCBpbiBzZWxmLmNoZWNrZWQ6CisgICAgICAgICAgICBzZWxmLmNhY2hlVmFsaWRVcGRhdGUoZm4sIGFwcGVuZHMpCisKKyAgICAgICAgIyBJcyBjYWNoZSBlbmFibGVkPworICAgICAgICBpZiBub3Qgc2VsZi5oYXNfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgZm4gaW4gc2VsZi5jbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGNhY2hlVmFsaWRVcGRhdGUoc2VsZiwgZm4sIGFwcGVuZHMpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBmbj8KKyAgICAgICAgTWFrZSB0aG9yb3VnaCAoc2xvd2VyKSBjaGVja3MgaW5jbHVkaW5nIHRpbWVzdGFtcHMuCisgICAgICAgICIiIgorICAgICAgICAjIElzIGNhY2hlIGVuYWJsZWQ/CisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuY2hlY2tlZC5hZGQoZm4pCisKKyAgICAgICAgIyBGaWxlIGlzbid0IGluIGRlcGVuZHNfY2FjaGUKKyAgICAgICAgaWYgbm90IGZuIGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzIGlzIG5vdCBjYWNoZWQiLCBmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG10aW1lID0gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoZm4pCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHN0aWxsIGV4aXN0cworICAgICAgICBpZiBtdGltZSA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgbm8gbG9uZ2VyIGV4aXN0cyIsIGZuKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpbmZvX2FycmF5ID0gc2VsZi5kZXBlbmRzX2NhY2hlW2ZuXQorICAgICAgICAjIENoZWNrIHRoZSBmaWxlJ3MgdGltZXN0YW1wCisgICAgICAgIGlmIG10aW1lICE9IGluZm9fYXJyYXlbMF0udGltZXN0YW1wOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMgY2hhbmdlZCIsIGZuKQorICAgICAgICAgICAgc2VsZi5yZW1vdmUoZm4pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIENoZWNrIGRlcGVuZGVuY2llcyBhcmUgc3RpbGwgdmFsaWQKKyAgICAgICAgZGVwZW5kcyA9IGluZm9fYXJyYXlbMF0uZmlsZV9kZXBlbmRzCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBmb3IgZiwgb2xkX210aW1lIGluIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm10aW1lID0gYmIucGFyc2UuY2FjaGVkX210aW1lX25vZXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGZpbGUgc3RpbGwgZXhpc3RzCisgICAgICAgICAgICAgICAgaWYgb2xkX210aW1lICE9IDAgYW5kIGZtdGltZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcydzIGRlcGVuZGVuY3kgJXMgd2FzIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgICAgIGlmIChmbXRpbWUgIT0gb2xkX210aW1lKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogJXMncyBkZXBlbmRlbmN5ICVzIGNoYW5nZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGZuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBoYXNhdHRyKGluZm9fYXJyYXlbMF0sICdmaWxlX2NoZWNrc3VtcycpOgorICAgICAgICAgICAgZm9yIF8sIGZsIGluIGluZm9fYXJyYXlbMF0uZmlsZV9jaGVja3N1bXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmbC5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiAiKiIgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYsIGV4aXN0ID0gZi5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChleGlzdCA9PSAiVHJ1ZSIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhmKSkgb3IgKGV4aXN0ID09ICJGYWxzZSIgYW5kIG9zLnBhdGguZXhpc3RzKGYpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6ICVzJ3MgZmlsZSBjaGVja3N1bSBsaXN0IGZpbGUgJXMgY2hhbmdlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4sIGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIGFwcGVuZHMgIT0gaW5mb19hcnJheVswXS5hcHBlbmRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogYXBwZW5kcyBmb3IgJXMgY2hhbmdlZCIsIGZuKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICIlcyB0byAlcyIgJSAoc3RyKGFwcGVuZHMpLCBzdHIoaW5mb19hcnJheVswXS5hcHBlbmRzKSkpCisgICAgICAgICAgICBzZWxmLnJlbW92ZShmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGludmFsaWQgPSBGYWxzZQorICAgICAgICBmb3IgY2xzIGluIGluZm9fYXJyYXlbMF0udmFyaWFudHM6CisgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgICAgICBzZWxmLmNsZWFuLmFkZCh2aXJ0dWFsZm4pCisgICAgICAgICAgICBpZiB2aXJ0dWFsZm4gbm90IGluIHNlbGYuZGVwZW5kc19jYWNoZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkNhY2hlOiAlcyBpcyBub3QgY2FjaGVkIiwgdmlydHVhbGZuKQorICAgICAgICAgICAgICAgIGludmFsaWQgPSBUcnVlCisKKyAgICAgICAgIyBJZiBhbnkgb25lIG9mIHRoZSB2YXJpYW50cyBpcyBub3QgcHJlc2VudCwgbWFyayBhcyBpbnZhbGlkIGZvciBhbGwKKyAgICAgICAgaWYgaW52YWxpZDoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gaW5mb19hcnJheVswXS52YXJpYW50czoKKyAgICAgICAgICAgICAgICB2aXJ0dWFsZm4gPSBzZWxmLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgICAgICAgICAgaWYgdmlydHVhbGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ2FjaGU6IFJlbW92aW5nICVzIGZyb20gY2FjaGUiLCB2aXJ0dWFsZm4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYW4ucmVtb3ZlKHZpcnR1YWxmbikKKyAgICAgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZTogTWFya2luZyAlcyBhcyBub3QgY2xlYW4iLCBmbikKKyAgICAgICAgICAgICAgICBzZWxmLmNsZWFuLnJlbW92ZShmbikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuY2xlYW4uYWRkKGZuKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbW92ZShzZWxmLCBmbik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgYSBmbiBmcm9tIHRoZSBjYWNoZQorICAgICAgICBDYWxsZWQgZnJvbSB0aGUgcGFyc2VyIGluIGVycm9yIGNhc2VzCisgICAgICAgICIiIgorICAgICAgICBpZiBmbiBpbiBzZWxmLmRlcGVuZHNfY2FjaGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJlbW92aW5nICVzIGZyb20gY2FjaGUiLCBmbikKKyAgICAgICAgICAgIGRlbCBzZWxmLmRlcGVuZHNfY2FjaGVbZm5dCisgICAgICAgIGlmIGZuIGluIHNlbGYuY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1hcmtpbmcgJXMgYXMgdW5jbGVhbiIsIGZuKQorICAgICAgICAgICAgc2VsZi5jbGVhbi5yZW1vdmUoZm4pCisKKyAgICBkZWYgc3luYyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNhdmUgdGhlIGNhY2hlCisgICAgICAgIENhbGxlZCBmcm9tIHRoZSBwYXJzZXIgd2hlbiBjb21wbGV0ZSAob3IgZXhpdGluZykKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX2NhY2hlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5jYWNoZWNsZWFuOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDYWNoZSBpcyBjbGVhbiwgbm90IHNhdmluZy4iKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZmlsZV9kaWN0ID0ge30KKyAgICAgICAgcGlja2xlcl9kaWN0ID0ge30KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgUmVjaXBlSW5mb0NvbW1vbik6CisgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGNhY2hlX2NsYXNzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgY2FjaGVmaWxlID0gZ2V0Q2FjaGVGaWxlKHNlbGYuY2FjaGVkaXIsIGNhY2hlX2NsYXNzLmNhY2hlZmlsZSwgc2VsZi5kYXRhX2hhc2gpCisgICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gb3BlbihjYWNoZWZpbGUsICJ3YiIpCisgICAgICAgICAgICAgICAgcGlja2xlcl9kaWN0W2NhY2hlX2NsYXNzX25hbWVdID0gIHBpY2tsZS5QaWNrbGVyKGZpbGVfZGljdFtjYWNoZV9jbGFzc19uYW1lXSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHBpY2tsZXJfZGljdFsnQ29yZVJlY2lwZUluZm8nXS5kdW1wKF9fY2FjaGVfdmVyc2lvbl9fKQorICAgICAgICBwaWNrbGVyX2RpY3RbJ0NvcmVSZWNpcGVJbmZvJ10uZHVtcChiYi5fX3ZlcnNpb25fXykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3Iga2V5LCBpbmZvX2FycmF5IGluIHNlbGYuZGVwZW5kc19jYWNoZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgaW5mbyBpbiBpbmZvX2FycmF5OgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGluZm8sIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfY2xhc3NfbmFtZSA9IGluZm8uX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uZHVtcChrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVyX2RpY3RbY2FjaGVfY2xhc3NfbmFtZV0uZHVtcChpbmZvKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIFJlY2lwZUluZm9Db21tb24pOgorICAgICAgICAgICAgICAgICAgICBjYWNoZV9jbGFzc19uYW1lID0gY2FjaGVfY2xhc3MuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgZmlsZV9kaWN0W2NhY2hlX2NsYXNzX25hbWVdLmNsb3NlKCkKKworICAgICAgICBkZWwgc2VsZi5kZXBlbmRzX2NhY2hlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG10aW1lKGNhY2hlZmlsZSk6CisgICAgICAgIHJldHVybiBiYi5wYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihjYWNoZWZpbGUpCisKKyAgICBkZWYgYWRkX2luZm8oc2VsZiwgZmlsZW5hbWUsIGluZm9fYXJyYXksIGNhY2hlRGF0YSwgcGFyc2VkPU5vbmUsIHdhdGNoZXI9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5mb19hcnJheVswXSwgQ29yZVJlY2lwZUluZm8pIGFuZCAobm90IGluZm9fYXJyYXlbMF0uc2tpcHBlZCk6CisgICAgICAgICAgICBjYWNoZURhdGEuYWRkX2Zyb21fcmVjaXBlaW5mbyhmaWxlbmFtZSwgaW5mb19hcnJheSkKKworICAgICAgICAgICAgaWYgd2F0Y2hlcjoKKyAgICAgICAgICAgICAgICB3YXRjaGVyKGluZm9fYXJyYXlbMF0uZmlsZV9kZXBlbmRzKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19jYWNoZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIChpbmZvX2FycmF5WzBdLnNraXBwZWQgb3IgJ1NSQ1JFVklOQUNUSU9OJyBub3QgaW4gaW5mb19hcnJheVswXS5wdikgYW5kIG5vdCBpbmZvX2FycmF5WzBdLm5vY2FjaGU6CisgICAgICAgICAgICBpZiBwYXJzZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWNsZWFuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kc19jYWNoZVtmaWxlbmFtZV0gPSBpbmZvX2FycmF5CisKKyAgICBkZWYgYWRkKHNlbGYsIGZpbGVfbmFtZSwgZGF0YSwgY2FjaGVEYXRhLCBwYXJzZWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBTYXZlIGRhdGEgd2UgbmVlZCBpbnRvIHRoZSBjYWNoZQorICAgICAgICAiIiIKKworICAgICAgICByZWFsZm4gPSBzZWxmLnZpcnR1YWxmbjJyZWFsZm4oZmlsZV9uYW1lKVswXQorCisgICAgICAgIGluZm9fYXJyYXkgPSBbXQorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBpbmZvX2FycmF5LmFwcGVuZChjYWNoZV9jbGFzcyhyZWFsZm4sIGRhdGEpKQorICAgICAgICBzZWxmLmFkZF9pbmZvKGZpbGVfbmFtZSwgaW5mb19hcnJheSwgY2FjaGVEYXRhLCBwYXJzZWQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWRfYmJmaWxlKGJiZmlsZSwgYXBwZW5kcywgY29uZmlnKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgYW5kIHBhcnNlIG9uZSAuYmIgYnVpbGQgZmlsZQorICAgICAgICBSZXR1cm4gdGhlIGRhdGEgYW5kIHdoZXRoZXIgcGFyc2luZyByZXN1bHRlZCBpbiB0aGUgZmlsZSBiZWluZyBza2lwcGVkCisgICAgICAgICIiIgorICAgICAgICBjaGRpcl9iYWNrID0gRmFsc2UKKworICAgICAgICBmcm9tIGJiIGltcG9ydCBwYXJzZQorCisgICAgICAgICMgZXhwYW5kIHRtcGRpciB0byBpbmNsdWRlIHRoaXMgdG9wZGlyCisgICAgICAgIGNvbmZpZy5zZXRWYXIoJ1RNUERJUicsIGNvbmZpZy5nZXRWYXIoJ1RNUERJUicsIFRydWUpIG9yICIiKQorICAgICAgICBiYmZpbGVfbG9jID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShiYmZpbGUpKQorICAgICAgICBvbGRwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorICAgICAgICBwYXJzZS5jYWNoZWRfbXRpbWVfbm9lcnJvcihiYmZpbGVfbG9jKQorICAgICAgICBiYl9kYXRhID0gY29uZmlnLmNyZWF0ZUNvcHkoKQorICAgICAgICAjIFRoZSBDb25mSGFuZGxlciBmaXJzdCBsb29rcyBpZiB0aGVyZSBpcyBhIFRPUERJUiBhbmQgaWYgbm90CisgICAgICAgICMgdGhlbiBpdCB3b3VsZCBjYWxsIGdldGN3ZCgpLgorICAgICAgICAjIFByZXZpb3VzbHksIHdlIGNoZGlyKCllZCB0byBiYmZpbGVfbG9jLCBjYWxsZWQgdGhlIGhhbmRsZXIKKyAgICAgICAgIyBhbmQgZmluYWxseSBjaGRpcigpZWQgYmFjaywgYSBjb3VwbGUgb2YgdGhvdXNhbmQgdGltZXMuIFdlIG5vdworICAgICAgICAjIGp1c3QgZmlsbCBpbiBUT1BESVIgdG8gcG9pbnQgdG8gYmJmaWxlX2xvYyBpZiB0aGVyZSBpcyBubyBUT1BESVIgeWV0LgorICAgICAgICBpZiBub3QgYmJfZGF0YS5nZXRWYXIoJ1RPUERJUicsIEZhbHNlKToKKyAgICAgICAgICAgIGNoZGlyX2JhY2sgPSBUcnVlCisgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignVE9QRElSJywgYmJmaWxlX2xvYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgYXBwZW5kczoKKyAgICAgICAgICAgICAgICBiYl9kYXRhLnNldFZhcignX19CQkFQUEVORCcsICIgIi5qb2luKGFwcGVuZHMpKQorICAgICAgICAgICAgYmJfZGF0YSA9IHBhcnNlLmhhbmRsZShiYmZpbGUsIGJiX2RhdGEpCisgICAgICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgICAgICByZXR1cm4gYmJfZGF0YQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBjaGRpcl9iYWNrOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZHBhdGgpCisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBpbml0KGNvb2tlcik6CisgICAgIiIiCisgICAgVGhlIE9iamVjdGl2ZTogQ2FjaGUgdGhlIG1pbmltdW0gYW1vdW50IG9mIGRhdGEgcG9zc2libGUgeWV0IGdldCB0byB0aGUKKyAgICBzdGFnZSBvZiBidWlsZGluZyBwYWNrYWdlcyAoaS5lLiB0cnlCdWlsZCkgd2l0aG91dCByZXBhcnNpbmcgYW55IC5iYiBmaWxlcy4KKworICAgIFRvIGRvIHRoaXMsIHdlIGludGVyY2VwdCBnZXRWYXIgY2FsbHMgYW5kIG9ubHkgY2FjaGUgdGhlIHZhcmlhYmxlcyB3ZSBzZWUKKyAgICBiZWluZyBhY2Nlc3NlZC4gV2UgcmVseSBvbiB0aGUgY2FjaGUgZ2V0VmFyIGNhbGxzIGJlaW5nIG1hZGUgZm9yIGFsbAorICAgIHZhcmlhYmxlcyBiaXRiYWtlIG1pZ2h0IG5lZWQgdG8gdXNlIHRvIHJlYWNoIHRoaXMgc3RhZ2UuIEZvciBlYWNoIGNhY2hlZAorICAgIGZpbGUgd2UgbmVlZCB0byB0cmFjazoKKworICAgICogSXRzIG10aW1lCisgICAgKiBUaGUgbXRpbWVzIG9mIGFsbCBpdHMgZGVwZW5kZW5jaWVzCisgICAgKiBXaGV0aGVyIGl0IGNhdXNlZCBhIHBhcnNlLlNraXBSZWNpcGUgZXhjZXB0aW9uCisKKyAgICBGaWxlcyBjYXVzaW5nIHBhcnNpbmcgZXJyb3JzIGFyZSBldmljdGVkIGZyb20gdGhlIGNhY2hlLgorCisgICAgIiIiCisgICAgcmV0dXJuIENhY2hlKGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGFfaGFzaCkKKworCitjbGFzcyBDYWNoZURhdGEob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHdlIGNvbXBpbGUgZnJvbSB0aGUgY2FjaGVkIGRhdGEKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICBzZWxmLmNhY2hlc19hcnJheSA9IGNhY2hlc19hcnJheQorICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICBpZiB0eXBlKGNhY2hlX2NsYXNzKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKGNhY2hlX2NsYXNzLCBSZWNpcGVJbmZvQ29tbW9uKToKKyAgICAgICAgICAgICAgICBjYWNoZV9jbGFzcy5pbml0X2NhY2hlRGF0YShzZWxmKSAgICAgICAgCisKKyAgICAgICAgIyBEaXJlY3QgY2FjaGUgdmFyaWFibGVzCisgICAgICAgIHNlbGYudGFza19xdWV1ZXMgPSB7fQorICAgICAgICBzZWxmLnByZWZlcnJlZCA9IHt9CisgICAgICAgIHNlbGYudGFza3MgPSB7fQorICAgICAgICAjIEluZGlyZWN0IENhY2hlIHZhcmlhYmxlcyAoc2V0IGVsc2V3aGVyZSkKKyAgICAgICAgc2VsZi5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IFtdCisgICAgICAgIHNlbGYud29ybGRfdGFyZ2V0ID0gc2V0KCkKKyAgICAgICAgc2VsZi5iYmZpbGVfcHJpb3JpdHkgPSB7fQorCisgICAgZGVmIGFkZF9mcm9tX3JlY2lwZWluZm8oc2VsZiwgZm4sIGluZm9fYXJyYXkpOgorICAgICAgICBmb3IgaW5mbyBpbiBpbmZvX2FycmF5OgorICAgICAgICAgICAgaW5mby5hZGRfY2FjaGVEYXRhKHNlbGYsIGZuKQorCitjbGFzcyBNdWx0aVByb2Nlc3NDYWNoZShvYmplY3QpOgorICAgICIiIgorICAgIEJpdEJha2UgbXVsdGktcHJvY2VzcyBjYWNoZSBpbXBsZW1lbnRhdGlvbgorCisgICAgVXNlZCBieSB0aGUgY29kZXBhcnNlciAmIGZpbGUgY2hlY2tzdW0gY2FjaGVzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGVmaWxlID0gTm9uZQorICAgICAgICBzZWxmLmNhY2hlZGF0YSA9IHNlbGYuY3JlYXRlX2NhY2hlZGF0YSgpCisgICAgICAgIHNlbGYuY2FjaGVkYXRhX2V4dHJhcyA9IHNlbGYuY3JlYXRlX2NhY2hlZGF0YSgpCisKKyAgICBkZWYgaW5pdF9jYWNoZShzZWxmLCBkKToKKyAgICAgICAgY2FjaGVkaXIgPSAoZC5nZXRWYXIoIlBFUlNJU1RFTlRfRElSIiwgVHJ1ZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkpCisgICAgICAgIGlmIGNhY2hlZGlyIGluIFtOb25lLCAnJ106CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNhY2hlZGlyKQorICAgICAgICBzZWxmLmNhY2hlZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgc2VsZi5fX2NsYXNzX18uY2FjaGVfZmlsZV9uYW1lKQorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVzaW5nIGNhY2hlIGluICclcyciLCBzZWxmLmNhY2hlZmlsZSkKKworICAgICAgICBnbGYgPSBiYi51dGlscy5sb2NrZmlsZShzZWxmLmNhY2hlZmlsZSArICIubG9jayIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgICAgICAgICAgZGF0YSwgdmVyc2lvbiA9IHAubG9hZCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZ2xmKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShnbGYpCisKKyAgICAgICAgaWYgdmVyc2lvbiAhPSBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jYWNoZWRhdGEgPSBkYXRhCisKKyAgICBkZWYgY3JlYXRlX2NhY2hlZGF0YShzZWxmKToKKyAgICAgICAgZGF0YSA9IFt7fV0KKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzYXZlX2V4dHJhcyhzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2FjaGVmaWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siLCBzaGFyZWQ9VHJ1ZSkKKworICAgICAgICBpID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgbGYgPSBOb25lCisgICAgICAgIHdoaWxlIG5vdCBsZjoKKyAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2suIiArIHN0cihpKSwgcmV0cnk9RmFsc2UpCisgICAgICAgICAgICBpZiBub3QgbGYgb3Igb3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZWZpbGUgKyAiLSIgKyBzdHIoaSkpOgorICAgICAgICAgICAgICAgIGlmIGxmOgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgICAgICBsZiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5jYWNoZWZpbGUgKyAiLSIgKyBzdHIoaSksICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICAgICAgICAgIHAuZHVtcChbc2VsZi5jYWNoZWRhdGFfZXh0cmFzLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKworICAgIGRlZiBtZXJnZV9kYXRhKHNlbGYsIHNvdXJjZSwgZGVzdCk6CisgICAgICAgIGZvciBqIGluIHJhbmdlKDAsbGVuKGRlc3QpKToKKyAgICAgICAgICAgIGZvciBoIGluIHNvdXJjZVtqXToKKyAgICAgICAgICAgICAgICBpZiBoIG5vdCBpbiBkZXN0W2pdOgorICAgICAgICAgICAgICAgICAgICBkZXN0W2pdW2hdID0gc291cmNlW2pdW2hdCisKKyAgICBkZWYgc2F2ZV9tZXJnZShzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2FjaGVmaWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2xmID0gYmIudXRpbHMubG9ja2ZpbGUoc2VsZi5jYWNoZWZpbGUgKyAiLmxvY2siKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmNhY2hlZGF0YQorCisgICAgICAgIGZvciBmIGluIFt5IGZvciB5IGluIG9zLmxpc3RkaXIob3MucGF0aC5kaXJuYW1lKHNlbGYuY2FjaGVmaWxlKSkgaWYgeS5zdGFydHN3aXRoKG9zLnBhdGguYmFzZW5hbWUoc2VsZi5jYWNoZWZpbGUpICsgJy0nKV06CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzZWxmLmNhY2hlZmlsZSksIGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGYsICJyYiIpIGFzIGZkOgorICAgICAgICAgICAgICAgICAgICBwID0gcGlja2xlLlVucGlja2xlcihmZCkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFkYXRhLCB2ZXJzaW9uID0gcC5sb2FkKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHZlcnNpb24gIT0gc2VsZi5fX2NsYXNzX18uQ0FDSEVfVkVSU0lPTjoKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzZWxmLm1lcmdlX2RhdGEoZXh0cmFkYXRhLCBkYXRhKQorICAgICAgICAgICAgb3MudW5saW5rKGYpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY2FjaGVmaWxlLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGYsIC0xKQorICAgICAgICAgICAgcC5kdW1wKFtkYXRhLCBzZWxmLl9fY2xhc3NfXy5DQUNIRV9WRVJTSU9OXSkKKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGdsZikKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkgYi9iaXRiYWtlL2xpYi9iYi9jYWNoZV9leHRyYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y0OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvY2FjaGVfZXh0cmEucHkKQEAgLTAsMCArMSw3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgRXh0cmEgUmVjaXBlSW5mbyB3aWxsIGJlIGFsbCBkZWZpbmVkIGluIHRoaXMgZmlsZS4gQ3VycmVudGx5LAorIyBPbmx5IEhvYiAoSW1hZ2UgQ3JlYXRvcikgUmVxdWVzdHMgc29tZSBleHRyYSBmaWVsZHMuIFNvCisjIEhvYlJlY2lwZUluZm8gaXMgZGVmaW5lZC4gSXQncyBuYW1lZCBIb2JSZWNpcGVJbmZvIGJlY2F1c2UgaXQKKyMgaXMgaW50cm9kdWNlZCBieSAnaG9iJy4gVXNlcnMgY291bGQgYWxzbyBpbnRyb2R1Y2Ugb3RoZXIKKyMgUmVjaXBlSW5mbyBvciBzaW1wbHkgdXNlIHRob3NlIGFscmVhZHkgZGVmaW5lZCBSZWNpcGVJbmZvLgorIyBJbiB0aGUgZm9sbG93aW5nIHBhdGNoLCB0aGlzIG5ld2x5IGRlZmluZWQgbmV3IGV4dHJhIFJlY2lwZUluZm8KKyMgd2lsbCBiZSBkeW5hbWljYWxseSBsb2FkZWQgYW5kIHVzZWQgZm9yIGxvYWRpbmcvc2F2aW5nIHRoZSBleHRyYQorIyBjYWNoZSBmaWVsZHMgIAorCisjIENvcHlyaWdodCAoQykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gYmIuY2FjaGUgaW1wb3J0IFJlY2lwZUluZm9Db21tb24KKworY2xhc3MgSG9iUmVjaXBlSW5mbyhSZWNpcGVJbmZvQ29tbW9uKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgY2xhc3NuYW1lID0gIkhvYlJlY2lwZUluZm8iCisgICAgIyBwbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZW1iZXIgd2l0aCB0aGUgY29ycmVjdCBkYXRhIGNhY2hlIGZpbGUKKyAgICAjIHN1Y2ggYXMgKGJiX2NhY2hlLmRhdCwgYmJfZXh0cmFjYWNoZV9ob2IuZGF0KSAKKyAgICBjYWNoZWZpbGUgPSAiYmJfZXh0cmFjYWNoZV8iICsgY2xhc3NuYW1lICsiLmRhdCIgICAgICAgIAorCisgICAgIyBvdmVycmlkZSB0aGlzIG1lbWJlciB3aXRoIHRoZSBsaXN0IG9mIGV4dHJhIGNhY2hlIGZpZWxkcworICAgICMgdGhhdCB0aGlzIGNsYXNzIHdpbGwgcHJvdmlkZQorICAgIGNhY2hlZmllbGRzID0gWydzdW1tYXJ5JywgJ2xpY2Vuc2UnLCAnc2VjdGlvbicsCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nLCAnaG9tZXBhZ2UnLCAnYnVndHJhY2tlcicsCisgICAgICAgICAgICAncHJldmlzaW9uJywgJ2ZpbGVzX2luZm8nXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBtZXRhZGF0YSk6CisKKyAgICAgICAgc2VsZi5zdW1tYXJ5ID0gc2VsZi5nZXR2YXIoJ1NVTU1BUlknLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5saWNlbnNlID0gc2VsZi5nZXR2YXIoJ0xJQ0VOU0UnLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5zZWN0aW9uID0gc2VsZi5nZXR2YXIoJ1NFQ1RJT04nLCBtZXRhZGF0YSkKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IHNlbGYuZ2V0dmFyKCdERVNDUklQVElPTicsIG1ldGFkYXRhKQorICAgICAgICBzZWxmLmhvbWVwYWdlID0gc2VsZi5nZXR2YXIoJ0hPTUVQQUdFJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuYnVndHJhY2tlciA9IHNlbGYuZ2V0dmFyKCdCVUdUUkFDS0VSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYucHJldmlzaW9uID0gc2VsZi5nZXR2YXIoJ1BSJywgbWV0YWRhdGEpCisgICAgICAgIHNlbGYuZmlsZXNfaW5mbyA9IHNlbGYuZ2V0dmFyKCdGSUxFU19JTkZPJywgbWV0YWRhdGEpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaW5pdF9jYWNoZURhdGEoY2xzLCBjYWNoZWRhdGEpOgorICAgICAgICAjIENhY2hlRGF0YSBpbiBIb2IgUmVjaXBlSW5mbyBDbGFzcworICAgICAgICBjYWNoZWRhdGEuc3VtbWFyeSA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5saWNlbnNlID0ge30KKyAgICAgICAgY2FjaGVkYXRhLnNlY3Rpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZGVzY3JpcHRpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuaG9tZXBhZ2UgPSB7fQorICAgICAgICBjYWNoZWRhdGEuYnVndHJhY2tlciA9IHt9CisgICAgICAgIGNhY2hlZGF0YS5wcmV2aXNpb24gPSB7fQorICAgICAgICBjYWNoZWRhdGEuZmlsZXNfaW5mbyA9IHt9CisKKyAgICBkZWYgYWRkX2NhY2hlRGF0YShzZWxmLCBjYWNoZWRhdGEsIGZuKToKKyAgICAgICAgY2FjaGVkYXRhLnN1bW1hcnlbZm5dID0gc2VsZi5zdW1tYXJ5CisgICAgICAgIGNhY2hlZGF0YS5saWNlbnNlW2ZuXSA9IHNlbGYubGljZW5zZQorICAgICAgICBjYWNoZWRhdGEuc2VjdGlvbltmbl0gPSBzZWxmLnNlY3Rpb24KKyAgICAgICAgY2FjaGVkYXRhLmRlc2NyaXB0aW9uW2ZuXSA9IHNlbGYuZGVzY3JpcHRpb24KKyAgICAgICAgY2FjaGVkYXRhLmhvbWVwYWdlW2ZuXSA9IHNlbGYuaG9tZXBhZ2UKKyAgICAgICAgY2FjaGVkYXRhLmJ1Z3RyYWNrZXJbZm5dID0gc2VsZi5idWd0cmFja2VyCisgICAgICAgIGNhY2hlZGF0YS5wcmV2aXNpb25bZm5dID0gc2VsZi5wcmV2aXNpb24KKyAgICAgICAgY2FjaGVkYXRhLmZpbGVzX2luZm9bZm5dID0gc2VsZi5maWxlc19pbmZvCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weSBiL2JpdGJha2UvbGliL2JiL2NoZWNrc3VtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNGZmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9jaGVja3N1bS5weQpAQCAtMCwwICsxLDkwIEBACisjIExvY2FsIGZpbGUgY2hlY2tzdW0gY2FjaGUgaW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGJiLmNhY2hlIGltcG9ydCBNdWx0aVByb2Nlc3NDYWNoZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5DYWNoZSIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworCisjIG10aW1lIGNhY2hlIChub24tcGVyc2lzdGVudCkKKyMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGZpbGVzIGRvIG5vdCBjaGFuZ2UgZHVyaW5nIGJpdGJha2UgcnVuCitjbGFzcyBGaWxlTXRpbWVDYWNoZShvYmplY3QpOgorICAgIGNhY2hlID0ge30KKworICAgIGRlZiBjYWNoZWRfbXRpbWUoc2VsZiwgZik6CisgICAgICAgIGlmIGYgbm90IGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2ZdID0gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICByZXR1cm4gc2VsZi5jYWNoZVtmXQorCisgICAgZGVmIGNhY2hlZF9tdGltZV9ub2Vycm9yKHNlbGYsIGYpOgorICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gc2VsZi5jYWNoZVtmXQorCisgICAgZGVmIHVwZGF0ZV9tdGltZShzZWxmLCBmKToKKyAgICAgICAgc2VsZi5jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVbZl0KKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5jYWNoZS5jbGVhcigpCisKKyMgQ2hlY2tzdW0gKyBtdGltZSBjYWNoZSAocGVyc2lzdGVudCkKK2NsYXNzIEZpbGVDaGVja3N1bUNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKKyAgICBjYWNoZV9maWxlX25hbWUgPSAibG9jYWxfZmlsZV9jaGVja3N1bV9jYWNoZS5kYXQiCisgICAgQ0FDSEVfVkVSU0lPTiA9IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tdGltZV9jYWNoZSA9IEZpbGVNdGltZUNhY2hlKCkKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRfY2hlY2tzdW0oc2VsZiwgZik6CisgICAgICAgIGVudHJ5ID0gc2VsZi5jYWNoZWRhdGFbMF0uZ2V0KGYpCisgICAgICAgIGNtdGltZSA9IHNlbGYubXRpbWVfY2FjaGUuY2FjaGVkX210aW1lKGYpCisgICAgICAgIGlmIGVudHJ5OgorICAgICAgICAgICAgKG10aW1lLCBoYXNodmFsKSA9IGVudHJ5CisgICAgICAgICAgICBpZiBjbXRpbWUgPT0gbXRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2h2YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgImZpbGUgJXMgY2hhbmdlZCBtdGltZSwgcmVjb21wdXRlIGNoZWNrc3VtIiAlIGYpCisKKyAgICAgICAgaGFzaHZhbCA9IGJiLnV0aWxzLm1kNV9maWxlKGYpCisgICAgICAgIHNlbGYuY2FjaGVkYXRhX2V4dHJhc1swXVtmXSA9IChjbXRpbWUsIGhhc2h2YWwpCisgICAgICAgIHJldHVybiBoYXNodmFsCisKKyAgICBkZWYgbWVyZ2VfZGF0YShzZWxmLCBzb3VyY2UsIGRlc3QpOgorICAgICAgICBmb3IgaCBpbiBzb3VyY2VbMF06CisgICAgICAgICAgICBpZiBoIGluIGRlc3Q6CisgICAgICAgICAgICAgICAgKHNtdGltZSwgXykgPSBzb3VyY2VbMF1baF0KKyAgICAgICAgICAgICAgICAoZG10aW1lLCBfKSA9IGRlc3RbMF1baF0KKyAgICAgICAgICAgICAgICBpZiBzbXRpbWUgPiBkbXRpbWU6CisgICAgICAgICAgICAgICAgICAgIGRlc3RbMF1baF0gPSBzb3VyY2VbMF1baF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdFswXVtoXSA9IHNvdXJjZVswXVtoXQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvY29kZXBhcnNlci5weSBiL2JpdGJha2UvbGliL2JiL2NvZGVwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhM2FmNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2NvZGVwYXJzZXIucHkKQEAgLTAsMCArMSw0MTQgQEAKK2ltcG9ydCBhc3QKK2ltcG9ydCBjb2RlZ2VuCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBiYi51dGlscywgYmIuZGF0YQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCitmcm9tIHB5c2ggaW1wb3J0IHB5c2h5YWNjLCBweXNobGV4LCBzaGVycm9ycworZnJvbSBiYi5jYWNoZSBpbXBvcnQgTXVsdGlQcm9jZXNzQ2FjaGUKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5Db2RlUGFyc2VyJykKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBsb2dnZXIuaW5mbygnSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAgRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLicpCisKKworZGVmIGNoZWNrX2luZGVudChjb2Rlc3RyKToKKyAgICAiIiJJZiB0aGUgY29kZSBpcyBpbmRlbnRlZCwgYWRkIGEgdG9wIGxldmVsIHBpZWNlIG9mIGNvZGUgdG8gJ3JlbW92ZScgdGhlIGluZGVudGF0aW9uIiIiCisKKyAgICBpID0gMAorICAgIHdoaWxlIGNvZGVzdHJbaV0gaW4gWyJcbiIsICJcdCIsICIgIl06CisgICAgICAgIGkgPSBpICsgMQorCisgICAgaWYgaSA9PSAwOgorICAgICAgICByZXR1cm4gY29kZXN0cgorCisgICAgaWYgY29kZXN0cltpLTFdID09ICJcdCIgb3IgY29kZXN0cltpLTFdID09ICIgIjoKKyAgICAgICAgcmV0dXJuICJpZiAxOlxuIiArIGNvZGVzdHIKKworICAgIHJldHVybiBjb2Rlc3RyCisKKworIyBCYXNpY2FsbHkgcGlja2xlLCBpbiBweXRob24gMi43LjMgYXQgbGVhc3QsIGRvZXMgYmFkbHkgd2l0aCBkYXRhIGR1cGxpY2F0aW9uIAorIyB1cG9uIHBpY2tsaW5nIGFuZCB1bnBpY2tsaW5nLiBDb21iaW5lIHRoaXMgd2l0aCBkdXBsaWNhdGUgb2JqZWN0cyBhbmQgdGhpbmdzCisjIGFyZSBhIG1lc3MuCisjCisjIFdoZW4gdGhlIHNldHMgYXJlIG9yaWdpbmFsbHkgY3JlYXRlZCwgcHl0aG9uIGNhbGxzIGludGVybigpIG9uIHRoZSBzZXQga2V5cworIyB3aGljaCBzaWduaWZpY2FudGx5IGltcHJvdmVzIG1lbW9yeSB1c2FnZS4gU2FkbHkgdGhlIHBpY2tsZS91bnBpY2tsZSBwcm9jZXNzCisjIGRvZXNuJ3QgY2FsbCBpbnRlcm4oKSBvbiB0aGUga2V5cyBhbmQgcmVzdWx0cyBpbiB0aGUgc2FtZSBzdHJpbmdzIGJlaW5nIGR1cGxpY2F0ZWQKKyMgaW4gbWVtb3J5LiBUaGlzIGFsc28gbWVhbnMgcGlja2xlIHdpbGwgc2F2ZSB0aGUgc2FtZSBzdHJpbmcgbXVsdGlwbGUgdGltZXMgaW4KKyMgdGhlIGNhY2hlIGZpbGUuCisjCisjIEJ5IGhhdmluZyBzaGVsbCBhbmQgcHl0aG9uIGNhY2hlbGluZSBvYmplY3RzIHdpdGggc2V0c3RhdGUvZ2V0c3RhdGUsIHdlIGZvcmNlCisjIHRoZSBvYmplY3QgY3JlYXRpb24gdGhyb3VnaCBvdXIgb3duIHJvdXRpbmUgd2hlcmUgd2UgY2FuIGNhbGwgaW50ZXJuICh2aWEgaW50ZXJuU2V0KS4KKyMKKyMgV2UgYWxzbyB1c2UgaGFzaGFibGUgZnJvemVuc2V0cyBhbmQgZW5zdXJlIHdlIHVzZSByZWZlcmVuY2VzIHRvIHRoZXNlIHNvIHRoYXQKKyMgZHVwbGljYXRlcyBjYW4gYmUgcmVtb3ZlZCwgYm90aCBpbiBtZW1vcnkgYW5kIGluIHRoZSByZXN1bHRpbmcgcGlja2xlZCBkYXRhLgorIworIyBCeSBwbGF5aW5nIHRoZXNlIGdhbWVzLCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgZmlsZSBzaHJpbmtzIGRyYW1hdGljYWxseQorIyBtZWFuaW5nIGZhc3RlciBsb2FkIHRpbWVzIGFuZCB0aGUgcmVsb2FkZWQgY2FjaGUgZmlsZXMgYWxzbyBjb25zdW1lIG11Y2ggbGVzcworIyBtZW1vcnkuIFNtYWxsZXIgY2FjaGUgZmlsZXMsIGZhc3RlciBsb2FkIHRpbWVzIGFuZCBsb3dlciBtZW1vcnkgdXNhZ2UgaXMgZ29vZC4KKyMKKyMgQSBjdXN0b20gZ2V0c3RhdGUvc2V0c3RhdGUgdXNpbmcgdHVwbGVzIGlzIGFjdHVhbGx5IHdvcnRoIDE1JSBjYWNoZXNpemUgYnkKKyMgYXZvaWRpbmcgZHVwbGljYXRpb24gb2YgdGhlIGF0dHJpYnV0ZSBuYW1lcyEKKworY2xhc3MgU2V0Q2FjaGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2V0Y2FjaGUgPSB7fQorCisgICAgZGVmIGludGVyblNldChzZWxmLCBpdGVtcyk6CisgICAgICAgIAorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgaSBpbiBpdGVtczoKKyAgICAgICAgICAgIG5ldy5hcHBlbmQoaW50ZXJuKGkpKQorICAgICAgICBzID0gZnJvemVuc2V0KG5ldykKKyAgICAgICAgaWYgaGFzaChzKSBpbiBzZWxmLnNldGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0Y2FjaGVbaGFzaChzKV0KKyAgICAgICAgc2VsZi5zZXRjYWNoZVtoYXNoKHMpXSA9IHMKKyAgICAgICAgcmV0dXJuIHMKKworY29kZWNhY2hlID0gU2V0Q2FjaGUoKQorCitjbGFzcyBweXRob25DYWNoZUxpbmUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVmcywgZXhlY3MsIGNvbnRhaW5zKToKKyAgICAgICAgc2VsZi5yZWZzID0gY29kZWNhY2hlLmludGVyblNldChyZWZzKQorICAgICAgICBzZWxmLmV4ZWNzID0gY29kZWNhY2hlLmludGVyblNldChleGVjcykKKyAgICAgICAgc2VsZi5jb250YWlucyA9IHt9CisgICAgICAgIGZvciBjIGluIGNvbnRhaW5zOgorICAgICAgICAgICAgc2VsZi5jb250YWluc1tjXSA9IGNvZGVjYWNoZS5pbnRlcm5TZXQoY29udGFpbnNbY10pCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYucmVmcywgc2VsZi5leGVjcywgc2VsZi5jb250YWlucykKKworICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAocmVmcywgZXhlY3MsIGNvbnRhaW5zKSA9IHN0YXRlCisgICAgICAgIHNlbGYuX19pbml0X18ocmVmcywgZXhlY3MsIGNvbnRhaW5zKQorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgbCA9IChoYXNoKHNlbGYucmVmcyksIGhhc2goc2VsZi5leGVjcykpCisgICAgICAgIGZvciBjIGluIHNvcnRlZChzZWxmLmNvbnRhaW5zLmtleXMoKSk6CisgICAgICAgICAgICBsID0gbCArIChjLCBoYXNoKHNlbGYuY29udGFpbnNbY10pKQorICAgICAgICByZXR1cm4gaGFzaChsKQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKFtzdHIoc2VsZi5yZWZzKSwgc3RyKHNlbGYuZXhlY3MpLCBzdHIoc2VsZi5jb250YWlucyldKSAKKworCitjbGFzcyBzaGVsbENhY2hlTGluZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjcyk6CisgICAgICAgIHNlbGYuZXhlY3MgPSBjb2RlY2FjaGUuaW50ZXJuU2V0KGV4ZWNzKQorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmV4ZWNzKQorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgIChleGVjcykgPSBzdGF0ZQorICAgICAgICBzZWxmLl9faW5pdF9fKGV4ZWNzKQorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5leGVjcykKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZi5leGVjcykKKworY2xhc3MgQ29kZVBhcnNlckNhY2hlKE11bHRpUHJvY2Vzc0NhY2hlKToKKyAgICBjYWNoZV9maWxlX25hbWUgPSAiYmJfY29kZXBhcnNlci5kYXQiCisgICAgQ0FDSEVfVkVSU0lPTiA9IDcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgTXVsdGlQcm9jZXNzQ2FjaGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5weXRob25jYWNoZSA9IHNlbGYuY2FjaGVkYXRhWzBdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZSA9IHNlbGYuY2FjaGVkYXRhWzFdCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGVleHRyYXMgPSBzZWxmLmNhY2hlZGF0YV9leHRyYXNbMF0KKyAgICAgICAgc2VsZi5zaGVsbGNhY2hlZXh0cmFzID0gc2VsZi5jYWNoZWRhdGFfZXh0cmFzWzFdCisKKyAgICAgICAgIyBUbyBhdm9pZCBkdXBsaWNhdGlvbiBpbiB0aGUgY29kZXBhcnNlciBjYWNoZSwga2VlcAorICAgICAgICAjIGEgbG9va3VwIG9mIGhhc2hlcyBvZiBvYmplY3RzIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICBzZWxmLnB5dGhvbmNhY2hlbGluZXMgPSB7fQorICAgICAgICBzZWxmLnNoZWxsY2FjaGVsaW5lcyA9IHt9CisKKyAgICBkZWYgbmV3UHl0aG9uQ2FjaGVMaW5lKHNlbGYsIHJlZnMsIGV4ZWNzLCBjb250YWlucyk6CisgICAgICAgIGNhY2hlbGluZSA9IHB5dGhvbkNhY2hlTGluZShyZWZzLCBleGVjcywgY29udGFpbnMpCisgICAgICAgIGggPSBoYXNoKGNhY2hlbGluZSkKKyAgICAgICAgaWYgaCBpbiBzZWxmLnB5dGhvbmNhY2hlbGluZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5weXRob25jYWNoZWxpbmVzW2hdCisgICAgICAgIHNlbGYucHl0aG9uY2FjaGVsaW5lc1toXSA9IGNhY2hlbGluZQorICAgICAgICByZXR1cm4gY2FjaGVsaW5lCisKKyAgICBkZWYgbmV3U2hlbGxDYWNoZUxpbmUoc2VsZiwgZXhlY3MpOgorICAgICAgICBjYWNoZWxpbmUgPSBzaGVsbENhY2hlTGluZShleGVjcykKKyAgICAgICAgaCA9IGhhc2goY2FjaGVsaW5lKQorICAgICAgICBpZiBoIGluIHNlbGYuc2hlbGxjYWNoZWxpbmVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2hlbGxjYWNoZWxpbmVzW2hdCisgICAgICAgIHNlbGYuc2hlbGxjYWNoZWxpbmVzW2hdID0gY2FjaGVsaW5lCisgICAgICAgIHJldHVybiBjYWNoZWxpbmUKKworICAgIGRlZiBpbml0X2NhY2hlKHNlbGYsIGQpOgorICAgICAgICBNdWx0aVByb2Nlc3NDYWNoZS5pbml0X2NhY2hlKHNlbGYsIGQpCisKKyAgICAgICAgIyBjYWNoZWRhdGEgZ2V0cyByZS1hc3NpZ25lZCBpbiB0aGUgcGFyZW50CisgICAgICAgIHNlbGYucHl0aG9uY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVswXQorICAgICAgICBzZWxmLnNoZWxsY2FjaGUgPSBzZWxmLmNhY2hlZGF0YVsxXQorCisgICAgZGVmIGNyZWF0ZV9jYWNoZWRhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBbe30sIHt9XQorICAgICAgICByZXR1cm4gZGF0YQorCitjb2RlcGFyc2VyY2FjaGUgPSBDb2RlUGFyc2VyQ2FjaGUoKQorCitkZWYgcGFyc2VyX2NhY2hlX2luaXQoZCk6CisgICAgY29kZXBhcnNlcmNhY2hlLmluaXRfY2FjaGUoZCkKKworZGVmIHBhcnNlcl9jYWNoZV9zYXZlKGQpOgorICAgIGNvZGVwYXJzZXJjYWNoZS5zYXZlX2V4dHJhcyhkKQorCitkZWYgcGFyc2VyX2NhY2hlX3NhdmVtZXJnZShkKToKKyAgICBjb2RlcGFyc2VyY2FjaGUuc2F2ZV9tZXJnZShkKQorCitMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkKK2NsYXNzIEJ1ZmZlcmVkTG9nZ2VyKExvZ2dlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGxldmVsPTAsIHRhcmdldD1Ob25lKToKKyAgICAgICAgTG9nZ2VyLl9faW5pdF9fKHNlbGYsIG5hbWUpCisgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwpCisgICAgICAgIHNlbGYuYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKHJlY29yZCkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgZm9yIHJlY29yZCBpbiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LmhhbmRsZShyZWNvcmQpCisgICAgICAgIHNlbGYuYnVmZmVyID0gW10KKworY2xhc3MgUHl0aG9uUGFyc2VyKCk6CisgICAgZ2V0dmFycyA9ICgiLmdldFZhciIsICIuYXBwZW5kVmFyIiwgIi5wcmVwZW5kVmFyIikKKyAgICBjb250YWluc2Z1bmNzID0gKCJiYi51dGlscy5jb250YWlucyIsICJiYXNlX2NvbnRhaW5zIiwgImJiLnV0aWxzLmNvbnRhaW5zX2FueSIpCisgICAgZXhlY2Z1bmNzID0gKCJiYi5idWlsZC5leGVjX2Z1bmMiLCAiYmIuYnVpbGQuZXhlY190YXNrIikKKworICAgIGRlZiB3YXJuKHNlbGYsIGZ1bmMsIGFyZyk6CisgICAgICAgICIiIldhcm4gYWJvdXQgY2FsbHMgb2YgYml0YmFrZSBBUElzIHdoaWNoIHBhc3MgYSBub24tbGl0ZXJhbAorICAgICAgICBhcmd1bWVudCBmb3IgdGhlIHZhcmlhYmxlIG5hbWUsIGFzIHdlJ3JlIG5vdCBhYmxlIHRvIHRyYWNrIHN1Y2gKKyAgICAgICAgYSByZWZlcmVuY2UuCisgICAgICAgICIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmNzdHIgPSBjb2RlZ2VuLnRvX3NvdXJjZShmdW5jKQorICAgICAgICAgICAgYXJnc3RyID0gY29kZWdlbi50b19zb3VyY2UoYXJnKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoMiwgJ0ZhaWxlZCB0byBjb252ZXJ0IGZ1bmN0aW9uIGFuZCBhcmd1bWVudCB0byBzb3VyY2UgZm9ybScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygxLCBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlICUgKGZ1bmNzdHIsIGFyZ3N0cikpCisKKyAgICBkZWYgdmlzaXRfQ2FsbChzZWxmLCBub2RlKToKKyAgICAgICAgbmFtZSA9IHNlbGYuY2FsbGVkX25vZGVfbmFtZShub2RlLmZ1bmMpCisgICAgICAgIGlmIG5hbWUgYW5kIG5hbWUuZW5kc3dpdGgoc2VsZi5nZXR2YXJzKSBvciBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICB2YXJuYW1lID0gbm9kZS5hcmdzWzBdLnMKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuY29udGFpbnNmdW5jcyBhbmQgaXNpbnN0YW5jZShub2RlLmFyZ3NbMV0sIGFzdC5TdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluc1t2YXJuYW1lXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNbdmFybmFtZV0uYWRkKG5vZGUuYXJnc1sxXS5zKQorICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKG5vZGUuYXJnc1swXS5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndhcm4obm9kZS5mdW5jLCBub2RlLmFyZ3NbMF0pCisgICAgICAgIGVsaWYgbmFtZSBpbiBzZWxmLmV4ZWNmdW5jczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5hcmdzWzBdLCBhc3QuU3RyKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhcl9leGVjcy5hZGQobm9kZS5hcmdzWzBdLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud2Fybihub2RlLmZ1bmMsIG5vZGUuYXJnc1swXSkKKyAgICAgICAgZWxpZiBuYW1lIGFuZCBpc2luc3RhbmNlKG5vZGUuZnVuYywgKGFzdC5OYW1lLCBhc3QuQXR0cmlidXRlKSk6CisgICAgICAgICAgICBzZWxmLmV4ZWNzLmFkZChuYW1lKQorCisgICAgZGVmIGNhbGxlZF9ub2RlX25hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgICIiIkdpdmVuIGEgY2FsbGVkIG5vZGUsIHJldHVybiBpdHMgb3JpZ2luYWwgc3RyaW5nIGZvcm0iIiIKKyAgICAgICAgY29tcG9uZW50cyA9IFtdCisgICAgICAgIHdoaWxlIG5vZGU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG5vZGUuYXR0cikKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS52YWx1ZQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5OYW1lKToKKyAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChub2RlLmlkKQorICAgICAgICAgICAgICAgIHJldHVybiAnLicuam9pbihyZXZlcnNlZChjb21wb25lbnRzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2cpOgorICAgICAgICBzZWxmLnZhcl9leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KCkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5sb2cgPSBCdWZmZXJlZExvZ2dlcignQml0QmFrZS5EYXRhLlB5dGhvblBhcnNlcicsIGxvZ2dpbmcuREVCVUcsIGxvZykKKworICAgICAgICBzZWxmLnVuaGFuZGxlZF9tZXNzYWdlID0gImluIGNhbGwgb2YgJXMsIGFyZ3VtZW50ICclcycgaXMgbm90IGEgc3RyaW5nIGxpdGVyYWwiCisgICAgICAgIHNlbGYudW5oYW5kbGVkX21lc3NhZ2UgPSAid2hpbGUgcGFyc2luZyAlcywgJXMiICUgKG5hbWUsIHNlbGYudW5oYW5kbGVkX21lc3NhZ2UpCisKKyAgICBkZWYgcGFyc2VfcHl0aG9uKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub3Qgbm9kZSBvciBub3Qgbm9kZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaCA9IGhhc2goc3RyKG5vZGUpKQorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlOgorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5yZWZzKQorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVbaF0uZXhlY3MpCisgICAgICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5jb250YWluczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2ldID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZVtoXS5jb250YWluc1tpXSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnB5dGhvbmNhY2hlZXh0cmFzOgorICAgICAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5yZWZzKQorICAgICAgICAgICAgc2VsZi5leGVjcyA9IHNldChjb2RlcGFyc2VyY2FjaGUucHl0aG9uY2FjaGVleHRyYXNbaF0uZXhlY3MpCisgICAgICAgICAgICBzZWxmLmNvbnRhaW5zID0ge30KKyAgICAgICAgICAgIGZvciBpIGluIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5jb250YWluczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2ldID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXS5jb250YWluc1tpXSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNvZGUgPSBjb21waWxlKGNoZWNrX2luZGVudChzdHIobm9kZSkpLCAiPHN0cmluZz4iLCAiZXhlYyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzdC5QeUNGX09OTFlfQVNUKQorCisgICAgICAgIGZvciBuIGluIGFzdC53YWxrKGNvZGUpOgorICAgICAgICAgICAgaWYgbi5fX2NsYXNzX18uX19uYW1lX18gPT0gIkNhbGwiOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXRfQ2FsbChuKQorCisgICAgICAgIHNlbGYuZXhlY3MudXBkYXRlKHNlbGYudmFyX2V4ZWNzKQorCisgICAgICAgIGNvZGVwYXJzZXJjYWNoZS5weXRob25jYWNoZWV4dHJhc1toXSA9IGNvZGVwYXJzZXJjYWNoZS5uZXdQeXRob25DYWNoZUxpbmUoc2VsZi5yZWZlcmVuY2VzLCBzZWxmLmV4ZWNzLCBzZWxmLmNvbnRhaW5zKQorCitjbGFzcyBTaGVsbFBhcnNlcigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2cpOgorICAgICAgICBzZWxmLmZ1bmNkZWZzID0gc2V0KCkKKyAgICAgICAgc2VsZi5hbGxleGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoKQorICAgICAgICBzZWxmLmxvZyA9IEJ1ZmZlcmVkTG9nZ2VyKCdCaXRCYWtlLkRhdGEuJXMnICUgbmFtZSwgbG9nZ2luZy5ERUJVRywgbG9nKQorICAgICAgICBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSA9ICJ1bmFibGUgdG8gaGFuZGxlIG5vbi1saXRlcmFsIGNvbW1hbmQgJyVzJyIKKyAgICAgICAgc2VsZi51bmhhbmRsZWRfdGVtcGxhdGUgPSAid2hpbGUgcGFyc2luZyAlcywgJXMiICUgKG5hbWUsIHNlbGYudW5oYW5kbGVkX3RlbXBsYXRlKQorCisgICAgZGVmIHBhcnNlX3NoZWxsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIHN1cHBsaWVkIHNoZWxsIGNvZGUgaW4gYSBzdHJpbmcsIHJldHVybmluZyB0aGUgZXh0ZXJuYWwKKyAgICAgICAgY29tbWFuZHMgaXQgZXhlY3V0ZXMuCisgICAgICAgICIiIgorCisgICAgICAgIGggPSBoYXNoKHN0cih2YWx1ZSkpCisKKyAgICAgICAgaWYgaCBpbiBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZToKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgPSBzZXQoY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVbaF0uZXhlY3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5leGVjcworCisgICAgICAgIGlmIGggaW4gY29kZXBhcnNlcmNhY2hlLnNoZWxsY2FjaGVleHRyYXM6CisgICAgICAgICAgICBzZWxmLmV4ZWNzID0gc2V0KGNvZGVwYXJzZXJjYWNoZS5zaGVsbGNhY2hlZXh0cmFzW2hdLmV4ZWNzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3MKKworICAgICAgICBzZWxmLl9wYXJzZV9zaGVsbCh2YWx1ZSkKKyAgICAgICAgc2VsZi5leGVjcyA9IHNldChjbWQgZm9yIGNtZCBpbiBzZWxmLmFsbGV4ZWNzIGlmIGNtZCBub3QgaW4gc2VsZi5mdW5jZGVmcykKKworICAgICAgICBjb2RlcGFyc2VyY2FjaGUuc2hlbGxjYWNoZWV4dHJhc1toXSA9IGNvZGVwYXJzZXJjYWNoZS5uZXdTaGVsbENhY2hlTGluZShzZWxmLmV4ZWNzKQorCisgICAgICAgIHJldHVybiBzZWxmLmV4ZWNzCisKKyAgICBkZWYgX3BhcnNlX3NoZWxsKHNlbGYsIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG9rZW5zLCBfID0gcHlzaHlhY2MucGFyc2UodmFsdWUsIGVvZj1UcnVlLCBkZWJ1Zz1GYWxzZSkKKyAgICAgICAgZXhjZXB0IHB5c2hsZXguTmVlZE1vcmU6CisgICAgICAgICAgICByYWlzZSBzaGVycm9ycy5TaGVsbFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIEVPRiIpCisKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzc190b2tlbnModG9rZW4pCisKKyAgICBkZWYgcHJvY2Vzc190b2tlbnMoc2VsZiwgdG9rZW5zKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIHN1cHBsaWVkIHBvcnRpb24gb2YgdGhlIHN5bnRheCB0cmVlIGFzIHJldHVybmVkIGJ5CisgICAgICAgIHB5c2h5YWNjLnBhcnNlLgorICAgICAgICAiIiIKKworICAgICAgICBkZWYgZnVuY3Rpb25fZGVmaW5pdGlvbih2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLmZ1bmNkZWZzLmFkZCh2YWx1ZS5uYW1lKQorICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZS5ib2R5XSwgTm9uZQorCisgICAgICAgIGRlZiBjYXNlX2NsYXVzZSh2YWx1ZSk6CisgICAgICAgICAgICAjIEVsZW1lbnQgMCBvZiBlYWNoIGl0ZW0gaW4gdGhlIGNhc2UgaXMgdGhlIGxpc3Qgb2YgcGF0dGVybnMsIGFuZAorICAgICAgICAgICAgIyBFbGVtZW50IDEgb2YgZWFjaCBpdGVtIGluIHRoZSBjYXNlIGlzIHRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIGJlCisgICAgICAgICAgICAjIGV4ZWN1dGVkIHdoZW4gdGhhdCBwYXR0ZXJuIG1hdGNoZXMuCisgICAgICAgICAgICB3b3JkcyA9IGNoYWluKCpbaXRlbVswXSBmb3IgaXRlbSBpbiB2YWx1ZS5pdGVtc10pCisgICAgICAgICAgICBjbWRzICA9IGNoYWluKCpbaXRlbVsxXSBmb3IgaXRlbSBpbiB2YWx1ZS5pdGVtc10pCisgICAgICAgICAgICByZXR1cm4gY21kcywgd29yZHMKKworICAgICAgICBkZWYgaWZfY2xhdXNlKHZhbHVlKToKKyAgICAgICAgICAgIG1haW4gPSBjaGFpbih2YWx1ZS5jb25kLCB2YWx1ZS5pZl9jbWRzKQorICAgICAgICAgICAgcmVzdCA9IHZhbHVlLmVsc2VfY21kcworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN0LCB0dXBsZSkgYW5kIHJlc3RbMF0gPT0gImVsaWYiOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihtYWluLCBpZl9jbGF1c2UocmVzdFsxXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihtYWluLCByZXN0KQorCisgICAgICAgIGRlZiBzaW1wbGVfY29tbWFuZCh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgY2hhaW4odmFsdWUud29yZHMsIChhc3NpZ25bMV0gZm9yIGFzc2lnbiBpbiB2YWx1ZS5hc3NpZ25zKSkKKworICAgICAgICB0b2tlbl9oYW5kbGVycyA9IHsKKyAgICAgICAgICAgICJhbmRfb3IiOiBsYW1iZGEgeDogKCh4LmxlZnQsIHgucmlnaHQpLCBOb25lKSwKKyAgICAgICAgICAgICJhc3luYyI6IGxhbWJkYSB4OiAoW3hdLCBOb25lKSwKKyAgICAgICAgICAgICJicmFjZV9ncm91cCI6IGxhbWJkYSB4OiAoeC5jbWRzLCBOb25lKSwKKyAgICAgICAgICAgICJmb3JfY2xhdXNlIjogbGFtYmRhIHg6ICh4LmNtZHMsIHguaXRlbXMpLAorICAgICAgICAgICAgImZ1bmN0aW9uX2RlZmluaXRpb24iOiBmdW5jdGlvbl9kZWZpbml0aW9uLAorICAgICAgICAgICAgImlmX2NsYXVzZSI6IGxhbWJkYSB4OiAoaWZfY2xhdXNlKHgpLCBOb25lKSwKKyAgICAgICAgICAgICJwaXBlbGluZSI6IGxhbWJkYSB4OiAoeC5jb21tYW5kcywgTm9uZSksCisgICAgICAgICAgICAicmVkaXJlY3RfbGlzdCI6IGxhbWJkYSB4OiAoW3guY21kXSwgTm9uZSksCisgICAgICAgICAgICAic3Vic2hlbGwiOiBsYW1iZGEgeDogKHguY21kcywgTm9uZSksCisgICAgICAgICAgICAid2hpbGVfY2xhdXNlIjogbGFtYmRhIHg6IChjaGFpbih4LmNvbmRpdGlvbiwgeC5jbWRzKSwgTm9uZSksCisgICAgICAgICAgICAidW50aWxfY2xhdXNlIjogbGFtYmRhIHg6IChjaGFpbih4LmNvbmRpdGlvbiwgeC5jbWRzKSwgTm9uZSksCisgICAgICAgICAgICAic2ltcGxlX2NvbW1hbmQiOiBzaW1wbGVfY29tbWFuZCwKKyAgICAgICAgICAgICJjYXNlX2NsYXVzZSI6IGNhc2VfY2xhdXNlLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gdG9rZW4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb3JlX3Rva2Vucywgd29yZHMgPSB0b2tlbl9oYW5kbGVyc1tuYW1lXSh2YWx1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJVbnN1cHBvcnRlZCB0b2tlbiB0eXBlICIgKyBuYW1lKQorCisgICAgICAgICAgICBpZiBtb3JlX3Rva2VuczoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfdG9rZW5zKG1vcmVfdG9rZW5zKQorCisgICAgICAgICAgICBpZiB3b3JkczoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nfd29yZHMod29yZHMpCisKKyAgICBkZWYgcHJvY2Vzc193b3JkcyhzZWxmLCB3b3Jkcyk6CisgICAgICAgICIiIlByb2Nlc3MgYSBzZXQgb2YgJ3dvcmRzJyBpbiBweXNoeWFjYyBwYXJsYW5jZSwgd2hpY2ggaW5jbHVkZXMKKyAgICAgICAgZXh0cmFjdGlvbiBvZiBleGVjdXRlZCBjb21tYW5kcyBmcm9tICQoKSBibG9ja3MsIGFzIHdlbGwgYXMgZ3JhYmJpbmcKKyAgICAgICAgdGhlIGNvbW1hbmQgbmFtZSBhcmd1bWVudC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgd29yZHMgPSBsaXN0KHdvcmRzKQorICAgICAgICBmb3Igd29yZCBpbiBsaXN0KHdvcmRzKToKKyAgICAgICAgICAgIHd0cmVlID0gcHlzaGxleC5tYWtlX3dvcmR0cmVlKHdvcmRbMV0pCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXJ0LCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHBhcnRbMF0gaW4gKCdgJywgJyQoJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZyhwYXJ0WzE6LTFdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9zaGVsbChjb21tYW5kKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmRbMF0gaW4gKCJjbWRfbmFtZSIsICJjbWRfd29yZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgd29yZCBpbiB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkcy5yZW1vdmUod29yZCkKKworICAgICAgICB1c2V0b2tlbiA9IEZhbHNlCisgICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgorICAgICAgICAgICAgaWYgd29yZFswXSBpbiAoImNtZF9uYW1lIiwgImNtZF93b3JkIikgb3IgXAorICAgICAgICAgICAgICAgKHVzZXRva2VuIGFuZCB3b3JkWzBdID09ICJUT0tFTiIpOgorICAgICAgICAgICAgICAgIGlmICI9IiBpbiB3b3JkWzFdOgorICAgICAgICAgICAgICAgICAgICB1c2V0b2tlbiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGNtZCA9IHdvcmRbMV0KKyAgICAgICAgICAgICAgICBpZiBjbWQuc3RhcnRzd2l0aCgiJCIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5kZWJ1ZygxLCBzZWxmLnVuaGFuZGxlZF90ZW1wbGF0ZSAlIGNtZCkKKyAgICAgICAgICAgICAgICBlbGlmIGNtZCA9PSAiZXZhbCI6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAiICIuam9pbih3b3JkIGZvciBfLCB3b3JkIGluIHdvcmRzWzE6XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vfc2hlbGwoY29tbWFuZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFsbGV4ZWNzLmFkZChjbWQpCisgICAgICAgICAgICAgICAgYnJlYWsKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2NvbW1hbmQucHkgYi9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OGMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9jb21tYW5kLnB5CkBAIC0wLDAgKzEsNDYzIEBACisiIiIKK0JpdEJha2UgJ0NvbW1hbmQnIG1vZHVsZQorCitQcm92aWRlIGFuIGludGVyZmFjZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBiaXRiYWtlIHNlcnZlciB0aHJvdWdoICdjb21tYW5kcycKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCitUaGUgYml0YmFrZSBzZXJ2ZXIgdGFrZXMgJ2NvbW1hbmRzJyBmcm9tIGl0cyBVSS9jb21tYW5kbGluZS4KK0NvbW1hbmRzIGFyZSBlaXRoZXIgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLgorQXN5bmMgY29tbWFuZHMgcmV0dXJuIGRhdGEgdG8gdGhlIGNsaWVudCBpbiB0aGUgZm9ybSBvZiBldmVudHMuCitTeW5jIGNvbW1hbmRzIG11c3Qgb25seSByZXR1cm4gZGF0YSB0aHJvdWdoIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUKK2FuZCBtdXN0IG5vdCB0cmlnZ2VyIGV2ZW50cywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4KK0NvbW1hbmRzIGFyZSBxdWV1ZWQgaW4gYSBDb21tYW5kUXVldWUKKyIiIgorCitpbXBvcnQgYmIuZXZlbnQKK2ltcG9ydCBiYi5jb29rZXIKKworY2xhc3MgQ29tbWFuZENvbXBsZXRlZChiYi5ldmVudC5FdmVudCk6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kRXhpdChiYi5ldmVudC5FdmVudCk6CisgICAgZGVmICBfX2luaXRfXyhzZWxmLCBleGl0Y29kZSk6CisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZXhpdGNvZGUgPSBpbnQoZXhpdGNvZGUpCisKK2NsYXNzIENvbW1hbmRGYWlsZWQoQ29tbWFuZEV4aXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5lcnJvciA9IG1lc3NhZ2UKKyAgICAgICAgQ29tbWFuZEV4aXQuX19pbml0X18oc2VsZiwgMSkKKworY2xhc3MgQ29tbWFuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBDb21tYW5kOgorICAgICIiIgorICAgIEEgcXVldWUgb2YgYXN5bmNocm9ub3VzIGNvbW1hbmRzIGZvciBiaXRiYWtlCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvb2tlcik6CisgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgIHNlbGYuY21kc19zeW5jID0gQ29tbWFuZHNTeW5jKCkKKyAgICAgICAgc2VsZi5jbWRzX2FzeW5jID0gQ29tbWFuZHNBc3luYygpCisKKyAgICAgICAgIyBGSVhNRSBBZGQgbG9jayBmb3IgdGhpcworICAgICAgICBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQgPSBOb25lCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kbGluZSwgcm9fb25seSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9IGNvbW1hbmRsaW5lLnBvcCgwKQorICAgICAgICBpZiBoYXNhdHRyKENvbW1hbmRzU3luYywgY29tbWFuZCk6CisgICAgICAgICAgICAjIENhbiBydW4gc3luY2hyb25vdXMgY29tbWFuZHMgc3RyYWlnaHQgYXdheQorICAgICAgICAgICAgY29tbWFuZF9tZXRob2QgPSBnZXRhdHRyKHNlbGYuY21kc19zeW5jLCBjb21tYW5kKQorICAgICAgICAgICAgaWYgcm9fb25seToKKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjb21tYW5kX21ldGhvZCwgJ3JlYWRvbmx5Jykgb3IgRmFsc2UgPT0gZ2V0YXR0cihjb21tYW5kX21ldGhvZCwgJ3JlYWRvbmx5Jyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCAiTm90IGFibGUgdG8gZXhlY3V0ZSBub3QgcmVhZG9ubHkgY29tbWFuZHMgaW4gcmVhZG9ubHkgbW9kZSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGNvbW1hbmRfbWV0aG9kLCAnbmVlZGNvbmZpZycsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGVTeW5jKCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kX21ldGhvZChzZWxmLCBjb21tYW5kbGluZSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBleGMuYXJnc1swXQorICAgICAgICAgICAgZXhjZXB0IChFeGNlcHRpb24sIFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LCBOb25lCisgICAgICAgIGlmIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCAiQnVzeSAoJXMgaW4gcHJvZ3Jlc3MpIiAlIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZFswXQorICAgICAgICBpZiBjb21tYW5kIG5vdCBpbiBDb21tYW5kc0FzeW5jLl9fZGljdF9fOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsICJObyBzdWNoIGNvbW1hbmQiCisgICAgICAgIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCA9IChjb21tYW5kLCBjb21tYW5kbGluZSkKKyAgICAgICAgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5zZXJ2ZXJfcmVnaXN0ZXJfaWRsZWNhbGxiYWNrKHNlbGYuY29va2VyLnJ1bkNvbW1hbmRzLCBzZWxmLmNvb2tlcikKKyAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKKworICAgIGRlZiBydW5Bc3luY0NvbW1hbmQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuY29va2VyLnN0YXRlIGluIChiYi5jb29rZXIuc3RhdGUuZXJyb3IsIGJiLmNvb2tlci5zdGF0ZS5zaHV0ZG93biwgYmIuY29va2VyLnN0YXRlLmZvcmNlc2h1dGRvd24pOgorICAgICAgICAgICAgICAgICMgdXBkYXRlQ2FjaGUgd2lsbCB0cmlnZ2VyIGEgc2h1dGRvd24gb2YgdGhlIHBhcnNlcgorICAgICAgICAgICAgICAgICMgYW5kIHRoZW4gcmFpc2UgQkJIYW5kbGVkRXhjZXB0aW9uIHRyaWdnZXJpbmcgYW4gZXhpdAorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAoY29tbWFuZCwgb3B0aW9ucykgPSBzZWxmLmN1cnJlbnRBc3luY0NvbW1hbmQKKyAgICAgICAgICAgICAgICBjb21tYW5kbWV0aG9kID0gZ2V0YXR0cihDb21tYW5kc0FzeW5jLCBjb21tYW5kKQorICAgICAgICAgICAgICAgIG5lZWRjYWNoZSA9IGdldGF0dHIoIGNvbW1hbmRtZXRob2QsICJuZWVkY2FjaGUiICkKKyAgICAgICAgICAgICAgICBpZiBuZWVkY2FjaGUgYW5kIHNlbGYuY29va2VyLnN0YXRlICE9IGJiLmNvb2tlci5zdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZG1ldGhvZChzZWxmLmNtZHNfYXN5bmMsIHNlbGYsIG9wdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0IGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKCJJbnRlcnJ1cHRlZCIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgYXJnID0gZXhjLmFyZ3NbMF0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZChhcmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoQXN5bmNDb21tYW5kKCJFeGl0ZWQgd2l0aCAlcyIgJSBhcmcpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaEFzeW5jQ29tbWFuZCgiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hBc3luY0NvbW1hbmQodHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGZpbmlzaEFzeW5jQ29tbWFuZChzZWxmLCBtc2c9Tm9uZSwgY29kZT1Ob25lKToKKyAgICAgICAgaWYgbXNnIG9yIG1zZyA9PSAiIjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29tbWFuZEZhaWxlZChtc2cpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBlbGlmIGNvZGU6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKENvbW1hbmRFeGl0KGNvZGUpLCBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb21tYW5kQ29tcGxldGVkKCksIHNlbGYuY29va2VyLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIHNlbGYuY3VycmVudEFzeW5jQ29tbWFuZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb29rZXIuZmluaXNoY29tbWFuZCgpCisKK2NsYXNzIENvbW1hbmRzU3luYzoKKyAgICAiIiIKKyAgICBBIGNsYXNzIG9mIHN5bmNocm9ub3VzIGNvbW1hbmRzCisgICAgVGhlc2Ugc2hvdWxkIHJ1biBxdWlja2x5IHNvIGFzIG5vdCB0byBodXJ0IGludGVyYWN0aXZlIHBlcmZvcm1hbmNlLgorICAgIFRoZXNlIG11c3Qgbm90IGluZmx1ZW5jZSBhbnkgcnVubmluZyBzeW5jaHJvbm91cyBjb21tYW5kLgorICAgICIiIgorCisgICAgZGVmIHN0YXRlU2h1dGRvd24oc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyaWdnZXIgY29va2VyICdzaHV0ZG93bicgbW9kZQorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2h1dGRvd24oRmFsc2UpCisKKyAgICBkZWYgc3RhdGVGb3JjZVNodXRkb3duKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBTdG9wIHRoZSBjb29rZXIKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNodXRkb3duKFRydWUpCisKKyAgICBkZWYgZ2V0QWxsS2V5c1dpdGhGbGFncyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBhIGR1bXAgb2YgdGhlIGdsb2JhbCBzdGF0ZS4gQ2FsbCB3aXRoCisgICAgICAgIHZhcmlhYmxlIGZsYWdzIHRvIGJlIHJldHJpZXZlZCBhcyBwYXJhbXMuCisgICAgICAgICIiIgorICAgICAgICBmbGFnbGlzdCA9IHBhcmFtc1swXQorICAgICAgICByZXR1cm4gY29tbWFuZC5jb29rZXIuZ2V0QWxsS2V5c1dpdGhGbGFncyhmbGFnbGlzdCkKKyAgICBnZXRBbGxLZXlzV2l0aEZsYWdzLnJlYWRvbmx5ID0gVHJ1ZQorCisgICAgZGVmIGdldFZhcmlhYmxlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGZyb20gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICBleHBhbmQgPSBUcnVlCisgICAgICAgIGlmIGxlbihwYXJhbXMpID4gMToKKyAgICAgICAgICAgIGV4cGFuZCA9IChwYXJhbXNbMV0gPT0gIlRydWUiKQorCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5kYXRhLmdldFZhcih2YXJuYW1lLCBleHBhbmQpCisgICAgZ2V0VmFyaWFibGUucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgc2V0VmFyaWFibGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgdmFsdWUgb2YgdmFyaWFibGUgaW4gZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgdmFybmFtZSA9IHBhcmFtc1swXQorICAgICAgICB2YWx1ZSA9IHN0cihwYXJhbXNbMV0pCisgICAgICAgIGNvbW1hbmQuY29va2VyLmRhdGEuc2V0VmFyKHZhcm5hbWUsIHZhbHVlKQorCisgICAgZGVmIHNldENvbmZpZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSB2YWx1ZSBvZiB2YXJpYWJsZSBpbiBjb25maWd1cmF0aW9uCisgICAgICAgICIiIgorICAgICAgICB2YXJuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIHZhbHVlID0gc3RyKHBhcmFtc1sxXSkKKyAgICAgICAgc2V0YXR0cihjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLCB2YXJuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBlbmFibGVEYXRhVHJhY2tpbmcoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBoaXN0b3J5IHRyYWNraW5nIGZvciB2YXJpYWJsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLmVuYWJsZURhdGFUcmFja2luZygpCisKKyAgICBkZWYgZGlzYWJsZURhdGFUcmFja2luZyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRGlzYWJsZSBoaXN0b3J5IHRyYWNraW5nIGZvciB2YXJpYWJsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLmRpc2FibGVEYXRhVHJhY2tpbmcoKQorCisgICAgZGVmIHNldFByZVBvc3RDb25mRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgcHJlZmlsZXMgPSBwYXJhbXNbMF0uc3BsaXQoKQorICAgICAgICBwb3N0ZmlsZXMgPSBwYXJhbXNbMV0uc3BsaXQoKQorICAgICAgICBjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLnByZWZpbGUgPSBwcmVmaWxlcworICAgICAgICBjb21tYW5kLmNvb2tlci5jb25maWd1cmF0aW9uLnBvc3RmaWxlID0gcG9zdGZpbGVzCisgICAgc2V0UHJlUG9zdENvbmZGaWxlcy5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBnZXRDcHVDb3VudChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHRoZSBDUFUgY291bnQgb24gdGhlIGJpdGJha2Ugc2VydmVyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gYmIudXRpbHMuY3B1X2NvdW50KCkKKyAgICBnZXRDcHVDb3VudC5yZWFkb25seSA9IFRydWUKKyAgICBnZXRDcHVDb3VudC5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBtYXRjaEZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgZk1hdGNoID0gcGFyYW1zWzBdCisgICAgICAgIHJldHVybiBjb21tYW5kLmNvb2tlci5tYXRjaEZpbGUoZk1hdGNoKQorICAgIG1hdGNoRmlsZS5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBnZW5lcmF0ZU5ld0ltYWdlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGltYWdlID0gcGFyYW1zWzBdCisgICAgICAgIGJhc2VfaW1hZ2UgPSBwYXJhbXNbMV0KKyAgICAgICAgcGFja2FnZV9xdWV1ZSA9IHBhcmFtc1syXQorICAgICAgICB0aW1lc3RhbXAgPSBwYXJhbXNbM10KKyAgICAgICAgZGVzY3JpcHRpb24gPSBwYXJhbXNbNF0KKyAgICAgICAgcmV0dXJuIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlTmV3SW1hZ2UoaW1hZ2UsIGJhc2VfaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3F1ZXVlLCB0aW1lc3RhbXAsIGRlc2NyaXB0aW9uKQorCisgICAgZGVmIGVuc3VyZURpcihzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICBkaXJlY3RvcnkgPSBwYXJhbXNbMF0KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRpcmVjdG9yeSkKKyAgICBlbnN1cmVEaXIubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0VmFyRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2F2ZSBhIHZhcmlhYmxlIGluIGEgZmlsZTsgdXNlZCBmb3Igc2F2aW5nIGluIGEgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICIiIgorICAgICAgICB2YXIgPSBwYXJhbXNbMF0KKyAgICAgICAgdmFsID0gcGFyYW1zWzFdCisgICAgICAgIGRlZmF1bHRfZmlsZSA9IHBhcmFtc1syXQorICAgICAgICBvcCA9IHBhcmFtc1szXQorICAgICAgICBjb21tYW5kLmNvb2tlci5tb2RpZnlDb25maWd1cmF0aW9uVmFyKHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsIG9wKQorICAgIHNldFZhckZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgcmVtb3ZlVmFyRmlsZShzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gZnJvbSBhIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIHZhciA9IHBhcmFtc1swXQorICAgICAgICBjb21tYW5kLmNvb2tlci5yZW1vdmVDb25maWd1cmF0aW9uVmFyKHZhcikKKyAgICByZW1vdmVWYXJGaWxlLm5lZWRjb25maWcgPSBGYWxzZQorCisgICAgZGVmIGNyZWF0ZUNvbmZpZ0ZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhbiBleHRyYSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIG5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgY29tbWFuZC5jb29rZXIuY3JlYXRlQ29uZmlnRmlsZShuYW1lKQorICAgIGNyZWF0ZUNvbmZpZ0ZpbGUubmVlZGNvbmZpZyA9IEZhbHNlCisKKyAgICBkZWYgc2V0RXZlbnRNYXNrKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIGhhbmRsZXJOdW0gPSBwYXJhbXNbMF0KKyAgICAgICAgbGxldmVsID0gcGFyYW1zWzFdCisgICAgICAgIGRlYnVnX2RvbWFpbnMgPSBwYXJhbXNbMl0KKyAgICAgICAgbWFzayA9IHBhcmFtc1szXQorICAgICAgICByZXR1cm4gYmIuZXZlbnQuc2V0X1VJSG1hc2soaGFuZGxlck51bSwgbGxldmVsLCBkZWJ1Z19kb21haW5zLCBtYXNrKQorICAgIHNldEV2ZW50TWFzay5uZWVkY29uZmlnID0gRmFsc2UKKworICAgIGRlZiBzZXRGZWF0dXJlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBjb29rZXIgZmVhdHVyZXMgdG8gaW5jbHVkZSB0aGUgcGFzc2VkIGxpc3Qgb2YgZmVhdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGZlYXR1cmVzID0gcGFyYW1zWzBdCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNldEZlYXR1cmVzKGZlYXR1cmVzKQorICAgIHNldEZlYXR1cmVzLm5lZWRjb25maWcgPSBGYWxzZQorICAgICMgYWx0aG91Z2ggd2UgY2hhbmdlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29va2VyLCB0aGlzIGlzIHRyYW5zcGFyZW50IHNpbmNlCisgICAgIyB3ZSBhbHdheXMgdGFrZSBhbmQgbGVhdmUgdGhlIGNvb2tlciBpbiBzdGF0ZS5pbml0aWFsCisgICAgc2V0RmVhdHVyZXMucmVhZG9ubHkgPSBUcnVlCisKKyAgICBkZWYgdXBkYXRlQ29uZmlnKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgIG9wdGlvbnMgPSBwYXJhbXNbMF0KKyAgICAgICAgZW52aXJvbm1lbnQgPSBwYXJhbXNbMV0KKyAgICAgICAgY29tbWFuZC5jb29rZXIudXBkYXRlQ29uZmlnT3B0cyhvcHRpb25zLCBlbnZpcm9ubWVudCkKKyAgICB1cGRhdGVDb25maWcubmVlZGNvbmZpZyA9IEZhbHNlCisKK2NsYXNzIENvbW1hbmRzQXN5bmM6CisgICAgIiIiCisgICAgQSBjbGFzcyBvZiBhc3luY2hyb25vdXMgY29tbWFuZHMKKyAgICBUaGVzZSBmdW5jdGlvbnMgY29tbXVuaWNhdGUgdmlhIGdlbmVyYXRlZCBldmVudHMuCisgICAgQW55IGZ1bmN0aW9uIHRoYXQgcmVxdWlyZXMgbWV0YWRhdGEgcGFyc2luZyBzaG91bGQgYmUgaGVyZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZEZpbGUoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgc2luZ2xlIHNwZWNpZmllZCAuYmIgZmlsZQorICAgICAgICAiIiIKKyAgICAgICAgYmZpbGUgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkRmlsZShiZmlsZSwgdGFzaykKKyAgICBidWlsZEZpbGUubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBidWlsZFRhcmdldHMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIGEgc2V0IG9mIHRhcmdldHMKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmJ1aWxkVGFyZ2V0cyhwa2dzX3RvX2J1aWxkLCB0YXNrKQorICAgIGJ1aWxkVGFyZ2V0cy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVEZXBUcmVlRXZlbnQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGFuIGV2ZW50IGNvbnRhaW5pbmcgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBwYXJhbXNbMF0KKyAgICAgICAgdGFzayA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmdlbmVyYXRlRGVwVHJlZUV2ZW50KHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZURlcFRyZWVFdmVudC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgZ2VuZXJhdGVEb3RHcmFwaChzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHRvIGRpc2sgYXMgLmRvdCBmaWxlcworICAgICAgICAiIiIKKyAgICAgICAgcGtnc190b19idWlsZCA9IHBhcmFtc1swXQorICAgICAgICB0YXNrID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVEb3RHcmFwaEZpbGVzKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZURvdEdyYXBoLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBnZW5lcmF0ZVRhcmdldHNUcmVlKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIHRyZWUgb2YgYnVpbGRhYmxlIHRhcmdldHMuCisgICAgICAgIElmIGtsYXNzIGlzIHByb3ZpZGVkIGVuc3VyZSBhbGwgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGNsYXNzIGFyZQorICAgICAgICBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZSBsaXN0LgorICAgICAgICBJZiBwa2dfbGlzdCBwcm92aWRlZCB1c2UgdGhhdCBsaXN0IChwbHVzIGFueSBleHRyYXMgYnJvdWdodCBpbiBieQorICAgICAgICBrbGFzcykgcmF0aGVyIHRoYW4gZ2VuZXJhdGluZyBhIHRyZWUgZm9yIGFsbCBwYWNrYWdlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGtsYXNzID0gcGFyYW1zWzBdCisgICAgICAgIHBrZ19saXN0ID0gcGFyYW1zWzFdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZ2VuZXJhdGVUYXJnZXRzVHJlZShrbGFzcywgcGtnX2xpc3QpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBnZW5lcmF0ZVRhcmdldHNUcmVlLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBmaW5kQ29yZUJhc2VGaWxlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBjZXJ0YWluIGZpbGVzIGluIENPUkVCQVNFIGRpcmVjdG9yeS4gaS5lLiBMYXllcnMKKyAgICAgICAgIiIiCisgICAgICAgIHN1YmRpciA9IHBhcmFtc1swXQorICAgICAgICBmaWxlbmFtZSA9IHBhcmFtc1sxXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLmZpbmRDb3JlQmFzZUZpbGVzKHN1YmRpciwgZmlsZW5hbWUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29yZUJhc2VGaWxlcy5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlcyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBjb25maWcgZmlsZXMgd2hpY2ggcHJvdmlkZSBhcHByb3ByaWF0ZSB2YWx1ZXMKKyAgICAgICAgZm9yIHRoZSBwYXNzZWQgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gaS5lLiBNQUNISU5FCisgICAgICAgICIiIgorICAgICAgICB2YXJuYW1lID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuZmluZENvbmZpZ0ZpbGVzKHZhcm5hbWUpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICBmaW5kQ29uZmlnRmlsZXMubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kRmlsZXNNYXRjaGluZ0luRGlyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIGltcGxlbWVudGF0aW9uIGZpbGVzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcGF0dGVybgorICAgICAgICBpbiB0aGUgcmVxdWVzdGVkIHN1YmRpcmVjdG9yeSBvZiBhIEJCUEFUSAorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHBhcmFtc1swXQorICAgICAgICBkaXJlY3RvcnkgPSBwYXJhbXNbMV0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kRmlsZXNNYXRjaGluZ0luRGlyKHBhdHRlcm4sIGRpcmVjdG9yeSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIubmVlZGNhY2hlID0gRmFsc2UKKworICAgIGRlZiBmaW5kQ29uZmlnRmlsZVBhdGgoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIHBhdGggb2YgdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGNvbmZpZ2ZpbGUgPSBwYXJhbXNbMF0KKworICAgICAgICBjb21tYW5kLmNvb2tlci5maW5kQ29uZmlnRmlsZVBhdGgoY29uZmlnZmlsZSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIGZpbmRDb25maWdGaWxlUGF0aC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmLCBjb21tYW5kLCBwYXJhbXMpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZlcnNpb25zCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5zaG93VmVyc2lvbnMoKQorICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgc2hvd1ZlcnNpb25zLm5lZWRjYWNoZSA9IFRydWUKKworICAgIGRlZiBzaG93RW52aXJvbm1lbnRUYXJnZXQoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFByaW50IHRoZSBlbnZpcm9ubWVudCBvZiBhIHRhcmdldCByZWNpcGUKKyAgICAgICAgKG5lZWRzIHRoZSBjYWNoZSB0byB3b3JrIG91dCB3aGljaCByZWNpcGUgdG8gdXNlKQorICAgICAgICAiIiIKKyAgICAgICAgcGtnID0gcGFyYW1zWzBdCisKKyAgICAgICAgY29tbWFuZC5jb29rZXIuc2hvd0Vudmlyb25tZW50KE5vbmUsIHBrZykKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dFbnZpcm9ubWVudFRhcmdldC5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgc2hvd0Vudmlyb25tZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBQcmludCB0aGUgc3RhbmRhcmQgZW52aXJvbm1lbnQKKyAgICAgICAgb3IgaWYgc3BlY2lmaWVkIHRoZSBlbnZpcm9ubWVudCBmb3IgYSBzcGVjaWZpZWQgcmVjaXBlCisgICAgICAgICIiIgorICAgICAgICBiZmlsZSA9IHBhcmFtc1swXQorCisgICAgICAgIGNvbW1hbmQuY29va2VyLnNob3dFbnZpcm9ubWVudChiZmlsZSkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHNob3dFbnZpcm9ubWVudC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHBhcnNlRmlsZXMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSAuYmIgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmQuY29va2VyLnVwZGF0ZUNhY2hlKCkKKyAgICAgICAgY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgIHBhcnNlRmlsZXMubmVlZGNhY2hlID0gVHJ1ZQorCisgICAgZGVmIGNvbXBhcmVSZXZpc2lvbnMoc2VsZiwgY29tbWFuZCwgcGFyYW1zKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSAuYmIgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJiLmZldGNoLmZldGNoZXJfY29tcGFyZV9yZXZpc2lvbnMoY29tbWFuZC5jb29rZXIuZGF0YSk6CisgICAgICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZChjb2RlPTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgY29tcGFyZVJldmlzaW9ucy5uZWVkY2FjaGUgPSBUcnVlCisKKyAgICBkZWYgdHJpZ2dlckV2ZW50KHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBUcmlnZ2VyIGEgY2VydGFpbiBldmVudAorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnQgPSBwYXJhbXNbMF0KKyAgICAgICAgYmIuZXZlbnQuZmlyZShldmFsKGV2ZW50KSwgY29tbWFuZC5jb29rZXIuZGF0YSkKKyAgICAgICAgY29tbWFuZC5jdXJyZW50QXN5bmNDb21tYW5kID0gTm9uZQorICAgIHRyaWdnZXJFdmVudC5uZWVkY2FjaGUgPSBGYWxzZQorCisgICAgZGVmIHJlc2V0Q29va2VyKHNlbGYsIGNvbW1hbmQsIHBhcmFtcyk6CisgICAgICAgICIiIgorICAgICAgICBSZXNldCB0aGUgY29va2VyIHRvIGl0cyBpbml0aWFsIHN0YXRlLCB0aHVzIGZvcmNpbmcgYSByZXBhcnNlIGZvcgorICAgICAgICBhbnkgYXN5bmMgY29tbWFuZCB0aGF0IGhhcyB0aGUgbmVlZGNhY2hlIHByb3BlcnR5IHNldCB0byBUcnVlCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kLmNvb2tlci5yZXNldCgpCisgICAgICAgIGNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKCkKKyAgICByZXNldENvb2tlci5uZWVkY2FjaGUgPSBGYWxzZQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9jb21wYXQucHkgYi9iaXRiYWtlL2xpYi9iYi9jb21wYXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxOTIzZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2NvbXBhdC5weQpAQCAtMCwwICsxLDYgQEAKKyIiIkNvZGUgcHVsbGVkIGZyb20gZnV0dXJlIHB5dGhvbiB2ZXJzaW9ucywgaGVyZSBmb3IgY29tcGF0aWJpbGl0eSIiIgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNdXRhYmxlTWFwcGluZywgS2V5c1ZpZXcsIFZhbHVlc1ZpZXcsIEl0ZW1zVmlldywgT3JkZXJlZERpY3QKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZworCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2Nvb2tlci5weSBiL2JpdGJha2UvbGliL2JiL2Nvb2tlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ3ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvY29va2VyLnB5CkBAIC0wLDAgKzEsMjEzOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBNaWNoYWVsICdNaWNrZXknIExhdWVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MsIGdsb2IsIG9zLnBhdGgsIHJlLCB0aW1lCitpbXBvcnQgYXRleGl0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHNyZV9jb25zdGFudHMKK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgYmIsIGJiLmV4Y2VwdGlvbnMsIGJiLmNvbW1hbmQKK2Zyb20gYmIgaW1wb3J0IHV0aWxzLCBkYXRhLCBwYXJzZSwgZXZlbnQsIGNhY2hlLCBwcm92aWRlcnMsIHRhc2tkYXRhLCBydW5xdWV1ZSwgYnVpbGQKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHByc2Vydi5zZXJ2CitpbXBvcnQgcHlpbm90aWZ5CisKK2xvZ2dlciAgICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorY29sbGVjdGxvZyAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Db2xsZWN0aW9uIikKK2J1aWxkbG9nICAgID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuQnVpbGQiKQorcGFyc2Vsb2cgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QYXJzaW5nIikKK3Byb3ZpZGVybG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUHJvdmlkZXIiKQorCitjbGFzcyBOb1NwZWNpZmljTWF0Y2goYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm8gb3IgbXVsdGlwbGUgZmlsZSBtYXRjaGVzIGFyZSBmb3VuZAorICAgICIiIgorCitjbGFzcyBOb3RoaW5nVG9CdWlsZChFeGNlcHRpb24pOgorICAgICIiIgorICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGJ1aWxkCisgICAgIiIiCisKK2NsYXNzIENvbGxlY3Rpb25FcnJvcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIgorICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBsYXllciBjb25maWd1cmF0aW9uIGlzIGluY29ycmVjdAorICAgICIiIgorCitjbGFzcyBzdGF0ZToKKyAgICBpbml0aWFsLCBwYXJzaW5nLCBydW5uaW5nLCBzaHV0ZG93biwgZm9yY2VzaHV0ZG93biwgc3RvcHBlZCwgZXJyb3IgPSByYW5nZSg3KQorCisKK2NsYXNzIFNraXBwZWRQYWNrYWdlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmZvID0gTm9uZSwgcmVhc29uID0gTm9uZSk6CisgICAgICAgIHNlbGYucG4gPSBOb25lCisgICAgICAgIHNlbGYuc2tpcHJlYXNvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5wcm92aWRlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5ycHJvdmlkZXMgPSBOb25lCisKKyAgICAgICAgaWYgaW5mbzoKKyAgICAgICAgICAgIHNlbGYucG4gPSBpbmZvLnBuCisgICAgICAgICAgICBzZWxmLnNraXByZWFzb24gPSBpbmZvLnNraXByZWFzb24KKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgPSBpbmZvLnByb3ZpZGVzCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9IGluZm8ucnByb3ZpZGVzCisgICAgICAgIGVsaWYgcmVhc29uOgorICAgICAgICAgICAgc2VsZi5za2lwcmVhc29uID0gcmVhc29uCisKKworY2xhc3MgQ29va2VyRmVhdHVyZXMob2JqZWN0KToKKyAgICBfZmVhdHVyZV9saXN0ID0gW0hPQl9FWFRSQV9DQUNIRVMsIFNFTkRfREVQRU5EU19UUkVFLCBCQVNFREFUQVNUT1JFX1RSQUNLSU5HLCBTRU5EX1NBTklUWUVWRU5UU10gPSByYW5nZSg0KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mZWF0dXJlcz1zZXQoKQorCisgICAgZGVmIHNldEZlYXR1cmUoc2VsZiwgZik6CisgICAgICAgICMgdmFsaWRhdGUgd2UgZ290IGEgcmVxdWVzdCBmb3IgYSBmZWF0dXJlIHdlIHN1cHBvcnQKKyAgICAgICAgaWYgZiBub3QgaW4gQ29va2VyRmVhdHVyZXMuX2ZlYXR1cmVfbGlzdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9mZWF0dXJlcy5hZGQoZikKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgZik6CisgICAgICAgIHJldHVybiBmIGluIHNlbGYuX2ZlYXR1cmVzCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mZWF0dXJlcy5fX2l0ZXJfXygpCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZlYXR1cmVzLm5leHQoKQorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IworIyBCQkNvb2tlcgorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0jCitjbGFzcyBCQkNvb2tlcjoKKyAgICAiIiIKKyAgICBNYW5hZ2VzIG9uZSBiaXRiYWtlIGJ1aWxkIHJ1bgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVTZXQ9Tm9uZSk6CisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUgPSBOb25lCisgICAgICAgIHNlbGYuc2tpcGxpc3QgPSB7fQorICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBDb29rZXJGZWF0dXJlcygpCisgICAgICAgIGlmIGZlYXR1cmVTZXQ6CisgICAgICAgICAgICBmb3IgZiBpbiBmZWF0dXJlU2V0OgorICAgICAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKGYpCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgIHNlbGYuY29uZmlnd2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQorICAgICAgICBzZWxmLmNvbmZpZ3dhdGNoZXIuYmJzZWVuID0gW10KKyAgICAgICAgc2VsZi5jb25maWd3YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KKyAgICAgICAgc2VsZi5jb25maWdub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLmNvbmZpZ3dhdGNoZXIsIHNlbGYuY29uZmlnX25vdGlmaWNhdGlvbnMpCisgICAgICAgIHNlbGYud2F0Y2htYXNrID0gcHlpbm90aWZ5LklOX0NMT1NFX1dSSVRFIHwgcHlpbm90aWZ5LklOX0NSRUFURSB8IHB5aW5vdGlmeS5JTl9ERUxFVEUgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5LklOX0RFTEVURV9TRUxGIHwgcHlpbm90aWZ5LklOX01PRElGWSB8IHB5aW5vdGlmeS5JTl9NT1ZFX1NFTEYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5LklOX01PVkVEX0ZST00gfCBweWlub3RpZnkuSU5fTU9WRURfVE8gCisgICAgICAgIHNlbGYud2F0Y2hlciA9IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuYmJzZWVuID0gW10KKyAgICAgICAgc2VsZi53YXRjaGVyLmJid2F0Y2hlZGZpbGVzID0gW10KKyAgICAgICAgc2VsZi5ub3RpZmllciA9IHB5aW5vdGlmeS5Ob3RpZmllcihzZWxmLndhdGNoZXIsIHNlbGYubm90aWZpY2F0aW9ucykKKworCisgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKworICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMgPSBbXQorCisgICAgICAgIGRlZiBfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMoc2VydmVyLCBub3RpZmllcl9saXN0LCBhYm9ydCk6CisgICAgICAgICAgICBmb3IgbiBpbiBub3RpZmllcl9saXN0OgorICAgICAgICAgICAgICAgIGlmIG4uY2hlY2tfZXZlbnRzKHRpbWVvdXQ9MCk6CisgICAgICAgICAgICAgICAgICAgICMgcmVhZCBub3RpZmllZCBldmVudHMgYW5kIGVucWV1ZSB0aGVtCisgICAgICAgICAgICAgICAgICAgIG4ucmVhZF9ldmVudHMoKQorICAgICAgICAgICAgICAgICAgICBuLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgICAgIHJldHVybiAxLjAKKworICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2VydmVyX3JlZ2lzdGVyX2lkbGVjYWxsYmFjayhfcHJvY2Vzc19pbm90aWZ5X3VwZGF0ZXMsIFtzZWxmLmNvbmZpZ25vdGlmaWVyLCBzZWxmLm5vdGlmaWVyXSkKKworICAgICAgICBzZWxmLmJhc2Vjb25maWdfdmFsaWQgPSBUcnVlCisgICAgICAgIHNlbGYucGFyc2VjYWNoZV92YWxpZCA9IEZhbHNlCisKKyAgICAgICAgIyBUYWtlIGEgbG9jayBzbyBvbmx5IG9uZSBjb3B5IG9mIGJpdGJha2UgY2FuIHJ1biBhZ2FpbnN0IGEgZ2l2ZW4gYnVpbGQKKyAgICAgICAgIyBkaXJlY3RvcnkgYXQgYSB0aW1lCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tCaXRiYWtlKCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiT25seSBvbmUgY29weSBvZiBiaXRiYWtlIHNob3VsZCBiZSBydW4gYWdhaW5zdCBhIGJ1aWxkIGRpcmVjdG9yeSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9jay5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmxvY2sudHJ1bmNhdGUoKQorICAgICAgICAgICAgaWYgbGVuKGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9jay53cml0ZSgiJXM6JXNcbiIgJSAoY29uZmlndXJhdGlvbi5pbnRlcmZhY2VbMF0sIGNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlWzFdKSk7CisgICAgICAgICAgICBzZWxmLmxvY2suZmx1c2goKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUT1NUT1AgbXVzdCBub3QgYmUgc2V0IG9yIG91ciBjaGlsZHJlbiB3aWxsIGhhbmcgd2hlbiB0aGV5IG91dHB1dAorICAgICAgICBmZCA9IHN5cy5zdGRvdXQuZmlsZW5vKCkKKyAgICAgICAgaWYgb3MuaXNhdHR5KGZkKToKKyAgICAgICAgICAgIGltcG9ydCB0ZXJtaW9zCisgICAgICAgICAgICB0Y2F0dHIgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkKKyAgICAgICAgICAgIGlmIHRjYXR0clszXSAmIHRlcm1pb3MuVE9TVE9QOgorICAgICAgICAgICAgICAgIGJ1aWxkbG9nLmluZm8oIlRoZSB0ZXJtaW5hbCBoYWQgdGhlIFRPU1RPUCBiaXQgc2V0LCBjbGVhcmluZy4uLiIpCisgICAgICAgICAgICAgICAgdGNhdHRyWzNdID0gdGNhdHRyWzNdICYgfnRlcm1pb3MuVE9TVE9QCisgICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQU5PVywgdGNhdHRyKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9IGJiLmNvbW1hbmQuQ29tbWFuZChzZWxmKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuaW5pdGlhbAorCisgICAgICAgIHNlbGYucGFyc2VyID0gTm9uZQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICMgTGV0IFNJR0hVUCBleGl0IGFzIFNJR1RFUk0KKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnNpZ3Rlcm1fZXhjZXB0aW9uKQorCisgICAgZGVmIGNvbmZpZ19ub3RpZmljYXRpb25zKHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgbm90IGV2ZW50LnBhdGhuYW1lIGluIHNlbGYuY29uZmlnd2F0Y2hlci5iYndhdGNoZWRmaWxlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgZXZlbnQucGF0aCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXMuYXBwZW5kKGV2ZW50LnBhdGgpCisgICAgICAgIHNlbGYuYmFzZWNvbmZpZ192YWxpZCA9IEZhbHNlCisKKyAgICBkZWYgbm90aWZpY2F0aW9ucyhzZWxmLCBldmVudCk6CisgICAgICAgIGlmIG5vdCBldmVudC5wYXRoIGluIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlczoKKyAgICAgICAgICAgIHNlbGYuaW5vdGlmeV9tb2RpZmllZF9maWxlcy5hcHBlbmQoZXZlbnQucGF0aCkKKyAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKworICAgIGRlZiBhZGRfZmlsZXdhdGNoKHNlbGYsIGRlcHMsIHdhdGNoZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCB3YXRjaGVyOgorICAgICAgICAgICAgd2F0Y2hlciA9IHNlbGYud2F0Y2hlcgorICAgICAgICBmb3IgaSBpbiBkZXBzOgorICAgICAgICAgICAgd2F0Y2hlci5iYndhdGNoZWRmaWxlcy5hcHBlbmQoaVswXSkKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmRpcm5hbWUoaVswXSkKKyAgICAgICAgICAgIGlmIGYgaW4gd2F0Y2hlci5iYnNlZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdhdGNoZXIuYmJzZWVuLmFwcGVuZChmKQorICAgICAgICAgICAgd2F0Y2h0YXJnZXQgPSBOb25lCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IGFuZCBhZGQgd2F0Y2hlcyBmb3IgZmlsZXMgdGhhdCBkb24ndCBleGlzdCBidXQgaWYgdGhleSBkaWQsIHdvdWxkIGluZmx1ZW5jZQorICAgICAgICAgICAgICAgICMgdGhlIHBhcnNlci4gVGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlc2UgZmlsZXMgbWF5IG5vdCBleGlzdCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIAorICAgICAgICAgICAgICAgICMgdG8gd2F0Y2ggYW55IHBhcmVudCB0aGF0IGRvZXMgZXhpc3QgZm9yIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmFkZF93YXRjaChmLCBzZWxmLndhdGNobWFzaywgcXVpZXQ9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIHdhdGNodGFyZ2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5iYndhdGNoZWRmaWxlcy5hcHBlbmQod2F0Y2h0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IHB5aW5vdGlmeS5XYXRjaE1hbmFnZXJFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiAnRU5PRU5UJyBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaHRhcmdldCA9IGYKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmRpcm5hbWUoZikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgaW4gd2F0Y2hlci5iYnNlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuYmJzZWVuLmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0VOT1NQQycgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIk5vIHNwYWNlIGxlZnQgb24gZGV2aWNlIG9yIGV4Y2VlZHMgZnMuaW5vdGlmeS5tYXhfdXNlcl93YXRjaGVzPyIpCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiVG8gY2hlY2sgbWF4X3VzZXJfd2F0Y2hlczogc3lzY3RsIC1uIGZzLmlub3RpZnkubWF4X3VzZXJfd2F0Y2hlcy4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuZXJyb3IoIlRvIG1vZGlmeSBtYXhfdXNlcl93YXRjaGVzOiBzeXNjdGwgLW4gLXcgZnMuaW5vdGlmeS5tYXhfdXNlcl93YXRjaGVzPTx2YWx1ZT4uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVybG9nLmVycm9yKCJSb290IHByaXZpbGVnZSBpcyByZXF1aXJlZCB0byBtb2RpZnkgbWF4X3VzZXJfd2F0Y2hlcy4iKQorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6CisgICAgICAgIGlmIHNpZ251bSA9PSBzaWduYWwuU0lHVEVSTToKKyAgICAgICAgICAgIGJiLndhcm4oIkNvb2tlciByZWNpZXZlZCBTSUdURVJNLCBzaHV0dGluZyBkb3duLi4uIikKKyAgICAgICAgZWxpZiBzaWdudW0gPT0gc2lnbmFsLlNJR0hVUDoKKyAgICAgICAgICAgIGJiLndhcm4oIkNvb2tlciByZWNpZXZlZCBTSUdIVVAsIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZm9yY2VzaHV0ZG93bgorCisgICAgZGVmIHNldEZlYXR1cmVzKHNlbGYsIGZlYXR1cmVzKToKKyAgICAgICAgIyB3ZSBvbmx5IGFjY2VwdCBhIG5ldyBmZWF0dXJlIHNldCBpZiB3ZSdyZSBpbiBzdGF0ZSBpbml0aWFsLCBzbyB3ZSBjYW4gcmVzZXQgd2l0aG91dCBwcm9ibGVtcworICAgICAgICBpZiBub3Qgc2VsZi5zdGF0ZSBpbiBbc3RhdGUuaW5pdGlhbCwgc3RhdGUuc2h1dGRvd24sIHN0YXRlLmZvcmNlc2h1dGRvd24sIHN0YXRlLnN0b3BwZWQsIHN0YXRlLmVycm9yXToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSWxsZWdhbCBzdGF0ZSBmb3IgZmVhdHVyZSBzZXQgY2hhbmdlIikKKyAgICAgICAgb3JpZ2luYWxfZmVhdHVyZXNldCA9IGxpc3Qoc2VsZi5mZWF0dXJlc2V0KQorICAgICAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKGZlYXR1cmUpCisgICAgICAgIGJiLmRlYnVnKDEsICJGZWF0dXJlcyBzZXQgJXMgKHdhcyAlcykiICUgKG9yaWdpbmFsX2ZlYXR1cmVzZXQsIGxpc3Qoc2VsZi5mZWF0dXJlc2V0KSkpCisgICAgICAgIGlmIChvcmlnaW5hbF9mZWF0dXJlc2V0ICE9IGxpc3Qoc2VsZi5mZWF0dXJlc2V0KSkgYW5kIHNlbGYuc3RhdGUgIT0gc3RhdGUuZXJyb3I6CisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBpbml0Q29uZmlndXJhdGlvbkRhdGEoc2VsZik6CisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKyAgICAgICAgc2VsZi5jYWNoZXNfYXJyYXkgPSBbXQorCisgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5lbmFibGVEYXRhVHJhY2tpbmcoKQorCisgICAgICAgIGFsbF9leHRyYV9jYWNoZV9uYW1lcyA9IFtdCisgICAgICAgICMgV2UgaGFyZGNvZGUgYWxsIGtub3duIGNhY2hlIHR5cGVzIGluIGEgc2luZ2xlIHBsYWNlLCBoZXJlLgorICAgICAgICBpZiBDb29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTIGluIHNlbGYuZmVhdHVyZXNldDoKKyAgICAgICAgICAgIGFsbF9leHRyYV9jYWNoZV9uYW1lcy5hcHBlbmQoImJiLmNhY2hlX2V4dHJhOkhvYlJlY2lwZUluZm8iKQorCisgICAgICAgIGNhY2hlc19uYW1lX2FycmF5ID0gWydiYi5jYWNoZTpDb3JlUmVjaXBlSW5mbyddICsgYWxsX2V4dHJhX2NhY2hlX25hbWVzCisKKyAgICAgICAgIyBBdCBsZWFzdCBDb3JlUmVjaXBlSW5mbyB3aWxsIGJlIGxvYWRlZCwgc28gY2FjaGVzX2FycmF5IHdpbGwgbmV2ZXIgYmUgZW1wdHkhCisgICAgICAgICMgVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIG5vIGZ1cnRoZXIgY2hlY2sgbmVlZGVkIQorICAgICAgICBmb3IgdmFyIGluIGNhY2hlc19uYW1lX2FycmF5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBjYWNoZV9uYW1lID0gdmFyLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBmcm9tbGlzdD0oY2FjaGVfbmFtZSwpKQorICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVzX2FycmF5LmFwcGVuZChnZXRhdHRyKG1vZHVsZSwgY2FjaGVfbmFtZSkpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiVW5hYmxlIHRvIGltcG9ydCBleHRyYSBSZWNpcGVJbmZvICclcycgZnJvbSAnJXMnOiAlcyIgJSAoY2FjaGVfbmFtZSwgbW9kdWxlX25hbWUsIGV4YykpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoIkZBVEFMOiBGYWlsZWQgdG8gaW1wb3J0IGV4dHJhIGNhY2hlIGNsYXNzICclcycuIiAlIGNhY2hlX25hbWUpCisKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlciA9IGJiLmNvb2tlcmRhdGEuQ29va2VyRGF0YUJ1aWxkZXIoc2VsZi5jb25maWd1cmF0aW9uLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kYXRhYnVpbGRlci5wYXJzZUJhc2VDb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gc2VsZi5kYXRhYnVpbGRlci5kYXRhX2hhc2gKKworCisgICAgICAgICMgd2UgbG9nIGFsbCBldmVudHMgdG8gYSBmaWxlIGlmIHNvIGRpcmVjdGVkCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi53cml0ZWV2ZW50bG9nOgorICAgICAgICAgICAgaW1wb3J0IGpzb24sIHBpY2tsZQorICAgICAgICAgICAgREVGQVVMVF9FVkVOVEZJTEUgPSBzZWxmLmNvbmZpZ3VyYXRpb24ud3JpdGVldmVudGxvZworICAgICAgICAgICAgY2xhc3MgRXZlbnRMb2dXcml0ZUhhbmRsZXIoKToKKworICAgICAgICAgICAgICAgIGNsYXNzIEV2ZW50V3JpdGVyKCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX2luaXRlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VyID0gY29va2VyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gW10KKworICAgICAgICAgICAgICAgICAgICBkZWYgaW5pdF9maWxlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBvbGQgbG9nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKERFRkFVTFRfRVZFTlRGSUxFKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKERFRkFVTFRfRVZFTlRGSUxFLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBqc29uLmR1bXBzKHsgImFsbHZhcmlhYmxlcyIgOiBzZWxmLmNvb2tlci5nZXRBbGxLZXlzV2l0aEZsYWdzKFsiZG9jIiwgImZ1bmMiXSl9KSkKKworICAgICAgICAgICAgICAgICAgICBkZWYgd3JpdGVfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKERFRkFVTFRfRVZFTlRGSUxFLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIGpzb24uZHVtcHMoeyJjbGFzcyI6ZXZlbnQuX19tb2R1bGVfXyArICIuIiArIGV2ZW50Ll9fY2xhc3NfXy5fX25hbWVfXywgInZhcnMiOmpzb24uZHVtcHMocGlja2xlLmR1bXBzKGV2ZW50KSkgfSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKQorCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIHNlbmQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfY2xhc3MgPSBldmVudC5fX21vZHVsZV9fICsgIi4iICsgZXZlbnQuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdCBvbiBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZmlsZV9pbml0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAgZXZlbnRfY2xhc3MgPT0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9maWxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlX2luaXRlZCA9IFRydWUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIHBlbmRpbmcgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlIGluIHNlbGYuZXZlbnRfcXVldWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHNvIHdyaXRlIHRoZSBjdXJyZW50IGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZXZlbnQoZXZlbnQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF1ZXVlIGFsbCBldmVudHMgdW50aWwgdGhlIGZpbGUgaXMgaW5pdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuYXBwZW5kKGV2ZW50KQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0aGUgZmlsZSwganVzdCB3cml0ZSB0aGUgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2V2ZW50KGV2ZW50KQorCisgICAgICAgICAgICAgICAgIyBzZXQgb3VyIGhhbmRsZXIncyBldmVudCBwcm9jZXNzb3IKKyAgICAgICAgICAgICAgICBldmVudCA9IEV2ZW50V3JpdGVyKHNlbGYpICAgICAgICMgc2VsZiBpcyB0aGUgY29va2VyIGhlcmUKKworCisgICAgICAgICAgICAjIHNldCB1cCBjb29rZXIgZmVhdHVyZXMgZm9yIHRoaXMgbW9jayBVSSBoYW5kbGVyCisKKyAgICAgICAgICAgICMgd2UgbmVlZCB0byB3cml0ZSB0aGUgZGVwZW5kZW5jeSB0cmVlIGluIHRoZSBsb2cKKyAgICAgICAgICAgIHNlbGYuZmVhdHVyZXNldC5zZXRGZWF0dXJlKENvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFKQorICAgICAgICAgICAgIyByZWdpc3RlciB0aGUgbG9nIGZpbGUgd3JpdGVyIGFzIFVJIEhhbmRsZXIKKyAgICAgICAgICAgIGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIoRXZlbnRMb2dXcml0ZUhhbmRsZXIoKSkKKworCisgICAgICAgICMKKyAgICAgICAgIyBDb3B5IG9mIHRoZSBkYXRhIHN0b3JlIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLgorICAgICAgICAjIFVzZWQgZm9yIGZpcmluZyBldmVudHMgYW5kIGFjY2Vzc2luZyB2YXJpYWJsZXMgd2hlcmUgZXhwYW5zaW9uIG5lZWRzIHRvIGJlIGFjY291bnRlZCBmb3IKKyAgICAgICAgIworICAgICAgICBzZWxmLmV4cGFuZGVkX2RhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kYXRhKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoc2VsZi5leHBhbmRlZF9kYXRhKQorCisgICAgICAgIGlmIENvb2tlckZlYXR1cmVzLkJBU0VEQVRBU1RPUkVfVFJBQ0tJTkcgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgc2VsZi5kaXNhYmxlRGF0YVRyYWNraW5nKCkKKworICAgICAgICBzZWxmLmRhdGEucmVuYW1lVmFyKCJfX2RlcGVuZHMiLCAiX19iYXNlX2RlcGVuZHMiKQorICAgICAgICBzZWxmLmFkZF9maWxld2F0Y2goc2VsZi5kYXRhLmdldFZhcigiX19iYXNlX2RlcGVuZHMiLCBGYWxzZSksIHNlbGYuY29uZmlnd2F0Y2hlcikKKworCisgICAgZGVmIGVuYWJsZURhdGFUcmFja2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnRyYWNraW5nID0gVHJ1ZQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJkYXRhIik6CisgICAgICAgICAgICBzZWxmLmRhdGEuZW5hYmxlVHJhY2tpbmcoKQorCisgICAgZGVmIGRpc2FibGVEYXRhVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi50cmFja2luZyA9IEZhbHNlCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImRhdGEiKToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5kaXNhYmxlVHJhY2tpbmcoKQorCisgICAgZGVmIG1vZGlmeUNvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgb3ApOgorICAgICAgICBpZiBvcCA9PSAiYXBwZW5kIjoKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kQ29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlKQorICAgICAgICBlbGlmIG9wID09ICJzZXQiOgorICAgICAgICAgICAgc2VsZi5zYXZlQ29uZmlndXJhdGlvblZhcih2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiPSIpCisgICAgICAgIGVsaWYgb3AgPT0gImVhcmx5QXNzaWduIjoKKyAgICAgICAgICAgIHNlbGYuc2F2ZUNvbmZpZ3VyYXRpb25WYXIodmFyLCB2YWwsIGRlZmF1bHRfZmlsZSwgIj89IikKKworCisgICAgZGVmIGFwcGVuZENvbmZpZ3VyYXRpb25WYXIoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZSk6CisgICAgICAgICNhZGQgYXBwZW5kIHZhciBvcGVyYXRpb24gdG8gdGhlIGVuZCBvZiBkZWZhdWx0X2ZpbGUKKyAgICAgICAgZGVmYXVsdF9maWxlID0gYmIuY29va2VyZGF0YS5maW5kQ29uZmlnRmlsZShkZWZhdWx0X2ZpbGUsIHNlbGYuZGF0YSkKKworICAgICAgICB0b3RhbCA9ICIjYWRkZWQgYnkgaG9iIgorICAgICAgICB0b3RhbCArPSAiXG4lcyArPSBcIiVzXCJcbiIgJSAodmFyLCB2YWwpCisKKyAgICAgICAgd2l0aCBvcGVuKGRlZmF1bHRfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh0b3RhbCkKKworICAgICAgICAjYWRkIHRvIGhpc3RvcnkKKyAgICAgICAgbG9naW5mbyA9IHsib3AiOiJhcHBlbmQiLCAiZmlsZSI6ZGVmYXVsdF9maWxlLCAibGluZSI6dG90YWwuY291bnQoIlxuIil9CisgICAgICAgIHNlbGYuZGF0YS5hcHBlbmRWYXIodmFyLCB2YWwsICoqbG9naW5mbykKKworICAgIGRlZiBzYXZlQ29uZmlndXJhdGlvblZhcihzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCBvcCk6CisKKyAgICAgICAgcmVwbGFjZWQgPSBGYWxzZQorICAgICAgICAjZG8gbm90IHNhdmUgaWYgbm90aGluZyBjaGFuZ2VkCisgICAgICAgIGlmIHN0cih2YWwpID09IHNlbGYuZGF0YS5nZXRWYXIodmFyLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjb25mX2ZpbGVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2ZpbGVzKHZhcikKKworICAgICAgICAjZm9ybWF0IHRoZSB2YWx1ZSB3aGVuIGl0IGlzIGEgbGlzdAorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgbGlzdCk6CisgICAgICAgICAgICBsaXN0dmFsID0gIiIKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWw6CisgICAgICAgICAgICAgICAgbGlzdHZhbCArPSAiJXMgICAiICUgdmFsdWUKKyAgICAgICAgICAgIHZhbCA9IGxpc3R2YWwKKworICAgICAgICB0b3BkaXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJUT1BESVIiLCBGYWxzZSkKKworICAgICAgICAjY29tbWVudCBvciByZXBsYWNlIG9wZXJhdGlvbnMgbWFkZSBvbiB2YXIKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgaWYgdG9wZGlyIGluIGNvbmZfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLmRhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfbGluZXModmFyLCBjb25mX2ZpbGUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGk9PWludChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4odG90YWwpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdG90YWwucmZpbmQodmFyLCAwLCBlbmRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5fbGluZSA9IHRvdGFsLmNvdW50KCJcbiIsMCxpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgZW5kX2xpbmUgPSBpbnQobGluZSkKKworICAgICAgICAgICAgICAgICAgICAjY2hlY2sgaWYgdGhlIHZhcmlhYmxlIHdhcyBzYXZlZCBiZWZvcmUgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgICAgICNpZiB0cnVlIGl0IHJlcGxhY2UgdGhlIHBsYWNlIHdoZXJlIHRoZSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQKKyAgICAgICAgICAgICAgICAgICAgI2Vsc2UgaXQgY29tbWVudHMgaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgY29udGVudHNbYmVnaW5fbGluZS0xXT09ICIjYWRkZWQgYnkgaG9iXG4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbYmVnaW5fbGluZV0gPSAiJXMgJXMgXCIlc1wiXG4iICUgKHZhciwgb3AsIHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGlpIGluIHJhbmdlKGJlZ2luX2xpbmUsIGVuZF9saW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpaV0gPSAiIyIgKyBjb250ZW50c1tpaV0KKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihjb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZWxpbmVzKGNvbnRlbnRzKQorCisgICAgICAgIGlmIHJlcGxhY2VkID09IEZhbHNlOgorICAgICAgICAgICAgI3JlbW92ZSB2YXIgZnJvbSBoaXN0b3J5CisgICAgICAgICAgICBzZWxmLmRhdGEudmFyaGlzdG9yeS5kZWxfdmFyX2hpc3RvcnkodmFyKQorCisgICAgICAgICAgICAjYWRkIHZhciB0byB0aGUgZW5kIG9mIGRlZmF1bHRfZmlsZQorICAgICAgICAgICAgZGVmYXVsdF9maWxlID0gYmIuY29va2VyZGF0YS5maW5kQ29uZmlnRmlsZShkZWZhdWx0X2ZpbGUsIHNlbGYuZGF0YSkKKworICAgICAgICAgICAgI2FkZCB0aGUgdmFyaWFibGUgb24gYSBzaW5nbGUgbGluZSwgdG8gYmUgZWFzeSB0byByZXBsYWNlIHRoZSBzZWNvbmQgdGltZQorICAgICAgICAgICAgdG90YWwgPSAiXG4jYWRkZWQgYnkgaG9iIgorICAgICAgICAgICAgdG90YWwgKz0gIlxuJXMgJXMgXCIlc1wiXG4iICUgKHZhciwgb3AsIHZhbCkKKworICAgICAgICAgICAgd2l0aCBvcGVuKGRlZmF1bHRfZmlsZSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodG90YWwpCisKKyAgICAgICAgICAgICNhZGQgdG8gaGlzdG9yeQorICAgICAgICAgICAgbG9naW5mbyA9IHsib3AiOiJzZXQiLCAiZmlsZSI6ZGVmYXVsdF9maWxlLCAibGluZSI6dG90YWwuY291bnQoIlxuIil9CisgICAgICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKHZhciwgdmFsLCAqKmxvZ2luZm8pCisKKyAgICBkZWYgcmVtb3ZlQ29uZmlndXJhdGlvblZhcihzZWxmLCB2YXIpOgorICAgICAgICBjb25mX2ZpbGVzID0gc2VsZi5kYXRhLnZhcmhpc3RvcnkuZ2V0X3ZhcmlhYmxlX2ZpbGVzKHZhcikKKyAgICAgICAgdG9wZGlyID0gc2VsZi5kYXRhLmdldFZhcigiVE9QRElSIiwgRmFsc2UpCisKKyAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBjb25mX2ZpbGVzOgorICAgICAgICAgICAgaWYgdG9wZGlyIGluIGNvbmZfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgbGluZXMgPSBzZWxmLmRhdGEudmFyaGlzdG9yeS5nZXRfdmFyaWFibGVfbGluZXModmFyLCBjb25mX2ZpbGUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29udGVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGk9PWludChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfaW5kZXggPSBsZW4odG90YWwpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdG90YWwucmZpbmQodmFyLCAwLCBlbmRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAgICAgYmVnaW5fbGluZSA9IHRvdGFsLmNvdW50KCJcbiIsMCxpbmRleCkKKworICAgICAgICAgICAgICAgICAgICAjY2hlY2sgaWYgdGhlIHZhcmlhYmxlIHdhcyBzYXZlZCBiZWZvcmUgaW4gdGhlIHNhbWUgd2F5CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV09PSAiI2FkZGVkIGJ5IGhvYlxuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmUtMV0gPSBjb250ZW50c1tiZWdpbl9saW5lXSA9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2JlZ2luX2xpbmVdID0gIlxuIgorICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHZhciBmcm9tIGhpc3RvcnkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhLnZhcmhpc3RvcnkuZGVsX3Zhcl9oaXN0b3J5KHZhciwgY29uZl9maWxlLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAjcmVtb3ZlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5kZWxWYXIodmFyKQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlbGluZXMoY29udGVudHMpCisKKyAgICBkZWYgY3JlYXRlQ29uZmlnRmlsZShzZWxmLCBuYW1lKToKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbmZwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICJjb25mIiwgbmFtZSkKKyAgICAgICAgb3Blbihjb25mcGF0aCwgJ3cnKS5jbG9zZSgpCisKKyAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uKHNlbGYpOgorICAgICAgICAjIFNldCBsb2cgZmlsZSB2ZXJib3NpdHkKKyAgICAgICAgdmVyYm9zZWxvZ3MgPSBiYi51dGlscy50b19ib29sZWFuKHNlbGYuZGF0YS5nZXRWYXIoIkJCX1ZFUkJPU0VfTE9HUyIsIEZhbHNlKSkKKyAgICAgICAgaWYgdmVyYm9zZWxvZ3M6CisgICAgICAgICAgICBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MgPSBUcnVlCisKKyAgICAgICAgIyBDaGFuZ2UgbmljZSBsZXZlbCBpZiB3ZSdyZSBhc2tlZCB0bworICAgICAgICBuaWNlID0gc2VsZi5kYXRhLmdldFZhcigiQkJfTklDRV9MRVZFTCIsIFRydWUpCisgICAgICAgIGlmIG5pY2U6CisgICAgICAgICAgICBjdXJuaWNlID0gb3MubmljZSgwKQorICAgICAgICAgICAgbmljZSA9IGludChuaWNlKSAtIGN1cm5pY2UKKyAgICAgICAgICAgIGJ1aWxkbG9nLnZlcmJvc2UoIlJlbmljZSB0byAlcyAiICUgb3MubmljZShuaWNlKSkKKworICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYucmVjaXBlY2FjaGUKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZSA9IGJiLmNhY2hlLkNhY2hlRGF0YShzZWxmLmNhY2hlc19hcnJheSkKKworICAgICAgICBzZWxmLmhhbmRsZUNvbGxlY3Rpb25zKCBzZWxmLmRhdGEuZ2V0VmFyKCJCQkZJTEVfQ09MTEVDVElPTlMiLCBUcnVlKSApCisKKyAgICBkZWYgdXBkYXRlQ29uZmlnT3B0cyhzZWxmLCBvcHRpb25zLCBlbnZpcm9ubWVudCk6CisgICAgICAgIGNsZWFuID0gVHJ1ZQorICAgICAgICBmb3IgbyBpbiBvcHRpb25zOgorICAgICAgICAgICAgaWYgbyBpbiBbJ3ByZWZpbGUnLCAncG9zdGZpbGUnXToKKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBzZXRhdHRyKHNlbGYuY29uZmlndXJhdGlvbiwgbywgb3B0aW9uc1tvXSkKKyAgICAgICAgZm9yIGsgaW4gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCk6CisgICAgICAgICAgICBpZiBrIGluIGVudmlyb25tZW50IGFuZCBrIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZW52OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgdG8gJXMiICUgKGssIGVudmlyb25tZW50W2tdKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZW52W2tdID0gZW52aXJvbm1lbnRba10KKyAgICAgICAgICAgICAgICBjbGVhbiA9IEZhbHNlCisgICAgICAgICAgICBpZiBrIGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnYgYW5kIGsgbm90IGluIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXBkYXRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgKGRlbGV0ZWQpIiAlIChrKSkKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXQorICAgICAgICAgICAgICAgIGNsZWFuID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYuY29uZmlndXJhdGlvbi5lbnYgYW5kIGsgbm90IGluIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZW52aXJvbm1lbnRba10gIT0gc2VsZi5jb25maWd1cmF0aW9uLmVudltrXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlVwZGF0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlICVzIHRvICVzIiAlIChrLCBlbnZpcm9ubWVudFtrXSkpCisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmVudltrXSA9IGVudmlyb25tZW50W2tdCisgICAgICAgICAgICAgICAgY2xlYW4gPSBGYWxzZQorICAgICAgICBpZiBub3QgY2xlYW46CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJhc2UgZW52aXJvbm1lbnQgY2hhbmdlLCB0cmlnZ2VyaW5nIHJlcGFyc2UiKQorICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gRmFsc2UgICAgICAgIAorICAgICAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcnVuQ29tbWFuZHMoc2VsZiwgc2VydmVyLCBkYXRhLCBhYm9ydCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYW55IHF1ZXVlZCBhc3luY2hyb25vdXMgY29tbWFuZAorICAgICAgICBUaGlzIGlzIGRvbmUgYnkgdGhlIGlkbGUgaGFuZGxlciBzbyBpdCBydW5zIGluIHRydWUgY29udGV4dCByYXRoZXIgdGhhbgorICAgICAgICB0aWVkIHRvIGFueSBVSS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbWFuZC5ydW5Bc3luY0NvbW1hbmQoKQorCisgICAgZGVmIHNob3dWZXJzaW9ucyhzZWxmKToKKworICAgICAgICBwa2dfcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCBwa2dfcG4pCisKKyAgICAgICAgbG9nZ2VyLnBsYWluKCIlLTM1cyAlMjVzICUyNXMiLCAiUmVjaXBlIE5hbWUiLCAiTGF0ZXN0IFZlcnNpb24iLCAiUHJlZmVycmVkIFZlcnNpb24iKQorICAgICAgICBsb2dnZXIucGxhaW4oIiUtMzVzICUyNXMgJTI1c1xuIiwgIj09PT09PT09PT09IiwgIj09PT09PT09PT09PT09IiwgIj09PT09PT09PT09PT09PT09IikKKworICAgICAgICBmb3IgcCBpbiBzb3J0ZWQocGtnX3BuKToKKyAgICAgICAgICAgIHByZWYgPSBwcmVmZXJyZWRfdmVyc2lvbnNbcF0KKyAgICAgICAgICAgIGxhdGVzdCA9IGxhdGVzdF92ZXJzaW9uc1twXQorCisgICAgICAgICAgICBwcmVmc3RyID0gcHJlZlswXVswXSArICI6IiArIHByZWZbMF1bMV0gKyAnLScgKyBwcmVmWzBdWzJdCisgICAgICAgICAgICBsYXRlc3RzdHIgPSBsYXRlc3RbMF1bMF0gKyAiOiIgKyBsYXRlc3RbMF1bMV0gKyAiLSIgKyBsYXRlc3RbMF1bMl0KKworICAgICAgICAgICAgaWYgcHJlZiA9PSBsYXRlc3Q6CisgICAgICAgICAgICAgICAgcHJlZnN0ciA9ICIiCisKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiJS0zNXMgJTI1cyAlMjVzIiwgcCwgbGF0ZXN0c3RyLCBwcmVmc3RyKQorCisgICAgZGVmIHNob3dFbnZpcm9ubWVudChzZWxmLCBidWlsZGZpbGU9Tm9uZSwgcGtnc190b19idWlsZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFNob3cgdGhlIG91dGVyIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQKKyAgICAgICAgIiIiCisgICAgICAgIGZuID0gTm9uZQorICAgICAgICBlbnZkYXRhID0gTm9uZQorICAgICAgICBpZiBub3QgcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQgPSBbXQorCisgICAgICAgIGlmIGJ1aWxkZmlsZToKKyAgICAgICAgICAgICMgUGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gaGVyZS4gV2UgbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5IGhlcmUgc2luY2UKKyAgICAgICAgICAgICMgdGhpcyBzaG93RW52aXJvbm1lbnQoKSBjb2RlIHBhdGggZG9lc24ndCB1c2UgdGhlIGNhY2hlCisgICAgICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbigpCisKKyAgICAgICAgICAgIGZuLCBjbHMgPSBiYi5jYWNoZS5DYWNoZS52aXJ0dWFsZm4ycmVhbGZuKGJ1aWxkZmlsZSkKKyAgICAgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCisgICAgICAgICAgICBmbiA9IGJiLmNhY2hlLkNhY2hlLnJlYWxmbjJ2aXJ0dWFsKGZuLCBjbHMpCisgICAgICAgIGVsaWYgbGVuKHBrZ3NfdG9fYnVpbGQpID09IDE6CisgICAgICAgICAgICBpZ25vcmUgPSBzZWxmLmV4cGFuZGVkX2RhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgaWYgcGtnc190b19idWlsZFswXSBpbiBzZXQoaWdub3JlLnNwbGl0KCkpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpcyBpbiBBU1NVTUVfUFJPVklERUQiICUgcGtnc190b19idWlsZFswXSkKKworICAgICAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgTm9uZSwgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0LCBhbGxvd2luY29tcGxldGU9VHJ1ZSkKKworICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRidWlsZF9pZChwa2dzX3RvX2J1aWxkWzBdKQorICAgICAgICAgICAgZm5pZCA9IHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnZkYXRhID0gc2VsZi5kYXRhCisKKyAgICAgICAgaWYgZm46CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZW52ZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgc2VsZi5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXhjZXB0aW9uKCJVbmFibGUgdG8gcmVhZCAlcyIsIGZuKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBEaXNwbGF5IGhpc3RvcnkKKyAgICAgICAgd2l0aCBjbG9zaW5nKFN0cmluZ0lPKCkpIGFzIGVudjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5pbmNoaXN0b3J5LmVtaXQoZW52KQorICAgICAgICAgICAgbG9nZ2VyLnBsYWluKGVudi5nZXR2YWx1ZSgpKQorCisgICAgICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgICAgICBkYXRhLnVwZGF0ZV9kYXRhKGVudmRhdGEpCisgICAgICAgIHdpdGggY2xvc2luZyhTdHJpbmdJTygpKSBhcyBlbnY6CisgICAgICAgICAgICBkYXRhLmVtaXRfZW52KGVudiwgZW52ZGF0YSwgVHJ1ZSkKKyAgICAgICAgICAgIGxvZ2dlci5wbGFpbihlbnYuZ2V0dmFsdWUoKSkKKworICAgICAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbnQgdmFsaWQgc2hlbGwKKyAgICAgICAgZGF0YS5leHBhbmRLZXlzKGVudmRhdGEpCisgICAgICAgIGZvciBlIGluIGVudmRhdGEua2V5cygpOgorICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKCBlLCAncHl0aG9uJywgZW52ZGF0YSApOgorICAgICAgICAgICAgICAgIGxvZ2dlci5wbGFpbigiXG5weXRob24gJXMgKCkge1xuJXN9XG4iLCBlLCBlbnZkYXRhLmdldFZhcihlLCBUcnVlKSkKKworCisgICAgZGVmIGJ1aWxkVGFza0RhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzaywgYWJvcnQsIGFsbG93aW5jb21wbGV0ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgcnVucXVldWUgYW5kIHRhc2tkYXRhIG9iamVjdCBmb3IgaXRlcmF0aW9uIG92ZXIgcGtnc190b19idWlsZAorICAgICAgICAiIiIKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uU3RhcnRlZCgpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgIyBBIHRhc2sgb2YgTm9uZSBtZWFucyB1c2UgdGhlIGRlZmF1bHQgdGFzaworICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICB0YXNrID0gc2VsZi5jb25maWd1cmF0aW9uLmNtZAorCisgICAgICAgIGZ1bGx0YXJnZXRsaXN0ID0gc2VsZi5jaGVja1BhY2thZ2VzKHBrZ3NfdG9fYnVpbGQpCisKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisgICAgICAgIHRhc2tkYXRhID0gYmIudGFza2RhdGEuVGFza0RhdGEoYWJvcnQsIHNraXBsaXN0PXNlbGYuc2tpcGxpc3QsIGFsbG93aW5jb21wbGV0ZT1hbGxvd2luY29tcGxldGUpCisKKyAgICAgICAgY3VycmVudCA9IDAKKyAgICAgICAgcnVubGlzdCA9IFtdCisgICAgICAgIGZvciBrIGluIGZ1bGx0YXJnZXRsaXN0OgorICAgICAgICAgICAga3Rhc2sgPSB0YXNrCisgICAgICAgICAgICBpZiAiOmRvXyIgaW4gazoKKyAgICAgICAgICAgICAgICBrMiA9IGsuc3BsaXQoIjpkb18iKQorICAgICAgICAgICAgICAgIGsgPSBrMlswXQorICAgICAgICAgICAgICAgIGt0YXNrID0gazJbMV0KKyAgICAgICAgICAgIHRhc2tkYXRhLmFkZF9wcm92aWRlcihsb2NhbGRhdGEsIHNlbGYucmVjaXBlY2FjaGUsIGspCisgICAgICAgICAgICBjdXJyZW50ICs9IDEKKyAgICAgICAgICAgIGlmIG5vdCBrdGFzay5zdGFydHN3aXRoKCJkb18iKToKKyAgICAgICAgICAgICAgICBrdGFzayA9ICJkb18lcyIgJSBrdGFzaworICAgICAgICAgICAgcnVubGlzdC5hcHBlbmQoW2ssIGt0YXNrXSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzKGN1cnJlbnQsIGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCisgICAgICAgIHRhc2tkYXRhLmFkZF91bnJlc29sdmVkKGxvY2FsZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkKGxlbihmdWxsdGFyZ2V0bGlzdCkpLCBzZWxmLmRhdGEpCisgICAgICAgIHJldHVybiB0YXNrZGF0YSwgcnVubGlzdCwgZnVsbHRhcmdldGxpc3QKKworICAgIGRlZiBwcmVwYXJlVHJlZURhdGEoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgcnVucXVldWUgYW5kIHRhc2tkYXRhIG9iamVjdCBmb3IgaXRlcmF0aW9uIG92ZXIgcGtnc190b19idWlsZAorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIHNldCBhYm9ydCB0byBGYWxzZSBoZXJlIHRvIHByZXZlbnQgdW5idWlsZGFibGUgdGFyZ2V0cyByYWlzaW5nCisgICAgICAgICMgYW4gZXhjZXB0aW9uIHdoZW4gd2UncmUganVzdCBnZW5lcmF0aW5nIGRhdGEKKyAgICAgICAgdGFza2RhdGEsIHJ1bmxpc3QsIHBrZ3NfdG9fYnVpbGQgPSBzZWxmLmJ1aWxkVGFza0RhdGEocGtnc190b19idWlsZCwgdGFzaywgRmFsc2UsIGFsbG93aW5jb21wbGV0ZT1UcnVlKQorCisgICAgICAgIHJldHVybiBydW5saXN0LCB0YXNrZGF0YQorCisgICAgIyMjIyMjIyMgV0FSTklORyA6IHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgY2FjaGVfZXh0cmEgdG8gYmUgZW5hYmxlZCAjIyMjIyMjIworCisgICAgZGVmIGdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHNlbGYsIHBrZ3NfdG9fYnVpbGQsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgZGVwZW5kZW5jeSBncmFwaCBvZiBwa2dzX3RvX2J1aWxkIGluY2x1ZGluZyByZXZlcnNlIGRlcGVuZGVuY3kKKyAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBydW5saXN0LCB0YXNrZGF0YSA9IHNlbGYucHJlcGFyZVRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgcnEucnFkYXRhLnByZXBhcmUoKQorICAgICAgICByZXR1cm4gc2VsZi5idWlsZERlcGVuZFRyZWUocnEsIHRhc2tkYXRhKQorCisKKyAgICBkZWYgYnVpbGREZXBlbmRUcmVlKHNlbGYsIHJxLCB0YXNrZGF0YSk6CisgICAgICAgIHNlZW5fZm5pZHMgPSBbXQorICAgICAgICBkZXBlbmRfdHJlZSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJkZXBlbmRzIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicGFja2FnZXMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wa2ciXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJsYXllci1wcmlvcml0aWVzIl0gPSBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcworCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgdGFza25hbWUgPSBycS5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICBmbmlkID0gcnEucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXQorICAgICAgICAgICAgZm4gPSB0YXNrZGF0YS5mbl9pbmRleFtmbmlkXQorICAgICAgICAgICAgcG4gPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHZlcnNpb24gID0gIiVzOiVzLSVzIiAlIHNlbGYucmVjaXBlY2FjaGUucGtnX3BlcHZwcltmbl0KKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJ2ZXJzaW9uIl0gPSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dWyJpbmhlcml0cyJdID0gc2VsZi5yZWNpcGVjYWNoZS5pbmhlcml0cy5nZXQoZm4sIE5vbmUpCisKKyAgICAgICAgICAgICAgICAjIGlmIHdlIGhhdmUgZXh0cmEgY2FjaGVzLCBsaXN0IGFsbCBhdHRyaWJ1dGVzIHRoZXkgYnJpbmcgaW4KKyAgICAgICAgICAgICAgICBleHRyYV9pbmZvID0gW10KKyAgICAgICAgICAgICAgICBmb3IgY2FjaGVfY2xhc3MgaW4gc2VsZi5jYWNoZXNfYXJyYXk6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FjaGVfY2xhc3MpIGlzIHR5cGUgYW5kIGlzc3ViY2xhc3MoY2FjaGVfY2xhc3MsIGJiLmNhY2hlLlJlY2lwZUluZm9Db21tb24pIGFuZCBoYXNhdHRyKGNhY2hlX2NsYXNzLCAnY2FjaGVmaWVsZHMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9pbmZvID0gZXh0cmFfaW5mbyArIGNhY2hlZmllbGRzCisKKyAgICAgICAgICAgICAgICAjIGZvciBhbGwgYXR0cmlidXRlcyBzdG9yZWQsIGFkZCB0aGVtIHRvIHRoZSBkZXBlbmRlbmN5IHRyZWUKKyAgICAgICAgICAgICAgICBmb3IgZWkgaW4gZXh0cmFfaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBuIl1bcG5dW2VpXSA9IHZhcnMoc2VsZi5yZWNpcGVjYWNoZSlbZWldW2ZuXQorCisKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcnEucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBkZXBmbiA9IHRhc2tkYXRhLmZuX2luZGV4W3JxLnJxZGF0YS5ydW5xX2ZuaWRbZGVwXV0KKyAgICAgICAgICAgICAgICBkZXBwbiA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2RlcGZuXQorICAgICAgICAgICAgICAgIGRvdG5hbWUgPSAiJXMuJXMiICUgKHBuLCBycS5ycWRhdGEucnVucV90YXNrW3Rhc2tdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkb3RuYW1lIGluIGRlcGVuZF90cmVlWyJ0ZGVwZW5kcyJdOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsidGRlcGVuZHMiXVtkb3RuYW1lXSA9IFtdCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInRkZXBlbmRzIl1bZG90bmFtZV0uYXBwZW5kKCIlcy4lcyIgJSAoZGVwcG4sIHJxLnJxZGF0YS5ydW5xX3Rhc2tbZGVwXSkpCisgICAgICAgICAgICBpZiBmbmlkIG5vdCBpbiBzZWVuX2ZuaWRzOgorICAgICAgICAgICAgICAgIHNlZW5fZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBbXQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXS5hcHBlbmQodGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXSkKKworICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJyZGVwZW5kcy1wbiJdW3BuXSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHJkZXAgaW4gdGFza2RhdGEucmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dLmFwcGVuZCh0YXNrZGF0YS5ydW5fbmFtZXNfaW5kZXhbcmRlcF0pCisKKyAgICAgICAgICAgICAgICByZGVwZW5kcyA9IHNlbGYucmVjaXBlY2FjaGUucnVuZGVwc1tmbl0KKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBrZyJdW3BhY2thZ2VdID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcmRlcGVuZHNbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl1bcGFja2FnZV0uYXBwZW5kKHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorCisgICAgICAgICAgICAgICAgcnJlY3MgPSBzZWxmLnJlY2lwZWNhY2hlLnJ1bnJlY3NbZm5dCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcnJlY3M6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXVtwYWNrYWdlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJyZWNzW3BhY2thZ2VdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJyZWNzLXBrZyJdW3BhY2thZ2VdLmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwYWNrYWdlKQorCisgICAgICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2Ugbm90IGluIGRlcGVuZF90cmVlWyJwYWNrYWdlcyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV0gPSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInBuIl0gPSBwbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bImZpbGVuYW1lIl0gPSBmbgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInBhY2thZ2VzIl1bcGFja2FnZV1bInZlcnNpb24iXSA9IHZlcnNpb24KKworICAgICAgICByZXR1cm4gZGVwZW5kX3RyZWUKKworICAgICMjIyMjIyMjIFdBUk5JTkcgOiB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGNhY2hlX2V4dHJhIHRvIGJlIGVuYWJsZWQgIyMjIyMjIyMKKyAgICBkZWYgZ2VuZXJhdGVQa2dEZXBUcmVlRGF0YShzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGRlcGVuZGVuY3kgdHJlZSBvZiBwa2dzX3RvX2J1aWxkLCByZXR1cm5pbmcgdGhlIGRhdGEuCisgICAgICAgICIiIgorICAgICAgICBfLCB0YXNrZGF0YSA9IHNlbGYucHJlcGFyZVRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisgICAgICAgIHRhc2tzX2ZuaWQgPSBbXQorICAgICAgICBpZiBsZW4odGFza2RhdGEudGFza3NfbmFtZSkgIT0gMDoKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza2RhdGEudGFza3NfbmFtZSkpOgorICAgICAgICAgICAgICAgIHRhc2tzX2ZuaWQuYXBwZW5kKHRhc2tkYXRhLnRhc2tzX2ZuaWRbdGFza10pCisKKyAgICAgICAgc2Vlbl9mbmlkcyA9IFtdCisgICAgICAgIGRlcGVuZF90cmVlID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXSA9IHt9CisgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdID0ge30KKyAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0gPSB7fQorICAgICAgICBkZXBlbmRfdHJlZVsicnJlY3MtcGtnIl0gPSB7fQorCisgICAgICAgICMgaWYgd2UgaGF2ZSBleHRyYSBjYWNoZXMsIGxpc3QgYWxsIGF0dHJpYnV0ZXMgdGhleSBicmluZyBpbgorICAgICAgICBleHRyYV9pbmZvID0gW10KKyAgICAgICAgZm9yIGNhY2hlX2NsYXNzIGluIHNlbGYuY2FjaGVzX2FycmF5OgorICAgICAgICAgICAgaWYgdHlwZShjYWNoZV9jbGFzcykgaXMgdHlwZSBhbmQgaXNzdWJjbGFzcyhjYWNoZV9jbGFzcywgYmIuY2FjaGUuUmVjaXBlSW5mb0NvbW1vbikgYW5kIGhhc2F0dHIoY2FjaGVfY2xhc3MsICdjYWNoZWZpZWxkcycpOgorICAgICAgICAgICAgICAgIGNhY2hlZmllbGRzID0gZ2V0YXR0cihjYWNoZV9jbGFzcywgJ2NhY2hlZmllbGRzJywgW10pCisgICAgICAgICAgICAgICAgZXh0cmFfaW5mbyA9IGV4dHJhX2luZm8gKyBjYWNoZWZpZWxkcworCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4odGFza3NfZm5pZCkpOgorICAgICAgICAgICAgZm5pZCA9IHRhc2tzX2ZuaWRbdGFza10KKyAgICAgICAgICAgIGZuID0gdGFza2RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZm5dCisKKyAgICAgICAgICAgIGlmIHBuIG5vdCBpbiBkZXBlbmRfdHJlZVsicG4iXToKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicG4iXVtwbl0gPSB7fQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiZmlsZW5hbWUiXSA9IGZuCisgICAgICAgICAgICAgICAgdmVyc2lvbiAgPSAiJXM6JXMtJXMiICUgc2VsZi5yZWNpcGVjYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsidmVyc2lvbiJdID0gdmVyc2lvbgorICAgICAgICAgICAgICAgIHJkZXBlbmRzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXQorICAgICAgICAgICAgICAgIHJyZWNzID0gc2VsZi5yZWNpcGVjYWNoZS5ydW5yZWNzW2ZuXQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVsiaW5oZXJpdHMiXSA9IHNlbGYucmVjaXBlY2FjaGUuaW5oZXJpdHMuZ2V0KGZuLCBOb25lKQorCisgICAgICAgICAgICAgICAgIyBmb3IgYWxsIGV4dHJhIGF0dHJpYnV0ZXMgc3RvcmVkLCBhZGQgdGhlbSB0byB0aGUgZGVwZW5kZW5jeSB0cmVlCisgICAgICAgICAgICAgICAgZm9yIGVpIGluIGV4dHJhX2luZm86CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJwbiJdW3BuXVtlaV0gPSB2YXJzKHNlbGYucmVjaXBlY2FjaGUpW2VpXVtmbl0KKworICAgICAgICAgICAgaWYgZm5pZCBub3QgaW4gc2Vlbl9mbmlkczoKKyAgICAgICAgICAgICAgICBzZWVuX2ZuaWRzLmFwcGVuZChmbmlkKQorCisgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbImRlcGVuZHMiXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gdGFza2RhdGEuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGFza2RhdGEuYnVpbGRfbmFtZXNfaW5kZXhbZGVwXQorICAgICAgICAgICAgICAgICAgICBwbl9wcm92aWRlciA9ICIiCisgICAgICAgICAgICAgICAgICAgIHRhcmdldGlkID0gdGFza2RhdGEuZ2V0YnVpbGRfaWQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEuYnVpbGRfdGFyZ2V0cyBhbmQgdGFza2RhdGEuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF06CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IHRhc2tkYXRhLmJ1aWxkX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBmbl9wcm92aWRlciA9IHRhc2tkYXRhLmZuX2luZGV4W2lkXQorICAgICAgICAgICAgICAgICAgICAgICAgcG5fcHJvdmlkZXIgPSBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltmbl9wcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Byb3ZpZGVyID0gaXRlbQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsiZGVwZW5kcyJdW3BuXS5hcHBlbmQocG5fcHJvdmlkZXIpCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcG4iXVtwbl0gPSBbXQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIHRhc2tkYXRhLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0YXNrZGF0YS5ydW5fbmFtZXNfaW5kZXhbcmRlcF0KKyAgICAgICAgICAgICAgICAgICAgcG5fcnByb3ZpZGVyID0gIiIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0aWQgPSB0YXNrZGF0YS5nZXRydW5faWQoaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0aWQgaW4gdGFza2RhdGEucnVuX3RhcmdldHMgYW5kIHRhc2tkYXRhLnJ1bl90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gdGFza2RhdGEucnVuX3RhcmdldHNbdGFyZ2V0aWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBmbl9ycHJvdmlkZXIgPSB0YXNrZGF0YS5mbl9pbmRleFtpZF0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuW2ZuX3Jwcm92aWRlcl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuX3Jwcm92aWRlciA9IGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kX3RyZWVbInJkZXBlbmRzLXBuIl1bcG5dLmFwcGVuZChwbl9ycHJvdmlkZXIpCisKKyAgICAgICAgICAgICAgICBkZXBlbmRfdHJlZVsicmRlcGVuZHMtcGtnIl0udXBkYXRlKHJkZXBlbmRzKQorICAgICAgICAgICAgICAgIGRlcGVuZF90cmVlWyJycmVjcy1wa2ciXS51cGRhdGUocnJlY3MpCisKKyAgICAgICAgcmV0dXJuIGRlcGVuZF90cmVlCisKKyAgICBkZWYgZ2VuZXJhdGVEZXBUcmVlRXZlbnQoc2VsZiwgcGtnc190b19idWlsZCwgdGFzayk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSB0YXNrIGRlcGVuZGVuY3kgZ3JhcGggb2YgcGtnc190b19idWlsZC4KKyAgICAgICAgR2VuZXJhdGUgYW4gZXZlbnQgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgICIiIgorICAgICAgICBkZXBncmFwaCA9IHNlbGYuZ2VuZXJhdGVUYXNrRGVwVHJlZURhdGEocGtnc190b19idWlsZCwgdGFzaykKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKGRlcGdyYXBoKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGdlbmVyYXRlRG90R3JhcGhGaWxlcyhzZWxmLCBwa2dzX3RvX2J1aWxkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIHRhc2sgZGVwZW5kZW5jeSBncmFwaCBvZiBwa2dzX3RvX2J1aWxkLgorICAgICAgICBTYXZlIHRoZSByZXN1bHQgdG8gYSBzZXQgb2YgLmRvdCBmaWxlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVwZ3JhcGggPSBzZWxmLmdlbmVyYXRlVGFza0RlcFRyZWVEYXRhKHBrZ3NfdG9fYnVpbGQsIHRhc2spCisKKyAgICAgICAgIyBQcmludHMgYSBmbGF0dGVuZWQgZm9ybSBvZiBwYWNrYWdlLWRlcGVuZHMgYmVsb3cgd2hlcmUgc3VicGFja2FnZXMgb2YgYSBwYWNrYWdlIGFyZSBtZXJnZWQgaW50byB0aGUgbWFpbiBwbgorICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwbi1kZXBlbmRzLmRvdCcsICd3JyApCisgICAgICAgIGJ1aWxkbGlzdF9maWxlID0gZmlsZSgncG4tYnVpbGRsaXN0JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwbiBpbiBkZXBncmFwaFsicG4iXToKKyAgICAgICAgICAgIGZuID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJmaWxlbmFtZSJdCisgICAgICAgICAgICB2ZXJzaW9uID0gZGVwZ3JhcGhbInBuIl1bcG5dWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIHByaW50KCciJXMiIFtsYWJlbD0iJXMgJXNcXG4lcyJdJyAlIChwbiwgcG4sIHZlcnNpb24sIGZuKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgICAgICBwcmludCgiJXMiICUgcG4sIGZpbGU9YnVpbGRsaXN0X2ZpbGUpCisgICAgICAgIGJ1aWxkbGlzdF9maWxlLmNsb3NlKCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gJ3BuLWJ1aWxkbGlzdCciKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbImRlcGVuZHMiXToKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAocG4sIGRlcGVuZCksIGZpbGU9ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgcG4gaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicmRlcGVuZHMtcG4iXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIiBbc3R5bGU9ZGFzaGVkXScgJSAocG4sIHJkZXBlbmQpLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgcHJpbnQoIn0iLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgbG9nZ2VyLmluZm8oIlBOIGRlcGVuZGVuY2llcyBzYXZlZCB0byAncG4tZGVwZW5kcy5kb3QnIikKKworICAgICAgICBkZXBlbmRzX2ZpbGUgPSBmaWxlKCdwYWNrYWdlLWRlcGVuZHMuZG90JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJwYWNrYWdlcyJdOgorICAgICAgICAgICAgcG4gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsicG4iXQorICAgICAgICAgICAgZm4gPSBkZXBncmFwaFsicGFja2FnZXMiXVtwYWNrYWdlXVsiZmlsZW5hbWUiXQorICAgICAgICAgICAgdmVyc2lvbiA9IGRlcGdyYXBoWyJwYWNrYWdlcyJdW3BhY2thZ2VdWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIGlmIHBhY2thZ2UgPT0gcG46CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgW2xhYmVsPSIlcyAlc1xcbiVzIl0nICUgKHBuLCBwbiwgdmVyc2lvbiwgZm4pLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgW2xhYmVsPSIlcyglcykgJXNcXG4lcyJdJyAlIChwYWNrYWdlLCBwYWNrYWdlLCBwbiwgdmVyc2lvbiwgZm4pLCBmaWxlPWRlcGVuZHNfZmlsZSkKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwbl06CisgICAgICAgICAgICAgICAgcHJpbnQoJyIlcyIgLT4gIiVzIicgJSAocGFja2FnZSwgZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wa2ciXToKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIGRlcGdyYXBoWyJyZGVwZW5kcy1wa2ciXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiIFtzdHlsZT1kYXNoZWRdJyAlIChwYWNrYWdlLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJycmVjcy1wa2ciXToKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIGRlcGdyYXBoWyJycmVjcy1wa2ciXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiIFtzdHlsZT1kYXNoZWRdJyAlIChwYWNrYWdlLCByZGVwZW5kKSwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT1kZXBlbmRzX2ZpbGUpCisgICAgICAgIGxvZ2dlci5pbmZvKCJQYWNrYWdlIGRlcGVuZGVuY2llcyBzYXZlZCB0byAncGFja2FnZS1kZXBlbmRzLmRvdCciKQorCisgICAgICAgIHRkZXBlbmRzX2ZpbGUgPSBmaWxlKCd0YXNrLWRlcGVuZHMuZG90JywgJ3cnICkKKyAgICAgICAgcHJpbnQoImRpZ3JhcGggZGVwZW5kcyB7IiwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBmb3IgdGFzayBpbiBkZXBncmFwaFsidGRlcGVuZHMiXToKKyAgICAgICAgICAgIChwbiwgdGFza25hbWUpID0gdGFzay5yc3BsaXQoIi4iLCAxKQorICAgICAgICAgICAgZm4gPSBkZXBncmFwaFsicG4iXVtwbl1bImZpbGVuYW1lIl0KKyAgICAgICAgICAgIHZlcnNpb24gPSBkZXBncmFwaFsicG4iXVtwbl1bInZlcnNpb24iXQorICAgICAgICAgICAgcHJpbnQoJyIlcy4lcyIgW2xhYmVsPSIlcyAlc1xcbiVzXFxuJXMiXScgJSAocG4sIHRhc2tuYW1lLCBwbiwgdGFza25hbWUsIHZlcnNpb24sIGZuKSwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBncmFwaFsidGRlcGVuZHMiXVt0YXNrXToKKyAgICAgICAgICAgICAgICBwcmludCgnIiVzIiAtPiAiJXMiJyAlICh0YXNrLCBkZXApLCBmaWxlPXRkZXBlbmRzX2ZpbGUpCisgICAgICAgIHByaW50KCJ9IiwgZmlsZT10ZGVwZW5kc19maWxlKQorICAgICAgICBsb2dnZXIuaW5mbygiVGFzayBkZXBlbmRlbmNpZXMgc2F2ZWQgdG8gJ3Rhc2stZGVwZW5kcy5kb3QnIikKKworICAgIGRlZiBzaG93X2FwcGVuZHNfd2l0aF9ub19yZWNpcGVzKHNlbGYpOgorICAgICAgICAjIERldGVybWluZSB3aGljaCBiYmFwcGVuZHMgaGF2ZW4ndCBiZWVuIGFwcGxpZWQKKworICAgICAgICAjIEZpcnN0IGdldCBsaXN0IG9mIHJlY2lwZXMsIGluY2x1ZGluZyBza2lwcGVkCisgICAgICAgIHJlY2lwZWZucyA9IHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuLmtleXMoKQorICAgICAgICByZWNpcGVmbnMuZXh0ZW5kKHNlbGYuc2tpcGxpc3Qua2V5cygpKQorCisgICAgICAgICMgV29yayBvdXQgbGlzdCBvZiBiYmFwcGVuZHMgdGhhdCBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICBhcHBsaWVkX2FwcGVuZHMgPSBbXQorICAgICAgICBmb3IgZm4gaW4gcmVjaXBlZm5zOgorICAgICAgICAgICAgYXBwbGllZF9hcHBlbmRzLmV4dGVuZChzZWxmLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbikpCisKKyAgICAgICAgYXBwZW5kc193aXRob3V0X3JlY2lwZXMgPSBbXQorICAgICAgICBmb3IgXywgYXBwZW5kZm4gaW4gc2VsZi5jb2xsZWN0aW9uLmJiYXBwZW5kczoKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRmbiBpbiBhcHBsaWVkX2FwcGVuZHM6CisgICAgICAgICAgICAgICAgYXBwZW5kc193aXRob3V0X3JlY2lwZXMuYXBwZW5kKGFwcGVuZGZuKQorCisgICAgICAgIGlmIGFwcGVuZHNfd2l0aG91dF9yZWNpcGVzOgorICAgICAgICAgICAgbXNnID0gJ05vIHJlY2lwZXMgYXZhaWxhYmxlIGZvcjpcbiAgJXMnICUgJ1xuICAnLmpvaW4oYXBwZW5kc193aXRob3V0X3JlY2lwZXMpCisgICAgICAgICAgICB3YXJuX29ubHkgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFkiLCBcCisgICAgICAgICAgICAgICAgIEZhbHNlKSBvciAibm8iCisgICAgICAgICAgICBpZiB3YXJuX29ubHkubG93ZXIoKSBpbiAoIjEiLCAieWVzIiwgInRydWUiKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwobXNnKQorCisgICAgZGVmIGhhbmRsZVByZWZQcm92aWRlcnMoc2VsZik6CisKKyAgICAgICAgbG9jYWxkYXRhID0gZGF0YS5jcmVhdGVDb3B5KHNlbGYuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICAgICAgIyBIYW5kbGUgUFJFRkVSUkVEX1BST1ZJREVSUworICAgICAgICBmb3IgcCBpbiAobG9jYWxkYXRhLmdldFZhcignUFJFRkVSUkVEX1BST1ZJREVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChwcm92aWRlZSwgcHJvdmlkZXIpID0gcC5zcGxpdCgnOicpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcHJvdmlkZXJsb2cuY3JpdGljYWwoIk1hbGZvcm1lZCBvcHRpb24gaW4gUFJFRkVSUkVEX1BST1ZJREVSUyB2YXJpYWJsZTogJXMiICUgcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgcHJvdmlkZWUgaW4gc2VsZi5yZWNpcGVjYWNoZS5wcmVmZXJyZWQgYW5kIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSAhPSBwcm92aWRlcjoKKyAgICAgICAgICAgICAgICBwcm92aWRlcmxvZy5lcnJvcigiY29uZmxpY3RpbmcgcHJlZmVyZW5jZXMgZm9yICVzOiBib3RoICVzIGFuZCAlcyBzcGVjaWZpZWQiLCBwcm92aWRlZSwgcHJvdmlkZXIsIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucHJlZmVycmVkW3Byb3ZpZGVlXSA9IHByb3ZpZGVyCisKKyAgICBkZWYgZmluZENvcmVCYXNlRmlsZXMoc2VsZiwgc3ViZGlyLCBjb25maWdmaWxlKToKKyAgICAgICAgY29yZWJhc2UgPSBzZWxmLmRhdGEuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpIG9yICIiCisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY29yZWJhc2UgKyAnLycgKyBzdWJkaXIpOgorICAgICAgICAgICAgZm9yIGQgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBjb25maWdmaWxlcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBkLCBjb25maWdmaWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZpZ2ZpbGVwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBkKSkKKworICAgICAgICBpZiBwYXRoczoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQ29yZUJhc2VGaWxlc0ZvdW5kKHBhdGhzKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlUGF0aChzZWxmLCBjb25maWdmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIGxvY2F0aW9uIG9uIGRpc2sgb2YgY29uZmlnZmlsZSBhbmQgaWYgaXQgZXhpc3RzIGFuZCB3YXMgcGFyc2VkIGJ5IEJpdEJha2UKKyAgICAgICAgZW1pdCB0aGUgQ29uZmlnRmlsZVBhdGhGb3VuZCBldmVudCB3aXRoIHRoZSBwYXRoIHRvIHRoZSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9IGJiLmNvb2tlcmRhdGEuZmluZENvbmZpZ0ZpbGUoY29uZmlnZmlsZSwgc2VsZi5kYXRhKQorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIHBhcnNlZCBjb25maWd1cmF0aW9uIGZpbGVzIGJ5IHNlYXJjaGluZyB0aGUgZmlsZXMKKyAgICAgICAgIyBsaXN0ZWQgaW4gdGhlIF9fZGVwZW5kcyBhbmQgX19iYXNlX2RlcGVuZHMgdmFyaWFibGVzIHdpdGggYSAuY29uZiBzdWZmaXguCisgICAgICAgIGNvbmZmaWxlcyA9IFtdCisgICAgICAgIGRlcF9maWxlcyA9IHNlbGYuZGF0YS5nZXRWYXIoJ19fYmFzZV9kZXBlbmRzJywgRmFsc2UpIG9yIFtdCisgICAgICAgIGRlcF9maWxlcyA9IGRlcF9maWxlcyArIChzZWxmLmRhdGEuZ2V0VmFyKCdfX2RlcGVuZHMnLCBGYWxzZSkgb3IgW10pCisKKyAgICAgICAgZm9yIGYgaW4gZGVwX2ZpbGVzOgorICAgICAgICAgICAgaWYgZlswXS5lbmRzd2l0aCgiLmNvbmYiKToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMuYXBwZW5kKGZbMF0pCisKKyAgICAgICAgXywgY29uZiwgY29uZmZpbGUgPSBwYXRoLnJwYXJ0aXRpb24oImNvbmYvIikKKyAgICAgICAgbWF0Y2ggPSBvcy5wYXRoLmpvaW4oY29uZiwgY29uZmZpbGUpCisgICAgICAgICMgVHJ5IGFuZCBmaW5kIG1hdGNoZXMgZm9yIGNvbmYvY29uZmZpbGVuYW1lLmNvbmYgYXMgd2UgZG9uJ3QgYWx3YXlzCisgICAgICAgICMgaGF2ZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLgorICAgICAgICBmb3IgY2ZnIGluIGNvbmZmaWxlczoKKyAgICAgICAgICAgIGlmIGNmZy5lbmRzd2l0aChtYXRjaCk6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdGaWxlUGF0aEZvdW5kKHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCBmaWxlcGF0dGVybiwgZGlyZWN0b3J5KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaGVzIGZvciBmaWxlcyBtYXRjaGluZyB0aGUgcmVnZXggJ3BhdHRlcm4nIHdoaWNoIGFyZSBjaGlsZHJlbiBvZgorICAgICAgICAnZGlyZWN0b3J5JyBpbiBlYWNoIEJCUEFUSC4gaS5lLiB0byBmaW5kIGFsbCByb290ZnMgcGFja2FnZSBjbGFzc2VzIGF2YWlsYWJsZQorICAgICAgICB0byBCaXRCYWtlIG9uZSBjb3VsZCBjYWxsIGZpbmRGaWxlc01hdGNoaW5nSW5EaXIoc2VsZiwgJ3Jvb3Rmc18nLCAnY2xhc3NlcycpCisgICAgICAgIG9yIHRvIGZpbmQgYWxsIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBvbmUgY291bGQgY2FsbDoKKyAgICAgICAgZmluZEZpbGVzTWF0Y2hpbmdJbkRpcihzZWxmLCAnY29uZi9tYWNoaW5lcycsICdjb25mJykKKyAgICAgICAgIiIiCisKKyAgICAgICAgbWF0Y2hlcyA9IFtdCisgICAgICAgIHAgPSByZS5jb21waWxlKHJlLmVzY2FwZShmaWxlcGF0dGVybikpCisgICAgICAgIGJicGF0aHMgPSBzZWxmLmRhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgIGZvciBwYXRoIGluIGJicGF0aHM6CisgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIGRpcmVjdG9yeSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcnBhdGgpOgorICAgICAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcnBhdGgpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAuc2VhcmNoKGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGYpCisKKyAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kKGZpbGVwYXR0ZXJuLCBtYXRjaGVzKSwgc2VsZi5kYXRhKQorCisgICAgZGVmIGZpbmRDb25maWdGaWxlcyhzZWxmLCB2YXJuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgY29uZmlnIGZpbGVzIHdoaWNoIGFyZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHZhcm5hbWUuCisgICAgICAgIGkuZS4gTUFDSElORSwgRElTVFJPCisgICAgICAgICIiIgorICAgICAgICBwb3NzaWJsZSA9IFtdCisgICAgICAgIHZhciA9IHZhcm5hbWUubG93ZXIoKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgIyBpdGVyYXRlIGNvbmZpZ3MKKyAgICAgICAgYmJwYXRocyA9IGRhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgIGZvciBwYXRoIGluIGJicGF0aHM6CisgICAgICAgICAgICBjb25mcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAiY29uZiIsIHZhcikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmZwYXRoKToKKyAgICAgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhjb25mcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBjaGlsZCBmaWxlcywgdGhlc2UgYXJlIGFwcHJvcHJpYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwgc2VwLCBlbmQgPSBmLnJwYXJ0aXRpb24oJy4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5kID09ICdjb25mJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZS5hcHBlbmQodmFsKQorCisgICAgICAgIGlmIHBvc3NpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kKHZhciwgcG9zc2libGUpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgZmluZEluaGVyaXRzQ2xhc3Moc2VsZiwga2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCBhbGwgcmVjaXBlcyB3aGljaCBpbmhlcml0IHRoZSBzcGVjaWZpZWQgY2xhc3MKKyAgICAgICAgIiIiCisgICAgICAgIHBrZ19saXN0ID0gW10KKworICAgICAgICBmb3IgcGZuIGluIHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuOgorICAgICAgICAgICAgaW5oZXJpdHMgPSBzZWxmLnJlY2lwZWNhY2hlLmluaGVyaXRzLmdldChwZm4sIE5vbmUpCisgICAgICAgICAgICBpZiBpbmhlcml0cyBhbmQgaW5oZXJpdHMuY291bnQoa2xhc3MpID4gMDoKKyAgICAgICAgICAgICAgICBwa2dfbGlzdC5hcHBlbmQoc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bcGZuXSkKKworICAgICAgICByZXR1cm4gcGtnX2xpc3QKKworICAgIGRlZiBnZW5lcmF0ZVRhcmdldHNUcmVlKHNlbGYsIGtsYXNzPU5vbmUsIHBrZ3M9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIGRlcGVuZGVuY3kgdHJlZSBvZiBidWlsZGFibGUgdGFyZ2V0cworICAgICAgICBHZW5lcmF0ZSBhbiBldmVudCB3aXRoIHRoZSByZXN1bHQKKyAgICAgICAgIiIiCisgICAgICAgICMgaWYgdGhlIGNhbGxlciBoYXNuJ3Qgc3BlY2lmaWVkIGEgcGtncyBsaXN0IGRlZmF1bHQgdG8gdW5pdmVyc2UKKyAgICAgICAgaWYgbm90IHBrZ3M6CisgICAgICAgICAgICBwa2dzID0gWyd1bml2ZXJzZSddCisgICAgICAgICMgaWYgaW5oZXJpdGVkX2NsYXNzIHBhc3NlZCBlbnN1cmUgYWxsIHJlY2lwZXMgd2hpY2ggaW5oZXJpdCB0aGUKKyAgICAgICAgIyBzcGVjaWZpZWQgY2xhc3MgYXJlIGluY2x1ZGVkIGluIHBrZ3MKKyAgICAgICAgaWYga2xhc3M6CisgICAgICAgICAgICBleHRyYV9wa2dzID0gc2VsZi5maW5kSW5oZXJpdHNDbGFzcyhrbGFzcykKKyAgICAgICAgICAgIHBrZ3MgPSBwa2dzICsgZXh0cmFfcGtncworCisgICAgICAgICMgZ2VuZXJhdGUgYSBkZXBlbmRlbmN5IHRyZWUgZm9yIGFsbCBvdXIgcGFja2FnZXMKKyAgICAgICAgdHJlZSA9IHNlbGYuZ2VuZXJhdGVQa2dEZXBUcmVlRGF0YShwa2dzLCAnYnVpbGQnKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlRhcmdldHNUcmVlR2VuZXJhdGVkKHRyZWUpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgYnVpbGRXb3JsZFRhcmdldExpc3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgQnVpbGQgcGFja2FnZSBsaXN0IGZvciAiYml0YmFrZSB3b3JsZCIKKyAgICAgICAgIiIiCisgICAgICAgIHBhcnNlbG9nLmRlYnVnKDEsICJjb2xsYXRpbmcgcGFja2FnZXMgZm9yIFwid29ybGRcIiIpCisgICAgICAgIGZvciBmIGluIHNlbGYucmVjaXBlY2FjaGUucG9zc2libGVfd29ybGQ6CisgICAgICAgICAgICB0ZXJtaW5hbCA9IFRydWUKKyAgICAgICAgICAgIHBuID0gc2VsZi5yZWNpcGVjYWNoZS5wa2dfZm5bZl0KKworICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5yZWNpcGVjYWNoZS5wbl9wcm92aWRlc1twbl06CisgICAgICAgICAgICAgICAgaWYgcC5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiV29ybGQgYnVpbGQgc2tpcHBpbmcgJXMgZHVlIHRvICVzIHByb3ZpZGVyIHN0YXJ0aW5nIHdpdGggdmlydHVhbC8iLCBmLCBwKQorICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZm9yIHBmIGluIHNlbGYucmVjaXBlY2FjaGUucHJvdmlkZXJzW3BdOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZWNhY2hlLnBrZ19mbltwZl0gIT0gcG46CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiV29ybGQgYnVpbGQgc2tpcHBpbmcgJXMgZHVlIHRvIGJvdGggdXMgYW5kICVzIHByb3ZpZGluZyAlcyIsIGYsIHBmLCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWwgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHRlcm1pbmFsOgorICAgICAgICAgICAgICAgIHNlbGYucmVjaXBlY2FjaGUud29ybGRfdGFyZ2V0LmFkZChwbikKKworICAgIGRlZiBpbnRlcmFjdGl2ZU1vZGUoIHNlbGYgKToKKyAgICAgICAgIiIiRHJvcCBvZmYgaW50byBhIHNoZWxsIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gYmIgaW1wb3J0IHNoZWxsCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhcnNlbG9nLmV4Y2VwdGlvbigiSW50ZXJhY3RpdmUgbW9kZSBub3QgYXZhaWxhYmxlIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaGVsbC5zdGFydCggc2VsZiApCisKKworICAgIGRlZiBoYW5kbGVDb2xsZWN0aW9ucyggc2VsZiwgY29sbGVjdGlvbnMgKToKKyAgICAgICAgIiIiSGFuZGxlIGNvbGxlY3Rpb25zIiIiCisgICAgICAgIGVycm9ycyA9IEZhbHNlCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzID0gW10KKyAgICAgICAgaWYgY29sbGVjdGlvbnM6CisgICAgICAgICAgICBjb2xsZWN0aW9uX3ByaW9yaXRpZXMgPSB7fQorICAgICAgICAgICAgY29sbGVjdGlvbl9kZXBlbmRzID0ge30KKyAgICAgICAgICAgIGNvbGxlY3Rpb25fbGlzdCA9IGNvbGxlY3Rpb25zLnNwbGl0KCkKKyAgICAgICAgICAgIG1pbl9wcmlvID0gMAorICAgICAgICAgICAgZm9yIGMgaW4gY29sbGVjdGlvbl9saXN0OgorICAgICAgICAgICAgICAgICMgR2V0IGNvbGxlY3Rpb24gcHJpb3JpdHkgaWYgZGVmaW5lZCBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCQkZJTEVfUFJJT1JJVFlfJXMiICUgYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBwcmlvcml0eToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbyA9IGludChwcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiaW52YWxpZCB2YWx1ZSBmb3IgQkJGSUxFX1BSSU9SSVRZXyVzOiBcIiVzXCIiLCBjLCBwcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbWluX3ByaW8gPT0gMCBvciBwcmlvIDwgbWluX3ByaW86CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5fcHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NdID0gcHJpbworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSA9IE5vbmUKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZGVwZW5kZW5jaWVzIGFuZCBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgcHJpb3JpdHkgY2FsY3VsYXRpb24KKyAgICAgICAgICAgICAgICBkZXBzID0gc2VsZi5kYXRhLmdldFZhcigiTEFZRVJERVBFTkRTXyVzIiAlIGMsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgZGVwczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwbGlzdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIudXRpbHMuVmVyc2lvblN0cmluZ0V4Y2VwdGlvbiBhcyB2c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUkRFUEVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAsIG9wbGlzdCBpbiBkZXBsaXN0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGNvbGxlY3Rpb25fbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3BzdHIgaW4gb3BsaXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnZlciA9IHNlbGYuZGF0YS5nZXRWYXIoIkxBWUVSVkVSU0lPTl8lcyIgJSBkZXAsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcCwgZGVwdmVyKSA9IG9wc3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChsYXllcnZlciwgZGVwdmVyLCBvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uIGFzIHZzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnRXJyb3IgcGFyc2luZyBMQVlFUkRFUEVORFNfJXM6ICVzJyAlIChjLCBzdHIodnNlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gdmVyc2lvbiAlcyBvZiBsYXllciAnJXMnLCBidXQgdmVyc2lvbiAlcyBpcyBjdXJyZW50bHkgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24uIENoZWNrIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBtYXRjaGluZyB2ZXJzaW9ucy9icmFuY2hlcyBvZiB0aGVzZSB0d28gbGF5ZXJzLiIsIGMsIG9wc3RyLCBkZXAsIGxheWVydmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJMYXllciAnJXMnIGRlcGVuZHMgb24gdmVyc2lvbiAlcyBvZiBsYXllciAnJXMnLCB3aGljaCBleGlzdHMgaW4geW91ciBjb25maWd1cmF0aW9uIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbi4gQ2hlY2sgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBjb3JyZWN0IG1hdGNoaW5nIHZlcnNpb25zL2JyYW5jaGVzIG9mIHRoZXNlIHR3byBsYXllcnMuIiwgYywgb3BzdHIsIGRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIkxheWVyICclcycgZGVwZW5kcyBvbiBsYXllciAnJXMnLCBidXQgdGhpcyBsYXllciBpcyBub3QgZW5hYmxlZCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24iLCBjLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2RlcGVuZHNbY10gPSBkZXBsaXN0LmtleXMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25fZGVwZW5kc1tjXSA9IFtdCisKKyAgICAgICAgICAgICMgUmVjdXJzaXZlbHkgd29yayBvdXQgY29sbGVjdGlvbiBwcmlvcml0aWVzIGJhc2VkIG9uIGRlcGVuZGVuY2llcworICAgICAgICAgICAgZGVmIGNhbGNfbGF5ZXJfcHJpb3JpdHkoY29sbGVjdGlvbik6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjb2xsZWN0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHByaW8gPSBtaW5fcHJpbworICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGNvbGxlY3Rpb25fZGVwZW5kc1tjb2xsZWN0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfbGF5ZXJfcHJpb3JpdHkoZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcHJpbyA9IGNvbGxlY3Rpb25fcHJpb3JpdGllc1tkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBwcmlvID4gbWF4X2RlcHByaW86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2RlcHByaW8gPSBkZXBwcmlvCisgICAgICAgICAgICAgICAgICAgIG1heF9kZXBwcmlvICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgIkNhbGN1bGF0ZWQgcHJpb3JpdHkgb2YgbGF5ZXIgJXMgYXMgJWQiLCBjb2xsZWN0aW9uLCBtYXhfZGVwcHJpbykKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbl9wcmlvcml0aWVzW2NvbGxlY3Rpb25dID0gbWF4X2RlcHByaW8KKworICAgICAgICAgICAgIyBDYWxjdWxhdGUgYWxsIGxheWVyIHByaW9yaXRpZXMgdXNpbmcgY2FsY19sYXllcl9wcmlvcml0eSBhbmQgc3RvcmUgaW4gYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzCisgICAgICAgICAgICBmb3IgYyBpbiBjb2xsZWN0aW9uX2xpc3Q6CisgICAgICAgICAgICAgICAgY2FsY19sYXllcl9wcmlvcml0eShjKQorICAgICAgICAgICAgICAgIHJlZ2V4ID0gc2VsZi5kYXRhLmdldFZhcigiQkJGSUxFX1BBVFRFUk5fJXMiICUgYywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZWdleCA9PSBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWxvZy5lcnJvcigiQkJGSUxFX1BBVFRFUk5fJXMgbm90IGRlZmluZWQiICUgYykKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3JlID0gcmUuY29tcGlsZShyZWdleCkKKyAgICAgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKCJCQkZJTEVfUEFUVEVSTl8lcyBcIiVzXCIgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uIiwgYywgcmVnZXgpCisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcy5hcHBlbmQoKGMsIHJlZ2V4LCBjcmUsIGNvbGxlY3Rpb25fcHJpb3JpdGllc1tjXSkpCisgICAgICAgIGlmIGVycm9yczoKKyAgICAgICAgICAgICMgV2UndmUgYWxyZWFkeSBwcmludGVkIHRoZSBhY3R1YWwgZXJyb3IocykKKyAgICAgICAgICAgIHJhaXNlIENvbGxlY3Rpb25FcnJvcigiRXJyb3JzIGR1cmluZyBwYXJzaW5nIGxheWVyIGNvbmZpZ3VyYXRpb24iKQorCisgICAgZGVmIGJ1aWxkU2V0VmFycyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldHVwIGFueSB2YXJpYWJsZXMgbmVlZGVkIGJlZm9yZSBzdGFydGluZyBhIGJ1aWxkCisgICAgICAgICIiIgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKSAKKyAgICAgICAgaWYgbm90IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxETkFNRSIsICIke0RBVEV9JHtUSU1FfSIpCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJVSUxEU1RBUlQiLCB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycsIHQpKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJEQVRFIiwgdGltZS5zdHJmdGltZSgnJVklbSVkJywgdCkpCisgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIlRJTUUiLCB0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLCB0KSkKKworICAgIGRlZiBtYXRjaEZpbGVzKHNlbGYsIGJmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgdGhlIC5iYiBmaWxlcyB3aGljaCBtYXRjaCB0aGUgZXhwcmVzc2lvbiBpbiAnYnVpbGRmaWxlJy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJmLnN0YXJ0c3dpdGgoIi8iKSBvciBiZi5zdGFydHN3aXRoKCIuLi8iKToKKyAgICAgICAgICAgIGJmID0gb3MucGF0aC5hYnNwYXRoKGJmKQorCisgICAgICAgIHNlbGYuY29sbGVjdGlvbiA9IENvb2tlckNvbGxlY3RGaWxlcyhzZWxmLnJlY2lwZWNhY2hlLmJiZmlsZV9jb25maWdfcHJpb3JpdGllcykKKyAgICAgICAgZmlsZWxpc3QsIG1hc2tlZCA9IHNlbGYuY29sbGVjdGlvbi5jb2xsZWN0X2JiZmlsZXMoc2VsZi5kYXRhLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoYmYpCisgICAgICAgICAgICBiZiA9IG9zLnBhdGguYWJzcGF0aChiZikKKyAgICAgICAgICAgIHJldHVybiBbYmZdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmVnZXhwID0gcmUuY29tcGlsZShiZikKKyAgICAgICAgICAgIG1hdGNoZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgcmVnZXhwLnNlYXJjaChmKSBhbmQgb3MucGF0aC5pc2ZpbGUoZik6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGYpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcworCisgICAgZGVmIG1hdGNoRmlsZShzZWxmLCBidWlsZGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgLmJiIGZpbGUgd2hpY2ggbWF0Y2hlcyB0aGUgZXhwcmVzc2lvbiBpbiAnYnVpbGRmaWxlJy4KKyAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgbXVsdGlwbGUgZmlsZXMKKyAgICAgICAgIiIiCisgICAgICAgIG1hdGNoZXMgPSBzZWxmLm1hdGNoRmlsZXMoYnVpbGRmaWxlKQorICAgICAgICBpZiBsZW4obWF0Y2hlcykgIT0gMToKKyAgICAgICAgICAgIGlmIG1hdGNoZXM6CisgICAgICAgICAgICAgICAgbXNnID0gIlVuYWJsZSB0byBtYXRjaCAnJXMnIHRvIGEgc3BlY2lmaWMgcmVjaXBlIGZpbGUgLSAlcyBtYXRjaGVzIGZvdW5kOiIgJSAoYnVpbGRmaWxlLCBsZW4obWF0Y2hlcykpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiXG4gICAgJXMiICUgZgorICAgICAgICAgICAgICAgIHBhcnNlbG9nLmVycm9yKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAnJXMnIiAlIGJ1aWxkZmlsZSkKKyAgICAgICAgICAgIHJhaXNlIE5vU3BlY2lmaWNNYXRjaAorICAgICAgICByZXR1cm4gbWF0Y2hlc1swXQorCisgICAgZGVmIGJ1aWxkRmlsZShzZWxmLCBidWlsZGZpbGUsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdGhlIGZpbGUgbWF0Y2hpbmcgcmVnZXhwIGJ1aWxkZmlsZQorICAgICAgICAiIiIKKworICAgICAgICAjIFRvbyBtYW55IHBlb3BsZSB1c2UgLWIgYmVjYXVzZSB0aGV5IHRoaW5rIGl0J3MgaG93IHlvdSBub3JtYWxseQorICAgICAgICAjIHNwZWNpZnkgYSB0YXJnZXQgdG8gYmUgYnVpbHQsIHNvIHNob3cgYSB3YXJuaW5nCisgICAgICAgIGJiLndhcm4oIkJ1aWxkZmlsZSBzcGVjaWZpZWQsIGRlcGVuZGVuY2llcyB3aWxsIG5vdCBiZSBoYW5kbGVkLiBJZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCBkbyBub3QgdXNlIC1iIC8gLS1idWlsZGZpbGUuIikKKworICAgICAgICAjIFBhcnNlIHRoZSBjb25maWd1cmF0aW9uIGhlcmUuIFdlIG5lZWQgdG8gZG8gaXQgZXhwbGljaXRseSBoZXJlIHNpbmNlCisgICAgICAgICMgYnVpbGRGaWxlKCkgZG9lc24ndCB1c2UgdGhlIGNhY2hlCisgICAgICAgIHNlbGYucGFyc2VDb25maWd1cmF0aW9uKCkKKworICAgICAgICAjIElmIHdlIGFyZSB0b2xkIHRvIGRvIHRoZSBOb25lIHRhc2sgdGhlbiBxdWVyeSB0aGUgZGVmYXVsdCB0YXNrCisgICAgICAgIGlmICh0YXNrID09IE5vbmUpOgorICAgICAgICAgICAgdGFzayA9IHNlbGYuY29uZmlndXJhdGlvbi5jbWQKKworICAgICAgICBmbiwgY2xzID0gYmIuY2FjaGUuQ2FjaGUudmlydHVhbGZuMnJlYWxmbihidWlsZGZpbGUpCisgICAgICAgIGZuID0gc2VsZi5tYXRjaEZpbGUoZm4pCisKKyAgICAgICAgc2VsZi5idWlsZFNldFZhcnMoKQorCisgICAgICAgIGluZm9zID0gYmIuY2FjaGUuQ2FjaGUucGFyc2UoZm4sIHNlbGYuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlc19hcnJheSkKKyAgICAgICAgaW5mb3MgPSBkaWN0KGluZm9zKQorCisgICAgICAgIGZuID0gYmIuY2FjaGUuQ2FjaGUucmVhbGZuMnZpcnR1YWwoZm4sIGNscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5mb19hcnJheSA9IGluZm9zW2ZuXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgZG9lcyBub3QgZXhpc3QiICUgZm4pCisKKyAgICAgICAgaWYgaW5mb19hcnJheVswXS5za2lwcGVkOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIHdhcyBza2lwcGVkOiAlcyIgJSAoZm4sIGluZm9fYXJyYXlbMF0uc2tpcHJlYXNvbikpCisKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKGZuLCBpbmZvX2FycmF5KQorCisgICAgICAgICMgVHdlYWsgc29tZSB2YXJpYWJsZXMKKyAgICAgICAgaXRlbSA9IGluZm9fYXJyYXlbMF0ucG4KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyA9IHNldCgpCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUuYmJmaWxlX3ByaW9yaXR5W2ZuXSA9IDEKKworICAgICAgICAjIFJlbW92ZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS50YXNrX2RlcHNbZm5dWydkZXBlbmRzJ10gPSB7fQorICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmRlcHNbZm5dID0gW10KKyAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5ydW5kZXBzW2ZuXSA9IFtdCisgICAgICAgIHNlbGYucmVjaXBlY2FjaGUucnVucmVjc1tmbl0gPSBbXQorCisgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGZvciB0YXJnZXQgaWYgZm9yY2UgbW9kZSBhY3RpdmUKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmZvcmNlOgorICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIkludmFsaWRhdGUgdGFzayAlcywgJXMiLCB0YXNrLCBmbikKKyAgICAgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgICAgIHRhc2sgPSAiZG9fJXMiICUgdGFzaworICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmludmFsaWRhdGVfdGFzayh0YXNrLCBzZWxmLnJlY2lwZWNhY2hlLCBmbikKKworICAgICAgICAjIFNldHVwIHRhc2tkYXRhIHN0cnVjdHVyZQorICAgICAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKHNlbGYuY29uZmlndXJhdGlvbi5hYm9ydCkKKyAgICAgICAgdGFza2RhdGEuYWRkX3Byb3ZpZGVyKHNlbGYuZGF0YSwgc2VsZi5yZWNpcGVjYWNoZSwgaXRlbSkKKworICAgICAgICBidWlsZG5hbWUgPSBzZWxmLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBUcnVlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIFtpdGVtXSksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKworICAgICAgICAjIEV4ZWN1dGUgdGhlIHJ1bnF1ZXVlCisgICAgICAgIGlmIG5vdCB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICAgICAgdGFzayA9ICJkb18lcyIgJSB0YXNrCisgICAgICAgIHJ1bmxpc3QgPSBbW2l0ZW0sIHRhc2tdXQorCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKworICAgICAgICBkZWYgYnVpbGRGaWxlSWRsZShzZXJ2ZXIsIHJxLCBhYm9ydCk6CisKKyAgICAgICAgICAgIG1zZyA9IE5vbmUKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gMAorICAgICAgICAgICAgaWYgYWJvcnQgb3Igc2VsZi5zdGF0ZSA9PSBzdGF0ZS5mb3JjZXNodXRkb3duOgorICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJGb3JjZWQgc2h1dGRvd24iCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAyCisgICAgICAgICAgICBlbGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUuc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgIG1zZyA9ICJTdG9wcGVkIGJ1aWxkIgorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gMQorICAgICAgICAgICAgZmFpbHVyZXMgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gcnEuZXhlY3V0ZV9ydW5xdWV1ZSgpCisgICAgICAgICAgICBleGNlcHQgcnVucXVldWUuVGFza0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzICs9IGxlbihleGMuYXJncykKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQobGVuKHJxLnJxZGF0YS5ydW5xX2ZuaWQpLCBidWlsZG5hbWUsIGl0ZW0sIGZhaWx1cmVzLCBpbnRlcnJ1cHRlZCksIHNlbGYuZXhwYW5kZWRfZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQuZmluaXNoQXN5bmNDb21tYW5kKG1zZykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGlmIHJldHZhbCBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soYnVpbGRGaWxlSWRsZSwgcnEpCisKKyAgICBkZWYgYnVpbGRUYXJnZXRzKHNlbGYsIHRhcmdldHMsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0ZW1wdCB0byBidWlsZCB0aGUgdGFyZ2V0cyBzcGVjaWZpZWQKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIGJ1aWxkVGFyZ2V0c0lkbGUoc2VydmVyLCBycSwgYWJvcnQpOgorICAgICAgICAgICAgbXNnID0gTm9uZQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAwCisgICAgICAgICAgICBpZiBhYm9ydCBvciBzZWxmLnN0YXRlID09IHN0YXRlLmZvcmNlc2h1dGRvd246CisgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisgICAgICAgICAgICAgICAgbXNnID0gIkZvcmNlZCBzaHV0ZG93biIKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IDIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSA9PSBzdGF0ZS5zaHV0ZG93bjoKKyAgICAgICAgICAgICAgICBycS5maW5pc2hfcnVucXVldWUoRmFsc2UpCisgICAgICAgICAgICAgICAgbXNnID0gIlN0b3BwZWQgYnVpbGQiCisgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSAxCisgICAgICAgICAgICBmYWlsdXJlcyA9IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBycS5leGVjdXRlX3J1bnF1ZXVlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBydW5xdWV1ZS5UYXNrRmFpbHVyZSBhcyBleGM6CisgICAgICAgICAgICAgICAgZmFpbHVyZXMgKz0gbGVuKGV4Yy5hcmdzKQorICAgICAgICAgICAgICAgIHJldHZhbCA9IEZhbHNlCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kLmZpbmlzaEFzeW5jQ29tbWFuZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGlmIG5vdCByZXR2YWw6CisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5CdWlsZENvbXBsZXRlZChsZW4ocnEucnFkYXRhLnJ1bnFfZm5pZCksIGJ1aWxkbmFtZSwgdGFyZ2V0cywgZmFpbHVyZXMsIGludGVycnVwdGVkKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZC5maW5pc2hBc3luY0NvbW1hbmQobXNnKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgcmV0dmFsIGlzIFRydWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwKKworICAgICAgICBidWlsZC5yZXNldF9jYWNoZSgpCisgICAgICAgIHNlbGYuYnVpbGRTZXRWYXJzKCkKKworICAgICAgICB0YXNrZGF0YSwgcnVubGlzdCwgZnVsbHRhcmdldGxpc3QgPSBzZWxmLmJ1aWxkVGFza0RhdGEodGFyZ2V0cywgdGFzaywgc2VsZi5jb25maWd1cmF0aW9uLmFib3J0KQorCisgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIEZhbHNlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkJ1aWxkU3RhcnRlZChidWlsZG5hbWUsIGZ1bGx0YXJnZXRsaXN0KSwgc2VsZi5kYXRhKQorCisgICAgICAgIHJxID0gYmIucnVucXVldWUuUnVuUXVldWUoc2VsZiwgc2VsZi5kYXRhLCBzZWxmLnJlY2lwZWNhY2hlLCB0YXNrZGF0YSwgcnVubGlzdCkKKyAgICAgICAgaWYgJ3VuaXZlcnNlJyBpbiB0YXJnZXRzOgorICAgICAgICAgICAgcnEucnFkYXRhLndhcm5fbXVsdGlfYmIgPSBUcnVlCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2soYnVpbGRUYXJnZXRzSWRsZSwgcnEpCisKKworICAgIGRlZiBnZXRBbGxLZXlzV2l0aEZsYWdzKHNlbGYsIGZsYWdsaXN0KToKKyAgICAgICAgZHVtcCA9IHt9CisgICAgICAgIGZvciBrIGluIHNlbGYuZGF0YS5rZXlzKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdiA9IHNlbGYuZGF0YS5nZXRWYXIoaywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgay5zdGFydHN3aXRoKCJfXyIpIGFuZCBub3QgaXNpbnN0YW5jZSh2LCBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCk6CisgICAgICAgICAgICAgICAgICAgIGR1bXBba10gPSB7CisgICAgJ3YnIDogdiAsCisgICAgJ2hpc3RvcnknIDogc2VsZi5kYXRhLnZhcmhpc3RvcnkudmFyaWFibGUoayksCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZmxhZ2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wW2tdW2RdID0gc2VsZi5kYXRhLmdldFZhckZsYWcoaywgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwcmludChlKQorICAgICAgICByZXR1cm4gZHVtcAorCisKKyAgICBkZWYgZ2VuZXJhdGVOZXdJbWFnZShzZWxmLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgdGltZXN0YW1wLCBkZXNjcmlwdGlvbik6CisgICAgICAgICcnJworICAgICAgICBDcmVhdGUgYSBuZXcgaW1hZ2Ugd2l0aCBhICJyZXF1aXJlIi8iaW5oZXJpdCIgYmFzZV9pbWFnZSBzdGF0ZW1lbnQKKyAgICAgICAgJycnCisgICAgICAgIGlmIHRpbWVzdGFtcDoKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGltYWdlKVswXQorICAgICAgICAgICAgdGltZXN0ciA9IHRpbWUuc3RyZnRpbWUoIi0lWSVtJWQtJUglTSVTIikKKyAgICAgICAgICAgIGRlc3QgPSBpbWFnZV9uYW1lICsgc3RyKHRpbWVzdHIpICsgIi5iYiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpbWFnZS5lbmRzd2l0aCgiLmJiIik6CisgICAgICAgICAgICAgICAgZGVzdCA9IGltYWdlICsgIi5iYiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdCA9IGltYWdlCisKKyAgICAgICAgYmFzZW5hbWUgPSBGYWxzZQorICAgICAgICBpZiBiYXNlX2ltYWdlOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJhc2VfaW1hZ2UsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICByZXF1aXJlX2xpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBwID0gcmUuY29tcGlsZSgiSU1BR0VfQkFTRU5BTUUgKj0iKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIHAuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBUcnVlCisKKyAgICAgICAgd2l0aCBvcGVuKGRlc3QsICJ3IikgYXMgaW1hZ2VmaWxlOgorICAgICAgICAgICAgaWYgYmFzZV9pbWFnZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZSgiaW5oZXJpdCBjb3JlLWltYWdlXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0b3BkaXIgPSBzZWxmLmRhdGEuZ2V0VmFyKCJUT1BESVIiLCBGYWxzZSkKKyAgICAgICAgICAgICAgICBpZiB0b3BkaXIgaW4gYmFzZV9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHJlcXVpcmVfbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKCJyZXF1aXJlICIgKyBiYXNlX2ltYWdlICsgIlxuIikKKyAgICAgICAgICAgIGltYWdlX2luc3RhbGwgPSAiSU1BR0VfSU5TVEFMTCA9IFwiIgorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZV9xdWV1ZToKKyAgICAgICAgICAgICAgICBpbWFnZV9pbnN0YWxsICs9IHN0cihwYWNrYWdlKSArICIgIgorICAgICAgICAgICAgaW1hZ2VfaW5zdGFsbCArPSAiXCJcbiIKKyAgICAgICAgICAgIGltYWdlZmlsZS53cml0ZShpbWFnZV9pbnN0YWxsKQorCisgICAgICAgICAgICBkZXNjcmlwdGlvbl92YXIgPSAiREVTQ1JJUFRJT04gPSBcIiIgKyBkZXNjcmlwdGlvbiArICJcIlxuIgorICAgICAgICAgICAgaW1hZ2VmaWxlLndyaXRlKGRlc2NyaXB0aW9uX3ZhcikKKworICAgICAgICAgICAgaWYgYmFzZW5hbWU6CisgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIG92ZXJ3cml0dGVuIGluIGEgaW5oZXJpdGVkIGltYWdlLCByZXNldCBpdCB0byBkZWZhdWx0CisgICAgICAgICAgICAgICAgaW1hZ2VfYmFzZW5hbWUgPSAiSU1BR0VfQkFTRU5BTUUgPSBcIiR7UE59XCJcbiIKKyAgICAgICAgICAgICAgICBpbWFnZWZpbGUud3JpdGUoaW1hZ2VfYmFzZW5hbWUpCisKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmluaXRpYWwKKyAgICAgICAgaWYgdGltZXN0YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRpbWVzdHIKKworICAgIGRlZiB1cGRhdGVDYWNoZVN5bmMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhdGUgPT0gc3RhdGUucnVubmluZzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgcmVsb2FkIGZpbGVzIGZvciB3aGljaCB3ZSBnb3Qgbm90aWZpY2F0aW9ucworICAgICAgICBmb3IgcCBpbiBzZWxmLmlub3RpZnlfbW9kaWZpZWRfZmlsZXM6CisgICAgICAgICAgICBiYi5wYXJzZS51cGRhdGVfY2FjaGUocCkKKyAgICAgICAgc2VsZi5pbm90aWZ5X21vZGlmaWVkX2ZpbGVzID0gW10KKworICAgICAgICBpZiBub3Qgc2VsZi5iYXNlY29uZmlnX3ZhbGlkOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZWxvYWRpbmcgYmFzZSBjb25maWd1cmF0aW9uIGRhdGEiKQorICAgICAgICAgICAgc2VsZi5pbml0Q29uZmlndXJhdGlvbkRhdGEoKQorICAgICAgICAgICAgc2VsZi5iYXNlY29uZmlnX3ZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gRmFsc2UKKworICAgICMgVGhpcyBpcyBjYWxsZWQgZm9yIGFsbCBhc3luYyBjb21tYW5kcyB3aGVuIHNlbGYuc3RhdGUgIT0gcnVubmluZworICAgIGRlZiB1cGRhdGVDYWNoZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSA9PSBzdGF0ZS5ydW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpbiAoc3RhdGUuc2h1dGRvd24sIHN0YXRlLmZvcmNlc2h1dGRvd24sIHN0YXRlLmVycm9yKToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wYXJzZXIsICdzaHV0ZG93bicpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLnNodXRkb3duKGNsZWFuPUZhbHNlLCBmb3JjZSA9IFRydWUpCisgICAgICAgICAgICByYWlzZSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgIT0gc3RhdGUucGFyc2luZzoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlQ2FjaGVTeW5jKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlICE9IHN0YXRlLnBhcnNpbmcgYW5kIG5vdCBzZWxmLnBhcnNlY2FjaGVfdmFsaWQ6CisgICAgICAgICAgICBzZWxmLnBhcnNlQ29uZmlndXJhdGlvbiAoKQorICAgICAgICAgICAgaWYgQ29va2VyRmVhdHVyZXMuU0VORF9TQU5JVFlFVkVOVFMgaW4gc2VsZi5mZWF0dXJlc2V0OgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2soRmFsc2UpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgIGlnbm9yZSA9IHNlbGYuZXhwYW5kZWRfZGF0YS5nZXRWYXIoIkFTU1VNRV9QUk9WSURFRCIsIFRydWUpIG9yICIiCisgICAgICAgICAgICBzZWxmLnJlY2lwZWNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzID0gc2V0KGlnbm9yZS5zcGxpdCgpKQorCisgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9hc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcy5hZGQoZGVwKQorCisgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBDb29rZXJDb2xsZWN0RmlsZXMoc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMpCisgICAgICAgICAgICAoZmlsZWxpc3QsIG1hc2tlZCkgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdF9iYmZpbGVzKHNlbGYuZGF0YSwgc2VsZi5leHBhbmRlZF9kYXRhKQorCisgICAgICAgICAgICBzZWxmLnBhcnNlciA9IENvb2tlclBhcnNlcihzZWxmLCBmaWxlbGlzdCwgbWFza2VkKQorICAgICAgICAgICAgc2VsZi5wYXJzZWNhY2hlX3ZhbGlkID0gVHJ1ZQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5wYXJzaW5nCisKKyAgICAgICAgaWYgbm90IHNlbGYucGFyc2VyLnBhcnNlX25leHQoKToKKyAgICAgICAgICAgIGNvbGxlY3Rsb2cuZGVidWcoMSwgInBhcnNpbmcgY29tcGxldGUiKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZXIuZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuc2hvd19hcHBlbmRzX3dpdGhfbm9fcmVjaXBlcygpCisgICAgICAgICAgICBzZWxmLmhhbmRsZVByZWZQcm92aWRlcnMoKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVjYWNoZS5iYmZpbGVfcHJpb3JpdHkgPSBzZWxmLmNvbGxlY3Rpb24uY29sbGVjdGlvbl9wcmlvcml0aWVzKHNlbGYucmVjaXBlY2FjaGUucGtnX2ZuLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUucnVubmluZworCisgICAgICAgICAgICAjIFNlbmQgYW4gZXZlbnQgbGlzdGluZyBhbGwgc3RhbXBzIHJlYWNoYWJsZSBhZnRlciBwYXJzaW5nCisgICAgICAgICAgICAjIHdoaWNoIHRoZSBtZXRhZGF0YSBtYXkgdXNlIHRvIGNsZWFuIHVwIHN0YWxlIGRhdGEKKyAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzKHNlbGYucmVjaXBlY2FjaGUuc3RhbXApCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tQYWNrYWdlcyhzZWxmLCBwa2dzX3RvX2J1aWxkKToKKworICAgICAgICAjIFJldHVybiBhIGNvcHksIGRvbid0IG1vZGlmeSB0aGUgb3JpZ2luYWwKKyAgICAgICAgcGtnc190b19idWlsZCA9IHBrZ3NfdG9fYnVpbGRbOl0KKworICAgICAgICBpZiBsZW4ocGtnc190b19idWlsZCkgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE5vdGhpbmdUb0J1aWxkCisKKyAgICAgICAgaWdub3JlID0gKHNlbGYuZXhwYW5kZWRfZGF0YS5nZXRWYXIoIkFTU1VNRV9QUk9WSURFRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIGlmIHBrZyBpbiBpZ25vcmU6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cud2FybigiRXhwbGljaXQgdGFyZ2V0IFwiJXNcIiBpcyBpbiBBU1NVTUVfUFJPVklERUQsIGlnbm9yaW5nIiAlIHBrZykKKworICAgICAgICBpZiAnd29ybGQnIGluIHBrZ3NfdG9fYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkV29ybGRUYXJnZXRMaXN0KCkKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd3b3JsZCcpCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLndvcmxkX3RhcmdldDoKKyAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorCisgICAgICAgIGlmICd1bml2ZXJzZScgaW4gcGtnc190b19idWlsZDoKKyAgICAgICAgICAgIHBhcnNlbG9nLndhcm4oIlRoZSBcInVuaXZlcnNlXCIgdGFyZ2V0IGlzIG9ubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIG1heSBwcm9kdWNlIGVycm9ycy4iKQorICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMSwgImNvbGxhdGluZyBwYWNrYWdlcyBmb3IgXCJ1bml2ZXJzZVwiIikKKyAgICAgICAgICAgIHBrZ3NfdG9fYnVpbGQucmVtb3ZlKCd1bml2ZXJzZScpCisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLnJlY2lwZWNhY2hlLnVuaXZlcnNlX3RhcmdldDoKKyAgICAgICAgICAgICAgICBwa2dzX3RvX2J1aWxkLmFwcGVuZCh0KQorCisgICAgICAgIHJldHVybiBwa2dzX3RvX2J1aWxkCisKKworCisKKyAgICBkZWYgcHJlX3NlcnZlKHNlbGYpOgorICAgICAgICAjIEVtcHR5IHRoZSBlbnZpcm9ubWVudC4gVGhlIGVudmlyb25tZW50IHdpbGwgYmUgcG9wdWxhdGVkIGFzCisgICAgICAgICMgbmVjZXNzYXJ5IGZyb20gdGhlIGRhdGEgc3RvcmUuCisgICAgICAgICNiYi51dGlscy5lbXB0eV9lbnZpcm9ubWVudCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucHJob3N0ID0gcHJzZXJ2LnNlcnYuYXV0b19zdGFydChzZWxmLmRhdGEpCisgICAgICAgIGV4Y2VwdCBwcnNlcnYuc2Vydi5QUlNlcnZpY2VDb25maWdFcnJvcjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUuZXJyb3IKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcG9zdF9zZXJ2ZShzZWxmKToKKyAgICAgICAgcHJzZXJ2LnNlcnYuYXV0b19zaHV0ZG93bihzZWxmLmRhdGEpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoQ29va2VyRXhpdCgpLCBzZWxmLmV4cGFuZGVkX2RhdGEpCisgICAgICAgIGxvY2tmaWxlID0gc2VsZi5sb2NrLm5hbWUKKyAgICAgICAgc2VsZi5sb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb2NrID0gTm9uZQorCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmxvY2s6CisgICAgICAgICAgICB3aXRoIGJiLnV0aWxzLnRpbWVvdXQoMyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja2ZpbGUsIHNoYXJlZD1GYWxzZSwgcmV0cnk9RmFsc2UsIGJsb2NrPVRydWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYubG9jazoKKyAgICAgICAgICAgICAgICAgICAgIyBTb21lIHN5c3RlbXMgbWF5IG5vdCBoYXZlIGxzb2YgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgIHByb2NzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHNvZiIsICctdycsIGxvY2tmaWxlXSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGZ1c2VyIGlmIGxzb2YgaXMgdW5hdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jcyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZnVzZXIiLCAnLXYnLCBsb2NrZmlsZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIkRlbGF5aW5nIHNodXRkb3duIGR1ZSB0byBhY3RpdmUgcHJvY2Vzc2VzIHdoaWNoIGFwcGVhciB0byBiZSBob2xkaW5nIGJpdGJha2UubG9jayIKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvY3M6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIjpcbiVzIiAlIHN0cihwcm9jcykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZiwgZm9yY2UgPSBGYWxzZSk6CisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlLmZvcmNlc2h1dGRvd24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5zaHV0ZG93bgorCisgICAgZGVmIGZpbmlzaGNvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZS5pbml0aWFsCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdENvbmZpZ3VyYXRpb25EYXRhKCkKKworICAgIGRlZiBsb2NrQml0YmFrZShzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2xvY2snKToKKyAgICAgICAgICAgIHNlbGYubG9jayA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YToKKyAgICAgICAgICAgICAgICBsb2NrZmlsZSA9IHNlbGYuZGF0YS5leHBhbmQoIiR7VE9QRElSfS9iaXRiYWtlLmxvY2siKQorICAgICAgICAgICAgICAgIGlmIGxvY2tmaWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZSwgRmFsc2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gc2VsZi5sb2NrCisKKyAgICBkZWYgdW5sb2NrQml0YmFrZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnbG9jaycpIGFuZCBzZWxmLmxvY2s6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKHNlbGYubG9jaykKKworZGVmIHNlcnZlcl9tYWluKGNvb2tlciwgZnVuYywgKmFyZ3MpOgorICAgIGNvb2tlci5wcmVfc2VydmUoKQorCisgICAgaWYgY29va2VyLmNvbmZpZ3VyYXRpb24ucHJvZmlsZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQcm9maWxlIGFzIHByb2ZpbGUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaW1wb3J0IHByb2ZpbGUKKyAgICAgICAgcHJvZiA9IHByb2ZpbGUuUHJvZmlsZSgpCisKKyAgICAgICAgcmV0ID0gcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgZnVuYywgKmFyZ3MpCisKKyAgICAgICAgcHJvZi5kdW1wX3N0YXRzKCJwcm9maWxlLmxvZyIpCisgICAgICAgIGJiLnV0aWxzLnByb2Nlc3NfcHJvZmlsZWxvZygicHJvZmlsZS5sb2ciKQorICAgICAgICBwcmludCgiUmF3IHByb2ZpbGluZyBpbmZvcm1hdGlvbiBzYXZlZCB0byBwcm9maWxlLmxvZyBhbmQgcHJvY2Vzc2VkIHN0YXRpc3RpY3MgdG8gcHJvZmlsZS5sb2cucHJvY2Vzc2VkIikKKworICAgIGVsc2U6CisgICAgICAgIHJldCA9IGZ1bmMoKmFyZ3MpCisKKyAgICBjb29rZXIucG9zdF9zZXJ2ZSgpCisKKyAgICByZXR1cm4gcmV0CisKK2NsYXNzIENvb2tlckV4aXQoYmIuZXZlbnQuRXZlbnQpOgorICAgICIiIgorICAgIE5vdGlmeSBjbGllbnRzIG9mIHRoZSBDb29rZXIgc2h1dGRvd24KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworCitjbGFzcyBDb29rZXJDb2xsZWN0RmlsZXMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpb3JpdGllcyk6CisgICAgICAgIHNlbGYuYmJhcHBlbmRzID0gW10KKyAgICAgICAgc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXMgPSBwcmlvcml0aWVzCisKKyAgICBkZWYgY2FsY19iYmZpbGVfcHJpb3JpdHkoIHNlbGYsIGZpbGVuYW1lLCBtYXRjaGVkID0gTm9uZSApOgorICAgICAgICBmb3IgXywgXywgcmVnZXgsIHByaSBpbiBzZWxmLmJiZmlsZV9jb25maWdfcHJpb3JpdGllczoKKyAgICAgICAgICAgIGlmIHJlZ2V4Lm1hdGNoKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBtYXRjaGVkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWdleCBpbiBtYXRjaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5hZGQocmVnZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHByaQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGdldF9iYmZpbGVzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbGlzdCBvZiBkZWZhdWx0IC5iYiBmaWxlcyBieSByZWFkaW5nIG91dCB0aGUgY3VycmVudCBkaXJlY3RvcnkiIiIKKyAgICAgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbnRlbnRzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBiYmZpbGVzID0gW10KKyAgICAgICAgZm9yIGYgaW4gY29udGVudHM6CisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCIuYmIiKToKKyAgICAgICAgICAgICAgICBiYmZpbGVzLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHBhdGgsIGYpKSkKKyAgICAgICAgcmV0dXJuIGJiZmlsZXMKKworICAgIGRlZiBmaW5kX2JiZmlsZXMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIkZpbmQgYWxsIHRoZSAuYmIgYW5kIC5iYmFwcGVuZCBmaWxlcyBpbiBhIGRpcmVjdG9yeSIiIgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBkaXIsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICBmb3IgaWdub3JlZCBpbiAoJ1NDQ1MnLCAnQ1ZTJywgJy5zdm4nKToKKyAgICAgICAgICAgICAgICBpZiBpZ25vcmVkIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKGlnbm9yZWQpCisgICAgICAgICAgICBmb3VuZCArPSBbb3MucGF0aC5qb2luKGRpciwgZikgZm9yIGYgaW4gZmlsZXMgaWYgKGYuZW5kc3dpdGgoWycuYmInLCAnLmJiYXBwZW5kJ10pKV0KKworICAgICAgICByZXR1cm4gZm91bmQKKworICAgIGRlZiBjb2xsZWN0X2JiZmlsZXMoc2VsZiwgY29uZmlnLCBldmVudGRhdGEpOgorICAgICAgICAiIiJDb2xsZWN0IGFsbCBhdmFpbGFibGUgLmJiIGJ1aWxkIGZpbGVzIiIiCisgICAgICAgIG1hc2tlZCA9IDAKKworICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJjb2xsZWN0aW5nIC5iYiBmaWxlcyIpCisKKyAgICAgICAgZmlsZXMgPSAoY29uZmlnLmdldFZhciggIkJCRklMRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBjb25maWcuc2V0VmFyKCJCQkZJTEVTIiwgIiAiLmpvaW4oZmlsZXMpKQorCisgICAgICAgICMgU29ydCBmaWxlcyBieSBwcmlvcml0eQorICAgICAgICBmaWxlcy5zb3J0KCBrZXk9bGFtYmRhIGZpbGVpdGVtOiBzZWxmLmNhbGNfYmJmaWxlX3ByaW9yaXR5KGZpbGVpdGVtKSApCisKKyAgICAgICAgaWYgbm90IGxlbihmaWxlcyk6CisgICAgICAgICAgICBmaWxlcyA9IHNlbGYuZ2V0X2JiZmlsZXMoKQorCisgICAgICAgIGlmIG5vdCBsZW4oZmlsZXMpOgorICAgICAgICAgICAgY29sbGVjdGxvZy5lcnJvcigibm8gcmVjaXBlIGZpbGVzIHRvIGJ1aWxkLCBjaGVjayB5b3VyIEJCUEFUSCBhbmQgQkJGSUxFUz8iKQorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShDb29rZXJFeGl0KCksIGV2ZW50ZGF0YSkKKworICAgICAgICAjIENhbid0IHVzZSBzZXQgaGVyZSBhcyBvcmRlciBpcyBpbXBvcnRhbnQKKyAgICAgICAgbmV3ZmlsZXMgPSBbXQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgZGlyZmlsZXMgPSBzZWxmLmZpbmRfYmJmaWxlcyhmKQorICAgICAgICAgICAgICAgIGZvciBnIGluIGRpcmZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBnIG5vdCBpbiBuZXdmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbGVzLmFwcGVuZChnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBnbG9iYmVkID0gZ2xvYi5nbG9iKGYpCisgICAgICAgICAgICAgICAgaWYgbm90IGdsb2JiZWQgYW5kIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgICAgICAgICBnbG9iYmVkID0gW2ZdCisgICAgICAgICAgICAgICAgZm9yIGcgaW4gZ2xvYmJlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZyBub3QgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdmaWxlcy5hcHBlbmQoZykKKworICAgICAgICBiYm1hc2sgPSBjb25maWcuZ2V0VmFyKCdCQk1BU0snLCBUcnVlKQorCisgICAgICAgIGlmIGJibWFzazoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYm1hc2tfY29tcGlsZWQgPSByZS5jb21waWxlKGJibWFzaykKKyAgICAgICAgICAgIGV4Y2VwdCBzcmVfY29uc3RhbnRzLmVycm9yOgorICAgICAgICAgICAgICAgIGNvbGxlY3Rsb2cuY3JpdGljYWwoIkJCTUFTSyBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24sIGlnbm9yaW5nLiIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QobmV3ZmlsZXMpLCAwCisKKyAgICAgICAgYmJmaWxlcyA9IFtdCisgICAgICAgIGJiYXBwZW5kID0gW10KKyAgICAgICAgZm9yIGYgaW4gbmV3ZmlsZXM6CisgICAgICAgICAgICBpZiBiYm1hc2sgYW5kIGJibWFza19jb21waWxlZC5zZWFyY2goZik6CisgICAgICAgICAgICAgICAgY29sbGVjdGxvZy5kZWJ1ZygxLCAic2tpcHBpbmcgbWFza2VkIGZpbGUgJXMiLCBmKQorICAgICAgICAgICAgICAgIG1hc2tlZCArPSAxCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgICAgIGJiZmlsZXMuYXBwZW5kKGYpCisgICAgICAgICAgICBlbGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kLmFwcGVuZChmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLmRlYnVnKDEsICJza2lwcGluZyAlczogdW5rbm93biBmaWxlIGV4dGVuc2lvbiIsIGYpCisKKyAgICAgICAgIyBCdWlsZCBhIGxpc3Qgb2YgLmJiYXBwZW5kIGZpbGVzIGZvciBlYWNoIC5iYiBmaWxlCisgICAgICAgIGZvciBmIGluIGJiYXBwZW5kOgorICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZikucmVwbGFjZSgnLmJiYXBwZW5kJywgJy5iYicpCisgICAgICAgICAgICBzZWxmLmJiYXBwZW5kcy5hcHBlbmQoKGJhc2UsIGYpKQorCisgICAgICAgICMgRmluZCBvdmVybGF5ZWQgcmVjaXBlcworICAgICAgICAjIGJiZmlsZXMgd2lsbCBiZSBpbiBwcmlvcml0eSBvcmRlciB3aGljaCBtYWtlcyB0aGlzIGVhc3kKKyAgICAgICAgYmJmaWxlX3NlZW4gPSBkaWN0KCkKKyAgICAgICAgc2VsZi5vdmVybGF5ZWQgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgICAgICBmb3IgZiBpbiByZXZlcnNlZChiYmZpbGVzKToKKyAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGYpCisgICAgICAgICAgICBpZiBiYXNlIG5vdCBpbiBiYmZpbGVfc2VlbjoKKyAgICAgICAgICAgICAgICBiYmZpbGVfc2VlbltiYXNlXSA9IGYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9wZmlsZSA9IGJiZmlsZV9zZWVuW2Jhc2VdCisgICAgICAgICAgICAgICAgc2VsZi5vdmVybGF5ZWRbdG9wZmlsZV0uYXBwZW5kKGYpCisKKyAgICAgICAgcmV0dXJuIChiYmZpbGVzLCBtYXNrZWQpCisKKyAgICBkZWYgZ2V0X2ZpbGVfYXBwZW5kcyhzZWxmLCBmbik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGEgbGlzdCBvZiAuYmJhcHBlbmQgZmlsZXMgdG8gYXBwbHkgdG8gZm4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgZiA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgIGZvciBiIGluIHNlbGYuYmJhcHBlbmRzOgorICAgICAgICAgICAgKGJiYXBwZW5kLCBmaWxlbmFtZSkgPSBiCisgICAgICAgICAgICBpZiAoYmJhcHBlbmQgPT0gZikgb3IgKCclJyBpbiBiYmFwcGVuZCBhbmQgYmJhcHBlbmQuc3RhcnRzd2l0aChmWzpiYmFwcGVuZC5pbmRleCgnJScpXSkpOgorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKyAgICBkZWYgY29sbGVjdGlvbl9wcmlvcml0aWVzKHNlbGYsIHBrZ2ZucywgZCk6CisKKyAgICAgICAgcHJpb3JpdGllcyA9IHt9CisKKyAgICAgICAgIyBDYWxjdWxhdGUgcHJpb3JpdGllcyBmb3IgZWFjaCBmaWxlCisgICAgICAgIG1hdGNoZWQgPSBzZXQoKQorICAgICAgICBmb3IgcCBpbiBwa2dmbnM6CisgICAgICAgICAgICByZWFsZm4sIGNscyA9IGJiLmNhY2hlLkNhY2hlLnZpcnR1YWxmbjJyZWFsZm4ocCkKKyAgICAgICAgICAgIHByaW9yaXRpZXNbcF0gPSBzZWxmLmNhbGNfYmJmaWxlX3ByaW9yaXR5KHJlYWxmbiwgbWF0Y2hlZCkKKworICAgICAgICAjIERvbid0IHNob3cgdGhlIHdhcm5pbmcgaWYgdGhlIEJCRklMRV9QQVRURVJOIGRpZCBtYXRjaCAuYmJhcHBlbmQgZmlsZXMKKyAgICAgICAgdW5tYXRjaGVkID0gc2V0KCkKKyAgICAgICAgZm9yIF8sIF8sIHJlZ2V4LCBwcmkgaW4gc2VsZi5iYmZpbGVfY29uZmlnX3ByaW9yaXRpZXM6CisgICAgICAgICAgICBpZiBub3QgcmVnZXggaW4gbWF0Y2hlZDoKKyAgICAgICAgICAgICAgICB1bm1hdGNoZWQuYWRkKHJlZ2V4KQorCisgICAgICAgIGRlZiBmaW5kbWF0Y2gocmVnZXgpOgorICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5iYmFwcGVuZHM6CisgICAgICAgICAgICAgICAgKGJiZmlsZSwgYXBwZW5kKSA9IGIKKyAgICAgICAgICAgICAgICBpZiByZWdleC5tYXRjaChhcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZm9yIHVubWF0Y2ggaW4gdW5tYXRjaGVkLmNvcHkoKToKKyAgICAgICAgICAgIGlmIGZpbmRtYXRjaCh1bm1hdGNoKToKKyAgICAgICAgICAgICAgICB1bm1hdGNoZWQucmVtb3ZlKHVubWF0Y2gpCisKKyAgICAgICAgZm9yIGNvbGxlY3Rpb24sIHBhdHRlcm4sIHJlZ2V4LCBfIGluIHNlbGYuYmJmaWxlX2NvbmZpZ19wcmlvcml0aWVzOgorICAgICAgICAgICAgaWYgcmVnZXggaW4gdW5tYXRjaGVkOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdCQkZJTEVfUEFUVEVSTl9JR05PUkVfRU1QVFlfJXMnICUgY29sbGVjdGlvbiwgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgICAgICBjb2xsZWN0bG9nLndhcm4oIk5vIGJiIGZpbGVzIG1hdGNoZWQgQkJGSUxFX1BBVFRFUk5fJXMgJyVzJyIgJSAoY29sbGVjdGlvbiwgcGF0dGVybikpCisKKyAgICAgICAgcmV0dXJuIHByaW9yaXRpZXMKKworY2xhc3MgUGFyc2luZ0ZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhbGV4Y2VwdGlvbiwgcmVjaXBlKToKKyAgICAgICAgc2VsZi5yZWFsZXhjZXB0aW9uID0gcmVhbGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnJlY2lwZSA9IHJlY2lwZQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgcmVhbGV4Y2VwdGlvbiwgcmVjaXBlKQorCitjbGFzcyBGZWVkZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JzLCB0b19wYXJzZXJzLCBxdWl0KToKKyAgICAgICAgc2VsZi5xdWl0ID0gcXVpdAorICAgICAgICBzZWxmLmpvYnMgPSBqb2JzCisgICAgICAgIHNlbGYudG9fcGFyc2VycyA9IHRvX3BhcnNlcnMKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX19pbml0X18oc2VsZikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcXVpdCA9IHNlbGYucXVpdC5nZXRfbm93YWl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHF1aXQgPT0gJ2NhbmNlbCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudG9fcGFyc2Vycy5jYW5jZWxfam9pbl90aHJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMucG9wKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRvX3BhcnNlcnMucHV0KGpvYiwgdGltZW91dD0wLjUpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRnVsbDoKKyAgICAgICAgICAgICAgICBzZWxmLmpvYnMuaW5zZXJ0KDAsIGpvYikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCitjbGFzcyBQYXJzZXIobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqb2JzLCByZXN1bHRzLCBxdWl0LCBpbml0LCBwcm9maWxlKToKKyAgICAgICAgc2VsZi5qb2JzID0gam9icworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzCisgICAgICAgIHNlbGYucXVpdCA9IHF1aXQKKyAgICAgICAgc2VsZi5pbml0ID0gaW5pdAorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbnRleHQgPSBiYi51dGlscy5nZXRfY29udGV4dCgpLmNvcHkoKQorICAgICAgICBzZWxmLmhhbmRsZXJzID0gYmIuZXZlbnQuZ2V0X2NsYXNzX2hhbmRsZXJzKCkuY29weSgpCisgICAgICAgIHNlbGYucHJvZmlsZSA9IHByb2ZpbGUKKworICAgIGRlZiBydW4oc2VsZik6CisKKyAgICAgICAgaWYgbm90IHNlbGYucHJvZmlsZToKKyAgICAgICAgICAgIHNlbGYucmVhbHJ1bigpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY1Byb2ZpbGUgYXMgcHJvZmlsZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpbXBvcnQgcHJvZmlsZQorICAgICAgICBwcm9mID0gcHJvZmlsZS5Qcm9maWxlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGwocHJvZiwgc2VsZi5yZWFscnVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZmlsZSA9ICJwcm9maWxlLXBhcnNlLSVzLmxvZyIgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGxvZ2ZpbGUpCisKKyAgICBkZWYgcmVhbHJ1bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbml0OgorICAgICAgICAgICAgc2VsZi5pbml0KCkKKworICAgICAgICBwZW5kaW5nID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnF1aXQuZ2V0X25vd2FpdCgpCisgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBwZW5kaW5nOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBlbmRpbmcucG9wKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBqb2IgPSBzZWxmLmpvYnMuZ2V0KHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBqb2IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlKCpqb2IpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHMucHV0KHJlc3VsdCwgdGltZW91dD0wLjI1KQorICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQocmVzdWx0KQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZpbGVuYW1lLCBhcHBlbmRzLCBjYWNoZXNfYXJyYXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlc2V0IG91ciBlbnZpcm9ubWVudCBhbmQgaGFuZGxlcnMgdG8gdGhlIG9yaWdpbmFsIHNldHRpbmdzCisgICAgICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChzZWxmLmNvbnRleHQuY29weSgpKQorICAgICAgICAgICAgYmIuZXZlbnQuc2V0X2NsYXNzX2hhbmRsZXJzKHNlbGYuaGFuZGxlcnMuY29weSgpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUsIGJiLmNhY2hlLkNhY2hlLnBhcnNlKGZpbGVuYW1lLCBhcHBlbmRzLCBzZWxmLmNmZywgY2FjaGVzX2FycmF5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KKyAgICAgICAgICAgIGV4Yy5yZWNpcGUgPSBmaWxlbmFtZQorICAgICAgICAgICAgZXhjLnRyYWNlYmFjayA9IGxpc3QoYmIuZXhjZXB0aW9ucy5leHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0zKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBleGMKKyAgICAgICAgIyBOZWVkIHRvIHR1cm4gQmFzZUV4Y2VwdGlvbnMgaW50byBFeGNlcHRpb25zIGhlcmUgc28gd2UgZ3JhY2VmdWxseSBzaHV0ZG93bgorICAgICAgICAjIGFuZCBmb3IgZXhhbXBsZSBhIHdvcmtlciB0aHJlYWQgZG9lc24ndCBqdXN0IGV4aXQgb24gaXRzIG93biBpbiByZXNwb25zZSB0bworICAgICAgICAjIGEgU3lzdGVtRXhpdCBldmVudCBmb3IgZXhhbXBsZS4KKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcmV0dXJuIFRydWUsIFBhcnNpbmdGYWlsdXJlKGV4YywgZmlsZW5hbWUpCisKK2NsYXNzIENvb2tlclBhcnNlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb29rZXIsIGZpbGVsaXN0LCBtYXNrZWQpOgorICAgICAgICBzZWxmLmZpbGVsaXN0ID0gZmlsZWxpc3QKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5jZmdkYXRhID0gY29va2VyLmRhdGEKKyAgICAgICAgc2VsZi5jZmdoYXNoID0gY29va2VyLmRhdGFfaGFzaAorCisgICAgICAgICMgQWNjb3VudGluZyBzdGF0aXN0aWNzCisgICAgICAgIHNlbGYucGFyc2VkID0gMAorICAgICAgICBzZWxmLmNhY2hlZCA9IDAKKyAgICAgICAgc2VsZi5lcnJvciA9IDAKKyAgICAgICAgc2VsZi5tYXNrZWQgPSBtYXNrZWQKKworICAgICAgICBzZWxmLnNraXBwZWQgPSAwCisgICAgICAgIHNlbGYudmlydHVhbHMgPSAwCisgICAgICAgIHNlbGYudG90YWwgPSBsZW4oZmlsZWxpc3QpCisKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gMAorICAgICAgICBzZWxmLm51bV9wcm9jZXNzZXMgPSBpbnQoc2VsZi5jZmdkYXRhLmdldFZhcigiQkJfTlVNQkVSX1BBUlNFX1RIUkVBRFMiLCBUcnVlKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQorICAgICAgICBzZWxmLnByb2Nlc3NfbmFtZXMgPSBbXQorCisgICAgICAgIHNlbGYuYmJfY2FjaGUgPSBiYi5jYWNoZS5DYWNoZShzZWxmLmNmZ2RhdGEsIHNlbGYuY2ZnaGFzaCwgY29va2VyLmNhY2hlc19hcnJheSkKKyAgICAgICAgc2VsZi5mcm9tY2FjaGUgPSBbXQorICAgICAgICBzZWxmLndpbGxwYXJzZSA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmZpbGVsaXN0OgorICAgICAgICAgICAgYXBwZW5kcyA9IHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmJiX2NhY2hlLmNhY2hlVmFsaWQoZmlsZW5hbWUsIGFwcGVuZHMpOgorICAgICAgICAgICAgICAgIHNlbGYud2lsbHBhcnNlLmFwcGVuZCgoZmlsZW5hbWUsIGFwcGVuZHMsIGNvb2tlci5jYWNoZXNfYXJyYXkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZyb21jYWNoZS5hcHBlbmQoKGZpbGVuYW1lLCBhcHBlbmRzKSkKKyAgICAgICAgc2VsZi50b3BhcnNlID0gc2VsZi50b3RhbCAtIGxlbihzZWxmLmZyb21jYWNoZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19jaHVuayA9IG1heChzZWxmLnRvcGFyc2UgLyAxMDAsIDEpCisKKyAgICAgICAgc2VsZi5zdGFydCgpCisgICAgICAgIHNlbGYuaGF2ZXNodXRkb3duID0gRmFsc2UKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gc2VsZi5sb2FkX2NhY2hlZCgpCisgICAgICAgIHNlbGYucHJvY2Vzc2VzID0gW10KKyAgICAgICAgaWYgc2VsZi50b3BhcnNlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5QYXJzZVN0YXJ0ZWQoc2VsZi50b3BhcnNlKSwgc2VsZi5jZmdkYXRhKQorICAgICAgICAgICAgZGVmIGluaXQoKToKKyAgICAgICAgICAgICAgICBQYXJzZXIuY2ZnID0gc2VsZi5jZmdkYXRhCisgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnV0aWwuRmluYWxpemUoTm9uZSwgYmIuY29kZXBhcnNlci5wYXJzZXJfY2FjaGVfc2F2ZSwgYXJncz0oc2VsZi5jZmdkYXRhLCksIGV4aXRwcmlvcml0eT0xKQorICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIGJiLmZldGNoLmZldGNoZXJfcGFyc2Vfc2F2ZSwgYXJncz0oc2VsZi5jZmdkYXRhLCksIGV4aXRwcmlvcml0eT0xKQorCisgICAgICAgICAgICBzZWxmLmZlZWRlcl9xdWl0ID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKG1heHNpemU9MSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUobWF4c2l6ZT1zZWxmLm51bV9wcm9jZXNzZXMpCisgICAgICAgICAgICBzZWxmLmpvYnMgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUobWF4c2l6ZT1zZWxmLm51bV9wcm9jZXNzZXMpCisgICAgICAgICAgICBzZWxmLnJlc3VsdF9xdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgICAgICBzZWxmLmZlZWRlciA9IEZlZWRlcihzZWxmLndpbGxwYXJzZSwgc2VsZi5qb2JzLCBzZWxmLmZlZWRlcl9xdWl0KQorICAgICAgICAgICAgc2VsZi5mZWVkZXIuc3RhcnQoKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2VsZi5udW1fcHJvY2Vzc2VzKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBQYXJzZXIoc2VsZi5qb2JzLCBzZWxmLnJlc3VsdF9xdWV1ZSwgc2VsZi5wYXJzZXJfcXVpdCwgaW5pdCwgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlKQorICAgICAgICAgICAgICAgIHBhcnNlci5zdGFydCgpCisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX25hbWVzLmFwcGVuZChwYXJzZXIubmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Nlcy5hcHBlbmQocGFyc2VyKQorCisgICAgICAgICAgICBzZWxmLnJlc3VsdHMgPSBpdGVydG9vbHMuY2hhaW4oc2VsZi5yZXN1bHRzLCBzZWxmLnBhcnNlX2dlbmVyYXRvcigpKQorCisgICAgZGVmIHNodXRkb3duKHNlbGYsIGNsZWFuPVRydWUsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLmhhdmVzaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmhhdmVzaHV0ZG93biA9IFRydWUKKworICAgICAgICBpZiBjbGVhbjoKKyAgICAgICAgICAgIGV2ZW50ID0gYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQoc2VsZi5jYWNoZWQsIHNlbGYucGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQsIHNlbGYubWFza2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZpcnR1YWxzLCBzZWxmLmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsKQorCisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGV2ZW50LCBzZWxmLmNmZ2RhdGEpCisgICAgICAgICAgICBzZWxmLmZlZWRlcl9xdWl0LnB1dChOb25lKQorICAgICAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wcm9jZXNzZXM6CisgICAgICAgICAgICAgICAgc2VsZi5qb2JzLnB1dChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mZWVkZXJfcXVpdC5wdXQoJ2NhbmNlbCcpCisKKyAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQuY2FuY2VsX2pvaW5fdGhyZWFkKCkKKyAgICAgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyX3F1aXQucHV0KE5vbmUpCisKKyAgICAgICAgICAgIHNlbGYuam9icy5jYW5jZWxfam9pbl90aHJlYWQoKQorCisgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHJvY2Vzc2VzOgorICAgICAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5qb2luKC4xKQorICAgICAgICAgICAgICAgIHByb2Nlc3MudGVybWluYXRlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2Vzcy5qb2luKCkKKyAgICAgICAgc2VsZi5mZWVkZXIuam9pbigpCisKKyAgICAgICAgc3luYyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuYmJfY2FjaGUuc3luYykKKyAgICAgICAgc3luYy5zdGFydCgpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy51dGlsLkZpbmFsaXplKE5vbmUsIHN5bmMuam9pbiwgZXhpdHByaW9yaXR5PS0xMDApCisgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX3NhdmVtZXJnZShzZWxmLmNvb2tlci5kYXRhKQorICAgICAgICBiYi5mZXRjaC5mZXRjaGVyX3BhcnNlX2RvbmUoc2VsZi5jb29rZXIuZGF0YSkKKyAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlOgorICAgICAgICAgICAgcHJvZmlsZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5wcm9jZXNzX25hbWVzOgorICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSAicHJvZmlsZS1wYXJzZS0lcy5sb2ciICUgaQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBwcm9maWxlcy5hcHBlbmQobG9nZmlsZSkKKworICAgICAgICAgICAgcG91dCA9ICJwcm9maWxlLXBhcnNlLmxvZy5wcm9jZXNzZWQiCisgICAgICAgICAgICBiYi51dGlscy5wcm9jZXNzX3Byb2ZpbGVsb2cocHJvZmlsZXMsIHBvdXQgPSBwb3V0KQorICAgICAgICAgICAgcHJpbnQoIlByb2Nlc3NlZCBwYXJzaW5nIHN0YXRpc3RpY3Mgc2F2ZWQgdG8gJXMiICUgKHBvdXQpKQorCisgICAgZGVmIGxvYWRfY2FjaGVkKHNlbGYpOgorICAgICAgICBmb3IgZmlsZW5hbWUsIGFwcGVuZHMgaW4gc2VsZi5mcm9tY2FjaGU6CisgICAgICAgICAgICBjYWNoZWQsIGluZm9zID0gc2VsZi5iYl9jYWNoZS5sb2FkKGZpbGVuYW1lLCBhcHBlbmRzLCBzZWxmLmNmZ2RhdGEpCisgICAgICAgICAgICB5aWVsZCBub3QgY2FjaGVkLCBpbmZvcworCisgICAgZGVmIHBhcnNlX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VkID49IHNlbGYudG9wYXJzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5yZXN1bHRfcXVldWUuZ2V0KHRpbWVvdXQ9MC4yNSkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0WzFdCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgQmFzZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisKKyAgICBkZWYgcGFyc2VfbmV4dChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgcGFyc2VkID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZWQsIHJlc3VsdCA9IHNlbGYucmVzdWx0cy5uZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBzZWxmLnNodXRkb3duKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gMQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgcmVjaXBlOiAlcycgJSBleGMucmVjaXBlKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgUGFyc2luZ0ZhaWx1cmUgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgIChleGMucmVjaXBlLCBiYi5leGNlcHRpb25zLnRvX3N0cmluZyhleGMucmVhbGV4Y2VwdGlvbikpKQorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bihjbGVhbj1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgYmIucGFyc2UuUGFyc2VFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5lcnJvciArPSAxCisgICAgICAgICAgICBfLCB2YWx1ZSwgXyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0V4cGFuc2lvbkVycm9yIGR1cmluZyBwYXJzaW5nICVzOiAlcycsIHZhbHVlLnJlY2lwZSwgc3RyKGV4YykpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duKGNsZWFuPUZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlICVzJywgZXhjLnJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmVycm9yICs9IDEKKyAgICAgICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgaGFzYXR0cih2YWx1ZSwgInJlY2lwZSIpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHBhcnNlICVzJywgdmFsdWUucmVjaXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIGV4Yy50cmFjZWJhY2spKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE1vc3QgbGlrZWx5LCBhbiBleGNlcHRpb24gb2NjdXJyZWQgZHVyaW5nIHJhaXNpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXhjZXB0aW9uIGR1cmluZyBwYXJzZTogJXMnICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oY2xlYW49RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmN1cnJlbnQgKz0gMQorICAgICAgICBzZWxmLnZpcnR1YWxzICs9IGxlbihyZXN1bHQpCisgICAgICAgIGlmIHBhcnNlZDoKKyAgICAgICAgICAgIHNlbGYucGFyc2VkICs9IDEKKyAgICAgICAgICAgIGlmIHNlbGYucGFyc2VkICUgc2VsZi5wcm9ncmVzc19jaHVuayA9PSAwOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyhzZWxmLnBhcnNlZCwgc2VsZi50b3BhcnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2ZnZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2FjaGVkICs9IDEKKworICAgICAgICBmb3IgdmlydHVhbGZuLCBpbmZvX2FycmF5IGluIHJlc3VsdDoKKyAgICAgICAgICAgIGlmIGluZm9fYXJyYXlbMF0uc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyLnNraXBsaXN0W3ZpcnR1YWxmbl0gPSBTa2lwcGVkUGFja2FnZShpbmZvX2FycmF5WzBdKQorICAgICAgICAgICAgc2VsZi5iYl9jYWNoZS5hZGRfaW5mbyh2aXJ0dWFsZm4sIGluZm9fYXJyYXksIHNlbGYuY29va2VyLnJlY2lwZWNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZD1wYXJzZWQsIHdhdGNoZXIgPSBzZWxmLmNvb2tlci5hZGRfZmlsZXdhdGNoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlcGFyc2Uoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBpbmZvcyA9IHNlbGYuYmJfY2FjaGUucGFyc2UoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZmdkYXRhLCBzZWxmLmNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIGZvciB2Zm4sIGluZm9fYXJyYXkgaW4gaW5mb3M6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZS5hZGRfZnJvbV9yZWNpcGVpbmZvKHZmbiwgaW5mb19hcnJheSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2Nvb2tlcmRhdGEucHkgYi9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOWMyODMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9jb29rZXJkYXRhLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFJPQUQgR21iSAorIyBDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIHN5cworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitmcm9tIGJiIGltcG9ydCBkYXRhCitpbXBvcnQgYmIucGFyc2UKKworbG9nZ2VyICAgICAgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCitwYXJzZWxvZyAgICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBhcnNpbmciKQorCitjbGFzcyBDb25maWdQYXJhbWV0ZXJzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3Y9c3lzLmFyZ3YpOgorICAgICAgICBzZWxmLm9wdGlvbnMsIHRhcmdldHMgPSBzZWxmLnBhcnNlQ29tbWFuZExpbmUoYXJndikKKyAgICAgICAgc2VsZi5lbnZpcm9ubWVudCA9IHNlbGYucGFyc2VFbnZpcm9ubWVudCgpCisKKyAgICAgICAgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQgPSB0YXJnZXRzIG9yIFtdCisKKyAgICAgICAgc2VsZi5vcHRpb25zLnRyYWNraW5nID0gRmFsc2UKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm9wdGlvbnMsICJzaG93X2Vudmlyb25tZW50IikgYW5kIHNlbGYub3B0aW9ucy5zaG93X2Vudmlyb25tZW50OgorICAgICAgICAgICAgc2VsZi5vcHRpb25zLnRyYWNraW5nID0gVHJ1ZQorCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBzZWxmLm9wdGlvbnMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYWxsZXIgbXVzdCBpbXBsZW1lbnQgY29tbWFuZGxpbmUgb3B0aW9uIHBhcnNpbmciKQorCisgICAgZGVmIHBhcnNlRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgZGVmIHVwZGF0ZUZyb21TZXJ2ZXIoc2VsZiwgc2VydmVyKToKKyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5jbWQ6CisgICAgICAgICAgICBkZWZhdWx0dGFzaywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0RFRkFVTFRfVEFTSyJdKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQl9ERUZBVUxUX1RBU0sgZnJvbSB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHNlbGYub3B0aW9ucy5jbWQgPSBkZWZhdWx0dGFzayBvciAiYnVpbGQiCisgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzZXRDb25maWciLCAiY21kIiwgc2VsZi5vcHRpb25zLmNtZF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9uICdjbWQnIG9uIHRoZSBzZXJ2ZXI6ICVzIiAlIGVycm9yKQorCisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgIGJicGtncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCUEtHUyJdKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQlBLR1MgZnJvbSB0aGUgc2VydmVyOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIGlmIGJicGtnczoKKyAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZC5leHRlbmQoYmJwa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgdXBkYXRlVG9TZXJ2ZXIoc2VsZiwgc2VydmVyLCBlbnZpcm9ubWVudCk6CisgICAgICAgIG9wdGlvbnMgPSB7fQorICAgICAgICBmb3IgbyBpbiBbImFib3J0IiwgInRyeWFsdGNvbmZpZ3MiLCAiZm9yY2UiLCAiaW52YWxpZGF0ZV9zdGFtcCIsIAorICAgICAgICAgICAgICAgICAgInZlcmJvc2UiLCAiZGVidWciLCAiZHJ5X3J1biIsICJkdW1wX3NpZ25hdHVyZXMiLCAKKyAgICAgICAgICAgICAgICAgICJkZWJ1Z19kb21haW5zIiwgImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsICJwcm9maWxlIiwKKyAgICAgICAgICAgICAgICAgICJwcmVmaWxlIiwgInBvc3RmaWxlIl06CisgICAgICAgICAgICBvcHRpb25zW29dID0gZ2V0YXR0cihzZWxmLm9wdGlvbnMsIG8pCisKKyAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsidXBkYXRlQ29uZmlnIiwgb3B0aW9ucywgZW52aXJvbm1lbnRdKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuYWJsZSB0byB1cGRhdGUgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggbG9jYWwgcGFyYW1ldGVyczogJXMiICUgZXJyb3IpCisKKyAgICBkZWYgcGFyc2VBY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFBhcnNlIGFueSBjb21tYW5kbGluZSBpbnRvIGFjdGlvbnMKKyAgICAgICAgYWN0aW9uID0geydhY3Rpb24nOk5vbmUsICdtc2cnOk5vbmV9CisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5zaG93X2Vudmlyb25tZW50OgorICAgICAgICAgICAgaWYgJ3dvcmxkJyBpbiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIid3b3JsZCcgaXMgbm90IGEgdmFsaWQgdGFyZ2V0IGZvciAtLWVudmlyb25tZW50LiIKKyAgICAgICAgICAgIGVsaWYgJ3VuaXZlcnNlJyBpbiBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIid1bml2ZXJzZScgaXMgbm90IGEgdmFsaWQgdGFyZ2V0IGZvciAtLWVudmlyb25tZW50LiIKKyAgICAgICAgICAgIGVsaWYgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDE6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJPbmx5IG9uZSB0YXJnZXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgLS1lbnZpcm9ubWVudCBvcHRpb24uIgorICAgICAgICAgICAgZWxpZiBzZWxmLm9wdGlvbnMuYnVpbGRmaWxlIGFuZCBsZW4oc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGQpID4gMDoKKyAgICAgICAgICAgICAgICBhY3Rpb25bJ21zZyddID0gIk5vIHRhcmdldCBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSAtLWVudmlyb25tZW50IGFuZCAtLWJ1aWxkZmlsZSBvcHRpb25zLiIKKyAgICAgICAgICAgIGVsaWYgbGVuKHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkKSA+IDA6CisgICAgICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsic2hvd0Vudmlyb25tZW50VGFyZ2V0Iiwgc2VsZi5vcHRpb25zLnBrZ3NfdG9fYnVpbGRdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbInNob3dFbnZpcm9ubWVudCIsIHNlbGYub3B0aW9ucy5idWlsZGZpbGVdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmJ1aWxkZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImJ1aWxkRmlsZSIsIHNlbGYub3B0aW9ucy5idWlsZGZpbGUsIHNlbGYub3B0aW9ucy5jbWRdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnJldmlzaW9uc19jaGFuZ2VkOgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsiY29tcGFyZVJldmlzaW9ucyJdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLnNob3dfdmVyc2lvbnM6CisgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbiddID0gWyJzaG93VmVyc2lvbnMiXQorICAgICAgICBlbGlmIHNlbGYub3B0aW9ucy5wYXJzZV9vbmx5OgorICAgICAgICAgICAgYWN0aW9uWydhY3Rpb24nXSA9IFsicGFyc2VGaWxlcyJdCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmRvdF9ncmFwaDoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImdlbmVyYXRlRG90R3JhcGgiLCBzZWxmLm9wdGlvbnMucGtnc190b19idWlsZCwgc2VsZi5vcHRpb25zLmNtZF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0aW9uWydtc2cnXSA9ICJQbGVhc2Ugc3BlY2lmeSBhIHBhY2thZ2UgbmFtZSBmb3IgZGVwZW5kZW5jeSBncmFwaCBnZW5lcmF0aW9uLiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkOgorICAgICAgICAgICAgICAgIGFjdGlvblsnYWN0aW9uJ10gPSBbImJ1aWxkVGFyZ2V0cyIsIHNlbGYub3B0aW9ucy5wa2dzX3RvX2J1aWxkLCBzZWxmLm9wdGlvbnMuY21kXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjYWN0aW9uWydtc2cnXSA9ICJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5vcHRpb25zLmluaXRpYWxhY3Rpb24gPSBhY3Rpb24KKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCitjbGFzcyBDb29rZXJDb25maWd1cmF0aW9uKG9iamVjdCk6CisgICAgIiIiCisgICAgTWFuYWdlcyBidWlsZCBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9ucyBmb3Igb25lIHJ1bgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRlYnVnX2RvbWFpbnMgPSBbXQorICAgICAgICBzZWxmLmV4dHJhX2Fzc3VtZV9wcm92aWRlZCA9IFtdCisgICAgICAgIHNlbGYucHJlZmlsZSA9IFtdCisgICAgICAgIHNlbGYucG9zdGZpbGUgPSBbXQorICAgICAgICBzZWxmLmRlYnVnID0gMAorICAgICAgICBzZWxmLmNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5hYm9ydCA9IFRydWUKKyAgICAgICAgc2VsZi5mb3JjZSA9IEZhbHNlCisgICAgICAgIHNlbGYucHJvZmlsZSA9IEZhbHNlCisgICAgICAgIHNlbGYubm9zZXRzY2VuZSA9IEZhbHNlCisgICAgICAgIHNlbGYuaW52YWxpZGF0ZV9zdGFtcCA9IEZhbHNlCisgICAgICAgIHNlbGYuZHVtcF9zaWduYXR1cmVzID0gW10KKyAgICAgICAgc2VsZi5kcnlfcnVuID0gRmFsc2UKKyAgICAgICAgc2VsZi50cmFja2luZyA9IEZhbHNlCisgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gW10KKyAgICAgICAgc2VsZi53cml0ZWV2ZW50bG9nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVudiA9IHt9CisKKyAgICBkZWYgc2V0Q29uZmlnUGFyYW1ldGVycyhzZWxmLCBwYXJhbWV0ZXJzKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9fZGljdF9fLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBpbiBwYXJhbWV0ZXJzLm9wdGlvbnMuX19kaWN0X186CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHBhcmFtZXRlcnMub3B0aW9ucy5fX2RpY3RfX1trZXldKQorICAgICAgICBzZWxmLmVudiA9IHBhcmFtZXRlcnMuZW52aXJvbm1lbnQuY29weSgpCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBwYXJhbWV0ZXJzLnRyYWNraW5nCisKKyAgICBkZWYgc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlbGYsIHNyY2IpOgorICAgICAgICBzZWxmLnNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2sgPSBzcmNiCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IHt9CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fX2RpY3RfXy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gInNlcnZlcl9yZWdpc3Rlcl9pZGxlY2FsbGJhY2siOgorICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSBnZXRhdHRyKHNlbGYsIGtleSkKKyAgICAgICAgcmV0dXJuIHN0YXRlCisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsc3RhdGUpOgorICAgICAgICBmb3IgayBpbiBzdGF0ZToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgc3RhdGVba10pIAorCisKK2RlZiBjYXRjaF9wYXJzZV9lcnJvcihmdW5jKToKKyAgICAiIiJFeGNlcHRpb24gaGFuZGxpbmcgYml0cyBmb3Igb3VyIHBhcnNpbmciIiIKKyAgICBAd3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcHBlZChmbiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYyhmbiwgKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIHBhcnNlbG9nLmNyaXRpY2FsKHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzOiAlcyIgJSAoZm4sIGV4YykpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBleGNlcHQgKGJiLnBhcnNlLlBhcnNlRXJyb3IsIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKworICAgICAgICAgICAgYmJkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgb3Muc2VwCisgICAgICAgICAgICBleGNfY2xhc3MsIGV4YywgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZm9yIHRiIGluIGl0ZXIobGFtYmRhOiB0Yi50Yl9uZXh0LCBOb25lKToKKyAgICAgICAgICAgICAgICAjIFNraXAgZnJhbWVzIGluIGJpdGJha2UgaXRzZWxmLCB3ZSBvbmx5IHdhbnQgdGhlIG1ldGFkYXRhCisgICAgICAgICAgICAgICAgZm4sIF8sIF8sIF8gPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YiwgMSlbMF0KKyAgICAgICAgICAgICAgICBpZiBub3QgZm4uc3RhcnRzd2l0aChiYmRpcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwYXJzZWxvZy5jcml0aWNhbCgiVW5hYmxlIHRvIHBhcnNlICVzIiwgZm4sIGV4Y19pbmZvPShleGNfY2xhc3MsIGV4YywgdGIpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gd3JhcHBlZAorCitAY2F0Y2hfcGFyc2VfZXJyb3IKK2RlZiBwYXJzZV9jb25maWdfZmlsZShmbiwgZGF0YSwgaW5jbHVkZT1UcnVlKToKKyAgICByZXR1cm4gYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlKQorCitAY2F0Y2hfcGFyc2VfZXJyb3IKK2RlZiBfaW5oZXJpdChiYmNsYXNzLCBkYXRhKToKKyAgICBiYi5wYXJzZS5CQkhhbmRsZXIuaW5oZXJpdChiYmNsYXNzLCAiY29uZmlndXJhdGlvbiBJTkhFUklUcyIsIDAsIGRhdGEpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGZpbmRDb25maWdGaWxlKGNvbmZpZ2ZpbGUsIGRhdGEpOgorICAgIHNlYXJjaCA9IFtdCisgICAgYmJwYXRoID0gZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpCisgICAgaWYgYmJwYXRoOgorICAgICAgICBmb3IgaSBpbiBiYnBhdGguc3BsaXQoIjoiKToKKyAgICAgICAgICAgIHNlYXJjaC5hcHBlbmQob3MucGF0aC5qb2luKGksICJjb25mIiwgY29uZmlnZmlsZSkpCisgICAgcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgd2hpbGUgcGF0aCAhPSAiLyI6CisgICAgICAgIHNlYXJjaC5hcHBlbmQob3MucGF0aC5qb2luKHBhdGgsICJjb25mIiwgY29uZmlnZmlsZSkpCisgICAgICAgIHBhdGgsIF8gPSBvcy5wYXRoLnNwbGl0KHBhdGgpCisKKyAgICBmb3IgaSBpbiBzZWFyY2g6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICAgICAgcmV0dXJuIGkKKworICAgIHJldHVybiBOb25lCisKK2NsYXNzIENvb2tlckRhdGFCdWlsZGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyY2ZnLCB3b3JrZXIgPSBGYWxzZSk6CisKKyAgICAgICAgc2VsZi5wcmVmaWxlcyA9IGNvb2tlcmNmZy5wcmVmaWxlCisgICAgICAgIHNlbGYucG9zdGZpbGVzID0gY29va2VyY2ZnLnBvc3RmaWxlCisgICAgICAgIHNlbGYudHJhY2tpbmcgPSBjb29rZXJjZmcudHJhY2tpbmcKKworICAgICAgICBiYi51dGlscy5zZXRfY29udGV4dChiYi51dGlscy5jbGVhbl9jb250ZXh0KCkpCisgICAgICAgIGJiLmV2ZW50LnNldF9jbGFzc19oYW5kbGVycyhiYi5ldmVudC5jbGVhbl9jbGFzc19oYW5kbGVycygpKQorICAgICAgICBzZWxmLmRhdGEgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBpZiBzZWxmLnRyYWNraW5nOgorICAgICAgICAgICAgc2VsZi5kYXRhLmVuYWJsZVRyYWNraW5nKCkKKworICAgICAgICAjIEtlZXAgYSBkYXRhc3RvcmUgb2YgdGhlIGluaXRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGVpcgorICAgICAgICAjIHZhbHVlcyBmcm9tIHdoZW4gQml0QmFrZSB3YXMgbGF1bmNoZWQgdG8gZW5hYmxlIGNoaWxkIHByb2Nlc3NlcworICAgICAgICAjIHRvIHVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggaGF2ZSBiZWVuIGNsZWFuZWQgZnJvbSB0aGUKKyAgICAgICAgIyBCaXRCYWtlIHByb2Nlc3NlcyBlbnYKKyAgICAgICAgc2VsZi5zYXZlZGVudiA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGZvciBrIGluIGNvb2tlcmNmZy5lbnY6CisgICAgICAgICAgICBzZWxmLnNhdmVkZW52LnNldFZhcihrLCBjb29rZXJjZmcuZW52W2tdKQorCisgICAgICAgIGZpbHRlcmVkX2tleXMgPSBiYi51dGlscy5hcHByb3ZlZF92YXJpYWJsZXMoKQorICAgICAgICBiYi5kYXRhLmluaGVyaXRGcm9tT1Moc2VsZi5kYXRhLCBzZWxmLnNhdmVkZW52LCBmaWx0ZXJlZF9rZXlzKQorICAgICAgICBzZWxmLmRhdGEuc2V0VmFyKCJCQl9PUklHRU5WIiwgc2VsZi5zYXZlZGVudikKKyAgICAgICAgCisgICAgICAgIGlmIHdvcmtlcjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zZXRWYXIoIkJCX1dPUktFUkNPTlRFWFQiLCAiMSIpCisKKyAgICBkZWYgcGFyc2VCYXNlQ29uZmlndXJhdGlvbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMiKQorICAgICAgICAgICAgcmFpc2UgYmIuQkJIYW5kbGVkRXhjZXB0aW9uCisKKyAgICBkZWYgX2ZpbmRMYXllckNvbmYoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBmaW5kQ29uZmlnRmlsZSgiYmJsYXllcnMuY29uZiIsIGRhdGEpCisKKyAgICBkZWYgcGFyc2VDb25maWd1cmF0aW9uRmlsZXMoc2VsZiwgcHJlZmlsZXMsIHBvc3RmaWxlcyk6CisgICAgICAgIGRhdGEgPSBzZWxmLmRhdGEKKyAgICAgICAgYmIucGFyc2UuaW5pdF9wYXJzZXIoZGF0YSkKKworICAgICAgICAjIFBhcnNlIGZpbGVzIGZvciBsb2FkaW5nICpiZWZvcmUqIGJpdGJha2UuY29uZiBhbmQgYW55IGluY2x1ZGVzCisgICAgICAgIGZvciBmIGluIHByZWZpbGVzOgorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKGYsIGRhdGEpCisKKyAgICAgICAgbGF5ZXJjb25mID0gc2VsZi5fZmluZExheWVyQ29uZihkYXRhKQorICAgICAgICBpZiBsYXllcmNvbmY6CisgICAgICAgICAgICBwYXJzZWxvZy5kZWJ1ZygyLCAiRm91bmQgYmJsYXllcnMuY29uZiAoJXMpIiwgbGF5ZXJjb25mKQorICAgICAgICAgICAgIyBCeSBkZWZpbml0aW9uIGJibGF5ZXJzLmNvbmYgaXMgaW4gY29uZi8gb2YgVE9QRElSLgorICAgICAgICAgICAgIyBXZSBtYXkgaGF2ZSBiZWVuIGNhbGxlZCB3aXRoIGN3ZCBzb21ld2hlcmUgZWxzZSBzbyByZXNldCBUT1BESVIKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJUT1BESVIiLCBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKGxheWVyY29uZikpKQorICAgICAgICAgICAgZGF0YSA9IHBhcnNlX2NvbmZpZ19maWxlKGxheWVyY29uZiwgZGF0YSkKKworICAgICAgICAgICAgbGF5ZXJzID0gKGRhdGEuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZGF0YSkKKyAgICAgICAgICAgIGFwcHJvdmVkID0gYmIudXRpbHMuYXBwcm92ZWRfdmFyaWFibGVzKCkKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgcGFyc2Vsb2cuZGVidWcoMiwgIkFkZGluZyBsYXllciAlcyIsIGxheWVyKQorICAgICAgICAgICAgICAgIGlmICdIT01FJyBpbiBhcHByb3ZlZCBhbmQgJ34nIGluIGxheWVyOgorICAgICAgICAgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguZXhwYW5kdXNlcihsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhLnNldFZhcignTEFZRVJESVInLCBsYXllcikKKyAgICAgICAgICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUob3MucGF0aC5qb2luKGxheWVyLCAiY29uZiIsICJsYXllci5jb25mIiksIGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YS5leHBhbmRWYXJyZWYoJ0xBWUVSRElSJykKKworICAgICAgICAgICAgZGF0YS5kZWxWYXIoJ0xBWUVSRElSJykKKworICAgICAgICBpZiBub3QgZGF0YS5nZXRWYXIoIkJCUEFUSCIsIFRydWUpOgorICAgICAgICAgICAgbXNnID0gIlRoZSBCQlBBVEggdmFyaWFibGUgaXMgbm90IHNldCIKKyAgICAgICAgICAgIGlmIG5vdCBsYXllcmNvbmY6CisgICAgICAgICAgICAgICAgbXNnICs9ICgiIGFuZCBiaXRiYWtlIGRpZCBub3QgZmluZCBhIGNvbmYvYmJsYXllcnMuY29uZiBmaWxlIGluIgorICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uXG5NYXliZSB5b3UgYWNjaWRlbnRhbGx5IgorICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2VkIGJpdGJha2UgZnJvbSB0aGUgd3JvbmcgZGlyZWN0b3J5PyIpCisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KG1zZykKKworICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUob3MucGF0aC5qb2luKCJjb25mIiwgImJpdGJha2UuY29uZiIpLCBkYXRhKQorCisgICAgICAgICMgUGFyc2UgZmlsZXMgZm9yIGxvYWRpbmcgKmFmdGVyKiBiaXRiYWtlLmNvbmYgYW5kIGFueSBpbmNsdWRlcworICAgICAgICBmb3IgcCBpbiBwb3N0ZmlsZXM6CisgICAgICAgICAgICBkYXRhID0gcGFyc2VfY29uZmlnX2ZpbGUocCwgZGF0YSkKKworICAgICAgICAjIEhhbmRsZSBhbnkgSU5IRVJJVHMgYW5kIGluaGVyaXQgdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgYmJjbGFzc2VzICA9IFsiYmFzZSJdICsgKGRhdGEuZ2V0VmFyKCdJTkhFUklUJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGJiY2xhc3MgaW4gYmJjbGFzc2VzOgorICAgICAgICAgICAgZGF0YSA9IF9pbmhlcml0KGJiY2xhc3MsIGRhdGEpCisKKyAgICAgICAgIyBOb21hbGx5IHdlIG9ubHkgcmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgYXQgdGhlIGVuZCBvZiBwYXJzaW5nIC5iYiBmaWxlcworICAgICAgICAjIFdlIHJlZ2lzdGVyIGFueSBoYW5kbGVycyB3ZSd2ZSBmb3VuZCBzbyBmYXIgaGVyZS4uLgorICAgICAgICBmb3IgdmFyIGluIGRhdGEuZ2V0VmFyKCdfX0JCSEFORExFUlMnLCBGYWxzZSkgb3IgW106CisgICAgICAgICAgICBiYi5ldmVudC5yZWdpc3Rlcih2YXIsIGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpLCAgKGRhdGEuZ2V0VmFyRmxhZyh2YXIsICJldmVudG1hc2siLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfV09SS0VSQ09OVEVYVCIsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmV0Y2guZmV0Y2hlcl9pbml0KGRhdGEpCisgICAgICAgIGJiLmNvZGVwYXJzZXIucGFyc2VyX2NhY2hlX2luaXQoZGF0YSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Db25maWdQYXJzZWQoKSwgZGF0YSkKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJfSU5WQUxJRENPTkYiLCBGYWxzZSkgaXMgVHJ1ZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQl9JTlZBTElEQ09ORiIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5wYXJzZUNvbmZpZ3VyYXRpb25GaWxlcyhzZWxmLnByZWZpbGVzLCBzZWxmLnBvc3RmaWxlcykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnBhcnNlLmluaXRfcGFyc2VyKGRhdGEpCisgICAgICAgIGRhdGEuc2V0VmFyKCdCQklOQ0xVREVEJyxiYi5wYXJzZS5nZXRfZmlsZV9kZXBlbmRzKGRhdGEpKQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZGF0YV9oYXNoID0gZGF0YS5nZXRfaGFzaCgpCisKKworCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkgYi9iaXRiYWtlL2xpYi9iYi9kYWVtb25pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2YTYxOAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2RhZW1vbml6ZS5weQpAQCAtMCwwICsxLDE5MyBAQAorIiIiCitQeXRob24gRGFlbW9uaXppbmcgaGVscGVyCisKK0NvbmZpZ3VyYWJsZSBkYWVtb24gYmVoYXZpb3JzOgorCisgICAgMS4pIFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHNldCB0byB0aGUgIi8iIGRpcmVjdG9yeS4KKyAgICAyLikgVGhlIGN1cnJlbnQgZmlsZSBjcmVhdGlvbiBtb2RlIG1hc2sgc2V0IHRvIDAuCisgICAgMy4pIENsb3NlIGFsbCBvcGVuIGZpbGVzICgxMDI0KS4gCisgICAgNC4pIFJlZGlyZWN0IHN0YW5kYXJkIEkvTyBzdHJlYW1zIHRvICIvZGV2L251bGwiLgorCitBIGZhaWxlZCBjYWxsIHRvIGZvcmsoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworUmVmZXJlbmNlczoKKyAgICAxKSBBZHZhbmNlZCBQcm9ncmFtbWluZyBpbiB0aGUgVW5peCBFbnZpcm9ubWVudDogVy4gUmljaGFyZCBTdGV2ZW5zCisJaHR0cDovL3d3dy5hcHVlYm9vay5jb20vYXB1ZTNlLmh0bWwKKyAgICAyKSBUaGUgTGludXggUHJvZ3JhbW1pbmcgSW50ZXJmYWNlOiBNaWNoYWVsIEtlcnJpc2sKKwlodHRwOi8vbWFuNy5vcmcvdGxwaS9pbmRleC5odG1sCisgICAgMykgVW5peCBQcm9ncmFtbWluZyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczoKKwlodHRwOi8vd3d3LmZhcXMub3JnL2ZhcXMvdW5peC1mYXEvcHJvZ3JhbW1lci9mYXEvCisKK01vZGlmaWVkIHRvIGFsbG93IGEgZnVuY3Rpb24gdG8gYmUgZGFlbW9uaXplZCBhbmQgcmV0dXJuIGZvciAKK2JpdGJha2UgdXNlIGJ5IFJpY2hhcmQgUHVyZGllCisiIiIKKworX19hdXRob3JfXyA9ICJDaGFkIEouIFNjaHJvZWRlciIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA1IENoYWQgSi4gU2Nocm9lZGVyIgorX192ZXJzaW9uX18gPSAiMC4yIgorCisjIFN0YW5kYXJkIFB5dGhvbiBtb2R1bGVzLgoraW1wb3J0IG9zICAgICAgICAgICAgICAgICAgICAjIE1pc2NlbGxhbmVvdXMgT1MgaW50ZXJmYWNlcy4KK2ltcG9ydCBzeXMgICAgICAgICAgICAgICAgICAgIyBTeXN0ZW0tc3BlY2lmaWMgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25zLgorCisjIERlZmF1bHQgZGFlbW9uIHBhcmFtZXRlcnMuCisjIEZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIG9mIHRoZSBkYWVtb24uCisjIEZvciBCaXRCYWtlJ3MgY2hpbGRyZW4sIHdlIGRvIHdhbnQgdG8gaW5oZXJpdCB0aGUgcGFyZW50IHVtYXNrLgorVU1BU0sgPSBOb25lCisKKyMgRGVmYXVsdCBtYXhpbXVtIGZvciB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzLgorTUFYRkQgPSAxMDI0CisKKyMgVGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWRpcmVjdGVkIHRvIC9kZXYvbnVsbCBieSBkZWZhdWx0LgoraWYgKGhhc2F0dHIob3MsICJkZXZudWxsIikpOgorICAgIFJFRElSRUNUX1RPID0gb3MuZGV2bnVsbAorZWxzZToKKyAgICBSRURJUkVDVF9UTyA9ICIvZGV2L251bGwiCisKK2RlZiBjcmVhdGVEYWVtb24oZnVuY3Rpb24sIGxvZ2ZpbGUpOgorICAgICIiIgorICAgIERldGFjaCBhIHByb2Nlc3MgZnJvbSB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgYW5kIHJ1biBpdCBpbiB0aGUKKyAgICBiYWNrZ3JvdW5kIGFzIGEgZGFlbW9uLCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgY2FsbGVyLgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICAjIEZvcmsgYSBjaGlsZCBwcm9jZXNzIHNvIHRoZSBwYXJlbnQgY2FuIGV4aXQuICBUaGlzIHJldHVybnMgY29udHJvbCB0bworICAgICAgICAjIHRoZSBjb21tYW5kLWxpbmUgb3Igc2hlbGwuICBJdCBhbHNvIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2hpbGQgd2lsbCBub3QKKyAgICAgICAgIyBiZSBhIHByb2Nlc3MgZ3JvdXAgbGVhZGVyLCBzaW5jZSB0aGUgY2hpbGQgcmVjZWl2ZXMgYSBuZXcgcHJvY2VzcyBJRAorICAgICAgICAjIGFuZCBpbmhlcml0cyB0aGUgcGFyZW50J3MgcHJvY2VzcyBncm91cCBJRC4gIFRoaXMgc3RlcCBpcyByZXF1aXJlZAorICAgICAgICAjIHRvIGluc3VyZSB0aGF0IHRoZSBuZXh0IGNhbGwgdG8gb3Muc2V0c2lkIGlzIHN1Y2Nlc3NmdWwuCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICBpZiAocGlkID09IDApOiAgICAgICMgVGhlIGZpcnN0IGNoaWxkLgorICAgICAgICAjIFRvIGJlY29tZSB0aGUgc2Vzc2lvbiBsZWFkZXIgb2YgdGhpcyBuZXcgc2Vzc2lvbiBhbmQgdGhlIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyBsZWFkZXIgb2YgdGhlIG5ldyBwcm9jZXNzIGdyb3VwLCB3ZSBjYWxsIG9zLnNldHNpZCgpLiAgVGhlIHByb2Nlc3MgaXMKKyAgICAgICAgIyBhbHNvIGd1YXJhbnRlZWQgbm90IHRvIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgb3Muc2V0c2lkKCkKKworICAgICAgICAjIElzIGlnbm9yaW5nIFNJR0hVUCBuZWNlc3Nhcnk/CisgICAgICAgICMKKyAgICAgICAgIyBJdCdzIG9mdGVuIHN1Z2dlc3RlZCB0aGF0IHRoZSBTSUdIVVAgc2lnbmFsIHNob3VsZCBiZSBpZ25vcmVkIGJlZm9yZQorICAgICAgICAjIHRoZSBzZWNvbmQgZm9yayB0byBhdm9pZCBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgdGhlIHByb2Nlc3MuICBUaGUKKyAgICAgICAgIyByZWFzb24gaXMgdGhhdCB3aGVuIHRoZSBmaXJzdCBjaGlsZCB0ZXJtaW5hdGVzLCBhbGwgcHJvY2Vzc2VzLCBlLmcuCisgICAgICAgICMgdGhlIHNlY29uZCBjaGlsZCwgaW4gdGhlIG9ycGhhbmVkIGdyb3VwIHdpbGwgYmUgc2VudCBhIFNJR0hVUC4KKyAgICAgICAgIworICAgICAgICAjICJIb3dldmVyLCBhcyBwYXJ0IG9mIHRoZSBzZXNzaW9uIG1hbmFnZW1lbnQgc3lzdGVtLCB0aGVyZSBhcmUgZXhhY3RseQorICAgICAgICAjIHR3byBjYXNlcyB3aGVyZSBTSUdIVVAgaXMgc2VudCBvbiB0aGUgZGVhdGggb2YgYSBwcm9jZXNzOgorICAgICAgICAjCisgICAgICAgICMgICAgMSkgV2hlbiB0aGUgcHJvY2VzcyB0aGF0IGRpZXMgaXMgdGhlIHNlc3Npb24gbGVhZGVyIG9mIGEgc2Vzc2lvbiB0aGF0CisgICAgICAgICMgICAgICAgIGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwgZGV2aWNlLCBTSUdIVVAgaXMgc2VudCB0byBhbGwgcHJvY2Vzc2VzCisgICAgICAgICMgICAgICAgIGluIHRoZSBmb3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgb2YgdGhhdCB0ZXJtaW5hbCBkZXZpY2UuCisgICAgICAgICMgICAgMikgV2hlbiB0aGUgZGVhdGggb2YgYSBwcm9jZXNzIGNhdXNlcyBhIHByb2Nlc3MgZ3JvdXAgdG8gYmVjb21lCisgICAgICAgICMgICAgICAgIG9ycGhhbmVkLCBhbmQgb25lIG9yIG1vcmUgcHJvY2Vzc2VzIGluIHRoZSBvcnBoYW5lZCBncm91cCBhcmUKKyAgICAgICAgIyAgICAgICAgc3RvcHBlZCwgdGhlbiBTSUdIVVAgYW5kIFNJR0NPTlQgYXJlIHNlbnQgdG8gYWxsIG1lbWJlcnMgb2YgdGhlCisgICAgICAgICMgICAgICAgIG9ycGhhbmVkIGdyb3VwLiIgWzJdCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgZmlyc3QgY2FzZSBjYW4gYmUgaWdub3JlZCBzaW5jZSB0aGUgY2hpbGQgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGF2ZQorICAgICAgICAjIGEgY29udHJvbGxpbmcgdGVybWluYWwuICBUaGUgc2Vjb25kIGNhc2UgaXNuJ3Qgc28gZWFzeSB0byBkaXNtaXNzLgorICAgICAgICAjIFRoZSBwcm9jZXNzIGdyb3VwIGlzIG9ycGhhbmVkIHdoZW4gdGhlIGZpcnN0IGNoaWxkIHRlcm1pbmF0ZXMgYW5kCisgICAgICAgICMgUE9TSVguMSByZXF1aXJlcyB0aGF0IGV2ZXJ5IFNUT1BQRUQgcHJvY2VzcyBpbiBhbiBvcnBoYW5lZCBwcm9jZXNzCisgICAgICAgICMgZ3JvdXAgYmUgc2VudCBhIFNJR0hVUCBzaWduYWwgZm9sbG93ZWQgYnkgYSBTSUdDT05UIHNpZ25hbC4gIFNpbmNlIHRoZQorICAgICAgICAjIHNlY29uZCBjaGlsZCBpcyBub3QgU1RPUFBFRCB0aG91Z2gsIHdlIGNhbiBzYWZlbHkgZm9yZWdvIGlnbm9yaW5nIHRoZQorICAgICAgICAjIFNJR0hVUCBzaWduYWwuICBJbiBhbnkgY2FzZSwgdGhlcmUgYXJlIG5vIGlsbC1lZmZlY3RzIGlmIGl0IGlzIGlnbm9yZWQuCisgICAgICAgICMKKyAgICAgICAgIyBpbXBvcnQgc2lnbmFsICAgICAgICAgICAgICAjIFNldCBoYW5kbGVycyBmb3IgYXN5bmNocm9ub3VzIGV2ZW50cy4KKyAgICAgICAgIyBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdIVVAsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRm9yayBhIHNlY29uZCBjaGlsZCBhbmQgZXhpdCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHpvbWJpZXMuICBUaGlzCisgICAgICAgICAgICAjIGNhdXNlcyB0aGUgc2Vjb25kIGNoaWxkIHByb2Nlc3MgdG8gYmUgb3JwaGFuZWQsIG1ha2luZyB0aGUgaW5pdAorICAgICAgICAgICAgIyBwcm9jZXNzIHJlc3BvbnNpYmxlIGZvciBpdHMgY2xlYW51cC4gIEFuZCwgc2luY2UgdGhlIGZpcnN0IGNoaWxkIGlzCisgICAgICAgICAgICAjIGEgc2Vzc2lvbiBsZWFkZXIgd2l0aG91dCBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLCBpdCdzIHBvc3NpYmxlIGZvcgorICAgICAgICAgICAgIyBpdCB0byBhY3F1aXJlIG9uZSBieSBvcGVuaW5nIGEgdGVybWluYWwgaW4gdGhlIGZ1dHVyZSAoU3lzdGVtIFYtCisgICAgICAgICAgICAjIGJhc2VkIHN5c3RlbXMpLiAgVGhpcyBzZWNvbmQgZm9yayBndWFyYW50ZWVzIHRoYXQgdGhlIGNoaWxkIGlzIG5vCisgICAgICAgICAgICAjIGxvbmdlciBhIHNlc3Npb24gbGVhZGVyLCBwcmV2ZW50aW5nIHRoZSBkYWVtb24gZnJvbSBldmVyIGFjcXVpcmluZworICAgICAgICAgICAgIyBhIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpICAgICAjIEZvcmsgYSBzZWNvbmQgY2hpbGQuCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIGlmIChwaWQgPT0gMCk6ICAjIFRoZSBzZWNvbmQgY2hpbGQuCisgICAgICAgICAgICAjIFdlIHByb2JhYmx5IGRvbid0IHdhbnQgdGhlIGZpbGUgbW9kZSBjcmVhdGlvbiBtYXNrIGluaGVyaXRlZCBmcm9tCisgICAgICAgICAgICAjIHRoZSBwYXJlbnQsIHNvIHdlIGdpdmUgdGhlIGNoaWxkIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciBwZXJtaXNzaW9ucy4KKyAgICAgICAgICAgIGlmIFVNQVNLIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG9zLnVtYXNrKFVNQVNLKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXJlbnQgKHRoZSBmaXJzdCBjaGlsZCkgb2YgdGhlIHNlY29uZCBjaGlsZC4KKyAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgZWxzZToKKyAgICAgICAgIyBleGl0KCkgb3IgX2V4aXQoKT8KKyAgICAgICAgIyBfZXhpdCBpcyBsaWtlIGV4aXQoKSwgYnV0IGl0IGRvZXNuJ3QgY2FsbCBhbnkgZnVuY3Rpb25zIHJlZ2lzdGVyZWQKKyAgICAgICAgIyB3aXRoIGF0ZXhpdCAoYW5kIG9uX2V4aXQpIG9yIGFueSByZWdpc3RlcmVkIHNpZ25hbCBoYW5kbGVycy4gIEl0IGFsc28KKyAgICAgICAgIyBjbG9zZXMgYW55IG9wZW4gZmlsZSBkZXNjcmlwdG9ycy4gIFVzaW5nIGV4aXQoKSBtYXkgY2F1c2UgYWxsIHN0ZGlvCisgICAgICAgICMgc3RyZWFtcyB0byBiZSBmbHVzaGVkIHR3aWNlIGFuZCBhbnkgdGVtcG9yYXJ5IGZpbGVzIG1heSBiZSB1bmV4cGVjdGVkbHkKKyAgICAgICAgIyByZW1vdmVkLiAgSXQncyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdGhhdCBjaGlsZCBicmFuY2hlcyBvZiBhIGZvcmsoKQorICAgICAgICAjIGFuZCB0aGUgcGFyZW50IGJyYW5jaChlcykgb2YgYSBkYWVtb24gdXNlIF9leGl0KCkuCisgICAgICAgIHJldHVybgorCisgICAgIyBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzLiAgVGhpcyBwcmV2ZW50cyB0aGUgY2hpbGQgZnJvbSBrZWVwaW5nCisgICAgIyBvcGVuIGFueSBmaWxlIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQuICBUaGVyZSBpcyBhIHZhcmlldHkKKyAgICAjIG9mIG1ldGhvZHMgdG8gYWNjb21wbGlzaCB0aGlzIHRhc2suICBUaHJlZSBhcmUgbGlzdGVkIGJlbG93LgorICAgICMKKyAgICAjIFRyeSB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIFNDX09QRU5fTUFYLCB0byBvYnRhaW4gdGhlIG1heGltdW0KKyAgICAjIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgdG8gY2xvc2UuICBJZiBpdCBkb2Vzbid0IGV4aXN0LCB1c2UKKyAgICAjIHRoZSBkZWZhdWx0IHZhbHVlIChjb25maWd1cmFibGUpLgorICAgICMKKyAgICAjIHRyeToKKyAgICAjICAgICBtYXhmZCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKKyAgICAjIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICMgICAgIG1heGZkID0gTUFYRkQKKyAgICAjCisgICAgIyBPUgorICAgICMKKyAgICAjIGlmIChvcy5zeXNjb25mX25hbWVzLmhhc19rZXkoIlNDX09QRU5fTUFYIikpOgorICAgICMgICAgIG1heGZkID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorICAgICMgZWxzZToKKyAgICAjICAgICBtYXhmZCA9IE1BWEZECisgICAgIworICAgICMgT1IKKyAgICAjCisgICAgIyBVc2UgdGhlIGdldHJsaW1pdCBtZXRob2QgdG8gcmV0cmlldmUgdGhlIG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIG51bWJlcgorICAgICMgdGhhdCBjYW4gYmUgb3BlbmVkIGJ5IHRoaXMgcHJvY2Vzcy4gIElmIHRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZQorICAgICMgcmVzb3VyY2UsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAgICAjCisgICAgaW1wb3J0IHJlc291cmNlICAgICAgICAgICAgICMgUmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgbWF4ZmQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSlbMV0KKyAgICBpZiAobWF4ZmQgPT0gcmVzb3VyY2UuUkxJTV9JTkZJTklUWSk6CisgICAgICAgIG1heGZkID0gTUFYRkQKKyAgCisgICAgIyBJdGVyYXRlIHRocm91Z2ggYW5kIGNsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzLgorIyAgICBmb3IgZmQgaW4gcmFuZ2UoMCwgbWF4ZmQpOgorIyAgICAgICAgdHJ5OgorIyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorIyAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAgICAgICAjIEVSUk9SLCBmZCB3YXNuJ3Qgb3BlbiB0byBiZWdpbiB3aXRoIChpZ25vcmVkKQorIyAgICAgICAgICAgIHBhc3MKKworICAgICMgUmVkaXJlY3QgdGhlIHN0YW5kYXJkIEkvTyBmaWxlIGRlc2NyaXB0b3JzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFNpbmNlCisgICAgIyB0aGUgZGFlbW9uIGhhcyBubyBjb250cm9sbGluZyB0ZXJtaW5hbCwgbW9zdCBkYWVtb25zIHJlZGlyZWN0IHN0ZGluLAorICAgICMgc3Rkb3V0LCBhbmQgc3RkZXJyIHRvIC9kZXYvbnVsbC4gIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpZGUtZWZmZWN0cworICAgICMgZnJvbSByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBJL08gZmlsZSBkZXNjcmlwdG9ycy4KKworICAgICMgVGhpcyBjYWxsIHRvIG9wZW4gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIGxvd2VzdCBmaWxlIGRlc2NyaXB0b3IsCisgICAgIyB3aGljaCB3aWxsIGJlIDAgKHN0ZGluKSwgc2luY2UgaXQgd2FzIGNsb3NlZCBhYm92ZS4KKyMgICAgb3Mub3BlbihSRURJUkVDVF9UTywgb3MuT19SRFdSKSAgICAjIHN0YW5kYXJkIGlucHV0ICgwKQorCisgICAgIyBEdXBsaWNhdGUgc3RhbmRhcmQgaW5wdXQgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvci4KKyMgICAgb3MuZHVwMigwLCAxKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIG91dHB1dCAoMSkKKyMgICAgb3MuZHVwMigwLCAyKSAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIGVycm9yICgyKQorCisKKyAgICBzaSA9IGZpbGUoJy9kZXYvbnVsbCcsICdyJykKKyAgICBzbyA9IGZpbGUobG9nZmlsZSwgJ3cnKQorICAgIHNlID0gc28KKworCisgICAgIyBSZXBsYWNlIHRob3NlIGZkcyB3aXRoIG91ciBvd24KKyAgICBvcy5kdXAyKHNpLmZpbGVubygpLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgb3MuZHVwMihzby5maWxlbm8oKSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICBvcy5kdXAyKHNlLmZpbGVubygpLCBzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgZnVuY3Rpb24oKQorCisgICAgb3MuX2V4aXQoMCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2RhdGEucHkgYi9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDE1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9kYXRhLnB5CkBAIC0wLDAgKzEsNDQ2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdEYXRhJyBpbXBsZW1lbnRhdGlvbnMKKworRnVuY3Rpb25zIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworVGhlIGV4cGFuZEtleXMgYW5kIHVwZGF0ZV9kYXRhIGFyZSB0aGUgbW9zdCBleHBlbnNpdmUKK29wZXJhdGlvbnMuIEF0IG5pZ2h0IHRoZSBjb29raWUgbW9uc3RlciBjYW1lIGJ5IGFuZAorc3VnZ2VzdGVkICdnaXZlIG1lIGNvb2tpZXMgb24gc2V0dGluZyB0aGUgdmFyaWFibGVzIGFuZAordGhpbmdzIHdpbGwgd29yayBvdXQnLiBUYWtpbmcgdGhpcyBzdWdnZXN0aW9uIGludG8gYWNjb3VudAorYXBwbHlpbmcgdGhlIHNraWxscyBmcm9tIHRoZSBub3QgeWV0IHBhc3NlZCAnRW50d3VyZiB1bmQKK0FuYWx5c2Ugdm9uIEFsZ29yaXRobWVuJyBsZWN0dXJlIGFuZCB0aGUgY29va2llCittb25zdGVyIHNlZW1zIHRvIGJlIHJpZ2h0LiBXZSB3aWxsIHRyYWNrIHNldFZhciBtb3JlIGNhcmVmdWxseQordG8gaGF2ZSBmYXN0ZXIgdXBkYXRlX2RhdGEgYW5kIGV4cGFuZEtleXMgb3BlcmF0aW9ucy4KKworVGhpcyBpcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIHNwZWVkIGFuZCBtZW1vcnkgYWdhaW4gYnV0Cit0aGUgc3BlZWQgaXMgbW9yZSBjcml0aWNhbCBoZXJlLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgc3lzLCBvcywgcmUKK2lmIHN5cy5hcmd2WzBdWy01Ol0gPT0gInB5ZG9jIjoKKyAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlsxXSkpCitlbHNlOgorICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSkKK3N5cy5wYXRoLmluc2VydCgwLCBwYXRoKQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGdyb3VwYnkKKworZnJvbSBiYiBpbXBvcnQgZGF0YV9zbWFydAorZnJvbSBiYiBpbXBvcnQgY29kZXBhcnNlcgoraW1wb3J0IGJiCisKK2xvZ2dlciA9IGRhdGFfc21hcnQubG9nZ2VyCitfZGljdF90eXBlID0gZGF0YV9zbWFydC5EYXRhU21hcnQKKworZGVmIGluaXQoKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQml0YmFrZSBkYXRhIiIiCisgICAgcmV0dXJuIF9kaWN0X3R5cGUoKQorCitkZWYgaW5pdF9kYihwYXJlbnQgPSBOb25lKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQml0YmFrZSBkYXRhLAorICAgIG9wdGlvbmFsbHkgYmFzZWQgb24gYW4gZXhpc3Rpbmcgb2JqZWN0IiIiCisgICAgaWYgcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcGFyZW50LmNyZWF0ZUNvcHkoKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfZGljdF90eXBlKCkKKworZGVmIGNyZWF0ZUNvcHkoc291cmNlKToKKyAgICAiIiJMaW5rIHRoZSBzb3VyY2Ugc2V0IHRvIHRoZSBkZXN0aW5hdGlvbgorICAgIElmIG9uZSBkb2VzIG5vdCBmaW5kIHRoZSB2YWx1ZSBpbiB0aGUgZGVzdGluYXRpb24gc2V0LAorICAgIHNlYXJjaCB3aWxsIGdvIG9uIHRvIHRoZSBzb3VyY2Ugc2V0IHRvIGdldCB0aGUgdmFsdWUuCisgICAgVmFsdWUgZnJvbSBzb3VyY2UgYXJlIGNvcHktb24td3JpdGUuIGkuZS4gYW55IHRyeSB0bworICAgIG1vZGlmeSBvbmUgb2YgdGhlbSB3aWxsIGVuZCB1cCBwdXR0aW5nIHRoZSBtb2RpZmllZCB2YWx1ZQorICAgIGluIHRoZSBkZXN0aW5hdGlvbiBzZXQuCisgICAgIiIiCisgICAgcmV0dXJuIHNvdXJjZS5jcmVhdGVDb3B5KCkKKworZGVmIGluaXRWYXIodmFyLCBkKToKKyAgICAiIiJOb24tZGVzdHJ1Y3RpdmUgdmFyIGluaXQgZm9yIGRhdGEgc3RydWN0dXJlIiIiCisgICAgZC5pbml0VmFyKHZhcikKKworCitkZWYgc2V0VmFyKHZhciwgdmFsdWUsIGQpOgorICAgICIiIlNldCBhIHZhcmlhYmxlIHRvIGEgZ2l2ZW4gdmFsdWUiIiIKKyAgICBkLnNldFZhcih2YXIsIHZhbHVlKQorCisKK2RlZiBnZXRWYXIodmFyLCBkLCBleHAgPSBGYWxzZSk6CisgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSIiIgorICAgIHJldHVybiBkLmdldFZhcih2YXIsIGV4cCkKKworCitkZWYgcmVuYW1lVmFyKGtleSwgbmV3a2V5LCBkKToKKyAgICAiIiJSZW5hbWVzIGEgdmFyaWFibGUgZnJvbSBrZXkgdG8gbmV3a2V5IiIiCisgICAgZC5yZW5hbWVWYXIoa2V5LCBuZXdrZXkpCisKK2RlZiBkZWxWYXIodmFyLCBkKToKKyAgICAiIiJSZW1vdmVzIGEgdmFyaWFibGUgZnJvbSB0aGUgZGF0YSBzZXQiIiIKKyAgICBkLmRlbFZhcih2YXIpCisKK2RlZiBhcHBlbmRWYXIodmFyLCB2YWx1ZSwgZCk6CisgICAgIiIiQXBwZW5kIGFkZGl0aW9uYWwgdmFsdWUgdG8gYSB2YXJpYWJsZSIiIgorICAgIGQuYXBwZW5kVmFyKHZhciwgdmFsdWUpCisKK2RlZiBzZXRWYXJGbGFnKHZhciwgZmxhZywgZmxhZ3ZhbHVlLCBkKToKKyAgICAiIiJTZXQgYSBmbGFnIGZvciBhIGdpdmVuIHZhcmlhYmxlIHRvIGEgZ2l2ZW4gdmFsdWUiIiIKKyAgICBkLnNldFZhckZsYWcodmFyLCBmbGFnLCBmbGFndmFsdWUpCisKK2RlZiBnZXRWYXJGbGFnKHZhciwgZmxhZywgZCk6CisgICAgIiIiR2V0cyBnaXZlbiBmbGFnIGZyb20gZ2l2ZW4gdmFyIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZyh2YXIsIGZsYWcpCisKK2RlZiBkZWxWYXJGbGFnKHZhciwgZmxhZywgZCk6CisgICAgIiIiUmVtb3ZlcyBhIGdpdmVuIGZsYWcgZnJvbSB0aGUgdmFyaWFibGUncyBmbGFncyIiIgorICAgIGQuZGVsVmFyRmxhZyh2YXIsIGZsYWcpCisKK2RlZiBzZXRWYXJGbGFncyh2YXIsIGZsYWdzLCBkKToKKyAgICAiIiJTZXQgdGhlIGZsYWdzIGZvciBhIGdpdmVuIHZhcmlhYmxlCisKKyAgICBOb3RlOgorICAgICAgICBzZXRWYXJGbGFncyB3aWxsIG5vdCBjbGVhciBwcmV2aW91cworICAgICAgICBmbGFncy4gVGhpbmsgb2YgdGhpcyBtZXRob2QgYXMKKyAgICAgICAgYWRkVmFyRmxhZ3MKKyAgICAiIiIKKyAgICBkLnNldFZhckZsYWdzKHZhciwgZmxhZ3MpCisKK2RlZiBnZXRWYXJGbGFncyh2YXIsIGQpOgorICAgICIiIkdldHMgYSB2YXJpYWJsZSdzIGZsYWdzIiIiCisgICAgcmV0dXJuIGQuZ2V0VmFyRmxhZ3ModmFyKQorCitkZWYgZGVsVmFyRmxhZ3ModmFyLCBkKToKKyAgICAiIiJSZW1vdmVzIGEgdmFyaWFibGUncyBmbGFncyIiIgorICAgIGQuZGVsVmFyRmxhZ3ModmFyKQorCitkZWYga2V5cyhkKToKKyAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGtleXMgaW4gZCIiIgorICAgIHJldHVybiBkLmtleXMoKQorCisKK19fZXhwYW5kX3Zhcl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtbXnt9XSt9IikKK19fZXhwYW5kX3B5dGhvbl9yZWdleHBfXyA9IHJlLmNvbXBpbGUociJcJHtALis/fSIpCisKK2RlZiBleHBhbmQocywgZCwgdmFybmFtZSA9IE5vbmUpOgorICAgICIiIlZhcmlhYmxlIGV4cGFuc2lvbiB1c2luZyB0aGUgZGF0YSBzdG9yZSIiIgorICAgIHJldHVybiBkLmV4cGFuZChzLCB2YXJuYW1lKQorCitkZWYgZXhwYW5kS2V5cyhhbHRlcmRhdGEsIHJlYWRkYXRhID0gTm9uZSk6CisgICAgaWYgcmVhZGRhdGEgPT0gTm9uZToKKyAgICAgICAgcmVhZGRhdGEgPSBhbHRlcmRhdGEKKworICAgIHRvZG9saXN0ID0ge30KKyAgICBmb3Iga2V5IGluIGFsdGVyZGF0YToKKyAgICAgICAgaWYgbm90ICckeycgaW4ga2V5OgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBla2V5ID0gZXhwYW5kKGtleSwgcmVhZGRhdGEpCisgICAgICAgIGlmIGtleSA9PSBla2V5OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdG9kb2xpc3Rba2V5XSA9IGVrZXkKKworICAgICMgVGhlc2UgdHdvIGZvciBsb29wcyBhcmUgc3BsaXQgZm9yIHBlcmZvcm1hbmNlIHRvIG1heGltaXNlIHRoZQorICAgICMgdXNlZnVsbmVzcyBvZiB0aGUgZXhwYW5kIGNhY2hlCisgICAgZm9yIGtleSBpbiBzb3J0ZWQodG9kb2xpc3QpOgorICAgICAgICBla2V5ID0gdG9kb2xpc3Rba2V5XQorICAgICAgICBuZXd2YWwgPSBhbHRlcmRhdGEuZ2V0VmFyKGVrZXksIEZhbHNlKQorICAgICAgICBpZiBuZXd2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWwgPSBhbHRlcmRhdGEuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIud2FybigiVmFyaWFibGUga2V5ICVzICglcykgcmVwbGFjZXMgb3JpZ2luYWwga2V5ICVzICglcykuIiAlIChrZXksIHZhbCwgZWtleSwgbmV3dmFsKSkKKyAgICAgICAgYWx0ZXJkYXRhLnJlbmFtZVZhcihrZXksIGVrZXkpCisKK2RlZiBpbmhlcml0RnJvbU9TKGQsIHNhdmVkZW52LCBwZXJtaXR0ZWQpOgorICAgICIiIkluaGVyaXQgdmFyaWFibGVzIGZyb20gdGhlIGluaXRpYWwgZW52aXJvbm1lbnQuIiIiCisgICAgZXhwb3J0bGlzdCA9IGJiLnV0aWxzLnByZXNlcnZlZF9lbnZ2YXJzX2V4cG9ydGVkKCkKKyAgICBmb3IgcyBpbiBzYXZlZGVudi5rZXlzKCk6CisgICAgICAgIGlmIHMgaW4gcGVybWl0dGVkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKHMsIHNhdmVkZW52LmdldFZhcihzLCBUcnVlKSwgb3AgPSAnZnJvbSBlbnYnKQorICAgICAgICAgICAgICAgIGlmIHMgaW4gZXhwb3J0bGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKHMsICJleHBvcnQiLCBUcnVlLCBvcCA9ICdhdXRvIGVudiBleHBvcnQnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKK2RlZiBlbWl0X3Zhcih2YXIsIG89c3lzLl9fc3Rkb3V0X18sIGQgPSBpbml0KCksIGFsbD1GYWxzZSk6CisgICAgIiIiRW1pdCBhIHZhcmlhYmxlIHRvIGJlIHNvdXJjZWQgYnkgYSBzaGVsbC4iIiIKKyAgICBpZiBkLmdldFZhckZsYWcodmFyLCAicHl0aG9uIik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZXhwb3J0ID0gZC5nZXRWYXJGbGFnKHZhciwgImV4cG9ydCIpCisgICAgdW5leHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAidW5leHBvcnQiKQorICAgIGZ1bmMgPSBkLmdldFZhckZsYWcodmFyLCAiZnVuYyIpCisgICAgaWYgbm90IGFsbCBhbmQgbm90IGV4cG9ydCBhbmQgbm90IHVuZXhwb3J0IGFuZCBub3QgZnVuYzoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB0cnk6CisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIG92YWwgPSBkLmdldFZhcih2YXIsIEZhbHNlKQorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgYmIuYnVpbGQuRnVuY0ZhaWxlZCk6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIG8ud3JpdGUoJyMgZXhwYW5zaW9uIG9mICVzIHRocmV3ICVzOiAlc1xuJyAlICh2YXIsIGV4Yy5fX2NsYXNzX18uX19uYW1lX18sIHN0cihleGMpKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBhbGw6CisgICAgICAgIGQudmFyaGlzdG9yeS5lbWl0KHZhciwgb3ZhbCwgdmFsLCBvLCBkKQorCisgICAgaWYgKHZhci5maW5kKCItIikgIT0gLTEgb3IgdmFyLmZpbmQoIi4iKSAhPSAtMSBvciB2YXIuZmluZCgneycpICE9IC0xIG9yIHZhci5maW5kKCd9JykgIT0gLTEgb3IgdmFyLmZpbmQoJysnKSAhPSAtMSkgYW5kIG5vdCBhbGw6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgdmFyRXhwYW5kZWQgPSBkLmV4cGFuZCh2YXIpCisKKyAgICBpZiB1bmV4cG9ydDoKKyAgICAgICAgby53cml0ZSgndW5zZXQgJXNcbicgJSB2YXJFeHBhbmRlZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICB2YWwgPSBzdHIodmFsKQorCisgICAgaWYgdmFyRXhwYW5kZWQuc3RhcnRzd2l0aCgiQkFTSF9GVU5DXyIpOgorICAgICAgICB2YXJFeHBhbmRlZCA9IHZhckV4cGFuZGVkWzEwOi0yXQorICAgICAgICB2YWwgPSB2YWxbMzpdICMgU3RyaXAgb2ZmICIoKSAiCisgICAgICAgIG8ud3JpdGUoIiVzKCkgJXNcbiIgJSAodmFyRXhwYW5kZWQsIHZhbCkpCisgICAgICAgIG8ud3JpdGUoImV4cG9ydCAtZiAlc1xuIiAlICh2YXJFeHBhbmRlZCkpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBmdW5jOgorICAgICAgICAjIE5PVEU6IHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgdW5iYWxhbmNlZCB7fSB3aXRoaW4gdGhlIHZhcgorICAgICAgICBvLndyaXRlKCIlcygpIHtcbiVzXG59XG4iICUgKHZhckV4cGFuZGVkLCB2YWwpKQorICAgICAgICByZXR1cm4gMQorCisgICAgaWYgZXhwb3J0OgorICAgICAgICBvLndyaXRlKCdleHBvcnQgJykKKworICAgICMgaWYgd2UncmUgZ29pbmcgdG8gb3V0cHV0IHRoaXMgd2l0aGluIGRvdWJsZXF1b3RlcywKKyAgICAjIHRvIGEgc2hlbGwsIHdlIG5lZWQgdG8gZXNjYXBlIHRoZSBxdW90ZXMgaW4gdGhlIHZhcgorICAgIGFsdGVyID0gcmUuc3ViKCciJywgJ1xcIicsIHZhbCkKKyAgICBhbHRlciA9IHJlLnN1YignXG4nLCAnIFxcXG4nLCBhbHRlcikKKyAgICBhbHRlciA9IHJlLnN1YignXFwkJywgJ1xcXFwkJywgYWx0ZXIpCisgICAgby53cml0ZSgnJXM9IiVzIlxuJyAlICh2YXJFeHBhbmRlZCwgYWx0ZXIpKQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZW1pdF9lbnYobz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSwgYWxsPUZhbHNlKToKKyAgICAiIiJFbWl0cyBhbGwgaXRlbXMgaW4gdGhlIGRhdGEgc3RvcmUgaW4gYSBmb3JtYXQgc3VjaCB0aGF0IGl0IGNhbiBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisKKyAgICBpc2Z1bmMgPSBsYW1iZGEga2V5OiBib29sKGQuZ2V0VmFyRmxhZyhrZXksICJmdW5jIikpCisgICAga2V5cyA9IHNvcnRlZCgoa2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKSwga2V5PWlzZnVuYykKKyAgICBncm91cGVkID0gZ3JvdXBieShrZXlzLCBpc2Z1bmMpCisgICAgZm9yIGlzZnVuYywga2V5cyBpbiBncm91cGVkOgorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBlbWl0X3ZhcihrZXksIG8sIGQsIGFsbCBhbmQgbm90IGlzZnVuYykgYW5kIG8ud3JpdGUoJ1xuJykKKworZGVmIGV4cG9ydGVkX2tleXMoZCk6CisgICAgcmV0dXJuIChrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoJ19fJykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyRmxhZyhrZXksICdleHBvcnQnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGQuZ2V0VmFyRmxhZyhrZXksICd1bmV4cG9ydCcpKQorCitkZWYgZXhwb3J0ZWRfdmFycyhkKToKKyAgICBmb3Iga2V5IGluIGV4cG9ydGVkX2tleXMoZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQga2V5LCBzdHIodmFsdWUpCisKK2RlZiBlbWl0X2Z1bmMoZnVuYywgbz1zeXMuX19zdGRvdXRfXywgZCA9IGluaXQoKSk6CisgICAgIiIiRW1pdHMgYWxsIGl0ZW1zIGluIHRoZSBkYXRhIHN0b3JlIGluIGEgZm9ybWF0IHN1Y2ggdGhhdCBpdCBjYW4gYmUgc291cmNlZCBieSBhIHNoZWxsLiIiIgorCisgICAga2V5cyA9IChrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoIl9fIikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgZW1pdF92YXIoa2V5LCBvLCBkLCBGYWxzZSkKKworICAgIG8ud3JpdGUoJ1xuJykKKyAgICBlbWl0X3ZhcihmdW5jLCBvLCBkLCBGYWxzZSkgYW5kIG8ud3JpdGUoJ1xuJykKKyAgICBuZXdkZXBzID0gYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihmdW5jLCBsb2dnZXIpLnBhcnNlX3NoZWxsKGQuZ2V0VmFyKGZ1bmMsIFRydWUpKQorICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZnVuYywgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBzZWVuID0gc2V0KCkKKyAgICB3aGlsZSBuZXdkZXBzOgorICAgICAgICBkZXBzID0gbmV3ZGVwcworICAgICAgICBzZWVuIHw9IGRlcHMKKyAgICAgICAgbmV3ZGVwcyA9IHNldCgpCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhkZXAsICJmdW5jIikgYW5kIG5vdCBkLmdldFZhckZsYWcoZGVwLCAicHl0aG9uIik6CisgICAgICAgICAgICAgICBlbWl0X3ZhcihkZXAsIG8sIGQsIEZhbHNlKSBhbmQgby53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSAgYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihkZXAsIGxvZ2dlcikucGFyc2Vfc2hlbGwoZC5nZXRWYXIoZGVwLCBUcnVlKSkKKyAgICAgICAgICAgICAgIG5ld2RlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZGVwLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBuZXdkZXBzIC09IHNlZW4KKworX2Z1bmN0aW9uZm10ID0gIiIiCitkZWYge2Z1bmN0aW9ufShkKToKK3tib2R5fSIiIgorCitkZWYgZW1pdF9mdW5jX3B5dGhvbihmdW5jLCBvPXN5cy5fX3N0ZG91dF9fLCBkID0gaW5pdCgpKToKKyAgICAiIiJFbWl0cyBhbGwgaXRlbXMgaW4gdGhlIGRhdGEgc3RvcmUgaW4gYSBmb3JtYXQgc3VjaCB0aGF0IGl0IGNhbiBiZSBzb3VyY2VkIGJ5IGEgc2hlbGwuIiIiCisKKyAgICBkZWYgd3JpdGVfZnVuYyhmdW5jLCBvLCBjYWxsID0gRmFsc2UpOgorICAgICAgICBib2R5ID0gZC5nZXRWYXIoZnVuYywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGJvZHkuc3RhcnRzd2l0aCgiZGVmIik6CisgICAgICAgICAgICBib2R5ID0gX2Z1bmN0aW9uZm10LmZvcm1hdChmdW5jdGlvbj1mdW5jLCBib2R5PWJvZHkpCisKKyAgICAgICAgby53cml0ZShib2R5LnN0cmlwKCkgKyAiXG5cbiIpCisgICAgICAgIGlmIGNhbGw6CisgICAgICAgICAgICBvLndyaXRlKGZ1bmMgKyAiKGQpIiArICJcblxuIikKKworICAgIHdyaXRlX2Z1bmMoZnVuYywgbywgVHJ1ZSkKKyAgICBwcCA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGZ1bmMsIGxvZ2dlcikKKyAgICBwcC5wYXJzZV9weXRob24oZC5nZXRWYXIoZnVuYywgVHJ1ZSkpCisgICAgbmV3ZGVwcyA9IHBwLmV4ZWNzCisgICAgbmV3ZGVwcyB8PSBzZXQoKGQuZ2V0VmFyRmxhZyhmdW5jLCAidmFyZGVwcyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgIHNlZW4gPSBzZXQoKQorICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgIGRlcHMgPSBuZXdkZXBzCisgICAgICAgIHNlZW4gfD0gZGVwcworICAgICAgICBuZXdkZXBzID0gc2V0KCkKKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGRlcCwgImZ1bmMiKSBhbmQgZC5nZXRWYXJGbGFnKGRlcCwgInB5dGhvbiIpOgorICAgICAgICAgICAgICAgd3JpdGVfZnVuYyhkZXAsIG8pCisgICAgICAgICAgICAgICBwcCA9IGJiLmNvZGVwYXJzZXIuUHl0aG9uUGFyc2VyKGRlcCwgbG9nZ2VyKQorICAgICAgICAgICAgICAgcHAucGFyc2VfcHl0aG9uKGQuZ2V0VmFyKGRlcCwgVHJ1ZSkpCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHBwLmV4ZWNzCisgICAgICAgICAgICAgICBuZXdkZXBzIHw9IHNldCgoZC5nZXRWYXJGbGFnKGRlcCwgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgbmV3ZGVwcyAtPSBzZWVuCisKK2RlZiB1cGRhdGVfZGF0YShkKToKKyAgICAiIiJQZXJmb3JtcyBmaW5hbCBzdGVwcyB1cG9uIHRoZSBkYXRhc3RvcmUsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBvZiBvdmVycmlkZXMiIiIKKyAgICBkLmZpbmFsaXplKHBhcmVudCA9IFRydWUpCisKK2RlZiBidWlsZF9kZXBlbmRlbmNpZXMoa2V5LCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCk6CisgICAgZGVwcyA9IHNldCgpCisgICAgdHJ5OgorICAgICAgICBpZiBrZXlbLTFdID09ICddJzoKKyAgICAgICAgICAgIHZmID0ga2V5WzotMV0uc3BsaXQoJ1snKQorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhckZsYWcodmZbMF0sIHZmWzFdLCBGYWxzZSkKKyAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgKGtleXMgJiBwYXJzZXIuZXhlY3MpCisgICAgICAgICAgICByZXR1cm4gZGVwcywgdmFsdWUKKyAgICAgICAgdmFyZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSwgWyJ2YXJkZXBzIiwgInZhcmRlcHZhbHVlIiwgInZhcmRlcHNleGNsdWRlIiwgInZhcmRlcHZhbHVlZXhjbHVkZSIsICJwb3N0ZnVuY3MiLCAicHJlZnVuY3MiXSkgb3Ige30KKyAgICAgICAgdmFyZGVwcyA9IHZhcmZsYWdzLmdldCgidmFyZGVwcyIpCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBGYWxzZSkKKworICAgICAgICBkZWYgaGFuZGxlX2NvbnRhaW5zKHZhbHVlLCBjb250YWlucywgZCk6CisgICAgICAgICAgICBuZXd2YWx1ZSA9ICIiCisgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWQoY29udGFpbnMpOgorICAgICAgICAgICAgICAgIGwgPSAoZC5nZXRWYXIoaywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmb3Igd29yZCBpbiBzb3J0ZWQoY29udGFpbnNba10pOgorICAgICAgICAgICAgICAgICAgICBpZiB3b3JkIGluIGw6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSArPSAiXG4lc3slc30gPSBTZXQiICUgIChrLCB3b3JkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgKz0gIlxuJXN7JXN9ID0gVW5zZXQiICUgIChrLCB3b3JkKQorICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBuZXd2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgbmV3dmFsdWUKKworICAgICAgICBpZiAidmFyZGVwdmFsdWUiIGluIHZhcmZsYWdzOgorICAgICAgICAgICB2YWx1ZSA9IHZhcmZsYWdzLmdldCgidmFyZGVwdmFsdWUiKQorICAgICAgICBlbGlmIHZhcmZsYWdzLmdldCgiZnVuYyIpOgorICAgICAgICAgICAgaWYgdmFyZmxhZ3MuZ2V0KCJweXRob24iKToKKyAgICAgICAgICAgICAgICBwYXJzZWR2YXIgPSBkLmV4cGFuZFdpdGhSZWZzKHZhbHVlLCBrZXkpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5QeXRob25QYXJzZXIoa2V5LCBsb2dnZXIpCisgICAgICAgICAgICAgICAgaWYgcGFyc2VkdmFyLnZhbHVlIGFuZCAiXHQiIGluIHBhcnNlZHZhci52YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlZhcmlhYmxlICVzIGNvbnRhaW5zIHRhYnMsIHBsZWFzZSByZW1vdmUgdGhlc2UgKCVzKSIgJSAoa2V5LCBkLmdldFZhcigiRklMRSIsIFRydWUpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfcHl0aG9uKHBhcnNlZHZhci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHBhcnNlci5yZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlci5jb250YWlucywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VkdmFyID0gZC5leHBhbmRXaXRoUmVmcyh2YWx1ZSwga2V5KQorICAgICAgICAgICAgICAgIHBhcnNlciA9IGJiLmNvZGVwYXJzZXIuU2hlbGxQYXJzZXIoa2V5LCBsb2dnZXIpCisgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX3NoZWxsKHBhcnNlZHZhci52YWx1ZSkKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHNoZWxsZGVwcworICAgICAgICAgICAgaWYgdmFyZGVwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBhcnNlci5sb2cuZmx1c2goKQorICAgICAgICAgICAgaWYgInByZWZ1bmNzIiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHNldCh2YXJmbGFnc1sicHJlZnVuY3MiXS5zcGxpdCgpKQorICAgICAgICAgICAgaWYgInBvc3RmdW5jcyIgaW4gdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMgfCBzZXQodmFyZmxhZ3NbInBvc3RmdW5jcyJdLnNwbGl0KCkpCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IHBhcnNlZHZhci5yZWZlcmVuY2VzCisgICAgICAgICAgICBkZXBzID0gZGVwcyB8IChrZXlzICYgcGFyc2VyLmV4ZWNzKSB8IChrZXlzICYgcGFyc2VkdmFyLmV4ZWNzKQorICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVfY29udGFpbnModmFsdWUsIHBhcnNlZHZhci5jb250YWlucywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IGQuZXhwYW5kV2l0aFJlZnModmFsdWUsIGtleSkKKyAgICAgICAgICAgIGRlcHMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIGRlcHMgPSBkZXBzIHwgKGtleXMgJiBwYXJzZXIuZXhlY3MpCisgICAgICAgICAgICB2YWx1ZSA9IGhhbmRsZV9jb250YWlucyh2YWx1ZSwgcGFyc2VyLmNvbnRhaW5zLCBkKQorCisgICAgICAgIGlmICJ2YXJkZXB2YWx1ZWV4Y2x1ZGUiIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgZXhjbHVkZSA9IHZhcmZsYWdzLmdldCgidmFyZGVwdmFsdWVleGNsdWRlIikKKyAgICAgICAgICAgIGZvciBleGNsIGluIGV4Y2x1ZGUuc3BsaXQoJ3wnKToKKyAgICAgICAgICAgICAgICBpZiBleGNsOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoZXhjbCwgJycpCisKKyAgICAgICAgIyBBZGQgdmFyZmxhZ3MsIGFzc3VtaW5nIGFuIGV4Y2x1c2lvbiBsaXN0IGlzIHNldAorICAgICAgICBpZiB2YXJmbGFnc2V4Y2w6CisgICAgICAgICAgICB2YXJmZGVwcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiB2YXJmbGFnczoKKyAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiB2YXJmbGFnc2V4Y2w6CisgICAgICAgICAgICAgICAgICAgIHZhcmZkZXBzLmFwcGVuZCgnJXNbJXNdJyAlIChrZXksIGYpKQorICAgICAgICAgICAgaWYgdmFyZmRlcHM6CisgICAgICAgICAgICAgICAgZGVwcyB8PSBzZXQodmFyZmRlcHMpCisKKyAgICAgICAgZGVwcyB8PSBzZXQoKHZhcmRlcHMgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIGRlcHMgLT0gc2V0KHZhcmZsYWdzLmdldCgidmFyZGVwc2V4Y2x1ZGUiLCAiIikuc3BsaXQoKSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3Ioa2V5LCBOb25lLCBlKQorICAgIHJldHVybiBkZXBzLCB2YWx1ZQorICAgICNiYi5ub3RlKCJWYXJpYWJsZSAlcyByZWZlcmVuY2VzICVzIGFuZCBjYWxscyAlcyIgJSAoa2V5LCBzdHIoZGVwcyksIHN0cihleGVjcykpKQorICAgICNkLnNldFZhckZsYWcoa2V5LCAidmFyZGVwcyIsIGRlcHMpCisKK2RlZiBnZW5lcmF0ZV9kZXBlbmRlbmNpZXMoZCk6CisKKyAgICBrZXlzID0gc2V0KGtleSBmb3Iga2V5IGluIGQgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKQorICAgIHNoZWxsZGVwcyA9IHNldChrZXkgZm9yIGtleSBpbiBkLmdldFZhcigiX19leHBvcnRsaXN0IiwgRmFsc2UpIGlmIGQuZ2V0VmFyRmxhZyhrZXksICJleHBvcnQiKSBhbmQgbm90IGQuZ2V0VmFyRmxhZyhrZXksICJ1bmV4cG9ydCIpKQorICAgIHZhcmZsYWdzZXhjbCA9IGQuZ2V0VmFyKCdCQl9TSUdOQVRVUkVfRVhDTFVERV9GTEFHUycsIFRydWUpCisKKyAgICBkZXBzID0ge30KKyAgICB2YWx1ZXMgPSB7fQorCisgICAgdGFza2xpc3QgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCisgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgIGRlcHNbdGFza10sIHZhbHVlc1t0YXNrXSA9IGJ1aWxkX2RlcGVuZGVuY2llcyh0YXNrLCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCkKKyAgICAgICAgbmV3ZGVwcyA9IGRlcHNbdGFza10KKyAgICAgICAgc2VlbiA9IHNldCgpCisgICAgICAgIHdoaWxlIG5ld2RlcHM6CisgICAgICAgICAgICBuZXh0ZGVwcyA9IG5ld2RlcHMKKyAgICAgICAgICAgIHNlZW4gfD0gbmV4dGRlcHMKKyAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXh0ZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHNbZGVwXSwgdmFsdWVzW2RlcF0gPSBidWlsZF9kZXBlbmRlbmNpZXMoZGVwLCBrZXlzLCBzaGVsbGRlcHMsIHZhcmZsYWdzZXhjbCwgZCkKKyAgICAgICAgICAgICAgICBuZXdkZXBzIHw9ICBkZXBzW2RlcF0KKyAgICAgICAgICAgIG5ld2RlcHMgLT0gc2VlbgorICAgICAgICAjcHJpbnQgIkZvciAlczogJXMiICUgKHRhc2ssIHN0cihkZXBzW3Rhc2tdKSkKKyAgICByZXR1cm4gdGFza2xpc3QsIGRlcHMsIHZhbHVlcworCitkZWYgaW5oZXJpdHNfY2xhc3Moa2xhc3MsIGQpOgorICAgIHZhbCA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICBuZWVkbGUgPSBvcy5wYXRoLmpvaW4oJ2NsYXNzZXMnLCAnJXMuYmJjbGFzcycgJSBrbGFzcykKKyAgICBmb3IgdiBpbiB2YWw6CisgICAgICAgIGlmIHYuZW5kc3dpdGgobmVlZGxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9kYXRhX3NtYXJ0LnB5IGIvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI0ZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZGF0YV9zbWFydC5weQpAQCAtMCwwICsxLDk0MiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSBTbWFydCBEaWN0aW9uYXJ5IEltcGxlbWVudGF0aW9uCisKK0Z1bmN0aW9ucyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgU2ViIEZyYW5rZW5ndWwKKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIFVsaSBMdWNrYXMKKyMgQ29weXJpZ2h0IChDKSAyMDA1ICAgICAgICBST0FEIEdtYkgKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IGNvcHksIHJlLCBzeXMsIHRyYWNlYmFjaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGJiLCBiYi5jb2RlcGFyc2VyCitmcm9tIGJiICAgaW1wb3J0IHV0aWxzCitmcm9tIGJiLkNPVyAgaW1wb3J0IENPV0RpY3RCYXNlCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLkRhdGEiKQorCitfX3NldHZhcl9rZXl3b3JkX18gPSBbIl9hcHBlbmQiLCAiX3ByZXBlbmQiLCAiX3JlbW92ZSJdCitfX3NldHZhcl9yZWdleHBfXyA9IHJlLmNvbXBpbGUoJyg/UDxiYXNlPi4qPykoP1A8a2V5d29yZD5fYXBwZW5kfF9wcmVwZW5kfF9yZW1vdmUpKF8oP1A8YWRkPi4qKSk/JCcpCitfX2V4cGFuZF92YXJfcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7W157fUBcblx0IF0rfSIpCitfX2V4cGFuZF9weXRob25fcmVnZXhwX18gPSByZS5jb21waWxlKHIiXCR7QC4rP30iKQorCitkZWYgaW5mZXJfY2FsbGVyX2RldGFpbHMobG9naW5mbywgcGFyZW50ID0gRmFsc2UsIHZhcnZhbCA9IFRydWUpOgorICAgICIiIlNhdmUgdGhlIGNhbGxlciB0aGUgdHJvdWJsZSBvZiBzcGVjaWZ5aW5nIGV2ZXJ5dGhpbmcuIiIiCisgICAgIyBTYXZlIGVmZm9ydC4KKyAgICBpZiAnaWdub3JlJyBpbiBsb2dpbmZvIGFuZCBsb2dpbmZvWydpZ25vcmUnXToKKyAgICAgICAgcmV0dXJuCisgICAgIyBJZiBub3RoaW5nIHdhcyBwcm92aWRlZCwgbWFyayB0aGlzIGFzIHBvc3NpYmx5IHVubmVlZGVkLgorICAgIGlmIG5vdCBsb2dpbmZvOgorICAgICAgICBsb2dpbmZvWydpZ25vcmUnXSA9IFRydWUKKyAgICAgICAgcmV0dXJuCisgICAgIyBJbmZlciBjYWxsZXIncyBsaWtlbHkgdmFsdWVzIGZvciB2YXJpYWJsZSAodmFyKSBhbmQgdmFsdWUgKHZhbHVlKSwgCisgICAgIyB0byByZWR1Y2UgY2x1dHRlciBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZS4KKyAgICBhYm92ZSA9IE5vbmUKKyAgICBkZWYgc2V0X2Fib3ZlKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQorICAgICAgICAgICAgaWYgcGFyZW50OgorICAgICAgICAgICAgICAgIHJldHVybiB0Yi50Yl9mcmFtZS5mX2JhY2suZl9iYWNrLmZfYmFjaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGIudGJfZnJhbWUuZl9iYWNrLmZfYmFjaworCisgICAgaWYgdmFydmFsIGFuZCAoJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbyBvciAnZGV0YWlsJyBub3QgaW4gbG9naW5mbyk6CisgICAgICAgIGlmIG5vdCBhYm92ZToKKyAgICAgICAgICAgIGFib3ZlID0gc2V0X2Fib3ZlKCkKKyAgICAgICAgbGNscyA9IGFib3ZlLmZfbG9jYWxzLml0ZW1zKCkKKyAgICAgICAgZm9yIGssIHYgaW4gbGNsczoKKyAgICAgICAgICAgIGlmIGsgPT0gJ3ZhbHVlJyBhbmQgJ2RldGFpbCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSB2CisgICAgICAgICAgICBpZiBrID09ICd2YXInIGFuZCAndmFyaWFibGUnIG5vdCBpbiBsb2dpbmZvOgorICAgICAgICAgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSB2CisgICAgIyBJbmZlciBmaWxlL2xpbmUvZnVuY3Rpb24gZnJvbSB0cmFjZWJhY2sKKyAgICAjIERvbid0IHVzZSB0cmFjZWJhY2suZXh0cmFjdF9zdGFjaygpIHNpbmNlIGl0IGZpbGxzIHRoZSBsaW5lIGNvbnRlbnRzIHdoaWNoCisgICAgIyB3ZSBkb24ndCBuZWVkIGFuZCB0aGF0IGhpdHMgc3RhdCBzeXNjYWxscworICAgIGlmICdmaWxlJyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgaWYgbm90IGFib3ZlOgorICAgICAgICAgICAgYWJvdmUgPSBzZXRfYWJvdmUoKQorICAgICAgICBmID0gYWJvdmUuZl9iYWNrCisgICAgICAgIGxpbmUgPSBmLmZfbGluZW5vCisgICAgICAgIGZpbGUgPSBmLmZfY29kZS5jb19maWxlbmFtZQorICAgICAgICBmdW5jID0gZi5mX2NvZGUuY29fbmFtZQorICAgICAgICBsb2dpbmZvWydmaWxlJ10gPSBmaWxlCisgICAgICAgIGxvZ2luZm9bJ2xpbmUnXSA9IGxpbmUKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIGxvZ2luZm9bJ2Z1bmMnXSA9IGZ1bmMKKworY2xhc3MgVmFyaWFibGVQYXJzZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybmFtZSwgZCwgdmFsID0gTm9uZSk6CisgICAgICAgIHNlbGYudmFybmFtZSA9IHZhcm5hbWUKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnZhbHVlID0gdmFsCisKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5leGVjcyA9IHNldCgpCisgICAgICAgIHNlbGYuY29udGFpbnMgPSB7fQorCisgICAgZGVmIHZhcl9zdWIoc2VsZiwgbWF0Y2gpOgorICAgICAgICAgICAga2V5ID0gbWF0Y2guZ3JvdXAoKVsyOi0xXQorICAgICAgICAgICAgaWYgc2VsZi52YXJuYW1lIGFuZCBrZXk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52YXJuYW1lID09IGtleToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJ2YXJpYWJsZSAlcyByZWZlcmVuY2VzIGl0c2VsZiEiICUgc2VsZi52YXJuYW1lKQorICAgICAgICAgICAgaWYga2V5IGluIHNlbGYuZC5leHBhbmRfY2FjaGU6CisgICAgICAgICAgICAgICAgdmFycGFyc2UgPSBzZWxmLmQuZXhwYW5kX2NhY2hlW2tleV0KKyAgICAgICAgICAgICAgICB2YXIgPSB2YXJwYXJzZS52YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyRmxhZyhrZXksICJfY29udGVudCIsIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMuYWRkKGtleSkKKyAgICAgICAgICAgIGlmIHZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgpCisKKyAgICBkZWYgcHl0aG9uX3N1YihzZWxmLCBtYXRjaCk6CisgICAgICAgICAgICBjb2RlID0gbWF0Y2guZ3JvdXAoKVszOi0xXQorICAgICAgICAgICAgY29kZW9iaiA9IGNvbXBpbGUoY29kZS5zdHJpcCgpLCBzZWxmLnZhcm5hbWUgb3IgIjxleHBhbnNpb24+IiwgImV2YWwiKQorCisgICAgICAgICAgICBwYXJzZXIgPSBiYi5jb2RlcGFyc2VyLlB5dGhvblBhcnNlcihzZWxmLnZhcm5hbWUsIGxvZ2dlcikKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9weXRob24oY29kZSkKKyAgICAgICAgICAgIGlmIHNlbGYudmFybmFtZToKKyAgICAgICAgICAgICAgICB2YXJkZXBzID0gc2VsZi5kLmdldFZhckZsYWcoc2VsZi52YXJuYW1lLCAidmFyZGVwcyIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFyZGVwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXJzZXIubG9nLmZsdXNoKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLmxvZy5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLnJlZmVyZW5jZXMgfD0gcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgICAgIHNlbGYuZXhlY3MgfD0gcGFyc2VyLmV4ZWNzCisKKyAgICAgICAgICAgIGZvciBrIGluIHBhcnNlci5jb250YWluczoKKyAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBzZWxmLmNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5zW2tdID0gcGFyc2VyLmNvbnRhaW5zW2tdLmNvcHkoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNba10udXBkYXRlKHBhcnNlci5jb250YWluc1trXSkKKyAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuYmV0dGVyX2V2YWwoY29kZW9iaiwgRGF0YUNvbnRleHQoc2VsZi5kKSkKKyAgICAgICAgICAgIHJldHVybiBzdHIodmFsdWUpCisKKworY2xhc3MgRGF0YUNvbnRleHQoZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFkYXRhLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YQorICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYsICoqa3dhcmdzKQorICAgICAgICBzZWxmWydkJ10gPSBtZXRhZGF0YQorCisgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbHVlID0gc2VsZi5tZXRhZGF0YS5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lIG9yIHNlbGYubWV0YWRhdGEuZ2V0VmFyRmxhZyhrZXksICdmdW5jJyk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgRXhwYW5zaW9uRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFybmFtZSwgZXhwcmVzc2lvbiwgZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5leHByZXNzaW9uID0gZXhwcmVzc2lvbgorICAgICAgICBzZWxmLnZhcmlhYmxlbmFtZSA9IHZhcm5hbWUKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgaWYgdmFybmFtZToKKyAgICAgICAgICAgIGlmIGV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgdmFyaWFibGUgJXMsIGV4cHJlc3Npb24gd2FzICVzIHdoaWNoIHRyaWdnZXJlZCBleGNlcHRpb24gJXM6ICVzIiAlICh2YXJuYW1lLCBleHByZXNzaW9uLCB0eXBlKGV4Y2VwdGlvbikuX19uYW1lX18sIGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tc2cgPSAiRmFpbHVyZSBleHBhbmRpbmcgdmFyaWFibGUgJXM6ICVzOiAlcyIgJSAodmFybmFtZSwgdHlwZShleGNlcHRpb24pLl9fbmFtZV9fLCBleGNlcHRpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1zZyA9ICJGYWlsdXJlIGV4cGFuZGluZyBleHByZXNzaW9uICVzIHdoaWNoIHRyaWdnZXJlZCBleGNlcHRpb24gJXM6ICVzIiAlIChleHByZXNzaW9uLCB0eXBlKGV4Y2VwdGlvbikuX19uYW1lX18sIGV4Y2VwdGlvbikKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIHNlbGYubXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodmFybmFtZSwgZXhwcmVzc2lvbiwgZXhjZXB0aW9uKQorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tc2cKKworY2xhc3MgSW5jbHVkZUhpc3Rvcnkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50ID0gTm9uZSwgZmlsZW5hbWUgPSAnW1RPUCBMRVZFTF0nKToKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBbXQorICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgbmV3ID0gSW5jbHVkZUhpc3Rvcnkoc2VsZi5wYXJlbnQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGZvciBjIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBuZXcuY2hpbGRyZW4uYXBwZW5kKGMpCisgICAgICAgIHJldHVybiBuZXcKKworICAgIGRlZiBpbmNsdWRlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgbmV3ZmlsZSA9IEluY2x1ZGVIaXN0b3J5KHNlbGYuY3VycmVudCwgZmlsZW5hbWUpCisgICAgICAgIHNlbGYuY3VycmVudC5jaGlsZHJlbi5hcHBlbmQobmV3ZmlsZSkKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gbmV3ZmlsZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnQucGFyZW50OgorICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi5jdXJyZW50LnBhcmVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiSW5jbHVkZSBsb2c6IFRyaWVkIHRvIGZpbmlzaCAnJXMnIGF0IHRvcCBsZXZlbC4iICUgZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGVtaXQoc2VsZiwgbywgbGV2ZWwgPSAwKToKKyAgICAgICAgIiIiRW1pdCBhbiBpbmNsdWRlIGhpc3RvcnkgZmlsZSwgYW5kIGl0cyBjaGlsZHJlbi4iIiIKKyAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICBzcGFjZXMgPSAiICAiICogKGxldmVsIC0gMSkKKyAgICAgICAgICAgIG8ud3JpdGUoIiMgJXMlcyIgJSAoc3BhY2VzLCBzZWxmLmZpbGVuYW1lKSkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmNoaWxkcmVuKSA+IDA6CisgICAgICAgICAgICAgICAgby53cml0ZSgiIGluY2x1ZGVzOiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvLndyaXRlKCIjXG4jIElOQ0xVREUgSElTVE9SWTpcbiMiKQorICAgICAgICBsZXZlbCA9IGxldmVsICsgMQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKKyAgICAgICAgICAgIG8ud3JpdGUoIlxuIikKKyAgICAgICAgICAgIGNoaWxkLmVtaXQobywgbGV2ZWwpCisKK2NsYXNzIFZhcmlhYmxlSGlzdG9yeShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhcm9vdCk6CisgICAgICAgIHNlbGYuZGF0YXJvb3QgPSBkYXRhcm9vdAorICAgICAgICBzZWxmLnZhcmlhYmxlcyA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIG5ldyA9IFZhcmlhYmxlSGlzdG9yeShzZWxmLmRhdGFyb290KQorICAgICAgICBuZXcudmFyaWFibGVzID0gc2VsZi52YXJpYWJsZXMuY29weSgpCisgICAgICAgIHJldHVybiBuZXcKKworICAgIGRlZiByZWNvcmQoc2VsZiwgKmt3b25seSwgKipsb2dpbmZvKToKKyAgICAgICAgaWYgbm90IHNlbGYuZGF0YXJvb3QuX3RyYWNraW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGxlbihrd29ubHkpID4gMDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBpbmZlcl9jYWxsZXJfZGV0YWlscyhsb2dpbmZvLCBwYXJlbnQgPSBUcnVlKQorICAgICAgICBpZiAnaWdub3JlJyBpbiBsb2dpbmZvIGFuZCBsb2dpbmZvWydpZ25vcmUnXToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiAnb3AnIG5vdCBpbiBsb2dpbmZvIG9yIG5vdCBsb2dpbmZvWydvcCddOgorICAgICAgICAgICAgbG9naW5mb1snb3AnXSA9ICdzZXQnCisgICAgICAgIGlmICdkZXRhaWwnIGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9IHN0cihsb2dpbmZvWydkZXRhaWwnXSkKKyAgICAgICAgaWYgJ3ZhcmlhYmxlJyBub3QgaW4gbG9naW5mbyBvciAnZmlsZScgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWNvcmQoKSBtaXNzaW5nIHZhcmlhYmxlIG9yIGZpbGUuIikKKyAgICAgICAgdmFyID0gbG9naW5mb1sndmFyaWFibGUnXQorCisgICAgICAgIGlmIHZhciBub3QgaW4gc2VsZi52YXJpYWJsZXM6CisgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdID0gW10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi52YXJpYWJsZXNbdmFyXSwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ25vZHVwcycgaW4gbG9naW5mbyBhbmQgbG9naW5mbyBpbiBzZWxmLnZhcmlhYmxlc1t2YXJdOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudmFyaWFibGVzW3Zhcl0uYXBwZW5kKGxvZ2luZm8uY29weSgpKQorCisgICAgZGVmIHZhcmlhYmxlKHNlbGYsIHZhcik6CisgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcmlhYmxlc1t2YXJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBlbWl0KHNlbGYsIHZhciwgb3ZhbCwgdmFsLCBvLCBkKToKKyAgICAgICAgaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorCisgICAgICAgICMgQXBwZW5kIG92ZXJyaWRlIGhpc3RvcnkKKyAgICAgICAgaWYgdmFyIGluIGQub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgZm9yIChyLCBvdmVycmlkZSkgaW4gZC5vdmVycmlkZWRhdGFbdmFyXToKKyAgICAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi52YXJpYWJsZShyKToKKyAgICAgICAgICAgICAgICAgICAgbG9naW5mbyA9IGV2ZW50LmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBpZiAnZmxhZycgaW4gbG9naW5mbyBhbmQgbm90IGxvZ2luZm9bJ2ZsYWcnXS5zdGFydHN3aXRoKCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gdmFyCisgICAgICAgICAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnb3ZlcnJpZGVbJXNdOiVzJyAlIChvdmVycmlkZSwgbG9naW5mb1snb3AnXSkKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5hcHBlbmQobG9naW5mbykKKworICAgICAgICBjb21tZW50VmFsID0gcmUuc3ViKCdcbicsICdcbiMnLCBzdHIob3ZhbCkpCisgICAgICAgIGlmIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiBsZW4oaGlzdG9yeSkgPT0gMToKKyAgICAgICAgICAgICAgICBvLndyaXRlKCIjXG4jICQlc1xuIiAlIHZhcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgby53cml0ZSgiI1xuIyAkJXMgWyVkIG9wZXJhdGlvbnNdXG4iICUgKHZhciwgbGVuKGhpc3RvcnkpKSkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBoaXN0b3J5OgorICAgICAgICAgICAgICAgICMgby53cml0ZSgiIyAlc1xuIiAlIHN0cihldmVudCkpCisgICAgICAgICAgICAgICAgaWYgJ2Z1bmMnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGhhdmUgYSBmdW5jdGlvbiBsaXN0ZWQsIHRoaXMgaXMgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgIyBjb2RlLCBub3QgYW4gb3BlcmF0aW9uIGluIGEgY29uZmlnIGZpbGUsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBmdWxsIHBhdGggaXMgZGlzdHJhY3RpbmcuCisgICAgICAgICAgICAgICAgICAgIGV2ZW50WydmaWxlJ10gPSByZS5zdWIoJy4qLycsICcnLCBldmVudFsnZmlsZSddKQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2Z1bmMgPSAnIFslc10nICUgZXZlbnRbJ2Z1bmMnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZnVuYyA9ICcnCisgICAgICAgICAgICAgICAgaWYgJ2ZsYWcnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgICAgICBmbGFnID0gJ1slc10gJyAlIChldmVudFsnZmxhZyddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJworICAgICAgICAgICAgICAgIG8ud3JpdGUoIiMgICAlcyAlczolcyVzXG4jICAgICAlc1wiJXNcIlxuIiAlIChldmVudFsnb3AnXSwgZXZlbnRbJ2ZpbGUnXSwgZXZlbnRbJ2xpbmUnXSwgZGlzcGxheV9mdW5jLCBmbGFnLCByZS5zdWIoJ1xuJywgJ1xuIyAgICAgJywgZXZlbnRbJ2RldGFpbCddKSkpCisgICAgICAgICAgICBpZiBsZW4oaGlzdG9yeSkgPiAxOgorICAgICAgICAgICAgICAgIG8ud3JpdGUoIiMgcHJlLWV4cGFuc2lvbiB2YWx1ZTpcbiIpCisgICAgICAgICAgICAgICAgby53cml0ZSgnIyAgICIlcyJcbicgJSAoY29tbWVudFZhbCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvLndyaXRlKCIjXG4jICQlc1xuIyAgIFtubyBoaXN0b3J5IHJlY29yZGVkXVxuI1xuIiAlIHZhcikKKyAgICAgICAgICAgIG8ud3JpdGUoJyMgICAiJXMiXG4nICUgKGNvbW1lbnRWYWwpKQorCisgICAgZGVmIGdldF92YXJpYWJsZV9maWxlcyhzZWxmLCB2YXIpOgorICAgICAgICAiIiJHZXQgdGhlIGZpbGVzIHdoZXJlIG9wZXJhdGlvbnMgYXJlIG1hZGUgb24gYSB2YXJpYWJsZSIiIgorICAgICAgICB2YXJfaGlzdG9yeSA9IHNlbGYudmFyaWFibGUodmFyKQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiB2YXJfaGlzdG9yeToKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChldmVudFsnZmlsZSddKQorICAgICAgICByZXR1cm4gZmlsZXMKKworICAgIGRlZiBnZXRfdmFyaWFibGVfbGluZXMoc2VsZiwgdmFyLCBmKToKKyAgICAgICAgIiIiR2V0IHRoZSBsaW5lIHdoZXJlIGEgb3BlcmF0aW9uIGlzIG1hZGUgb24gYSB2YXJpYWJsZSBpbiBmaWxlIGYiIiIKKyAgICAgICAgdmFyX2hpc3RvcnkgPSBzZWxmLnZhcmlhYmxlKHZhcikKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgZXZlbnQgaW4gdmFyX2hpc3Rvcnk6CisgICAgICAgICAgICBpZiBmPT0gZXZlbnRbJ2ZpbGUnXToKKyAgICAgICAgICAgICAgICBsaW5lID0gZXZlbnRbJ2xpbmUnXQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiBnZXRfdmFyaWFibGVfaXRlbXNfZmlsZXMoc2VsZiwgdmFyLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZSB2YXJpYWJsZSBoaXN0b3J5IHRvIG1hcCBpdGVtcyBhZGRlZCB0byBhIGxpc3QgdmFyaWFibGUgYW5kCisgICAgICAgIHRoZSBmaWxlcyBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCisgICAgICAgICIiIgorICAgICAgICBoaXN0b3J5ID0gc2VsZi52YXJpYWJsZSh2YXIpCisgICAgICAgIGZpbmFsaXRlbXMgPSAoZC5nZXRWYXIodmFyLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgICAgICBmaWxlbWFwID0ge30KKyAgICAgICAgaXNzZXQgPSBGYWxzZQorICAgICAgICBmb3IgZXZlbnQgaW4gaGlzdG9yeToKKyAgICAgICAgICAgIGlmICdmbGFnJyBpbiBldmVudDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZXZlbnRbJ29wJ10gPT0gJ19yZW1vdmUnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc3NldCBhbmQgZXZlbnRbJ29wJ10gPT0gJ3NldD8nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpc3NldCA9IFRydWUKKyAgICAgICAgICAgIGl0ZW1zID0gZC5leHBhbmQoZXZlbnRbJ2RldGFpbCddKS5zcGxpdCgpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBsaXR0bGUgY3J1ZGUgYnV0IGlzIGJlbHQtYW5kLWJyYWNlcyB0byBhdm9pZCB1cworICAgICAgICAgICAgICAgICMgaGF2aW5nIHRvIGhhbmRsZSBldmVyeSBwb3NzaWJsZSBvcGVyYXRpb24gdHlwZSBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgICAgICBpZiBpdGVtIGluIGZpbmFsaXRlbXMgYW5kIG5vdCBpdGVtIGluIGZpbGVtYXA6CisgICAgICAgICAgICAgICAgICAgIGZpbGVtYXBbaXRlbV0gPSBldmVudFsnZmlsZSddCisgICAgICAgIHJldHVybiBmaWxlbWFwCisKKyAgICBkZWYgZGVsX3Zhcl9oaXN0b3J5KHNlbGYsIHZhciwgZj1Ob25lLCBsaW5lPU5vbmUpOgorICAgICAgICAiIiJJZiBmaWxlIGYgYW5kIGxpbmUgYXJlIG5vdCBnaXZlbiwgdGhlIGVudGlyZSBoaXN0b3J5IG9mIHZhciBpcyBkZWxldGVkIiIiCisgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcmlhYmxlczoKKyAgICAgICAgICAgIGlmIGYgYW5kIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYWJsZXNbdmFyXSA9IFsgeCBmb3IgeCBpbiBzZWxmLnZhcmlhYmxlc1t2YXJdIGlmIHhbJ2ZpbGUnXSE9ZiBhbmQgeFsnbGluZSddIT1saW5lXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhYmxlc1t2YXJdID0gW10KKworY2xhc3MgRGF0YVNtYXJ0KE11dGFibGVNYXBwaW5nKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZGljdCA9IHt9CisKKyAgICAgICAgc2VsZi5pbmNoaXN0b3J5ID0gSW5jbHVkZUhpc3RvcnkoKQorICAgICAgICBzZWxmLnZhcmhpc3RvcnkgPSBWYXJpYWJsZUhpc3Rvcnkoc2VsZikKKyAgICAgICAgc2VsZi5fdHJhY2tpbmcgPSBGYWxzZQorCisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKworICAgICAgICAjIGNvb2tpZSBtb25zdGVyIHRyaWJ1dGUKKyAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd3JpdGVzIHRvIG92ZXJyaWRlZGF0YSBhcworICAgICAgICAjIGl0cyBvbmx5IGEgc2hhbGxvdyBjb3B5LCBjb3VsZCBpbmZsdWVuY2Ugb3RoZXIgZGF0YSBzdG9yZQorICAgICAgICAjIGNvcGllcyEKKyAgICAgICAgc2VsZi5vdmVycmlkZWRhdGEgPSB7fQorICAgICAgICBzZWxmLm92ZXJyaWRlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdmVycmlkZXZhcnMgPSBzZXQoWyJPVkVSUklERVMiLCAiRklMRSJdKQorICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBGYWxzZQorCisgICAgZGVmIGVuYWJsZVRyYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90cmFja2luZyA9IFRydWUKKworICAgIGRlZiBkaXNhYmxlVHJhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYWNraW5nID0gRmFsc2UKKworICAgIGRlZiBleHBhbmRXaXRoUmVmcyhzZWxmLCBzLCB2YXJuYW1lKToKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBiYXNlc3RyaW5nKTogIyBzYW5pdHkgY2hlY2sKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZVBhcnNlKHZhcm5hbWUsIHNlbGYsIHMpCisKKyAgICAgICAgaWYgdmFybmFtZSBhbmQgdmFybmFtZSBpbiBzZWxmLmV4cGFuZF9jYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZF9jYWNoZVt2YXJuYW1lXQorCisgICAgICAgIHZhcnBhcnNlID0gVmFyaWFibGVQYXJzZSh2YXJuYW1lLCBzZWxmKQorCisgICAgICAgIHdoaWxlIHMuZmluZCgnJHsnKSAhPSAtMToKKyAgICAgICAgICAgIG9sZHMgPSBzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IF9fZXhwYW5kX3Zhcl9yZWdleHBfXy5zdWIodmFycGFyc2UudmFyX3N1YiwgcykKKyAgICAgICAgICAgICAgICBzID0gX19leHBhbmRfcHl0aG9uX3JlZ2V4cF9fLnN1Yih2YXJwYXJzZS5weXRob25fc3ViLCBzKQorICAgICAgICAgICAgICAgIGlmIHMgPT0gb2xkczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBFeHBhbnNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGU6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGV4Y19jbGFzcywgZXhjLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhwYW5zaW9uRXJyb3IsIEV4cGFuc2lvbkVycm9yKHZhcm5hbWUsIHMsIGV4YyksIHRiCisKKyAgICAgICAgdmFycGFyc2UudmFsdWUgPSBzCisKKyAgICAgICAgaWYgdmFybmFtZToKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlW3Zhcm5hbWVdID0gdmFycGFyc2UKKworICAgICAgICByZXR1cm4gdmFycGFyc2UKKworICAgIGRlZiBleHBhbmQoc2VsZiwgcywgdmFybmFtZSA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRXaXRoUmVmcyhzLCB2YXJuYW1lKS52YWx1ZQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYsIHBhcmVudCA9IEZhbHNlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaW50ZXJuYWxfZmluYWxpemUoc2VsZiwgcGFyZW50ID0gRmFsc2UpOgorICAgICAgICAiIiJQZXJmb3JtcyBmaW5hbCBzdGVwcyB1cG9uIHRoZSBkYXRhc3RvcmUsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBvZiBvdmVycmlkZXMiIiIKKyAgICAgICAgc2VsZi5vdmVycmlkZXMgPSBOb25lCisKKyAgICBkZWYgbmVlZF9vdmVycmlkZXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3ZlcnJpZGVzIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLmlub3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBUcnVlCisgICAgICAgICAgICAjIENhbiBlbmQgdXAgaGVyZSByZWN1cnNpdmVseSBzbyBzZXR1cCBkdW1teSB2YWx1ZXMKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gW10KKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzc2V0ID0gc2V0KCkKKyAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVzID0gKHNlbGYuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKSBvciAiIikuc3BsaXQoIjoiKSBvciBbXQorICAgICAgICAgICAgc2VsZi5vdmVycmlkZXNzZXQgPSBzZXQoc2VsZi5vdmVycmlkZXMpCisgICAgICAgICAgICBzZWxmLmlub3ZlcnJpZGUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorCisgICAgZGVmIGluaXRWYXIoc2VsZiwgdmFyKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuZGljdFt2YXJdID0ge30KKworICAgIGRlZiBfZmluZFZhcihzZWxmLCB2YXIpOgorICAgICAgICBkZXN0ID0gc2VsZi5kaWN0CisgICAgICAgIHdoaWxlIGRlc3Q6CisgICAgICAgICAgICBpZiB2YXIgaW4gZGVzdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzdFt2YXJdCisKKyAgICAgICAgICAgIGlmICJfZGF0YSIgbm90IGluIGRlc3Q6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRlc3QgPSBkZXN0WyJfZGF0YSJdCisKKyAgICBkZWYgX21ha2VTaGFkb3dDb3B5KHNlbGYsIHZhcik6CisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsb2NhbF92YXIgPSBzZWxmLl9maW5kVmFyKHZhcikKKworICAgICAgICBpZiBsb2NhbF92YXI6CisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSA9IGNvcHkuY29weShsb2NhbF92YXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmluaXRWYXIodmFyKQorCisKKyAgICBkZWYgc2V0VmFyKHNlbGYsIHZhciwgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgICNwcmludCgidmFyPSIgKyBzdHIodmFyKSArICIgIHZhbD0iICsgc3RyKHZhbHVlKSkKKyAgICAgICAgcGFyc2luZz1GYWxzZQorICAgICAgICBpZiAncGFyc2luZycgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIHBhcnNpbmc9VHJ1ZQorCisgICAgICAgIGlmICdvcCcgbm90IGluIGxvZ2luZm86CisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gInNldCIKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBtYXRjaCAgPSBfX3NldHZhcl9yZWdleHBfXy5tYXRjaCh2YXIpCisgICAgICAgIGlmIG1hdGNoIGFuZCBtYXRjaC5ncm91cCgia2V5d29yZCIpIGluIF9fc2V0dmFyX2tleXdvcmRfXzoKKyAgICAgICAgICAgIGJhc2UgPSBtYXRjaC5ncm91cCgnYmFzZScpCisgICAgICAgICAgICBrZXl3b3JkID0gbWF0Y2guZ3JvdXAoImtleXdvcmQiKQorICAgICAgICAgICAgb3ZlcnJpZGUgPSBtYXRjaC5ncm91cCgnYWRkJykKKyAgICAgICAgICAgIGwgPSBzZWxmLmdldFZhckZsYWcoYmFzZSwga2V5d29yZCkgb3IgW10KKyAgICAgICAgICAgIGwuYXBwZW5kKFt2YWx1ZSwgb3ZlcnJpZGVdKQorICAgICAgICAgICAgc2VsZi5zZXRWYXJGbGFnKGJhc2UsIGtleXdvcmQsIGwsIGlnbm9yZT1UcnVlKQorICAgICAgICAgICAgIyBBbmQgY2F1c2UgdGhhdCB0byBiZSByZWNvcmRlZDoKKyAgICAgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gdmFsdWUKKyAgICAgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSBiYXNlCisgICAgICAgICAgICBpZiBvdmVycmlkZToKKyAgICAgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJyVzWyVzXScgJSAoa2V5d29yZCwgb3ZlcnJpZGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSBrZXl3b3JkCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgICAgICMgdG9kbyBtYWtlIHN1cmUga2V5d29yZCBpcyBub3QgX19kb2NfXyBvciBfX21vZHVsZV9fCisgICAgICAgICAgICAjIHBheSB0aGUgY29va2llIG1vbnN0ZXIKKworICAgICAgICAgICAgIyBtb3JlIGNvb2tpZXMgZm9yIHRoZSBjb29raWUgbW9uc3RlcgorICAgICAgICAgICAgaWYgJ18nIGluIHZhcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyhiYXNlLCAqKmxvZ2luZm8pCisKKworICAgICAgICAgICAgaWYgYmFzZSBpbiBzZWxmLm92ZXJyaWRldmFyczoKKyAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRldmFycy51cGRhdGUoc2VsZi5leHBhbmRXaXRoUmVmcyh2YWx1ZSwgdmFyKS5yZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfZmluYWxpemUoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIG5vdCBwYXJzaW5nOgorICAgICAgICAgICAgaWYgIl9hcHBlbmQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRpY3RbdmFyXVsiX2FwcGVuZCJdCisgICAgICAgICAgICBpZiAiX3ByZXBlbmQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRpY3RbdmFyXVsiX3ByZXBlbmQiXQorICAgICAgICAgICAgaWYgdmFyIGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgICAgIGFjdGl2ZSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdOgorICAgICAgICAgICAgICAgICAgICBpZiBvIGluIHNlbGYub3ZlcnJpZGVzc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLmFwcGVuZChyKQorICAgICAgICAgICAgICAgICAgICBlbGlmICJfIiBpbiBvOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2V0KG8uc3BsaXQoIl8iKSkuaXNzdWJzZXQoc2VsZi5vdmVycmlkZXNzZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS5hcHBlbmQocikKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiBhY3RpdmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsVmFyKGEpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl0KKworICAgICAgICAjIG1vcmUgY29va2llcyBmb3IgdGhlIGNvb2tpZSBtb25zdGVyCisgICAgICAgIGlmICdfJyBpbiB2YXI6CisgICAgICAgICAgICBzZWxmLl9zZXR2YXJfdXBkYXRlX292ZXJyaWRlcyh2YXIsICoqbG9naW5mbykKKworICAgICAgICAjIHNldHRpbmcgdmFyCisgICAgICAgIHNlbGYuZGljdFt2YXJdWyJfY29udGVudCJdID0gdmFsdWUKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisKKyAgICAgICAgaWYgdmFyIGluIHNlbGYub3ZlcnJpZGV2YXJzOgorICAgICAgICAgICAgc2VsZi5vdmVycmlkZXZhcnMudXBkYXRlKHNlbGYuZXhwYW5kV2l0aFJlZnModmFsdWUsIHZhcikucmVmZXJlbmNlcykKKyAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfZmluYWxpemUoVHJ1ZSkKKworICAgIGRlZiBfc2V0dmFyX3VwZGF0ZV9vdmVycmlkZXMoc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICAjIGFrYSBwYXkgdGhlIGNvb2tpZSBtb25zdGVyCisgICAgICAgIG92ZXJyaWRlID0gdmFyW3Zhci5yZmluZCgnXycpKzE6XQorICAgICAgICBzaG9ydHZhciA9IHZhcls6dmFyLnJmaW5kKCdfJyldCisgICAgICAgIHdoaWxlIG92ZXJyaWRlOgorICAgICAgICAgICAgaWYgc2hvcnR2YXIgbm90IGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSA9IFtdCisgICAgICAgICAgICBpZiBbdmFyLCBvdmVycmlkZV0gbm90IGluIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXToKKyAgICAgICAgICAgICAgICAjIEZvcmNlIENvVyBieSByZWNyZWF0aW5nIHRoZSBsaXN0IGZpcnN0CisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdID0gbGlzdChzZWxmLm92ZXJyaWRlZGF0YVtzaG9ydHZhcl0pCisgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdLmFwcGVuZChbdmFyLCBvdmVycmlkZV0pCisgICAgICAgICAgICBvdmVycmlkZSA9IE5vbmUKKyAgICAgICAgICAgIGlmICJfIiBpbiBzaG9ydHZhcjoKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9IHZhcltzaG9ydHZhci5yZmluZCgnXycpKzE6XQorICAgICAgICAgICAgICAgIHNob3J0dmFyID0gdmFyWzpzaG9ydHZhci5yZmluZCgnXycpXQorICAgICAgICAgICAgICAgIGlmIGxlbihzaG9ydHZhcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSBOb25lCisKKyAgICBkZWYgZ2V0VmFyKHNlbGYsIHZhciwgZXhwYW5kPUZhbHNlLCBub3dlYWtkZWZhdWx0PUZhbHNlLCBwYXJzaW5nPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0VmFyRmxhZyh2YXIsICJfY29udGVudCIsIGV4cGFuZCwgbm93ZWFrZGVmYXVsdCwgcGFyc2luZykKKworICAgIGRlZiByZW5hbWVWYXIoc2VsZiwga2V5LCBuZXdrZXksICoqbG9naW5mbyk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhlIHZhcmlhYmxlIGtleSB0byBuZXdrZXkKKyAgICAgICAgIiIiCisgICAgICAgIHZhbCA9IHNlbGYuZ2V0VmFyKGtleSwgMCwgcGFyc2luZz1UcnVlKQorICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2dpbmZvWyd2YXJpYWJsZSddID0gbmV3a2V5CisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ3JlbmFtZSBmcm9tICVzJyAlIGtleQorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSB2YWwKKyAgICAgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICAgICAgc2VsZi5zZXRWYXIobmV3a2V5LCB2YWwsIGlnbm9yZT1UcnVlLCBwYXJzaW5nPVRydWUpCisKKyAgICAgICAgZm9yIGkgaW4gKF9fc2V0dmFyX2tleXdvcmRfXyk6CisgICAgICAgICAgICBzcmMgPSBzZWxmLmdldFZhckZsYWcoa2V5LCBpKQorICAgICAgICAgICAgaWYgc3JjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVzdCA9IHNlbGYuZ2V0VmFyRmxhZyhuZXdrZXksIGkpIG9yIFtdCisgICAgICAgICAgICBkZXN0LmV4dGVuZChzcmMpCisgICAgICAgICAgICBzZWxmLnNldFZhckZsYWcobmV3a2V5LCBpLCBkZXN0LCBpZ25vcmU9VHJ1ZSkKKworICAgICAgICBpZiBrZXkgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtuZXdrZXldID0gW10KKyAgICAgICAgICAgIGZvciAodiwgbykgaW4gc2VsZi5vdmVycmlkZWRhdGFba2V5XToKKyAgICAgICAgICAgICAgICBzZWxmLm92ZXJyaWRlZGF0YVtuZXdrZXldLmFwcGVuZChbdi5yZXBsYWNlKGtleSwgbmV3a2V5KSwgb10pCisgICAgICAgICAgICAgICAgc2VsZi5yZW5hbWVWYXIodiwgdi5yZXBsYWNlKGtleSwgbmV3a2V5KSkKKworICAgICAgICBpZiAnXycgaW4gbmV3a2V5IGFuZCB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NldHZhcl91cGRhdGVfb3ZlcnJpZGVzKG5ld2tleSwgKipsb2dpbmZvKQorCisgICAgICAgIGxvZ2luZm9bJ3ZhcmlhYmxlJ10gPSBrZXkKKyAgICAgICAgbG9naW5mb1snb3AnXSA9ICdyZW5hbWUgKHRvKScKKyAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSBuZXdrZXkKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIHNlbGYuZGVsVmFyKGtleSwgaWdub3JlPVRydWUpCisKKyAgICBkZWYgYXBwZW5kVmFyKHNlbGYsIHZhciwgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAnYXBwZW5kJworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgc2VsZi5zZXRWYXIodmFyICsgIl9hcHBlbmQiLCB2YWx1ZSwgaWdub3JlPVRydWUsIHBhcnNpbmc9VHJ1ZSkKKworICAgIGRlZiBwcmVwZW5kVmFyKHNlbGYsIHZhciwgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAncHJlcGVuZCcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIHNlbGYuc2V0VmFyKHZhciArICJfcHJlcGVuZCIsIHZhbHVlLCBpZ25vcmU9VHJ1ZSwgcGFyc2luZz1UcnVlKQorCisgICAgZGVmIGRlbFZhcihzZWxmLCB2YXIsICoqbG9naW5mbyk6CisgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gIiIKKyAgICAgICAgbG9naW5mb1snb3AnXSA9ICdkZWwnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuZGljdFt2YXJdID0ge30KKyAgICAgICAgaWYgdmFyIGluIHNlbGYub3ZlcnJpZGVkYXRhOgorICAgICAgICAgICAgZGVsIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl0KKyAgICAgICAgaWYgJ18nIGluIHZhcjoKKyAgICAgICAgICAgIG92ZXJyaWRlID0gdmFyW3Zhci5yZmluZCgnXycpKzE6XQorICAgICAgICAgICAgc2hvcnR2YXIgPSB2YXJbOnZhci5yZmluZCgnXycpXQorICAgICAgICAgICAgd2hpbGUgb3ZlcnJpZGU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBzaG9ydHZhciBpbiBzZWxmLm92ZXJyaWRlZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRm9yY2UgQ29XIGJ5IHJlY3JlYXRpbmcgdGhlIGxpc3QgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3ZlcnJpZGVkYXRhW3Nob3J0dmFyXSA9IGxpc3Qoc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdmVycmlkZWRhdGFbc2hvcnR2YXJdLnJlbW92ZShbdmFyLCBvdmVycmlkZV0pCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gTm9uZQorICAgICAgICAgICAgICAgIGlmICJfIiBpbiBzaG9ydHZhcjoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSB2YXJbc2hvcnR2YXIucmZpbmQoJ18nKSsxOl0KKyAgICAgICAgICAgICAgICAgICAgc2hvcnR2YXIgPSB2YXJbOnNob3J0dmFyLnJmaW5kKCdfJyldCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzaG9ydHZhcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSA9IE5vbmUKKworICAgIGRlZiBzZXRWYXJGbGFnKHNlbGYsIHZhciwgZmxhZywgdmFsdWUsICoqbG9naW5mbyk6CisgICAgICAgIHNlbGYuZXhwYW5kX2NhY2hlID0ge30KKyAgICAgICAgaWYgJ29wJyBub3QgaW4gbG9naW5mbzoKKyAgICAgICAgICAgIGxvZ2luZm9bJ29wJ10gPSAic2V0IgorICAgICAgICBsb2dpbmZvWydmbGFnJ10gPSBmbGFnCisgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKyAgICAgICAgc2VsZi5kaWN0W3Zhcl1bZmxhZ10gPSB2YWx1ZQorCisgICAgICAgIGlmIGZsYWcgPT0gIl9kZWZhdWx0dmFsIiBhbmQgJ18nIGluIHZhcjoKKyAgICAgICAgICAgIHNlbGYuX3NldHZhcl91cGRhdGVfb3ZlcnJpZGVzKHZhciwgKipsb2dpbmZvKQorCisgICAgICAgIGlmIGZsYWcgPT0gInVuZXhwb3J0IiBvciBmbGFnID09ICJleHBvcnQiOgorICAgICAgICAgICAgaWYgbm90ICJfX2V4cG9ydGxpc3QiIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlU2hhZG93Q29weSgiX19leHBvcnRsaXN0IikKKyAgICAgICAgICAgIGlmIG5vdCAiX2NvbnRlbnQiIGluIHNlbGYuZGljdFsiX19leHBvcnRsaXN0Il06CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0WyJfX2V4cG9ydGxpc3QiXVsiX2NvbnRlbnQiXSA9IHNldCgpCisgICAgICAgICAgICBzZWxmLmRpY3RbIl9fZXhwb3J0bGlzdCJdWyJfY29udGVudCJdLmFkZCh2YXIpCisKKyAgICBkZWYgZ2V0VmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIGV4cGFuZD1GYWxzZSwgbm93ZWFrZGVmYXVsdD1GYWxzZSwgcGFyc2luZz1GYWxzZSk6CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAgaWYgZmxhZyA9PSAiX2NvbnRlbnQiIGFuZCB2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGEgYW5kIG5vdCBwYXJzaW5nOgorICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgYWN0aXZlID0ge30KKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBzZWxmLm92ZXJyaWRlZGF0YVt2YXJdOgorICAgICAgICAgICAgICAgICMgV2hhdCBhYm91dCBkb3VibGUgb3ZlcnJpZGVzIGJvdGggd2l0aCAiXyIgaW4gdGhlIG5hbWU/CisgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlW29dID0gcgorICAgICAgICAgICAgICAgIGVsaWYgIl8iIGluIG86CisgICAgICAgICAgICAgICAgICAgIGlmIHNldChvLnNwbGl0KCJfIikpLmlzc3Vic2V0KHNlbGYub3ZlcnJpZGVzc2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVtvXSA9IHIKKworICAgICAgICAgICAgbW9kID0gVHJ1ZQorICAgICAgICAgICAgd2hpbGUgbW9kOgorICAgICAgICAgICAgICAgIG1vZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIG8gaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIGFjdGl2ZS5jb3B5KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhLmVuZHN3aXRoKCJfIiArIG8pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBhY3RpdmVbYV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlW2EucmVwbGFjZSgiXyIgKyBvLCAiIildID0gdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgYSA9PSBvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gYWN0aXZlW2FdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGFjdGl2ZVthXQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmdldFZhcihtYXRjaCkKKworICAgICAgICBpZiBsb2NhbF92YXIgaXMgbm90IE5vbmUgYW5kIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBmbGFnIGluIGxvY2FsX3ZhcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvcHkuY29weShsb2NhbF92YXJbZmxhZ10pCisgICAgICAgICAgICBlbGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgIl9kZWZhdWx0dmFsIiBpbiBsb2NhbF92YXIgYW5kIG5vdCBub3dlYWtkZWZhdWx0OgorICAgICAgICAgICAgICAgIHZhbHVlID0gY29weS5jb3B5KGxvY2FsX3ZhclsiX2RlZmF1bHR2YWwiXSkKKworCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX2FwcGVuZCIgaW4gbG9jYWxfdmFyIGFuZCBub3QgcGFyc2luZzoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiCisgICAgICAgICAgICBzZWxmLm5lZWRfb3ZlcnJpZGVzKCkKKyAgICAgICAgICAgIGZvciAociwgbykgaW4gbG9jYWxfdmFyWyJfYXBwZW5kIl06CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG8yIGluIG8uc3BsaXQoIl8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvMiBpbiBzZWxmLm92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgcgorCisgICAgICAgIGlmIGZsYWcgPT0gIl9jb250ZW50IiBhbmQgbG9jYWxfdmFyIGlzIG5vdCBOb25lIGFuZCAiX3ByZXBlbmQiIGluIGxvY2FsX3ZhciBhbmQgbm90IHBhcnNpbmc6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIGxvY2FsX3ZhclsiX3ByZXBlbmQiXToKKworICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG86CisgICAgICAgICAgICAgICAgICAgIGZvciBvMiBpbiBvLnNwbGl0KCJfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbzIgaW4gc2VsZi5vdmVycmlkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBGYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByICsgdmFsdWUKKworICAgICAgICBpZiBleHBhbmQgYW5kIHZhbHVlOgorICAgICAgICAgICAgIyBPbmx5IGdldHZhciAoZmxhZyA9PSBfY29udGVudCkgaGl0cyB0aGUgZXhwYW5kIGNhY2hlCisgICAgICAgICAgICBjYWNoZW5hbWUgPSBOb25lCisgICAgICAgICAgICBpZiBmbGFnID09ICJfY29udGVudCI6CisgICAgICAgICAgICAgICAgY2FjaGVuYW1lID0gdmFyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNhY2hlbmFtZSA9IHZhciArICJbIiArIGZsYWcgKyAiXSIKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leHBhbmQodmFsdWUsIGNhY2hlbmFtZSkKKworICAgICAgICBpZiB2YWx1ZSBhbmQgZmxhZyA9PSAiX2NvbnRlbnQiIGFuZCBsb2NhbF92YXIgaXMgbm90IE5vbmUgYW5kICJfcmVtb3ZlIiBpbiBsb2NhbF92YXI6CisgICAgICAgICAgICByZW1vdmVzID0gW10KKyAgICAgICAgICAgIHNlbGYubmVlZF9vdmVycmlkZXMoKQorICAgICAgICAgICAgZm9yIChyLCBvKSBpbiBsb2NhbF92YXJbIl9yZW1vdmUiXToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBvOgorICAgICAgICAgICAgICAgICAgICBmb3IgbzIgaW4gby5zcGxpdCgiXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG8yIGluIHNlbGYub3ZlcnJpZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXMuZXh0ZW5kKHNlbGYuZXhwYW5kKHIpLnNwbGl0KCkpCisKKyAgICAgICAgICAgIGZpbHRlcmVkID0gZmlsdGVyKGxhbWJkYSB2OiB2IG5vdCBpbiByZW1vdmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc3BsaXQoKSkKKyAgICAgICAgICAgIHZhbHVlID0gIiAiLmpvaW4oZmlsdGVyZWQpCisgICAgICAgICAgICBpZiBleHBhbmQgYW5kIHZhciBpbiBzZWxmLmV4cGFuZF9jYWNoZToKKyAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgZXhwYW5kIGNhY2hlIGhhcyB0aGUgY29ycmVjdCB2YWx1ZQorICAgICAgICAgICAgICAgICAjIGZsYWcgPT0gIl9jb250ZW50IiBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5leHBhbmRfY2FjaGVbdmFyXS52YWx1ZSA9IHZhbHVlCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGRlbFZhckZsYWcoc2VsZiwgdmFyLCBmbGFnLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICBpZiBub3QgbG9jYWxfdmFyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3QgYW5kIGZsYWcgaW4gc2VsZi5kaWN0W3Zhcl06CisgICAgICAgICAgICBsb2dpbmZvWydkZXRhaWwnXSA9ICIiCisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ2RlbEZsYWcnCisgICAgICAgICAgICBsb2dpbmZvWydmbGFnJ10gPSBmbGFnCisgICAgICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKworICAgICAgICAgICAgZGVsIHNlbGYuZGljdFt2YXJdW2ZsYWddCisKKyAgICBkZWYgYXBwZW5kVmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ2FwcGVuZCcKKyAgICAgICAgbG9naW5mb1snZmxhZyddID0gZmxhZworICAgICAgICBzZWxmLnZhcmhpc3RvcnkucmVjb3JkKCoqbG9naW5mbykKKyAgICAgICAgbmV3dmFsdWUgPSAoc2VsZi5nZXRWYXJGbGFnKHZhciwgZmxhZywgRmFsc2UpIG9yICIiKSArIHZhbHVlCisgICAgICAgIHNlbGYuc2V0VmFyRmxhZyh2YXIsIGZsYWcsIG5ld3ZhbHVlLCBpZ25vcmU9VHJ1ZSkKKworICAgIGRlZiBwcmVwZW5kVmFyRmxhZyhzZWxmLCB2YXIsIGZsYWcsIHZhbHVlLCAqKmxvZ2luZm8pOgorICAgICAgICBsb2dpbmZvWydvcCddID0gJ3ByZXBlbmQnCisgICAgICAgIGxvZ2luZm9bJ2ZsYWcnXSA9IGZsYWcKKyAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgIG5ld3ZhbHVlID0gdmFsdWUgKyAoc2VsZi5nZXRWYXJGbGFnKHZhciwgZmxhZywgRmFsc2UpIG9yICIiKQorICAgICAgICBzZWxmLnNldFZhckZsYWcodmFyLCBmbGFnLCBuZXd2YWx1ZSwgaWdub3JlPVRydWUpCisKKyAgICBkZWYgc2V0VmFyRmxhZ3Moc2VsZiwgdmFyLCBmbGFncywgKipsb2dpbmZvKToKKyAgICAgICAgc2VsZi5leHBhbmRfY2FjaGUgPSB7fQorICAgICAgICBpbmZlcl9jYWxsZXJfZGV0YWlscyhsb2dpbmZvKQorICAgICAgICBpZiBub3QgdmFyIGluIHNlbGYuZGljdDoKKyAgICAgICAgICAgIHNlbGYuX21ha2VTaGFkb3dDb3B5KHZhcikKKworICAgICAgICBmb3IgaSBpbiBmbGFnczoKKyAgICAgICAgICAgIGlmIGkgPT0gIl9jb250ZW50IjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbG9naW5mb1snZmxhZyddID0gaQorICAgICAgICAgICAgbG9naW5mb1snZGV0YWlsJ10gPSBmbGFnc1tpXQorICAgICAgICAgICAgc2VsZi52YXJoaXN0b3J5LnJlY29yZCgqKmxvZ2luZm8pCisgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXVtpXSA9IGZsYWdzW2ldCisKKyAgICBkZWYgZ2V0VmFyRmxhZ3Moc2VsZiwgdmFyLCBleHBhbmQgPSBGYWxzZSwgaW50ZXJuYWxmbGFncz1GYWxzZSk6CisgICAgICAgIGxvY2FsX3ZhciA9IHNlbGYuX2ZpbmRWYXIodmFyKQorICAgICAgICBmbGFncyA9IHt9CisKKyAgICAgICAgaWYgbG9jYWxfdmFyOgorICAgICAgICAgICAgZm9yIGkgaW4gbG9jYWxfdmFyOgorICAgICAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiXyIpIGFuZCBub3QgaW50ZXJuYWxmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmbGFnc1tpXSA9IGxvY2FsX3ZhcltpXQorICAgICAgICAgICAgICAgIGlmIGV4cGFuZCBhbmQgaSBpbiBleHBhbmQ6CisgICAgICAgICAgICAgICAgICAgIGZsYWdzW2ldID0gc2VsZi5leHBhbmQoZmxhZ3NbaV0sIHZhciArICJbIiArIGkgKyAiXSIpCisgICAgICAgIGlmIGxlbihmbGFncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBmbGFncworCisKKyAgICBkZWYgZGVsVmFyRmxhZ3Moc2VsZiwgdmFyLCAqKmxvZ2luZm8pOgorICAgICAgICBzZWxmLmV4cGFuZF9jYWNoZSA9IHt9CisgICAgICAgIGlmIG5vdCB2YXIgaW4gc2VsZi5kaWN0OgorICAgICAgICAgICAgc2VsZi5fbWFrZVNoYWRvd0NvcHkodmFyKQorCisgICAgICAgIGlmIHZhciBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBjb250ZW50ID0gTm9uZQorCisgICAgICAgICAgICBsb2dpbmZvWydvcCddID0gJ2RlbGV0ZSBmbGFncycKKyAgICAgICAgICAgIHNlbGYudmFyaGlzdG9yeS5yZWNvcmQoKipsb2dpbmZvKQorCisgICAgICAgICAgICAjIHRyeSB0byBzYXZlIHRoZSBjb250ZW50CisgICAgICAgICAgICBpZiAiX2NvbnRlbnQiIGluIHNlbGYuZGljdFt2YXJdOgorICAgICAgICAgICAgICAgIGNvbnRlbnQgID0gc2VsZi5kaWN0W3Zhcl1bIl9jb250ZW50Il0KKyAgICAgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXSAgICAgICAgICAgID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLmRpY3RbdmFyXVsiX2NvbnRlbnQiXSA9IGNvbnRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuZGljdFt2YXJdCisKKyAgICBkZWYgY3JlYXRlQ29weShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIGNvcHkgb2Ygc2VsZiBieSBzZXR0aW5nIF9kYXRhIHRvIHNlbGYKKyAgICAgICAgIiIiCisgICAgICAgICMgd2UgcmVhbGx5IHdhbnQgdGhpcyB0byBiZSBhIERhdGFTbWFydC4uLgorICAgICAgICBkYXRhID0gRGF0YVNtYXJ0KCkKKyAgICAgICAgZGF0YS5kaWN0WyJfZGF0YSJdID0gc2VsZi5kaWN0CisgICAgICAgIGRhdGEudmFyaGlzdG9yeSA9IHNlbGYudmFyaGlzdG9yeS5jb3B5KCkKKyAgICAgICAgZGF0YS52YXJoaXN0b3J5LmRhdGFzbWFydCA9IGRhdGEKKyAgICAgICAgZGF0YS5pbmNoaXN0b3J5ID0gc2VsZi5pbmNoaXN0b3J5LmNvcHkoKQorCisgICAgICAgIGRhdGEuX3RyYWNraW5nID0gc2VsZi5fdHJhY2tpbmcKKworICAgICAgICBkYXRhLm92ZXJyaWRlcyA9IE5vbmUKKyAgICAgICAgZGF0YS5vdmVycmlkZXZhcnMgPSBjb3B5LmNvcHkoc2VsZi5vdmVycmlkZXZhcnMpCisgICAgICAgICMgU2hvdWxkIHJlYWxseSBiZSBhIGRlZXBjb3B5IGJ1dCBoYXMgaGVhdnkgb3ZlcmhlYWQuCisgICAgICAgICMgSW5zdGVhZCwgd2UncmUgY2FyZWZ1bCB3aXRoIHdyaXRlcy4KKyAgICAgICAgZGF0YS5vdmVycmlkZWRhdGEgPSBjb3B5LmNvcHkoc2VsZi5vdmVycmlkZWRhdGEpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBleHBhbmRWYXJyZWYoc2VsZiwgdmFyaWFibGUsIHBhcmVudHM9RmFsc2UpOgorICAgICAgICAiIiJGaW5kIGFsbCByZWZlcmVuY2VzIHRvIHZhcmlhYmxlIGluIHRoZSBkYXRhIGFuZCBleHBhbmQgaXQKKyAgICAgICAgICAgaW4gcGxhY2UsIG9wdGlvbmFsbHkgZGVzY2VuZGluZyB0byBwYXJlbnQgZGF0YXN0b3Jlcy4iIiIKKworICAgICAgICBpZiBwYXJlbnRzOgorICAgICAgICAgICAga2V5cyA9IGl0ZXIoc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleXMgPSBzZWxmLmxvY2Fsa2V5cygpCisKKyAgICAgICAgcmVmID0gJyR7JXN9JyAlIHZhcmlhYmxlCisgICAgICAgIHZhbHVlID0gc2VsZi5nZXRWYXIodmFyaWFibGUsIEZhbHNlKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICByZWZlcnJlcnZhbHVlID0gc2VsZi5nZXRWYXIoa2V5LCBGYWxzZSkKKyAgICAgICAgICAgIGlmIHJlZmVycmVydmFsdWUgYW5kIHJlZiBpbiByZWZlcnJlcnZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0VmFyKGtleSwgcmVmZXJyZXJ2YWx1ZS5yZXBsYWNlKHJlZiwgdmFsdWUpKQorCisgICAgZGVmIGxvY2Fsa2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICBpZiBrZXkgIT0gJ19kYXRhJzoKKyAgICAgICAgICAgICAgICB5aWVsZCBrZXkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZGVsZXRlZCA9IHNldCgpCisgICAgICAgIG92ZXJyaWRlcyA9IHNldCgpCisgICAgICAgIGRlZiBrZXlsaXN0KGQpOiAgICAgICAgCisgICAgICAgICAgICBrbGlzdCA9IHNldCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGQ6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJfZGF0YSI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIGRlbGV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIG92ZXJyaWRlczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgZFtrZXldOgorICAgICAgICAgICAgICAgICAgICBkZWxldGVkLmFkZChrZXkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAga2xpc3QuYWRkKGtleSkKKworICAgICAgICAgICAgaWYgIl9kYXRhIiBpbiBkOgorICAgICAgICAgICAgICAgIGtsaXN0IHw9IGtleWxpc3QoZFsiX2RhdGEiXSkKKworICAgICAgICAgICAgcmV0dXJuIGtsaXN0CisKKyAgICAgICAgc2VsZi5uZWVkX292ZXJyaWRlcygpCisgICAgICAgIGZvciB2YXIgaW4gc2VsZi5vdmVycmlkZWRhdGE6CisgICAgICAgICAgICBmb3IgKHIsIG8pIGluIHNlbGYub3ZlcnJpZGVkYXRhW3Zhcl06CisgICAgICAgICAgICAgICAgaWYgbyBpbiBzZWxmLm92ZXJyaWRlc3NldDoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLmFkZCh2YXIpCisgICAgICAgICAgICAgICAgZWxpZiAiXyIgaW4gbzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2V0KG8uc3BsaXQoIl8iKSkuaXNzdWJzZXQoc2VsZi5vdmVycmlkZXNzZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLmFkZCh2YXIpCisKKyAgICAgICAgZm9yIGsgaW4ga2V5bGlzdChzZWxmLmRpY3QpOgorICAgICAgICAgICAgIHlpZWxkIGsKKworICAgICAgICBmb3IgayBpbiBvdmVycmlkZXM6CisgICAgICAgICAgICAgeWllbGQgaworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oZnJvemVuc2V0KHNlbGYpKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgorICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0VmFyKGl0ZW0sIEZhbHNlKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIHZhciwgdmFsdWUpOgorICAgICAgICBzZWxmLnNldFZhcih2YXIsIHZhbHVlKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuZGVsVmFyKHZhcikKKworICAgIGRlZiBnZXRfaGFzaChzZWxmKToKKyAgICAgICAgZGF0YSA9IHt9CisgICAgICAgIGQgPSBzZWxmLmNyZWF0ZUNvcHkoKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoZCkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorCisgICAgICAgIGNvbmZpZ193aGl0ZWxpc3QgPSBzZXQoKGQuZ2V0VmFyKCJCQl9IQVNIQ09ORklHX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICBrZXlzID0gc2V0KGtleSBmb3Iga2V5IGluIGl0ZXIoZCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfXyIpKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBpZiBrZXkgaW4gY29uZmlnX3doaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpIG9yICIiCisgICAgICAgICAgICBkYXRhLnVwZGF0ZSh7a2V5OnZhbHVlfSkKKworICAgICAgICAgICAgdmFyZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSwgaW50ZXJuYWxmbGFncyA9IFRydWUpCisgICAgICAgICAgICBpZiBub3QgdmFyZmxhZ3M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBmIGluIHZhcmZsYWdzOgorICAgICAgICAgICAgICAgIGlmIGYgPT0gIl9jb250ZW50IjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkYXRhLnVwZGF0ZSh7JyVzWyVzXScgJSAoa2V5LCBmKTp2YXJmbGFnc1tmXX0pCisKKyAgICAgICAgZm9yIGtleSBpbiBbIl9fQkJUQVNLUyIsICJfX0JCQU5PTkZVTkNTIiwgIl9fQkJIQU5ETEVSUyJdOgorICAgICAgICAgICAgYmJfbGlzdCA9IGQuZ2V0VmFyKGtleSwgRmFsc2UpIG9yIFtdCisgICAgICAgICAgICBiYl9saXN0LnNvcnQoKQorICAgICAgICAgICAgZGF0YS51cGRhdGUoe2tleTpzdHIoYmJfbGlzdCl9KQorCisgICAgICAgICAgICBpZiBrZXkgPT0gIl9fQkJBTk9ORlVOQ1MiOgorICAgICAgICAgICAgICAgIGZvciBpIGluIGJiX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoaSwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICAgICAgZGF0YS51cGRhdGUoe2k6dmFsdWV9KQorCisgICAgICAgIGRhdGFfc3RyID0gc3RyKFsoaywgZGF0YVtrXSkgZm9yIGsgaW4gc29ydGVkKGRhdGEua2V5cygpKV0pCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhX3N0cikuaGV4ZGlnZXN0KCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2V2ZW50LnB5IGIvYml0YmFrZS9saWIvYmIvZXZlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2YmM0MQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2V2ZW50LnB5CkBAIC0wLDAgKzEsNjY4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdFdmVudCcgaW1wbGVtZW50YXRpb24KKworQ2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgJ2V2ZW50cycgaW4gdGhlCitCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgd2FybmluZ3MKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGF0ZXhpdAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgYmIuY29tcGF0CitpbXBvcnQgYmIuZXhjZXB0aW9ucworCisjIFRoaXMgaXMgdGhlIHBpZCBmb3Igd2hpY2ggd2Ugc2hvdWxkIGdlbmVyYXRlIHRoZSBldmVudC4gVGhpcyBpcyBzZXQgd2hlbgorIyB0aGUgcnVucXVldWUgZm9ya3Mgb2ZmLgord29ya2VyX3BpZCA9IDAKK3dvcmtlcl9maXJlID0gTm9uZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5FdmVudCcpCisKK2NsYXNzIEV2ZW50KG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgZXZlbnRzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucGlkID0gd29ya2VyX3BpZAorCitSZWdpc3RlcmVkICAgICAgICA9IDEwCitBbHJlYWR5UmVnaXN0ZXJlZCA9IDE0CisKK2RlZiBnZXRfY2xhc3NfaGFuZGxlcnMoKToKKyAgICByZXR1cm4gX2hhbmRsZXJzCisKK2RlZiBzZXRfY2xhc3NfaGFuZGxlcnMoaCk6CisgICAgZ2xvYmFsIF9oYW5kbGVycworICAgIF9oYW5kbGVycyA9IGgKKworZGVmIGNsZWFuX2NsYXNzX2hhbmRsZXJzKCk6CisgICAgcmV0dXJuIGJiLmNvbXBhdC5PcmRlcmVkRGljdCgpCisKKyMgSW50ZXJuYWwKK19oYW5kbGVycyA9IGNsZWFuX2NsYXNzX2hhbmRsZXJzKCkKK191aV9oYW5kbGVycyA9IHt9CitfdWlfbG9nZmlsdGVycyA9IHt9CitfdWlfaGFuZGxlcl9zZXEgPSAwCitfZXZlbnRfaGFuZGxlcl9tYXAgPSB7fQorX2NhdGNoYWxsX2hhbmRsZXJzID0ge30KK19ldmVudGZpbHRlciA9IE5vbmUKK191aXJlYWR5ID0gRmFsc2UKKworZGVmIGV4ZWN1dGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCk6CisgICAgZXZlbnQuZGF0YSA9IGQKKyAgICBhZGRlZGQgPSBGYWxzZQorICAgIGlmICdkJyBub3QgaW4gX19idWlsdGluc19fOgorICAgICAgICBfX2J1aWx0aW5zX19bJ2QnXSA9IGQKKyAgICAgICAgYWRkZWRkID0gVHJ1ZQorICAgIHRyeToKKyAgICAgICAgcmV0ID0gaGFuZGxlcihldmVudCkKKyAgICBleGNlcHQgKGJiLnBhcnNlLlNraXBSZWNpcGUsIGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mIGV2ZW50IGhhbmRsZXIgJyVzJyBmYWlsZWQiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShldHlwZSwgdmFsdWUsIHRiLnRiX25leHQpKQorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmNvZGUgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRXhlY3V0aW9uIG9mIGV2ZW50IGhhbmRsZXIgJyVzJyBmYWlsZWQiICUgbmFtZSkKKyAgICAgICAgcmFpc2UKKyAgICBmaW5hbGx5OgorICAgICAgICBkZWwgZXZlbnQuZGF0YQorICAgICAgICBpZiBhZGRlZGQ6CisgICAgICAgICAgICBkZWwgX19idWlsdGluc19fWydkJ10KKworZGVmIGZpcmVfY2xhc3NfaGFuZGxlcnMoZXZlbnQsIGQpOgorICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBlaWQgPSBzdHIoZXZlbnQuX19jbGFzc19fKVs4Oi0yXQorICAgIGV2dF9obWFwID0gX2V2ZW50X2hhbmRsZXJfbWFwLmdldChlaWQsIHt9KQorICAgIGZvciBuYW1lLCBoYW5kbGVyIGluIF9oYW5kbGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSBpbiBfY2F0Y2hhbGxfaGFuZGxlcnMgb3IgbmFtZSBpbiBldnRfaG1hcDoKKyAgICAgICAgICAgIGlmIF9ldmVudGZpbHRlcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgX2V2ZW50ZmlsdGVyKG5hbWUsIGhhbmRsZXIsIGV2ZW50LCBkKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4ZWN1dGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyLCBldmVudCwgZCkKKwordWlfcXVldWUgPSBbXQorQGF0ZXhpdC5yZWdpc3RlcgorZGVmIHByaW50X3VpX3F1ZXVlKCk6CisgICAgIiIiSWYgd2UncmUgZXhpdGluZyBiZWZvcmUgYSBVSSBoYXMgYmVlbiBzcGF3bmVkLCBkaXNwbGF5IGFueSBxdWV1ZWQKKyAgICBMb2dSZWNvcmRzIHRvIHRoZSBjb25zb2xlLiIiIgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICBpZiBub3QgX3VpcmVhZHk6CisgICAgICAgIGZyb20gYmIubXNnIGltcG9ydCBCQkxvZ0Zvcm1hdHRlcgorICAgICAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKEJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgICAgICBsb2dnZXIuaGFuZGxlcnMgPSBbY29uc29sZV0KKworICAgICAgICAjIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGFueSBwcm9wZXIgbWVzc2FnZXMKKyAgICAgICAgbXNncHJpbnQgPSBGYWxzZQorICAgICAgICBmb3IgZXZlbnQgaW4gdWlfcXVldWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuREVCVUc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgICAgIG1zZ3ByaW50ID0gVHJ1ZQorICAgICAgICBpZiBtc2dwcmludDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTm9wZSwgc28ganVzdCBwcmludCBhbGwgb2YgdGhlIG1lc3NhZ2VzIHdlIGhhdmUgKGluY2x1ZGluZyBkZWJ1ZyBtZXNzYWdlcykKKyAgICAgICAgZm9yIGV2ZW50IGluIHVpX3F1ZXVlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisKK2RlZiBmaXJlX3VpX2hhbmRsZXJzKGV2ZW50LCBkKToKKyAgICBpZiBub3QgX3VpcmVhZHk6CisgICAgICAgICMgTm8gVUkgaGFuZGxlcnMgcmVnaXN0ZXJlZCB5ZXQsIHF1ZXVlIHVwIHRoZSBtZXNzYWdlcworICAgICAgICB1aV9xdWV1ZS5hcHBlbmQoZXZlbnQpCisgICAgICAgIHJldHVybgorCisgICAgZXJyb3JzID0gW10KKyAgICBmb3IgaCBpbiBfdWlfaGFuZGxlcnM6CisgICAgICAgICNwcmludCAiU2VuZGluZyBldmVudCAlcyIgJSBldmVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICAgaWYgbm90IF91aV9sb2dmaWx0ZXJzW2hdLmZpbHRlcihldmVudCk6CisgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgIyBXZSB1c2UgcGlja2xlIGhlcmUgc2luY2UgaXQgYmV0dGVyIGhhbmRsZXMgb2JqZWN0IGluc3RhbmNlcworICAgICAgICAgICAgICMgd2hpY2ggeG1scnBjJ3MgbWFyc2hhbGxlciBkb2VzIG5vdC4gRXZlbnRzICptdXN0KiBiZSBzZXJpYWxpemFibGUKKyAgICAgICAgICAgICAjIGJ5IHBpY2tsZS4KKyAgICAgICAgICAgICBpZiBoYXNhdHRyKF91aV9oYW5kbGVyc1toXS5ldmVudCwgInNlbmRwaWNrbGUiKToKKyAgICAgICAgICAgICAgICBfdWlfaGFuZGxlcnNbaF0uZXZlbnQuc2VuZHBpY2tsZSgocGlja2xlLmR1bXBzKGV2ZW50KSkpCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdWlfaGFuZGxlcnNbaF0uZXZlbnQuc2VuZChldmVudCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChoKQorICAgIGZvciBoIGluIGVycm9yczoKKyAgICAgICAgZGVsIF91aV9oYW5kbGVyc1toXQorCitkZWYgZmlyZShldmVudCwgZCk6CisgICAgIiIiRmlyZSBvZmYgYW4gRXZlbnQiIiIKKworICAgICMgV2UgY2FuIGZpcmUgY2xhc3MgaGFuZGxlcnMgaW4gdGhlIHdvcmtlciBwcm9jZXNzIGNvbnRleHQgYW5kIHRoaXMgaXMKKyAgICAjIGRlc2lyZWQgc28gdGhleSBnZXQgdGhlIHRhc2sgYmFzZWQgZGF0YXN0b3JlLgorICAgICMgVUkgaGFuZGxlcnMgbmVlZCB0byBiZSBmaXJlZCBpbiB0aGUgc2VydmVyIGNvbnRleHQgc28gd2UgZGVmZXIgdGhpcy4gVGhleQorICAgICMgZG9uJ3QgaGF2ZSBhIGRhdGFzdG9yZSBzbyB0aGUgZGF0YXN0b3JlIGNvbnRleHQgaXNuJ3QgYSBwcm9ibGVtLgorCisgICAgZmlyZV9jbGFzc19oYW5kbGVycyhldmVudCwgZCkKKyAgICBpZiB3b3JrZXJfZmlyZToKKyAgICAgICAgd29ya2VyX2ZpcmUoZXZlbnQsIGQpCisgICAgZWxzZToKKyAgICAgICAgZmlyZV91aV9oYW5kbGVycyhldmVudCwgZCkKKworZGVmIGZpcmVfZnJvbV93b3JrZXIoZXZlbnQsIGQpOgorICAgIGZpcmVfdWlfaGFuZGxlcnMoZXZlbnQsIGQpCisKK25vb3AgPSBsYW1iZGEgXzogTm9uZQorZGVmIHJlZ2lzdGVyKG5hbWUsIGhhbmRsZXIsIG1hc2s9Tm9uZSk6CisgICAgIiIiUmVnaXN0ZXIgYW4gRXZlbnQgaGFuZGxlciIiIgorCisgICAgIyBhbHJlYWR5IHJlZ2lzdGVyZWQKKyAgICBpZiBuYW1lIGluIF9oYW5kbGVyczoKKyAgICAgICAgcmV0dXJuIEFscmVhZHlSZWdpc3RlcmVkCisKKyAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIGhhbmRsZSBzdHJpbmcgY29udGFpbmluZyBweXRob24gY29kZQorICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZXIsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgdG1wID0gImRlZiAlcyhlKTpcbiVzIiAlIChuYW1lLCBoYW5kbGVyKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKHRtcCwgIiVzKGUpIiAlIG5hbWUsICJleGVjIikKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byByZWdpc3RlciBldmVudCBoYW5kbGVyICclcyc6XG4lcyIsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGMobGltaXQ9MCkpKQorICAgICAgICAgICAgICAgIF9oYW5kbGVyc1tuYW1lXSA9IG5vb3AKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVudiA9IHt9CisgICAgICAgICAgICBiYi51dGlscy5iZXR0ZXJfZXhlYyhjb2RlLCBlbnYpCisgICAgICAgICAgICBmdW5jID0gYmIudXRpbHMuYmV0dGVyX2V2YWwobmFtZSwgZW52KQorICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gaGFuZGxlcgorCisgICAgICAgIGlmIG5vdCBtYXNrIG9yICcqJyBpbiBtYXNrOgorICAgICAgICAgICAgX2NhdGNoYWxsX2hhbmRsZXJzW25hbWVdID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIG0gaW4gbWFzazoKKyAgICAgICAgICAgICAgICBpZiBfZXZlbnRfaGFuZGxlcl9tYXAuZ2V0KG0sIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIF9ldmVudF9oYW5kbGVyX21hcFttXSA9IHt9CisgICAgICAgICAgICAgICAgX2V2ZW50X2hhbmRsZXJfbWFwW21dW25hbWVdID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBSZWdpc3RlcmVkCisKK2RlZiByZW1vdmUobmFtZSwgaGFuZGxlcik6CisgICAgIiIiUmVtb3ZlIGFuIEV2ZW50IGhhbmRsZXIiIiIKKyAgICBfaGFuZGxlcnMucG9wKG5hbWUpCisKK2RlZiBzZXRfZXZlbnRmaWx0ZXIoZnVuYyk6CisgICAgZ2xvYmFsIF9ldmVudGZpbHRlcgorICAgIF9ldmVudGZpbHRlciA9IGZ1bmMKKworZGVmIHJlZ2lzdGVyX1VJSGhhbmRsZXIoaGFuZGxlciwgbWFpbnVpPUZhbHNlKToKKyAgICBpZiBtYWludWk6CisgICAgICAgIGdsb2JhbCBfdWlyZWFkeQorICAgICAgICBfdWlyZWFkeSA9IFRydWUKKyAgICBiYi5ldmVudC5fdWlfaGFuZGxlcl9zZXEgPSBiYi5ldmVudC5fdWlfaGFuZGxlcl9zZXEgKyAxCisgICAgX3VpX2hhbmRsZXJzW191aV9oYW5kbGVyX3NlcV0gPSBoYW5kbGVyCisgICAgbGV2ZWwsIGRlYnVnX2RvbWFpbnMgPSBiYi5tc2cuY29uc3RydWN0TG9nT3B0aW9ucygpCisgICAgX3VpX2xvZ2ZpbHRlcnNbX3VpX2hhbmRsZXJfc2VxXSA9IFVJRXZlbnRGaWx0ZXIobGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisgICAgcmV0dXJuIF91aV9oYW5kbGVyX3NlcQorCitkZWYgdW5yZWdpc3Rlcl9VSUhoYW5kbGVyKGhhbmRsZXJOdW0pOgorICAgIGlmIGhhbmRsZXJOdW0gaW4gX3VpX2hhbmRsZXJzOgorICAgICAgICBkZWwgX3VpX2hhbmRsZXJzW2hhbmRsZXJOdW1dCisgICAgcmV0dXJuCisKKyMgQ2xhc3MgdG8gYWxsb3cgZmlsdGVyaW5nIG9mIGV2ZW50cyBhbmQgc3BlY2lmaWMgZmlsdGVyaW5nIG9mIExvZ1JlY29yZHMgKmJlZm9yZSogd2UgcHV0IHRoZW0gb3ZlciB0aGUgSVBDCitjbGFzcyBVSUV2ZW50RmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxldmVsLCBkZWJ1Z19kb21haW5zKToKKyAgICAgICAgc2VsZi51cGRhdGUoTm9uZSwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGV2ZW50bWFzaywgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpOgorICAgICAgICBzZWxmLmV2ZW50bWFzayA9IGV2ZW50bWFzaworICAgICAgICBzZWxmLnN0ZGxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5kZWJ1Z19kb21haW5zID0gZGVidWdfZG9tYWlucworCisgICAgZGVmIGZpbHRlcihzZWxmLCBldmVudCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gc2VsZi5zdGRsZXZlbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgZXZlbnQubmFtZSBpbiBzZWxmLmRlYnVnX2RvbWFpbnMgYW5kIGV2ZW50LmxldmVsbm8gPj0gc2VsZi5kZWJ1Z19kb21haW5zW2V2ZW50Lm5hbWVdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWlkID0gc3RyKGV2ZW50Ll9fY2xhc3NfXylbODotMl0KKyAgICAgICAgaWYgc2VsZi5ldmVudG1hc2sgYW5kIGVpZCBub3QgaW4gc2VsZi5ldmVudG1hc2s6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIHNldF9VSUhtYXNrKGhhbmRsZXJOdW0sIGxldmVsLCBkZWJ1Z19kb21haW5zLCBtYXNrKToKKyAgICBpZiBub3QgaGFuZGxlck51bSBpbiBfdWlfaGFuZGxlcnM6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmICcqJyBpbiBtYXNrOgorICAgICAgICBfdWlfbG9nZmlsdGVyc1toYW5kbGVyTnVtXS51cGRhdGUoTm9uZSwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpCisgICAgZWxzZToKKyAgICAgICAgX3VpX2xvZ2ZpbHRlcnNbaGFuZGxlck51bV0udXBkYXRlKG1hc2ssIGxldmVsLCBkZWJ1Z19kb21haW5zKQorICAgIHJldHVybiBUcnVlCisKK2RlZiBnZXROYW1lKGUpOgorICAgICIiIlJldHVybnMgdGhlIG5hbWUgb2YgYSBjbGFzcyBvciBjbGFzcyBpbnN0YW5jZSIiIgorICAgIGlmIGdldGF0dHIoZSwgIl9fbmFtZV9fIiwgTm9uZSkgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuIGUuX19jbGFzc19fLl9fbmFtZV9fCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGUuX19uYW1lX18KKworY2xhc3MgT3BlcmF0aW9uU3RhcnRlZChFdmVudCk6CisgICAgIiIiQW4gb3BlcmF0aW9uIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cgPSAiT3BlcmF0aW9uIFN0YXJ0ZWQiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cKKworY2xhc3MgT3BlcmF0aW9uQ29tcGxldGVkKEV2ZW50KToKKyAgICAiIiJBbiBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCwgbXNnID0gIk9wZXJhdGlvbiBDb21wbGV0ZWQiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKK2NsYXNzIE9wZXJhdGlvblByb2dyZXNzKEV2ZW50KToKKyAgICAiIiJBbiBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsIG1zZyA9ICJPcGVyYXRpb24gaW4gUHJvZ3Jlc3MiKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gY3VycmVudAorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cgKyAiOiAlcy8lcyIgJSAoY3VycmVudCwgdG90YWwpOworCitjbGFzcyBDb25maWdQYXJzZWQoRXZlbnQpOgorICAgICIiIkNvbmZpZ3VyYXRpb24gUGFyc2luZyBDb21wbGV0ZSIiIgorCitjbGFzcyBSZWNpcGVFdmVudChFdmVudCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZuKToKKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIFJlY2lwZVByZUZpbmFsaXNlKFJlY2lwZUV2ZW50KToKKyAgICAiIiIgUmVjaXBlIFBhcnNpbmcgQ29tcGxldGUgYnV0IG5vdCB5ZXQgZmluaWFsaXNlZCIiIgorCitjbGFzcyBSZWNpcGVQYXJzZWQoUmVjaXBlRXZlbnQpOgorICAgICIiIiBSZWNpcGUgUGFyc2luZyBDb21wbGV0ZSAiIiIKKworY2xhc3MgU3RhbXBVcGRhdGUoRXZlbnQpOgorICAgICIiIlRyaWdnZXIgZm9yIGFueSBhZGp1c3RtZW50IG9mIHRoZSBzdGFtcCBmaWxlcyB0byBoYXBwZW4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXRzLCBzdGFtcGZucyk6CisgICAgICAgIHNlbGYuX3RhcmdldHMgPSB0YXJnZXRzCisgICAgICAgIHNlbGYuX3N0YW1wZm5zID0gc3RhbXBmbnMKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKworICAgIGRlZiBnZXRTdGFtcFByZWZpeChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YW1wZm5zCisKKyAgICBkZWYgZ2V0VGFyZ2V0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RhcmdldHMKKworICAgIHN0YW1wUHJlZml4ID0gcHJvcGVydHkoZ2V0U3RhbXBQcmVmaXgpCisgICAgdGFyZ2V0cyA9IHByb3BlcnR5KGdldFRhcmdldHMpCisKK2NsYXNzIEJ1aWxkQmFzZShFdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgYmJtYWtlIHJ1biBldmVudHMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcyA9IDApOgorICAgICAgICBzZWxmLl9uYW1lID0gbgorICAgICAgICBzZWxmLl9wa2dzID0gcAorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGZhaWx1cmVzCisKKyAgICBkZWYgZ2V0UGtncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BrZ3MKKworICAgIGRlZiBzZXRQa2dzKHNlbGYsIHBrZ3MpOgorICAgICAgICBzZWxmLl9wa2dzID0gcGtncworCisgICAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0TmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBnZXRDZmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEKKworICAgIGRlZiBzZXRDZmcoc2VsZiwgY2ZnKToKKyAgICAgICAgc2VsZi5kYXRhID0gY2ZnCisKKyAgICBkZWYgZ2V0RmFpbHVyZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBmYWlsZWQgcGFja2FnZXMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mYWlsdXJlcworCisgICAgcGtncyA9IHByb3BlcnR5KGdldFBrZ3MsIHNldFBrZ3MsIE5vbmUsICJwa2dzIHByb3BlcnR5IikKKyAgICBuYW1lID0gcHJvcGVydHkoZ2V0TmFtZSwgc2V0TmFtZSwgTm9uZSwgIm5hbWUgcHJvcGVydHkiKQorICAgIGNmZyA9IHByb3BlcnR5KGdldENmZywgc2V0Q2ZnLCBOb25lLCAiY2ZnIHByb3BlcnR5IikKKworCisKKworCitjbGFzcyBCdWlsZFN0YXJ0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJiYm1ha2UgYnVpbGQgcnVuIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbiwgcCwgZmFpbHVyZXMgPSAwKToKKyAgICAgICAgT3BlcmF0aW9uU3RhcnRlZC5fX2luaXRfXyhzZWxmLCAiQnVpbGRpbmcgU3RhcnRlZCIpCisgICAgICAgIEJ1aWxkQmFzZS5fX2luaXRfXyhzZWxmLCBuLCBwLCBmYWlsdXJlcykKKworY2xhc3MgQnVpbGRDb21wbGV0ZWQoQnVpbGRCYXNlLCBPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiImJibWFrZSBidWlsZCBydW4gY29tcGxldGVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvdGFsLCBuLCBwLCBmYWlsdXJlcz0wLCBpbnRlcnJ1cHRlZD0wKToKKyAgICAgICAgaWYgbm90IGZhaWx1cmVzOgorICAgICAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiQnVpbGRpbmcgU3VjY2VlZGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIE9wZXJhdGlvbkNvbXBsZXRlZC5fX2luaXRfXyhzZWxmLCB0b3RhbCwgIkJ1aWxkaW5nIEZhaWxlZCIpCisgICAgICAgIHNlbGYuX2ludGVycnVwdGVkID0gaW50ZXJydXB0ZWQKKyAgICAgICAgQnVpbGRCYXNlLl9faW5pdF9fKHNlbGYsIG4sIHAsIGZhaWx1cmVzKQorCitjbGFzcyBEaXNrRnVsbChFdmVudCk6CisgICAgIiIiRGlzayBmdWxsIGNhc2UgYnVpbGQgYWJvcnRlZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXYsIHR5cGUsIGZyZWVzcGFjZSwgbW91bnRwb2ludCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2RldiA9IGRldgorICAgICAgICBzZWxmLl90eXBlID0gdHlwZQorICAgICAgICBzZWxmLl9mcmVlID0gZnJlZXNwYWNlCisgICAgICAgIHNlbGYuX21vdW50cG9pbnQgPSBtb3VudHBvaW50CisKK2NsYXNzIE5vUHJvdmlkZXIoRXZlbnQpOgorICAgICIiIk5vIFByb3ZpZGVyIGZvciBhbiBFdmVudCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW0sIHJ1bnRpbWU9RmFsc2UsIGRlcGVuZGVlcz1Ob25lLCByZWFzb25zPU5vbmUsIGNsb3NlX21hdGNoZXM9Tm9uZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2l0ZW0gPSBpdGVtCisgICAgICAgIHNlbGYuX3J1bnRpbWUgPSBydW50aW1lCisgICAgICAgIHNlbGYuX2RlcGVuZGVlcyA9IGRlcGVuZGVlcworICAgICAgICBzZWxmLl9yZWFzb25zID0gcmVhc29ucworICAgICAgICBzZWxmLl9jbG9zZV9tYXRjaGVzID0gY2xvc2VfbWF0Y2hlcworCisgICAgZGVmIGdldEl0ZW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pdGVtCisKKyAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVudGltZQorCitjbGFzcyBNdWx0aXBsZVByb3ZpZGVycyhFdmVudCk6CisgICAgIiIiTXVsdGlwbGUgUHJvdmlkZXJzIiIiCisKKyAgICBkZWYgIF9faW5pdF9fKHNlbGYsIGl0ZW0sIGNhbmRpZGF0ZXMsIHJ1bnRpbWUgPSBGYWxzZSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX2l0ZW0gPSBpdGVtCisgICAgICAgIHNlbGYuX2NhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzCisgICAgICAgIHNlbGYuX2lzX3J1bnRpbWUgPSBydW50aW1lCisKKyAgICBkZWYgaXNSdW50aW1lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSXMgdGhpcyBhIHJ1bnRpbWUgaXNzdWU/CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5faXNfcnVudGltZQorCisgICAgZGVmIGdldEl0ZW0oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgbmFtZSBmb3IgdGhlIHRvIGJlIGJ1aWxkIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVtCisKKyAgICBkZWYgZ2V0Q2FuZGlkYXRlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgcG9zc2libGUgQ2FuZGlkYXRlcyBmb3IgYSBQUk9WSURFUi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jYW5kaWRhdGVzCisKK2NsYXNzIFBhcnNlU3RhcnRlZChPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBmb3IgdGhlIHJ1bnF1ZXVlIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIlJlY2lwZSBwYXJzaW5nIFN0YXJ0ZWQiKQorICAgICAgICBzZWxmLnRvdGFsID0gdG90YWwKKworY2xhc3MgUGFyc2VDb21wbGV0ZWQoT3BlcmF0aW9uQ29tcGxldGVkKToKKyAgICAiIiJSZWNpcGUgcGFyc2luZyBmb3IgdGhlIHJ1bnF1ZXVlIGhhcyBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVkLCBwYXJzZWQsIHNraXBwZWQsIG1hc2tlZCwgdmlydHVhbHMsIGVycm9ycywgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJSZWNpcGUgcGFyc2luZyBDb21wbGV0ZWQiKQorICAgICAgICBzZWxmLmNhY2hlZCA9IGNhY2hlZAorICAgICAgICBzZWxmLnBhcnNlZCA9IHBhcnNlZAorICAgICAgICBzZWxmLnNraXBwZWQgPSBza2lwcGVkCisgICAgICAgIHNlbGYudmlydHVhbHMgPSB2aXJ0dWFscworICAgICAgICBzZWxmLm1hc2tlZCA9IG1hc2tlZAorICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycworICAgICAgICBzZWxmLnNvZmFyID0gY2FjaGVkICsgcGFyc2VkCisKK2NsYXNzIFBhcnNlUHJvZ3Jlc3MoT3BlcmF0aW9uUHJvZ3Jlc3MpOgorICAgICIiIlJlY2lwZSBwYXJzaW5nIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uUHJvZ3Jlc3MuX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsICJSZWNpcGUgcGFyc2luZyIpCisKKworY2xhc3MgQ2FjaGVMb2FkU3RhcnRlZChPcGVyYXRpb25TdGFydGVkKToKKyAgICAiIiJMb2FkaW5nIG9mIHRoZSBkZXBlbmRlbmN5IGNhY2hlIGhhcyBiZWd1biIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIkxvYWRpbmcgY2FjaGUgU3RhcnRlZCIpCisgICAgICAgIHNlbGYudG90YWwgPSB0b3RhbAorCitjbGFzcyBDYWNoZUxvYWRQcm9ncmVzcyhPcGVyYXRpb25Qcm9ncmVzcyk6CisgICAgIiIiQ2FjaGUgbG9hZGluZyBwcm9ncmVzcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50LCB0b3RhbCk6CisgICAgICAgIE9wZXJhdGlvblByb2dyZXNzLl9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsLCAiTG9hZGluZyBjYWNoZSIpCisKK2NsYXNzIENhY2hlTG9hZENvbXBsZXRlZChPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiIkNhY2hlIGxvYWRpbmcgaXMgY29tcGxldGUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwsIG51bV9lbnRyaWVzKToKKyAgICAgICAgT3BlcmF0aW9uQ29tcGxldGVkLl9faW5pdF9fKHNlbGYsIHRvdGFsLCAiTG9hZGluZyBjYWNoZSBDb21wbGV0ZWQiKQorICAgICAgICBzZWxmLm51bV9lbnRyaWVzID0gbnVtX2VudHJpZXMKKworY2xhc3MgVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQoT3BlcmF0aW9uU3RhcnRlZCk6CisgICAgIiIiVHJlZSBkYXRhIHByZXBhcmF0aW9uIHN0YXJ0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIE9wZXJhdGlvblN0YXJ0ZWQuX19pbml0X18oc2VsZiwgIlByZXBhcmluZyB0cmVlIGRhdGEgU3RhcnRlZCIpCisKK2NsYXNzIFRyZWVEYXRhUHJlcGFyYXRpb25Qcm9ncmVzcyhPcGVyYXRpb25Qcm9ncmVzcyk6CisgICAgIiIiVHJlZSBkYXRhIHByZXBhcmF0aW9uIGlzIGluIHByb2dyZXNzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnJlbnQsIHRvdGFsKToKKyAgICAgICAgT3BlcmF0aW9uUHJvZ3Jlc3MuX19pbml0X18oc2VsZiwgY3VycmVudCwgdG90YWwsICJQcmVwYXJpbmcgdHJlZSBkYXRhIikKKworY2xhc3MgVHJlZURhdGFQcmVwYXJhdGlvbkNvbXBsZXRlZChPcGVyYXRpb25Db21wbGV0ZWQpOgorICAgICIiIlRyZWUgZGF0YSBwcmVwYXJhdGlvbiBjb21wbGV0ZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG90YWwpOgorICAgICAgICBPcGVyYXRpb25Db21wbGV0ZWQuX19pbml0X18oc2VsZiwgdG90YWwsICJQcmVwYXJpbmcgdHJlZSBkYXRhIENvbXBsZXRlZCIpCisKK2NsYXNzIERlcFRyZWVHZW5lcmF0ZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHdoZW4gYSBkZXBlbmRlbmN5IHRyZWUgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVwZ3JhcGgpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9kZXBncmFwaCA9IGRlcGdyYXBoCisKK2NsYXNzIFRhcmdldHNUcmVlR2VuZXJhdGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgc2V0IG9mIGJ1aWxkYWJsZSB0YXJnZXRzIGhhcyBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKworY2xhc3MgUmVhY2hhYmxlU3RhbXBzKEV2ZW50KToKKyAgICAiIiIKKyAgICBBbiBldmVudCBsaXN0aW5nIGFsbCBzdGFtcHMgcmVhY2hhYmxlIGFmdGVyIHBhcnNpbmcKKyAgICB3aGljaCB0aGUgbWV0YWRhdGEgbWF5IHVzZSB0byBjbGVhbiB1cCBzdGFsZSBkYXRhCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhbXBzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zdGFtcHMgPSBzdGFtcHMKKworY2xhc3MgRmlsZXNNYXRjaGluZ0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBmaWxlcyBtYXRjaGluZyB0aGUgc3VwcGxpZWQgcGF0dGVybiBoYXMKKyAgICBiZWVuIGdlbmVyYXRlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0ZXJuLCBtYXRjaGVzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0dGVybiA9IHBhdHRlcm4KKyAgICAgICAgc2VsZi5fbWF0Y2hlcyA9IG1hdGNoZXMKKworY2xhc3MgQ29yZUJhc2VGaWxlc0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBjb25maWcgZmlsZXMgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhzKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0aHMgPSBwYXRocworCitjbGFzcyBDb25maWdGaWxlc0ZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgbGlzdCBvZiBhcHByb3ByaWF0ZSBjb25maWcgZmlsZXMgaGFzIGJlZW4gZ2VuZXJhdGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZXMpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl92YXJpYWJsZSA9IHZhcmlhYmxlCisgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHZhbHVlcworCitjbGFzcyBDb25maWdGaWxlUGF0aEZvdW5kKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIGEgcGF0aCBmb3IgYSBjb25maWcgZmlsZSBoYXMgYmVlbiBmb3VuZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKworY2xhc3MgTXNnQmFzZShFdmVudCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgbWVzc2FnZXMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbXNnCisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIE1zZ0RlYnVnKE1zZ0Jhc2UpOgorICAgICIiIkRlYnVnIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnTm90ZShNc2dCYXNlKToKKyAgICAiIiJOb3RlIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnV2FybihNc2dCYXNlKToKKyAgICAiIiJXYXJuaW5nIE1lc3NhZ2UiIiIKKworY2xhc3MgTXNnRXJyb3IoTXNnQmFzZSk6CisgICAgIiIiRXJyb3IgTWVzc2FnZSIiIgorCitjbGFzcyBNc2dGYXRhbChNc2dCYXNlKToKKyAgICAiIiJGYXRhbCBNZXNzYWdlIiIiCisKK2NsYXNzIE1zZ1BsYWluKE1zZ0Jhc2UpOgorICAgICIiIkdlbmVyYWwgb3V0cHV0IiIiCisKK2NsYXNzIExvZ0V4ZWNUVFkoRXZlbnQpOgorICAgICIiIlNlbmQgZXZlbnQgY29udGFpbmluZyBwcm9ncmFtIHRvIHNwYXduIG9uIHR0eSBvZiB0aGUgbG9nZ2VyIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgcHJvZywgc2xlZXBfZGVsYXksIHJldHJpZXMpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLnByb2cgPSBwcm9nCisgICAgICAgIHNlbGYuc2xlZXBfZGVsYXkgPSBzbGVlcF9kZWxheQorICAgICAgICBzZWxmLnJldHJpZXMgPSByZXRyaWVzCisKK2NsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAiIiJEaXNwYXRjaCBsb2dnaW5nIG1lc3NhZ2VzIGFzIGJpdGJha2UgZXZlbnRzIiIiCisKKyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBpZiByZWNvcmQuZXhjX2luZm86CisgICAgICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gcmVjb3JkLmV4Y19pbmZvCisgICAgICAgICAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAgICAgICAgICAgICAgIHRiID0gbGlzdChiYi5leGNlcHRpb25zLmV4dHJhY3RfdHJhY2ViYWNrKHRiLCBjb250ZXh0PTMpKQorICAgICAgICAgICAgcmVjb3JkLmJiX2V4Y19pbmZvID0gKGV0eXBlLCB2YWx1ZSwgdGIpCisgICAgICAgICAgICByZWNvcmQuZXhjX2luZm8gPSBOb25lCisgICAgICAgIGZpcmUocmVjb3JkLCBOb25lKQorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZWNvcmQudGFza3BpZCA9IHdvcmtlcl9waWQKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUmVxdWVzdFBhY2thZ2VJbmZvKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byByZXF1ZXN0IHBhY2thZ2UgaW5mb3JtYXRpb24KKyAgICAiIiIKKworY2xhc3MgUGFja2FnZUluZm8oRXZlbnQpOgorICAgICIiIgorICAgIFBhY2thZ2UgaW5mb3JtYXRpb24gZm9yIEdVSQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwa2dpbmZvbGlzdCk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BrZ2luZm9saXN0ID0gcGtnaW5mb2xpc3QKKworY2xhc3MgTWV0YWRhdGFFdmVudChFdmVudCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBldmVudCB0aGF0IHRhcmdldCBmb3IgT0UtQ29yZSBjbGFzc2VzCisgICAgdG8gcmVwb3J0IGluZm9ybWF0aW9uIGR1cmluZyBhc3luY2hyb3VzIGV4ZWN1dGlvbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHR5cGUsIGV2ZW50ZGF0YSk6CisgICAgICAgIEV2ZW50Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudHlwZSA9IGV2ZW50dHlwZQorICAgICAgICBzZWxmLl9sb2NhbGRhdGEgPSBldmVudGRhdGEKKworY2xhc3MgU2FuaXR5Q2hlY2soRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIHJ1biBzYW5pdHkgY2hlY2tzLCBlaXRoZXIgcmFpc2UgZXJyb3JzIG9yIGdlbmVyYXRlIGV2ZW50cyBhcyByZXR1cm4gc3RhdHVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW5lcmF0ZWV2ZW50cyA9IFRydWUpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmdlbmVyYXRlZXZlbnRzID0gZ2VuZXJhdGVldmVudHMKKworY2xhc3MgU2FuaXR5Q2hlY2tQYXNzZWQoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIGluZGljYXRlIHNhbml0eSBjaGVjayBoYXMgcGFzc2VkCisgICAgIiIiCisKK2NsYXNzIFNhbml0eUNoZWNrRmFpbGVkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBzYW5pdHkgY2hlY2sgaGFzIGZhaWxlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIG5ldHdvcmtfZXJyb3I9RmFsc2UpOgorICAgICAgICBFdmVudC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9tc2cgPSBtc2cKKyAgICAgICAgc2VsZi5fbmV0d29ya19lcnJvciA9IG5ldHdvcmtfZXJyb3IKKworY2xhc3MgTmV0d29ya1Rlc3QoRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHRvIHJ1biBuZXR3b3JrIGNvbm5lY3Rpdml0eSB0ZXN0cywgZWl0aGVyIHJhaXNlIGVycm9ycyBvciBnZW5lcmF0ZSBldmVudHMgYXMgcmV0dXJuIHN0YXR1cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuZXJhdGVldmVudHMgPSBUcnVlKToKKyAgICAgICAgRXZlbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZWV2ZW50cyA9IGdlbmVyYXRlZXZlbnRzCisKK2NsYXNzIE5ldHdvcmtUZXN0UGFzc2VkKEV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB0byBpbmRpY2F0ZSBuZXR3b3JrIHRlc3QgaGFzIHBhc3NlZAorICAgICIiIgorCitjbGFzcyBOZXR3b3JrVGVzdEZhaWxlZChFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgdG8gaW5kaWNhdGUgbmV0d29yayB0ZXN0IGhhcyBmYWlsZWQKKyAgICAiIiIKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZXhjZXB0aW9ucy5weSBiL2JpdGJha2UvbGliL2JiL2V4Y2VwdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MmM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2V4Y2VwdGlvbnMucHkKQEAgLTAsMCArMSw5MSBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgYmIubmFtZWR0dXBsZV93aXRoX2FiYworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCisKK2NsYXNzIFRyYWNlYmFja0VudHJ5KG5hbWVkdHVwbGUuYWJjKToKKyAgICAiIiJQaWNrbGVhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJhY2ViYWNrIGVudHJ5IiIiCisgICAgX2ZpZWxkcyA9ICdmaWxlbmFtZSBsaW5lbm8gZnVuY3Rpb24gYXJncyBjb2RlX2NvbnRleHQgaW5kZXgnCisgICAgX2hlYWRlciA9ICcgIEZpbGUgInswLmZpbGVuYW1lfSIsIGxpbmUgezAubGluZW5vfSwgaW4gezAuZnVuY3Rpb259ezAuYXJnc30nCisKKyAgICBkZWYgZm9ybWF0KHNlbGYsIGZvcm1hdHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuY29kZV9jb250ZXh0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hlYWRlci5mb3JtYXQoc2VsZikgKyAnXG4nCisKKyAgICAgICAgZm9ybWF0dGVkID0gW3NlbGYuX2hlYWRlci5mb3JtYXQoc2VsZikgKyAnOlxuJ10KKworICAgICAgICBmb3IgbGluZWluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLmNvZGVfY29udGV4dCk6CisgICAgICAgICAgICBpZiBmb3JtYXR0ZXI6CisgICAgICAgICAgICAgICAgbGluZSA9IGZvcm1hdHRlcihsaW5lKQorCisgICAgICAgICAgICBpZiBsaW5laW5kZXggPT0gc2VsZi5pbmRleDoKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWQuYXBwZW5kKCcgICAgPiVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5hcHBlbmQoJyAgICAgJXMnICUgbGluZSkKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlZAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuZm9ybWF0KCkpCisKK2RlZiBfZ2V0X2ZyYW1lX2FyZ3MoZnJhbWUpOgorICAgICIiIkdldCB0aGUgZm9ybWF0dGVkIGFyZ3VtZW50cyBhbmQgY2xhc3MgKGlmIGF2YWlsYWJsZSkgZm9yIGEgZnJhbWUiIiIKKyAgICBhcmdpbmZvID0gaW5zcGVjdC5nZXRhcmd2YWx1ZXMoZnJhbWUpCisKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBhcmdpbmZvLmFyZ3M6CisgICAgICAgICAgICByZXR1cm4gJycsIE5vbmUKKyAgICAjIFRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIGZyb20gdGhlIGZpZWxkIG9mIHB5dGhvbiAyLjYgd2hpY2ggZG9lc24ndCAKKyAgICAjIHJldHVybiBhIG5hbWVkdHVwbGUgaGVyZSBidXQgc2ltcGx5IGEgdHVwbGUgc28gZmFsbGJhY2sgZ3JhY2VmdWxseSBpZgorICAgICMgYXJncyBpc24ndCBwcmVzZW50LgorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuICcnLCBOb25lCisKKyAgICBmaXJzdGFyZyA9IGFyZ2luZm8uYXJnc1swXQorICAgIGlmIGZpcnN0YXJnID09ICdzZWxmJzoKKyAgICAgICAgc2VsZiA9IGFyZ2luZm8ubG9jYWxzWydzZWxmJ10KKyAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBhcmdpbmZvLmFyZ3MucG9wKDApCisgICAgICAgIGRlbCBhcmdpbmZvLmxvY2Fsc1snc2VsZiddCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gTm9uZQorCisgICAgZm9ybWF0dGVkID0gaW5zcGVjdC5mb3JtYXRhcmd2YWx1ZXMoKmFyZ2luZm8pCisgICAgcmV0dXJuIGZvcm1hdHRlZCwgY2xzCisKK2RlZiBleHRyYWN0X3RyYWNlYmFjayh0YiwgY29udGV4dD0xKToKKyAgICBmcmFtZXMgPSBpbnNwZWN0LmdldGlubmVyZnJhbWVzKHRiLCBjb250ZXh0KQorICAgIGZvciBmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXggaW4gZnJhbWVzOgorICAgICAgICBmb3JtYXR0ZWRfYXJncywgY2xzID0gX2dldF9mcmFtZV9hcmdzKGZyYW1lKQorICAgICAgICBpZiBjbHM6CisgICAgICAgICAgICBmdW5jdGlvbiA9ICclcy4lcycgJSAoY2xzLCBmdW5jdGlvbikKKyAgICAgICAgeWllbGQgVHJhY2ViYWNrRW50cnkoZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGZvcm1hdHRlZF9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NvbnRleHQsIGluZGV4KQorCitkZWYgZm9ybWF0X2V4dHJhY3RlZChleHRyYWN0ZWQsIGZvcm1hdHRlcj1Ob25lLCBsaW1pdD1Ob25lKToKKyAgICBpZiBsaW1pdDoKKyAgICAgICAgZXh0cmFjdGVkID0gZXh0cmFjdGVkWy1saW1pdDpdCisKKyAgICBmb3JtYXR0ZWQgPSBbXQorICAgIGZvciB0cmFjZWJhY2tpbmZvIGluIGV4dHJhY3RlZDoKKyAgICAgICAgZm9ybWF0dGVkLmV4dGVuZCh0cmFjZWJhY2tpbmZvLmZvcm1hdChmb3JtYXR0ZXIpKQorICAgIHJldHVybiBmb3JtYXR0ZWQKKworCitkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBjb250ZXh0PTEsIGxpbWl0PU5vbmUsIGZvcm1hdHRlcj1Ob25lKToKKyAgICBmb3JtYXR0ZWQgPSBbJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiddCisKKyAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4dCcpOgorICAgICAgICB0YiA9IGV4dHJhY3RfdHJhY2ViYWNrKHRiLCBjb250ZXh0KQorCisgICAgZm9ybWF0dGVkLmV4dGVuZChmb3JtYXRfZXh0cmFjdGVkKHRiLCBmb3JtYXR0ZXIsIGxpbWl0KSkKKyAgICBmb3JtYXR0ZWQuZXh0ZW5kKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXR5cGUsIHZhbHVlKSkKKyAgICByZXR1cm4gZm9ybWF0dGVkCisKK2RlZiB0b19zdHJpbmcoZXhjKToKKyAgICBpZiBpc2luc3RhbmNlKGV4YywgU3lzdGVtRXhpdCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4Yy5jb2RlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiAnRXhpdGVkIHdpdGggIiVkIicgJSBleGMuY29kZQorICAgIHJldHVybiBzdHIoZXhjKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTNiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNzg3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Citmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MsIHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgZ2xvYgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxwYXJzZQoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgYmIucGVyc2lzdF9kYXRhLCBiYi51dGlscworaW1wb3J0IGJiLmNoZWNrc3VtCitmcm9tIGJiIGltcG9ydCBkYXRhCitpbXBvcnQgYmIucHJvY2VzcworaW1wb3J0IHN1YnByb2Nlc3MKKworX192ZXJzaW9uX18gPSAiMiIKK19jaGVja3N1bV9jYWNoZSA9IGJiLmNoZWNrc3VtLkZpbGVDaGVja3N1bUNhY2hlKCkKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuRmV0Y2hlciIpCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisgICAgbG9nZ2VyLmluZm8oIkltcG9ydGluZyBjUGlja2xlIGZhaWxlZC4gIgorICAgICAgICAgICAgICAgICJGYWxsaW5nIGJhY2sgdG8gYSB2ZXJ5IHNsb3cgaW1wbGVtZW50YXRpb24uIikKKworY2xhc3MgQkJGZXRjaEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkNsYXNzIGFsbCBmZXRjaCBleGNlcHRpb25zIGluaGVyaXQgZnJvbSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIHNlbGYubXNnID0gbWVzc2FnZQorICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIHJldHVybiBzZWxmLm1zZworCitjbGFzcyBVbnRydXN0ZWRVcmwoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGVuY291bnRlcmluZyBhIGhvc3Qgbm90IGxpc3RlZCBpbiBCQl9BTExPV0VEX05FVFdPUktTIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgbWVzc2FnZT0nJyk6CisgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICBtc2cgPSBtZXNzYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBub3QgdHJ1c3RlZCBhbmQgY2Fubm90IGJlIHVzZWQiICUgdXJsCisgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgTWFsZm9ybWVkVXJsKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBlbmNvdW50ZXJpbmcgYW4gaW52YWxpZCB1cmwiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtZXNzYWdlPScnKToKKyAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAgbXNnID0gbWVzc2FnZQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBtc2cgPSAiVGhlIFVSTDogJyVzJyBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgaW50ZXJwcmV0ZWQiICUgdXJsCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAodXJsLCkKKworY2xhc3MgRmV0Y2hFcnJvcihCQkZldGNoRXhjZXB0aW9uKToKKyAgICAiIiJHZW5lcmFsIGZldGNoZXIgZXhjZXB0aW9uIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgaW5jb3JyZWN0bHkiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgdXJsID0gTm9uZSk6CisgICAgICAgICBpZiB1cmw6CisgICAgICAgICAgICBtc2cgPSAiRmV0Y2hlciBmYWlsdXJlIGZvciBVUkw6ICclcycuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIkZldGNoZXIgZmFpbHVyZTogJXMiICUgbWVzc2FnZQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1lc3NhZ2UsIHVybCkKKworY2xhc3MgQ2hlY2tzdW1FcnJvcihGZXRjaEVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gd2hlbiBtaXNtYXRjaGVkIGNoZWNrc3VtIGVuY291bnRlcmVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCA9IE5vbmUsIGNoZWNrc3VtID0gTm9uZSk6CisgICAgICAgIHNlbGYuY2hlY2tzdW0gPSBjaGVja3N1bQorICAgICAgICBGZXRjaEVycm9yLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCkKKworY2xhc3MgTm9DaGVja3N1bUVycm9yKEZldGNoRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiB3aGVuIG5vIGNoZWNrc3VtIGlzIHNwZWNpZmllZCwgYnV0IEJCX1NUUklDVF9DSEVDS1NVTSBpcyBzZXQiIiIKKworY2xhc3MgVW5wYWNrRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiR2VuZXJhbCBmZXRjaGVyIGV4Y2VwdGlvbiB3aGVuIHNvbWV0aGluZyBoYXBwZW5zIGluY29ycmVjdGx5IHdoZW4gdW5wYWNraW5nIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6CisgICAgICAgICBtc2cgPSAiVW5wYWNrIGZhaWx1cmUgZm9yIFVSTDogJyVzJy4gJXMiICUgKHVybCwgbWVzc2FnZSkKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9IChtZXNzYWdlLCB1cmwpCisKK2NsYXNzIE5vTWV0aG9kRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZXJlIGlzIG5vIG1ldGhvZCB0byBvYnRhaW4gYSBzdXBwbGllZCB1cmwgb3Igc2V0IG9mIHVybHMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICAgICAgIG1zZyA9ICJDb3VsZCBub3QgZmluZCBhIGZldGNoZXIgd2hpY2ggc3VwcG9ydHMgdGhlIFVSTDogJyVzJyIgJSB1cmwKKyAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICBCQkZldGNoRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1zZykKKyAgICAgICAgIHNlbGYuYXJncyA9ICh1cmwsKQorCitjbGFzcyBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZmV0Y2ggbWV0aG9kIGlzIG1pc3NpbmcgYSBjcml0aWNhbCBwYXJhbWV0ZXIgaW4gdGhlIHVybCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtaXNzaW5nLCB1cmwpOgorICAgICAgICAgbXNnID0gIlVSTDogJyVzJyBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyIgJSAodXJsLCBtaXNzaW5nKQorICAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgIHNlbGYubWlzc2luZyA9IG1pc3NpbmcKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKG1pc3NpbmcsIHVybCkKKworY2xhc3MgUGFyYW1ldGVyRXJyb3IoQkJGZXRjaEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgdXJsIGNhbm5vdCBiZSBwcm9jY2Vzc2VkIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHVybCk6CisgICAgICAgICBtc2cgPSAiVVJMOiAnJXMnIGhhcyBpbnZhbGlkIHBhcmFtZXRlcnMuICVzIiAlICh1cmwsIG1lc3NhZ2UpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgQkJGZXRjaEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtc2cpCisgICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwgdXJsKQorCitjbGFzcyBOZXR3b3JrQWNjZXNzKEJCRmV0Y2hFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBuZXR3b3JrIGFjY2VzcyBpcyBkaXNhYmxlZCBidXQgaXQgaXMgcmVxdWlyZWQuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgY21kKToKKyAgICAgICAgIG1zZyA9ICJOZXR3b3JrIGFjY2VzcyBkaXNhYmxlZCB0aHJvdWdoIEJCX05PX05FVFdPUksgKG9yIHNldCBpbmRpcmVjdGx5IGR1ZSB0byB1c2Ugb2YgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSkgYnV0IGFjY2VzcyByZXF1ZXN0ZWQgd2l0aCBjb21tYW5kICVzIChmb3IgdXJsICVzKSIgJSAoY21kLCB1cmwpCisgICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgIEJCRmV0Y2hFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorICAgICAgICAgc2VsZi5hcmdzID0gKHVybCwgY21kKQorCitjbGFzcyBOb25Mb2NhbE1ldGhvZChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYpCisKKworY2xhc3MgVVJJKG9iamVjdCk6CisgICAgIiIiCisgICAgQSBjbGFzcyByZXByZXNlbnRpbmcgYSBnZW5lcmljIFVSSSwgd2l0aCBtZXRob2RzIGZvcgorICAgIGFjY2Vzc2luZyB0aGUgVVJJIGNvbXBvbmVudHMsIGFuZCBzdHJpbmdpZmllcyB0byB0aGUKKyAgICBVUkkuCisKKyAgICBJdCBpcyBjb25zdHJ1Y3RlZCBieSBjYWxsaW5nIGl0IHdpdGggYSBVUkksIG9yIHNldHRpbmcKKyAgICB0aGUgYXR0cmlidXRlcyBtYW51YWxseToKKworICAgICB1cmkgPSBVUkkoImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorCisgICAgIHVyaSA9IFVSSSgpCisgICAgIHVyaS5zY2hlbWUgPSAnaHR0cCcKKyAgICAgdXJpLmhvc3RuYW1lID0gJ2V4YW1wbGUuY29tJworICAgICB1cmkucGF0aCA9ICcvJworCisgICAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworICAgICAgKiBzY2hlbWUgKHJlYWQvd3JpdGUpCisgICAgICAqIHVzZXJpbmZvIChhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbikgKHJlYWQvd3JpdGUpCisgICAgICAgICogdXNlcm5hbWUgKHJlYWQvd3JpdGUpCisgICAgICAgICogcGFzc3dvcmQgKHJlYWQvd3JpdGUpCisKKyAgICAgICAgTm90ZSwgcGFzc3dvcmQgaXMgZGVwcmVjYXRlZCBhcyBvZiBSRkMgMzk4Ni4KKworICAgICAgKiBob3N0bmFtZSAocmVhZC93cml0ZSkKKyAgICAgICogcG9ydCAocmVhZC93cml0ZSkKKyAgICAgICogaG9zdHBvcnQgKHJlYWQgb25seSkKKyAgICAgICAgImhvc3RuYW1lOnBvcnQiLCBpZiBib3RoIGFyZSBzZXQsIG90aGVyd2lzZSBqdXN0ICJob3N0bmFtZSIKKyAgICAgICogcGF0aCAocmVhZC93cml0ZSkKKyAgICAgICogcGF0aF9xdW90ZWQgKHJlYWQvd3JpdGUpCisgICAgICAgIEEgVVJJIHF1b3RlZCB2ZXJzaW9uIG9mIHBhdGgKKyAgICAgICogcGFyYW1zIChkaWN0KSAocmVhZC93cml0ZSkKKyAgICAgICogcXVlcnkgKGRpY3QpIChyZWFkL3dyaXRlKQorICAgICAgKiByZWxhdGl2ZSAoYm9vbCkgKHJlYWQgb25seSkKKyAgICAgICAgVHJ1ZSBpZiB0aGlzIGlzIGEgInJlbGF0aXZlIFVSSSIsIChlLmcuIGZpbGU6Zm9vLmRpZmYpCisKKyAgICBJdCBzdHJpbmdpZmllcyB0byB0aGUgVVJJIGl0c2VsZi4KKworICAgIFNvbWUgbm90ZXMgYWJvdXQgcmVsYXRpdmUgVVJJczogd2hpbGUgaXQncyBzcGVjaWZpZWQgdGhhdAorICAgIGEgVVJJIGJlZ2lubmluZyB3aXRoIDxzY2hlbWU+Oi8vIHNob3VsZCBlaXRoZXIgYmUgZGlyZWN0bHkKKyAgICBmb2xsb3dlZCBieSBhIGhvc3RuYW1lIG9yIGEgLywgdGhlIG9sZCBVUkkgaGFuZGxpbmcgb2YgdGhlCisgICAgZmV0Y2gyIGxpYnJhcnkgZGlkIG5vdCBjb21mb3JtIHRvIHRoaXMuIFRoZXJlZm9yZSwgdGhpcyBVUkkKKyAgICBjbGFzcyBoYXMgc29tZSBrbHVkZ2VzIHRvIG1ha2Ugc3VyZSB0aGF0IFVSSXMgYXJlIHBhcnNlZCBpbgorICAgIGEgd2F5IGNvbWZvcm1pbmcgdG8gYml0YmFrZSdzIGN1cnJlbnQgdXNhZ2UuIFRoaXMgVVJJIGNsYXNzCisgICAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKworICAgICBmaWxlOnJlbGF0aXZlL3BhdGguZGlmZiAoSUVURiBjb21wbGlhbnQpCisgICAgIGdpdDpyZWxhdGl2ZS9wYXRoLmdpdCAoSUVURiBjb21wbGlhbnQpCisgICAgIGdpdDovLy9hYnNvbHV0ZS9wYXRoLmdpdCAoSUVURiBjb21wbGlhbnQpCisgICAgIGZpbGU6Ly8vYWJzb2x1dGUvcGF0aC5kaWZmIChJRVRGIGNvbXBsaWFudCkKKworICAgICBmaWxlOi8vcmVsYXRpdmUvcGF0aC5kaWZmIChub3QgSUVURiBjb21wbGlhbnQpCisKKyAgICBCdXQgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZm9sbG93aW5nOgorCisgICAgIGZpbGU6Ly9ob3N0bmFtZS9hYnNvbHV0ZS9wYXRoLmRpZmYgKHdvdWxkIGJlIElFVEYgY29tcGxpYW50KQorCisgICAgTm90ZSB0aGF0IHRoZSBsYXN0IGNhc2Ugb25seSBhcHBsaWVzIHRvIGEgbGlzdCBvZgorICAgICJ3aGl0ZWxpc3RlZCIgc2NoZW1lcyAoY3VycmVudGx5IG9ubHkgZmlsZTovLyksIHRoYXQgcmVxdWlyZXMKKyAgICBpdHMgVVJJcyB0byBub3QgaGF2ZSBhIG5ldHdvcmsgbG9jYXRpb24uCisgICAgIiIiCisKKyAgICBfcmVsYXRpdmVfc2NoZW1lcyA9IFsnZmlsZScsICdnaXQnXQorICAgIF9uZXRsb2NfZm9yYmlkZGVuID0gWydmaWxlJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2NoZW1lID0gJycKKyAgICAgICAgc2VsZi51c2VyaW5mbyA9ICcnCisgICAgICAgIHNlbGYuaG9zdG5hbWUgPSAnJworICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdGggPSAnJworICAgICAgICBzZWxmLnBhcmFtcyA9IHt9CisgICAgICAgIHNlbGYucXVlcnkgPSB7fQorICAgICAgICBzZWxmLnJlbGF0aXZlID0gRmFsc2UKKworICAgICAgICBpZiBub3QgdXJpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBXZSBoaWphY2sgdGhlIFVSTCBwYXJhbWV0ZXJzLCBzaW5jZSB0aGUgd2F5IGJpdGJha2UgdXNlcworICAgICAgICAjIHRoZW0gYXJlIG5vdCBxdWl0ZSBSRkMgY29tcGxpYW50LgorICAgICAgICB1cmksIHBhcmFtX3N0ciA9ICh1cmkuc3BsaXQoIjsiLCAxKSArIFtOb25lXSlbOjJdCisKKyAgICAgICAgdXJscCA9IHVybHBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgc2VsZi5zY2hlbWUgPSB1cmxwLnNjaGVtZQorCisgICAgICAgIHJlcGFyc2UgPSAwCisKKyAgICAgICAgIyBDb2VyY2UgdXJscGFyc2UgdG8gbWFrZSBVUkkgc2NoZW1lIHVzZSBuZXRsb2MKKyAgICAgICAgaWYgbm90IHNlbGYuc2NoZW1lIGluIHVybHBhcnNlLnVzZXNfbmV0bG9jOgorICAgICAgICAgICAgdXJscGFyc2UudXNlc19wYXJhbXMuYXBwZW5kKHNlbGYuc2NoZW1lKQorICAgICAgICAgICAgcmVwYXJzZSA9IDEKKworICAgICAgICAjIE1ha2UgdXJscGFyc2UgaGFwcHkoL2llcikgYnkgY29udmVydGluZyBsb2NhbCByZXNvdXJjZXMKKyAgICAgICAgIyB0byBSRkMgY29tcGxpYW50IFVSTCBmb3JtYXQuIEUuZy46CisgICAgICAgICMgICBmaWxlOi8vZm9vLmRpZmYgLT4gZmlsZTpmb28uZGlmZgorICAgICAgICBpZiB1cmxwLnNjaGVtZSBpbiBzZWxmLl9uZXRsb2NfZm9yYmlkZGVuOgorICAgICAgICAgICAgdXJpID0gcmUuc3ViKCIoPzw9OikvLyg/IS8pIiwgIiIsIHVyaSwgMSkKKyAgICAgICAgICAgIHJlcGFyc2UgPSAxCisKKyAgICAgICAgaWYgcmVwYXJzZToKKyAgICAgICAgICAgIHVybHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisKKyAgICAgICAgIyBJZGVudGlmeSBpZiB0aGUgVVJJIGlzIHJlbGF0aXZlIG9yIG5vdAorICAgICAgICBpZiB1cmxwLnNjaGVtZSBpbiBzZWxmLl9yZWxhdGl2ZV9zY2hlbWVzIGFuZCBcCisgICAgICAgICAgIHJlLmNvbXBpbGUoIl5cdys6KD8hLy8pIikubWF0Y2godXJpKToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IHNlbGYucmVsYXRpdmU6CisgICAgICAgICAgICBzZWxmLmhvc3RuYW1lID0gdXJscC5ob3N0bmFtZSBvciAnJworICAgICAgICAgICAgc2VsZi5wb3J0ID0gdXJscC5wb3J0CisKKyAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gdXJscC51c2VybmFtZSBvciAnJworCisgICAgICAgICAgICBpZiB1cmxwLnBhc3N3b3JkOgorICAgICAgICAgICAgICAgIHNlbGYudXNlcmluZm8gKz0gJzolcycgJSB1cmxwLnBhc3N3b3JkCisKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUodXJscC5wYXRoKQorCisgICAgICAgIGlmIHBhcmFtX3N0cjoKKyAgICAgICAgICAgIHNlbGYucGFyYW1zID0gc2VsZi5fcGFyYW1fc3RyX3NwbGl0KHBhcmFtX3N0ciwgIjsiKQorICAgICAgICBpZiB1cmxwLnF1ZXJ5OgorICAgICAgICAgICAgc2VsZi5xdWVyeSA9IHNlbGYuX3BhcmFtX3N0cl9zcGxpdCh1cmxwLnF1ZXJ5LCAiJiIpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdXNlcmluZm8gPSBzZWxmLnVzZXJpbmZvCisgICAgICAgIGlmIHVzZXJpbmZvOgorICAgICAgICAgICAgdXNlcmluZm8gKz0gJ0AnCisKKyAgICAgICAgcmV0dXJuICIlczolcyVzJXMlcyVzJXMiICUgKAorICAgICAgICAgICAgc2VsZi5zY2hlbWUsCisgICAgICAgICAgICAnJyBpZiBzZWxmLnJlbGF0aXZlIGVsc2UgJy8vJywKKyAgICAgICAgICAgIHVzZXJpbmZvLAorICAgICAgICAgICAgc2VsZi5ob3N0cG9ydCwKKyAgICAgICAgICAgIHNlbGYucGF0aF9xdW90ZWQsCisgICAgICAgICAgICBzZWxmLl9xdWVyeV9zdHIoKSwKKyAgICAgICAgICAgIHNlbGYuX3BhcmFtX3N0cigpKQorCisgICAgZGVmIF9wYXJhbV9zdHIoc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAnJy5qb2luKFsnOycsIHNlbGYuX3BhcmFtX3N0cl9qb2luKHNlbGYucGFyYW1zLCAiOyIpXSkKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1zIGVsc2UgJycpCisKKyAgICBkZWYgX3F1ZXJ5X3N0cihzZWxmKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgICcnLmpvaW4oWyc/Jywgc2VsZi5fcGFyYW1fc3RyX2pvaW4oc2VsZi5xdWVyeSwgIiYiKV0pCisgICAgICAgICAgICBpZiBzZWxmLnF1ZXJ5IGVsc2UgJycpCisKKyAgICBkZWYgX3BhcmFtX3N0cl9zcGxpdChzZWxmLCBzdHJpbmcsIGVsbWRlbGltLCBrdmRlbGltPSI9Iik6CisgICAgICAgIHJldCA9IHt9CisgICAgICAgIGZvciBrLCB2IGluIFt4LnNwbGl0KGt2ZGVsaW0sIDEpIGZvciB4IGluIHN0cmluZy5zcGxpdChlbG1kZWxpbSldOgorICAgICAgICAgICAgcmV0W2tdID0gdgorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX3BhcmFtX3N0cl9qb2luKHNlbGYsIGRpY3RfLCBlbG1kZWxpbSwga3ZkZWxpbT0iPSIpOgorICAgICAgICByZXR1cm4gZWxtZGVsaW0uam9pbihba3ZkZWxpbS5qb2luKFtrLCB2XSkgZm9yIGssIHYgaW4gZGljdF8uaXRlbXMoKV0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaG9zdHBvcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnBvcnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ob3N0bmFtZQorICAgICAgICByZXR1cm4gIiVzOiVkIiAlIChzZWxmLmhvc3RuYW1lLCBzZWxmLnBvcnQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGF0aF9xdW90ZWQoc2VsZik6CisgICAgICAgIHJldHVybiB1cmxsaWIucXVvdGUoc2VsZi5wYXRoKQorCisgICAgQHBhdGhfcXVvdGVkLnNldHRlcgorICAgIGRlZiBwYXRoX3F1b3RlZChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gdXJsbGliLnVucXVvdGUocGF0aCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAorCisgICAgQHBhdGguc2V0dGVyCisgICAgZGVmIHBhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisKKyAgICAgICAgaWYgcmUuY29tcGlsZSgiXi8iKS5tYXRjaChwYXRoKToKKyAgICAgICAgICAgIHNlbGYucmVsYXRpdmUgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWxhdGl2ZSA9IFRydWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1c2VybmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VyaW5mbzoKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi51c2VyaW5mby5zcGxpdCgiOiIsIDEpKVswXQorICAgICAgICByZXR1cm4gJycKKworICAgIEB1c2VybmFtZS5zZXR0ZXIKKyAgICBkZWYgdXNlcm5hbWUoc2VsZiwgdXNlcm5hbWUpOgorICAgICAgICBwYXNzd29yZCA9IHNlbGYucGFzc3dvcmQKKyAgICAgICAgc2VsZi51c2VyaW5mbyA9IHVzZXJuYW1lCisgICAgICAgIGlmIHBhc3N3b3JkOgorICAgICAgICAgICAgc2VsZi51c2VyaW5mbyArPSAiOiVzIiAlIHBhc3N3b3JkCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFzc3dvcmQoc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNlcmluZm8gYW5kICI6IiBpbiBzZWxmLnVzZXJpbmZvOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLnVzZXJpbmZvLnNwbGl0KCI6IiwgMSkpWzFdCisgICAgICAgIHJldHVybiAnJworCisgICAgQHBhc3N3b3JkLnNldHRlcgorICAgIGRlZiBwYXNzd29yZChzZWxmLCBwYXNzd29yZCk6CisgICAgICAgIHNlbGYudXNlcmluZm8gPSAiJXM6JXMiICUgKHNlbGYudXNlcm5hbWUsIHBhc3N3b3JkKQorCitkZWYgZGVjb2RldXJsKHVybCk6CisgICAgIiIiRGVjb2RlcyBhbiBVUkwgaW50byB0aGUgdG9rZW5zIChzY2hlbWUsIG5ldHdvcmsgbG9jYXRpb24sIHBhdGgsCisgICAgdXNlciwgcGFzc3dvcmQsIHBhcmFtZXRlcnMpLgorICAgICIiIgorCisgICAgbSA9IHJlLmNvbXBpbGUoJyg/UDx0eXBlPlteOl0qKTovLygoP1A8dXNlcj5bXi9dKylAKT8oP1A8bG9jYXRpb24+W147XSspKDsoP1A8cGFybT4uKikpPycpLm1hdGNoKHVybCkKKyAgICBpZiBub3QgbToKKyAgICAgICAgcmFpc2UgTWFsZm9ybWVkVXJsKHVybCkKKworICAgIHR5cGUgPSBtLmdyb3VwKCd0eXBlJykKKyAgICBsb2NhdGlvbiA9IG0uZ3JvdXAoJ2xvY2F0aW9uJykKKyAgICBpZiBub3QgbG9jYXRpb246CisgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwpCisgICAgdXNlciA9IG0uZ3JvdXAoJ3VzZXInKQorICAgIHBhcm0gPSBtLmdyb3VwKCdwYXJtJykKKworICAgIGxvY2lkeCA9IGxvY2F0aW9uLmZpbmQoJy8nKQorICAgIGlmIGxvY2lkeCAhPSAtMSBhbmQgdHlwZS5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgaG9zdCA9IGxvY2F0aW9uWzpsb2NpZHhdCisgICAgICAgIHBhdGggPSBsb2NhdGlvbltsb2NpZHg6XQorICAgIGVsc2U6CisgICAgICAgIGhvc3QgPSAiIgorICAgICAgICBwYXRoID0gbG9jYXRpb24KKyAgICBpZiB1c2VyOgorICAgICAgICBtID0gcmUuY29tcGlsZSgnKD9QPHVzZXI+W146XSspKDo/KD9QPHBzd2Q+LiopKScpLm1hdGNoKHVzZXIpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICB1c2VyID0gbS5ncm91cCgndXNlcicpCisgICAgICAgICAgICBwc3dkID0gbS5ncm91cCgncHN3ZCcpCisgICAgZWxzZToKKyAgICAgICAgdXNlciA9ICcnCisgICAgICAgIHBzd2QgPSAnJworCisgICAgcCA9IHt9CisgICAgaWYgcGFybToKKyAgICAgICAgZm9yIHMgaW4gcGFybS5zcGxpdCgnOycpOgorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBpZiBub3QgJz0nIGluIHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE1hbGZvcm1lZFVybCh1cmwsICJUaGUgVVJMOiAnJXMnIGlzIGludmFsaWQ6IHBhcmFtZXRlciAlcyBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgKG1pc3NpbmcgJz0nKSIgJSAodXJsLCBzKSkKKyAgICAgICAgICAgICAgICBzMSwgczIgPSBzLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBwW3MxXSA9IHMyCisKKyAgICByZXR1cm4gdHlwZSwgaG9zdCwgdXJsbGliLnVucXVvdGUocGF0aCksIHVzZXIsIHBzd2QsIHAKKworZGVmIGVuY29kZXVybChkZWNvZGVkKToKKyAgICAiIiJFbmNvZGVzIGEgVVJMIGZyb20gdG9rZW5zIChzY2hlbWUsIG5ldHdvcmsgbG9jYXRpb24sIHBhdGgsCisgICAgdXNlciwgcGFzc3dvcmQsIHBhcmFtZXRlcnMpLgorICAgICIiIgorCisgICAgdHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcCA9IGRlY29kZWQKKworICAgIGlmIG5vdCBwYXRoOgorICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ3BhdGgnLCAiZW5jb2RlZCBmcm9tIHRoZSBkYXRhICVzIiAlIHN0cihkZWNvZGVkKSkKKyAgICBpZiBub3QgdHlwZToKKyAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCd0eXBlJywgImVuY29kZWQgZnJvbSB0aGUgZGF0YSAlcyIgJSBzdHIoZGVjb2RlZCkpCisgICAgdXJsID0gJyVzOi8vJyAlIHR5cGUKKyAgICBpZiB1c2VyIGFuZCB0eXBlICE9ICJmaWxlIjoKKyAgICAgICAgdXJsICs9ICIlcyIgJSB1c2VyCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICB1cmwgKz0gIjolcyIgJSBwc3dkCisgICAgICAgIHVybCArPSAiQCIKKyAgICBpZiBob3N0IGFuZCB0eXBlICE9ICJmaWxlIjoKKyAgICAgICAgdXJsICs9ICIlcyIgJSBob3N0CisgICAgIyBTdGFuZGFyZGlzZSBwYXRoIHRvIGVuc3VyZSBjb21wYXJpc29ucyB3b3JrCisgICAgd2hpbGUgJy8vJyBpbiBwYXRoOgorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIvLyIsICIvIikKKyAgICB1cmwgKz0gIiVzIiAlIHVybGxpYi5xdW90ZShwYXRoKQorICAgIGlmIHA6CisgICAgICAgIGZvciBwYXJtIGluIHA6CisgICAgICAgICAgICB1cmwgKz0gIjslcz0lcyIgJSAocGFybSwgcFtwYXJtXSkKKworICAgIHJldHVybiB1cmwKKworZGVmIHVyaV9yZXBsYWNlKHVkLCB1cmlfZmluZCwgdXJpX3JlcGxhY2UsIHJlcGxhY2VtZW50cywgZCk6CisgICAgaWYgbm90IHVkLnVybCBvciBub3QgdXJpX2ZpbmQgb3Igbm90IHVyaV9yZXBsYWNlOgorICAgICAgICBsb2dnZXIuZXJyb3IoInVyaV9yZXBsYWNlOiBwYXNzZWQgYW4gdW5kZWZpbmVkIHZhbHVlLCBub3QgcmVwbGFjaW5nIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB1cmlfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVkLnVybCkpCisgICAgdXJpX2ZpbmRfZGVjb2RlZCA9IGxpc3QoZGVjb2RldXJsKHVyaV9maW5kKSkKKyAgICB1cmlfcmVwbGFjZV9kZWNvZGVkID0gbGlzdChkZWNvZGV1cmwodXJpX3JlcGxhY2UpKQorICAgIGxvZ2dlci5kZWJ1ZygyLCAiRm9yIHVybCAlcyBjb21wYXJpbmcgJXMgdG8gJXMiICUgKHVyaV9kZWNvZGVkLCB1cmlfZmluZF9kZWNvZGVkLCB1cmlfcmVwbGFjZV9kZWNvZGVkKSkKKyAgICByZXN1bHRfZGVjb2RlZCA9IFsnJywgJycsICcnLCAnJywgJycsIHt9XQorICAgIGZvciBsb2MsIGkgaW4gZW51bWVyYXRlKHVyaV9maW5kX2RlY29kZWQpOgorICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gdXJpX2RlY29kZWRbbG9jXQorICAgICAgICByZWdleHAgPSBpCisgICAgICAgIGlmIGxvYyA9PSAwIGFuZCByZWdleHAgYW5kIG5vdCByZWdleHAuZW5kc3dpdGgoIiQiKToKKyAgICAgICAgICAgICMgTGVhdmluZyB0aGUgdHlwZSB1bmFuY2hvcmVkIGNhbiBtZWFuICJodHRwcyIgbWF0Y2hpbmcgImZpbGUiIGNhbiBiZWNvbWUgImZpbGVzIgorICAgICAgICAgICAgIyB3aGljaCBpcyBjbGVhcmx5IHVuZGVzaXJhYmxlLgorICAgICAgICAgICAgcmVnZXhwICs9ICIkIgorICAgICAgICBpZiBsb2MgPT0gNToKKyAgICAgICAgICAgICMgSGFuZGxlIFVSTCBwYXJhbWV0ZXJzCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgICMgQW55IHNwZWNpZmllZCBVUkwgcGFyYW1ldGVycyBtdXN0IG1hdGNoCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdOgorICAgICAgICAgICAgICAgICAgICBpZiB1cmlfZGVjb2RlZFtsb2NdW2tdICE9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIE92ZXJ3cml0ZSBhbnkgc3BlY2lmaWVkIHJlcGxhY2VtZW50IHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvciBrIGluIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiByZXBsYWNlbWVudHM6CisgICAgICAgICAgICAgICAgICAgIHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXSA9IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXVtrXS5yZXBsYWNlKGwsIHJlcGxhY2VtZW50c1tsXSkKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdW2tdID0gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdW2tdCisgICAgICAgIGVsaWYgKHJlLm1hdGNoKHJlZ2V4cCwgdXJpX2RlY29kZWRbbG9jXSkpOgorICAgICAgICAgICAgaWYgbm90IHVyaV9yZXBsYWNlX2RlY29kZWRbbG9jXToKKyAgICAgICAgICAgICAgICByZXN1bHRfZGVjb2RlZFtsb2NdID0gIiIgICAgCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBrIGluIHJlcGxhY2VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdID0gdXJpX3JlcGxhY2VfZGVjb2RlZFtsb2NdLnJlcGxhY2UoaywgcmVwbGFjZW1lbnRzW2tdKQorICAgICAgICAgICAgICAgICNiYi5ub3RlKCIlcyAlcyAlcyIgJSAocmVnZXhwLCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10sIHVyaV9kZWNvZGVkW2xvY10pKQorICAgICAgICAgICAgICAgIHJlc3VsdF9kZWNvZGVkW2xvY10gPSByZS5zdWIocmVnZXhwLCB1cmlfcmVwbGFjZV9kZWNvZGVkW2xvY10sIHVyaV9kZWNvZGVkW2xvY10pCisgICAgICAgICAgICBpZiBsb2MgPT0gMjoKKyAgICAgICAgICAgICAgICAjIEhhbmRsZSBwYXRoIG1hbmlwdWxhdGlvbnMKKyAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiB1cmlfZGVjb2RlZFswXSAhPSB1cmlfcmVwbGFjZV9kZWNvZGVkWzBdIGFuZCB1ZC5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHVybCB0eXBlcyBkaWZmZXIsIG11c3QgYmUgYSBtaXJyb3J0YXJiYWxsIG1hcHBpbmcKKyAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLm1pcnJvcnRhcmJhbGwpCisgICAgICAgICAgICAgICAgICAgICMgS2lsbCBwYXJhbWV0ZXJzLCB0aGV5IG1ha2Ugbm8gc2Vuc2UgZm9yIG1pcnJvciB0YXJiYWxscworICAgICAgICAgICAgICAgICAgICB1cmlfZGVjb2RlZFs1XSA9IHt9CisgICAgICAgICAgICAgICAgZWxpZiB1ZC5sb2NhbHBhdGggYW5kIHVkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bSh1ZCk6CisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICAgICAgaWYgYmFzZW5hbWUgYW5kIG5vdCByZXN1bHRfZGVjb2RlZFtsb2NdLmVuZHN3aXRoKGJhc2VuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2RlY29kZWRbbG9jXSA9IG9zLnBhdGguam9pbihyZXN1bHRfZGVjb2RlZFtsb2NdLCBiYXNlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgcmVzdWx0ID0gZW5jb2RldXJsKHJlc3VsdF9kZWNvZGVkKQorICAgIGlmIHJlc3VsdCA9PSB1ZC51cmw6CisgICAgICAgIHJldHVybiBOb25lCisgICAgbG9nZ2VyLmRlYnVnKDIsICJGb3IgdXJsICVzIHJldHVybmluZyAlcyIgJSAodWQudXJsLCByZXN1bHQpKQorICAgIHJldHVybiByZXN1bHQKKworbWV0aG9kcyA9IFtdCit1cmxkYXRhX2NhY2hlID0ge30KK3NhdmVkX2hlYWRyZXZzID0ge30KKworZGVmIGZldGNoZXJfaW5pdChkKToKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZmV0Y2hlcnMgb25jZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGtub3duLgorICAgIENhbGxzIGJlZm9yZSB0aGlzIG11c3Qgbm90IGhpdCB0aGUgY2FjaGUuCisgICAgIiIiCisgICAgIyBXaGVuIHRvIGRyb3AgU0NNIGhlYWQgcmV2aXNpb25zIGNvbnRyb2xsZWQgYnkgdXNlciBwb2xpY3kKKyAgICBzcmNyZXZfcG9saWN5ID0gZC5nZXRWYXIoJ0JCX1NSQ1JFVl9QT0xJQ1knLCBUcnVlKSBvciAiY2xlYXIiCisgICAgaWYgc3JjcmV2X3BvbGljeSA9PSAiY2FjaGUiOgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIktlZXBpbmcgU1JDUkVWIGNhY2hlIGR1ZSB0byBjYWNoZSBwb2xpY3kgb2Y6ICVzIiwgc3JjcmV2X3BvbGljeSkKKyAgICBlbGlmIHNyY3Jldl9wb2xpY3kgPT0gImNsZWFyIjoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJDbGVhcmluZyBTUkNSRVYgY2FjaGUgZHVlIHRvIGNhY2hlIHBvbGljeSBvZjogJXMiLCBzcmNyZXZfcG9saWN5KQorICAgICAgICByZXZzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmZldGNoMi5zYXZlZF9oZWFkcmV2cyA9IHJldnMuaXRlbXMoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldnMuY2xlYXIoKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgU1JDUkVWIGNhY2hlIHBvbGljeSBvZjogJXMiICUgc3JjcmV2X3BvbGljeSkKKworICAgIF9jaGVja3N1bV9jYWNoZS5pbml0X2NhY2hlKGQpCisKKyAgICBmb3IgbSBpbiBtZXRob2RzOgorICAgICAgICBpZiBoYXNhdHRyKG0sICJpbml0Iik6CisgICAgICAgICAgICBtLmluaXQoZCkKKworZGVmIGZldGNoZXJfcGFyc2Vfc2F2ZShkKToKKyAgICBfY2hlY2tzdW1fY2FjaGUuc2F2ZV9leHRyYXMoZCkKKworZGVmIGZldGNoZXJfcGFyc2VfZG9uZShkKToKKyAgICBfY2hlY2tzdW1fY2FjaGUuc2F2ZV9tZXJnZShkKQorCitkZWYgZmV0Y2hlcl9jb21wYXJlX3JldmlzaW9ucyhkKToKKyAgICAiIiIKKyAgICBDb21wYXJlIHRoZSByZXZpc2lvbnMgaW4gdGhlIHBlcnNpc3RhbnQgY2FjaGUgd2l0aCBjdXJyZW50IHZhbHVlcyBhbmQKKyAgICByZXR1cm4gdHJ1ZS9mYWxzZSBvbiB3aGV0aGVyIHRoZXkndmUgY2hhbmdlZC4KKyAgICAiIiIKKworICAgIGRhdGEgPSBiYi5wZXJzaXN0X2RhdGEucGVyc2lzdCgnQkJfVVJJX0hFQURSRVZTJywgZCkuaXRlbXMoKQorICAgIGRhdGEyID0gYmIuZmV0Y2gyLnNhdmVkX2hlYWRyZXZzCisKKyAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICBmb3Iga2V5IGluIGRhdGE6CisgICAgICAgIGlmIGtleSBub3QgaW4gZGF0YTIgb3IgZGF0YTJba2V5XSAhPSBkYXRhW2tleV06CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIiVzIGNoYW5nZWQiLCBrZXkpCisgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiJXMgZGlkIG5vdCBjaGFuZ2UiLCBrZXkpCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBtaXJyb3JfZnJvbV9zdHJpbmcoZGF0YSk6CisgICAgcmV0dXJuIFsgaS5zcGxpdCgpIGZvciBpIGluIChkYXRhIG9yICIiKS5yZXBsYWNlKCdcXG4nLCdcbicpLnNwbGl0KCdcbicpIGlmIGkgXQorCitkZWYgdmVyaWZ5X2NoZWNrc3VtKHVkLCBkLCBwcmVjb21wdXRlZD17fSk6CisgICAgIiIiCisgICAgdmVyaWZ5IHRoZSBNRDUgYW5kIFNIQTI1NiBjaGVja3N1bSBmb3IgZG93bmxvYWRlZCBzcmMKKworICAgIFJhaXNlcyBhIEZldGNoRXJyb3IgaWYgb25lIG9yIGJvdGggb2YgdGhlIFNSQ19VUkkgY2hlY2tzdW1zIGRvIG5vdCBtYXRjaAorICAgIHRoZSBkb3dubG9hZGVkIGZpbGUsIG9yIGlmIEJCX1NUUklDVF9DSEVDS1NVTSBpcyBzZXQgYW5kIHRoZXJlIGFyZSBubworICAgIGNoZWNrc3VtcyBzcGVjaWZpZWQuCisKKyAgICBSZXR1cm5zIGEgZGljdCBvZiBjaGVja3N1bXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIGEgZG9uZSBzdGFtcCBmaWxlIGFuZAorICAgIHBhc3NlZCBpbiBhcyBwcmVjb21wdXRlZCBwYXJhbWV0ZXIgaW4gYSBsYXRlciBjYWxsIHRvIGF2b2lkIHJlLWNvbXB1dGluZworICAgIHRoZSBjaGVja3N1bXMgZnJvbSB0aGUgZmlsZS4gVGhpcyBhbGxvd3MgdmVyaWZ5aW5nIHRoZSBjaGVja3N1bXMgb2YgdGhlCisgICAgZmlsZSBhZ2FpbnN0IHRob3NlIGluIHRoZSByZWNpcGUgZWFjaCB0aW1lLCByYXRoZXIgdGhhbiBvbmx5IGFmdGVyCisgICAgZG93bmxvYWRpbmcuIFNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NzEuCisgICAgIiIiCisKKyAgICBfTUQ1X0tFWSA9ICJtZDUiCisgICAgX1NIQTI1Nl9LRVkgPSAic2hhMjU2IgorCisgICAgaWYgdWQuaWdub3JlX2NoZWNrc3VtcyBvciBub3QgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKToKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBpZiBfTUQ1X0tFWSBpbiBwcmVjb21wdXRlZDoKKyAgICAgICAgbWQ1ZGF0YSA9IHByZWNvbXB1dGVkW19NRDVfS0VZXQorICAgIGVsc2U6CisgICAgICAgIG1kNWRhdGEgPSBiYi51dGlscy5tZDVfZmlsZSh1ZC5sb2NhbHBhdGgpCisKKyAgICBpZiBfU0hBMjU2X0tFWSBpbiBwcmVjb21wdXRlZDoKKyAgICAgICAgc2hhMjU2ZGF0YSA9IHByZWNvbXB1dGVkW19TSEEyNTZfS0VZXQorICAgIGVsc2U6CisgICAgICAgIHNoYTI1NmRhdGEgPSBiYi51dGlscy5zaGEyNTZfZmlsZSh1ZC5sb2NhbHBhdGgpCisKKyAgICBpZiB1ZC5tZXRob2QucmVjb21tZW5kc19jaGVja3N1bSh1ZCk6CisgICAgICAgICMgSWYgc3RyaWN0IGNoZWNraW5nIGVuYWJsZWQgYW5kIG5laXRoZXIgc3VtIGRlZmluZWQsIHJhaXNlIGVycm9yCisgICAgICAgIHN0cmljdCA9IGQuZ2V0VmFyKCJCQl9TVFJJQ1RfQ0hFQ0tTVU0iLCBUcnVlKSBvciAiMCIKKyAgICAgICAgaWYgKHN0cmljdCA9PSAiMSIpIGFuZCBub3QgKHVkLm1kNV9leHBlY3RlZCBvciB1ZC5zaGEyNTZfZXhwZWN0ZWQpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdObyBjaGVja3N1bSBzcGVjaWZpZWQgZm9yICVzLCBwbGVhc2UgYWRkIGF0IGxlYXN0IG9uZSB0byB0aGUgcmVjaXBlOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiXG5TUkNfVVJJWyVzXSA9ICIlcyInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZC5zaGEyNTZfbmFtZSwgc2hhMjU2ZGF0YSkpCisgICAgICAgICAgICByYWlzZSBOb0NoZWNrc3VtRXJyb3IoJ01pc3NpbmcgU1JDX1VSSSBjaGVja3N1bScsIHVkLnVybCkKKworICAgICAgICAjIExvZyBtaXNzaW5nIHN1bXMgc28gdXNlciBjYW4gbW9yZSBlYXNpbHkgYWRkIHRoZW0KKyAgICAgICAgaWYgbm90IHVkLm1kNV9leHBlY3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIG1kNSBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQubWQ1X25hbWUsIG1kNWRhdGEpCisKKyAgICAgICAgaWYgbm90IHVkLnNoYTI1Nl9leHBlY3RlZDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdNaXNzaW5nIHNoYTI1NiBTUkNfVVJJIGNoZWNrc3VtIGZvciAlcywgY29uc2lkZXIgYWRkaW5nIHRvIHRoZSByZWNpcGU6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSVslc10gPSAiJXMiJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLmxvY2FscGF0aCwgdWQuc2hhMjU2X25hbWUsIHNoYTI1NmRhdGEpCisKKyAgICBtZDVtaXNtYXRjaCA9IEZhbHNlCisgICAgc2hhMjU2bWlzbWF0Y2ggPSBGYWxzZQorCisgICAgaWYgdWQubWQ1X2V4cGVjdGVkICE9IG1kNWRhdGE6CisgICAgICAgIG1kNW1pc21hdGNoID0gVHJ1ZQorCisgICAgaWYgdWQuc2hhMjU2X2V4cGVjdGVkICE9IHNoYTI1NmRhdGE6CisgICAgICAgIHNoYTI1Nm1pc21hdGNoID0gVHJ1ZQorCisgICAgIyBXZSB3YW50IHRvIGFsZXJ0IHRoZSB1c2VyIGlmIGEgY2hlY2tzdW0gaXMgZGVmaW5lZCBpbiB0aGUgcmVjaXBlIGJ1dAorICAgICMgaXQgZG9lcyBub3QgbWF0Y2guCisgICAgbXNnID0gIiIKKyAgICBtaXNtYXRjaCA9IEZhbHNlCisgICAgaWYgbWQ1bWlzbWF0Y2ggYW5kIHVkLm1kNV9leHBlY3RlZDoKKyAgICAgICAgbXNnID0gbXNnICsgIlxuRmlsZTogJyVzJyBoYXMgJXMgY2hlY2tzdW0gJXMgd2hlbiAlcyB3YXMgZXhwZWN0ZWQiICUgKHVkLmxvY2FscGF0aCwgJ21kNScsIG1kNWRhdGEsIHVkLm1kNV9leHBlY3RlZCkKKyAgICAgICAgbWlzbWF0Y2ggPSBUcnVlOworCisgICAgaWYgc2hhMjU2bWlzbWF0Y2ggYW5kIHVkLnNoYTI1Nl9leHBlY3RlZDoKKyAgICAgICAgbXNnID0gbXNnICsgIlxuRmlsZTogJyVzJyBoYXMgJXMgY2hlY2tzdW0gJXMgd2hlbiAlcyB3YXMgZXhwZWN0ZWQiICUgKHVkLmxvY2FscGF0aCwgJ3NoYTI1NicsIHNoYTI1NmRhdGEsIHVkLnNoYTI1Nl9leHBlY3RlZCkKKyAgICAgICAgbWlzbWF0Y2ggPSBUcnVlOworCisgICAgaWYgbWlzbWF0Y2g6CisgICAgICAgIG1zZyA9IG1zZyArICdcbklmIHRoaXMgY2hhbmdlIGlzIGV4cGVjdGVkIChlLmcuIHlvdSBoYXZlIHVwZ3JhZGVkIHRvIGEgbmV3IHZlcnNpb24gd2l0aG91dCB1cGRhdGluZyB0aGUgY2hlY2tzdW1zKSB0aGVuIHlvdSBjYW4gdXNlIHRoZXNlIGxpbmVzIHdpdGhpbiB0aGUgcmVjaXBlOlxuU1JDX1VSSVslc10gPSAiJXMiXG5TUkNfVVJJWyVzXSA9ICIlcyJcbk90aGVyd2lzZSB5b3Ugc2hvdWxkIHJldHJ5IHRoZSBkb3dubG9hZCBhbmQvb3IgY2hlY2sgd2l0aCB1cHN0cmVhbSB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlY29tZSBjb3JydXB0ZWQgb3Igb3RoZXJ3aXNlIHVuZXhwZWN0ZWRseSBtb2RpZmllZC5cbicgJSAodWQubWQ1X25hbWUsIG1kNWRhdGEsIHVkLnNoYTI1Nl9uYW1lLCBzaGEyNTZkYXRhKQorCisgICAgaWYgbGVuKG1zZyk6CisgICAgICAgIHJhaXNlIENoZWNrc3VtRXJyb3IoJ0NoZWNrc3VtIG1pc21hdGNoISVzJyAlIG1zZywgdWQudXJsLCBtZDVkYXRhKQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgX01ENV9LRVk6IG1kNWRhdGEsCisgICAgICAgIF9TSEEyNTZfS0VZOiBzaGEyNTZkYXRhCisgICAgfQorCisKK2RlZiB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBkLCBvcmlndWQ9Tm9uZSk6CisgICAgIiIiCisgICAgQ2hlY2sgd2hldGhlciB0aGUgZG9uZSBzdGFtcCBmaWxlIGhhcyB0aGUgcmlnaHQgY2hlY2tzdW1zIChpZiB0aGUgZmV0Y2gKKyAgICBtZXRob2Qgc3VwcG9ydHMgdGhlbSkuIElmIGl0IGRvZXNuJ3QsIGRlbGV0ZSB0aGUgZG9uZSBzdGFtcCBhbmQgZm9yY2UKKyAgICBhIHJlLWRvd25sb2FkLgorCisgICAgUmV0dXJucyBUcnVlLCBpZiB0aGUgZG9uZXN0YW1wIGV4aXN0cyBhbmQgaXMgdmFsaWQsIEZhbHNlIG90aGVyd2lzZS4gV2hlbgorICAgIHJldHVybmluZyBGYWxzZSwgYW55IGV4aXN0aW5nIGRvbmUgc3RhbXBzIGFyZSByZW1vdmVkLgorICAgICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5kb25lc3RhbXApOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIChub3QgdWQubWV0aG9kLnN1cHBvcnRzX2NoZWNrc3VtKHVkKSBvcgorICAgICAgICAob3JpZ3VkIGFuZCBub3Qgb3JpZ3VkLm1ldGhvZC5zdXBwb3J0c19jaGVja3N1bShvcmlndWQpKSk6CisgICAgICAgICMgZG9uZSBzdGFtcCBleGlzdHMsIGNoZWNrc3VtcyBub3Qgc3VwcG9ydGVkOyBhc3N1bWUgdGhlIGxvY2FsIGZpbGUgaXMKKyAgICAgICAgIyBjdXJyZW50CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQubG9jYWxwYXRoKToKKyAgICAgICAgIyBkb25lIHN0YW1wIGV4aXN0cywgYnV0IHRoZSBkb3dubG9hZGVkIGZpbGUgZG9lcyBub3Q7IHRoZSBkb25lIHN0YW1wCisgICAgICAgICMgbXVzdCBiZSBpbmNvcnJlY3QsIHJlLXRyaWdnZXIgdGhlIGRvd25sb2FkCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcHJlY29tcHV0ZWRfY2hlY2tzdW1zID0ge30KKyAgICAjIE9ubHkgcmUtdXNlIHRoZSBwcmVjb21wdXRlZCBjaGVja3N1bXMgaWYgdGhlIGRvbmVzdGFtcCBpcyBuZXdlciB0aGFuIHRoZQorICAgICMgZmlsZS4gRG8gbm90IHJlbHkgb24gdGhlIG10aW1lIG9mIGRpcmVjdG9yaWVzLCB0aG91Z2guIElmIHVkLmxvY2FscGF0aCBpcworICAgICMgYSBkaXJlY3RvcnksIHRoZXJlIHdpbGwgcHJvYmFibHkgbm90IGJlIGFueSBjaGVja3N1bXMgYW55d2F5LgorICAgIGlmIChvcy5wYXRoLmlzZGlyKHVkLmxvY2FscGF0aCkgb3IKKyAgICAgICAgICAgIG9zLnBhdGguZ2V0bXRpbWUodWQubG9jYWxwYXRoKSA8IG9zLnBhdGguZ2V0bXRpbWUodWQuZG9uZXN0YW1wKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJyYiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLlVucGlja2xlcihjYWNoZWZpbGUpCisgICAgICAgICAgICAgICAgcHJlY29tcHV0ZWRfY2hlY2tzdW1zLnVwZGF0ZShwaWNrbGVkLmxvYWQoKSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgIyBBdm9pZCB0aGUgd2FybmluZ3Mgb24gdGhlIHVwZ3JhZGUgcGF0aCBmcm9tIGVtdHB5IGRvbmUgc3RhbXAKKyAgICAgICAgICAgICMgZmlsZXMgdG8gdGhvc2UgY29udGFpbmluZyB0aGUgY2hlY2tzdW1zLgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgICMgSWdub3JlIGVycm9ycywgdGhleSBhcmVuJ3QgZmF0YWwKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiQ291bGRuJ3QgbG9hZCBjaGVja3N1bXMgZnJvbSBkb25lc3RhbXAgJXM6ICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG1zZzogJXMpIiAlICh1ZC5kb25lc3RhbXAsIHR5cGUoZSkuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGUpKSkKKworICAgIHRyeToKKyAgICAgICAgY2hlY2tzdW1zID0gdmVyaWZ5X2NoZWNrc3VtKHVkLCBkLCBwcmVjb21wdXRlZF9jaGVja3N1bXMpCisgICAgICAgICMgSWYgdGhlIGNhY2hlIGZpbGUgZGlkIG5vdCBoYXZlIHRoZSBjaGVja3N1bXMsIGNvbXB1dGUgYW5kIHN0b3JlIHRoZW0KKyAgICAgICAgIyBhcyBhbiB1cGdyYWRlIHBhdGggZnJvbSB0aGUgcHJldmlvdXMgZG9uZSBzdGFtcCBmaWxlIGZvcm1hdC4KKyAgICAgICAgaWYgY2hlY2tzdW1zICE9IHByZWNvbXB1dGVkX2NoZWNrc3VtczoKKyAgICAgICAgICAgIHdpdGggb3Blbih1ZC5kb25lc3RhbXAsICJ3YiIpIGFzIGNhY2hlZmlsZToKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLlBpY2tsZXIoY2FjaGVmaWxlLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBDaGVja3N1bUVycm9yIGFzIGU6CisgICAgICAgICMgQ2hlY2tzdW1zIGZhaWxlZCB0byB2ZXJpZnksIHRyaWdnZXIgcmUtZG93bmxvYWQgYW5kIHJlbW92ZSB0aGUKKyAgICAgICAgIyBpbmNvcnJlY3Qgc3RhbXAgZmlsZS4KKyAgICAgICAgbG9nZ2VyLndhcm4oIkNoZWNrc3VtIG1pc21hdGNoIGZvciBsb2NhbCBmaWxlICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJDbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSB1ZC5sb2NhbHBhdGgpCisgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHVwZGF0ZV9zdGFtcCh1ZCwgZCk6CisgICAgIiIiCisgICAgICAgIGRvbmVzdGFtcCBpcyBmaWxlIHN0YW1wIGluZGljYXRpbmcgdGhlIHdob2xlIGZldGNoaW5nIGlzIGRvbmUKKyAgICAgICAgdGhpcyBmdW5jdGlvbiB1cGRhdGUgdGhlIHN0YW1wIGFmdGVyIHZlcmlmeWluZyB0aGUgY2hlY2tzdW0KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5kb25lc3RhbXApOgorICAgICAgICAjIFRvdWNoIHRoZSBkb25lIHN0YW1wIGZpbGUgdG8gc2hvdyBhY3RpdmUgdXNlIG9mIHRoZSBkb3dubG9hZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51dGltZSh1ZC5kb25lc3RhbXAsIE5vbmUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgRXJyb3JzIGFyZW4ndCBmYXRhbCBoZXJlCisgICAgICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tzdW1zID0gdmVyaWZ5X2NoZWNrc3VtKHVkLCBkKQorICAgICAgICAjIFN0b3JlIHRoZSBjaGVja3N1bXMgZm9yIGxhdGVyIHJlLXZlcmlmaWNhdGlvbiBhZ2FpbnN0IHRoZSByZWNpcGUKKyAgICAgICAgd2l0aCBvcGVuKHVkLmRvbmVzdGFtcCwgIndiIikgYXMgY2FjaGVmaWxlOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5QaWNrbGVyKGNhY2hlZmlsZSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisgICAgICAgICAgICBwLmR1bXAoY2hlY2tzdW1zKQorCitkZWYgc3VicHJvY2Vzc19zZXR1cCgpOgorICAgICMgUHl0aG9uIGluc3RhbGxzIGEgU0lHUElQRSBoYW5kbGVyIGJ5IGRlZmF1bHQuIFRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdAorICAgICMgbm9uLVB5dGhvbiBzdWJwcm9jZXNzZXMgZXhwZWN0LgorICAgICMgU0lHUElQRSBlcnJvcnMgYXJlIGtub3duIGlzc3VlcyB3aXRoIGd6aXAvYmFzaAorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1BJUEUsIHNpZ25hbC5TSUdfREZMKQorCitkZWYgZ2V0X2F1dG9yZXYoZCk6CisgICAgIyAgb25seSBub3QgY2FjaGUgc3JjIHJldiBpbiBhdXRvcmV2IGNhc2UKKyAgICBpZiBkLmdldFZhcignQkJfU1JDUkVWX1BPTElDWScsIFRydWUpICE9ICJjYWNoZSI6CisgICAgICAgIGQuc2V0VmFyKCdfX0JCX0RPTlRfQ0FDSEUnLCAnMScpCisgICAgcmV0dXJuICJBVVRPSU5DIgorCitkZWYgZ2V0X3NyY3JldihkLCBtZXRob2RfbmFtZT0nc29ydGFibGVfcmV2aXNpb24nKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHJldnNpb24gc3RyaW5nLCB1c3VhbGx5IGZvciB1c2UgaW4gdGhlIHZlcnNpb24gc3RyaW5nIChQVikgb2YgdGhlIGN1cnJlbnQgcGFja2FnZQorICAgIE1vc3QgcGFja2FnZXMgdXN1YWxseSBvbmx5IGhhdmUgb25lIFNDTSBzbyB3ZSBqdXN0IHBhc3Mgb24gdGhlIGNhbGwuCisgICAgSW4gdGhlIG11bHRpIFNDTSBjYXNlLCB3ZSBidWlsZCBhIHZhbHVlIGJhc2VkIG9uIFNSQ1JFVl9GT1JNQVQgd2hpY2ggbXVzdAorICAgIGhhdmUgYmVlbiBzZXQuCisKKyAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgcHV0IHRoZSBzdHJpbmcgIkFVVE9JTkMrIiBpbnRvIHJldHVybiB2YWx1ZSBpZiB0aGUgcmV2aXNpb25zIGFyZSBub3QgCisgICAgaW5jcmVtZW50YWwsIG90aGVyIGNvZGUgaXMgdGhlbiByZXNwb25zaWJsZSBmb3IgdHVybmluZyB0aGF0IGludG8gYW4gaW5jcmVhc2luZyB2YWx1ZSAoaWYgbmVlZGVkKQorCisgICAgQSBtZXRob2RfbmFtZSBjYW4gYmUgc3VwcGxpZWQgdG8gcmV0cmlldmUgYW4gYWx0ZXJuYXRpdmVseSBmb3JtYXR0ZWQgcmV2aXNpb24gZnJvbSBhIGZldGNoZXIsIGlmCisgICAgdGhhdCBmZXRjaGVyIHByb3ZpZGVzIGEgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyBzb3J0YWJsZV9yZXZpc2lvbi4KKyAgICAiIiIKKworICAgIHNjbXMgPSBbXQorICAgIGZldGNoZXIgPSBGZXRjaChkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCksIGQpCisgICAgdXJsZGF0YSA9IGZldGNoZXIudWQKKyAgICBmb3IgdSBpbiB1cmxkYXRhOgorICAgICAgICBpZiB1cmxkYXRhW3VdLm1ldGhvZC5zdXBwb3J0c19zcmNyZXYoKToKKyAgICAgICAgICAgIHNjbXMuYXBwZW5kKHUpCisKKyAgICBpZiBsZW4oc2NtcykgPT0gMDoKKyAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiU1JDUkVWIHdhcyB1c2VkIHlldCBubyB2YWxpZCBTQ00gd2FzIGZvdW5kIGluIFNSQ19VUkkiKQorCisgICAgaWYgbGVuKHNjbXMpID09IDEgYW5kIGxlbih1cmxkYXRhW3NjbXNbMF1dLm5hbWVzKSA9PSAxOgorICAgICAgICBhdXRvaW5jLCByZXYgPSBnZXRhdHRyKHVybGRhdGFbc2Ntc1swXV0ubWV0aG9kLCBtZXRob2RfbmFtZSkodXJsZGF0YVtzY21zWzBdXSwgZCwgdXJsZGF0YVtzY21zWzBdXS5uYW1lc1swXSkKKyAgICAgICAgaWYgbGVuKHJldikgPiAxMDoKKyAgICAgICAgICAgIHJldiA9IHJldls6MTBdCisgICAgICAgIGlmIGF1dG9pbmM6CisgICAgICAgICAgICByZXR1cm4gIkFVVE9JTkMrIiArIHJldgorICAgICAgICByZXR1cm4gcmV2CisKKyAgICAjCisgICAgIyBNdXRpcGxlIFNDTXMgYXJlIGluIFNSQ19VUkkgc28gd2UgcmVzb3J0IHRvIFNSQ1JFVl9GT1JNQVQKKyAgICAjCisgICAgZm9ybWF0ID0gZC5nZXRWYXIoJ1NSQ1JFVl9GT1JNQVQnLCBUcnVlKQorICAgIGlmIG5vdCBmb3JtYXQ6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlRoZSBTUkNSRVZfRk9STUFUIHZhcmlhYmxlIG11c3QgYmUgc2V0IHdoZW4gbXVsdGlwbGUgU0NNcyBhcmUgdXNlZC4iKQorCisgICAgc2VlbmF1dG9pbmMgPSBGYWxzZQorICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgdWQgPSB1cmxkYXRhW3NjbV0KKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBhdXRvaW5jLCByZXYgPSBnZXRhdHRyKHVkLm1ldGhvZCwgbWV0aG9kX25hbWUpKHVkLCBkLCBuYW1lKQorICAgICAgICAgICAgc2VlbmF1dG9pbmMgPSBzZWVuYXV0b2luYyBvciBhdXRvaW5jCisgICAgICAgICAgICBpZiBsZW4ocmV2KSA+IDEwOgorICAgICAgICAgICAgICAgIHJldiA9IHJldls6MTBdCisgICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShuYW1lLCByZXYpCisgICAgaWYgc2VlbmF1dG9pbmM6CisgICAgICAgZm9ybWF0ID0gIkFVVE9JTkMrIiArIGZvcm1hdAorCisgICAgcmV0dXJuIGZvcm1hdAorCitkZWYgbG9jYWxwYXRoKHVybCwgZCk6CisgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJsXSwgZCkKKyAgICByZXR1cm4gZmV0Y2hlci5sb2NhbHBhdGgodXJsKQorCitkZWYgcnVuZmV0Y2hjbWQoY21kLCBkLCBxdWlldD1GYWxzZSwgY2xlYW51cD1Ob25lKToKKyAgICAiIiIKKyAgICBSdW4gY21kIHJldHVybmluZyB0aGUgY29tbWFuZCBvdXRwdXQKKyAgICBSYWlzZSBhbiBlcnJvciBpZiBpbnRlcnJ1cHRlZCBvciBjbWQgZmFpbHMKKyAgICBPcHRpb25hbGx5IGVjaG8gY29tbWFuZCBvdXRwdXQgdG8gc3Rkb3V0CisgICAgT3B0aW9uYWxseSByZW1vdmUgdGhlIGZpbGVzL2RpcmVjdG9yaWVzIGxpc3RlZCBpbiBjbGVhbnVwIHVwb24gZmFpbHVyZQorICAgICIiIgorCisgICAgIyBOZWVkIHRvIGV4cG9ydCBQQVRIIGFzIGJpbmFyeSBjb3VsZCBiZSBpbiBtZXRhZGF0YSBwYXRocworICAgICMgcmF0aGVyIHRoYW4gaG9zdCBwcm92aWRlZAorICAgICMgQWxzbyBpbmNsdWRlIHNvbWUgb3RoZXIgdmFyaWFibGVzLgorICAgICMgRklYTUU6IFNob3VsZCByZWFsbHkgaW5jbHVkZSBhbGwgZXhwb3J0IHZhcmFpYWJsZXM/CisgICAgZXhwb3J0dmFycyA9IFsnSE9NRScsICdQQVRIJywKKyAgICAgICAgICAgICAgICAgICdIVFRQX1BST1hZJywgJ2h0dHBfcHJveHknLAorICAgICAgICAgICAgICAgICAgJ0hUVFBTX1BST1hZJywgJ2h0dHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdGVFBTX1BST1hZJywgJ2Z0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgJ05PX1BST1hZJywgJ25vX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICdHSVRfUFJPWFlfQ09NTUFORCcsCisgICAgICAgICAgICAgICAgICAnR0lUX1NTTF9DQUlORk8nLAorICAgICAgICAgICAgICAgICAgJ0dJVF9TTUFSVF9IVFRQJywKKyAgICAgICAgICAgICAgICAgICdTU0hfQVVUSF9TT0NLJywgJ1NTSF9BR0VOVF9QSUQnLAorICAgICAgICAgICAgICAgICAgJ1NPQ0tTNV9VU0VSJywgJ1NPQ0tTNV9QQVNTV0QnXQorCisgICAgaWYgbm90IGNsZWFudXA6CisgICAgICAgIGNsZWFudXAgPSBbXQorCisgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGNtZCA9ICdleHBvcnQgJyArIHZhciArICc9XCIlc1wiOyAlcycgJSAodmFsLCBjbWQpCisKKyAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBjbWQpCisKKyAgICBzdWNjZXNzID0gRmFsc2UKKyAgICBlcnJvcl9tZXNzYWdlID0gIiIKKworICAgIHRyeToKKyAgICAgICAgKG91dHB1dCwgZXJyb3JzKSA9IGJiLnByb2Nlc3MucnVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICBleGNlcHQgYmIucHJvY2Vzcy5Ob3RGb3VuZEVycm9yIGFzIGU6CisgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmV0Y2ggY29tbWFuZCAlcyIgJSAoZS5jb21tYW5kKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgIGlmIGUuc3Rkb3V0OgorICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzXG4lcyIgJSAoZS5zdGRvdXQsIGUuc3RkZXJyKQorICAgICAgICBlbGlmIGUuc3RkZXJyOgorICAgICAgICAgICAgb3V0cHV0ID0gIm91dHB1dDpcbiVzIiAlIGUuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSAibm8gb3V0cHV0IgorICAgICAgICBlcnJvcl9tZXNzYWdlID0gIkZldGNoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzLCAlcyIgJSAoZS5leGl0Y29kZSwgb3V0cHV0KQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGU6CisgICAgICAgIGVycm9yX21lc3NhZ2UgPSAiRmV0Y2ggY29tbWFuZCAlcyBjb3VsZCBub3QgYmUgcnVuOlxuJXMiICUgKGUuY29tbWFuZCwgZS5tc2cpCisgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgIGZvciBmIGluIGNsZWFudXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGYsIFRydWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcihlcnJvcl9tZXNzYWdlKQorCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgaW5mbyA9ICIiLCB1cmwgPSBOb25lKToKKyAgICAiIiIKKyAgICBsb2cgcmVtb3RlIG5ldHdvcmsgYWNjZXNzLCBhbmQgZXJyb3IgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQKKyAgICAiIiIKKyAgICBpZiBkLmdldFZhcigiQkJfTk9fTkVUV09SSyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmFpc2UgTmV0d29ya0FjY2Vzcyh1cmwsIGluZm8pCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJGZXRjaGVyIGFjY2Vzc2VkIHRoZSBuZXR3b3JrIHdpdGggdGhlIGNvbW1hbmQgJXMiICUgaW5mbykKKworZGVmIGJ1aWxkX21pcnJvcnVyaXMob3JpZ3VkLCBtaXJyb3JzLCBsZCk6CisgICAgdXJpcyA9IFtdCisgICAgdWRzID0gW10KKworICAgIHJlcGxhY2VtZW50cyA9IHt9CisgICAgcmVwbGFjZW1lbnRzWyJUWVBFIl0gPSBvcmlndWQudHlwZQorICAgIHJlcGxhY2VtZW50c1siSE9TVCJdID0gb3JpZ3VkLmhvc3QKKyAgICByZXBsYWNlbWVudHNbIlBBVEgiXSA9IG9yaWd1ZC5wYXRoCisgICAgcmVwbGFjZW1lbnRzWyJCQVNFTkFNRSJdID0gb3JpZ3VkLnBhdGguc3BsaXQoIi8iKVstMV0KKyAgICByZXBsYWNlbWVudHNbIk1JUlJPUk5BTUUiXSA9IG9yaWd1ZC5ob3N0LnJlcGxhY2UoJzonLCcuJykgKyBvcmlndWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKS5yZXBsYWNlKCcqJywgJy4nKQorCisgICAgZGVmIGFkZHVyaSh1ZCwgdXJpcywgdWRzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gbWlycm9yczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAoZmluZCwgcmVwbGFjZSkgPSBsaW5lCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbmV3dXJpID0gdXJpX3JlcGxhY2UodWQsIGZpbmQsIHJlcGxhY2UsIHJlcGxhY2VtZW50cywgbGQpCisgICAgICAgICAgICBpZiBub3QgbmV3dXJpIG9yIG5ld3VyaSBpbiB1cmlzIG9yIG5ld3VyaSA9PSBvcmlndWQudXJsOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCB0cnVzdGVkX25ldHdvcmsobGQsIG5ld3VyaSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNaXJyb3IgJXMgbm90IGluIHRoZSBsaXN0IG9mIHRydXN0ZWQgbmV0d29ya3MsIHNraXBwaW5nIiAlICAobmV3dXJpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV3dWQgPSBGZXRjaERhdGEobmV3dXJpLCBsZCkKKyAgICAgICAgICAgICAgICBuZXd1ZC5zZXR1cF9sb2NhbHBhdGgobGQpCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIk1pcnJvciBmZXRjaCBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpIiAlIChuZXd1cmksIG9yaWd1ZC51cmwpKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCBzdHIoZSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIHNldHVwX2xvY2FscGF0aCBvZiBmaWxlOi8vIHVybHMgbWF5IGZhaWwsIHdlIHNob3VsZCBzdGlsbCBzZWUgCisgICAgICAgICAgICAgICAgICAgICMgaWYgbWlycm9ycyBvZiB0aGUgdXJsIGV4aXN0CisgICAgICAgICAgICAgICAgICAgIGFkZHVyaShuZXd1ZCwgdXJpcywgdWRzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgCisgICAgICAgICAgICB1cmlzLmFwcGVuZChuZXd1cmkpCisgICAgICAgICAgICB1ZHMuYXBwZW5kKG5ld3VkKQorCisgICAgICAgICAgICBhZGR1cmkobmV3dWQsIHVyaXMsIHVkcykKKworICAgIGFkZHVyaShvcmlndWQsIHVyaXMsIHVkcykKKworICAgIHJldHVybiB1cmlzLCB1ZHMKKworZGVmIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIHN1ZmZpeCk6CisgICAgIiIiCisgICAgUmVuYW1lcyBmaWxlcyB0byBoYXZlIHN1ZmZpeCBmcm9tIHBhcmFtZXRlcgorICAgICIiIgorCisgICAgaWYgdWQubG9jYWxwYXRoIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgbmV3X2xvY2FscGF0aCA9ICIlc19iYWQtY2hlY2tzdW1fJXMiICUgKHVkLmxvY2FscGF0aCwgc3VmZml4KQorICAgIGJiLndhcm4oIlJlbmFtaW5nICVzIHRvICVzIiAlICh1ZC5sb2NhbHBhdGgsIG5ld19sb2NhbHBhdGgpKQorICAgIGJiLnV0aWxzLm1vdmVmaWxlKHVkLmxvY2FscGF0aCwgbmV3X2xvY2FscGF0aCkKKworCitkZWYgdHJ5X21pcnJvcl91cmwoZmV0Y2gsIG9yaWd1ZCwgdWQsIGxkLCBjaGVjayA9IEZhbHNlKToKKyAgICAjIFJldHVybiBvZiBOb25lIG9yIGEgdmFsdWUgbWVhbnMgd2UncmUgZmluaXNoZWQKKyAgICAjIEZhbHNlIG1lYW5zIHRyeSBhbm90aGVyIHVybAorICAgIHRyeToKKyAgICAgICAgaWYgY2hlY2s6CisgICAgICAgICAgICBmb3VuZCA9IHVkLm1ldGhvZC5jaGVja3N0YXR1cyhmZXRjaCwgdWQsIGxkKQorICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBvcy5jaGRpcihsZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgIGlmIG5vdCB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBsZCwgb3JpZ3VkKSBvciB1ZC5tZXRob2QubmVlZF91cGRhdGUodWQsIGxkKToKKyAgICAgICAgICAgIHVkLm1ldGhvZC5kb3dubG9hZCh1ZCwgbGQpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHVkLm1ldGhvZCwiYnVpbGRfbWlycm9yX2RhdGEiKToKKyAgICAgICAgICAgICAgICB1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEodWQsIGxkKQorCisgICAgICAgIGlmIG5vdCB1ZC5sb2NhbHBhdGggb3Igbm90IG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB1ZC5sb2NhbHBhdGggPT0gb3JpZ3VkLmxvY2FscGF0aDoKKyAgICAgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKworICAgICAgICAjIFdlIG1heSBiZSBvYnRhaW5pbmcgYSBtaXJyb3IgdGFyYmFsbCB3aGljaCBuZWVkcyBmdXJ0aGVyIHByb2Nlc3NpbmcgYnkgdGhlIHJlYWwgZmV0Y2hlcgorICAgICAgICAjIElmIHRoYXQgdGFyYmFsbCBpcyBhIGxvY2FsIGZpbGU6Ly8gd2UgbmVlZCB0byBwcm92aWRlIGEgc3ltbGluayB0byBpdAorICAgICAgICBkbGRpciA9IGxkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgb3JpZ3VkLm1pcnJvcnRhcmJhbGwgYW5kIG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKSA9PSBvcy5wYXRoLmJhc2VuYW1lKG9yaWd1ZC5taXJyb3J0YXJiYWxsKSBcCisgICAgICAgICAgICAgICAgYW5kIG9zLnBhdGguYmFzZW5hbWUodWQubG9jYWxwYXRoKSAhPSBvcy5wYXRoLmJhc2VuYW1lKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgIyBDcmVhdGUgZG9uZXN0YW1wIGluIG9sZCBmb3JtYXQgdG8gYXZvaWQgdHJpZ2dlcmluZyBhIHJlLWRvd25sb2FkCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHVkLmRvbmVzdGFtcCkpCisgICAgICAgICAgICBvcGVuKHVkLmRvbmVzdGFtcCwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRsZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHVkLmxvY2FscGF0aCkpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdCk6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayh1ZC5sb2NhbHBhdGgsIGRlc3QpCisgICAgICAgICAgICBpZiBub3QgdmVyaWZ5X2RvbmVzdGFtcChvcmlndWQsIGxkKSBvciBvcmlndWQubWV0aG9kLm5lZWRfdXBkYXRlKG9yaWd1ZCwgbGQpOgorICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuZG93bmxvYWQob3JpZ3VkLCBsZCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9yaWd1ZC5tZXRob2QsImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgICAgIG9yaWd1ZC5tZXRob2QuYnVpbGRfbWlycm9yX2RhdGEob3JpZ3VkLCBsZCkKKyAgICAgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKyAgICAgICAgIyBPdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBhIGxvY2FsIGZpbGU6Ly8gYW5kIHdlIHN5bWxpbmsgdG8gaXQKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9yaWd1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3JpZ3VkLmxvY2FscGF0aCk6CisgICAgICAgICAgICAgICAgIyBCcm9rZW4gc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgIG9zLnVubGluayhvcmlndWQubG9jYWxwYXRoKQorCisgICAgICAgICAgICBvcy5zeW1saW5rKHVkLmxvY2FscGF0aCwgb3JpZ3VkLmxvY2FscGF0aCkKKyAgICAgICAgdXBkYXRlX3N0YW1wKG9yaWd1ZCwgbGQpCisgICAgICAgIHJldHVybiB1ZC5sb2NhbHBhdGgKKworICAgIGV4Y2VwdCBiYi5mZXRjaDIuTmV0d29ya0FjY2VzczoKKyAgICAgICAgcmFpc2UKKworICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIk1pcnJvciBjaGVja3N1bSBmYWlsdXJlIGZvciB1cmwgJXMgKG9yaWdpbmFsIHVybDogJXMpXG5DbGVhbmluZyBhbmQgdHJ5aW5nIGFnYWluLiIgJSAodWQudXJsLCBvcmlndWQudXJsKSkKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKHN0cihlKSkKKyAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBOb0NoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTWlycm9yIGZldGNoIGZhaWx1cmUgZm9yIHVybCAlcyAob3JpZ2luYWwgdXJsOiAlcykiICUgKHVkLnVybCwgb3JpZ3VkLnVybCkpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1ZC5tZXRob2QuY2xlYW4odWQsIGxkKQorICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgdHJ5X21pcnJvcnMoZmV0Y2gsIGQsIG9yaWd1ZCwgbWlycm9ycywgY2hlY2sgPSBGYWxzZSk6CisgICAgIiIiCisgICAgVHJ5IHRvIHVzZSBhIG1pcnJvcmVkIHZlcnNpb24gb2YgdGhlIHNvdXJjZXMuCisgICAgVGhpcyBtZXRob2Qgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGxlZCBiZWZvcmUgdGhlIGZldGNoZXJzIGdvLgorCisgICAgZCBJcyBhIGJiLmRhdGEgaW5zdGFuY2UKKyAgICB1cmkgaXMgdGhlIG9yaWdpbmFsIHVyaSB3ZSdyZSB0cnlpbmcgdG8gZG93bmxvYWQKKyAgICBtaXJyb3JzIGlzIHRoZSBsaXN0IG9mIG1pcnJvcnMgd2UncmUgZ29pbmcgdG8gdHJ5CisgICAgIiIiCisgICAgbGQgPSBkLmNyZWF0ZUNvcHkoKQorCisgICAgdXJpcywgdWRzID0gYnVpbGRfbWlycm9ydXJpcyhvcmlndWQsIG1pcnJvcnMsIGxkKQorCisgICAgZm9yIGluZGV4LCB1cmkgaW4gZW51bWVyYXRlKHVyaXMpOgorICAgICAgICByZXQgPSB0cnlfbWlycm9yX3VybChmZXRjaCwgb3JpZ3VkLCB1ZHNbaW5kZXhdLCBsZCwgY2hlY2spCisgICAgICAgIGlmIHJldCAhPSBGYWxzZToKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgdHJ1c3RlZF9uZXR3b3JrKGQsIHVybCk6CisgICAgIiIiCisgICAgVXNlIGEgdHJ1c3RlZCB1cmwgZHVyaW5nIGRvd25sb2FkIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCBhbmQKKyAgICBCQl9BTExPV0VEX05FVFdPUktTIGlzIHNldCBnbG9iYWxseSBvciBmb3IgYSBzcGVjaWZpYyByZWNpcGUuCisgICAgTm90ZTogbW9kaWZpZXMgU1JDX1VSSSAmIG1pcnJvcnMuCisgICAgIiIiCisgICAgaWYgZC5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBwa2duYW1lID0gZC5leHBhbmQoZC5nZXRWYXIoJ1BOJywgRmFsc2UpKQorICAgIHRydXN0ZWRfaG9zdHMgPSBkLmdldFZhckZsYWcoJ0JCX0FMTE9XRURfTkVUV09SS1MnLCBwa2duYW1lKQorCisgICAgaWYgbm90IHRydXN0ZWRfaG9zdHM6CisgICAgICAgIHRydXN0ZWRfaG9zdHMgPSBkLmdldFZhcignQkJfQUxMT1dFRF9ORVRXT1JLUycsIFRydWUpCisKKyAgICAjIE5vdCBlbmFibGVkLgorICAgIGlmIG5vdCB0cnVzdGVkX2hvc3RzOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgc2NoZW1lLCBuZXR3b3JrLCBwYXRoLCB1c2VyLCBwYXNzd2QsIHBhcmFtID0gZGVjb2RldXJsKHVybCkKKworICAgIGlmIG5vdCBuZXR3b3JrOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgbmV0d29yayA9IG5ldHdvcmsubG93ZXIoKQorCisgICAgZm9yIGhvc3QgaW4gdHJ1c3RlZF9ob3N0cy5zcGxpdCgiICIpOgorICAgICAgICBob3N0ID0gaG9zdC5sb3dlcigpCisgICAgICAgIGlmIGhvc3Quc3RhcnRzd2l0aCgiKi4iKSBhbmQgKCIuIiArIG5ldHdvcmspLmVuZHN3aXRoKGhvc3RbMTpdKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIGhvc3QgPT0gbmV0d29yazoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHNyY3Jldl9pbnRlcm5hbF9oZWxwZXIodWQsIGQsIG5hbWUpOgorICAgICIiIgorICAgIFJldHVybjoKKyAgICAgICAgYSkgYSBzb3VyY2UgcmV2aXNpb24gaWYgc3BlY2lmaWVkCisgICAgICAgIGIpIGxhdGVzdCByZXZpc2lvbiBpZiBTUkNSRVY9IkFVVE9JTkMiCisgICAgICAgIGMpIE5vbmUgaWYgbm90IHNwZWNpZmllZAorICAgICIiIgorCisgICAgc3JjcmV2ID0gTm9uZQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBhdHRlbXB0cyA9IFtdCisgICAgaWYgbmFtZSAhPSAnJyBhbmQgcG46CisgICAgICAgIGF0dGVtcHRzLmFwcGVuZCgiU1JDUkVWXyVzX3BuLSVzIiAlIChuYW1lLCBwbikpCisgICAgaWYgbmFtZSAhPSAnJzoKKyAgICAgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVZfJXMiICUgbmFtZSkKKyAgICBpZiBwbjoKKyAgICAgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVZfcG4tJXMiICUgcG4pCisgICAgYXR0ZW1wdHMuYXBwZW5kKCJTUkNSRVYiKQorCisgICAgZm9yIGEgaW4gYXR0ZW1wdHM6CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKGEsIFRydWUpICAgICAgICAgICAgICAKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBzcmNyZXYgIT0gIklOVkFMSUQiOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmICdyZXYnIGluIHVkLnBhcm0gYW5kICd0YWcnIGluIHVkLnBhcm06CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlBsZWFzZSBzcGVjaWZ5IGEgO3Jldj0gcGFyYW1ldGVyIG9yIGEgO3RhZz0gcGFyYW1ldGVyIGluIHRoZSB1cmwgJXMgYnV0IG5vdCBib3RoLiIgJSAodWQudXJsKSkKKworICAgIGlmICdyZXYnIGluIHVkLnBhcm0gb3IgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHBhcm1yZXYgPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFybXJldiA9IHVkLnBhcm1bJ3RhZyddCisgICAgICAgIGlmIHNyY3JldiA9PSAiSU5WQUxJRCIgb3Igbm90IHNyY3JldjoKKyAgICAgICAgICAgIHJldHVybiBwYXJtcmV2CisgICAgICAgIGlmIHNyY3JldiAhPSBwYXJtcmV2OgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiQ29uZmxpY3RpbmcgcmV2aXNpb25zICglcyBmcm9tIFNSQ1JFViBhbmQgJXMgZnJvbSB0aGUgdXJsKSBmb3VuZCwgcGxlYXNlIHNwY2lmeSBvbmUgdmFsaWQgdmFsdWUiICUgKHNyY3JldiwgcGFybXJldikpCisgICAgICAgIHJldHVybiBwYXJtcmV2CisKKyAgICBpZiBzcmNyZXYgPT0gIklOVkFMSUQiIG9yIG5vdCBzcmNyZXY6CisgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlBsZWFzZSBzZXQgYSB2YWxpZCBTUkNSRVYgZm9yIHVybCAlcyAocG9zc2libGUga2V5IG5hbWVzIGFyZSAlcywgb3IgdXNlIGEgO3Jldj1YIFVSTCBwYXJhbWV0ZXIpIiAlIChzdHIoYXR0ZW1wdHMpLCB1ZC51cmwpLCB1ZC51cmwpCisgICAgaWYgc3JjcmV2ID09ICJBVVRPSU5DIjoKKyAgICAgICAgc3JjcmV2ID0gdWQubWV0aG9kLmxhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKworICAgIHJldHVybiBzcmNyZXYKKworZGVmIGdldF9jaGVja3N1bV9maWxlX2xpc3QoZCk6CisgICAgIiIiIEdldCBhIGxpc3Qgb2YgZmlsZXMgY2hlY2tzdW0gaW4gU1JDX1VSSQorCisgICAgUmV0dXJucyB0aGUgcmVzb2x2ZWQgbG9jYWwgcGF0aHMgb2YgYWxsIGxvY2FsIGZpbGUgZW50cmllcyBpbgorICAgIFNSQ19VUkkgYXMgYSBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nCisgICAgIiIiCisgICAgZmV0Y2ggPSBGZXRjaChbXSwgZCwgY2FjaGUgPSBGYWxzZSwgbG9jYWxvbmx5ID0gVHJ1ZSkKKworICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIGZpbGVsaXN0ID0gW10KKyAgICBmb3IgdSBpbiBmZXRjaC51cmxzOgorICAgICAgICB1ZCA9IGZldGNoLnVkW3VdCisKKyAgICAgICAgaWYgdWQgYW5kIGlzaW5zdGFuY2UodWQubWV0aG9kLCBsb2NhbC5Mb2NhbCk6CisgICAgICAgICAgICBwYXRocyA9IHVkLm1ldGhvZC5sb2NhbHBhdGhzKHVkLCBkKQorICAgICAgICAgICAgZm9yIGYgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgcHRoID0gdWQuZGVjb2RlZHVybAorICAgICAgICAgICAgICAgIGlmICcqJyBpbiBwdGg6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKGYpLCBwdGgpCisgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKGRsX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGxvY2FsIGZldGNoZXIncyBiZWhhdmlvdXIgaXMgdG8gcmV0dXJuIGEgcGF0aCB1bmRlciBETF9ESVIgaWYgaXQgY291bGRuJ3QgZmluZCB0aGUgZmlsZSBhbnl3aGVyZSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiR2V0dGluZyBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogZmlsZSBub3QgZm91bmQgZXhjZXB0IGluIERMX0RJUiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG9zLnBhdGguYmFzZW5hbWUoZikpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVW5hYmxlIHRvIGdldCBjaGVja3N1bSBmb3IgJXMgU1JDX1VSSSBlbnRyeSAlczogZmlsZSBjb3VsZCBub3QgYmUgZm91bmQiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBvcy5wYXRoLmJhc2VuYW1lKGYpKSkKKyAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoZiArICI6IiArIHN0cihvcy5wYXRoLmV4aXN0cyhmKSkpCisKKyAgICByZXR1cm4gIiAiLmpvaW4oZmlsZWxpc3QpCisKK2RlZiBnZXRfZmlsZV9jaGVja3N1bXMoZmlsZWxpc3QsIHBuKToKKyAgICAiIiJHZXQgYSBsaXN0IG9mIHRoZSBjaGVja3N1bXMgZm9yIGEgbGlzdCBvZiBsb2NhbCBmaWxlcworCisgICAgUmV0dXJucyB0aGUgY2hlY2tzdW1zIGZvciBhIGxpc3Qgb2YgbG9jYWwgZmlsZXMsIGNhY2hpbmcgdGhlIHJlc3VsdHMgYXMKKyAgICBpdCBwcm9jZWVkcworCisgICAgIiIiCisKKyAgICBkZWYgY2hlY2tzdW1fZmlsZShmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2hlY2tzdW0gPSBfY2hlY2tzdW1fY2FjaGUuZ2V0X2NoZWNrc3VtKGYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJVbmFibGUgdG8gZ2V0IGNoZWNrc3VtIGZvciAlcyBTUkNfVVJJIGVudHJ5ICVzOiAlcyIgJSAocG4sIG9zLnBhdGguYmFzZW5hbWUoZiksIGUpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGNoZWNrc3VtCisKKyAgICBkZWYgY2hlY2tzdW1fZGlyKHB0aCk6CisgICAgICAgICMgSGFuZGxlIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5CisgICAgICAgIGRpcmNoZWNrc3VtcyA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHB0aCk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmdWxscHRoID0gb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpCisgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKGZ1bGxwdGgpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICAgICAgICAgIGRpcmNoZWNrc3Vtcy5hcHBlbmQoKGZ1bGxwdGgsIGNoZWNrc3VtKSkKKyAgICAgICAgcmV0dXJuIGRpcmNoZWNrc3VtcworCisgICAgY2hlY2tzdW1zID0gW10KKyAgICBmb3IgcHRoIGluIGZpbGVsaXN0LnNwbGl0KCk6CisgICAgICAgIGV4aXN0ID0gcHRoLnNwbGl0KCI6IilbMV0KKyAgICAgICAgaWYgZXhpc3QgPT0gIkZhbHNlIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHB0aCA9IHB0aC5zcGxpdCgiOiIpWzBdCisgICAgICAgIGlmICcqJyBpbiBwdGg6CisgICAgICAgICAgICAjIEhhbmRsZSBnbG9icworICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHB0aCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW1zLmV4dGVuZChjaGVja3N1bV9kaXIoZikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKGYpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKGYsIGNoZWNrc3VtKSkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHB0aCk6CisgICAgICAgICAgICBjaGVja3N1bXMuZXh0ZW5kKGNoZWNrc3VtX2RpcihwdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bV9maWxlKHB0aCkKKyAgICAgICAgICAgIGNoZWNrc3Vtcy5hcHBlbmQoKHB0aCwgY2hlY2tzdW0pKQorCisgICAgY2hlY2tzdW1zLnNvcnQoa2V5PW9wZXJhdG9yLml0ZW1nZXR0ZXIoMSkpCisgICAgcmV0dXJuIGNoZWNrc3VtcworCisKK2NsYXNzIEZldGNoRGF0YShvYmplY3QpOgorICAgICIiIgorICAgIEEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyB0aGUgZmV0Y2hlciBzdGF0ZSBmb3IgYSBnaXZlbiBVUkkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZCwgbG9jYWxvbmx5ID0gRmFsc2UpOgorICAgICAgICAjIGxvY2FscGF0aCBpcyB0aGUgbG9jYXRpb24gb2YgYSBkb3dubG9hZGVkIHJlc3VsdC4gSWYgbm90IHNldCwgdGhlIGZpbGUgaXMgbG9jYWwuCisgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gTm9uZQorICAgICAgICBzZWxmLmxvY2FsZmlsZSA9ICIiCisgICAgICAgIHNlbGYubG9jYWxwYXRoID0gTm9uZQorICAgICAgICBzZWxmLmxvY2tmaWxlID0gTm9uZQorICAgICAgICBzZWxmLm1pcnJvcnRhcmJhbGwgPSBOb25lCisgICAgICAgIHNlbGYuYmFzZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYmFzZXBhdGggPSBOb25lCisgICAgICAgIChzZWxmLnR5cGUsIHNlbGYuaG9zdCwgc2VsZi5wYXRoLCBzZWxmLnVzZXIsIHNlbGYucHN3ZCwgc2VsZi5wYXJtKSA9IGRlY29kZXVybChkYXRhLmV4cGFuZCh1cmwsIGQpKQorICAgICAgICBzZWxmLmRhdGUgPSBzZWxmLmdldFNSQ0RhdGUoZCkKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgaWYgbm90IHNlbGYudXNlciBhbmQgInVzZXIiIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYudXNlciA9IHNlbGYucGFybVsidXNlciJdCisgICAgICAgIGlmIG5vdCBzZWxmLnBzd2QgYW5kICJwc3dkIiBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBzZWxmLnBzd2QgPSBzZWxmLnBhcm1bInBzd2QiXQorICAgICAgICBzZWxmLnNldHVwID0gRmFsc2UKKworICAgICAgICBpZiAibmFtZSIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5tZDVfbmFtZSA9ICIlcy5tZDVzdW0iICUgc2VsZi5wYXJtWyJuYW1lIl0KKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X25hbWUgPSAiJXMuc2hhMjU2c3VtIiAlIHNlbGYucGFybVsibmFtZSJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1kNV9uYW1lID0gIm1kNXN1bSIKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X25hbWUgPSAic2hhMjU2c3VtIgorICAgICAgICBpZiBzZWxmLm1kNV9uYW1lIGluIHNlbGYucGFybToKKyAgICAgICAgICAgIHNlbGYubWQ1X2V4cGVjdGVkID0gc2VsZi5wYXJtW3NlbGYubWQ1X25hbWVdCisgICAgICAgIGVsaWYgc2VsZi50eXBlIG5vdCBpbiBbImh0dHAiLCAiaHR0cHMiLCAiZnRwIiwgImZ0cHMiLCAic2Z0cCJdOgorICAgICAgICAgICAgc2VsZi5tZDVfZXhwZWN0ZWQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1kNV9leHBlY3RlZCA9IGQuZ2V0VmFyRmxhZygiU1JDX1VSSSIsIHNlbGYubWQ1X25hbWUpCisgICAgICAgIGlmIHNlbGYuc2hhMjU2X25hbWUgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgc2VsZi5zaGEyNTZfZXhwZWN0ZWQgPSBzZWxmLnBhcm1bc2VsZi5zaGEyNTZfbmFtZV0KKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgbm90IGluIFsiaHR0cCIsICJodHRwcyIsICJmdHAiLCAiZnRwcyIsICJzZnRwIl06CisgICAgICAgICAgICBzZWxmLnNoYTI1Nl9leHBlY3RlZCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2hhMjU2X2V4cGVjdGVkID0gZC5nZXRWYXJGbGFnKCJTUkNfVVJJIiwgc2VsZi5zaGEyNTZfbmFtZSkKKyAgICAgICAgc2VsZi5pZ25vcmVfY2hlY2tzdW1zID0gRmFsc2UKKworICAgICAgICBzZWxmLm5hbWVzID0gc2VsZi5wYXJtLmdldCgibmFtZSIsJ2RlZmF1bHQnKS5zcGxpdCgnLCcpCisKKyAgICAgICAgc2VsZi5tZXRob2QgPSBOb25lCisgICAgICAgIGZvciBtIGluIG1ldGhvZHM6CisgICAgICAgICAgICBpZiBtLnN1cHBvcnRzKHNlbGYsIGQpOgorICAgICAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbQorICAgICAgICAgICAgICAgIGJyZWFrICAgICAgICAgICAgICAgIAorCisgICAgICAgIGlmIG5vdCBzZWxmLm1ldGhvZDoKKyAgICAgICAgICAgIHJhaXNlIE5vTWV0aG9kRXJyb3IodXJsKQorCisgICAgICAgIGlmIGxvY2Fsb25seSBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5tZXRob2QsIGxvY2FsLkxvY2FsKToKKyAgICAgICAgICAgIHJhaXNlIE5vbkxvY2FsTWV0aG9kKCkKKworICAgICAgICBpZiBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpIGFuZCAicHJvdG9jb2wiIG5vdCBpbiBzZWxmLnBhcm06CisgICAgICAgICAgICBsb2dnZXIud2FybignQ29uc2lkZXIgdXBkYXRpbmcgJXMgcmVjaXBlIHRvIHVzZSAicHJvdG9jb2wiIG5vdCAicHJvdG8iIGluIFNSQ19VUkkuJywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgICAgICBzZWxmLnBhcm1bInByb3RvY29sIl0gPSBzZWxmLnBhcm0uZ2V0KCJwcm90byIsIE5vbmUpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLm1ldGhvZCwgInVybGRhdGFfaW5pdCIpOgorICAgICAgICAgICAgc2VsZi5tZXRob2QudXJsZGF0YV9pbml0KHNlbGYsIGQpCisKKyAgICAgICAgaWYgImxvY2FscGF0aCIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgIyBpZiB1c2VyIHNldHMgbG9jYWxwYXRoIGZvciBmaWxlLCB1c2UgaXQgaW5zdGVhZC4KKyAgICAgICAgICAgIHNlbGYubG9jYWxwYXRoID0gc2VsZi5wYXJtWyJsb2NhbHBhdGgiXQorICAgICAgICAgICAgc2VsZi5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5sb2NhbHBhdGgpCisgICAgICAgIGVsaWYgc2VsZi5sb2NhbGZpbGU6CisgICAgICAgICAgICBzZWxmLmxvY2FscGF0aCA9IHNlbGYubWV0aG9kLmxvY2FscGF0aChzZWxmLCBkKQorCisgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpCisgICAgICAgICMgTm90ZTogLmRvbmUgYW5kIC5sb2NrIGZpbGVzIHNob3VsZCBhbHdheXMgYmUgaW4gRExfRElSIHdoZXJlYXMgbG9jYWxwYXRoIG1heSBub3QgYmUuCisgICAgICAgIGlmIHNlbGYubG9jYWxwYXRoIGFuZCBzZWxmLmxvY2FscGF0aC5zdGFydHN3aXRoKGRsZGlyKToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gc2VsZi5sb2NhbHBhdGgKKyAgICAgICAgZWxpZiBzZWxmLmxvY2FscGF0aDoKKyAgICAgICAgICAgIGJhc2VwYXRoID0gZGxkaXIgKyBvcy5zZXAgKyBvcy5wYXRoLmJhc2VuYW1lKHNlbGYubG9jYWxwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZXBhdGggPSBkbGRpciArIG9zLnNlcCArIChzZWxmLmJhc2VwYXRoIG9yIHNlbGYuYmFzZW5hbWUpCisgICAgICAgIHNlbGYuZG9uZXN0YW1wID0gYmFzZXBhdGggKyAnLmRvbmUnCisgICAgICAgIHNlbGYubG9ja2ZpbGUgPSBiYXNlcGF0aCArICcubG9jaycKKworICAgIGRlZiBzZXR1cF9yZXZpc29ucyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5yZXZpc2lvbnMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLm5hbWVzOgorICAgICAgICAgICAgc2VsZi5yZXZpc2lvbnNbbmFtZV0gPSBzcmNyZXZfaW50ZXJuYWxfaGVscGVyKHNlbGYsIGQsIG5hbWUpCisKKyAgICAgICAgIyBhZGQgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBub24gbmFtZSBzcGVjaWZpZWQgY2FzZQorICAgICAgICBpZiBsZW4oc2VsZi5uYW1lcykgPT0gMToKKyAgICAgICAgICAgIHNlbGYucmV2aXNpb24gPSBzZWxmLnJldmlzaW9uc1tzZWxmLm5hbWVzWzBdXQorCisgICAgZGVmIHNldHVwX2xvY2FscGF0aChzZWxmLCBkKToKKyAgICAgICAgaWYgbm90IHNlbGYubG9jYWxwYXRoOgorICAgICAgICAgICAgc2VsZi5sb2NhbHBhdGggPSBzZWxmLm1ldGhvZC5sb2NhbHBhdGgoc2VsZiwgZCkKKworICAgIGRlZiBnZXRTUkNEYXRlKHNlbGYsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBTUkMgRGF0ZSBmb3IgdGhlIGNvbXBvbmVudAorCisgICAgICAgIGQgdGhlIGJiLmRhdGEgbW9kdWxlCisgICAgICAgICIiIgorICAgICAgICBpZiAic3JjZGF0ZSIgaW4gc2VsZi5wYXJtOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFybVsnc3JjZGF0ZSddCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgICAgIGlmIHBuOgorICAgICAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCJTUkNEQVRFXyVzIiAlIHBuLCBUcnVlKSBvciBkLmdldFZhcigiU1JDREFURSIsIFRydWUpIG9yIGQuZ2V0VmFyKCJEQVRFIiwgVHJ1ZSkKKworICAgICAgICByZXR1cm4gZC5nZXRWYXIoIlNSQ0RBVEUiLCBUcnVlKSBvciBkLmdldFZhcigiREFURSIsIFRydWUpCisKK2NsYXNzIEZldGNoTWV0aG9kKG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgJ2ZldGNoJ2luZyBkYXRhIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscz1Ob25lKToKKyAgICAgICAgc2VsZi51cmxzID0gW10KKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiB0aGlzIGZldGNoIGNsYXNzIHN1cHBvcnRzIGEgZ2l2ZW4gdXJsLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvY2FsIGZpbGVuYW1lIG9mIGEgZ2l2ZW4gdXJsIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bCBmZXRjaC4KKyAgICAgICAgQ2FuIGFsc28gc2V0dXAgdmFyaWFibGVzIGluIHVybGRhdGEgZm9yIHVzZSBpbiBnbyAoc2F2aW5nIGNvZGUgZHVwbGljYXRpb24KKyAgICAgICAgYW5kIGR1cGxpY2F0ZSBjb2RlIGV4ZWN1dGlvbikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIkRMX0RJUiIsIGQsIFRydWUpLCB1cmxkYXRhLmxvY2FsZmlsZSkKKworICAgIGRlZiBzdXBwb3J0c19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIGxvY2FscGF0aCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSBjaGVja3N1bT8KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBjYW5ub3QgY29tcHV0ZSBjaGVja3N1bXMgZm9yIGRpcmVjdG9yaWVzCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIodXJsZGF0YS5sb2NhbHBhdGgpID09IFRydWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgdXJsZGF0YS5sb2NhbHBhdGguZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVjb21tZW5kc19jaGVja3N1bShzZWxmLCB1cmxkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIElzIHRoZSBiYWNrZW5kIG9uIHdoZXJlIGNoZWNrc3VtbWluZyBpcyByZWNvbW1lbmRlZCAoc2hvdWxkIHdhcm5pbmdzIAorICAgICAgICBiZSBkaXNwbGF5ZWQgaWYgdGhlcmUgaXMgbm8gY2hlY2tzdW0pPworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyhzZWxmLCByZWxwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSBsZWFkaW5nIHNsYXNoIGFzIG9zLnBhdGguam9pbiBjYW4ndCBjb3BlCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBvcy5wYXRoLmlzYWJzKHJlbHBhdGgpOgorICAgICAgICAgICAgcmVscGF0aCA9IHJlbHBhdGhbMTpdCisgICAgICAgIHJldHVybiByZWxwYXRoCisKKyAgICBkZWYgc2V0VXJscyhzZWxmLCB1cmxzKToKKyAgICAgICAgc2VsZi5fX3VybHMgPSB1cmxzCisKKyAgICBkZWYgZ2V0VXJscyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191cmxzCisKKyAgICB1cmxzID0gcHJvcGVydHkoZ2V0VXJscywgc2V0VXJscywgTm9uZSwgIlVybHMgcHJvcGVydHkiKQorCisgICAgZGVmIG5lZWRfdXBkYXRlKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIEZvcmNlIGEgZmV0Y2gsIGV2ZW4gaWYgbG9jYWxwYXRoIGV4aXN0cz8KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZmV0Y2hlciBzdXBwb3J0cyBhdXRvIHNvdXJjZSByZXZpc2lvbnMgKFNSQ1JFVikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggdXJscworICAgICAgICBBc3N1bWVzIGxvY2FscGF0aCB3YXMgY2FsbGVkIGZpcnN0CisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb01ldGhvZEVycm9yKHVybCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdXJsZGF0YSwgcm9vdGRpciwgZGF0YSk6CisgICAgICAgIGl0ZXJhdGUgPSBGYWxzZQorICAgICAgICBmaWxlID0gdXJsZGF0YS5sb2NhbHBhdGgKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1bnBhY2sgPSBiYi51dGlscy50b19ib29sZWFuKHVybGRhdGEucGFybS5nZXQoJ3VucGFjaycpLCBUcnVlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CisgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ3VucGFjaycgcGFyYW1ldGVyIGZvciAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChmaWxlLCB1cmxkYXRhLnBhcm0uZ2V0KCd1bnBhY2snKSkpCisKKyAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKQorICAgICAgICBpZiBleHQgaW4gWycuZ3onLCAnLmJ6MicsICcuWicsICcueHonLCAnLmx6J106CisgICAgICAgICAgICBlZmlsZSA9IG9zLnBhdGguam9pbihyb290ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGJhc2UpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWZpbGUgPSBmaWxlCisgICAgICAgIGNtZCA9IE5vbmUKKworICAgICAgICBpZiB1bnBhY2s6CisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcudGFyJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3RhciB4IC0tbm8tc2FtZS1vd25lciAtZiAlcycgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy50Z3onKSBvciBmaWxlLmVuZHN3aXRoKCcudGFyLmd6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRhci5aJyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3RhciB4eiAtLW5vLXNhbWUtb3duZXIgLWYgJXMnICUgZmlsZQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGJ6Jykgb3IgZmlsZS5lbmRzd2l0aCgnLnRiejInKSBvciBmaWxlLmVuZHN3aXRoKCcudGFyLmJ6MicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdiemlwMiAtZGMgJXMgfCB0YXIgeCAtLW5vLXNhbWUtb3duZXIgLWYgLScgJSBmaWxlCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5neicpIG9yIGZpbGUuZW5kc3dpdGgoJy5aJykgb3IgZmlsZS5lbmRzd2l0aCgnLnonKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnZ3ppcCAtZGMgJXMgPiAlcycgJSAoZmlsZSwgZWZpbGUpCisgICAgICAgICAgICBlbGlmIGZpbGUuZW5kc3dpdGgoJy5iejInKToKKyAgICAgICAgICAgICAgICBjbWQgPSAnYnppcDIgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcudGFyLnh6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3h6IC1kYyAlcyB8IHRhciB4IC0tbm8tc2FtZS1vd25lciAtZiAtJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnh6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ3h6IC1kYyAlcyA+ICVzJyAlIChmaWxlLCBlZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnRhci5seicpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdsemlwIC1kYyAlcyB8IHRhciB4IC0tbm8tc2FtZS1vd25lciAtZiAtJyAlIGZpbGUKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLmx6Jyk6CisgICAgICAgICAgICAgICAgY21kID0gJ2x6aXAgLWRjICVzID4gJXMnICUgKGZpbGUsIGVmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuemlwJykgb3IgZmlsZS5lbmRzd2l0aCgnLmphcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZG9zID0gYmIudXRpbHMudG9fYm9vbGVhbih1cmxkYXRhLnBhcm0uZ2V0KCdkb3MnKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCB2YWx1ZSBmb3IgJ2RvcycgcGFyYW1ldGVyIGZvciAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIHVybGRhdGEucGFybS5nZXQoJ2RvcycpKSkKKyAgICAgICAgICAgICAgICBjbWQgPSAndW56aXAgLXEgLW8nCisgICAgICAgICAgICAgICAgaWYgZG9zOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnJXMgLWEnICUgY21kCisgICAgICAgICAgICAgICAgY21kID0gIiVzICclcyciICUgKGNtZCwgZmlsZSkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgnLnJwbScpIG9yIGZpbGUuZW5kc3dpdGgoJy5zcnBtJyk6CisgICAgICAgICAgICAgICAgaWYgJ2V4dHJhY3QnIGluIHVybGRhdGEucGFybToKKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX2ZpbGUgPSB1cmxkYXRhLnBhcm0uZ2V0KCdleHRyYWN0JykKKyAgICAgICAgICAgICAgICAgICAgY21kID0gJ3JwbTJjcGlvLnNoICVzIHwgY3BpbyAtaWQgJXMnICUgKGZpbGUsIHVucGFja19maWxlKQorICAgICAgICAgICAgICAgICAgICBpdGVyYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpdGVyYXRlX2ZpbGUgPSB1bnBhY2tfZmlsZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdycG0yY3Bpby5zaCAlcyB8IGNwaW8gLWlkJyAlIChmaWxlKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCcuZGViJykgb3IgZmlsZS5lbmRzd2l0aCgnLmlwaycpOgorICAgICAgICAgICAgICAgIGNtZCA9ICdhciAtcCAlcyBkYXRhLnRhci5neiB8IHpjYXQgfCB0YXIgLS1uby1zYW1lLW93bmVyIC14cGYgLScgJSBmaWxlCisKKyAgICAgICAgaWYgbm90IHVucGFjayBvciBub3QgY21kOgorICAgICAgICAgICAgIyBJZiBmaWxlID09IGRlc3QsIHRoZW4gYXZvaWQgYW55IGNvcGllcywgYXMgd2UgYWxyZWFkeSBwdXQgdGhlIGZpbGUgaW50byBkZXN0IQorICAgICAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihyb290ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKQorICAgICAgICAgICAgaWYgKGZpbGUgIT0gZGVzdCkgYW5kIG5vdCAob3MucGF0aC5leGlzdHMoZGVzdCkgYW5kIG9zLnBhdGguc2FtZWZpbGUoZmlsZSwgZGVzdCkpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICMgSWYgZm9yIGV4YW1wbGUgd2UncmUgYXNrZWQgdG8gY29weSBmaWxlOi8vZm9vL2Jhciwgd2UgbmVlZCB0byB1bnBhY2sgdGhlIHJlc3VsdCBpbnRvIGZvby9iYXIKKyAgICAgICAgICAgICAgICAgICAgYmFzZXBhdGggPSBnZXRhdHRyKHVybGRhdGEsICJiYXNlcGF0aCIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSAiLiIKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXBhdGggYW5kIGJhc2VwYXRoLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcGF0aCA9IGJhc2VwYXRoLnJzdHJpcCgiLyIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYmFzZXBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcGF0aCA9IG9zLnBhdGguZGlybmFtZShiYXNlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXBhdGggYW5kIGJhc2VwYXRoLmZpbmQoIi8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSBiYXNlcGF0aFs6YmFzZXBhdGgucmZpbmQoJy8nKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSBkZXN0ZGlyLnN0cmlwKCcvJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVzdGRpciAhPSAiLiIgYW5kIG5vdCBvcy5hY2Nlc3MoIiVzLyVzIiAlIChyb290ZGlyLCBkZXN0ZGlyKSwgb3MuRl9PSyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycygiJXMvJXMiICUgKHJvb3RkaXIsIGRlc3RkaXIpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWZwUFIgJXMgJXMvJXMvJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgICAgICAgICAjY21kID0gJ3RhciAtY2YgLSAtQyAiJWQiIC1wcyAuIHwgdGFyIC14ZiAtIC1DICIlcy8lcy8iJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGhlICJkZXN0ZGlyIiBoYW5kbGluZyB3YXMgc3BlY2lmaWNhbGx5IGRvbmUgZm9yIEZJTEVTUEFUSAorICAgICAgICAgICAgICAgICAgICAjIGl0ZW1zLiAgU28sIG9ubHkgZG8gc28gZm9yIGZpbGU6Ly8gZW50cmllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgdXJsZGF0YS50eXBlID09ICJmaWxlIiBhbmQgdXJsZGF0YS5wYXRoLmZpbmQoIi8iKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdGRpciA9IHVybGRhdGEucGF0aC5yc3BsaXQoIi8iLCAxKVswXQorICAgICAgICAgICAgICAgICAgICAgICBpZiB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gdXJsZGF0YS5wYXJtLmdldCgnc3ViZGlyJykgKyAiLyIgKyBkZXN0ZGlyCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgIGlmIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIgPSB1cmxkYXRhLnBhcm0uZ2V0KCdzdWJkaXInKQorICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyID0gIi4iCisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcigiJXMvJXMiICUgKHJvb3RkaXIsIGRlc3RkaXIpKQorICAgICAgICAgICAgICAgICAgICBjbWQgPSAnY3AgLWYgJXMgJXMvJXMvJyAlIChmaWxlLCByb290ZGlyLCBkZXN0ZGlyKQorCisgICAgICAgIGlmIG5vdCBjbWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENoYW5nZSB0byBzdWJkaXIgYmVmb3JlIGV4ZWN1dGluZyBjb21tYW5kCisgICAgICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCk7CisgICAgICAgIG9zLmNoZGlyKHJvb3RkaXIpCisgICAgICAgIGlmICdzdWJkaXInIGluIHVybGRhdGEucGFybToKKyAgICAgICAgICAgIG5ld2RpciA9ICgiJXMvJXMiICUgKHJvb3RkaXIsIHVybGRhdGEucGFybS5nZXQoJ3N1YmRpcicpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuZXdkaXIpCisgICAgICAgICAgICBvcy5jaGRpcihuZXdkaXIpCisKKyAgICAgICAgcGF0aCA9IGRhdGEuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkKKyAgICAgICAgaWYgcGF0aDoKKyAgICAgICAgICAgIGNtZCA9ICJQQVRIPVwiJXNcIiAlcyIgJSAocGF0aCwgY21kKQorICAgICAgICBiYi5ub3RlKCJVbnBhY2tpbmcgJXMgdG8gJXMvIiAlIChmaWxlLCBvcy5nZXRjd2QoKSkpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHByZWV4ZWNfZm49c3VicHJvY2Vzc19zZXR1cCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBvcy5jaGRpcihzYXZlX2N3ZCkKKworICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFVucGFja0Vycm9yKCJVbnBhY2sgY29tbWFuZCAlcyBmYWlsZWQgd2l0aCByZXR1cm4gdmFsdWUgJXMiICUgKGNtZCwgcmV0KSwgdXJsZGF0YS51cmwpCisKKyAgICAgICAgaWYgaXRlcmF0ZSBpcyBUcnVlOgorICAgICAgICAgICAgaXRlcmF0ZV91cmxkYXRhID0gdXJsZGF0YQorICAgICAgICAgICAgaXRlcmF0ZV91cmxkYXRhLmxvY2FscGF0aCA9ICIlcy8lcyIgJSAocm9vdGRpciwgaXRlcmF0ZV9maWxlKQorICAgICAgICAgICAgc2VsZi51bnBhY2sodXJsZGF0YSwgcm9vdGRpciwgZGF0YSkKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBjbGVhbihzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFuIGFueSBleGlzdGluZyBmdWxsIG9yIHBhcnRpYWwgZG93bmxvYWQKKyAgICAgICAgIiIiCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1cmxkYXRhLmxvY2FscGF0aCkKKworICAgIGRlZiB0cnlfcHJlbWlycm9yKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2hvdWxkIHByZW1pcnJvcnMgYmUgdXNlZD8KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tzdGF0dXMoc2VsZiwgZmV0Y2gsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIHN0YXR1cyBvZiBhIFVSTAorICAgICAgICBBc3N1bWVzIGxvY2FscGF0aCB3YXMgY2FsbGVkIGZpcnN0CisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuaW5mbygiVVJMICVzIGNvdWxkIG5vdCBiZSBjaGVja2VkIGZvciBzdGF0dXMgc2luY2Ugbm8gbWV0aG9kIGV4aXN0cy4iLCB1cmwpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIExvb2sgaW4gdGhlIGNhY2hlIGZvciB0aGUgbGF0ZXN0IHJldmlzaW9uLCBpZiBub3QgcHJlc2VudCBhc2sgdGhlIFNDTS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfbGF0ZXN0X3JldmlzaW9uIik6CisgICAgICAgICAgICByYWlzZSBQYXJhbWV0ZXJFcnJvcigiVGhlIGZldGNoZXIgZm9yIHRoaXMgVVJMIGRvZXMgbm90IHN1cHBvcnQgX2xhdGVzdF9yZXZpc2lvbiIsIHVybCkKKworICAgICAgICByZXZzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9IRUFEUkVWUycsIGQpCisgICAgICAgIGtleSA9IHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fa2V5KHVkLCBkLCBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcmV2c1trZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldnNba2V5XSA9IHJldiA9IHNlbGYuX2xhdGVzdF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiByZXYKKworICAgIGRlZiBzb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGxhdGVzdF9yZXYgPSBzZWxmLl9idWlsZF9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgcmV0dXJuIFRydWUsIHN0cihsYXRlc3RfcmV2KQorCisgICAgZGVmIGdlbmVyYXRlX3JldmlzaW9uX2tleShzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgIGtleSA9IHNlbGYuX3JldmlzaW9uX2tleSh1ZCwgZCwgbmFtZSkKKyAgICAgICAgcmV0dXJuICIlcy0lcyIgJSAoa2V5LCBkLmdldFZhcigiUE4iLCBUcnVlKSBvciAiIikKKworY2xhc3MgRmV0Y2gob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscywgZCwgY2FjaGUgPSBUcnVlLCBsb2NhbG9ubHkgPSBGYWxzZSwgY29ubmVjdGlvbl9jYWNoZSA9IE5vbmUpOgorICAgICAgICBpZiBsb2NhbG9ubHkgYW5kIGNhY2hlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJiYi5mZXRjaDIuRmV0Y2guX19pbml0X186IGNhbm5vdCBzZXQgY2FjaGUgYW5kIGxvY2Fsb25seSBhdCBzYW1lIHRpbWUiKQorCisgICAgICAgIGlmIGxlbih1cmxzKSA9PSAwOgorICAgICAgICAgICAgdXJscyA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBzZWxmLnVybHMgPSB1cmxzCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi51ZCA9IHt9CisgICAgICAgIHNlbGYuY29ubmVjdGlvbl9jYWNoZSA9IGNvbm5lY3Rpb25fY2FjaGUKKworICAgICAgICBmbiA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICAgICAgaWYgY2FjaGUgYW5kIGZuIGFuZCBmbiBpbiB1cmxkYXRhX2NhY2hlOgorICAgICAgICAgICAgc2VsZi51ZCA9IHVybGRhdGFfY2FjaGVbZm5dCisKKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgaWYgdXJsIG5vdCBpbiBzZWxmLnVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gRmV0Y2hEYXRhKHVybCwgZCwgbG9jYWxvbmx5KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBOb25Mb2NhbE1ldGhvZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxvbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51ZFt1cmxdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIGZuIGFuZCBjYWNoZToKKyAgICAgICAgICAgIHVybGRhdGFfY2FjaGVbZm5dID0gc2VsZi51ZAorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1cmwpOgorICAgICAgICBpZiB1cmwgbm90IGluIHNlbGYudXJsczoKKyAgICAgICAgICAgIHNlbGYudWRbdXJsXSA9IEZldGNoRGF0YSh1cmwsIHNlbGYuZCkKKworICAgICAgICBzZWxmLnVkW3VybF0uc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZC5leHBhbmQoc2VsZi51ZFt1cmxdLmxvY2FscGF0aCkKKworICAgIGRlZiBsb2NhbHBhdGhzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbG9jYWwgZmlsZW5hbWVzLCBhc3N1bWluZyBzdWNjZXNzZnVsIGZldGNoCisgICAgICAgICIiIgorICAgICAgICBsb2NhbCA9IFtdCisKKyAgICAgICAgZm9yIHUgaW4gc2VsZi51cmxzOgorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VdCisgICAgICAgICAgICB1ZC5zZXR1cF9sb2NhbHBhdGgoc2VsZi5kKQorICAgICAgICAgICAgbG9jYWwuYXBwZW5kKHVkLmxvY2FscGF0aCkKKworICAgICAgICByZXR1cm4gbG9jYWwKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmV0Y2ggYWxsIHVybHMKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIG5ldHdvcmsgPSBzZWxmLmQuZ2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgVHJ1ZSkKKyAgICAgICAgcHJlbWlycm9yb25seSA9IChzZWxmLmQuZ2V0VmFyKCJCQl9GRVRDSF9QUkVNSVJST1JPTkxZIiwgVHJ1ZSkgPT0gIjEiKQorCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgICAgICBtID0gdWQubWV0aG9kCisgICAgICAgICAgICBsb2NhbHBhdGggPSAiIgorCisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHVkLmxvY2tmaWxlKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsIG5ldHdvcmspCisgCisgICAgICAgICAgICAgICAgaWYgdmVyaWZ5X2RvbmVzdGFtcCh1ZCwgc2VsZi5kKSBhbmQgbm90IG0ubmVlZF91cGRhdGUodWQsIHNlbGYuZCk6CisgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAorICAgICAgICAgICAgICAgIGVsaWYgbS50cnlfcHJlbWlycm9yKHVkLCBzZWxmLmQpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRyeWluZyBQUkVNSVJST1JTIikKKyAgICAgICAgICAgICAgICAgICAgbWlycm9ycyA9IG1pcnJvcl9mcm9tX3N0cmluZyhzZWxmLmQuZ2V0VmFyKCdQUkVNSVJST1JTJywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMsIEZhbHNlKQorCisgICAgICAgICAgICAgICAgaWYgcHJlbWlycm9yb25seToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKworICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgICAgICAgICAgZmlyc3RlcnIgPSBOb25lCisgICAgICAgICAgICAgICAgdmVyaWZpZWRfc3RhbXAgPSB2ZXJpZnlfZG9uZXN0YW1wKHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvY2FscGF0aCBhbmQgKG5vdCB2ZXJpZmllZF9zdGFtcCBvciBtLm5lZWRfdXBkYXRlKHVkLCBzZWxmLmQpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVkLnVybCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVW50cnVzdGVkVXJsKHVkLnVybCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVHJ5aW5nIFVwc3RyZWFtIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uZG93bmxvYWQodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobSwgImJ1aWxkX21pcnJvcl9kYXRhIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5idWlsZF9taXJyb3JfZGF0YSh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxwYXRoID0gdWQubG9jYWxwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAjIGVhcmx5IGNoZWNrc3VtIHZlcmlmeSwgc28gdGhhdCBpZiBjaGVja3N1bSBtaXNtYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBmZXRjaGVyIHN0aWxsIGhhdmUgY2hhbmNlIHRvIGZldGNoIGZyb20gbWlycm9yCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhbXAodWQsIHNlbGYuZCkKKworICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLk5ldHdvcmtBY2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGUsIENoZWNrc3VtRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDaGVja3N1bSBmYWlsdXJlIGVuY291bnRlcmVkIHdpdGggZG93bmxvYWQgb2YgJXMgLSB3aWxsIGF0dGVtcHQgb3RoZXIgc291cmNlcyBpZiBhdmFpbGFibGUiICUgdSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9iYWRfY2hlY2tzdW0odWQsIGUuY2hlY2tzdW0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgTm9DaGVja3N1bUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGZldGNoIFVSTCAlcywgYXR0ZW1wdGluZyBNSVJST1JTIGlmIGF2YWlsYWJsZScgJSB1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCBzdHIoZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGVyciA9IGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBpbmNvbXBsZXRlIGZldGNoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdmVyaWZpZWRfc3RhbXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5jbGVhbih1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJUcnlpbmcgTUlSUk9SUyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtaXJyb3JzID0gbWlycm9yX2Zyb21fc3RyaW5nKHNlbGYuZC5nZXRWYXIoJ01JUlJPUlMnLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscGF0aCA9IHRyeV9taXJyb3JzKHNlbGYsIHNlbGYuZCwgdWQsIG1pcnJvcnMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxwYXRoIG9yICgobm90IG9zLnBhdGguZXhpc3RzKGxvY2FscGF0aCkpIGFuZCBsb2NhbHBhdGguZmluZCgiKiIpID09IC0xKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGZpcnN0ZXJyKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiVW5hYmxlIHRvIGZldGNoIFVSTCBmcm9tIGFueSBzb3VyY2UuIiwgdSkKKworICAgICAgICAgICAgICAgIHVwZGF0ZV9zdGFtcCh1ZCwgc2VsZi5kKQorCisgICAgICAgICAgICBleGNlcHQgQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgQ2hlY2tzdW1FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ2hlY2tzdW0gZmFpbHVyZSBmZXRjaGluZyAlcyIgJSB1KQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCB1cmxzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgYWxsIHVybHMgZXhpc3QgdXBzdHJlYW0KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbm90IHVybHM6CisgICAgICAgICAgICB1cmxzID0gc2VsZi51cmxzCisKKyAgICAgICAgZm9yIHUgaW4gdXJsczoKKyAgICAgICAgICAgIHVkID0gc2VsZi51ZFt1XQorICAgICAgICAgICAgdWQuc2V0dXBfbG9jYWxwYXRoKHNlbGYuZCkKKyAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVGVzdGluZyBVUkwgJXMiLCB1KQorICAgICAgICAgICAgIyBGaXJzdCB0cnkgY2hlY2tpbmcgdXJpLCB1LCBmcm9tIFBSRU1JUlJPUlMKKyAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignUFJFTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgcmV0ID0gdHJ5X21pcnJvcnMoc2VsZiwgc2VsZi5kLCB1ZCwgbWlycm9ycywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCByZXQ6CisgICAgICAgICAgICAgICAgIyBOZXh0IHRyeSBjaGVja2luZyBmcm9tIHRoZSBvcmlnaW5hbCB1cmksIHUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoc2VsZiwgdWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICMgRmluYWxseSwgdHJ5IGNoZWNraW5nIHVyaSwgdSwgZnJvbSBNSVJST1JTCisgICAgICAgICAgICAgICAgICAgIG1pcnJvcnMgPSBtaXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5kLmdldFZhcignTUlSUk9SUycsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnlfbWlycm9ycyhzZWxmLCBzZWxmLmQsIHVkLCBtaXJyb3JzLCBUcnVlKQorCisgICAgICAgICAgICBpZiBub3QgcmV0OgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlVSTCAlcyBkb2Vzbid0IHdvcmsiICUgdSwgdSkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgcm9vdCwgdXJscz1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGFsbCB1cmxzIGV4aXN0IHVwc3RyZWFtCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1IGluIHVybHM6CisgICAgICAgICAgICB1ZCA9IHNlbGYudWRbdV0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuZC5leHBhbmQoc2VsZi5sb2NhbHBhdGgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgdWQubG9ja2ZpbGU6CisgICAgICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSh1ZC5sb2NrZmlsZSkKKworICAgICAgICAgICAgdWQubWV0aG9kLnVucGFjayh1ZCwgcm9vdCwgc2VsZi5kKQorCisgICAgICAgICAgICBpZiB1ZC5sb2NrZmlsZToKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgZGVmIGNsZWFuKHNlbGYsIHVybHM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBmaWxlcyB0aGF0IHRoZSBmZXRjaGVyIGdldHMgb3IgcGxhY2VzCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCB1cmxzOgorICAgICAgICAgICAgdXJscyA9IHNlbGYudXJscworCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGlmIHVybCBub3QgaW4gc2VsZi51ZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVkW3VybF0gPSBGZXRjaERhdGEodXJsLCBkKQorICAgICAgICAgICAgdWQgPSBzZWxmLnVkW3VybF0KKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisKKyAgICAgICAgICAgIGlmIG5vdCB1ZC5sb2NhbGZpbGUgYW5kIHVkLmxvY2FscGF0aCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUodWQubG9ja2ZpbGUpCisKKyAgICAgICAgICAgIHVkLm1ldGhvZC5jbGVhbih1ZCwgc2VsZi5kKQorICAgICAgICAgICAgaWYgdWQuZG9uZXN0YW1wOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5kb25lc3RhbXApCisKKyAgICAgICAgICAgIGlmIHVkLmxvY2tmaWxlOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKK2NsYXNzIEZldGNoQ29ubmVjdGlvbkNhY2hlKG9iamVjdCk6CisgICAgIiIiCisgICAgICAgIEEgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyBhbiBjb250YWluZXIgZm9yIHNvY2tldCBjb25uZWN0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2FjaGUgPSB7fQorCisgICAgZGVmIGdldF9jb25uZWN0aW9uX25hbWUoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHJldHVybiBob3N0ICsgJzonICsgc3RyKHBvcnQpCisKKyAgICBkZWYgYWRkX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCwgcG9ydCwgY29ubmVjdGlvbik6CisgICAgICAgIGNuID0gc2VsZi5nZXRfY29ubmVjdGlvbl9uYW1lKGhvc3QsIHBvcnQpCisKKyAgICAgICAgaWYgY24gbm90IGluIHNlbGYuY2FjaGU6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXSA9IGNvbm5lY3Rpb24KKworICAgIGRlZiBnZXRfY29ubmVjdGlvbihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgY29ubmVjdGlvbiA9IE5vbmUKKworICAgICAgICBjbiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb25fbmFtZShob3N0LCBwb3J0KQorICAgICAgICBpZiBjbiBpbiBzZWxmLmNhY2hlOgorICAgICAgICAgICAgY29ubmVjdGlvbiA9IHNlbGYuY2FjaGVbY25dCisKKyAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KKworICAgIGRlZiByZW1vdmVfY29ubmVjdGlvbihzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgY24gPSBzZWxmLmdldF9jb25uZWN0aW9uX25hbWUoaG9zdCwgcG9ydCkKKyAgICAgICAgaWYgY24gaW4gc2VsZi5jYWNoZToKKyAgICAgICAgICAgIHNlbGYuY2FjaGVbY25dLmNsb3NlKCkKKyAgICAgICAgICAgIGRlbCBzZWxmLmNhY2hlW2NuXQorCisgICAgZGVmIGNsb3NlX2Nvbm5lY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgY24gaW4gc2VsZi5jYWNoZS5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmNhY2hlW2NuXS5jbG9zZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5jYWNoZVtjbl0KKworZnJvbSAuIGltcG9ydCBjdnMKK2Zyb20gLiBpbXBvcnQgZ2l0Citmcm9tIC4gaW1wb3J0IGdpdHNtCitmcm9tIC4gaW1wb3J0IGdpdGFubmV4Citmcm9tIC4gaW1wb3J0IGxvY2FsCitmcm9tIC4gaW1wb3J0IHN2bgorZnJvbSAuIGltcG9ydCB3Z2V0Citmcm9tIC4gaW1wb3J0IHNzaAorZnJvbSAuIGltcG9ydCBzZnRwCitmcm9tIC4gaW1wb3J0IHBlcmZvcmNlCitmcm9tIC4gaW1wb3J0IGJ6cgorZnJvbSAuIGltcG9ydCBoZworZnJvbSAuIGltcG9ydCBvc2MKK2Zyb20gLiBpbXBvcnQgcmVwbworZnJvbSAuIGltcG9ydCBjbGVhcmNhc2UKKworbWV0aG9kcy5hcHBlbmQobG9jYWwuTG9jYWwoKSkKK21ldGhvZHMuYXBwZW5kKHdnZXQuV2dldCgpKQorbWV0aG9kcy5hcHBlbmQoc3ZuLlN2bigpKQorbWV0aG9kcy5hcHBlbmQoZ2l0LkdpdCgpKQorbWV0aG9kcy5hcHBlbmQoZ2l0c20uR2l0U00oKSkKK21ldGhvZHMuYXBwZW5kKGdpdGFubmV4LkdpdEFOTkVYKCkpCittZXRob2RzLmFwcGVuZChjdnMuQ3ZzKCkpCittZXRob2RzLmFwcGVuZChzc2guU1NIKCkpCittZXRob2RzLmFwcGVuZChzZnRwLlNGVFAoKSkKK21ldGhvZHMuYXBwZW5kKHBlcmZvcmNlLlBlcmZvcmNlKCkpCittZXRob2RzLmFwcGVuZChienIuQnpyKCkpCittZXRob2RzLmFwcGVuZChoZy5IZygpKQorbWV0aG9kcy5hcHBlbmQob3NjLk9zYygpKQorbWV0aG9kcy5hcHBlbmQocmVwby5SZXBvKCkpCittZXRob2RzLmFwcGVuZChjbGVhcmNhc2UuQ2xlYXJDYXNlKCkpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvYnpyLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2J6ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2U5YWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2J6ci5weQpAQCAtMCwwICsxLDE0MyBAQAorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb24gZm9yIGJ6ci4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFJvc3MgQnVydG9uCisjIENvcHlyaWdodCAoQykgMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyAgIENsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKKyMgICBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorIyAgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGRhdGEKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBCenIoRmV0Y2hNZXRob2QpOgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnYnpyJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBienIgc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBienIgY2hlY2tvdXRzCisgICAgICAgIHJlbHBhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKCcke0JaUkRJUn0nLCBkKSwgdWQuaG9zdCwgcmVscGF0aCkKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmIG5vdCB1ZC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJ2J6cl8lc18lc18lcy50YXIuZ3onICUgKHVkLmhvc3QsIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJyksIHVkLnJldmlzaW9uKSwgZCkKKworICAgIGRlZiBfYnVpbGRienJjb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIGJ6ciBjb21tYW5kbGluZSBiYXNlZCBvbiB1ZAorICAgICAgICBjb21tYW5kIGlzICJmZXRjaCIsICJ1cGRhdGUiLCAicmV2bm8iCisgICAgICAgICIiIgorCisgICAgICAgIGJhc2VjbWQgPSBkYXRhLmV4cGFuZCgnJHtGRVRDSENNRF9ienJ9JywgZCkKKworICAgICAgICBwcm90byA9ICB1ZC5wYXJtLmdldCgncHJvdG9jb2wnLCAnaHR0cCcpCisKKyAgICAgICAgYnpycm9vdCA9IHVkLmhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAicmV2bm8iOgorICAgICAgICAgICAgYnpyY21kID0gIiVzIHJldm5vICVzICVzOi8vJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpLCBwcm90bywgYnpycm9vdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItciAlcyIgJSB1ZC5yZXZpc2lvbikKKworICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAiZmV0Y2giOgorICAgICAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyBicmFuY2ggJXMgJXM6Ly8lcyIgJSAoYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBienJyb290KQorICAgICAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgICAgIGJ6cmNtZCA9ICIlcyBwdWxsICVzIC0tb3ZlcndyaXRlIiAlIChiYXNlY21kLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiSW52YWxpZCBienIgY29tbWFuZCAlcyIgJSBjb21tYW5kLCB1ZC51cmwpCisKKyAgICAgICAgcmV0dXJuIGJ6cmNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSwgJy5ienInKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBienJjbWQgPSBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJCWlIgVXBkYXRlICVzIiwgdWQudXJsKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGJ6cmNtZCwgdWQudXJsKQorICAgICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luICh1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGF0aCkpKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoYnpyY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIG9zLnBhdGguYmFzZW5hbWUodWQucGtnZGlyKSksIFRydWUpCisgICAgICAgICAgICBienJjbWQgPSBzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgYnpyY21kLCB1ZC51cmwpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIkJaUiBDaGVja291dCAlcyIsIHVkLnVybCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBienJjbWQpCisgICAgICAgICAgICBydW5mZXRjaGNtZChienJjbWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICcuYnpyJyAtLWV4Y2x1ZGUgJy5ienJ0YWdzJyIKKworICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBvcy5wYXRoLmJhc2VuYW1lKHVkLnBrZ2RpcikpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9yZXZpc2lvbl9rZXkoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgdW5pcXVlIGtleSBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICJienI6IiArIHVkLnBrZ2RpcgorCisgICAgZGVmIF9sYXRlc3RfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsYXRlc3QgdXBzdHJlYW0gcmV2aXNpb24gbnVtYmVyCisgICAgICAgICIiIgorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkJaUiBmZXRjaGVyIGhpdHRpbmcgbmV0d29yayBmb3IgJXMiLCB1ZC51cmwpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHNlbGYuX2J1aWxkYnpyY29tbWFuZCh1ZCwgZCwgInJldm5vIiksIHVkLnVybCkKKworICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChzZWxmLl9idWlsZGJ6cmNvbW1hbmQodWQsIGQsICJyZXZubyIpLCBkLCBUcnVlKQorCisgICAgICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorCisgICAgZGVmIHNvcnRhYmxlX3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHNvcnRhYmxlIHJldmlzaW9uIG51bWJlciB3aGljaCBpbiBvdXIgY2FzZSBpcyB0aGUgcmV2aXNpb24gbnVtYmVyCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBGYWxzZSwgc2VsZi5fYnVpbGRfcmV2aXNpb24odWQsIGQpCisKKyAgICBkZWYgX2J1aWxkX3JldmlzaW9uKHNlbGYsIHVkLCBkKToKKyAgICAgICAgcmV0dXJuIHVkLnJldmlzaW9uCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvY2xlYXJjYXNlLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTgzZTdjCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2NsZWFyY2FzZS5weQpAQCAtMCwwICsxLDI2MyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGNsZWFyY2FzZSBpbXBsZW1lbnRhdGlvbgorCitUaGUgY2xlYXJjYXNlIGZldGNoZXIgaXMgdXNlZCB0byByZXRyaWV2ZSBmaWxlcyBmcm9tIGEgQ2xlYXJDYXNlIHJlcG9zaXRvcnkuCisKK1VzYWdlIGluIHRoZSByZWNpcGU6CisKKyAgICBTUkNfVVJJID0gImNjcmM6Ly9jYy5leGFtcGxlLm9yZy9jY3JjO3ZvYj0vZXhhbXBsZV92b2I7bW9kdWxlPS9leGFtcGxlX21vZHVsZSIKKyAgICBTUkNSRVYgPSAiRVhBTVBMRV9DTEVBUkNBU0VfVEFHIgorICAgIFBWID0gIiR7QGQuZ2V0VmFyKCJTUkNSRVYiLCBGYWxzZSkucmVwbGFjZSgiLyIsICIrIil9IgorCitUaGUgZmV0Y2hlciB1c2VzIHRoZSByY2xlYXJ0b29sIG9yIGNsZWFydG9vbCByZW1vdGUgY2xpZW50LCBkZXBlbmRpbmcgb24gd2hpY2ggb25lIGlzIGF2YWlsYWJsZS4KKworU3VwcG9ydGVkIFNSQ19VUkkgb3B0aW9ucyBhcmU6CisKKy0gdm9iCisgICAgKHJlcXVpcmVkKSBUaGUgbmFtZSBvZiB0aGUgY2xlYXJjYXNlIFZPQiAod2l0aCBwcmVwZW5kaW5nICIvIikKKworLSBtb2R1bGUKKyAgICBUaGUgbW9kdWxlIGluIHRoZSBzZWxlY3RlZCBWT0IgKHdpdGggcHJlcGVuZGluZyAiLyIpCisKKyAgICBUaGUgbW9kdWxlIGFuZCB2b2IgcGFyYW1ldGVycyBhcmUgY29tYmluZWQgdG8gY3JlYXRlCisgICAgdGhlIGZvbGxvd2luZyBsb2FkIHJ1bGUgaW4gdGhlIHZpZXcgY29uZmlnIHNwZWM6CisgICAgICAgICAgICAgICAgbG9hZCA8dm9iPjxtb2R1bGU+CisKKy0gcHJvdG8KKyAgICBodHRwIG9yIGh0dHBzCisKK1JlbGF0ZWQgdmFyaWFibGVzOgorCisgICAgQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDCisgICAgICAgICAgICBXcml0ZSBhIGNvbmZpZyBzcGVjIHRvIHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUgdG8gdXNlIGl0IGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IGNvbmZpZyBzcGVjIGdlbmVyYXRlZCBieSB0aGlzIGZldGNoZXIuCisgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBTUkNSRVYgbG9zZXMgaXRzIGZ1bmN0aW9uYWxpdHkgaWYgeW91IHNwZWNpZnkKKyAgICAgICAgICAgIHRoaXMgdmFyaWFibGUuIFNSQ1JFViBpcyBzdGlsbCB1c2VkIHRvIGxhYmVsIHRoZSBhcmNoaXZlIGFmdGVyIGEgZmV0Y2gsCisgICAgICAgICAgICBidXQgaXQgZG9lc24ndCBkZWZpbmUgd2hhdCdzIGZldGNoZWQuCisKK1VzZXIgY3JlZGVudGlhbHM6CisgICAgY2xlYXJ0b29sOgorICAgICAgICAgICAgVGhlIGxvZ2luIG9mIGNsZWFydG9vbCBpcyBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIE5vIHNwZWNpYWwgc3RlcHMgbmVlZGVkLgorCisgICAgcmNsZWFydG9vbDoKKyAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSByY2xlYXJ0b29sIHdpdGggYXV0aGVudGljYXRlZCB1c2VycyBhbiBgcmNsZWFydG9vbCBsb2dpbmAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeSBiZWZvcmUgdXNpbmcgdGhlIGZldGNoZXIuCisiIiIKKyMgQ29weXJpZ2h0IChDKSAyMDE0IFNpZW1lbnMgQUcKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCitmcm9tICAgZGlzdHV0aWxzIGltcG9ydCBzcGF3bgorCitjbGFzcyBDbGVhckNhc2UoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICdjbGVhcmNhc2UnIiIiCisgICAgZGVmIGluaXQoc2VsZiwgZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBDbGVhcmNhc2UuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2NjcmMnXQorCisgICAgZGVmIGRlYnVnKHNlbGYsIG1zZyk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQ2xlYXJDYXNlOiAlcyIsIG1zZykKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBDbGVhckNhc2Ugc3BlY2lmaWMgdmFyaWFibGUgd2l0aGluIHVybCBkYXRhCisgICAgICAgICIiIgorICAgICAgICB1ZC5wcm90byA9ICJodHRwcyIKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucHJvdG8gPSB1ZC5wYXJtWydwcm90b2NvbCddCisgICAgICAgIGlmIG5vdCB1ZC5wcm90byBpbiAoJ2h0dHAnLCAnaHR0cHMnKToKKyAgICAgICAgICAgIHJhaXNlIGZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCB0eXBlIiwgdWQudXJsKQorCisgICAgICAgIHVkLnZvYiA9ICcnCisgICAgICAgIGlmICd2b2InIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC52b2IgPSB1ZC5wYXJtWyd2b2InXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gdWQudXJsKyI6IHZvYiBtdXN0IGJlIGRlZmluZWQgc28gdGhlIGZldGNoZXIga25vd3Mgd2hhdCB0byBnZXQuIgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCd2b2InLCBtc2cpCisKKyAgICAgICAgaWYgJ21vZHVsZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bJ21vZHVsZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5tb2R1bGUgPSAiIgorCisgICAgICAgIHVkLmJhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfY2NyYyIsIFRydWUpIG9yIHNwYXduLmZpbmRfZXhlY3V0YWJsZSgiY2xlYXJ0b29sIikgb3Igc3Bhd24uZmluZF9leGVjdXRhYmxlKCJyY2xlYXJ0b29sIikKKworICAgICAgICBpZiBkYXRhLmdldFZhcigiU1JDUkVWIiwgZCwgVHJ1ZSkgPT0gIklOVkFMSUQiOgorICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIlNldCBhIHZhbGlkIFNSQ1JFViBmb3IgdGhlIGNsZWFyY2FzZSBmZXRjaGVyIGluIHlvdXIgcmVjaXBlLCBlLmcuIFNSQ1JFViA9IFwiL21haW4vTEFURVNUXCIgb3IgYW55IG90aGVyIGxhYmVsIG9mIHlvdXIgY2hvaWNlLiIpCisKKyAgICAgICAgdWQubGFiZWwgPSBkLmdldFZhcigiU1JDUkVWIiwgRmFsc2UpCisgICAgICAgIHVkLmN1c3RvbXNwZWMgPSBkLmdldFZhcigiQ0NBU0VfQ1VTVE9NX0NPTkZJR19TUEVDIiwgVHJ1ZSkKKworICAgICAgICB1ZC5zZXJ2ZXIgICAgID0gIiVzOi8vJXMlcyIgJSAodWQucHJvdG8sIHVkLmhvc3QsIHVkLnBhdGgpCisKKyAgICAgICAgdWQuaWRlbnRpZmllciA9ICJjbGVhcmNhc2UtJXMlcy0lcyIgJSAoIHVkLnZvYi5yZXBsYWNlKCIvIiwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQubW9kdWxlLnJlcGxhY2UoIi8iLCAiLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQubGFiZWwucmVwbGFjZSgiLyIsICIuIikpCisKKyAgICAgICAgdWQudmlld25hbWUgICAgICAgICA9ICIlcy12aWV3JXMiICUgKHVkLmlkZW50aWZpZXIsIGQuZ2V0VmFyKCJEQVRFVElNRSIsIGQsIFRydWUpKQorICAgICAgICB1ZC5jc25hbWUgICAgICAgICAgID0gIiVzLWNvbmZpZy1zcGVjIiAlICh1ZC5pZGVudGlmaWVyKQorICAgICAgICB1ZC5jY2FzZWRpciAgICAgICAgID0gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQudHlwZSkKKyAgICAgICAgdWQudmlld2RpciAgICAgICAgICA9IG9zLnBhdGguam9pbih1ZC5jY2FzZWRpciwgdWQudmlld25hbWUpCisgICAgICAgIHVkLmNvbmZpZ3NwZWNmaWxlICAgPSBvcy5wYXRoLmpvaW4odWQuY2Nhc2VkaXIsIHVkLmNzbmFtZSkKKyAgICAgICAgdWQubG9jYWxmaWxlICAgICAgICA9ICIlcy50YXIuZ3oiICUgKHVkLmlkZW50aWZpZXIpCisKKyAgICAgICAgc2VsZi5kZWJ1ZygiaG9zdCAgICAgICAgICAgID0gJXMiICUgdWQuaG9zdCkKKyAgICAgICAgc2VsZi5kZWJ1ZygicGF0aCAgICAgICAgICAgID0gJXMiICUgdWQucGF0aCkKKyAgICAgICAgc2VsZi5kZWJ1Zygic2VydmVyICAgICAgICAgID0gJXMiICUgdWQuc2VydmVyKQorICAgICAgICBzZWxmLmRlYnVnKCJwcm90byAgICAgICAgICAgPSAlcyIgJSB1ZC5wcm90bykKKyAgICAgICAgc2VsZi5kZWJ1ZygidHlwZSAgICAgICAgICAgID0gJXMiICUgdWQudHlwZSkKKyAgICAgICAgc2VsZi5kZWJ1Zygidm9iICAgICAgICAgICAgID0gJXMiICUgdWQudm9iKQorICAgICAgICBzZWxmLmRlYnVnKCJtb2R1bGUgICAgICAgICAgPSAlcyIgJSB1ZC5tb2R1bGUpCisgICAgICAgIHNlbGYuZGVidWcoImJhc2VjbWQgICAgICAgICA9ICVzIiAlIHVkLmJhc2VjbWQpCisgICAgICAgIHNlbGYuZGVidWcoImxhYmVsICAgICAgICAgICA9ICVzIiAlIHVkLmxhYmVsKQorICAgICAgICBzZWxmLmRlYnVnKCJjY2FzZWRpciAgICAgICAgPSAlcyIgJSB1ZC5jY2FzZWRpcikKKyAgICAgICAgc2VsZi5kZWJ1Zygidmlld2RpciAgICAgICAgID0gJXMiICUgdWQudmlld2RpcikKKyAgICAgICAgc2VsZi5kZWJ1Zygidmlld25hbWUgICAgICAgID0gJXMiICUgdWQudmlld25hbWUpCisgICAgICAgIHNlbGYuZGVidWcoImNvbmZpZ3NwZWNmaWxlICA9ICVzIiAlIHVkLmNvbmZpZ3NwZWNmaWxlKQorICAgICAgICBzZWxmLmRlYnVnKCJsb2NhbGZpbGUgICAgICAgPSAlcyIgJSB1ZC5sb2NhbGZpbGUpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gb3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQubG9jYWxmaWxlKQorCisgICAgZGVmIF9idWlsZF9jY2FzZV9jb21tYW5kKHNlbGYsIHVkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGEgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpczogbWt2aWV3LCBzZXRjcywgcm12aWV3CisgICAgICAgICIiIgorICAgICAgICBvcHRpb25zID0gW10KKworICAgICAgICBpZiAicmNsZWFydG9vbCIgaW4gdWQuYmFzZWNtZDoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItc2VydmVyICVzIiAlIHVkLnNlcnZlcikKKworICAgICAgICBiYXNlY21kID0gIiVzICVzIiAlICh1ZC5iYXNlY21kLCBjb21tYW5kKQorCisgICAgICAgIGlmIGNvbW1hbmQgaXMgJ21rdmlldyc6CisgICAgICAgICAgICBpZiBub3QgInJjbGVhcnRvb2wiIGluIHVkLmJhc2VjbWQ6CisgICAgICAgICAgICAgICAgIyBDbGVhcnRvb2wgbmVlZHMgYSAtc25hcHNob3QgdmlldworICAgICAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItc25hcHNob3QiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi10YWcgJXMiICUgdWQudmlld25hbWUpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCh1ZC52aWV3ZGlyKQorCisgICAgICAgIGVsaWYgY29tbWFuZCBpcyAncm12aWV3JzoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItZm9yY2UiKQorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIiVzIiAlIHVkLnZpZXdkaXIpCisKKyAgICAgICAgZWxpZiBjb21tYW5kIGlzICdzZXRjcyc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLW92ZXJ3cml0ZSIpCisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCh1ZC5jb25maWdzcGVjZmlsZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiSW52YWxpZCBjY2FzZSBjb21tYW5kICVzIiAlIGNvbW1hbmQpCisKKyAgICAgICAgY2Nhc2VjbWQgPSAiJXMgJXMiICUgKGJhc2VjbWQsICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICBzZWxmLmRlYnVnKCJjY2FzZWNtZCA9ICVzIiAlIGNjYXNlY21kKQorICAgICAgICByZXR1cm4gY2Nhc2VjbWQKKworICAgIGRlZiBfd3JpdGVfY29uZmlnc3BlYyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgY29uZmlnIHNwZWMgZmlsZSAodWQuY29uZmlnc3BlY2ZpbGUpIGZvciBjY2FzZSB2aWV3CisgICAgICAgICIiIgorICAgICAgICBjb25maWdfc3BlYyA9ICIiCisgICAgICAgIGN1c3RvbV9jb25maWdfc3BlYyA9IGQuZ2V0VmFyKCJDQ0FTRV9DVVNUT01fQ09ORklHX1NQRUMiLCBkKQorICAgICAgICBpZiBjdXN0b21fY29uZmlnX3NwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBjdXN0b21fY29uZmlnX3NwZWMuc3BsaXQoIlxcbiIpOgorICAgICAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9IGxpbmUrIlxuIgorICAgICAgICAgICAgYmIud2FybigiQSBjdXN0b20gY29uZmlnIHNwZWMgaGFzIGJlZW4gc2V0LCBTUkNSRVYgaXMgb25seSByZWxldmFudCBmb3IgdGhlIHRhcmJhbGwgbmFtZS4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29uZmlnX3NwZWMgKz0gImVsZW1lbnQgKiBDSEVDS0VET1VUXG4iCisgICAgICAgICAgICBjb25maWdfc3BlYyArPSAiZWxlbWVudCAqICVzXG4iICUgdWQubGFiZWwKKyAgICAgICAgICAgIGNvbmZpZ19zcGVjICs9ICJsb2FkICVzJXNcbiIgJSAodWQudm9iLCB1ZC5tb2R1bGUpCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVzaW5nIGNvbmZpZyBzcGVjOiBcbiVzIiAlIGNvbmZpZ19zcGVjKQorCisgICAgICAgIHdpdGggb3Blbih1ZC5jb25maWdzcGVjZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb25maWdfc3BlYykKKworICAgIGRlZiBfcmVtb3ZlX3ZpZXcoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC52aWV3ZGlyKToKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNjYXNlZGlyKQorICAgICAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3JtdmlldycpOworICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNsZWFuaW5nIHVwIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJybXZpZXcgb3V0cHV0OiAlcyIsIG91dHB1dCkKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICgiTEFURVNUIiBpbiB1ZC5sYWJlbCkgb3IgKHVkLmN1c3RvbXNwZWMgYW5kICJMQVRFU1QiIGluIHVkLmN1c3RvbXNwZWMpOgorICAgICAgICAgICAgdWQuaWRlbnRpZmllciArPSAiLSVzIiAlIGQuZ2V0VmFyKCJEQVRFVElNRSIsZCwgVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdXBwb3J0c19zcmNyZXYoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc29ydGFibGVfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gRmFsc2UsIHVkLmlkZW50aWZpZXIKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybCIiIgorCisgICAgICAgICMgTWFrZSBhIGZyZXNoIHZpZXcKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLmNjYXNlZGlyKQorICAgICAgICBzZWxmLl93cml0ZV9jb25maWdzcGVjKHVkLCBkKQorICAgICAgICBjbWQgPSBzZWxmLl9idWlsZF9jY2FzZV9jb21tYW5kKHVkLCAnbWt2aWV3JykKKyAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nIHZpZXcgW1ZPQj0lcyBsYWJlbD0lcyB2aWV3PSVzXSIsIHVkLnZvYiwgdWQubGFiZWwsIHVkLnZpZXduYW1lKQorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kLCB1ZC51cmwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGNtZCwgZCkKKyAgICAgICAgZXhjZXB0IEZldGNoRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJDUkNMSTIwMDhFIiBpbiBlLm1zZzoKKyAgICAgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCIlc1xuJXNcbiIgJSAoZS5tc2csICJDYWxsIGByY2xlYXJ0b29sIGxvZ2luYCBpbiB5b3VyIGNvbnNvbGUgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBjbGVhcmNhc2Ugc2VydmVyIGJlZm9yZSBydW5uaW5nIGJpdGJha2UuIikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKworICAgICAgICAjIFNldCBjb25maWdzcGVjOiBTZXR0aW5nIHRoZSBjb25maWdzcGVjIGVmZmVjdGl2ZWx5IGZldGNoZXMgdGhlIGZpbGVzIGFzIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3NwZWMKKyAgICAgICAgb3MuY2hkaXIodWQudmlld2RpcikKKyAgICAgICAgY21kID0gc2VsZi5fYnVpbGRfY2Nhc2VfY29tbWFuZCh1ZCwgJ3NldGNzJyk7CisgICAgICAgIGxvZ2dlci5pbmZvKCJmZXRjaGluZyBkYXRhIFtWT0I9JXMgbGFiZWw9JXMgdmlldz0lc10iLCB1ZC52b2IsIHVkLmxhYmVsLCB1ZC52aWV3bmFtZSkKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQorICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIGxvZ2dlci5pbmZvKCIlcyIsIG91dHB1dCkKKworICAgICAgICAjIENvcHkgdGhlIGNvbmZpZ3NwZWMgdG8gdGhlIHZpZXdkaXIgc28gd2UgaGF2ZSBpdCBpbiBvdXIgc291cmNlIHRhcmJhbGwgbGF0ZXIKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHVkLmNvbmZpZ3NwZWNmaWxlLCBvcy5wYXRoLmpvaW4odWQudmlld2RpciwgdWQuY3NuYW1lKSkKKworICAgICAgICAjIENsZWFuIGNsZWFyY2FzZSBtZXRhLWRhdGEgYmVmb3JlIHRhcgorCisgICAgICAgIHJ1bmZldGNoY21kKCd0YXIgLWN6ZiAiJXMiIC4nICUgKHVkLmxvY2FscGF0aCksIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgICAgICAjIENsZWFuIHVwIHNvIHdlIGNhbiBjcmVhdGUgYSBuZXcgdmlldyBuZXh0IHRpbWUKKyAgICAgICAgc2VsZi5jbGVhbih1ZCwgZCk7CisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICBzZWxmLl9yZW1vdmVfdmlldyh1ZCwgZCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmNvbmZpZ3NwZWNmaWxlKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2N2cy5weSBiL2JpdGJha2UvbGliL2JiL2ZldGNoMi9jdnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3ZDk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2ZldGNoMi9jdnMucHkKQEAgLTAsMCArMSwxNzEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworIworCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZCwgRmV0Y2hFcnJvciwgTWlzc2luZ1BhcmFtZXRlckVycm9yLCBsb2dnZXIKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCitjbGFzcyBDdnMoRmV0Y2hNZXRob2QpOgorICAgICIiIgorICAgIENsYXNzIHRvIGZldGNoIGEgbW9kdWxlIG9yIG1vZHVsZXMgZnJvbSBjdnMgcmVwb3NpdG9yaWVzCisgICAgIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGN2cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnY3ZzJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcigibW9kdWxlIiwgdWQudXJsKQorICAgICAgICB1ZC5tb2R1bGUgPSB1ZC5wYXJtWyJtb2R1bGUiXQorCisgICAgICAgIHVkLnRhZyA9IHVkLnBhcm0uZ2V0KCd0YWcnLCAiIikKKworICAgICAgICAjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGRhdGUgaW4gY2VydGFpbiBjYXNlcworICAgICAgICBpZiAnZGF0ZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLmRhdGUgPSB1ZC5wYXJtWydkYXRlJ10KKyAgICAgICAgZWxpZiB1ZC50YWc6CisgICAgICAgICAgICB1ZC5kYXRlID0gIiIKKworICAgICAgICBub3JlY3Vyc2UgPSAnJworICAgICAgICBpZiAnbm9yZWN1cnNlJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgbm9yZWN1cnNlID0gJ19ub3JlY3Vyc2UnCisKKyAgICAgICAgZnVsbHBhdGggPSAnJworICAgICAgICBpZiAnZnVsbHBhdGgnIGluIHVkLnBhcm06CisgICAgICAgICAgICBmdWxscGF0aCA9ICdfZnVsbHBhdGgnCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gYmIuZGF0YS5leHBhbmQoJyVzXyVzXyVzXyVzJXMlcy50YXIuZ3onICUgKHVkLm1vZHVsZS5yZXBsYWNlKCcvJywgJy4nKSwgdWQuaG9zdCwgdWQudGFnLCB1ZC5kYXRlLCBub3JlY3Vyc2UsIGZ1bGxwYXRoKSwgZCkKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICh1ZC5kYXRlID09ICJub3ciKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorCisgICAgICAgIG1ldGhvZCA9IHVkLnBhcm0uZ2V0KCdtZXRob2QnLCAncHNlcnZlcicpCisgICAgICAgIGxvY2FsZGlyID0gdWQucGFybS5nZXQoJ2xvY2FsZGlyJywgdWQubW9kdWxlKQorICAgICAgICBjdnNfcG9ydCA9IHVkLnBhcm0uZ2V0KCdwb3J0JywgJycpCisKKyAgICAgICAgY3ZzX3JzaCA9IE5vbmUKKyAgICAgICAgaWYgbWV0aG9kID09ICJleHQiOgorICAgICAgICAgICAgaWYgInJzaCIgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICBjdnNfcnNoID0gdWQucGFybVsicnNoIl0KKworICAgICAgICBpZiBtZXRob2QgPT0gImRpciI6CisgICAgICAgICAgICBjdnNyb290ID0gdWQucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3Zzcm9vdCA9ICI6IiArIG1ldGhvZAorICAgICAgICAgICAgY3ZzcHJveHlob3N0ID0gZC5nZXRWYXIoJ0NWU19QUk9YWV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGN2c3Byb3h5aG9zdDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI7cHJveHk9IiArIGN2c3Byb3h5aG9zdAorICAgICAgICAgICAgY3ZzcHJveHlwb3J0ID0gZC5nZXRWYXIoJ0NWU19QUk9YWV9QT1JUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGN2c3Byb3h5cG9ydDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI7cHJveHlwb3J0PSIgKyBjdnNwcm94eXBvcnQKKyAgICAgICAgICAgIGN2c3Jvb3QgKz0gIjoiICsgdWQudXNlcgorICAgICAgICAgICAgaWYgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjdnNyb290ICs9ICI6IiArIHVkLnBzd2QKKyAgICAgICAgICAgIGN2c3Jvb3QgKz0gIkAiICsgdWQuaG9zdCArICI6IiArIGN2c19wb3J0ICsgdWQucGF0aAorCisgICAgICAgIG9wdGlvbnMgPSBbXQorICAgICAgICBpZiAnbm9yZWN1cnNlJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1sIikKKyAgICAgICAgaWYgdWQuZGF0ZToKKyAgICAgICAgICAgICMgdHJlYXQgWVlZWU1NRERISE1NIHNwZWNpYWxseSBmb3IgQ1ZTCisgICAgICAgICAgICBpZiBsZW4odWQuZGF0ZSkgPT0gMTI6CisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1EIFwiJXMgJXM6JXMgVVRDXCIiICUgKHVkLmRhdGVbMDo4XSwgdWQuZGF0ZVs4OjEwXSwgdWQuZGF0ZVsxMDoxMl0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLUQgXCIlcyBVVENcIiIgJSB1ZC5kYXRlKQorICAgICAgICBpZiB1ZC50YWc6CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgiLXIgJXMiICUgdWQudGFnKQorCisgICAgICAgIGN2c2Jhc2VjbWQgPSBkLmdldFZhcigiRkVUQ0hDTURfY3ZzIiwgVHJ1ZSkKKyAgICAgICAgY3ZzY21kID0gY3ZzYmFzZWNtZCArICIgJy1kIiArIGN2c3Jvb3QgKyAiJyBjbyAiICsgIiAiLmpvaW4ob3B0aW9ucykgKyAiICIgKyB1ZC5tb2R1bGUKKyAgICAgICAgY3ZzdXBkYXRlY21kID0gY3ZzYmFzZWNtZCArICIgJy1kIiArIGN2c3Jvb3QgKyAiJyB1cGRhdGUgLWQgLVAgIiArICIgIi5qb2luKG9wdGlvbnMpCisKKyAgICAgICAgaWYgY3ZzX3JzaDoKKyAgICAgICAgICAgIGN2c2NtZCA9ICJDVlNfUlNIPVwiJXNcIiAlcyIgJSAoY3ZzX3JzaCwgY3ZzY21kKQorICAgICAgICAgICAgY3ZzdXBkYXRlY21kID0gIkNWU19SU0g9XCIlc1wiICVzIiAlIChjdnNfcnNoLCBjdnN1cGRhdGVjbWQpCisKKyAgICAgICAgIyBjcmVhdGUgbW9kdWxlIGRpcmVjdG9yeQorICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSIpCisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignQ1ZTRElSJywgVHJ1ZSksIHBrZykKKyAgICAgICAgbW9kZGlyID0gb3MucGF0aC5qb2luKHBrZ2RpciwgbG9jYWxkaXIpCisgICAgICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4obW9kZGlyLCAnQ1ZTJyksIG9zLlJfT0spOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0ZSAiICsgdWQudXJsKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGN2c3VwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIobW9kZGlyKQorICAgICAgICAgICAgY21kID0gY3ZzdXBkYXRlY21kCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcihwa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBjdnNjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY3ZzY21kLCB1ZC51cmwpCisgICAgICAgICAgICBjbWQgPSBjdnNjbWQKKworICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbbW9kZGlyXSkKKworICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKG1vZGRpciwgb3MuUl9PSyk6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJEaXJlY3RvcnkgJXMgd2FzIG5vdCByZWFkYWJsZSBkZXNwaXRlIHN1Y2Vzc2Z1bCBmZXRjaD8hIiAlIG1vZGRpciwgdWQudXJsKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhID09ICJrZWVwIjoKKyAgICAgICAgICAgIHRhcl9mbGFncyA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiLS1leGNsdWRlICdDVlMnIgorCisgICAgICAgICMgdGFyIHRoZW0gdXAgdG8gYSBkZWZpbmVkIGZpbGVuYW1lCisgICAgICAgIGlmICdmdWxscGF0aCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIG9zLmNoZGlyKHBrZ2RpcikKKyAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIGxvY2FsZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2hkaXIobW9kZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgIGNtZCA9ICJ0YXIgJXMgLWN6ZiAlcyAlcyIgJSAodGFyX2ZsYWdzLCB1ZC5sb2NhbHBhdGgsIG9zLnBhdGguYmFzZW5hbWUobW9kZGlyKSkKKworICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQsIGNsZWFudXAgPSBbdWQubG9jYWxwYXRoXSkKKworICAgIGRlZiBjbGVhbihzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBDbGVhbiBDVlMgRmlsZXMgYW5kIHRhcmJhbGxzICIiIgorCisgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcigiQ1ZTRElSIiwgVHJ1ZSksIHBrZykKKworICAgICAgICBiYi51dGlscy5yZW1vdmUocGtnZGlyLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0LnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY1OGZmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdC5weQpAQCAtMCwwICsxLDQ0NyBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGdpdCBpbXBsZW1lbnRhdGlvbgorCitnaXQgZmV0Y2hlciBzdXBwb3J0IHRoZSBTUkNfVVJJIHdpdGggZm9ybWF0IG9mOgorU1JDX1VSSSA9ICJnaXQ6Ly9zb21lLmhvc3Qvc29tZXBhdGg7T3B0aW9uQT14eHg7T3B0aW9uQj14eHg7Li4uIgorCitTdXBwb3J0ZWQgU1JDX1VSSSBvcHRpb25zIGFyZToKKworLSBicmFuY2gKKyAgIFRoZSBnaXQgYnJhbmNoIHRvIHJldHJpZXZlIGZyb20uIFRoZSBkZWZhdWx0IGlzICJtYXN0ZXIiCisKKyAgIFRoaXMgb3B0aW9uIGFsc28gc3VwcG9ydHMgbXVsdGlwbGUgYnJhbmNoIGZldGNoaW5nLCB3aXRoIGJyYW5jaGVzCisgICBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgSW4gbXVsdGlwbGUgYnJhbmNoZXMgY2FzZSwgdGhlIG5hbWUgb3B0aW9uCisgICBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG5hbWVzIHRvIG1hdGNoIHRoZSBicmFuY2hlcywgd2hpY2ggaXMKKyAgIHVzZWQgdG8gc3BlY2lmeSB0aGUgU1JDX1JFViBmb3IgdGhlIGJyYW5jaAorICAgZS5nOgorICAgU1JDX1VSST0iZ2l0Oi8vc29tZS5ob3N0L3NvbWVwYXRoO2JyYW5jaD1icmFuY2hYLGJyYW5jaFk7bmFtZT1uYW1lWCxuYW1lWSIKKyAgIFNSQ1JFVl9uYW1lWCA9ICJ4eHh4eHh4eHh4eHh4eHh4eHh4eCIKKyAgIFNSQ1JFVl9uYW1lWSA9ICJZWVlZWVlZWVlZWVlZWVlZWVlZWSIKKworLSB0YWcKKyAgICBUaGUgZ2l0IHRhZyB0byByZXRyaWV2ZS4gVGhlIGRlZmF1bHQgaXMgIm1hc3RlciIKKworLSBwcm90b2NvbAorICAgVGhlIG1ldGhvZCB0byB1c2UgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LiBDb21tb24gb3B0aW9ucyBhcmUgImdpdCIsCisgICAiaHR0cCIsICJodHRwcyIsICJmaWxlIiwgInNzaCIgYW5kICJyc3luYyIuIFRoZSBkZWZhdWx0IGlzICJnaXQiLgorCistIHJlYmFzZWFibGUKKyAgIHJlYmFzZWFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVwc3RyZWFtIGdpdCByZXBvIG1heSByZWJhc2UgaW4gdGhlIGZ1dHVyZSwKKyAgIGFuZCBjdXJyZW50IHJldmlzaW9uIG1heSBkaXNhcHBlYXIgZnJvbSB1cHN0cmVhbSByZXBvLiBUaGlzIG9wdGlvbiB3aWxsCisgICByZW1pbmQgZmV0Y2hlciB0byBwcmVzZXJ2ZSBsb2NhbCBjYWNoZSBjYXJlZnVsbHkgZm9yIGZ1dHVyZSB1c2UuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiMCIsIHNldCByZWJhc2VhYmxlPTEgZm9yIHJlYmFzZWFibGUgZ2l0IHJlcG8uCisKKy0gbm9jaGVja291dAorICAgRG9uJ3QgY2hlY2tvdXQgc291cmNlIGNvZGUgd2hlbiB1bnBhY2tpbmcuIHNldCB0aGlzIG9wdGlvbiBmb3IgdGhlIHJlY2lwZQorICAgd2hvIGhhcyBpdHMgb3duIHJvdXRpbmUgdG8gY2hlY2tvdXQgY29kZS4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vY2hlY2tvdXQ9MSBpZiBuZWVkZWQuCisKKy0gYmFyZWNsb25lCisgICBDcmVhdGUgYSBiYXJlIGNsb25lIG9mIHRoZSBzb3VyY2UgY29kZSBhbmQgZG9uJ3QgY2hlY2tvdXQgdGhlIHNvdXJjZSBjb2RlCisgICB3aGVuIHVucGFja2luZy4gU2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlIHdobyBoYXMgaXRzIG93biByb3V0aW5lIHRvCisgICBjaGVja291dCBjb2RlIGFuZCB0cmFja2luZyBicmFuY2ggcmVxdWlyZW1lbnRzLgorICAgVGhlIGRlZmF1bHQgaXMgIjAiLCBzZXQgYmFyZWNsb25lPTEgaWYgbmVlZGVkLgorCistIG5vYnJhbmNoCisgICBEb24ndCBjaGVjayB0aGUgU0hBIHZhbGlkYXRpb24gZm9yIGJyYW5jaC4gc2V0IHRoaXMgb3B0aW9uIGZvciB0aGUgcmVjaXBlCisgICByZWZlcnJpbmcgdG8gY29tbWl0IHdoaWNoIGlzIHZhbGlkIGluIHRhZyBpbnN0ZWFkIG9mIGJyYW5jaC4KKyAgIFRoZSBkZWZhdWx0IGlzICIwIiwgc2V0IG5vYnJhbmNoPTEgaWYgbmVlZGVkLgorCisiIiIKKworI0NvcHlyaWdodCAoQykgMjAwNSBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorZnJvbSAgIGJiICAgIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBHaXQoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIGEgbW9kdWxlIG9yIG1vZHVsZXMgZnJvbSBnaXQgcmVwb3NpdG9yaWVzIiIiCisgICAgZGVmIGluaXQoc2VsZiwgZCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBnaXQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2dpdCddCisKKyAgICBkZWYgc3VwcG9ydHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBpbml0IGdpdCBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdXJsIGRhdGEKKyAgICAgICAgc28gdGhhdCB0aGUgZ2l0IG1ldGhvZCBsaWtlIGxhdGVzdF9yZXZpc2lvbigpIGNhbiB3b3JrCisgICAgICAgICIiIgorICAgICAgICBpZiAncHJvdG9jb2wnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5wcm90byA9IHVkLnBhcm1bJ3Byb3RvY29sJ10KKyAgICAgICAgZWxpZiBub3QgdWQuaG9zdDoKKyAgICAgICAgICAgIHVkLnByb3RvID0gJ2ZpbGUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5wcm90byA9ICJnaXQiCisKKyAgICAgICAgaWYgbm90IHVkLnByb3RvIGluICgnZ2l0JywgJ2ZpbGUnLCAnc3NoJywgJ2h0dHAnLCAnaHR0cHMnLCAncnN5bmMnKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigiSW52YWxpZCBwcm90b2NvbCB0eXBlIiwgdWQudXJsKQorCisgICAgICAgIHVkLm5vY2hlY2tvdXQgPSB1ZC5wYXJtLmdldCgibm9jaGVja291dCIsIjAiKSA9PSAiMSIKKworICAgICAgICB1ZC5yZWJhc2VhYmxlID0gdWQucGFybS5nZXQoInJlYmFzZWFibGUiLCIwIikgPT0gIjEiCisKKyAgICAgICAgdWQubm9icmFuY2ggPSB1ZC5wYXJtLmdldCgibm9icmFuY2giLCIwIikgPT0gIjEiCisKKyAgICAgICAgIyBiYXJlY2xvbmUgaW1wbGllcyBub2NoZWNrb3V0CisgICAgICAgIHVkLmJhcmVjbG9uZSA9IHVkLnBhcm0uZ2V0KCJiYXJlY2xvbmUiLCIwIikgPT0gIjEiCisgICAgICAgIGlmIHVkLmJhcmVjbG9uZToKKyAgICAgICAgICAgIHVkLm5vY2hlY2tvdXQgPSAxCisgIAorICAgICAgICB1ZC51bnJlc29sdmVkcmV2ID0ge30KKyAgICAgICAgYnJhbmNoZXMgPSB1ZC5wYXJtLmdldCgiYnJhbmNoIiwgIm1hc3RlciIpLnNwbGl0KCcsJykKKyAgICAgICAgaWYgbGVuKGJyYW5jaGVzKSAhPSBsZW4odWQubmFtZXMpOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKCJUaGUgbnVtYmVyIG9mIG5hbWUgYW5kIGJyYW5jaCBwYXJhbWV0ZXJzIGlzIG5vdCBiYWxhbmNlZCIsIHVkLnVybCkKKyAgICAgICAgdWQuYnJhbmNoZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaGVzW3VkLm5hbWVzLmluZGV4KG5hbWUpXQorICAgICAgICAgICAgdWQuYnJhbmNoZXNbbmFtZV0gPSBicmFuY2gKKyAgICAgICAgICAgIHVkLnVucmVzb2x2ZWRyZXZbbmFtZV0gPSBicmFuY2gKKworICAgICAgICB1ZC5iYXNlY21kID0gZGF0YS5nZXRWYXIoIkZFVENIQ01EX2dpdCIsIGQsIFRydWUpIG9yICJnaXQgLWMgY29yZS5mc3luY29iamVjdGZpbGVzPTAiCisKKyAgICAgICAgdWQud3JpdGVfdGFyYmFsbHMgPSAoKGRhdGEuZ2V0VmFyKCJCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMiLCBkLCBUcnVlKSBvciAiMCIpICE9ICIwIikgb3IgdWQucmViYXNlYWJsZQorCisgICAgICAgIHVkLnNldHVwX3Jldmlzb25zKGQpCisKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICAjIEVuc3VyZSBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGEgc2hhMjU2IGNoZWNrc3VtL3JldmlzaW9uIGlzIHRyYW5zbGF0ZWQgaW50byBvbmUKKyAgICAgICAgICAgIGlmIG5vdCB1ZC5yZXZpc2lvbnNbbmFtZV0gb3IgbGVuKHVkLnJldmlzaW9uc1tuYW1lXSkgIT0gNDAgIG9yIChGYWxzZSBpbiBbYyBpbiAiYWJjZGVmMDEyMzQ1Njc4OSIgZm9yIGMgaW4gdWQucmV2aXNpb25zW25hbWVdXSk6CisgICAgICAgICAgICAgICAgaWYgdWQucmV2aXNpb25zW25hbWVdOgorICAgICAgICAgICAgICAgICAgICB1ZC51bnJlc29sdmVkcmV2W25hbWVdID0gdWQucmV2aXNpb25zW25hbWVdCisgICAgICAgICAgICAgICAgdWQucmV2aXNpb25zW25hbWVdID0gc2VsZi5sYXRlc3RfcmV2aXNpb24odWQsIGQsIG5hbWUpCisKKyAgICAgICAgZ2l0c3JjbmFtZSA9ICclcyVzJyAlICh1ZC5ob3N0LnJlcGxhY2UoJzonLCAnLicpLCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLnJlcGxhY2UoJyonLCAnLicpKQorICAgICAgICBpZiBnaXRzcmNuYW1lLnN0YXJ0c3dpdGgoJy4nKToKKyAgICAgICAgICAgIGdpdHNyY25hbWUgPSBnaXRzcmNuYW1lWzE6XQorCisgICAgICAgICMgZm9yIHJlYmFzZWFibGUgZ2l0IHJlcG8sIGl0IGlzIG5lY2Vzc2FyeSB0byBrZWVwIG1pcnJvciB0YXIgYmFsbAorICAgICAgICAjIHBlciByZXZpc2lvbiwgc28gdGhhdCBldmVuIHRoZSByZXZpc2lvbiBkaXNhcHBlYXJzIGZyb20gdGhlCisgICAgICAgICMgdXBzdHJlYW0gcmVwbyBpbiB0aGUgZnV0dXJlLCB0aGUgbWlycm9yIHdpbGwgcmVtYWluIGludGFjdCBhbmQgc3RpbGwKKyAgICAgICAgIyBjb250YWlucyB0aGUgcmV2aXNpb24KKyAgICAgICAgaWYgdWQucmViYXNlYWJsZToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgICAgIGdpdHNyY25hbWUgPSBnaXRzcmNuYW1lICsgJ18nICsgdWQucmV2aXNpb25zW25hbWVdCisgICAgICAgIHVkLm1pcnJvcnRhcmJhbGwgPSAnZ2l0Ml8lcy50YXIuZ3onICUgKGdpdHNyY25hbWUpCisgICAgICAgIHVkLmZ1bGxtaXJyb3IgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpLCB1ZC5taXJyb3J0YXJiYWxsKQorICAgICAgICBnaXRkaXIgPSBkLmdldFZhcigiR0lURElSIiwgVHJ1ZSkgb3IgKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSArICIvZ2l0Mi8iKQorICAgICAgICB1ZC5jbG9uZWRpciA9IG9zLnBhdGguam9pbihnaXRkaXIsIGdpdHNyY25hbWUpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gdWQuY2xvbmVkaXIKKworICAgIGRlZiBsb2NhbHBhdGgoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQuY2xvbmVkaXIKKworICAgIGRlZiBuZWVkX3VwZGF0ZShzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5jbG9uZWRpcik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBvcy5jaGRpcih1ZC5jbG9uZWRpcikKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGFpbnNfcmVmKHVkLCBkLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiB1ZC53cml0ZV90YXJiYWxscyBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHVkLmZ1bGxtaXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdHJ5X3ByZW1pcnJvcihzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgSWYgd2UgZG9uJ3QgZG8gdGhpcywgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY2hlY2tvdXQgd2l0aCBvbmx5IHByZW1pcnJvcnMKKyAgICAgICAgIyBpcyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgZC5nZXRWYXIoIkJCX0ZFVENIX1BSRU1JUlJPUk9OTFkiLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmNsb25lZGlyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgdWQucmVwb2NoYW5nZWQgPSBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikKKworICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyh1ZC5mdWxsbWlycm9yKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5jbG9uZWRpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorCisgICAgICAgICMgSWYgdGhlIHJlcG8gc3RpbGwgZG9lc24ndCBleGlzdCwgZmFsbGJhY2sgdG8gY2xvbmluZyBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQuY2xvbmVkaXIpOgorICAgICAgICAgICAgIyBXZSBkbyB0aGlzIHNpbmNlIGdpdCB3aWxsIHVzZSBhICItbCIgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZm9yIGxvY2FsIHVybHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgICAgIGlmIHJlcG91cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgIHJlcG91cmwgPSByZXBvdXJsWzc6XQorICAgICAgICAgICAgY2xvbmVfY21kID0gIiVzIGNsb25lIC0tYmFyZSAtLW1pcnJvciAlcyAlcyIgJSAodWQuYmFzZWNtZCwgcmVwb3VybCwgdWQuY2xvbmVkaXIpCisgICAgICAgICAgICBpZiB1ZC5wcm90by5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY2xvbmVfY21kKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoY2xvbmVfY21kLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAjIFVwZGF0ZSB0aGUgY2hlY2tvdXQgaWYgbmVlZGVkCisgICAgICAgIG5lZWR1cGRhdGUgPSBGYWxzZQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIG5lZWR1cGRhdGUgPSBUcnVlCisgICAgICAgIGlmIG5lZWR1cGRhdGU6CisgICAgICAgICAgICB0cnk6IAorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgcm0gb3JpZ2luIiAlIHVkLmJhc2VjbWQsIGQpIAorICAgICAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiTm8gT3JpZ2luIikKKworICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHJlbW90ZSBhZGQgLS1taXJyb3I9ZmV0Y2ggb3JpZ2luICVzIiAlICh1ZC5iYXNlY21kLCByZXBvdXJsKSwgZCkKKyAgICAgICAgICAgIGZldGNoX2NtZCA9ICIlcyBmZXRjaCAtZiAtLXBydW5lICVzIHJlZnMvKjpyZWZzLyoiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpCisgICAgICAgICAgICBpZiB1ZC5wcm90by5sb3dlcigpICE9ICdmaWxlJzoKKyAgICAgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgZmV0Y2hfY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChmZXRjaF9jbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcHJ1bmUtcGFja2VkIiAlIHVkLmJhc2VjbWQsIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyAtciBybSIgJSB1ZC5iYXNlY21kLCBkKQorICAgICAgICAgICAgdWQucmVwb2NoYW5nZWQgPSBUcnVlCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBmb3IgbmFtZSBpbiB1ZC5uYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250YWluc19yZWYodWQsIGQsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5GZXRjaEVycm9yKCJVbmFibGUgdG8gZmluZCByZXZpc2lvbiAlcyBpbiBicmFuY2ggJXMgZXZlbiBmcm9tIHVwc3RyZWFtIiAlICh1ZC5yZXZpc2lvbnNbbmFtZV0sIHVkLmJyYW5jaGVzW25hbWVdKSkKKworICAgIGRlZiBidWlsZF9taXJyb3JfZGF0YShzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgR2VuZXJhdGUgYSBtaXJyb3IgdGFyYmFsbCBpZiBuZWVkZWQKKyAgICAgICAgaWYgdWQud3JpdGVfdGFyYmFsbHMgYW5kICh1ZC5yZXBvY2hhbmdlZCBvciBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikpOgorICAgICAgICAgICAgIyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBzeW1saW5rIHBvaW50cyB0byByZWFkLW9ubHkgZmlsZXN5c3RlbSB3aXRoIFBSRU1JUlJPUgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsodWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxtaXJyb3IpCisKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0aW5nIHRhcmJhbGwgb2YgZ2l0IHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5mdWxsbWlycm9yLCBvcy5wYXRoLmpvaW4oIi4iKSApLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorCisgICAgZGVmIHVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCk6CisgICAgICAgICIiIiB1bnBhY2sgdGhlIGRvd25sb2FkZWQgc3JjIHRvIGRlc3RkaXIiIiIKKworICAgICAgICBzdWJkaXIgPSB1ZC5wYXJtLmdldCgic3VicGF0aCIsICIiKQorICAgICAgICBpZiBzdWJkaXIgIT0gIiI6CisgICAgICAgICAgICByZWFkcGF0aHNwZWMgPSAiOiVzIiAlIChzdWJkaXIpCisgICAgICAgICAgICBkZWZfZGVzdHN1ZmZpeCA9ICIlcy8iICUgb3MucGF0aC5iYXNlbmFtZShzdWJkaXIucnN0cmlwKCcvJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkcGF0aHNwZWMgPSAiIgorICAgICAgICAgICAgZGVmX2Rlc3RzdWZmaXggPSAiZ2l0LyIKKworICAgICAgICBkZXN0c3VmZml4ID0gdWQucGFybS5nZXQoImRlc3RzdWZmaXgiLCBkZWZfZGVzdHN1ZmZpeCkKKyAgICAgICAgZGVzdGRpciA9IHVkLmRlc3RkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgZGVzdHN1ZmZpeCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGRpcik6CisgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihkZXN0ZGlyKQorCisgICAgICAgIGNsb25lZmxhZ3MgPSAiLXMgLW4iCisgICAgICAgIGlmIHVkLmJhcmVjbG9uZToKKyAgICAgICAgICAgIGNsb25lZmxhZ3MgKz0gIiAtLW1pcnJvciIKKworICAgICAgICAjIFZlcnNpb25zIG9mIGdpdCBwcmlvciB0byAxLjcuOS4yIGhhdmUgaXNzdWVzIHdoZXJlIGZvby5naXQgYW5kIGZvbyBnZXQgY29uZnVzZWQKKyAgICAgICAgIyBhbmQgeW91IGVuZCB1cCB3aXRoIHNvbWUgaG9ycmlibGUgdW5pb24gb2YgdGhlIHR3byB3aGVuIHlvdSBhdHRlbXB0IHRvIGNsb25lIGl0CisgICAgICAgICMgVGhlIGxlYXN0IGludmFzaXZlIHdvcmthcm91bmQgc2VlbXMgdG8gYmUgYSBzeW1saW5rIHRvIHRoZSByZWFsIGRpcmVjdG9yeSB0bworICAgICAgICAjIGZvb2wgZ2l0IGludG8gaWdub3JpbmcgYW55IC5naXQgdmVyc2lvbiB0aGF0IG1heSBhbHNvIGJlIHByZXNlbnQuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgaXNzdWUgaXMgZml4ZWQgaW4gbW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgZ2l0IHNvIHdlIGNhbiBkcm9wIHRoaXMgaGFjayBpbiBmdXR1cmUKKyAgICAgICAgIyB3aGVuIHRoYXQgdmVyc2lvbiBiZWNvbWVzIGNvbW1vbiBlbm91Z2guCisgICAgICAgIGNsb25lZGlyID0gdWQuY2xvbmVkaXIKKyAgICAgICAgaWYgbm90IHVkLnBhdGguZW5kc3dpdGgoIi5naXQiKToKKyAgICAgICAgICAgIGluZGlyZWN0aW9uZGlyID0gZGVzdGRpcls6LTFdICsgIi5pbmRpcmVjdGlvbnN5bWxpbmsiCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmRpcmVjdGlvbmRpcik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGluZGlyZWN0aW9uZGlyKQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShpbmRpcmVjdGlvbmRpcikpCisgICAgICAgICAgICBvcy5zeW1saW5rKHVkLmNsb25lZGlyLCBpbmRpcmVjdGlvbmRpcikKKyAgICAgICAgICAgIGNsb25lZGlyID0gaW5kaXJlY3Rpb25kaXIKKworICAgICAgICBydW5mZXRjaGNtZCgiJXMgY2xvbmUgJXMgJXMvICVzIiAlICh1ZC5iYXNlY21kLCBjbG9uZWZsYWdzLCBjbG9uZWRpciwgZGVzdGRpciksIGQpCisgICAgICAgIG9zLmNoZGlyKGRlc3RkaXIpCisgICAgICAgIHJlcG91cmwgPSBzZWxmLl9nZXRfcmVwb191cmwodWQpCisgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZW1vdGUgc2V0LXVybCBvcmlnaW4gJXMiICUgKHVkLmJhc2VjbWQsIHJlcG91cmwpLCBkKQorICAgICAgICBpZiBub3QgdWQubm9jaGVja291dDoKKyAgICAgICAgICAgIGlmIHN1YmRpciAhPSAiIjoKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgcmVhZC10cmVlICVzJXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0sIHJlYWRwYXRoc3BlYyksIGQpCisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGNoZWNrb3V0LWluZGV4IC1xIC1mIC1hIiAlIHVkLmJhc2VjbWQsIGQpCisgICAgICAgICAgICBlbGlmIG5vdCB1ZC5ub2JyYW5jaDoKKyAgICAgICAgICAgICAgICBicmFuY2huYW1lID0gIHVkLmJyYW5jaGVzW3VkLm5hbWVzWzBdXQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dCAtQiAlcyAlcyIgJSAodWQuYmFzZWNtZCwgYnJhbmNobmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uc1t1ZC5uYW1lc1swXV0pLCBkKQorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBicmFuY2ggLS1zZXQtdXBzdHJlYW0gJXMgb3JpZ2luLyVzIiAlICh1ZC5iYXNlY21kLCBicmFuY2huYW1lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNobmFtZSksIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBjaGVja291dCAlcyIgJSAodWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW3VkLm5hbWVzWzBdXSksIGQpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjbGVhbihzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIiBjbGVhbiB0aGUgZ2l0IGRpcmVjdG9yeSAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZnVsbG1pcnJvcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IgKyAiLmRvbmUiKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY29udGFpbnNfcmVmKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgY21kID0gIiIKKyAgICAgICAgaWYgdWQubm9icmFuY2g6CisgICAgICAgICAgICBjbWQgPSAiJXMgbG9nIC0tcHJldHR5PW9uZWxpbmUgLW4gMSAlcyAtLSAyPiAvZGV2L251bGwgfCB3YyAtbCIgJSAoCisgICAgICAgICAgICAgICAgdWQuYmFzZWNtZCwgdWQucmV2aXNpb25zW25hbWVdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gICIlcyBicmFuY2ggLS1jb250YWlucyAlcyAtLWxpc3QgJXMgMj4gL2Rldi9udWxsIHwgd2MgLWwiICUgKAorICAgICAgICAgICAgICAgIHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1tuYW1lXSwgdWQuYnJhbmNoZXNbbmFtZV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKGNtZCwgZCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihvdXRwdXQuc3BsaXQoKSkgPiAxOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlRoZSBjb21tYW5kICclcycgZ2F2ZSBvdXRwdXQgd2l0aCBtb3JlIHRoZW4gMSBsaW5lIHVuZXhwZWN0ZWRseSwgb3V0cHV0OiAnJXMnIiAlIChjbWQsIG91dHB1dCkpCisgICAgICAgIHJldHVybiBvdXRwdXQuc3BsaXQoKVswXSAhPSAiMCIKKworICAgIGRlZiBfZ2V0X3JlcG9fdXJsKHNlbGYsIHVkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgcmVwb3NpdG9yeSBVUkwKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHVkLnVzZXI6CisgICAgICAgICAgICB1c2VybmFtZSA9IHVkLnVzZXIgKyAnQCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJuYW1lID0gIiIKKyAgICAgICAgcmV0dXJuICIlczovLyVzJXMlcyIgJSAodWQucHJvdG8sIHVzZXJuYW1lLCB1ZC5ob3N0LCB1ZC5wYXRoKQorCisgICAgZGVmIF9yZXZpc2lvbl9rZXkoc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgdW5pcXVlIGtleSBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICJnaXQ6IiArIHVkLmhvc3QgKyB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpICsgdWQudW5yZXNvbHZlZHJldltuYW1lXQorCisgICAgZGVmIF9sc3JlbW90ZShzZWxmLCB1ZCwgZCwgc2VhcmNoKToKKyAgICAgICAgIiIiCisgICAgICAgIFJ1biBnaXQgbHMtcmVtb3RlIHdpdGggdGhlIHNwZWNpZmllZCBzZWFyY2ggc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICByZXBvdXJsID0gc2VsZi5fZ2V0X3JlcG9fdXJsKHVkKQorICAgICAgICBjbWQgPSAiJXMgbHMtcmVtb3RlICVzICVzIiAlIFwKKyAgICAgICAgICAgICAgKHVkLmJhc2VjbWQsIHJlcG91cmwsIHNlYXJjaCkKKyAgICAgICAgaWYgdWQucHJvdG8ubG93ZXIoKSAhPSAnZmlsZSc6CisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgY21kKQorICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZChjbWQsIGQsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBiYi5mZXRjaDIuRmV0Y2hFcnJvcigiVGhlIGNvbW1hbmQgJXMgZ2F2ZSBlbXB0eSBvdXRwdXQgdW5leHBlY3RlZGx5IiAlIGNtZCwgdWQudXJsKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgX2xhdGVzdF9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBIRUFEIHJldmlzaW9uIGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBvdXRwdXQgPSBzZWxmLl9sc3JlbW90ZSh1ZCwgZCwgIiIpCisgICAgICAgICMgVGFncyBvZiB0aGUgZm9ybSBee30gbWF5IG5vdCB3b3JrLCBuZWVkIHRvIGZhbGxiYWNrIHRvIG90aGVyIGZvcm0KKyAgICAgICAgaWYgdWQudW5yZXNvbHZlZHJldltuYW1lXVs6NV0gPT0gInJlZnMvIjoKKyAgICAgICAgICAgIGhlYWQgPSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCisgICAgICAgICAgICB0YWcgPSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoZWFkID0gInJlZnMvaGVhZHMvJXMiICUgdWQudW5yZXNvbHZlZHJldltuYW1lXQorICAgICAgICAgICAgdGFnID0gInJlZnMvdGFncy8lcyIgJSB1ZC51bnJlc29sdmVkcmV2W25hbWVdCisgICAgICAgIGZvciBzIGluIFtoZWFkLCB0YWcgKyAiXnt9IiwgdGFnXToKKyAgICAgICAgICAgIGZvciBsIGluIG91dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBzIGluIGw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsLnNwbGl0KClbMF0KKyAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLkZldGNoRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlICclcycgaW4gdXBzdHJlYW0gZ2l0IHJlcG9zaXRvcnkgaW4gZ2l0IGxzLXJlbW90ZSBvdXRwdXQgZm9yICVzIiAlIFwKKyAgICAgICAgICAgICh1ZC51bnJlc29sdmVkcmV2W25hbWVdLCB1ZC5ob3N0K3VkLnBhdGgpKQorCisgICAgZGVmIGxhdGVzdF92ZXJzaW9uc3RyaW5nKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGhlIGxhdGVzdCByZWxlYXNlIG5hbWUgbGlrZSAieC55LngiIGluICJ4LnkueCtnaXRIQVNIIgorICAgICAgICBieSBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgdGFncyBvdXRwdXQgb2YgbHMtcmVtb3RlLCBjb21wYXJpbmcKKyAgICAgICAgdmVyc2lvbnMgYW5kIHJldHVybmluZyB0aGUgaGlnaGVzdCBtYXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIHB1cHZlciA9ICgnJywgJycpCisKKyAgICAgICAgdGFncmVnZXggPSByZS5jb21waWxlKGQuZ2V0VmFyKCdHSVRUQUdSRUdFWCcsIFRydWUpIG9yICIoP1A8cHZlcj4oWzAtOV1bXC58X10/KSspIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbHNyZW1vdGUodWQsIGQsICJyZWZzL3RhZ3MvKiIpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaDIuRmV0Y2hFcnJvciBvciBiYi5mZXRjaDIuTmV0d29ya0FjY2VzczoKKyAgICAgICAgICAgIHJldHVybiBwdXB2ZXIKKworICAgICAgICB2ZXJzdHJpbmcgPSAiIgorICAgICAgICByZXZpc2lvbiA9ICIiCisgICAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHRhZ19oZWFkID0gbGluZS5zcGxpdCgiLyIpWy0xXQorICAgICAgICAgICAgIyBJZ25vcmUgbm9uLXJlbGVhc2VkIGJyYW5jaGVzCisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKCIoYWxwaGF8YmV0YXxyY3xmaW5hbCkrIiwgdGFnX2hlYWQpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgc2VhcmNoIGZvciB2ZXJzaW9uIGluIHRoZSBsaW5lCisgICAgICAgICAgICB0YWcgPSB0YWdyZWdleC5zZWFyY2godGFnX2hlYWQpCisgICAgICAgICAgICBpZiB0YWcgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0YWcgPSB0YWcuZ3JvdXAoJ3B2ZXInKQorICAgICAgICAgICAgdGFnID0gdGFnLnJlcGxhY2UoIl8iLCAiLiIpCisKKyAgICAgICAgICAgIGlmIHZlcnN0cmluZyBhbmQgYmIudXRpbHMudmVyY21wKCgiMCIsIHRhZywgIiIpLCAoIjAiLCB2ZXJzdHJpbmcsICIiKSkgPCAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHZlcnN0cmluZyA9IHRhZworICAgICAgICAgICAgcmV2aXNpb24gPSBsaW5lLnNwbGl0KClbMF0KKyAgICAgICAgICAgIHB1cHZlciA9ICh2ZXJzdHJpbmcsIHJldmlzaW9uKQorCisgICAgICAgIHJldHVybiBwdXB2ZXIKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb25zW25hbWVdCisKKyAgICBkZWYgZ2l0cGtndl9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBzb3J0YWJsZSByZXZpc2lvbiBudW1iZXIgYnkgY291bnRpbmcgY29tbWl0cyBpbiB0aGUgaGlzdG9yeQorICAgICAgICBCYXNlZCBvbiBnaXRwa2d2LmJibGFzcyBpbiBtZXRhLW9wZW5lbWJlZGRlZAorICAgICAgICAiIiIKKyAgICAgICAgcmV2ID0gc2VsZi5fYnVpbGRfcmV2aXNpb24odWQsIGQsIG5hbWUpCisgICAgICAgIGxvY2FscGF0aCA9IHVkLmxvY2FscGF0aAorICAgICAgICByZXZfZmlsZSA9IG9zLnBhdGguam9pbihsb2NhbHBhdGgsICJvZS1naXRwa2d2XyIgKyByZXYpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NhbHBhdGgpOgorICAgICAgICAgICAgY29tbWl0cyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZXZfZmlsZSkgb3Igbm90IG9zLnBhdGguZ2V0c2l6ZShyZXZfZmlsZSk6CisgICAgICAgICAgICAgICAgZnJvbSBwaXBlcyBpbXBvcnQgcXVvdGUKKyAgICAgICAgICAgICAgICBjb21taXRzID0gYmIuZmV0Y2gyLnJ1bmZldGNoY21kKAorICAgICAgICAgICAgICAgICAgICAgICAgImdpdCByZXYtbGlzdCAlcyAtLSB8IHdjIC1sIiAlIChxdW90ZShyZXYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGQsIHF1aWV0PVRydWUpLnN0cmlwKCkubHN0cmlwKCcwJykKKyAgICAgICAgICAgICAgICBpZiBjb21taXRzOgorICAgICAgICAgICAgICAgICAgICBvcGVuKHJldl9maWxlLCAidyIpLndyaXRlKCIlZFxuIiAlIGludChjb21taXRzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29tbWl0cyA9IG9wZW4ocmV2X2ZpbGUsICJyIikucmVhZGxpbmUoMTI4KS5zdHJpcCgpCisgICAgICAgIGlmIGNvbW1pdHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICIlcyslcyIgJSAoY29tbWl0cywgcmV2Wzo3XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBzdHIocmV2KQorCisgICAgZGVmIGNoZWNrc3RhdHVzKHNlbGYsIGZldGNoLCB1ZCwgZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xzcmVtb3RlKHVkLCBkLCAiIikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBGZXRjaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0YW5uZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzNzg5NwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2ZldGNoMi9naXRhbm5leC5weQpAQCAtMCwwICsxLDc2IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgZ2l0IGFubmV4IGltcGxlbWVudGF0aW9uCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgT3RhdmlvIFNhbHZhZG9yCisjIENvcHlyaWdodCAoQykgMjAxNCBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIuZ2l0IGltcG9ydCBHaXQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgR2l0QU5ORVgoR2l0KToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2l0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydnaXRhbm5leCddCisKKyAgICBkZWYgdXNlc19hbm5leChzZWxmLCB1ZCwgZCk6CisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyByZXYtbGlzdCBnaXQtYW5uZXgiICUgKHVkLmJhc2VjbWQpLCBkLCBxdWlldD1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2guRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdXBkYXRlX2FubmV4KHNlbGYsIHVkLCBkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGdldCAtLWFsbCIgJSAodWQuYmFzZWNtZCksIGQsIHF1aWV0PVRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJ1bmZldGNoY21kKCJjaG1vZCB1K3cgLVIgJXMvYW5uZXgiICUgKHVkLmNsb25lZGlyKSwgZCwgcXVpZXQ9VHJ1ZSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgR2l0LmRvd25sb2FkKHNlbGYsIHVkLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmNsb25lZGlyKQorICAgICAgICBhbm5leCA9IHNlbGYudXNlc19hbm5leCh1ZCwgZCkKKyAgICAgICAgaWYgYW5uZXg6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9hbm5leCh1ZCwgZCkKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgorICAgICAgICBHaXQudW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKQorCisgICAgICAgIG9zLmNoZGlyKHVkLmRlc3RkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCIlcyBhbm5leCBzeW5jIiAlICh1ZC5iYXNlY21kKSwgZCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLkZldGNoRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYW5uZXggPSBzZWxmLnVzZXNfYW5uZXgodWQsIGQpCisgICAgICAgIGlmIGFubmV4OgorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGFubmV4IGdldCIgJSAodWQuYmFzZWNtZCksIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiY2htb2QgdSt3IC1SICVzLy5naXQvYW5uZXgiICUgKHVkLmRlc3RkaXIpLCBkLCBxdWlldD1UcnVlKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2dpdHNtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTJlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvZ2l0c20ucHkKQEAgLTAsMCArMSwxMzcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBnaXQgc3VibW9kdWxlcyBpbXBsZW1lbnRhdGlvbgorCitJbmhlcml0cyBmcm9tIGFuZCBleHRlbmRzIHRoZSBHaXQgZmV0Y2hlciB0byByZXRyaWV2ZSBzdWJtb2R1bGVzIG9mIGEgZ2l0IHJlcG9zaXRvcnkKK2FmdGVyIGNsb25pbmcuCisKK1NSQ19VUkkgPSAiZ2l0c206Ly88c2VlIEdpdCBmZXRjaGVyIGZvciBzeW50YXg+IgorCitTZWUgdGhlIEdpdCBmZXRjaGVyLCBnaXQ6Ly8sIGZvciB1c2FnZSBkb2N1bWVudGF0aW9uLgorCitOT1RFOiBTd2l0Y2hpbmcgYSBTUkNfVVJJIGZyb20gImdpdDovLyIgdG8gImdpdHNtOi8vIiByZXF1aXJlcyBhIGNsZWFuIG9mIHlvdXIgcmVjaXBlLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitmcm9tICAgYmIgICAgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIuZ2l0IGltcG9ydCBHaXQKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgR2l0U00oR2l0KToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2l0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVkLnR5cGUgaW4gWydnaXRzbSddCisKKyAgICBkZWYgdXNlc19zdWJtb2R1bGVzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHNob3cgJXM6LmdpdG1vZHVsZXMiICUgKHVkLmJhc2VjbWQsIHVkLnJldmlzaW9uc1tuYW1lXSksIGQsIHF1aWV0PVRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5GZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3NldF9yZWxhdGl2ZV9wYXRocyhzZWxmLCByZXBvcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBGaXggc3VibW9kdWxlIHBhdGhzIHRvIGJlIHJlbGF0aXZlIGluc3RlYWQgb2YgYWJzb2x1dGUsCisgICAgICAgIHNvIHRoYXQgd2hlbiB3ZSBtb3ZlIHRoZSByZXBvIGl0IGRvZXNuJ3QgYnJlYWsKKyAgICAgICAgKEluIEdpdCAxLjcuMTArIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5KQorICAgICAgICAiIiIKKyAgICAgICAgc3VibW9kdWxlcyA9IFtdCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocmVwb3BhdGgsICcuZ2l0bW9kdWxlcycpLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnW3N1Ym1vZHVsZScpOgorICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVzLmFwcGVuZChsaW5lLnNwbGl0KCciJylbMV0pCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBzdWJtb2R1bGVzOgorICAgICAgICAgICAgcmVwb19jb25mID0gb3MucGF0aC5qb2luKHJlcG9wYXRoLCBtb2R1bGUsICcuZ2l0JykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlcG9fY29uZik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9fY29uZiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBuZXdwYXRoID0gJycKKyAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2dpdGRpcjonKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGggPSBsaW5lLnNwbGl0KCc6ICcpWy0xXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2xkcGF0aC5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGF0aCA9ICcuLi8nICogKG1vZHVsZS5jb3VudCgnLycpICsgMSkgKyAnLmdpdC9tb2R1bGVzLycgKyBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXSA9ICdnaXRkaXI6ICVzXG4nICUgbmV3cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aDoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9fY29uZiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCisgICAgICAgICAgICByZXBvX2NvbmYyID0gb3MucGF0aC5qb2luKHJlcG9wYXRoLCAnLmdpdCcsICdtb2R1bGVzJywgbW9kdWxlLCAnY29uZmlnJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlcG9fY29uZjIpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihyZXBvX2NvbmYyLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIG5ld3BhdGggPSAnJworICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnd29ya3RyZWUgPSAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGggPSBsaW5lLnNwbGl0KCcgPSAnKVstMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZHBhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BhdGggPSAnLi4vJyAqIChtb2R1bGUuY291bnQoJy8nKSArIDMpICsgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSAnXHR3b3JrdHJlZSA9ICVzXG4nICUgbmV3cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aDoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJlcG9fY29uZjIsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKworICAgIGRlZiB1cGRhdGVfc3VibW9kdWxlcyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgV2UgaGF2ZSB0byBjb252ZXJ0IGJhcmUgLT4gZnVsbCByZXBvLCBkbyB0aGUgc3VibW9kdWxlIGJpdCwgdGhlbiBjb252ZXJ0IGJhY2sKKyAgICAgICAgdG1wY2xvbmVkaXIgPSB1ZC5jbG9uZWRpciArICIudG1wIgorICAgICAgICBnaXRkaXIgPSB0bXBjbG9uZWRpciArIG9zLnNlcCArICIuZ2l0IgorICAgICAgICBiYi51dGlscy5yZW1vdmUodG1wY2xvbmVkaXIsIFRydWUpCisgICAgICAgIG9zLm1rZGlyKHRtcGNsb25lZGlyKQorICAgICAgICBvcy5yZW5hbWUodWQuY2xvbmVkaXIsIGdpdGRpcikKKyAgICAgICAgcnVuZmV0Y2hjbWQoInNlZCAiICsgZ2l0ZGlyICsgIi9jb25maWcgLWkgLWUgJ3MvYmFyZS4qPS4qdHJ1ZS9iYXJlID0gZmFsc2UvJyIsIGQpCisgICAgICAgIG9zLmNoZGlyKHRtcGNsb25lZGlyKQorICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiByZXNldCAtLWhhcmQiLCBkKQorICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBjaGVja291dCAiICsgdWQucmV2aXNpb25zW3VkLm5hbWVzWzBdXSwgZCkKKyAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgc3VibW9kdWxlIGluaXQiLCBkKQorICAgICAgICBydW5mZXRjaGNtZCh1ZC5iYXNlY21kICsgIiBzdWJtb2R1bGUgdXBkYXRlIiwgZCkKKyAgICAgICAgc2VsZi5fc2V0X3JlbGF0aXZlX3BhdGhzKHRtcGNsb25lZGlyKQorICAgICAgICBydW5mZXRjaGNtZCgic2VkICIgKyBnaXRkaXIgKyAiL2NvbmZpZyAtaSAtZSAncy9iYXJlLio9LipmYWxzZS9iYXJlID0gdHJ1ZS8nIiwgZCkKKyAgICAgICAgb3MucmVuYW1lKGdpdGRpciwgdWQuY2xvbmVkaXIsKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodG1wY2xvbmVkaXIsIFRydWUpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICBHaXQuZG93bmxvYWQoc2VsZiwgdWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIodWQuY2xvbmVkaXIpCisgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCkKKyAgICAgICAgaWYgc3VibW9kdWxlczoKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX3N1Ym1vZHVsZXModWQsIGQpCisKKyAgICBkZWYgdW5wYWNrKHNlbGYsIHVkLCBkZXN0ZGlyLCBkKToKKyAgICAgICAgR2l0LnVucGFjayhzZWxmLCB1ZCwgZGVzdGRpciwgZCkKKyAgICAgICAgCisgICAgICAgIG9zLmNoZGlyKHVkLmRlc3RkaXIpCisgICAgICAgIHN1Ym1vZHVsZXMgPSBzZWxmLnVzZXNfc3VibW9kdWxlcyh1ZCwgZCkKKyAgICAgICAgaWYgc3VibW9kdWxlczoKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJjcCAtciAiICsgdWQuY2xvbmVkaXIgKyAiL21vZHVsZXMgIiArIHVkLmRlc3RkaXIgKyAiLy5naXQvIiwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSBpbml0IiwgZCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKHVkLmJhc2VjbWQgKyAiIHN1Ym1vZHVsZSB1cGRhdGUiLCBkKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvaGcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3ODYzMAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2ZldGNoMi9oZy5weQpAQCAtMCwwICsxLDI3NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9uIGZvciBtZXJjdXJpYWwgRFJDUyAoaGcpLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDQgICAgICAgIE1hcmNpbiBKdXN6a2lld2ljegorIyBDb3B5cmlnaHQgKEMpIDIwMDcgICAgICAgIFJvYmVydCBTY2h1c3RlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gYmIgaW1wb3J0IGRhdGEKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBNaXNzaW5nUGFyYW1ldGVyRXJyb3IKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorCitjbGFzcyBIZyhGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggZnJvbSBtZXJjdXJpYWwgcmVwb3NpdG9yaWVzIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIG1lcmN1cmlhbC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnaGcnXQorCisgICAgZGVmIHN1cHBvcnRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgRG9uJ3QgcmVxdWlyZSBjaGVja3N1bXMgZm9yIGxvY2FsIGFyY2hpdmVzIGNyZWF0ZWQgZnJvbQorICAgICAgICByZXBvc2l0b3J5IGNoZWNrb3V0cy4KKyAgICAgICAgIiIiIAorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgaW5pdCBoZyBzcGVjaWZpYyB2YXJpYWJsZSB3aXRoaW4gdXJsIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCAibW9kdWxlIiBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1BhcmFtZXRlckVycm9yKCdtb2R1bGUnLCB1ZC51cmwpCisKKyAgICAgICAgdWQubW9kdWxlID0gdWQucGFybVsibW9kdWxlIl0KKworICAgICAgICBpZiAncHJvdG9jb2wnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5wcm90byA9IHVkLnBhcm1bJ3Byb3RvY29sJ10KKyAgICAgICAgZWxpZiBub3QgdWQuaG9zdDoKKyAgICAgICAgICAgIHVkLnByb3RvID0gJ2ZpbGUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5wcm90byA9ICJoZyIKKworICAgICAgICB1ZC5zZXR1cF9yZXZpc29ucyhkKQorCisgICAgICAgIGlmICdyZXYnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5yZXZpc2lvbiA9IHVkLnBhcm1bJ3JldiddCisgICAgICAgIGVsaWYgbm90IHVkLnJldmlzaW9uOgorICAgICAgICAgICAgdWQucmV2aXNpb24gPSBzZWxmLmxhdGVzdF9yZXZpc2lvbih1ZCwgZCkKKworICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBtZXJjdXJpYWwgY2hlY2tvdXRzCisgICAgICAgIGhnc3JjbmFtZSA9ICclc18lc18lcycgJSAodWQubW9kdWxlLnJlcGxhY2UoJy8nLCAnLicpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCcvJywgJy4nKSkKKyAgICAgICAgdWQubWlycm9ydGFyYmFsbCA9ICdoZ18lcy50YXIuZ3onICUgaGdzcmNuYW1lCisgICAgICAgIHVkLmZ1bGxtaXJyb3IgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpLCB1ZC5taXJyb3J0YXJiYWxsKQorCisgICAgICAgIGhnZGlyID0gZC5nZXRWYXIoIkhHRElSIiwgVHJ1ZSkgb3IgKGQuZ2V0VmFyKCJETF9ESVIiLCBUcnVlKSArICIvaGcvIikKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGhnZGlyLCBoZ3NyY25hbWUpCisgICAgICAgIHVkLm1vZGRpciA9IG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIHVkLm1vZHVsZSkKKyAgICAgICAgdWQubG9jYWxmaWxlID0gdWQubW9kZGlyCisgICAgICAgIHVkLmJhc2VjbWQgPSBkYXRhLmdldFZhcigiRkVUQ0hDTURfaGciLCBkLCBUcnVlKSBvciAiL3Vzci9iaW4vZW52IGhnIgorCisgICAgICAgIHVkLndyaXRlX3RhcmJhbGxzID0gZC5nZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIsIFRydWUpCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICByZXZUYWcgPSB1ZC5wYXJtLmdldCgncmV2JywgJ3RpcCcpCisgICAgICAgIGlmIHJldlRhZyA9PSAidGlwIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdHJ5X3ByZW1pcnJvcihzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgSWYgd2UgZG9uJ3QgZG8gdGhpcywgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY2hlY2tvdXQgd2l0aCBvbmx5IHByZW1pcnJvcnMKKyAgICAgICAgIyBpcyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgZC5nZXRWYXIoIkJCX0ZFVENIX1BSRU1JUlJPUk9OTFkiLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLm1vZGRpcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfYnVpbGRoZ2NvbW1hbmQoc2VsZiwgdWQsIGQsIGNvbW1hbmQpOgorICAgICAgICAiIiIKKyAgICAgICAgQnVpbGQgdXAgYW4gaGcgY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgImluZm8iCisgICAgICAgICIiIgorCisgICAgICAgIHByb3RvID0gdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ2h0dHAnKQorCisgICAgICAgIGhvc3QgPSB1ZC5ob3N0CisgICAgICAgIGlmIHByb3RvID09ICJmaWxlIjoKKyAgICAgICAgICAgIGhvc3QgPSAiLyIKKyAgICAgICAgICAgIHVkLmhvc3QgPSAibG9jYWxob3N0IgorCisgICAgICAgIGlmIG5vdCB1ZC51c2VyOgorICAgICAgICAgICAgaGdyb290ID0gaG9zdCArIHVkLnBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgaGdyb290ID0gdWQudXNlciArICI6IiArIHVkLnBzd2QgKyAiQCIgKyBob3N0ICsgdWQucGF0aAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoZ3Jvb3QgPSB1ZC51c2VyICsgIkAiICsgaG9zdCArIHVkLnBhdGgKKworICAgICAgICBpZiBjb21tYW5kID09ICJpbmZvIjoKKyAgICAgICAgICAgIHJldHVybiAiJXMgaWRlbnRpZnkgLWkgJXM6Ly8lcy8lcyIgJSAodWQuYmFzZWNtZCwgcHJvdG8sIGhncm9vdCwgdWQubW9kdWxlKQorCisgICAgICAgIG9wdGlvbnMgPSBbXTsKKworICAgICAgICAjIERvbid0IHNwZWNpZnkgcmV2aXNpb24gZm9yIHRoZSBmZXRjaDsgY2xvbmUgdGhlIGVudGlyZSByZXBvLgorICAgICAgICAjIFRoaXMgYXZvaWRzIGFuIGlzc3VlIGlmIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gaXMgYSB0YWcsIGJlY2F1c2UKKyAgICAgICAgIyB0aGUgdGFnIGFjdHVhbGx5IGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uICsgMSwgc28gaXQgd29uJ3QKKyAgICAgICAgIyBiZSBhdmFpbGFibGUgd2hlbiB1c2VkIGluIGFueSBzdWNjZXNzaXZlIGNvbW1hbmRzLgorICAgICAgICBpZiB1ZC5yZXZpc2lvbiBhbmQgY29tbWFuZCAhPSAiZmV0Y2giOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnJldmlzaW9uKQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gImZldGNoIjoKKyAgICAgICAgICAgIGlmIHVkLnVzZXIgYW5kIHVkLnBzd2Q6CisgICAgICAgICAgICAgICAgY21kID0gIiVzIC0tY29uZmlnIGF1dGguZGVmYXVsdC5wcmVmaXg9KiAtLWNvbmZpZyBhdXRoLmRlZmF1bHQudXNlcm5hbWU9JXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnBhc3N3b3JkPSVzIC0tY29uZmlnIFwiYXV0aC5kZWZhdWx0LnNjaGVtZXM9JXNcIiBjbG9uZSAlcyAlczovLyVzLyVzICVzIiAlICh1ZC5iYXNlY21kLCB1ZC51c2VyLCB1ZC5wc3dkLCBwcm90bywgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBoZ3Jvb3QsIHVkLm1vZHVsZSwgdWQubW9kdWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgY2xvbmUgJXMgJXM6Ly8lcy8lcyAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBoZ3Jvb3QsIHVkLm1vZHVsZSwgdWQubW9kdWxlKQorICAgICAgICBlbGlmIGNvbW1hbmQgPT0gInB1bGwiOgorICAgICAgICAgICAgIyBkbyBub3QgcGFzcyBvcHRpb25zIGxpc3Q7IGxpbWl0aW5nIHB1bGwgdG8gcmV2IGNhdXNlcyB0aGUgbG9jYWwKKyAgICAgICAgICAgICMgcmVwbyBub3QgdG8gY29udGFpbiBpdCBhbmQgaW1tZWRpYXRlbHkgZm9sbG93aW5nICJ1cGRhdGUiIGNvbW1hbmQKKyAgICAgICAgICAgICMgd2lsbCBjcmFzaAorICAgICAgICAgICAgaWYgdWQudXNlciBhbmQgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnByZWZpeD0qIC0tY29uZmlnIGF1dGguZGVmYXVsdC51c2VybmFtZT0lcyAtLWNvbmZpZyBhdXRoLmRlZmF1bHQucGFzc3dvcmQ9JXMgLS1jb25maWcgXCJhdXRoLmRlZmF1bHQuc2NoZW1lcz0lc1wiIHB1bGwiICUgKHVkLmJhc2VjbWQsIHVkLnVzZXIsIHVkLnBzd2QsIHByb3RvKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgcHVsbCIgJSAodWQuYmFzZWNtZCkKKyAgICAgICAgZWxpZiBjb21tYW5kID09ICJ1cGRhdGUiOgorICAgICAgICAgICAgaWYgdWQudXNlciBhbmQgdWQucHN3ZDoKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgLS1jb25maWcgYXV0aC5kZWZhdWx0LnByZWZpeD0qIC0tY29uZmlnIGF1dGguZGVmYXVsdC51c2VybmFtZT0lcyAtLWNvbmZpZyBhdXRoLmRlZmF1bHQucGFzc3dvcmQ9JXMgLS1jb25maWcgXCJhdXRoLmRlZmF1bHQuc2NoZW1lcz0lc1wiIHVwZGF0ZSAtQyAlcyIgJSAodWQuYmFzZWNtZCwgdWQudXNlciwgdWQucHN3ZCwgcHJvdG8sICIgIi5qb2luKG9wdGlvbnMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjbWQgPSAiJXMgdXBkYXRlIC1DICVzIiAlICh1ZC5iYXNlY21kLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgaGcgY29tbWFuZCAlcyIgJSBjb21tYW5kLCB1ZC51cmwpCisKKyAgICAgICAgcmV0dXJuIGNtZAorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJsIiIiCisKKyAgICAgICAgdWQucmVwb2NoYW5nZWQgPSBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikKKworICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSAnIiArIHVkLm1vZGRpciArICInIikKKworICAgICAgICAjIElmIHRoZSBjaGVja291dCBkb2Vzbid0IGV4aXN0IGFuZCB0aGUgbWlycm9yIHRhcmJhbGwgZG9lcywgZXh0cmFjdCBpdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModWQucGtnZGlyKSBhbmQgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAteHpmICVzIiAlICh1ZC5mdWxsbWlycm9yKSwgZCkKKworICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHVkLm1vZGRpciwgJy5oZycpLCBvcy5SX09LKToKKyAgICAgICAgICAgICMgRm91bmQgdGhlIHNvdXJjZSwgY2hlY2sgd2hldGhlciBuZWVkIHB1bGwKKyAgICAgICAgICAgIHVwZGF0ZWNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHVwZGF0ZWNtZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZCh1cGRhdGVjbWQsIGQpCisgICAgICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkZldGNoRXJyb3I6CisgICAgICAgICAgICAgICAgIyBSdW5ubmluZyBwdWxsIGluIHRoZSByZXBvCisgICAgICAgICAgICAgICAgcHVsbGNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAicHVsbCIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlB1bGxpbmcgIiArIHVkLnVybCkKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZSBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHB1bGxjbWQpCisgICAgICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHB1bGxjbWQsIHVkLnVybCkKKyAgICAgICAgICAgICAgICBydW5mZXRjaGNtZChwdWxsY21kLCBkKQorICAgICAgICAgICAgICAgIHVkLnJlcG9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICMgTm8gc291cmNlIGZvdW5kLCBjbG9uZSBpdC4KKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLm1vZGRpcik6CisgICAgICAgICAgICBmZXRjaGNtZCA9IHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiZmV0Y2giKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkZldGNoICIgKyB1ZC51cmwpCisgICAgICAgICAgICAjIGNoZWNrIG91dCBzb3VyY2VzIHRoZXJlCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodWQucGtnZGlyKQorICAgICAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgZmV0Y2hjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgZmV0Y2hjbWQsIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKGZldGNoY21kLCBkKQorCisgICAgICAgICMgRXZlbiB3aGVuIHdlIGNsb25lIChmZXRjaCksIHdlIHN0aWxsIG5lZWQgdG8gdXBkYXRlIGFzIGhnJ3MgY2xvbmUKKyAgICAgICAgIyB3b24ndCBjaGVja291dCB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIGlmIGl0cyBvbiBhIGJyYW5jaAorICAgICAgICB1cGRhdGVjbWQgPSBzZWxmLl9idWlsZGhnY29tbWFuZCh1ZCwgZCwgInVwZGF0ZSIpCisgICAgICAgIG9zLmNoZGlyKHVkLm1vZGRpcikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgdXBkYXRlY21kKQorICAgICAgICBydW5mZXRjaGNtZCh1cGRhdGVjbWQsIGQpCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW4gdGhlIGhnIGRpciAiIiIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodWQubG9jYWxwYXRoLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUodWQuZnVsbG1pcnJvcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHVkLmZ1bGxtaXJyb3IgKyAiLmRvbmUiKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGlwIHJldmlzaW9uIGZvciB0aGUgdXJsCisgICAgICAgICIiIgorICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgc2VsZi5fYnVpbGRoZ2NvbW1hbmQodWQsIGQsICJpbmZvIikpCisgICAgICAgIG91dHB1dCA9IHJ1bmZldGNoY21kKHNlbGYuX2J1aWxkaGdjb21tYW5kKHVkLCBkLCAiaW5mbyIpLCBkKQorICAgICAgICByZXR1cm4gb3V0cHV0LnN0cmlwKCkKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQsIG5hbWUpOgorICAgICAgICByZXR1cm4gdWQucmV2aXNpb24KKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiaGc6IiArIHVkLm1vZGRpcgorCisgICAgZGVmIGJ1aWxkX21pcnJvcl9kYXRhKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIyBHZW5lcmF0ZSBhIG1pcnJvciB0YXJiYWxsIGlmIG5lZWRlZAorICAgICAgICBpZiB1ZC53cml0ZV90YXJiYWxscyA9PSAiMSIgYW5kICh1ZC5yZXBvY2hhbmdlZCBvciBub3Qgb3MucGF0aC5leGlzdHModWQuZnVsbG1pcnJvcikpOgorICAgICAgICAgICAgIyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBzeW1saW5rIHBvaW50cyB0byByZWFkLW9ubHkgZmlsZXN5c3RlbSB3aXRoIFBSRU1JUlJPUgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsodWQuZnVsbG1pcnJvcik6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHVkLmZ1bGxtaXJyb3IpCisKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDcmVhdGluZyB0YXJiYWxsIG9mIGhnIHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRhciAtY3pmICVzICVzIiAlICh1ZC5mdWxsbWlycm9yLCB1ZC5tb2R1bGUpLCBkKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoInRvdWNoICVzLmRvbmUiICUgKHVkLmZ1bGxtaXJyb3IpLCBkKQorCisgICAgZGVmIGxvY2FscGF0aChzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC5wa2dkaXIKKworICAgIGRlZiB1bnBhY2soc2VsZiwgdWQsIGRlc3RkaXIsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFrZSBhIGxvY2FsIGNsb25lIG9yIGV4cG9ydCBmb3IgdGhlIHVybAorICAgICAgICAiIiIKKworICAgICAgICByZXZmbGFnID0gIi1yICVzIiAlIHVkLnJldmlzaW9uCisgICAgICAgIHN1YmRpciA9IHVkLnBhcm0uZ2V0KCJkZXN0c3VmZml4IiwgdWQubW9kdWxlKQorICAgICAgICBjb2RpciA9ICIlcy8lcyIgJSAoZGVzdGRpciwgc3ViZGlyKQorCisgICAgICAgIHNjbWRhdGEgPSB1ZC5wYXJtLmdldCgic2NtZGF0YSIsICIiKQorICAgICAgICBpZiBzY21kYXRhICE9ICJub2tlZXAiOgorICAgICAgICAgICAgaWYgbm90IG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4oY29kaXIsICcuaGcnKSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJVbnBhY2s6IGNyZWF0aW5nIG5ldyBoZyByZXBvc2l0b3J5IGluICciICsgY29kaXIgKyAiJyIpCisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIGluaXQgJXMiICUgKHVkLmJhc2VjbWQsIGNvZGlyKSwgZCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVW5wYWNrOiB1cGRhdGluZyBzb3VyY2UgaW4gJyIgKyBjb2RpciArICInIikKKyAgICAgICAgICAgIG9zLmNoZGlyKGNvZGlyKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQoIiVzIHB1bGwgJXMiICUgKHVkLmJhc2VjbWQsIHVkLm1vZGRpciksIGQpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgdXAgLUMgJXMiICUgKHVkLmJhc2VjbWQsIHJldmZsYWcpLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJVbnBhY2s6IGV4dHJhY3Rpbmcgc291cmNlIHRvICciICsgY29kaXIgKyAiJyIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5tb2RkaXIpCisgICAgICAgICAgICBydW5mZXRjaGNtZCgiJXMgYXJjaGl2ZSAtdCBmaWxlcyAlcyAlcyIgJSAodWQuYmFzZWNtZCwgcmV2ZmxhZywgY29kaXIpLCBkKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL2xvY2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOTIxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvbG9jYWwucHkKQEAgLTAsMCArMSwxMjggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IG9zCitpbXBvcnQgdXJsbGliCitpbXBvcnQgYmIKK2ltcG9ydCBiYi51dGlscworZnJvbSAgIGJiIGltcG9ydCBkYXRhCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaE1ldGhvZCwgRmV0Y2hFcnJvcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgbG9nZ2VyCisKK2NsYXNzIExvY2FsKEZldGNoTWV0aG9kKToKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgcmVwcmVzZW50cyBhIGxvY2FsIGZldGNoLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHVybGRhdGEudHlwZSBpbiBbJ2ZpbGUnXQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgICMgV2UgZG9uJ3Qgc2V0IGxvY2FsZmlsZSBhcyBmb3IgdGhpcyBmZXRjaGVyIHRoZSBmaWxlIGlzIGFscmVhZHkgbG9jYWwhCisgICAgICAgIHVkLmRlY29kZWR1cmwgPSB1cmxsaWIudW5xdW90ZSh1ZC51cmwuc3BsaXQoIjovLyIpWzFdLnNwbGl0KCI7IilbMF0pCisgICAgICAgIHVkLmJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh1ZC5kZWNvZGVkdXJsKQorICAgICAgICB1ZC5iYXNlcGF0aCA9IHVkLmRlY29kZWR1cmwKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgbG9jYWxwYXRoKHNlbGYsIHVybGRhdGEsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2NhbCBmaWxlbmFtZSBvZiBhIGdpdmVuIHVybCBhc3N1bWluZyBhIHN1Y2Nlc3NmdWwgZmV0Y2guCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5sb2NhbHBhdGhzKHVybGRhdGEsIGQpWy0xXQorCisgICAgZGVmIGxvY2FscGF0aHMoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvY2FsIGZpbGVuYW1lIG9mIGEgZ2l2ZW4gdXJsIGFzc3VtaW5nIGEgc3VjY2Vzc2Z1bCBmZXRjaC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlYXJjaGVkID0gW10KKyAgICAgICAgcGF0aCA9IHVybGRhdGEuZGVjb2RlZHVybAorICAgICAgICBuZXdwYXRoID0gcGF0aAorICAgICAgICBpZiBwYXRoWzBdID09ICIvIjoKKyAgICAgICAgICAgIHJldHVybiBbcGF0aF0KKyAgICAgICAgZmlsZXNwYXRoID0gZGF0YS5nZXRWYXIoJ0ZJTEVTUEFUSCcsIGQsIFRydWUpCisgICAgICAgIGlmIGZpbGVzcGF0aDoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2VhcmNoaW5nIGZvciAlcyBpbiBwYXRoczpcbiAgICAlcyIgJSAocGF0aCwgIlxuICAgICIuam9pbihmaWxlc3BhdGguc3BsaXQoIjoiKSkpKQorICAgICAgICAgICAgbmV3cGF0aCwgaGlzdCA9IGJiLnV0aWxzLndoaWNoKGZpbGVzcGF0aCwgcGF0aCwgaGlzdG9yeT1UcnVlKQorICAgICAgICAgICAgc2VhcmNoZWQuZXh0ZW5kKGhpc3QpCisgICAgICAgIGlmIG5vdCBuZXdwYXRoOgorICAgICAgICAgICAgZmlsZXNkaXIgPSBkYXRhLmdldFZhcignRklMRVNESVInLCBkLCBUcnVlKQorICAgICAgICAgICAgaWYgZmlsZXNkaXI6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZWFyY2hpbmcgZm9yICVzIGluIHBhdGg6ICVzIiAlIChwYXRoLCBmaWxlc2RpcikpCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgcGF0aCkKKyAgICAgICAgICAgICAgICBzZWFyY2hlZC5hcHBlbmQobmV3cGF0aCkKKyAgICAgICAgaWYgKG5vdCBuZXdwYXRoIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdwYXRoKSkgYW5kIHBhdGguZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgIyBGb3IgZXhwcmVzc2lvbnMgdXNpbmcgJyonLCBiZXN0IHdlIGNhbiBkbyBpcyB0YWtlIHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gRklMRVNQQVRIIHRoYXQgZXhpc3RzCisgICAgICAgICAgICBuZXdwYXRoLCBoaXN0ID0gYmIudXRpbHMud2hpY2goZmlsZXNwYXRoLCAiLiIsIGhpc3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIHNlYXJjaGVkLmV4dGVuZChoaXN0KQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJTZWFyY2hpbmcgZm9yICVzIGluIHBhdGg6ICVzIiAlIChwYXRoLCBuZXdwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBzZWFyY2hlZAorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobmV3cGF0aCk6CisgICAgICAgICAgICBkbGRpcmZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpLCBwYXRoKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJEZWZhdWx0aW5nIHRvICVzIGZvciAlcyIgJSAoZGxkaXJmaWxlLCBwYXRoKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGxkaXJmaWxlKSkKKyAgICAgICAgICAgIHNlYXJjaGVkLmFwcGVuZChkbGRpcmZpbGUpCisgICAgICAgICAgICByZXR1cm4gc2VhcmNoZWQKKyAgICAgICAgcmV0dXJuIHNlYXJjaGVkCisKKyAgICBkZWYgbmVlZF91cGRhdGUoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiB1ZC51cmwuZmluZCgiKiIpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJscyAobm8tb3AgZm9yIExvY2FsIG1ldGhvZCkiIiIKKyAgICAgICAgIyBubyBuZWVkIHRvIGZldGNoIGxvY2FsIGZpbGVzLCB3ZSdsbCBkZWFsIHdpdGggdGhlbSBpbiBwbGFjZS4KKyAgICAgICAgaWYgc2VsZi5zdXBwb3J0c19jaGVja3N1bSh1cmxkYXRhKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHVybGRhdGEubG9jYWxwYXRoKToKKyAgICAgICAgICAgIGxvY2F0aW9ucyA9IFtdCisgICAgICAgICAgICBmaWxlc3BhdGggPSBkYXRhLmdldFZhcignRklMRVNQQVRIJywgZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGZpbGVzcGF0aDoKKyAgICAgICAgICAgICAgICBsb2NhdGlvbnMgPSBmaWxlc3BhdGguc3BsaXQoIjoiKQorICAgICAgICAgICAgZmlsZXNkaXIgPSBkYXRhLmdldFZhcignRklMRVNESVInLCBkLCBUcnVlKQorICAgICAgICAgICAgaWYgZmlsZXNkaXI6CisgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChmaWxlc2RpcikKKyAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQoZC5nZXRWYXIoIkRMX0RJUiIsIFRydWUpKQorCisgICAgICAgICAgICBtc2cgPSAiVW5hYmxlIHRvIGZpbmQgZmlsZSAiICsgdXJsZGF0YS51cmwgKyAiIGFueXdoZXJlLiBUaGUgcGF0aHMgdGhhdCB3ZXJlIHNlYXJjaGVkIHdlcmU6XG4gICAgIiArICJcbiAgICAiLmpvaW4obG9jYXRpb25zKQorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcihtc2cpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdXJsZGF0YSwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHVybGRhdGEubG9jYWxwYXRoLmZpbmQoIioiKSAhPSAtMToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVUkwgJXMgbG9va3MgbGlrZSBhIGdsb2IgYW5kIHdhcyB0aGVyZWZvcmUgbm90IGNoZWNrZWQuIiwgdXJsZGF0YS51cmwpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1cmxkYXRhLmxvY2FscGF0aCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBjbGVhbihzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgcmV0dXJuCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2ZldGNoMi9vc2MucHkgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvb3NjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODc3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvb3NjLnB5CkBAIC0wLDAgKzEsMTM1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRiYWtlICJGZXRjaCIgaW1wbGVtZW50YXRpb24gZm9yIG9zYyAoT3BlbnN1c2UgYnVpbGQgc2VydmljZSBjbGllbnQpLgorQmFzZWQgb24gdGhlIHN2biAiRmV0Y2giIGltcGxlbWVudGF0aW9uLgorCisiIiIKKworaW1wb3J0ICBvcworaW1wb3J0ICBzeXMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgIGJiCitmcm9tICAgIGJiICAgICAgIGltcG9ydCBkYXRhCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgTWlzc2luZ1BhcmFtZXRlckVycm9yCitmcm9tICAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgT3NjKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gT3BlbnN1c2UgYnVpbGQgc2VydmVyCisgICAgICAgcmVwb3NpdG9yaWVzLiIiIgorCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIG9zYy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsnb3NjJ10KKworICAgIGRlZiB1cmxkYXRhX2luaXQoc2VsZiwgdWQsIGQpOgorICAgICAgICBpZiBub3QgIm1vZHVsZSIgaW4gdWQucGFybToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdQYXJhbWV0ZXJFcnJvcignbW9kdWxlJywgdWQudXJsKQorCisgICAgICAgIHVkLm1vZHVsZSA9IHVkLnBhcm1bIm1vZHVsZSJdCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aHMgdG8gb3NjIGNoZWNrb3V0cworICAgICAgICByZWxwYXRoID0gc2VsZi5fc3RyaXBfbGVhZGluZ19zbGFzaGVzKHVkLnBhdGgpCisgICAgICAgIHVkLnBrZ2RpciA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtPU0NESVJ9JywgZCksIHVkLmhvc3QpCisgICAgICAgIHVkLm1vZGRpciA9IG9zLnBhdGguam9pbih1ZC5wa2dkaXIsIHJlbHBhdGgsIHVkLm1vZHVsZSkKKworICAgICAgICBpZiAncmV2JyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgdWQucmV2aXNpb24gPSB1ZC5wYXJtWydyZXYnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHYgPSBkYXRhLmdldFZhcigiUFYiLCBkLCAwKQorICAgICAgICAgICAgcmV2ID0gYmIuZmV0Y2gyLnNyY3Jldl9pbnRlcm5hbF9oZWxwZXIodWQsIGQpCisgICAgICAgICAgICBpZiByZXYgYW5kIHJldiAhPSBUcnVlOgorICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uID0gcmV2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVkLnJldmlzaW9uID0gIiIKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCgnJXNfJXNfJXMudGFyLmd6JyAlICh1ZC5tb2R1bGUucmVwbGFjZSgnLycsICcuJyksIHVkLnBhdGgucmVwbGFjZSgnLycsICcuJyksIHVkLnJldmlzaW9uKSwgZCkKKworICAgIGRlZiBfYnVpbGRvc2Njb21tYW5kKHNlbGYsIHVkLCBkLCBjb21tYW5kKToKKyAgICAgICAgIiIiCisgICAgICAgIEJ1aWxkIHVwIGFuIG9jcyBjb21tYW5kbGluZSBiYXNlZCBvbiB1ZAorICAgICAgICBjb21tYW5kIGlzICJmZXRjaCIsICJ1cGRhdGUiLCAiaW5mbyIKKyAgICAgICAgIiIiCisKKyAgICAgICAgYmFzZWNtZCA9IGRhdGEuZXhwYW5kKCcke0ZFVENIQ01EX29zY30nLCBkKQorCisgICAgICAgIHByb3RvID0gdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ29jcycpCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgY29uZmlnID0gIi1jICVzIiAlIHNlbGYuZ2VuZXJhdGVfY29uZmlnKHVkLCBkKQorCisgICAgICAgIGlmIHVkLnJldmlzaW9uOgorICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnJldmlzaW9uKQorCisgICAgICAgIGNvcm9vdCA9IHNlbGYuX3N0cmlwX2xlYWRpbmdfc2xhc2hlcyh1ZC5wYXRoKQorCisgICAgICAgIGlmIGNvbW1hbmQgPT0gImZldGNoIjoKKyAgICAgICAgICAgIG9zY2NtZCA9ICIlcyAlcyBjbyAlcy8lcyAlcyIgJSAoYmFzZWNtZCwgY29uZmlnLCBjb3Jvb3QsIHVkLm1vZHVsZSwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgIGVsaWYgY29tbWFuZCA9PSAidXBkYXRlIjoKKyAgICAgICAgICAgIG9zY2NtZCA9ICIlcyAlcyB1cCAlcyIgJSAoYmFzZWNtZCwgY29uZmlnLCAiICIuam9pbihvcHRpb25zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgb3NjIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIHJldHVybiBvc2NjbWQKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBGZXRjaCB1cmwKKyAgICAgICAgIiIiCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaDogY2hlY2tpbmcgZm9yIG1vZHVsZSBkaXJlY3RvcnkgJyIgKyB1ZC5tb2RkaXIgKyAiJyIpCisKKyAgICAgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtPU0NESVJ9JywgZCksIHVkLnBhdGgsIHVkLm1vZHVsZSksIG9zLlJfT0spOgorICAgICAgICAgICAgb3NjdXBkYXRlY21kID0gc2VsZi5fYnVpbGRvc2Njb21tYW5kKHVkLCBkLCAidXBkYXRlIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJVcGRhdGUgIisgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzIiwgb3NjdXBkYXRlY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIG9zY3VwZGF0ZWNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQob3NjdXBkYXRlY21kLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3NjZmV0Y2hjbWQgPSBzZWxmLl9idWlsZG9zY2NvbW1hbmQodWQsIGQsICJmZXRjaCIpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgICAgICMgY2hlY2sgb3V0IHNvdXJjZXMgdGhlcmUKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBvcy5jaGRpcih1ZC5wa2dkaXIpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBvc2NmZXRjaGNtZCkKKyAgICAgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBvc2NmZXRjaGNtZCwgdWQudXJsKQorICAgICAgICAgICAgcnVuZmV0Y2hjbWQob3NjZmV0Y2hjbWQsIGQpCisKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKHVkLnBrZ2RpciArIHVkLnBhdGgpKQorICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyIC1jemYgJXMgJXMiICUgKHVkLmxvY2FscGF0aCwgdWQubW9kdWxlKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2VuZXJhdGVfY29uZmlnKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGEgLm9zY3JjIHRvIGJlIHVzZWQgZm9yIHRoaXMgcnVuLgorICAgICAgICAiIiIKKworICAgICAgICBjb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZCgnJHtPU0NESVJ9JywgZCksICJvc2NyYyIpCisgICAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhjb25maWdfcGF0aCkpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbmZpZ19wYXRoKQorCisgICAgICAgIGYgPSBvcGVuKGNvbmZpZ19wYXRoLCAndycpCisgICAgICAgIGYud3JpdGUoIltnZW5lcmFsXVxuIikKKyAgICAgICAgZi53cml0ZSgiYXBpc3J2ID0gJXNcbiIgJSB1ZC5ob3N0KQorICAgICAgICBmLndyaXRlKCJzY2hlbWUgPSBodHRwXG4iKQorICAgICAgICBmLndyaXRlKCJzdS13cmFwcGVyID0gc3UgLWNcbiIpCisgICAgICAgIGYud3JpdGUoImJ1aWxkLXJvb3QgPSAlc1xuIiAlIGRhdGEuZXhwYW5kKCcke1dPUktESVJ9JywgZCkpCisgICAgICAgIGYud3JpdGUoInVybGxpc3QgPSBodHRwOi8vbW9ibGluLW9icy5qZi5pbnRlbC5jb206ODg4OC9idWlsZC8lKHByb2plY3Qpcy8lKHJlcG9zaXRvcnkpcy8lKGJ1aWxkYXJjaClzLzpmdWxsLyUobmFtZSlzLnJwbVxuIikKKyAgICAgICAgZi53cml0ZSgiZXh0cmEtcGtncyA9IGd6aXBcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgiWyVzXVxuIiAlIHVkLmhvc3QpCisgICAgICAgIGYud3JpdGUoInVzZXIgPSAlc1xuIiAlIHVkLnBhcm1bInVzZXIiXSkKKyAgICAgICAgZi53cml0ZSgicGFzcyA9ICVzXG4iICUgdWQucGFybVsicHN3ZCJdKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gY29uZmlnX3BhdGgKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weSBiL2JpdGJha2UvbGliL2JiL2ZldGNoMi9wZXJmb3JjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTEwYzdjCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3BlcmZvcmNlLnB5CkBAIC0wLDAgKzEsMTg3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdGZXRjaCcgaW1wbGVtZW50YXRpb25zCisKK0NsYXNzZXMgZm9yIG9idGFpbmluZyB1cHN0cmVhbSBzb3VyY2VzIGZvciB0aGUKK0JpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2Zyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCB6aXAKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2Zyb20gICBiYiBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKKworY2xhc3MgUGVyZm9yY2UoRmV0Y2hNZXRob2QpOgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsncDQnXQorCisgICAgZGVmIGRvcGFyc2UodXJsLCBkKToKKyAgICAgICAgcGFybSA9IHt9CisgICAgICAgIHBhdGggPSB1cmwuc3BsaXQoIjovLyIpWzFdCisgICAgICAgIGRlbGltID0gcGF0aC5maW5kKCJAIik7CisgICAgICAgIGlmIGRlbGltICE9IC0xOgorICAgICAgICAgICAgKHVzZXIsIHBzd2QsIGhvc3QsIHBvcnQpID0gcGF0aC5zcGxpdCgnQCcpWzBdLnNwbGl0KCI6IikKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCdAJylbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChob3N0LCBwb3J0KSA9IGQuZ2V0VmFyKCdQNFBPUlQnLCBGYWxzZSkuc3BsaXQoJzonKQorICAgICAgICAgICAgdXNlciA9ICIiCisgICAgICAgICAgICBwc3dkID0gIiIKKworICAgICAgICBpZiBwYXRoLmZpbmQoIjsiKSAhPSAtMToKKyAgICAgICAgICAgIGtleXM9W10KKyAgICAgICAgICAgIHZhbHVlcz1bXQorICAgICAgICAgICAgcGxpc3QgPSBwYXRoLnNwbGl0KCc7JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHBsaXN0OgorICAgICAgICAgICAgICAgIGlmIGl0ZW0uY291bnQoJz0nKToKKyAgICAgICAgICAgICAgICAgICAgKGtleSwgdmFsdWUpID0gaXRlbS5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICAgICAgcGFybSA9IGRpY3QoemlwKGtleXMsIHZhbHVlcykpCisgICAgICAgIHBhdGggPSAiLy8iICsgcGF0aC5zcGxpdCgnOycpWzBdCisgICAgICAgIGhvc3QgKz0gIjolcyIgJSAocG9ydCkKKyAgICAgICAgcGFybVsiY3NldCJdID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBwYXRoLCBob3N0LCB1c2VyLCBwc3dkLCBwYXJtKQorCisgICAgICAgIHJldHVybiBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtCisgICAgZG9wYXJzZSA9IHN0YXRpY21ldGhvZChkb3BhcnNlKQorCisgICAgZGVmIGdldGNzZXQoZCwgZGVwb3QsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pOgorICAgICAgICBwNG9wdCA9ICIiCisgICAgICAgIGlmICJjc2V0IiBpbiBwYXJtOgorICAgICAgICAgICAgcmV0dXJuIHBhcm1bImNzZXQiXTsKKyAgICAgICAgaWYgdXNlcjoKKyAgICAgICAgICAgIHA0b3B0ICs9ICIgLXUgJXMiICUgKHVzZXIpCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICBwNG9wdCArPSAiIC1QICVzIiAlIChwc3dkKQorICAgICAgICBpZiBob3N0OgorICAgICAgICAgICAgcDRvcHQgKz0gIiAtcCAlcyIgJSAoaG9zdCkKKworICAgICAgICBwNGRhdGUgPSBkLmdldFZhcigiUDREQVRFIiwgVHJ1ZSkKKyAgICAgICAgaWYgInJldmlzaW9uIiBpbiBwYXJtOgorICAgICAgICAgICAgZGVwb3QgKz0gIiMlcyIgJSAocGFybVsicmV2aXNpb24iXSkKKyAgICAgICAgZWxpZiAibGFiZWwiIGluIHBhcm06CisgICAgICAgICAgICBkZXBvdCArPSAiQCVzIiAlIChwYXJtWyJsYWJlbCJdKQorICAgICAgICBlbGlmIHA0ZGF0ZToKKyAgICAgICAgICAgIGRlcG90ICs9ICJAJXMiICUgKHA0ZGF0ZSkKKworICAgICAgICBwNGNtZCA9IGQuZ2V0VmFyKCdGRVRDSENNRF9wNCcsIFRydWUpIG9yICJwNCIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSdW5uaW5nICVzJXMgY2hhbmdlcyAtbSAxICVzIiwgcDRjbWQsIHA0b3B0LCBkZXBvdCkKKyAgICAgICAgcDRmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bigiJXMlcyBjaGFuZ2VzIC1tIDEgJXMiICUgKHA0Y21kLCBwNG9wdCwgZGVwb3QpKQorICAgICAgICBjc2V0ID0gcDRmaWxlLnN0cmlwKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSRUFEICVzIiwgY3NldCkKKyAgICAgICAgaWYgbm90IGNzZXQ6CisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICByZXR1cm4gY3NldC5zcGxpdCgnICcpWzFdCisgICAgZ2V0Y3NldCA9IHN0YXRpY21ldGhvZChnZXRjc2V0KQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgIChob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IFBlcmZvcmNlLmRvcGFyc2UodWQudXJsLCBkKQorCisgICAgICAgIGJhc2VfcGF0aCA9IHBhdGgucmVwbGFjZSgnLy4uLicsICcnKQorICAgICAgICBiYXNlX3BhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXMoYmFzZV9wYXRoKQorICAgICAgICAKKyAgICAgICAgaWYgImxhYmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcm1bImxhYmVsIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZlcnNpb24gPSBQZXJmb3JjZS5nZXRjc2V0KGQsIHBhdGgsIGhvc3QsIHVzZXIsIHBzd2QsIHBhcm0pCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQoJyVzKyVzKyVzLnRhci5neicgJSAoaG9zdCwgYmFzZV9wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB2ZXJzaW9uKSwgZCkKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBGZXRjaCB1cmxzCisgICAgICAgICIiIgorCisgICAgICAgIChob3N0LCBkZXBvdCwgdXNlciwgcHN3ZCwgcGFybSkgPSBQZXJmb3JjZS5kb3BhcnNlKHVkLnVybCwgZCkKKworICAgICAgICBpZiBkZXBvdC5maW5kKCcvLi4uJykgIT0gLTE6CisgICAgICAgICAgICBwYXRoID0gZGVwb3RbOmRlcG90LmZpbmQoJy8uLi4nKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGggPSBkZXBvdFs6ZGVwb3QucmZpbmQoJy8nKV0KKworICAgICAgICBtb2R1bGUgPSBwYXJtLmdldCgnbW9kdWxlJywgb3MucGF0aC5iYXNlbmFtZShwYXRoKSkKKworICAgICAgICAjIEdldCB0aGUgcDQgY29tbWFuZAorICAgICAgICBwNG9wdCA9ICIiCisgICAgICAgIGlmIHVzZXI6CisgICAgICAgICAgICBwNG9wdCArPSAiIC11ICVzIiAlICh1c2VyKQorCisgICAgICAgIGlmIHBzd2Q6CisgICAgICAgICAgICBwNG9wdCArPSAiIC1QICVzIiAlIChwc3dkKQorCisgICAgICAgIGlmIGhvc3Q6CisgICAgICAgICAgICBwNG9wdCArPSAiIC1wICVzIiAlIChob3N0KQorCisgICAgICAgIHA0Y21kID0gZC5nZXRWYXIoJ0ZFVENIQ01EX3A0JywgVHJ1ZSkgb3IgInA0IgorCisgICAgICAgICMgY3JlYXRlIHRlbXAgZGlyZWN0b3J5CisgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiRmV0Y2g6IGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5leHBhbmQoJyR7V09SS0RJUn0nKSkKKyAgICAgICAgbWt0ZW1wID0gZC5nZXRWYXIoIkZFVENIQ01EX3A0bWt0ZW1wIiwgVHJ1ZSkgb3IgZC5leHBhbmQoIm1rdGVtcCAtZCAtcSAnJHtXT1JLRElSfS9vZXA0LlhYWFhYWCciKQorICAgICAgICB0bXBmaWxlLCBlcnJvcnMgPSBiYi5wcm9jZXNzLnJ1bihta3RlbXApCisgICAgICAgIHRtcGZpbGUgPSB0bXBmaWxlLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IHRtcGZpbGU6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJGZXRjaDogdW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4gbWFrZSBzdXJlICdta3RlbXAnIGlzIGluIHRoZSBQQVRILiIsIHVkLnVybCkKKworICAgICAgICBpZiAibGFiZWwiIGluIHBhcm06CisgICAgICAgICAgICBkZXBvdCA9ICIlc0AlcyIgJSAoZGVwb3QsIHBhcm1bImxhYmVsIl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjc2V0ID0gUGVyZm9yY2UuZ2V0Y3NldChkLCBkZXBvdCwgaG9zdCwgdXNlciwgcHN3ZCwgcGFybSkKKyAgICAgICAgICAgIGRlcG90ID0gIiVzQCVzIiAlIChkZXBvdCwgY3NldCkKKworICAgICAgICBvcy5jaGRpcih0bXBmaWxlKQorICAgICAgICBsb2dnZXIuaW5mbygiRmV0Y2ggIiArIHVkLnVybCkKKyAgICAgICAgbG9nZ2VyLmluZm8oIiVzJXMgZmlsZXMgJXMiLCBwNGNtZCwgcDRvcHQsIGRlcG90KQorICAgICAgICBwNGZpbGUsIGVycm9ycyA9IGJiLnByb2Nlc3MucnVuKCIlcyVzIGZpbGVzICVzIiAlIChwNGNtZCwgcDRvcHQsIGRlcG90KSkKKyAgICAgICAgcDRmaWxlID0gW2YucnN0cmlwKCkgZm9yIGYgaW4gcDRmaWxlLnNwbGl0bGluZXMoKV0KKworICAgICAgICBpZiBub3QgcDRmaWxlOgorICAgICAgICAgICAgcmFpc2UgRmV0Y2hFcnJvcigiRmV0Y2g6IHVuYWJsZSB0byBnZXQgdGhlIFA0IGZpbGVzIGZyb20gJXMiICUgZGVwb3QsIHVkLnVybCkKKworICAgICAgICBjb3VudCA9IDAKKworICAgICAgICBmb3IgZmlsZSBpbiBwNGZpbGU6CisgICAgICAgICAgICBsaXN0ID0gZmlsZS5zcGxpdCgpCisKKyAgICAgICAgICAgIGlmIGxpc3RbMl0gPT0gImRlbGV0ZSI6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVzdCA9IGxpc3RbMF1bbGVuKHBhdGgpKzE6XQorICAgICAgICAgICAgd2hlcmUgPSBkZXN0LmZpbmQoIiMiKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoIiVzJXMgcHJpbnQgLW8gJXMvJXMgJXMiICUgKHA0Y21kLCBwNG9wdCwgbW9kdWxlLCBkZXN0Wzp3aGVyZV0sIGxpc3RbMF0pLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKworICAgICAgICBpZiBjb3VudCA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkZldGNoOiBObyBmaWxlcyBnYXRoZXJlZCBmcm9tIHRoZSBQNCBmZXRjaCIsIHVkLnVybCkKKworICAgICAgICBydW5mZXRjaGNtZCgidGFyIC1jemYgJXMgJXMiICUgKHVkLmxvY2FscGF0aCwgbW9kdWxlKSwgZCwgY2xlYW51cCA9IFt1ZC5sb2NhbHBhdGhdKQorICAgICAgICAjIGNsZWFudXAKKyAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIodG1wZmlsZSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3JlcG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2NzhlYgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL2ZldGNoMi9yZXBvLnB5CkBAIC0wLDAgKzEsOTggQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgIkZldGNoIiByZXBvIChnaXQpIGltcGxlbWVudGF0aW9uCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwOSBUb20gUmluaSA8dHJpbmlAZW1iZWRkZWRhbGxleS5jb20+CisjCisjIEJhc2VkIG9uIGdpdC5weSB3aGljaCBpczoKKyNDb3B5cmlnaHQgKEMpIDIwMDUgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitmcm9tICAgYmIgICAgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCitjbGFzcyBSZXBvKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gcmVwbyAoZ2l0KSByZXBvc2l0b3JpZXMiIiIKKyAgICBkZWYgc3VwcG9ydHMoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgZ2l2ZW4gdXJsIGNhbiBiZSBmZXRjaGVkIHdpdGggcmVwby4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB1ZC50eXBlIGluIFsicmVwbyJdCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFdlIGRvbiJ0IGNhcmUgYWJvdXQgdGhlIGdpdCByZXYgb2YgdGhlIG1hbmlmZXN0cyByZXBvc2l0b3J5LCBidXQKKyAgICAgICAgd2UgZG8gY2FyZSBhYm91dCB0aGUgbWFuaWZlc3QgdG8gdXNlLiAgVGhlIGRlZmF1bHQgaXMgImRlZmF1bHQiLgorICAgICAgICBXZSBhbHNvIGNhcmUgYWJvdXQgdGhlIGJyYW5jaCBvciB0YWcgdG8gYmUgdXNlZC4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICJtYXN0ZXIiLgorICAgICAgICAiIiIKKworICAgICAgICB1ZC5wcm90byA9IHVkLnBhcm0uZ2V0KCdwcm90b2NvbCcsICdnaXQnKQorICAgICAgICB1ZC5icmFuY2ggPSB1ZC5wYXJtLmdldCgnYnJhbmNoJywgJ21hc3RlcicpCisgICAgICAgIHVkLm1hbmlmZXN0ID0gdWQucGFybS5nZXQoJ21hbmlmZXN0JywgJ2RlZmF1bHQueG1sJykKKyAgICAgICAgaWYgbm90IHVkLm1hbmlmZXN0LmVuZHN3aXRoKCcueG1sJyk6CisgICAgICAgICAgICB1ZC5tYW5pZmVzdCArPSAnLnhtbCcKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCgicmVwb18lcyVzXyVzXyVzLnRhci5neiIgJSAodWQuaG9zdCwgdWQucGF0aC5yZXBsYWNlKCIvIiwgIi4iKSwgdWQubWFuaWZlc3QsIHVkLmJyYW5jaCksIGQpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmwiIiIKKworICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJETF9ESVIiLCBkLCBUcnVlKSwgdWQubG9jYWxmaWxlKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIiVzIGFscmVhZHkgZXhpc3RzIChvciB3YXMgc3Rhc2hlZCkuIFNraXBwaW5nIHJlcG8gaW5pdCAvIHN5bmMuIiwgdWQubG9jYWxwYXRoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2l0c3JjbmFtZSA9ICIlcyVzIiAlICh1ZC5ob3N0LCB1ZC5wYXRoLnJlcGxhY2UoIi8iLCAiLiIpKQorICAgICAgICByZXBvZGlyID0gZGF0YS5nZXRWYXIoIlJFUE9ESVIiLCBkLCBUcnVlKSBvciBvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIkRMX0RJUiIsIGQsIFRydWUpLCAicmVwbyIpCisgICAgICAgIGNvZGlyID0gb3MucGF0aC5qb2luKHJlcG9kaXIsIGdpdHNyY25hbWUsIHVkLm1hbmlmZXN0KQorCisgICAgICAgIGlmIHVkLnVzZXI6CisgICAgICAgICAgICB1c2VybmFtZSA9IHVkLnVzZXIgKyAiQCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJuYW1lID0gIiIKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGNvZGlyLCAicmVwbyIpKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oY29kaXIsICJyZXBvIikpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY29kaXIsICJyZXBvIiwgIi5yZXBvIikpOgorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsICJyZXBvIGluaXQgLW0gJXMgLWIgJXMgLXUgJXM6Ly8lcyVzJXMiICUgKHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gsIHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCksIHVkLnVybCkKKyAgICAgICAgICAgIHJ1bmZldGNoY21kKCJyZXBvIGluaXQgLW0gJXMgLWIgJXMgLXUgJXM6Ly8lcyVzJXMiICUgKHVkLm1hbmlmZXN0LCB1ZC5icmFuY2gsIHVkLnByb3RvLCB1c2VybmFtZSwgdWQuaG9zdCwgdWQucGF0aCksIGQpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsICJyZXBvIHN5bmMgJXMiICUgdWQudXJsLCB1ZC51cmwpCisgICAgICAgIHJ1bmZldGNoY21kKCJyZXBvIHN5bmMiLCBkKQorICAgICAgICBvcy5jaGRpcihjb2RpcikKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnLnJlcG8nIC0tZXhjbHVkZSAnLmdpdCciCisKKyAgICAgICAgIyBDcmVhdGUgYSBjYWNoZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCBvcy5wYXRoLmpvaW4oIi4iLCAiKiIpICksIGQpCisKKyAgICBkZWYgc3VwcG9ydHNfc3JjcmV2KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfYnVpbGRfcmV2aXNpb24oc2VsZiwgdWQsIGQpOgorICAgICAgICByZXR1cm4gdWQubWFuaWZlc3QKKworICAgIGRlZiBfd2FudF9zb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc2Z0cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjJmNzUzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NmdHAucHkKQEAgLTAsMCArMSwxMjkgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgU0ZUUCBGZXRjaCBpbXBsZW1lbnRhdGlvbgorCitDbGFzcyBmb3IgZmV0Y2hpbmcgZmlsZXMgdmlhIFNGVFAuIEl0IHRyaWVzIHRvIGFkaGVyZSB0byB0aGUgKG5vdworZXhwaXJlZCkgSUVURiBJbnRlcm5ldCBEcmFmdCBmb3IgIlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKQorU2NoZW1lIGZvciBTZWN1cmUgRmlsZSBUcmFuc2ZlciBQcm90b2NvbCAoU0ZUUCkgYW5kIFNlY3VyZSBTaGVsbAorKFNTSCkiIChTRUNTSCBVUkkpLgorCitJdCB1c2VzIFNGVFAgKGFzIHRvIGFkaGVyZSB0byB0aGUgU0VDU0ggVVJJIHNwZWNpZmljYXRpb24pLiBJdCBvbmx5CitzdXBwb3J0cyBrZXkgYmFzZWQgYXV0aGVudGljYXRpb24sIG5vdCBwYXNzd29yZC4gVGhpcyBjbGFzcywgdW5saWtlCit0aGUgU1NIIGZldGNoZXIsIGRvZXMgbm90IHN1cHBvcnQgZmV0Y2hpbmcgYSBkaXJlY3RvcnkgdHJlZSBmcm9tIHRoZQorcmVtb3RlLgorCisgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtc2Vjc2gtc2NwLXNmdHAtc3NoLXVyaS0wNAorICBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy91cmktc2NoZW1lcy9wcm92L3NmdHAKKyAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtc2Vjc2gtZmlsZXhmZXItMTMKKworUGxlYXNlIG5vdGUgdGhhdCAnLycgaXMgdXNlZCBhcyBob3N0IHBhdGggc2VwZXJhdG9yLCBhbmQgbm90ICI6IgorYXMgeW91IG1heSBiZSB1c2VkIHRvIGZyb20gdGhlIHNjcC9zZnRwIGNvbW1hbmRzLiBZb3UgY2FuIHVzZSBhCit+ICh0aWxkZSkgdG8gc3BlY2lmeSBhIHBhdGggcmVsYXRpdmUgdG8geW91ciBob21lIGRpcmVjdG9yeS4KKyhUaGUgL351c2VyLyBzeW50YXgsIGZvciBzcGVjeWZpbmcgYSBwYXRoIHJlbGF0aXZlIHRvIGFub3RoZXIKK3VzZXIncyBob21lIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkLikgTm90ZSB0aGF0IHRoZSB0aWxkZSBtdXN0CitzdGlsbCBmb2xsb3cgdGhlIGhvc3QgcGF0aCBzZXBlcmF0b3IgKCIvIikuIFNlZSBleGFtcGVscyBiZWxvdy4KKworRXhhbXBsZSBTUkNfVVJJczoKKworU1JDX1VSSSA9ICJzZnRwOi8vaG9zdC5leGFtcGxlLmNvbS9kaXIvcGF0aC5maWxlLnR4dCIKKworQSBwYXRoIHJlbGF0aXZlIHRvIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisKK1NSQ19VUkkgPSAic2Z0cDovL2hvc3QuZXhhbXBsZS5jb20vfi9kaXIvcGF0aC5maWxlLnR4dCIKKworWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB1c2VybmFtZSAoc3BlY3lmaW5nIHBhc3N3b3JkIGluIHRoZQorVVJJIGlzIG5vdCBzdXBwb3J0ZWQsIHVzZSBTU0gga2V5cyB0byBhdXRoZW50aWNhdGUpOgorCitTUkNfVVJJID0gInNmdHA6Ly91c2VyQGhvc3QuZXhhbXBsZS5jb20vZGlyL3BhdGguZmlsZS50eHQiCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAxMywgT2xvZiBKb2hhbnNzb24gPG9sb2Yuam9oYW5zc29uQGF4aXMuY29tPgorIworIyBCYXNlZCBpbiBwYXJ0IG9uIGJiLmZldGNoMi53Z2V0OgorIyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlLCBDb3B5cmlnaHQgMjAwMyBIb2xnZXIgU2NodXJpZworCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHVybGxpYgoraW1wb3J0IGNvbW1hbmRzCitmcm9tIGJiIGltcG9ydCBkYXRhCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgVVJJCitmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gYmIuZmV0Y2gyIGltcG9ydCBydW5mZXRjaGNtZAorCisKK2NsYXNzIFNGVFAoRmV0Y2hNZXRob2QpOgorICAgICIiIkNsYXNzIHRvIGZldGNoIHVybHMgdmlhICdzZnRwJyIiIgorCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIHNmdHAuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ3NmdHAnXQorCisgICAgZGVmIHJlY29tbWVuZHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1ZC5wYXJtIGFuZCB1ZC5wYXJtWydwcm90b2NvbCddID09ICdnaXQnOgorICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKAorICAgICAgICAgICAgICAgICJJbnZhbGlkIHByb3RvY29sIC0gaWYgeW91IHdpc2ggdG8gZmV0Y2ggZnJvbSBhICIgKworICAgICAgICAgICAgICAgICJnaXQgcmVwb3NpdG9yeSB1c2luZyBzc2gsIHlvdSBuZWVkIHRvIHVzZSB0aGUgIiArCisgICAgICAgICAgICAgICAgImdpdDovLyBwcmVmaXggd2l0aCBwcm90b2NvbD1zc2giLCB1ZC51cmwpCisKKyAgICAgICAgaWYgJ2Rvd25sb2FkZmlsZW5hbWUnIGluIHVkLnBhcm06CisgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IHVkLnBhcm1bJ2Rvd25sb2FkZmlsZW5hbWUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdWQuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHVkLnBhdGgpCisKKyAgICAgICAgdWQubG9jYWxmaWxlID0gZGF0YS5leHBhbmQodXJsbGliLnVucXVvdGUodWQuYmFzZW5hbWUpLCBkKQorCisgICAgZGVmIGRvd25sb2FkKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiRmV0Y2ggdXJscyIiIgorCisgICAgICAgIHVybG8gPSBVUkkodWQudXJsKQorICAgICAgICBiYXNlY21kID0gJ3NmdHAgLW9CYXRjaE1vZGU9eWVzJworICAgICAgICBwb3J0ID0gJycKKyAgICAgICAgaWYgdXJsby5wb3J0OgorICAgICAgICAgICAgcG9ydCA9ICctUCAlZCcgJSB1cmxvLnBvcnQKKyAgICAgICAgICAgIHVybG8ucG9ydCA9IE5vbmUKKworICAgICAgICBkbGRpciA9IGRhdGEuZ2V0VmFyKCdETF9ESVInLCBkLCBUcnVlKQorICAgICAgICBscGF0aCA9IG9zLnBhdGguam9pbihkbGRpciwgdWQubG9jYWxmaWxlKQorCisgICAgICAgIHVzZXIgPSAnJworICAgICAgICBpZiB1cmxvLnVzZXJpbmZvOgorICAgICAgICAgICAgdXNlciA9IHVybG8udXNlcmluZm8gKyAnQCcKKworICAgICAgICBwYXRoID0gdXJsby5wYXRoCisKKyAgICAgICAgIyBTdXBvcHJ0IFVSSXMgcmVsYXRpdmUgdG8gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgd2l0aAorICAgICAgICAjIHRoZSB0aWxkZSBzeW50YXguIChFLmcuIDxzZnRwOi8vZXhhbXBsZS5jb20vfi9mb28uZGlmZj4pLgorICAgICAgICBpZiBwYXRoWzozXSA9PSAnL34vJzoKKyAgICAgICAgICAgIHBhdGggPSBwYXRoWzM6XQorCisgICAgICAgIHJlbW90ZSA9ICclcyVzOiVzJyAlICh1c2VyLCB1cmxvLmhvc3RuYW1lLCBwYXRoKQorCisgICAgICAgIGNtZCA9ICclcyAlcyAlcyAlcycgJSAoYmFzZWNtZCwgcG9ydCwgY29tbWFuZHMubWthcmcocmVtb3RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kcy5ta2FyZyhscGF0aCkpCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdWQudXJsKQorICAgICAgICBydW5mZXRjaGNtZChjbWQsIGQpCisgICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3NoLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU1NzhhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3NzaC5weQpAQCAtMCwwICsxLDEyOCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKycnJworQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9ucworCitUaGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciBTZWN1cmUgU2hlbGwgKFNTSCksIGFuZCBhdHRlbXB0cyB0byBjb21wbHkgd2l0aCB0aGUKK0lFVEYgc2Vjc2ggaW50ZXJuZXQgZHJhZnQ6CisgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL3dnL3NlY3NoL2RyYWZ0LWlldGYtc2Vjc2gtc2NwLXNmdHAtc3NoLXVyaS8KKworICAgIEN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZnRwIHBhcmFtZXRlcnMsIGFzIHRoaXMgdXNlcyBzY3AKKyAgICBBbHNvIGRvZXMgbm90IHN1cHBvcnQgdGhlICdmaW5nZXJwcmludCcgY29ubmVjdGlvbiBwYXJhbWV0ZXIuCisKKyAgICBQbGVhc2Ugbm90ZSB0aGF0ICcvJyBpcyB1c2VkIGFzIGhvc3QsIHBhdGggc2VwYXJhdG9yIG5vdCAnOicgYXMgeW91IG1heSAKKyAgICBiZSB1c2VkIHRvLCBhbHNvICd+JyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHVzZXIgSE9NRSwgYnV0IGFnYWluIGFmdGVyICcvJworICAgIAorICAgIEV4YW1wbGUgU1JDX1VSSToKKyAgICBTUkNfVVJJID0gInNzaDovL3VzZXJAaG9zdC5leGFtcGxlLmNvbS9kaXIvcGF0aC9maWxlLnR4dCIKKyAgICBTUkNfVVJJID0gInNzaDovL3VzZXJAaG9zdC5leGFtcGxlLmNvbS9+L2ZpbGUudHh0IgorJycnCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICBPcGVuZWRIYW5kIEx0ZC4KKyMKKyMKKyMgQmFzZWQgaW4gcGFydCBvbiBzdmsucHk6CisjICAgIENvcHlyaWdodCAoQykgMjAwNiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIyAgICBCYXNlZCBvbiBzdm4ucHk6CisjICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyAgICAgICAgQmFzZWQgb24gZnVuY3Rpb25zIGZyb20gdGhlIGJhc2UgYmIgbW9kdWxlOgorIyAgICAgICAgICAgIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisjCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUsIG9zCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCisKKworX19wYXR0ZXJuX18gPSByZS5jb21waWxlKHInJycKKyBccyogICAgICAgICAgICAgICAgICMgU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UKKyBzc2g6Ly8gICAgICAgICAgICAgICMgc2NoZW1lCisgKCAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsIHVzZXJuYW1lL3Bhc3N3b3JkIGJsb2NrCisgICg/UDx1c2VyPlxTKykgICAgICAjIHVzZXJuYW1lCisgICg6KD9QPHBhc3M+XFMrKSk/ICAjIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSBwYXNzd29yZCAob3B0aW9uYWwpCisgKT8KKyAoP1A8Y3BhcmFtPig7W147XSspKik/ICAjIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBibG9jayAob3B0aW9uYWwpCisgQAorICg/UDxob3N0PlxTKz8pICAgICAgICAgICMgbm9uLWdyZWVkeSBtYXRjaCBvZiB0aGUgaG9zdAorICg6KD9QPHBvcnQ+WzAtOV0rKSk/ICAgICMgY29sb24gZm9sbG93ZWQgYnkgdGhlIHBvcnQgKG9wdGlvbmFsKQorIC8KKyAoP1A8cGF0aD5bXjtdKykgICAgICAgICAjIHBhdGggb24gdGhlIHJlbW90ZSBzeXN0ZW0sIG1heSBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBtYXkgaW5jbHVkZSB0aGUgdXNlIG9mICd+JyB0byByZWZlcmVuY2UgdGhlIHJlbW90ZSBob21lCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkKKyAoP1A8c3BhcmFtPig7W147XSspKik/ICAjIHBhcmFtZXRlcnMgYmxvY2sgKG9wdGlvbmFsKQorICQKKycnJywgcmUuVkVSQk9TRSkKKworY2xhc3MgU1NIKEZldGNoTWV0aG9kKToKKyAgICAnJydDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIHZpYSBTZWN1cmUgU2hlbGwnJycKKworICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgcmV0dXJuIF9fcGF0dGVybl9fLm1hdGNoKHVybGRhdGEudXJsKSAhPSBOb25lCisKKyAgICBkZWYgc3VwcG9ydHNfY2hlY2tzdW0oc2VsZiwgdXJsZGF0YSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1cmxkYXRhLCBkKToKKyAgICAgICAgaWYgJ3Byb3RvY29sJyBpbiB1cmxkYXRhLnBhcm0gYW5kIHVybGRhdGEucGFybVsncHJvdG9jb2wnXSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIHJhaXNlIGJiLmZldGNoMi5QYXJhbWV0ZXJFcnJvcigKKyAgICAgICAgICAgICAgICAiSW52YWxpZCBwcm90b2NvbCAtIGlmIHlvdSB3aXNoIHRvIGZldGNoIGZyb20gYSBnaXQgIiArCisgICAgICAgICAgICAgICAgInJlcG9zaXRvcnkgdXNpbmcgc3NoLCB5b3UgbmVlZCB0byB1c2UgIiArCisgICAgICAgICAgICAgICAgImdpdDovLyBwcmVmaXggd2l0aCBwcm90b2NvbD1zc2giLCB1cmxkYXRhLnVybCkKKyAgICAgICAgbSA9IF9fcGF0dGVybl9fLm1hdGNoKHVybGRhdGEudXJsKQorICAgICAgICBwYXRoID0gbS5ncm91cCgncGF0aCcpCisgICAgICAgIGhvc3QgPSBtLmdyb3VwKCdob3N0JykKKyAgICAgICAgdXJsZGF0YS5sb2NhbHBhdGggPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5ub3JtcGF0aChwYXRoKSkpCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdXJsZGF0YSwgZCk6CisgICAgICAgIGRsZGlyID0gZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpCisKKyAgICAgICAgbSA9IF9fcGF0dGVybl9fLm1hdGNoKHVybGRhdGEudXJsKQorICAgICAgICBwYXRoID0gbS5ncm91cCgncGF0aCcpCisgICAgICAgIGhvc3QgPSBtLmdyb3VwKCdob3N0JykKKyAgICAgICAgcG9ydCA9IG0uZ3JvdXAoJ3BvcnQnKQorICAgICAgICB1c2VyID0gbS5ncm91cCgndXNlcicpCisgICAgICAgIHBhc3N3b3JkID0gbS5ncm91cCgncGFzcycpCisKKyAgICAgICAgaWYgcG9ydDoKKyAgICAgICAgICAgIHBvcnRhcmcgPSAnLVAgJXMnICUgcG9ydAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcG9ydGFyZyA9ICcnCisKKyAgICAgICAgaWYgdXNlcjoKKyAgICAgICAgICAgIGZyID0gdXNlcgorICAgICAgICAgICAgaWYgcGFzc3dvcmQ6CisgICAgICAgICAgICAgICAgZnIgKz0gJzolcycgJSBwYXNzd29yZAorICAgICAgICAgICAgZnIgKz0gJ0AlcycgJSBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmciA9IGhvc3QKKyAgICAgICAgZnIgKz0gJzolcycgJSBwYXRoCisKKworICAgICAgICBpbXBvcnQgY29tbWFuZHMKKyAgICAgICAgY21kID0gJ3NjcCAtQiAtciAlcyAlcyAlcy8nICUgKAorICAgICAgICAgICAgcG9ydGFyZywKKyAgICAgICAgICAgIGNvbW1hbmRzLm1rYXJnKGZyKSwKKyAgICAgICAgICAgIGNvbW1hbmRzLm1rYXJnKGRsZGlyKQorICAgICAgICApCisKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIGNtZCwgdXJsZGF0YS51cmwpCisKKyAgICAgICAgcnVuZmV0Y2hjbWQoY21kLCBkKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvc3ZuLnB5IGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3N2bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzMzYzJiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3N2bi5weQpAQCAtMCwwICsxLDE5MiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyIiIgorQml0QmFrZSAnRmV0Y2gnIGltcGxlbWVudGF0aW9uIGZvciBzdm4uCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwNCAgICAgICAgTWFyY2luIEp1c3praWV3aWN6CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IHJlCitmcm9tICAgYmIgaW1wb3J0IGRhdGEKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBGZXRjaEVycm9yCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBNaXNzaW5nUGFyYW1ldGVyRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IHJ1bmZldGNoY21kCitmcm9tICAgYmIuZmV0Y2gyIGltcG9ydCBsb2dnZXIKKworY2xhc3MgU3ZuKEZldGNoTWV0aG9kKToKKyAgICAiIiJDbGFzcyB0byBmZXRjaCBhIG1vZHVsZSBvciBtb2R1bGVzIGZyb20gc3ZuIHJlcG9zaXRvcmllcyIiIgorICAgIGRlZiBzdXBwb3J0cyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0byBzZWUgaWYgYSBnaXZlbiB1cmwgY2FuIGJlIGZldGNoZWQgd2l0aCBzdm4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ3N2biddCisKKyAgICBkZWYgdXJsZGF0YV9pbml0KHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIGluaXQgc3ZuIHNwZWNpZmljIHZhcmlhYmxlIHdpdGhpbiB1cmwgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90ICJtb2R1bGUiIGluIHVkLnBhcm06CisgICAgICAgICAgICByYWlzZSBNaXNzaW5nUGFyYW1ldGVyRXJyb3IoJ21vZHVsZScsIHVkLnVybCkKKworICAgICAgICB1ZC5iYXNlY21kID0gZC5nZXRWYXIoJ0ZFVENIQ01EX3N2bicsIFRydWUpCisKKyAgICAgICAgdWQubW9kdWxlID0gdWQucGFybVsibW9kdWxlIl0KKworICAgICAgICAjIENyZWF0ZSBwYXRocyB0byBzdm4gY2hlY2tvdXRzCisgICAgICAgIHJlbHBhdGggPSBzZWxmLl9zdHJpcF9sZWFkaW5nX3NsYXNoZXModWQucGF0aCkKKyAgICAgICAgdWQucGtnZGlyID0gb3MucGF0aC5qb2luKGRhdGEuZXhwYW5kKCcke1NWTkRJUn0nLCBkKSwgdWQuaG9zdCwgcmVscGF0aCkKKyAgICAgICAgdWQubW9kZGlyID0gb3MucGF0aC5qb2luKHVkLnBrZ2RpciwgdWQubW9kdWxlKQorCisgICAgICAgIHVkLnNldHVwX3Jldmlzb25zKGQpCisKKyAgICAgICAgaWYgJ3JldicgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLnJldmlzaW9uID0gdWQucGFybVsncmV2J10KKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCgnJXNfJXNfJXNfJXNfLnRhci5neicgJSAodWQubW9kdWxlLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5ob3N0LCB1ZC5wYXRoLnJlcGxhY2UoJy8nLCAnLicpLCB1ZC5yZXZpc2lvbiksIGQpCisKKyAgICBkZWYgX2J1aWxkc3ZuY29tbWFuZChzZWxmLCB1ZCwgZCwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBCdWlsZCB1cCBhbiBzdm4gY29tbWFuZGxpbmUgYmFzZWQgb24gdWQKKyAgICAgICAgY29tbWFuZCBpcyAiZmV0Y2giLCAidXBkYXRlIiwgImluZm8iCisgICAgICAgICIiIgorCisgICAgICAgIHByb3RvID0gdWQucGFybS5nZXQoJ3Byb3RvY29sJywgJ3N2bicpCisKKyAgICAgICAgc3ZuX3JzaCA9IE5vbmUKKyAgICAgICAgaWYgcHJvdG8gPT0gInN2bitzc2giIGFuZCAicnNoIiBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgc3ZuX3JzaCA9IHVkLnBhcm1bInJzaCJdCisKKyAgICAgICAgc3Zucm9vdCA9IHVkLmhvc3QgKyB1ZC5wYXRoCisKKyAgICAgICAgb3B0aW9ucyA9IFtdCisKKyAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi0tbm8tYXV0aC1jYWNoZSIpCisKKyAgICAgICAgaWYgdWQudXNlcjoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItLXVzZXJuYW1lICVzIiAlIHVkLnVzZXIpCisKKyAgICAgICAgaWYgdWQucHN3ZDoKKyAgICAgICAgICAgIG9wdGlvbnMuYXBwZW5kKCItLXBhc3N3b3JkICVzIiAlIHVkLnBzd2QpCisKKyAgICAgICAgaWYgY29tbWFuZCA9PSAiaW5mbyI6CisgICAgICAgICAgICBzdm5jbWQgPSAiJXMgaW5mbyAlcyAlczovLyVzLyVzLyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBzdm5yb290LCB1ZC5tb2R1bGUpCisgICAgICAgIGVsaWYgY29tbWFuZCA9PSAibG9nMSI6CisgICAgICAgICAgICBzdm5jbWQgPSAiJXMgbG9nIC0tbGltaXQgMSAlcyAlczovLyVzLyVzLyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucyksIHByb3RvLCBzdm5yb290LCB1ZC5tb2R1bGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdWZmaXggPSAiIgorICAgICAgICAgICAgaWYgdWQucmV2aXNpb246CisgICAgICAgICAgICAgICAgb3B0aW9ucy5hcHBlbmQoIi1yICVzIiAlIHVkLnJldmlzaW9uKQorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICJAJXMiICUgKHVkLnJldmlzaW9uKQorCisgICAgICAgICAgICBpZiBjb21tYW5kID09ICJmZXRjaCI6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0dXNlciA9IHVkLnBhcm0uZ2V0KCJ0cmFuc3BvcnR1c2VyIiwgIiIpCisgICAgICAgICAgICAgICAgc3ZuY21kID0gIiVzIGNvICVzICVzOi8vJXMlcy8lcyVzICVzIiAlICh1ZC5iYXNlY21kLCAiICIuam9pbihvcHRpb25zKSwgcHJvdG8sIHRyYW5zcG9ydHVzZXIsIHN2bnJvb3QsIHVkLm1vZHVsZSwgc3VmZml4LCB1ZC5tb2R1bGUpCisgICAgICAgICAgICBlbGlmIGNvbW1hbmQgPT0gInVwZGF0ZSI6CisgICAgICAgICAgICAgICAgc3ZuY21kID0gIiVzIHVwZGF0ZSAlcyIgJSAodWQuYmFzZWNtZCwgIiAiLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZldGNoRXJyb3IoIkludmFsaWQgc3ZuIGNvbW1hbmQgJXMiICUgY29tbWFuZCwgdWQudXJsKQorCisgICAgICAgIGlmIHN2bl9yc2g6CisgICAgICAgICAgICBzdm5jbWQgPSAic3ZuX1JTSD1cIiVzXCIgJXMiICUgKHN2bl9yc2gsIHN2bmNtZCkKKworICAgICAgICByZXR1cm4gc3ZuY21kCisKKyAgICBkZWYgZG93bmxvYWQoc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiJGZXRjaCB1cmwiIiIKKworICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkZldGNoOiBjaGVja2luZyBmb3IgbW9kdWxlIGRpcmVjdG9yeSAnIiArIHVkLm1vZGRpciArICInIikKKworICAgICAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHVkLm1vZGRpciwgJy5zdm4nKSwgb3MuUl9PSyk6CisgICAgICAgICAgICBzdm51cGRhdGVjbWQgPSBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJ1cGRhdGUiKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0ZSAiICsgdWQudXJsKQorICAgICAgICAgICAgIyB1cGRhdGUgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgb3MuY2hkaXIodWQubW9kZGlyKQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGF0dGVtcHQgdG8gcnVuIHN2biB1cGdyYWRlIGZpcnN0IGluIGNhc2UgaXRzIGFuIG9sZGVyIHdvcmtpbmcgZm9ybWF0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuZmV0Y2hjbWQodWQuYmFzZWNtZCArICIgdXBncmFkZSIsIGQpCisgICAgICAgICAgICBleGNlcHQgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlJ1bm5pbmcgJXMiLCBzdm51cGRhdGVjbWQpCisgICAgICAgICAgICBiYi5mZXRjaDIuY2hlY2tfbmV0d29ya19hY2Nlc3MoZCwgc3ZudXBkYXRlY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChzdm51cGRhdGVjbWQsIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdm5mZXRjaGNtZCA9IHNlbGYuX2J1aWxkc3ZuY29tbWFuZCh1ZCwgZCwgImZldGNoIikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaCAiICsgdWQudXJsKQorICAgICAgICAgICAgIyBjaGVjayBvdXQgc291cmNlcyB0aGVyZQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIG9zLmNoZGlyKHVkLnBrZ2RpcikKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUnVubmluZyAlcyIsIHN2bmZldGNoY21kKQorICAgICAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHN2bmZldGNoY21kLCB1ZC51cmwpCisgICAgICAgICAgICBydW5mZXRjaGNtZChzdm5mZXRjaGNtZCwgZCkKKworICAgICAgICBzY21kYXRhID0gdWQucGFybS5nZXQoInNjbWRhdGEiLCAiIikKKyAgICAgICAgaWYgc2NtZGF0YSA9PSAia2VlcCI6CisgICAgICAgICAgICB0YXJfZmxhZ3MgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyX2ZsYWdzID0gIi0tZXhjbHVkZSAnLnN2biciCisKKyAgICAgICAgb3MuY2hkaXIodWQucGtnZGlyKQorICAgICAgICAjIHRhciB0aGVtIHVwIHRvIGEgZGVmaW5lZCBmaWxlbmFtZQorICAgICAgICBydW5mZXRjaGNtZCgidGFyICVzIC1jemYgJXMgJXMiICUgKHRhcl9mbGFncywgdWQubG9jYWxwYXRoLCB1ZC5tb2R1bGUpLCBkLCBjbGVhbnVwID0gW3VkLmxvY2FscGF0aF0pCisKKyAgICBkZWYgY2xlYW4oc2VsZiwgdWQsIGQpOgorICAgICAgICAiIiIgQ2xlYW4gU1ZOIHNwZWNpZmljIGZpbGVzIGFuZCBkaXJzICIiIgorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh1ZC5tb2RkaXIsIFRydWUpCisgICAgICAgIAorCisgICAgZGVmIHN1cHBvcnRzX3NyY3JldihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcmV2aXNpb25fa2V5KHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIHVuaXF1ZSBrZXkgZm9yIHRoZSB1cmwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAic3ZuOiIgKyB1ZC5tb2RkaXIKKworICAgIGRlZiBfbGF0ZXN0X3JldmlzaW9uKHNlbGYsIHVkLCBkLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbGF0ZXN0IHVwc3RyZWFtIHJldmlzaW9uIG51bWJlcgorICAgICAgICAiIiIKKyAgICAgICAgYmIuZmV0Y2gyLmNoZWNrX25ldHdvcmtfYWNjZXNzKGQsIHNlbGYuX2J1aWxkc3ZuY29tbWFuZCh1ZCwgZCwgImxvZzEiKSkKKworICAgICAgICBvdXRwdXQgPSBydW5mZXRjaGNtZCgiTEFORz1DIExDX0FMTD1DICIgKyBzZWxmLl9idWlsZHN2bmNvbW1hbmQodWQsIGQsICJsb2cxIiksIGQsIFRydWUpCisKKyAgICAgICAgIyBza2lwIHRoZSBmaXJzdCBsaW5lLCBhcyBwZXIgb3V0cHV0IG9mIHN2biBsb2cKKyAgICAgICAgIyB0aGVuIHdlIGV4cGVjdCB0aGUgcmV2aXNpb24gb24gdGhlIDJuZCBsaW5lCisgICAgICAgIHJldmlzaW9uID0gcmUuc2VhcmNoKCdecihbMC05XSopJywgb3V0cHV0LnNwbGl0bGluZXMoKVsxXSkuZ3JvdXAoMSkKKworICAgICAgICByZXR1cm4gcmV2aXNpb24KKworICAgIGRlZiBzb3J0YWJsZV9yZXZpc2lvbihzZWxmLCB1ZCwgZCwgbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBzb3J0YWJsZSByZXZpc2lvbiBudW1iZXIgd2hpY2ggaW4gb3VyIGNhc2UgaXMgdGhlIHJldmlzaW9uIG51bWJlcgorICAgICAgICAiIiIKKworICAgICAgICByZXR1cm4gRmFsc2UsIHNlbGYuX2J1aWxkX3JldmlzaW9uKHVkLCBkKQorCisgICAgZGVmIF9idWlsZF9yZXZpc2lvbihzZWxmLCB1ZCwgZCk6CisgICAgICAgIHJldHVybiB1ZC5yZXZpc2lvbgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkgYi9iaXRiYWtlL2xpYi9iYi9mZXRjaDIvd2dldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDJhODk3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvZmV0Y2gyL3dnZXQucHkKQEAgLTAsMCArMSw1NDEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ0ZldGNoJyBpbXBsZW1lbnRhdGlvbnMKKworQ2xhc3NlcyBmb3Igb2J0YWluaW5nIHVwc3RyZWFtIHNvdXJjZXMgZm9yIHRoZQorQml0QmFrZSBidWlsZCB0b29scy4KKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworaW1wb3J0IHJlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYmIKK2ltcG9ydCB1cmxsaWIKK2Zyb20gICBiYiBpbXBvcnQgZGF0YQorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hNZXRob2QKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IKK2Zyb20gICBiYi5mZXRjaDIgaW1wb3J0IGxvZ2dlcgorZnJvbSAgIGJiLmZldGNoMiBpbXBvcnQgcnVuZmV0Y2hjbWQKK2Zyb20gICBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKworY2xhc3MgV2dldChGZXRjaE1ldGhvZCk6CisgICAgIiIiQ2xhc3MgdG8gZmV0Y2ggdXJscyB2aWEgJ3dnZXQnIiIiCisgICAgZGVmIHN1cHBvcnRzKHNlbGYsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIGdpdmVuIHVybCBjYW4gYmUgZmV0Y2hlZCB3aXRoIHdnZXQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gdWQudHlwZSBpbiBbJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJ10KKworICAgIGRlZiByZWNvbW1lbmRzX2NoZWNrc3VtKHNlbGYsIHVybGRhdGEpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHVybGRhdGFfaW5pdChzZWxmLCB1ZCwgZCk6CisgICAgICAgIGlmICdwcm90b2NvbCcgaW4gdWQucGFybToKKyAgICAgICAgICAgIGlmIHVkLnBhcm1bJ3Byb3RvY29sJ10gPT0gJ2dpdCc6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuZmV0Y2gyLlBhcmFtZXRlckVycm9yKCJJbnZhbGlkIHByb3RvY29sIC0gaWYgeW91IHdpc2ggdG8gZmV0Y2ggZnJvbSBhIGdpdCByZXBvc2l0b3J5IHVzaW5nIGh0dHAsIHlvdSBuZWVkIHRvIGluc3RlYWQgdXNlIHRoZSBnaXQ6Ly8gcHJlZml4IHdpdGggcHJvdG9jb2w9aHR0cCIsIHVkLnVybCkKKworICAgICAgICBpZiAnZG93bmxvYWRmaWxlbmFtZScgaW4gdWQucGFybToKKyAgICAgICAgICAgIHVkLmJhc2VuYW1lID0gdWQucGFybVsnZG93bmxvYWRmaWxlbmFtZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1ZC5iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodWQucGF0aCkKKworICAgICAgICB1ZC5sb2NhbGZpbGUgPSBkYXRhLmV4cGFuZCh1cmxsaWIudW5xdW90ZSh1ZC5iYXNlbmFtZSksIGQpCisKKyAgICAgICAgc2VsZi5iYXNlY21kID0gZC5nZXRWYXIoIkZFVENIQ01EX3dnZXQiLCBUcnVlKSBvciAiL3Vzci9iaW4vZW52IHdnZXQgLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIgorCisgICAgZGVmIF9ydW53Z2V0KHNlbGYsIHVkLCBkLCBjb21tYW5kLCBxdWlldCk6CisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJGZXRjaGluZyAlcyB1c2luZyBjb21tYW5kICclcyciICUgKHVkLnVybCwgY29tbWFuZCkpCisgICAgICAgIGJiLmZldGNoMi5jaGVja19uZXR3b3JrX2FjY2VzcyhkLCBjb21tYW5kKQorICAgICAgICBydW5mZXRjaGNtZChjb21tYW5kLCBkLCBxdWlldCkKKworICAgIGRlZiBkb3dubG9hZChzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIkZldGNoIHVybHMiIiIKKworICAgICAgICBmZXRjaGNtZCA9IHNlbGYuYmFzZWNtZAorCisgICAgICAgIGlmICdkb3dubG9hZGZpbGVuYW1lJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgZGxkaXIgPSBkLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGxkaXIgKyBvcy5zZXAgKyB1ZC5sb2NhbGZpbGUpKQorICAgICAgICAgICAgZmV0Y2hjbWQgKz0gIiAtTyAiICsgZGxkaXIgKyBvcy5zZXAgKyB1ZC5sb2NhbGZpbGUKKworICAgICAgICB1cmkgPSB1ZC51cmwuc3BsaXQoIjsiKVswXQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1ZC5sb2NhbHBhdGgpOgorICAgICAgICAgICAgIyBmaWxlIGV4aXN0cywgYnV0IHdlIGRpZG50IGNvbXBsZXRlIGl0Li4gdHJ5aW5nIGFnYWluLi4KKyAgICAgICAgICAgIGZldGNoY21kICs9IGQuZXhwYW5kKCIgLWMgLVAgJHtETF9ESVJ9ICclcyciICUgdXJpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmV0Y2hjbWQgKz0gZC5leHBhbmQoIiAtUCAke0RMX0RJUn0gJyVzJyIgJSB1cmkpCisKKyAgICAgICAgc2VsZi5fcnVud2dldCh1ZCwgZCwgZmV0Y2hjbWQsIEZhbHNlKQorCisgICAgICAgICMgU2FuaXR5IGNoZWNrIHNpbmNlIHdnZXQgY2FuIHByZXRlbmQgaXQgc3VjY2VlZCB3aGVuIGl0IGRpZG4ndAorICAgICAgICAjIEFsc28sIHRoaXMgdXNlZCB0byBoYXBwZW4gaWYgc291cmNlZm9yZ2Ugc2VudCB1cyB0byB0aGUgbWlycm9yIHBhZ2UKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHVkLmxvY2FscGF0aCk6CisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJUaGUgZmV0Y2ggY29tbWFuZCByZXR1cm5lZCBzdWNjZXNzIGZvciB1cmwgJXMgYnV0ICVzIGRvZXNuJ3QgZXhpc3Q/ISIgJSAodXJpLCB1ZC5sb2NhbHBhdGgpLCB1cmkpCisKKyAgICAgICAgaWYgb3MucGF0aC5nZXRzaXplKHVkLmxvY2FscGF0aCkgPT0gMDoKKyAgICAgICAgICAgIG9zLnJlbW92ZSh1ZC5sb2NhbHBhdGgpCisgICAgICAgICAgICByYWlzZSBGZXRjaEVycm9yKCJUaGUgZmV0Y2ggb2YgJXMgcmVzdWx0ZWQgaW4gYSB6ZXJvIHNpemUgZmlsZT8hIERlbGV0aW5nIGFuZCBmYWlsaW5nIHNpbmNlIHRoaXMgaXNuJ3QgcmlnaHQuIiAlICh1cmkpLCB1cmkpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjaGVja3N0YXR1cyhzZWxmLCBmZXRjaCwgdWQsIGQpOgorICAgICAgICBpbXBvcnQgdXJsbGliMiwgc29ja2V0LCBodHRwbGliCisgICAgICAgIGZyb20gdXJsbGliIGltcG9ydCBhZGRpbmZvdXJsCisgICAgICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaENvbm5lY3Rpb25DYWNoZQorCisgICAgICAgIGNsYXNzIEhUVFBDb25uZWN0aW9uQ2FjaGUoaHR0cGxpYi5IVFRQQ29ubmVjdGlvbik6CisgICAgICAgICAgICBpZiBmZXRjaC5jb25uZWN0aW9uX2NhY2hlOgorICAgICAgICAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJDb25uZWN0IHRvIHRoZSBob3N0IGFuZCBwb3J0IHNwZWNpZmllZCBpbiBfX2luaXRfXy4iIiIKKworICAgICAgICAgICAgICAgICAgICBzb2NrID0gZmV0Y2guY29ubmVjdGlvbl9jYWNoZS5nZXRfY29ubmVjdGlvbihzZWxmLmhvc3QsIHNlbGYucG9ydCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2guY29ubmVjdGlvbl9jYWNoZS5hZGRfY29ubmVjdGlvbihzZWxmLmhvc3QsIHNlbGYucG9ydCwgc2VsZi5zb2NrKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKKworICAgICAgICBjbGFzcyBDYWNoZUhUVFBIYW5kbGVyKHVybGxpYjIuSFRUUEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGh0dHBfb3BlbihzZWxmLCByZXEpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRvX29wZW4oSFRUUENvbm5lY3Rpb25DYWNoZSwgcmVxKQorCisgICAgICAgICAgICBkZWYgZG9fb3BlbihzZWxmLCBodHRwX2NsYXNzLCByZXEpOgorICAgICAgICAgICAgICAgICIiIlJldHVybiBhbiBhZGRpbmZvdXJsIG9iamVjdCBmb3IgdGhlIHJlcXVlc3QsIHVzaW5nIGh0dHBfY2xhc3MuCisKKyAgICAgICAgICAgICAgICBodHRwX2NsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBIVFRQQ29ubmVjdGlvbiBBUEkgZnJvbSBodHRwbGliLgorICAgICAgICAgICAgICAgIFRoZSBhZGRpbmZvdXJsIHJldHVybiB2YWx1ZSBpcyBhIGZpbGUtbGlrZSBvYmplY3QuICBJdCBhbHNvCisgICAgICAgICAgICAgICAgaGFzIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgaW5jbHVkaW5nOgorICAgICAgICAgICAgICAgICAgICAtIGluZm8oKTogcmV0dXJuIGEgbWltZXRvb2xzLk1lc3NhZ2Ugb2JqZWN0IGZvciB0aGUgaGVhZGVycworICAgICAgICAgICAgICAgICAgICAtIGdldHVybCgpOiByZXR1cm4gdGhlIG9yaWdpbmFsIHJlcXVlc3QgVVJMCisgICAgICAgICAgICAgICAgICAgIC0gY29kZTogSFRUUCBzdGF0dXMgY29kZQorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgIGhvc3QgPSByZXEuZ2V0X2hvc3QoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBob3N0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSB1cmxsbGliMi5VUkxFcnJvcignbm8gaG9zdCBnaXZlbicpCisKKyAgICAgICAgICAgICAgICBoID0gaHR0cF9jbGFzcyhob3N0LCB0aW1lb3V0PXJlcS50aW1lb3V0KSAjIHdpbGwgcGFyc2UgaG9zdDpwb3J0CisgICAgICAgICAgICAgICAgaC5zZXRfZGVidWdsZXZlbChzZWxmLl9kZWJ1Z2xldmVsKQorCisgICAgICAgICAgICAgICAgaGVhZGVycyA9IGRpY3QocmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICAgICAgICAgIGhlYWRlcnMudXBkYXRlKGRpY3QoKGssIHYpIGZvciBrLCB2IGluIHJlcS5oZWFkZXJzLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBoZWFkZXJzKSkKKworICAgICAgICAgICAgICAgICMgV2Ugd2FudCB0byBtYWtlIGFuIEhUVFAvMS4xIHJlcXVlc3QsIGJ1dCB0aGUgYWRkaW5mb3VybAorICAgICAgICAgICAgICAgICMgY2xhc3MgaXNuJ3QgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uLgorICAgICAgICAgICAgICAgICMgSXQgd2lsbCB0cnkgdG8gcmVhZCBhbGwgcmVtYWluaW5nIGRhdGEgZnJvbSB0aGUgc29ja2V0LAorICAgICAgICAgICAgICAgICMgd2hpY2ggd2lsbCBibG9jayB3aGlsZSB0aGUgc2VydmVyIHdhaXRzIGZvciB0aGUgbmV4dCByZXF1ZXN0LgorICAgICAgICAgICAgICAgICMgU28gbWFrZSBzdXJlIHRoZSBjb25uZWN0aW9uIGdldHMgY2xvc2VkIGFmdGVyIHRoZSAob25seSkKKyAgICAgICAgICAgICAgICAjIHJlcXVlc3QuCisKKyAgICAgICAgICAgICAgICAjIERvbid0IGNsb3NlIGNvbm5lY3Rpb24gd2hlbiBjb25uZWN0aW9uX2NhY2hlIGlzIGVuYWJsZWQsCisgICAgICAgICAgICAgICAgaWYgZmV0Y2guY29ubmVjdGlvbl9jYWNoZSBpcyBOb25lOiAKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1siQ29ubmVjdGlvbiJdID0gImNsb3NlIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbIkNvbm5lY3Rpb24iXSA9ICJLZWVwLUFsaXZlIiAjIFdvcmtzIGZvciBIVFRQLzEuMAorCisgICAgICAgICAgICAgICAgaGVhZGVycyA9IGRpY3QoCisgICAgICAgICAgICAgICAgICAgIChuYW1lLnRpdGxlKCksIHZhbCkgZm9yIG5hbWUsIHZhbCBpbiBoZWFkZXJzLml0ZW1zKCkpCisKKyAgICAgICAgICAgICAgICBpZiByZXEuX3R1bm5lbF9ob3N0OgorICAgICAgICAgICAgICAgICAgICB0dW5uZWxfaGVhZGVycyA9IHt9CisgICAgICAgICAgICAgICAgICAgIHByb3h5X2F1dGhfaGRyID0gIlByb3h5LUF1dGhvcml6YXRpb24iCisgICAgICAgICAgICAgICAgICAgIGlmIHByb3h5X2F1dGhfaGRyIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICB0dW5uZWxfaGVhZGVyc1twcm94eV9hdXRoX2hkcl0gPSBoZWFkZXJzW3Byb3h5X2F1dGhfaGRyXQorICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm94eS1BdXRob3JpemF0aW9uIHNob3VsZCBub3QgYmUgc2VudCB0byBvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGhlYWRlcnNbcHJveHlfYXV0aF9oZHJdCisgICAgICAgICAgICAgICAgICAgIGguc2V0X3R1bm5lbChyZXEuX3R1bm5lbF9ob3N0LCBoZWFkZXJzPXR1bm5lbF9oZWFkZXJzKQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLmdldF9zZWxlY3RvcigpLCByZXEuZGF0YSwgaGVhZGVycykKKyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6ICMgWFhYIHdoYXQgZXJyb3I/CisgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgY2xvc2UgY29ubmVjdGlvbiB3aGVuIGNhY2hlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIGlmIGZldGNoLmNvbm5lY3Rpb25fY2FjaGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSB1cmxsaWIyLlVSTEVycm9yKGVycikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZShidWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogIyBidWZmZXJpbmcga3cgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgciA9IGguZ2V0cmVzcG9uc2UoKQorCisgICAgICAgICAgICAgICAgIyBQaWNrIGFwYXJ0IHRoZSBIVFRQUmVzcG9uc2Ugb2JqZWN0IHRvIGdldCB0aGUgYWRkaW5mb3VybAorICAgICAgICAgICAgICAgICMgb2JqZWN0IGluaXRpYWxpemVkIHByb3Blcmx5LgorCisgICAgICAgICAgICAgICAgIyBXcmFwIHRoZSBIVFRQUmVzcG9uc2Ugb2JqZWN0IGluIHNvY2tldCdzIGZpbGUgb2JqZWN0IGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAjIGZvciBXaW5kb3dzLiAgVGhhdCBhZGFwdGVyIGNhbGxzIHJlY3YoKSwgc28gZGVsZWdhdGUgcmVjdigpCisgICAgICAgICAgICAgICAgIyB0byByZWFkKCkuICBUaGlzIHdlaXJkIHdyYXBwaW5nIGFsbG93cyB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvCisgICAgICAgICAgICAgICAgIyBoYXZlIHJlYWRsaW5lKCkgYW5kIHJlYWRsaW5lcygpIG1ldGhvZHMuCisKKyAgICAgICAgICAgICAgICAjIFhYWCBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gZXh0cmFjdCB0aGUgcmVhZCBidWZmZXJpbmcgY29kZQorICAgICAgICAgICAgICAgICMgb3V0IG9mIHNvY2tldC5fZmlsZW9iamVjdCgpIGFuZCBpbnRvIGEgYmFzZSBjbGFzcy4KKyAgICAgICAgICAgICAgICByLnJlY3YgPSByLnJlYWQKKworICAgICAgICAgICAgICAgICMgbm8gZGF0YSwganVzdCBoYXZlIHRvIHJlYWQKKyAgICAgICAgICAgICAgICByLnJlYWQoKQorICAgICAgICAgICAgICAgIGNsYXNzIGZwX2R1bW15KG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICAgICAgICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICByZXNwID0gYWRkaW5mb3VybChmcF9kdW1teSgpLCByLm1zZywgcmVxLmdldF9mdWxsX3VybCgpKQorICAgICAgICAgICAgICAgIHJlc3AuY29kZSA9IHIuc3RhdHVzCisgICAgICAgICAgICAgICAgcmVzcC5tc2cgPSByLnJlYXNvbgorCisgICAgICAgICAgICAgICAgIyBDbG9zZSBjb25uZWN0aW9uIHdoZW4gc2VydmVyIHJlcXVlc3QgaXQuCisgICAgICAgICAgICAgICAgaWYgZmV0Y2guY29ubmVjdGlvbl9jYWNoZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0Nvbm5lY3Rpb24nIGluIHIubXNnIGFuZCByLm1zZ1snQ29ubmVjdGlvbiddID09ICdjbG9zZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaC5jb25uZWN0aW9uX2NhY2hlLnJlbW92ZV9jb25uZWN0aW9uKGguaG9zdCwgaC5wb3J0KQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICBkZWYgZXhwb3J0X3Byb3hpZXMoZCk6CisgICAgICAgICAgICB2YXJpYWJsZXMgPSBbJ2h0dHBfcHJveHknLCAnSFRUUF9QUk9YWScsICdodHRwc19wcm94eScsICdIVFRQU19QUk9YWScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z0cF9wcm94eScsICdGVFBfUFJPWFknLCAnbm9fcHJveHknLCAnTk9fUFJPWFknXQorICAgICAgICAgICAgZXhwb3J0ZWQgPSBGYWxzZQorCisgICAgICAgICAgICBmb3IgdiBpbiB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgaWYgdiBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdl9wcm94eSA9IGQuZ2V0VmFyKHYsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHZfcHJveHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW3ZdID0gdl9wcm94eQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWQgPSBUcnVlCisKKyAgICAgICAgICAgIHJldHVybiBleHBvcnRlZAorCisgICAgICAgIGRlZiBoZWFkX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiSEVBRCIKKworICAgICAgICBleHBvcnRlZF9wcm94aWVzID0gZXhwb3J0X3Byb3hpZXMoZCkKKworICAgICAgICAjIFhYWDogU2luY2UgUHl0aG9uIDIuNy45IHNzbCBjZXJ0IHZhbGlkYXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgICAgICMgc2VlIFBFUC0wNDc2LCB0aGlzIGNhdXNlcyB2ZXJpZmljYXRpb24gZXJyb3JzIG9uIHNvbWUgaHR0cHMgc2VydmVycworICAgICAgICAjIHNvIGRpc2FibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgaW1wb3J0IHNzbAorICAgICAgICBzc2xfY29udGV4dCA9IE5vbmUKKyAgICAgICAgaWYgaGFzYXR0cihzc2wsICdfY3JlYXRlX3VudmVyaWZpZWRfY29udGV4dCcpOgorICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKQorCisgICAgICAgIGlmIGV4cG9ydGVkX3Byb3hpZXMgPT0gVHJ1ZSBhbmQgc3NsX2NvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLlByb3h5SGFuZGxlciwgQ2FjaGVIVFRQSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgdXJsbGliMi5IVFRQU0hhbmRsZXIoY29udGV4dD1zc2xfY29udGV4dCkpCisgICAgICAgIGVsaWYgZXhwb3J0ZWRfcHJveGllcyA9PSBGYWxzZSBhbmQgc3NsX2NvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihDYWNoZUhUVFBIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICB1cmxsaWIyLkhUVFBTSGFuZGxlcihjb250ZXh0PXNzbF9jb250ZXh0KSkKKyAgICAgICAgZWxpZiBleHBvcnRlZF9wcm94aWVzID09IFRydWUgYW5kIHNzbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLlByb3h5SGFuZGxlciwgQ2FjaGVIVFRQSGFuZGxlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKENhY2hlSFRUUEhhbmRsZXIpCisKKyAgICAgICAgdXJsbGliMi5SZXF1ZXN0LmdldF9tZXRob2QgPSBoZWFkX21ldGhvZAorICAgICAgICB1cmxsaWIyLmluc3RhbGxfb3BlbmVyKG9wZW5lcikKKworICAgICAgICB1cmkgPSB1ZC51cmwuc3BsaXQoIjsiKVswXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVybGxpYjIudXJsb3Blbih1cmkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9wYXJzZV9wYXRoKHNlbGYsIHJlZ2V4LCBzKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgYW5kIGdyb3VwIG5hbWUsIHZlcnNpb24gYW5kIGFyY2hpdmUgdHlwZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHMKKyAgICAgICAgIiIiCisKKyAgICAgICAgbSA9IHJlZ2V4LnNlYXJjaChzKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcG5hbWUgPSAnJworICAgICAgICAgICAgcHZlciA9ICcnCisgICAgICAgICAgICBwdHlwZSA9ICcnCisKKyAgICAgICAgICAgIG1kaWN0ID0gbS5ncm91cGRpY3QoKQorICAgICAgICAgICAgaWYgJ25hbWUnIGluIG1kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICBwbmFtZSA9IG1kaWN0WyduYW1lJ10KKyAgICAgICAgICAgIGlmICdwdmVyJyBpbiBtZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgcHZlciA9IG1kaWN0WydwdmVyJ10KKyAgICAgICAgICAgIGlmICd0eXBlJyBpbiBtZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgcHR5cGUgPSBtZGljdFsndHlwZSddCisKKyAgICAgICAgICAgIGJiLmRlYnVnKDMsICJfcGFyc2VfcGF0aDogJXMsICVzLCAlcyIgJSAocG5hbWUsIHB2ZXIsIHB0eXBlKSkKKworICAgICAgICAgICAgcmV0dXJuIChwbmFtZSwgcHZlciwgcHR5cGUpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfbW9kZWxhdGVfdmVyc2lvbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgaWYgdmVyc2lvblswXSBpbiBbJy4nLCAnLSddOgorICAgICAgICAgICAgaWYgdmVyc2lvblsxXS5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25bMV0gKyB2ZXJzaW9uWzBdICsgdmVyc2lvblsyOmxlbih2ZXJzaW9uKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25bMTpsZW4odmVyc2lvbildCisKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignLScsICcuJywgdmVyc2lvbikKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignXycsICcuJywgdmVyc2lvbikKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignKHJjKSsnLCAnLjEwMDAuJywgdmVyc2lvbikKKyAgICAgICAgdmVyc2lvbiA9IHJlLnN1YignKGJldGEpKycsICcuMTAwLicsIHZlcnNpb24pCisgICAgICAgIHZlcnNpb24gPSByZS5zdWIoJyhhbHBoYSkrJywgJy4xMC4nLCB2ZXJzaW9uKQorICAgICAgICBpZiB2ZXJzaW9uWzBdID09ICd2JzoKKyAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzE6bGVuKHZlcnNpb24pXQorICAgICAgICByZXR1cm4gdmVyc2lvbgorCisgICAgZGVmIF92ZXJjbXAoc2VsZiwgb2xkLCBuZXcpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgd2hldGhlciAnbmV3JyBpcyBuZXdlciB0aGFuICdvbGQnIHZlcnNpb24uIFdlIHVzZSBleGlzdGluZyB2ZXJjbXAoKSBmb3IgdGhlCisgICAgICAgIHB1cnBvc2UuIFBFIGlzIGNsZWFyZWQgaW4gY29tcGFyaXNvbiBhcyBpdCdzIG5vdCBmb3IgYnVpbGQsIGFuZCBQUiBpcyBjbGVhcmVkIHRvbworICAgICAgICBmb3Igc2ltcGxpY2l0eSBhcyBpdCdzIHNvbWVob3cgZGlmZmljdWx0IHRvIGdldCBmcm9tIHZhcmlvdXMgdXBzdHJlYW0gZm9ybWF0CisgICAgICAgICIiIgorCisgICAgICAgIChvbGRwbiwgb2xkcHYsIG9sZHN1ZmZpeCkgPSBvbGQKKyAgICAgICAgKG5ld3BuLCBuZXdwdiwgbmV3c3VmZml4KSA9IG5ldworCisgICAgICAgICIiIgorICAgICAgICBDaGVjayBmb3IgYSBuZXcgc3VmZml4IHR5cGUgdGhhdCB3ZSBoYXZlIG5ldmVyIGhlYXJkIG9mIGJlZm9yZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgKG5ld3N1ZmZpeCk6CisgICAgICAgICAgICBtID0gc2VsZi5zdWZmaXhfcmVnZXhfY29tcC5zZWFyY2gobmV3c3VmZml4KQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgYmIud2FybigiJXMgaGFzIGEgcG9zc2libGUgdW5rbm93biBzdWZmaXg6ICVzIiAlIChuZXdwbiwgbmV3c3VmZml4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAiIiIKKyAgICAgICAgTm90IG91ciBwYWNrYWdlIHNvIGlnbm9yZSBpdAorICAgICAgICAiIiIKKyAgICAgICAgaWYgb2xkcG4gIT0gbmV3cG46CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBvbGRwdiA9IHNlbGYuX21vZGVsYXRlX3ZlcnNpb24ob2xkcHYpCisgICAgICAgIG5ld3B2ID0gc2VsZi5fbW9kZWxhdGVfdmVyc2lvbihuZXdwdikKKworICAgICAgICByZXR1cm4gYmIudXRpbHMudmVyY21wKCgiMCIsIG9sZHB2LCAiIiksICgiMCIsIG5ld3B2LCAiIikpCisKKyAgICBkZWYgX2ZldGNoX2luZGV4KHNlbGYsIHVyaSwgdWQsIGQpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIGZldGNoIGNoZWNrc3RhdHVzIHRvIGdldCBkaXJlY3RvcnkgaW5mb3JtYXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorCisgICAgICAgIGFnZW50ID0gIk1vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjkuMi4xMikgR2Vja28vMjAxMDEwMjcgVWJ1bnR1LzkuMTAgKGthcm1pYykgRmlyZWZveC8zLjYuMTIiCisgICAgICAgIGZldGNoY21kID0gc2VsZi5iYXNlY21kCisgICAgICAgIGZldGNoY21kICs9ICIgLU8gIiArIGYubmFtZSArICIgLS11c2VyLWFnZW50PSciICsgYWdlbnQgKyAiJyAnIiArIHVyaSArICInIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9ydW53Z2V0KHVkLCBkLCBmZXRjaGNtZCwgVHJ1ZSkKKyAgICAgICAgICAgIGZldGNocmVzdWx0ID0gZi5yZWFkKCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uOgorICAgICAgICAgICAgZmV0Y2hyZXN1bHQgPSAiIgorCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZmV0Y2hyZXN1bHQKKworICAgIGRlZiBfY2hlY2tfbGF0ZXN0X3ZlcnNpb24oc2VsZiwgdXJsLCBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LCBjdXJyZW50X3ZlcnNpb24sIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYSBwYWNrYWdlIGluc2lkZSBhIGdpdmVuIGRpcmVjdG9yeSBwYXRoCisgICAgICAgIElmIGVycm9yIG9yIG5vIHZlcnNpb24sIHJldHVybiAiIgorICAgICAgICAiIiIKKyAgICAgICAgdmFsaWQgPSAwCisgICAgICAgIHZlcnNpb24gPSBbJycsICcnLCAnJ10KKworICAgICAgICBiYi5kZWJ1ZygzLCAiVmVyc2lvblVSTDogJXMiICUgKHVybCkpCisgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuX2ZldGNoX2luZGV4KHVybCwgdWQsIGQpKQorICAgICAgICBpZiBub3Qgc291cDoKKyAgICAgICAgICAgIGJiLmRlYnVnKDMsICIqKiogJXMgTk8gU09VUCIgJSAodXJsKSkKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNvdXAuZmluZF9hbGwoJ2EnLCBocmVmPVRydWUpOgorICAgICAgICAgICAgYmIuZGVidWcoMywgImxpbmVbJ2hyZWYnXSA9ICclcyciICUgKGxpbmVbJ2hyZWYnXSkpCisgICAgICAgICAgICBiYi5kZWJ1ZygzLCAibGluZSA9ICclcyciICUgKHN0cihsaW5lKSkpCisKKyAgICAgICAgICAgIG5ld3ZlciA9IHNlbGYuX3BhcnNlX3BhdGgocGFja2FnZV9yZWdleCwgbGluZVsnaHJlZiddKQorICAgICAgICAgICAgaWYgbm90IG5ld3ZlcjoKKyAgICAgICAgICAgICAgICBuZXd2ZXIgPSBzZWxmLl9wYXJzZV9wYXRoKHBhY2thZ2VfcmVnZXgsIHN0cihsaW5lKSkKKworICAgICAgICAgICAgaWYgbmV3dmVyOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDMsICJVcHN0cmVhbSB2ZXJzaW9uIGZvdW5kOiAlcyIgJSBuZXd2ZXJbMV0pCisgICAgICAgICAgICAgICAgaWYgdmFsaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IG5ld3ZlcgorICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3ZlcmNtcCh2ZXJzaW9uLCBuZXd2ZXIpIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IG5ld3ZlcgorICAgICAgICAgICAgICAgIAorICAgICAgICBwdXB2ZXIgPSByZS5zdWIoJ18nLCAnLicsIHZlcnNpb25bMV0pCisKKyAgICAgICAgYmIuZGVidWcoMywgIioqKiAlcyAtPiBVcHN0cmVhbVZlcnNpb24gPSAlcyAoQ3VycmVudFZlcnNpb24gPSAlcykiICUKKyAgICAgICAgICAgICAgICAocGFja2FnZSwgcHVwdmVyIG9yICJOL0EiLCBjdXJyZW50X3ZlcnNpb25bMV0pKQorCisgICAgICAgIGlmIHZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIHB1cHZlcgorCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIF9jaGVja19sYXRlc3RfdmVyc2lvbl9ieV9kaXIoc2VsZiwgZGlydmVyLCBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LAorICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICAgICAgU2NhbiBldmVyeSBkaXJlY3RvcnkgaW4gb3JkZXIgdG8gZ2V0IHVwc3RyZWFtIHZlcnNpb24uCisgICAgICAgICIiIgorICAgICAgICB2ZXJzaW9uX2RpciA9IFsnJywgJycsICcnXQorICAgICAgICB2ZXJzaW9uID0gWycnLCAnJywgJyddCisKKyAgICAgICAgZGlydmVyX3JlZ2V4ID0gcmUuY29tcGlsZSgiKFxEKikoKFxkK1tcLlwtX10pKyhcZCspKSIpCisgICAgICAgIHMgPSBkaXJ2ZXJfcmVnZXguc2VhcmNoKGRpcnZlcikKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgIHZlcnNpb25fZGlyWzFdID0gcy5ncm91cCgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmVyc2lvbl9kaXJbMV0gPSBkaXJ2ZXIKKworICAgICAgICBkaXJzX3VyaSA9IGJiLmZldGNoLmVuY29kZXVybChbdWQudHlwZSwgdWQuaG9zdCwKKyAgICAgICAgICAgICAgICB1ZC5wYXRoLnNwbGl0KGRpcnZlcilbMF0sIHVkLnVzZXIsIHVkLnBzd2QsIHt9XSkKKyAgICAgICAgYmIuZGVidWcoMywgIkRpclVSTDogJXMsICVzIiAlIChkaXJzX3VyaSwgcGFja2FnZSkpCisKKyAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoc2VsZi5fZmV0Y2hfaW5kZXgoZGlyc191cmksIHVkLCBkKSkKKyAgICAgICAgaWYgbm90IHNvdXA6CisgICAgICAgICAgICByZXR1cm4gdmVyc2lvblsxXQorCisgICAgICAgIGZvciBsaW5lIGluIHNvdXAuZmluZF9hbGwoJ2EnLCBocmVmPVRydWUpOgorICAgICAgICAgICAgcyA9IGRpcnZlcl9yZWdleC5zZWFyY2gobGluZVsnaHJlZiddLnN0cmlwKCIvIikpCisgICAgICAgICAgICBpZiBzOgorICAgICAgICAgICAgICAgIHZlcnNpb25fZGlyX25ldyA9IFsnJywgcy5ncm91cCgyKSwgJyddCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdmVyY21wKHZlcnNpb25fZGlyLCB2ZXJzaW9uX2Rpcl9uZXcpIDw9IDA6CisgICAgICAgICAgICAgICAgICAgIGRpcnZlcl9uZXcgPSBzLmdyb3VwKDEpICsgcy5ncm91cCgyKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gdWQucGF0aC5yZXBsYWNlKGRpcnZlciwgZGlydmVyX25ldywgVHJ1ZSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHBhY2thZ2UpWzBdCisgICAgICAgICAgICAgICAgICAgIHVyaSA9IGJiLmZldGNoLmVuY29kZXVybChbdWQudHlwZSwgdWQuaG9zdCwgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVkLnVzZXIsIHVkLnBzd2QsIHt9XSkKKworICAgICAgICAgICAgICAgICAgICBwdXB2ZXIgPSBzZWxmLl9jaGVja19sYXRlc3RfdmVyc2lvbih1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwgcGFja2FnZV9yZWdleCwgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHVwdmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvblsxXSA9IHB1cHZlcgorCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25fZGlyID0gdmVyc2lvbl9kaXJfbmV3CisKKyAgICAgICAgcmV0dXJuIHZlcnNpb25bMV0KKworICAgIGRlZiBfaW5pdF9yZWdleGVzKHNlbGYsIHBhY2thZ2UsIHVkLCBkKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hdGNoIGFzIG1hbnkgcGF0dGVybnMgYXMgcG9zc2libGUgc3VjaCBhczoKKyAgICAgICAgICAgICAgICBnbm9tZS1jb21tb24tMi4yMC4wLnRhci5neiAobW9zdCBjb21tb24gZm9ybWF0KQorICAgICAgICAgICAgICAgIGd0aystMi45MC4xLnRhci5negorICAgICAgICAgICAgICAgIHhmODYtaW5wdXQtc3luYXB0aWNzLTEyLjYuOS50YXIuZ3oKKyAgICAgICAgICAgICAgICBkcmkycHJvdG8tMi4zLnRhci5negorICAgICAgICAgICAgICAgIGJsa3Rvb2xfNC5vcmlnLnRhci5negorICAgICAgICAgICAgICAgIGxpYmlkM3RhZy0wLjE1LjFiLnRhci5negorICAgICAgICAgICAgICAgIHVuemlwNTUyLnRhci5negorICAgICAgICAgICAgICAgIGljdTRjLTNfNi1zcmMudGd6CisgICAgICAgICAgICAgICAgZ2VuZXh0MmZzXzEuMy5vcmlnLnRhci5negorICAgICAgICAgICAgICAgIGdzdC1mbHVlbmRvLW1wMworICAgICAgICAiIiIKKyAgICAgICAgIyBtYXRjaCBtb3N0IHBhdHRlcm5zIHdoaWNoIHVzZXMgIi0iIGFzIHNlcGFyYXRvciB0byB2ZXJzaW9uIGRpZ2l0cworICAgICAgICBwbl9wcmVmaXgxID0gIlthLXpBLVpdW2EtekEtWjAtOV0qKFstX11bYS16QS1aXVx3KykqXCs/Wy1fXSIKKyAgICAgICAgIyBhIGxvb3NlIHBhdHRlcm4gc3VjaCBhcyBmb3IgdW56aXA1NTIudGFyLmd6CisgICAgICAgIHBuX3ByZWZpeDIgPSAiW2EtekEtWl0rIgorICAgICAgICAjIGEgbG9vc2UgcGF0dGVybiBzdWNoIGFzIGZvciA4MDMyNS1xdWlja3ktMC40LnRhci5negorICAgICAgICBwbl9wcmVmaXgzID0gIlswLTldK1stXT9bYS16QS1aXSsiCisgICAgICAgICMgU2F2ZSB0aGUgUGFja2FnZSBOYW1lIChwbikgUmVnZXggZm9yIHVzZSBsYXRlcgorICAgICAgICBwbl9yZWdleCA9ICIoJXN8JXN8JXMpIiAlIChwbl9wcmVmaXgxLCBwbl9wcmVmaXgyLCBwbl9wcmVmaXgzKQorCisgICAgICAgICMgbWF0Y2ggdmVyc2lvbgorICAgICAgICBwdmVyX3JlZ2V4ID0gIigoW0EtWl0qXGQrW2EtekEtWl0qW1wuXC1fXSopKykiCisKKyAgICAgICAgIyBtYXRjaCBhcmNoCisgICAgICAgIHBhcmNoX3JlZ2V4ID0gIi1zb3VyY2V8X2FsbF8iCisKKyAgICAgICAgIyBzcmMucnBtIGV4dGVuc2lvbiB3YXMgYWRkZWQgb25seSBmb3IgcnBtIHBhY2thZ2UuIENhbiBiZSByZW1vdmVkIGlmIHRoZSBycG0KKyAgICAgICAgIyBwYWNrYWdlZCB3aWxsIGFsd2F5cyBiZSBjb25zaWRlcmVkIGFzIGhhdmluZyB0byBiZSBtYW51YWxseSB1cGdyYWRlZAorICAgICAgICBwc3VmZml4X3JlZ2V4ID0gIih0YXJcLmd6fHRnenx0YXJcLmJ6Mnx6aXB8eHp8cnBtfGJ6MnxvcmlnXC50YXJcLmd6fHRhclwueHp8c3JjXC50YXJcLmd6fHNyY1wudGd6fHN2bnJcZCtcLnRhclwuYnoyfHN0YWJsZVwudGFyXC5nenxzcmNcLnJwbSkiCisKKyAgICAgICAgIyBtYXRjaCBuYW1lLCB2ZXJzaW9uIGFuZCBhcmNoaXZlIHR5cGUgb2YgYSBwYWNrYWdlCisgICAgICAgIHBhY2thZ2VfcmVnZXhfY29tcCA9IHJlLmNvbXBpbGUoIig/UDxuYW1lPiVzP1wuP3Y/KSg/UDxwdmVyPiVzKSg/UDxhcmNoPiVzKT9bXC4tXSg/UDx0eXBlPiVzJCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocG5fcmVnZXgsIHB2ZXJfcmVnZXgsIHBhcmNoX3JlZ2V4LCBwc3VmZml4X3JlZ2V4KSkKKyAgICAgICAgc2VsZi5zdWZmaXhfcmVnZXhfY29tcCA9IHJlLmNvbXBpbGUocHN1ZmZpeF9yZWdleCkKKworICAgICAgICAjIGNvbXBpbGUgcmVnZXgsIGNhbiBiZSBzcGVjaWZpYyBieSBwYWNrYWdlIG9yIGdlbmVyaWMgcmVnZXgKKyAgICAgICAgcG5fcmVnZXggPSBkLmdldFZhcignUkVHRVgnLCBUcnVlKQorICAgICAgICBpZiBwbl9yZWdleDoKKyAgICAgICAgICAgIHBhY2thZ2VfY3VzdG9tX3JlZ2V4X2NvbXAgPSByZS5jb21waWxlKHBuX3JlZ2V4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmVyc2lvbiA9IHNlbGYuX3BhcnNlX3BhdGgocGFja2FnZV9yZWdleF9jb21wLCBwYWNrYWdlKQorICAgICAgICAgICAgaWYgdmVyc2lvbjoKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2N1c3RvbV9yZWdleF9jb21wID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICAgICAgICAgIig/UDxuYW1lPiVzKSg/UDxwdmVyPiVzKSg/UDxhcmNoPiVzKT9bXC4tXSg/UDx0eXBlPiVzKSIgJQorICAgICAgICAgICAgICAgICAgICAocmUuZXNjYXBlKHZlcnNpb25bMF0pLCBwdmVyX3JlZ2V4LCBwYXJjaF9yZWdleCwgcHN1ZmZpeF9yZWdleCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2VfY3VzdG9tX3JlZ2V4X2NvbXAgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VfY3VzdG9tX3JlZ2V4X2NvbXAKKworICAgIGRlZiBsYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmLCB1ZCwgZCk6CisgICAgICAgICIiIgorICAgICAgICBNYW5pcHVsYXRlIHRoZSBVUkwgYW5kIHRyeSB0byBvYnRhaW4gdGhlIGxhdGVzdCBwYWNrYWdlIHZlcnNpb24KKworICAgICAgICBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHNhbWUgbmFtZSBhbmQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhY2thZ2UgPSB1ZC5wYXRoLnNwbGl0KCIvIilbLTFdCisgICAgICAgIGN1cnJlbnRfdmVyc2lvbiA9IFsnJywgZC5nZXRWYXIoJ1BWJywgVHJ1ZSksICcnXQorCisgICAgICAgICIiInBvc3NpYmxlIHRvIGhhdmUgbm8gdmVyc2lvbiBpbiBwa2cgbmFtZSwgc3VjaCBhcyBzcGVjdHJ1bS1mdyIiIgorICAgICAgICBpZiBub3QgcmUuc2VhcmNoKCJcZCsiLCBwYWNrYWdlKToKKyAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvblsxXSA9IHJlLnN1YignXycsICcuJywgY3VycmVudF92ZXJzaW9uWzFdKQorICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uWzFdID0gcmUuc3ViKCctJywgJy4nLCBjdXJyZW50X3ZlcnNpb25bMV0pCisgICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRfdmVyc2lvblsxXSwgJycpCisKKyAgICAgICAgcGFja2FnZV9yZWdleCA9IHNlbGYuX2luaXRfcmVnZXhlcyhwYWNrYWdlLCB1ZCwgZCkKKyAgICAgICAgaWYgcGFja2FnZV9yZWdleCBpcyBOb25lOgorICAgICAgICAgICAgYmIud2FybigibGF0ZXN0X3ZlcnNpb25zdHJpbmc6IHBhY2thZ2UgJXMgZG9uJ3QgbWF0Y2ggcGF0dGVybiIgJSAocGFja2FnZSkpCisgICAgICAgICAgICByZXR1cm4gKCcnLCAnJykKKyAgICAgICAgYmIuZGVidWcoMywgImxhdGVzdF92ZXJzaW9uc3RyaW5nLCByZWdleDogJXMiICUgKHBhY2thZ2VfcmVnZXgucGF0dGVybikpCisKKyAgICAgICAgdXJpID0gIiIKKyAgICAgICAgcmVnZXhfdXJpID0gZC5nZXRWYXIoIlJFR0VYX1VSSSIsIFRydWUpCisgICAgICAgIGlmIG5vdCByZWdleF91cmk6CisgICAgICAgICAgICBwYXRoID0gdWQucGF0aC5zcGxpdChwYWNrYWdlKVswXQorCisgICAgICAgICAgICAjIHNlYXJjaCBmb3IgdmVyc2lvbiBtYXRjaGVzIG9uIGZvbGRlcnMgaW5zaWRlIHRoZSBwYXRoLCBsaWtlOgorICAgICAgICAgICAgIyAiNS43IiBpbiBodHRwOi8vZG93bmxvYWQuZ25vbWUub3JnL3NvdXJjZXMvJHtQTn0vNS43LyR7UE59LSR7UFZ9LnRhci5negorICAgICAgICAgICAgZGlydmVyX3JlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPGRpcnZlcj5bXi9dKihcZCtcLikqXGQrKFstX11yXGQrKSopLyIpCisgICAgICAgICAgICBtID0gZGlydmVyX3JlZ2V4LnNlYXJjaChwYXRoKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgZGlydmVyID0gbS5ncm91cCgnZGlydmVyJykKKworICAgICAgICAgICAgICAgIGRpcnZlcl9wbl9yZWdleCA9IHJlLmNvbXBpbGUoIiVzXGQ/IiAlIChyZS5lc2NhcGUocG4pKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGlydmVyX3BuX3JlZ2V4LnNlYXJjaChkaXJ2ZXIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuX2NoZWNrX2xhdGVzdF92ZXJzaW9uX2J5X2RpcihkaXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBwYWNrYWdlX3JlZ2V4LCBjdXJyZW50X3ZlcnNpb24sIHVkLCBkKSwgJycpCisKKyAgICAgICAgICAgIHVyaSA9IGJiLmZldGNoLmVuY29kZXVybChbdWQudHlwZSwgdWQuaG9zdCwgcGF0aCwgdWQudXNlciwgdWQucHN3ZCwge31dKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJpID0gcmVnZXhfdXJpCisKKyAgICAgICAgcmV0dXJuIChzZWxmLl9jaGVja19sYXRlc3RfdmVyc2lvbih1cmksIHBhY2thZ2UsIHBhY2thZ2VfcmVnZXgsCisgICAgICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uLCB1ZCwgZCksICcnKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvbWFpbi5weSBiL2JpdGJha2UvbGliL2JiL21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc2MmY3MgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL21haW4ucHkKQEAgLTAsMCArMSw0MjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHdhcm5pbmdzCisKK2ltcG9ydCBiYgorZnJvbSBiYiBpbXBvcnQgZXZlbnQKK2ltcG9ydCBiYi5tc2cKK2Zyb20gYmIgaW1wb3J0IGNvb2tlcgorZnJvbSBiYiBpbXBvcnQgdWkKK2Zyb20gYmIgaW1wb3J0IHNlcnZlcgorZnJvbSBiYiBpbXBvcnQgY29va2VyZGF0YQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisKK2NsYXNzIEJCTWFpbkV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHByZXNlbnRfb3B0aW9ucyhvcHRpb25saXN0KToKKyAgICBpZiBsZW4ob3B0aW9ubGlzdCkgPiAxOgorICAgICAgICByZXR1cm4gJyBvciAnLmpvaW4oWycsICcuam9pbihvcHRpb25saXN0WzotMV0pLCBvcHRpb25saXN0Wy0xXV0pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG9wdGlvbmxpc3RbMF0KKworY2xhc3MgQml0YmFrZUhlbHBGb3JtYXR0ZXIob3B0cGFyc2UuSW5kZW50ZWRIZWxwRm9ybWF0dGVyKToKKyAgICBkZWYgZm9ybWF0X29wdGlvbihzZWxmLCBvcHRpb24pOgorICAgICAgICAjIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSB0ZXh0IHdlIHN1cHBseSB0bworICAgICAgICAjIGFkZF9vcHRpb24oKSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBsaXN0X2V4dGVuc2lvbl9tb2R1bGVzKCkKKyAgICAgICAgIyBvbiBldmVyeSBleGVjdXRpb24gKHNpbmNlIGl0IGltcG9ydHMgYWxsIG9mIHRoZSBtb2R1bGVzKQorICAgICAgICAjIE5vdGUgYWxzbyB0aGF0IHdlIG1vZGlmeSBvcHRpb24uaGVscCByYXRoZXIgdGhhbiB0aGUgcmV0dXJuZWQgdGV4dAorICAgICAgICAjIC0gdGhpcyBpcyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmUtZm9ybWF0IHRoZSB0ZXh0IG91cnNlbHZlcworICAgICAgICBpZiBvcHRpb24uZGVzdCA9PSAndWknOgorICAgICAgICAgICAgdmFsaWRfdWlzID0gbGlzdF9leHRlbnNpb25fbW9kdWxlcyhiYi51aSwgJ21haW4nKQorICAgICAgICAgICAgb3B0aW9uLmhlbHAgPSBvcHRpb24uaGVscC5yZXBsYWNlKCdAQ0hPSUNFU0AnLCBwcmVzZW50X29wdGlvbnModmFsaWRfdWlzKSkKKyAgICAgICAgZWxpZiBvcHRpb24uZGVzdCA9PSAnc2VydmVydHlwZSc6CisgICAgICAgICAgICB2YWxpZF9zZXJ2ZXJfdHlwZXMgPSBsaXN0X2V4dGVuc2lvbl9tb2R1bGVzKGJiLnNlcnZlciwgJ0JpdEJha2VTZXJ2ZXInKQorICAgICAgICAgICAgb3B0aW9uLmhlbHAgPSBvcHRpb24uaGVscC5yZXBsYWNlKCdAQ0hPSUNFU0AnLCBwcmVzZW50X29wdGlvbnModmFsaWRfc2VydmVyX3R5cGVzKSkKKworICAgICAgICByZXR1cm4gb3B0cGFyc2UuSW5kZW50ZWRIZWxwRm9ybWF0dGVyLmZvcm1hdF9vcHRpb24oc2VsZiwgb3B0aW9uKQorCitkZWYgbGlzdF9leHRlbnNpb25fbW9kdWxlcyhwa2csIGNoZWNrYXR0cik6CisgICAgIiIiCisgICAgTGlzdHMgZXh0ZW5zaW9uIG1vZHVsZXMgaW4gYSBzcGVjaWZpYyBQeXRob24gcGFja2FnZQorICAgIChlLmcuIFVJcywgc2VydmVycykuIE5PVEU6IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGltcG9ydCBhbGwgb2YgdGhlCisgICAgc3VibW9kdWxlcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBpbiBvcmRlciB0byBjaGVjayBmb3IgdGhlIHNwZWNpZmllZAorICAgIGF0dHJpYnV0ZTsgdGhpcyBjYW4gaGF2ZSB1bnVzdWFsIHNpZGUtZWZmZWN0cy4gQXMgYSByZXN1bHQsIHRoaXMgc2hvdWxkCisgICAgb25seSBiZSBjYWxsZWQgd2hlbiBkaXNwbGF5aW5nIGhlbHAgdGV4dCBvciBlcnJvciBtZXNzYWdlcy4KKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBwa2c6IHByZXZpb3VzbHkgaW1wb3J0ZWQgUHl0aG9uIHBhY2thZ2UgdG8gbGlzdAorICAgICAgICBjaGVja2F0dHI6IGF0dHJpYnV0ZSB0byBsb29rIGZvciBpbiBtb2R1bGUgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgdmFsaWQKKyAgICAgICAgICAgIGFzIHRoZSB0eXBlIG9mIGV4dGVuc2lvbiB5b3UgYXJlIGxvb2tpbmcgZm9yCisgICAgIiIiCisgICAgaW1wb3J0IHBrZ3V0aWwKKyAgICBwa2dkaXIgPSBvcy5wYXRoLmRpcm5hbWUocGtnLl9fZmlsZV9fKQorCisgICAgbW9kdWxlcyA9IFtdCisgICAgZm9yIF8sIG1vZHVsZW5hbWUsIF8gaW4gcGtndXRpbC5pdGVyX21vZHVsZXMoW3BrZ2Rpcl0pOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwa2dkaXIsIG1vZHVsZW5hbWUpKToKKyAgICAgICAgICAgICMgaWdub3JlIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKHBrZy5fX25hbWVfXywgZnJvbWxpc3Q9W21vZHVsZW5hbWVdKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIElmIHdlIGNhbid0IGltcG9ydCBpdCwgaXQncyBub3QgdmFsaWQKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG1vZHVsZV9pZiA9IGdldGF0dHIobW9kdWxlLCBtb2R1bGVuYW1lKQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZV9pZiwgJ2hpZGRlbl9leHRlbnNpb24nLCBGYWxzZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub3QgY2hlY2thdHRyIG9yIGhhc2F0dHIobW9kdWxlX2lmLCBjaGVja2F0dHIpOgorICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQobW9kdWxlbmFtZSkKKyAgICByZXR1cm4gbW9kdWxlcworCitkZWYgaW1wb3J0X2V4dGVuc2lvbl9tb2R1bGUocGtnLCBtb2R1bGVuYW1lLCBjaGVja2F0dHIpOgorICAgIHRyeToKKyAgICAgICAgIyBEeW5hbWljYWxseSBsb2FkIHRoZSBVSSBiYXNlZCBvbiB0aGUgdWkgbmFtZS4gQWx0aG91Z2ggd2UKKyAgICAgICAgIyBzdWdnZXN0IGEgZml4ZWQgc2V0IHRoaXMgYWxsb3dzIHlvdSB0byBoYXZlIGZsZXhpYmlsaXR5IGluIHdoaWNoCisgICAgICAgICMgb25lcyBhcmUgYXZhaWxhYmxlLgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKHBrZy5fX25hbWVfXywgZnJvbWxpc3QgPSBbbW9kdWxlbmFtZV0pCisgICAgICAgIHJldHVybiBnZXRhdHRyKG1vZHVsZSwgbW9kdWxlbmFtZSkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbignRkFUQUw6IFVuYWJsZSB0byBpbXBvcnQgZXh0ZW5zaW9uIG1vZHVsZSAiJXMiIGZyb20gJXMuIFZhbGlkIGV4dGVuc2lvbiBtb2R1bGVzOiAlcycgJSAobW9kdWxlbmFtZSwgcGtnLl9fbmFtZV9fLCBwcmVzZW50X29wdGlvbnMobGlzdF9leHRlbnNpb25fbW9kdWxlcyhwa2csIGNoZWNrYXR0cikpKSkKKworCisjIERpc3BsYXkgYml0YmFrZS9PRSB3YXJuaW5ncyB2aWEgdGhlIEJpdEJha2UuV2FybmluZ3MgbG9nZ2VyLCBpZ25vcmluZyBvdGhlcnMiIiIKK3dhcm5sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5XYXJuaW5ncyIpCitfd2FybmluZ3Nfc2hvd3dhcm5pbmcgPSB3YXJuaW5ncy5zaG93d2FybmluZworZGVmIF9zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIF93YXJuaW5nc19zaG93d2FybmluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93YXJuaW5nc19zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZSwgbGluZSkKKyAgICBlbHNlOgorICAgICAgICBzID0gd2FybmluZ3MuZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgd2FybmxvZy53YXJuKHMpCisKK3dhcm5pbmdzLnNob3d3YXJuaW5nID0gX3Nob3d3YXJuaW5nCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIikKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJkZWZhdWx0IiwgbW9kdWxlPSIoPHN0cmluZz4kfChvZXxiYilcLikiKQord2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIGNhdGVnb3J5PVBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9SW1wb3J0V2FybmluZykKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsIG1vZHVsZT0iPHN0cmluZz4kIikKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBtZXNzYWdlPSJXaXRoLXN0YXRlbWVudHMgbm93IGRpcmVjdGx5IHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyIpCisKK2NsYXNzIEJpdEJha2VDb25maWdQYXJhbWV0ZXJzKGNvb2tlcmRhdGEuQ29uZmlnUGFyYW1ldGVycyk6CisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICAgICAgZm9ybWF0dGVyID0gQml0YmFrZUhlbHBGb3JtYXR0ZXIoKSwKKyAgICAgICAgICAgIHZlcnNpb24gPSAiQml0QmFrZSBCdWlsZCBUb29sIENvcmUgdmVyc2lvbiAlcyIgJSBiYi5fX3ZlcnNpb25fXywKKyAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgW29wdGlvbnNdIFtyZWNpcGVuYW1lL3RhcmdldCByZWNpcGU6ZG9fdGFzayAuLi5dCisKKyAgICBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykgZm9yIGEgZ2l2ZW4gc2V0IG9mIHRhcmdldCByZWNpcGVzICguYmIgZmlsZXMpLgorICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICB3aWxsIHByb3ZpZGUgdGhlIGxheWVyLCBCQkZJTEVTIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIiIikKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWIiLCAiLS1idWlsZGZpbGUiLCBoZWxwID0gIkV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuIFdBUk5JTkc6IERvZXMgbm90IGhhbmRsZSBhbnkgZGVwZW5kZW5jaWVzIGZyb20gb3RoZXIgcmVjaXBlcy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiYnVpbGRmaWxlIiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1rIiwgIi0tY29udGludWUiLCBoZWxwID0gIkNvbnRpbnVlIGFzIG11Y2ggYXMgcG9zc2libGUgYWZ0ZXIgYW4gZXJyb3IuIFdoaWxlIHRoZSB0YXJnZXQgdGhhdCBmYWlsZWQgYW5kIGFueXRoaW5nIGRlcGVuZGluZyBvbiBpdCBjYW5ub3QgYmUgYnVpbHQsIGFzIG11Y2ggYXMgcG9zc2libGUgd2lsbCBiZSBidWlsdCBiZWZvcmUgc3RvcHBpbmcuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfZmFsc2UiLCBkZXN0ID0gImFib3J0IiwgZGVmYXVsdCA9IFRydWUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tdHJ5YWx0Y29uZmlncyIsIGhlbHAgPSAiQ29udGludWUgd2l0aCBidWlsZHMgYnkgdHJ5aW5nIHRvIHVzZSBhbHRlcm5hdGl2ZSBwcm92aWRlcnMgd2hlcmUgcG9zc2libGUuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidHJ5YWx0Y29uZmlncyIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb3JjZSIsIGhlbHAgPSAiRm9yY2UgdGhlIHNwZWNpZmllZCB0YXJnZXRzL3Rhc2sgdG8gcnVuIChpbnZhbGlkYXRpbmcgYW55IGV4aXN0aW5nIHN0YW1wIGZpbGUpLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImZvcmNlIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNtZCIsIGhlbHAgPSAiU3BlY2lmeSB0aGUgdGFzayB0byBleGVjdXRlLiBUaGUgZXhhY3Qgb3B0aW9ucyBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodCBiZSAnY29tcGlsZScgb3IgJ3BvcHVsYXRlX3N5c3Jvb3QnIG9yICdsaXN0dGFza3MnIG1heSBnaXZlIGEgbGlzdCBvZiB0aGUgdGFza3MgYXZhaWxhYmxlLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJjbWQiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItQyIsICItLWNsZWFyLXN0YW1wIiwgaGVscCA9ICJJbnZhbGlkYXRlIHRoZSBzdGFtcCBmb3IgdGhlIHNwZWNpZmllZCB0YXNrIHN1Y2ggYXMgJ2NvbXBpbGUnIGFuZCB0aGVuIHJ1biB0aGUgZGVmYXVsdCB0YXNrIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldChzKS4iLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImludmFsaWRhdGVfc3RhbXAiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItciIsICItLXJlYWQiLCBoZWxwID0gIlJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJwcmVmaWxlIiwgZGVmYXVsdCA9IFtdKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUiIsICItLXBvc3RyZWFkIiwgaGVscCA9ICJSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAicG9zdGZpbGUiLCBkZWZhdWx0ID0gW10pCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGhlbHAgPSAiT3V0cHV0IG1vcmUgbG9nIG1lc3NhZ2UgZGF0YSB0byB0aGUgdGVybWluYWwuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAidmVyYm9zZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUQiLCAiLS1kZWJ1ZyIsIGhlbHAgPSAiSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsLiBZb3UgY2FuIHNwZWNpZnkgdGhpcyBtb3JlIHRoYW4gb25jZS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJjb3VudCIsIGRlc3Q9ImRlYnVnIiwgZGVmYXVsdCA9IDApCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tZHJ5LXJ1biIsIGhlbHAgPSAiRG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImRyeV9ydW4iLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1TIiwgIi0tZHVtcC1zaWduYXR1cmVzIiwgaGVscCA9ICJEdW1wIG91dCB0aGUgc2lnbmF0dXJlIGNvbnN0cnVjdGlvbiBpbmZvcm1hdGlvbiwgd2l0aCBubyB0YXNrIGV4ZWN1dGlvbi4gVGhlIFNJR05BVFVSRV9IQU5ETEVSIHBhcmFtZXRlciBpcyBwYXNzZWQgdG8gdGhlIGhhbmRsZXIuIFR3byBjb21tb24gdmFsdWVzIGFyZSBub25lIGFuZCBwcmludGRpZmYgYnV0IHRoZSBoYW5kbGVyIG1heSBkZWZpbmUgbW9yZS9sZXNzLiBub25lIG1lYW5zIG9ubHkgZHVtcCB0aGUgc2lnbmF0dXJlLCBwcmludGRpZmYgbWVhbnMgY29tcGFyZSB0aGUgZHVtcGVkIHNpZ25hdHVyZSB3aXRoIHRoZSBjYWNoZWQgb25lLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gImFwcGVuZCIsIGRlc3QgPSAiZHVtcF9zaWduYXR1cmVzIiwgZGVmYXVsdCA9IFtdLCBtZXRhdmFyPSJTSUdOQVRVUkVfSEFORExFUiIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcGFyc2Utb25seSIsIGhlbHAgPSAiUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInBhcnNlX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2hvdy12ZXJzaW9ucyIsIGhlbHAgPSAiU2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHJlY2lwZXMuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic2hvd192ZXJzaW9ucyIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWUiLCAiLS1lbnZpcm9ubWVudCIsIGhlbHAgPSAiU2hvdyB0aGUgZ2xvYmFsIG9yIHBlci1yZWNpcGUgZW52aXJvbm1lbnQgY29tcGxldGUgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB2YXJpYWJsZXMgd2VyZSBzZXQvY2hhbmdlZC4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJzaG93X2Vudmlyb25tZW50IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdyYXBodml6IiwgaGVscCA9ICJTYXZlIGRlcGVuZGVuY3kgdHJlZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXRzIGluIHRoZSBkb3Qgc3ludGF4LiIsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJkb3RfZ3JhcGgiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1JIiwgIi0taWdub3JlLWRlcHMiLCBoZWxwID0gIiIiQXNzdW1lIHRoZXNlIGRlcGVuZGVuY2llcyBkb24ndCBleGlzdCBhbmQgYXJlIGFscmVhZHkgcHJvdmlkZWQgKGVxdWl2YWxlbnQgdG8gQVNTVU1FX1BST1ZJREVEKS4gVXNlZnVsIHRvIG1ha2UgZGVwZW5kZW5jeSBncmFwaHMgbW9yZSBhcHBlYWxpbmciIiIsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJhcHBlbmQiLCBkZXN0ID0gImV4dHJhX2Fzc3VtZV9wcm92aWRlZCIsIGRlZmF1bHQgPSBbXSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb2ctZG9tYWlucyIsIGhlbHAgPSAiIiJTaG93IGRlYnVnIGxvZ2dpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbG9nZ2luZyBkb21haW5zIiIiLAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAiYXBwZW5kIiwgZGVzdCA9ICJkZWJ1Z19kb21haW5zIiwgZGVmYXVsdCA9IFtdKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItUCIsICItLXByb2ZpbGUiLCBoZWxwID0gIlByb2ZpbGUgdGhlIGNvbW1hbmQgYW5kIHNhdmUgcmVwb3J0cy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJwcm9maWxlIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgICAgIGVudl91aSA9IG9zLmVudmlyb24uZ2V0KCdCSVRCQUtFX1VJJywgTm9uZSkKKyAgICAgICAgZGVmYXVsdF91aSA9IGVudl91aSBvciAna25vdHR5JworICAgICAgICAjIEBDSE9JQ0VTQCBpcyBzdWJzdGl0dXRlZCBvdXQgYnkgQml0YmFrZUhlbHBGb3JtYXR0ZXIgYWJvdmUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi11IiwgIi0tdWkiLCBoZWxwID0gIlRoZSB1c2VyIGludGVyZmFjZSB0byB1c2UgKEBDSE9JQ0VTQCAtIGRlZmF1bHQgJWRlZmF1bHQpLiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9InVpIiwgZGVmYXVsdD1kZWZhdWx0X3VpKQorCisgICAgICAgICMgQENIT0lDRVNAIGlzIHN1YnN0aXR1dGVkIG91dCBieSBCaXRiYWtlSGVscEZvcm1hdHRlciBhYm92ZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS1zZXJ2ZXJ0eXBlIiwgaGVscCA9ICJDaG9vc2Ugd2hpY2ggc2VydmVyIHR5cGUgdG8gdXNlIChAQ0hPSUNFU0AgLSBkZWZhdWx0ICVkZWZhdWx0KS4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAic2VydmVydHlwZSIsIGRlZmF1bHQgPSAicHJvY2VzcyIpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXRva2VuIiwgaGVscCA9ICJTcGVjaWZ5IHRoZSBjb25uZWN0aW9uIHRva2VuIHRvIGJlIHVzZWQgd2hlbiBjb25uZWN0aW5nIHRvIGEgcmVtb3RlIHNlcnZlci4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAieG1scnBjdG9rZW4iKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1yZXZpc2lvbnMtY2hhbmdlZCIsIGhlbHAgPSAiU2V0IHRoZSBleGl0IGNvZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0gZmxvYXRpbmcgcmV2aXNpb25zIGhhdmUgY2hhbmdlZCBvciBub3QuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAicmV2aXNpb25zX2NoYW5nZWQiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXNlcnZlci1vbmx5IiwgaGVscCA9ICJSdW4gYml0YmFrZSB3aXRob3V0IGEgVUksIG9ubHkgc3RhcnRpbmcgYSBzZXJ2ZXIgKGNvb2tlcikgcHJvY2Vzcy4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJzZXJ2ZXJfb25seSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLUIiLCAiLS1iaW5kIiwgaGVscCA9ICJUaGUgbmFtZS9hZGRyZXNzIGZvciB0aGUgYml0YmFrZSBzZXJ2ZXIgdG8gYmluZCB0by4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiYmluZCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbm8tc2V0c2NlbmUiLCBoZWxwID0gIkRvIG5vdCBydW4gYW55IHNldHNjZW5lIHRhc2tzLiBzc3RhdGUgd2lsbCBiZSBpZ25vcmVkIGFuZCBldmVyeXRoaW5nIG5lZWRlZCwgYnVpbHQuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAibm9zZXRzY2VuZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tcmVtb3RlLXNlcnZlciIsIGhlbHAgPSAiQ29ubmVjdCB0byB0aGUgc3BlY2lmaWVkIHNlcnZlci4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAicmVtb3RlX3NlcnZlciIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLW0iLCAiLS1raWxsLXNlcnZlciIsIGhlbHAgPSAiVGVybWluYXRlIHRoZSByZW1vdGUgc2VydmVyLiIsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJraWxsX3NlcnZlciIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tb2JzZXJ2ZS1vbmx5IiwgaGVscCA9ICJDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4iLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJvYnNlcnZlX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIiIsICItLXN0YXR1cy1vbmx5IiwgaGVscCA9ICJDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSByZW1vdGUgYml0YmFrZSBzZXJ2ZXIuIiwKKyAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAic3RhdHVzX29ubHkiLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi13IiwgIi0td3JpdGUtbG9nIiwgaGVscCA9ICJXcml0ZXMgdGhlIGV2ZW50IGxvZyBvZiB0aGUgYnVpbGQgdG8gYSBiaXRiYWtlIGV2ZW50IGpzb24gZmlsZS4gVXNlICcnIChlbXB0eSBzdHJpbmcpIHRvIGFzc2lnbiB0aGUgbmFtZSBhdXRvbWF0aWNhbGx5LiIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJ3cml0ZWV2ZW50bG9nIikKKworICAgICAgICBvcHRpb25zLCB0YXJnZXRzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworICAgICAgICAjIHNvbWUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgc2V0IGFsc28gY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgIGlmICJCQlNFUlZFUiIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIG9wdGlvbnMuc2VydmVydHlwZSA9ICJ4bWxycGMiCisgICAgICAgICAgICBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgPSBvcy5lbnZpcm9uWyJCQlNFUlZFUiJdCisKKyAgICAgICAgaWYgIkJCVE9LRU4iIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBvcHRpb25zLnhtbHJwY3Rva2VuID0gb3MuZW52aXJvblsiQkJUT0tFTiJdCisKKyAgICAgICAgaWYgIkJCRVZFTlRMT0ciIGlzIG9zLmVudmlyb246CisgICAgICAgICAgICBvcHRpb25zLndyaXRlZXZlbnRsb2cgPSBvcy5lbnZpcm9uWyJCQkVWRU5UTE9HIl0KKworICAgICAgICAjIGZpbGwgaW4gcHJvcGVyIGxvZyBuYW1lIGlmIG5vdCBzdXBwbGllZAorICAgICAgICBpZiBvcHRpb25zLndyaXRlZXZlbnRsb2cgaXMgbm90IE5vbmUgYW5kIGxlbihvcHRpb25zLndyaXRlZXZlbnRsb2cpID09IDA6CisgICAgICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKKyAgICAgICAgICAgIG9wdGlvbnMud3JpdGVldmVudGxvZyA9ICJiaXRiYWtlX2V2ZW50bG9nXyVzLmpzb24iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoIiVZJW0lZCVIJU0lUyIpCisKKyAgICAgICAgIyBpZiBCQlNFUlZFUiBzYXlzIHRvIGF1dG9kZXRlY3QsIGxldCdzIGRvIHRoYXQKKyAgICAgICAgaWYgb3B0aW9ucy5yZW1vdGVfc2VydmVyOgorICAgICAgICAgICAgW2hvc3QsIHBvcnRdID0gb3B0aW9ucy5yZW1vdGVfc2VydmVyLnNwbGl0KCI6IiwgMikKKyAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgICAgICMgdXNlIGF1dG9tYXRpYyBwb3J0IGlmIHBvcnQgc2V0IHRvIC0xLCBtZWFucyByZWFkIGl0IGZyb20KKyAgICAgICAgICAgICMgdGhlIGJpdGJha2UubG9jayBmaWxlOyB0aGlzIGlzIGEgYml0IHRyaWNreSwgYnV0IHdlIGFsd2F5cyBleHBlY3QKKyAgICAgICAgICAgICMgdG8gYmUgaW4gdGhlIGJhc2Ugb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeSBpZiB3ZSBuZWVkIHRvIGhhdmUgYQorICAgICAgICAgICAgIyBjaGFuY2UgdG8gc3RhcnQgdGhlIHNlcnZlciBsYXRlciwgYW55d2F5CisgICAgICAgICAgICBpZiBwb3J0ID09IC0xOgorICAgICAgICAgICAgICAgIGxvY2tfbG9jYXRpb24gPSAiLi9iaXRiYWtlLmxvY2siCisgICAgICAgICAgICAgICAgIyB3ZSB0cnkgdG8gcmVhZCB0aGUgYWRkcmVzcyBhdCBhbGwgdGltZXM7IGlmIHRoZSBzZXJ2ZXIgaXMgbm90IHN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgIyB3ZSdsbCB0cnkgdG8gc3RhcnQgaXQgYWZ0ZXIgdGhlIGZpcnN0IGNvbm5lY3QgZmFpbHMsIGJlbG93CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsZiA9IG9wZW4obG9ja19sb2NhdGlvbiwgJ3InKQorICAgICAgICAgICAgICAgICAgICByZW1vdGVkZWYgPSBsZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIFtob3N0LCBwb3J0XSA9IHJlbW90ZWRlZi5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgICAgICAgICAgICAgbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlbW90ZV9zZXJ2ZXIgPSByZW1vdGVkZWYKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgYml0YmFrZS5sb2NrICglcyksIGludmFsaWQgcG9ydCIgJSBzdHIoZSkpCisKKyAgICAgICAgcmV0dXJuIG9wdGlvbnMsIHRhcmdldHNbMTpdCisKKworZGVmIHN0YXJ0X3NlcnZlcihzZXJ2ZXJtb2R1bGUsIGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbiwgZmVhdHVyZXMpOgorICAgIHNlcnZlciA9IHNlcnZlcm1vZHVsZS5CaXRCYWtlU2VydmVyKCkKKyAgICBpZiBjb25maWdQYXJhbXMuYmluZDoKKyAgICAgICAgKGhvc3QsIHBvcnQpID0gY29uZmlnUGFyYW1zLmJpbmQuc3BsaXQoJzonKQorICAgICAgICBzZXJ2ZXIuaW5pdFNlcnZlcigoaG9zdCwgaW50KHBvcnQpKSkKKyAgICAgICAgY29uZmlndXJhdGlvbi5pbnRlcmZhY2UgPSBbIHNlcnZlci5zZXJ2ZXJJbXBsLmhvc3QsIHNlcnZlci5zZXJ2ZXJJbXBsLnBvcnQgXQorICAgIGVsc2U6CisgICAgICAgIHNlcnZlci5pbml0U2VydmVyKCkKKyAgICAgICAgY29uZmlndXJhdGlvbi5pbnRlcmZhY2UgPSBbXQorCisgICAgdHJ5OgorICAgICAgICBjb25maWd1cmF0aW9uLnNldFNlcnZlclJlZ0lkbGVDYWxsYmFjayhzZXJ2ZXIuZ2V0U2VydmVySWRsZUNCKCkpCisKKyAgICAgICAgY29va2VyID0gYmIuY29va2VyLkJCQ29va2VyKGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzKQorCisgICAgICAgIHNlcnZlci5hZGRjb29rZXIoY29va2VyKQorICAgICAgICBzZXJ2ZXIuc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgd2hpbGUgaGFzYXR0cihzZXJ2ZXIsICJldmVudF9xdWV1ZSIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBxdWV1ZQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGltcG9ydCBRdWV1ZSBhcyBxdWV1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gc2VydmVyLmV2ZW50X3F1ZXVlLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCAocXVldWUuRW1wdHksIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShldmVudCkKKyAgICAgICAgcmFpc2UgZXhjX2luZm9bMV0sIE5vbmUsIGV4Y19pbmZvWzJdCisgICAgc2VydmVyLmRldGFjaCgpCisgICAgY29va2VyLmxvY2suY2xvc2UoKQorICAgIHJldHVybiBzZXJ2ZXIKKworCitkZWYgYml0YmFrZV9tYWluKGNvbmZpZ1BhcmFtcywgY29uZmlndXJhdGlvbik6CisKKyAgICAjIFB5dGhvbiBtdWx0aXByb2Nlc3NpbmcgcmVxdWlyZXMgL2Rldi9zaG0gb24gTGludXgKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSBhbmQgbm90IG9zLmFjY2VzcygnL2Rldi9zaG0nLCBvcy5XX09LIHwgb3MuWF9PSyk6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IC9kZXYvc2htIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCB3cml0YWJsZSIpCisKKyAgICAjIFVuYnVmZmVyIHN0ZG91dCB0byBhdm9pZCBsb2cgdHJ1bmNhdGlvbiBpbiB0aGUgZXZlbnQKKyAgICAjIG9mIGFuIHVub3JkZXJseSBleGl0IGFzIHdlbGwgYXMgdG8gcHJvdmlkZSB0aW1lbHkKKyAgICAjIHVwZGF0ZXMgdG8gbG9nIGZpbGVzIGZvciB1c2Ugd2l0aCB0YWlsCisgICAgdHJ5OgorICAgICAgICBpZiBzeXMuc3Rkb3V0Lm5hbWUgPT0gJzxzdGRvdXQ+JzoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisKKyAgICBjb25maWd1cmF0aW9uLnNldENvbmZpZ1BhcmFtZXRlcnMoY29uZmlnUGFyYW1zKQorCisgICAgdWlfbW9kdWxlID0gaW1wb3J0X2V4dGVuc2lvbl9tb2R1bGUoYmIudWksIGNvbmZpZ1BhcmFtcy51aSwgJ21haW4nKQorICAgIHNlcnZlcm1vZHVsZSA9IGltcG9ydF9leHRlbnNpb25fbW9kdWxlKGJiLnNlcnZlciwgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUsICdCaXRCYWtlU2VydmVyJykKKworICAgIGlmIGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seToKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CisgICAgICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiBJZiAnLS1zZXJ2ZXItb25seScgaXMgZGVmaW5lZCwgd2UgbXVzdCBzZXQgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVydHlwZSBhcyAneG1scnBjJy5cbiIpCisgICAgICAgIGlmIG5vdCBjb25maWdQYXJhbXMuYmluZDoKKyAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IFRoZSAnLS1zZXJ2ZXItb25seScgb3B0aW9uIHJlcXVpcmVzIGEgbmFtZS9hZGRyZXNzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gYmluZCB0byB3aXRoIHRoZSAtQiBvcHRpb24uXG4iKQorICAgICAgICBpZiBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IFRoZSAnLS1zZXJ2ZXItb25seScgb3B0aW9uIGNvbmZsaWN0cyB3aXRoICVzLlxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0aGUgQkJTRVJWRVIgZW52aXJvbm1lbnQgdmFyaWFibGUiIGlmICJCQlNFUlZFUiIgaW4gb3MuZW52aXJvbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgInRoZSAnLS1yZW1vdGUtc2VydmVyJyBvcHRpb24iICkpCisKKyAgICBpZiBjb25maWdQYXJhbXMuYmluZCBhbmQgY29uZmlnUGFyYW1zLnNlcnZlcnR5cGUgIT0gInhtbHJwYyI6CisgICAgICAgIHJhaXNlIEJCTWFpbkV4Y2VwdGlvbigiRkFUQUw6IElmICctQicgb3IgJy0tYmluZCcgaXMgZGVmaW5lZCwgd2UgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRoZSBzZXJ2ZXJ0eXBlIGFzICd4bWxycGMnLlxuIikKKworICAgIGlmIGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyIGFuZCBjb25maWdQYXJhbXMuc2VydmVydHlwZSAhPSAieG1scnBjIjoKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogSWYgJy0tcmVtb3RlLXNlcnZlcicgaXMgZGVmaW5lZCwgd2UgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRoZSBzZXJ2ZXJ0eXBlIGFzICd4bWxycGMnLlxuIikKKworICAgIGlmIGNvbmZpZ1BhcmFtcy5vYnNlcnZlX29ubHkgYW5kIChub3QgY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIgb3IgY29uZmlnUGFyYW1zLmJpbmQpOgorICAgICAgICByYWlzZSBCQk1haW5FeGNlcHRpb24oIkZBVEFMOiAnLS1vYnNlcnZlLW9ubHknIGNhbiBvbmx5IGJlIHVzZWQgYnkgVUkgY2xpZW50cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdGluZyB0byBhIHNlcnZlci5cbiIpCisKKyAgICBpZiBjb25maWdQYXJhbXMua2lsbF9zZXJ2ZXIgYW5kIG5vdCBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgcmFpc2UgQkJNYWluRXhjZXB0aW9uKCJGQVRBTDogJy0ta2lsbC1zZXJ2ZXInIGNhbiBvbmx5IGJlIHVzZWQgdG8gdGVybWluYXRlIGEgcmVtb3RlIHNlcnZlciIpCisKKyAgICBpZiAiQkJERUJVRyIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgbGV2ZWwgPSBpbnQob3MuZW52aXJvblsiQkJERUJVRyJdKQorICAgICAgICBpZiBsZXZlbCA+IGNvbmZpZ3VyYXRpb24uZGVidWc6CisgICAgICAgICAgICBjb25maWd1cmF0aW9uLmRlYnVnID0gbGV2ZWwKKworICAgIGJiLm1zZy5pbml0X21zZ2NvbmZpZyhjb25maWdQYXJhbXMudmVyYm9zZSwgY29uZmlndXJhdGlvbi5kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmRlYnVnX2RvbWFpbnMpCisKKyAgICAjIEVuc3VyZSBsb2dnaW5nIG1lc3NhZ2VzIGdldCBzZW50IHRvIHRoZSBVSSBhcyBldmVudHMKKyAgICBoYW5kbGVyID0gYmIuZXZlbnQuTG9nSGFuZGxlcigpCisgICAgaWYgbm90IGNvbmZpZ1BhcmFtcy5zdGF0dXNfb25seToKKyAgICAgICAgIyBJbiBzdGF0dXMgb25seSBtb2RlIHRoZXJlIGFyZSBubyBsb2dzIGFuZCBubyBVSQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorCisgICAgIyBDbGVhciBhd2F5IGFueSBzcHVyaW91cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpbGUgd2Ugc3Rva2UgdXAgdGhlIGNvb2tlcgorICAgIGNsZWFuZWR2YXJzID0gYmIudXRpbHMuY2xlYW5fZW52aXJvbm1lbnQoKQorCisgICAgZmVhdHVyZXNldCA9IFtdCisgICAgaWYgbm90IGNvbmZpZ1BhcmFtcy5zZXJ2ZXJfb25seToKKyAgICAgICAgIyBDb2xsZWN0IHRoZSBmZWF0dXJlIHNldCBmb3IgdGhlIFVJCisgICAgICAgIGZlYXR1cmVzZXQgPSBnZXRhdHRyKHVpX21vZHVsZSwgImZlYXR1cmVTZXQiLCBbXSkKKworICAgIGlmIG5vdCBjb25maWdQYXJhbXMucmVtb3RlX3NlcnZlcjoKKyAgICAgICAgIyB3ZSBzdGFydCBhIHNlcnZlciB3aXRoIGEgZ2l2ZW4gY29uZmlndXJhdGlvbgorICAgICAgICBzZXJ2ZXIgPSBzdGFydF9zZXJ2ZXIoc2VydmVybW9kdWxlLCBjb25maWdQYXJhbXMsIGNvbmZpZ3VyYXRpb24sIGZlYXR1cmVzZXQpCisgICAgICAgIGJiLmV2ZW50LnVpX3F1ZXVlID0gW10KKyAgICBlbHNlOgorICAgICAgICAjIHdlIHN0YXJ0IGEgc3R1YiBzZXJ2ZXIgdGhhdCBpcyBhY3R1YWxseSBhIFhNTFJQQ2xpZW50IHRoYXQgY29ubmVjdHMgdG8gYSByZWFsIHNlcnZlcgorICAgICAgICBzZXJ2ZXIgPSBzZXJ2ZXJtb2R1bGUuQml0QmFrZVhNTFJQQ0NsaWVudChjb25maWdQYXJhbXMub2JzZXJ2ZV9vbmx5LCBjb25maWdQYXJhbXMueG1scnBjdG9rZW4pCisgICAgICAgIHNlcnZlci5zYXZlQ29ubmVjdGlvbkRldGFpbHMoY29uZmlnUGFyYW1zLnJlbW90ZV9zZXJ2ZXIpCisKKworICAgIGlmIG5vdCBjb25maWdQYXJhbXMuc2VydmVyX29ubHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcnZlcl9jb25uZWN0aW9uID0gc2VydmVyLmVzdGFibGlzaENvbm5lY3Rpb24oZmVhdHVyZXNldCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciAlczogJXMiICUgKGNvbmZpZ1BhcmFtcy5yZW1vdGVfc2VydmVyLCBzdHIoZSkpKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUgZW52aXJvbm1lbnQgaW4gY2FzZSB0aGUgVUkgbmVlZHMgaXQKKyAgICAgICAgZm9yIGsgaW4gY2xlYW5lZHZhcnM6CisgICAgICAgICAgICBvcy5lbnZpcm9uW2tdID0gY2xlYW5lZHZhcnNba10KKworICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQorCisKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLnN0YXR1c19vbmx5OgorICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24udGVybWluYXRlKCkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgY29uZmlnUGFyYW1zLmtpbGxfc2VydmVyOgorICAgICAgICAgICAgc2VydmVyX2Nvbm5lY3Rpb24uY29ubmVjdGlvbi50ZXJtaW5hdGVTZXJ2ZXIoKQorICAgICAgICAgICAgYmIuZXZlbnQudWlfcXVldWUgPSBbXQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gdWlfbW9kdWxlLm1haW4oc2VydmVyX2Nvbm5lY3Rpb24uY29ubmVjdGlvbiwgc2VydmVyX2Nvbm5lY3Rpb24uZXZlbnRzLCBjb25maWdQYXJhbXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBiYi5ldmVudC51aV9xdWV1ZSA9IFtdCisgICAgICAgICAgICBzZXJ2ZXJfY29ubmVjdGlvbi50ZXJtaW5hdGUoKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJCaXRiYWtlIHNlcnZlciBhZGRyZXNzOiAlcywgc2VydmVyIHBvcnQ6ICVzIiAlIChzZXJ2ZXIuc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXIuc2VydmVySW1wbC5wb3J0KSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIHJldHVybiAxCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9tZXRob2Rwb29sLnB5IGIvYml0YmFrZS9saWIvYmIvbWV0aG9kcG9vbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjJlOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvbWV0aG9kcG9vbC5weQpAQCAtMCwwICsxLDI5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIworIyBDb3B5cmlnaHQgKEMpICAgICAgIDIwMDYgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gYmIudXRpbHMgaW1wb3J0IGJldHRlcl9jb21waWxlLCBiZXR0ZXJfZXhlYworCitkZWYgaW5zZXJ0X21ldGhvZChtb2R1bGVuYW1lLCBjb2RlLCBmbik6CisgICAgIiIiCisgICAgQWRkIGNvZGUgb2YgYSBtb2R1bGUgc2hvdWxkIGJlIGFkZGVkLiBUaGUgbWV0aG9kcworICAgIHdpbGwgYmUgc2ltcGx5IGFkZGVkLCBubyBjaGVja2luZyB3aWxsIGJlIGRvbmUKKyAgICAiIiIKKyAgICBjb21wID0gYmV0dGVyX2NvbXBpbGUoY29kZSwgbW9kdWxlbmFtZSwgZm4gKQorICAgIGJldHRlcl9leGVjKGNvbXAsIE5vbmUsIGNvZGUsIGZuKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weSBiL2JpdGJha2UvbGliL2JiL21vbml0b3JkaXNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjUyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9tb25pdG9yZGlzay5weQpAQCAtMCwwICsxLDI2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUm9iZXJ0IFlhbmcKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBvcywgbG9nZ2luZywgcmUsIHN5cworaW1wb3J0IGJiCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5Nb25pdG9yIikKKworZGVmIHByaW50RXJyKGluZm8pOgorICAgIGxvZ2dlci5lcnJvcigiJXNcbiAgICAgICBEaXNrIHNwYWNlIG1vbml0b3Igd2lsbCBOT1QgYmUgZW5hYmxlZCIgJSBpbmZvKQorCitkZWYgY29udmVydEdNSyh1bml0KToKKworICAgICIiIiBDb252ZXJ0IHRoZSBzcGFjZSB1bml0IEcsIE0sIEssIHRoZSB1bml0IGlzIGNhc2UtaW5zZW5zaXRpdmUgIiIiCisKKyAgICB1bml0RyA9IHJlLm1hdGNoKCcoWzEtOV1bMC05XSopW2dHXVxzPyQnLCB1bml0KQorICAgIGlmIHVuaXRHOgorICAgICAgICByZXR1cm4gaW50KHVuaXRHLmdyb3VwKDEpKSAqICgxMDI0ICoqIDMpCisgICAgdW5pdE0gPSByZS5tYXRjaCgnKFsxLTldWzAtOV0qKVttTV1ccz8kJywgdW5pdCkKKyAgICBpZiB1bml0TToKKyAgICAgICAgcmV0dXJuIGludCh1bml0TS5ncm91cCgxKSkgKiAoMTAyNCAqKiAyKQorICAgIHVuaXRLID0gcmUubWF0Y2goJyhbMS05XVswLTldKilba0tdXHM/JCcsIHVuaXQpCisgICAgaWYgdW5pdEs6CisgICAgICAgIHJldHVybiBpbnQodW5pdEsuZ3JvdXAoMSkpICogMTAyNAorICAgIHVuaXROID0gcmUubWF0Y2goJyhbMS05XVswLTldKilccz8kJywgdW5pdCkKKyAgICBpZiB1bml0TjoKKyAgICAgICAgcmV0dXJuIGludCh1bml0Ti5ncm91cCgxKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZ2V0TW91bnRlZERldihwYXRoKToKKworICAgICIiIiBHZXQgdGhlIGRldmljZSBtb3VudGVkIGF0IHRoZSBwYXRoLCB1c2VzIC9wcm9jL21vdW50cyAiIiIKKworICAgICMgR2V0IHRoZSBtb3VudCBwb2ludCBvZiB0aGUgZmlsZXN5c3RlbSBjb250YWluaW5nIHBhdGgKKyAgICAjIHN0X2RldiBpcyB0aGUgSUQgb2YgZGV2aWNlIGNvbnRhaW5pbmcgZmlsZQorICAgIHBhcmVudERldiA9IG9zLnN0YXQocGF0aCkuc3RfZGV2CisgICAgY3VycmVudERldiA9IHBhcmVudERldgorICAgICMgV2hlbiB0aGUgY3VycmVudCBkaXJlY3RvcnkncyBkZXZpY2UgaXMgZGlmZmVyZW50IGZyb20gdGhlCisgICAgIyBwYXJlbnQncywgdGhlbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYSBtb3VudCBwb2ludAorICAgIHdoaWxlIHBhcmVudERldiA9PSBjdXJyZW50RGV2OgorICAgICAgICBtb3VudFBvaW50ID0gcGF0aAorICAgICAgICAjIFVzZSBkaXJuYW1lIHRvIGdldCB0aGUgcGFyZW50J3MgZGlyZWN0b3J5CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKyAgICAgICAgIyBSZWFjaCB0aGUgIi8iCisgICAgICAgIGlmIHBhdGggPT0gbW91bnRQb2ludDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHBhcmVudERldj0gb3Muc3RhdChwYXRoKS5zdF9kZXYKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIvcHJvYy9tb3VudHMiLCAiciIpIGFzIGlmcDoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGlmcDoKKyAgICAgICAgICAgICAgICBwcm9jTGluZXMgPSBsaW5lLnJzdHJpcCgnXG4nKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgcHJvY0xpbmVzWzFdID09IG1vdW50UG9pbnQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jTGluZXNbMF0KKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHJldHVybiBOb25lCisKK2RlZiBnZXREaXNrRGF0YShCQkRpcnMsIGNvbmZpZ3VyYXRpb24pOgorCisgICAgIiIiUHJlcGFyZSBkaXNrIGRhdGEgZm9yIGRpc2sgc3BhY2UgbW9uaXRvciIiIgorCisgICAgIyBTYXZlIHRoZSBkZXZpY2UgSURzLCBuZWVkIHRoZSBJRCB0byBiZSB1bmlxdWUgKHRoZSBkaWN0aW9uYXJ5J3Mga2V5IGlzCisgICAgIyB1bmlxdWUpLCBzbyB0aGF0IHdoZW4gbW9yZSB0aGFuIG9uZSBkaXJlY3RvcnkgaXMgbG9jYXRlZCBvbiB0aGUgc2FtZQorICAgICMgZGV2aWNlLCB3ZSBqdXN0IG1vbml0b3IgaXQgb25jZQorICAgIGRldkRpY3QgPSB7fQorICAgIGZvciBwYXRoU3BhY2VJbm9kZSBpbiBCQkRpcnMuc3BsaXQoKToKKyAgICAgICAgIyBUaGUgaW5wdXQgZm9ybWF0IGlzOiAiZGlyLHNwYWNlLGlub2RlIiwgZGlyIGlzIGEgbXVzdCwgc3BhY2UKKyAgICAgICAgIyBhbmQgaW5vZGUgYXJlIG9wdGlvbmFsCisgICAgICAgIHBhdGhTcGFjZUlub2RlUmUgPSByZS5tYXRjaCgnKFteLF0qKSwoW14sXSopLChbXixdKiksPyguKiknLCBwYXRoU3BhY2VJbm9kZSkKKyAgICAgICAgaWYgbm90IHBhdGhTcGFjZUlub2RlUmU6CisgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCB2YWx1ZSBpbiBCQl9ESVNLTU9OX0RJUlM6ICVzIiAlIHBhdGhTcGFjZUlub2RlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBhY3Rpb24gPSBwYXRoU3BhY2VJbm9kZVJlLmdyb3VwKDEpCisgICAgICAgIGlmIGFjdGlvbiBub3QgaW4gKCJBQk9SVCIsICJTVE9QVEFTS1MiLCAiV0FSTiIpOgorICAgICAgICAgICAgcHJpbnRFcnIoIlVua25vd24gZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbjogJXMiICUgYWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoU3BhY2VJbm9kZVJlLmdyb3VwKDIpKQorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIHBhdGggdmFsdWUgaW4gQkJfRElTS01PTl9ESVJTOiAlcyIgJSBwYXRoU3BhY2VJbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBUaGUgZGlzayBzcGFjZSBvciBpbm9kZSBpcyBvcHRpb25hbCwgYnV0IGl0IHNob3VsZCBoYXZlIGEgY29ycmVjdAorICAgICAgICAjIHZhbHVlIG9uY2UgaXQgaXMgc3BlY2lmaWVkCisgICAgICAgIG1pblNwYWNlID0gcGF0aFNwYWNlSW5vZGVSZS5ncm91cCgzKQorICAgICAgICBpZiBtaW5TcGFjZToKKyAgICAgICAgICAgIG1pblNwYWNlID0gY29udmVydEdNSyhtaW5TcGFjZSkKKyAgICAgICAgICAgIGlmIG5vdCBtaW5TcGFjZToKKyAgICAgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBkaXNrIHNwYWNlIHZhbHVlIGluIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGVSZS5ncm91cCgzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb25lIG1lYW5zIHRoYXQgaXQgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgbWluU3BhY2UgPSBOb25lCisKKyAgICAgICAgbWluSW5vZGUgPSBwYXRoU3BhY2VJbm9kZVJlLmdyb3VwKDQpCisgICAgICAgIGlmIG1pbklub2RlOgorICAgICAgICAgICAgbWluSW5vZGUgPSBjb252ZXJ0R01LKG1pbklub2RlKQorICAgICAgICAgICAgaWYgbm90IG1pbklub2RlOgorICAgICAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIGlub2RlIHZhbHVlIGluIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGVSZS5ncm91cCg0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOb25lIG1lYW5zIHRoYXQgaXQgaXMgbm90IHNwZWNpZmllZAorICAgICAgICAgICAgbWluSW5vZGUgPSBOb25lCisKKyAgICAgICAgaWYgbWluU3BhY2UgaXMgTm9uZSBhbmQgbWluSW5vZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50RXJyKCJObyBkaXNrIHNwYWNlIG9yIGlub2RlIHZhbHVlIGluIGZvdW5kIEJCX0RJU0tNT05fRElSUzogJXMiICUgcGF0aFNwYWNlSW5vZGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIG1rZGlyIGZvciB0aGUgZGlyZWN0b3J5IHNpbmNlIGl0IG1heSBub3QgZXhpc3QsIGZvciBleGFtcGxlIHRoZQorICAgICAgICAjIERMX0RJUiBtYXkgbm90IGV4aXN0IGF0IHRoZSB2ZXJ5IGJlZ2lubmluZworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGF0aCkKKyAgICAgICAgZGV2ID0gZ2V0TW91bnRlZERldihwYXRoKQorICAgICAgICAjIFVzZSBwYXRoL2FjdGlvbiBhcyB0aGUga2V5CisgICAgICAgIGRldkRpY3Rbb3MucGF0aC5qb2luKHBhdGgsIGFjdGlvbildID0gW2RldiwgbWluU3BhY2UsIG1pbklub2RlXQorCisgICAgcmV0dXJuIGRldkRpY3QKKworZGVmIGdldEludGVydmFsKGNvbmZpZ3VyYXRpb24pOgorCisgICAgIiIiIEdldCB0aGUgZGlzayBzcGFjZSBpbnRlcnZhbCAiIiIKKworICAgICMgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTBNIGFuZCA1Sy4KKyAgICBzcGFjZURlZmF1bHQgPSA1MCAqIDEwMjQgKiAxMDI0CisgICAgaW5vZGVEZWZhdWx0ID0gNSAqIDEwMjQKKworICAgIGludGVydmFsID0gY29uZmlndXJhdGlvbi5nZXRWYXIoIkJCX0RJU0tNT05fV0FSTklOVEVSVkFMIiwgVHJ1ZSkKKyAgICBpZiBub3QgaW50ZXJ2YWw6CisgICAgICAgIHJldHVybiBzcGFjZURlZmF1bHQsIGlub2RlRGVmYXVsdAorICAgIGVsc2U6CisgICAgICAgICMgVGhlIGRpc2sgc3BhY2Ugb3IgaW5vZGUgaW50ZXJ2YWwgaXMgb3B0aW9uYWwsIGJ1dCBpdCBzaG91bGQKKyAgICAgICAgIyBoYXZlIGEgY29ycmVjdCB2YWx1ZSBvbmNlIGl0IGlzIHNwZWNpZmllZAorICAgICAgICBpbnRlcnZhbFJlID0gcmUubWF0Y2goJyhbXixdKiksP1xzKiguKiknLCBpbnRlcnZhbCkKKyAgICAgICAgaWYgaW50ZXJ2YWxSZToKKyAgICAgICAgICAgIGludGVydmFsU3BhY2UgPSBpbnRlcnZhbFJlLmdyb3VwKDEpCisgICAgICAgICAgICBpZiBpbnRlcnZhbFNwYWNlOgorICAgICAgICAgICAgICAgIGludGVydmFsU3BhY2UgPSBjb252ZXJ0R01LKGludGVydmFsU3BhY2UpCisgICAgICAgICAgICAgICAgaWYgbm90IGludGVydmFsU3BhY2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIGRpc2sgc3BhY2UgaW50ZXJ2YWwgdmFsdWUgaW4gQkJfRElTS01PTl9XQVJOSU5URVJWQUw6ICVzIiAlIGludGVydmFsUmUuZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGludGVydmFsU3BhY2UgPSBzcGFjZURlZmF1bHQKKyAgICAgICAgICAgIGludGVydmFsSW5vZGUgPSBpbnRlcnZhbFJlLmdyb3VwKDIpCisgICAgICAgICAgICBpZiBpbnRlcnZhbElub2RlOgorICAgICAgICAgICAgICAgIGludGVydmFsSW5vZGUgPSBjb252ZXJ0R01LKGludGVydmFsSW5vZGUpCisgICAgICAgICAgICAgICAgaWYgbm90IGludGVydmFsSW5vZGU6CisgICAgICAgICAgICAgICAgICAgIHByaW50RXJyKCJJbnZhbGlkIGRpc2sgaW5vZGUgaW50ZXJ2YWwgdmFsdWUgaW4gQkJfRElTS01PTl9XQVJOSU5URVJWQUw6ICVzIiAlIGludGVydmFsUmUuZ3JvdXAoMikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGludGVydmFsSW5vZGUgPSBpbm9kZURlZmF1bHQKKyAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbFNwYWNlLCBpbnRlcnZhbElub2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludEVycigiSW52YWxpZCBpbnRlcnZhbCB2YWx1ZSBpbiBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDogJXMiICUgaW50ZXJ2YWwpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCitjbGFzcyBkaXNrTW9uaXRvcjoKKworICAgICIiIlByZXBhcmUgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBkYXRhIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlndXJhdGlvbik6CisKKyAgICAgICAgc2VsZi5lbmFibGVNb25pdG9yID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgIEJCRGlycyA9IGNvbmZpZ3VyYXRpb24uZ2V0VmFyKCJCQl9ESVNLTU9OX0RJUlMiLCBUcnVlKSBvciBOb25lCisgICAgICAgIGlmIEJCRGlyczoKKyAgICAgICAgICAgIHNlbGYuZGV2RGljdCA9IGdldERpc2tEYXRhKEJCRGlycywgY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgIGlmIHNlbGYuZGV2RGljdDoKKyAgICAgICAgICAgICAgICBzZWxmLnNwYWNlSW50ZXJ2YWwsIHNlbGYuaW5vZGVJbnRlcnZhbCA9IGdldEludGVydmFsKGNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGFjZUludGVydmFsIGFuZCBzZWxmLmlub2RlSW50ZXJ2YWw6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlTW9uaXRvciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBhcmUgZm9yIHNhdmluZyB0aGUgcHJldmlvdXMgZGlzayBmcmVlIHNwYWNlIGFuZCBpbm9kZSwgd2UKKyAgICAgICAgICAgICAgICAgICAgIyB1c2UgdGhlbSB0byBhdm9pZCBwcmludGluZyB0b28gbWFueSB3YXJuaW5nIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZVMgPSB7fQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVJID0ge30KKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGZvciBTVE9QVEFTS1MgYW5kIEFCT1JULCB0byBhdm9pZCBwcmludGluZyB0aGUgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAjIHJlcGVhdGVkbHkgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhc2tzIHRvIGZpbmlzaAorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZWQgPSB7fQorICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiBzZWxmLmRldkRpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByZUZyZWVTW2tdID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlSVtrXSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BhY2VJbnRlcnZhbCBpcyBOb25lIGFuZCBzZWxmLmlub2RlSW50ZXJ2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlTW9uaXRvciA9IEZhbHNlCisKKyAgICBkZWYgY2hlY2soc2VsZiwgcnEpOgorCisgICAgICAgICIiIiBUYWtlIGFjdGlvbiBmb3IgdGhlIG1vbml0b3IgIiIiCisKKyAgICAgICAgaWYgc2VsZi5lbmFibGVNb25pdG9yOgorICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5kZXZEaWN0OgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoaykKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSBvcy5wYXRoLmJhc2VuYW1lKGspCisgICAgICAgICAgICAgICAgZGV2ID0gc2VsZi5kZXZEaWN0W2tdWzBdCisgICAgICAgICAgICAgICAgbWluU3BhY2UgPSBzZWxmLmRldkRpY3Rba11bMV0KKyAgICAgICAgICAgICAgICBtaW5Jbm9kZSA9IHNlbGYuZGV2RGljdFtrXVsyXQorCisgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0dmZzKHBhdGgpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBmcmVlIHNwYWNlLCBmbG9hdCBwb2ludCBudW1iZXIKKyAgICAgICAgICAgICAgICBmcmVlU3BhY2UgPSBzdC5mX2JhdmFpbCAqIHN0LmZfZnJzaXplCisKKyAgICAgICAgICAgICAgICBpZiBtaW5TcGFjZSBhbmQgZnJlZVNwYWNlIDwgbWluU3BhY2U6CisgICAgICAgICAgICAgICAgICAgICMgQWx3YXlzIHNob3cgd2FybmluZywgdGhlIHNlbGYuY2hlY2tlZCB3b3VsZCBhbHdheXMgYmUgRmFsc2UgaWYgdGhlIGFjdGlvbiBpcyBXQVJOCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucHJlRnJlZVNba10gPT0gMCBvciBzZWxmLnByZUZyZWVTW2tdIC0gZnJlZVNwYWNlID4gc2VsZi5zcGFjZUludGVydmFsIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSBmcmVlIHNwYWNlIG9mICVzICglcykgaXMgcnVubmluZyBsb3cgKCUuM2ZHQiBsZWZ0KSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLCBkZXYsIGZyZWVTcGFjZSAvIDEwMjQgLyAxMDI0IC8gMTAyNC4wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJlRnJlZVNba10gPSBmcmVlU3BhY2UKKworICAgICAgICAgICAgICAgICAgICBpZiBhY3Rpb24gPT0gIlNUT1BUQVNLUyIgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgXCJTVE9QVEFTS1NcIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkW2tdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdkaXNrJywgZnJlZVNwYWNlLCBwYXRoKSwgc2VsZi5jb25maWd1cmF0aW9uKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGFjdGlvbiA9PSAiQUJPUlQiIGFuZCBub3Qgc2VsZi5jaGVja2VkW2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJJbW1lZGlhdGVseSBhYm9ydCBzaW5jZSB0aGUgZGlzayBzcGFjZSBtb25pdG9yIGFjdGlvbiBpcyBcIkFCT1JUXCIhIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlZFtrXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJxLmZpbmlzaF9ydW5xdWV1ZShUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdkaXNrJywgZnJlZVNwYWNlLCBwYXRoKSwgc2VsZi5jb25maWd1cmF0aW9uKQorCisgICAgICAgICAgICAgICAgIyBUaGUgZnJlZSBpbm9kZXMsIGZsb2F0IHBvaW50IG51bWJlcgorICAgICAgICAgICAgICAgIGZyZWVJbm9kZSA9IHN0LmZfZmF2YWlsCisKKyAgICAgICAgICAgICAgICBpZiBtaW5Jbm9kZSBhbmQgZnJlZUlub2RlIDwgbWluSW5vZGU6CisgICAgICAgICAgICAgICAgICAgICMgU29tZSBmaWxlc3lzdGVtcyB1c2UgZHluYW1pYyBpbm9kZXMgc28gY2FuJ3QgcnVuIG91dAorICAgICAgICAgICAgICAgICAgICAjIChlLmcuIGJ0cmZzKS4gVGhpcyBpcyByZXBvcnRlZCBieSB0aGUgaW5vZGUgY291bnQgYmVpbmcgMC4KKyAgICAgICAgICAgICAgICAgICAgaWYgc3QuZl9maWxlcyA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXZEaWN0W2tdWzJdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBBbHdheXMgc2hvdyB3YXJuaW5nLCB0aGUgc2VsZi5jaGVja2VkIHdvdWxkIGFsd2F5cyBiZSBGYWxzZSBpZiB0aGUgYWN0aW9uIGlzIFdBUk4KKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmVGcmVlSVtrXSA9PSAwIG9yIHNlbGYucHJlRnJlZUlba10gLSBmcmVlSW5vZGUgPiBzZWxmLmlub2RlSW50ZXJ2YWwgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiVGhlIGZyZWUgaW5vZGUgb2YgJXMgKCVzKSBpcyBydW5uaW5nIGxvdyAoJS4zZksgbGVmdCkiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aCwgZGV2LCBmcmVlSW5vZGUgLyAxMDI0LjApKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVGcmVlSVtrXSA9IGZyZWVJbm9kZQorCisgICAgICAgICAgICAgICAgICAgIGlmIGFjdGlvbiAgPT0gIlNUT1BUQVNLUyIgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgXCJTVE9QVEFTS1NcIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkW2tdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5EaXNrRnVsbChkZXYsICdpbm9kZScsIGZyZWVJbm9kZSwgcGF0aCksIHNlbGYuY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhY3Rpb24gID09ICJBQk9SVCIgYW5kIG5vdCBzZWxmLmNoZWNrZWRba106CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkltbWVkaWF0ZWx5IGFib3J0IHNpbmNlIHRoZSBkaXNrIHNwYWNlIG1vbml0b3IgYWN0aW9uIGlzIFwiQUJPUlRcIiEiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VkW2tdID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkRpc2tGdWxsKGRldiwgJ2lub2RlJywgZnJlZUlub2RlLCBwYXRoKSwgc2VsZi5jb25maWd1cmF0aW9uKQorICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL21zZy5weSBiL2JpdGJha2UvbGliL2JiL21zZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODZiNWFlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvbXNnLnB5CkBAIC0wLDAgKzEsMTk5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdtc2cnIGltcGxlbWVudGF0aW9uCisKK01lc3NhZ2UgaGFuZGxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJpdGJha2UKKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICAgICAgICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGNvcHkKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgY29sbGVjdGlvbnMKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBncm91cGJ5CitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBiYgoraW1wb3J0IGJiLmV2ZW50CisKK2NsYXNzIEJCTG9nRm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKToKKyAgICAiIiJGb3JtYXR0ZXIgd2hpY2ggZW5zdXJlcyB0aGF0IG91ciAncGxhaW4nIG1lc3NhZ2VzIChsb2dnaW5nLklORk8gKyAxKSBhcmUgdXNlZCBhcyBpcyIiIgorCisgICAgREVCVUczID0gbG9nZ2luZy5ERUJVRyAtIDIKKyAgICBERUJVRzIgPSBsb2dnaW5nLkRFQlVHIC0gMQorICAgIERFQlVHID0gbG9nZ2luZy5ERUJVRworICAgIFZFUkJPU0UgPSBsb2dnaW5nLklORk8gLSAxCisgICAgTk9URSA9IGxvZ2dpbmcuSU5GTworICAgIFBMQUlOID0gbG9nZ2luZy5JTkZPICsgMQorICAgIEVSUk9SID0gbG9nZ2luZy5FUlJPUgorICAgIFdBUk5JTkcgPSBsb2dnaW5nLldBUk5JTkcKKyAgICBDUklUSUNBTCA9IGxvZ2dpbmcuQ1JJVElDQUwKKworICAgIGxldmVsbmFtZXMgPSB7CisgICAgICAgIERFQlVHMyAgIDogJ0RFQlVHJywKKyAgICAgICAgREVCVUcyICAgOiAnREVCVUcnLAorICAgICAgICBERUJVRyAgIDogJ0RFQlVHJywKKyAgICAgICAgVkVSQk9TRTogJ05PVEUnLAorICAgICAgICBOT1RFICAgIDogJ05PVEUnLAorICAgICAgICBQTEFJTiAgOiAnJywKKyAgICAgICAgV0FSTklORyA6ICdXQVJOSU5HJywKKyAgICAgICAgRVJST1IgICA6ICdFUlJPUicsCisgICAgICAgIENSSVRJQ0FMOiAnRVJST1InLAorICAgIH0KKworICAgIGNvbG9yX2VuYWJsZWQgPSBGYWxzZQorICAgIEJBU0VDT0xPUiwgQkxBQ0ssIFJFRCwgR1JFRU4sIFlFTExPVywgQkxVRSwgTUFHRU5UQSwgQ1lBTiwgV0hJVEUgPSByYW5nZSgyOSwzOCkKKworICAgIENPTE9SUyA9IHsKKyAgICAgICAgREVCVUczICA6IENZQU4sCisgICAgICAgIERFQlVHMiAgOiBDWUFOLAorICAgICAgICBERUJVRyAgIDogQ1lBTiwKKyAgICAgICAgVkVSQk9TRSA6IEJBU0VDT0xPUiwKKyAgICAgICAgTk9URSAgICA6IEJBU0VDT0xPUiwKKyAgICAgICAgUExBSU4gICA6IEJBU0VDT0xPUiwKKyAgICAgICAgV0FSTklORyA6IFlFTExPVywKKyAgICAgICAgRVJST1IgICA6IFJFRCwKKyAgICAgICAgQ1JJVElDQUw6IFJFRCwKKyAgICB9CisKKyAgICBCTEQgPSAnXDAzM1sxOyVkbScKKyAgICBTVEQgPSAnXDAzM1slZG0nCisgICAgUlNUID0gJ1wwMzNbMG0nCisKKyAgICBkZWYgZ2V0TGV2ZWxOYW1lKHNlbGYsIGxldmVsbm8pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5sZXZlbG5hbWVzW2xldmVsbm9dCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYubGV2ZWxuYW1lc1tsZXZlbG5vXSA9IHZhbHVlID0gJ0xldmVsICVkJyAlIGxldmVsbm8KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAgICByZWNvcmQubGV2ZWxuYW1lID0gc2VsZi5nZXRMZXZlbE5hbWUocmVjb3JkLmxldmVsbm8pCisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID09IHNlbGYuUExBSU46CisgICAgICAgICAgICBtc2cgPSByZWNvcmQuZ2V0TWVzc2FnZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmNvbG9yX2VuYWJsZWQ6CisgICAgICAgICAgICAgICAgcmVjb3JkID0gc2VsZi5jb2xvcml6ZShyZWNvcmQpCisgICAgICAgICAgICBtc2cgPSBsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXQoc2VsZiwgcmVjb3JkKQorCisgICAgICAgIGlmIGhhc2F0dHIocmVjb3JkLCAnYmJfZXhjX2luZm8nKToKKyAgICAgICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSByZWNvcmQuYmJfZXhjX2luZm8KKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IGJiLmV4Y2VwdGlvbnMuZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD01KQorICAgICAgICAgICAgbXNnICs9ICdcbicgKyAnJy5qb2luKGZvcm1hdHRlZCkKKyAgICAgICAgcmV0dXJuIG1zZworCisgICAgZGVmIGNvbG9yaXplKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGNvbG9yID0gc2VsZi5DT0xPUlNbcmVjb3JkLmxldmVsbm9dCisgICAgICAgIGlmIHNlbGYuY29sb3JfZW5hYmxlZCBhbmQgY29sb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZWNvcmQgPSBjb3B5LmNvcHkocmVjb3JkKQorICAgICAgICAgICAgcmVjb3JkLmxldmVsbmFtZSA9ICIiLmpvaW4oW3NlbGYuQkxEICUgY29sb3IsIHJlY29yZC5sZXZlbG5hbWUsIHNlbGYuUlNUXSkKKyAgICAgICAgICAgIHJlY29yZC5tc2cgPSAiIi5qb2luKFtzZWxmLlNURCAlIGNvbG9yLCByZWNvcmQubXNnLCBzZWxmLlJTVF0pCisgICAgICAgIHJldHVybiByZWNvcmQKKworICAgIGRlZiBlbmFibGVfY29sb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY29sb3JfZW5hYmxlZCA9IFRydWUKKworY2xhc3MgQkJMb2dGaWx0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlciwgbGV2ZWwsIGRlYnVnX2RvbWFpbnMpOgorICAgICAgICBzZWxmLnN0ZGxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5kZWJ1Z19kb21haW5zID0gZGVidWdfZG9tYWlucworICAgICAgICBsb2dsZXZlbCA9IGxldmVsCisgICAgICAgIGZvciBkb21haW4gaW4gZGVidWdfZG9tYWluczoKKyAgICAgICAgICAgIGlmIGRlYnVnX2RvbWFpbnNbZG9tYWluXSA8IGxvZ2xldmVsOgorICAgICAgICAgICAgICAgIGxvZ2xldmVsID0gZGVidWdfZG9tYWluc1tkb21haW5dCisgICAgICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nbGV2ZWwpCisgICAgICAgIGhhbmRsZXIuYWRkRmlsdGVyKHNlbGYpCisKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID49IHNlbGYuc3RkbGV2ZWw6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiByZWNvcmQubmFtZSBpbiBzZWxmLmRlYnVnX2RvbWFpbnMgYW5kIHJlY29yZC5sZXZlbG5vID49IHNlbGYuZGVidWdfZG9tYWluc1tyZWNvcmQubmFtZV06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgQkJMb2dGaWx0ZXJTdGRFcnIoQkJMb2dGaWx0ZXIpOgorICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgbm90IEJCTG9nRmlsdGVyLmZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID49IGxvZ2dpbmcuRVJST1I6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgQkJMb2dGaWx0ZXJTdGRPdXQoQkJMb2dGaWx0ZXIpOgorICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgbm90IEJCTG9nRmlsdGVyLmZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vIDwgbG9nZ2luZy5FUlJPUjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisjIE1lc3NhZ2UgY29udHJvbCBmdW5jdGlvbnMKKyMKKworbG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwgPSAwCitsb2dnZXJEZWZhdWx0VmVyYm9zZSA9IEZhbHNlCitsb2dnZXJWZXJib3NlTG9ncyA9IEZhbHNlCitsb2dnZXJEZWZhdWx0RG9tYWlucyA9IFtdCisKK2RlZiBpbml0X21zZ2NvbmZpZyh2ZXJib3NlLCBkZWJ1ZywgZGVidWdfZG9tYWlucz1Ob25lKToKKyAgICAiIiIKKyAgICBTZXQgZGVmYXVsdCB2ZXJib3NpdHkgYW5kIGRlYnVnIGxldmVscyBjb25maWcgdGhlIGxvZ2dlcgorICAgICIiIgorICAgIGJiLm1zZy5sb2dnZXJEZWZhdWx0RGVidWdMZXZlbCA9IGRlYnVnCisgICAgYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlID0gdmVyYm9zZQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGJiLm1zZy5sb2dnZXJWZXJib3NlTG9ncyA9IFRydWUKKyAgICBpZiBkZWJ1Z19kb21haW5zOgorICAgICAgICBiYi5tc2cubG9nZ2VyRGVmYXVsdERvbWFpbnMgPSBkZWJ1Z19kb21haW5zCisgICAgZWxzZToKKyAgICAgICAgYmIubXNnLmxvZ2dlckRlZmF1bHREb21haW5zID0gW10KKworZGVmIGNvbnN0cnVjdExvZ09wdGlvbnMoKToKKyAgICBkZWJ1ZyA9IGxvZ2dlckRlZmF1bHREZWJ1Z0xldmVsCisgICAgdmVyYm9zZSA9IGxvZ2dlckRlZmF1bHRWZXJib3NlCisgICAgZG9tYWlucyA9IGxvZ2dlckRlZmF1bHREb21haW5zCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgbGV2ZWwgPSBCQkxvZ0Zvcm1hdHRlci5ERUJVRyAtIGRlYnVnICsgMQorICAgIGVsaWYgdmVyYm9zZToKKyAgICAgICAgbGV2ZWwgPSBCQkxvZ0Zvcm1hdHRlci5WRVJCT1NFCisgICAgZWxzZToKKyAgICAgICAgbGV2ZWwgPSBCQkxvZ0Zvcm1hdHRlci5OT1RFCisKKyAgICBkZWJ1Z19kb21haW5zID0ge30KKyAgICBmb3IgKGRvbWFpbmFyZywgaXRlcmF0b3IpIGluIGdyb3VwYnkoZG9tYWlucyk6CisgICAgICAgIGRsZXZlbCA9IGxlbih0dXBsZShpdGVyYXRvcikpCisgICAgICAgIGRlYnVnX2RvbWFpbnNbIkJpdEJha2UuJXMiICUgZG9tYWluYXJnXSA9IGxvZ2dpbmcuREVCVUcgLSBkbGV2ZWwgKyAxCisgICAgcmV0dXJuIGxldmVsLCBkZWJ1Z19kb21haW5zCisKK2RlZiBhZGREZWZhdWx0bG9nRmlsdGVyKGhhbmRsZXIsIGNscyA9IEJCTG9nRmlsdGVyKToKKyAgICBsZXZlbCwgZGVidWdfZG9tYWlucyA9IGNvbnN0cnVjdExvZ09wdGlvbnMoKQorCisgICAgY2xzKGhhbmRsZXIsIGxldmVsLCBkZWJ1Z19kb21haW5zKQorCisjCisjIE1lc3NhZ2UgaGFuZGxpbmcgZnVuY3Rpb25zCisjCisKK2RlZiBmYXRhbChtc2dkb21haW4sIG1zZyk6CisgICAgaWYgbXNnZG9tYWluOgorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS4lcyIgJSBtc2dkb21haW4pCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgIGxvZ2dlci5jcml0aWNhbChtc2cpCisgICAgc3lzLmV4aXQoMSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL25hbWVkdHVwbGVfd2l0aF9hYmMucHkgYi9iaXRiYWtlL2xpYi9iYi9uYW1lZHR1cGxlX3dpdGhfYWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZjJmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9uYW1lZHR1cGxlX3dpdGhfYWJjLnB5CkBAIC0wLDAgKzEsMjU1IEBACisjIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzYyOS1uYW1lZHR1cGxlYWJjLWFic3RyYWN0LWJhc2UtY2xhc3MtbWl4LWluLWZvci1uYW1lZC8KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgSmFuIEthbGlzemV3c2tpICh6dW8pLiBBdmFpbGFibGUgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgorCisiIiIKK25hbWVkdHVwbGVfd2l0aF9hYmMucHk6CisqIG5hbWVkIHR1cGxlIG1peC1pbiArIEFCQyAoYWJzdHJhY3QgYmFzZSBjbGFzcykgcmVjaXBlLAorKiB3b3JrcyB1bmRlciBQeXRob24gMi42LCAyLjcgYXMgd2VsbCBhcyAzLnguCisKK0ltcG9ydCB0aGlzIG1vZHVsZSB0byBwYXRjaCBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgZmFjdG9yeSBmdW5jdGlvbgorLS0gZW5yaWNoaW5nIGl0IHdpdGggdGhlICdhYmMnIGF0dHJpYnV0ZSAoYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbgorZm9yIG5hbWVkIHR1cGxlcykgYW5kIGRlY29yYXRpbmcgaXQgd2l0aCBhIHdyYXBwZXIgdGhhdCByZWdpc3RlcnMgZWFjaAorbmV3bHkgY3JlYXRlZCBuYW1lZCB0dXBsZSBhcyBhIHN1YmNsYXNzIG9mIG5hbWVkdHVwbGUuYWJjLgorCitIb3cgdG8gaW1wb3J0OgorICAgIGltcG9ydCBjb2xsZWN0aW9ucywgbmFtZWR0dXBsZV93aXRoX2FiYworb3I6CisgICAgaW1wb3J0IG5hbWVkdHVwbGVfd2l0aF9hYmMKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisgICAgIyBeIGluIHRoaXMgdmFyaWFudCB5b3UgbXVzdCBpbXBvcnQgbmFtZWR0dXBsZSBmdW5jdGlvbgorICAgICMgICAqYWZ0ZXIqIGltcG9ydGluZyBuYW1lZHR1cGxlX3dpdGhfYWJjIG1vZHVsZQorb3Igc2ltcGx5OgorICAgIGZyb20gbmFtZWR0dXBsZV93aXRoX2FiYyBpbXBvcnQgbmFtZWR0dXBsZQorCitTaW1wbGUgdXNhZ2UgZXhhbXBsZToKKyAgICBjbGFzcyBDcmVkZW50aWFscyhuYW1lZHR1cGxlLmFiYyk6CisgICAgICAgIF9maWVsZHMgPSAndXNlcm5hbWUgcGFzc3dvcmQnCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICgnezAuX19jbGFzc19fLl9fbmFtZV9ffScKKyAgICAgICAgICAgICAgICAgICAgJyh1c2VybmFtZT17MC51c2VybmFtZX0sIHBhc3N3b3JkPS4uLiknLmZvcm1hdChzZWxmKSkKKyAgICBwcmludChDcmVkZW50aWFscygiYWxpY2UiLCAiQWxpY2UncyBwYXNzd29yZCIpKQorCitGb3IgbW9yZSBhZHZhbmNlZCBleGFtcGxlcyAtLSBzZWUgYmVsb3cgdGhlICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiIuCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3Rwcm9wZXJ0eQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIHN5cyBpbXBvcnQgdmVyc2lvbl9pbmZvCisKK19fYWxsX18gPSAoJ25hbWVkdHVwbGUnLCkKK19uYW1lZHR1cGxlID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZQorCisKK2NsYXNzIF9OYW1lZFR1cGxlQUJDTWV0YShBQkNNZXRhKToKKyAgICAnJydUaGUgbWV0YWNsYXNzIGZvciB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbiBmb3IgbmFtZWQgdHVwbGVzLicnJworICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpOgorICAgICAgICBmaWVsZHMgPSBuYW1lc3BhY2UuZ2V0KCdfZmllbGRzJykKKyAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICBpZiBmaWVsZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpZWxkcyA9IGdldGF0dHIoYmFzZSwgJ19maWVsZHMnLCBOb25lKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmaWVsZHMsIGFic3RyYWN0cHJvcGVydHkpOgorICAgICAgICAgICAgYmFzZXR1cGxlID0gX25hbWVkdHVwbGUobmFtZSwgZmllbGRzKQorICAgICAgICAgICAgYmFzZXMgPSAoYmFzZXR1cGxlLCkgKyBiYXNlcworICAgICAgICAgICAgbmFtZXNwYWNlLnBvcCgnX2ZpZWxkcycsIE5vbmUpCisgICAgICAgICAgICBuYW1lc3BhY2Uuc2V0ZGVmYXVsdCgnX19kb2NfXycsIGJhc2V0dXBsZS5fX2RvY19fKQorICAgICAgICAgICAgbmFtZXNwYWNlLnNldGRlZmF1bHQoJ19fc2xvdHNfXycsICgpKQorICAgICAgICByZXR1cm4gQUJDTWV0YS5fX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpCisKKworZXhlYygKKyAgICAjIFB5dGhvbiAyLnggbWV0YWNsYXNzIGRlY2xhcmF0aW9uIHN5bnRheAorICAgICIiImNsYXNzIF9OYW1lZFR1cGxlQUJDKG9iamVjdCk6CisgICAgICAgICcnJ1RoZSBhYnN0cmFjdCBiYXNlIGNsYXNzICsgbWl4LWluIGZvciBuYW1lZCB0dXBsZXMuJycnCisgICAgICAgIF9fbWV0YWNsYXNzX18gPSBfTmFtZWRUdXBsZUFCQ01ldGEKKyAgICAgICAgX2ZpZWxkcyA9IGFic3RyYWN0cHJvcGVydHkoKSIiIiBpZiB2ZXJzaW9uX2luZm9bMF0gPCAzIGVsc2UKKyAgICAjIFB5dGhvbiAzLnggbWV0YWNsYXNzIGRlY2xhcmF0aW9uIHN5bnRheAorICAgICIiImNsYXNzIF9OYW1lZFR1cGxlQUJDKG1ldGFjbGFzcz1fTmFtZWRUdXBsZUFCQ01ldGEpOgorICAgICAgICAnJydUaGUgYWJzdHJhY3QgYmFzZSBjbGFzcyArIG1peC1pbiBmb3IgbmFtZWQgdHVwbGVzLicnJworICAgICAgICBfZmllbGRzID0gYWJzdHJhY3Rwcm9wZXJ0eSgpIiIiCispCisKKworX25hbWVkdHVwbGUuYWJjID0gX05hbWVkVHVwbGVBQkMKKyNfTmFtZWRUdXBsZUFCQy5yZWdpc3Rlcih0eXBlKHZlcnNpb25faW5mbykpICAjIChhbmQgc2ltaWxhciwgaW4gdGhlIGZ1dHVyZS4uLikKKworQHdyYXBzKF9uYW1lZHR1cGxlKQorZGVmIG5hbWVkdHVwbGUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAnJydOYW1lZCB0dXBsZSBmYWN0b3J5IHdpdGggbmFtZWR0dXBsZS5hYmMgc3ViY2xhc3MgcmVnaXN0cmF0aW9uLicnJworICAgIGNscyA9IF9uYW1lZHR1cGxlKCphcmdzLCAqKmt3YXJncykKKyAgICBfTmFtZWRUdXBsZUFCQy5yZWdpc3RlcihjbHMpCisgICAgcmV0dXJuIGNscworCitjb2xsZWN0aW9ucy5uYW1lZHR1cGxlID0gbmFtZWR0dXBsZQorCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCisgICAgJycnRXhhbXBsZXMgYW5kIGV4cGxhbmF0aW9ucycnJworCisgICAgIyBTaW1wbGUgdXNhZ2UKKworICAgIGNsYXNzIE15UmVjb3JkKG5hbWVkdHVwbGUuYWJjKToKKyAgICAgICAgX2ZpZWxkcyA9ICd4IHkgeicgICMgc3VjaCBmb3JtIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byAoJ3gnLCAneScsICd6JykKKyAgICAgICAgZGVmIF9teV9jdXN0b21fbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5fYXNkaWN0KCkuaXRlbXMoKSkKKyAgICAjICh0aGUgJ19maWVsZHMnIGF0dHJpYnV0ZSBiZWxvbmdzIHRvIHRoZSBuYW1lZCB0dXBsZSBwdWJsaWMgQVBJIGFueXdheSkKKworICAgIHJlYyA9IE15UmVjb3JkKDEsIDIsIDMpCisgICAgcHJpbnQocmVjKQorICAgIHByaW50KHJlYy5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYy5fcmVwbGFjZSh5PTIyMikpCisgICAgcHJpbnQocmVjLl9yZXBsYWNlKHk9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKQorCisgICAgIyBDdXN0b20gYWJzdHJhY3QgY2xhc3Nlcy4uLgorCisgICAgY2xhc3MgTXlBYnN0cmFjdFJlY29yZChuYW1lZHR1cGxlLmFiYyk6CisgICAgICAgIGRlZiBfbXlfY3VzdG9tX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2FzZGljdCgpLml0ZW1zKCkpCisKKyAgICB0cnk6CisgICAgICAgIE15QWJzdHJhY3RSZWNvcmQoKSAgIyAoYWJzdHJhY3QgY2xhc3NlcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXhjOgorICAgICAgICBwcmludChleGMpCisKKyAgICBjbGFzcyBBbm90aGVyQWJzdHJhY3RSZWNvcmQoTXlBYnN0cmFjdFJlY29yZCk6CisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICc8PDx7MH0+Pj4nLmZvcm1hdChzdXBlcihBbm90aGVyQWJzdHJhY3RSZWNvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLl9fc3RyX18oKSkKKworICAgICMgLi4uYW5kIHRoZWlyIG5vbi1hYnN0cmFjdCBzdWJjbGFzc2VzCisKKyAgICBjbGFzcyBNeVJlY29yZDIoTXlBYnN0cmFjdFJlY29yZCk6CisgICAgICAgIF9maWVsZHMgPSAnYSwgYicKKworICAgIGNsYXNzIE15UmVjb3JkMyhBbm90aGVyQWJzdHJhY3RSZWNvcmQpOgorICAgICAgICBfZmllbGRzID0gJ3AnLCAncScsICdyJworCisgICAgcmVjMiA9IE15UmVjb3JkMignZm9vJywgJ2JhcicpCisgICAgcHJpbnQocmVjMikKKyAgICBwcmludChyZWMyLl9teV9jdXN0b21fbWV0aG9kKCkpCisgICAgcHJpbnQocmVjMi5fcmVwbGFjZShiPTIyMikpCisgICAgcHJpbnQocmVjMi5fcmVwbGFjZShiPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgIHJlYzMgPSBNeVJlY29yZDMoJ2ZvbycsICdiYXInLCAnYmF6JykKKyAgICBwcmludChyZWMzKQorICAgIHByaW50KHJlYzMuX215X2N1c3RvbV9tZXRob2QoKSkKKyAgICBwcmludChyZWMzLl9yZXBsYWNlKHE9MjIyKSkKKyAgICBwcmludChyZWMzLl9yZXBsYWNlKHE9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKQorCisgICAjIFlvdSBjYW4gYWxzbyBzdWJjbGFzcyBub24tYWJzdHJhY3Qgb25lcy4uLgorCisgICAgY2xhc3MgTXlSZWNvcmQzMyhNeVJlY29yZDMpOgorICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAnPCB7MCFyfSwgLi4uLCB7MCFyfSA+Jy5mb3JtYXQoc2VsZi5wLCBzZWxmLnIpCisKKyAgICByZWMzMyA9IE15UmVjb3JkMzMoJ2ZvbycsICdiYXInLCAnYmF6JykKKyAgICBwcmludChyZWMzMykKKyAgICBwcmludChyZWMzMy5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYzMzLl9yZXBsYWNlKHE9MjIyKSkKKyAgICBwcmludChyZWMzMy5fcmVwbGFjZShxPTIyMikuX215X2N1c3RvbV9tZXRob2QoKSkKKworICAgICMgLi4uYW5kIGV2ZW4gb3ZlcnJpZGUgdGhlIG1hZ2ljICdfZmllbGRzJyBhdHRyaWJ1dGUgYWdhaW4KKworICAgIGNsYXNzIE15UmVjb3JkMzQ1KE15UmVjb3JkMyk6CisgICAgICAgIF9maWVsZHMgPSAnZSBmIGcgaCBpIGogaycKKworICAgIHJlYzM0NSA9IE15UmVjb3JkMzQ1KDEsIDIsIDMsIDQsIDMsIDIsIDEpCisgICAgcHJpbnQocmVjMzQ1KQorICAgIHByaW50KHJlYzM0NS5fbXlfY3VzdG9tX21ldGhvZCgpKQorICAgIHByaW50KHJlYzM0NS5fcmVwbGFjZShmPTIyMikpCisgICAgcHJpbnQocmVjMzQ1Ll9yZXBsYWNlKGY9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKQorCisgICAgIyBNaXhpbmctaW4gc29tZSBvdGhlciBjbGFzc2VzIGlzIGFsc28gcG9zc2libGU6CisKKyAgICBjbGFzcyBNeU1peEluKG9iamVjdCk6CisgICAgICAgIGRlZiBtZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4ubWV0aG9kKCkgY2FsbGVkIgorICAgICAgICBkZWYgX215X2N1c3RvbV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIk15TWl4SW4uX215X2N1c3RvbV9tZXRob2QoKSBjYWxsZWQiCisgICAgICAgIGRlZiBjb3VudChzZWxmLCBpdGVtKToKKyAgICAgICAgICAgIHJldHVybiAiTXlNaXhJbi5jb3VudCh7MH0pIGNhbGxlZCIuZm9ybWF0KGl0ZW0pCisgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOiAgIyAoY2Fubm90IG92ZXJyaWRlIGEgbmFtZWR0dXBsZSBtZXRob2QsIHNlZSBiZWxvdykKKyAgICAgICAgICAgIHJldHVybiAiTXlNaXhJbi5fYXNkaWN0KCkgY2FsbGVkIgorCisgICAgY2xhc3MgTXlSZWNvcmQ0KE15UmVjb3JkMzMsIE15TWl4SW4pOiAgIyBtaXgtaW4gb24gdGhlIHJpZ2h0CisgICAgICAgIF9maWVsZHMgPSAnaiBrIGwgeCcKKworICAgIGNsYXNzIE15UmVjb3JkNShNeU1peEluLCBNeVJlY29yZDMzKTogICMgbWl4LWluIG9uIHRoZSBsZWZ0CisgICAgICAgIF9maWVsZHMgPSAnaiBrIGwgeCB5JworCisgICAgcmVjNCA9IE15UmVjb3JkNCgxLCAyLCAzLCAyKQorICAgIHByaW50KHJlYzQpCisgICAgcHJpbnQocmVjNC5tZXRob2QoKSkKKyAgICBwcmludChyZWM0Ll9teV9jdXN0b21fbWV0aG9kKCkpICAjIE15UmVjb3JkMzMncworICAgIHByaW50KHJlYzQuY291bnQoMikpICAjIHR1cGxlJ3MKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKSkKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKS5tZXRob2QoKSkKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKS5fbXlfY3VzdG9tX21ldGhvZCgpKSAgIyBNeVJlY29yZDMzJ3MKKyAgICBwcmludChyZWM0Ll9yZXBsYWNlKGs9MjIyKS5jb3VudCg4KSkgICMgdHVwbGUncworCisgICAgcmVjNSA9IE15UmVjb3JkNSgxLCAyLCAzLCAyLCAxKQorICAgIHByaW50KHJlYzUpCisgICAgcHJpbnQocmVjNS5tZXRob2QoKSkKKyAgICBwcmludChyZWM1Ll9teV9jdXN0b21fbWV0aG9kKCkpICAjIE15TWl4SW4ncworICAgIHByaW50KHJlYzUuY291bnQoMikpICAjIE15TWl4SW4ncworICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpKQorICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpLm1ldGhvZCgpKQorICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpLl9teV9jdXN0b21fbWV0aG9kKCkpICAjIE15TWl4SW4ncworICAgIHByaW50KHJlYzUuX3JlcGxhY2Uoaz0yMjIpLmNvdW50KDIpKSAgIyBNeU1peEluJ3MKKworICAgICMgTm90ZSB0aGF0IGJlaGF2aW9yOiB0aGUgc3RhbmRhcmQgbmFtZWR0dXBsZSBtZXRob2RzIGNhbm5vdCBiZQorICAgICMgb3ZlcnJpZGRlbiBieSBhIGZvcmVpZ24gbWl4LWluIC0tIGV2ZW4gaWYgdGhlIG1peC1pbiBpcyBkZWNsYXJlZAorICAgICMgYXMgdGhlIGxlZnRtb3N0IGJhc2UgY2xhc3MgKGJ1dCwgb2J2aW91c2x5LCB5b3UgY2FuIG92ZXJyaWRlIHRoZW0KKyAgICAjIGluIHRoZSBkZWZpbmVkIGNsYXNzIG9yIGl0cyBzdWJjbGFzc2VzKToKKworICAgIHByaW50KHJlYzQuX2FzZGljdCgpKSAgIyAocmV0dXJucyBhIGRpY3QsIG5vdCAiTXlNaXhJbi5fYXNkaWN0KCkgY2FsbGVkIikKKyAgICBwcmludChyZWM1Ll9hc2RpY3QoKSkgICMgKHJldHVybnMgYSBkaWN0LCBub3QgIk15TWl4SW4uX2FzZGljdCgpIGNhbGxlZCIpCisKKyAgICBjbGFzcyBNeVJlY29yZDYoTXlSZWNvcmQzMyk6CisgICAgICAgIF9maWVsZHMgPSAnaiBrIGwgeCB5IHonCisgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJNeVJlY29yZDYuX2FzZGljdCgpIGNhbGxlZCIKKyAgICByZWM2ID0gTXlSZWNvcmQ2KDEsIDIsIDMsIDEsIDIsIDMpCisgICAgcHJpbnQocmVjNi5fYXNkaWN0KCkpICAjICh0aGlzIHJldHVybnMgIk15UmVjb3JkNi5fYXNkaWN0KCkgY2FsbGVkIikKKworICAgICMgQWxsIHRoYXQgcmVjb3JkIGNsYXNzZXMgYXJlIHJlYWwgc3ViY2xhc3NlcyBvZiBuYW1lZHR1cGxlLmFiYzoKKworICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeUFic3RyYWN0UmVjb3JkLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhBbm90aGVyQWJzdHJhY3RSZWNvcmQsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMiwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDMzLCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDM0NSwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ0LCBuYW1lZHR1cGxlLmFiYykKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDUsIG5hbWVkdHVwbGUuYWJjKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNiwgbmFtZWR0dXBsZS5hYmMpCisKKyAgICAjIC4uLmJ1dCBhYnN0cmFjdCBvbmVzIGFyZSBub3Qgc3ViY2xhc3NlcyBvZiB0dXBsZQorICAgICMgKGFuZCB0aGlzIGlzIHdoYXQgeW91IHByb2JhYmx5IHdhbnQpOgorCisgICAgYXNzZXJ0IG5vdCBpc3N1YmNsYXNzKE15QWJzdHJhY3RSZWNvcmQsIHR1cGxlKQorICAgIGFzc2VydCBub3QgaXNzdWJjbGFzcyhBbm90aGVyQWJzdHJhY3RSZWNvcmQsIHR1cGxlKQorCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkMiwgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQzLCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDMzLCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDM0NSwgdHVwbGUpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlSZWNvcmQ0LCB0dXBsZSkKKyAgICBhc3NlcnQgaXNzdWJjbGFzcyhNeVJlY29yZDUsIHR1cGxlKQorICAgIGFzc2VydCBpc3N1YmNsYXNzKE15UmVjb3JkNiwgdHVwbGUpCisKKyAgICAjIE5hbWVkIHR1cGxlIGNsYXNzZXMgY3JlYXRlZCB3aXRoIG5hbWVkdHVwbGUoKSBmYWN0b3J5IGZ1bmN0aW9uCisgICAgIyAoaW4gdGhlICJ0cmFkaXRpb25hbCIgd2F5KSBhcmUgcmVnaXN0ZXJlZCBhcyAidmlydHVhbCIgc3ViY2xhc3NlcworICAgICMgb2YgbmFtZWR0dXBsZS5hYmM6CisKKyAgICBNeVR1cGxlID0gbmFtZWR0dXBsZSgnTXlUdXBsZScsICdhIGIgYycpCisgICAgbXQgPSBNeVR1cGxlKDEsIDIsIDMpCisgICAgYXNzZXJ0IGlzc3ViY2xhc3MoTXlUdXBsZSwgbmFtZWR0dXBsZS5hYmMpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UobXQsIG5hbWVkdHVwbGUuYWJjKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi9iYi9wYXJzZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2VjNzFmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcGFyc2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNzAgQEAKKyIiIgorQml0QmFrZSBQYXJzZXJzCisKK0ZpbGUgcGFyc2VycyBmb3IgdGhlIEJpdEJha2UgYnVpbGQgdG9vbHMuCisKKyIiIgorCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBCYXNlZCBvbiBmdW5jdGlvbnMgZnJvbSB0aGUgYmFzZSBiYiBtb2R1bGUsIENvcHlyaWdodCAyMDAzIEhvbGdlciBTY2h1cmlnCisKK2hhbmRsZXJzID0gW10KKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAoraW1wb3J0IGJiCitpbXBvcnQgYmIudXRpbHMKK2ltcG9ydCBiYi5zaWdnZW4KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUGFyc2luZyIpCisKK2NsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gcGFyc2luZyBmYWlscyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIGZpbGVuYW1lLCBsaW5lbm89MCk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnLCBmaWxlbmFtZSwgbGluZW5vKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYubGluZW5vOgorICAgICAgICAgICAgcmV0dXJuICJQYXJzZUVycm9yIGF0ICVzOiVkOiAlcyIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIHNlbGYubXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJQYXJzZUVycm9yIGluICVzOiAlcyIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5tc2cpCisKK2NsYXNzIFNraXBSZWNpcGUoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHRvIHNraXAgdGhpcyByZWNpcGUiIiIKKworY2xhc3MgU2tpcFBhY2thZ2UoU2tpcFJlY2lwZSk6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB0byBza2lwIHRoaXMgcmVjaXBlICh1c2UgU2tpcFJlY2lwZSBpbiBuZXcgY29kZSkiIiIKKworX19tdGltZV9jYWNoZSA9IHt9CitkZWYgY2FjaGVkX210aW1lKGYpOgorICAgIGlmIGYgbm90IGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgcmV0dXJuIF9fbXRpbWVfY2FjaGVbZl0KKworZGVmIGNhY2hlZF9tdGltZV9ub2Vycm9yKGYpOgorICAgIGlmIGYgbm90IGluIF9fbXRpbWVfY2FjaGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9fbXRpbWVfY2FjaGVbZl0gPSBvcy5zdGF0KGYpW3N0YXQuU1RfTVRJTUVdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICByZXR1cm4gX19tdGltZV9jYWNoZVtmXQorCitkZWYgdXBkYXRlX210aW1lKGYpOgorICAgIHRyeToKKyAgICAgICAgX19tdGltZV9jYWNoZVtmXSA9IG9zLnN0YXQoZilbc3RhdC5TVF9NVElNRV0KKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgaWYgZiBpbiBfX210aW1lX2NhY2hlOgorICAgICAgICAgICAgZGVsIF9fbXRpbWVfY2FjaGVbZl0KKyAgICAgICAgcmV0dXJuIDAKKyAgICByZXR1cm4gX19tdGltZV9jYWNoZVtmXQorCitkZWYgdXBkYXRlX2NhY2hlKGYpOgorICAgIGlmIGYgaW4gX19tdGltZV9jYWNoZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJVcGRhdGluZyBtdGltZSBjYWNoZSBmb3IgJXMiICUgZikKKyAgICAgICAgdXBkYXRlX210aW1lKGYpCisKK2RlZiBtYXJrX2RlcGVuZGVuY3koZCwgZik6CisgICAgaWYgZi5zdGFydHN3aXRoKCcuLycpOgorICAgICAgICBmID0gIiVzLyVzIiAlIChvcy5nZXRjd2QoKSwgZlsyOl0pCisgICAgZGVwcyA9IChkLmdldFZhcignX19kZXBlbmRzJywgRmFsc2UpIG9yIFtdKQorICAgIHMgPSAoZiwgY2FjaGVkX210aW1lX25vZXJyb3IoZikpCisgICAgaWYgcyBub3QgaW4gZGVwczoKKyAgICAgICAgZGVwcy5hcHBlbmQocykKKyAgICAgICAgZC5zZXRWYXIoJ19fZGVwZW5kcycsIGRlcHMpCisKK2RlZiBjaGVja19kZXBlbmRlbmN5KGQsIGYpOgorICAgIHMgPSAoZiwgY2FjaGVkX210aW1lX25vZXJyb3IoZikpCisgICAgZGVwcyA9IChkLmdldFZhcignX19kZXBlbmRzJywgRmFsc2UpIG9yIFtdKQorICAgIHJldHVybiBzIGluIGRlcHMKKyAgIAorZGVmIHN1cHBvcnRzKGZuLCBkYXRhKToKKyAgICAiIiJSZXR1cm5zIHRydWUgaWYgd2UgaGF2ZSBhIGhhbmRsZXIgZm9yIHRoaXMgZmlsZSwgZmFsc2Ugb3RoZXJ3aXNlIiIiCisgICAgZm9yIGggaW4gaGFuZGxlcnM6CisgICAgICAgIGlmIGhbJ3N1cHBvcnRzJ10oZm4sIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCitkZWYgaGFuZGxlKGZuLCBkYXRhLCBpbmNsdWRlID0gMCk6CisgICAgIiIiQ2FsbCB0aGUgaGFuZGxlciB0aGF0IGlzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGZpbGUiIiIKKyAgICBmb3IgaCBpbiBoYW5kbGVyczoKKyAgICAgICAgaWYgaFsnc3VwcG9ydHMnXShmbiwgZGF0YSk6CisgICAgICAgICAgICB3aXRoIGRhdGEuaW5jaGlzdG9yeS5pbmNsdWRlKGZuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaFsnaGFuZGxlJ10oZm4sIGRhdGEsIGluY2x1ZGUpCisgICAgcmFpc2UgUGFyc2VFcnJvcigibm90IGEgQml0QmFrZSBmaWxlIiwgZm4pCisKK2RlZiBpbml0KGZuLCBkYXRhKToKKyAgICBmb3IgaCBpbiBoYW5kbGVyczoKKyAgICAgICAgaWYgaFsnc3VwcG9ydHMnXShmbik6CisgICAgICAgICAgICByZXR1cm4gaFsnaW5pdCddKGRhdGEpCisKK2RlZiBpbml0X3BhcnNlcihkKToKKyAgICBiYi5wYXJzZS5zaWdnZW4gPSBiYi5zaWdnZW4uaW5pdChkKQorCitkZWYgcmVzb2x2ZV9maWxlKGZuLCBkKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyhmbik6CisgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKQorICAgICAgICBuZXdmbiwgYXR0ZW1wdHMgPSBiYi51dGlscy53aGljaChiYnBhdGgsIGZuLCBoaXN0b3J5PVRydWUpCisgICAgICAgIGZvciBhZiBpbiBhdHRlbXB0czoKKyAgICAgICAgICAgIG1hcmtfZGVwZW5kZW5jeShkLCBhZikKKyAgICAgICAgaWYgbm90IG5ld2ZuOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsICJmaWxlICVzIG5vdCBmb3VuZCBpbiAlcyIgJSAoZm4sIGJicGF0aCkpCisgICAgICAgIGZuID0gbmV3Zm4KKworICAgIG1hcmtfZGVwZW5kZW5jeShkLCBmbikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVOT0VOVCwgImZpbGUgJXMgbm90IGZvdW5kIiAlIGZuKQorCisgICAgcmV0dXJuIGZuCisKKyMgVXNlZCBieSBPcGVuRW1iZWRkZWQgbWV0YWRhdGEKK19fcGtnc3BsaXRfY2FjaGVfXz17fQorZGVmIHZhcnNfZnJvbV9maWxlKG15cGtnLCBkKToKKyAgICBpZiBub3QgbXlwa2cgb3Igbm90IG15cGtnLmVuZHN3aXRoKCgiLmJiIiwgIi5iYmFwcGVuZCIpKToKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lLCBOb25lKQorICAgIGlmIG15cGtnIGluIF9fcGtnc3BsaXRfY2FjaGVfXzoKKyAgICAgICAgcmV0dXJuIF9fcGtnc3BsaXRfY2FjaGVfX1tteXBrZ10KKworICAgIG15ZmlsZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShteXBrZykpCisgICAgcGFydHMgPSBteWZpbGVbMF0uc3BsaXQoJ18nKQorICAgIF9fcGtnc3BsaXRfY2FjaGVfX1tteXBrZ10gPSBwYXJ0cworICAgIGlmIGxlbihwYXJ0cykgPiAzOgorICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJVbmFibGUgdG8gZ2VuZXJhdGUgZGVmYXVsdCB2YXJpYWJsZXMgZnJvbSBmaWxlbmFtZSAodG9vIG1hbnkgdW5kZXJzY29yZXMpIiwgbXlwa2cpCisgICAgZXhwID0gMyAtIGxlbihwYXJ0cykKKyAgICB0bXBsaXN0ID0gW10KKyAgICB3aGlsZSBleHAgIT0gMDoKKyAgICAgICAgZXhwIC09IDEKKyAgICAgICAgdG1wbGlzdC5hcHBlbmQoTm9uZSkKKyAgICBwYXJ0cy5leHRlbmQodG1wbGlzdCkKKyAgICByZXR1cm4gcGFydHMKKworZGVmIGdldF9maWxlX2RlcGVuZHMoZCk6CisgICAgJycnUmV0dXJuIHRoZSBkZXBlbmRlbnQgZmlsZXMnJycKKyAgICBkZXBfZmlsZXMgPSBbXQorICAgIGRlcGVuZHMgPSBkLmdldFZhcignX19iYXNlX2RlcGVuZHMnLCBUcnVlKSBvciBbXQorICAgIGRlcGVuZHMgPSBkZXBlbmRzICsgKGQuZ2V0VmFyKCdfX2RlcGVuZHMnLCBUcnVlKSBvciBbXSkKKyAgICBmb3IgKGZuLCBfKSBpbiBkZXBlbmRzOgorICAgICAgICBkZXBfZmlsZXMuYXBwZW5kKG9zLnBhdGguYWJzcGF0aChmbikpCisgICAgcmV0dXJuICIgIi5qb2luKGRlcF9maWxlcykKKworZnJvbSBiYi5wYXJzZS5wYXJzZV9weSBpbXBvcnQgX192ZXJzaW9uX18sIENvbmZIYW5kbGVyLCBCQkhhbmRsZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weSBiL2JpdGJha2UvbGliL2JiL3BhcnNlL2FzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRiMTgwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcGFyc2UvYXN0LnB5CkBAIC0wLDAgKzEsNDgxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCisgQWJzdHJhY3RTeW50YXhUcmVlIGNsYXNzZXMgZm9yIHRoZSBCaXRiYWtlIGxhbmd1YWdlCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGZpbHRlcgoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgaXRlcnRvb2xzCitmcm9tIGJiIGltcG9ydCBtZXRob2Rwb29sCitmcm9tIGJiLnBhcnNlIGltcG9ydCBsb2dnZXIKKworX2JidmVyc2lvbnNfcmUgPSByZS5jb21waWxlKHIiXFsoP1A8ZnJvbT5bMC05XSspLSg/UDx0bz5bMC05XSspXF0iKQorCitjbGFzcyBTdGF0ZW1lbnRHcm91cChsaXN0KToKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgZm9yIHN0YXRlbWVudCBpbiBzZWxmOgorICAgICAgICAgICAgc3RhdGVtZW50LmV2YWwoZGF0YSkKKworY2xhc3MgQXN0Tm9kZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisKK2NsYXNzIEluY2x1ZGVOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB3aGF0X2ZpbGUsIGZvcmNlKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLndoYXRfZmlsZSA9IHdoYXRfZmlsZQorICAgICAgICBzZWxmLmZvcmNlID0gZm9yY2UKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5jbHVkZSB0aGUgZmlsZSBhbmQgZXZhbHVhdGUgdGhlIHN0YXRlbWVudHMKKyAgICAgICAgIiIiCisgICAgICAgIHMgPSBkYXRhLmV4cGFuZChzZWxmLndoYXRfZmlsZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICJDT05GICVzOiVzOiBpbmNsdWRpbmcgJXMiLCBzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubywgcykKKworICAgICAgICAjIFRPRE86IENhY2hlIHRob3NlIGluY2x1ZGVzLi4uIG1heWJlIG5vdCBoZXJlIHRob3VnaAorICAgICAgICBpZiBzZWxmLmZvcmNlOgorICAgICAgICAgICAgYmIucGFyc2UuQ29uZkhhbmRsZXIuaW5jbHVkZShzZWxmLmZpbGVuYW1lLCBzLCBzZWxmLmxpbmVubywgZGF0YSwgImluY2x1ZGUgcmVxdWlyZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIucGFyc2UuQ29uZkhhbmRsZXIuaW5jbHVkZShzZWxmLmZpbGVuYW1lLCBzLCBzZWxmLmxpbmVubywgZGF0YSwgRmFsc2UpCisKK2NsYXNzIEV4cG9ydE5vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIHZhcik6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi52YXIgPSB2YXIKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBkYXRhLnNldFZhckZsYWcoc2VsZi52YXIsICJleHBvcnQiLCAxLCBvcCA9ICdleHBvcnRlZCcpCisKK2NsYXNzIERhdGFOb2RlKEFzdE5vZGUpOgorICAgICIiIgorICAgIFZhcmlvdXMgZGF0YSByZWxhdGVkIHVwZGF0ZXMuIEZvciB0aGUgc2FrZSBvZiBzYW5pdHkKKyAgICB3ZSBoYXZlIG9uZSBjbGFzcyBkb2luZyBhbGwgdGhpcy4gVGhpcyBtZWFucyB0aGF0IGFsbAorICAgIHRoaXMgbmVlZCB0byBiZSByZS1ldmFsdWF0ZWQuLi4gd2UgbWlnaHQgYmUgYWJsZSB0byBkbworICAgIHRoYXQgZmFzdGVyIHdpdGggbXVsdGlwbGUgY2xhc3Nlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmdyb3VwZCA9IGdyb3VwZAorCisgICAgZGVmIGdldEZ1bmMoc2VsZiwga2V5LCBkYXRhKToKKyAgICAgICAgaWYgJ2ZsYWcnIGluIHNlbGYuZ3JvdXBkIGFuZCBzZWxmLmdyb3VwZFsnZmxhZyddICE9IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZGF0YS5nZXRWYXJGbGFnKGtleSwgc2VsZi5ncm91cGRbJ2ZsYWcnXSwgbm93ZWFrZGVmYXVsdD1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0VmFyKGtleSwgRmFsc2UsIG5vd2Vha2RlZmF1bHQ9VHJ1ZSwgcGFyc2luZz1UcnVlKQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGdyb3VwZCA9IHNlbGYuZ3JvdXBkCisgICAgICAgIGtleSA9IGdyb3VwZFsidmFyIl0KKyAgICAgICAgbG9naW5mbyA9IHsKKyAgICAgICAgICAgICd2YXJpYWJsZSc6IGtleSwKKyAgICAgICAgICAgICdmaWxlJzogc2VsZi5maWxlbmFtZSwKKyAgICAgICAgICAgICdsaW5lJzogc2VsZi5saW5lbm8sCisgICAgICAgIH0KKyAgICAgICAgaWYgImV4cCIgaW4gZ3JvdXBkIGFuZCBncm91cGRbImV4cCJdICE9IE5vbmU6CisgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoa2V5LCAiZXhwb3J0IiwgMSwgb3AgPSAnZXhwb3J0ZWQnLCAqKmxvZ2luZm8pCisKKyAgICAgICAgb3AgPSAic2V0IgorICAgICAgICBpZiAicXVlcyIgaW4gZ3JvdXBkIGFuZCBncm91cGRbInF1ZXMiXSAhPSBOb25lOgorICAgICAgICAgICAgdmFsID0gc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkKKyAgICAgICAgICAgIG9wID0gInNldD8iCisgICAgICAgICAgICBpZiB2YWwgPT0gTm9uZToKKyAgICAgICAgICAgICAgICB2YWwgPSBncm91cGRbInZhbHVlIl0KKyAgICAgICAgZWxpZiAiY29sb24iIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJjb2xvbiJdICE9IE5vbmU6CisgICAgICAgICAgICBlID0gZGF0YS5jcmVhdGVDb3B5KCkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoZSkKKyAgICAgICAgICAgIG9wID0gImltbWVkaWF0ZSIKKyAgICAgICAgICAgIHZhbCA9IGUuZXhwYW5kKGdyb3VwZFsidmFsdWUiXSwga2V5ICsgIls6PV0iKQorICAgICAgICBlbGlmICJhcHBlbmQiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJhcHBlbmQiXSAhPSBOb25lOgorICAgICAgICAgICAgb3AgPSAiYXBwZW5kIgorICAgICAgICAgICAgdmFsID0gIiVzICVzIiAlICgoc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkgb3IgIiIpLCBncm91cGRbInZhbHVlIl0pCisgICAgICAgIGVsaWYgInByZXBlbmQiIGluIGdyb3VwZCBhbmQgZ3JvdXBkWyJwcmVwZW5kIl0gIT0gTm9uZToKKyAgICAgICAgICAgIG9wID0gInByZXBlbmQiCisgICAgICAgICAgICB2YWwgPSAiJXMgJXMiICUgKGdyb3VwZFsidmFsdWUiXSwgKHNlbGYuZ2V0RnVuYyhrZXksIGRhdGEpIG9yICIiKSkKKyAgICAgICAgZWxpZiAicG9zdGRvdCIgaW4gZ3JvdXBkIGFuZCBncm91cGRbInBvc3Rkb3QiXSAhPSBOb25lOgorICAgICAgICAgICAgb3AgPSAicG9zdGRvdCIKKyAgICAgICAgICAgIHZhbCA9ICIlcyVzIiAlICgoc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkgb3IgIiIpLCBncm91cGRbInZhbHVlIl0pCisgICAgICAgIGVsaWYgInByZWRvdCIgaW4gZ3JvdXBkIGFuZCBncm91cGRbInByZWRvdCJdICE9IE5vbmU6CisgICAgICAgICAgICBvcCA9ICJwcmVkb3QiCisgICAgICAgICAgICB2YWwgPSAiJXMlcyIgJSAoZ3JvdXBkWyJ2YWx1ZSJdLCAoc2VsZi5nZXRGdW5jKGtleSwgZGF0YSkgb3IgIiIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsID0gZ3JvdXBkWyJ2YWx1ZSJdCisKKyAgICAgICAgZmxhZyA9IE5vbmUKKyAgICAgICAgaWYgJ2ZsYWcnIGluIGdyb3VwZCBhbmQgZ3JvdXBkWydmbGFnJ10gIT0gTm9uZToKKyAgICAgICAgICAgIGZsYWcgPSBncm91cGRbJ2ZsYWcnXQorICAgICAgICBlbGlmIGdyb3VwZFsibGF6eXF1ZXMiXToKKyAgICAgICAgICAgIGZsYWcgPSAiX2RlZmF1bHR2YWwiCisKKyAgICAgICAgbG9naW5mb1snb3AnXSA9IG9wCisgICAgICAgIGxvZ2luZm9bJ2RldGFpbCddID0gZ3JvdXBkWyJ2YWx1ZSJdCisKKyAgICAgICAgaWYgZmxhZzoKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhrZXksIGZsYWcsIHZhbCwgKipsb2dpbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YS5zZXRWYXIoa2V5LCB2YWwsIHBhcnNpbmc9VHJ1ZSwgKipsb2dpbmZvKQorCitjbGFzcyBNZXRob2ROb2RlKEFzdE5vZGUpOgorICAgIHRyX3RibCA9IHN0cmluZy5tYWtldHJhbnMoJy8uKy1AJSYnLCAnX19fX19fXycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZnVuY19uYW1lLCBib2R5KToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmNfbmFtZSA9IGZ1bmNfbmFtZQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKyAgICAgICAgdGV4dCA9ICdcbicuam9pbihzZWxmLmJvZHkpCisgICAgICAgIGlmIHNlbGYuZnVuY19uYW1lID09ICJfX2Fub255bW91cyI6CisgICAgICAgICAgICBmdW5jbmFtZSA9ICgiX19hbm9uXyVzXyVzIiAlIChzZWxmLmxpbmVubywgc2VsZi5maWxlbmFtZS50cmFuc2xhdGUoTWV0aG9kTm9kZS50cl90YmwpKSkKKyAgICAgICAgICAgIHRleHQgPSAiZGVmICVzKGQpOlxuIiAlIChmdW5jbmFtZSkgKyB0ZXh0CisgICAgICAgICAgICBiYi5tZXRob2Rwb29sLmluc2VydF9tZXRob2QoZnVuY25hbWUsIHRleHQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICBhbm9uZnVuY3MgPSBkYXRhLmdldFZhcignX19CQkFOT05GVU5DUycsIEZhbHNlKSBvciBbXQorICAgICAgICAgICAgYW5vbmZ1bmNzLmFwcGVuZChmdW5jbmFtZSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCdfX0JCQU5PTkZVTkNTJywgYW5vbmZ1bmNzKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoZnVuY25hbWUsIHRleHQsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmZ1bmNfbmFtZSwgImZ1bmMiLCAxKQorICAgICAgICAgICAgZGF0YS5zZXRWYXIoc2VsZi5mdW5jX25hbWUsIHRleHQsIHBhcnNpbmc9VHJ1ZSkKKworY2xhc3MgUHl0aG9uTWV0aG9kTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIG1vZHVsZW5hbWUsIGJvZHkpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLm1vZHVsZW5hbWUgPSBtb2R1bGVuYW1lCisgICAgICAgIHNlbGYuYm9keSA9IGJvZHkKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICAjIE5vdGUgd2Ugd2lsbCBhZGQgcm9vdCB0byBwYXJzZWRtZXRob2RzIGFmdGVyIGhhdmluZyBwYXJzZQorICAgICAgICAjICd0aGlzJyBmaWxlLiBUaGlzIG1lYW5zIHdlIHdpbGwgbm90IHBhcnNlIG1ldGhvZHMgZnJvbQorICAgICAgICAjIGJiIGNsYXNzZXMgdHdpY2UKKyAgICAgICAgdGV4dCA9ICdcbicuam9pbihzZWxmLmJvZHkpCisgICAgICAgIGJiLm1ldGhvZHBvb2wuaW5zZXJ0X21ldGhvZChzZWxmLm1vZHVsZW5hbWUsIHRleHQsIHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmZ1bmN0aW9uLCAiZnVuYyIsIDEpCisgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmZ1bmN0aW9uLCAicHl0aG9uIiwgMSkKKyAgICAgICAgZGF0YS5zZXRWYXIoc2VsZi5mdW5jdGlvbiwgdGV4dCwgcGFyc2luZz1UcnVlKQorCitjbGFzcyBNZXRob2RGbGFnc05vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGtleSwgbSk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi5tID0gbQorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIGRhdGEuZ2V0VmFyKHNlbGYua2V5LCBGYWxzZSk6CisgICAgICAgICAgICAjIGNsZWFuIHVwIG9sZCB2ZXJzaW9uIG9mIHRoaXMgcGllY2Ugb2YgbWV0YWRhdGEsIGFzIGl0cworICAgICAgICAgICAgIyBmbGFncyBjb3VsZCBjYXVzZSBwcm9ibGVtcworICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYua2V5LCAncHl0aG9uJywgTm9uZSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhzZWxmLmtleSwgJ2Zha2Vyb290JywgTm9uZSkKKyAgICAgICAgaWYgc2VsZi5tLmdyb3VwKCJweSIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYua2V5LCAicHl0aG9uIiwgIjEiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YS5kZWxWYXJGbGFnKHNlbGYua2V5LCAicHl0aG9uIikKKyAgICAgICAgaWYgc2VsZi5tLmdyb3VwKCJmciIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKHNlbGYua2V5LCAiZmFrZXJvb3QiLCAiMSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhLmRlbFZhckZsYWcoc2VsZi5rZXksICJmYWtlcm9vdCIpCisKK2NsYXNzIEV4cG9ydEZ1bmNzTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZm5zLCBjbGFzc25hbWUpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYubiA9IGZucy5zcGxpdCgpCisgICAgICAgIHNlbGYuY2xhc3NuYW1lID0gY2xhc3NuYW1lCisKKyAgICBkZWYgZXZhbChzZWxmLCBkYXRhKToKKworICAgICAgICBmb3IgZnVuYyBpbiBzZWxmLm46CisgICAgICAgICAgICBjYWxsZWRmdW5jID0gc2VsZi5jbGFzc25hbWUgKyAiXyIgKyBmdW5jCisKKyAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyKGZ1bmMsIEZhbHNlKSBhbmQgbm90IGRhdGEuZ2V0VmFyRmxhZyhmdW5jLCAnZXhwb3J0X2Z1bmMnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBkYXRhLmdldFZhcihmdW5jLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGZ1bmMsICdweXRob24nLCBOb25lKQorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCAnZnVuYycsIE5vbmUpCisKKyAgICAgICAgICAgIGZvciBmbGFnIGluIFsgImZ1bmMiLCAicHl0aG9uIiBdOgorICAgICAgICAgICAgICAgIGlmIGRhdGEuZ2V0VmFyRmxhZyhjYWxsZWRmdW5jLCBmbGFnKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXJGbGFnKGZ1bmMsIGZsYWcsIGRhdGEuZ2V0VmFyRmxhZyhjYWxsZWRmdW5jLCBmbGFnKSkKKyAgICAgICAgICAgIGZvciBmbGFnIGluIFsgImRpcnMiIF06CisgICAgICAgICAgICAgICAgaWYgZGF0YS5nZXRWYXJGbGFnKGZ1bmMsIGZsYWcpOgorICAgICAgICAgICAgICAgICAgICBkYXRhLnNldFZhckZsYWcoY2FsbGVkZnVuYywgZmxhZywgZGF0YS5nZXRWYXJGbGFnKGZ1bmMsIGZsYWcpKQorCisgICAgICAgICAgICBpZiBkYXRhLmdldFZhckZsYWcoY2FsbGVkZnVuYywgInB5dGhvbiIpOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKGZ1bmMsICIgICAgYmIuYnVpbGQuZXhlY19mdW5jKCciICsgY2FsbGVkZnVuYyArICInLCBkKVxuIiwgcGFyc2luZz1UcnVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiAiLSIgaW4gc2VsZi5jbGFzc25hbWU6CisgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZSBjbGFzc25hbWUgJXMgY29udGFpbnMgYSBkYXNoIGNoYXJhY3RlciBhbmQgaXMgY2FsbGluZyBhbiBzaCBmdW5jdGlvbiAlcyB1c2luZyBFWFBPUlRfRlVOQ1RJT05TLiBTaW5jZSBhIGRhc2ggaXMgaWxsZWdhbCBpbiBzaCBmdW5jdGlvbiBuYW1lcywgdGhpcyBjYW5ub3Qgd29yaywgcGxlYXNlIHJlbmFtZSB0aGUgY2xhc3Mgb3IgZG9uJ3QgdXNlIEVYUE9SVF9GVU5DVElPTlMuIiAlIChzZWxmLmNsYXNzbmFtZSwgY2FsbGVkZnVuYykpCisgICAgICAgICAgICAgICAgZGF0YS5zZXRWYXIoZnVuYywgIiAgICAiICsgY2FsbGVkZnVuYyArICJcbiIsIHBhcnNpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhmdW5jLCAnZXhwb3J0X2Z1bmMnLCAnMScpCisKK2NsYXNzIEFkZFRhc2tOb2RlKEFzdE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jLCBiZWZvcmUsIGFmdGVyKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIHNlbGYuYmVmb3JlID0gYmVmb3JlCisgICAgICAgIHNlbGYuYWZ0ZXIgPSBhZnRlcgorCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGJiLmJ1aWxkLmFkZHRhc2soc2VsZi5mdW5jLCBzZWxmLmJlZm9yZSwgc2VsZi5hZnRlciwgZGF0YSkKKworY2xhc3MgRGVsVGFza05vZGUoQXN0Tm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmMpOgorICAgICAgICBBc3ROb2RlLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHNlbGYuZnVuYywgZGF0YSkKKworY2xhc3MgQkJIYW5kbGVyTm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgZm5zKToKKyAgICAgICAgQXN0Tm9kZS5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBzZWxmLmhzID0gZm5zLnNwbGl0KCkKKworICAgIGRlZiBldmFsKHNlbGYsIGRhdGEpOgorICAgICAgICBiYmhhbmRzID0gZGF0YS5nZXRWYXIoJ19fQkJIQU5ETEVSUycsIEZhbHNlKSBvciBbXQorICAgICAgICBmb3IgaCBpbiBzZWxmLmhzOgorICAgICAgICAgICAgYmJoYW5kcy5hcHBlbmQoaCkKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyRmxhZyhoLCAiaGFuZGxlciIsIDEpCisgICAgICAgIGRhdGEuc2V0VmFyKCdfX0JCSEFORExFUlMnLCBiYmhhbmRzKQorCitjbGFzcyBJbmhlcml0Tm9kZShBc3ROb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubywgY2xhc3Nlcyk6CisgICAgICAgIEFzdE5vZGUuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY2xhc3NlcworCisgICAgZGVmIGV2YWwoc2VsZiwgZGF0YSk6CisgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5pbmhlcml0KHNlbGYuY2xhc3Nlcywgc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIGRhdGEpCisKK2RlZiBoYW5kbGVJbmNsdWRlKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0sIGZvcmNlKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChJbmNsdWRlTm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpLCBmb3JjZSkpCisKK2RlZiBoYW5kbGVFeHBvcnQoc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgbSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoRXhwb3J0Tm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpKSkKKworZGVmIGhhbmRsZURhdGEoc3RhdGVtZW50cywgZmlsZW5hbWUsIGxpbmVubywgZ3JvdXBkKToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChEYXRhTm9kZShmaWxlbmFtZSwgbGluZW5vLCBncm91cGQpKQorCitkZWYgaGFuZGxlTWV0aG9kKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNfbmFtZSwgYm9keSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoTWV0aG9kTm9kZShmaWxlbmFtZSwgbGluZW5vLCBmdW5jX25hbWUsIGJvZHkpKQorCitkZWYgaGFuZGxlUHl0aG9uTWV0aG9kKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBtb2R1bGVuYW1lLCBib2R5KToKKyAgICBzdGF0ZW1lbnRzLmFwcGVuZChQeXRob25NZXRob2ROb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGZ1bmNuYW1lLCBtb2R1bGVuYW1lLCBib2R5KSkKKworZGVmIGhhbmRsZU1ldGhvZEZsYWdzKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIGtleSwgbSk6CisgICAgc3RhdGVtZW50cy5hcHBlbmQoTWV0aG9kRmxhZ3NOb2RlKGZpbGVuYW1lLCBsaW5lbm8sIGtleSwgbSkpCisKK2RlZiBoYW5kbGVFeHBvcnRGdW5jcyhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtLCBjbGFzc25hbWUpOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKEV4cG9ydEZ1bmNzTm9kZShmaWxlbmFtZSwgbGluZW5vLCBtLmdyb3VwKDEpLCBjbGFzc25hbWUpKQorCitkZWYgaGFuZGxlQWRkVGFzayhzdGF0ZW1lbnRzLCBmaWxlbmFtZSwgbGluZW5vLCBtKToKKyAgICBmdW5jID0gbS5ncm91cCgiZnVuYyIpCisgICAgYmVmb3JlID0gbS5ncm91cCgiYmVmb3JlIikKKyAgICBhZnRlciA9IG0uZ3JvdXAoImFmdGVyIikKKyAgICBpZiBmdW5jIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgc3RhdGVtZW50cy5hcHBlbmQoQWRkVGFza05vZGUoZmlsZW5hbWUsIGxpbmVubywgZnVuYywgYmVmb3JlLCBhZnRlcikpCisKK2RlZiBoYW5kbGVEZWxUYXNrKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIGZ1bmMgPSBtLmdyb3VwKCJmdW5jIikKKyAgICBpZiBmdW5jIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgc3RhdGVtZW50cy5hcHBlbmQoRGVsVGFza05vZGUoZmlsZW5hbWUsIGxpbmVubywgZnVuYykpCisKK2RlZiBoYW5kbGVCQkhhbmRsZXJzKHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIHN0YXRlbWVudHMuYXBwZW5kKEJCSGFuZGxlck5vZGUoZmlsZW5hbWUsIGxpbmVubywgbS5ncm91cCgxKSkpCisKK2RlZiBoYW5kbGVJbmhlcml0KHN0YXRlbWVudHMsIGZpbGVuYW1lLCBsaW5lbm8sIG0pOgorICAgIGNsYXNzZXMgPSBtLmdyb3VwKDEpCisgICAgc3RhdGVtZW50cy5hcHBlbmQoSW5oZXJpdE5vZGUoZmlsZW5hbWUsIGxpbmVubywgY2xhc3NlcykpCisKK2RlZiBmaW5hbGl6ZShmbiwgZCwgdmFyaWFudCA9IE5vbmUpOgorICAgIGFsbF9oYW5kbGVycyA9IHt9CisgICAgZm9yIHZhciBpbiBkLmdldFZhcignX19CQkhBTkRMRVJTJywgRmFsc2UpIG9yIFtdOgorICAgICAgICAjIHRyeSB0byBhZGQgdGhlIGhhbmRsZXIKKyAgICAgICAgYmIuZXZlbnQucmVnaXN0ZXIodmFyLCBkLmdldFZhcih2YXIsIEZhbHNlKSwgKGQuZ2V0VmFyRmxhZyh2YXIsICJldmVudG1hc2siLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UoZm4pLCBkKQorCisgICAgYmIuZGF0YS5leHBhbmRLZXlzKGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorICAgIGNvZGUgPSBbXQorICAgIGZvciBmdW5jbmFtZSBpbiBkLmdldFZhcigiX19CQkFOT05GVU5DUyIsIEZhbHNlKSBvciBbXToKKyAgICAgICAgY29kZS5hcHBlbmQoIiVzKGQpIiAlIGZ1bmNuYW1lKQorICAgIGJiLnV0aWxzLmJldHRlcl9leGVjKCJcbiIuam9pbihjb2RlKSwgeyJkIjogZH0pCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShkKQorCisgICAgdGFza2xpc3QgPSBkLmdldFZhcignX19CQlRBU0tTJywgRmFsc2UpIG9yIFtdCisgICAgYmIuYnVpbGQuYWRkX3Rhc2tzKHRhc2tsaXN0LCBkKQorCisgICAgYmIucGFyc2Uuc2lnZ2VuLmZpbmFsaXNlKGZuLCBkLCB2YXJpYW50KQorCisgICAgZC5zZXRWYXIoJ0JCSU5DTFVERUQnLCBiYi5wYXJzZS5nZXRfZmlsZV9kZXBlbmRzKGQpKQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5SZWNpcGVQYXJzZWQoZm4pLCBkKQorCitkZWYgX2NyZWF0ZV92YXJpYW50cyhkYXRhc3RvcmVzLCBuYW1lcywgZnVuY3Rpb24sIG9ubHlmaW5hbGlzZSk6CisgICAgZGVmIGNyZWF0ZV92YXJpYW50KG5hbWUsIG9yaWdfZCwgYXJnID0gTm9uZSk6CisgICAgICAgIGlmIG9ubHlmaW5hbGlzZSBhbmQgbmFtZSBub3QgaW4gb25seWZpbmFsaXNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG5ld19kID0gYmIuZGF0YS5jcmVhdGVDb3B5KG9yaWdfZCkKKyAgICAgICAgZnVuY3Rpb24oYXJnIG9yIG5hbWUsIG5ld19kKQorICAgICAgICBkYXRhc3RvcmVzW25hbWVdID0gbmV3X2QKKworICAgIGZvciB2YXJpYW50LCB2YXJpYW50X2QgaW4gZGF0YXN0b3Jlcy5pdGVtcygpOgorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCB2YXJpYW50OgorICAgICAgICAgICAgICAgICMgQmFzZWQgb24gbWFpbiByZWNpcGUKKyAgICAgICAgICAgICAgICBjcmVhdGVfdmFyaWFudChuYW1lLCB2YXJpYW50X2QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNyZWF0ZV92YXJpYW50KCIlcy0lcyIgJSAodmFyaWFudCwgbmFtZSksIHZhcmlhbnRfZCwgbmFtZSkKKworZGVmIF9leHBhbmRfdmVyc2lvbnModmVyc2lvbnMpOgorICAgIGRlZiBleHBhbmRfb25lKHZlcnNpb24sIHN0YXJ0LCBlbmQpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc3RhcnQsIGVuZCArIDEpOgorICAgICAgICAgICAgdmVyID0gX2JidmVyc2lvbnNfcmUuc3ViKHN0cihpKSwgdmVyc2lvbiwgMSkKKyAgICAgICAgICAgIHlpZWxkIHZlcgorCisgICAgdmVyc2lvbnMgPSBpdGVyKHZlcnNpb25zKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZlcnNpb24gPSBuZXh0KHZlcnNpb25zKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmFuZ2VfdmVyID0gX2JidmVyc2lvbnNfcmUuc2VhcmNoKHZlcnNpb24pCisgICAgICAgIGlmIG5vdCByYW5nZV92ZXI6CisgICAgICAgICAgICB5aWVsZCB2ZXJzaW9uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXd2ZXJzaW9ucyA9IGV4cGFuZF9vbmUodmVyc2lvbiwgaW50KHJhbmdlX3Zlci5ncm91cCgiZnJvbSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQocmFuZ2VfdmVyLmdyb3VwKCJ0byIpKSkKKyAgICAgICAgICAgIHZlcnNpb25zID0gaXRlcnRvb2xzLmNoYWluKG5ld3ZlcnNpb25zLCB2ZXJzaW9ucykKKworZGVmIG11bHRpX2ZpbmFsaXplKGZuLCBkKToKKyAgICBhcHBlbmRzID0gKGQuZ2V0VmFyKCJfX0JCQVBQRU5EIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgYXBwZW5kIGluIGFwcGVuZHM6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiQXBwZW5kaW5nIC5iYmFwcGVuZCBmaWxlICVzIHRvICVzIiwgYXBwZW5kLCBmbikKKyAgICAgICAgYmIucGFyc2UuQkJIYW5kbGVyLmhhbmRsZShhcHBlbmQsIGQsIFRydWUpCisKKyAgICBvbmx5ZmluYWxpc2UgPSBkLmdldFZhcigiX19PTkxZRklOQUxJU0UiLCBGYWxzZSkKKworICAgIHNhZmVfZCA9IGQKKyAgICBkID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNhZmVfZCkKKyAgICB0cnk6CisgICAgICAgIGZpbmFsaXplKGZuLCBkKQorICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlIGFzIGU6CisgICAgICAgIGQuc2V0VmFyKCJfX1NLSVBQRUQiLCBlLmFyZ3NbMF0pCisgICAgZGF0YXN0b3JlcyA9IHsiIjogc2FmZV9kfQorCisgICAgdmVyc2lvbnMgPSAoZC5nZXRWYXIoIkJCVkVSU0lPTlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIHZlcnNpb25zOgorICAgICAgICBwdiA9IG9yaWdfcHYgPSBkLmdldFZhcigiUFYiLCBUcnVlKQorICAgICAgICBiYXNldmVyc2lvbnMgPSB7fQorCisgICAgICAgIGRlZiB2ZXJmdW5jKHZlciwgZCwgcHZfZCA9IE5vbmUpOgorICAgICAgICAgICAgaWYgcHZfZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHB2X2QgPSBkCisKKyAgICAgICAgICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgICAgICAgICBwdl9kLnNldFZhcigiUFYiLCB2ZXIpCisgICAgICAgICAgICBvdmVycmlkZXMuYXBwZW5kKHZlcikKKyAgICAgICAgICAgIGJwdiA9IGJhc2V2ZXJzaW9ucy5nZXQodmVyKSBvciBvcmlnX3B2CisgICAgICAgICAgICBwdl9kLnNldFZhcigiQlBWIiwgYnB2KQorICAgICAgICAgICAgb3ZlcnJpZGVzLmFwcGVuZChicHYpCisgICAgICAgICAgICBkLnNldFZhcigiT1ZFUlJJREVTIiwgIjoiLmpvaW4ob3ZlcnJpZGVzKSkKKworICAgICAgICB2ZXJzaW9ucyA9IGxpc3QoX2V4cGFuZF92ZXJzaW9ucyh2ZXJzaW9ucykpCisgICAgICAgIGZvciBwb3MsIHZlcnNpb24gaW4gZW51bWVyYXRlKGxpc3QodmVyc2lvbnMpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwdiwgYnB2ID0gdmVyc2lvbi5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcnNpb25zW3Bvc10gPSBwdgorICAgICAgICAgICAgICAgIGJhc2V2ZXJzaW9uc1twdl0gPSBicHYKKworICAgICAgICBpZiBwdiBpbiB2ZXJzaW9ucyBhbmQgbm90IGJhc2V2ZXJzaW9ucy5nZXQocHYpOgorICAgICAgICAgICAgdmVyc2lvbnMucmVtb3ZlKHB2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHYgPSB2ZXJzaW9ucy5wb3AoKQorCisgICAgICAgICAgICAjIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3VyIGV4aXN0aW5nIG1haW4gZGF0YXN0b3JlCisgICAgICAgICAgICAjIGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkIHdpdGggdGhlIG9sZCBQViwgd2UgbmVlZCBvbmUKKyAgICAgICAgICAgICMgdGhhdCdzIGJlZW4gZmluYWxpemVkIHdpdGggdGhlIG5ldyBQVi4KKyAgICAgICAgICAgIGQgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2FmZV9kKQorICAgICAgICAgICAgdmVyZnVuYyhwdiwgZCwgc2FmZV9kKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbmFsaXplKGZuLCBkKQorICAgICAgICAgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGUgYXMgZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQorCisgICAgICAgIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgdmVyc2lvbnMsIHZlcmZ1bmMsIG9ubHlmaW5hbGlzZSkKKworICAgIGV4dGVuZGVkID0gZC5nZXRWYXIoIkJCQ0xBU1NFWFRFTkQiLCBUcnVlKSBvciAiIgorICAgIGlmIGV4dGVuZGVkOgorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgaXMgdG8gc3VwcG9ydCBiYmV4dGVuZHMgd2l0aCBhcmd1bWVudHMsIGZvciBlLmcuIG11bHRpbGliCisgICAgICAgICMgYW4gZXhhbXBsZSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAjICAgQkJDTEFTU0VYVEVORCA9ICJtdWx0aWxpYjpsaWIzMiIKKyAgICAgICAgIyBpdCB3aWxsIGNyZWF0ZSBmb28tbGliMzIsIGluaGVyaXRpbmcgbXVsdGlsaWIuYmJjbGFzcyBhbmQgc2V0CisgICAgICAgICMgQkJFWFRFTkRDVVJSIHRvICJtdWx0aWxpYiIgYW5kIEJCRVhURU5EVkFSSUFOVCB0byAibGliMzIiCisgICAgICAgIGV4dGVuZGVkbWFwID0ge30KKyAgICAgICAgdmFyaWFudG1hcCA9IHt9CisKKyAgICAgICAgZm9yIGV4dCBpbiBleHRlbmRlZC5zcGxpdCgpOgorICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicsIDIpCisgICAgICAgICAgICBpZiBsZW4oZWV4dCkgPiAxOgorICAgICAgICAgICAgICAgIGV4dGVuZGVkbWFwW2V4dF0gPSBlZXh0WzBdCisgICAgICAgICAgICAgICAgdmFyaWFudG1hcFtleHRdID0gZWV4dFsxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHRlbmRlZG1hcFtleHRdID0gZXh0CisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBkZWYgZXh0ZW5kZnVuYyhuYW1lLCBkKToKKyAgICAgICAgICAgIGlmIG5hbWUgIT0gZXh0ZW5kZWRtYXBbbmFtZV06CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkJCRVhURU5EQ1VSUiIsIGV4dGVuZGVkbWFwW25hbWVdKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJCQkVYVEVORFZBUklBTlQiLCB2YXJpYW50bWFwW25hbWVdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiUE4iLCAiJXMtJXMiICUgKHBuLCBuYW1lKSkKKyAgICAgICAgICAgIGJiLnBhcnNlLkJCSGFuZGxlci5pbmhlcml0KGV4dGVuZGVkbWFwW25hbWVdLCBmbiwgMCwgZCkKKworICAgICAgICBzYWZlX2Quc2V0VmFyKCJCQkNMQVNTRVhURU5EIiwgZXh0ZW5kZWQpCisgICAgICAgIF9jcmVhdGVfdmFyaWFudHMoZGF0YXN0b3JlcywgZXh0ZW5kZWRtYXAua2V5cygpLCBleHRlbmRmdW5jLCBvbmx5ZmluYWxpc2UpCisKKyAgICBmb3IgdmFyaWFudCwgdmFyaWFudF9kIGluIGRhdGFzdG9yZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIHZhcmlhbnQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9ubHlmaW5hbGlzZSBvciB2YXJpYW50IGluIG9ubHlmaW5hbGlzZToKKyAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoZm4sIHZhcmlhbnRfZCwgdmFyaWFudCkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wYXJzZS5Ta2lwUmVjaXBlIGFzIGU6CisgICAgICAgICAgICAgICAgdmFyaWFudF9kLnNldFZhcigiX19TS0lQUEVEIiwgZS5hcmdzWzBdKQorCisgICAgaWYgbGVuKGRhdGFzdG9yZXMpID4gMToKKyAgICAgICAgdmFyaWFudHMgPSBmaWx0ZXIoTm9uZSwgZGF0YXN0b3Jlcy5pdGVya2V5cygpKQorICAgICAgICBzYWZlX2Quc2V0VmFyKCJfX1ZBUklBTlRTIiwgIiAiLmpvaW4odmFyaWFudHMpKQorCisgICAgZGF0YXN0b3Jlc1siIl0gPSBkCisgICAgcmV0dXJuIGRhdGFzdG9yZXMKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weSBiL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0JCSGFuZGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA5N2JhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcGFyc2UvcGFyc2VfcHkvQkJIYW5kbGVyLnB5CkBAIC0wLDAgKzEsMjY1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKKyAgIGNsYXNzIGZvciBoYW5kbGluZyAuYmIgZmlsZXMKKworICAgUmVhZHMgYSAuYmIgZmlsZSBhbmQgb2J0YWlucyBpdHMgbWV0YWRhdGEKKworIiIiCisKKworIyAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUGhpbCBCbHVuZGVsbAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2ltcG9ydCByZSwgYmIsIG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiLmJ1aWxkLCBiYi51dGlscworZnJvbSBiYiBpbXBvcnQgZGF0YQorCitmcm9tIC4gaW1wb3J0IENvbmZIYW5kbGVyCitmcm9tIC4uIGltcG9ydCByZXNvbHZlX2ZpbGUsIGFzdCwgbG9nZ2VyLCBQYXJzZUVycm9yCitmcm9tIC5Db25mSGFuZGxlciBpbXBvcnQgaW5jbHVkZSwgaW5pdAorCisjIEZvciBjb21wYXRpYmlsaXR5CitiYi5kZXByZWNhdGVfaW1wb3J0KF9fbmFtZV9fLCAiYmIucGFyc2UiLCBbInZhcnNfZnJvbV9maWxlIl0pCisKK19fZnVuY19zdGFydF9yZWdleHBfXyAgICA9IHJlLmNvbXBpbGUoIHIiKCgoP1A8cHk+cHl0aG9uKXwoP1A8ZnI+ZmFrZXJvb3QpKVxzKikqKD9QPGZ1bmM+W1x3XC5cLVwrXHtcfVwkXSspP1xzKlwoXHMqXClccyp7JCIgKQorX19pbmhlcml0X3JlZ2V4cF9fICAgICAgID0gcmUuY29tcGlsZSggciJpbmhlcml0XHMrKC4rKSIgKQorX19leHBvcnRfZnVuY19yZWdleHBfXyAgID0gcmUuY29tcGlsZSggciJFWFBPUlRfRlVOQ1RJT05TXHMrKC4rKSIgKQorX19hZGR0YXNrX3JlZ2V4cF9fICAgICAgID0gcmUuY29tcGlsZSgiYWRkdGFza1xzKyg/UDxmdW5jPlx3KylccyooKGJlZm9yZVxzKig/UDxiZWZvcmU+KCguKig/PWFmdGVyKSl8KC4qKSkpKXwoYWZ0ZXJccyooP1A8YWZ0ZXI+KCguKig/PWJlZm9yZSkpfCguKikpKSkpKiIpCitfX2RlbHRhc2tfcmVnZXhwX18gICAgICAgPSByZS5jb21waWxlKCJkZWx0YXNrXHMrKD9QPGZ1bmM+XHcrKSIpCitfX2FkZGhhbmRsZXJfcmVnZXhwX18gICAgPSByZS5jb21waWxlKCByImFkZGhhbmRsZXJccysoLispIiApCitfX2RlZl9yZWdleHBfXyAgICAgICAgICAgPSByZS5jb21waWxlKCByImRlZlxzKyhcdyspLio6IiApCitfX3B5dGhvbl9mdW5jX3JlZ2V4cF9fICAgPSByZS5jb21waWxlKCByIihccysuKil8KF4kKSIgKQorCisKK19faW5mdW5jX18gPSBbXQorX19pbnB5dGhvbl9fID0gRmFsc2UKK19fYm9keV9fICAgPSBbXQorX19jbGFzc25hbWVfXyA9ICIiCisKK2NhY2hlZF9zdGF0ZW1lbnRzID0ge30KKworIyBXZSBuZWVkIHRvIGluZGljYXRlIEVPRiB0byB0aGUgZmVlZGVyLiBUaGlzIGNvZGUgaXMgc28gbWVzc3kgdGhhdAorIyBmYWN0b3JpbmcgaXQgb3V0IHRvIGEgY2xvc2VfcGFyc2VfZmlsZSBtZXRob2QgaXMgb3V0IG9mIHF1ZXN0aW9uLgorIyBXZSB3aWxsIHVzZSB0aGUgSU5fUFlUSE9OX0VPRiBhcyBhbiBpbmRpY2F0b3IgdG8ganVzdCBjbG9zZSB0aGUgbWV0aG9kCisjCisjIFRoZSB0d28gcGFydHMgdXNpbmcgaXQgYXJlIHRpZ2h0bHkgaW50ZWdyYXRlZCBhbnl3YXkKK0lOX1BZVEhPTl9FT0YgPSAtOTk5OTk5OTk5OTk5OQorCisKKworZGVmIHN1cHBvcnRzKGZuLCBkKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBmbiBoYXMgYSBzdXBwb3J0ZWQgZXh0ZW5zaW9uIiIiCisgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZm4pWy0xXSBpbiBbIi5iYiIsICIuYmJjbGFzcyIsICIuaW5jIl0KKworZGVmIGluaGVyaXQoZmlsZXMsIGZuLCBsaW5lbm8sIGQpOgorICAgIF9faW5oZXJpdF9jYWNoZSA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICBmaWxlcyA9IGQuZXhwYW5kKGZpbGVzKS5zcGxpdCgpCisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGUpIGFuZCBub3QgZmlsZS5lbmRzd2l0aCgiLmJiY2xhc3MiKToKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4oJ2NsYXNzZXMnLCAnJXMuYmJjbGFzcycgJSBmaWxlKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGUpOgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpCisgICAgICAgICAgICBhYnNfZm4sIGF0dGVtcHRzID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBmaWxlLCBoaXN0b3J5PVRydWUpCisgICAgICAgICAgICBmb3IgYWYgaW4gYXR0ZW1wdHM6CisgICAgICAgICAgICAgICAgaWYgYWYgIT0gYWJzX2ZuOgorICAgICAgICAgICAgICAgICAgICBiYi5wYXJzZS5tYXJrX2RlcGVuZGVuY3koZCwgYWYpCisgICAgICAgICAgICBpZiBhYnNfZm46CisgICAgICAgICAgICAgICAgZmlsZSA9IGFic19mbgorCisgICAgICAgIGlmIG5vdCBmaWxlIGluIF9faW5oZXJpdF9jYWNoZToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiSW5oZXJpdGluZyAlcyAoZnJvbSAlczolZCkiICUgKGZpbGUsIGZuLCBsaW5lbm8pKQorICAgICAgICAgICAgX19pbmhlcml0X2NhY2hlLmFwcGVuZCggZmlsZSApCisgICAgICAgICAgICBkLnNldFZhcignX19pbmhlcml0X2NhY2hlJywgX19pbmhlcml0X2NhY2hlKQorICAgICAgICAgICAgaW5jbHVkZShmbiwgZmlsZSwgbGluZW5vLCBkLCAiaW5oZXJpdCIpCisgICAgICAgICAgICBfX2luaGVyaXRfY2FjaGUgPSBkLmdldFZhcignX19pbmhlcml0X2NhY2hlJywgRmFsc2UpIG9yIFtdCisKK2RlZiBnZXRfc3RhdGVtZW50cyhmaWxlbmFtZSwgYWJzb2x1dGVfZmlsZW5hbWUsIGJhc2VfbmFtZSk6CisgICAgZ2xvYmFsIGNhY2hlZF9zdGF0ZW1lbnRzCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBjYWNoZWRfc3RhdGVtZW50c1thYnNvbHV0ZV9maWxlbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGZpbGUgPSBvcGVuKGFic29sdXRlX2ZpbGVuYW1lLCAncicpCisgICAgICAgIHN0YXRlbWVudHMgPSBhc3QuU3RhdGVtZW50R3JvdXAoKQorCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmVubyA9IGxpbmVubyArIDEKKyAgICAgICAgICAgIHMgPSBmaWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBzOiBicmVhaworICAgICAgICAgICAgcyA9IHMucnN0cmlwKCkKKyAgICAgICAgICAgIGZlZWRlcihsaW5lbm8sIHMsIGZpbGVuYW1lLCBiYXNlX25hbWUsIHN0YXRlbWVudHMpCisgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBpZiBfX2lucHl0aG9uX186CisgICAgICAgICAgICAjIGFkZCBhIGJsYW5rIGxpbmUgdG8gY2xvc2Ugb3V0IGFueSBweXRob24gZGVmaW5pdGlvbgorICAgICAgICAgICAgZmVlZGVyKElOX1BZVEhPTl9FT0YsICIiLCBmaWxlbmFtZSwgYmFzZV9uYW1lLCBzdGF0ZW1lbnRzKQorCisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIuYmJjbGFzcyIpIG9yIGZpbGVuYW1lLmVuZHN3aXRoKCIuaW5jIik6CisgICAgICAgICAgICBjYWNoZWRfc3RhdGVtZW50c1thYnNvbHV0ZV9maWxlbmFtZV0gPSBzdGF0ZW1lbnRzCisgICAgICAgIHJldHVybiBzdGF0ZW1lbnRzCisKK2RlZiBoYW5kbGUoZm4sIGQsIGluY2x1ZGUpOgorICAgIGdsb2JhbCBfX2Z1bmNfc3RhcnRfcmVnZXhwX18sIF9faW5oZXJpdF9yZWdleHBfXywgX19leHBvcnRfZnVuY19yZWdleHBfXywgX19hZGR0YXNrX3JlZ2V4cF9fLCBfX2FkZGhhbmRsZXJfcmVnZXhwX18sIF9faW5mdW5jX18sIF9fYm9keV9fLCBfX3Jlc2lkdWVfXywgX19jbGFzc25hbWVfXworICAgIF9fYm9keV9fID0gW10KKyAgICBfX2luZnVuY19fID0gW10KKyAgICBfX2NsYXNzbmFtZV9fID0gIiIKKyAgICBfX3Jlc2lkdWVfXyA9IFtdCisKKyAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZuKQorICAgIChyb290LCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChiYXNlX25hbWUpCisgICAgaW5pdChkKQorCisgICAgaWYgZXh0ID09ICIuYmJjbGFzcyI6CisgICAgICAgIF9fY2xhc3NuYW1lX18gPSByb290CisgICAgICAgIF9faW5oZXJpdF9jYWNoZSA9IGQuZ2V0VmFyKCdfX2luaGVyaXRfY2FjaGUnLCBGYWxzZSkgb3IgW10KKyAgICAgICAgaWYgbm90IGZuIGluIF9faW5oZXJpdF9jYWNoZToKKyAgICAgICAgICAgIF9faW5oZXJpdF9jYWNoZS5hcHBlbmQoZm4pCisgICAgICAgICAgICBkLnNldFZhcignX19pbmhlcml0X2NhY2hlJywgX19pbmhlcml0X2NhY2hlKQorCisgICAgaWYgaW5jbHVkZSAhPSAwOgorICAgICAgICBvbGRmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkKKyAgICBlbHNlOgorICAgICAgICBvbGRmaWxlID0gTm9uZQorCisgICAgYWJzX2ZuID0gcmVzb2x2ZV9maWxlKGZuLCBkKQorCisgICAgaWYgaW5jbHVkZToKKyAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGQsIGFic19mbikKKworICAgICMgYWN0dWFsIGxvYWRpbmcKKyAgICBzdGF0ZW1lbnRzID0gZ2V0X3N0YXRlbWVudHMoZm4sIGFic19mbiwgYmFzZV9uYW1lKQorCisgICAgIyBET05FIFdJVEggUEFSU0lORy4uLiB0aW1lIHRvIGV2YWx1YXRlCisgICAgaWYgZXh0ICE9ICIuYmJjbGFzcyIgYW5kIGFic19mbiAhPSBvbGRmaWxlOgorICAgICAgICBkLnNldFZhcignRklMRScsIGFic19mbikKKworICAgIHRyeToKKyAgICAgICAgc3RhdGVtZW50cy5ldmFsKGQpCisgICAgZXhjZXB0IGJiLnBhcnNlLlNraXBSZWNpcGU6CisgICAgICAgIGJiLmRhdGEuc2V0VmFyKCJfX1NLSVBQRUQiLCBUcnVlLCBkKQorICAgICAgICBpZiBpbmNsdWRlID09IDA6CisgICAgICAgICAgICByZXR1cm4geyAiIiA6IGQgfQorCisgICAgaWYgX19pbmZ1bmNfXzoKKyAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiU2hlbGwgZnVuY3Rpb24gJXMgaXMgbmV2ZXIgY2xvc2VkIiAlIF9faW5mdW5jX19bMF0sIF9faW5mdW5jX19bMV0sIF9faW5mdW5jX19bMl0pCisgICAgaWYgX19yZXNpZHVlX186CisgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkxlZnRvdmVyIHVucGFyc2VkIChpbmNvbXBsZXRlPykgZGF0YSAlcyBmcm9tICVzIiAlIF9fcmVzaWR1ZV9fLCBmbikKKworICAgIGlmIGV4dCAhPSAiLmJiY2xhc3MiIGFuZCBpbmNsdWRlID09IDA6CisgICAgICAgIHJldHVybiBhc3QubXVsdGlfZmluYWxpemUoZm4sIGQpCisKKyAgICBpZiBleHQgIT0gIi5iYmNsYXNzIiBhbmQgb2xkZmlsZSBhbmQgYWJzX2ZuICE9IG9sZGZpbGU6CisgICAgICAgIGQuc2V0VmFyKCJGSUxFIiwgb2xkZmlsZSkKKworICAgIHJldHVybiBkCisKK2RlZiBmZWVkZXIobGluZW5vLCBzLCBmbiwgcm9vdCwgc3RhdGVtZW50cyk6CisgICAgZ2xvYmFsIF9fZnVuY19zdGFydF9yZWdleHBfXywgX19pbmhlcml0X3JlZ2V4cF9fLCBfX2V4cG9ydF9mdW5jX3JlZ2V4cF9fLCBfX2FkZHRhc2tfcmVnZXhwX18sIF9fYWRkaGFuZGxlcl9yZWdleHBfXywgX19kZWZfcmVnZXhwX18sIF9fcHl0aG9uX2Z1bmNfcmVnZXhwX18sIF9faW5weXRob25fXywgX19pbmZ1bmNfXywgX19ib2R5X18sIGJiLCBfX3Jlc2lkdWVfXywgX19jbGFzc25hbWVfXworICAgIGlmIF9faW5mdW5jX186CisgICAgICAgIGlmIHMgPT0gJ30nOgorICAgICAgICAgICAgX19ib2R5X18uYXBwZW5kKCcnKQorICAgICAgICAgICAgYXN0LmhhbmRsZU1ldGhvZChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBfX2luZnVuY19fWzBdLCBfX2JvZHlfXykKKyAgICAgICAgICAgIF9faW5mdW5jX18gPSBbXQorICAgICAgICAgICAgX19ib2R5X18gPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX19ib2R5X18uYXBwZW5kKHMpCisgICAgICAgIHJldHVybgorCisgICAgaWYgX19pbnB5dGhvbl9fOgorICAgICAgICBtID0gX19weXRob25fZnVuY19yZWdleHBfXy5tYXRjaChzKQorICAgICAgICBpZiBtIGFuZCBsaW5lbm8gIT0gSU5fUFlUSE9OX0VPRjoKKyAgICAgICAgICAgIF9fYm9keV9fLmFwcGVuZChzKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3QuaGFuZGxlUHl0aG9uTWV0aG9kKHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIF9faW5weXRob25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCwgX19ib2R5X18pCisgICAgICAgICAgICBfX2JvZHlfXyA9IFtdCisgICAgICAgICAgICBfX2lucHl0aG9uX18gPSBGYWxzZQorCisgICAgICAgICAgICBpZiBsaW5lbm8gPT0gSU5fUFlUSE9OX0VPRjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGlmIHMgYW5kIHNbMF0gPT0gJyMnOgorICAgICAgICBpZiBsZW4oX19yZXNpZHVlX18pICE9IDAgYW5kIF9fcmVzaWR1ZV9fWzBdWzBdICE9ICIjIjoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGVyZSBpcyBhIGNvbW1lbnQgb24gbGluZSAlcyBvZiBmaWxlICVzICglcykgd2hpY2ggaXMgaW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpbGluZSBleHByZXNzaW9uLlxuQml0YmFrZSB1c2VkIHRvIGlnbm9yZSB0aGVzZSBidXQgbm8gbG9uZ2VyIGRvZXMgc28sIHBsZWFzZSBmaXggeW91ciBtZXRhZGF0YSBhcyBlcnJvcnMgYXJlIGxpa2VseSBhcyBhIHJlc3VsdCBvZiB0aGlzIGNoYW5nZS4iICUgKGxpbmVubywgZm4sIHMpKQorCisgICAgaWYgbGVuKF9fcmVzaWR1ZV9fKSAhPSAwIGFuZCBfX3Jlc2lkdWVfX1swXVswXSA9PSAiIyIgYW5kIChub3QgcyBvciBzWzBdICE9ICIjIik6CisgICAgICAgIGJiLmZhdGFsKCJUaGVyZSBpcyBhIGNvbmZ1c2luZyBtdWx0aWxpbmUsIHBhcnRpYWxseSBjb21tZW50ZWQgZXhwcmVzc2lvbiBvbiBsaW5lICVzIG9mIGZpbGUgJXMgKCVzKS5cblBsZWFzZSBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyBhbGwgYSBjb21tZW50IG9yIHNob3VsZCBiZSBwYXJzZWQuIiAlIChsaW5lbm8sIGZuLCBzKSkKKworICAgIGlmIHMgYW5kIHNbLTFdID09ICdcXCc6CisgICAgICAgIF9fcmVzaWR1ZV9fLmFwcGVuZChzWzotMV0pCisgICAgICAgIHJldHVybgorCisgICAgcyA9ICIiLmpvaW4oX19yZXNpZHVlX18pICsgcworICAgIF9fcmVzaWR1ZV9fID0gW10KKworICAgICMgU2tpcCBlbXB0eSBsaW5lcworICAgIGlmIHMgPT0gJyc6CisgICAgICAgIHJldHVybiAgIAorCisgICAgIyBTa2lwIGNvbW1lbnRzCisgICAgaWYgc1swXSA9PSAnIyc6CisgICAgICAgIHJldHVybgorCisgICAgbSA9IF9fZnVuY19zdGFydF9yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIF9faW5mdW5jX18gPSBbbS5ncm91cCgiZnVuYyIpIG9yICJfX2Fub255bW91cyIsIGZuLCBsaW5lbm9dCisgICAgICAgIGFzdC5oYW5kbGVNZXRob2RGbGFncyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBfX2luZnVuY19fWzBdLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2RlZl9yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIF9fYm9keV9fLmFwcGVuZChzKQorICAgICAgICBfX2lucHl0aG9uX18gPSBtLmdyb3VwKDEpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19leHBvcnRfZnVuY19yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIGFzdC5oYW5kbGVFeHBvcnRGdW5jcyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtLCBfX2NsYXNzbmFtZV9fKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2FkZHRhc2tfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlQWRkVGFzayhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2RlbHRhc2tfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlRGVsVGFzayhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2FkZGhhbmRsZXJfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlQkJIYW5kbGVycyhzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2luaGVyaXRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlSW5oZXJpdChzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtKQorICAgICAgICByZXR1cm4KKworICAgIHJldHVybiBDb25mSGFuZGxlci5mZWVkZXIobGluZW5vLCBzLCBmbiwgc3RhdGVtZW50cykKKworIyBBZGQgdXMgdG8gdGhlIGhhbmRsZXJzIGxpc3QKK2Zyb20gLi4gaW1wb3J0IGhhbmRsZXJzCitoYW5kbGVycy5hcHBlbmQoeydzdXBwb3J0cyc6IHN1cHBvcnRzLCAnaGFuZGxlJzogaGFuZGxlLCAnaW5pdCc6IGluaXR9KQorZGVsIGhhbmRsZXJzCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weSBiL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L0NvbmZIYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDc1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9Db25mSGFuZGxlci5weQpAQCAtMCwwICsxLDE5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCisgICBjbGFzcyBmb3IgaGFuZGxpbmcgY29uZmlndXJhdGlvbiBkYXRhIGZpbGVzCisKKyAgIFJlYWRzIGEgLmNvbmYgZmlsZSBhbmQgb2J0YWlucyBpdHMgbWV0YWRhdGEKKworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IG9zCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gYmIucGFyc2UgaW1wb3J0IFBhcnNlRXJyb3IsIHJlc29sdmVfZmlsZSwgYXN0LCBsb2dnZXIsIGhhbmRsZQorCitfX2NvbmZpZ19yZWdleHBfXyAgPSByZS5jb21waWxlKCByIiIiCisgICAgXgorICAgICg/UDxleHA+ZXhwb3J0XHMqKT8KKyAgICAoP1A8dmFyPlthLXpBLVowLTlcLX5fKy4ke30vXSs/KQorICAgIChcWyg/UDxmbGFnPlthLXpBLVowLTlcLV8rLl0rKVxdKT8KKworICAgIFxzKiAoCisgICAgICAgICg/UDxjb2xvbj46PSkgfAorICAgICAgICAoP1A8bGF6eXF1ZXM+XD9cPz0pIHwKKyAgICAgICAgKD9QPHF1ZXM+XD89KSB8CisgICAgICAgICg/UDxhcHBlbmQ+XCs9KSB8CisgICAgICAgICg/UDxwcmVwZW5kPj1cKykgfAorICAgICAgICAoP1A8cHJlZG90Pj1cLikgfAorICAgICAgICAoP1A8cG9zdGRvdD5cLj0pIHwKKyAgICAgICAgPQorICAgICkgXHMqCisKKyAgICAoPyEnW14nXSonW14nXSonJCkKKyAgICAoPyFcIlteXCJdKlwiW15cIl0qXCIkKQorICAgICg/UDxhcG8+WydcIl0pCisgICAgKD9QPHZhbHVlPi4qKQorICAgICg/UD1hcG8pCisgICAgJAorICAgICIiIiwgcmUuWCkKK19faW5jbHVkZV9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIiaW5jbHVkZVxzKyguKykiICkKK19fcmVxdWlyZV9yZWdleHBfXyA9IHJlLmNvbXBpbGUoIHIicmVxdWlyZVxzKyguKykiICkKK19fZXhwb3J0X3JlZ2V4cF9fID0gcmUuY29tcGlsZSggciJleHBvcnRccysoW2EtekEtWjAtOVwtXysuJHt9L10rKSQiICkKKworZGVmIGluaXQoZGF0YSk6CisgICAgdG9wZGlyID0gZGF0YS5nZXRWYXIoJ1RPUERJUicsIEZhbHNlKQorICAgIGlmIG5vdCB0b3BkaXI6CisgICAgICAgIGRhdGEuc2V0VmFyKCdUT1BESVInLCBvcy5nZXRjd2QoKSkKKworCitkZWYgc3VwcG9ydHMoZm4sIGQpOgorICAgIHJldHVybiBmblstNTpdID09ICIuY29uZiIKKworZGVmIGluY2x1ZGUocGFyZW50Zm4sIGZuLCBsaW5lbm8sIGRhdGEsIGVycm9yX291dCk6CisgICAgIiIiCisgICAgZXJyb3Jfb3V0OiBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSB2ZXJiIChlLmcuICJpbmNsdWRlIiwgImluaGVyaXQiKSB0byBiZQorICAgIHVzZWQgaW4gYSBQYXJzZUVycm9yIHRoYXQgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQgY291bGQKKyAgICBub3QgYmUgaW5jbHVkZWQuIFNwZWNpZnkgRmFsc2UgdG8gYXZvaWQgcmFpc2luZyBhbiBlcnJvciBpbiB0aGlzIGNhc2UuCisgICAgIiIiCisgICAgaWYgcGFyZW50Zm4gPT0gZm46ICMgcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGZuID0gZGF0YS5leHBhbmQoZm4pCisgICAgcGFyZW50Zm4gPSBkYXRhLmV4cGFuZChwYXJlbnRmbikKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZuKToKKyAgICAgICAgZG5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGFyZW50Zm4pCisgICAgICAgIGJicGF0aCA9ICIlczolcyIgJSAoZG5hbWUsIGRhdGEuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKSkKKyAgICAgICAgYWJzX2ZuLCBhdHRlbXB0cyA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgZm4sIGhpc3Rvcnk9VHJ1ZSkKKyAgICAgICAgaWYgYWJzX2ZuIGFuZCBiYi5wYXJzZS5jaGVja19kZXBlbmRlbmN5KGRhdGEsIGFic19mbik6CisgICAgICAgICAgICBsb2dnZXIud2FybigiRHVwbGljYXRlIGluY2x1c2lvbiBmb3IgJXMgaW4gJXMiICUgKGFic19mbiwgZGF0YS5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkpCisgICAgICAgIGZvciBhZiBpbiBhdHRlbXB0czoKKyAgICAgICAgICAgIGJiLnBhcnNlLm1hcmtfZGVwZW5kZW5jeShkYXRhLCBhZikKKyAgICAgICAgaWYgYWJzX2ZuOgorICAgICAgICAgICAgZm4gPSBhYnNfZm4KKyAgICBlbGlmIGJiLnBhcnNlLmNoZWNrX2RlcGVuZGVuY3koZGF0YSwgZm4pOgorICAgICAgICBsb2dnZXIud2FybigiRHVwbGljYXRlIGluY2x1c2lvbiBmb3IgJXMgaW4gJXMiICUgKGZuLCBkYXRhLmdldFZhcignRklMRScsIFRydWUpKSkKKworICAgIHRyeToKKyAgICAgICAgYmIucGFyc2UuaGFuZGxlKGZuLCBkYXRhLCBUcnVlKQorICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcikgYXMgZXhjOgorICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgaWYgZXJyb3Jfb3V0OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoIkNvdWxkIG5vdCAlcyBmaWxlICVzIiAlIChlcnJvcl9vdXQsIGZuKSwgcGFyZW50Zm4sIGxpbmVubykKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQ09ORiBmaWxlICclcycgbm90IGZvdW5kIiwgZm4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBlcnJvcl9vdXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiQ291bGQgbm90ICVzIGZpbGUgJXM6ICVzIiAlIChlcnJvcl9vdXQsIGZuLCBleGMuc3RyZXJyb3IpLCBwYXJlbnRmbiwgbGluZW5vKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJFcnJvciBwYXJzaW5nICVzOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvciksIHBhcmVudGZuLCBsaW5lbm8pCisKKyMgV2UgaGF2ZSBhbiBpc3N1ZSB3aGVyZSBhIFVJIG1pZ2h0IHdhbnQgdG8gZW5mb3JjZSBwYXJ0aWN1bGFyIHNldHRpbmdzIHN1Y2ggYXMKKyMgYW4gZW1wdHkgRElTVFJPIHZhcmlhYmxlLiBJZiBjb25maWd1cmF0aW9uIGZpbGVzIGRvIHNvbWV0aGluZyBsaWtlIGFzc2lnbmluZworIyBhIHdlYWsgZGVmYXVsdCwgaXQgdHVybnMgb3V0IHRvIGJlIHZlcnkgZGlmZmljdWx0IHRvIGZpbHRlciBvdXQgdGhlc2UgY2hhbmdlcywKKyMgcGFydGljdWxhcmx5IHdoZW4gdGhlIHdlYWsgZGVmYXVsdCBtaWdodCBhcHBlYXIgaGFsZiB3YXkgdGhvdWdoIHBhcnNpbmcgYSBjaGFpbiAKKyMgb2YgY29uZmlndXJhdGlvbiBmaWxlcy4gV2UgdGhlcmVmb3JlIGxldCB0aGUgVUlzIGhvb2sgaW50byBjb25maWd1cmF0aW9uIGZpbGUKKyMgcGFyc2luZy4gVGhpcyB0dXJucyBvdXQgdG8gYmUgYSBoYXJkIHByb2JsZW0gdG8gc29sdmUgYW55IG90aGVyIHdheS4KK2NvbmZGaWx0ZXJzID0gW10KKworZGVmIGhhbmRsZShmbiwgZGF0YSwgaW5jbHVkZSk6CisgICAgaW5pdChkYXRhKQorCisgICAgaWYgaW5jbHVkZSA9PSAwOgorICAgICAgICBvbGRmaWxlID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIG9sZGZpbGUgPSBkYXRhLmdldFZhcignRklMRScsIEZhbHNlKQorCisgICAgYWJzX2ZuID0gcmVzb2x2ZV9maWxlKGZuLCBkYXRhKQorICAgIGYgPSBvcGVuKGFic19mbiwgJ3InKQorCisgICAgaWYgaW5jbHVkZToKKyAgICAgICAgYmIucGFyc2UubWFya19kZXBlbmRlbmN5KGRhdGEsIGFic19mbikKKworICAgIHN0YXRlbWVudHMgPSBhc3QuU3RhdGVtZW50R3JvdXAoKQorICAgIGxpbmVubyA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgIHMgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICBicmVhaworICAgICAgICB3ID0gcy5zdHJpcCgpCisgICAgICAgICMgc2tpcCBlbXB0eSBsaW5lcworICAgICAgICBpZiBub3QgdzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHMgPSBzLnJzdHJpcCgpCisgICAgICAgIHdoaWxlIHNbLTFdID09ICdcXCc6CisgICAgICAgICAgICBzMiA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgICAgICBpZiAobm90IHMyIG9yIHMyIGFuZCBzMlswXSAhPSAiIyIpIGFuZCBzWzBdID09ICIjIiA6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZXJlIGlzIGEgY29uZnVzaW5nIG11bHRpbGluZSwgcGFydGlhbGx5IGNvbW1lbnRlZCBleHByZXNzaW9uIG9uIGxpbmUgJXMgb2YgZmlsZSAlcyAoJXMpLlxuUGxlYXNlIGNsYXJpZnkgd2hldGhlciB0aGlzIGlzIGFsbCBhIGNvbW1lbnQgb3Igc2hvdWxkIGJlIHBhcnNlZC4iICUgKGxpbmVubywgZm4sIHMpKQorICAgICAgICAgICAgcyA9IHNbOi0xXSArIHMyCisgICAgICAgICMgc2tpcCBjb21tZW50cworICAgICAgICBpZiBzWzBdID09ICcjJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZlZWRlcihsaW5lbm8sIHMsIGFic19mbiwgc3RhdGVtZW50cykKKworICAgICMgRE9ORSBXSVRIIFBBUlNJTkcuLi4gdGltZSB0byBldmFsdWF0ZQorICAgIGRhdGEuc2V0VmFyKCdGSUxFJywgYWJzX2ZuKQorICAgIHN0YXRlbWVudHMuZXZhbChkYXRhKQorICAgIGlmIG9sZGZpbGU6CisgICAgICAgIGRhdGEuc2V0VmFyKCdGSUxFJywgb2xkZmlsZSkKKworICAgIGYuY2xvc2UoKQorCisgICAgZm9yIGYgaW4gY29uZkZpbHRlcnM6CisgICAgICAgIGYoZm4sIGRhdGEpCisKKyAgICByZXR1cm4gZGF0YQorCitkZWYgZmVlZGVyKGxpbmVubywgcywgZm4sIHN0YXRlbWVudHMpOgorICAgIG0gPSBfX2NvbmZpZ19yZWdleHBfXy5tYXRjaChzKQorICAgIGlmIG06CisgICAgICAgIGdyb3VwZCA9IG0uZ3JvdXBkaWN0KCkKKyAgICAgICAgYXN0LmhhbmRsZURhdGEoc3RhdGVtZW50cywgZm4sIGxpbmVubywgZ3JvdXBkKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSBfX2luY2x1ZGVfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlSW5jbHVkZShzdGF0ZW1lbnRzLCBmbiwgbGluZW5vLCBtLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19yZXF1aXJlX3JlZ2V4cF9fLm1hdGNoKHMpCisgICAgaWYgbToKKyAgICAgICAgYXN0LmhhbmRsZUluY2x1ZGUoc3RhdGVtZW50cywgZm4sIGxpbmVubywgbSwgVHJ1ZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBtID0gX19leHBvcnRfcmVnZXhwX18ubWF0Y2gocykKKyAgICBpZiBtOgorICAgICAgICBhc3QuaGFuZGxlRXhwb3J0KHN0YXRlbWVudHMsIGZuLCBsaW5lbm8sIG0pCisgICAgICAgIHJldHVybgorCisgICAgcmFpc2UgUGFyc2VFcnJvcigidW5wYXJzZWQgbGluZTogJyVzJyIgJSBzLCBmbiwgbGluZW5vKTsKKworIyBBZGQgdXMgdG8gdGhlIGhhbmRsZXJzIGxpc3QKK2Zyb20gYmIucGFyc2UgaW1wb3J0IGhhbmRsZXJzCitoYW5kbGVycy5hcHBlbmQoeydzdXBwb3J0cyc6IHN1cHBvcnRzLCAnaGFuZGxlJzogaGFuZGxlLCAnaW5pdCc6IGluaXR9KQorZGVsIGhhbmRsZXJzCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL2JiL3BhcnNlL3BhcnNlX3B5L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjU4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9wYXJzZS9wYXJzZV9weS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgUGFyc2VycworCitGaWxlIHBhcnNlcnMgZm9yIHRoZSBCaXRCYWtlIGJ1aWxkIHRvb2xzLgorCisiIiIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBoaWwgQmx1bmRlbGwKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEJhc2VkIG9uIGZ1bmN0aW9ucyBmcm9tIHRoZSBiYXNlIGJiIG1vZHVsZSwgQ29weXJpZ2h0IDIwMDMgSG9sZ2VyIFNjaHVyaWcKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2Zyb20gLiBpbXBvcnQgQ29uZkhhbmRsZXIKK2Zyb20gLiBpbXBvcnQgQkJIYW5kbGVyCisKK19fdmVyc2lvbl9fID0gJzEuMCcKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weSBiL2JpdGJha2UvbGliL2JiL3BlcnNpc3RfZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk1YmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcGVyc2lzdF9kYXRhLnB5CkBAIC0wLDAgKzEsMjE3IEBACisiIiJCaXRCYWtlIFBlcnNpc3RlbnQgRGF0YSBTdG9yZQorCitVc2VkIHRvIHN0b3JlIGRhdGEgaW4gYSBjZW50cmFsIGxvY2F0aW9uIHN1Y2ggdGhhdCBvdGhlciB0aHJlYWRzL3Rhc2tzIGNhbgorYWNjZXNzIHRoZW0gYXQgc29tZSBmdXR1cmUgZGF0ZS4gIEFjdHMgYXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBzcWxpdGUsCitjdXJyZW50bHksIHByb3ZpZGluZyBhIGtleS92YWx1ZSBzdG9yZSBhY2Nlc3NlZCBieSAnZG9tYWluJy4KKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNyAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMgQ29weXJpZ2h0IChDKSAyMDEwICAgICAgICBDaHJpcyBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBiYi5jb21wYXQgaW1wb3J0IHRvdGFsX29yZGVyaW5nCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNYXBwaW5nCisKK3RyeToKKyAgICBpbXBvcnQgc3FsaXRlMworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gcHlzcWxpdGUyIGltcG9ydCBkYmFwaTIgYXMgc3FsaXRlMworCitzcWx2ZXJzaW9uID0gc3FsaXRlMy5zcWxpdGVfdmVyc2lvbl9pbmZvCitpZiBzcWx2ZXJzaW9uWzBdIDwgMyBvciAoc3FsdmVyc2lvblswXSA9PSAzIGFuZCBzcWx2ZXJzaW9uWzFdIDwgMyk6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJzcWxpdGUzIHZlcnNpb24gMy4zLjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuIikKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5QZXJzaXN0RGF0YSIpCitpZiBoYXNhdHRyKHNxbGl0ZTMsICdlbmFibGVfc2hhcmVkX2NhY2hlJyk6CisgICAgdHJ5OgorICAgICAgICBzcWxpdGUzLmVuYWJsZV9zaGFyZWRfY2FjaGUoVHJ1ZSkKKyAgICBleGNlcHQgc3FsaXRlMy5PcGVyYXRpb25hbEVycm9yOgorICAgICAgICBwYXNzCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBTUUxUYWJsZShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CisgICAgIiIiT2JqZWN0IHJlcHJlc2VudGluZyBhIHRhYmxlL2RvbWFpbiBpbiB0aGUgZGF0YWJhc2UiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVmaWxlLCB0YWJsZSk6CisgICAgICAgIHNlbGYuY2FjaGVmaWxlID0gY2FjaGVmaWxlCisgICAgICAgIHNlbGYudGFibGUgPSB0YWJsZQorICAgICAgICBzZWxmLmN1cnNvciA9IGNvbm5lY3Qoc2VsZi5jYWNoZWZpbGUpCisKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJXMoa2V5IFRFWFQsIHZhbHVlIFRFWFQpOyIKKyAgICAgICAgICAgICAgICAgICAgICAlIHRhYmxlKQorCisgICAgZGVmIF9leGVjdXRlKHNlbGYsICpxdWVyeSk6CisgICAgICAgICIiIkV4ZWN1dGUgYSBxdWVyeSwgd2FpdGluZyB0byBhY3F1aXJlIGEgbG9jayBpZiBuZWNlc3NhcnkiIiIKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3Vyc29yLmV4ZWN1dGUoKnF1ZXJ5KQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZTMuT3BlcmF0aW9uYWxFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgJ2RhdGFiYXNlIGlzIGxvY2tlZCcgaW4gc3RyKGV4YykgYW5kIGNvdW50IDwgNTAwOgorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnNvci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY3Vyc29yID0gY29ubmVjdChzZWxmLmNhY2hlZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jdXJzb3IuX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjaW5mbyk6CisgICAgICAgIHNlbGYuY3Vyc29yLl9fZXhpdF9fKCpleGNpbmZvKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBmcm9tICVzIHdoZXJlIGtleT0/OyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLCBba2V5XSkKKyAgICAgICAgZm9yIHJvdyBpbiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIHJvd1sxXQorICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgICAgICBzZWxmLl9leGVjdXRlKCJERUxFVEUgZnJvbSAlcyB3aGVyZSBrZXk9PzsiICUgc2VsZi50YWJsZSwgW2tleV0pCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ09ubHkgc3RyaW5nIGtleXMgYXJlIHN1cHBvcnRlZCcpCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdPbmx5IHN0cmluZyB2YWx1ZXMgYXJlIHN1cHBvcnRlZCcpCisKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCAqIGZyb20gJXMgd2hlcmUga2V5PT87IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUsIFtrZXldKQorICAgICAgICBleGlzdHMgPSBsZW4obGlzdChkYXRhKSkKKyAgICAgICAgaWYgZXhpc3RzOgorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiVVBEQVRFICVzIFNFVCB2YWx1ZT0/IFdIRVJFIGtleT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWUsIGtleV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9leGVjdXRlKCJJTlNFUlQgaW50byAlcyhrZXksIHZhbHVlKSB2YWx1ZXMgKD8sID8pOyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLCBba2V5LCB2YWx1ZV0pCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2V0KHNlbGYpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCBDT1VOVChrZXkpIEZST00gJXM7IiAlIHNlbGYudGFibGUpCisgICAgICAgIGZvciByb3cgaW4gZGF0YToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCBrZXkgRlJPTSAlczsiICUgc2VsZi50YWJsZSkKKyAgICAgICAgcmV0dXJuIChyb3dbMF0gZm9yIHJvdyBpbiBkYXRhKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikKKworICAgIGRlZiBnZXRfYnlfcGF0dGVybihzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCAqIEZST00gJXMgV0hFUkUga2V5IExJS0UgPzsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZSwgW3BhdHRlcm5dKQorICAgICAgICByZXR1cm4gW3Jvd1sxXSBmb3Igcm93IGluIGRhdGFdCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXJ2YWx1ZXMoKSkKKworICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOgorICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiU0VMRUNUIHZhbHVlIEZST00gJXM7IiAlIHNlbGYudGFibGUpCisgICAgICAgIHJldHVybiAocm93WzBdIGZvciByb3cgaW4gZGF0YSkKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyaXRlbXMoKSkKKworICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgKiBGUk9NICVzOyIgJSBzZWxmLnRhYmxlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9leGVjdXRlKCJERUxFVEUgRlJPTSAlczsiICUgc2VsZi50YWJsZSkKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZgorCisKK2NsYXNzIFBlcnNpc3REYXRhKG9iamVjdCk6CisgICAgIiIiRGVwcmVjYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYml0YmFrZSBwZXJzaXN0ZW50IGRhdGEgc3RvcmUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oIlVzZSBvZiBQZXJzaXN0RGF0YSBpcyBkZXByZWNhdGVkLiAgUGxlYXNlIHVzZSAiCisgICAgICAgICAgICAgICAgICAgICAgInBlcnNpc3QoZG9tYWluLCBkKSBpbnN0ZWFkLiIsCisgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MikKKworICAgICAgICBzZWxmLmRhdGEgPSBwZXJzaXN0KGQpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXNpbmcgJyVzJyBhcyB0aGUgcGVyc2lzdGVudCBkYXRhIGNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5maWxlbmFtZSkKKworICAgIGRlZiBhZGREb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCBhIGRvbWFpbiAocGVuZGluZyBkZXByZWNhdGlvbikKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRhdGFbZG9tYWluXQorCisgICAgZGVmIGRlbERvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlcyBhIGRvbWFpbiBhbmQgYWxsIHRoZSBkYXRhIGl0IGNvbnRhaW5zCisgICAgICAgICIiIgorICAgICAgICBkZWwgc2VsZi5kYXRhW2RvbWFpbl0KKworICAgIGRlZiBnZXRLZXlWYWx1ZXMoc2VsZiwgZG9tYWluKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2Yga2V5ICsgdmFsdWUgcGFpcnMgZm9yIGEgZG9tYWluCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl0uaXRlbXMoKQorCisgICAgZGVmIGdldFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgdmFsdWUgb2YgYSBrZXkgZm9yIGEgZG9tYWluCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhW2RvbWFpbl1ba2V5XQorCisgICAgZGVmIHNldFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIgorICAgICAgICBTZXRzIHRoZSB2YWx1ZSBvZiBhIGtleSBmb3IgYSBkb21haW4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZGF0YVtkb21haW5dW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIGRlbFZhbHVlKHNlbGYsIGRvbWFpbiwga2V5KToKKyAgICAgICAgIiIiCisgICAgICAgIERlbGV0ZXMgYSBrZXkvdmFsdWUgcGFpcgorICAgICAgICAiIiIKKyAgICAgICAgZGVsIHNlbGYuZGF0YVtkb21haW5dW2tleV0KKworZGVmIGNvbm5lY3QoZGF0YWJhc2UpOgorICAgIGNvbm5lY3Rpb24gPSBzcWxpdGUzLmNvbm5lY3QoZGF0YWJhc2UsIHRpbWVvdXQ9NSwgaXNvbGF0aW9uX2xldmVsPU5vbmUpCisgICAgY29ubmVjdGlvbi5leGVjdXRlKCJwcmFnbWEgc3luY2hyb25vdXMgPSBvZmY7IikKKyAgICByZXR1cm4gY29ubmVjdGlvbgorCitkZWYgcGVyc2lzdChkb21haW4sIGQpOgorICAgICIiIkNvbnZlbmllbmNlIGZhY3RvcnkgZm9yIFNRTFRhYmxlIG9iamVjdHMgYmFzZWQgdXBvbiBtZXRhZGF0YSIiIgorICAgIGltcG9ydCBiYi51dGlscworICAgIGNhY2hlZGlyID0gKGQuZ2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIFRydWUpIG9yCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkNBQ0hFIiwgVHJ1ZSkpCisgICAgaWYgbm90IGNhY2hlZGlyOgorICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlBsZWFzZSBzZXQgdGhlICdQRVJTSVNURU5UX0RJUicgb3IgJ0NBQ0hFJyB2YXJpYWJsZSIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoY2FjaGVkaXIpCisgICAgY2FjaGVmaWxlID0gb3MucGF0aC5qb2luKGNhY2hlZGlyLCAiYmJfcGVyc2lzdF9kYXRhLnNxbGl0ZTMiKQorICAgIHJldHVybiBTUUxUYWJsZShjYWNoZWZpbGUsIGRvbWFpbikKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3Byb2Nlc3MucHkgYi9iaXRiYWtlL2xpYi9iYi9wcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDdmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9wcm9jZXNzLnB5CkBAIC0wLDAgKzEsMTU2IEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHNlbGVjdAorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5Qcm9jZXNzJykKKworZGVmIHN1YnByb2Nlc3Nfc2V0dXAoKToKKyAgICAjIFB5dGhvbiBpbnN0YWxscyBhIFNJR1BJUEUgaGFuZGxlciBieSBkZWZhdWx0LiBUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQKKyAgICAjIG5vbi1QeXRob24gc3VicHJvY2Vzc2VzIGV4cGVjdC4KKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdQSVBFLCBzaWduYWwuU0lHX0RGTCkKKworY2xhc3MgQ21kRXJyb3IoUnVudGltZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgbXNnPU5vbmUpOgorICAgICAgICBzZWxmLmNvbW1hbmQgPSBjb21tYW5kCisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGNtZCA9IHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKHNlbGYuY29tbWFuZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9IHNlbGYuY29tbWFuZAorCisgICAgICAgIG1zZyA9ICJFeGVjdXRpb24gb2YgJyVzJyBmYWlsZWQiICUgY21kCisgICAgICAgIGlmIHNlbGYubXNnOgorICAgICAgICAgICAgbXNnICs9ICc6ICVzJyAlIHNlbGYubXNnCisgICAgICAgIHJldHVybiBtc2cKKworY2xhc3MgTm90Rm91bmRFcnJvcihDbWRFcnJvcik6CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBDbWRFcnJvci5fX3N0cl9fKHNlbGYpICsgIjogY29tbWFuZCBub3QgZm91bmQiCisKK2NsYXNzIEV4ZWN1dGlvbkVycm9yKENtZEVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgZXhpdGNvZGUsIHN0ZG91dCA9IE5vbmUsIHN0ZGVyciA9IE5vbmUpOgorICAgICAgICBDbWRFcnJvci5fX2luaXRfXyhzZWxmLCBjb21tYW5kKQorICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBtZXNzYWdlID0gIiIKKyAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICBtZXNzYWdlICs9IHNlbGYuc3RkZXJyCisgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgbWVzc2FnZSArPSBzZWxmLnN0ZG91dAorICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgbWVzc2FnZSA9ICI6XG4iICsgbWVzc2FnZQorICAgICAgICByZXR1cm4gKENtZEVycm9yLl9fc3RyX18oc2VsZikgKworICAgICAgICAgICAgICAgICIgd2l0aCBleGl0IGNvZGUgJXMiICUgc2VsZi5leGl0Y29kZSArIG1lc3NhZ2UpCisKK2NsYXNzIFBvcGVuKHN1YnByb2Nlc3MuUG9wZW4pOgorICAgIGRlZmF1bHRzID0geworICAgICAgICAiY2xvc2VfZmRzIjogVHJ1ZSwKKyAgICAgICAgInByZWV4ZWNfZm4iOiBzdWJwcm9jZXNzX3NldHVwLAorICAgICAgICAic3Rkb3V0Ijogc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAic3RkZXJyIjogc3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICJzdGRpbiI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgInNoZWxsIjogRmFsc2UsCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIG9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdHMpCisgICAgICAgIG9wdGlvbnMudXBkYXRlKGt3YXJncykKKyAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKipvcHRpb25zKQorCitkZWYgX2xvZ2dlZF9jb21tdW5pY2F0ZShwaXBlLCBsb2csIGlucHV0LCBleHRyYWZpbGVzKToKKyAgICBpZiBwaXBlLnN0ZGluOgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBpcGUuc3RkaW4ud3JpdGUoaW5wdXQpCisgICAgICAgIHBpcGUuc3RkaW4uY2xvc2UoKQorCisgICAgb3V0ZGF0YSwgZXJyZGF0YSA9IFtdLCBbXQorICAgIHJpbiA9IFtdCisKKyAgICBpZiBwaXBlLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChwaXBlLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgcmluLmFwcGVuZChwaXBlLnN0ZG91dCkKKyAgICBpZiBwaXBlLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChwaXBlLnN0ZGVyci5maWxlbm8oKSkKKyAgICAgICAgcmluLmFwcGVuZChwaXBlLnN0ZGVycikKKyAgICBmb3IgZm9iaiwgXyBpbiBleHRyYWZpbGVzOgorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKGZvYmouZmlsZW5vKCkpCisgICAgICAgIHJpbi5hcHBlbmQoZm9iaikKKworICAgIGRlZiByZWFkZXh0cmFzKHNlbGVjdGVkKToKKyAgICAgICAgZm9yIGZvYmosIGZ1bmMgaW4gZXh0cmFmaWxlczoKKyAgICAgICAgICAgIGlmIGZvYmogaW4gc2VsZWN0ZWQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQUdBSU4gb3IgZXJyLmVycm5vID09IGVycm5vLkVXT1VMREJMT0NLOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmdW5jKGRhdGEpCisKKyAgICB0cnk6CisgICAgICAgIHdoaWxlIHBpcGUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBybGlzdCA9IHJpbgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHIsdyxlID0gc2VsZWN0LnNlbGVjdCAocmxpc3QsIFtdLCBbXSwgMSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgaWYgcGlwZS5zdGRvdXQgaW4gcjoKKyAgICAgICAgICAgICAgICBkYXRhID0gcGlwZS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YS5hcHBlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgbG9nLndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgIGlmIHBpcGUuc3RkZXJyIGluIHI6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBpcGUuc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGVycmRhdGEuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGxvZy53cml0ZShkYXRhKQorCisgICAgICAgICAgICByZWFkZXh0cmFzKHIpCisKKyAgICBmaW5hbGx5OiAgICAKKyAgICAgICAgbG9nLmZsdXNoKCkKKworICAgIHJlYWRleHRyYXMoW2ZvYmogZm9yIGZvYmosIF8gaW4gZXh0cmFmaWxlc10pCisKKyAgICBpZiBwaXBlLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgcGlwZS5zdGRvdXQuY2xvc2UoKQorICAgIGlmIHBpcGUuc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICBwaXBlLnN0ZGVyci5jbG9zZSgpCisgICAgcmV0dXJuICcnLmpvaW4ob3V0ZGF0YSksICcnLmpvaW4oZXJyZGF0YSkKKworZGVmIHJ1bihjbWQsIGlucHV0PU5vbmUsIGxvZz1Ob25lLCBleHRyYWZpbGVzPU5vbmUsICoqb3B0aW9ucyk6CisgICAgIiIiQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcnVuIGEgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQsIHJhaXNpbmcgYW4KKyAgICBleGNlcHRpb24gd2hlbiB0aGUgY29tbWFuZCBmYWlscyIiIgorCisgICAgaWYgbm90IGV4dHJhZmlsZXM6CisgICAgICAgIGV4dHJhZmlsZXMgPSBbXQorCisgICAgaWYgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpIGFuZCBub3QgInNoZWxsIiBpbiBvcHRpb25zOgorICAgICAgICBvcHRpb25zWyJzaGVsbCJdID0gVHJ1ZQorCisgICAgdHJ5OgorICAgICAgICBwaXBlID0gUG9wZW4oY21kLCAqKm9wdGlvbnMpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpZiBleGMuZXJybm8gPT0gMjoKKyAgICAgICAgICAgIHJhaXNlIE5vdEZvdW5kRXJyb3IoY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ21kRXJyb3IoY21kLCBleGMpCisKKyAgICBpZiBsb2c6CisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gX2xvZ2dlZF9jb21tdW5pY2F0ZShwaXBlLCBsb2csIGlucHV0LCBleHRyYWZpbGVzKQorICAgIGVsc2U6CisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwZS5jb21tdW5pY2F0ZShpbnB1dCkKKworICAgIGlmIHBpcGUucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByYWlzZSBFeGVjdXRpb25FcnJvcihjbWQsIHBpcGUucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIHN0ZG91dCwgc3RkZXJyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkgYi9iaXRiYWtlL2xpYi9iYi9wcm92aWRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3ZTFmYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3Byb3ZpZGVycy5weQpAQCAtMCwwICsxLDM4MSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBDaHJpcyBMYXJzb24KKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0ICBQaGlsIEJsdW5kZWxsCisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgICAgICAgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisjIENvcHlyaWdodCAoQykgMjAwNSAgICAgICAgUk9BRCBHbWJICisjIENvcHlyaWdodCAoQykgMjAwNiAgICAgICAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gYmIgaW1wb3J0IGRhdGEsIHV0aWxzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoraW1wb3J0IGJiCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlByb3ZpZGVyIikKKworY2xhc3MgTm9Qcm92aWRlcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBubyBwcm92aWRlciBvZiBhIGJ1aWxkIGRlcGVuZGVuY3kgY2FuIGJlIGZvdW5kIiIiCisKK2NsYXNzIE5vUlByb3ZpZGVyKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIG5vIHByb3ZpZGVyIG9mIGEgcnVudGltZSBkZXBlbmRlbmN5IGNhbiBiZSBmb3VuZCIiIgorCitjbGFzcyBNdWx0aXBsZVJQcm92aWRlcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBtdWx0aXBsZSBwcm92aWRlcnMgb2YgYSBydW50aW1lIGRlcGVuZGVuY3kgY2FuIGJlIGZvdW5kIiIiCisKK2RlZiBmaW5kUHJvdmlkZXJzKGNmZ0RhdGEsIGRhdGFDYWNoZSwgcGtnX3BuID0gTm9uZSk6CisgICAgIiIiCisgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBhbmQgcHJlZmVycmVkIHByb3ZpZGVycyBpbiBwa2dfcG4KKyAgICAiIiIKKworICAgIGlmIG5vdCBwa2dfcG46CisgICAgICAgIHBrZ19wbiA9IGRhdGFDYWNoZS5wa2dfcG4KKworICAgICMgTmVlZCB0byBlbnN1cmUgZGF0YSBzdG9yZSBpcyBleHBhbmRlZAorICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShjZmdEYXRhKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICBwcmVmZXJyZWRfdmVyc2lvbnMgPSB7fQorICAgIGxhdGVzdF92ZXJzaW9ucyA9IHt9CisKKyAgICBmb3IgcG4gaW4gcGtnX3BuOgorICAgICAgICAobGFzdF92ZXIsIGxhc3RfZmlsZSwgcHJlZl92ZXIsIHByZWZfZmlsZSkgPSBmaW5kQmVzdFByb3ZpZGVyKHBuLCBsb2NhbGRhdGEsIGRhdGFDYWNoZSwgcGtnX3BuKQorICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dID0gKHByZWZfdmVyLCBwcmVmX2ZpbGUpCisgICAgICAgIGxhdGVzdF92ZXJzaW9uc1twbl0gPSAobGFzdF92ZXIsIGxhc3RfZmlsZSkKKworICAgIHJldHVybiAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpCisKKworZGVmIGFsbFByb3ZpZGVycyhkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIEZpbmQgYWxsIHByb3ZpZGVycyBmb3IgZWFjaCBwbgorICAgICIiIgorICAgIGFsbF9wcm92aWRlcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciAoZm4sIHBuKSBpbiBkYXRhQ2FjaGUucGtnX2ZuLml0ZW1zKCk6CisgICAgICAgIHZlciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZuXQorICAgICAgICBhbGxfcHJvdmlkZXJzW3BuXS5hcHBlbmQoKHZlciwgZm4pKQorICAgIHJldHVybiBhbGxfcHJvdmlkZXJzCisKKworZGVmIHNvcnRQcmlvcml0aWVzKHBuLCBkYXRhQ2FjaGUsIHBrZ19wbiA9IE5vbmUpOgorICAgICIiIgorICAgIFJlb3JkZXIgcGtnX3BuIGJ5IGZpbGUgcHJpb3JpdHkgYW5kIGRlZmF1bHQgcHJlZmVyZW5jZQorICAgICIiIgorCisgICAgaWYgbm90IHBrZ19wbjoKKyAgICAgICAgcGtnX3BuID0gZGF0YUNhY2hlLnBrZ19wbgorCisgICAgZmlsZXMgPSBwa2dfcG5bcG5dCisgICAgcHJpb3JpdGllcyA9IHt9CisgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgIHByaW9yaXR5ID0gZGF0YUNhY2hlLmJiZmlsZV9wcmlvcml0eVtmXQorICAgICAgICBwcmVmZXJlbmNlID0gZGF0YUNhY2hlLnBrZ19kcFtmXQorICAgICAgICBpZiBwcmlvcml0eSBub3QgaW4gcHJpb3JpdGllczoKKyAgICAgICAgICAgIHByaW9yaXRpZXNbcHJpb3JpdHldID0ge30KKyAgICAgICAgaWYgcHJlZmVyZW5jZSBub3QgaW4gcHJpb3JpdGllc1twcmlvcml0eV06CisgICAgICAgICAgICBwcmlvcml0aWVzW3ByaW9yaXR5XVtwcmVmZXJlbmNlXSA9IFtdCisgICAgICAgIHByaW9yaXRpZXNbcHJpb3JpdHldW3ByZWZlcmVuY2VdLmFwcGVuZChmKQorICAgIHRtcF9wbiA9IFtdCisgICAgZm9yIHByaSBpbiBzb3J0ZWQocHJpb3JpdGllcyk6CisgICAgICAgIHRtcF9wcmVmID0gW10KKyAgICAgICAgZm9yIHByZWYgaW4gc29ydGVkKHByaW9yaXRpZXNbcHJpXSk6CisgICAgICAgICAgICB0bXBfcHJlZi5leHRlbmQocHJpb3JpdGllc1twcmldW3ByZWZdKQorICAgICAgICB0bXBfcG4gPSBbdG1wX3ByZWZdICsgdG1wX3BuCisKKyAgICByZXR1cm4gdG1wX3BuCisKK2RlZiBwcmVmZXJyZWRWZXJzaW9uTWF0Y2gocGUsIHB2LCBwciwgcHJlZmVycmVkX2UsIHByZWZlcnJlZF92LCBwcmVmZXJyZWRfcik6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIHZlcnNpb24gcGUscHYscHIgaXMgdGhlIHByZWZlcnJlZCBvbmUuCisgICAgSWYgdGhlcmUgaXMgcHJlZmVycmVkIHZlcnNpb24gZGVmaW5lZCBhbmQgZW5kcyB3aXRoICclJywgdGhlbiBwdiBoYXMgdG8gc3RhcnQgd2l0aCB0aGF0IHZlcnNpb24gYWZ0ZXIgcmVtb3ZpbmcgdGhlICclJworICAgICIiIgorICAgIGlmIChwciA9PSBwcmVmZXJyZWRfciBvciBwcmVmZXJyZWRfciA9PSBOb25lKToKKyAgICAgICAgaWYgKHBlID09IHByZWZlcnJlZF9lIG9yIHByZWZlcnJlZF9lID09IE5vbmUpOgorICAgICAgICAgICAgaWYgcHJlZmVycmVkX3YgPT0gcHY6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIHByZWZlcnJlZF92ICE9IE5vbmUgYW5kIHByZWZlcnJlZF92LmVuZHN3aXRoKCclJykgYW5kIHB2LnN0YXJ0c3dpdGgocHJlZmVycmVkX3ZbOmxlbihwcmVmZXJyZWRfdiktMV0pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBmaW5kUHJlZmVycmVkUHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgcGtnX3BuID0gTm9uZSwgaXRlbSA9IE5vbmUpOgorICAgICIiIgorICAgIEZpbmQgdGhlIGZpcnN0IHByb3ZpZGVyIGluIHBrZ19wbiB3aXRoIGEgUFJFRkVSUkVEX1ZFUlNJT04gc2V0LgorICAgICIiIgorCisgICAgcHJlZmVycmVkX2ZpbGUgPSBOb25lCisgICAgcHJlZmVycmVkX3ZlciA9IE5vbmUKKworICAgIGxvY2FsZGF0YSA9IGRhdGEuY3JlYXRlQ29weShjZmdEYXRhKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICIlczpwbi0lczolcyIgJSAoZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIGxvY2FsZGF0YSksIHBuLCBwbikpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICBwcmVmZXJyZWRfdiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BSRUZFUlJFRF9WRVJTSU9OJywgVHJ1ZSkKKyAgICBpZiBwcmVmZXJyZWRfdjoKKyAgICAgICAgbSA9IHJlLm1hdGNoKCcoXGQrOikqKC4qKShfLiopKicsIHByZWZlcnJlZF92KQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgaWYgbS5ncm91cCgxKToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfZSA9IG0uZ3JvdXAoMSlbOi0xXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfZSA9IE5vbmUKKyAgICAgICAgICAgIHByZWZlcnJlZF92ID0gbS5ncm91cCgyKQorICAgICAgICAgICAgaWYgbS5ncm91cCgzKToKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWRfciA9IG0uZ3JvdXAoMylbMTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZWZlcnJlZF9yID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZmVycmVkX2UgPSBOb25lCisgICAgICAgICAgICBwcmVmZXJyZWRfciA9IE5vbmUKKworICAgICAgICBmb3IgZmlsZV9zZXQgaW4gcGtnX3BuOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZV9zZXQ6CisgICAgICAgICAgICAgICAgcGUsIHB2LCBwciA9IGRhdGFDYWNoZS5wa2dfcGVwdnByW2ZdCisgICAgICAgICAgICAgICAgaWYgcHJlZmVycmVkVmVyc2lvbk1hdGNoKHBlLCBwdiwgcHIsIHByZWZlcnJlZF9lLCBwcmVmZXJyZWRfdiwgcHJlZmVycmVkX3IpOgorICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRfZmlsZSA9IGYKKyAgICAgICAgICAgICAgICAgICAgcHJlZmVycmVkX3ZlciA9IChwZSwgcHYsIHByKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcHJlZmVycmVkX2ZpbGU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIHByZWZlcnJlZF9yOgorICAgICAgICAgICAgcHZfc3RyID0gJyVzLSVzJyAlIChwcmVmZXJyZWRfdiwgcHJlZmVycmVkX3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwdl9zdHIgPSBwcmVmZXJyZWRfdgorICAgICAgICBpZiBub3QgKHByZWZlcnJlZF9lIGlzIE5vbmUpOgorICAgICAgICAgICAgcHZfc3RyID0gJyVzOiVzJyAlIChwcmVmZXJyZWRfZSwgcHZfc3RyKQorICAgICAgICBpdGVtc3RyID0gIiIKKyAgICAgICAgaWYgaXRlbToKKyAgICAgICAgICAgIGl0ZW1zdHIgPSAiIChmb3IgaXRlbSAlcykiICUgaXRlbQorICAgICAgICBpZiBwcmVmZXJyZWRfZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oInByZWZlcnJlZCB2ZXJzaW9uICVzIG9mICVzIG5vdCBhdmFpbGFibGUlcyIsIHB2X3N0ciwgcG4sIGl0ZW1zdHIpCisgICAgICAgICAgICBhdmFpbGFibGVfdmVycyA9IFtdCisgICAgICAgICAgICBmb3IgZmlsZV9zZXQgaW4gcGtnX3BuOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVfc2V0OgorICAgICAgICAgICAgICAgICAgICBwZSwgcHYsIHByID0gZGF0YUNhY2hlLnBrZ19wZXB2cHJbZl0KKyAgICAgICAgICAgICAgICAgICAgdmVyX3N0ciA9IHB2CisgICAgICAgICAgICAgICAgICAgIGlmIHBlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyX3N0ciA9ICIlczolcyIgJSAocGUsIHZlcl9zdHIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB2ZXJfc3RyIGluIGF2YWlsYWJsZV92ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3ZlcnMuYXBwZW5kKHZlcl9zdHIpCisgICAgICAgICAgICBpZiBhdmFpbGFibGVfdmVyczoKKyAgICAgICAgICAgICAgICBhdmFpbGFibGVfdmVycy5zb3J0KCkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygidmVyc2lvbnMgb2YgJXMgYXZhaWxhYmxlOiAlcyIsIHBuLCAnICcuam9pbihhdmFpbGFibGVfdmVycykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgInNlbGVjdGluZyAlcyBhcyBQUkVGRVJSRURfVkVSU0lPTiAlcyBvZiBwYWNrYWdlICVzJXMiLCBwcmVmZXJyZWRfZmlsZSwgcHZfc3RyLCBwbiwgaXRlbXN0cikKKworICAgIHJldHVybiAocHJlZmVycmVkX3ZlciwgcHJlZmVycmVkX2ZpbGUpCisKKworZGVmIGZpbmRMYXRlc3RQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBmaWxlX3NldCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSBoaWdoZXN0IHZlcnNpb24gb2YgdGhlIHByb3ZpZGVycyBpbiBmaWxlX3NldC4KKyAgICBUYWtlIGRlZmF1bHQgcHJlZmVyZW5jZXMgaW50byBhY2NvdW50LgorICAgICIiIgorICAgIGxhdGVzdCA9IE5vbmUKKyAgICBsYXRlc3RfcCA9IDAKKyAgICBsYXRlc3RfZiA9IE5vbmUKKyAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfc2V0OgorICAgICAgICBwZSwgcHYsIHByID0gZGF0YUNhY2hlLnBrZ19wZXB2cHJbZmlsZV9uYW1lXQorICAgICAgICBkcCA9IGRhdGFDYWNoZS5wa2dfZHBbZmlsZV9uYW1lXQorCisgICAgICAgIGlmIChsYXRlc3QgaXMgTm9uZSkgb3IgKChsYXRlc3RfcCA9PSBkcCkgYW5kICh1dGlscy52ZXJjbXAobGF0ZXN0LCAocGUsIHB2LCBwcikpIDwgMCkpIG9yIChkcCA+IGxhdGVzdF9wKToKKyAgICAgICAgICAgIGxhdGVzdCA9IChwZSwgcHYsIHByKQorICAgICAgICAgICAgbGF0ZXN0X2YgPSBmaWxlX25hbWUKKyAgICAgICAgICAgIGxhdGVzdF9wID0gZHAKKworICAgIHJldHVybiAobGF0ZXN0LCBsYXRlc3RfZikKKworCitkZWYgZmluZEJlc3RQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBwa2dfcG4gPSBOb25lLCBpdGVtID0gTm9uZSk6CisgICAgIiIiCisgICAgSWYgdGhlcmUgaXMgYSBQUkVGRVJSRURfVkVSU0lPTiwgZmluZCB0aGUgaGlnaGVzdC1wcmlvcml0eSBiYmZpbGUKKyAgICBwcm92aWRpbmcgdGhhdCB2ZXJzaW9uLiAgSWYgbm90LCBmaW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBwcm92aWRlZCBieQorICAgIGFuIGJiZmlsZSBpbiB0aGUgaGlnaGVzdC1wcmlvcml0eSBzZXQuCisgICAgIiIiCisKKyAgICBzb3J0cGtnX3BuID0gc29ydFByaW9yaXRpZXMocG4sIGRhdGFDYWNoZSwgcGtnX3BuKQorICAgICMgRmluZCB0aGUgaGlnaGVzdCBwcmlvcml0eSBwcm92aWRlciB3aXRoIGEgUFJFRkVSUkVEX1ZFUlNJT04gc2V0CisgICAgKHByZWZlcnJlZF92ZXIsIHByZWZlcnJlZF9maWxlKSA9IGZpbmRQcmVmZXJyZWRQcm92aWRlcihwbiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBzb3J0cGtnX3BuLCBpdGVtKQorICAgICMgRmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdmlkZXIKKyAgICAobGF0ZXN0LCBsYXRlc3RfZikgPSBmaW5kTGF0ZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgc29ydHBrZ19wblswXSkKKworICAgIGlmIHByZWZlcnJlZF9maWxlIGlzIE5vbmU6CisgICAgICAgIHByZWZlcnJlZF9maWxlID0gbGF0ZXN0X2YKKyAgICAgICAgcHJlZmVycmVkX3ZlciA9IGxhdGVzdAorCisgICAgcmV0dXJuIChsYXRlc3QsIGxhdGVzdF9mLCBwcmVmZXJyZWRfdmVyLCBwcmVmZXJyZWRfZmlsZSkKKworCitkZWYgX2ZpbHRlclByb3ZpZGVycyhwcm92aWRlcnMsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSk6CisgICAgIiIiCisgICAgVGFrZSBhIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCBmaWx0ZXIvcmVvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBwcmV2aW91cyBidWlsZCByZXN1bHRzCisgICAgIiIiCisgICAgZWxpZ2libGUgPSBbXQorICAgIHByZWZlcnJlZF92ZXJzaW9ucyA9IHt9CisgICAgc29ydHBrZ19wbiA9IHt9CisKKyAgICAjIFRoZSBvcmRlciBvZiBwcm92aWRlcnMgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdGhlIGZpbGVzIG9uIHRoZSBkaXNrCisgICAgIyB1cCB0byBoZXJlLiBTb3J0IHBrZ19wbiB0byBtYWtlIGRlcGVuZGVuY3kgaXNzdWVzIHJlcHJvZHVjaWJsZSByYXRoZXIKKyAgICAjIHRoYW4gZWZmZWN0aXZlbHkgcmFuZG9tLgorICAgIHByb3ZpZGVycy5zb3J0KCkKKworICAgICMgQ29sbGF0ZSBwcm92aWRlcnMgYnkgUE4KKyAgICBwa2dfcG4gPSB7fQorICAgIGZvciBwIGluIHByb3ZpZGVyczoKKyAgICAgICAgcG4gPSBkYXRhQ2FjaGUucGtnX2ZuW3BdCisgICAgICAgIGlmIHBuIG5vdCBpbiBwa2dfcG46CisgICAgICAgICAgICBwa2dfcG5bcG5dID0gW10KKyAgICAgICAgcGtnX3BuW3BuXS5hcHBlbmQocCkKKworICAgIGxvZ2dlci5kZWJ1ZygxLCAicHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgcGtnX3BuLmtleXMoKSkKKworICAgICMgRmlyc3QgYWRkIFBSRUZFUlJFRF9WRVJTSU9OUworICAgIGZvciBwbiBpbiBwa2dfcG46CisgICAgICAgIHNvcnRwa2dfcG5bcG5dID0gc29ydFByaW9yaXRpZXMocG4sIGRhdGFDYWNoZSwgcGtnX3BuKQorICAgICAgICBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dID0gZmluZFByZWZlcnJlZFByb3ZpZGVyKHBuLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHNvcnRwa2dfcG5bcG5dLCBpdGVtKQorICAgICAgICBpZiBwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdOgorICAgICAgICAgICAgZWxpZ2libGUuYXBwZW5kKHByZWZlcnJlZF92ZXJzaW9uc1twbl1bMV0pCisKKyAgICAjIE5vdyBhZGQgbGF0ZXN0IHZlcnNpb25zCisgICAgZm9yIHBuIGluIHNvcnRwa2dfcG46CisgICAgICAgIGlmIHBuIGluIHByZWZlcnJlZF92ZXJzaW9ucyBhbmQgcHJlZmVycmVkX3ZlcnNpb25zW3BuXVsxXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHByZWZlcnJlZF92ZXJzaW9uc1twbl0gPSBmaW5kTGF0ZXN0UHJvdmlkZXIocG4sIGNmZ0RhdGEsIGRhdGFDYWNoZSwgc29ydHBrZ19wbltwbl1bMF0pCisgICAgICAgIGVsaWdpYmxlLmFwcGVuZChwcmVmZXJyZWRfdmVyc2lvbnNbcG5dWzFdKQorCisgICAgaWYgbGVuKGVsaWdpYmxlKSA9PSAwOgorICAgICAgICBsb2dnZXIuZXJyb3IoIm5vIGVsaWdpYmxlIHByb3ZpZGVycyBmb3IgJXMiLCBpdGVtKQorICAgICAgICByZXR1cm4gMAorCisgICAgIyBJZiBwbiA9PSBpdGVtLCBnaXZlIGl0IGEgc2xpZ2h0IGRlZmF1bHQgcHJlZmVyZW5jZQorICAgICMgVGhpcyBtZWFucyBQUkVGRVJSRURfUFJPVklERVJfZm9vYmFyIGRlZmF1bHRzIHRvIGZvb2JhciBpZiBhdmFpbGFibGUKKyAgICBmb3IgcCBpbiBwcm92aWRlcnM6CisgICAgICAgIHBuID0gZGF0YUNhY2hlLnBrZ19mbltwXQorICAgICAgICBpZiBwbiAhPSBpdGVtOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgKG5ld3ZlcnMsIGZuKSA9IHByZWZlcnJlZF92ZXJzaW9uc1twbl0KKyAgICAgICAgaWYgbm90IGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZ2libGUucmVtb3ZlKGZuKQorICAgICAgICBlbGlnaWJsZSA9IFtmbl0gKyBlbGlnaWJsZQorCisgICAgcmV0dXJuIGVsaWdpYmxlCisKKworZGVmIGZpbHRlclByb3ZpZGVycyhwcm92aWRlcnMsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSk6CisgICAgIiIiCisgICAgVGFrZSBhIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCBmaWx0ZXIvcmVvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBwcmV2aW91cyBidWlsZCByZXN1bHRzCisgICAgVGFrZXMgYSAibm9ybWFsIiB0YXJnZXQgaXRlbQorICAgICIiIgorCisgICAgZWxpZ2libGUgPSBfZmlsdGVyUHJvdmlkZXJzKHByb3ZpZGVycywgaXRlbSwgY2ZnRGF0YSwgZGF0YUNhY2hlKQorCisgICAgcHJlZmVydmFyID0gY2ZnRGF0YS5nZXRWYXIoJ1BSRUZFUlJFRF9QUk9WSURFUl8lcycgJSBpdGVtLCBUcnVlKQorICAgIGlmIHByZWZlcnZhcjoKKyAgICAgICAgZGF0YUNhY2hlLnByZWZlcnJlZFtpdGVtXSA9IHByZWZlcnZhcgorCisgICAgZm91bmRVbmlxdWUgPSBGYWxzZQorICAgIGlmIGl0ZW0gaW4gZGF0YUNhY2hlLnByZWZlcnJlZDoKKyAgICAgICAgZm9yIHAgaW4gZWxpZ2libGU6CisgICAgICAgICAgICBwbiA9IGRhdGFDYWNoZS5wa2dfZm5bcF0KKyAgICAgICAgICAgIGlmIGRhdGFDYWNoZS5wcmVmZXJyZWRbaXRlbV0gPT0gcG46CisgICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoInNlbGVjdGluZyAlcyB0byBzYXRpc2Z5ICVzIGR1ZSB0byBQUkVGRVJSRURfUFJPVklERVJTIiwgcG4sIGl0ZW0pCisgICAgICAgICAgICAgICAgZWxpZ2libGUucmVtb3ZlKHApCisgICAgICAgICAgICAgICAgZWxpZ2libGUgPSBbcF0gKyBlbGlnaWJsZQorICAgICAgICAgICAgICAgIGZvdW5kVW5pcXVlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBsb2dnZXIuZGVidWcoMSwgInNvcnRlZCBwcm92aWRlcnMgZm9yICVzIGFyZTogJXMiLCBpdGVtLCBlbGlnaWJsZSkKKworICAgIHJldHVybiBlbGlnaWJsZSwgZm91bmRVbmlxdWUKKworZGVmIGZpbHRlclByb3ZpZGVyc1J1blRpbWUocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpOgorICAgICIiIgorICAgIFRha2UgYSBsaXN0IG9mIHByb3ZpZGVycyBhbmQgZmlsdGVyL3Jlb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgcHJldmlvdXMgYnVpbGQgcmVzdWx0cworICAgIFRha2VzIGEgInJ1bnRpbWUiIHRhcmdldCBpdGVtCisgICAgIiIiCisKKyAgICBlbGlnaWJsZSA9IF9maWx0ZXJQcm92aWRlcnMocHJvdmlkZXJzLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpCisKKyAgICAjIFNob3VsZCB1c2UgZGF0YUNhY2hlLnByZWZlcnJlZCBoZXJlPworICAgIHByZWZlcnJlZCA9IFtdCisgICAgcHJlZmVycmVkX3ZhcnMgPSBbXQorICAgIHBucyA9IHt9CisgICAgZm9yIHAgaW4gZWxpZ2libGU6CisgICAgICAgIHBuc1tkYXRhQ2FjaGUucGtnX2ZuW3BdXSA9IHAKKyAgICBmb3IgcCBpbiBlbGlnaWJsZToKKyAgICAgICAgcG4gPSBkYXRhQ2FjaGUucGtnX2ZuW3BdCisgICAgICAgIHByb3ZpZGVzID0gZGF0YUNhY2hlLnBuX3Byb3ZpZGVzW3BuXQorICAgICAgICBmb3IgcHJvdmlkZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIHByZWZlcnZhciA9IGNmZ0RhdGEuZ2V0VmFyKCdQUkVGRVJSRURfUFJPVklERVJfJXMnICUgcHJvdmlkZSwgVHJ1ZSkKKyAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgImNoZWNraW5nIFBSRUZFUlJFRF9QUk9WSURFUl8lcyAodmFsdWUgJXMpIGFnYWluc3QgJXMiLCBwcm92aWRlLCBwcmVmZXJ2YXIsIHBucy5rZXlzKCkpCisgICAgICAgICAgICBpZiBwcmVmZXJ2YXIgaW4gcG5zIGFuZCBwbnNbcHJlZmVydmFyXSBub3QgaW4gcHJlZmVycmVkOgorICAgICAgICAgICAgICAgIHZhciA9ICJQUkVGRVJSRURfUFJPVklERVJfJXMgPSAlcyIgJSAocHJvdmlkZSwgcHJlZmVydmFyKQorICAgICAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKCJzZWxlY3RpbmcgJXMgdG8gc2F0aXNmeSBydW50aW1lICVzIGR1ZSB0byAlcyIsIHByZWZlcnZhciwgaXRlbSwgdmFyKQorICAgICAgICAgICAgICAgIHByZWZlcnJlZF92YXJzLmFwcGVuZCh2YXIpCisgICAgICAgICAgICAgICAgcHJlZiA9IHBuc1twcmVmZXJ2YXJdCisgICAgICAgICAgICAgICAgZWxpZ2libGUucmVtb3ZlKHByZWYpCisgICAgICAgICAgICAgICAgZWxpZ2libGUgPSBbcHJlZl0gKyBlbGlnaWJsZQorICAgICAgICAgICAgICAgIHByZWZlcnJlZC5hcHBlbmQocHJlZikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgbnVtYmVyUHJlZmVycmVkID0gbGVuKHByZWZlcnJlZCkKKworICAgIGlmIG51bWJlclByZWZlcnJlZCA+IDE6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVHJ5aW5nIHRvIHJlc29sdmUgcnVudGltZSBkZXBlbmRlbmN5ICVzIHJlc3VsdGVkIGluIGNvbmZsaWN0aW5nIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyaWVzIGJlaW5nIGZvdW5kLlxuVGhlIHByb3ZpZGVycyBmb3VuZCB3ZXJlOiAlc1xuVGhlIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyaWVzIHJlc3VsdGluZyBpbiB0aGlzIGNvbmZsaWN0IHdlcmU6ICVzIiwgaXRlbSwgcHJlZmVycmVkLCBwcmVmZXJyZWRfdmFycykKKworICAgIGxvZ2dlci5kZWJ1ZygxLCAic29ydGVkIHJ1bnRpbWUgcHJvdmlkZXJzIGZvciAlcyBhcmU6ICVzIiwgaXRlbSwgZWxpZ2libGUpCisKKyAgICByZXR1cm4gZWxpZ2libGUsIG51bWJlclByZWZlcnJlZAorCityZWdleHBfY2FjaGUgPSB7fQorCitkZWYgZ2V0UnVudGltZVByb3ZpZGVycyhkYXRhQ2FjaGUsIHJkZXBlbmQpOgorICAgICIiIgorICAgIFJldHVybiBhbnkgcHJvdmlkZXJzIG9mIHJ1bnRpbWUgZGVwZW5kZW5jeQorICAgICIiIgorICAgIHJwcm92aWRlcnMgPSBbXQorCisgICAgaWYgcmRlcGVuZCBpbiBkYXRhQ2FjaGUucnByb3ZpZGVyczoKKyAgICAgICAgcnByb3ZpZGVycyArPSBkYXRhQ2FjaGUucnByb3ZpZGVyc1tyZGVwZW5kXQorCisgICAgaWYgcmRlcGVuZCBpbiBkYXRhQ2FjaGUucGFja2FnZXM6CisgICAgICAgIHJwcm92aWRlcnMgKz0gZGF0YUNhY2hlLnBhY2thZ2VzW3JkZXBlbmRdCisKKyAgICBpZiBycHJvdmlkZXJzOgorICAgICAgICByZXR1cm4gcnByb3ZpZGVycworCisgICAgIyBPbmx5IHNlYXJjaCBkeW5hbWljIHBhY2thZ2VzIGlmIHdlIGNhbid0IGZpbmQgYW55dGhpbmcgaW4gb3RoZXIgdmFyaWFibGVzCisgICAgZm9yIHBhdHRlcm4gaW4gZGF0YUNhY2hlLnBhY2thZ2VzX2R5bmFtaWM6CisgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoJysnLCAiXCsiKQorICAgICAgICBpZiBwYXR0ZXJuIGluIHJlZ2V4cF9jYWNoZToKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlZ2V4cF9jYWNoZVtwYXR0ZXJuXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkVycm9yIHBhcnNpbmcgcmVndWxhciBleHByZXNzaW9uICclcyciLCBwYXR0ZXJuKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZWdleHBfY2FjaGVbcGF0dGVybl0gPSByZWdleHAKKyAgICAgICAgaWYgcmVnZXhwLm1hdGNoKHJkZXBlbmQpOgorICAgICAgICAgICAgcnByb3ZpZGVycyArPSBkYXRhQ2FjaGUucGFja2FnZXNfZHluYW1pY1twYXR0ZXJuXQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJBc3N1bWluZyAlcyBpcyBhIGR5bmFtaWMgcGFja2FnZSwgYnV0IGl0IG1heSBub3QgZXhpc3QiICUgcmRlcGVuZCkKKworICAgIHJldHVybiBycHJvdmlkZXJzCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9weXNoL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYmIvcHlzaC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcHlzaC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5IGIvYml0YmFrZS9saWIvYmIvcHlzaC9idWlsdGluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NDhlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9weXNoL2J1aWx0aW4ucHkKQEAgLTAsMCArMSw3MTAgQEAKKyMgYnVpbHRpbi5weSAtIGJ1aWx0aW5zIGFuZCB1dGlsaXRpZXMgZGVmaW5pdGlvbnMgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIiIiQnVpbHRpbiBhbmQgaW50ZXJuYWwgdXRpbGl0aWVzIGltcGxlbWVudGF0aW9ucy4KKworLSBCZXdhcmUgbm90IHRvIHVzZSBweXRob24gaW50ZXJwcmV0ZXIgZW52aXJvbm1lbnQgYXMgaWYgaXQgd2VyZSB0aGUgc2hlbGwKK2Vudmlyb25tZW50LiBGb3IgaW5zdGFuY2UsIGNvbW1hbmRzIHdvcmtpbmcgZGlyZWN0b3J5IG11c3QgYmUgZXhwbGljaXRlbHkgaGFuZGxlZAordGhyb3VnaCBlbnZbJ1BXRCddIGluc3RlYWQgb2YgcmVseWluZyBvbiBweXRob24gd29ya2luZyBkaXJlY3RvcnkuCisiIiIKK2ltcG9ydCBlcnJubworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2RlZiBoYXNfc3VicHJvY2Vzc19idWcoKToKKyAgICByZXR1cm4gZ2V0YXR0cihzdWJwcm9jZXNzLCAnbGlzdDJjbWRsaW5lJykgYW5kIFwKKyAgICAgICAoICAgIHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnJ10pID09ICcnIG9yIFwKKyAgICAgICAgICAgIHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnZm9vfGJhciddKSA9PSAnZm9vfGJhcicpCisgICAgICAgICAgICAKKyMgRGV0ZWN0IHB5dGhvbiBidWcgMTYzNDM0MzogInN1YnByb2Nlc3Mgc3dhbGxvd3MgZW1wdHkgYXJndW1lbnRzIHVuZGVyIHdpbjMyIgorIyA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9MTYzNDM0MyZncm91cF9pZD01NDcwJmF0aWQ9MTA1NDcwPgorIyBBbHNvIGRldGVjdDogIlsgMTcxMDgwMiBdIHN1YnByb2Nlc3MgbXVzdCBlc2NhcGUgcmVkaXJlY3Rpb24gY2hhcmFjdGVycyB1bmRlciB3aW4zMiIKKyMgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci9pbmRleC5waHA/ZnVuYz1kZXRhaWwmYWlkPTE3MTA4MDImZ3JvdXBfaWQ9NTQ3MCZhdGlkPTEwNTQ3MD4KK2lmIGhhc19zdWJwcm9jZXNzX2J1ZygpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzX2ZpeAorICAgIHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lID0gc3VicHJvY2Vzc19maXgubGlzdDJjbWRsaW5lCisKK2Zyb20gc2hlcnJvcnMgaW1wb3J0ICoKKworY2xhc3MgTm9uRXhpdGluZ1BhcnNlcihvcHRwYXJzZS5PcHRpb25QYXJzZXIpOgorICAgICIiIk9wdGlvblBhcnNlciBkZWZhdWx0IGJlaGF2aW91ciB1cG9uIGVycm9yIGlzIHRvIHByaW50IHRoZSBlcnJvciBtZXNzYWdlIGFuZAorICAgIGV4aXQuIFJhaXNlIGEgdXRpbGl0eSBlcnJvciBpbnN0ZWFkLgorICAgICIiIgorICAgIGRlZiBlcnJvcihzZWxmLCBtc2cpOgorICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3IobXNnKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHNldCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9TRVQgPSBOb25FeGl0aW5nUGFyc2VyKHVzYWdlPSJzZXQgLSBzZXQgb3IgdW5zZXQgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIikKK09QVF9TRVQuYWRkX29wdGlvbiggJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX2YnLCBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9J1RoZSBzaGVsbCBzaGFsbCBkaXNhYmxlIHBhdGhuYW1lIGV4cGFuc2lvbi4nKQorT1BUX1NFVC5hZGRfb3B0aW9uKCctZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19lJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSIiIldoZW4gdGhpcyBvcHRpb24gaXMgb24sIGlmIGEgc2ltcGxlIGNvbW1hbmQgZmFpbHMgZm9yIGFueSBvZiB0aGUgXAorICAgIHJlYXNvbnMgbGlzdGVkIGluIENvbnNlcXVlbmNlcyBvZiBTaGVsbCBFcnJvcnMgb3IgcmV0dXJucyBhbiBleGl0IHN0YXR1cyBcCisgICAgdmFsdWUgPjAsIGFuZCBpcyBub3QgcGFydCBvZiB0aGUgY29tcG91bmQgbGlzdCBmb2xsb3dpbmcgYSB3aGlsZSwgdW50aWwsIFwKKyAgICBvciBpZiBrZXl3b3JkLCBhbmQgaXMgbm90IGEgcGFydCBvZiBhbiBBTkQgb3IgT1IgbGlzdCwgYW5kIGlzIG5vdCBhIFwKKyAgICBwaXBlbGluZSBwcmVjZWRlZCBieSB0aGUgISByZXNlcnZlZCB3b3JkLCB0aGVuIHRoZSBzaGVsbCBzaGFsbCBpbW1lZGlhdGVseSBcCisgICAgZXhpdC4iIiIpCitPUFRfU0VULmFkZF9vcHRpb24oJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3gnLCBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9IiIiVGhlIHNoZWxsIHNoYWxsIHdyaXRlIHRvIHN0YW5kYXJkIGVycm9yIGEgdHJhY2UgZm9yIGVhY2ggY29tbWFuZCBcCisgICAgYWZ0ZXIgaXQgZXhwYW5kcyB0aGUgY29tbWFuZCBhbmQgYmVmb3JlIGl0IGV4ZWN1dGVzIGl0LiBJdCBpcyB1bnNwZWNpZmllZCBcCisgICAgd2hldGhlciB0aGUgY29tbWFuZCB0aGF0IHR1cm5zIHRyYWNpbmcgb2ZmIGlzIHRyYWNlZC4iIiIpCisKK2RlZiBidWlsdGluX3NldChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorCisgICAgb3B0aW9uLCBhcmdzID0gT1BUX1NFVC5wYXJzZV9hcmdzKGFyZ3MpCisgICAgZW52ID0gaW50ZXJwLmdldF9lbnYoKQorICAgIAorICAgIGlmIG9wdGlvbi5oYXNfZjoKKyAgICAgICAgZW52LnNldF9vcHQoJy1mJykKKyAgICBpZiBvcHRpb24uaGFzX2U6CisgICAgICAgIGVudi5zZXRfb3B0KCctZScpCisgICAgaWYgb3B0aW9uLmhhc194OgorICAgICAgICBlbnYuc2V0X29wdCgnLXgnKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHNoaWZ0IHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIGJ1aWx0aW5fc2hpZnQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcGFyYW1zID0gaW50ZXJwLmdldF9lbnYoKS5nZXRfcG9zaXRpb25hbF9hcmdzKCkKKyAgICBpZiBhcmdzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gaW50KGFyZ3NbMF0pCisgICAgICAgICAgICBpZiBuID4gbGVuKHBhcmFtcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICBlbHNlOgorICAgICAgICBuID0gMQorICAgICAgICAKKyAgICBwYXJhbXNbOm5dID0gW10KKyAgICBpbnRlcnAuZ2V0X2VudigpLnNldF9wb3NpdGlvbmFsX2FyZ3MocGFyYW1zKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGV4cG9ydCBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9FWFBPUlQgPSBOb25FeGl0aW5nUGFyc2VyKHVzYWdlPSJzZXQgLSBzZXQgb3IgdW5zZXQgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIikKK09QVF9FWFBPUlQuYWRkX29wdGlvbignLXAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfcCcsIGRlZmF1bHQ9RmFsc2UpCisKK2RlZiBidWlsdGluX2V4cG9ydChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfRVhQT1JULnBhcnNlX2FyZ3MoYXJncykKKyAgICBpZiBvcHRpb24uaGFzX3A6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgIAorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBhcmcuc3BsaXQoJz0nLCAxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gYXJnLCBOb25lCisgICAgICAgIGVudiA9IGludGVycC5nZXRfZW52KCkuZXhwb3J0KG5hbWUsIHZhbHVlKQorICAgIAorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHJldHVybiBzcGVjaWFsIGJ1aWx0aW4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiBidWlsdGluX3JldHVybihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIHJlcyA9IDAKKyAgICBpZiBhcmdzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSBpbnQoYXJnc1swXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgIGlmIG5vdCAwPD1yZXM8PTI1NToKKyAgICAgICAgICAgIHJlcyA9IDAKKyAgICAgICAgICAgIAorICAgICMgQlVHOiBzaG91bGQgYmUgbGFzdCBleGVjdXRlZCBjb21tYW5kIGV4aXQgY29kZSAgICAgICAgCisgICAgcmFpc2UgUmV0dXJuU2lnbmFsKHJlcykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyB0cmFwIHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIGJ1aWx0aW5fdHJhcChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIHN0ZGVyci53cml0ZSgndHJhcDogdXNhZ2U6IHRyYXAgW1thcmddIHNpZ25hbF9zcGVjIC4uLl1cbicpCisgICAgICAgIHJldHVybiAyCisKKyAgICBhY3Rpb24gPSBhcmdzWzBdCisgICAgZm9yIHNpZyBpbiBhcmdzWzE6XToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW52LnRyYXBzW3NpZ10gPSBhY3Rpb24KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc3RkZXJyLndyaXRlKCd0cmFwOiAlc1xuJyAlIHN0cihlKSkKKyAgICByZXR1cm4gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHVuc2V0IHNwZWNpYWwgYnVpbHRpbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09QVF9VTlNFVCA9IE5vbkV4aXRpbmdQYXJzZXIoInVuc2V0IC0gdW5zZXQgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzIG9mIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIikKK09QVF9VTlNFVC5hZGRfb3B0aW9uKCAnLWYnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfZicsIGRlZmF1bHQ9RmFsc2UpCitPUFRfVU5TRVQuYWRkX29wdGlvbiggJy12JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX3YnLCBkZWZhdWx0PUZhbHNlKQorCitkZWYgYnVpbHRpbl91bnNldChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfVU5TRVQucGFyc2VfYXJncyhhcmdzKQorICAgIAorICAgIHN0YXR1cyA9IDAKKyAgICBlbnYgPSBpbnRlcnAuZ2V0X2VudigpCisgICAgZm9yIGFyZyBpbiBhcmdzOiAgICAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgb3B0aW9uLmhhc19mOgorICAgICAgICAgICAgICAgIGVudi5yZW1vdmVfZnVuY3Rpb24oYXJnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgZW52W2FyZ10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFyQXNzaWdubWVudEVycm9yOgorICAgICAgICAgICAgc3RhdHVzID0gMQorICAgICAgICAgICAgCisgICAgcmV0dXJuIHN0YXR1cworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHdhaXQgc3BlY2lhbCBidWlsdGluCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgYnVpbHRpbl93YWl0KG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICByZXR1cm4gaW50ZXJwLndhaXQoW2ludChhcmcpIGZvciBhcmcgaW4gYXJnc10pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgY2F0IHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgdXRpbGl0eV9jYXQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKworICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBhcmdzID0gWyctJ10KKworICAgIHN0YXR1cyA9IDAKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlmIGFyZyA9PSAnLSc6CisgICAgICAgICAgICBkYXRhID0gc3RkaW4ucmVhZCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGVudlsnUFdEJ10sIGFyZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gZmlsZShwYXRoLCAncmInKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzdGRvdXQud3JpdGUoZGF0YSkKKyAgICAgICAgc3Rkb3V0LmZsdXNoKCkKKyAgICByZXR1cm4gc3RhdHVzCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGNkIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9DRCA9IE5vbkV4aXRpbmdQYXJzZXIoImNkIC0gY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIpCisKK2RlZiB1dGlsaXR5X2NkKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBvcHRpb24sIGFyZ3MgPSBPUFRfQ0QucGFyc2VfYXJncyhhcmdzKQorICAgIGVudiA9IGludGVycC5nZXRfZW52KCkKKyAgICAKKyAgICBkaXJlY3RvcnkgPSBOb25lCisgICAgcHJpbnRkaXIgPSBGYWxzZQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBob21lID0gZW52LmdldCgnSE9NRScpCisgICAgICAgIGlmIGhvbWU6CisgICAgICAgICAgICAjIFVuc3BlY2lmaWVkLCBkbyBub3RoaW5nCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlyZWN0b3J5ID0gaG9tZQorICAgIGVsaWYgbGVuKGFyZ3MpPT0xOgorICAgICAgICBkaXJlY3RvcnkgPSBhcmdzWzBdCisgICAgICAgIGlmIGRpcmVjdG9yeT09Jy0nOgorICAgICAgICAgICAgaWYgJ09MRFBXRCcgbm90IGluIGVudjoKKyAgICAgICAgICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3IoIk9MRFBXRCBub3Qgc2V0IikKKyAgICAgICAgICAgIHByaW50ZGlyID0gVHJ1ZQorICAgICAgICAgICAgZGlyZWN0b3J5ID0gZW52WydPTERQV0QnXQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFV0aWxpdHlFcnJvcigidG9vIG1hbnkgYXJndW1lbnRzIikKKyAgICAgICAgICAgIAorICAgIGN1cnBhdGggPSBOb25lCisgICAgIyBBYnNvbHV0ZSBkaXJlY3RvcmllcyB3aWxsIGJlIGhhbmRsZWQgY29ycmVjdGx5IGJ5IHRoZSBvcy5wYXRoLmpvaW4gY2FsbC4KKyAgICBpZiBub3QgZGlyZWN0b3J5LnN0YXJ0c3dpdGgoJy4nKSBhbmQgbm90IGRpcmVjdG9yeS5zdGFydHN3aXRoKCcuLicpOgorICAgICAgICBjZHBhdGhzID0gZW52LmdldCgnQ0RQQVRIJywgJy4nKS5zcGxpdCgnOycpCisgICAgICAgIGZvciBjZHBhdGggaW4gY2RwYXRoczoKKyAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oY2RwYXRoLCBkaXJlY3RvcnkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHApOgorICAgICAgICAgICAgICAgIGN1cnBhdGggPSBwCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAKKyAgICBpZiBjdXJwYXRoIGlzIE5vbmU6CisgICAgICAgIGN1cnBhdGggPSBkaXJlY3RvcnkKKyAgICBjdXJwYXRoID0gb3MucGF0aC5qb2luKGVudlsnUFdEJ10sIGRpcmVjdG9yeSkKKworICAgIGVudlsnT0xEUFdEJ10gPSBlbnZbJ1BXRCddCisgICAgZW52WydQV0QnXSA9IGN1cnBhdGgKKyAgICBpZiBwcmludGRpcjoKKyAgICAgICAgc3Rkb3V0LndyaXRlKCclc1xuJyAlIGN1cnBhdGgpCisgICAgcmV0dXJuIDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBjb2xvbiB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCitkZWYgdXRpbGl0eV9jb2xvbihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGVjaG8gdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorZGVmIHV0aWxpdHlfZWNobyhuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICAjIEVjaG8gb25seSB0YWtlcyBhcmd1bWVudHMsIG5vIG9wdGlvbnMuIFVzZSBwcmludGYgaWYgeW91IG5lZWQgZmFuY3kgc3R1ZmYuCisgICAgb3V0cHV0ID0gJyAnLmpvaW4oYXJncykgKyAnXG4nCisgICAgc3Rkb3V0LndyaXRlKG91dHB1dCkKKyAgICBzdGRvdXQuZmx1c2goKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGVncmVwIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVncmVwIGlzIHVzdWFsbHkgYSBzaGVsbCBzY3JpcHQuCisjIFVuZm9ydHVuYXRlbHksIHB5c2ggZG9lcyBub3Qgc3VwcG9ydCBzaGVsbCBzY3JpcHRzICp3aXRoIGFyZ3VtZW50cyogcmlnaHQgbm93LAorIyBzbyB0aGUgcmVkaXJlY3Rpb24gaXMgaW1wbGVtZW50ZWQgaGVyZSwgYXNzdW1pbmcgZ3JlcCBpcyBhdmFpbGFibGUuCitkZWYgdXRpbGl0eV9lZ3JlcChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICByZXR1cm4gcnVuX2NvbW1hbmQoJ2dyZXAnLCBbJy1FJ10gKyBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgCisgICAgICAgIHN0ZGVyciwgZGVidWdmbGFncykKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZW52IHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK2RlZiB1dGlsaXR5X2VudihuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgIAorICAgIGlmIGFyZ3MgYW5kIGFyZ3NbMF09PSctaSc6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2VudjogLWkgb3B0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCcpCisgICAgCisgICAgaSA9IDAKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlmICc9JyBub3QgaW4gYXJnOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBVcGRhdGUgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQKKyAgICAgICAgbmFtZSwgdmFsdWUgPSBhcmcuc3BsaXQoJz0nLCAxKQorICAgICAgICBlbnZbbmFtZV0gPSB2YWx1ZQorICAgICAgICBpICs9IDEKKyAgICAgICAgCisgICAgaWYgYXJnc1tpOl06CisgICAgICAgICMgRmluZCB0aGVuIGV4ZWN1dGUgdGhlIHNwZWNpZmllZCBpbnRlcnByZXRlcgorICAgICAgICB1dGlsaXR5ID0gZW52LmZpbmRfaW5fcGF0aChhcmdzW2ldKQorICAgICAgICBpZiBub3QgdXRpbGl0eToKKyAgICAgICAgICAgIHJldHVybiAxMjcKKyAgICAgICAgYXJnc1tpOmkrMV0gPSB1dGlsaXR5CisgICAgICAgIG5hbWUgPSBhcmdzW2ldCisgICAgICAgIGFyZ3MgPSBhcmdzW2krMTpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBydW5fY29tbWFuZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCAKKyAgICAgICAgICAgICAgICBkZWJ1Z2ZsYWdzKQorICAgICAgICBleGNlcHQgVXRpbGl0eUVycm9yOgorICAgICAgICAgICAgc3RkZXJyLndyaXRlKCdlbnY6IGZhaWxlZCB0byBleGVjdXRlICVzJyAlICcgJy5qb2luKFtuYW1lXSthcmdzKSkKKyAgICAgICAgICAgIHJldHVybiAxMjYgICAgICAgICAgICAKKyAgICBlbHNlOgorICAgICAgICBmb3IgcGFpciBpbiBlbnYuZ2V0X3ZhcmlhYmxlcygpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc3Rkb3V0LndyaXRlKCclcz0lc1xuJyAlIHBhaXIpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZXhpdCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfZXhpdChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICByZXMgPSBOb25lCisgICAgaWYgYXJnczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gaW50KGFyZ3NbMF0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICBpZiBub3QgMDw9cmVzPD0yNTU6CisgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICAKKyAgICBpZiByZXMgaXMgTm9uZToKKyAgICAgICAgIyBCVUc6IHNob3VsZCBiZSBsYXN0IGV4ZWN1dGVkIGNvbW1hbmQgZXhpdCBjb2RlCisgICAgICAgIHJlcyA9IDAKKyAgICAgICAgCisgICAgcmFpc2UgRXhpdFNpZ25hbChyZXMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgZmdyZXAgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VlIGVncmVwCitkZWYgdXRpbGl0eV9mZ3JlcChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICBpZiAnZGVidWctdXRpbGl0eScgaW4gZGVidWdmbGFnczoKKyAgICAgICAgcHJpbnQgaW50ZXJwLmxvZygnICcuam9pbihbbmFtZSwgc3RyKGFyZ3MpLCBpbnRlcnBbJ1BXRCddXSkgKyAnXG4nKQorICAgICAgICAKKyAgICByZXR1cm4gcnVuX2NvbW1hbmQoJ2dyZXAnLCBbJy1GJ10gKyBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgCisgICAgICAgIHN0ZGVyciwgZGVidWdmbGFncykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBndW56aXAgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VlIGVncmVwCitkZWYgdXRpbGl0eV9ndW56aXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgcmV0dXJuIHJ1bl9jb21tYW5kKCdnemlwJywgWyctZCddICsgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIAorICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIGtpbGwgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X2tpbGwobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBwaWQgPSBpbnQoYXJnKQorICAgICAgICBzdGF0dXMgPSBzdWJwcm9jZXNzLmNhbGwoWydwc2tpbGwnLCAnL1QnLCBzdHIocGlkKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICMgcHNraWxsIGlzIGFzeW5jaHJvbm91cywgaGVuY2UgdGhlIHN0dXBpZCBwb2xsaW5nIGxvb3AKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsncHNsaXN0Jywgc3RyKHBpZCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBvdXRwdXQgPSBwLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmICgncHJvY2VzcyAlZCB3YXMgbm90JyAlIHBpZCkgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgcmV0dXJuIHN0YXR1cworICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBta2RpciB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT1BUX01LRElSID0gTm9uRXhpdGluZ1BhcnNlcigibWtkaXIgLSBtYWtlIGRpcmVjdG9yaWVzLiIpCitPUFRfTUtESVIuYWRkX29wdGlvbignLXAnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdoYXNfcCcsIGRlZmF1bHQ9RmFsc2UpCisKK2RlZiB1dGlsaXR5X21rZGlyKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgICMgVE9ETzogaW1wbGVtZW50IHVtYXNrCisgICAgIyBUT0RPOiBpbXBsZW1lbnQgcHJvcGVyIHV0aWxpdHkgZXJyb3IgcmVwb3J0CisgICAgb3B0aW9uLCBhcmdzID0gT1BUX01LRElSLnBhcnNlX2FyZ3MoYXJncykKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZW52WydQV0QnXSwgYXJnKQorICAgICAgICBpZiBvcHRpb24uaGFzX3A6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBvcy5ta2RpcihwYXRoKQorICAgIHJldHVybiAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgbmV0c3RhdCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfbmV0c3RhdChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBkZWJ1Z2ZsYWdzKToKKyAgICAjIERvIHlvdSByZWFsbHkgZXhwZWN0IG1lIHRvIGltcGxlbWVudCBuZXRzdGF0ID8KKyAgICAjIFRoaXMgZW1wdHkgZm9ybSBpcyBlbm91Z2ggZm9yIE1lcmN1cmlhbCB0ZXN0cyBzaW5jZSBpdCdzCisgICAgIyBzdXBwb3NlZCB0byBnZW5lcmF0ZSBub3RoaW5nIHVwb24gc3VjY2Vzcy4gRmFraW5nIHRoaXMgdGVzdAorICAgICMgaXMgbm90IGEgYmlnIGRlYWwgZWl0aGVyLgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgcHdkIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKK09QVF9QV0QgPSBOb25FeGl0aW5nUGFyc2VyKCJwd2QgLSByZXR1cm4gd29ya2luZyBkaXJlY3RvcnkgbmFtZSIpCitPUFRfUFdELmFkZF9vcHRpb24oJy1MJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0naGFzX0wnLCBkZWZhdWx0PVRydWUsCisgICAgaGVscD0iIiJJZiB0aGUgUFdEIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zIGFuIGFic29sdXRlIHBhdGhuYW1lIG9mIFwKKyAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBmaWxlbmFtZXMgZG90IG9yIGRvdC1kb3QsIFwKKyAgICBwd2Qgc2hhbGwgd3JpdGUgdGhpcyBwYXRobmFtZSB0byBzdGFuZGFyZCBvdXRwdXQuIE90aGVyd2lzZSwgdGhlIC1MIG9wdGlvbiBcCisgICAgc2hhbGwgYmVoYXZlIGFzIHRoZSAtUCBvcHRpb24uIiIiKQorT1BUX1BXRC5hZGRfb3B0aW9uKCctUCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2hhc19MJywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSIiIlRoZSBhYnNvbHV0ZSBwYXRobmFtZSB3cml0dGVuIHNoYWxsIG5vdCBjb250YWluIGZpbGVuYW1lcyB0aGF0LCBpbiBcCisgICAgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGhuYW1lLCByZWZlciB0byBmaWxlcyBvZiB0eXBlIHN5bWJvbGljIGxpbmsuIiIiKQorCitkZWYgdXRpbGl0eV9wd2QobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKworICAgIG9wdGlvbiwgYXJncyA9IE9QVF9QV0QucGFyc2VfYXJncyhhcmdzKSAgICAgICAgCisgICAgc3Rkb3V0LndyaXRlKCclc1xuJyAlIGVudlsnUFdEJ10pCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAKKyMgcHJpbnRmIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSRV9VTkVTQ0FQRSA9IHJlLmNvbXBpbGUocicoXFx4W2EtekEtWjAtOV17Mn18XFxbMC03XXsxLDN9fFxcLiknKQorCitkZWYgdXRpbGl0eV9wcmludGYobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICAgICAgCisgICAgZGVmIHJlcGxhY2UobSk6CisgICAgICAgIGFzc2VydCBtLmdyb3VwKCkKKyAgICAgICAgZyA9IG0uZ3JvdXAoKVsxOl0KKyAgICAgICAgaWYgZy5zdGFydHN3aXRoKCd4Jyk6CisgICAgICAgICAgICByZXR1cm4gY2hyKGludChnWzE6XSwgMTYpKQorICAgICAgICBpZiBsZW4oZykgPD0gMyBhbmQgbGVuKFtjIGZvciBjIGluIGcgaWYgYyBpbiAnMDEyMzQ1NjcnXSkgPT0gbGVuKGcpOgorICAgICAgICAgICAgIyBZYXksIGFuIG9jdGFsIG51bWJlcgorICAgICAgICAgICAgcmV0dXJuIGNocihpbnQoZywgOCkpCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAnYSc6ICdcYScsCisgICAgICAgICAgICAnYic6ICdcYicsCisgICAgICAgICAgICAnZic6ICdcZicsCisgICAgICAgICAgICAnbic6ICdcbicsCisgICAgICAgICAgICAncic6ICdccicsCisgICAgICAgICAgICAndCc6ICdcdCcsCisgICAgICAgICAgICAndic6ICdcdicsCisgICAgICAgICAgICAnXFwnOiAnXFwnLAorICAgICAgICB9LmdldChnKQorICAgICAgICAKKyAgICAjIENvbnZlcnQgZXNjYXBlIHNlcXVlbmNlcworICAgIGZvcm1hdCA9IHJlLnN1YihSRV9VTkVTQ0FQRSwgcmVwbGFjZSwgYXJnc1swXSkKKyAgICBzdGRvdXQud3JpdGUoZm9ybWF0ICUgdHVwbGUoYXJnc1sxOl0pKQorICAgIHJldHVybiAwCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHRydWUgdXRpbGl0eQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiB1dGlsaXR5X3RydWUobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICByZXR1cm4gMAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCisjIHNlZCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUkVfU0VEID0gcmUuY29tcGlsZShyJ15zKC4pLipcMVthLXpBLVpdKiQnKQorCisjIGN5Z3dpbiBzZWQgZmFpbHMgd2l0aCBzb21lIGV4cHJlc3Npb25zIHdoZW4gdGhleSBkbyBub3QgZW5kIHdpdGggYSBzaW5nbGUgc3BhY2UuCisjIHNlZSB1bml0IHRlc3RzIGZvciBkZXRhaWxzLiBJbnRlcmVzdGluZ2x5LCB0aGUgc2FtZSBleHByZXNzaW9ucyB3b3JrcyBwZXJmZWN0bHkKKyMgaW4gY3lnd2luIHNoZWxsLgorZGVmIHV0aWxpdHlfc2VkKG5hbWUsIGFyZ3MsIGludGVycCwgZW52LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgICMgU2NhbiBwYXR0ZXJuIGFyZ3VtZW50cyBhbmQgYXBwZW5kIGEgc3BhY2UgaWYgbmVjZXNzYXJ5CisgICAgZm9yIGkgaW4geHJhbmdlKGxlbihhcmdzKSk6CisgICAgICAgIGlmIG5vdCBSRV9TRUQuc2VhcmNoKGFyZ3NbaV0pOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYXJnc1tpXSA9IGFyZ3NbaV0gKyAnICcKKworICAgIHJldHVybiBydW5fY29tbWFuZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwgCisgICAgICAgIHN0ZGVyciwgZGVidWdmbGFncykKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzbGVlcCB1dGlsaXR5CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVmIHV0aWxpdHlfc2xlZXAobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisgICAgaWYgJ2RlYnVnLXV0aWxpdHknIGluIGRlYnVnZmxhZ3M6CisgICAgICAgIHByaW50IGludGVycC5sb2coJyAnLmpvaW4oW25hbWUsIHN0cihhcmdzKSwgaW50ZXJwWydQV0QnXV0pICsgJ1xuJykKKyAgICB0aW1lLnNsZWVwKGludChhcmdzWzBdKSkKKyAgICByZXR1cm4gMAorICAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorIyBzb3J0IHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPUFRfU09SVCA9IE5vbkV4aXRpbmdQYXJzZXIoInNvcnQgLSBzb3J0LCBtZXJnZSwgb3Igc2VxdWVuY2UgY2hlY2sgdGV4dCBmaWxlcyIpCisKK2RlZiB1dGlsaXR5X3NvcnQobmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgZGVidWdmbGFncyk6CisKKyAgICBkZWYgc29ydChwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSAnLSc6CisgICAgICAgICAgICBsaW5lcyA9IHN0ZGluLnJlYWRsaW5lcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzdGRlcnIud3JpdGUoc3RyKGUpICsgJ1xuJykKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAKKyAgICAgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXVstMV0hPSdcbic6CisgICAgICAgICAgICBsaW5lc1stMV0gPSBsaW5lc1stMV0gKyAnXG4nCisgICAgICAgIHJldHVybiBsaW5lcworICAgIAorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisgICAgICAgIAorICAgIG9wdGlvbiwgYXJncyA9IE9QVF9TT1JULnBhcnNlX2FyZ3MoYXJncykKKyAgICBhbGxsaW5lcyA9IFtdCisgICAgCisgICAgaWYgbGVuKGFyZ3MpPD0wOgorICAgICAgICBhcmdzICs9IFsnLSddCisgICAgICAgIAorICAgICMgTG9hZCBhbGwgZmlsZXMgbGluZXMKKyAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgb3MuY2hkaXIoZW52WydQV0QnXSkKKyAgICAgICAgZm9yIHBhdGggaW4gYXJnczoKKyAgICAgICAgICAgIGFsbGxpbmVzICs9IHNvcnQocGF0aCkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjdXJkaXIpCisgICAgICAgICAgICAKKyAgICBhbGxsaW5lcy5zb3J0KCkKKyAgICBmb3IgbGluZSBpbiBhbGxsaW5lczoKKyAgICAgICAgc3Rkb3V0LndyaXRlKGxpbmUpCisgICAgcmV0dXJuIDAKKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhnIHV0aWxpdHkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2hnY29tbWFuZHMgPSBbCisgICAgJ2FkZCcsCisgICAgJ2FkZHJlbW92ZScsCisgICAgJ2NvbW1pdCcsICdjaScsCisgICAgJ2RlYnVncmVuYW1lJywKKyAgICAnZGVidWd3YWxrJywKKyAgICAnZmFsYWJhbGEnLCAjIER1bW15IGNvbW1hbmQgdXNlZCBpbiBhIG1lcmN1cmlhbCB0ZXN0CisgICAgJ2luY29taW5nJywKKyAgICAnbG9jYXRlJywKKyAgICAncHVsbCcsCisgICAgJ3B1c2gnLAorICAgICdxaW5pdCcsCisgICAgJ3JlbW92ZScsICdybScsCisgICAgJ3JlbmFtZScsICdtdicsCisgICAgJ3JldmVydCcsICAgIAorICAgICdzaG93Y29uZmlnJywKKyAgICAnc3RhdHVzJywgJ3N0JywKKyAgICAnc3RyaXAnLAorICAgIF0KKworZGVmIHJld3JpdGVzbGFzaGVzKG5hbWUsIGFyZ3MpOgorICAgICMgU2V2ZXJhbCBoZyBjb21tYW5kcyBvdXRwdXQgZmlsZSBwYXRocywgcmV3cml0ZSB0aGUgc2VwYXJhdG9ycworICAgIGlmIGxlbihhcmdzKSA+IDEgYW5kIG5hbWUubG93ZXIoKS5lbmRzd2l0aCgncHl0aG9uJykgXAorICAgICAgIGFuZCBhcmdzWzBdLmVuZHN3aXRoKCdoZycpOgorICAgICAgICBmb3IgY21kIGluIGhnY29tbWFuZHM6CisgICAgICAgICAgICBpZiBjbWQgaW4gYXJnc1sxOl06CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIAorICAgICMgc3ZuIG91dHB1dCBjb250YWlucyBtYW55IHBhdGhzIHdpdGggT1Mgc3BlY2lmaWMgc2VwYXJhdG9ycy4KKyAgICAjIE5vcm1hbGl6ZSB0aGVzZSB0byB1bml4IHBhdGhzLgorICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKG5hbWUpCisgICAgaWYgYmFzZS5zdGFydHN3aXRoKCdzdm4nKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICAKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHJld3JpdGVoZyhvdXRwdXQpOgorICAgIGlmIG5vdCBvdXRwdXQ6CisgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAjIFJld3JpdGUgb3Mgc3BlY2lmaWMgbWVzc2FnZXMKKyAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgnOiBUaGUgc3lzdGVtIGNhbm5vdCBmaW5kIHRoZSBmaWxlIHNwZWNpZmllZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpCisgICAgb3V0cHV0ID0gcmUuc3ViKCc6IEFjY2VzcyBpcyBkZW5pZWQuKiQnLCAnOiBQZXJtaXNzaW9uIGRlbmllZCcsIG91dHB1dCkKKyAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgnOiBObyBjb25uZWN0aW9uIGNvdWxkIGJlIG1hZGUgYmVjYXVzZSB0aGUgdGFyZ2V0IG1hY2hpbmUgYWN0aXZlbHkgcmVmdXNlZCBpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogQ29ubmVjdGlvbiByZWZ1c2VkJykKKyAgICByZXR1cm4gb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKK2RlZiBydW5fY29tbWFuZChuYW1lLCBhcmdzLCBpbnRlcnAsIGVudiwgc3RkaW4sIHN0ZG91dCwKKyAgICAgICAgICAgICAgICBzdGRlcnIsIGRlYnVnZmxhZ3MpOgorICAgICMgRXhlY3V0ZSB0aGUgY29tbWFuZAorICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBkZWJ1Z2ZsYWdzOgorICAgICAgICBwcmludCBpbnRlcnAubG9nKCcgJy5qb2luKFtuYW1lLCBzdHIoYXJncyksIGludGVycFsnUFdEJ11dKSArICdcbicpCisKKyAgICBoZ2JpbiA9IGludGVycC5vcHRpb25zKCkuaGdiaW5hcnkKKyAgICBpc2hnID0gaGdiaW4gYW5kICgnaGcnIGluIG5hbWUgb3IgYXJncyBhbmQgJ2hnJyBpbiBhcmdzWzBdKQorICAgIHVuaXhvdXRwdXQgPSAnY3lnd2luJyBpbiBuYW1lIG9yIGlzaGcKKyAgICAKKyAgICBleGVjX2VudiA9IGVudi5nZXRfdmFyaWFibGVzKCkgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgIyBCVUc6IGNvbXBhcmluZyBmaWxlIGRlc2NyaXB0b3IgaXMgY2xlYXJseSBub3QgYSByZWxpYWJsZSB3YXkgdG8gdGVsbAorICAgICAgICAjIHdoZXRoZXIgdGhleSBwb2ludCBvbiB0aGUgc2FtZSB1bmRlcmx5aW5nIG9iamVjdC4gQnV0IGluIHB5c2ggbGltaXRlZAorICAgICAgICAjIHNjb3BlIHRoaXMgaXMgdXN1YWxseSByaWdodCwgd2UgZG8gbm90IGV4cGVjdCBjb21wbGljYXRlZCByZWRpcmVjdGlvbnMKKyAgICAgICAgIyBiZXNpZGVzIHVzdWFsIDI+JjEuCisgICAgICAgICMgU3RpbGwgdGhlcmUgaXMgb25lIGNhc2Ugd2UgaGF2ZSBidXQgY2Fubm90IGRlYWwgd2l0aCBpcyB3aGVuIHN0ZG91dAorICAgICAgICAjIGFuZCBzdGRlcnIgYXJlIHJlZGlyZWN0ZWQgKmJ5IHB5c2ggY2FsbGVyKi4gVGhpcyB0aGUgcmVhc29uIGZvciB0aGUKKyAgICAgICAgIyAtLXJlZGlyZWN0IHB5c2goKSBvcHRpb24uCisgICAgICAgICMgTm93LCB3ZSB3YW50IHRvIGtub3cgdGhleSBhcmUgdGhlIHNhbWUgYmVjYXVzZSB3ZSBzb21ldGltZXMgbmVlZCB0byAKKyAgICAgICAgIyB0cmFuc2Zvcm0gdGhlIGNvbW1hbmQgb3V0cHV0LCBtb3N0bHkgcmVtb3ZlIENSLUxGIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICMgY29tbWFuZCBvdXRwdXQgaXMgdW5peC1saWtlLiBDeWd3aW4gdXRpbGllcyBhcmUgYSBzcGVjaWFsIGNhc2UgYmVjYXVzZQorICAgICAgICAjIHRoZXkgZXhwbGljaXRlbHkgc2V0IHRoZWlyIG91dHB1dCBzdHJlYW1zIHRvIGJpbmFyeSBtb2RlLCBzbyB3ZSBoYXZlCisgICAgICAgICMgbm90aGluZyB0byBkby4gRm9yIGFsbCBvdGhlcnMgY29tbWFuZHMsIHdlIGhhdmUgdG8gZ3Vlc3Mgd2hldGhlciB0aGV5CisgICAgICAgICMgYXJlIHNlbmRpbmcgdGV4dCBkYXRhLCBpbiB3aGljaCBjYXNlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGRvbmUuCisgICAgICAgICMgQWdhaW4sIHRoZSBOVUwgY2hhcmFjdGVyIHRlc3QgaXMgdW5yZWxpYWJsZSBidXQgc2hvdWxkIGJlIGVub3VnaCBmb3IKKyAgICAgICAgIyBoZyB0ZXN0cy4KKyAgICAgICAgcmVkaXJlY3RlZCA9IHN0ZG91dC5maWxlbm8oKT09c3RkZXJyLmZpbGVubygpCisgICAgICAgIGlmIG5vdCByZWRpcmVjdGVkOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW25hbWVdICsgYXJncywgY3dkPWVudlsnUFdEJ10sIGVudj1leGVjX2VudiwgCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW25hbWVdICsgYXJncywgY3dkPWVudlsnUFdEJ10sIGVudj1leGVjX2VudiwgCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgorICAgICAgICByYWlzZSBVdGlsaXR5RXJyb3Ioc3RyKGUpKQorCisgICAgaWYgbm90IHVuaXhvdXRwdXQ6CisgICAgICAgIGRlZiBlbmNvZGUocyk6CisgICAgICAgICAgICBpZiAnXDAnIGluIHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKQorICAgIGVsc2U6CisgICAgICAgIGVuY29kZSA9IGxhbWJkYSBzOiBzCisKKyAgICBpZiByZXdyaXRlc2xhc2hlcyhuYW1lLCBhcmdzKToKKyAgICAgICAgZW5jb2RlMV8gPSBlbmNvZGUKKyAgICAgICAgZGVmIGVuY29kZShzKToKKyAgICAgICAgICAgIHMgPSBlbmNvZGUxXyhzKQorICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgnXFxcXCcsICdcXCcpCisgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCdcXCcsICcvJykKKyAgICAgICAgICAgIHJldHVybiBzCisKKyAgICBpZiBpc2hnOgorICAgICAgICBlbmNvZGUyXyA9IGVuY29kZQorICAgICAgICBkZWYgZW5jb2RlKHMpOgorICAgICAgICAgICAgcmV0dXJuIHJld3JpdGVoZyhlbmNvZGUyXyhzKSkKKyAgICAKKyAgICBzdGRvdXQud3JpdGUoZW5jb2RlKG91dCkpCisgICAgaWYgbm90IHJlZGlyZWN0ZWQ6CisgICAgICAgIHN0ZGVyci53cml0ZShlbmNvZGUoZXJyKSkKKyAgICByZXR1cm4gcC5yZXR1cm5jb2RlCisgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5IGIvYml0YmFrZS9saWIvYmIvcHlzaC9pbnRlcnAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkOGM5MgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3B5c2gvaW50ZXJwLnB5CkBAIC0wLDAgKzEsMTM2NyBAQAorIyBpbnRlcnAucHkgLSBzaGVsbCBpbnRlcnByZXRlciBmb3IgcHlzaC4KKyMKKyMgQ29weXJpZ2h0IDIwMDcgUGF0cmljayBNZXphcmQKKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisiIiJJbXBsZW1lbnQgdGhlIHNoZWxsIGludGVycHJldGVyLgorCitNb3N0IHJlZmVyZW5jZXMgYXJlIG1hZGUgdG8gIlRoZSBPcGVuIEdyb3VwIEJhc2UgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNiIuCis8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L3V0aWxpdGllcy94Y3VfY2hhcDAyLmh0bWw+CisiIiIKKyMgVE9ETzogZG9jdW1lbnQgdGhlIGZhY3QgaW5wdXQgc3RyZWFtcyBtdXN0IGltcGxlbWVudCBmaWxlbm8oKSBzbyBQb3BlbiB3aWxsIHdvcmsgY29ycmVjdGx5LgorIyBpdCByZXF1aXJlcyBub24tc3RkaW4gc3RyZWFtIHRvIGJlIGltcGxlbWVudGVkIGFzIGZpbGVzLiBTdGlsbCB0byBiZSB0ZXN0ZWQuLi4KKyMgRE9DOiBwYXRoc2VwIGlzIHVzZWQgaW4gUEFUSCBpbnN0ZWFkIG9mICc6Jy4gQ2xlYXJseSwgdGhlcmUgYXJlIHBhdGggc3ludGF4IGlzc3VlcyBoZXJlLgorIyBUT0RPOiBzdG9wIGNvbW1hbmQgZXhlY3V0aW9uIHVwb24gZXJyb3IuCisjIFRPRE86IHNvcnQgb3V0IHRoZSBmaWxlbmFtZS9pb19udW1iZXIgbWVzcy4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBmaWxlbmFtZXMgb25seS4KKyMgVE9ETzogcmV2aWV3IHN1YnNoZWxsIGltcGxlbWVudGF0aW9uCisjIFRPRE86IHRlc3QgZW52aXJvbm1lbnQgY2xvbmluZyBmb3Igbm9uLXNwZWNpYWwgYnVpbHRpbnMKKyMgVE9ETzogc2V0IC14IHNob3VsZCBub3QgcmVidWlsZCBjb21tYW5kcyBmcm9tIHRva2VucywgYXNzaWdubWVudHMvcmVkaXJlY3Rpb25zIGFyZSBsb3N0CisjIFRPRE86IHVuaXQgdGVzdCBmb3IgdmFyaWFibGUgYXNzaWdubWVudAorIyBUT0RPOiB0ZXN0IGVycm9yIG1hbmFnZW1lbnQgd3J0IGVycm9yIHR5cGUvdXRpbGl0eSB0eXBlCisjIFRPRE86IHRlc3QgZm9yIGJpbmFyeSBvdXRwdXQgZXZlcnl3aGVyZQorIyBCVUc6IGRlYnVnLXBhcnNpbmcgZG9lcyBub3QgcGFzcyBsb2cgZmlsZSB0byBQTFkuIE1heWJlIGEgUExZIHVwZ3JhZGUgaXMgbmVjZXNzYXJ5LgoraW1wb3J0IGJhc2U2NAoraW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitpbXBvcnQgZXJybm8KK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCit0cnk6CisgICAgcyA9IHNldCgpCisgICAgZGVsIHMKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZnJvbSBTZXQgaW1wb3J0IFNldCBhcyBzZXQKKworaW1wb3J0IGJ1aWx0aW4KK2Zyb20gc2hlcnJvcnMgaW1wb3J0ICoKK2ltcG9ydCBweXNobGV4CitpbXBvcnQgcHlzaHlhY2MKKworZGVmIG1hcHBlbmQoZnVuYywgKmFyZ3MsICoqa2FyZ3MpOgorICAgICIiIkxpa2UgbWFwIGJ1dCBhc3N1bWUgZnVuYyByZXR1cm5zIGEgbGlzdC4gUmV0dXJuZWQgbGlzdHMgYXJlIG1lcmdlZCBpbnRvCisgICAgYSBzaW5nbGUgb25lLgorICAgICIiIgorICAgIHJldHVybiByZWR1Y2UobGFtYmRhIGEsYjogYStiLCBtYXAoZnVuYywgKmFyZ3MsICoqa2FyZ3MpLCBbXSkKKworY2xhc3MgRmlsZVdyYXBwZXI6CisgICAgIiIiRmlsZSBvYmplY3Qgd3JhcHBlciB0byBlYXNlIGRlYnVnZ2luZy4KKyAgICAKKyAgICBBbGxvdyBtb2RlIGNoZWNraW5nIGFuZCBpbXBsZW1lbnQgZmlsZSBkdXBsaWNhdGlvbiB0aHJvdWdoIGEgc2ltcGxlIAorICAgIHJlZmVyZW5jZSBjb3VudGluZyBzY2hlbWUuIE5vdCBzdXJlIHRoZSBsYXR0ZXIgaXMgcmVhbGx5IHVzZWZ1bCBzaW5jZQorICAgIG9ubHkgcmVhbCBmaWxlIGRlc2NyaXB0b3JzIGNhbiBiZSB1c2VkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlLCBmaWxlLCBjbG9zZT1UcnVlKToKKyAgICAgICAgaWYgbW9kZSBub3QgaW4gKCdyJywgJ3cnLCAnYScpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignaW52YWxpZCBtb2RlOiAlcycgJSBtb2RlKQorICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQorICAgICAgICBzZWxmLl9jbG9zZSA9IGNsb3NlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgRmlsZVdyYXBwZXIpOgorICAgICAgICAgICAgaWYgZmlsZS5fcmVmY291bnRbMF0gPD0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKDAsICdFcnJvcicpCisgICAgICAgICAgICBzZWxmLl9yZWZjb3VudCA9IGZpbGUuX3JlZmNvdW50CisgICAgICAgICAgICBzZWxmLl9yZWZjb3VudFswXSArPSAxCisgICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZS5fZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVmY291bnQgPSBbMV0KKyAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCisgICAgICAgIAorICAgIGRlZiBkdXAoc2VsZik6CisgICAgICAgIHJldHVybiBGaWxlV3JhcHBlcihzZWxmLl9tb2RlLCBzZWxmLCBzZWxmLl9jbG9zZSkKKyAgICAgICAgCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgIiIiZmlsZW5vKCkgc2hvdWxkIGJlIG9ubHkgbmVjZXNzYXJ5IGZvciBpbnB1dCBzdHJlYW1zLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5maWxlbm8oKQorICAgICAgICAKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSE9J3InOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRXJyb3InKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5yZWFkKHNpemUpCisgICAgICAgIAorICAgIGRlZiByZWFkbGluZXMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUucmVhZGxpbmVzKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgCisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoJ3cnLCAnYScpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRXJyb3InKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS53cml0ZShzKQorICAgICAgICAKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQorICAgICAgICAKKyAgICBkZWYgY2xvc2Uoc2VsZik6ICAgICAgICAKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZmNvdW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCAgc2VsZi5fcmVmY291bnRbMF0gPiAwCisgICAgICAgIAorICAgICAgICBzZWxmLl9yZWZjb3VudFswXSAtPSAxICAgIAorICAgICAgICBpZiBzZWxmLl9yZWZjb3VudFswXSA9PSAwOgorICAgICAgICAgICAgc2VsZi5fbW9kZSA9ICdjJworICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuX3JlZmNvdW50ID0gTm9uZQorICAgICAgICAgICAgICAgIAorICAgIGRlZiBtb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICduYW1lJzoKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IGdldGF0dHIoc2VsZi5fZmlsZSwgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIAorZGVmIHdpbjMyX29wZW5fZGV2bnVsbChtb2RlKToKKyAgICByZXR1cm4gb3BlbignTlVMJywgbW9kZSkKKyAgICAKKyAgICAgICAgCitjbGFzcyBSZWRpcmVjdGlvbnM6CisgICAgIiIiU3RvcmVzIG9wZW4gZmlsZXMgYW5kIHRoZWlyIG1hcHBpbmcgdG8gcHNldWRvLXNoIGZpbGUgZGVzY3JpcHRvci4KKyAgICAiIiIKKyAgICAjIEJVRzogcmVkaXJlY3Rpb25zIGFyZSBub3QgaGFuZGxlZCBjb3JyZWN0bHk6IDE+JjMgMj4mMyAzPiY0IGRvZXMgCisgICAgIyBub3QgbWFrZSAxIHRvIHJlZGlyZWN0IHRvIDQKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKToKKyAgICAgICAgc2VsZi5fZGVzY3JpcHRvcnMgPSB7fQorICAgICAgICBpZiBzdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKDAsIHN0ZGluKQorICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfZGVzY3JpcHRvcigxLCBzdGRvdXQpCisgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9kZXNjcmlwdG9yKDIsIHN0ZGVycikKKyAgICAgICAgICAgIAorICAgIGRlZiBhZGRfaGVyZV9kb2N1bWVudChzZWxmLCBpbnRlcnAsIG5hbWUsIGNvbnRlbnQsIGlvX251bWJlcj1Ob25lKToKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSAwCisgICAgICAgICAgICAKKyAgICAgICAgaWYgbmFtZT09cHlzaGxleC51bnF1b3RlX3dvcmR0cmVlKG5hbWUpOgorICAgICAgICAgICAgY29udGVudCA9IGludGVycC5leHBhbmRfaGVyZV9kb2N1bWVudCgoJ1RPS0VOJywgY29udGVudCkpCisgICAgCisgICAgICAgICMgV3JpdGUgZG9jdW1lbnQgY29udGVudCBpbiBhIHRlbXBvcmFyeSBmaWxlCisgICAgICAgIHRtcCA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0bXAud3JpdGUoY29udGVudCkKKyAgICAgICAgICAgIHRtcC5mbHVzaCgpCisgICAgICAgICAgICB0bXAuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5fYWRkX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCBGaWxlV3JhcHBlcigncicsIHRtcCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRtcC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSAgICAgICAgICAgICAgICAKKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBpbnRlcnAsIG9wLCBmaWxlbmFtZSwgaW9fbnVtYmVyPU5vbmUpOgorICAgICAgICBpZiBvcCBub3QgaW4gKCc8JywgJz4nLCAnPnwnLCAnPj4nLCAnPiYnKToKKyAgICAgICAgICAgICMgVE9ETzogYWRkIGRlc2NyaXB0b3IgZHVwbGljYXRpb24gYW5kIGhlcmVfZG9jdW1lbnRzICAgICAgCisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdVbnN1cHBvcnRlZCByZWRpcmVjdGlvbiBvcGVyYXRvciAiJXMiJyAlIG9wKQorICAgICAgICAgICAgCisgICAgICAgIGlmIGlvX251bWJlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlvX251bWJlciA9IGludChpb19udW1iZXIpCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG9wID09ICc+JicgYW5kIGZpbGVuYW1lLmlzZGlnaXQoKSkgb3IgZmlsZW5hbWU9PSctJzoKKyAgICAgICAgICAgICMgTm8gZXhwYW5zaW9uIGZvciBmaWxlIGRlc2NyaXB0b3JzLCBxdW90ZSB0aGVtIGlmIHlvdSB3YW50IGEgZmlsZW5hbWUKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgICAgICAgICAgICAjIFRPRE86IHdpbjMyIGtsdWRnZQorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lPT0nL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSAnTlVMJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVE9ETzogaGFuZGxlIGFic29sdXRlIHBhdGhuYW1lcywgdGhleSBhcmUgdW5saWtlbHkgdG8gZXhpc3Qgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICMgY3VycmVudCBwbGF0Zm9ybSAod2luMzIgZm9yIGluc3RhbmNlKS4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gaW50ZXJwLmV4cGFuZF9yZWRpcmVjdGlvbigoJ1RPS0VOJywgZmlsZW5hbWUpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBmdWxsbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcignJXM6IGFtYmlndW91cyByZWRpcmVjdCcgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIGFic29sdXRlIHBhdGggYmFzZWQgb24gUFdECisgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oaW50ZXJwLmdldF9lbnYoKVsnUFdEJ10sIGZ1bGxuYW1lKQorICAgICAgICAgICAgCisgICAgICAgIGlmIG9wPT0nPCc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWRkX2lucHV0X3JlZGlyZWN0aW9uKGludGVycCwgZnVsbG5hbWUsIGlvX251bWJlcikKKyAgICAgICAgZWxpZiBvcCBpbiAoJz4nLCAnPnwnKToKKyAgICAgICAgICAgIGNsb2JiZXIgPSAoJz58Jz09b3ApCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWRkX291dHB1dF9yZWRpcmVjdGlvbihpbnRlcnAsIGZ1bGxuYW1lLCBpb19udW1iZXIsIGNsb2JiZXIpCisgICAgICAgIGVsaWYgb3A9PSc+Pic6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWRkX291dHB1dF9hcHBlbmRpbmcoaW50ZXJwLCBmdWxsbmFtZSwgaW9fbnVtYmVyKQorICAgICAgICBlbGlmIG9wPT0nPiYnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2R1cF9vdXRwdXRfZGVzY3JpcHRvcihmdWxsbmFtZSwgaW9fbnVtYmVyKQorICAgICAgICAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Rlc2NyaXB0b3JzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGRlc2MgaW4gc2VsZi5fZGVzY3JpcHRvcnMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGRlc2MuZmx1c2goKQorICAgICAgICAgICAgICAgIGRlc2MuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fZGVzY3JpcHRvcnMgPSBOb25lCisgICAgICAgICAgICAKKyAgICBkZWYgc3RkaW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdG9yc1swXQorICAgICAgICAgIAorICAgIGRlZiBzdGRvdXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdG9yc1sxXSAKKyAgICAgICAgCisgICAgZGVmIHN0ZGVycihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0b3JzWzJdIAorICAgICAgICAgICAgCisgICAgZGVmIGNsb25lKHNlbGYpOgorICAgICAgICBjbG9uZSA9IFJlZGlyZWN0aW9ucygpCisgICAgICAgIGZvciBkZXNjLCBmaWxlb2JqIGluIHNlbGYuX2Rlc2NyaXB0b3JzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgY2xvbmUuX2Rlc2NyaXB0b3JzW2Rlc2NdID0gZmlsZW9iai5kdXAoKQorICAgICAgICByZXR1cm4gY2xvbmUKKyAgICAgICAgICAgCisgICAgZGVmIF9hZGRfb3V0cHV0X3JlZGlyZWN0aW9uKHNlbGYsIGludGVycCwgZmlsZW5hbWUsIGlvX251bWJlciwgY2xvYmJlcik6ICAgIAorICAgICAgICBpZiBpb19udW1iZXIgaXMgTm9uZToKKyAgICAgICAgICAgICMgaW9fbnVtYmVyIGRlZmF1bHQgdG8gc3RhbmRhcmQgb3V0cHV0CisgICAgICAgICAgICBpb19udW1iZXIgPSAxCisgICAgICAgIAorICAgICAgICBpZiBub3QgY2xvYmJlciBhbmQgaW50ZXJwLmdldF9lbnYoKS5oYXNfb3B0KCctQycpIGFuZCBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICAjIEZpbGUgYWxyZWFkeSBleGlzdCBpbiBuby1jbG9iYmVyIG1vZGUsIGJhaWwgb3V0CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdGaWxlICIlcyIgYWxyZWFkeSBleGlzdHMnICUgZmlsZW5hbWUpCisgICAgICAgICAgICAKKyAgICAgICAgIyBPcGVuIGFuZCByZWdpc3RlcgorICAgICAgICBzZWxmLl9hZGRfZmlsZV9kZXNjcmlwdG9yKGlvX251bWJlciwgZmlsZW5hbWUsICd3JykKKyAgICAgICAgCisgICAgZGVmIF9hZGRfb3V0cHV0X2FwcGVuZGluZyhzZWxmLCBpbnRlcnAsIGZpbGVuYW1lLCBpb19udW1iZXIpOiAgICAKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSAxCisgICAgICAgIHNlbGYuX2FkZF9maWxlX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCBmaWxlbmFtZSwgJ2EnKQorICAgICAgICAgICAgCisgICAgZGVmIF9hZGRfaW5wdXRfcmVkaXJlY3Rpb24oc2VsZiwgaW50ZXJwLCBmaWxlbmFtZSwgaW9fbnVtYmVyKToKKyAgICAgICAgaWYgaW9fbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICBpb19udW1iZXIgPSAwCisgICAgICAgIHNlbGYuX2FkZF9maWxlX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCBmaWxlbmFtZSwgJ3InKQorICAgICAgICAKKyAgICBkZWYgX2FkZF9maWxlX2Rlc2NyaXB0b3Ioc2VsZiwgaW9fbnVtYmVyLCBmaWxlbmFtZSwgbW9kZSk6ICAgIAorICAgICAgICB0cnk6ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWU9PScvZGV2L251bGwnOgorICAgICAgICAgICAgICAgICAgICBmID0gd2luMzJfb3Blbl9kZXZudWxsKG1vZGUrJ2InKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVE9ETzogaGFuZGxlIGFic29sdXRlIHBhdGhuYW1lcywgdGhleSBhcmUgdW5saWtlbHkgdG8gZXhpc3Qgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICMgY3VycmVudCBwbGF0Zm9ybSAod2luMzIgZm9yIGluc3RhbmNlKS4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IG9wZW4gYWJzb2x1dGUgcGF0aCAlcycgJSByZXByKGZpbGVuYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUsIG1vZGUrJ2InKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3Rpb25FcnJvcihzdHIoZSkpCisgICAgICAgICAgICAKKyAgICAgICAgd3JhcHBlciA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JhcHBlciA9IEZpbGVXcmFwcGVyKG1vZGUsIGYpCisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYWRkX2Rlc2NyaXB0b3IoaW9fbnVtYmVyLCB3cmFwcGVyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBmOiBmLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHdyYXBwZXI6IHdyYXBwZXIuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIAorICAgIGRlZiBfZHVwX291dHB1dF9kZXNjcmlwdG9yKHNlbGYsIHNvdXJjZV9mZCwgZGVzdF9mZCk6CisgICAgICAgIGlmIHNvdXJjZV9mZCBpcyBOb25lOgorICAgICAgICAgICAgc291cmNlX2ZkID0gMQorICAgICAgICBzZWxmLl9kdXBfZmlsZV9kZXNjcmlwdG9yKHNvdXJjZV9mZCwgZGVzdF9mZCwgJ3cnKQorICAgICAgICAgICAgCisgICAgZGVmIF9kdXBfZmlsZV9kZXNjcmlwdG9yKHNlbGYsIHNvdXJjZV9mZCwgZGVzdF9mZCwgbW9kZSk6CisgICAgICAgIHNvdXJjZV9mZCA9IGludChzb3VyY2VfZmQpCisgICAgICAgIGlmIHNvdXJjZV9mZCBub3QgaW4gc2VsZi5fZGVzY3JpcHRvcnM6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCciJXMiIGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvcicgJSBzdHIoc291cmNlX2ZkKSkKKyAgICAgICAgc291cmNlID0gc2VsZi5fZGVzY3JpcHRvcnNbc291cmNlX2ZkXQorICAgICAgICAKKyAgICAgICAgaWYgc291cmNlLm1vZGUoKSE9bW9kZToKKyAgICAgICAgICAgIHJhaXNlIFJlZGlyZWN0aW9uRXJyb3IoJ0Rlc2NyaXB0b3IgJXMgY2Fubm90IGJlIGR1cGxpY2F0ZWQgaW4gbW9kZSAiJXMiJyAlIChzdHIoc291cmNlKSwgbW9kZSkpCisgICAgICAgIAorICAgICAgICBpZiBkZXN0X2ZkPT0nLSc6CisgICAgICAgICAgICAjIENsb3NlIHRoZSBzb3VyY2UgZGVzY3JpcHRvcgorICAgICAgICAgICAgZGVsIHNlbGYuX2Rlc2NyaXB0b3JzW3NvdXJjZV9mZF0KKyAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXN0X2ZkID0gaW50KGRlc3RfZmQpCisgICAgICAgICAgICBpZiBkZXN0X2ZkIG5vdCBpbiBzZWxmLl9kZXNjcmlwdG9yczoKKyAgICAgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdDYW5ub3QgcmVwbGFjZSBmaWxlIGRlc2NyaXB0b3IgJXMnICUgc3RyKGRlc3RfZmQpKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVzdCA9IHNlbGYuX2Rlc2NyaXB0b3JzW2Rlc3RfZmRdCisgICAgICAgICAgICBpZiBkZXN0Lm1vZGUoKSE9bW9kZToKKyAgICAgICAgICAgICAgICByYWlzZSBSZWRpcmVjdGlvbkVycm9yKCdEZXNjcmlwdG9yICVzIGNhbm5vdCBiZSBjYW5ub3QgYmUgcmVkaXJlY3RlZCBpbiBtb2RlICIlcyInICUgKHN0cihkZXN0KSwgbW9kZSkpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzW2Rlc3RfZmRdID0gc291cmNlLmR1cCgpCisgICAgICAgICAgICBkZXN0LmNsb3NlKCkgICAgICAgIAorICAgICAgICAgICAgCisgICAgZGVmIF9hZGRfZGVzY3JpcHRvcihzZWxmLCBpb19udW1iZXIsIGZpbGUpOgorICAgICAgICBpb19udW1iZXIgPSBpbnQoaW9fbnVtYmVyKQorICAgICAgICAKKyAgICAgICAgaWYgaW9fbnVtYmVyIGluIHNlbGYuX2Rlc2NyaXB0b3JzOgorICAgICAgICAgICAgIyBDbG9zZSB0aGUgY3VycmVudCBkZXNjcmlwdG9yCisgICAgICAgICAgICBkID0gc2VsZi5fZGVzY3JpcHRvcnNbaW9fbnVtYmVyXQorICAgICAgICAgICAgZGVsIHNlbGYuX2Rlc2NyaXB0b3JzW2lvX251bWJlcl0KKyAgICAgICAgICAgIGQuY2xvc2UoKQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX2Rlc2NyaXB0b3JzW2lvX251bWJlcl0gPSBmaWxlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbmFtZXMgPSBbKCclZD0lcicgJSAoaywgZ2V0YXR0cih2LCAnbmFtZScsIE5vbmUpKSkgZm9yIGssdgorICAgICAgICAgICAgICAgICBpbiBzZWxmLl9kZXNjcmlwdG9ycy5pdGVyaXRlbXMoKV0KKyAgICAgICAgbmFtZXMgPSAnLCcuam9pbihuYW1lcykKKyAgICAgICAgcmV0dXJuICdSZWRpcmVjdGlvbnMoJXMpJyAlIG5hbWVzCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgCitkZWYgY3lnd2luX3RvX3dpbmRvd3NfcGF0aChwYXRoKToKKyAgICAiIiJUdXJuIC9jeWdkcml2ZS9jL2ZvbyBpbnRvIGM6L2Zvbywgb3IgcmV0dXJuIHBhdGggaWYgaXQKKyAgICBpcyBub3QgYSBjeWd3aW4gcGF0aC4KKyAgICAiIiIKKyAgICBpZiBub3QgcGF0aC5zdGFydHN3aXRoKCcvY3lnZHJpdmUvJyk6CisgICAgICAgIHJldHVybiBwYXRoCisgICAgcGF0aCA9IHBhdGhbbGVuKCcvY3lnZHJpdmUvJyk6XQorICAgIHBhdGggPSBwYXRoWzoxXSArICc6JyArIHBhdGhbMTpdCisgICAgcmV0dXJuIHBhdGgKKyAgICAKK2RlZiB3aW4zMl90b191bml4X3BhdGgocGF0aCk6CisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisgICAgcmV0dXJuIHBhdGggICAgCisgICAgCitfUkVfU0hFQkFORyA9IHJlLmNvbXBpbGUocideXCMhXHM/KFteXHNdKykoPzpccyhbXlxzXSspKT8nKQorX1NIRUJBTkdfQ01EUyA9IHsKKyAgICAnL3Vzci9iaW4vZW52JzogJ2VudicsCisgICAgJy9iaW4vc2gnOiAncHlzaCcsCisgICAgJ3B5dGhvbic6ICdweXRob24nLAorfQorICAgIAorZGVmIHJlc29sdmVfc2hlYmFuZyhwYXRoLCBpZ25vcmVzaGVsbD1GYWxzZSk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBhcmd1bWVudHMgYXMgc2hlYmFuZyBpbnRlcnByZXRlciBjYWxsIG9yIGFuIGVtcHR5IGxpc3QKKyAgICBpZiBwYXRoIGRvZXMgbm90IHJlZmVyIHRvIGFuIGV4ZWN1dGFibGUgc2NyaXB0LgorICAgIFNlZSA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL2F1c3Rpbi9kb2NzL2F1c3Rpbl81MXIyLnR4dD4uCisgICAgCisgICAgaWdub3Jlc2hlbGwgLSBzZXQgdG8gVHJ1ZSB0byBpZ25vcmUgc2ggc2hlYmFuZ3MuIFJldHVybiBhbiBlbXB0eSBsaXN0IGluc3RlYWQuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBmID0gZmlsZShwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEF0IG1vc3QgODAgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgbGluZQorICAgICAgICAgICAgaGVhZGVyID0gZi5yZWFkKDgwKS5zcGxpdGxpbmVzKClbMF0KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgCisgICAgICAgIG0gPSBfUkVfU0hFQkFORy5zZWFyY2goaGVhZGVyKQorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBjbWQsIGFyZyA9IG0uZ3JvdXAoMSwyKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpOgorICAgICAgICAgICAgIyBLZWVwIHRoaXMgb25lLCB0aGUgaGcgc2NyaXB0IGZvciBpbnN0YW5jZSBjb250YWlucyBhIHdlaXJkIHdpbmRvd3MKKyAgICAgICAgICAgICMgc2hlYmFuZyByZWZlcmVuY2luZyB0aGUgY3VycmVudCBweXRob24gaW5zdGFsbC4KKyAgICAgICAgICAgIGNtZGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKGNtZCkubG93ZXIoKQorICAgICAgICAgICAgaWYgY21kZmlsZSA9PSAncHl0aG9uLmV4ZSc6CisgICAgICAgICAgICAgICAgY21kID0gJ3B5dGhvbicKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBjbWQgbm90IGluIF9TSEVCQU5HX0NNRFM6CisgICAgICAgICAgICByYWlzZSBDb21tYW5kTm90Rm91bmQoJ1Vua25vd24gaW50ZXJwcmV0ZXIgIiVzIiByZWZlcmVuY2VkIGluICdcCisgICAgICAgICAgICAgICAgJ3NoZWJhbmcnICUgaGVhZGVyKQorICAgICAgICBjbWQgPSBfU0hFQkFOR19DTURTLmdldChjbWQpCisgICAgICAgIGlmIGNtZCBpcyBOb25lIG9yIChpZ25vcmVzaGVsbCBhbmQgY21kID09ICdweXNoJyk6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgaWYgYXJnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gW2NtZCwgd2luMzJfdG9fdW5peF9wYXRoKHBhdGgpXQorICAgICAgICByZXR1cm4gW2NtZCwgYXJnLCB3aW4zMl90b191bml4X3BhdGgocGF0aCldCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaWYgIGUuZXJybm8hPWVycm5vLkVOT0VOVCBhbmQgXAorICAgICAgICAgICAgKGUuZXJybm8hPWVycm5vLkVQRVJNIGFuZCBub3Qgb3MucGF0aC5pc2RpcihwYXRoKSk6ICMgT3BlbmluZyBhIGRpcmVjdG9yeSByYWlzZXMgRVBFUk0KKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBbXQorICAgICAgICAKK2RlZiB3aW4zMl9maW5kX2luX3BhdGgobmFtZSwgcGF0aCk6CisgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBzdHIpOgorICAgICAgICBwYXRoID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQorICAgICAgICAKKyAgICBleHRzID0gb3MuZW52aXJvbi5nZXQoJ1BBVEhFWFQnLCAnJykubG93ZXIoKS5zcGxpdChvcy5wYXRoc2VwKQorICAgIGZvciBwIGluIHBhdGg6CisgICAgICAgIHBfbmFtZSA9IG9zLnBhdGguam9pbihwLCBuYW1lKQorICAgICAgICAKKyAgICAgICAgcHJlZml4ID0gcmVzb2x2ZV9zaGViYW5nKHBfbmFtZSkKKyAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgcmV0dXJuIHByZWZpeAorICAgICAgICAgICAgCisgICAgICAgIGZvciBleHQgaW4gZXh0czogICAgCisgICAgICAgICAgICBwX25hbWVfZXh0ID0gcF9uYW1lICsgZXh0CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwX25hbWVfZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gW3dpbjMyX3RvX3VuaXhfcGF0aChwX25hbWVfZXh0KV0KKyAgICByZXR1cm4gW10KKworY2xhc3MgVHJhcHMoZGljdCk6CisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBpZiBrZXkgbm90IGluICgnRVhJVCcsKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICBzdXBlcihUcmFwcywgc2VsZikuX19zZXRpdGVtX18oa2V5LCB2YWx1ZSkKKworIyBJRlMgd2hpdGUgc3BhY2VzIGNoYXJhY3RlciBjbGFzcworX0lGU19XSElURVNQQUNFUyA9ICgnICcsICdcdCcsICdcbicpCisKK2NsYXNzIEVudmlyb25tZW50OgorICAgICIiIkVudmlyb25tZW50IGhvbGRzIGVudmlyb25tZW50IHZhcmlhYmxlcywgZXhwb3J0IHRhYmxlLCBmdW5jdGlvbiAKKyAgICBkZWZpbml0aW9ucyBhbmQgd2hhdGV2ZXIgaXMgZGVmaW5lZCBpbiAyLjEyICJTaGVsbCBFeGVjdXRpb24gRW52aXJvbm1lbnQiLAorICAgIHJlZGlyZWN0aW9uIGV4Y2VwdGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QpOgorICAgICAgICBzZWxmLl9vcHQgPSBzZXQoKSAgICAgICAjU2hlbGwgb3B0aW9ucworICAgICAgICAKKyAgICAgICAgc2VsZi5fZnVuY3Rpb25zID0ge30gICAgICAgIAorICAgICAgICBzZWxmLl9lbnYgPSB7Jz8nOiAnMCcsICcjJzogJzAnfQorICAgICAgICBzZWxmLl9leHBvcnRlZCA9IHNldChbCisgICAgICAgICAgICAnSE9NRScsICdJRlMnLCAnUEFUSCcKKyAgICAgICAgXSkKKyAgICAgICAgCisgICAgICAgICMgU2V0IGVudmlyb25tZW50IHZhcnMgd2l0aCBzaWRlLWVmZmVjdHMKKyAgICAgICAgc2VsZi5faWZzX3dzID0gTm9uZSAgICAgIyBTZXQgb2YgSUZTIHdoaXRlc3BhY2UgY2hhcmFjdGVycworICAgICAgICBzZWxmLl9pZnNfcmUgPSBOb25lICAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHNwbGl0IGJldHdlZW4gd29yZHMgdXNpbmcgSUZTIGNsYXNzZXMKKyAgICAgICAgc2VsZlsnSUZTJ10gPSAnJy5qb2luKF9JRlNfV0hJVEVTUEFDRVMpICNEZWZhdWx0IGVudmlyb25tZW50IHZhbHVlcworICAgICAgICBzZWxmWydQV0QnXSA9IHB3ZAorICAgICAgICBzZWxmLnRyYXBzID0gVHJhcHMoKQorICAgICAgICAKKyAgICBkZWYgY2xvbmUoc2VsZiwgc3Vic2hlbGw9RmFsc2UpOgorICAgICAgICBlbnYgPSBFbnZpcm9ubWVudChzZWxmWydQV0QnXSkKKyAgICAgICAgZW52Ll9vcHQgPSBzZXQoc2VsZi5fb3B0KQorICAgICAgICBmb3Igayx2IGluIHNlbGYuZ2V0X3ZhcmlhYmxlcygpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgayBpbiBzZWxmLl9leHBvcnRlZDoKKyAgICAgICAgICAgICAgICBlbnYuZXhwb3J0KGssdikKKyAgICAgICAgICAgIGVsaWYgc3Vic2hlbGw6CisgICAgICAgICAgICAgICAgZW52W2tdID0gdgorICAgICAgICAgICAgICAgIAorICAgICAgICBpZiBzdWJzaGVsbDoKKyAgICAgICAgICAgIGVudi5fZnVuY3Rpb25zID0gZGljdChzZWxmLl9mdW5jdGlvbnMpCisgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIGVudiAgICAgICAgCisgICAgICAgIAorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBrZXkgaW4gKCdAJywgJyonLCAnLScsICckJyk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCclcyBpcyBub3QgaW1wbGVtZW50ZWQnICUgcmVwcihrZXkpKQorICAgICAgICByZXR1cm4gc2VsZi5fZW52W2tleV0KKyAgICAgICAgCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZnZhbD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmdmFsCisgICAgICAgIAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgaWYga2V5PT0nSUZTJzoKKyAgICAgICAgICAgICMgVXBkYXRlIHRoZSB3aGl0ZXNwYWNlL25vbi13aGl0ZXNwYWNlIGNsYXNzZXMKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9pZnModmFsdWUpCisgICAgICAgIGVsaWYga2V5PT0nUFdEJzoKKyAgICAgICAgICAgIHB3ZCA9IG9zLnBhdGguYWJzcGF0aCh2YWx1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHB3ZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFyQXNzaWdubWVudEVycm9yKCdJbnZhbGlkIGRpcmVjdG9yeSAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0gcHdkCisgICAgICAgIGVsaWYga2V5IGluICgnPycsICchJyk6CisgICAgICAgICAgICB2YWx1ZSA9IHN0cihpbnQodmFsdWUpKQorICAgICAgICBzZWxmLl9lbnZba2V5XSA9IHZhbHVlCisgICAgICAgIAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBrZXkgaW4gKCdJRlMnLCAnUFdEJywgJz8nKToKKyAgICAgICAgICAgIHJhaXNlIFZhckFzc2lnbm1lbnRFcnJvcignJXMgY2Fubm90IGJlIHVuc2V0JyAlIGtleSkKKyAgICAgICAgZGVsIHNlbGYuX2VudltrZXldCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgorICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLl9lbnYKKyAgICAgICAgCisgICAgZGVmIHNldF9wb3NpdGlvbmFsX2FyZ3Moc2VsZiwgYXJncyk6CisgICAgICAgICIiIlNldCB0aGUgY29udGVudCBvZiAnYXJncycgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBmcm9tIDEgdG8gbGVuKGFyZ3MpLgorICAgICAgICBSZXR1cm4gcHJldmlvdXMgYXJndW1lbnQgYXMgYSBsaXN0IG9mIHN0cmluZ3MuCisgICAgICAgICIiIgorICAgICAgICAjIFNhdmUgYW5kIHJlbW92ZSBwcmV2aW91cyBhcmd1bWVudHMKKyAgICAgICAgcHJldmFyZ3MgPSBbXSAgICAgICAgCisgICAgICAgIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fZW52WycjJ10pKToKKyAgICAgICAgICAgIGkgPSBzdHIoaSsxKQorICAgICAgICAgICAgcHJldmFyZ3MuYXBwZW5kKHNlbGYuX2VudltpXSkKKyAgICAgICAgICAgIGRlbCBzZWxmLl9lbnZbaV0KKyAgICAgICAgc2VsZi5fZW52WycjJ10gPSAnMCcKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgI1NldCBuZXcgb25lcworICAgICAgICBmb3IgaSxhcmcgaW4gZW51bWVyYXRlKGFyZ3MpOgorICAgICAgICAgICAgc2VsZi5fZW52W3N0cihpKzEpXSA9IHN0cihhcmcpCisgICAgICAgIHNlbGYuX2VudlsnIyddID0gc3RyKGxlbihhcmdzKSkKKyAgICAgICAgCisgICAgICAgIHJldHVybiBwcmV2YXJncworICAgICAgICAKKyAgICBkZWYgZ2V0X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLl9lbnZbc3RyKGkrMSldIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fZW52WycjJ10pKV0KKyAgICAgICAgCisgICAgZGVmIGdldF92YXJpYWJsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBkaWN0KHNlbGYuX2VudikKKyAgICAgICAgCisgICAgZGVmIGV4cG9ydChzZWxmLCBrZXksIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisgICAgICAgIHNlbGYuX2V4cG9ydGVkLmFkZChrZXkpCisgICAgICAgIAorICAgIGRlZiBnZXRfZXhwb3J0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBbKGssc2VsZi5fZW52LmdldChrKSkgZm9yIGsgaW4gc2VsZi5fZXhwb3J0ZWRdCisgICAgICAgICAgICAKKyAgICBkZWYgc3BsaXRfZmllbGRzKHNlbGYsIHdvcmQpOgorICAgICAgICBpZiBub3Qgc2VsZi5faWZzX3dzIG9yIG5vdCB3b3JkOgorICAgICAgICAgICAgcmV0dXJuIFt3b3JkXQorICAgICAgICByZXR1cm4gcmUuc3BsaXQoc2VsZi5faWZzX3JlLCB3b3JkKQorICAgCisgICAgZGVmIF91cGRhdGVfaWZzKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiVXBkYXRlIHRoZSBzcGxpdF9maWVsZHMgcmVsYXRlZCB2YXJpYWJsZXMgd2hlbiBJRlMgY2hhcmFjdGVyIHNldCBpcworICAgICAgICBjaGFuZ2VkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBUT0RPOiBoYW5kbGUgTlVMTCBJRlMKKyAgICAgICAgCisgICAgICAgICMgU2VwYXJhdGUgY2hhcmFjdGVycyBpbiB3aGl0ZXNwYWNlIGFuZCBub24td2hpdGVzcGFjZQorICAgICAgICBjaGFycyA9IHNldCh2YWx1ZSkKKyAgICAgICAgd3MgPSBbYyBmb3IgYyBpbiBjaGFycyBpZiBjIGluIF9JRlNfV0hJVEVTUEFDRVNdCisgICAgICAgIG53cyA9IFtjIGZvciBjIGluIGNoYXJzIGlmIGMgbm90IGluIF9JRlNfV0hJVEVTUEFDRVNdCisgICAgICAgIAorICAgICAgICAjIEtlZXAgd2hpdGVzcGFjZXMgaW4gYSBzdHJpbmcgZm9yIGxlZnQgYW5kIHJpZ2h0IHN0cmlwcGluZworICAgICAgICBzZWxmLl9pZnNfd3MgPSAnJy5qb2luKHdzKQorICAgICAgICAKKyAgICAgICAgIyBCdWlsZCBhIHJlZ2V4cCB0byBzcGxpdCBmaWVsZHMKKyAgICAgICAgdHJhaWxpbmcgPSAnWycgKyAnJy5qb2luKFtyZS5lc2NhcGUoYykgZm9yIGMgaW4gd3NdKSArICddJworICAgICAgICBpZiBud3M6CisgICAgICAgICAgICAjIEZpcnN0LCB0aGUgc2luZ2xlIG5vbi13aGl0ZXNwYWNlIG9jY3VyZW5jZS4KKyAgICAgICAgICAgIG53cyA9ICdbJyArICcnLmpvaW4oW3JlLmVzY2FwZShjKSBmb3IgYyBpbiBud3NdKSArICddJworICAgICAgICAgICAgbndzID0gJyg/OicgKyB0cmFpbGluZyArICcqJyArIG53cyArIHRyYWlsaW5nICsgJyonICsgJ3wnICsgdHJhaWxpbmcgKyAnKyknCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZW4gbWl4IGFsbCBwYXJ0cyB3aXRoIHF1YW50aWZpZXJzCisgICAgICAgICAgICBud3MgPSB0cmFpbGluZyArICcrJworICAgICAgICBzZWxmLl9pZnNfcmUgPSByZS5jb21waWxlKG53cykKKyAgICAgICAKKyAgICBkZWYgaGFzX29wdChzZWxmLCBvcHQsIHZhbD1Ob25lKToKKyAgICAgICAgcmV0dXJuIChvcHQsIHZhbCkgaW4gc2VsZi5fb3B0CisgICAgICAgIAorICAgIGRlZiBzZXRfb3B0KHNlbGYsIG9wdCwgdmFsPU5vbmUpOgorICAgICAgICBzZWxmLl9vcHQuYWRkKChvcHQsIHZhbCkpCisgICAgICAgIAorICAgIGRlZiBmaW5kX2luX3BhdGgoc2VsZiwgbmFtZSwgcHdkPUZhbHNlKToKKyAgICAgICAgcGF0aCA9IHNlbGYuX2Vudi5nZXQoJ1BBVEgnLCAnJykuc3BsaXQob3MucGF0aHNlcCkKKyAgICAgICAgaWYgcHdkOgorICAgICAgICAgICAgcGF0aFs6MF0gPSBbc2VsZlsnUFdEJ11dCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9maW5kX2luX3BhdGgobmFtZSwgc2VsZi5fZW52LmdldCgnUEFUSCcsICcnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgICAgICAgICAgCisgICAgZGVmIGRlZmluZV9mdW5jdGlvbihzZWxmLCBuYW1lLCBib2R5KToKKyAgICAgICAgaWYgbm90IGlzX25hbWUobmFtZSk6CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCclcyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lJyAlIHJlcHIobmFtZSkpCisgICAgICAgIHNlbGYuX2Z1bmN0aW9uc1tuYW1lXSA9IGJvZHkKKyAgICAgICAgCisgICAgZGVmIHJlbW92ZV9mdW5jdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgZGVsIHNlbGYuX2Z1bmN0aW9uc1tuYW1lXQorICAgICAgICAKKyAgICBkZWYgaXNfZnVuY3Rpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGluIHNlbGYuX2Z1bmN0aW9ucworICAgICAgICAKKyAgICBkZWYgZ2V0X2Z1bmN0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnVuY3Rpb25zLmdldChuYW1lKQorICAgICAgICAKKyAgICAgICAKK25hbWVfY2hhcnNldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OV8nCituYW1lX2NoYXJzZXQgPSBkaWN0KHppcChuYW1lX2NoYXJzZXQsbmFtZV9jaGFyc2V0KSkKKyAgICAgICAgICAgCitkZWYgbWF0Y2hfbmFtZShzKToKKyAgICAiIiJSZXR1cm4gdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBsb25nZXN0IHByZWZpeCBtYWRlIG9mIG5hbWUKKyAgICBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gcy4KKyAgICAiIiIKKyAgICBmb3IgaSxjIGluIGVudW1lcmF0ZShzKToKKyAgICAgICAgaWYgYyBub3QgaW4gbmFtZV9jaGFyc2V0OgorICAgICAgICAgICAgcmV0dXJuIHNbOmldCisgICAgcmV0dXJuIHMKKyAgICAKK2RlZiBpc19uYW1lKHMpOgorICAgIHJldHVybiBsZW4oW2MgZm9yIGMgaW4gcyBpZiBjIG5vdCBpbiBuYW1lX2NoYXJzZXRdKTw9MAorICAgIAorZGVmIGlzX3NwZWNpYWxfcGFyYW0oYyk6CisgICAgcmV0dXJuIGxlbihjKT09MSBhbmQgYyBpbiAoJ0AnLCcqJywnIycsJz8nLCctJywnJCcsJyEnLCcwJykKKyAgICAKK2RlZiB1dGlsaXR5X25vdF9pbXBsZW1lbnRlZChuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIHV0aWxpdHkgaXMgbm90IGltcGxlbWVudGVkJyAlIG5hbWUpCisgICAgCisKK2NsYXNzIFV0aWxpdHk6CisgICAgIiIiRGVmaW5lIHV0aWxpdGllcyBwcm9wZXJ0aWVzOgorICAgIGZ1bmMgLS0gdXRpbGl0eSBjYWxsYWJsZS4gU2VlIGJ1aWx0aW4gbW9kdWxlIGZvciB1dGlsaXR5IHNhbXBsZXMuCisgICAgaXNfc3BlY2lhbCAtLSBzZWUgWENVIDIuOC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgaXNfc3BlY2lhbD0wKToKKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmlzX3NwZWNpYWwgPSBib29sKGlzX3NwZWNpYWwpCisKKworZGVmIGVuY29kZWFyZ3MoYXJncyk6CisgICAgZGVmIGVuY29kZWFyZyhzKToKKyAgICAgICAgbGluZXMgPSBiYXNlNjQuZW5jb2Rlc3RyaW5nKHMpCisgICAgICAgIGxpbmVzID0gW2wuc3BsaXRsaW5lcygpWzBdIGZvciBsIGluIGxpbmVzXQorICAgICAgICByZXR1cm4gJycuam9pbihsaW5lcykKKworICAgIHMgPSBwaWNrbGUuZHVtcHMoYXJncykKKyAgICByZXR1cm4gZW5jb2RlYXJnKHMpCisKK2RlZiBkZWNvZGVhcmdzKHMpOgorICAgIHMgPSBiYXNlNjQuZGVjb2Rlc3RyaW5nKHMpCisgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhzKQorICAgIAorCitjbGFzcyBHbG9iRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIE9wdGlvbnM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFRydWUgaWYgTWVyY3VyaWFsIG9wZXJhdGVzIHdpdGggYmluYXJ5IHN0cmVhbXMKKyAgICAgICAgc2VsZi5oZ2JpbmFyeSA9IFRydWUKKworY2xhc3MgSW50ZXJwcmV0ZXI6CisgICAgIyBJbXBsZW1lbnRhdGlvbiBpcyB2ZXJ5IGJhc2ljOiB0aGUgZXhlY3V0ZSgpIG1ldGhvZCBqdXN0IG1ha2VzIGEgREZTIG9uIHRoZQorICAgICMgQVNUIGFuZCBleGVjdXRlIG5vZGVzIG9uZSBieSBvbmUuIE5vZGVzIGFyZSB0dXBsZSAobmFtZSxvYmopIHdoZXJlIG5hbWUKKyAgICAjIGlzIGEgc3RyaW5nIGlkZW50aWZpZXIgYW5kIG9iaiB0aGUgQVNUIGVsZW1lbnQgcmV0dXJuZWQgYnkgdGhlIHBhcnNlci4KKyAgICAjCisgICAgIyBIYW5kbGVyIGFyZSBuYW1lZCBhZnRlciB0aGUgbm9kZSBpZGVudGlmaWVycy4KKyAgICAjIFRPRE86IGNoZWNrIG5vZGUgbmFtZXMgYW5kIHJlbW92ZSB0aGUgc3dpdGNoIGluIGV4ZWN1dGUgd2l0aCBzb21lCisgICAgIyBkeW5hbWljIGdldGF0dHIoKSBjYWxsIHRvIGZpbmQgbm9kZSBoYW5kbGVycy4KKyAgICAiIiJTaGVsbCBpbnRlcnByZXRlci4KKyAgICAKKyAgICBUaGUgZm9sbG93aW5nIGRlYnVnZ2luZyBmbGFncyBjYW4gYmUgcGFzc2VkOgorICAgIGRlYnVnLXBhcnNpbmcgLSBlbmFibGUgUExZIGRlYnVnZ2luZy4KKyAgICBkZWJ1Zy10cmVlIC0gcHJpbnQgdGhlIGdlbmVyYXRlZCBBU1QuCisgICAgZGVidWctY21kIC0gdHJhY2UgY29tbWFuZCBleGVjdXRpb24gYmVmb3JlIHdvcmQgZXhwYW5zaW9uLCBwbHVzIGV4aXQgc3RhdHVzLgorICAgIGRlYnVnLXV0aWxpdHkgLSB0cmFjZSB1dGlsaXR5IGV4ZWN1dGlvbi4KKyAgICAiIiIKKyAgICAKKyAgICAjIExpc3Qgc3VwcG9ydGVkIGNvbW1hbmRzLgorICAgIENPTU1BTkRTID0geworICAgICAgICAnY2F0JzogICAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfY2F0LCksCisgICAgICAgICdjZCc6ICAgICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2NkLCksCisgICAgICAgICc6JzogICAgICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2NvbG9uLCksCisgICAgICAgICdlY2hvJzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2VjaG8pLAorICAgICAgICAnZW52JzogICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9lbnYpLAorICAgICAgICAnZXhpdCc6ICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9leGl0KSwKKyAgICAgICAgJ2V4cG9ydCc6ICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fZXhwb3J0LCAgICAgaXNfc3BlY2lhbD0xKSwKKyAgICAgICAgJ2VncmVwJzogICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfZWdyZXApLAorICAgICAgICAnZmdyZXAnOiAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9mZ3JlcCksCisgICAgICAgICdndW56aXAnOiAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2d1bnppcCksCisgICAgICAgICdraWxsJzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X2tpbGwpLAorICAgICAgICAnbWtkaXInOiAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9ta2RpciksCisgICAgICAgICduZXRzdGF0JzogIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X25ldHN0YXQpLAorICAgICAgICAncHJpbnRmJzogICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9wcmludGYpLAorICAgICAgICAncHdkJzogICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9wd2QpLAorICAgICAgICAncmV0dXJuJzogICBVdGlsaXR5KGJ1aWx0aW4uYnVpbHRpbl9yZXR1cm4sICAgICBpc19zcGVjaWFsPTEpLAorICAgICAgICAnc2VkJzogICAgICBVdGlsaXR5KGJ1aWx0aW4udXRpbGl0eV9zZWQsKSwKKyAgICAgICAgJ3NldCc6ICAgICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fc2V0LCksCisgICAgICAgICdzaGlmdCc6ICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3NoaWZ0LCksCisgICAgICAgICdzbGVlcCc6ICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X3NsZWVwLCksCisgICAgICAgICdzb3J0JzogICAgIFV0aWxpdHkoYnVpbHRpbi51dGlsaXR5X3NvcnQsKSwKKyAgICAgICAgJ3RyYXAnOiAgICAgVXRpbGl0eShidWlsdGluLmJ1aWx0aW5fdHJhcCwgICAgICAgaXNfc3BlY2lhbD0xKSwKKyAgICAgICAgJ3RydWUnOiAgICAgVXRpbGl0eShidWlsdGluLnV0aWxpdHlfdHJ1ZSksCisgICAgICAgICd1bnNldCc6ICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3Vuc2V0LCAgICAgIGlzX3NwZWNpYWw9MSksCisgICAgICAgICd3YWl0JzogICAgIFV0aWxpdHkoYnVpbHRpbi5idWlsdGluX3dhaXQsICAgICAgIGlzX3NwZWNpYWw9MSksCisgICAgfQorICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QsIGRlYnVnZmxhZ3MgPSBbXSwgZW52PU5vbmUsIHJlZGlycz1Ob25lLCBzdGRpbj1Ob25lLAorICAgICAgICAgICAgICAgICBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIG9wdHM9T3B0aW9ucygpKToKKyAgICAgICAgc2VsZi5fZW52ID0gZW52CisgICAgICAgIGlmIHNlbGYuX2VudiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZW52ID0gRW52aXJvbm1lbnQocHdkKQorICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHt9CisgICAgICAgICAgICAKKyAgICAgICAgc2VsZi5fcmVkaXJzID0gcmVkaXJzCisgICAgICAgIHNlbGYuX2Nsb3NlX3JlZGlycyA9IEZhbHNlCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9yZWRpcnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHN0ZGluIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBzeXMuc3RkaW4KKyAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgICAgIHN0ZGluID0gRmlsZVdyYXBwZXIoJ3InLCBzdGRpbiwgRmFsc2UpCisgICAgICAgICAgICBzdGRvdXQgPSBGaWxlV3JhcHBlcigndycsIHN0ZG91dCwgRmFsc2UpCisgICAgICAgICAgICBzdGRlcnIgPSBGaWxlV3JhcHBlcigndycsIHN0ZGVyciwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMgPSBSZWRpcmVjdGlvbnMoc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICAgICAgc2VsZi5fY2xvc2VfcmVkaXJzID0gVHJ1ZQorICAgICAgICAgICAgCisgICAgICAgIHNlbGYuX2RlYnVnZmxhZ3MgPSBsaXN0KGRlYnVnZmxhZ3MpCisgICAgICAgIHNlbGYuX2xvZ2ZpbGUgPSBzeXMuc3RkZXJyCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRzCisgICAgICAgIAorICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiTXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgaXMgbm8gbG9uZ2VyIHVzZWQuIiIiCisgICAgICAgIHNjcmlwdCA9IHNlbGYuX2Vudi50cmFwcy5nZXQoJ0VYSVQnKQorICAgICAgICBpZiBzY3JpcHQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX3NjcmlwdChzY3JpcHQ9c2NyaXB0KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzZWxmLl9yZWRpcnMgaXMgbm90IE5vbmUgYW5kIHNlbGYuX2Nsb3NlX3JlZGlyczoKKyAgICAgICAgICAgIHNlbGYuX3JlZGlycy5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMgPSBOb25lCisgICAgICAgICAgICAKKyAgICBkZWYgbG9nKHNlbGYsIHMpOgorICAgICAgICBzZWxmLl9sb2dmaWxlLndyaXRlKHMpCisgICAgICAgIHNlbGYuX2xvZ2ZpbGUuZmx1c2goKQorICAgICAgICAgICAgCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9lbnZba2V5XQorICAgICAgICAKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2VudltrZXldID0gdmFsdWUKKworICAgIGRlZiBvcHRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucworCisgICAgZGVmIHJlZGlyZWN0KHNlbGYsIHJlZGlycywgaW9zKToKKyAgICAgICAgZGVmIGFkZF9yZWRpcihpbyk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGlvLCBweXNoeWFjYy5JT1JlZGlyZWN0KToKKyAgICAgICAgICAgICAgICByZWRpcnMuYWRkKHNlbGYsIGlvLm9wLCBpby5maWxlbmFtZSwgaW8uaW9fbnVtYmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWRpcnMuYWRkX2hlcmVfZG9jdW1lbnQoc2VsZiwgaW8ubmFtZSwgaW8uY29udGVudCwgaW8uaW9fbnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgbWFwKGFkZF9yZWRpciwgaW9zKQorICAgICAgICByZXR1cm4gcmVkaXJzCisgICAgICAgICAgICAKKyAgICBkZWYgZXhlY3V0ZV9zY3JpcHQoc2VsZiwgc2NyaXB0PU5vbmUsIGFzdD1Ob25lLCBzb3VyY2VkPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRwYXRoPU5vbmUpOgorICAgICAgICAiIiJJZiBzY3JpcHQgaXMgbm90IE5vbmUsIHBhcnNlIHRoZSBpbnB1dC4gT3RoZXJ3aXNlIHRha2VzIHRoZSBzdXBwbGllZAorICAgICAgICBBU1QuIFRoZW4gZXhlY3V0ZSB0aGUgQVNULgorICAgICAgICBSZXR1cm4gdGhlIHNjcmlwdCBleGl0IHN0YXR1cy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNjcmlwdHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fZW52WycwJ10gPSBvcy5wYXRoLmFic3BhdGgoc2NyaXB0cGF0aCkKKworICAgICAgICAgICAgaWYgc2NyaXB0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlYnVnX3BhcnNpbmcgPSAoJ2RlYnVnLXBhcnNpbmcnIGluIHNlbGYuX2RlYnVnZmxhZ3MpICAgIAorICAgICAgICAgICAgICAgIGNtZHMsIHNjcmlwdCA9IHB5c2h5YWNjLnBhcnNlKHNjcmlwdCwgVHJ1ZSwgZGVidWdfcGFyc2luZykKKyAgICAgICAgICAgICAgICBpZiAnZGVidWctdHJlZScgaW4gc2VsZi5fZGVidWdmbGFnczoKKyAgICAgICAgICAgICAgICAgICAgcHlzaHlhY2MucHJpbnRfY29tbWFuZHMoY21kcywgc2VsZi5fbG9nZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZmlsZS5mbHVzaCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNtZHMsIHNjcmlwdCA9IGFzdCwgJycgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgICAgICBmb3IgY21kIGluIGNtZHM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGl0U2lnbmFsIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvdXJjZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBpbnQoZS5hcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAgICAgZXhjZXB0IFNoZWxsRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VudlsnPyddID0gMQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGlmICdkZWJ1Zy11dGlsaXR5JyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzIG9yICdkZWJ1Zy1jbWQnIGluIHNlbGYuX2RlYnVnZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCdyZXR1cm5jb2RlICcgKyBzdHIoc3RhdHVzKSsgJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgZXhjZXB0IENvbW1hbmROb3RGb3VuZCBhcyBlOgorICAgICAgICAgICAgcHJpbnQgPj5zZWxmLl9yZWRpcnMuc3RkZXJyLCBzdHIoZSkKKyAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgIyBDb21tYW5kIG5vdCBmb3VuZCBieSBub24taW50ZXJhY3RpdmUgc2hlbGwKKyAgICAgICAgICAgICMgcmV0dXJuIDEyNworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFJlZGlyZWN0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgVE9ETzogc2hvdWxkIGJlIGhhbmRsZWQgZGVwZW5kaW5nIG9uIHRoZSB1dGlsaXR5IHN0YXR1cworICAgICAgICAgICAgcHJpbnQgPj5zZWxmLl9yZWRpcnMuc3RkZXJyLCBzdHIoZSkKKyAgICAgICAgICAgIHNlbGYuX3JlZGlycy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgIyBDb21tYW5kIG5vdCBmb3VuZCBieSBub24taW50ZXJhY3RpdmUgc2hlbGwKKyAgICAgICAgICAgICMgcmV0dXJuIDEyNworICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBkb3Rjb21tYW5kKHNlbGYsIGVudiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgICAgICByYWlzZSBTaGVsbEVycm9yKCcuIGV4cGVjdHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50JykKKyAgICAgICAgcGF0aCA9IGFyZ3NbMF0KKyAgICAgICAgaWYgJy8nIG5vdCBpbiBwYXRoOgorICAgICAgICAgICAgZm91bmQgPSBlbnYuZmluZF9pbl9wYXRoKGFyZ3NbMF0sIFRydWUpCisgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICBwYXRoID0gZm91bmRbMF0KKyAgICAgICAgc2NyaXB0ID0gZmlsZShwYXRoKS5yZWFkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0PXNjcmlwdCwgc291cmNlZD1UcnVlKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgdG9rZW4sIHJlZGlycz1Ob25lKToKKyAgICAgICAgIiIiRXhlY3V0ZSBhbmQgQVNUIHN1YnRyZWUgd2l0aCBzdXBwbGllZCByZWRpcmVjdGlvbnMgb3ZlcnJpZGluZyBkZWZhdWx0CisgICAgICAgIGludGVycHJldGVyIG9uZXMuCisgICAgICAgIFJldHVybiB0aGUgZXhpdCBzdGF0dXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdG9rZW46CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgCisgICAgICAgIGlmIHJlZGlycyBpcyBOb25lOgorICAgICAgICAgICAgcmVkaXJzID0gc2VsZi5fcmVkaXJzCisgICAgICAgICAgICAKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0b2tlbiwgbGlzdCk6CisgICAgICAgICAgICAjIENvbW1hbmRzIHNlcXVlbmNlCisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgICAgICBmb3IgdCBpbiB0b2tlbjoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLmV4ZWN1dGUodCwgcmVkaXJzKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHR5cGUsIHZhbHVlID0gdG9rZW4KKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBpZiB0eXBlPT0nc2ltcGxlX2NvbW1hbmQnOgorICAgICAgICAgICAgcmVkaXJzX2NvcHkgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVE9ETzogZGVmaW5lIGFuZCBoYW5kbGUgY29tbWFuZCByZXR1cm4gdmFsdWVzCisgICAgICAgICAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgc2V0IC1lCisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9zaW1wbGVfY29tbWFuZCh2YWx1ZSwgcmVkaXJzX2NvcHkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlZGlyc19jb3B5LmNsb3NlKCkKKyAgICAgICAgZWxpZiB0eXBlPT0ncGlwZWxpbmUnOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9waXBlbGluZSh2YWx1ZSwgcmVkaXJzKQorICAgICAgICBlbGlmIHR5cGU9PSdhbmRfb3InOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9hbmRfb3IodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0nZm9yX2NsYXVzZSc6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9leGVjdXRlX2Zvcl9jbGF1c2UodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0nd2hpbGVfY2xhdXNlJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfd2hpbGVfY2xhdXNlKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2Z1bmN0aW9uX2RlZmluaXRpb24nOgorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5fZXhlY3V0ZV9mdW5jdGlvbl9kZWZpbml0aW9uKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2JyYWNlX2dyb3VwJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfYnJhY2VfZ3JvdXAodmFsdWUsIHJlZGlycykKKyAgICAgICAgZWxpZiB0eXBlPT0naWZfY2xhdXNlJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2V4ZWN1dGVfaWZfY2xhdXNlKHZhbHVlLCByZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J3N1YnNoZWxsJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuc3Vic2hlbGwoYXN0PXZhbHVlLmNtZHMsIHJlZGlycz1yZWRpcnMpCisgICAgICAgIGVsaWYgdHlwZT09J2FzeW5jJzoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2FzeW5jbGlzdCh2YWx1ZSkKKyAgICAgICAgZWxpZiB0eXBlPT0ncmVkaXJlY3RfbGlzdCc6CisgICAgICAgICAgICByZWRpcnNfY29weSA9IHNlbGYucmVkaXJlY3QocmVkaXJzLmNsb25lKCksIHZhbHVlLnJlZGlycykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUodmFsdWUuY21kLCByZWRpcnNfY29weSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVkaXJzX2NvcHkuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignVW5zdXBwb3J0ZWQgdG9rZW4gdHlwZSAnICsgdHlwZSkKKworICAgICAgICBpZiBzdGF0dXMgPCAwOgorICAgICAgICAgICAgc3RhdHVzID0gMjU1CisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9pZl9jbGF1c2Uoc2VsZiwgaWZfY2xhdXNlLCByZWRpcnMpOgorICAgICAgICBjb25kX3N0YXR1cyA9IHNlbGYuZXhlY3V0ZShpZl9jbGF1c2UuY29uZCwgcmVkaXJzKQorICAgICAgICBpZiBjb25kX3N0YXR1cz09MDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGUoaWZfY2xhdXNlLmlmX2NtZHMsIHJlZGlycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4ZWN1dGUoaWZfY2xhdXNlLmVsc2VfY21kcywgcmVkaXJzKQorICAgICAgCisgICAgZGVmIF9leGVjdXRlX2JyYWNlX2dyb3VwKHNlbGYsIGdyb3VwLCByZWRpcnMpOgorICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgIGZvciBjbWQgaW4gZ3JvdXAuY21kczoKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShjbWQsIHJlZGlycykKKyAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgCisgICAgZGVmIF9leGVjdXRlX2Z1bmN0aW9uX2RlZmluaXRpb24oc2VsZiwgZnVuZGVmLCByZWRpcnMpOgorICAgICAgICBzZWxmLl9lbnYuZGVmaW5lX2Z1bmN0aW9uKGZ1bmRlZi5uYW1lLCBmdW5kZWYuYm9keSkKKyAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV93aGlsZV9jbGF1c2Uoc2VsZiwgd2hpbGVfY2xhdXNlLCByZWRpcnMpOgorICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBjb25kX3N0YXR1cyA9IDAKKyAgICAgICAgICAgIGZvciBjb25kIGluIHdoaWxlX2NsYXVzZS5jb25kaXRpb246CisgICAgICAgICAgICAgICAgY29uZF9zdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY29uZCwgcmVkaXJzKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgY29uZF9zdGF0dXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciBjbWQgaW4gd2hpbGVfY2xhdXNlLmNtZHM6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGNtZCwgcmVkaXJzKQorICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gc3RhdHVzCisgICAgICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfZm9yX2NsYXVzZShzZWxmLCBmb3JfY2xhdXNlLCByZWRpcnMpOgorICAgICAgICBpZiBub3QgaXNfbmFtZShmb3JfY2xhdXNlLm5hbWUpOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignJXMgaXMgbm90IGEgdmFsaWQgbmFtZScgJSByZXByKGZvcl9jbGF1c2UubmFtZSkpCisgICAgICAgIGl0ZW1zID0gbWFwcGVuZChzZWxmLmV4cGFuZF90b2tlbiwgZm9yX2NsYXVzZS5pdGVtcykKKyAgICAgICAgCisgICAgICAgIHN0YXR1cyA9IDAgICAgCisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgc2VsZi5fZW52W2Zvcl9jbGF1c2UubmFtZV0gPSBpdGVtCisgICAgICAgICAgICBmb3IgY21kIGluIGZvcl9jbGF1c2UuY21kczoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLmV4ZWN1dGUoY21kLCByZWRpcnMpCisgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9hbmRfb3Ioc2VsZiwgb3JfYW5kLCByZWRpcnMpOgorICAgICAgICByZXMgPSBzZWxmLmV4ZWN1dGUob3JfYW5kLmxlZnQsIHJlZGlycykgICAgICAgIAorICAgICAgICBpZiAob3JfYW5kLm9wPT0nJiYnIGFuZCByZXM9PTApIG9yIChvcl9hbmQub3AhPScmJicgYW5kIHJlcyE9MCk6CisgICAgICAgICAgICByZXMgPSBzZWxmLmV4ZWN1dGUob3JfYW5kLnJpZ2h0LCByZWRpcnMpCisgICAgICAgIHJldHVybiByZXMKKyAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9waXBlbGluZShzZWxmLCBwaXBlbGluZSwgcmVkaXJzKTogICAgICAgICAgICAKKyAgICAgICAgaWYgbGVuKHBpcGVsaW5lLmNvbW1hbmRzKT09MToKKyAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShwaXBlbGluZS5jb21tYW5kc1swXSwgcmVkaXJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBFeGVjdXRlIGFsbCBjb21tYW5kcyBvbmUgYWZ0ZXIgdGhlIG90aGVyCisgICAgICAgICAgICBzdGF0dXMgPSAwCisgICAgICAgICAgICBpbnBhdGgsIG91dHBhdGggPSBOb25lLCBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBDb21tYW5kcyBpbnB1dHMgYW5kIG91dHB1dHMgY2Fubm90IHJlYWxseSBiZSBwbHVnZ2VkIGFzIGRvbmUKKyAgICAgICAgICAgICAgICAjIGJ5IGEgcmVhbCBzaGVsbC4gUnVuIGNvbW1hbmRzIHNlcXVlbnRpYWxseSBhbmQgY2hhaW4gdGhlaXIKKyAgICAgICAgICAgICAgICAjIGlucHV0L291dHB1dCB0aHJvdWdodCB0ZW1wb3JhcnkgZmlsZXMuCisgICAgICAgICAgICAgICAgdG1wZmQsIGlucGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHRtcGZkKQorICAgICAgICAgICAgICAgIHRtcGZkLCBvdXRwYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UodG1wZmQpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5wYXRoID0gd2luMzJfdG9fdW5peF9wYXRoKGlucGF0aCkKKyAgICAgICAgICAgICAgICBvdXRwYXRoID0gd2luMzJfdG9fdW5peF9wYXRoKG91dHBhdGgpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIGksIGNtZCBpbiBlbnVtZXJhdGUocGlwZWxpbmUuY29tbWFuZHMpOgorICAgICAgICAgICAgICAgICAgICBjYWxsX3JlZGlycyA9IHJlZGlycy5jbG9uZSgpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkhPTA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9yZWRpcnMuYWRkKHNlbGYsICc8JywgaW5wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSE9bGVuKHBpcGVsaW5lLmNvbW1hbmRzKS0xOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcmVkaXJzLmFkZChzZWxmLCAnPicsIG91dHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuZXhlY3V0ZShjbWQsIGNhbGxfcmVkaXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAjIENoYWluIGlucHV0cy9vdXRwdXRzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnBhdGgsIG91dHBhdGggPSBvdXRwYXRoLCBpbnBhdGgKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcmVkaXJzLmNsb3NlKCkgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgaW5wYXRoOiBvcy5yZW1vdmUoaW5wYXRoKQorICAgICAgICAgICAgICAgIGlmIG91dHBhdGg6IG9zLnJlbW92ZShvdXRwYXRoKQorICAgICAgICAKKyAgICAgICAgaWYgcGlwZWxpbmUucmV2ZXJzZV9zdGF0dXM6CisgICAgICAgICAgICBzdGF0dXMgPSBpbnQobm90IHN0YXR1cykKKyAgICAgICAgc2VsZi5fZW52Wyc/J10gPSBzdGF0dXMKKyAgICAgICAgcmV0dXJuIHN0YXR1cworICAgICAgICAKKyAgICBkZWYgX2V4ZWN1dGVfZnVuY3Rpb24oc2VsZiwgbmFtZSwgYXJncywgaW50ZXJwLCBlbnYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgKm90aGVycyk6CisgICAgICAgIGFzc2VydCBpbnRlcnAgaXMgc2VsZgorICAgICAgICAKKyAgICAgICAgZnVuYyA9IGVudi5nZXRfZnVuY3Rpb24obmFtZSkKKyAgICAgICAgI1NldCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKKyAgICAgICAgcHJldmFyZ3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByZXZhcmdzID0gZW52LnNldF9wb3NpdGlvbmFsX2FyZ3MoYXJncykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWRpcnMgPSBSZWRpcmVjdGlvbnMoc3RkaW4uZHVwKCksIHN0ZG91dC5kdXAoKSwgc3RkZXJyLmR1cCgpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5leGVjdXRlKGZ1bmMsIHJlZGlycykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICByZWRpcnMuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IFJldHVyblNpZ25hbCBhcyBlOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IGludChlLmFyZ3NbMF0pCisgICAgICAgICAgICAgICAgZW52Wyc/J10gPSBzdGF0dXMKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXMKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICNSZXNldCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGlmIHByZXZhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGVudi5zZXRfcG9zaXRpb25hbF9hcmdzKHByZXZhcmdzKQorICAgICAgICAgICAgICAgIAorICAgIGRlZiBfZXhlY3V0ZV9zaW1wbGVfY29tbWFuZChzZWxmLCB0b2tlbiwgcmVkaXJzKToKKyAgICAgICAgIiIiQ2FuIHJhaXNlIFJldHVyblNpZ25hbCB3aGVuIHJldHVybiBidWlsdGluIGlzIGNhbGxlZCwgRXhpdFNpZ25hbCB3aGVuCisgICAgICAgIGV4aXQgaXMgY2FsbGVkLCBhbmQgb3RoZXIgc2hlbGwgZXhjZXB0aW9ucyB1cG9uIGJ1aWx0aW4gZmFpbHVyZXMuCisgICAgICAgICIiIgorICAgICAgICBkZWJ1Z19jb21tYW5kID0gJ2RlYnVnLWNtZCcgaW4gc2VsZi5fZGVidWdmbGFncworICAgICAgICBpZiBkZWJ1Z19jb21tYW5kOgorICAgICAgICAgICAgc2VsZi5sb2coJ3dvcmQnICsgcmVwcih0b2tlbi53b3JkcykgKyAnXG4nKQorICAgICAgICAgICAgc2VsZi5sb2coJ2Fzc2lnbnMnICsgcmVwcih0b2tlbi5hc3NpZ25zKSArICdcbicpCisgICAgICAgICAgICBzZWxmLmxvZygncmVkaXJzJyArIHJlcHIodG9rZW4ucmVkaXJzKSArICdcbicpCisgICAgICAgIAorICAgICAgICBpc19zcGVjaWFsID0gTm9uZQorICAgICAgICBlbnYgPSBzZWxmLl9lbnYKKyAgICAgICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV29yZCBleHBhbnNpb24KKyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICAgICAgZm9yIHdvcmQgaW4gdG9rZW4ud29yZHM6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFyZ3MgKz0gc2VsZi5leHBhbmRfdG9rZW4od29yZCkKKyAgICAgICAgICAgICAgICBpZiBpc19zcGVjaWFsIGlzIE5vbmUgYW5kIGFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGlzX3NwZWNpYWwgPSBlbnYuaXNfZnVuY3Rpb24oYXJnc1swXSkgb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ3NbMF0gaW4gc2VsZi5DT01NQU5EUyBhbmQgc2VsZi5DT01NQU5EU1thcmdzWzBdXS5pc19zcGVjaWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBkZWJ1Z19jb21tYW5kOgorICAgICAgICAgICAgICAgIHNlbGYubG9nKCdfZXhlY3V0ZV9zaW1wbGVfY29tbWFuZCcgKyBzdHIoYXJncykgKyAnXG4nKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICAgICAgIyBSZWRpcmVjdGlvbnMgaGFwcGVuIGlzIGEgc3Vic2hlbGwKKyAgICAgICAgICAgICAgICByZWRpcnMgPSByZWRpcnMuY2xvbmUoKQorICAgICAgICAgICAgZWxpZiBub3QgaXNfc3BlY2lhbDoKKyAgICAgICAgICAgICAgICBlbnYgPSBzZWxmLl9lbnYuY2xvbmUoKQorICAgICAgICAgICAgCisgICAgICAgICAgICAjIFJlZGlyZWN0aW9ucworICAgICAgICAgICAgc2VsZi5yZWRpcmVjdChyZWRpcnMsIHRva2VuLnJlZGlycykKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICMgVmFyaWFibGVzIGFzc2lnbm1lbnRzCisgICAgICAgICAgICByZXMgPSAwCisgICAgICAgICAgICBmb3IgdHlwZSwoayx2KSBpbiB0b2tlbi5hc3NpZ25zOgorICAgICAgICAgICAgICAgIHN0YXR1cywgZXhwYW5kZWQgPSBzZWxmLmV4cGFuZF92YXJpYWJsZSgoayx2KSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHN0YXR1cworICAgICAgICAgICAgICAgIGlmIGFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGVudi5leHBvcnQoaywgZXhwYW5kZWQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZW52W2tdID0gZXhwYW5kZWQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGFyZ3MgYW5kIGFyZ3NbMF0gaW4gKCcuJywgJ3NvdXJjZScpOgorICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuZG90Y29tbWFuZChlbnYsIGFyZ3NbMTpdKQorICAgICAgICAgICAgZWxpZiBhcmdzOgorICAgICAgICAgICAgICAgIGlmIGFyZ3NbMF0gaW4gc2VsZi5DT01NQU5EUzoKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuQ09NTUFORFNbYXJnc1swXV0KKyAgICAgICAgICAgICAgICBlbGlmIGVudi5pc19mdW5jdGlvbihhcmdzWzBdKToKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IFV0aWxpdHkoc2VsZi5fZXhlY3V0ZV9mdW5jdGlvbiwgaXNfc3BlY2lhbD1UcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnLycgaW4gYXJnc1swXS5yZXBsYWNlKCdcXCcsICcvJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBlbnYuZmluZF9pbl9wYXRoKGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY21kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogdGVzdCBlcnJvciBjb2RlIG9uIHVua25vd24gY29tbWFuZCA9PiAxMjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21tYW5kTm90Rm91bmQoJ1Vua25vd24gY29tbWFuZDogIiVzIicgJSBhcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgY29tbWFuZHMgbGlrZSAnL2N5Z2RyaXZlL2MvZm9vLmJhdCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IGN5Z3dpbl90b193aW5kb3dzX3BhdGgoYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjbWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbW1hbmROb3RGb3VuZCgnJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknICUgYXJnc1swXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoZWJhbmcgPSByZXNvbHZlX3NoZWJhbmcoY21kKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2hlYmFuZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBzaGViYW5nCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IFtjbWRdCisgICAgICAgICAgICAgICAgICAgIGFyZ3NbMDoxXSA9IGNtZAorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gVXRpbGl0eShidWlsdGluLnJ1bl9jb21tYW5kKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMgQ29tbWFuZCBleGVjdXRpb24KKyAgICAgICAgICAgICAgICBpZiAnZGVidWctY21kJyBpbiBzZWxmLl9kZWJ1Z2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygncmVkaXJlY3Rpb25zICcgKyBzdHIocmVkaXJzKSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlcyA9IGNvbW1hbmQuZnVuYyhhcmdzWzBdLCBhcmdzWzE6XSwgc2VsZiwgZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcnMuc3RkaW4oKSwgcmVkaXJzLnN0ZG91dCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJzLnN0ZGVycigpLCBzZWxmLl9kZWJ1Z2ZsYWdzKQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBzZWxmLl9lbnYuaGFzX29wdCgnLXgnKToKKyAgICAgICAgICAgICAgICAjIFRyYWNlIGNvbW1hbmQgZXhlY3V0aW9uIGluIHNoZWxsIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgIyBCVUc6IHdvdWxkIGJlIGhhcmQgdG8gcmVwcm9kdWNlIGEgcmVhbCBzaGVsbCBiZWhhdmlvdXIgc2luY2UKKyAgICAgICAgICAgICAgICAjIHRoZSBBU1QgaXMgbm90IGFubm90YXRlZCB3aXRoIHNvdXJjZSBsaW5lcy90b2tlbnMuCisgICAgICAgICAgICAgICAgc2VsZi5fcmVkaXJzLnN0ZG91dCgpLndyaXRlKCcgJy5qb2luKGFyZ3MpKQorICAgICAgICAgICAgICAgIAorICAgICAgICBleGNlcHQgUmV0dXJuU2lnbmFsOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFNoZWxsRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGlzX3NwZWNpYWwgb3IgaXNpbnN0YW5jZShlLCAoRXhpdFNpZ25hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hlbGxTeW50YXhFcnJvciwgRXhwYW5zaW9uRXJyb3IpKToKKyAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgICAgICBzZWxmLl9yZWRpcnMuc3RkZXJyKCkud3JpdGUoc3RyKGUpKydcbicpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBleHBhbmRfdG9rZW4oc2VsZiwgd29yZCk6CisgICAgICAgICIiIkV4cGFuZCBhIHdvcmQgYXMgc3BlY2lmaWVkIGluIFsyLjYgV29yZCBFeHBhbnNpb25zXS4gUmV0dXJuIHRoZSBsaXN0CisgICAgICAgIG9mIGV4cGFuZGVkIHdvcmRzLgorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzLCB3dHJlZXMgPSBzZWxmLl9leHBhbmRfd29yZCh3b3JkKQorICAgICAgICByZXR1cm4gbWFwKHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nLCB3dHJlZXMpCisgICAgICAgIAorICAgIGRlZiBleHBhbmRfdmFyaWFibGUoc2VsZiwgd29yZCk6CisgICAgICAgICIiIlJldHVybiBhIHN0YXR1cyBjb2RlIChvciBOb25lIGlmIG5vIGNvbW1hbmQgZXhwYW5zaW9uIG9jY3VycmVkKQorICAgICAgICBhbmQgYSBzaW5nbGUgd29yZC4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXR1cywgd3RyZWVzID0gc2VsZi5fZXhwYW5kX3dvcmQod29yZCwgcGF0aG5hbWU9RmFsc2UsIHNwbGl0PUZhbHNlKQorICAgICAgICB3b3JkcyA9IG1hcChweXNobGV4LndvcmR0cmVlX2FzX3N0cmluZywgd3RyZWVzKQorICAgICAgICBhc3NlcnQgbGVuKHdvcmRzKT09MQorICAgICAgICByZXR1cm4gc3RhdHVzLCB3b3Jkc1swXQorICAgICAgICAKKyAgICBkZWYgZXhwYW5kX2hlcmVfZG9jdW1lbnQoc2VsZiwgd29yZCk6CisgICAgICAgICIiIlJldHVybiB0aGUgZXhwYW5kZWQgZG9jdW1lbnQgYXMgYSBzaW5nbGUgd29yZC4gVGhlIGhlcmUgZG9jdW1lbnQgaXMgCisgICAgICAgIGFzc3VtZWQgdG8gYmUgdW5xdW90ZWQuCisgICAgICAgICIiIgorICAgICAgICBzdGF0dXMsIHd0cmVlcyA9IHNlbGYuX2V4cGFuZF93b3JkKHdvcmQsIHBhdGhuYW1lPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0PUZhbHNlLCBoZXJlX2RvY3VtZW50PVRydWUpCisgICAgICAgIHdvcmRzID0gbWFwKHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nLCB3dHJlZXMpCisgICAgICAgIGFzc2VydCBsZW4od29yZHMpPT0xCisgICAgICAgIHJldHVybiB3b3Jkc1swXQorICAgICAgICAKKyAgICBkZWYgZXhwYW5kX3JlZGlyZWN0aW9uKHNlbGYsIHdvcmQpOgorICAgICAgICAiIiJSZXR1cm4gYSBzaW5nbGUgd29yZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX3ZhcmlhYmxlKHdvcmQpWzFdCisgICAgICAgIAorICAgIGRlZiBnZXRfZW52KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW52CisgICAgICAgIAorICAgIGRlZiBfZXhwYW5kX3dvcmQoc2VsZiwgdG9rZW4sIHBhdGhuYW1lPVRydWUsIHNwbGl0PVRydWUsIGhlcmVfZG9jdW1lbnQ9RmFsc2UpOgorICAgICAgICB3dHJlZSA9IHB5c2hsZXgubWFrZV93b3JkdHJlZSh0b2tlblsxXSwgaGVyZV9kb2N1bWVudD1oZXJlX2RvY3VtZW50KQorICAgICAgICAKKyAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgdGlsZGUgZXhwYW5zaW9uCisgICAgICAgIGRlZiBleHBhbmQod3RyZWUpOgorICAgICAgICAgICAgIiIiUmV0dXJuIGEgcHNldWRvIHdvcmR0cmVlOiB0aGUgdHJlZSBvciBpdHMgc3ViZWxlbWVudHMgY2FuIGJlIGVtcHR5CisgICAgICAgICAgICBsaXN0cyB3aGVuIG5vIHZhbHVlIHJlc3VsdCBmcm9tIHRoZSBleHBhbnNpb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHN0YXR1cyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHd0cmVlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHBhcnRbMF1pbiAoIiciLCAnXFwnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIHBhcnRbMF0gaW4gKCdgJywgJyQoJyk6CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2VsZi5fZXhwYW5kX2NvbW1hbmQocGFydCkKKyAgICAgICAgICAgICAgICAgICAgcGFydFs6XSA9IHJlc3VsdAorICAgICAgICAgICAgICAgIGVsaWYgcGFydFswXSBpbiAoJyQnLCAnJHsnKToKKyAgICAgICAgICAgICAgICAgICAgcGFydFs6XSA9IHNlbGYuX2V4cGFuZF9wYXJhbWV0ZXIocGFydCwgd3RyZWVbMF09PSciJywgc3BsaXQpCisgICAgICAgICAgICAgICAgZWxpZiBwYXJ0WzBdIGluICgnJywgJyInKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBleHBhbmQocGFydCkKKyAgICAgICAgICAgICAgICAgICAgcGFydFs6XSA9IHJlc3VsdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIGV4cGFuc2lvbiBpcyBub3QgaW1wbGVtZW50ZWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBwYXJ0WzBdKQorICAgICAgICAgICAgIyBbXSBpcyByZXR1cm5lZCB3aGVuIGFuIGV4cGFuc2lvbiByZXN1bHQgaW4gbm8tZmllbGQsCisgICAgICAgICAgICAjIGxpa2UgYW4gZW1wdHkgJEAKKyAgICAgICAgICAgIHd0cmVlID0gW3AgZm9yIHAgaW4gd3RyZWUgaWYgcCAhPSBbXV0KKyAgICAgICAgICAgIGlmIGxlbih3dHJlZSkgPCAzOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIFtdCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCB3dHJlZQorICAgICAgICAKKyAgICAgICAgc3RhdHVzLCB3dHJlZSA9IGV4cGFuZCh3dHJlZSkKKyAgICAgICAgaWYgbGVuKHd0cmVlKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywgd3RyZWUKKyAgICAgICAgd3RyZWUgPSBweXNobGV4Lm5vcm1hbGl6ZV93b3JkdHJlZSh3dHJlZSkKKyAgICAgICAgCisgICAgICAgIGlmIHNwbGl0OgorICAgICAgICAgICAgd3RyZWVzID0gc2VsZi5fc3BsaXRfZmllbGRzKHd0cmVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3RyZWVzID0gW3d0cmVlXQorICAgICAgICAKKyAgICAgICAgaWYgcGF0aG5hbWU6CisgICAgICAgICAgICB3dHJlZXMgPSBtYXBwZW5kKHNlbGYuX2V4cGFuZF9wYXRobmFtZSwgd3RyZWVzKQorICAgICAgICAKKyAgICAgICAgd3RyZWVzID0gbWFwKHNlbGYuX3JlbW92ZV9xdW90ZXMsIHd0cmVlcykKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgd3RyZWVzCisgICAgICAgIAorICAgIGRlZiBfZXhwYW5kX2NvbW1hbmQoc2VsZiwgd3RyZWUpOgorICAgICAgICAjIEJVRzogdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYmFja3NsYXNoZXMgYW5kIHF1b3RlZAorICAgICAgICAjIGNoYXJhY3RlcnMgaGVyZQorICAgICAgICBjb21tYW5kID0gcHlzaGxleC53b3JkdHJlZV9hc19zdHJpbmcod3RyZWVbMTotMV0pCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5zdWJzaGVsbF9vdXRwdXQoY29tbWFuZCkKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgWycnLCBvdXRwdXQsICcnXQorICAgICAgICAKKyAgICBkZWYgX2V4cGFuZF9wYXJhbWV0ZXIoc2VsZiwgd3RyZWUsIHF1b3RlZD1GYWxzZSwgc3BsaXQ9RmFsc2UpOgorICAgICAgICAiIiJSZXR1cm4gYSB2YWxpZCB3dHJlZSBvciBhbiBlbXB0eSBsaXN0IHdoZW4gbm8gcGFyYW1ldGVyIHJlc3VsdHMuIiIiCisgICAgICAgICMgR2V0IHRoZSBwYXJhbWV0ZXIgbmFtZQorICAgICAgICAjIFRPRE86IGltcGxlbWVudCB3ZWlyZCBleHBhbnNpb24gcnVsZXMgd2l0aCAnOicKKyAgICAgICAgbmFtZSA9IHB5c2hsZXgud29yZHRyZWVfYXNfc3RyaW5nKHd0cmVlWzE6LTFdKQorICAgICAgICBpZiBub3QgaXNfbmFtZShuYW1lKSBhbmQgbm90IGlzX3NwZWNpYWxfcGFyYW0obmFtZSk6CisgICAgICAgICAgICByYWlzZSBFeHBhbnNpb25FcnJvcignQmFkIHN1YnN0aXR1dGlvbiAiJXMiJyAlIG5hbWUpCisgICAgICAgICMgVE9ETzogaW1wbGVtZW50IHNwZWNpYWwgcGFyYW1ldGVycworICAgICAgICBpZiBuYW1lIGluICgnQCcsICcqJyk6CisgICAgICAgICAgICBhcmdzID0gc2VsZi5fZW52LmdldF9wb3NpdGlvbmFsX2FyZ3MoKQorICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgICAgICBpZiBsZW4oYXJncyk8MjoKKyAgICAgICAgICAgICAgICByZXR1cm4gWycnLCAnJy5qb2luKGFyZ3MpLCAnJ10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlcCA9IHNlbGYuX2Vudi5nZXQoJ0lGUycsICcnKVs6MV0KKyAgICAgICAgICAgIGlmIHNwbGl0IGFuZCBxdW90ZWQgYW5kIG5hbWU9PSdAJzoKKyAgICAgICAgICAgICAgICAjIEludHJvZHVjZSBhIG5ldyB0b2tlbiB0byB0ZWxsIHRoZSBjYWxsZXIgdGhhdCB0aGVzZSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgIyBjYXVzZSBhIHNwbGl0IGFzIHNwZWNpZmllZCBpbiAyLjUuMgorICAgICAgICAgICAgICAgIHJldHVybiBbJ0AnXSArIGFyZ3MgKyBbJyddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbJycsIHNlcC5qb2luKGFyZ3MpLCAnJ10gICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICByZXR1cm4gWycnLCBzZWxmLl9lbnYuZ2V0KG5hbWUsICcnKSwgJyddCisgICAgICAgIAorICAgIGRlZiBfc3BsaXRfZmllbGRzKHNlbGYsIHd0cmVlKToKKyAgICAgICAgZGVmIGlzX2VtcHR5KHNwbGl0KToKKyAgICAgICAgICAgIHJldHVybiBzcGxpdD09WycnLCAnJywgJyddCisgICAgICAgICAgICAKKyAgICAgICAgZGVmIHNwbGl0X3Bvc2l0aW9uYWwocXVvdGVkKToKKyAgICAgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiB3dHJlZSBzcGxpdCBhY2NvcmRpbmcgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHJ1bGVzLgorICAgICAgICAgICAgIyBBbGwgcmVtYWluaW5nICdAJyBncm91cHMgYXJlIHJlbW92ZWQuCisgICAgICAgICAgICBhc3NlcnQgcXVvdGVkWzBdPT0nIicKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BsaXRzID0gW1tdXQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gcXVvdGVkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnQsIGxpc3QpIG9yIHBhcnRbMF0hPSdAJzoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRzWy0xXS5hcHBlbmQocGFydCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IG9yIHNpbmdsZSBhcmd1bWVudCBsaXN0IHdlcmUgZGVhbHQgd2l0aCBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBsZW4ocGFydCk+MworICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IGFyZ3VtZW50IG11c3Qgam9pbiB3aXRoIHRoZSBiZWdpbm5pbmcgcGFydCBvZiB0aGUgb3JpZ2luYWwgd29yZAorICAgICAgICAgICAgICAgICAgICBzcGxpdHNbLTFdLmFwcGVuZChwYXJ0WzFdKQorICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSBkb3VibGUtcXVvdGVzIGV4cHJlc3Npb25zIGZvciBldmVyeSBhcmd1bWVudCBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBwYXJ0WzI6LTFdOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRzWy0xXS5hcHBlbmQoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRzLmFwcGVuZChbJyInLCBhcmddKQorICAgICAgICAgICAgcmV0dXJuIHNwbGl0cworICAgICAgICAKKyAgICAgICAgIyBBdCB0aGlzIHBvaW50LCBhbGwgZXhwYW5zaW9ucyBidXQgcGF0aG5hbWVzIGhhdmUgb2NjdXJlZC4gT25seSBxdW90ZWQKKyAgICAgICAgIyBhbmQgcG9zaXRpb25hbCBzZXF1ZW5jZXMgcmVtYWluLiBUaHVzLCBhbGwgY2FuZGlkYXRlcyBmb3IgZmllbGQgc3BsaXR0aW5nIAorICAgICAgICAjIGFyZSBpbiB0aGUgdHJlZSByb290LCBvciBhcmUgcG9zaXRpb25hbCBzcGxpdHMgKCdAJykgYW5kIGxpZSBpbiByb290CisgICAgICAgICMgY2hpbGRyZW4uCisgICAgICAgIGlmIG5vdCB3dHJlZSBvciB3dHJlZVswXSBub3QgaW4gKCcnLCAnIicpOgorICAgICAgICAgICAgIyBUaGUgd2hvbGUgdG9rZW4gaXMgcXVvdGVkIG9yIGVtcHR5LCBub3RoaW5nIHRvIHNwbGl0CisgICAgICAgICAgICByZXR1cm4gW3d0cmVlXQorICAgICAgICAgICAgCisgICAgICAgIGlmIHd0cmVlWzBdPT0nIic6CisgICAgICAgICAgICB3dHJlZSA9IFsnJywgd3RyZWUsICcnXQorICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0gW1snJywgJyddXQorICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgaWYgcGFydFswXT09JyInOgorICAgICAgICAgICAgICAgICAgICBzcGxpdHMgPSBzcGxpdF9wb3NpdGlvbmFsKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHMpPD0xOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSArPSBbcGFydCwgJyddCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBzcGxpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSArPSBbc3BsaXRzWzBdLCAnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzcGxpdHNbMTotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgbmV3IHNwbGl0CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gW1snJywgc3BsaXRzWy0xXSwgJyddXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gW3BhcnQsICcnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHMgPSBzZWxmLl9lbnYuc3BsaXRfZmllbGRzKHBhcnQpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0cyk8PTE6CisgICAgICAgICAgICAgICAgICAgICMgTm8gc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXVstMV0gKz0gcGFydAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgVGVybWluYXRlIHRoZSBjdXJyZW50IHJlc3VsdGluZyBwYXJ0IGFuZCBjcmVhdGUgYSBuZXcgb25lCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFstMV1bLTFdICs9IHNwbGl0c1swXQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFtbJycsIHIsICcnXSBmb3IgciBpbiBzcGxpdHNbMTotMV1dCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBbWycnLCBzcGxpdHNbLTFdXV0KKyAgICAgICAgcmVzdWx0Wy0xXS5hcHBlbmQoJycpCisgICAgICAgIAorICAgICAgICAjIExlYWRpbmcgYW5kIHRyYWlsaW5nIGVtcHR5IGdyb3VwcyBjb21lIGZyb20gbGVhZGluZy90cmFpbGluZyBibGFua3MKKyAgICAgICAgaWYgcmVzdWx0IGFuZCBpc19lbXB0eShyZXN1bHRbLTFdKToKKyAgICAgICAgICAgIHJlc3VsdFstMTpdID0gW10KKyAgICAgICAgaWYgcmVzdWx0IGFuZCBpc19lbXB0eShyZXN1bHRbMF0pOgorICAgICAgICAgICAgcmVzdWx0WzoxXSA9IFtdCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgCisgICAgZGVmIF9leHBhbmRfcGF0aG5hbWUoc2VsZiwgd3RyZWUpOgorICAgICAgICAiIiJTZWUgWzIuNi42IFBhdGhuYW1lIEV4cGFuc2lvbl0uIiIiCisgICAgICAgIGlmIHNlbGYuX2Vudi5oYXNfb3B0KCctZicpOgorICAgICAgICAgICAgcmV0dXJuIFt3dHJlZV0KKyAgICAgICAgCisgICAgICAgICMgQWxsIGV4cGFuc2lvbnMgaGF2ZSBiZWVuIHBlcmZvcm1lZCwgb25seSBxdW90ZWQgc2VxdWVuY2VzIHNob3VsZCByZW1haW4KKyAgICAgICAgIyBpbiB0aGUgdHJlZS4gR2VuZXJhdGUgdGhlIHBhdHRlcm4gYnkgZm9sZGluZyB0aGUgdHJlZSwgZXNjYXBpbmcgc3BlY2lhbAorICAgICAgICAjIGNoYXJhY3RlcnMgd2hlbiBhcHBlYXIgcXVvdGVkCisgICAgICAgIHNwZWNpYWxfY2hhcnMgPSAnKj9bXScKKyAgICAgICAgCisgICAgICAgIGRlZiBtYWtlX3BhdHRlcm4od3RyZWUpOgorICAgICAgICAgICAgc3VicGF0dGVybiA9IFtdCisgICAgICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gbWFrZV9wYXR0ZXJuKHBhcnQpCisgICAgICAgICAgICAgICAgZWxpZiB3dHJlZVswXSE9Jyc6CisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHBhcnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE1ldGEtY2hhcmFjdGVycyBjYW5ub3QgYmUgcXVvdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjIGluIHNwZWNpYWxfY2hhcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgR2xvYkVycm9yKCkKKyAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgcmV0dXJuICcnLmpvaW4oc3VicGF0dGVybikKKyAgICAgICAgICAgIAorICAgICAgICBkZWYgcHdkX2dsb2IocGF0dGVybik6CisgICAgICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5fZW52WydQV0QnXSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYi5nbG9iKHBhdHRlcm4pIAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihjd2QpICAgIAorICAgICAgICAgICAgCisgICAgICAgICNUT0RPOiBjaGVjayB3b3JraW5nIGRpcmVjdG9yeSBpc3N1ZXMgaGVyZSB3cnQgcmVsYXRpdmUgcGF0dGVybnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0dGVybiA9IG1ha2VfcGF0dGVybih3dHJlZSkKKyAgICAgICAgICAgIHBhdGhzID0gcHdkX2dsb2IocGF0dGVybikKKyAgICAgICAgZXhjZXB0IEdsb2JFcnJvcjoKKyAgICAgICAgICAgICMgQlVHOiBNZXRhLWNoYXJhY3RlcnMgd2VyZSBmb3VuZCBpbiBxdW90ZWQgc2VxdWVuY2VzLiBUaGUgc2hvdWxkIAorICAgICAgICAgICAgIyBoYXZlIGJlZW4gdXNlZCBsaXRlcmFsbHkgYnV0IHRoaXMgaXMgdW5zdXBwb3J0ZWQgaW4gY3VycmVudCBnbG9iIG1vZHVsZS4KKyAgICAgICAgICAgICMgSW5zdGVhZCB3ZSBjb25zaWRlciB0aGUgd2hvbGUgdHJlZSBtdXN0IGJlIHVzZWQgbGl0ZXJhbGx5IGFuZAorICAgICAgICAgICAgIyB0aGVyZWZvcmUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gZ2xvYmJpbmcuIFRoaXMgaXMgd3Jvbmcgd2hlbiBtZXRhCisgICAgICAgICAgICAjIGNoYXJhY3RlcnMgYXJlIG1peGVkIHdpdGggcXVvdGVkIG1ldGEgaW4gdGhlIHNhbWUgcGF0dGVybiBsaWtlOgorICAgICAgICAgICAgIyA8IGZvbyoicHkqIiA+CisgICAgICAgICAgICBwYXRocyA9IFtdCisgICAgICAgICAgICAKKyAgICAgICAgaWYgbm90IHBhdGhzOgorICAgICAgICAgICAgcmV0dXJuIFt3dHJlZV0KKyAgICAgICAgcmV0dXJuIFtbJycsIHBhdGgsICcnXSBmb3IgcGF0aCBpbiBwYXRoc10KKyAgICAgICAgCisgICAgZGVmIF9yZW1vdmVfcXVvdGVzKHNlbGYsIHd0cmVlKToKKyAgICAgICAgIiIiU2VlIFsyLjYuNyBRdW90ZSBSZW1vdmFsXS4iIiIKKyAgICAgICAgCisgICAgICAgIGRlZiB1bnF1b3RlKHd0cmVlKToKKyAgICAgICAgICAgIHVucXVvdGVkID0gW10KKyAgICAgICAgICAgIGZvciBwYXJ0IGluIHd0cmVlWzE6LTFdOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSB1bnF1b3RlKHBhcnQpCisgICAgICAgICAgICAgICAgdW5xdW90ZWQuYXBwZW5kKHBhcnQpCisgICAgICAgICAgICByZXR1cm4gJycuam9pbih1bnF1b3RlZCkKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gWycnLCB1bnF1b3RlKHd0cmVlKSwgJyddCisgICAgICAgIAorICAgIGRlZiBzdWJzaGVsbChzZWxmLCBzY3JpcHQ9Tm9uZSwgYXN0PU5vbmUsIHJlZGlycz1Ob25lKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc2NyaXB0IG9yIEFTVCBpbiBhIHN1YnNoZWxsLCB3aXRoIGluaGVyaXRlZCByZWRpcmVjdGlvbnMKKyAgICAgICAgaWYgcmVkaXJzIGlzIG5vdCBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmVkaXJzOgorICAgICAgICAgICAgc3ViX3JlZGlycyA9IHJlZGlycworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ViX3JlZGlycyA9IHJlZGlycy5jbG9uZSgpCisgICAgICAgIAorICAgICAgICBzdWJzaGVsbCA9IE5vbmUgICAgCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnNoZWxsID0gSW50ZXJwcmV0ZXIoTm9uZSwgc2VsZi5fZGVidWdmbGFncywgc2VsZi5fZW52LmNsb25lKFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJfcmVkaXJzLCBvcHRzPXNlbGYuX29wdGlvbnMpCisgICAgICAgICAgICByZXR1cm4gc3Vic2hlbGwuZXhlY3V0ZV9zY3JpcHQoc2NyaXB0LCBhc3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgcmVkaXJzOiBzdWJfcmVkaXJzLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHN1YnNoZWxsOiBzdWJzaGVsbC5jbG9zZSgpCisgICAgICAgIAorICAgIGRlZiBzdWJzaGVsbF9vdXRwdXQoc2VsZiwgc2NyaXB0KToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc2NyaXB0IGluIGEgc3Vic2hlbGwgYW5kIHJldHVybiB0aGUgY2FwdHVyZWQgb3V0cHV0LiIiIiAgICAgICAgCisgICAgICAgICMgQ3JlYXRlIHRlbXBvcmFyeSBmaWxlIHRvIGNhcHR1cmUgc3Vic2hlbGwgb3V0cHV0CisgICAgICAgIHRtcGZkLCB0bXBwYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRtcGZpbGUgPSBvcy5mZG9wZW4odG1wZmQsICd3YicpCisgICAgICAgICAgICBzdGRvdXQgPSBGaWxlV3JhcHBlcigndycsIHRtcGZpbGUpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlZGlycyA9IFJlZGlyZWN0aW9ucyhzZWxmLl9yZWRpcnMuc3RkaW4oKS5kdXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVkaXJzLnN0ZGVycigpLmR1cCgpKSAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNlbGYuc3Vic2hlbGwoc2NyaXB0PXNjcmlwdCwgcmVkaXJzPXJlZGlycykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVkaXJzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByZWRpcnMgPSBOb25lCisgICAgICAgICAgICAKKyAgICAgICAgICAgICMgRXh0cmFjdCBzdWJzaGVsbCBzdGFuZGFyZCBvdXRwdXQKKyAgICAgICAgICAgIHRtcGZpbGUgPSBvcGVuKHRtcHBhdGgsICdyYicpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gdG1wZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCBvdXRwdXQucnN0cmlwKCdcbicpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRtcGZpbGUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRtcHBhdGgpCisKKyAgICBkZWYgX2FzeW5jbGlzdChzZWxmLCBjbWQpOgorICAgICAgICBhcmdzID0gKHNlbGYuX2Vudi5nZXRfdmFyaWFibGVzKCksIGNtZCkKKyAgICAgICAgYXJnID0gZW5jb2RlYXJncyhhcmdzKQorICAgICAgICBhc3NlcnQgbGVuKGFyZ3MpIDwgMzAqMTAyNAorICAgICAgICBjbWQgPSBbJ3B5c2guYmF0JywgJy0tYXN0JywgJy1jJywgYXJnXQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIGN3ZD1zZWxmLl9lbnZbJ1BXRCddKQorICAgICAgICBzZWxmLl9jaGlsZHJlbltwLnBpZF0gPSBwCisgICAgICAgIHNlbGYuX2VudlsnISddID0gcC5waWQKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiB3YWl0KHNlbGYsIHBpZHM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBwaWRzOgorICAgICAgICAgICAgcGlkcyA9IHNlbGYuX2NoaWxkcmVuLmtleXMoKQorCisgICAgICAgIHN0YXR1cyA9IDEyNworICAgICAgICBmb3IgcGlkIGluIHBpZHM6CisgICAgICAgICAgICBpZiBwaWQgbm90IGluIHNlbGYuX2NoaWxkcmVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwID0gc2VsZi5fY2hpbGRyZW4ucG9wKHBpZCkKKyAgICAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCisKKyAgICAgICAgcmV0dXJuIHN0YXR1cworCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9weXNoL2xzcHJvZi5weSBiL2JpdGJha2UvbGliL2JiL3B5c2gvbHNwcm9mLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxODMxYzIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9weXNoL2xzcHJvZi5weQpAQCAtMCwwICsxLDExNiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgc3lzCitmcm9tIF9sc3Byb2YgaW1wb3J0IFByb2ZpbGVyLCBwcm9maWxlcl9lbnRyeQorCitfX2FsbF9fID0gWydwcm9maWxlJywgJ1N0YXRzJ10KKworZGVmIHByb2ZpbGUoZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorICAgIHAgPSBQcm9maWxlcigpCisgICAgcC5lbmFibGUoc3ViY2FsbHM9VHJ1ZSwgYnVpbHRpbnM9VHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIGYoKmFyZ3MsICoqa3dkcykKKyAgICBmaW5hbGx5OgorICAgICAgICBwLmRpc2FibGUoKQorICAgIHJldHVybiBTdGF0cyhwLmdldHN0YXRzKCkpCisKKworY2xhc3MgU3RhdHMob2JqZWN0KToKKyAgICAiIiJYWFggZG9jc3RyaW5nIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgIGRlZiBzb3J0KHNlbGYsIGNyaXQ9ImlubGluZXRpbWUiKToKKyAgICAgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorICAgICAgICBpZiBjcml0IG5vdCBpbiBwcm9maWxlcl9lbnRyeS5fX2RpY3RfXzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbid0IHNvcnQgYnkgJXMiICUgY3JpdCkKKyAgICAgICAgc2VsZi5kYXRhLnNvcnQobGFtYmRhIGIsIGE6IGNtcChnZXRhdHRyKGEsIGNyaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoYiwgY3JpdCkpKQorICAgICAgICBmb3IgZSBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICBpZiBlLmNhbGxzOgorICAgICAgICAgICAgICAgIGUuY2FsbHMuc29ydChsYW1iZGEgYiwgYTogY21wKGdldGF0dHIoYSwgY3JpdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihiLCBjcml0KSkpCisKKyAgICBkZWYgcHByaW50KHNlbGYsIHRvcD1Ob25lLCBmaWxlPU5vbmUsIGxpbWl0PU5vbmUsIGNsaW1pdD1Ob25lKToKKyAgICAgICAgIiIiWFhYIGRvY3N0cmluZyIiIgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlID0gc3lzLnN0ZG91dAorICAgICAgICBkID0gc2VsZi5kYXRhCisgICAgICAgIGlmIHRvcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGQgPSBkWzp0b3BdCisgICAgICAgIGNvbHMgPSAiJSAxMnMgJTEycyAlMTEuNGYgJTExLjRmICAgJXNcbiIKKyAgICAgICAgaGNvbHMgPSAiJSAxMnMgJTEycyAlMTJzICUxMnMgJXNcbiIKKyAgICAgICAgY29sczIgPSAiKyUxMnMgJTEycyAlMTEuNGYgJTExLjRmICsgICVzXG4iCisgICAgICAgIGZpbGUud3JpdGUoaGNvbHMgJSAoIkNhbGxDb3VudCIsICJSZWN1cnNpdmUiLCAiVG90YWwobXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5saW5lKG1zKSIsICJtb2R1bGU6bGluZW5vKGZ1bmN0aW9uKSIpKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGUgaW4gZDoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoY29scyAlIChlLmNhbGxjb3VudCwgZS5yZWNjYWxsY291bnQsIGUudG90YWx0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5saW5ldGltZSwgbGFiZWwoZS5jb2RlKSkpCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgY291bnQgPT0gbGltaXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBjY291bnQgPSAwCisgICAgICAgICAgICBpZiBlLmNhbGxzOgorICAgICAgICAgICAgICAgIGZvciBzZSBpbiBlLmNhbGxzOgorICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKGNvbHMgJSAoIislcyIgJSBzZS5jYWxsY291bnQsIHNlLnJlY2NhbGxjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlLnRvdGFsdGltZSwgc2UuaW5saW5ldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrJXMiICUgbGFiZWwoc2UuY29kZSkpKQorICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGNjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lIGFuZCBjb3VudCA9PSBsaW1pdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBpZiBjbGltaXQgaXMgbm90IE5vbmUgYW5kIGNjb3VudCA9PSBjbGltaXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIGZyZWV6ZShzZWxmKToKKyAgICAgICAgIiIiUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byBjb2RlIG9iamVjdHMgd2l0aCBzdHJpbmcKKyAgICAgICAgZGVzY3JpcHRpb25zOyB0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHBpY2tsZSB0aGUgaW5zdGFuY2UuIiIiCisKKyAgICAgICAgIyB0aGlzIGNvZGUgaXMgcHJvYmFibHkgcmF0aGVyIGlja2llciB0aGFuIGl0IG5lZWRzIHRvIGJlIQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5kYXRhKSk6CisgICAgICAgICAgICBlID0gc2VsZi5kYXRhW2ldCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLmNvZGUsIHN0cik6CisgICAgICAgICAgICAgICAgc2VsZi5kYXRhW2ldID0gdHlwZShlKSgobGFiZWwoZS5jb2RlKSwpICsgZVsxOl0pCisgICAgICAgICAgICBpZiBlLmNhbGxzOgorICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihlLmNhbGxzKSk6CisgICAgICAgICAgICAgICAgICAgIHNlID0gZS5jYWxsc1tqXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZS5jb2RlLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZS5jYWxsc1tqXSA9IHR5cGUoc2UpKChsYWJlbChzZS5jb2RlKSwpICsgc2VbMTpdKQorCitfZm4ybW9kID0ge30KKworZGVmIGxhYmVsKGNvZGUpOgorICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgc3RyKToKKyAgICAgICAgcmV0dXJuIGNvZGUKKyAgICB0cnk6CisgICAgICAgIG1uYW1lID0gX2ZuMm1vZFtjb2RlLmNvX2ZpbGVuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZm9yIGssIHYgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHYgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIodiwgJ19fZmlsZV9fJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYuX19maWxlX18sIHN0cik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHYuX19maWxlX18uc3RhcnRzd2l0aChjb2RlLmNvX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBtbmFtZSA9IF9mbjJtb2RbY29kZS5jb19maWxlbmFtZV0gPSBrCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1uYW1lID0gX2ZuMm1vZFtjb2RlLmNvX2ZpbGVuYW1lXSA9ICc8JXM+JyVjb2RlLmNvX2ZpbGVuYW1lCisKKyAgICByZXR1cm4gJyVzOiVkKCVzKScgJSAobW5hbWUsIGNvZGUuY29fZmlyc3RsaW5lbm8sIGNvZGUuY29fbmFtZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBvcworICAgIHN5cy5hcmd2ID0gc3lzLmFyZ3ZbMTpdCisgICAgaWYgbm90IHN5cy5hcmd2OgorICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAidXNhZ2U6IGxzcHJvZi5weSA8c2NyaXB0PiA8YXJndW1lbnRzLi4uPiIKKyAgICAgICAgc3lzLmV4aXQoMikKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpKQorICAgIHN0YXRzID0gcHJvZmlsZShleGVjZmlsZSwgc3lzLmFyZ3ZbMF0sIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgc3RhdHMuc29ydCgpCisgICAgc3RhdHMucHByaW50KCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaC5weSBiL2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGU2MTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoLnB5CkBAIC0wLDAgKzEsMTY3IEBACisjIHB5c2gucHkgLSBjb21tYW5kIHByb2Nlc3NpbmcgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGludGVycAorCitTSF9PUFQgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIocHJvZz0ncHlzaCcsIHVzYWdlPSIlcHJvZyBbT1BUSU9OU10iLCB2ZXJzaW9uPScwLjEnKQorU0hfT1BULmFkZF9vcHRpb24oJy1jJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nY29tbWFuZF9zdHJpbmcnLCBkZWZhdWx0PU5vbmUsIAorICAgIGhlbHA9J0Egc3RyaW5nIHRoYXQgc2hhbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsIGFzIG9uZSBvciBtb3JlIGNvbW1hbmRzJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLXJlZGlyZWN0LXRvJywgZGVzdD0ncmVkaXJlY3RfdG8nLCBkZWZhdWx0PU5vbmUsIAorICAgIGhlbHA9J1JlZGlyZWN0IHNjcmlwdCBjb21tYW5kcyBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc3BlY2lmaWVkIGZpbGUnKQorIyBTZWUgdXRpbGl0eV9jb21tYW5kIGluIGJ1aWx0aW4ucHkgYWJvdXQgdGhlIHJlYXNvbiBmb3IgdGhpcyBmbGFnLgorU0hfT1BULmFkZF9vcHRpb24oJy0tcmVkaXJlY3RlZCcsIGRlc3Q9J3JlZGlyZWN0ZWQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCAKKyAgICBoZWxwPSdUZWxsIHRoZSBpbnRlcnByZXRlciB0aGF0IHN0ZG91dCBhbmQgc3RkZXJyIGFyZSBhY3R1YWxseSB0aGUgc2FtZSBvYmplY3RzLCB3aGljaCBpcyByZWFsbHkgc3Rkb3V0JykKK1NIX09QVC5hZGRfb3B0aW9uKCctLWRlYnVnLXBhcnNpbmcnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdkZWJ1Z19wYXJzaW5nJywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVHJhY2UgUExZIGV4ZWN1dGlvbicpCitTSF9PUFQuYWRkX29wdGlvbignLS1kZWJ1Zy10cmVlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZGVidWdfdHJlZScsIGRlZmF1bHQ9RmFsc2UsIAorICAgIGhlbHA9J0Rpc3BsYXkgdGhlIGdlbmVyYXRlZCBzeW50YXggdHJlZS4nKQorU0hfT1BULmFkZF9vcHRpb24oJy0tZGVidWctY21kJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZGVidWdfY21kJywgZGVmYXVsdD1GYWxzZSwgCisgICAgaGVscD0nVHJhY2UgY29tbWFuZCBleGVjdXRpb24gYmVmb3JlIHBhcmFtZXRlcnMgZXhwYW5zaW9uIGFuZCBleGl0IHN0YXR1cy4nKQorU0hfT1BULmFkZF9vcHRpb24oJy0tZGVidWctdXRpbGl0eScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RlYnVnX3V0aWxpdHknLCBkZWZhdWx0PUZhbHNlLCAKKyAgICBoZWxwPSdUcmFjZSB1dGlsaXR5IGNhbGxzLCBhZnRlciBwYXJhbWV0ZXJzIGV4cGFuc2lvbnMnKQorU0hfT1BULmFkZF9vcHRpb24oJy0tYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nYXN0JywgZGVmYXVsdD1GYWxzZSwKKyAgICBoZWxwPSdFbmNvZGVkIGNvbW1hbmRzIHRvIGV4ZWN1dGUgaW4gYSBzdWJwcm9jZXNzJykKK1NIX09QVC5hZGRfb3B0aW9uKCctLXByb2ZpbGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9J1Byb2ZpbGUgcHlzaCBydW4nKQorICAgIAorICAgIAorZGVmIHNwbGl0X2FyZ3MoYXJncyk6CisgICAgIyBTZXBhcmF0ZSBzaGVsbCBhcmd1bWVudHMgZnJvbSBjb21tYW5kIG9uZXMKKyAgICAjIEp1c3Qgc3RvcCBhdCB0aGUgZmlyc3QgYXJndW1lbnQgbm90IHN0YXJ0aW5nIHdpdGggYSBkYXNoLiBJIGtub3csIHRoaXMgaXMgY29tcGxldGVseSBicm9rZW4sCisgICAgIyBpdCBpZ25vcmVzIGZpbGVzIHN0YXJ0aW5nIHdpdGggYSBkYXNoIG9yIG1heSB0YWtlIG9wdGlvbiB2YWx1ZXMgZm9yIGNvbW1hbmQgZmlsZS4gVGhpcyBpcyBub3QKKyAgICAjIHN1cHBvc2VkIHRvIGhhcHBlbiBmb3Igbm93CisgICAgY29tbWFuZF9pbmRleCA9IGxlbihhcmdzKQorICAgIGZvciBpLGFyZyBpbiBlbnVtZXJhdGUoYXJncyk6CisgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgY29tbWFuZF9pbmRleCA9IGkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAKKyAgICByZXR1cm4gYXJnc1s6Y29tbWFuZF9pbmRleF0sIGFyZ3NbY29tbWFuZF9pbmRleDpdCisKKworZGVmIGZpeGVudihlbnYpOgorICAgIHBhdGggPSBlbnYuZ2V0KCdQQVRIJykKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBwYXJ0cyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKKyAgICAgICAgIyBSZW1vdmUgV2luZG93cyB1dGlsaXRpZXMgZnJvbSBQQVRILCB0aGV5IGFyZSB1c2VsZXNzIGF0IGJlc3QgYW5kCisgICAgICAgICMgc29tZSBvZiB0aGVtIChmaW5kKSBtYXkgYmUgY29uZnVzZWQgd2l0aCBvdGhlciB1dGlsaXRpZXMuCisgICAgICAgIHBhcnRzID0gW3AgZm9yIHAgaW4gcGFydHMgaWYgJ3N5c3RlbTMyJyBub3QgaW4gcC5sb3dlcigpXQorICAgICAgICBlbnZbJ1BBVEgnXSA9IG9zLnBhdGhzZXAuam9pbihwYXJ0cykKKyAgICBpZiBlbnYuZ2V0KCdIT01FJykgaXMgTm9uZToKKyAgICAgICAgIyBTZXZlcmFsIHV0aWxpdGllcywgaW5jbHVkaW5nIGN2c3BzLCBjYW5ub3Qgd29yayB3aXRob3V0CisgICAgICAgICMgYSBkZWZpbmVkIEhPTUUgZGlyZWN0b3J5LgorICAgICAgICBlbnZbJ0hPTUUnXSA9IG9zLnBhdGguZXhwYW5kdXNlcignficpCisgICAgcmV0dXJuIGVudgorCitkZWYgX3NoKGN3ZCwgc2hhcmdzLCBjbWRhcmdzLCBvcHRpb25zLCBkZWJ1Z2ZsYWdzPU5vbmUsIGVudj1Ob25lKToKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgnUFlTSF9URVhUJykgIT0gJzEnOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZvciBmcCBpbiAoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIG1zdmNydC5zZXRtb2RlKGZwLmZpbGVubygpLCBvcy5PX0JJTkFSWSkKKworICAgIGhnYmluID0gb3MuZW52aXJvbi5nZXQoJ1BZU0hfSEdURVhUJykgIT0gJzEnCisgICAgCisgICAgaWYgZGVidWdmbGFncyBpcyBOb25lOgorICAgICAgICBkZWJ1Z2ZsYWdzID0gW10KKyAgICAgICAgaWYgb3B0aW9ucy5kZWJ1Z19wYXJzaW5nOiAgICBkZWJ1Z2ZsYWdzLmFwcGVuZCgnZGVidWctcGFyc2luZycpCisgICAgICAgIGlmIG9wdGlvbnMuZGVidWdfdXRpbGl0eTogICAgZGVidWdmbGFncy5hcHBlbmQoJ2RlYnVnLXV0aWxpdHknKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnX2NtZDogICAgICAgIGRlYnVnZmxhZ3MuYXBwZW5kKCdkZWJ1Zy1jbWQnKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnX3RyZWU6ICAgICAgIGRlYnVnZmxhZ3MuYXBwZW5kKCdkZWJ1Zy10cmVlJykKKyAgICAKKyAgICBpZiBlbnYgaXMgTm9uZToKKyAgICAgICAgZW52ID0gZml4ZW52KGRpY3Qob3MuZW52aXJvbikpCisgICAgaWYgY3dkIGlzIE5vbmU6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisKKyAgICBpZiBub3QgY21kYXJnczoKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvCisgICAgICAgIHJldHVybiAwCisKKyAgICBhc3QgPSBOb25lCisgICAgY29tbWFuZF9maWxlID0gTm9uZQorICAgIGlmIG9wdGlvbnMuY29tbWFuZF9zdHJpbmc6CisgICAgICAgIGlucHV0ID0gY21kYXJnc1swXQorICAgICAgICBpZiBub3Qgb3B0aW9ucy5hc3Q6CisgICAgICAgICAgICBpbnB1dCArPSAnXG4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzLCBpbnB1dCA9IGludGVycC5kZWNvZGVhcmdzKGlucHV0KSwgTm9uZQorICAgICAgICAgICAgZW52LCBhc3QgPSBhcmdzCisgICAgICAgICAgICBjd2QgPSBlbnYuZ2V0KCdQV0QnLCBjd2QpCisgICAgZWxzZToKKyAgICAgICAgY29tbWFuZF9maWxlID0gY21kYXJnc1swXQorICAgICAgICBhcmd1bWVudHMgPSBjbWRhcmdzWzE6XQorCisgICAgICAgIHByZWZpeCA9IGludGVycC5yZXNvbHZlX3NoZWJhbmcoY29tbWFuZF9maWxlLCBpZ25vcmVzaGVsbD1UcnVlKQorICAgICAgICBpZiBwcmVmaXg6CisgICAgICAgICAgICBpbnB1dCA9ICcgJy5qb2luKHByZWZpeCArIFtjb21tYW5kX2ZpbGVdICsgYXJndW1lbnRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSZWFkIGNvbW1hbmRzIGZyb20gZmlsZQorICAgICAgICAgICAgZiA9IGZpbGUoY29tbWFuZF9maWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgVHJhaWxpbmcgbmV3bGluZSB0byBoZWxwIHRoZSBwYXJzZXIKKyAgICAgICAgICAgICAgICBpbnB1dCA9IGYucmVhZCgpICsgJ1xuJworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAKKyAgICByZWRpcmVjdCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGlmIG9wdGlvbnMucmVkaXJlY3RlZDoKKyAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHN0ZGVyciA9IHN0ZG91dAorICAgICAgICBlbGlmIG9wdGlvbnMucmVkaXJlY3RfdG86CisgICAgICAgICAgICByZWRpcmVjdCA9IG9wZW4ob3B0aW9ucy5yZWRpcmVjdF90bywgJ3diJykKKyAgICAgICAgICAgIHN0ZG91dCA9IHJlZGlyZWN0CisgICAgICAgICAgICBzdGRlcnIgPSByZWRpcmVjdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICAgICAgCisgICAgICAgICMgVE9ETzogc2V0IGFyZ3VtZW50cyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgb3B0cyA9IGludGVycC5PcHRpb25zKCkKKyAgICAgICAgb3B0cy5oZ2JpbmFyeSA9IGhnYmluCisgICAgICAgIGlwID0gaW50ZXJwLkludGVycHJldGVyKGN3ZCwgZGVidWdmbGFncywgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz1vcHRzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEV4cG9ydCBnaXZlbiBlbnZpcm9ubWVudCBpbiBzaGVsbCBvYmplY3QKKyAgICAgICAgICAgIGZvciBrLHYgaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlwLmdldF9lbnYoKS5leHBvcnQoayx2KQorICAgICAgICAgICAgcmV0dXJuIGlwLmV4ZWN1dGVfc2NyaXB0KGlucHV0LCBhc3QsIHNjcmlwdHBhdGg9Y29tbWFuZF9maWxlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaXAuY2xvc2UoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHJlZGlyZWN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVkaXJlY3QuY2xvc2UoKQorCitkZWYgc2goY3dkPU5vbmUsIGFyZ3M9Tm9uZSwgZGVidWdmbGFncz1Ob25lLCBlbnY9Tm9uZSk6CisgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCisgICAgc2hhcmdzLCBjbWRhcmdzID0gc3BsaXRfYXJncyhhcmdzKQorICAgIG9wdGlvbnMsIHNoYXJncyA9IFNIX09QVC5wYXJzZV9hcmdzKHNoYXJncykKKworICAgIGlmIG9wdGlvbnMucHJvZmlsZToKKyAgICAgICAgaW1wb3J0IGxzcHJvZgorICAgICAgICBwID0gbHNwcm9mLlByb2ZpbGVyKCkKKyAgICAgICAgcC5lbmFibGUoc3ViY2FsbHM9VHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIF9zaChjd2QsIHNoYXJncywgY21kYXJncywgb3B0aW9ucywgZGVidWdmbGFncywgZW52KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcC5kaXNhYmxlKCkKKyAgICAgICAgICAgIHN0YXRzID0gbHNwcm9mLlN0YXRzKHAuZ2V0c3RhdHMoKSkKKyAgICAgICAgICAgIHN0YXRzLnNvcnQoKQorICAgICAgICAgICAgc3RhdHMucHByaW50KHRvcD0xMCwgZmlsZT1zeXMuc3RkZXJyLCBjbGltaXQ9NSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX3NoKGN3ZCwgc2hhcmdzLCBjbWRhcmdzLCBvcHRpb25zLCBkZWJ1Z2ZsYWdzLCBlbnYpCisgICAgICAgICAgICAKK2RlZiBtYWluKCk6CisgICAgc3lzLmV4aXQoc2goKSkKKworaWYgX19uYW1lX189PSdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkgYi9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2hsZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwMTIzNgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3B5c2gvcHlzaGxleC5weQpAQCAtMCwwICsxLDg4OCBAQAorIyBweXNobGV4LnB5IC0gUExZIGNvbXBhdGlibGUgbGV4ZXIgZm9yIHB5c2guCisjCisjIENvcHlyaWdodCAyMDA3IFBhdHJpY2sgTWV6YXJkCisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworIyBUT0RPOgorIyAtIHJldmlldyBhbGwgImNoYXIgaW4gJ2FiYyciIHNuaXBwZXRzOiB0aGUgZW1wdHkgc3RyaW5nIGNhbiBiZSBtYXRjaGVkCisjIC0gdGVzdCBsaW5lIGNvbnRpbnVhdGlvbnMgd2l0aGluIHF1b3RlZC9leHBhbnNpb24gc3RyaW5ncworIyAtIGVvZiBpcyBidWdneSB3cnQgc3VibGV4ZXJzCisjIC0gdGhlIGxleGVyIGNhbm5vdCByZWFsbHkgd29yayBpbiBwdWxsIG1vZGUgYXMgaXQgd291bGQgYmUgcmVxdWlyZWQgdG8gcnVuCisjIFBMWSBpbiBwdWxsIG1vZGUuIEl0IHdhcyBkZXNpZ25lZCB0byB3b3JrIGluY3JlbWVudGFsbHkgYW5kIGl0IHdvdWxkIG5vdCBiZQorIyB0aGF0IGhhcmQgdG8gZW5hYmxlIHB1bGwgbW9kZS4KK2ltcG9ydCByZQordHJ5OgorICAgIHMgPSBzZXQoKQorICAgIGRlbCBzCitleGNlcHQgTmFtZUVycm9yOgorICAgIGZyb20gU2V0IGltcG9ydCBTZXQgYXMgc2V0CisKK2Zyb20gcGx5IGltcG9ydCBsZXgKK2Zyb20gc2hlcnJvcnMgaW1wb3J0ICoKKworY2xhc3MgTmVlZE1vcmUoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBpc19ibGFuayhjKToKKyAgICByZXR1cm4gYyBpbiAoJyAnLCAnXHQnKQorICAgIAorX1JFX0RJR0lUUyA9IHJlLmNvbXBpbGUocideXGQrJCcpCisKK2RlZiBhcmVfZGlnaXRzKHMpOgorICAgIHJldHVybiBfUkVfRElHSVRTLnNlYXJjaChzKSBpcyBub3QgTm9uZQorCitfT1BFUkFUT1JTID0gZGljdChbCisgICAgKCcmJicsICdBTkRfSUYnKSwKKyAgICAoJ3x8JywgJ09SX0lGJyksCisgICAgKCc7OycsICdEU0VNSScpLAorICAgICgnPDwnLCAnRExFU1MnKSwKKyAgICAoJz4+JywgJ0RHUkVBVCcpLAorICAgICgnPCYnLCAnTEVTU0FORCcpLAorICAgICgnPiYnLCAnR1JFQVRBTkQnKSwKKyAgICAoJzw+JywgJ0xFU1NHUkVBVCcpLAorICAgICgnPDwtJywgJ0RMRVNTREFTSCcpLAorICAgICgnPnwnLCAnQ0xPQkJFUicpLAorICAgICgnJicsICdBTVAnKSwKKyAgICAoJzsnLCAnQ09NTUEnKSwKKyAgICAoJzwnLCAnTEVTUycpLAorICAgICgnPicsICdHUkVBVEVSJyksCisgICAgKCcoJywgJ0xQQVJFTlMnKSwKKyAgICAoJyknLCAnUlBBUkVOUycpLAorXSkKKworI01ha2UgYSBmdW5jdGlvbiB0byBzaWxlbmNlIHB5Y2hlY2tlciAiTG9jYWwgdmFyaWFibGUgc2hhZG93cyBnbG9iYWwiCitkZWYgbWFrZV9wYXJ0aWFsX29wcygpOgorICAgIHBhcnRpYWxzID0ge30KKyAgICBmb3IgayBpbiBfT1BFUkFUT1JTOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oaykrMSk6CisgICAgICAgICAgICBwYXJ0aWFsc1trWzppXV0gPSBOb25lCisgICAgcmV0dXJuIHBhcnRpYWxzICAKKworX1BBUlRJQUxfT1BFUkFUT1JTID0gbWFrZV9wYXJ0aWFsX29wcygpICAgIAorICAgICAgICAKK2RlZiBpc19wYXJ0aWFsX29wKHMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHMgbWF0Y2hlcyBhIG5vbi1lbXB0eSBzdWJwYXJ0IG9mIGFuIG9wZXJhdG9yIHN0YXJ0aW5nCisgICAgYXQgaXRzIGZpcnN0IGNoYXJhY3Rlci4KKyAgICAiIiIKKyAgICByZXR1cm4gcyBpbiBfUEFSVElBTF9PUEVSQVRPUlMKKyAgICAKK2RlZiBpc19vcChzKToKKyAgICAiIiJJZiBzIG1hdGNoZXMgYW4gb3BlcmF0b3IsIHJldHVybnMgdGhlIG9wZXJhdG9yIGlkZW50aWZpZXIuIFJldHVybiBOb25lCisgICAgb3RoZXJ3aXNlLgorICAgICIiIgorICAgIHJldHVybiBfT1BFUkFUT1JTLmdldChzKQorCitfUkVTRVJWRURTID0gZGljdChbCisgICAgKCdpZicsICdJZicpLAorICAgICgndGhlbicsICdUaGVuJyksCisgICAgKCdlbHNlJywgJ0Vsc2UnKSwKKyAgICAoJ2VsaWYnLCAnRWxpZicpLAorICAgICgnZmknLCAnRmknKSwKKyAgICAoJ2RvJywgJ0RvJyksCisgICAgKCdkb25lJywgJ0RvbmUnKSwKKyAgICAoJ2Nhc2UnLCAnQ2FzZScpLAorICAgICgnZXNhYycsICdFc2FjJyksCisgICAgKCd3aGlsZScsICdXaGlsZScpLAorICAgICgndW50aWwnLCAnVW50aWwnKSwKKyAgICAoJ2ZvcicsICdGb3InKSwKKyAgICAoJ3snLCAnTGJyYWNlJyksCisgICAgKCd9JywgJ1JicmFjZScpLAorICAgICgnIScsICdCYW5nJyksCisgICAgKCdpbicsICdJbicpLAorICAgICgnfCcsICdQSVBFJyksCitdKQorICAgIAorZGVmIGdldF9yZXNlcnZlZChzKToKKyAgICByZXR1cm4gX1JFU0VSVkVEUy5nZXQocykKKyAgICAKK19SRV9OQU1FID0gcmUuY29tcGlsZShyJ15bMC05YS16QS1aX10rJCcpCisKK2RlZiBpc19uYW1lKHMpOgorICAgIHJldHVybiBfUkVfTkFNRS5zZWFyY2gocykgaXMgbm90IE5vbmUKKworZGVmIGZpbmRfY2hhcnMoc2VxLCBjaGFycyk6CisgICAgZm9yIGksdiBpbiBlbnVtZXJhdGUoc2VxKToKKyAgICAgICAgaWYgdiBpbiBjaGFyczoKKyAgICAgICAgICAgIHJldHVybiBpLHYKKyAgICByZXR1cm4gLTEsIE5vbmUKKworY2xhc3MgV29yZExleGVyOgorICAgICIiIldvcmRMZXhlciBwYXJzZSBxdW90ZWQgb3IgZXhwYW5zaW9uIGV4cHJlc3Npb25zIGFuZCByZXR1cm4gYW4gZXhwcmVzc2lvbgorICAgIHRyZWUuIFRoZSBpbnB1dCBzdHJpbmcgY2FuIGJlIGFueSB3ZWxsIGZvcm1lZCBzZXF1ZW5jZSBiZWdpbm5pbmcgd2l0aCBxdW90aW5nCisgICAgb3IgZXhwYW5zaW9uIGNoYXJhY3Rlci4gRW1iZWRkZWQgZXhwcmVzc2lvbnMgYXJlIGhhbmRsZWQgcmVjdXJzaXZlbHkuIFRoZQorICAgIHJlc3VsdGluZyB0cmVlIGlzIG1hZGUgb2YgbGlzdHMgYW5kIHN0cmluZ3MuIExpc3RzIHJlcHJlc2VudCBxdW90ZWQgb3IKKyAgICBleHBhbnNpb24gZXhwcmVzc2lvbnMuIEVhY2ggbGlzdCBmaXJzdCBlbGVtZW50IGlzIHRoZSBvcGVuaW5nIHNlcGFyYXRvciwKKyAgICB0aGUgbGFzdCBvbmUgdGhlIGNsb3Npbmcgc2VwYXJhdG9yLiBJbi1iZXR3ZWVuIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHN0cmluZ3MKKyAgICBvciBsaXN0cyBmb3Igc3ViLWV4cHJlc3Npb25zLiBOb24gcXVvdGVkL2V4cGFuc2lvbiBleHByZXNzaW9uIGNhbiB3cml0dGVuIGFzCisgICAgc3RyaW5ncyBvciBhcyBsaXN0cyB3aXRoIGVtcHR5IHN0cmluZ3MgYXMgc3RhcnRpbmcgYW5kIGVuZGluZyBkZWxpbWl0ZXJzLgorICAgICIiIgorCisgICAgTkFNRV9DSEFSU0VUID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5XycKKyAgICBOQU1FX0NIQVJTRVQgPSBkaWN0KHppcChOQU1FX0NIQVJTRVQsIE5BTUVfQ0hBUlNFVCkpCisgICAgCisgICAgU1BFQ0lBTF9DSEFSU0VUID0gJ0AqIz8tJCEwJworICAgIAorICAgICNDaGFyYWN0ZXJzIHdoaWNoIGNhbiBiZSBlc2NhcGVkIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgZGVsaW1pdGVycworICAgIEVTQ0FQQUJMRSA9IHsKKyAgICAgICAgJ2AnOiBzZXQoWyckJywgJ1xcJywgJ2AnXSksCisgICAgICAgICciJzogc2V0KFsnJCcsICdcXCcsICdgJywgJyInXSksCisgICAgICAgICInIjogc2V0KCksCisgICAgfQorICAgICAgICAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVyZWRvYyA9IEZhbHNlKToKKyAgICAgICAgIyBfYnVmZmVyIGlzIHRoZSB1bnByb2Nlc3NlZCBpbnB1dCBjaGFyYWN0ZXJzIGJ1ZmZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICAjIF9zdGFjayBpcyBlbXB0eSBvciBjb250YWlucyBhIHF1b3RlZCBsaXN0IGJlaW5nIHByb2Nlc3NlZAorICAgICAgICAjICh0aGlzIGlzIHRoZSBERlMgcGF0aCB0byB0aGUgcXVvdGVkIGV4cHJlc3Npb24gYmVpbmcgZXZhbHVhdGVkKS4KKyAgICAgICAgc2VsZi5fc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9lc2NhcGFibGUgPSBOb25lCisgICAgICAgICMgVHJ1ZSB3aGVuIHBhcnNpbmcgdW5xdW90ZWQgaGVyZSBkb2N1bWVudHMKKyAgICAgICAgc2VsZi5faGVyZWRvYyA9IGhlcmVkb2MKKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBkYXRhLCBlb2Y9RmFsc2UpOgorICAgICAgICAiIiJGZWVkIHRoZSBsZXhlciB3aXRoIG1vcmUgZGF0YS4gSWYgdGhlIHF1b3RlZCBleHByZXNzaW9uIGNhbiBiZQorICAgICAgICBkZWxpbWl0ZWQsIHJldHVybiBhIHR1cGxlIChleHByLCByZW1haW5pbmcpIGNvbnRhaW5pbmcgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgdHJlZSBhbmQgdGhlIHVuY29uc3VtZWQgZGF0YS4KKyAgICAgICAgT3RoZXJ3aXNlLCByYWlzZSBOZWVkTW9yZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2J1ZmZlciArPSBsaXN0KGRhdGEpCisgICAgICAgIHNlbGYuX3BhcnNlKGVvZikKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3N0YWNrWzBdCisgICAgICAgIHJlbWFpbmluZyA9ICcnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBzZWxmLl9zdGFjayA9IFtdCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHJldHVybiByZXN1bHQsIHJlbWFpbmluZworICAgICAgICAKKyAgICBkZWYgX2lzX2VzY2FwYWJsZShzZWxmLCBjLCBkZWxpbT1Ob25lKToKKyAgICAgICAgaWYgZGVsaW0gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2hlcmVkb2M6CisgICAgICAgICAgICAgICAgIyBCYWNrc2xhc2hlcyB3b3JrcyBhcyBpZiB0aGV5IHdlcmUgZG91YmxlIHF1b3RlZCBpbiB1bnF1b3RlZAorICAgICAgICAgICAgICAgICMgaGVyZS1kb2N1bWVudHMKKyAgICAgICAgICAgICAgICBkZWxpbSA9ICciJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fc3RhY2spPD0xOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgIGRlbGltID0gc2VsZi5fc3RhY2tbLTJdWzBdCisgICAgICAgICAgICAKKyAgICAgICAgZXNjYXBhYmxlcyA9IHNlbGYuRVNDQVBBQkxFLmdldChkZWxpbSwgTm9uZSkKKyAgICAgICAgcmV0dXJuIGVzY2FwYWJsZXMgaXMgTm9uZSBvciBjIGluIGVzY2FwYWJsZXMKKyAgICAgICAgCisgICAgZGVmIF9wYXJzZV9zcXVvdGUoc2VsZiwgYnVmLCByZXN1bHQsIGVvZik6CisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBvcyA9IGJ1Zi5pbmRleCgiJyIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzpwb3NdKQorICAgICAgICByZXN1bHQgKz0gWyInIl0KKyAgICAgICAgcmV0dXJuIHBvcysxLCBUcnVlCisgICAgICAgIAorICAgIGRlZiBfcGFyc2VfYnF1b3RlKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgCisgICAgICAgIGlmIGJ1ZlswXT09J1xuJzoKKyAgICAgICAgICAgICNSZW1vdmUgbGluZSBjb250aW51YXRpb25zCisgICAgICAgICAgICByZXN1bHRbOl0gPSBbJycsICcnLCAnJ10KKyAgICAgICAgZWxpZiBzZWxmLl9pc19lc2NhcGFibGUoYnVmWzBdKToKKyAgICAgICAgICAgIHJlc3VsdFstMV0gKz0gYnVmWzBdCisgICAgICAgICAgICByZXN1bHQgKz0gWycnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0tlZXAgYXMgc3VjaAorICAgICAgICAgICAgcmVzdWx0WzpdID0gWycnLCAnXFwnK2J1ZlswXSwgJyddCisgICAgICAgIAorICAgICAgICByZXR1cm4gMSwgVHJ1ZQorICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2RxdW90ZShzZWxmLCBidWYsIHJlc3VsdCwgZW9mKToKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgcG9zLCBzZXAgPSBmaW5kX2NoYXJzKGJ1ZiwgJyRcXGAiJykKKyAgICAgICAgaWYgcG9zPT0tMToKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzpwb3NdKQorICAgICAgICBpZiBzZXA9PSciJzoKKyAgICAgICAgICAgIHJlc3VsdCArPSBbJyInXQorICAgICAgICAgICAgcmV0dXJuIHBvcysxLCBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjS2VlcCBldmVyeXRoaW5nIHVudGlsIHRoZSBzZXBhcmF0b3IgYW5kIGRlZmVyIHByb2Nlc3NpbmcKKyAgICAgICAgICAgIHJldHVybiBwb3MsIEZhbHNlCisgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX2NvbW1hbmQoc2VsZiwgYnVmLCByZXN1bHQsIGVvZik6CisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisKKyAgICAgICAgY2hhcnMgPSAnJFxcYCJcJycKKyAgICAgICAgaWYgcmVzdWx0WzBdID09ICckKCc6CisgICAgICAgICAgICBjaGFycyArPSAnKScKKyAgICAgICAgcG9zLCBzZXAgPSBmaW5kX2NoYXJzKGJ1ZiwgY2hhcnMpCisgICAgICAgIGlmIHBvcyA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIAorICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzpwb3NdKQorICAgICAgICBpZiAocmVzdWx0WzBdPT0nJCgnIGFuZCBzZXA9PScpJykgb3IgKHJlc3VsdFswXT09J2AnIGFuZCBzZXA9PSdgJyk6CisgICAgICAgICAgICByZXN1bHQgKz0gW3NlcF0KKyAgICAgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBvcywgRmFsc2UKKyAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2VfcGFyYW1ldGVyKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgCisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhidWYsICckXFxgIlwnfScpCisgICAgICAgIGlmIHBvcz09LTE6CisgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAKKyAgICAgICAgcmVzdWx0Wy0xXSArPSAnJy5qb2luKGJ1Zls6cG9zXSkKKyAgICAgICAgaWYgc2VwPT0nfSc6CisgICAgICAgICAgICByZXN1bHQgKz0gW3NlcF0KKyAgICAgICAgICAgIHJldHVybiBwb3MrMSwgVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBvcywgRmFsc2UKKyAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2VfZG9sbGFyKHNlbGYsIGJ1ZiwgcmVzdWx0LCBlb2YpOgorICAgICAgICBzZXAgPSByZXN1bHRbMF0KKyAgICAgICAgaWYgc2VwPT0nJCc6ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICNUT0RPOiBoYW5kbGUgZW1wdHkgJAorICAgICAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgIGlmIGJ1ZlswXT09JygnOgorICAgICAgICAgICAgICAgIGlmIGxlbihidWYpPT0xOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGJ1ZlsxXT09JygnOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSAnJCgoJworICAgICAgICAgICAgICAgICAgICBidWZbOjJdID0gW10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSAnJCgnCisgICAgICAgICAgICAgICAgICAgIGJ1Zls6MV0gPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZWxpZiBidWZbMF09PSd7JzoKKyAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSAnJHsnCisgICAgICAgICAgICAgICAgYnVmWzoxXSA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGJ1ZlswXSBpbiBzZWxmLlNQRUNJQUxfQ0hBUlNFVDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wy0xXSA9IGJ1ZlswXQorICAgICAgICAgICAgICAgICAgICByZWFkID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciByZWFkLGMgaW4gZW51bWVyYXRlKGJ1Zik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjIG5vdCBpbiBzZWxmLk5BTUVfQ0hBUlNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHRbLTFdICs9ICcnLmpvaW4oYnVmWzA6cmVhZF0pCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRbLTFdOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbOl0gPSBbJycsIHJlc3VsdFswXSwgJyddCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFsnJ10gCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWQsVHJ1ZQorICAgICAgICAKKyAgICAgICAgc2VwID0gcmVzdWx0WzBdICAgIAorICAgICAgICBpZiBzZXA9PSckKCc6CisgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9jb21tYW5kCisgICAgICAgIGVsaWYgc2VwPT0nJHsnOgorICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfcGFyYW1ldGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlcCkKKyAgICAgICAgICAgIAorICAgICAgICBwb3MsIGNsb3NlZCA9IHBhcnNlZnVuYyhidWYsIHJlc3VsdCwgZW9mKQorICAgICAgICByZXR1cm4gcG9zLCBjbG9zZWQKKworICAgIGRlZiBfcGFyc2Uoc2VsZiwgZW9mKToKKyAgICAgICAgYnVmID0gc2VsZi5fYnVmZmVyCisgICAgICAgIHN0YWNrID0gc2VsZi5fc3RhY2sKKyAgICAgICAgcmVjdXJzZSA9IEZhbHNlCisgICAgCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBpZiBub3Qgc3RhY2sgb3IgcmVjdXJzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgaWYgYnVmWzBdIG5vdCBpbiAoJyJcXGAkXCcnKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2hlbGxTeW50YXhFcnJvcignSW52YWxpZCBxdW90ZWQgc3RyaW5nIHNlcXVlbmNlJykKKyAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoW2J1ZlswXSwgJyddKQorICAgICAgICAgICAgICAgIGJ1Zls6MV0gPSBbXQorICAgICAgICAgICAgICAgIHJlY3Vyc2UgPSBGYWxzZQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gc3RhY2tbLTFdCisgICAgICAgICAgICBpZiByZXN1bHRbMF09PSInIjoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9zcXVvdGUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdPT0nXFwnOgorICAgICAgICAgICAgICAgIHBhcnNlZnVuYyA9IHNlbGYuX3BhcnNlX2JxdW90ZQorICAgICAgICAgICAgZWxpZiByZXN1bHRbMF09PSciJzoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9kcXVvdGUKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0WzBdPT0nYCc6CisgICAgICAgICAgICAgICAgcGFyc2VmdW5jID0gc2VsZi5fcGFyc2VfY29tbWFuZAorICAgICAgICAgICAgZWxpZiByZXN1bHRbMF1bMF09PSckJzoKKyAgICAgICAgICAgICAgICBwYXJzZWZ1bmMgPSBzZWxmLl9wYXJzZV9kb2xsYXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZWFkLCBjbG9zZWQgPSBwYXJzZWZ1bmMoYnVmLCByZXN1bHQsIGVvZikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1Zls6cmVhZF0gPSBbXQorICAgICAgICAgICAgaWYgY2xvc2VkOgorICAgICAgICAgICAgICAgIGlmIGxlbihzdGFjayk+MToKKyAgICAgICAgICAgICAgICAgICAgI01lcmdlIGluIHBhcmVudCBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YWNrWy0xXSArPSBbcGFyc2VkXQorICAgICAgICAgICAgICAgICAgICBzdGFja1stMV0gKz0gWycnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY3Vyc2UgPSBUcnVlCisKK2RlZiBub3JtYWxpemVfd29yZHRyZWUod3RyZWUpOgorICAgICIiIkZvbGQgYmFjayBldmVyeSBsaXRlcmFsIHNlcXVlbmNlIChkZWxpbWl0ZWQgd2l0aCBlbXB0eSBzdHJpbmdzKSBpbnRvCisgICAgcGFyZW50IHNlcXVlbmNlLgorICAgICIiIgorICAgIGRlZiBub3JtYWxpemUod3RyZWUpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgcGFydCBpbiB3dHJlZVsxOi0xXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydCwgbGlzdCk6CisgICAgICAgICAgICAgICAgcGFydCA9IG5vcm1hbGl6ZShwYXJ0KQorICAgICAgICAgICAgICAgIGlmIHBhcnRbMF09PScnOgorICAgICAgICAgICAgICAgICAgICAjTW92ZSB0aGUgcGFydCBjb250ZW50IGJhY2sgYXQgY3VycmVudCBsZXZlbAorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFydFsxOi0xXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiBub3QgcGFydDoKKyAgICAgICAgICAgICAgICAjUmVtb3ZlIGVtcHR5IHN0cmluZ3MKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYXJ0KQorICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gWycnXSAgICAKKyAgICAgICAgcmV0dXJuIFt3dHJlZVswXV0gKyByZXN1bHQgKyBbd3RyZWVbLTFdXQorICAgICAgICAgICAgICAgIAorICAgIHJldHVybiBub3JtYWxpemUod3RyZWUpCisgICAgCisgICAgICAgICAgICAgICAgCitkZWYgbWFrZV93b3JkdHJlZSh0b2tlbiwgaGVyZV9kb2N1bWVudD1GYWxzZSk6CisgICAgIiIiUGFyc2UgYSBkZWxpbWl0ZWQgdG9rZW4gYW5kIHJldHVybiBhIHRyZWUgc2ltaWxhciB0byB0aGUgb25lcyByZXR1cm5lZCBieQorICAgIFdvcmRMZXhlci4gdG9rZW4gbWF5IGNvbnRhaW4gYW55IGNvbWJpbmF0aW9ucyBvZiBleHBhbnNpb24vcXVvdGVkIGZpZWxkcyBhbmQKKyAgICBub24tb25lcy4KKyAgICAiIiIgICAgCisgICAgdHJlZSA9IFsnJ10KKyAgICByZW1haW5pbmcgPSB0b2tlbgorICAgIGRlbGltaXRlcnMgPSAnXFwkYCcKKyAgICBpZiBub3QgaGVyZV9kb2N1bWVudDoKKyAgICAgICAgZGVsaW1pdGVycyArPSAnXCciJworICAgIAorICAgIHdoaWxlIDE6CisgICAgICAgIHBvcywgc2VwID0gZmluZF9jaGFycyhyZW1haW5pbmcsIGRlbGltaXRlcnMpCisgICAgICAgIGlmIHBvcz09LTE6CisgICAgICAgICAgICB0cmVlICs9IFtyZW1haW5pbmcsICcnXQorICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZV93b3JkdHJlZSh0cmVlKQorICAgICAgICB0cmVlLmFwcGVuZChyZW1haW5pbmdbOnBvc10pCisgICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZ1twb3M6XQorICAgICAgICAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0LCByZW1haW5pbmcgPSBXb3JkTGV4ZXIoaGVyZWRvYyA9IGhlcmVfZG9jdW1lbnQpLmFkZChyZW1haW5pbmcsIFRydWUpCisgICAgICAgIGV4Y2VwdCBOZWVkTW9yZToKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoJ0ludmFsaWQgdG9rZW4gIiVzIicpCisgICAgICAgIHRyZWUuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgCisgICAgICAgICAgICAgICAgCitkZWYgd29yZHRyZWVfYXNfc3RyaW5nKHd0cmVlKToKKyAgICAiIiJSZXdyaXRlIGFuIGV4cHJlc3Npb24gdHJlZSBnZW5lcmF0ZWQgYnkgbWFrZV93b3JkdHJlZSBhcyBzdHJpbmcuIiIiCisgICAgZGVmIHZpc2l0KG5vZGUsIG91dHB1dCk6CisgICAgICAgIGZvciBjaGlsZCBpbiBub2RlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgbGlzdCk6CisgICAgICAgICAgICAgICAgdmlzaXQoY2hpbGQsIG91dHB1dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjaGlsZCkKKyAgICAKKyAgICBvdXRwdXQgPSBbXQorICAgIHZpc2l0KHd0cmVlLCBvdXRwdXQpCisgICAgcmV0dXJuICcnLmpvaW4ob3V0cHV0KQorICAgIAorICAgIAorZGVmIHVucXVvdGVfd29yZHRyZWUod3RyZWUpOgorICAgICIiIkZvbGQgdGhlIHdvcmQgdHJlZSB3aGlsZSByZW1vdmluZyBxdW90ZXMgZXZlcnl3aGVyZS4gT3RoZXIgZXhwYW5zaW9uCisgICAgc2VxdWVuY2VzIGFyZSBqb2luZWQgYXMgc3VjaC4KKyAgICAiIiIKKyAgICBkZWYgdW5xdW90ZSh3dHJlZSk6CisgICAgICAgIHVucXVvdGVkID0gW10KKyAgICAgICAgaWYgd3RyZWVbMF0gaW4gKCcnLCAiJyIsICciJywgJ1xcJyk6CisgICAgICAgICAgICB3dHJlZSA9IHd0cmVlWzE6LTFdCisgICAgICAgICAgICAKKyAgICAgICAgZm9yIHBhcnQgaW4gd3RyZWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnQsIGxpc3QpOgorICAgICAgICAgICAgICAgIHBhcnQgPSB1bnF1b3RlKHBhcnQpCisgICAgICAgICAgICB1bnF1b3RlZC5hcHBlbmQocGFydCkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4odW5xdW90ZWQpCisgICAgICAgICAgICAKKyAgICByZXR1cm4gdW5xdW90ZSh3dHJlZSkKKyAgICAKKyAgICAKK2NsYXNzIEhlcmVEb2NMZXhlcjoKKyAgICAiIiJIZXJlRG9jTGV4ZXIgZGVsaW1pdHMgd2hhdGV2ZXIgY29tZXMgZnJvbSB0aGUgaGVyZS1kb2N1bWVudCBzdGFydGluZyBuZXdsaW5lCisgICAgbm90IGluY2x1ZGVkIHRvIHRoZSBjbG9zaW5nIGRlbGltaXRlciBsaW5lIGluY2x1ZGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgZGVsaW0pOgorICAgICAgICBhc3NlcnQgb3AgaW4gKCc8PCcsICc8PC0nKQorICAgICAgICBpZiBub3QgZGVsaW06CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCdpbnZhbGlkIGhlcmUgZG9jdW1lbnQgZGVsaW1pdGVyICVzJyAlIHN0cihkZWxpbSkpCisgICAgICAgICAgICAKKyAgICAgICAgc2VsZi5fb3AgPSBvcAorICAgICAgICBzZWxmLl9kZWxpbSA9IGRlbGltCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX3Rva2VuID0gW10KKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBkYXRhLCBlb2YpOgorICAgICAgICAiIiJJZiB0aGUgaGVyZS1kb2N1bWVudCB3YXMgZGVsaW1pdGVkLCByZXR1cm4gYSB0dXBsZSAoY29udGVudCwgcmVtYWluaW5nKS4KKyAgICAgICAgUmFpc2UgTmVlZE1vcmUoKSBvdGhlcndpc2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9idWZmZXIgKz0gbGlzdChkYXRhKQorICAgICAgICBzZWxmLl9wYXJzZShlb2YpCisgICAgICAgIHRva2VuID0gJycuam9pbihzZWxmLl90b2tlbikKKyAgICAgICAgcmVtYWluaW5nID0gJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgIHNlbGYuX3Rva2VuLCBzZWxmLl9yZW1haW5pbmcgPSBbXSwgW10KKyAgICAgICAgcmV0dXJuIHRva2VuLCByZW1haW5pbmcKKyAgICAKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGVvZik6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAjTG9vayBmb3IgZmlyc3QgdW5lc2NhcGVkIG5ld2xpbmUuIFF1b3RlcyBtYXkgYmUgaWdub3JlZAorICAgICAgICAgICAgZXNjYXBlZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgaSxjIGluIGVudW1lcmF0ZShzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgICAgIGlmIGVzY2FwZWQ6CisgICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgYz09J1xcJzoKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIGM9PSdcbic6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGkgPSAtMQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGk9PS0xIG9yIHNlbGYuX2J1ZmZlcltpXSE9J1xuJzoKKyAgICAgICAgICAgICAgICBpZiBub3QgZW9mOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgI05vIG1vcmUgZGF0YSwgbWF5YmUgdGhlIGxhc3QgbGluZSBpcyBjbG9zaW5nIGRlbGltaXRlcgorICAgICAgICAgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgICAgICBlb2wgPSAnJworICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcls6XSA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuX2J1ZmZlcls6aV0pCisgICAgICAgICAgICAgICAgZW9sID0gc2VsZi5fYnVmZmVyW2ldCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyWzppKzFdID0gW10KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgc2VsZi5fb3A9PSc8PC0nOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgnXHQnKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgbGluZT09c2VsZi5fZGVsaW06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuICs9IFtsaW5lLCBlb2xdCisgICAgICAgICAgICBpZiBpPT0tMToKKyAgICAgICAgICAgICAgICBicmVhaworICAgIAorY2xhc3MgVG9rZW46CisgICAgI1RPRE86IGNoZWNrIHRoaXMgaXMgc3RpbGwgaW4gdXNlCisgICAgT1BFUkFUT1IgPSAnT1BFUkFUT1InCisgICAgV09SRCA9ICdXT1JEJworICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi52YWx1ZSA9ICcnCisgICAgICAgIHNlbGYudHlwZSA9IE5vbmUKKyAgICAgICAgCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICNCZWhhdmUgbGlrZSBhIHR3byBlbGVtZW50cyB0dXBsZQorICAgICAgICBpZiBrZXk9PTA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlCisgICAgICAgIGlmIGtleT09MToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgIHJhaXNlIEluZGV4RXJyb3Ioa2V5KQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAKK2NsYXNzIEhlcmVEb2M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wLCBuYW1lPU5vbmUpOgorICAgICAgICBzZWxmLm9wID0gb3AKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnBlbmRpbmdzID0gW10KKyAgICAgICAgICAgICAgIAorVEtfQ09NTUEgICAgICAgID0gJ0NPTU1BJworVEtfQU1QRVJTQU5EICAgID0gJ0FNUCcKK1RLX09QICAgICAgICAgICA9ICdPUCcKK1RLX1RPS0VOICAgICAgICA9ICdUT0tFTicKK1RLX0NPTU1FTlQgICAgICA9ICdDT01NRU5UJworVEtfTkVXTElORSAgICAgID0gJ05FV0xJTkUnIAorVEtfSU9OVU1CRVIgICAgID0gJ0lPX05VTUJFUicKK1RLX0FTU0lHTk1FTlQgICA9ICdBU1NJR05NRU5UX1dPUkQnCitUS19IRVJFTkFNRSAgICAgPSAnSEVSRU5BTUUnCisKK2NsYXNzIExleGVyOgorICAgICIiIk1haW4gbGV4ZXIuCisgICAgCisgICAgQ2FsbCBhZGQoKSB1bnRpbCB0aGUgc2NyaXB0IEFTVCBpcyByZXR1cm5lZC4KKyAgICAiIiIKKyAgICAjIEhlcmUtZG9jdW1lbnQgaGFuZGxpbmcgbWFrZXMgdGhlIHdob2xlIHRoaW5nIG1vcmUgY29tcGxleCBiZWNhdXNlIHRoZXkgYmFzaWNhbGx5CisgICAgIyBmb3JjZSB0b2tlbnMgdG8gYmUgcmVvcmRlcmVkOiBoZXJlLWNvbnRlbnQgbXVzdCBjb21lIHJpZ2h0IGFmdGVyIHRoZSBvcGVyYXRvcgorICAgICMgYW5kIHRoZSBoZXJlLWRvY3VtZW50IG5hbWUsIHdoaWxlIHNvbWUgb3RoZXIgdG9rZW5zIG1pZ2h0IGJlIGZvbGxvd2luZyB0aGUKKyAgICAjIGhlcmUtZG9jdW1lbnQgZXhwcmVzc2lvbiBvbiB0aGUgc2FtZSBsaW5lLgorICAgICMKKyAgICAjIFNvLCBoZXJlLWRvYyBzdGF0ZXMgYXJlIGJhc2ljYWxseToKKyAgICAjICAgKnNlbGYuX3N0YXRlPT1TVF9OT1JNQUwKKyAgICAjICAgICAgIC0gc2VsZi5faGVyZWRvYy5vcCBpcyBOb25lOiBubyBoZXJlLWRvY3VtZW50CisgICAgIyAgICAgICAtIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmUgYnV0IG5hbWUgaXM6IGhlcmUtZG9jdW1lbnQgb3BlcmF0b3IgbWF0Y2hlZCwKKyAgICAjICAgICAgICAgICB3YWl0aW5nIGZvciB0aGUgZG9jdW1lbnQgbmFtZS9kZWxpbWl0ZXIKKyAgICAjICAgICAgIC0gc2VsZi5faGVyZWRvYy5vcCBhbmQgbmFtZSBhcmUgbm90IE5vbmU6IGhlcmUtZG9jdW1lbnQgaXMgcmVhZHksIGZvbGxvd2luZworICAgICMgICAgICAgICAgIHRva2VucyBhcmUgYmVpbmcgc3RvcmVkIGFuZCB3aWxsIGJlIHB1c2hlZCBhZ2FpbiB3aGVuIHRoZSBkb2N1bWVudCBpcworICAgICMgICAgICAgICAgIGNvbXBsZXRlbHkgcGFyc2VkLgorICAgICMgICAqc2VsZi5fc3RhdGU9PVNUX0hFUkVET0MKKyAgICAjICAgICAgIC0gVGhlIGhlcmUtZG9jdW1lbnQgaXMgYmVpbmcgZGVsaW1pdGVkIGJ5IHNlbGYuX2hlcmVsZXhlci4gT25jZSBpdCBpcyBkb25lCisgICAgIyAgICAgICAgICAgdGhlIGNvbnRlbnQgaXMgcHVzaGVkIGluIGZyb250IG9mIHRoZSBwZW5kaW5nIHRva2VuIGxpc3QgdGhlbiBhbGwgdGhlc2UKKyAgICAjICAgICAgICAgICB0b2tlbnMgYXJlIHB1c2hlZCBvbmNlIGFnYWluLgorICAgIFNUX05PUk1BTCAgICAgICA9ICdTVF9OT1JNQUwnCisgICAgU1RfT1AgICAgICAgICAgID0gJ1NUX09QJworICAgIFNUX0JBQ0tTTEFTSCAgICA9ICdTVF9CQUNLU0xBU0gnCisgICAgU1RfUVVPVEVEICAgICAgID0gJ1NUX1FVT1RFRCcKKyAgICBTVF9DT01NRU5UICAgICAgPSAnU1RfQ09NTUVOVCcKKyAgICBTVF9IRVJFRE9DICAgICAgPSAnU1RfSEVSRURPQycKKyAgICAKKyAgICAjTWF0Y2ggZW5kIG9mIGJhY2txdW90ZSBzdHJpbmdzCisgICAgUkVfQkFDS1FVT1RFX0VORCA9IHJlLmNvbXBpbGUocicoPzwhXFwpKGApJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnRfc3RhdGUgPSBOb25lKToKKyAgICAgICAgc2VsZi5faW5wdXQgPSBbXQorICAgICAgICBzZWxmLl9wb3MgPSAwCisgICAgICAgIAorICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICAKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBzZWxmLlNUX05PUk1BTAorICAgICAgICBzZWxmLl9wYXJlbnRfc3RhdGUgPSBwYXJlbnRfc3RhdGUKKyAgICAgICAgc2VsZi5fd29yZGxleGVyID0gTm9uZQorICAgICAgICAKKyAgICAgICAgc2VsZi5faGVyZWRvYyA9IEhlcmVEb2MoTm9uZSkKKyAgICAgICAgc2VsZi5faGVyZWxleGVyID0gTm9uZQorICAgICAgICAKKyAgICAgICAgIyMjIEZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBub3QgdXNlZCBmb3IgZGVsaW1pdGluZyB0b2tlbiBhbmQgY2FuIHNhZmVseQorICAgICAgICAjIyMgYmUgY2hhbmdlZCBhZnRlciBoZXJlLWRvY3VtZW50IGRldGVjdGlvbiAoc2VlIF9wdXNoX3Rva2UpCisgICAgICAgIAorICAgICAgICAjIENvdW50IHRoZSBudW1iZXIgb2YgdG9rZW5zIGZvbGxvd2luZyBhICdGb3InIHJlc2VydmVkIHdvcmQuIE5lZWRlZCB0bworICAgICAgICAjIHJldHVybiBhbiAnSW4nIHJlc2VydmVkIHdvcmQgaWYgaXQgY29tZXMgaW4gdGhpcmQgcGxhY2UuCisgICAgICAgIHNlbGYuX2Zvcl9jb3VudCA9IE5vbmUKKyAgICAgICAgCisgICAgZGVmIGFkZChzZWxmLCBkYXRhLCBlb2Y9RmFsc2UpOgorICAgICAgICAiIiJGZWVkIHRoZSBsZXhlciB3aXRoIGRhdGEuCisgICAgICAgIAorICAgICAgICBXaGVuIGVvZiBpcyBzZXQgdG8gVHJ1ZSwgcmV0dXJucyB1bmNvbnN1bWVkIGRhdGEgb3IgcmFpc2UgaWYgdGhlIGxleGVyCisgICAgICAgIGlzIGluIHRoZSBtaWRkbGUgb2YgYSBkZWxpbWl0aW5nIG9wZXJhdGlvbi4KKyAgICAgICAgUmFpc2UgTmVlZE1vcmUgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5wdXQgKz0gbGlzdChkYXRhKQorICAgICAgICBzZWxmLl9wYXJzZShlb2YpCisgICAgICAgIHNlbGYuX2lucHV0WzpzZWxmLl9wb3NdID0gW10KKyAgICAgICAgcmV0dXJuICcnLmpvaW4oc2VsZi5faW5wdXQpCisgICAgICAgIAorICAgIGRlZiBfcGFyc2Uoc2VsZiwgZW9mKTogICAgICAgICAgICAKKyAgICAgICAgd2hpbGUgc2VsZi5fc3RhdGU6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3M+PWxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGVvZjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTmVlZE1vcmUoKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgbm90IGluIChzZWxmLlNUX09QLCBzZWxmLlNUX1FVT1RFRCwgc2VsZi5TVF9IRVJFRE9DKToKKyAgICAgICAgICAgICAgICAgICAgI0RlbGltaXQgdGhlIGN1cnJlbnQgdG9rZW4gYW5kIGxlYXZlIGNsZWFubHkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHVzaF90b2tlbignJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjTGV0IHRoZSBzdWJsZXhlciBoYW5kbGUgdGhlIGVvZiB0aGVtc2VsdmVzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlPT1zZWxmLlNUX05PUk1BTDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9ub3JtYWwoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9DT01NRU5UOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2NvbW1lbnQoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9PUDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9vcChlb2YpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlPT1zZWxmLlNUX1FVT1RFRDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9xdW90ZWQoZW9mKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZT09c2VsZi5TVF9IRVJFRE9DOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2hlcmVkb2MoZW9mKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJVbmtub3duIHN0YXRlICIgKyBzdHIoc2VsZi5fc3RhdGUpCisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCdtaXNzaW5nIGhlcmUtZG9jdW1lbnQgZGVsaW1pdGVyJykKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX25vcm1hbChzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuX2lucHV0W3NlbGYuX3Bvc10KKyAgICAgICAgaWYgYz09J1xuJzoKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oYykKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuID0gYworICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX05FV0xJTkUKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oJycpCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICBlbGlmIGMgaW4gKCdcXCcsICdcJycsICciJywgJ2AnLCAnJCcpOgorICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBzZWxmLlNUX1FVT1RFRAorICAgICAgICBlbGlmIGlzX3BhcnRpYWxfb3AoYyk6CisgICAgICAgICAgICBzZWxmLl9wdXNoX3Rva2VuKGMpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19PUAorICAgICAgICAgICAgc2VsZi5fdG9rZW4gKz0gYworICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9PUAorICAgICAgICBlbGlmIGlzX2JsYW5rKGMpOgorICAgICAgICAgICAgc2VsZi5fcHVzaF90b2tlbihjKQorICAgICAgICAgICAgCisgICAgICAgICAgICAjRGlzY2FyZCBibGFua3MKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgIGVsaWYgc2VsZi5fdG9rZW46CisgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBjCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gMQorICAgICAgICBlbGlmIGM9PScjJzoKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9DT01NRU5UCisgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfQ09NTUVOVAorICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSAxCisgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBjICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2Vfb3Aoc2VsZiwgZW9mKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3Rva2VuCisgICAgICAgIAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgc2VsZi5fcG9zPj1sZW4oc2VsZi5faW5wdXQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5lZWRNb3JlKCkKKyAgICAgICAgICAgICAgICBjID0gJycKKyAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGMgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3NdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBvcCA9IHNlbGYuX3Rva2VuICsgYworICAgICAgICAgICAgaWYgYyBhbmQgaXNfcGFydGlhbF9vcChvcCk6CisgICAgICAgICAgICAgICAgI1N0aWxsIHBhcnNpbmcgYW4gb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9IG9wCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgI0VuZCBvZiBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oYykgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIAorICAgIGRlZiBfcGFyc2VfY29tbWVudChzZWxmKToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Bvcz49bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAgICByYWlzZSBOZWVkTW9yZSgpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjID0gc2VsZi5faW5wdXRbc2VsZi5fcG9zXQorICAgICAgICAgICAgaWYgYz09J1xuJzoKKyAgICAgICAgICAgICAgICAjRW5kIG9mIGNvbW1lbnQsIGRvIG5vdCBjb25zdW1lIHRoZSBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiArPSBjCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IDEKKyAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3BhcnNlX3F1b3RlZChzZWxmLCBlb2YpOgorICAgICAgICAiIiJQcmVjb25kaXRpb246IHRoZSBzdGFydGluZyBiYWNrcXVvdGUvZG9sbGFyIGlzIHN0aWxsIGluIHRoZSBpbnB1dCBxdWV1ZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dvcmRsZXhlcjoKKyAgICAgICAgICAgIHNlbGYuX3dvcmRsZXhlciA9IFdvcmRMZXhlcigpCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9wb3M8bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAjVHJhbnNmZXIgaW5wdXQgcXVldWUgY2hhcmFjdGVyIGludG8gdGhlIHN1YnBhcnNlcgorICAgICAgICAgICAgaW5wdXQgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6XQorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihpbnB1dCkKKyAgICAgICAgICAgIAorICAgICAgICB3dHJlZSwgcmVtYWluaW5nID0gc2VsZi5fd29yZGxleGVyLmFkZChpbnB1dCwgZW9mKQorICAgICAgICBzZWxmLl93b3JkbGV4ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3Rva2VuICs9IHdvcmR0cmVlX2FzX3N0cmluZyh3dHJlZSkKKyAgICAgICAgCisgICAgICAgICNQdXQgdW5wYXJzZWQgY2hhcmFjdGVyIGJhY2sgaW4gdGhlIGlucHV0IHF1ZXVlCisgICAgICAgIGlmIHJlbWFpbmluZzoKKyAgICAgICAgICAgIHNlbGYuX2lucHV0W3NlbGYuX3BvczpzZWxmLl9wb3NdID0gbGlzdChyZW1haW5pbmcpICAgICAgICAgIAorICAgICAgICBzZWxmLl9zdGF0ZSA9IHNlbGYuU1RfTk9STUFMCisgICAgICAgIAorICAgIGRlZiBfcGFyc2VfaGVyZWRvYyhzZWxmLCBlb2YpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3Rva2VuCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9oZXJlbGV4ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2hlcmVsZXhlciA9IEhlcmVEb2NMZXhlcihzZWxmLl9oZXJlZG9jLm9wLCBzZWxmLl9oZXJlZG9jLm5hbWUpCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9wb3M8bGVuKHNlbGYuX2lucHV0KToKKyAgICAgICAgICAgICAjVHJhbnNmZXIgaW5wdXQgcXVldWUgY2hhcmFjdGVyIGludG8gdGhlIHN1YnBhcnNlcgorICAgICAgICAgICAgaW5wdXQgPSBzZWxmLl9pbnB1dFtzZWxmLl9wb3M6XQorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihpbnB1dCkKKyAgICAgICAgCisgICAgICAgIHNlbGYuX3Rva2VuLCByZW1haW5pbmcgPSBzZWxmLl9oZXJlbGV4ZXIuYWRkKGlucHV0LCBlb2YpCisgICAgICAgIAorICAgICAgICAjUmVzZXQgaGVyZS1kb2N1bWVudCBzdGF0ZQorICAgICAgICBzZWxmLl9oZXJlbGV4ZXIgPSBOb25lCisgICAgICAgIGhlcmVkb2MsIHNlbGYuX2hlcmVkb2MgPSBzZWxmLl9oZXJlZG9jLCBIZXJlRG9jKE5vbmUpCisgICAgICAgIGlmIHJlbWFpbmluZzoKKyAgICAgICAgICAgIHNlbGYuX2lucHV0W3NlbGYuX3BvczpzZWxmLl9wb3NdID0gbGlzdChyZW1haW5pbmcpCisgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9OT1JNQUwKKyAgICAgICAgCisgICAgICAgICNQdXNoIHBlbmRpbmcgdG9rZW5zCisgICAgICAgIGhlcmVkb2MucGVuZGluZ3NbOjBdID0gWyhzZWxmLl90b2tlbiwgc2VsZi5fdHlwZSwgaGVyZWRvYy5uYW1lKV0KKyAgICAgICAgZm9yIHRva2VuLCB0eXBlLCBkZWxpbSBpbiBoZXJlZG9jLnBlbmRpbmdzOgorICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSB0b2tlbgorICAgICAgICAgICAgc2VsZi5fdHlwZSA9IHR5cGUKKyAgICAgICAgICAgIHNlbGYuX3B1c2hfdG9rZW4oZGVsaW0pCisgICAgICAgICAgICAgICAgICAgICAKKyAgICBkZWYgX3B1c2hfdG9rZW4oc2VsZiwgZGVsaW0pOgorICAgICAgICBpZiBub3Qgc2VsZi5fdG9rZW46CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgCisgICAgICAgIGlmIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9oZXJlZG9jLm5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjSGVyZS1kb2N1bWVudCBuYW1lCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHlwZSE9VEtfVE9LRU46CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNoZWxsU3ludGF4RXJyb3IoImV4cGVjdGluZyBoZXJlLWRvY3VtZW50IG5hbWUsIGdvdCAnJXMnIiAlIHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgICAgIHNlbGYuX2hlcmVkb2MubmFtZSA9IHVucXVvdGVfd29yZHRyZWUobWFrZV93b3JkdHJlZShzZWxmLl90b2tlbikpCisgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0hFUkVOQU1FCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNDYXB0dXJlIGFsbCB0b2tlbnMgdW50aWwgdGhlIG5ld2xpbmUgc3RhcnRpbmcgdGhlIGhlcmUtZG9jdW1lbnQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90eXBlPT1US19ORVdMSU5FOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGU9PXNlbGYuU1RfTk9STUFMCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gc2VsZi5TVF9IRVJFRE9DICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYuX2hlcmVkb2MucGVuZGluZ3MuYXBwZW5kKChzZWxmLl90b2tlbiwgc2VsZi5fdHlwZSwgZGVsaW0pKSAgICAKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX1RPS0VOCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgIyBCRVdBUkU6IGRvIG5vdCBjaGFuZ2UgcGFyc2VyIHN0YXRlIGZyb20gaGVyZSB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbjoKKyAgICAgICAgIyB3aGVuIHBhcnNpbmcgYmV0d2VlbiBhbiBoZXJlLWRvY3VtZW50IG9wZXJhdG9yIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUKKyAgICAgICAgIyB0b2tlbnMgYXJlIHN0b3JlZCBpbiBzZWxmLl9oZXJlZG9jLnBlbmRpbmdzLiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QKKyAgICAgICAgIyByZWFjaCB0aGUgc2VjdGlvbiBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICNDaGVjayBvcGVyYXRvcnMKKyAgICAgICAgaWYgc2VsZi5fdHlwZT09VEtfT1A6CisgICAgICAgICAgICAjRmFsc2UgcG9zaXRpdmUgYmVjYXVzZSBvZiBwYXJ0aWFsIG9wIG1hdGNoaW5nCisgICAgICAgICAgICBvcCA9IGlzX29wKHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgaWYgbm90IG9wOgorICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19UT0tFTgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjTWFwIHRvIHRoZSBzcGVjaWZpYyBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBvcAorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rva2VuIGluICgnPDwnLCAnPDwtJyk6CisgICAgICAgICAgICAgICAgICAgICNEb25lIGhlcmUgcmF0aGVyIHRoYW4gaW4gX3BhcnNlX29wIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZAorICAgICAgICAgICAgICAgICAgICAjdG8gY2hhbmdlIHRoZSBwYXJzZXIgc3RhdGUgc2luY2Ugd2UgYXJlIHN0aWxsIHdhaXRpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgICN0aGUgaGVyZS1kb2N1bWVudCBuYW1lCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2hlcmVkb2Mub3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTaGVsbFN5bnRheEVycm9yKCJzeW50YXggZXJyb3IgbmVhciB0b2tlbiAnJXMnIiAlIHNlbGYuX3Rva2VuKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5faGVyZWRvYy5vcCBpcyBOb25lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hlcmVkb2Mub3AgPSBzZWxmLl90b2tlbgorICAgICAgICAgICAgICAgIAorICAgICAgICBpZiBzZWxmLl90eXBlPT1US19UT0tFTjogICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICc9JyBpbiBzZWxmLl90b2tlbiBhbmQgbm90IGRlbGltOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rva2VuLnN0YXJ0c3dpdGgoJz0nKToKKyAgICAgICAgICAgICAgICAgICAgI1Rva2VuIGlzIGEgV09SRC4uLiBhIFRPS0VOIHRoYXQgaXMuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmV2ID0gc2VsZi5fdG9rZW5bOnNlbGYuX3Rva2VuLmZpbmQoJz0nKV0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNfbmFtZShwcmV2KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19BU1NJR05NRU5UCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjSnVzdCBhIHRva2VuICh1bnNwZWNpZmllZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzZXJ2ZWQgPSBnZXRfcmVzZXJ2ZWQoc2VsZi5fdG9rZW4pCisgICAgICAgICAgICAgICAgaWYgcmVzZXJ2ZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlc2VydmVkPT0nSW4nIGFuZCBzZWxmLl9mb3JfY291bnQhPTI6CisgICAgICAgICAgICAgICAgICAgICAgICAjU29ycnksIG5vdCBhIHJlc2VydmVkIHdvcmQgYWZ0ZXIgYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc2VydmVkIGluICgnRm9yJywgJ0Nhc2UnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JfY291bnQgPSAwICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbGlmIGFyZV9kaWdpdHMoc2VsZi5fdG9rZW4pIGFuZCBkZWxpbSBpbiAoJzwnLCAnPicpOgorICAgICAgICAgICAgICAgICAgICAjRGV0ZWN0IElPX05VTUJFUgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfSU9OVU1CRVIKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX3Rva2VuPT0nOyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3R5cGUgPSBUS19DT01NQQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fdG9rZW49PScmJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHlwZSA9IFRLX0FNUEVSU0FORAorICAgICAgICBlbGlmIHNlbGYuX3R5cGU9PVRLX0NPTU1FTlQ6CisgICAgICAgICAgICAjQ29tbWVudHMgYXJlIG5vdCBwYXJ0IG9mIHNoIGdyYW1tYXIsIGlnbm9yZSB0aGVtCisgICAgICAgICAgICBzZWxmLl90b2tlbiA9ICcnCisgICAgICAgICAgICBzZWxmLl90eXBlID0gVEtfVE9LRU4KKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIAorICAgICAgICBpZiBzZWxmLl9mb3JfY291bnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjVHJhY2sgdG9rZW4gY291bnQgaW4gJ0ZvcicgZXhwcmVzc2lvbiB0byBkZXRlY3QgJ0luJyByZXNlcnZlZCB3b3Jkcy4KKyAgICAgICAgICAgICNDYW4gb25seSBiZSBpbiB0aGlyZCBwb3NpdGlvbiwgbm8gbmVlZCB0byBnbyBiZXlvbmQKKyAgICAgICAgICAgIHNlbGYuX2Zvcl9jb3VudCArPSAxCisgICAgICAgICAgICBpZiBzZWxmLl9mb3JfY291bnQ9PTM6CisgICAgICAgICAgICAgICAgc2VsZi5fZm9yX2NvdW50ID0gTm9uZQorICAgICAgICAgICAgICAgIAorICAgICAgICBzZWxmLm9uX3Rva2VuKChzZWxmLl90b2tlbiwgc2VsZi5fdHlwZSkpCisgICAgICAgIHNlbGYuX3Rva2VuID0gJycKKyAgICAgICAgc2VsZi5fdHlwZSA9IFRLX1RPS0VOCisgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBkZWYgb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICAgICAgICAgIAorCit0b2tlbnMgPSBbCisgICAgVEtfVE9LRU4sCisjIFRvIHNpbGVuY2UgeWFjYyB1bnVzZWQgdG9rZW4gd2FybmluZ3MKKyMgICAgVEtfQ09NTUVOVCwKKyAgICBUS19ORVdMSU5FLAorICAgIFRLX0lPTlVNQkVSLAorICAgIFRLX0FTU0lHTk1FTlQsCisgICAgVEtfSEVSRU5BTUUsCitdICAgICAgICAgICAgCisKKyNBZGQgc3BlY2lmaWMgb3BlcmF0b3JzCit0b2tlbnMgKz0gX09QRVJBVE9SUy52YWx1ZXMoKQorI0FkZCByZXNlcnZlZCB3b3JkcwordG9rZW5zICs9IF9SRVNFUlZFRFMudmFsdWVzKCkKKyAgICAgICAgICAgIAorY2xhc3MgUExZTGV4ZXIoTGV4ZXIpOgorICAgICIiIkJyaWRnZSBMZXhlciBhbmQgUExZIGxleGVyIGludGVyZmFjZS4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIExleGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3Rva2VucyA9IFtdCisgICAgICAgIHNlbGYuX2N1cnJlbnQgPSAwCisgICAgICAgIHNlbGYubGluZW5vID0gMAorCisgICAgZGVmIG9uX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgdmFsdWUsIHR5cGUgPSB0b2tlbgorCisgICAgICAgIHNlbGYubGluZW5vID0gMAorICAgICAgICB0ID0gbGV4LkxleFRva2VuKCkKKyAgICAgICAgdC52YWx1ZSA9IHZhbHVlCisgICAgICAgIHQudHlwZSA9IHR5cGUKKyAgICAgICAgdC5sZXhlciA9IHNlbGYKKyAgICAgICAgdC5sZXhwb3MgPSAwCisgICAgICAgIHQubGluZW5vID0gMAorICAgICAgICAKKyAgICAgICAgc2VsZi5fdG9rZW5zLmFwcGVuZCh0KQorICAgICAgICAKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiBub3QgYm9vbChzZWxmLl90b2tlbnMpCisgICAgICAgIAorICAgICNQTFkgY29tcGxpYW50IGludGVyZmFjZQorICAgIGRlZiB0b2tlbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudD49bGVuKHNlbGYuX3Rva2Vucyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0ID0gc2VsZi5fdG9rZW5zW3NlbGYuX2N1cnJlbnRdCisgICAgICAgIHNlbGYuX2N1cnJlbnQgKz0gMQorICAgICAgICByZXR1cm4gdCAgICAgIAorICAgICAgICAKKyAgICAgICAgCitkZWYgZ2V0X3Rva2VucyhzKToKKyAgICAiIiJQYXJzZSB0aGUgaW5wdXQgc3RyaW5nIGFuZCByZXR1cm4gYSB0dXBsZSAodG9rZW5zLCB1bnByb2Nlc3NlZCkgd2hlcmUKKyAgICB0b2tlbnMgaXMgYSBsaXN0IG9mIHBhcnNlZCB0b2tlbnMgYW5kIHVucHJvY2Vzc2VkIGlzIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dAorICAgIHN0cmluZyBsZWZ0IHVudG91Y2hlZCBieSB0aGUgbGV4ZXIuCisgICAgIiIiCisgICAgbGV4ZXIgPSBQTFlMZXhlcigpCisgICAgdW50b3VjaGVkID0gbGV4ZXIuYWRkKHMsIFRydWUpIAorICAgIHRva2VucyA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgdG9rZW4gPSBsZXhlci50b2tlbigpCisgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0b2tlbnMuYXBwZW5kKHRva2VuKQorICAgICAgICAKKyAgICB0b2tlbnMgPSBbKHQudmFsdWUsIHQudHlwZSkgZm9yIHQgaW4gdG9rZW5zXQorICAgIHJldHVybiB0b2tlbnMsIHVudG91Y2hlZCAgICAgICAgCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9weXNoL3B5c2h5YWNjLnB5IGIvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoeWFjYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGU4MGFhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcHlzaC9weXNoeWFjYy5weQpAQCAtMCwwICsxLDc3OSBAQAorIyBweXNoeWFjYy5weSAtIFBMWSBncmFtbWFyIGRlZmluaXRpb24gZm9yIHB5c2gKKyMKKyMgQ29weXJpZ2h0IDIwMDcgUGF0cmljayBNZXphcmQKKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisiIiJQTFkgZ3JhbW1hciBmaWxlLgorIiIiCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworCitpbXBvcnQgcHlzaGxleAordG9rZW5zID0gcHlzaGxleC50b2tlbnMKKworZnJvbSBwbHkgaW1wb3J0IHlhY2MKK2ltcG9ydCBzaGVycm9ycworICAgIAorY2xhc3MgSU9SZWRpcmVjdDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3AsIGZpbGVuYW1lLCBpb19udW1iZXI9Tm9uZSk6CisgICAgICAgIHNlbGYub3AgPSBvcAorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5pb19udW1iZXIgPSBpb19udW1iZXIKKyAgICAgICAgCitjbGFzcyBIZXJlRG9jdW1lbnQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wLCBuYW1lLCBjb250ZW50LCBpb19udW1iZXI9Tm9uZSk6CisgICAgICAgIHNlbGYub3AgPSBvcAorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuY29udGVudCA9IGNvbnRlbnQKKyAgICAgICAgc2VsZi5pb19udW1iZXIgPSBpb19udW1iZXIKKworZGVmIG1ha2VfaW9fcmVkaXJlY3QocCk6CisgICAgIiIiTWFrZSBhbiBJT1JlZGlyZWN0IGluc3RhbmNlIGZyb20gdGhlIGlucHV0ICdpb19yZWRpcmVjdCcgcHJvZHVjdGlvbi4iIiIKKyAgICBuYW1lLCBpb19udW1iZXIsIGlvX3RhcmdldCA9IHAKKyAgICBhc3NlcnQgbmFtZT09J2lvX3JlZGlyZWN0JworICAgIAorICAgIGlmIGlvX3RhcmdldFswXT09J2lvX2ZpbGUnOgorICAgICAgICBpb190eXBlLCBpb19vcCwgaW9fZmlsZSA9IGlvX3RhcmdldAorICAgICAgICByZXR1cm4gSU9SZWRpcmVjdChpb19vcCwgaW9fZmlsZSwgaW9fbnVtYmVyKQorICAgIGVsaWYgaW9fdGFyZ2V0WzBdPT0naW9faGVyZSc6CisgICAgICAgIGlvX3R5cGUsIGlvX29wLCBpb19uYW1lLCBpb19jb250ZW50ID0gaW9fdGFyZ2V0CisgICAgICAgIHJldHVybiBIZXJlRG9jdW1lbnQoaW9fb3AsIGlvX25hbWUsIGlvX2NvbnRlbnQsIGlvX251bWJlcikKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJJbnZhbGlkIElPIHJlZGlyZWN0aW9uIHRva2VuICVzIiAlIHJlcHIoaW9fdHlwZSkKKyAgICAgICAgCitjbGFzcyBTaW1wbGVDb21tYW5kOgorICAgICIiIgorICAgIGFzc2lnbnMgY29udGFpbnMgKG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29yZHMsIHJlZGlycywgYXNzaWducyk6CisgICAgICAgIHNlbGYud29yZHMgPSBsaXN0KHdvcmRzKQorICAgICAgICBzZWxmLnJlZGlycyA9IGxpc3QocmVkaXJzKQorICAgICAgICBzZWxmLmFzc2lnbnMgPSBsaXN0KGFzc2lnbnMpCisKK2NsYXNzIFBpcGVsaW5lOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kcywgcmV2ZXJzZV9zdGF0dXM9RmFsc2UpOgorICAgICAgICBzZWxmLmNvbW1hbmRzID0gbGlzdChjb21tYW5kcykKKyAgICAgICAgYXNzZXJ0IHNlbGYuY29tbWFuZHMgICAgI0dyYW1tYXIgZm9yYmlkcyB0aGlzCisgICAgICAgIHNlbGYucmV2ZXJzZV9zdGF0dXMgPSByZXZlcnNlX3N0YXR1cworICAgICAgICAKK2NsYXNzIEFuZE9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcCwgbGVmdCwgcmlnaHQpOgorICAgICAgICBzZWxmLm9wID0gc3RyKG9wKQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIHNlbGYucmlnaHQgPSByaWdodAorICAgICAgICAKK2NsYXNzIEZvckxvb3A6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGl0ZW1zLCBjbWRzKToKKyAgICAgICAgc2VsZi5uYW1lID0gc3RyKG5hbWUpCisgICAgICAgIHNlbGYuaXRlbXMgPSBsaXN0KGl0ZW1zKQorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisgICAgICAgIAorY2xhc3MgV2hpbGVMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kaXRpb24sIGNtZHMpOgorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGxpc3QoY29uZGl0aW9uKQorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisgICAgICAgIAorY2xhc3MgVW50aWxMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25kaXRpb24sIGNtZHMpOgorICAgICAgICBzZWxmLmNvbmRpdGlvbiA9IGxpc3QoY29uZGl0aW9uKQorICAgICAgICBzZWxmLmNtZHMgPSBsaXN0KGNtZHMpCisKK2NsYXNzIEZ1bkRlZjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYm9keSk6CisgICAgICAgIHNlbGYubmFtZSA9IHN0cihuYW1lKQorICAgICAgICBzZWxmLmJvZHkgPSBib2R5CisgICAgICAgIAorY2xhc3MgQnJhY2VHcm91cDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kcyk6CisgICAgICAgIHNlbGYuY21kcyA9IGxpc3QoY21kcykKKyAgICAgICAgCitjbGFzcyBJZkNvbmQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmQsIGlmX2NtZHMsIGVsc2VfY21kcyk6CisgICAgICAgIHNlbGYuY29uZCA9IGxpc3QoY29uZCkKKyAgICAgICAgc2VsZi5pZl9jbWRzID0gaWZfY21kcworICAgICAgICBzZWxmLmVsc2VfY21kcyA9IGVsc2VfY21kcworCitjbGFzcyBDYXNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBpdGVtcyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zCisgICAgICAgIAorY2xhc3MgU3ViU2hlbGw6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMpOgorICAgICAgICBzZWxmLmNtZHMgPSBjbWRzCisKK2NsYXNzIFJlZGlyZWN0TGlzdDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY21kLCByZWRpcnMpOgorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLnJlZGlycyA9IGxpc3QocmVkaXJzKQorICAgICAgICAKK2RlZiBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgcHR5cGUpOgorICAgICIiInByb2R1Y3Rpb25zIG11c3QgYmUgYSBsaXN0IG9mIHByb2R1Y3Rpb24gdHVwbGVzIGxpa2UgKG5hbWUsIG9iaikgd2hlcmUKKyAgICBuYW1lIGlzIHRoZSBwcm9kdWN0aW9uIHN0cmluZyBpZGVudGlmaWVyLgorICAgIFJldHVybiB0aGUgZmlyc3QgcHJvZHVjdGlvbiBuYW1lZCAncHR5cGUnLiBSYWlzZSBLZXlFcnJvciBpZiBOb25lIGNhbiBiZQorICAgIGZvdW5kLgorICAgICIiIgorICAgIGZvciBwcm9kdWN0aW9uIGluIHByb2R1Y3Rpb25zOgorICAgICAgICBpZiBwcm9kdWN0aW9uIGlzIG5vdCBOb25lIGFuZCBwcm9kdWN0aW9uWzBdPT1wdHlwZToKKyAgICAgICAgICAgIHJldHVybiBwcm9kdWN0aW9uCisgICAgcmFpc2UgS2V5RXJyb3IocHR5cGUpCisgICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQTFkgZ3JhbW1hciBkZWZpbml0aW9uCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgcF9tdWx0aXBsZV9jb21tYW5kcyhwKToKKyAgICAiIiJtdWx0aXBsZV9jb21tYW5kcyA6IG5ld2xpbmVfc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbXBsZXRlX2NvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IG11bHRpcGxlX2NvbW1hbmRzIGNvbXBsZXRlX2NvbW1hbmQiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIGlmIHBbMV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwWzBdID0gW3BbMV1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwWzBdID0gW10KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXSArIFtwWzJdXQorCitkZWYgcF9jb21wbGV0ZV9jb21tYW5kKHApOgorICAgICIiImNvbXBsZXRlX2NvbW1hbmQgOiBsaXN0IHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgfCBsaXN0IiIiCisgICAgaWYgbGVuKHApPT0zIGFuZCBwWzJdIGFuZCBwWzJdWzFdID09ICcmJzoKKyAgICAgICAgcFswXSA9ICgnYXN5bmMnLCBwWzFdKQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdCisgICAgICAgICAgICAgICAgIAorZGVmIHBfbGlzdChwKToKKyAgICAiIiJsaXN0IDogbGlzdCBzZXBhcmF0b3Jfb3AgYW5kX29yCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIGFuZF9vciIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFtwWzFdXQorICAgIGVsc2U6CisgICAgICAgICNpZiBwWzJdIT0nOyc6CisgICAgICAgICMgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQU5ELU9SIGxpc3QgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBpcyBub3QgaW1wbGVtZW50ZWQnKQorICAgICAgICBwWzBdID0gcFsxXSArIFtwWzNdXQorICAgICAgIAorZGVmIHBfYW5kX29yKHApOgorICAgICIiImFuZF9vciA6IHBpcGVsaW5lCisgICAgICAgICAgICAgIHwgYW5kX29yIEFORF9JRiBsaW5lYnJlYWsgcGlwZWxpbmUKKyAgICAgICAgICAgICAgfCBhbmRfb3IgT1JfSUYgIGxpbmVicmVhayBwaXBlbGluZSIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IHBbMV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gKCdhbmRfb3InLCBBbmRPcihwWzJdLCBwWzFdLCBwWzRdKSkKKyAgICAgICAgCitkZWYgcF9tYXliZV9iYW5nX3dvcmQocCk6CisgICAgIiIibWF5YmVfYmFuZ193b3JkIDogQmFuZyIiIgorICAgIHBbMF0gPSAoJ21heWJlX2Jhbmdfd29yZCcsIHBbMV0pCisgICAgICAgICAgICAKK2RlZiBwX3BpcGVsaW5lKHApOgorICAgICIiInBpcGVsaW5lIDogcGlwZV9zZXF1ZW5jZQorICAgICAgICAgICAgICAgIHwgYmFuZ193b3JkIHBpcGVfc2VxdWVuY2UiIiIKKyAgICBpZiBsZW4ocCk9PTM6CisgICAgICAgIHBbMF0gPSAoJ3BpcGVsaW5lJywgUGlwZWxpbmUocFsyXVsxOl0sIFRydWUpKQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSAoJ3BpcGVsaW5lJywgUGlwZWxpbmUocFsxXVsxOl0pKQorCitkZWYgcF9waXBlX3NlcXVlbmNlKHApOgorICAgICIiInBpcGVfc2VxdWVuY2UgOiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICB8IHBpcGVfc2VxdWVuY2UgUElQRSBsaW5lYnJlYWsgY29tbWFuZCIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFsncGlwZV9zZXF1ZW5jZScsIHBbMV1dCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFs0XV0KKworZGVmIHBfY29tbWFuZChwKToKKyAgICAiIiJjb21tYW5kIDogc2ltcGxlX2NvbW1hbmQKKyAgICAgICAgICAgICAgIHwgY29tcG91bmRfY29tbWFuZAorICAgICAgICAgICAgICAgfCBjb21wb3VuZF9jb21tYW5kIHJlZGlyZWN0X2xpc3QKKyAgICAgICAgICAgICAgIHwgZnVuY3Rpb25fZGVmaW5pdGlvbiIiIgorICAgICAgICAKKyAgICBpZiBwWzFdWzBdIGluICggJ3NpbXBsZV9jb21tYW5kJywgCisgICAgICAgICAgICAgICAgICAgICdmb3JfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ3doaWxlX2NsYXVzZScsCisgICAgICAgICAgICAgICAgICAgICd1bnRpbF9jbGF1c2UnLAorICAgICAgICAgICAgICAgICAgICAnY2FzZV9jbGF1c2UnLAorICAgICAgICAgICAgICAgICAgICAnaWZfY2xhdXNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uX2RlZmluaXRpb24nLAorICAgICAgICAgICAgICAgICAgICAnc3Vic2hlbGwnLAorICAgICAgICAgICAgICAgICAgICAnYnJhY2VfZ3JvdXAnLCk6CisgICAgICAgIGlmIGxlbihwKSA9PSAyOgorICAgICAgICAgICAgcFswXSA9IHBbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBbMF0gPSAoJ3JlZGlyZWN0X2xpc3QnLCBSZWRpcmVjdExpc3QocFsxXSwgcFsyXVsxOl0pKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyVzIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkJyAlIHJlcHIocFsxXVswXSkpCisKK2RlZiBwX2NvbXBvdW5kX2NvbW1hbmQocCk6CisgICAgIiIiY29tcG91bmRfY29tbWFuZCA6IGJyYWNlX2dyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICB8IHN1YnNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcl9jbGF1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FzZV9jbGF1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaWZfY2xhdXNlCisgICAgICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX2NsYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgfCB1bnRpbF9jbGF1c2UiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9zdWJzaGVsbChwKToKKyAgICAiIiJzdWJzaGVsbCA6IExQQVJFTlMgY29tcG91bmRfbGlzdCBSUEFSRU5TIiIiCisgICAgcFswXSA9ICgnc3Vic2hlbGwnLCBTdWJTaGVsbChwWzJdWzE6XSkpCisKK2RlZiBwX2NvbXBvdW5kX2xpc3QocCk6CisgICAgIiIiY29tcG91bmRfbGlzdCA6IHRlcm0KKyAgICAgICAgICAgICAgICAgICAgIHwgbmV3bGluZV9saXN0IHRlcm0KKyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHRlcm0gc2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCB0ZXJtIHNlcGFyYXRvciIiIgorICAgIHByb2R1Y3Rpb25zID0gcFsxOl0gICAgICAgICAgIAorICAgIHRyeToKKyAgICAgICAgc2VwID0gZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsICdzZXBhcmF0b3InKQorICAgICAgICBpZiBzZXBbMV0hPSc7JzoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHRlcm0gPSBnZXRfcHJvZHVjdGlvbihwcm9kdWN0aW9ucywgJ3Rlcm0nKQorICAgIHBbMF0gPSBbJ2NvbXBvdW5kX2xpc3QnXSArIHRlcm1bMTpdCisKK2RlZiBwX3Rlcm0ocCk6CisgICAgIiIidGVybSA6IHRlcm0gc2VwYXJhdG9yIGFuZF9vcgorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBhbmRfb3IiIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ3Rlcm0nLCBwWzFdXQorICAgIGVsc2U6CisgICAgICAgIGlmIHBbMl0gaXMgbm90IE5vbmUgYW5kIHBbMl1bMV0gPT0gJyYnOgorICAgICAgICAgICAgcFswXSA9IFsndGVybScsICgnYXN5bmMnLCBwWzFdWzE6XSldICsgW3BbM11dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwWzBdID0gcFsxXSArIFtwWzNdXQorICAgICAgICAgICAgCitkZWYgcF9tYXliZV9mb3Jfd29yZChwKToKKyAgICAjIFJlYXJyYW5nZSAnRm9yJyBwcmlvcml0eSB3cnQgVE9LRU4uIFNlZSBwX2Zvcl93b3JkCisgICAgIiIibWF5YmVfZm9yX3dvcmQgOiBGb3IiIiIKKyAgICBwWzBdID0gKCdtYXliZV9mb3Jfd29yZCcsIHBbMV0pCisKK2RlZiBwX2Zvcl9jbGF1c2UocCk6CisgICAgIiIiZm9yX2NsYXVzZSA6IGZvcl93b3JkIG5hbWUgbGluZWJyZWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2dyb3VwCisgICAgICAgICAgICAgICAgICB8IGZvcl93b3JkIG5hbWUgbGluZWJyZWFrIGluICAgICAgICAgIHNlcXVlbnRpYWxfc2VwIGRvX2dyb3VwCisgICAgICAgICAgICAgICAgICB8IGZvcl93b3JkIG5hbWUgbGluZWJyZWFrIGluIHdvcmRsaXN0IHNlcXVlbnRpYWxfc2VwIGRvX2dyb3VwIiIiCisgICAgcHJvZHVjdGlvbnMgPSBwWzE6XQorICAgIGRvX2dyb3VwID0gZ2V0X3Byb2R1Y3Rpb24ocHJvZHVjdGlvbnMsICdkb19ncm91cCcpCisgICAgdHJ5OgorICAgICAgICBpdGVtcyA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnaW4nKVsxOl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJyJpbiIgb21pc3Npb24gaXMgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgCisgICAgdHJ5OgorICAgICAgICBpdGVtcyA9IGdldF9wcm9kdWN0aW9uKHByb2R1Y3Rpb25zLCAnd29yZGxpc3QnKVsxOl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgCisgICAgbmFtZSA9IHBbMl0KKyAgICBwWzBdID0gKCdmb3JfY2xhdXNlJywgRm9yTG9vcChuYW1lLCBpdGVtcywgZG9fZ3JvdXBbMTpdKSkKKworZGVmIHBfbmFtZShwKToKKyAgICAiIiJuYW1lIDogdG9rZW4iIiIgI1dhcyBOQU1FIGluc3RlYWQgb2YgdG9rZW4KKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9pbihwKToKKyAgICAiIiJpbiA6IEluIiIiCisgICAgcFswXSA9ICgnaW4nLCBwWzFdKQorCitkZWYgcF93b3JkbGlzdChwKToKKyAgICAiIiJ3b3JkbGlzdCA6IHdvcmRsaXN0IHRva2VuCisgICAgICAgICAgICAgICAgfCAgICAgICAgICB0b2tlbiIiIgorICAgIGlmIGxlbihwKT09MjoKKyAgICAgICAgcFswXSA9IFsnd29yZGxpc3QnLCAoJ1RPS0VOJywgcFsxXSldCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbKCdUT0tFTicsIHBbMl0pXQorCitkZWYgcF9jYXNlX2NsYXVzZShwKToKKyAgICAiIiJjYXNlX2NsYXVzZSA6IENhc2UgdG9rZW4gbGluZWJyZWFrIGluIGxpbmVicmVhayBjYXNlX2xpc3QgICAgRXNhYworICAgICAgICAgICAgICAgICAgIHwgQ2FzZSB0b2tlbiBsaW5lYnJlYWsgaW4gbGluZWJyZWFrIGNhc2VfbGlzdF9ucyBFc2FjCisgICAgICAgICAgICAgICAgICAgfCBDYXNlIHRva2VuIGxpbmVicmVhayBpbiBsaW5lYnJlYWsgICAgICAgICAgICAgIEVzYWMiIiIKKyAgICBpZiBsZW4ocCkgPCA4OgorICAgICAgICBpdGVtcyA9IFtdCisgICAgZWxzZToKKyAgICAgICAgaXRlbXMgPSBwWzZdWzE6XQorICAgIG5hbWUgPSBwWzJdCisgICAgcFswXSA9ICgnY2FzZV9jbGF1c2UnLCBDYXNlKG5hbWUsIFtjWzFdIGZvciBjIGluIGl0ZW1zXSkpCisgICAgICAgCitkZWYgcF9jYXNlX2xpc3RfbnMocCk6CisgICAgIiIiY2FzZV9saXN0X25zIDogY2FzZV9saXN0IGNhc2VfaXRlbV9ucworICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBjYXNlX2l0ZW1fbnMiIiIKKyAgICBwX2Nhc2VfbGlzdChwKQorICAgICAgCitkZWYgcF9jYXNlX2xpc3QocCk6CisgICAgIiIiY2FzZV9saXN0IDogY2FzZV9saXN0IGNhc2VfaXRlbQorICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBjYXNlX2l0ZW0iIiIKKyAgICBpZiBsZW4ocCk9PTI6CisgICAgICAgIHBbMF0gPSBbJ2Nhc2VfbGlzdCcsIHBbMV1dCisgICAgZWxzZToKKyAgICAgICAgcFswXSA9IHBbMV0gKyBbcFsyXV0KKyAgICAgICAgCitkZWYgcF9jYXNlX2l0ZW1fbnMocCk6CisgICAgIiIiY2FzZV9pdGVtX25zIDogICAgICAgICBwYXR0ZXJuIFJQQVJFTlMgICAgICAgICAgICAgICBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHBhdHRlcm4gUlBBUkVOUyBjb21wb3VuZF9saXN0IGxpbmVicmVhaworICAgICAgICAgICAgICAgICAgICB8IExQQVJFTlMgcGF0dGVybiBSUEFSRU5TICAgICAgICAgICAgICAgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgICAgIHwgTFBBUkVOUyBwYXR0ZXJuIFJQQVJFTlMgY29tcG91bmRfbGlzdCBsaW5lYnJlYWsiIiIKKyAgICBwX2Nhc2VfaXRlbShwKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Nhc2VfaXRlbShwKToKKyAgICAiIiJjYXNlX2l0ZW0gOiAgICAgICAgIHBhdHRlcm4gUlBBUkVOUyBsaW5lYnJlYWsgICAgIERTRU1JIGxpbmVicmVhaworICAgICAgICAgICAgICAgICB8ICAgICAgICAgcGF0dGVybiBSUEFSRU5TIGNvbXBvdW5kX2xpc3QgRFNFTUkgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgIHwgTFBBUkVOUyBwYXR0ZXJuIFJQQVJFTlMgbGluZWJyZWFrICAgICBEU0VNSSBsaW5lYnJlYWsKKyAgICAgICAgICAgICAgICAgfCBMUEFSRU5TIHBhdHRlcm4gUlBBUkVOUyBjb21wb3VuZF9saXN0IERTRU1JIGxpbmVicmVhayIiIgorICAgIGlmIGxlbihwKSA8IDc6CisgICAgICAgIG5hbWUgPSBwWzFdWzE6XQorICAgIGVsc2U6CisgICAgICAgIG5hbWUgPSBwWzJdWzE6XQorCisgICAgdHJ5OgorICAgICAgICBjbWRzID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICJjb21wb3VuZF9saXN0IilbMTpdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBjbWRzID0gW10KKworICAgIHBbMF0gPSAoJ2Nhc2VfaXRlbScsIChuYW1lLCBjbWRzKSkKKyAgICAgICAgICAgICAgICAgCitkZWYgcF9wYXR0ZXJuKHApOgorICAgICIiInBhdHRlcm4gOiAgICAgICAgICAgICAgdG9rZW4KKyAgICAgICAgICAgICAgIHwgcGF0dGVybiBQSVBFIHRva2VuIiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICBwWzBdID0gWydwYXR0ZXJuJywgKCdUT0tFTicsIHBbMV0pXQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSBwWzFdICsgWygnVE9LRU4nLCBwWzJdKV0KKworZGVmIHBfbWF5YmVfaWZfd29yZChwKToKKyAgICAjIFJlYXJyYW5nZSAnSWYnIHByaW9yaXR5IHdydCBUT0tFTi4gU2VlIHBfaWZfd29yZAorICAgICIiIm1heWJlX2lmX3dvcmQgOiBJZiIiIgorICAgIHBbMF0gPSAoJ21heWJlX2lmX3dvcmQnLCBwWzFdKQorCitkZWYgcF9tYXliZV90aGVuX3dvcmQocCk6CisgICAgIyBSZWFycmFuZ2UgJ1RoZW4nIHByaW9yaXR5IHdydCBUT0tFTi4gU2VlIHBfdGhlbl93b3JkCisgICAgIiIibWF5YmVfdGhlbl93b3JkIDogVGhlbiIiIgorICAgIHBbMF0gPSAoJ21heWJlX3RoZW5fd29yZCcsIHBbMV0pCisgICAgICAgICAgICAgICAgIAorZGVmIHBfaWZfY2xhdXNlKHApOgorICAgICIiImlmX2NsYXVzZSA6IGlmX3dvcmQgY29tcG91bmRfbGlzdCB0aGVuX3dvcmQgY29tcG91bmRfbGlzdCBlbHNlX3BhcnQgRmkKKyAgICAgICAgICAgICAgICAgfCBpZl93b3JkIGNvbXBvdW5kX2xpc3QgdGhlbl93b3JkIGNvbXBvdW5kX2xpc3QgICAgICAgICAgIEZpIiIiCisgICAgZWxzZV9wYXJ0ID0gW10KKyAgICBpZiBsZW4ocCk9PTc6CisgICAgICAgIGVsc2VfcGFydCA9IHBbNV0KKyAgICBwWzBdID0gKCdpZl9jbGF1c2UnLCBJZkNvbmQocFsyXVsxOl0sIHBbNF1bMTpdLCBlbHNlX3BhcnQpKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Vsc2VfcGFydChwKToKKyAgICAiIiJlbHNlX3BhcnQgOiBFbGlmIGNvbXBvdW5kX2xpc3QgdGhlbl93b3JkIGNvbXBvdW5kX2xpc3QgZWxzZV9wYXJ0CisgICAgICAgICAgICAgICAgIHwgRWxpZiBjb21wb3VuZF9saXN0IHRoZW5fd29yZCBjb21wb3VuZF9saXN0CisgICAgICAgICAgICAgICAgIHwgRWxzZSBjb21wb3VuZF9saXN0IiIiCisgICAgaWYgbGVuKHApPT0zOgorICAgICAgICBwWzBdID0gcFsyXVsxOl0KKyAgICBlbHNlOgorICAgICAgICBlbHNlX3BhcnQgPSBbXQorICAgICAgICBpZiBsZW4ocCk9PTY6CisgICAgICAgICAgICBlbHNlX3BhcnQgPSBwWzVdCisgICAgICAgIHBbMF0gPSAoJ2VsaWYnLCBJZkNvbmQocFsyXVsxOl0sIHBbNF1bMTpdLCBlbHNlX3BhcnQpKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX3doaWxlX2NsYXVzZShwKToKKyAgICAiIiJ3aGlsZV9jbGF1c2UgOiBXaGlsZSBjb21wb3VuZF9saXN0IGRvX2dyb3VwIiIiCisgICAgcFswXSA9ICgnd2hpbGVfY2xhdXNlJywgV2hpbGVMb29wKHBbMl1bMTpdLCBwWzNdWzE6XSkpCisgICAgCitkZWYgcF9tYXliZV91bnRpbF93b3JkKHApOgorICAgICMgUmVhcnJhbmdlICdVbnRpbCcgcHJpb3JpdHkgd3J0IFRPS0VOLiBTZWUgcF91bnRpbF93b3JkCisgICAgIiIibWF5YmVfdW50aWxfd29yZCA6IFVudGlsIiIiCisgICAgcFswXSA9ICgnbWF5YmVfdW50aWxfd29yZCcsIHBbMV0pCisgICAgICAgICAgIAorZGVmIHBfdW50aWxfY2xhdXNlKHApOgorICAgICIiInVudGlsX2NsYXVzZSA6IHVudGlsX3dvcmQgY29tcG91bmRfbGlzdCBkb19ncm91cCIiIgorICAgIHBbMF0gPSAoJ3VudGlsX2NsYXVzZScsIFVudGlsTG9vcChwWzJdWzE6XSwgcFszXVsxOl0pKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX2Z1bmN0aW9uX2RlZmluaXRpb24ocCk6CisgICAgIiIiZnVuY3Rpb25fZGVmaW5pdGlvbiA6IGZuYW1lIExQQVJFTlMgUlBBUkVOUyBsaW5lYnJlYWsgZnVuY3Rpb25fYm9keSIiIgorICAgIHBbMF0gPSAoJ2Z1bmN0aW9uX2RlZmluaXRpb24nLCBGdW5EZWYocFsxXSwgcFs1XSkpCisgICAgICAgICAgICAgICAgIAorZGVmIHBfZnVuY3Rpb25fYm9keShwKToKKyAgICAiIiJmdW5jdGlvbl9ib2R5IDogY29tcG91bmRfY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgfCBjb21wb3VuZF9jb21tYW5kIHJlZGlyZWN0X2xpc3QiIiIKKyAgICBpZiBsZW4ocCkhPTI6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Z1bmN0aW9ucyByZWRpcmVjdGlvbnMgbGlzdHMgYXJlIG5vdCBpbXBsZW1lbnRlZCcpICAgIAorICAgIHBbMF0gPSBwWzFdICAgIAorCitkZWYgcF9mbmFtZShwKToKKyAgICAiIiJmbmFtZSA6IFRPS0VOIiIiICNXYXMgTkFNRSBpbnN0ZWFkIG9mIHRva2VuCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfYnJhY2VfZ3JvdXAocCk6CisgICAgIiIiYnJhY2VfZ3JvdXAgOiBMYnJhY2UgY29tcG91bmRfbGlzdCBSYnJhY2UiIiIKKyAgICBwWzBdID0gKCdicmFjZV9ncm91cCcsIEJyYWNlR3JvdXAocFsyXVsxOl0pKQorCitkZWYgcF9tYXliZV9kb25lX3dvcmQocCk6CisgICAgI1NlZSBwX2Fzc2lnbm1lbnRfd29yZCBmb3IgZGV0YWlscy4KKyAgICAiIiJtYXliZV9kb25lX3dvcmQgOiBEb25lIiIiCisgICAgcFswXSA9ICgnbWF5YmVfZG9uZV93b3JkJywgcFsxXSkKKworZGVmIHBfbWF5YmVfZG9fd29yZChwKToKKyAgICAiIiJtYXliZV9kb193b3JkIDogRG8iIiIKKyAgICBwWzBdID0gKCdtYXliZV9kb193b3JkJywgcFsxXSkKKworZGVmIHBfZG9fZ3JvdXAocCk6CisgICAgIiIiZG9fZ3JvdXAgOiBkb193b3JkIGNvbXBvdW5kX2xpc3QgZG9uZV93b3JkIiIiCisgICAgI0RvIGdyb3VwIGNvbnRhaW5zIGEgbGlzdCBvZiBBbmRPcgorICAgIHBbMF0gPSBbJ2RvX2dyb3VwJ10gKyBwWzJdWzE6XQorCitkZWYgcF9zaW1wbGVfY29tbWFuZChwKToKKyAgICAiIiJzaW1wbGVfY29tbWFuZCA6IGNtZF9wcmVmaXggY21kX3dvcmQgY21kX3N1ZmZpeAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX3ByZWZpeCBjbWRfd29yZAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX3ByZWZpeAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX25hbWUgY21kX3N1ZmZpeAorICAgICAgICAgICAgICAgICAgICAgIHwgY21kX25hbWUiIiIKKyAgICB3b3JkcywgcmVkaXJzLCBhc3NpZ25zID0gW10sIFtdLCBbXQorICAgIGZvciBlIGluIHBbMTpdOgorICAgICAgICBuYW1lID0gZVswXQorICAgICAgICBpZiBuYW1lIGluICgnY21kX3ByZWZpeCcsICdjbWRfc3VmZml4Jyk6CisgICAgICAgICAgICBmb3Igc3ViZSBpbiBlWzE6XToKKyAgICAgICAgICAgICAgICBzdWJuYW1lID0gc3ViZVswXQorICAgICAgICAgICAgICAgIGlmIHN1Ym5hbWU9PSdpb19yZWRpcmVjdCc6CisgICAgICAgICAgICAgICAgICAgIHJlZGlycy5hcHBlbmQobWFrZV9pb19yZWRpcmVjdChzdWJlKSkKKyAgICAgICAgICAgICAgICBlbGlmIHN1Ym5hbWU9PSdBU1NJR05NRU5UX1dPUkQnOgorICAgICAgICAgICAgICAgICAgICBhc3NpZ25zLmFwcGVuZChzdWJlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdvcmRzLmFwcGVuZChzdWJlKQorICAgICAgICBlbGlmIG5hbWUgaW4gKCdjbWRfd29yZCcsICdjbWRfbmFtZScpOgorICAgICAgICAgICAgd29yZHMuYXBwZW5kKGUpCisgICAgICAgICAgICAKKyAgICBjbWQgPSBTaW1wbGVDb21tYW5kKHdvcmRzLCByZWRpcnMsIGFzc2lnbnMpCisgICAgcFswXSA9ICgnc2ltcGxlX2NvbW1hbmQnLCBjbWQpCisKK2RlZiBwX2NtZF9uYW1lKHApOgorICAgICIiImNtZF9uYW1lIDogVE9LRU4iIiIKKyAgICBwWzBdID0gKCdjbWRfbmFtZScsIHBbMV0pCisgICAgCitkZWYgcF9jbWRfd29yZChwKToKKyAgICAiIiJjbWRfd29yZCA6IHRva2VuIiIiCisgICAgcFswXSA9ICgnY21kX3dvcmQnLCBwWzFdKQorCitkZWYgcF9tYXliZV9hc3NpZ25tZW50X3dvcmQocCk6CisgICAgI1NlZSBwX2Fzc2lnbm1lbnRfd29yZCBmb3IgZGV0YWlscy4KKyAgICAiIiJtYXliZV9hc3NpZ25tZW50X3dvcmQgOiBBU1NJR05NRU5UX1dPUkQiIiIKKyAgICBwWzBdID0gKCdtYXliZV9hc3NpZ25tZW50X3dvcmQnLCBwWzFdKQorICAgIAorZGVmIHBfY21kX3ByZWZpeChwKToKKyAgICAiIiJjbWRfcHJlZml4IDogICAgICAgICAgICBpb19yZWRpcmVjdAorICAgICAgICAgICAgICAgICAgfCBjbWRfcHJlZml4IGlvX3JlZGlyZWN0CisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgYXNzaWdubWVudF93b3JkCisgICAgICAgICAgICAgICAgICB8IGNtZF9wcmVmaXggYXNzaWdubWVudF93b3JkIiIiCisgICAgdHJ5OgorICAgICAgICBwcmVmaXggPSBnZXRfcHJvZHVjdGlvbihwWzE6XSwgJ2NtZF9wcmVmaXgnKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJlZml4ID0gWydjbWRfcHJlZml4J10KKyAgICAgICAgCisgICAgdHJ5OgorICAgICAgICB2YWx1ZSA9IGdldF9wcm9kdWN0aW9uKHBbMTpdLCAnYXNzaWdubWVudF93b3JkJylbMV0KKyAgICAgICAgdmFsdWUgPSAoJ0FTU0lHTk1FTlRfV09SRCcsIHZhbHVlLnNwbGl0KCc9JywgMSkpCisgICAgZXhjZXB0IEtleUVycm9yOiAgICAgICAgCisgICAgICAgIHZhbHVlID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICdpb19yZWRpcmVjdCcpCisgICAgcFswXSA9IHByZWZpeCArIFt2YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2RlZiBwX2NtZF9zdWZmaXgocCk6CisgICAgIiIiY21kX3N1ZmZpeCAgIDogICAgICAgICAgICBpb19yZWRpcmVjdAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHRva2VuCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCB0b2tlbgorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfZm9yX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2Zvcl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV9kb25lX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2RvbmVfd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfZG9fd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfZG9fd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfdW50aWxfd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfdW50aWxfd29yZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgbWF5YmVfYXNzaWdubWVudF93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgY21kX3N1ZmZpeCBtYXliZV9hc3NpZ25tZW50X3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX2lmX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2lmX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIG1heWJlX3RoZW5fd29yZAorICAgICAgICAgICAgICAgICAgICB8IGNtZF9zdWZmaXggbWF5YmVfdGhlbl93b3JkCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICBtYXliZV9iYW5nX3dvcmQKKyAgICAgICAgICAgICAgICAgICAgfCBjbWRfc3VmZml4IG1heWJlX2Jhbmdfd29yZCIiIgorICAgIHRyeToKKyAgICAgICAgc3VmZml4ID0gZ2V0X3Byb2R1Y3Rpb24ocFsxOl0sICdjbWRfc3VmZml4JykKKyAgICAgICAgdG9rZW4gPSBwWzJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBzdWZmaXggPSBbJ2NtZF9zdWZmaXgnXQorICAgICAgICB0b2tlbiA9IHBbMV0KKyAgICAgICAgCisgICAgaWYgaXNpbnN0YW5jZSh0b2tlbiwgdHVwbGUpOgorICAgICAgICBpZiB0b2tlblswXT09J2lvX3JlZGlyZWN0JzoKKyAgICAgICAgICAgIHBbMF0gPSBzdWZmaXggKyBbdG9rZW5dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjQ29udmVydCBtYXliZV8qICB0byBUT0tFTiBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIHBbMF0gPSBzdWZmaXggKyBbKCdUT0tFTicsIHRva2VuWzFdKV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gc3VmZml4ICsgWygnVE9LRU4nLCB0b2tlbildCisgICAgICAgICAgICAgICAgIAorZGVmIHBfcmVkaXJlY3RfbGlzdChwKToKKyAgICAiIiJyZWRpcmVjdF9saXN0IDogaW9fcmVkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgIHwgcmVkaXJlY3RfbGlzdCBpb19yZWRpcmVjdCIiIgorICAgIGlmIGxlbihwKSA9PSAyOgorICAgICAgICBwWzBdID0gWydyZWRpcmVjdF9saXN0JywgbWFrZV9pb19yZWRpcmVjdChwWzFdKV0KKyAgICBlbHNlOgorICAgICAgICBwWzBdID0gcFsxXSArIFttYWtlX2lvX3JlZGlyZWN0KHBbMl0pXQorICAgIAorZGVmIHBfaW9fcmVkaXJlY3QocCk6CisgICAgIiIiaW9fcmVkaXJlY3QgOiAgICAgICAgICAgaW9fZmlsZQorICAgICAgICAgICAgICAgICAgIHwgSU9fTlVNQkVSIGlvX2ZpbGUKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICBpb19oZXJlCisgICAgICAgICAgICAgICAgICAgfCBJT19OVU1CRVIgaW9faGVyZSIiIgorICAgIGlmIGxlbihwKT09MzoKKyAgICAgICAgcFswXSA9ICgnaW9fcmVkaXJlY3QnLCBwWzFdLCBwWzJdKQorICAgIGVsc2U6CisgICAgICAgIHBbMF0gPSAoJ2lvX3JlZGlyZWN0JywgTm9uZSwgcFsxXSkKKyAgICAKK2RlZiBwX2lvX2ZpbGUocCk6CisgICAgI1JldHVybiB0aGUgdHVwbGUgKG9wZXJhdG9yLCBmaWxlbmFtZSkKKyAgICAiIiJpb19maWxlIDogTEVTUyAgICAgIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IExFU1NBTkQgICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBHUkVBVEVSICAgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgR1JFQVRBTkQgIGZpbGVuYW1lCisgICAgICAgICAgICAgICB8IERHUkVBVCAgICBmaWxlbmFtZQorICAgICAgICAgICAgICAgfCBMRVNTR1JFQVQgZmlsZW5hbWUKKyAgICAgICAgICAgICAgIHwgQ0xPQkJFUiAgIGZpbGVuYW1lIiIiCisgICAgI0V4dHJhY3QgdGhlIGZpbGVuYW1lIGZyb20gdGhlIGZpbGUKKyAgICBwWzBdID0gKCdpb19maWxlJywgcFsxXSwgcFsyXVsxXSkKKworZGVmIHBfZmlsZW5hbWUocCk6CisgICAgI1JldHVybiB0aGUgZmlsZW5hbWUKKyAgICAiIiJmaWxlbmFtZSA6IFRPS0VOIiIiCisgICAgcFswXSA9ICgnZmlsZW5hbWUnLCBwWzFdKQorICAgICAgICAKK2RlZiBwX2lvX2hlcmUocCk6CisgICAgIiIiaW9faGVyZSA6IERMRVNTIGhlcmVfZW5kCisgICAgICAgICAgICAgICB8IERMRVNTREFTSCBoZXJlX2VuZCIiIgorICAgIHBbMF0gPSAoJ2lvX2hlcmUnLCBwWzFdLCBwWzJdWzFdLCBwWzJdWzJdKQorCitkZWYgcF9oZXJlX2VuZChwKToKKyAgICAiIiJoZXJlX2VuZCA6IEhFUkVOQU1FIFRPS0VOIiIiCisgICAgcFswXSA9ICgnaGVyZV9kb2N1bWVudCcsIHBbMV0sIHBbMl0pCisgICAgCitkZWYgcF9uZXdsaW5lX3NlcXVlbmNlKHApOgorICAgICMgTm90aGluZyBpbiB0aGUgZ3JhbW1hciBjYW4gaGFuZGxlIGxlYWRpbmcgTkVXTElORSBwcm9kdWN0aW9ucywgc28gYWRkCisgICAgIyB0aGlzIG9uZSB3aXRoIHRoZSBsb3dlc3QgcG9zc2libGUgcHJpb3JpdHkgcmVsYXRpdmVseSB0byBuZXdsaW5lX2xpc3QuCisgICAgIiIibmV3bGluZV9zZXF1ZW5jZSA6IG5ld2xpbmVfbGlzdCIiIgorICAgIHBbMF0gPSBOb25lCisgICAgCitkZWYgcF9uZXdsaW5lX2xpc3QocCk6CisgICAgIiIibmV3bGluZV9saXN0IDogTkVXTElORQorICAgICAgICAgICAgICAgICAgICB8IG5ld2xpbmVfbGlzdCBORVdMSU5FIiIiCisgICAgcFswXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgCitkZWYgcF9saW5lYnJlYWsocCk6CisgICAgIiIibGluZWJyZWFrIDogbmV3bGluZV9saXN0CisgICAgICAgICAgICAgICAgIHwgZW1wdHkiIiIKKyAgICBwWzBdID0gTm9uZQorCitkZWYgcF9zZXBhcmF0b3Jfb3AocCk6ICAgICAgICAgICAgICAgICAKKyAgICAiIiJzZXBhcmF0b3Jfb3AgOiBDT01NQQorICAgICAgICAgICAgICAgICAgICB8IEFNUCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX3NlcGFyYXRvcihwKToKKyAgICAiIiJzZXBhcmF0b3IgOiBzZXBhcmF0b3Jfb3AgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgIHwgbmV3bGluZV9saXN0IiIiCisgICAgaWYgbGVuKHApPT0yOgorICAgICAgICAjSWdub3JlIG5ld2xpbmVzCisgICAgICAgIHBbMF0gPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgI0tlZXAgdGhlIHNlcGFyYXRvciBvcGVyYXRvcgorICAgICAgICBwWzBdID0gKCdzZXBhcmF0b3InLCBwWzFdKQorICAgICAgICAgICAgICAgICAKK2RlZiBwX3NlcXVlbnRpYWxfc2VwKHApOgorICAgICIiInNlcXVlbnRpYWxfc2VwIDogQ09NTUEgbGluZWJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgfCBuZXdsaW5lX2xpc3QiIiIKKyAgICBwWzBdID0gTm9uZQorCisjIExvdyBwcmlvcml0eSBUT0tFTiA9PiBmb3Jfd29yZCBjb252ZXJzaW9uLgorIyBMZXQgbWF5YmVfZm9yX3dvcmQgYmUgdXNlZCBhcyBhIHRva2VuIHdoZW4gbmVjZXNzYXJ5IGluIGhpZ2hlciBwcmlvcml0eQorIyBydWxlcy4gCitkZWYgcF9mb3Jfd29yZChwKToKKyAgICAiIiJmb3Jfd29yZCA6IG1heWJlX2Zvcl93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfaWZfd29yZChwKToKKyAgICAiIiJpZl93b3JkIDogbWF5YmVfaWZfd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisKK2RlZiBwX3RoZW5fd29yZChwKToKKyAgICAiIiJ0aGVuX3dvcmQgOiBtYXliZV90aGVuX3dvcmQiIiIKKyAgICBwWzBdID0gcFsxXQorCitkZWYgcF9kb25lX3dvcmQocCk6CisgICAgIiIiZG9uZV93b3JkIDogbWF5YmVfZG9uZV93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfZG9fd29yZChwKToKKyAgICAiIiJkb193b3JkIDogbWF5YmVfZG9fd29yZCIiIgorICAgIHBbMF0gPSBwWzFdCisgICAgCitkZWYgcF91bnRpbF93b3JkKHApOgorICAgICIiInVudGlsX3dvcmQgOiBtYXliZV91bnRpbF93b3JkIiIiCisgICAgcFswXSA9IHBbMV0KKyAgICAKK2RlZiBwX2Fzc2lnbm1lbnRfd29yZChwKToKKyAgICAiIiJhc3NpZ25tZW50X3dvcmQgOiBtYXliZV9hc3NpZ25tZW50X3dvcmQiIiIKKyAgICBwWzBdID0gKCdhc3NpZ25tZW50X3dvcmQnLCBwWzFdWzFdKQorICAgIAorZGVmIHBfYmFuZ193b3JkKHApOgorICAgICIiImJhbmdfd29yZCA6IG1heWJlX2Jhbmdfd29yZCIiIgorICAgIHBbMF0gPSAoJ2Jhbmdfd29yZCcsIHBbMV1bMV0pCisKK2RlZiBwX3Rva2VuKHApOgorICAgICIiInRva2VuIDogVE9LRU4KKyAgICAgICAgICAgICB8IEZpIiIiCisgICAgcFswXSA9IHBbMV0KKworZGVmIHBfZW1wdHkocCk6CisgICAgJ2VtcHR5IDonCisgICAgcFswXSA9IE5vbmUKKyAgICAKKyMgRXJyb3IgcnVsZSBmb3Igc3ludGF4IGVycm9ycworZGVmIHBfZXJyb3IocCk6CisgICAgbXNnID0gW10KKyAgICB3ID0gbXNnLmFwcGVuZAorICAgIHcoJyVyXG4nICUgcCkKKyAgICB3KCdmb2xsb3dlZCBieTpcbicpCisgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgIG4gPSB5YWNjLnRva2VuKCkKKyAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICBicmVhaworICAgICAgICB3KCcgICVyXG4nICUgbikKKyAgICByYWlzZSBzaGVycm9ycy5TaGVsbFN5bnRheEVycm9yKCcnLmpvaW4obXNnKSkKKworIyBCdWlsZCB0aGUgcGFyc2VyCit0cnk6CisgICAgaW1wb3J0IHB5c2h0YWJsZXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBvdXRwdXRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgaWYgbm90IG9zLmFjY2VzcyhvdXRwdXRkaXIsIG9zLldfT0spOgorICAgICAgICBvdXRwdXRkaXIgPSAnJworICAgIHlhY2MueWFjYyh0YWJtb2R1bGUgPSAncHlzaHRhYmxlcycsIG91dHB1dGRpciA9IG91dHB1dGRpciwgZGVidWcgPSAwKQorZWxzZToKKyAgICB5YWNjLnlhY2ModGFibW9kdWxlID0gJ3B5c2gucHlzaHRhYmxlcycsIHdyaXRlX3RhYmxlcyA9IDAsIGRlYnVnID0gMCkKKworCitkZWYgcGFyc2UoaW5wdXQsIGVvZj1GYWxzZSwgZGVidWc9RmFsc2UpOgorICAgICIiIlBhcnNlIGEgd2hvbGUgc2NyaXB0IGF0IG9uY2UgYW5kIHJldHVybiB0aGUgZ2VuZXJhdGVkIEFTVCBhbmQgdW5jb25zdW1lZAorICAgIGRhdGEgaW4gYSB0dXBsZS4KKyAgICAKKyAgICBOT1RFOiBlb2YgaXMgcHJvYmFibHkgbWVhbmluZ2xlc3MgZm9yIG5vdywgdGhlIHBhcnNlciBiZWluZyB1bmFibGUgdG8gd29yaworICAgIGluIHB1bGwgbW9kZS4gSXQgc2hvdWxkIGJlIHNldCB0byBUcnVlLgorICAgICIiIgorICAgIGxleGVyID0gcHlzaGxleC5QTFlMZXhlcigpCisgICAgcmVtYWluaW5nID0gbGV4ZXIuYWRkKGlucHV0LCBlb2YpCisgICAgaWYgbGV4ZXIuaXNfZW1wdHkoKToKKyAgICAgICAgcmV0dXJuIFtdLCByZW1haW5pbmcKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWcgPSAyCisgICAgcmV0dXJuIHlhY2MucGFyc2UobGV4ZXI9bGV4ZXIsIGRlYnVnPWRlYnVnKSwgcmVtYWluaW5nCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFTVCByZW5kZXJpbmcgaGVscGVycworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgCisKK2RlZiBmb3JtYXRfY29tbWFuZHModik6CisgICAgIiIiUmV0dXJuIGEgdHJlZSBtYWRlIG9mIHN0cmluZ3MgYW5kIGxpc3RzLiBNYWtlIGNvbW1hbmQgdHJlZXMgZWFzaWVyIHRvCisgICAgZGlzcGxheS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKHYsIGxpc3QpOgorICAgICAgICByZXR1cm4gW2Zvcm1hdF9jb21tYW5kcyhjKSBmb3IgYyBpbiB2XQorICAgIGlmIGlzaW5zdGFuY2UodiwgdHVwbGUpOgorICAgICAgICBpZiBsZW4odik9PTIgYW5kIGlzaW5zdGFuY2UodlswXSwgc3RyKSBhbmQgbm90IGlzaW5zdGFuY2UodlsxXSwgc3RyKToKKyAgICAgICAgICAgIGlmIHZbMF0gPT0gJ2FzeW5jJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gWydBc3luY0xpc3QnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2WzFdKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI0F2b2lkIGRlY29tcG9zaW5nIHR1cGxlcyBsaWtlICgncGlwZWxpbmUnLCBQaXBlbGluZSguLi4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRfY29tbWFuZHModlsxXSkKKyAgICAgICAgcmV0dXJuIGZvcm1hdF9jb21tYW5kcyhsaXN0KHYpKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBJZkNvbmQpOgorICAgICAgICBuYW1lID0gWydJZkNvbmQnXQorICAgICAgICBuYW1lICs9IFsnaWYnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LmNvbmQpXQorICAgICAgICBuYW1lICs9IFsndGhlbicsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYuaWZfY21kcyldCisgICAgICAgIG5hbWUgKz0gWydlbHNlJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5lbHNlX2NtZHMpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBGb3JMb29wKToKKyAgICAgICAgbmFtZSA9IFsnRm9yTG9vcCddCisgICAgICAgIG5hbWUgKz0gW3JlcHIodi5uYW1lKSsnIGluICcsIG1hcChzdHIsIHYuaXRlbXMpXQorICAgICAgICBuYW1lICs9IFsnY29tbWFuZHMnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LmNtZHMpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBBbmRPcik6CisgICAgICAgIHJldHVybiBbdi5vcCwgZm9ybWF0X2NvbW1hbmRzKHYubGVmdCksIGZvcm1hdF9jb21tYW5kcyh2LnJpZ2h0KV0KKyAgICBlbGlmIGlzaW5zdGFuY2UodiwgUGlwZWxpbmUpOgorICAgICAgICBuYW1lID0gJ1BpcGVsaW5lJworICAgICAgICBpZiB2LnJldmVyc2Vfc3RhdHVzOgorICAgICAgICAgICAgbmFtZSA9ICchJyArIG5hbWUKKyAgICAgICAgcmV0dXJuIFtuYW1lLCBmb3JtYXRfY29tbWFuZHModi5jb21tYW5kcyldCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIENhc2UpOgorICAgICAgICBuYW1lID0gWydDYXNlJ10KKyAgICAgICAgbmFtZSArPSBbdi5uYW1lLCBmb3JtYXRfY29tbWFuZHModi5pdGVtcyldCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIFNpbXBsZUNvbW1hbmQpOgorICAgICAgICBuYW1lID0gWydTaW1wbGVDb21tYW5kJ10KKyAgICAgICAgaWYgdi53b3JkczogICAgICAgICAgICAgICAgCisgICAgICAgICAgICBuYW1lICs9IFsnd29yZHMnLCBtYXAoc3RyLCB2LndvcmRzKV0KKyAgICAgICAgaWYgdi5hc3NpZ25zOgorICAgICAgICAgICAgYXNzaWducyA9IFt0dXBsZShhWzFdKSBmb3IgYSBpbiB2LmFzc2lnbnNdCisgICAgICAgICAgICBuYW1lICs9IFsnYXNzaWducycsIG1hcChzdHIsIGFzc2lnbnMpXQorICAgICAgICBpZiB2LnJlZGlyczoKKyAgICAgICAgICAgIG5hbWUgKz0gWydyZWRpcnMnLCBtYXAoZm9ybWF0X2NvbW1hbmRzLCB2LnJlZGlycyldCisgICAgICAgIHJldHVybiBuYW1lCisgICAgZWxpZiBpc2luc3RhbmNlKHYsIFJlZGlyZWN0TGlzdCk6CisgICAgICAgIG5hbWUgPSBbJ1JlZGlyZWN0TGlzdCddCisgICAgICAgIGlmIHYucmVkaXJzOgorICAgICAgICAgICAgbmFtZSArPSBbJ3JlZGlycycsIG1hcChmb3JtYXRfY29tbWFuZHMsIHYucmVkaXJzKV0KKyAgICAgICAgbmFtZSArPSBbJ2NvbW1hbmQnLCBmb3JtYXRfY29tbWFuZHModi5jbWQpXQorICAgICAgICByZXR1cm4gbmFtZQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBJT1JlZGlyZWN0KToKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKG1hcChzdHIsICh2LmlvX251bWJlciwgdi5vcCwgdi5maWxlbmFtZSkpKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBIZXJlRG9jdW1lbnQpOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4obWFwKHN0ciwgKHYuaW9fbnVtYmVyLCB2Lm9wLCByZXByKHYubmFtZSksIHJlcHIodi5jb250ZW50KSkpKQorICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBTdWJTaGVsbCk6CisgICAgICAgIHJldHVybiBbJ1N1YlNoZWxsJywgbWFwKGZvcm1hdF9jb21tYW5kcywgdi5jbWRzKV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVwcih2KQorICAgICAgICAgICAgIAorZGVmIHByaW50X2NvbW1hbmRzKGNtZHMsIG91dHB1dD1zeXMuc3Rkb3V0KToKKyAgICAiIiJQcmV0dHkgcHJpbnQgYSBjb21tYW5kIHRyZWUuIiIiCisgICAgZGVmIHByaW50X3RyZWUoY21kLCBzcGFjZXMsIG91dHB1dCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY21kLCBsaXN0KToKKyAgICAgICAgICAgIGZvciBjIGluIGNtZDoKKyAgICAgICAgICAgICAgICBwcmludF90cmVlKGMsIHNwYWNlcyArIDMsIG91dHB1dCkgICAgICAgICAgICAgIAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj5vdXRwdXQsICcgJypzcGFjZXMgKyBzdHIoY21kKQorICAgIAorICAgIGZvcm1hdHRlZCA9IGZvcm1hdF9jb21tYW5kcyhjbWRzKQorICAgIHByaW50X3RyZWUoZm9ybWF0dGVkLCAwLCBvdXRwdXQpCisgICAgCisgICAgCitkZWYgc3RyaW5naWZ5X2NvbW1hbmRzKGNtZHMpOiAKKyAgICAiIiJTZXJpYWxpemUgYSBjb21tYW5kIHRyZWUgYXMgYSBzdHJpbmcuCisgICAgCisgICAgUmV0dXJuZWQgc3RyaW5nIGlzIG5vdCBwcmV0dHkgYW5kIGlzIGN1cnJlbnRseSB1c2VkIGZvciB1bml0IHRlc3RzIG9ubHkuCisgICAgIiIiICAgCisgICAgZGVmIHN0cmluZ2lmeSh2YWx1ZSk6CisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gW10KKyAgICAgICAgICAgIGZvciB2IGluIHZhbHVlOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5hcHBlbmQoc3RyaW5naWZ5KHYpKQorICAgICAgICAgICAgZm9ybWF0dGVkID0gJyAnLmpvaW4oZm9ybWF0dGVkKQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJy5qb2luKFsnPCcsIGZvcm1hdHRlZCwgJz4nXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHZhbHVlKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4ob3V0cHV0KQorICAgICAgICAgICAgCisgICAgcmV0dXJuIHN0cmluZ2lmeShmb3JtYXRfY29tbWFuZHMoY21kcykpCisgICAgCisgICAgICAgIAorZGVmIHZpc2l0X2NvbW1hbmRzKGNtZHMsIGNhbGxhYmxlKToKKyAgICAiIiJWaXNpdCB0aGUgY29tbWFuZCB0cmVlIGFuZCBleGVjdXRlIGNhbGxhYmxlIG9uIGV2ZXJ5IFBpcGVsaW5lIGFuZCAKKyAgICBTaW1wbGVDb21tYW5kIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGNtZHMsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICBtYXAobGFtYmRhIGM6IHZpc2l0X2NvbW1hbmRzKGMsY2FsbGFibGUpLCBjbWRzKQorICAgIGVsaWYgaXNpbnN0YW5jZShjbWRzLCAoUGlwZWxpbmUsIFNpbXBsZUNvbW1hbmQpKToKKyAgICAgICAgY2FsbGFibGUoY21kcykKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3B5c2gvc2hlcnJvcnMucHkgYi9iaXRiYWtlL2xpYi9iYi9weXNoL3NoZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDA1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9weXNoL3NoZXJyb3JzLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMgc2hlcnJvcnMucHkgLSBzaGVsbCBlcnJvcnMgYW5kIHNpZ25hbHMKKyMKKyMgQ29weXJpZ2h0IDIwMDcgUGF0cmljayBNZXphcmQKKyMKKyMgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisiIiJEZWZpbmUgc2hlbGwgZXhjZXB0aW9ucyBhbmQgZXJyb3IgY29kZXMuCisiIiIKKworY2xhc3MgU2hlbGxFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgU2hlbGxTeW50YXhFcnJvcihTaGVsbEVycm9yKToKKyAgICBwYXNzCisgICAgCitjbGFzcyBVdGlsaXR5RXJyb3IoU2hlbGxFcnJvcik6CisgICAgIiIiUmFpc2VkIHVwb24gdXRpbGl0eSBzeW50YXggZXJyb3IgKG9wdGlvbiBvciBvcGVyYW5kIGVycm9yKS4iIiIKKyAgICBwYXNzCisgICAKK2NsYXNzIEV4cGFuc2lvbkVycm9yKFNoZWxsRXJyb3IpOgorICAgIHBhc3MKKyAgICAgCitjbGFzcyBDb21tYW5kTm90Rm91bmQoU2hlbGxFcnJvcik6CisgICAgIiIiU3BlY2lmaWVkIGNvbW1hbmQgd2FzIG5vdCBmb3VuZC4iIiIKKyAgICBwYXNzCisgICAgCitjbGFzcyBSZWRpcmVjdGlvbkVycm9yKFNoZWxsRXJyb3IpOgorICAgIHBhc3MKKyAgICAKK2NsYXNzIFZhckFzc2lnbm1lbnRFcnJvcihTaGVsbEVycm9yKToKKyAgICAiIiJWYXJpYWJsZSBhc3NpZ25tZW50IGVycm9yLiIiIgorICAgIHBhc3MKKyAgICAKK2NsYXNzIEV4aXRTaWduYWwoU2hlbGxFcnJvcik6CisgICAgIiIiRXhpdCBzaWduYWwuIiIiCisgICAgcGFzcworICAgIAorY2xhc3MgUmV0dXJuU2lnbmFsKFNoZWxsRXJyb3IpOgorICAgICIiIkV4aXQgc2lnbmFsLiIiIgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3B5c2gvc3VicHJvY2Vzc19maXgucHkgYi9iaXRiYWtlL2xpYi9iYi9weXNoL3N1YnByb2Nlc3NfZml4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZWNhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9weXNoL3N1YnByb2Nlc3NfZml4LnB5CkBAIC0wLDAgKzEsNzcgQEAKKyMgc3VicHJvY2VzcyAtIFN1YnByb2Nlc3NlcyB3aXRoIGFjY2Vzc2libGUgSS9PIHN0cmVhbXMKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtb2R1bGUsIHNlZSBQRVAgMzI0LgorIworIyBUaGlzIG1vZHVsZSBzaG91bGQgcmVtYWluIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4yLCBzZWUgUEVQIDI5MS4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgYnkgUGV0ZXIgQXN0cmFuZCA8YXN0cmFuZEBseXNhdG9yLmxpdS5zZT4KKyMKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KKworZGVmIGxpc3QyY21kbGluZShzZXEpOgorICAgICIiIgorICAgIFRyYW5zbGF0ZSBhIHNlcXVlbmNlIG9mIGFyZ3VtZW50cyBpbnRvIGEgY29tbWFuZCBsaW5lCisgICAgc3RyaW5nLCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcyB0aGUgTVMgQyBydW50aW1lOgorCisgICAgMSkgQXJndW1lbnRzIGFyZSBkZWxpbWl0ZWQgYnkgd2hpdGUgc3BhY2UsIHdoaWNoIGlzIGVpdGhlciBhCisgICAgICAgc3BhY2Ugb3IgYSB0YWIuCisKKyAgICAyKSBBIHN0cmluZyBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90YXRpb24gbWFya3MgaXMKKyAgICAgICBpbnRlcnByZXRlZCBhcyBhIHNpbmdsZSBhcmd1bWVudCwgcmVnYXJkbGVzcyBvZiB3aGl0ZSBzcGFjZQorICAgICAgIGNvbnRhaW5lZCB3aXRoaW4uICBBIHF1b3RlZCBzdHJpbmcgY2FuIGJlIGVtYmVkZGVkIGluIGFuCisgICAgICAgYXJndW1lbnQuCisKKyAgICAzKSBBIGRvdWJsZSBxdW90YXRpb24gbWFyayBwcmVjZWRlZCBieSBhIGJhY2tzbGFzaCBpcworICAgICAgIGludGVycHJldGVkIGFzIGEgbGl0ZXJhbCBkb3VibGUgcXVvdGF0aW9uIG1hcmsuCisKKyAgICA0KSBCYWNrc2xhc2hlcyBhcmUgaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5LCB1bmxlc3MgdGhleQorICAgICAgIGltbWVkaWF0ZWx5IHByZWNlZGUgYSBkb3VibGUgcXVvdGF0aW9uIG1hcmsuCisKKyAgICA1KSBJZiBiYWNrc2xhc2hlcyBpbW1lZGlhdGVseSBwcmVjZWRlIGEgZG91YmxlIHF1b3RhdGlvbiBtYXJrLAorICAgICAgIGV2ZXJ5IHBhaXIgb2YgYmFja3NsYXNoZXMgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsaXRlcmFsCisgICAgICAgYmFja3NsYXNoLiAgSWYgdGhlIG51bWJlciBvZiBiYWNrc2xhc2hlcyBpcyBvZGQsIHRoZSBsYXN0CisgICAgICAgYmFja3NsYXNoIGVzY2FwZXMgdGhlIG5leHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIGFzCisgICAgICAgZGVzY3JpYmVkIGluIHJ1bGUgMy4KKyAgICAiIiIKKworICAgICMgU2VlCisgICAgIyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvdmNjZWxuZy9odG0vcHJvZ3NfMTIuYXNwCisgICAgcmVzdWx0ID0gW10KKyAgICBuZWVkcXVvdGUgPSBGYWxzZQorICAgIGZvciBhcmcgaW4gc2VxOgorICAgICAgICBic19idWYgPSBbXQorCisgICAgICAgICMgQWRkIGEgc3BhY2UgdG8gc2VwYXJhdGUgdGhpcyBhcmd1bWVudCBmcm9tIHRoZSBvdGhlcnMKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpCisKKyAgICAgICAgbmVlZHF1b3RlID0gKCIgIiBpbiBhcmcpIG9yICgiXHQiIGluIGFyZykgb3IgKCJ8IiBpbiBhcmcpIG9yIGFyZyA9PSAiIgorICAgICAgICBpZiBuZWVkcXVvdGU6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJykKKworICAgICAgICBmb3IgYyBpbiBhcmc6CisgICAgICAgICAgICBpZiBjID09ICdcXCc6CisgICAgICAgICAgICAgICAgIyBEb24ndCBrbm93IGlmIHdlIG5lZWQgdG8gZG91YmxlIHlldC4KKyAgICAgICAgICAgICAgICBic19idWYuYXBwZW5kKGMpCisgICAgICAgICAgICBlbGlmIGMgPT0gJyInOgorICAgICAgICAgICAgICAgICMgRG91YmxlIGJhY2tzcGFjZXMuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXFwnICogbGVuKGJzX2J1ZikqMikKKyAgICAgICAgICAgICAgICBic19idWYgPSBbXQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xcIicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm9ybWFsIGNoYXIKKyAgICAgICAgICAgICAgICBpZiBic19idWY6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoYnNfYnVmKQorICAgICAgICAgICAgICAgICAgICBic19idWYgPSBbXQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYykKKworICAgICAgICAjIEFkZCByZW1haW5pbmcgYmFja3NwYWNlcywgaWYgYW55LgorICAgICAgICBpZiBic19idWY6CisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGJzX2J1ZikKKworICAgICAgICBpZiBuZWVkcXVvdGU6CisgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKGJzX2J1ZikKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKQorICAgICAgICAgICAgCisgICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkgYi9iaXRiYWtlL2xpYi9iYi9ydW5xdWV1ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcxZWVkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvcnVucXVldWUucHkKQEAgLTAsMCArMSwyMTk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgJ1J1blF1ZXVlJyBpbXBsZW1lbnRhdGlvbgorCitIYW5kbGVzIHByZXBhcmF0aW9uIGFuZCBleGVjdXRpb24gb2YgYSBxdWV1ZSBvZiB0YXNrcworIiIiCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgY29weQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3RhdAoraW1wb3J0IGZjbnRsCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorZnJvbSBiYiBpbXBvcnQgbXNnLCBkYXRhLCBldmVudAorZnJvbSBiYiBpbXBvcnQgbW9uaXRvcmRpc2sKK2ltcG9ydCBzdWJwcm9jZXNzCisKK3RyeToKKyAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgcGlja2xlCisKK2JibG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UuUnVuUXVldWUiKQorCitfX2ZpbmRfbWQ1X18gPSByZS5jb21waWxlKCByJyg/aSkoPzwhW2EtejAtOV0pW2EtZjAtOV17MzJ9KD8hW2EtejAtOV0pJyApCisKK2NsYXNzIFJ1blF1ZXVlU3RhdHM6CisgICAgIiIiCisgICAgSG9sZHMgc3RhdGlzdGljcyBvbiB0aGUgdGFza3MgaGFuZGxlZCBieSB0aGUgYXNzb2NpYXRlZCBydW5RdWV1ZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3RhbCk6CisgICAgICAgIHNlbGYuY29tcGxldGVkID0gMAorICAgICAgICBzZWxmLnNraXBwZWQgPSAwCisgICAgICAgIHNlbGYuZmFpbGVkID0gMAorICAgICAgICBzZWxmLmFjdGl2ZSA9IDAKKyAgICAgICAgc2VsZi50b3RhbCA9IHRvdGFsCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5fX2NsYXNzX18oc2VsZi50b3RhbCkKKyAgICAgICAgb2JqLl9fZGljdF9fLnVwZGF0ZShzZWxmLl9fZGljdF9fKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgdGFza0ZhaWxlZChzZWxmKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSAtIDEKKyAgICAgICAgc2VsZi5mYWlsZWQgPSBzZWxmLmZhaWxlZCArIDEKKworICAgIGRlZiB0YXNrQ29tcGxldGVkKHNlbGYsIG51bWJlciA9IDEpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IHNlbGYuYWN0aXZlIC0gbnVtYmVyCisgICAgICAgIHNlbGYuY29tcGxldGVkID0gc2VsZi5jb21wbGV0ZWQgKyBudW1iZXIKKworICAgIGRlZiB0YXNrU2tpcHBlZChzZWxmLCBudW1iZXIgPSAxKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBzZWxmLmFjdGl2ZSArIG51bWJlcgorICAgICAgICBzZWxmLnNraXBwZWQgPSBzZWxmLnNraXBwZWQgKyBudW1iZXIKKworICAgIGRlZiB0YXNrQWN0aXZlKHNlbGYpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IHNlbGYuYWN0aXZlICsgMQorCisjIFRoZXNlIHZhbHVlcyBpbmRpY2F0ZSB0aGUgbmV4dCBzdGVwIGR1ZSB0byBiZSBydW4gaW4gdGhlCisjIHJ1blF1ZXVlIHN0YXRlIG1hY2hpbmUKK3J1blF1ZXVlUHJlcGFyZSA9IDIKK3J1blF1ZXVlU2NlbmVJbml0ID0gMworcnVuUXVldWVTY2VuZVJ1biA9IDQKK3J1blF1ZXVlUnVuSW5pdCA9IDUKK3J1blF1ZXVlUnVubmluZyA9IDYKK3J1blF1ZXVlRmFpbGVkID0gNworcnVuUXVldWVDbGVhblVwID0gOAorcnVuUXVldWVDb21wbGV0ZSA9IDkKKworY2xhc3MgUnVuUXVldWVTY2hlZHVsZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBDb250cm9sIHRoZSBvcmRlciB0YXNrcyBhcmUgc2NoZWR1bGVkIGluLgorICAgICIiIgorICAgIG5hbWUgPSAiYmFzaWMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZGVmYXVsdCBzY2hlZHVsZXIganVzdCByZXR1cm5zIHRoZSBmaXJzdCBidWlsZGFibGUgdGFzayAodGhlCisgICAgICAgIHByaW9yaXR5IG1hcCBpcyBzb3J0ZWQgYnkgdGFzayBudW1iZXIpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJxID0gcnVucXVldWUKKyAgICAgICAgc2VsZi5ycWRhdGEgPSBycWRhdGEKKyAgICAgICAgc2VsZi5udW1UYXNrcyA9IGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpCisKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisgICAgICAgIHNlbGYucHJpb19tYXAuZXh0ZW5kKHJhbmdlKHNlbGYubnVtVGFza3MpKQorCisgICAgICAgIHNlbGYuYnVpbGRhYmxlID0gW10KKyAgICAgICAgc2VsZi5zdGFtcHMgPSB7fQorICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShzZWxmLm51bVRhc2tzKToKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tpZF1dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNraWRdCisgICAgICAgICAgICBzZWxmLnN0YW1wc1t0YXNraWRdID0gYmIuYnVpbGQuc3RhbXBmaWxlKHRhc2tuYW1lLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIGZuKQorICAgICAgICAgICAgaWYgc2VsZi5ycS5ydW5xX2J1aWxkYWJsZVt0YXNraWRdID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGFibGUuYXBwZW5kKHRhc2tpZCkKKworICAgICAgICBzZWxmLnJldl9wcmlvX21hcCA9IE5vbmUKKworICAgIGRlZiBuZXh0X2J1aWxkYWJsZV90YXNrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBpZCBvZiB0aGUgZmlyc3QgdGFzayB3ZSBmaW5kIHRoYXQgaXMgYnVpbGRhYmxlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmJ1aWxkYWJsZSA9IFt4IGZvciB4IGluIHNlbGYuYnVpbGRhYmxlIGlmIG5vdCBzZWxmLnJxLnJ1bnFfcnVubmluZ1t4XSA9PSAxXQorICAgICAgICBpZiBub3Qgc2VsZi5idWlsZGFibGU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBsZW4oc2VsZi5idWlsZGFibGUpID09IDE6CisgICAgICAgICAgICB0YXNraWQgPSBzZWxmLmJ1aWxkYWJsZVswXQorICAgICAgICAgICAgc3RhbXAgPSBzZWxmLnN0YW1wc1t0YXNraWRdCisgICAgICAgICAgICBpZiBzdGFtcCBub3QgaW4gc2VsZi5ycS5idWlsZF9zdGFtcHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHJldHVybiB0YXNraWQKKworICAgICAgICBpZiBub3Qgc2VsZi5yZXZfcHJpb19tYXA6CisgICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcCA9IHJhbmdlKHNlbGYubnVtVGFza3MpCisgICAgICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShzZWxmLm51bVRhc2tzKToKKyAgICAgICAgICAgICAgICBzZWxmLnJldl9wcmlvX21hcFtzZWxmLnByaW9fbWFwW3Rhc2tpZF1dID0gdGFza2lkCisKKyAgICAgICAgYmVzdCA9IE5vbmUKKyAgICAgICAgYmVzdHByaW8gPSBOb25lCisgICAgICAgIGZvciB0YXNraWQgaW4gc2VsZi5idWlsZGFibGU6CisgICAgICAgICAgICBwcmlvID0gc2VsZi5yZXZfcHJpb19tYXBbdGFza2lkXQorICAgICAgICAgICAgaWYgYmVzdHByaW8gaXMgTm9uZSBvciBiZXN0cHJpbyA+IHByaW86CisgICAgICAgICAgICAgICAgc3RhbXAgPSBzZWxmLnN0YW1wc1t0YXNraWRdCisgICAgICAgICAgICAgICAgaWYgc3RhbXAgaW4gc2VsZi5ycS5idWlsZF9zdGFtcHMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJlc3RwcmlvID0gcHJpbworICAgICAgICAgICAgICAgIGJlc3QgPSB0YXNraWQKKworICAgICAgICByZXR1cm4gYmVzdAorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGlkIG9mIHRoZSB0YXNrIHdlIHNob3VsZCBidWlsZCBuZXh0CisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnJxLnN0YXRzLmFjdGl2ZSA8IHNlbGYucnEubnVtYmVyX3Rhc2tzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9idWlsZGFibGVfdGFzaygpCisKKyAgICBkZWYgbmV3YnVpbGFibGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuYnVpbGRhYmxlLmFwcGVuZCh0YXNrKQorCitjbGFzcyBSdW5RdWV1ZVNjaGVkdWxlclNwZWVkKFJ1blF1ZXVlU2NoZWR1bGVyKToKKyAgICAiIiIKKyAgICBBIHNjaGVkdWxlciBvcHRpbWlzZWQgZm9yIHNwZWVkLiBUaGUgcHJpb3JpdHkgbWFwIGlzIHNvcnRlZCBieSB0YXNrIHdlaWdodCwKKyAgICBoZWF2aWVyIHdlaWdodGVkIHRhc2tzICh0YXNrcyBuZWVkZWQgYnkgdGhlIG1vc3Qgb3RoZXIgdGFza3MpIGFyZSBydW4gZmlyc3QuCisgICAgIiIiCisgICAgbmFtZSA9ICJzcGVlZCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5xdWV1ZSwgcnFkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBwcmlvcml0eSBtYXAgaXMgc29ydGVkIGJ5IHRhc2sgd2VpZ2h0LgorICAgICAgICAiIiIKKyAgICAgICAgUnVuUXVldWVTY2hlZHVsZXIuX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSkKKworICAgICAgICBzb3J0d2VpZ2h0ID0gc29ydGVkKGNvcHkuZGVlcGNvcHkoc2VsZi5ycWRhdGEucnVucV93ZWlnaHQpKQorICAgICAgICBjb3B5d2VpZ2h0ID0gY29weS5kZWVwY29weShzZWxmLnJxZGF0YS5ydW5xX3dlaWdodCkKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisKKyAgICAgICAgZm9yIHdlaWdodCBpbiBzb3J0d2VpZ2h0OgorICAgICAgICAgICAgaWR4ID0gY29weXdlaWdodC5pbmRleCh3ZWlnaHQpCisgICAgICAgICAgICBzZWxmLnByaW9fbWFwLmFwcGVuZChpZHgpCisgICAgICAgICAgICBjb3B5d2VpZ2h0W2lkeF0gPSAtMQorCisgICAgICAgIHNlbGYucHJpb19tYXAucmV2ZXJzZSgpCisKK2NsYXNzIFJ1blF1ZXVlU2NoZWR1bGVyQ29tcGxldGlvbihSdW5RdWV1ZVNjaGVkdWxlclNwZWVkKToKKyAgICAiIiIKKyAgICBBIHNjaGVkdWxlciBvcHRpbWlzZWQgdG8gY29tcGxldGUgLmJiIGZpbGVzIGFyZSBxdWlja2x5IGFzIHBvc3NpYmxlLiBUaGUKKyAgICBwcmlvcml0eSBtYXAgaXMgc29ydGVkIGJ5IHRhc2sgd2VpZ2h0LCBidXQgdGhlbiByZW9yZGVyZWQgc28gb25jZSBhIGdpdmVuCisgICAgLmJiIGZpbGUgc3RhcnRzIHRvIGJ1aWxkLCBpdCdzIGNvbXBsZXRlZCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLiBUaGlzIHdvcmtzCisgICAgd2VsbCB3aGVyZSBkaXNrIHNwYWNlIGlzIGF0IGEgcHJlbWl1bSBhbmQgY2xhc3NlcyBsaWtlIE9FJ3Mgcm1fd29yayBhcmUgaW4KKyAgICBmb3JjZS4KKyAgICAiIiIKKyAgICBuYW1lID0gImNvbXBsZXRpb24iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSk6CisgICAgICAgIFJ1blF1ZXVlU2NoZWR1bGVyU3BlZWQuX19pbml0X18oc2VsZiwgcnVucXVldWUsIHJxZGF0YSkKKworICAgICAgICAjRklYTUUgLSB3aGlsc3QgdGhpcyBncm91cHMgYWxsIGZuaWRzIHRvZ2V0aGVyIGl0IGRvZXMgbm90IHJlb3JkZXIgdGhlCisgICAgICAgICNmbmlkIGdyb3VwcyBvcHRpbWFsbHkuCisKKyAgICAgICAgYmFzZW1hcCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5wcmlvX21hcCkKKyAgICAgICAgc2VsZi5wcmlvX21hcCA9IFtdCisgICAgICAgIHdoaWxlIChsZW4oYmFzZW1hcCkgPiAwKToKKyAgICAgICAgICAgIGVudHJ5ID0gYmFzZW1hcC5wb3AoMCkKKyAgICAgICAgICAgIHNlbGYucHJpb19tYXAuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgZm5pZCA9IHNlbGYucnFkYXRhLnJ1bnFfZm5pZFtlbnRyeV0KKyAgICAgICAgICAgIHRvZGVsID0gW10KKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiBiYXNlbWFwOgorICAgICAgICAgICAgICAgIGVudHJ5X2ZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbZW50cnldCisgICAgICAgICAgICAgICAgaWYgZW50cnlfZm5pZCA9PSBmbmlkOgorICAgICAgICAgICAgICAgICAgICB0b2RlbC5hcHBlbmQoYmFzZW1hcC5pbmRleChlbnRyeSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpb19tYXAuYXBwZW5kKGVudHJ5KQorICAgICAgICAgICAgdG9kZWwucmV2ZXJzZSgpCisgICAgICAgICAgICBmb3IgaWR4IGluIHRvZGVsOgorICAgICAgICAgICAgICAgIGRlbCBiYXNlbWFwW2lkeF0KKworY2xhc3MgUnVuUXVldWVEYXRhOgorICAgICIiIgorICAgIEJpdEJha2UgUnVuIFF1ZXVlIGltcGxlbWVudGF0aW9uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxLCBjb29rZXIsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgdGFza0RhdGEsIHRhcmdldHMpOgorICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLmRhdGFDYWNoZSA9IGRhdGFDYWNoZQorICAgICAgICBzZWxmLnRhc2tEYXRhID0gdGFza0RhdGEKKyAgICAgICAgc2VsZi50YXJnZXRzID0gdGFyZ2V0cworICAgICAgICBzZWxmLnJxID0gcnEKKyAgICAgICAgc2VsZi53YXJuX211bHRpX2JiID0gRmFsc2UKKworICAgICAgICBzZWxmLnN0YW1wd2hpdGVsaXN0ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NUQU1QX1dISVRFTElTVCIsIFRydWUpIG9yICIiCisgICAgICAgIHNlbGYubXVsdGlfcHJvdmlkZXJfd2hpdGVsaXN0ID0gKGNmZ0RhdGEuZ2V0VmFyKCJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bnFfZm5pZCA9IFtdCisgICAgICAgIHNlbGYucnVucV90YXNrID0gW10KKyAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHMgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfcmV2ZGVwcyA9IFtdCisgICAgICAgIHNlbGYucnVucV9oYXNoID0gW10KKworICAgIGRlZiBydW5xX2RlcGVuZHNfbmFtZXMoc2VsZiwgaWRzKToKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIHJldCA9IFtdCisgICAgICAgIGZvciBpZCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1tpZHNdOgorICAgICAgICAgICAgbmFtID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF91c2VyX2lkc3RyaW5nKGlkKSkKKyAgICAgICAgICAgIG5hbSA9IHJlLnN1YigiX1teLF0qLCIsICIsIiwgbmFtKQorICAgICAgICAgICAgcmV0LmV4dGVuZChbbmFtXSkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGdldF90YXNrX25hbWUoc2VsZiwgdGFzayk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bnFfdGFza1t0YXNrXQorCisgICAgZGVmIGdldF90YXNrX2ZpbGUoc2VsZiwgdGFzayk6CisgICAgICAgIHJldHVybiBzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXQorCisgICAgZGVmIGdldF90YXNrX2hhc2goc2VsZiwgdGFzayk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bnFfaGFzaFt0YXNrXQorCisgICAgZGVmIGdldF91c2VyX2lkc3RyaW5nKHNlbGYsIHRhc2ssIHRhc2tfbmFtZV9zdWZmaXggPSAiIik6CisgICAgICAgIGZuID0gc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgdGFza25hbWUgPSBzZWxmLnJ1bnFfdGFza1t0YXNrXSArIHRhc2tfbmFtZV9zdWZmaXgKKyAgICAgICAgcmV0dXJuICIlcywgJXMiICUgKGZuLCB0YXNrbmFtZSkKKworICAgIGRlZiBnZXRfdGFza19pZChzZWxmLCBmbmlkLCB0YXNrbmFtZSk6CisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2ZuaWRbbGlzdGlkXSA9PSBmbmlkIGFuZCBzZWxmLnJ1bnFfdGFza1tsaXN0aWRdID09IHRhc2tuYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0aWQKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjaXJjdWxhcl9kZXBjaGFpbnNfaGFuZGxlcihzZWxmLCB0YXNrcyk6CisgICAgICAgICIiIgorICAgICAgICBTb21lIHRhc2tzIGFyZW4ndCBidWlsZGFibGUsIGxpa2VseSBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZXMuCisgICAgICAgIElkZW50aWZ5IHRoZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIHByaW50IHRoZW0gaW4gYSB1c2VyIHJlYWRhYmxlIGZvcm1hdC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKKworICAgICAgICB2YWxpZF9jaGFpbnMgPSBbXQorICAgICAgICBleHBsb3JlZF9kZXBzID0ge30KKyAgICAgICAgbXNncyA9IFtdCisKKyAgICAgICAgZGVmIGNoYWluX3Jlb3JkZXIoY2hhaW4pOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBSZW9yZGVyIGEgZGVwZW5kZW5jeSBjaGFpbiBzbyB0aGUgbG93ZXN0IHRhc2sgaWQgaXMgZmlyc3QKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgbG93ZXN0ID0gMAorICAgICAgICAgICAgbmV3X2NoYWluID0gW10KKyAgICAgICAgICAgIGZvciBlbnRyeSBpbiB4cmFuZ2UobGVuKGNoYWluKSk6CisgICAgICAgICAgICAgICAgaWYgY2hhaW5bZW50cnldIDwgY2hhaW5bbG93ZXN0XToKKyAgICAgICAgICAgICAgICAgICAgbG93ZXN0ID0gZW50cnkKKyAgICAgICAgICAgIG5ld19jaGFpbi5leHRlbmQoY2hhaW5bbG93ZXN0Ol0pCisgICAgICAgICAgICBuZXdfY2hhaW4uZXh0ZW5kKGNoYWluWzpsb3dlc3RdKQorICAgICAgICAgICAgcmV0dXJuIG5ld19jaGFpbgorCisgICAgICAgIGRlZiBjaGFpbl9jb21wYXJlX2VxdWFsKGNoYWluMSwgY2hhaW4yKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQ29tcGFyZSB0d28gZGVwZW5kZW5jeSBjaGFpbnMgYW5kIHNlZSBpZiB0aGV5J3JlIHRoZSBzYW1lCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIGxlbihjaGFpbjEpICE9IGxlbihjaGFpbjIpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZm9yIGluZGV4IGluIHhyYW5nZShsZW4oY2hhaW4xKSk6CisgICAgICAgICAgICAgICAgaWYgY2hhaW4xW2luZGV4XSAhPSBjaGFpbjJbaW5kZXhdOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZGVmIGNoYWluX2FycmF5X2NvbnRhaW5zKGNoYWluLCBjaGFpbl9hcnJheSk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIFJldHVybiBUcnVlIGlmIGNoYWluX2FycmF5IGNvbnRhaW5zIGNoYWluCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGZvciBjaCBpbiBjaGFpbl9hcnJheToKKyAgICAgICAgICAgICAgICBpZiBjaGFpbl9jb21wYXJlX2VxdWFsKGNoLCBjaGFpbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgZmluZF9jaGFpbnModGFza2lkLCBwcmV2X2NoYWluKToKKyAgICAgICAgICAgIHByZXZfY2hhaW4uYXBwZW5kKHRhc2tpZCkKKyAgICAgICAgICAgIHRvdGFsX2RlcHMgPSBbXQorICAgICAgICAgICAgdG90YWxfZGVwcy5leHRlbmQoc2VsZi5ydW5xX3JldmRlcHNbdGFza2lkXSkKKyAgICAgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ydW5xX3JldmRlcHNbdGFza2lkXToKKyAgICAgICAgICAgICAgICBpZiByZXZkZXAgaW4gcHJldl9jaGFpbjoKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gcHJldl9jaGFpbi5pbmRleChyZXZkZXApCisgICAgICAgICAgICAgICAgICAgICMgVG8gcHJldmVudCBkdXBsaWNhdGVzLCByZW9yZGVyIHRoZSBjaGFpbiB0byBzdGFydCB3aXRoIHRoZSBsb3dlc3QgdGFza2lkCisgICAgICAgICAgICAgICAgICAgICMgYW5kIHNlYXJjaCB0aHJvdWdoIGFuIGFycmF5IG9mIHRob3NlIHdlJ3ZlIGFscmVhZHkgcHJpbnRlZAorICAgICAgICAgICAgICAgICAgICBjaGFpbiA9IHByZXZfY2hhaW5baWR4Ol0KKyAgICAgICAgICAgICAgICAgICAgbmV3X2NoYWluID0gY2hhaW5fcmVvcmRlcihjaGFpbikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNoYWluX2FycmF5X2NvbnRhaW5zKG5ld19jaGFpbiwgdmFsaWRfY2hhaW5zKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX2NoYWlucy5hcHBlbmQobmV3X2NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIkRlcGVuZGVuY3kgbG9vcCAjJWQgZm91bmQ6XG4iICUgbGVuKHZhbGlkX2NoYWlucykpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIG5ld19jaGFpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dzLmFwcGVuZCgiICBUYXNrICVzICglcykgKGRlcGVuZGVudCBUYXNrcyAlcylcbiIgJSAoZGVwLCBzZWxmLmdldF91c2VyX2lkc3RyaW5nKGRlcCksIHNlbGYucnVucV9kZXBlbmRzX25hbWVzKGRlcCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNncy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHZhbGlkX2NoYWlucykgPiAxMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ3MuYXBwZW5kKCJBYm9ydGVkIGRlcGVuZGVuY3kgbG9vcHMgc2VhcmNoIGFmdGVyIDEwIG1hdGNoZXMuXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1zZ3MKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzY2FuID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiByZXZkZXAgbm90IGluIGV4cGxvcmVkX2RlcHM6CisgICAgICAgICAgICAgICAgICAgIHNjYW4gPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiByZXZkZXAgaW4gZXhwbG9yZWRfZGVwc1tyZXZkZXBdOgorICAgICAgICAgICAgICAgICAgICBzY2FuID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gcHJldl9jaGFpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBpbiBleHBsb3JlZF9kZXBzW3JldmRlcF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbiA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBzY2FuOgorICAgICAgICAgICAgICAgICAgICBmaW5kX2NoYWlucyhyZXZkZXAsIGNvcHkuZGVlcGNvcHkocHJldl9jaGFpbikpCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBleHBsb3JlZF9kZXBzW3JldmRlcF06CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gdG90YWxfZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX2RlcHMuYXBwZW5kKGRlcCkKKworICAgICAgICAgICAgZXhwbG9yZWRfZGVwc1t0YXNraWRdID0gdG90YWxfZGVwcworCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgZmluZF9jaGFpbnModGFzaywgW10pCisKKyAgICAgICAgcmV0dXJuIG1zZ3MKKworICAgIGRlZiBjYWxjdWxhdGVfdGFza193ZWlnaHRzKHNlbGYsIGVuZHBvaW50cyk6CisgICAgICAgICIiIgorICAgICAgICBDYWxjdWxhdGUgYSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSAid2VpZ2h0IiBvZiBlYWNoIHRhc2suIEhlYXZpZXIgd2VpZ2h0ZWQgdGFza3MKKyAgICAgICAgaGF2ZSBtb3JlIGRlcGVuZGVuY2llcyBhbmQgaGVuY2Ugc2hvdWxkIGJlIGV4ZWN1dGVkIHNvb25lciBmb3IgbWF4aW11bSBzcGVlZC4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsc28gc2FuaXR5IGNoZWNrcyB0aGUgdGFzayBsaXN0IGZpbmRpbmcgdGFza3MgdGhhdCBhcmUgbm90CisgICAgICAgIHBvc3NpYmxlIHRvIGV4ZWN1dGUgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgbnVtVGFza3MgPSBsZW4oc2VsZi5ydW5xX2ZuaWQpCisgICAgICAgIHdlaWdodCA9IFtdCisgICAgICAgIGRlcHNfbGVmdCA9IFtdCisgICAgICAgIHRhc2tfZG9uZSA9IFtdCisKKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobnVtVGFza3MpOgorICAgICAgICAgICAgdGFza19kb25lLmFwcGVuZChGYWxzZSkKKyAgICAgICAgICAgIHdlaWdodC5hcHBlbmQoMSkKKyAgICAgICAgICAgIGRlcHNfbGVmdC5hcHBlbmQobGVuKHNlbGYucnVucV9yZXZkZXBzW2xpc3RpZF0pKQorCisgICAgICAgIGZvciBsaXN0aWQgaW4gZW5kcG9pbnRzOgorICAgICAgICAgICAgd2VpZ2h0W2xpc3RpZF0gPSAxMAorICAgICAgICAgICAgdGFza19kb25lW2xpc3RpZF0gPSBUcnVlCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG5leHRfcG9pbnRzID0gW10KKyAgICAgICAgICAgIGZvciBsaXN0aWQgaW4gZW5kcG9pbnRzOgorICAgICAgICAgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKKyAgICAgICAgICAgICAgICAgICAgd2VpZ2h0W3JldmRlcF0gPSB3ZWlnaHRbcmV2ZGVwXSArIHdlaWdodFtsaXN0aWRdCisgICAgICAgICAgICAgICAgICAgIGRlcHNfbGVmdFtyZXZkZXBdID0gZGVwc19sZWZ0W3JldmRlcF0gLSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcHNfbGVmdFtyZXZkZXBdID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3BvaW50cy5hcHBlbmQocmV2ZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgdGFza19kb25lW3JldmRlcF0gPSBUcnVlCisgICAgICAgICAgICBlbmRwb2ludHMgPSBuZXh0X3BvaW50cworICAgICAgICAgICAgaWYgbGVuKG5leHRfcG9pbnRzKSA9PSAwOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBDaXJjdWxhciBkZXBlbmRlbmN5IHNhbml0eSBjaGVjaworICAgICAgICBwcm9ibGVtX3Rhc2tzID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKG51bVRhc2tzKToKKyAgICAgICAgICAgIGlmIHRhc2tfZG9uZVt0YXNrXSBpcyBGYWxzZSBvciBkZXBzX2xlZnRbdGFza10gIT0gMDoKKyAgICAgICAgICAgICAgICBwcm9ibGVtX3Rhc2tzLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiVGFzayAlcyAoJXMpIGlzIG5vdCBidWlsZGFibGUiLCB0YXNrLCBzZWxmLmdldF91c2VyX2lkc3RyaW5nKHRhc2spKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiKENvbXBsZXRlIG1hcmtlciB3YXMgJXMgYW5kIHRoZSByZW1haW5pbmcgZGVwZW5kZW5jeSBjb3VudCB3YXMgJXMpXG4iLCB0YXNrX2RvbmVbdGFza10sIGRlcHNfbGVmdFt0YXNrXSkKKworICAgICAgICBpZiBwcm9ibGVtX3Rhc2tzOgorICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmJ1aWxkYWJsZSB0YXNrcyB3ZXJlIGZvdW5kLlxuIgorICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgKyAiVGhlc2UgYXJlIHVzdWFsbHkgY2F1c2VkIGJ5IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYW55IGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hhaW5zIGZvdW5kIHdpbGwgYmUgcHJpbnRlZCBiZWxvdy4gSW5jcmVhc2UgdGhlIGRlYnVnIGxldmVsIHRvIHNlZSBhIGxpc3Qgb2YgdW5idWlsZGFibGUgdGFza3MuXG5cbiIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIklkZW50aWZ5aW5nIGRlcGVuZGVuY3kgbG9vcHMgKHRoaXMgbWF5IHRha2UgYSBzaG9ydCB3aGlsZSkuLi5cbiIKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtZXNzYWdlKQorCisgICAgICAgICAgICBtc2dzID0gc2VsZi5jaXJjdWxhcl9kZXBjaGFpbnNfaGFuZGxlcihwcm9ibGVtX3Rhc2tzKQorCisgICAgICAgICAgICBtZXNzYWdlID0gIlxuIgorICAgICAgICAgICAgZm9yIG1zZyBpbiBtc2dzOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgbXNnCisgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgbWVzc2FnZSkKKworICAgICAgICByZXR1cm4gd2VpZ2h0CisKKyAgICBkZWYgcHJlcGFyZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFR1cm4gYSBzZXQgb2YgdGFza0RhdGEgaW50byBhIFJ1blF1ZXVlIGFuZCBjb21wdXRlIGRhdGEgbmVlZGVkCisgICAgICAgIHRvIG9wdGltaXNlIHRoZSBleGVjdXRpb24gb3JkZXIuCisgICAgICAgICIiIgorCisgICAgICAgIHJ1bnFfYnVpbGQgPSBbXQorICAgICAgICByZWN1cnNpdmV0YXNrcyA9IHt9CisgICAgICAgIHJlY3Vyc2l2ZWl0YXNrcyA9IHt9CisgICAgICAgIHJlY3Vyc2l2ZXRhc2tzc2VsZnJlZiA9IHNldCgpCisKKyAgICAgICAgdGFza0RhdGEgPSBzZWxmLnRhc2tEYXRhCisKKyAgICAgICAgaWYgbGVuKHRhc2tEYXRhLnRhc2tzX25hbWUpID09IDA6CisgICAgICAgICAgICAjIE5vdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlByZXBhcmluZyBSdW5RdWV1ZSIpCisKKyAgICAgICAgIyBTdGVwIEEgLSBXb3JrIG91dCBhIGxpc3Qgb2YgdGFza3MgdG8gcnVuCisgICAgICAgICMKKyAgICAgICAgIyBUYXNrZGF0YSBnaXZlcyB1cyBhIGxpc3Qgb2YgcG9zc2libGUgcHJvdmlkZXJzIGZvciBldmVyeSBidWlsZCBhbmQgcnVuCisgICAgICAgICMgdGFyZ2V0IG9yZGVyZWQgYnkgcHJpb3JpdHkuIEl0IGFsc28gZ2l2ZXMgaW5mb3JtYXRpb24gb24gZWFjaCBvZiB0aG9zZQorICAgICAgICAjIHByb3ZpZGVycy4KKyAgICAgICAgIworICAgICAgICAjIFRvIGNyZWF0ZSB0aGUgYWN0dWFsIGxpc3Qgb2YgdGFza3MgdG8gZXhlY3V0ZSB3ZSBmaXggdGhlIGxpc3Qgb2YKKyAgICAgICAgIyBwcm92aWRlcnMgYW5kIHRoZW4gcmVzb2x2ZSB0aGUgZGVwZW5kZW5jaWVzIGludG8gdGFzayBJRHMuIFRoaXMKKyAgICAgICAgIyBwcm9jZXNzIGlzIHJlcGVhdGVkIGZvciBlYWNoIHR5cGUgb2YgZGVwZW5kZW5jeSAodGRlcGVuZHMsIGRlcHRhc2ssCisgICAgICAgICMgcmRlcHRhc3QsIHJlY3JkZXB0YXNrLCBpZGVwZW5kcykuCisKKyAgICAgICAgZGVmIGFkZF9idWlsZF9kZXBlbmRlbmNpZXMoZGVwaWRzLCB0YXNrbmFtZXMsIGRlcGVuZHMpOgorICAgICAgICAgICAgZm9yIGRlcGlkIGluIGRlcGlkczoKKyAgICAgICAgICAgICAgICAjIFdvbid0IGJlIGluIGJ1aWxkX3RhcmdldHMgaWYgQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHRhc2tEYXRhLmJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgaWYgZGVwZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgdGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKworICAgICAgICBkZWYgYWRkX3J1bnRpbWVfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKKyAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6CisgICAgICAgICAgICAgICAgaWYgZGVwaWQgbm90IGluIHRhc2tEYXRhLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcGRhdGEgPSB0YXNrRGF0YS5ydW5fdGFyZ2V0c1tkZXBpZF1bMF0KKyAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChkZXBkYXRhLCB0YXNrbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFza2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcy5hZGQodGFza2lkKQorCisgICAgICAgIGRlZiBhZGRfcmVzb2x2ZWRfZGVwZW5kZW5jaWVzKGRlcGlkcywgdGFza25hbWVzLCBkZXBlbmRzKToKKyAgICAgICAgICAgIGZvciBkZXBpZCBpbiBkZXBpZHM6CisgICAgICAgICAgICAgICAgZm9yIHRhc2tuYW1lIGluIHRhc2tuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdGFza2lkID0gdGFza0RhdGEuZ2V0dGFza19pZF9mcm9tZm5pZChkZXBpZCwgdGFza25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHRhc2tEYXRhLnRhc2tzX25hbWUpKToKKyAgICAgICAgICAgIGRlcGVuZHMgPSBzZXQoKQorICAgICAgICAgICAgZm5pZCA9IHRhc2tEYXRhLnRhc2tzX2ZuaWRbdGFza10KKyAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHRhc2tfZGVwcyA9IHNlbGYuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgI2xvZ2dlci5kZWJ1ZygyLCAiUHJvY2Vzc2luZyAlczolcyIsIGZuLCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdKQorCisgICAgICAgICAgICBpZiBmbmlkIG5vdCBpbiB0YXNrRGF0YS5mYWlsZWRfZm5pZHM6CisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgdGFzayBpbnRlcm5hbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGFkZHRhc2sgYmVmb3JlIFggYWZ0ZXIgWQorICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBzZXQodGFza0RhdGEudGFza3NfdGRlcGVuZHNbdGFza10pCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgJ2RlcHRhc2snIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGUuZy4gZG9fc29tZXRhc2tbZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgREVQRU5EUykKKyAgICAgICAgICAgICAgICBpZiAnZGVwdGFzaycgaW4gdGFza19kZXBzIGFuZCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tfZGVwc1snZGVwdGFzayddOgorICAgICAgICAgICAgICAgICAgICB0YXNrbmFtZXMgPSB0YXNrX2RlcHNbJ2RlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGFkZF9idWlsZF9kZXBlbmRlbmNpZXModGFza0RhdGEuZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgJ3JkZXB0YXNrJyBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW3JkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgorICAgICAgICAgICAgICAgICMgKG1ha2VzIHN1cmUgc29tZXRhc2sgcnVucyBhZnRlciBzb21lb3RoZXJ0YXNrIG9mIGFsbCBSREVQRU5EUykKKyAgICAgICAgICAgICAgICBpZiAncmRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JkZXB0YXNrJ106CisgICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lcyA9IHRhc2tfZGVwc1sncmRlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5yZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgaW50ZXItdGFzayBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW2RlcGVuZHNdID0gInRhcmdldG5hbWU6ZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgdGFyZ2V0bmFtZSdzIHNvbWVvdGhlcnRhc2spCisgICAgICAgICAgICAgICAgaWRlcGVuZHMgPSB0YXNrRGF0YS50YXNrc19pZGVwZW5kc1t0YXNrXQorICAgICAgICAgICAgICAgIGZvciAoZGVwaWQsIGlkZXBlbmR0YXNrKSBpbiBpZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwaWQgaW4gdGFza0RhdGEuYnVpbGRfdGFyZ2V0cyBhbmQgbm90IGRlcGlkIGluIHRhc2tEYXRhLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXb24ndCBiZSBpbiBidWlsZF90YXJnZXRzIGlmIEFTU1VNRV9QUk9WSURFRAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgaWRlcGVuZHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza2lkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBpbiAlcyBkZXBlbmRzIHVwb24gbm9uLWV4aXN0ZW50IHRhc2sgJXMgaW4gJXMiICUgKHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10sIGZuLCBpZGVwZW5kdGFzaywgdGFza0RhdGEuZm5faW5kZXhbZGVwZGF0YV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYWRkKHRhc2tpZCkKKyAgICAgICAgICAgICAgICBpcmRlcGVuZHMgPSB0YXNrRGF0YS50YXNrc19pcmRlcGVuZHNbdGFza10KKyAgICAgICAgICAgICAgICBmb3IgKGRlcGlkLCBpZGVwZW5kdGFzaykgaW4gaXJkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXBpZCBpbiB0YXNrRGF0YS5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV29uJ3QgYmUgaW4gcnVuX3RhcmdldHMgaWYgQVNTVU1FX1BST1ZJREVECisgICAgICAgICAgICAgICAgICAgICAgICBkZXBkYXRhID0gdGFza0RhdGEucnVuX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tpZCA9IHRhc2tEYXRhLmdldHRhc2tfaWRfZnJvbWZuaWQoZGVwZGF0YSwgaWRlcGVuZHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza2lkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiVGFzayAlcyBpbiAlcyByZGVwZW5kcyB1cG9uIG5vbi1leGlzdGVudCB0YXNrICVzIGluICVzIiAlICh0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdLCBmbiwgaWRlcGVuZHRhc2ssIHRhc2tEYXRhLmZuX2luZGV4W2RlcGRhdGFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFkZCh0YXNraWQpCisKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgcmVjdXJzaXZlICdyZWNyZGVwdGFzaycgZGVwZW5kZW5jaWVzIChQYXJ0IEEpCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgZS5nLiBkb19zb21ldGFza1tyZWNyZGVwdGFza10gPSAiZG9fc29tZW90aGVydGFzayIKKyAgICAgICAgICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgREVQRU5EUywgUkRFUEVORFMgYW5kIGludGVydGFzayBkZXBlbmRlbmNpZXMsIHJlY3Vyc2l2ZWx5KQorICAgICAgICAgICAgICAgICMgV2UgY292ZXIgdGhlIHJlY3Vyc2l2ZSBwYXJ0IG9mIHRoZSBkZXBlbmRlbmNpZXMgYmVsb3cKKyAgICAgICAgICAgICAgICBpZiAncmVjcmRlcHRhc2snIGluIHRhc2tfZGVwcyBhbmQgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSBpbiB0YXNrX2RlcHNbJ3JlY3JkZXB0YXNrJ106CisgICAgICAgICAgICAgICAgICAgIHRhc2tuYW1lcyA9IHRhc2tfZGVwc1sncmVjcmRlcHRhc2snXVt0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZXRhc2tzW3Rhc2tdID0gdGFza25hbWVzCisgICAgICAgICAgICAgICAgICAgIGFkZF9idWlsZF9kZXBlbmRlbmNpZXModGFza0RhdGEuZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisgICAgICAgICAgICAgICAgICAgIGFkZF9ydW50aW1lX2RlcGVuZGVuY2llcyh0YXNrRGF0YS5yZGVwaWRzW2ZuaWRdLCB0YXNrbmFtZXMsIGRlcGVuZHMpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10gaW4gdGFza25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZldGFza3NzZWxmcmVmLmFkZCh0YXNrKQorCisgICAgICAgICAgICAgICAgICAgIGlmICdyZWNpZGVwdGFzaycgaW4gdGFza19kZXBzIGFuZCB0YXNrRGF0YS50YXNrc19uYW1lW3Rhc2tdIGluIHRhc2tfZGVwc1sncmVjaWRlcHRhc2snXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWl0YXNrc1t0YXNrXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0YXNrX2RlcHNbJ3JlY2lkZXB0YXNrJ11bdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSB0YXNrRGF0YS5nZXR0YXNrX2lkX2Zyb21mbmlkKGZuaWQsIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlaXRhc2tzW3Rhc2tdLmFwcGVuZChuZXdkZXApCisKKyAgICAgICAgICAgIHNlbGYucnVucV9mbmlkLmFwcGVuZCh0YXNrRGF0YS50YXNrc19mbmlkW3Rhc2tdKQorICAgICAgICAgICAgc2VsZi5ydW5xX3Rhc2suYXBwZW5kKHRhc2tEYXRhLnRhc2tzX25hbWVbdGFza10pCisgICAgICAgICAgICBzZWxmLnJ1bnFfZGVwZW5kcy5hcHBlbmQoZGVwZW5kcykKKyAgICAgICAgICAgIHNlbGYucnVucV9yZXZkZXBzLmFwcGVuZChzZXQoKSkKKyAgICAgICAgICAgIHNlbGYucnVucV9oYXNoLmFwcGVuZCgiIikKKworICAgICAgICAgICAgcnVucV9idWlsZC5hcHBlbmQoMCkKKworICAgICAgICAjIFJlc29sdmUgcmVjdXJzaXZlICdyZWNyZGVwdGFzaycgZGVwZW5kZW5jaWVzIChQYXJ0IEIpCisgICAgICAgICMKKyAgICAgICAgIyBlLmcuIGRvX3NvbWV0YXNrW3JlY3JkZXB0YXNrXSA9ICJkb19zb21lb3RoZXJ0YXNrIgorICAgICAgICAjIChtYWtlcyBzdXJlIHNvbWV0YXNrIHJ1bnMgYWZ0ZXIgc29tZW90aGVydGFzayBvZiBhbGwgREVQRU5EUywgUkRFUEVORFMgYW5kIGludGVydGFzayBkZXBlbmRlbmNpZXMsIHJlY3Vyc2l2ZWx5KQorICAgICAgICAjIFdlIG5lZWQgdG8gZG8gdGhpcyBzZXBhcmF0ZWx5IHNpbmNlIHdlIG5lZWQgYWxsIG9mIHNlbGYucnVucV9kZXBlbmRzIHRvIGJlIGNvbXBsZXRlIGJlZm9yZSB0aGlzIGlzIHByb2Nlc3NlZAorICAgICAgICBleHRyYWRlcHMgPSB7fQorICAgICAgICBmb3IgdGFzayBpbiByZWN1cnNpdmV0YXNrczoKKyAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXSA9IHNldChzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXSkKKyAgICAgICAgICAgIHRhc2tuYW1lcyA9IHJlY3Vyc2l2ZXRhc2tzW3Rhc2tdCisgICAgICAgICAgICBzZWVuZGVwcyA9IHNldCgpCisgICAgICAgICAgICBzZWVuZm5pZCA9IFtdCisKKyAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9yZWNkZXBzKHQpOgorICAgICAgICAgICAgICAgIG5ld2RlcHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIGFkZF9yZXNvbHZlZF9kZXBlbmRlbmNpZXMoW3Rhc2tEYXRhLnRhc2tzX2ZuaWRbdF1dLCB0YXNrbmFtZXMsIG5ld2RlcHMpCisgICAgICAgICAgICAgICAgZXh0cmFkZXBzW3Rhc2tdLnVwZGF0ZShuZXdkZXBzKQorICAgICAgICAgICAgICAgIHNlZW5kZXBzLmFkZCh0KQorICAgICAgICAgICAgICAgIG5ld2RlcHMuYWRkKHQpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gbmV3ZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gc2VsZi5ydW5xX2RlcGVuZHNbaV06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuIG5vdCBpbiBzZWVuZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKG4pCisgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKHRhc2spCisKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gcmVjdXJzaXZlaXRhc2tzOgorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gcmVjdXJzaXZlaXRhc2tzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9yZWNkZXBzKGRlcCkKKworICAgICAgICAjIFJlbW92ZSBjaXJjdWxhciByZWZlcmVuY2VzIHNvIHRoYXQgZG9fYVtyZWNyZGVwdGFza10gPSAiZG9fYSBkb19iIiBjYW4gd29yaworICAgICAgICBmb3IgdGFzayBpbiByZWN1cnNpdmV0YXNrczoKKyAgICAgICAgICAgIGV4dHJhZGVwc1t0YXNrXS5kaWZmZXJlbmNlX3VwZGF0ZShyZWN1cnNpdmV0YXNrc3NlbGZyZWYpCisKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbih0YXNrRGF0YS50YXNrc19uYW1lKSk6CisgICAgICAgICAgICAjIEFkZCBpbiBleHRyYSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gZXh0cmFkZXBzOgorICAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXSA9IGV4dHJhZGVwc1t0YXNrXQorICAgICAgICAgICAgIyBSZW1vdmUgYWxsIHNlbGYgcmVmZXJlbmNlcworICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlRhc2sgJXMgKCVzICVzKSBjb250YWlucyBzZWxmIHJlZmVyZW5jZSEgJXMiLCB0YXNrLCB0YXNrRGF0YS5mbl9pbmRleFt0YXNrRGF0YS50YXNrc19mbmlkW3Rhc2tdXSwgdGFza0RhdGEudGFza3NfbmFtZVt0YXNrXSwgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10pCisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbdGFza10ucmVtb3ZlKHRhc2spCisKKyAgICAgICAgIyBTdGVwIEIgLSBNYXJrIGFsbCBhY3RpdmUgdGFza3MKKyAgICAgICAgIworICAgICAgICAjIFN0YXJ0IHdpdGggdGhlIHRhc2tzIHdlIHdlcmUgYXNrZWQgdG8gcnVuIGFuZCBtYXJrIGFsbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgIyBhcyBhY3RpdmUgdG9vLiBJZiB0aGUgdGFzayBpcyB0byBiZSAnZm9yY2VkJywgY2xlYXIgaXRzIHN0YW1wLiBPbmNlCisgICAgICAgICMgYWxsIGFjdGl2ZSB0YXNrcyBhcmUgbWFya2VkLCBwcnVuZSB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJNYXJraW5nIEFjdGl2ZSBUYXNrcyIpCisKKyAgICAgICAgZGVmIG1hcmtfYWN0aXZlKGxpc3RpZCwgZGVwdGgpOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBNYXJrIGFuIGl0ZW0gYXMgYWN0aXZlIGFsb25nIHdpdGggaXRzIGRlcGVuZHMKKyAgICAgICAgICAgIChjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkpCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgaWYgcnVucV9idWlsZFtsaXN0aWRdID09IDE6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHJ1bnFfYnVpbGRbbGlzdGlkXSA9IDEKKworICAgICAgICAgICAgZGVwZW5kcyA9IHNlbGYucnVucV9kZXBlbmRzW2xpc3RpZF0KKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZW5kczoKKyAgICAgICAgICAgICAgICBtYXJrX2FjdGl2ZShkZXBlbmQsIGRlcHRoKzEpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcGFpcnMgPSBbXQorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYudGFyZ2V0czoKKyAgICAgICAgICAgIHRhcmdldGlkID0gdGFza0RhdGEuZ2V0YnVpbGRfaWQodGFyZ2V0WzBdKQorCisgICAgICAgICAgICBpZiB0YXJnZXRpZCBub3QgaW4gdGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiB0YXJnZXRpZCBpbiB0YXNrRGF0YS5mYWlsZWRfZGVwczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmbmlkID0gdGFza0RhdGEuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF1bMF0KKyAgICAgICAgICAgIGZuID0gdGFza0RhdGEuZm5faW5kZXhbZm5pZF0KKyAgICAgICAgICAgIHNlbGYudGFyZ2V0X3BhaXJzLmFwcGVuZCgoZm4sIHRhcmdldFsxXSkpCisKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gdGFza0RhdGEuZmFpbGVkX2ZuaWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHRhcmdldFsxXSBub3QgaW4gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgICAgIGltcG9ydCBkaWZmbGliCisgICAgICAgICAgICAgICAgY2xvc2VfbWF0Y2hlcyA9IGRpZmZsaWIuZ2V0X2Nsb3NlX21hdGNoZXModGFyZ2V0WzFdLCB0YXNrRGF0YS50YXNrc19sb29rdXBbZm5pZF0sIGN1dG9mZj0wLjcpCisgICAgICAgICAgICAgICAgaWYgY2xvc2VfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSAiLiBDbG9zZSBtYXRjaGVzOlxuICAlcyIgJSAiXG4gICIuam9pbihjbG9zZV9tYXRjaGVzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIiIKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgZG9lcyBub3QgZXhpc3QgZm9yIHRhcmdldCAlcyVzIiAlICh0YXJnZXRbMV0sIHRhcmdldFswXSwgZXh0cmEpKQorCisgICAgICAgICAgICBsaXN0aWQgPSB0YXNrRGF0YS50YXNrc19sb29rdXBbZm5pZF1bdGFyZ2V0WzFdXQorCisgICAgICAgICAgICBtYXJrX2FjdGl2ZShsaXN0aWQsIDEpCisKKyAgICAgICAgIyBTdGVwIEMgLSBQcnVuZSBhbGwgaW5hY3RpdmUgdGFza3MKKyAgICAgICAgIworICAgICAgICAjIE9uY2UgYWxsIGFjdGl2ZSB0YXNrcyBhcmUgbWFya2VkLCBwcnVuZSB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCisgICAgICAgIG1hcHMgPSBbXQorICAgICAgICBkZWxjb3VudCA9IDAKKyAgICAgICAgZm9yIGxpc3RpZCBpbiB4cmFuZ2UobGVuKHNlbGYucnVucV9mbmlkKSk6CisgICAgICAgICAgICBpZiBydW5xX2J1aWxkW2xpc3RpZC1kZWxjb3VudF0gPT0gMToKKyAgICAgICAgICAgICAgICBtYXBzLmFwcGVuZChsaXN0aWQtZGVsY291bnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfZm5pZFtsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYucnVucV90YXNrW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbCBydW5xX2J1aWxkW2xpc3RpZC1kZWxjb3VudF0KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5ydW5xX3JldmRlcHNbbGlzdGlkLWRlbGNvdW50XQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJ1bnFfaGFzaFtsaXN0aWQtZGVsY291bnRdCisgICAgICAgICAgICAgICAgZGVsY291bnQgPSBkZWxjb3VudCArIDEKKyAgICAgICAgICAgICAgICBtYXBzLmFwcGVuZCgtMSkKKworICAgICAgICAjCisgICAgICAgICMgU3RlcCBEIC0gU2FuaXR5IGNoZWNrcyBhbmQgY29tcHV0YXRpb24KKyAgICAgICAgIworCisgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgdGFza3MgdG8gcnVuCisgICAgICAgIGlmIGxlbihzZWxmLnJ1bnFfZm5pZCkgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCB0YXNrRGF0YS5hYm9ydDoKKyAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIkFsbCBidWlsZGFibGUgdGFza3MgaGF2ZSBiZWVuIHJ1biBidXQgdGhlIGJ1aWxkIGlzIGluY29tcGxldGUgKC0tY29udGludWUgbW9kZSkuIEVycm9ycyBmb3IgdGhlIHRhc2tzIHRoYXQgZmFpbGVkIHdpbGwgaGF2ZSBiZWVuIHByaW50ZWQgYWJvdmUuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJObyBhY3RpdmUgdGFza3MgYW5kIG5vdCBpbiAtLWNvbnRpbnVlIG1vZGU/ISBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnLiIpCisKKyAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIlBydW5lZCAlcyBpbmFjdGl2ZSB0YXNrcywgJXMgbGVmdCIsIGRlbGNvdW50LCBsZW4oc2VsZi5ydW5xX2ZuaWQpKQorCisgICAgICAgICMgUmVtYXAgdGhlIGRlcGVuZGVuY2llcyB0byBhY2NvdW50IGZvciB0aGUgZGVsZXRlZCB0YXNrcworICAgICAgICAjIENoZWNrIHdlIGRpZG4ndCBkZWxldGUgYSB0YXNrIHdlIGRlcGVuZCBvbgorICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIG5ld2RlcHMgPSBbXQorICAgICAgICAgICAgb3JpZ2RlcHMgPSBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdCisgICAgICAgICAgICBmb3Igb3JpZ2RlcCBpbiBvcmlnZGVwczoKKyAgICAgICAgICAgICAgICBpZiBtYXBzW29yaWdkZXBdID09IC0xOgorICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIkludmFsaWQgbWFwcGluZyAtIFNob3VsZCBuZXZlciBoYXBwZW4hIikKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChtYXBzW29yaWdkZXBdKQorICAgICAgICAgICAgc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXSA9IHNldChuZXdkZXBzKQorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJBc3NpZ24gV2VpZ2h0aW5ncyIpCisKKyAgICAgICAgIyBHZW5lcmF0ZSBhIGxpc3Qgb2YgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgdG8gZWFzZSBmdXR1cmUgY2FsY3VsYXRpb25zCisgICAgICAgIGZvciBsaXN0aWQgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJ1bnFfZGVwZW5kc1tsaXN0aWRdOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9yZXZkZXBzW2RlcF0uYWRkKGxpc3RpZCkKKworICAgICAgICAjIElkZW50aWZ5IHRhc2tzIGF0IHRoZSBlbmQgb2YgZGVwZW5kZW5jeSBjaGFpbnMKKyAgICAgICAgIyBFcnJvciBvbiBjaXJjdWxhciBkZXBlbmRlbmN5IGxvb3BzIChsZW5ndGggdHdvKQorICAgICAgICBlbmRwb2ludHMgPSBbXQorICAgICAgICBmb3IgbGlzdGlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIHJldmRlcHMgPSBzZWxmLnJ1bnFfcmV2ZGVwc1tsaXN0aWRdCisgICAgICAgICAgICBpZiBsZW4ocmV2ZGVwcykgPT0gMDoKKyAgICAgICAgICAgICAgICBlbmRwb2ludHMuYXBwZW5kKGxpc3RpZCkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcmV2ZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5ydW5xX2RlcGVuZHNbbGlzdGlkXToKKyAgICAgICAgICAgICAgICAgICAgI3NlbGYuZHVtcF9kYXRhKHRhc2tEYXRhKQorICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgIlRhc2sgJXMgKCVzKSBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBvbiAlcyAoJXMpIiAlICh0YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFtkZXBdXSwgc2VsZi5ydW5xX3Rhc2tbZGVwXSwgdGFza0RhdGEuZm5faW5kZXhbc2VsZi5ydW5xX2ZuaWRbbGlzdGlkXV0sIHNlbGYucnVucV90YXNrW2xpc3RpZF0pKQorCisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJDb21wdXRlIHRvdGFscyAoaGF2ZSAlcyBlbmRwb2ludChzKSkiLCBsZW4oZW5kcG9pbnRzKSkKKworICAgICAgICAjIENhbGN1bGF0ZSB0YXNrIHdlaWdodHMKKyAgICAgICAgIyBDaGVjayBvZiBoaWdoZXIgbGVuZ3RoIGNpcmN1bGFyIGRlcGVuZGVuY2llcworICAgICAgICBzZWxmLnJ1bnFfd2VpZ2h0ID0gc2VsZi5jYWxjdWxhdGVfdGFza193ZWlnaHRzKGVuZHBvaW50cykKKworICAgICAgICAjIFNhbml0eSBDaGVjayAtIENoZWNrIGZvciBtdWx0aXBsZSB0YXNrcyBidWlsZGluZyB0aGUgc2FtZSBwcm92aWRlcgorICAgICAgICBwcm92X2xpc3QgPSB7fQorICAgICAgICBzZWVuX2ZuID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgZm4gPSB0YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgIGlmIGZuIGluIHNlZW5fZm46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlZW5fZm4uYXBwZW5kKGZuKQorICAgICAgICAgICAgZm9yIHByb3YgaW4gc2VsZi5kYXRhQ2FjaGUuZm5fcHJvdmlkZXNbZm5dOgorICAgICAgICAgICAgICAgIGlmIHByb3Ygbm90IGluIHByb3ZfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdID0gW2ZuXQorICAgICAgICAgICAgICAgIGVsaWYgZm4gbm90IGluIHByb3ZfbGlzdFtwcm92XToKKyAgICAgICAgICAgICAgICAgICAgcHJvdl9saXN0W3Byb3ZdLmFwcGVuZChmbikKKyAgICAgICAgZm9yIHByb3YgaW4gcHJvdl9saXN0OgorICAgICAgICAgICAgaWYgbGVuKHByb3ZfbGlzdFtwcm92XSkgPiAxIGFuZCBwcm92IG5vdCBpbiBzZWxmLm11bHRpX3Byb3ZpZGVyX3doaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBzZWVuX3BuID0gW10KKyAgICAgICAgICAgICAgICAjIElmIHR3byB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBQTiBhcmUgYmVpbmcgYnVpbHQgaXRzIGZhdGFsLCB3ZSBkb24ndCBzdXBwb3J0IGl0LgorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBwcm92X2xpc3RbcHJvdl06CisgICAgICAgICAgICAgICAgICAgIHBuID0gc2VsZi5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICAgICAgICAgICAgICBpZiBwbiBub3QgaW4gc2Vlbl9wbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5fcG4uYXBwZW5kKHBuKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk11bHRpcGxlIHZlcnNpb25zIG9mICVzIGFyZSBkdWUgdG8gYmUgYnVpbHQgKCVzKS4gT25seSBvbmUgdmVyc2lvbiBvZiBhIGdpdmVuIFBOIHNob3VsZCBiZSBidWlsdCBpbiBhbnkgZ2l2ZW4gYnVpbGQuIFlvdSBsaWtlbHkgbmVlZCB0byBzZXQgUFJFRkVSUkVEX1ZFUlNJT05fJXMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IHZlcnNpb24gb3IgZG9uJ3QgZGVwZW5kIG9uIG11bHRpcGxlIHZlcnNpb25zLiIgJSAocG4sICIgIi5qb2luKHByb3ZfbGlzdFtwcm92XSksIHBuKSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiTXVsdGlwbGUgLmJiIGZpbGVzIGFyZSBkdWUgdG8gYmUgYnVpbHQgd2hpY2ggZWFjaCBwcm92aWRlICVzICglcykuIiAlIChwcm92LCAiICIuam9pbihwcm92X2xpc3RbcHJvdl0pKQorICAgICAgICAgICAgICAgIGlmIHNlbGYud2Fybl9tdWx0aV9iYjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiXG4gVGhpcyB1c3VhbGx5IG1lYW5zIG9uZSBwcm92aWRlcyBzb21ldGhpbmcgdGhlIG90aGVyIGRvZXNuJ3QgYW5kIHNob3VsZC4iCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihtc2cpCisKKyAgICAgICAgIyBDcmVhdGUgYSB3aGl0ZWxpc3QgdXNhYmxlIGJ5IHRoZSBzdGFtcCBjaGVja3MKKyAgICAgICAgc3RhbXBmbndoaXRlbGlzdCA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBzZWxmLnN0YW1wd2hpdGVsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICBlbnRyeWlkID0gc2VsZi50YXNrRGF0YS5nZXRidWlsZF9pZChlbnRyeSkKKyAgICAgICAgICAgIGlmIGVudHJ5aWQgbm90IGluIHNlbGYudGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm5pZCA9IHNlbGYudGFza0RhdGEuYnVpbGRfdGFyZ2V0c1tlbnRyeWlkXVswXQorICAgICAgICAgICAgZm4gPSBzZWxmLnRhc2tEYXRhLmZuX2luZGV4W2ZuaWRdCisgICAgICAgICAgICBzdGFtcGZud2hpdGVsaXN0LmFwcGVuZChmbikKKyAgICAgICAgc2VsZi5zdGFtcGZud2hpdGVsaXN0ID0gc3RhbXBmbndoaXRlbGlzdAorCisgICAgICAgICMgSXRlcmF0ZSBvdmVyIHRoZSB0YXNrIGxpc3QgbG9va2luZyBmb3IgdGFza3Mgd2l0aCBhICdzZXRzY2VuZScgZnVuY3Rpb24KKyAgICAgICAgc2VsZi5ydW5xX3NldHNjZW5lID0gW10KKyAgICAgICAgaWYgbm90IHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24ubm9zZXRzY2VuZToKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgICAgIHNldHNjZW5lID0gdGFza0RhdGEuZ2V0dGFza19pZChzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ydW5xX3Rhc2tbdGFza10gKyAiX3NldHNjZW5lIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWYgbm90IHNldHNjZW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYucnVucV9zZXRzY2VuZS5hcHBlbmQodGFzaykKKworICAgICAgICBkZWYgaW52YWxpZGF0ZV90YXNrKGZuLCB0YXNrbmFtZSwgZXJyb3Jfbm9zdGFtcCk6CisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgZm5pZCA9IHNlbGYudGFza0RhdGEuZ2V0Zm5faWQoZm4pCisgICAgICAgICAgICBpZiB0YXNrbmFtZSBub3QgaW4gdGFza0RhdGEudGFza3NfbG9va3VwW2ZuaWRdOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUYXNrICVzIGRvZXMgbm90IGV4aXN0LCBpbnZhbGlkYXRpbmcgdGhpcyB0YXNrIHdpbGwgaGF2ZSBubyBlZmZlY3QiICUgdGFza25hbWUpCisgICAgICAgICAgICBpZiAnbm9zdGFtcCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9zdGFtcCddOgorICAgICAgICAgICAgICAgIGlmIGVycm9yX25vc3RhbXA6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUYXNrICVzIGlzIG1hcmtlZCBub3N0YW1wLCBjYW5ub3QgaW52YWxpZGF0ZSB0aGlzIHRhc2siICUgdGFza25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIlRhc2sgJXMgaXMgbWFya2VkIG5vc3RhbXAsIGNhbm5vdCBpbnZhbGlkYXRlIHRoaXMgdGFzayIgJSB0YXNrbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoIkludmFsaWRhdGUgdGFzayAlcywgJXMiLCB0YXNrbmFtZSwgZm4pCisgICAgICAgICAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmludmFsaWRhdGVfdGFzayh0YXNrbmFtZSwgc2VsZi5kYXRhQ2FjaGUsIGZuKQorCisgICAgICAgICMgSW52YWxpZGF0ZSB0YXNrIGlmIGZvcmNlIG1vZGUgYWN0aXZlCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2U6CisgICAgICAgICAgICBmb3IgKGZuLCB0YXJnZXQpIGluIHNlbGYudGFyZ2V0X3BhaXJzOgorICAgICAgICAgICAgICAgIGludmFsaWRhdGVfdGFzayhmbiwgdGFyZ2V0LCBGYWxzZSkKKworICAgICAgICAjIEludmFsaWRhdGUgdGFzayBpZiBpbnZhbGlkYXRlIG1vZGUgYWN0aXZlCisgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uaW52YWxpZGF0ZV9zdGFtcDoKKyAgICAgICAgICAgIGZvciAoZm4sIHRhcmdldCkgaW4gc2VsZi50YXJnZXRfcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIHN0IGluIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uaW52YWxpZGF0ZV9zdGFtcC5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3Quc3RhcnRzd2l0aCgiZG9fIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzdCA9ICJkb18lcyIgJSBzdAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX3Rhc2soZm4sIHN0LCBUcnVlKQorCisgICAgICAgICMgSXRlcmF0ZSBvdmVyIHRoZSB0YXNrIGxpc3QgYW5kIGNhbGwgaW50byB0aGUgc2lnZ2VuIGNvZGUKKyAgICAgICAgZGVhbHR3aXRoID0gc2V0KCkKKyAgICAgICAgdG9kZWFsID0gc2V0KHJhbmdlKGxlbihzZWxmLnJ1bnFfZm5pZCkpKQorICAgICAgICB3aGlsZSBsZW4odG9kZWFsKSA+IDA6CisgICAgICAgICAgICBmb3IgdGFzayBpbiB0b2RlYWwuY29weSgpOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJ1bnFfZGVwZW5kc1t0YXNrXSAtIGRlYWx0d2l0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZGVhbHR3aXRoLmFkZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICB0b2RlYWwucmVtb3ZlKHRhc2spCisgICAgICAgICAgICAgICAgICAgIHByb2NkZXAgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHNlbGYucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2RlcC5hcHBlbmQoc2VsZi50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJ1bnFfZm5pZFtkZXBdXSArICIuIiArIHNlbGYucnVucV90YXNrW2RlcF0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVucV9oYXNoW3Rhc2tdID0gYmIucGFyc2Uuc2lnZ2VuLmdldF90YXNraGFzaChzZWxmLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnVucV9mbmlkW3Rhc2tdXSwgc2VsZi5ydW5xX3Rhc2tbdGFza10sIHByb2NkZXAsIHNlbGYuZGF0YUNhY2hlKQorCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5ydW5xX2ZuaWQpCisKKyAgICBkZWYgZHVtcF9kYXRhKHNlbGYsIHRhc2tRdWV1ZSk6CisgICAgICAgICIiIgorICAgICAgICBEdW1wIHNvbWUgZGVidWcgaW5mb3JtYXRpb24gb24gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJydW5fdGFza3M6IikKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX3Rhc2spKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyAgIERlcHMgJXMgUmV2RGVwcyAlcyIsIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgdGFza1F1ZXVlLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0W3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfZGVwZW5kc1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICJzb3J0ZWRfdGFza3M6IikKKyAgICAgICAgZm9yIHRhc2sxIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6CisgICAgICAgICAgICBpZiB0YXNrMSBpbiBzZWxmLnByaW9fbWFwOgorICAgICAgICAgICAgICAgIHRhc2sgPSBzZWxmLnByaW9fbWFwW3Rhc2sxXQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyAgIERlcHMgJXMgUmV2RGVwcyAlcyIsIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrUXVldWUuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnFkYXRhLnJ1bnFfd2VpZ2h0W3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdKQorCitjbGFzcyBSdW5RdWV1ZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29va2VyLCBjZmdEYXRhLCBkYXRhQ2FjaGUsIHRhc2tEYXRhLCB0YXJnZXRzKToKKworICAgICAgICBzZWxmLmNvb2tlciA9IGNvb2tlcgorICAgICAgICBzZWxmLmNmZ0RhdGEgPSBjZmdEYXRhCisgICAgICAgIHNlbGYucnFkYXRhID0gUnVuUXVldWVEYXRhKHNlbGYsIGNvb2tlciwgY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXNrRGF0YSwgdGFyZ2V0cykKKworICAgICAgICBzZWxmLnN0YW1wcG9saWN5ID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NUQU1QX1BPTElDWSIsIFRydWUpIG9yICJwZXJmaWxlIgorICAgICAgICBzZWxmLmhhc2h2YWxpZGF0ZSA9IGNmZ0RhdGEuZ2V0VmFyKCJCQl9IQVNIQ0hFQ0tfRlVOQ1RJT04iLCBUcnVlKSBvciBOb25lCisgICAgICAgIHNlbGYuc2V0c2NlbmV2ZXJpZnkgPSBjZmdEYXRhLmdldFZhcigiQkJfU0VUU0NFTkVfVkVSSUZZX0ZVTkNUSU9OIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLmRlcHZhbGlkYXRlID0gY2ZnRGF0YS5nZXRWYXIoIkJCX1NFVFNDRU5FX0RFUFZBTElEIiwgVHJ1ZSkgb3IgTm9uZQorCisgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZVByZXBhcmUKKworICAgICAgICAjIEZvciBkaXNrIHNwYWNlIG1vbml0b3IKKyAgICAgICAgc2VsZi5kbSA9IG1vbml0b3JkaXNrLmRpc2tNb25pdG9yKGNmZ0RhdGEpCisKKyAgICAgICAgc2VsZi5ycWV4ZSA9IE5vbmUKKyAgICAgICAgc2VsZi53b3JrZXIgPSBOb25lCisgICAgICAgIHNlbGYud29ya2VycGlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5mYWtld29ya2VyID0gTm9uZQorICAgICAgICBzZWxmLmZha2V3b3JrZXJwaXBlID0gTm9uZQorCisgICAgZGVmIF9zdGFydF93b3JrZXIoc2VsZiwgZmFrZXJvb3QgPSBGYWxzZSwgcnFleGVjID0gTm9uZSk6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiU3RhcnRpbmcgYml0YmFrZS13b3JrZXIiKQorICAgICAgICBtYWdpYyA9ICJkZWNhZmJhZCIKKyAgICAgICAgaWYgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5wcm9maWxlOgorICAgICAgICAgICAgbWFnaWMgPSAiZGVjYWZiYWRiYWQiCisgICAgICAgIGlmIGZha2Vyb290OgorICAgICAgICAgICAgZmFrZXJvb3RjbWQgPSBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJGQUtFUk9PVENNRCIsIFRydWUpCisgICAgICAgICAgICBmYWtlcm9vdGVudiA9IChzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJGQUtFUk9PVEJBU0VFTlYiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluICh2YXIuc3BsaXQoJz0nKSBmb3IgdmFyIGluIGZha2Vyb290ZW52KToKKyAgICAgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCisgICAgICAgICAgICB3b3JrZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtmYWtlcm9vdGNtZCwgImJpdGJha2Utd29ya2VyIiwgbWFnaWNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3b3JrZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFsiYml0YmFrZS13b3JrZXIiLCBtYWdpY10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZCh3b3JrZXIuc3Rkb3V0KQorICAgICAgICB3b3JrZXJwaXBlID0gcnVuUXVldWVQaXBlKHdvcmtlci5zdGRvdXQsIE5vbmUsIHNlbGYuY2ZnRGF0YSwgc2VsZiwgcnFleGVjKQorCisgICAgICAgIHdvcmtlcmRhdGEgPSB7CisgICAgICAgICAgICAidGFza2RlcHMiIDogc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwcywKKyAgICAgICAgICAgICJmYWtlcm9vdGVudiIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3RlbnYsCisgICAgICAgICAgICAiZmFrZXJvb3RkaXJzIiA6IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5mYWtlcm9vdGRpcnMsCisgICAgICAgICAgICAiZmFrZXJvb3Rub2VudiIgOiBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuZmFrZXJvb3Rub2VudiwKKyAgICAgICAgICAgICJzaWdkYXRhIiA6IGJiLnBhcnNlLnNpZ2dlbi5nZXRfdGFza2RhdGEoKSwKKyAgICAgICAgICAgICJydW5xX2hhc2giIDogc2VsZi5ycWRhdGEucnVucV9oYXNoLAorICAgICAgICAgICAgImxvZ2RlZmF1bHRkZWJ1ZyIgOiBiYi5tc2cubG9nZ2VyRGVmYXVsdERlYnVnTGV2ZWwsCisgICAgICAgICAgICAibG9nZGVmYXVsdHZlcmJvc2UiIDogYmIubXNnLmxvZ2dlckRlZmF1bHRWZXJib3NlLAorICAgICAgICAgICAgImxvZ2RlZmF1bHR2ZXJib3NlbG9ncyIgOiBiYi5tc2cubG9nZ2VyVmVyYm9zZUxvZ3MsCisgICAgICAgICAgICAibG9nZGVmYXVsdGRvbWFpbiIgOiBiYi5tc2cubG9nZ2VyRGVmYXVsdERvbWFpbnMsCisgICAgICAgICAgICAicHJob3N0IiA6IHNlbGYuY29va2VyLnByaG9zdCwKKyAgICAgICAgICAgICJidWlsZG5hbWUiIDogc2VsZi5jZmdEYXRhLmdldFZhcigiQlVJTEROQU1FIiwgVHJ1ZSksCisgICAgICAgICAgICAiZGF0ZSIgOiBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJEQVRFIiwgVHJ1ZSksCisgICAgICAgICAgICAidGltZSIgOiBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJUSU1FIiwgVHJ1ZSksCisgICAgICAgIH0KKworICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoIjxjb29rZXJjb25maWc+IiArIHBpY2tsZS5kdW1wcyhzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uKSArICI8L2Nvb2tlcmNvbmZpZz4iKQorICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoIjx3b3JrZXJkYXRhPiIgKyBwaWNrbGUuZHVtcHMod29ya2VyZGF0YSkgKyAiPC93b3JrZXJkYXRhPiIpCisgICAgICAgIHdvcmtlci5zdGRpbi5mbHVzaCgpCisKKyAgICAgICAgcmV0dXJuIHdvcmtlciwgd29ya2VycGlwZQorCisgICAgZGVmIF90ZWFyZG93bl93b3JrZXIoc2VsZiwgd29ya2VyLCB3b3JrZXJwaXBlKToKKyAgICAgICAgaWYgbm90IHdvcmtlcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBsb2dnZXIuZGVidWcoMSwgIlRlYXJkb3duIGZvciBiaXRiYWtlLXdvcmtlciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgd29ya2VyLnN0ZGluLndyaXRlKCI8cXVpdD48L3F1aXQ+IikKKyAgICAgICAgICAgd29ya2VyLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2hpbGUgd29ya2VyLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdvcmtlcnBpcGUucmVhZCgpCisgICAgICAgICAgICB3b3JrZXIucG9sbCgpCisgICAgICAgIHdoaWxlIHdvcmtlcnBpcGUucmVhZCgpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd29ya2VycGlwZS5jbG9zZSgpCisKKyAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLndvcmtlcjoKKyAgICAgICAgICAgIHNlbGYudGVhcmRvd25fd29ya2VycygpCisgICAgICAgIHNlbGYudGVhcmRvd24gPSBGYWxzZQorICAgICAgICBzZWxmLndvcmtlciwgc2VsZi53b3JrZXJwaXBlID0gc2VsZi5fc3RhcnRfd29ya2VyKCkKKworICAgIGRlZiBzdGFydF9mYWtld29ya2VyKHNlbGYsIHJxZXhlYyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmZha2V3b3JrZXI6CisgICAgICAgICAgICBzZWxmLmZha2V3b3JrZXIsIHNlbGYuZmFrZXdvcmtlcnBpcGUgPSBzZWxmLl9zdGFydF93b3JrZXIoVHJ1ZSwgcnFleGVjKQorCisgICAgZGVmIHRlYXJkb3duX3dvcmtlcnMoc2VsZik6CisgICAgICAgIHNlbGYudGVhcmRvd24gPSBUcnVlCisgICAgICAgIHNlbGYuX3RlYXJkb3duX3dvcmtlcihzZWxmLndvcmtlciwgc2VsZi53b3JrZXJwaXBlKQorICAgICAgICBzZWxmLndvcmtlciA9IE5vbmUKKyAgICAgICAgc2VsZi53b3JrZXJwaXBlID0gTm9uZQorICAgICAgICBzZWxmLl90ZWFyZG93bl93b3JrZXIoc2VsZi5mYWtld29ya2VyLCBzZWxmLmZha2V3b3JrZXJwaXBlKQorICAgICAgICBzZWxmLmZha2V3b3JrZXIgPSBOb25lCisgICAgICAgIHNlbGYuZmFrZXdvcmtlcnBpcGUgPSBOb25lCisKKyAgICBkZWYgcmVhZF93b3JrZXJzKHNlbGYpOgorICAgICAgICBzZWxmLndvcmtlcnBpcGUucmVhZCgpCisgICAgICAgIGlmIHNlbGYuZmFrZXdvcmtlcnBpcGU6CisgICAgICAgICAgICBzZWxmLmZha2V3b3JrZXJwaXBlLnJlYWQoKQorCisgICAgZGVmIGFjdGl2ZV9mZHMoc2VsZik6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGlmIHNlbGYud29ya2VycGlwZToKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoc2VsZi53b3JrZXJwaXBlLmlucHV0KQorICAgICAgICBpZiBzZWxmLmZha2V3b3JrZXJwaXBlOgorICAgICAgICAgICAgZmRzLmFwcGVuZChzZWxmLmZha2V3b3JrZXJwaXBlLmlucHV0KQorICAgICAgICByZXR1cm4gZmRzCisKKyAgICBkZWYgY2hlY2tfc3RhbXBfdGFzayhzZWxmLCB0YXNrLCB0YXNrbmFtZSA9IE5vbmUsIHJlY3Vyc2UgPSBGYWxzZSwgY2FjaGUgPSBOb25lKToKKyAgICAgICAgZGVmIGdldF90aW1lc3RhbXAoZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhmLCBvcy5GX09LKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Muc3RhdChmKVtzdGF0LlNUX01USU1FXQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgc2VsZi5zdGFtcHBvbGljeSA9PSAicGVyZmlsZSI6CisgICAgICAgICAgICBmdWxsZGVwdHJlZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdWxsZGVwdHJlZSA9IFRydWUKKyAgICAgICAgICAgIHN0YW1wd2hpdGVsaXN0ID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYuc3RhbXBwb2xpY3kgPT0gIndoaXRlbGlzdCI6CisgICAgICAgICAgICAgICAgc3RhbXB3aGl0ZWxpc3QgPSBzZWxmLnJxZGF0YS5zdGFtcGZud2hpdGVsaXN0CisKKyAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgIGlmIHRhc2tuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorCisgICAgICAgIHN0YW1wZmlsZSA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZSwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKworICAgICAgICAjIElmIHRoZSBzdGFtcCBpcyBtaXNzaW5nLCBpdCdzIG5vdCBjdXJyZW50CisgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3Moc3RhbXBmaWxlLCBvcy5GX09LKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU3RhbXBmaWxlICVzIG5vdCBhdmFpbGFibGUiLCBzdGFtcGZpbGUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBJZiBpdCdzIGEgJ25vc3RhbXAnIHRhc2ssIGl0J3Mgbm90IGN1cnJlbnQKKyAgICAgICAgdGFza2RlcCA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisgICAgICAgIGlmICdub3N0YW1wJyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydub3N0YW1wJ106CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIiVzLiVzIGlzIG5vc3RhbXBcbiIsIGZuLCB0YXNrbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHRhc2tuYW1lICE9ICJkb19zZXRzY2VuZSIgYW5kIHRhc2tuYW1lLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgY2FjaGUgaXMgTm9uZToKKyAgICAgICAgICAgIGNhY2hlID0ge30KKworICAgICAgICBpc2N1cnJlbnQgPSBUcnVlCisgICAgICAgIHQxID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUpCisgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgaWYgaXNjdXJyZW50OgorICAgICAgICAgICAgICAgIGZuMiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtkZXBdXQorICAgICAgICAgICAgICAgIHRhc2tuYW1lMiA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tkZXBdCisgICAgICAgICAgICAgICAgc3RhbXBmaWxlMiA9IGJiLmJ1aWxkLnN0YW1wZmlsZSh0YXNrbmFtZTIsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4yKQorICAgICAgICAgICAgICAgIHN0YW1wZmlsZTMgPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUyICsgIl9zZXRzY2VuZSIsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4yKQorICAgICAgICAgICAgICAgIHQyID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUyKQorICAgICAgICAgICAgICAgIHQzID0gZ2V0X3RpbWVzdGFtcChzdGFtcGZpbGUzKQorICAgICAgICAgICAgICAgIGlmIHQzIGFuZCB0MyA+IHQyOgorICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZm4gPT0gZm4yIG9yIChmdWxsZGVwdHJlZSBhbmQgZm4yIG5vdCBpbiBzdGFtcHdoaXRlbGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0MjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU3RhbXBmaWxlICVzIGRvZXMgbm90IGV4aXN0Jywgc3RhbXBmaWxlMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIHQxIDwgdDI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSAlcyA8ICVzJywgc3RhbXBmaWxlLCBzdGFtcGZpbGUyKQorICAgICAgICAgICAgICAgICAgICAgICAgaXNjdXJyZW50ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVjdXJzZSBhbmQgaXNjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGNhY2hlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IGNhY2hlW2RlcF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wZmlsZSBmb3IgZGVwZW5kZW5jeSAlczolcyBpbnZhbGlkIChjYWNoZWQpJyAlIChmbjIsIHRhc2tuYW1lMikpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzY3VycmVudCA9IHNlbGYuY2hlY2tfc3RhbXBfdGFzayhkZXAsIHJlY3Vyc2U9VHJ1ZSwgY2FjaGU9Y2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbZGVwXSA9IGlzY3VycmVudAorICAgICAgICBpZiByZWN1cnNlOgorICAgICAgICAgICAgY2FjaGVbdGFza10gPSBpc2N1cnJlbnQKKyAgICAgICAgcmV0dXJuIGlzY3VycmVudAorCisgICAgZGVmIF9leGVjdXRlX3J1bnF1ZXVlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUnVuIHRoZSB0YXNrcyBpbiBhIHF1ZXVlIHByZXBhcmVkIGJ5IHJxZGF0YS5wcmVwYXJlKCkKKyAgICAgICAgVXBvbiBmYWlsdXJlLCBvcHRpb25hbGx5IHRyeSB0byByZWNvdmVyIHRoZSBidWlsZCB1c2luZyBhbnkgYWx0ZXJuYXRlIHByb3ZpZGVycworICAgICAgICAoaWYgdGhlIGFib3J0IG9uIGZhaWx1cmUgY29uZmlndXJhdGlvbiBvcHRpb24gaXNuJ3Qgc2V0KQorICAgICAgICAiIiIKKworICAgICAgICByZXR2YWwgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVByZXBhcmU6CisgICAgICAgICAgICBzZWxmLnJxZXhlID0gUnVuUXVldWVFeGVjdXRlRHVtbXkoc2VsZikKKyAgICAgICAgICAgIGlmIHNlbGYucnFkYXRhLnByZXBhcmUoKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZVNjZW5lSW5pdAorCisgICAgICAgICAgICAgICAgIyB3ZSBhcmUgcmVhZHkgdG8gcnVuLCBzZWUgaWYgYW55IFVJIGNsaWVudCBuZWVkcyB0aGUgZGVwZW5kZW5jeSBpbmZvCisgICAgICAgICAgICAgICAgaWYgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFIGluIHNlbGYuY29va2VyLmZlYXR1cmVzZXQ6CisgICAgICAgICAgICAgICAgICAgIGRlcGdyYXBoID0gc2VsZi5jb29rZXIuYnVpbGREZXBlbmRUcmVlKHNlbGYsIHNlbGYucnFkYXRhLnRhc2tEYXRhKQorICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQoZGVwZ3JhcGgpLCBzZWxmLmNvb2tlci5kYXRhKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVTY2VuZUluaXQ6CisgICAgICAgICAgICBkdW1wID0gc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5kdW1wX3NpZ25hdHVyZXMKKyAgICAgICAgICAgIGlmIGR1bXA6CisgICAgICAgICAgICAgICAgaWYgJ3ByaW50ZGlmZicgaW4gZHVtcDoKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzID0gc2VsZi5wcmludF9kaWZmc2NlbmV0YXNrcygpCisgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3NpZ25hdHVyZXMoZHVtcCkKKyAgICAgICAgICAgICAgICBpZiAncHJpbnRkaWZmJyBpbiBkdW1wOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2RpZmZzY2VuZXRhc2tzKGludmFsaWR0YXNrcykKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X3dvcmtlcigpCisgICAgICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZVNjZW5lcXVldWUoc2VsZikKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGluIFtydW5RdWV1ZVNjZW5lUnVuLCBydW5RdWV1ZVJ1bm5pbmcsIHJ1blF1ZXVlQ2xlYW5VcF06CisgICAgICAgICAgICBzZWxmLmRtLmNoZWNrKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVNjZW5lUnVuOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5ycWV4ZS5leGVjdXRlKCkKKworICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlUnVuSW5pdDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJFeGVjdXRpbmcgUnVuUXVldWUgVGFza3MiKQorICAgICAgICAgICAgc2VsZi5ycWV4ZSA9IFJ1blF1ZXVlRXhlY3V0ZVRhc2tzKHNlbGYpCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVSdW5uaW5nCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZVJ1bm5pbmc6CisgICAgICAgICAgICByZXR2YWwgPSBzZWxmLnJxZXhlLmV4ZWN1dGUoKQorCisgICAgICAgIGlmIHNlbGYuc3RhdGUgaXMgcnVuUXVldWVDbGVhblVwOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5ycWV4ZS5maW5pc2goKQorCisgICAgICAgIGlmIChzZWxmLnN0YXRlIGlzIHJ1blF1ZXVlQ29tcGxldGUgb3Igc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUZhaWxlZCkgYW5kIHNlbGYucnFleGU6CisgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQorICAgICAgICAgICAgaWYgc2VsZi5ycWV4ZS5zdGF0cy5mYWlsZWQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCAlZCB0YXNrcyBvZiB3aGljaCAlZCBkaWRuJ3QgbmVlZCB0byBiZSByZXJ1biBhbmQgJWQgZmFpbGVkLiIsIHNlbGYucnFleGUuc3RhdHMuY29tcGxldGVkICsgc2VsZi5ycWV4ZS5zdGF0cy5mYWlsZWQsIHNlbGYucnFleGUuc3RhdHMuc2tpcHBlZCwgc2VsZi5ycWV4ZS5zdGF0cy5mYWlsZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTGV0J3MgYXZvaWQgdGhlIHdvcmQgImZhaWxlZCIgaWYgbm90aGluZyBhY3R1YWxseSBkaWQKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFza3MgU3VtbWFyeTogQXR0ZW1wdGVkICVkIHRhc2tzIG9mIHdoaWNoICVkIGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCBhbGwgc3VjY2VlZGVkLiIsIHNlbGYucnFleGUuc3RhdHMuY29tcGxldGVkLCBzZWxmLnJxZXhlLnN0YXRzLnNraXBwZWQpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUZhaWxlZDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxZGF0YS50YXNrRGF0YS50cnlhbHRjb25maWdzOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnJ1bnF1ZXVlLlRhc2tGYWlsdXJlKHNlbGYucnFleGUuZmFpbGVkX2ZuaWRzKQorICAgICAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5ycWV4ZS5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEudGFza0RhdGEuZmFpbF9mbmlkKGZuaWQpCisgICAgICAgICAgICBzZWxmLnJxZGF0YS5yZXNldCgpCisKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBydW5RdWV1ZUNvbXBsZXRlOgorICAgICAgICAgICAgIyBBbGwgZG9uZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBMb29wCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBleGVjdXRlX3J1bnF1ZXVlKHNlbGYpOgorICAgICAgICAjIENhdGNoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBhbmQgZW5zdXJlIHdlIGV4aXQgd2hlbiBhbiBlcnJvciBvY2N1cnMsIG5vdCBsb29wLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0ZV9ydW5xdWV1ZSgpCisgICAgICAgIGV4Y2VwdCBiYi5ydW5xdWV1ZS5UYXNrRmFpbHVyZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IGJiLkJCSGFuZGxlZEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRlYXJkb3duX3dvcmtlcnMoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvY2N1cmVkIGluIHJ1bnF1ZXVlLCBwbGVhc2Ugc2VlIHRoZSBmYWlsdXJlIGJlbG93OiIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi50ZWFyZG93bl93b3JrZXJzKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gcnVuUXVldWVDb21wbGV0ZQorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBmaW5pc2hfcnVucXVldWUoc2VsZiwgbm93ID0gRmFsc2UpOgorICAgICAgICBpZiBub3Qgc2VsZi5ycWV4ZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3c6CisgICAgICAgICAgICBzZWxmLnJxZXhlLmZpbmlzaF9ub3coKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ycWV4ZS5maW5pc2goKQorCisgICAgZGVmIGR1bXBfc2lnbmF0dXJlcyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgZG9uZSA9IHNldCgpCisgICAgICAgIGJiLm5vdGUoIlJlcGFyc2luZyBmaWxlcyB0byBjb2xsZWN0IGRlcGVuZGVuY3kgZGF0YSIpCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIGlmIHNlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXSBub3QgaW4gZG9uZToKKyAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgICAgICB0aGVfZGF0YSA9IGJiLmNhY2hlLkNhY2hlLmxvYWREYXRhRnVsbChmbiwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgc2VsZi5jb29rZXIuZGF0YSkKKyAgICAgICAgICAgICAgICBkb25lLmFkZChzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10pCisKKyAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmR1bXBfc2lncyhzZWxmLnJxZGF0YS5kYXRhQ2FjaGUsIG9wdGlvbnMpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcHJpbnRfZGlmZnNjZW5ldGFza3Moc2VsZik6CisKKyAgICAgICAgdmFsaWQgPSBbXQorICAgICAgICBzcV9oYXNoID0gW10KKyAgICAgICAgc3FfaGFzaGZuID0gW10KKyAgICAgICAgc3FfZm4gPSBbXQorICAgICAgICBzcV90YXNrbmFtZSA9IFtdCisgICAgICAgIHNxX3Rhc2sgPSBbXQorICAgICAgICBub2V4ZWMgPSBbXQorICAgICAgICBzdGFtcHByZXNlbnQgPSBbXQorICAgICAgICB2YWxpZF9uZXcgPSBzZXQoKQorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFt0YXNrXV0KKyAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3Rhc2tdCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9leGVjJ106CisgICAgICAgICAgICAgICAgbm9leGVjLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHNxX2ZuLmFwcGVuZChmbikKKyAgICAgICAgICAgIHNxX2hhc2hmbi5hcHBlbmQoc2VsZi5ycWRhdGEuZGF0YUNhY2hlLmhhc2hmbltmbl0pCisgICAgICAgICAgICBzcV9oYXNoLmFwcGVuZChzZWxmLnJxZGF0YS5ydW5xX2hhc2hbdGFza10pCisgICAgICAgICAgICBzcV90YXNrbmFtZS5hcHBlbmQodGFza25hbWUpCisgICAgICAgICAgICBzcV90YXNrLmFwcGVuZCh0YXNrKQorICAgICAgICBsb2NzID0geyAic3FfZm4iIDogc3FfZm4sICJzcV90YXNrIiA6IHNxX3Rhc2tuYW1lLCAic3FfaGFzaCIgOiBzcV9oYXNoLCAic3FfaGFzaGZuIiA6IHNxX2hhc2hmbiwgImQiIDogc2VsZi5jb29rZXIuZXhwYW5kZWRfZGF0YSB9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbGwgPSBzZWxmLmhhc2h2YWxpZGF0ZSArICIoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCwgc2lnaW5mbz1UcnVlKSIKKyAgICAgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKyAgICAgICAgIyBIYW5kbGUgdmVyc2lvbiB3aXRoIG5vIHNpZ2luZm8gcGFyYW1ldGVyCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBjYWxsID0gc2VsZi5oYXNodmFsaWRhdGUgKyAiKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQpIgorICAgICAgICAgICAgdmFsaWQgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQorICAgICAgICBmb3IgdiBpbiB2YWxpZDoKKyAgICAgICAgICAgIHZhbGlkX25ldy5hZGQoc3FfdGFza1t2XSkKKworICAgICAgICAjIFRhc2tzIHdoaWNoIGFyZSBib3RoIHNldHNjZW5lIGFuZCBub2V4ZWMgbmV2ZXIgY2FyZSBhYm91dCBkZXBlbmRlbmNpZXMKKyAgICAgICAgIyBXZSB0aGVyZWZvcmUgZmluZCB0YXNrcyB3aGljaCBhcmUgc2V0c2NlbmUgYW5kIG5vZXhlYyBhbmQgbWFyayB0aGVpcgorICAgICAgICAjIHVuaXF1ZSBkZXBlbmRlbmNpZXMgYXMgdmFsaWQuCisgICAgICAgIGZvciB0YXNrIGluIG5vZXhlYzoKKyAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgIGhhc25vZXhlY3BhcmVudHMgPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGRlcDIgaW4gc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW2RlcF06CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcDIgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSBhbmQgZGVwMiBpbiBub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBoYXNub2V4ZWNwYXJlbnRzID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBoYXNub2V4ZWNwYXJlbnRzOgorICAgICAgICAgICAgICAgICAgICB2YWxpZF9uZXcuYWRkKGRlcCkKKworICAgICAgICBpbnZhbGlkdGFza3MgPSBzZXQoKQorICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdmFsaWRfbmV3IGFuZCB0YXNrIG5vdCBpbiBub2V4ZWM6CisgICAgICAgICAgICAgICAgaW52YWxpZHRhc2tzLmFkZCh0YXNrKQorCisgICAgICAgIGZvdW5kID0gc2V0KCkKKyAgICAgICAgcHJvY2Vzc2VkID0gc2V0KCkKKyAgICAgICAgZm9yIHRhc2sgaW4gaW52YWxpZHRhc2tzOgorICAgICAgICAgICAgdG9wcm9jZXNzID0gc2V0KFt0YXNrXSkKKyAgICAgICAgICAgIHdoaWxlIHRvcHJvY2VzczoKKyAgICAgICAgICAgICAgICBuZXh0ID0gc2V0KCkKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0b3Byb2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3RdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5hZGQodGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5hZGQoZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYWRkKGRlcCkKKyAgICAgICAgICAgICAgICB0b3Byb2Nlc3MgPSBuZXh0CisgICAgICAgICAgICAgICAgaWYgdGFzayBpbiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgdG9wcm9jZXNzID0gc2V0KCkKKworICAgICAgICB0YXNrbGlzdCA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrcy5kaWZmZXJlbmNlKGZvdW5kKToKKyAgICAgICAgICAgIHRhc2tsaXN0LmFwcGVuZChzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKworICAgICAgICBpZiB0YXNrbGlzdDoKKyAgICAgICAgICAgIGJiLnBsYWluKCJUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgY3VycmVudCBidWlsZCBhbmQgYW55IGNhY2hlZCB0YXNrcyBzdGFydCBhdCB0aGUgZm9sbG93aW5nIHRhc2tzOlxuIiArICJcbiIuam9pbih0YXNrbGlzdCkpCisKKyAgICAgICAgcmV0dXJuIGludmFsaWR0YXNrcy5kaWZmZXJlbmNlKGZvdW5kKQorCisgICAgZGVmIHdyaXRlX2RpZmZzY2VuZXRhc2tzKHNlbGYsIGludmFsaWR0YXNrcyk6CisKKyAgICAgICAgIyBEZWZpbmUgcmVjdXJzaW9uIGNhbGxiYWNrCisgICAgICAgIGRlZiByZWN1cnNlY2Ioa2V5LCBoYXNoMSwgaGFzaDIpOgorICAgICAgICAgICAgaGFzaGVzID0gW2hhc2gxLCBoYXNoMl0KKyAgICAgICAgICAgIGhhc2hmaWxlcyA9IGJiLnNpZ2dlbi5maW5kX3NpZ2luZm8oa2V5LCBOb25lLCBoYXNoZXMsIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICAgICAgcmVjb3V0ID0gW10KKyAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IDI6CisgICAgICAgICAgICAgICAgb3V0MiA9IGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzKGhhc2hmaWxlc1toYXNoMV0sIGhhc2hmaWxlc1toYXNoMl0sIHJlY3Vyc2VjYikKKyAgICAgICAgICAgICAgICByZWNvdXQuZXh0ZW5kKGxpc3QoJyAgJyArIGwgZm9yIGwgaW4gb3V0MikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY291dC5hcHBlbmQoIlVuYWJsZSB0byBmaW5kIG1hdGNoaW5nIHNpZ2RhdGEgZm9yICVzIHdpdGggaGFzaGVzICVzIG9yICVzIiAlIChrZXksIGhhc2gxLCBoYXNoMikpCisKKyAgICAgICAgICAgIHJldHVybiByZWNvdXQKKworCisgICAgICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3Rhc2tdXQorICAgICAgICAgICAgcG4gPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKyAgICAgICAgICAgIGggPSBzZWxmLnJxZGF0YS5ydW5xX2hhc2hbdGFza10KKyAgICAgICAgICAgIG1hdGNoZXMgPSBiYi5zaWdnZW4uZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgW10sIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgICAgIG1hdGNoID0gTm9uZQorICAgICAgICAgICAgZm9yIG0gaW4gbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBoIGluIG06CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gbQorICAgICAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuJ3QgZmluZCBhIHRhc2sgd2UncmUgc3VwcG9zZWQgdG8gaGF2ZSB3cml0dGVuIG91dD8gKGhhc2g6ICVzKT8iICUgaCkKKyAgICAgICAgICAgIG1hdGNoZXMgPSB7ayA6IHYgZm9yIGssIHYgaW4gbWF0Y2hlcy5pdGVyaXRlbXMoKSBpZiBoIG5vdCBpbiBrfQorICAgICAgICAgICAgaWYgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICBsYXRlc3RtYXRjaCA9IHNvcnRlZChtYXRjaGVzLmtleXMoKSwga2V5PWxhbWJkYSBmOiBtYXRjaGVzW2ZdKVstMV0KKyAgICAgICAgICAgICAgICBwcmV2aCA9IF9fZmluZF9tZDVfXy5zZWFyY2gobGF0ZXN0bWF0Y2gpLmdyb3VwKDApCisgICAgICAgICAgICAgICAgb3V0cHV0ID0gYmIuc2lnZ2VuLmNvbXBhcmVfc2lnZmlsZXMobGF0ZXN0bWF0Y2gsIG1hdGNoLCByZWN1cnNlY2IpCisgICAgICAgICAgICAgICAgYmIucGxhaW4oIlxuVGFzayAlczolcyBjb3VsZG4ndCBiZSB1c2VkIGZyb20gdGhlIGNhY2hlIGJlY2F1c2U6XG4gIFdlIG5lZWQgaGFzaCAlcywgY2xvc2VzdCBtYXRjaGluZyB0YXNrIHdhcyAlc1xuICAiICUgKHBuLCB0YXNrbmFtZSwgaCwgcHJldmgpICsgJ1xuICAnLmpvaW4ob3V0cHV0KSkKKworY2xhc3MgUnVuUXVldWVFeGVjdXRlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJxKToKKyAgICAgICAgc2VsZi5ycSA9IHJxCisgICAgICAgIHNlbGYuY29va2VyID0gcnEuY29va2VyCisgICAgICAgIHNlbGYuY2ZnRGF0YSA9IHJxLmNmZ0RhdGEKKyAgICAgICAgc2VsZi5ycWRhdGEgPSBycS5ycWRhdGEKKworICAgICAgICBzZWxmLm51bWJlcl90YXNrcyA9IGludChzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJCQl9OVU1CRVJfVEhSRUFEUyIsIFRydWUpIG9yIDEpCisgICAgICAgIHNlbGYuc2NoZWR1bGVyID0gc2VsZi5jZmdEYXRhLmdldFZhcigiQkJfU0NIRURVTEVSIiwgVHJ1ZSkgb3IgInNwZWVkIgorCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGUgPSBbXQorICAgICAgICBzZWxmLnJ1bnFfcnVubmluZyA9IFtdCisgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZSA9IFtdCisKKyAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMgPSB7fQorICAgICAgICBzZWxmLmJ1aWxkX3N0YW1wczIgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9mbmlkcyA9IFtdCisKKyAgICAgICAgc2VsZi5zdGFtcGNhY2hlID0ge30KKworICAgICAgICBycS53b3JrZXJwaXBlLnNldHJ1bnF1ZXVlZXhlYyhzZWxmKQorICAgICAgICBpZiBycS5mYWtld29ya2VycGlwZToKKyAgICAgICAgICAgIHJxLmZha2V3b3JrZXJwaXBlLnNldHJ1bnF1ZXVlZXhlYyhzZWxmKQorCisgICAgICAgIGlmIHNlbGYubnVtYmVyX3Rhc2tzIDw9IDA6CisgICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgQkJfTlVNQkVSX1RIUkVBRFMgJXMiICUgc2VsZi5udW1iZXJfdGFza3MpCisKKyAgICBkZWYgcnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cyk6CisKKyAgICAgICAgIyBzZWxmLmJ1aWxkX3N0YW1wc1twaWRdIG1heSBub3QgZXhpc3Qgd2hlbiB1c2Ugc2hhcmVkIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICBpZiB0YXNrIGluIHNlbGYuYnVpbGRfc3RhbXBzOgorICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHMyLnJlbW92ZShzZWxmLmJ1aWxkX3N0YW1wc1t0YXNrXSkKKyAgICAgICAgICAgIGRlbCBzZWxmLmJ1aWxkX3N0YW1wc1t0YXNrXQorCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWwodGFzaywgc3RhdHVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmluaXNoX25vdyhzZWxmKToKKworICAgICAgICBmb3Igd29ya2VyIGluIFtzZWxmLnJxLndvcmtlciwgc2VsZi5ycS5mYWtld29ya2VyXToKKyAgICAgICAgICAgIGlmIG5vdCB3b3JrZXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RkaW4ud3JpdGUoIjxmaW5pc2hub3c+PC9maW5pc2hub3c+IikKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3b3JrZXIgbXVzdCBoYXZlIGRpZWQ/CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIGxlbihzZWxmLmZhaWxlZF9mbmlkcykgIT0gMDoKKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUZhaWxlZAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVDbGVhblVwCisKKyAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPiAwOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShydW5RdWV1ZUV4aXRXYWl0KHNlbGYuc3RhdHMuYWN0aXZlKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICAgICAgc2VsZi5ycS5yZWFkX3dvcmtlcnMoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnEuYWN0aXZlX2ZkcygpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZmFpbGVkX2ZuaWRzKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlRmFpbGVkCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2hlY2tfZGVwZW5kZW5jaWVzKHNlbGYsIHRhc2ssIHRhc2tkZXBzLCBzZXRzY2VuZSA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYucnEuZGVwdmFsaWRhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICB0YXNrZGF0YSA9IHt9CisgICAgICAgIHRhc2tkZXBzLmFkZCh0YXNrKQorICAgICAgICBmb3IgZGVwIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgaWYgc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgZGVwaWQgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW2RlcF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVwaWQgPSBkZXAKKyAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW2RlcGlkXV0KKyAgICAgICAgICAgIHBuID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW2RlcGlkXQorICAgICAgICAgICAgdGFza2RhdGFbZGVwXSA9IFtwbiwgdGFza25hbWUsIGZuXQorICAgICAgICBjYWxsID0gc2VsZi5ycS5kZXB2YWxpZGF0ZSArICIodGFzaywgdGFza2RhdGEsIG5vdG5lZWRlZCwgZCkiCisgICAgICAgIGxvY3MgPSB7ICJ0YXNrIiA6IHRhc2ssICJ0YXNrZGF0YSIgOiB0YXNrZGF0YSwgIm5vdG5lZWRlZCIgOiBzZWxmLnNjZW5lcXVldWVfbm90bmVlZGVkLCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhIH0KKyAgICAgICAgdmFsaWQgPSBiYi51dGlscy5iZXR0ZXJfZXZhbChjYWxsLCBsb2NzKQorICAgICAgICByZXR1cm4gdmFsaWQKKworY2xhc3MgUnVuUXVldWVFeGVjdXRlRHVtbXkoUnVuUXVldWVFeGVjdXRlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcnEpOgorICAgICAgICBzZWxmLnJxID0gcnEKKyAgICAgICAgc2VsZi5zdGF0cyA9IFJ1blF1ZXVlU3RhdHMoMCkKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNvbXBsZXRlCisgICAgICAgIHJldHVybgorCitjbGFzcyBSdW5RdWV1ZUV4ZWN1dGVUYXNrcyhSdW5RdWV1ZUV4ZWN1dGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSk6CisgICAgICAgIFJ1blF1ZXVlRXhlY3V0ZS5fX2luaXRfXyhzZWxmLCBycSkKKworICAgICAgICBzZWxmLnN0YXRzID0gUnVuUXVldWVTdGF0cyhsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSkKKworICAgICAgICBzZWxmLnN0YW1wY2FjaGUgPSB7fQorCisgICAgICAgIGluaXRpYWxfY292ZXJlZCA9IHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmNvcHkoKQorCisgICAgICAgICMgTWFyayBpbml0aWFsIGJ1aWxkYWJsZSB0YXNrcworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZy5hcHBlbmQoMCkKKyAgICAgICAgICAgIHNlbGYucnVucV9jb21wbGV0ZS5hcHBlbmQoMCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza10pID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMCkKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID4gMCBhbmQgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdLmlzc3Vic2V0KHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRhc2spCisKKyAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgIHdoaWxlIGZvdW5kOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKHNlbGYuc3RhdHMudG90YWwpOgorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdDb25zaWRlcmluZyAlcyAoJXMpOiAlcycgJSAodGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzayksIHN0cihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID4gMCBhbmQgc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdLmlzc3Vic2V0KHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKSBhbmQgdGFzayBub3QgaW4gc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5hZGQodGFzaykKKworICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ1NraXAgbGlzdCAocHJlIHNldHNjZW5ldmVyaWZ5KSAlcycsIHNvcnRlZChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkpCisKKyAgICAgICAgIyBBbGxvdyB0aGUgbWV0YWRhdGEgdG8gZWxlY3QgZm9yIHNldHNjZW5lIHRhc2tzIHRvIHJ1biBhbnl3YXkKKyAgICAgICAgY292ZXJlZF9yZW1vdmUgPSBzZXQoKQorICAgICAgICBpZiBzZWxmLnJxLnNldHNjZW5ldmVyaWZ5OgorICAgICAgICAgICAgaW52YWxpZHRhc2tzID0gW10KKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV90YXNrKSk6CisgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICAgICAgdGFza25hbWUgPSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10KKyAgICAgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayh0YXNrLCB0YXNrbmFtZSArICJfc2V0c2NlbmUiLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1NldHNjZW5lIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lLCByZWN1cnNlID0gVHJ1ZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdOb3JtYWwgc3RhbXAgY3VycmVudCBmb3IgdGFzayAlcyglcyknLCB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpbnZhbGlkdGFza3MuYXBwZW5kKHRhc2spCisKKyAgICAgICAgICAgIGNhbGwgPSBzZWxmLnJxLnNldHNjZW5ldmVyaWZ5ICsgIihjb3ZlcmVkLCB0YXNrbmFtZXMsIGZuaWRzLCBmbnMsIGQsIGludmFsaWR0YXNrcz1pbnZhbGlkdGFza3MpIgorICAgICAgICAgICAgY2FsbDIgPSBzZWxmLnJxLnNldHNjZW5ldmVyaWZ5ICsgIihjb3ZlcmVkLCB0YXNrbmFtZXMsIGZuaWRzLCBmbnMsIGQpIgorICAgICAgICAgICAgbG9jcyA9IHsgImNvdmVyZWQiIDogc2VsZi5ycS5zY2VuZXF1ZXVlX2NvdmVyZWQsICJ0YXNrbmFtZXMiIDogc2VsZi5ycWRhdGEucnVucV90YXNrLCAiZm5pZHMiIDogc2VsZi5ycWRhdGEucnVucV9mbmlkLCAiZm5zIiA6IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4LCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhLCAiaW52YWxpZHRhc2tzIiA6IGludmFsaWR0YXNrcyB9CisgICAgICAgICAgICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdmVyc2lvbnMgd2l0aG91dCBpbnZhbGlkdGFza3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb3ZlcmVkX3JlbW92ZSA9IGJiLnV0aWxzLmJldHRlcl9ldmFsKGNhbGwsIGxvY3MpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbDIsIGxvY3MpCisKKyAgICAgICAgZGVmIHJlbW92ZWNvdmVyZWR0YXNrKHRhc2spOgorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXSArICdfc2V0c2NlbmUnCisgICAgICAgICAgICBiYi5idWlsZC5kZWxfc3RhbXAodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZC5yZW1vdmUodGFzaykKKworICAgICAgICB0b3JlbW92ZSA9IGNvdmVyZWRfcmVtb3ZlCisgICAgICAgIGZvciB0YXNrIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdOb3Qgc2tpcHBpbmcgdGFzayAlcyBkdWUgdG8gc2V0c2NlbmV2ZXJpZnknLCB0YXNrKQorICAgICAgICB3aGlsZSB0b3JlbW92ZToKKyAgICAgICAgICAgIGNvdmVyZWRfcmVtb3ZlID0gW10KKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgICAgIHJlbW92ZWNvdmVyZWR0YXNrKHRhc2spCisgICAgICAgICAgICAgICAgZm9yIGRlcHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXB0YXNrIG5vdCBpbiBzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcHRhc2sgaW4gdG9yZW1vdmUgb3IgZGVwdGFzayBpbiBjb3ZlcmVkX3JlbW92ZSBvciBkZXB0YXNrIGluIGluaXRpYWxfY292ZXJlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnVGFzayAlcyBkZXBlbmRzIG9uIHRhc2sgJXMgc28gbm90IHNraXBwaW5nJyAlICh0YXNrLCBkZXB0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgY292ZXJlZF9yZW1vdmUuYXBwZW5kKGRlcHRhc2spCisgICAgICAgICAgICB0b3JlbW92ZSA9IGNvdmVyZWRfcmVtb3ZlCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdGdWxsIHNraXAgbGlzdCAlcycsIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkKQorCisgICAgICAgIGV2ZW50LmZpcmUoYmIuZXZlbnQuU3RhbXBVcGRhdGUoc2VsZi5ycWRhdGEudGFyZ2V0X3BhaXJzLCBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuc3RhbXApLCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgc2NoZWR1bGVycyA9IHNlbGYuZ2V0X3NjaGVkdWxlcnMoKQorICAgICAgICBmb3Igc2NoZWR1bGVyIGluIHNjaGVkdWxlcnM6CisgICAgICAgICAgICBpZiBzZWxmLnNjaGVkdWxlciA9PSBzY2hlZHVsZXIubmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLnNjaGVkID0gc2NoZWR1bGVyKHNlbGYsIHNlbGYucnFkYXRhKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiVXNpbmcgcnVucXVldWUgc2NoZWR1bGVyICclcyciLCBzY2hlZHVsZXIubmFtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkludmFsaWQgc2NoZWR1bGVyICclcycuICBBdmFpbGFibGUgc2NoZWR1bGVyczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChzZWxmLnNjaGVkdWxlciwgIiwgIi5qb2luKG9iai5uYW1lIGZvciBvYmogaW4gc2NoZWR1bGVycykpKQorCisgICAgZGVmIGdldF9zY2hlZHVsZXJzKHNlbGYpOgorICAgICAgICBzY2hlZHVsZXJzID0gc2V0KG9iaiBmb3Igb2JqIGluIGdsb2JhbHMoKS52YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKG9iaikgaXMgdHlwZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhvYmosIFJ1blF1ZXVlU2NoZWR1bGVyKSkKKworICAgICAgICB1c2VyX3NjaGVkdWxlcnMgPSBzZWxmLmNmZ0RhdGEuZ2V0VmFyKCJCQl9TQ0hFRFVMRVJTIiwgVHJ1ZSkKKyAgICAgICAgaWYgdXNlcl9zY2hlZHVsZXJzOgorICAgICAgICAgICAgZm9yIHNjaGVkIGluIHVzZXJfc2NoZWR1bGVycy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCAiLiIgaW4gc2NoZWQ6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklnbm9yaW5nIHNjaGVkdWxlciAnJXMnIGZyb20gQkJfU0NIRURVTEVSUzogbm90IGFuIGltcG9ydCIgJSBzY2hlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG1vZG5hbWUsIG5hbWUgPSBzY2hlZC5yc3BsaXQoIi4iLCAxKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2RuYW1lLCBmcm9tbGlzdD0obmFtZSwpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiVW5hYmxlIHRvIGltcG9ydCBzY2hlZHVsZXIgJyVzJyBmcm9tICclcyc6ICVzIiAlIChuYW1lLCBtb2RuYW1lLCBleGMpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVycy5hZGQoZ2V0YXR0cihtb2R1bGUsIG5hbWUpKQorICAgICAgICByZXR1cm4gc2NoZWR1bGVycworCisgICAgZGVmIHNldGJ1aWxkYWJsZShzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZVt0YXNrXSA9IDEKKyAgICAgICAgc2VsZi5zY2hlZC5uZXdidWlsYWJsZSh0YXNrKQorCisgICAgZGVmIHRhc2tfY29tcGxldGVvdXRyaWdodChzZWxmLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSB0YXNrIGFzIGNvbXBsZXRlZAorICAgICAgICBMb29rIGF0IHRoZSByZXZlcnNlIGRlcGVuZGVuY2llcyBhbmQgbWFyayBhbnkgdGFzayB3aXRoCisgICAgICAgIGNvbXBsZXRlZCBkZXBlbmRlbmNpZXMgYXMgYnVpbGRhYmxlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bnFfY29tcGxldGVbdGFza10gPSAxCisgICAgICAgIGZvciByZXZkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9yZXZkZXBzW3Rhc2tdOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xX3J1bm5pbmdbcmV2ZGVwXSA9PSAxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfYnVpbGRhYmxlW3JldmRlcF0gPT0gMToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYWxsZGVwcyA9IDEKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3JldmRlcF06CisgICAgICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2NvbXBsZXRlW2RlcF0gIT0gMToKKyAgICAgICAgICAgICAgICAgICAgYWxsZGVwcyA9IDAKKyAgICAgICAgICAgIGlmIGFsbGRlcHMgPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLnNldGJ1aWxkYWJsZShyZXZkZXApCisgICAgICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmV2ZGVwXV0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZXZkZXBdCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJNYXJraW5nIHRhc2sgJXMgKCVzLCAlcykgYXMgYnVpbGRhYmxlIiwgcmV2ZGVwLCBmbiwgdGFza25hbWUpCisKKyAgICBkZWYgdGFza19jb21wbGV0ZShzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5zdGF0cy50YXNrQ29tcGxldGVkKCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShydW5RdWV1ZVRhc2tDb21wbGV0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlb3V0cmlnaHQodGFzaykKKworICAgIGRlZiB0YXNrX2ZhaWwoc2VsZiwgdGFzaywgZXhpdGNvZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHdoZW4gYSB0YXNrIGhhcyBmYWlsZWQKKyAgICAgICAgVXBkYXRlcyB0aGUgc3RhdGUgZW5naW5lIHdpdGggdGhlIGZhaWx1cmUKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3RhdHMudGFza0ZhaWxlZCgpCisgICAgICAgIGZuaWQgPSBzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza10KKyAgICAgICAgc2VsZi5mYWlsZWRfZm5pZHMuYXBwZW5kKGZuaWQpCisgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVUYXNrRmFpbGVkKHRhc2ssIHNlbGYuc3RhdHMsIGV4aXRjb2RlLCBzZWxmLnJxKSwgc2VsZi5jZmdEYXRhKQorICAgICAgICBpZiBzZWxmLnJxZGF0YS50YXNrRGF0YS5hYm9ydDoKKyAgICAgICAgICAgIHNlbGYucnEuc3RhdGUgPSBydW5RdWV1ZUNsZWFuVXAKKworICAgIGRlZiB0YXNrX3NraXAoc2VsZiwgdGFzaywgcmVhc29uKToKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgIHNlbGYuc2V0YnVpbGRhYmxlKHRhc2spCisgICAgICAgIGJiLmV2ZW50LmZpcmUocnVuUXVldWVUYXNrU2tpcHBlZCh0YXNrLCBzZWxmLnN0YXRzLCBzZWxmLnJxLCByZWFzb24pLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSdW4gdGhlIHRhc2tzIGluIGEgcXVldWUgcHJlcGFyZWQgYnkgcnFkYXRhLnByZXBhcmUoKQorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisgICAgICAgIAorCisgICAgICAgIGlmIHNlbGYuc3RhdHMudG90YWwgPT0gMDoKKyAgICAgICAgICAgICMgbm90aGluZyB0byBkbworICAgICAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ2xlYW5VcAorCisgICAgICAgIHRhc2sgPSBzZWxmLnNjaGVkLm5leHQoKQorICAgICAgICBpZiB0YXNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1t0YXNrXQorCisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU2V0c2NlbmUgY292ZXJlZCB0YXNrICVzICglcykiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAiY292ZXJlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHRhc2ssIHRhc2tuYW1lLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiU3RhbXAgY3VycmVudCB0YXNrICVzICglcykiLCB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyh0YXNrKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrLCAiZXhpc3RpbmciKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgaWYgJ25vZXhlYycgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnbm9leGVjJ106CisgICAgICAgICAgICAgICAgc3RhcnRldmVudCA9IHJ1blF1ZXVlVGFza1N0YXJ0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2V4ZWM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKHN0YXJ0ZXZlbnQsIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9IDEKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRzLnRhc2tBY3RpdmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvb2tlci5jb25maWd1cmF0aW9uLmRyeV9ydW46CisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLm1ha2Vfc3RhbXAodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlKHRhc2spCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RhcnRldmVudCA9IHJ1blF1ZXVlVGFza1N0YXJ0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKHN0YXJ0ZXZlbnQsIHNlbGYuY2ZnRGF0YSkKKworICAgICAgICAgICAgdGFza2RlcGRhdGEgPSBzZWxmLmJ1aWxkX3Rhc2tkZXBkYXRhKHRhc2spCisKKyAgICAgICAgICAgIHRhc2tkZXAgPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICAgICAgaWYgJ2Zha2Vyb290JyBpbiB0YXNrZGVwIGFuZCB0YXNrbmFtZSBpbiB0YXNrZGVwWydmYWtlcm9vdCddIGFuZCBub3Qgc2VsZi5jb29rZXIuY29uZmlndXJhdGlvbi5kcnlfcnVuOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxLmZha2V3b3JrZXI6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnEuc3RhcnRfZmFrZXdvcmtlcihzZWxmKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIkZhaWxlZCB0byBzcGF3biBmYWtlcm9vdCB3b3JrZXIgdG8gcnVuICVzOiVzOiAlcyIgJSAoZm4sIHRhc2tuYW1lLCBzdHIoZXhjKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5ycS5mYWtld29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgdGFzaywgdGFza25hbWUsIEZhbHNlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCB0YXNrZGVwZGF0YSkpICsgIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmFrZXdvcmtlci5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLndyaXRlKCI8cnVudGFzaz4iICsgcGlja2xlLmR1bXBzKChmbiwgdGFzaywgdGFza25hbWUsIEZhbHNlLCBzZWxmLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMoZm4pLCB0YXNrZGVwZGF0YSkpICsgIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLmZsdXNoKCkKKworICAgICAgICAgICAgc2VsZi5idWlsZF9zdGFtcHNbdGFza10gPSBiYi5idWlsZC5zdGFtcGZpbGUodGFza25hbWUsIHNlbGYucnFkYXRhLmRhdGFDYWNoZSwgZm4pCisgICAgICAgICAgICBzZWxmLmJ1aWxkX3N0YW1wczIuYXBwZW5kKHNlbGYuYnVpbGRfc3RhbXBzW3Rhc2tdKSAKKyAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nW3Rhc2tdID0gMQorICAgICAgICAgICAgc2VsZi5zdGF0cy50YXNrQWN0aXZlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlIDwgc2VsZi5udW1iZXJfdGFza3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLnN0YXRzLmFjdGl2ZSA+IDA6CisgICAgICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5ycS5hY3RpdmVfZmRzKCkKKworICAgICAgICBpZiBsZW4oc2VsZi5mYWlsZWRfZm5pZHMpICE9IDA6CisgICAgICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVGYWlsZWQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBTYW5pdHkgQ2hlY2tzCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgbmV2ZXIgYnVpbGRhYmxlISIsIHRhc2spCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFfcnVubmluZ1t0YXNrXSA9PSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyBuZXZlciByYW4hIiwgdGFzaykKKyAgICAgICAgICAgIGlmIHNlbGYucnVucV9jb21wbGV0ZVt0YXNrXSA9PSAwOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVGFzayAlcyBuZXZlciBjb21wbGV0ZWQhIiwgdGFzaykKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlQ29tcGxldGUKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGJ1aWxkX3Rhc2tkZXBkYXRhKHNlbGYsIHRhc2spOgorICAgICAgICB0YXNrZGVwZGF0YSA9IHt9CisgICAgICAgIG5leHQgPSBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbdGFza10KKyAgICAgICAgbmV4dC5hZGQodGFzaykKKyAgICAgICAgd2hpbGUgbmV4dDoKKyAgICAgICAgICAgIGFkZGl0aW9uYWwgPSBbXQorICAgICAgICAgICAgZm9yIHJldmRlcCBpbiBuZXh0OgorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JldmRlcF1dCisgICAgICAgICAgICAgICAgcG4gPSBzZWxmLnJxZGF0YS5kYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICAgICAgICAgIHRhc2tuYW1lID0gc2VsZi5ycWRhdGEucnVucV90YXNrW3JldmRlcF0KKyAgICAgICAgICAgICAgICBkZXBzID0gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3JldmRlcF0KKyAgICAgICAgICAgICAgICBwcm92aWRlcyA9IHNlbGYucnFkYXRhLmRhdGFDYWNoZS5mbl9wcm92aWRlc1tmbl0KKyAgICAgICAgICAgICAgICB0YXNrZGVwZGF0YVtyZXZkZXBdID0gW3BuLCB0YXNrbmFtZSwgZm4sIGRlcHMsIHByb3ZpZGVzXQorICAgICAgICAgICAgICAgIGZvciByZXZkZXAyIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHJldmRlcDIgbm90IGluIHRhc2tkZXBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbC5hcHBlbmQocmV2ZGVwMikKKyAgICAgICAgICAgIG5leHQgPSBhZGRpdGlvbmFsCisKKyAgICAgICAgI2JiLm5vdGUoIlRhc2sgJXM6ICIgJSB0YXNrICsgc3RyKHRhc2tkZXBkYXRhKS5yZXBsYWNlKCJdLCAiLCAiXSxcbiIpKQorICAgICAgICByZXR1cm4gdGFza2RlcGRhdGEKKworY2xhc3MgUnVuUXVldWVFeGVjdXRlU2NlbmVxdWV1ZShSdW5RdWV1ZUV4ZWN1dGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBycSk6CisgICAgICAgIFJ1blF1ZXVlRXhlY3V0ZS5fX2luaXRfXyhzZWxmLCBycSkKKworICAgICAgICBzZWxmLnNjZW5lcXVldWVfY292ZXJlZCA9IHNldCgpCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkID0gc2V0KCkKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdG5lZWRlZCA9IHNldCgpCisKKyAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGFueSBzZXRzY2VuZSBmdW5jdGlvbnMsIHNraXAgdGhpcyBzdGVwCisgICAgICAgIGlmIGxlbihzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lKSA9PSAwOgorICAgICAgICAgICAgcnEuc2NlbmVxdWV1ZV9jb3ZlcmVkID0gc2V0KCkKKyAgICAgICAgICAgIHJxLnN0YXRlID0gcnVuUXVldWVSdW5Jbml0CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnN0YXRzID0gUnVuUXVldWVTdGF0cyhsZW4oc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZSkpCisKKyAgICAgICAgc3FfcmV2ZGVwcyA9IFtdCisgICAgICAgIHNxX3JldmRlcHNfbmV3ID0gW10KKyAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2ggPSBbXQorICAgICAgICBzZWxmLnNxX2hhcmRkZXBzID0ge30KKworICAgICAgICAjIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgZGVwZW5kZW5jeSBncmFwaCBmb3IgdGhlIHNldHNjZW5lIGZ1bmN0aW9ucy4gSW50ZXJtZWRpYXRlCisgICAgICAgICMgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHNldHNjZW5lIHRhc2tzIG9ubHkgY29tcGxpY2F0ZSB0aGUgY29kZS4gVGhpcyBjb2RlCisgICAgICAgICMgdGhlcmVmb3JlIGFpbXMgdG8gY29sbGFwc2UgdGhlIGh1Z2UgcnVucXVldWUgZGVwZW5kZW5jeSB0cmVlIGludG8gYSBzbWFsbGVyIG9uZQorICAgICAgICAjIG9ubHkgY29udGFpbmluZyB0aGUgc2V0c2NlbmUgZnVuY3Rpb25zLgorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShzZWxmLnN0YXRzLnRvdGFsKToKKyAgICAgICAgICAgIHNlbGYucnVucV9ydW5uaW5nLmFwcGVuZCgwKQorICAgICAgICAgICAgc2VsZi5ydW5xX2NvbXBsZXRlLmFwcGVuZCgwKQorICAgICAgICAgICAgc2VsZi5ydW5xX2J1aWxkYWJsZS5hcHBlbmQoMCkKKworICAgICAgICAjIEZpcnN0IHByb2Nlc3MgdGhlIGNoYWlucyB1cCB0byB0aGUgZmlyc3Qgc2V0c2NlbmUgdGFzay4KKyAgICAgICAgZW5kcG9pbnRzID0ge30KKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnJxZGF0YS5ydW5xX2ZuaWQpKToKKyAgICAgICAgICAgIHNxX3JldmRlcHMuYXBwZW5kKGNvcHkuY29weShzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pKQorICAgICAgICAgICAgc3FfcmV2ZGVwc19uZXcuYXBwZW5kKHNldCgpKQorICAgICAgICAgICAgaWYgKGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID09IDApIGFuZCB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGVuZHBvaW50c1t0YXNrXSA9IHNldCgpCisKKyAgICAgICAgIyBTZWNvbmRseSBwcm9jZXNzIHRoZSBjaGFpbnMgYmV0d2VlbiBzZXRzY2VuZSB0YXNrcy4KKyAgICAgICAgZm9yIHRhc2sgaW4gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZToKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3Rhc2tdOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIGVuZHBvaW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50c1tkZXBdID0gc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRzW2RlcF0uYWRkKHRhc2spCisKKyAgICAgICAgZGVmIHByb2Nlc3NfZW5kcG9pbnRzKGVuZHBvaW50cyk6CisgICAgICAgICAgICBuZXdlbmRwb2ludHMgPSB7fQorICAgICAgICAgICAgZm9yIHBvaW50LCB0YXNrIGluIGVuZHBvaW50cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRhc2tzID0gc2V0KCkKKyAgICAgICAgICAgICAgICBpZiB0YXNrOgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB8PSB0YXNrCisgICAgICAgICAgICAgICAgaWYgc3FfcmV2ZGVwc19uZXdbcG9pbnRdOgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB8PSBzcV9yZXZkZXBzX25ld1twb2ludF0KKyAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX25ld1twb2ludF0gPSBzZXQoKQorICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3W3BvaW50XSA9IHRhc2tzCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJxZGF0YS5ydW5xX2RlcGVuZHNbcG9pbnRdOgorICAgICAgICAgICAgICAgICAgICBpZiBwb2ludCBpbiBzcV9yZXZkZXBzW2RlcF06CisgICAgICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzW2RlcF0ucmVtb3ZlKHBvaW50KQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3W2RlcF0gfD0gdGFza3MKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihzcV9yZXZkZXBzW2RlcF0pID09IDAgb3IgbGVuKHNxX3JldmRlcHNfbmV3W2RlcF0pICE9IDApIGFuZCBkZXAgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdlbmRwb2ludHNbZGVwXSA9IHRhc2sKKyAgICAgICAgICAgIGlmIGxlbihuZXdlbmRwb2ludHMpICE9IDA6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19lbmRwb2ludHMobmV3ZW5kcG9pbnRzKQorCisgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzKGVuZHBvaW50cykKKworICAgICAgICAjIEJ1aWxkIGEgbGlzdCBvZiBzZXRzY2VuZSB0YXNrcyB3aGljaCBhcmUgInVuc2tpcHBhYmxlIgorICAgICAgICAjIFRoZXNlIGFyZSBkaXJlY3QgZW5kcG9pbnRzIHJlZmVyZW5jZWQgYnkgdGhlIGJ1aWxkCisgICAgICAgIGVuZHBvaW50czIgPSB7fQorICAgICAgICBzcV9yZXZkZXBzMiA9IFtdCisgICAgICAgIHNxX3JldmRlcHNfbmV3MiA9IFtdCisgICAgICAgIGRlZiBwcm9jZXNzX2VuZHBvaW50czIoZW5kcG9pbnRzKToKKyAgICAgICAgICAgIG5ld2VuZHBvaW50cyA9IHt9CisgICAgICAgICAgICBmb3IgcG9pbnQsIHRhc2sgaW4gZW5kcG9pbnRzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdGFza3MgPSBzZXQoW3BvaW50XSkKKyAgICAgICAgICAgICAgICBpZiB0YXNrOgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB8PSB0YXNrCisgICAgICAgICAgICAgICAgaWYgc3FfcmV2ZGVwc19uZXcyW3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgdGFza3MgfD0gc3FfcmV2ZGVwc19uZXcyW3BvaW50XQorICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3Mltwb2ludF0gPSBzZXQoKQorICAgICAgICAgICAgICAgIGlmIHBvaW50IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3Mltwb2ludF0gPSB0YXNrcworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5ycWRhdGEucnVucV9kZXBlbmRzW3BvaW50XToKKyAgICAgICAgICAgICAgICAgICAgaWYgcG9pbnQgaW4gc3FfcmV2ZGVwczJbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHMyW2RlcF0ucmVtb3ZlKHBvaW50KQorICAgICAgICAgICAgICAgICAgICBpZiB0YXNrczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxX3JldmRlcHNfbmV3MltkZXBdIHw9IHRhc2tzCisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oc3FfcmV2ZGVwczJbZGVwXSkgPT0gMCBvciBsZW4oc3FfcmV2ZGVwc19uZXcyW2RlcF0pICE9IDApIGFuZCBkZXAgbm90IGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdlbmRwb2ludHNbZGVwXSA9IHRhc2tzCisgICAgICAgICAgICBpZiBsZW4obmV3ZW5kcG9pbnRzKSAhPSAwOgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZW5kcG9pbnRzMihuZXdlbmRwb2ludHMpCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5ycWRhdGEucnVucV9mbmlkKSk6CisgICAgICAgICAgICBzcV9yZXZkZXBzMi5hcHBlbmQoY29weS5jb3B5KHNlbGYucnFkYXRhLnJ1bnFfcmV2ZGVwc1t0YXNrXSkpCisgICAgICAgICAgICBzcV9yZXZkZXBzX25ldzIuYXBwZW5kKHNldCgpKQorICAgICAgICAgICAgaWYgKGxlbihzZWxmLnJxZGF0YS5ydW5xX3JldmRlcHNbdGFza10pID09IDApIGFuZCB0YXNrIG5vdCBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGVuZHBvaW50czJbdGFza10gPSBzZXQoKQorICAgICAgICBwcm9jZXNzX2VuZHBvaW50czIoZW5kcG9pbnRzMikKKyAgICAgICAgc2VsZi51bnNraXBwYWJsZSA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICBpZiBzcV9yZXZkZXBzX25ldzJbdGFza106CisgICAgICAgICAgICAgICAgc2VsZi51bnNraXBwYWJsZS5hcHBlbmQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKSkKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYucnFkYXRhLnJ1bnFfZm5pZCkpOgorICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lOgorICAgICAgICAgICAgICAgIGRlcHMgPSBzZXQoKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gc3FfcmV2ZGVwc19uZXdbdGFza106CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgoZGVwKSkKKyAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaC5hcHBlbmQoZGVwcykKKyAgICAgICAgICAgIGVsaWYgbGVuKHNxX3JldmRlcHNfbmV3W3Rhc2tdKSAhPSAwOgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiUnVuUXVldWUiLCAiU29tZXRoaW5nIHdlbnQgYmFkbHkgd3JvbmcgZHVyaW5nIHNjZW5lcXVldWUgZ2VuZXJhdGlvbiwgYWJvcnRpbmcuIFBsZWFzZSByZXBvcnQgdGhpcyBwcm9ibGVtLiIpCisKKyAgICAgICAgIyBSZXNvbHZlIHNldHNjZW5lIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICMgZS5nLiBkb19zb21ldGFza19zZXRzY2VuZVtkZXBlbmRzXSA9ICJ0YXJnZXRuYW1lOmRvX3NvbWVvdGhlcnRhc2tfc2V0c2NlbmUiCisgICAgICAgICMgTm90ZSB0aGF0IGFueXRoaW5nIGV4cGxpY2l0bHkgZGVwZW5kZWQgdXBvbiB3aWxsIGhhdmUgaXRzIHJldmVyc2UgZGVwZW5kZW5jaWVzIHJlbW92ZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmU6CisgICAgICAgICAgICAgICAgcmVhbGlkID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZ2V0dGFza19pZChzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbdGFza11dLCBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbdGFza10gKyAiX3NldHNjZW5lIiwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWRlcGVuZHMgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS50YXNrc19pZGVwZW5kc1tyZWFsaWRdCisgICAgICAgICAgICAgICAgZm9yIChkZXBpZCwgaWRlcGVuZHRhc2spIGluIGlkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXBpZCBub3QgaW4gc2VsZi5ycWRhdGEudGFza0RhdGEuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgZGVwZGF0YSA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmJ1aWxkX3RhcmdldHNbZGVwaWRdWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIGRlcGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBkZXAgPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtkZXBkYXRhXQorICAgICAgICAgICAgICAgICAgICB0YXNraWQgPSBzZWxmLnJxZGF0YS5nZXRfdGFza19pZChzZWxmLnJxZGF0YS50YXNrRGF0YS5nZXRmbl9pZChkZXApLCBpZGVwZW5kdGFzay5yZXBsYWNlKCJfc2V0c2NlbmUiLCAiIikpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJUYXNrICVzX3NldHNjZW5lIGRlcGVuZHMgdXBvbiBub24tZXhpc3RlbnQgdGFzayAlczolcyIgJSAoc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcodGFzayksIGRlcCwgaWRlcGVuZHRhc2spKQorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2tpZCkgaW4gc2VsZi5zcV9oYXJkZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3FfaGFyZGRlcHNbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpXSA9IHNldCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3FfaGFyZGRlcHNbc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpXS5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNrKSkKKworICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2spXS5hZGQoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZS5pbmRleCh0YXNraWQpKQorICAgICAgICAgICAgICAgICAgICAjIEhhdmUgdG8gemVybyB0aGlzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBzcV9yZXZkZXBzX3NxdWFzaFtzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lLmluZGV4KHRhc2tpZCldID0gc2V0KCkKKworICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnNxX2hhcmRkZXBzOgorICAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9oYXJkZGVwc1t0YXNrXToKKyAgICAgICAgICAgICAgICAgc3FfcmV2ZGVwc19zcXVhc2hbZGVwXS5hZGQodGFzaykKKworICAgICAgICAjZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzcV9yZXZkZXBzX3NxdWFzaCkpOgorICAgICAgICAjICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAjICAgIGJiLndhcm4oIlRhc2sgJXM6ICVzX3NldHNjZW5lIGlzICVzICIgJSAodGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spICwgc3FfcmV2ZGVwc19zcXVhc2hbdGFza10pKQorCisgICAgICAgIHNlbGYuc3FfZGVwcyA9IFtdCisgICAgICAgIHNlbGYuc3FfcmV2ZGVwcyA9IHNxX3JldmRlcHNfc3F1YXNoCisgICAgICAgIHNlbGYuc3FfcmV2ZGVwczIgPSBjb3B5LmRlZXBjb3B5KHNlbGYuc3FfcmV2ZGVwcykKKworICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgc2VsZi5zcV9kZXBzLmFwcGVuZChzZXQoKSkKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnNxX3JldmRlcHMpKToKKyAgICAgICAgICAgIGZvciBkZXAgaW4gc2VsZi5zcV9yZXZkZXBzW3Rhc2tdOgorICAgICAgICAgICAgICAgIHNlbGYuc3FfZGVwc1tkZXBdLmFkZCh0YXNrKQorCisgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5zcV9yZXZkZXBzW3Rhc2tdKSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisKKyAgICAgICAgc2VsZi5vdXRyaWdodGZhaWwgPSBbXQorICAgICAgICBpZiBzZWxmLnJxLmhhc2h2YWxpZGF0ZToKKyAgICAgICAgICAgIHNxX2hhc2ggPSBbXQorICAgICAgICAgICAgc3FfaGFzaGZuID0gW10KKyAgICAgICAgICAgIHNxX2ZuID0gW10KKyAgICAgICAgICAgIHNxX3Rhc2tuYW1lID0gW10KKyAgICAgICAgICAgIHNxX3Rhc2sgPSBbXQorICAgICAgICAgICAgbm9leGVjID0gW10KKyAgICAgICAgICAgIHN0YW1wcHJlc2VudCA9IFtdCisgICAgICAgICAgICBmb3IgdGFzayBpbiB4cmFuZ2UobGVuKHNlbGYuc3FfcmV2ZGVwcykpOgorICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgICAgIGZuID0gc2VsZi5ycWRhdGEudGFza0RhdGEuZm5faW5kZXhbc2VsZi5ycWRhdGEucnVucV9mbmlkW3JlYWx0YXNrXV0KKyAgICAgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza10KKyAgICAgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKworICAgICAgICAgICAgICAgIGlmICdub2V4ZWMnIGluIHRhc2tkZXAgYW5kIHRhc2tuYW1lIGluIHRhc2tkZXBbJ25vZXhlYyddOgorICAgICAgICAgICAgICAgICAgICBub2V4ZWMuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLm1ha2Vfc3RhbXAodGFza25hbWUgKyAiX3NldHNjZW5lIiwgc2VsZi5ycWRhdGEuZGF0YUNhY2hlLCBmbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHNlbGYucnEuY2hlY2tfc3RhbXBfdGFzayhyZWFsdGFzaywgdGFza25hbWUgKyAiX3NldHNjZW5lIiwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDIsICdTZXRzY2VuZSBzdGFtcCBjdXJyZW50IGZvciB0YXNrICVzKCVzKScsIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhbXBwcmVzZW50LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCB0YXNrbmFtZSwgcmVjdXJzZSA9IFRydWUsIGNhY2hlPXNlbGYuc3RhbXBjYWNoZSk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnTm9ybWFsIHN0YW1wIGN1cnJlbnQgZm9yIHRhc2sgJXMoJXMpJywgdGFzaywgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQorICAgICAgICAgICAgICAgICAgICBzdGFtcHByZXNlbnQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19za2lwKHRhc2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzcV9mbi5hcHBlbmQoZm4pCisgICAgICAgICAgICAgICAgc3FfaGFzaGZuLmFwcGVuZChzZWxmLnJxZGF0YS5kYXRhQ2FjaGUuaGFzaGZuW2ZuXSkKKyAgICAgICAgICAgICAgICBzcV9oYXNoLmFwcGVuZChzZWxmLnJxZGF0YS5ydW5xX2hhc2hbcmVhbHRhc2tdKQorICAgICAgICAgICAgICAgIHNxX3Rhc2tuYW1lLmFwcGVuZCh0YXNrbmFtZSkKKyAgICAgICAgICAgICAgICBzcV90YXNrLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgY2FsbCA9IHNlbGYucnEuaGFzaHZhbGlkYXRlICsgIihzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKSIKKyAgICAgICAgICAgIGxvY3MgPSB7ICJzcV9mbiIgOiBzcV9mbiwgInNxX3Rhc2siIDogc3FfdGFza25hbWUsICJzcV9oYXNoIiA6IHNxX2hhc2gsICJzcV9oYXNoZm4iIDogc3FfaGFzaGZuLCAiZCIgOiBzZWxmLmNvb2tlci5leHBhbmRlZF9kYXRhIH0KKyAgICAgICAgICAgIHZhbGlkID0gYmIudXRpbHMuYmV0dGVyX2V2YWwoY2FsbCwgbG9jcykKKworICAgICAgICAgICAgdmFsaWRfbmV3ID0gc3RhbXBwcmVzZW50CisgICAgICAgICAgICBmb3IgdiBpbiB2YWxpZDoKKyAgICAgICAgICAgICAgICB2YWxpZF9uZXcuYXBwZW5kKHNxX3Rhc2tbdl0pCisKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHhyYW5nZShsZW4oc2VsZi5zcV9yZXZkZXBzKSk6CisgICAgICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gdmFsaWRfbmV3IGFuZCB0YXNrIG5vdCBpbiBub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ05vIHBhY2thZ2UgZm91bmQsIHNvIHNraXBwaW5nIHNldHNjZW5lIHRhc2sgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbHRhc2spKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm91dHJpZ2h0ZmFpbC5hcHBlbmQodGFzaykKKworICAgICAgICBsb2dnZXIuaW5mbygnRXhlY3V0aW5nIFNldFNjZW5lIFRhc2tzJykKKworICAgICAgICBzZWxmLnJxLnN0YXRlID0gcnVuUXVldWVTY2VuZVJ1bgorCisgICAgZGVmIHNjZW5lcXVldWVfdXBkYXRlY291bnRlcnMoc2VsZiwgdGFzaywgZmFpbCA9IEZhbHNlKToKKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnNxX2RlcHNbdGFza106CisgICAgICAgICAgICBpZiBmYWlsIGFuZCB0YXNrIGluIHNlbGYuc3FfaGFyZGRlcHMgYW5kIGRlcCBpbiBzZWxmLnNxX2hhcmRkZXBzW3Rhc2tdOgorICAgICAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgICAgIHJlYWxkZXAgPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW2RlcF0KKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIiVzIHdhcyB1bmF2YWlsYWJsZSBhbmQgaXMgYSBoYXJkIGRlcGVuZGVuY3kgb2YgJXMgc28gc2tpcHBpbmciICUgKHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSwgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcocmVhbGRlcCkpKQorICAgICAgICAgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyhkZXAsIGZhaWwpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHRhc2sgbm90IGluIHNlbGYuc3FfcmV2ZGVwczJbZGVwXToKKyAgICAgICAgICAgICAgICAjIE1heSBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkIGJ5IHRoZSBmYWlsIGNhc2UgYWJvdmUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5zcV9yZXZkZXBzMltkZXBdLnJlbW92ZSh0YXNrKQorICAgICAgICAgICAgaWYgbGVuKHNlbGYuc3FfcmV2ZGVwczJbZGVwXSkgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bnFfYnVpbGRhYmxlW2RlcF0gPSAxCisKKyAgICBkZWYgdGFza19jb21wbGV0ZW91dHJpZ2h0KHNlbGYsIHRhc2spOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhIHRhc2sgYXMgY29tcGxldGVkCisgICAgICAgIExvb2sgYXQgdGhlIHJldmVyc2UgZGVwZW5kZW5jaWVzIGFuZCBtYXJrIGFueSB0YXNrIHdpdGgKKyAgICAgICAgY29tcGxldGVkIGRlcGVuZGVuY2llcyBhcyBidWlsZGFibGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgaW5kZXggPSBzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnRm91bmQgdGFzayAlcyB3aGljaCBjb3VsZCBiZSBhY2NlbGVyYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhpbmRleCkpCisKKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX2NvdmVyZWQuYWRkKHRhc2spCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyh0YXNrKQorCisgICAgZGVmIHRhc2tfY29tcGxldGUoc2VsZiwgdGFzayk6CisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSksIHNlbGYuY2ZnRGF0YSkKKyAgICAgICAgc2VsZi50YXNrX2NvbXBsZXRlb3V0cmlnaHQodGFzaykKKworICAgIGRlZiB0YXNrX2ZhaWwoc2VsZiwgdGFzaywgcmVzdWx0KToKKyAgICAgICAgc2VsZi5zdGF0cy50YXNrRmFpbGVkKCkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShzY2VuZVF1ZXVlVGFza0ZhaWxlZCh0YXNrLCBzZWxmLnN0YXRzLCByZXN1bHQsIHNlbGYpLCBzZWxmLmNmZ0RhdGEpCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkLmFkZCh0YXNrKQorICAgICAgICBzZWxmLnNjZW5lcXVldWVfdXBkYXRlY291bnRlcnModGFzaywgVHJ1ZSkKKworICAgIGRlZiB0YXNrX2ZhaWxvdXRyaWdodChzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQorICAgICAgICBpbmRleCA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10KKyAgICAgICAgc2VsZi5zY2VuZXF1ZXVlX25vdGNvdmVyZWQuYWRkKHRhc2spCisgICAgICAgIHNlbGYuc2NlbmVxdWV1ZV91cGRhdGVjb3VudGVycyh0YXNrLCBUcnVlKQorCisgICAgZGVmIHRhc2tfc2tpcChzZWxmLCB0YXNrKToKKyAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgIHNlbGYucnVucV9idWlsZGFibGVbdGFza10gPSAxCisgICAgICAgIHNlbGYudGFza19jb21wbGV0ZW91dHJpZ2h0KHRhc2spCisgICAgICAgIHNlbGYuc3RhdHMudGFza0NvbXBsZXRlZCgpCisgICAgICAgIHNlbGYuc3RhdHMudGFza1NraXBwZWQoKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSdW4gdGhlIHRhc2tzIGluIGEgcXVldWUgcHJlcGFyZWQgYnkgcHJlcGFyZV9ydW5xdWV1ZQorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLnJxLnJlYWRfd29ya2VycygpCisKKyAgICAgICAgdGFzayA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPCBzZWxmLm51bWJlcl90YXNrczoKKyAgICAgICAgICAgICMgRmluZCB0aGUgbmV4dCBzZXRzY2VuZSB0byBydW4KKyAgICAgICAgICAgIGZvciBuZXh0dGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5ydW5xX2J1aWxkYWJsZVtuZXh0dGFza10gPT0gMSBhbmQgc2VsZi5ydW5xX3J1bm5pbmdbbmV4dHRhc2tdICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGlmIG5leHR0YXNrIGluIHNlbGYudW5za2lwcGFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNldHNjZW5lIHRhc2sgJXMgaXMgdW5za2lwcGFibGUiICUgc2VsZi5ycWRhdGEuZ2V0X3VzZXJfaWRzdHJpbmcoc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVtuZXh0dGFza10pKSAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV4dHRhc2sgbm90IGluIHNlbGYudW5za2lwcGFibGUgYW5kIGxlbihzZWxmLnNxX3JldmRlcHNbbmV4dHRhc2tdKSA+IDAgYW5kIHNlbGYuc3FfcmV2ZGVwc1tuZXh0dGFza10uaXNzdWJzZXQoc2VsZi5zY2VuZXF1ZXVlX2NvdmVyZWQpIGFuZCBzZWxmLmNoZWNrX2RlcGVuZGVuY2llcyhuZXh0dGFzaywgc2VsZi5zcV9yZXZkZXBzW25leHR0YXNrXSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZWFsdGFzayA9IHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdCisgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHNlbGYucnFkYXRhLnRhc2tEYXRhLmZuX2luZGV4W3NlbGYucnFkYXRhLnJ1bnFfZm5pZFtyZWFsdGFza11dCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZHRhcmdldCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYucnFkYXRhLnRhcmdldF9wYWlyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRbMF0gPT0gZm4gYW5kIHRhcmdldFsxXSA9PSBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZHRhcmdldCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmb3VuZHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIlNraXBwaW5nIHNldHNjZW5lIGZvciB0YXNrICVzIiAlIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbbmV4dHRhc2tdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcChuZXh0dGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNjZW5lcXVldWVfbm90bmVlZGVkLmFkZChuZXh0dGFzaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBuZXh0dGFzayBpbiBzZWxmLm91dHJpZ2h0ZmFpbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFza19mYWlsb3V0cmlnaHQobmV4dHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0YXNrID0gbmV4dHRhc2sKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlYWx0YXNrID0gc2VsZi5ycWRhdGEucnVucV9zZXRzY2VuZVt0YXNrXQorICAgICAgICAgICAgZm4gPSBzZWxmLnJxZGF0YS50YXNrRGF0YS5mbl9pbmRleFtzZWxmLnJxZGF0YS5ydW5xX2ZuaWRbcmVhbHRhc2tdXQorCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza10gKyAiX3NldHNjZW5lIgorICAgICAgICAgICAgaWYgc2VsZi5ycS5jaGVja19zdGFtcF90YXNrKHJlYWx0YXNrLCBzZWxmLnJxZGF0YS5ydW5xX3Rhc2tbcmVhbHRhc2tdLCByZWN1cnNlID0gVHJ1ZSwgY2FjaGU9c2VsZi5zdGFtcGNhY2hlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgJ1N0YW1wIGZvciB1bmRlcmx5aW5nIHRhc2sgJXMoJXMpIGlzIGN1cnJlbnQsIHNvIHNraXBwaW5nIHNldHNjZW5lIHZhcmlhbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaykpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrX2ZhaWxvdXRyaWdodCh0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIGlmIHNlbGYuY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2U6CisgICAgICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJxZGF0YS50YXJnZXRfcGFpcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldFswXSA9PSBmbiBhbmQgdGFyZ2V0WzFdID09IHNlbGYucnFkYXRhLnJ1bnFfdGFza1tyZWFsdGFza106CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfZmFpbG91dHJpZ2h0KHRhc2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBpZiBzZWxmLnJxLmNoZWNrX3N0YW1wX3Rhc2socmVhbHRhc2ssIHRhc2tuYW1lLCBjYWNoZT1zZWxmLnN0YW1wY2FjaGUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAnU2V0c2NlbmUgc3RhbXAgY3VycmVudCB0YXNrICVzKCVzKSwgc28gc2tpcCBpdCBhbmQgaXRzIGRlcGVuZGVuY2llcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssIHNlbGYucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHJlYWx0YXNrKSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tfc2tpcCh0YXNrKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHN0YXJ0ZXZlbnQgPSBzY2VuZVF1ZXVlVGFza1N0YXJ0ZWQodGFzaywgc2VsZi5zdGF0cywgc2VsZi5ycSkKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoc3RhcnRldmVudCwgc2VsZi5jZmdEYXRhKQorCisgICAgICAgICAgICB0YXNrZGVwID0gc2VsZi5ycWRhdGEuZGF0YUNhY2hlLnRhc2tfZGVwc1tmbl0KKyAgICAgICAgICAgIGlmICdmYWtlcm9vdCcgaW4gdGFza2RlcCBhbmQgdGFza25hbWUgaW4gdGFza2RlcFsnZmFrZXJvb3QnXToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ycS5mYWtld29ya2VyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJxLnN0YXJ0X2Zha2V3b3JrZXIoc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4ud3JpdGUoIjxydW50YXNrPiIgKyBwaWNrbGUuZHVtcHMoKGZuLCByZWFsdGFzaywgdGFza25hbWUsIFRydWUsIHNlbGYuY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhmbiksIE5vbmUpKSArICI8L3J1bnRhc2s+IikKKyAgICAgICAgICAgICAgICBzZWxmLnJxLmZha2V3b3JrZXIuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJxLndvcmtlci5zdGRpbi53cml0ZSgiPHJ1bnRhc2s+IiArIHBpY2tsZS5kdW1wcygoZm4sIHJlYWx0YXNrLCB0YXNrbmFtZSwgVHJ1ZSwgc2VsZi5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgTm9uZSkpICsgIjwvcnVudGFzaz4iKQorICAgICAgICAgICAgICAgIHNlbGYucnEud29ya2VyLnN0ZGluLmZsdXNoKCkKKworICAgICAgICAgICAgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gPSAxCisgICAgICAgICAgICBzZWxmLnN0YXRzLnRhc2tBY3RpdmUoKQorICAgICAgICAgICAgaWYgc2VsZi5zdGF0cy5hY3RpdmUgPCBzZWxmLm51bWJlcl90YXNrczoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuc3RhdHMuYWN0aXZlID4gMDoKKyAgICAgICAgICAgIHNlbGYucnEucmVhZF93b3JrZXJzKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJxLmFjdGl2ZV9mZHMoKQorCisgICAgICAgICNmb3IgdGFzayBpbiB4cmFuZ2Uoc2VsZi5zdGF0cy50b3RhbCk6CisgICAgICAgICMgICAgaWYgc2VsZi5ydW5xX3J1bm5pbmdbdGFza10gIT0gMToKKyAgICAgICAgIyAgICAgICAgYnVpbGRhYmxlID0gc2VsZi5ydW5xX2J1aWxkYWJsZVt0YXNrXQorICAgICAgICAjICAgICAgICByZXZkZXBzID0gc2VsZi5zcV9yZXZkZXBzW3Rhc2tdCisgICAgICAgICMgICAgICAgIGJiLndhcm4oIkZvdW5kIHdlIGRpZG4ndCBydW4gJXMgJXMgJXMgJXMiICUgKHRhc2ssIGJ1aWxkYWJsZSwgc3RyKHJldmRlcHMpLCBzZWxmLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdKSkpCisKKyAgICAgICAgIyBDb252ZXJ0IHNjZW5lcXVldWVfY292ZXJlZCB0YXNrIG51bWJlcnMgaW50byBmdWxsIHRhc2tncmFwaCBpZHMKKyAgICAgICAgb2xkY292ZXJlZCA9IHNlbGYuc2NlbmVxdWV1ZV9jb3ZlcmVkCisgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkID0gc2V0KCkKKyAgICAgICAgZm9yIHRhc2sgaW4gb2xkY292ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucnEuc2NlbmVxdWV1ZV9jb3ZlcmVkLmFkZChzZWxmLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdKQorICAgICAgICBzZWxmLnJxLnNjZW5lcXVldWVfbm90Y292ZXJlZCA9IHNldCgpCisgICAgICAgIGZvciB0YXNrIGluIHNlbGYuc2NlbmVxdWV1ZV9ub3Rjb3ZlcmVkOgorICAgICAgICAgICAgc2VsZi5ycS5zY2VuZXF1ZXVlX25vdGNvdmVyZWQuYWRkKHNlbGYucnFkYXRhLnJ1bnFfc2V0c2NlbmVbdGFza10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdXZSBjYW4gc2tpcCB0YXNrcyAlcycsIHNvcnRlZChzZWxmLnJxLnNjZW5lcXVldWVfY292ZXJlZCkpCisKKyAgICAgICAgc2VsZi5ycS5zdGF0ZSA9IHJ1blF1ZXVlUnVuSW5pdAorCisgICAgICAgIGNvbXBsZXRlZXZlbnQgPSBzY2VuZVF1ZXVlQ29tcGxldGUoc2VsZi5zdGF0cywgc2VsZi5ycSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShjb21wbGV0ZWV2ZW50LCBzZWxmLmNmZ0RhdGEpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBydW5xdWV1ZV9wcm9jZXNzX3dhaXRwaWQoc2VsZiwgdGFzaywgc3RhdHVzKToKKyAgICAgICAgdGFzayA9IHNlbGYucnEucnFkYXRhLnJ1bnFfc2V0c2NlbmUuaW5kZXgodGFzaykKKworICAgICAgICBSdW5RdWV1ZUV4ZWN1dGUucnVucXVldWVfcHJvY2Vzc193YWl0cGlkKHNlbGYsIHRhc2ssIHN0YXR1cykKKworY2xhc3MgVGFza0ZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSB0YXNrIGluIGEgcnVucXVldWUgZmFpbHMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgIHNlbGYuYXJncyA9IHgKKworCitjbGFzcyBydW5RdWV1ZUV4aXRXYWl0KGJiLmV2ZW50LkV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCB3aGVuIHdhaXRpbmcgZm9yIHRhc2sgcHJvY2Vzc2VzIHRvIGV4aXQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZW1haW4pOgorICAgICAgICBzZWxmLnJlbWFpbiA9IHJlbWFpbgorICAgICAgICBzZWxmLm1lc3NhZ2UgPSAiV2FpdGluZyBmb3IgJXMgYWN0aXZlIHRhc2tzIHRvIGZpbmlzaCIgJSByZW1haW4KKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworY2xhc3MgcnVuUXVldWVFdmVudChiYi5ldmVudC5FdmVudCk6CisgICAgIiIiCisgICAgQmFzZSBydW5RdWV1ZSBldmVudCBjbGFzcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpOgorICAgICAgICBzZWxmLnRhc2tpZCA9IHRhc2sKKyAgICAgICAgc2VsZi50YXNrc3RyaW5nID0gcnEucnFkYXRhLmdldF91c2VyX2lkc3RyaW5nKHRhc2spCisgICAgICAgIHNlbGYudGFza25hbWUgPSBycS5ycWRhdGEuZ2V0X3Rhc2tfbmFtZSh0YXNrKQorICAgICAgICBzZWxmLnRhc2tmaWxlID0gcnEucnFkYXRhLmdldF90YXNrX2ZpbGUodGFzaykKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IHJxLnJxZGF0YS5nZXRfdGFza19oYXNoKHRhc2spCisgICAgICAgIHNlbGYuc3RhdHMgPSBzdGF0cy5jb3B5KCkKKyAgICAgICAgYmIuZXZlbnQuRXZlbnQuX19pbml0X18oc2VsZikKKworY2xhc3Mgc2NlbmVRdWV1ZUV2ZW50KHJ1blF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEJhc2Ugc2NlbmVRdWV1ZSBldmVudCBjbGFzcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEsIG5vZXhlYz1GYWxzZSk6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICByZWFsdGFzayA9IHJxLnJxZGF0YS5ydW5xX3NldHNjZW5lW3Rhc2tdCisgICAgICAgIHNlbGYudGFza3N0cmluZyA9IHJxLnJxZGF0YS5nZXRfdXNlcl9pZHN0cmluZyhyZWFsdGFzaywgIl9zZXRzY2VuZSIpCisgICAgICAgIHNlbGYudGFza25hbWUgPSBycS5ycWRhdGEuZ2V0X3Rhc2tfbmFtZShyZWFsdGFzaykgKyAiX3NldHNjZW5lIgorICAgICAgICBzZWxmLnRhc2tmaWxlID0gcnEucnFkYXRhLmdldF90YXNrX2ZpbGUocmVhbHRhc2spCisgICAgICAgIHNlbGYudGFza2hhc2ggPSBycS5ycWRhdGEuZ2V0X3Rhc2tfaGFzaChyZWFsdGFzaykKKworY2xhc3MgcnVuUXVldWVUYXNrU3RhcnRlZChydW5RdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSB0YXNrIHdhcyBzdGFydGVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSwgbm9leGVjPUZhbHNlKToKKyAgICAgICAgcnVuUXVldWVFdmVudC5fX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEpCisgICAgICAgIHNlbGYubm9leGVjID0gbm9leGVjCisKK2NsYXNzIHNjZW5lUXVldWVUYXNrU3RhcnRlZChzY2VuZVF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHNldHNjZW5lIHRhc2sgd2FzIHN0YXJ0ZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxLCBub2V4ZWM9RmFsc2UpOgorICAgICAgICBzY2VuZVF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLm5vZXhlYyA9IG5vZXhlYworCitjbGFzcyBydW5RdWV1ZVRhc2tGYWlsZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayBmYWlsZWQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIGV4aXRjb2RlLCBycSk6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLmV4aXRjb2RlID0gZXhpdGNvZGUKKworY2xhc3Mgc2NlbmVRdWV1ZVRhc2tGYWlsZWQoc2NlbmVRdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSBzZXRzY2VuZSB0YXNrIGZhaWxlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgZXhpdGNvZGUsIHJxKToKKyAgICAgICAgc2NlbmVRdWV1ZUV2ZW50Ll9faW5pdF9fKHNlbGYsIHRhc2ssIHN0YXRzLCBycSkKKyAgICAgICAgc2VsZi5leGl0Y29kZSA9IGV4aXRjb2RlCisKK2NsYXNzIHNjZW5lUXVldWVDb21wbGV0ZShzY2VuZVF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IHdoZW4gYWxsIHRoZSBzY2VuZVF1ZXVlIHRhc2tzIGFyZSBjb21wbGV0ZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0cywgcnEpOgorICAgICAgICBzZWxmLnN0YXRzID0gc3RhdHMuY29weSgpCisgICAgICAgIGJiLmV2ZW50LkV2ZW50Ll9faW5pdF9fKHNlbGYpCisKK2NsYXNzIHJ1blF1ZXVlVGFza0NvbXBsZXRlZChydW5RdWV1ZUV2ZW50KToKKyAgICAiIiIKKyAgICBFdmVudCBub3RpZnlpbmcgYSB0YXNrIGNvbXBsZXRlZAorICAgICIiIgorCitjbGFzcyBzY2VuZVF1ZXVlVGFza0NvbXBsZXRlZChzY2VuZVF1ZXVlRXZlbnQpOgorICAgICIiIgorICAgIEV2ZW50IG5vdGlmeWluZyBhIHNldHNjZW5lIHRhc2sgY29tcGxldGVkCisgICAgIiIiCisKK2NsYXNzIHJ1blF1ZXVlVGFza1NraXBwZWQocnVuUXVldWVFdmVudCk6CisgICAgIiIiCisgICAgRXZlbnQgbm90aWZ5aW5nIGEgdGFzayB3YXMgc2tpcHBlZAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrLCBzdGF0cywgcnEsIHJlYXNvbik6CisgICAgICAgIHJ1blF1ZXVlRXZlbnQuX19pbml0X18oc2VsZiwgdGFzaywgc3RhdHMsIHJxKQorICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorCitjbGFzcyBydW5RdWV1ZVBpcGUoKToKKyAgICAiIiIKKyAgICBBYnN0cmFjdGlvbiBmb3IgYSBwaXBlIGJldHdlZW4gYSB3b3JrZXIgdGhyZWFkIGFuZCB0aGUgc2VydmVyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVpbiwgcGlwZW91dCwgZCwgcnEsIHJxZXhlYyk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBwaXBlaW4KKyAgICAgICAgaWYgcGlwZW91dDoKKyAgICAgICAgICAgIHBpcGVvdXQuY2xvc2UoKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHNlbGYuaW5wdXQpCisgICAgICAgIHNlbGYucXVldWUgPSAiIgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucnEgPSBycQorICAgICAgICBzZWxmLnJxZXhlYyA9IHJxZXhlYworCisgICAgZGVmIHNldHJ1bnF1ZXVlZXhlYyhzZWxmLCBycWV4ZWMpOgorICAgICAgICBzZWxmLnJxZXhlYyA9IHJxZXhlYworCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIGZvciB3IGluIFtzZWxmLnJxLndvcmtlciwgc2VsZi5ycS5mYWtld29ya2VyXToKKyAgICAgICAgICAgIGlmIG5vdCB3OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3LnBvbGwoKQorICAgICAgICAgICAgaWYgdy5yZXR1cm5jb2RlIGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5ycS50ZWFyZG93bjoKKyAgICAgICAgICAgICAgICBuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIHNlbGYucnEud29ya2VyIGFuZCB3LnBpZCA9PSBzZWxmLnJxLndvcmtlci5waWQ6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiV29ya2VyIgorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5ycS5mYWtld29ya2VyIGFuZCB3LnBpZCA9PSBzZWxmLnJxLmZha2V3b3JrZXIucGlkOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gIkZha2Vyb290IgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCIlcyBwcm9jZXNzICglcykgZXhpdGVkIHVuZXhwZWN0ZWRseSAoJXMpLCBzaHV0dGluZyBkb3duLi4uIiAlIChuYW1lLCB3LnBpZCwgc3RyKHcucmV0dXJuY29kZSkpKQorICAgICAgICAgICAgICAgIHNlbGYucnEuZmluaXNoX3J1bnF1ZXVlKFRydWUpCisKKyAgICAgICAgc3RhcnQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWUgKyBzZWxmLmlucHV0LnJlYWQoMTAyNDAwKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbmQgPSBsZW4oc2VsZi5xdWV1ZSkKKyAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgIHdoaWxlIGZvdW5kIGFuZCBsZW4oc2VsZi5xdWV1ZSk6CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBpbmRleCA9IHNlbGYucXVldWUuZmluZCgiPC9ldmVudD4iKQorICAgICAgICAgICAgd2hpbGUgaW5kZXggIT0gLTEgYW5kIHNlbGYucXVldWUuc3RhcnRzd2l0aCgiPGV2ZW50PiIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBwaWNrbGUubG9hZHMoc2VsZi5xdWV1ZVs3OmluZGV4XSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlJ1blF1ZXVlIiwgImZhaWxlZCBsb2FkIHBpY2tsZSAnJXMnOiAnJXMnIiAlIChlLCBzZWxmLnF1ZXVlWzc6aW5kZXhdKSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlX2Zyb21fd29ya2VyKGV2ZW50LCBzZWxmLmQpCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrODpdCisgICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLnF1ZXVlLmZpbmQoIjwvZXZlbnQ+IikKKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V4aXRjb2RlPiIpCisgICAgICAgICAgICB3aGlsZSBpbmRleCAhPSAtMSBhbmQgc2VsZi5xdWV1ZS5zdGFydHN3aXRoKCI8ZXhpdGNvZGU+Iik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0YXNrLCBzdGF0dXMgPSBwaWNrbGUubG9hZHMoc2VsZi5xdWV1ZVsxMDppbmRleF0pCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJSdW5RdWV1ZSIsICJmYWlsZWQgbG9hZCBwaWNrbGUgJyVzJzogJyVzJyIgJSAoZSwgc2VsZi5xdWV1ZVsxMDppbmRleF0pKQorICAgICAgICAgICAgICAgIHNlbGYucnFleGVjLnJ1bnF1ZXVlX3Byb2Nlc3Nfd2FpdHBpZCh0YXNrLCBzdGF0dXMpCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZSA9IHNlbGYucXVldWVbaW5kZXgrMTE6XQorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5xdWV1ZS5maW5kKCI8L2V4aXRjb2RlPiIpCisgICAgICAgIHJldHVybiAoZW5kID4gc3RhcnQpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYucmVhZCgpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGVuKHNlbGYucXVldWUpID4gMDoKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nLCB3b3JrZXIgbGVmdCBwYXJ0aWFsIG1lc3NhZ2U6ICVzIiAlIHNlbGYucXVldWUpCisgICAgICAgIHNlbGYuaW5wdXQuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYmIvc2VydmVyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWU0ODAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSw5NiBAQAorIworIyBCaXRCYWtlIEJhc2UgU2VydmVyIENvZGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA4ICBSaWNoYXJkIFB1cmRpZQorIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgICBBbGV4YW5kcnUgRGFtaWFuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiIgQmFzZSBjb2RlIGZvciBCaXRiYWtlIHNlcnZlciBwcm9jZXNzCisKK0hhdmUgYSBjb21tb24gYmFzZSBmb3IgdGhhdCBhbGwgQml0YmFrZSBzZXJ2ZXIgY2xhc3NlcyBlbnN1cmVzIGEgY29uc2lzdGVudAorYXBwcm9hY2ggdG8gdGhlIGludGVyZmFjZSwgYW5kIG1pbmltaXplIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBjb2RlIGR1cGxpY2F0aW9uLgorCisiIiIKKworIiIiICBCYXNlSW1wbFNlcnZlcigpIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgWFhTZXJ2ZXIoKSBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICBUaGVzZSBjbGFzc2VzIGNvbnRhaW4gdGhlIGFjdHVhbCBjb2RlIHRoYXQgcnVucyB0aGUgc2VydmVyIHNpZGUsIGkuZS4KKyAgICBsaXN0ZW5zIGZvciB0aGUgY29tbWFuZHMgYW5kIGV4ZWN1dGVzIHRoZW0uIEFsdGhvdWdoIHRoZXNlIGltcGxlbWVudGF0aW9ucworICAgIGNvbnRhaW4gYWxsIHRoZSBkYXRhIG9mIHRoZSBvcmlnaW5hbCBiaXRiYWtlIGNvbW1hbmQsIGkuZSB0aGUgY29va2VyIGluc3RhbmNlLAorICAgIHRoZXkgbWF5IHdlbGwgcnVuIG9uIGEgZGlmZmVyZW50IHByb2Nlc3Mgb3IgZXZlbiBtYWNoaW5lLgorCisiIiIKKworY2xhc3MgQmFzZUltcGxTZXJ2ZXIoKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2lkbGVmdW5zID0ge30KKworICAgIGRlZiBhZGRjb29rZXIoc2VsZiwgY29va2VyKToKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKworICAgIGRlZiByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hpbGUgdGhlIHNlcnZlciBpcyBpZGxlIiIiCisgICAgICAgIGFzc2VydCBoYXNhdHRyKGZ1bmN0aW9uLCAnX19jYWxsX18nKQorICAgICAgICBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0gPSBkYXRhCisKKworCisiIiIgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uIGNsYXNzIGlzIHRoZSBjb21tb24gYW5jZXN0b3IgdG8gYWxsCisgICAgQml0QmFrZVNlcnZlckNvbm5lY3Rpb24gY2xhc3Nlcy4KKworICAgIFRoZXNlIGNsYXNzZXMgY29udHJvbCB0aGUgcmVtb3RlIHNlcnZlci4gVGhlIG9ubHkgY29tbWFuZCBjdXJyZW50bHkKKyAgICBpbXBsZW1lbnRlZCBpcyB0aGUgdGVybWluYXRlKCkgY29tbWFuZC4KKworIiIiCisKK2NsYXNzIEJpdEJha2VCYXNlU2VydmVyQ29ubmVjdGlvbigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJJbXBsKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisKKyIiIiBCaXRCYWtlQmFzZVNlcnZlciBjbGFzcyBpcyB0aGUgY29tbW9uIGFuY2VzdG9yIHRvIGFsbCBCaXRiYWtlIHNlcnZlcnMKKworICAgIERlcml2ZSB0aGlzIGNsYXNzIGluIG9yZGVyIHRvIGltcGxlbWVudCBhIEJpdEJha2VTZXJ2ZXIgd2hpY2ggaXMgdGhlCisgICAgY29udHJvbGxpbmcgc3R1YiBmb3IgdGhlIGFjdHVhbCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24KKworIiIiCitjbGFzcyBCaXRCYWtlQmFzZVNlcnZlcihvYmplY3QpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlckltcGwgPSBOb25lICAjIHdlIGVuc3VyZSBhIHJ1bnRpbWUgY3Jhc2ggaWYgbm90IG92ZXJsb2FkZWQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBhZGRjb29rZXIoc2VsZiwgY29va2VyKToKKyAgICAgICAgc2VsZi5jb29rZXIgPSBjb29rZXIKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsLmFkZGNvb2tlcihjb29rZXIpCisKKyAgICBkZWYgZ2V0U2VydmVySWRsZUNCKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJJbXBsLnJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24KKworICAgIGRlZiBzYXZlQ29ubmVjdGlvbkRldGFpbHMoc2VsZik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKyAgICAgICAgcmFpc2UgICAiTXVzdCByZWRlZmluZSB0aGUgJXMuZXN0YWJsaXNoQ29ubmVjdGlvbigpIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICBkZWYgZW5kU2Vzc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnRlcm1pbmF0ZSgpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weSBiL2JpdGJha2UvbGliL2JiL3NlcnZlci9wcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmY2EzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9zZXJ2ZXIvcHJvY2Vzcy5weQpAQCAtMCwwICsxLDI2NCBAQAorIworIyBCaXRCYWtlIFByb2Nlc3MgYmFzZWQgc2VydmVyLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgQm9iIEZvZXJzdGVyIDxyb2JlcnRAZXJhZnguY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCisgICAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzIGJhc2VkIHNlcnZlciBmb3IgYml0YmFrZS4KKyIiIgorCitpbXBvcnQgYmIKK2ltcG9ydCBiYi5ldmVudAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBzZWxlY3QKK2Zyb20gUXVldWUgaW1wb3J0IEVtcHR5Citmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgRXZlbnQsIFByb2Nlc3MsIHV0aWwsIFF1ZXVlLCBQaXBlLCBxdWV1ZXMsIE1hbmFnZXIKKworZnJvbSAuIGltcG9ydCBCaXRCYWtlQmFzZVNlcnZlciwgQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uLCBCYXNlSW1wbFNlcnZlcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZScpCisKK2NsYXNzIFNlcnZlckNvbW11bmljYXRvcigpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uZWN0aW9uLCBldmVudF9oYW5kbGUsIHNlcnZlcik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUgPSBldmVudF9oYW5kbGUKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKworICAgIGRlZiBydW5Db21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICAjIEB0b2RvIHRyeS9leGNlcHQKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNlbmQoY29tbWFuZCkKKworICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgIyBkb24ndCBsZXQgdGhlIHVzZXIgY3RybC1jIHdoaWxlIHdlJ3JlIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbm5lY3Rpb24ucG9sbCgyMCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucmVjdigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRpbWVvdXQgd2hpbGUgYXR0ZW1wdGluZyB0byBjb21tdW5pY2F0ZSB3aXRoIGJpdGJha2Ugc2VydmVyIikKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0RXZlbnRIYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmV2ZW50X2hhbmRsZS52YWx1ZQorCitjbGFzcyBFdmVudEFkYXB0ZXIoKToKKyAgICAiIiIKKyAgICBBZGFwdGVyIHRvIHdyYXAgb3VyIGV2ZW50IHF1ZXVlIHNpbmNlIHRoZSBjYWxsZXIgKGJiLmV2ZW50KSBleHBlY3RzIHRvCisgICAgY2FsbCBhIHNlbmQoKSBtZXRob2QsIGJ1dCBvdXIgYWN0dWFsIHF1ZXVlIG9ubHkgaGFzIHB1dCgpCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlKToKKyAgICAgICAgc2VsZi5xdWV1ZSA9IHF1ZXVlCisKKyAgICBkZWYgc2VuZChzZWxmLCBldmVudCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVldWUucHV0KGV2ZW50KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHByaW50KCJFdmVudEFkYXB0ZXIgcHVrZWQ6ICVzIiAlIHN0cihlcnIpKQorCisKK2NsYXNzIFByb2Nlc3NTZXJ2ZXIoUHJvY2VzcywgQmFzZUltcGxTZXJ2ZXIpOgorICAgIHByb2ZpbGVfZmlsZW5hbWUgPSAicHJvZmlsZS5sb2ciCisgICAgcHJvZmlsZV9wcm9jZXNzZWRfZmlsZW5hbWUgPSAicHJvZmlsZS5sb2cucHJvY2Vzc2VkIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfY2hhbm5lbCwgZXZlbnRfcXVldWUsIGZlYXR1cmVsaXN0KToKKyAgICAgICAgQmFzZUltcGxTZXJ2ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgUHJvY2Vzcy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbCA9IGNvbW1hbmRfY2hhbm5lbAorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gZXZlbnRfcXVldWUKKyAgICAgICAgc2VsZi5ldmVudCA9IEV2ZW50QWRhcHRlcihldmVudF9xdWV1ZSkKKyAgICAgICAgc2VsZi5mZWF0dXJlbGlzdCA9IGZlYXR1cmVsaXN0CisgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5xdWl0aW4sIHNlbGYucXVpdG91dCA9IFBpcGUoKQorICAgICAgICBzZWxmLmV2ZW50X2hhbmRsZSA9IG11bHRpcHJvY2Vzc2luZy5WYWx1ZSgiaSIpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBmb3IgZXZlbnQgaW4gYmIuZXZlbnQudWlfcXVldWU6CisgICAgICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLnB1dChldmVudCkKKyAgICAgICAgc2VsZi5ldmVudF9oYW5kbGUudmFsdWUgPSBiYi5ldmVudC5yZWdpc3Rlcl9VSUhoYW5kbGVyKHNlbGYsIFRydWUpCisKKyAgICAgICAgYmIuY29va2VyLnNlcnZlcl9tYWluKHNlbGYuY29va2VyLCBzZWxmLm1haW4pCisKKyAgICBkZWYgbWFpbihzZWxmKToKKyAgICAgICAgIyBJZ25vcmUgU0lHSU5UIHdpdGhpbiB0aGUgc2VydmVyLCBhcyBhbGwgU0lHSU5UIGhhbmRsaW5nIGlzIGRvbmUgYnkKKyAgICAgICAgIyB0aGUgVUkgYW5kIGNvbW11bmljYXRlZCB0byB1cworICAgICAgICBzZWxmLnF1aXRpbi5jbG9zZSgpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR19JR04pCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kX2NoYW5uZWwucG9sbCgpOgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi5jb21tYW5kX2NoYW5uZWwucmVjdigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChjb21tYW5kKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpdG91dC5wb2xsKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVpdG91dC5yZWN2KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5xdWl0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgc2VsZi5pZGxlX2NvbW1hbmRzKC4xLCBbc2VsZi5jb21tYW5kX2NoYW5uZWwsIHNlbGYucXVpdG91dF0pCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1J1bm5pbmcgY29tbWFuZCAlcycsIGNvbW1hbmQpCisKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZS5jbG9zZSgpCisgICAgICAgIGJiLmV2ZW50LnVucmVnaXN0ZXJfVUlIaGFuZGxlcihzZWxmLmV2ZW50X2hhbmRsZS52YWx1ZSkKKyAgICAgICAgc2VsZi5jb21tYW5kX2NoYW5uZWwuY2xvc2UoKQorICAgICAgICBzZWxmLmNvb2tlci5zaHV0ZG93bihUcnVlKQorICAgICAgICBzZWxmLnF1aXRvdXQuY2xvc2UoKQorCisgICAgZGVmIGlkbGVfY29tbWFuZHMoc2VsZiwgZGVsYXksIGZkcz1Ob25lKToKKyAgICAgICAgbmV4dHNsZWVwID0gZGVsYXkKKyAgICAgICAgaWYgbm90IGZkczoKKyAgICAgICAgICAgIGZkcyA9IFtdCisKKyAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgRmFsc2UpCisgICAgICAgICAgICAgICAgaWYgcmV0dmFsIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5faWRsZWZ1bnNbZnVuY3Rpb25dCisgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbGlmIHJldHZhbCBpcyBUcnVlOgorICAgICAgICAgICAgICAgICAgICBuZXh0c2xlZXAgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJldHZhbCwgZmxvYXQpOgorICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsIDwgbmV4dHNsZWVwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IHJldHZhbAorICAgICAgICAgICAgICAgIGVsaWYgbmV4dHNsZWVwIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmRzID0gZmRzICsgcmV0dmFsCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdSdW5uaW5nIGlkbGUgZnVuY3Rpb24nKQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KKyAgICAgICAgICAgICAgICBzZWxmLnF1aXQgPSBUcnVlCisKKyAgICAgICAgaWYgbmV4dHNsZWVwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChmZHMsW10sW10sbmV4dHNsZWVwKQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYSBjb29rZXIgY29tbWFuZCBvbiB0aGUgc2VydmVyCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNvbW1hbmRfY2hhbm5lbC5zZW5kKHNlbGYuY29va2VyLmNvbW1hbmQucnVuQ29tbWFuZChjb21tYW5kKSkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnF1aXRpbi5zZW5kKCJxdWl0IikKKyAgICAgICAgc2VsZi5xdWl0aW4uY2xvc2UoKQorCitjbGFzcyBCaXRCYWtlUHJvY2Vzc1NlcnZlckNvbm5lY3Rpb24oQml0QmFrZUJhc2VTZXJ2ZXJDb25uZWN0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVySW1wbCwgdWlfY2hhbm5lbCwgZXZlbnRfcXVldWUpOgorICAgICAgICBzZWxmLnByb2NzZXJ2ZXIgPSBzZXJ2ZXJJbXBsCisgICAgICAgIHNlbGYudWlfY2hhbm5lbCA9IHVpX2NoYW5uZWwKKyAgICAgICAgc2VsZi5ldmVudF9xdWV1ZSA9IGV2ZW50X3F1ZXVlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNlcnZlckNvbW11bmljYXRvcihzZWxmLnVpX2NoYW5uZWwsIHNlbGYucHJvY3NlcnZlci5ldmVudF9oYW5kbGUsIHNlbGYucHJvY3NlcnZlcikKKyAgICAgICAgc2VsZi5ldmVudHMgPSBzZWxmLmV2ZW50X3F1ZXVlCisgICAgICAgIHNlbGYudGVybWluYXRlZCA9IEZhbHNlCisKKyAgICBkZWYgc2lndGVybV90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGJiLmVycm9yKCJVSSByZWNlaXZlZCBTSUdURVJNIikKKyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXJtaW5hdGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudGVybWluYXRlZCA9IFRydWUKKyAgICAgICAgZGVmIGZsdXNoZXZlbnRzKCk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBzZWxmLmV2ZW50X3F1ZXVlLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKEVtcHR5LCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBsb2dnaW5nLkxvZ1JlY29yZCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKyAgICAgICAgc2VsZi5wcm9jc2VydmVyLnN0b3AoKQorCisgICAgICAgIHdoaWxlIHNlbGYucHJvY3NlcnZlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgZmx1c2hldmVudHMoKQorICAgICAgICAgICAgc2VsZi5wcm9jc2VydmVyLmpvaW4oMC4xKQorCisgICAgICAgIHNlbGYudWlfY2hhbm5lbC5jbG9zZSgpCisgICAgICAgIHNlbGYuZXZlbnRfcXVldWUuY2xvc2UoKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLnNldGV4aXQoKQorCisjIFdyYXAgUXVldWUgdG8gcHJvdmlkZSBBUEkgd2hpY2ggaXNuJ3Qgc2VydmVyIGltcGxlbWVudGF0aW9uIHNwZWNpZmljCitjbGFzcyBQcm9jZXNzRXZlbnRRdWV1ZShtdWx0aXByb2Nlc3NpbmcucXVldWVzLlF1ZXVlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMuUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5leGl0ID0gRmFsc2UKKworICAgIGRlZiBzZXRleGl0KHNlbGYpOgorICAgICAgICBzZWxmLmV4aXQgPSBUcnVlCisKKyAgICBkZWYgd2FpdEV2ZW50KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBpZiBzZWxmLmV4aXQ6CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldGV4aXQoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoVHJ1ZSwgdGltZW91dCkKKyAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRFdmVudChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRleGl0KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KEZhbHNlKQorICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIEJpdEJha2VTZXJ2ZXIoQml0QmFrZUJhc2VTZXJ2ZXIpOgorICAgIGRlZiBpbml0U2VydmVyKHNlbGYpOgorICAgICAgICAjIGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiAgV2UgdXNlIGJpZGlyZWN0aW9uYWwgcGlwZXMgZm9yCisgICAgICAgICMgdWkgPC0tPiBzZXJ2ZXIgY29tbWFuZC9yZXNwb25zZSBwYWlycworICAgICAgICAjIGFuZCBhIHF1ZXVlIGZvciBzZXJ2ZXIgLT4gdWkgZXZlbnQgbm90aWZpY2F0aW9ucworICAgICAgICAjCisgICAgICAgIHNlbGYudWlfY2hhbm5lbCwgc2VsZi5zZXJ2ZXJfY2hhbm5lbCA9IFBpcGUoKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlID0gUHJvY2Vzc0V2ZW50UXVldWUoMCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gUHJvY2Vzc1NlcnZlcihzZWxmLnNlcnZlcl9jaGFubmVsLCBzZWxmLmV2ZW50X3F1ZXVlLCBOb25lKQorICAgICAgICBzZWxmLmV2ZW50X3F1ZXVlLnNlcnZlciA9IHNlbGYuc2VydmVySW1wbAorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKworICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBCaXRCYWtlUHJvY2Vzc1NlcnZlckNvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJJbXBsLCBzZWxmLnVpX2NoYW5uZWwsIHNlbGYuZXZlbnRfcXVldWUpCisKKyAgICAgICAgXywgZXJyb3IgPSBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdGlvbi5ydW5Db21tYW5kKFsic2V0RmVhdHVyZXMiLCBmZWF0dXJlc2V0XSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBzZXQgdGhlIGNvb2tlciB0byB0aGUgY29ycmVjdCBmZWF0dXJlc2V0OiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIGxhbWJkYSBpLCBzOiBzZWxmLmNvbm5lY3Rpb24uc2lndGVybV90ZXJtaW5hdGUoKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvc2VydmVyL3htbHJwYy5weSBiL2JpdGJha2UvbGliL2JiL3NlcnZlci94bWxycGMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2NDdjMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3NlcnZlci94bWxycGMucHkKQEAgLTAsMCArMSwzOTIgQEAKKyMKKyMgQml0QmFrZSBYTUxSUEMgU2VydmVyCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwOCAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIgorICAgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYW4geG1scnBjIHNlcnZlciBmb3IgQml0QmFrZS4KKworICAgIFVzZSB0aGlzIGJ5IGRlcml2aW5nIGEgY2xhc3MgZnJvbSBCaXRCYWtlWE1MUlBDU2VydmVyIGFuZCB0aGVuIGFkZGluZworICAgIG1ldGhvZHMgd2hpY2ggeW91IHdhbnQgdG8gImV4cG9ydCIgdmlhIFhNTFJQQy4gSWYgdGhlIG1ldGhvZHMgaGF2ZSB0aGUKKyAgICBwcmVmaXggeG1scnBjXywgdGhlbiByZWdpc3RlcmluZyB0aG9zZSBmdW5jdGlvbiB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5LAorICAgIGlmIG5vdCwgeW91IG5lZWQgdG8gY2FsbCByZWdpc3Rlcl9mdW5jdGlvbi4KKworICAgIFVzZSByZWdpc3Rlcl9pZGxlX2Z1bmN0aW9uKCkgdG8gYWRkIGEgZnVuY3Rpb24gd2hpY2ggdGhlIHhtbHJwYyBzZXJ2ZXIKKyAgICBjYWxscyBmcm9tIHdpdGhpbiBzZXJ2ZXJfZm9yZXZlciB3aGVuIG5vIHJlcXVlc3RzIGFyZSBwZW5kaW5nLiBNYWtlIHN1cmUKKyAgICB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhcmUgbm9uLWJsb2NraW5nIG9yIGVsc2UgeW91IHdpbGwgaW50cm9kdWNlIGxhdGVuY3kKKyAgICBpbiB0aGUgc2VydmVyJ3MgbWFpbiBsb29wLgorIiIiCisKK2ltcG9ydCBiYgoraW1wb3J0IHhtbHJwY2xpYiwgc3lzCitmcm9tIGJiIGltcG9ydCBkYWVtb25pemUKK2Zyb20gYmIudWkgaW1wb3J0IHVpZXZlbnQKK2ltcG9ydCBoYXNobGliLCB0aW1lCitpbXBvcnQgc29ja2V0CitpbXBvcnQgb3MsIHNpZ25hbAoraW1wb3J0IHRocmVhZGluZwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKworREVCVUcgPSBGYWxzZQorCitmcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgoraW1wb3J0IGluc3BlY3QsIHNlbGVjdCwgaHR0cGxpYgorCitmcm9tIC4gaW1wb3J0IEJpdEJha2VCYXNlU2VydmVyLCBCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24sIEJhc2VJbXBsU2VydmVyCisKK2NsYXNzIEJCVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSBOb25lCisgICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuX19pbml0X18oc2VsZikKKworICAgICMgTW9kaWZpZWQgZnJvbSBkZWZhdWx0IHRvIHBhc3MgdGltZW91dCB0byBIVFRQQ29ubmVjdGlvbgorICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CisgICAgICAgICNyZXR1cm4gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiBpZiBwb3NzaWJsZS4gIFRoaXMgYWxsb3dzCisgICAgICAgICNIVFRQLzEuMSBrZWVwLWFsaXZlLgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uIGFuZCBob3N0ID09IHNlbGYuX2Nvbm5lY3Rpb25bMF06CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQorCisgICAgICAgICMgY3JlYXRlIGEgSFRUUCBjb25uZWN0aW9uIG9iamVjdCBmcm9tIGEgaG9zdCBkZXNjcmlwdG9yCisgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCisgICAgICAgICNzdG9yZSB0aGUgaG9zdCBhcmd1bWVudCBhbG9uZyB3aXRoIHRoZSBjb25uZWN0aW9uIG9iamVjdAorICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gaG9zdCwgaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihjaG9zdCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSB0b2tlbgorCisgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBoLCBib2R5KToKKyAgICAgICAgaWYgc2VsZi5jb25uZWN0aW9uX3Rva2VuOgorICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkJpdGJha2UtdG9rZW4iLCBzZWxmLmNvbm5lY3Rpb25fdG9rZW4pCisgICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuc2VuZF9jb250ZW50KHNlbGYsIGgsIGJvZHkpCisKK2RlZiBfY3JlYXRlX3NlcnZlcihob3N0LCBwb3J0LCB0aW1lb3V0ID0gNjApOgorICAgIHQgPSBCQlRyYW5zcG9ydCh0aW1lb3V0KQorICAgIHMgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC8iICUgKGhvc3QsIHBvcnQpLCB0cmFuc3BvcnQ9dCwgYWxsb3dfbm9uZT1UcnVlKQorICAgIHJldHVybiBzLCB0CisKK2NsYXNzIEJpdEJha2VTZXJ2ZXJDb21tYW5kcygpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcik6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IEZhbHNlCisKKyAgICBkZWYgcmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgICIiIgorICAgICAgICBSZWdpc3RlciBhIHJlbW90ZSBVSSBFdmVudCBIYW5kbGVyCisgICAgICAgICIiIgorICAgICAgICBzLCB0ID0gX2NyZWF0ZV9zZXJ2ZXIoaG9zdCwgcG9ydCkKKworICAgICAgICAjIHdlIGRvbid0IGFsbG93IGNvbm5lY3Rpb25zIGlmIHRoZSBjb29rZXIgaXMgcnVubmluZworICAgICAgICBpZiAoc2VsZi5jb29rZXIuc3RhdGUgaW4gW2JiLmNvb2tlci5zdGF0ZS5wYXJzaW5nLCBiYi5jb29rZXIuc3RhdGUucnVubmluZ10pOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLmV2ZW50X2hhbmRsZSA9IGJiLmV2ZW50LnJlZ2lzdGVyX1VJSGhhbmRsZXIocywgVHJ1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZXZlbnRfaGFuZGxlCisKKyAgICBkZWYgdW5yZWdpc3RlckV2ZW50SGFuZGxlcihzZWxmLCBoYW5kbGVyTnVtKToKKyAgICAgICAgIiIiCisgICAgICAgIFVucmVnaXN0ZXIgYSByZW1vdGUgVUkgRXZlbnQgSGFuZGxlcgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGJiLmV2ZW50LnVucmVnaXN0ZXJfVUlIaGFuZGxlcihoYW5kbGVyTnVtKQorCisgICAgZGVmIHJ1bkNvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgICIiIgorICAgICAgICBSdW4gYSBjb29rZXIgY29tbWFuZCBvbiB0aGUgc2VydmVyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jb29rZXIuY29tbWFuZC5ydW5Db21tYW5kKGNvbW1hbmQsIHNlbGYuc2VydmVyLnJlYWRvbmx5KQorCisgICAgZGVmIGdldEV2ZW50SGFuZGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ldmVudF9oYW5kbGUKKworICAgIGRlZiB0ZXJtaW5hdGVTZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUcmlnZ2VyIHRoZSBzZXJ2ZXIgdG8gcXVpdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXJ2ZXIucXVpdCA9IFRydWUKKyAgICAgICAgcHJpbnQoIlNlcnZlciAoY29va2VyKSBleGl0aW5nIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkQ2xpZW50KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmhhc19jbGllbnQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0b2tlbiA9IGhhc2hsaWIubWQ1KHN0cih0aW1lLnRpbWUoKSkpLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuc2VydmVyLnNldF9jb25uZWN0aW9uX3Rva2VuKHRva2VuKQorICAgICAgICBzZWxmLmhhc19jbGllbnQgPSBUcnVlCisgICAgICAgIHJldHVybiB0b2tlbgorCisgICAgZGVmIHJlbW92ZUNsaWVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5oYXNfY2xpZW50OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2V0X2Nvbm5lY3Rpb25fdG9rZW4oTm9uZSkKKyAgICAgICAgICAgIHNlbGYuaGFzX2NsaWVudCA9IEZhbHNlCisgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5zaW5nbGVfdXNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnF1aXQgPSBUcnVlCisKKyMgVGhpcyByZXF1ZXN0IGhhbmRsZXIgY2hlY2tzIGlmIHRoZSByZXF1ZXN0IGhhcyBhICJCaXRiYWtlLXRva2VuIiBoZWFkZXIKKyMgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgY2xpZW50IHNpZGUpIGFuZCBjb21wYXJlcyBpdCB3aXRoIGl0cyBpbnRlcm5hbAorIyAiQml0YmFrZS10b2tlbiIgZmllbGQgKHRoaXMgY29tZXMgZnJvbSB0aGUgc2VydmVyKS4gSWYgdGhlIHR3byBhcmUgbm90CisjIGVxdWFsLCBpdCBpcyBhc3N1bWVkIHRoYXQgYSBjbGllbnQgaXMgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlcgorIyB3aGlsZSBhbm90aGVyIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlci4gSW4gdGhpcyBjYXNlLCBhIDUwMyBlcnJvcgorIyAoInNlcnZpY2UgdW5hdmFpbGFibGUiKSBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgorY2xhc3MgQml0QmFrZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlcnZlcik6CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpCisKKyAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gc2VsZi5oZWFkZXJzWyJCaXRiYWtlLXRva2VuIl0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmVtb3RlX3Rva2VuID0gTm9uZQorICAgICAgICBpZiByZW1vdGVfdG9rZW4gIT0gc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbl90b2tlbiBhbmQgcmVtb3RlX3Rva2VuICE9ICJvYnNlcnZlciI6CisgICAgICAgICAgICBzZWxmLnJlcG9ydF81MDMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVtb3RlX3Rva2VuID09ICJvYnNlcnZlciI6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZG9ubHkgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWRvbmx5ID0gRmFsc2UKKyAgICAgICAgICAgIFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLmRvX1BPU1Qoc2VsZikKKworICAgIGRlZiByZXBvcnRfNTAzKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNTAzKQorICAgICAgICByZXNwb25zZSA9ICdObyBtb3JlIGNsaWVudCBhbGxvd2VkJworICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihyZXNwb25zZSkpKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZSkKKworCitjbGFzcyBYTUxSUENQcm94eVNlcnZlcihCYXNlSW1wbFNlcnZlcik6CisgICAgIiIiIG5vdCBhIHJlYWwgd29ya2luZyBzZXJ2ZXIsIGJ1dCBhIHN0dWIgZm9yIGEgcHJveHkgc2VydmVyIGNvbm5lY3Rpb24KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisKK2NsYXNzIFhNTFJQQ1NlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIsIEJhc2VJbXBsU2VydmVyKToKKyAgICAjIHJlbW92ZSB0aGlzIHdoZW4geW91J3JlIGRvbmUgd2l0aCBkZWJ1Z2dpbmcKKyAgICAjIGFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW50ZXJmYWNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnN0cnVjdG9yCisgICAgICAgICIiIgorICAgICAgICBCYXNlSW1wbFNlcnZlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBpZiAoaW50ZXJmYWNlWzFdID09IDApOiAgICAgIyBhbm9ueW1vdXMgcG9ydCwgbm90IGdldHRpbmcgcmV1c2VkCisgICAgICAgICAgICBzZWxmLnNpbmdsZV91c2UgPSBUcnVlCisgICAgICAgICMgVXNlIGF1dG8gcG9ydCBjb25maWd1cmF0aW9uCisgICAgICAgIGlmIChpbnRlcmZhY2VbMV0gPT0gLTEpOgorICAgICAgICAgICAgaW50ZXJmYWNlID0gKGludGVyZmFjZVswXSwgMCkKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLl9faW5pdF9fKHNlbGYsIGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIYW5kbGVyPUJpdEJha2VYTUxSUENSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSBOb25lCisgICAgICAgICNzZWxmLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IEJpdEJha2VTZXJ2ZXJDb21tYW5kcyhzZWxmKQorICAgICAgICBzZWxmLmF1dG9yZWdpc3Rlcl9hbGxfZnVuY3Rpb25zKHNlbGYuY29tbWFuZHMsICIiKQorICAgICAgICBzZWxmLmludGVyZmFjZSA9IGludGVyZmFjZQorICAgICAgICBzZWxmLnNpbmdsZV91c2UgPSBGYWxzZQorCisgICAgZGVmIGFkZGNvb2tlcihzZWxmLCBjb29rZXIpOgorICAgICAgICBCYXNlSW1wbFNlcnZlci5hZGRjb29rZXIoc2VsZiwgY29va2VyKQorICAgICAgICBzZWxmLmNvbW1hbmRzLmNvb2tlciA9IGNvb2tlcgorCisgICAgZGVmIGF1dG9yZWdpc3Rlcl9hbGxfZnVuY3Rpb25zKHNlbGYsIGNvbnRleHQsIHByZWZpeCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHJlZ2lzdGVyaW5nIGFsbCBmdW5jdGlvbnMgaW4gdGhlIHNjb3BlCisgICAgICAgIG9mIHRoaXMgY2xhc3MgdGhhdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeAorICAgICAgICAiIiIKKyAgICAgICAgbWV0aG9kbGlzdCA9IGluc3BlY3QuZ2V0bWVtYmVycyhjb250ZXh0LCBpbnNwZWN0LmlzbWV0aG9kKQorICAgICAgICBmb3IgbmFtZSwgbWV0aG9kIGluIG1ldGhvZGxpc3Q6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKG1ldGhvZCwgbmFtZVtsZW4ocHJlZml4KTpdKQorCisKKyAgICBkZWYgc2VydmVfZm9yZXZlcihzZWxmKToKKyAgICAgICAgIyBTdGFydCB0aGUgYWN0dWFsIFhNTFJQQyBzZXJ2ZXIKKyAgICAgICAgYmIuY29va2VyLnNlcnZlcl9tYWluKHNlbGYuY29va2VyLCBzZWxmLl9zZXJ2ZV9mb3JldmVyKQorCisgICAgZGVmIF9zZXJ2ZV9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VydmUgUmVxdWVzdHMuIE92ZXJsb2FkZWQgdG8gaG9ub3IgYSBxdWl0IGNvbW1hbmQKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICBmZHMgPSBbc2VsZl0KKyAgICAgICAgICAgIG5leHRzbGVlcCA9IDAuMQorICAgICAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gTm9uZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldHZhbCBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9pZGxlZnVuc1tmdW5jdGlvbl0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiByZXR2YWwgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRzbGVlcCA9IDAKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJldHZhbCwgZmxvYXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA8IG5leHRzbGVlcCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dHNsZWVwID0gcmV0dmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmZHMgPSBmZHMgKyByZXR2YWwKKyAgICAgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldHZhbCA9PSBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZnVuY3Rpb24gZXhlY3V0ZSBmYWlsZWQ7IGRlbGV0ZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2lkbGVmdW5zW2Z1bmN0aW9uXQorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHNvY2t0aW1lb3V0ID0gc2VsZi5zb2NrZXQuZ2V0dGltZW91dCgpIG9yIG5leHRzbGVlcAorICAgICAgICAgICAgc29ja3RpbWVvdXQgPSBtaW4oc29ja3RpbWVvdXQsIG5leHRzbGVlcCkKKyAgICAgICAgICAgICMgTWlycm9yIHdoYXQgQmFzZVNlcnZlciBoYW5kbGVfcmVxdWVzdCB3b3VsZCBkbworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX3NldHMgPSBzZWxlY3Quc2VsZWN0KGZkcywgW10sIFtdLCBzb2NrdGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiBmZF9zZXRzWzBdIGFuZCBzZWxmIGluIGZkX3NldHNbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2soKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBpZ25vcmUgaW50ZXJydXB0ZWQgY2FsbHMKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBUZWxsIGlkbGUgZnVuY3Rpb25zIHdlJ3JlIGV4aXRpbmcKKyAgICAgICAgZm9yIGZ1bmN0aW9uLCBkYXRhIGluIHNlbGYuX2lkbGVmdW5zLml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnVuY3Rpb24oc2VsZiwgZGF0YSwgVHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fdG9rZW4gPSB0b2tlbgorCitjbGFzcyBCaXRCYWtlWE1MUlBDU2VydmVyQ29ubmVjdGlvbihCaXRCYWtlQmFzZVNlcnZlckNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJJbXBsLCBjbGllbnRpbmZvPSgibG9jYWxob3N0IiwgMCksIG9ic2VydmVyX29ubHkgPSBGYWxzZSwgZmVhdHVyZXNldCA9IE5vbmUpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24sIHNlbGYudHJhbnNwb3J0ID0gX2NyZWF0ZV9zZXJ2ZXIoc2VydmVySW1wbC5ob3N0LCBzZXJ2ZXJJbXBsLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50aW5mbyA9IGNsaWVudGluZm8KKyAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gc2VydmVySW1wbAorICAgICAgICBzZWxmLm9ic2VydmVyX29ubHkgPSBvYnNlcnZlcl9vbmx5CisgICAgICAgIGlmIGZlYXR1cmVzZXQ6CisgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBmZWF0dXJlc2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZlYXR1cmVzZXQgPSBbXQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgdG9rZW4gPSBOb25lKToKKyAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYub2JzZXJ2ZXJfb25seToKKyAgICAgICAgICAgICAgICB0b2tlbiA9ICJvYnNlcnZlciIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmNvbm5lY3Rpb24uYWRkQ2xpZW50KCkKKworICAgICAgICBpZiB0b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZXRfY29ubmVjdGlvbl90b2tlbih0b2tlbikKKworICAgICAgICBzZWxmLmV2ZW50cyA9IHVpZXZlbnQuQkJVSUV2ZW50UXVldWUoc2VsZi5jb25uZWN0aW9uLCBzZWxmLmNsaWVudGluZm8pCisgICAgICAgIGZvciBldmVudCBpbiBiYi5ldmVudC51aV9xdWV1ZToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLnF1ZXVlX2V2ZW50KGV2ZW50KQorCisgICAgICAgIF8sIGVycm9yID0gc2VsZi5jb25uZWN0aW9uLnJ1bkNvbW1hbmQoWyJzZXRGZWF0dXJlcyIsIHNlbGYuZmVhdHVyZXNldF0pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgIyBkaXNjb25uZWN0IHRoZSBjbGllbnQsIHdlIGNhbid0IG1ha2UgdGhlIHNldEZlYXR1cmUgd29yaworICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisgICAgICAgICAgICAjIG5vIG5lZWQgdG8gbG9nIGl0IGhlcmUsIHRoZSBlcnJvciBzaGFsbCBiZSBzZW50IHRvIHRoZSBjbGllbnQKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiByZW1vdmVDbGllbnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLm9ic2VydmVyX29ubHk6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVtb3ZlQ2xpZW50KCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgICMgRG9uJ3Qgd2FpdCBmb3Igc2VydmVyIGluZGVmaW5pdGVseQorICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5zeXN0ZW1fcXVpdCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgQml0QmFrZVNlcnZlcihCaXRCYWtlQmFzZVNlcnZlcik6CisgICAgZGVmIGluaXRTZXJ2ZXIoc2VsZiwgaW50ZXJmYWNlID0gKCJsb2NhbGhvc3QiLCAwKSk6CisgICAgICAgIHNlbGYuaW50ZXJmYWNlID0gaW50ZXJmYWNlCisgICAgICAgIHNlbGYuc2VydmVySW1wbCA9IFhNTFJQQ1NlcnZlcihpbnRlcmZhY2UpCisKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICBkYWVtb25pemUuY3JlYXRlRGFlbW9uKHNlbGYuc2VydmVySW1wbC5zZXJ2ZV9mb3JldmVyLCAiYml0YmFrZS1jb29rZXJkYWVtb24ubG9nIikKKyAgICAgICAgZGVsIHNlbGYuY29va2VyCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gQml0QmFrZVhNTFJQQ1NlcnZlckNvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJJbXBsLCBzZWxmLmludGVyZmFjZSwgRmFsc2UsIGZlYXR1cmVzZXQpCisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29ubmVjdCgpCisKKyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25fdG9rZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24udHJhbnNwb3J0LnNldF9jb25uZWN0aW9uX3Rva2VuKHRva2VuKQorCitjbGFzcyBCaXRCYWtlWE1MUlBDQ2xpZW50KEJpdEJha2VCYXNlU2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYnNlcnZlcl9vbmx5ID0gRmFsc2UsIHRva2VuID0gTm9uZSk6CisgICAgICAgIHNlbGYudG9rZW4gPSB0b2tlbgorCisgICAgICAgIHNlbGYub2JzZXJ2ZXJfb25seSA9IG9ic2VydmVyX29ubHkKKyAgICAgICAgIyBpZiB3ZSBuZWVkIGV4dHJhIGNhY2hlcywganVzdCB0ZWxsIHRoZSBzZXJ2ZXIgdG8gbG9hZCB0aGVtIGFsbAorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2F2ZUNvbm5lY3Rpb25EZXRhaWxzKHNlbGYsIHJlbW90ZSk6CisgICAgICAgIHNlbGYucmVtb3RlID0gcmVtb3RlCisKKyAgICBkZWYgZXN0YWJsaXNoQ29ubmVjdGlvbihzZWxmLCBmZWF0dXJlc2V0KToKKyAgICAgICAgIyBUaGUgZm9ybWF0IG9mICJyZW1vdGUiIG11c3QgYmUgInNlcnZlcjpwb3J0IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBbaG9zdCwgcG9ydF0gPSBzZWxmLnJlbW90ZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLndhcm4oIkZhaWxlZCB0byByZWFkIHJlbW90ZSBkZWZpbml0aW9uICglcykiICUgc3RyKGUpKQorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgICAgICMgV2UgbmVlZCBvdXIgSVAgZm9yIHRoZSBzZXJ2ZXIgY29ubmVjdGlvbi4gV2UgZ2V0IHRoZSBJUAorICAgICAgICAjIGJ5IHRyeWluZyB0byBjb25uZWN0IHdpdGggdGhlIHNlcnZlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgaXAgPSBzLmdldHNvY2tuYW1lKClbMF0KKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY3JlYXRlIHNvY2tldCBmb3IgJXM6JXMgKCVzKSIgJSAoaG9zdCwgcG9ydCwgc3RyKGUpKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJJbXBsID0gWE1MUlBDUHJveHlTZXJ2ZXIoaG9zdCwgcG9ydCkKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IEJpdEJha2VYTUxSUENTZXJ2ZXJDb25uZWN0aW9uKHNlbGYuc2VydmVySW1wbCwgKGlwLCAwKSwgc2VsZi5vYnNlcnZlcl9vbmx5LCBmZWF0dXJlc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb25uZWN0KHNlbGYudG9rZW4pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciBhdCAlczolcyAoJXMpIiAlIChob3N0LCBwb3J0LCBzdHIoZSkpKQorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgZGVmIGVuZFNlc3Npb24oc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZW1vdmVDbGllbnQoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvc2hlbGwucHkgYi9iaXRiYWtlL2xpYi9iYi9zaGVsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQ4ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvc2hlbGwucHkKQEAgLTAsMCArMSw4MjAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVmFuaWxsZSBNZWRpYQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoYW5rcyB0bzoKKyMgKiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQGhhbmRoZWxkcy5vcmc+CisjICogSnVzdGluIFBhdHJpbiA8cGFwZXJjcmFuZUByZXZlcnNlZm9sZC5jb20+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiIKK0JpdEJha2UgU2hlbGwKKworSURFQVM6CisgICAgKiBsaXN0IGRlZmluZWQgdGFza3MgcGVyIHBhY2thZ2UKKyAgICAqIGxpc3QgY2xhc3NlcworICAgICogdG9nZ2xlIGZvcmNlCisgICAgKiBjb21tYW5kIHRvIHJlcGFyc2UganVzdCBvbmUgKG9yIG1vcmUpIGJiZmlsZShzKQorICAgICogYXV0b21hdGljIGNoZWNrIGlmIHJlcGFyc2luZyBpcyBuZWNlc3NhcnkgKGlub3RpZnk/KQorICAgICogZnJvbnRlbmQgZm9yIGJiIGZpbGUgbWFuaXB1bGF0aW9uCisgICAgKiBtb3JlIHNoZWxsLWxpa2UgZmVhdHVyZXM6CisgICAgICAgIC0gb3V0cHV0IGNvbnRyb2wsIGkuZS4gcGlwZSBvdXRwdXQgaW50byBncmVwLCBzb3J0LCBldGMuCisgICAgICAgIC0gam9iIGNvbnRyb2wsIGkuZS4gYnJpbmcgcnVubmluZyBjb21tYW5kcyBpbnRvIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQKKyAgICAqIHN0YXJ0IHBhcnNpbmcgaW4gYmFja2dyb3VuZCByaWdodCBhZnRlciBzdGFydHVwCisgICAgKiBuY3Vyc2VzIGludGVyZmFjZQorCitQUk9CTEVNUzoKKyAgICAqIGZvcmNlIGRvZXNuJ3QgYWx3YXlzIHdvcmsKKyAgICAqIHJlYWRsaW5lIGNvbXBsZXRpb24gZm9yIGNvbW1hbmRzIHdpdGggbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXJzCisKKyIiIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbXBvcnQgYW5kIHNldHVwIGdsb2JhbCB2YXJpYWJsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK3RyeToKKyAgICBzZXQKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZnJvbSBzZXRzIGltcG9ydCBTZXQgYXMgc2V0CitpbXBvcnQgc3lzLCBvcywgcmVhZGxpbmUsIHNvY2tldCwgaHR0cGxpYiwgdXJsbGliLCBjb21tYW5kcywgcG9wZW4yLCBzaGxleCwgUXVldWUsIGZubWF0Y2gKK2Zyb20gYmIgaW1wb3J0IGRhdGEsIHBhcnNlLCBidWlsZCwgY2FjaGUsIHRhc2tkYXRhLCBydW5xdWV1ZSwgcHJvdmlkZXJzIGFzIFByb3ZpZGVycworCitfX3ZlcnNpb25fXyA9ICIwLjUuMy4xIgorX19jcmVkaXRzX18gPSAiIiJCaXRCYWtlIFNoZWxsIFZlcnNpb24gJXMgKEMpIDIwMDUgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CitUeXBlICdoZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiwgcHJlc3MgQ1RSTC1EIHRvIGV4aXQuIiIiICUgX192ZXJzaW9uX18KKworY21kcyA9IHt9CitsZWF2ZV9tYWlubG9vcCA9IEZhbHNlCitsYXN0X2V4Y2VwdGlvbiA9IE5vbmUKK2Nvb2tlciA9IE5vbmUKK3BhcnNlZCA9IEZhbHNlCitkZWJ1ZyA9IG9zLmVudmlyb24uZ2V0KCAiQkJTSEVMTF9ERUJVRyIsICIiICkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2xhc3MgQml0QmFrZVNoZWxsQ29tbWFuZHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIEJpdEJha2VTaGVsbENvbW1hbmRzOgorICAgICIiIlRoaXMgY2xhc3MgY29udGFpbnMgdGhlIHZhbGlkIGNvbW1hbmRzIGZvciB0aGUgc2hlbGwiIiIKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwgc2hlbGwgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYWxsIHRoZSBjb21tYW5kcyIiIgorICAgICAgICBzZWxmLl9zaGVsbCA9IHNoZWxsCisgICAgICAgIGZvciBhdHRyIGluIEJpdEJha2VTaGVsbENvbW1hbmRzLl9fZGljdF9fOgorICAgICAgICAgICAgaWYgbm90IGF0dHIuc3RhcnRzd2l0aCggIl8iICk6CisgICAgICAgICAgICAgICAgaWYgYXR0ci5lbmRzd2l0aCggIl8iICk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBhdHRyWzotMV0ubG93ZXIoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBhdHRyWzpdLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKCBCaXRCYWtlU2hlbGxDb21tYW5kcywgYXR0ciApCisgICAgICAgICAgICAgICAgZGVidWdPdXQoICJyZWdpc3RlcmluZyBjb21tYW5kICclcyciICUgY29tbWFuZCApCisgICAgICAgICAgICAgICAgIyBzY2FuIG51bWJlciBvZiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB1c2FnZSA9IGdldGF0dHIoIG1ldGhvZCwgInVzYWdlIiwgIiIgKQorICAgICAgICAgICAgICAgIGlmIHVzYWdlICE9ICI8Li4uPiI6CisgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSBsZW4oIHVzYWdlLnNwbGl0KCkgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG51bUFyZ3MgPSAtMQorICAgICAgICAgICAgICAgIHNoZWxsLnJlZ2lzdGVyQ29tbWFuZCggY29tbWFuZCwgbWV0aG9kLCBudW1BcmdzLCAiJXMgJXMiICUgKCBjb21tYW5kLCB1c2FnZSApLCBtZXRob2QuX19kb2NfXyApCisKKyAgICBkZWYgX2NoZWNrUGFyc2VkKCBzZWxmICk6CisgICAgICAgIGlmIG5vdCBwYXJzZWQ6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFRoaXMgY29tbWFuZCBuZWVkcyB0byBwYXJzZSBiYmZpbGVzLi4uIikKKyAgICAgICAgICAgIHNlbGYucGFyc2UoIE5vbmUgKQorCisgICAgZGVmIF9maW5kUHJvdmlkZXIoIHNlbGYsIGl0ZW0gKToKKyAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAjIE5lZWQgdG8gdXNlIHRhc2tEYXRhIGZvciB0aGlzIGluZm9ybWF0aW9uCisgICAgICAgIHByZWZlcnJlZCA9IGRhdGEuZ2V0VmFyKCAiUFJFRkVSUkVEX1BST1ZJREVSXyVzIiAlIGl0ZW0sIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEgKQorICAgICAgICBpZiBub3QgcHJlZmVycmVkOiBwcmVmZXJyZWQgPSBpdGVtCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGx2LCBsZiwgcHYsIHBmID0gUHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocHJlZmVycmVkLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCBjb29rZXIuc3RhdHVzKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBpdGVtIGluIGNvb2tlci5zdGF0dXMucHJvdmlkZXJzOgorICAgICAgICAgICAgICAgIHBmID0gY29va2VyLnN0YXR1cy5wcm92aWRlcnNbaXRlbV1bMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGYgPSBOb25lCisgICAgICAgIHJldHVybiBwZgorCisgICAgZGVmIGFsaWFzKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBuZXcgbmFtZSBmb3IgYSBjb21tYW5kIiIiCisgICAgICAgIG5ldywgb2xkID0gcGFyYW1zCisgICAgICAgIGlmIG5vdCBvbGQgaW4gY21kczoKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogQ29tbWFuZCAnJXMnIG5vdCBrbm93biIgJSBvbGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWRzW25ld10gPSBjbWRzW29sZF0KKyAgICAgICAgICAgIHByaW50KCJPSyIpCisgICAgYWxpYXMudXNhZ2UgPSAiPGFsaWFzPiA8Y29tbWFuZD4iCisKKyAgICBkZWYgYnVmZmVyKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBzcGVjaWZpZWQgb3V0cHV0IGJ1ZmZlciIiIgorICAgICAgICBpbmRleCA9IHBhcmFtc1swXQorICAgICAgICBwcmludChzZWxmLl9zaGVsbC5teW91dC5idWZmZXIoIGludCggaW5kZXggKSApKQorICAgIGJ1ZmZlci51c2FnZSA9ICI8aW5kZXg+IgorCisgICAgZGVmIGJ1ZmZlcnMoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTaG93IHRoZSBhdmFpbGFibGUgb3V0cHV0IGJ1ZmZlcnMiIiIKKyAgICAgICAgY29tbWFuZHMgPSBzZWxmLl9zaGVsbC5teW91dC5idWZmZXJlZENvbW1hbmRzKCkKKyAgICAgICAgaWYgbm90IGNvbW1hbmRzOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBObyBidWZmZXJlZCBjb21tYW5kcyBhdmFpbGFibGUgeWV0LiBTdGFydCBkb2luZyBzb21ldGhpbmcuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCI9IiozNSwgIkF2YWlsYWJsZSBPdXRwdXQgQnVmZmVycyIsICI9IioyNykKKyAgICAgICAgICAgIGZvciBpbmRleCwgY21kIGluIGVudW1lcmF0ZSggY29tbWFuZHMgKToKKyAgICAgICAgICAgICAgICBwcmludCgifCAlcyAlcyIgJSAoIHN0ciggaW5kZXggKS5sanVzdCggMyApLCBjbWQgKSkKKyAgICAgICAgICAgIHByaW50KCI9Iio4OCkKKworICAgIGRlZiBidWlsZCggc2VsZiwgcGFyYW1zLCBjbWQgPSAiYnVpbGQiICk6CisgICAgICAgICIiIkJ1aWxkIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgZ2xvYmFsIGxhc3RfZXhjZXB0aW9uCisgICAgICAgIGdsb2JleHByID0gcGFyYW1zWzBdCisgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgbmFtZXMgPSBnbG9iZmlsdGVyKCBjb29rZXIuc3RhdHVzLnBrZ19wbiwgZ2xvYmV4cHIgKQorICAgICAgICBpZiBsZW4oIG5hbWVzICkgPT0gMDogbmFtZXMgPSBbIGdsb2JleHByIF0KKyAgICAgICAgcHJpbnQoIlNIRUxMOiBCdWlsZGluZyAlcyIgJSAnICcuam9pbiggbmFtZXMgKSkKKworICAgICAgICB0ZCA9IHRhc2tkYXRhLlRhc2tEYXRhKGNvb2tlci5jb25maWd1cmF0aW9uLmFib3J0KQorICAgICAgICBsb2NhbGRhdGEgPSBkYXRhLmNyZWF0ZUNvcHkoY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSkKKyAgICAgICAgZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGRhdGEuZXhwYW5kS2V5cyhsb2NhbGRhdGEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFza3MgPSBbXQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgdGQuYWRkX3Byb3ZpZGVyKGxvY2FsZGF0YSwgY29va2VyLnN0YXR1cywgbmFtZSkKKyAgICAgICAgICAgICAgICBwcm92aWRlcnMgPSB0ZC5nZXRfcHJvdmlkZXIobmFtZSkKKworICAgICAgICAgICAgICAgIGlmIGxlbihwcm92aWRlcnMpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFByb3ZpZGVycy5Ob1Byb3ZpZGVyCisKKyAgICAgICAgICAgICAgICB0YXNrcy5hcHBlbmQoW25hbWUsICJkb18lcyIgJSBjbWRdKQorCisgICAgICAgICAgICB0ZC5hZGRfdW5yZXNvbHZlZChsb2NhbGRhdGEsIGNvb2tlci5zdGF0dXMpCisKKyAgICAgICAgICAgIHJxID0gcnVucXVldWUuUnVuUXVldWUoY29va2VyLCBsb2NhbGRhdGEsIGNvb2tlci5zdGF0dXMsIHRkLCB0YXNrcykKKyAgICAgICAgICAgIHJxLnByZXBhcmVfcnVucXVldWUoKQorICAgICAgICAgICAgcnEuZXhlY3V0ZV9ydW5xdWV1ZSgpCisKKyAgICAgICAgZXhjZXB0IFByb3ZpZGVycy5Ob1Byb3ZpZGVyOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBObyBQcm92aWRlciIpCisgICAgICAgICAgICBsYXN0X2V4Y2VwdGlvbiA9IFByb3ZpZGVycy5Ob1Byb3ZpZGVyCisKKyAgICAgICAgZXhjZXB0IHJ1bnF1ZXVlLlRhc2tGYWlsdXJlIGFzIGZuaWRzOgorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBydW5xdWV1ZS5UYXNrRmFpbHVyZQorCisgICAgICAgIGV4Y2VwdCBidWlsZC5GdW5jRmFpbGVkIGFzIGU6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IENvdWxkbid0IGJ1aWxkICclcyciICUgbmFtZXMpCisgICAgICAgICAgICBsYXN0X2V4Y2VwdGlvbiA9IGUKKworCisgICAgYnVpbGQudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBjbGVhbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNsZWFuIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiY2xlYW4iICkKKyAgICBjbGVhbi51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGNvbXBpbGUoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdjb21waWxlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImNvbXBpbGUiICkKKyAgICBjb21waWxlLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgY29uZmlndXJlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAnY29uZmlndXJlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImNvbmZpZ3VyZSIgKQorICAgIGNvbmZpZ3VyZS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGluc3RhbGwoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdpbnN0YWxsJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgImluc3RhbGwiICkKKyAgICBpbnN0YWxsLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgZWRpdCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNhbGwgJEVESVRPUiBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIG5hbWUgPSBwYXJhbXNbMF0KKyAgICAgICAgYmJmaWxlID0gc2VsZi5fZmluZFByb3ZpZGVyKCBuYW1lICkKKyAgICAgICAgaWYgYmJmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3Muc3lzdGVtKCAiJXMgJXMiICUgKCBvcy5lbnZpcm9uLmdldCggIkVESVRPUiIsICJ2aSIgKSwgYmJmaWxlICkgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgbmFtZSkKKyAgICBlZGl0LnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyAgICBkZWYgZW52aXJvbm1lbnQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIG91dCB0aGUgb3V0ZXIgQml0QmFrZSBlbnZpcm9ubWVudCIiIgorICAgICAgICBjb29rZXIuc2hvd0Vudmlyb25tZW50KCkKKworICAgIGRlZiBleGl0Xyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkxlYXZlIHRoZSBCaXRCYWtlIFNoZWxsIiIiCisgICAgICAgIGRlYnVnT3V0KCAic2V0dGluZyBsZWF2ZV9tYWlubG9vcCB0byB0cnVlIiApCisgICAgICAgIGdsb2JhbCBsZWF2ZV9tYWlubG9vcAorICAgICAgICBsZWF2ZV9tYWlubG9vcCA9IFRydWUKKworICAgIGRlZiBmZXRjaCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkZldGNoIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAiZmV0Y2giICkKKyAgICBmZXRjaC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIGZpbGVCdWlsZCggc2VsZiwgcGFyYW1zLCBjbWQgPSAiYnVpbGQiICk6CisgICAgICAgICIiIlBhcnNlIGFuZCBidWlsZCBhIC5iYiBmaWxlIiIiCisgICAgICAgIGdsb2JhbCBsYXN0X2V4Y2VwdGlvbgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIGJmID0gY29tcGxldGVGaWxlUGF0aCggbmFtZSApCisgICAgICAgIHByaW50KCJTSEVMTDogQ2FsbGluZyAnJXMnIG9uICclcyciICUgKCBjbWQsIGJmICkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29va2VyLmJ1aWxkRmlsZShiZiwgY21kKQorICAgICAgICBleGNlcHQgcGFyc2UuUGFyc2VFcnJvcjoKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogVW5hYmxlIHRvIG9wZW4gb3IgcGFyc2UgJyVzJyIgJSBiZikKKyAgICAgICAgZXhjZXB0IGJ1aWxkLkZ1bmNGYWlsZWQgYXMgZToKKyAgICAgICAgICAgIHByaW50KCJFUlJPUjogQ291bGRuJ3QgYnVpbGQgJyVzJyIgJSBuYW1lKQorICAgICAgICAgICAgbGFzdF9leGNlcHRpb24gPSBlCisKKyAgICBmaWxlQnVpbGQudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZUNsZWFuKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ2xlYW4gYSAuYmIgZmlsZSIiIgorICAgICAgICBzZWxmLmZpbGVCdWlsZCggcGFyYW1zLCAiY2xlYW4iICkKKyAgICBmaWxlQ2xlYW4udXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgZmlsZUVkaXQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDYWxsICRFRElUT1Igb24gYSAuYmIgZmlsZSIiIgorICAgICAgICBuYW1lID0gcGFyYW1zWzBdCisgICAgICAgIG9zLnN5c3RlbSggIiVzICVzIiAlICggb3MuZW52aXJvbi5nZXQoICJFRElUT1IiLCAidmkiICksIGNvbXBsZXRlRmlsZVBhdGgoIG5hbWUgKSApICkKKyAgICBmaWxlRWRpdC51c2FnZSA9ICI8YmJmaWxlPiIKKworICAgIGRlZiBmaWxlUmVidWlsZCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlJlYnVpbGQgKGNsZWFuICYgYnVpbGQpIGEgLmJiIGZpbGUiIiIKKyAgICAgICAgc2VsZi5maWxlQnVpbGQoIHBhcmFtcywgInJlYnVpbGQiICkKKyAgICBmaWxlUmVidWlsZC51c2FnZSA9ICI8YmJmaWxlPiIKKworICAgIGRlZiBmaWxlUmVwYXJzZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIihyZSlQYXJzZSBhIGJiIGZpbGUiIiIKKyAgICAgICAgYmJmaWxlID0gcGFyYW1zWzBdCisgICAgICAgIHByaW50KCJTSEVMTDogUGFyc2luZyAnJXMnIiAlIGJiZmlsZSkKKyAgICAgICAgcGFyc2UudXBkYXRlX210aW1lKCBiYmZpbGUgKQorICAgICAgICBjb29rZXIucGFyc2VyLnJlcGFyc2UoYmJmaWxlKQorICAgICAgICBpZiBGYWxzZTogI2Zyb21DYWNoZToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogRmlsZSBoYXMgbm90IGJlZW4gdXBkYXRlZCwgbm90IHJlcGFyc2luZyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFBhcnNlZCIpCisgICAgZmlsZVJlcGFyc2UudXNhZ2UgPSAiPGJiZmlsZT4iCisKKyAgICBkZWYgYWJvcnQoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJUb2dnbGUgYWJvcnQgdGFzayBleGVjdXRpb24gZmxhZyAoc2VlIGJpdGJha2UgLWspIiIiCisgICAgICAgIGNvb2tlci5jb25maWd1cmF0aW9uLmFib3J0ID0gbm90IGNvb2tlci5jb25maWd1cmF0aW9uLmFib3J0CisgICAgICAgIHByaW50KCJTSEVMTDogQWJvcnQgRmxhZyBpcyBub3cgJyVzJyIgJSByZXByKCBjb29rZXIuY29uZmlndXJhdGlvbi5hYm9ydCApKQorCisgICAgZGVmIGZvcmNlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiVG9nZ2xlIGZvcmNlIHRhc2sgZXhlY3V0aW9uIGZsYWcgKHNlZSBiaXRiYWtlIC1mKSIiIgorICAgICAgICBjb29rZXIuY29uZmlndXJhdGlvbi5mb3JjZSA9IG5vdCBjb29rZXIuY29uZmlndXJhdGlvbi5mb3JjZQorICAgICAgICBwcmludCgiU0hFTEw6IEZvcmNlIEZsYWcgaXMgbm93ICclcyciICUgcmVwciggY29va2VyLmNvbmZpZ3VyYXRpb24uZm9yY2UgKSkKKworICAgIGRlZiBoZWxwKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiU2hvdyBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBjb21tYW5kcyBhbmQgdGhlaXIgcHVycG9zZSIiIgorICAgICAgICBwcmludCgiPSIqMzAsICJBdmFpbGFibGUgQ29tbWFuZHMiLCAiPSIqMzApCisgICAgICAgIGZvciBjbWQgaW4gc29ydGVkKGNtZHMpOgorICAgICAgICAgICAgZnVuY3Rpb24sIG51bXBhcmFtcywgdXNhZ2UsIGhlbHB0ZXh0ID0gY21kc1tjbWRdCisgICAgICAgICAgICBwcmludCgifCAlcyB8ICVzIiAlICh1c2FnZS5sanVzdCgzMCksIGhlbHB0ZXh0KSkKKyAgICAgICAgcHJpbnQoIj0iKjc4KQorCisgICAgZGVmIGxhc3RFcnJvciggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNob3cgdGhlIHJlYXNvbiBvciBsb2cgdGhhdCB3YXMgcHJvZHVjZWQgYnkgdGhlIGxhc3QgQml0QmFrZSBldmVudCBleGNlcHRpb24iIiIKKyAgICAgICAgaWYgbGFzdF9leGNlcHRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogTm8gRXJyb3JzIHlldCAoUGhldykuLi4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhc29uLCBldmVudCA9IGxhc3RfZXhjZXB0aW9uLmFyZ3MKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogUmVhc29uIGZvciB0aGUgbGFzdCBlcnJvcjogJyVzJyIgJSByZWFzb24pCisgICAgICAgICAgICBpZiAnOicgaW4gcmVhc29uOgorICAgICAgICAgICAgICAgIG1zZywgZmlsZW5hbWUgPSByZWFzb24uc3BsaXQoICc6JyApCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBEdW1waW5nIGxvZyBmaWxlIGZvciBsYXN0IGVycm9yOiIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwcmludChvcGVuKCBmaWxlbmFtZSApLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBDb3VsZG4ndCBvcGVuICclcyciICUgZmlsZW5hbWUpCisKKyAgICBkZWYgbWF0Y2goIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIGFsbCBmaWxlcyBvciBwcm92aWRlcnMgbWF0Y2hpbmcgYSBnbG9iIGV4cHJlc3Npb24iIiIKKyAgICAgICAgd2hhdCwgZ2xvYmV4cHIgPSBwYXJhbXMKKyAgICAgICAgaWYgd2hhdCA9PSAiZmlsZXMiOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBnbG9iZmlsdGVyKCBjb29rZXIuc3RhdHVzLnBrZ19mbiwgZ2xvYmV4cHIgKTogcHJpbnQoa2V5KQorICAgICAgICBlbGlmIHdoYXQgPT0gInByb3ZpZGVycyI6CisgICAgICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisgICAgICAgICAgICBmb3Iga2V5IGluIGdsb2JmaWx0ZXIoIGNvb2tlci5zdGF0dXMucGtnX3BuLCBnbG9iZXhwciApOiBwcmludChrZXkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiVXNhZ2U6IG1hdGNoICVzIiAlIHNlbGYucHJpbnRfLnVzYWdlKQorICAgIG1hdGNoLnVzYWdlID0gIjxmaWxlc3xwcm92aWRlcnM+IDxnbG9iPiIKKworICAgIGRlZiBuZXcoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgLmJiIGZpbGUgYW5kIG9wZW4gdGhlIGVkaXRvciIiIgorICAgICAgICBkaXJuYW1lLCBmaWxlbmFtZSA9IHBhcmFtcworICAgICAgICBwYWNrYWdlcyA9ICcvJy5qb2luKCBkYXRhLmdldFZhciggIkJCRklMRVMiLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxICkuc3BsaXQoJy8nKVs6LTJdICkKKyAgICAgICAgZnVsbGRpcm5hbWUgPSAiJXMvJXMiICUgKCBwYWNrYWdlcywgZGlybmFtZSApCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCBmdWxsZGlybmFtZSApOgorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBDcmVhdGluZyAnJXMnIiAlIGZ1bGxkaXJuYW1lKQorICAgICAgICAgICAgb3MubWtkaXIoIGZ1bGxkaXJuYW1lICkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIGZ1bGxkaXJuYW1lICkgYW5kIG9zLnBhdGguaXNkaXIoIGZ1bGxkaXJuYW1lICk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyggIiVzLyVzIiAlICggZnVsbGRpcm5hbWUsIGZpbGVuYW1lICkgKToKKyAgICAgICAgICAgICAgICBwcmludCgiU0hFTEw6IEVSUk9SOiAlcy8lcyBhbHJlYWR5IGV4aXN0cyIgJSAoIGZ1bGxkaXJuYW1lLCBmaWxlbmFtZSApKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBDcmVhdGluZyAnJXMvJXMnIiAlICggZnVsbGRpcm5hbWUsIGZpbGVuYW1lICkpCisgICAgICAgICAgICBuZXdwYWNrYWdlID0gb3BlbiggIiVzLyVzIiAlICggZnVsbGRpcm5hbWUsIGZpbGVuYW1lICksICJ3IiApCisgICAgICAgICAgICBwcmludCgiIiJERVNDUklQVElPTiA9ICIiCitTRUNUSU9OID0gIiIKK0FVVEhPUiA9ICIiCitIT01FUEFHRSA9ICIiCitNQUlOVEFJTkVSID0gIiIKK0xJQ0VOU0UgPSAiR1BMIgorUFIgPSAicjAiCisKK1NSQ19VUkkgPSAiIgorCisjaW5oZXJpdCBiYXNlCisKKyNkb19jb25maWd1cmUoKSB7CisjCisjfQorCisjZG9fY29tcGlsZSgpIHsKKyMKKyN9CisKKyNkb19zdGFnZSgpIHsKKyMKKyN9CisKKyNkb19pbnN0YWxsKCkgeworIworI30KKyIiIiwgZmlsZT1uZXdwYWNrYWdlKQorICAgICAgICAgICAgbmV3cGFja2FnZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5zeXN0ZW0oICIlcyAlcy8lcyIgJSAoIG9zLmVudmlyb24uZ2V0KCAiRURJVE9SIiApLCBmdWxsZGlybmFtZSwgZmlsZW5hbWUgKSApCisgICAgbmV3LnVzYWdlID0gIjxkaXJlY3Rvcnk+IDxmaWxlbmFtZT4iCisKKyAgICBkZWYgcGFja2FnZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3BhY2thZ2UnIG9uIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAicGFja2FnZSIgKQorICAgIHBhY2thZ2UudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBwYXN0ZUJpbiggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNlbmQgYSBjb21tYW5kICsgb3V0cHV0IGJ1ZmZlciB0byB0aGUgcGFzdGViaW4gYXQgaHR0cDovL3JhZmIubmV0L3Bhc3RlIiIiCisgICAgICAgIGluZGV4ID0gcGFyYW1zWzBdCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5fc2hlbGwubXlvdXQuYnVmZmVyKCBpbnQoIGluZGV4ICkgKQorICAgICAgICBzZW5kVG9QYXN0ZWJpbiggIm91dHB1dCBvZiAiICsgcGFyYW1zWzBdLCBjb250ZW50cyApCisgICAgcGFzdGVCaW4udXNhZ2UgPSAiPGluZGV4PiIKKworICAgIGRlZiBwYXN0ZUxvZyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNlbmQgdGhlIGxhc3QgZXZlbnQgZXhjZXB0aW9uIGVycm9yIGxvZyAoaWYgdGhlcmUgaXMgb25lKSB0byBodHRwOi8vcmFmYi5uZXQvcGFzdGUiIiIKKyAgICAgICAgaWYgbGFzdF9leGNlcHRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogTm8gRXJyb3JzIHlldCAoUGhldykuLi4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhc29uLCBldmVudCA9IGxhc3RfZXhjZXB0aW9uLmFyZ3MKKyAgICAgICAgICAgIHByaW50KCJTSEVMTDogUmVhc29uIGZvciB0aGUgbGFzdCBlcnJvcjogJyVzJyIgJSByZWFzb24pCisgICAgICAgICAgICBpZiAnOicgaW4gcmVhc29uOgorICAgICAgICAgICAgICAgIG1zZywgZmlsZW5hbWUgPSByZWFzb24uc3BsaXQoICc6JyApCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHJpbnQoIlNIRUxMOiBQYXN0aW5nIGxvZyBmaWxlIHRvIHBhc3RlYmluLi4uIikKKworICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKCBmaWxlbmFtZSApLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbmRUb1Bhc3RlYmluKCAiY29udGVudHMgb2YgIiArIGZpbGVuYW1lLCBmaWxlICkKKworICAgIGRlZiBwYXRjaCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3BhdGNoJyBjb21tYW5kIG9uIGEgcHJvdmlkZWUiIiIKKyAgICAgICAgc2VsZi5idWlsZCggcGFyYW1zLCAicGF0Y2giICkKKyAgICBwYXRjaC51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHBhcnNlKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiKFJlLSlwYXJzZSAuYmIgZmlsZXMgYW5kIGNhbGN1bGF0ZSB0aGUgZGVwZW5kZW5jeSBncmFwaCIiIgorICAgICAgICBjb29rZXIuc3RhdHVzID0gY2FjaGUuQ2FjaGVEYXRhKGNvb2tlci5jYWNoZXNfYXJyYXkpCisgICAgICAgIGlnbm9yZSA9IGRhdGEuZ2V0VmFyKCJBU1NVTUVfUFJPVklERUQiLCBjb29rZXIuY29uZmlndXJhdGlvbi5kYXRhLCAxKSBvciAiIgorICAgICAgICBjb29rZXIuc3RhdHVzLmlnbm9yZWRfZGVwZW5kZW5jaWVzID0gc2V0KCBpZ25vcmUuc3BsaXQoKSApCisgICAgICAgIGNvb2tlci5oYW5kbGVDb2xsZWN0aW9ucyggZGF0YS5nZXRWYXIoIkJCRklMRV9DT0xMRUNUSU9OUyIsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEpICkKKworICAgICAgICAoZmlsZWxpc3QsIG1hc2tlZCkgPSBjb29rZXIuY29sbGVjdF9iYmZpbGVzKCkKKyAgICAgICAgY29va2VyLnBhcnNlX2JiZmlsZXMoZmlsZWxpc3QsIG1hc2tlZCwgY29va2VyLm15UHJvZ3Jlc3NDYWxsYmFjaykKKyAgICAgICAgY29va2VyLmJ1aWxkRGVwZ3JhcGgoKQorICAgICAgICBnbG9iYWwgcGFyc2VkCisgICAgICAgIHBhcnNlZCA9IFRydWUKKyAgICAgICAgcHJpbnQoKQorCisgICAgZGVmIHJlcGFyc2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiIocmUpUGFyc2UgYSBwcm92aWRlZSdzIGJiIGZpbGUiIiIKKyAgICAgICAgYmJmaWxlID0gc2VsZi5fZmluZFByb3ZpZGVyKCBwYXJhbXNbMF0gKQorICAgICAgICBpZiBiYmZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEZvdW5kIGJiZmlsZSAnJXMnIGZvciAnJXMnIiAlICggYmJmaWxlLCBwYXJhbXNbMF0gKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZVJlcGFyc2UoIFsgYmJmaWxlIF0gKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgcGFyYW1zWzBdKQorICAgIHJlcGFyc2UudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBnZXR2YXIoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJEdW1wIHRoZSBjb250ZW50cyBvZiBhbiBvdXRlciBCaXRCYWtlIGVudmlyb25tZW50IHZhcmlhYmxlIiIiCisgICAgICAgIHZhciA9IHBhcmFtc1swXQorICAgICAgICB2YWx1ZSA9IGRhdGEuZ2V0VmFyKCB2YXIsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEsIDEgKQorICAgICAgICBwcmludCh2YWx1ZSkKKyAgICBnZXR2YXIudXNhZ2UgPSAiPHZhcmlhYmxlPiIKKworICAgIGRlZiBwZWVrKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRHVtcCBjb250ZW50cyBvZiB2YXJpYWJsZSBkZWZpbmVkIGluIHByb3ZpZGVlJ3MgbWV0YWRhdGEiIiIKKyAgICAgICAgbmFtZSwgdmFyID0gcGFyYW1zCisgICAgICAgIGJiZmlsZSA9IHNlbGYuX2ZpbmRQcm92aWRlciggbmFtZSApCisgICAgICAgIGlmIGJiZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRoZV9kYXRhID0gY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGJiZmlsZSwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSkKKyAgICAgICAgICAgIHZhbHVlID0gdGhlX2RhdGEuZ2V0VmFyKCB2YXIsIDEgKQorICAgICAgICAgICAgcHJpbnQodmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiRVJST1I6IE5vdGhpbmcgcHJvdmlkZXMgJyVzJyIgJSBuYW1lKQorICAgIHBlZWsudXNhZ2UgPSAiPHByb3ZpZGVlPiA8dmFyaWFibGU+IgorCisgICAgZGVmIHBva2UoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJTZXQgY29udGVudHMgb2YgdmFyaWFibGUgZGVmaW5lZCBpbiBwcm92aWRlZSdzIG1ldGFkYXRhIiIiCisgICAgICAgIG5hbWUsIHZhciwgdmFsdWUgPSBwYXJhbXMKKyAgICAgICAgYmJmaWxlID0gc2VsZi5fZmluZFByb3ZpZGVyKCBuYW1lICkKKyAgICAgICAgaWYgYmJmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBTb3JyeSwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGN1cnJlbnRseSBicm9rZW4iKQorICAgICAgICAgICAgI2QgPSBjb29rZXIucGtnZGF0YVtiYmZpbGVdCisgICAgICAgICAgICAjZGF0YS5zZXRWYXIoIHZhciwgdmFsdWUsIGQgKQorCisgICAgICAgICAgICAjIG1hcmsgdGhlIGNoYW5nZSBzZW1pIHBlcnNpc3RhbnQKKyAgICAgICAgICAgICNjb29rZXIucGtnZGF0YS5zZXREaXJ0eShiYmZpbGUsIGQpCisgICAgICAgICAgICAjcHJpbnQgIk9LIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzICclcyciICUgbmFtZSkKKyAgICBwb2tlLnVzYWdlID0gIjxwcm92aWRlZT4gPHZhcmlhYmxlPiA8dmFsdWU+IgorCisgICAgZGVmIHByaW50Xyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkR1bXAgYWxsIGZpbGVzIG9yIHByb3ZpZGVycyIiIgorICAgICAgICB3aGF0ID0gcGFyYW1zWzBdCisgICAgICAgIGlmIHdoYXQgPT0gImZpbGVzIjoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrUGFyc2VkKCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gY29va2VyLnN0YXR1cy5wa2dfZm46IHByaW50KGtleSkKKyAgICAgICAgZWxpZiB3aGF0ID09ICJwcm92aWRlcnMiOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tQYXJzZWQoKQorICAgICAgICAgICAgZm9yIGtleSBpbiBjb29rZXIuc3RhdHVzLnByb3ZpZGVyczogcHJpbnQoa2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlOiBwcmludCAlcyIgJSBzZWxmLnByaW50Xy51c2FnZSkKKyAgICBwcmludF8udXNhZ2UgPSAiPGZpbGVzfHByb3ZpZGVycz4iCisKKyAgICBkZWYgcHl0aG9uKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRW50ZXIgdGhlIGV4cGVydCBtb2RlIC0gYW4gaW50ZXJhY3RpdmUgQml0QmFrZSBQeXRob24gSW50ZXJwcmV0ZXIiIiIKKyAgICAgICAgc3lzLnBzMSA9ICJFWFBFUlQgQkI+Pj4gIgorICAgICAgICBzeXMucHMyID0gIkVYUEVSVCBCQi4uLiAiCisgICAgICAgIGltcG9ydCBjb2RlCisgICAgICAgIGludGVycHJldGVyID0gY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUoIGRpY3QoIGdsb2JhbHMoKSApICkKKyAgICAgICAgaW50ZXJwcmV0ZXIuaW50ZXJhY3QoICJTSEVMTDogRXhwZXJ0IE1vZGUgLSBCaXRCYWtlIFB5dGhvbiAlc1xuVHlwZSAnaGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24sIHByZXNzIENUUkwtRCB0byBzd2l0Y2ggYmFjayB0byBCQlNIRUxMLiIgJSBzeXMudmVyc2lvbiApCisKKyAgICBkZWYgc2hvd2RhdGEoIHNlbGYsIHBhcmFtcyApOgorICAgICAgICAiIiJFeGVjdXRlICdzaG93ZGF0YScgb24gYSBwcm92aWRlZSIiIgorICAgICAgICBjb29rZXIuc2hvd0Vudmlyb25tZW50KE5vbmUsIHBhcmFtcykKKyAgICBzaG93ZGF0YS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHNldFZhciggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIlNldCBhbiBvdXRlciBCaXRCYWtlIGVudmlyb25tZW50IHZhcmlhYmxlIiIiCisgICAgICAgIHZhciwgdmFsdWUgPSBwYXJhbXMKKyAgICAgICAgZGF0YS5zZXRWYXIoIHZhciwgdmFsdWUsIGNvb2tlci5jb25maWd1cmF0aW9uLmRhdGEgKQorICAgICAgICBwcmludCgiT0siKQorICAgIHNldFZhci51c2FnZSA9ICI8dmFyaWFibGU+IDx2YWx1ZT4iCisKKyAgICBkZWYgcmVidWlsZCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkNsZWFuIGFuZCByZWJ1aWxkIGEgLmJiIGZpbGUgb3IgYSBwcm92aWRlZSIiIgorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJjbGVhbiIgKQorICAgICAgICBzZWxmLmJ1aWxkKCBwYXJhbXMsICJidWlsZCIgKQorICAgIHJlYnVpbGQudXNhZ2UgPSAiPHByb3ZpZGVlPiIKKworICAgIGRlZiBzaGVsbCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kIGFuZCBkdW1wIHRoZSBvdXRwdXQiIiIKKyAgICAgICAgaWYgcGFyYW1zICE9ICIiOgorICAgICAgICAgICAgcHJpbnQoY29tbWFuZHMuZ2V0b3V0cHV0KCAiICIuam9pbiggcGFyYW1zICkgKSkKKyAgICBzaGVsbC51c2FnZSA9ICI8Li4uPiIKKworICAgIGRlZiBzdGFnZSggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIkV4ZWN1dGUgJ3N0YWdlJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInBvcHVsYXRlX3N0YWdpbmciICkKKyAgICBzdGFnZS51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHN0YXR1cyggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIjxqdXN0IGZvciB0ZXN0aW5nPiIiIgorICAgICAgICBwcmludCgiLSIgKiA3OCkKKyAgICAgICAgcHJpbnQoImJ1aWxkaW5nIGxpc3QgPSAnJXMnIiAlIGNvb2tlci5idWlsZGluZ19saXN0KQorICAgICAgICBwcmludCgiYnVpbGQgcGF0aCA9ICclcyciICUgY29va2VyLmJ1aWxkX3BhdGgpCisgICAgICAgIHByaW50KCJjb25zaWRlcl9tc2dzX2NhY2hlID0gJyVzJyIgJSBjb29rZXIuY29uc2lkZXJfbXNnc19jYWNoZSkKKyAgICAgICAgcHJpbnQoImJ1aWxkIHN0YXRzID0gJyVzJyIgJSBjb29rZXIuc3RhdHMpCisgICAgICAgIGlmIGxhc3RfZXhjZXB0aW9uIGlzIG5vdCBOb25lOiBwcmludCgibGFzdF9leGNlcHRpb24gPSAnJXMnIiAlIHJlcHIoIGxhc3RfZXhjZXB0aW9uLmFyZ3MgKSkKKyAgICAgICAgcHJpbnQoIm1lbW9yeSBvdXRwdXQgY29udGVudHMgPSAnJXMnIiAlIHNlbGYuX3NoZWxsLm15b3V0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdCggc2VsZiwgcGFyYW1zICk6CisgICAgICAgICIiIjxqdXN0IGZvciB0ZXN0aW5nPiIiIgorICAgICAgICBwcmludCgidGVzdENvbW1hbmQgY2FsbGVkIHdpdGggJyVzJyIgJSBwYXJhbXMpCisKKyAgICBkZWYgdW5wYWNrKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiRXhlY3V0ZSAndW5wYWNrJyBvbiBhIHByb3ZpZGVlIiIiCisgICAgICAgIHNlbGYuYnVpbGQoIHBhcmFtcywgInVucGFjayIgKQorICAgIHVucGFjay51c2FnZSA9ICI8cHJvdmlkZWU+IgorCisgICAgZGVmIHdoaWNoKCBzZWxmLCBwYXJhbXMgKToKKyAgICAgICAgIiIiQ29tcHV0ZXMgdGhlIHByb3ZpZGVycyBmb3IgYSBnaXZlbiBwcm92aWRlZSIiIgorICAgICAgICAjIE5lZWQgdG8gdXNlIHRhc2tEYXRhIGZvciB0aGlzIGluZm9ybWF0aW9uCisgICAgICAgIGl0ZW0gPSBwYXJhbXNbMF0KKworICAgICAgICBzZWxmLl9jaGVja1BhcnNlZCgpCisKKyAgICAgICAgcHJlZmVycmVkID0gZGF0YS5nZXRWYXIoICJQUkVGRVJSRURfUFJPVklERVJfJXMiICUgaXRlbSwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgMSApCisgICAgICAgIGlmIG5vdCBwcmVmZXJyZWQ6IHByZWZlcnJlZCA9IGl0ZW0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsdiwgbGYsIHB2LCBwZiA9IFByb3ZpZGVycy5maW5kQmVzdFByb3ZpZGVyKHByZWZlcnJlZCwgY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YSwgY29va2VyLnN0YXR1cykKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbHYsIGxmLCBwdiwgcGYgPSAoTm9uZSwpKjQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm92aWRlcnMgPSBjb29rZXIuc3RhdHVzLnByb3ZpZGVyc1tpdGVtXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEVSUk9SOiBOb3RoaW5nIHByb3ZpZGVzIiwgcHJlZmVycmVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHByb3ZpZGVyIGluIHByb3ZpZGVyczoKKyAgICAgICAgICAgICAgICBpZiBwcm92aWRlciA9PSBwZjogcHJvdmlkZXIgPSAiICgqKiopICVzIiAlIHByb3ZpZGVyCisgICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgIHByb3ZpZGVyID0gIiAgICAgICAlcyIgJSBwcm92aWRlcgorICAgICAgICAgICAgICAgIHByaW50KHByb3ZpZGVyKQorICAgIHdoaWNoLnVzYWdlID0gIjxwcm92aWRlZT4iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbW1vbiBoZWxwZXIgZnVuY3Rpb25zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgY29tcGxldGVGaWxlUGF0aCggYmJmaWxlICk6CisgICAgIiIiR2V0IHRoZSBjb21wbGV0ZSBiYmZpbGUgcGF0aCIiIgorICAgIGlmIG5vdCBjb29rZXIuc3RhdHVzOiByZXR1cm4gYmJmaWxlCisgICAgaWYgbm90IGNvb2tlci5zdGF0dXMucGtnX2ZuOiByZXR1cm4gYmJmaWxlCisgICAgZm9yIGtleSBpbiBjb29rZXIuc3RhdHVzLnBrZ19mbjoKKyAgICAgICAgaWYga2V5LmVuZHN3aXRoKCBiYmZpbGUgKToKKyAgICAgICAgICAgIHJldHVybiBrZXkKKyAgICByZXR1cm4gYmJmaWxlCisKK2RlZiBzZW5kVG9QYXN0ZWJpbiggZGVzYywgY29udGVudCApOgorICAgICIiIlNlbmQgY29udGVudCB0byBodHRwOi8vb2UucGFzdGViaW4uY29tIiIiCisgICAgbXlkYXRhID0ge30KKyAgICBteWRhdGFbImxhbmciXSA9ICJQbGFpbiBUZXh0IgorICAgIG15ZGF0YVsiZGVzYyJdID0gZGVzYworICAgIG15ZGF0YVsiY3Z0X3RhYnMiXSA9ICJObyIKKyAgICBteWRhdGFbIm5pY2siXSA9ICIlc0AlcyIgJSAoIG9zLmVudmlyb24uZ2V0KCAiVVNFUiIsICJ1bmtub3duIiApLCBzb2NrZXQuZ2V0aG9zdG5hbWUoKSBvciAidW5rbm93biIgKQorICAgIG15ZGF0YVsidGV4dCJdID0gY29udGVudAorICAgIHBhcmFtcyA9IHVybGxpYi51cmxlbmNvZGUoIG15ZGF0YSApCisgICAgaGVhZGVycyA9IHsiQ29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsICJBY2NlcHQiOiAidGV4dC9wbGFpbiJ9CisKKyAgICBob3N0ID0gInJhZmIubmV0IgorICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCAiJXM6ODAiICUgaG9zdCApCisgICAgY29ubi5yZXF1ZXN0KCJQT1NUIiwgIi9wYXN0ZS9wYXN0ZS5waHAiLCBwYXJhbXMsIGhlYWRlcnMgKQorCisgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICBjb25uLmNsb3NlKCkKKworICAgIGlmIHJlc3BvbnNlLnN0YXR1cyA9PSAzMDI6CisgICAgICAgIGxvY2F0aW9uID0gcmVzcG9uc2UuZ2V0aGVhZGVyKCAibG9jYXRpb24iICkgb3IgInVua25vd24iCisgICAgICAgIHByaW50KCJTSEVMTDogUGFzdGVkIHRvIGh0dHA6Ly8lcyVzIiAlICggaG9zdCwgbG9jYXRpb24gKSkKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiRVJST1I6ICVzICVzIiAlICggcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZWFzb24gKSkKKworZGVmIGNvbXBsZXRlciggdGV4dCwgc3RhdGUgKToKKyAgICAiIiJSZXR1cm4gYSBwb3NzaWJsZSByZWFkbGluZSBjb21wbGV0aW9uIiIiCisgICAgZGVidWdPdXQoICJjb21wbGV0ZXIgY2FsbGVkIHdpdGggdGV4dD0nJXMnLCBzdGF0ZT0nJWQnIiAlICggdGV4dCwgc3RhdGUgKSApCisKKyAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICBsaW5lID0gcmVhZGxpbmUuZ2V0X2xpbmVfYnVmZmVyKCkKKyAgICAgICAgaWYgIiAiIGluIGxpbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAjIHdlIGFyZSBpbiBzZWNvbmQgKG9yIG1vcmUpIGFyZ3VtZW50CisgICAgICAgICAgICBpZiBsaW5lWzBdIGluIGNtZHMgYW5kIGhhc2F0dHIoIGNtZHNbbGluZVswXV1bMF0sICJ1c2FnZSIgKTogIyBrbm93biBjb21tYW5kIGFuZCB1c2FnZQorICAgICAgICAgICAgICAgIHUgPSBnZXRhdHRyKCBjbWRzW2xpbmVbMF1dWzBdLCAidXNhZ2UiICkuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgIGlmIHUgPT0gIjx2YXJpYWJsZT4iOgorICAgICAgICAgICAgICAgICAgICBhbGxtYXRjaGVzID0gY29va2VyLmNvbmZpZ3VyYXRpb24uZGF0YS5rZXlzKCkKKyAgICAgICAgICAgICAgICBlbGlmIHUgPT0gIjxiYmZpbGU+IjoKKyAgICAgICAgICAgICAgICAgICAgaWYgY29va2VyLnN0YXR1cy5wa2dfZm4gaXMgTm9uZTogYWxsbWF0Y2hlcyA9IFsgIihObyBNYXRjaGVzIEF2YWlsYWJsZS4gUGFyc2VkIHlldD8pIiBdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6IGFsbG1hdGNoZXMgPSBbIHguc3BsaXQoIi8iKVstMV0gZm9yIHggaW4gY29va2VyLnN0YXR1cy5wa2dfZm4gXQorICAgICAgICAgICAgICAgIGVsaWYgdSA9PSAiPHByb3ZpZGVlPiI6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvb2tlci5zdGF0dXMucGtnX2ZuIGlzIE5vbmU6IGFsbG1hdGNoZXMgPSBbICIoTm8gTWF0Y2hlcyBBdmFpbGFibGUuIFBhcnNlZCB5ZXQ/KSIgXQorICAgICAgICAgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gY29va2VyLnN0YXR1cy5wcm92aWRlcnMuaXRlcmtleXMoKQorICAgICAgICAgICAgICAgIGVsc2U6IGFsbG1hdGNoZXMgPSBbICIoTm8gdGFiIGNvbXBsZXRpb24gYXZhaWxhYmxlIGZvciB0aGlzIGNvbW1hbmQpIiBdCisgICAgICAgICAgICBlbHNlOiBhbGxtYXRjaGVzID0gWyAiKE5vIHRhYiBjb21wbGV0aW9uIGF2YWlsYWJsZSBmb3IgdGhpcyBjb21tYW5kKSIgXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB3ZSBhcmUgaW4gZmlyc3QgYXJndW1lbnQKKyAgICAgICAgICAgIGFsbG1hdGNoZXMgPSBjbWRzLml0ZXJrZXlzKCkKKworICAgICAgICBjb21wbGV0ZXIubWF0Y2hlcyA9IFsgeCBmb3IgeCBpbiBhbGxtYXRjaGVzIGlmIHhbOmxlbih0ZXh0KV0gPT0gdGV4dCBdCisgICAgICAgICNwcmludCAiY29tcGxldGVyLm1hdGNoZXMgPSAnJXMnIiAlIGNvbXBsZXRlci5tYXRjaGVzCisgICAgaWYgbGVuKCBjb21wbGV0ZXIubWF0Y2hlcyApID4gc3RhdGU6CisgICAgICAgIHJldHVybiBjb21wbGV0ZXIubWF0Y2hlc1tzdGF0ZV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZGVidWdPdXQoIHRleHQgKToKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIiggJXMgKVxuIiAlIHRleHQgKQorCitkZWYgY29sdW1uaXplKCBhbGlzdCwgd2lkdGggPSA4MCApOgorICAgICIiIgorICAgIEEgd29yZC13cmFwIGZ1bmN0aW9uIHRoYXQgcHJlc2VydmVzIGV4aXN0aW5nIGxpbmUgYnJlYWtzCisgICAgYW5kIG1vc3Qgc3BhY2VzIGluIHRoZSB0ZXh0LiBFeHBlY3RzIHRoYXQgZXhpc3RpbmcgbGluZQorICAgIGJyZWFrcyBhcmUgcG9zaXggbmV3bGluZXMgKFxuKS4KKyAgICAiIiIKKyAgICByZXR1cm4gcmVkdWNlKGxhbWJkYSBsaW5lLCB3b3JkLCB3aWR0aD13aWR0aDogJyVzJXMlcycgJQorICAgICAgICAgICAgICAgICAgKGxpbmUsCisgICAgICAgICAgICAgICAgICAgJyBcbidbKGxlbihsaW5lW2xpbmUucmZpbmQoJ1xuJykrMTpdKQorICAgICAgICAgICAgICAgICAgICAgICAgICsgbGVuKHdvcmQuc3BsaXQoJ1xuJywgMSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPj0gd2lkdGgpXSwKKyAgICAgICAgICAgICAgICAgICB3b3JkKSwKKyAgICAgICAgICAgICAgICAgIGFsaXN0CisgICAgICAgICAgICAgICAgICkKKworZGVmIGdsb2JmaWx0ZXIoIG5hbWVzLCBwYXR0ZXJuICk6CisgICAgcmV0dXJuIGZubWF0Y2guZmlsdGVyKCBuYW1lcywgcGF0dGVybiApCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENsYXNzIE1lbW9yeU91dHB1dAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgTWVtb3J5T3V0cHV0OgorICAgICIiIkZpbGUtbGlrZSBvdXRwdXQgY2xhc3MgYnVmZmVyaW5nIHRoZSBvdXRwdXQgb2YgdGhlIGxhc3QgMTAgY29tbWFuZHMiIiIKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGRlbGVnYXRlICk6CisgICAgICAgIHNlbGYuZGVsZWdhdGUgPSBkZWxlZ2F0ZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLnRleHQgPSBbXQorICAgICAgICBzZWxmLl9jb21tYW5kID0gTm9uZQorCisgICAgZGVmIHN0YXJ0Q29tbWFuZCggc2VsZiwgY29tbWFuZCApOgorICAgICAgICBzZWxmLl9jb21tYW5kID0gY29tbWFuZAorICAgICAgICBzZWxmLnRleHQgPSBbXQorICAgIGRlZiBlbmRDb21tYW5kKCBzZWxmICk6CisgICAgICAgIGlmIHNlbGYuX2NvbW1hbmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oIHNlbGYuX2J1ZmZlciApID09IDEwOiBkZWwgc2VsZi5fYnVmZmVyWzBdCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKCAoIHNlbGYuX2NvbW1hbmQsIHNlbGYudGV4dCApICkKKyAgICBkZWYgcmVtb3ZlTGFzdCggc2VsZiApOgorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWyBsZW4oIHNlbGYuX2J1ZmZlciApIC0gMSBdCisgICAgICAgIHNlbGYudGV4dCA9IFtdCisgICAgICAgIHNlbGYuX2NvbW1hbmQgPSBOb25lCisgICAgZGVmIGxhc3RCdWZmZXIoIHNlbGYgKToKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlclsgbGVuKCBzZWxmLl9idWZmZXIgKSAtMSBdWzFdCisgICAgZGVmIGJ1ZmZlcmVkQ29tbWFuZHMoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIFsgY21kIGZvciBjbWQsIG91dHB1dCBpbiBzZWxmLl9idWZmZXIgXQorICAgIGRlZiBidWZmZXIoIHNlbGYsIGkgKToKKyAgICAgICAgaWYgaSA8IGxlbiggc2VsZi5fYnVmZmVyICk6CisgICAgICAgICAgICByZXR1cm4gIkJCPj4gJXNcbiVzIiAlICggc2VsZi5fYnVmZmVyW2ldWzBdLCAiIi5qb2luKCBzZWxmLl9idWZmZXJbaV1bMV0gKSApCisgICAgICAgIGVsc2U6IHJldHVybiAiRVJST1I6IEludmFsaWQgYnVmZmVyIG51bWJlci4gQnVmZmVyIG5lZWRzIHRvIGJlIGluICgwLCAlZCkiICUgKCBsZW4oIHNlbGYuX2J1ZmZlciApIC0gMSApCisgICAgZGVmIHdyaXRlKCBzZWxmLCB0ZXh0ICk6CisgICAgICAgIGlmIHNlbGYuX2NvbW1hbmQgaXMgbm90IE5vbmUgYW5kIHRleHQgIT0gIkJCPj4gIjogc2VsZi50ZXh0LmFwcGVuZCggdGV4dCApCisgICAgICAgIGlmIHNlbGYuZGVsZWdhdGUgaXMgbm90IE5vbmU6IHNlbGYuZGVsZWdhdGUud3JpdGUoIHRleHQgKQorICAgIGRlZiBmbHVzaCggc2VsZiApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWxlZ2F0ZS5mbHVzaCgpCisgICAgZGVmIGZpbGVubyggc2VsZiApOgorICAgICAgICByZXR1cm4gc2VsZi5kZWxlZ2F0ZS5maWxlbm8oKQorICAgIGRlZiBpc2F0dHkoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVsZWdhdGUuaXNhdHR5KCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ2xhc3MgQml0QmFrZVNoZWxsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBCaXRCYWtlU2hlbGw6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYgKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgY29tbWFuZHMgYW5kIHNldCB1cCByZWFkbGluZSIiIgorICAgICAgICBzZWxmLmNvbW1hbmRRID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLmNvbW1hbmRzID0gQml0QmFrZVNoZWxsQ29tbWFuZHMoIHNlbGYgKQorICAgICAgICBzZWxmLm15b3V0ID0gTWVtb3J5T3V0cHV0KCBzeXMuc3Rkb3V0ICkKKyAgICAgICAgc2VsZi5oaXN0b3J5ZmlsZW5hbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoICJ+Ly5iYnNoX2hpc3RvcnkiICkKKyAgICAgICAgc2VsZi5zdGFydHVwZmlsZW5hbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoICJ+Ly5iYnNoX3N0YXJ0dXAiICkKKworICAgICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyKCBjb21wbGV0ZXIgKQorICAgICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltcyggIiAiICkKKyAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoInRhYjogY29tcGxldGUiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKCBzZWxmLmhpc3RvcnlmaWxlbmFtZSApCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcyAgIyBJdCBkb2Vzbid0IGV4aXN0IHlldC4KKworICAgICAgICBwcmludChfX2NyZWRpdHNfXykKKworICAgIGRlZiBjbGVhbnVwKCBzZWxmICk6CisgICAgICAgICIiIldyaXRlIHJlYWRsaW5lIGhpc3RvcnkgYW5kIGNsZWFuIHVwIHJlc291cmNlcyIiIgorICAgICAgICBkZWJ1Z091dCggIndyaXRpbmcgY29tbWFuZCBoaXN0b3J5IiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSggc2VsZi5oaXN0b3J5ZmlsZW5hbWUgKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IFVuYWJsZSB0byBzYXZlIGNvbW1hbmQgaGlzdG9yeSIpCisKKyAgICBkZWYgcmVnaXN0ZXJDb21tYW5kKCBzZWxmLCBjb21tYW5kLCBmdW5jdGlvbiwgbnVtcGFyYW1zID0gMCwgdXNhZ2UgPSAiIiwgaGVscHRleHQgPSAiIiApOgorICAgICAgICAiIiJSZWdpc3RlciBhIGNvbW1hbmQiIiIKKyAgICAgICAgaWYgdXNhZ2UgPT0gIiI6IHVzYWdlID0gY29tbWFuZAorICAgICAgICBpZiBoZWxwdGV4dCA9PSAiIjogaGVscHRleHQgPSBmdW5jdGlvbi5fX2RvY19fIG9yICI8bm90IHlldCBkb2N1bWVudGVkPiIKKyAgICAgICAgY21kc1tjb21tYW5kXSA9ICggZnVuY3Rpb24sIG51bXBhcmFtcywgdXNhZ2UsIGhlbHB0ZXh0ICkKKworICAgIGRlZiBwcm9jZXNzQ29tbWFuZCggc2VsZiwgY29tbWFuZCwgcGFyYW1zICk6CisgICAgICAgICIiIlByb2Nlc3MgYSBjb21tYW5kLiBDaGVjayBudW1iZXIgb2YgcGFyYW1zIGFuZCBwcmludCBhIHVzYWdlIHN0cmluZywgaWYgYXBwcm9wcmlhdGUiIiIKKyAgICAgICAgZGVidWdPdXQoICJwcm9jZXNzaW5nIGNvbW1hbmQgJyVzJy4uLiIgJSBjb21tYW5kICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuY3Rpb24sIG51bXBhcmFtcywgdXNhZ2UsIGhlbHB0ZXh0ID0gY21kc1tjb21tYW5kXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwcmludCgiU0hFTEw6IEVSUk9SOiAnJXMnIGNvbW1hbmQgaXMgbm90IGEgdmFsaWQgY29tbWFuZC4iICUgY29tbWFuZCkKKyAgICAgICAgICAgIHNlbGYubXlvdXQucmVtb3ZlTGFzdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAobnVtcGFyYW1zICE9IC0xKSBhbmQgKG5vdCBsZW4oIHBhcmFtcyApID09IG51bXBhcmFtcyk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlVzYWdlOiAnJXMnIiAlIHVzYWdlKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICByZXN1bHQgPSBmdW5jdGlvbiggc2VsZi5jb21tYW5kcywgcGFyYW1zICkKKyAgICAgICAgICAgIGRlYnVnT3V0KCAicmVzdWx0IHdhcyAnJXMnIiAlIHJlc3VsdCApCisKKyAgICBkZWYgcHJvY2Vzc1N0YXJ0dXBGaWxlKCBzZWxmICk6CisgICAgICAgICIiIlJlYWQgYW5kIGV4ZWN1dGUgYWxsIGNvbW1hbmRzIGZvdW5kIGluICRIT01FLy5iYnNoX3N0YXJ0dXAiIiIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIHNlbGYuc3RhcnR1cGZpbGVuYW1lICk6CisgICAgICAgICAgICBzdGFydHVwZmlsZSA9IG9wZW4oIHNlbGYuc3RhcnR1cGZpbGVuYW1lLCAiciIgKQorICAgICAgICAgICAgZm9yIGNtZGxpbmUgaW4gc3RhcnR1cGZpbGU6CisgICAgICAgICAgICAgICAgZGVidWdPdXQoICJwcm9jZXNzaW5nIHN0YXJ0dXAgbGluZSAnJXMnIiAlIGNtZGxpbmUgKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjbWRsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmICJ8IiBpbiBjbWRsaW5lOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiRVJST1I6ICd8JyBpbiBzdGFydHVwIGZpbGUgaXMgbm90IGFsbG93ZWQuIElnbm9yaW5nIGxpbmUiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZFEucHV0KCBjbWRsaW5lLnN0cmlwKCkgKQorCisgICAgZGVmIG1haW4oIHNlbGYgKToKKyAgICAgICAgIiIiVGhlIG1haW4gY29tbWFuZCBsb29wIiIiCisgICAgICAgIHdoaWxlIG5vdCBsZWF2ZV9tYWlubG9vcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbW1hbmRRLmVtcHR5KCk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm15b3V0LmRlbGVnYXRlCisgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgPSByYXdfaW5wdXQoICJCQj4+ICIgKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5teW91dAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgPSBzZWxmLmNvbW1hbmRRLmdldCgpCisgICAgICAgICAgICAgICAgaWYgY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgYWxsQ29tbWFuZHMgPSBjbWRsaW5lLnNwbGl0KCAnOycgKQorICAgICAgICAgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBhbGxDb21tYW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVjbWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgZXhwZXJ0IG1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbW1hbmQgPT0gJ3B5dGhvbic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYubXlvdXQuZGVsZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NDb21tYW5kKCBjb21tYW5kLCAiIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYubXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5zdGFydENvbW1hbmQoIGNvbW1hbmQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICd8JyBpbiBjb21tYW5kOiAjIGRpc2FibGUgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHBpcGVjbWQgPSBjb21tYW5kLnNwbGl0KCAnfCcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxlZ2F0ZSA9IHNlbGYubXlvdXQuZGVsZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5kZWxlZ2F0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBzaGxleC5zcGxpdCggY29tbWFuZCwgVHJ1ZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzQ29tbWFuZCggdG9rZW5zWzBdLCB0b2tlbnNbMTpdIG9yICIiICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm15b3V0LmVuZENvbW1hbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBpcGVjbWQgaXMgbm90IE5vbmU6ICMgcmVzdG9yZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5teW91dC5kZWxlZ2F0ZSA9IGRlbGVnYXRlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZSA9IHBvcGVuMi5Qb3BlbjQoIHBpcGVjbWQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLnRvY2hpbGQud3JpdGUoICJcbiIuam9pbiggc2VsZi5teW91dC5sYXN0QnVmZmVyKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUudG9jaGlsZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIHBpcGUuZnJvbWNoaWxkLnJlYWQoKSApCisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIHByaW50KCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3RhcnQgZnVuY3Rpb24gLSBjYWxsZWQgZnJvbSB0aGUgQml0QmFrZSBjb21tYW5kIGxpbmUgdXRpbGl0eQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIHN0YXJ0KCBhQ29va2VyICk6CisgICAgZ2xvYmFsIGNvb2tlcgorICAgIGNvb2tlciA9IGFDb29rZXIKKyAgICBiYnNoZWxsID0gQml0QmFrZVNoZWxsKCkKKyAgICBiYnNoZWxsLnByb2Nlc3NTdGFydHVwRmlsZSgpCisgICAgYmJzaGVsbC5tYWluKCkKKyAgICBiYnNoZWxsLmNsZWFudXAoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHByaW50KCJTSEVMTDogU29ycnksIHRoaXMgcHJvZ3JhbSBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgQml0QmFrZS4iKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5IGIvYml0YmFrZS9saWIvYmIvc2lnZ2VuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODUyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi9zaWdnZW4ucHkKQEAgLTAsMCArMSw1MjYgQEAKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGJiLmRhdGEKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuU2lnR2VuJykKKwordHJ5OgorICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBwaWNrbGUKKyAgICBsb2dnZXIuaW5mbygnSW1wb3J0aW5nIGNQaWNrbGUgZmFpbGVkLiAgRmFsbGluZyBiYWNrIHRvIGEgdmVyeSBzbG93IGltcGxlbWVudGF0aW9uLicpCisKK2RlZiBpbml0KGQpOgorICAgIHNpZ2dlbnMgPSBbb2JqIGZvciBvYmogaW4gZ2xvYmFscygpLml0ZXJ2YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUob2JqKSBpcyB0eXBlIGFuZCBpc3N1YmNsYXNzKG9iaiwgU2lnbmF0dXJlR2VuZXJhdG9yKV0KKworICAgIGRlc2lyZWQgPSBkLmdldFZhcigiQkJfU0lHTkFUVVJFX0hBTkRMRVIiLCBUcnVlKSBvciAibm9vcCIKKyAgICBmb3Igc2cgaW4gc2lnZ2VuczoKKyAgICAgICAgaWYgZGVzaXJlZCA9PSBzZy5uYW1lOgorICAgICAgICAgICAgcmV0dXJuIHNnKGQpCisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci5lcnJvcigiSW52YWxpZCBzaWduYXR1cmUgZ2VuZXJhdG9yICclcycsIHVzaW5nIGRlZmF1bHQgJ25vb3AnXG4iCisgICAgICAgICAgICAgICAgICAgICAiQXZhaWxhYmxlIGdlbmVyYXRvcnM6ICVzIiwgZGVzaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihvYmoubmFtZSBmb3Igb2JqIGluIHNpZ2dlbnMpKQorICAgICAgICByZXR1cm4gU2lnbmF0dXJlR2VuZXJhdG9yKGQpCisKK2NsYXNzIFNpZ25hdHVyZUdlbmVyYXRvcihvYmplY3QpOgorICAgICIiIgorICAgICIiIgorICAgIG5hbWUgPSAibm9vcCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IHt9CisgICAgICAgIHNlbGYucnVudGFza2RlcHMgPSB7fQorICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzID0ge30KKworICAgIGRlZiBmaW5hbGlzZShzZWxmLCBmbiwgZCwgdmFyaWVudCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF90YXNraGFzaChzZWxmLCBmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKToKKyAgICAgICAgcmV0dXJuICIwIgorCisgICAgZGVmIHNldF90YXNrZGF0YShzZWxmLCBoYXNoZXMsIGRlcHMsIGNoZWNrc3VtKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc3RhbXBmaWxlKHNlbGYsIHN0YW1wYmFzZSwgZmlsZV9uYW1lLCB0YXNrbmFtZSwgZXh0cmFpbmZvKToKKyAgICAgICAgcmV0dXJuICgiJXMuJXMuJXMiICUgKHN0YW1wYmFzZSwgdGFza25hbWUsIGV4dHJhaW5mbykpLnJzdHJpcCgnLicpCisKKyAgICBkZWYgc3RhbXBjbGVhbm1hc2soc2VsZiwgc3RhbXBiYXNlLCBmaWxlX25hbWUsIHRhc2tuYW1lLCBleHRyYWluZm8pOgorICAgICAgICByZXR1cm4gKCIlcy4lcy4lcyIgJSAoc3RhbXBiYXNlLCB0YXNrbmFtZSwgZXh0cmFpbmZvKSkucnN0cmlwKCcuJykKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGludmFsaWRhdGVfdGFzayhzZWxmLCB0YXNrLCBkLCBmbik6CisgICAgICAgIGJiLmJ1aWxkLmRlbF9zdGFtcCh0YXNrLCBkLCBmbikKKworICAgIGRlZiBkdW1wX3NpZ3Moc2VsZiwgZGF0YUNhY2hlLCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZ2V0X3Rhc2tkYXRhKHNlbGYpOgorICAgICAgIHJldHVybiAoc2VsZi5ydW50YXNrZGVwcywgc2VsZi50YXNraGFzaCwgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlcykKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYucnVudGFza2RlcHMsIHNlbGYudGFza2hhc2gsIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXMgPSBkYXRhCisKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMoU2lnbmF0dXJlR2VuZXJhdG9yKToKKyAgICAiIiIKKyAgICAiIiIKKyAgICBuYW1lID0gImJhc2ljIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmJhc2VoYXNoID0ge30KKyAgICAgICAgc2VsZi50YXNraGFzaCA9IHt9CisgICAgICAgIHNlbGYudGFza2RlcHMgPSB7fQorICAgICAgICBzZWxmLnJ1bnRhc2tkZXBzID0ge30KKyAgICAgICAgc2VsZi5maWxlX2NoZWNrc3VtX3ZhbHVlcyA9IHt9CisgICAgICAgIHNlbGYuZ2VuZGVwcyA9IHt9CisgICAgICAgIHNlbGYubG9va3VwY2FjaGUgPSB7fQorICAgICAgICBzZWxmLnBrZ25hbWVleHRyYWN0ID0gcmUuY29tcGlsZSgiKD9QPGZuPi4qKVwuLioiKQorICAgICAgICBzZWxmLmJhc2V3aGl0ZWxpc3QgPSBzZXQoKGRhdGEuZ2V0VmFyKCJCQl9IQVNIQkFTRV9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgc2VsZi50YXNrd2hpdGVsaXN0ID0gTm9uZQorICAgICAgICBzZWxmLmluaXRfcnVuZGVwY2hlY2soZGF0YSkKKworICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnRhc2t3aGl0ZWxpc3QgPSBkYXRhLmdldFZhcigiQkJfSEFTSFRBU0tfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBzZWxmLnRhc2t3aGl0ZWxpc3Q6CisgICAgICAgICAgICBzZWxmLnR3bCA9IHJlLmNvbXBpbGUoc2VsZi50YXNrd2hpdGVsaXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50d2wgPSBOb25lCisKKyAgICBkZWYgX2J1aWxkX2RhdGEoc2VsZiwgZm4sIGQpOgorCisgICAgICAgIHRhc2tsaXN0LCBnZW5kZXBzLCBsb29rdXBjYWNoZSA9IGJiLmRhdGEuZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGQpCisKKyAgICAgICAgdGFza2RlcHMgPSB7fQorICAgICAgICBiYXNlaGFzaCA9IHt9CisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza2xpc3Q6CisgICAgICAgICAgICBkYXRhID0gbG9va3VwY2FjaGVbdGFza10KKworICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJUYXNrICVzIGZyb20gJXMgc2VlbXMgdG8gYmUgZW1wdHk/ISIgJSAodGFzaywgZm4pKQorICAgICAgICAgICAgICAgIGRhdGEgPSAnJworCisgICAgICAgICAgICBnZW5kZXBzW3Rhc2tdIC09IHNlbGYuYmFzZXdoaXRlbGlzdAorICAgICAgICAgICAgbmV3ZGVwcyA9IGdlbmRlcHNbdGFza10KKyAgICAgICAgICAgIHNlZW4gPSBzZXQoKQorICAgICAgICAgICAgd2hpbGUgbmV3ZGVwczoKKyAgICAgICAgICAgICAgICBuZXh0ZGVwcyA9IG5ld2RlcHMKKyAgICAgICAgICAgICAgICBzZWVuIHw9IG5leHRkZXBzCisgICAgICAgICAgICAgICAgbmV3ZGVwcyA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBuZXh0ZGVwczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuYmFzZXdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGdlbmRlcHNbZGVwXSAtPSBzZWxmLmJhc2V3aGl0ZWxpc3QKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwcyB8PSBnZW5kZXBzW2RlcF0KKyAgICAgICAgICAgICAgICBuZXdkZXBzIC09IHNlZW4KKworICAgICAgICAgICAgYWxsZGVwcyA9IHNvcnRlZChzZWVuKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBhbGxkZXBzOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgZGVwCisgICAgICAgICAgICAgICAgdmFyID0gbG9va3VwY2FjaGVbZGVwXQorICAgICAgICAgICAgICAgIGlmIHZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzdHIodmFyKQorICAgICAgICAgICAgc2VsZi5iYXNlaGFzaFtmbiArICIuIiArIHRhc2tdID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIHRhc2tkZXBzW3Rhc2tdID0gYWxsZGVwcworCisgICAgICAgIHNlbGYudGFza2RlcHNbZm5dID0gdGFza2RlcHMKKyAgICAgICAgc2VsZi5nZW5kZXBzW2ZuXSA9IGdlbmRlcHMKKyAgICAgICAgc2VsZi5sb29rdXBjYWNoZVtmbl0gPSBsb29rdXBjYWNoZQorCisgICAgICAgIHJldHVybiB0YXNrZGVwcworCisgICAgZGVmIGZpbmFsaXNlKHNlbGYsIGZuLCBkLCB2YXJpYW50KToKKworICAgICAgICBpZiB2YXJpYW50OgorICAgICAgICAgICAgZm4gPSAidmlydHVhbDoiICsgdmFyaWFudCArICI6IiArIGZuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFza2RlcHMgPSBzZWxmLl9idWlsZF9kYXRhKGZuLCBkKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBiYi5ub3RlKCJFcnJvciBkdXJpbmcgZmluYWxpc2Ugb2YgJXMiICUgZm4pCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgICNTbG93IGJ1dCBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgbWlzbWF0Y2hlZCBiYXNlaGFzaGVzCisgICAgICAgICNmb3IgdGFzayBpbiBzZWxmLnRhc2tkZXBzW2ZuXToKKyAgICAgICAgIyAgICBzZWxmLmR1bXBfc2lndGFzayhmbiwgdGFzaywgZC5nZXRWYXIoIlNUQU1QIiwgVHJ1ZSksIEZhbHNlKQorCisgICAgICAgIGZvciB0YXNrIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgZC5zZXRWYXIoIkJCX0JBU0VIQVNIX3Rhc2stJXMiICUgdGFzaywgc2VsZi5iYXNlaGFzaFtmbiArICIuIiArIHRhc2tdKQorCisgICAgZGVmIHJ1bmRlcF9jaGVjayhzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUpOgorICAgICAgICAjIFJldHVybiBUcnVlIGlmIHdlIHNob3VsZCBrZWVwIHRoZSBkZXBlbmRlbmN5LCBGYWxzZSB0byBkcm9wIGl0CisgICAgICAgICMgV2Ugb25seSBtYW5pcHVsYXRlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzIG5vdCBpbiB0aGUgd2hpdGVsaXN0CisgICAgICAgIGlmIHNlbGYudHdsIGFuZCBub3Qgc2VsZi50d2wuc2VhcmNoKHJlY2lwZW5hbWUpOgorICAgICAgICAgICAgIyB0aGVuIHByb2Nlc3MgdGhlIGFjdHVhbCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmIHNlbGYudHdsLnNlYXJjaChkZXBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZWFkX3RhaW50KHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UpOgorICAgICAgICB0YWludCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHN0YW1wYmFzZSArICcuJyArIHRhc2sgKyAnLnRhaW50JywgJ3InKSBhcyB0YWludGY6CisgICAgICAgICAgICAgICAgdGFpbnQgPSB0YWludGYucmVhZCgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gdGFpbnQKKworICAgIGRlZiBnZXRfdGFza2hhc2goc2VsZiwgZm4sIHRhc2ssIGRlcHMsIGRhdGFDYWNoZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgZGF0YSA9IGRhdGFDYWNoZS5iYXNldGFza2hhc2hba10KKyAgICAgICAgc2VsZi5ydW50YXNrZGVwc1trXSA9IFtdCisgICAgICAgIHNlbGYuZmlsZV9jaGVja3N1bV92YWx1ZXNba10gPSB7fQorICAgICAgICByZWNpcGVuYW1lID0gZGF0YUNhY2hlLnBrZ19mbltmbl0KKyAgICAgICAgZm9yIGRlcCBpbiBzb3J0ZWQoZGVwcywga2V5PWNsZWFuX2Jhc2VwYXRoKToKKyAgICAgICAgICAgIGRlcG5hbWUgPSBkYXRhQ2FjaGUucGtnX2ZuW3NlbGYucGtnbmFtZWV4dHJhY3Quc2VhcmNoKGRlcCkuZ3JvdXAoJ2ZuJyldCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ydW5kZXBfY2hlY2soZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBpcyBub3QgaW4gdGFza2hhc2gsIGNhbGxlciBpc24ndCBjYWxsaW5nIGluIGRlcGVuZGVuY3kgb3JkZXI/IiwgZGVwKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzZWxmLnRhc2toYXNoW2RlcF0KKyAgICAgICAgICAgIHNlbGYucnVudGFza2RlcHNba10uYXBwZW5kKGRlcCkKKworICAgICAgICBpZiB0YXNrIGluIGRhdGFDYWNoZS5maWxlX2NoZWNrc3Vtc1tmbl06CisgICAgICAgICAgICBjaGVja3N1bXMgPSBiYi5mZXRjaDIuZ2V0X2ZpbGVfY2hlY2tzdW1zKGRhdGFDYWNoZS5maWxlX2NoZWNrc3Vtc1tmbl1bdGFza10sIHJlY2lwZW5hbWUpCisgICAgICAgICAgICBmb3IgKGYsY3MpIGluIGNoZWNrc3VtczoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzW2tdW2ZdID0gY3MKKyAgICAgICAgICAgICAgICBpZiBjczoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBjcworCisgICAgICAgIHRhc2tkZXAgPSBkYXRhQ2FjaGUudGFza19kZXBzW2ZuXQorICAgICAgICBpZiAnbm9zdGFtcCcgaW4gdGFza2RlcCBhbmQgdGFzayBpbiB0YXNrZGVwWydub3N0YW1wJ106CisgICAgICAgICAgICAjIE5vc3RhbXAgdGFza3MgbmVlZCBhbiBpbXBsaWNpdCB0YWludCBzbyB0aGF0IHRoZXkgZm9yY2UgYW55IGRlcGVuZGVudCB0YXNrcyB0byBydW4KKyAgICAgICAgICAgIGltcG9ydCB1dWlkCisgICAgICAgICAgICBkYXRhID0gZGF0YSArIHN0cih1dWlkLnV1aWQ0KCkpCisKKyAgICAgICAgdGFpbnQgPSBzZWxmLnJlYWRfdGFpbnQoZm4sIHRhc2ssIGRhdGFDYWNoZS5zdGFtcFtmbl0pCisgICAgICAgIGlmIHRhaW50OgorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyB0YWludAorICAgICAgICAgICAgbG9nZ2VyLndhcm4oIiVzIGlzIHRhaW50ZWQgZnJvbSBhIGZvcmNlZCBydW4iICUgaykKKworICAgICAgICBoID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi50YXNraGFzaFtrXSA9IGgKKyAgICAgICAgI2Quc2V0VmFyKCJCQl9UQVNLSEFTSF90YXNrLSVzIiAlIHRhc2ssIHRhc2toYXNoW3Rhc2tdKQorICAgICAgICByZXR1cm4gaAorCisgICAgZGVmIGR1bXBfc2lndGFzayhzZWxmLCBmbiwgdGFzaywgc3RhbXBiYXNlLCBydW50aW1lKToKKyAgICAgICAgayA9IGZuICsgIi4iICsgdGFzaworICAgICAgICBpZiBydW50aW1lID09ICJjdXN0b21maWxlIjoKKyAgICAgICAgICAgIHNpZ2ZpbGUgPSBzdGFtcGJhc2UKKyAgICAgICAgZWxpZiBydW50aW1lIGFuZCBrIGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICBzaWdmaWxlID0gc3RhbXBiYXNlICsgIi4iICsgdGFzayArICIuc2lnZGF0YSIgKyAiLiIgKyBzZWxmLnRhc2toYXNoW2tdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaWdmaWxlID0gc3RhbXBiYXNlICsgIi4iICsgdGFzayArICIuc2lnYmFzZWRhdGEiICsgIi4iICsgc2VsZi5iYXNlaGFzaFtrXQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSkpCisKKyAgICAgICAgZGF0YSA9IHt9CisgICAgICAgIGRhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSA9IHNlbGYuYmFzZXdoaXRlbGlzdAorICAgICAgICBkYXRhWyd0YXNrd2hpdGVsaXN0J10gPSBzZWxmLnRhc2t3aGl0ZWxpc3QKKyAgICAgICAgZGF0YVsndGFza2RlcHMnXSA9IHNlbGYudGFza2RlcHNbZm5dW3Rhc2tdCisgICAgICAgIGRhdGFbJ2Jhc2VoYXNoJ10gPSBzZWxmLmJhc2VoYXNoW2tdCisgICAgICAgIGRhdGFbJ2dlbmRlcHMnXSA9IHt9CisgICAgICAgIGRhdGFbJ3ZhcnZhbHMnXSA9IHt9CisgICAgICAgIGRhdGFbJ3ZhcnZhbHMnXVt0YXNrXSA9IHNlbGYubG9va3VwY2FjaGVbZm5dW3Rhc2tdCisgICAgICAgIGZvciBkZXAgaW4gc2VsZi50YXNrZGVwc1tmbl1bdGFza106CisgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5iYXNld2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkYXRhWydnZW5kZXBzJ11bZGVwXSA9IHNlbGYuZ2VuZGVwc1tmbl1bZGVwXQorICAgICAgICAgICAgZGF0YVsndmFydmFscyddW2RlcF0gPSBzZWxmLmxvb2t1cGNhY2hlW2ZuXVtkZXBdCisKKyAgICAgICAgaWYgcnVudGltZSBhbmQgayBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgZGF0YVsncnVudGFza2RlcHMnXSA9IHNlbGYucnVudGFza2RlcHNba10KKyAgICAgICAgICAgIGRhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ10gPSBbKG9zLnBhdGguYmFzZW5hbWUoZiksIGNzKSBmb3IgZixjcyBpbiBzZWxmLmZpbGVfY2hlY2tzdW1fdmFsdWVzW2tdLml0ZW1zKCldCisgICAgICAgICAgICBkYXRhWydydW50YXNraGFzaGVzJ10gPSB7fQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkYXRhWydydW50YXNrZGVwcyddOgorICAgICAgICAgICAgICAgIGRhdGFbJ3J1bnRhc2toYXNoZXMnXVtkZXBdID0gc2VsZi50YXNraGFzaFtkZXBdCisKKyAgICAgICAgdGFpbnQgPSBzZWxmLnJlYWRfdGFpbnQoZm4sIHRhc2ssIHN0YW1wYmFzZSkKKyAgICAgICAgaWYgdGFpbnQ6CisgICAgICAgICAgICBkYXRhWyd0YWludCddID0gdGFpbnQKKworICAgICAgICBmZCwgdG1wZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPW9zLnBhdGguZGlybmFtZShzaWdmaWxlKSwgcHJlZml4PSJzaWd0YXNrLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKGZkLCAid2IiKSBhcyBzdHJlYW06CisgICAgICAgICAgICAgICAgcCA9IHBpY2tsZS5kdW1wKGRhdGEsIHN0cmVhbSwgLTEpCisgICAgICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkKKyAgICAgICAgICAgIG9zLmNobW9kKHRtcGZpbGUsIDA2NjQpCisgICAgICAgICAgICBvcy5yZW5hbWUodG1wZmlsZSwgc2lnZmlsZSkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBlcnI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByYWlzZSBlcnIKKworICAgIGRlZiBkdW1wX3NpZ3Moc2VsZiwgZGF0YUNhY2hlLCBvcHRpb25zKToKKyAgICAgICAgZm9yIGZuIGluIHNlbGYudGFza2RlcHM6CisgICAgICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnRhc2tkZXBzW2ZuXToKKyAgICAgICAgICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkYXRhQ2FjaGUuYmFzZXRhc2toYXNoW2tdICE9IHNlbGYuYmFzZWhhc2hba106CisgICAgICAgICAgICAgICAgICAgIGJiLmVycm9yKCJCaXRiYWtlJ3MgY2FjaGVkIGJhc2VoYXNoIGRvZXMgbm90IG1hdGNoIHRoZSBvbmUgd2UganVzdCBnZW5lcmF0ZWQgKCVzKSEiICUgaykKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlRoZSBtaXNtYXRjaGVkIGhhc2hlcyB3ZXJlICVzIGFuZCAlcyIgJSAoZGF0YUNhY2hlLmJhc2V0YXNraGFzaFtrXSwgc2VsZi5iYXNlaGFzaFtrXSkpCisgICAgICAgICAgICAgICAgc2VsZi5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIGRhdGFDYWNoZS5zdGFtcFtmbl0sIFRydWUpCisKK2NsYXNzIFNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaChTaWduYXR1cmVHZW5lcmF0b3JCYXNpYyk6CisgICAgbmFtZSA9ICJiYXNpY2hhc2giCisKKyAgICBkZWYgc3RhbXBmaWxlKHNlbGYsIHN0YW1wYmFzZSwgZm4sIHRhc2tuYW1lLCBleHRyYWluZm8sIGNsZWFuPUZhbHNlKToKKyAgICAgICAgaWYgdGFza25hbWUgIT0gImRvX3NldHNjZW5lIiBhbmQgdGFza25hbWUuZW5kc3dpdGgoIl9zZXRzY2VuZSIpOgorICAgICAgICAgICAgayA9IGZuICsgIi4iICsgdGFza25hbWVbOi05XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgayA9IGZuICsgIi4iICsgdGFza25hbWUKKyAgICAgICAgaWYgY2xlYW46CisgICAgICAgICAgICBoID0gIioiCisgICAgICAgIGVsaWYgayBpbiBzZWxmLnRhc2toYXNoOgorICAgICAgICAgICAgaCA9IHNlbGYudGFza2hhc2hba10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgayBpcyBub3QgaW4gYmFzZWhhc2gsIHRoZW4gZXJyb3IKKyAgICAgICAgICAgIGggPSBzZWxmLmJhc2VoYXNoW2tdCisgICAgICAgIHJldHVybiAoIiVzLiVzLiVzLiVzIiAlIChzdGFtcGJhc2UsIHRhc2tuYW1lLCBoLCBleHRyYWluZm8pKS5yc3RyaXAoJy4nKQorCisgICAgZGVmIHN0YW1wY2xlYW5tYXNrKHNlbGYsIHN0YW1wYmFzZSwgZm4sIHRhc2tuYW1lLCBleHRyYWluZm8pOgorICAgICAgICByZXR1cm4gc2VsZi5zdGFtcGZpbGUoc3RhbXBiYXNlLCBmbiwgdGFza25hbWUsIGV4dHJhaW5mbywgY2xlYW49VHJ1ZSkKKyAgICAgICAgCisgICAgZGVmIGludmFsaWRhdGVfdGFzayhzZWxmLCB0YXNrLCBkLCBmbik6CisgICAgICAgIGJiLm5vdGUoIlRhaW50aW5nIGhhc2ggdG8gZm9yY2UgcmVidWlsZCBvZiB0YXNrICVzLCAlcyIgJSAoZm4sIHRhc2spKQorICAgICAgICBiYi5idWlsZC53cml0ZV90YWludCh0YXNrLCBkLCBmbikKKworZGVmIGR1bXBfdGhpc190YXNrKG91dGZpbGUsIGQpOgorICAgIGltcG9ydCBiYi5wYXJzZQorICAgIGZuID0gZC5nZXRWYXIoIkJCX0ZJTEVOQU1FIiwgVHJ1ZSkKKyAgICB0YXNrID0gImRvXyIgKyBkLmdldFZhcigiQkJfQ1VSUkVOVFRBU0siLCBUcnVlKQorICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIG91dGZpbGUsICJjdXN0b21maWxlIikKKworZGVmIGNsZWFuX2Jhc2VwYXRoKGEpOgorICAgIGIgPSBhLnJzcGxpdCgiLyIsIDIpWzFdICsgYS5yc3BsaXQoIi8iLCAyKVsyXQorICAgIGlmIGEuc3RhcnRzd2l0aCgidmlydHVhbDoiKToKKyAgICAgICAgYiA9IGIgKyAiOiIgKyBhLnJzcGxpdCgiOiIsIDEpWzBdCisgICAgcmV0dXJuIGIKKworZGVmIGNsZWFuX2Jhc2VwYXRocyhhKToKKyAgICBiID0ge30KKyAgICBmb3IgeCBpbiBhOgorICAgICAgICBiW2NsZWFuX2Jhc2VwYXRoKHgpXSA9IGFbeF0KKyAgICByZXR1cm4gYgorCitkZWYgY2xlYW5fYmFzZXBhdGhzX2xpc3QoYSk6CisgICAgYiA9IFtdCisgICAgZm9yIHggaW4gYToKKyAgICAgICAgYi5hcHBlbmQoY2xlYW5fYmFzZXBhdGgoeCkpCisgICAgcmV0dXJuIGIKKworZGVmIGNvbXBhcmVfc2lnZmlsZXMoYSwgYiwgcmVjdXJzZWNiID0gTm9uZSk6CisgICAgb3V0cHV0ID0gW10KKworICAgIHAxID0gcGlja2xlLlVucGlja2xlcihvcGVuKGEsICJyYiIpKQorICAgIGFfZGF0YSA9IHAxLmxvYWQoKQorICAgIHAyID0gcGlja2xlLlVucGlja2xlcihvcGVuKGIsICJyYiIpKQorICAgIGJfZGF0YSA9IHAyLmxvYWQoKQorCisgICAgZGVmIGRpY3RfZGlmZihhLCBiLCB3aGl0ZWxpc3Q9c2V0KCkpOgorICAgICAgICBzYSA9IHNldChhLmtleXMoKSkKKyAgICAgICAgc2IgPSBzZXQoYi5rZXlzKCkpCisgICAgICAgIGNvbW1vbiA9IHNhICYgc2IKKyAgICAgICAgY2hhbmdlZCA9IHNldCgpCisgICAgICAgIGZvciBpIGluIGNvbW1vbjoKKyAgICAgICAgICAgIGlmIGFbaV0gIT0gYltpXSBhbmQgaSBub3QgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGNoYW5nZWQuYWRkKGkpCisgICAgICAgIGFkZGVkID0gc2IgLSBzYQorICAgICAgICByZW1vdmVkID0gc2EgLSBzYgorICAgICAgICByZXR1cm4gY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQKKworICAgIGRlZiBmaWxlX2NoZWNrc3Vtc19kaWZmKGEsIGIpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCisgICAgICAgICMgSGFuZGxlIG9sZCBzaWdpbmZvIGZvcm1hdAorICAgICAgICBpZiBpc2luc3RhbmNlKGEsIGRpY3QpOgorICAgICAgICAgICAgYSA9IFsob3MucGF0aC5iYXNlbmFtZShmKSwgY3MpIGZvciBmLCBjcyBpbiBhLml0ZW1zKCldCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgZGljdCk6CisgICAgICAgICAgICBiID0gWyhvcy5wYXRoLmJhc2VuYW1lKGYpLCBjcykgZm9yIGYsIGNzIGluIGIuaXRlbXMoKV0KKyAgICAgICAgIyBDb21wYXJlIGxpc3RzLCBlbnN1cmluZyB3ZSBjYW4gaGFuZGxlIGR1cGxpY2F0ZSBmaWxlbmFtZXMgaWYgdGhleSBleGlzdAorICAgICAgICByZW1vdmVkY291bnQgPSBDb3VudGVyKGEpCisgICAgICAgIHJlbW92ZWRjb3VudC5zdWJ0cmFjdChiKQorICAgICAgICBhZGRlZGNvdW50ID0gQ291bnRlcihiKQorICAgICAgICBhZGRlZGNvdW50LnN1YnRyYWN0KGEpCisgICAgICAgIGFkZGVkID0gW10KKyAgICAgICAgZm9yIHggaW4gYjoKKyAgICAgICAgICAgIGlmIGFkZGVkY291bnRbeF0gPiAwOgorICAgICAgICAgICAgICAgIGFkZGVkY291bnRbeF0gLT0gMQorICAgICAgICAgICAgICAgIGFkZGVkLmFwcGVuZCh4KQorICAgICAgICByZW1vdmVkID0gW10KKyAgICAgICAgY2hhbmdlZCA9IFtdCisgICAgICAgIGZvciB4IGluIGE6CisgICAgICAgICAgICBpZiByZW1vdmVkY291bnRbeF0gPiAwOgorICAgICAgICAgICAgICAgIHJlbW92ZWRjb3VudFt4XSAtPSAxCisgICAgICAgICAgICAgICAgZm9yIHkgaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHlbMF0gPT0geFswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQuYXBwZW5kKCh4WzBdLCB4WzFdLCB5WzFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkLnJlbW92ZSh5KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmFwcGVuZCh4KQorICAgICAgICBhZGRlZCA9IFt4WzBdIGZvciB4IGluIGFkZGVkXQorICAgICAgICByZW1vdmVkID0gW3hbMF0gZm9yIHggaW4gcmVtb3ZlZF0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQsIGFkZGVkLCByZW1vdmVkCisKKyAgICBpZiAnYmFzZXdoaXRlbGlzdCcgaW4gYV9kYXRhIGFuZCBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSAhPSBiX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiYmFzZXdoaXRlbGlzdCBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSwgYl9kYXRhWydiYXNld2hpdGVsaXN0J10pKQorICAgICAgICBpZiBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSBhbmQgYl9kYXRhWydiYXNld2hpdGVsaXN0J106CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjaGFuZ2VkIGl0ZW1zOiAlcyIgJSBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXS5zeW1tZXRyaWNfZGlmZmVyZW5jZShiX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSkpCisKKyAgICBpZiAndGFza3doaXRlbGlzdCcgaW4gYV9kYXRhIGFuZCBhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSAhPSBiX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgidGFza3doaXRlbGlzdCBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSwgYl9kYXRhWyd0YXNrd2hpdGVsaXN0J10pKQorICAgICAgICBpZiBhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSBhbmQgYl9kYXRhWyd0YXNrd2hpdGVsaXN0J106CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjaGFuZ2VkIGl0ZW1zOiAlcyIgJSBhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXS5zeW1tZXRyaWNfZGlmZmVyZW5jZShiX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSkpCisKKyAgICBpZiBhX2RhdGFbJ3Rhc2tkZXBzJ10gIT0gYl9kYXRhWyd0YXNrZGVwcyddOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUYXNrIGRlcGVuZGVuY2llcyBjaGFuZ2VkIGZyb206XG4lc1xudG86XG4lcyIgJSAoc29ydGVkKGFfZGF0YVsndGFza2RlcHMnXSksIHNvcnRlZChiX2RhdGFbJ3Rhc2tkZXBzJ10pKSkKKworICAgIGlmIGFfZGF0YVsnYmFzZWhhc2gnXSAhPSBiX2RhdGFbJ2Jhc2VoYXNoJ106CisgICAgICAgIG91dHB1dC5hcHBlbmQoImJhc2VoYXNoIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIgJSAoYV9kYXRhWydiYXNlaGFzaCddLCBiX2RhdGFbJ2Jhc2VoYXNoJ10pKQorCisgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBkaWN0X2RpZmYoYV9kYXRhWydnZW5kZXBzJ10sIGJfZGF0YVsnZ2VuZGVwcyddLCBhX2RhdGFbJ2Jhc2V3aGl0ZWxpc3QnXSAmIGJfZGF0YVsnYmFzZXdoaXRlbGlzdCddKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIGZvciBkZXAgaW4gY2hhbmdlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB2YXJpYWJsZSAlcyBjaGFuZ2VkIGZyb20gJyVzJyB0byAnJXMnIiAlIChkZXAsIGFfZGF0YVsnZ2VuZGVwcyddW2RlcF0sIGJfZGF0YVsnZ2VuZGVwcyddW2RlcF0pKQorICAgICAgICAgICAgaWYgYV9kYXRhWydnZW5kZXBzJ11bZGVwXSBhbmQgYl9kYXRhWydnZW5kZXBzJ11bZGVwXToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJjaGFuZ2VkIGl0ZW1zOiAlcyIgJSBhX2RhdGFbJ2dlbmRlcHMnXVtkZXBdLnN5bW1ldHJpY19kaWZmZXJlbmNlKGJfZGF0YVsnZ2VuZGVwcyddW2RlcF0pKQorICAgIGlmIGFkZGVkOgorICAgICAgICBmb3IgZGVwIGluIGFkZGVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB2YXJpYWJsZSAlcyB3YXMgYWRkZWQiICUgKGRlcCkpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgZm9yIGRlcCBpbiByZW1vdmVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBWYXJpYWJsZSAlcyB3YXMgcmVtb3ZlZCIgJSAoZGVwKSkKKworCisgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBkaWN0X2RpZmYoYV9kYXRhWyd2YXJ2YWxzJ10sIGJfZGF0YVsndmFydmFscyddKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIGZvciBkZXAgaW4gY2hhbmdlZDoKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIlZhcmlhYmxlICVzIHZhbHVlIGNoYW5nZWQgZnJvbSAnJXMnIHRvICclcyciICUgKGRlcCwgYV9kYXRhWyd2YXJ2YWxzJ11bZGVwXSwgYl9kYXRhWyd2YXJ2YWxzJ11bZGVwXSkpCisKKyAgICBjaGFuZ2VkLCBhZGRlZCwgcmVtb3ZlZCA9IGZpbGVfY2hlY2tzdW1zX2RpZmYoYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddLCBiX2RhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ10pCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgZm9yIGYsIG9sZCwgbmV3IGluIGNoYW5nZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJDaGVja3N1bSBmb3IgZmlsZSAlcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGYsIG9sZCwgbmV3KSkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgZm9yIGYgaW4gYWRkZWQ6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJEZXBlbmRlbmN5IG9uIGNoZWNrc3VtIG9mIGZpbGUgJXMgd2FzIGFkZGVkIiAlIChmKSkKKyAgICBpZiByZW1vdmVkOgorICAgICAgICBmb3IgZiBpbiByZW1vdmVkOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiBjaGVja3N1bSBvZiBmaWxlICVzIHdhcyByZW1vdmVkIiAlIChmKSkKKworCisgICAgaWYgbGVuKGFfZGF0YVsncnVudGFza2RlcHMnXSkgIT0gbGVuKGJfZGF0YVsncnVudGFza2RlcHMnXSk6CisgICAgICAgIGNoYW5nZWQgPSBbIk51bWJlciBvZiB0YXNrIGRlcGVuZGVuY2llcyBjaGFuZ2VkIl0KKyAgICBlbHNlOgorICAgICAgICBjaGFuZ2VkID0gW10KKyAgICAgICAgZm9yIGlkeCwgdGFzayBpbiBlbnVtZXJhdGUoYV9kYXRhWydydW50YXNrZGVwcyddKToKKyAgICAgICAgICAgIGEgPSBhX2RhdGFbJ3J1bnRhc2tkZXBzJ11baWR4XQorICAgICAgICAgICAgYiA9IGJfZGF0YVsncnVudGFza2RlcHMnXVtpZHhdCisgICAgICAgICAgICBpZiBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVthXSAhPSBiX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVtiXToKKyAgICAgICAgICAgICAgICBjaGFuZ2VkLmFwcGVuZCgiJXMgd2l0aCBoYXNoICVzXG4gY2hhbmdlZCB0b1xuJXMgd2l0aCBoYXNoICVzIiAlIChhLCBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVthXSwgYiwgYl9kYXRhWydydW50YXNraGFzaGVzJ11bYl0pKQorCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgicnVudGFza2RlcHMgY2hhbmdlZCBmcm9tICVzIHRvICVzIiAlIChjbGVhbl9iYXNlcGF0aHNfbGlzdChhX2RhdGFbJ3J1bnRhc2tkZXBzJ10pLCBjbGVhbl9iYXNlcGF0aHNfbGlzdChiX2RhdGFbJ3J1bnRhc2tkZXBzJ10pKSkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiXG4iLmpvaW4oY2hhbmdlZCkpCisKKworICAgIGlmICdydW50YXNraGFzaGVzJyBpbiBhX2RhdGEgYW5kICdydW50YXNraGFzaGVzJyBpbiBiX2RhdGE6CisgICAgICAgIGEgPSBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXQorICAgICAgICBiID0gYl9kYXRhWydydW50YXNraGFzaGVzJ10KKyAgICAgICAgY2hhbmdlZCwgYWRkZWQsIHJlbW92ZWQgPSBkaWN0X2RpZmYoYSwgYikKKyAgICAgICAgaWYgYWRkZWQ6CisgICAgICAgICAgICBmb3IgZGVwIGluIGFkZGVkOgorICAgICAgICAgICAgICAgIGJkZXBfZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBiZGVwIGluIHJlbW92ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiW2RlcF0gPT0gYVtiZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyByZXBsYWNlZCBieSAlcyB3aXRoIHNhbWUgaGFzaCIgJSAoZGVwLCBiZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZGVwX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBiZGVwX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJEZXBlbmRlbmN5IG9uIHRhc2sgJXMgd2FzIGFkZGVkIHdpdGggaGFzaCAlcyIgJSAoY2xlYW5fYmFzZXBhdGgoZGVwKSwgYltkZXBdKSkKKyAgICAgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcmVtb3ZlZDoKKyAgICAgICAgICAgICAgICBhZGVwX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBhZGRlZDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZXAgaW4gYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiW2FkZXBdID09IGFbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjb3V0cHV0LmFwcGVuZCgiRGVwZW5kZW5jeSBvbiB0YXNrICVzIHdhcyByZXBsYWNlZCBieSAlcyB3aXRoIHNhbWUgaGFzaCIgJSAoYWRlcCwgZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGVwX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBhZGVwX2ZvdW5kOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJEZXBlbmRlbmN5IG9uIHRhc2sgJXMgd2FzIHJlbW92ZWQgd2l0aCBoYXNoICVzIiAlIChjbGVhbl9iYXNlcGF0aChkZXApLCBhW2RlcF0pKQorICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIkhhc2ggZm9yIGRlcGVuZGVudCB0YXNrICVzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIgJSAoY2xlYW5fYmFzZXBhdGgoZGVwKSwgYVtkZXBdLCBiW2RlcF0pKQorICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKHJlY3Vyc2VjYik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgYSBkZXBlbmRlbnQgaGFzaCBjaGFuZ2VkLCBtaWdodCBhcyB3ZWxsIHByaW50IHRoZSBsaW5lIGFib3ZlIGFuZCB0aGVuIGRlZmVyIHRvIHRoZSBjaGFuZ2VzIGluIAorICAgICAgICAgICAgICAgICAgICAjIHRoYXQgaGFzaCBzaW5jZSBpbiBhbGwgbGlrZWx5aG9vZCwgdGhleSdyZSB0aGUgc2FtZSBjaGFuZ2VzIHRoaXMgdGFzayBhbHNvIHNhdy4KKyAgICAgICAgICAgICAgICAgICAgcmVjb3V0ID0gcmVjdXJzZWNiKGRlcCwgYVtkZXBdLCBiW2RlcF0pCisgICAgICAgICAgICAgICAgICAgIGlmIHJlY291dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IFtvdXRwdXRbLTFdXSArIHJlY291dAorCisgICAgYV90YWludCA9IGFfZGF0YS5nZXQoJ3RhaW50JywgTm9uZSkKKyAgICBiX3RhaW50ID0gYl9kYXRhLmdldCgndGFpbnQnLCBOb25lKQorICAgIGlmIGFfdGFpbnQgIT0gYl90YWludDoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgiVGFpbnQgKGJ5IGZvcmNlZC9pbnZhbGlkYXRlZCB0YXNrKSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMiICUgKGFfdGFpbnQsIGJfdGFpbnQpKQorCisgICAgcmV0dXJuIG91dHB1dAorCisKK2RlZiBkdW1wX3NpZ2ZpbGUoYSk6CisgICAgb3V0cHV0ID0gW10KKworICAgIHAxID0gcGlja2xlLlVucGlja2xlcihvcGVuKGEsICJyYiIpKQorICAgIGFfZGF0YSA9IHAxLmxvYWQoKQorCisgICAgb3V0cHV0LmFwcGVuZCgiYmFzZXdoaXRlbGlzdDogJXMiICUgKGFfZGF0YVsnYmFzZXdoaXRlbGlzdCddKSkKKworICAgIG91dHB1dC5hcHBlbmQoInRhc2t3aGl0ZWxpc3Q6ICVzIiAlIChhX2RhdGFbJ3Rhc2t3aGl0ZWxpc3QnXSkpCisKKyAgICBvdXRwdXQuYXBwZW5kKCJUYXNrIGRlcGVuZGVuY2llczogJXMiICUgKHNvcnRlZChhX2RhdGFbJ3Rhc2tkZXBzJ10pKSkKKworICAgIG91dHB1dC5hcHBlbmQoImJhc2VoYXNoOiAlcyIgJSAoYV9kYXRhWydiYXNlaGFzaCddKSkKKworICAgIGZvciBkZXAgaW4gYV9kYXRhWydnZW5kZXBzJ106CisgICAgICAgIG91dHB1dC5hcHBlbmQoIkxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB2YXJpYWJsZSAlcyBpcyAlcyIgJSAoZGVwLCBhX2RhdGFbJ2dlbmRlcHMnXVtkZXBdKSkKKworICAgIGZvciBkZXAgaW4gYV9kYXRhWyd2YXJ2YWxzJ106CisgICAgICAgIG91dHB1dC5hcHBlbmQoIlZhcmlhYmxlICVzIHZhbHVlIGlzICVzIiAlIChkZXAsIGFfZGF0YVsndmFydmFscyddW2RlcF0pKQorCisgICAgaWYgJ3J1bnRhc2tkZXBzJyBpbiBhX2RhdGE6CisgICAgICAgIG91dHB1dC5hcHBlbmQoIlRhc2tzIHRoaXMgdGFzayBkZXBlbmRzIG9uOiAlcyIgJSAoYV9kYXRhWydydW50YXNrZGVwcyddKSkKKworICAgIGlmICdmaWxlX2NoZWNrc3VtX3ZhbHVlcycgaW4gYV9kYXRhOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUaGlzIHRhc2sgZGVwZW5kcyBvbiB0aGUgY2hlY2tzdW1zIG9mIGZpbGVzOiAlcyIgJSAoYV9kYXRhWydmaWxlX2NoZWNrc3VtX3ZhbHVlcyddKSkKKworICAgIGlmICdydW50YXNraGFzaGVzJyBpbiBhX2RhdGE6CisgICAgICAgIGZvciBkZXAgaW4gYV9kYXRhWydydW50YXNraGFzaGVzJ106CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJIYXNoIGZvciBkZXBlbmRlbnQgdGFzayAlcyBpcyAlcyIgJSAoZGVwLCBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVtkZXBdKSkKKworICAgIGlmICd0YWludCcgaW4gYV9kYXRhOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCJUYWludGVkIChieSBmb3JjZWQvaW52YWxpZGF0ZWQgdGFzayk6ICVzIiAlIGFfZGF0YVsndGFpbnQnXSkKKworICAgIGRhdGEgPSBhX2RhdGFbJ2Jhc2VoYXNoJ10KKyAgICBmb3IgZGVwIGluIGFfZGF0YVsncnVudGFza2RlcHMnXToKKyAgICAgICAgZGF0YSA9IGRhdGEgKyBhX2RhdGFbJ3J1bnRhc2toYXNoZXMnXVtkZXBdCisKKyAgICBmb3IgYyBpbiBhX2RhdGFbJ2ZpbGVfY2hlY2tzdW1fdmFsdWVzJ106CisgICAgICAgIGRhdGEgPSBkYXRhICsgY1sxXQorCisgICAgaWYgJ3RhaW50JyBpbiBhX2RhdGE6CisgICAgICAgIGRhdGEgPSBkYXRhICsgYV9kYXRhWyd0YWludCddCisKKyAgICBoID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb21wdXRlZCBIYXNoIGlzICVzIiAlIGgpCisKKyAgICByZXR1cm4gb3V0cHV0CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weSBiL2JpdGJha2UvbGliL2JiL3Rhc2tkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYWI3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi90YXNrZGF0YS5weQpAQCAtMCwwICsxLDY1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIiIiCitCaXRCYWtlICdUYXNrRGF0YScgaW1wbGVtZW50YXRpb24KKworVGFzayBkYXRhIGNvbGxlY3Rpb24gYW5kIGhhbmRsaW5nCisKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNiAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5UYXNrRGF0YSIpCisKK2RlZiByZV9tYXRjaF9zdHJpbmdzKHRhcmdldCwgc3RyaW5ncyk6CisgICAgIiIiCisgICAgV2hldGhlciBvciBub3QgdGhlIHN0cmluZyAndGFyZ2V0JyBtYXRjaGVzCisgICAgYW55IG9uZSBzdHJpbmcgb2YgdGhlIHN0cmluZ3Mgd2hpY2ggY2FuIGJlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcKKyAgICAiIiIKKyAgICByZXR1cm4gYW55KG5hbWUgPT0gdGFyZ2V0IG9yIHJlLm1hdGNoKG5hbWUsIHRhcmdldCkKKyAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHN0cmluZ3MpCisKK2NsYXNzIFRhc2tEYXRhOgorICAgICIiIgorICAgIEJpdEJha2UgVGFzayBEYXRhIGltcGxlbWVudGF0aW9uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFib3J0ID0gVHJ1ZSwgdHJ5YWx0Y29uZmlncyA9IEZhbHNlLCBza2lwbGlzdCA9IE5vbmUsIGFsbG93aW5jb21wbGV0ZSA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5idWlsZF9uYW1lc19pbmRleCA9IFtdCisgICAgICAgIHNlbGYucnVuX25hbWVzX2luZGV4ID0gW10KKyAgICAgICAgc2VsZi5mbl9pbmRleCA9IFtdCisKKyAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzID0ge30KKyAgICAgICAgc2VsZi5ydW5fdGFyZ2V0cyA9IHt9CisKKyAgICAgICAgc2VsZi5leHRlcm5hbF90YXJnZXRzID0gW10KKworICAgICAgICBzZWxmLnRhc2tzX2ZuaWQgPSBbXQorICAgICAgICBzZWxmLnRhc2tzX25hbWUgPSBbXQorICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzID0gW10KKyAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kcyA9IFtdCisgICAgICAgIHNlbGYudGFza3NfaXJkZXBlbmRzID0gW10KKyAgICAgICAgIyBDYWNoZSB0byBzcGVlZCB1cCB0YXNrIElEIGxvb2t1cHMKKyAgICAgICAgc2VsZi50YXNrc19sb29rdXAgPSB7fQorCisgICAgICAgIHNlbGYuZGVwaWRzID0ge30KKyAgICAgICAgc2VsZi5yZGVwaWRzID0ge30KKworICAgICAgICBzZWxmLmNvbnNpZGVyX21zZ3NfY2FjaGUgPSBbXQorCisgICAgICAgIHNlbGYuZmFpbGVkX2RlcHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9yZGVwcyA9IFtdCisgICAgICAgIHNlbGYuZmFpbGVkX2ZuaWRzID0gW10KKworICAgICAgICBzZWxmLmFib3J0ID0gYWJvcnQKKyAgICAgICAgc2VsZi50cnlhbHRjb25maWdzID0gdHJ5YWx0Y29uZmlncworICAgICAgICBzZWxmLmFsbG93aW5jb21wbGV0ZSA9IGFsbG93aW5jb21wbGV0ZQorCisgICAgICAgIHNlbGYuc2tpcGxpc3QgPSBza2lwbGlzdAorCisgICAgZGVmIGdldGJ1aWxkX2lkKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIGJ1aWxkIHRhcmdldCBuYW1lLgorICAgICAgICBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IG5hbWUgaW4gc2VsZi5idWlsZF9uYW1lc19pbmRleDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXguYXBwZW5kKG5hbWUpCisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuYnVpbGRfbmFtZXNfaW5kZXgpIC0gMQorCisgICAgICAgIHJldHVybiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4LmluZGV4KG5hbWUpCisKKyAgICBkZWYgZ2V0cnVuX2lkKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIHJ1biB0YXJnZXQgbmFtZS4KKyAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYucnVuX25hbWVzX2luZGV4OgorICAgICAgICAgICAgc2VsZi5ydW5fbmFtZXNfaW5kZXguYXBwZW5kKG5hbWUpCisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYucnVuX25hbWVzX2luZGV4KSAtIDEKKworICAgICAgICByZXR1cm4gc2VsZi5ydW5fbmFtZXNfaW5kZXguaW5kZXgobmFtZSkKKworICAgIGRlZiBnZXRmbl9pZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgSWYgaXQgZG9lc24ndCBleGlzdCwgY3JlYXRlIG9uZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBuYW1lIGluIHNlbGYuZm5faW5kZXg6CisgICAgICAgICAgICBzZWxmLmZuX2luZGV4LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZuX2luZGV4KSAtIDEKKworICAgICAgICByZXR1cm4gc2VsZi5mbl9pbmRleC5pbmRleChuYW1lKQorCisgICAgZGVmIGdldHRhc2tfaWRzKHNlbGYsIGZuaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBJRCBudW1iZXJzIG1hdGNoaW5nIGEgZ2l2ZW4gZm5pZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlkcyA9IFtdCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19sb29rdXA6CisgICAgICAgICAgICBmb3IgdGFzayBpbiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdKQorICAgICAgICByZXR1cm4gaWRzCisKKyAgICBkZWYgZ2V0dGFza19pZF9mcm9tZm5pZChzZWxmLCBmbmlkLCB0YXNrKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhbiBJRCBudW1iZXIgZm9yIHRoZSB0YXNrIG1hdGNoaW5nIGZuaWQgYW5kIHRhc2suCisgICAgICAgICIiIgorICAgICAgICBpZiBmbmlkIGluIHNlbGYudGFza3NfbG9va3VwOgorICAgICAgICAgICAgaWYgdGFzayBpbiBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50YXNrc19sb29rdXBbZm5pZF1bdGFza10KKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldHRhc2tfaWQoc2VsZiwgZm4sIHRhc2ssIGNyZWF0ZSA9IFRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGFuIElEIG51bWJlciBmb3IgdGhlIHRhc2sgbWF0Y2hpbmcgZm4gYW5kIHRhc2suCisgICAgICAgIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBvbmUgYnkgZGVmYXVsdC4KKyAgICAgICAgT3B0aW9uYWxseSByZXR1cm4gTm9uZSBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisKKyAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnRhc2tzX2xvb2t1cDoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi50YXNrc19sb29rdXBbZm5pZF06CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFza3NfbG9va3VwW2ZuaWRdW3Rhc2tdCisKKyAgICAgICAgaWYgbm90IGNyZWF0ZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgc2VsZi50YXNrc19uYW1lLmFwcGVuZCh0YXNrKQorICAgICAgICBzZWxmLnRhc2tzX2ZuaWQuYXBwZW5kKGZuaWQpCisgICAgICAgIHNlbGYudGFza3NfdGRlcGVuZHMuYXBwZW5kKFtdKQorICAgICAgICBzZWxmLnRhc2tzX2lkZXBlbmRzLmFwcGVuZChbXSkKKyAgICAgICAgc2VsZi50YXNrc19pcmRlcGVuZHMuYXBwZW5kKFtdKQorCisgICAgICAgIGxpc3RpZCA9IGxlbihzZWxmLnRhc2tzX25hbWUpIC0gMQorCisgICAgICAgIGlmIGZuaWQgbm90IGluIHNlbGYudGFza3NfbG9va3VwOgorICAgICAgICAgICAgc2VsZi50YXNrc19sb29rdXBbZm5pZF0gPSB7fQorICAgICAgICBzZWxmLnRhc2tzX2xvb2t1cFtmbmlkXVt0YXNrXSA9IGxpc3RpZAorCisgICAgICAgIHJldHVybiBsaXN0aWQKKworICAgIGRlZiBhZGRfdGFza3Moc2VsZiwgZm4sIGRhdGFDYWNoZSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGFza3MgZm9yIGEgZ2l2ZW4gZm4gdG8gdGhlIGRhdGFiYXNlCisgICAgICAgICIiIgorCisgICAgICAgIHRhc2tfZGVwcyA9IGRhdGFDYWNoZS50YXNrX2RlcHNbZm5dCisKKyAgICAgICAgZm5pZCA9IHNlbGYuZ2V0Zm5faWQoZm4pCisKKyAgICAgICAgaWYgZm5pZCBpbiBzZWxmLmZhaWxlZF9mbmlkczoKKyAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiVGFza0RhdGEiLCAiVHJ5aW5nIHRvIHJlLWFkZCBhIGZhaWxlZCBmaWxlPyBTb21ldGhpbmcgaXMgYnJva2VuLi4uIikKKworICAgICAgICAjIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgc2VlbiB0aGlzIGZuCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi50YXNrc19mbmlkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza19kZXBzWyd0YXNrcyddOgorCisgICAgICAgICAgICAjIFdvcmsgb3V0IHRhc2sgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBwYXJlbnRpZHMgPSBbXQorICAgICAgICAgICAgZm9yIGRlcCBpbiB0YXNrX2RlcHNbJ3BhcmVudHMnXVt0YXNrXToKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHRhc2tfZGVwc1sndGFza3MnXToKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIk5vdCBhZGRpbmcgZGVwZW5kZW55IG9mICVzIG9uICVzIHNpbmNlICVzIGRvZXMgbm90IGV4aXN0IiAlICh0YXNrLCBkZXAsIGRlcCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGFyZW50aWQgPSBzZWxmLmdldHRhc2tfaWQoZm4sIGRlcCkKKyAgICAgICAgICAgICAgICBwYXJlbnRpZHMuYXBwZW5kKHBhcmVudGlkKQorICAgICAgICAgICAgdGFza2lkID0gc2VsZi5nZXR0YXNrX2lkKGZuLCB0YXNrKQorICAgICAgICAgICAgc2VsZi50YXNrc190ZGVwZW5kc1t0YXNraWRdLmV4dGVuZChwYXJlbnRpZHMpCisKKyAgICAgICAgICAgICMgVG91Y2ggYWxsIGludGVydGFzayBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGlmICdkZXBlbmRzJyBpbiB0YXNrX2RlcHMgYW5kIHRhc2sgaW4gdGFza19kZXBzWydkZXBlbmRzJ106CisgICAgICAgICAgICAgICAgaWRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tfZGVwc1snZGVwZW5kcyddW3Rhc2tdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICI6IiBub3QgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiVGFza0RhdGEiLCAiRXJyb3IgZm9yICVzLCBkZXBlbmRlbmN5ICVzIGRvZXMgbm90IGNvbnRhaW4gJzonIGNoYXJhY3RlclxuLiBUYXNrICdkZXBlbmRzJyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtICdwYWNrYWdlbmFtZTp0YXNrJyIgJSAoZm4sIGRlcCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKCgoc2VsZi5nZXRidWlsZF9pZChkZXAuc3BsaXQoIjoiKVswXSkpLCBkZXAuc3BsaXQoIjoiKVsxXSkpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrc19pZGVwZW5kc1t0YXNraWRdLmV4dGVuZChpZHMpCisgICAgICAgICAgICBpZiAncmRlcGVuZHMnIGluIHRhc2tfZGVwcyBhbmQgdGFzayBpbiB0YXNrX2RlcHNbJ3JkZXBlbmRzJ106CisgICAgICAgICAgICAgICAgaWRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHRhc2tfZGVwc1sncmRlcGVuZHMnXVt0YXNrXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAiOiIgbm90IGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5tc2cuZmF0YWwoIlRhc2tEYXRhIiwgIkVycm9yIGZvciAlcywgZGVwZW5kZW5jeSAlcyBkb2VzIG5vdCBjb250YWluICc6JyBjaGFyYWN0ZXJcbi4gVGFzayAncmRlcGVuZHMnIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gJ3BhY2thZ2VuYW1lOnRhc2snIiAlIChmbiwgZGVwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKChzZWxmLmdldHJ1bl9pZChkZXAuc3BsaXQoIjoiKVswXSkpLCBkZXAuc3BsaXQoIjoiKVsxXSkpCisgICAgICAgICAgICAgICAgc2VsZi50YXNrc19pcmRlcGVuZHNbdGFza2lkXS5leHRlbmQoaWRzKQorCisKKyAgICAgICAgIyBXb3JrIG91dCBidWlsZCBkZXBlbmRlbmNpZXMKKyAgICAgICAgaWYgbm90IGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBkZXBlbmRpZHMgPSB7fQorICAgICAgICAgICAgZm9yIGRlcGVuZCBpbiBkYXRhQ2FjaGUuZGVwc1tmbl06CisgICAgICAgICAgICAgICAgZGVwZW5kaWRzW3NlbGYuZ2V0YnVpbGRfaWQoZGVwZW5kKV0gPSBOb25lCisgICAgICAgICAgICBzZWxmLmRlcGlkc1tmbmlkXSA9IGRlcGVuZGlkcy5rZXlzKCkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQWRkZWQgZGVwZW5kZW5jaWVzICVzIGZvciAlcyIsIHN0cihkYXRhQ2FjaGUuZGVwc1tmbl0pLCBmbikKKworICAgICAgICAjIFdvcmsgb3V0IHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgIGlmIG5vdCBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIHJkZXBlbmRpZHMgPSB7fQorICAgICAgICAgICAgcmRlcGVuZHMgPSBkYXRhQ2FjaGUucnVuZGVwc1tmbl0KKyAgICAgICAgICAgIHJyZWNzID0gZGF0YUNhY2hlLnJ1bnJlY3NbZm5dCisgICAgICAgICAgICByZGVwZW5kbGlzdCA9IFtdCisgICAgICAgICAgICBycmVjbGlzdCA9IFtdCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiByZGVwZW5kc1twYWNrYWdlXToKKyAgICAgICAgICAgICAgICAgICAgcmRlcGVuZGxpc3QuYXBwZW5kKHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRpZHNbc2VsZi5nZXRydW5faWQocmRlcGVuZCldID0gTm9uZQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcnJlY3M6CisgICAgICAgICAgICAgICAgZm9yIHJkZXBlbmQgaW4gcnJlY3NbcGFja2FnZV06CisgICAgICAgICAgICAgICAgICAgIHJyZWNsaXN0LmFwcGVuZChyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICByZGVwZW5kaWRzW3NlbGYuZ2V0cnVuX2lkKHJkZXBlbmQpXSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHJkZXBlbmRsaXN0OgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiQWRkZWQgcnVudGltZSBkZXBlbmRlbmNpZXMgJXMgZm9yICVzIiwgc3RyKHJkZXBlbmRsaXN0KSwgZm4pCisgICAgICAgICAgICBpZiBycmVjbGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoMiwgIkFkZGVkIHJ1bnRpbWUgcmVjb21tZW5kYXRpb25zICVzIGZvciAlcyIsIHN0cihycmVjbGlzdCksIGZuKQorICAgICAgICAgICAgc2VsZi5yZGVwaWRzW2ZuaWRdID0gcmRlcGVuZGlkcy5rZXlzKCkKKworICAgICAgICBmb3IgZGVwIGluIHNlbGYuZGVwaWRzW2ZuaWRdOgorICAgICAgICAgICAgaWYgZGVwIGluIHNlbGYuZmFpbGVkX2RlcHM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZm9yIGRlcCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICBpZiBkZXAgaW4gc2VsZi5mYWlsZWRfcmRlcHM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBoYXZlX2J1aWxkX3RhcmdldChzZWxmLCB0YXJnZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgSGF2ZSB3ZSBhIGJ1aWxkIHRhcmdldCBtYXRjaGluZyB0aGlzIG5hbWU/CisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQodGFyZ2V0KQorCisgICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGhhdmVfcnVudGltZV90YXJnZXQoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIEhhdmUgd2UgYSBydW50aW1lIHRhcmdldCBtYXRjaGluZyB0aGlzIG5hbWU/CisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0cnVuX2lkKHRhcmdldCkKKworICAgICAgICBpZiB0YXJnZXRpZCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkX2J1aWxkX3RhcmdldChzZWxmLCBmbiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSBidWlsZCB0YXJnZXQuCisgICAgICAgIElmIGFscmVhZHkgcHJlc2VudCwgYXBwZW5kIHRoZSBwcm92aWRlciBmbiB0byB0aGUgbGlzdAorICAgICAgICAiIiIKKyAgICAgICAgdGFyZ2V0aWQgPSBzZWxmLmdldGJ1aWxkX2lkKGl0ZW0pCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldGlkXToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRpZF0uYXBwZW5kKGZuaWQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldGlkXSA9IFtmbmlkXQorCisgICAgZGVmIGFkZF9ydW50aW1lX3RhcmdldChzZWxmLCBmbiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSBydW50aW1lIHRhcmdldC4KKyAgICAgICAgSWYgYWxyZWFkeSBwcmVzZW50LCBhcHBlbmQgdGhlIHByb3ZpZGVyIGZuIHRvIHRoZSBsaXN0CisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0cnVuX2lkKGl0ZW0pCisgICAgICAgIGZuaWQgPSBzZWxmLmdldGZuX2lkKGZuKQorCisgICAgICAgIGlmIHRhcmdldGlkIGluIHNlbGYucnVuX3RhcmdldHM6CisgICAgICAgICAgICBpZiBmbmlkIGluIHNlbGYucnVuX3RhcmdldHNbdGFyZ2V0aWRdOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRpZF0uYXBwZW5kKGZuaWQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRpZF0gPSBbZm5pZF0KKworICAgIGRlZiBtYXJrX2V4dGVybmFsX3RhcmdldChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSBidWlsZCB0YXJnZXQgYXMgYmVpbmcgZXh0ZXJuYWxseSByZXF1ZXN0ZWQKKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldGlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQorCisgICAgICAgIGlmIHRhcmdldGlkIG5vdCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLmV4dGVybmFsX3RhcmdldHMuYXBwZW5kKHRhcmdldGlkKQorCisgICAgZGVmIGdldF91bnJlc29sdmVkX2J1aWxkX3RhcmdldHMoc2VsZiwgZGF0YUNhY2hlKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgYnVpbGQgdGFyZ2V0cyB3aG8ncyBwcm92aWRlcnMKKyAgICAgICAgYXJlIHVua25vd24uCisgICAgICAgICIiIgorICAgICAgICB1bnJlc29sdmVkID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmJ1aWxkX25hbWVzX2luZGV4OgorICAgICAgICAgICAgaWYgcmVfbWF0Y2hfc3RyaW5ncyh0YXJnZXQsIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRfbmFtZXNfaW5kZXguaW5kZXgodGFyZ2V0KSBpbiBzZWxmLmZhaWxlZF9kZXBzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5oYXZlX2J1aWxkX3RhcmdldCh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHVucmVzb2x2ZWQuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWQKKworICAgIGRlZiBnZXRfdW5yZXNvbHZlZF9ydW5fdGFyZ2V0cyhzZWxmLCBkYXRhQ2FjaGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBydW50aW1lIHRhcmdldHMgd2hvJ3MgcHJvdmlkZXJzCisgICAgICAgIGFyZSB1bmtub3duLgorICAgICAgICAiIiIKKyAgICAgICAgdW5yZXNvbHZlZCA9IFtdCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5ydW5fbmFtZXNfaW5kZXg6CisgICAgICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKHRhcmdldCwgZGF0YUNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ydW5fbmFtZXNfaW5kZXguaW5kZXgodGFyZ2V0KSBpbiBzZWxmLmZhaWxlZF9yZGVwczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuaGF2ZV9ydW50aW1lX3RhcmdldCh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHVucmVzb2x2ZWQuYXBwZW5kKHRhcmdldCkKKyAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWQKKworICAgIGRlZiBnZXRfcHJvdmlkZXIoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHByb3ZpZGVycyBvZiBpdGVtCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQoaXRlbSkKKworICAgICAgICByZXR1cm4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldGlkXQorCisgICAgZGVmIGdldF9kZXBlbmRlZXMoc2VsZiwgaXRlbWlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGFyZ2V0cyB3aGljaCBkZXBlbmQgb24gaXRlbQorICAgICAgICAiIiIKKyAgICAgICAgZGVwZW5kZWVzID0gW10KKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBpZiBpdGVtaWQgaW4gc2VsZi5kZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChmbmlkKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X2RlcGVuZGVlc19zdHIoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRhcmdldHMgd2hpY2ggZGVwZW5kIG9uIGl0ZW0gYXMgYSB1c2VyIHJlYWRhYmxlIHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgaXRlbWlkID0gc2VsZi5nZXRidWlsZF9pZChpdGVtKQorICAgICAgICBkZXBlbmRlZXMgPSBbXQorICAgICAgICBmb3IgZm5pZCBpbiBzZWxmLmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICBkZXBlbmRlZXMuYXBwZW5kKHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIHJldHVybiBkZXBlbmRlZXMKKworICAgIGRlZiBnZXRfcmRlcGVuZGVlcyhzZWxmLCBpdGVtaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBydW50aW1lIGl0ZW0KKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVlcyA9IFtdCisgICAgICAgIGZvciBmbmlkIGluIHNlbGYucmRlcGlkczoKKyAgICAgICAgICAgIGlmIGl0ZW1pZCBpbiBzZWxmLnJkZXBpZHNbZm5pZF06CisgICAgICAgICAgICAgICAgZGVwZW5kZWVzLmFwcGVuZChmbmlkKQorICAgICAgICByZXR1cm4gZGVwZW5kZWVzCisKKyAgICBkZWYgZ2V0X3JkZXBlbmRlZXNfc3RyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0YXJnZXRzIHdoaWNoIGRlcGVuZCBvbiBydW50aW1lIGl0ZW0gYXMgYSB1c2VyIHJlYWRhYmxlIHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgaXRlbWlkID0gc2VsZi5nZXRydW5faWQoaXRlbSkKKyAgICAgICAgZGVwZW5kZWVzID0gW10KKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5yZGVwaWRzOgorICAgICAgICAgICAgaWYgaXRlbWlkIGluIHNlbGYucmRlcGlkc1tmbmlkXToKKyAgICAgICAgICAgICAgICBkZXBlbmRlZXMuYXBwZW5kKHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIHJldHVybiBkZXBlbmRlZXMKKworICAgIGRlZiBnZXRfcmVhc29ucyhzZWxmLCBpdGVtLCBydW50aW1lPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgcmVhc29uKHMpIGZvciBhbiBpdGVtIG5vdCBiZWluZyBwcm92aWRlZCwgaWYgYW55CisgICAgICAgICIiIgorICAgICAgICByZWFzb25zID0gW10KKyAgICAgICAgaWYgc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgIGZvciBmbiBpbiBzZWxmLnNraXBsaXN0OgorICAgICAgICAgICAgICAgIHNraXBpdGVtID0gc2VsZi5za2lwbGlzdFtmbl0KKyAgICAgICAgICAgICAgICBpZiBza2lwaXRlbS5wbiA9PSBpdGVtOgorICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZCgiJXMgd2FzIHNraXBwZWQ6ICVzIiAlIChza2lwaXRlbS5wbiwgc2tpcGl0ZW0uc2tpcHJlYXNvbikpCisgICAgICAgICAgICAgICAgZWxpZiBydW50aW1lIGFuZCBpdGVtIGluIHNraXBpdGVtLnJwcm92aWRlczoKKyAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQoIiVzIFJQUk9WSURFUyAlcyBidXQgd2FzIHNraXBwZWQ6ICVzIiAlIChza2lwaXRlbS5wbiwgaXRlbSwgc2tpcGl0ZW0uc2tpcHJlYXNvbikpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgcnVudGltZSBhbmQgaXRlbSBpbiBza2lwaXRlbS5wcm92aWRlczoKKyAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQoIiVzIFBST1ZJREVTICVzIGJ1dCB3YXMgc2tpcHBlZDogJXMiICUgKHNraXBpdGVtLnBuLCBpdGVtLCBza2lwaXRlbS5za2lwcmVhc29uKSkKKyAgICAgICAgcmV0dXJuIHJlYXNvbnMKKworICAgIGRlZiBnZXRfY2xvc2VfbWF0Y2hlcyhzZWxmLCBpdGVtLCBwcm92aWRlcl9saXN0KToKKyAgICAgICAgaW1wb3J0IGRpZmZsaWIKKyAgICAgICAgaWYgc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgIHNraXBwZWQgPSBbXQorICAgICAgICAgICAgZm9yIGZuIGluIHNlbGYuc2tpcGxpc3Q6CisgICAgICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQoc2VsZi5za2lwbGlzdFtmbl0ucG4pCisgICAgICAgICAgICBmdWxsX2xpc3QgPSBwcm92aWRlcl9saXN0ICsgc2tpcHBlZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVsbF9saXN0ID0gcHJvdmlkZXJfbGlzdAorICAgICAgICByZXR1cm4gZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlcyhpdGVtLCBmdWxsX2xpc3QsIGN1dG9mZj0wLjcpCisKKyAgICBkZWYgYWRkX3Byb3ZpZGVyKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYWRkX3Byb3ZpZGVyX2ludGVybmFsKGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSkKKyAgICAgICAgZXhjZXB0IGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyOgorICAgICAgICAgICAgaWYgc2VsZi5hYm9ydDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfYnVpbGR0YXJnZXQoc2VsZi5nZXRidWlsZF9pZChpdGVtKSkKKworICAgICAgICBzZWxmLm1hcmtfZXh0ZXJuYWxfdGFyZ2V0KGl0ZW0pCisKKyAgICBkZWYgYWRkX3Byb3ZpZGVyX2ludGVybmFsKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSwgaXRlbSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIHByb3ZpZGVycyBvZiBpdGVtIHRvIHRoZSB0YXNrIGRhdGEKKyAgICAgICAgTWFyayBlbnRyaWVzIHdlcmUgc3BlY2lmaWNhbGx5IGFkZGVkIGV4dGVybmFsbHkgYXMgYWdhaW5zdCBkZXBlbmRlbmNpZXMKKyAgICAgICAgYWRkZWQgaW50ZXJuYWxseSBkdXJpbmcgZGVwZW5kZW5jeSByZXNvbHV0aW9uCisgICAgICAgICIiIgorCisgICAgICAgIGlmIHJlX21hdGNoX3N0cmluZ3MoaXRlbSwgZGF0YUNhY2hlLmlnbm9yZWRfZGVwZW5kZW5jaWVzKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBpdGVtIGluIGRhdGFDYWNoZS5wcm92aWRlcnM6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgZGVwZW5kZWVzPXNlbGYuZ2V0X2RlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9c2VsZi5nZXRfcmVhc29ucyhpdGVtKSwgY2xvc2VfbWF0Y2hlcz1zZWxmLmdldF9jbG9zZV9tYXRjaGVzKGl0ZW0sIGRhdGFDYWNoZS5wcm92aWRlcnMua2V5cygpKSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcihpdGVtKQorCisgICAgICAgIGlmIHNlbGYuaGF2ZV9idWlsZF90YXJnZXQoaXRlbSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBhbGxfcCA9IGRhdGFDYWNoZS5wcm92aWRlcnNbaXRlbV0KKworICAgICAgICBlbGlnaWJsZSwgZm91bmRVbmlxdWUgPSBiYi5wcm92aWRlcnMuZmlsdGVyUHJvdmlkZXJzKGFsbF9wLCBpdGVtLCBjZmdEYXRhLCBkYXRhQ2FjaGUpCisgICAgICAgIGVsaWdpYmxlID0gW3AgZm9yIHAgaW4gZWxpZ2libGUgaWYgbm90IHNlbGYuZ2V0Zm5faWQocCkgaW4gc2VsZi5mYWlsZWRfZm5pZHNdCisKKyAgICAgICAgaWYgbm90IGVsaWdpYmxlOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Ob1Byb3ZpZGVyKGl0ZW0sIGRlcGVuZGVlcz1zZWxmLmdldF9kZXBlbmRlZXNfc3RyKGl0ZW0pLCByZWFzb25zPVsiTm8gZWxpZ2libGUgUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKGl0ZW0pCisKKyAgICAgICAgaWYgbGVuKGVsaWdpYmxlKSA+IDEgYW5kIGZvdW5kVW5pcXVlID09IEZhbHNlOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlOgorICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0LmFwcGVuZChkYXRhQ2FjaGUucGtnX2ZuW2ZuXSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKGl0ZW0sIHByb3ZpZGVyc19saXN0KSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZS5hcHBlbmQoaXRlbSkKKworICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiYWRkaW5nICVzIHRvIHNhdGlzZnkgJXMiLCBmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX2J1aWxkX3RhcmdldChmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX3Rhc2tzKGZuLCBkYXRhQ2FjaGUpCisKKworICAgICAgICAgICAgI2l0ZW0gPSBkYXRhQ2FjaGUucGtnX2ZuW2ZuXQorCisgICAgZGVmIGFkZF9ycHJvdmlkZXIoc2VsZiwgY2ZnRGF0YSwgZGF0YUNhY2hlLCBpdGVtKToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCB0aGUgcnVudGltZSBwcm92aWRlcnMgb2YgaXRlbSB0byB0aGUgdGFzayBkYXRhCisgICAgICAgICh0YWtlcyBpdGVtIG5hbWVzIGZyb20gUkRFUEVORFMvUEFDS0FHRVMgbmFtZXNwYWNlKQorICAgICAgICAiIiIKKworICAgICAgICBpZiByZV9tYXRjaF9zdHJpbmdzKGl0ZW0sIGRhdGFDYWNoZS5pZ25vcmVkX2RlcGVuZGVuY2llcyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmhhdmVfcnVudGltZV90YXJnZXQoaXRlbSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBhbGxfcCA9IGJiLnByb3ZpZGVycy5nZXRSdW50aW1lUHJvdmlkZXJzKGRhdGFDYWNoZSwgaXRlbSkKKworICAgICAgICBpZiBub3QgYWxsX3A6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9c2VsZi5nZXRfcmVhc29ucyhpdGVtLCBUcnVlKSksIGNmZ0RhdGEpCisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIoaXRlbSkKKworICAgICAgICBlbGlnaWJsZSwgbnVtYmVyUHJlZmVycmVkID0gYmIucHJvdmlkZXJzLmZpbHRlclByb3ZpZGVyc1J1blRpbWUoYWxsX3AsIGl0ZW0sIGNmZ0RhdGEsIGRhdGFDYWNoZSkKKyAgICAgICAgZWxpZ2libGUgPSBbcCBmb3IgcCBpbiBlbGlnaWJsZSBpZiBub3Qgc2VsZi5nZXRmbl9pZChwKSBpbiBzZWxmLmZhaWxlZF9mbmlkc10KKworICAgICAgICBpZiBub3QgZWxpZ2libGU6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5vUHJvdmlkZXIoaXRlbSwgcnVudGltZT1UcnVlLCBkZXBlbmRlZXM9c2VsZi5nZXRfcmRlcGVuZGVlc19zdHIoaXRlbSksIHJlYXNvbnM9WyJObyBlbGlnaWJsZSBSUFJPVklERVJzIGV4aXN0IGZvciAnJXMnIiAlIGl0ZW1dKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1JQcm92aWRlcihpdGVtKQorCisgICAgICAgIGlmIGxlbihlbGlnaWJsZSkgPiAxIGFuZCBudW1iZXJQcmVmZXJyZWQgPT0gMDoKKyAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZToKKyAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGVsaWdpYmxlOgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcnNfbGlzdC5hcHBlbmQoZGF0YUNhY2hlLnBrZ19mbltmbl0pCisgICAgICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyhpdGVtLCBwcm92aWRlcnNfbGlzdCwgcnVudGltZT1UcnVlKSwgY2ZnRGF0YSkKKyAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfbXNnc19jYWNoZS5hcHBlbmQoaXRlbSkKKworICAgICAgICBpZiBudW1iZXJQcmVmZXJyZWQgPiAxOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlOgorICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0ID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyc19saXN0LmFwcGVuZChkYXRhQ2FjaGUucGtnX2ZuW2ZuXSkKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKGl0ZW0sIHByb3ZpZGVyc19saXN0LCBydW50aW1lPVRydWUpLCBjZmdEYXRhKQorICAgICAgICAgICAgc2VsZi5jb25zaWRlcl9tc2dzX2NhY2hlLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk11bHRpcGxlUlByb3ZpZGVyKGl0ZW0pCisKKyAgICAgICAgIyBydW4gdGhyb3VnaCB0aGUgbGlzdCB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IHdlIGNhbiBidWlsZAorICAgICAgICBmb3IgZm4gaW4gZWxpZ2libGU6CisgICAgICAgICAgICBmbmlkID0gc2VsZi5nZXRmbl9pZChmbikKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygyLCAiYWRkaW5nICclcycgdG8gc2F0aXNmeSBydW50aW1lICclcyciLCBmbiwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuYWRkX3J1bnRpbWVfdGFyZ2V0KGZuLCBpdGVtKQorICAgICAgICAgICAgc2VsZi5hZGRfdGFza3MoZm4sIGRhdGFDYWNoZSkKKworICAgIGRlZiBmYWlsX2ZuaWQoc2VsZiwgZm5pZCwgbWlzc2luZ19saXN0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFyayBhIGZpbGUgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKKyAgICAgICAgUmVtb3ZlIGFueSByZWZlcmVuY2VzIGZyb20gYnVpbGQgYW5kIHJ1bnRpbWUgcHJvdmlkZXIgbGlzdHMKKworICAgICAgICBtaXNzaW5nX2xpc3QsIEEgbGlzdCBvZiBtaXNzaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhpcyB0YXJnZXQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5mYWlsZWRfZm5pZHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IG1pc3NpbmdfbGlzdDoKKyAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFtdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiRmlsZSAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLiIsIHNlbGYuZm5faW5kZXhbZm5pZF0pCisgICAgICAgIHNlbGYuZmFpbGVkX2ZuaWRzLmFwcGVuZChmbmlkKQorICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgIGlmIGZuaWQgaW4gc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF06CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZF90YXJnZXRzW3RhcmdldF0ucmVtb3ZlKGZuaWQpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuYnVpbGRfdGFyZ2V0c1t0YXJnZXRdKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9idWlsZHRhcmdldCh0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLnJ1bl90YXJnZXRzOgorICAgICAgICAgICAgaWYgZm5pZCBpbiBzZWxmLnJ1bl90YXJnZXRzW3RhcmdldF06CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fdGFyZ2V0c1t0YXJnZXRdLnJlbW92ZShmbmlkKQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnJ1bl90YXJnZXRzW3RhcmdldF0pID09IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3J1bnRhcmdldCh0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKworICAgIGRlZiByZW1vdmVfYnVpbGR0YXJnZXQoc2VsZiwgdGFyZ2V0aWQsIG1pc3NpbmdfbGlzdD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE1hcmsgYSBidWlsZCB0YXJnZXQgYXMgZmFpbGVkICh1bmJ1aWxkYWJsZSkKKyAgICAgICAgVHJpZ2dlciByZW1vdmFsIG9mIGFueSBmaWxlcyB0aGF0IGhhdmUgdGhpcyBhcyBhIGRlcGVuZGVuY3kKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBtaXNzaW5nX2xpc3Q6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5idWlsZF9uYW1lc19pbmRleFt0YXJnZXRpZF1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5idWlsZF9uYW1lc19pbmRleFt0YXJnZXRpZF1dICsgbWlzc2luZ19saXN0CisgICAgICAgIGxvZ2dlci52ZXJib3NlKCJUYXJnZXQgJyVzJyBpcyB1bmJ1aWxkYWJsZSwgcmVtb3ZpbmcuLi5cbk1pc3Npbmcgb3IgdW5idWlsZGFibGUgZGVwZW5kZW5jeSBjaGFpbiB3YXM6ICVzIiwgc2VsZi5idWlsZF9uYW1lc19pbmRleFt0YXJnZXRpZF0sIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgc2VsZi5mYWlsZWRfZGVwcy5hcHBlbmQodGFyZ2V0aWQpCisgICAgICAgIGRlcGVuZGVlcyA9IHNlbGYuZ2V0X2RlcGVuZGVlcyh0YXJnZXRpZCkKKyAgICAgICAgZm9yIGZuaWQgaW4gZGVwZW5kZWVzOgorICAgICAgICAgICAgc2VsZi5mYWlsX2ZuaWQoZm5pZCwgbWlzc2luZ19saXN0KQorICAgICAgICBmb3IgdGFza2lkIGluIHhyYW5nZShsZW4oc2VsZi50YXNrc19pZGVwZW5kcykpOgorICAgICAgICAgICAgaWRlcGVuZHMgPSBzZWxmLnRhc2tzX2lkZXBlbmRzW3Rhc2tpZF0KKyAgICAgICAgICAgIGZvciAoaWRlcGVuZGlkLCBpZGVwZW5kdGFzaykgaW4gaWRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgaWRlcGVuZGlkID09IHRhcmdldGlkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChzZWxmLnRhc2tzX2ZuaWRbdGFza2lkXSwgbWlzc2luZ19saXN0KQorCisgICAgICAgIGlmIHNlbGYuYWJvcnQgYW5kIHRhcmdldGlkIGluIHNlbGYuZXh0ZXJuYWxfdGFyZ2V0czoKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuYnVpbGRfbmFtZXNfaW5kZXhbdGFyZ2V0aWRdCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlJlcXVpcmVkIGJ1aWxkIHRhcmdldCAnJXMnIGhhcyBubyBidWlsZGFibGUgcHJvdmlkZXJzLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCB0YXJnZXQsIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKHRhcmdldCkKKworICAgIGRlZiByZW1vdmVfcnVudGFyZ2V0KHNlbGYsIHRhcmdldGlkLCBtaXNzaW5nX2xpc3Q9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBNYXJrIGEgcnVuIHRhcmdldCBhcyBmYWlsZWQgKHVuYnVpbGRhYmxlKQorICAgICAgICBUcmlnZ2VyIHJlbW92YWwgb2YgYW55IGZpbGVzIHRoYXQgaGF2ZSB0aGlzIGFzIGEgZGVwZW5kZW5jeQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IG1pc3NpbmdfbGlzdDoKKyAgICAgICAgICAgIG1pc3NpbmdfbGlzdCA9IFtzZWxmLnJ1bl9uYW1lc19pbmRleFt0YXJnZXRpZF1dCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzaW5nX2xpc3QgPSBbc2VsZi5ydW5fbmFtZXNfaW5kZXhbdGFyZ2V0aWRdXSArIG1pc3NpbmdfbGlzdAorCisgICAgICAgIGxvZ2dlci5pbmZvKCJSdW50aW1lIHRhcmdldCAnJXMnIGlzIHVuYnVpbGRhYmxlLCByZW1vdmluZy4uLlxuTWlzc2luZyBvciB1bmJ1aWxkYWJsZSBkZXBlbmRlbmN5IGNoYWluIHdhczogJXMiLCBzZWxmLnJ1bl9uYW1lc19pbmRleFt0YXJnZXRpZF0sIG1pc3NpbmdfbGlzdCkKKyAgICAgICAgc2VsZi5mYWlsZWRfcmRlcHMuYXBwZW5kKHRhcmdldGlkKQorICAgICAgICBkZXBlbmRlZXMgPSBzZWxmLmdldF9yZGVwZW5kZWVzKHRhcmdldGlkKQorICAgICAgICBmb3IgZm5pZCBpbiBkZXBlbmRlZXM6CisgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChmbmlkLCBtaXNzaW5nX2xpc3QpCisgICAgICAgIGZvciB0YXNraWQgaW4geHJhbmdlKGxlbihzZWxmLnRhc2tzX2lyZGVwZW5kcykpOgorICAgICAgICAgICAgaXJkZXBlbmRzID0gc2VsZi50YXNrc19pcmRlcGVuZHNbdGFza2lkXQorICAgICAgICAgICAgZm9yIChpZGVwZW5kaWQsIGlkZXBlbmR0YXNrKSBpbiBpcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgaWRlcGVuZGlkID09IHRhcmdldGlkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxfZm5pZChzZWxmLnRhc2tzX2ZuaWRbdGFza2lkXSwgbWlzc2luZ19saXN0KQorCisgICAgZGVmIGFkZF91bnJlc29sdmVkKHNlbGYsIGNmZ0RhdGEsIGRhdGFDYWNoZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXNvbHZlIGFsbCB1bnJlc29sdmVkIGJ1aWxkIGFuZCBydW50aW1lIHRhcmdldHMKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5pbmZvKCJSZXNvbHZpbmcgYW55IG1pc3NpbmcgdGFzayBxdWV1ZSBkZXBlbmRlbmNpZXMiKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYWRkZWQgPSAwCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuZ2V0X3VucmVzb2x2ZWRfYnVpbGRfdGFyZ2V0cyhkYXRhQ2FjaGUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRfcHJvdmlkZXJfaW50ZXJuYWwoY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gYWRkZWQgKyAxCisgICAgICAgICAgICAgICAgZXhjZXB0IGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXRpZCA9IHNlbGYuZ2V0YnVpbGRfaWQodGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmFib3J0IGFuZCB0YXJnZXRpZCBpbiBzZWxmLmV4dGVybmFsX3RhcmdldHMgYW5kIG5vdCBzZWxmLmFsbG93aW5jb21wbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmFsbG93aW5jb21wbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX2J1aWxkdGFyZ2V0KHRhcmdldGlkKQorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmdldF91bnJlc29sdmVkX3J1bl90YXJnZXRzKGRhdGFDYWNoZSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZF9ycHJvdmlkZXIoY2ZnRGF0YSwgZGF0YUNhY2hlLCB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gYWRkZWQgKyAxCisgICAgICAgICAgICAgICAgZXhjZXB0IChiYi5wcm92aWRlcnMuTm9SUHJvdmlkZXIsIGJiLnByb3ZpZGVycy5NdWx0aXBsZVJQcm92aWRlcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3J1bnRhcmdldChzZWxmLmdldHJ1bl9pZCh0YXJnZXQpKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJSZXNvbHZlZCAiICsgc3RyKGFkZGVkKSArICIgZXh0cmEgZGVwZW5kZW5jaWVzIikKKyAgICAgICAgICAgIGlmIGFkZGVkID09IDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyBzZWxmLmR1bXBfZGF0YSgpCisKKyAgICBkZWYgZHVtcF9kYXRhKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRHVtcCBzb21lIGRlYnVnIGluZm9ybWF0aW9uIG9uIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgIiIiCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiYnVpbGRfbmFtZXM6IikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIsICIuam9pbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bl9uYW1lczoiKQorICAgICAgICBsb2dnZXIuZGVidWcoMywgIiwgIi5qb2luKHNlbGYucnVuX25hbWVzX2luZGV4KSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgImJ1aWxkX3RhcmdldHM6IikKKyAgICAgICAgZm9yIGJ1aWxkaWQgaW4geHJhbmdlKGxlbihzZWxmLmJ1aWxkX25hbWVzX2luZGV4KSk6CisgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmJ1aWxkX25hbWVzX2luZGV4W2J1aWxkaWRdCisgICAgICAgICAgICB0YXJnZXRzID0gIk5vbmUiCisgICAgICAgICAgICBpZiBidWlsZGlkIGluIHNlbGYuYnVpbGRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICB0YXJnZXRzID0gc2VsZi5idWlsZF90YXJnZXRzW2J1aWxkaWRdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAoJXMpJXM6ICVzIiwgYnVpbGRpZCwgdGFyZ2V0LCB0YXJnZXRzKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAicnVuX3RhcmdldHM6IikKKyAgICAgICAgZm9yIHJ1bmlkIGluIHhyYW5nZShsZW4oc2VsZi5ydW5fbmFtZXNfaW5kZXgpKToKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYucnVuX25hbWVzX2luZGV4W3J1bmlkXQorICAgICAgICAgICAgdGFyZ2V0cyA9ICJOb25lIgorICAgICAgICAgICAgaWYgcnVuaWQgaW4gc2VsZi5ydW5fdGFyZ2V0czoKKyAgICAgICAgICAgICAgICB0YXJnZXRzID0gc2VsZi5ydW5fdGFyZ2V0c1tydW5pZF0KKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklczogJXMiLCBydW5pZCwgdGFyZ2V0LCB0YXJnZXRzKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAidGFza3M6IikKKyAgICAgICAgZm9yIHRhc2sgaW4geHJhbmdlKGxlbihzZWxmLnRhc2tzX25hbWUpKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiICglcyklcyAtICVzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm5faW5kZXhbc2VsZi50YXNrc19mbmlkW3Rhc2tdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrc19uYW1lW3Rhc2tdLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tzX3RkZXBlbmRzW3Rhc2tdKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygzLCAiZGVwZW5kZW5jeSBpZHMgKHBlciBmbik6IikKKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5kZXBpZHM6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMywgIiAlcyAlczogJXMiLCBmbmlkLCBzZWxmLmZuX2luZGV4W2ZuaWRdLCBzZWxmLmRlcGlkc1tmbmlkXSkKKworICAgICAgICBsb2dnZXIuZGVidWcoMywgInJ1bnRpbWUgZGVwZW5kZW5jeSBpZHMgKHBlciBmbik6IikKKyAgICAgICAgZm9yIGZuaWQgaW4gc2VsZi5yZGVwaWRzOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDMsICIgJXMgJXM6ICVzIiwgZm5pZCwgc2VsZi5mbl9pbmRleFtmbmlkXSwgc2VsZi5yZGVwaWRzW2ZuaWRdKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdGVzdHMvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdGVzdHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3Rlc3RzL2NvZGVwYXJzZXIucHkgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb2RlcGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTRiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb2RlcGFyc2VyLnB5CkBAIC0wLDAgKzEsMzc1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3QgZm9yIGNvZGVwYXJzZXIucHkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIExhcnNvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5UZXN0Q29kZVBhcnNlcicpCisKKyMgYmIuZGF0YSByZWZlcmVuY2VzIGJiLnBhcnNlIGJ1dCBjYW4ndCBkaXJlY3RseSBpbXBvcnQgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KKyMgSGFjayBhcm91bmQgaXQgZm9yIG5vdyA6KCAKK2ltcG9ydCBiYi5wYXJzZQoraW1wb3J0IGJiLmRhdGEKKworY2xhc3MgUmVmZXJlbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorCisgICAgZGVmIHNldEVtcHR5VmFycyhzZWxmLCB2YXJsaXN0KToKKyAgICAgICAgZm9yIGsgaW4gdmFybGlzdDoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoaywgIiIpCisKKyAgICBkZWYgc2V0VmFsdWVzKHNlbGYsIHZhbHVlcyk6CisgICAgICAgIGZvciBrLCB2IGluIHZhbHVlcy5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcihrLCB2KQorCisgICAgZGVmIGFzc2VydFJlZmVyZW5jZXMoc2VsZiwgcmVmcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWZlcmVuY2VzLCByZWZzKQorCisgICAgZGVmIGFzc2VydEV4ZWNzKHNlbGYsIGV4ZWNzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmV4ZWNzLCBleGVjcykKKworY2xhc3MgVmFyaWFibGVSZWZlcmVuY2VUZXN0KFJlZmVyZW5jZVRlc3QpOgorCisgICAgZGVmIHBhcnNlRXhwcmVzc2lvbihzZWxmLCBleHApOgorICAgICAgICBwYXJzZWR2YXIgPSBzZWxmLmQuZXhwYW5kV2l0aFJlZnMoZXhwLCBOb25lKQorICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSBwYXJzZWR2YXIucmVmZXJlbmNlcworCisgICAgZGVmIHRlc3Rfc2ltcGxlX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJGT08iXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiR7Rk9PfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iXSkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbIkJBUiJdKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiQkFSIikKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiR7JHtGT099fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJGT08iLCAiQkFSIl0pKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJCQVIiXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiR7QGJiLmRhdGEuZ2V0VmFyKCdCQVInLCBkLCBUcnVlKSArICdmb28nfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJCQVIiXSkpCisKK2NsYXNzIFNoZWxsUmVmZXJlbmNlVGVzdChSZWZlcmVuY2VUZXN0KToKKworICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKKyAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKKyAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcigiUGFyc2VyVGVzdCIsIGxvZ2dlcikKKyAgICAgICAgcGFyc2VyLnBhcnNlX3NoZWxsKHBhcnNlZHZhci52YWx1ZSkKKworICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSBwYXJzZWR2YXIucmVmZXJlbmNlcworICAgICAgICBzZWxmLmV4ZWNzID0gcGFyc2VyLmV4ZWNzCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfaW5zaWRlX2Fzc2lnbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oJ2Zvbz1mb28iYmFyImJheicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoW10pKQorCisgICAgZGVmIHRlc3RfcXVvdGVzX2luc2lkZV9hcmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCdzZWQgcyMiYmFyIGJheiIjImFscGhhIGJldGEiI2cnKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbInNlZCJdKSkKKworICAgIGRlZiB0ZXN0X2FyZ19jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJzZWQgLWkgLWUgcyxmb28sYmFyLGcgXFxcbiAqLnBjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKyAgICBkZWYgdGVzdF9kb2xsYXJfaW5fcXVvdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbignc2VkIC1pIC1lICJmb28kIiAqLnBjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfaW5zaWRlX2FyZ19jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiYmluZGlyIiwgIkQiLCAibGliZGlyIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorc2VkIC1pIC1lIHMjIm1vY19sb2NhdGlvbj0uKiQiIyJtb2NfbG9jYXRpb249JHtiaW5kaXJ9L21vYzQiIyBcXAorLWUgcyMidWljX2xvY2F0aW9uPS4qJCIjInVpY19sb2NhdGlvbj0ke2JpbmRpcn0vdWljNCIjIFxcCiske0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJiaW5kaXIiLCAiRCIsICJsaWJkaXIiXSkpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25fc3Vic2hlbGxfZXhwYW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZm9vPSQoZWNobyBiYXIpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJlY2hvIl0pKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfdW5leHBhbmRlZChzZWxmKToKKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnMoWyJRVF9CQVNFX05BTUUiXSkKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oJ2VjaG8gIiR7UVRfQkFTRV9OQU1FfSInKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImVjaG8iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJRVF9CQVNFX05BTUUiXSkpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3ZhcmV4cF9zaW5nbGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigic2VkIC1pIC1lICdzOklQezpJJHs6ZycgJHBjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJzZWQiXSkpCisKKworICAgIGRlZiB0ZXN0X3VudGlsKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidW50aWwgZmFsc2U7IGRvIGVjaG8gdHJ1ZTsgZG9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiZmFsc2UiLCAiZWNobyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCgpKQorCisgICAgZGVmIHRlc3RfY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiIiCitjYXNlICRmb28gaW4KKyopCitiYXIKKzs7Citlc2FjCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiYmFyIl0pKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KCkpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25fZXhlYyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oImE9YiBjPSdmb28gYmFyJyBhbHBoYSAxIDIgMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsiYWxwaGEiXSkpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19maWxlKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbImZvbyJdKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZWNobyBmb28gPiR7Zm9vfS9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImVjaG8iXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJmb28iXSkpCisKKyAgICBkZWYgdGVzdF9oZXJlZG9jKHNlbGYpOgorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbInRoZXRhIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCIiIgorY2F0IDw8RU5ECithbHBoYQorYmV0YQorJHt0aGV0YX0KK0VORAorIiIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KFsidGhldGEiXSkpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF9mcm9tX2hlcmVkb2Moc2VsZik6CisgICAgICAgIHYgPSBbIkIiLCAiU0hBRE9XX01BSUxESVIiLCAiU0hBRE9XX01BSUxGSUxFIiwgIlNIQURPV19VVE1QRElSIiwgIlNIQURPV19MT0dESVIiLCAiYmluZGlyIl0KKyAgICAgICAgc2VsZi5zZXRFbXB0eVZhcnModikKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oIiIiCitjYXQgPDxFTkQgPiR7Qn0vY2FjaGVkcGF0aHMKK3NoYWRvd19jdl9tYWlsZGlyPSR7U0hBRE9XX01BSUxESVJ9CitzaGFkb3dfY3ZfbWFpbGZpbGU9JHtTSEFET1dfTUFJTEZJTEV9CitzaGFkb3dfY3ZfdXRtcGRpcj0ke1NIQURPV19VVE1QRElSfQorc2hhZG93X2N2X2xvZ2Rpcj0ke1NIQURPV19MT0dESVJ9CitzaGFkb3dfY3ZfcGFzc3dkX2Rpcj0ke2JpbmRpcn0KK0VORAorIiIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZmVyZW5jZXMoc2V0KHYpKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbImNhdCJdKSkKKworIyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX2NvbW1hbmRfZXhwYW5zaW9uKHNlbGYpOgorIyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmVmdHJhY2tlci5TaGVsbFN5bnRheEVycm9yLCByZWZ0cmFja2VyLmV4ZWNzLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgYmJ2YWx1ZS5zaHBhcnNlKCJjcCBmb29gIiwgc2VsZi5kKSwgc2VsZi5kKQorCisjICAgIGRlZiB0ZXN0X3JvZ3VlX2RvbGxhcnNpZ24oc2VsZik6CisjICAgICAgICBzZWxmLnNldFZhbHVlcyh7IkQiIDogIi90bXAifSkKKyMgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJpbnN0YWxsIC1kICR7RH0kIikKKyMgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoWyJEIl0pKQorIyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJpbnN0YWxsIl0pKQorCisKK2NsYXNzIFB5dGhvblJlZmVyZW5jZVRlc3QoUmVmZXJlbmNlVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIGlmIGhhc2F0dHIoYmIudXRpbHMsICJfY29udGV4dCIpOgorICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gYmIudXRpbHMuX2NvbnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gX19idWlsdGluX18uX19kaWN0X18KKworICAgIGRlZiBwYXJzZUV4cHJlc3Npb24oc2VsZiwgZXhwKToKKyAgICAgICAgcGFyc2VkdmFyID0gc2VsZi5kLmV4cGFuZFdpdGhSZWZzKGV4cCwgTm9uZSkKKyAgICAgICAgcGFyc2VyID0gYmIuY29kZXBhcnNlci5QeXRob25QYXJzZXIoIlBhcnNlclRlc3QiLCBsb2dnZXIpCisgICAgICAgIHBhcnNlci5wYXJzZV9weXRob24ocGFyc2VkdmFyLnZhbHVlKQorCisgICAgICAgIHNlbGYucmVmZXJlbmNlcyA9IHBhcnNlZHZhci5yZWZlcmVuY2VzIHwgcGFyc2VyLnJlZmVyZW5jZXMKKyAgICAgICAgc2VsZi5leGVjcyA9IHBhcnNlci5leGVjcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpbmRlbnQodmFsdWUpOgorICAgICAgICAiIiJQeXRob24gU25pcHBldHMgaGF2ZSB0byBiZSBpbmRlbnRlZCwgcHl0aG9uIHZhbHVlcyBkb24ndCBoYXZlIHRvCitiZS4gVGhlc2UgdW5pdCB0ZXN0cyBhcmUgdGVzdGluZyBzbmlwcGV0cy4iIiIKKyAgICAgICAgcmV0dXJuICIgIiArIHZhbHVlCisKKyAgICBkZWYgdGVzdF9nZXR2YXJfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiYmIuZGF0YS5nZXRWYXIoJ2ZvbycsIGQsIFRydWUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbImZvbyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoKSkKKworICAgIGRlZiB0ZXN0X2dldHZhcl9jb21wdXRlZF9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJiYi5kYXRhLmdldFZhcignZicgKyAnbycgKyAnbycsIGQsIFRydWUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldCgpKQorCisgICAgZGVmIHRlc3RfZ2V0dmFyX2V4ZWNfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigiZXZhbCgnYmIuZGF0YS5nZXRWYXIoXCJmb29cIiwgZCwgVHJ1ZSknKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJldmFsIl0pKQorCisgICAgZGVmIHRlc3RfdmFyX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5jb250ZXh0WyJmb28iXSA9IGxhbWJkYSB4OiB4CisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKFsiRk9PIl0pCisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJmb28oJyR7Rk9PfScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbIkZPTyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJmb28iXSkpCisgICAgICAgIGRlbCBzZWxmLmNvbnRleHRbImZvbyJdCisKKyAgICBkZWYgdGVzdF92YXJfZXhlYyhzZWxmKToKKyAgICAgICAgZm9yIGV0eXBlIGluICgiZnVuYyIsICJ0YXNrIik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJkb19zb21ldGhpbmciLCAiZWNobyAnaGkgbW9tISAke0ZPT30nIikKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJkb19zb21ldGhpbmciLCBldHlwZSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3NvbWV0aGluZycsIGQpIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVmZXJlbmNlcyhzZXQoW10pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJkb19zb21ldGhpbmciXSkpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY29udGV4dFsidGVzdGZ1bmMiXSA9IGxhbWJkYSBtc2c6IGJiLm1zZy5ub3RlKDEsIE5vbmUsIG1zZykKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIkhlbGxvLCBXb3JsZCEiKQorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidGVzdGZ1bmMoJyR7Rk9PfScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWZlcmVuY2VzKHNldChbIkZPTyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJ0ZXN0ZnVuYyJdKSkKKyAgICAgICAgZGVsIHNlbGYuY29udGV4dFsidGVzdGZ1bmMiXQorCisgICAgZGVmIHRlc3RfcXVhbGlmaWVkX2Z1bmN0aW9uX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZUV4cHJlc3Npb24oInRpbWUudGltZSgpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFeGVjcyhzZXQoWyJ0aW1lLnRpbWUiXSkpCisKKyAgICBkZWYgdGVzdF9xdWFsaWZpZWRfZnVuY3Rpb25fcmVmZXJlbmNlXzIoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VFeHByZXNzaW9uKCJvcy5wYXRoLmRpcm5hbWUoJy9mb28vYmFyJykiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbIm9zLnBhdGguZGlybmFtZSJdKSkKKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9mdW5jdGlvbl9yZWZlcmVuY2VfbmVzdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhlY3Moc2V0KFsidGltZS5zdHJmdGltZSIsICJ0aW1lLmdtdGltZSJdKSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX3JlZmVyZW5jZV9jaGFpbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnRleHRbInRlc3RnZXQiXSA9IGxhbWJkYTogIlx0c3RyaXAgbWUgIgorICAgICAgICBzZWxmLnBhcnNlRXhwcmVzc2lvbigidGVzdGdldCgpLnN0cmlwKCkiKQorICAgICAgICBzZWxmLmFzc2VydEV4ZWNzKHNldChbInRlc3RnZXQiXSkpCisgICAgICAgIGRlbCBzZWxmLmNvbnRleHRbInRlc3RnZXQiXQorCisKK2NsYXNzIERlcGVuZGVuY3lSZWZlcmVuY2VUZXN0KFJlZmVyZW5jZVRlc3QpOgorCisgICAgcHlkYXRhID0gIiIiCitiYi5kYXRhLmdldFZhcignc29tZXZhcicsIGQsIFRydWUpCitkZWYgdGVzdChkKToKKyAgICBmb28gPSAnYmFyICVzJyAlICdmb28nCitkZWYgdGVzdDIoZCk6CisgICAgZC5nZXRWYXIoZm9vLCBUcnVlKQorICAgIGQuZ2V0VmFyKCdiYXInLCBGYWxzZSkKKyAgICB0ZXN0MihkKQorCitkZWYgYSgpOgorICAgIFwiXCJcInNvbWUKKyAgICBzdHVmZgorICAgIFwiXCJcIgorICAgIHJldHVybiAiaGVoIgorCit0ZXN0KGQpCisKK2JiLmRhdGEuZXhwYW5kKGJiLmRhdGEuZ2V0VmFyKCJzb21ldGhpbmciLCBGYWxzZSwgZCksIGQpCitiYi5kYXRhLmV4cGFuZCgiJHtpbmV4cGFuZH0gc29tZXRoaW5nZWxzZSIsIGQpCitiYi5kYXRhLmdldFZhcihhKCksIGQsIEZhbHNlKQorIiIiCisKKyAgICBkZWYgdGVzdF9weXRob24oc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsIHNlbGYucHlkYXRhKQorICAgICAgICBzZWxmLnNldEVtcHR5VmFycyhbImluZXhwYW5kIiwgImEiLCAidGVzdDIiLCAidGVzdCJdKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZ3MoIkZPTyIsIHsiZnVuYyI6IFRydWUsICJweXRob24iOiBUcnVlfSkKKworICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJzb21ldmFyIiwgImJhciIsICJzb21ldGhpbmciLCAiaW5leHBhbmQiLCAidGVzdCIsICJ0ZXN0MiIsICJhIl0pKQorCisKKyAgICBzaGVsbGRhdGEgPSAiIiIKK2ZvbyAoKSB7CitiYXIKK30KK3sKK2VjaG8gYmF6CiskKGhlaCkKK2V2YWwgYG1vb2AKK30KK2E9YgorYz1kCisoCit0cnVlICYmIGZhbHNlCit0ZXN0IC1mIGZvbwordGVzdHZhbD1zb21ldGhpbmcKKyR0ZXN0dmFsCispIHx8IGFpZWUKKyEgaW52ZXJ0ZWQKK2VjaG8gJHtzb21ldmFyfQorCitjYXNlIGZvbyBpbgorYmFyKQorZWNobyBiYXIKKzs7CitiYXopCitlY2hvIGJhegorOzsKK2ZvbyopCitlY2hvIGZvbworOzsKK2VzYWMKKyIiIgorCisgICAgZGVmIHRlc3Rfc2hlbGwoc2VsZik6CisgICAgICAgIGV4ZWNzID0gWyJiYXIiLCAiZWNobyIsICJoZWgiLCAibW9vIiwgInRydWUiLCAiYWllZSJdCisgICAgICAgIHNlbGYuZC5zZXRWYXIoInNvbWV2YXIiLCAiaGVoIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiaW52ZXJ0ZWQiLCAiZWNobyBpbnZlcnRlZC4uLiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJpbnZlcnRlZCIsICJmdW5jIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgc2VsZi5zaGVsbGRhdGEpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFncygiRk9PIiwgeyJmdW5jIjogVHJ1ZX0pCisgICAgICAgIHNlbGYuc2V0RW1wdHlWYXJzKGV4ZWNzKQorCisgICAgICAgIGRlcHMsIHZhbHVlcyA9IGJiLmRhdGEuYnVpbGRfZGVwZW5kZW5jaWVzKCJGT08iLCBzZXQoc2VsZi5kLmtleXMoKSksIHNldCgpLCBzZXQoKSwgc2VsZi5kKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbInNvbWV2YXIiLCAiaW52ZXJ0ZWQiXSArIGV4ZWNzKSkKKworCisgICAgZGVmIHRlc3RfdmFyZGVwcyhzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigib2VfbGliaW5zdGFsbCIsICJlY2hvIHRlc3QiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiZm9vPW9lX2xpYmluc3RhbGw7IGV2YWwgJGZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJGT08iLCAidmFyZGVwcyIsICJvZV9saWJpbnN0YWxsIikKKworICAgICAgICBkZXBzLCB2YWx1ZXMgPSBiYi5kYXRhLmJ1aWxkX2RlcGVuZGVuY2llcygiRk9PIiwgc2V0KHNlbGYuZC5rZXlzKCkpLCBzZXQoKSwgc2V0KCksIHNlbGYuZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXBzLCBzZXQoWyJvZV9saWJpbnN0YWxsIl0pKQorCisgICAgZGVmIHRlc3RfdmFyZGVwc19leHBhbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbz1vZV9saWJpbnN0YWxsOyBldmFsICRmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygiRk9PIiwgInZhcmRlcHMiLCAiJHtAJ29lX2xpYmluc3RhbGwnfSIpCisKKyAgICAgICAgZGVwcywgdmFsdWVzID0gYmIuZGF0YS5idWlsZF9kZXBlbmRlbmNpZXMoIkZPTyIsIHNldChzZWxmLmQua2V5cygpKSwgc2V0KCksIHNldCgpLCBzZWxmLmQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVwcywgc2V0KFsib2VfbGliaW5zdGFsbCJdKSkKKworICAgICNDdXJyZW50bHkgbm8gd2lsZGNhcmQgc3VwcG9ydAorICAgICNkZWYgdGVzdF92YXJkZXBzX3dpbGRjYXJkcyhzZWxmKToKKyAgICAjICAgIHNlbGYuZC5zZXRWYXIoIm9lX2xpYmluc3RhbGwiLCAiZWNobyB0ZXN0IikKKyAgICAjICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb289b2VfbGliaW5zdGFsbDsgZXZhbCAkZm9vIikKKyAgICAjICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJGT08iLCAidmFyZGVwcyIsICJvZV8qIikKKyAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlcHMsIHNldChbIm9lX2xpYmluc3RhbGwiXSkpCisKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5IGIvYml0YmFrZS9saWIvYmIvdGVzdHMvY293LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YzU4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9jb3cucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVGVzdHMgZm9yIENvcHktb24tV3JpdGUgKGNvdy5weSkKKyMKKyMgQ29weXJpZ2h0IDIwMDYgSG9sZ2VyIEZyZXl0aGVyIDxmcmV5dGhlckBoYW5kaGVsZHMub3JnPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKKworY2xhc3MgQ09XVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgY2FzZSBmb3IgdGhlIENPVyBtb2R1bGUgZnJvbSBtaXRocm8KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0R2V0U2V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBhbmQgc2V0CisgICAgICAgICIiIgorICAgICAgICBmcm9tIGJiLkNPVyBpbXBvcnQgQ09XRGljdEJhc2UKKyAgICAgICAgYSA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBhLmhhc19rZXkoJ2EnKSkKKworICAgICAgICBhWydhJ10gPSAnYScKKyAgICAgICAgYVsnYiddID0gJ2InCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGEuaGFzX2tleSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBhLmhhc19rZXkoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2EnLCBhWydhJ10gKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnYicsIGFbJ2InXSApCisKKyAgICBkZWYgdGVzdENvcHlDb3B5KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGUgY29weSBvZiBjb3BpZXMKKyAgICAgICAgIiIiCisKKyAgICAgICAgZnJvbSBiYi5DT1cgaW1wb3J0IENPV0RpY3RCYXNlCisKKyAgICAgICAgIyBjcmVhdGUgdHdvIENPVyBkaWN0ICdpbnN0YW5jZXMnCisgICAgICAgIGIgPSBDT1dEaWN0QmFzZS5jb3B5KCkKKyAgICAgICAgYyA9IENPV0RpY3RCYXNlLmNvcHkoKQorCisgICAgICAgICMgYXNzaWduIHNvbWUga2V5cyB0byBvbmUgaW5zdGFuY2UsIHNvbWUga2V5cyB0byBhbm90aGVyCisgICAgICAgIGJbJ2EnXSA9IDEwCisgICAgICAgIGJbJ2MnXSA9IDIwCisgICAgICAgIGNbJ2EnXSA9IDMwCisKKyAgICAgICAgIyB0ZXN0IHNlcGFyYXRpb24gb2YgdGhlIHR3byBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzMCwgY1snYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMCwgYlsnYSddKQorCisgICAgICAgICMgdGVzdCBjb3B5CisgICAgICAgIGJfMiA9IGIuY29weSgpCisgICAgICAgIGNfMiA9IGMuY29weSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGNfMi5oYXNfa2V5KCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwLCBiXzJbJ2EnXSkKKworICAgICAgICBiXzJbJ2QnXSA9IDQwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzIuaGFzX2tleSgnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MCwgYl8yWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnZCcpKQorCisgICAgICAgIGNfMlsnZCddID0gMzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgY18yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgYl8yLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMzAsIGNfMlsnZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0MCwgYl8yWydkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBiLmhhc19rZXkoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGMuaGFzX2tleSgnZCcpKQorCisgICAgICAgICMgdGVzdCBjb3B5IG9mIHRoZSBjb3B5CisgICAgICAgIGNfMyA9IGNfMi5jb3B5KCkKKyAgICAgICAgYl8zID0gYl8yLmNvcHkoKQorICAgICAgICBiXzNfMiA9IGJfMi5jb3B5KCkKKworICAgICAgICBjXzNbJ2UnXSA9IDQ3MTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY18zWydlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8zLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfM18yLmhhc19rZXkoJ2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJfMi5oYXNfa2V5KCdlJykpCisKKyAgICAgICAgYl8zWydlJ10gPSAndmllbCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3ZpZWwnLCBiXzNbJ2UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY18zWydlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEZhbHNlLCBjXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhUcnVlLCBiXzMuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8zXzIuaGFzX2tleSgnZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGYWxzZSwgYl8yLmhhc19rZXkoJ2UnKSkKKworICAgIGRlZiB0ZXN0Q293KHNlbGYpOgorICAgICAgICBmcm9tIGJiLkNPVyBpbXBvcnQgQ09XRGljdEJhc2UKKyAgICAgICAgYyA9IENPV0RpY3RCYXNlLmNvcHkoKQorICAgICAgICBjWycxMjMnXSA9IDEwMjcKKyAgICAgICAgY1snb3RoZXInXSA9IDQ3MTEKKyAgICAgICAgY1snZCddID0geyAnYWJjJyA6IDEwLCAnYmNkJyA6IDIwIH0KKworICAgICAgICBjb3B5ID0gYy5jb3B5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDI3LCBjWycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMSwgY1snb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeydhYmMnOjEwLCAnYmNkJzoyMH0sIGNbJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAyNywgY29weVsnMTIzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQ3MTEsIGNvcHlbJ290aGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsnYWJjJzoxMCwgJ2JjZCc6MjB9LCBjb3B5WydkJ10pCisKKyAgICAgICAgIyBjb3cgaXQgbm93CisgICAgICAgIGNvcHlbJzEyMyddID0gMTAyOAorICAgICAgICBjb3B5WydvdGhlciddID0gNDcxMgorICAgICAgICBjb3B5WydkJ11bJ2FiYyddID0gMjAKKworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEwMjcsIGNbJzEyMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0NzExLCBjWydvdGhlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7J2FiYyc6MTAsICdiY2QnOjIwfSwgY1snZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxMDI4LCBjb3B5WycxMjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDcxMiwgY29weVsnb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeydhYmMnOjIwLCAnYmNkJzoyMH0sIGNvcHlbJ2QnXSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3Rlc3RzL2RhdGEucHkgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWFiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9kYXRhLnB5CkBAIC0wLDAgKzEsNDQxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB0aGUgRGF0YSBTdG9yZSAoZGF0YS5weS9kYXRhX3NtYXJ0LnB5KQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgTGFyc29uCisjIENvcHlyaWdodCAoQykgMjAxMiBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgYmIKK2ltcG9ydCBiYi5kYXRhCitpbXBvcnQgYmIucGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2NsYXNzIExvZ1JlY29yZCgpOgorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGxvZ3MgPSBbXQorICAgICAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQorICAgICAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGxvZ3MKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlIikKKyAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5oYW5kbGVyKQorICAgICAgICByZXR1cm4KKworZGVmIGxvZ0NvbnRhaW5zKGl0ZW0sIGxvZ3MpOgorICAgIGZvciBsIGluIGxvZ3M6CisgICAgICAgIG0gPSBsLmdldE1lc3NhZ2UoKQorICAgICAgICBpZiBpdGVtIGluIG06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBEYXRhRXhwYW5zaW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmRbImZvbyJdID0gInZhbHVlX29mX2ZvbyIKKyAgICAgICAgc2VsZi5kWyJiYXIiXSA9ICJ2YWx1ZV9vZl9iYXIiCisgICAgICAgIHNlbGYuZFsidmFsdWVfb2ZfZm9vIl0gPSAidmFsdWVfb2ZfJ3ZhbHVlX29mX2ZvbyciCisKKyAgICBkZWYgdGVzdF9vbmVfdmFyKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke2Zvb30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfZm9vIikKKworICAgIGRlZiB0ZXN0X2luZGlyZWN0X29uZV92YXIoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7JHtmb299fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJ2YWx1ZV9vZl8ndmFsdWVfb2ZfZm9vJyIpCisKKyAgICBkZWYgdGVzdF9pbmRpcmVjdF9hbmRfYW5vdGhlcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHske2Zvb319ICR7YmFyfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJ2YWx1ZV9vZl8ndmFsdWVfb2ZfZm9vJyB2YWx1ZV9vZl9iYXIiKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3NuaXBwZXQoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QDUqMTJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjYwIikKKworICAgIGRlZiB0ZXN0X2V4cGFuZF9pbl9weXRob25fc25pcHBldChzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAJ2JvbyAnICsgJyR7Zm9vfSd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgImJvbyB2YWx1ZV9vZl9mb28iKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3NuaXBwZXRfZ2V0dmFyKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0BkLmdldFZhcignZm9vJywgVHJ1ZSkgKyAnICR7YmFyfSd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInZhbHVlX29mX2ZvbyB2YWx1ZV9vZl9iYXIiKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3NuaXBwZXRfc3ludGF4X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtAZm9vID0gNX0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X3J1bnRpbWVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICIke0BpbnQoJ3Rlc3QnKX0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zbmlwcGV0X2Vycm9yX3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28gdmFsdWUgJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgImJhciB2YWx1ZSAke0BpbnQoJ3Rlc3QnKX0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlX2NvbnRhaW5pbmdfdmFsdWUoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7QGQuZ2V0VmFyKCdmb28nLCBUcnVlKSArICcgJHtiYXJ9J30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAidmFsdWVfb2ZfZm9vIHZhbHVlX29mX2JhciIpCisKKyAgICBkZWYgdGVzdF9yZWZlcmVuY2VfdW5kZWZpbmVkX3ZhcihzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHt1bmRlZmluZWR2YXJ9IG1laCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIke3VuZGVmaW5lZHZhcn0gbWVoIikKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJiYXIgdmFsdWUiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtCQVJ9IGZvbyAke0JBUn0iKQorICAgICAgICB2YWwgPSBzZWxmLmQuZ2V0VmFyKCJGT08iLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih2YWwpLCAiYmFyIHZhbHVlIGZvbyBiYXIgdmFsdWUiKQorCisgICAgZGVmIHRlc3RfZGlyZWN0X3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgIiR7Rk9PfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmRhdGFfc21hcnQuRXhwYW5zaW9uRXJyb3IsIHNlbGYuZC5nZXRWYXIsICJGT08iLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaW5kaXJlY3RfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAiJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgIiR7QkFafSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBWiIsICIke0ZPT30iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yLCBzZWxmLmQuZ2V0VmFyLCAiRk9PIiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICIke0JBUn0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiJHske0AnRk9PJ319IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvciwgc2VsZi5kLmdldFZhciwgIkZPTyIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3ZhcmV4cF9zaW5nbGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJGT08iLCAic2VkIC1pIC1lICdzOklQezpJJHs6ZycgJHBjIikKKyAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcigiRk9PIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgInNlZCAtaSAtZSAnczpJUHs6SSR7OmcnICRwYyIpCisKKyAgICBkZWYgdGVzdF9ub25zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCA1KQorICAgICAgICB2YWwgPSBzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjUiKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmQucmVuYW1lVmFyKCJmb28iLCAibmV3Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJuZXdmb28iLCBGYWxzZSksICJ2YWx1ZV9vZl9mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2RlbGV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuZGVsVmFyKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIGtleXMgPSBzZWxmLmQua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWyd2YWx1ZV9vZl9mb28nLCAnZm9vJywgJ2JhciddKQorCisgICAgZGVmIHRlc3Rfa2V5c19kZWxldGlvbihzZWxmKToKKyAgICAgICAgbmV3ZCA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmQpCisgICAgICAgIG5ld2QuZGVsVmFyKCJiYXIiKQorICAgICAgICBrZXlzID0gbmV3ZC5rZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBbJ3ZhbHVlX29mX2ZvbycsICdmb28nXSkKKworY2xhc3MgVGVzdE5lc3RlZEV4cGFuc2lvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kWyJmb28iXSA9ICJmb28iCisgICAgICAgIHNlbGYuZFsiYmFyIl0gPSAiYmFyIgorICAgICAgICBzZWxmLmRbInZhbHVlX29mX2Zvb2JhciJdID0gIjE4NyIKKworICAgIGRlZiB0ZXN0X3JlZnMoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7dmFsdWVfb2ZfJHtmb299JHtiYXJ9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIxODciKQorCisgICAgI2RlZiB0ZXN0X3B5dGhvbl9yZWZzKHNlbGYpOgorICAgICMgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHtAJHtAM30qKjIgKyAke0A0fSoqMn0iKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjI1IikKKworICAgIGRlZiB0ZXN0X3JlZl9pbl9weXRob25fcmVmKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0AnJHtmb299JyArICdiYXInfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJmb29iYXIiKQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3JlZl9pbl9yZWYoc2VsZik6CisgICAgICAgIHZhbCA9IHNlbGYuZC5leHBhbmQoIiR7JHtAJ2YnKydvJysnbyd9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJmb28iKQorCisgICAgZGVmIHRlc3RfZGVlcF9uZXN0aW5nKHNlbGYpOgorICAgICAgICBkZXB0aCA9IDEwMAorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyIgKiBkZXB0aCArICJmb28iICsgIn0iICogZGVwdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICJmb28iKQorCisgICAgI2RlZiB0ZXN0X2RlZXBfcHl0aG9uX25lc3Rpbmcoc2VsZik6CisgICAgIyAgICBkZXB0aCA9IDUwCisgICAgIyAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIke0AiICogZGVwdGggKyAiMSIgKyAiKzF9IiAqIGRlcHRoKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgc3RyKGRlcHRoICsgMSkpCisKKyAgICBkZWYgdGVzdF9taXhlZChzZWxmKToKKyAgICAgICAgdmFsID0gc2VsZi5kLmV4cGFuZCgiJHt2YWx1ZV9vZl8ke0AoJyR7Zm9vfScrJ2JhcicpWzA6M119JHske0AnQkFSJy5sb3dlcigpfX19IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmFsKSwgIjE4NyIpCisKKyAgICBkZWYgdGVzdF9ydW50aW1lKHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLmQuZXhwYW5kKCIkeyR7QCd2YWx1ZV9vZicgKyAnX2YnKydvJysnbycrJ2InKydhJysncid9fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZhbCksICIxODciKQorCitjbGFzcyBUZXN0TWVtb2l6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWVtb2l6ZWQoc2VsZik6CisgICAgICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkLnNldFZhcigiRk9PIiwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldFZhcigiRk9PIiwgRmFsc2UpIGlzIGQuZ2V0VmFyKCJGT08iLCBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9ub3RfbWVtb2l6ZWQoc2VsZik6CisgICAgICAgIGQxID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgZDIgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkMS5zZXRWYXIoIkZPTyIsICJiYXIiKQorICAgICAgICBkMi5zZXRWYXIoIkZPTyIsICJiYXIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLmdldFZhcigiRk9PIiwgRmFsc2UpIGlzIG5vdCBkMi5nZXRWYXIoIkZPTyIsIEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X2NoYW5nZWRfYWZ0ZXJfbWVtb2l6ZWQoc2VsZik6CisgICAgICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkLnNldFZhcigiZm9vIiwgInZhbHVlIG9mIGZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQuZ2V0VmFyKCJmb28iLCBGYWxzZSkpLCAidmFsdWUgb2YgZm9vIikKKyAgICAgICAgZC5zZXRWYXIoImZvbyIsICJzZWNvbmQgdmFsdWUgb2YgZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZC5nZXRWYXIoImZvbyIsIEZhbHNlKSksICJzZWNvbmQgdmFsdWUgb2YgZm9vIikKKworICAgIGRlZiB0ZXN0X3NhbWVfdmFsdWUoc2VsZik6CisgICAgICAgIGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBkLnNldFZhcigiZm9vIiwgInZhbHVlIG9mIikKKyAgICAgICAgZC5zZXRWYXIoImJhciIsICJ2YWx1ZSBvZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoImZvbyIsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcigiYmFyIiwgRmFsc2UpKQorCitjbGFzcyBUZXN0Q29uY2F0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZPTyIsICJmb28iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUwiLCAidmFsIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiQkFSIiwgImJhciIpCisKKyAgICBkZWYgdGVzdF9wcmVwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5wcmVwZW5kVmFyKCJURVNUIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgImZvbzp2YWwiKQorCisgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiR7VkFMfSIpCisgICAgICAgIHNlbGYuZC5hcHBlbmRWYXIoIlRFU1QiLCAiOiR7QkFSfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidmFsOmJhciIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnByZXBlbmRWYXIoIlRFU1QiLCAiJHtGT099OiIpCisgICAgICAgIHNlbGYuZC5hcHBlbmRWYXIoIlRFU1QiLCAiOnZhbDIiKQorICAgICAgICBzZWxmLmQuYXBwZW5kVmFyKCJURVNUIiwgIjoke0JBUn0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgImZvbzp2YWw6dmFsMjpiYXIiKQorCitjbGFzcyBUZXN0Q29uY2F0T3ZlcnJpZGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlZBTCIsICJ2YWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiYmFyIikKKworICAgIGRlZiB0ZXN0X3ByZXBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9wcmVwZW5kIiwgIiR7Rk9PfToiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0iKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6JHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidmFsOmJhciIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9wcmVwZW5kIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6dmFsMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYXBwZW5kIiwgIjoke0JBUn0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286dmFsOnZhbDI6YmFyIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZF91bnNldChzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9wcmVwZW5kIiwgIiR7Rk9PfToiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2FwcGVuZCIsICI6dmFsMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfYXBwZW5kIiwgIjoke0JBUn0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJmb286OnZhbDI6YmFyIikKKworICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVCIsICIke1ZBTH0gJHtCQVJ9IikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9yZW1vdmUiLCAidmFsIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiYmFyIikKKworICAgIGRlZiB0ZXN0X2RvdWJsZXJlZl9yZW1vdmUoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtWQUx9ICR7QkFSfSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgInZhbCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfVEVTVCIsICIke1RFU1R9ICR7VEVTVH0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUX1RFU1QiLCBUcnVlKSwgImJhciBiYXIiKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcmVtb3ZlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgInZhbCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgIiIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwYW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiWiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAiJHtCQVJ9L1ggWSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfcmVtb3ZlIiwgIiR7QkFSfS9YIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiWSIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZXhwYW5zaW9uX2l0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUIiwgIkEgQiBDIEQiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQVIiLCAiQiBEIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9yZW1vdmUiLCAiJHtCQVJ9IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAiQSBDIikKKworY2xhc3MgVGVzdE92ZXJyaWRlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJPVkVSUklERVMiLCAiZm9vOmJhcjpsb2NhbCIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QiLCAidGVzdHZhbHVlIikKKworICAgIGRlZiB0ZXN0X25vX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyKCJURVNUIiwgVHJ1ZSksICJ0ZXN0dmFsdWUiKQorCisgICAgZGVmIHRlc3Rfb25lX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlMiIpCisKKyAgICBkZWYgdGVzdF9vbmVfb3ZlcnJpZGVfdW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QyX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVDIiLCBUcnVlKSwgInRlc3R2YWx1ZTIiKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5kLmtleXMoKSwgWydURVNUJywgJ1RFU1QyJywgJ09WRVJSSURFUycsICdURVNUMl9iYXInXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9sb2NhbCIsICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9mb28iLCAidGVzdHZhbHVlNCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2VsZi5kLmtleXMoKSwgWydURVNUJywgJ1RFU1RfZm9vJywgJ09WRVJSSURFUycsICdURVNUX2JhcicsICdURVNUX2xvY2FsJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jb21iaW5lZF9vdmVycmlkZXMoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfbG9jYWxfZm9vX2JhciIsICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlMyIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9vdmVycmlkZXNfdW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1QyX2xvY2FsX2Zvb19iYXIiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QyIiwgVHJ1ZSksICJ0ZXN0dmFsdWUzIikKKworICAgIGRlZiB0ZXN0X2tleWV4cGFuc2lvbl9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiTE9DQUwiLCAibG9jYWwiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJURVNUX2JhciIsICJ0ZXN0dmFsdWUyIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF8ke0xPQ0FMfSIsICJ0ZXN0dmFsdWUzIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9mb28iLCAidGVzdHZhbHVlNCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIlRFU1QiLCBUcnVlKSwgInRlc3R2YWx1ZTMiKQorCisgICAgZGVmIHRlc3RfcmVuYW1lX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzX2NsYXNzLXRhcmdldCIsICJhIikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiT1ZFUlJJREVTIiwgImNsYXNzLXRhcmdldCIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEoc2VsZi5kKQorICAgICAgICBzZWxmLmQucmVuYW1lVmFyKCJBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzIiwgIkFMVEVSTkFUSVZFX2xpYjMyLW5jdXJzZXMtdG9vbHMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXIoIkFMVEVSTkFUSVZFX2xpYjMyLW5jdXJzZXMtdG9vbHMiLCBUcnVlKSwgImEiKQorCisgICAgZGVmIHRlc3RfdW5kZXJzY29yZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5kLnNldFZhcigiVEVTVF9iYXIiLCAidGVzdHZhbHVlMiIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1Rfc29tZV92YWwiLCAidGVzdHZhbHVlMyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlRFU1RfZm9vIiwgInRlc3R2YWx1ZTQiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJPVkVSUklERVMiLCAiZm9vOmJhcjpzb21lX3ZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVEVTVCIsIFRydWUpLCAidGVzdHZhbHVlMyIpCisKK2NsYXNzIFRlc3RLZXlFeHBhbnNpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRk9PIiwgImZvbyIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJBUiIsICJmb28iKQorCisgICAgZGVmIHRlc3Rfa2V5ZXhwYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUxfJHtGT099IiwgIkEiKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJWQUxfJHtCQVJ9IiwgIkIiKQorICAgICAgICB3aXRoIExvZ1JlY29yZCgpIGFzIGxvZ3M6CisgICAgICAgICAgICBiYi5kYXRhLmV4cGFuZEtleXMoc2VsZi5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ0NvbnRhaW5zKCJWYXJpYWJsZSBrZXkgVkFMXyR7Rk9PfSAoQSkgcmVwbGFjZXMgb3JpZ2luYWwga2V5IFZBTF9mb28gKEIpIiwgbG9ncykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhcigiVkFMX2ZvbyIsIFRydWUpLCAiQSIpCisKK2NsYXNzIFRlc3RGbGFncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJmb28iLCAidmFsdWUgb2YgZm9vIikKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoImZvbyIsICJmbGFnMSIsICJ2YWx1ZSBvZiBmbGFnMSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCJmb28iLCAiZmxhZzIiLCAidmFsdWUgb2YgZmxhZzIiKQorCisgICAgZGVmIHRlc3Rfc2V0ZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQuZ2V0VmFyRmxhZygiZm9vIiwgImZsYWcxIiksICJ2YWx1ZSBvZiBmbGFnMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhckZsYWcoImZvbyIsICJmbGFnMiIpLCAidmFsdWUgb2YgZmxhZzIiKQorCisgICAgZGVmIHRlc3RfZGVsZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5kLmRlbFZhckZsYWcoImZvbyIsICJmbGFnMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLmdldFZhckZsYWcoImZvbyIsICJmbGFnMSIpLCAidmFsdWUgb2YgZmxhZzEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZC5nZXRWYXJGbGFnKCJmb28iLCAiZmxhZzIiKSwgTm9uZSkKKworCitjbGFzcyBDb250YWlucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJTT01FRkxBRyIsICJhIGIgYyIpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJhIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImEgYiIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImIgYyIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgImMgYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYSBiIGMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zKCJTT01FRkxBRyIsICJjIGIgYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgIngiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYi51dGlscy5jb250YWlucygiU09NRUZMQUciLCAiYSB4IiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgInggYyBiIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIudXRpbHMuY29udGFpbnMoIlNPTUVGTEFHIiwgInggYyBiIGEiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zX2FueShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJiIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJhIGIiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAiYiBjIiwgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImMgYSIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYi51dGlscy5jb250YWluc19hbnkoIlNPTUVGTEFHIiwgImEgeCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIudXRpbHMuY29udGFpbnNfYW55KCJTT01FRkxBRyIsICJ4IGMiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAieCIsIFRydWUsIEZhbHNlLCBzZWxmLmQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiU09NRUZMQUciLCAieCB5IHoiLCBUcnVlLCBGYWxzZSwgc2VsZi5kKSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5IGIvYml0YmFrZS9saWIvYmIvdGVzdHMvZmV0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2MWYzYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3Rlc3RzL2ZldGNoLnB5CkBAIC0wLDAgKzEsNzU5IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB0aGUgRmV0Y2hlciAoZmV0Y2gyLykKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJpY2hhcmQgUHVyZGllCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworZnJvbSBiYi5mZXRjaDIgaW1wb3J0IFVSSQorZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoTWV0aG9kCitpbXBvcnQgYmIKKworY2xhc3MgVVJJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGVzdF91cmlzID0geworICAgICAgICAiaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWwiIDogeworICAgICAgICAgICAgJ3VyaSc6ICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbCcsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2h0dHAnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ3d3dy5nb29nbGUuY29tJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbDtwYXJhbTE9dmFsdWUxIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5nb29nbGUuY29tL2luZGV4Lmh0bWw7cGFyYW0xPXZhbHVlMScsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2h0dHAnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ3d3dy5nb29nbGUuY29tJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICd3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzogeworICAgICAgICAgICAgICAgICdwYXJhbTEnOiAndmFsdWUxJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9wYXJhbTE9dmFsdWUxIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5leGFtcGxlLm9yZy9pbmRleC5odG1sP3BhcmFtMT12YWx1ZTEnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZXhhbXBsZS5vcmcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ3d3dy5leGFtcGxlLm9yZycsCisgICAgICAgICAgICAncGF0aCc6ICcvaW5kZXguaHRtbCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7CisgICAgICAgICAgICAgICAgJ3BhcmFtMSc6ICd2YWx1ZTEnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9xcGFyYW0xPXF2YWx1ZTE7cGFyYW0yPXZhbHVlMiIgOiB7CisgICAgICAgICAgICAndXJpJzogJ2h0dHA6Ly93d3cuZXhhbXBsZS5vcmcvaW5kZXguaHRtbD9xcGFyYW0xPXF2YWx1ZTE7cGFyYW0yPXZhbHVlMicsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2h0dHAnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ3d3dy5leGFtcGxlLm9yZycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnd3d3LmV4YW1wbGUub3JnJywKKyAgICAgICAgICAgICdwYXRoJzogJy9pbmRleC5odG1sJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7CisgICAgICAgICAgICAgICAgJ3BhcmFtMic6ICd2YWx1ZTInCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3F1ZXJ5JzogeworICAgICAgICAgICAgICAgICdxcGFyYW0xJzogJ3F2YWx1ZTEnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MC9pbmRleC5odG1sIiA6IHsKKyAgICAgICAgICAgICd1cmknOiAnaHR0cDovL3d3dy5leGFtcGxlLmNvbTo4MDgwL2luZGV4Lmh0bWwnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdodHRwJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICd3d3cuZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ3BvcnQnOiA4MDgwLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJ3d3dy5leGFtcGxlLmNvbTo4MDgwJywKKyAgICAgICAgICAgICdwYXRoJzogJy9pbmRleC5odG1sJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImN2czovL2Fub25jdnNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2ciIDogeworICAgICAgICAgICAgJ3VyaSc6ICdjdnM6Ly9hbm9uY3ZzQGN2cy5oYW5kaGVsZHMub3JnL2N2czttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnJywKKyAgICAgICAgICAgICdzY2hlbWUnOiAnY3ZzJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICdjdnMuaGFuZGhlbGRzLm9yZycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnY3ZzLmhhbmRoZWxkcy5vcmcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL2N2cycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnYW5vbmN2cycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnYW5vbmN2cycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7CisgICAgICAgICAgICAgICAgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiY3ZzOi8vYW5vbmN2czphbm9ueW1vdXNAY3ZzLmhhbmRoZWxkcy5vcmcvY3ZzO3RhZz1WMC05OS04MTttb2R1bGU9ZmFtaWxpYXIvZGlzdC9pcGtnIjogeworICAgICAgICAgICAgJ3VyaSc6ICdjdnM6Ly9hbm9uY3ZzOmFub255bW91c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7dGFnPVYwLTk5LTgxO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2cnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdjdnMnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ2N2cy5oYW5kaGVsZHMub3JnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICdjdnMuaGFuZGhlbGRzLm9yZycsCisgICAgICAgICAgICAncGF0aCc6ICcvY3ZzJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICdhbm9uY3ZzOmFub255bW91cycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnYW5vbmN2cycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnYW5vbnltb3VzJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7CisgICAgICAgICAgICAgICAgJ3RhZyc6ICdWMC05OS04MScsCisgICAgICAgICAgICAgICAgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBGYWxzZQorICAgICAgICB9LAorICAgICAgICAiZmlsZTovL2V4YW1wbGUuZGlmZiI6IHsgIyBOT1RFOiBOb3QgUkZDIGNvbXBsaWFudCEKKyAgICAgICAgICAgICd1cmknOiAnZmlsZTpleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdmaWxlJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICdleGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcm5hbWUnOiAnJywKKyAgICAgICAgICAgICdwYXNzd29yZCc6ICcnLAorICAgICAgICAgICAgJ3BhcmFtcyc6IHt9LAorICAgICAgICAgICAgJ3F1ZXJ5Jzoge30sCisgICAgICAgICAgICAncmVsYXRpdmUnOiBUcnVlCisgICAgICAgIH0sCisgICAgICAgICJmaWxlOmV4YW1wbGUuZGlmZiI6IHsgIyBOT1RFOiBSRkMgY29tcGxpYW50IHZlcnNpb24gb2YgdGhlIGZvcm1lcgorICAgICAgICAgICAgJ3VyaSc6ICdmaWxlOmV4YW1wbGUuZGlmZicsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2ZpbGUnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnJywKKyAgICAgICAgICAgICdwYXRoJzogJ2V4YW1wbGUuZGlmZicsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogVHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZmlsZTovLy90bXAvZXhhbXBsZS5kaWZmIjogeworICAgICAgICAgICAgJ3VyaSc6ICdmaWxlOi8vL3RtcC9leGFtcGxlLmRpZmYnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdmaWxlJywKKyAgICAgICAgICAgICdob3N0bmFtZSc6ICcnLAorICAgICAgICAgICAgJ3BvcnQnOiBOb25lLAorICAgICAgICAgICAgJ2hvc3Rwb3J0JzogJycsCisgICAgICAgICAgICAncGF0aCc6ICcvdG1wL2V4YW1wbGUuZGlmZicsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgImdpdDovLy9wYXRoL2V4YW1wbGUuZ2l0IjogeworICAgICAgICAgICAgJ3VyaSc6ICdnaXQ6Ly8vcGF0aC9leGFtcGxlLmdpdCcsCisgICAgICAgICAgICAnc2NoZW1lJzogJ2dpdCcsCisgICAgICAgICAgICAnaG9zdG5hbWUnOiAnJywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICcnLAorICAgICAgICAgICAgJ3BhdGgnOiAnL3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IEZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJnaXQ6cGF0aC9leGFtcGxlLmdpdCI6IHsKKyAgICAgICAgICAgICd1cmknOiAnZ2l0OnBhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdnaXQnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJycsCisgICAgICAgICAgICAncG9ydCc6IE5vbmUsCisgICAgICAgICAgICAnaG9zdHBvcnQnOiAnJywKKyAgICAgICAgICAgICdwYXRoJzogJ3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3VzZXJpbmZvJzogJycsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VybmFtZSc6ICcnLAorICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJycsCisgICAgICAgICAgICAncGFyYW1zJzoge30sCisgICAgICAgICAgICAncXVlcnknOiB7fSwKKyAgICAgICAgICAgICdyZWxhdGl2ZSc6IFRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImdpdDovL2V4YW1wbGUubmV0L3BhdGgvZXhhbXBsZS5naXQiOiB7CisgICAgICAgICAgICAndXJpJzogJ2dpdDovL2V4YW1wbGUubmV0L3BhdGgvZXhhbXBsZS5naXQnLAorICAgICAgICAgICAgJ3NjaGVtZSc6ICdnaXQnLAorICAgICAgICAgICAgJ2hvc3RuYW1lJzogJ2V4YW1wbGUubmV0JywKKyAgICAgICAgICAgICdwb3J0JzogTm9uZSwKKyAgICAgICAgICAgICdob3N0cG9ydCc6ICdleGFtcGxlLm5ldCcsCisgICAgICAgICAgICAncGF0aCc6ICcvcGF0aC9leGFtcGxlLmdpdCcsCisgICAgICAgICAgICAndXNlcmluZm8nOiAnJywKKyAgICAgICAgICAgICd1c2VyaW5mbyc6ICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogJycsCisgICAgICAgICAgICAncGFzc3dvcmQnOiAnJywKKyAgICAgICAgICAgICdwYXJhbXMnOiB7fSwKKyAgICAgICAgICAgICdxdWVyeSc6IHt9LAorICAgICAgICAgICAgJ3JlbGF0aXZlJzogRmFsc2UKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlZiB0ZXN0X3VyaShzZWxmKToKKyAgICAgICAgZm9yIHRlc3RfdXJpLCByZWYgaW4gc2VsZi50ZXN0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgIHVyaSA9IFVSSSh0ZXN0X3VyaSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodXJpKSwgcmVmWyd1cmknXSkKKworICAgICAgICAgICAgIyBleHBlY3RlZCBhdHRyaWJ1dGVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5zY2hlbWUsIHJlZlsnc2NoZW1lJ10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJpbmZvLCByZWZbJ3VzZXJpbmZvJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgcmVmWyd1c2VybmFtZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsIHJlZlsncGFzc3dvcmQnXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdG5hbWUsIHJlZlsnaG9zdG5hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBvcnQsIHJlZlsncG9ydCddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdHBvcnQsIHJlZlsnaG9zdHBvcnQnXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGF0aCwgcmVmWydwYXRoJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHJlZlsncGFyYW1zJ10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnJlbGF0aXZlLCByZWZbJ3JlbGF0aXZlJ10pCisKKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLnRlc3RfdXJpcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHVyaSA9IFVSSSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnNjaGVtZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VyaW5mbywgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5ob3N0bmFtZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wb3J0LCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGF0aCwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHt9KQorCisKKyAgICAgICAgICAgIHVyaS5zY2hlbWUgPSB0ZXN0WydzY2hlbWUnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuc2NoZW1lLCB0ZXN0WydzY2hlbWUnXSkKKworICAgICAgICAgICAgdXJpLnVzZXJpbmZvID0gdGVzdFsndXNlcmluZm8nXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcmluZm8sIHRlc3RbJ3VzZXJpbmZvJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS51c2VybmFtZSwgdGVzdFsndXNlcm5hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhc3N3b3JkLCB0ZXN0WydwYXNzd29yZCddKQorCisgICAgICAgICAgICAjIG1ha2Ugc3VyZSBjaGFuZ2luZyB0aGUgdmFsdWVzIGRvZXNuJ3QgZG8gYW55dGhpbmcgdW5leHBlY3RlZAorICAgICAgICAgICAgdXJpLnVzZXJuYW1lID0gJ2NoYW5nZW1lJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsICdjaGFuZ2VtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgdGVzdFsncGFzc3dvcmQnXSkKKyAgICAgICAgICAgIHVyaS5wYXNzd29yZCA9ICdpbnNlY3VyZScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJuYW1lLCAnY2hhbmdlbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGFzc3dvcmQsICdpbnNlY3VyZScpCisKKyAgICAgICAgICAgICMgcmVzZXQgYmFjayBhZnRlciBvdXIgdHJpY2tlcnkKKyAgICAgICAgICAgIHVyaS51c2VyaW5mbyA9IHRlc3RbJ3VzZXJpbmZvJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnVzZXJpbmZvLCB0ZXN0Wyd1c2VyaW5mbyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkudXNlcm5hbWUsIHRlc3RbJ3VzZXJuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXNzd29yZCwgdGVzdFsncGFzc3dvcmQnXSkKKworICAgICAgICAgICAgdXJpLmhvc3RuYW1lID0gdGVzdFsnaG9zdG5hbWUnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkuaG9zdG5hbWUsIHRlc3RbJ2hvc3RuYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5ob3N0cG9ydCwgdGVzdFsnaG9zdG5hbWUnXSkKKworICAgICAgICAgICAgdXJpLnBvcnQgPSB0ZXN0Wydwb3J0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBvcnQsIHRlc3RbJ3BvcnQnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLmhvc3Rwb3J0LCB0ZXN0Wydob3N0cG9ydCddKQorCisgICAgICAgICAgICB1cmkucGF0aCA9IHRlc3RbJ3BhdGgnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmkucGF0aCwgdGVzdFsncGF0aCddKQorCisgICAgICAgICAgICB1cmkucGFyYW1zID0gdGVzdFsncGFyYW1zJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnBhcmFtcywgdGVzdFsncGFyYW1zJ10pCisKKyAgICAgICAgICAgIHVyaS5xdWVyeSA9IHRlc3RbJ3F1ZXJ5J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpLnF1ZXJ5LCB0ZXN0WydxdWVyeSddKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1cmkpLCB0ZXN0Wyd1cmknXSkKKworICAgICAgICAgICAgdXJpLnBhcmFtcyA9IHt9CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaS5wYXJhbXMsIHt9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodXJpKSwgKHN0cih1cmkpLnNwbGl0KCI7IikpWzBdKQorCitjbGFzcyBGZXRjaGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub3JpZ2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYuZCA9IGJiLmRhdGEuaW5pdCgpCisgICAgICAgIHNlbGYudGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmRsZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgImRvd25sb2FkIikKKyAgICAgICAgb3MubWtkaXIoc2VsZi5kbGRpcikKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRExfRElSIiwgc2VsZi5kbGRpcikKKyAgICAgICAgc2VsZi51bnBhY2tkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAidW5wYWNrZWQiKQorICAgICAgICBvcy5ta2RpcihzZWxmLnVucGFja2RpcikKKyAgICAgICAgcGVyc2lzdGRpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICJwZXJzaXN0ZGF0YSIpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBFUlNJU1RFTlRfRElSIiwgcGVyc2lzdGRpcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vcmlnZGlyKQorICAgICAgICBiYi51dGlscy5wcnVuZWRpcihzZWxmLnRlbXBkaXIpCisKK2NsYXNzIE1pcnJvclVyaVRlc3QoRmV0Y2hlclRlc3QpOgorCisgICAgcmVwbGFjZXVyaXMgPSB7CisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLy4qIiwgImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvIikgCisgICAgICAgICAgICA6ICJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL2dpdDJfZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy5tdGQtdXRpbHMuZ2l0LnRhci5neiIsCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLyhbXi9dKy8pKihbXi9dKikiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL1xcMjtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9mb28vbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8oW14vXSsvKSooW14vXSopIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9cXDI7cHJvdG9jb2w9aHR0cCIpIAorICAgICAgICAgICAgOiAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL2dpdC5pbnZhbGlkLmluZnJhZGVhZC5vcmcvZm9vL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovKFteL10rLykqKFteL10qKSIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL1xcMjtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7cHJvdG9jb2w9aHR0cCIsIAorICAgICAgICAoImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2U7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIsICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIikKKyAgICAgICAgICAgIDogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAorICAgICAgICAoImZpbGU6Ly9zc3RhdGUteHl6LnRneiIsICJmaWxlOi8vLioiLCAiZmlsZTovLy9zb21ld2hlcmUvMTIzNC9zc3RhdGUtY2FjaGUiKSAKKyAgICAgICAgICAgIDogImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlL3NzdGF0ZS14eXoudGd6IiwKKyAgICAgICAgKCJmaWxlOi8vc3N0YXRlLXh5ei50Z3oiLCAiZmlsZTovLy4qIiwgImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlLyIpIAorICAgICAgICAgICAgOiAiZmlsZTovLy9zb21ld2hlcmUvMTIzNC9zc3RhdGUtY2FjaGUvc3N0YXRlLXh5ei50Z3oiLAorICAgICAgICAoImh0dHA6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIxL3NvbWVkaXIyL3NvbWVmaWxlXzEuMi4zLnRhci5neiIsICJodHRwOi8vLiovLioiLCAiaHR0cDovL3NvbWV3aGVyZTIub3JnL3NvbWVkaXIzIikgCisgICAgICAgICAgICA6ICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwKKyAgICAgICAgKCJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyMS9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLCAiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMy9zb21lZmlsZV8xLjIuMy50YXIuZ3oiKSAKKyAgICAgICAgICAgIDogImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMy9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLAorICAgICAgICAoImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwgImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0IiwgImh0dHA6Ly9hcmNoaXZlLmFwYWNoZS5vcmcvZGlzdCIpCisgICAgICAgICAgICA6ICJodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3Qvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuNy4xLnRhci5iejIiLAorICAgICAgICAoImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwgImh0dHA6Ly8uKi8uKiIsICJmaWxlOi8vL3NvbWVwYXRoL2Rvd25sb2Fkcy8iKQorICAgICAgICAgICAgOiAiZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvc3VidmVyc2lvbi0xLjcuMS50YXIuYnoyIiwKKyAgICAgICAgKCJnaXQ6Ly9naXQuaW52YWxpZC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQ7dGFnPTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCAiZ2l0Oi8vLiovLioiLCAiZ2l0Oi8vc29tZXdoZXJlLm9yZy9zb21lZGlyL0JBU0VOQU1FO3Byb3RvY29sPWh0dHAiKSAKKyAgICAgICAgICAgIDogImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwO3Byb3RvY29sPWh0dHAiLCAKKyAgICAgICAgKCJnaXQ6Ly9naXQuaW52YWxpZC5pbmZyYWRlYWQub3JnL2Zvby9tdGQtdXRpbHMuZ2l0O3RhZz0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIiwgImdpdDovLy4qLy4qIiwgImdpdDovL3NvbWV3aGVyZS5vcmcvc29tZWRpci9CQVNFTkFNRTtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisgICAgICAgICgiZ2l0Oi8vZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy9mb28vbXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsICJnaXQ6Ly8uKi8uKiIsICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvTUlSUk9STkFNRTtwcm90b2NvbD1odHRwIikgCisgICAgICAgICAgICA6ICJnaXQ6Ly9zb21ld2hlcmUub3JnL3NvbWVkaXIvZ2l0LmludmFsaWQuaW5mcmFkZWFkLm9yZy5mb28ubXRkLXV0aWxzLmdpdDt0YWc9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDtwcm90b2NvbD1odHRwIiwgCisKKyAgICAgICAgI1JlbmFtaW5nIGZpbGVzIGRvZXNuJ3Qgd29yaworICAgICAgICAjKCJodHRwOi8vc29tZXdoZXJlLm9yZy9zb21lZGlyMS9zb21lZmlsZV8xLjIuMy50YXIuZ3oiLCAiaHR0cDovL3NvbWV3aGVyZS5vcmcvc29tZWRpcjEvc29tZWZpbGVfMS4yLjMudGFyLmd6IiwgImh0dHA6Ly9zb21ld2hlcmUyLm9yZy9zb21lZGlyMy9zb21lZmlsZV8yLjMuNC50YXIuZ3oiKSA6ICJodHRwOi8vc29tZXdoZXJlMi5vcmcvc29tZWRpcjMvc29tZWZpbGVfMi4zLjQudGFyLmd6IgorICAgICAgICAjKCJmaWxlOi8vc3N0YXRlLXh5ei50Z3oiLCAiZmlsZTovLy4qLy4qIiwgImZpbGU6Ly8vc29tZXdoZXJlLzEyMzQvc3N0YXRlLWNhY2hlIikgOiAiZmlsZTovLy9zb21ld2hlcmUvMTIzNC9zc3RhdGUtY2FjaGUvc3N0YXRlLXh5ei50Z3oiLAorICAgIH0KKworICAgIG1pcnJvcnZhciA9ICJodHRwOi8vLiovLiogZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvIFxuIiBcCisgICAgICAgICAgICAgICAgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBcbiIgXAorICAgICAgICAgICAgICAgICJodHRwczovLy4qLy4qIGZpbGU6Ly8vc29tZW90aGVycGF0aC9kb3dubG9hZHMvIFxuIiBcCisgICAgICAgICAgICAgICAgImh0dHA6Ly8uKi8uKiBmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzLyBcbiIKKworICAgIGRlZiB0ZXN0X3VyaXJlcGxhY2Uoc2VsZik6CisgICAgICAgIGZvciBrLCB2IGluIHNlbGYucmVwbGFjZXVyaXMuaXRlbXMoKToKKyAgICAgICAgICAgIHVkID0gYmIuZmV0Y2guRmV0Y2hEYXRhKGtbMF0sIHNlbGYuZCkKKyAgICAgICAgICAgIHVkLnNldHVwX2xvY2FscGF0aChzZWxmLmQpCisgICAgICAgICAgICBtaXJyb3JzID0gYmIuZmV0Y2gyLm1pcnJvcl9mcm9tX3N0cmluZygiJXMgJXMiICUgKGtbMV0sIGtbMl0pKQorICAgICAgICAgICAgbmV3dXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXModWQsIG1pcnJvcnMsIHNlbGYuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ZdLCBuZXd1cmlzKQorCisgICAgZGVmIHRlc3RfdXJpbGlzdDEoc2VsZik6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaERhdGEoImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiIsIHNlbGYuZCkKKyAgICAgICAgbWlycm9ycyA9IGJiLmZldGNoMi5taXJyb3JfZnJvbV9zdHJpbmcoc2VsZi5taXJyb3J2YXIpCisgICAgICAgIHVyaXMsIHVkcyA9IGJiLmZldGNoMi5idWlsZF9taXJyb3J1cmlzKGZldGNoZXIsIG1pcnJvcnMsIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmlzLCBbJ2ZpbGU6Ly8vc29tZXBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsICdmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neiddKQorCisgICAgZGVmIHRlc3RfdXJpbGlzdDIoc2VsZik6CisgICAgICAgICMgQ2F0Y2ggaHR0cHM6Ly8gLT4gZmlsZXM6Ly8gYnVnCisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaERhdGEoImh0dHBzOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCBzZWxmLmQpCisgICAgICAgIG1pcnJvcnMgPSBiYi5mZXRjaDIubWlycm9yX2Zyb21fc3RyaW5nKHNlbGYubWlycm9ydmFyKQorICAgICAgICB1cmlzLCB1ZHMgPSBiYi5mZXRjaDIuYnVpbGRfbWlycm9ydXJpcyhmZXRjaGVyLCBtaXJyb3JzLCBzZWxmLmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJpcywgWydmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neiddKQorCisgICAgZGVmIHRlc3RfbWlycm9yX29mX21pcnJvcihzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIG1pcnJvciBvZiBhIG1pcnJvciB3b3JrcworICAgICAgICBtaXJyb3J2YXIgPSBzZWxmLm1pcnJvcnZhciArICIgaHR0cDovLy4qLy4qIGh0dHA6Ly9vdGhlcmRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy8gXG4iCisgICAgICAgIG1pcnJvcnZhciA9IG1pcnJvcnZhciArICIgaHR0cDovL290aGVyZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvLiogaHR0cDovL2Rvd25sb2FkczIueW9jdG9wcm9qZWN0Lm9yZy9kb3dubG9hZHMvIFxuIgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2hEYXRhKCJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCBzZWxmLmQpCisgICAgICAgIG1pcnJvcnMgPSBiYi5mZXRjaDIubWlycm9yX2Zyb21fc3RyaW5nKG1pcnJvcnZhcikKKyAgICAgICAgdXJpcywgdWRzID0gYmIuZmV0Y2gyLmJ1aWxkX21pcnJvcnVyaXMoZmV0Y2hlciwgbWlycm9ycywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVyaXMsIFsnZmlsZTovLy9zb21lcGF0aC9kb3dubG9hZHMvYml0YmFrZS0xLjAudGFyLmd6JywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vL3NvbWVvdGhlcnBhdGgvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL290aGVyZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvZG93bmxvYWRzL2JpdGJha2UtMS4wLnRhci5neicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vZG93bmxvYWRzMi55b2N0b3Byb2plY3Qub3JnL2Rvd25sb2Fkcy9iaXRiYWtlLTEuMC50YXIuZ3onXSkKKworCitjbGFzcyBGZXRjaGVyTG9jYWxUZXN0KEZldGNoZXJUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiB0b3VjaChmbik6CisgICAgICAgICAgICB3aXRoIGZpbGUoZm4sICdhJyk6CisgICAgICAgICAgICAgICAgb3MudXRpbWUoZm4sIE5vbmUpCisKKyAgICAgICAgc3VwZXIoRmV0Y2hlckxvY2FsVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmxvY2Fsc3JjZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ2xvY2Fsc3JjJykKKyAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5sb2NhbHNyY2RpcikKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdhJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnYicpKQorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicpKQorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5sb2NhbHNyY2RpciwgJ2RpcicsICdjJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ2QnKSkKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHNlbGYubG9jYWxzcmNkaXIsICdkaXInLCAnc3ViZGlyJykpCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLmxvY2Fsc3JjZGlyLCAnZGlyJywgJ3N1YmRpcicsICdlJykpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkZJTEVTUEFUSCIsIHNlbGYubG9jYWxzcmNkaXIpCisKKyAgICBkZWYgZmV0Y2hVbnBhY2soc2VsZiwgdXJpcyk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaCh1cmlzLCBzZWxmLmQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgZmxzdCA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudW5wYWNrZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZsc3QuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIHNlbGYudW5wYWNrZGlyKSkKKyAgICAgICAgZmxzdC5zb3J0KCkKKyAgICAgICAgcmV0dXJuIGZsc3QKKworICAgIGRlZiB0ZXN0X2xvY2FsKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hJywgJ2ZpbGU6Ly9kaXIvYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdkaXIvYyddKQorCisgICAgZGVmIHRlc3RfbG9jYWxfd2lsZGNhcmQoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2EnLCAnZmlsZTovL2Rpci8qJ10pCisgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYnJva2VuIC0gaXQgc2hvdWxkIHJldHVybiBbJ2EnLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10KKyAgICAgICAgIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydhJywgJ2InLCAnZGlyL2MnLCAnZGlyL2QnLCAnZGlyL3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9kaXIoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2EnLCAnZmlsZTovL2RpciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsIFsnYScsICdkaXIvYycsICdkaXIvZCcsICdkaXIvc3ViZGlyL2UnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3N1YmRpcihzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpciddKQorICAgICAgICAjIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAtIGl0IHNob3VsZCByZXR1cm4gWydkaXIvc3ViZGlyL2UnXQorICAgICAgICAjIHNlZSBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ3N1YmRpci9lJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9zdWJkaXJfZmlsZShzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuZmV0Y2hVbnBhY2soWydmaWxlOi8vZGlyL3N1YmRpci9lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydkaXIvc3ViZGlyL2UnXSkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3N1YmRpcnBhcmFtKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5mZXRjaFVucGFjayhbJ2ZpbGU6Ly9hO3N1YmRpcj1iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmVlLCBbJ2Jhci9hJ10pCisKKyAgICBkZWYgdGVzdF9sb2NhbF9kZWVwc3ViZGlycGFyYW0oc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLmZldGNoVW5wYWNrKFsnZmlsZTovL2Rpci9zdWJkaXIvZTtzdWJkaXI9YmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZSwgWydiYXIvZGlyL3N1YmRpci9lJ10pCisKK2NsYXNzIEZldGNoZXJOZXR3b3JrVGVzdChGZXRjaGVyVGVzdCk6CisKKyAgICBpZiBvcy5lbnZpcm9uLmdldCgiQkJfU0tJUF9ORVRURVNUUyIpID09ICJ5ZXMiOgorICAgICAgICBwcmludCgiVW5zZXQgQkJfU0tJUF9ORVRURVNUUyB0byBydW4gbmV0d29yayB0ZXN0cyIpCisgICAgZWxzZToKKyAgICAgICAgZGVmIHRlc3RfZmV0Y2goc2VsZik6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiLCAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjEudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjEudGFyLmd6IiksIDU3ODkyKQorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiQkJfTk9fTkVUV09SSyIsICIxIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiIsICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMS50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4wLyIpKSwgOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIoc2VsZi51bnBhY2tkaXIgKyAiL2JpdGJha2UtMS4xLyIpKSwgOSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZSIpCisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJodHRwOi8vaW52YWxpZC55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UvYml0YmFrZS0xLjAudGFyLmd6Il0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiB0ZXN0X2ZldGNoX21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBodHRwOi8vaW52YWxpZDIueW9jdG9wcm9qZWN0Lm9yZy8gXG4gaHR0cDovL2ludmFsaWQyLnlvY3RvcHJvamVjdC5vcmcvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHNlbGYuZGxkaXIgKyAiL2JpdGJha2UtMS4wLnRhci5neiIpLCA1Nzc0OSkKKworICAgICAgICBkZWYgdGVzdF9mZXRjaF9maWxlX21pcnJvcl9vZl9taXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJNSVJST1JTIiwgImh0dHA6Ly8uKi8uKiBmaWxlOi8vL3NvbWUxd2hlcmUvIFxuIGZpbGU6Ly8vc29tZTF3aGVyZS8uKiBmaWxlOi8vc29tZTJ3aGVyZS8gXG4gZmlsZTovL3NvbWUyd2hlcmUvLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2JpdGJha2UiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFsiaHR0cDovL2ludmFsaWQueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlL2JpdGJha2UtMS4wLnRhci5neiJdLCBzZWxmLmQpCisgICAgICAgICAgICBvcy5ta2RpcihzZWxmLmRsZGlyICsgIi9zb21lMndoZXJlIikKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUoc2VsZi5kbGRpciArICIvYml0YmFrZS0xLjAudGFyLmd6IiksIDU3NzQ5KQorCisgICAgICAgIGRlZiB0ZXN0X2ZldGNoX3ByZW1pcnJvcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiaHR0cDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9iaXRiYWtlIikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbImh0dHA6Ly9pbnZhbGlkLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvYml0YmFrZS9iaXRiYWtlLTEuMC50YXIuZ3oiXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShzZWxmLmRsZGlyICsgIi9iaXRiYWtlLTEuMC50YXIuZ3oiKSwgNTc3NDkpCisKKyAgICAgICAgZGVmIGdpdGZldGNoZXIoc2VsZiwgdXJsMSwgdXJsMik6CisgICAgICAgICAgICBkZWYgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKToKKyAgICAgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKyAgICAgICAgICAgICAgICByZXZpc2lvbiA9IGJiLnByb2Nlc3MucnVuKCJnaXQgcmV2LXBhcnNlIEhFQUQiLCBzaGVsbD1UcnVlLCBjd2Q9c2VsZi51bnBhY2tkaXIgKyAiL2dpdCIpWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzaW9uLCAiMjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIpCisKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyIsICIxIikKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlNSQ1JFViIsICIyNzBhMDViMGI0YmEwOTU5ZmUwNjI0ZDJhNDg4NWQ3YjcwNDI2ZGE1IikKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaC5GZXRjaChbdXJsMV0sIHNlbGYuZCkKKyAgICAgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgICAgICAgICAgY2hlY2tyZXZpc2lvbihzZWxmLCBmZXRjaGVyKQorICAgICAgICAgICAgIyBXaXBlIG91dCB0aGUgZGxkaXIgY2xvbmUgYW5kIHRoZSB1bnBhY2tlZCBzb3VyY2UsIHR1cm4gb2ZmIHRoZSBuZXR3b3JrIGFuZCBjaGVjayBtaXJyb3IgdGFyYmFsbCB3b3JrcworICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi5kbGRpciArICIvZ2l0Mi8iKQorICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIoc2VsZi51bnBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9OT19ORVRXT1JLIiwgIjEiKQorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKFt1cmwyXSwgc2VsZi5kKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgICAgICAgICBjaGVja3JldmlzaW9uKHNlbGYsIGZldGNoZXIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2goc2VsZik6CisgICAgICAgICAgICB1cmwxID0gdXJsMiA9ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5naXRmZXRjaGVyKHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfZ29vZHNyY3JldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgbWF0Y2hlcyByZXY9IHBhcmFtZXRlcgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX2JhZHNyY3JldihzZWxmKToKKyAgICAgICAgICAgICMgU1JDUkVWIGlzIHNldCBidXQgZG9lcyBub3QgbWF0Y2ggcmV2PSBwYXJhbWV0ZXIKKyAgICAgICAgICAgIHVybDEgPSB1cmwyID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7cmV2PWRlYWQwNWIwYjRiYTA5NTlmZTA2MjRkMmE0ODg1ZDdiNzA0MjZkYTUiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi5mZXRjaC5GZXRjaEVycm9yLCBzZWxmLmdpdGZldGNoZXIsIHVybDEsIHVybDIpCisKKyAgICAgICAgZGVmIHRlc3RfZ2l0ZmV0Y2hfdGFnYW5kcmV2KHNlbGYpOgorICAgICAgICAgICAgIyBTUkNSRVYgaXMgc2V0IGJ1dCBkb2VzIG5vdCBtYXRjaCByZXY9IHBhcmFtZXRlcgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZTtyZXY9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNTt0YWc9MjcwYTA1YjBiNGJhMDk1OWZlMDYyNGQyYTQ4ODVkN2I3MDQyNmRhNSIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLmZldGNoLkZldGNoRXJyb3IsIHNlbGYuZ2l0ZmV0Y2hlciwgdXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3Ioc2VsZik6CisgICAgICAgICAgICB1cmwxID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgICAgICB1cmwyID0gImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgImdpdDovL3NvbWVzZXJ2ZXIub3JnL2JpdGJha2UgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSBcbiIpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIodXJsMSwgdXJsMikKKworICAgICAgICBkZWYgdGVzdF9naXRmZXRjaF9wcmVtaXJyb3IyKHNlbGYpOgorICAgICAgICAgICAgdXJsMSA9IHVybDIgPSAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIlBSRU1JUlJPUlMiLCAiZ2l0Oi8vc29tZXNlcnZlci5vcmcvYml0YmFrZSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIFxuIikKKyAgICAgICAgICAgIHNlbGYuZ2l0ZmV0Y2hlcih1cmwxLCB1cmwyKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdGZldGNoX3ByZW1pcnJvcjMoc2VsZik6CisgICAgICAgICAgICByZWFsdXJsID0gImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiCisgICAgICAgICAgICBkdW1teXVybCA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9iaXRiYWtlIgorICAgICAgICAgICAgc2VsZi5zb3VyY2VkaXIgPSBzZWxmLnVucGFja2Rpci5yZXBsYWNlKCJ1bnBhY2tlZCIsICJzb3VyY2VtaXJyb3IuZ2l0IikKKyAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYudGVtcGRpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCJnaXQgY2xvbmUgJXMgJXMgMj4gL2Rldi9udWxsIiAlIChyZWFsdXJsLCBzZWxmLnNvdXJjZWRpciksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQUkVNSVJST1JTIiwgIiVzIGdpdDovLyVzO3Byb3RvY29sPWZpbGUgXG4iICUgKGR1bW15dXJsLCBzZWxmLnNvdXJjZWRpcikpCisgICAgICAgICAgICBzZWxmLmdpdGZldGNoZXIoZHVtbXl1cmwsIGR1bW15dXJsKQorCisgICAgICAgIGRlZiB0ZXN0X2dpdF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goWyJnaXRzbTovL2dpdC55b2N0b3Byb2plY3Qub3JnL2dpdC1zdWJtb2R1bGUtdGVzdDtyZXY9ZjEyZTU3ZjJlZGYwYWE1MzRjZjE2MTZmYTk4M2QxNjVhOTJiMDg0MiJdLCBzZWxmLmQpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgICAgICMgUHJldmlvdXMgY3dkIGhhcyBiZWVuIGRlbGV0ZWQKKyAgICAgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShzZWxmLnVucGFja2RpcikpCisgICAgICAgICAgICBmZXRjaGVyLnVucGFjayhzZWxmLnVucGFja2RpcikKKworICAgICAgICBkZWYgdGVzdF90cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyBGYWxzZSB3aGVuIHRoZSBob3N0IElTIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgdXJsID0gImdpdDovL1NvbWVzZXJ2ZXIub3JnL2ZvbztyZXY9MSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0FMTE9XRURfTkVUV09SS1MiLCAic2VydmVyMS5vcmcgc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3Rfd2lsZF90cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyB0cnVlIHdoZW4gdGhlICouaG9zdCBJUyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfcHJlZml4X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcmVmaXggbWF0Y2hlcyAqLmhvc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vZ2l0LlNvbWVzZXJ2ZXIub3JnL2ZvbztyZXY9MSIKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIoIkJCX0FMTE9XRURfTkVUV09SS1MiLCAic2VydmVyMS5vcmcgKi5zb21lc2VydmVyLm9yZyBzZXJ2ZXIyLm9yZyBzZXJ2ZXIzLm9yZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworICAgICAgICBkZWYgdGVzdF90d29fcHJlZml4X3dpbGRfdHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwcmVmaXggbWF0Y2hlcyAqLmhvc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vc29tZXRoaW5nLmdpdC5Tb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnICouc29tZXNlcnZlci5vcmcgc2VydmVyMi5vcmcgc2VydmVyMy5vcmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiLmZldGNoLnRydXN0ZWRfbmV0d29yayhzZWxmLmQsIHVybCkpCisKKyAgICAgICAgZGVmIHRlc3RfdW50cnVzdGVkX25ldHdvcmsoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0cnVzdGVkX25ldHdvcmsgcmV0dXJucyBGYWxzZSB3aGVuIHRoZSBob3N0IGlzIE5PVCBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIHVybCA9ICJnaXQ6Ly9zb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworICAgICAgICBkZWYgdGVzdF93aWxkX3VudHJ1c3RlZF9uZXR3b3JrKHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdHJ1c3RlZF9uZXR3b3JrIHJldHVybnMgRmFsc2Ugd2hlbiB0aGUgaG9zdCBpcyBOT1QgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICB1cmwgPSAiZ2l0Oi8vKi5zb21lc2VydmVyLm9yZy9mb287cmV2PTEiCisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJCQl9BTExPV0VEX05FVFdPUktTIiwgInNlcnZlcjEub3JnIHNlcnZlcjIub3JnIHNlcnZlcjMub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmIuZmV0Y2gudHJ1c3RlZF9uZXR3b3JrKHNlbGYuZCwgdXJsKSkKKworCitjbGFzcyBVUkxIYW5kbGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGF0YXRhYmxlID0geworICAgICAgICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW5kZXguaHRtbCIgOiAoJ2h0dHAnLCAnd3d3Lmdvb2dsZS5jb20nLCAnL2luZGV4Lmh0bWwnLCAnJywgJycsIHt9KSwKKyAgICAgICAiY3ZzOi8vYW5vbmN2c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7bW9kdWxlPWZhbWlsaWFyL2Rpc3QvaXBrZyIgOiAoJ2N2cycsICdjdnMuaGFuZGhlbGRzLm9yZycsICcvY3ZzJywgJ2Fub25jdnMnLCAnJywgeydtb2R1bGUnOiAnZmFtaWxpYXIvZGlzdC9pcGtnJ30pLAorICAgICAgICJjdnM6Ly9hbm9uY3ZzOmFub255bW91c0BjdnMuaGFuZGhlbGRzLm9yZy9jdnM7dGFnPVYwLTk5LTgxO21vZHVsZT1mYW1pbGlhci9kaXN0L2lwa2ciIDogKCdjdnMnLCAnY3ZzLmhhbmRoZWxkcy5vcmcnLCAnL2N2cycsICdhbm9uY3ZzJywgJ2Fub255bW91cycsIHsndGFnJzogJ1YwLTk5LTgxJywgJ21vZHVsZSc6ICdmYW1pbGlhci9kaXN0L2lwa2cnfSksCisgICAgICAgImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2U7YnJhbmNoPUBmb28iIDogKCdnaXQnLCAnZ2l0Lm9wZW5lbWJlZGRlZC5vcmcnLCAnL2JpdGJha2UnLCAnJywgJycsIHsnYnJhbmNoJzogJ0Bmb28nfSkKKyAgICB9CisKKyAgICBkZWYgdGVzdF9kZWNvZGV1cmwoc2VsZik6CisgICAgICAgIGZvciBrLCB2IGluIHNlbGYuZGF0YXRhYmxlLml0ZW1zKCk6CisgICAgICAgICAgICByZXN1bHQgPSBiYi5mZXRjaC5kZWNvZGV1cmwoaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB2KQorCisgICAgZGVmIHRlc3RfZW5jb2RldXJsKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmRhdGF0YWJsZS5pdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIuZmV0Y2guZW5jb2RldXJsKHYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgaykKKworY2xhc3MgRmV0Y2hMYXRlc3RWZXJzaW9uVGVzdChGZXRjaGVyVGVzdCk6CisKKyAgICB0ZXN0X2dpdF91cmlzID0geworICAgICAgICAjIHZlcnNpb24gcGF0dGVybiAiWC5ZLloiCisgICAgICAgICgibXgtMS4wIiwgImdpdDovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214LmdpdDticmFuY2g9bXgtMS40IiwgIjliMWRiNmI4MDYwYmQwMGIxMjFhNjkyZjk0MjQwNGEyNGFlMjk2MGYiLCAiIikKKyAgICAgICAgICAgIDogIjEuOTkuNCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJ2WC5ZIgorICAgICAgICAoIm10ZC11dGlscyIsICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IiwgImNhMzllYjFkOThlNzM2MTA5YzY0ZmY5YzFhYTJhNmVjY2EyMjJkOGYiLCAiIikKKyAgICAgICAgICAgIDogIjEuNS4wIiwKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gInBrZ19uYW1lLVguWSIKKyAgICAgICAgKCJwcmVzZW50cHJvdG8iLCAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vcHJlc2VudHByb3RvIiwgIjI0ZjNhNTZlNTQxYjBhOWU2YzZlZTc2MDgxZjQ0MTIyMWExMjBlZjkiLCAiIikKKyAgICAgICAgICAgIDogIjEuMCIsCisgICAgICAgICMgdmVyc2lvbiBwYXR0ZXJuICJwa2dfbmFtZS12WC5ZLloiCisgICAgICAgICgiZHRjIiwgImdpdDovL2dpdC5xZW11Lm9yZy9kdGMuZ2l0IiwgIjY1Y2M0ZDI3NDhhMmMyZTZmMjdmMWNmMzllMDdhNWRiYWJkODBlYmYiLCAiIikKKyAgICAgICAgICAgIDogIjEuNC4wIiwKKyAgICAgICAgIyBjb21iaW5hdGlvbiB2ZXJzaW9uIHBhdHRlcm4KKyAgICAgICAgKCJzeXNwcm9mIiwgImdpdDovL2dpdC5nbm9tZS5vcmcvc3lzcHJvZiIsICJjZDQ0ZWU2NjQ0YzM2NDE1MDdmYjUzYjhhMmE2OTEzN2YyOTcxMjE5IiwgIiIpCisgICAgICAgICAgICA6ICIxLjIuMCIsCisgICAgICAgICgidS1ib290LW1raW1hZ2UiLCAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyO3Byb3RvY29sPWdpdCIsICI2MmMxNzVmYmI4YTBmOWE5MjZjODgyOTRlYTlmN2U4OGViODk4ZjZjIiwgIiIpCisgICAgICAgICAgICA6ICIyMDE0LjAxIiwKKyAgICAgICAgIyB2ZXJzaW9uIHBhdHRlcm4gInl5eXltbWRkIgorICAgICAgICAoIm1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIsICJnaXQ6Ly9naXQuZ25vbWUub3JnL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIsICI0ZWQxOWUxMWMyOTc1MTA1YjcxYjk1NjQ0MGFjZGIyNWQ0NmEzNDdkIiwgIiIpCisgICAgICAgICAgICA6ICIyMDEyMDYxNCIsCisgICAgICAgICMgcGFja2FnZXMgd2l0aCBhIHZhbGlkIEdJVFRBR1JFR0VYCisgICAgICAgICgieGY4Ni12aWRlby1vbWFwIiwgImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcvZHJpdmVyL3hmODYtdmlkZW8tb21hcCIsICJhZTAzOTRlNjg3ZjFhNzdlOTY2Y2Y3MmY4OTVkYTkxODQwZGZmYjhmIiwgIig/UDxwdmVyPihcZCtcLihcZFwuPykqKSkiKQorICAgICAgICAgICAgOiAiMC40LjMiLAorICAgICAgICAoImJ1aWxkLWFwcGxpYW5jZS1pbWFnZSIsICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5IiwgImIzN2RkNDUxYTUyNjIyZDViNTcwMTgzYTgxNTgzY2MzNGMyZmY1NTUiLCAiKD9QPHB2ZXI+KChbMC05XVtcLnxfXT8pK1swLTldKSkiKQorICAgICAgICAgICAgOiAiMTEuMC4wIiwKKyAgICAgICAgKCJjaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZSIsICJnaXQ6Ly9naXRodWIuY29tL2tlcmdvdGgvY2hrY29uZmlnO2JyYW5jaD1zeXNyb290IiwgImNkNDM3ZWNiZDg5ODZjODk0NDQyZjhmY2UxZTAwNjFlMjBmMDRkZWUiLCAiY2hrY29uZmlnXC0oP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKSIpCisgICAgICAgICAgICA6ICIxLjMuNTkiLAorICAgICAgICAoInJlbWFrZSIsICJnaXQ6Ly9naXRodWIuY29tL3JvY2t5L3JlbWFrZS5naXQiLCAiZjA1NTA4ZTUyMTk4N2M4NDk0YzkyZDljMjg3MWFlYzQ2MzA3ZDUxZCIsICIoP1A8cHZlcj4oXGQrXC4oXGQrXC4pKlxkKihcK2RiZ1xkKyhcLlxkKykqKSopKSIpCisgICAgICAgICAgICA6ICIzLjgyK2RiZzAuOSIsCisgICAgfQorCisgICAgdGVzdF93Z2V0X3VyaXMgPSB7CisgICAgICAgICMgcGFja2FnZXMgd2l0aCB2ZXJzaW9ucyBpbnNpZGUgZGlyZWN0b3J5IG5hbWUKKyAgICAgICAgKCJ1dGlsLWxpbnV4IiwgImh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L3YyLjIzL3V0aWwtbGludXgtMi4yNC4yLnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyLjI0LjIiLAorICAgICAgICAoImVuY2hhbnQiLCAiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2Rvd25sb2Fkcy9lbmNoYW50LzEuNi4wL2VuY2hhbnQtMS42LjAudGFyLmd6IiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMS42LjAiLAorICAgICAgICAoImNtYWtlIiwgImh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3YyLjgvY21ha2UtMi44LjEyLjEudGFyLmd6IiwgIiIsICIiKQorICAgICAgICAgICAgOiAiMi44LjEyLjEiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmVyc2lvbnMgb25seSBpbiBjdXJyZW50IGRpcmVjdG9yeQorICAgICAgICAoImVnbGljIiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9lZ2xpYmMvZWdsaWJjLTIuMTgtc3ZucjIzNzg3LnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIyLjE5IiwKKyAgICAgICAgKCJnbnUtY29uZmlnIiwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9nbnUtY29uZmlnL2dudS1jb25maWctMjAxMjA4MTQudGFyLmJ6MiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjIwMTIwODE0IiwKKyAgICAgICAgIyBwYWNrYWdlcyB3aXRoICI5OSIgaW4gdGhlIG5hbWUgb2YgcG9zc2libGUgdmVyc2lvbgorICAgICAgICAoInB1bHNlYXVkaW8iLCAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wdWxzZWF1ZGlvL3JlbGVhc2VzL3B1bHNlYXVkaW8tNC4wLnRhci54eiIsICIiLCAiIikKKyAgICAgICAgICAgIDogIjUuMCIsCisgICAgICAgICgieHNlcnZlci14b3JnIiwgImh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9pbmRpdmlkdWFsL3hzZXJ2ZXIveG9yZy1zZXJ2ZXItMS4xNS4xLnRhci5iejIiLCAiIiwgIiIpCisgICAgICAgICAgICA6ICIxLjE1LjEiLAorICAgICAgICAjIHBhY2thZ2VzIHdpdGggdmFsaWQgUkVHRVhfVVJJIGFuZCBSRUdFWAorICAgICAgICAoImN1cHMiLCAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8xLjcuMi9jdXBzLTEuNy4yLXNvdXJjZS50YXIuYnoyIiwgImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIiwgIig/UDxuYW1lPmN1cHNcLSkoP1A8cHZlcj4oKFxkK1tcLlwtX10qKSspKVwtc291cmNlXC50YXJcLmd6IikKKyAgICAgICAgICAgIDogIjIuMC4wIiwKKyAgICAgICAgKCJkYiIsICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi01LjMuMjEudGFyLmd6IiwgImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIsICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9vdG4vYmVya2VsZXktZGIvKD9QPG5hbWU+ZGItKSg/UDxwdmVyPigoXGQrW1wuXC1fXSopKykpXC50YXJcLmd6IikKKyAgICAgICAgICAgIDogIjYuMS4xOSIsCisgICAgfQorICAgIGlmIG9zLmVudmlyb24uZ2V0KCJCQl9TS0lQX05FVFRFU1RTIikgPT0gInllcyI6CisgICAgICAgIHByaW50KCJVbnNldCBCQl9TS0lQX05FVFRFU1RTIHRvIHJ1biBuZXR3b3JrIHRlc3RzIikKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF9naXRfbGF0ZXN0X3ZlcnNpb25zdHJpbmcoc2VsZik6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLnRlc3RfZ2l0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiU1JDUkVWIiwga1syXSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJHSVRUQUdSRUdFWCIsIGtbM10pCisgICAgICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBwdXB2ZXI9IHVkLm1ldGhvZC5sYXRlc3RfdmVyc2lvbnN0cmluZyh1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHZlcnN0cmluZyA9IHB1cHZlclswXQorICAgICAgICAgICAgICAgIHIgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKHYsIHZlcnN0cmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAtMSBvciByID09IDAsIG1zZz0iUGFja2FnZSAlcywgdmVyc2lvbjogJXMgPD0gJXMiICUgKGtbMF0sIHYsIHZlcnN0cmluZykpCisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9sYXRlc3RfdmVyc2lvbnN0cmluZyhzZWxmKToKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYudGVzdF93Z2V0X3VyaXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJQTiIsIGtbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiUkVHRVhfVVJJIiwga1syXSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJSRUdFWCIsIGtbM10pCisgICAgICAgICAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKGtbMV0sIHNlbGYuZCkKKyAgICAgICAgICAgICAgICBwdXB2ZXIgPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHNlbGYuZCkKKyAgICAgICAgICAgICAgICB2ZXJzdHJpbmcgPSBwdXB2ZXJbMF0KKyAgICAgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wX3N0cmluZyh2LCB2ZXJzdHJpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gLTEgb3IgciA9PSAwLCBtc2c9IlBhY2thZ2UgJXMsIHZlcnNpb246ICVzIDw9ICVzIiAlIChrWzBdLCB2LCB2ZXJzdHJpbmcpKQorCisKK2NsYXNzIEZldGNoQ2hlY2tTdGF0dXNUZXN0KEZldGNoZXJUZXN0KToKKyAgICB0ZXN0X3dnZXRfdXJpcyA9IFsiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS8xLjcuMi9jdXBzLTEuNy4yLXNvdXJjZS50YXIuYnoyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS9pcHB0b29sL2lwcHRvb2wtMjAxMzA3MzEtbGludXgtdWJ1bnR1LWk2ODYudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5jdXBzLm9yZy8iLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvc2F0by9zYXRvLWVuZ2luZS0wLjEudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3NhdG8vc2F0by1lbmdpbmUtMC4yLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9zYXRvL3NhdG8tZW5naW5lLTAuMy50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL3lvY3RvcHJvamVjdC5vcmcvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly95b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvb3BrZy9vcGtnLTAuMS43LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9vcGtnL29wa2ctMC4zLjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2F1dG9jb25mL2F1dG9jb25mLTIuNjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2NoZXNzL2dudWNoZXNzLTUuMDgudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRwOi8vZnRwLmdudS5vcmcvZ251L2dtcC9nbXAtNC4wLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgaWYgb3MuZW52aXJvbi5nZXQoIkJCX1NLSVBfTkVUVEVTVFMiKSA9PSAieWVzIjoKKyAgICAgICAgcHJpbnQoIlVuc2V0IEJCX1NLSVBfTkVUVEVTVFMgdG8gcnVuIG5ldHdvcmsgdGVzdHMiKQorICAgIGVsc2U6CisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1cyhzZWxmKToKKyAgICAgICAgICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNlbGYudGVzdF93Z2V0X3VyaXMsIHNlbGYuZCkKKyAgICAgICAgICAgIGZvciB1IGluIHNlbGYudGVzdF93Z2V0X3VyaXM6CisgICAgICAgICAgICAgICAgdWQgPSBmZXRjaC51ZFt1XQorICAgICAgICAgICAgICAgIG0gPSB1ZC5tZXRob2QKKyAgICAgICAgICAgICAgICByZXQgPSBtLmNoZWNrc3RhdHVzKGZldGNoLCB1ZCwgc2VsZi5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXQsIG1zZz0iVVJJICVzLCBjYW4ndCBjaGVjayBzdGF0dXMiICUgKHUpKQorCisKKyAgICAgICAgZGVmIHRlc3Rfd2dldF9jaGVja3N0YXR1c19jb25uZWN0aW9uX2NhY2hlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoQ29ubmVjdGlvbkNhY2hlCisKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUgPSBGZXRjaENvbm5lY3Rpb25DYWNoZSgpCisgICAgICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzZWxmLnRlc3Rfd2dldF91cmlzLCBzZWxmLmQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlID0gY29ubmVjdGlvbl9jYWNoZSkKKworICAgICAgICAgICAgZm9yIHUgaW4gc2VsZi50ZXN0X3dnZXRfdXJpczoKKyAgICAgICAgICAgICAgICB1ZCA9IGZldGNoLnVkW3VdCisgICAgICAgICAgICAgICAgbSA9IHVkLm1ldGhvZAorICAgICAgICAgICAgICAgIHJldCA9IG0uY2hlY2tzdGF0dXMoZmV0Y2gsIHVkLCBzZWxmLmQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJldCwgbXNnPSJVUkkgJXMsIGNhbid0IGNoZWNrIHN0YXR1cyIgJSAodSkpCisKKyAgICAgICAgICAgIGNvbm5lY3Rpb25fY2FjaGUuY2xvc2VfY29ubmVjdGlvbnMoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkgYi9iaXRiYWtlL2xpYi9iYi90ZXN0cy9wYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmViNzZhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdGVzdHMvcGFyc2UucHkKQEAgLTAsMCArMSwxNDcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVGVzdCBmb3IgbGliL2JiL3BhcnNlLworIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGJiCitpbXBvcnQgb3MKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuVGVzdFBhcnNlJykKKworaW1wb3J0IGJiLnBhcnNlCitpbXBvcnQgYmIuZGF0YQoraW1wb3J0IGJiLnNpZ2dlbgorCitjbGFzcyBQYXJzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGVzdGZpbGUgPSAiIiIKK0EgPSAiMSIKK0IgPSAiMiIKK2RvX2luc3RhbGwoKSB7CisJZWNobyAiaGVsbG8iCit9CisKK0MgPSAiMyIKKyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICBiYi5wYXJzZS5zaWdnZW4gPSBiYi5zaWdnZW4uaW5pdChzZWxmLmQpCisKKyAgICBkZWYgcGFyc2VoZWxwZXIoc2VsZiwgY29udGVudCwgc3VmZml4ID0gIi5iYiIpOgorCisgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4ID0gc3VmZml4KQorICAgICAgICBmLndyaXRlKGNvbnRlbnQpCisgICAgICAgIGYuZmx1c2goKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUoZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiB0ZXN0X3BhcnNlX3NpbXBsZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkEiLCBUcnVlKSwgIjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJCIiwgVHJ1ZSksICIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldFZhcigiQyIsIFRydWUpLCAiMyIpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9pbmNvbXBsZXRlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICB0ZXN0ZmlsZUIgPSBzZWxmLnRlc3RmaWxlLnJlcGxhY2UoIn0iLCAiIikKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIodGVzdGZpbGVCKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJiLnBhcnNlLlBhcnNlRXJyb3IpOgorICAgICAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisKKyAgICBvdmVycmlkZXRlc3QgPSAiIiIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImEiCitSUkVDT01NRU5EU18ke1BOfV9saWJjID0gImIiCitPVkVSUklERVMgPSAibGliYzoke1BOfSIKK1BOID0gImd0aysiCisiIiIKKworICAgIGRlZiB0ZXN0X3BhcnNlX292ZXJyaWRlcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucGFyc2VoZWxwZXIoc2VsZi5vdmVycmlkZXRlc3QpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYiIpCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYiIpCisgICAgICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU19ndGsrIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJSUkVDT01NRU5EUyIsIFRydWUpLCAiYyIpCisKKyAgICBvdmVycmlkZXRlc3QyID0gIiIiCitFWFRSQV9PRUNPTkYgPSAiIgorRVhUUkFfT0VDT05GX2NsYXNzLXRhcmdldCA9ICJiIgorRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgYyIKKyIiIgorCisgICAgZGVmIHRlc3RfcGFyc2Vfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLm92ZXJyaWRldGVzdDIpCisgICAgICAgIGQgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpWycnXQorICAgICAgICBkLmFwcGVuZFZhcigiRVhUUkFfT0VDT05GIiwgIiBkIikKKyAgICAgICAgZC5zZXRWYXIoIk9WRVJSSURFUyIsICJjbGFzcy10YXJnZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJFWFRSQV9PRUNPTkYiLCBUcnVlKSwgImIgYyBkIikKKworICAgIG92ZXJyaWRldGVzdDMgPSAiIiIKK0RFU0NSSVBUSU9OID0gIkEiCitERVNDUklQVElPTl8ke1BOfS1kZXYgPSAiJHtERVNDUklQVElPTn0gQiIKK1BOID0gImJjIgorIiIiCisKKyAgICBkZWYgdGVzdF9wYXJzZV9jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYub3ZlcnJpZGV0ZXN0MykKKyAgICAgICAgZCA9IGJiLnBhcnNlLmhhbmRsZShmLm5hbWUsIHNlbGYuZClbJyddCisgICAgICAgIGJiLmRhdGEuZXhwYW5kS2V5cyhkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0VmFyKCJERVNDUklQVElPTl9iYy1kZXYiLCBUcnVlKSwgIkEgQiIpCisgICAgICAgIGQuc2V0VmFyKCJERVNDUklQVElPTiIsICJFIikKKyAgICAgICAgZC5zZXRWYXIoIkRFU0NSSVBUSU9OX2JjLWRldiIsICJDIEQiKQorICAgICAgICBkLnNldFZhcigiT1ZFUlJJREVTIiwgImJjLWRldiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRWYXIoIkRFU0NSSVBUSU9OIiwgVHJ1ZSksICJDIEQiKQorCisKKyAgICBjbGFzc2V4dGVuZCA9ICIiIgorVkFSX3Zhcl9vdmVycmlkZTEgPSAiQiIKK0VYVFJBID0gIjpvdmVycmlkZTEiCitPVkVSUklERVMgPSAibm90aGluZyR7RVhUUkF9IgorCitCQkNMQVNTRVhURU5EID0gIiMjI0NMQVNTIyMjIgorIiIiCisgICAgY2xhc3NleHRlbmRfYmJjbGFzcyA9ICIiIgorRVhUUkEgPSAiIgorcHl0aG9uICgpIHsKKyAgICBkLnJlbmFtZVZhcigiVkFSX3ZhciIsICJWQVJfdmFyMiIpCit9CisiIiIKKworICAgICMKKyAgICAjIFRlc3QgYmFzZWQgdXBvbiBhIHJlYWwgd29ybGQgZGF0YSBjb3JydXB0aW9uIGlzc3VlLiBPbmUKKyAgICAjIGRhdGEgc3RvcmUgY2hhbmdpbmcgYSB2YXJpYWJsZSBwb2tlZCB0aHJvdWdoIGludG8gYSBkaWZmZXJlbnQgZGF0YQorICAgICMgc3RvcmUuIFRoaXMgdGVzdCBjYXNlIHJlcGxpY2F0ZXMgdGhhdCBpc3N1ZSB3aGVyZSB0aGUgdmFsdWUgJ0InIHdvdWxkIAorICAgICMgYmVjb21lIHVuc2V0L2Rpc2FwcGVhci4KKyAgICAjCisgICAgZGVmIHRlc3RfcGFyc2VfY2xhc3NleHRlbmRfY29udGFtaW5hdGlvbihzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi5wYXJzZWhlbHBlcihzZWxmLmNsYXNzZXh0ZW5kX2JiY2xhc3MsIHN1ZmZpeD0iLmJiY2xhc3MiKQorICAgICAgICAjY2xzbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY2xzLm5hbWUpLnJlcGxhY2UoIi5iYmNsYXNzIiwgIiIpCisgICAgICAgIHNlbGYuY2xhc3NleHRlbmQgPSBzZWxmLmNsYXNzZXh0ZW5kLnJlcGxhY2UoIiMjI0NMQVNTIyMjIiwgY2xzLm5hbWUpCisgICAgICAgIGYgPSBzZWxmLnBhcnNlaGVscGVyKHNlbGYuY2xhc3NleHRlbmQpCisgICAgICAgIGFsbGRhdGEgPSBiYi5wYXJzZS5oYW5kbGUoZi5uYW1lLCBzZWxmLmQpCisgICAgICAgIGQxID0gYWxsZGF0YVsnJ10KKyAgICAgICAgZDIgPSBhbGxkYXRhW2Nscy5uYW1lXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmdldFZhcigiVkFSX3ZhciIsIFRydWUpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZ2V0VmFyKCJWQVJfdmFyIiwgVHJ1ZSksIE5vbmUpCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5IGIvYml0YmFrZS9saWIvYmIvdGVzdHMvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3MTUwOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3Rlc3RzL3V0aWxzLnB5CkBAIC0wLDAgKzEsMzc4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRlc3RzIGZvciB1dGlscy5weQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGJiCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQorCitjbGFzcyBWZXJDbXBTdHJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdmVyY21wc3RyaW5nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKCcxJywgJzInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0IDwgMCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZygnMicsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA+IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEnLCAnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEnLCAnMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMScsICcxX3AyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMCcsICcxLjArMS4xLWJldGExJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA8IDApCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLnZlcmNtcF9zdHJpbmcoJzEuMScsICcxLjArMS4xLWJldGExJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCA+IDApCisKKyAgICBkZWYgdGVzdF9leHBsb2RlX2RlcF92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgY29ycmVjdHJlc3VsdCA9IHsiZm9vIiA6IFsiPSAxLjEwIl19CisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICg9IDEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICg9MS4xMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKCJmb28gKCA9IDEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPTEuMTApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMigiZm9vICggPSAxLjEwICkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgY29ycmVjdHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKCJmb28gKCA9MS4xMCApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNvcnJlY3RyZXN1bHQpCisKKyAgICBkZWYgdGVzdF92ZXJjbXBfc3RyaW5nX29wKHNlbGYpOgorICAgICAgICBjb21wYXJlb3BzID0gWygnMScsICcxJywgJz0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc9PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJyE9JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJz4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzEnLCAnPCcsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMScsICc+PScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcxJywgJzw9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc9PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICchPScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz4nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc8JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMScsICcwJywgJz4+JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPDwnLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzAnLCAnPj0nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzEnLCAnMCcsICc8PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc9JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJz09JywgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICgnMCcsICcxJywgJyE9JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPicsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc8JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPj4nLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcwJywgJzEnLCAnPDwnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc+PScsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJzAnLCAnMScsICc8PScsIFRydWUpXQorCisgICAgICAgIGZvciBhcmcxLCBhcmcyLCBvcCwgY29ycmVjdHJlc3VsdCBpbiBjb21wYXJlb3BzOgorICAgICAgICAgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZ19vcChhcmcxLCBhcmcyLCBvcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0LCAndmVyY21wX3N0cmluZ19vcCgiJXMiLCAiJXMiLCAiJXMiKSAhPSAlcycgJSAoYXJnMSwgYXJnMiwgb3AsIGNvcnJlY3RyZXN1bHQpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBjbGVhcmx5IGludmFsaWQgb3BlcmF0b3IgcmFpc2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiYi51dGlscy5WZXJzaW9uU3RyaW5nRXhjZXB0aW9uLCBiYi51dGlscy52ZXJjbXBfc3RyaW5nX29wLCAnMCcsICcwJywgJyQnKQorCisKK2NsYXNzIFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3Vuc2FmZV9kZWxldGVfcGF0aChzZWxmKToKKyAgICAgICAgY2hlY2tpdGVtcyA9IFsoJy8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy8vJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvLy8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0Y3dkKCkuY291bnQob3Muc2VwKSAqICgnLi4nICsgb3Muc2VwKSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKG9zLmVudmlyb24uZ2V0KCdIT01FJywgJy9ob21lL3Rlc3QnKSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9zb21lb25lJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvaG9tZS9vdGhlci8nLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJy9ob21lL290aGVyL3N1YmRpcicsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJycsIEZhbHNlKV0KKyAgICAgICAgZm9yIGFyZzEsIGNvcnJlY3RyZXN1bHQgaW4gY2hlY2tpdGVtczoKKyAgICAgICAgICAgIHJlc3VsdCA9IGJiLnV0aWxzLl9jaGVja191bnNhZmVfZGVsZXRlX3BhdGgoYXJnMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjb3JyZWN0cmVzdWx0LCAnX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aCgiJXMiKSAhPSAlcycgJSAoYXJnMSwgY29ycmVjdHJlc3VsdCkpCisKKworY2xhc3MgRWRpdE1ldGFkYXRhRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgX29yaWdmaWxlID0gIiIiCisjIEEgY29tbWVudAorSEVMTE8gPSAib2xkdmFsdWUiCisKK1RISVMgPSAidGhhdCIKKworIyBBbm90aGVyIGNvbW1lbnQKK05PQ0hBTkdFID0gInNhbWV2YWx1ZSIKK09USEVSID0gJ2Fub3RoZXJ2YWx1ZScKKworTVVMVElMSU5FID0gImExIFxcCisgICAgICAgICAgICAgYTIgXFwKKyAgICAgICAgICAgICBhMyIKKworTVVMVElMSU5FMiA6PSAiIFxcCisgICAgICAgICAgICAgICBiMSBcXAorICAgICAgICAgICAgICAgYjIgXFwKKyAgICAgICAgICAgICAgIGIzIFxcCisgICAgICAgICAgICAgICAiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworZG9fZnVuY3Rpb25uYW1lKCkgeworICAgIGNvbW1hbmQxICR7VkFMMX0gJHtWQUwyfQorICAgIGNvbW1hbmQyICR7VkFMM30gJHtWQUw0fQorfQorIiIiCisgICAgZGVmIF90ZXN0ZWRpdGZpbGUoc2VsZiwgdmFydmFsdWVzLCBjb21wYXJldG8sIGR1bW15dmFycz1Ob25lKToKKyAgICAgICAgaWYgZHVtbXl2YXJzIGlzIE5vbmU6CisgICAgICAgICAgICBkdW1teXZhcnMgPSBbXQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgICAgICB0Zi53cml0ZShzZWxmLl9vcmlnZmlsZSkKKyAgICAgICAgICAgIHRmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YXJjYWxscyA9IFtdCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9maWxlKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YXJuYW1lLCB2YXJ2YWx1ZXMsICdDYWxsYmFjayBjYWxsZWQgZm9yIHZhcmlhYmxlICVzIG5vdCBpbiB0aGUgbGlzdCEnICUgdmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2YXJuYW1lLCBkdW1teXZhcnMsICdDYWxsYmFjayBjYWxsZWQgZm9yIHZhcmlhYmxlICVzIGluIGR1bW15IGxpc3QhJyAlIHZhcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHZhcmNhbGxzLmFwcGVuZCh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFydmFsdWVzW3Zhcm5hbWVdCisKKyAgICAgICAgICAgICAgICBiYi51dGlscy5lZGl0X21ldGFkYXRhX2ZpbGUodGYubmFtZSwgdmFydmFsdWVzLmtleXMoKSwgaGFuZGxlX2ZpbGUpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRmLm5hbWUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIG1vZGZpbGUgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgIyBFbnN1cmUgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSBleHBlY3RlZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBhcmV0by5zcGxpdGxpbmVzKFRydWUpLCBtb2RmaWxlKQorICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3YXMgY2FsbGVkIGZvciBldmVyeSB2YXJpYWJsZSB3ZSBhc2tlZCBmb3IKKyAgICAgICAgICAgICAgICAjIChwbHVzIGFsbG93IHRlc3RpbmcgYmVoYXZpb3VyIHdoZW4gYSByZXF1ZXN0ZWQgdmFyaWFibGUgaXMgbm90IHByZXNlbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodmFydmFsdWVzLmtleXMoKSksIHNvcnRlZCh2YXJjYWxscyArIGR1bW15dmFycykpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zi5uYW1lKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfbm9jaGFuZ2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBmaWxlIGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIHdpdGggbm90aGluZyB0byBkbworICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoe30sIHNlbGYuX29yaWdmaWxlKQorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIG9ubHkgZHVtbXkgdmFyaWFibGVzCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J0RVTU1ZMSc6ICgnc2hvdWxkX25vdF9zZXQnLCBOb25lLCAwLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdEVU1NWTInOiAoJ3Nob3VsZF9ub3Rfc2V0X2FnYWluJywgTm9uZSwgMCwgVHJ1ZSl9LCBzZWxmLl9vcmlnZmlsZSwgZHVtbXl2YXJzPVsnRFVNTVkxJywgJ0RVTU1ZMiddKQorICAgICAgICAjIFRlc3QgZmlsZSBkb2Vzbid0IGdldCBtb2RpZmllZCB3aXRoIHNvbWUgdGhlIHNhbWUgdmFsdWVzCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J1RISVMnOiAoJ3RoYXQnLCBOb25lLCAwLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICgnYW5vdGhlcnZhbHVlJywgTm9uZSwgMCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FMyc6ICgnICAgICAgICAgICAgICAgYzEgICAgICAgICAgICAgICBjMiAgICAgICAgICAgICAgIGMzJywgTm9uZSwgNCwgRmFsc2UpfSwgc2VsZi5fb3JpZ2ZpbGUpCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMShzZWxmKToKKworICAgICAgICBuZXdmaWxlMSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm5ld3ZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAiIFxcCisgICAgICAgICAgICAgIGMxIFxcCisgICAgICAgICAgICAgIGMyIFxcCisgICAgICAgICAgICAgIGMzIFxcCisiCisKK2RvX2Z1bmN0aW9ubmFtZSgpIHsKKyAgICBjb21tYW5kMSAke1ZBTDF9ICR7VkFMMn0KKyAgICBjb21tYW5kMiAke1ZBTDN9ICR7VkFMNH0KK30KKyIiIgorICAgICAgICBzZWxmLl90ZXN0ZWRpdGZpbGUoeydIRUxMTyc6ICgnbmV3dmFsdWUnLCBOb25lLCA0LCBUcnVlKX0sIG5ld2ZpbGUxKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfMihzZWxmKToKKworICAgICAgICBuZXdmaWxlMiA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICIgXFwKKyAgICBkMSBcXAorICAgIGQyIFxcCisgICAgZDMgXFwKKyAgICAiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKK01VTFRJTElORTMgPSAibm93c2luZ2xlIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKyAgICAgICAgc2VsZi5fdGVzdGVkaXRmaWxlKHsnTVVMVElMSU5FJzogKFsnZDEnLCdkMicsJ2QzJ10sIE5vbmUsIDQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUzJzogKCdub3dzaW5nbGUnLCBOb25lLCA0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdOT1RQUkVTRU5UJzogKFsnYScsICdiJ10sIE5vbmUsIDQsIEZhbHNlKX0sIG5ld2ZpbGUyLCBkdW1teXZhcnM9WydOT1RQUkVTRU5UJ10pCisKKworICAgIGRlZiB0ZXN0X2VkaXRfbWV0YWRhdGFfZmlsZV8zKHNlbGYpOgorCisgICAgICAgIG5ld2ZpbGUzID0gIiIiCisjIEEgY29tbWVudAorSEVMTE8gPSAib2xkdmFsdWUiCisKKyMgQW5vdGhlciBjb21tZW50CitOT0NIQU5HRSA9ICJzYW1ldmFsdWUiCitPVEhFUiA9ICJ5ZXRhbm90aGVydmFsdWUiCisKK01VTFRJTElORSA9ICJlMSBcXAorICAgICAgICAgICAgIGUyIFxcCisgICAgICAgICAgICAgZTMgXFwKKyAgICAgICAgICAgICAiCisKK01VTFRJTElORTIgOj0gImYxIFxcCitcdGYyIFxcCitcdCIKKworCitNVUxUSUxJTkUzID0gIiBcXAorICAgICAgICAgICAgICBjMSBcXAorICAgICAgICAgICAgICBjMiBcXAorICAgICAgICAgICAgICBjMyBcXAorIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgb3RoZXJjb21tYW5kX29uZSBhIGIgYworICAgIG90aGVyY29tbWFuZF90d28gZCBlIGYKK30KKyIiIgorCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J2RvX2Z1bmN0aW9ubmFtZSgpJzogKFsnb3RoZXJjb21tYW5kX29uZSBhIGIgYycsICdvdGhlcmNvbW1hbmRfdHdvIGQgZSBmJ10sIE5vbmUsIDQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUyJzogKFsnZjEnLCAnZjInXSwgTm9uZSwgJ1x0JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElMSU5FJzogKFsnZTEnLCAnZTInLCAnZTMnXSwgTm9uZSwgLTEsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1RISVMnOiAoTm9uZSwgTm9uZSwgMCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ09USEVSJzogKCd5ZXRhbm90aGVydmFsdWUnLCBOb25lLCAwLCBUcnVlKX0sIG5ld2ZpbGUzKQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhX2ZpbGVfNChzZWxmKToKKworICAgICAgICBuZXdmaWxlNCA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gIm9sZHZhbHVlIgorCitUSElTID0gInRoYXQiCisKKyMgQW5vdGhlciBjb21tZW50CitPVEhFUiA9ICdhbm90aGVydmFsdWUnCisKK01VTFRJTElORSA9ICJhMSBcXAorICAgICAgICAgICAgIGEyIFxcCisgICAgICAgICAgICAgYTMiCisKK01VTFRJTElORTIgOj0gIiBcXAorICAgICAgICAgICAgICAgYjEgXFwKKyAgICAgICAgICAgICAgIGIyIFxcCisgICAgICAgICAgICAgICBiMyBcXAorICAgICAgICAgICAgICAgIgorCisKKyIiIgorCisgICAgICAgIHNlbGYuX3Rlc3RlZGl0ZmlsZSh7J05PQ0hBTkdFJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdNVUxUSUxJTkUzJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdUSElTJzogKCd0aGF0JywgTm9uZSwgMCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2Z1bmN0aW9ubmFtZSgpJzogKE5vbmUsIE5vbmUsIDAsIEZhbHNlKX0sIG5ld2ZpbGU0KQorCisKKyAgICBkZWYgdGVzdF9lZGl0X21ldGFkYXRhKHNlbGYpOgorICAgICAgICBuZXdmaWxlNSA9ICIiIgorIyBBIGNvbW1lbnQKK0hFTExPID0gImhpdGhlcmUiCisKKyMgQSBuZXcgY29tbWVudAorVEhJUyArPSAidGhhdCIKKworIyBBbm90aGVyIGNvbW1lbnQKK05PQ0hBTkdFID0gInNhbWV2YWx1ZSIKK09USEVSID0gJ2Fub3RoZXJ2YWx1ZScKKworTVVMVElMSU5FID0gImExIFxcCisgICAgICAgICAgICAgYTIgXFwKKyAgICAgICAgICAgICBhMyIKKworTVVMVElMSU5FMiA6PSAiIFxcCisgICAgICAgICAgICAgICBiMSBcXAorICAgICAgICAgICAgICAgYjIgXFwKKyAgICAgICAgICAgICAgIGIzIFxcCisgICAgICAgICAgICAgICAiCisKKworTVVMVElMSU5FMyA9ICIgXFwKKyAgICAgICAgICAgICAgYzEgXFwKKyAgICAgICAgICAgICAgYzIgXFwKKyAgICAgICAgICAgICAgYzMgXFwKKyIKKworTkVXVkFSID0gInZhbHVlIgorCitkb19mdW5jdGlvbm5hbWUoKSB7CisgICAgY29tbWFuZDEgJHtWQUwxfSAke1ZBTDJ9CisgICAgY29tbWFuZDIgJHtWQUwzfSAke1ZBTDR9Cit9CisiIiIKKworCisgICAgICAgIGRlZiBoYW5kbGVfdmFyKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ1RISVMnOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnIyBBIG5ldyBjb21tZW50XG4nKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lID09ICdkb19mdW5jdGlvbm5hbWUoKSc6CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCdORVdWQVIgPSAidmFsdWUiXG4nKQorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnXG4nKQorICAgICAgICAgICAgdmFsdWVpdGVtID0gdmFydmFsdWVzLmdldCh2YXJuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWVpdGVtOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZWl0ZW0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIG9wLCAwLCBUcnVlKQorCisgICAgICAgIHZhcnZhbHVlcyA9IHsnSEVMTE8nOiAoJ2hpdGhlcmUnLCBOb25lLCAwLCBUcnVlKSwgJ1RISVMnOiAoJ3RoYXQnLCAnKz0nLCAwLCBUcnVlKX0KKyAgICAgICAgdmFybGlzdCA9IFsnSEVMTE8nLCAnVEhJUycsICdkb19mdW5jdGlvbm5hbWUoKSddCisgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKHNlbGYuX29yaWdmaWxlLnNwbGl0bGluZXMoVHJ1ZSksIHZhcmxpc3QsIGhhbmRsZV92YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGRhdGVkLCAnTGlzdCBzaG91bGQgYmUgdXBkYXRlZCBidXQgaXNuXCd0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdsaW5lcywgbmV3ZmlsZTUuc3BsaXRsaW5lcyhUcnVlKSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3RpbmZvaWwucHkgYi9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTQ2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi90aW5mb2lsLnB5CkBAIC0wLDAgKzEsMTA0IEBACisjIHRpbmZvaWw6IGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGNvb2tlciBmb3IgYml0YmFrZS1iYXNlZCBjb21tYW5kLWxpbmUgdXRpbGl0aWVzCisjCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTWVudG9yIEdyYXBoaWNzIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworaW1wb3J0IGJiLmNhY2hlCitpbXBvcnQgYmIuY29va2VyCitpbXBvcnQgYmIucHJvdmlkZXJzCitpbXBvcnQgYmIudXRpbHMKK2Zyb20gYmIuY29va2VyIGltcG9ydCBzdGF0ZSwgQkJDb29rZXIsIENvb2tlckZlYXR1cmVzCitmcm9tIGJiLmNvb2tlcmRhdGEgaW1wb3J0IENvb2tlckNvbmZpZ3VyYXRpb24sIENvbmZpZ1BhcmFtZXRlcnMKK2ltcG9ydCBiYi5mZXRjaDIKKworY2xhc3MgVGluZm9pbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0PXN5cy5zdGRvdXQsIHRyYWNraW5nPUZhbHNlKToKKyAgICAgICAgIyBOZWVkZWQgdG8gYXZvaWQgZGVwcmVjYXRpb24gd2FybmluZ3Mgd2l0aCBweXRob24gMi42CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgIyBTZXQgdXAgbG9nZ2luZworICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlJykKKyAgICAgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihvdXRwdXQpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGUpCisgICAgICAgIGZvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICBpZiBvdXRwdXQuaXNhdHR5KCk6CisgICAgICAgICAgICBmb3JtYXQuZW5hYmxlX2NvbG9yKCkKKyAgICAgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0KQorICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisKKyAgICAgICAgc2VsZi5jb25maWcgPSBDb29rZXJDb25maWd1cmF0aW9uKCkKKyAgICAgICAgY29uZmlncGFyYW1zID0gVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMocGFyc2Vfb25seT1UcnVlKQorICAgICAgICBzZWxmLmNvbmZpZy5zZXRDb25maWdQYXJhbWV0ZXJzKGNvbmZpZ3BhcmFtcykKKyAgICAgICAgc2VsZi5jb25maWcuc2V0U2VydmVyUmVnSWRsZUNhbGxiYWNrKHNlbGYucmVnaXN0ZXJfaWRsZV9mdW5jdGlvbikKKyAgICAgICAgZmVhdHVyZXMgPSBbXQorICAgICAgICBpZiB0cmFja2luZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLmFwcGVuZChDb29rZXJGZWF0dXJlcy5CQVNFREFUQVNUT1JFX1RSQUNLSU5HKQorICAgICAgICBzZWxmLmNvb2tlciA9IEJCQ29va2VyKHNlbGYuY29uZmlnLCBmZWF0dXJlcykKKyAgICAgICAgc2VsZi5jb25maWdfZGF0YSA9IHNlbGYuY29va2VyLmRhdGEKKyAgICAgICAgYmIucHJvdmlkZXJzLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBzZWxmLmNvb2tlcl9kYXRhID0gTm9uZQorCisgICAgZGVmIHJlZ2lzdGVyX2lkbGVfZnVuY3Rpb24oc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2VSZWNpcGVzKHNlbGYpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQYXJzaW5nIHJlY2lwZXMuLiIpCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBzZWxmLmNvb2tlci5zdGF0ZSBpbiAoc3RhdGUuaW5pdGlhbCwgc3RhdGUucGFyc2luZyk6CisgICAgICAgICAgICAgICAgc2VsZi5jb29rZXIudXBkYXRlQ2FjaGUoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmNvb2tlci5zaHV0ZG93bigpCisgICAgICAgICAgICBzZWxmLmNvb2tlci51cGRhdGVDYWNoZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiZG9uZS5cbiIpCisKKyAgICAgICAgc2VsZi5jb29rZXJfZGF0YSA9IHNlbGYuY29va2VyLnJlY2lwZWNhY2hlCisKKyAgICBkZWYgcHJlcGFyZShzZWxmLCBjb25maWdfb25seSA9IEZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYuY29va2VyX2RhdGE6CisgICAgICAgICAgICBpZiBjb25maWdfb25seToKKyAgICAgICAgICAgICAgICBzZWxmLmNvb2tlci5wYXJzZUNvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgICAgIHNlbGYuY29va2VyX2RhdGEgPSBzZWxmLmNvb2tlci5yZWNpcGVjYWNoZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlUmVjaXBlcygpCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY29va2VyLnNodXRkb3duKGZvcmNlPVRydWUpCisgICAgICAgIHNlbGYuY29va2VyLnBvc3Rfc2VydmUoKQorICAgICAgICBzZWxmLmNvb2tlci51bmxvY2tCaXRiYWtlKCkKKworY2xhc3MgVGluZm9pbENvbmZpZ1BhcmFtZXRlcnMoQ29uZmlnUGFyYW1ldGVycyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKyAgICAgICAgc2VsZi5pbml0aWFsX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHN1cGVyKFRpbmZvaWxDb25maWdQYXJhbWV0ZXJzLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgcGFyc2VDb21tYW5kTGluZShzZWxmLCBhcmd2PXN5cy5hcmd2KToKKyAgICAgICAgY2xhc3MgRHVtbXlPcHRpb25zOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRpYWxfb3B0aW9ucyk6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIGluaXRpYWxfb3B0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsKQorCisgICAgICAgIHJldHVybiBEdW1teU9wdGlvbnMoc2VsZi5pbml0aWFsX29wdGlvbnMpLCBOb25lCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL2JiL3VpL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ODA1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE3IEBACisjCisjIEJpdEJha2UgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9idWlsZGluZm9oZWxwZXIucHkgYi9iaXRiYWtlL2xpYi9iYi91aS9idWlsZGluZm9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxZWQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2J1aWxkaW5mb2hlbHBlci5weQpAQCAtMCwwICsxLDEzMzkgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGJiCitpbXBvcnQgcmUKK2ltcG9ydCBvcworCitvcy5lbnZpcm9uWyJESkFOR09fU0VUVElOR1NfTU9EVUxFIl0gPSAidG9hc3Rlci50b2FzdGVybWFpbi5zZXR0aW5ncyIKKworCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKworCitkZWYgX2NvbmZpZ3VyZV90b2FzdGVyKCk6CisgICAgIiIiIEFkZCB0b2FzdGVyIHRvIHN5cyBwYXRoIGZvciBpbXBvcnRpbmcgbW9kdWxlcworICAgICIiIgorICAgIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSksICd0b2FzdGVyJykpCitfY29uZmlndXJlX3RvYXN0ZXIoKQorCitmcm9tIHRvYXN0ZXIub3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRhc2ssIFJlY2lwZSwgTGF5ZXJfVmVyc2lvbiwgTGF5ZXIsIFRhcmdldCwgTG9nTWVzc2FnZSwgSGVscFRleHQKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBUYXJnZXRfSW1hZ2VfRmlsZSwgQnVpbGRBcnRpZmFjdAorZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IFZhcmlhYmxlLCBWYXJpYWJsZUhpc3RvcnkKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBQYWNrYWdlLCBQYWNrYWdlX0ZpbGUsIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZSwgVGFyZ2V0X0ZpbGUKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBUYXNrX0RlcGVuZGVuY3ksIFBhY2thZ2VfRGVwZW5kZW5jeQorZnJvbSB0b2FzdGVyLm9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZV9EZXBlbmRlbmN5CisKK2Zyb20gdG9hc3Rlci5vcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0Citmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCdWlsZFJlcXVlc3QKKworZnJvbSBiYi5tc2cgaW1wb3J0IEJCTG9nRm9ybWF0dGVyIGFzIGZvcm1hdHRlcgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbiwgY29ubmVjdGlvbgorCisjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyMgdGhlIGxvZ2dlciBuYW1lIGlzIHN0YW5kYXJkIHRocm91Z2hvdXQgQml0QmFrZQorbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJMb2dnZXIiKQorCisKK2NsYXNzIE5vdEV4aXN0aW5nKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBPUk1XcmFwcGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgY3JlYXRlcyB0aGUgZGljdGlvbmFyaWVzIG5lZWRlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgZm9sbG93aW5nIHRoZSBmb3JtYXQgZGVmaW5lZCBieSB0aGUgRGphbmdvIG1vZGVscy4gSXQgaXMgYWxzbyB1c2VkIHRvIHNhdmUgdGhpcworICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YWJhc2UuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGF5ZXJfdmVyc2lvbl9vYmplY3RzID0gW10KKyAgICAgICAgc2VsZi50YXNrX29iamVjdHMgPSB7fQorICAgICAgICBzZWxmLnJlY2lwZV9vYmplY3RzID0ge30KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2J1aWxkX2tleSgqKmt3YXJncyk6CisgICAgICAgIGtleSA9ICIwIgorICAgICAgICBmb3IgayBpbiBzb3J0ZWQoa3dhcmdzLmtleXMoKSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGt3YXJnc1trXSwgbW9kZWxzLk1vZGVsKToKKyAgICAgICAgICAgICAgICBrZXkgKz0gIi0lZCIgJSBrd2FyZ3Nba10uaWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2V5ICs9ICItJXMiICUgc3RyKGt3YXJnc1trXSkKKyAgICAgICAgcmV0dXJuIGtleQorCisKKyAgICBkZWYgX2NhY2hlZF9nZXRfb3JfY3JlYXRlKHNlbGYsIGNsYXp6LCAqKmt3YXJncyk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgbWVtb3J5LWNhY2hlZCBnZXRfb3JfY3JlYXRlLiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0cyB3aWxsIG5vdCBiZSBjcmVhdGVkIGluIHRoZQorICAgICAgICAgICAgZGF0YWJhc2UgdGhyb3VnaCBhbnkgb3RoZXIgbWVhbnMuCisgICAgICAgICIiIgorCisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKGNsYXp6LCBtb2RlbHMuTW9kZWwpLCAiX2NhY2hlZF9nZXRfb3JfY3JlYXRlIG5lZWRzIHRvIGdldCB0aGUgY2xhc3MgYXMgZmlyc3QgYXJndW1lbnQiCisKKyAgICAgICAga2V5ID0gT1JNV3JhcHBlci5fYnVpbGRfa2V5KCoqa3dhcmdzKQorICAgICAgICBkaWN0bmFtZSA9ICJvYmplY3RzXyVzIiAlIGNsYXp6Ll9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBkaWN0bmFtZSBpbiB2YXJzKHNlbGYpLmtleXMoKToKKyAgICAgICAgICAgIHZhcnMoc2VsZilbZGljdG5hbWVdID0ge30KKworICAgICAgICBjcmVhdGVkID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGtleSBpbiB2YXJzKHNlbGYpW2RpY3RuYW1lXS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldID0gY2xhenoub2JqZWN0cy5jcmVhdGUoKiprd2FyZ3MpCisgICAgICAgICAgICBjcmVhdGVkID0gVHJ1ZQorCisgICAgICAgIHJldHVybiAodmFycyhzZWxmKVtkaWN0bmFtZV1ba2V5XSwgY3JlYXRlZCkKKworCisgICAgZGVmIF9jYWNoZWRfZ2V0KHNlbGYsIGNsYXp6LCAqKmt3YXJncyk6CisgICAgICAgICIiIiBUaGlzIGlzIGEgbWVtb3J5LWNhY2hlZCBnZXQuIFdlIGFzc3VtZSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgbm90IGNoYW5nZSAgaW4gdGhlIGRhdGFiYXNlIGJldHdlZW4gZ2V0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKGNsYXp6LCBtb2RlbHMuTW9kZWwpLCAiX2NhY2hlZF9nZXQgbmVlZHMgdG8gZ2V0IHRoZSBjbGFzcyBhcyBmaXJzdCBhcmd1bWVudCIKKworICAgICAgICBrZXkgPSBPUk1XcmFwcGVyLl9idWlsZF9rZXkoKiprd2FyZ3MpCisgICAgICAgIGRpY3RuYW1lID0gIm9iamVjdHNfJXMiICUgY2xhenouX19uYW1lX18KKworICAgICAgICBpZiBub3QgZGljdG5hbWUgaW4gdmFycyhzZWxmKS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXSA9IHt9CisKKyAgICAgICAgaWYgbm90IGtleSBpbiB2YXJzKHNlbGYpW2RpY3RuYW1lXS5rZXlzKCk6CisgICAgICAgICAgICB2YXJzKHNlbGYpW2RpY3RuYW1lXVtrZXldID0gY2xhenoub2JqZWN0cy5nZXQoKiprd2FyZ3MpCisKKyAgICAgICAgcmV0dXJuIHZhcnMoc2VsZilbZGljdG5hbWVdW2tleV0KKworICAgICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCisgICAgIyB3ZSBkaXNhYmxlIGRldGVjdGlvbiBvZiBubyBzZWxmIHVzZSBpbiBmdW5jdGlvbnMgYmVjYXVzZSB0aGUgbWV0aG9kcyBhY3R1YWxseSB3b3JrIG9uIHRoZSBvYmplY3QKKyAgICAjIGV2ZW4gaWYgdGhleSBkb24ndCB0b3VjaCBzZWxmIGFueXdoZXJlCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCisgICAgIyB3ZSBkbyBub3QgZm9sbG93IHRoZSBweXRob24gY29udmVudGlvbnMgZm9yIGNvbnRpbnVhdGlvbiBpbmRlbnRhdGlvbiBkdWUgdG8gbG9uZyBsaW5lcyBoZXJlCisKKyAgICBkZWYgY3JlYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZF9pbmZvLCBicmJlLCBwcm9qZWN0X2lkKToKKyAgICAgICAgYXNzZXJ0ICdtYWNoaW5lJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnZGlzdHJvJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnZGlzdHJvX3ZlcnNpb24nIGluIGJ1aWxkX2luZm8KKyAgICAgICAgYXNzZXJ0ICdzdGFydGVkX29uJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnY29va2VyX2xvZ19wYXRoJyBpbiBidWlsZF9pbmZvCisgICAgICAgIGFzc2VydCAnYnVpbGRfbmFtZScgaW4gYnVpbGRfaW5mbworICAgICAgICBhc3NlcnQgJ2JpdGJha2VfdmVyc2lvbicgaW4gYnVpbGRfaW5mbworCisgICAgICAgIHByaiA9IE5vbmUKKyAgICAgICAgYnVpbGRyZXF1ZXN0ID0gTm9uZQorICAgICAgICBpZiBicmJlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICMgdGhpcyBidWlsZCB3YXMgdHJpZ2dlcmVkIGJ5IGEgcmVxdWVzdCBmcm9tIGEgdXNlcgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJyYmUgaXMgJXMiICUgYnJiZSkKKyAgICAgICAgICAgIGJyLCBfID0gYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicikKKyAgICAgICAgICAgIHByaiA9IGJ1aWxkcmVxdWVzdC5wcm9qZWN0CisKKyAgICAgICAgZWxpZiBwcm9qZWN0X2lkIGlzIG5vdCBOb25lOiAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBzeXN0ZW0gZm9yIGEgc3BlY2lmaWMgcHJvamVjdAorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IHByb2plY3QgaXMgJXMiICUgcHJqKQorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChwayA9IHByb2plY3RfaWQpCisKKyAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgYnVpbGQgd2FzIHRyaWdnZXJlZCBieSBhIGxlZ2FjeSBzeXN0ZW0sIG9yIGNvbW1hbmQgbGluZSBpbnRlcmFjdGl2ZSBtb2RlCisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0X2RlZmF1bHRfcHJvamVjdCgpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgImJ1aWxkaW5mb2hlbHBlcjogcHJvamVjdCBpcyBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvICVzIiAlIHByaikKKworCisgICAgICAgIGlmIGJ1aWxkcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkID0gYnVpbGRyZXF1ZXN0LmJ1aWxkCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgZXhpc3RpbmcgYnVpbGQsIHdpdGggJXMiLCBidWlsZF9pbmZvKQorICAgICAgICAgICAgYnVpbGQucHJvamVjdCA9IHByagorICAgICAgICAgICAgYnVpbGQubWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10KKyAgICAgICAgICAgIGJ1aWxkLmRpc3Rybz1idWlsZF9pbmZvWydkaXN0cm8nXQorICAgICAgICAgICAgYnVpbGQuZGlzdHJvX3ZlcnNpb249YnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXQorICAgICAgICAgICAgYnVpbGQuY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddCisgICAgICAgICAgICBidWlsZC5idWlsZF9uYW1lPWJ1aWxkX2luZm9bJ2J1aWxkX25hbWUnXQorICAgICAgICAgICAgYnVpbGQuYml0YmFrZV92ZXJzaW9uPWJ1aWxkX2luZm9bJ2JpdGJha2VfdmVyc2lvbiddCisgICAgICAgICAgICBidWlsZC5zYXZlKCkKKworICAgICAgICAgICAgVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGQpLmRlbGV0ZSgpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZT1idWlsZF9pbmZvWydtYWNoaW5lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm89YnVpbGRfaW5mb1snZGlzdHJvJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm9fdmVyc2lvbj1idWlsZF9pbmZvWydkaXN0cm9fdmVyc2lvbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1idWlsZF9pbmZvWydzdGFydGVkX29uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfb249YnVpbGRfaW5mb1snc3RhcnRlZF9vbiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyX2xvZ19wYXRoPWJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfbmFtZT1idWlsZF9pbmZvWydidWlsZF9uYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRiYWtlX3ZlcnNpb249YnVpbGRfaW5mb1snYml0YmFrZV92ZXJzaW9uJ10pCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICJidWlsZGluZm9oZWxwZXI6IGJ1aWxkIGlzIGNyZWF0ZWQgJXMiICUgYnVpbGQpCisKKyAgICAgICAgaWYgYnVpbGRyZXF1ZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYnVpbGRyZXF1ZXN0LmJ1aWxkID0gYnVpbGQKKyAgICAgICAgICAgIGJ1aWxkcmVxdWVzdC5zYXZlKCkKKworICAgICAgICByZXR1cm4gYnVpbGQKKworICAgIGRlZiBjcmVhdGVfdGFyZ2V0X29iamVjdHMoc2VsZiwgdGFyZ2V0X2luZm8pOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiB0YXJnZXRfaW5mbworICAgICAgICBhc3NlcnQgJ3RhcmdldHMnIGluIHRhcmdldF9pbmZvCisKKyAgICAgICAgdGFyZ2V0cyA9IFtdCisgICAgICAgIGZvciB0Z3RfbmFtZSBpbiB0YXJnZXRfaW5mb1sndGFyZ2V0cyddOgorICAgICAgICAgICAgdGd0X29iamVjdCA9IFRhcmdldC5vYmplY3RzLmNyZWF0ZSggYnVpbGQgPSB0YXJnZXRfaW5mb1snYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRndF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2UgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKHRndF9vYmplY3QpCisgICAgICAgIHJldHVybiB0YXJnZXRzCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX29iamVjdChzZWxmLCBidWlsZCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGQsQnVpbGQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVycm9ycywgaW50KQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh3YXJuaW5ncywgaW50KQorCisgICAgICAgIG91dGNvbWUgPSBCdWlsZC5TVUNDRUVERUQKKyAgICAgICAgaWYgZXJyb3JzIG9yIHRhc2tmYWlsdXJlczoKKyAgICAgICAgICAgIG91dGNvbWUgPSBCdWlsZC5GQUlMRUQKKworICAgICAgICBidWlsZC5jb21wbGV0ZWRfb24gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZC5vdXRjb21lID0gb3V0Y29tZQorICAgICAgICBidWlsZC5zYXZlKCkKKworICAgIGRlZiB1cGRhdGVfdGFyZ2V0X3NldF9saWNlbnNlX21hbmlmZXN0KHNlbGYsIHRhcmdldCwgbGljZW5zZV9tYW5pZmVzdF9wYXRoKToKKyAgICAgICAgdGFyZ2V0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCA9IGxpY2Vuc2VfbWFuaWZlc3RfcGF0aAorICAgICAgICB0YXJnZXQuc2F2ZSgpCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV90YXNrX29iamVjdChzZWxmLCB0YXNrX2luZm9ybWF0aW9uLCBtdXN0X2V4aXN0ID0gRmFsc2UpOgorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiB0YXNrX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAncmVjaXBlJyBpbiB0YXNrX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAndGFza19uYW1lJyBpbiB0YXNrX2luZm9ybWF0aW9uCisKKyAgICAgICAgIyB3ZSB1c2UgbXVzdF9leGlzdCBpbmZvIGZvciBkYXRhYmFzZSBsb29rLXVwIG9wdGltaXphdGlvbgorICAgICAgICB0YXNrX29iamVjdCwgY3JlYXRlZCA9IHNlbGYuX2NhY2hlZF9nZXRfb3JfY3JlYXRlKFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZD10YXNrX2luZm9ybWF0aW9uWydidWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlPXRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFza19uYW1lPXRhc2tfaW5mb3JtYXRpb25bJ3Rhc2tfbmFtZSddCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGlmIGNyZWF0ZWQgYW5kIG11c3RfZXhpc3Q6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydkZWJ1ZyddID0gImJ1aWxkIGlkICVkLCByZWNpcGUgaWQgJWQiICUgKHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10ucGssIHRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddLnBrKQorICAgICAgICAgICAgcmFpc2UgTm90RXhpc3RpbmcoIlRhc2sgb2JqZWN0IGNyZWF0ZWQgd2hlbiBleHBlY3RlZCB0byBleGlzdCIsIHRhc2tfaW5mb3JtYXRpb24pCisKKyAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiBpbiB2YXJzKHRhc2tfb2JqZWN0KToKKyAgICAgICAgICAgIGlmIHYgaW4gdGFza19pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgdmFycyh0YXNrX29iamVjdClbdl0gIT0gdGFza19pbmZvcm1hdGlvblt2XToKKyAgICAgICAgICAgICAgICAgICAgdmFycyh0YXNrX29iamVjdClbdl0gPSB0YXNrX2luZm9ybWF0aW9uW3ZdCisgICAgICAgICAgICAgICAgICAgIG9iamVjdF9jaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICMgdXBkYXRlIHNldHNjZW5lLXJlbGF0ZWQgaW5mb3JtYXRpb24gaWYgdGhlIHRhc2sgaGFzIGEgc2V0c2NlbmUKKyAgICAgICAgaWYgdGFza19vYmplY3Qub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBhbmQgMSA9PSB0YXNrX29iamVjdC5nZXRfcmVsYXRlZF9zZXRzY2VuZSgpLmNvdW50KCk6CisgICAgICAgICAgICB0YXNrX29iamVjdC5vdXRjb21lID0gVGFzay5PVVRDT01FX0NBQ0hFRAorICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgICAgIG91dGNvbWVfdGFza19zZXRzY2VuZSA9IFRhc2sub2JqZWN0cy5nZXQodGFza19leGVjdXRlZD1UcnVlLCBidWlsZCA9IHRhc2tfb2JqZWN0LmJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlID0gdGFza19vYmplY3QucmVjaXBlLCB0YXNrX25hbWU9dGFza19vYmplY3QudGFza19uYW1lKyJfc2V0c2NlbmUiKS5vdXRjb21lCisgICAgICAgICAgICBpZiBvdXRjb21lX3Rhc2tfc2V0c2NlbmUgPT0gVGFzay5PVVRDT01FX1NVQ0NFU1M6CisgICAgICAgICAgICAgICAgdGFza19vYmplY3Quc3N0YXRlX3Jlc3VsdCA9IFRhc2suU1NUQVRFX1JFU1RPUkVECisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG91dGNvbWVfdGFza19zZXRzY2VuZSA9PSBUYXNrLk9VVENPTUVfRkFJTEVEOgorICAgICAgICAgICAgICAgIHRhc2tfb2JqZWN0LnNzdGF0ZV9yZXN1bHQgPSBUYXNrLlNTVEFURV9GQUlMRUQKKyAgICAgICAgICAgICAgICBvYmplY3RfY2hhbmdlZCA9IFRydWUKKworICAgICAgICAjIG1hcmsgZG93biBkdXJhdGlvbiBpZiB3ZSBoYXZlIGEgc3RhcnQgdGltZSBhbmQgYSBjdXJyZW50IHRpbWUKKyAgICAgICAgaWYgJ3N0YXJ0X3RpbWUnIGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpIGFuZCAnZW5kX3RpbWUnIGluIHRhc2tfaW5mb3JtYXRpb24ua2V5cygpOgorICAgICAgICAgICAgZHVyYXRpb24gPSB0YXNrX2luZm9ybWF0aW9uWydlbmRfdGltZSddIC0gdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddCisgICAgICAgICAgICB0YXNrX29iamVjdC5lbGFwc2VkX3RpbWUgPSBkdXJhdGlvbgorICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBkZWwgdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddCisgICAgICAgICAgICBkZWwgdGFza19pbmZvcm1hdGlvblsnZW5kX3RpbWUnXQorCisgICAgICAgIGlmIG9iamVjdF9jaGFuZ2VkOgorICAgICAgICAgICAgdGFza19vYmplY3Quc2F2ZSgpCisgICAgICAgIHJldHVybiB0YXNrX29iamVjdAorCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHNlbGYsIHJlY2lwZV9pbmZvcm1hdGlvbiwgbXVzdF9leGlzdCA9IEZhbHNlKToKKyAgICAgICAgYXNzZXJ0ICdsYXllcl92ZXJzaW9uJyBpbiByZWNpcGVfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdmaWxlX3BhdGgnIGluIHJlY2lwZV9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3BhdGhmbGFncycgaW4gcmVjaXBlX2luZm9ybWF0aW9uCisKKyAgICAgICAgYXNzZXJ0IG5vdCByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgoIi8iKSAgICAgICMgd2Ugc2hvdWxkIGhhdmUgbGF5ZXItcmVsYXRpdmUgcGF0aHMgYXQgYWxsIHRpbWVzCisKKyAgICAgICAgcmVjaXBlX29iamVjdCwgY3JlYXRlZCA9IHNlbGYuX2NhY2hlZF9nZXRfb3JfY3JlYXRlKFJlY2lwZSwgbGF5ZXJfdmVyc2lvbj1yZWNpcGVfaW5mb3JtYXRpb25bJ2xheWVyX3ZlcnNpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg9cmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXSwgcGF0aGZsYWdzID0gcmVjaXBlX2luZm9ybWF0aW9uWydwYXRoZmxhZ3MnXSkKKyAgICAgICAgaWYgY3JlYXRlZCBhbmQgbXVzdF9leGlzdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEV4aXN0aW5nKCJSZWNpcGUgb2JqZWN0IGNyZWF0ZWQgd2hlbiBleHBlY3RlZCB0byBleGlzdCIsIHJlY2lwZV9pbmZvcm1hdGlvbikKKworICAgICAgICBvYmplY3RfY2hhbmdlZCA9IEZhbHNlCisgICAgICAgIGZvciB2IGluIHZhcnMocmVjaXBlX29iamVjdCk6CisgICAgICAgICAgICBpZiB2IGluIHJlY2lwZV9pbmZvcm1hdGlvbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgb2JqZWN0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgdmFycyhyZWNpcGVfb2JqZWN0KVt2XSA9IHJlY2lwZV9pbmZvcm1hdGlvblt2XQorCisgICAgICAgIGlmIG9iamVjdF9jaGFuZ2VkOgorICAgICAgICAgICAgcmVjaXBlX29iamVjdC5zYXZlKCkKKworICAgICAgICByZXR1cm4gcmVjaXBlX29iamVjdAorCisgICAgZGVmIGdldF91cGRhdGVfbGF5ZXJfdmVyc2lvbl9vYmplY3Qoc2VsZiwgYnVpbGRfb2JqLCBsYXllcl9vYmosIGxheWVyX3ZlcnNpb25faW5mb3JtYXRpb24pOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9vYmosIEJ1aWxkKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShsYXllcl9vYmosIExheWVyKQorICAgICAgICBhc3NlcnQgJ2JyYW5jaCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2NvbW1pdCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ3ByaW9yaXR5JyBpbiBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uCisgICAgICAgIGFzc2VydCAnbG9jYWxfcGF0aCcgaW4gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbgorCisgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqZWN0LCBfID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCA9IGJ1aWxkX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyID0gbGF5ZXJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsnYnJhbmNoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXQgPSBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uWydjb21taXQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvblsncHJpb3JpdHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3BhdGggPSBsYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uWydsb2NhbF9wYXRoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5sYXllcl92ZXJzaW9uX29iamVjdHMuYXBwZW5kKGxheWVyX3ZlcnNpb25fb2JqZWN0KQorCisgICAgICAgIHJldHVybiBsYXllcl92ZXJzaW9uX29iamVjdAorCisgICAgZGVmIGdldF91cGRhdGVfbGF5ZXJfb2JqZWN0KHNlbGYsIGxheWVyX2luZm9ybWF0aW9uLCBicmJlKToKKyAgICAgICAgYXNzZXJ0ICduYW1lJyBpbiBsYXllcl9pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xheWVyX2luZGV4X3VybCcgaW4gbGF5ZXJfaW5mb3JtYXRpb24KKworICAgICAgICBpZiBicmJlIGlzIE5vbmU6CisgICAgICAgICAgICBsYXllcl9vYmplY3QsIF8gPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bGF5ZXJfaW5mb3JtYXRpb25bJ25hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfaW5kZXhfdXJsPWxheWVyX2luZm9ybWF0aW9uWydsYXllcl9pbmRleF91cmwnXSkKKyAgICAgICAgICAgIHJldHVybiBsYXllcl9vYmplY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgd2UgYXJlIHVuZGVyIG1hbmFnZWQgbW9kZTsgd2UgbXVzdCBtYXRjaCB0aGUgbGF5ZXIgdXNlZCBpbiB0aGUgUHJvamVjdCBMYXllcgorICAgICAgICAgICAgYnJfaWQsIGJlX2lkID0gYnJiZS5zcGxpdCgiOiIpCisKKyAgICAgICAgICAgICMgZmluZCBsYXllciBieSBjaGVja291dCBwYXRoOworICAgICAgICAgICAgZnJvbSBibGRjb250cm9sIGltcG9ydCBiYmNvbnRyb2xsZXIKKyAgICAgICAgICAgIGJjID0gYmJjb250cm9sbGVyLmdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKHBrID0gYmVfaWQpCisKKyAgICAgICAgICAgICMgd2UgbWlnaHQgaGF2ZSBhIHJhY2UgY29uZGl0aW9uIGhlcmUsIGFzIHRoZSBwcm9qZWN0IGxheWVycyBtYXkgY2hhbmdlIGJldHdlZW4gdGhlIGJ1aWxkIHRyaWdnZXIgYW5kIHRoZSBhY3R1YWwgYnVpbGQgZXhlY3V0aW9uCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4gb25seSBtYXRjaCBvbiB0aGUgbGF5ZXIgbmFtZSwgc28gdGhlIHdvcnN0IHRoaW5nIGNhbiBoYXBwZW4gaXMgYSBtaXMtaWRlbnRpZmljYXRpb24gb2YgdGhlIGxheWVyLCBub3QgYSB0b3RhbCBmYWlsdXJlCisKKyAgICAgICAgICAgICMgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CisgICAgICAgICAgICBidWlsZHJlcXVlc3QgPSBCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkKKyAgICAgICAgICAgIGZvciBicmwgaW4gYnVpbGRyZXF1ZXN0LmJybGF5ZXJfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIGxvY2FsZGlybmFtZSA9IG9zLnBhdGguam9pbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShicmwuZ2l0dXJsLCBicmwuY29tbWl0KSwgYnJsLmRpcnBhdGgpCisgICAgICAgICAgICAgICAgIyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoLCB1bmxlc3MgcnVubmluZyBpbiBIRUFEIG1vZGUgd2hlcmUgdGhlIHBhdGggaXMgYWJzb2x1dGUKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmJlLnNvdXJjZWRpciwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgIkxvY2FsZGlybmFtZSAlcyBsY2FsX3BhdGggJXMiICUgKGxvY2FsZGlybmFtZSwgbGF5ZXJfaW5mb3JtYXRpb25bJ2xvY2FsX3BhdGgnXSkpCisgICAgICAgICAgICAgICAgaWYgbG9jYWxkaXJuYW1lLnN0YXJ0c3dpdGgobGF5ZXJfaW5mb3JtYXRpb25bJ2xvY2FsX3BhdGgnXSk6CisgICAgICAgICAgICAgICAgICAgICMgd2UgbWF0Y2hlZCB0aGUgQlJMYXllciwgYnV0IHdlIG5lZWQgdGhlIGxheWVyX3ZlcnNpb24gdGhhdCBnZW5lcmF0ZWQgdGhpcyBCUjsgcmV2ZXJzZSBvZiB0aGUgUHJvamVjdC5zY2hlZHVsZV9idWlsZCgpCisgICAgICAgICAgICAgICAgICAgICNsb2dnZXIuZGVidWcoMSwgIk1hdGNoZWQgJXMgdG8gQlJsYXllciAlcyIgJSAocGZvcm1hdChsYXllcl9pbmZvcm1hdGlvblsibG9jYWxfcGF0aCJdKSwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBsIGluIGJ1aWxkcmVxdWVzdC5wcm9qZWN0LnByb2plY3RsYXllcl9zZXQuZmlsdGVyKGxheWVyY29tbWl0X19sYXllcl9fbmFtZSA9IGJybC5uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBsLmxheWVyY29tbWl0LmxheWVyLnZjc191cmwgPT0gYnJsLmdpdHVybCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgPSBwbC5sYXllcmNvbW1pdC5sYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNhdmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllcgorCisgICAgICAgICAgICByYWlzZSBOb3RFeGlzdGluZygiVW5pZGVudGlmaWVkIGxheWVyICVzIiAlIHBmb3JtYXQobGF5ZXJfaW5mb3JtYXRpb24pKQorCisKKyAgICBkZWYgc2F2ZV90YXJnZXRfZmlsZV9pbmZvcm1hdGlvbihzZWxmLCBidWlsZF9vYmosIHRhcmdldF9vYmosIGZpbGVkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X29iaiwgVGFyZ2V0KQorICAgICAgICBkaXJzID0gZmlsZWRhdGFbJ2RpcnMnXQorICAgICAgICBmaWxlcyA9IGZpbGVkYXRhWydmaWxlcyddCisgICAgICAgIHN5bXMgPSBmaWxlZGF0YVsnc3ltcyddCisKKyAgICAgICAgIyB3ZSBpbnNlcnQgZGlyZWN0b3JpZXMsIG9yZGVyZWQgYnkgbmFtZSBkZXB0aAorICAgICAgICBmb3IgZCBpbiBzb3J0ZWQoZGlycywga2V5PWxhbWJkYSB4Omxlbih4Wy0xXS5zcGxpdCgiLyIpKSk6CisgICAgICAgICAgICAodXNlciwgZ3JvdXAsIHNpemUpID0gZFsxOjRdCisgICAgICAgICAgICBwZXJtaXNzaW9uID0gZFswXVsxOl0KKyAgICAgICAgICAgIHBhdGggPSBkWzRdLmxzdHJpcCgiLiIpCisgICAgICAgICAgICBpZiBsZW4ocGF0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICAjIHdlIGNyZWF0ZSB0aGUgcm9vdCBkaXJlY3RvcnkgYXMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgICAgICAgICBwYXRoID0gIi8iCisgICAgICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB0Zl9vYmouZGlyZWN0b3J5ID0gdGZfb2JqCisgICAgICAgICAgICAgICAgdGZfb2JqLnNhdmUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlmIGxlbihwYXJlbnRfcGF0aCkgPT0gMDoKKyAgICAgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIgorICAgICAgICAgICAgcGFyZW50X29iaiA9IHNlbGYuX2NhY2hlZF9nZXQoVGFyZ2V0X0ZpbGUsIHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgdGZfb2JqID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0RJUkVDVE9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHBhcmVudF9vYmopCisKKworICAgICAgICAjIHdlIGluc2VydCBmaWxlcworICAgICAgICBmb3IgZCBpbiBmaWxlczoKKyAgICAgICAgICAgICh1c2VyLCBncm91cCwgc2l6ZSkgPSBkWzE6NF0KKyAgICAgICAgICAgIHBlcm1pc3Npb24gPSBkWzBdWzE6XQorICAgICAgICAgICAgcGF0aCA9IGRbNF0ubHN0cmlwKCIuIikKKyAgICAgICAgICAgIHBhcmVudF9wYXRoID0gIi8iLmpvaW4ocGF0aC5zcGxpdCgiLyIpWzpsZW4ocGF0aC5zcGxpdCgiLyIpKSAtIDFdKQorICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfUkVHVUxBUgorICAgICAgICAgICAgaWYgZFswXS5zdGFydHN3aXRoKCdiJyk6CisgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfQkxPQ0sKKyAgICAgICAgICAgIGlmIGRbMF0uc3RhcnRzd2l0aCgnYycpOgorICAgICAgICAgICAgICAgIGlub2RldHlwZSA9IFRhcmdldF9GaWxlLklUWVBFX0NIQVJBQ1RFUgorICAgICAgICAgICAgaWYgZFswXS5zdGFydHN3aXRoKCdwJyk6CisgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRklGTworCisgICAgICAgICAgICB0Zl9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gaW5vZGV0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IHBlcm1pc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9IHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdyb3VwKQorICAgICAgICAgICAgcGFyZW50X29iaiA9IHNlbGYuX2NhY2hlZF9nZXQoVGFyZ2V0X0ZpbGUsIHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorICAgICAgICAgICAgdGZfb2JqLmRpcmVjdG9yeSA9IHBhcmVudF9vYmoKKyAgICAgICAgICAgIHRmX29iai5zYXZlKCkKKworICAgICAgICAjIHdlIGluc2VydCBzeW1saW5rcworICAgICAgICBmb3IgZCBpbiBzeW1zOgorICAgICAgICAgICAgKHVzZXIsIGdyb3VwLCBzaXplKSA9IGRbMTo0XQorICAgICAgICAgICAgcGVybWlzc2lvbiA9IGRbMF1bMTpdCisgICAgICAgICAgICBwYXRoID0gZFs0XS5sc3RyaXAoIi4iKQorICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gZFs2XQorCisgICAgICAgICAgICBwYXJlbnRfcGF0aCA9ICIvIi5qb2luKHBhdGguc3BsaXQoIi8iKVs6bGVuKHBhdGguc3BsaXQoIi8iKSkgLSAxXSkKKyAgICAgICAgICAgIGlmIG5vdCBmaWxldGFyZ2V0X3BhdGguc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICMgd2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGgsIGdldCBhIG5vcm1hbGl6ZWQgYWJzb2x1dGUgb25lCisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9wYXRoID0gcGFyZW50X3BhdGggKyAiLyIgKyBmaWxldGFyZ2V0X3BhdGgKKyAgICAgICAgICAgICAgICBmY3AgPSBmaWxldGFyZ2V0X3BhdGguc3BsaXQoIi8iKQorICAgICAgICAgICAgICAgIGZjcGwgPSBbXQorICAgICAgICAgICAgICAgIGZvciBpIGluIGZjcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSAiLi4iOgorICAgICAgICAgICAgICAgICAgICAgICAgZmNwbC5wb3AoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmNwbC5hcHBlbmQoaSkKKyAgICAgICAgICAgICAgICBmaWxldGFyZ2V0X3BhdGggPSAiLyIuam9pbihmY3BsKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlsZXRhcmdldF9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmdldCh0YXJnZXQgPSB0YXJnZXRfb2JqLCBwYXRoID0gZmlsZXRhcmdldF9wYXRoKQorICAgICAgICAgICAgZXhjZXB0IFRhcmdldF9GaWxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICAjIHdlIG1pZ2h0IGhhdmUgYW4gaW52YWxpZCBsaW5rOyBubyB3YXkgdG8gZGV0ZWN0IHRoaXMuIGp1c3Qgc2V0IGl0IHRvIE5vbmUKKyAgICAgICAgICAgICAgICBmaWxldGFyZ2V0X29iaiA9IE5vbmUKKworICAgICAgICAgICAgcGFyZW50X29iaiA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHRhcmdldCA9IHRhcmdldF9vYmosIHBhdGggPSBwYXJlbnRfcGF0aCwgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZKQorCisgICAgICAgICAgICB0Zl9vYmogPSBUYXJnZXRfRmlsZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGV0eXBlID0gVGFyZ2V0X0ZpbGUuSVRZUEVfU1lNTElOSywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBwZXJtaXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPSB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IHBhcmVudF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICBzeW1fdGFyZ2V0ID0gZmlsZXRhcmdldF9vYmopCisKKworICAgIGRlZiBzYXZlX3RhcmdldF9wYWNrYWdlX2luZm9ybWF0aW9uKHNlbGYsIGJ1aWxkX29iaiwgdGFyZ2V0X29iaiwgcGFja2FnZWRpY3QsIHBrZ3BubWFwLCByZWNpcGVzKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFyZ2V0X29iaiwgVGFyZ2V0KQorCisgICAgICAgIGVycm9ybXNnID0gIiIKKyAgICAgICAgZm9yIHAgaW4gcGFja2FnZWRpY3Q6CisgICAgICAgICAgICBzZWFyY2huYW1lID0gcAorICAgICAgICAgICAgaWYgJ09QS0dOJyBpbiBwa2dwbm1hcFtwXS5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2VhcmNobmFtZSA9IHBrZ3BubWFwW3BdWydPUEtHTiddCisKKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwgY3JlYXRlZCA9IFBhY2thZ2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKCBidWlsZCA9IGJ1aWxkX29iaiwgbmFtZSA9IHNlYXJjaG5hbWUgKQorICAgICAgICAgICAgaWYgY3JlYXRlZCBvciBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2l6ZSA9PSAtMTogICAgIyBzYXZlIHRoZSBkYXRhIGFueXdheSB3ZSBjYW4sIG5vdCBqdXN0IGlmIGl0IHdhcyBub3QgY3JlYXRlZCBoZXJlOyBidWcgW1lPQ1RPICM2ODg3XQorICAgICAgICAgICAgICAgICMgZmlsbCBpbiBldmVyeXRoaW5nIHdlIGNhbiBmcm9tIHRoZSBydW50aW1lLXJldmVyc2UgcGFja2FnZSBkYXRhCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10ucmVjaXBlID0gcmVjaXBlc1twa2dwbm1hcFtwXVsnUE4nXV0KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnZlcnNpb24gPSBwa2dwbm1hcFtwXVsnUFYnXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uaW5zdGFsbGVkX25hbWUgPSBwCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5yZXZpc2lvbiA9IHBrZ3BubWFwW3BdWydQUiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5saWNlbnNlID0gcGtncG5tYXBbcF1bJ0xJQ0VOU0UnXQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10uc2VjdGlvbiA9IHBrZ3BubWFwW3BdWydTRUNUSU9OJ10KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLnN1bW1hcnkgPSBwa2dwbm1hcFtwXVsnU1VNTUFSWSddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5kZXNjcmlwdGlvbiA9IHBrZ3BubWFwW3BdWydERVNDUklQVElPTiddCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zaXplID0gaW50KHBrZ3BubWFwW3BdWydQS0dTSVpFJ10pCisKKyAgICAgICAgICAgICAgICAjIG5vIGZpbGVzIHJlY29yZGVkIGZvciB0aGlzIHBhY2thZ2UsIHNvIHNhdmUgZmlsZXMgaW5mbworICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZmlsZV9vYmplY3RzID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRhcmdldHBhdGggaW4gcGtncG5tYXBbcF1bJ0ZJTEVTX0lORk8nXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldGZpbGVzaXplID0gcGtncG5tYXBbcF1bJ0ZJTEVTX0lORk8nXVt0YXJnZXRwYXRoXQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cy5hcHBlbmQoUGFja2FnZV9GaWxlKCBwYWNrYWdlID0gcGFja2FnZWRpY3RbcF1bJ29iamVjdCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0YXJnZXRwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSB0YXJnZXRmaWxlc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYWNrYWdlZmlsZV9vYmplY3RzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VfRmlsZS5vYmplY3RzLmJ1bGtfY3JlYXRlKHBhY2thZ2VmaWxlX29iamVjdHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9ICIgIHN0cGk6IEtleSBlcnJvciwgcGFja2FnZSAlcyBrZXkgJXMgXG4iICUgKCBwLCBlICkKKworICAgICAgICAgICAgIyBzYXZlIGRpc2sgaW5zdGFsbGVkIHNpemUKKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5pbnN0YWxsZWRfc2l6ZSA9IHBhY2thZ2VkaWN0W3BdWydzaXplJ10KKyAgICAgICAgICAgIHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXS5zYXZlKCkKKworICAgICAgICAgICAgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLm9iamVjdHMuY3JlYXRlKHRhcmdldCA9IHRhcmdldF9vYmosIHBhY2thZ2UgPSBwYWNrYWdlZGljdFtwXVsnb2JqZWN0J10pCisKKyAgICAgICAgcGFja2FnZWRlcHNfb2JqcyA9IFtdCisgICAgICAgIGZvciBwIGluIHBhY2thZ2VkaWN0OgorICAgICAgICAgICAgZm9yIChweCxkZXB0eXBlKSBpbiBwYWNrYWdlZGljdFtwXVsnZGVwZW5kcyddOgorICAgICAgICAgICAgICAgIGlmIGRlcHR5cGUgPT0gJ2RlcGVuZHMnOgorICAgICAgICAgICAgICAgICAgICB0ZGVwdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUworICAgICAgICAgICAgICAgIGVsaWYgZGVwdHlwZSA9PSAncmVjb21tZW5kcyc6CisgICAgICAgICAgICAgICAgICAgIHRkZXB0eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJFQ09NTUVORFMKKworICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggcGFja2FnZSA9IHBhY2thZ2VkaWN0W3BdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gcGFja2FnZWRpY3RbcHhdWydvYmplY3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBfdHlwZSA9IHRkZXB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldF9vYmopKQorCisgICAgICAgIGlmIGxlbihwYWNrYWdlZGVwc19vYmpzKSA+IDA6CisgICAgICAgICAgICBQYWNrYWdlX0RlcGVuZGVuY3kub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZGVwc19vYmpzKQorCisgICAgICAgIGlmIGxlbihlcnJvcm1zZykgPiAwOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImJ1aWxkaW5mb2hlbHBlcjogdGFyZ2V0X3BhY2thZ2VfaW5mbyBjb3VsZCBub3QgaWRlbnRpZnkgcmVjaXBlczogXG4lcyIsIGVycm9ybXNnKQorCisgICAgZGVmIHNhdmVfdGFyZ2V0X2ltYWdlX2ZpbGVfaW5mb3JtYXRpb24oc2VsZiwgdGFyZ2V0X29iaiwgZmlsZV9uYW1lLCBmaWxlX3NpemUpOgorICAgICAgICBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmNyZWF0ZSggdGFyZ2V0ID0gdGFyZ2V0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gZmlsZV9zaXplKQorCisgICAgZGVmIHNhdmVfYXJ0aWZhY3RfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBmaWxlX25hbWUsIGZpbGVfc2l6ZSk6CisgICAgICAgICMgd2Ugc2tpcCB0aGUgaW1hZ2UgZmlsZXMgZnJvbSBvdGhlciBidWlsZHMKKyAgICAgICAgaWYgVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoZmlsZV9uYW1lID0gZmlsZV9uYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgZG8gbm90IHVwZGF0ZSBhcnRpZmFjdHMgZm91bmQgaW4gb3RoZXIgYnVpbGRzCisgICAgICAgIGlmIEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5maWx0ZXIoZmlsZV9uYW1lID0gZmlsZV9uYW1lKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIEJ1aWxkQXJ0aWZhY3Qub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBidWlsZF9vYmosIGZpbGVfbmFtZSA9IGZpbGVfbmFtZSwgZmlsZV9zaXplID0gZmlsZV9zaXplKQorCisgICAgZGVmIGNyZWF0ZV9sb2dtZXNzYWdlKHNlbGYsIGxvZ19pbmZvcm1hdGlvbik6CisgICAgICAgIGFzc2VydCAnYnVpbGQnIGluIGxvZ19pbmZvcm1hdGlvbgorICAgICAgICBhc3NlcnQgJ2xldmVsJyBpbiBsb2dfaW5mb3JtYXRpb24KKyAgICAgICAgYXNzZXJ0ICdtZXNzYWdlJyBpbiBsb2dfaW5mb3JtYXRpb24KKworICAgICAgICBsb2dfb2JqZWN0ID0gTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkID0gbG9nX2luZm9ybWF0aW9uWydidWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgPSBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbG9nX2luZm9ybWF0aW9uWydtZXNzYWdlJ10pCisKKyAgICAgICAgZm9yIHYgaW4gdmFycyhsb2dfb2JqZWN0KToKKyAgICAgICAgICAgIGlmIHYgaW4gbG9nX2luZm9ybWF0aW9uLmtleXMoKToKKyAgICAgICAgICAgICAgICB2YXJzKGxvZ19vYmplY3QpW3ZdID0gbG9nX2luZm9ybWF0aW9uW3ZdCisKKyAgICAgICAgcmV0dXJuIGxvZ19vYmplY3Quc2F2ZSgpCisKKworICAgIGRlZiBzYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZiwgYnVpbGRfb2JqLCBwYWNrYWdlX2luZm8sIHJlY2lwZXMpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShidWlsZF9vYmosIEJ1aWxkKQorCisgICAgICAgICMgY3JlYXRlIGFuZCBzYXZlIHRoZSBvYmplY3QKKyAgICAgICAgcG5hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCisgICAgICAgIGlmICdPUEtHTicgaW4gcGFja2FnZV9pbmZvLmtleXMoKToKKyAgICAgICAgICAgIHBuYW1lID0gcGFja2FnZV9pbmZvWydPUEtHTiddCisKKyAgICAgICAgYnBfb2JqZWN0LCBfID0gUGFja2FnZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoIGJ1aWxkID0gYnVpbGRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBuYW1lICkKKworICAgICAgICBicF9vYmplY3QuaW5zdGFsbGVkX25hbWUgPSBwYWNrYWdlX2luZm9bJ1BLRyddCisgICAgICAgIGJwX29iamVjdC5yZWNpcGUgPSByZWNpcGVzW3BhY2thZ2VfaW5mb1snUE4nXV0KKyAgICAgICAgYnBfb2JqZWN0LnZlcnNpb24gPSBwYWNrYWdlX2luZm9bJ1BLR1YnXQorICAgICAgICBicF9vYmplY3QucmV2aXNpb24gPSBwYWNrYWdlX2luZm9bJ1BLR1InXQorICAgICAgICBicF9vYmplY3Quc3VtbWFyeSA9IHBhY2thZ2VfaW5mb1snU1VNTUFSWSddCisgICAgICAgIGJwX29iamVjdC5kZXNjcmlwdGlvbiA9IHBhY2thZ2VfaW5mb1snREVTQ1JJUFRJT04nXQorICAgICAgICBicF9vYmplY3Quc2l6ZSA9IGludChwYWNrYWdlX2luZm9bJ1BLR1NJWkUnXSkKKyAgICAgICAgYnBfb2JqZWN0LnNlY3Rpb24gPSBwYWNrYWdlX2luZm9bJ1NFQ1RJT04nXQorICAgICAgICBicF9vYmplY3QubGljZW5zZSA9IHBhY2thZ2VfaW5mb1snTElDRU5TRSddCisgICAgICAgIGJwX29iamVjdC5zYXZlKCkKKworICAgICAgICAjIHNhdmUgYW55IGF0dGFjaGVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciBwYXRoIGluIHBhY2thZ2VfaW5mb1snRklMRVNfSU5GTyddOgorICAgICAgICAgICAgcGFja2FnZWZpbGVfb2JqZWN0cy5hcHBlbmQoUGFja2FnZV9GaWxlKCBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBwYWNrYWdlX2luZm9bJ0ZJTEVTX0lORk8nXVtwYXRoXSApKQorICAgICAgICBpZiBsZW4ocGFja2FnZWZpbGVfb2JqZWN0cyk6CisgICAgICAgICAgICBQYWNrYWdlX0ZpbGUub2JqZWN0cy5idWxrX2NyZWF0ZShwYWNrYWdlZmlsZV9vYmplY3RzKQorCisgICAgICAgIGRlZiBfcG9fYnluYW1lKHApOgorICAgICAgICAgICAgcGtnLCBjcmVhdGVkID0gUGFja2FnZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoYnVpbGQgPSBidWlsZF9vYmosIG5hbWUgPSBwKQorICAgICAgICAgICAgaWYgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICBwa2cuc2l6ZSA9IC0xCisgICAgICAgICAgICAgICAgcGtnLnNhdmUoKQorICAgICAgICAgICAgcmV0dXJuIHBrZworCisgICAgICAgIHBhY2thZ2VkZXBzX29ianMgPSBbXQorICAgICAgICAjIHNhdmUgc29mdCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uCisgICAgICAgIGlmICdSREVQRU5EUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JERVBFTkRTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSREVQRU5EUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SREVQRU5EUykpCisgICAgICAgIGlmICdSUFJPVklERVMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUFJPVklERVMnXToKKyAgICAgICAgICAgIGZvciBwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhwYWNrYWdlX2luZm9bJ1JQUk9WSURFUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SUFJPVklERVMpKQorICAgICAgICBpZiAnUlJFQ09NTUVORFMnIGluIHBhY2thZ2VfaW5mbyBhbmQgcGFja2FnZV9pbmZvWydSUkVDT01NRU5EUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlJFQ09NTUVORFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlJFQ09NTUVORFMpKQorICAgICAgICBpZiAnUlNVR0dFU1RTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUlNVR0dFU1RTJ106CisgICAgICAgICAgICBmb3IgcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMocGFja2FnZV9pbmZvWydSU1VHR0VTVFMnXSk6CisgICAgICAgICAgICAgICAgcGFja2FnZWRlcHNfb2Jqcy5hcHBlbmQoUGFja2FnZV9EZXBlbmRlbmN5KCAgcGFja2FnZSA9IGJwX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kc19vbiA9IF9wb19ieW5hbWUocCksIGRlcF90eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlNVR0dFU1RTKSkKKyAgICAgICAgaWYgJ1JSRVBMQUNFUycgaW4gcGFja2FnZV9pbmZvIGFuZCBwYWNrYWdlX2luZm9bJ1JSRVBMQUNFUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUlJFUExBQ0VTJ10pOgorICAgICAgICAgICAgICAgIHBhY2thZ2VkZXBzX29ianMuYXBwZW5kKFBhY2thZ2VfRGVwZW5kZW5jeSggIHBhY2thZ2UgPSBicF9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBfcG9fYnluYW1lKHApLCBkZXBfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRVBMQUNFUykpCisgICAgICAgIGlmICdSQ09ORkxJQ1RTJyBpbiBwYWNrYWdlX2luZm8gYW5kIHBhY2thZ2VfaW5mb1snUkNPTkZMSUNUUyddOgorICAgICAgICAgICAgZm9yIHAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKHBhY2thZ2VfaW5mb1snUkNPTkZMSUNUUyddKToKKyAgICAgICAgICAgICAgICBwYWNrYWdlZGVwc19vYmpzLmFwcGVuZChQYWNrYWdlX0RlcGVuZGVuY3koICBwYWNrYWdlID0gYnBfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gX3BvX2J5bmFtZShwKSwgZGVwX3R5cGUgPSBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SQ09ORkxJQ1RTKSkKKworICAgICAgICBpZiBsZW4ocGFja2FnZWRlcHNfb2JqcykgPiAwOgorICAgICAgICAgICAgUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocGFja2FnZWRlcHNfb2JqcykKKworICAgICAgICByZXR1cm4gYnBfb2JqZWN0CisKKyAgICBkZWYgc2F2ZV9idWlsZF92YXJpYWJsZXMoc2VsZiwgYnVpbGRfb2JqLCB2YXJkdW1wKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGRfb2JqLCBCdWlsZCkKKworICAgICAgICBoZWxwdGV4dF9vYmplY3RzID0gW10KKyAgICAgICAgZm9yIGsgaW4gdmFyZHVtcDoKKyAgICAgICAgICAgIGRlc2MgPSB2YXJkdW1wW2tdWydkb2MnXQorICAgICAgICAgICAgaWYgZGVzYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHZhcl93b3JkcyA9IFt3b3JkIGZvciB3b3JkIGluIGsuc3BsaXQoJ18nKV0KKyAgICAgICAgICAgICAgICByb290X3ZhciA9ICJfIi5qb2luKFt3b3JkIGZvciB3b3JkIGluIHZhcl93b3JkcyBpZiB3b3JkLmlzdXBwZXIoKV0pCisgICAgICAgICAgICAgICAgaWYgcm9vdF92YXIgYW5kIHJvb3RfdmFyICE9IGsgYW5kIHJvb3RfdmFyIGluIHZhcmR1bXA6CisgICAgICAgICAgICAgICAgICAgIGRlc2MgPSB2YXJkdW1wW3Jvb3RfdmFyXVsnZG9jJ10KKyAgICAgICAgICAgIGlmIGRlc2MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkZXNjID0gJycKKyAgICAgICAgICAgIGlmIGxlbihkZXNjKToKKyAgICAgICAgICAgICAgICBoZWxwdGV4dF9vYmplY3RzLmFwcGVuZChIZWxwVGV4dChidWlsZD1idWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgIGFyZWE9SGVscFRleHQuVkFSSUFCTEUsCisgICAgICAgICAgICAgICAgICAgIGtleT1rLAorICAgICAgICAgICAgICAgICAgICB0ZXh0PWRlc2MpKQorICAgICAgICAgICAgaWYgbm90IGJvb2wodmFyZHVtcFtrXVsnZnVuYyddKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhcmR1bXBba11bJ3YnXQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgICAgICAgICB2YXJpYWJsZV9vYmogPSBWYXJpYWJsZS5vYmplY3RzLmNyZWF0ZSggYnVpbGQgPSBidWlsZF9vYmosCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlX25hbWUgPSBrLAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZV92YWx1ZSA9IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2MpCisKKyAgICAgICAgICAgICAgICB2YXJoaXN0X29iamVjdHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciB2aCBpbiB2YXJkdW1wW2tdWydoaXN0b3J5J106CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnZG9jdW1lbnRhdGlvbi5jb25mJyBpbiB2aFsnZmlsZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaGlzdF9vYmplY3RzLmFwcGVuZChWYXJpYWJsZUhpc3RvcnkoIHZhcmlhYmxlID0gdmFyaWFibGVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSB2aFsnZmlsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IHZoWydsaW5lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHZoWydvcCddKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4odmFyaGlzdF9vYmplY3RzKToKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVIaXN0b3J5Lm9iamVjdHMuYnVsa19jcmVhdGUodmFyaGlzdF9vYmplY3RzKQorCisgICAgICAgIEhlbHBUZXh0Lm9iamVjdHMuYnVsa19jcmVhdGUoaGVscHRleHRfb2JqZWN0cykKKworCitjbGFzcyBNb2NrRXZlbnQob2JqZWN0KToKKyAgICAiIiIgVGhpcyBvYmplY3QgaXMgdXNlZCB0byBjcmVhdGUgZXZlbnQsIGZvciB3aGljaCBub3JtYWwgZXZlbnQtcHJvY2Vzc2luZyBtZXRob2RzIGNhbgorICAgICAgICBiZSB1c2VkLCBvdXQgb2YgZGF0YSB0aGF0IGlzIG5vdCBjb21pbmcgdmlhIGFuIGFjdHVhbCBldmVudAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tc2cgPSBOb25lCisgICAgICAgIHNlbGYubGV2ZWxubyA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNrbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi50YXNraGFzaCA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXRobmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lbm8gPSBOb25lCisKKworY2xhc3MgQnVpbGRJbmZvSGVscGVyKG9iamVjdCk6CisgICAgIiIiIFRoaXMgY2xhc3MgZ2F0aGVycyB0aGUgYnVpbGQgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2VydmVyIGFuZCBzZW5kcyBpdAorICAgICAgICB0b3dhcmRzIHRoZSBPUk0gd3JhcHBlciBmb3Igc3RvcmluZyBpbiB0aGUgZGF0YWJhc2UKKyAgICAgICAgSXQgaXMgaW5zdGFudGlhdGVkIG9uY2UgcGVyIGJ1aWxkCisgICAgICAgIEtlZXBzIGluIG1lbW9yeSBhbGwgZGF0YSB0aGF0IG5lZWRzIG1hdGNoaW5nIGJlZm9yZSB3cml0aW5nIGl0IHRvIHRoZSBkYXRhYmFzZQorICAgICIiIgorCisgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICMgdGhlIGNvZGUgd2lsbCBsb29rIGludG8gdGhlIHByb3RlY3RlZCB2YXJpYWJsZXMgb2YgdGhlIGV2ZW50OyBubyBlYXN5IHdheSBhcm91bmQgdGhpcworICAgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1jb250aW51YXRpb24KKyAgICAjIHdlIGRvIG5vdCBmb2xsb3cgdGhlIHB5dGhvbiBjb252ZW50aW9ucyBmb3IgY29udGludWF0aW9uIGluZGVudGF0aW9uIGR1ZSB0byBsb25nIGxpbmVzIGhlcmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGhhc19idWlsZF9oaXN0b3J5ID0gRmFsc2UpOgorICAgICAgICBzZWxmLmludGVybmFsX3N0YXRlID0ge30KKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXSA9IHt9CisgICAgICAgIHNlbGYudGFza19vcmRlciA9IDAKKyAgICAgICAgc2VsZi5hdXRvY29tbWl0X3N0ZXAgPSAxCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgICMgd2UgdXNlIG1hbnVhbCB0cmFuc2FjdGlvbnMgaWYgdGhlIGRhdGFiYXNlIGRvZXNuJ3QgYXV0b2NvbW1pdCBvbiB1cworICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIgPSBPUk1XcmFwcGVyKCkKKyAgICAgICAgc2VsZi5oYXNfYnVpbGRfaGlzdG9yeSA9IGhhc19idWlsZF9oaXN0b3J5CisgICAgICAgIHNlbGYudG1wX2RpciA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUTVBESVIiXSlbMF0KKyAgICAgICAgc2VsZi5icmJlICAgID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRPQVNURVJfQlJCRSJdKVswXQorICAgICAgICBzZWxmLnByb2plY3QgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE9BU1RFUl9QUk9KRUNUIl0pWzBdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBCdWlsZCBpbmZvIGhlbHBlciBpbml0ZWQgJXMiICUgdmFycyhzZWxmKSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIG1ldGhvZHMgdG8gY29udmVydCBldmVudC9leHRlcm5hbCBpbmZvIGludG8gb2JqZWN0cyB0aGF0IHRoZSBPUk0gbGF5ZXIgdXNlcworCisKKyAgICBkZWYgX2dldF9idWlsZF9pbmZvcm1hdGlvbihzZWxmKToKKyAgICAgICAgYnVpbGRfaW5mbyA9IHt9CisgICAgICAgICMgR2VuZXJhdGUgYW4gaWRlbnRpZmllciBmb3IgZWFjaCBuZXcgYnVpbGQKKworICAgICAgICBidWlsZF9pbmZvWydtYWNoaW5lJ10gPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiTUFDSElORSJdKVswXQorICAgICAgICBidWlsZF9pbmZvWydkaXN0cm8nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk8iXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snZGlzdHJvX3ZlcnNpb24nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk9fVkVSU0lPTiJdKVswXQorICAgICAgICBidWlsZF9pbmZvWydzdGFydGVkX29uJ10gPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZF9pbmZvWydjb21wbGV0ZWRfb24nXSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkX2luZm9bJ2Nvb2tlcl9sb2dfcGF0aCddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0NPTlNPTEVMT0ciXSlbMF0KKyAgICAgICAgYnVpbGRfaW5mb1snYnVpbGRfbmFtZSddID0gc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJVSUxETkFNRSJdKVswXQorICAgICAgICBidWlsZF9pbmZvWydiaXRiYWtlX3ZlcnNpb24nXSA9IHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9WRVJTSU9OIl0pWzBdCisKKyAgICAgICAgcmV0dXJuIGJ1aWxkX2luZm8KKworICAgIGRlZiBfZ2V0X3Rhc2tfaW5mb3JtYXRpb24oc2VsZiwgZXZlbnQsIHJlY2lwZSk6CisgICAgICAgIGFzc2VydCAndGFza25hbWUnIGluIHZhcnMoZXZlbnQpCisKKyAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2J1aWxkJ10gPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9OQQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydyZWNpcGUnXSA9IHJlY2lwZQorICAgICAgICB0YXNrX2luZm9ybWF0aW9uWyd0YXNrX25hbWUnXSA9IGV2ZW50LnRhc2tuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc29tZSB0YXNrcyBkb24ndCBjb21lIHdpdGggYSBoYXNoLiBhbmQgdGhhdCdzIG9rCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzc3RhdGVfY2hlY2tzdW0nXSA9IGV2ZW50LnRhc2toYXNoCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHRhc2tfaW5mb3JtYXRpb24KKworICAgIGRlZiBfZ2V0X2xheWVyX3ZlcnNpb25fZm9yX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgIGFzc2VydCBwYXRoLnN0YXJ0c3dpdGgoIi8iKQorICAgICAgICBhc3NlcnQgJ2J1aWxkJyBpbiBzZWxmLmludGVybmFsX3N0YXRlCisKKyAgICAgICAgaWYgc2VsZi5icmJlIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgX3Nsa2V5X2ludGVyYWN0aXZlKGxheWVyX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxheWVyX3ZlcnNpb24sIExheWVyX1ZlcnNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihsYXllcl92ZXJzaW9uLmxvY2FsX3BhdGgpCisKKyAgICAgICAgICAgICMgSGV1cmlzdGljczogd2UgYWx3YXlzIG1hdGNoIHJlY2lwZSB0byB0aGUgZGVlcGVzdCBsYXllciBwYXRoIGluIHRoZSBkaXNjb3ZlcmVkIGxheWVycworICAgICAgICAgICAgZm9yIGx2byBpbiBzb3J0ZWQoc2VsZi5vcm1fd3JhcHBlci5sYXllcl92ZXJzaW9uX29iamVjdHMsIHJldmVyc2U9VHJ1ZSwga2V5PV9zbGtleV9pbnRlcmFjdGl2ZSk6CisgICAgICAgICAgICAgICAgIyB3ZSBjYW4gbWF0Y2ggdG8gdGhlIHJlY2lwZSBmaWxlIHBhdGgKKyAgICAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgobHZvLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbHZvCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJyX2lkLCBiZV9pZCA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBmcm9tIGJsZGNvbnRyb2wuYmJjb250cm9sbGVyIGltcG9ydCBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcgorICAgICAgICAgICAgYmMgPSBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcihwayA9IGJlX2lkKQorCisgICAgICAgICAgICBkZWYgX3Nsa2V5X21hbmFnZWQobGF5ZXJfdmVyc2lvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihiYy5nZXRHaXRDbG9uZURpcmVjdG9yeShsYXllcl92ZXJzaW9uLmdpdHVybCwgbGF5ZXJfdmVyc2lvbi5jb21taXQpICsgbGF5ZXJfdmVyc2lvbi5kaXJwYXRoKQorCisgICAgICAgICAgICAjIEhldXJpc3RpY3M6IHdlIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBsYXllcnMgaGF2ZSBiZWVuIGNoZWNrZWQgb3V0CisgICAgICAgICAgICBmb3IgYnJsIGluIHNvcnRlZChCdWlsZFJlcXVlc3Qub2JqZWN0cy5nZXQocGsgPSBicl9pZCkuYnJsYXllcl9zZXQuYWxsKCksIHJldmVyc2UgPSBUcnVlLCBrZXkgPSBfc2xrZXlfbWFuYWdlZCk6CisgICAgICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKGJjLmdldEdpdENsb25lRGlyZWN0b3J5KGJybC5naXR1cmwsIGJybC5jb21taXQpLCBicmwuZGlycGF0aCkKKyAgICAgICAgICAgICAgICAjIHdlIGdldCBhIHJlbGF0aXZlIHBhdGgsIHVubGVzcyBydW5uaW5nIGluIEhFQUQgbW9kZSB3aGVyZSB0aGUgcGF0aCBpcyBhYnNvbHV0ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb2NhbGRpcm5hbWUuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oYmMuYmUuc291cmNlZGlyLCBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGxvY2FsZGlybmFtZSk6CisgICAgICAgICAgICAgICAgICAgICNsb2dnZXIud2FybigiLS0gbWFuYWdlZDogbWF0Y2hlZCBwYXRoICVzIHdpdGggbGF5ZXIgJXMgIiAlIChwYXRoLCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAjIHdlIG1hdGNoZWQgdGhlIEJSTGF5ZXIsIGJ1dCB3ZSBuZWVkIHRoZSBsYXllcl92ZXJzaW9uIHRoYXQgZ2VuZXJhdGVkIHRoaXMgYnIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGx2byBpbiBzZWxmLm9ybV93cmFwcGVyLmxheWVyX3ZlcnNpb25fb2JqZWN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJybC5uYW1lID09IGx2by5sYXllci5uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsdm8KKworICAgICAgICAjaWYgd2UgZ2V0IGhlcmUsIHdlIGRpZG4ndCByZWFkIGxheWVycyBjb3JyZWN0bHk7IGR1bXAgd2hhdGV2ZXIgaW5mb3JtYXRpb24gd2UgaGF2ZSBvbiB0aGUgZXJyb3IgbG9nCisgICAgICAgIGxvZ2dlci53YXJuKCJDb3VsZCBub3QgbWF0Y2ggbGF5ZXIgdmVyc2lvbiBmb3IgcmVjaXBlIHBhdGggJXMgOiAlcyIsIHBhdGgsIHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzKQorCisgICAgICAgICNtb2NrdXAgdGhlIG5ldyBsYXllcgorICAgICAgICB1bmtub3duX2xheWVyLCBfID0gTGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWU9Il9fRklYTUVfX3VuaWRlbnRpZmllZF9sYXllciIsIGxheWVyX2luZGV4X3VybD0iIikKKyAgICAgICAgdW5rbm93bl9sYXllcl92ZXJzaW9uX29iaiwgXyA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyID0gdW5rbm93bl9sYXllciwgYnVpbGQgPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddKQorCisgICAgICAgICMgYXBwZW5kIGl0IHNvIHdlIGRvbid0IHJ1biBpbnRvIHRoaXMgZXJyb3IgYWdhaW4gYW5kIGFnYWluCisgICAgICAgIHNlbGYub3JtX3dyYXBwZXIubGF5ZXJfdmVyc2lvbl9vYmplY3RzLmFwcGVuZCh1bmtub3duX2xheWVyX3ZlcnNpb25fb2JqKQorCisgICAgICAgIHJldHVybiB1bmtub3duX2xheWVyX3ZlcnNpb25fb2JqCisKKyAgICBkZWYgX2dldF9yZWNpcGVfaW5mb3JtYXRpb25fZnJvbV90YXNrZmlsZShzZWxmLCB0YXNrZmlsZSk6CisgICAgICAgIGxvY2FsZmlsZXBhdGggPSB0YXNrZmlsZS5zcGxpdCgiOiIpWy0xXQorICAgICAgICBmaWxlcGF0aF9mbGFncyA9ICI6Ii5qb2luKHNvcnRlZCh0YXNrZmlsZS5zcGxpdCgiOiIpWzotMV0pKQorICAgICAgICBsYXllcl92ZXJzaW9uX29iaiA9IHNlbGYuX2dldF9sYXllcl92ZXJzaW9uX2Zvcl9wYXRoKGxvY2FsZmlsZXBhdGgpCisKKworCisgICAgICAgIHJlY2lwZV9pbmZvID0ge30KKyAgICAgICAgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXSA9IGxheWVyX3ZlcnNpb25fb2JqCisgICAgICAgIHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSA9IGxvY2FsZmlsZXBhdGgKKyAgICAgICAgcmVjaXBlX2luZm9bJ3BhdGhmbGFncyddID0gZmlsZXBhdGhfZmxhZ3MKKworICAgICAgICBpZiByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10uc3RhcnRzd2l0aChyZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddID0gcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddW2xlbihyZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOl0ubHN0cmlwKCIvIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVjaXBlIGZpbGUgcGF0aCAlcyBpcyBub3QgdW5kZXIgbGF5ZXIgdmVyc2lvbiBhdCAlcyIgJSAocmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddLCByZWNpcGVfaW5mb1snbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpKQorCisgICAgICAgIHJldHVybiByZWNpcGVfaW5mbworCisgICAgZGVmIF9nZXRfcGF0aF9pbmZvcm1hdGlvbihzZWxmLCB0YXNrX29iamVjdCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHRhc2tfb2JqZWN0LCBUYXNrKQorICAgICAgICBidWlsZF9zdGF0c19mb3JtYXQgPSAie3RtcGRpcn0vYnVpbGRzdGF0cy97dGFyZ2V0fS17bWFjaGluZX0ve2J1aWxkbmFtZX0ve3BhY2thZ2V9LyIKKyAgICAgICAgYnVpbGRfc3RhdHNfcGF0aCA9IFtdCisKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgdGFyZ2V0ID0gdC50YXJnZXQKKyAgICAgICAgICAgIG1hY2hpbmUgPSBzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLm1hY2hpbmUKKyAgICAgICAgICAgIGJ1aWxkbmFtZSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10uYnVpbGRfbmFtZQorICAgICAgICAgICAgcGUsIHB2ID0gdGFza19vYmplY3QucmVjaXBlLnZlcnNpb24uc3BsaXQoIjoiLDEpCisgICAgICAgICAgICBpZiBsZW4ocGUpID4gMDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gdGFza19vYmplY3QucmVjaXBlLm5hbWUgKyAiLSIgKyBwZSArICJfIiArIHB2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSB0YXNrX29iamVjdC5yZWNpcGUubmFtZSArICItIiArIHB2CisKKyAgICAgICAgICAgIGJ1aWxkX3N0YXRzX3BhdGguYXBwZW5kKGJ1aWxkX3N0YXRzX2Zvcm1hdC5mb3JtYXQodG1wZGlyPXNlbGYudG1wX2RpciwgdGFyZ2V0PXRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZT1tYWNoaW5lLCBidWlsZG5hbWU9YnVpbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UpKQorCisgICAgICAgIHJldHVybiBidWlsZF9zdGF0c19wYXRoCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMgZXh0ZXJuYWwgYXZhaWxhYmxlIG1ldGhvZHMgdG8gc3RvcmUgaW5mb3JtYXRpb24KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KToKKyAgICAgICAgZXZkYXRhID0gTm9uZQorICAgICAgICBpZiAnX2xvY2FsZGF0YScgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICBldmRhdGEgPSBldmVudC5fbG9jYWxkYXRhCisgICAgICAgIGVsaWYgJ2RhdGEnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgZXZkYXRhID0gZXZlbnQuZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFdmVudCB3aXRoIG5laXRoZXIgX2xvY2FsZGF0YSBvciBkYXRhIHByb3BlcnRpZXMiKQorICAgICAgICByZXR1cm4gZXZkYXRhCisKKyAgICBkZWYgc3RvcmVfbGF5ZXJfaW5mbyhzZWxmLCBldmVudCk6CisgICAgICAgIGxheWVyaW5mb3MgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddID0ge30KKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyaW5mb3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ11bc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX2xheWVyX29iamVjdChsYXllcmluZm9zW2xheWVyXSwgc2VsZi5icmJlKV0gPSBsYXllcmluZm9zW2xheWVyXVsndmVyc2lvbiddCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ11bc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX2xheWVyX29iamVjdChsYXllcmluZm9zW2xheWVyXSwgc2VsZi5icmJlKV1bJ2xvY2FsX3BhdGgnXSA9IGxheWVyaW5mb3NbbGF5ZXJdWydsb2NhbF9wYXRoJ10KKyAgICAgICAgICAgIGV4Y2VwdCBOb3RFeGlzdGluZyBhcyBuZWU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oImJ1aWxkaW5mb2hlbHBlcjogY2Fubm90IGlkZW50aWZ5IGxheWVyIGV4Y2VwdGlvbjolcyAiLCBuZWUpCisKKworICAgIGRlZiBzdG9yZV9zdGFydGVkX2J1aWxkKHNlbGYsIGV2ZW50KToKKyAgICAgICAgYXNzZXJ0ICdfcGtncycgaW4gdmFycyhldmVudCkKKyAgICAgICAgYnVpbGRfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfYnVpbGRfaW5mb3JtYXRpb24oKQorCisgICAgICAgIGJ1aWxkX29iaiA9IHNlbGYub3JtX3dyYXBwZXIuY3JlYXRlX2J1aWxkX29iamVjdChidWlsZF9pbmZvcm1hdGlvbiwgc2VsZi5icmJlLCBzZWxmLnByb2plY3QpCisKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSA9IGJ1aWxkX29iagorCisgICAgICAgICMgc2F2ZSBsYXllciB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGlzIGJ1aWxkCisgICAgICAgIGlmIG5vdCAnbHZzJyBpbiBzZWxmLmludGVybmFsX3N0YXRlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJMYXllciB2ZXJzaW9uIGluZm9ybWF0aW9uIG5vdCBmb3VuZDsgQ2hlY2sgaWYgdGhlIGJpdGJha2Ugc2VydmVyIHdhcyBjb25maWd1cmVkIHRvIGluaGVyaXQgdG9hc3Rlci5iYmNsYXNzLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGF5ZXJfb2JqIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddOgorICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9sYXllcl92ZXJzaW9uX29iamVjdChidWlsZF9vYmosIGxheWVyX29iaiwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnbHZzJ11bbGF5ZXJfb2JqXSkKKworICAgICAgICAgICAgZGVsIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2x2cyddCisKKyAgICAgICAgIyBjcmVhdGUgdGFyZ2V0IGluZm9ybWF0aW9uCisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIHRhcmdldF9pbmZvcm1hdGlvblsndGFyZ2V0cyddID0gZXZlbnQuX3BrZ3MKKyAgICAgICAgdGFyZ2V0X2luZm9ybWF0aW9uWydidWlsZCddID0gYnVpbGRfb2JqCisKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddID0gc2VsZi5vcm1fd3JhcHBlci5jcmVhdGVfdGFyZ2V0X29iamVjdHModGFyZ2V0X2luZm9ybWF0aW9uKQorCisgICAgICAgICMgU2F2ZSBidWlsZCBjb25maWd1cmF0aW9uCisgICAgICAgIGRhdGEgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0QWxsS2V5c1dpdGhGbGFncyIsIFsiZG9jIiwgImZ1bmMiXV0pWzBdCisKKyAgICAgICAgIyBjb252ZXJ0IHRoZSBwYXRocyBmcm9tIGFic29sdXRlIHRvIHJlbGF0aXZlIHRvIGVpdGhlciB0aGUgYnVpbGQgZGlyZWN0b3J5IG9yIGxheWVyIGNoZWNrb3V0cworICAgICAgICBwYXRoX3ByZWZpeGVzID0gW10KKworICAgICAgICBpZiBzZWxmLmJyYmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfLCBiZV9pZCA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICBiZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSBiZV9pZCkKKyAgICAgICAgICAgIHBhdGhfcHJlZml4ZXMuYXBwZW5kKGJlLmJ1aWxkZGlyKQorCisgICAgICAgIGZvciBsYXllciBpbiBzb3J0ZWQoc2VsZi5vcm1fd3JhcHBlci5sYXllcl92ZXJzaW9uX29iamVjdHMsIGtleSA9IGxhbWJkYSB4Omxlbih4LmxvY2FsX3BhdGgpLCByZXZlcnNlPVRydWUpOgorICAgICAgICAgICAgcGF0aF9wcmVmaXhlcy5hcHBlbmQobGF5ZXIubG9jYWxfcGF0aCkKKworICAgICAgICAjIHdlIHN0cmlwIHRoZSBwcmVmaXhlcworICAgICAgICBmb3IgayBpbiBkYXRhOgorICAgICAgICAgICAgaWYgbm90IGJvb2woZGF0YVtrXVsnZnVuYyddKToKKyAgICAgICAgICAgICAgICBmb3IgdmggaW4gZGF0YVtrXVsnaGlzdG9yeSddOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgJ2RvY3VtZW50YXRpb24uY29uZicgaW4gdmhbJ2ZpbGUnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFic19maWxlX25hbWUgPSB2aFsnZmlsZSddCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHAgaW4gcGF0aF9wcmVmaXhlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhYnNfZmlsZV9uYW1lLnN0YXJ0c3dpdGgocHAgKyAiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aFsnZmlsZSddPWFic19maWxlX25hbWVbbGVuKHBwICsgIi8iKTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBzYXZlIHRoZSB2YXJpYWJsZXMKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX2J1aWxkX3ZhcmlhYmxlcyhidWlsZF9vYmosIGRhdGEpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuYnJiZQorCisKKyAgICBkZWYgdXBkYXRlX3RhcmdldF9pbWFnZV9maWxlKHNlbGYsIGV2ZW50KToKKyAgICAgICAgZXZkYXRhID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KQorCisgICAgICAgIGZvciB0IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3RhcmdldHMnXToKKyAgICAgICAgICAgIGlmIHQuaXNfaW1hZ2UgPT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZXMgPSBsaXN0KGV2ZGF0YS52aWV3a2V5cygpKQorICAgICAgICAgICAgICAgIGZvciBvdXRwdXQgaW4gb3V0cHV0X2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiB0LnRhcmdldCBpbiBvdXRwdXQgYW5kICdyb290ZnMnIGluIG91dHB1dCBhbmQgbm90IG91dHB1dC5lbmRzd2l0aCgiLm1hbmlmZXN0Iik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnNhdmVfdGFyZ2V0X2ltYWdlX2ZpbGVfaW5mb3JtYXRpb24odCwgb3V0cHV0LCBldmRhdGFbb3V0cHV0XSkKKworICAgIGRlZiB1cGRhdGVfYXJ0aWZhY3RfaW1hZ2VfZmlsZShzZWxmLCBldmVudCk6CisgICAgICAgIGV2ZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKKyAgICAgICAgZm9yIGFydGlmYWN0X3BhdGggaW4gZXZkYXRhLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV9hcnRpZmFjdF9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCBhcnRpZmFjdF9wYXRoLCBldmRhdGFbYXJ0aWZhY3RfcGF0aF0pCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX2luZm9ybWF0aW9uKHNlbGYsIGV2ZW50LCBlcnJvcnMsIHdhcm5pbmdzLCB0YXNrZmFpbHVyZXMpOgorICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICBzZWxmLm9ybV93cmFwcGVyLnVwZGF0ZV9idWlsZF9vYmplY3Qoc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKQorCisKKyAgICBkZWYgc3RvcmVfbGljZW5zZV9tYW5pZmVzdF9wYXRoKHNlbGYsIGV2ZW50KToKKyAgICAgICAgZGVwbG95X2RpciA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ2RlcGxveV9kaXInXQorICAgICAgICBpbWFnZV9uYW1lID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnaW1hZ2VfbmFtZSddCisgICAgICAgIHBhdGggPSBkZXBsb3lfZGlyICsgIi9saWNlbnNlcy8iICsgaW1hZ2VfbmFtZSArICIvbGljZW5zZS5tYW5pZmVzdCIKKyAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLmludGVybmFsX3N0YXRlWyd0YXJnZXRzJ106CisgICAgICAgICAgICBpZiB0YXJnZXQudGFyZ2V0IGluIGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci51cGRhdGVfdGFyZ2V0X3NldF9saWNlbnNlX21hbmlmZXN0KHRhcmdldCwgcGF0aCkKKworCisgICAgZGVmIHN0b3JlX3N0YXJ0ZWRfdGFzayhzZWxmLCBldmVudCk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkKSkKKyAgICAgICAgYXNzZXJ0ICd0YXNrZmlsZScgaW4gdmFycyhldmVudCkKKyAgICAgICAgbG9jYWxmaWxlcGF0aCA9IGV2ZW50LnRhc2tmaWxlLnNwbGl0KCI6IilbLTFdCisgICAgICAgIGFzc2VydCBsb2NhbGZpbGVwYXRoLnN0YXJ0c3dpdGgoIi8iKQorCisgICAgICAgIGlkZW50aWZpZXIgPSBldmVudC50YXNrZmlsZSArICI6IiArIGV2ZW50LnRhc2tuYW1lCisKKyAgICAgICAgcmVjaXBlX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3JlY2lwZV9pbmZvcm1hdGlvbl9mcm9tX3Rhc2tmaWxlKGV2ZW50LnRhc2tmaWxlKQorICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24sIFRydWUpCisKKyAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKGV2ZW50LCByZWNpcGUpCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9OQQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1NraXBwZWQpOgorICAgICAgICAgICAgYXNzZXJ0ICdyZWFzb24nIGluIHZhcnMoZXZlbnQpCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWyd0YXNrX2V4ZWN1dGVkJ10gPSBGYWxzZQorICAgICAgICAgICAgaWYgZXZlbnQucmVhc29uID09ICJjb3ZlcmVkIjoKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfQ09WRVJFRAorICAgICAgICAgICAgaWYgZXZlbnQucmVhc29uID09ICJleGlzdGluZyI6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX1BSRUJVSUxUCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWyd0YXNrX2V4ZWN1dGVkJ10gPSBUcnVlCisgICAgICAgICAgICBpZiAnbm9leGVjJyBpbiB2YXJzKGV2ZW50KSBhbmQgZXZlbnQubm9leGVjID09IFRydWU6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19leGVjdXRlZCddID0gRmFsc2UKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfRU1QVFkKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzY3JpcHRfdHlwZSddID0gVGFzay5DT0RJTkdfTkEKKworICAgICAgICAjIGRvIG5vdCBhc3NpZ24gb3JkZXIgbnVtYmVycyB0byBzY2VuZSB0YXNrcworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIHNlbGYudGFza19vcmRlciArPSAxCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvcmRlciddID0gc2VsZi50YXNrX29yZGVyCisKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3Rhc2tfb2JqZWN0KHRhc2tfaW5mb3JtYXRpb24pCisKKyAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdvdXRjb21lJzogdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddLAorICAgICAgICAgICAgICAgICAgICB9CisKKworICAgIGRlZiBzdG9yZV90YXNrc19zdGF0cyhzZWxmLCBldmVudCk6CisgICAgICAgIGZvciAodGFza2ZpbGUsIHRhc2tuYW1lLCB0YXNrc3RhdHMsIHJlY2lwZW5hbWUpIGluIEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCk6CisgICAgICAgICAgICBsb2NhbGZpbGVwYXRoID0gdGFza2ZpbGUuc3BsaXQoIjoiKVstMV0KKyAgICAgICAgICAgIGFzc2VydCBsb2NhbGZpbGVwYXRoLnN0YXJ0c3dpdGgoIi8iKQorCisgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUodGFza2ZpbGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXS5zdGFydHN3aXRoKHJlY2lwZV9pbmZvcm1hdGlvblsnbGF5ZXJfdmVyc2lvbiddLmxvY2FsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb25bJ2ZpbGVfcGF0aCddID0gcmVjaXBlX2luZm9ybWF0aW9uWydmaWxlX3BhdGgnXVtsZW4ocmVjaXBlX2luZm9ybWF0aW9uWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCk6XS5sc3RyaXAoIi8iKQorCisgICAgICAgICAgICAgICAgcmVjaXBlX29iamVjdCA9IFJlY2lwZS5vYmplY3RzLmdldChsYXllcl92ZXJzaW9uID0gcmVjaXBlX2luZm9ybWF0aW9uWydsYXllcl92ZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoX19lbmRzd2l0aCA9IHJlY2lwZV9pbmZvcm1hdGlvblsnZmlsZV9wYXRoJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJlY2lwZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgUmVjaXBlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlY2lwZSBmb3IgcmVjaXBlX2luZm9ybWF0aW9uICVzIG5hbWUgJXMiICwgcGZvcm1hdChyZWNpcGVfaW5mb3JtYXRpb24pLCByZWNpcGVuYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb24gPSB7fQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnYnVpbGQnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2J1aWxkJ10KKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3JlY2lwZSddID0gcmVjaXBlX29iamVjdAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsndGFza19uYW1lJ10gPSB0YXNrbmFtZQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnY3B1X3VzYWdlJ10gPSB0YXNrc3RhdHNbJ2NwdV91c2FnZSddCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydkaXNrX2lvJ10gPSB0YXNrc3RhdHNbJ2Rpc2tfaW8nXQorICAgICAgICAgICAgaWYgJ2VsYXBzZWRfdGltZScgaW4gdGFza3N0YXRzOgorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2VsYXBzZWRfdGltZSddID0gdGFza3N0YXRzWydlbGFwc2VkX3RpbWUnXQorICAgICAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3Rhc2tfb2JqZWN0KHRhc2tfaW5mb3JtYXRpb24sIFRydWUpICAjIG11c3QgZXhpc3QKKworICAgIGRlZiB1cGRhdGVfYW5kX3N0b3JlX3Rhc2soc2VsZiwgZXZlbnQpOgorICAgICAgICBhc3NlcnQgJ3Rhc2tmaWxlJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICBsb2NhbGZpbGVwYXRoID0gZXZlbnQudGFza2ZpbGUuc3BsaXQoIjoiKVstMV0KKyAgICAgICAgYXNzZXJ0IGxvY2FsZmlsZXBhdGguc3RhcnRzd2l0aCgiLyIpCisKKyAgICAgICAgaWRlbnRpZmllciA9IGV2ZW50LnRhc2tmaWxlICsgIjoiICsgZXZlbnQudGFza25hbWUKKyAgICAgICAgaWYgbm90IGlkZW50aWZpZXIgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICAjIHdlIGRvIGEgYml0IG9mIGd1ZXNzaW5nCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFt4IGZvciB4IGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ10ua2V5cygpIGlmIHguZW5kc3dpdGgoaWRlbnRpZmllcildCisgICAgICAgICAgICAgICAgaWYgbGVuKGNhbmRpZGF0ZXMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBjYW5kaWRhdGVzWzBdCisKKyAgICAgICAgYXNzZXJ0IGlkZW50aWZpZXIgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXQorICAgICAgICBpZGVudGlmaWVybGlzdCA9IGlkZW50aWZpZXIuc3BsaXQoIjoiKQorICAgICAgICByZWFsdGFza2ZpbGUgPSAiOiIuam9pbihpZGVudGlmaWVybGlzdFswOmxlbihpZGVudGlmaWVybGlzdCktMV0pCisgICAgICAgIHJlY2lwZV9pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF9yZWNpcGVfaW5mb3JtYXRpb25fZnJvbV90YXNrZmlsZShyZWFsdGFza2ZpbGUpCisgICAgICAgIHJlY2lwZSA9IHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV9yZWNpcGVfb2JqZWN0KHJlY2lwZV9pbmZvcm1hdGlvbiwgVHJ1ZSkKKyAgICAgICAgdGFza19pbmZvcm1hdGlvbiA9IHNlbGYuX2dldF90YXNrX2luZm9ybWF0aW9uKGV2ZW50LHJlY2lwZSkKKworICAgICAgICBpZiAndGltZScgaW4gdmFycyhldmVudCk6CisgICAgICAgICAgICBpZiBub3QgJ3N0YXJ0X3RpbWUnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl06CisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFza2RhdGEnXVtpZGVudGlmaWVyXVsnc3RhcnRfdGltZSddID0gZXZlbnQudGltZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydlbmRfdGltZSddID0gZXZlbnQudGltZQorICAgICAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ3N0YXJ0X3RpbWUnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl1bJ3N0YXJ0X3RpbWUnXQorCisgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3Rhc2tkYXRhJ11baWRlbnRpZmllcl1bJ291dGNvbWUnXQorCisgICAgICAgIGlmICdsb2dmaWxlJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ2xvZ2ZpbGUnXSA9IGV2ZW50LmxvZ2ZpbGUKKworICAgICAgICBpZiAnX21lc3NhZ2UnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnbWVzc2FnZSddID0gZXZlbnQuX21lc3NhZ2UKKworICAgICAgICBpZiAndGFza2ZsYWdzJyBpbiB2YXJzKGV2ZW50KToKKyAgICAgICAgICAgICMgd2l0aCBUYXNrU3RhcnRlZCwgd2UgZ2V0IGV2ZW4gbW9yZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgaWYgJ3B5dGhvbicgaW4gZXZlbnQudGFza2ZsYWdzLmtleXMoKSBhbmQgZXZlbnQudGFza2ZsYWdzWydweXRob24nXSA9PSAnMSc6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc2NyaXB0X3R5cGUnXSA9IFRhc2suQ09ESU5HX1BZVEhPTgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydzY3JpcHRfdHlwZSddID0gVGFzay5DT0RJTkdfU0hFTEwKKworICAgICAgICBpZiB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPT0gVGFzay5PVVRDT01FX05BOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza0NvbXBsZXRlZCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tDb21wbGV0ZWQpKToKKyAgICAgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uWydvdXRjb21lJ10gPSBUYXNrLk9VVENPTUVfU1VDQ0VTUworICAgICAgICAgICAgICAgIGRlbCBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkKSk6CisgICAgICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnb3V0Y29tZSddID0gVGFzay5PVVRDT01FX0ZBSUxFRAorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmludGVybmFsX3N0YXRlWyd0YXNrZGF0YSddW2lkZW50aWZpZXJdCisKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgICMgd2UgZm9yY2UgYSBzeW5jIHBvaW50IGhlcmUsIHRvIGdldCB0aGUgcHJvZ3Jlc3MgYmFyIHRvIHNob3cKKyAgICAgICAgICAgIGlmIHNlbGYuYXV0b2NvbW1pdF9zdGVwICUgMyA9PSAwOgorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmF1dG9jb21taXRfc3RlcCArPSAxCisKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3Rhc2tfb2JqZWN0KHRhc2tfaW5mb3JtYXRpb24sIFRydWUpICMgbXVzdCBleGlzdAorCisKKyAgICBkZWYgc3RvcmVfbWlzc2VkX3N0YXRlX3Rhc2tzKHNlbGYsIGV2ZW50KToKKyAgICAgICAgZm9yIChmbiwgdGFza25hbWUsIHRhc2toYXNoLCBzc3RhdGVmaWxlKSBpbiBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydtaXNzZWQnXToKKworICAgICAgICAgICAgIyBpZGVudGlmaWVyID0gZm4gKyB0YXNrbmFtZSArICJfc2V0c2NlbmUiCisgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUoZm4pCisgICAgICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24pCisgICAgICAgICAgICBtZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICAgICAgbWV2ZW50LnRhc2tuYW1lID0gdGFza25hbWUKKyAgICAgICAgICAgIG1ldmVudC50YXNraGFzaCA9IHRhc2toYXNoCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3Rhc2tfaW5mb3JtYXRpb24obWV2ZW50LHJlY2lwZSkKKworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3RhcnRfdGltZSddID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgICAgIHRhc2tfaW5mb3JtYXRpb25bJ291dGNvbWUnXSA9IFRhc2suT1VUQ09NRV9OQQorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3N0YXRlX2NoZWNrc3VtJ10gPSB0YXNraGFzaAorICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsnc3N0YXRlX3Jlc3VsdCddID0gVGFzay5TU1RBVEVfTUlTUworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsncGF0aF90b19zc3RhdGVfb2JqJ10gPSBzc3RhdGVmaWxlCisKKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uKQorCisgICAgICAgIGZvciAoZm4sIHRhc2tuYW1lLCB0YXNraGFzaCwgc3N0YXRlZmlsZSkgaW4gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnZm91bmQnXToKKworICAgICAgICAgICAgIyBpZGVudGlmaWVyID0gZm4gKyB0YXNrbmFtZSArICJfc2V0c2NlbmUiCisgICAgICAgICAgICByZWNpcGVfaW5mb3JtYXRpb24gPSBzZWxmLl9nZXRfcmVjaXBlX2luZm9ybWF0aW9uX2Zyb21fdGFza2ZpbGUoZm4pCisgICAgICAgICAgICByZWNpcGUgPSBzZWxmLm9ybV93cmFwcGVyLmdldF91cGRhdGVfcmVjaXBlX29iamVjdChyZWNpcGVfaW5mb3JtYXRpb24pCisgICAgICAgICAgICBtZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICAgICAgbWV2ZW50LnRhc2tuYW1lID0gdGFza25hbWUKKyAgICAgICAgICAgIG1ldmVudC50YXNraGFzaCA9IHRhc2toYXNoCisgICAgICAgICAgICB0YXNrX2luZm9ybWF0aW9uID0gc2VsZi5fZ2V0X3Rhc2tfaW5mb3JtYXRpb24obWV2ZW50LHJlY2lwZSkKKworICAgICAgICAgICAgdGFza19pbmZvcm1hdGlvblsncGF0aF90b19zc3RhdGVfb2JqJ10gPSBzc3RhdGVmaWxlCisKKyAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm9ybWF0aW9uKQorCisKKyAgICBkZWYgc3RvcmVfdGFyZ2V0X3BhY2thZ2VfZGF0YShzZWxmLCBldmVudCk6CisgICAgICAgICMgZm9yIGFsbCBpbWFnZSB0YXJnZXRzCisgICAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgaWYgdGFyZ2V0LmlzX2ltYWdlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YSA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudClbJ3BrZ2RhdGEnXQorICAgICAgICAgICAgICAgICAgICBpbWdkYXRhID0gQnVpbGRJbmZvSGVscGVyLl9nZXRfZGF0YV9mcm9tX2V2ZW50KGV2ZW50KVsnaW1nZGF0YSddW3RhcmdldC50YXJnZXRdCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV90YXJnZXRfcGFja2FnZV9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCB0YXJnZXQsIGltZ2RhdGEsIHBrZ2RhdGEsIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWRhdGEgPSBCdWlsZEluZm9IZWxwZXIuX2dldF9kYXRhX2Zyb21fZXZlbnQoZXZlbnQpWydmaWxlZGF0YSddW3RhcmdldC50YXJnZXRdCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JtX3dyYXBwZXIuc2F2ZV90YXJnZXRfZmlsZV9pbmZvcm1hdGlvbihzZWxmLmludGVybmFsX3N0YXRlWydidWlsZCddLCB0YXJnZXQsIGZpbGVkYXRhKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBtdXN0IGhhdmUgbm90IGdvdCB0aGUgZGF0YSBmb3IgdGhpcyBpbWFnZSwgbm90aGluZyB0byBzYXZlCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworCisKKyAgICBkZWYgc3RvcmVfZGVwZW5kZW5jeV9pbmZvcm1hdGlvbihzZWxmLCBldmVudCk6CisgICAgICAgIGFzc2VydCAnX2RlcGdyYXBoJyBpbiB2YXJzKGV2ZW50KQorICAgICAgICBhc3NlcnQgJ2xheWVyLXByaW9yaXRpZXMnIGluIGV2ZW50Ll9kZXBncmFwaAorICAgICAgICBhc3NlcnQgJ3BuJyBpbiBldmVudC5fZGVwZ3JhcGgKKyAgICAgICAgYXNzZXJ0ICd0ZGVwZW5kcycgaW4gZXZlbnQuX2RlcGdyYXBoCisKKyAgICAgICAgZXJyb3Jtc2cgPSAiIgorCisgICAgICAgICMgc2F2ZSBsYXllciB2ZXJzaW9uIHByaW9yaXRpZXMKKyAgICAgICAgaWYgJ2xheWVyLXByaW9yaXRpZXMnIGluIGV2ZW50Ll9kZXBncmFwaC5rZXlzKCk6CisgICAgICAgICAgICBmb3IgbHYgaW4gZXZlbnQuX2RlcGdyYXBoWydsYXllci1wcmlvcml0aWVzJ106CisgICAgICAgICAgICAgICAgKF8sIHBhdGgsIF8sIHByaW9yaXR5KSA9IGx2CisgICAgICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9vYmogPSBzZWxmLl9nZXRfbGF5ZXJfdmVyc2lvbl9mb3JfcGF0aChwYXRoWzE6XSkgIyBwYXRocyBzdGFydCB3aXRoIGEgXgorICAgICAgICAgICAgICAgIGFzc2VydCBsYXllcl92ZXJzaW9uX29iaiBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb25fb2JqLnByaW9yaXR5ID0gcHJpb3JpdHkKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uX29iai5zYXZlKCkKKworICAgICAgICAjIHNhdmUgcmVjaXBlIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXSA9IHt9CisgICAgICAgIGZvciBwbiBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ106CisKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2ZpbGVuYW1lJ10uc3BsaXQoIjoiKVstMV0KKyAgICAgICAgICAgIHBhdGhmbGFncyA9ICI6Ii5qb2luKHNvcnRlZChldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydmaWxlbmFtZSddLnNwbGl0KCI6IilbOi0xXSkpCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uX29iaiA9IHNlbGYuX2dldF9sYXllcl92ZXJzaW9uX2Zvcl9wYXRoKGZpbGVfbmFtZSkKKworICAgICAgICAgICAgYXNzZXJ0IGxheWVyX3ZlcnNpb25fb2JqIGlzIG5vdCBOb25lCisKKyAgICAgICAgICAgIHJlY2lwZV9pbmZvID0ge30KKyAgICAgICAgICAgIHJlY2lwZV9pbmZvWyduYW1lJ10gPSBwbgorICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXSA9IGxheWVyX3ZlcnNpb25fb2JqCisKKyAgICAgICAgICAgIGlmICd2ZXJzaW9uJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWyd2ZXJzaW9uJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWyd2ZXJzaW9uJ10ubHN0cmlwKCI6IikKKworICAgICAgICAgICAgaWYgJ3N1bW1hcnknIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ3N1bW1hcnknXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ3N1bW1hcnknXQorCisgICAgICAgICAgICBpZiAnbGljZW5zZScgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snbGljZW5zZSddID0gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXVsnbGljZW5zZSddCisKKyAgICAgICAgICAgIGlmICdkZXNjcmlwdGlvbicgaW4gZXZlbnQuX2RlcGdyYXBoWydwbiddW3BuXToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snZGVzY3JpcHRpb24nXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2Rlc2NyaXB0aW9uJ10KKworICAgICAgICAgICAgaWYgJ3NlY3Rpb24nIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ3NlY3Rpb24nXSA9IGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ3NlY3Rpb24nXQorCisgICAgICAgICAgICBpZiAnaG9tZXBhZ2UnIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl06CisgICAgICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2hvbWVwYWdlJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydob21lcGFnZSddCisKKyAgICAgICAgICAgIGlmICdidWd0cmFja2VyJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dOgorICAgICAgICAgICAgICAgIHJlY2lwZV9pbmZvWydidWd0cmFja2VyJ10gPSBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dWydidWd0cmFja2VyJ10KKworICAgICAgICAgICAgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddID0gZmlsZV9uYW1lCisgICAgICAgICAgICByZWNpcGVfaW5mb1sncGF0aGZsYWdzJ10gPSBwYXRoZmxhZ3MKKworICAgICAgICAgICAgaWYgcmVjaXBlX2luZm9bJ2ZpbGVfcGF0aCddLnN0YXJ0c3dpdGgocmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKToKKyAgICAgICAgICAgICAgICByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ10gPSByZWNpcGVfaW5mb1snZmlsZV9wYXRoJ11bbGVuKHJlY2lwZV9pbmZvWydsYXllcl92ZXJzaW9uJ10ubG9jYWxfcGF0aCk6XS5sc3RyaXAoIi8iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlJlY2lwZSBmaWxlIHBhdGggJXMgaXMgbm90IHVuZGVyIGxheWVyIHZlcnNpb24gYXQgJXMiICUgKHJlY2lwZV9pbmZvWydmaWxlX3BhdGgnXSwgcmVjaXBlX2luZm9bJ2xheWVyX3ZlcnNpb24nXS5sb2NhbF9wYXRoKSkKKworICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5vcm1fd3JhcHBlci5nZXRfdXBkYXRlX3JlY2lwZV9vYmplY3QocmVjaXBlX2luZm8pCisgICAgICAgICAgICByZWNpcGUuaXNfaW1hZ2UgPSBGYWxzZQorICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiBldmVudC5fZGVwZ3JhcGhbJ3BuJ11bcG5dLmtleXMoKToKKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIGV2ZW50Ll9kZXBncmFwaFsncG4nXVtwbl1bJ2luaGVyaXRzJ106CisgICAgICAgICAgICAgICAgICAgIGlmIGNscy5lbmRzd2l0aCgnL2ltYWdlLmJiY2xhc3MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS5pc19pbWFnZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiByZWNpcGUuaXNfaW1hZ2U6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZVsndGFyZ2V0cyddOgorICAgICAgICAgICAgICAgICAgICBpZiBwbiA9PSB0LnRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHQuaXNfaW1hZ2UgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICB0LnNhdmUoKQorICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddW3BuXSA9IHJlY2lwZQorCisgICAgICAgICMgd2UnbGwgbm90IGdldCByZWNpcGVzIGZvciBrZXkgdy8gdmFsdWVzIGxpc3RlZCBpbiBBU1NVTUVfUFJPVklERUQKKworICAgICAgICBhc3N1bWVfcHJvdmlkZWQgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQVNTVU1FX1BST1ZJREVEIl0pWzBdLnNwbGl0KCkKKworICAgICAgICAjIHNhdmUgcmVjaXBlIGRlcGVuZGVuY3kKKyAgICAgICAgIyBidWlsZHRpbWUKKyAgICAgICAgcmVjaXBlZGVwc19vYmplY3RzID0gW10KKyAgICAgICAgZm9yIHJlY2lwZSBpbiBldmVudC5fZGVwZ3JhcGhbJ2RlcGVuZHMnXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBzZWxmLmludGVybmFsX3N0YXRlWydyZWNpcGVzJ11bcmVjaXBlXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZXZlbnQuX2RlcGdyYXBoWydkZXBlbmRzJ11bcmVjaXBlXToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ3JlY2lwZXMnXVtkZXBdCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZWRlcHNfb2JqZWN0cy5hcHBlbmQoUmVjaXBlX0RlcGVuZGVuY3koIHJlY2lwZSA9IHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gZGVwZW5kZW5jeSwgZGVwX3R5cGUgPSBSZWNpcGVfRGVwZW5kZW5jeS5UWVBFX0RFUEVORFMpKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZSBub3QgaW4gYXNzdW1lX3Byb3ZpZGVkIGFuZCBub3Qgc3RyKGUpLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9ICIgIHN0cGQ6IEtleUVycm9yIHNhdmluZyByZWNpcGUgZGVwZW5kZW5jeSBmb3IgJXMsICVzIFxuIiAlIChyZWNpcGUsIGUpCisgICAgICAgIFJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUocmVjaXBlZGVwc19vYmplY3RzKQorCisgICAgICAgICMgc2F2ZSBhbGwgdGFzayBpbmZvcm1hdGlvbgorICAgICAgICBkZWYgX3NhdmVfYV90YXNrKHRhc2tkZXNjKToKKyAgICAgICAgICAgIHNwZWMgPSByZS5zcGxpdChyJ1wuJywgdGFza2Rlc2MpCisgICAgICAgICAgICBwbiA9ICIuIi5qb2luKHNwZWNbMDotMV0pCisgICAgICAgICAgICB0YXNrbmFtZSA9IHNwZWNbLTFdCisgICAgICAgICAgICBlID0gZXZlbnQKKyAgICAgICAgICAgIGUudGFza25hbWUgPSBwbgorICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddW3BuXQorICAgICAgICAgICAgdGFza19pbmZvID0gc2VsZi5fZ2V0X3Rhc2tfaW5mb3JtYXRpb24oZSwgcmVjaXBlKQorICAgICAgICAgICAgdGFza19pbmZvWyd0YXNrX25hbWUnXSA9IHRhc2tuYW1lCisgICAgICAgICAgICB0YXNrX29iaiA9IHNlbGYub3JtX3dyYXBwZXIuZ2V0X3VwZGF0ZV90YXNrX29iamVjdCh0YXNrX2luZm8pCisgICAgICAgICAgICByZXR1cm4gdGFza19vYmoKKworICAgICAgICAjIGNyZWF0ZSB0YXNrcworICAgICAgICB0YXNrcyA9IHt9CisgICAgICAgIGZvciB0YXNrZGVzYyBpbiBldmVudC5fZGVwZ3JhcGhbJ3RkZXBlbmRzJ106CisgICAgICAgICAgICB0YXNrc1t0YXNrZGVzY10gPSBfc2F2ZV9hX3Rhc2sodGFza2Rlc2MpCisKKyAgICAgICAgIyBjcmVhdGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGFza3MKKyAgICAgICAgdGFza2RlcHNfb2JqZWN0cyA9IFtdCisgICAgICAgIGZvciB0YXNrZGVzYyBpbiBldmVudC5fZGVwZ3JhcGhbJ3RkZXBlbmRzJ106CisgICAgICAgICAgICB0YXJnZXQgPSB0YXNrc1t0YXNrZGVzY10KKyAgICAgICAgICAgIGZvciB0YXNrZGVwIGluIGV2ZW50Ll9kZXBncmFwaFsndGRlcGVuZHMnXVt0YXNrZGVzY106CisgICAgICAgICAgICAgICAgaWYgdGFza2RlcCBub3QgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgICAgICMgRmV0Y2ggdGFza3MgaW5mbyBpcyBub3QgY29sbGVjdGVkIHByZXZpb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gX3NhdmVfYV90YXNrKHRhc2tkZXApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gdGFza3NbdGFza2RlcF0KKyAgICAgICAgICAgICAgICB0YXNrZGVwc19vYmplY3RzLmFwcGVuZChUYXNrX0RlcGVuZGVuY3koIHRhc2sgPSB0YXJnZXQsIGRlcGVuZHNfb24gPSBkZXAgKSkKKyAgICAgICAgVGFza19EZXBlbmRlbmN5Lm9iamVjdHMuYnVsa19jcmVhdGUodGFza2RlcHNfb2JqZWN0cykKKworICAgICAgICBpZiBsZW4oZXJyb3Jtc2cpID4gMDoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGluZm9oZWxwZXI6IGRlcGVuZGVuY3kgaW5mbyBub3QgaWRlbnRpZnkgcmVjaXBlczogXG4lcyIsIGVycm9ybXNnKQorCisKKyAgICBkZWYgc3RvcmVfYnVpbGRfcGFja2FnZV9pbmZvcm1hdGlvbihzZWxmLCBldmVudCk6CisgICAgICAgIHBhY2thZ2VfaW5mbyA9IEJ1aWxkSW5mb0hlbHBlci5fZ2V0X2RhdGFfZnJvbV9ldmVudChldmVudCkKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5zYXZlX2J1aWxkX3BhY2thZ2VfaW5mb3JtYXRpb24oc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsncmVjaXBlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBfc3RvcmVfYnVpbGRfZG9uZShzZWxmLCBlcnJvcmNvZGUpOgorICAgICAgICBsb2dnZXIuaW5mbygiQnVpbGQgZXhpdGVkIHdpdGggZXJyb3Jjb2RlICVkIiwgZXJyb3Jjb2RlKQorICAgICAgICBicl9pZCwgYmVfaWQgPSBzZWxmLmJyYmUuc3BsaXQoIjoiKQorICAgICAgICBiZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSBiZV9pZCkKKyAgICAgICAgYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19MT0NLCisgICAgICAgIGJlLnNhdmUoKQorICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmdldChwayA9IGJyX2lkKQorICAgICAgICBpZiBlcnJvcmNvZGUgPT0gMDoKKyAgICAgICAgICAgICMgcmVxdWVzdCBhcmNoaXZhbCBvZiB0aGUgcHJvamVjdCBhcnRpZmFjdHMKKyAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9BUkNISVZFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVECisgICAgICAgIGJyLnNhdmUoKQorCisKKyAgICBkZWYgc3RvcmVfbG9nX2Vycm9yKHNlbGYsIHRleHQpOgorICAgICAgICBtb2NrZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICBtb2NrZXZlbnQubGV2ZWxubyA9IGZvcm1hdHRlci5FUlJPUgorICAgICAgICBtb2NrZXZlbnQubXNnID0gdGV4dAorICAgICAgICBtb2NrZXZlbnQucGF0aG5hbWUgPSAnLS0gTm9uZScKKyAgICAgICAgbW9ja2V2ZW50LmxpbmVubyA9IExvZ01lc3NhZ2UuRVJST1IKKyAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQobW9ja2V2ZW50KQorCisgICAgZGVmIHN0b3JlX2xvZ19leGNlcHRpb24oc2VsZiwgdGV4dCwgYmFja3RyYWNlID0gIiIpOgorICAgICAgICBtb2NrZXZlbnQgPSBNb2NrRXZlbnQoKQorICAgICAgICBtb2NrZXZlbnQubGV2ZWxubyA9IC0xCisgICAgICAgIG1vY2tldmVudC5tc2cgPSB0ZXh0CisgICAgICAgIG1vY2tldmVudC5wYXRobmFtZSA9IGJhY2t0cmFjZQorICAgICAgICBtb2NrZXZlbnQubGluZW5vID0gLTEKKyAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQobW9ja2V2ZW50KQorCisKKyAgICBkZWYgc3RvcmVfbG9nX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA8IGZvcm1hdHRlci5XQVJOSU5HOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgJ2FyZ3MnIGluIHZhcnMoZXZlbnQpOgorICAgICAgICAgICAgZXZlbnQubXNnID0gZXZlbnQubXNnICUgZXZlbnQuYXJncworCisgICAgICAgIGlmIG5vdCAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICBpZiBzZWxmLmJyYmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBub3QgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddLmFwcGVuZChldmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6ICAgIyB3ZSdyZSB1bmRlciBUb2FzdGVyIGNvbnRyb2wsIHRoZSBidWlsZCBpcyBhbHJlYWR5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBiciwgXyA9IHNlbGYuYnJiZS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgYnVpbGRyZXF1ZXN0ID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZ2V0KHBrID0gYnIpCisgICAgICAgICAgICAgICAgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXSA9IGJ1aWxkcmVxdWVzdC5idWlsZAorCisgICAgICAgIGlmICdidWlsZCcgaW4gc2VsZi5pbnRlcm5hbF9zdGF0ZSBhbmQgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICAjIGlmIHdlIGhhdmUgYSBiYWNrbG9nIG9mIGV2ZW50cywgZG8gb3VyIGJlc3QgdG8gc2F2ZSB0aGVtIGhlcmUKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ10pOgorICAgICAgICAgICAgICAgIHRlbXBldmVudCA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5wb3AoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiYnVpbGRpbmZvaGVscGVyOiBTYXZpbmcgc3RvcmVkIGV2ZW50ICVzICIgJSB0ZW1wZXZlbnQpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9yZV9sb2dfZXZlbnQodGVtcGV2ZW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiYnVpbGRpbmZvaGVscGVyOiBBbGwgZXZlbnRzIHNhdmVkIikKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYmFja2xvZyddCisKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uID0ge30KKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydidWlsZCddID0gc2VsZi5pbnRlcm5hbF9zdGF0ZVsnYnVpbGQnXQorICAgICAgICBpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdHRlci5FUlJPUjoKKyAgICAgICAgICAgIGxvZ19pbmZvcm1hdGlvblsnbGV2ZWwnXSA9IExvZ01lc3NhZ2UuRVJST1IKKyAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdHRlci5XQVJOSU5HOgorICAgICAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsZXZlbCddID0gTG9nTWVzc2FnZS5XQVJOSU5HCisgICAgICAgIGVsaWYgZXZlbnQubGV2ZWxubyA9PSAtMjogICAjIHRvYXN0ZXIgc2VsZi1sb2dnaW5nCisgICAgICAgICAgICBsb2dfaW5mb3JtYXRpb25bJ2xldmVsJ10gPSAtMgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsZXZlbCddID0gTG9nTWVzc2FnZS5JTkZPCisKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydtZXNzYWdlJ10gPSBldmVudC5tc2cKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydwYXRobmFtZSddID0gZXZlbnQucGF0aG5hbWUKKyAgICAgICAgbG9nX2luZm9ybWF0aW9uWydsaW5lbm8nXSA9IGV2ZW50LmxpbmVubworICAgICAgICBsb2dnZXIuaW5mbygiTG9nZ2luZyBlcnJvciAyOiAlcyIsIGxvZ19pbmZvcm1hdGlvbikKKyAgICAgICAgc2VsZi5vcm1fd3JhcHBlci5jcmVhdGVfbG9nbWVzc2FnZShsb2dfaW5mb3JtYXRpb24pCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgZXJyb3Jjb2RlKToKKyAgICAgICAgaWYgc2VsZi5icmJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RvcmVfYnVpbGRfZG9uZShlcnJvcmNvZGUpCisKKyAgICAgICAgaWYgJ2JhY2tsb2cnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICBpZiAnYnVpbGQnIGluIHNlbGYuaW50ZXJuYWxfc3RhdGU6CisgICAgICAgICAgICAgICAgIyB3ZSBzYXZlIG1pc3NlZCBldmVudHMgaW4gdGhlIGRhdGFiYXNlIGZvciB0aGUgY3VycmVudCBidWlsZAorICAgICAgICAgICAgICAgIHRlbXBldmVudCA9IHNlbGYuaW50ZXJuYWxfc3RhdGVbJ2JhY2tsb2cnXS5wb3AoKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcmVfbG9nX2V2ZW50KHRlbXBldmVudCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIG5vIGJ1aWxkLCBhbmQgd2Ugc3RpbGwgaGF2ZSBldmVudHM7IHNvbWV0aGluZyBhbWF6aW5nbHkgd3JvbmcgaGFwcGVuZAorICAgICAgICAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmludGVybmFsX3N0YXRlWydiYWNrbG9nJ106CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVU5TQVZFRCBsb2c6ICVzIiwgZXZlbnQubXNnKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Y2JlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNyBAQAorIworIyBHdGsrIFVJIHBpZWNlcyBmb3IgQml0QmFrZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGRldGFpbHNwYWdlLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkZGV0YWlsc3BhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZjNjkwZQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGRldGFpbHNwYWdlLnB5CkBAIC0wLDAgKzEsNDM3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgcGFuZ28KK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgYmIucHJvY2VzcworZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iTm90ZWJvb2ssIEhvYkFsdEJ1dHRvbiwgSG9iV2FycENlbGxSZW5kZXJlclRleHQsIEhvYkJ1dHRvbiwgSG9iSW5mb0J1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBSdW5uaW5nQnVpbGRUcmVlVmlldworZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBCdWlsZEZhaWx1cmVUcmVlVmlldworZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKKworY2xhc3MgQnVpbGRDb25maWd1cmF0aW9uVHJlZVZpZXcoZ3RrLlRyZWVWaWV3KToKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcnVsZXNfaGludChGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfaGVhZGVyc192aXNpYmxlKEZhbHNlKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgiaG92ZXItZXhwYW5kIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5nZXRfc2VsZWN0aW9uKCkuc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisKKyAgICAgICAgIyBUaGUgaWNvbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIG9yIGZhaWxlZC4KKyAgICAgICAgcmVuZGVyZXIwID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICByZW5kZXJlcjAuc2V0X3Byb3BlcnR5KCdmb250LWRlc2MnLCBwYW5nby5Gb250RGVzY3JpcHRpb24oJ2NvdXJpZXIgYm9sZCAxMicpKQorICAgICAgICBjb2wwID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiTmFtZSIsIHJlbmRlcmVyMCwgdGV4dD0wKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4gKGNvbDApCisKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiBjb25maWd1cmF0aW9uLgorICAgICAgICByZW5kZXJlcjEgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dChjb2xfbnVtYmVyPTEpCisgICAgICAgIGNvbDEgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJWYWx1ZXMiLCByZW5kZXJlcjEsIHRleHQ9MSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wxKQorCisgICAgZGVmIHNldF92YXJzKHNlbGYsIGtleT0iIiwgdmFyPVsiIl0pOgorICAgICAgICBkID0ge30KKyAgICAgICAgaWYgdHlwZSh2YXIpID09IHN0cjoKKyAgICAgICAgICAgIGQgPSB7a2V5OiBbdmFyXX0KKyAgICAgICAgZWxpZiB0eXBlKHZhcikgPT0gbGlzdCBhbmQgbGVuKHZhcikgPiAxOgorICAgICAgICAgICAgI2NyZWF0ZSB0aGUgc3ViIGl0ZW0gbGluZQorICAgICAgICAgICAgbCA9IFtdCisgICAgICAgICAgICB0ZXh0ID0gIiIKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHZhcjoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gIiAtICIgKyBpdGVtCisgICAgICAgICAgICAgICAgbC5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgIGQgPSB7a2V5OiB2YXJ9CisKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBzZXRfY29uZmlnX21vZGVsKHNlbGYsIHNob3dfdmFycyk6CisgICAgICAgIGxpc3Rtb2RlbCA9IGd0ay5UcmVlU3RvcmUoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgcGFyZW50ID0gTm9uZQorICAgICAgICBmb3IgdmFyIGluIHNob3dfdmFyczoKKyAgICAgICAgICAgIGZvciBzdWJpdGVtIGluIHZhci5pdGVtcygpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzdWJpdGVtWzBdCisgICAgICAgICAgICAgICAgaXNfcGFyZW50ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBzdWJpdGVtWzFdOgorICAgICAgICAgICAgICAgICAgICBpZiBpc19wYXJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBsaXN0bW9kZWwuYXBwZW5kKHBhcmVudCwgKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhcmVudCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0bW9kZWwuYXBwZW5kKHBhcmVudCwgKE5vbmUsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICIgICAgIC0gIgorICAgICAgICAgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgIyByZW5ldyB0aGUgdHJlZSBtb2RlbCBhZnRlciBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMKKyAgICAgICAgc2VsZi5zZXRfbW9kZWwobGlzdG1vZGVsKQorCisgICAgZGVmIHNob3coc2VsZiwgc3JjX2NvbmZpZ19pbmZvLCBzcmNfcGFyYW1zKToKKyAgICAgICAgdmFycyA9IFtdCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkJCIHZlcnNpb246Iiwgc3JjX3BhcmFtcy5iYl92ZXJzaW9uKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiVGFyZ2V0IGFyY2g6Iiwgc3JjX3BhcmFtcy50YXJnZXRfYXJjaCkpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIlRhcmdldCBPUzoiLCBzcmNfcGFyYW1zLnRhcmdldF9vcykpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIk1hY2hpbmU6Iiwgc3JjX2NvbmZpZ19pbmZvLmN1cnJfbWFjaCkpCisgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkRpc3RybzoiLCBzcmNfY29uZmlnX2luZm8uY3Vycl9kaXN0cm8pKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJEaXN0cm8gdmVyc2lvbjoiLCBzcmNfcGFyYW1zLmRpc3Ryb192ZXJzaW9uKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiU0RLIG1hY2hpbmU6Iiwgc3JjX2NvbmZpZ19pbmZvLmN1cnJfc2RrX21hY2hpbmUpKQorICAgICAgICB2YXJzLmFwcGVuZChzZWxmLnNldF92YXJzKCJUdW5lIGZlYXR1cmVzOiIsIHNyY19wYXJhbXMudHVuZV9wa2dhcmNoKSkKKyAgICAgICAgdmFycy5hcHBlbmQoc2VsZi5zZXRfdmFycygiTGF5ZXJzOiIsIHNyY19jb25maWdfaW5mby5sYXllcnMpKQorCisgICAgICAgIGZvciBwYXRoIGluIHNyY19jb25maWdfaW5mby5sYXllcnM6CisgICAgICAgICAgICBpbXBvcnQgb3MsIG9zLnBhdGgKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgIGJyYW5jaCA9IGJiLnByb2Nlc3MucnVuKCdjZCAlczsgZ2l0IGJyYW5jaCB8IGdyZXAgIl4qICIgfCB0ciAtZCAiKiAiJyAlIHBhdGgpWzBdCisgICAgICAgICAgICAgICAgaWYgYnJhbmNoLnN0YXJ0c3dpdGgoImZhdGFsOiIpOgorICAgICAgICAgICAgICAgICAgICBicmFuY2ggPSAiKHVua25vd24pIgorICAgICAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgIHZhcnMuYXBwZW5kKHNlbGYuc2V0X3ZhcnMoIkJyYW5jaDoiLCBicmFuY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21vZGVsKHZhcnMpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X21vZGVsKE5vbmUpCisKKyMKKyMgQnVpbGREZXRhaWxzUGFnZQorIworCitjbGFzcyBCdWlsZERldGFpbHNQYWdlIChIb2JQYWdlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyKToKKyAgICAgICAgc3VwZXIoQnVpbGREZXRhaWxzUGFnZSwgc2VsZikuX19pbml0X18oYnVpbGRlciwgIkJ1aWxkaW5nIC4uLiIpCisKKyAgICAgICAgc2VsZi5udW1fb2ZfaXNzdWVzID0gMAorICAgICAgICBzZWxmLmVuZHBhdGggPSAoMCwpCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLnZib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisKKyAgICAgICAgc2VsZi5wcm9ncmVzc19ib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNlbGYudGFza19zdGF0dXMgPSBndGsuTGFiZWwoIlxuIikgIyB0byBlbnN1cmUgbGF5b3V0IGlzIGNvcnJlY3QKKyAgICAgICAgc2VsZi50YXNrX3N0YXR1cy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBzZWxmLnByb2dyZXNzX2JveC5wYWNrX3N0YXJ0KHNlbGYudGFza19zdGF0dXMsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYm94LnBhY2tfZW5kKHNlbGYucHJvZ3Jlc3NfaGJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfaGJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3NfYmFyLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJTdG9wIikKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zdG9wX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfaGJveC5wYWNrX2VuZChzZWxmLnN0b3BfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5ub3RlYm9vayA9IEhvYk5vdGVib29rKCkKKyAgICAgICAgc2VsZi5jb25maWdfdHYgPSBCdWlsZENvbmZpZ3VyYXRpb25UcmVlVmlldygpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19jb25maWcgPSBndGsuU2Nyb2xsZWRXaW5kb3cgKCkKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2NvbmZpZy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQUxXQVlTKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfY29uZmlnLmFkZChzZWxmLmNvbmZpZ190dikKKyAgICAgICAgc2VsZi5ub3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLnNjcm9sbGVkX3ZpZXdfY29uZmlnLCAiQnVpbGQgY29uZmlndXJhdGlvbiIpCisKKyAgICAgICAgc2VsZi5mYWlsdXJlX3R2ID0gQnVpbGRGYWlsdXJlVHJlZVZpZXcoKQorICAgICAgICBzZWxmLmZhaWx1cmVfbW9kZWwgPSBzZWxmLmJ1aWxkZXIuaGFuZGxlci5idWlsZC5tb2RlbC5mYWlsdXJlX21vZGVsKCkKKyAgICAgICAgc2VsZi5mYWlsdXJlX3R2LnNldF9tb2RlbChzZWxmLmZhaWx1cmVfbW9kZWwpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlID0gZ3RrLlNjcm9sbGVkV2luZG93ICgpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BTFdBWVMpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19mYWlsdXJlLmFkZChzZWxmLmZhaWx1cmVfdHYpCisgICAgICAgIHNlbGYubm90ZWJvb2suYXBwZW5kX3BhZ2Uoc2VsZi5zY3JvbGxlZF92aWV3X2ZhaWx1cmUsICJJc3N1ZXMiKQorCisgICAgICAgIHNlbGYuYnVpbGRfdHYgPSBSdW5uaW5nQnVpbGRUcmVlVmlldyhyZWFkb25seT1UcnVlLCBob2I9VHJ1ZSkKKyAgICAgICAgc2VsZi5idWlsZF90di5zZXRfbW9kZWwoc2VsZi5idWlsZGVyLmhhbmRsZXIuYnVpbGQubW9kZWwpCisgICAgICAgIHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZCA9IGd0ay5TY3JvbGxlZFdpbmRvdyAoKQorICAgICAgICBzZWxmLnNjcm9sbGVkX3ZpZXdfYnVpbGQuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgc2VsZi5zY3JvbGxlZF92aWV3X2J1aWxkLmFkZChzZWxmLmJ1aWxkX3R2KQorICAgICAgICBzZWxmLm5vdGVib29rLmFwcGVuZF9wYWdlKHNlbGYuc2Nyb2xsZWRfdmlld19idWlsZCwgIkxvZyIpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmhhbmRsZXIuYnVpbGQubW9kZWwuY29ubmVjdF9hZnRlcigicm93LWNoYW5nZWQiLCBzZWxmLnNjcm9sbF90b19wcmVzZW50X3Jvdywgc2VsZi5zY3JvbGxlZF92aWV3X2J1aWxkLmdldF92YWRqdXN0bWVudCgpLCBzZWxmLmJ1aWxkX3R2KQorCisgICAgICAgIHNlbGYuYnV0dG9uX2JveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCcmbHQ7Jmx0OyBCYWNrJykKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5iYWNrX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19zdGFydChzZWxmLmJhY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICBkZWYgdXBkYXRlX2J1aWxkX3N0YXR1cyhzZWxmLCBjdXJyZW50LCB0b3RhbCwgdGFzayk6CisgICAgICAgIHJlY2lwZV9wYXRoLCByZWNpcGVfdGFzayA9IHRhc2suc3BsaXQoIiwgIikKKyAgICAgICAgcmVjaXBlID0gb3MucGF0aC5iYXNlbmFtZShyZWNpcGVfcGF0aCkucnN0cmlwKCIuYmIiKQorICAgICAgICB0c2tfbXNnID0gIjxiPlJ1bm5pbmcgdGFzayAlcyBvZiAlczo8L2I+ICVzXG48Yj5SZWNpcGU6PC9iPiAlcyIgJSAoY3VycmVudCwgdG90YWwsIHJlY2lwZV90YXNrLCByZWNpcGUpCisgICAgICAgIHNlbGYudGFza19zdGF0dXMuc2V0X21hcmt1cCh0c2tfbXNnKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKworICAgIGRlZiByZXNldF9idWlsZF9zdGF0dXMoc2VsZik6CisgICAgICAgIHNlbGYudGFza19zdGF0dXMuc2V0X21hcmt1cCgiXG4iKSAjIHRvIGVuc3VyZSBsYXlvdXQgaXMgY29ycmVjdAorICAgICAgICBzZWxmLmVuZHBhdGggPSAoMCwpCisKKyAgICBkZWYgc2hvd19pc3N1ZXMoc2VsZik6CisgICAgICAgIHNlbGYubnVtX29mX2lzc3VlcyArPSAxCisgICAgICAgIHNlbGYubm90ZWJvb2suc2hvd19pbmRpY2F0b3JfaWNvbigiSXNzdWVzIiwgc2VsZi5udW1fb2ZfaXNzdWVzKQorICAgICAgICBzZWxmLm5vdGVib29rLnF1ZXVlX2RyYXcoKQorCisgICAgZGVmIHJlc2V0X2lzc3VlcyhzZWxmKToKKyAgICAgICAgc2VsZi5udW1fb2ZfaXNzdWVzID0gMAorICAgICAgICBzZWxmLm5vdGVib29rLmhpZGVfaW5kaWNhdG9yX2ljb24oIklzc3VlcyIpCisKKyAgICBkZWYgX3JlbW92ZV9hbGxfd2lkZ2V0KHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYudmJveC5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLnZib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuYm94X2dyb3VwX2FyZWEuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLnJlbW92ZShjaGlsZCkKKworICAgIGRlZiBhZGRfYnVpbGRfZmFpbF90b3BfYmFyKHNlbGYsIGFjdGlvbnMsIGxvZ19maWxlPU5vbmUpOgorICAgICAgICBwcmltYXJ5X2FjdGlvbiA9ICJFZGl0ICVzIiAlIGFjdGlvbnMKKworICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5FUlJPUgorICAgICAgICBidWlsZF9mYWlsX3RvcCA9IGd0ay5FdmVudEJveCgpCisgICAgICAgICNidWlsZF9mYWlsX3RvcC5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCAyMDApCisgICAgICAgIGJ1aWxkX2ZhaWxfdG9wLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKKworICAgICAgICBidWlsZF9mYWlsX3RhYiA9IGd0ay5UYWJsZSgxNCwgNDYsIFRydWUpCisgICAgICAgIGJ1aWxkX2ZhaWxfdG9wLmFkZChidWlsZF9mYWlsX3RhYikKKworICAgICAgICBpY29uID0gZ3RrLkltYWdlKCkKKyAgICAgICAgaWNvbl9waXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX0VSUk9SX0ZJTEUpCisgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKGljb25fcGl4X2J1ZmZlcikKKyAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGljb24sIDEsIDQsIDAsIDYpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz48Yj4lczwvYj48L3NwYW4+IiAlIHNlbGYudGl0bGUpCisgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChsYWJlbCwgNCwgMjYsIDAsIDYpCisKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICAjIEVuc3VyZSB2YXJpYWJsZSBkaXNrX2Z1bGwgaXMgZGVmaW5lZAorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLmJ1aWxkZXIsICdkaXNrX2Z1bGwnKToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5kaXNrX2Z1bGwgPSBGYWxzZQorCisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5kaXNrX2Z1bGw6CisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gc2l6ZT0nbWVkaXVtJz5UaGVyZSBpcyBubyBkaXNrIHNwYWNlIGxlZnQsIHNvIEhvYiBjYW5ub3QgZmluaXNoIGJ1aWxkaW5nIHlvdXIgaW1hZ2UuIEZyZWUgdXAgc29tZSBkaXNrIHNwYWNlXG4iCisgICAgICAgICAgICBtYXJrdXAgKz0gImFuZCByZXN0YXJ0IHRoZSBidWlsZC4gQ2hlY2sgdGhlIFwiSXNzdWVzXCIgdGFiIGZvciBtb3JlIGRldGFpbHM8L3NwYW4+IgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSdtZWRpdW0nPkNoZWNrIHRoZSBcIklzc3Vlc1wiIGluZm9ybWF0aW9uIGZvciBtb3JlIGRldGFpbHM8L3NwYW4+IikKKyAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGxhYmVsLCA0LCA0MCwgNCwgOSkKKworICAgICAgICAjIGNyZWF0ZSBidXR0b24gJ0VkaXQgcGFja2FnZXMnCisgICAgICAgIGFjdGlvbl9idXR0b24gPSBIb2JCdXR0b24ocHJpbWFyeV9hY3Rpb24pCisgICAgICAgICNhY3Rpb25fYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoLTEsIDQwKQorICAgICAgICBhY3Rpb25fYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgdGhlICVzIHBhcmFtZXRlcnMiICUgYWN0aW9ucykKKyAgICAgICAgYWN0aW9uX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5mYWlsdXJlX3ByaW1hcnlfYWN0aW9uX2J1dHRvbl9jbGlja2VkX2NiLCBwcmltYXJ5X2FjdGlvbikKKworICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiT3BlbiBsb2ciKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9IQUxGKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIGJ1aWxkJ3MgbG9nIGZpbGUiKQorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLm9wZW5fbG9nX2J1dHRvbl9jbGlja2VkX2NiLCBsb2dfZmlsZSkKKworICAgICAgICBhdHRhY2hfcG9zID0gKDI0IGlmIGxvZ19maWxlIGVsc2UgMTQpCisgICAgICAgIGZpbGVfYnVnX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignRmlsZSBhIGJ1ZycpCisgICAgICAgIGZpbGVfYnVnX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfSEFMRikKKyAgICAgICAgZmlsZV9idWdfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIk9wZW4gdGhlIFlvY3RvIFByb2plY3QgYnVnIHRyYWNraW5nIHdlYnNpdGUiKQorICAgICAgICBmaWxlX2J1Z19idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuZmFpbHVyZV9hY3RpdmF0ZV9maWxlX2J1Z19saW5rX2NiKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkZXIuZGlza19mdWxsOgorICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGFjdGlvbl9idXR0b24sIDQsIDEzLCA5LCAxMikKKyAgICAgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgICAgIGJ1aWxkX2ZhaWxfdGFiLmF0dGFjaChvcGVuX2xvZ19idXR0b24sIDE0LCAyMywgOSwgMTIpCisgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2goZmlsZV9idWdfYnV0dG9uLCBhdHRhY2hfcG9zLCBhdHRhY2hfcG9zICsgOSwgOSwgMTIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3RhcnRfYnVpbGQgPSBIb2JCdXR0b24oIlJlc3RhcnQgdGhlIGJ1aWxkIikKKyAgICAgICAgICAgIHJlc3RhcnRfYnVpbGQuc2V0X3Rvb2x0aXBfdGV4dCgiUmVzdGFydCB0aGUgYnVpbGQiKQorICAgICAgICAgICAgcmVzdGFydF9idWlsZC5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5yZXN0YXJ0X2J1aWxkX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gocmVzdGFydF9idWlsZCwgNCwgMTMsIDksIDEyKQorICAgICAgICAgICAgYnVpbGRfZmFpbF90YWIuYXR0YWNoKGFjdGlvbl9idXR0b24sIDE0LCAyMywgOSwgMTIpCisgICAgICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgICAgICBidWlsZF9mYWlsX3RhYi5hdHRhY2gob3Blbl9sb2dfYnV0dG9uLCBhdHRhY2hfcG9zLCBhdHRhY2hfcG9zICsgOSwgOSwgMTIpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmRpc2tfZnVsbCA9IEZhbHNlCisgICAgICAgIHJldHVybiBidWlsZF9mYWlsX3RvcAorCisgICAgZGVmIHNob3dfZmFpbF9wYWdlKHNlbGYsIHRpdGxlKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorICAgICAgICBzZWxmLnRpdGxlID0gIkhvYiBjYW5ub3QgYnVpbGQgeW91ciAlcyIgJSB0aXRsZQorCisgICAgICAgIHNlbGYuYnVpbGRfZmFpbF9iYXIgPSBzZWxmLmFkZF9idWlsZF9mYWlsX3RvcF9iYXIodGl0bGUsIHNlbGYuYnVpbGRlci5jdXJyZW50X2xvZ2ZpbGUpCisKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmJ1aWxkX2ZhaWxfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLnZib3gsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5ub3RlYm9vaywgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubm90ZWJvb2suc2V0X3BhZ2UoIklzc3VlcyIpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uaGlkZSgpCisKKyAgICBkZWYgYWRkX2J1aWxkX3N0b3BfdG9wX2JhcihzZWxmLCBhY3Rpb24sIGxvZ19maWxlPU5vbmUpOgorICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZCisgICAgICAgIGJ1aWxkX3N0b3BfdG9wID0gZ3RrLkV2ZW50Qm94KCkKKyAgICAgICAgI2J1aWxkX3N0b3BfdG9wLnNldF9zaXplX3JlcXVlc3QoLTEsIDIwMCkKKyAgICAgICAgYnVpbGRfc3RvcF90b3AubW9kaWZ5X2JnKGd0ay5TVEFURV9OT1JNQUwsIGd0ay5nZGsuY29sb3JfcGFyc2UoY29sb3IpKQorICAgICAgICBidWlsZF9zdG9wX3RvcC5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBidWlsZF9zdG9wX3RvcC5ncmFiX2RlZmF1bHQoKQorCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiID0gZ3RrLlRhYmxlKDExLCA0NiwgVHJ1ZSkKKyAgICAgICAgYnVpbGRfc3RvcF90b3AuYWRkKGJ1aWxkX3N0b3BfdGFiKQorCisgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBpY29uX3BpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fSE9WRVJfRklMRSkKKyAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYoaWNvbl9waXhfYnVmZmVyKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2goaWNvbiwgMSwgNCwgMCwgNikKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgc2VsZi50aXRsZSkKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGxhYmVsLCA0LCAyNiwgMCwgNikKKworICAgICAgICBhY3Rpb25fYnV0dG9uID0gSG9iQnV0dG9uKCJFZGl0ICVzIiAlIGFjdGlvbikKKyAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA0MCkKKyAgICAgICAgaWYgYWN0aW9uID09ICJpbWFnZSI6CisgICAgICAgICAgICBhY3Rpb25fYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgdGhlIGltYWdlIHBhcmFtZXRlcnMiKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAicmVjaXBlcyI6CisgICAgICAgICAgICBhY3Rpb25fYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkVkaXQgdGhlIGluY2x1ZGVkIHJlY2lwZXMiKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAicGFja2FnZXMiOgorICAgICAgICAgICAgYWN0aW9uX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBpbmNsdWRlZCBwYWNrYWdlcyIpCisgICAgICAgIGFjdGlvbl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc3RvcF9wcmltYXJ5X2FjdGlvbl9idXR0b25fY2xpY2tlZF9jYiwgYWN0aW9uKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2goYWN0aW9uX2J1dHRvbiwgNCwgMTMsIDYsIDkpCisKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24gPSBIb2JBbHRCdXR0b24oIk9wZW4gbG9nIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfSEFMRikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBidWlsZCdzIGxvZyBmaWxlIikKKyAgICAgICAgICAgIG9wZW5fbG9nX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5vcGVuX2xvZ19idXR0b25fY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisgICAgICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2gob3Blbl9sb2dfYnV0dG9uLCAxNCwgMjMsIDYsIDkpCisKKyAgICAgICAgYXR0YWNoX3BvcyA9ICgyNCBpZiBsb2dfZmlsZSBlbHNlIDE0KQorICAgICAgICBidWlsZF9idXR0b24gPSBIb2JBbHRCdXR0b24oIkJ1aWxkIG5ldyBpbWFnZSIpCisgICAgICAgICNidWlsZF9idXR0b24uc2V0X3NpemVfcmVxdWVzdCgtMSwgNDApCisgICAgICAgIGJ1aWxkX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBzY3JhdGNoIikKKyAgICAgICAgYnVpbGRfYnV0dG9uLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLm5ld19pbWFnZV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGJ1aWxkX2J1dHRvbiwgYXR0YWNoX3BvcywgYXR0YWNoX3BvcyArIDksIDYsIDkpCisKKyAgICAgICAgcmV0dXJuIGJ1aWxkX3N0b3BfdG9wLCBhY3Rpb25fYnV0dG9uCisKKyAgICBkZWYgc2hvd19zdG9wX3BhZ2Uoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorICAgICAgICBzZWxmLnRpdGxlID0gIkJ1aWxkIHN0b3BwZWQiCisgICAgICAgIHNlbGYuYnVpbGRfc3RvcF9iYXIsIGFjdGlvbl9idXR0b24gPSBzZWxmLmFkZF9idWlsZF9zdG9wX3RvcF9iYXIoYWN0aW9uLCBzZWxmLmJ1aWxkZXIuY3VycmVudF9sb2dmaWxlKQorCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmdyb3VwX2FsaWduLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9zdG9wX2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi52Ym94LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubm90ZWJvb2ssIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmhpZGUoKQorICAgICAgICByZXR1cm4gYWN0aW9uX2J1dHRvbgorCisgICAgZGVmIHNob3dfcGFnZShzZWxmLCBzdGVwKToKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorICAgICAgICBpZiBzdGVwID09IHNlbGYuYnVpbGRlci5QQUNLQUdFX0dFTkVSQVRJTkcgb3Igc3RlcCA9PSBzZWxmLmJ1aWxkZXIuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgc2VsZi50aXRsZSA9ICJCdWlsZGluZyBwYWNrYWdlcyAuLi4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRpdGxlID0gIkJ1aWxkaW5nIGltYWdlIC4uLiIKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3RvcCA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihOb25lKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5idWlsZF9kZXRhaWxzX3RvcCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ncm91cF9hbGlnbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi52Ym94LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5jb25maWdfdHYucmVzZXQoKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnByb2dyZXNzX2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubm90ZWJvb2ssIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX2VuZChzZWxmLmJ1dHRvbl9ib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubm90ZWJvb2suc2V0X3BhZ2UoIkxvZyIpCisgICAgICAgIHNlbGYuYmFja19idXR0b24uaGlkZSgpCisKKyAgICAgICAgc2VsZi5yZXNldF9idWlsZF9zdGF0dXMoKQorICAgICAgICBzZWxmLnJlc2V0X2lzc3VlcygpCisKKyAgICBkZWYgdXBkYXRlX3Byb2dyZXNzX2JhcihzZWxmLCB0aXRsZSwgZnJhY3Rpb24sIHN0YXR1cz1Ob25lKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGl0bGUodGl0bGUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKKworICAgIGRlZiBiYWNrX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2NvbmZpZ3VyYXRpb24oKQorCisgICAgZGVmIG5ld19pbWFnZV9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIucmVzZXQoKQorCisgICAgZGVmIHNob3dfYmFja19idXR0b24oc2VsZik6CisgICAgICAgIHNlbGYuYmFja19idXR0b24uc2hvdygpCisKKyAgICBkZWYgc3RvcF9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc3RvcF9idWlsZCgpCisKKyAgICBkZWYgaGlkZV9zdG9wX2J1dHRvbihzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBzZWxmLnN0b3BfYnV0dG9uLmhpZGUoKQorCisgICAgZGVmIHNjcm9sbF90b19wcmVzZW50X3JvdyhzZWxmLCBtb2RlbCwgcGF0aCwgaXRlciwgdl9hZGosIHRyZWV2aWV3KToKKyAgICAgICAgaWYgdHJlZXZpZXcgYW5kIHZfYWRqOgorICAgICAgICAgICAgaWYgcGF0aFswXSA+IHNlbGYuZW5kcGF0aFswXTogIyBjaGVjayB0aGUgZXZlbnQgaXMgYSBuZXcgcm93IGFwcGVuZCBvciBub3QKKyAgICAgICAgICAgICAgICBzZWxmLmVuZHBhdGggPSBwYXRoCisgICAgICAgICAgICAgICAgIyBjaGVjayB0aGUgZ3RrLmFkanVzdG1lbnQgcG9zaXRpb24gaXMgYXQgZW5kIGJvdW5kYXJ5IG9yIG5vdAorICAgICAgICAgICAgICAgIGlmICh2X2Fkai51cHBlciA8PSB2X2Fkai5wYWdlX3NpemUpIG9yICh2X2Fkai52YWx1ZSA9PSB2X2Fkai51cHBlciAtIHZfYWRqLnBhZ2Vfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgIHRyZWV2aWV3LnNjcm9sbF90b19jZWxsKHBhdGgpCisKKyAgICBkZWYgc2hvd19jb25maWd1cmF0aW9ucyhzZWxmLCBjb25maWd1cmF0aW9ucywgcGFyYW1zKToKKyAgICAgICAgc2VsZi5jb25maWdfdHYuc2hvdyhjb25maWd1cmF0aW9ucywgcGFyYW1zKQorCisgICAgZGVmIGZhaWx1cmVfcHJpbWFyeV9hY3Rpb25fYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBhY3Rpb24pOgorICAgICAgICBpZiAiRWRpdCByZWNpcGVzIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19yZWNpcGVzKCkKKyAgICAgICAgZWxpZiAiRWRpdCBwYWNrYWdlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcGFja2FnZXMoKQorICAgICAgICBlbGlmICJFZGl0IGltYWdlIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiByZXN0YXJ0X2J1aWxkX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5qdXN0X2Jha2UoKQorCisgICAgZGVmIHN0b3BfcHJpbWFyeV9hY3Rpb25fYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBhY3Rpb24pOgorICAgICAgICBpZiAicmVjaXBlcyIgaW4gYWN0aW9uOgorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcmVjaXBlcygpCisgICAgICAgIGVsaWYgInBhY2thZ2VzIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19wYWNrYWdlcygpCisgICAgICAgIGVsaWYgImltYWdlIiBpbiBhY3Rpb246CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBvcGVuX2xvZ19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24sIGxvZ19maWxlKToKKyAgICAgICAgaWYgbG9nX2ZpbGU6CisgICAgICAgICAgICBsb2dfZmlsZSA9ICJmaWxlOi8vLyIgKyBsb2dfZmlsZQorICAgICAgICAgICAgZ3RrLnNob3dfdXJpKHNjcmVlbj1idXR0b24uZ2V0X3NjcmVlbigpLCB1cmk9bG9nX2ZpbGUsIHRpbWVzdGFtcD0wKQorCisgICAgZGVmIGZhaWx1cmVfYWN0aXZhdGVfZmlsZV9idWdfbGlua19jYihzZWxmLCBidXR0b24pOgorICAgICAgICBidXR0b24uY2hpbGQuZW1pdCgnYWN0aXZhdGUtbGluaycsICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyIpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRlci5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjYzQxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvYnVpbGRlci5weQpAQCAtMCwwICsxLDE0NzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdsaWIKK2ltcG9ydCBndGssIGdvYmplY3QKK2ltcG9ydCBjb3B5CitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2hsZXgKK2ltcG9ydCByZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCB0aW1lCitmcm9tIGJiLnVpLmNydW1icy5pbWFnZWNvbmZpZ3VyYXRpb25wYWdlIGltcG9ydCBJbWFnZUNvbmZpZ3VyYXRpb25QYWdlCitmcm9tIGJiLnVpLmNydW1icy5yZWNpcGVzZWxlY3Rpb25wYWdlIGltcG9ydCBSZWNpcGVTZWxlY3Rpb25QYWdlCitmcm9tIGJiLnVpLmNydW1icy5wYWNrYWdlc2VsZWN0aW9ucGFnZSBpbXBvcnQgUGFja2FnZVNlbGVjdGlvblBhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkZGV0YWlsc3BhZ2UgaW1wb3J0IEJ1aWxkRGV0YWlsc1BhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmltYWdlZGV0YWlsc3BhZ2UgaW1wb3J0IEltYWdlRGV0YWlsc1BhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLnNhbml0eWNoZWNrcGFnZSBpbXBvcnQgU2FuaXR5Q2hlY2tQYWdlCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGh3YywgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLnBlcnNpc3RlbnR0b29sdGlwIGltcG9ydCBQZXJzaXN0ZW50VG9vbHRpcAoraW1wb3J0IGJiLnVpLmNydW1icy51dGlscworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5zaW1wbGVzZXR0aW5nc2RpYWxvZyBpbXBvcnQgU2ltcGxlU2V0dGluZ3NEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5hZHZhbmNlZHNldHRpbmdzZGlhbG9nIGltcG9ydCBBZHZhbmNlZFNldHRpbmdzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuZGVwbG95aW1hZ2VkaWFsb2cgaW1wb3J0IERlcGxveUltYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcubGF5ZXJzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IExheWVyU2VsZWN0aW9uRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuaW1hZ2VzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IEltYWdlU2VsZWN0aW9uRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcucGFyc2luZ3dhcm5pbmdzZGlhbG9nIGltcG9ydCBQYXJzaW5nV2FybmluZ3NEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5wcm9wZXJ0eWRpYWxvZyBpbXBvcnQgUHJvcGVydHlEaWFsb2cKKworaG9iVmVyID0gMjAxMjA4MDgKKworY2xhc3MgQ29uZmlndXJhdGlvbjoKKyAgICAnJydSZXByZXNlbnRzIHRoZSBkYXRhIHN0cnVjdHVyZSBvZiBjb25maWd1cmF0aW9uLicnJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlX3Byb3h5X3N0cmluZyhjbHMsIHByb3h5KToKKyAgICAgICAgcGF0dGVybiA9ICJeXHMqKChodHRwfGh0dHBzfGZ0cHxzb2Nrc3xjdnMpOi8vKT8oKFxTKyk6KFxTKylAKT8oW15cczpdKykoOihcZCspKT8vPyIKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocGF0dGVybiwgcHJveHkpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDIpLCBtYXRjaC5ncm91cCg0KSwgbWF0Y2guZ3JvdXAoNSksIG1hdGNoLmdyb3VwKDYpLCBtYXRjaC5ncm91cCg4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUsIE5vbmUsICIiLCAiIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfaG9zdF9zdHJpbmcoY2xzLCBwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIGRlZmF1bHRfcHJvdD0iIik6CisgICAgICAgIGlmIGhvc3QgPT0gTm9uZSBvciBob3N0ID09ICIiOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgcGFzc3dkID0gcGFzc3dkIG9yICIiCisKKyAgICAgICAgaWYgdXNlciAhPSBOb25lIGFuZCB1c2VyICE9ICIiOgorICAgICAgICAgICAgaWYgcHJvdCA9PSBOb25lIG9yIHByb3QgPT0gIiI6CisgICAgICAgICAgICAgICAgcHJvdCA9IGRlZmF1bHRfcHJvdAorICAgICAgICAgICAgcmV0dXJuIHByb3QgKyAiOi8vIiArIHVzZXIgKyAiOiIgKyBwYXNzd2QgKyAiQCIgKyBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwcm90ID09IE5vbmUgb3IgcHJvdCA9PSAiIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaG9zdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvdCArICI6Ly8iICsgaG9zdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1ha2VfcG9ydF9zdHJpbmcoY2xzLCBwb3J0KToKKyAgICAgICAgcG9ydCA9IHBvcnQgb3IgIiIKKyAgICAgICAgcmV0dXJuIHBvcnQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWtlX3Byb3h5X3N0cmluZyhjbHMsIHByb3QsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCwgZGVmYXVsdF9wcm90PSIiKToKKyAgICAgICAgaWYgaG9zdCA9PSBOb25lIG9yIGhvc3QgPT0gIiI6IyBvciBwb3J0ID09IE5vbmUgb3IgcG9ydCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHJldHVybiBDb25maWd1cmF0aW9uLm1ha2VfaG9zdF9zdHJpbmcocHJvdCwgdXNlciwgcGFzc3dkLCBob3N0LCBkZWZhdWx0X3Byb3QpICsgKCI6IiArIENvbmZpZ3VyYXRpb24ubWFrZV9wb3J0X3N0cmluZyhwb3J0KSBpZiBwb3J0IGVsc2UgIiIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY3Vycl9tYWNoID0gIiIKKyAgICAgICAgc2VsZi5zZWxlY3RlZF9pbWFnZSA9IE5vbmUKKyAgICAgICAgIyBzZXR0aW5ncworICAgICAgICBzZWxmLmN1cnJfZGlzdHJvID0gIiIKKyAgICAgICAgc2VsZi5kbGRpciA9IHNlbGYuc3N0YXRlZGlyID0gc2VsZi5zc3RhdGVtaXJyb3IgPSAiIgorICAgICAgICBzZWxmLnBtYWtlID0gc2VsZi5iYnRocmVhZCA9IDAKKyAgICAgICAgc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0ID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSA9IHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSA9IDAKKyAgICAgICAgc2VsZi5pbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSAxCisgICAgICAgIHNlbGYuaW5jb21wYXRfbGljZW5zZSA9ICIiCisgICAgICAgIHNlbGYuY3Vycl9zZGtfbWFjaGluZSA9ICIiCisgICAgICAgIHNlbGYuY29uZl92ZXJzaW9uID0gc2VsZi5sY29uZl92ZXJzaW9uID0gIiIKKyAgICAgICAgc2VsZi5leHRyYV9zZXR0aW5nID0ge30KKyAgICAgICAgc2VsZi50b29sY2hhaW5fYnVpbGQgPSBGYWxzZQorICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZXMgPSAiIgorICAgICAgICBzZWxmLmltYWdlX3NpemUgPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2VfcGFja2FnZXMgPSBbXQorICAgICAgICAjIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgc2VsZi5sYXllcnMgPSBbXQorICAgICAgICAjIGltYWdlL3JlY2lwZXMvcGFja2FnZXMKKyAgICAgICAgc2VsZi5jbGVhcl9zZWxlY3Rpb24oKQorCisgICAgICAgIHNlbGYudXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IFtdCisKKyAgICAgICAgc2VsZi5kZWZhdWx0X3Rhc2sgPSAiYnVpbGQiCisKKyAgICAgICAgIyBwcm94eSBzZXR0aW5ncworICAgICAgICBzZWxmLmVuYWJsZV9wcm94eSA9IE5vbmUKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcm94aWVzID0geworICAgICAgICAgICAgImh0dHAiICA6IFtOb25lLCBOb25lLCBOb25lLCAiIiwgIiJdLCAgIyBwcm90b2NvbCA6IFtwcm90LCB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnRdCisgICAgICAgICAgICAiaHR0cHMiIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgICAgICAiZnRwIiAgIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgICAgICAic29ja3MiIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgICAgICAiY3ZzIiAgIDogW05vbmUsIE5vbmUsIE5vbmUsICIiLCAiIl0sCisgICAgICAgIH0KKworICAgIGRlZiBjbGVhcl9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuc2VsZWN0ZWRfcmVjaXBlcyA9IFtdCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfcGFja2FnZXMgPSBbXQorICAgICAgICBzZWxmLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYuaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlcyA9IFtdCisgICAgICAgIHNlbGYuaW5pdGlhbF91c2VyX3NlbGVjdGVkX3BhY2thZ2VzID0gW10KKworICAgIGRlZiBzcGxpdF9wcm94eShzZWxmLCBwcm90b2NvbCwgcHJveHkpOgorICAgICAgICBlbnRyeSA9IFtdCisgICAgICAgIHByb3QsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCA9IENvbmZpZ3VyYXRpb24ucGFyc2VfcHJveHlfc3RyaW5nKHByb3h5KQorICAgICAgICBlbnRyeS5hcHBlbmQocHJvdCkKKyAgICAgICAgZW50cnkuYXBwZW5kKHVzZXIpCisgICAgICAgIGVudHJ5LmFwcGVuZChwYXNzd2QpCisgICAgICAgIGVudHJ5LmFwcGVuZChob3N0KQorICAgICAgICBlbnRyeS5hcHBlbmQocG9ydCkKKyAgICAgICAgc2VsZi5wcm94aWVzW3Byb3RvY29sXSA9IGVudHJ5CisKKyAgICBkZWYgY29tYmluZV9wcm94eShzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGVudHJ5ID0gc2VsZi5wcm94aWVzW3Byb3RvY29sXQorICAgICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5tYWtlX3Byb3h5X3N0cmluZyhlbnRyeVswXSwgZW50cnlbMV0sIGVudHJ5WzJdLCBlbnRyeVszXSwgZW50cnlbNF0sIHByb3RvY29sKQorCisgICAgZGVmIGNvbWJpbmVfaG9zdF9vbmx5KHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgZW50cnkgPSBzZWxmLnByb3hpZXNbcHJvdG9jb2xdCisgICAgICAgIHJldHVybiBDb25maWd1cmF0aW9uLm1ha2VfaG9zdF9zdHJpbmcoZW50cnlbMF0sIGVudHJ5WzFdLCBlbnRyeVsyXSwgZW50cnlbM10sIHByb3RvY29sKQorCisgICAgZGVmIGNvbWJpbmVfcG9ydF9vbmx5KHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgZW50cnkgPSBzZWxmLnByb3hpZXNbcHJvdG9jb2xdCisgICAgICAgIHJldHVybiBDb25maWd1cmF0aW9uLm1ha2VfcG9ydF9zdHJpbmcoZW50cnlbNF0pCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBhcmFtcyk6CisgICAgICAgICMgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5jdXJyX2Rpc3RybyA9IHBhcmFtc1siZGlzdHJvIl0KKyAgICAgICAgc2VsZi5kbGRpciA9IHBhcmFtc1siZGxkaXIiXQorICAgICAgICBzZWxmLnNzdGF0ZWRpciA9IHBhcmFtc1sic3N0YXRlZGlyIl0KKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3IgPSBwYXJhbXNbInNzdGF0ZW1pcnJvciJdCisgICAgICAgIHNlbGYucG1ha2UgPSBpbnQocGFyYW1zWyJwbWFrZSJdLnNwbGl0KClbMV0pCisgICAgICAgIHNlbGYuYmJ0aHJlYWQgPSBwYXJhbXNbImJidGhyZWFkIl0KKyAgICAgICAgc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0ID0gIiAiLmpvaW4ocGFyYW1zWyJwY2xhc3MiXS5zcGxpdCgicGFja2FnZV8iKSkuc3RyaXAoKQorICAgICAgICBzZWxmLmltYWdlX3Jvb3Rmc19zaXplID0gcGFyYW1zWyJpbWFnZV9yb290ZnNfc2l6ZSJdCisgICAgICAgIHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSA9IHBhcmFtc1siaW1hZ2VfZXh0cmFfc2l6ZSJdCisgICAgICAgIHNlbGYuaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gcGFyYW1zWydpbWFnZV9vdmVyaGVhZF9mYWN0b3InXQorICAgICAgICBzZWxmLmluY29tcGF0X2xpY2Vuc2UgPSBwYXJhbXNbImluY29tcGF0X2xpY2Vuc2UiXQorICAgICAgICBzZWxmLmN1cnJfc2RrX21hY2hpbmUgPSBwYXJhbXNbInNka19tYWNoaW5lIl0KKyAgICAgICAgc2VsZi5jb25mX3ZlcnNpb24gPSBwYXJhbXNbImNvbmZfdmVyc2lvbiJdCisgICAgICAgIHNlbGYubGNvbmZfdmVyc2lvbiA9IHBhcmFtc1sibGNvbmZfdmVyc2lvbiJdCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlcyA9IHBhcmFtc1siaW1hZ2VfZnN0eXBlcyJdCisgICAgICAgICMgc2VsZi5leHRyYV9zZXR0aW5nL3NlbGYudG9vbGNoYWluX2J1aWxkCisgICAgICAgICMgYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLmxheWVycyA9IHBhcmFtc1sibGF5ZXIiXS5zcGxpdCgpCisgICAgICAgIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGUgPSBwYXJhbXNbImxheWVyc19ub25fcmVtb3ZhYmxlIl0uc3BsaXQoKQorICAgICAgICBzZWxmLmRlZmF1bHRfdGFzayA9IHBhcmFtc1siZGVmYXVsdF90YXNrIl0KKworICAgICAgICAjIHByb3h5IHNldHRpbmdzCisgICAgICAgIHNlbGYuZW5hYmxlX3Byb3h5ID0gcGFyYW1zWyJodHRwX3Byb3h5Il0gIT0gIiIgb3IgcGFyYW1zWyJodHRwc19wcm94eSJdICE9ICIiIFwKKyAgICAgICAgICAgIG9yIHBhcmFtc1siZnRwX3Byb3h5Il0gIT0gIiIgb3IgcGFyYW1zWyJzb2Nrc19wcm94eSJdICE9ICIiIFwKKyAgICAgICAgICAgIG9yIHBhcmFtc1siY3ZzX3Byb3h5X2hvc3QiXSAhPSAiIiBvciBwYXJhbXNbImN2c19wcm94eV9wb3J0Il0gIT0gIiIKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgiaHR0cCIsIHBhcmFtc1siaHR0cF9wcm94eSJdKQorICAgICAgICBzZWxmLnNwbGl0X3Byb3h5KCJodHRwcyIsIHBhcmFtc1siaHR0cHNfcHJveHkiXSkKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgiZnRwIiwgcGFyYW1zWyJmdHBfcHJveHkiXSkKKyAgICAgICAgc2VsZi5zcGxpdF9wcm94eSgic29ja3MiLCBwYXJhbXNbInNvY2tzX3Byb3h5Il0pCisgICAgICAgIHNlbGYuc3BsaXRfcHJveHkoImN2cyIsIHBhcmFtc1siY3ZzX3Byb3h5X2hvc3QiXSArICI6IiArIHBhcmFtc1siY3ZzX3Byb3h5X3BvcnQiXSkKKworICAgIGRlZiBzYXZlKHNlbGYsIGhhbmRsZXIsIGRlZmF1bHRzPUZhbHNlKToKKyAgICAgICAgIyBiYmxheWVycy5jb25mCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJCQkxBWUVSUyIsIHNlbGYubGF5ZXJzLCAiYmJsYXllcnMuY29uZiIpCisgICAgICAgICMgbG9jYWwuY29uZgorICAgICAgICBpZiBub3QgZGVmYXVsdHM6CisgICAgICAgICAgICBoYW5kbGVyLmVhcmx5X2Fzc2lnbl92YXJfaW5fZmlsZSgiTUFDSElORSIsIHNlbGYuY3Vycl9tYWNoLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJESVNUUk8iLCBzZWxmLmN1cnJfZGlzdHJvLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJETF9ESVIiLCBzZWxmLmRsZGlyLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJTU1RBVEVfRElSIiwgc2VsZi5zc3RhdGVkaXIsICJsb2NhbC5jb25mIikKKyAgICAgICAgc3N0YXRlX21pcnJvcl9saXN0ID0gc2VsZi5zc3RhdGVtaXJyb3Iuc3BsaXQoIlxcbiAiKQorICAgICAgICBzc3RhdGVfbWlycm9yX2xpc3RfbW9kaWZpZWQgPSBbXQorICAgICAgICBmb3IgbWlycm9yIGluIHNzdGF0ZV9taXJyb3JfbGlzdDoKKyAgICAgICAgICAgIGlmIG1pcnJvciAhPSAiIjoKKyAgICAgICAgICAgICAgICBtaXJyb3IgPSBtaXJyb3IgKyAiXFxuIgorICAgICAgICAgICAgICAgIHNzdGF0ZV9taXJyb3JfbGlzdF9tb2RpZmllZC5hcHBlbmQobWlycm9yKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX01JUlJPUlMiLCBzc3RhdGVfbWlycm9yX2xpc3RfbW9kaWZpZWQsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIlBBUkFMTEVMX01BS0UiLCAiLWogJXMiICUgc2VsZi5wbWFrZSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQkJfTlVNQkVSX1RIUkVBRFMiLCBzZWxmLmJidGhyZWFkLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJQQUNLQUdFX0NMQVNTRVMiLCAiICIuam9pbihbInBhY2thZ2VfIiArIGkgZm9yIGkgaW4gc2VsZi5jdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KCldKSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfUk9PVEZTX1NJWkUiLCBzZWxmLmltYWdlX3Jvb3Rmc19zaXplLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9FWFRSQV9TUEFDRSIsIHNlbGYuaW1hZ2VfZXh0cmFfc2l6ZSwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU5DT01QQVRJQkxFX0xJQ0VOU0UiLCBzZWxmLmluY29tcGF0X2xpY2Vuc2UsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIlNES01BQ0hJTkUiLCBzZWxmLmN1cnJfc2RrX21hY2hpbmUsICJsb2NhbC5jb25mIikKKyAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkNPTkZfVkVSU0lPTiIsIHNlbGYuY29uZl92ZXJzaW9uLCAibG9jYWwuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJMQ09ORl9WRVJTSU9OIiwgc2VsZi5sY29uZl92ZXJzaW9uLCAiYmJsYXllcnMuY29uZiIpCisgICAgICAgIGhhbmRsZXIuc2V0X2V4dHJhX2NvbmZpZyhzZWxmLmV4dHJhX3NldHRpbmcpCisgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJUT09MQ0hBSU5fQlVJTEQiLCBzZWxmLnRvb2xjaGFpbl9idWlsZCwgImxvY2FsLmNvbmYiKQorICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiSU1BR0VfRlNUWVBFUyIsIHNlbGYuaW1hZ2VfZnN0eXBlcywgImxvY2FsLmNvbmYiKQorICAgICAgICBpZiBub3QgZGVmYXVsdHM6CisgICAgICAgICAgICAjIGltYWdlL3JlY2lwZXMvcGFja2FnZXMKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJfX1NFTEVDVEVEX0lNQUdFX18iLCBzZWxmLnNlbGVjdGVkX2ltYWdlLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiREVQRU5EUyIsIHNlbGYuc2VsZWN0ZWRfcmVjaXBlcywgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX0lOU1RBTEwiLCBzZWxmLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXMsICJsb2NhbC5jb25mIikKKyAgICAgICAgIyBwcm94eQorICAgICAgICBpZiBzZWxmLmVuYWJsZV9wcm94eSA9PSBUcnVlOgorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBfcHJveHkiLCBzZWxmLmNvbWJpbmVfcHJveHkoImh0dHAiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImh0dHBzX3Byb3h5Iiwgc2VsZi5jb21iaW5lX3Byb3h5KCJodHRwcyIpLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiZnRwX3Byb3h5Iiwgc2VsZi5jb21iaW5lX3Byb3h5KCJmdHAiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImFsbF9wcm94eSIsIHNlbGYuY29tYmluZV9wcm94eSgic29ja3MiKSwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoIkNWU19QUk9YWV9IT1NUIiwgc2VsZi5jb21iaW5lX2hvc3Rfb25seSgiY3ZzIiksICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfUE9SVCIsIHNlbGYuY29tYmluZV9wb3J0X29ubHkoImN2cyIpLCAibG9jYWwuY29uZiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiaHR0cF9wcm94eSIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiaHR0cHNfcHJveHkiLCAiIiwgImxvY2FsLmNvbmYiKQorICAgICAgICAgICAgaGFuZGxlci5zZXRfdmFyX2luX2ZpbGUoImZ0cF9wcm94eSIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiYWxsX3Byb3h5IiwgIiIsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGhhbmRsZXIuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfSE9TVCIsICIiLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICBoYW5kbGVyLnNldF92YXJfaW5fZmlsZSgiQ1ZTX1BST1hZX1BPUlQiLCAiIiwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHMgPSAiVkVSU0lPTjogJyVzJywgQkJMQVlFUlM6ICclcycsIE1BQ0hJTkU6ICclcycsIERJU1RSTzogJyVzJywgRExfRElSOiAnJXMnLCIgJSBcCisgICAgICAgICAgICAoaG9iVmVyLCAiICIuam9pbihzZWxmLmxheWVycyksIHNlbGYuY3Vycl9tYWNoLCBzZWxmLmN1cnJfZGlzdHJvLCBzZWxmLmRsZGlyICkKKyAgICAgICAgcyArPSAiU1NUQVRFX0RJUjogJyVzJywgU1NUQVRFX01JUlJPUjogJyVzJywgUEFSQUxMRUxfTUFLRTogJy1qICVzJywgQkJfTlVNQkVSX1RIUkVBRFM6ICclcycsIFBBQ0tBR0VfQ0xBU1NFUzogJyVzJywgIiAlIFwKKyAgICAgICAgICAgIChzZWxmLnNzdGF0ZWRpciwgc2VsZi5zc3RhdGVtaXJyb3IsIHNlbGYucG1ha2UsIHNlbGYuYmJ0aHJlYWQsICIgIi5qb2luKFsicGFja2FnZV8iICsgaSBmb3IgaSBpbiBzZWxmLmN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKV0pKQorICAgICAgICBzICs9ICJJTUFHRV9ST09URlNfU0laRTogJyVzJywgSU1BR0VfRVhUUkFfU1BBQ0U6ICclcycsIElOQ09NUEFUSUJMRV9MSUNFTlNFOiAnJXMnLCBTREtNQUNISU5FOiAnJXMnLCBDT05GX1ZFUlNJT046ICclcycsICIgJSBcCisgICAgICAgICAgICAoc2VsZi5pbWFnZV9yb290ZnNfc2l6ZSwgc2VsZi5pbWFnZV9leHRyYV9zaXplLCBzZWxmLmluY29tcGF0X2xpY2Vuc2UsIHNlbGYuY3Vycl9zZGtfbWFjaGluZSwgc2VsZi5jb25mX3ZlcnNpb24pCisgICAgICAgIHMgKz0gIkxDT05GX1ZFUlNJT046ICclcycsIEVYVFJBX1NFVFRJTkc6ICclcycsIFRPT0xDSEFJTl9CVUlMRDogJyVzJywgSU1BR0VfRlNUWVBFUzogJyVzJywgX19TRUxFQ1RFRF9JTUFHRV9fOiAnJXMnLCAiICUgXAorICAgICAgICAgICAgKHNlbGYubGNvbmZfdmVyc2lvbiwgc2VsZi5leHRyYV9zZXR0aW5nLCBzZWxmLnRvb2xjaGFpbl9idWlsZCwgc2VsZi5pbWFnZV9mc3R5cGVzLCBzZWxmLnNlbGVjdGVkX2ltYWdlKQorICAgICAgICBzICs9ICJERVBFTkRTOiAnJXMnLCBJTUFHRV9JTlNUQUxMOiAnJXMnLCBlbmFibGVfcHJveHk6ICclcycsIHVzZV9zYW1lX3Byb3h5OiAnJXMnLCBodHRwX3Byb3h5OiAnJXMnLCAiICUgXAorICAgICAgICAgICAgKHNlbGYuc2VsZWN0ZWRfcmVjaXBlcywgc2VsZi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzLCBzZWxmLmVuYWJsZV9wcm94eSwgc2VsZi5zYW1lX3Byb3h5LCBzZWxmLmNvbWJpbmVfcHJveHkoImh0dHAiKSkKKyAgICAgICAgcyArPSAiaHR0cHNfcHJveHk6ICclcycsIGZ0cF9wcm94eTogJyVzJywgYWxsX3Byb3h5OiAnJXMnLCBDVlNfUFJPWFlfSE9TVDogJyVzJywgQ1ZTX1BST1hZX1BPUlQ6ICclcyciICUgXAorICAgICAgICAgICAgKHNlbGYuY29tYmluZV9wcm94eSgiaHR0cHMiKSwgc2VsZi5jb21iaW5lX3Byb3h5KCJmdHAiKSwgc2VsZi5jb21iaW5lX3Byb3h5KCJzb2NrcyIpLAorICAgICAgICAgICAgIHNlbGYuY29tYmluZV9ob3N0X29ubHkoImN2cyIpLCBzZWxmLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSkKKyAgICAgICAgcmV0dXJuIHMKKworY2xhc3MgUGFyYW1ldGVyczoKKyAgICAnJydSZXByZXNlbnRzIG90aGVyIHZhcmlhYmxlcyBsaWtlIGF2YWlsYWJsZSBtYWNoaW5lcywgZXRjLicnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIFZhcmlhYmxlcworICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gNjU1MzUKKyAgICAgICAgc2VsZi5jb3JlX2Jhc2UgPSAiIgorICAgICAgICBzZWxmLmltYWdlX2FkZHIgPSAiIgorICAgICAgICBzZWxmLmltYWdlX3R5cGVzID0gW10KKyAgICAgICAgc2VsZi5ydW5uYWJsZV9pbWFnZV90eXBlcyA9IFtdCisgICAgICAgIHNlbGYucnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyA9IFtdCisgICAgICAgIHNlbGYuZGVwbG95YWJsZV9pbWFnZV90eXBlcyA9IFtdCisgICAgICAgIHNlbGYudG1wZGlyID0gIiIKKworICAgICAgICBzZWxmLmFsbF9tYWNoaW5lcyA9IFtdCisgICAgICAgIHNlbGYuYWxsX3BhY2thZ2VfZm9ybWF0cyA9IFtdCisgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3MgPSBbXQorICAgICAgICBzZWxmLmFsbF9zZGtfbWFjaGluZXMgPSBbXQorICAgICAgICBzZWxmLmFsbF9sYXllcnMgPSBbXQorICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KKyAgICAgICAgc2VsZi5pbWFnZV93aGl0ZV9wYXR0ZXJuID0gIiIKKyAgICAgICAgc2VsZi5pbWFnZV9ibGFja19wYXR0ZXJuID0gIiIKKworICAgICAgICAjIGZvciBidWlsZCBsb2cgdG8gc2hvdworICAgICAgICBzZWxmLmJiX3ZlcnNpb24gPSAiIgorICAgICAgICBzZWxmLnRhcmdldF9hcmNoID0gIiIKKyAgICAgICAgc2VsZi50YXJnZXRfb3MgPSAiIgorICAgICAgICBzZWxmLmRpc3Ryb192ZXJzaW9uID0gIiIKKyAgICAgICAgc2VsZi50dW5lX3BrZ2FyY2ggPSAiIgorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYXJhbXMpOgorICAgICAgICBzZWxmLm1heF90aHJlYWRzID0gcGFyYW1zWyJtYXhfdGhyZWFkcyJdCisgICAgICAgIHNlbGYuY29yZV9iYXNlID0gcGFyYW1zWyJjb3JlX2Jhc2UiXQorICAgICAgICBzZWxmLmltYWdlX2FkZHIgPSBwYXJhbXNbImltYWdlX2FkZHIiXQorICAgICAgICBzZWxmLmltYWdlX3R5cGVzID0gcGFyYW1zWyJpbWFnZV90eXBlcyJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi5ydW5uYWJsZV9pbWFnZV90eXBlcyA9IHBhcmFtc1sicnVubmFibGVfaW1hZ2VfdHlwZXMiXS5zcGxpdCgpCisgICAgICAgIHNlbGYucnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyA9IHBhcmFtc1sicnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyJdLnNwbGl0KCkKKyAgICAgICAgc2VsZi5kZXBsb3lhYmxlX2ltYWdlX3R5cGVzID0gcGFyYW1zWyJkZXBsb3lhYmxlX2ltYWdlX3R5cGVzIl0uc3BsaXQoKQorICAgICAgICBzZWxmLnRtcGRpciA9IHBhcmFtc1sidG1wZGlyIl0KKyAgICAgICAgc2VsZi5pbWFnZV93aGl0ZV9wYXR0ZXJuID0gcGFyYW1zWyJpbWFnZV93aGl0ZV9wYXR0ZXJuIl0KKyAgICAgICAgc2VsZi5pbWFnZV9ibGFja19wYXR0ZXJuID0gcGFyYW1zWyJpbWFnZV9ibGFja19wYXR0ZXJuIl0KKyAgICAgICAgc2VsZi5rZXJuZWxfaW1hZ2VfdHlwZSA9IHBhcmFtc1sia2VybmVsX2ltYWdlX3R5cGUiXQorICAgICAgICAjIGZvciBidWlsZCBsb2cgdG8gc2hvdworICAgICAgICBzZWxmLmJiX3ZlcnNpb24gPSBwYXJhbXNbImJiX3ZlcnNpb24iXQorICAgICAgICBzZWxmLnRhcmdldF9hcmNoID0gcGFyYW1zWyJ0YXJnZXRfYXJjaCJdCisgICAgICAgIHNlbGYudGFyZ2V0X29zID0gcGFyYW1zWyJ0YXJnZXRfb3MiXQorICAgICAgICBzZWxmLmRpc3Ryb192ZXJzaW9uID0gcGFyYW1zWyJkaXN0cm9fdmVyc2lvbiJdCisgICAgICAgIHNlbGYudHVuZV9wa2dhcmNoID0gcGFyYW1zWyJ0dW5lX3BrZ2FyY2giXQorCitkZWYgaG9iX2NvbmZfZmlsdGVyKGZuLCBkYXRhKToKKyAgICBpZiBmbi5lbmRzd2l0aCgiL2xvY2FsLmNvbmYiKToKKyAgICAgICAgZGlzdHJvID0gZGF0YS5nZXRWYXIoIkRJU1RST19IT0IiLCBGYWxzZSkKKyAgICAgICAgaWYgZGlzdHJvOgorICAgICAgICAgICAgaWYgZGlzdHJvICE9ICJkZWZhdWx0c2V0dXAiOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJESVNUUk8iLCBkaXN0cm8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEuZGVsVmFyKCJESVNUUk8iKQorCisgICAgICAgIGtleXMgPSBbIk1BQ0hJTkVfSE9CIiwgIlNES01BQ0hJTkVfSE9CIiwgIlBBQ0tBR0VfQ0xBU1NFU19IT0IiLCBcCisgICAgICAgICAgICAgICAgIkJCX05VTUJFUl9USFJFQURTX0hPQiIsICJQQVJBTExFTF9NQUtFX0hPQiIsICJETF9ESVJfSE9CIiwgXAorICAgICAgICAgICAgICAgICJTU1RBVEVfRElSX0hPQiIsICJTU1RBVEVfTUlSUk9SU19IT0IiLCAiSU5DT01QQVRJQkxFX0xJQ0VOU0VfSE9CIl0KKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgdmFyX2hvYiA9IGRhdGEuZ2V0VmFyKGtleSwgRmFsc2UpCisgICAgICAgICAgICBpZiB2YXJfaG9iOgorICAgICAgICAgICAgICAgIGRhdGEuc2V0VmFyKGtleS5zcGxpdCgiX0hPQiIpWzBdLCB2YXJfaG9iKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGZuLmVuZHN3aXRoKCIvYmJsYXllcnMuY29uZiIpOgorICAgICAgICBsYXllcnMgPSBkYXRhLmdldFZhcigiQkJMQVlFUlNfSE9CIiwgRmFsc2UpCisgICAgICAgIGlmIGxheWVyczoKKyAgICAgICAgICAgIGRhdGEuc2V0VmFyKCJCQkxBWUVSUyIsIGxheWVycykKKyAgICAgICAgcmV0dXJuCisKK2NsYXNzIEJ1aWxkZXIoZ3RrLldpbmRvdyk6CisKKyAgICAoSU5JVElBTF9DSEVDS1MsCisgICAgIE1BQ0hJTkVfU0VMRUNUSU9OLAorICAgICBSQ1BQS0dJTkZPX1BPUFVMQVRJTkcsCisgICAgIFJDUFBLR0lORk9fUE9QVUxBVEVELAorICAgICBCQVNFSU1HX1NFTEVDVEVELAorICAgICBSRUNJUEVfU0VMRUNUSU9OLAorICAgICBQQUNLQUdFX0dFTkVSQVRJTkcsCisgICAgIFBBQ0tBR0VfR0VORVJBVEVELAorICAgICBQQUNLQUdFX1NFTEVDVElPTiwKKyAgICAgRkFTVF9JTUFHRV9HRU5FUkFUSU5HLAorICAgICBJTUFHRV9HRU5FUkFUSU5HLAorICAgICBJTUFHRV9HRU5FUkFURUQsCisgICAgIE1ZX0lNQUdFX09QRU5FRCwKKyAgICAgQkFDSywKKyAgICAgRU5EX05PT1ApID0gcmFuZ2UoMTUpCisKKyAgICAoU0FOSVRZX0NIRUNLLAorICAgICBJTUFHRV9DT05GSUdVUkFUSU9OLAorICAgICBSRUNJUEVfREVUQUlMUywKKyAgICAgQlVJTERfREVUQUlMUywKKyAgICAgUEFDS0FHRV9ERVRBSUxTLAorICAgICBJTUFHRV9ERVRBSUxTLAorICAgICBFTkRfVEFCKSA9IHJhbmdlKDcpCisKKyAgICBfX3N0ZXAycGFnZV9fID0geworICAgICAgICBJTklUSUFMX0NIRUNLUyAgICAgICAgOiBTQU5JVFlfQ0hFQ0ssCisgICAgICAgIE1BQ0hJTkVfU0VMRUNUSU9OICAgICA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIFJDUFBLR0lORk9fUE9QVUxBVElORyA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIFJDUFBLR0lORk9fUE9QVUxBVEVEICA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIEJBU0VJTUdfU0VMRUNURUQgICAgICA6IElNQUdFX0NPTkZJR1VSQVRJT04sCisgICAgICAgIFJFQ0lQRV9TRUxFQ1RJT04gICAgICA6IFJFQ0lQRV9ERVRBSUxTLAorICAgICAgICBQQUNLQUdFX0dFTkVSQVRJTkcgICAgOiBCVUlMRF9ERVRBSUxTLAorICAgICAgICBQQUNLQUdFX0dFTkVSQVRFRCAgICAgOiBQQUNLQUdFX0RFVEFJTFMsCisgICAgICAgIFBBQ0tBR0VfU0VMRUNUSU9OICAgICA6IFBBQ0tBR0VfREVUQUlMUywKKyAgICAgICAgRkFTVF9JTUFHRV9HRU5FUkFUSU5HIDogQlVJTERfREVUQUlMUywKKyAgICAgICAgSU1BR0VfR0VORVJBVElORyAgICAgIDogQlVJTERfREVUQUlMUywKKyAgICAgICAgSU1BR0VfR0VORVJBVEVEICAgICAgIDogSU1BR0VfREVUQUlMUywKKyAgICAgICAgTVlfSU1BR0VfT1BFTkVEICAgICAgIDogSU1BR0VfREVUQUlMUywKKyAgICAgICAgRU5EX05PT1AgICAgICAgICAgICAgIDogTm9uZSwKKyAgICB9CisKKyAgICBTQU5JVFlfQ0hFQ0tfTUlOX0RJU1BMQVlfVElNRSA9IDUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob2JIYW5kbGVyLCByZWNpcGVfbW9kZWwsIHBhY2thZ2VfbW9kZWwpOgorICAgICAgICBzdXBlcihCdWlsZGVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgc2VsZi5ob2JfaW1hZ2UgPSAiaG9iLWltYWdlIgorCisgICAgICAgICMgaGFuZGxlcgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBob2JIYW5kbGVyCisKKyAgICAgICAgIyBsb2dnZXIKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZSIpCisgICAgICAgIHNlbGYuY29uc29sZWxvZyA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2xvZ2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGFuZCBwYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBQYXJhbWV0ZXJzKCkKKworICAgICAgICAjIGJ1aWxkIHN0ZXAKKyAgICAgICAgc2VsZi5jdXJyZW50X3N0ZXAgPSBOb25lCisgICAgICAgIHNlbGYucHJldmlvdXNfc3RlcCA9IE5vbmUKKworICAgICAgICBzZWxmLnN0b3BwaW5nID0gRmFsc2UKKworICAgICAgICAjIHJlY2lwZSBtb2RlbCBhbmQgcGFja2FnZSBtb2RlbAorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbCA9IHJlY2lwZV9tb2RlbAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwgPSBwYWNrYWdlX21vZGVsCisKKyAgICAgICAgIyBJbmRpY2F0ZSB3aGV0aGVyIHVzZXIgaGFzIGN1c3RvbWl6ZWQgdGhlIGltYWdlCisgICAgICAgIHNlbGYuY3VzdG9taXplZCA9IEZhbHNlCisKKyAgICAgICAgIyBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBVSSBpcyB3b3JraW5nCisgICAgICAgIHNlbGYuc2Vuc2l0aXZlID0gVHJ1ZQorCisgICAgICAgICMgSW5kaWNhdGUgd2hldGhlciB0aGUgc2FuaXR5IGNoZWNrIHJhbgorICAgICAgICBzZWxmLnNhbml0eV9jaGVja2VkID0gRmFsc2UKKworICAgICAgICAjIHNhdmUgcGFyc2luZyB3YXJuaW5ncworICAgICAgICBzZWxmLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgICAgICMgY29ubmVjdCB0aGUgc2lnbmFscyB0byBmdW5jdGlvbnMKKyAgICAgICAgc2VsZi5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBzZWxmLmRlc3Ryb3lfd2luZG93X2NiKQorICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5jb25uZWN0ICgicmVjaXBlLXNlbGVjdGlvbi1jaGFuZ2VkIiwgIHNlbGYucmVjaXBlbGlzdF9jaGFuZ2VkX2NiKQorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuY29ubmVjdCgicGFja2FnZS1zZWxlY3Rpb24tY2hhbmdlZCIsIHNlbGYucGFja2FnZWxpc3RfY2hhbmdlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoImNvbmZpZy11cGRhdGVkIiwgICAgICAgICAgIHNlbGYuaGFuZGxlcl9jb25maWdfdXBkYXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhY2thZ2UtZm9ybWF0cy11cGRhdGVkIiwgIHNlbGYuaGFuZGxlcl9wYWNrYWdlX2Zvcm1hdHNfdXBkYXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhcnNpbmctc3RhcnRlZCIsICAgICAgICAgIHNlbGYuaGFuZGxlcl9wYXJzaW5nX3N0YXJ0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYXJzaW5nIiwgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJfcGFyc2luZ19jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInBhcnNpbmctY29tcGxldGVkIiwgICAgICAgIHNlbGYuaGFuZGxlcl9wYXJzaW5nX2NvbXBsZXRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImJ1aWxkLXN0YXJ0ZWQiLCAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9zdGFydGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgiYnVpbGQtc3VjY2VlZGVkIiwgICAgc2VsZi5oYW5kbGVyX2J1aWxkX3N1Y2NlZWRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImJ1aWxkLWZhaWxlZCIsICAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9mYWlsZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJidWlsZC1hYm9ydGVkIiwgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfYWJvcnRlZF9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoInRhc2stc3RhcnRlZCIsICAgICAgIHNlbGYuaGFuZGxlcl90YXNrX3N0YXJ0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJkaXNrLWZ1bGwiLCAgICAgICAgICBzZWxmLmhhbmRsZXJfZGlza19mdWxsX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGQuY29ubmVjdCgibG9nLWVycm9yIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX2J1aWxkX2ZhaWx1cmVfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJsb2ctd2FybmluZyIsICAgICAgICBzZWxmLmhhbmRsZXJfYnVpbGRfZmFpbHVyZV9jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmJ1aWxkLmNvbm5lY3QoImxvZyIsICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcl9idWlsZF9sb2dfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZC5jb25uZWN0KCJuby1wcm92aWRlciIsICAgICAgICBzZWxmLmhhbmRsZXJfbm9fcHJvdmlkZXJfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJnZW5lcmF0aW5nLWRhdGEiLCAgICAgICAgICBzZWxmLmhhbmRsZXJfZ2VuZXJhdGluZ19kYXRhX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiZGF0YS1nZW5lcmF0ZWQiLCAgICAgICAgICAgc2VsZi5oYW5kbGVyX2RhdGFfZ2VuZXJhdGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiY29tbWFuZC1zdWNjZWVkZWQiLCAgICAgICAgc2VsZi5oYW5kbGVyX2NvbW1hbmRfc3VjY2VlZGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgiY29tbWFuZC1mYWlsZWQiLCAgICAgICAgICAgc2VsZi5oYW5kbGVyX2NvbW1hbmRfZmFpbGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicGFyc2luZy13YXJuaW5nIiwgICAgICAgICAgc2VsZi5oYW5kbGVyX3BhcnNpbmdfd2FybmluZ19jYikKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNvbm5lY3QoInNhbml0eS1mYWlsZWQiLCAgICAgICAgICAgIHNlbGYuaGFuZGxlcl9zYW5pdHlfZmFpbGVkX2NiKQorICAgICAgICBzZWxmLmhhbmRsZXIuY29ubmVjdCgicmVjaXBlLXBvcHVsYXRlZCIsICAgICAgICAgc2VsZi5oYW5kbGVyX3JlY2lwZV9wb3B1bGF0ZWRfY2IpCisgICAgICAgIHNlbGYuaGFuZGxlci5jb25uZWN0KCJwYWNrYWdlLXBvcHVsYXRlZCIsICAgICAgICBzZWxmLmhhbmRsZXJfcGFja2FnZV9wb3B1bGF0ZWRfY2IpCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLmFwcGVuZF90b19iYmZpbGVzKCIke1RPUERJUn0vcmVjaXBlcy9pbWFnZXMvY3VzdG9tLyouYmIiKQorICAgICAgICBzZWxmLmhhbmRsZXIuYXBwZW5kX3RvX2JiZmlsZXMoIiR7VE9QRElSfS9yZWNpcGVzL2ltYWdlcy8qLmJiIikKKyAgICAgICAgc2VsZi5pbml0aWF0ZV9uZXdfYnVpbGRfYXN5bmMoKQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2VsZi5ldmVudF9oYW5kbGVfU0lHSU5UKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3RpdGxlKCJIb2IiKQorICAgICAgICBzZWxmLnNldF9pY29uX25hbWUoImFwcGxpY2F0aW9ucy1kZXZlbG9wbWVudCIpCisgICAgICAgIHNlbGYuc2V0X3Jlc2l6YWJsZShUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbmRvd193aWR0aCA9IHNlbGYuZ2V0X3NjcmVlbigpLmdldF93aWR0aCgpCisgICAgICAgICAgICB3aW5kb3dfaGVpZ2h0ID0gc2VsZi5nZXRfc2NyZWVuKCkuZ2V0X2hlaWdodCgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJQbGVhc2Ugc2V0IERJU1BMQVkgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgSG9iLiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgd2luZG93X3dpZHRoID49IGh3Yy5NQUlOX1dJTl9XSURUSDoKKyAgICAgICAgICAgIHdpbmRvd193aWR0aCA9IGh3Yy5NQUlOX1dJTl9XSURUSAorICAgICAgICAgICAgd2luZG93X2hlaWdodCA9IGh3Yy5NQUlOX1dJTl9IRUlHSFQKKyAgICAgICAgc2VsZi5zZXRfc2l6ZV9yZXF1ZXN0KHdpbmRvd193aWR0aCwgd2luZG93X2hlaWdodCkKKworICAgICAgICBzZWxmLnZib3ggPSBndGsuVkJveChGYWxzZSwgMCkKKyAgICAgICAgc2VsZi52Ym94LnNldF9ib3JkZXJfd2lkdGgoMCkKKyAgICAgICAgc2VsZi5hZGQoc2VsZi52Ym94KQorCisgICAgICAgICMgY3JlYXRlIHBhZ2VzCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlID0gSW1hZ2VDb25maWd1cmF0aW9uUGFnZShzZWxmKQorICAgICAgICBzZWxmLnJlY2lwZV9kZXRhaWxzX3BhZ2UgICAgICA9IFJlY2lwZVNlbGVjdGlvblBhZ2Uoc2VsZikKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UgICAgICAgPSBCdWlsZERldGFpbHNQYWdlKHNlbGYpCisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UgICAgID0gUGFja2FnZVNlbGVjdGlvblBhZ2Uoc2VsZikKKyAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2UgICAgICAgPSBJbWFnZURldGFpbHNQYWdlKHNlbGYpCisgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3BhZ2UgICAgICAgID0gU2FuaXR5Q2hlY2tQYWdlKHNlbGYpCisgICAgICAgIHNlbGYuZGlzcGxheV9zYW5pdHlfY2hlY2sgPSBGYWxzZQorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmMgPSBGYWxzZQorICAgICAgICBzZWxmLmhhZF9uZXR3b3JrX2Vycm9yID0gRmFsc2UKKworICAgICAgICBzZWxmLm5iID0gZ3RrLk5vdGVib29rKCkKKyAgICAgICAgc2VsZi5uYi5zZXRfc2hvd190YWJzKEZhbHNlKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuc2FuaXR5X2NoZWNrX3BhZ2UsICAgICAgICBOb25lLCBzZWxmLlNBTklUWV9DSEVDSykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnRfcGFnZShzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZSwgTm9uZSwgc2VsZi5JTUFHRV9DT05GSUdVUkFUSU9OKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYucmVjaXBlX2RldGFpbHNfcGFnZSwgICAgICBOb25lLCBzZWxmLlJFQ0lQRV9ERVRBSUxTKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLCAgICAgICBOb25lLCBzZWxmLkJVSUxEX0RFVEFJTFMpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0X3BhZ2Uoc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZSwgICAgIE5vbmUsIHNlbGYuUEFDS0FHRV9ERVRBSUxTKQorICAgICAgICBzZWxmLm5iLmluc2VydF9wYWdlKHNlbGYuaW1hZ2VfZGV0YWlsc19wYWdlLCAgICAgICBOb25lLCBzZWxmLklNQUdFX0RFVEFJTFMpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYubmIsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZSgwKQorCisgICAgZGVmIHNhbml0eV9jaGVja190aW1lb3V0KHNlbGYpOgorICAgICAgICAjIFRoZSBtaW5pbXVtIHRpbWUgZm9yIHNob3dpbmcgdGhlICdzYW5pdHkgY2hlY2snIHBhZ2UgaGFzIHBhc3NlCisgICAgICAgICMgSWYgc29tZW9uZSBzZXQgdGhlICdzYW5pdHlfY2hlY2tfcG9zdF9zdGVwJyBtZWFud2hpbGUsIGV4ZWN1dGUgaXQgbm93CisgICAgICAgIHNlbGYuZGlzcGxheV9zYW5pdHlfY2hlY2sgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLnNhbml0eV9jaGVja19wb3N0X2Z1bmM6CisgICAgICAgICAgdGVtcCA9IHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3RfZnVuYworICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrX3Bvc3RfZnVuYyA9IE5vbmUKKyAgICAgICAgICB0ZW1wKCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2hvd19zYW5pdHlfY2hlY2tfcGFnZShzZWxmKToKKyAgICAgICAgIyBUaGlzIHdpbmRvdyBtdXN0IHN0YXkgb24gc2NyZWVuIGZvciBhdCBsZWFzdCA1IHNlY29uZHMsIGFjY29yZGluZyB0byB0aGUgZGVzaWduIGRvY3VtZW50CisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShzZWxmLlNBTklUWV9DSEVDSykKKyAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9zdGVwID0gTm9uZQorICAgICAgICBzZWxmLmRpc3BsYXlfc2FuaXR5X2NoZWNrID0gVHJ1ZQorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlLnN0YXJ0KCkKKyAgICAgICAgZ29iamVjdC50aW1lb3V0X2FkZChzZWxmLlNBTklUWV9DSEVDS19NSU5fRElTUExBWV9USU1FICogMTAwMCwgc2VsZi5zYW5pdHlfY2hlY2tfdGltZW91dCkKKworICAgIGRlZiBleGVjdXRlX2FmdGVyX3Nhbml0eV9jaGVjayhzZWxmLCBmdW5jKToKKyAgICAgICAgaWYgbm90IHNlbGYuZGlzcGxheV9zYW5pdHlfY2hlY2s6CisgICAgICAgICAgZnVuYygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2tfcG9zdF9mdW5jID0gZnVuYworCisgICAgZGVmIGdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnNhbml0eV9jaGVja2VkOgorICAgICAgICAgICAgc2VsZi5zaG93X3Nhbml0eV9jaGVja19wYWdlKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oKQorCisgICAgZGVmIGluaXRpYXRlX25ld19idWlsZF9hc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuTUFDSElORV9TRUxFQ1RJT04pCisgICAgICAgIHNlbGYuaGFuZGxlci5pbml0X2Nvb2tlcigpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZXh0cmFfaW5oZXJpdCgiaW1hZ2VfdHlwZXMiKQorICAgICAgICBzZWxmLmdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oKQorCisgICAgZGVmIHVwZGF0ZV9jb25maWdfYXN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9jb25maWd1cmF0aW9uKCkKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OKQorCisgICAgZGVmIHNhbml0eV9jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXJfc2FuaXR5X2NoZWNrKCkKKworICAgIGRlZiBwb3B1bGF0ZV9yZWNpcGVfcGFja2FnZV9pbmZvX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HKQorICAgICAgICAjIFBhcnNlIHJlY2lwZXMKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWcoKQorICAgICAgICBzZWxmLmhhbmRsZXIuZ2VuZXJhdGVfcmVjaXBlcygpCisKKyAgICBkZWYgZ2VuZXJhdGVfcGFja2FnZXNfYXN5bmMoc2VsZiwgbG9nID0gRmFsc2UpOgorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HKQorICAgICAgICBpZiBsb2c6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbG9nZmlsZSA9IHNlbGYuaGFuZGxlci5nZXRfbG9nZmlsZSgpCisgICAgICAgICAgICBzZWxmLmRvX2xvZyhzZWxmLmN1cnJlbnRfbG9nZmlsZSkKKyAgICAgICAgIyBCdWlsZCBwYWNrYWdlcworICAgICAgICBfLCBhbGxfcmVjaXBlcyA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9yZWNpcGVzKCkKKyAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWcoKQorICAgICAgICBzZWxmLmhhbmRsZXIucmVzZXRfYnVpbGQoKQorICAgICAgICBzZWxmLmhhbmRsZXIuZ2VuZXJhdGVfcGFja2FnZXMoYWxsX3JlY2lwZXMsIHNlbGYuY29uZmlndXJhdGlvbi5kZWZhdWx0X3Rhc2spCisKKyAgICBkZWYgcmVzdG9yZV9pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMsIFRydWUpCisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5zZXRfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMpCisgICAgICAgIGZvciBwYWNrYWdlIGluIHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgIGlmIHBhY2thZ2Ugbm90IGluIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX3BhY2thZ2VzOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5leGNsdWRlX2l0ZW0oc2VsZi5wYWNrYWdlX21vZGVsLmZpbmRfcGF0aF9mb3JfaXRlbShwYWNrYWdlKSkKKworICAgIGRlZiBmYXN0X2dlbmVyYXRlX2ltYWdlX2FzeW5jKHNlbGYsIGxvZyA9IEZhbHNlKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORykKKyAgICAgICAgaWYgbG9nOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xvZ2ZpbGUgPSBzZWxmLmhhbmRsZXIuZ2V0X2xvZ2ZpbGUoKQorICAgICAgICAgICAgc2VsZi5kb19sb2coc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisgICAgICAgICMgQnVpbGQgcGFja2FnZXMKKyAgICAgICAgXywgYWxsX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJlc2V0X2J1aWxkKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX3BhY2thZ2VzKGFsbF9yZWNpcGVzLCBzZWxmLmNvbmZpZ3VyYXRpb24uZGVmYXVsdF90YXNrKQorCisgICAgZGVmIGdlbmVyYXRlX2ltYWdlX2FzeW5jKHNlbGYsIGNvbnQgPSBGYWxzZSk6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5JTUFHRV9HRU5FUkFUSU5HKQorICAgICAgICBzZWxmLmhhbmRsZXIucmVzZXRfYnVpbGQoKQorICAgICAgICBpZiBub3QgY29udDoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9sb2dmaWxlID0gc2VsZi5oYW5kbGVyLmdldF9sb2dmaWxlKCkKKyAgICAgICAgICAgIHNlbGYuZG9fbG9nKHNlbGYuY3VycmVudF9sb2dmaWxlKQorICAgICAgICAjIEJ1aWxkIGltYWdlCisgICAgICAgIHNlbGYuc2V0X3VzZXJfY29uZmlnKCkKKyAgICAgICAgdG9vbGNoYWluX3BhY2thZ2VzID0gW10KKyAgICAgICAgYmFzZV9pbWFnZSA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnRvb2xjaGFpbl9idWlsZDoKKyAgICAgICAgICAgIHRvb2xjaGFpbl9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXNfdG9vbGNoYWluKCkKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID09IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBwYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICAgICAgaW1hZ2UgPSBzZWxmLmhvYl9pbWFnZQorICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlcyA9IFtdCisgICAgICAgICAgICBpbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZQorICAgICAgICBzZWxmLmhhbmRsZXIuZ2VuZXJhdGVfaW1hZ2UoaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW5fcGFja2FnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZGVmYXVsdF90YXNrKQorCisgICAgZGVmIGdlbmVyYXRlX25ld19pbWFnZShzZWxmLCBpbWFnZSwgZGVzY3JpcHRpb24pOgorICAgICAgICBiYXNlX2ltYWdlID0gc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgaWYgYmFzZV9pbWFnZSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgYmFzZV9pbWFnZSA9IE5vbmUKKyAgICAgICAgcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmdlbmVyYXRlX25ld19pbWFnZShpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZXMsIGRlc2NyaXB0aW9uKQorCisgICAgZGVmIGVuc3VyZV9kaXIoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmVuc3VyZV9kaXIoZGlyZWN0b3J5KQorCisgICAgZGVmIGdldF9wYXJhbWV0ZXJzX3N5bmMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZXIuZ2V0X3BhcmFtZXRlcnMoKQorCisgICAgZGVmIHJlcXVlc3RfcGFja2FnZV9pbmZvX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmhhbmRsZXIucmVxdWVzdF9wYWNrYWdlX2luZm8oKQorCisgICAgZGVmIGNhbmNlbF9idWlsZF9zeW5jKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNhbmNlbF9idWlsZChmb3JjZSkKKworICAgIGRlZiBjYW5jZWxfcGFyc2Vfc3luYyhzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmNhbmNlbF9wYXJzZSgpCisKKyAgICBkZWYgc3dpdGNoX3BhZ2Uoc2VsZiwgbmV4dF9zdGVwKToKKyAgICAgICAgIyBNYWluIFdvcmtmbG93IChCdXNpbmVzcyBMb2dpYykKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKHNlbGYuX19zdGVwMnBhZ2VfX1tuZXh0X3N0ZXBdKQorCisgICAgICAgIGlmIG5leHRfc3RlcCA9PSBzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OOiAjIGluaXQgc3RlcAorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19tYWNoaW5lKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORzoKKyAgICAgICAgICAgICMgTUFDSElORSBDSEFOR0VEIGFjdGlvbiBvciBTRVRUSU5HUyBDSEFOR0VECisgICAgICAgICAgICAjIHNob3cgdGhlIHByb2dyZXNzIGJhcgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc2hvd19pbmZvX3BvcHVsYXRpbmcoKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFURUQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zaG93X2luZm9fcG9wdWxhdGVkKCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLkJBU0VJTUdfU0VMRUNURUQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5zaG93X2Jhc2VpbWdfc2VsZWN0ZWQoKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuUkVDSVBFX1NFTEVDVElPTjoKKyAgICAgICAgICAgIGlmIHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnNldF9yZWNpcGVfY3Vycl90YWIoc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLkFMTCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnNldF9yZWNpcGVfY3Vycl90YWIoc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLklOQ0xVREVEKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuUEFDS0FHRV9TRUxFQ1RJT046CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlcworICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfdXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi51c2VyX3NlbGVjdGVkX3BhY2thZ2VzCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF90aXRsZSgiRWRpdCBwYWNrYWdlcyIpCisgICAgICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfaW1hZ2UoKSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3BhY2thZ2VzX2N1cnJfdGFiKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UuQUxMKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLklOQ0xVREVEKQorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2Uoc2VsZi5jdXJyZW50X2xvZ2ZpbGUpCisKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVElORyBvciBuZXh0X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAjIGJvdGggUEFDS0FHRV9HRU5FUkFUSU5HIGFuZCBGQVNUX0lNQUdFX0dFTkVSQVRJTkcgc2hhcmUgdGhlIHNhbWUgcGFnZQorICAgICAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKG5leHRfc3RlcCkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLlBBQ0tBR0VfR0VORVJBVEVEOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfdGl0bGUoIlN0ZXAgMiBvZiAyOiBFZGl0IHBhY2thZ2VzIikKKyAgICAgICAgICAgIGlmIHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5zZXRfcGFja2FnZXNfY3Vycl90YWIoc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5BTEwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2Uuc2V0X3BhY2thZ2VzX2N1cnJfdGFiKHNlbGYucGFja2FnZV9kZXRhaWxzX3BhZ2UuSU5DTFVERUQpCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNob3dfcGFnZShzZWxmLmN1cnJlbnRfbG9nZmlsZSkKKworICAgICAgICBlbGlmIG5leHRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAjIGFmdGVyIHBhY2thZ2VzIGFyZSBnZW5lcmF0ZWQsIHNlbGVjdGVkX3BhY2thZ2VzIG5lZWQgdG8KKyAgICAgICAgICAgICMgYmUgdXBkYXRlZCBpbiBwYWNrYWdlX21vZGVsIHBlciBzZWxlY3RlZF9pbWFnZSBpbiByZWNpcGVfbW9kZWwKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnNob3dfcGFnZShuZXh0X3N0ZXApCisKKyAgICAgICAgZWxpZiBuZXh0X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFURUQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2UobmV4dF9zdGVwKQorCisgICAgICAgIGVsaWYgbmV4dF9zdGVwID09IHNlbGYuTVlfSU1BR0VfT1BFTkVEOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2hvd19wYWdlKG5leHRfc3RlcCkKKworICAgICAgICBzZWxmLnByZXZpb3VzX3N0ZXAgPSBzZWxmLmN1cnJlbnRfc3RlcAorICAgICAgICBzZWxmLmN1cnJlbnRfc3RlcCA9IG5leHRfc3RlcAorCisgICAgZGVmIHNldF91c2VyX2NvbmZpZ19wcm94aWVzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IFRydWU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHAiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cHNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoImh0dHBzIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2Z0cF9wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiZnRwIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NvY2tzX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJzb2NrcyIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9jdnNfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSwgc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJjdnMiKSkKKyAgICAgICAgZWxpZiBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID09IEZhbHNlOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZnRwX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zb2Nrc19wcm94eSgiIikKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfY3ZzX3Byb3h5KCIiLCAiIikKKworICAgIGRlZiBzZXRfdXNlcl9jb25maWdfZXh0cmEoc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfcm9vdGZzX3NpemUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2V4dHJhX3NpemUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaW5jb21wYXRpYmxlX2xpY2Vuc2Uoc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2UpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc2RrX21hY2hpbmUoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfc2RrX21hY2hpbmUpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaW1hZ2VfZnN0eXBlcyhzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9leHRyYV9jb25maWcoc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZXh0cmFfaW5oZXJpdCgicGFja2FnZWluZm8gaW1hZ2VfdHlwZXMiKQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZ19wcm94aWVzKCkKKworICAgIGRlZiBzZXRfdXNlcl9jb25maWcoc2VsZik6CisgICAgICAgICMgc2V0IGJiIGxheWVycworICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2JibGF5ZXJzKHNlbGYuY29uZmlndXJhdGlvbi5sYXllcnMpCisgICAgICAgICMgc2V0IGxvY2FsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9tYWNoaW5lKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2gpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfcGFja2FnZV9mb3JtYXQoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQpCisgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZGlzdHJvKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3RybykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9kbF9kaXIoc2VsZi5jb25maWd1cmF0aW9uLmRsZGlyKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NzdGF0ZV9kaXIoc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZWRpcikKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9zc3RhdGVfbWlycm9ycyhzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlbWlycm9yKQorICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3BtYWtlKHNlbGYuY29uZmlndXJhdGlvbi5wbWFrZSkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9iYnRocmVhZHMoc2VsZi5jb25maWd1cmF0aW9uLmJidGhyZWFkKQorICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZ19leHRyYSgpCisKKyAgICBkZWYgdXBkYXRlX3JlY2lwZV9tb2RlbChzZWxmLCBzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcyk6CisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9pbWFnZShzZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc2V0X3NlbGVjdGVkX3JlY2lwZXMoc2VsZWN0ZWRfcmVjaXBlcykKKworICAgIGRlZiB1cGRhdGVfcGFja2FnZV9tb2RlbChzZWxmLCBzZWxlY3RlZF9wYWNrYWdlcywgdXNlcl9zZWxlY3RlZF9wYWNrYWdlcz1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHVzZXJfc2VsZWN0ZWRfcGFja2FnZXMsIFRydWUpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24udXNlcl9zZWxlY3RlZF9wYWNrYWdlcyArPSBsZWZ0CisgICAgICAgIGxlZnQgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc2V0X3NlbGVjdGVkX3BhY2thZ2VzKHNlbGVjdGVkX3BhY2thZ2VzKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMgKz0gbGVmdAorCisgICAgZGVmIHVwZGF0ZV9jb25maWd1cmF0aW9uX3BhcmFtZXRlcnMoc2VsZiwgcGFyYW1zKToKKyAgICAgICAgaWYgcGFyYW1zOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnVwZGF0ZShwYXJhbXMpCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMudXBkYXRlKHBhcmFtcykKKworICAgIGRlZiBzZXRfYmFzZV9pbWFnZShzZWxmKToKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlICE9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBzZWxmLmhvYl9pbWFnZSA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSArICItZWRpdGVkIgorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoID0gIiIKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmNsZWFyX3NlbGVjdGlvbigpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN3aXRjaF9tYWNoaW5lX2NvbWJvKCkKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1BQ0hJTkVfU0VMRUNUSU9OKQorCisgICAgIyBDYWxsYmFjayBGdW5jdGlvbnMKKyAgICBkZWYgaGFuZGxlcl9jb25maWdfdXBkYXRlZF9jYihzZWxmLCBoYW5kbGVyLCB3aGljaCwgdmFsdWVzKToKKyAgICAgICAgaWYgd2hpY2ggPT0gImRpc3RybyI6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuYWxsX2Rpc3Ryb3MgPSB2YWx1ZXMKKyAgICAgICAgZWxpZiB3aGljaCA9PSAibWFjaGluZSI6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuYWxsX21hY2hpbmVzID0gdmFsdWVzCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfbWFjaGluZV9jb21ibygpCisgICAgICAgIGVsaWYgd2hpY2ggPT0gIm1hY2hpbmUtc2RrIjoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5hbGxfc2RrX21hY2hpbmVzID0gdmFsdWVzCisKKyAgICBkZWYgaGFuZGxlcl9wYWNrYWdlX2Zvcm1hdHNfdXBkYXRlZF9jYihzZWxmLCBoYW5kbGVyLCBmb3JtYXRzKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBmb3JtYXRzCisKKyAgICBkZWYgc3dpdGNoX3RvX2ltYWdlX2NvbmZpZ3VyYXRpb25faGVscGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlLnN0b3AoKQorICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuSU1BR0VfQ09ORklHVVJBVElPTikKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc3dpdGNoX21hY2hpbmVfY29tYm8oKQorCisgICAgZGVmIHNob3dfbmV0d29ya19lcnJvcl9kaWFsb2dfaGVscGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNhbml0eV9jaGVja19wYWdlLnN0b3AoKQorICAgICAgICBzZWxmLnNob3dfbmV0d29ya19lcnJvcl9kaWFsb2coKQorCisgICAgZGVmIGhhbmRsZXJfY29tbWFuZF9zdWNjZWVkZWRfY2Ioc2VsZiwgaGFuZGxlciwgaW5pdGNtZCk6CisgICAgICAgIGlmIGluaXRjbWQgPT0gc2VsZi5oYW5kbGVyLkdFTkVSQVRFX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfbWFjaDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoID0gc2VsZi5oYW5kbGVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJIT0JfTUFDSElORSJdKSBvciAiIgorICAgICAgICAgICAgc2VsZi51cGRhdGVfY29uZmlndXJhdGlvbl9wYXJhbWV0ZXJzKHNlbGYuZ2V0X3BhcmFtZXRlcnNfc3luYygpKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2FuaXR5X2NoZWNrZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5zYW5pdHlfY2hlY2soKQorICAgICAgICAgICAgICAgIHNlbGYuc2FuaXR5X2NoZWNrZWQgPSBUcnVlCisgICAgICAgIGVsaWYgaW5pdGNtZCA9PSBzZWxmLmhhbmRsZXIuU0FOSVRZX0NIRUNLOgorICAgICAgICAgICAgaWYgc2VsZi5oYWRfbmV0d29ya19lcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmhhZF9uZXR3b3JrX2Vycm9yID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGVfYWZ0ZXJfc2FuaXR5X2NoZWNrKHNlbGYuc2hvd19uZXR3b3JrX2Vycm9yX2RpYWxvZ19oZWxwZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU3dpdGNoIHRvIHRoZSAnaW1hZ2UgY29uZmlndXJhdGlvbicgcGFnZSBub3csIGJ1dCB3ZSBtaWdodCBuZWVkCisgICAgICAgICAgICAgICAgIyB0byB3YWl0IGZvciB0aGUgbWluaW11bSBkaXNwbGF5IHRpbWUgb2YgdGhlIHNhbml0eSBjaGVjayBwYWdlCisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlX2FmdGVyX3Nhbml0eV9jaGVjayhzZWxmLnN3aXRjaF90b19pbWFnZV9jb25maWd1cmF0aW9uX2hlbHBlcikKKyAgICAgICAgZWxpZiBpbml0Y21kIGluIFtzZWxmLmhhbmRsZXIuR0VORVJBVEVfUkVDSVBFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuR0VORVJBVEVfUEFDS0FHRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLkdFTkVSQVRFX0lNQUdFXToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2NvbmZpZ3VyYXRpb25fcGFyYW1ldGVycyhzZWxmLmdldF9wYXJhbWV0ZXJzX3N5bmMoKSkKKyAgICAgICAgICAgIHNlbGYucmVxdWVzdF9wYWNrYWdlX2luZm9fYXN5bmMoKQorICAgICAgICBlbGlmIGluaXRjbWQgPT0gc2VsZi5oYW5kbGVyLlBPUFVMQVRFX1BBQ0tBR0VJTkZPOgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLlJDUFBLR0lORk9fUE9QVUxBVEVEKQorICAgICAgICAgICAgICAgIHNlbGYucmNwcGtnbGlzdF9wb3B1bGF0ZWQoKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzZWxmLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGVfaW1hZ2VfYXN5bmMoVHJ1ZSkKKworICAgIGRlZiBzaG93X2Vycm9yX2RpYWxvZyhzZWxmLCBtc2cpOgorICAgICAgICBsYmwgPSAiPGI+SG9iIGZvdW5kIGFuIGVycm9yPC9iPiIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBzaG93X3dhcm5pbmdfZGlhbG9nKHNlbGYpOgorICAgICAgICBkaWFsb2cgPSBQYXJzaW5nV2FybmluZ3NEaWFsb2codGl0bGUgPSAiVmlldyB3YXJuaW5ncyIsCisgICAgICAgICAgICAgICAgd2FybmluZ3MgPSBzZWxmLnBhcnNpbmdfd2FybmluZ3MsCisgICAgICAgICAgICAgICAgcGFyZW50ID0gTm9uZSwKKyAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd19uZXR3b3JrX2Vycm9yX2RpYWxvZyhzZWxmKToKKyAgICAgICAgbGJsID0gIjxiPkhvYiBjYW5ub3QgY29ubmVjdCB0byB0aGUgbmV0d29yazwvYj4iCisgICAgICAgIG1zZyA9IG1zZyArICJQbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uIElmIHlvdSBhcmUgdXNpbmcgYSBwcm94eSBzZXJ2ZXIsIHBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIgorICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfRVJST1IsIG1zZykKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIlByb3h5IHNldHRpbmdzIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlcyA9IGRpYWxvZy5ydW4oKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIGlmIHJlcyA9PSBndGsuUkVTUE9OU0VfQ0FOQ0VMOgorICAgICAgICAgICAgcmVzLCBzZXR0aW5nc19jaGFuZ2VkID0gc2VsZi5zaG93X3NpbXBsZV9zZXR0aW5nc19kaWFsb2coU2ltcGxlU2V0dGluZ3NEaWFsb2cuUFJPWElFU19QQUdFX0lEKQorICAgICAgICAgICAgaWYgbm90IHJlczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZXBhcnNlX3Bvc3RfYWR2X3NldHRpbmdzKCkKKworICAgIGRlZiBoYW5kbGVyX2NvbW1hbmRfZmFpbGVkX2NiKHNlbGYsIGhhbmRsZXIsIG1zZyk6CisgICAgICAgIGlmIG1zZzoKKyAgICAgICAgICAgIHNlbGYuc2hvd19lcnJvcl9kaWFsb2cobXNnKQorICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfd2FybmluZ19jYihzZWxmLCBoYW5kbGVyLCB3YXJuX21zZyk6CisgICAgICAgIHNlbGYucGFyc2luZ193YXJuaW5ncy5hcHBlbmQod2Fybl9tc2cpCisKKyAgICBkZWYgaGFuZGxlcl9zYW5pdHlfZmFpbGVkX2NiKHNlbGYsIGhhbmRsZXIsIG1zZywgbmV0d29ya19lcnJvcik6CisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBpZiBuZXR3b3JrX2Vycm9yOgorICAgICAgICAgICAgIyBNYXJrIHRoaXMgaW4gYW4gaW50ZXJuYWwgZmllbGQuIFRoZSAibmV0d29yayBlcnJvciIgZGlhbG9nIHdpbGwgYmUKKyAgICAgICAgICAgICMgc2hvd24gbGF0ZXIsIHdoZW4gYSBTYW5pdHlDaGVja1Bhc3NlZCBldmVudCB3aWxsIGJlIGhhbmRsZWQKKyAgICAgICAgICAgICMgKGFzIHNlbnQgYnkgc2FuaXR5LmJiY2xhc3MpCisgICAgICAgICAgICBzZWxmLmhhZF9uZXR3b3JrX2Vycm9yID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gbXNnLnJlcGxhY2UoInlvdXIgbG9jYWwuY29uZiIsICJTZXR0aW5ncyIpCisgICAgICAgICAgICBzZWxmLnNob3dfZXJyb3JfZGlhbG9nKG1zZykKKyAgICAgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHdpbmRvd19zZW5zaXRpdmUoc2VsZiwgc2Vuc2l0aXZlKToKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UubWFjaGluZV9jb21iby5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UubWFjaGluZV9jb21iby5jaGlsZC5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UuaW1hZ2VfY29tYm8uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmltYWdlX2NvbWJvLmNoaWxkLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5sYXllcl9idXR0b24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmxheWVyX2luZm9faWNvbi5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudG9vbGJhci5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLmNvbmZpZ19idWlsZF9idXR0b24uc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisKKyAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnNldF9zZW5zaXRpdmUoc2Vuc2l0aXZlKQorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zZXRfc2Vuc2l0aXZlKHNlbnNpdGl2ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXRhaWxzX3BhZ2Uuc2V0X3NlbnNpdGl2ZShzZW5zaXRpdmUpCisKKyAgICAgICAgaWYgc2Vuc2l0aXZlOgorICAgICAgICAgICAgc2VsZi53aW5kb3cuc2V0X2N1cnNvcihOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLldBVENIKSkKKyAgICAgICAgc2VsZi5zZW5zaXRpdmUgPSBzZW5zaXRpdmUKKworCisgICAgZGVmIGhhbmRsZXJfZ2VuZXJhdGluZ19kYXRhX2NiKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICBzZWxmLndpbmRvd19zZW5zaXRpdmUoRmFsc2UpCisKKyAgICBkZWYgaGFuZGxlcl9kYXRhX2dlbmVyYXRlZF9jYihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi53aW5kb3dfc2Vuc2l0aXZlKFRydWUpCisKKyAgICBkZWYgcmNwcGtnbGlzdF9wb3B1bGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlCisgICAgICAgIHNlbGVjdGVkX3JlY2lwZXMgPSBzZWxmLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcmVjaXBlc1s6XQorICAgICAgICBzZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlc1s6XQorICAgICAgICB1c2VyX3NlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5jb25maWd1cmF0aW9uLnVzZXJfc2VsZWN0ZWRfcGFja2FnZXNbOl0KKworICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfY29tYm8oc2VsZi5yZWNpcGVfbW9kZWwsIHNlbGVjdGVkX2ltYWdlKQorICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfaW1hZ2VfZGVzYygpCisgICAgICAgIHNlbGYudXBkYXRlX3JlY2lwZV9tb2RlbChzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcykKKyAgICAgICAgc2VsZi51cGRhdGVfcGFja2FnZV9tb2RlbChzZWxlY3RlZF9wYWNrYWdlcywgdXNlcl9zZWxlY3RlZF9wYWNrYWdlcykKKworICAgIGRlZiByZWNpcGVsaXN0X2NoYW5nZWRfY2Ioc2VsZiwgcmVjaXBlX21vZGVsKToKKyAgICAgICAgc2VsZi5yZWNpcGVfZGV0YWlsc19wYWdlLnJlZnJlc2hfc2VsZWN0aW9uKCkKKworICAgIGRlZiBwYWNrYWdlbGlzdF9jaGFuZ2VkX2NiKHNlbGYsIHBhY2thZ2VfbW9kZWwpOgorICAgICAgICBzZWxmLnBhY2thZ2VfZGV0YWlsc19wYWdlLnJlZnJlc2hfc2VsZWN0aW9uKCkKKworICAgIGRlZiBoYW5kbGVyX3JlY2lwZV9wb3B1bGF0ZWRfY2Ioc2VsZiwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIlBvcHVsYXRpbmcgcmVjaXBlcyIsIDAuOTkpCisKKyAgICBkZWYgaGFuZGxlcl9wYWNrYWdlX3BvcHVsYXRlZF9jYihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiUG9wdWxhdGluZyBwYWNrYWdlcyIsIDEuMCkKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfc3RhcnRlZF9jYihzZWxmLCBoYW5kbGVyLCBtZXNzYWdlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgIT0gc2VsZi5SQ1BQS0dJTkZPX1BPUFVMQVRJTkc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmcmFjdGlvbiA9IDAKKyAgICAgICAgaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gIlRyZWVEYXRhUHJlcGFyYXRpb25TdGFydGVkIjoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42ICsgZnJhY3Rpb24KKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnN0b3BfYnV0dG9uLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJHZW5lcmF0aW5nIGRlcGVuZGVuY3kgdHJlZSIsIGZyYWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2Uuc3RvcF9idXR0b24uc2V0X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcihtZXNzYWdlWyJ0aXRsZSJdLCBmcmFjdGlvbikKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfY2Ioc2VsZiwgaGFuZGxlciwgbWVzc2FnZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwICE9IHNlbGYuUkNQUEtHSU5GT19QT1BVTEFUSU5HOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJhY3Rpb24gPSBtZXNzYWdlWyJjdXJyZW50Il0gKiAxLjAvbWVzc2FnZVsidG90YWwiXQorICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAiVHJlZURhdGFQcmVwYXJhdGlvblByb2dyZXNzIjoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC42ICsgMC4zOCAqIGZyYWN0aW9uCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJHZW5lcmF0aW5nIGRlcGVuZGVuY3kgdHJlZSIsIGZyYWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjYgKiBmcmFjdGlvbgorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcihtZXNzYWdlWyJ0aXRsZSJdLCBmcmFjdGlvbikKKworICAgIGRlZiBoYW5kbGVyX3BhcnNpbmdfY29tcGxldGVkX2NiKHNlbGYsIGhhbmRsZXIsIG1lc3NhZ2UpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCAhPSBzZWxmLlJDUFBLR0lORk9fUE9QVUxBVElORzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJUcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkIjoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMC45OAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjYKKyAgICAgICAgc2VsZi5pbWFnZV9jb25maWd1cmF0aW9uX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcigiR2VuZXJhdGluZyBkZXBlbmRlbmN5IHRyZWUiLCBmcmFjdGlvbikKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX3N0YXJ0ZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC45CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMAorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgZnJhY3Rpb24gPSAwCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIoIkJ1aWxkIFN0YXJ0ZWQ6ICIsIGZyYWN0aW9uKQorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X2NvbmZpZ3VyYXRpb25zKHNlbGYuY29uZmlndXJhdGlvbiwgc2VsZi5wYXJhbWV0ZXJzKQorCisgICAgZGVmIGJ1aWxkX3N1Y2NlZWRlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDAuOQorICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGZyYWN0aW9uID0gMS4wCisgICAgICAgICAgICB2ZXJzaW9uID0gIiIKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5pbWFnZV9uYW1lcyA9IFtdCisgICAgICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlICE9IHNlbGVjdGVkX2ltYWdlOgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X2N1c3RvbV9pbWFnZV92ZXJzaW9uKCkKKyAgICAgICAgICAgICAgICBsaW5rbmFtZSA9IHNlbGYuaG9iX2ltYWdlICsgdmVyc2lvbiArICItIiArIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2gKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGlua25hbWUgPSBzZWxlY3RlZF9pbWFnZSArICctJyArIHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX21hY2gKKyAgICAgICAgICAgIGltYWdlX2V4dGVuc2lvbiA9IHNlbGYuZ2V0X2ltYWdlX2V4dGVuc2lvbigpCisgICAgICAgICAgICBmb3IgaW1hZ2VfdHlwZSBpbiBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfdHlwZXM6CisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZSBpbiBpbWFnZV9leHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBpbWFnZV9leHRlbnNpb25baW1hZ2VfdHlwZV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZWFsX3R5cGVzID0gW2ltYWdlX3R5cGVdCisgICAgICAgICAgICAgICAgZm9yIHJlYWxfaW1hZ2VfdHlwZSBpbiByZWFsX3R5cGVzOgorICAgICAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyICsgJy8nICsgbGlua25hbWUgKyAnLicgKyByZWFsX2ltYWdlX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGlua3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLmltYWdlX25hbWVzLmFwcGVuZChvcy5yZWFkbGluayhsaW5rcGF0aCkpCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBmcmFjdGlvbiA9IDEuMAorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS51cGRhdGVfcHJvZ3Jlc3NfYmFyKCJCdWlsZCBDb21wbGV0ZWQ6ICIsIGZyYWN0aW9uKQorICAgICAgICBzZWxmLmhhbmRsZXIuYnVpbGRfc3VjY2VlZGVkX2FzeW5jKCkKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBzZWxmLnN3aXRjaF9wYWdlKHNlbGYuUEFDS0FHRV9HRU5FUkFURUQpCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLklNQUdFX0dFTkVSQVRFRCkKKworICAgIGRlZiBidWlsZF9mYWlsZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RvcHBpbmc6CisgICAgICAgICAgICBzdGF0dXMgPSAic3RvcCIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiQnVpbGQgc3RvcHBlZDogIgorICAgICAgICAgICAgZnJhY3Rpb24gPSBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5wcm9ncmVzc19iYXIuZ2V0X2ZyYWN0aW9uKCkKKyAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gIiIKKyAgICAgICAgICAgIGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuRkFTVF9JTUFHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gImltYWdlIGNvbmZpZ3VyYXRpb24iCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gImltYWdlIGNvbmZpZ3VyYXRpb24iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RvcF90b19uZXh0X2VkaXQgPSAicGFja2FnZXMiCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuUEFDS0FHRV9HRU5FUkFUSU5HOgorICAgICAgICAgICAgICAgIHN0b3BfdG9fbmV4dF9lZGl0ID0gInJlY2lwZXMiCisgICAgICAgICAgICBidXR0b24gPSBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X3N0b3BfcGFnZShzdG9wX3RvX25leHRfZWRpdC5zcGxpdCgnICcpWzBdKQorICAgICAgICAgICAgc2VsZi5zZXRfZGVmYXVsdChidXR0b24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWlsX3RvX25leHRfZWRpdCA9ICIiCisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBmYWlsX3RvX25leHRfZWRpdCA9ICJpbWFnZSBjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC45CisgICAgICAgICAgICBlbGlmIHNlbGYuY3VycmVudF9zdGVwID09IHNlbGYuSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnByZXZpb3VzX3N0ZXAgPT0gc2VsZi5GQVNUX0lNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgICAgIGZhaWxfdG9fbmV4dF9lZGl0ID0gImltYWdlIGNvbmZpZ3VyYXRpb24iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAicGFja2FnZXMiCisgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAxLjAKKyAgICAgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICAgICAgZmFpbF90b19uZXh0X2VkaXQgPSAicmVjaXBlcyIKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDEuMAorICAgICAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2Uuc2hvd19mYWlsX3BhZ2UoZmFpbF90b19uZXh0X2VkaXQuc3BsaXQoJyAnKVswXSkKKyAgICAgICAgICAgIHN0YXR1cyA9ICJmYWlsIgorICAgICAgICAgICAgbWVzc2FnZSA9ICJCdWlsZCBmYWlsZWQ6ICIKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UudXBkYXRlX3Byb2dyZXNzX2JhcihtZXNzYWdlLCBmcmFjdGlvbiwgc3RhdHVzKQorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X2JhY2tfYnV0dG9uKCkKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UuaGlkZV9zdG9wX2J1dHRvbigpCisgICAgICAgIHNlbGYuaGFuZGxlci5idWlsZF9mYWlsZWRfYXN5bmMoKQorICAgICAgICBzZWxmLnN0b3BwaW5nID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX3N1Y2NlZWRlZF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgaWYgbm90IHNlbGYuc3RvcHBpbmc6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX3N1Y2NlZWRlZCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJ1aWxkX2ZhaWxlZCgpCisKKworICAgIGRlZiBoYW5kbGVyX2J1aWxkX2ZhaWxlZF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisgICAgZGVmIGhhbmRsZXJfYnVpbGRfYWJvcnRlZF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5idWlsZF9mYWlsZWQoKQorCisgICAgZGVmIGhhbmRsZXJfbm9fcHJvdmlkZXJfY2Ioc2VsZiwgcnVubmluZ19idWlsZCwgbXNnKToKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBnbGliLm1hcmt1cF9lc2NhcGVfdGV4dChtc2cpLCBndGsuTUVTU0FHRV9JTkZPKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICBzZWxmLmJ1aWxkX2ZhaWxlZCgpCisKKyAgICBkZWYgaGFuZGxlcl90YXNrX3N0YXJ0ZWRfY2Ioc2VsZiwgcnVubmluZ19idWlsZCwgbWVzc2FnZSk6IAorICAgICAgICBmcmFjdGlvbiA9IG1lc3NhZ2VbImN1cnJlbnQiXSAqIDEuMC9tZXNzYWdlWyJ0b3RhbCJdCisgICAgICAgIHRpdGxlID0gIkJ1aWxkIHBhY2thZ2VzIgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgIGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJzY2VuZVF1ZXVlVGFza1N0YXJ0ZWQiOgorICAgICAgICAgICAgICAgIGZyYWN0aW9uID0gMC4yNyAqIGZyYWN0aW9uCisgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMjcgKyAwLjYzICogZnJhY3Rpb24KKyAgICAgICAgZWxpZiBzZWxmLmN1cnJlbnRfc3RlcCA9PSBzZWxmLklNQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICB0aXRsZSA9ICJCdWlsZCBpbWFnZSIKKyAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXNfc3RlcCA9PSBzZWxmLkZBU1RfSU1BR0VfR0VORVJBVElORzoKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjI3ICsgMC42MyArIDAuMDMgKiBmcmFjdGlvbgorICAgICAgICAgICAgICAgIGVsaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInJ1blF1ZXVlVGFza1N0YXJ0ZWQiOgorICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMjcgKyAwLjYzICsgMC4wMyArIDAuMDcgKiBmcmFjdGlvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSAwLjIgKiBmcmFjdGlvbgorICAgICAgICAgICAgICAgIGVsaWYgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPT0gInJ1blF1ZXVlVGFza1N0YXJ0ZWQiOgorICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMiArIDAuOCAqIGZyYWN0aW9uCisgICAgICAgIGVsaWYgc2VsZi5jdXJyZW50X3N0ZXAgPT0gc2VsZi5QQUNLQUdFX0dFTkVSQVRJTkc6CisgICAgICAgICAgICBpZiBtZXNzYWdlWyJldmVudG5hbWUiXSA9PSAic2NlbmVRdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMiAqIGZyYWN0aW9uCisgICAgICAgICAgICBlbGlmIG1lc3NhZ2VbImV2ZW50bmFtZSJdID09ICJydW5RdWV1ZVRhc2tTdGFydGVkIjoKKyAgICAgICAgICAgICAgICBmcmFjdGlvbiA9IDAuMiArIDAuOCAqIGZyYWN0aW9uCisgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnVwZGF0ZV9wcm9ncmVzc19iYXIodGl0bGUgKyAiOiAiLCBmcmFjdGlvbikKKyAgICAgICAgc2VsZi5idWlsZF9kZXRhaWxzX3BhZ2UudXBkYXRlX2J1aWxkX3N0YXR1cyhtZXNzYWdlWyJjdXJyZW50Il0sIG1lc3NhZ2VbInRvdGFsIl0sIG1lc3NhZ2VbInRhc2siXSkKKworICAgIGRlZiBoYW5kbGVyX2Rpc2tfZnVsbF9jYihzZWxmLCBydW5uaW5nX2J1aWxkKToKKyAgICAgICAgc2VsZi5kaXNrX2Z1bGwgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9mYWlsdXJlX2NiKHNlbGYsIHJ1bm5pbmdfYnVpbGQpOgorICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5zaG93X2lzc3VlcygpCisKKyAgICBkZWYgaGFuZGxlcl9idWlsZF9sb2dfY2Ioc2VsZiwgcnVubmluZ19idWlsZCwgZnVuYywgb2JqKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLmxvZ2dlciwgZnVuYyk6CisgICAgICAgICAgICBnZXRhdHRyKHNlbGYubG9nZ2VyLCBmdW5jKShvYmopCisKKyAgICBkZWYgZGVzdHJveV93aW5kb3dfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnNlbnNpdGl2ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsaWYgc2VsZi5oYW5kbGVyLmJ1aWxkaW5nOgorICAgICAgICAgICAgc2VsZi5zdG9wX2J1aWxkKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBndGsubWFpbl9xdWl0KCkKKworICAgIGRlZiBldmVudF9oYW5kbGVfU0lHSU5UKHNlbGYsIHNpZ25hbCwgZnJhbWUpOgorICAgICAgICBmb3IgdyBpbiBndGsud2luZG93X2xpc3RfdG9wbGV2ZWxzKCk6CisgICAgICAgICAgICBpZiB3LmdldF9tb2RhbCgpOgorICAgICAgICAgICAgICAgIHcucmVzcG9uc2UoZ3RrLlJFU1BPTlNFX0RFTEVURV9FVkVOVCkKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGRlZiBidWlsZF9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgXywgYWxsX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIGlmIG5vdCBhbGxfcmVjaXBlczoKKyAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBzbyB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiYWtlIGF0IHRoaXMgdGltZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmdlbmVyYXRlX3BhY2thZ2VzX2FzeW5jKFRydWUpCisKKyAgICBkZWYgYnVpbGRfaW1hZ2Uoc2VsZik6CisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIGlmIG5vdCBzZWxlY3RlZF9wYWNrYWdlczogICAgICAKKyAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb25zIG1hZGU8L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiBzbyB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiYWtlIGF0IHRoaXMgdGltZS4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmdlbmVyYXRlX2ltYWdlX2FzeW5jKFRydWUpCisKKyAgICBkZWYganVzdF9iYWtlKHNlbGYpOgorICAgICAgICBzZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpIG9yIFtdCisKKyAgICAgICAgIyBJZiBubyBiYXNlIGltYWdlIGFuZCBubyBzZWxlY3RlZCBwYWNrYWdlcyBkb24ndCBidWlsZCBhbnl0aGluZworICAgICAgICBpZiBub3QgKHNlbGVjdGVkX3BhY2thZ2VzIG9yIHNlbGVjdGVkX2ltYWdlICE9IHNlbGYucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX18pOgorICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbnMgbWFkZTwvYj4iCisgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IG1hZGUgYW55IHNlbGVjdGlvbnMiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHNvIHRoZXJlIGlzbid0IGFueXRoaW5nIHRvIGJha2UgYXQgdGhpcyB0aW1lLiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9JTkZPLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5mYXN0X2dlbmVyYXRlX2ltYWdlX2FzeW5jKFRydWUpCisKKyAgICBkZWYgc2hvd19yZWNpcGVfcHJvcGVydHlfZGlhbG9nKHNlbGYsIHByb3BlcnRpZXMpOgorICAgICAgICBpbmZvcm1hdGlvbiA9IHt9CisgICAgICAgIGRpYWxvZyA9IFByb3BlcnR5RGlhbG9nKHRpdGxlID0gcHJvcGVydGllc1sibmFtZSJdICsnICcrICJwcm9wZXJ0aWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uID0gcHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorCisgICAgICAgIGRpYWxvZy5zZXRfbW9kYWwoRmFsc2UpCisKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBsYW1iZGEgdzogZGlhbG9nLmRlc3Ryb3koKSkKKworICAgICAgICBkaWFsb2cucnVuKCkKKworICAgIGRlZiBzaG93X3BhY2thZ2VzX3Byb3BlcnR5X2RpYWxvZyhzZWxmLCBwcm9wZXJ0aWVzKToKKyAgICAgICAgaW5mb3JtYXRpb24gPSB7fQorICAgICAgICBkaWFsb2cgPSBQcm9wZXJ0eURpYWxvZyh0aXRsZSA9IHByb3BlcnRpZXNbIm5hbWUiXSArJyAnKyAicHJvcGVydGllcyIsCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiA9IHByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKworICAgICAgICBkaWFsb2cuc2V0X21vZGFsKEZhbHNlKQorCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgbGFtYmRhIHc6IGRpYWxvZy5kZXN0cm95KCkpCisKKyAgICAgICAgZGlhbG9nLnJ1bigpCisKKyAgICBkZWYgc2hvd19sYXllcl9zZWxlY3Rpb25fZGlhbG9nKHNlbGYpOgorICAgICAgICBkaWFsb2cgPSBMYXllclNlbGVjdGlvbkRpYWxvZyh0aXRsZSA9ICJMYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24ubGF5ZXJzKSwKKyAgICAgICAgICAgICAgICAgICAgIGxheWVyc19ub25fcmVtb3ZhYmxlID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24ubGF5ZXJzX25vbl9yZW1vdmFibGUpLAorICAgICAgICAgICAgICAgICAgICAgYWxsX2xheWVycyA9IHNlbGYucGFyYW1ldGVycy5hbGxfbGF5ZXJzLAorICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPSyIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmxheWVycyA9IGRpYWxvZy5sYXllcnMKKyAgICAgICAgICAgICMgRE8gcmVmcmVzaCBsYXllcnMKKyAgICAgICAgICAgIGlmIGRpYWxvZy5sYXllcnNfY2hhbmdlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9jb25maWdfYXN5bmMoKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgZ2V0X2ltYWdlX2V4dGVuc2lvbihzZWxmKToKKyAgICAgICAgaW1hZ2VfZXh0ZW5zaW9uID0ge30KKyAgICAgICAgZm9yIHR5cGUgaW4gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgZXh0ID0gc2VsZi5oYW5kbGVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9FWFRFTlNJT05fJXMiICUgdHlwZV0pCisgICAgICAgICAgICBpZiBleHQ6CisgICAgICAgICAgICAgICAgaW1hZ2VfZXh0ZW5zaW9uW3R5cGVdID0gZXh0LnNwbGl0KCcgJykKKworICAgICAgICByZXR1cm4gaW1hZ2VfZXh0ZW5zaW9uCisKKyAgICBkZWYgc2hvd19sb2FkX215X2ltYWdlc19kaWFsb2coc2VsZik6CisgICAgICAgIGltYWdlX2V4dGVuc2lvbiA9IHNlbGYuZ2V0X2ltYWdlX2V4dGVuc2lvbigpCisgICAgICAgIGRpYWxvZyA9IEltYWdlU2VsZWN0aW9uRGlhbG9nKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyLCBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuIE15IEltYWdlcyIsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfZXh0ZW5zaW9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGlmIG5vdCBkaWFsb2cuaW1hZ2VfbmFtZXM6CisgICAgICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbnMgbWFkZTwvYj4iCisgICAgICAgICAgICAgICAgbXNnID0gIllvdSBoYXZlIG5vdCBtYWRlIGFueSBzZWxlY3Rpb25zIgorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisgICAgICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciA9IGRpYWxvZy5pbWFnZV9mb2xkZXIKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVycy5pbWFnZV9uYW1lcyA9IGRpYWxvZy5pbWFnZV9uYW1lc1s6XQorICAgICAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLk1ZX0lNQUdFX09QRU5FRCkKKworICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd19hZHZfc2V0dGluZ3NfZGlhbG9nKHNlbGYsIHRhYj1Ob25lKToKKyAgICAgICAgZGlhbG9nID0gQWR2YW5jZWRTZXR0aW5nc0RpYWxvZyh0aXRsZSA9ICJBZHZhbmNlZCBjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gPSBjb3B5LmRlZXBjb3B5KHNlbGYuY29uZmlndXJhdGlvbiksCisgICAgICAgICAgICBhbGxfaW1hZ2VfdHlwZXMgPSBzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfdHlwZXMsCisgICAgICAgICAgICBhbGxfcGFja2FnZV9mb3JtYXRzID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9wYWNrYWdlX2Zvcm1hdHMsCisgICAgICAgICAgICBhbGxfZGlzdHJvcyA9IHNlbGYucGFyYW1ldGVycy5hbGxfZGlzdHJvcywKKyAgICAgICAgICAgIGFsbF9zZGtfbWFjaGluZXMgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX3Nka19tYWNoaW5lcywKKyAgICAgICAgICAgIG1heF90aHJlYWRzID0gc2VsZi5wYXJhbWV0ZXJzLm1heF90aHJlYWRzLAorICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIlNhdmUiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgZGlhbG9nLnNldF9zYXZlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIHNldHRpbmdzX2NoYW5nZWQgPSBGYWxzZQorICAgICAgICBpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gZGlhbG9nLmNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zYXZlKHNlbGYuaGFuZGxlciwgVHJ1ZSkgIyByZW1lbWJlciBzZXR0aW5ncworICAgICAgICAgICAgc2V0dGluZ3NfY2hhbmdlZCA9IGRpYWxvZy5zZXR0aW5nc19jaGFuZ2VkCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVMsIHNldHRpbmdzX2NoYW5nZWQKKworICAgIGRlZiBzaG93X3NpbXBsZV9zZXR0aW5nc19kaWFsb2coc2VsZiwgdGFiPU5vbmUpOgorICAgICAgICBkaWFsb2cgPSBTaW1wbGVTZXR0aW5nc0RpYWxvZyh0aXRsZSA9ICJTZXR0aW5ncyIsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29weS5kZWVwY29weShzZWxmLmNvbmZpZ3VyYXRpb24pLAorICAgICAgICAgICAgYWxsX2ltYWdlX3R5cGVzID0gc2VsZi5wYXJhbWV0ZXJzLmltYWdlX3R5cGVzLAorICAgICAgICAgICAgYWxsX3BhY2thZ2VfZm9ybWF0cyA9IHNlbGYucGFyYW1ldGVycy5hbGxfcGFja2FnZV9mb3JtYXRzLAorICAgICAgICAgICAgYWxsX2Rpc3Ryb3MgPSBzZWxmLnBhcmFtZXRlcnMuYWxsX2Rpc3Ryb3MsCisgICAgICAgICAgICBhbGxfc2RrX21hY2hpbmVzID0gc2VsZi5wYXJhbWV0ZXJzLmFsbF9zZGtfbWFjaGluZXMsCisgICAgICAgICAgICBtYXhfdGhyZWFkcyA9IHNlbGYucGFyYW1ldGVycy5tYXhfdGhyZWFkcywKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYsCisgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQKKyAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUiwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxmLmhhbmRsZXIpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiU2F2ZSIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBpZiB0YWI6CisgICAgICAgICAgICBkaWFsb2cuc3dpdGNoX3RvX3BhZ2UodGFiKQorICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICBzZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGRpYWxvZy5jb25maWd1cmF0aW9uCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2F2ZShzZWxmLmhhbmRsZXIsIFRydWUpICMgcmVtZW1iZXIgc2V0dGluZ3MKKyAgICAgICAgICAgIHNldHRpbmdzX2NoYW5nZWQgPSBkaWFsb2cuc2V0dGluZ3NfY2hhbmdlZAorICAgICAgICAgICAgaWYgZGlhbG9nLnByb3h5X3NldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdXNlcl9jb25maWdfcHJveGllcygpCisgICAgICAgIGVsaWYgZGlhbG9nLnByb3h5X3Rlc3RfcmFuOgorICAgICAgICAgICAgIyBUaGUgdXNlciBtaWdodCBoYXZlIG1vZGlmaWVkIHRoZSBwcm94aWVzIGluIHRoZSAiUHJveHkiCisgICAgICAgICAgICAjIHRhYiwgd2hpY2ggaW4gdHVybiBtYWRlIHRoZSBwcm94eSBzZXR0aW5ncyBtb2RpZnkgaW4gYmIuCisgICAgICAgICAgICAjIElmICJDYW5jZWwiIHdhcyBwcmVzc2VkLCByZXN0b3JlIHRoZSBwcmV2aW91cyBwcm94eQorICAgICAgICAgICAgIyBzZXR0aW5ncyBpbnNpZGUgYmIuCisgICAgICAgICAgICBzZWxmLnNldF91c2VyX2NvbmZpZ19wcm94aWVzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICByZXR1cm4gcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUywgc2V0dGluZ3NfY2hhbmdlZAorCisgICAgZGVmIHJlcGFyc2VfcG9zdF9hZHZfc2V0dGluZ3Moc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoOgorICAgICAgICAgICAgc2VsZi51cGRhdGVfY29uZmlnX2FzeW5jKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5jbGVhcl9zZWxlY3Rpb24oKQorICAgICAgICAgICAgIyBETyByZXBhcnNlIHJlY2lwZXMKKyAgICAgICAgICAgIHNlbGYucG9wdWxhdGVfcmVjaXBlX3BhY2thZ2VfaW5mb19hc3luYygpCisKKyAgICBkZWYgZGVwbG95X2ltYWdlKHNlbGYsIGltYWdlX25hbWUpOgorICAgICAgICBpZiBub3QgaW1hZ2VfbmFtZToKKyAgICAgICAgICAgIGxibCA9ICI8Yj5QbGVhc2Ugc2VsZWN0IGFuIGltYWdlIHRvIGRlcGxveS48L2I+IgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW1hZ2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhcmFtZXRlcnMuaW1hZ2VfYWRkciwgaW1hZ2VfbmFtZSkKKyAgICAgICAgZGlhbG9nID0gRGVwbG95SW1hZ2VEaWFsb2codGl0bGUgPSAiVXNiIEltYWdlIE1ha2VyIiwKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBpbWFnZV9wYXRoLAorICAgICAgICAgICAgcGFyZW50ID0gc2VsZiwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiTWFrZSB1c2IgaW1hZ2UiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNob3dfbG9hZF9rZXJuZWxfZGlhbG9nKHNlbGYpOgorICAgICAgICBkaWFsb2cgPSBndGsuRmlsZUNob29zZXJEaWFsb2coIkxvYWQgS2VybmVsIEZpbGVzIiwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfTk8pCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT3BlbiIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBmaWx0ZXIgPSBndGsuRmlsZUZpbHRlcigpCisgICAgICAgIGZpbHRlci5zZXRfbmFtZSgiS2VybmVsIEZpbGVzIikKKyAgICAgICAgZmlsdGVyLmFkZF9wYXR0ZXJuKCIqLmJpbiIpCisgICAgICAgIGRpYWxvZy5hZGRfZmlsdGVyKGZpbHRlcikKKworICAgICAgICBkaWFsb2cuc2V0X2N1cnJlbnRfZm9sZGVyKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyKQorCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGtlcm5lbF9wYXRoID0gIiIKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGtlcm5lbF9wYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIHJldHVybiBrZXJuZWxfcGF0aAorCisgICAgZGVmIHJ1bnFlbXVfaW1hZ2Uoc2VsZiwgaW1hZ2VfbmFtZSwga2VybmVsX25hbWUpOgorICAgICAgICBpZiBub3QgaW1hZ2VfbmFtZSBvciBub3Qga2VybmVsX25hbWU6CisgICAgICAgICAgICBsYmwgPSAiPGI+UGxlYXNlIHNlbGVjdCAlcyB0byBsYXVuY2ggaW4gUUVNVS48L2I+IiAlICgiYSBrZXJuZWwiIGlmIGltYWdlX25hbWUgZWxzZSAiYW4gaW1hZ2UiKQorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0lORk8pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga2VybmVsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJhbWV0ZXJzLmltYWdlX2FkZHIsIGtlcm5lbF9uYW1lKQorICAgICAgICBpbWFnZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFyYW1ldGVycy5pbWFnZV9hZGRyLCBpbWFnZV9uYW1lKQorCisgICAgICAgIHNvdXJjZV9lbnZfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhcmFtZXRlcnMuY29yZV9iYXNlLCAib2UtaW5pdC1idWlsZC1lbnYiKQorICAgICAgICB0bXBfcGF0aCA9IHNlbGYucGFyYW1ldGVycy50bXBkaXIKKyAgICAgICAgY21kbGluZSA9IGJiLnVpLmNydW1icy51dGlscy53aGljaF90ZXJtaW5hbCgpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGltYWdlX3BhdGgpIGFuZCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcGF0aCkgXAorICAgICAgICAgICBhbmQgb3MucGF0aC5leGlzdHMoc291cmNlX2Vudl9wYXRoKSBhbmQgb3MucGF0aC5leGlzdHModG1wX3BhdGgpIFwKKyAgICAgICAgICAgYW5kIGNtZGxpbmU6CisgICAgICAgICAgICBjbWRsaW5lICs9ICJcJyBiYXNoIC1jIFwiZXhwb3J0IE9FX1RNUERJUj0iICsgdG1wX3BhdGggKyAiOyAiCisgICAgICAgICAgICBjbWRsaW5lICs9ICJzb3VyY2UgIiArIHNvdXJjZV9lbnZfcGF0aCArICIgIiArIG9zLmdldGN3ZCgpICsgIjsgIgorICAgICAgICAgICAgY21kbGluZSArPSAicnVucWVtdSAiICsga2VybmVsX3BhdGggKyAiICIgKyBpbWFnZV9wYXRoICsgIlwiXCciCisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNwbGl0KGNtZGxpbmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGJsID0gIjxiPlBhdGggZXJyb3I8L2I+IgorICAgICAgICAgICAgbXNnID0gIk9uZSBvZiB5b3VyIHBhdGhzIGlzIHdyb25nLCIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgcGxlYXNlIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIHBhdGhzIGV4aXN0OlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgImltYWdlIHBhdGg6IiArIGltYWdlX3BhdGggKyAiXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAia2VybmVsIHBhdGg6IiArIGtlcm5lbF9wYXRoICsgIlxuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgInNvdXJjZSBlbnZpcm9ubWVudCBwYXRoOiIgKyBzb3VyY2VfZW52X3BhdGggKyAiXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAidG1wIHBhdGg6ICIgKyB0bXBfcGF0aCArICIuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIllvdSBtYXkgYmUgbWlzc2luZyBlaXRoZXIgeHRlcm0gb3IgdnRlIGZvciB0ZXJtaW5hbCBzZXJ2aWNlcy4iCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfRVJST1IsIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgc2hvd19wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbHNfcGFnZS5yZWZyZXNoX3RhYmxlcygpCisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5QQUNLQUdFX1NFTEVDVElPTikKKworICAgIGRlZiBzaG93X3JlY2lwZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5SRUNJUEVfU0VMRUNUSU9OKQorCisgICAgZGVmIHNob3dfaW1hZ2VfZGV0YWlscyhzZWxmKToKKyAgICAgICAgc2VsZi5zd2l0Y2hfcGFnZShzZWxmLklNQUdFX0dFTkVSQVRFRCkKKworICAgIGRlZiBzaG93X2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuc3dpdGNoX3BhZ2Uoc2VsZi5CQVNFSU1HX1NFTEVDVEVEKQorCisgICAgZGVmIHN0b3BfYnVpbGQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RvcHBpbmc6CisgICAgICAgICAgICBsYmwgPSAiPGI+Rm9yY2UgU3RvcCBidWlsZD88L2I+IgorICAgICAgICAgICAgbXNnID0gIllvdSd2ZSBhbHJlYWR5IHNlbGVjdGVkIFN0b3Agb25jZSwiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIHdvdWxkIHlvdSBsaWtlIHRvICdGb3JjZSBTdG9wJyB0aGUgYnVpbGQ/XG5cbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICJUaGlzIHdpbGwgc3RvcCB0aGUgYnVpbGQgYXMgcXVpY2tseSBhcyBwb3NzaWJsZSBidXQgbWF5IgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiB3ZWxsIGxlYXZlIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGluIGFuICB1bnVzYWJsZSBzdGF0ZSIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgdGhhdCByZXF1aXJlcyBtYW51YWwgc3RlcHMgdG8gZml4LiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkZvcmNlIFN0b3AiLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYmwgPSAiPGI+U3RvcCBidWlsZD88L2I+IgorICAgICAgICAgICAgbXNnID0gIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzdG9wIHRoaXMiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIGJ1aWxkP1xuXG4nU3RvcCcgd2lsbCBzdG9wIHRoZSBidWlsZCBhcyBzb29uIGFzIGFsbCBpbiIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgcHJvZ3Jlc3MgYnVpbGQgdGFza3MgYXJlIGZpbmlzaGVkLiBIb3dldmVyIGlmIGEiCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiIGxlbmd0aHkgY29tcGlsYXRpb24gcGhhc2UgaXMgaW4gcHJvZ3Jlc3MgdGhpcyBtYXkgdGFrZSIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgc29tZSB0aW1lLlxuXG4iCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiJ0ZvcmNlIFN0b3AnIHdpbGwgc3RvcCB0aGUgYnVpbGQgYXMgcXVpY2tseSBhcyIKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgcG9zc2libGUgYnV0IG1heSB3ZWxsIGxlYXZlIHlvdXIgYnVpbGQgZGlyZWN0b3J5IGluIGFuIgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiB1bnVzYWJsZSBzdGF0ZSB0aGF0IHJlcXVpcmVzIG1hbnVhbCBzdGVwcyB0byBmaXguIgorICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX1dBUk5JTkcsIG1zZykKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDYW5jZWwiLCBndGsuUkVTUE9OU0VfQ0FOQ0VMKQorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiRm9yY2Ugc3RvcCIsIGd0ay5SRVNQT05TRV9ZRVMpCisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJTdG9wIiwgZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgaWYgcmVzcG9uc2UgIT0gZ3RrLlJFU1BPTlNFX0NBTkNFTDoKKyAgICAgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBUcnVlCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9PSzoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRfZGV0YWlsc19wYWdlLnByb2dyZXNzX2Jhci5zZXRfc3RvcF90aXRsZSgiU3RvcHBpbmcgdGhlIGJ1aWxkLi4uLiIpCisgICAgICAgICAgICBzZWxmLmJ1aWxkX2RldGFpbHNfcGFnZS5wcm9ncmVzc19iYXIuc2V0X3Jjc3R5bGUoInN0b3AiKQorICAgICAgICAgICAgc2VsZi5jYW5jZWxfYnVpbGRfc3luYygpCisgICAgICAgIGVsaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsX2J1aWxkX3N5bmMoVHJ1ZSkKKworICAgIGRlZiBkb19sb2coc2VsZiwgY29uc29sZWxvZ2ZpbGUgPSBOb25lKToKKyAgICAgICAgaWYgY29uc29sZWxvZ2ZpbGU6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGNvbnNvbGVsb2dmaWxlKSkKKyAgICAgICAgICAgIGlmIHNlbGYuY29uc29sZWxvZzoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYuY29uc29sZWxvZykKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnNvbGVsb2cgPSBOb25lCisgICAgICAgICAgICBzZWxmLmNvbnNvbGVsb2cgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGNvbnNvbGVsb2dmaWxlKQorICAgICAgICAgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoc2VsZi5jb25zb2xlbG9nKQorICAgICAgICAgICAgZm9ybWF0ID0gYmIubXNnLkJCTG9nRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgICAgICAgICBzZWxmLmNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKworICAgICAgICAgICAgc2VsZi5sb2dnZXIuYWRkSGFuZGxlcihzZWxmLmNvbnNvbGVsb2cpCisKKyAgICBkZWYgZ2V0X3RvcGRpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlci5nZXRfdG9wZGlyKCkKKworICAgIGRlZiB3YWl0KHNlbGYsIGRlbGF5KToKKyAgICAgICAgdGltZV9zdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIHRpbWVfZW5kID0gdGltZV9zdGFydCArIGRlbGF5CisgICAgICAgIHdoaWxlIHRpbWVfZW5kID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICB3aGlsZSBndGsuZXZlbnRzX3BlbmRpbmcoKToKKyAgICAgICAgICAgICAgICBndGsubWFpbl9pdGVyYXRpb24oKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2J1aWxkbWFuYWdlci5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZG1hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1OGQ3NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9idWlsZG1hbmFnZXIucHkKQEAgLTAsMCArMSw0NTUgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAwOCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCBvcworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdGltZQorCitjbGFzcyBCdWlsZENvbmZpZ3VyYXRpb246CisgICAgIiIiIFJlcHJlc2VudHMgYSBwb3RlbnRpYWwgKm9yKiBoaXN0b3JpYyAqb3IqIGNvbmNyZXRlIGJ1aWxkLiBJdAorICAgIGVuY29tcGFzc2VzIGFsbCB0aGUgdGhpbmdzIHRoYXQgd2UgbmVlZCB0byB0ZWxsIGJpdGJha2UgdG8gZG8gdG8gbWFrZSBpdAorICAgIGJ1aWxkIHdoYXQgd2Ugd2FudCBpdCB0byBidWlsZC4KKworICAgIEl0IGFsc28gc3RvcmVkIHRoZSBtZXRhZGF0YSBVUkwgYW5kIHRoZSBzZXQgb2YgcG9zc2libGUgbWFjaGluZXMgKGFuZCB0aGUKKyAgICBkaXN0cm9zIC8gaW1hZ2VzIC8gdXJpcyBmb3IgdGhlc2UuIEFwYXJ0IGZyb20gdGhlIG1ldGRhdGEgVVJMIHRoZXNlIGFyZQorICAgIG5vdCBzZXJpYWxpc2VkIHRvIGZpbGUgKHNpbmNlIHRoZXkgbWF5IGJlIHRyYW5zaWVudCkuIEluIHNvbWUgd2F5cyB0aGlzCisgICAgZnVuY3Rpb25hbGl0eSBtaWdodCBiZSBzaGlmdGVkIHRvIHRoZSBsb2FkZXIgY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBzZWxmLm1ldGFkYXRhX3VybCA9IE5vbmUKKworICAgICAgICAjIFR1cGxlIG9mIChkaXN0cm9zLCBpbWFnZSwgdXJscykKKyAgICAgICAgc2VsZi5tYWNoaW5lX29wdGlvbnMgPSB7fQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXN0cm8gPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYudXJscyA9IFtdCisgICAgICAgIHNlbGYuZXh0cmFfdXJscyA9IFtdCisgICAgICAgIHNlbGYuZXh0cmFfcGtncyA9IFtdCisKKyAgICBkZWYgZ2V0X21hY2hpbmVzX21vZGVsIChzZWxmKToKKyAgICAgICAgbW9kZWwgPSBndGsuTGlzdFN0b3JlIChnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBmb3IgbWFjaGluZSBpbiBzZWxmLm1hY2hpbmVfb3B0aW9ucy5rZXlzKCk6CisgICAgICAgICAgICBtb2RlbC5hcHBlbmQgKFttYWNoaW5lXSkKKworICAgICAgICByZXR1cm4gbW9kZWwKKworICAgIGRlZiBnZXRfZGlzdHJvX2FuZF9pbWFnZXNfbW9kZWxzIChzZWxmLCBtYWNoaW5lKToKKyAgICAgICAgZGlzdHJvX21vZGVsID0gZ3RrLkxpc3RTdG9yZSAoZ29iamVjdC5UWVBFX1NUUklORykKKworICAgICAgICBmb3IgZGlzdHJvIGluIHNlbGYubWFjaGluZV9vcHRpb25zW21hY2hpbmVdWzBdOgorICAgICAgICAgICAgZGlzdHJvX21vZGVsLmFwcGVuZCAoW2Rpc3Ryb10pCisKKyAgICAgICAgaW1hZ2VfbW9kZWwgPSBndGsuTGlzdFN0b3JlIChnb2JqZWN0LlRZUEVfU1RSSU5HKQorCisgICAgICAgIGZvciBpbWFnZSBpbiBzZWxmLm1hY2hpbmVfb3B0aW9uc1ttYWNoaW5lXVsxXToKKyAgICAgICAgICAgIGltYWdlX21vZGVsLmFwcGVuZCAoW2ltYWdlXSkKKworICAgICAgICByZXR1cm4gKGRpc3Ryb19tb2RlbCwgaW1hZ2VfbW9kZWwpCisKKyAgICBkZWYgZ2V0X3JlcG9zIChzZWxmKToKKyAgICAgICAgc2VsZi51cmxzID0gc2VsZi5tYWNoaW5lX29wdGlvbnNbc2VsZi5tYWNoaW5lXVsyXQorICAgICAgICByZXR1cm4gc2VsZi51cmxzCisKKyAgICAjIEl0IG1pZ2h0IGJlIGEgbG90IGxvdCBiZXR0ZXIgaWYgd2Ugc3RvcmVkIHRoZXNlIGluIGxpa2UsIGJpdGJha2UgY29uZgorICAgICMgZmlsZSBmb3JtYXQuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkX2Zyb21fZmlsZSAoZmlsZW5hbWUpOgorCisgICAgICAgIGNvbmYgPSBCdWlsZENvbmZpZ3VyYXRpb24oKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IGxpbmUuc3BsaXQgKCI7IilbMV0KKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoICgibWV0YWRhdGEtdXJsOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi5tZXRhZGF0YV91cmwgPSBkYXRhLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAobGluZS5zdGFydHN3aXRoICgidXJsOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi51cmxzICs9IFtkYXRhLnN0cmlwKCldCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoImV4dHJhLXVybDsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYuZXh0cmFfdXJscyArPSBbZGF0YS5zdHJpcCgpXQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGggKCJtYWNoaW5lOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi5tYWNoaW5lID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoImRpc3RyaWJ1dGlvbjsiKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbmYuZGlzdHJvID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCAoImltYWdlOyIpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZi5pbWFnZSA9IGRhdGEuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJldHVybiBjb25mCisKKyAgICAjIFNlcmlhbGlzZSB0byBhIGZpbGUuIFRoaXMgaXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgd2UgdXNlIHRoaXMKKyAgICAjIHRvIGJlIGFibGUgdG8gcmVwZWF0IGEgZ2l2ZW4gYnVpbGQgKHVzaW5nIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzKQorICAgICMgYnV0IGFsc28gc28gdGhhdCB3ZSBjYW4gaW5jbHVkZSB0aGUgZGV0YWlscyBvZiB0aGUgaW1hZ2UgLyBtYWNoaW5lIC8KKyAgICAjIGRpc3RybyBpbiB0aGUgYnVpbGQgbWFuYWdlciB0cmVlIHZpZXcuCisgICAgZGVmIHdyaXRlX3RvX2ZpbGUgKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgZiA9IG9wZW4gKGZpbGVuYW1lLCAidyIpCisKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGlmIChzZWxmLm1ldGFkYXRhX3VybCk6CisgICAgICAgICAgICBsaW5lcyArPSBbIm1ldGFkYXRhLXVybDslc1xuIiAlIChzZWxmLm1ldGFkYXRhX3VybCldCisKKyAgICAgICAgZm9yIHVybCBpbiBzZWxmLnVybHM6CisgICAgICAgICAgICBsaW5lcyArPSBbInVybDslc1xuIiAlICh1cmwpXQorCisgICAgICAgIGZvciB1cmwgaW4gc2VsZi5leHRyYV91cmxzOgorICAgICAgICAgICAgbGluZXMgKz0gWyJleHRyYS11cmw7JXNcbiIgJSAodXJsKV0KKworICAgICAgICBpZiAoc2VsZi5tYWNoaW5lKToKKyAgICAgICAgICAgIGxpbmVzICs9IFsibWFjaGluZTslc1xuIiAlIChzZWxmLm1hY2hpbmUpXQorCisgICAgICAgIGlmIChzZWxmLmRpc3Rybyk6CisgICAgICAgICAgICBsaW5lcyArPSBbImRpc3RyaWJ1dGlvbjslc1xuIiAlIChzZWxmLmRpc3RybyldCisKKyAgICAgICAgaWYgKHNlbGYuaW1hZ2UpOgorICAgICAgICAgICAgbGluZXMgKz0gWyJpbWFnZTslc1xuIiAlIChzZWxmLmltYWdlKV0KKworICAgICAgICBmLndyaXRlbGluZXMgKGxpbmVzKQorICAgICAgICBmLmNsb3NlICgpCisKK2NsYXNzIEJ1aWxkUmVzdWx0KGdvYmplY3QuR09iamVjdCk6CisgICAgIiIiIFJlcHJlc2VudHMgYW4gaGlzdG9yaWMgYnVpbGQuIFBlcmhhcHMgbm90IHN1Y2Nlc3NmdWwuIEJ1dCBpdCBpbmNsdWRlcworICAgIHRoaW5ncyBzdWNoIGFzIHRoZSBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgZGlyZWN0b3J5ICh0aGUgb3V0cHV0IGZyb20gdGhlCisgICAgYnVpbGQpIGFzIHdlbGwgYXMgYSBkZXNlcmlhbGlzZWQgQnVpbGRDb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBzdG9yZWQgaW4KKyAgICAiLmNvbmYiIGluIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZC4KKworICAgIFRoaXMgaXMgR09iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgVHJlZVN0b3JlLiIiIgorCisgICAgKFNUQVRFX0NPTVBMRVRFLCBTVEFURV9GQUlMRUQsIFNUQVRFX09OR09JTkcpID0gXAorICAgICAgICAoMCwgMSwgMikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcGFyZW50LCBpZGVudGlmaWVyKToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fIChzZWxmKQorICAgICAgICBzZWxmLmRhdGUgPSBOb25lCisKKyAgICAgICAgc2VsZi5maWxlcyA9IFtdCisgICAgICAgIHNlbGYuc3RhdHVzID0gTm9uZQorICAgICAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyCisgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbiAocGFyZW50LCBpZGVudGlmaWVyKQorCisgICAgICAgICMgRXh0cmFjdCB0aGUgZGF0ZSwgc2luY2UgdGhlIGRpcmVjdG9yeSBuYW1lIGlzIG9mIHRoZQorICAgICAgICAjIGZvcm1hdCBidWlsZC08eWVhcj48bW9udGg+PGRheT4tPG9yZGluYWw+IHdlIGNhbiBlYXNpbHkKKyAgICAgICAgIyBwdWxsIGl0IG91dC4KKyAgICAgICAgIyBUT0RPOiBCZXR0ZXIgdG8gc3RhdCBhIGZpbGU/CisgICAgICAgIChfLCBkYXRlLCByZXZpc2lvbikgPSBpZGVudGlmaWVyLnNwbGl0ICgiLSIpCisgICAgICAgIHByaW50KGRhdGUpCisKKyAgICAgICAgeWVhciA9IGludCAoZGF0ZVswOjRdKQorICAgICAgICBtb250aCA9IGludCAoZGF0ZVs0OjZdKQorICAgICAgICBkYXkgPSBpbnQgKGRhdGVbNjo4XSkKKworICAgICAgICBzZWxmLmRhdGUgPSBkYXRldGltZS5kYXRlICh5ZWFyLCBtb250aCwgZGF5KQorCisgICAgICAgIHNlbGYuY29uZiA9IE5vbmUKKworICAgICAgICAjIEJ5IGRlZmF1bHQgYnVpbGRzIGFyZSBTVEFURV9GQUlMRUQgdW5sZXNzIHdlIGZpbmQgYSAiY29tcGxldGUiIGZpbGUKKyAgICAgICAgIyBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIFNUQVRFX0NPTVBMRVRFCisgICAgICAgIHNlbGYuc3RhdGUgPSBCdWlsZFJlc3VsdC5TVEFURV9GQUlMRUQKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpciAoc2VsZi5wYXRoKToKKyAgICAgICAgICAgIGlmIChmaWxlLnN0YXJ0c3dpdGggKCIuY29uZiIpKToKKyAgICAgICAgICAgICAgICBjb25mZmlsZSA9IG9zLnBhdGguam9pbiAoc2VsZi5wYXRoLCBmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuY29uZiA9IEJ1aWxkQ29uZmlndXJhdGlvbi5sb2FkX2Zyb21fZmlsZSAoY29uZmZpbGUpCisgICAgICAgICAgICBlbGlmIChmaWxlLnN0YXJ0c3dpdGggKCJjb21wbGV0ZSIpKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gQnVpbGRSZXN1bHQuU1RBVEVfQ09NUExFVEUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hZGRfZmlsZSAoZmlsZSkKKworICAgIGRlZiBhZGRfZmlsZSAoc2VsZiwgZmlsZSk6CisgICAgICAgICMgSnVzdCBhZGQgdGhlIGZpbGUgZm9yIG5vdy4gRG9uJ3QgY2FyZSBhYm91dCB0aGUgdHlwZS4KKyAgICAgICAgc2VsZi5maWxlcyArPSBbKGZpbGUsIE5vbmUpXQorCitjbGFzcyBCdWlsZE1hbmFnZXJNb2RlbCAoZ3RrLlRyZWVTdG9yZSk6CisgICAgIiIiIE1vZGVsIGZvciB0aGUgQnVpbGRNYW5hZ2VyVHJlZVZpZXcuIFRoaXMgZGVyaXZlcyBmcm9tIGd0ay5UcmVlU3RvcmUKKyAgICBidXQgaXQgYWJzdHJhY3RzIG5pY2VseSB3aGF0IHRoZSBjb2x1bW5zIG1lYW4gYW5kIHRoZSBzZXR1cCBvZiB0aGUgY29sdW1ucworICAgIGluIHRoZSBtb2RlbC4gIiIiCisKKyAgICAoQ09MX0lERU5ULCBDT0xfREVTQywgQ09MX01BQ0hJTkUsIENPTF9ESVNUUk8sIENPTF9CVUlMRF9SRVNVTFQsIENPTF9EQVRFLCBDT0xfU1RBVEUpID0gXAorICAgICAgICAoMCwgMSwgMiwgMywgNCwgNSwgNikKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5UcmVlU3RvcmUuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgZ29iamVjdC5UWVBFX09CSkVDVCwKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9JTlQ2NCwKKyAgICAgICAgICAgIGdvYmplY3QuVFlQRV9JTlQpCisKK2NsYXNzIEJ1aWxkTWFuYWdlciAoZ29iamVjdC5HT2JqZWN0KToKKyAgICAiIiIgVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSBoaXN0b3JpYyBidWlsZHMgdGhhdCBoYXZlIGJlZW4gZm91bmQgaW4gdGhlCisgICAgInJlc3VsdHMiIGRpcmVjdG9yeSBidXQgaXMgYWxzbyB1c2VkIGZvciBzdGFydGluZyBhIG5ldyBidWlsZC4iIiIKKworICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgJ3BvcHVsYXRpb24tZmluaXNoZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICdwb3B1bGF0ZS1lcnJvcicgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpCisgICAgfQorCisgICAgZGVmIHVwZGF0ZV9idWlsZF9yZXN1bHQgKHNlbGYsIHJlc3VsdCwgaXRlcik6CisgICAgICAgICMgQ29udmVydCB0aGUgZGF0ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gc29ydCBieS4KKyAgICAgICAgZGF0ZSA9IGxvbmcgKHRpbWUubWt0aW1lIChyZXN1bHQuZGF0ZS50aW1ldHVwbGUoKSkpCisKKyAgICAgICAgIyBBZGQgYSB0b3AgbGV2ZWwgZW50cnkgZm9yIHRoZSBidWlsZAorCisgICAgICAgIHNlbGYubW9kZWwuc2V0IChpdGVyLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0lERU5ULCByZXN1bHQuaWRlbnRpZmllciwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ERVNDLCByZXN1bHQuY29uZi5pbWFnZSwKKyAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9NQUNISU5FLCByZXN1bHQuY29uZi5tYWNoaW5lLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RJU1RSTywgcmVzdWx0LmNvbmYuZGlzdHJvLAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0JVSUxEX1JFU1VMVCwgcmVzdWx0LAorICAgICAgICAgICAgQnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RBVEUsIGRhdGUsCisgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUsIHJlc3VsdC5zdGF0ZSkKKworICAgICAgICAjIEFuZCB0aGVuIHdlIHVzZSB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcyB0aGUgY2hpbGRyZW4gZm9yIHRoZQorICAgICAgICAjIHRvcCBsZXZlbCBpdGVyLgorICAgICAgICBmb3IgZmlsZSBpbiByZXN1bHQuZmlsZXM6CisgICAgICAgICAgICBzZWxmLm1vZGVsLmFwcGVuZCAoaXRlciwgKE5vbmUsIGZpbGVbMF0sIE5vbmUsIE5vbmUsIE5vbmUsIGRhdGUsIC0xKSkKKworICAgICMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYW4gaWRsZSBieSB0aGUgQnVpbGRNYW5hZ2VyUG9wdWxhdGVyVGhyZWFkCisgICAgZGVmIGFkZF9idWlsZF9yZXN1bHQgKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgIHNlbGYua25vd25fYnVpbGRzICs9IFtyZXN1bHRdCisKKyAgICAgICAgc2VsZi51cGRhdGVfYnVpbGRfcmVzdWx0IChyZXN1bHQsIHNlbGYubW9kZWwuYXBwZW5kIChOb25lKSkKKworICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgZGVmIG5vdGlmeV9idWlsZF9maW5pc2hlZCAoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIElmIHdlIGhhdmUgYSBydW5uaW5nIGJ1aWxkIHJ1bm5pbmcgdGhlbiB3ZQorICAgICAgICAjIHdpbGwgaGF2ZSBhIHJvdyBpbiB0aGUgbW9kZWwgaW4gU1RBVEVfT05HT0lORy4gRmluZCBpdCBhbmQgbWFrZSBpdAorICAgICAgICAjIGFzIGlmIGl0IHdhcyBhIHByb3BlciBoaXN0b3JpYyBidWlsZCAod2VsbCwgaXQgaXMgY29tcGxldGVkIG5vdy4uLi4pCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHVzZSB0aGUgaXRlcnMgaGVyZSByYXRoZXIgdGhhbiB0aGUgUHl0aG9uIGl0ZXJhdG9yCisgICAgICAgICMgaW50ZXJmYWNlIHRvIHRoZSBtb2RlbCBzaW5jZSB3ZSBuZWVkIHRvIHBhc3MgaXQgaW50bworICAgICAgICAjIHVwZGF0ZV9idWlsZF9yZXN1bHQKKworICAgICAgICBpdGVyID0gc2VsZi5tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisKKyAgICAgICAgd2hpbGUgKGl0ZXIpOgorICAgICAgICAgICAgKGlkZW50LCBzdGF0ZSkgPSBzZWxmLm1vZGVsLmdldChpdGVyLAorICAgICAgICAgICAgICAgIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9JREVOVCwKKyAgICAgICAgICAgICAgICBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfU1RBVEUpCisKKyAgICAgICAgICAgIGlmIHN0YXRlID09IEJ1aWxkUmVzdWx0LlNUQVRFX09OR09JTkc6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gQnVpbGRSZXN1bHQgKHNlbGYucmVzdWx0c19kaXJlY3RvcnksIGlkZW50KQorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2J1aWxkX3Jlc3VsdCAocmVzdWx0LCBpdGVyKQorICAgICAgICAgICAgaXRlciA9IHNlbGYubW9kZWwuaXRlcl9uZXh0KGl0ZXIpCisKKyAgICBkZWYgbm90aWZ5X2J1aWxkX3N1Y2NlZWRlZCAoc2VsZik6CisgICAgICAgICMgV3JpdGUgdGhlICJjb21wbGV0ZSIgZmlsZSBzbyB0aGF0IHdoZW4gd2UgY3JlYXRlIHRoZSBCdWlsZFJlc3VsdAorICAgICAgICAjIG9iamVjdCB3ZSBwdXQgaW50byB0aGUgbW9kZWwKKworICAgICAgICBjb21wbGV0ZV9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4gKHNlbGYuY3VyX2J1aWxkX2RpcmVjdG9yeSwgImNvbXBsZXRlIikKKyAgICAgICAgZiA9IGZpbGUgKGNvbXBsZXRlX2ZpbGVfcGF0aCwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5ub3RpZnlfYnVpbGRfZmluaXNoZWQoKQorCisgICAgZGVmIG5vdGlmeV9idWlsZF9mYWlsZWQgKHNlbGYpOgorICAgICAgICAjIFdpdGhvdXQgYSAiY29tcGxldGUiIGZpbGUgdGhlbiB0aGlzIHdpbGwgbWFyayB0aGUgYnVpbGQgYXMgZmFpbGVkOgorICAgICAgICBzZWxmLm5vdGlmeV9idWlsZF9maW5pc2hlZCgpCisKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGFuIGlkbGUKKyAgICBkZWYgZW1pdF9wb3B1bGF0aW9uX2ZpbmlzaGVkX3NpZ25hbCAoc2VsZik6CisgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgIHNlbGYuZW1pdCAoInBvcHVsYXRpb24tZmluaXNoZWQiKQorICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgY2xhc3MgQnVpbGRNYW5hZ2VyUG9wdWxhdGVyVGhyZWFkICh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBtYW5hZ2VyLCBkaXJlY3RvcnkpOgorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgICAgIHNlbGYubWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisKKyAgICAgICAgZGVmIHJ1biAoc2VsZik6CisgICAgICAgICAgICAjIEZvciBlYWNoIG9mIHRoZSAiYnVpbGQtPC4uLj4iIGRpcmVjdG9yaWVzIC4uCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzIChzZWxmLmRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBvcy5saXN0ZGlyIChzZWxmLmRpcmVjdG9yeSk6CisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRpcmVjdG9yeS5zdGFydHN3aXRoICgiYnVpbGQtIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCA9IEJ1aWxkUmVzdWx0IChzZWxmLmRpcmVjdG9yeSwgZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIuYWRkX2J1aWxkX3Jlc3VsdCAoYnVpbGRfcmVzdWx0KQorCisgICAgICAgICAgICBnb2JqZWN0LmlkbGVfYWRkIChCdWlsZE1hbmFnZXIuZW1pdF9wb3B1bGF0aW9uX2ZpbmlzaGVkX3NpZ25hbCwKKyAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHNlcnZlciwgcmVzdWx0c19kaXJlY3RvcnkpOgorICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCisKKyAgICAgICAgIyBUaGUgYnVpbGRzIHRoYXQgd2UndmUgZm91bmQgZnJvbSB3YWxraW5nIHRoZSByZXN1bHQgZGlyZWN0b3J5CisgICAgICAgIHNlbGYua25vd25fYnVpbGRzID0gW10KKworICAgICAgICAjIFNhdmUgb3V0IHRoZSBiaXRiYWtlIHNlcnZlciwgd2UgbmVlZCB0aGlzIGZvciBpc3N1aW5nIGNvbW1hbmRzIHRvCisgICAgICAgICMgdGhlIGNvb2tlcjoKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKworICAgICAgICAjIFRoZSBUcmVlU3RvcmUgdGhhdCB3ZSB1c2UKKyAgICAgICAgc2VsZi5tb2RlbCA9IEJ1aWxkTWFuYWdlck1vZGVsICgpCisKKyAgICAgICAgIyBUaGUgcmVzdWx0cyBkaXJlY3RvcnkgaXMgd2hlcmUgd2UgY3JlYXRlIChhbmQgbG9vayBmb3IpIHRoZQorICAgICAgICAjIGJ1aWxkLTx4eXo+LTxuPiBkaXJlY3Rvcmllcy4gV2UgbmVlZCB0byBwb3B1bGF0ZSBvdXJzZWx2ZXMgZnJvbQorICAgICAgICAjIGRpcmVjdG9yeQorICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5wb3B1bGF0ZV9mcm9tX2RpcmVjdG9yeSAoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSkKKworICAgIGRlZiBwb3B1bGF0ZV9mcm9tX2RpcmVjdG9yeSAoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgdGhyZWFkID0gQnVpbGRNYW5hZ2VyLkJ1aWxkTWFuYWdlclBvcHVsYXRlclRocmVhZCAoc2VsZiwgZGlyZWN0b3J5KQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorCisgICAgIyBDb21lIHVwIHdpdGggdGhlIG5hbWUgZm9yIHRoZSBuZXh0IGJ1aWxkIGlkZW50IGJ5IGNvbWJpbmluZyAiYnVpbGQtIgorICAgICMgd2l0aCB0aGUgZGF0ZSBmb3JtYXR0ZWQgYXMgeXl5eW1tZGQgYW5kIHRoZW4gYW4gb3JkaW5hbC4gV2UgZG8gdGhpcyBieQorICAgICMgYW4gb3B0aW1pc3RpYyBhbGdvcml0aG0gaW5jcmVtZW50aW5nIHRoZSBvcmRpbmFsIGlmIHdlIGZpbmQgdGhhdCBpdAorICAgICMgYWxyZWFkeSBleGlzdHMuCisgICAgZGVmIGdldF9uZXh0X2J1aWxkX2lkZW50IChzZWxmKToKKyAgICAgICAgdG9kYXkgPSBkYXRldGltZS5kYXRlLnRvZGF5ICgpCisgICAgICAgIGRhdGVzdHIgPSBzdHIgKHRvZGF5LnllYXIpICsgc3RyICh0b2RheS5tb250aCkgKyBzdHIgKHRvZGF5LmRheSkKKworICAgICAgICByZXZpc2lvbiA9IDAKKyAgICAgICAgdGVzdF9uYW1lID0gImJ1aWxkLSVzLSVkIiAlIChkYXRlc3RyLCByZXZpc2lvbikKKyAgICAgICAgdGVzdF9wYXRoID0gb3MucGF0aC5qb2luIChzZWxmLnJlc3VsdHNfZGlyZWN0b3J5LCB0ZXN0X25hbWUpCisKKyAgICAgICAgd2hpbGUgKG9zLnBhdGguZXhpc3RzICh0ZXN0X3BhdGgpKToKKyAgICAgICAgICAgIHJldmlzaW9uICs9IDEKKyAgICAgICAgICAgIHRlc3RfbmFtZSA9ICJidWlsZC0lcy0lZCIgJSAoZGF0ZXN0ciwgcmV2aXNpb24pCisgICAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4gKHNlbGYucmVzdWx0c19kaXJlY3RvcnksIHRlc3RfbmFtZSkKKworICAgICAgICByZXR1cm4gdGVzdF9uYW1lCisKKyAgICAjIFRha2UgYSBCdWlsZENvbmZpZ3VyYXRpb24gYW5kIHRoZW4gdHJ5IGFuZCBidWlsZCBpdCBiYXNlZCBvbiB0aGUKKyAgICAjIHBhcmFtZXRlcnMgb2YgdGhhdCBjb25maWd1cmF0aW9uLiBTCisgICAgZGVmIGRvX2J1aWxkIChzZWxmLCBjb25mKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5zZXJ2ZXIKKworICAgICAgICAjIFdvcmsgb3V0IHRoZSBidWlsZCBkaXJlY3RvcnkuIE5vdGUgd2UgYWN0dWFsbHkgY3JlYXRlIHRoZQorICAgICAgICAjIGRpcmVjdG9yaWVzIGhlcmUgc2luY2Ugd2UgbmVlZCB0byB3cml0ZSB0aGUgIi5jb25mIiBmaWxlLiBPdGhlcndpc2UKKyAgICAgICAgIyB3ZSBjb3VsZCBoYXZlIHJlbGllZCBvbiBiaXRiYWtlJ3MgYnVpbGRlciB0aHJlYWQgdG8gYWN0dWFsbHkgbWFrZQorICAgICAgICAjIHRoZSBkaXJlY3RvcmllcyBhcyBpdCBwcm9jZWVkcyB3aXRoIHRoZSBidWlsZC4KKyAgICAgICAgaWRlbnQgPSBzZWxmLmdldF9uZXh0X2J1aWxkX2lkZW50ICgpCisgICAgICAgIGJ1aWxkX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbiAoc2VsZi5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgIGlkZW50KQorICAgICAgICBzZWxmLmN1cl9idWlsZF9kaXJlY3RvcnkgPSBidWlsZF9kaXJlY3RvcnkKKyAgICAgICAgb3MubWFrZWRpcnMgKGJ1aWxkX2RpcmVjdG9yeSkKKworICAgICAgICBjb25mZmlsZSA9IG9zLnBhdGguam9pbiAoYnVpbGRfZGlyZWN0b3J5LCAiLmNvbmYiKQorICAgICAgICBjb25mLndyaXRlX3RvX2ZpbGUgKGNvbmZmaWxlKQorCisgICAgICAgICMgQWRkIGEgcm93IHRvIHRoZSBtb2RlbCByZXByZXNlbnRpbmcgdGhpcyBvbmdvaW5nIGJ1aWxkLiBJdCdzIGtpbmRhIGEKKyAgICAgICAgIyBmYWtlIGVudHJ5LiBJZiB0aGlzIGJ1aWxkIGNvbXBsZXRlcyBvciBmYWlscyB0aGVuIHRoaXMgZ2V0cyB1cGRhdGVkCisgICAgICAgICMgd2l0aCB0aGUgcmVhbCBzdHVmZiBsaWtlIHRoZSBoaXN0b3JpYyBidWlsZHMKKyAgICAgICAgZGF0ZSA9IGxvbmcgKHRpbWUudGltZSgpKQorICAgICAgICBzZWxmLm1vZGVsLmFwcGVuZCAoTm9uZSwgKGlkZW50LCBjb25mLmltYWdlLCBjb25mLm1hY2hpbmUsIGNvbmYuZGlzdHJvLAorICAgICAgICAgICAgTm9uZSwgZGF0ZSwgQnVpbGRSZXN1bHQuU1RBVEVfT05HT0lORykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiQlVJTERfSU1BR0VTX0ZST01fRkVFRFMiLCAxXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiTUFDSElORSIsIGNvbmYubWFjaGluZV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkRJU1RSTyIsIGNvbmYuZGlzdHJvXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiUEFDS0FHRV9DTEFTU0VTIiwgInBhY2thZ2VfaXBrIl0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkJCRklMRVMiLCBcCisgICAgICAgICAgICAgICIiIiR7T0VST09UfS9tZXRhL3BhY2thZ2VzLyovKi5iYiAke09FUk9PVH0vbWV0YS1tb2JsaW4vcGFja2FnZXMvKi8qLmJiIiIiXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiVE1QRElSIiwgIiR7T0VST09UfS9idWlsZC90bXAiXSkKKyAgICAgICAgICAgIHNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyaWFibGUiLCAiSVBLX0ZFRURfVVJJUyIsIFwKKyAgICAgICAgICAgICAgICAiICIuam9pbihjb25mLmdldF9yZXBvcygpKV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgIkRFUExPWV9ESVJfSU1BR0UiLAorICAgICAgICAgICAgICAgIGJ1aWxkX2RpcmVjdG9yeV0pCisgICAgICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbImJ1aWxkVGFyZ2V0cyIsIFtjb25mLmltYWdlXSwgInJvb3RmcyJdKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHByaW50KGUpCisKK2NsYXNzIEJ1aWxkTWFuYWdlclRyZWVWaWV3IChndGsuVHJlZVZpZXcpOgorICAgICIiIiBUaGUgdHJlZSB2aWV3IGZvciB0aGUgYnVpbGQgbWFuYWdlci4gVGhpcyBzaG93cyB0aGUgaGlzdG9yaWMgYnVpbGRzCisgICAgYW5kIHNvIGZvcnRoLiAiIiIKKworICAgICMgV2UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gY29udHJvbCB3aGF0IGdvZXMgaW4gdGhlIGNlbGwgc2luY2Ugd2Ugc3RvcmUKKyAgICAjIHRoZSBkYXRlIGluIHRoZSBtb2RlbCBhcyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoZm9yIHNvcnRpbmcpIGFuZCBzbyB3ZQorICAgICMgbmVlZCB0byBtYWtlIGl0IGh1bWFuIHJlYWRhYmxlLgorICAgIGRlZiBkYXRlX2Zvcm1hdF9jdXN0b21fY2VsbF9kYXRhX2Z1bmMgKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBkYXRlID0gbW9kZWwuZ2V0IChpdGVyLCBCdWlsZE1hbmFnZXJNb2RlbC5DT0xfREFURSlbMF0KKyAgICAgICAgZGF0ZXN0ciA9IHRpbWUuc3RyZnRpbWUoIiVBICVkICVCICVZIiwgdGltZS5sb2NhbHRpbWUoZGF0ZSkpCisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgidGV4dCIsIGRhdGVzdHIpCisKKyAgICAjIFRoaXMgZm9ybWF0IGZ1bmN0aW9uIGNvbnRyb2xzIHdoYXQgZ29lcyBpbiB0aGUgY2VsbC4gV2UgdXNlIHRoaXMgdG8gbWFwCisgICAgIyB0aGUgaW50ZWdlciBzdGF0ZSB0byBhIHN0cmluZyBhbmQgYWxzbyB0byBjb2xvdXJpc2UgdGhlIHRleHQKKyAgICBkZWYgc3RhdGVfZm9ybWF0X2N1c3RvbV9jZWxsX2RhdGFfZnVuIChzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgc3RhdGUgPSBtb2RlbC5nZXQgKGl0ZXIsIEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9TVEFURSlbMF0KKworICAgICAgICBpZiAoc3RhdGUgPT0gQnVpbGRSZXN1bHQuU1RBVEVfT05HT0lORyk6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCAiQWN0aXZlIikKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgiZm9yZWdyb3VuZCIsICIjMDAwMDAwIikKKyAgICAgICAgZWxpZiAoc3RhdGUgPT0gQnVpbGRSZXN1bHQuU1RBVEVfRkFJTEVEKToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5ICgidGV4dCIsICJGYWlsZWQiKQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJmb3JlZ3JvdW5kIiwgIiNmZjAwMDAiKQorICAgICAgICBlbGlmIChzdGF0ZSA9PSBCdWlsZFJlc3VsdC5TVEFURV9DT01QTEVURSk6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSAoInRleHQiLCAiQ29tcGxldGUiKQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJmb3JlZ3JvdW5kIiwgIiMwMGZmMDAiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkgKCJ0ZXh0IiwgIiIpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKworICAgICAgICAjIE1pc2MgZGVzY3JpcHRpb255IHRoaW5nCisgICAgICAgIHJlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uIChOb25lLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQ9QnVpbGRNYW5hZ2VyTW9kZWwuQ09MX0RFU0MpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgTWFjaGluZQorICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk1hY2hpbmUiLCByZW5kZXJlciwKKyAgICAgICAgICAgIHRleHQ9QnVpbGRNYW5hZ2VyTW9kZWwuQ09MX01BQ0hJTkUpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgZGlzdHJvCisgICAgICAgIHJlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiRGlzdHJpYnV0aW9uIiwgcmVuZGVyZXIsCisgICAgICAgICAgICB0ZXh0PUJ1aWxkTWFuYWdlck1vZGVsLkNPTF9ESVNUUk8pCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoY29sKQorCisgICAgICAgICMgZGF0ZSAodXNpbmcgYSBjdXN0b20gZnVuY3Rpb24gZm9yIGZvcm1hdHRpbmcgdGhlIGNlbGwgY29udGVudHMgaXQKKyAgICAgICAgIyB0YWtlcyBlcG9jaCAtPiBodW1hbiByZWFkYWJsZSBzdHJpbmcpCisgICAgICAgIHJlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uICgiRGF0ZSIsIHJlbmRlcmVyLAorICAgICAgICAgICAgdGV4dD1CdWlsZE1hbmFnZXJNb2RlbC5DT0xfREFURSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMgKHJlbmRlcmVyLAorICAgICAgICAgICAgc2VsZi5kYXRlX2Zvcm1hdF9jdXN0b21fY2VsbF9kYXRhX2Z1bmMpCisKKyAgICAgICAgIyBGb3Igc3RhdHVzLgorICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0ICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIlN0YXR1cyIsIHJlbmRlcmVyLAorICAgICAgICAgICAgdGV4dCA9IEJ1aWxkTWFuYWdlck1vZGVsLkNPTF9TVEFURSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMgKHJlbmRlcmVyLAorICAgICAgICAgICAgc2VsZi5zdGF0ZV9mb3JtYXRfY3VzdG9tX2NlbGxfZGF0YV9mdW4pCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9hZHZhbmNlZHNldHRpbmdzZGlhbG9nLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9hZHZhbmNlZHNldHRpbmdzZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjM1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2FkdmFuY2Vkc2V0dGluZ3NkaWFsb2cucHkKQEAgLTAsMCArMSwzNDEgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBoYXNobGliCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkluZm9CdXR0b24sIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2V0dGluZ3N1aWhlbHBlciBpbXBvcnQgU2V0dGluZ3NVSUhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLnByb3h5ZGV0YWlsc2RpYWxvZyBpbXBvcnQgUHJveHlEZXRhaWxzRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBBZHZhbmNlZFNldHRpbmdzRGlhbG9nIChDcnVtYnNEaWFsb2csIFNldHRpbmdzVUlIZWxwZXIpOgorICAgIAorICAgIGRlZiBkZXRhaWxzX2NiKHNlbGYsIGJ1dHRvbiwgcGFyZW50LCBwcm90b2NvbCk6CisgICAgICAgIGRpYWxvZyA9IFByb3h5RGV0YWlsc0RpYWxvZyh0aXRsZSA9IHByb3RvY29sLnVwcGVyKCkgKyAiIFByb3h5IERldGFpbHMiLAorICAgICAgICAgICAgdXNlciA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSwKKyAgICAgICAgICAgIHBhc3N3ZCA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSwKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudCwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBkaWFsb2cuYWRkX2J1dHRvbihndGsuU1RPQ0tfQ0xPU0UsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnByb3hpZXNbcHJvdG9jb2xdWzFdID0gZGlhbG9nLnVzZXIKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSA9IGRpYWxvZy5wYXNzd2QKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIHNldF9zYXZlX2J1dHRvbihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gYnV0dG9uCisKKyAgICBkZWYgcm9vdGZzX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgcm9vdGZzX2NvbWJvLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpOgorICAgICAgICBjb21ib19pdGVtID0gc2VsZi5yb290ZnNfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgbW9kaWZpZWQgPSBGYWxzZQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hlY2tfaGJveC5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGd0ay5DaGVja0J1dHRvbik6CisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5yZW1vdmUoY2hpbGQpCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBUcnVlCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IGNvbWJvX2l0ZW06CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoY2hlY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBUcnVlCisgICAgICAgIGlmIG1vZGlmaWVkOgorICAgICAgICAgICAgY2hlY2tfaGJveC5yZW1vdmUoc2VsZi5wa2dmbXRfaW5mbykKKyAgICAgICAgICAgIGNoZWNrX2hib3gucGFja19zdGFydChzZWxmLnBrZ2ZtdF9pbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGNoZWNrX2hib3guc2hvd19hbGwoKQorCisgICAgZGVmIGdlbl9wa2dmbXRfd2lkZ2V0KHNlbGYsIGN1cnJfcGFja2FnZV9mb3JtYXQsIGFsbF9wYWNrYWdlX2Zvcm1hdCwgdG9vbHRpcF9jb21ibz0iIiwgdG9vbHRpcF9leHRyYT0iIik6CisgICAgICAgIHBrZ2ZtdF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIlJvb3QgZmlsZSBzeXN0ZW0gcGFja2FnZSBmb3JtYXQiKQorICAgICAgICBwa2dmbXRfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdCA9ICIiCisgICAgICAgIGlmIGN1cnJfcGFja2FnZV9mb3JtYXQ6CisgICAgICAgICAgICByb290ZnNfZm9ybWF0ID0gY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpWzBdCisKKyAgICAgICAgcm9vdGZzX2Zvcm1hdF93aWRnZXQsIHJvb3Rmc19jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChyb290ZnNfZm9ybWF0LCBhbGxfcGFja2FnZV9mb3JtYXQsIHRvb2x0aXBfY29tYm8pCisgICAgICAgIHBrZ2ZtdF92Ym94LnBhY2tfc3RhcnQocm9vdGZzX2Zvcm1hdF93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiQWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHMiKQorICAgICAgICBwa2dmbXRfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgY2hlY2tfaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgcGtnZm10X3Zib3gucGFja19zdGFydChjaGVja19oYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IHJvb3Rmc19mb3JtYXQ6CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBpc19hY3RpdmUgPSAoZm9ybWF0IGluIGN1cnJfcGFja2FnZV9mb3JtYXQuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICBjaGVja19idXR0b24uc2V0X2FjdGl2ZShpc19hY3RpdmUpCisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5wYWNrX3N0YXJ0KGNoZWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYucGtnZm10X2luZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXBfZXh0cmEsIHNlbGYpCisgICAgICAgIGNoZWNrX2hib3gucGFja19zdGFydChzZWxmLnBrZ2ZtdF9pbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnJvb3Rmc19jb21ib19jaGFuZ2VkX2NiLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpCisKKyAgICAgICAgcGtnZm10X3Zib3guc2hvd19hbGwoKQorCisgICAgICAgIHJldHVybiBwa2dmbXRfdmJveCwgcm9vdGZzX2NvbWJvLCBjaGVja19oYm94CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIGNvbmZpZ3VyYXRpb24sIGFsbF9pbWFnZV90eXBlcywKKyAgICAgICAgICAgIGFsbF9wYWNrYWdlX2Zvcm1hdHMsIGFsbF9kaXN0cm9zLCBhbGxfc2RrX21hY2hpbmVzLAorICAgICAgICAgICAgbWF4X3RocmVhZHMsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKEFkdmFuY2VkU2V0dGluZ3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmcm9tIG90aGVyIG9iamVjdHMKKyAgICAgICAgIyBiaXRiYWtlIHNldHRpbmdzIGZyb20gQnVpbGRlci5Db25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IGFsbF9pbWFnZV90eXBlcworICAgICAgICBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBhbGxfcGFja2FnZV9mb3JtYXRzCisgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3MgPSBhbGxfZGlzdHJvc1s6XQorICAgICAgICBzZWxmLmFsbF9zZGtfbWFjaGluZXMgPSBhbGxfc2RrX21hY2hpbmVzCisgICAgICAgIHNlbGYubWF4X3RocmVhZHMgPSBtYXhfdGhyZWFkcworCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmb3IgaW50ZXJuYWwgdXNlCisgICAgICAgIHNlbGYuZGlzdHJvX2NvbWJvID0gTm9uZQorICAgICAgICBzZWxmLmRsZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlZGlyX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yX3RleHQgPSBOb25lCisgICAgICAgIHNlbGYuYmJfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5wbWFrZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLnJvb3Rmc19zaXplX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZXh0cmFfc2l6ZV9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94ID0gTm9uZQorICAgICAgICBzZWxmLnNka19jaGVja2JveCA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnMgPSB7fQorCisgICAgICAgIHNlbGYubWQ1ID0gc2VsZi5jb25maWdfbWQ1KCkKKyAgICAgICAgc2VsZi5zZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gTm9uZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgIGRlZiBfZ2V0X3NvcnRlZF92YWx1ZShzZWxmLCB2YXIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oc29ydGVkKHN0cih2YXIpLnNwbGl0KCkpKSArICJcbiIKKworICAgIGRlZiBjb25maWdfbWQ1KHNlbGYpOgorICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgZGF0YSArPSAoIlBBQ0tBR0VfQ0xBU1NFUzogIiAgICAgICsgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQgKyAnXG4nKQorICAgICAgICBkYXRhICs9ICgiRElTVFJPOiAiICAgICAgICAgICAgICAgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3RybykpCisgICAgICAgIGRhdGEgKz0gKCJJTUFHRV9ST09URlNfU0laRTogIiAgICArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplKSkKKyAgICAgICAgZGF0YSArPSAoIklNQUdFX0VYVFJBX1NJWkU6ICIgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZXh0cmFfc2l6ZSkpCisgICAgICAgIGRhdGEgKz0gKCJJTkNPTVBBVElCTEVfTElDRU5TRTogIiArIHNlbGYuX2dldF9zb3J0ZWRfdmFsdWUoc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2UpKQorICAgICAgICBkYXRhICs9ICgiU0RLX01BQ0hJTkU6ICIgICAgICAgICAgKyBzZWxmLl9nZXRfc29ydGVkX3ZhbHVlKHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX3Nka19tYWNoaW5lKSkKKyAgICAgICAgZGF0YSArPSAoIlRPT0xDSEFJTl9CVUlMRDogIiAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24udG9vbGNoYWluX2J1aWxkKSkKKyAgICAgICAgZGF0YSArPSAoIklNQUdFX0ZTVFlQRVM6ICIgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcykpCisgICAgICAgIHJldHVybiBoYXNobGliLm1kNShkYXRhKS5oZXhkaWdlc3QoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYubmIgPSBndGsuTm90ZWJvb2soKQorICAgICAgICBzZWxmLm5iLnNldF9zaG93X3RhYnMoVHJ1ZSkKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9pbWFnZV90eXBlc19wYWdlKCksIGd0ay5MYWJlbCgiSW1hZ2UgdHlwZXMiKSkKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9vdXRwdXRfcGFnZSgpLCBndGsuTGFiZWwoIk91dHB1dCIpKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UoMCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5uYiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKGd0ay5IU2VwYXJhdG9yKCksIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgZ2V0X251bV9jaGVja2VkX2ltYWdlX3R5cGVzKHNlbGYpOgorICAgICAgICB0b3RhbCA9IDAKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBiLmdldF9hY3RpdmUoKToKKyAgICAgICAgICAgICAgdG90YWwgPSB0b3RhbCArIDEKKyAgICAgICAgcmV0dXJuIHRvdGFsCisKKyAgICBkZWYgc2V0X3NhdmVfYnV0dG9uX3N0YXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNhdmVfYnV0dG9uOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKHNlbGYuZ2V0X251bV9jaGVja2VkX2ltYWdlX3R5cGVzKCkgPiAwKQorCisgICAgZGVmIGltYWdlX3R5cGVfY2hlY2tidXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnNldF9zYXZlX2J1dHRvbl9zdGF0ZSgpCisgICAgICAgIGlmIHNlbGYuZ2V0X251bV9jaGVja2VkX2ltYWdlX3R5cGVzKCkgPT0gMDoKKyAgICAgICAgICAgICMgU2hvdyBhbiBlcnJvciBkaWFsb2cKKyAgICAgICAgICAgIGxibCA9ICI8Yj5TZWxlY3QgYW4gaW1hZ2UgdHlwZTwvYj4iCisgICAgICAgICAgICBtc2cgPSAiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBpbWFnZSB0eXBlLiIKKyAgICAgICAgICAgIGRpYWxvZyA9IENydW1ic01lc3NhZ2VEaWFsb2coc2VsZiwgbGJsLCBndGsuTUVTU0FHRV9XQVJOSU5HLCBtc2cpCisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiT0siLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgY3JlYXRlX2ltYWdlX3R5cGVzX3BhZ2Uoc2VsZik6CisgICAgICAgIG1haW5fdmJveCA9IGd0ay5WQm94KEZhbHNlLCAxNikKKyAgICAgICAgbWFpbl92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCg2KQorCisgICAgICAgIGRpc3Ryb192Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpICAgICAgICAKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkRpc3RybzoiKQorICAgICAgICB0b29sdGlwID0gIlNlbGVjdHMgdGhlIFlvY3RvIFByb2plY3QgZGlzdHJpYnV0aW9uIHlvdSB3YW50IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpID0gc2VsZi5hbGxfZGlzdHJvcy5pbmRleCggImRlZmF1bHRzZXR1cCIgKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGkgPSAtMQorICAgICAgICBpZiBpICE9IC0xOgorICAgICAgICAgICAgc2VsZi5hbGxfZGlzdHJvc1sgaSBdID0gIkRlZmF1bHQiCisgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8gPT0gImRlZmF1bHRzZXR1cCI6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfZGlzdHJvID0gIkRlZmF1bHQiCisgICAgICAgIGRpc3Ryb193aWRnZXQsIHNlbGYuZGlzdHJvX2NvbWJvID0gc2VsZi5nZW5fY29tYm9fd2lkZ2V0KHNlbGYuY29uZmlndXJhdGlvbi5jdXJyX2Rpc3Rybywgc2VsZi5hbGxfZGlzdHJvcywiPGI+RGlzdHJvPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBkaXN0cm9fdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGRpc3Ryb192Ym94LnBhY2tfc3RhcnQoZGlzdHJvX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBtYWluX3Zib3gucGFja19zdGFydChkaXN0cm9fdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisKKyAgICAgICAgcm93cyA9IChsZW4oc2VsZi5pbWFnZV90eXBlcykrMSkvMworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZShyb3dzICsgMSwgMTAsIFRydWUpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHRvb2x0aXAgPSAiSW1hZ2UgZmlsZSBzeXN0ZW0gdHlwZXMgeW91IHdhbnQuIgorICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbigiPGI+SW1hZ2UgdHlwZXM8L2I+IiArICIqIiArIHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJJbWFnZSB0eXBlczoiKQorICAgICAgICBhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMCwgMC41LCAwLCAwKQorICAgICAgICB0YWJsZS5hdHRhY2goYWxpZ24sIDAsIDQsIDAsIDEpCisgICAgICAgIGFsaWduLmFkZChsYWJlbCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGluZm8sIDQsIDUsIDAsIDEpCisKKyAgICAgICAgaSA9IDEKKyAgICAgICAgaiA9IDEKKyAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc29ydGVkKHNlbGYuaW1hZ2VfdHlwZXMpOgorICAgICAgICAgICAgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0gPSBndGsuQ2hlY2tCdXR0b24oaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLmltYWdlX3R5cGVfY2hlY2tidXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIGFydGljbGUgPSAiIgorICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZS5zdGFydHN3aXRoKCgiYSIsICJlIiwgImkiLCAibyIsICJ1IikpOgorICAgICAgICAgICAgICAgIGFydGljbGUgPSAibiIKKyAgICAgICAgICAgIGlmIGltYWdlX3R5cGUgPT0gImxpdmUiOgorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIGlzbyBhbmQgaGRkaW1nIGltYWdlcyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zW2ltYWdlX3R5cGVdLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIGElcyAlcyBpbWFnZSIgJSAoYXJ0aWNsZSwgaW1hZ2VfdHlwZSkpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0sIGogLSAxLCBqICsgMywgaSwgaSArIDEpCisgICAgICAgICAgICBpZiBpbWFnZV90eXBlIGluIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9mc3R5cGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0uc2V0X2FjdGl2ZShUcnVlKQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBpZiBpID4gcm93czoKKyAgICAgICAgICAgICAgICBpID0gMQorICAgICAgICAgICAgICAgIGogPSBqICsgNAorCisgICAgICAgIG1haW5fdmJveC5wYWNrX3N0YXJ0KGFkdmFuY2VkX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfc2F2ZV9idXR0b25fc3RhdGUoKQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1haW5fdmJveAorCisgICAgZGVmIGNyZWF0ZV9vdXRwdXRfcGFnZShzZWxmKToKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPlBhY2thZ2UgZm9ybWF0PC9zcGFuPicpLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICB0b29sdGlwX2NvbWJvID0gIlNlbGVjdHMgdGhlIHBhY2thZ2UgZm9ybWF0IHVzZWQgdG8gZ2VuZXJhdGUgcm9vdGZzLiIKKyAgICAgICAgdG9vbHRpcF9leHRyYSA9ICJTZWxlY3RzIGV4dHJhIHBhY2thZ2UgZm9ybWF0cyB0byBidWlsZCIKKyAgICAgICAgcGtnZm10X3dpZGdldCwgc2VsZi5yb290ZnNfY29tYm8sIHNlbGYuY2hlY2tfaGJveCA9IHNlbGYuZ2VuX3BrZ2ZtdF93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfcGFja2FnZV9mb3JtYXQsIHNlbGYuYWxsX3BhY2thZ2VfZm9ybWF0cywiPGI+Um9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdDwvYj4iICsgIioiICsgdG9vbHRpcF9jb21ibywiPGI+QWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHM8L2I+IiArICIqIiArIHRvb2x0aXBfZXh0cmEpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQocGtnZm10X3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzZWxmLmdlbl9sYWJlbF93aWRnZXQoJzxzcGFuIHdlaWdodD0iYm9sZCI+SW1hZ2Ugc2l6ZTwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkltYWdlIGJhc2ljIHNpemUgKGluIE1CKSIpCisgICAgICAgIHRvb2x0aXAgPSAiRGVmaW5lcyB0aGUgc2l6ZSBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgZmluYWwgc2l6ZSBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZSB1c2luZyBhbiBhbGdvcml0aG0gdGhhdCB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGluaXRpYWwgZGlzayBzcGFjZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLCB0aGUgSW1hZ2UgYmFzaWMgc2l6ZSB2YWx1ZSwgYW5kIHRoZSBBZGRpdGlvbmFsIGZyZWUgc3BhY2UgdmFsdWUuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUgPGEgaHJlZj1cImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsL3Bva3ktcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9ST09URlNfU0laRVwiPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvYT4uIgorICAgICAgICByb290ZnNfc2l6ZV93aWRnZXQsIHNlbGYucm9vdGZzX3NpemVfc3Bpbm5lciA9IHNlbGYuZ2VuX3NwaW5uZXJfd2lkZ2V0KGludChzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfcm9vdGZzX3NpemUqMS4wLzEwMjQpLCAwLCA2NTUzNiwiPGI+SW1hZ2UgYmFzaWMgc2l6ZTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHJvb3Rmc19zaXplX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiQWRkaXRpb25hbCBmcmVlIHNwYWNlIChpbiBNQikiKQorICAgICAgICB0b29sdGlwID0gIlNldHMgZXh0cmEgZnJlZSBkaXNrIHNwYWNlIHRvIGJlIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgaW1hZ2UuIFVzZSB0aGlzIHZhcmlhYmxlIHdoZW4geW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBzcGVjaWZpYyBhbW91bnQgb2YgZnJlZSBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSBvbiBhIGRldmljZSBhZnRlciBhbiBpbWFnZSBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuIgorICAgICAgICBleHRyYV9zaXplX3dpZGdldCwgc2VsZi5leHRyYV9zaXplX3NwaW5uZXIgPSBzZWxmLmdlbl9zcGlubmVyX3dpZGdldChpbnQoc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUqMS4wLzEwMjQpLCAwLCA2NTUzNiwiPGI+QWRkaXRpb25hbCBmcmVlIHNwYWNlPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoZXh0cmFfc2l6ZV93aWRnZXQsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPkxpY2Vuc2luZzwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLmdwbHYzX2NoZWNrYm94ID0gZ3RrLkNoZWNrQnV0dG9uKCJFeGNsdWRlIEdQTHYzIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveC5zZXRfdG9vbHRpcF90ZXh0KCJDaGVjayB0aGlzIGJveCB0byBwcmV2ZW50IEdQTHYzIHBhY2thZ2VzIGZyb20gYmVpbmcgaW5jbHVkZWQgaW4geW91ciBpbWFnZSIpCisgICAgICAgIGlmICJHUEx2MyIgaW4gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3guc2V0X2FjdGl2ZShUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ncGx2M19jaGVja2JveC5zZXRfYWN0aXZlKEZhbHNlKQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5ncGx2M19jaGVja2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzZWxmLmdlbl9sYWJlbF93aWRnZXQoJzxzcGFuIHdlaWdodD0iYm9sZCI+U0RLPC9zcGFuPicpLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl9oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfaGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnNka19jaGVja2JveCA9IGd0ay5DaGVja0J1dHRvbigiUG9wdWxhdGUgU0RLIikKKyAgICAgICAgdG9vbHRpcCA9ICJDaGVjayB0aGlzIGJveCB0byBnZW5lcmF0ZSBhbiBTREsgdGFyYmFsbCB0aGF0IGNvbnNpc3RzIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYW5kIGEgc3lzcm9vdCB0aGF0IGNvbnRhaW5zIGRldmVsb3BtZW50IHBhY2thZ2VzIGZvciB5b3VyIGltYWdlLiIKKyAgICAgICAgc2VsZi5zZGtfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCh0b29sdGlwKQorICAgICAgICBzZWxmLnNka19jaGVja2JveC5zZXRfYWN0aXZlKHNlbGYuY29uZmlndXJhdGlvbi50b29sY2hhaW5fYnVpbGQpCisgICAgICAgIHN1Yl9oYm94LnBhY2tfc3RhcnQoc2VsZi5zZGtfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICB0b29sdGlwID0gIlNlbGVjdCB0aGUgaG9zdCBwbGF0Zm9ybSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcnVuIHRoZSB0b29sY2hhaW4gY29udGFpbmVkIGluIHRoZSBTREsgdGFyYmFsbC4iCisgICAgICAgIHNka19tYWNoaW5lX3dpZGdldCwgc2VsZi5zZGtfbWFjaGluZV9jb21ibyA9IHNlbGYuZ2VuX2NvbWJvX3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9zZGtfbWFjaGluZSwgc2VsZi5hbGxfc2RrX21hY2hpbmVzLCI8Yj5Qb3B1bGF0ZSBTREs8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIHN1Yl9oYm94LnBhY2tfc3RhcnQoc2RrX21hY2hpbmVfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcmV0dXJuIGFkdmFuY2VkX3Zib3gKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgcGFja2FnZV9mb3JtYXQgPSBbXQorICAgICAgICBwYWNrYWdlX2Zvcm1hdC5hcHBlbmQoc2VsZi5yb290ZnNfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkpCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoZWNrX2hib3g6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBndGsuQ2hlY2tCdXR0b24pIGFuZCBjaGlsZC5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICAgICAgcGFja2FnZV9mb3JtYXQuYXBwZW5kKGNoaWxkLmdldF9sYWJlbCgpKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9wYWNrYWdlX2Zvcm1hdCA9ICIgIi5qb2luKHBhY2thZ2VfZm9ybWF0KQorCisgICAgICAgIGRpc3RybyA9IHNlbGYuZGlzdHJvX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIGlmIGRpc3RybyA9PSAiRGVmYXVsdCI6CisgICAgICAgICAgICBkaXN0cm8gPSAiZGVmYXVsdHNldHVwIgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uY3Vycl9kaXN0cm8gPSBkaXN0cm8KKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplID0gc2VsZi5yb290ZnNfc2l6ZV9zcGlubmVyLmdldF92YWx1ZV9hc19pbnQoKSAqIDEwMjQKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2V4dHJhX3NpemUgPSBzZWxmLmV4dHJhX3NpemVfc3Bpbm5lci5nZXRfdmFsdWVfYXNfaW50KCkgKiAxMDI0CisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlX2ZzdHlwZXMgPSAiIgorICAgICAgICBmb3IgaW1hZ2VfdHlwZSBpbiBzZWxmLmltYWdlX3R5cGVzOgorICAgICAgICAgICAgaWYgc2VsZi5pbWFnZV90eXBlc19jaGVja2J1dHRvbnNbaW1hZ2VfdHlwZV0uZ2V0X2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbWFnZV9mc3R5cGVzICs9ICgiICIgKyBpbWFnZV90eXBlKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZnN0eXBlcy5zdHJpcCgpCisKKyAgICAgICAgaWYgc2VsZi5ncGx2M19jaGVja2JveC5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICBpZiAiR1BMdjMiIG5vdCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlICs9ICIgR1BMdjMiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAiR1BMdjMiIGluIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2UgPSBzZWxmLmNvbmZpZ3VyYXRpb24uaW5jb21wYXRfbGljZW5zZS5zcGxpdCgpLnJlbW92ZSgiR1BMdjMiKQorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlID0gIiAiLmpvaW4oc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Ugb3IgW10pCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5pbmNvbXBhdF9saWNlbnNlID0gc2VsZi5jb25maWd1cmF0aW9uLmluY29tcGF0X2xpY2Vuc2Uuc3RyaXAoKQorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi50b29sY2hhaW5fYnVpbGQgPSBzZWxmLnNka19jaGVja2JveC5nZXRfYWN0aXZlKCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmN1cnJfc2RrX21hY2hpbmUgPSBzZWxmLnNka19tYWNoaW5lX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIG1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IChzZWxmLm1kNSAhPSBtZDUpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic2RpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzlmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2NydW1ic2RpYWxvZy5weQpAQCAtMCwwICsxLDQ0IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBDcnVtYnNEaWFsb2coZ3RrLkRpYWxvZyk6CisgICAgIiIiCisgICAgQSBHTk9NRSBISUcgY29tcGxpYW50IGRpYWxvZyB3aWRnZXQuCisgICAgQWRkIGJ1dHRvbnMgd2l0aCBndGsuRGlhbG9nLmFkZF9idXR0b24gb3IgZ3RrLkRpYWxvZy5hZGRfYnV0dG9ucworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZT0iIiwgcGFyZW50PU5vbmUsIGZsYWdzPTAsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKENydW1ic0RpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoImhhcy1zZXBhcmF0b3IiLCBGYWxzZSkgIyBub3RlOiBkZXByZWNhdGVkIGluIDIuMjIKKworICAgICAgICBzZWxmLnNldF9ib3JkZXJfd2lkdGgoNikKKyAgICAgICAgc2VsZi52Ym94LnNldF9wcm9wZXJ0eSgic3BhY2luZyIsIDEyKQorICAgICAgICBzZWxmLmFjdGlvbl9hcmVhLnNldF9wcm9wZXJ0eSgic3BhY2luZyIsIDEyKQorICAgICAgICBzZWxmLmFjdGlvbl9hcmVhLnNldF9wcm9wZXJ0eSgiYm9yZGVyLXdpZHRoIiwgNikKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvY3J1bWJzbWVzc2FnZWRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjk5OGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9jcnVtYnNtZXNzYWdlZGlhbG9nLnB5CkBAIC0wLDAgKzEsNzAgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnbGliCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IEhvYkljb25DaGVja2VyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIENydW1ic01lc3NhZ2VEaWFsb2coZ3RrLk1lc3NhZ2VEaWFsb2cpOgorICAgICIiIgorICAgIEEgR05PTUUgSElHIGNvbXBsaWFudCBkaWFsb2cgd2lkZ2V0LgorICAgIEFkZCBidXR0b25zIHdpdGggZ3RrLkRpYWxvZy5hZGRfYnV0dG9uIG9yIGd0ay5EaWFsb2cuYWRkX2J1dHRvbnMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50ID0gTm9uZSwgbGFiZWw9IiIsIGRpYWxvZ190eXBlID0gZ3RrLk1FU1NBR0VfUVVFU1RJT04sIG1zZz0iIik6CisgICAgICAgIHN1cGVyKENydW1ic01lc3NhZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuQlVUVE9OU19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKQorCisgICAgICAgIHNlbGYuc2V0X3NraXBfdGFza2Jhcl9oaW50KEZhbHNlKQorCisgICAgICAgIHNlbGYuc2V0X21hcmt1cChsYWJlbCkKKworICAgICAgICBpZiAwIDw9IGxlbihtc2cpIDwgMzAwOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfc2Vjb25kYXJ5X21hcmt1cChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2Ym94ID0gc2VsZi5nZXRfbWVzc2FnZV9hcmVhKCkKKyAgICAgICAgICAgIHZib3guc2V0X2JvcmRlcl93aWR0aCgxKQorICAgICAgICAgICAgdmJveC5zZXRfcHJvcGVydHkoInNwYWNpbmciLCAxMikKKyAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfd3JhcF9tb2RlKGd0ay5XUkFQX1dPUkQpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2N1cnNvcl92aXNpYmxlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9zaXplX3JlcXVlc3QoMzAwLCAzMDApCisgICAgICAgICAgICBzZWxmLmJ1ZiA9IGd0ay5UZXh0QnVmZmVyKCkKKyAgICAgICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KG1zZykKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfYnVmZmVyKHNlbGYuYnVmKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LmFkZChzZWxmLm1zZ1ZpZXcpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2hvdygpCisgICAgICAgICAgICB2Ym94LmFkZChzZWxmLnRleHRXaW5kb3cpCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2hvdygpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2RlcGxveWltYWdlZGlhbG9nLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9kZXBsb3lpbWFnZWRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTNmZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9kZXBsb3lpbWFnZWRpYWxvZy5weQpAQCAtMCwwICsxLDIxOSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGdsb2IKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNobGV4CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKK2ltcG9ydCBiYi51aS5jcnVtYnMudXRpbHMKK2ltcG9ydCBiYi5wcm9jZXNzCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBEZXBsb3lJbWFnZURpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIF9fZHVtbXlfdXNiX18gPSAiLS1zZWxlY3QgYSB1c2IgZHJpdmUtLSIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgaW1hZ2VfcGF0aCwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lLCBzdGFuZGFsb25lPUZhbHNlKToKKyAgICAgICAgc3VwZXIoRGVwbG95SW1hZ2VEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKKyAgICAgICAgc2VsZi5zdGFuZGFsb25lID0gc3RhbmRhbG9uZQorCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCg2MDAsIDQwMCkKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBtYXJrdXAgPSAiPHNwYW4gZm9udF9kZXNjPScxMic+VGhlIGltYWdlIHRvIGJlIHdyaXR0ZW4gaW50byB1c2IgZHJpdmU6PC9zcGFuPiIKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MikKKworICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgyLCAxMCwgRmFsc2UpCisgICAgICAgIHRhYmxlLnNldF9jb2xfc3BhY2luZ3MoNSkKKyAgICAgICAgdGFibGUuc2V0X3Jvd19zcGFjaW5ncyg1KQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICB0diA9IGd0ay5UZXh0VmlldygpCisgICAgICAgIHR2LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgdHYuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICB0di5zZXRfY3Vyc29yX3Zpc2libGUoRmFsc2UpCisgICAgICAgIHNlbGYuYnVmID0gZ3RrLlRleHRCdWZmZXIoKQorICAgICAgICBzZWxmLmJ1Zi5zZXRfdGV4dChzZWxmLmltYWdlX3BhdGgpCisgICAgICAgIHR2LnNldF9idWZmZXIoc2VsZi5idWYpCisgICAgICAgIHNjcm9sbC5hZGQodHYpCisgICAgICAgIHRhYmxlLmF0dGFjaChzY3JvbGwsIDAsIDEwLCAwLCAxKQorCisgICAgICAgICMgVGhlcmUgYXJlIDIgd2F5cyB0byB1c2UgRGVwbG95SW1hZ2VEaWFsb2cKKyAgICAgICAgIyBPbmUgd2F5IGlzIHRoYXQgY2FsbGVkIGJ5IEhPQiB3aGVuIHRoZSAnRGVwbG95IEltYWdlJyBidXR0b24gaXMgY2xpY2tlZAorICAgICAgICAjIFRoZSBvdGhlciB3YXkgaXMgdGhhdCBjYWxsZWQgYnkgYSBzdGFuZGFsb25lIHNjcmlwdC4KKyAgICAgICAgIyBGb2xsb3dpbmcgYmxvY2sgb2YgY29kZXMgaGFuZGxlcyB0aGUgbGF0dGVyIHdheS4gSXQgYWRkcyBhICdTZWxlY3QgSW1hZ2UnIGJ1dHRvbiBhbmQKKyAgICAgICAgIyBlbWl0IGEgc2lnbmFsIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLgorICAgICAgICBpZiBzZWxmLnN0YW5kYWxvbmU6CisgICAgICAgICAgICAgICAgZ29iamVjdC5zaWduYWxfbmV3KCJzZWxlY3RfaW1hZ2VfY2xpY2tlZCIsIHNlbGYsIGdvYmplY3QuU0lHTkFMX1JVTl9GSVJTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsICgpKQorICAgICAgICAgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICAgICAgICAgIHBpeF9idWZmZXIgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGhpYy5JQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUpCisgICAgICAgICAgICAgICAgaWNvbi5zZXRfZnJvbV9waXhidWYocGl4X2J1ZmZlcikKKyAgICAgICAgICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uKCJTZWxlY3QgSW1hZ2UiKQorICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRfaW1hZ2UoaWNvbikKKyAgICAgICAgICAgICAgICAjYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTQwLCA1MCkKKyAgICAgICAgICAgICAgICB0YWJsZS5hdHRhY2goYnV0dG9uLCA5LCAxMCwgMSwgMiwgZ3RrLkZJTEwsIDAsIDAsIDApCisgICAgICAgICAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLnNlbGVjdF9pbWFnZV9idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICBzZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTEwKQorCisgICAgICAgIHNlbGYudXNiX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz5Zb3UgaGF2ZW4ndCBjaG9zZW4gYW55IFVTQiBkcml2ZS48L3NwYW4+IgorICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9tYXJrdXAobWFya3VwKQorCisgICAgICAgIHNlbGYudXNiX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIHNlbGYudXNiX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnVzYl9jb21ib19jaGFuZ2VkX2NiKQorICAgICAgICBtb2RlbCA9IHNlbGYudXNiX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIG1vZGVsLmNsZWFyKCkKKyAgICAgICAgc2VsZi51c2JfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5fX2R1bW15X3VzYl9fKQorICAgICAgICBmb3IgdXNiIGluIHNlbGYuZmluZF9hbGxfdXNiX2RldmljZXMoKToKKyAgICAgICAgICAgIHNlbGYudXNiX2NvbWJvLmFwcGVuZF90ZXh0KCIvZGV2LyIgKyB1c2IpCisgICAgICAgIHNlbGYudXNiX2NvbWJvLnNldF9hY3RpdmUoMCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi51c2JfY29tYm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi51c2JfZGVzYywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTIpCisKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3NfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VwYXJhdG9yLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSwgcGFkZGluZz0xMCkKKworICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5oaWRlKCkKKworICAgIGRlZiBzZXRfaW1hZ2VfdGV4dF9idWZmZXIoc2VsZiwgaW1hZ2VfcGF0aCk6CisgICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KGltYWdlX3BhdGgpCisKKyAgICBkZWYgc2V0X2ltYWdlX3BhdGgoc2VsZiwgaW1hZ2VfcGF0aCk6CisgICAgICAgIHNlbGYuaW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKKworICAgIGRlZiBwb3Blbl9yZWFkKHNlbGYsIGNtZCk6CisgICAgICAgIHRtcG91dCwgZXJyb3JzID0gYmIucHJvY2Vzcy5ydW4oIiVzIiAlIGNtZCkKKyAgICAgICAgcmV0dXJuIHRtcG91dC5zdHJpcCgpCisKKyAgICBkZWYgZmluZF9hbGxfdXNiX2RldmljZXMoc2VsZik6CisgICAgICAgIHVzYl9kZXZzID0gWyBvcy5yZWFkbGluayh1KQorICAgICAgICAgICAgZm9yIHUgaW4gZ2xvYi5nbG9iKCcvZGV2L2Rpc2svYnktaWQvdXNiKicpCisgICAgICAgICAgICBpZiBub3QgcmUuc2VhcmNoKHIncGFydFxkKycsIHUpIF0KKyAgICAgICAgcmV0dXJuIFsgJyVzJyAlIHVbdS5yZmluZCgnLycpKzE6XSBmb3IgdSBpbiB1c2JfZGV2cyBdCisKKyAgICBkZWYgZ2V0X3VzYl9pbmZvKHNlbGYsIGRldik6CisgICAgICAgIHJldHVybiAiJXMgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYucG9wZW5fcmVhZCgnY2F0IC9zeXMvY2xhc3MvYmxvY2svJXMvZGV2aWNlL3ZlbmRvcicgJSBkZXYpLAorICAgICAgICAgICAgc2VsZi5wb3Blbl9yZWFkKCdjYXQgL3N5cy9jbGFzcy9ibG9jay8lcy9kZXZpY2UvbW9kZWwnICUgZGV2KSkKKworICAgIGRlZiBzZWxlY3RfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnc2VsZWN0X2ltYWdlX2NsaWNrZWQnKQorCisgICAgZGVmIHVzYl9jb21ib19jaGFuZ2VkX2NiKHNlbGYsIHVzYl9jb21ibyk6CisgICAgICAgIGNvbWJvX2l0ZW0gPSBzZWxmLnVzYl9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBub3QgY29tYm9faXRlbSBvciBjb21ib19pdGVtID09IHNlbGYuX19kdW1teV91c2JfXzoKKyAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz5Zb3UgaGF2ZW4ndCBjaG9zZW4gYW55IFVTQiBkcml2ZS48L3NwYW4+IgorICAgICAgICAgICAgc2VsZi51c2JfZGVzYy5zZXRfbWFya3VwKG1hcmt1cCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiBmb250X2Rlc2M9JzEyJz4iICsgc2VsZi5nZXRfdXNiX2luZm8oY29tYm9faXRlbS5sc3RyaXAoIi9kZXYvIikpICsgIjwvc3Bhbj4iCisgICAgICAgICAgICBzZWxmLnVzYl9kZXNjLnNldF9tYXJrdXAobWFya3VwKQorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgbGJsID0gJycKKyAgICAgICAgICAgIG1zZyA9ICcnCisgICAgICAgICAgICBjb21ib19pdGVtID0gc2VsZi51c2JfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgICAgIGlmIGNvbWJvX2l0ZW0gYW5kIGNvbWJvX2l0ZW0gIT0gc2VsZi5fX2R1bW15X3VzYl9fIGFuZCBzZWxmLmltYWdlX3BhdGg6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IGJiLnVpLmNydW1icy51dGlscy53aGljaF90ZXJtaW5hbCgpCisgICAgICAgICAgICAgICAgaWYgY21kbGluZToKKyAgICAgICAgICAgICAgICAgICAgdG1wZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgICAgICAgICAgICAgIGNtZGxpbmUgKz0gIlwic3VkbyBkZCBpZj0iICsgc2VsZi5pbWFnZV9wYXRoICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mPSIgKyBjb21ib19pdGVtICsgIiAmJiBzeW5jOyBlY2hvICQ/ID4gIiArIHRtcGZpbGUubmFtZSArICJcIiIKKyAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNobGV4LnNwbGl0KGNtZGxpbmUpKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGludCh0bXBmaWxlLnJlYWRsaW5lKCkuc3RyaXAoKSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5EZXBsb3kgaW1hZ2Ugc3VjY2Vzc2Z1bGx5LjwvYj4iCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsYmwgPSAiPGI+RmFpbGVkIHRvIGRlcGxveSBpbWFnZS48L2I+IgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIlBsZWFzZSBjaGVjayBpbWFnZSA8Yj4lczwvYj4gZXhpc3RzIGFuZCBVU0IgZGV2aWNlIDxiPiVzPC9iPiBpcyB3cml0YWJsZS4iICUgKHNlbGYuaW1hZ2VfcGF0aCwgY29tYm9faXRlbSkKKyAgICAgICAgICAgICAgICAgICAgdG1wZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmltYWdlX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIGxibCA9ICI8Yj5ObyBzZWxlY3Rpb24gbWFkZS48L2I+IgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiWW91IGhhdmUgbm90IHNlbGVjdGVkIGFuIGltYWdlIHRvIGRlcGxveS4iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPk5vIHNlbGVjdGlvbiBtYWRlLjwvYj4iCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJZb3UgaGF2ZSBub3Qgc2VsZWN0ZWQgYSBVU0IgZGV2aWNlLiIKKyAgICAgICAgICAgIGlmIGxlbihsYmwpOgorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHNlbGYsIGxibCwgZ3RrLk1FU1NBR0VfSU5GTywgbXNnKQorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGNydW1ic19kaWFsb2cuYWRkX2J1dHRvbigiQ2xvc2UiLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgICAgICAgICAgY3J1bWJzX2RpYWxvZy5ydW4oKQorICAgICAgICAgICAgICAgIGNydW1ic19kaWFsb2cuZGVzdHJveSgpCisKKyAgICBkZWYgdXBkYXRlX3Byb2dyZXNzX2JhcihzZWxmLCB0aXRsZSwgZnJhY3Rpb24sIHN0YXR1cz1Ob25lKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIudXBkYXRlKGZyYWN0aW9uKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGl0bGUodGl0bGUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKKworICAgIGRlZiB3cml0ZV9maWxlKHNlbGYsIGlmaWxlLCBvZmlsZSk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnJlc2V0KCkKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIuc2hvdygpCisKKyAgICAgICAgZl9mcm9tID0gb3Mub3BlbihpZmlsZSwgb3MuT19SRE9OTFkpCisgICAgICAgIGZfdG8gPSBvcy5vcGVuKG9maWxlLCBvcy5PX1dST05MWSkKKworICAgICAgICB0b3RhbF9zaXplID0gb3Muc3RhdChpZmlsZSkuc3Rfc2l6ZQorICAgICAgICB3cml0dGVuX3NpemUgPSAwCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJ1ZiA9IG9zLnJlYWQoZl9mcm9tLCAxMDI0KjEwMjQpCisgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvcy53cml0ZShmX3RvLCBidWYpCisgICAgICAgICAgICB3cml0dGVuX3NpemUgKz0gMTAyNCoxMDI0CisgICAgICAgICAgICBzZWxmLnVwZGF0ZV9wcm9ncmVzc19iYXIoIldyaXRpbmcgdG8gdXNiOiIsIHdyaXR0ZW5fc2l6ZSAqIDEuMC90b3RhbF9zaXplKQorCisgICAgICAgIHNlbGYudXBkYXRlX3Byb2dyZXNzX2JhcigiV3JpdGluZyBjb21wbGV0ZWQ6IiwgMS4wKQorICAgICAgICBvcy5jbG9zZShmX2Zyb20pCisgICAgICAgIG9zLmNsb3NlKGZfdG8pCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLmhpZGUoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9pbWFnZXNlbGVjdGlvbmRpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvaW1hZ2VzZWxlY3Rpb25kaWFsb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyMTZhZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvaW1hZ2VzZWxlY3Rpb25kaWFsb2cucHkKQEAgLTAsMCArMSwxNzIgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgb3MKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iVmlld1RhYmxlLCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcubGF5ZXJzZWxlY3Rpb25kaWFsb2cgaW1wb3J0IExheWVyU2VsZWN0aW9uRGlhbG9nCisKKyIiIgorVGhlIGZvbGxvd2luZyBhcmUgY29udmVuaWVuY2UgY2xhc3NlcyBmb3IgaW1wbGVtZW50aW5nIEdOT01FIEhJRyBjb21wbGlhbnQKK0JpdEJha2UgR1VJJ3MKK0luIHN1bW1hcnk6IHNwYWNpbmcgPSAxMnB4LCBib3JkZXItd2lkdGggPSA2cHgKKyIiIgorCitjbGFzcyBJbWFnZVNlbGVjdGlvbkRpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIF9fY29sdW1uc19fID0gW3sKKyAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW1hZ2UgbmFtZScsCisgICAgICAgICAgICAnY29sX2lkJyAgIDogMCwKKyAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAnY29sX21pbicgIDogNDAwLAorICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMAorICAgICAgICB9LCB7CisgICAgICAgICAgICAnY29sX25hbWUnIDogJ1NlbGVjdCcsCisgICAgICAgICAgICAnY29sX2lkJyAgIDogMSwKKyAgICAgICAgICAgICdjb2xfc3R5bGUnOiAncmFkaW8gdG9nZ2xlJywKKyAgICAgICAgICAgICdjb2xfbWluJyAgOiAxNjAsCisgICAgICAgICAgICAnY29sX21heCcgIDogMTYwCisgICAgfV0KKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX2ZvbGRlciwgaW1hZ2VfdHlwZXMsIHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUsIGltYWdlX2V4dGVuc2lvbiA9IHt9KToKKyAgICAgICAgc3VwZXIoSW1hZ2VTZWxlY3Rpb25EaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgICAgICBzZWxmLmltYWdlX2ZvbGRlciA9IGltYWdlX2ZvbGRlcgorICAgICAgICBzZWxmLmltYWdlX3R5cGVzICA9IGltYWdlX3R5cGVzCisgICAgICAgIHNlbGYuaW1hZ2VfbGlzdCA9IFtdCisgICAgICAgIHNlbGYuaW1hZ2VfbmFtZXMgPSBbXQorICAgICAgICBzZWxmLmltYWdlX2V4dGVuc2lvbiA9IGltYWdlX2V4dGVuc2lvbgorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICAgICAgc2VsZi5pbWFnZV9zdG9yZSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX0JPT0xFQU4pCisgICAgICAgIHNlbGYuZmlsbF9pbWFnZV9zdG9yZSgpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGhib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBlbnRyeSA9IGd0ay5FbnRyeSgpCisgICAgICAgIGVudHJ5LnNldF90ZXh0KHNlbGYuaW1hZ2VfZm9sZGVyKQorICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgVHJ1ZSkKKyAgICAgICAgdGFibGUuc2V0X3NpemVfcmVxdWVzdCg1NjAsIC0xKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgdGFibGUuYXR0YWNoKGVudHJ5LCAwLCA5LCAwLCAxKQorICAgICAgICBpbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgIGltYWdlLnNldF9mcm9tX3N0b2NrKGd0ay5TVE9DS19PUEVOLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgb3Blbl9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgb3Blbl9idXR0b24uc2V0X2ltYWdlKGltYWdlKQorICAgICAgICBvcGVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zZWxlY3RfcGF0aF9jYiwgc2VsZiwgZW50cnkpCisgICAgICAgIHRhYmxlLmF0dGFjaChvcGVuX2J1dHRvbiwgOSwgMTAsIDAsIDEpCisKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZSA9IEhvYlZpZXdUYWJsZShzZWxmLl9fY29sdW1uc19fLCAiSW1hZ2VzIikKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCAzMDApCisgICAgICAgIHNlbGYuaW1hZ2VfdGFibGUuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYikKKyAgICAgICAgc2VsZi5pbWFnZV90YWJsZS5jb25uZWN0X2dyb3VwX3NlbGVjdGlvbihzZWxmLnRhYmxlX3NlbGVjdGVkX2NiKQorICAgICAgICBzZWxmLmltYWdlX3RhYmxlLmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLnJvd19hY3RpdmVkX2NiKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLmltYWdlX3RhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGNoYW5nZV9pbWFnZV9jYihzZWxmLCBtb2RlbCwgcGF0aCwgY29sdW1uaWQpOgorICAgICAgICBpZiBub3QgbW9kZWw6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXRlcjoKKyAgICAgICAgICAgIHJvd3BhdGggPSBtb2RlbC5nZXRfcGF0aChpdGVyKQorICAgICAgICAgICAgbW9kZWxbcm93cGF0aF1bY29sdW1uaWRdID0gRmFsc2UKKyAgICAgICAgICAgIGl0ZXIgPSBtb2RlbC5pdGVyX25leHQoaXRlcikKKworICAgICAgICBtb2RlbFtwYXRoXVtjb2x1bW5pZF0gPSBUcnVlCisKKyAgICBkZWYgdG9nZ2xlZF9jYihzZWxmLCB0YWJsZSwgY2VsbCwgcGF0aCwgY29sdW1uaWQsIHRyZWUpOgorICAgICAgICBtb2RlbCA9IHRyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGgsIGNvbHVtbmlkKQorCisgICAgZGVmIHRhYmxlX3NlbGVjdGVkX2NiKHNlbGYsIHNlbGVjdGlvbik6CisgICAgICAgIG1vZGVsLCBwYXRocyA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWRfcm93cygpCisgICAgICAgIGlmIHBhdGhzOgorICAgICAgICAgICAgc2VsZi5jaGFuZ2VfaW1hZ2VfY2IobW9kZWwsIHBhdGhzWzBdLCAxKQorCisgICAgZGVmIHJvd19hY3RpdmVkX2NiKHNlbGYsIHRhYiwgbW9kZWwsIHBhdGgpOgorICAgICAgICBzZWxmLmNoYW5nZV9pbWFnZV9jYihtb2RlbCwgcGF0aCwgMSkKKyAgICAgICAgc2VsZi5lbWl0KCdyZXNwb25zZScsIGd0ay5SRVNQT05TRV9ZRVMpCisKKyAgICBkZWYgc2VsZWN0X3BhdGhfY2Ioc2VsZiwgYWN0aW9uLCBwYXJlbnQsIGVudHJ5KToKKyAgICAgICAgZGlhbG9nID0gZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKCIiLCBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRklMRV9DSE9PU0VSX0FDVElPTl9TRUxFQ1RfRk9MREVSKQorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBkaWFsb2cuc2V0X2N1cnJlbnRfZm9sZGVyKHRleHQgaWYgbGVuKHRleHQpID4gMCBlbHNlIG9zLmdldGN3ZCgpKQorICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX05PKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIk9wZW4iLCBndGsuUkVTUE9OU0VfWUVTKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKGJ1dHRvbikKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIHBhdGggPSBkaWFsb2cuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgICAgIGVudHJ5LnNldF90ZXh0KHBhdGgpCisgICAgICAgICAgICBzZWxmLmltYWdlX2ZvbGRlciA9IHBhdGgKKyAgICAgICAgICAgIHNlbGYuZmlsbF9pbWFnZV9zdG9yZSgpCisKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGZpbGxfaW1hZ2Vfc3RvcmUoc2VsZik6CisgICAgICAgIHNlbGYuaW1hZ2VfbGlzdCA9IFtdCisgICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUuY2xlYXIoKQorICAgICAgICBpbWFnZXNldCA9IHNldCgpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYuaW1hZ2VfZm9sZGVyKToKKyAgICAgICAgICAgICMgaWdub3JlIHRoZSBzdWIgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGRpcnNbOl0gPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV90eXBlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW1hZ2VfdHlwZSBpbiBzZWxmLmltYWdlX2V4dGVuc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfdHlwZXMgPSBzZWxmLmltYWdlX2V4dGVuc2lvbltpbWFnZV90eXBlXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVhbF90eXBlcyA9IFtpbWFnZV90eXBlXQorICAgICAgICAgICAgICAgICAgICBmb3IgcmVhbF9pbWFnZV90eXBlIGluIHJlYWxfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuJyArIHJlYWxfaW1hZ2VfdHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXQuYWRkKGYucnNwbGl0KCcuJyArIHJlYWxfaW1hZ2VfdHlwZSlbMF0ucnNwbGl0KCcucm9vdGZzJylbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9saXN0LmFwcGVuZChmKQorCisgICAgICAgIGZvciBpbWFnZSBpbiBpbWFnZXNldDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2Vfc3RvcmUuc2V0KHNlbGYuaW1hZ2Vfc3RvcmUuYXBwZW5kKCksIDAsIGltYWdlLCAxLCBGYWxzZSkKKworICAgICAgICBzZWxmLmltYWdlX3RhYmxlLnNldF9tb2RlbChzZWxmLmltYWdlX3N0b3JlKQorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBzZWxmLmltYWdlX25hbWVzID0gW10KKyAgICAgICAgaWYgcmVzcG9uc2VfaWQgPT0gZ3RrLlJFU1BPTlNFX1lFUzoKKyAgICAgICAgICAgIGl0ZXIgPSBzZWxmLmltYWdlX3N0b3JlLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgICAgIHdoaWxlIGl0ZXI6CisgICAgICAgICAgICAgICAgcGF0aCA9IHNlbGYuaW1hZ2Vfc3RvcmUuZ2V0X3BhdGgoaXRlcikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmltYWdlX3N0b3JlW3BhdGhdWzFdOgorICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLmltYWdlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgoc2VsZi5pbWFnZV9zdG9yZVtwYXRoXVswXSArICcuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9uYW1lcy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpdGVyID0gc2VsZi5pbWFnZV9zdG9yZS5pdGVyX25leHQoaXRlcikKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvbGF5ZXJzZWxlY3Rpb25kaWFsb2cucHkgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2xheWVyc2VsZWN0aW9uZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDU3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL2xheWVyc2VsZWN0aW9uZGlhbG9nLnB5CkBAIC0wLDAgKzEsMjk4IEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaGljLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgQ2VsbFJlbmRlcmVyUGl4YnVmQWN0aXZhdGFibGUoZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zik6CisgICAgIiIiCisgICAgQSBjdXN0b20gQ2VsbFJlbmRlcmVyIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIGFjdGl2YXRhYmxlCisgICAgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIHVzZXIgY2xpY2tzCisgICAgIiIiCisgICAgX19nc2lnbmFsc19fICAgID0geyAnY2xpY2tlZCcgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsKSksIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnbW9kZScsIGd0ay5DRUxMX1JFTkRFUkVSX01PREVfQUNUSVZBVEFCTEUpCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCdmb2xsb3ctc3RhdGUnLCBUcnVlKQorCisgICAgIiIiCisgICAgUmVzcG9uZCB0byBhIHVzZXIgY2xpY2sgb24gYSBjZWxsCisgICAgIiIiCisgICAgZGVmIGRvX2FjdGl2YXRlKHNlbGYsIGV2ZW4sIHdpZGdldCwgcGF0aCwgYmFja2dyb3VuZF9hcmVhLCBjZWxsX2FyZWEsIGZsYWdzKToKKyAgICAgICAgc2VsZi5lbWl0KCdjbGlja2VkJywgcGF0aCkKKworIworIyBMYXllclNlbGVjdGlvbkRpYWxvZworIworY2xhc3MgTGF5ZXJTZWxlY3Rpb25EaWFsb2cgKENydW1ic0RpYWxvZyk6CisKKyAgICBUQVJHRVRTID0gWworICAgICAgICAoIk1ZX1RSRUVfTU9ERUxfUk9XIiwgZ3RrLlRBUkdFVF9TQU1FX1dJREdFVCwgMCksCisgICAgICAgICgidGV4dC9wbGFpbiIsIDAsIDEpLAorICAgICAgICAoIlRFWFQiLCAwLCAyKSwKKyAgICAgICAgKCJTVFJJTkciLCAwLCAzKSwKKyAgICAgICAgXQorCisgICAgZGVmIGdlbl9sYWJlbF93aWRnZXQoc2VsZiwgY29udGVudCk6CisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGRlZiBsYXllcl93aWRnZXRfdG9nZ2xlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBsYXllcl9zdG9yZSk6CisgICAgICAgIG5hbWUgPSBsYXllcl9zdG9yZVtwYXRoXVswXQorICAgICAgICB0b2dnbGUgPSBub3QgbGF5ZXJfc3RvcmVbcGF0aF1bMV0KKyAgICAgICAgbGF5ZXJfc3RvcmVbcGF0aF1bMV0gPSB0b2dnbGUKKworICAgIGRlZiBsYXllcl93aWRnZXRfYWRkX2NsaWNrZWRfY2Ioc2VsZiwgYWN0aW9uLCBsYXllcl9zdG9yZSwgcGFyZW50KToKKyAgICAgICAgZGlhbG9nID0gZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKCJBZGQgbmV3IGxheWVyIiwgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCJTZWxlY3QgdGhlIGxheWVyIHlvdSB3aXNoIHRvIGFkZCIpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICBkaWFsb2cuc2V0X2V4dHJhX3dpZGdldChsYWJlbCkKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgcGF0aCA9IGRpYWxvZy5nZXRfZmlsZW5hbWUoKQorICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisKKyAgICAgICAgbGJsID0gIjxiPkVycm9yPC9iPiIKKyAgICAgICAgbXNnID0gIlVuYWJsZSB0byBsb2FkIGxheWVyIDxpPiVzPC9pPiBiZWNhdXNlICIgJSBwYXRoCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBvcy5wYXRoCisgICAgICAgICAgICBsYXllcnMgPSBbXQorICAgICAgICAgICAgaXQgPSBsYXllcl9zdG9yZS5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgICAgICBsYXllcnMuYXBwZW5kKGxheWVyX3N0b3JlLmdldF92YWx1ZShpdCwgMCkpCisgICAgICAgICAgICAgICAgaXQgPSBsYXllcl9zdG9yZS5pdGVyX25leHQoaXQpCisKKyAgICAgICAgICAgIGlmIG5vdCBwYXRoOgorICAgICAgICAgICAgICAgIG1zZyArPSAiaXQgaXMgYW4gaW52YWxpZCBwYXRoLiIKKyAgICAgICAgICAgIGVsaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgrIi9jb25mL2xheWVyLmNvbmYiKToKKyAgICAgICAgICAgICAgICBtc2cgKz0gInRoZXJlIGlzIG5vIGxheWVyLmNvbmYgaW5zaWRlIHRoZSBkaXJlY3RvcnkuIgorICAgICAgICAgICAgZWxpZiBwYXRoIGluIGxheWVyczoKKyAgICAgICAgICAgICAgICBtc2cgKz0gIml0IGlzIGFscmVhZHkgaW4gbG9hZGVkIGxheWVycy4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxheWVyX3N0b3JlLmFwcGVuZChbcGF0aF0pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBkaWFsb2cgPSBDcnVtYnNNZXNzYWdlRGlhbG9nKHBhcmVudCwgbGJsLCBndGsuTUVTU0FHRV9FUlJPUiwgbXNnKQorICAgICAgICAgICAgZGlhbG9nLmFkZF9idXR0b24oZ3RrLlNUT0NLX0NMT1NFLCBndGsuUkVTUE9OU0VfT0spCisgICAgICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGxheWVyX3dpZGdldF9kZWxfY2xpY2tlZF9jYihzZWxmLCBhY3Rpb24sIHRyZWVfc2VsZWN0aW9uLCBsYXllcl9zdG9yZSk6CisgICAgICAgIG1vZGVsLCBpdGVyID0gdHJlZV9zZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaWYgaXRlcjoKKyAgICAgICAgICAgIGxheWVyX3N0b3JlLnJlbW92ZShpdGVyKQorCisKKyAgICBkZWYgZ2VuX2xheWVyX3dpZGdldChzZWxmLCBsYXllcnMsIGxheWVyc19hdmFpbCwgd2luZG93LCB0b29sdGlwPSIiKToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorCisgICAgICAgIGxheWVyX3R2ID0gZ3RrLlRyZWVWaWV3KCkKKyAgICAgICAgbGF5ZXJfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKKyAgICAgICAgbGF5ZXJfdHYuc2V0X2hlYWRlcnNfdmlzaWJsZShGYWxzZSkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24gPSBsYXllcl90di5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24uc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisKKyAgICAgICAgIyBBbGxvdyBlbmFibGUgZHJhZyBhbmQgZHJvcCBvZiByb3dzIGluY2x1ZGluZyByb3cgbW92ZQorICAgICAgICBkbmRfaW50ZXJuYWxfdGFyZ2V0ID0gJycKKyAgICAgICAgZG5kX3RhcmdldHMgPSBbKGRuZF9pbnRlcm5hbF90YXJnZXQsIGd0ay5UQVJHRVRfU0FNRV9XSURHRVQsIDApXQorICAgICAgICBsYXllcl90di5lbmFibGVfbW9kZWxfZHJhZ19zb3VyY2UoIGd0ay5nZGsuQlVUVE9OMV9NQVNLLAorICAgICAgICAgICAgZG5kX3RhcmdldHMsCisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9NT1ZFKQorICAgICAgICBsYXllcl90di5lbmFibGVfbW9kZWxfZHJhZ19kZXN0KGRuZF90YXJnZXRzLAorICAgICAgICAgICAgZ3RrLmdkay5BQ1RJT05fTU9WRSkKKyAgICAgICAgbGF5ZXJfdHYuY29ubmVjdCgiZHJhZ19kYXRhX2dldCIsIHNlbGYuZHJhZ19kYXRhX2dldF9jYikKKyAgICAgICAgbGF5ZXJfdHYuY29ubmVjdCgiZHJhZ19kYXRhX3JlY2VpdmVkIiwgc2VsZi5kcmFnX2RhdGFfcmVjZWl2ZWRfY2IpCisKKyAgICAgICAgY29sMD0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdQYXRoJykKKyAgICAgICAgY2VsbDAgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwwLnNldF9wYWRkaW5nKDUsMikKKyAgICAgICAgY29sMC5wYWNrX3N0YXJ0KGNlbGwwLCBUcnVlKQorICAgICAgICBjb2wwLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMCwgc2VsZi5kcmF3X2xheWVyX3BhdGhfY2IpCisgICAgICAgIGxheWVyX3R2LmFwcGVuZF9jb2x1bW4oY29sMCkKKworICAgICAgICBzY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzY3JvbGwuYWRkKGxheWVyX3R2KQorCisgICAgICAgIHRhYmxlX2xheWVyID0gZ3RrLlRhYmxlKDIsIDEwLCBGYWxzZSkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHRhYmxlX2xheWVyLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHRhYmxlX2xheWVyLmF0dGFjaChzY3JvbGwsIDAsIDEwLCAwLCAxKQorCisgICAgICAgIGxheWVyX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICAgICAgbGF5ZXJfc3RvcmUuYXBwZW5kKFtsYXllcl0pCisKKyAgICAgICAgY29sMSA9IGd0ay5UcmVlVmlld0NvbHVtbignRW5hYmxlZCcpCisgICAgICAgIGxheWVyX3R2LmFwcGVuZF9jb2x1bW4oY29sMSkKKworICAgICAgICBjZWxsMSA9IENlbGxSZW5kZXJlclBpeGJ1ZkFjdGl2YXRhYmxlKCkKKyAgICAgICAgY2VsbDEuc2V0X2ZpeGVkX3NpemUoLTEsMzUpCisgICAgICAgIGNlbGwxLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmRlbF9jZWxsX2NsaWNrZWRfY2IsIGxheWVyX3N0b3JlKQorICAgICAgICBjb2wxLnBhY2tfc3RhcnQoY2VsbDEsIFRydWUpCisgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwxLCBzZWxmLmRyYXdfZGVsZXRlX2J1dHRvbl9jYiwgbGF5ZXJfdHYpCisKKyAgICAgICAgYWRkX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBhZGRfYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorICAgICAgICBib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgYm94LnNob3coKQorICAgICAgICBhZGRfYnV0dG9uLmFkZChib3gpCisgICAgICAgIGFkZF9idXR0b24uY29ubmVjdCgiZW50ZXItbm90aWZ5LWV2ZW50Iiwgc2VsZi5hZGRfaG92ZXJfY2IpCisgICAgICAgIGFkZF9idXR0b24uY29ubmVjdCgibGVhdmUtbm90aWZ5LWV2ZW50Iiwgc2VsZi5hZGRfbGVhdmVfY2IpCisgICAgICAgIHNlbGYuaW0gPSBndGsuSW1hZ2UoKQorICAgICAgICBzZWxmLmltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BRERfRklMRSkKKyAgICAgICAgc2VsZi5pbS5zaG93KCkKKyAgICAgICAgYm94LnBhY2tfc3RhcnQoc2VsZi5pbSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisgICAgICAgIGxibCA9IGd0ay5MYWJlbCgiQWRkIGxheWVyIikKKyAgICAgICAgbGJsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIGxibC5zaG93KCkKKyAgICAgICAgYm94LnBhY2tfc3RhcnQobGJsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlLCBwYWRkaW5nPTYpCisgICAgICAgIGFkZF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYubGF5ZXJfd2lkZ2V0X2FkZF9jbGlja2VkX2NiLCBsYXllcl9zdG9yZSwgd2luZG93KQorICAgICAgICB0YWJsZV9sYXllci5hdHRhY2goYWRkX2J1dHRvbiwgMCwgMTAsIDEsIDIsIGd0ay5FWFBBTkQgfCBndGsuRklMTCwgMCwgMCwgNikKKyAgICAgICAgbGF5ZXJfdHYuc2V0X21vZGVsKGxheWVyX3N0b3JlKQorCisgICAgICAgIGhib3guc2hvd19hbGwoKQorCisgICAgICAgIHJldHVybiBoYm94LCBsYXllcl9zdG9yZQorCisgICAgZGVmIGRyYWdfZGF0YV9nZXRfY2Ioc2VsZiwgdHJlZXZpZXcsIGNvbnRleHQsIHNlbGVjdGlvbiwgdGFyZ2V0X2lkLCBldGltZSk6CisgICAgICAgIHRyZWVzZWxlY3Rpb24gPSB0cmVldmlldy5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgbW9kZWwsIGl0ZXIgPSB0cmVlc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGRhdGEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMCkKKyAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3Rpb24udGFyZ2V0LCA4LCBkYXRhKQorCisgICAgZGVmIGRyYWdfZGF0YV9yZWNlaXZlZF9jYihzZWxmLCB0cmVldmlldywgY29udGV4dCwgeCwgeSwgc2VsZWN0aW9uLCBpbmZvLCBldGltZSk6CisgICAgICAgIG1vZGVsID0gdHJlZXZpZXcuZ2V0X21vZGVsKCkKKyAgICAgICAgZGF0YSA9IHNlbGVjdGlvbi5kYXRhCisgICAgICAgIGRyb3BfaW5mbyA9IHRyZWV2aWV3LmdldF9kZXN0X3Jvd19hdF9wb3MoeCwgeSkKKyAgICAgICAgaWYgZHJvcF9pbmZvOgorICAgICAgICAgICAgcGF0aCwgcG9zaXRpb24gPSBkcm9wX2luZm8KKyAgICAgICAgICAgIGl0ZXIgPSBtb2RlbC5nZXRfaXRlcihwYXRoKQorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGd0ay5UUkVFX1ZJRVdfRFJPUF9CRUZPUkUgb3IgcG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0lOVE9fT1JfQkVGT1JFKToKKyAgICAgICAgICAgICAgICBtb2RlbC5pbnNlcnRfYmVmb3JlKGl0ZXIsIFtkYXRhXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0X2FmdGVyKGl0ZXIsIFtkYXRhXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZGVsLmFwcGVuZChbZGF0YV0pCisgICAgICAgIGlmIGNvbnRleHQuYWN0aW9uID09IGd0ay5nZGsuQUNUSU9OX01PVkU6CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaChUcnVlLCBUcnVlLCBldGltZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgYWRkX2hvdmVyX2NiKHNlbGYsIGJ1dHRvbiwgZXZlbnQpOgorICAgICAgICBzZWxmLmltLnNldF9mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BRERfSE9WRVJfRklMRSkKKworICAgIGRlZiBhZGRfbGVhdmVfY2Ioc2VsZiwgYnV0dG9uLCBldmVudCk6CisgICAgICAgIHNlbGYuaW0uc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkRJX0FERF9GSUxFKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRpdGxlLCBsYXllcnMsIGxheWVyc19ub25fcmVtb3ZhYmxlLCBhbGxfbGF5ZXJzLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihMYXllclNlbGVjdGlvbkRpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisKKyAgICAgICAgIyBjbGFzcyBtZW1iZXJzIGZyb20gb3RoZXIgb2JqZWN0cworICAgICAgICBzZWxmLmxheWVycyA9IGxheWVycworICAgICAgICBzZWxmLmxheWVyc19ub25fcmVtb3ZhYmxlID0gbGF5ZXJzX25vbl9yZW1vdmFibGUKKyAgICAgICAgc2VsZi5hbGxfbGF5ZXJzID0gYWxsX2xheWVycworICAgICAgICBzZWxmLmxheWVyc19jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICAjIGljb24gZm9yIHJlbW92ZSBidXR0b24gaW4gVHJlZVZpZXcKKyAgICAgICAgaW0gPSBndGsuSW1hZ2UoKQorICAgICAgICBpbS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORElfUkVNT1ZFX0ZJTEUpCisgICAgICAgIHNlbGYucmVtX2ljb24gPSBpbS5nZXRfcGl4YnVmKCkKKworICAgICAgICAjIGNsYXNzIG1lbWJlcnMgZm9yIGludGVybmFsIHVzZQorICAgICAgICBzZWxmLmxheWVyX3N0b3JlID0gTm9uZQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGxheWVyX3dpZGdldCwgc2VsZi5sYXllcl9zdG9yZSA9IHNlbGYuZ2VuX2xheWVyX3dpZGdldChzZWxmLmxheWVycywgc2VsZi5hbGxfbGF5ZXJzLCBzZWxmLCBOb25lKQorICAgICAgICBsYXllcl93aWRnZXQuc2V0X3NpemVfcmVxdWVzdCg0NTAsIDI1MCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQobGF5ZXJfd2lkZ2V0LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiByZXNwb25zZV9jYihzZWxmLCBkaWFsb2csIHJlc3BvbnNlX2lkKToKKyAgICAgICAgbW9kZWwgPSBzZWxmLmxheWVyX3N0b3JlCisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICBsYXllcnMgPSBbXQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGxheWVycy5hcHBlbmQobW9kZWwuZ2V0X3ZhbHVlKGl0LCAwKSkKKyAgICAgICAgICAgIGl0ID0gbW9kZWwuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHNlbGYubGF5ZXJzX2NoYW5nZWQgPSAoc2VsZi5sYXllcnMgIT0gbGF5ZXJzKQorICAgICAgICBzZWxmLmxheWVycyA9IGxheWVycworCisgICAgIiIiCisgICAgQSBjdXN0b20gY2VsbF9kYXRhX2Z1bmMgdG8gZHJhdyBhIGRlbGV0ZSAnYnV0dG9uJyBpbiB0aGUgVHJlZVZpZXcgZm9yIGxheWVycworICAgIG90aGVyIHRoYW4gdGhlIG1ldGEgbGF5ZXIuIFRoZSBkZWxldGlvbiBvZiB3aGljaCBpcyBwcmV2ZW50ZWQgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbid0IHNob290IHRoZW1zZWx2ZXMgaW4gdGhlIGZvb3QgdG9vIGJhZGx5LgorICAgICIiIgorICAgIGRlZiBkcmF3X2RlbGV0ZV9idXR0b25fY2Ioc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXQsIHR2KToKKyAgICAgICAgcGF0aCA9ICBtb2RlbC5nZXRfdmFsdWUoaXQsIDApCisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5sYXllcnNfbm9uX3JlbW92YWJsZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdwaXhidWYnLCBOb25lKQorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ21vZGUnLCBndGsuQ0VMTF9SRU5ERVJFUl9NT0RFX0lORVJUKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3BpeGJ1ZicsIHNlbGYucmVtX2ljb24pCisgICAgICAgICAgICBjZWxsLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdtb2RlJywgZ3RrLkNFTExfUkVOREVSRVJfTU9ERV9BQ1RJVkFUQUJMRSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQSBjdXN0b20gY2VsbF9kYXRhX2Z1bmMgdG8gd3JpdGUgYW4gZXh0cmEgbWVzc2FnZSBpbnRvIHRoZSBsYXllciBwYXRoIGNlbGwKKyAgICBmb3IgdGhlIG1ldGEgbGF5ZXIuIFdlIHNob3VsZCBpbmZvcm0gdGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHJlbW92ZSBpdCBmb3IKKyAgICB0aGVpciBvd24gc2FmZXR5LgorICAgICIiIgorICAgIGRlZiBkcmF3X2xheWVyX3BhdGhfY2Ioc2VsZiwgY29sLCBjZWxsLCBtb2RlbCwgaXQpOgorICAgICAgICBwYXRoID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCAwKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubGF5ZXJzX25vbl9yZW1vdmFibGU6CisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgnbWFya3VwJywgIjxiPkl0IGNhbm5vdCBiZSByZW1vdmVkPC9iPlxuJXMiICUgcGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgcGF0aCkKKworICAgIGRlZiBkZWxfY2VsbF9jbGlja2VkX2NiKHNlbGYsIGNlbGwsIHBhdGgsIG1vZGVsKToKKyAgICAgICAgaXQgPSBtb2RlbC5nZXRfaXRlcl9mcm9tX3N0cmluZyhwYXRoKQorICAgICAgICBtb2RlbC5yZW1vdmUoaXQpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3BhcnNpbmd3YXJuaW5nc2RpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcGFyc2luZ3dhcm5pbmdzZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYmFjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3BhcnNpbmd3YXJuaW5nc2RpYWxvZy5weQpAQCAtMCwwICsxLDE2MyBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBDcmlzdGlhbmEgVm9pY3UgPGNyaXN0aWFuYS52b2ljdUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAorZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JBbHRCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworIworIyBQYXJzaW5nV2FybmluZ3NEaWFsb2cKKyMKK2NsYXNzIFBhcnNpbmdXYXJuaW5nc0RpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgd2FybmluZ3MsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFBhcnNpbmdXYXJuaW5nc0RpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisKKyAgICAgICAgc2VsZi53YXJuaW5ncyA9IHdhcm5pbmdzCisgICAgICAgIHNlbGYud2FybmluZ19vbiA9IDAKKyAgICAgICAgc2VsZi53YXJuX25iID0gbGVuKHdhcm5pbmdzKQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgY2FuY2VsX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmRlc3Ryb3koKQorCisgICAgZGVmIHByZXZpb3VzX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLndhcm5pbmdfb24gPSBzZWxmLndhcm5pbmdfb24gLSAxCisgICAgICAgIHNlbGYucmVmcmVzaF9jb21wb25lbnRzKCkKKworICAgIGRlZiBuZXh0X2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLndhcm5pbmdfb24gPSBzZWxmLndhcm5pbmdfb24gKyAxCisgICAgICAgIHNlbGYucmVmcmVzaF9jb21wb25lbnRzKCkKKworICAgIGRlZiByZWZyZXNoX2NvbXBvbmVudHMoc2VsZik6CisgICAgICAgIGxibCA9IHNlbGYud2FybmluZ3Nbc2VsZi53YXJuaW5nX29uXQorICAgICAgICAjd2hlbiB0aGUgd2FybmluZyB0ZXh0IGhhcyBtb3JlIHRoYW4gNDAwIGNoYXJzLCBpdCB1c2VzIGEgc2Nyb2xsIGJhcgorICAgICAgICBpZiAwPD0gbGVuKGxibCkgPCA0MDA6CisgICAgICAgICAgICBzZWxmLndhcm5pbmdfbGFiZWwuc2V0X3NpemVfcmVxdWVzdCgzMjAsIDIzMCkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfdXNlX21hcmt1cChUcnVlKQorICAgICAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfbWFya3VwKGxibCkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfcHJvcGVydHkoInlhbGlnbiIsIDAuMDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisgICAgICAgICAgICBzZWxmLnRleHRXaW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfd3JhcF9tb2RlKGd0ay5XUkFQX1dPUkQpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2V0X2N1cnNvcl92aXNpYmxlKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5tc2dWaWV3LnNldF9zaXplX3JlcXVlc3QoMzIwLCAyMzApCisgICAgICAgICAgICBzZWxmLmJ1ZiA9IGd0ay5UZXh0QnVmZmVyKCkKKyAgICAgICAgICAgIHNlbGYuYnVmLnNldF90ZXh0KGxibCkKKyAgICAgICAgICAgIHNlbGYubXNnVmlldy5zZXRfYnVmZmVyKHNlbGYuYnVmKQorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LmFkZChzZWxmLm1zZ1ZpZXcpCisgICAgICAgICAgICBzZWxmLm1zZ1ZpZXcuc2hvdygpCisKKyAgICAgICAgaWYgc2VsZi53YXJuaW5nX29uPT0wOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19idXR0b24uc2V0X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKworICAgICAgICBpZiBzZWxmLndhcm5pbmdfb249PXNlbGYud2Fybl9uYi0xOgorICAgICAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICAgICAgaWYgc2VsZi53YXJuX25iPjE6CisgICAgICAgICAgICBzZWxmLmhlYWRpbmcgPSAiV2FybmluZyAiICsgc3RyKHNlbGYud2FybmluZ19vbiArIDEpICsgIiBvZiAiICsgc3RyKHNlbGYud2Fybl9uYikKKyAgICAgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbC5zZXRfbWFya3VwKCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPiVzPC9zcGFuPicgJSBzZWxmLmhlYWRpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhlYWRpbmcgPSAiV2FybmluZyIKKyAgICAgICAgICAgIHNlbGYuaGVhZGluZ19sYWJlbC5zZXRfbWFya3VwKCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPiVzPC9zcGFuPicgJSBzZWxmLmhlYWRpbmcpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICAgICAgaWYgMDw9IGxlbihsYmwpIDwgNDAwOgorICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93LmhpZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLmhpZGUoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCgzNTAsIDM1MCkKKyAgICAgICAgc2VsZi5oZWFkaW5nX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5oZWFkaW5nX2xhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi53YXJuaW5nX2xhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgIHNlbGYud2FybmluZ19sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIHNlbGYudGV4dFdpbmRvdyA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUoMSwgMTAsIEZhbHNlKQorCisgICAgICAgIGNhbmNlbF9idXR0b24gPSBndGsuQnV0dG9uKCkKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5zZXRfbGFiZWwoIkNsb3NlIikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5jYW5jZWxfYnV0dG9uX2NiKQorICAgICAgICBjYW5jZWxfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBpbWFnZTEgPSBndGsuaW1hZ2VfbmV3X2Zyb21fc3RvY2soZ3RrLlNUT0NLX0dPX0JBQ0ssIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorICAgICAgICBpbWFnZTEuc2hvdygpCisgICAgICAgIGJveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBib3guc2hvdygpCisgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLmFkZChib3gpCisgICAgICAgIGxibCA9IGd0ay5MYWJlbCgiUHJldmlvdXMiKQorICAgICAgICBsYmwuc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGltYWdlMSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTMpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGxibCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz0zKQorICAgICAgICBzZWxmLnByZXZpb3VzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5wcmV2aW91c19idXR0b25fY2IpCisgICAgICAgIHNlbGYucHJldmlvdXNfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICBzZWxmLm5leHRfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIGltYWdlMiA9IGd0ay5pbWFnZV9uZXdfZnJvbV9zdG9jayhndGsuU1RPQ0tfR09fRk9SV0FSRCwgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIGltYWdlMi5zaG93KCkKKyAgICAgICAgYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIGJveC5zaG93KCkKKyAgICAgICAgc2VsZi5uZXh0X2J1dHRvbi5hZGQoYm94KQorICAgICAgICBsYmwgPSBndGsuTGFiZWwoIk5leHQiKQorICAgICAgICBsYmwuc2hvdygpCisgICAgICAgIGJveC5wYWNrX3N0YXJ0KGxibCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSwgcGFkZGluZz0zKQorICAgICAgICBib3gucGFja19zdGFydChpbWFnZTIsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0zKQorICAgICAgICBzZWxmLm5leHRfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLm5leHRfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLm5leHRfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICAjd2hlbiB0aGVyZSBtb3JlIHRoYW4gb25lIHdhcm5pbmcsIHdlIG5lZWQgInByZXZpb3VzIiBhbmQgIm5leHQiIGJ1dHRvbgorICAgICAgICBpZiBzZWxmLndhcm5fbmI+MToKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYuaGVhZGluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi53YXJuaW5nX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnRleHRXaW5kb3csIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIHRhYmxlLmF0dGFjaChjYW5jZWxfYnV0dG9uLCA2LCA3LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYucHJldmlvdXNfYnV0dG9uLCA3LCA4LCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYubmV4dF9idXR0b24sIDgsIDksIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisgICAgICAgICAgICBzZWxmLnZib3gucGFja19lbmQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYuaGVhZGluZ19sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi53YXJuaW5nX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzZWxmLnRleHRXaW5kb3csIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgICAgIGNhbmNlbF9idXR0b24gPSBzZWxmLmFkZF9idXR0b24oIkNsb3NlIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oY2FuY2VsX2J1dHRvbikKKworICAgICAgICBzZWxmLnJlZnJlc2hfY29tcG9uZW50cygpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3BlcnR5ZGlhbG9nLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm9wZXJ0eWRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWI5Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9wcm9wZXJ0eWRpYWxvZy5weQpAQCAtMCwwICsxLDQzNyBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgZ3RrCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBnbGliCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5zZXR0aW5nc3VpaGVscGVyIGltcG9ydCBTZXR0aW5nc1VJSGVscGVyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzbWVzc2FnZWRpYWxvZyBpbXBvcnQgQ3J1bWJzTWVzc2FnZURpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmxheWVyc2VsZWN0aW9uZGlhbG9nIGltcG9ydCBMYXllclNlbGVjdGlvbkRpYWxvZworCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgUHJvcGVydHlEaWFsb2coQ3J1bWJzRGlhbG9nKToKKwkKKwlkZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIHBhcmVudCwgaW5mb3JtYXRpb24sIGZsYWdzLCBidXR0b25zPU5vbmUpOgorCQkKKwkJc3VwZXIoUHJvcGVydHlEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYucHJvcGVydGllcyA9IGluZm9ybWF0aW9uCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5wcm9wZXJ0aWVzKSA9PSAxMDoKKwkJICAgICAgICBzZWxmLmNyZWF0ZV9yZWNpcGVfdmlzdWFsX2VsZW1lbnRzKCkKKyAgICAgICAgICAgICAgICBlbGlmIGxlbihzZWxmLnByb3BlcnRpZXMpID09IDU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9wYWNrYWdlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX2luZm9ybWF0aW9uX3Zpc3VhbF9lbGVtZW50cygpCisKKworICAgICAgICBkZWYgY3JlYXRlX2luZm9ybWF0aW9uX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKworICAgICAgICAgICAgICAgIEhPQl9JQ09OX0JBU0VfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAoImljb25zLyIpKQorICAgICAgICAgICAgICAgIElDT05fUEFDS0FHRVNfRElTUExBWV9GSUxFICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19kaXNwbGF5LnBuZycpKQorCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQorCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSgxLDEsRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfcm93X3NwYWNpbmdzKDApCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfY29sX3NwYWNpbmdzKDApCisKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlID0gZ3RrLkltYWdlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlLnNldF9mcm9tX2ZpbGUoSUNPTl9QQUNLQUdFU19ESVNQTEFZX0ZJTEUpCisgICAgICAgICAgICAgICAgc2VsZi5pbWFnZS5zZXRfcHJvcGVydHkoInhhbGlnbiIsMCkKKyAgICAgICAgICAgICAgICAjc2VsZi52Ym94LmFkZChzZWxmLmltYWdlKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfaW5mbyA9IHNlbGYucHJvcGVydGllcy5zcGxpdCgiKiIpWzBdCisgICAgICAgICAgICAgICAgaW5mbyA9IHNlbGYucHJvcGVydGllcy5zcGxpdCgiKiIpWzFdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdmJveCA9IGd0ay5WQm94KFRydWUsIHNwYWNpbmc9MzApICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGltYWdlX2luZm8pCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisKKyAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYuaW5mb19sYWJlbC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbmZvX2xhYmVsLnNldF9tYXJrdXAoaW5mbykKKyAgICAgICAgICAgICAgICBzZWxmLmluZm9fbGFiZWwuc2V0X3Byb3BlcnR5KCJ5YWxpZ24iLCAwLjUpCisKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmltYWdlLCAwLDEsMCwxLCB4b3B0aW9ucz1ndGsuRklMTHxndGsuRVhQQU5ELCB5b3B0aW9ucz1ndGsuRklMTCx4cGFkZGluZz01LHlwYWRkaW5nPTUpCisgICAgICAgICAgICAgICAgc2VsZi50YWJsZS5hdHRhY2goc2VsZi5sYWJlbF9zaG9ydCwgMCwxLDAsMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwseHBhZGRpbmc9NDAseXBhZGRpbmc9NSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmluZm9fbGFiZWwsIDAsMSwxLDIsIHhvcHRpb25zPWd0ay5GSUxMfGd0ay5FWFBBTkQsIHlvcHRpb25zPWd0ay5GSUxMLHhwYWRkaW5nPTQwLHlwYWRkaW5nPTEwKQorICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYudGFibGUpCisgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0KCdkZWxldGUtZXZlbnQnLCBsYW1iZGEgdywgZTogc2VsZi5kZXN0cm95KCkgb3IgVHJ1ZSkgCisKKyAgICAgICAgZGVmIHRyZWVWaWV3VG9vbHRpcCggc2VsZiwgd2lkZ2V0LCBlLCB0b29sdGlwcywgY2VsbCwgZW1wdHlUZXh0PSIiICk6CisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLGNvbCx4LHkpID0gd2lkZ2V0LmdldF9wYXRoX2F0X3BvcyggaW50KGUueCksIGludChlLnkpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ID0gd2lkZ2V0LmdldF9tb2RlbCgpLmdldF9pdGVyKHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHdpZGdldC5nZXRfbW9kZWwoKS5nZXRfdmFsdWUoaXQsY2VsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGYudG9vbHRpcF9pdGVtczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHMuc2V0X3RpcCh3aWRnZXQsIHNlbGYudG9vbHRpcF9pdGVtc1t2YWx1ZV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBzLmVuYWJsZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5zZXRfdGlwKHdpZGdldCwgZW1wdHlUZXh0KQorICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwcy5zZXRfdGlwKHdpZGdldCwgZW1wdHlUZXh0KQorCisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZiBjcmVhdGVfcGFja2FnZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisKKyAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorCisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYucHJvcGVydGllc1snbmFtZSddCisgICAgICAgICAgICAgICAgYmluYiA9IHNlbGYucHJvcGVydGllc1snYmluYiddCisgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYucHJvcGVydGllc1snc2l6ZSddCisgICAgICAgICAgICAgICAgcmVjaXBlID0gc2VsZi5wcm9wZXJ0aWVzWydyZWNpcGUnXQorICAgICAgICAgICAgICAgIGZpbGVfbGlzdCA9IGpzb24ubG9hZHMoc2VsZi5wcm9wZXJ0aWVzWydmaWxlc19saXN0J10pCisKKyAgICAgICAgICAgICAgICBmaWxlc190ZW1wID0gJycKKyAgICAgICAgICAgICAgICBwYXRoc190ZW1wID0gJycKKyAgICAgICAgICAgICAgICBmaWxlc19iaW5iID0gW10KKyAgICAgICAgICAgICAgICBwYXRoc19iaW5iID0gW10KKworICAgICAgICAgICAgICAgIHNlbGYudG9vbHRpcF9pdGVtcyA9IHt9CisKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXNpemFibGUoRmFsc2UpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgI2NsZWFuaW5nIG91dCB0aGUgcmVjaXBlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgcmVjaXBlID0gcmVjaXBlLnNwbGl0KCIrIilbMF0KKworICAgICAgICAgICAgICAgIHZib3ggPSBndGsuVkJveChUcnVlLHNwYWNpbmcgPSAwKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkFNRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5OYW1lOiA8L3NwYW4+IiArIG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNJWkUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5TaXplOiA8L3NwYW4+IiArIHNpemUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRUNJUEUgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5SZWNpcGU6IDwvc3Bhbj4iICsgcmVjaXBlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCSU5CIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBiaW5iICE9ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkJyb3VnaHQgaW4gYnk6IDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zaXplX3JlcXVlc3QoMzAwLC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoYmluYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRklMRVMgQlJPVUdIVCBCWSBQQUNLQUdFUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0V2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgMTcwKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZmlsZXNfc3RvcmUgPSBndGsuTGlzdFN0b3JlKHN0cikKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYgPSBndGsuVHJlZVZpZXcoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X3J1bGVzX2hpbnQoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZWZpbGVzX3R2LnNldF9oZWFkZXJzX3Zpc2libGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFdpbmRvdy5hZGQoc2VsZi5wYWNrYWdlZmlsZXNfdHYpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdQYWNrYWdlIGZpbGVzJywgc2VsZi5jZWxsMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKHNlbGYuY2VsbDEsIHNlbGYucmVnZXhfZmllbGQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VmaWxlc190di5hcHBlbmRfY29sdW1uKGNvbDEpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gZmlsZV9saXN0LmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc29ydCgpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxlbihpdGVtKSA+IDM1OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtWzpsZW4oaXRlbSkvMl0gKyAiIiArIGl0ZW1bbGVuKGl0ZW0pLzIrMTpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihpdGVtKSA9PSAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbVs6bGVuKGl0ZW0pLzJdICsgIi4uLiIgKyBpdGVtW2xlbihpdGVtKS8yKzM6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9vbHRpcF9pdGVtc1tpdGVtXSA9IGZ1bGxwYXRoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZWZpbGVzX3N0b3JlLmFwcGVuZChbc3RyKGl0ZW0pXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X21vZGVsKHBhY2thZ2VmaWxlc19zdG9yZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgdGlwcyA9IGd0ay5Ub29sdGlwcygpCisgICAgICAgICAgICAgICAgICAgICAgICB0aXBzLnNldF90aXAoc2VsZi5wYWNrYWdlZmlsZXNfdHYsICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuY29ubmVjdCgibW90aW9uLW5vdGlmeS1ldmVudCIsIHNlbGYudHJlZVZpZXdUb29sdGlwLCB0aXBzLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlZmlsZXNfdHYuc2V0X2V2ZW50cyhndGsuZ2RrLlBPSU5URVJfTU9USU9OX01BU0spCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi50ZXh0V2luZG93KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICBzZWxmLnZib3guc2hvd19hbGwoKQorCisKKyAgICAgICAgZGVmIHJlZ2V4X2ZpZWxkKHNlbGYsIGNvbHVtbiwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApKQorICAgICAgICAgICAgICAgIHJldHVybgorCisKKwlkZWYgY3JlYXRlX3JlY2lwZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisKKyAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gc2VsZi5wcm9wZXJ0aWVzWydzdW1tYXJ5J10KKwkJbmFtZSA9IHNlbGYucHJvcGVydGllc1snbmFtZSddCisJCXZlcnNpb24gPSBzZWxmLnByb3BlcnRpZXNbJ3ZlcnNpb24nXQorCQlyZXZpc2lvbiA9IHNlbGYucHJvcGVydGllc1sncmV2aXNpb24nXQorCQliaW5iID0gc2VsZi5wcm9wZXJ0aWVzWydiaW5iJ10KKwkJZ3JvdXAgPSBzZWxmLnByb3BlcnRpZXNbJ2dyb3VwJ10KKwkJbGljZW5zZSA9IHNlbGYucHJvcGVydGllc1snbGljZW5zZSddCisJCWhvbWVwYWdlID0gc2VsZi5wcm9wZXJ0aWVzWydob21lcGFnZSddCisJCWJ1Z3RyYWNrZXIgPSBzZWxmLnByb3BlcnRpZXNbJ2J1Z3RyYWNrZXInXQorCQlkZXNjcmlwdGlvbiA9IHNlbGYucHJvcGVydGllc1snZGVzY3JpcHRpb24nXQorCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzaXphYmxlKEZhbHNlKQorCQkKKyAgICAgICAgICAgICAgICAjY2xlYW5pbmcgb3V0IHRoZSB2ZXJzaW9uIHZhcmlhYmxlIGFuZCBhbHNvIHRoZSBzdW1tYXJ5CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIjoiKVsxXQorICAgICAgICAgICAgICAgIGlmIGxlbih2ZXJzaW9uKSA+IDMwOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24uc3BsaXQoIisiKVswXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi5zcGxpdCgiLSIpWzBdCisgICAgICAgICAgICAgICAgbGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgiJiIgLCAiYW5kIikKKyAgICAgICAgICAgICAgICBpZiAoaG9tZXBhZ2UgPT0gJycpOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZXBhZ2UgPSAndW5rbm93bicKKyAgICAgICAgICAgICAgICBpZiAoYnVndHJhY2tlciA9PSAnJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBidWd0cmFja2VyID0gJ3Vua25vd24nCisgICAgICAgICAgICAgICAgc3VtbWFyeSA9IHN1bW1hcnkuc3BsaXQoIisiKVswXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICNjYWxjdWxhdGluZyB0aGUgcm93cyBuZWVkZWQgZm9yIHRoZSB0YWJsZQorICAgICAgICAgICAgICAgIGJpbmJfaXRlbXNfY291bnQgPSBsZW4oYmluYi5zcGxpdCgnLCcpKQorICAgICAgICAgICAgICAgIGJpbmJfaXRlbXMgPSBiaW5iLnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQorCQl2Ym94ID0gZ3RrLlZCb3goRmFsc2Usc3BhY2luZyA9IDApCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNVTU1BUlkgTEFCRUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzdW1tYXJ5ICE9ICcnOiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfd2lkdGhfY2hhcnMoMzcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxiPiIgKyBzdW1tYXJ5ICsgIjwvYj4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkFNRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5OYW1lOiA8L3NwYW4+IiArIG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBWRVJTSU9OIFJPVyArIENPTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+VmVyc2lvbjogPC9zcGFuPiIgKyB2ZXJzaW9uKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVWSVNJT04gUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9tYXJrdXAoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5SZXZpc2lvbjogPC9zcGFuPiIgKyByZXZpc2lvbikKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHUk9VUCBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+R3JvdXA6IDwvc3Bhbj4iICsgZ3JvdXApCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBIT01FUEFHRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBob21lcGFnZSAhPSAndW5rbm93bic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGhvbWVwYWdlKSA+IDM1OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X21hcmt1cCgiPGEgaHJlZj1cIiIgKyBob21lcGFnZSArICJcIj4iICsgaG9tZXBhZ2VbMDozNV0gKyAiLi4uIiArICI8L2E+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKCI8YSBocmVmPVwiIiArIGhvbWVwYWdlICsgIlwiPiIgKyBob21lcGFnZVswOjYwXSArICI8L2E+IikKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj5Ib21lcGFnZTogPC9iPiIpICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEJVR1RSQUNLRVIgUk9XICsgQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBidWd0cmFja2VyICE9ICd1bmtub3duJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mbyA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVndHJhY2tlcikgPiAzNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgYnVndHJhY2tlciArICJcIj4iICsgYnVndHJhY2tlclswOjM1XSArICIuLi4iICsgIjwvYT4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoIjxhIGhyZWY9XCIiICsgYnVndHJhY2tlciArICJcIj4iICsgYnVndHJhY2tlclswOjYwXSArICI8L2E+IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApICAKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8Yj5CdWd0cmFja2VyOiA8L2I+IikgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX2luZm8pCisKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTElDRU5TRSBST1cgKyBDT0wgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8gPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfc2VsZWN0YWJsZShUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAobGljZW5zZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydCA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfc2VsZWN0YWJsZShUcnVlKSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9saW5lX3dyYXAoVHJ1ZSkgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+TGljZW5zZTogPC9zcGFuPiIpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfcHJvcGVydHkoInhhbGlnbiIsIDApCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9pbmZvKQorCisgICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklOQiBST1crQ09MICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGJpbmIgIT0gJyc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+QnJvdWdodCBpbiBieTogPC9zcGFuPiIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mbyA9IGd0ay5MYWJlbCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3NlbGVjdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfd2lkdGhfY2hhcnMoMzYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYmluYikgPiAyMDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxlZF93aW5kb3cuc2V0X3BvbGljeShndGsuUE9MSUNZX05FVkVSLGd0ay5QT0xJQ1lfQUxXQVlTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwxMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9tYXJrdXAoYmluYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X3BhZGRpbmcoNiw2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfYWxpZ25tZW50KDAsMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGRfd2l0aF92aWV3cG9ydChzZWxmLmxhYmVsX2luZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52Ym94LmFkZChzY3JvbGxlZF93aW5kb3cpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfaW5mby5zZXRfbWFya3VwKGJpbmIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9pbmZvLnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX2luZm8uc2V0X2xpbmVfd3JhcChUcnVlKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNlbGYubGFiZWxfaW5mbykKKworICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERFU0NSSVBUSU9OIFRBRyBST1cgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X2xpbmVfd3JhcChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X21hcmt1cCgiPHNwYW4gd2VpZ2h0PVwiYm9sZFwiPkRlc2NyaXB0aW9uIDwvc3Bhbj4iKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWxfc2hvcnQuc2V0X3Byb3BlcnR5KCJ4YWxpZ24iLCAwKQorICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBERVNDUklQVElPTiBJTkZPUk1BVElPTiBST1cgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaGJveCA9IGd0ay5IQm94KFRydWUsc3BhY2luZyA9IDApCisKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0ID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9zZWxlY3RhYmxlKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfd2lkdGhfY2hhcnMoMzYpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRlc2NyaXB0aW9uKSA+IDIwMDoKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93ID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUixndGsuUE9MSUNZX0FMV0FZUykKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsZWRfd2luZG93LnNldF9zaXplX3JlcXVlc3QoMTAwLDEwMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wYWRkaW5nKDYsNikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfYWxpZ25tZW50KDAsMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGVkX3dpbmRvdy5hZGRfd2l0aF92aWV3cG9ydChzZWxmLmxhYmVsX3Nob3J0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnZib3guYWRkKHNjcm9sbGVkX3dpbmRvdykKKyAgICAgICAgICAgICAgICBlbHNlOiAgICAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbWFya3VwKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxhYmVsX3Nob3J0LnNldF9wcm9wZXJ0eSgieGFsaWduIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sYWJlbF9zaG9ydC5zZXRfbGluZV93cmFwKFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudmJveC5hZGQoc2VsZi5sYWJlbF9zaG9ydCkKKworICAgICAgICAgICAgICAgIHNlbGYudmJveC5zaG93X2FsbCgpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3h5ZGV0YWlsc2RpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcHJveHlkZXRhaWxzZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZTdkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3Byb3h5ZGV0YWlsc2RpYWxvZy5weQpAQCAtMCwwICsxLDkwIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFByb3h5RGV0YWlsc0RpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgdXNlciwgcGFzc3dkLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zPU5vbmUpOgorICAgICAgICBzdXBlcihQcm94eURldGFpbHNEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorICAgICAgICBzZWxmLmNvbm5lY3QoInJlc3BvbnNlIiwgc2VsZi5yZXNwb25zZV9jYikKKworICAgICAgICBzZWxmLmF1dGggPSBub3QgKHVzZXIgPT0gTm9uZSBvciBwYXNzd2QgPT0gTm9uZSBvciB1c2VyID09ICIiKQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyIG9yICIiCisgICAgICAgIHNlbGYucGFzc3dkID0gcGFzc3dkIG9yICIiCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzIG9uIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5jcmVhdGVfdmlzdWFsX2VsZW1lbnRzKCkKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3ggPSBndGsuQ2hlY2tCdXR0b24oIlVzZSBhdXRoZW50aWNhdGlvbiIpCisgICAgICAgIHNlbGYuYXV0aF9jaGVja2JveC5zZXRfdG9vbHRpcF90ZXh0KCJDaGVjayB0aGlzIGJveCB0byBzZXQgdGhlIHVzZXJuYW1lIGFuZCB0aGUgcGFzc3dvcmQiKQorICAgICAgICBzZWxmLmF1dGhfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYuYXV0aF9jaGVja2JveC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi5hdXRoX2NoZWNrYm94X3RvZ2dsZWRfY2IpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYuYXV0aF9jaGVja2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgNikKKyAgICAgICAgc2VsZi51c2VyX2xhYmVsID0gZ3RrLkxhYmVsKCJVc2VybmFtZToiKQorICAgICAgICBzZWxmLnVzZXJfdGV4dCA9IGd0ay5FbnRyeSgpCisgICAgICAgIHNlbGYudXNlcl90ZXh0LnNldF90ZXh0KHNlbGYudXNlcikKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYudXNlcl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBoYm94LnBhY2tfZW5kKHNlbGYudXNlcl90ZXh0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KGhib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYucGFzc3dkX2xhYmVsID0gZ3RrLkxhYmVsKCJQYXNzd29yZDoiKQorICAgICAgICBzZWxmLnBhc3N3ZF90ZXh0ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dC5zZXRfdGV4dChzZWxmLnBhc3N3ZCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYucGFzc3dkX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGhib3gucGFja19lbmQoc2VsZi5wYXNzd2RfdGV4dCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX2F1dGhfY29tcG9uZW50cygpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHJlZnJlc2hfYXV0aF9jb21wb25lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLnVzZXJfbGFiZWwuc2V0X3NlbnNpdGl2ZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYudXNlcl90ZXh0LnNldF9lZGl0YWJsZShzZWxmLmF1dGgpCisgICAgICAgIHNlbGYudXNlcl90ZXh0LnNldF9zZW5zaXRpdmUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnBhc3N3ZF9sYWJlbC5zZXRfc2Vuc2l0aXZlKHNlbGYuYXV0aCkKKyAgICAgICAgc2VsZi5wYXNzd2RfdGV4dC5zZXRfZWRpdGFibGUoc2VsZi5hdXRoKQorICAgICAgICBzZWxmLnBhc3N3ZF90ZXh0LnNldF9zZW5zaXRpdmUoc2VsZi5hdXRoKQorCisgICAgZGVmIGF1dGhfY2hlY2tib3hfdG9nZ2xlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmF1dGggPSBzZWxmLmF1dGhfY2hlY2tib3guZ2V0X2FjdGl2ZSgpCisgICAgICAgIHNlbGYucmVmcmVzaF9hdXRoX2NvbXBvbmVudHMoKQorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfT0s6CisgICAgICAgICAgICBpZiBzZWxmLmF1dGg6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyID0gc2VsZi51c2VyX3RleHQuZ2V0X3RleHQoKQorICAgICAgICAgICAgICAgIHNlbGYucGFzc3dkID0gc2VsZi5wYXNzd2RfdGV4dC5nZXRfdGV4dCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudXNlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnBhc3N3ZCA9IE5vbmUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcmV0cmlldmVpbWFnZWRpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvcmV0cmlldmVpbWFnZWRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE3MTM5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9yZXRyaWV2ZWltYWdlZGlhbG9nLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IENyaXN0aWFuYSBWb2ljdSA8Y3Jpc3RpYW5hLnZvaWN1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKKworY2xhc3MgUmV0cmlldmVJbWFnZURpYWxvZyAoZ3RrLkZpbGVDaG9vc2VyRGlhbG9nKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGlhbG9nIHRoYXQgcGVybWl0cyB0byByZXRyaWV2ZQorICAgIGEgY3VzdG9tIGltYWdlIHNhdmVkIHByZXZpb3VzbHkgZnJvbSBIb2IuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSx0aXRsZSwgcGFyZW50LCBmbGFncywgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoUmV0cmlldmVJbWFnZURpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIE5vbmUsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisgICAgICAgICAgICAoZ3RrLlNUT0NLX0NBTkNFTCwgZ3RrLlJFU1BPTlNFX0NBTkNFTCxndGsuU1RPQ0tfT1BFTiwgZ3RrLlJFU1BPTlNFX09LKSkKKyAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKworICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMgb24gdGhlIGRpYWxvZworICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0X3Nob3dfaGlkZGVuKFRydWUpCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfcmVzcG9uc2UoZ3RrLlJFU1BPTlNFX09LKQorICAgICAgICBzZWxmLnNldF9jdXJyZW50X2ZvbGRlcihzZWxmLmRpcmVjdG9yeSkKKworICAgICAgICB2Ym94ID0gc2VsZi5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXQorICAgICAgICBmb3IgY2hpbGQgaW4gdmJveC5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMF0ucmVtb3ZlKGNoaWxkKQorCisgICAgICAgIGxhYmVsMSA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsMS5zZXRfdGV4dCgiRmlsZSBzeXN0ZW0iICsgc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIGxhYmVsMS5zaG93KCkKKyAgICAgICAgdmJveC5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVswXS5wYWNrX3N0YXJ0KGxhYmVsMSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTApCisgICAgICAgIHZib3guZ2V0X2NoaWxkcmVuKClbMF0uZ2V0X2NoaWxkcmVuKClbMV0uZ2V0X2NoaWxkcmVuKClbMF0uaGlkZSgpCisKKyAgICAgICAgc2VsZi5nZXRfY2hpbGRyZW4oKVswXS5nZXRfY2hpbGRyZW4oKVsxXS5nZXRfY2hpbGRyZW4oKVswXS5zZXRfbGFiZWwoIlNlbGVjdCIpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NhdmVpbWFnZWRpYWxvZy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9oaWcvc2F2ZWltYWdlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOTVmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NhdmVpbWFnZWRpYWxvZy5weQpAQCAtMCwwICsxLDE1OSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgQ3Jpc3RpYW5hIFZvaWN1IDxjcmlzdGlhbmEudm9pY3VAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNkaWFsb2cgaW1wb3J0IENydW1ic0RpYWxvZworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic21lc3NhZ2VkaWFsb2cgaW1wb3J0IENydW1ic01lc3NhZ2VEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iQnV0dG9uCisKK2NsYXNzIFNhdmVJbWFnZURpYWxvZyAoQ3J1bWJzRGlhbG9nKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIGEgZGlhbG9nIHRoYXQgcGVybWl0cyB0byBzYXZlCisgICAgYSBjdXN0b20gaW1hZ2UgaW4gYSBwcmVkZWZpbmVkIGRpcmVjdG9yeS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5LCBuYW1lLCBkZXNjcmlwdGlvbiwgdGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnM9Tm9uZSk6CisgICAgICAgIHN1cGVyKFNhdmVJbWFnZURpYWxvZywgc2VsZikuX19pbml0X18odGl0bGUsIHBhcmVudCwgZmxhZ3MsIGJ1dHRvbnMpCisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuYnVpbGRlciA9IHBhcmVudAorICAgICAgICBzZWxmLm5hbWVfZmllbGQgPSBuYW1lCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZmllbGQgPSBkZXNjcmlwdGlvbgorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9yZXNwb25zZShndGsuUkVTUE9OU0VfT0spCisgICAgICAgIHNlbGYudmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8Yj5OYW1lPC9iPiIpCisgICAgICAgIHN1Yl9sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIGNvbnRlbnQgPSAiSW1hZ2UgcmVjaXBlIG5hbWVzIHNob3VsZCBiZSBhbGwgbG93ZXJjYXNlIGFuZCBpbmNsdWRlIG9ubHkgYWxwaGFudW1lcmljXG4iCisgICAgICAgIGNvbnRlbnQgKz0gImNoYXJhY3RlcnMuIFRoZSBvbmx5IHNwZWNpYWwgY2hhcmFjdGVyIHlvdSBjYW4gdXNlIGlzIHRoZSBBU0NJSSBoeXBoZW4gKC0pLiIKKyAgICAgICAgc3ViX2xhYmVsLnNldF9tYXJrdXAoY29udGVudCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5LnNldF90ZXh0KHNlbGYubmFtZV9maWVsZCkKKyAgICAgICAgc2VsZi5uYW1lX2VudHJ5LnNldF9zaXplX3JlcXVlc3QoMzUwLDMwKQorICAgICAgICBzZWxmLm5hbWVfZW50cnkuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYubmFtZV9lbnRyeV9jaGFuZ2VkKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc3ViX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5uYW1lX2VudHJ5LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgMTIpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8Yj5EZXNjcmlwdGlvbjwvYj4gKG9wdGlvbmFsKSIpCisgICAgICAgIHN1Yl9sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfYWxpZ25tZW50KDAsIDApCisgICAgICAgIHN1Yl9sYWJlbC5zZXRfbWFya3VwKCJUaGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiAxNTAgY2hhcmFjdGVycyBsb25nLiIpCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZW50cnkgPSBndGsuVGV4dFZpZXcoKQorICAgICAgICBkZXNjcmlwdGlvbl9idWZmZXIgPSBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LmdldF9idWZmZXIoKQorICAgICAgICBkZXNjcmlwdGlvbl9idWZmZXIuc2V0X3RleHQoc2VsZi5kZXNjcmlwdGlvbl9maWVsZCkKKyAgICAgICAgZGVzY3JpcHRpb25fYnVmZmVyLmNvbm5lY3QoImluc2VydC10ZXh0Iiwgc2VsZi5saW1pdF9kZXNjcmlwdGlvbl9sZW5ndGgpCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25fZW50cnkuc2V0X3dyYXBfbW9kZShndGsuV1JBUF9XT1JEKQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2VudHJ5LnNldF9zaXplX3JlcXVlc3QoMzUwLDUwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc3ViX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5kZXNjcmlwdGlvbl9lbnRyeSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLnZib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMCwgMCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiWW91ciBpbWFnZSByZWNpcGUgd2lsbCBiZSBzYXZlZCB0bzoiKQorICAgICAgICBzdWJfbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzdWJfbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBzdWJfbGFiZWwuc2V0X21hcmt1cChzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHN1Yl9sYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDQsIFRydWUpCisKKyAgICAgICAgY2FuY2VsX2J1dHRvbiA9IGd0ay5CdXR0b24oKQorICAgICAgICBjYW5jZWxfYnV0dG9uLnNldF9sYWJlbCgiQ2FuY2VsIikKKyAgICAgICAgY2FuY2VsX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5jYW5jZWxfYnV0dG9uX2NiKQorICAgICAgICBjYW5jZWxfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTEwLCAzMCkKKworICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIHNlbGYuc2F2ZV9idXR0b24uc2V0X2xhYmVsKCJTYXZlIikKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5zYXZlX2J1dHRvbl9jYikKKyAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDExMCwgMzApCisgICAgICAgIGlmIHNlbGYubmFtZV9lbnRyeS5nZXRfdGV4dCgpID09ICcnOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorCisgICAgICAgIHRhYmxlLmF0dGFjaChjYW5jZWxfYnV0dG9uLCAyLCAzLCAwLCAxKQorICAgICAgICB0YWJsZS5hdHRhY2goc2VsZi5zYXZlX2J1dHRvbiwgMywgNCwgMCwgMSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgbGltaXRfZGVzY3JpcHRpb25fbGVuZ3RoKHNlbGYsIHRleHRidWZmZXIsIGl0ZXIsIHRleHQsIGxlbmd0aCk6CisgICAgICAgIGJ1ZmZlcl9ib3VuZHMgPSB0ZXh0YnVmZmVyLmdldF9ib3VuZHMoKQorICAgICAgICBlbnRpcmVfdGV4dCA9IHRleHRidWZmZXIuZ2V0X3RleHQoKmJ1ZmZlcl9ib3VuZHMpCisgICAgICAgIGVudGlyZV90ZXh0ICs9IHRleHQKKyAgICAgICAgaWYgbGVuKGVudGlyZV90ZXh0KT4xNTAgb3IgdGV4dD09IlxuIjoKKyAgICAgICAgICAgIHRleHRidWZmZXIuZW1pdF9zdG9wX2J5X25hbWUoImluc2VydC10ZXh0IikKKworICAgIGRlZiBuYW1lX2VudHJ5X2NoYW5nZWQoc2VsZiwgZW50cnkpOgorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBpZiB0ZXh0ID09ICcnOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisKKyAgICBkZWYgY2FuY2VsX2J1dHRvbl9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmRlc3Ryb3koKQorCisgICAgZGVmIHNhdmVfYnV0dG9uX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHRleHQgPSBzZWxmLm5hbWVfZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBuZXdfdGV4dCA9IHRleHQucmVwbGFjZSgiLSIsIiIpCisgICAgICAgIGRlc2NyaXB0aW9uX2J1ZmZlciA9IHNlbGYuZGVzY3JpcHRpb25fZW50cnkuZ2V0X2J1ZmZlcigpCisgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25fYnVmZmVyLmdldF90ZXh0KGRlc2NyaXB0aW9uX2J1ZmZlci5nZXRfc3RhcnRfaXRlcigpLGRlc2NyaXB0aW9uX2J1ZmZlci5nZXRfZW5kX2l0ZXIoKSkKKyAgICAgICAgaWYgbmV3X3RleHQuaXNsb3dlcigpIGFuZCBuZXdfdGV4dC5pc2FsbnVtKCk6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfZGV0YWlsc19wYWdlLmltYWdlX3NhdmVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmdlbmVyYXRlX25ld19pbWFnZShzZWxmLmRpcmVjdG9yeSt0ZXh0LCBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuc2V0X2luX2xpc3QodGV4dCwgZGVzY3JpcHRpb24pCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9pbWFnZSh0ZXh0KQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmltYWdlX2RldGFpbHNfcGFnZS5zaG93X3BhZ2Uoc2VsZi5idWlsZGVyLklNQUdFX0dFTkVSQVRFRCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5pbWFnZV9kZXRhaWxzX3BhZ2UubmFtZV9maWVsZF90ZW1wbGF0ZSA9IHRleHQKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5pbWFnZV9kZXRhaWxzX3BhZ2UuZGVzY3JpcHRpb25fZmllbGRfdGVtcGxhdGUgPSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgc2VsZi5kZXN0cm95KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2hvd19pbnZhbGlkX2lucHV0X2Vycm9yX2RpYWxvZygpCisKKyAgICBkZWYgc2hvd19pbnZhbGlkX2lucHV0X2Vycm9yX2RpYWxvZyhzZWxmKToKKyAgICAgICAgbGJsID0gIjxiPkludmFsaWQgY2hhcmFjdGVycyBpbiBpbWFnZSByZWNpcGUgbmFtZTwvYj4iCisgICAgICAgIG1zZyA9ICJJbWFnZSByZWNpcGUgbmFtZXMgc2hvdWxkIGJlIGFsbCBsb3dlcmNhc2UgYW5kXG4iCisgICAgICAgIG1zZyArPSAiaW5jbHVkZSBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiBUaGUgb25seVxuIgorICAgICAgICBtc2cgKz0gInNwZWNpYWwgY2hhcmFjdGVyIHlvdSBjYW4gdXNlIGlzIHRoZSBBU0NJSSBoeXBoZW4gKC0pLiIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX0VSUk9SLCBtc2cpCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisKKyAgICAgICAgcmVzID0gZGlhbG9nLnJ1bigpCisgICAgICAgIHNlbGYubmFtZV9lbnRyeS5ncmFiX2ZvY3VzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zZXR0aW5nc3VpaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjg1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NldHRpbmdzdWloZWxwZXIucHkKQEAgLTAsMCArMSwxMjIgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBvcworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JJbmZvQnV0dG9uLCBIb2JCdXR0b24sIEhvYkFsdEJ1dHRvbgorCisiIiIKK1RoZSBmb2xsb3dpbmcgYXJlIGNvbnZlbmllbmNlIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBHTk9NRSBISUcgY29tcGxpYW50CitCaXRCYWtlIEdVSSdzCitJbiBzdW1tYXJ5OiBzcGFjaW5nID0gMTJweCwgYm9yZGVyLXdpZHRoID0gNnB4CisiIiIKKworY2xhc3MgU2V0dGluZ3NVSUhlbHBlcigpOgorCisgICAgZGVmIGdlbl9sYWJlbF93aWRnZXQoc2VsZiwgY29udGVudCk6CisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLCAwKQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKGNvbnRlbnQpCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGRlZiBnZW5fbGFiZWxfaW5mb193aWRnZXQoc2VsZiwgY29udGVudCwgdG9vbHRpcCk6CisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoY29udGVudCkKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKKyAgICAgICAgdGFibGUuYXR0YWNoKGxhYmVsLCAwLCAxLCAwLCAxLCB4b3B0aW9ucz1ndGsuRklMTCkKKyAgICAgICAgdGFibGUuYXR0YWNoKGluZm8sIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMLCB4cGFkZGluZz0xMCkKKyAgICAgICAgcmV0dXJuIHRhYmxlCisKKyAgICBkZWYgZ2VuX3NwaW5uZXJfd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIGxvd2VyLCB1cHBlciwgdG9vbHRpcD0iIik6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGFkanVzdCA9IGd0ay5BZGp1c3RtZW50KHZhbHVlPWNvbnRlbnQsIGxvd2VyPWxvd2VyLCB1cHBlcj11cHBlciwgc3RlcF9pbmNyPTEpCisgICAgICAgIHNwaW5uZXIgPSBndGsuU3BpbkJ1dHRvbihhZGp1c3RtZW50PWFkanVzdCwgY2xpbWJfcmF0ZT0xLCBkaWdpdHM9MCkKKworICAgICAgICBzcGlubmVyLnNldF92YWx1ZShjb250ZW50KQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoc3Bpbm5lciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIGhib3gucGFja19zdGFydChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaGJveC5zaG93X2FsbCgpCisgICAgICAgIHJldHVybiBoYm94LCBzcGlubmVyCisKKyAgICBkZWYgZ2VuX2NvbWJvX3dpZGdldChzZWxmLCBjdXJyX2l0ZW0sIGFsbF9pdGVtLCB0b29sdGlwPSIiKToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgY29tYm8gPSBndGsuY29tYm9fYm94X25ld190ZXh0KCkKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGNvbWJvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgIGZvciBpdGVtIGluIGFsbF9pdGVtIG9yIFtdOgorICAgICAgICAgICAgY29tYm8uYXBwZW5kX3RleHQoaXRlbSkKKyAgICAgICAgICAgIGlmIGl0ZW0gPT0gY3Vycl9pdGVtOgorICAgICAgICAgICAgICAgIGNvbWJvLnNldF9hY3RpdmUoaW5kZXgpCisgICAgICAgICAgICBpbmRleCArPSAxCisKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcCwgc2VsZikKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94LnNob3dfYWxsKCkKKyAgICAgICAgcmV0dXJuIGhib3gsIGNvbWJvCisKKyAgICBkZWYgZW50cnlfd2lkZ2V0X3NlbGVjdF9wYXRoX2NiKHNlbGYsIGFjdGlvbiwgcGFyZW50LCBlbnRyeSk6CisgICAgICAgIGRpYWxvZyA9IGd0ay5GaWxlQ2hvb3NlckRpYWxvZygiIiwgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLkZJTEVfQ0hPT1NFUl9BQ1RJT05fU0VMRUNUX0ZPTERFUikKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgZGlhbG9nLnNldF9jdXJyZW50X2ZvbGRlcih0ZXh0IGlmIGxlbih0ZXh0KSA+IDAgZWxzZSBvcy5nZXRjd2QoKSkKKyAgICAgICAgYnV0dG9uID0gZGlhbG9nLmFkZF9idXR0b24oIkNhbmNlbCIsIGd0ay5SRVNQT05TRV9OTykKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJPcGVuIiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgSG9iQnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisgICAgICAgIHJlc3BvbnNlID0gZGlhbG9nLnJ1bigpCisgICAgICAgIGlmIHJlc3BvbnNlID09IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICBwYXRoID0gZGlhbG9nLmdldF9maWxlbmFtZSgpCisgICAgICAgICAgICBlbnRyeS5zZXRfdGV4dChwYXRoKQorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgIGRlZiBnZW5fZW50cnlfd2lkZ2V0KHNlbGYsIGNvbnRlbnQsIHBhcmVudCwgdG9vbHRpcD0iIiwgbmVlZF9idXR0b249VHJ1ZSk6CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGVudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgZW50cnkuc2V0X3RleHQoY29udGVudCkKKyAgICAgICAgZW50cnkuc2V0X3NpemVfcmVxdWVzdCgzNTAsMzApCisKKyAgICAgICAgaWYgbmVlZF9idXR0b246CisgICAgICAgICAgICB0YWJsZSA9IGd0ay5UYWJsZSgxLCAxMCwgRmFsc2UpCisgICAgICAgICAgICBoYm94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2goZW50cnksIDAsIDksIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisgICAgICAgICAgICBpbWFnZSA9IGd0ay5JbWFnZSgpCisgICAgICAgICAgICBpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfT1BFTixndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgICAgIG9wZW5fYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgICAgICBvcGVuX2J1dHRvbi5zZXRfaW1hZ2UoaW1hZ2UpCisgICAgICAgICAgICBvcGVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5lbnRyeV93aWRnZXRfc2VsZWN0X3BhdGhfY2IsIHBhcmVudCwgZW50cnkpCisgICAgICAgICAgICB0YWJsZS5hdHRhY2gob3Blbl9idXR0b24sIDksIDEwLCAwLCAxLCB4b3B0aW9ucz1ndGsuU0hSSU5LKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGVudHJ5LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIGlmIHRvb2x0aXAgIT0gIiI6CisgICAgICAgICAgICBpbmZvID0gSG9iSW5mb0J1dHRvbih0b29sdGlwLCBzZWxmKQorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBoYm94LnNob3dfYWxsKCkKKyAgICAgICAgcmV0dXJuIGhib3gsIGVudHJ5CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaGlnL3NpbXBsZXNldHRpbmdzZGlhbG9nLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zaW1wbGVzZXR0aW5nc2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWViM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hpZy9zaW1wbGVzZXR0aW5nc2RpYWxvZy5weQpAQCAtMCwwICsxLDg5MSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBoYXNobGliCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iSW5mb0J1dHRvbiwgSG9iQnV0dG9uLCBIb2JBbHRCdXR0b24gCitmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5zZXR0aW5nc3VpaGVscGVyIGltcG9ydCBTZXR0aW5nc1VJSGVscGVyCitmcm9tIGJiLnVpLmNydW1icy5oaWcuY3J1bWJzZGlhbG9nIGltcG9ydCBDcnVtYnNEaWFsb2cKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5jcnVtYnNtZXNzYWdlZGlhbG9nIGltcG9ydCBDcnVtYnNNZXNzYWdlRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcucHJveHlkZXRhaWxzZGlhbG9nIGltcG9ydCBQcm94eURldGFpbHNEaWFsb2cKKworIiIiCitUaGUgZm9sbG93aW5nIGFyZSBjb252ZW5pZW5jZSBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgR05PTUUgSElHIGNvbXBsaWFudAorQml0QmFrZSBHVUkncworSW4gc3VtbWFyeTogc3BhY2luZyA9IDEycHgsIGJvcmRlci13aWR0aCA9IDZweAorIiIiCisKK2NsYXNzIFNpbXBsZVNldHRpbmdzRGlhbG9nIChDcnVtYnNEaWFsb2csIFNldHRpbmdzVUlIZWxwZXIpOgorCisgICAgKEJVSUxEX0VOVl9QQUdFX0lELAorICAgICBTSEFSRURfU1RBVEVfUEFHRV9JRCwKKyAgICAgUFJPWElFU19QQUdFX0lELAorICAgICBPVEhFUlNfUEFHRV9JRCkgPSByYW5nZSg0KQorCisgICAgKFRFU1RfTkVUV09SS19OT05FLAorICAgICBURVNUX05FVFdPUktfSU5JVElBTCwKKyAgICAgVEVTVF9ORVRXT1JLX1JVTk5JTkcsCisgICAgIFRFU1RfTkVUV09SS19QQVNTRUQsCisgICAgIFRFU1RfTkVUV09SS19GQUlMRUQsCisgICAgIFRFU1RfTkVUV09SS19DQU5DRUxFRCkgPSByYW5nZSg2KQorCisgICAgVEFSR0VUUyA9IFsKKyAgICAgICAgKCJNWV9UUkVFX01PREVMX1JPVyIsIGd0ay5UQVJHRVRfU0FNRV9XSURHRVQsIDApLAorICAgICAgICAoInRleHQvcGxhaW4iLCAwLCAxKSwKKyAgICAgICAgKCJURVhUIiwgMCwgMiksCisgICAgICAgICgiU1RSSU5HIiwgMCwgMyksCisgICAgICAgIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgY29uZmlndXJhdGlvbiwgYWxsX2ltYWdlX3R5cGVzLAorICAgICAgICAgICAgYWxsX3BhY2thZ2VfZm9ybWF0cywgYWxsX2Rpc3Ryb3MsIGFsbF9zZGtfbWFjaGluZXMsCisgICAgICAgICAgICBtYXhfdGhyZWFkcywgcGFyZW50LCBmbGFncywgaGFuZGxlciwgYnV0dG9ucz1Ob25lKToKKyAgICAgICAgc3VwZXIoU2ltcGxlU2V0dGluZ3NEaWFsb2csIHNlbGYpLl9faW5pdF9fKHRpdGxlLCBwYXJlbnQsIGZsYWdzLCBidXR0b25zKQorCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmcm9tIG90aGVyIG9iamVjdHMKKyAgICAgICAgIyBiaXRiYWtlIHNldHRpbmdzIGZyb20gQnVpbGRlci5Db25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5pbWFnZV90eXBlcyA9IGFsbF9pbWFnZV90eXBlcworICAgICAgICBzZWxmLmFsbF9wYWNrYWdlX2Zvcm1hdHMgPSBhbGxfcGFja2FnZV9mb3JtYXRzCisgICAgICAgIHNlbGYuYWxsX2Rpc3Ryb3MgPSBhbGxfZGlzdHJvcworICAgICAgICBzZWxmLmFsbF9zZGtfbWFjaGluZXMgPSBhbGxfc2RrX21hY2hpbmVzCisgICAgICAgIHNlbGYubWF4X3RocmVhZHMgPSBtYXhfdGhyZWFkcworCisgICAgICAgICMgY2xhc3MgbWVtYmVycyBmb3IgaW50ZXJuYWwgdXNlCisgICAgICAgIHNlbGYuZGxkaXJfdGV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVkaXJfdGV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QgPSBbXQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfY2hhbmdlZCA9IDAKKyAgICAgICAgc2VsZi5iYl9zcGlubmVyID0gTm9uZQorICAgICAgICBzZWxmLnBtYWtlX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYucm9vdGZzX3NpemVfc3Bpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5leHRyYV9zaXplX3NwaW5uZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3BsdjNfY2hlY2tib3ggPSBOb25lCisgICAgICAgIHNlbGYudG9vbGNoYWluX2NoZWNrYm94ID0gTm9uZQorICAgICAgICBzZWxmLnNldHRpbmdfc3RvcmUgPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2VfdHlwZXNfY2hlY2tidXR0b25zID0ge30KKworICAgICAgICBzZWxmLm1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYucHJveHlfbWQ1ID0gc2VsZi5jb25maWdfcHJveHlfbWQ1KCkKKyAgICAgICAgc2VsZi5zZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcm94eV9zZXR0aW5nc19jaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcmFuID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZWxlY3RlZF9taXJyb3Jfcm93ID0gMAorICAgICAgICBzZWxmLm5ld19taXJyb3IgPSBGYWxzZQorCisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cyBvbiB0aGUgZGlhbG9nCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisgICAgICAgIHNlbGYuY29ubmVjdCgicmVzcG9uc2UiLCBzZWxmLnJlc3BvbnNlX2NiKQorCisgICAgZGVmIF9nZXRfc29ydGVkX3ZhbHVlKHNlbGYsIHZhcik6CisgICAgICAgIHJldHVybiAiICIuam9pbihzb3J0ZWQoc3RyKHZhcikuc3BsaXQoKSkpICsgIlxuIgorCisgICAgZGVmIGNvbmZpZ19wcm94eV9tZDUoc2VsZik6CisgICAgICAgIGRhdGEgPSAoIkVOQUJMRV9QUk9YWTogIiAgICAgICAgICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KSkKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eToKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBzZWxmLmNvbmZpZ3VyYXRpb24ucHJveGllcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgZGF0YSArPSAocHJvdG9jb2wgKyAiOiAiICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eShwcm90b2NvbCkpKQorICAgICAgICByZXR1cm4gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKworICAgIGRlZiBjb25maWdfbWQ1KHNlbGYpOgorICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZy5rZXlzKCk6CisgICAgICAgICAgICBkYXRhICs9IChrZXkgKyAiOiAiICsgc2VsZi5fZ2V0X3NvcnRlZF92YWx1ZShzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZ1trZXldKSkKKyAgICAgICAgcmV0dXJuIGhhc2hsaWIubWQ1KGRhdGEpLmhleGRpZ2VzdCgpCisKKyAgICBkZWYgZ2VuX3Byb3h5X2VudHJ5X3dpZGdldChzZWxmLCBwcm90b2NvbCwgcGFyZW50LCBuZWVkX2J1dHRvbj1UcnVlLCBsaW5lPTApOgorICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbChwcm90b2NvbC51cHBlcigpICsgIiBwcm94eSIpCisgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKGxhYmVsLCAwLCAxLCBsaW5lLCBsaW5lKzEsIHhwYWRkaW5nPTI0KQorCisgICAgICAgIHByb3h5X2VudHJ5ID0gZ3RrLkVudHJ5KCkKKyAgICAgICAgcHJveHlfZW50cnkuc2V0X3NpemVfcmVxdWVzdCgzMDAsIC0xKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChwcm94eV9lbnRyeSwgMSwgMiwgbGluZSwgbGluZSsxLCB5cGFkZGluZz00KQorCisgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKGd0ay5MYWJlbCgiOiIpLCAyLCAzLCBsaW5lLCBsaW5lKzEsIHhwYWRkaW5nPTEyLCB5cGFkZGluZz00KQorCisgICAgICAgIHBvcnRfZW50cnkgPSBndGsuRW50cnkoKQorICAgICAgICBwb3J0X2VudHJ5LnNldF9zaXplX3JlcXVlc3QoNjAsIC0xKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChwb3J0X2VudHJ5LCAzLCA0LCBsaW5lLCBsaW5lKzEsIHlwYWRkaW5nPTQpCisKKyAgICAgICAgZGV0YWlsc19idXR0b24gPSBIb2JBbHRCdXR0b24oIkRldGFpbHMiKQorICAgICAgICBkZXRhaWxzX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5kZXRhaWxzX2NiLCBwYXJlbnQsIHByb3RvY29sKQorICAgICAgICBzZWxmLnByb3h5X3RhYmxlLmF0dGFjaChkZXRhaWxzX2J1dHRvbiwgNCwgNSwgbGluZSwgbGluZSsxLCB4cGFkZGluZz00LCB5b3B0aW9ucz1ndGsuRVhQQU5EKQorCisgICAgICAgIHJldHVybiBwcm94eV9lbnRyeSwgcG9ydF9lbnRyeSwgZGV0YWlsc19idXR0b24KKworICAgIGRlZiByZWZyZXNoX3Byb3h5X2NvbXBvbmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuc2FtZV9jaGVja2JveC5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX2hvc3Rfb25seSgiaHR0cCIpKQorICAgICAgICBzZWxmLmh0dHBfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHNlbGYuaHR0cF9wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiaHR0cCIpKQorICAgICAgICBzZWxmLmh0dHBfcHJveHlfcG9ydC5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5KQorICAgICAgICBzZWxmLmh0dHBfcHJveHlfZGV0YWlscy5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisKKyAgICAgICAgc2VsZi5odHRwc19wcm94eS5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImh0dHBzIikpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImh0dHBzIikpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHlfcG9ydC5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmh0dHBzX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKworICAgICAgICBzZWxmLmZ0cF9wcm94eS5zZXRfdGV4dChzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImZ0cCIpKQorICAgICAgICBzZWxmLmZ0cF9wcm94eS5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X3BvcnQuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJmdHAiKSkKKyAgICAgICAgc2VsZi5mdHBfcHJveHlfcG9ydC5zZXRfZWRpdGFibGUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuZnRwX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5mdHBfcHJveHlfZGV0YWlscy5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorCisgICAgICAgIHNlbGYuc29ja3NfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJzb2NrcyIpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5LnNldF9lZGl0YWJsZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5X3BvcnQuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcG9ydF9vbmx5KCJzb2NrcyIpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLnNvY2tzX3Byb3h5X3BvcnQuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKyAgICAgICAgc2VsZi5zb2Nrc19wcm94eV9kZXRhaWxzLnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisKKyAgICAgICAgc2VsZi5jdnNfcHJveHkuc2V0X3RleHQoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfaG9zdF9vbmx5KCJjdnMiKSkKKyAgICAgICAgc2VsZi5jdnNfcHJveHkuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eS5zZXRfc2Vuc2l0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9wb3J0LnNldF90ZXh0KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3BvcnRfb25seSgiY3ZzIikpCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5X3BvcnQuc2V0X2VkaXRhYmxlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgYW5kIChub3Qgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpKQorICAgICAgICBzZWxmLmN2c19wcm94eV9wb3J0LnNldF9zZW5zaXRpdmUoc2VsZi5jb25maWd1cmF0aW9uLmVuYWJsZV9wcm94eSBhbmQgKG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkpCisgICAgICAgIHNlbGYuY3ZzX3Byb3h5X2RldGFpbHMuc2V0X3NlbnNpdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5IGFuZCAobm90IHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5KSkKKworICAgICAgICBpZiBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eToKKyAgICAgICAgICAgIGlmIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpOgorICAgICAgICAgICAgICAgIFt3LnNldF90ZXh0KHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpKSBmb3IgdyBpbiBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzXQorICAgICAgICAgICAgaWYgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKToKKyAgICAgICAgICAgICAgICBbdy5zZXRfdGV4dChzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKSBmb3IgdyBpbiBzZWxmLnNhbWVfcHJveHlfcG9ydHNdCisKKyAgICBkZWYgcHJveHlfY2hlY2tib3hfdG9nZ2xlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uZW5hYmxlX3Byb3h5ID0gc2VsZi5wcm94eV9jaGVja2JveC5nZXRfYWN0aXZlKCkKKyAgICAgICAgaWYgbm90IHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHk6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guc2V0X2FjdGl2ZShzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eSkKKyAgICAgICAgc2VsZi5zYXZlX3Byb3h5X2RhdGEoKQorICAgICAgICBzZWxmLnJlZnJlc2hfcHJveHlfY29tcG9uZW50cygpCisKKyAgICBkZWYgc2FtZV9jaGVja2JveF90b2dnbGVkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zYW1lX3Byb3h5ID0gc2VsZi5zYW1lX2NoZWNrYm94LmdldF9hY3RpdmUoKQorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKworICAgIGRlZiBzYXZlX3Byb3h5X2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zcGxpdF9wcm94eSgiaHR0cCIsIHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkKKyAgICAgICAgaWYgc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHk6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImh0dHBzIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJmdHAiLCBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoInNvY2tzIiwgc2VsZi5odHRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmh0dHBfcHJveHlfcG9ydC5nZXRfdGV4dCgpKQorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNwbGl0X3Byb3h5KCJjdnMiLCBzZWxmLmh0dHBfcHJveHkuZ2V0X3RleHQoKSArICI6IiArIHNlbGYuaHR0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImh0dHBzIiwgc2VsZi5odHRwc19wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5odHRwc19wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImZ0cCIsIHNlbGYuZnRwX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmZ0cF9wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoInNvY2tzIiwgc2VsZi5zb2Nrc19wcm94eS5nZXRfdGV4dCgpICsgIjoiICsgc2VsZi5zb2Nrc19wcm94eV9wb3J0LmdldF90ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3BsaXRfcHJveHkoImN2cyIsIHNlbGYuY3ZzX3Byb3h5LmdldF90ZXh0KCkgKyAiOiIgKyBzZWxmLmN2c19wcm94eV9wb3J0LmdldF90ZXh0KCkpICAgICAgIAorCisgICAgZGVmIHJlc3BvbnNlX2NiKHNlbGYsIGRpYWxvZywgcmVzcG9uc2VfaWQpOgorICAgICAgICBpZiByZXNwb25zZV9pZCA9PSBndGsuUkVTUE9OU0VfWUVTOgorICAgICAgICAgICAgaWYgc2VsZi5wcm94eV9jaGVja2JveC5nZXRfYWN0aXZlKCk6CisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IGFsbCBwcm94eSBlbnRyaWVzIGhhdmUgYSBjb3JyZXNwb25kaW5nIHBvcnQKKyAgICAgICAgICAgICAgICBmb3IgcHJveHksIHBvcnQgaW4gemlwKHNlbGYuYWxsX3Byb3h5X2FkZHJlc3Nlcywgc2VsZi5hbGxfcHJveHlfcG9ydHMpOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm94eS5nZXRfdGV4dCgpIGFuZCBub3QgcG9ydC5nZXRfdGV4dCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGJsID0gIjxiPkVudGVyIGFsbCBwb3J0IG51bWJlcnM8L2I+IgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIlByb3h5IHNlcnZlcnMgcmVxdWlyZSBhIHBvcnQgbnVtYmVyLiBQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGVudGVyZWQgYSBwb3J0IG51bWJlciBmb3IgZWFjaCBwcm94eSBzZXJ2ZXIuIgorICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nID0gQ3J1bWJzTWVzc2FnZURpYWxvZyhzZWxmLCBsYmwsIGd0ay5NRVNTQUdFX1dBUk5JTkcsIG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdF9zdG9wX2J5X25hbWUoInJlc3BvbnNlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5kbGRpciA9IHNlbGYuZGxkaXJfdGV4dC5nZXRfdGV4dCgpCisgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVkaXIgPSBzZWxmLnNzdGF0ZWRpcl90ZXh0LmdldF90ZXh0KCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnNzdGF0ZW1pcnJvciA9ICIiCisgICAgICAgIGZvciBtaXJyb3IgaW4gc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3Q6CisgICAgICAgICAgICBpZiBtaXJyb3JbMV0gIT0gIiIgYW5kIG1pcnJvclsyXS5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICAgICAgc21pcnJvciA9IG1pcnJvclsyXSArICIgIiArIG1pcnJvclsxXSArICIgXFxuICIKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlbWlycm9yICs9IHNtaXJyb3IKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmJidGhyZWFkID0gc2VsZi5iYl9zcGlubmVyLmdldF92YWx1ZV9hc19pbnQoKQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24ucG1ha2UgPSBzZWxmLnBtYWtlX3NwaW5uZXIuZ2V0X3ZhbHVlX2FzX2ludCgpCisgICAgICAgIHNlbGYuc2F2ZV9wcm94eV9kYXRhKCkKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmV4dHJhX3NldHRpbmcgPSB7fQorICAgICAgICBpdCA9IHNlbGYuc2V0dGluZ19zdG9yZS5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAga2V5ID0gc2VsZi5zZXR0aW5nX3N0b3JlLmdldF92YWx1ZShpdCwgMCkKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5zZXR0aW5nX3N0b3JlLmdldF92YWx1ZShpdCwgMSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5leHRyYV9zZXR0aW5nW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgaXQgPSBzZWxmLnNldHRpbmdfc3RvcmUuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIG1kNSA9IHNlbGYuY29uZmlnX21kNSgpCisgICAgICAgIHNlbGYuc2V0dGluZ3NfY2hhbmdlZCA9IChzZWxmLm1kNSAhPSBtZDUpCisgICAgICAgIHNlbGYucHJveHlfc2V0dGluZ3NfY2hhbmdlZCA9IChzZWxmLnByb3h5X21kNSAhPSBzZWxmLmNvbmZpZ19wcm94eV9tZDUoKSkKKworICAgIGRlZiBjcmVhdGVfYnVpbGRfZW52aXJvbm1lbnRfcGFnZShzZWxmKToKKyAgICAgICAgYWR2YW5jZWRfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnNldF9ib3JkZXJfd2lkdGgoNikKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCc8c3BhbiB3ZWlnaHQ9ImJvbGQiPlBhcmFsbGVsIHRocmVhZHM8L3NwYW4+JyksIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJCaXRCYWtlIHBhcmFsbGVsIHRocmVhZHMiKQorICAgICAgICB0b29sdGlwID0gIlNldHMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRoYXQgQml0QmFrZSB0YXNrcyBjYW4gc2ltdWx0YW5lb3VzbHkgcnVuLiBTZWUgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIHRvb2x0aXAgKz0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsLyIKKyAgICAgICAgdG9vbHRpcCArPSAicG9reS1yZWYtbWFudWFsLmh0bWwjdmFyLUJCX05VTUJFUl9USFJFQURTXCI+UG9reSByZWZlcmVuY2UgbWFudWFsPC9hPiBmb3IgaW5mb3JtYXRpb24iCisgICAgICAgIGJidGhyZWFkX3dpZGdldCwgc2VsZi5iYl9zcGlubmVyID0gc2VsZi5nZW5fc3Bpbm5lcl93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmJidGhyZWFkLCAxLCBzZWxmLm1heF90aHJlYWRzLCI8Yj5CaXRCYWtlIHByYWxsYWxlbCB0aHJlYWRzPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoYmJ0aHJlYWRfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCJNYWtlIHBhcmFsbGVsIHRocmVhZHMiKQorICAgICAgICB0b29sdGlwID0gIlNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhlIGhvc3QgY2FuIHVzZSBkdXJpbmcgdGhlIGJ1aWxkLiBTZWUgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIHRvb2x0aXAgKz0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsLyIKKyAgICAgICAgdG9vbHRpcCArPSAicG9reS1yZWYtbWFudWFsLmh0bWwjdmFyLVBBUkFMTEVMX01BS0VcIj5Qb2t5IHJlZmVyZW5jZSBtYW51YWw8L2E+IGZvciBpbmZvcm1hdGlvbiIKKyAgICAgICAgcG1ha2Vfd2lkZ2V0LCBzZWxmLnBtYWtlX3NwaW5uZXIgPSBzZWxmLmdlbl9zcGlubmVyX3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24ucG1ha2UsIDEsIHNlbGYubWF4X3RocmVhZHMsIjxiPk1ha2UgcGFyYWxsZWwgdGhyZWFkczwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHBtYWtlX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzZWxmLmdlbl9sYWJlbF93aWRnZXQoJzxzcGFuIHdlaWdodD0iYm9sZCI+RG93bmxvYWRlZCBzb3VyY2UgY29kZTwvc3Bhbj4nKSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveCA9IGd0ay5WQm94KEZhbHNlLCA2KQorICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQoc3ViX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkRvd25sb2FkcyBkaXJlY3RvcnkiKQorICAgICAgICB0b29sdGlwID0gIlNlbGVjdCBhIGZvbGRlciB0aGF0IGNhY2hlcyB0aGUgdXBzdHJlYW0gcHJvamVjdCBzb3VyY2UgY29kZSIKKyAgICAgICAgZGxkaXJfd2lkZ2V0LCBzZWxmLmRsZGlyX3RleHQgPSBzZWxmLmdlbl9lbnRyeV93aWRnZXQoc2VsZi5jb25maWd1cmF0aW9uLmRsZGlyLCBzZWxmLCI8Yj5Eb3dubG9hZGVkIHNvdXJjZSBjb2RlPC9iPiIgKyAiKiIgKyB0b29sdGlwKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoZGxkaXJfd2lkZ2V0LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcmV0dXJuIGFkdmFuY2VkX3Zib3gKKworICAgIGRlZiBjcmVhdGVfc2hhcmVkX3N0YXRlX3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSkKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDEyKQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTI0KQorICAgICAgICBjb250ZW50ID0gIjxzcGFuPlNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnk8L3NwYW4+IgorICAgICAgICB0b29sdGlwID0gIlNlbGVjdCBhIGZvbGRlciB0aGF0IGNhY2hlcyB5b3VyIHByZWJ1aWx0IHJlc3VsdHMiCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfaW5mb193aWRnZXQoY29udGVudCwiPGI+U2hhcmVkIHN0YXRlIGRpcmVjdG9yeTwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3N0YXRlZGlyX3dpZGdldCwgc2VsZi5zc3RhdGVkaXJfdGV4dCA9IHNlbGYuZ2VuX2VudHJ5X3dpZGdldChzZWxmLmNvbmZpZ3VyYXRpb24uc3N0YXRlZGlyLCBzZWxmKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc3N0YXRlZGlyX3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisKKyAgICAgICAgY29udGVudCA9ICI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2hhcmVkIHN0YXRlIG1pcnJvcnM8L3NwYW4+IgorICAgICAgICB0b29sdGlwID0gIlVSTHMgcG9pbnRpbmcgdG8gcHJlLWJ1aWx0IG1pcnJvcnMgdGhhdCB3aWxsIHNwZWVkIHlvdXIgYnVpbGQuICIKKyAgICAgICAgdG9vbHRpcCArPSAiU2VsZWN0IHRoZSBcJ1N0YW5kYXJkXCcgY29uZmlndXJhdGlvbiBpZiB0aGUgc3RydWN0dXJlIG9mIHlvdXIgIgorICAgICAgICB0b29sdGlwICs9ICJtaXJyb3IgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHlvdXIgbG9jYWwgc2hhcmVkIHN0YXRlIGRpcmVjdG9yeS4gIgorICAgICAgICB0b29sdGlwICs9ICJGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzaGFyZWQgc3RhdGUgbWlycm9ycywgY2hlY2sgdGhlIDxhIGhyZWY9XCIiCisgICAgICAgIHRvb2x0aXAgKz0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcG9reS1yZWYtbWFudWFsLyIKKyAgICAgICAgdG9vbHRpcCArPSAicG9reS1yZWYtbWFudWFsLmh0bWwjc2hhcmVkLXN0YXRlXCI+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC9hPi4iCisgICAgICAgIHRhYmxlID0gc2VsZi5nZW5fbGFiZWxfaW5mb193aWRnZXQoY29udGVudCwiPGI+U2hhcmVkIHN0YXRlIG1pcnJvcnM8L2I+IiArICIqIiArIHRvb2x0aXApCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydCh0YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPTYpCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSkKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBndGsuVFJVRSwgZ3RrLlRSVUUsIDApCisKKyAgICAgICAgaWYgc2VsZi5zc3RhdGVtaXJyb3JzX2NoYW5nZWQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19jaGFuZ2VkID0gMQorICAgICAgICAgICAgc3N0YXRlbWlycm9ycyA9IHNlbGYuY29uZmlndXJhdGlvbi5zc3RhdGVtaXJyb3IKKyAgICAgICAgICAgIGlmIHNzdGF0ZW1pcnJvcnMgPT0gIiI6CisgICAgICAgICAgICAgICAgc21fbGlzdCA9IFsiU3RhbmRhcmQiLCAiIiwgImZpbGU6Ly8oLiopIl0KKyAgICAgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5hcHBlbmQoc21fbGlzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3N0YXRlbWlycm9ycyA9IFt4IGZvciB4IGluIHNzdGF0ZW1pcnJvcnMuc3BsaXQoJ1xcbicpXQorICAgICAgICAgICAgICAgIGZvciBzc3RhdGVtaXJyb3IgaW4gc3N0YXRlbWlycm9yczoKKyAgICAgICAgICAgICAgICAgICAgc3N0YXRlbWlycm9yX2ZpZWxkcyA9IFt4IGZvciB4IGluIHNzdGF0ZW1pcnJvci5zcGxpdCgnICcpIGlmIHguc3RyaXAoKV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNzdGF0ZW1pcnJvcl9maWVsZHMpID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzc3RhdGVtaXJyb3JfZmllbGRzWzBdID09ICJmaWxlOi8vKC4qKSIgb3Igc3N0YXRlbWlycm9yX2ZpZWxkc1swXSA9PSAiZmlsZTovLy4qIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbV9saXN0ID0gWyJTdGFuZGFyZCIsIHNzdGF0ZW1pcnJvcl9maWVsZHNbMV0sIHNzdGF0ZW1pcnJvcl9maWVsZHNbMF1dCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtX2xpc3QgPSBbIkN1c3RvbSIsIHNzdGF0ZW1pcnJvcl9maWVsZHNbMV0sIHNzdGF0ZW1pcnJvcl9maWVsZHNbMF1dCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5hcHBlbmQoc21fbGlzdCkKKworICAgICAgICBzc3RhdGVtaXJyb3JzX3dpZGdldCwgc3N0YXRlbWlycm9yc19zdG9yZSA9IHNlbGYuZ2VuX3NoYXJlZF9zc3RhdGVfd2lkZ2V0KHNlbGYuc3N0YXRlbWlycm9yc19saXN0LCBzZWxmKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNzdGF0ZW1pcnJvcnNfd2lkZ2V0LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHRhYmxlID0gZ3RrLlRhYmxlKDEsIDEwLCBGYWxzZSkKKyAgICAgICAgdGFibGUuc2V0X2NvbF9zcGFjaW5ncyg2KQorICAgICAgICBhZGRfbWlycm9yX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiQWRkIG1pcnJvciIpCisgICAgICAgIGFkZF9taXJyb3JfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmFkZF9taXJyb3IpCisgICAgICAgIGFkZF9taXJyb3JfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTIwLDMwKQorICAgICAgICB0YWJsZS5hdHRhY2goYWRkX21pcnJvcl9idXR0b24sIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5TSFJJTkspCisKKyAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJEZWxldGUgbWlycm9yIikKKyAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmRlbGV0ZV9jYikKKyAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMTIwLCAzMCkKKyAgICAgICAgdGFibGUuYXR0YWNoKHNlbGYuZGVsZXRlX2J1dHRvbiwgMywgNCwgMCwgMSwgeG9wdGlvbnM9Z3RrLlNIUklOSykKKworICAgICAgICBhZHZhbmNlZF92Ym94LnBhY2tfc3RhcnQodGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz02KQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgZ2VuX3NoYXJlZF9zc3RhdGVfd2lkZ2V0KHNlbGYsIHNzdGF0ZW1pcnJvcnNfbGlzdCwgd2luZG93KToKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlKQorCisgICAgICAgIHNzdGF0ZW1pcnJvcnNfc3RvcmUgPSBndGsuTGlzdFN0b3JlKHN0ciwgc3RyLCBzdHIpCisgICAgICAgIGZvciBzc3RhdGVtaXJyb3IgaW4gc3N0YXRlbWlycm9yc19saXN0OgorICAgICAgICAgICAgc3N0YXRlbWlycm9yc19zdG9yZS5hcHBlbmQoc3N0YXRlbWlycm9yKQorCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190diA9IGd0ay5UcmVlVmlldygpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5zZXRfcnVsZXNfaGludChUcnVlKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X2hlYWRlcnNfdmlzaWJsZShUcnVlKQorICAgICAgICB0cmVlX3NlbGVjdGlvbiA9IHNlbGYuc3N0YXRlbWlycm9yc190di5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgdHJlZV9zZWxlY3Rpb24uc2V0X21vZGUoZ3RrLlNFTEVDVElPTl9TSU5HTEUpCisKKyAgICAgICAgIyBBbGxvdyBlbmFibGUgZHJhZyBhbmQgZHJvcCBvZiByb3dzIGluY2x1ZGluZyByb3cgbW92ZQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZW5hYmxlX21vZGVsX2RyYWdfc291cmNlKCBndGsuZ2RrLkJVVFRPTjFfTUFTSywKKyAgICAgICAgICAgIHNlbGYuVEFSR0VUUywKKyAgICAgICAgICAgIGd0ay5nZGsuQUNUSU9OX0RFRkFVTFR8CisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9NT1ZFKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZW5hYmxlX21vZGVsX2RyYWdfZGVzdChzZWxmLlRBUkdFVFMsCisgICAgICAgICAgICBndGsuZ2RrLkFDVElPTl9ERUZBVUxUKQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuY29ubmVjdCgiZHJhZ19kYXRhX2dldCIsIHNlbGYuZHJhZ19kYXRhX2dldF9jYikKKyAgICAgICAgc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmNvbm5lY3QoImRyYWdfZGF0YV9yZWNlaXZlZCIsIHNlbGYuZHJhZ19kYXRhX3JlY2VpdmVkX2NiKQorCisKKyAgICAgICAgc2VsZi5zY3JvbGwgPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorICAgICAgICBzZWxmLnNjcm9sbC5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfTkVWRVIsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzZWxmLnNjcm9sbC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5zY3JvbGwuY29ubmVjdCgnc2l6ZS1hbGxvY2F0ZScsIHNlbGYuc2Nyb2xsX2NoYW5nZWQpCisgICAgICAgIHNlbGYuc2Nyb2xsLmFkZChzZWxmLnNzdGF0ZW1pcnJvcnNfdHYpCisKKyAgICAgICAgI2xpc3Qgc3RvcmUgZm9yIGNlbGwgcmVuZGVyZXIKKyAgICAgICAgbSA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1NUUklORykKKyAgICAgICAgbS5hcHBlbmQoWyJTdGFuZGFyZCJdKQorICAgICAgICBtLmFwcGVuZChbIkN1c3RvbSJdKQorCisgICAgICAgIGNlbGwwID0gZ3RrLkNlbGxSZW5kZXJlckNvbWJvKCkKKyAgICAgICAgY2VsbDAuc2V0X3Byb3BlcnR5KCJtb2RlbCIsbSkKKyAgICAgICAgY2VsbDAuc2V0X3Byb3BlcnR5KCJ0ZXh0LWNvbHVtbiIsIDApCisgICAgICAgIGNlbGwwLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBUcnVlKQorICAgICAgICBjZWxsMC5zZXRfcHJvcGVydHkoImhhcy1lbnRyeSIsIEZhbHNlKQorICAgICAgICBjb2wwID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCJDb25maWd1cmF0aW9uIikKKyAgICAgICAgY29sMC5wYWNrX3N0YXJ0KGNlbGwwLCBGYWxzZSkKKyAgICAgICAgY29sMC5hZGRfYXR0cmlidXRlKGNlbGwwLCAidGV4dCIsIDApCisgICAgICAgIGNvbDAuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwwLCBzZWxmLmNvbmZpZ3VyYXRpb25fZmllbGQpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5hcHBlbmRfY29sdW1uKGNvbDApCisKKyAgICAgICAgY2VsbDAuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5jb21ib19jaGFuZ2VkLCBzc3RhdGVtaXJyb3JzX3N0b3JlKQorCisgICAgICAgIHNlbGYuY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIHNlbGYuY2VsbDEuc2V0X3BhZGRpbmcoNSwyKQorICAgICAgICBjb2wxID0gZ3RrLlRyZWVWaWV3Q29sdW1uKCdSZWdleCcsIHNlbGYuY2VsbDEpCisgICAgICAgIGNvbDEuc2V0X2NlbGxfZGF0YV9mdW5jKHNlbGYuY2VsbDEsIHNlbGYucmVnZXhfZmllbGQpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5hcHBlbmRfY29sdW1uKGNvbDEpCisKKyAgICAgICAgc2VsZi5jZWxsMS5jb25uZWN0KCJlZGl0ZWQiLCBzZWxmLnJlZ2V4X2NoYW5nZWQsIHNzdGF0ZW1pcnJvcnNfc3RvcmUpCisKKyAgICAgICAgY2VsbDIgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwyLnNldF9wYWRkaW5nKDUsMikKKyAgICAgICAgY2VsbDIuc2V0X3Byb3BlcnR5KCJlZGl0YWJsZSIsIFRydWUpCisgICAgICAgIGNvbDIgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ1VSTCcsIGNlbGwyKQorICAgICAgICBjb2wyLnNldF9jZWxsX2RhdGFfZnVuYyhjZWxsMiwgc2VsZi51cmxfZmllbGQpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5hcHBlbmRfY29sdW1uKGNvbDIpCisKKyAgICAgICAgY2VsbDIuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi51cmxfY2hhbmdlZCwgc3N0YXRlbWlycm9yc19zdG9yZSkKKworICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuc2V0X21vZGVsKHNzdGF0ZW1pcnJvcnNfc3RvcmUpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc190di5zZXRfY3Vyc29yKHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdykKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHNlbGYuc2Nyb2xsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBoYm94LnNob3dfYWxsKCkKKworICAgICAgICByZXR1cm4gaGJveCwgc3N0YXRlbWlycm9yc19zdG9yZQorCisgICAgZGVmIGRyYWdfZGF0YV9nZXRfY2Ioc2VsZiwgdHJlZXZpZXcsIGNvbnRleHQsIHNlbGVjdGlvbiwgdGFyZ2V0X2lkLCBldGltZSk6CisgICAgICAgIHRyZWVzZWxlY3Rpb24gPSB0cmVldmlldy5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgbW9kZWwsIGl0ZXIgPSB0cmVlc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGRhdGEgPSBtb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcihpdGVyKQorICAgICAgICBzZWxlY3Rpb24uc2V0KHNlbGVjdGlvbi50YXJnZXQsIDgsIGRhdGEpCisKKyAgICBkZWYgZHJhZ19kYXRhX3JlY2VpdmVkX2NiKHNlbGYsIHRyZWV2aWV3LCBjb250ZXh0LCB4LCB5LCBzZWxlY3Rpb24sIGluZm8sIGV0aW1lKToKKyAgICAgICAgbW9kZWwgPSB0cmVldmlldy5nZXRfbW9kZWwoKQorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgdHJlZV9pdGVyID0gbW9kZWwuZ2V0X2l0ZXJfZnJvbV9zdHJpbmcoc2VsZWN0aW9uLmRhdGEpCisgICAgICAgIGRhdGEuYXBwZW5kKG1vZGVsLmdldF92YWx1ZSh0cmVlX2l0ZXIsIDApKQorICAgICAgICBkYXRhLmFwcGVuZChtb2RlbC5nZXRfdmFsdWUodHJlZV9pdGVyLCAxKSkKKyAgICAgICAgZGF0YS5hcHBlbmQobW9kZWwuZ2V0X3ZhbHVlKHRyZWVfaXRlciwgMikpCisKKyAgICAgICAgZHJvcF9pbmZvID0gdHJlZXZpZXcuZ2V0X2Rlc3Rfcm93X2F0X3Bvcyh4LCB5KQorICAgICAgICBpZiBkcm9wX2luZm86CisgICAgICAgICAgICBwYXRoLCBwb3NpdGlvbiA9IGRyb3BfaW5mbworICAgICAgICAgICAgaXRlciA9IG1vZGVsLmdldF9pdGVyKHBhdGgpCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZ3RrLlRSRUVfVklFV19EUk9QX0JFRk9SRSBvciBwb3NpdGlvbiA9PSBndGsuVFJFRV9WSUVXX0RST1BfSU5UT19PUl9CRUZPUkUpOgorICAgICAgICAgICAgICAgIG1vZGVsLmluc2VydF9iZWZvcmUoaXRlciwgZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0X2FmdGVyKGl0ZXIsIGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlbC5hcHBlbmQoZGF0YSkKKyAgICAgICAgaWYgY29udGV4dC5hY3Rpb24gPT0gZ3RrLmdkay5BQ1RJT05fTU9WRToKKyAgICAgICAgICAgIGNvbnRleHQuZmluaXNoKFRydWUsIFRydWUsIGV0aW1lKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBkZWxldGVfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5zc3RhdGVtaXJyb3JzX3R2LmdldF9zZWxlY3Rpb24oKQorICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgaW5kZXggPSBpbnQodHJlZV9tb2RlbC5nZXRfc3RyaW5nX2Zyb21faXRlcih0cmVlX2l0ZXIpKQorICAgICAgICBpZiBpbmRleCA9PSAwOgorICAgICAgICAgICAgc2VsZi5zZWxlY3RlZF9taXJyb3Jfcm93ID0gaW5kZXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IGluZGV4IC0gMQorICAgICAgICBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdC5wb3AoaW5kZXgpCisgICAgICAgIHNlbGYucmVmcmVzaF9zaGFyZWRfc3RhdGVfcGFnZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLnNzdGF0ZW1pcnJvcnNfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorCisgICAgZGVmIGFkZF9taXJyb3Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5uZXdfbWlycm9yID0gVHJ1ZQorICAgICAgICB0b29sdGlwID0gIlNlbGVjdCB0aGUgcHJlLWJ1aWx0IG1pcnJvciB0aGF0IHdpbGwgc3BlZWQgeW91ciBidWlsZCIKKyAgICAgICAgaW5kZXggPSBsZW4oc2VsZi5zc3RhdGVtaXJyb3JzX2xpc3QpCisgICAgICAgIHNlbGYuc2VsZWN0ZWRfbWlycm9yX3JvdyA9IGluZGV4CisgICAgICAgIHNtX2xpc3QgPSBbIlN0YW5kYXJkIiwgIiIsICJmaWxlOi8vKC4qKSJdCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0LmFwcGVuZChzbV9saXN0KQorICAgICAgICBzZWxmLnJlZnJlc2hfc2hhcmVkX3N0YXRlX3BhZ2UoKQorCisgICAgZGVmIHNjcm9sbF9jaGFuZ2VkKHNlbGYsIHdpZGdldCwgZXZlbnQsIGRhdGE9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYubmV3X21pcnJvciA9PSBUcnVlOgorICAgICAgICAgICAgYWRqID0gd2lkZ2V0LmdldF92YWRqdXN0bWVudCgpCisgICAgICAgICAgICBhZGouc2V0X3ZhbHVlKGFkai51cHBlciAtIGFkai5wYWdlX3NpemUpCisgICAgICAgICAgICBzZWxmLm5ld19taXJyb3IgPSBGYWxzZQorCisgICAgZGVmIGNvbWJvX2NoYW5nZWQoc2VsZiwgd2lkZ2V0LCBwYXRoLCB0ZXh0LCBtb2RlbCk6CisgICAgICAgIG1vZGVsW3BhdGhdWzBdID0gdGV4dAorICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfbW9kZWwsIHRyZWVfaXRlciA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBpbmRleCA9IGludCh0cmVlX21vZGVsLmdldF9zdHJpbmdfZnJvbV9pdGVyKHRyZWVfaXRlcikpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0W2luZGV4XVswXSA9IHRleHQKKworICAgIGRlZiByZWdleF9jaGFuZ2VkKHNlbGYsIGNlbGwsIHBhdGgsIG5ld190ZXh0LCB1c2VyX2RhdGEpOgorICAgICAgICB1c2VyX2RhdGFbcGF0aF1bMl0gPSBuZXdfdGV4dAorICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgIHRyZWVfbW9kZWwsIHRyZWVfaXRlciA9IHNlbGVjdGlvbi5nZXRfc2VsZWN0ZWQoKQorICAgICAgICBpbmRleCA9IGludCh0cmVlX21vZGVsLmdldF9zdHJpbmdfZnJvbV9pdGVyKHRyZWVfaXRlcikpCisgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0W2luZGV4XVsyXSA9IG5ld190ZXh0CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHVybF9jaGFuZ2VkKHNlbGYsIGNlbGwsIHBhdGgsIG5ld190ZXh0LCB1c2VyX2RhdGEpOgorICAgICAgICBpZiBuZXdfdGV4dCE9IkVudGVyIHRoZSBtaXJyb3IgVVJMIiBhbmQgbmV3X3RleHQhPSJNYXRjaCByZWdleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoaXMgVVJMIjoKKyAgICAgICAgICAgIHVzZXJfZGF0YVtwYXRoXVsxXSA9IG5ld190ZXh0CisgICAgICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLnNzdGF0ZW1pcnJvcnNfdHYuZ2V0X3NlbGVjdGlvbigpCisgICAgICAgICAgICB0cmVlX21vZGVsLCB0cmVlX2l0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgICAgIGluZGV4ID0gaW50KHRyZWVfbW9kZWwuZ2V0X3N0cmluZ19mcm9tX2l0ZXIodHJlZV9pdGVyKSkKKyAgICAgICAgICAgIHNlbGYuc3N0YXRlbWlycm9yc19saXN0W2luZGV4XVsxXSA9IG5ld190ZXh0CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGNvbmZpZ3VyYXRpb25fZmllbGQoc2VsZiwgY29sdW1uLCBjZWxsLCBtb2RlbCwgaXRlcik6CisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApKQorICAgICAgICBpZiBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMCkgPT0gIlN0YW5kYXJkIjoKKyAgICAgICAgICAgIHNlbGYuY2VsbDEuc2V0X3Byb3BlcnR5KCJzZW5zaXRpdmUiLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuY2VsbDEuc2V0X3Byb3BlcnR5KCJlZGl0YWJsZSIsIEZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jZWxsMS5zZXRfcHJvcGVydHkoInNlbnNpdGl2ZSIsIFRydWUpCisgICAgICAgICAgICBzZWxmLmNlbGwxLnNldF9wcm9wZXJ0eSgiZWRpdGFibGUiLCBUcnVlKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiByZWdleF9maWVsZChzZWxmLCBjb2x1bW4sIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3RleHQnLCBtb2RlbC5nZXRfdmFsdWUoaXRlciwgMikpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHVybF9maWVsZChzZWxmLCBjb2x1bW4sIGNlbGwsIG1vZGVsLCBpdGVyKToKKyAgICAgICAgdGV4dCA9IG1vZGVsLmdldF92YWx1ZShpdGVyLCAxKQorICAgICAgICBpZiB0ZXh0ID09ICIiOgorICAgICAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIsIDApID09ICJTdGFuZGFyZCI6CisgICAgICAgICAgICAgICAgdGV4dCA9ICJFbnRlciB0aGUgbWlycm9yIFVSTCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGV4dCA9ICJNYXRjaCByZWdleCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoaXMgVVJMIgorICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHRleHQpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHJlZnJlc2hfc2hhcmVkX3N0YXRlX3BhZ2Uoc2VsZik6CisgICAgICAgIHBhZ2VfbnVtID0gc2VsZi5uYi5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgc2VsZi5uYi5yZW1vdmVfcGFnZShwYWdlX251bSk7CisgICAgICAgIHNlbGYubmIuaW5zZXJ0X3BhZ2Uoc2VsZi5jcmVhdGVfc2hhcmVkX3N0YXRlX3BhZ2UoKSwgZ3RrLkxhYmVsKCJTaGFyZWQgc3RhdGUiKSxwYWdlX251bSkKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisgICAgICAgIHNlbGYubmIuc2V0X2N1cnJlbnRfcGFnZShwYWdlX251bSkKKworICAgIGRlZiB0ZXN0X3Byb3h5X2VuZGVkKHNlbGYsIHBhc3NlZCk6CisgICAgICAgIHNlbGYucHJveHlfdGVzdF9ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZXRfdGVzdF9wcm94eV9zdGF0ZShzZWxmLlRFU1RfTkVUV09SS19QQVNTRUQgaWYgcGFzc2VkIGVsc2Ugc2VsZi5URVNUX05FVFdPUktfRkFJTEVEKQorICAgICAgICBzZWxmLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgc2VsZi5yZWZyZXNoX3Byb3h5X2NvbXBvbmVudHMoKQorCisgICAgZGVmIHRpbWVyX2Z1bmMoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5wdWxzZSgpCisgICAgICAgIHJldHVybiBzZWxmLnByb3h5X3Rlc3RfcnVubmluZworCisgICAgZGVmIHRlc3RfbmV0d29ya19idXR0b25fY2Ioc2VsZiwgYik6CisgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfUlVOTklORykKKyAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIGlmIHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgPT0gVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfaHR0cF9wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiaHR0cCIpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9odHRwc19wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wcm94eSgiaHR0cHMiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfZnRwX3Byb3h5KHNlbGYuY29uZmlndXJhdGlvbi5jb21iaW5lX3Byb3h5KCJmdHAiKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZXRfc29ja3NfcHJveHkoc2VsZi5jb25maWd1cmF0aW9uLmNvbWJpbmVfcHJveHkoInNvY2tzIikpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2N2c19wcm94eShzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9ob3N0X29ubHkoImN2cyIpLCBzZWxmLmNvbmZpZ3VyYXRpb24uY29tYmluZV9wb3J0X29ubHkoImN2cyIpKQorICAgICAgICBlbGlmIHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkgPT0gRmFsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X2h0dHBzX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9mdHBfcHJveHkoIiIpCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2V0X3NvY2tzX3Byb3h5KCIiKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnNldF9jdnNfcHJveHkoIiIsICIiKQorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcmFuID0gVHJ1ZQorICAgICAgICBzZWxmLnByb3h5X3Rlc3RfcnVubmluZyA9IFRydWUKKyAgICAgICAgZ29iamVjdC50aW1lb3V0X2FkZCgxMDAsIHNlbGYudGltZXJfZnVuYykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXJfbmV0d29ya190ZXN0KCkKKworICAgIGRlZiB0ZXN0X3Byb3h5X2ZvY3VzX2V2ZW50KHNlbGYsIHcsIGRpcmVjdGlvbik6CisgICAgICAgIGlmIHNlbGYudGVzdF9wcm94eV9zdGF0ZSBpbiBbc2VsZi5URVNUX05FVFdPUktfUEFTU0VELCBzZWxmLlRFU1RfTkVUV09SS19GQUlMRURdOgorICAgICAgICAgICAgc2VsZi5zZXRfdGVzdF9wcm94eV9zdGF0ZShzZWxmLlRFU1RfTkVUV09SS19JTklUSUFMKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBodHRwX3Byb3h5X2NoYW5nZWQoc2VsZiwgZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZpZ3VyYXRpb24uc2FtZV9wcm94eToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBlID09IHNlbGYuaHR0cF9wcm94eToKKyAgICAgICAgICAgIFt3LnNldF90ZXh0KHNlbGYuaHR0cF9wcm94eS5nZXRfdGV4dCgpKSBmb3IgdyBpbiBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgW3cuc2V0X3RleHQoc2VsZi5odHRwX3Byb3h5X3BvcnQuZ2V0X3RleHQoKSkgZm9yIHcgaW4gc2VsZi5zYW1lX3Byb3h5X3BvcnRzXQorCisgICAgZGVmIHByb3h5X2FkZHJlc3NfZm9jdXNfb3V0X2V2ZW50KHNlbGYsIHcsIGRpcmVjdGlvbik6CisgICAgICAgIHRleHQgPSB3LmdldF90ZXh0KCkKKyAgICAgICAgaWYgbm90IHRleHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgdGV4dC5maW5kKCIvLyIpID09IC0xOgorICAgICAgICAgICAgdy5zZXRfdGV4dCgiaHR0cDovLyIgKyB0ZXh0KQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXRfdGVzdF9wcm94eV9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIHNlbGYudGVzdF9wcm94eV9zdGF0ZSA9PSBzdGF0ZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBbc2VsZi5wcm94eV90YWJsZS5yZW1vdmUodykgZm9yIHcgaW4gc2VsZi50ZXN0X2d1aV9lbGVtZW50c10KKyAgICAgICAgaWYgc3RhdGUgPT0gc2VsZi5URVNUX05FVFdPUktfSU5JVElBTDoKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbiwgMSwgMiwgNSwgNikKKyAgICAgICAgICAgIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbi5zaG93KCkKKyAgICAgICAgZWxpZiBzdGF0ZSA9PSBzZWxmLlRFU1RfTkVUV09SS19SVU5OSU5HOgorICAgICAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLnNldF9yY3N0eWxlKCJydW5uaW5nIikKKyAgICAgICAgICAgIHNlbGYudGVzdF9wcm94eV9wcm9ncmVzcy5zZXRfdGV4dCgiVGVzdGluZyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24iKQorICAgICAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2goc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLCAwLCA1LCA1LCA2LCB4cGFkZGluZz00KQorICAgICAgICAgICAgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLnNob3coKQorICAgICAgICBlbHNlOiAjIHBhc3NlZCBvciBmYWlsZWQKKyAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3MudXBkYXRlKDEuMCkKKyAgICAgICAgICAgIGlmIHN0YXRlID09IHNlbGYuVEVTVF9ORVRXT1JLX1BBU1NFRDoKKyAgICAgICAgICAgICAgICBzZWxmLmR1bW15X3Byb2dyZXNzLnNldF90ZXh0KCJZb3VyIG5ldHdvcmsgaXMgcHJvcGVybHkgY29uZmlndXJlZCIpCisgICAgICAgICAgICAgICAgc2VsZi5kdW1teV9wcm9ncmVzcy5zZXRfcmNzdHlsZSgicnVubmluZyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2V0X3RleHQoIk5ldHdvcmsgdGVzdCBmYWlsZWQiKQorICAgICAgICAgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3Muc2V0X3Jjc3R5bGUoImZhaWwiKQorICAgICAgICAgICAgc2VsZi5wcm94eV90YWJsZS5hdHRhY2goc2VsZi5kdW1teV9wcm9ncmVzcywgMCwgNCwgNSwgNikKKyAgICAgICAgICAgIHNlbGYucHJveHlfdGFibGUuYXR0YWNoKHNlbGYucmV0ZXN0X25ldHdvcmtfYnV0dG9uLCA0LCA1LCA1LCA2LCB4cGFkZGluZz00KQorICAgICAgICAgICAgc2VsZi5kdW1teV9wcm9ncmVzcy5zaG93KCkKKyAgICAgICAgICAgIHNlbGYucmV0ZXN0X25ldHdvcmtfYnV0dG9uLnNob3coKQorICAgICAgICBzZWxmLnRlc3RfcHJveHlfc3RhdGUgPSBzdGF0ZQorCisgICAgZGVmIGNyZWF0ZV9uZXR3b3JrX3BhZ2Uoc2VsZik6CisgICAgICAgIGFkdmFuY2VkX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5zZXRfYm9yZGVyX3dpZHRoKDYpCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMgPSBbXQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMgPSBbXQorICAgICAgICBzZWxmLmFsbF9wcm94eV9wb3J0cyA9IFtdCisgICAgICAgIHNlbGYuYWxsX3Byb3h5X2FkZHJlc3NlcyA9IFtdCisKKyAgICAgICAgc3ViX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgYWR2YW5jZWRfdmJveC5wYWNrX3N0YXJ0KHN1Yl92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGxhYmVsID0gc2VsZi5nZW5fbGFiZWxfd2lkZ2V0KCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2V0IHRoZSBwcm94aWVzIHVzZWQgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZTwvc3Bhbj4iKQorICAgICAgICB0b29sdGlwID0gIlNldCB0aGUgcHJveGllcyB1c2VkIHdoZW4gZmV0Y2hpbmcgc291cmNlIGNvZGUuICBBIGJsYW5rIGZpZWxkIHVzZXMgYSBkaXJlY3QgaW50ZXJuZXQgY29ubmVjdGlvbi4iCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKCI8c3BhbiB3ZWlnaHQ9XCJib2xkXCI+U2V0IHRoZSBwcm94aWVzIHVzZWQgd2hlbiBmZXRjaGluZyBzb3VyY2UgY29kZTwvc3Bhbj4iICsgIioiICsgdG9vbHRpcCwgc2VsZikKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoaW5mbywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KGhib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBwcm94eV90ZXN0X2ZvY3VzID0gW10KKyAgICAgICAgc2VsZi5kaXJlY3RfY2hlY2tib3ggPSBndGsuUmFkaW9CdXR0b24oTm9uZSwgIkRpcmVjdCBuZXR3b3JrIGNvbm5lY3Rpb24iKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzLmFwcGVuZChzZWxmLmRpcmVjdF9jaGVja2JveCkKKyAgICAgICAgc2VsZi5kaXJlY3RfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gdXNlIGEgZGlyZWN0IGludGVybmV0IGNvbm5lY3Rpb24gd2l0aCBubyBwcm94eSIpCisgICAgICAgIHNlbGYuZGlyZWN0X2NoZWNrYm94LnNldF9hY3RpdmUobm90IHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5kaXJlY3RfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLnByb3h5X2NoZWNrYm94ID0gZ3RrLlJhZGlvQnV0dG9uKHNlbGYuZGlyZWN0X2NoZWNrYm94LCAiTWFudWFsIHByb3h5IGNvbmZpZ3VyYXRpb24iKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzLmFwcGVuZChzZWxmLnByb3h5X2NoZWNrYm94KQorICAgICAgICBzZWxmLnByb3h5X2NoZWNrYm94LnNldF90b29sdGlwX3RleHQoIkNoZWNrIHRoaXMgYm94IHRvIG1hbnVhbGx5IHNldCB1cCBhIHNwZWNpZmljIHByb3h5IikKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveC5zZXRfYWN0aXZlKHNlbGYuY29uZmlndXJhdGlvbi5lbmFibGVfcHJveHkpCisgICAgICAgIHN1Yl92Ym94LnBhY2tfc3RhcnQoc2VsZi5wcm94eV9jaGVja2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuc2FtZV9jaGVja2JveCA9IGd0ay5DaGVja0J1dHRvbigiVXNlIHRoZSBIVFRQIHByb3h5IGZvciBhbGwgcHJvdG9jb2xzIikKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cy5hcHBlbmQoc2VsZi5zYW1lX2NoZWNrYm94KQorICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guc2V0X3Rvb2x0aXBfdGV4dCgiQ2hlY2sgdGhpcyBib3ggdG8gdXNlIHRoZSBIVFRQIHByb3h5IGZvciBhbGwgZml2ZSBwcm94aWVzIikKKyAgICAgICAgc2VsZi5zYW1lX2NoZWNrYm94LnNldF9hY3RpdmUoc2VsZi5jb25maWd1cmF0aW9uLnNhbWVfcHJveHkpCisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnNhbWVfY2hlY2tib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSwgcGFkZGluZz0yNCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChoYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5wcm94eV90YWJsZSA9IGd0ay5UYWJsZSg2LCA1LCBGYWxzZSkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LCBzZWxmLmh0dHBfcHJveHlfcG9ydCwgc2VsZi5odHRwX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAiaHR0cCIsIHNlbGYsIFRydWUsIDApCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz1bc2VsZi5odHRwX3Byb3h5LCBzZWxmLmh0dHBfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5odHRwX3Byb3h5LmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLmh0dHBfcHJveHlfY2hhbmdlZCkKKyAgICAgICAgc2VsZi5odHRwX3Byb3h5X3BvcnQuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYuaHR0cF9wcm94eV9jaGFuZ2VkKQorCisgICAgICAgIHNlbGYuaHR0cHNfcHJveHksIHNlbGYuaHR0cHNfcHJveHlfcG9ydCwgc2VsZi5odHRwc19wcm94eV9kZXRhaWxzID0gc2VsZi5nZW5fcHJveHlfZW50cnlfd2lkZ2V0KAorICAgICAgICAgICAgImh0dHBzIiwgc2VsZiwgVHJ1ZSwgMSkKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyArPSBbc2VsZi5odHRwc19wcm94eSwgc2VsZi5odHRwc19wcm94eV9wb3J0XQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzLmFwcGVuZChzZWxmLmh0dHBzX3Byb3h5KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMuYXBwZW5kKHNlbGYuaHR0cHNfcHJveHlfcG9ydCkKKworICAgICAgICBzZWxmLmZ0cF9wcm94eSwgc2VsZi5mdHBfcHJveHlfcG9ydCwgc2VsZi5mdHBfcHJveHlfZGV0YWlscyA9IHNlbGYuZ2VuX3Byb3h5X2VudHJ5X3dpZGdldCgKKyAgICAgICAgICAgICJmdHAiLCBzZWxmLCBUcnVlLCAyKQorICAgICAgICBwcm94eV90ZXN0X2ZvY3VzICs9IFtzZWxmLmZ0cF9wcm94eSwgc2VsZi5mdHBfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlcy5hcHBlbmQoc2VsZi5mdHBfcHJveHkpCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9wb3J0cy5hcHBlbmQoc2VsZi5mdHBfcHJveHlfcG9ydCkKKworICAgICAgICBzZWxmLnNvY2tzX3Byb3h5LCBzZWxmLnNvY2tzX3Byb3h5X3BvcnQsIHNlbGYuc29ja3NfcHJveHlfZGV0YWlscyA9IHNlbGYuZ2VuX3Byb3h5X2VudHJ5X3dpZGdldCgKKyAgICAgICAgICAgICJzb2NrcyIsIHNlbGYsIFRydWUsIDMpCisgICAgICAgIHByb3h5X3Rlc3RfZm9jdXMgKz0gW3NlbGYuc29ja3NfcHJveHksIHNlbGYuc29ja3NfcHJveHlfcG9ydF0KKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X2FkZHJlc3Nlcy5hcHBlbmQoc2VsZi5zb2Nrc19wcm94eSkKKyAgICAgICAgc2VsZi5zYW1lX3Byb3h5X3BvcnRzLmFwcGVuZChzZWxmLnNvY2tzX3Byb3h5X3BvcnQpCisKKyAgICAgICAgc2VsZi5jdnNfcHJveHksIHNlbGYuY3ZzX3Byb3h5X3BvcnQsIHNlbGYuY3ZzX3Byb3h5X2RldGFpbHMgPSBzZWxmLmdlbl9wcm94eV9lbnRyeV93aWRnZXQoCisgICAgICAgICAgICAiY3ZzIiwgc2VsZiwgVHJ1ZSwgNCkKKyAgICAgICAgcHJveHlfdGVzdF9mb2N1cyArPSBbc2VsZi5jdnNfcHJveHksIHNlbGYuY3ZzX3Byb3h5X3BvcnRdCisgICAgICAgIHNlbGYuc2FtZV9wcm94eV9hZGRyZXNzZXMuYXBwZW5kKHNlbGYuY3ZzX3Byb3h5KQorICAgICAgICBzZWxmLnNhbWVfcHJveHlfcG9ydHMuYXBwZW5kKHNlbGYuY3ZzX3Byb3h5X3BvcnQpCisgICAgICAgIHNlbGYuYWxsX3Byb3h5X3BvcnRzID0gc2VsZi5zYW1lX3Byb3h5X3BvcnRzICsgW3NlbGYuaHR0cF9wcm94eV9wb3J0XQorICAgICAgICBzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXMgPSBzZWxmLnNhbWVfcHJveHlfYWRkcmVzc2VzICsgW3NlbGYuaHR0cF9wcm94eV0KKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChzZWxmLnByb3h5X3RhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYucHJveHlfdGFibGUuc2hvd19hbGwoKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBncmFwaGljYWwgZWxlbWVudHMgZm9yIHRoZSBuZXR3b3JrIHRlc3QgZmVhdHVyZSwgYnV0IGRvbid0IGRpc3BsYXkgdGhlbSB5ZXQKKyAgICAgICAgc2VsZi50ZXN0X25ldHdvcmtfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJUZXN0IG5ldHdvcmsgY29uZmlndXJhdGlvbiIpCisgICAgICAgIHNlbGYudGVzdF9uZXR3b3JrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi50ZXN0X25ldHdvcmtfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLnRlc3RfcHJveHlfcHJvZ3Jlc3MgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYuZHVtbXlfcHJvZ3Jlc3MgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYucmV0ZXN0X25ldHdvcmtfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJSZXRlc3QiKQorICAgICAgICBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi50ZXN0X25ldHdvcmtfYnV0dG9uX2NiKQorICAgICAgICBzZWxmLnRlc3RfZ3VpX2VsZW1lbnRzID0gW3NlbGYudGVzdF9uZXR3b3JrX2J1dHRvbiwgc2VsZi50ZXN0X3Byb3h5X3Byb2dyZXNzLCBzZWxmLmR1bW15X3Byb2dyZXNzLCBzZWxmLnJldGVzdF9uZXR3b3JrX2J1dHRvbl0KKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBuZXR3b3JrIHRlc3RlcgorICAgICAgICBzZWxmLnRlc3RfcHJveHlfc3RhdGUgPSBzZWxmLlRFU1RfTkVUV09SS19OT05FCisgICAgICAgIHNlbGYuc2V0X3Rlc3RfcHJveHlfc3RhdGUoc2VsZi5URVNUX05FVFdPUktfSU5JVElBTCkKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X3Bhc3NlZF9pZCA9IHNlbGYuaGFuZGxlci5jb25uZWN0KCJuZXR3b3JrLXBhc3NlZCIsIGxhbWJkYSBoOnNlbGYudGVzdF9wcm94eV9lbmRlZChUcnVlKSkKKyAgICAgICAgc2VsZi5wcm94eV90ZXN0X2ZhaWxlZF9pZCA9IHNlbGYuaGFuZGxlci5jb25uZWN0KCJuZXR3b3JrLWZhaWxlZCIsIGxhbWJkYSBoOnNlbGYudGVzdF9wcm94eV9lbmRlZChGYWxzZSkpCisgICAgICAgIFt3LmNvbm5lY3QoImZvY3VzLWluLWV2ZW50Iiwgc2VsZi50ZXN0X3Byb3h5X2ZvY3VzX2V2ZW50KSBmb3IgdyBpbiBwcm94eV90ZXN0X2ZvY3VzXQorICAgICAgICBbdy5jb25uZWN0KCJmb2N1cy1vdXQtZXZlbnQiLCBzZWxmLnByb3h5X2FkZHJlc3NfZm9jdXNfb3V0X2V2ZW50KSBmb3IgdyBpbiBzZWxmLmFsbF9wcm94eV9hZGRyZXNzZXNdCisKKyAgICAgICAgc2VsZi5kaXJlY3RfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYucHJveHlfY2hlY2tib3hfdG9nZ2xlZF9jYikKKyAgICAgICAgc2VsZi5wcm94eV9jaGVja2JveC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi5wcm94eV9jaGVja2JveF90b2dnbGVkX2NiKQorICAgICAgICBzZWxmLnNhbWVfY2hlY2tib3guY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYuc2FtZV9jaGVja2JveF90b2dnbGVkX2NiKQorCisgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKyAgICAgICAgcmV0dXJuIGFkdmFuY2VkX3Zib3gKKworICAgIGRlZiBzd2l0Y2hfdG9fcGFnZShzZWxmLCBwYWdlX2lkKToKKyAgICAgICAgc2VsZi5uYi5zZXRfY3VycmVudF9wYWdlKHBhZ2VfaWQpCisKKyAgICBkZWYgZGV0YWlsc19jYihzZWxmLCBidXR0b24sIHBhcmVudCwgcHJvdG9jb2wpOgorICAgICAgICBzZWxmLnNhdmVfcHJveHlfZGF0YSgpCisgICAgICAgIGRpYWxvZyA9IFByb3h5RGV0YWlsc0RpYWxvZyh0aXRsZSA9IHByb3RvY29sLnVwcGVyKCkgKyAiIFByb3h5IERldGFpbHMiLAorICAgICAgICAgICAgdXNlciA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsxXSwKKyAgICAgICAgICAgIHBhc3N3ZCA9IHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSwKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudCwKKyAgICAgICAgICAgIGZsYWdzID0gZ3RrLkRJQUxPR19NT0RBTAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICB8IGd0ay5ESUFMT0dfTk9fU0VQQVJBVE9SKQorICAgICAgICBkaWFsb2cuYWRkX2J1dHRvbihndGsuU1RPQ0tfQ0xPU0UsIGd0ay5SRVNQT05TRV9PSykKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLnByb3hpZXNbcHJvdG9jb2xdWzFdID0gZGlhbG9nLnVzZXIKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5wcm94aWVzW3Byb3RvY29sXVsyXSA9IGRpYWxvZy5wYXNzd2QKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9wcm94eV9jb21wb25lbnRzKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKSAgICAKKworICAgIGRlZiByb290ZnNfY29tYm9fY2hhbmdlZF9jYihzZWxmLCByb290ZnNfY29tYm8sIGFsbF9wYWNrYWdlX2Zvcm1hdCwgY2hlY2tfaGJveCk6CisgICAgICAgIGNvbWJvX2l0ZW0gPSBzZWxmLnJvb3Rmc19jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hlY2tfaGJveC5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIGd0ay5DaGVja0J1dHRvbik6CisgICAgICAgICAgICAgICAgY2hlY2tfaGJveC5yZW1vdmUoY2hpbGQpCisgICAgICAgIGZvciBmb3JtYXQgaW4gYWxsX3BhY2thZ2VfZm9ybWF0OgorICAgICAgICAgICAgaWYgZm9ybWF0ICE9IGNvbWJvX2l0ZW06CisgICAgICAgICAgICAgICAgY2hlY2tfYnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoY2hlY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGNoZWNrX2hib3guc2hvd19hbGwoKQorCisgICAgZGVmIGdlbl9wa2dmbXRfd2lkZ2V0KHNlbGYsIGN1cnJfcGFja2FnZV9mb3JtYXQsIGFsbF9wYWNrYWdlX2Zvcm1hdCwgdG9vbHRpcF9jb21ibz0iIiwgdG9vbHRpcF9leHRyYT0iIik6CisgICAgICAgIHBrZ2ZtdF9oYm94ID0gZ3RrLkhCb3goRmFsc2UsIDI0KQorCisgICAgICAgIHJvb3Rmc192Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIHBrZ2ZtdF9oYm94LnBhY2tfc3RhcnQocm9vdGZzX3Zib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBsYWJlbCA9IHNlbGYuZ2VuX2xhYmVsX3dpZGdldCgiUm9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdCIpCisgICAgICAgIHJvb3Rmc192Ym94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICByb290ZnNfZm9ybWF0ID0gIiIKKyAgICAgICAgaWYgY3Vycl9wYWNrYWdlX2Zvcm1hdDoKKyAgICAgICAgICAgIHJvb3Rmc19mb3JtYXQgPSBjdXJyX3BhY2thZ2VfZm9ybWF0LnNwbGl0KClbMF0KKworICAgICAgICByb290ZnNfZm9ybWF0X3dpZGdldCwgcm9vdGZzX2NvbWJvID0gc2VsZi5nZW5fY29tYm9fd2lkZ2V0KHJvb3Rmc19mb3JtYXQsIGFsbF9wYWNrYWdlX2Zvcm1hdCwgdG9vbHRpcF9jb21ibykKKyAgICAgICAgcm9vdGZzX3Zib3gucGFja19zdGFydChyb290ZnNfZm9ybWF0X3dpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIGV4dHJhX3Zib3ggPSBndGsuVkJveChGYWxzZSwgNikKKyAgICAgICAgcGtnZm10X2hib3gucGFja19zdGFydChleHRyYV92Ym94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIkFkZGl0aW9uYWwgcGFja2FnZSBmb3JtYXRzIikKKyAgICAgICAgZXh0cmFfdmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgY2hlY2tfaGJveCA9IGd0ay5IQm94KEZhbHNlLCAxMikKKyAgICAgICAgZXh0cmFfdmJveC5wYWNrX3N0YXJ0KGNoZWNrX2hib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgZm9yIGZvcm1hdCBpbiBhbGxfcGFja2FnZV9mb3JtYXQ6CisgICAgICAgICAgICBpZiBmb3JtYXQgIT0gcm9vdGZzX2Zvcm1hdDoKKyAgICAgICAgICAgICAgICBjaGVja19idXR0b24gPSBndGsuQ2hlY2tCdXR0b24oZm9ybWF0KQorICAgICAgICAgICAgICAgIGlzX2FjdGl2ZSA9IChmb3JtYXQgaW4gY3Vycl9wYWNrYWdlX2Zvcm1hdC5zcGxpdCgpKQorICAgICAgICAgICAgICAgIGNoZWNrX2J1dHRvbi5zZXRfYWN0aXZlKGlzX2FjdGl2ZSkKKyAgICAgICAgICAgICAgICBjaGVja19oYm94LnBhY2tfc3RhcnQoY2hlY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgaW5mbyA9IEhvYkluZm9CdXR0b24odG9vbHRpcF9leHRyYSwgc2VsZikKKyAgICAgICAgY2hlY2tfaGJveC5wYWNrX2VuZChpbmZvLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgcm9vdGZzX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnJvb3Rmc19jb21ib19jaGFuZ2VkX2NiLCBhbGxfcGFja2FnZV9mb3JtYXQsIGNoZWNrX2hib3gpCisKKyAgICAgICAgcGtnZm10X2hib3guc2hvd19hbGwoKQorCisgICAgICAgIHJldHVybiBwa2dmbXRfaGJveCwgcm9vdGZzX2NvbWJvLCBjaGVja19oYm94CisKKyAgICBkZWYgZWRpdGFibGVfc2V0dGluZ3NfY2VsbF9lZGl0ZWQoc2VsZiwgY2VsbCwgcGF0aF9zdHJpbmcsIG5ld190ZXh0LCBtb2RlbCk6CisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZnJvbV9zdHJpbmcocGF0aF9zdHJpbmcpCisgICAgICAgIGNvbHVtbiA9IGNlbGwuZ2V0X2RhdGEoImNvbHVtbiIpCisgICAgICAgIG1vZGVsLnNldChpdCwgY29sdW1uLCBuZXdfdGV4dCkKKworICAgIGRlZiBlZGl0YWJsZV9zZXR0aW5nc19hZGRfaXRlbV9jbGlja2VkKHNlbGYsIGJ1dHRvbiwgbW9kZWwpOgorICAgICAgICBuZXdfaXRlbSA9IFsiIyNLRVkjIyIsICIjI1ZBTFVFIyMiXQorCisgICAgICAgIGl0ZXIgPSBtb2RlbC5hcHBlbmQoKQorICAgICAgICBtb2RlbC5zZXQgKGl0ZXIsCisgICAgICAgICAgICAwLCBuZXdfaXRlbVswXSwKKyAgICAgICAgICAgIDEsIG5ld19pdGVtWzFdLAorICAgICAgICkKKworICAgIGRlZiBlZGl0YWJsZV9zZXR0aW5nc19yZW1vdmVfaXRlbV9jbGlja2VkKHNlbGYsIGJ1dHRvbiwgdHJlZXZpZXcpOgorICAgICAgICBzZWxlY3Rpb24gPSB0cmVldmlldy5nZXRfc2VsZWN0aW9uKCkKKyAgICAgICAgbW9kZWwsIGl0ZXIgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKworICAgICAgICBpZiBpdGVyOgorICAgICAgICAgICAgcGF0aCA9IG1vZGVsLmdldF9wYXRoKGl0ZXIpWzBdCisgICAgICAgICAgICBtb2RlbC5yZW1vdmUoaXRlcikKKyAKKyAgICBkZWYgZ2VuX2VkaXRhYmxlX3NldHRpbmdzKHNlbGYsIHNldHRpbmcsIHRvb2x0aXA9IiIpOgorICAgICAgICBzZXR0aW5nX2hib3ggPSBndGsuSEJveChGYWxzZSwgMTIpCisKKyAgICAgICAgdmJveCA9IGd0ay5WQm94KEZhbHNlLCAxMikKKyAgICAgICAgc2V0dGluZ19oYm94LnBhY2tfc3RhcnQodmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBzZXR0aW5nX3N0b3JlID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBmb3Iga2V5IGluIHNldHRpbmcua2V5cygpOgorICAgICAgICAgICAgc2V0dGluZ19zdG9yZS5zZXQoc2V0dGluZ19zdG9yZS5hcHBlbmQoKSwgMCwga2V5LCAxLCBzZXR0aW5nW2tleV0pCisKKyAgICAgICAgc2V0dGluZ190cmVlID0gZ3RrLlRyZWVWaWV3KHNldHRpbmdfc3RvcmUpCisgICAgICAgIHNldHRpbmdfdHJlZS5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCisgICAgICAgIHNldHRpbmdfdHJlZS5zZXRfc2l6ZV9yZXF1ZXN0KDMwMCwgMTAwKQorCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbignS2V5JykKKyAgICAgICAgY29sLnNldF9taW5fd2lkdGgoMTAwKQorICAgICAgICBjb2wuc2V0X21heF93aWR0aCgxNTApCisgICAgICAgIGNvbC5zZXRfcmVzaXphYmxlKFRydWUpCisgICAgICAgIGNvbDEgPSBndGsuVHJlZVZpZXdDb2x1bW4oJ1ZhbHVlJykKKyAgICAgICAgY29sMS5zZXRfbWluX3dpZHRoKDEwMCkKKyAgICAgICAgY29sMS5zZXRfbWF4X3dpZHRoKDE1MCkKKyAgICAgICAgY29sMS5zZXRfcmVzaXphYmxlKFRydWUpCisgICAgICAgIHNldHRpbmdfdHJlZS5hcHBlbmRfY29sdW1uKGNvbCkKKyAgICAgICAgc2V0dGluZ190cmVlLmFwcGVuZF9jb2x1bW4oY29sMSkKKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ3dpZHRoLWNoYXJzJywgMTApCisgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIFRydWUpCisgICAgICAgIGNlbGwuc2V0X2RhdGEoImNvbHVtbiIsIDApCisgICAgICAgIGNlbGwuY29ubmVjdCgiZWRpdGVkIiwgc2VsZi5lZGl0YWJsZV9zZXR0aW5nc19jZWxsX2VkaXRlZCwgc2V0dGluZ19zdG9yZSkKKyAgICAgICAgY2VsbDEgPSBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpCisgICAgICAgIGNlbGwxLnNldF9wcm9wZXJ0eSgnd2lkdGgtY2hhcnMnLCAxMCkKKyAgICAgICAgY2VsbDEuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIFRydWUpCisgICAgICAgIGNlbGwxLnNldF9kYXRhKCJjb2x1bW4iLCAxKQorICAgICAgICBjZWxsMS5jb25uZWN0KCJlZGl0ZWQiLCBzZWxmLmVkaXRhYmxlX3NldHRpbmdzX2NlbGxfZWRpdGVkLCBzZXR0aW5nX3N0b3JlKQorICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICBjb2wxLnBhY2tfZW5kKGNlbGwxLCBUcnVlKQorICAgICAgICBjb2wuc2V0X2F0dHJpYnV0ZXMoY2VsbCwgdGV4dD0wKQorICAgICAgICBjb2wxLnNldF9hdHRyaWJ1dGVzKGNlbGwxLCB0ZXh0PTEpCisKKyAgICAgICAgc2Nyb2xsID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzY3JvbGwuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbC5hZGQoc2V0dGluZ190cmVlKQorICAgICAgICB2Ym94LnBhY2tfc3RhcnQoc2Nyb2xsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgc29tZSBidXR0b25zCisgICAgICAgIGhib3ggPSBndGsuSEJveChUcnVlLCA2KQorICAgICAgICB2Ym94LnBhY2tfc3RhcnQoaGJveCwgRmFsc2UsIEZhbHNlKQorCisgICAgICAgIGJ1dHRvbiA9IGd0ay5CdXR0b24oc3RvY2s9Z3RrLlNUT0NLX0FERCkKKyAgICAgICAgYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRhYmxlX3NldHRpbmdzX2FkZF9pdGVtX2NsaWNrZWQsIHNldHRpbmdfc3RvcmUpCisgICAgICAgIGhib3gucGFja19zdGFydChidXR0b24pCisKKyAgICAgICAgYnV0dG9uID0gZ3RrLkJ1dHRvbihzdG9jaz1ndGsuU1RPQ0tfUkVNT1ZFKQorICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZWRpdGFibGVfc2V0dGluZ3NfcmVtb3ZlX2l0ZW1fY2xpY2tlZCwgc2V0dGluZ190cmVlKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQoYnV0dG9uKQorCisgICAgICAgIGluZm8gPSBIb2JJbmZvQnV0dG9uKHRvb2x0aXAsIHNlbGYpCisgICAgICAgIHNldHRpbmdfaGJveC5wYWNrX3N0YXJ0KGluZm8sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICByZXR1cm4gc2V0dGluZ19oYm94LCBzZXR0aW5nX3N0b3JlCisKKyAgICBkZWYgY3JlYXRlX290aGVyc19wYWdlKHNlbGYpOgorICAgICAgICBhZHZhbmNlZF92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3guc2V0X2JvcmRlcl93aWR0aCg2KQorCisgICAgICAgIHN1Yl92Ym94ID0gZ3RrLlZCb3goRmFsc2UsIDYpCisgICAgICAgIGFkdmFuY2VkX3Zib3gucGFja19zdGFydChzdWJfdmJveCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgbGFiZWwgPSBzZWxmLmdlbl9sYWJlbF93aWRnZXQoIjxzcGFuIHdlaWdodD1cImJvbGRcIj5BZGQgeW91ciBvd24gdmFyaWFibGVzOjwvc3Bhbj4iKQorICAgICAgICB0b29sdGlwID0gIlRoZXNlIGFyZSBrZXkvdmFsdWUgcGFpcnMgZm9yIHlvdXIgZXh0cmEgc2V0dGluZ3MuIENsaWNrIFwnQWRkXCcgYW5kIHRoZW4gZGlyZWN0bHkgZWRpdCB0aGUga2V5IGFuZCB0aGUgdmFsdWUiCisgICAgICAgIHNldHRpbmdfd2lkZ2V0LCBzZWxmLnNldHRpbmdfc3RvcmUgPSBzZWxmLmdlbl9lZGl0YWJsZV9zZXR0aW5ncyhzZWxmLmNvbmZpZ3VyYXRpb24uZXh0cmFfc2V0dGluZywiPGI+QWRkIHlvdXIgb3duIHZhcmlhYmxlczwvYj4iICsgIioiICsgdG9vbHRpcCkKKyAgICAgICAgc3ViX3Zib3gucGFja19zdGFydChsYWJlbCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzdWJfdmJveC5wYWNrX3N0YXJ0KHNldHRpbmdfd2lkZ2V0LCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHJldHVybiBhZHZhbmNlZF92Ym94CisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5uYiA9IGd0ay5Ob3RlYm9vaygpCisgICAgICAgIHNlbGYubmIuc2V0X3Nob3dfdGFicyhUcnVlKSAgICAgICAgCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfYnVpbGRfZW52aXJvbm1lbnRfcGFnZSgpLCBndGsuTGFiZWwoIkJ1aWxkIGVudmlyb25tZW50IikpCisgICAgICAgIHNlbGYubmIuYXBwZW5kX3BhZ2Uoc2VsZi5jcmVhdGVfc2hhcmVkX3N0YXRlX3BhZ2UoKSwgZ3RrLkxhYmVsKCJTaGFyZWQgc3RhdGUiKSkKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9uZXR3b3JrX3BhZ2UoKSwgZ3RrLkxhYmVsKCJOZXR3b3JrIikpICAgICAgICAKKyAgICAgICAgc2VsZi5uYi5hcHBlbmRfcGFnZShzZWxmLmNyZWF0ZV9vdGhlcnNfcGFnZSgpLCBndGsuTGFiZWwoIk90aGVycyIpKQorICAgICAgICBzZWxmLm5iLnNldF9jdXJyZW50X3BhZ2UoMCkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQoc2VsZi5uYiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfZW5kKGd0ay5IU2VwYXJhdG9yKCksIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgZGVzdHJveShzZWxmKToKKyAgICAgICAgc2VsZi5oYW5kbGVyLmRpc2Nvbm5lY3Qoc2VsZi5wcm94eV90ZXN0X3Bhc3NlZF9pZCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmRpc2Nvbm5lY3Qoc2VsZi5wcm94eV90ZXN0X2ZhaWxlZF9pZCkKKyAgICAgICAgc3VwZXIoU2ltcGxlU2V0dGluZ3NEaWFsb2csIHNlbGYpLmRlc3Ryb3koKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmNvbG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTY1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iY29sb3IucHkKQEAgLTAsMCArMSwzOCBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2NsYXNzIEhvYkNvbG9yczoKKyAgICBXSElURSAgICAgICAgPSAiI2ZmZmZmZiIKKyAgICBQQUxFX0dSRUVOICAgPSAiI2FhZmZhYSIKKyAgICBPUkFOR0UgICAgICAgPSAiI2ViOGU2OCIKKyAgICBQQUxFX1JFRCAgICAgPSAiI2ZmYWFhYSIKKyAgICBHUkFZICAgICAgICAgPSAiI2FhYWFhYSIKKyAgICBMSUdIVF9HUkFZICAgPSAiI2RkZGRkZCIKKyAgICBTTElHSFRfREFSSyAgPSAiIzVmNWY1ZiIKKyAgICBEQVJLICAgICAgICAgPSAiIzNjM2IzNyIKKyAgICBCTEFDSyAgICAgICAgPSAiIzAwMDAwMCIKKyAgICBQQUxFX0JMVUUgICAgPSAiIzUzYjhmZiIKKyAgICBERUVQX1JFRCAgICAgPSAiI2FhM2UzZSIKKyAgICBLSEFLSSAgICAgICAgPSAiI2ZmZjY4ZiIKKworICAgIE9LID0gV0hJVEUKKyAgICBSVU5OSU5HID0gUEFMRV9HUkVFTgorICAgIFdBUk5JTkcgPSBPUkFOR0UKKyAgICBFUlJPUiA9IFBBTEVfUkVECmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9iZXZlbnRoYW5kbGVyLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmV2ZW50aGFuZGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzFmYjMzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmV2ZW50aGFuZGxlci5weQpAQCAtMCwwICsxLDY0NSBAQAorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhc3QKK2Zyb20gYmIudWkuY3J1bWJzLnJ1bm5pbmdidWlsZCBpbXBvcnQgUnVubmluZ0J1aWxkCisKK2NsYXNzIEhvYkhhbmRsZXIoZ29iamVjdC5HT2JqZWN0KToKKworICAgICIiIgorICAgIFRoaXMgb2JqZWN0IGRvZXMgQml0QmFrZSBldmVudCBoYW5kbGluZyBmb3IgdGhlIGhvYiBndWkuCisgICAgIiIiCisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAgInBhY2thZ2UtZm9ybWF0cy11cGRhdGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJjb25maWctdXBkYXRlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAiY29tbWFuZC1zdWNjZWVkZWQiICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX0lOVCwpKSwKKyAgICAgICAgICJjb21tYW5kLWZhaWxlZCIgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCkpLAorICAgICAgICAgInBhcnNpbmctd2FybmluZyIgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsKSksCisgICAgICAgICAic2FuaXR5LWZhaWxlZCIgICAgICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1NUUklORywgZ29iamVjdC5UWVBFX0lOVCkpLAorICAgICAgICAgImdlbmVyYXRpbmctZGF0YSIgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgImRhdGEtZ2VuZXJhdGVkIiAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgInBhcnNpbmctc3RhcnRlZCIgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJwYXJzaW5nIiAgICAgICAgICAgICAgICAgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAicGFyc2luZy1jb21wbGV0ZWQiICAgICAgIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgInJlY2lwZS1wb3B1bGF0ZWQiICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgInBhY2thZ2UtcG9wdWxhdGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgIm5ldHdvcmstcGFzc2VkIiAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgIm5ldHdvcmstZmFpbGVkIiAgICAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgIH0KKworICAgIChHRU5FUkFURV9DT05GSUdVUkFUSU9OLCBHRU5FUkFURV9SRUNJUEVTLCBHRU5FUkFURV9QQUNLQUdFUywgR0VORVJBVEVfSU1BR0UsIFBPUFVMQVRFX1BBQ0tBR0VJTkZPLCBTQU5JVFlfQ0hFQ0ssIE5FVFdPUktfVEVTVCkgPSByYW5nZSg3KQorICAgIChTVUJfUEFUSF9MQVlFUlMsIFNVQl9GSUxFU19ESVNUUk8sIFNVQl9GSUxFU19NQUNILCBTVUJfRklMRVNfU0RLTUFDSCwgU1VCX01BVENIX0NMQVNTLCBTVUJfUEFSU0VfQ09ORklHLCBTVUJfU0FOSVRZX0NIRUNLLAorICAgICBTVUJfR05FUkFURV9UR1RTLCBTVUJfR0VORVJBVEVfUEtHSU5GTywgU1VCX0JVSUxEX1JFQ0lQRVMsIFNVQl9CVUlMRF9JTUFHRSwgU1VCX05FVFdPUktfVEVTVCkgPSByYW5nZSgxMikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIHJlY2lwZV9tb2RlbCwgcGFja2FnZV9tb2RlbCk6CisgICAgICAgIHN1cGVyKEhvYkhhbmRsZXIsIHNlbGYpLl9faW5pdF9fKCkKKworICAgICAgICBzZWxmLmJ1aWxkID0gUnVubmluZ0J1aWxkKHNlcXVlbnRpYWw9VHJ1ZSkKKworICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbCA9IHJlY2lwZV9tb2RlbAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwgPSBwYWNrYWdlX21vZGVsCisKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYyA9IFtdCisgICAgICAgIHNlbGYuZ2VuZXJhdGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9IE5vbmUKKyAgICAgICAgc2VsZi5idWlsZGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYucmVjaXBlX3F1ZXVlID0gW10KKyAgICAgICAgc2VsZi5wYWNrYWdlX3F1ZXVlID0gW10KKworICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLmVycm9yX21zZyA9ICIiCisgICAgICAgIHNlbGYuaW5pdGNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXJzaW5nID0gRmFsc2UKKworICAgIGRlZiBzZXRfYnVzeShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZ2VuZXJhdGluZzoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiZ2VuZXJhdGluZy1kYXRhIikKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGluZyA9IFRydWUKKworICAgIGRlZiBjbGVhcl9idXN5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdlbmVyYXRpbmc6CisgICAgICAgICAgICBzZWxmLmVtaXQoImRhdGEtZ2VuZXJhdGVkIikKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGluZyA9IEZhbHNlCisKKyAgICBkZWYgcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kbGluZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCwgZXJyb3IgPSBzZWxmLnNlcnZlci5ydW5Db21tYW5kKGNvbW1hbmRsaW5lKQorICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogJXMiICUgKGNvbW1hbmRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMgPSBbXQorICAgICAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiY29tbWFuZC1mYWlsZWQiLCAiSG9iIEV4Y2VwdGlvbiAtICVzIiAlIChzdHIoZSkpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBydW5fbmV4dF9jb21tYW5kKHNlbGYsIGluaXRjbWQ9Tm9uZSk6CisgICAgICAgIGlmIGluaXRjbWQgIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYuaW5pdGNtZCA9IGluaXRjbWQKKworICAgICAgICBpZiBzZWxmLmNvbW1hbmRzX2FzeW5jOgorICAgICAgICAgICAgc2VsZi5zZXRfYnVzeSgpCisgICAgICAgICAgICBuZXh0X2NvbW1hbmQgPSBzZWxmLmNvbW1hbmRzX2FzeW5jLnBvcCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgICAgIGlmIHNlbGYuaW5pdGNtZCAhPSBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiY29tbWFuZC1zdWNjZWVkZWQiLCBzZWxmLmluaXRjbWQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfUEFUSF9MQVlFUlM6CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJmaW5kQ29uZmlnRmlsZVBhdGgiLCAiYmJsYXllcnMuY29uZiJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9GSUxFU19ESVNUUk86CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJmaW5kQ29uZmlnRmlsZXMiLCAiRElTVFJPIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0ZJTEVTX01BQ0g6CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJmaW5kQ29uZmlnRmlsZXMiLCAiTUFDSElORSJdKQorICAgICAgICBlbGlmIG5leHRfY29tbWFuZCA9PSBzZWxmLlNVQl9GSUxFU19TREtNQUNIOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZENvbmZpZ0ZpbGVzIiwgIk1BQ0hJTkUtU0RLIl0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX01BVENIX0NMQVNTOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZmluZEZpbGVzTWF0Y2hpbmdJbkRpciIsICJyb290ZnNfIiwgImNsYXNzZXMiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfUEFSU0VfQ09ORklHOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsicmVzZXRDb29rZXIiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfR05FUkFURV9UR1RTOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZ2VuZXJhdGVUYXJnZXRzVHJlZSIsICJjbGFzc2VzL2ltYWdlLmJiY2xhc3MiLCBbXV0pCisgICAgICAgIGVsaWYgbmV4dF9jb21tYW5kID09IHNlbGYuU1VCX0dFTkVSQVRFX1BLR0lORk86CisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJ0cmlnZ2VyRXZlbnQiLCAiYmIuZXZlbnQuUmVxdWVzdFBhY2thZ2VJbmZvKCkiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfU0FOSVRZX0NIRUNLOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsidHJpZ2dlckV2ZW50IiwgImJiLmV2ZW50LlNhbml0eUNoZWNrKCkiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfTkVUV09SS19URVNUOgorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsidHJpZ2dlckV2ZW50IiwgImJiLmV2ZW50Lk5ldHdvcmtUZXN0KCkiXSkKKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfQlVJTERfUkVDSVBFUzoKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfYnVzeSgpCisgICAgICAgICAgICBzZWxmLmJ1aWxkaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiYnVpbGRUYXJnZXRzIiwgc2VsZi5yZWNpcGVfcXVldWUsIHNlbGYuZGVmYXVsdF90YXNrXSkKKyAgICAgICAgICAgIHNlbGYucmVjaXBlX3F1ZXVlID0gW10KKyAgICAgICAgZWxpZiBuZXh0X2NvbW1hbmQgPT0gc2VsZi5TVUJfQlVJTERfSU1BR0U6CisgICAgICAgICAgICBzZWxmLmNsZWFyX2J1c3koKQorICAgICAgICAgICAgc2VsZi5idWlsZGluZyA9IFRydWUKKyAgICAgICAgICAgIHRhcmdldCA9IHNlbGYuaW1hZ2UKKworICAgICAgICAgICAgaWYgc2VsZi5iYXNlX2ltYWdlOgorICAgICAgICAgICAgICAgICMgUmVxdWVzdCB0aGUgYnVpbGQgb2YgYSBjdXN0b20gaW1hZ2UKKyAgICAgICAgICAgICAgICBzZWxmLmdlbmVyYXRlX2hvYl9iYXNlX2ltYWdlKHRhcmdldCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiTElOR1VBU19JTlNUQUxMIiwgIiIsICJsb2NhbC5jb25mIikKKyAgICAgICAgICAgICAgICBob2JJbWFnZSA9IHNlbGYucnVuQ29tbWFuZChbIm1hdGNoRmlsZSIsIHRhcmdldCArICIuYmIiXSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmJhc2VfaW1hZ2UgIT0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICAgICAgYmFzZUltYWdlID0gc2VsZi5ydW5Db21tYW5kKFsibWF0Y2hGaWxlIiwgc2VsZi5iYXNlX2ltYWdlICsgIi5iYiJdKQorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5ydW5Db21tYW5kKFsiZ2VuZXJhdGVOZXdJbWFnZSIsIGhvYkltYWdlLCBiYXNlSW1hZ2UsIHNlbGYucGFja2FnZV9xdWV1ZSwgVHJ1ZSwgIiJdKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgKz0gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5zZXRfY3VzdG9tX2ltYWdlX3ZlcnNpb24odmVyc2lvbikKKworICAgICAgICAgICAgdGFyZ2V0cyA9IFt0YXJnZXRdCisgICAgICAgICAgICBpZiBzZWxmLnRvb2xjaGFpbl9wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIiwgIiAiLmpvaW4oc2VsZi50b29sY2hhaW5fcGFja2FnZXMpLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgdGFyZ2V0cy5hcHBlbmQodGFyZ2V0ICsgIjpkb19wb3B1bGF0ZV9zZGsiKQorCisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJidWlsZFRhcmdldHMiLCB0YXJnZXRzLCBzZWxmLmRlZmF1bHRfdGFza10pCisKKyAgICBkZWYgZGlzcGxheV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jbGVhcl9idXN5KCkKKyAgICAgICAgc2VsZi5lbWl0KCJjb21tYW5kLWZhaWxlZCIsIHNlbGYuZXJyb3JfbXNnKQorICAgICAgICBzZWxmLmVycm9yX21zZyA9ICIiCisgICAgICAgIGlmIHNlbGYuYnVpbGRpbmc6CisgICAgICAgICAgICBzZWxmLmJ1aWxkaW5nID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBub3QgZXZlbnQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5idWlsZGluZzoKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJidWlsZGluZyIKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuaGFuZGxlX2V2ZW50KGV2ZW50KQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhY2thZ2VJbmZvKToKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5wb3B1bGF0ZShldmVudC5fcGtnaW5mb2xpc3QpCisgICAgICAgICAgICBzZWxmLmVtaXQoInBhY2thZ2UtcG9wdWxhdGVkIikKKyAgICAgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZCgpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCk6CisgICAgICAgICAgICByZXBhcnNlID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfSU5WQUxJRENPTkYiXSkgb3IgTm9uZQorICAgICAgICAgICAgaWYgcmVwYXJzZSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJCQl9JTlZBTElEQ09ORiIsIEZhbHNlLCAibG9jYWwuY29uZiIpCisgICAgICAgICAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic2V0UHJlUG9zdENvbmZGaWxlcyIsICJjb25mLy5ob2IuY29uZiIsICIiXSkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLnByZXBlbmQoc2VsZi5TVUJfUEFSU0VfQ09ORklHKQorICAgICAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKCkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgic2FuaXR5LWZhaWxlZCIsIGV2ZW50Ll9tc2csIGV2ZW50Ll9uZXR3b3JrX2Vycm9yKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgbG9nZ2luZy5Mb2dSZWNvcmQpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuYnVpbGRpbmc6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgorICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoKQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBmb3JtYXR0ZXIuZm9ybWF0KGV2ZW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yX21zZyArPSBtc2cgKyAnXG4nCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID49IGxvZ2dpbmcuV0FSTklORyBhbmQgc2VsZi5wYXJzaW5nID09IFRydWU6CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9IGZvcm1hdHRlci5mb3JtYXQoZXZlbnQpCisgICAgICAgICAgICAgICAgICAgIHdhcm5fbXNnID0gbXNnICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoInBhcnNpbmctd2FybmluZyIsIHdhcm5fbXNnKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gImRhdGEgZ2VuZXJhdGlvbiIKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9tb2RlbDoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5wb3B1bGF0ZShldmVudC5fbW9kZWwpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJyZWNpcGUtcG9wdWxhdGVkIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kKToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9waGFzZSA9ICJjb25maWd1cmF0aW9uIGxvb2t1cCIKKyAgICAgICAgICAgIHZhciA9IGV2ZW50Ll92YXJpYWJsZQorICAgICAgICAgICAgdmFsdWVzID0gZXZlbnQuX3ZhbHVlcworICAgICAgICAgICAgdmFsdWVzLnNvcnQoKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJjb25maWctdXBkYXRlZCIsIHZhciwgdmFsdWVzKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNvbmZpZ0ZpbGVQYXRoRm91bmQpOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BoYXNlID0gImNvbmZpZ3VyYXRpb24gbG9va3VwIgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkZpbGVzTWF0Y2hpbmdGb3VuZCk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSAiY29uZmlndXJhdGlvbiBsb29rdXAiCisgICAgICAgICAgICAjIEZJWE1FOiBoYXJkIGNvZGluZywgc2hvdWxkIGF0IGxlYXN0IGJlIGEgdmFyaWFibGUgc2hhcmVkIGJldHdlZW4KKyAgICAgICAgICAgICMgaGVyZSBhbmQgdGhlIGNhbGxlcgorICAgICAgICAgICAgaWYgZXZlbnQuX3BhdHRlcm4gPT0gInJvb3Rmc18iOgorICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBtYXRjaCBpbiBldmVudC5fbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NuYW1lLCBzZXAsIGNscyA9IG1hdGNoLnJwYXJ0aXRpb24oIi4iKQorICAgICAgICAgICAgICAgICAgICBmcywgc2VwLCBmb3JtYXQgPSBjbGFzc25hbWUucnBhcnRpdGlvbigiXyIpCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuYXBwZW5kKGZvcm1hdCkKKyAgICAgICAgICAgICAgICBmb3JtYXRzLnNvcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgicGFja2FnZS1mb3JtYXRzLXVwZGF0ZWQiLCBmb3JtYXRzKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGhhc2UgPSBOb25lCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICBpZiBldmVudC5lcnJvciBub3QgaW4gKCJGb3JjZWQgc2h1dGRvd24iLCAiU3RvcHBlZCBidWlsZCIpOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfbXNnICs9IGV2ZW50LmVycm9yCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jID0gW10KKyAgICAgICAgICAgIHNlbGYuZGlzcGxheV9lcnJvcigpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlBhcnNlU3RhcnRlZCwKKyAgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCwKKyAgICAgICAgICAgICAgICAgYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgICkpOgorICAgICAgICAgICAgbWVzc2FnZSA9IHt9CisgICAgICAgICAgICBtZXNzYWdlWyJldmVudG5hbWUiXSA9IGJiLmV2ZW50LmdldE5hbWUoZXZlbnQpCisgICAgICAgICAgICBtZXNzYWdlWyJjdXJyZW50Il0gPSAwCisgICAgICAgICAgICBtZXNzYWdlWyJ0b3RhbCJdID0gTm9uZQorICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICJQYXJzaW5nIHJlY2lwZXMiCisgICAgICAgICAgICBzZWxmLmVtaXQoInBhcnNpbmctc3RhcnRlZCIsIG1lc3NhZ2UpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2luZyA9IFRydWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuUGFyc2VQcm9ncmVzcywKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcywKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uUHJvZ3Jlc3MpKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB7fQorICAgICAgICAgICAgbWVzc2FnZVsiZXZlbnRuYW1lIl0gPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgICAgICAgICAgbWVzc2FnZVsiY3VycmVudCJdID0gZXZlbnQuY3VycmVudAorICAgICAgICAgICAgbWVzc2FnZVsidG90YWwiXSA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBtZXNzYWdlWyJ0aXRsZSJdID0gIlBhcnNpbmcgcmVjaXBlcyIKKyAgICAgICAgICAgIHNlbGYuZW1pdCgicGFyc2luZyIsIG1lc3NhZ2UpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkLAorICAgICAgICAgICAgICAgIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkKSk6CisgICAgICAgICAgICBtZXNzYWdlID0ge30KKyAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBtZXNzYWdlWyJ0b3RhbCJdID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgIG1lc3NhZ2VbInRpdGxlIl0gPSAiUGFyc2luZyByZWNpcGVzIgorICAgICAgICAgICAgc2VsZi5lbWl0KCJwYXJzaW5nLWNvbXBsZXRlZCIsIG1lc3NhZ2UpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzaW5nID0gRmFsc2UKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5OZXR3b3JrVGVzdEZhaWxlZCk6CisgICAgICAgICAgICBzZWxmLmVtaXQoIm5ldHdvcmstZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZCgpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTmV0d29ya1Rlc3RQYXNzZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJuZXR3b3JrLXBhc3NlZCIpCisgICAgICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoKQorCisgICAgICAgIGlmIHNlbGYuZXJyb3JfbXNnIGFuZCBub3Qgc2VsZi5jb21tYW5kc19hc3luYzoKKyAgICAgICAgICAgIHNlbGYuZGlzcGxheV9lcnJvcigpCisKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgaW5pdF9jb29rZXIoc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImNyZWF0ZUNvbmZpZ0ZpbGUiLCAiLmhvYi5jb25mIl0pCisKKyAgICBkZWYgc2V0X2V4dHJhX2luaGVyaXQoc2VsZiwgYmJjbGFzcyk6CisgICAgICAgIHNlbGYuYXBwZW5kX3Zhcl9pbl9maWxlKCJJTkhFUklUIiwgYmJjbGFzcywgIi5ob2IuY29uZiIpCisKKyAgICBkZWYgc2V0X2JibGF5ZXJzKHNlbGYsIGJibGF5ZXJzKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkJCTEFZRVJTIiwgIiAiLmpvaW4oYmJsYXllcnMpLCAiYmJsYXllcnMuY29uZiIpCisKKyAgICBkZWYgc2V0X21hY2hpbmUoc2VsZiwgbWFjaGluZSk6CisgICAgICAgIGlmIG1hY2hpbmU6CisgICAgICAgICAgICBzZWxmLmVhcmx5X2Fzc2lnbl92YXJfaW5fZmlsZSgiTUFDSElORSIsIG1hY2hpbmUsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc2RrX21hY2hpbmUoc2VsZiwgc2RrX21hY2hpbmUpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiU0RLTUFDSElORSIsIHNka19tYWNoaW5lLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2ltYWdlX2ZzdHlwZXMoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9GU1RZUEVTIiwgaW1hZ2VfZnN0eXBlcywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9kaXN0cm8oc2VsZiwgZGlzdHJvKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkRJU1RSTyIsIGRpc3RybywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9wYWNrYWdlX2Zvcm1hdChzZWxmLCBmb3JtYXQpOgorICAgICAgICBwYWNrYWdlX2NsYXNzZXMgPSAiIgorICAgICAgICBmb3IgcGtnZm10IGluIGZvcm1hdC5zcGxpdCgpOgorICAgICAgICAgICAgcGFja2FnZV9jbGFzc2VzICs9ICgicGFja2FnZV8lcyIgJSBwa2dmbXQgKyAiICIpCisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJQQUNLQUdFX0NMQVNTRVMiLCBwYWNrYWdlX2NsYXNzZXMsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfYmJ0aHJlYWRzKHNlbGYsIHRocmVhZHMpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiQkJfTlVNQkVSX1RIUkVBRFMiLCB0aHJlYWRzLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X3BtYWtlKHNlbGYsIHRocmVhZHMpOgorICAgICAgICBwbWFrZSA9ICItaiAlcyIgJSB0aHJlYWRzCisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJQQVJBTExFTF9NQUtFIiwgcG1ha2UsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZGxfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJETF9ESVIiLCBkaXJlY3RvcnksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfc3N0YXRlX2RpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX0RJUiIsIGRpcmVjdG9yeSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9zc3RhdGVfbWlycm9ycyhzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiU1NUQVRFX01JUlJPUlMiLCB1cmwsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZXh0cmFfc2l6ZShzZWxmLCBpbWFnZV9leHRyYV9zaXplKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSIsIHN0cihpbWFnZV9leHRyYV9zaXplKSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9yb290ZnNfc2l6ZShzZWxmLCBpbWFnZV9yb290ZnNfc2l6ZSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTUFHRV9ST09URlNfU0laRSIsIHN0cihpbWFnZV9yb290ZnNfc2l6ZSksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfaW5jb21wYXRpYmxlX2xpY2Vuc2Uoc2VsZiwgaW5jb21wYXRfbGljZW5zZSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJJTkNPTVBBVElCTEVfTElDRU5TRSIsIGluY29tcGF0X2xpY2Vuc2UsICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfZXh0cmFfc2V0dGluZyhzZWxmLCBleHRyYV9zZXR0aW5nKToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkVYVFJBX1NFVFRJTkciLCBleHRyYV9zZXR0aW5nLCAibG9jYWwuY29uZiIpCisKKyAgICBkZWYgc2V0X2V4dHJhX2NvbmZpZyhzZWxmLCBleHRyYV9zZXR0aW5nKToKKyAgICAgICAgb2xkX2V4dHJhX3NldHRpbmcgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJFWFRSQV9TRVRUSU5HIl0pIG9yIHt9CisgICAgICAgIG9sZF9leHRyYV9zZXR0aW5nID0gc3RyKG9sZF9leHRyYV9zZXR0aW5nKQorCisgICAgICAgIG9sZF9leHRyYV9zZXR0aW5nID0gYXN0LmxpdGVyYWxfZXZhbChvbGRfZXh0cmFfc2V0dGluZykKKyAgICAgICAgaWYgbm90IHR5cGUob2xkX2V4dHJhX3NldHRpbmcpID09IGRpY3Q6CisgICAgICAgICAgICBvbGRfZXh0cmFfc2V0dGluZyA9IHt9CisKKyAgICAgICAgIyBzZXR0aW5ncyBub3QgY2hhbmdlZAorICAgICAgICBpZiBvbGRfZXh0cmFfc2V0dGluZyA9PSBleHRyYV9zZXR0aW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyByZW1vdmUgdGhlIG9sZCBFWFRSQSBTRVRUSU5HIHZhcmlhYmxlCisgICAgICAgIHNlbGYucmVtb3ZlX3Zhcl9mcm9tX2ZpbGUoIkVYVFJBX1NFVFRJTkciKQorCisgICAgICAgICMgcmVtb3ZlIG9sZCBzZXR0aW5ncyBmcm9tIGNvbmYKKyAgICAgICAgZm9yIGtleSBpbiBvbGRfZXh0cmFfc2V0dGluZy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGV4dHJhX3NldHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfdmFyX2Zyb21fZmlsZShrZXkpCisKKyAgICAgICAgIyBhZGQgbmV3IHNldHRpbmdzCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGV4dHJhX3NldHRpbmcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZShrZXksIHZhbHVlLCAibG9jYWwuY29uZiIpCisKKyAgICAgICAgaWYgZXh0cmFfc2V0dGluZzoKKyAgICAgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJFWFRSQV9TRVRUSU5HIiwgZXh0cmFfc2V0dGluZywgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9odHRwX3Byb3h5KHNlbGYsIGh0dHBfcHJveHkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiaHR0cF9wcm94eSIsIGh0dHBfcHJveHksICJsb2NhbC5jb25mIikKKworICAgIGRlZiBzZXRfaHR0cHNfcHJveHkoc2VsZiwgaHR0cHNfcHJveHkpOgorICAgICAgICBzZWxmLnNldF92YXJfaW5fZmlsZSgiaHR0cHNfcHJveHkiLCBodHRwc19wcm94eSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9mdHBfcHJveHkoc2VsZiwgZnRwX3Byb3h5KToKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoImZ0cF9wcm94eSIsIGZ0cF9wcm94eSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9zb2Nrc19wcm94eShzZWxmLCBzb2Nrc19wcm94eSk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJhbGxfcHJveHkiLCBzb2Nrc19wcm94eSwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHNldF9jdnNfcHJveHkoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgIHNlbGYuc2V0X3Zhcl9pbl9maWxlKCJDVlNfUFJPWFlfSE9TVCIsIGhvc3QsICJsb2NhbC5jb25mIikKKyAgICAgICAgc2VsZi5zZXRfdmFyX2luX2ZpbGUoIkNWU19QUk9YWV9QT1JUIiwgcG9ydCwgImxvY2FsLmNvbmYiKQorCisgICAgZGVmIHJlcXVlc3RfcGFja2FnZV9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9HRU5FUkFURV9QS0dJTkZPKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5QT1BVTEFURV9QQUNLQUdFSU5GTykKKworICAgIGRlZiB0cmlnZ2VyX3Nhbml0eV9jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfU0FOSVRZX0NIRUNLKQorICAgICAgICBzZWxmLnJ1bl9uZXh0X2NvbW1hbmQoc2VsZi5TQU5JVFlfQ0hFQ0spCisKKyAgICBkZWYgdHJpZ2dlcl9uZXR3b3JrX3Rlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX05FVFdPUktfVEVTVCkKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuTkVUV09SS19URVNUKQorCisgICAgZGVmIGdlbmVyYXRlX2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfUEFUSF9MQVlFUlMpCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX0ZJTEVTX0RJU1RSTykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfRklMRVNfTUFDSCkKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfRklMRVNfU0RLTUFDSCkKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfTUFUQ0hfQ0xBU1MpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX0NPTkZJR1VSQVRJT04pCisKKyAgICBkZWYgZ2VuZXJhdGVfcmVjaXBlcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic2V0UHJlUG9zdENvbmZGaWxlcyIsICJjb25mLy5ob2IuY29uZiIsICIiXSkKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfUEFSU0VfQ09ORklHKQorICAgICAgICBzZWxmLmNvbW1hbmRzX2FzeW5jLmFwcGVuZChzZWxmLlNVQl9HTkVSQVRFX1RHVFMpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX1JFQ0lQRVMpCisKKyAgICBkZWYgZ2VuZXJhdGVfcGFja2FnZXMoc2VsZiwgdGd0cywgZGVmYXVsdF90YXNrPSJidWlsZCIpOgorICAgICAgICB0YXJnZXRzID0gW10KKyAgICAgICAgdGFyZ2V0cy5leHRlbmQodGd0cykKKyAgICAgICAgc2VsZi5yZWNpcGVfcXVldWUgPSB0YXJnZXRzCisgICAgICAgIHNlbGYuZGVmYXVsdF90YXNrID0gZGVmYXVsdF90YXNrCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfQlVJTERfUkVDSVBFUykKKyAgICAgICAgc2VsZi5ydW5fbmV4dF9jb21tYW5kKHNlbGYuR0VORVJBVEVfUEFDS0FHRVMpCisKKyAgICBkZWYgZ2VuZXJhdGVfaW1hZ2Uoc2VsZiwgaW1hZ2UsIGJhc2VfaW1hZ2UsIGltYWdlX3BhY2thZ2VzPU5vbmUsIHRvb2xjaGFpbl9wYWNrYWdlcz1Ob25lLCBkZWZhdWx0X3Rhc2s9ImJ1aWxkIik6CisgICAgICAgIHNlbGYuaW1hZ2UgPSBpbWFnZQorICAgICAgICBzZWxmLmJhc2VfaW1hZ2UgPSBiYXNlX2ltYWdlCisgICAgICAgIGlmIGltYWdlX3BhY2thZ2VzOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX3F1ZXVlID0gaW1hZ2VfcGFja2FnZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9xdWV1ZSA9IFtdCisgICAgICAgIGlmIHRvb2xjaGFpbl9wYWNrYWdlczoKKyAgICAgICAgICAgIHNlbGYudG9vbGNoYWluX3BhY2thZ2VzID0gdG9vbGNoYWluX3BhY2thZ2VzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRvb2xjaGFpbl9wYWNrYWdlcyA9IFtdCisgICAgICAgIHNlbGYuZGVmYXVsdF90YXNrID0gZGVmYXVsdF90YXNrCisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInNldFByZVBvc3RDb25mRmlsZXMiLCAiY29uZi8uaG9iLmNvbmYiLCAiIl0pCisgICAgICAgIHNlbGYuY29tbWFuZHNfYXN5bmMuYXBwZW5kKHNlbGYuU1VCX1BBUlNFX0NPTkZJRykKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYy5hcHBlbmQoc2VsZi5TVUJfQlVJTERfSU1BR0UpCisgICAgICAgIHNlbGYucnVuX25leHRfY29tbWFuZChzZWxmLkdFTkVSQVRFX0lNQUdFKQorCisgICAgZGVmIGdlbmVyYXRlX25ld19pbWFnZShzZWxmLCBpbWFnZSwgYmFzZV9pbWFnZSwgcGFja2FnZV9xdWV1ZSwgZGVzY3JpcHRpb24pOgorICAgICAgICBpZiBiYXNlX2ltYWdlOgorICAgICAgICAgICAgYmFzZV9pbWFnZSA9IHNlbGYucnVuQ29tbWFuZChbIm1hdGNoRmlsZSIsIHNlbGYuYmFzZV9pbWFnZSArICIuYmIiXSkKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZ2VuZXJhdGVOZXdJbWFnZSIsIGltYWdlLCBiYXNlX2ltYWdlLCBwYWNrYWdlX3F1ZXVlLCBGYWxzZSwgZGVzY3JpcHRpb25dKQorCisgICAgZGVmIGdlbmVyYXRlX2hvYl9iYXNlX2ltYWdlKHNlbGYsIGhvYl9pbWFnZSk6CisgICAgICAgIGltYWdlX2RpciA9IHNlbGYuZ2V0X3RvcGRpcigpICsgIi9yZWNpcGVzL2ltYWdlcy8iCisgICAgICAgIHJlY2lwZV9uYW1lID0gaG9iX2ltYWdlICsgIi5iYiIKKyAgICAgICAgc2VsZi5lbnN1cmVfZGlyKGltYWdlX2RpcikKKyAgICAgICAgc2VsZi5nZW5lcmF0ZV9uZXdfaW1hZ2UoaW1hZ2VfZGlyICsgcmVjaXBlX25hbWUsIE5vbmUsIFtdLCAiIikKKworICAgIGRlZiBlbnN1cmVfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImVuc3VyZURpciIsIGRpcmVjdG9yeV0pCisKKyAgICBkZWYgYnVpbGRfc3VjY2VlZGVkX2FzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkaW5nID0gRmFsc2UKKworICAgIGRlZiBidWlsZF9mYWlsZWRfYXN5bmMoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdGNtZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb21tYW5kc19hc3luYyA9IFtdCisgICAgICAgIHNlbGYuYnVpbGRpbmcgPSBGYWxzZQorCisgICAgZGVmIGNhbmNlbF9wYXJzZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisKKyAgICBkZWYgY2FuY2VsX2J1aWxkKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICAjIEZvcmNlIHRoZSBjb29rZXIgdG8gc3RvcCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlCisgICAgICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2FpdCBmb3IgdGFza3MgdG8gY29tcGxldGUgYmVmb3JlIHNodXR0aW5nIGRvd24sIHRoaXMgaGVscHMKKyAgICAgICAgICAgICMgbGVhdmUgdGhlIHdvcmtkaXIgaW4gYSB1c2FibGUgc3RhdGUKKyAgICAgICAgICAgIHNlbGYucnVuQ29tbWFuZChbInN0YXRlU2h1dGRvd24iXSkKKworICAgIGRlZiByZXNldF9idWlsZChzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZC5yZXNldCgpCisKKyAgICBkZWYgZ2V0X2xvZ2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJfQ09OU09MRUxPRyJdKVswXQorCisgICAgZGVmIGdldF90b3BkaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUT1BESVIiXSkgb3IgIiIKKworICAgIGRlZiBfcmVtb3ZlX3JlZHVuZGFudChzZWxmLCBzdHJpbmcpOgorICAgICAgICByZXQgPSBbXQorICAgICAgICBmb3IgaSBpbiBzdHJpbmcuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgbm90IGluIHJldDoKKyAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGkpCisgICAgICAgIHJldHVybiAiICIuam9pbihyZXQpCisKKyAgICBkZWYgc2V0X3Zhcl9pbl9maWxlKHNlbGYsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGU9Tm9uZSk6CisgICAgICAgIHNlbGYucnVuQ29tbWFuZChbImVuYWJsZURhdGFUcmFja2luZyJdKQorICAgICAgICBzZWxmLnNlcnZlci5ydW5Db21tYW5kKFsic2V0VmFyRmlsZSIsIHZhciwgdmFsLCBkZWZhdWx0X2ZpbGUsICJzZXQiXSkKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZGlzYWJsZURhdGFUcmFja2luZyJdKQorCisgICAgZGVmIGVhcmx5X2Fzc2lnbl92YXJfaW5fZmlsZShzZWxmLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlPU5vbmUpOgorICAgICAgICBzZWxmLnJ1bkNvbW1hbmQoWyJlbmFibGVEYXRhVHJhY2tpbmciXSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhckZpbGUiLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiZWFybHlBc3NpZ24iXSkKKyAgICAgICAgc2VsZi5ydW5Db21tYW5kKFsiZGlzYWJsZURhdGFUcmFja2luZyJdKQorCisgICAgZGVmIHJlbW92ZV92YXJfZnJvbV9maWxlKHNlbGYsIHZhcik6CisgICAgICAgIHNlbGYuc2VydmVyLnJ1bkNvbW1hbmQoWyJyZW1vdmVWYXJGaWxlIiwgdmFyXSkKKworICAgIGRlZiBhcHBlbmRfdmFyX2luX2ZpbGUoc2VsZiwgdmFyLCB2YWwsIGRlZmF1bHRfZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIucnVuQ29tbWFuZChbInNldFZhckZpbGUiLCB2YXIsIHZhbCwgZGVmYXVsdF9maWxlLCAiYXBwZW5kIl0pCisKKyAgICBkZWYgYXBwZW5kX3RvX2JiZmlsZXMoc2VsZiwgdmFsKToKKyAgICAgICAgYmJmaWxlcyA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCRklMRVMiLCAiRmFsc2UiXSkgb3IgIiIKKyAgICAgICAgYmJmaWxlcyA9IGJiZmlsZXMuc3BsaXQoKQorICAgICAgICBpZiB2YWwgbm90IGluIGJiZmlsZXM6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF92YXJfaW5fZmlsZSgiQkJGSUxFUyIsIHZhbCwgImJibGF5ZXJzLmNvbmYiKQorCisgICAgZGVmIGdldF9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICAjIHJldHJpZXZlIHRoZSBwYXJhbWV0ZXJzIGZyb20gYml0YmFrZQorICAgICAgICBwYXJhbXMgPSB7fQorICAgICAgICBwYXJhbXNbImNvcmVfYmFzZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQ09SRUJBU0UiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJsYXllciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJMQVlFUlMiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJsYXllcnNfbm9uX3JlbW92YWJsZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImRsZGlyIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJETF9ESVIiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJtYWNoaW5lIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJNQUNISU5FIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siZGlzdHJvIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJESVNUUk8iXSkgb3IgImRlZmF1bHRzZXR1cCIKKyAgICAgICAgcGFyYW1zWyJwY2xhc3MiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlBBQ0tBR0VfQ0xBU1NFUyJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInNzdGF0ZWRpciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiU1NUQVRFX0RJUiJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInNzdGF0ZW1pcnJvciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiU1NUQVRFX01JUlJPUlMiXSkgb3IgIiIKKworICAgICAgICBudW1fdGhyZWFkcyA9IHNlbGYucnVuQ29tbWFuZChbImdldENwdUNvdW50Il0pCisgICAgICAgIGlmIG5vdCBudW1fdGhyZWFkczoKKyAgICAgICAgICAgIG51bV90aHJlYWRzID0gMQorICAgICAgICAgICAgbWF4X3RocmVhZHMgPSA2NTUzNgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG51bV90aHJlYWRzID0gaW50KG51bV90aHJlYWRzKQorICAgICAgICAgICAgICAgIG1heF90aHJlYWRzID0gMTYgKiBudW1fdGhyZWFkcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG51bV90aHJlYWRzID0gMQorICAgICAgICAgICAgICAgIG1heF90aHJlYWRzID0gNjU1MzYKKyAgICAgICAgcGFyYW1zWyJtYXhfdGhyZWFkcyJdID0gbWF4X3RocmVhZHMKKworICAgICAgICBiYnRocmVhZCA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX05VTUJFUl9USFJFQURTIl0pCisgICAgICAgIGlmIG5vdCBiYnRocmVhZDoKKyAgICAgICAgICAgIGJidGhyZWFkID0gbnVtX3RocmVhZHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYnRocmVhZCA9IGludChiYnRocmVhZCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBiYnRocmVhZCA9IG51bV90aHJlYWRzCisgICAgICAgIHBhcmFtc1siYmJ0aHJlYWQiXSA9IGJidGhyZWFkCisKKyAgICAgICAgcG1ha2UgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJQQVJBTExFTF9NQUtFIl0pCisgICAgICAgIGlmIG5vdCBwbWFrZToKKyAgICAgICAgICAgIHBtYWtlID0gbnVtX3RocmVhZHMKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHBtYWtlLCBpbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBtYWtlID0gaW50KHBtYWtlLmxzdHJpcCgiLWogIikpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcG1ha2UgPSBudW1fdGhyZWFkcworICAgICAgICBwYXJhbXNbInBtYWtlIl0gPSAiLWogJXMiICUgcG1ha2UKKworICAgICAgICBwYXJhbXNbImltYWdlX2FkZHIiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRFUExPWV9ESVJfSU1BR0UiXSkgb3IgIiIKKworICAgICAgICBpbWFnZV9leHRyYV9zaXplID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFIl0pCisgICAgICAgIGlmIG5vdCBpbWFnZV9leHRyYV9zaXplOgorICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZV9leHRyYV9zaXplID0gaW50KGltYWdlX2V4dHJhX3NpemUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1hZ2VfZXh0cmFfc2l6ZSA9IDAKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9leHRyYV9zaXplIl0gPSBpbWFnZV9leHRyYV9zaXplCisKKyAgICAgICAgaW1hZ2Vfcm9vdGZzX3NpemUgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9ST09URlNfU0laRSJdKQorICAgICAgICBpZiBub3QgaW1hZ2Vfcm9vdGZzX3NpemU6CisgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IGludChpbWFnZV9yb290ZnNfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IDAKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9yb290ZnNfc2l6ZSJdID0gaW1hZ2Vfcm9vdGZzX3NpemUKKworICAgICAgICBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9PVkVSSEVBRF9GQUNUT1IiXSkKKyAgICAgICAgaWYgbm90IGltYWdlX292ZXJoZWFkX2ZhY3RvcjoKKyAgICAgICAgICAgIGltYWdlX292ZXJoZWFkX2ZhY3RvciA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgPSBmbG9hdChpbWFnZV9vdmVyaGVhZF9mYWN0b3IpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gMQorICAgICAgICBwYXJhbXNbJ2ltYWdlX292ZXJoZWFkX2ZhY3RvciddID0gaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yCisKKyAgICAgICAgcGFyYW1zWyJpbmNvbXBhdF9saWNlbnNlIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklOQ09NUEFUSUJMRV9MSUNFTlNFIl0pIG9yICIiKQorICAgICAgICBwYXJhbXNbInNka19tYWNoaW5lIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJTREtNQUNISU5FIl0pIG9yIHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlNES19BUkNIIl0pIG9yICIiCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9mc3R5cGVzIl0gPSBzZWxmLl9yZW1vdmVfcmVkdW5kYW50KHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIklNQUdFX0ZTVFlQRVMiXSkgb3IgIiIpCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV90eXBlcyJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJJTUFHRV9UWVBFUyJdKSBvciAiIikKKworICAgICAgICBwYXJhbXNbImNvbmZfdmVyc2lvbiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQ09ORl9WRVJTSU9OIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sibGNvbmZfdmVyc2lvbiJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiTENPTkZfVkVSU0lPTiJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1sicnVubmFibGVfaW1hZ2VfdHlwZXMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiUlVOTkFCTEVfSU1BR0VfVFlQRVMiXSkgb3IgIiIpCisgICAgICAgIHBhcmFtc1sicnVubmFibGVfbWFjaGluZV9wYXR0ZXJucyJdID0gc2VsZi5fcmVtb3ZlX3JlZHVuZGFudChzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJSVU5OQUJMRV9NQUNISU5FX1BBVFRFUk5TIl0pIG9yICIiKQorICAgICAgICBwYXJhbXNbImRlcGxveWFibGVfaW1hZ2VfdHlwZXMiXSA9IHNlbGYuX3JlbW92ZV9yZWR1bmRhbnQoc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiREVQTE9ZQUJMRV9JTUFHRV9UWVBFUyJdKSBvciAiIikKKyAgICAgICAgcGFyYW1zWyJrZXJuZWxfaW1hZ2VfdHlwZSJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiS0VSTkVMX0lNQUdFVFlQRSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbInRtcGRpciJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVE1QRElSIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siZGlzdHJvX3ZlcnNpb24iXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkRJU1RST19WRVJTSU9OIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1sidGFyZ2V0X29zIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJUQVJHRVRfT1MiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJ0YXJnZXRfYXJjaCJdID0gc2VsZi5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiVEFSR0VUX0FSQ0giXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJ0dW5lX3BrZ2FyY2giXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIlRVTkVfUEtHQVJDSCJdKSAgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJiYl92ZXJzaW9uIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9NSU5fVkVSU0lPTiJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siZGVmYXVsdF90YXNrIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9ERUZBVUxUX1RBU0siXSkgb3IgImJ1aWxkIgorCisgICAgICAgIHBhcmFtc1sic29ja3NfcHJveHkiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgImFsbF9wcm94eSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImh0dHBfcHJveHkiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgImh0dHBfcHJveHkiXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJmdHBfcHJveHkiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgImZ0cF9wcm94eSJdKSBvciAiIgorICAgICAgICBwYXJhbXNbImh0dHBzX3Byb3h5Il0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJodHRwc19wcm94eSJdKSBvciAiIgorCisgICAgICAgIHBhcmFtc1siY3ZzX3Byb3h5X2hvc3QiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNWU19QUk9YWV9IT1NUIl0pIG9yICIiCisgICAgICAgIHBhcmFtc1siY3ZzX3Byb3h5X3BvcnQiXSA9IHNlbGYucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkNWU19QUk9YWV9QT1JUIl0pIG9yICIiCisKKyAgICAgICAgcGFyYW1zWyJpbWFnZV93aGl0ZV9wYXR0ZXJuIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQlVJX0lNQUdFX1dISVRFX1BBVFRFUk4iXSkgb3IgIiIKKyAgICAgICAgcGFyYW1zWyJpbWFnZV9ibGFja19wYXR0ZXJuIl0gPSBzZWxmLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQlVJX0lNQUdFX0JMQUNLX1BBVFRFUk4iXSkgb3IgIiIKKyAgICAgICAgcmV0dXJuIHBhcmFtcwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYmxpc3Rtb2RlbC5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JsaXN0bW9kZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkZjE1NgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2JsaXN0bW9kZWwucHkKQEAgLTAsMCArMSw5MDMgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0Citmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQorCisjCisjIFBhY2thZ2VMaXN0TW9kZWwKKyMKK2NsYXNzIFBhY2thZ2VMaXN0TW9kZWwoZ3RrLkxpc3RTdG9yZSk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBkZWZpbmVzIGFuIGd0ay5MaXN0U3RvcmUgc3ViY2xhc3Mgd2hpY2ggd2lsbCBjb252ZXJ0IHRoZSBvdXRwdXQKKyAgICBvZiB0aGUgYmIuZXZlbnQuVGFyZ2V0c1RyZWVHZW5lcmF0ZWQgZXZlbnQgaW50byBhIGd0ay5MaXN0U3RvcmUgd2hpbHN0IGFsc28KKyAgICBwcm92aWRpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGFjY2VzcyBndGsuVHJlZU1vZGVsIHN1YmNsYXNzZXMgd2hpY2gKKyAgICBwcm92aWRlIGZpbHRlcmVkIHZpZXdzIG9mIHRoZSBkYXRhLgorICAgICIiIgorCisgICAgKENPTF9OQU1FLCBDT0xfVkVSLCBDT0xfUkVWLCBDT0xfUk5NLCBDT0xfU0VDLCBDT0xfU1VNLCBDT0xfUkRFUCwgQ09MX1JQUk9WLCBDT0xfU0laRSwgQ09MX1JDUCwgQ09MX0JJTkIsIENPTF9JTkMsIENPTF9GQURFX0lOQywgQ09MX0ZPTlQsIENPTF9GTElTVCkgPSByYW5nZSgxNSkKKworICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgInBhY2thZ2Utc2VsZWN0aW9uLWNoYW5nZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgIH0KKworICAgIF9fdG9vbGNoYWluX3JlcXVpcmVkX3BhY2thZ2VzX18gPSBbInBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCIsICJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQtZGJnIl0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5ycHJvdl9wa2cgPSB7fQorICAgICAgICBndGsuTGlzdFN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORworCisgICAgIiIiCisgICAgRmluZCB0aGUgbW9kZWwgcGF0aCBmb3IgdGhlIGl0ZW1fbmFtZQorICAgIFJldHVybnMgdGhlIHBhdGggaW4gdGhlIG1vZGVsIG9yIE5vbmUKKyAgICAiIiIKKyAgICBkZWYgZmluZF9wYXRoX2Zvcl9pdGVtKHNlbGYsIGl0ZW1fbmFtZSk6CisgICAgICAgIHBrZyA9IGl0ZW1fbmFtZQorICAgICAgICBpZiBpdGVtX25hbWUgbm90IGluIHNlbGYucG5fcGF0aC5rZXlzKCk6CisgICAgICAgICAgICBpZiBpdGVtX25hbWUgbm90IGluIHNlbGYucnByb3ZfcGtnLmtleXMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcGtnID0gc2VsZi5ycHJvdl9wa2dbaXRlbV9uYW1lXQorICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHNlbGYucG5fcGF0aFtwa2ddCisKKyAgICBkZWYgZmluZF9pdGVtX2Zvcl9wYXRoKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKworICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpdGVtIGlzIGFuIGl0ZW0gc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXQsIGZpbHRlcik6CisgICAgICAgIG5hbWUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisKKyAgICAgICAgZm9yIGtleSBpbiBmaWx0ZXIua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IHNlbGYuQ09MX05BTUU6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyW2tleV0gIT0gJ1NlYXJjaCBwYWNrYWdlcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBhbmQgZmlsdGVyW2tleV0gbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbW9kZWwuZ2V0X3ZhbHVlKGl0LCBrZXkpIG5vdCBpbiBmaWx0ZXJba2V5XToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuZmlsdGVyZWRfbmIgKz0gMQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIiIiCisgICAgQ3JlYXRlLCBpZiByZXF1aXJlZCwgYW5kIHJldHVybiBhIGZpbHRlcmVkIGd0ay5UcmVlTW9kZWxTb3J0CisgICAgY29udGFpbmluZyBvbmx5IHRoZSBpdGVtcyBzcGVjaWZpZWQgYnkgZmlsdGVyCisgICAgIiIiCisgICAgZGVmIHRyZWVfbW9kZWwoc2VsZiwgZmlsdGVyLCBleGNsdWRlZF9pdGVtc19haGVhZD1GYWxzZSwgaW5jbHVkZWRfaXRlbXNfYWhlYWQ9RmFsc2UsIHNlYXJjaF9kYXRhPU5vbmUsIGluaXRpYWw9RmFsc2UpOgorICAgICAgICBtb2RlbCA9IHNlbGYuZmlsdGVyX25ldygpCisgICAgICAgIHNlbGYuZmlsdGVyZWRfbmIgPSAwCisgICAgICAgIG1vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi50cmVlX21vZGVsX2ZpbHRlciwgZmlsdGVyKQorCisgICAgICAgIHNvcnQgPSBndGsuVHJlZU1vZGVsU29ydChtb2RlbCkKKyAgICAgICAgc29ydC5jb25uZWN0ICgnc29ydC1jb2x1bW4tY2hhbmdlZCcsIHNlbGYuc29ydF9jb2x1bW5fY2hhbmdlZF9jYikKKyAgICAgICAgaWYgaW5pdGlhbDoKKyAgICAgICAgICAgIHNvcnQuc2V0X3NvcnRfY29sdW1uX2lkKFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKE5vbmUpCisgICAgICAgIGVsaWYgZXhjbHVkZWRfaXRlbXNfYWhlYWQ6CisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLmV4Y2x1ZGVfaXRlbV9zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICBlbGlmIGluY2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5pbmNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlYXJjaF9kYXRhIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCByZWNpcGVzIGJ5IG5hbWUnIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLnNvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNvcnQuc2V0X3NvcnRfY29sdW1uX2lkKHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlcikKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMsIHNlbGYuc29ydF9jb2x1bW4sIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgc29ydC5zZXRfc29ydF9mdW5jKFBhY2thZ2VMaXN0TW9kZWwuQ09MX1NJWkUsIHNlbGYuc29ydF9jb2x1bW4sIFBhY2thZ2VMaXN0TW9kZWwuQ09MX1NJWkUpCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9CSU5CLCBzZWxmLnNvcnRfYmluYl9jb2x1bW4pCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1AsIHNlbGYuc29ydF9jb2x1bW4sIFBhY2thZ2VMaXN0TW9kZWwuQ09MX1JDUCkKKyAgICAgICAgcmV0dXJuIHNvcnQKKworICAgIGRlZiBzb3J0X2NvbHVtbl9jaGFuZ2VkX2NiIChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3J0X2NvbHVtbl9pZCwgc2VsZi5zb3J0X29yZGVyID0gZGF0YS5nZXRfc29ydF9jb2x1bW5faWQgKCkKKworICAgIGRlZiBzb3J0X2NvbHVtbihzZWxmLCBtb2RlbCwgcm93MSwgcm93MiwgY29sKToKKyAgICAgICAgdmFsdWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIGNvbCkKKyAgICAgICAgdmFsdWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIGNvbCkKKyAgICAgICAgaWYgY29sPT1QYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFOgorICAgICAgICAgICAgdmFsdWUxID0gSG9iUGFnZS5fc3RyaW5nX3RvX3NpemUodmFsdWUxKQorICAgICAgICAgICAgdmFsdWUyID0gSG9iUGFnZS5fc3RyaW5nX3RvX3NpemUodmFsdWUyKQorCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXMhPTA6CisgICAgICAgICAgICBpZiBjb2w9PVBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQzoKKyAgICAgICAgICAgICAgICByZXR1cm4gLWNtcF9yZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9yZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBuYW1lMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKworICAgIGRlZiBzb3J0X2JpbmJfY29sdW1uKHNlbGYsIG1vZGVsLCByb3cxLCByb3cyKToKKyAgICAgICAgdmFsdWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0JJTkIpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9CSU5CKQorICAgICAgICB2YWx1ZTFfbGlzdCA9IHZhbHVlMS5zcGxpdCgnLCAnKQorICAgICAgICB2YWx1ZTJfbGlzdCA9IHZhbHVlMi5zcGxpdCgnLCAnKQorCisgICAgICAgIHZhbHVlMSA9IHZhbHVlMV9saXN0WzBdCisgICAgICAgIHZhbHVlMiA9IHZhbHVlMl9saXN0WzBdCisKKyAgICAgICAgY21wX3JlcyA9IGNtcCh2YWx1ZTEsIHZhbHVlMikKKyAgICAgICAgaWYgY21wX3Jlcz09MDoKKyAgICAgICAgICAgIGNtcF9zaXplID0gY21wKGxlbih2YWx1ZTFfbGlzdCksIGxlbih2YWx1ZTJfbGlzdCkpCisgICAgICAgICAgICBpZiBjbXBfc2l6ZT09MDoKKyAgICAgICAgICAgICAgICBuYW1lMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIG5hbWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcF9zaXplCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY21wX3JlcworCisgICAgZGVmIGV4Y2x1ZGVfaXRlbV9zb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiB1c2VyX2RhdGE6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0ZBREVfSU5DKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgcmV0dXJuICgodmFsMSA9PSBUcnVlKSBhbmQgKHZhbDIgPT0gRmFsc2UpKQorCisgICAgZGVmIGluY2x1ZGVfaXRlbV9zb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiB1c2VyX2RhdGE6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNtcF92YWxzKHZhbDEsIHZhbDIsIHVzZXJfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbDEgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjEsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHJldHVybiAoKHZhbDEgPT0gRmFsc2UpIGFuZCAodmFsMiA9PSBUcnVlKSkKKworICAgIGRlZiBzb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhKToKKyAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUGFja2FnZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorCisgICAgZGVmIGNtcF92YWxzKHNlbGYsIHZhbDEsIHZhbDIsIHVzZXJfZGF0YSk6CisgICAgICAgIGlmIHZhbDEgaXMgTm9uZSBvciB2YWwyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbGlmIHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCBub3QgdmFsMi5zdGFydHN3aXRoKHVzZXJfZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBub3QgdmFsMS5zdGFydHN3aXRoKHVzZXJfZGF0YSkgYW5kIHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbXAodmFsMSwgdmFsMikKKworICAgIGRlZiBjb252ZXJ0X3ZwYXRoX3RvX3BhdGgoc2VsZiwgdmlld19tb2RlbCwgdmlld19wYXRoKToKKyAgICAgICAgIyB2aWV3X21vZGVsIGlzIHRoZSBtb2RlbCBzb3J0ZWQKKyAgICAgICAgIyBnZXQgdGhlIHBhdGggb2YgdGhlIG1vZGVsIGZpbHRlcmVkCisgICAgICAgIGZpbHRlcmVkX21vZGVsX3BhdGggPSB2aWV3X21vZGVsLmNvbnZlcnRfcGF0aF90b19jaGlsZF9wYXRoKHZpZXdfcGF0aCkKKyAgICAgICAgIyBnZXQgdGhlIG1vZGVsIGZpbHRlcmVkCisgICAgICAgIGZpbHRlcmVkX21vZGVsID0gdmlld19tb2RlbC5nZXRfbW9kZWwoKQorICAgICAgICAjIGdldCB0aGUgcGF0aCBvZiB0aGUgb3JpZ2luYWwgbW9kZWwKKyAgICAgICAgcGF0aCA9IGZpbHRlcmVkX21vZGVsLmNvbnZlcnRfcGF0aF90b19jaGlsZF9wYXRoKGZpbHRlcmVkX21vZGVsX3BhdGgpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgY29udmVydF9wYXRoX3RvX3ZwYXRoKHNlbGYsIHZpZXdfbW9kZWwsIHBhdGgpOgorICAgICAgICBpdCA9IHZpZXdfbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLmZpbmRfaXRlbV9mb3JfcGF0aChwYXRoKQorICAgICAgICAgICAgdmlld19uYW1lID0gdmlld19tb2RlbC5nZXRfdmFsdWUoaXQsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBpZiB2aWV3X25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICB2aWV3X3BhdGggPSB2aWV3X21vZGVsLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgICAgIHJldHVybiB2aWV3X3BhdGgKKyAgICAgICAgICAgIGl0ID0gdmlld19tb2RlbC5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAiIiIKKyAgICBUaGUgcG9wdWxhdGUoKSBmdW5jdGlvbiB0YWtlcyBhcyBpbnB1dCB0aGUgZGF0YSBmcm9tIGEKKyAgICBiYi5ldmVudC5QYWNrYWdlSW5mbyBldmVudCBhbmQgcG9wdWxhdGVzIHRoZSBwYWNrYWdlIGxpc3QuCisgICAgIiIiCisgICAgZGVmIHBvcHVsYXRlKHNlbGYsIHBrZ2luZm9saXN0KToKKyAgICAgICAgIyBGaXJzdCBjbGVhciB0aGUgbW9kZWwsIGluIGNhc2UgcmVwb3B1bGF0aW5nCisgICAgICAgIHNlbGYuY2xlYXIoKQorCisgICAgICAgIGRlZiBnZXRwa2d2YWx1ZShwa2dkaWN0LCBrZXksIHBrZ25hbWUsIGRlZmF1bHR2YWwgPSBOb25lKToKKyAgICAgICAgICAgIHZhbHVlID0gcGtnZGljdC5nZXQoJyVzXyVzJyAlIChrZXksIHBrZ25hbWUpLCBOb25lKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcGtnZGljdC5nZXQoa2V5LCBkZWZhdWx0dmFsKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgZm9yIHBrZ2luZm8gaW4gcGtnaW5mb2xpc3Q6CisgICAgICAgICAgICBwbiA9IHBrZ2luZm9bJ1BOJ10KKyAgICAgICAgICAgIHB2ID0gcGtnaW5mb1snUFYnXQorICAgICAgICAgICAgcHIgPSBwa2dpbmZvWydQUiddCisgICAgICAgICAgICBwa2cgPSBwa2dpbmZvWydQS0cnXQorICAgICAgICAgICAgcGtndiA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdQS0dWJywgcGtnKQorICAgICAgICAgICAgcGtnciA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdQS0dSJywgcGtnKQorICAgICAgICAgICAgIyBQS0dTSVpFIGlzIGFydGlmaWNpYWwsIHdpbGwgYWx3YXlzIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgcGFja2FnZSBuYW1lIGlmIHByZXNlbnQKKyAgICAgICAgICAgIHBrZ3NpemUgPSBpbnQocGtnaW5mby5nZXQoJ1BLR1NJWkVfJXMnICUgcGtnLCAiMCIpKQorICAgICAgICAgICAgIyBQS0dfJXMgaXMgdGhlIHJlbmFtZWQgdmVyc2lvbgorICAgICAgICAgICAgcGtnX3JlbmFtZSA9IHBrZ2luZm8uZ2V0KCdQS0dfJXMnICUgcGtnLCAiIikKKyAgICAgICAgICAgICMgVGhlIHJlc3QgbWF5IGJlIG92ZXJyaWRkZW4gb3Igbm90CisgICAgICAgICAgICBzZWN0aW9uID0gZ2V0cGtndmFsdWUocGtnaW5mbywgJ1NFQ1RJT04nLCBwa2csICIiKQorICAgICAgICAgICAgc3VtbWFyeSA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdTVU1NQVJZJywgcGtnLCAiIikKKyAgICAgICAgICAgIHJkZXAgPSBnZXRwa2d2YWx1ZShwa2dpbmZvLCAnUkRFUEVORFMnLCBwa2csICIiKQorICAgICAgICAgICAgcnJlYyA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdSUkVDT01NRU5EUycsIHBrZywgIiIpCisgICAgICAgICAgICBycHJvdiA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdSUFJPVklERVMnLCBwa2csICIiKQorICAgICAgICAgICAgZmlsZXNfbGlzdCA9IGdldHBrZ3ZhbHVlKHBrZ2luZm8sICdGSUxFU19JTkZPJywgcGtnLCAiIikKKyAgICAgICAgICAgIGZvciBpIGluIHJwcm92LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2VsZi5ycHJvdl9wa2dbaV0gPSBwa2cKKworICAgICAgICAgICAgcmVjaXBlID0gcG4gKyAnLScgKyBwdiArICctJyArIHByCisKKyAgICAgICAgICAgIGFsbG93X2VtcHR5ID0gZ2V0cGtndmFsdWUocGtnaW5mbywgJ0FMTE9XX0VNUFRZJywgcGtnLCAiIikKKworICAgICAgICAgICAgaWYgcGtnc2l6ZSA9PSAwIGFuZCBub3QgYWxsb3dfZW1wdHk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc2l6ZSA9IEhvYlBhZ2UuX3NpemVfdG9fc3RyaW5nKHBrZ3NpemUpCisgICAgICAgICAgICBzZWxmLnNldChzZWxmLmFwcGVuZCgpLCBzZWxmLkNPTF9OQU1FLCBwa2csIHNlbGYuQ09MX1ZFUiwgcGtndiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1JFViwgcGtnciwgc2VsZi5DT0xfUk5NLCBwa2dfcmVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfU0VDLCBzZWN0aW9uLCBzZWxmLkNPTF9TVU0sIHN1bW1hcnksCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9SREVQLCByZGVwICsgJyAnICsgcnJlYywKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1JQUk9WLCBycHJvdiwgc2VsZi5DT0xfU0laRSwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX1JDUCwgcmVjaXBlLCBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lOQywgRmFsc2UsIHNlbGYuQ09MX0ZPTlQsICcxMCcsIHNlbGYuQ09MX0ZMSVNULCBmaWxlc19saXN0KQorCisgICAgICAgIHNlbGYucG5fcGF0aCA9IHt9CisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgcG4gPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgc2VsZi5wbl9wYXRoW3BuXSA9IHBhdGgKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIG1vZGVsLCBzZW5kIG91dCB0aGUgbm90aWZpY2F0aW9uLgorICAgICIiIgorICAgIGRlZiBzZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5lbWl0KCJwYWNrYWdlLXNlbGVjdGlvbi1jaGFuZ2VkIikKKworICAgICIiIgorICAgIENoZWNrIHdoZXRoZXIgdGhlIGl0ZW0gYXQgaXRlbV9wYXRoIGlzIGluY2x1ZGVkIG9yIG5vdAorICAgICIiIgorICAgIGRlZiBwYXRoX2luY2x1ZGVkKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfSU5DXQorCisgICAgIiIiCisgICAgQWRkIHRoaXMgaXRlbSwgYW5kIGFueSBvZiBpdHMgZGVwZW5kZW5jaWVzLCB0byB0aGUgaW1hZ2UgY29udGVudHMKKyAgICAiIiIKKyAgICBkZWYgaW5jbHVkZV9pdGVtKHNlbGYsIGl0ZW1fcGF0aCwgYmluYj0iIik6CisgICAgICAgIGlmIHNlbGYucGF0aF9pbmNsdWRlZChpdGVtX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXRlbV9uYW1lID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdCisgICAgICAgIGl0ZW1fZGVwcyA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9SREVQXQorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gVHJ1ZQorCisgICAgICAgIGl0ZW1fYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGJpbmIgYW5kIG5vdCBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgaXRlbV9iaW4uYXBwZW5kKGJpbmIpCisgICAgICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oaXRlbV9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgICMgRW5zdXJlIGFsbCBvZiB0aGUgaXRlbXMgZGVwcyBhcmUgaW5jbHVkZWQgYW5kLCB3aGVyZSBhcHByb3ByaWF0ZSwKKyAgICAgICAgICAgICMgYWRkIHRoaXMgaXRlbSB0byB0aGVpciBDT0xfQklOQgorICAgICAgICAgICAgZm9yIGRlcCBpbiBpdGVtX2RlcHMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aCgnKCcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgSWYgdGhlIGNvbnRlbnRzIG1vZGVsIGRvZXNuJ3QgYWxyZWFkeSBjb250YWluIGRlcCwgYWRkIGl0CisgICAgICAgICAgICAgICAgZGVwX3BhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShkZXApCisgICAgICAgICAgICAgICAgaWYgbm90IGRlcF9wYXRoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcF9pbmNsdWRlZCA9IHNlbGYucGF0aF9pbmNsdWRlZChkZXBfcGF0aCkKKworICAgICAgICAgICAgICAgIGlmIGRlcF9pbmNsdWRlZCBhbmQgbm90IGRlcCBpbiBpdGVtX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgIyBkb24ndCBzZXQgdGhlIENPTF9CSU5CIHRvIHRoaXMgaXRlbSBpZiB0aGUgdGFyZ2V0IGlzIGFuCisgICAgICAgICAgICAgICAgICAgICMgaXRlbSBpbiBvdXIgb3duIENPTF9CSU5CCisgICAgICAgICAgICAgICAgICAgIGRlcF9iaW4gPSBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXRlbV9uYW1lIGluIGRlcF9iaW46CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBfYmluLmFwcGVuZChpdGVtX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihkZXBfYmluKS5sc3RyaXAoJywgJykKKyAgICAgICAgICAgICAgICBlbGlmIG5vdCBkZXBfaW5jbHVkZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGRlcF9wYXRoLCBiaW5iPWl0ZW1fbmFtZSkKKworICAgIGRlZiBleGNsdWRlX2l0ZW0oc2VsZiwgaXRlbV9wYXRoKToKKyAgICAgICAgaWYgbm90IHNlbGYucGF0aF9pbmNsdWRlZChpdGVtX3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10gPSBGYWxzZQorCisgICAgICAgIGl0ZW1fbmFtZSA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXQorICAgICAgICBpdGVtX2RlcHMgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfUkRFUF0KKyAgICAgICAgaWYgaXRlbV9kZXBzOgorICAgICAgICAgICAgZm9yIGRlcCBpbiBpdGVtX2RlcHMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aCgnKCcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICBpZiBpdGVtX25hbWUgaW4gZGVwX2JpbjoKKyAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5yZW1vdmUoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihkZXBfYmluKS5sc3RyaXAoJywgJykKKworICAgICAgICBpdGVtX2JpbiA9IHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICBpZiBpdGVtX2JpbjoKKyAgICAgICAgICAgIGZvciBiaW5iIGluIGl0ZW1fYmluOgorICAgICAgICAgICAgICAgIGJpbmJfcGF0aCA9IHNlbGYuZmluZF9wYXRoX2Zvcl9pdGVtKGJpbmIpCisgICAgICAgICAgICAgICAgaWYgbm90IGJpbmJfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmV4Y2x1ZGVfaXRlbShiaW5iX3BhdGgpCisKKyAgICAiIiIKKyAgICBFbXB0eSBzZWxmLmNvbnRlbnRzIGJ5IHNldHRpbmcgdGhlIGluY2x1ZGUgb2YgZWFjaCBlbnRyeSB0byBOb25lCisgICAgIiIiCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHNlbGYuc2V0KGl0LAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSU5DLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0JJTkIsICIiKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICBzZWxmLnNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKCkKKworICAgIGRlZiBnZXRfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIHBhY2thZ2VsaXN0ID0gW10KKworICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICBwYWNrYWdlbGlzdC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VsaXN0CisKKyAgICBkZWYgZ2V0X3VzZXJfc2VsZWN0ZWRfcGFja2FnZXMoc2VsZik6CisgICAgICAgIHBhY2thZ2VsaXN0ID0gW10KKworICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9JTkMpOgorICAgICAgICAgICAgICAgIGJpbmIgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfQklOQikKKyAgICAgICAgICAgICAgICBpZiBiaW5iID09ICJVc2VyIFNlbGVjdGVkIjoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlbGlzdC5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisKKyAgICAgICAgcmV0dXJuIHBhY2thZ2VsaXN0CisKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3BhY2thZ2VzX3Rvb2xjaGFpbihzZWxmKToKKyAgICAgICAgcGFja2FnZWxpc3QgPSBbXQorCisgICAgICAgIGl0ID0gc2VsZi5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQyk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIi1kZXYiKSBvciBuYW1lLmVuZHN3aXRoKCItZGJnIik6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VsaXN0LmFwcGVuZChuYW1lKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICAgICByZXR1cm4gbGlzdChzZXQocGFja2FnZWxpc3QgKyBzZWxmLl9fdG9vbGNoYWluX3JlcXVpcmVkX3BhY2thZ2VzX18pKTsKKworICAgICIiIgorICAgIFBhY2thZ2UgbW9kZWwgbWF5IGJlIGluY29tcGxldGUsIHRoZXJlZm9yZSB3aGVuIGNhbGxpbmcgdGhlCisgICAgc2V0X3NlbGVjdGVkX3BhY2thZ2VzKCksIHNvbWUgcGFja2FnZXMgd2lsbCBub3QgYmUgc2V0IGluY2x1ZGVkLgorICAgIFJldHVybiB0aGUgdW4tc2V0IHBhY2thZ2VzIGxpc3QuCisgICAgIiIiCisgICAgZGVmIHNldF9zZWxlY3RlZF9wYWNrYWdlcyhzZWxmLCBwYWNrYWdlbGlzdCwgdXNlcl9zZWxlY3RlZD1GYWxzZSk6CisgICAgICAgIGxlZnQgPSBbXQorICAgICAgICBiaW5iID0gJ1VzZXIgU2VsZWN0ZWQnIGlmIHVzZXJfc2VsZWN0ZWQgZWxzZSAnJworICAgICAgICBmb3IgcG4gaW4gcGFja2FnZWxpc3Q6CisgICAgICAgICAgICBpZiBwbiBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLnBuX3BhdGhbcG5dCisgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2l0ZW0oaXRlbV9wYXRoPXBhdGgsIGJpbmI9YmluYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGVmdC5hcHBlbmQocG4pCisKKyAgICAgICAgc2VsZi5zZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbigpCisgICAgICAgIHJldHVybiBsZWZ0CisKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHNlbGVjdGVkIHBhY2thZ2Ugc2l6ZSwgdW5pdCBpcyBCLgorICAgICIiIgorICAgIGRlZiBnZXRfcGFja2FnZXNfc2l6ZShzZWxmKToKKyAgICAgICAgcGFja2FnZXNfc2l6ZSA9IDAKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBzdHJfc2l6ZSA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9TSVpFKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdHJfc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHBhY2thZ2VzX3NpemUgKz0gSG9iUGFnZS5fc3RyaW5nX3RvX3NpemUoc3RyX3NpemUpCisKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBwYWNrYWdlc19zaXplCisKKyAgICAiIiIKKyAgICBSZXN5bmMgdGhlIHN0YXRlIG9mIGluY2x1ZGVkIGl0ZW1zIHRvIGEgYmFja3VwIGNvbHVtbiBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZmFkZW91dCB2aXNpYmxlIGVmZmVjdAorICAgICIiIgorICAgIGRlZiByZXN5bmNfZmFkZW91dF9jb2x1bW4oc2VsZiwgbW9kZWxfZmlyc3RfaXRlcj1Ob25lKToKKyAgICAgICAgaXQgPSBtb2RlbF9maXJzdF9pdGVyCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgYWN0aXZlID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX0lOQykKKyAgICAgICAgICAgIHNlbGYuc2V0KGl0LCBzZWxmLkNPTF9GQURFX0lOQywgYWN0aXZlKQorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworIworIyBSZWNpcGVMaXN0TW9kZWwKKyMKK2NsYXNzIFJlY2lwZUxpc3RNb2RlbChndGsuTGlzdFN0b3JlKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgYW4gZ3RrLkxpc3RTdG9yZSBzdWJjbGFzcyB3aGljaCB3aWxsIGNvbnZlcnQgdGhlIG91dHB1dAorICAgIG9mIHRoZSBiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCBldmVudCBpbnRvIGEgZ3RrLkxpc3RTdG9yZSB3aGlsc3QgYWxzbworICAgIHByb3ZpZGluZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gYWNjZXNzIGd0ay5UcmVlTW9kZWwgc3ViY2xhc3NlcyB3aGljaAorICAgIHByb3ZpZGUgZmlsdGVyZWQgdmlld3Mgb2YgdGhlIGRhdGEuCisgICAgIiIiCisgICAgKENPTF9OQU1FLCBDT0xfREVTQywgQ09MX0xJQywgQ09MX0dST1VQLCBDT0xfREVQUywgQ09MX0JJTkIsIENPTF9UWVBFLCBDT0xfSU5DLCBDT0xfSU1HLCBDT0xfSU5TVEFMTCwgQ09MX1BOLCBDT0xfRkFERV9JTkMsIENPTF9TVU1NQVJZLCBDT0xfVkVSU0lPTiwKKyAgICAgQ09MX1JFVklTSU9OLCBDT0xfSE9NRVBBR0UsIENPTF9CVUdUUkFDS0VSLCBDT0xfRklMRSkgPSByYW5nZSgxOCkKKworICAgIF9fY3VzdG9tX2ltYWdlX18gPSAiU3RhcnQgd2l0aCBhbiBlbXB0eSBpbWFnZSByZWNpcGUiCisKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICJyZWNpcGUtc2VsZWN0aW9uLWNoYW5nZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICB9CisKKyAgICAiIiIKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5MaXN0U3RvcmUuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9CT09MRUFOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX0JPT0xFQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSwgZ3RrLlNPUlRfQVNDRU5ESU5HCisKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBtb2RlbCBwYXRoIGZvciB0aGUgaXRlbV9uYW1lCisgICAgUmV0dXJucyB0aGUgcGF0aCBpbiB0aGUgbW9kZWwgb3IgTm9uZQorICAgICIiIgorICAgIGRlZiBmaW5kX3BhdGhfZm9yX2l0ZW0oc2VsZiwgaXRlbV9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5ub25fdGFyZ2V0X25hbWUoaXRlbV9uYW1lKSBvciBpdGVtX25hbWUgbm90IGluIHNlbGYucG5fcGF0aC5rZXlzKCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucG5fcGF0aFtpdGVtX25hbWVdCisKKyAgICBkZWYgZmluZF9pdGVtX2Zvcl9wYXRoKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKworICAgICIiIgorICAgIEhlbHBlciBtZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbmFtZSBpcyBhIHRhcmdldCBwbgorICAgICIiIgorICAgIGRlZiBub25fdGFyZ2V0X25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgYW5kICgnLW5hdGl2ZScgaW4gbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBpdGVtIGlzIGFuIGl0ZW0gc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXQsIGZpbHRlcik6CisgICAgICAgIG5hbWUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgIGlmIHNlbGYubm9uX3RhcmdldF9uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZm9yIGtleSBpbiBmaWx0ZXIua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IHNlbGYuQ09MX05BTUU6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyW2tleV0gIT0gJ1NlYXJjaCByZWNpcGVzIGJ5IG5hbWUnIGFuZCBmaWx0ZXJba2V5XSAhPSAnU2VhcmNoIHBhY2thZ2UgZ3JvdXBzIGJ5IG5hbWUnOgorICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJba2V5XSBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBtb2RlbC5nZXRfdmFsdWUoaXQsIGtleSkgbm90IGluIGZpbHRlcltrZXldOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5maWx0ZXJlZF9uYiArPSAxCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBleGNsdWRlX2l0ZW1fc29ydF9mdW5jKHNlbGYsIG1vZGVsLCBpdGVyMSwgaXRlcjIsIHVzZXJfZGF0YT1Ob25lKToKKyAgICAgICAgaWYgdXNlcl9kYXRhOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgdmFsMiA9IG1vZGVsLmdldF92YWx1ZShpdGVyMiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsMSA9IG1vZGVsLmdldF92YWx1ZShpdGVyMSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9GQURFX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgcmV0dXJuICgodmFsMSA9PSBUcnVlKSBhbmQgKHZhbDIgPT0gRmFsc2UpKQorCisgICAgZGVmIGluY2x1ZGVfaXRlbV9zb3J0X2Z1bmMoc2VsZiwgbW9kZWwsIGl0ZXIxLCBpdGVyMiwgdXNlcl9kYXRhPU5vbmUpOgorICAgICAgICBpZiB1c2VyX2RhdGE6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICB2YWwyID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIyLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbXBfdmFscyh2YWwxLCB2YWwyLCB1c2VyX2RhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgcmV0dXJuICgodmFsMSA9PSBGYWxzZSkgYW5kICh2YWwyID09IFRydWUpKQorCisgICAgZGVmIHNvcnRfZnVuYyhzZWxmLCBtb2RlbCwgaXRlcjEsIGl0ZXIyLCB1c2VyX2RhdGEpOgorICAgICAgICB2YWwxID0gbW9kZWwuZ2V0X3ZhbHVlKGl0ZXIxLCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgIHZhbDIgPSBtb2RlbC5nZXRfdmFsdWUoaXRlcjIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY21wX3ZhbHModmFsMSwgdmFsMiwgdXNlcl9kYXRhKQorCisgICAgZGVmIGNtcF92YWxzKHNlbGYsIHZhbDEsIHZhbDIsIHVzZXJfZGF0YSk6CisgICAgICAgIGlmIHZhbDEgaXMgTm9uZSBvciB2YWwyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbGlmIHZhbDEuc3RhcnRzd2l0aCh1c2VyX2RhdGEpIGFuZCBub3QgdmFsMi5zdGFydHN3aXRoKHVzZXJfZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBub3QgdmFsMS5zdGFydHN3aXRoKHVzZXJfZGF0YSkgYW5kIHZhbDIuc3RhcnRzd2l0aCh1c2VyX2RhdGEpOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbXAodmFsMSwgdmFsMikKKworICAgICIiIgorICAgIENyZWF0ZSwgaWYgcmVxdWlyZWQsIGFuZCByZXR1cm4gYSBmaWx0ZXJlZCBndGsuVHJlZU1vZGVsU29ydAorICAgIGNvbnRhaW5pbmcgb25seSB0aGUgaXRlbXMgc3BlY2lmaWVkIGJ5IGZpbHRlcgorICAgICIiIgorICAgIGRlZiB0cmVlX21vZGVsKHNlbGYsIGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9RmFsc2UsIGluY2x1ZGVkX2l0ZW1zX2FoZWFkPUZhbHNlLCBzZWFyY2hfZGF0YT1Ob25lLCBpbml0aWFsPUZhbHNlKToKKyAgICAgICAgbW9kZWwgPSBzZWxmLmZpbHRlcl9uZXcoKQorICAgICAgICBzZWxmLmZpbHRlcmVkX25iID0gMAorICAgICAgICBtb2RlbC5zZXRfdmlzaWJsZV9mdW5jKHNlbGYudHJlZV9tb2RlbF9maWx0ZXIsIGZpbHRlcikKKworICAgICAgICBzb3J0ID0gZ3RrLlRyZWVNb2RlbFNvcnQobW9kZWwpCisgICAgICAgIHNvcnQuY29ubmVjdCAoJ3NvcnQtY29sdW1uLWNoYW5nZWQnLCBzZWxmLnNvcnRfY29sdW1uX2NoYW5nZWRfY2IpCisgICAgICAgIGlmIGluaXRpYWw6CisgICAgICAgICAgICBzb3J0LnNldF9zb3J0X2NvbHVtbl9pZChSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgICAgIHNvcnQuc2V0X2RlZmF1bHRfc29ydF9mdW5jKE5vbmUpCisgICAgICAgIGVsaWYgZXhjbHVkZWRfaXRlbXNfYWhlYWQ6CisgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLmV4Y2x1ZGVfaXRlbV9zb3J0X2Z1bmMsIHNlYXJjaF9kYXRhKQorICAgICAgICBlbGlmIGluY2x1ZGVkX2l0ZW1zX2FoZWFkOgorICAgICAgICAgICAgc29ydC5zZXRfZGVmYXVsdF9zb3J0X2Z1bmMoc2VsZi5pbmNsdWRlX2l0ZW1fc29ydF9mdW5jLCBzZWFyY2hfZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlYXJjaF9kYXRhIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCByZWNpcGVzIGJ5IG5hbWUnIGFuZCBzZWFyY2hfZGF0YSE9J1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJzoKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhzZWxmLnNvcnRfZnVuYywgc2VhcmNoX2RhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNvcnQuc2V0X3NvcnRfY29sdW1uX2lkKHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlcikKKyAgICAgICAgICAgICAgICBzb3J0LnNldF9kZWZhdWx0X3NvcnRfZnVuYyhOb25lKQorCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQywgc2VsZi5zb3J0X2NvbHVtbiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMpCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQLCBzZWxmLnNvcnRfY29sdW1uLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0dST1VQKQorICAgICAgICBzb3J0LnNldF9zb3J0X2Z1bmMoUmVjaXBlTGlzdE1vZGVsLkNPTF9CSU5CLCBzZWxmLnNvcnRfYmluYl9jb2x1bW4pCisgICAgICAgIHNvcnQuc2V0X3NvcnRfZnVuYyhSZWNpcGVMaXN0TW9kZWwuQ09MX0xJQywgc2VsZi5zb3J0X2NvbHVtbiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9MSUMpCisgICAgICAgIHJldHVybiBzb3J0CisKKyAgICBkZWYgc29ydF9jb2x1bW5fY2hhbmdlZF9jYiAoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc29ydF9jb2x1bW5faWQsIHNlbGYuc29ydF9vcmRlciA9IGRhdGEuZ2V0X3NvcnRfY29sdW1uX2lkICgpCisKKyAgICBkZWYgc29ydF9jb2x1bW4oc2VsZiwgbW9kZWwsIHJvdzEsIHJvdzIsIGNvbCk6CisgICAgICAgIHZhbHVlMSA9IG1vZGVsLmdldF92YWx1ZShyb3cxLCBjb2wpCisgICAgICAgIHZhbHVlMiA9IG1vZGVsLmdldF92YWx1ZShyb3cyLCBjb2wpCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXMhPTA6CisgICAgICAgICAgICBpZiBjb2w9PVJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DOgorICAgICAgICAgICAgICAgIHJldHVybiAtY21wX3JlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wX3JlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgbmFtZTIgPSBtb2RlbC5nZXRfdmFsdWUocm93MiwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgcmV0dXJuIGNtcChuYW1lMSxuYW1lMikKKworICAgIGRlZiBzb3J0X2JpbmJfY29sdW1uKHNlbGYsIG1vZGVsLCByb3cxLCByb3cyKToKKyAgICAgICAgdmFsdWUxID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzEsIFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgdmFsdWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgdmFsdWUxX2xpc3QgPSB2YWx1ZTEuc3BsaXQoJywgJykKKyAgICAgICAgdmFsdWUyX2xpc3QgPSB2YWx1ZTIuc3BsaXQoJywgJykKKworICAgICAgICB2YWx1ZTEgPSB2YWx1ZTFfbGlzdFswXQorICAgICAgICB2YWx1ZTIgPSB2YWx1ZTJfbGlzdFswXQorCisgICAgICAgIGNtcF9yZXMgPSBjbXAodmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIGlmIGNtcF9yZXM9PTA6CisgICAgICAgICAgICBjbXBfc2l6ZSA9IGNtcChsZW4odmFsdWUxX2xpc3QpLCBsZW4odmFsdWUyX2xpc3QpKQorICAgICAgICAgICAgaWYgY21wX3NpemU9PTA6CisgICAgICAgICAgICAgICAgbmFtZTEgPSBtb2RlbC5nZXRfdmFsdWUocm93MSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FKQorICAgICAgICAgICAgICAgIG5hbWUyID0gbW9kZWwuZ2V0X3ZhbHVlKHJvdzIsIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKG5hbWUxLG5hbWUyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wX3NpemUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBjbXBfcmVzCisKKyAgICBkZWYgY29udmVydF92cGF0aF90b19wYXRoKHNlbGYsIHZpZXdfbW9kZWwsIHZpZXdfcGF0aCk6CisgICAgICAgIGZpbHRlcmVkX21vZGVsX3BhdGggPSB2aWV3X21vZGVsLmNvbnZlcnRfcGF0aF90b19jaGlsZF9wYXRoKHZpZXdfcGF0aCkKKyAgICAgICAgZmlsdGVyZWRfbW9kZWwgPSB2aWV3X21vZGVsLmdldF9tb2RlbCgpCisKKyAgICAgICAgIyBnZXQgdGhlIHBhdGggb2YgdGhlIG9yaWdpbmFsIG1vZGVsCisgICAgICAgIHBhdGggPSBmaWx0ZXJlZF9tb2RlbC5jb252ZXJ0X3BhdGhfdG9fY2hpbGRfcGF0aChmaWx0ZXJlZF9tb2RlbF9wYXRoKQorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIGNvbnZlcnRfcGF0aF90b192cGF0aChzZWxmLCB2aWV3X21vZGVsLCBwYXRoKToKKyAgICAgICAgaXQgPSB2aWV3X21vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBuYW1lID0gc2VsZi5maW5kX2l0ZW1fZm9yX3BhdGgocGF0aCkKKyAgICAgICAgICAgIHZpZXdfbmFtZSA9IHZpZXdfbW9kZWwuZ2V0X3ZhbHVlKGl0LCBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBpZiB2aWV3X25hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAgICB2aWV3X3BhdGggPSB2aWV3X21vZGVsLmdldF9wYXRoKGl0KQorICAgICAgICAgICAgICAgIHJldHVybiB2aWV3X3BhdGgKKyAgICAgICAgICAgIGl0ID0gdmlld19tb2RlbC5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAiIiIKKyAgICBUaGUgcG9wdWxhdGUoKSBmdW5jdGlvbiB0YWtlcyBhcyBpbnB1dCB0aGUgZGF0YSBmcm9tIGEKKyAgICBiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCBldmVudCBhbmQgcG9wdWxhdGVzIHRoZSBSZWNpcGVMaXN0LgorICAgICIiIgorICAgIGRlZiBwb3B1bGF0ZShzZWxmLCBldmVudF9tb2RlbCk6CisgICAgICAgICMgRmlyc3QgY2xlYXIgdGhlIG1vZGVsLCBpbiBjYXNlIHJlcG9wdWxhdGluZworICAgICAgICBzZWxmLmNsZWFyKCkKKworICAgICAgICAjIGR1bW15IGltYWdlIGZvciBwcm9tcHQKKyAgICAgICAgc2VsZi5zZXRfaW5fbGlzdChzZWxmLl9fY3VzdG9tX2ltYWdlX18sICAiVXNlICdFZGl0IGltYWdlIHJlY2lwZScgdG8gY3VzdG9taXplIHJlY2lwZXMgYW5kIHBhY2thZ2VzICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gYmUgaW5jbHVkZWQgaW4geW91ciBpbWFnZSAiKQorCisgICAgICAgIGZvciBpdGVtIGluIGV2ZW50X21vZGVsWyJwbiJdOgorICAgICAgICAgICAgbmFtZSA9IGl0ZW0KKyAgICAgICAgICAgIGRlc2MgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiZGVzY3JpcHRpb24iXQorICAgICAgICAgICAgbGljID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImxpY2Vuc2UiXQorICAgICAgICAgICAgZ3JvdXAgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsic2VjdGlvbiJdCisgICAgICAgICAgICBpbmhlcml0cyA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJpbmhlcml0cyJdCisgICAgICAgICAgICBzdW1tYXJ5ID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bInN1bW1hcnkiXQorICAgICAgICAgICAgdmVyc2lvbiA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJ2ZXJzaW9uIl0KKyAgICAgICAgICAgIHJldmlzaW9uID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bInByZXZpc2lvbiJdCisgICAgICAgICAgICBob21lcGFnZSA9IGV2ZW50X21vZGVsWyJwbiJdW2l0ZW1dWyJob21lcGFnZSJdCisgICAgICAgICAgICBidWd0cmFja2VyID0gZXZlbnRfbW9kZWxbInBuIl1baXRlbV1bImJ1Z3RyYWNrZXIiXQorICAgICAgICAgICAgZmlsZW5hbWUgPSBldmVudF9tb2RlbFsicG4iXVtpdGVtXVsiZmlsZW5hbWUiXQorICAgICAgICAgICAgaW5zdGFsbCA9IFtdCisKKyAgICAgICAgICAgIGRlcGVuZHMgPSBldmVudF9tb2RlbFsiZGVwZW5kcyJdLmdldChpdGVtLCBbXSkgKyBldmVudF9tb2RlbFsicmRlcGVuZHMtcG4iXS5nZXQoaXRlbSwgW10pCisKKyAgICAgICAgICAgIGlmICgncGFja2FnZWdyb3VwLmJiY2xhc3MnIGluICIgIi5qb2luKGluaGVyaXRzKSk6CisgICAgICAgICAgICAgICAgYXR5cGUgPSAncGFja2FnZWdyb3VwJworICAgICAgICAgICAgZWxpZiAoJy9pbWFnZS5iYmNsYXNzJyBpbiAiICIuam9pbihpbmhlcml0cykpOgorICAgICAgICAgICAgICAgIGlmICJlZGl0ZWQiIG5vdCBpbiBuYW1lOgorICAgICAgICAgICAgICAgICAgICBhdHlwZSA9ICdpbWFnZScKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCA9IGV2ZW50X21vZGVsWyJyZGVwZW5kcy1wa2ciXS5nZXQoaXRlbSwgW10pICsgZXZlbnRfbW9kZWxbInJyZWNzLXBrZyJdLmdldChpdGVtLCBbXSkKKyAgICAgICAgICAgIGVsaWYgKCdtZXRhLScgaW4gbmFtZSk6CisgICAgICAgICAgICAgICAgYXR5cGUgPSAndG9vbGNoYWluJworICAgICAgICAgICAgZWxpZiAobmFtZSA9PSAnZHVtbXktaW1hZ2UnIG9yIG5hbWUgPT0gJ2R1bW15LXRvb2xjaGFpbicpOgorICAgICAgICAgICAgICAgIGF0eXBlID0gJ2R1bW15JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhdHlwZSA9ICdyZWNpcGUnCisKKyAgICAgICAgICAgIHNlbGYuc2V0KHNlbGYuYXBwZW5kKCksIHNlbGYuQ09MX05BTUUsIGl0ZW0sIHNlbGYuQ09MX0RFU0MsIGRlc2MsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9MSUMsIGxpYywgc2VsZi5DT0xfR1JPVVAsIGdyb3VwLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfREVQUywgIiAiLmpvaW4oZGVwZW5kcyksIHNlbGYuQ09MX0JJTkIsICIiLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5DT0xfVFlQRSwgYXR5cGUsIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9JTUcsIEZhbHNlLCBzZWxmLkNPTF9JTlNUQUxMLCAiICIuam9pbihpbnN0YWxsKSwgc2VsZi5DT0xfUE4sIGl0ZW0sCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9TVU1NQVJZLCBzdW1tYXJ5LCBzZWxmLkNPTF9WRVJTSU9OLCB2ZXJzaW9uLCBzZWxmLkNPTF9SRVZJU0lPTiwgcmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9IT01FUEFHRSwgaG9tZXBhZ2UsIHNlbGYuQ09MX0JVR1RSQUNLRVIsIGJ1Z3RyYWNrZXIsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9GSUxFLCBmaWxlbmFtZSkKKworICAgICAgICBzZWxmLnBuX3BhdGggPSB7fQorICAgICAgICBpdCA9IHNlbGYuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBuID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX05BTUUpCisgICAgICAgICAgICBwYXRoID0gc2VsZi5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHNlbGYucG5fcGF0aFtwbl0gPSBwYXRoCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgZGVmIHNldF9pbl9saXN0KHNlbGYsIGl0ZW0sIGRlc2MpOgorICAgICAgICBzZWxmLnNldChzZWxmLmFwcGVuZCgpLCBzZWxmLkNPTF9OQU1FLCBpdGVtLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9ERVNDLCBkZXNjLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9MSUMsICIiLCBzZWxmLkNPTF9HUk9VUCwgIiIsCisgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0RFUFMsICIiLCBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfVFlQRSwgImltYWdlIiwgc2VsZi5DT0xfSU5DLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSU1HLCBGYWxzZSwgc2VsZi5DT0xfSU5TVEFMTCwgIiIsIHNlbGYuQ09MX1BOLCBpdGVtLAorICAgICAgICAgICAgICAgICBzZWxmLkNPTF9TVU1NQVJZLCAiIiwgc2VsZi5DT0xfVkVSU0lPTiwgIiIsIHNlbGYuQ09MX1JFVklTSU9OLCAiIiwKKyAgICAgICAgICAgICAgICAgc2VsZi5DT0xfSE9NRVBBR0UsICIiLCBzZWxmLkNPTF9CVUdUUkFDS0VSLCAiIikKKyAgICAgICAgc2VsZi5wbl9wYXRoID0ge30KKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwbiA9IHNlbGYuZ2V0X3ZhbHVlKGl0LCBzZWxmLkNPTF9OQU1FKQorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBzZWxmLnBuX3BhdGhbcG5dID0gcGF0aAorICAgICAgICAgICAgaXQgPSBzZWxmLml0ZXJfbmV4dChpdCkKKworICAgICIiIgorICAgIFVwZGF0ZSB0aGUgbW9kZWwsIHNlbmQgb3V0IHRoZSBub3RpZmljYXRpb24uCisgICAgIiIiCisgICAgZGVmIHNlbGVjdGlvbl9jaGFuZ2Vfbm90aWZpY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmVtaXQoInJlY2lwZS1zZWxlY3Rpb24tY2hhbmdlZCIpCisKKyAgICBkZWYgcGF0aF9pbmNsdWRlZChzZWxmLCBpdGVtX3BhdGgpOgorICAgICAgICByZXR1cm4gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10KKworICAgICIiIgorICAgIEFkZCB0aGlzIGl0ZW0sIGFuZCBhbnkgb2YgaXRzIGRlcGVuZGVuY2llcywgdG8gdGhlIGltYWdlIGNvbnRlbnRzCisgICAgIiIiCisgICAgZGVmIGluY2x1ZGVfaXRlbShzZWxmLCBpdGVtX3BhdGgsIGJpbmI9IiIsIGltYWdlX2NvbnRlbnRzPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5wYXRoX2luY2x1ZGVkKGl0ZW1fcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpdGVtX25hbWUgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKyAgICAgICAgaXRlbV9kZXBzID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0RFUFNdCisKKyAgICAgICAgc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0lOQ10gPSBUcnVlCisKKyAgICAgICAgaXRlbV9iaW4gPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgaWYgYmluYiBhbmQgbm90IGJpbmIgaW4gaXRlbV9iaW46CisgICAgICAgICAgICBpdGVtX2Jpbi5hcHBlbmQoYmluYikKKyAgICAgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9CSU5CXSA9ICcsICcuam9pbihpdGVtX2JpbikubHN0cmlwKCcsICcpCisKKyAgICAgICAgIyBXZSB3YW50IHRvIGRvIHNvbWUgbWFnaWMgd2l0aCB0aGluZ3Mgd2hpY2ggYXJlIGJyb3VnaHQgaW4gYnkgdGhlCisgICAgICAgICMgYmFzZSBpbWFnZSBzbyB0YWcgdGhlbSBhcyBzbworICAgICAgICBpZiBpbWFnZV9jb250ZW50czoKKyAgICAgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTUddID0gVHJ1ZQorCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgICMgRW5zdXJlIGFsbCBvZiB0aGUgaXRlbXMgZGVwcyBhcmUgaW5jbHVkZWQgYW5kLCB3aGVyZSBhcHByb3ByaWF0ZSwKKyAgICAgICAgICAgICMgYWRkIHRoaXMgaXRlbSB0byB0aGVpciBDT0xfQklOQgorICAgICAgICAgICAgZm9yIGRlcCBpbiBpdGVtX2RlcHMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBjb250ZW50cyBtb2RlbCBkb2Vzbid0IGFscmVhZHkgY29udGFpbiBkZXAsIGFkZCBpdAorICAgICAgICAgICAgICAgIGRlcF9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oZGVwKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBfaW5jbHVkZWQgPSBzZWxmLnBhdGhfaW5jbHVkZWQoZGVwX3BhdGgpCisKKyAgICAgICAgICAgICAgICBpZiBkZXBfaW5jbHVkZWQgYW5kIG5vdCBkZXAgaW4gaXRlbV9iaW46CisgICAgICAgICAgICAgICAgICAgICMgZG9uJ3Qgc2V0IHRoZSBDT0xfQklOQiB0byB0aGlzIGl0ZW0gaWYgdGhlIHRhcmdldCBpcyBhbgorICAgICAgICAgICAgICAgICAgICAjIGl0ZW0gaW4gb3VyIG93biBDT0xfQklOQgorICAgICAgICAgICAgICAgICAgICBkZXBfYmluID0gc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0uc3BsaXQoJywgJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGl0ZW1fbmFtZSBpbiBkZXBfYmluOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwX2Jpbi5hcHBlbmQoaXRlbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZltkZXBfcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisgICAgICAgICAgICAgICAgZWxpZiBub3QgZGVwX2luY2x1ZGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVfaXRlbShkZXBfcGF0aCwgYmluYj1pdGVtX25hbWUsIGltYWdlX2NvbnRlbnRzPWltYWdlX2NvbnRlbnRzKQorICAgICAgICBkZXBfYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9OQU1FXSBpbiBkZXBfYmluOgorICAgICAgICAgICAgZGVwX2Jpbi5yZW1vdmUoc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX05BTUVdKQorICAgICAgICBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfQklOQl0gPSAnLCAnLmpvaW4oZGVwX2JpbikubHN0cmlwKCcsICcpCisKKyAgICBkZWYgZXhjbHVkZV9pdGVtKHNlbGYsIGl0ZW1fcGF0aCk6CisgICAgICAgIGlmIG5vdCBzZWxmLnBhdGhfaW5jbHVkZWQoaXRlbV9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGZbaXRlbV9wYXRoXVtzZWxmLkNPTF9JTkNdID0gRmFsc2UKKworICAgICAgICBpdGVtX25hbWUgPSBzZWxmW2l0ZW1fcGF0aF1bc2VsZi5DT0xfTkFNRV0KKyAgICAgICAgaXRlbV9kZXBzID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0RFUFNdCisgICAgICAgIGlmIGl0ZW1fZGVwczoKKyAgICAgICAgICAgIGZvciBkZXAgaW4gaXRlbV9kZXBzLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgZGVwX3BhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShkZXApCisgICAgICAgICAgICAgICAgaWYgbm90IGRlcF9wYXRoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGRlcF9iaW4gPSBzZWxmW2RlcF9wYXRoXVtzZWxmLkNPTF9CSU5CXS5zcGxpdCgnLCAnKQorICAgICAgICAgICAgICAgIGlmIGl0ZW1fbmFtZSBpbiBkZXBfYmluOgorICAgICAgICAgICAgICAgICAgICBkZXBfYmluLnJlbW92ZShpdGVtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGZbZGVwX3BhdGhdW3NlbGYuQ09MX0JJTkJdID0gJywgJy5qb2luKGRlcF9iaW4pLmxzdHJpcCgnLCAnKQorCisgICAgICAgIGl0ZW1fYmluID0gc2VsZltpdGVtX3BhdGhdW3NlbGYuQ09MX0JJTkJdLnNwbGl0KCcsICcpCisgICAgICAgIGlmIGl0ZW1fYmluOgorICAgICAgICAgICAgZm9yIGJpbmIgaW4gaXRlbV9iaW46CisgICAgICAgICAgICAgICAgYmluYl9wYXRoID0gc2VsZi5maW5kX3BhdGhfZm9yX2l0ZW0oYmluYikKKyAgICAgICAgICAgICAgICBpZiBub3QgYmluYl9wYXRoOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuZXhjbHVkZV9pdGVtKGJpbmJfcGF0aCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBzZWxmLnNldChpdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lOQywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLkNPTF9CSU5CLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ09MX0lNRywgRmFsc2UpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorCisgICAgIiIiCisgICAgUmV0dXJucyB0d28gbGlzdHMuIE9uZSBvZiB1c2VyIHNlbGVjdGVkIHJlY2lwZXMgYW5kIHRoZSBvdGhlciBjb250YWluaW5nCisgICAgYWxsIHNlbGVjdGVkIHJlY2lwZXMKKyAgICAiIiIKKyAgICBkZWYgZ2V0X3NlbGVjdGVkX3JlY2lwZXMoc2VsZik6CisgICAgICAgIGFsbHJlY2lwZXMgPSBbXQorICAgICAgICB1c2VycmVjaXBlcyA9IFtdCisKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1BOKQorICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfVFlQRSkKKyAgICAgICAgICAgICAgICBpZiB0eXBlICE9ICJpbWFnZSI6CisgICAgICAgICAgICAgICAgICAgIGFsbHJlY2lwZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbCA9ICJVc2VyIFNlbGVjdGVkIiBpbiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfQklOQikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnJlY2lwZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpdCA9IHNlbGYuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiBsaXN0KHNldCh1c2VycmVjaXBlcykpLCBsaXN0KHNldChhbGxyZWNpcGVzKSkKKworICAgIGRlZiBzZXRfc2VsZWN0ZWRfcmVjaXBlcyhzZWxmLCByZWNpcGVsaXN0KToKKyAgICAgICAgZm9yIHBuIGluIHJlY2lwZWxpc3Q6CisgICAgICAgICAgICBpZiBwbiBpbiBzZWxmLnBuX3BhdGgua2V5cygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLnBuX3BhdGhbcG5dCisgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2l0ZW0oaXRlbV9wYXRoPXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYj0iVXNlciBTZWxlY3RlZCIpCisgICAgICAgIHNlbGYuc2VsZWN0aW9uX2NoYW5nZV9ub3RpZmljYXRpb24oKQorCisgICAgZGVmIGdldF9zZWxlY3RlZF9pbWFnZShzZWxmKToKKyAgICAgICAgaXQgPSBzZWxmLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBpZiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfSU5DKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5nZXRfdmFsdWUoaXQsIHNlbGYuQ09MX1BOKQorICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfVFlQRSkKKyAgICAgICAgICAgICAgICBpZiB0eXBlID09ICJpbWFnZSI6CisgICAgICAgICAgICAgICAgICAgIHNlbCA9ICJVc2VyIFNlbGVjdGVkIiBpbiBzZWxmLmdldF92YWx1ZShpdCwgc2VsZi5DT0xfQklOQikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgICAgIGl0ID0gc2VsZi5pdGVyX25leHQoaXQpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2V0X3NlbGVjdGVkX2ltYWdlKHNlbGYsIGltZyk6CisgICAgICAgIGlmIG5vdCBpbWc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5yZXNldCgpCisgICAgICAgIHBhdGggPSBzZWxmLmZpbmRfcGF0aF9mb3JfaXRlbShpbWcpCisgICAgICAgIHNlbGYuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5iPSJVc2VyIFNlbGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfY29udGVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5zZWxlY3Rpb25fY2hhbmdlX25vdGlmaWNhdGlvbigpCisKKyAgICBkZWYgc2V0X2N1c3RvbV9pbWFnZV92ZXJzaW9uKHNlbGYsIHZlcnNpb24pOgorICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV92ZXJzaW9uID0gdmVyc2lvbgorCisgICAgZGVmIGdldF9jdXN0b21faW1hZ2VfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY3VzdG9tX2ltYWdlX3ZlcnNpb24KKworICAgIGRlZiBpc19jdXN0b21faW1hZ2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYuX19jdXN0b21faW1hZ2VfXwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYnBhZ2VzLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYnBhZ2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmZDM1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaG9icGFnZXMucHkKQEAgLTAsMCArMSwxMjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBCaXRCYWtlIEdyYXBoaWNhbCBHVEsgVXNlciBJbnRlcmZhY2UKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBBdXRob3JlZCBieSBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorIyBBdXRob3JlZCBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaHdjCisKKyMKKyMgSG9iUGFnZTogdGhlIHN1cGVyIGNsYXNzIGZvciBhbGwgSG9iLXJlbGF0ZWQgcGFnZXMKKyMgICAgCitjbGFzcyBIb2JQYWdlIChndGsuVkJveCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlciwgdGl0bGUgPSBOb25lKToKKyAgICAgICAgc3VwZXIoSG9iUGFnZSwgc2VsZikuX19pbml0X18oRmFsc2UsIDApCisgICAgICAgIHNlbGYuYnVpbGRlciA9IGJ1aWxkZXIKKyAgICAgICAgc2VsZi5idWlsZGVyX3dpZHRoLCBzZWxmLmJ1aWxkZXJfaGVpZ2h0ID0gc2VsZi5idWlsZGVyLnNpemVfcmVxdWVzdCgpCisKKyAgICAgICAgaWYgbm90IHRpdGxlOgorICAgICAgICAgICAgc2VsZi50aXRsZSA9ICJIb2IgLS0gSW1hZ2UgQ3JlYXRvciIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLnRpdGxlX2xhYmVsID0gZ3RrLkxhYmVsKCkKKworICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhID0gZ3RrLlZCb3goRmFsc2UsIDEyKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnNldF9zaXplX3JlcXVlc3Qoc2VsZi5idWlsZGVyX3dpZHRoIC0gNzMgLSA3Mywgc2VsZi5idWlsZGVyX2hlaWdodCAtIDg4IC0gMTUgLSAxNSkKKyAgICAgICAgc2VsZi5ncm91cF9hbGlnbiA9IGd0ay5BbGlnbm1lbnQoeGFsaWduID0gMCwgeWFsaWduPTAuNSwgeHNjYWxlPTEsIHlzY2FsZT0xKQorICAgICAgICBzZWxmLmdyb3VwX2FsaWduLnNldF9wYWRkaW5nKDE1LCAxNSwgNzMsIDczKQorICAgICAgICBzZWxmLmdyb3VwX2FsaWduLmFkZChzZWxmLmJveF9ncm91cF9hcmVhKQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnNldF9ob21vZ2VuZW91cyhGYWxzZSkKKworICAgIGRlZiBzZXRfdGl0bGUoc2VsZiwgdGl0bGUpOgorICAgICAgICBzZWxmLnRpdGxlID0gdGl0bGUKKyAgICAgICAgc2VsZi50aXRsZV9sYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBzaXplPSd4LWxhcmdlJz4lczwvc3Bhbj4iICUgc2VsZi50aXRsZSkKKworICAgIGRlZiBhZGRfb250b190b3BfYmFyKHNlbGYsIHdpZGdldCA9IE5vbmUsIHBhZGRpbmcgPSAwKToKKyAgICAgICAgIyB0aGUgdG9wIGJ1dHRvbiBvY2N1cGllcyAxLzcgb2YgdGhlIHBhZ2UgaGVpZ2h0CisgICAgICAgICMgc2V0dXAgYW4gZXZlbnQgYm94CisgICAgICAgIGV2ZW50Ym94ID0gZ3RrLkV2ZW50Qm94KCkKKyAgICAgICAgc3R5bGUgPSBldmVudGJveC5nZXRfc3R5bGUoKS5jb3B5KCkKKyAgICAgICAgc3R5bGUuYmdbZ3RrLlNUQVRFX05PUk1BTF0gPSBldmVudGJveC5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihIb2JDb2xvcnMuTElHSFRfR1JBWSwgRmFsc2UsIEZhbHNlKQorICAgICAgICBldmVudGJveC5zZXRfc3R5bGUoc3R5bGUpCisgICAgICAgIGV2ZW50Ym94LnNldF9zaXplX3JlcXVlc3QoLTEsIDg4KQorCisgICAgICAgIGhib3ggPSBndGsuSEJveCgpCisKKyAgICAgICAgc2VsZi50aXRsZV9sYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYudGl0bGVfbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+IiAlIHNlbGYudGl0bGUpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLnRpdGxlX2xhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9MjApCisKKyAgICAgICAgaWYgd2lkZ2V0OgorICAgICAgICAgICAgIyBhZGQgdGhlIHdpZGdldCBpbiB0aGUgZXZlbnQgYm94CisgICAgICAgICAgICBoYm94LnBhY2tfZW5kKHdpZGdldCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlLCBwYWRkaW5nPXBhZGRpbmcpCisgICAgICAgIGV2ZW50Ym94LmFkZChoYm94KQorCisgICAgICAgIHJldHVybiBldmVudGJveAorCisgICAgZGVmIHNwYW5fdGFnKHNlbGYsIHNpemU9Im1lZGl1bSIsIHdlaWdodD0ibm9ybWFsIiwgZm9yZ3JvdW5kPSIjMWMxYzFjIik6CisgICAgICAgIHNwYW5fdGFnID0gIndlaWdodD0nJXMnIGZvcmVncm91bmQ9JyVzJyBzaXplPSclcyciICUgKHdlaWdodCwgZm9yZ3JvdW5kLCBzaXplKQorICAgICAgICByZXR1cm4gc3Bhbl90YWcKKworICAgIGRlZiBhcHBlbmRfdG9vbGJhcl9idXR0b24oc2VsZiwgdG9vbGJhciwgYnV0dG9ubmFtZSwgaWNvbl9kaXNwLCBpY29uX2hvdm9yLCB0aXAsIGNiKToKKyAgICAgICAgIyBDcmVhdGUgYSBidXR0b24gYW5kIGFwcGVuZCBpdCBvbiB0aGUgdG9vbGJhciBhY2NvcmRpbmcgdG8gYnV0dG9uIG5hbWUKKyAgICAgICAgaWNvbiA9IGd0ay5JbWFnZSgpCisgICAgICAgIGljb25fZGlzcGxheSA9IGljb25fZGlzcAorICAgICAgICBpY29uX2hvdmVyID0gaWNvbl9ob3ZvcgorICAgICAgICBwaXhfYnVmZmVyID0gZ3RrLmdkay5waXhidWZfbmV3X2Zyb21fZmlsZShpY29uX2Rpc3BsYXkpCisgICAgICAgIGljb24uc2V0X2Zyb21fcGl4YnVmKHBpeF9idWZmZXIpCisgICAgICAgIHRpcF90ZXh0ID0gdGlwCisgICAgICAgIGJ1dHRvbiA9IHRvb2xiYXIuYXBwZW5kX2l0ZW0oYnV0dG9ubmFtZSwgdGlwLCBOb25lLCBpY29uLCBjYikKKyAgICAgICAgcmV0dXJuIGJ1dHRvbgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc2l6ZV90b19zdHJpbmcoc2l6ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzaXplOgorICAgICAgICAgICAgICAgIHNpemVfc3RyID0gIjAgQiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKHN0cihpbnQoc2l6ZSkpKSA+IDY6CisgICAgICAgICAgICAgICAgICAgIHNpemVfc3RyID0gJyUuMWYnICUgKHNpemUqMS4wLygxMDI0KjEwMjQpKSArICcgTUInCisgICAgICAgICAgICAgICAgZWxpZiBsZW4oc3RyKGludChzaXplKSkpID4gMzoKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV9zdHIgPSAnJS4xZicgJSAoc2l6ZSoxLjAvMTAyNCkgKyAnIEtCJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNpemVfc3RyID0gc3RyKHNpemUpICsgJyBCJworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzaXplX3N0ciA9ICIwIEIiCisgICAgICAgIHJldHVybiBzaXplX3N0cgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc3RyaW5nX3RvX3NpemUoc3RyX3NpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc3RyX3NpemU6CisgICAgICAgICAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5pdCA9IHN0cl9zaXplLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4odW5pdCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBpZiB1bml0WzFdID09ICdNQic6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gZmxvYXQodW5pdFswXSkqMTAyNCoxMDI0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgdW5pdFsxXSA9PSAnS0InOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGZsb2F0KHVuaXRbMF0pKjEwMjQKKyAgICAgICAgICAgICAgICAgICAgZWxpZiB1bml0WzFdID09ICdCJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBmbG9hdCh1bml0WzBdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzaXplID0gZmxvYXQodW5pdFswXSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgcmV0dXJuIHNpemUKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2hvYndpZGdldC5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2J3aWRnZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5NjljMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9ob2J3aWRnZXQucHkKQEAgLTAsMCArMSw5MDQgQEAKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgoraW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCBwYW5nbywgcGFuZ29jYWlybworaW1wb3J0IGNhaXJvCitpbXBvcnQgbWF0aAorCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5wZXJzaXN0ZW50dG9vbHRpcCBpbXBvcnQgUGVyc2lzdGVudFRvb2x0aXAKKworY2xhc3MgaHdjOgorCisgICAgTUFJTl9XSU5fV0lEVEggICA9IDEwMjQKKyAgICBNQUlOX1dJTl9IRUlHSFQgID0gNzAwCisKK2NsYXNzIGhpYzoKKworICAgIEhPQl9JQ09OX0JBU0VfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpLCAoInVpL2ljb25zLyIpKQorCisgICAgSUNPTl9SQ0lQRV9ESVNQTEFZX0ZJTEUgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncmVjaXBlL3JlY2lwZV9kaXNwbGF5LnBuZycpKQorICAgIElDT05fUkNJUEVfSE9WRVJfRklMRSAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nJykpCisgICAgSUNPTl9QQUNLQUdFU19ESVNQTEFZX0ZJTEUgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgncGFja2FnZXMvcGFja2FnZXNfZGlzcGxheS5wbmcnKSkKKyAgICBJQ09OX1BBQ0tBR0VTX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdwYWNrYWdlcy9wYWNrYWdlc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0xBWUVSU19ESVNQTEFZX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdsYXllcnMvbGF5ZXJzX2Rpc3BsYXkucG5nJykpCisgICAgSUNPTl9MQVlFUlNfSE9WRVJfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnbGF5ZXJzL2xheWVyc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lNQUdFU19ESVNQTEFZX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbWFnZXMvaW1hZ2VzX2Rpc3BsYXkucG5nJykpCisgICAgSUNPTl9JTUFHRVNfSE9WRVJfRklMRSAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW1hZ2VzL2ltYWdlc19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX1NFVFRJTkdTX0RJU1BMQVlfRklMRSAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdzZXR0aW5ncy9zZXR0aW5nc19kaXNwbGF5LnBuZycpKQorICAgIElDT05fU0VUVElOR1NfSE9WRVJfRklMRSAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZycpKQorICAgIElDT05fSU5GT19ESVNQTEFZX0ZJTEUgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19kaXNwbGF5LnBuZycpKQorICAgIElDT05fSU5GT19IT1ZFUl9GSUxFICAgICAgICAgID0gb3MucGF0aC5qb2luKEhPQl9JQ09OX0JBU0VfRElSLCAoJ2luZm8vaW5mb19ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORElfQ09ORklSTV9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2NvbmZpcm1hdGlvbi5wbmcnKSkKKyAgICBJQ09OX0lORElfRVJST1JfRklMRSAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2RlbmllZC5wbmcnKSkKKyAgICBJQ09OX0lORElfUkVNT1ZFX0ZJTEUgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlbW92ZS5wbmcnKSkKKyAgICBJQ09OX0lORElfUkVNT1ZFX0hPVkVSX0ZJTEUgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlbW92ZS1ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORElfQUREX0ZJTEUgICAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2FkZC5wbmcnKSkKKyAgICBJQ09OX0lORElfQUREX0hPVkVSX0ZJTEUgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL2FkZC1ob3Zlci5wbmcnKSkKKyAgICBJQ09OX0lORElfUkVGUkVTSF9GSUxFICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3JlZnJlc2gucG5nJykpCisgICAgSUNPTl9JTkRJX0FMRVJUX0ZJTEUgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9hbGVydC5wbmcnKSkKKyAgICBJQ09OX0lORElfVElDS19GSUxFICAgICAgICAgICA9IG9zLnBhdGguam9pbihIT0JfSUNPTl9CQVNFX0RJUiwgKCdpbmRpY2F0b3JzL3RpY2sucG5nJykpCisgICAgSUNPTl9JTkRJX0lORk9fRklMRSAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4oSE9CX0lDT05fQkFTRV9ESVIsICgnaW5kaWNhdG9ycy9pbmZvLnBuZycpKQorCitjbGFzcyBIb2JWaWV3VGFibGUgKGd0ay5WQm94KToKKyAgICAiIiIKKyAgICBBIFZCb3ggdG8gY29udGFpbiB0aGUgdGFibGUgZm9yIGRpZmZlcmVudCByZWNpcGUgdmlld3MgYW5kIHBhY2thZ2UgdmlldworICAgICIiIgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgICJ0b2dnbGVkIiAgICAgICA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICJyb3ctYWN0aXZhdGVkIiA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgImNlbGwtZmFkZWlub3V0LXN0b3BwZWQiIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2x1bW5zLCBuYW1lKToKKyAgICAgICAgZ3RrLlZCb3guX19pbml0X18oc2VsZiwgRmFsc2UsIDYpCisgICAgICAgIHNlbGYudGFibGVfdHJlZSA9IGd0ay5UcmVlVmlldygpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfaGVhZGVyc192aXNpYmxlKFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfaGVhZGVyc19jbGlja2FibGUoVHJ1ZSkKKyAgICAgICAgc2VsZi50YWJsZV90cmVlLnNldF9ydWxlc19oaW50KFRydWUpCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5zZXRfZW5hYmxlX3RyZWVfbGluZXMoVHJ1ZSkKKyAgICAgICAgc2VsZi50YWJsZV90cmVlLmdldF9zZWxlY3Rpb24oKS5zZXRfbW9kZShndGsuU0VMRUNUSU9OX1NJTkdMRSkKKyAgICAgICAgc2VsZi50b2dnbGVfY29sdW1ucyA9IFtdCisgICAgICAgIHNlbGYudGFibGVfdHJlZS5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5yb3dfYWN0aXZhdGVkX2NiKQorICAgICAgICBzZWxmLnRvcF9iYXIgPSBOb25lCisgICAgICAgIHNlbGYudGFiX25hbWUgPSBuYW1lCisKKyAgICAgICAgZm9yIGksIGNvbHVtbiBpbiBlbnVtZXJhdGUoY29sdW1ucyk6CisgICAgICAgICAgICBjb2xfbmFtZSA9IGNvbHVtblsnY29sX25hbWUnXQorICAgICAgICAgICAgY29sID0gZ3RrLlRyZWVWaWV3Q29sdW1uKGNvbF9uYW1lKQorICAgICAgICAgICAgY29sLnNldF9jbGlja2FibGUoVHJ1ZSkKKyAgICAgICAgICAgIGNvbC5zZXRfcmVzaXphYmxlKFRydWUpCisgICAgICAgICAgICBpZiBzZWxmLnRhYl9uYW1lLnN0YXJ0c3dpdGgoJ0luY2x1ZGVkJyk6CisgICAgICAgICAgICAgICAgaWYgY29sX25hbWUhPSdJbmNsdWRlZCc6CisgICAgICAgICAgICAgICAgICAgIGNvbC5zZXRfc29ydF9jb2x1bW5faWQoY29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29sLnNldF9zb3J0X2NvbHVtbl9pZChjb2x1bW5bJ2NvbF9pZCddKQorICAgICAgICAgICAgaWYgJ2NvbF9taW4nIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgY29sLnNldF9taW5fd2lkdGgoY29sdW1uWydjb2xfbWluJ10pCisgICAgICAgICAgICBpZiAnY29sX21heCcgaW4gY29sdW1uLmtleXMoKToKKyAgICAgICAgICAgICAgICBjb2wuc2V0X21heF93aWR0aChjb2x1bW5bJ2NvbF9tYXgnXSkKKyAgICAgICAgICAgIGlmICdleHBhbmQnIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgY29sLnNldF9leHBhbmQoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYudGFibGVfdHJlZS5hcHBlbmRfY29sdW1uKGNvbCkKKworICAgICAgICAgICAgaWYgKG5vdCAnY29sX3N0eWxlJyBpbiBjb2x1bW4ua2V5cygpKSBvciBjb2x1bW5bJ2NvbF9zdHlsZSddID09ICd0ZXh0JzoKKyAgICAgICAgICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICAgICAgICAgIGNvbC5wYWNrX3N0YXJ0KGNlbGwsIFRydWUpCisgICAgICAgICAgICAgICAgY29sLnNldF9hdHRyaWJ1dGVzKGNlbGwsIHRleHQ9Y29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgICAgICBpZiAnY29sX3RfaWQnIGluIGNvbHVtbi5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGNvbC5hZGRfYXR0cmlidXRlKGNlbGwsICdmb250JywgY29sdW1uWydjb2xfdF9pZCddKQorICAgICAgICAgICAgZWxpZiBjb2x1bW5bJ2NvbF9zdHlsZSddID09ICdjaGVjayB0b2dnbGUnOgorICAgICAgICAgICAgICAgIGNlbGwgPSBIb2JDZWxsUmVuZGVyZXJUb2dnbGUoKQorICAgICAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCdhY3RpdmF0YWJsZScsIFRydWUpCisgICAgICAgICAgICAgICAgY2VsbC5jb25uZWN0KCJ0b2dnbGVkIiwgc2VsZi50b2dnbGVkX2NiLCBpLCBzZWxmLnRhYmxlX3RyZWUpCisgICAgICAgICAgICAgICAgY2VsbC5jb25uZWN0X3JlbmRlcl9zdGF0ZV9jaGFuZ2VkKHNlbGYuc3RvcF9jZWxsX2ZhZGVpbm91dF9jYiwgc2VsZi50YWJsZV90cmVlKQorICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlX2lkID0gaQorICAgICAgICAgICAgICAgIGNvbC5wYWNrX2VuZChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCBhY3RpdmU9Y29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zLmFwcGVuZChjb2xfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiAnY29sX2dyb3VwJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBjb2wuc2V0X2NlbGxfZGF0YV9mdW5jKGNlbGwsIHNlbGYuc2V0X2dyb3VwX251bWJlcl9jYikKKyAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAncmFkaW8gdG9nZ2xlJzoKKyAgICAgICAgICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZSgpCisgICAgICAgICAgICAgICAgY2VsbC5zZXRfcHJvcGVydHkoJ2FjdGl2YXRhYmxlJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjZWxsLnNldF9yYWRpbyhUcnVlKQorICAgICAgICAgICAgICAgIGNlbGwuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudG9nZ2xlZF9jYiwgaSwgc2VsZi50YWJsZV90cmVlKQorICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlX2lkID0gaQorICAgICAgICAgICAgICAgIGNvbC5wYWNrX2VuZChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfYXR0cmlidXRlcyhjZWxsLCBhY3RpdmU9Y29sdW1uWydjb2xfaWQnXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZV9jb2x1bW5zLmFwcGVuZChjb2xfbmFtZSkKKyAgICAgICAgICAgIGVsaWYgY29sdW1uWydjb2xfc3R5bGUnXSA9PSAnYmluYic6CisgICAgICAgICAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgICAgICAgICBjb2wucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICAgICAgICAgIGNvbC5zZXRfY2VsbF9kYXRhX2Z1bmMoY2VsbCwgc2VsZi5kaXNwbGF5X2JpbmJfY2IsIGNvbHVtblsnY29sX2lkJ10pCisgICAgICAgICAgICAgICAgaWYgJ2NvbF90X2lkJyBpbiBjb2x1bW4ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZShjZWxsLCAnZm9udCcsIGNvbHVtblsnY29sX3RfaWQnXSkKKworICAgICAgICBzZWxmLnNjcm9sbCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNlbGYuc2Nyb2xsLnNldF9wb2xpY3koZ3RrLlBPTElDWV9ORVZFUiwgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNlbGYuc2Nyb2xsLmFkZChzZWxmLnRhYmxlX3RyZWUpCisKKyAgICAgICAgc2VsZi5wYWNrX2VuZChzZWxmLnNjcm9sbCwgVHJ1ZSwgVHJ1ZSwgMCkKKworICAgIGRlZiBhZGRfbm9fcmVzdWx0X2JhcihzZWxmLCBlbnRyeSk6CisgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLktIQUtJCisgICAgICAgIHNlbGYudG9wX2JhciA9IGd0ay5FdmVudEJveCgpCisgICAgICAgIHNlbGYudG9wX2Jhci5zZXRfc2l6ZV9yZXF1ZXN0KC0xLCA3MCkKKyAgICAgICAgc2VsZi50b3BfYmFyLm1vZGlmeV9iZyhndGsuU1RBVEVfTk9STUFMLCBndGsuZ2RrLmNvbG9yX3BhcnNlKGNvbG9yKSkKKyAgICAgICAgc2VsZi50b3BfYmFyLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIHNlbGYudG9wX2Jhci5ncmFiX2RlZmF1bHQoKQorCisgICAgICAgIG5vX3Jlc3VsdF90YWIgPSBndGsuVGFibGUoNSwgMjAsIFRydWUpCisgICAgICAgIHNlbGYudG9wX2Jhci5hZGQobm9fcmVzdWx0X3RhYikKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIHRpdGxlID0gIk5vIHJlc3VsdHMgbWF0Y2hpbmcgeW91ciBzZWFyY2giCisgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgdGl0bGUpCisgICAgICAgIG5vX3Jlc3VsdF90YWIuYXR0YWNoKGxhYmVsLCAxLCAxNCwgMSwgNCkKKworICAgICAgICBjbGVhcl9idXR0b24gPSBIb2JCdXR0b24oIkNsZWFyIHNlYXJjaCIpCisgICAgICAgIGNsZWFyX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDbGVhciBzZWFyY2ggcXVlcnkiKQorICAgICAgICBjbGVhcl9idXR0b24uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYiwgZW50cnkpCisgICAgICAgIG5vX3Jlc3VsdF90YWIuYXR0YWNoKGNsZWFyX2J1dHRvbiwgMTYsIDE5LCAxLCA0KQorCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLnRvcF9iYXIsIEZhbHNlLCBUcnVlLCAxMikKKyAgICAgICAgc2VsZi50b3BfYmFyLnNob3dfYWxsKCkKKworICAgIGRlZiBzZXRfc2VhcmNoX2VudHJ5X2NsZWFyX2NiKHNlbGYsIGJ1dHRvbiwgc2VhcmNoKToKKyAgICAgICAgaWYgc2VhcmNoLmdldF9lZGl0YWJsZSgpID09IFRydWU6CisgICAgICAgICAgICBzZWFyY2guc2V0X3RleHQoIiIpCisgICAgICAgIHNlYXJjaC5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBGYWxzZSkKKyAgICAgICAgc2VhcmNoLmdyYWJfZm9jdXMoKQorCisgICAgZGVmIGRpc3BsYXlfYmluYl9jYihzZWxmLCBjb2wsIGNlbGwsIG1vZGVsLCBpdCwgY29sX2lkKToKKyAgICAgICAgYmluYiA9ICBtb2RlbC5nZXRfdmFsdWUoaXQsIGNvbF9pZCkKKyAgICAgICAgIyBKdXN0IGRpc3BsYXkgdGhlIGZpcnN0IGl0ZW0KKyAgICAgICAgaWYgYmluYjoKKyAgICAgICAgICAgIGJpbiA9IGJpbmIuc3BsaXQoJywgJykKKyAgICAgICAgICAgIHRvdGFsX25vID0gbGVuKGJpbikKKyAgICAgICAgICAgIGlmIHRvdGFsX25vID4gMSBhbmQgYmluWzBdID09ICJVc2VyIFNlbGVjdGVkIjoKKyAgICAgICAgICAgICAgICBpZiB0b3RhbF9ubyA+IDI6CisgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfYmluYiA9IGJpblsxXSArICcgKCsnICsgc3RyKHRvdGFsX25vIC0gMSkgKyAnKScKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgdG90YWxfbm8gPiAxOgorICAgICAgICAgICAgICAgICAgICBwcmVzZW50X2JpbmIgPSBiaW5bMF0gKyAnICgrJyArIHN0cih0b3RhbF9ubyAtIDEpICsgJyknCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJlc2VudF9iaW5iID0gYmluWzBdCisgICAgICAgICAgICBjZWxsLnNldF9wcm9wZXJ0eSgndGV4dCcsIHByZXNlbnRfYmluYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNlbGwuc2V0X3Byb3BlcnR5KCd0ZXh0JywgIiIpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2V0X21vZGVsKHNlbGYsIHRyZWVfbW9kZWwpOgorICAgICAgICBzZWxmLnRhYmxlX3RyZWUuc2V0X21vZGVsKHRyZWVfbW9kZWwpCisKKyAgICBkZWYgdG9nZ2xlX2RlZmF1bHQoc2VsZik6CisgICAgICAgIG1vZGVsID0gc2VsZi50YWJsZV90cmVlLmdldF9tb2RlbCgpCisgICAgICAgIGlmIG5vdCBtb2RlbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpdGVyID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICBpZiBpdGVyOgorICAgICAgICAgICAgcm93cGF0aCA9IG1vZGVsLmdldF9wYXRoKGl0ZXIpCisgICAgICAgICAgICBtb2RlbFtyb3dwYXRoXVtzZWxmLnRvZ2dsZV9pZF0gPSBUcnVlCisKKyAgICBkZWYgdG9nZ2xlZF9jYihzZWxmLCBjZWxsLCBwYXRoLCBjb2x1bW5pZCwgdHJlZSk6CisgICAgICAgIHNlbGYuZW1pdCgidG9nZ2xlZCIsIGNlbGwsIHBhdGgsIGNvbHVtbmlkLCB0cmVlKQorCisgICAgZGVmIHJvd19hY3RpdmF0ZWRfY2Ioc2VsZiwgdHJlZSwgcGF0aCwgdmlld19jb2x1bW4pOgorICAgICAgICBpZiBub3Qgdmlld19jb2x1bW4uZ2V0X3RpdGxlKCkgaW4gc2VsZi50b2dnbGVfY29sdW1uczoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgicm93LWFjdGl2YXRlZCIsIHRyZWUuZ2V0X21vZGVsKCksIHBhdGgpCisKKyAgICBkZWYgc3RvcF9jZWxsX2ZhZGVpbm91dF9jYihzZWxmLCBjdHJsLCBjZWxsLCB0cmVlKToKKyAgICAgICAgc2VsZi5lbWl0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgY3RybCwgY2VsbCwgdHJlZSkKKworICAgIGRlZiBzZXRfZ3JvdXBfbnVtYmVyX2NiKHNlbGYsIGNvbCwgY2VsbCwgbW9kZWwsIGl0ZXIpOgorICAgICAgICBpZiBtb2RlbCBhbmQgKG1vZGVsLml0ZXJfcGFyZW50KGl0ZXIpID09IE5vbmUpOgorICAgICAgICAgICAgY2VsbC5jZWxsX2F0dHJbIm51bWJlcl9vZl9jaGlsZHJlbiJdID0gbW9kZWwuaXRlcl9uX2NoaWxkcmVuKGl0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZWxsLmNlbGxfYXR0clsibnVtYmVyX29mX2NoaWxkcmVuIl0gPSAwCisKKyAgICBkZWYgY29ubmVjdF9ncm91cF9zZWxlY3Rpb24oc2VsZiwgY2JfZnVuYyk6CisgICAgICAgIHNlbGYudGFibGVfdHJlZS5nZXRfc2VsZWN0aW9uKCkuY29ubmVjdCgiY2hhbmdlZCIsIGNiX2Z1bmMpCisKKyIiIgorQSBtZXRob2QgdG8gY2FsY3VsYXRlIGEgc29mdGVuZWQgdmFsdWUgZm9yIHRoZSBjb2xvdXIgb2Ygd2lkZ2V0IHdoZW4gaW4gdGhlCitwcm92aWRlZCBzdGF0ZS4KKword2lkZ2V0OiB0aGUgd2lkZ2V0IHdob3NlIHN0eWxlIHRvIHVzZQorc3RhdGU6IHRoZSBzdGF0ZSBvZiB0aGUgd2lkZ2V0IHRvIHVzZSB0aGUgc3R5bGUgZm9yCisKK1JldHVybnMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzb2Z0ZW5lZCBjb2xvdXIKKyIiIgorZGVmIHNvZnRlbl9jb2xvcih3aWRnZXQsIHN0YXRlPWd0ay5TVEFURV9OT1JNQUwpOgorICAgICMgdGhpcyBjb2xvdXIgbXVuZ2luZyByb3V0aW5lIGlzIGhlYXZpbHkgaW5zcGlyZWQgYnUgZ2R1X3V0aWxfZ2V0X21peF9jb2xvcigpCisgICAgIyBmcm9tIGdub21lLWRpc2stdXRpbGl0eToKKyAgICAjIGh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbm9tZS1kaXNrLXV0aWxpdHkvdHJlZS9zcmMvZ2R1LWd0ay9nZHUtZ3RrLmM/aD1nbm9tZS0zLTAKKyAgICBibGVuZCA9IDAuNworICAgIHN0eWxlID0gd2lkZ2V0LmdldF9zdHlsZSgpCisgICAgY29sb3IgPSBzdHlsZS50ZXh0W3N0YXRlXQorICAgIGNvbG9yLnJlZCA9IGNvbG9yLnJlZCAqIGJsZW5kICsgc3R5bGUuYmFzZVtzdGF0ZV0ucmVkICogKDEuMCAtIGJsZW5kKQorICAgIGNvbG9yLmdyZWVuID0gY29sb3IuZ3JlZW4gKiBibGVuZCArIHN0eWxlLmJhc2Vbc3RhdGVdLmdyZWVuICogKDEuMCAtIGJsZW5kKQorICAgIGNvbG9yLmJsdWUgPSBjb2xvci5ibHVlICogYmxlbmQgKyBzdHlsZS5iYXNlW3N0YXRlXS5ibHVlICogKDEuMCAtIGJsZW5kKQorICAgIHJldHVybiBjb2xvci50b19zdHJpbmcoKQorCitjbGFzcyBCYXNlSG9iQnV0dG9uKGd0ay5CdXR0b24pOgorICAgICIiIgorICAgIEEgZ3RrLkJ1dHRvbiBzdWJjbGFzcyB3aGljaCBmb2xsb3dzIHRoZSB2aXN1YWwgZGVzaWduIG9mIEhvYiBmb3IgcHJpbWFyeQorICAgIGFjdGlvbiBidXR0b25zCisKKyAgICBsYWJlbDogdGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgYnV0dG9uJ3MgbGFiZWwKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgorICAgICAgICBndGsuQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0eWxlX2J1dHRvbihidXR0b24pOgorICAgICAgICBzdHlsZSA9IGJ1dHRvbi5nZXRfc3R5bGUoKQorICAgICAgICBzdHlsZSA9IGd0ay5yY19nZXRfc3R5bGVfYnlfcGF0aHMoZ3RrLnNldHRpbmdzX2dldF9kZWZhdWx0KCksICdndGstYnV0dG9uJywgJ2d0ay1idXR0b24nLCBnb2JqZWN0LlRZUEVfTk9ORSkKKworICAgICAgICBidXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgYnV0dG9uLmdyYWJfZGVmYXVsdCgpCisKKyMgICAgICAgIGxhYmVsID0gIjxzcGFuIHNpemU9J3gtbGFyZ2UnPjxiPiVzPC9iPjwvc3Bhbj4iICUgZ29iamVjdC5tYXJrdXBfZXNjYXBlX3RleHQoYnV0dG9uLmdldF9sYWJlbCgpKQorICAgICAgICBsYWJlbCA9IGJ1dHRvbi5nZXRfbGFiZWwoKQorICAgICAgICBidXR0b24uc2V0X2xhYmVsKGxhYmVsKQorICAgICAgICBidXR0b24uY2hpbGQuc2V0X3VzZV9tYXJrdXAoVHJ1ZSkKKworY2xhc3MgSG9iQnV0dG9uKEJhc2VIb2JCdXR0b24pOgorICAgICIiIgorICAgIEEgZ3RrLkJ1dHRvbiBzdWJjbGFzcyB3aGljaCBmb2xsb3dzIHRoZSB2aXN1YWwgZGVzaWduIG9mIEhvYiBmb3IgcHJpbWFyeQorICAgIGFjdGlvbiBidXR0b25zCisKKyAgICBsYWJlbDogdGhlIHRleHQgdG8gZGlzcGxheSBhcyB0aGUgYnV0dG9uJ3MgbGFiZWwKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgorICAgICAgICBCYXNlSG9iQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQorICAgICAgICBIb2JCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCisKK2NsYXNzIEhvYkFsdEJ1dHRvbihCYXNlSG9iQnV0dG9uKToKKyAgICAiIiIKKyAgICBBIGd0ay5CdXR0b24gc3ViY2xhc3Mgd2hpY2ggaGFzIG5vIHJlbGllZiwgYW5kIHNvIGlzIG1vcmUgZGlzY3JldGUKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwpOgorICAgICAgICBCYXNlSG9iQnV0dG9uLl9faW5pdF9fKHNlbGYsIGxhYmVsKQorICAgICAgICBIb2JBbHRCdXR0b24uc3R5bGVfYnV0dG9uKHNlbGYpCisKKyAgICAiIiIKKyAgICBBIGNhbGxiYWNrIGZvciB0aGUgc3RhdGUtY2hhbmdlZCBldmVudCB0byBlbnN1cmUgdGhlIHRleHQgaXMgZGlzcGxheWVkCisgICAgZGlmZmVyZW50bHkgd2hlbiB0aGUgd2lkZ2V0IGlzIG5vdCBzZW5zaXRpdmUKKyAgICAiIiIKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGRlc2Vuc2l0aXNlX29uX3N0YXRlX2NoYW5nZV9jYihidXR0b24sIHN0YXRlKToKKyAgICAgICAgaWYgbm90IGJ1dHRvbi5nZXRfcHJvcGVydHkoInNlbnNpdGl2ZSIpOgorICAgICAgICAgICAgSG9iQWx0QnV0dG9uLnNldF90ZXh0KGJ1dHRvbiwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBIb2JBbHRCdXR0b24uc2V0X3RleHQoYnV0dG9uLCBUcnVlKQorCisgICAgIiIiCisgICAgU2V0IHRoZSBidXR0b24gbGFiZWwgd2l0aCBhbiBhcHByb3ByaWF0ZSBjb2xvdXIgZm9yIHRoZSBjdXJyZW50IHdpZGdldCBzdGF0ZQorICAgICIiIgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2V0X3RleHQoYnV0dG9uLCBzZW5zaXRpdmU9VHJ1ZSk6CisgICAgICAgIGlmIHNlbnNpdGl2ZToKKyAgICAgICAgICAgIGNvbG91ciA9IEhvYkNvbG9ycy5QQUxFX0JMVUUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbG91ciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZCisgICAgICAgIGJ1dHRvbi5zZXRfbGFiZWwoIjxzcGFuIHNpemU9J2xhcmdlJyBjb2xvcj0nJXMnPjxiPiVzPC9iPjwvc3Bhbj4iICUgKGNvbG91ciwgZ29iamVjdC5tYXJrdXBfZXNjYXBlX3RleHQoYnV0dG9uLnRleHQpKSkKKyAgICAgICAgYnV0dG9uLmNoaWxkLnNldF91c2VfbWFya3VwKFRydWUpCisKK2NsYXNzIEhvYkltYWdlQnV0dG9uKGd0ay5CdXR0b24pOgorICAgICIiIgorICAgIEEgZ3RrLkJ1dHRvbiB3aXRoIGFuIGljb24gYW5kIHR3byByb3dzIG9mIHRleHQsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaXMKKyAgICBkaXNwbGF5ZWQgaW4gYSBibGVuZGVkIGNvbG91ci4KKworICAgIHByaW1hcnlfdGV4dDogdGhlIG1haW4gYnV0dG9uIGxhYmVsCisgICAgc2Vjb25kYXJ5X3RleHQ6IG9wdGlvbmFsIHNlY29uZCBsaW5lIG9mIHRleHQKKyAgICBpY29uX3BhdGg6IHBhdGggdG8gdGhlIGljb24gZmlsZSB0byBkaXNwbGF5IG9uIHRoZSBidXR0b24KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbWFyeV90ZXh0LCBzZWNvbmRhcnlfdGV4dD0iIiwgaWNvbl9wYXRoPSIiLCBob3Zlcl9pY29uX3BhdGg9IiIpOgorICAgICAgICBndGsuQnV0dG9uLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3JlbGllZihndGsuUkVMSUVGX05PTkUpCisKKyAgICAgICAgc2VsZi5pY29uX3BhdGggPSBpY29uX3BhdGgKKyAgICAgICAgc2VsZi5ob3Zlcl9pY29uX3BhdGggPSBob3Zlcl9pY29uX3BhdGgKKworICAgICAgICBoYm94ID0gZ3RrLkhCb3goRmFsc2UsIDEwKQorICAgICAgICBoYm94LnNob3coKQorICAgICAgICBzZWxmLmFkZChoYm94KQorICAgICAgICBzZWxmLmljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmljb25fcGF0aCkKKyAgICAgICAgc2VsZi5pY29uLnNldF9hbGlnbm1lbnQoMC41LCAwLjApCisgICAgICAgIHNlbGYuaWNvbi5zaG93KCkKKyAgICAgICAgaWYgc2VsZi5ob3Zlcl9pY29uX3BhdGggYW5kIGxlbihzZWxmLmhvdmVyX2ljb25fcGF0aCk6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoImVudGVyLW5vdGlmeS1ldmVudCIsIHNlbGYuc2V0X2hvdmVyX2ljb25fY2IpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYuc2V0X2ljb25fY2IpCisgICAgICAgIGhib3gucGFja19zdGFydChzZWxmLmljb24sIEZhbHNlLCBGYWxzZSwgMCkKKyAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBsYWJlbC5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBjb2xvdXIgPSBzb2Z0ZW5fY29sb3IobGFiZWwpCisgICAgICAgIG1hcmsgPSAiPHNwYW4gc2l6ZT0neC1sYXJnZSc+JXM8L3NwYW4+XG48c3BhbiBzaXplPSdtZWRpdW0nIGZnY29sb3I9JyVzJyB3ZWlnaHQ9J3VsdHJhbGlnaHQnPiVzPC9zcGFuPiIgJSAocHJpbWFyeV90ZXh0LCBjb2xvdXIsIHNlY29uZGFyeV90ZXh0KQorICAgICAgICBsYWJlbC5zZXRfbWFya3VwKG1hcmspCisgICAgICAgIGxhYmVsLnNob3coKQorICAgICAgICBoYm94LnBhY2tfc3RhcnQobGFiZWwsIFRydWUsIFRydWUsIDApCisKKyAgICBkZWYgc2V0X2hvdmVyX2ljb25fY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHNlbGYuaWNvbi5zZXRfZnJvbV9maWxlKHNlbGYuaG92ZXJfaWNvbl9wYXRoKQorCisgICAgZGVmIHNldF9pY29uX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBzZWxmLmljb24uc2V0X2Zyb21fZmlsZShzZWxmLmljb25fcGF0aCkKKworY2xhc3MgSG9iSW5mb0J1dHRvbihndGsuRXZlbnRCb3gpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGJ1dHRvbi1saWtlIHdpZGdldCBwZXIgdGhlIEhvYiB2aXN1YWwgYW5kIFVYIGRlc2lnbnMKKyAgICB3aGljaCB3aWxsIGRpc3BsYXkgYSBwZXJzaXN0ZW50IHRvb2x0aXAsIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRpcF9tYXJrdXAsIHdoZW4KKyAgICBjbGlja2VkLgorCisgICAgdGlwX21hcmt1cDogdGhlIFBhbmdvIE1hcmt1cCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBlcnNpc3RlbnQgdG9vbHRpcAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXBfbWFya3VwLCBwYXJlbnQ9Tm9uZSk6CisgICAgICAgIGd0ay5FdmVudEJveC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmltYWdlID0gZ3RrLkltYWdlKCkKKyAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKAorICAgICAgICBoaWMuSUNPTl9JTkZPX0RJU1BMQVlfRklMRSkKKyAgICAgICAgc2VsZi5pbWFnZS5zaG93KCkKKyAgICAgICAgc2VsZi5hZGQoc2VsZi5pbWFnZSkKKyAgICAgICAgc2VsZi50aXBfbWFya3VwID0gdGlwX21hcmt1cAorICAgICAgICBzZWxmLm15X3BhcmVudCA9IHBhcmVudAorCisgICAgICAgIHNlbGYuc2V0X2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9SRUxFQVNFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGd0ay5nZGsuRU5URVJfTk9USUZZX01BU0sgfAorICAgICAgICAgICAgICAgICAgICAgICAgZ3RrLmdkay5MRUFWRV9OT1RJRllfTUFTSykKKworICAgICAgICBzZWxmLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5idXR0b25fcmVsZWFzZV9jYikKKyAgICAgICAgc2VsZi5jb25uZWN0KCJlbnRlci1ub3RpZnktZXZlbnQiLCBzZWxmLm1vdXNlX2luX2NiKQorICAgICAgICBzZWxmLmNvbm5lY3QoImxlYXZlLW5vdGlmeS1ldmVudCIsIHNlbGYubW91c2Vfb3V0X2NiKQorCisgICAgIiIiCisgICAgV2hlbiB0aGUgbW91c2UgY2xpY2sgaXMgcmVsZWFzZWQgZW11bGF0ZSBhIGJ1dHRvbi1jbGljayBhbmQgc2hvdyB0aGUgYXNzb2NpYXRlZAorICAgIFBlcnNpc3RlbnRUb29sdGlwCisgICAgIiIiCisgICAgZGVmIGJ1dHRvbl9yZWxlYXNlX2NiKHNlbGYsIHdpZGdldCwgZXZlbnQpOgorICAgICAgICBmcm9tIGJiLnVpLmNydW1icy5oaWcucHJvcGVydHlkaWFsb2cgaW1wb3J0IFByb3BlcnR5RGlhbG9nCisgICAgICAgIHNlbGYuZGlhbG9nID0gUHJvcGVydHlEaWFsb2codGl0bGUgPSAnJywKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5teV9wYXJlbnQsCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uID0gc2VsZi50aXBfbWFya3VwLAorICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgfCBndGsuRElBTE9HX05PX1NFUEFSQVRPUikKKworICAgICAgICBidXR0b24gPSBzZWxmLmRpYWxvZy5hZGRfYnV0dG9uKCJDbG9zZSIsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisgICAgICAgIEhvYkFsdEJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorICAgICAgICBidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIGxhbWJkYSB3OiBzZWxmLmRpYWxvZy5kZXN0cm95KCkpCisgICAgICAgIHNlbGYuZGlhbG9nLnNob3dfYWxsKCkKKyAgICAgICAgc2VsZi5kaWFsb2cucnVuKCkKKworICAgICIiIgorICAgIENoYW5nZSB0byB0aGUgcHJlbGlnaHQgaW1hZ2Ugd2hlbiB0aGUgbW91c2UgZW50ZXJzIHRoZSB3aWRnZXQKKyAgICAiIiIKKyAgICBkZWYgbW91c2VfaW5fY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIHNlbGYuaW1hZ2Uuc2V0X2Zyb21fZmlsZShoaWMuSUNPTl9JTkZPX0hPVkVSX0ZJTEUpCisKKyAgICAiIiIKKyAgICBDaGFuZ2UgdG8gdGhlIHN0b2NrIGltYWdlIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgd2lkZ2V0CisgICAgIiIiCisgICAgZGVmIG1vdXNlX291dF9jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgc2VsZi5pbWFnZS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fRElTUExBWV9GSUxFKQorCitjbGFzcyBIb2JJbmRpY2F0b3IoZ3RrLkRyYXdpbmdBcmVhKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY291bnQpOgorICAgICAgICBndGsuRHJhd2luZ0FyZWEuX19pbml0X18oc2VsZikKKyAgICAgICAgIyBTZXQgbm8gd2luZG93IGZvciB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kCisgICAgICAgIHNlbGYuc2V0X2hhc193aW5kb3coRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X3NpemVfcmVxdWVzdCgzOCwzOCkKKyAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgdGhyb3VnaCBidXR0b24gY2xpY2tzCisgICAgICAgIHNlbGYuYWRkX2V2ZW50cyhndGsuZ2RrLkJVVFRPTl9QUkVTU19NQVNLIHwgZ3RrLmdkay5CVVRUT05fUkVMRUFTRV9NQVNLKQorCisgICAgICAgIHNlbGYuY29ubmVjdCgnZXhwb3NlLWV2ZW50Jywgc2VsZi5leHBvc2UpCisKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisgICAgICAgIHNlbGYuY29sb3IgPSBIb2JDb2xvcnMuR1JBWQorCisgICAgZGVmIGV4cG9zZShzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgaWYgc2VsZi5jb3VudCBhbmQgc2VsZi5jb3VudCA+IDA6CisgICAgICAgICAgICBjdHggPSB3aWRnZXQud2luZG93LmNhaXJvX2NyZWF0ZSgpCisKKyAgICAgICAgICAgIHgsIHksIHcsIGggPSBzZWxmLmFsbG9jYXRpb24KKworICAgICAgICAgICAgY3R4LnNldF9vcGVyYXRvcihjYWlyby5PUEVSQVRPUl9PVkVSKQorICAgICAgICAgICAgY3R4LnNldF9zb3VyY2VfY29sb3IoZ3RrLmdkay5jb2xvcl9wYXJzZShzZWxmLmNvbG9yKSkKKyAgICAgICAgICAgIGN0eC50cmFuc2xhdGUody8yLCBoLzIpCisgICAgICAgICAgICBjdHguYXJjKHgsIHksIG1pbih3LGgpLzIgLSAyLCAwLCAyKm1hdGgucGkpCisgICAgICAgICAgICBjdHguZmlsbF9wcmVzZXJ2ZSgpCisKKyAgICAgICAgICAgIGxheW91dCA9IHNlbGYuY3JlYXRlX3BhbmdvX2xheW91dChzdHIoc2VsZi5jb3VudCkpCisgICAgICAgICAgICB0ZXh0dywgdGV4dGggPSBsYXlvdXQuZ2V0X3BpeGVsX3NpemUoKQorICAgICAgICAgICAgeCA9ICh3LzIpLSh0ZXh0dy8yKSArIHgKKyAgICAgICAgICAgIHkgPSAoaC8yKSAtICh0ZXh0aC8yKSArIHkKKyAgICAgICAgICAgIGN0eC5tb3ZlX3RvKHgsIHkpCisgICAgICAgICAgICBzZWxmLndpbmRvdy5kcmF3X2xheW91dChzZWxmLnN0eWxlLmxpZ2h0X2djW2d0ay5TVEFURV9OT1JNQUxdLCBpbnQoeCksIGludCh5KSwgbGF5b3V0KQorCisgICAgZGVmIHNldF9jb3VudChzZWxmLCBjb3VudCk6CisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorCisgICAgZGVmIHNldF9hY3RpdmUoc2VsZiwgYWN0aXZlKToKKyAgICAgICAgaWYgYWN0aXZlOgorICAgICAgICAgICAgc2VsZi5jb2xvciA9IEhvYkNvbG9ycy5ERUVQX1JFRAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb2xvciA9IEhvYkNvbG9ycy5HUkFZCisKK2NsYXNzIEhvYlRhYkxhYmVsKGd0ay5IQm94KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgY291bnQ9MCk6CisgICAgICAgIGd0ay5IQm94Ll9faW5pdF9fKHNlbGYsIEZhbHNlLCAwKQorICAgICAgICBzZWxmLmluZGljYXRvciA9IEhvYkluZGljYXRvcihjb3VudCkKKyAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2hvdygpCisgICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5pbmRpY2F0b3IsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5sYmwgPSBndGsuTGFiZWwodGV4dCkKKyAgICAgICAgc2VsZi5sYmwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgc2VsZi5sYmwuc2hvdygpCisgICAgICAgIHNlbGYucGFja19lbmQoc2VsZi5sYmwsIFRydWUsIFRydWUsIDYpCisKKyAgICBkZWYgc2V0X2NvdW50KHNlbGYsIGNvdW50KToKKyAgICAgICAgc2VsZi5pbmRpY2F0b3Iuc2V0X2NvdW50KGNvdW50KQorCisgICAgZGVmIHNldF9hY3RpdmUoc2VsZiwgYWN0aXZlPVRydWUpOgorICAgICAgICBzZWxmLmluZGljYXRvci5zZXRfYWN0aXZlKGFjdGl2ZSkKKworY2xhc3MgSG9iTm90ZWJvb2soZ3RrLk5vdGVib29rKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5Ob3RlYm9vay5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgnaG9tb2dlbmVvdXMnLCBUcnVlKQorCisgICAgICAgIHNlbGYucGFnZXMgPSBbXQorCisgICAgICAgIHNlbGYuc2VhcmNoID0gTm9uZQorICAgICAgICBzZWxmLnNlYXJjaF9mb2N1cyA9IEZhbHNlCisgICAgICAgIHNlbGYucGFnZV9jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICBzZWxmLmNvbm5lY3QoInN3aXRjaC1wYWdlIiwgc2VsZi5wYWdlX2NoYW5nZWRfY2IpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgcGFnZV9jaGFuZ2VkX2NiKHNlbGYsIG5iLCBwYWdlLCBwYWdlX251bSk6CisgICAgICAgIGZvciBwLCBsYmwgaW4gZW51bWVyYXRlKHNlbGYucGFnZXMpOgorICAgICAgICAgICAgaWYgcCA9PSBwYWdlX251bToKKyAgICAgICAgICAgICAgICBsYmwuc2V0X2FjdGl2ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxibC5zZXRfYWN0aXZlKEZhbHNlKQorCisgICAgICAgIGlmIHNlbGYuc2VhcmNoOgorICAgICAgICAgICAgc2VsZi5wYWdlX2NoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnJlc2V0X2VudHJ5KHNlbGYuc2VhcmNoLCBwYWdlX251bSkKKworICAgIGRlZiBhcHBlbmRfcGFnZShzZWxmLCBjaGlsZCwgdGFiX2xhYmVsLCB0YWJfdG9vbHRpcD1Ob25lKToKKyAgICAgICAgbGFiZWwgPSBIb2JUYWJMYWJlbCh0YWJfbGFiZWwpCisgICAgICAgIGlmIHRhYl90b29sdGlwOgorICAgICAgICAgICAgbGFiZWwuc2V0X3Rvb2x0aXBfdGV4dCh0YWJfdG9vbHRpcCkKKyAgICAgICAgbGFiZWwuc2V0X2FjdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZi5wYWdlcy5hcHBlbmQobGFiZWwpCisgICAgICAgIGd0ay5Ob3RlYm9vay5hcHBlbmRfcGFnZShzZWxmLCBjaGlsZCwgbGFiZWwpCisKKyAgICBkZWYgc2V0X2VudHJ5KHNlbGYsIG5hbWVzLCB0aXBzKToKKyAgICAgICAgc2VsZi5zZWFyY2ggPSBndGsuRW50cnkoKQorICAgICAgICBzZWxmLnNlYXJjaF9uYW1lcyA9IG5hbWVzCisgICAgICAgIHNlbGYuc2VhcmNoX3RpcHMgPSB0aXBzCisgICAgICAgIHN0eWxlID0gc2VsZi5zZWFyY2guZ2V0X3N0eWxlKCkKKyAgICAgICAgc3R5bGUudGV4dFtndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkdSQVksIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICBzZWxmLnNlYXJjaC5zZXRfdGV4dChuYW1lc1swXSkKKyAgICAgICAgc2VsZi5zZWFyY2guc2V0X3Rvb2x0aXBfdGV4dChzZWxmLnNlYXJjaF90aXBzWzBdKQorICAgICAgICBzZWxmLnNlYXJjaC5wcm9wcy5oYXNfdG9vbHRpcCA9IFRydWUKKworICAgICAgICBzZWxmLnNlYXJjaC5zZXRfZWRpdGFibGUoRmFsc2UpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF9pY29uX2Zyb21fc3RvY2soZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBndGsuU1RPQ0tfQ0xFQVIpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF9pY29uX3NlbnNpdGl2ZShndGsuRU5UUllfSUNPTl9TRUNPTkRBUlksIEZhbHNlKQorICAgICAgICBzZWxmLnNlYXJjaC5jb25uZWN0KCJpY29uLXJlbGVhc2UiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfY2xlYXJfY2IpCisgICAgICAgIHNlbGYuc2VhcmNoLnNldF93aWR0aF9jaGFycygzMCkKKyAgICAgICAgc2VsZi5zZWFyY2guc2hvdygpCisKKyAgICAgICAgc2VsZi5zZWFyY2guY29ubmVjdCgiZm9jdXMtaW4tZXZlbnQiLCBzZWxmLnNldF9zZWFyY2hfZW50cnlfZWRpdGFibGVfY2IpCisgICAgICAgIHNlbGYuc2VhcmNoLmNvbm5lY3QoImZvY3VzLW91dC1ldmVudCIsIHNlbGYuc2V0X3NlYXJjaF9lbnRyeV9yZXNldF9jYikKKyAgICAgICAgc2VsZi5zZXRfYWN0aW9uX3dpZGdldChzZWxmLnNlYXJjaCwgZ3RrLlBBQ0tfRU5EKQorCisgICAgZGVmIHNob3dfaW5kaWNhdG9yX2ljb24oc2VsZiwgdGl0bGUsIG51bWJlcik6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgorICAgICAgICAgICAgICAgIGNoaWxkLnNldF9jb3VudChudW1iZXIpCisKKyAgICBkZWYgaGlkZV9pbmRpY2F0b3JfaWNvbihzZWxmLCB0aXRsZSk6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgorICAgICAgICAgICAgICAgIGNoaWxkLnNldF9jb3VudCgwKQorCisgICAgZGVmIHNldF9zZWFyY2hfZW50cnlfZWRpdGFibGVfY2Ioc2VsZiwgc2VhcmNoLCBldmVudCk6CisgICAgICAgIHNlbGYuc2VhcmNoX2ZvY3VzID0gVHJ1ZQorICAgICAgICBzZWFyY2guc2V0X2VkaXRhYmxlKFRydWUpCisgICAgICAgIHRleHQgPSBzZWFyY2guZ2V0X3RleHQoKQorICAgICAgICBpZiB0ZXh0IGluIHNlbGYuc2VhcmNoX25hbWVzOgorICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQorICAgICAgICBzdHlsZSA9IHNlbGYuc2VhcmNoLmdldF9zdHlsZSgpCisgICAgICAgIHN0eWxlLnRleHRbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKEhvYkNvbG9ycy5CTEFDSywgRmFsc2UsIEZhbHNlKQorICAgICAgICBzZWFyY2guc2V0X3N0eWxlKHN0eWxlKQorCisgICAgZGVmIHNldF9zZWFyY2hfZW50cnlfcmVzZXRfY2Ioc2VsZiwgc2VhcmNoLCBldmVudCk6CisgICAgICAgIHBhZ2VfbnVtID0gc2VsZi5nZXRfY3VycmVudF9wYWdlKCkKKyAgICAgICAgdGV4dCA9IHNlYXJjaC5nZXRfdGV4dCgpCisgICAgICAgIGlmIG5vdCB0ZXh0OgorICAgICAgICAgICAgc2VsZi5yZXNldF9lbnRyeShzZWFyY2gsIHBhZ2VfbnVtKQorCisgICAgZGVmIHJlc2V0X2VudHJ5KHNlbGYsIGVudHJ5LCBwYWdlX251bSk6CisgICAgICAgIHN0eWxlID0gZW50cnkuZ2V0X3N0eWxlKCkKKyAgICAgICAgc3R5bGUudGV4dFtndGsuU1RBVEVfTk9STUFMXSA9IHNlbGYuZ2V0X2NvbG9ybWFwKCkuYWxsb2NfY29sb3IoSG9iQ29sb3JzLkdSQVksIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgZW50cnkuc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICBlbnRyeS5zZXRfdGV4dChzZWxmLnNlYXJjaF9uYW1lc1twYWdlX251bV0pCisgICAgICAgIGVudHJ5LnNldF90b29sdGlwX3RleHQoc2VsZi5zZWFyY2hfdGlwc1twYWdlX251bV0pCisgICAgICAgIGVudHJ5LnNldF9lZGl0YWJsZShGYWxzZSkKKyAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisKKyAgICBkZWYgc2V0X3NlYXJjaF9lbnRyeV9jbGVhcl9jYihzZWxmLCBzZWFyY2gsIGljb25fcG9zLCBldmVudCk6CisgICAgICAgIGlmIHNlYXJjaC5nZXRfZWRpdGFibGUoKSA9PSBUcnVlOgorICAgICAgICAgICAgc2VhcmNoLnNldF90ZXh0KCIiKQorICAgICAgICBzZWFyY2guc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIHNlYXJjaC5ncmFiX2ZvY3VzKCkKKworICAgIGRlZiBzZXRfcGFnZShzZWxmLCB0aXRsZSk6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgaWYgY2hpbGQubGJsLmdldF9sYWJlbCgpID09IHRpdGxlOgorICAgICAgICAgICAgICAgIGNoaWxkLmdyYWJfZm9jdXMoKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2N1cnJlbnRfcGFnZShzZWxmLnBhZ2VzLmluZGV4KGNoaWxkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworY2xhc3MgSG9iV2FycENlbGxSZW5kZXJlclRleHQoZ3RrLkNlbGxSZW5kZXJlclRleHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2xfbnVtYmVyKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclRleHQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfcHJvcGVydHkoIndyYXAtbW9kZSIsIHBhbmdvLldSQVBfV09SRF9DSEFSKQorICAgICAgICBzZWxmLnNldF9wcm9wZXJ0eSgid3JhcC13aWR0aCIsIDMwMCkgIyBkZWZhdWx0IHZhbHVlIHdyYXAgd2lkdGggaXMgMzAwCisgICAgICAgIHNlbGYuY29sX24gPSBjb2xfbnVtYmVyCisKKyAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKKyAgICAgICAgaWYgd2lkZ2V0OgorICAgICAgICAgICAgc2VsZi5wcm9wcy53cmFwX3dpZHRoID0gc2VsZi5nZXRfcmVzaXplZF93cmFwX3dpZHRoKHdpZGdldCwgd2lkZ2V0LmdldF9jb2x1bW4oc2VsZi5jb2xfbikpCisgICAgICAgIHJldHVybiBndGsuQ2VsbFJlbmRlcmVyVGV4dC5kb19yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpCisKKyAgICBkZWYgZ2V0X3Jlc2l6ZWRfd3JhcF93aWR0aChzZWxmLCB0cmVldmlldywgY29sdW1uKToKKyAgICAgICAgb3RoZXJDb2xzID0gW10KKyAgICAgICAgZm9yIGNvbCBpbiB0cmVldmlldy5nZXRfY29sdW1ucygpOgorICAgICAgICAgICAgaWYgY29sICE9IGNvbHVtbjoKKyAgICAgICAgICAgICAgICBvdGhlckNvbHMuYXBwZW5kKGNvbCkKKyAgICAgICAgYWRqd2lkdGggPSB0cmVldmlldy5hbGxvY2F0aW9uLndpZHRoIC0gc3VtKGMuZ2V0X3dpZHRoKCkgZm9yIGMgaW4gb3RoZXJDb2xzKQorICAgICAgICBhZGp3aWR0aCAtPSB0cmVldmlldy5zdHlsZV9nZXRfcHJvcGVydHkoImhvcml6b250YWwtc2VwYXJhdG9yIikgKiA0CisgICAgICAgIGlmIHNlbGYucHJvcHMud3JhcF93aWR0aCA9PSBhZGp3aWR0aCBvciBhZGp3aWR0aCA8PSAwOgorICAgICAgICAgICAgICAgIGFkandpZHRoID0gc2VsZi5wcm9wcy53cmFwX3dpZHRoCisgICAgICAgIHJldHVybiBhZGp3aWR0aAorCitnb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iV2FycENlbGxSZW5kZXJlclRleHQpCisKK2NsYXNzIEhvYkljb25DaGVja2VyKGhpYyk6CisgICAgZGVmIHNldF9ob2JfaWNvbl90b19zdG9ja19pY29uKHNlbGYsIGZpbGVfcGF0aCwgc3RvY2tfaWQ9IiIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaXhidWYgPSBndGsuZ2RrLnBpeGJ1Zl9uZXdfZnJvbV9maWxlKGZpbGVfcGF0aCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgc3RvY2tfaWQgYW5kIChndGsuaWNvbl9mYWN0b3J5X2xvb2t1cF9kZWZhdWx0KHN0b2NrX2lkKSA9PSBOb25lKToKKyAgICAgICAgICAgIGljb25fZmFjdG9yeSA9IGd0ay5JY29uRmFjdG9yeSgpCisgICAgICAgICAgICBpY29uX2ZhY3RvcnkuYWRkX2RlZmF1bHQoKQorICAgICAgICAgICAgaWNvbl9mYWN0b3J5LmFkZChzdG9ja19pZCwgZ3RrLkljb25TZXQocGl4YnVmKSkKKyAgICAgICAgICAgIGd0ay5zdG9ja19hZGQoWyhzdG9ja19pZCwgJ19sYWJlbCcsIDAsIDAsICcnKV0pCisKKyAgICAgICAgICAgIHJldHVybiBpY29uX2ZhY3RvcnkubG9va3VwKHN0b2NrX2lkKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAiIiIKKyAgICBGb3IgbWFrZSBob2IgaWNvbiBjb25zaXN0ZW50bHkgYnkgcmVxdWVzdCwgYW5kIGF2b2lkIGljb24gdmlldyBkaWZmIGJ5IHN5c3RlbSBvciBndGsgdmVyc2lvbiwgd2UgdXNlIHNvbWUgJ2hvYiBpY29uJyB0byByZXBsYWNlIHRoZSAnZ3RrIGljb24nLgorICAgIHRoaXMgZnVuY3Rpb24gY2hlY2sgdGhlIHN0b2NrX2lkIGFuZCBtYWtlIGhvYl9pZCB0byByZXBsYWNlZCB0aGUgZ3RrX2lkIHRoZW4gcmV0dXJuIGl0IG9yICIiCisgICAgIiIiCisgICAgZGVmIGNoZWNrX3N0b2NrX2ljb24oc2VsZiwgc3RvY2tfbmFtZT0iIik6CisgICAgICAgIEhPQl9DSEVDS19TVE9DS19OQU1FID0geworICAgICAgICAgICAgKCdoaWMtZGlhbG9nLWluZm8nLCAnZ3RrLWRpYWxvZy1pbmZvJywgJ2RpYWxvZy1pbmZvJykgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfSU5GT19GSUxFLAorICAgICAgICAgICAgKCdoaWMtb2snLCAgICAgICAgICAnZ3RrLW9rJywgICAgICAgICAgICdvaycpICAgICAgICAgICAgICAgICAgIDogc2VsZi5JQ09OX0lORElfVElDS19GSUxFLAorICAgICAgICAgICAgKCdoaWMtZGlhbG9nLWVycm9yJywgJ2d0ay1kaWFsb2ctZXJyb3InLCAnZGlhbG9nLWVycm9yJykgICAgICAgIDogc2VsZi5JQ09OX0lORElfRVJST1JfRklMRSwKKyAgICAgICAgICAgICgnaGljLWRpYWxvZy13YXJuaW5nJywgJ2d0ay1kaWFsb2ctd2FybmluZycsICdkaWFsb2ctd2FybmluZycpICA6IHNlbGYuSUNPTl9JTkRJX0FMRVJUX0ZJTEUsCisgICAgICAgICAgICAoJ2hpYy10YXNrLXJlZnJlc2gnLCAnZ3RrLWV4ZWN1dGUnLCAnZXhlY3V0ZScpICAgICAgICAgICAgICAgICAgOiBzZWxmLklDT05fSU5ESV9SRUZSRVNIX0ZJTEUsCisgICAgICAgIH0KKyAgICAgICAgdmFsaWRfc3RvY2tfaWQgPSBzdG9ja19uYW1lCisgICAgICAgIGlmIHN0b2NrX25hbWU6CisgICAgICAgICAgICBmb3IgbmFtZXMsIHBhdGggaW4gSE9CX0NIRUNLX1NUT0NLX05BTUUuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgc3RvY2tfbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRfc3RvY2tfaWQgPSBuYW1lc1swXQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3RrLmljb25fZmFjdG9yeV9sb29rdXBfZGVmYXVsdCh2YWxpZF9zdG9ja19pZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9ob2JfaWNvbl90b19zdG9ja19pY29uKHBhdGgsIHZhbGlkX3N0b2NrX2lkKQorCisgICAgICAgIHJldHVybiB2YWxpZF9zdG9ja19pZAorCitjbGFzcyBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKGdvYmplY3QuR09iamVjdCk6CisgICAgKE1PREVfQ1lDTEVfUlVOTklORywgTU9ERV9PTkVfU0hPUlQpID0gcmFuZ2UoMikKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICJydW4tdGltZXItc3RvcHBlZCIgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgfQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nbW9kZT1NT0RFX0NZQ0xFX1JVTk5JTkcsIGlzX2RyYXdfcm93PUZhbHNlKToKKyAgICAgICAgZ29iamVjdC5HT2JqZWN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYudGltZW91dF9pZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IDAuMAorICAgICAgICBzZWxmLnN0ZXBfYW5nbGUgPSAwLjAKKyAgICAgICAgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0ID0gMAorICAgICAgICBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IFtdCisgICAgICAgIHNlbGYucnVubmluZ19tb2RlID0gcnVubmluZ21vZGUKKyAgICAgICAgc2VsZi5pc19xdWV1ZV9kcmF3X3Jvd19hcmVhID0gaXNfZHJhd19yb3cKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IEZhbHNlCisKKyAgICBkZWYgaXNfYWN0aXZlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnRpbWVvdXRfaWQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcmVzZXRfcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmZvcmNlX3N0b3AoKQorICAgICAgICBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhcyA9IFtdCisgICAgICAgIHNlbGYuY3VycmVudF9hbmdsZV9wb3MgPSAwLjAKKyAgICAgICAgc2VsZi5zdGVwX2FuZ2xlID0gMC4wCisKKyAgICAnJycgdGltZV9pdGVydmFsOiAoMX4xMDAwKW1zLCB3aGljaCB3aWxsIGJlIGFzIHRoZSBiYXNpYyBpbnRlcnZhbCBjb3VudCBmb3IgdGltZXIKKyAgICAgICAgaW5pdF91c3JkYXRhOiB0aGUgY3VycmVudCBkYXRhIHdoaWNoIHJlbGF0ZWQgdGhlIHByb2dyZXNzLWJhciB3aWxsIGJlIGF0CisgICAgICAgIG1pbl91c3JkYXRhOiB0aGUgcmFuZ2Ugb2YgbWluIG9mIHVzZXIgZGF0YQorICAgICAgICBtYXhfdXNyZGF0YTogdGhlIHJhbmdlIG9mIG1heCBvZiB1c2VyIGRhdGEKKyAgICAgICAgc3RlcDogZWFjaCBzdGVwIHdoaWNoIHlvdSB3YW50IHRvIHByb2dyZXNzCisgICAgICAgIE5vdGU6IHRoZSBpbml0X3VzcmRhdGEgc2hvdWxkIGluIHRoZSByYW5nZSBvZiBmcm9tIG1pbiB0byBtYXgsIGFuZCBtYXggc2hvdWxkID4gbWluCisgICAgICAgICAgICAgc3RlcCBzaG91bGQgPCAobWF4IC0gbWluKQorICAgICcnJworICAgIGRlZiBzdGFydF9ydW4oc2VsZiwgdGltZV9pdGVydmFsLCBpbml0X3VzcmRhdGEsIG1pbl91c3JkYXRhLCBtYXhfdXNyZGF0YSwgc3RlcCwgdHJlZSk6CisgICAgICAgIGlmIChub3QgdGltZV9pdGVydmFsKSBvciAobm90IG1heF91c3JkYXRhKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB1c3JfcmFuZ2UgPSAobWF4X3VzcmRhdGEgLSBtaW5fdXNyZGF0YSkgKiAxLjAKKyAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA9IChpbml0X3VzcmRhdGEgKiAxLjApIC8gdXNyX3JhbmdlCisgICAgICAgIHNlbGYuc3RlcF9hbmdsZSA9IChzdGVwICogMSkgLyB1c3JfcmFuZ2UKKyAgICAgICAgc2VsZi50aW1lb3V0X2lkID0gZ29iamVjdC50aW1lb3V0X2FkZChpbnQodGltZV9pdGVydmFsKSwKKyAgICAgICAgc2VsZi5tYWtlX2ltYWdlX29uX3Byb2dyZXNzaW5nX2NiLCB0cmVlKQorICAgICAgICBzZWxmLnRyZWVfaGVhZGVyc19oZWlnaHQgPSBzZWxmLmdldF90cmVldmlld19oZWFkZXJzX2hlaWdodCh0cmVlKQorICAgICAgICBzZWxmLmZvcmNlX3N0b3BfZW5hYmxlID0gRmFsc2UKKworICAgIGRlZiBmb3JjZV9zdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmVtaXQoInJ1bi10aW1lci1zdG9wcGVkIikKKyAgICAgICAgc2VsZi5mb3JjZV9zdG9wX2VuYWJsZSA9IFRydWUKKyAgICAgICAgaWYgc2VsZi50aW1lb3V0X2lkOgorICAgICAgICAgICAgaWYgZ29iamVjdC5zb3VyY2VfcmVtb3ZlKHNlbGYudGltZW91dF9pZCk6CisgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0X2lkID0gTm9uZQorCisgICAgZGVmIG9uX2RyYXdfcGl4YnVmX2NiKHNlbGYsIHBpeGJ1ZiwgY3IsIHgsIHksIGltZ193aWR0aCwgaW1nX2hlaWdodCwgZG9fcmVmcmVzaD1UcnVlKToKKyAgICAgICAgaWYgcGl4YnVmOgorICAgICAgICAgICAgciA9IG1heChpbWdfd2lkdGgvMiwgaW1nX2hlaWdodC8yKQorICAgICAgICAgICAgY3IudHJhbnNsYXRlKHggKyByLCB5ICsgcikKKyAgICAgICAgICAgIGlmIGRvX3JlZnJlc2g6CisgICAgICAgICAgICAgICAgY3Iucm90YXRlKDIgKiBtYXRoLnBpICogc2VsZi5jdXJyZW50X2FuZ2xlX3BvcykKKworICAgICAgICAgICAgY3Iuc2V0X3NvdXJjZV9waXhidWYocGl4YnVmLCAtaW1nX3dpZHRoLzIsIC1pbWdfaGVpZ2h0LzIpCisgICAgICAgICAgICBjci5wYWludCgpCisKKyAgICBkZWYgb25fZHJhd19mYWRlaW5vdXRfY2Ioc2VsZiwgY3IsIGNvbG9yLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkb19mYWRlb3V0PVRydWUpOgorICAgICAgICBpZiBkb19mYWRlb3V0OgorICAgICAgICAgICAgYWxwaGEgPSBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zICogMC44CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbHBoYSA9ICgxLjAgLSBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zKSAqIDAuOAorCisgICAgICAgIGNyLnNldF9zb3VyY2VfcmdiYShjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlLCBhbHBoYSkKKyAgICAgICAgY3IucmVjdGFuZ2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpCisgICAgICAgIGNyLmZpbGwoKQorCisgICAgZGVmIGdldF90cmVldmlld19oZWFkZXJzX2hlaWdodChzZWxmLCB0cmVlKToKKyAgICAgICAgaWYgdHJlZSBhbmQgKHRyZWUuZ2V0X3Byb3BlcnR5KCJoZWFkZXJzLXZpc2libGUiKSA9PSBUcnVlKToKKyAgICAgICAgICAgIGhlaWdodCA9IHRyZWUuZ2V0X2FsbG9jYXRpb24oKS5oZWlnaHQgLSB0cmVlLmdldF9iaW5fd2luZG93KCkuZ2V0X3NpemUoKVsxXQorICAgICAgICAgICAgcmV0dXJuIGhlaWdodAorCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgbWFrZV9pbWFnZV9vbl9wcm9ncmVzc2luZ19jYihzZWxmLCB0cmVlKToKKyAgICAgICAgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyArPSBzZWxmLnN0ZXBfYW5nbGUKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nX21vZGUgPT0gc2VsZi5NT0RFX0NZQ0xFX1JVTk5JTkc6CisgICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA+PSAxKToKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfYW5nbGVfcG9zID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50X2FuZ2xlX3BvcyA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5mb3JjZV9zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzZWxmLmlzX3F1ZXVlX2RyYXdfcm93X2FyZWE6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiBzZWxmLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgICAgICByZWN0ID0gdHJlZS5nZXRfY2VsbF9hcmVhKHBhdGgsIHRyZWUuZ2V0X2NvbHVtbigwKSkKKyAgICAgICAgICAgICAgICByb3dfeCwgXywgcm93X3dpZHRoLCBfID0gdHJlZS5nZXRfdmlzaWJsZV9yZWN0KCkKKyAgICAgICAgICAgICAgICB0cmVlLnF1ZXVlX2RyYXdfYXJlYShyb3dfeCwgcmVjdC55ICsgc2VsZi50cmVlX2hlYWRlcnNfaGVpZ2h0LCByb3dfd2lkdGgsIHJlY3QuaGVpZ2h0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJlY3QgaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXM6CisgICAgICAgICAgICAgICAgdHJlZS5xdWV1ZV9kcmF3X2FyZWEocmVjdC54LCByZWN0LnkgKyBzZWxmLnRyZWVfaGVhZGVyc19oZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KQorCisgICAgICAgIHJldHVybiAobm90IHNlbGYuZm9yY2Vfc3RvcF9lbmFibGUpCisKKyAgICBkZWYgYXBwZW5kX3J1bm5pbmdfY2VsbF9hcmVhKHNlbGYsIGNlbGxfYXJlYSk6CisgICAgICAgIGlmIGNlbGxfYXJlYSBhbmQgKGNlbGxfYXJlYSBub3QgaW4gc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMpOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMuYXBwZW5kKGNlbGxfYXJlYSkKKworICAgIGRlZiByZW1vdmVfcnVubmluZ19jZWxsX2FyZWEoc2VsZiwgY2VsbF9hcmVhKToKKyAgICAgICAgaWYgY2VsbF9hcmVhIGluIHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX2NlbGxfYXJlYXMucmVtb3ZlKGNlbGxfYXJlYSkKKyAgICAgICAgaWYgbm90IHNlbGYucnVubmluZ19jZWxsX2FyZWFzOgorICAgICAgICAgICAgc2VsZi5yZXNldF9ydW4oKQorCitnb2JqZWN0LnR5cGVfcmVnaXN0ZXIoSG9iQ2VsbFJlbmRlcmVyQ29udHJvbGxlcikKKworY2xhc3MgSG9iQ2VsbFJlbmRlcmVyUGl4YnVmKGd0ay5DZWxsUmVuZGVyZXJQaXhidWYpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclBpeGJ1Zi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNvbnRyb2wgPSBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKCkKKyAgICAgICAgIyBhZGQgaWNvbiBjaGVja2VyIGZvciBtYWtlIHRoZSBndGstaWNvbiB0cmFuc2ZlciB0byBob2ItaWNvbgorICAgICAgICBzZWxmLmNoZWNrZXIgPSBIb2JJY29uQ2hlY2tlcigpCisgICAgICAgIHNlbGYuc2V0X3Byb3BlcnR5KCJzdG9jay1zaXplIiwgZ3RrLklDT05fU0laRV9ETkQpCisKKyAgICBkZWYgZ2V0X3BpeGJ1Zl9mcm9tX3N0b2NrX2ljb24oc2VsZiwgd2lkZ2V0LCBzdG9ja19pZD0iIiwgc2l6ZT1ndGsuSUNPTl9TSVpFX0RJQUxPRyk6CisgICAgICAgIGlmIHdpZGdldCBhbmQgc3RvY2tfaWQgYW5kIGd0ay5pY29uX2ZhY3RvcnlfbG9va3VwX2RlZmF1bHQoc3RvY2tfaWQpOgorICAgICAgICAgICAgcmV0dXJuIHdpZGdldC5yZW5kZXJfaWNvbihzdG9ja19pZCwgc2l6ZSkKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNldF9pY29uX25hbWVfdG9faWQoc2VsZiwgbmV3X25hbWUpOgorICAgICAgICBpZiBuZXdfbmFtZSBhbmQgdHlwZShuZXdfbmFtZSkgPT0gc3RyOgorICAgICAgICAgICAgIyBjaGVjayB0aGUgbmFtZSBpcyBuZWVkIHRvIHRyYW5zZmVyIHRvIGhvYiBpY29uIG9yIG5vdAorICAgICAgICAgICAgbmFtZSA9IHNlbGYuY2hlY2tlci5jaGVja19zdG9ja19pY29uKG5ld19uYW1lKQorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJoaWMiKSBvciBuYW1lLnN0YXJ0c3dpdGgoImd0ayIpOgorICAgICAgICAgICAgICAgIHN0b2NrX2lkID0gbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdG9ja19pZCA9ICdndGstJyArIG5hbWUKKworICAgICAgICByZXR1cm4gc3RvY2tfaWQKKworICAgICcnJyByZW5kZXIgY2VsbCBleGFjdGx5LCAiaWNvbi1uYW1lIiBpcyBwcmlvcml0eQorICAgICAgICBpZiB1c2UgdGhlICdoaWMtdGFzay1yZWZyZXNoJyB3aWxsIG1ha2UgdGhlIHBpeCBhbmltYXRpb24KKyAgICAgICAgaWYgJ3BpeCcgd2lsbCBjaGFuZ2UgdGhlIHBpeGJ1ZiBmb3IgaXQgZnJvbSB0aGUgcGl4YnVmIG9yIGltYWdlLgorICAgICcnJworICAgIGRlZiBkb19yZW5kZXIoc2VsZiwgd2luZG93LCB0cmVlLCBiYWNrZ3JvdW5kX2FyZWEsY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpOgorICAgICAgICBpZiAobm90IHNlbGYuY29udHJvbCkgb3IgKG5vdCB0cmVlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHgsIHksIHcsIGggPSBzZWxmLm9uX2dldF9zaXplKHRyZWUsIGNlbGxfYXJlYSkKKyAgICAgICAgeCArPSBjZWxsX2FyZWEueAorICAgICAgICB5ICs9IGNlbGxfYXJlYS55CisgICAgICAgIHcgLT0gMiAqIHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikKKyAgICAgICAgaCAtPSAyICogc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKQorCisgICAgICAgIHN0b2NrX2lkID0gIiIKKyAgICAgICAgaWYgc2VsZi5wcm9wcy5pY29uX25hbWU6CisgICAgICAgICAgICBzdG9ja19pZCA9IHNlbGYuc2V0X2ljb25fbmFtZV90b19pZChzZWxmLnByb3BzLmljb25fbmFtZSkKKyAgICAgICAgZWxpZiBzZWxmLnByb3BzLnN0b2NrX2lkOgorICAgICAgICAgICAgc3RvY2tfaWQgPSBzZWxmLnByb3BzLnN0b2NrX2lkCisgICAgICAgIGVsaWYgc2VsZi5wcm9wcy5waXhidWY6CisgICAgICAgICAgICBwaXggPSBzZWxmLnByb3BzLnBpeGJ1ZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc3RvY2tfaWQ6CisgICAgICAgICAgICBwaXggPSBzZWxmLmdldF9waXhidWZfZnJvbV9zdG9ja19pY29uKHRyZWUsIHN0b2NrX2lkLCBzZWxmLnByb3BzLnN0b2NrX3NpemUpCisgICAgICAgIGlmIHN0b2NrX2lkID09ICdoaWMtdGFzay1yZWZyZXNoJzoKKyAgICAgICAgICAgIHNlbGYuY29udHJvbC5hcHBlbmRfcnVubmluZ19jZWxsX2FyZWEoY2VsbF9hcmVhKQorICAgICAgICAgICAgaWYgc2VsZi5jb250cm9sLmlzX2FjdGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29udHJvbC5vbl9kcmF3X3BpeGJ1Zl9jYihwaXgsIHdpbmRvdy5jYWlyb19jcmVhdGUoKSwgeCwgeSwgdywgaCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb250cm9sLnN0YXJ0X3J1bigyMDAsIDAsIDAsIDEwMDAsIDE1MCwgdHJlZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29udHJvbC5yZW1vdmVfcnVubmluZ19jZWxsX2FyZWEoY2VsbF9hcmVhKQorICAgICAgICAgICAgc2VsZi5jb250cm9sLm9uX2RyYXdfcGl4YnVmX2NiKHBpeCwgd2luZG93LmNhaXJvX2NyZWF0ZSgpLCB4LCB5LCB3LCBoLCBGYWxzZSkKKworICAgIGRlZiBvbl9nZXRfc2l6ZShzZWxmLCB3aWRnZXQsIGNlbGxfYXJlYSk6CisgICAgICAgIGlmIHNlbGYucHJvcHMuaWNvbl9uYW1lIG9yIHNlbGYucHJvcHMucGl4YnVmIG9yIHNlbGYucHJvcHMuc3RvY2tfaWQ6CisgICAgICAgICAgICB3LCBoID0gZ3RrLmljb25fc2l6ZV9sb29rdXAoc2VsZi5wcm9wcy5zdG9ja19zaXplKQorICAgICAgICAgICAgY2FsY193aWR0aCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ4cGFkIikgKiAyICsgdworICAgICAgICAgICAgY2FsY19oZWlnaHQgPSBzZWxmLmdldF9wcm9wZXJ0eSgieXBhZCIpICogMiArIGgKKyAgICAgICAgICAgIHhfb2Zmc2V0ID0gMAorICAgICAgICAgICAgeV9vZmZzZXQgPSAwCisgICAgICAgICAgICBpZiBjZWxsX2FyZWEgYW5kIHcgPiAwIGFuZCBoID4gMDoKKyAgICAgICAgICAgICAgICB4X29mZnNldCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ4YWxpZ24iKSAqIChjZWxsX2FyZWEud2lkdGggLSBjYWxjX3dpZHRoIC0gc2VsZi5nZXRfcHJvcGVydHkoInhwYWQiKSkKKyAgICAgICAgICAgICAgICB5X29mZnNldCA9IHNlbGYuZ2V0X3Byb3BlcnR5KCJ5YWxpZ24iKSAqIChjZWxsX2FyZWEuaGVpZ2h0IC0gY2FsY19oZWlnaHQgLSBzZWxmLmdldF9wcm9wZXJ0eSgieXBhZCIpKQorCisgICAgICAgICAgICByZXR1cm4geF9vZmZzZXQsIHlfb2Zmc2V0LCB3LCBoCisKKyAgICAgICAgcmV0dXJuIDAsIDAsIDAsIDAKKworZ29iamVjdC50eXBlX3JlZ2lzdGVyKEhvYkNlbGxSZW5kZXJlclBpeGJ1ZikKKworY2xhc3MgSG9iQ2VsbFJlbmRlcmVyVG9nZ2xlKGd0ay5DZWxsUmVuZGVyZXJUb2dnbGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmN0cmwgPSBIb2JDZWxsUmVuZGVyZXJDb250cm9sbGVyKGlzX2RyYXdfcm93PVRydWUpCisgICAgICAgIHNlbGYuY3RybC5ydW5uaW5nX21vZGUgPSBzZWxmLmN0cmwuTU9ERV9PTkVfU0hPUlQKKyAgICAgICAgc2VsZi5jZWxsX2F0dHIgPSB7ImZhZGVvdXQiOiBGYWxzZSwgIm51bWJlcl9vZl9jaGlsZHJlbiI6IDB9CisKKyAgICBkZWYgZG9fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiYWNrZ3JvdW5kX2FyZWEsIGNlbGxfYXJlYSwgZXhwb3NlX2FyZWEsIGZsYWdzKToKKyAgICAgICAgaWYgKG5vdCBzZWxmLmN0cmwpIG9yIChub3Qgd2lkZ2V0KToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZsYWdzICYgZ3RrLkNFTExfUkVOREVSRVJfU0VMRUNURUQ6CisgICAgICAgICAgICBzdGF0ZSA9IGd0ay5TVEFURV9TRUxFQ1RFRAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdGUgPSBndGsuU1RBVEVfTk9STUFMCisKKyAgICAgICAgaWYgc2VsZi5jdHJsLmlzX2FjdGl2ZSgpOgorICAgICAgICAgICAgcGF0aCA9IHdpZGdldC5nZXRfcGF0aF9hdF9wb3MoY2VsbF9hcmVhLnggKyBjZWxsX2FyZWEud2lkdGgvMiwgY2VsbF9hcmVhLnkgKyBjZWxsX2FyZWEuaGVpZ2h0LzIpCisgICAgICAgICAgICAjIHNvbWV0aW1lcyB0aGUgcGFyYW1ldGVycyBvZiBjZWxsX2FyZWEgd2lsbCBiZSBhIG5lZ2F0aXZlIG51bWJlcixzdWNoIGFzIHB1bGwgdXAgZG93biB0aGUgc2Nyb2xsIGJhcgorICAgICAgICAgICAgIyBpdCdzIG92ZXIgdGhlIHRyZWUgY29udGFpbmVyIHJhbmdlLCBzbyB0aGUgcGF0aCB3aWxsIGJlIGJhZAorICAgICAgICAgICAgaWYgbm90IHBhdGg6IHJldHVybgorICAgICAgICAgICAgcGF0aCA9IHBhdGhbMF0KKyAgICAgICAgICAgIGlmIHBhdGggaW4gc2VsZi5jdHJsLnJ1bm5pbmdfY2VsbF9hcmVhczoKKyAgICAgICAgICAgICAgICBjciA9IHdpbmRvdy5jYWlyb19jcmVhdGUoKQorICAgICAgICAgICAgICAgIGNvbG9yID0gd2lkZ2V0LmdldF9zdHlsZSgpLmJhc2Vbc3RhdGVdCisKKyAgICAgICAgICAgICAgICByb3dfeCwgXywgcm93X3dpZHRoLCBfID0gd2lkZ2V0LmdldF92aXNpYmxlX3JlY3QoKQorICAgICAgICAgICAgICAgIGJvcmRlcl95ID0gc2VsZi5nZXRfcHJvcGVydHkoInlwYWQiKQorICAgICAgICAgICAgICAgIHNlbGYuY3RybC5vbl9kcmF3X2ZhZGVpbm91dF9jYihjciwgY29sb3IsIHJvd194LCBjZWxsX2FyZWEueSAtIGJvcmRlcl95LCByb3dfd2lkdGgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbF9hcmVhLmhlaWdodCArIGJvcmRlcl95ICogMiwgc2VsZi5jZWxsX2F0dHJbImZhZGVvdXQiXSkKKyAgICAgICAgIyBkcmF3IG51bWJlciBvZiBhIGdyb3VwCisgICAgICAgIGlmIHNlbGYuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXToKKyAgICAgICAgICAgIHRleHQgPSAiJWQgcGtnIiAlIHNlbGYuY2VsbF9hdHRyWyJudW1iZXJfb2ZfY2hpbGRyZW4iXQorICAgICAgICAgICAgcGFuZ29sYXlvdXQgPSB3aWRnZXQuY3JlYXRlX3BhbmdvX2xheW91dCh0ZXh0KQorICAgICAgICAgICAgdGV4dHcsIHRleHRoID0gcGFuZ29sYXlvdXQuZ2V0X3BpeGVsX3NpemUoKQorICAgICAgICAgICAgeCA9IGNlbGxfYXJlYS54ICsgKGNlbGxfYXJlYS53aWR0aC8yKSAtICh0ZXh0dy8yKQorICAgICAgICAgICAgeSA9IGNlbGxfYXJlYS55ICsgKGNlbGxfYXJlYS5oZWlnaHQvMikgLSAodGV4dGgvMikKKworICAgICAgICAgICAgd2lkZ2V0LnN0eWxlLnBhaW50X2xheW91dCh3aW5kb3csIHN0YXRlLCBUcnVlLCBjZWxsX2FyZWEsIHdpZGdldCwgImNoZWNrYm94IiwgeCwgeSwgcGFuZ29sYXlvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZ3RrLkNlbGxSZW5kZXJlclRvZ2dsZS5kb19yZW5kZXIoc2VsZiwgd2luZG93LCB3aWRnZXQsIGJhY2tncm91bmRfYXJlYSwgY2VsbF9hcmVhLCBleHBvc2VfYXJlYSwgZmxhZ3MpCisKKyAgICAnJydkZWxheTogbm9ybWFsbHkgZGVsYXkgdGltZSBpcyAxMDAwbXMKKyAgICAgICBjZWxsX2xpc3Q6IHdoaWxjaCBjZWxscyBuZWVkIHRvIGJlIHJlbmRlcgorICAgICcnJworICAgIGRlZiBmYWRlb3V0KHNlbGYsIHRyZWUsIGRlbGF5LCBjZWxsX2xpc3Q9Tm9uZSk6CisgICAgICAgIGlmIChkZWxheSA8IDIwMCkgb3IgKG5vdCB0cmVlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmNlbGxfYXR0clsiZmFkZW91dCJdID0gVHJ1ZQorICAgICAgICBzZWxmLmN0cmwucnVubmluZ19jZWxsX2FyZWFzID0gY2VsbF9saXN0CisgICAgICAgIHNlbGYuY3RybC5zdGFydF9ydW4oMjAwLCAwLCAwLCBkZWxheSwgKGRlbGF5ICogMjAwIC8gMTAwMCksIHRyZWUpCisKKyAgICBkZWYgY29ubmVjdF9yZW5kZXJfc3RhdGVfY2hhbmdlZChzZWxmLCBmdW5jLCB1c3JkYXRhPU5vbmUpOgorICAgICAgICBpZiBub3QgZnVuYzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiB1c3JkYXRhOgorICAgICAgICAgICAgc2VsZi5jdHJsLmNvbm5lY3QoInJ1bi10aW1lci1zdG9wcGVkIiwgZnVuYywgc2VsZiwgdXNyZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY3RybC5jb25uZWN0KCJydW4tdGltZXItc3RvcHBlZCIsIGZ1bmMsIHNlbGYpCisKK2dvYmplY3QudHlwZV9yZWdpc3RlcihIb2JDZWxsUmVuZGVyZXJUb2dnbGUpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2Vjb25maWd1cmF0aW9ucGFnZS5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWNvbmZpZ3VyYXRpb25wYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NjZiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvaW1hZ2Vjb25maWd1cmF0aW9ucGFnZS5weQpAQCAtMCwwICsxLDU2MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2ltcG9ydCByZQorZnJvbSBiYi51aS5jcnVtYnMucHJvZ3Jlc3NiYXIgaW1wb3J0IEhvYlByb2dyZXNzQmFyCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCitmcm9tIGJiLnVpLmNydW1icy5ob2J3aWRnZXQgaW1wb3J0IGhpYywgSG9iSW1hZ2VCdXR0b24sIEhvYkluZm9CdXR0b24sIEhvYkFsdEJ1dHRvbiwgSG9iQnV0dG9uCitmcm9tIGJiLnVpLmNydW1icy5ob2JsaXN0bW9kZWwgaW1wb3J0IFJlY2lwZUxpc3RNb2RlbAorZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKK2Zyb20gYmIudWkuY3J1bWJzLmhpZy5yZXRyaWV2ZWltYWdlZGlhbG9nIGltcG9ydCBSZXRyaWV2ZUltYWdlRGlhbG9nCisKKyMKKyMgSW1hZ2VDb25maWd1cmF0aW9uUGFnZQorIworY2xhc3MgSW1hZ2VDb25maWd1cmF0aW9uUGFnZSAoSG9iUGFnZSk6CisKKyAgICBfX2R1bW15X21hY2hpbmVfXyA9ICItLXNlbGVjdCBhIG1hY2hpbmUtLSIKKyAgICBfX2R1bW15X2ltYWdlX18gICA9ICItLXNlbGVjdCBhbiBpbWFnZSByZWNpcGUtLSIKKyAgICBfX2N1c3RvbV9pbWFnZV9fICA9ICJTZWxlY3QgZnJvbSBteSBpbWFnZSByZWNpcGVzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1aWxkZXIpOgorICAgICAgICBzdXBlcihJbWFnZUNvbmZpZ3VyYXRpb25QYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiSW1hZ2UgY29uZmlndXJhdGlvbiIpCisKKyAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IE5vbmUKKyAgICAgICAgIyB3ZSB1c2UgbWFjaGluZV9jb21ib19jaGFuZ2VkX2J5X21hbnVhbCB0byBpZGVudGlmeSB0aGUgbWFjaGluZSBpcyBjaGFuZ2VkIGJ5IGNvZGUKKyAgICAgICAgIyBvciBieSBtYW51YWwuIElmIGJ5IG1hbnVhbCwgYWxsIHVzZXIncyByZWNpcGUgc2VsZWN0aW9uIGFuZCBwYWNrYWdlIHNlbGVjdGlvbiBhcmUKKyAgICAgICAgIyBjbGVhcmVkLgorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWwgPSBUcnVlCisgICAgICAgIHNlbGYuc3RvcHBpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLndhcm5pbmdfc2hpZnQgPSAwCisgICAgICAgIHNlbGYuY3VzdG9tX2ltYWdlX3NlbGVjdGVkID0gTm9uZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorCisgICAgZGVmIGNyZWF0ZV92aXN1YWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgY3JlYXRlIHZpc3VhbCBlbGVtZW50cworICAgICAgICBzZWxmLnRvb2xiYXIgPSBndGsuVG9vbGJhcigpCisgICAgICAgIHNlbGYudG9vbGJhci5zZXRfb3JpZW50YXRpb24oZ3RrLk9SSUVOVEFUSU9OX0hPUklaT05UQUwpCisgICAgICAgIHNlbGYudG9vbGJhci5zZXRfc3R5bGUoZ3RrLlRPT0xCQVJfQk9USCkKKworICAgICAgICBteV9pbWFnZXNfYnV0dG9uID0gc2VsZi5hcHBlbmRfdG9vbGJhcl9idXR0b24oc2VsZi50b29sYmFyLAorICAgICAgICAgICAgIkltYWdlcyIsCisgICAgICAgICAgICBoaWMuSUNPTl9JTUFHRVNfRElTUExBWV9GSUxFLAorICAgICAgICAgICAgaGljLklDT05fSU1BR0VTX0hPVkVSX0ZJTEUsCisgICAgICAgICAgICAiT3BlbiBwcmV2aW91c2x5IGJ1aWx0IGltYWdlcyIsCisgICAgICAgICAgICBzZWxmLm15X2ltYWdlc19idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2V0dGluZ3NfYnV0dG9uID0gc2VsZi5hcHBlbmRfdG9vbGJhcl9idXR0b24oc2VsZi50b29sYmFyLAorICAgICAgICAgICAgIlNldHRpbmdzIiwKKyAgICAgICAgICAgIGhpYy5JQ09OX1NFVFRJTkdTX0RJU1BMQVlfRklMRSwKKyAgICAgICAgICAgIGhpYy5JQ09OX1NFVFRJTkdTX0hPVkVSX0ZJTEUsCisgICAgICAgICAgICAiVmlldyBhZGRpdGlvbmFsIGJ1aWxkIHNldHRpbmdzIiwKKyAgICAgICAgICAgIHNlbGYuc2V0dGluZ3NfYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgc2VsZi5jb25maWdfdG9wX2J1dHRvbiA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihzZWxmLnRvb2xiYXIpCisKKyAgICAgICAgc2VsZi5ndGFibGUgPSBndGsuVGFibGUoNDAsIDQwLCBUcnVlKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWdfbWFjaGluZSgpCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbmZpZ19iYXNlaW1nKCkKKyAgICAgICAgc2VsZi5jb25maWdfYnVpbGRfYnV0dG9uID0gc2VsZi5jcmVhdGVfY29uZmlnX2J1aWxkX2J1dHRvbigpCisKKyAgICBkZWYgX3JlbW92ZV9hbGxfd2lkZ2V0KHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ3RhYmxlLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmJveF9ncm91cF9hcmVhLmdldF9jaGlsZHJlbigpIG9yIFtdCisgICAgICAgIGZvciBjaGlsZCBpbiBjaGlsZHJlbjoKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucmVtb3ZlKGNoaWxkKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoY2hpbGQpCisKKyAgICBkZWYgX3BhY2tfY29tcG9uZW50cyhzZWxmLCBwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSk6CisgICAgICAgIHNlbGYuX3JlbW92ZV9hbGxfd2lkZ2V0KCkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuY29uZmlnX3RvcF9idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuZ3RhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorICAgICAgICBpZiBwYWNrX2NvbmZpZ19idWlsZF9idXR0b246CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfZW5kKHNlbGYuY29uZmlnX2J1aWxkX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgICAgICBib3guc2hvdygpCisgICAgICAgICAgICBzdWJib3ggPSBndGsuSEJveChGYWxzZSwgMCkKKyAgICAgICAgICAgIHN1YmJveC5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgICAgICBzdWJib3guc2hvdygpCisgICAgICAgICAgICBib3guYWRkKHN1YmJveCkKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoYm94LCBGYWxzZSwgRmFsc2UpCisKKyAgICBkZWYgc2hvd19tYWNoaW5lKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYuX3BhY2tfY29tcG9uZW50cyhwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHVwZGF0ZV9wcm9ncmVzc19iYXIoc2VsZiwgdGl0bGUsIGZyYWN0aW9uLCBzdGF0dXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuc3RvcHBpbmcgPT0gRmFsc2U6CisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci51cGRhdGUoZnJhY3Rpb24pCisgICAgICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGV4dCh0aXRsZSkKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNldF9yY3N0eWxlKHN0YXR1cykKKworICAgIGRlZiBzaG93X2luZm9fcG9wdWxhdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fcGFja19jb21wb25lbnRzKHBhY2tfY29uZmlnX2J1aWxkX2J1dHRvbiA9IEZhbHNlKQorICAgICAgICBzZWxmLnNldF9jb25maWdfbWFjaGluZV9sYXlvdXQoc2hvd19wcm9ncmVzc19iYXIgPSBUcnVlKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBzaG93X2luZm9fcG9wdWxhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5yZXNldCgpCisgICAgICAgIHNlbGYuX3BhY2tfY29tcG9uZW50cyhwYWNrX2NvbmZpZ19idWlsZF9idXR0b24gPSBGYWxzZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19iYXNlaW1nX2xheW91dCgpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHNob3dfYmFzZWltZ19zZWxlY3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5wcm9ncmVzc19iYXIucmVzZXQoKQorICAgICAgICBzZWxmLl9wYWNrX2NvbXBvbmVudHMocGFja19jb25maWdfYnVpbGRfYnV0dG9uID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ19iYXNlaW1nX2xheW91dCgpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpID09IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgIHNlbGYuanVzdF9iYWtlX2J1dHRvbi5oaWRlKCkKKworICAgIGRlZiBhZGRfd2FybmluZ3NfYmFyKHNlbGYpOgorICAgICAgICAjY3JlYXRlIHRoZSB3YXJuaW5ncyBiYXIgc2hvd24gd2hlbiByZWNpcGVzIHBhcnNpbmcgZ2VuZXJhdGVzIHdhcm5pbmdzCisgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLktIQUtJCisgICAgICAgIHdhcm5pbmdzX2JhciA9IGd0ay5FdmVudEJveCgpCisgICAgICAgIHdhcm5pbmdzX2Jhci5tb2RpZnlfYmcoZ3RrLlNUQVRFX05PUk1BTCwgZ3RrLmdkay5jb2xvcl9wYXJzZShjb2xvcikpCisgICAgICAgIHdhcm5pbmdzX2Jhci5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICB3YXJuaW5nc19iYXIuZ3JhYl9kZWZhdWx0KCkKKworICAgICAgICBidWlsZF9zdG9wX3RhYiA9IGd0ay5UYWJsZSgxMCwgMjAsIFRydWUpCisgICAgICAgIHdhcm5pbmdzX2Jhci5hZGQoYnVpbGRfc3RvcF90YWIpCisKKyAgICAgICAgaWNvbiA9IGd0ay5JbWFnZSgpCisgICAgICAgIGljb25fcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUoaGljLklDT05fSU5ESV9BTEVSVF9GSUxFKQorICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihpY29uX3BpeF9idWZmZXIpCisgICAgICAgIGJ1aWxkX3N0b3BfdGFiLmF0dGFjaChpY29uLCAwLCAyLCAwLCAxMCkKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIHdhcm5pbmdzX25iID0gbGVuKHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzKQorICAgICAgICBpZiB3YXJuaW5nc19uYiA9PSAxOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+PGI+MSByZWNpcGUgcGFyc2luZyB3YXJuaW5nPC9iPjwvc3Bhbj4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gc2l6ZT0neC1sYXJnZSc+PGI+JXMgcmVjaXBlIHBhcnNpbmcgd2FybmluZ3M8L2I+PC9zcGFuPiIgJSB3YXJuaW5nc19uYikKKyAgICAgICAgYnVpbGRfc3RvcF90YWIuYXR0YWNoKGxhYmVsLCAyLCAxMiwgMCwgMTApCisKKyAgICAgICAgdmlld193YXJuaW5nc19idXR0b24gPSBIb2JCdXR0b24oIlZpZXcgd2FybmluZ3MiKQorICAgICAgICB2aWV3X3dhcm5pbmdzX2J1dHRvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi52aWV3X3dhcm5pbmdzX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidWlsZF9zdG9wX3RhYi5hdHRhY2godmlld193YXJuaW5nc19idXR0b24sIDE1LCAxOSwgMSwgOSkKKworICAgICAgICByZXR1cm4gd2FybmluZ3NfYmFyCisKKyAgICBkZWYgZGlzYWJsZV93YXJuaW5nc19iYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzOgorICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnd2FybmluZ3NfYmFyJyk6CisgICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nc19iYXIuaGlkZV9hbGwoKQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorCisgICAgZGVmIGNyZWF0ZV9jb25maWdfbWFjaGluZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmsgPSAiPHNwYW4gJXM+U2VsZWN0IGEgbWFjaGluZTwvc3Bhbj4iICUgc2VsZi5zcGFuX3RhZygneC1sYXJnZScsICdib2xkJykKKyAgICAgICAgc2VsZi5tYWNoaW5lX3RpdGxlLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLm1hY2hpbmVfdGl0bGVfZGVzYyA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZV9kZXNjLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIG1hcmsgPSAoIjxzcGFuICVzPllvdXIgc2VsZWN0aW9uIGlzIHRoZSBwcm9maWxlIG9mIHRoZSB0YXJnZXQgbWFjaGluZSBmb3Igd2hpY2ggeW91IgorICAgICAgICAiIGFyZSBidWlsZGluZyB0aGUgaW1hZ2UuXG48L3NwYW4+IikgJSAoc2VsZi5zcGFuX3RhZygnbWVkaXVtJykpCisgICAgICAgIHNlbGYubWFjaGluZV90aXRsZV9kZXNjLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8gPSBndGsuY29tYm9fYm94X25ld190ZXh0KCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9jYikKKworICAgICAgICBpY29uX2ZpbGUgPSBoaWMuSUNPTl9MQVlFUlNfRElTUExBWV9GSUxFCisgICAgICAgIGhvdmVyX2ZpbGUgPSBoaWMuSUNPTl9MQVlFUlNfSE9WRVJfRklMRQorICAgICAgICBzZWxmLmxheWVyX2J1dHRvbiA9IEhvYkltYWdlQnV0dG9uKCJMYXllcnMiLCAiQWRkIHN1cHBvcnQgZm9yIG1hY2hpbmVzLCBzb2Z0d2FyZSwgZXRjLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fZmlsZSwgaG92ZXJfZmlsZSkKKyAgICAgICAgc2VsZi5sYXllcl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYubGF5ZXJfYnV0dG9uX2NsaWNrZWRfY2IpCisKKyAgICAgICAgbWFya3VwID0gIkxheWVycyBhcmUgYSBwb3dlcmZ1bCBtZWNoYW5pc20gdG8gZXh0ZW5kIHRoZSBZb2N0byBQcm9qZWN0ICIKKyAgICAgICAgbWFya3VwICs9ICJ3aXRoIHlvdXIgb3duIGZ1bmN0aW9uYWxpdHkuXG4iCisgICAgICAgIG1hcmt1cCArPSAiRm9yIG1vcmUgb24gbGF5ZXJzLCBjaGVjayB0aGUgPGEgaHJlZj1cIiIKKyAgICAgICAgbWFya3VwICs9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2Rldi1tYW51YWwvIgorICAgICAgICBtYXJrdXAgKz0gImRldi1tYW51YWwuaHRtbCN1bmRlcnN0YW5kaW5nLWFuZC11c2luZy1sYXllcnNcIj5yZWZlcmVuY2UgbWFudWFsPC9hPi4iCisgICAgICAgIHNlbGYubGF5ZXJfaW5mb19pY29uID0gSG9iSW5mb0J1dHRvbigiPGI+TGF5ZXJzPC9iPiIgKyAiKiIgKyBtYXJrdXAsIHNlbGYuZ2V0X3BhcmVudCgpKQorICAgICAgICBzZWxmLnByb2dyZXNzX2JhciA9IEhvYlByb2dyZXNzQmFyKCkKKyAgICAgICAgc2VsZi5zdG9wX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiU3RvcCIpCisgICAgICAgIHNlbGYuc3RvcF9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc3RvcF9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5tYWNoaW5lX3NlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKKworICAgIGRlZiBzZXRfY29uZmlnX21hY2hpbmVfbGF5b3V0KHNlbGYsIHNob3dfcHJvZ3Jlc3NfYmFyID0gRmFsc2UpOgorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5tYWNoaW5lX3RpdGxlLCAwLCA0MCwgMCwgNCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV90aXRsZV9kZXNjLCAwLCA0MCwgNCwgNikKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV9jb21ibywgMCwgMTIsIDcsIDEwKQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5sYXllcl9idXR0b24sIDE0LCAzNiwgNywgMTIpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLmxheWVyX2luZm9faWNvbiwgMzYsIDQwLCA3LCAxMSkKKyAgICAgICAgaWYgc2hvd19wcm9ncmVzc19iYXI6CisgICAgICAgICAgICAjc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYucHJvZ3Jlc3NfYm94LCAwLCA0MCwgMTUsIDE4KQorICAgICAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYucHJvZ3Jlc3NfYmFyLCAwLCAzNywgMTUsIDE4KQorICAgICAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuc3RvcF9idXR0b24sIDM3LCA0MCwgMTUsIDE4LCAwLCAwKQorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucGFyc2luZ193YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2FybmluZ3NfYmFyID0gc2VsZi5hZGRfd2FybmluZ3NfYmFyKCkKKyAgICAgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLndhcm5pbmdzX2JhciwgMCwgNDAsIDE0LCAxOCkKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19zaGlmdCA9IDQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FybmluZ19zaGlmdCA9IDAKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYubWFjaGluZV9zZXBhcmF0b3IsIDAsIDQwLCAxMywgMTQpCisKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ19iYXNlaW1nKHNlbGYpOgorICAgICAgICBzZWxmLmltYWdlX3RpdGxlID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZS5zZXRfYWxpZ25tZW50KDAsIDEuMCkKKyAgICAgICAgbWFyayA9ICI8c3BhbiAlcz5TZWxlY3QgYW4gaW1hZ2UgcmVjaXBlPC9zcGFuPiIgJSBzZWxmLnNwYW5fdGFnKCd4LWxhcmdlJywgJ2JvbGQnKQorICAgICAgICBzZWxmLmltYWdlX3RpdGxlLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLmltYWdlX3RpdGxlX2Rlc2MgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLmltYWdlX3RpdGxlX2Rlc2Muc2V0X2FsaWdubWVudCgwLCAwLjUpCisKKyAgICAgICAgbWFyayA9ICgiPHNwYW4gJXM+SW1hZ2UgcmVjaXBlcyBhcmUgYSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHR5cGUgb2YgaW1hZ2UgeW91IHdhbnQuICIKKyAgICAgICAgICAgICAgICAiWW91IGNhbiBidWlsZCB0aGVtIGFzIFxuIgorICAgICAgICAgICAgICAgICJ0aGV5IGFyZSBvciBlZGl0IHRoZW0gdG8gc3VpdCB5b3VyIG5lZWRzLlxuPC9zcGFuPiIpICUgc2VsZi5zcGFuX3RhZygnbWVkaXVtJykKKyAgICAgICAgc2VsZi5pbWFnZV90aXRsZV9kZXNjLnNldF9tYXJrdXAobWFyaykKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvID0gZ3RrLmNvbWJvX2JveF9uZXdfdGV4dCgpCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uc2V0X3Jvd19zZXBhcmF0b3JfZnVuYyhzZWxmLmNvbWJvX3NlcGFyYXRvcl9mdW5jLCBOb25lKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvX2lkID0gc2VsZi5pbWFnZV9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5pbWFnZV9jb21ib19jaGFuZ2VkX2NiKQorCisgICAgICAgIHNlbGYuaW1hZ2VfZGVzYyA9IGd0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuaW1hZ2VfZGVzYy5zZXRfYWxpZ25tZW50KDAuMCwgMC41KQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X3NpemVfcmVxdWVzdCgyNTYsIC0xKQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X2p1c3RpZnkoZ3RrLkpVU1RJRllfTEVGVCkKKyAgICAgICAgc2VsZi5pbWFnZV9kZXNjLnNldF9saW5lX3dyYXAoVHJ1ZSkKKworICAgICAgICAjIGJ1dHRvbiB0byB2aWV3IHJlY2lwZXMKKyAgICAgICAgaWNvbl9maWxlID0gaGljLklDT05fUkNJUEVfRElTUExBWV9GSUxFCisgICAgICAgIGhvdmVyX2ZpbGUgPSBoaWMuSUNPTl9SQ0lQRV9IT1ZFUl9GSUxFCisgICAgICAgIHNlbGYudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b24gPSBIb2JJbWFnZUJ1dHRvbigiQWR2YW5jZWQgY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWxlY3QgaW1hZ2UgdHlwZXMsIHBhY2thZ2UgZm9ybWF0cywgZXRjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbl9maWxlLCBob3Zlcl9maWxlKSAgICAgICAgCisgICAgICAgIHNlbGYudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudmlld19hZHZfY29uZmlndXJhdGlvbl9idXR0b25fY2xpY2tlZF9jYikKKworICAgICAgICBzZWxmLmltYWdlX3NlcGFyYXRvciA9IGd0ay5IU2VwYXJhdG9yKCkKKworICAgIGRlZiBjb21ib19zZXBhcmF0b3JfZnVuYyhzZWxmLCBtb2RlbCwgaXRlciwgdXNlcl9kYXRhKToKKyAgICAgICAgbmFtZSA9IG1vZGVsLmdldF92YWx1ZShpdGVyLCAwKQorICAgICAgICBpZiBuYW1lID09ICItLVNlcGFyYXRvci0tIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2V0X2NvbmZpZ19iYXNlaW1nX2xheW91dChzZWxmKToKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfdGl0bGUsIDAsIDQwLCAxNStzZWxmLndhcm5pbmdfc2hpZnQsIDE3K3NlbGYud2FybmluZ19zaGlmdCkKKyAgICAgICAgc2VsZi5ndGFibGUuYXR0YWNoKHNlbGYuaW1hZ2VfdGl0bGVfZGVzYywgMCwgNDAsIDE4K3NlbGYud2FybmluZ19zaGlmdCwgMjIrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV9jb21ibywgMCwgMTIsIDIzK3NlbGYud2FybmluZ19zaGlmdCwgMjYrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV9kZXNjLCAwLCAxMiwgMjcrc2VsZi53YXJuaW5nX3NoaWZ0LCAzMytzZWxmLndhcm5pbmdfc2hpZnQpCisgICAgICAgIHNlbGYuZ3RhYmxlLmF0dGFjaChzZWxmLnZpZXdfYWR2X2NvbmZpZ3VyYXRpb25fYnV0dG9uLCAxNCwgMzYsIDIzK3NlbGYud2FybmluZ19zaGlmdCwgMjgrc2VsZi53YXJuaW5nX3NoaWZ0KQorICAgICAgICBzZWxmLmd0YWJsZS5hdHRhY2goc2VsZi5pbWFnZV9zZXBhcmF0b3IsIDAsIDQwLCAzNStzZWxmLndhcm5pbmdfc2hpZnQsIDM2K3NlbGYud2FybmluZ19zaGlmdCkKKworICAgIGRlZiBjcmVhdGVfY29uZmlnX2J1aWxkX2J1dHRvbihzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgdGhlICJCdWlsZCBwYWNrYWdlcyIgYW5kICJCdWlsZCBpbWFnZSIgYnV0dG9ucyBhdCB0aGUgYm90dG9tCisgICAgICAgIGJ1dHRvbl9ib3ggPSBndGsuSEJveChGYWxzZSwgNikKKworICAgICAgICAjIGNyZWF0ZSBidXR0b24gIkJ1aWxkIGltYWdlIgorICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24gPSBIb2JCdXR0b24oIkJ1aWxkIGltYWdlIikKKyAgICAgICAgc2VsZi5qdXN0X2Jha2VfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIHRoZSBpbWFnZSByZWNpcGUgYXMgaXQgaXMiKQorICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuanVzdF9iYWtlX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBidXR0b25fYm94LnBhY2tfZW5kKHNlbGYuanVzdF9iYWtlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiRWRpdCBpbWFnZSByZWNpcGUiCisgICAgICAgIHNlbGYuZWRpdF9pbWFnZV9idXR0b24gPSBIb2JBbHRCdXR0b24oIkVkaXQgaW1hZ2UgcmVjaXBlIikKKyAgICAgICAgc2VsZi5lZGl0X2ltYWdlX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJDdXN0b21pemUgdGhlIHJlY2lwZXMgYW5kIHBhY2thZ2VzIHRvIGJlIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UiKQorICAgICAgICBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5lZGl0X2ltYWdlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHJldHVybiBidXR0b25fYm94CisKKyAgICBkZWYgc3RvcF9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLnN0b3BwaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfdGV4dCgiU3RvcHBpbmcgcmVjaXBlIHBhcnNpbmciKQorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5zZXRfcmNzdHlsZSgic3RvcCIpCisgICAgICAgIHNlbGYuYnVpbGRlci5jYW5jZWxfcGFyc2Vfc3luYygpCisKKyAgICBkZWYgdmlld193YXJuaW5nc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd193YXJuaW5nX2RpYWxvZygpCisKKyAgICBkZWYgbWFjaGluZV9jb21ib19jaGFuZ2VkX2lkbGVfY2Ioc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3cuc2V0X2N1cnNvcihOb25lKQorCisgICAgZGVmIG1hY2hpbmVfY29tYm9fY2hhbmdlZF9jYihzZWxmLCBtYWNoaW5lX2NvbWJvKToKKyAgICAgICAgc2VsZi5zdG9wcGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYnVpbGRlci5wYXJzaW5nX3dhcm5pbmdzID0gW10KKyAgICAgICAgY29tYm9faXRlbSA9IG1hY2hpbmVfY29tYm8uZ2V0X2FjdGl2ZV90ZXh0KCkKKyAgICAgICAgaWYgbm90IGNvbWJvX2l0ZW0gb3IgY29tYm9faXRlbSA9PSBzZWxmLl9fZHVtbXlfbWFjaGluZV9fOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvdy5zZXRfY3Vyc29yKGd0ay5nZGsuQ3Vyc29yKGd0ay5nZGsuV0FUQ0gpKQorICAgICAgICBzZWxmLmJ1aWxkZXIud2FpdCgwLjEpICN3YWl0IGZvciBjb21ibyBhbmQgY3Vyc29yIHRvIHVwZGF0ZQorCisgICAgICAgICMgcmVtb3ZlIF9fZHVtbXlfbWFjaGluZV9fIGl0ZW0gZnJvbSB0aGUgc3RvcmUgbGlzdCBhZnRlciBmaXJzdCB1c2VyIHNlbGVjdGlvbgorICAgICAgICAjIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGNvbWJvX3N0b3JlID0gbWFjaGluZV9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBpZiBsZW4oY29tYm9fc3RvcmUpIGFuZCAoY29tYm9fc3RvcmVbMF1bMF0gPT0gc2VsZi5fX2R1bW15X21hY2hpbmVfXyk6CisgICAgICAgICAgICBtYWNoaW5lX2NvbWJvLnJlbW92ZV90ZXh0KDApCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoID0gY29tYm9faXRlbQorICAgICAgICBpZiBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWw6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5jbGVhcl9zZWxlY3Rpb24oKQorICAgICAgICAjIHJlc2V0IG1hY2hpbmVfY29tYm9fY2hhbmdlZF9ieV9tYW51YWwKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gTm9uZQorCisgICAgICAgICMgRG8gcmVwYXJzZSByZWNpcGVzCisgICAgICAgIHNlbGYuYnVpbGRlci5wb3B1bGF0ZV9yZWNpcGVfcGFja2FnZV9pbmZvX2FzeW5jKCkKKworICAgICAgICBnbGliLmlkbGVfYWRkKHNlbGYubWFjaGluZV9jb21ib19jaGFuZ2VkX2lkbGVfY2IpCisKKyAgICBkZWYgdXBkYXRlX21hY2hpbmVfY29tYm8oc2VsZik6CisgICAgICAgIHNlbGYuZGlzYWJsZV93YXJuaW5nc19iYXIoKQorICAgICAgICBhbGxfbWFjaGluZXMgPSBbc2VsZi5fX2R1bW15X21hY2hpbmVfX10gKyBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5hbGxfbWFjaGluZXMKKworICAgICAgICBtb2RlbCA9IHNlbGYubWFjaGluZV9jb21iby5nZXRfbW9kZWwoKQorICAgICAgICBtb2RlbC5jbGVhcigpCisgICAgICAgIGZvciBtYWNoaW5lIGluIGFsbF9tYWNoaW5lczoKKyAgICAgICAgICAgIHNlbGYubWFjaGluZV9jb21iby5hcHBlbmRfdGV4dChtYWNoaW5lKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uc2V0X2FjdGl2ZSgwKQorCisgICAgZGVmIHN3aXRjaF9tYWNoaW5lX2NvbWJvKHNlbGYpOgorICAgICAgICBzZWxmLmRpc2FibGVfd2FybmluZ3NfYmFyKCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvX2NoYW5nZWRfYnlfbWFudWFsID0gRmFsc2UKKyAgICAgICAgbW9kZWwgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgYWN0aXZlID0gMAorICAgICAgICB3aGlsZSBhY3RpdmUgPCBsZW4obW9kZWwpOgorICAgICAgICAgICAgaWYgbW9kZWxbYWN0aXZlXVswXSA9PSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5jdXJyX21hY2g6CisgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUoYWN0aXZlKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgYWN0aXZlICs9IDEKKworICAgICAgICBpZiBtb2RlbFswXVswXSAhPSBzZWxmLl9fZHVtbXlfbWFjaGluZV9fOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLmluc2VydF90ZXh0KDAsIHNlbGYuX19kdW1teV9tYWNoaW5lX18pCisKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUoMCkKKworICAgIGRlZiB1cGRhdGVfaW1hZ2VfZGVzYyhzZWxmKToKKyAgICAgICAgZGVzYyA9ICIiCisgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gc2VsZi5pbWFnZV9jb21iby5nZXRfYWN0aXZlX3RleHQoKQorICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSBhbmQgc2VsZWN0ZWRfaW1hZ2UgaW4gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5wbl9wYXRoLmtleXMoKToKKyAgICAgICAgICAgIGltYWdlX3BhdGggPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnBuX3BhdGhbc2VsZWN0ZWRfaW1hZ2VdCisgICAgICAgICAgICBpbWFnZV9pdGVyID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfaXRlcihpbWFnZV9wYXRoKQorICAgICAgICAgICAgZGVzYyA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGltYWdlX2l0ZXIsIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuQ09MX0RFU0MpCisKKyAgICAgICAgbWFyayA9ICgiPHNwYW4gJXM+JXM8L3NwYW4+XG4iKSAlIChzZWxmLnNwYW5fdGFnKCdzbWFsbCcpLCBkZXNjKQorICAgICAgICBzZWxmLmltYWdlX2Rlc2Muc2V0X21hcmt1cChtYXJrKQorCisgICAgZGVmIGltYWdlX2NvbWJvX2NoYW5nZWRfaWRsZV9jYihzZWxmLCBzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcywgc2VsZWN0ZWRfcGFja2FnZXMpOgorICAgICAgICBzZWxmLmJ1aWxkZXIudXBkYXRlX3JlY2lwZV9tb2RlbChzZWxlY3RlZF9pbWFnZSwgc2VsZWN0ZWRfcmVjaXBlcykKKyAgICAgICAgc2VsZi5idWlsZGVyLnVwZGF0ZV9wYWNrYWdlX21vZGVsKHNlbGVjdGVkX3BhY2thZ2VzKQorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorCisgICAgZGVmIGltYWdlX2NvbWJvX2NoYW5nZWRfY2Ioc2VsZiwgY29tYm8pOgorICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShGYWxzZSkKKyAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLmltYWdlX2NvbWJvLmdldF9hY3RpdmVfdGV4dCgpCisgICAgICAgIGlmIHNlbGVjdGVkX2ltYWdlID09IHNlbGYuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgIHRvcGRpciA9IHNlbGYuYnVpbGRlci5nZXRfdG9wZGlyKCkKKyAgICAgICAgICAgIGltYWdlc19kaXIgPSB0b3BkaXIgKyAiL3JlY2lwZXMvaW1hZ2VzL2N1c3RvbS8iCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZW5zdXJlX2RpcihpbWFnZXNfZGlyKQorCisgICAgICAgICAgICBkaWFsb2cgPSBSZXRyaWV2ZUltYWdlRGlhbG9nKGltYWdlc19kaXIsICJTZWxlY3QgZnJvbSBteSBpbWFnZSByZWNpcGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIsIGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpCisgICAgICAgICAgICByZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrLlJFU1BPTlNFX09LOgorICAgICAgICAgICAgICAgIGltYWdlX25hbWUgPSBkaWFsb2cuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChpbWFnZV9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGVjdGVkX2ltYWdlID0gb3MucGF0aC5zcGxpdGV4dCh0YWlsKVswXQorICAgICAgICAgICAgICAgIHNlbGYuY3VzdG9tX2ltYWdlX3NlbGVjdGVkID0gc2VsZWN0ZWRfaW1hZ2UKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLl9fZHVtbXlfaW1hZ2VfXworICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2ltYWdlX2NvbWJvKHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwsIE5vbmUpCisgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSkKKworICAgICAgICBpZiBub3Qgc2VsZWN0ZWRfaW1hZ2Ugb3IgKHNlbGVjdGVkX2ltYWdlID09IHNlbGYuX19kdW1teV9pbWFnZV9fKToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uaGlkZSgpCisgICAgICAgICAgICBzZWxmLmVkaXRfaW1hZ2VfYnV0dG9uLmhpZGUoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyByZW1vdmUgX19kdW1teV9pbWFnZV9fIGl0ZW0gZnJvbSB0aGUgc3RvcmUgbGlzdCBhZnRlciBmaXJzdCB1c2VyIHNlbGVjdGlvbgorICAgICAgICAjIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHZhbGlkCisgICAgICAgIGNvbWJvX3N0b3JlID0gY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgaWYgbGVuKGNvbWJvX3N0b3JlKSBhbmQgKGNvbWJvX3N0b3JlWzBdWzBdID09IHNlbGYuX19kdW1teV9pbWFnZV9fKToKKyAgICAgICAgICAgIGNvbWJvLnJlbW92ZV90ZXh0KDApCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmN1c3RvbWl6ZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGVjdGVkX3JlY2lwZXMgPSBbXQorCisgICAgICAgIGltYWdlX3BhdGggPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnBuX3BhdGhbc2VsZWN0ZWRfaW1hZ2VdCisgICAgICAgIGltYWdlX2l0ZXIgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF9pdGVyKGltYWdlX3BhdGgpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfdmFsdWUoaW1hZ2VfaXRlciwgc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5DT0xfSU5TVEFMTCkuc3BsaXQoKQorICAgICAgICBzZWxmLnVwZGF0ZV9pbWFnZV9kZXNjKCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnJlc2V0KCkKKyAgICAgICAgc2VsZi5idWlsZGVyLnBhY2thZ2VfbW9kZWwucmVzZXQoKQorCisgICAgICAgIHNlbGYuc2hvd19iYXNlaW1nX3NlbGVjdGVkKCkKKworICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBzZWxmLmp1c3RfYmFrZV9idXR0b24uaGlkZSgpCisKKyAgICAgICAgZ2xpYi5pZGxlX2FkZChzZWxmLmltYWdlX2NvbWJvX2NoYW5nZWRfaWRsZV9jYiwgc2VsZWN0ZWRfaW1hZ2UsIHNlbGVjdGVkX3JlY2lwZXMsIHNlbGVjdGVkX3BhY2thZ2VzKQorCisgICAgZGVmIF9pbWFnZV9jb21ib19jb25uZWN0X3NpZ25hbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW1hZ2VfY29tYm9faWQ6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvX2lkID0gc2VsZi5pbWFnZV9jb21iby5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5pbWFnZV9jb21ib19jaGFuZ2VkX2NiKQorCisgICAgZGVmIF9pbWFnZV9jb21ib19kaXNjb25uZWN0X3NpZ25hbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9jb21ib19pZDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uZGlzY29ubmVjdChzZWxmLmltYWdlX2NvbWJvX2lkKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21ib19pZCA9IE5vbmUKKworICAgIGRlZiB1cGRhdGVfaW1hZ2VfY29tYm8oc2VsZiwgcmVjaXBlX21vZGVsLCBzZWxlY3RlZF9pbWFnZSk6CisgICAgICAgICMgVXBkYXRlIHRoZSBpbWFnZSBjb21ibyBhY2NvcmRpbmcgdG8gdGhlIGltYWdlcyBpbiB0aGUgcmVjaXBlX21vZGVsCisgICAgICAgICMgcG9wdWxhdGUgaW1hZ2UgY29tYm8KKyAgICAgICAgZmlsdGVyID0ge1JlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRSA6IFsnaW1hZ2UnXX0KKyAgICAgICAgaW1hZ2VfbW9kZWwgPSByZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIpCisgICAgICAgIGltYWdlX21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChyZWNpcGVfbW9kZWwuQ09MX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgYWN0aXZlID0gMAorICAgICAgICBjbnQgPSAwCisKKyAgICAgICAgd2hpdGVfcGF0dGVybiA9IFtdCisgICAgICAgIGlmIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX3doaXRlX3BhdHRlcm46CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV93aGl0ZV9wYXR0ZXJuLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2hpdGVfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZShpKSkKKworICAgICAgICBibGFja19wYXR0ZXJuID0gW10KKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2VfYmxhY2tfcGF0dGVybjoKKyAgICAgICAgICAgIGZvciBpIGluIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2JsYWNrX3BhdHRlcm4uc3BsaXQoKToKKyAgICAgICAgICAgICAgICBibGFja19wYXR0ZXJuLmFwcGVuZChyZS5jb21waWxlKGkpKQorICAgICAgICBibGFja19wYXR0ZXJuLmFwcGVuZChyZS5jb21waWxlKCJob2ItaW1hZ2UiKSkKKyAgICAgICAgYmxhY2tfcGF0dGVybi5hcHBlbmQocmUuY29tcGlsZSgiZWRpdGVkKC1bMC05XSopKi5iYiQiKSkKKworICAgICAgICBpdCA9IGltYWdlX21vZGVsLmdldF9pdGVyX2ZpcnN0KCkKKyAgICAgICAgc2VsZi5faW1hZ2VfY29tYm9fZGlzY29ubmVjdF9zaWduYWwoKQorICAgICAgICBtb2RlbCA9IHNlbGYuaW1hZ2VfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgbW9kZWwuY2xlYXIoKQorICAgICAgICAjIFNldCBhIGluZGljYXRvciB0ZXh0IHRvIGNvbWJvIHN0b3JlIHdoZW4gZmlyc3Qgb3BlbgorICAgICAgICBpZiBub3Qgc2VsZWN0ZWRfaW1hZ2U6CisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuX19kdW1teV9pbWFnZV9fKQorICAgICAgICAgICAgY250ID0gY250ICsgMQorCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYXBwZW5kX3RleHQoc2VsZi5fX2N1c3RvbV9pbWFnZV9fKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KCItLVNlcGFyYXRvci0tIikKKyAgICAgICAgY250ID0gY250ICsgMgorCisgICAgICAgIHRvcGRpciA9IHNlbGYuYnVpbGRlci5nZXRfdG9wZGlyKCkKKyAgICAgICAgIyBhcHBlbmQgYW5kIHNldCBhY3RpdmUKKyAgICAgICAgd2hpbGUgaXQ6CisgICAgICAgICAgICBwYXRoID0gaW1hZ2VfbW9kZWwuZ2V0X3BhdGgoaXQpCisgICAgICAgICAgICBpdCA9IGltYWdlX21vZGVsLml0ZXJfbmV4dChpdCkKKyAgICAgICAgICAgIGltYWdlX25hbWUgPSBpbWFnZV9tb2RlbFtwYXRoXVtyZWNpcGVfbW9kZWwuQ09MX05BTUVdCisgICAgICAgICAgICBpZiBpbWFnZV9uYW1lID09IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBibGFja19wYXR0ZXJuOgorICAgICAgICAgICAgICAgIGFsbG93ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIGJsYWNrX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgIGlmIHBhdHRlcm4uc2VhcmNoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3cgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgd2hpdGVfcGF0dGVybjoKKyAgICAgICAgICAgICAgICBhbGxvdyA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gd2hpdGVfcGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0dGVybi5zZWFyY2goaW1hZ2VfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsbG93ID0gVHJ1ZQorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBpbWFnZV9tb2RlbFtwYXRoXVtyZWNpcGVfbW9kZWwuQ09MX0ZJTEVdCisgICAgICAgICAgICBpZiBmaWxlX25hbWUgYW5kIHRvcGRpciBpbiBmaWxlX25hbWU6CisgICAgICAgICAgICAgICAgYWxsb3cgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBhbGxvdzoKKyAgICAgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KGltYWdlX25hbWUpCisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfbmFtZSA9PSBzZWxlY3RlZF9pbWFnZToKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gY250CisgICAgICAgICAgICAgICAgY250ID0gY250ICsgMQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLmFwcGVuZF90ZXh0KHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXykKKworICAgICAgICBpZiBzZWxlY3RlZF9pbWFnZSA9PSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLl9fY3VzdG9tX2ltYWdlX186CisgICAgICAgICAgICBhY3RpdmUgPSBjbnQKKworICAgICAgICBpZiBzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uYXBwZW5kX3RleHQoIi0tU2VwYXJhdG9yLS0iKQorICAgICAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hcHBlbmRfdGV4dChzZWxmLmN1c3RvbV9pbWFnZV9zZWxlY3RlZCkKKyAgICAgICAgICAgIGNudCA9IGNudCArIDIKKyAgICAgICAgICAgIGlmIHNlbGYuY3VzdG9tX2ltYWdlX3NlbGVjdGVkID09IHNlbGVjdGVkX2ltYWdlOgorICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGNudAorCisgICAgICAgIHNlbGYuaW1hZ2VfY29tYm8uc2V0X2FjdGl2ZShhY3RpdmUpCisKKyAgICAgICAgaWYgYWN0aXZlICE9IDA6CisgICAgICAgICAgICBzZWxmLnNob3dfYmFzZWltZ19zZWxlY3RlZCgpCisKKyAgICAgICAgc2VsZi5faW1hZ2VfY29tYm9fY29ubmVjdF9zaWduYWwoKQorCisgICAgZGVmIGxheWVyX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICMgQ3JlYXRlIGEgbGF5ZXIgc2VsZWN0aW9uIGRpYWxvZworICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19sYXllcl9zZWxlY3Rpb25fZGlhbG9nKCkKKworICAgIGRlZiB2aWV3X2Fkdl9jb25maWd1cmF0aW9uX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICMgQ3JlYXRlIGFuIGFkdmFuY2VkIHNldHRpbmdzIGRpYWxvZworICAgICAgICByZXNwb25zZSwgc2V0dGluZ3NfY2hhbmdlZCA9IHNlbGYuYnVpbGRlci5zaG93X2Fkdl9zZXR0aW5nc19kaWFsb2coKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2V0dGluZ3NfY2hhbmdlZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLldBVENIKSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci53YWl0KDAuMSkgI3dhaXQgZm9yIGFkdl9zZXR0aW5nc19kaWFsb2cgdG8gdGVybWluYXRlCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93LnNldF9jdXJzb3IoTm9uZSkKKworICAgIGRlZiBqdXN0X2Jha2VfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLmJ1aWxkZXIuanVzdF9iYWtlKCkKKworICAgIGRlZiBlZGl0X2ltYWdlX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zZXRfYmFzZV9pbWFnZSgpCisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZXMoKQorCisgICAgZGVmIG15X2ltYWdlc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19sb2FkX215X2ltYWdlc19kaWFsb2coKQorCisgICAgZGVmIHNldHRpbmdzX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgICMgQ3JlYXRlIGFuIGFkdmFuY2VkIHNldHRpbmdzIGRpYWxvZworICAgICAgICByZXNwb25zZSwgc2V0dGluZ3NfY2hhbmdlZCA9IHNlbGYuYnVpbGRlci5zaG93X3NpbXBsZV9zZXR0aW5nc19kaWFsb2coKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2V0dGluZ3NfY2hhbmdlZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yZXBhcnNlX3Bvc3RfYWR2X3NldHRpbmdzKCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWRldGFpbHNwYWdlLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL2ltYWdlZGV0YWlsc3BhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzUyZTk0OAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9pbWFnZWRldGFpbHNwYWdlLnB5CkBAIC0wLDAgKzEsNjY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGd0aworZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBoaWMsIEhvYlZpZXdUYWJsZSwgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBiYi51aS5jcnVtYnMuaGlnLmNydW1ic2RpYWxvZyBpbXBvcnQgQ3J1bWJzRGlhbG9nCitmcm9tIGJiLnVpLmNydW1icy5oaWcuc2F2ZWltYWdlZGlhbG9nIGltcG9ydCBTYXZlSW1hZ2VEaWFsb2cKKworIworIyBJbWFnZURldGFpbHNQYWdlCisjCitjbGFzcyBJbWFnZURldGFpbHNQYWdlIChIb2JQYWdlKToKKworICAgIGNsYXNzIERldGFpbEJveCAoZ3RrLkV2ZW50Qm94KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdpZGdldCA9IE5vbmUsIHZhcmxpc3QgPSBOb25lLCB2YWxsaXN0ID0gTm9uZSwgaWNvbiA9IE5vbmUsIGJ1dHRvbiA9IE5vbmUsIGJ1dHRvbjI9Tm9uZSwgY29sb3IgPSBIb2JDb2xvcnMuTElHSFRfR1JBWSk6CisgICAgICAgICAgICBndGsuRXZlbnRCb3guX19pbml0X18oc2VsZikKKworICAgICAgICAgICAgIyBzZXQgY29sb3IKKyAgICAgICAgICAgIHN0eWxlID0gc2VsZi5nZXRfc3R5bGUoKS5jb3B5KCkKKyAgICAgICAgICAgIHN0eWxlLmJnW2d0ay5TVEFURV9OT1JNQUxdID0gc2VsZi5nZXRfY29sb3JtYXAoKS5hbGxvY19jb2xvcihjb2xvciwgRmFsc2UsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5zZXRfc3R5bGUoc3R5bGUpCisKKyAgICAgICAgICAgIHNlbGYucm93ID0gZ3RrLlRhYmxlKDEsIDIsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5yb3cuc2V0X2JvcmRlcl93aWR0aCgxMCkKKyAgICAgICAgICAgIHNlbGYuYWRkKHNlbGYucm93KQorICAgICAgICAKKyAgICAgICAgICAgIHRvdGFsX3Jvd3MgPSAwCisgICAgICAgICAgICBpZiB3aWRnZXQ6CisgICAgICAgICAgICAgICAgdG90YWxfcm93cyA9IDEwCisgICAgICAgICAgICBpZiB2YXJsaXN0IGFuZCB2YWxsaXN0OgorICAgICAgICAgICAgICAgICMgcGFjayB0aGUgaWNvbiBhbmQgdGhlIHRleHQgb24gdGhlIGxlZnQKKyAgICAgICAgICAgICAgICB0b3RhbF9yb3dzICs9IGxlbih2YXJsaXN0KQorICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSh0b3RhbF9yb3dzLCAyMCwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncyg2KQorICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgLTEpCisgICAgICAgICAgICBzZWxmLnJvdy5hdHRhY2goc2VsZi50YWJsZSwgMCwgMSwgMCwgMSwgeG9wdGlvbnM9Z3RrLkZJTEx8Z3RrLkVYUEFORCwgeW9wdGlvbnM9Z3RrLkZJTEwpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbGlkID0gMAorICAgICAgICAgICAgcm93aWQgPSAwCisgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0cyA9IHt9CisgICAgICAgICAgICBpZiBpY29uOgorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKGljb24sIGNvbGlkLCBjb2xpZCArIDIsIDAsIDEpCisgICAgICAgICAgICAgICAgY29saWQgPSBjb2xpZCArIDIKKyAgICAgICAgICAgIGlmIHdpZGdldDoKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaCh3aWRnZXQsIGNvbGlkLCAyMCwgMCwgMTApCisgICAgICAgICAgICAgICAgcm93aWQgPSAxMAorICAgICAgICAgICAgaWYgdmFybGlzdCBhbmQgdmFsbGlzdDoKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJhbmdlKHJvd2lkLCB0b3RhbF9yb3dzKToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByb3cgLSByb3dpZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0gPSBzZWxmLnRleHQybGFiZWwodmFybGlzdFtpbmRleF0sIHZhbGxpc3RbaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLmxpbmVfd2lkZ2V0c1t2YXJsaXN0W2luZGV4XV0sIGNvbGlkLCAyMCwgcm93LCByb3cgKyAxKQorICAgICAgICAgICAgIyBwYWNrIHRoZSBidXR0b24gb24gdGhlIHJpZ2h0CisgICAgICAgICAgICBpZiBidXR0b246CisgICAgICAgICAgICAgICAgc2VsZi5iYm94ID0gZ3RrLlZCb3goKQorICAgICAgICAgICAgICAgIHNlbGYuYmJveC5wYWNrX3N0YXJ0KGJ1dHRvbiwgZXhwYW5kPVRydWUsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICAgICAgaWYgYnV0dG9uMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5iYm94LnBhY2tfc3RhcnQoYnV0dG9uMiwgZXhwYW5kPVRydWUsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5iYm94LnNldF9zaXplX3JlcXVlc3QoMTUwLC0xKQorICAgICAgICAgICAgICAgIHNlbGYucm93LmF0dGFjaChzZWxmLmJib3gsIDEsIDIsIDAsIDEsIHhvcHRpb25zPWd0ay5GSUxMLCB5b3B0aW9ucz1ndGsuRVhQQU5EKQorICAgICAgICAgICAgICAgIAorICAgICAgICBkZWYgdXBkYXRlX2xpbmVfd2lkZ2V0cyhzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYubGluZV93aWRnZXRzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLCBndGsuTGFiZWwpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHNbdmFyaWFibGVdLnNldF9tYXJrdXAoc2VsZi5mb3JtYXRfbGluZSh2YXJpYWJsZSwgdmFsdWUpKQorCisgICAgICAgIGRlZiB3cmFwX2xpbmUoc2VsZiwgaW5wdXRzKToKKyAgICAgICAgICAgICMgd3JhcCB0aGUgbG9uZyB0ZXh0IG9mIGlucHV0cworICAgICAgICAgICAgd3JhcF93aWR0aF9jaGFycyA9IDc1CisgICAgICAgICAgICBvdXRwdXRzID0gIiIKKyAgICAgICAgICAgIHRtcHMgPSBpbnB1dHMKKyAgICAgICAgICAgIGxlc3NfY2hhcnMgPSBsZW4oaW5wdXRzKQorICAgICAgICAgICAgd2hpbGUgKGxlc3NfY2hhcnMgLSB3cmFwX3dpZHRoX2NoYXJzKSA+IDA6CisgICAgICAgICAgICAgICAgbGVzc19jaGFycyAtPSB3cmFwX3dpZHRoX2NoYXJzCisgICAgICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzWzp3cmFwX3dpZHRoX2NoYXJzXSArICJcbiAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICB0bXBzID0gaW5wdXRzW2xlc3NfY2hhcnM6XQorICAgICAgICAgICAgb3V0cHV0cyArPSB0bXBzCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0cworCisgICAgICAgIGRlZiBmb3JtYXRfbGluZShzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgd3JhcGVkX3ZhbHVlID0gc2VsZi53cmFwX2xpbmUodmFsdWUpCisgICAgICAgICAgICBtYXJrdXAgPSAiPHNwYW4gd2VpZ2h0PVwnYm9sZFwnPiVzPC9zcGFuPiIgJSB2YXJpYWJsZQorICAgICAgICAgICAgbWFya3VwICs9ICI8c3BhbiB3ZWlnaHQ9XCdub3JtYWxcJyBmb3JlZ3JvdW5kPVwnIzFjMWMxY1wnIGZvbnRfZGVzYz1cJzE0cHhcJz4lczwvc3Bhbj4iICUgd3JhcGVkX3ZhbHVlCisgICAgICAgICAgICByZXR1cm4gbWFya3VwCisKKyAgICAgICAgZGVmIHRleHQybGFiZWwoc2VsZiwgdmFyaWFibGUsIHZhbHVlKToKKyAgICAgICAgICAgICMgYXBwZW5kIHRoZSBuYW1lOnZhbHVlIHRvIHRoZSBsZWZ0IGJveAorICAgICAgICAgICAgIyBzdWNoIGFzICJOYW1lOiBob2ItY29yZS1taW5pbWFsLXZhcmlhbnQtMjAxMS0xMi0xNS1iZWFnbGVib2FyZCIKKyAgICAgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKHNlbGYuZm9ybWF0X2xpbmUodmFyaWFibGUsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBsYWJlbAorCisgICAgY2xhc3MgQnVpbGREZXRhaWxCb3ggKGd0ay5FdmVudEJveCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJsaXN0ID0gTm9uZSwgdmFsbGlzdCA9IE5vbmUsIGljb24gPSBOb25lLCBjb2xvciA9IEhvYkNvbG9ycy5MSUdIVF9HUkFZKToKKyAgICAgICAgICAgIGd0ay5FdmVudEJveC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgICAgICAjIHNldCBjb2xvcgorICAgICAgICAgICAgc3R5bGUgPSBzZWxmLmdldF9zdHlsZSgpLmNvcHkoKQorICAgICAgICAgICAgc3R5bGUuYmdbZ3RrLlNUQVRFX05PUk1BTF0gPSBzZWxmLmdldF9jb2xvcm1hcCgpLmFsbG9jX2NvbG9yKGNvbG9yLCBGYWxzZSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLnNldF9zdHlsZShzdHlsZSkKKworICAgICAgICAgICAgc2VsZi5oYm94ID0gZ3RrLkhCb3goKQorICAgICAgICAgICAgc2VsZi5oYm94LnNldF9ib3JkZXJfd2lkdGgoMTApCisgICAgICAgICAgICBzZWxmLmFkZChzZWxmLmhib3gpCisKKyAgICAgICAgICAgIHRvdGFsX3Jvd3MgPSAwCisgICAgICAgICAgICBpZiB2YXJsaXN0IGFuZCB2YWxsaXN0OgorICAgICAgICAgICAgICAgICMgcGFjayB0aGUgaWNvbiBhbmQgdGhlIHRleHQgb24gdGhlIGxlZnQKKyAgICAgICAgICAgICAgICB0b3RhbF9yb3dzICs9IGxlbih2YXJsaXN0KQorICAgICAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZSh0b3RhbF9yb3dzLCAyMCwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncyg2KQorICAgICAgICAgICAgc2VsZi50YWJsZS5zZXRfc2l6ZV9yZXF1ZXN0KDEwMCwgLTEpCisgICAgICAgICAgICBzZWxmLmhib3gucGFja19zdGFydChzZWxmLnRhYmxlLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlLCBwYWRkaW5nPTE1KQorCisgICAgICAgICAgICBjb2xpZCA9IDAKKyAgICAgICAgICAgIHJvd2lkID0gMAorICAgICAgICAgICAgc2VsZi5saW5lX3dpZGdldHMgPSB7fQorICAgICAgICAgICAgaWYgaWNvbjoKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChpY29uLCBjb2xpZCwgY29saWQgKyAyLCAwLCAxKQorICAgICAgICAgICAgICAgIGNvbGlkID0gY29saWQgKyAyCisgICAgICAgICAgICBpZiB2YXJsaXN0IGFuZCB2YWxsaXN0OgorICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcmFuZ2Uocm93aWQsIHRvdGFsX3Jvd3MpOgorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJvdyAtIHJvd2lkCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZV93aWRnZXRzW3Zhcmxpc3RbaW5kZXhdXSA9IHNlbGYudGV4dDJsYWJlbCh2YXJsaXN0W2luZGV4XSwgdmFsbGlzdFtpbmRleF0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKHNlbGYubGluZV93aWRnZXRzW3Zhcmxpc3RbaW5kZXhdXSwgY29saWQsIDIwLCByb3csIHJvdyArIDEpCisgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZiB1cGRhdGVfbGluZV93aWRnZXRzKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5saW5lX3dpZGdldHMpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLmxpbmVfd2lkZ2V0c1t2YXJpYWJsZV0sIGd0ay5MYWJlbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmxpbmVfd2lkZ2V0c1t2YXJpYWJsZV0uc2V0X21hcmt1cChzZWxmLmZvcm1hdF9saW5lKHZhcmlhYmxlLCB2YWx1ZSkpCisKKyAgICAgICAgZGVmIHdyYXBfbGluZShzZWxmLCBpbnB1dHMpOgorICAgICAgICAgICAgIyB3cmFwIHRoZSBsb25nIHRleHQgb2YgaW5wdXRzCisgICAgICAgICAgICB3cmFwX3dpZHRoX2NoYXJzID0gNzUKKyAgICAgICAgICAgIG91dHB1dHMgPSAiIgorICAgICAgICAgICAgdG1wcyA9IGlucHV0cworICAgICAgICAgICAgbGVzc19jaGFycyA9IGxlbihpbnB1dHMpCisgICAgICAgICAgICB3aGlsZSAobGVzc19jaGFycyAtIHdyYXBfd2lkdGhfY2hhcnMpID4gMDoKKyAgICAgICAgICAgICAgICBsZXNzX2NoYXJzIC09IHdyYXBfd2lkdGhfY2hhcnMKKyAgICAgICAgICAgICAgICBvdXRwdXRzICs9IHRtcHNbOndyYXBfd2lkdGhfY2hhcnNdICsgIlxuICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgIHRtcHMgPSBpbnB1dHNbbGVzc19jaGFyczpdCisgICAgICAgICAgICBvdXRwdXRzICs9IHRtcHMKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXRzCisKKyAgICAgICAgZGVmIGZvcm1hdF9saW5lKHNlbGYsIHZhcmlhYmxlLCB2YWx1ZSk6CisgICAgICAgICAgICB3cmFwZWRfdmFsdWUgPSBzZWxmLndyYXBfbGluZSh2YWx1ZSkKKyAgICAgICAgICAgIG1hcmt1cCA9ICI8c3BhbiB3ZWlnaHQ9XCdib2xkXCc+JXM8L3NwYW4+IiAlIHZhcmlhYmxlCisgICAgICAgICAgICBtYXJrdXAgKz0gIjxzcGFuIHdlaWdodD1cJ25vcm1hbFwnIGZvcmVncm91bmQ9XCcjMWMxYzFjXCcgZm9udF9kZXNjPVwnMTRweFwnPiVzPC9zcGFuPiIgJSB3cmFwZWRfdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBtYXJrdXAKKworICAgICAgICBkZWYgdGV4dDJsYWJlbChzZWxmLCB2YXJpYWJsZSwgdmFsdWUpOgorICAgICAgICAgICAgIyBhcHBlbmQgdGhlIG5hbWU6dmFsdWUgdG8gdGhlIGxlZnQgYm94CisgICAgICAgICAgICAjIHN1Y2ggYXMgIk5hbWU6IGhvYi1jb3JlLW1pbmltYWwtdmFyaWFudC0yMDExLTEyLTE1LWJlYWdsZWJvYXJkIgorICAgICAgICAgICAgbGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoc2VsZi5mb3JtYXRfbGluZSh2YXJpYWJsZSwgdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGxhYmVsCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKEltYWdlRGV0YWlsc1BhZ2UsIHNlbGYpLl9faW5pdF9fKGJ1aWxkZXIsICJJbWFnZSBkZXRhaWxzIikKKworICAgICAgICBzZWxmLmltYWdlX3N0b3JlID0gW10KKyAgICAgICAgc2VsZi5idXR0b25faWRzID0ge30KKyAgICAgICAgc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYuaW1hZ2Vfc2F2ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGUgPSAiIgorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uX2ZpZWxkX3RlbXBsYXRlID0gIiIKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSB2aXN1YWwgZWxlbWVudHMKKyAgICAgICAgIyBjcmVhdGUgdGhlIHRvb2xiYXIKKyAgICAgICAgc2VsZi50b29sYmFyID0gZ3RrLlRvb2xiYXIoKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X29yaWVudGF0aW9uKGd0ay5PUklFTlRBVElPTl9IT1JJWk9OVEFMKQorICAgICAgICBzZWxmLnRvb2xiYXIuc2V0X3N0eWxlKGd0ay5UT09MQkFSX0JPVEgpCisKKyAgICAgICAgbXlfaW1hZ2VzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJJbWFnZXMiLAorICAgICAgICAgICAgaGljLklDT05fSU1BR0VTX0RJU1BMQVlfRklMRSwKKyAgICAgICAgICAgIGhpYy5JQ09OX0lNQUdFU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIk9wZW4gcHJldmlvdXNseSBidWlsdCBpbWFnZXMiLAorICAgICAgICAgICAgc2VsZi5teV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIHNldHRpbmdzX2J1dHRvbiA9IHNlbGYuYXBwZW5kX3Rvb2xiYXJfYnV0dG9uKHNlbGYudG9vbGJhciwKKyAgICAgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19ESVNQTEFZX0ZJTEUsCisgICAgICAgICAgICBoaWMuSUNPTl9TRVRUSU5HU19IT1ZFUl9GSUxFLAorICAgICAgICAgICAgIlZpZXcgYWRkaXRpb25hbCBidWlsZCBzZXR0aW5ncyIsCisgICAgICAgICAgICBzZWxmLnNldHRpbmdzX2J1dHRvbl9jbGlja2VkX2NiKQorCisgICAgICAgIHNlbGYuZGV0YWlsc190b3BfYnV0dG9ucyA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihzZWxmLnRvb2xiYXIpCisKKyAgICBkZWYgX3JlbW92ZV9hbGxfd2lkZ2V0KHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoY2hpbGQpCisgICAgICAgIGNoaWxkcmVuID0gc2VsZi5ib3hfZ3JvdXBfYXJlYS5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnJlbW92ZShjaGlsZCkKKyAgICAgICAgY2hpbGRyZW4gPSBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMuZ2V0X2NoaWxkcmVuKCkgb3IgW10KKyAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLnJlbW92ZShjaGlsZCkKKworICAgIGRlZiBzaG93X3BhZ2Uoc2VsZiwgc3RlcCk6CisgICAgICAgIHNlbGYuYnVpbGRfc3VjY2VlZGVkID0gKHN0ZXAgPT0gc2VsZi5idWlsZGVyLklNQUdFX0dFTkVSQVRFRCkKKyAgICAgICAgaW1hZ2VfYWRkciA9IHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLmltYWdlX2FkZHIKKyAgICAgICAgaW1hZ2VfbmFtZXMgPSBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5pbWFnZV9uYW1lcworICAgICAgICBpZiBzZWxmLmJ1aWxkX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIG1hY2hpbmUgPSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5jdXJyX21hY2gKKyAgICAgICAgICAgIGJhc2VfaW1hZ2UgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgICAgICBsYXllcnMgPSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5sYXllcnMKKyAgICAgICAgICAgIHBrZ19udW0gPSAiJXMiICUgbGVuKHNlbGYuYnVpbGRlci5wYWNrYWdlX21vZGVsLmdldF9zZWxlY3RlZF9wYWNrYWdlcygpKQorICAgICAgICAgICAgbG9nX2ZpbGUgPSBzZWxmLmJ1aWxkZXIuY3VycmVudF9sb2dmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dfbnVtID0gIk4vQSIKKyAgICAgICAgICAgIGxvZ19maWxlID0gTm9uZQorCisgICAgICAgICMgcmVtb3ZlCisgICAgICAgIGZvciBidXR0b25faWQsIGJ1dHRvbiBpbiBzZWxmLmJ1dHRvbl9pZHMuaXRlbXMoKToKKyAgICAgICAgICAgIGJ1dHRvbi5kaXNjb25uZWN0KGJ1dHRvbl9pZCkKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2FsbF93aWRnZXQoKQorCisgICAgICAgICMgcmVwYWNrCisgICAgICAgIHNlbGYucGFja19zdGFydChzZWxmLmRldGFpbHNfdG9wX2J1dHRvbnMsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgc2VsZi5idWlsZF9yZXN1bHQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuaW1hZ2Vfc2F2ZWQgb3IgKHNlbGYuYnVpbGRfc3VjY2VlZGVkIGFuZCBzZWxmLmJ1aWxkZXIuY3VycmVudF9zdGVwID09IHNlbGYuYnVpbGRlci5JTUFHRV9HRU5FUkFUSU5HKToKKyAgICAgICAgICAgICMgYnVpbGRpbmcgaXMgdGhlIHByZXZpb3VzIHN0ZXAKKyAgICAgICAgICAgIGljb24gPSBndGsuSW1hZ2UoKQorICAgICAgICAgICAgcGl4bWFwX3BhdGggPSBoaWMuSUNPTl9JTkRJX0NPTkZJUk1fRklMRQorICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuUlVOTklORworICAgICAgICAgICAgcGl4X2J1ZmZlciA9IGd0ay5nZGsucGl4YnVmX25ld19mcm9tX2ZpbGUocGl4bWFwX3BhdGgpCisgICAgICAgICAgICBpY29uLnNldF9mcm9tX3BpeGJ1ZihwaXhfYnVmZmVyKQorICAgICAgICAgICAgdmFybGlzdCA9IFsiIl0KKyAgICAgICAgICAgIGlmIHNlbGYuaW1hZ2Vfc2F2ZWQ6CisgICAgICAgICAgICAgICAgdmFsbGlzdCA9IFsiWW91ciBpbWFnZSByZWNpcGUgaGFzIGJlZW4gc2F2ZWQiXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWxsaXN0ID0gWyJZb3VyIGltYWdlIGlzIHJlYWR5Il0KKyAgICAgICAgICAgIHNlbGYuYnVpbGRfcmVzdWx0ID0gc2VsZi5CdWlsZERldGFpbEJveCh2YXJsaXN0PXZhcmxpc3QsIHZhbGxpc3Q9dmFsbGlzdCwgaWNvbj1pY29uLCBjb2xvcj1jb2xvcikKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmJ1aWxkX3Jlc3VsdCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYnV0dG9ubGlzdCA9IFsiQnVpbGQgbmV3IGltYWdlIiwgIlNhdmUgaW1hZ2UgcmVjaXBlIiwgIlJ1biBpbWFnZSIsICJEZXBsb3kgaW1hZ2UiXQorCisgICAgICAgICMgTmFtZQorICAgICAgICBzZWxmLmltYWdlX3N0b3JlID0gW10KKyAgICAgICAgc2VsZi50b2dnbGVkX2ltYWdlID0gIiIKKyAgICAgICAgZGVmYXVsdF9pbWFnZV9zaXplID0gMAorICAgICAgICBzZWxmLm51bV90b2dnbGVkID0gMAorICAgICAgICBpID0gMAorICAgICAgICBmb3IgaW1hZ2VfbmFtZSBpbiBpbWFnZV9uYW1lczoKKyAgICAgICAgICAgIGltYWdlX3NpemUgPSBIb2JQYWdlLl9zaXplX3RvX3N0cmluZyhvcy5zdGF0KG9zLnBhdGguam9pbihpbWFnZV9hZGRyLCBpbWFnZV9uYW1lKSkuc3Rfc2l6ZSkKKworICAgICAgICAgICAgaW1hZ2VfYXR0ciA9ICgicnVuIiBpZiAoc2VsZi50ZXN0X3R5cGVfcnVubmFibGUoaW1hZ2VfbmFtZSkgYW5kIHNlbGYudGVzdF9tYWNoX3J1bm5hYmxlKGltYWdlX25hbWUpKSBlbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkZXBsb3kiIGlmIHNlbGYudGVzdF9kZXBsb3lhYmxlKGltYWdlX25hbWUpIGVsc2UgIiIpKQorICAgICAgICAgICAgaXNfdG9nZ2xlZCA9IChpbWFnZV9hdHRyICE9ICIiKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi50b2dnbGVkX2ltYWdlOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gKGxlbihpbWFnZV9uYW1lcykgLSAxKToKKyAgICAgICAgICAgICAgICAgICAgaXNfdG9nZ2xlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBpc190b2dnbGVkOgorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2ltYWdlX3NpemUgPSBpbWFnZV9zaXplCisgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlZF9pbWFnZSA9IGltYWdlX25hbWUKKworICAgICAgICAgICAgc3BsaXRfc3R1ZmYgPSBpbWFnZV9uYW1lLnNwbGl0KCcuJykKKyAgICAgICAgICAgIGlmICJyb290ZnMiIGluIHNwbGl0X3N0dWZmOgorICAgICAgICAgICAgICAgIGltYWdlX3R5cGUgPSBpbWFnZV9uYW1lWyhsZW4oc3BsaXRfc3R1ZmZbMF0pICsgbGVuKCIucm9vdGZzIikgKyAxKTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltYWdlX3R5cGUgPSBpbWFnZV9uYW1lWyhsZW4oc3BsaXRfc3R1ZmZbMF0pICsgMSk6XQorCisgICAgICAgICAgICBzZWxmLmltYWdlX3N0b3JlLmFwcGVuZCh7J25hbWUnOiBpbWFnZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBpbWFnZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiBpbWFnZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3RvZ2dsZWQnOiBpc190b2dnbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9hdHRyJzogaW1hZ2VfYXR0cix9KQorCisgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgIHNlbGYubnVtX3RvZ2dsZWQgKz0gaXNfdG9nZ2xlZAorCisgICAgICAgIGlzX3J1bm5hYmxlID0gc2VsZi5jcmVhdGVfYm90dG9tX2J1dHRvbnMoc2VsZi5idXR0b25saXN0LCBzZWxmLnRvZ2dsZWRfaW1hZ2UpCisKKyAgICAgICAgIyBHZW5lcmF0ZWQgaW1hZ2UgZmlsZXMgaW5mbworICAgICAgICB2YXJsaXN0ID0gWyJOYW1lOiAiLCAiRmlsZXMgY3JlYXRlZDogIiwgIkRpcmVjdG9yeTogIl0KKyAgICAgICAgdmFsbGlzdCA9IFtdCisKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoaW1hZ2VfbmFtZS5zcGxpdCgnLicpWzBdKQorICAgICAgICB2YWxsaXN0LmFwcGVuZCgnLCAgJy5qb2luKGZpbGVpdGVtWyd0eXBlJ10gZm9yIGZpbGVpdGVtIGluIHNlbGYuaW1hZ2Vfc3RvcmUpKQorICAgICAgICB2YWxsaXN0LmFwcGVuZChpbWFnZV9hZGRyKQorCisgICAgICAgIHZpZXdfZmlsZXNfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJWaWV3IGZpbGVzIikKKyAgICAgICAgdmlld19maWxlc19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYudmlld19maWxlc19jbGlja2VkX2NiLCBpbWFnZV9hZGRyKQorICAgICAgICB2aWV3X2ZpbGVzX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJPcGVuIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW1hZ2UgZmlsZXMiKQorICAgICAgICBvcGVuX2xvZ19idXR0b24gPSBOb25lCisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJPcGVuIGxvZyIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYub3Blbl9sb2dfY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgYnVpbGQncyBsb2cgZmlsZSIpCisgICAgICAgIHNlbGYuaW1hZ2VfZGV0YWlsID0gc2VsZi5EZXRhaWxCb3godmFybGlzdD12YXJsaXN0LCB2YWxsaXN0PXZhbGxpc3QsIGJ1dHRvbj12aWV3X2ZpbGVzX2J1dHRvbiwgYnV0dG9uMj1vcGVuX2xvZ19idXR0b24pCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmltYWdlX2RldGFpbCwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBUaGUgZGVmYXVsdCBrZXJuZWwgYm94IGZvciB0aGUgcWVtdSBpbWFnZXMKKyAgICAgICAgc2VsZi5zZWxfa2VybmVsID0gIiIKKyAgICAgICAgc2VsZi5rZXJuZWxfZGV0YWlsID0gTm9uZQorICAgICAgICBpZiAncWVtdScgaW4gaW1hZ2VfbmFtZToKKyAgICAgICAgICAgIHNlbGYuc2VsX2tlcm5lbCA9IHNlbGYuZ2V0X2tlcm5lbF9maWxlX25hbWUoKQorCisgICAgICAgICMgICAgdmFybGlzdCA9IFsiS2VybmVsOiAiXQorICAgICAgICAjICAgIHZhbGxpc3QgPSBbXQorICAgICAgICAjICAgIHZhbGxpc3QuYXBwZW5kKHNlbGYuc2VsX2tlcm5lbCkKKworICAgICAgICAjICAgIGNoYW5nZV9rZXJuZWxfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJDaGFuZ2UiKQorICAgICAgICAjICAgIGNoYW5nZV9rZXJuZWxfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmNoYW5nZV9rZXJuZWxfY2IpCisgICAgICAgICMgICAgY2hhbmdlX2tlcm5lbF9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQ2hhbmdlIHFlbXUga2VybmVsIGZpbGUiKQorICAgICAgICAjICAgIHNlbGYua2VybmVsX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249Y2hhbmdlX2tlcm5lbF9idXR0b24pCisgICAgICAgICMgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYua2VybmVsX2RldGFpbCwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIE1hY2hpbmUsIEltYWdlIHJlY2lwZSBhbmQgTGF5ZXJzCisgICAgICAgIGxheWVyX251bV9saW1pdCA9IDE1CisgICAgICAgIHZhcmxpc3QgPSBbIk1hY2hpbmU6ICIsICJJbWFnZSByZWNpcGU6ICIsICJMYXllcnM6ICJdCisgICAgICAgIHZhbGxpc3QgPSBbXQorICAgICAgICBzZWxmLnNldHRpbmdfZGV0YWlsID0gTm9uZQorICAgICAgICBpZiBzZWxmLmJ1aWxkX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIHZhbGxpc3QuYXBwZW5kKG1hY2hpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmlzX2N1c3RvbV9pbWFnZSgpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmluaXRpYWxfc2VsZWN0ZWRfaW1hZ2UgPT0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fOgorICAgICAgICAgICAgICAgICAgICBiYXNlX2ltYWdlID0iTmV3IGltYWdlIHJlY2lwZSIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYXNlX2ltYWdlID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW5pdGlhbF9zZWxlY3RlZF9pbWFnZSArICIgKGVkaXRlZCkiCisgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZChiYXNlX2ltYWdlKQorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgaSA+IGxheWVyX251bV9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB2YXJsaXN0LmFwcGVuZCgiIC0gIikKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIHZhbGxpc3QuYXBwZW5kKCIiKQorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAgICAgaWYgaSA+IGxheWVyX251bV9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGkgPT0gbGF5ZXJfbnVtX2xpbWl0OgorICAgICAgICAgICAgICAgICAgICB2YWxsaXN0LmFwcGVuZCgiYW5kIG1vcmUuLi4iKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhbGxpc3QuYXBwZW5kKGxheWVyKQorICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICAgICBlZGl0X2NvbmZpZ19idXR0b24gPSBIb2JBbHRCdXR0b24oIkVkaXQgY29uZmlndXJhdGlvbiIpCisgICAgICAgICAgICBlZGl0X2NvbmZpZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiRWRpdCBtYWNoaW5lIGFuZCBpbWFnZSByZWNpcGUiKQorICAgICAgICAgICAgZWRpdF9jb25maWdfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRfY29uZmlnX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5zZXR0aW5nX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249ZWRpdF9jb25maWdfYnV0dG9uKQorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuc2V0dGluZ19kZXRhaWwsIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBQYWNrYWdlcyBpbmNsdWRlZCwgYW5kIFRvdGFsIGltYWdlIHNpemUKKyAgICAgICAgdmFybGlzdCA9IFsiUGFja2FnZXMgaW5jbHVkZWQ6ICIsICJUb3RhbCBpbWFnZSBzaXplOiAiXQorICAgICAgICB2YWxsaXN0ID0gW10KKyAgICAgICAgdmFsbGlzdC5hcHBlbmQocGtnX251bSkKKyAgICAgICAgdmFsbGlzdC5hcHBlbmQoZGVmYXVsdF9pbWFnZV9zaXplKQorICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9zaXplID0gZGVmYXVsdF9pbWFnZV9zaXplCisgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX3BhY2thZ2VzID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMKKyAgICAgICAgaWYgc2VsZi5idWlsZF9zdWNjZWVkZWQ6CisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbigiRWRpdCBwYWNrYWdlcyIpCisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJFZGl0IHRoZSBwYWNrYWdlcyBpbmNsdWRlZCBpbiB5b3VyIGltYWdlIikKKyAgICAgICAgICAgIGVkaXRfcGFja2FnZXNfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmVkaXRfcGFja2FnZXNfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGVsc2U6ICMgZ2V0IHRvIHRoaXMgcGFnZSBmcm9tICJNeSBpbWFnZXMiCisgICAgICAgICAgICBlZGl0X3BhY2thZ2VzX2J1dHRvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RldGFpbCA9IHNlbGYuRGV0YWlsQm94KHZhcmxpc3Q9dmFybGlzdCwgdmFsbGlzdD12YWxsaXN0LCBidXR0b249ZWRpdF9wYWNrYWdlc19idXR0b24pCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLnBhY2thZ2VfZGV0YWlsLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgICMgcGFjayB0aGUgYnV0dG9ucyBhdCB0aGUgYm90dG9tLCBhdCB0aGlzIHRpbWUgdGhleSBhcmUgYWxyZWFkeSBjcmVhdGVkLgorICAgICAgICBpZiBzZWxmLmJ1aWxkX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoc2VsZi5kZXRhaWxzX2JvdHRvbV9idXR0b25zLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGVsc2U6ICMgZm9yICJNeSBpbWFnZXMiIHBhZ2UKKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19zZXBhcmF0b3IgPSBndGsuSFNlcGFyYXRvcigpCisgICAgICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5kZXRhaWxzX3NlcGFyYXRvciwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucywgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorICAgICAgICBpZiBzZWxmLmtlcm5lbF9kZXRhaWwgYW5kIChub3QgaXNfcnVubmFibGUpOgorICAgICAgICAgICAgc2VsZi5rZXJuZWxfZGV0YWlsLmhpZGUoKQorICAgICAgICBzZWxmLmltYWdlX3NhdmVkID0gRmFsc2UKKworICAgIGRlZiB2aWV3X2ZpbGVzX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBpbWFnZV9hZGRyKToKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJ4ZGctb3BlbiAvJXMiICUgaW1hZ2VfYWRkciwgc2hlbGw9VHJ1ZSkKKworICAgIGRlZiBvcGVuX2xvZ19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbiwgbG9nX2ZpbGUpOgorICAgICAgICBpZiBsb2dfZmlsZToKKyAgICAgICAgICAgIGxvZ19maWxlID0gImZpbGU6Ly8vIiArIGxvZ19maWxlCisgICAgICAgICAgICBndGsuc2hvd191cmkoc2NyZWVuPWJ1dHRvbi5nZXRfc2NyZWVuKCksIHVyaT1sb2dfZmlsZSwgdGltZXN0YW1wPTApCisKKyAgICBkZWYgcmVmcmVzaF9wYWNrYWdlX2RldGFpbF9ib3goc2VsZiwgaW1hZ2Vfc2l6ZSk6CisgICAgICAgIHNlbGYucGFja2FnZV9kZXRhaWwudXBkYXRlX2xpbmVfd2lkZ2V0cygiVG90YWwgaW1hZ2Ugc2l6ZTogIiwgaW1hZ2Vfc2l6ZSkKKworICAgIGRlZiB0ZXN0X3R5cGVfcnVubmFibGUoc2VsZiwgaW1hZ2VfbmFtZSk6CisgICAgICAgIHR5cGVfcnVubmFibGUgPSBGYWxzZQorICAgICAgICBmb3IgdCBpbiBzZWxmLmJ1aWxkZXIucGFyYW1ldGVycy5ydW5uYWJsZV9pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIGltYWdlX25hbWUuZW5kc3dpdGgodCk6CisgICAgICAgICAgICAgICAgdHlwZV9ydW5uYWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gdHlwZV9ydW5uYWJsZQorCisgICAgZGVmIHRlc3RfbWFjaF9ydW5uYWJsZShzZWxmLCBpbWFnZV9uYW1lKToKKyAgICAgICAgbWFjaF9ydW5uYWJsZSA9IEZhbHNlCisgICAgICAgIGZvciB0IGluIHNlbGYuYnVpbGRlci5wYXJhbWV0ZXJzLnJ1bm5hYmxlX21hY2hpbmVfcGF0dGVybnM6CisgICAgICAgICAgICBpZiB0IGluIGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgbWFjaF9ydW5uYWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gbWFjaF9ydW5uYWJsZQorCisgICAgZGVmIHRlc3RfZGVwbG95YWJsZShzZWxmLCBpbWFnZV9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uY3Vycl9tYWNoLnN0YXJ0c3dpdGgoInFlbXUiKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBkZXBsb3lhYmxlID0gRmFsc2UKKyAgICAgICAgZm9yIHQgaW4gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuZGVwbG95YWJsZV9pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIGltYWdlX25hbWUuZW5kc3dpdGgodCk6CisgICAgICAgICAgICAgICAgZGVwbG95YWJsZSA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gZGVwbG95YWJsZQorCisgICAgZGVmIGdldF9rZXJuZWxfZmlsZV9uYW1lKHNlbGYsIGtlcm5lbF9hZGRyPSIiKToKKyAgICAgICAga2VybmVsX25hbWUgPSAiIgorCisgICAgICAgIGlmIG5vdCBrZXJuZWxfYWRkcjoKKyAgICAgICAgICAgIGtlcm5lbF9hZGRyID0gc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMuaW1hZ2VfYWRkcgorCisgICAgICAgIGZpbGVzID0gW2YgZm9yIGYgaW4gb3MubGlzdGRpcihrZXJuZWxfYWRkcikgaWYgZlswXSA8PiAnLiddCisgICAgICAgIGZvciBjaGVja19maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgY2hlY2tfZmlsZS5lbmRzd2l0aCgiLmJpbiIpOgorICAgICAgICAgICAgICAgIG5hbWVfc3BsaXRzID0gY2hlY2tfZmlsZS5zcGxpdCgiLiIpWzBdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5idWlsZGVyLnBhcmFtZXRlcnMua2VybmVsX2ltYWdlX3R5cGUgaW4gbmFtZV9zcGxpdHMuc3BsaXQoIi0iKToKKyAgICAgICAgICAgICAgICAgICAga2VybmVsX25hbWUgPSBjaGVja19maWxlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcmV0dXJuIGtlcm5lbF9uYW1lCisKKyAgICBkZWYgc2hvd19idWlsZGVkX2ltYWdlc19kaWFsb2coc2VsZiwgd2lkZ2V0LCBwcmltYXJ5X2FjdGlvbj0iIik6CisgICAgICAgIHRpdGxlID0gcHJpbWFyeV9hY3Rpb24gaWYgcHJpbWFyeV9hY3Rpb24gZWxzZSAiWW91ciBidWlsZGVkIGltYWdlcyIKKyAgICAgICAgZGlhbG9nID0gQ3J1bWJzRGlhbG9nKHRpdGxlLCBzZWxmLmJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGsuRElBTE9HX01PREFMIHwgZ3RrLkRJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKQorICAgICAgICBkaWFsb2cuc2V0X2JvcmRlcl93aWR0aCgxMikKKworICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsLnNldF91c2VfbWFya3VwKFRydWUpCisgICAgICAgIGxhYmVsLnNldF9hbGlnbm1lbnQoMC4wLCAwLjUpCisgICAgICAgIGxhYmVsLnNldF9wYWRkaW5nKDEyLDApCisgICAgICAgIGlmIHByaW1hcnlfYWN0aW9uID09ICJSdW4gaW1hZ2UiOgorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cCgiPHNwYW4gZm9udF9kZXNjPScxMic+U2VsZWN0IHRoZSBpbWFnZSBmaWxlIHlvdSB3YW50IHRvIHJ1bjo8L3NwYW4+IikKKyAgICAgICAgZWxpZiBwcmltYXJ5X2FjdGlvbiA9PSAiRGVwbG95IGltYWdlIjoKKyAgICAgICAgICAgIGxhYmVsLnNldF9tYXJrdXAoIjxzcGFuIGZvbnRfZGVzYz0nMTInPlNlbGVjdCB0aGUgaW1hZ2UgZmlsZSB5b3Ugd2FudCB0byBkZXBsb3k6PC9zcGFuPiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYWJlbC5zZXRfbWFya3VwKCI8c3BhbiBmb250X2Rlc2M9JzEyJz5TZWxlY3QgdGhlIGltYWdlIGZpbGUgeW91IHdhbnQgdG8gJXM8L3NwYW4+IiAlIHByaW1hcnlfYWN0aW9uKQorICAgICAgICBkaWFsb2cudmJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgIyBmaWx0ZXIgY3JlYXRlZCBpbWFnZXMgYXMgYWN0aW9uIGF0dHJpYnV0aW9uIChkZXBsb3kgb3IgcnVuKQorICAgICAgICBhY3Rpb25fYXR0ciA9ICIiCisgICAgICAgIGFjdGlvbl9pbWFnZXMgPSBbXQorICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gc2VsZi5pbWFnZV9zdG9yZToKKyAgICAgICAgICAgIGFjdGlvbl9hdHRyID0gZmlsZWl0ZW1bJ2FjdGlvbl9hdHRyJ10KKyAgICAgICAgICAgIGlmICAoYWN0aW9uX2F0dHIgPT0gJ3J1bicgYW5kIHByaW1hcnlfYWN0aW9uID09ICJSdW4gaW1hZ2UiKSBcCisgICAgICAgICAgICAgb3IgKGFjdGlvbl9hdHRyID09ICdkZXBsb3knIGFuZCBwcmltYXJ5X2FjdGlvbiA9PSAiRGVwbG95IGltYWdlIik6CisgICAgICAgICAgICAgICAgYWN0aW9uX2ltYWdlcy5hcHBlbmQoZmlsZWl0ZW0pCisKKyAgICAgICAgIyBwYWNrIHRoZSBjb3JyZXNwb25kaW5nICdydW5uYWJsZScgb3IgJ2RlcGxveScgcmFkaW9fYnV0dG9ucywgaWYgdGhlcmUgaGFzIG5vIG1vcmUgdGhhbiBvbmUgZmlsZS4KKyAgICAgICAgIyBhc3N1bWUgdGhhdCB0aGVyZSBkb2VzIG5vdCBib3RoIGhhdmUgJ2RlcGxveScgYW5kICdydW5uYWJsZScgZmlsZXMgaW4gdGhlIHNhbWUgYnVpbGRpbmcgcmVzdWx0CisgICAgICAgICMgaW4gcG9zc2libGUgYXMgZGVzaWduLgorICAgICAgICBjdXJyX3JvdyA9IDAKKyAgICAgICAgcm93cyA9IChsZW4oYWN0aW9uX2ltYWdlcykpIGlmIGxlbihhY3Rpb25faW1hZ2VzKSA8IDEwIGVsc2UgMTAKKyAgICAgICAgdGFibGUgPSBndGsuVGFibGUocm93cywgMTAsIFRydWUpCisgICAgICAgIHRhYmxlLnNldF9yb3dfc3BhY2luZ3MoNikKKyAgICAgICAgdGFibGUuc2V0X2NvbF9zcGFjaW5nKDAsIDEyKQorICAgICAgICB0YWJsZS5zZXRfY29sX3NwYWNpbmcoNSwgMTIpCisKKyAgICAgICAgc2VsX3BhcmVudF9idG4gPSBOb25lCisgICAgICAgIGZvciBmaWxlaXRlbSBpbiBhY3Rpb25faW1hZ2VzOgorICAgICAgICAgICAgc2VsX2J0biA9IGd0ay5SYWRpb0J1dHRvbihzZWxfcGFyZW50X2J0biwgZmlsZWl0ZW1bJ3R5cGUnXSkKKyAgICAgICAgICAgIHNlbF9wYXJlbnRfYnRuID0gc2VsX2J0biBpZiBub3Qgc2VsX3BhcmVudF9idG4gZWxzZSBzZWxfcGFyZW50X2J0bgorICAgICAgICAgICAgc2VsX2J0bi5zZXRfYWN0aXZlKGZpbGVpdGVtWydpc190b2dnbGVkJ10pCisgICAgICAgICAgICBzZWxfYnRuLmNvbm5lY3QoJ3RvZ2dsZWQnLCBzZWxmLnRhYmxlX3NlbGVjdGVkX2NiLCBmaWxlaXRlbSkKKyAgICAgICAgICAgIGlmIGN1cnJfcm93IDwgMTA6CisgICAgICAgICAgICAgICAgdGFibGUuYXR0YWNoKHNlbF9idG4sIDAsIDQsIGN1cnJfcm93LCBjdXJyX3JvdyArIDEsIHhwYWRkaW5nPTI0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0YWJsZS5hdHRhY2goc2VsX2J0biwgNSwgOSwgY3Vycl9yb3cgLSAxMCwgY3Vycl9yb3cgLSA5LCB4cGFkZGluZz0yNCkKKyAgICAgICAgICAgIGN1cnJfcm93ICs9IDEKKworICAgICAgICBkaWFsb2cudmJveC5wYWNrX3N0YXJ0KHRhYmxlLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UsIHBhZGRpbmc9NikKKworICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbigiQ2FuY2VsIiwgZ3RrLlJFU1BPTlNFX0NBTkNFTCkKKyAgICAgICAgSG9iQWx0QnV0dG9uLnN0eWxlX2J1dHRvbihidXR0b24pCisKKyAgICAgICAgaWYgcHJpbWFyeV9hY3Rpb246CisgICAgICAgICAgICBidXR0b24gPSBkaWFsb2cuYWRkX2J1dHRvbihwcmltYXJ5X2FjdGlvbiwgZ3RrLlJFU1BPTlNFX1lFUykKKyAgICAgICAgICAgIEhvYkJ1dHRvbi5zdHlsZV9idXR0b24oYnV0dG9uKQorCisgICAgICAgIGRpYWxvZy5zaG93X2FsbCgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgICAgIGlmIHJlc3BvbnNlICE9IGd0ay5SRVNQT05TRV9ZRVM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgZmlsZWl0ZW0gaW4gc2VsZi5pbWFnZV9zdG9yZToKKyAgICAgICAgICAgIGlmIGZpbGVpdGVtWydpc190b2dnbGVkJ106CisgICAgICAgICAgICAgICAgaWYgZmlsZWl0ZW1bJ2FjdGlvbl9hdHRyJ10gPT0gJ3J1bic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRlci5ydW5xZW11X2ltYWdlKGZpbGVpdGVtWyduYW1lJ10sIHNlbGYuc2VsX2tlcm5lbCkKKyAgICAgICAgICAgICAgICBlbGlmIGZpbGVpdGVtWydhY3Rpb25fYXR0ciddID09ICdkZXBsb3knOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuZGVwbG95X2ltYWdlKGZpbGVpdGVtWyduYW1lJ10pCisKKyAgICBkZWYgdGFibGVfc2VsZWN0ZWRfY2Ioc2VsZiwgdGJ1dHRvbiwgaW1hZ2UpOgorICAgICAgICBpbWFnZVsnaXNfdG9nZ2xlZCddID0gdGJ1dHRvbi5nZXRfYWN0aXZlKCkKKyAgICAgICAgaWYgaW1hZ2VbJ2lzX3RvZ2dsZWQnXToKKyAgICAgICAgICAgIHNlbGYudG9nZ2xlZF9pbWFnZSA9IGltYWdlWyduYW1lJ10KKworICAgIGRlZiBjaGFuZ2Vfa2VybmVsX2NiKHNlbGYsIHdpZGdldCk6CisgICAgICAgIGtlcm5lbF9wYXRoID0gc2VsZi5idWlsZGVyLnNob3dfbG9hZF9rZXJuZWxfZGlhbG9nKCkKKyAgICAgICAgaWYga2VybmVsX3BhdGggYW5kIHNlbGYua2VybmVsX2RldGFpbDoKKyAgICAgICAgICAgIGltcG9ydCBvcy5wYXRoCisgICAgICAgICAgICBzZWxmLnNlbF9rZXJuZWwgPSBvcy5wYXRoLmJhc2VuYW1lKGtlcm5lbF9wYXRoKQorICAgICAgICAgICAgbWFya3VwID0gc2VsZi5rZXJuZWxfZGV0YWlsLmZvcm1hdF9saW5lKCJLZXJuZWw6ICIsIHNlbGYuc2VsX2tlcm5lbCkKKyAgICAgICAgICAgIGxhYmVsID0gKChzZWxmLmtlcm5lbF9kZXRhaWwuZ2V0X2NoaWxkcmVuKClbMF0pLmdldF9jaGlsZHJlbigpWzBdKS5nZXRfY2hpbGRyZW4oKVswXQorICAgICAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisKKyAgICBkZWYgY3JlYXRlX2JvdHRvbV9idXR0b25zKHNlbGYsIGJ1dHRvbmxpc3QsIGltYWdlX25hbWUpOgorICAgICAgICAjIENyZWF0ZSB0aGUgYnV0dG9ucyBhdCB0aGUgYm90dG9tCisgICAgICAgIGNyZWF0ZWQgPSBGYWxzZQorICAgICAgICBwYWNrZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmJ1dHRvbl9pZHMgPSB7fQorICAgICAgICBpc19ydW5uYWJsZSA9IEZhbHNlCisKKyAgICAgICAgIyBjcmVhdGUgYnV0dG9uICJEZXBsb3kgaW1hZ2UiCisgICAgICAgIG5hbWUgPSAiRGVwbG95IGltYWdlIgorICAgICAgICBpZiBuYW1lIGluIGJ1dHRvbmxpc3QgYW5kIHNlbGYudGVzdF9kZXBsb3lhYmxlKGltYWdlX25hbWUpOgorICAgICAgICAgICAgZGVwbG95X2J1dHRvbiA9IEhvYkJ1dHRvbignRGVwbG95IGltYWdlJykKKyAgICAgICAgICAgICNkZXBsb3lfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgICAgIGRlcGxveV9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQnVybiBhIGxpdmUgaW1hZ2UgdG8gYSBVU0IgZHJpdmUgb3IgZmxhc2ggbWVtb3J5IikKKyAgICAgICAgICAgIGRlcGxveV9idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgICAgIGJ1dHRvbl9pZCA9IGRlcGxveV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuZGVwbG95X2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICAgICAgc2VsZi5idXR0b25faWRzW2J1dHRvbl9pZF0gPSBkZXBsb3lfYnV0dG9uCisgICAgICAgICAgICBzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQoZGVwbG95X2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICAgICAgY3JlYXRlZCA9IFRydWUKKyAgICAgICAgICAgIHBhY2tlZCA9IFRydWUKKworICAgICAgICBuYW1lID0gIlJ1biBpbWFnZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0IGFuZCBzZWxmLnRlc3RfdHlwZV9ydW5uYWJsZShpbWFnZV9uYW1lKSBhbmQgc2VsZi50ZXN0X21hY2hfcnVubmFibGUoaW1hZ2VfbmFtZSk6CisgICAgICAgICAgICBpZiBjcmVhdGVkID09IFRydWU6CisgICAgICAgICAgICAgICAgIyBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAjbGFiZWwgPSBndGsuTGFiZWwoIiBvciAiKQorICAgICAgICAgICAgICAgICNzZWxmLmRldGFpbHNfYm90dG9tX2J1dHRvbnMucGFja19lbmQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICAgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiUnVuIGltYWdlIgorICAgICAgICAgICAgICAgIHJ1bl9idXR0b24gPSBIb2JBbHRCdXR0b24oIlJ1biBpbWFnZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgY3JlYXRlIGJ1dHRvbiAiUnVuIGltYWdlIiBhcyB0aGUgcHJpbWFyeSBidXR0b24KKyAgICAgICAgICAgICAgICBydW5fYnV0dG9uID0gSG9iQnV0dG9uKCJSdW4gaW1hZ2UiKQorICAgICAgICAgICAgICAgICNydW5fYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgICAgICAgICBydW5fYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgICAgICAgICAgcGFja2VkID0gVHJ1ZQorICAgICAgICAgICAgcnVuX2J1dHRvbi5zZXRfdG9vbHRpcF90ZXh0KCJTdGFydCB1cCBhbiBpbWFnZSB3aXRoIHFlbXUgZW11bGF0b3IiKQorICAgICAgICAgICAgYnV0dG9uX2lkID0gcnVuX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5ydW5fYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9pZHNbYnV0dG9uX2lkXSA9IHJ1bl9idXR0b24KKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5wYWNrX2VuZChydW5fYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBjcmVhdGVkID0gVHJ1ZQorICAgICAgICAgICAgaXNfcnVubmFibGUgPSBUcnVlCisKKyAgICAgICAgbmFtZSA9ICJTYXZlIGltYWdlIHJlY2lwZSIKKyAgICAgICAgaWYgbmFtZSBpbiBidXR0b25saXN0IGFuZCBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLmlzX2N1c3RvbV9pbWFnZSgpOgorICAgICAgICAgICAgc2F2ZV9idXR0b24gPSBIb2JBbHRCdXR0b24oIlNhdmUgaW1hZ2UgcmVjaXBlIikKKyAgICAgICAgICAgIHNhdmVfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIktlZXAgeW91ciBjaGFuZ2VzIHNhdmluZyB0aGVtIGFzIGFuIGltYWdlIHJlY2lwZSIpCisgICAgICAgICAgICBzYXZlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKG5vdCBzZWxmLmltYWdlX3NhdmVkKQorICAgICAgICAgICAgYnV0dG9uX2lkID0gc2F2ZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuc2F2ZV9idXR0b25fY2xpY2tlZF9jYikKKyAgICAgICAgICAgIHNlbGYuYnV0dG9uX2lkc1tidXR0b25faWRdID0gc2F2ZV9idXR0b24KKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5wYWNrX2VuZChzYXZlX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIG5hbWUgPSAiQnVpbGQgbmV3IGltYWdlIgorICAgICAgICBpZiBuYW1lIGluIGJ1dHRvbmxpc3Q6CisgICAgICAgICAgICAjIGNyZWF0ZSBidXR0b24gIkJ1aWxkIG5ldyBpbWFnZSIKKyAgICAgICAgICAgIGlmIHBhY2tlZDoKKyAgICAgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJCdWlsZCBuZXcgaW1hZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uID0gSG9iQnV0dG9uKCJCdWlsZCBuZXcgaW1hZ2UiKQorICAgICAgICAgICAgICAgIGJ1aWxkX25ld19idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgICAgICNidWlsZF9uZXdfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgICAgIHNlbGYuZGV0YWlsc19ib3R0b21fYnV0dG9ucy5wYWNrX2VuZChidWlsZF9uZXdfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgICAgICBidWlsZF9uZXdfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIHNjcmF0Y2giKQorICAgICAgICAgICAgYnV0dG9uX2lkID0gYnVpbGRfbmV3X2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5idWlsZF9uZXdfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9pZHNbYnV0dG9uX2lkXSA9IGJ1aWxkX25ld19idXR0b24KKworICAgICAgICByZXR1cm4gaXNfcnVubmFibGUKKworICAgIGRlZiBkZXBsb3lfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgaWYgc2VsZi50b2dnbGVkX2ltYWdlOgorICAgICAgICAgICAgaWYgc2VsZi5udW1fdG9nZ2xlZCA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuc2hvd19idWlsZGVkX2ltYWdlc19kaWFsb2coTm9uZSwgIkRlcGxveSBpbWFnZSIpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc2Vuc2l0aXZlKFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRlci5kZXBsb3lfaW1hZ2Uoc2VsZi50b2dnbGVkX2ltYWdlKQorCisgICAgZGVmIHJ1bl9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBpZiBzZWxmLnRvZ2dsZWRfaW1hZ2U6CisgICAgICAgICAgICBpZiBzZWxmLm51bV90b2dnbGVkID4gMToKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5zaG93X2J1aWxkZWRfaW1hZ2VzX2RpYWxvZyhOb25lLCAiUnVuIGltYWdlIikKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJ1bnFlbXVfaW1hZ2Uoc2VsZi50b2dnbGVkX2ltYWdlLCBzZWxmLnNlbF9rZXJuZWwpCisKKyAgICBkZWYgc2F2ZV9idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICB0b3BkaXIgPSBzZWxmLmJ1aWxkZXIuZ2V0X3RvcGRpcigpCisgICAgICAgIGltYWdlc19kaXIgPSB0b3BkaXIgKyAiL3JlY2lwZXMvaW1hZ2VzL2N1c3RvbS8iCisgICAgICAgIHNlbGYuYnVpbGRlci5lbnN1cmVfZGlyKGltYWdlc19kaXIpCisKKyAgICAgICAgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlID0gc2VsZi5idWlsZGVyLmltYWdlX2NvbmZpZ3VyYXRpb25fcGFnZS5jdXN0b21faW1hZ2Vfc2VsZWN0ZWQKKyAgICAgICAgaWYgc2VsZi5uYW1lX2ZpZWxkX3RlbXBsYXRlOgorICAgICAgICAgICAgaW1hZ2VfcGF0aCA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwucG5fcGF0aFtzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGVdCisgICAgICAgICAgICBpbWFnZV9pdGVyID0gc2VsZi5idWlsZGVyLnJlY2lwZV9tb2RlbC5nZXRfaXRlcihpbWFnZV9wYXRoKQorICAgICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbl9maWVsZF90ZW1wbGF0ZSA9IHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGltYWdlX2l0ZXIsIHNlbGYuYnVpbGRlci5yZWNpcGVfbW9kZWwuQ09MX0RFU0MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGUgPSAiIgorCisgICAgICAgIGRpYWxvZyA9IFNhdmVJbWFnZURpYWxvZyhpbWFnZXNfZGlyLCBzZWxmLm5hbWVfZmllbGRfdGVtcGxhdGUsIHNlbGYuZGVzY3JpcHRpb25fZmllbGRfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICJTYXZlIGltYWdlIHJlY2lwZSIsIHNlbGYuYnVpbGRlciwgZ3RrLkRJQUxPR19NT0RBTCB8IGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICAgICAgcmVzcG9uc2UgPSBkaWFsb2cucnVuKCkKKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQorCisgICAgZGVmIGJ1aWxkX25ld19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuaW5pdGlhdGVfbmV3X2J1aWxkX2FzeW5jKCkKKworICAgIGRlZiBlZGl0X2NvbmZpZ19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19jb25maWd1cmF0aW9uKCkKKworICAgIGRlZiBlZGl0X3BhY2thZ2VzX2J1dHRvbl9jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3BhY2thZ2VzKCkKKworICAgIGRlZiBteV9pbWFnZXNfYnV0dG9uX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfbG9hZF9teV9pbWFnZXNfZGlhbG9nKCkKKworICAgIGRlZiBzZXR0aW5nc19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICAjIENyZWF0ZSBhbiBhZHZhbmNlZCBzZXR0aW5ncyBkaWFsb2cKKyAgICAgICAgcmVzcG9uc2UsIHNldHRpbmdzX2NoYW5nZWQgPSBzZWxmLmJ1aWxkZXIuc2hvd19zaW1wbGVfc2V0dGluZ3NfZGlhbG9nKCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNldHRpbmdzX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmVwYXJzZV9wb3N0X2Fkdl9zZXR0aW5ncygpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGFja2FnZXNlbGVjdGlvbnBhZ2UucHkgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGFja2FnZXNlbGVjdGlvbnBhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2M2MmIzNgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wYWNrYWdlc2VsZWN0aW9ucGFnZS5weQpAQCAtMCwwICsxLDM1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisjIEF1dGhvcmVkIGJ5IFNoYW5lIFdhbmcgPHNoYW5lLndhbmdAaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdsaWIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iVmlld1RhYmxlLCBIb2JOb3RlYm9vaywgSG9iQWx0QnV0dG9uLCBIb2JCdXR0b24KK2Zyb20gYmIudWkuY3J1bWJzLmhvYmxpc3Rtb2RlbCBpbXBvcnQgUGFja2FnZUxpc3RNb2RlbAorZnJvbSBiYi51aS5jcnVtYnMuaG9icGFnZXMgaW1wb3J0IEhvYlBhZ2UKKworIworIyBQYWNrYWdlU2VsZWN0aW9uUGFnZQorIworY2xhc3MgUGFja2FnZVNlbGVjdGlvblBhZ2UgKEhvYlBhZ2UpOgorCisgICAgcGFnZXMgPSBbCisgICAgICAgIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ0luY2x1ZGVkIHBhY2thZ2VzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ1RoZSBwYWNrYWdlcyBjdXJyZW50bHkgaW5jbHVkZWQgZm9yIHlvdXIgaW1hZ2UnLAorICAgICAgICAgJ2ZpbHRlcicgICAgOiB7IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0lOQyA6IFtUcnVlXSB9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHBhY2thZ2VzIGJ5IG5hbWUnLAorICAgICAgICAgJ3NlYXJjaHRpcCcgOiAnRW50ZXIgYSBwYWNrYWdlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUGFja2FnZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAyNTAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnQnJvdWdodCBpbiBieSAoK290aGVycyknLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQiwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdiaW5iJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDM1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdJbmNsdWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9JTkMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnY2hlY2sgdG9nZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDEwMAorICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfSwgeworICAgICAgICAgJ25hbWUnICAgICAgOiAnQWxsIHBhY2thZ2VzJywKKyAgICAgICAgICd0b29sdGlwJyAgIDogJ0FsbCBwYWNrYWdlcyB0aGF0IGhhdmUgYmVlbiBidWlsdCcsCisgICAgICAgICAnZmlsdGVyJyAgICA6IHt9LAorICAgICAgICAgJ3NlYXJjaCcgICAgOiAnU2VhcmNoIHBhY2thZ2VzIGJ5IG5hbWUnLAorICAgICAgICAgJ3NlYXJjaHRpcCcgOiAnRW50ZXIgYSBwYWNrYWdlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUGFja2FnZSBuYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1JlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAyNTAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICB9CisgICAgXQorICAgIAorICAgIChJTkNMVURFRCwKKyAgICAgQUxMKSA9IHJhbmdlKDIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcik6CisgICAgICAgIHN1cGVyKFBhY2thZ2VTZWxlY3Rpb25QYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiRWRpdCBwYWNrYWdlcyIpCisKKyAgICAgICAgIyBzZXQgaW52aXNpYmxlIG1lbWJlcnMKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsCisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbCA9IHNlbGYuYnVpbGRlci5wYWNrYWdlX21vZGVsCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgaW5jbHVkZWRfY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmlucy5zZXRfY3VycmVudF9wYWdlKHNlbGYuSU5DTFVERUQpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5sYWJlbCA9IGd0ay5MYWJlbCgiUGFja2FnZXMgaW5jbHVkZWQ6IDBcblNlbGVjdGVkIHBhY2thZ2VzIHNpemU6IDAgTUIiKQorICAgICAgICBzZWxmLmV2ZW50Ym94ID0gc2VsZi5hZGRfb250b190b3BfYmFyKHNlbGYubGFiZWwsIDczKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ldmVudGJveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi5ncm91cF9hbGlnbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICAjIHNldCB2aXNpYmxlIG1lbWJlcnMKKyAgICAgICAgc2VsZi5pbnMgPSBIb2JOb3RlYm9vaygpCisgICAgICAgIHNlbGYudGFibGVzID0gW10gIyB3ZSBuZWVkIHRvIG1vZGlmeSB0YWJsZSB3aGVuIHRoZSBkaWFsb2cgaXMgc2hvd24KKworICAgICAgICBzZWFyY2hfbmFtZXMgPSBbXQorICAgICAgICBzZWFyY2hfdGlwcyA9IFtdCisgICAgICAgICMgYXBwZW5kIHRoZSB0YWIKKyAgICAgICAgZm9yIHBhZ2UgaW4gc2VsZi5wYWdlczoKKyAgICAgICAgICAgIGNvbHVtbnMgPSBwYWdlWydjb2x1bW5zJ10KKyAgICAgICAgICAgIG5hbWUgPSBwYWdlWyduYW1lJ10KKyAgICAgICAgICAgIHRhYiA9IEhvYlZpZXdUYWJsZShjb2x1bW5zLCBuYW1lKQorICAgICAgICAgICAgc2VhcmNoX25hbWVzLmFwcGVuZChwYWdlWydzZWFyY2gnXSkKKyAgICAgICAgICAgIHNlYXJjaF90aXBzLmFwcGVuZChwYWdlWydzZWFyY2h0aXAnXSkKKyAgICAgICAgICAgIGZpbHRlciA9IHBhZ2VbJ2ZpbHRlciddCisgICAgICAgICAgICBzb3J0X21vZGVsID0gc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBpbml0aWFsPVRydWUpCisgICAgICAgICAgICB0YWIuc2V0X21vZGVsKHNvcnRfbW9kZWwpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgidG9nZ2xlZCIsIHNlbGYudGFibGVfdG9nZ2xlZF9jYiwgbmFtZSkKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJidXR0b24tcmVsZWFzZS1ldmVudCIsIHNlbGYuYnV0dG9uX2NsaWNrX2NiKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoImNlbGwtZmFkZWlub3V0LXN0b3BwZWQiLCBzZWxmLmFmdGVyX2ZhZGVvdXRfY2hlY2tpbl9pbmNsdWRlLCBmaWx0ZXIpCisgICAgICAgICAgICBzZWxmLmlucy5hcHBlbmRfcGFnZSh0YWIsIHBhZ2VbJ25hbWUnXSwgcGFnZVsndG9vbHRpcCddKQorICAgICAgICAgICAgc2VsZi50YWJsZXMuYXBwZW5kKHRhYikKKworICAgICAgICBzZWxmLmlucy5zZXRfZW50cnkoc2VhcmNoX25hbWVzLCBzZWFyY2hfdGlwcykKKyAgICAgICAgc2VsZi5pbnMuc2VhcmNoLmNvbm5lY3QoImNoYW5nZWQiLCBzZWxmLnNlYXJjaF9lbnRyeV9jaGFuZ2VkKQorCisgICAgICAgICMgYWRkIGFsbCBpbnRvIHRoZSBkaWFsb2cKKyAgICAgICAgc2VsZi5ib3hfZ3JvdXBfYXJlYS5wYWNrX3N0YXJ0KHNlbGYuaW5zLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCisgICAgICAgIHNlbGYuYnV0dG9uX2JveCA9IGd0ay5IQm94KEZhbHNlLCA2KQorICAgICAgICBzZWxmLmJveF9ncm91cF9hcmVhLnBhY2tfc3RhcnQoc2VsZi5idXR0b25fYm94LCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24gPSBIb2JCdXR0b24oJ0J1aWxkIGltYWdlJykKKyAgICAgICAgI3NlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLnNldF9zaXplX3JlcXVlc3QoMjA1LCA0OSkKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiQnVpbGQgdGFyZ2V0IGltYWdlIikKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uc2V0X2ZsYWdzKGd0ay5DQU5fREVGQVVMVCkKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uZ3JhYl9kZWZhdWx0KCkKKyAgICAgICAgc2VsZi5idWlsZF9pbWFnZV9idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuYnVpbGRfaW1hZ2VfY2xpY2tlZF9jYikKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbiA9IEhvYkFsdEJ1dHRvbignQ2FuY2VsJykKKyAgICAgICAgc2VsZi5iYWNrX2J1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5iYWNrX2J1dHRvbl9jbGlja2VkX2NiKQorICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgZGVmIHNlYXJjaF9lbnRyeV9jaGFuZ2VkKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgaWYgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzOgorICAgICAgICAgICAgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzID0gRmFsc2UKKyAgICAgICAgZWxpZiBzZWxmLmlucy5wYWdlX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmlucy5wYWdlX2NoYW5nZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmZpbHRlcl9zZWFyY2goZW50cnkpCisgICAgICAgIGVsaWYgdGV4dCBub3QgaW4gc2VsZi5pbnMuc2VhcmNoX25hbWVzOgorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorCisgICAgZGVmIGZpbHRlcl9zZWFyY2goc2VsZiwgZW50cnkpOgorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBjdXJyZW50X3RhYiA9IHNlbGYuaW5zLmdldF9jdXJyZW50X3BhZ2UoKQorICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2N1cnJlbnRfdGFiXVsnZmlsdGVyJ10KKyAgICAgICAgZmlsdGVyW1BhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUVdID0gdGV4dAorICAgICAgICBzZWxmLnRhYmxlc1tjdXJyZW50X3RhYl0uc2V0X21vZGVsKHNlbGYucGFja2FnZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgc2VhcmNoX2RhdGE9dGV4dCkpCisgICAgICAgIGlmIHNlbGYucGFja2FnZV9tb2RlbC5maWx0ZXJlZF9uYiA9PSAwOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLmFkZF9ub19yZXN1bHRfYmFyKGVudHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zZXRfbm9fc2hvd19hbGwoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zaG93KCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLmhpZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS50b3BfYmFyOgorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5oaWRlKCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLnNob3coKQorICAgICAgICBpZiBlbnRyeS5nZXRfdGV4dCgpID09ICcnOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnRyeS5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBUcnVlKQorCisgICAgZGVmIGJ1dHRvbl9jbGlja19jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgcGF0aCwgY29sID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X2N1cnNvcigpCisgICAgICAgIHRyZWVfbW9kZWwgPSB3aWRnZXQudGFibGVfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpZiBwYXRoIGFuZCBjb2wuZ2V0X3RpdGxlKCkgIT0gJ0luY2x1ZGVkJzogIyBlbHNlIGFjdGl2YXRpb24gaXMgbGlrZWx5IGEgcmVtb3ZhbAorICAgICAgICAgICAgcHJvcGVydGllcyA9IHsnYmluYic6ICcnICwgJ25hbWUnOiAnJywgJ3NpemUnOicnLCAncmVjaXBlJzonJywgJ2ZpbGVzX2xpc3QnOicnfQorICAgICAgICAgICAgcHJvcGVydGllc1snYmluYiddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUGFja2FnZUxpc3RNb2RlbC5DT0xfQklOQikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ25hbWUnXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFBhY2thZ2VMaXN0TW9kZWwuQ09MX05BTUUpCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydzaXplJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9TSVpFKQorICAgICAgICAgICAgcHJvcGVydGllc1sncmVjaXBlJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9SQ1ApCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydmaWxlc19saXN0J10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBQYWNrYWdlTGlzdE1vZGVsLkNPTF9GTElTVCkKKworICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfcmVjaXBlX3Byb3BlcnR5X2RpYWxvZyhwcm9wZXJ0aWVzKQorCisgICAgZGVmIG9wZW5fbG9nX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uLCBsb2dfZmlsZSk6CisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgbG9nX2ZpbGUgPSAiZmlsZTovLy8iICsgbG9nX2ZpbGUKKyAgICAgICAgICAgIGd0ay5zaG93X3VyaShzY3JlZW49YnV0dG9uLmdldF9zY3JlZW4oKSwgdXJpPWxvZ19maWxlLCB0aW1lc3RhbXA9MCkKKworICAgIGRlZiBzaG93X3BhZ2Uoc2VsZiwgbG9nX2ZpbGUpOgorICAgICAgICBjaGlsZHJlbiA9IHNlbGYuYnV0dG9uX2JveC5nZXRfY2hpbGRyZW4oKSBvciBbXQorICAgICAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46CisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucmVtb3ZlKGNoaWxkKQorICAgICAgICAjIHJlLXBhY2tlZCB0aGUgYnV0dG9ucyBhcyByZXF1ZXN0LCBhZGQgdGhlICdvcGVuIGxvZycgYnV0dG9uIGlmIGJ1aWxkIHN1Y2Nlc3MKKyAgICAgICAgc2VsZi5idXR0b25fYm94LnBhY2tfZW5kKHNlbGYuYnVpbGRfaW1hZ2VfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIGlmIGxvZ19maWxlOgorICAgICAgICAgICAgb3Blbl9sb2dfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCJPcGVuIGxvZyIpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYub3Blbl9sb2dfY2xpY2tlZF9jYiwgbG9nX2ZpbGUpCisgICAgICAgICAgICBvcGVuX2xvZ19idXR0b24uc2V0X3Rvb2x0aXBfdGV4dCgiT3BlbiB0aGUgYnVpbGQncyBsb2cgZmlsZSIpCisgICAgICAgICAgICBzZWxmLmJ1dHRvbl9ib3gucGFja19lbmQob3Blbl9sb2dfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuYnV0dG9uX2JveC5wYWNrX2VuZChzZWxmLmJhY2tfYnV0dG9uLCBleHBhbmQ9RmFsc2UsIGZpbGw9RmFsc2UpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIGJ1aWxkX2ltYWdlX2NsaWNrZWRfY2Ioc2VsZiwgYnV0dG9uKToKKyAgICAgICAgc2VsZi5idWlsZGVyLnBhcnNpbmdfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLmJ1aWxkZXIuYnVpbGRfaW1hZ2UoKQorCisgICAgZGVmIHJlZnJlc2hfdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmlucy5yZXNldF9lbnRyeShzZWxmLmlucy5zZWFyY2gsIDApCisgICAgICAgIGZvciB0YWIgaW4gc2VsZi50YWJsZXM6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYudGFibGVzLmluZGV4KHRhYikKKyAgICAgICAgICAgIGZpbHRlciA9IHNlbGYucGFnZXNbaW5kZXhdWydmaWx0ZXInXQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzZWxmLnBhY2thZ2VfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIGluaXRpYWw9VHJ1ZSkpCisKKyAgICBkZWYgYmFja19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBpZiBzZWxmLmJ1aWxkZXIucHJldmlvdXNfc3RlcCA9PSAgc2VsZi5idWlsZGVyLklNQUdFX0dFTkVSQVRFRDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5yZXN0b3JlX2luaXRpYWxfc2VsZWN0ZWRfcGFja2FnZXMoKQorICAgICAgICAgICAgc2VsZi5yZWZyZXNoX3NlbGVjdGlvbigpCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIuc2hvd19pbWFnZV9kZXRhaWxzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X2NvbmZpZ3VyYXRpb24oKQorICAgICAgICBzZWxmLnJlZnJlc2hfdGFibGVzKCkKKworICAgIGRlZiByZWZyZXNoX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXMgPSBzZWxmLnBhY2thZ2VfbW9kZWwuZ2V0X3NlbGVjdGVkX3BhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24udXNlcl9zZWxlY3RlZF9wYWNrYWdlcyA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfdXNlcl9zZWxlY3RlZF9wYWNrYWdlcygpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzX251bSA9IGxlbihzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlcykKKyAgICAgICAgc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZSA9IHNlbGYucGFja2FnZV9tb2RlbC5nZXRfcGFja2FnZXNfc2l6ZSgpCisgICAgICAgIHNlbGVjdGVkX3BhY2thZ2VzX3NpemVfc3RyID0gSG9iUGFnZS5fc2l6ZV90b19zdHJpbmcoc2VsZWN0ZWRfcGFja2FnZXNfc2l6ZSkKKworICAgICAgICBpZiBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbWFnZV9wYWNrYWdlcyA9PSBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9wYWNrYWdlczoKKyAgICAgICAgICAgIGltYWdlX3RvdGFsX3NpemVfc3RyID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfc2l6ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2Vfb3ZlcmhlYWRfZmFjdG9yCisgICAgICAgICAgICBpbWFnZV9yb290ZnNfc2l6ZSA9IHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLmltYWdlX3Jvb3Rmc19zaXplIC8gMTAyNCAjIGltYWdlX3Jvb3Rmc19zaXplIGlzIEtCCisgICAgICAgICAgICBpbWFnZV9leHRyYV9zaXplID0gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uaW1hZ2VfZXh0cmFfc2l6ZSAvIDEwMjQgIyBpbWFnZV9leHRyYV9zaXplIGlzIEtCCisgICAgICAgICAgICBiYXNlX3NpemUgPSBpbWFnZV9vdmVyaGVhZF9mYWN0b3IgKiBzZWxlY3RlZF9wYWNrYWdlc19zaXplCisgICAgICAgICAgICBpbWFnZV90b3RhbF9zaXplID0gbWF4KGJhc2Vfc2l6ZSwgaW1hZ2Vfcm9vdGZzX3NpemUpICsgaW1hZ2VfZXh0cmFfc2l6ZQorICAgICAgICAgICAgaWYgInp5cHBlciIgaW4gc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcGFja2FnZXM6CisgICAgICAgICAgICAgICAgaW1hZ2VfdG90YWxfc2l6ZSArPSAoNTEyMDAgKiAxMDI0KQorICAgICAgICAgICAgaW1hZ2VfdG90YWxfc2l6ZV9zdHIgPSBIb2JQYWdlLl9zaXplX3RvX3N0cmluZyhpbWFnZV90b3RhbF9zaXplKQorCisgICAgICAgIHNlbGYubGFiZWwuc2V0X2xhYmVsKCJQYWNrYWdlcyBpbmNsdWRlZDogJXNcblNlbGVjdGVkIHBhY2thZ2VzIHNpemU6ICVzXG5Fc3RpbWF0ZWQgaW1hZ2Ugc2l6ZTogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRfcGFja2FnZXNfbnVtLCBzZWxlY3RlZF9wYWNrYWdlc19zaXplX3N0ciwgaW1hZ2VfdG90YWxfc2l6ZV9zdHIpKQorICAgICAgICBzZWxmLmlucy5zaG93X2luZGljYXRvcl9pY29uKCJJbmNsdWRlZCBwYWNrYWdlcyIsIHNlbGVjdGVkX3BhY2thZ2VzX251bSkKKworICAgIGRlZiB0b2dnbGVfaXRlbV9pZGxlX2NiKHNlbGYsIHBhdGgsIHZpZXdfdHJlZSwgY2VsbCwgcGFnZW5hbWUpOgorICAgICAgICBpZiBub3Qgc2VsZi5wYWNrYWdlX21vZGVsLnBhdGhfaW5jbHVkZWQocGF0aCk6CisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuaW5jbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoLCBiaW5iPSJVc2VyIFNlbGVjdGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJlX2ZhZGVvdXRfY2hlY2tvdXRfaW5jbHVkZSh2aWV3X3RyZWUpCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuZXhjbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoKQorICAgICAgICAgICAgc2VsZi5yZW5kZXJfZmFkZW91dCh2aWV3X3RyZWUsIGNlbGwpCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX3NlbGVjdGlvbigpCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLnNldF9iYXNlX2ltYWdlKCkKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX2ltYWdlID0gc2VsZi5yZWNpcGVfbW9kZWwuX19jdXN0b21faW1hZ2VfXworICAgICAgICAgICAgc2VsZi5idWlsZGVyLnJjcHBrZ2xpc3RfcG9wdWxhdGVkKCkKKworICAgICAgICBzZWxmLmJ1aWxkZXIud2luZG93X3NlbnNpdGl2ZShUcnVlKQorICAgICAgICB2aWV3X21vZGVsID0gdmlld190cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHZwYXRoID0gc2VsZi5wYWNrYWdlX21vZGVsLmNvbnZlcnRfcGF0aF90b192cGF0aCh2aWV3X21vZGVsLCBwYXRoKQorICAgICAgICB2aWV3X3RyZWUuc2V0X2N1cnNvcih2cGF0aCkKKworICAgIGRlZiB0YWJsZV90b2dnbGVkX2NiKHNlbGYsIHRhYmxlLCBjZWxsLCB2aWV3X3BhdGgsIHRvZ2dsZWRfY29sdW1uaWQsIHZpZXdfdHJlZSwgcGFnZW5hbWUpOgorICAgICAgICAjIENsaWNrIHRvIGluY2x1ZGUgYSBwYWNrYWdlCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKEZhbHNlKQorICAgICAgICB2aWV3X21vZGVsID0gdmlld190cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHBhdGggPSBzZWxmLnBhY2thZ2VfbW9kZWwuY29udmVydF92cGF0aF90b19wYXRoKHZpZXdfbW9kZWwsIHZpZXdfcGF0aCkKKyAgICAgICAgZ2xpYi5pZGxlX2FkZChzZWxmLnRvZ2dsZV9pdGVtX2lkbGVfY2IsIHBhdGgsIHZpZXdfdHJlZSwgY2VsbCwgcGFnZW5hbWUpCisKKyAgICBkZWYgcHJlX2ZhZGVvdXRfY2hlY2tvdXRfaW5jbHVkZShzZWxmLCB0cmVlKToKKyAgICAgICAgI2FmdGVyIHRoZSBmYWRlb3V0IHRoZSB0YWJsZSB3aWxsIGJlIHNvcnRlZCBhcyBiZWZvcmUKKyAgICAgICAgc2VsZi5zb3J0X2NvbHVtbl9pZCA9IHNlbGYucGFja2FnZV9tb2RlbC5zb3J0X2NvbHVtbl9pZAorICAgICAgICBzZWxmLnNvcnRfb3JkZXIgPSBzZWxmLnBhY2thZ2VfbW9kZWwuc29ydF9vcmRlcgorCisgICAgICAgIHNlbGYucGFja2FnZV9tb2RlbC5yZXN5bmNfZmFkZW91dF9jb2x1bW4oc2VsZi5wYWNrYWdlX21vZGVsLmdldF9pdGVyX2ZpcnN0KCkpCisgICAgICAgICMgQ2hlY2sgb3V0IGEgbW9kZWwgd2hpY2ggYmFzZSBvbiB0aGUgY29sdW1uIENPTF9GQURFX0lOQywKKyAgICAgICAgIyBpdCdzIHNhdmUgdGhlIHByZXYgc3RhdGUgb2YgY29sdW1uIENPTF9JTkMgYmVmb3JlIGRvIGV4Y2x1ZGVfaXRlbQorICAgICAgICBmaWx0ZXIgPSB7IFBhY2thZ2VMaXN0TW9kZWwuQ09MX0ZBREVfSU5DICA6IFtUcnVlXX0KKyAgICAgICAgbmV3X21vZGVsID0gc2VsZi5wYWNrYWdlX21vZGVsLnRyZWVfbW9kZWwoZmlsdGVyLCBleGNsdWRlZF9pdGVtc19haGVhZD1UcnVlKQorICAgICAgICB0cmVlLnNldF9tb2RlbChuZXdfbW9kZWwpCisgICAgICAgIHRyZWUuZXhwYW5kX2FsbCgpCisKKyAgICBkZWYgZ2V0X2V4Y2x1ZGVkX3Jvd3Moc2VsZiwgdG9fcmVuZGVyX2NlbGxzLCBtb2RlbCwgaXQpOgorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHByZXZfY2VsbF9pc19hY3RpdmUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIFBhY2thZ2VMaXN0TW9kZWwuQ09MX0ZBREVfSU5DKQorICAgICAgICAgICAgY3Vycl9jZWxsX2lzX2FjdGl2ZSA9IG1vZGVsLmdldF92YWx1ZShpdCwgUGFja2FnZUxpc3RNb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgaWYgKHByZXZfY2VsbF9pc19hY3RpdmUgPT0gVHJ1ZSkgYW5kIChjdXJyX2NlbGxfaXNfYWN0aXZlID09IEZhbHNlKToKKyAgICAgICAgICAgICAgICB0b19yZW5kZXJfY2VsbHMuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICBpZiBtb2RlbC5pdGVyX2hhc19jaGlsZChpdCk6CisgICAgICAgICAgICAgICAgc2VsZi5nZXRfZXhjbHVkZWRfcm93cyh0b19yZW5kZXJfY2VsbHMsIG1vZGVsLCBtb2RlbC5pdGVyX2NoaWxkcmVuKGl0KSkKKyAgICAgICAgICAgIGl0ID0gbW9kZWwuaXRlcl9uZXh0KGl0KQorCisgICAgICAgIHJldHVybiB0b19yZW5kZXJfY2VsbHMKKworICAgIGRlZiByZW5kZXJfZmFkZW91dChzZWxmLCB0cmVlLCBjZWxsKToKKyAgICAgICAgaWYgKG5vdCBjZWxsKSBvciAobm90IHRyZWUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRvX3JlbmRlcl9jZWxscyA9IFtdCisgICAgICAgIHZpZXdfbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCisgICAgICAgIHNlbGYuZ2V0X2V4Y2x1ZGVkX3Jvd3ModG9fcmVuZGVyX2NlbGxzLCB2aWV3X21vZGVsLCB2aWV3X21vZGVsLmdldF9pdGVyX2ZpcnN0KCkpCisKKyAgICAgICAgY2VsbC5mYWRlb3V0KHRyZWUsIDEwMDAsIHRvX3JlbmRlcl9jZWxscykKKworICAgIGRlZiBhZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZShzZWxmLCB0YWJsZSwgY3RybCwgY2VsbCwgdHJlZSwgZmlsdGVyKToKKyAgICAgICAgc2VsZi5wYWNrYWdlX21vZGVsLnNvcnRfY29sdW1uX2lkID0gc2VsZi5zb3J0X2NvbHVtbl9pZAorICAgICAgICBzZWxmLnBhY2thZ2VfbW9kZWwuc29ydF9vcmRlciA9IHNlbGYuc29ydF9vcmRlcgorICAgICAgICB0cmVlLnNldF9tb2RlbChzZWxmLnBhY2thZ2VfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIpKQorICAgICAgICB0cmVlLmV4cGFuZF9hbGwoKQorCisgICAgZGVmIHNldF9wYWNrYWdlc19jdXJyX3RhYihzZWxmLCBjdXJyX3BhZ2UpOgorICAgICAgICBzZWxmLmlucy5zZXRfY3VycmVudF9wYWdlKGN1cnJfcGFnZSkKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3BlcnNpc3RlbnR0b29sdGlwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyN2MxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcGVyc2lzdGVudHRvb2x0aXAucHkKQEAgLTAsMCArMSwxODYgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCit0cnk6CisgICAgaW1wb3J0IGdjb25mCitleGNlcHQ6CisgICAgcGFzcworCitjbGFzcyBQZXJzaXN0ZW50VG9vbHRpcChndGsuV2luZG93KToKKyAgICAiIiIKKyAgICBBIHRvb2x0aXAgd2hpY2ggcGVyc2lzdHMgb25jZSBzaG93biB1bnRpbCB0aGUgdXNlciBkaXNtaXNzZXMgaXQgd2l0aCB0aGUgRXNjCisgICAga2V5IG9yIGJ5IGNsaWNraW5nIHRoZSBjbG9zZSBidXR0b24uCisKKyAgICAjIEZJWE1FOiB0aGUgUGVyc2lzdGVudFRvb2x0aXAgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9mZgorICAgICMgaXQuIFdlIGNhbid0IGRvIHRoaXMgd2l0aCBmb2N1cy1vdXQtZXZlbnQgYmVjdWFzZSBtb2RhbCBlbnN1cmVzIHdlIGhhdmUgZm9jdXM/CisKKyAgICBtYXJrdXA6IHNvbWUgUGFuZ28gdGV4dCBtYXJrdXAgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcAorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIHBhcmVudF93aW49Tm9uZSk6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18oc2VsZiwgZ3RrLldJTkRPV19QT1BVUCkKKworICAgICAgICAjIEluaGVyaXQgdGhlIHN5c3RlbSB0aGVtZSBmb3IgYSB0b29sdGlwCisgICAgICAgIHN0eWxlID0gZ3RrLnJjX2dldF9zdHlsZV9ieV9wYXRocyhndGsuc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdndGstdG9vbHRpcCcsICdndGstdG9vbHRpcCcsIGdvYmplY3QuVFlQRV9OT05FKQorICAgICAgICBzZWxmLnNldF9zdHlsZShzdHlsZSkKKworICAgICAgICAjIFRoZSBwbGFjZW1lbnQgb2YgdGhlIGNsb3NlIGJ1dHRvbiBvbiB0aGUgdGlwIHNob3VsZCByZWZsZWN0IGhvdyB0aGUKKyAgICAgICAgIyB3aW5kb3cgbWFuYWdlciBvZiB0aGUgdXNlcnMgc3lzdGVtIHBsYWNlcyBjbG9zZSBidXR0b25zLiBUcnkgdG8gcmVhZAorICAgICAgICAjIHRoZSBtZXRhY2l0eSBnY29uZiBrZXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsb3NlIGJ1dHRvbiBpcyBvbiB0aGUKKyAgICAgICAgIyBsZWZ0IG9yIHRoZSByaWdodC4KKyAgICAgICAgIyBJbiB0aGUgY2FzZSB0aGF0IHdlIGNhbid0IGRldGVybWluZSB0aGUgdXNlcnMgY29uZmlndXJhdGlvbiB3ZSBkZWZhdWx0CisgICAgICAgICMgdG8gY2xvc2UgYnV0dG9ucyBiZWluZyBvbiB0aGUgcmlnaHQuCisgICAgICAgIF9fYnV0dG9uX3JpZ2h0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGllbnQgPSBnY29uZi5jbGllbnRfZ2V0X2RlZmF1bHQoKQorICAgICAgICAgICAgb3JkZXIgPSBjbGllbnQuZ2V0X3N0cmluZygiL2FwcHMvbWV0YWNpdHkvZ2VuZXJhbC9idXR0b25fbGF5b3V0IikKKyAgICAgICAgICAgIGlmIG9yZGVyIGFuZCBvcmRlci5lbmRzd2l0aCgiOiIpOgorICAgICAgICAgICAgICAgIF9fYnV0dG9uX3JpZ2h0ID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFdlIG5lZWQgdG8gZW5zdXJlIHdlJ3JlIG9ubHkgc2hvd24gb25jZQorICAgICAgICBzZWxmLnNob3duID0gRmFsc2UKKworICAgICAgICAjIFdlIGRvbid0IHdhbnQgYW55IFdNIGRlY29yYXRpb25zCisgICAgICAgIHNlbGYuc2V0X2RlY29yYXRlZChGYWxzZSkKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIHNob3cgaW4gdGhlIHRhc2tiYXIgb3Igd2luZG93IHN3aXRjaGVyCisgICAgICAgIHNlbGYuc2V0X3NraXBfcGFnZXJfaGludChUcnVlKQorICAgICAgICBzZWxmLnNldF9za2lwX3Rhc2tiYXJfaGludChUcnVlKQorICAgICAgICAjIFdlIG11c3QgYmUgbW9kYWwgdG8gZW5zdXJlIHdlIGdyYWIgZm9jdXMgd2hlbiBwcmVzZW50ZWQgZnJvbSBhIGd0ay5EaWFsb2cKKyAgICAgICAgc2VsZi5zZXRfbW9kYWwoVHJ1ZSkKKworICAgICAgICBzZWxmLnNldF9ib3JkZXJfd2lkdGgoMCkKKyAgICAgICAgc2VsZi5zZXRfcG9zaXRpb24oZ3RrLldJTl9QT1NfTU9VU0UpCisgICAgICAgIHNlbGYuc2V0X29wYWNpdHkoMC45NSkKKworICAgICAgICAjIEVuc3VyZSBhIHJlYXNvbmFibGUgbWluaW11bSBzaXplCisgICAgICAgIHNlbGYuc2V0X2dlb21ldHJ5X2hpbnRzKHNlbGYsIDEwMCwgNTApCisKKyAgICAgICAgIyBTZXQgdGhpcyB3aW5kb3cgYXMgYSB0cmFuc2llbnQgd2luZG93IGZvciBwYXJlbnQobWFpbiB3aW5kb3cpCisgICAgICAgIGlmIHBhcmVudF93aW46CisgICAgICAgICAgICBzZWxmLnNldF90cmFuc2llbnRfZm9yKHBhcmVudF93aW4pCisgICAgICAgICAgICBzZWxmLnNldF9kZXN0cm95X3dpdGhfcGFyZW50KFRydWUpCisgICAgICAgICMgRHJhdyBvdXIgbGFiZWwgYW5kIGNsb3NlIGJ1dHRvbnMKKyAgICAgICAgaGJveCA9IGd0ay5IQm94KEZhbHNlLCAwKQorICAgICAgICBoYm94LnNob3coKQorICAgICAgICBzZWxmLmFkZChoYm94KQorCisgICAgICAgIGltZyA9IGd0ay5JbWFnZSgpCisgICAgICAgIGltZy5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfQ0xPU0UsIGd0ay5JQ09OX1NJWkVfQlVUVE9OKQorCisgICAgICAgIHNlbGYuYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisgICAgICAgIHNlbGYuYnV0dG9uLnNldF9pbWFnZShpbWcpCisgICAgICAgIHNlbGYuYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLl9kaXNtaXNzX2NiKQorICAgICAgICBzZWxmLmJ1dHRvbi5zZXRfZmxhZ3MoZ3RrLkNBTl9ERUZBVUxUKQorICAgICAgICBzZWxmLmJ1dHRvbi5ncmFiX2ZvY3VzKCkKKyAgICAgICAgc2VsZi5idXR0b24uc2hvdygpCisgICAgICAgIHZib3ggPSBndGsuVkJveChGYWxzZSwgMCkKKyAgICAgICAgdmJveC5zaG93KCkKKyAgICAgICAgdmJveC5wYWNrX3N0YXJ0KHNlbGYuYnV0dG9uLCBGYWxzZSwgRmFsc2UsIDApCisgICAgICAgIGlmIF9fYnV0dG9uX3JpZ2h0OgorICAgICAgICAgICAgaGJveC5wYWNrX2VuZCh2Ym94LCBUcnVlLCBUcnVlLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KHZib3gsIFRydWUsIFRydWUsIDApCisKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdChzZWxmLmJ1dHRvbikKKworICAgICAgICBiaW4gPSBndGsuSEJveChUcnVlLCA2KQorICAgICAgICBiaW4uc2V0X2JvcmRlcl93aWR0aCg2KQorICAgICAgICBiaW4uc2hvdygpCisgICAgICAgIHNlbGYubGFiZWwgPSBndGsuTGFiZWwoKQorICAgICAgICBzZWxmLmxhYmVsLnNldF9saW5lX3dyYXAoVHJ1ZSkKKyAgICAgICAgIyBXZSB3YW50IHRvIG1hdGNoIHRoZSBjb2xvdXJzIG9mIHRoZSBub3JtYWwgdG9vbHRpcHMsIGFzIGRpY3RhdGVkIGJ5CisgICAgICAgICMgdGhlIHVzZXJzIGd0aystMi4wIHRoZW1lLCB3aGVyZXZlciBwb3NzaWJsZSAtIG9uIHNvbWUgc3lzdGVtcyB0aGlzCisgICAgICAgICMgcmVxdWlyZXMgZXhwbGljaXRseSBzZXR0aW5nIGEgZmdfY29sb3IgZm9yIHRoZSBsYWJlbCB3aGljaCBtYXRjaGVzIHRoZQorICAgICAgICAjIHRvb2x0aXBfZmdfY29sb3IKKyAgICAgICAgc2V0dGluZ3MgPSBndGsuc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKQorICAgICAgICBjb2xvdXJzID0gc2V0dGluZ3MuZ2V0X3Byb3BlcnR5KCdndGstY29sb3Itc2NoZW1lJykuc3BsaXQoJ1xuJykKKyAgICAgICAgIyByZW1vdmUgYW55IGVtcHR5IGxpbmVzLCB0aGVyZSdzIGxpa2VseSB0byBiZSBhIHRyYWlsaW5nIG9uZSBhZnRlcgorICAgICAgICAjIGNhbGxpbmcgc3BsaXQgb24gYSBkaWN0aW9uYXJ5LWxpa2Ugc3RyaW5nCisgICAgICAgIGNvbG91cnMgPSBmaWx0ZXIoTm9uZSwgY29sb3VycykKKyAgICAgICAgZm9yIGNvbCBpbiBjb2xvdXJzOgorICAgICAgICAgICAgaXRlbSwgdmFsID0gY29sLnNwbGl0KCc6ICcpCisgICAgICAgICAgICBpZiBpdGVtID09ICd0b29sdGlwX2ZnX2NvbG9yJzoKKyAgICAgICAgICAgICAgICBzdHlsZSA9IHNlbGYubGFiZWwuZ2V0X3N0eWxlKCkKKyAgICAgICAgICAgICAgICBzdHlsZS5mZ1tndGsuU1RBVEVfTk9STUFMXSA9IGd0ay5nZGsuY29sb3JfcGFyc2UodmFsKQorICAgICAgICAgICAgICAgIHNlbGYubGFiZWwuc2V0X3N0eWxlKHN0eWxlKQorICAgICAgICAgICAgICAgIGJyZWFrICMgd2Ugb25seSBjYXJlIGZvciB0aGUgdG9vbHRpcF9mZ19jb2xvcgorCisgICAgICAgIHNlbGYubGFiZWwuc2V0X21hcmt1cChtYXJrdXApCisgICAgICAgIHNlbGYubGFiZWwuc2hvdygpCisgICAgICAgIGJpbi5hZGQoc2VsZi5sYWJlbCkKKyAgICAgICAgaGJveC5wYWNrX2VuZChiaW4sIFRydWUsIFRydWUsIDYpCisKKyAgICAgICAgIyBhZGQgdGhlIG9yaWdpbmFsIFVSTCBkaXNwbGF5IGZvciB1c2VyIHJlZmVyZW5jZQorICAgICAgICBpZiAnYSBocmVmJyBpbiBtYXJrdXA6CisgICAgICAgICAgICBoYm94LnNldF90b29sdGlwX3RleHQoc2VsZi5nZXRfbWFya3VwX3VybChtYXJrdXApKQorICAgICAgICBoYm94LnNob3coKQorCisgICAgICAgIHNlbGYuY29ubmVjdCgia2V5LXByZXNzLWV2ZW50Iiwgc2VsZi5fY2F0Y2hfZXNjX2NiKQorCisgICAgIiIiCisgICAgQ2FsbGJhY2sgd2hlbiB0aGUgUGVyc2lzdGVudFRvb2x0aXAncyBjbG9zZSBidXR0b24gaXMgY2xpY2tlZC4KKyAgICBIaWRlcyB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgIiIiCisgICAgZGVmIF9kaXNtaXNzX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYuaGlkZSgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAiIiIKKyAgICBDYWxsYmFjayB3aGVuIHRoZSBFc2Mga2V5IGlzIGRldGVjdGVkLiBIaWRlcyB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgIiIiCisgICAgZGVmIF9jYXRjaF9lc2NfY2Ioc2VsZiwgd2lkZ2V0LCBldmVudCk6CisgICAgICAgIGtleW5hbWUgPSBndGsuZ2RrLmtleXZhbF9uYW1lKGV2ZW50LmtleXZhbCkKKyAgICAgICAgaWYga2V5bmFtZSA9PSAiRXNjYXBlIjoKKyAgICAgICAgICAgIHNlbGYuaGlkZSgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAiIiIKKyAgICBDYWxsZWQgdG8gcHJlc2VudCB0aGUgUGVyc2lzdGVudFRvb2x0aXAuCisgICAgT3ZlcnJpZGVzIHRoZSBzdXBlcmNsYXNzZXMgc2hvdygpIG1ldGhvZCB0byBpbmNsdWRlIHN0YXRlIHRyYWNraW5nLgorICAgICIiIgorICAgIGRlZiBzaG93KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5zaG93bjoKKyAgICAgICAgICAgIHNlbGYuc2hvd24gPSBUcnVlCisgICAgICAgICAgICBndGsuV2luZG93LnNob3coc2VsZikKKworICAgICIiIgorICAgIENhbGxlZCB0byBoaWRlIHRoZSBQZXJzaXN0ZW50VG9vbHRpcC4KKyAgICBPdmVycmlkZXMgdGhlIHN1cGVyY2xhc3NlcyBoaWRlKCkgbWV0aG9kIHRvIGluY2x1ZGUgc3RhdGUgdHJhY2tpbmcuCisgICAgIiIiCisgICAgZGVmIGhpZGUoc2VsZik6CisgICAgICAgIHNlbGYuc2hvd24gPSBGYWxzZQorICAgICAgICBndGsuV2luZG93LmhpZGUoc2VsZikKKworICAgICIiIgorICAgIENhbGxlZCB0byBnZXQgdGhlIGh5cGVybGluayBVUkwgZnJvbSBtYXJrdXAgdGV4dC4KKyAgICAiIiIKKyAgICBkZWYgZ2V0X21hcmt1cF91cmwoc2VsZiwgbWFya3VwKToKKyAgICAgICAgdXJsID0gImh0dHA6IgorICAgICAgICBpZiBtYXJrdXAgYW5kIHR5cGUobWFya3VwKSA9PSBzdHI6CisgICAgICAgICAgICBzID0gbWFya3VwCisgICAgICAgICAgICBpZiAnaHR0cDonIGluIHM6CisgICAgICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICAgICAgdXJsID0gcmUuc2VhcmNoKCcoaHR0cDpbXixcXCAiXSspJywgcykuZ3JvdXAoMCkKKworICAgICAgICByZXR1cm4gdXJsCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3MucHkgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHJvZ3Jlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyOGExMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzcy5weQpAQCAtMCwwICsxLDIzIEBACitpbXBvcnQgZ3RrCisKK2NsYXNzIFByb2dyZXNzQmFyKGd0ay5EaWFsb2cpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgorCisgICAgICAgIGd0ay5EaWFsb2cuX19pbml0X18oc2VsZiwgZmxhZ3M9KGd0ay5ESUFMT0dfTU9EQUwgfCBndGsuRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpKQorICAgICAgICBzZWxmLnNldF90aXRsZSgiUGFyc2luZyBtZXRhZGF0YSwgcGxlYXNlIHdhaXQuLi4iKQorICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3NpemUoNTAwLCAwKQorICAgICAgICBzZWxmLnNldF90cmFuc2llbnRfZm9yKHBhcmVudCkKKyAgICAgICAgc2VsZi5wcm9ncmVzcyA9IGd0ay5Qcm9ncmVzc0JhcigpCisgICAgICAgIHNlbGYudmJveC5wYWNrX3N0YXJ0KHNlbGYucHJvZ3Jlc3MpCisgICAgICAgIHNlbGYuc2hvd19hbGwoKQorCisgICAgZGVmIHNldF90ZXh0KHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X3RleHQobXNnKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB4LCB5KToKKyAgICAgICAgc2VsZi5wcm9ncmVzcy5zZXRfZnJhY3Rpb24oZmxvYXQoeCkvZmxvYXQoeSkpCisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X3RleHQoIiUyZCAlJSIgJSAoeCoxMDAveSkpCisKKyAgICBkZWYgcHVsc2Uoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3Jlc3Muc2V0X3RleHQoIkxvYWRpbmcuLi4iKQorICAgICAgICBzZWxmLnByb2dyZXNzLnB1bHNlKCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wcm9ncmVzc2Jhci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJjNjYwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Byb2dyZXNzYmFyLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMSAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitmcm9tIGJiLnVpLmNydW1icy5ob2Jjb2xvciBpbXBvcnQgSG9iQ29sb3JzCisKK2NsYXNzIEhvYlByb2dyZXNzQmFyIChndGsuUHJvZ3Jlc3NCYXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ3RrLlByb2dyZXNzQmFyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc2V0X3Jjc3R5bGUoVHJ1ZSkKKyAgICAgICAgc2VsZi5wZXJjZW50YWdlID0gMAorCisgICAgZGVmIHNldF9yY3N0eWxlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJjc3R5bGUgPSBndGsuUmNTdHlsZSgpCisgICAgICAgIHJjc3R5bGUuZmdbMl0gPSBndGsuZ2RrLkNvbG9yKEhvYkNvbG9ycy5CTEFDSykKKyAgICAgICAgaWYgc3RhdHVzID09ICJzdG9wIjoKKyAgICAgICAgICAgIHJjc3R5bGUuYmdbM10gPSBndGsuZ2RrLkNvbG9yKEhvYkNvbG9ycy5XQVJOSU5HKQorICAgICAgICBlbGlmIHN0YXR1cyA9PSAiZmFpbCI6CisgICAgICAgICAgICByY3N0eWxlLmJnWzNdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuRVJST1IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByY3N0eWxlLmJnWzNdID0gZ3RrLmdkay5Db2xvcihIb2JDb2xvcnMuUlVOTklORykKKyAgICAgICAgc2VsZi5tb2RpZnlfc3R5bGUocmNzdHlsZSkKKworICAgIGRlZiBzZXRfdGl0bGUoc2VsZiwgdGV4dD1Ob25lKToKKyAgICAgICAgaWYgbm90IHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gIiIKKyAgICAgICAgdGV4dCArPSAiICUuMGYlJSIgJSBzZWxmLnBlcmNlbnRhZ2UKKyAgICAgICAgc2VsZi5zZXRfdGV4dCh0ZXh0KQorCisgICAgZGVmIHNldF9zdG9wX3RpdGxlKHNlbGYsIHRleHQ9Tm9uZSk6CisJaWYgbm90IHRleHQ6CisJICAgIHRleHQgPSAiIgorCXNlbGYuc2V0X3RleHQodGV4dCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXRfZnJhY3Rpb24oMCkKKyAgICAgICAgc2VsZi5zZXRfdGV4dCgiIikKKyAgICAgICAgc2VsZi5zZXRfcmNzdHlsZShUcnVlKQorICAgICAgICBzZWxmLnBlcmNlbnRhZ2UgPSAwCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIGZyYWN0aW9uKToKKyAgICAgICAgc2VsZi5wZXJjZW50YWdlID0gaW50KGZyYWN0aW9uICogMTAwKQorICAgICAgICBzZWxmLnNldF9mcmFjdGlvbihmcmFjdGlvbikKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9wdWNjaG8uZ2xhZGUgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHVjY2hvLmdsYWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTUzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcHVjY2hvLmdsYWRlCkBAIC0wLDAgKzEsNjA2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBnbGFkZS1pbnRlcmZhY2UgU1lTVEVNICJnbGFkZS0yLjAuZHRkIj4KKzwhLS1HZW5lcmF0ZWQgd2l0aCBnbGFkZTMgMy40LjUgb24gTW9uIE5vdiAxMCAxMjoyNDoxMiAyMDA4IC0tPgorPGdsYWRlLWludGVyZmFjZT4KKyAgPHdpZGdldCBjbGFzcz0iR3RrRGlhbG9nIiBpZD0iYnVpbGRfZGlhbG9nIj4KKyAgICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5TdGFydCBhIGJ1aWxkPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19DRU5URVJfT05fUEFSRU5UPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9ESUFMT0c8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfc2VwYXJhdG9yIj5GYWxzZTwvcHJvcGVydHk+CisgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJ2Ym94Ij4KKyAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJkaWFsb2ctdmJveDEiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgPGNoaWxkPgorICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RhYmxlIiBpZD0iYnVpbGRfdGFibGUiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9yb3dzIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuX2NvbHVtbnMiPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbHVtbl9zcGFjaW5nIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb3dfc3BhY2luZyI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9InN0YXR1c19hbGlnbm1lbnQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9wYWRkaW5nIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJveCIgaWQ9InN0YXR1c19oYm94Ij4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJzdGF0dXNfaW1hZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5vX3Nob3dfYWxsIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstZGlhbG9nLWVycm9yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJzdGF0dXNfbGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5JZiB5b3Ugc2VlIHRoaXMgdGV4dCBzb21ldGhpbmcgaXMgd3JvbmcuLi48L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDIiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtCdWlsZCBjb25maWd1cmF0aW9uJmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9ImltYWdlX2NvbWJvIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjc8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0iaW1hZ2VfbGFiZWwiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5JbWFnZTo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9ImRpc3RyaWJ1dGlvbl9jb21ibyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImRpc3RyaWJ1dGlvbl9sYWJlbCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkRpc3RyaWJ1dGlvbjo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDb21ib0JveCIgaWQ9Im1hY2hpbmVfY29tYm8iPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2Vuc2l0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj40PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJtYWNoaW5lX2xhYmVsIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlbnNpdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4xMjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TWFjaGluZTo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJyZWZyZXNoX2J1dHRvbiI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZW5zaXRpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVjZWl2ZXNfZGVmYXVsdCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLXJlZnJlc2g8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vfc3RvY2siPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrRW50cnkiIGlkPSJsb2NhdGlvbl9lbnRyeSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aWR0aF9jaGFycyI+MzI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWwzIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2NhdGlvbjo8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtMYWJlbCIgaWQ9ImxhYmVsMSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPiZsdDtiJmd0O1JlcG9zaXRvcnkmbHQ7L2ImZ3Q7PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX21hcmt1cCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQxIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0FsaWdubWVudCIgaWQ9ImFsaWdubWVudDIiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50MyI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjY8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgIDwvY2hpbGQ+CisgICAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iYWN0aW9uX2FyZWEiPgorICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0hCdXR0b25Cb3giIGlkPSJkaWFsb2ctYWN0aW9uX2FyZWExIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYXlvdXRfc3R5bGUiPkdUS19CVVRUT05CT1hfRU5EPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHBsYWNlaG9sZGVyLz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwYWNrX3R5cGUiPkdUS19QQUNLX0VORDwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgPC93aWRnZXQ+CisgICAgPC9jaGlsZD4KKyAgPC93aWRnZXQ+CisgIDx3aWRnZXQgY2xhc3M9Ikd0a0RpYWxvZyIgaWQ9ImRpYWxvZzIiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX0NFTlRFUl9PTl9QQVJFTlQ8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19XSU5ET1dfVFlQRV9ISU5UX0RJQUxPRzwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc19zZXBhcmF0b3IiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9InZib3giPgorICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9ImRpYWxvZy12Ym94MiI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjI8L3Byb3BlcnR5PgorICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVGFibGUiIGlkPSJ0YWJsZTIiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvcmRlcl93aWR0aCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibl9yb3dzIj43PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuX2NvbHVtbnMiPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbHVtbl9zcGFjaW5nIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb3dfc3BhY2luZyI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0xhYmVsIiBpZD0ibGFiZWw3Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Jmx0O2ImZ3Q7UmVwb3NpdG9yaWVzJmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X3BhZGRpbmciPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93MSI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcxIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfY2xpY2thYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idG9wX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvdHRvbV9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ5X29wdGlvbnMiPjwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0VudHJ5IiBpZD0iZW50cnkxIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+MjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDkiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj4mbHQ7YiZndDtBZGRpdGlvbmFsIHBhY2thZ2VzJmx0Oy9iJmd0OzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9tYXJrdXAiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ2Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhzY2FsZSI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDgiPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9jYXRpb246IDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj4yPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ3Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhzY2FsZSI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrSEJ1dHRvbkJveCIgaWQ9ImhidXR0b25ib3gxIj4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+NTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b243Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLXJlbW92ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b242Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWVkaXQ8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV9zdG9jayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4xPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtCdXR0b24iIGlkPSJidXR0b241Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlY2VpdmVzX2RlZmF1bHQiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWFkZDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNwb25zZV9pZCI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9hdHRhY2giPjE8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrQWxpZ25tZW50IiBpZD0iYWxpZ25tZW50NSI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDxwbGFjZWhvbGRlci8+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj4zPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrTGFiZWwiIGlkPSJsYWJlbDEwIj4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjEyPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TZWFyY2g6PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj41PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NjwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrRW50cnkiIGlkPSJlbnRyeTIiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X2F0dGFjaCI+MTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X2F0dGFjaCI+MzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRvcF9hdHRhY2giPjU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJib3R0b21fYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieV9vcHRpb25zIj48L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtBbGlnbm1lbnQiIGlkPSJhbGlnbm1lbnQ4Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfcGFkZGluZyI+MTI8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cyIj4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc19jbGlja2FibGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2NoaWxkPgorICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9hdHRhY2giPjM8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b3BfYXR0YWNoIj42PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYm90dG9tX2F0dGFjaCI+NzwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Inlfb3B0aW9ucyI+PC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImFjdGlvbl9hcmVhIj4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtIQnV0dG9uQm94IiBpZD0iZGlhbG9nLWFjdGlvbl9hcmVhMiI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGF5b3V0X3N0eWxlIj5HVEtfQlVUVE9OQk9YX0VORDwvcHJvcGVydHk+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0J1dHRvbiIgaWQ9ImJ1dHRvbjQiPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVjZWl2ZXNfZGVmYXVsdCI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Z3RrLWNsb3NlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3N0b2NrIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzcG9uc2VfaWQiPjA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgPHBhY2tpbmc+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icGFja190eXBlIj5HVEtfUEFDS19FTkQ8L3Byb3BlcnR5PgorICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgPC9jaGlsZD4KKyAgICAgIDwvd2lkZ2V0PgorICAgIDwvY2hpbGQ+CisgIDwvd2lkZ2V0PgorICA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJtYWluX3dpbmRvdyI+CisgICAgPGNoaWxkPgorICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9Im1haW5fd2luZG93X3Zib3giPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUb29sYmFyIiBpZD0ibWFpbl90b29sYmFyIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9Im1haW5fdG9vbGJ1dHRvbl9idWlsZCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkJ1aWxkPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1leGVjdXRlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgIDxwYWNraW5nPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgICAgICA8L3BhY2tpbmc+CisgICAgICAgIDwvY2hpbGQ+CisgICAgICAgIDxjaGlsZD4KKyAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWUGFuZWQiIGlkPSJ2cGFuZWQxIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorICAgICAgICAgICAgPGNoaWxkPgorICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InJlc3VsdHNfc2Nyb2xsZWR3aW5kb3ciPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgIDwvcGFja2luZz4KKyAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0icHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3ciPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8Y2hpbGQ+CisgICAgICAgICAgICAgICAgICA8cGxhY2Vob2xkZXIvPgorICAgICAgICAgICAgICAgIDwvY2hpbGQ+CisgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICAgICAgPC9jaGlsZD4KKyAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICA8cGFja2luZz4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MTwvcHJvcGVydHk+CisgICAgICAgICAgPC9wYWNraW5nPgorICAgICAgICA8L2NoaWxkPgorICAgICAgPC93aWRnZXQ+CisgICAgPC9jaGlsZD4KKyAgPC93aWRnZXQ+Cis8L2dsYWRlLWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9yZWNpcGVzZWxlY3Rpb25wYWdlLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3JlY2lwZXNlbGVjdGlvbnBhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNThkYjQzZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9yZWNpcGVzZWxlY3Rpb25wYWdlLnB5CkBAIC0wLDAgKzEsMzM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAxMiAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrCitpbXBvcnQgZ2xpYgorZnJvbSBiYi51aS5jcnVtYnMuaG9iY29sb3IgaW1wb3J0IEhvYkNvbG9ycworZnJvbSBiYi51aS5jcnVtYnMuaG9id2lkZ2V0IGltcG9ydCBIb2JWaWV3VGFibGUsIEhvYk5vdGVib29rLCBIb2JBbHRCdXR0b24sIEhvYkJ1dHRvbgorZnJvbSBiYi51aS5jcnVtYnMuaG9ibGlzdG1vZGVsIGltcG9ydCBSZWNpcGVMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYnBhZ2VzIGltcG9ydCBIb2JQYWdlCisKKyMKKyMgUmVjaXBlU2VsZWN0aW9uUGFnZQorIworY2xhc3MgUmVjaXBlU2VsZWN0aW9uUGFnZSAoSG9iUGFnZSk6CisgICAgcGFnZXMgPSBbCisgICAgICAgIHsKKyAgICAgICAgICduYW1lJyAgICAgIDogJ0luY2x1ZGVkIHJlY2lwZXMnLAorICAgICAgICAgJ3Rvb2x0aXAnICAgOiAnVGhlIHJlY2lwZXMgY3VycmVudGx5IGluY2x1ZGVkIGZvciB5b3VyIGltYWdlJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQyAgOiBbVHJ1ZV0sCisgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRSA6IFsncmVjaXBlJywgJ3BhY2thZ2Vncm91cCddIH0sCisgICAgICAgICAnc2VhcmNoJyAgICA6ICdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcmVjaXBlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUmVjaXBlIG5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0dyb3VwJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfR1JPVVAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnQnJvdWdodCBpbiBieSAoK290aGVycyknLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9CSU5CLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2JpbmInLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0luY2x1ZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfSU5DLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ2NoZWNrIHRvZ2dsZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiAxMDAKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICB9LCB7CisgICAgICAgICAnbmFtZScgICAgICA6ICdBbGwgcmVjaXBlcycsCisgICAgICAgICAndG9vbHRpcCcgICA6ICdBbGwgcmVjaXBlcyBpbiB5b3VyIGNvbmZpZ3VyZWQgbGF5ZXJzJywKKyAgICAgICAgICdmaWx0ZXInICAgIDogeyBSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEUgOiBbJ3JlY2lwZSddIH0sCisgICAgICAgICAnc2VhcmNoJyAgICA6ICdTZWFyY2ggcmVjaXBlcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcmVjaXBlIG5hbWUgdG8gZmluZCBpdCcsCisgICAgICAgICAnY29sdW1ucycgICA6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnUmVjaXBlIG5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX3N0eWxlJzogJ3RleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kJyAgIDogJ1RydWUnCisgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ0dyb3VwJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9pZCcgICA6IFJlY2lwZUxpc3RNb2RlbC5DT0xfR1JPVVAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnTGljZW5zZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0xJQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICd0ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCcgICA6ICdUcnVlJworICAgICAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9uYW1lJyA6ICdJbmNsdWRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9zdHlsZSc6ICdjaGVjayB0b2dnbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21pbicgIDogMTAwLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX21heCcgIDogMTAwCisgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgfSwgeworICAgICAgICAgJ25hbWUnICAgICAgOiAnUGFja2FnZSBHcm91cHMnLAorICAgICAgICAgJ3Rvb2x0aXAnICAgOiAnQWxsIHBhY2thZ2UgZ3JvdXBzIGluIHlvdXIgY29uZmlndXJlZCBsYXllcnMnLAorICAgICAgICAgJ2ZpbHRlcicgICAgOiB7IFJlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRSA6IFsncGFja2FnZWdyb3VwJ10gfSwKKyAgICAgICAgICdzZWFyY2gnICAgIDogJ1NlYXJjaCBwYWNrYWdlIGdyb3VwcyBieSBuYW1lJywKKyAgICAgICAgICdzZWFyY2h0aXAnIDogJ0VudGVyIGEgcGFja2FnZSBncm91cCBuYW1lIHRvIGZpbmQgaXQnLAorICAgICAgICAgJ2NvbHVtbnMnICAgOiBbeworICAgICAgICAgICAgICAgICAgICAgICAnY29sX25hbWUnIDogJ1BhY2thZ2UgZ3JvdXAgbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfaWQnICAgOiBSZWNpcGVMaXN0TW9kZWwuQ09MX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAndGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWluJyAgOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbWF4JyAgOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnICAgOiAnVHJ1ZScKKyAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfbmFtZScgOiAnSW5jbHVkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29sX2lkJyAgIDogUmVjaXBlTGlzdE1vZGVsLkNPTF9JTkMsCisgICAgICAgICAgICAgICAgICAgICAgICdjb2xfc3R5bGUnOiAnY2hlY2sgdG9nZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9taW4nICA6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF9tYXgnICA6IDEwMAorICAgICAgICAgICAgICAgICAgICAgIH1dCisgICAgICAgIH0KKyAgICBdCisgICAgCisgICAgKElOQ0xVREVELAorICAgICBBTEwsCisgICAgIFRBU0tTKSA9IHJhbmdlKDMpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlciA9IE5vbmUpOgorICAgICAgICBzdXBlcihSZWNpcGVTZWxlY3Rpb25QYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyLCAiU3RlcCAxIG9mIDI6IEVkaXQgcmVjaXBlcyIpCisKKyAgICAgICAgIyBzZXQgaW52aXNpYmxlIG1lbWJlcnMKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwgPSBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsCisKKyAgICAgICAgIyBjcmVhdGUgdmlzdWFsIGVsZW1lbnRzCisgICAgICAgIHNlbGYuY3JlYXRlX3Zpc3VhbF9lbGVtZW50cygpCisKKyAgICBkZWYgaW5jbHVkZWRfY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmlucy5zZXRfY3VycmVudF9wYWdlKHNlbGYuSU5DTFVERUQpCisKKyAgICBkZWYgY3JlYXRlX3Zpc3VhbF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5ldmVudGJveCA9IHNlbGYuYWRkX29udG9fdG9wX2JhcihOb25lLCA3MykKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZXZlbnRib3gsIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNlbGYuZ3JvdXBfYWxpZ24sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisKKyAgICAgICAgIyBzZXQgdmlzaWJsZSBtZW1iZXJzCisgICAgICAgIHNlbGYuaW5zID0gSG9iTm90ZWJvb2soKQorICAgICAgICBzZWxmLnRhYmxlcyA9IFtdICMgd2UgbmVlZCBtb2RpZnkgdGFibGUgd2hlbiB0aGUgZGlhbG9nIGlzIHNob3duCisKKyAgICAgICAgc2VhcmNoX25hbWVzID0gW10KKyAgICAgICAgc2VhcmNoX3RpcHMgPSBbXQorICAgICAgICAjIGFwcGVuZCB0aGUgdGFicyBpbiBvcmRlcgorICAgICAgICBmb3IgcGFnZSBpbiBzZWxmLnBhZ2VzOgorICAgICAgICAgICAgY29sdW1ucyA9IHBhZ2VbJ2NvbHVtbnMnXQorICAgICAgICAgICAgbmFtZSA9IHBhZ2VbJ25hbWUnXQorICAgICAgICAgICAgdGFiID0gSG9iVmlld1RhYmxlKGNvbHVtbnMsIG5hbWUpCisgICAgICAgICAgICBzZWFyY2hfbmFtZXMuYXBwZW5kKHBhZ2VbJ3NlYXJjaCddKQorICAgICAgICAgICAgc2VhcmNoX3RpcHMuYXBwZW5kKHBhZ2VbJ3NlYXJjaHRpcCddKQorICAgICAgICAgICAgZmlsdGVyID0gcGFnZVsnZmlsdGVyJ10KKyAgICAgICAgICAgIHNvcnRfbW9kZWwgPSBzZWxmLnJlY2lwZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgaW5pdGlhbD1UcnVlKQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzb3J0X21vZGVsKQorICAgICAgICAgICAgdGFiLmNvbm5lY3QoInRvZ2dsZWQiLCBzZWxmLnRhYmxlX3RvZ2dsZWRfY2IsIG5hbWUpCisgICAgICAgICAgICB0YWIuY29ubmVjdCgiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBzZWxmLmJ1dHRvbl9jbGlja19jYikKKyAgICAgICAgICAgIHRhYi5jb25uZWN0KCJjZWxsLWZhZGVpbm91dC1zdG9wcGVkIiwgc2VsZi5hZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZSwgZmlsdGVyKQorICAgICAgICAgICAgc2VsZi5pbnMuYXBwZW5kX3BhZ2UodGFiLCBwYWdlWyduYW1lJ10sIHBhZ2VbJ3Rvb2x0aXAnXSkKKyAgICAgICAgICAgIHNlbGYudGFibGVzLmFwcGVuZCh0YWIpCisKKyAgICAgICAgc2VsZi5pbnMuc2V0X2VudHJ5KHNlYXJjaF9uYW1lcywgc2VhcmNoX3RpcHMpCisgICAgICAgIHNlbGYuaW5zLnNlYXJjaC5jb25uZWN0KCJjaGFuZ2VkIiwgc2VsZi5zZWFyY2hfZW50cnlfY2hhbmdlZCkKKworICAgICAgICAjIGFkZCBhbGwgaW50byB0aGUgd2luZG93CisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19zdGFydChzZWxmLmlucywgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKworICAgICAgICBidXR0b25fYm94ID0gZ3RrLkhCb3goRmFsc2UsIDYpCisgICAgICAgIHNlbGYuYm94X2dyb3VwX2FyZWEucGFja19lbmQoYnV0dG9uX2JveCwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uID0gSG9iQnV0dG9uKCdCdWlsZCBwYWNrYWdlcycpCisgICAgICAgICNzZWxmLmJ1aWxkX3BhY2thZ2VzX2J1dHRvbi5zZXRfc2l6ZV9yZXF1ZXN0KDIwNSwgNDkpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLnNldF90b29sdGlwX3RleHQoIkJ1aWxkIHNlbGVjdGVkIHJlY2lwZXMgaW50byBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLnNldF9mbGFncyhndGsuQ0FOX0RFRkFVTFQpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLmdyYWJfZGVmYXVsdCgpCisgICAgICAgIHNlbGYuYnVpbGRfcGFja2FnZXNfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmJ1aWxkX3BhY2thZ2VzX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5idWlsZF9wYWNrYWdlc19idXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1GYWxzZSkKKworICAgICAgICBzZWxmLmJhY2tfYnV0dG9uID0gSG9iQWx0QnV0dG9uKCdDYW5jZWwnKQorICAgICAgICBzZWxmLmJhY2tfYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLmJhY2tfYnV0dG9uX2NsaWNrZWRfY2IpCisgICAgICAgIGJ1dHRvbl9ib3gucGFja19lbmQoc2VsZi5iYWNrX2J1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorCisgICAgZGVmIHNlYXJjaF9lbnRyeV9jaGFuZ2VkKHNlbGYsIGVudHJ5KToKKyAgICAgICAgdGV4dCA9IGVudHJ5LmdldF90ZXh0KCkKKyAgICAgICAgaWYgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzOgorICAgICAgICAgICAgc2VsZi5pbnMuc2VhcmNoX2ZvY3VzID0gRmFsc2UKKyAgICAgICAgZWxpZiBzZWxmLmlucy5wYWdlX2NoYW5nZWQ6CisgICAgICAgICAgICBzZWxmLmlucy5wYWdlX2NoYW5nZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmZpbHRlcl9zZWFyY2goZW50cnkpCisgICAgICAgIGVsaWYgdGV4dCBub3QgaW4gc2VsZi5pbnMuc2VhcmNoX25hbWVzOgorICAgICAgICAgICAgc2VsZi5maWx0ZXJfc2VhcmNoKGVudHJ5KQorCisgICAgZGVmIGZpbHRlcl9zZWFyY2goc2VsZiwgZW50cnkpOgorICAgICAgICB0ZXh0ID0gZW50cnkuZ2V0X3RleHQoKQorICAgICAgICBjdXJyZW50X3RhYiA9IHNlbGYuaW5zLmdldF9jdXJyZW50X3BhZ2UoKQorICAgICAgICBmaWx0ZXIgPSBzZWxmLnBhZ2VzW2N1cnJlbnRfdGFiXVsnZmlsdGVyJ10KKyAgICAgICAgZmlsdGVyW1JlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRV0gPSB0ZXh0CisgICAgICAgIHNlbGYudGFibGVzW2N1cnJlbnRfdGFiXS5zZXRfbW9kZWwoc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIsIHNlYXJjaF9kYXRhPXRleHQpKQorICAgICAgICBpZiBzZWxmLnJlY2lwZV9tb2RlbC5maWx0ZXJlZF9uYiA9PSAwOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2JhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmlucy5nZXRfbnRoX3BhZ2UoY3VycmVudF90YWIpLmFkZF9ub19yZXN1bHRfYmFyKGVudHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zZXRfbm9fc2hvd19hbGwoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5zaG93KCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLmhpZGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5pbnMuZ2V0X250aF9wYWdlKGN1cnJlbnRfdGFiKS50b3BfYmFyOgorICAgICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikudG9wX2Jhci5oaWRlKCkKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9udGhfcGFnZShjdXJyZW50X3RhYikuc2Nyb2xsLnNob3coKQorICAgICAgICBpZiBlbnRyeS5nZXRfdGV4dCgpID09ICcnOgorICAgICAgICAgICAgZW50cnkuc2V0X2ljb25fc2Vuc2l0aXZlKGd0ay5FTlRSWV9JQ09OX1NFQ09OREFSWSwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnRyeS5zZXRfaWNvbl9zZW5zaXRpdmUoZ3RrLkVOVFJZX0lDT05fU0VDT05EQVJZLCBUcnVlKQorCisgICAgZGVmIGJ1dHRvbl9jbGlja19jYihzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgcGF0aCwgY29sID0gd2lkZ2V0LnRhYmxlX3RyZWUuZ2V0X2N1cnNvcigpCisgICAgICAgIHRyZWVfbW9kZWwgPSB3aWRnZXQudGFibGVfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICBpZiBwYXRoIGFuZCBjb2wuZ2V0X3RpdGxlKCkgIT0gJ0luY2x1ZGVkJzogIyBlbHNlIGFjdGl2YXRpb24gaXMgbGlrZWx5IGEgcmVtb3ZhbAorICAgICAgICAgICAgcHJvcGVydGllcyA9IHsnc3VtbWFyeSc6ICcnLCAnbmFtZSc6ICcnLCAndmVyc2lvbic6ICcnLCAncmV2aXNpb24nOiAnJywgJ2JpbmInOiAnJywgJ2dyb3VwJzogJycsICdsaWNlbnNlJzogJycsICdob21lcGFnZSc6ICcnLCAnYnVndHJhY2tlcic6ICcnLCAnZGVzY3JpcHRpb24nOiAnJ30KKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3N1bW1hcnknXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfU1VNTUFSWSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ25hbWUnXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfTkFNRSkKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3ZlcnNpb24nXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfVkVSU0lPTikKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ3JldmlzaW9uJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX1JFVklTSU9OKQorICAgICAgICAgICAgcHJvcGVydGllc1snYmluYiddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9CSU5CKQorICAgICAgICAgICAgcHJvcGVydGllc1snZ3JvdXAnXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfR1JPVVApCisgICAgICAgICAgICBwcm9wZXJ0aWVzWydsaWNlbnNlJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0xJQykKKyAgICAgICAgICAgIHByb3BlcnRpZXNbJ2hvbWVwYWdlJ10gPSB0cmVlX21vZGVsLmdldF92YWx1ZSh0cmVlX21vZGVsLmdldF9pdGVyKHBhdGgpLCBSZWNpcGVMaXN0TW9kZWwuQ09MX0hPTUVQQUdFKQorICAgICAgICAgICAgcHJvcGVydGllc1snYnVndHJhY2tlciddID0gdHJlZV9tb2RlbC5nZXRfdmFsdWUodHJlZV9tb2RlbC5nZXRfaXRlcihwYXRoKSwgUmVjaXBlTGlzdE1vZGVsLkNPTF9CVUdUUkFDS0VSKQorICAgICAgICAgICAgcHJvcGVydGllc1snZGVzY3JpcHRpb24nXSA9IHRyZWVfbW9kZWwuZ2V0X3ZhbHVlKHRyZWVfbW9kZWwuZ2V0X2l0ZXIocGF0aCksIFJlY2lwZUxpc3RNb2RlbC5DT0xfREVTQykKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5zaG93X3JlY2lwZV9wcm9wZXJ0eV9kaWFsb2cocHJvcGVydGllcykKKworICAgIGRlZiBidWlsZF9wYWNrYWdlc19jbGlja2VkX2NiKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYucmVmcmVzaF90YWJsZXMoKQorICAgICAgICBzZWxmLmJ1aWxkZXIuYnVpbGRfcGFja2FnZXMoKQorCisgICAgZGVmIHJlZnJlc2hfdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmlucy5yZXNldF9lbnRyeShzZWxmLmlucy5zZWFyY2gsIDApCisgICAgICAgIGZvciB0YWIgaW4gc2VsZi50YWJsZXM6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYudGFibGVzLmluZGV4KHRhYikKKyAgICAgICAgICAgIGZpbHRlciA9IHNlbGYucGFnZXNbaW5kZXhdWydmaWx0ZXInXQorICAgICAgICAgICAgdGFiLnNldF9tb2RlbChzZWxmLnJlY2lwZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgc2VhcmNoX2RhdGE9IiIsIGluaXRpYWw9VHJ1ZSkpCisKKyAgICBkZWYgYmFja19idXR0b25fY2xpY2tlZF9jYihzZWxmLCBidXR0b24pOgorICAgICAgICBzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLnNldF9zZWxlY3RlZF9pbWFnZShzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlKQorICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9pbWFnZV9jb21ibyhzZWxmLmJ1aWxkZXIucmVjaXBlX21vZGVsLCBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5pbml0aWFsX3NlbGVjdGVkX2ltYWdlKQorICAgICAgICBzZWxmLmJ1aWxkZXIuaW1hZ2VfY29uZmlndXJhdGlvbl9wYWdlLnVwZGF0ZV9pbWFnZV9kZXNjKCkKKyAgICAgICAgc2VsZi5idWlsZGVyLnNob3dfY29uZmlndXJhdGlvbigpCisgICAgICAgIHNlbGYucmVmcmVzaF90YWJsZXMoKQorCisgICAgZGVmIHJlZnJlc2hfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmJ1aWxkZXIuY29uZmlndXJhdGlvbi5zZWxlY3RlZF9pbWFnZSA9IHNlbGYucmVjaXBlX21vZGVsLmdldF9zZWxlY3RlZF9pbWFnZSgpCisgICAgICAgIF8sIHNlbGYuYnVpbGRlci5jb25maWd1cmF0aW9uLnNlbGVjdGVkX3JlY2lwZXMgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfc2VsZWN0ZWRfcmVjaXBlcygpCisgICAgICAgIHNlbGYuaW5zLnNob3dfaW5kaWNhdG9yX2ljb24oIkluY2x1ZGVkIHJlY2lwZXMiLCBsZW4oc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfcmVjaXBlcykpCisKKyAgICBkZWYgdG9nZ2xlX2l0ZW1faWRsZV9jYihzZWxmLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYucmVjaXBlX21vZGVsLnBhdGhfaW5jbHVkZWQocGF0aCk6CisgICAgICAgICAgICBzZWxmLnJlY2lwZV9tb2RlbC5pbmNsdWRlX2l0ZW0oaXRlbV9wYXRoPXBhdGgsIGJpbmI9IlVzZXIgU2VsZWN0ZWQiLCBpbWFnZV9jb250ZW50cz1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJlX2ZhZGVvdXRfY2hlY2tvdXRfaW5jbHVkZSh2aWV3X3RyZWUsIHBhZ2VuYW1lKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuZXhjbHVkZV9pdGVtKGl0ZW1fcGF0aD1wYXRoKQorICAgICAgICAgICAgc2VsZi5yZW5kZXJfZmFkZW91dCh2aWV3X3RyZWUsIGNlbGwpCisKKyAgICAgICAgc2VsZi5yZWZyZXNoX3NlbGVjdGlvbigpCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1aWxkZXIuY3VzdG9taXplZDoKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlci5jdXN0b21pemVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5idWlsZGVyLmNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRfaW1hZ2UgPSBzZWxmLnJlY2lwZV9tb2RlbC5fX2N1c3RvbV9pbWFnZV9fCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucmNwcGtnbGlzdF9wb3B1bGF0ZWQoKQorCisgICAgICAgIHNlbGYuYnVpbGRlci53aW5kb3dfc2Vuc2l0aXZlKFRydWUpCisKKyAgICAgICAgdmlld19tb2RlbCA9IHZpZXdfdHJlZS5nZXRfbW9kZWwoKQorICAgICAgICB2cGF0aCA9IHNlbGYucmVjaXBlX21vZGVsLmNvbnZlcnRfcGF0aF90b192cGF0aCh2aWV3X21vZGVsLCBwYXRoKQorICAgICAgICB2aWV3X3RyZWUuc2V0X2N1cnNvcih2cGF0aCkKKworICAgIGRlZiB0YWJsZV90b2dnbGVkX2NiKHNlbGYsIHRhYmxlLCBjZWxsLCB2aWV3X3BhdGgsIHRvZ2dsZWRfY29sdW1uaWQsIHZpZXdfdHJlZSwgcGFnZW5hbWUpOgorICAgICAgICAjIENsaWNrIHRvIGluY2x1ZGUgYSByZWNpcGUKKyAgICAgICAgc2VsZi5idWlsZGVyLndpbmRvd19zZW5zaXRpdmUoRmFsc2UpCisgICAgICAgIHZpZXdfbW9kZWwgPSB2aWV3X3RyZWUuZ2V0X21vZGVsKCkKKyAgICAgICAgcGF0aCA9IHNlbGYucmVjaXBlX21vZGVsLmNvbnZlcnRfdnBhdGhfdG9fcGF0aCh2aWV3X21vZGVsLCB2aWV3X3BhdGgpCisgICAgICAgIGdsaWIuaWRsZV9hZGQoc2VsZi50b2dnbGVfaXRlbV9pZGxlX2NiLCBwYXRoLCB2aWV3X3RyZWUsIGNlbGwsIHBhZ2VuYW1lKQorCisgICAgZGVmIHByZV9mYWRlb3V0X2NoZWNrb3V0X2luY2x1ZGUoc2VsZiwgdHJlZSwgcGFnZW5hbWUpOgorICAgICAgICAjYWZ0ZXIgdGhlIGZhZGVvdXQgdGhlIHRhYmxlIHdpbGwgYmUgc29ydGVkIGFzIGJlZm9yZQorICAgICAgICBzZWxmLnNvcnRfY29sdW1uX2lkID0gc2VsZi5yZWNpcGVfbW9kZWwuc29ydF9jb2x1bW5faWQKKyAgICAgICAgc2VsZi5zb3J0X29yZGVyID0gc2VsZi5yZWNpcGVfbW9kZWwuc29ydF9vcmRlcgorCisgICAgICAgICNyZXN5bmMgdGhlIGluY2x1ZGVkIGl0ZW1zIHRvIGEgYmFja3VwIGZhZGUgaW5jbHVkZSBjb2x1bW4KKyAgICAgICAgaXQgPSBzZWxmLnJlY2lwZV9tb2RlbC5nZXRfaXRlcl9maXJzdCgpCisgICAgICAgIHdoaWxlIGl0OgorICAgICAgICAgICAgYWN0aXZlID0gc2VsZi5yZWNpcGVfbW9kZWwuZ2V0X3ZhbHVlKGl0LCBzZWxmLnJlY2lwZV9tb2RlbC5DT0xfSU5DKQorICAgICAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc2V0KGl0LCBzZWxmLnJlY2lwZV9tb2RlbC5DT0xfRkFERV9JTkMsIGFjdGl2ZSkKKyAgICAgICAgICAgIGl0ID0gc2VsZi5yZWNpcGVfbW9kZWwuaXRlcl9uZXh0KGl0KQorICAgICAgICAjIENoZWNrIG91dCBhIG1vZGVsIHdoaWNoIGJhc2Ugb24gdGhlIGNvbHVtbiBDT0xfRkFERV9JTkMsCisgICAgICAgICMgaXQncyBzYXZlIHRoZSBwcmV2IHN0YXRlIG9mIGNvbHVtbiBDT0xfSU5DIGJlZm9yZSBkbyBleGNsdWRlX2l0ZW0KKyAgICAgICAgZmlsdGVyID0geyBSZWNpcGVMaXN0TW9kZWwuQ09MX0ZBREVfSU5DOltUcnVlXSB9CisgICAgICAgIGlmIHBhZ2VuYW1lID09ICJJbmNsdWRlZCByZWNpcGVzIjoKKyAgICAgICAgICAgIGZpbHRlcltSZWNpcGVMaXN0TW9kZWwuQ09MX1RZUEVdID0gWydyZWNpcGUnLCAncGFja2FnZWdyb3VwJ10KKyAgICAgICAgZWxpZiBwYWdlbmFtZSA9PSAiQWxsIHJlY2lwZXMiOgorICAgICAgICAgICAgZmlsdGVyW1JlY2lwZUxpc3RNb2RlbC5DT0xfVFlQRV0gPSBbJ3JlY2lwZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWx0ZXJbUmVjaXBlTGlzdE1vZGVsLkNPTF9UWVBFXSA9IFsncGFja2FnZWdyb3VwJ10KKworICAgICAgICBuZXdfbW9kZWwgPSBzZWxmLnJlY2lwZV9tb2RlbC50cmVlX21vZGVsKGZpbHRlciwgZXhjbHVkZWRfaXRlbXNfYWhlYWQ9VHJ1ZSkKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwobmV3X21vZGVsKQorCisgICAgZGVmIHJlbmRlcl9mYWRlb3V0KHNlbGYsIHRyZWUsIGNlbGwpOgorICAgICAgICBpZiAobm90IGNlbGwpIG9yIChub3QgdHJlZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdG9fcmVuZGVyX2NlbGxzID0gW10KKyAgICAgICAgbW9kZWwgPSB0cmVlLmdldF9tb2RlbCgpCisgICAgICAgIGl0ID0gbW9kZWwuZ2V0X2l0ZXJfZmlyc3QoKQorICAgICAgICB3aGlsZSBpdDoKKyAgICAgICAgICAgIHBhdGggPSBtb2RlbC5nZXRfcGF0aChpdCkKKyAgICAgICAgICAgIHByZXZfY2VsbF9pc19hY3RpdmUgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIFJlY2lwZUxpc3RNb2RlbC5DT0xfRkFERV9JTkMpCisgICAgICAgICAgICBjdXJyX2NlbGxfaXNfYWN0aXZlID0gbW9kZWwuZ2V0X3ZhbHVlKGl0LCBSZWNpcGVMaXN0TW9kZWwuQ09MX0lOQykKKyAgICAgICAgICAgIGlmIChwcmV2X2NlbGxfaXNfYWN0aXZlID09IFRydWUpIGFuZCAoY3Vycl9jZWxsX2lzX2FjdGl2ZSA9PSBGYWxzZSk6CisgICAgICAgICAgICAgICAgdG9fcmVuZGVyX2NlbGxzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgaXQgPSBtb2RlbC5pdGVyX25leHQoaXQpCisKKyAgICAgICAgY2VsbC5mYWRlb3V0KHRyZWUsIDEwMDAsIHRvX3JlbmRlcl9jZWxscykKKworICAgIGRlZiBhZnRlcl9mYWRlb3V0X2NoZWNraW5faW5jbHVkZShzZWxmLCB0YWJsZSwgY3RybCwgY2VsbCwgdHJlZSwgZmlsdGVyKToKKyAgICAgICAgc2VsZi5yZWNpcGVfbW9kZWwuc29ydF9jb2x1bW5faWQgPSBzZWxmLnNvcnRfY29sdW1uX2lkCisgICAgICAgIHNlbGYucmVjaXBlX21vZGVsLnNvcnRfb3JkZXIgPSBzZWxmLnNvcnRfb3JkZXIKKyAgICAgICAgdHJlZS5zZXRfbW9kZWwoc2VsZi5yZWNpcGVfbW9kZWwudHJlZV9tb2RlbChmaWx0ZXIpKQorCisgICAgZGVmIHNldF9yZWNpcGVfY3Vycl90YWIoc2VsZiwgY3Vycl9wYWdlKToKKyAgICAgICAgc2VsZi5pbnMuc2V0X2N1cnJlbnRfcGFnZShjdXJyX3BhZ2UpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9jcnVtYnMvcnVubmluZ2J1aWxkLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3J1bm5pbmdidWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE5NTVkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3J1bm5pbmdidWlsZC5weQpAQCAtMCwwICsxLDU1MSBAQAorCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBndGsKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgcGFuZ28KK2Zyb20gYmIudWkuY3J1bWJzLmhvYmNvbG9yIGltcG9ydCBIb2JDb2xvcnMKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgSG9iV2FycENlbGxSZW5kZXJlclRleHQsIEhvYkNlbGxSZW5kZXJlclBpeGJ1ZgorCitjbGFzcyBSdW5uaW5nQnVpbGRNb2RlbCAoZ3RrLlRyZWVTdG9yZSk6CisgICAgKENPTF9MT0csIENPTF9QQUNLQUdFLCBDT0xfVEFTSywgQ09MX01FU1NBR0UsIENPTF9JQ09OLCBDT0xfQ09MT1IsIENPTF9OVU1fQUNUSVZFKSA9IHJhbmdlKDcpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuVHJlZVN0b3JlLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfSU5UKQorCisgICAgZGVmIGZhaWx1cmVfbW9kZWxfZmlsdGVyKHNlbGYsIG1vZGVsLCBpdCk6CisgICAgICAgIGNvbG9yID0gbW9kZWwuZ2V0KGl0LCBzZWxmLkNPTF9DT0xPUilbMF0KKyAgICAgICAgaWYgbm90IGNvbG9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGNvbG9yID09IEhvYkNvbG9ycy5FUlJPUiBvciBjb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORzoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGZhaWx1cmVfbW9kZWwoc2VsZik6CisgICAgICAgIG1vZGVsID0gc2VsZi5maWx0ZXJfbmV3KCkKKyAgICAgICAgbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLmZhaWx1cmVfbW9kZWxfZmlsdGVyKQorICAgICAgICByZXR1cm4gbW9kZWwKKworICAgIGRlZiBmb3JlYWNoX2NlbGxfZnVuYyhzZWxmLCBtb2RlbCwgcGF0aCwgaXRlciwgdXNyX2RhdGE9Tm9uZSk6CisgICAgICAgIGlmIG1vZGVsLmdldF92YWx1ZShpdGVyLCBzZWxmLkNPTF9JQ09OKSA9PSAiZ3RrLWV4ZWN1dGUiOgorICAgICAgICAgICAgbW9kZWwuc2V0KGl0ZXIsIHNlbGYuQ09MX0lDT04sICIiKQorCisgICAgZGVmIGNsb3NlX3Rhc2tfcmVmcmVzaChzZWxmKToKKyAgICAgICAgc2VsZi5mb3JlYWNoKHNlbGYuZm9yZWFjaF9jZWxsX2Z1bmMsIE5vbmUpCisKK2NsYXNzIFJ1bm5pbmdCdWlsZCAoZ29iamVjdC5HT2JqZWN0KToKKyAgICBfX2dzaWduYWxzX18gPSB7CisgICAgICAgICAgJ2J1aWxkLXN0YXJ0ZWQnICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLXN1Y2NlZWRlZCcgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLWZhaWxlZCcgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLWNvbXBsZXRlJyAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ2J1aWxkLWFib3J0ZWQnICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICAgJ3Rhc2stc3RhcnRlZCcgICAgOiAgKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2JqZWN0LlRZUEVfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ29iamVjdC5UWVBFX1BZT0JKRUNULCkpLAorICAgICAgICAgICdsb2ctZXJyb3InICAgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdsb2ctd2FybmluZycgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICdkaXNrLWZ1bGwnICAgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpLAorICAgICAgICAgICduby1wcm92aWRlcicgICAgIDogIChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9QWU9CSkVDVCwpKSwKKyAgICAgICAgICAnbG9nJyAgICAgICAgICAgICA6ICAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvYmplY3QuVFlQRV9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsKSksCisgICAgICAgICAgfQorICAgIHBpZHNfdG9fdGFzayA9IHt9CisgICAgdGFza3NfdG9faXRlciA9IHt9CisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHNlcXVlbnRpYWw9RmFsc2UpOgorICAgICAgICBnb2JqZWN0LkdPYmplY3QuX19pbml0X18gKHNlbGYpCisgICAgICAgIHNlbGYubW9kZWwgPSBSdW5uaW5nQnVpbGRNb2RlbCgpCisgICAgICAgIHNlbGYuc2VxdWVudGlhbCA9IHNlcXVlbnRpYWwKKyAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBGYWxzZQorCisgICAgZGVmIHJlc2V0IChzZWxmKToKKyAgICAgICAgc2VsZi5waWRzX3RvX3Rhc2suY2xlYXIoKQorICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXIuY2xlYXIoKQorICAgICAgICBzZWxmLm1vZGVsLmNsZWFyKCkKKworICAgIGRlZiBoYW5kbGVfZXZlbnQgKHNlbGYsIGV2ZW50LCBwYmFyPU5vbmUpOgorICAgICAgICAjIEhhbmRsZSBhbiBldmVudCBmcm9tIHRoZSBldmVudCBxdWV1ZSwgdGhpcyBtYXkgcmVzdWx0IGluIHVwZGF0aW5nCisgICAgICAgICMgdGhlIG1vZGVsIGFuZCB0aHVzIHRoZSBVSS4gT3IgaXQgbWF5IGJlIHRvIHRlbGwgdXMgdGhhdCB0aGUgYnVpbGQKKyAgICAgICAgIyBoYXMgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IChvciBub3QsIGFzIHRoZSBjYXNlIG1heSBiZS4pCisKKyAgICAgICAgcGFyZW50ID0gTm9uZQorICAgICAgICBwaWQgPSAwCisgICAgICAgIHBhY2thZ2UgPSBOb25lCisgICAgICAgIHRhc2sgPSBOb25lCisKKyAgICAgICAgIyBJZiB3ZSBoYXZlIGEgcGlkIGF0dGFjaGVkIHRvIHRoaXMgbWVzc2FnZS9ldmVudCB0cnkgYW5kIGdldCB0aGUKKyAgICAgICAgIyAocGFja2FnZSwgdGFzaykgcGFpciBmb3IgaXQuIElmIHdlIGdldCB0aGF0IHRoZW4gZ2V0IHRoZSBwYXJlbnQgaXRlcgorICAgICAgICAjIGZvciB0aGUgbWVzc2FnZS4KKyAgICAgICAgaWYgaGFzYXR0cihldmVudCwgJ3BpZCcpOgorICAgICAgICAgICAgcGlkID0gZXZlbnQucGlkCisgICAgICAgIGlmIGhhc2F0dHIoZXZlbnQsICdwcm9jZXNzJyk6CisgICAgICAgICAgICBwaWQgPSBldmVudC5wcm9jZXNzCisKKyAgICAgICAgaWYgcGlkIGFuZCBwaWQgaW4gc2VsZi5waWRzX3RvX3Rhc2s6CisgICAgICAgICAgICAocGFja2FnZSwgdGFzaykgPSBzZWxmLnBpZHNfdG9fdGFza1twaWRdCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQorCisgICAgICAgIGlmKGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKSk6CisgICAgICAgICAgICBpZiBldmVudC50YXNrcGlkID09IDAgb3IgZXZlbnQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJoYW5kbGUiLCBldmVudCkKKyAgICAgICAgICAgICMgRklYTUU6IHRoaXMgaXMgYSBoYWNrISBNb3JlIGluZm8gaW4gWW9jdG8gIzE0MzMKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3ppbGxhLnBva3lsaW51eC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzMsIHRlbXBvcmFyaWx5CisgICAgICAgICAgICAjIG1hc2sgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaXQncyBub3QgaW5mb3JtYXRpdmUgZm9yIHRoZSB1c2VyLgorICAgICAgICAgICAgaWYgZXZlbnQubXNnLnN0YXJ0c3dpdGgoIkV4ZWN1dGlvbiBvZiBldmVudCBoYW5kbGVyICdydW5fYnVpbGRzdGF0cycgZmFpbGVkIik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIChldmVudC5sZXZlbG5vIDwgbG9nZ2luZy5JTkZPIG9yCisgICAgICAgICAgICAgICAgZXZlbnQubXNnLnN0YXJ0c3dpdGgoIlJ1bm5pbmcgdGFzayIpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIyBkb24ndCBhZGQgdGhlc2UgdG8gdGhlIGxpc3QKKworICAgICAgICAgICAgaWYgZXZlbnQubGV2ZWxubyA+PSBsb2dnaW5nLkVSUk9SOgorICAgICAgICAgICAgICAgIGljb24gPSAiZGlhbG9nLWVycm9yIgorICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLkVSUk9SCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ctZXJyb3IiKQorICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID49IGxvZ2dpbmcuV0FSTklORzoKKyAgICAgICAgICAgICAgICBpY29uID0gImRpYWxvZy13YXJuaW5nIgorICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLldBUk5JTkcKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZy13YXJuaW5nIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWNvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICBjb2xvciA9IEhvYkNvbG9ycy5PSworCisgICAgICAgICAgICAjIGlmIHdlIGtub3cgd2hpY2ggcGFja2FnZSB3ZSBiZWxvbmcgdG8sIHdlJ2xsIGFwcGVuZCBvbnRvIGl0cyBsaXN0LgorICAgICAgICAgICAgIyBvdGhlcndpc2UsIHdlJ2xsIGp1bXAgdG8gdGhlIHRvcCBvZiB0aGUgbWFzdGVyIGxpc3QKKyAgICAgICAgICAgIGlmIHNlbGYuc2VxdWVudGlhbCBvciBub3QgcGFyZW50OgorICAgICAgICAgICAgICAgIHRyZWVfYWRkID0gc2VsZi5tb2RlbC5hcHBlbmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLnByZXBlbmQKKyAgICAgICAgICAgIHRyZWVfYWRkKHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgdGFzaywKKyAgICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRNZXNzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgaWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAwKSkKKworICAgICAgICAgICAgIyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgd2hpbGUgcHJvY2Vzc2luZyBhIHBhY2thZ2UKKyAgICAgICAgICAgICMgIChwYXJlbnQpLCBtYXJrIHRoZSB0YXNrIHdpdGggd2FybmluZyBjb2xvcjsKKyAgICAgICAgICAgICMgaW4gY2FzZSB0aGVyZSBhcmUgZXJyb3JzLCB0aGUgdXBkYXRlcyB3aWxsIGJlCisgICAgICAgICAgICAjICBoYW5kbGVkIG9uIFRhc2tGYWlsZWQuCisgICAgICAgICAgICBpZiBjb2xvciA9PSBIb2JDb2xvcnMuV0FSTklORyBhbmQgcGFyZW50OgorICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIGNvbG9yKQorICAgICAgICAgICAgICAgIGlmIHRhc2s6ICN0aGVuIHdlIGhhdmUgYSBwYXJlbnQgKHBhY2thZ2UpLCBhbmQgdXBkYXRlIGl0J3MgY29sb3IKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0sIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIChwYWNrYWdlLCB0YXNrKSA9IChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spCisKKyAgICAgICAgICAgICMgU2F2ZSBvdXQgdGhpcyBQSUQuCisgICAgICAgICAgICBzZWxmLnBpZHNfdG9fdGFza1twaWRdID0gKHBhY2thZ2UsIHRhc2spCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgcGFja2FnZSBpbiBvdXIgbW9kZWwuIElmIHNvIHRoZW4KKyAgICAgICAgICAgICMgdGhhdCBjYW4gYmUgdGhlIHBhcmVudCBmb3IgdGhlIHRhc2suIE90aGVyd2lzZSB3ZSBjcmVhdGUgYSBuZXcKKyAgICAgICAgICAgICMgdG9wIGxldmVsIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgIGlmICgocGFja2FnZSwgTm9uZSkgaW4gc2VsZi50YXNrc190b19pdGVyKToKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIE5vbmUpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcXVlbnRpYWw6CisgICAgICAgICAgICAgICAgICAgIGFkZCA9IHNlbGYubW9kZWwuYXBwZW5kCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYWRkID0gc2VsZi5tb2RlbC5wcmVwZW5kCisgICAgICAgICAgICAgICAgcGFyZW50ID0gYWRkKE5vbmUsIChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFja2FnZTogJXMiICUgKHBhY2thZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5PSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgICAgICAgICAgICAgIHNlbGYudGFza3NfdG9faXRlclsocGFja2FnZSwgTm9uZSldID0gcGFyZW50CisKKyAgICAgICAgICAgICMgQmVjYXVzZSB0aGlzIHBhcmVudCBwYWNrYWdlIG5vdyBoYXMgYW4gYWN0aXZlIGNoaWxkIG1hcmsgaXQgYXMKKyAgICAgICAgICAgICMgc3VjaC4KKyAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfSUNPTiwgImd0ay1leGVjdXRlIikKKyAgICAgICAgICAgIHBhcmVudF9jb2xvciA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IpWzBdCisgICAgICAgICAgICBpZiBwYXJlbnRfY29sb3IgIT0gSG9iQ29sb3JzLkVSUk9SIGFuZCBwYXJlbnRfY29sb3IgIT0gSG9iQ29sb3JzLldBUk5JTkc6CisgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUiwgSG9iQ29sb3JzLlJVTk5JTkcpCisKKyAgICAgICAgICAgICMgQWRkIGFuIGVudHJ5IGluIHRoZSBtb2RlbCBmb3IgdGhpcyB0YXNrCisgICAgICAgICAgICBpID0gc2VsZi5tb2RlbC5hcHBlbmQgKHBhcmVudCwgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXNrOiAlcyIgJSAodGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJndGstZXhlY3V0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvYkNvbG9ycy5SVU5OSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKworICAgICAgICAgICAgIyB1cGRhdGUgdGhlIHBhcmVudCdzIGFjdGl2ZSB0YXNrIGNvdW50CisgICAgICAgICAgICBudW1fYWN0aXZlID0gc2VsZi5tb2RlbC5nZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9OVU1fQUNUSVZFKVswXSArIDEKKyAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSwgbnVtX2FjdGl2ZSkKKworICAgICAgICAgICAgIyBTYXZlIG91dCB0aGUgaXRlciBzbyB0aGF0IHdlIGNhbiBmaW5kIGl0IHdoZW4gd2UgaGF2ZSBhIG1lc3NhZ2UKKyAgICAgICAgICAgICMgdGhhdCB3ZSBuZWVkIHRvIGF0dGFjaCB0byBhIHRhc2suCisgICAgICAgICAgICBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXSA9IGkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCBldmVudC5fbWVzc2FnZSkKKyAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQorICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50YXNrc190b19pdGVyWyhwYWNrYWdlLCBOb25lKV0KKworICAgICAgICAgICAgIyByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHBhcmVudCdzIGFjdGl2ZSBjb3VudAorICAgICAgICAgICAgbnVtX2FjdGl2ZSA9IHNlbGYubW9kZWwuZ2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfTlVNX0FDVElWRSlbMF0gLSAxCisgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX05VTV9BQ1RJVkUsIG51bV9hY3RpdmUpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgICAgICMgTWFyayB0aGUgdGFzayBhbmQgcGFyZW50IGFzIGZhaWxlZAorICAgICAgICAgICAgICAgIGljb24gPSAiZGlhbG9nLWVycm9yIgorICAgICAgICAgICAgICAgIGNvbG9yID0gSG9iQ29sb3JzLkVSUk9SCisKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQorICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5hcHBlbmQoY3VycmVudCwgKCdwYXN0ZWJpbicsIE5vbmUsIE5vbmUsIGxvZ2RhdGEsICdndGstZXJyb3InLCBIb2JDb2xvcnMuT0ssIDApKQorCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gKGN1cnJlbnQsIHBhcmVudCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGksIHNlbGYubW9kZWwuQ09MX0lDT04sIGljb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuQ09MX0NPTE9SLCBjb2xvcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBNYXJrIHRoZSBwYXJlbnQgcGFja2FnZSBhbmQgdGhlIHRhc2sgYXMgaW5hY3RpdmUsCisgICAgICAgICAgICAgICAgIyBidXQgbWFrZSBzdXJlIHRvIHByZXNlcnZlIGVycm9yLCB3YXJuaW5ncyBhbmQgYWN0aXZlCisgICAgICAgICAgICAgICAgIyBzdGF0ZXMKKyAgICAgICAgICAgICAgICBwYXJlbnRfY29sb3IgPSBzZWxmLm1vZGVsLmdldChwYXJlbnQsIHNlbGYubW9kZWwuQ09MX0NPTE9SKVswXQorICAgICAgICAgICAgICAgIHRhc2tfY29sb3IgPSBzZWxmLm1vZGVsLmdldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9DT0xPUilbMF0KKworICAgICAgICAgICAgICAgICMgTWFyayB0aGUgdGFzayBhcyBpbmFjdGl2ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KGN1cnJlbnQsIHNlbGYubW9kZWwuQ09MX0lDT04sIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgdGFza19jb2xvciAhPSBIb2JDb2xvcnMuRVJST1I6CisgICAgICAgICAgICAgICAgICAgIGlmIHRhc2tfY29sb3IgPT0gSG9iQ29sb3JzLldBUk5JTkc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLnNldChjdXJyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCAnZGlhbG9nLXdhcm5pbmcnKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQoY3VycmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5PSykKKworICAgICAgICAgICAgICAgICMgTWFyayB0aGUgcGFyZW50IGFzIGluYWN0aXZlCisgICAgICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yICE9IEhvYkNvbG9ycy5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyZW50X2NvbG9yID09IEhvYkNvbG9ycy5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCAiZGlhbG9nLXdhcm5pbmciKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC5zZXQocGFyZW50LCBzZWxmLm1vZGVsLkNPTF9JQ09OLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtX2FjdGl2ZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kZWwuc2V0KHBhcmVudCwgc2VsZi5tb2RlbC5DT0xfQ09MT1IsIEhvYkNvbG9ycy5PSykKKworICAgICAgICAgICAgIyBDbGVhciB0aGUgaXRlcnMgYW5kIHRoZSBwaWRzIHNpbmNlIHdoZW4gdGhlIHRhc2sgZ29lcyBhd2F5IHRoZQorICAgICAgICAgICAgIyBwaWQgd2lsbCBubyBsb25nZXIgYmUgdXNlZCBmb3IgbWVzc2FnZXMKKyAgICAgICAgICAgIGRlbCBzZWxmLnRhc2tzX3RvX2l0ZXJbKHBhY2thZ2UsIHRhc2spXQorICAgICAgICAgICAgZGVsIHNlbGYucGlkc190b190YXNrW3BpZF0KKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtc3RhcnRlZCIpCisgICAgICAgICAgICBzZWxmLm1vZGVsLnByZXBlbmQoTm9uZSwgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBTdGFydGVkICglcykiICUgdGltZS5zdHJmdGltZSgnJW0vJWQvJVkgJUg6JU06JVMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG9iQ29sb3JzLk9LLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICAgICAgICAgIGlmIHBiYXI6CisgICAgICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgICAgICAgICBwYmFyLnNldF90aXRsZShiYi5ldmVudC5nZXROYW1lKGV2ZW50KSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKToKKyAgICAgICAgICAgIGZhaWx1cmVzID0gaW50IChldmVudC5fZmFpbHVyZXMpCisgICAgICAgICAgICBzZWxmLm1vZGVsLnByZXBlbmQoTm9uZSwgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsZCBDb21wbGV0ZWQgKCVzKSIgJSB0aW1lLnN0cmZ0aW1lKCclbS8lZC8lWSAlSDolTTolUycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb2JDb2xvcnMuT0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQorCisgICAgICAgICAgICAjIEVtaXQgdGhlIGFwcHJvcHJpYXRlIHNpZ25hbCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBmYWlsdXJlcworICAgICAgICAgICAgaWYgc2VsZi5idWlsZGFib3J0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtYWJvcnRlZCIpCisgICAgICAgICAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBGYWxzZQorICAgICAgICAgICAgZWxpZiAoZmFpbHVyZXMgPj0gMSk6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtZmFpbGVkIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0ICgiYnVpbGQtc3VjY2VlZGVkIikKKyAgICAgICAgICAgICMgRW1pdCBhIGdlbmVyaWMgImJ1aWxkLWNvbXBsZXRlIiBzaWduYWwgZm9yIHRoaW5ncyB3aXNoaW5nIHRvCisgICAgICAgICAgICAjIGhhbmRsZSB3aGVuIHRoZSBidWlsZCBpcyBmaW5pc2hlZAorICAgICAgICAgICAgc2VsZi5lbWl0KCJidWlsZC1jb21wbGV0ZSIpCisgICAgICAgICAgICAjIHJlc2V0IHRoZSBhbGwgY2VsbCdzIGljb24gaW5kaWNhdG9yCisgICAgICAgICAgICBzZWxmLm1vZGVsLmNsb3NlX3Rhc2tfcmVmcmVzaCgpCisgICAgICAgICAgICBpZiBwYmFyOgorICAgICAgICAgICAgICAgIHBiYXIuc2V0X3RleHQoZXZlbnQubXNnKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGlza0Z1bGwpOgorICAgICAgICAgICAgc2VsZi5idWlsZGFib3J0ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmVtaXQoImRpc2stZnVsbCIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSAoZXZlbnQuZXJyb3IpKQorICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3Iuc3RhcnRzd2l0aCgiRXhpdGVkIHdpdGgiKToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYW4gZXhpdCBjb2RlIHdlJ3JlIGRvbmUsIGVtaXQgdGhlCisgICAgICAgICAgICAgICAgIyBnZW5lcmljIHNpZ25hbCBmb3IgdGhlIFVJIHRvIG5vdGlmeSB0aGUgdXNlcgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiYnVpbGQtY29tcGxldGUiKQorICAgICAgICAgICAgICAgICMgcmVzZXQgdGhlIGFsbCBjZWxsJ3MgaWNvbiBpbmRpY2F0b3IKKyAgICAgICAgICAgICAgICBzZWxmLm1vZGVsLmNsb3NlX3Rhc2tfcmVmcmVzaCgpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkKSBhbmQgcGJhcjoKKyAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCJMb2FkaW5nIGNhY2hlIikKKyAgICAgICAgICAgIHNlbGYucHJvZ3Jlc3NfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgcGJhci51cGRhdGUoMCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcykgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLnVwZGF0ZShldmVudC5jdXJyZW50LCBzZWxmLnByb2dyZXNzX3RvdGFsKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCkgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLnVwZGF0ZShzZWxmLnByb2dyZXNzX3RvdGFsLCBzZWxmLnByb2dyZXNzX3RvdGFsKQorICAgICAgICAgICAgcGJhci5oaWRlKCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpIGFuZCBwYmFyOgorICAgICAgICAgICAgaWYgZXZlbnQudG90YWwgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBiYXIuc2V0X3RpdGxlKCJQcm9jZXNzaW5nIHJlY2lwZXMiKQorICAgICAgICAgICAgc2VsZi5wcm9ncmVzc190b3RhbCA9IGV2ZW50LnRvdGFsCisgICAgICAgICAgICBwYmFyLnVwZGF0ZSgwLCBzZWxmLnByb2dyZXNzX3RvdGFsKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpIGFuZCBwYmFyOgorICAgICAgICAgICAgcGJhci51cGRhdGUoZXZlbnQuY3VycmVudCwgc2VsZi5wcm9ncmVzc190b3RhbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCkgYW5kIHBiYXI6CisgICAgICAgICAgICBwYmFyLmhpZGUoKQorICAgICAgICAjdXNpbmcgcnVucXVldWUgZXZlbnRzIGFzIG1hbnkgYXMgcG9zc2libGUgdG8gdXBkYXRlIHRoZSBwcm9ncmVzcyBiYXIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCAiVGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIiAlIChldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCk6CisgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJ3YXJuIiwgIlNldHNjZW5lIHRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyAtIHJlYWwgdGFzayB3aWxsIGJlIHJ1biBpbnN0ZWFkIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXZlbnQudGFza2lkLCBldmVudC50YXNrc3RyaW5nLCBldmVudC5leGl0Y29kZSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrU3RhcnRlZCkpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgIlJ1bm5pbmcgc2V0c2NlbmUgdGFzayAlZCBvZiAlZCAoJXMpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50LnN0YXRzLmFjdGl2ZSArIGV2ZW50LnN0YXRzLmZhaWxlZCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy50b3RhbCwgZXZlbnQudGFza3N0cmluZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50Lm5vZXhlYzoKKyAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUgPSAnbm9leGVjIHRhc2snCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFza3R5cGUgPSAndGFzaycKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJpbmZvIiwgIlJ1bm5pbmcgJXMgJXMgb2YgJXMgKElEOiAlcywgJXMpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhc2t0eXBlLCBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKyBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHMudG90YWwsIGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZykpCisgICAgICAgICAgICBtZXNzYWdlID0ge30KKyAgICAgICAgICAgIG1lc3NhZ2VbImV2ZW50bmFtZSJdID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICAgICAgICAgIG51bV9vZl9jb21wbGV0ZWQgPSBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5mYWlsZWQKKyAgICAgICAgICAgIG1lc3NhZ2VbImN1cnJlbnQiXSA9IG51bV9vZl9jb21wbGV0ZWQKKyAgICAgICAgICAgIG1lc3NhZ2VbInRvdGFsIl0gPSBldmVudC5zdGF0cy50b3RhbAorICAgICAgICAgICAgbWVzc2FnZVsidGl0bGUiXSA9ICIiCisgICAgICAgICAgICBtZXNzYWdlWyJ0YXNrIl0gPSBldmVudC50YXNrc3RyaW5nCisgICAgICAgICAgICBzZWxmLmVtaXQoInRhc2stc3RhcnRlZCIsIG1lc3NhZ2UpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMpOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiaW5mbyIsICJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSBmb3IgJXMlcyAoJXMpIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXZlbnQuX2lzX3J1bnRpbWUgYW5kICJydW50aW1lICIgb3IgIiIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2NhbmRpZGF0ZXMpKSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgibG9nIiwgImluZm8iLCAiY29uc2lkZXIgZGVmaW5pbmcgYSBQUkVGRVJSRURfUFJPVklERVIgZW50cnkgdG8gbWF0Y2ggJXMiICUgKGV2ZW50Ll9pdGVtKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKKyAgICAgICAgICAgIG1zZyA9ICIiCisgICAgICAgICAgICBpZiBldmVudC5fcnVudGltZToKKyAgICAgICAgICAgICAgICByID0gIlIiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHIgPSAiIgorCisgICAgICAgICAgICBleHRyYSA9ICcnCisgICAgICAgICAgICBpZiBub3QgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQuX2Nsb3NlX21hdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgJ1xuICAnLmpvaW4oZXZlbnQuX2Nsb3NlX21hdGNoZXMpCisKKyAgICAgICAgICAgIGlmIGV2ZW50Ll9kZXBlbmRlZXM6CisgICAgICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklc1xuIiAlIChyLCBldmVudC5faXRlbSwgIiwgIi5qb2luKGV2ZW50Ll9kZXBlbmRlZXMpLCByLCBleHRyYSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnJXNcbiIgJSAociwgZXZlbnQuX2l0ZW0sIGV4dHJhKQorICAgICAgICAgICAgaWYgZXZlbnQuX3JlYXNvbnM6CisgICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICgiJXNcbiIgJSByZWFzb24pCisgICAgICAgICAgICBzZWxmLmVtaXQoIm5vLXByb3ZpZGVyIiwgbXNnKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJsb2ciLCAiZXJyb3IiLCBtc2cpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICBpY29uID0gImRpYWxvZy13YXJuaW5nIgorICAgICAgICAgICAgY29sb3IgPSBIb2JDb2xvcnMuV0FSTklORworICAgICAgICAgICAgaWYgc2VsZi5zZXF1ZW50aWFsIG9yIG5vdCBwYXJlbnQ6CisgICAgICAgICAgICAgICAgdHJlZV9hZGQgPSBzZWxmLm1vZGVsLmFwcGVuZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cmVlX2FkZCA9IHNlbGYubW9kZWwucHJlcGVuZAorICAgICAgICAgICAgdHJlZV9hZGQocGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgKE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICB0YXNrLAorICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1zZywKKyAgICAgICAgICAgICAgICAgICAgICBpY29uLAorICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgIDApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXZlbnQsIChiYi5ldmVudC5CdWlsZEJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5Db25maWdQYXJzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXhpdFdhaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvbkNvbXBsZXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uUHJvZ3Jlc3MpKToKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImxvZyIsICJlcnJvciIsICJVbmtub3duIGV2ZW50OiAlcyIgJSAoZXZlbnQuZXJyb3IgaWYgaGFzYXR0cihldmVudCwgJ2Vycm9yJykgZWxzZSAnZXJyb3InKSkKKworICAgICAgICByZXR1cm4KKworCitkZWYgZG9fcGFzdGViaW4odGV4dCk6CisgICAgdXJsID0gJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vYXBpX3B1YmxpYy5waHAnCisgICAgcGFyYW1zID0geydwYXN0ZV9jb2RlJzogdGV4dCwgJ3Bhc3RlX2Zvcm1hdCc6ICd0ZXh0J30KKworICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIHVybGxpYi51cmxlbmNvZGUocGFyYW1zKSkKKyAgICByZXNwb25zZSA9IHVybGxpYjIudXJsb3BlbihyZXEpCisgICAgcGFzdGVfdXJsID0gcmVzcG9uc2UucmVhZCgpCisKKyAgICByZXR1cm4gcGFzdGVfdXJsCisKKworY2xhc3MgUnVubmluZ0J1aWxkVHJlZVZpZXcgKGd0ay5UcmVlVmlldyk6CisgICAgX19nc2lnbmFsc19fID0geworICAgICAgICAiYnV0dG9uX3ByZXNzX2V2ZW50IiA6ICJvdmVycmlkZSIKKyAgICAgICAgfQorICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcmVhZG9ubHk9RmFsc2UsIGhvYj1GYWxzZSk6CisgICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgc2VsZi5yZWFkb25seSA9IHJlYWRvbmx5CisKKyAgICAgICAgIyBUaGUgaWNvbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIG9yIGZhaWxlZC4KKyAgICAgICAgIyBhZGQgJ2hvYicgZmxhZyBiZWNhdXNlIHRoZXJlIGhhcyBub3Qgb25seSBob2IgdG8gc2hhcmUgdGhpcyBjb2RlCisgICAgICAgIGlmIGhvYjoKKyAgICAgICAgICAgIHJlbmRlcmVyID0gSG9iQ2VsbFJlbmRlcmVyUGl4YnVmICgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZW5kZXJlciA9IGd0ay5DZWxsUmVuZGVyZXJQaXhidWYoKQorICAgICAgICBjb2wgPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJTdGF0dXMiLCByZW5kZXJlcikKKyAgICAgICAgY29sLmFkZF9hdHRyaWJ1dGUgKHJlbmRlcmVyLCAiaWNvbi1uYW1lIiwgNCkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiB0aGUgYnVpbGQuCisgICAgICAgICMgYWRkICdob2InIGZsYWcgYmVjYXVzZSB0aGVyZSBoYXMgbm90IG9ubHkgaG9iIHRvIHNoYXJlIHRoaXMgY29kZQorICAgICAgICBpZiBob2I6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIgPSBIb2JXYXJwQ2VsbFJlbmRlcmVyVGV4dCAoY29sX251bWJlcj0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3JlbmRlcmVyID0gZ3RrLkNlbGxSZW5kZXJlclRleHQgKCkKKyAgICAgICAgc2VsZi5tZXNzYWdlX2NvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIk1lc3NhZ2UiLCBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIsIHRleHQ9MykKKyAgICAgICAgc2VsZi5tZXNzYWdlX2NvbHVtbi5hZGRfYXR0cmlidXRlKHNlbGYubWVzc2FnZV9yZW5kZXJlciwgJ2JhY2tncm91bmQnLCA1KQorICAgICAgICBzZWxmLm1lc3NhZ2VfcmVuZGVyZXIuc2V0X3Byb3BlcnR5KCdlZGl0YWJsZScsIChub3Qgc2VsZi5yZWFkb25seSkpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbHVtbiAoc2VsZi5tZXNzYWdlX2NvbHVtbikKKworICAgIGRlZiBkb19idXR0b25fcHJlc3NfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBndGsuVHJlZVZpZXcuZG9fYnV0dG9uX3ByZXNzX2V2ZW50KHNlbGYsIGV2ZW50KQorCisgICAgICAgIGlmIGV2ZW50LmJ1dHRvbiA9PSAzOgorICAgICAgICAgICAgc2VsZWN0aW9uID0gc3VwZXIoUnVubmluZ0J1aWxkVHJlZVZpZXcsIHNlbGYpLmdldF9zZWxlY3Rpb24oKQorICAgICAgICAgICAgKG1vZGVsLCBpdCkgPSBzZWxlY3Rpb24uZ2V0X3NlbGVjdGVkKCkKKyAgICAgICAgICAgIGlmIGl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNhbl9wYXN0ZSA9IG1vZGVsLmdldChpdCwgbW9kZWwuQ09MX0xPRylbMF0KKyAgICAgICAgICAgICAgICBpZiBjYW5fcGFzdGUgPT0gJ3Bhc3RlYmluJzoKKyAgICAgICAgICAgICAgICAgICAgIyBidWlsZCBhIHNpbXBsZSBtZW51IHdpdGggYSBwYXN0ZWJpbiBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgbWVudSA9IGd0ay5NZW51KCkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0gPSBndGsuTWVudUl0ZW0oIkNvcHkiKQorICAgICAgICAgICAgICAgICAgICBtZW51LmFwcGVuZChtZW51aXRlbSkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLmNsaXBib2FyZF9oYW5kbGVyLCAobW9kZWwsIGl0KSkKKyAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uc2hvdygpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtID0gZ3RrLk1lbnVJdGVtKCJTZW5kIGxvZyB0byBwYXN0ZWJpbiIpCisgICAgICAgICAgICAgICAgICAgIG1lbnUuYXBwZW5kKG1lbnVpdGVtKQorICAgICAgICAgICAgICAgICAgICBtZW51aXRlbS5jb25uZWN0KCJhY3RpdmF0ZSIsIHNlbGYucGFzdGViaW5faGFuZGxlciwgKG1vZGVsLCBpdCkpCisgICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLnNob3coKQorICAgICAgICAgICAgICAgICAgICBtZW51LnNob3coKQorICAgICAgICAgICAgICAgICAgICBtZW51LnBvcHVwKE5vbmUsIE5vbmUsIE5vbmUsIGV2ZW50LmJ1dHRvbiwgZXZlbnQudGltZSkKKworICAgIGRlZiBfYWRkX3RvX2NsaXBib2FyZChzZWxmLCBjbGlwcGluZyk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgdGhlIGNvbnRlbnRzIG9mIGNsaXBwaW5nIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorICAgICAgICAiIiIKKyAgICAgICAgY2xpcGJvYXJkID0gZ3RrLmNsaXBib2FyZF9nZXQoKQorICAgICAgICBjbGlwYm9hcmQuc2V0X3RleHQoY2xpcHBpbmcpCisgICAgICAgIGNsaXBib2FyZC5zdG9yZSgpCisKKyAgICBkZWYgcGFzdGViaW5faGFuZGxlcihzZWxmLCB3aWRnZXQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VuZCB0aGUgbG9nIGRhdGEgdG8gcGFzdGViaW4sIHRoZW4gYWRkIHRoZSBuZXcgcGFzdGUgdXJsIHRvIHRoZQorICAgICAgICBjbGlwYm9hcmQuCisgICAgICAgICIiIgorICAgICAgICAobW9kZWwsIGl0KSA9IGRhdGEKKyAgICAgICAgcGFzdGVfdXJsID0gZG9fcGFzdGViaW4obW9kZWwuZ2V0KGl0LCBtb2RlbC5DT0xfTUVTU0FHRSlbMF0pCisKKyAgICAgICAgIyBAdG9kbyBQcm92aWRlIHZpc3VhbCBmZWVkYmFjayB0byB0aGUgdXNlciB0aGF0IGl0IGlzIGRvbmUgYW5kIHRoYXQKKyAgICAgICAgIyBpdCB3b3JrZWQuCisgICAgICAgIHByaW50IHBhc3RlX3VybAorCisgICAgICAgIHNlbGYuX2FkZF90b19jbGlwYm9hcmQocGFzdGVfdXJsKQorCisgICAgZGVmIGNsaXBib2FyZF9oYW5kbGVyKHNlbGYsIHdpZGdldCwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAgICAgKG1vZGVsLCBpdCkgPSBkYXRhCisgICAgICAgIG1lc3NhZ2UgPSBtb2RlbC5nZXQoaXQsIG1vZGVsLkNPTF9NRVNTQUdFKVswXQorCisgICAgICAgIHNlbGYuX2FkZF90b19jbGlwYm9hcmQobWVzc2FnZSkKKworY2xhc3MgQnVpbGRGYWlsdXJlVHJlZVZpZXcoZ3RrLlRyZWVWaWV3KToKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldF9ydWxlc19oaW50KEZhbHNlKQorICAgICAgICBzZWxmLnNldF9oZWFkZXJzX3Zpc2libGUoRmFsc2UpCisgICAgICAgIHNlbGYuZ2V0X3NlbGVjdGlvbigpLnNldF9tb2RlKGd0ay5TRUxFQ1RJT05fU0lOR0xFKQorCisgICAgICAgICMgVGhlIGljb24gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBidWlsZGluZyBvciBmYWlsZWQuCisgICAgICAgIHJlbmRlcmVyID0gSG9iQ2VsbFJlbmRlcmVyUGl4YnVmICgpCisgICAgICAgIGNvbCA9IGd0ay5UcmVlVmlld0NvbHVtbiAoIlN0YXR1cyIsIHJlbmRlcmVyKQorICAgICAgICBjb2wuYWRkX2F0dHJpYnV0ZSAocmVuZGVyZXIsICJpY29uLW5hbWUiLCBSdW5uaW5nQnVpbGRNb2RlbC5DT0xfSUNPTikKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChjb2wpCisKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBvZiB0aGUgYnVpbGQuCisgICAgICAgIHNlbGYubWVzc2FnZV9yZW5kZXJlciA9IEhvYldhcnBDZWxsUmVuZGVyZXJUZXh0IChjb2xfbnVtYmVyPTEpCisgICAgICAgIHNlbGYubWVzc2FnZV9jb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4gKCJNZXNzYWdlIiwgc2VsZi5tZXNzYWdlX3JlbmRlcmVyLCB0ZXh0PVJ1bm5pbmdCdWlsZE1vZGVsLkNPTF9NRVNTQUdFLCBiYWNrZ3JvdW5kPVJ1bm5pbmdCdWlsZE1vZGVsLkNPTF9DT0xPUikKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uIChzZWxmLm1lc3NhZ2VfY29sdW1uKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3Nhbml0eWNoZWNrcGFnZS5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9zYW5pdHljaGVja3BhZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjZTJlYwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy9zYW5pdHljaGVja3BhZ2UucHkKQEAgLTAsMCArMSw4NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgZ3RrLCBnb2JqZWN0Citmcm9tIGJiLnVpLmNydW1icy5wcm9ncmVzc2JhciBpbXBvcnQgSG9iUHJvZ3Jlc3NCYXIKK2Zyb20gYmIudWkuY3J1bWJzLmhvYndpZGdldCBpbXBvcnQgaGljCitmcm9tIGJiLnVpLmNydW1icy5ob2JwYWdlcyBpbXBvcnQgSG9iUGFnZQorCisjCisjIFNhbml0eUNoZWNrUGFnZQorIworY2xhc3MgU2FuaXR5Q2hlY2tQYWdlIChIb2JQYWdlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWlsZGVyKToKKyAgICAgICAgc3VwZXIoU2FuaXR5Q2hlY2tQYWdlLCBzZWxmKS5fX2luaXRfXyhidWlsZGVyKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmNyZWF0ZV92aXN1YWxfZWxlbWVudHMoKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBtYWtlX2xhYmVsKHNlbGYsIHRleHQsIGJvbGQ9VHJ1ZSk6CisgICAgICAgIGxhYmVsID0gZ3RrLkxhYmVsKCkKKyAgICAgICAgbGFiZWwuc2V0X2FsaWdubWVudCgwLjAsIDAuNSkKKyAgICAgICAgbWFyayA9ICI8c3BhbiAlcz4lczwvc3Bhbj4iICUgKHNlbGYuc3Bhbl90YWcoJ3gtbGFyZ2UnLCAnYm9sZCcpIGlmIGJvbGQgZWxzZSBzZWxmLnNwYW5fdGFnKCdtZWRpdW0nKSwgdGV4dCkKKyAgICAgICAgbGFiZWwuc2V0X21hcmt1cChtYXJrKQorICAgICAgICByZXR1cm4gbGFiZWwKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucnVubmluZzoKKyAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgZ29iamVjdC50aW1lb3V0X2FkZCgxMDAsIHNlbGYudGltZXJfZnVuYykKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5pbmcKKworICAgIGRlZiB0aW1lcl9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLnByb2dyZXNzX2Jhci5wdWxzZSgpCisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5pbmcKKworICAgIGRlZiBjcmVhdGVfdmlzdWFsX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIFRhYmxlJ2QgbGF5b3V0LiAncm93cycgYW5kICdjb2xzJyBnaXZlIHRoZSB0YWJsZSBzaXplCisgICAgICAgIHJvd3MsIGNvbHMgPSAzMCwgNTAKKyAgICAgICAgc2VsZi50YWJsZSA9IGd0ay5UYWJsZShyb3dzLCBjb2xzLCBUcnVlKQorICAgICAgICBzZWxmLnBhY2tfc3RhcnQoc2VsZi50YWJsZSwgZXhwYW5kPUZhbHNlLCBmaWxsPUZhbHNlKQorICAgICAgICBzeCwgc3kgPSAyLCAyCisgICAgICAgICMgJ2luZm8nIGljb24KKyAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UoKQorICAgICAgICBpbWFnZS5zZXRfZnJvbV9maWxlKGhpYy5JQ09OX0lORk9fRElTUExBWV9GSUxFKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChpbWFnZSwgc3gsIHN4ICsgMiwgc3ksIHN5ICsgMyApCisgICAgICAgIGltYWdlLnNob3coKQorICAgICAgICAjICdDaGVja2luZycgbWVzc2FnZQorICAgICAgICBsYWJlbCA9IHNlbGYubWFrZV9sYWJlbCgnSG9iIGlzIGNoZWNraW5nIGZvciBjb3JyZWN0IGJ1aWxkIHN5c3RlbSBzZXR1cCcpCisgICAgICAgIHNlbGYudGFibGUuYXR0YWNoKGxhYmVsLCBzeCArIDIsIGNvbHMsIHN5LCBzeSArIDMsIHhwYWRkaW5nPTUgKQorICAgICAgICBsYWJlbC5zaG93KCkKKyAgICAgICAgIyAnU2hvdWxkbid0IHRha2UgbG9uZycgbWVzc2FnZS4KKyAgICAgICAgbGFiZWwgPSBzZWxmLm1ha2VfbGFiZWwoIlRoZSBjaGVjayBzaG91bGRuJ3QgdGFrZSBsb25nLiIsIEZhbHNlKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChsYWJlbCwgc3ggKyAyLCBjb2xzLCBzeSArIDMsIHN5ICsgNCwgeHBhZGRpbmc9NSkKKyAgICAgICAgbGFiZWwuc2hvdygpCisgICAgICAgICMgUHJvZ3Jlc3MgYmFyCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyID0gSG9iUHJvZ3Jlc3NCYXIoKQorICAgICAgICBzZWxmLnRhYmxlLmF0dGFjaChzZWxmLnByb2dyZXNzX2Jhciwgc3ggKyAyLCBjb2xzIC0gMywgc3kgKyA1LCBzeSArIDcsIHhwYWRkaW5nPTUpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NfYmFyLnNob3coKQorICAgICAgICAjIEFsbCBkb25lCisgICAgICAgIHNlbGYudGFibGUuc2hvdygpCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weSBiL2JpdGJha2UvbGliL2JiL3VpL2NydW1icy91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzk4NjRmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvY3J1bWJzL3V0aWxzLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyMKKyMgQml0QmFrZSBVSSBVdGlscyAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFRoaXMgdXRpbGl0eSBtZXRob2QgbG9va3MgZm9yIHh0ZXJtIG9yIHZ0ZSBhbmQgcmV0dXJuIHRoZSAKKyMgZnJpc3QgdG8gZXhpc3QsIGN1cnJlbnRseSB3ZSBhcmUga2VlcGluZyB0aGlzIHNpbXBsZSwgYnV0IAorIyB3ZSB3aWxsIGxpa2VseSBtb3ZlIHRoZSBvZS50ZXJtaW5hbCBpbXBsZW1lbnRhdGlvbiBpbnRvIAorIyBiaXRiYWtlIHdoaWNoIHdpbGwgYWxsb3cgbW9yZSBmbGV4aWJpbGl0eS4KKworaW1wb3J0IG9zCitpbXBvcnQgYmIKKworZGVmIHdoaWNoX3Rlcm1pbmFsKCk6CisgICAgdGVybSA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bIlBBVEgiXSwgInh0ZXJtIikKKyAgICBpZiB0ZXJtOgorICAgICAgICByZXR1cm4gdGVybSArICIgLWUgIgorICAgIHRlcm0gPSBiYi51dGlscy53aGljaChvcy5lbnZpcm9uWyJQQVRIIl0sICJ2dGUiKQorICAgIGlmIHRlcm06CisgICAgICAgIHJldHVybiB0ZXJtICsgIiAtYyAiCisgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weSBiL2JpdGJha2UvbGliL2JiL3VpL2RlcGV4cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDBhYWZjCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvZGVwZXhwLnB5CkBAIC0wLDAgKzEsMzMzIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBiYXNlZCBEZXBlbmRlbmN5IEV4cGxvcmVyCisjCisjIENvcHlyaWdodCAoQykgMjAwNyAgICAgICAgUm9zcyBCdXJ0b24KKyMgQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOCBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHhtbHJwY2xpYgoraW1wb3J0IGJiCitpbXBvcnQgYmIuZXZlbnQKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzYmFyIGltcG9ydCBIb2JQcm9ncmVzc0JhcgorCisjIFBhY2thZ2UgTW9kZWwKKyhDT0xfUEtHX05BTUUpID0gKDApCisKKyMgRGVwZW5kZW5jeSBNb2RlbAorKFRZUEVfREVQLCBUWVBFX1JERVApID0gKDAsIDEpCisoQ09MX0RFUF9UWVBFLCBDT0xfREVQX1BBUkVOVCwgQ09MX0RFUF9QQUNLQUdFKSA9ICgwLCAxLCAyKQorCisKK2NsYXNzIFBhY2thZ2VEZXBWaWV3KGd0ay5UcmVlVmlldyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBkZXBfdHlwZSwgbGFiZWwpOgorICAgICAgICBndGsuVHJlZVZpZXcuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gTm9uZQorICAgICAgICBzZWxmLmRlcF90eXBlID0gZGVwX3R5cGUKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwgPSBtb2RlbC5maWx0ZXJfbmV3KCkKKyAgICAgICAgc2VsZi5maWx0ZXJfbW9kZWwuc2V0X3Zpc2libGVfZnVuYyhzZWxmLl9maWx0ZXIpCisgICAgICAgIHNlbGYuc2V0X21vZGVsKHNlbGYuZmlsdGVyX21vZGVsKQorICAgICAgICAjc2VsZi5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5vbl9wYWNrYWdlX2FjdGl2YXRlZCwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICBzZWxmLmFwcGVuZF9jb2x1bW4oZ3RrLlRyZWVWaWV3Q29sdW1uKGxhYmVsLCBndGsuQ2VsbFJlbmRlcmVyVGV4dCgpLCB0ZXh0PUNPTF9ERVBfUEFDS0FHRSkpCisKKyAgICBkZWYgX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXRlcik6CisgICAgICAgICh0aGlzX3R5cGUsIHBhY2thZ2UpID0gbW9kZWwuZ2V0KGl0ZXIsIENPTF9ERVBfVFlQRSwgQ09MX0RFUF9QQVJFTlQpCisgICAgICAgIGlmIHRoaXNfdHlwZSAhPSBzZWxmLmRlcF90eXBlOiByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UgPT0gc2VsZi5jdXJyZW50CisKKyAgICBkZWYgc2V0X2N1cnJlbnRfcGFja2FnZShzZWxmLCBwYWNrYWdlKToKKyAgICAgICAgc2VsZi5jdXJyZW50ID0gcGFja2FnZQorICAgICAgICBzZWxmLmZpbHRlcl9tb2RlbC5yZWZpbHRlcigpCisKKworY2xhc3MgUGFja2FnZVJldmVyc2VEZXBWaWV3KGd0ay5UcmVlVmlldyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBsYWJlbCk6CisgICAgICAgIGd0ay5UcmVlVmlldy5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmN1cnJlbnQgPSBOb25lCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsID0gbW9kZWwuZmlsdGVyX25ldygpCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnNldF92aXNpYmxlX2Z1bmMoc2VsZi5fZmlsdGVyKQorICAgICAgICBzZWxmLnNldF9tb2RlbChzZWxmLmZpbHRlcl9tb2RlbCkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29sdW1uKGd0ay5UcmVlVmlld0NvbHVtbihsYWJlbCwgZ3RrLkNlbGxSZW5kZXJlclRleHQoKSwgdGV4dD1DT0xfREVQX1BBUkVOVCkpCisKKyAgICBkZWYgX2ZpbHRlcihzZWxmLCBtb2RlbCwgaXRlcik6CisgICAgICAgIHBhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICByZXR1cm4gcGFja2FnZSA9PSBzZWxmLmN1cnJlbnQKKworICAgIGRlZiBzZXRfY3VycmVudF9wYWNrYWdlKHNlbGYsIHBhY2thZ2UpOgorICAgICAgICBzZWxmLmN1cnJlbnQgPSBwYWNrYWdlCisgICAgICAgIHNlbGYuZmlsdGVyX21vZGVsLnJlZmlsdGVyKCkKKworCitjbGFzcyBEZXBFeHBsb3JlcihndGsuV2luZG93KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGd0ay5XaW5kb3cuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zZXRfdGl0bGUoIkRlcGVuZGVuY3kgRXhwbG9yZXIiKQorICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3NpemUoNTAwLCA1MDApCisgICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgZGF0YSBtb2RlbHMKKyAgICAgICAgc2VsZi5wa2dfbW9kZWwgPSBndGsuTGlzdFN0b3JlKGdvYmplY3QuVFlQRV9TVFJJTkcpCisgICAgICAgIHNlbGYucGtnX21vZGVsLnNldF9zb3J0X2NvbHVtbl9pZChDT0xfUEtHX05BTUUsIGd0ay5TT1JUX0FTQ0VORElORykKKyAgICAgICAgc2VsZi5kZXBlbmRzX21vZGVsID0gZ3RrLkxpc3RTdG9yZShnb2JqZWN0LlRZUEVfSU5ULCBnb2JqZWN0LlRZUEVfU1RSSU5HLCBnb2JqZWN0LlRZUEVfU1RSSU5HKQorICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwuc2V0X3NvcnRfY29sdW1uX2lkKENPTF9ERVBfUEFDS0FHRSwgZ3RrLlNPUlRfQVNDRU5ESU5HKQorCisgICAgICAgIHBhbmUgPSBndGsuSFBhbmVkKCkKKyAgICAgICAgcGFuZS5zZXRfcG9zaXRpb24oMjUwKQorICAgICAgICBzZWxmLmFkZChwYW5lKQorCisgICAgICAgICMgVGhlIG1hc3RlciBsaXN0IG9mIHBhY2thZ2VzCisgICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCisgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3ID0gZ3RrLlRyZWVWaWV3KHNlbGYucGtnX21vZGVsKQorICAgICAgICBzZWxmLnBrZ190cmVldmlldy5nZXRfc2VsZWN0aW9uKCkuY29ubmVjdCgiY2hhbmdlZCIsIHNlbGYub25fY3Vyc29yX2NoYW5nZWQpCisgICAgICAgIGNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiUGFja2FnZSIsIGd0ay5DZWxsUmVuZGVyZXJUZXh0KCksIHRleHQ9Q09MX1BLR19OQU1FKQorICAgICAgICBzZWxmLnBrZ190cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKyAgICAgICAgcGFuZS5hZGQxKHNjcm9sbGVkKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5wa2dfdHJlZXZpZXcpCisKKyAgICAgICAgYm94ID0gZ3RrLlZCb3goaG9tb2dlbmVvdXM9VHJ1ZSwgc3BhY2luZz00KQorCisgICAgICAgICMgUnVudGltZSBEZXBlbmRzCisgICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisgICAgICAgIHNjcm9sbGVkLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorICAgICAgICBzZWxmLnJkZXBfdHJlZXZpZXcgPSBQYWNrYWdlRGVwVmlldyhzZWxmLmRlcGVuZHNfbW9kZWwsIFRZUEVfUkRFUCwgIlJ1bnRpbWUgRGVwZW5kcyIpCisgICAgICAgIHNlbGYucmRlcF90cmVldmlldy5jb25uZWN0KCJyb3ctYWN0aXZhdGVkIiwgc2VsZi5vbl9wYWNrYWdlX2FjdGl2YXRlZCwgQ09MX0RFUF9QQUNLQUdFKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5yZGVwX3RyZWV2aWV3KQorICAgICAgICBib3guYWRkKHNjcm9sbGVkKQorCisgICAgICAgICMgQnVpbGQgRGVwZW5kcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5kZXBfdHJlZXZpZXcgPSBQYWNrYWdlRGVwVmlldyhzZWxmLmRlcGVuZHNfbW9kZWwsIFRZUEVfREVQLCAiQnVpbGQgRGVwZW5kcyIpCisgICAgICAgIHNlbGYuZGVwX3RyZWV2aWV3LmNvbm5lY3QoInJvdy1hY3RpdmF0ZWQiLCBzZWxmLm9uX3BhY2thZ2VfYWN0aXZhdGVkLCBDT0xfREVQX1BBQ0tBR0UpCisgICAgICAgIHNjcm9sbGVkLmFkZChzZWxmLmRlcF90cmVldmlldykKKyAgICAgICAgYm94LmFkZChzY3JvbGxlZCkKKyAgICAgICAgcGFuZS5hZGQyKGJveCkKKworICAgICAgICAjIFJldmVyc2UgRGVwZW5kcworICAgICAgICBzY3JvbGxlZCA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisgICAgICAgIHNjcm9sbGVkLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorICAgICAgICBzY3JvbGxlZC5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKyAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcgPSBQYWNrYWdlUmV2ZXJzZURlcFZpZXcoc2VsZi5kZXBlbmRzX21vZGVsLCAiUmV2ZXJzZSBEZXBlbmRzIikKKyAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYub25fcGFja2FnZV9hY3RpdmF0ZWQsIENPTF9ERVBfUEFSRU5UKQorICAgICAgICBzY3JvbGxlZC5hZGQoc2VsZi5yZXZkZXBfdHJlZXZpZXcpCisgICAgICAgIGJveC5hZGQoc2Nyb2xsZWQpCisgICAgICAgIHBhbmUuYWRkMihib3gpCisKKyAgICAgICAgc2VsZi5zaG93X2FsbCgpCisKKyAgICBkZWYgb25fcGFja2FnZV9hY3RpdmF0ZWQoc2VsZiwgdHJlZXZpZXcsIHBhdGgsIGNvbHVtbiwgZGF0YV9jb2wpOgorICAgICAgICBtb2RlbCA9IHRyZWV2aWV3LmdldF9tb2RlbCgpCisgICAgICAgIHBhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUobW9kZWwuZ2V0X2l0ZXIocGF0aCksIGRhdGFfY29sKQorCisgICAgICAgIHBrZ19wYXRoID0gW10KKyAgICAgICAgZGVmIGZpbmRlcihtb2RlbCwgcGF0aCwgaXRlciwgbmVlZGxlKToKKyAgICAgICAgICAgIHBhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUoaXRlciwgQ09MX1BLR19OQU1FKQorICAgICAgICAgICAgaWYgcGFja2FnZSA9PSBuZWVkbGU6CisgICAgICAgICAgICAgICAgcGtnX3BhdGguYXBwZW5kKHBhdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYucGtnX21vZGVsLmZvcmVhY2goZmluZGVyLCBwYWNrYWdlKQorICAgICAgICBpZiBwa2dfcGF0aDoKKyAgICAgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3LmdldF9zZWxlY3Rpb24oKS5zZWxlY3RfcGF0aChwa2dfcGF0aFswXSkKKyAgICAgICAgICAgIHNlbGYucGtnX3RyZWV2aWV3LnNjcm9sbF90b19jZWxsKHBrZ19wYXRoWzBdKQorCisgICAgZGVmIG9uX2N1cnNvcl9jaGFuZ2VkKHNlbGYsIHNlbGVjdGlvbik6CisgICAgICAgIChtb2RlbCwgaXQpID0gc2VsZWN0aW9uLmdldF9zZWxlY3RlZCgpCisgICAgICAgIGlmIGl0IGlzIE5vbmU6CisgICAgICAgICAgICBjdXJyZW50X3BhY2thZ2UgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjdXJyZW50X3BhY2thZ2UgPSBtb2RlbC5nZXRfdmFsdWUoaXQsIENPTF9QS0dfTkFNRSkKKyAgICAgICAgc2VsZi5yZGVwX3RyZWV2aWV3LnNldF9jdXJyZW50X3BhY2thZ2UoY3VycmVudF9wYWNrYWdlKQorICAgICAgICBzZWxmLmRlcF90cmVldmlldy5zZXRfY3VycmVudF9wYWNrYWdlKGN1cnJlbnRfcGFja2FnZSkKKyAgICAgICAgc2VsZi5yZXZkZXBfdHJlZXZpZXcuc2V0X2N1cnJlbnRfcGFja2FnZShjdXJyZW50X3BhY2thZ2UpCisKKworICAgIGRlZiBwYXJzZShzZWxmLCBkZXBncmFwaCk6CisgICAgICAgIGZvciBwYWNrYWdlIGluIGRlcGdyYXBoWyJwbiJdOgorICAgICAgICAgICAgc2VsZi5wa2dfbW9kZWwuaW5zZXJ0KDAsIChwYWNrYWdlLCkpCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXToKKyAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZ3JhcGhbImRlcGVuZHMiXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwuaW5zZXJ0ICgwLCAoVFlQRV9ERVAsIHBhY2thZ2UsIGRlcGVuZCkpCisKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGVwZ3JhcGhbInJkZXBlbmRzLXBuIl06CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiBkZXBncmFwaFsicmRlcGVuZHMtcG4iXVtwYWNrYWdlXToKKyAgICAgICAgICAgICAgICBzZWxmLmRlcGVuZHNfbW9kZWwuaW5zZXJ0ICgwLCAoVFlQRV9SREVQLCBwYWNrYWdlLCByZGVwZW5kKSkKKworCitjbGFzcyBndGt0aHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgcXVpdCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNodXRkb3duKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnNodXRkb3duID0gc2h1dGRvd24KKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGdvYmplY3QudGhyZWFkc19pbml0KCkKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2luaXQoKQorICAgICAgICBndGsubWFpbigpCisgICAgICAgIGd0a3RocmVhZC5xdWl0LnNldCgpCisKKworZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgdHJ5OgorICAgICAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCisgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgIHByaW50KGNtZGxpbmVbJ21zZyddKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgY21kbGluZSA9IGNtZGxpbmVbJ2FjdGlvbiddCisgICAgICAgIGlmIG5vdCBjbWRsaW5lIG9yIGNtZGxpbmVbMF0gIT0gImdlbmVyYXRlRG90R3JhcGgiOgorICAgICAgICAgICAgcHJpbnQoIlRoaXMgVUkgcmVxdWlyZXMgdGhlIC1nIG9wdGlvbiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXQsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZW5lcmF0ZURlcFRyZWVFdmVudCIsIGNtZGxpbmVbMV0sIGNtZGxpbmVbMl1dKQorICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgIHByaW50KCJFcnJvciBydW5uaW5nIGNvbW1hbmQgJyVzJzogJXMiICUgKGNtZGxpbmUsIGVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsaWYgcmV0ICE9IFRydWU6CisgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6IHJldHVybmVkICVzIiAlIChjbWRsaW5lLCByZXQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0IGFzIHg6CisgICAgICAgIHByaW50KCJYTUxSUEMgRmF1bHQgZ2V0dGluZyBjb21tYW5kbGluZTpcbiAlcyIgJSB4KQorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgZ3RrLmluaXRfY2hlY2soKQorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlBsZWFzZSBzZXQgRElTUExBWSB2YXJpYWJsZSBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQgXG4iKQorICAgICAgICByZXR1cm4KKworICAgIHNodXRkb3duID0gMAorCisgICAgZ3RrZ3VpID0gZ3RrdGhyZWFkKHNodXRkb3duKQorICAgIGd0a2d1aS5zdGFydCgpCisKKyAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgIGRlcCA9IERlcEV4cGxvcmVyKCkKKyAgICBiYXJkaWFsb2cgPSBndGsuRGlhbG9nKHBhcmVudD1kZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1ndGsuRElBTE9HX01PREFMfGd0ay5ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCkKKyAgICBiYXJkaWFsb2cuc2V0X2RlZmF1bHRfc2l6ZSg0MDAsIDUwKQorICAgIHBiYXIgPSBIb2JQcm9ncmVzc0JhcigpCisgICAgYmFyZGlhbG9nLnZib3gucGFja19zdGFydChwYmFyKQorICAgIGJhcmRpYWxvZy5zaG93X2FsbCgpCisgICAgYmFyZGlhbG9nLmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGd0ay5tYWluX3F1aXQpCisgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIHByb2dyZXNzX3RvdGFsID0gMAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwLjI1KQorICAgICAgICAgICAgaWYgZ3RrdGhyZWFkLnF1aXQuaXNTZXQoKToKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdVbmFibGUgdG8gY2xlYW5seSBzdG9wOiAlcycgJSBlcnJvcikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBldmVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5zZXRfdGl0bGUoIkxvYWRpbmcgQ2FjaGUiKQorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKDApCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIHggPSBldmVudC5jdXJyZW50CisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBwYmFyLnVwZGF0ZSh4ICogMS4wIC8gcHJvZ3Jlc3NfdG90YWwpCisgICAgICAgICAgICAgICAgcGJhci5zZXRfdGl0bGUoJycpCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGJhcmRpYWxvZy5oaWRlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIHByb2dyZXNzX3RvdGFsID0gZXZlbnQudG90YWwKKyAgICAgICAgICAgICAgICBpZiBwcm9ncmVzc190b3RhbCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgICAgICAgICAgcGJhci51cGRhdGUoMCkKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuc2V0X3RpdGxlKCJQcm9jZXNzaW5nIHJlY2lwZXMiKQorCisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICAgICAgICAgIHBiYXIudXBkYXRlKHggKiAxLjAgLyBwcm9ncmVzc190b3RhbCkKKyAgICAgICAgICAgICAgICBwYmFyLnNldF90aXRsZSgnJykKKyAgICAgICAgICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBiYXJkaWFsb2cuaGlkZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuRGVwVHJlZUdlbmVyYXRlZCk6CisgICAgICAgICAgICAgICAgZ3RrLmdkay50aHJlYWRzX2VudGVyKCkKKyAgICAgICAgICAgICAgICBkZXAucGFyc2UoZXZlbnQuX2RlcGdyYXBoKQorICAgICAgICAgICAgICAgIGd0ay5nZGsudGhyZWFkc19sZWF2ZSgpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRmFpbGVkKToKKyAgICAgICAgICAgICAgICBwcmludCgiQ29tbWFuZCBleGVjdXRpb24gZmFpbGVkOiAlcyIgJSBldmVudC5lcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuZXhpdGNvZGUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRXhpdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV4aXRjb2RlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvb2tlci5Db29rZXJFeGl0KToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMjoKKyAgICAgICAgICAgICAgICBwcmludCgiXG5UaGlyZCBLZXlib2FyZCBJbnRlcnJ1cHQsIGV4aXQuXG4iKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBzaHV0ZG93biA9PSAxOgorICAgICAgICAgICAgICAgIHByaW50KCJcblNlY29uZCBLZXlib2FyZCBJbnRlcnJ1cHQsIHN0b3BwaW5nLi4uXG4iKQorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1VuYWJsZSB0byBjbGVhbmx5IHN0b3A6ICVzJyAlIGVycm9yKQorICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiXG5LZXlib2FyZCBJbnRlcnJ1cHQsIGNsb3NpbmcgZG93bi4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVTaHV0ZG93biJdKQorICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzJyAlIGVycm9yKQorICAgICAgICAgICAgc2h1dGRvd24gPSBzaHV0ZG93biArIDEKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weSBiL2JpdGJha2UvbGliL2JiL3VpL2dvZ2dsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGVlN2I0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvZ29nZ2xlLnB5CkBAIC0wLDAgKzEsMTIxIEBACisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IFJvYiBCcmFkZm9yZCA8cm9iQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBnb2JqZWN0CitpbXBvcnQgZ3RrCitpbXBvcnQgeG1scnBjbGliCitmcm9tIGJiLnVpLmNydW1icy5ydW5uaW5nYnVpbGQgaW1wb3J0IFJ1bm5pbmdCdWlsZFRyZWVWaWV3LCBSdW5uaW5nQnVpbGQKK2Zyb20gYmIudWkuY3J1bWJzLnByb2dyZXNzIGltcG9ydCBQcm9ncmVzc0JhcgorCitpbXBvcnQgUXVldWUKKworCitkZWYgZXZlbnRfaGFuZGxlX2lkbGVfZnVuYyAoZXZlbnRIYW5kbGVyLCBidWlsZCwgcGJhcik6CisKKyAgICAjIENvbnN1bWUgYXMgbWFueSBtZXNzYWdlcyBhcyB3ZSBjYW4gaW4gdGhlIHRpbWUgYXZhaWxhYmxlIHRvIHVzCisgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHdoaWxlIGV2ZW50OgorICAgICAgICBidWlsZC5oYW5kbGVfZXZlbnQgKGV2ZW50LCBwYmFyKQorICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci5nZXRFdmVudCgpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgc2Nyb2xsX3R2X2NiIChtb2RlbCwgcGF0aCwgaXRlciwgdmlldyk6CisgICAgdmlldy5zY3JvbGxfdG9fY2VsbCAocGF0aCkKKworCisjIEB0b2RvIGhvb2sgdGhlc2UgaW50byB0aGUgR1VJIHNvIHRoZSB1c2VyIGhhcyBmZWVkYmFjay4uLgorZGVmIHJ1bm5pbmdfYnVpbGRfZmFpbGVkX2NiIChydW5uaW5nX2J1aWxkKToKKyAgICBwYXNzCisKKworZGVmIHJ1bm5pbmdfYnVpbGRfc3VjY2VlZGVkX2NiIChydW5uaW5nX2J1aWxkKToKKyAgICBwYXNzCisKKworY2xhc3MgTWFpbldpbmRvdyAoZ3RrLldpbmRvdyk6CisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyAoc2VsZiwgZ3RrLldJTkRPV19UT1BMRVZFTCkKKworICAgICAgICAjIFNldHVwIHRyZWUgdmlldyBhbmQgdGhlIHNjcm9sbGVkIHdpbmRvdworICAgICAgICBzY3JvbGxlZF93aW5kb3cgPSBndGsuU2Nyb2xsZWRXaW5kb3cgKCkKKyAgICAgICAgc2VsZi5hZGQgKHNjcm9sbGVkX3dpbmRvdykKKyAgICAgICAgc2VsZi5jdXJfYnVpbGRfdHYgPSBSdW5uaW5nQnVpbGRUcmVlVmlldygpCisgICAgICAgIHNlbGYuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF9zaXplKDY0MCwgNDgwKQorICAgICAgICBzY3JvbGxlZF93aW5kb3cuYWRkIChzZWxmLmN1cl9idWlsZF90dikKKworCitkZWYgbWFpbiAoc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQorICAgIGd0ay5nZGsudGhyZWFkc19pbml0KCkKKworICAgIHdpbmRvdyA9IE1haW5XaW5kb3cgKCkKKyAgICB3aW5kb3cuc2hvd19hbGwgKCkKKyAgICBwYmFyID0gUHJvZ3Jlc3NCYXIod2luZG93KQorICAgIHBiYXIuY29ubmVjdCgiZGVsZXRlLWV2ZW50IiwgZ3RrLm1haW5fcXVpdCkKKworICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGJ1aWxkCisgICAgcnVubmluZ19idWlsZCA9IFJ1bm5pbmdCdWlsZCAoKQorICAgIHdpbmRvdy5jdXJfYnVpbGRfdHYuc2V0X21vZGVsIChydW5uaW5nX2J1aWxkLm1vZGVsKQorICAgIHJ1bm5pbmdfYnVpbGQubW9kZWwuY29ubmVjdCgicm93LWluc2VydGVkIiwgc2Nyb2xsX3R2X2NiLCB3aW5kb3cuY3VyX2J1aWxkX3R2KQorICAgIHJ1bm5pbmdfYnVpbGQuY29ubmVjdCAoImJ1aWxkLXN1Y2NlZWRlZCIsIHJ1bm5pbmdfYnVpbGRfc3VjY2VlZGVkX2NiKQorICAgIHJ1bm5pbmdfYnVpbGQuY29ubmVjdCAoImJ1aWxkLWZhaWxlZCIsIHJ1bm5pbmdfYnVpbGRfZmFpbGVkX2NiKQorCisgICAgdHJ5OgorICAgICAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCisgICAgICAgIGNtZGxpbmUgPSBwYXJhbXMucGFyc2VBY3Rpb25zKCkKKyAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICBwcmludCgiTm90aGluZyB0byBkby4gIFVzZSAnYml0YmFrZSB3b3JsZCcgdG8gYnVpbGQgZXZlcnl0aGluZywgb3IgcnVuICdiaXRiYWtlIC0taGVscCcgZm9yIHVzYWdlIGluZm9ybWF0aW9uLiIpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihjbWRsaW5lWydtc2cnXSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNtZGxpbmUgPSBjbWRsaW5lWydhY3Rpb24nXQorICAgICAgICByZXQsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoY21kbGluZSkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjbWRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgorICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJ1bm5pbmcgY29tbWFuZCAnJXMnOiByZXR1cm5lZCAlcyIgJSAoY21kbGluZSwgcmV0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdCBhcyB4OgorICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKKyAgICAgICAgcmV0dXJuIDEKKworICAgICMgVXNlIGEgdGltZW91dCBmdW5jdGlvbiBmb3IgcHJvYmluZyB0aGUgZXZlbnQgcXVldWUgdG8gZmluZCBvdXQgaWYgd2UKKyAgICAjIGhhdmUgYSBtZXNzYWdlIHdhaXRpbmcgZm9yIHVzLgorICAgIGdvYmplY3QudGltZW91dF9hZGQgKDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9oYW5kbGVfaWRsZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX2J1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBiYXIpCisKKyAgICB0cnk6CisgICAgICAgIGd0ay5tYWluKCkKKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBpb2Vycm9yOgorICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS9ob2IucHkgYi9iaXRiYWtlL2xpYi9iYi91aS9ob2IucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGE1YjQxMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2hvYi5weQpAQCAtMCwwICsxLDEwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIEJpdEJha2UgR3JhcGhpY2FsIEdUSyBVc2VyIEludGVyZmFjZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIEF1dGhvcmVkIGJ5IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKyMgQXV0aG9yZWQgYnkgRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworcmVxdWlyZW1lbnRzID0gIkZBVEFMOiBIb2IgcmVxdWlyZXMgR3RrKyAyLjIwLjAgb3IgaGlnaGVyLCBQeUd0ayAyLjIxLjAgb3IgaGlnaGVyIgordHJ5OgorICAgIGltcG9ydCBnb2JqZWN0CisgICAgaW1wb3J0IGd0aworICAgIGltcG9ydCBweWd0aworICAgIHB5Z3RrLnJlcXVpcmUoJzIuMCcpICMgdG8gYmUgY2VydGFpbiB3ZSBkb24ndCBoYXZlIGd0aysgMS54ICE/IQorICAgIGd0a3ZlciA9IGd0ay5ndGtfdmVyc2lvbgorICAgIHB5Z3RrdmVyID0gZ3RrLnB5Z3RrX3ZlcnNpb24KKyAgICBpZiBndGt2ZXIgIDwgKDIsIDIwLCAwKSBvciBweWd0a3ZlciA8ICgyLCAyMSwgMCk6CisgICAgICAgIHN5cy5leGl0KCIlcyxcbllvdSBoYXZlIEd0aysgJXMgYW5kIFB5R3RrICVzLiIgJSAocmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgICAgICIuIi5qb2luKG1hcChzdHIsIGd0a3ZlcikpLAorICAgICAgICAgICAgICAgICIuIi5qb2luKG1hcChzdHIsIHB5Z3RrdmVyKSkpKQorZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdCgiJXMgKCVzKS4iICUgKHJlcXVpcmVtZW50cywgc3RyKGV4YykpKQorc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKQordHJ5OgorICAgIGltcG9ydCBiYgorZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBleGM6CisgICAgc3lzLmV4aXQoc3RyKGV4YykpCitmcm9tIGJiLnVpIGltcG9ydCB1aWhlbHBlcgorZnJvbSBiYi51aS5jcnVtYnMuaG9ibGlzdG1vZGVsIGltcG9ydCBSZWNpcGVMaXN0TW9kZWwsIFBhY2thZ2VMaXN0TW9kZWwKK2Zyb20gYmIudWkuY3J1bWJzLmhvYmV2ZW50aGFuZGxlciBpbXBvcnQgSG9iSGFuZGxlcgorZnJvbSBiYi51aS5jcnVtYnMuYnVpbGRlciBpbXBvcnQgQnVpbGRlcgorCitmZWF0dXJlU2V0ID0gW2JiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5IT0JfRVhUUkFfQ0FDSEVTLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lOR10KKworZGVmIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMoZXZlbnRIYW5kbGVyLCBob2JIYW5kbGVyKToKKyAgICAjIENvbnN1bWUgYXMgbWFueSBtZXNzYWdlcyBhcyB3ZSBjYW4gaW4gdGhlIHRpbWUgYXZhaWxhYmxlIHRvIHVzCisgICAgaWYgbm90IGV2ZW50SGFuZGxlcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHdoaWxlIGV2ZW50OgorICAgICAgICBob2JIYW5kbGVyLmhhbmRsZV9ldmVudChldmVudCkKKyAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHJldHVybiBUcnVlCisKK19ldnRfbGlzdCA9IFsgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXhpdFdhaXQiLCAiYmIuZXZlbnQuTG9nRXhlY1RUWSIsICJsb2dnaW5nLkxvZ1JlY29yZCIsCisgICAgICAgICAgICAgICJiYi5idWlsZC5UYXNrRmFpbGVkIiwgImJiLmJ1aWxkLlRhc2tCYXNlIiwgImJiLmV2ZW50LlBhcnNlU3RhcnRlZCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5QYXJzZVByb2dyZXNzIiwgImJiLmV2ZW50LlBhcnNlQ29tcGxldGVkIiwgImJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuQ2FjaGVMb2FkUHJvZ3Jlc3MiLCAiYmIuZXZlbnQuQ2FjaGVMb2FkQ29tcGxldGVkIiwgImJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCIsCisgICAgICAgICAgICAgICJiYi5jb21tYW5kLkNvbW1hbmRFeGl0IiwgImJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCIsICAiYmIuY29va2VyLkNvb2tlckV4aXQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuTXVsdGlwbGVQcm92aWRlcnMiLCAiYmIuZXZlbnQuTm9Qcm92aWRlciIsICJiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza1N0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCIsICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tGYWlsZWQiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tGYWlsZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuQnVpbGRCYXNlIiwgImJiLmJ1aWxkLlRhc2tTdGFydGVkIiwgImJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQiLCAiYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCIsICJiYi5ldmVudC5TYW5pdHlDaGVja0ZhaWxlZCIsICJiYi5ldmVudC5QYWNrYWdlSW5mbyIsCisgICAgICAgICAgICAgICJiYi5ldmVudC5UYXJnZXRzVHJlZUdlbmVyYXRlZCIsICJiYi5ldmVudC5Db25maWdGaWxlc0ZvdW5kIiwgImJiLmV2ZW50LkNvbmZpZ0ZpbGVQYXRoRm91bmQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuRmlsZXNNYXRjaGluZ0ZvdW5kIiwgImJiLmV2ZW50Lk5ldHdvcmtUZXN0RmFpbGVkIiwgImJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIsICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIsICJiYi5ldmVudC5EaXNrRnVsbCJdCisKK2RlZiBtYWluIChzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKToKKyAgICBwYXJhbXMudXBkYXRlRnJvbVNlcnZlcihzZXJ2ZXIpCisgICAgZ29iamVjdC50aHJlYWRzX2luaXQoKQorCisgICAgIyBUaGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBIb2IgYW5kIHRoZSBiaXRiYWtlIHNlcnZlciBhcmUKKyAgICAjIHJ1bm5pbmcgb24gZGlmZmVyZW50IG1hY2hpbmVzCisgICAgIyByZWNpcGUgbW9kZWwgYW5kIHBhY2thZ2UgbW9kZWwKKyAgICByZWNpcGVfbW9kZWwgPSBSZWNpcGVMaXN0TW9kZWwoKQorICAgIHBhY2thZ2VfbW9kZWwgPSBQYWNrYWdlTGlzdE1vZGVsKCkKKworICAgIGxsZXZlbCwgZGVidWdfZG9tYWlucyA9IGJiLm1zZy5jb25zdHJ1Y3RMb2dPcHRpb25zKCkKKyAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldEV2ZW50TWFzayIsIHNlcnZlci5nZXRFdmVudEhhbmRsZSgpLCBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMsIF9ldnRfbGlzdF0pCisgICAgaG9iSGFuZGxlciA9IEhvYkhhbmRsZXIoc2VydmVyLCByZWNpcGVfbW9kZWwsIHBhY2thZ2VfbW9kZWwpCisgICAgYnVpbGRlciA9IEJ1aWxkZXIoaG9iSGFuZGxlciwgcmVjaXBlX21vZGVsLCBwYWNrYWdlX21vZGVsKQorCisgICAgIyBUaGlzIHRpbWVvdXQgZnVuY3Rpb24gcmVndWxhcmx5IHByb2JlcyB0aGUgZXZlbnQgcXVldWUgdG8gZmluZCBvdXQgaWYgd2UKKyAgICAjIGhhdmUgYW55IG1lc3NhZ2VzIHdhaXRpbmcgZm9yIHVzLgorICAgIGdvYmplY3QudGltZW91dF9hZGQoMTAsIGV2ZW50X2hhbmRsZV9pZGxlX2Z1bmMsIGV2ZW50SGFuZGxlciwgaG9iSGFuZGxlcikKKworICAgIHRyeToKKyAgICAgICAgZ3RrLm1haW4oKQorICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgIGlmIGlvZXJyb3IuYXJnc1swXSA9PSA0OgorICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIGhvYkhhbmRsZXIuY2FuY2VsX2J1aWxkKGZvcmNlID0gVHJ1ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDE1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfZGlzcGxheS5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Zjg3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbWFnZXMvaW1hZ2VzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW1hZ2VzL2ltYWdlc19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5Y2Q5OQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2ltYWdlcy9pbWFnZXNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLWhvdmVyLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLWhvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZkZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQtaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWRkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU3MDkwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hZGQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWxlcnQucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9hbGVydC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjNmY1NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvYWxlcnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvY29uZmlybWF0aW9uLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvY29uZmlybWF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTU0MDJkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9jb25maXJtYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZGVuaWVkLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZGVuaWVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTM1YzdkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9kZW5pZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZXJyb3IucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9lcnJvci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2YThjMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvZXJyb3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaW5mby5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOGU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaXNzdWVzLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvaXNzdWVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGM3NDYxCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9pc3N1ZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVmcmVzaC5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3JlZnJlc2gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNmM0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3JlZnJlc2gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLWhvdmVyLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLWhvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTU3YzY5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUtaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvcmVtb3ZlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWMzYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5kaWNhdG9ycy9yZW1vdmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZGljYXRvcnMvdGljay5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3RpY2sucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWFkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmRpY2F0b3JzL3RpY2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19kaXNwbGF5LnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWZiYmEyCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvaW5mby9pbmZvX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2luZm8vaW5mb19ob3Zlci5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmZvL2luZm9faG92ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDI5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9pbmZvL2luZm9faG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfZGlzcGxheS5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjkwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9sYXllcnMvbGF5ZXJzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfaG92ZXIucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvbGF5ZXJzL2xheWVyc19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmM2NlMAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL2xheWVycy9sYXllcnNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkMGE1MAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2hvdmVyLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3BhY2thZ2VzL3BhY2thZ2VzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDgxMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcGFja2FnZXMvcGFja2FnZXNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfZGlzcGxheS5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODA5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy9yZWNpcGUvcmVjaXBlX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvcmVjaXBlL3JlY2lwZV9ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0OGRhOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3JlY2lwZS9yZWNpcGVfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2Rpc3BsYXkucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjNDY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3NldHRpbmdzL3NldHRpbmdzX2hvdmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTJhMGJmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvc2V0dGluZ3Mvc2V0dGluZ3NfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfZGlzcGxheS5wbmcgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2Rpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1M2M3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9pY29ucy90ZW1wbGF0ZXMvdGVtcGxhdGVzX2Rpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfaG92ZXIucG5nIGIvYml0YmFrZS9saWIvYmIvdWkvaWNvbnMvdGVtcGxhdGVzL3RlbXBsYXRlc19ob3Zlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiNzE2NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL2ljb25zL3RlbXBsYXRlcy90ZW1wbGF0ZXNfaG92ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weSBiL2JpdGJha2UvbGliL2JiL3VpL2tub3R0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmVlMjQyCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYmIvdWkva25vdHR5LnB5CkBAIC0wLDAgKzEsNTY0IEBACisjCisjIEJpdEJha2UgKE5vKVRUWSBVSSBJbXBsZW1lbnRhdGlvbgorIworIyBIYW5kbGluZyBvdXRwdXQgdG8gVFRZcyBvciBmaWxlcyAobm8gVFRZKQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB4bWxycGNsaWIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcHJvZ3Jlc3NiYXIKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBiYi5tc2cKK2ltcG9ydCB0aW1lCitpbXBvcnQgZmNudGwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBjb3B5CitpbXBvcnQgYXRleGl0Citmcm9tIGJiLnVpIGltcG9ydCB1aWhlbHBlcgorCitmZWF0dXJlU2V0ID0gW2JiLmNvb2tlci5Db29rZXJGZWF0dXJlcy5TRU5EX1NBTklUWUVWRU5UU10KKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIkJpdEJha2UiKQoraW50ZXJhY3RpdmUgPSBzeXMuc3Rkb3V0LmlzYXR0eSgpCisKK2NsYXNzIEJCUHJvZ3Jlc3MocHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIG1heHZhbCk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHdpZGdldHMgPSBbcHJvZ3Jlc3NiYXIuUGVyY2VudGFnZSgpLCAnICcsIHByb2dyZXNzYmFyLkJhcigpLCAnICcsCisgICAgICAgICAgIHByb2dyZXNzYmFyLkVUQSgpXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0ID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHV0lOQ0gpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX3Jlc2l6ZV9kZWZhdWx0ID0gTm9uZQorICAgICAgICBwcm9ncmVzc2Jhci5Qcm9ncmVzc0Jhci5fX2luaXRfXyhzZWxmLCBtYXh2YWwsIFtzZWxmLm1zZyArICI6ICJdICsgd2lkZ2V0cywgZmQ9c3lzLnN0ZG91dCkKKworICAgIGRlZiBfaGFuZGxlX3Jlc2l6ZShzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgcHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXIuX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSkKKyAgICAgICAgaWYgc2VsZi5fcmVzaXplX2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLl9yZXNpemVfZGVmYXVsdChzaWdudW0sIGZyYW1lKQorICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHByb2dyZXNzYmFyLlByb2dyZXNzQmFyLmZpbmlzaChzZWxmKQorICAgICAgICBpZiBzZWxmLl9yZXNpemVfZGVmYXVsdDoKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1dJTkNILCBzZWxmLl9yZXNpemVfZGVmYXVsdCkKKworY2xhc3MgTm9uSW50ZXJhY3RpdmVQcm9ncmVzcyhvYmplY3QpOgorICAgIGZvYmogPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBtYXh2YWwpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLm1heHZhbCA9IG1heHZhbAorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmZvYmoud3JpdGUoIiVzLi4uIiAlIHNlbGYubXNnKQorICAgICAgICBzZWxmLmZvYmouZmx1c2goKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHNlbGYuZm9iai53cml0ZSgiZG9uZS5cbiIpCisgICAgICAgIHNlbGYuZm9iai5mbHVzaCgpCisKK2RlZiBuZXdfcHJvZ3Jlc3MobXNnLCBtYXh2YWwpOgorICAgIGlmIGludGVyYWN0aXZlOgorICAgICAgICByZXR1cm4gQkJQcm9ncmVzcyhtc2csIG1heHZhbCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uSW50ZXJhY3RpdmVQcm9ncmVzcyhtc2csIG1heHZhbCkKKworZGVmIHBsdXJhbGlzZShzaW5ndWxhciwgcGx1cmFsLCBxdHkpOgorICAgIGlmKHF0eSA9PSAxKToKKyAgICAgICAgcmV0dXJuIHNpbmd1bGFyICUgcXR5CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHBsdXJhbCAlIHF0eQorCisKK2NsYXNzIEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRmLCBmb3JtYXQpOgorICAgICAgICBzZWxmLnRmID0gdGYKKyAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQKKworICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPT0gc2VsZi5mb3JtYXQuTk9URSBhbmQgKHJlY29yZC5tc2cuc3RhcnRzd2l0aCgiUnVubmluZyIpIG9yIHJlY29yZC5tc2cuc3RhcnRzd2l0aCgicmVjaXBlICIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLnRmLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgVGVybWluYWxGaWx0ZXIob2JqZWN0KToKKyAgICBjb2x1bW5zID0gODAKKworICAgIGRlZiBzaWd3aW5jaF9oYW5kbGUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIHNlbGYuY29sdW1ucyA9IHNlbGYuZ2V0VGVybWluYWxDb2x1bW5zKCkKKyAgICAgICAgaWYgc2VsZi5fc2lnd2luY2hfZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYuX3NpZ3dpbmNoX2RlZmF1bHQoc2lnbnVtLCBmcmFtZSkKKworICAgIGRlZiBnZXRUZXJtaW5hbENvbHVtbnMoc2VsZik6CisgICAgICAgIGRlZiBpb2N0bF9HV0lOU1ooZmQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNyID0gc3RydWN0LnVucGFjaygnaGgnLCBmY250bC5pb2N0bChmZCwgc2VsZi50ZXJtaW9zLlRJT0NHV0lOU1osICcxMjM0JykpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBjcgorICAgICAgICBjciA9IGlvY3RsX0dXSU5TWihzeXMuc3Rkb3V0LmZpbGVubygpKQorICAgICAgICBpZiBub3QgY3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKG9zLmN0ZXJtaWQoKSwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICAgICAgY3IgPSBpb2N0bF9HV0lOU1ooZmQpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgY3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3IgPSAoZW52WydMSU5FUyddLCBlbnZbJ0NPTFVNTlMnXSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBjciA9ICgyNSwgODApCisgICAgICAgIHJldHVybiBjclsxXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1haW4sIGhlbHBlciwgY29uc29sZSwgZXJyY29uc29sZSwgZm9ybWF0KToKKyAgICAgICAgc2VsZi5tYWluID0gbWFpbgorICAgICAgICBzZWxmLmhlbHBlciA9IGhlbHBlcgorICAgICAgICBzZWxmLmN1dSA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGRpbmJhY2t1cCA9IE5vbmUKKyAgICAgICAgc2VsZi5pbnRlcmFjdGl2ZSA9IHN5cy5zdGRvdXQuaXNhdHR5KCkKKyAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IEZhbHNlCisgICAgICAgIHNlbGYubGFzdHBpZHMgPSBbXQorCisgICAgICAgIGlmIG5vdCBzZWxmLmludGVyYWN0aXZlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGN1cnNlcworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBzeXMuZXhpdCgiRkFUQUw6IFRoZSBrbm90dHkgdWkgY291bGQgbm90IGxvYWQgdGhlIHJlcXVpcmVkIGN1cnNlcyBweXRob24gbW9kdWxlLiIpCisKKyAgICAgICAgaW1wb3J0IHRlcm1pb3MKKyAgICAgICAgc2VsZi5jdXJzZXMgPSBjdXJzZXMKKyAgICAgICAgc2VsZi50ZXJtaW9zID0gdGVybWlvcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5zdGRpbmJhY2t1cCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICAgICAgbmV3ID0gY29weS5kZWVwY29weShzZWxmLnN0ZGluYmFja3VwKQorICAgICAgICAgICAgbmV3WzNdID0gbmV3WzNdICYgfnRlcm1pb3MuRUNITworICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBuZXcpCisgICAgICAgICAgICBjdXJzZXMuc2V0dXB0ZXJtKCkKKyAgICAgICAgICAgIGlmIGN1cnNlcy50aWdldG51bSgiY29sb3JzIikgPiAyOgorICAgICAgICAgICAgICAgIGZvcm1hdC5lbmFibGVfY29sb3IoKQorICAgICAgICAgICAgc2VsZi5lZCA9IGN1cnNlcy50aWdldHN0cigiZWQiKQorICAgICAgICAgICAgaWYgc2VsZi5lZDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1dSA9IGN1cnNlcy50aWdldHN0cigiY3V1IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9zaWd3aW5jaF9kZWZhdWx0ID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHV0lOQ0gpCisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNlbGYuc2lnd2luY2hfaGFuZGxlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuY29sdW1ucyA9IHNlbGYuZ2V0VGVybWluYWxDb2x1bW5zKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jdXUgPSBOb25lCisgICAgICAgIGNvbnNvbGUuYWRkRmlsdGVyKEludGVyYWN0Q29uc29sZUxvZ0ZpbHRlcihzZWxmLCBmb3JtYXQpKQorICAgICAgICBlcnJjb25zb2xlLmFkZEZpbHRlcihJbnRlcmFjdENvbnNvbGVMb2dGaWx0ZXIoc2VsZiwgZm9ybWF0KSkKKworICAgIGRlZiBjbGVhckZvb3RlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mb290ZXJfcHJlc2VudDoKKyAgICAgICAgICAgIGxpbmVzID0gc2VsZi5mb290ZXJfcHJlc2VudAorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzZWxmLmN1cnNlcy50cGFybShzZWxmLmN1dSwgbGluZXMpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzZWxmLmN1cnNlcy50cGFybShzZWxmLmVkKSkKKyAgICAgICAgc2VsZi5mb290ZXJfcHJlc2VudCA9IEZhbHNlCisKKyAgICBkZWYgdXBkYXRlRm9vdGVyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5jdXU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYWN0aXZldGFza3MgPSBzZWxmLmhlbHBlci5ydW5uaW5nX3Rhc2tzCisgICAgICAgIGZhaWxlZHRhc2tzID0gc2VsZi5oZWxwZXIuZmFpbGVkX3Rhc2tzCisgICAgICAgIHJ1bm5pbmdwaWRzID0gc2VsZi5oZWxwZXIucnVubmluZ19waWRzCisgICAgICAgIGlmIHNlbGYuZm9vdGVyX3ByZXNlbnQgYW5kIChzZWxmLmxhc3Rjb3VudCA9PSBzZWxmLmhlbHBlci50YXNrbnVtYmVyX2N1cnJlbnQpIGFuZCAoc2VsZi5sYXN0cGlkcyA9PSBydW5uaW5ncGlkcyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5mb290ZXJfcHJlc2VudDoKKyAgICAgICAgICAgIHNlbGYuY2xlYXJGb290ZXIoKQorICAgICAgICBpZiAobm90IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfdG90YWwgb3Igc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50ID09IHNlbGYuaGVscGVyLnRhc2tudW1iZXJfdG90YWwpIGFuZCBub3QgbGVuKGFjdGl2ZXRhc2tzKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0YXNrcyA9IFtdCisgICAgICAgIGZvciB0IGluIHJ1bm5pbmdwaWRzOgorICAgICAgICAgICAgdGFza3MuYXBwZW5kKCIlcyAocGlkICVzKSIgJSAoYWN0aXZldGFza3NbdF1bInRpdGxlIl0sIHQpKQorCisgICAgICAgIGlmIHNlbGYubWFpbi5zaHV0ZG93bjoKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiV2FpdGluZyBmb3IgJXMgcnVubmluZyB0YXNrcyB0byBmaW5pc2g6IiAlIGxlbihhY3RpdmV0YXNrcykKKyAgICAgICAgZWxpZiBub3QgbGVuKGFjdGl2ZXRhc2tzKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSAiTm8gY3VycmVudGx5IHJ1bm5pbmcgdGFza3MgKCVzIG9mICVzKSIgJSAoc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50LCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGVudCA9ICJDdXJyZW50bHkgJXMgcnVubmluZyB0YXNrcyAoJXMgb2YgJXMpOiIgJSAobGVuKGFjdGl2ZXRhc2tzKSwgc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50LCBzZWxmLmhlbHBlci50YXNrbnVtYmVyX3RvdGFsKQorICAgICAgICBwcmludChjb250ZW50KQorICAgICAgICBsaW5lcyA9IDEgKyBpbnQobGVuKGNvbnRlbnQpIC8gKHNlbGYuY29sdW1ucyArIDEpKQorICAgICAgICBmb3IgdGFza251bSwgdGFzayBpbiBlbnVtZXJhdGUodGFza3MpOgorICAgICAgICAgICAgY29udGVudCA9ICIlczogJXMiICUgKHRhc2tudW0sIHRhc2spCisgICAgICAgICAgICBwcmludChjb250ZW50KQorICAgICAgICAgICAgbGluZXMgPSBsaW5lcyArIDEgKyBpbnQobGVuKGNvbnRlbnQpIC8gKHNlbGYuY29sdW1ucyArIDEpKQorICAgICAgICBzZWxmLmZvb3Rlcl9wcmVzZW50ID0gbGluZXMKKyAgICAgICAgc2VsZi5sYXN0cGlkcyA9IHJ1bm5pbmdwaWRzWzpdCisgICAgICAgIHNlbGYubGFzdGNvdW50ID0gc2VsZi5oZWxwZXIudGFza251bWJlcl9jdXJyZW50CisKKyAgICBkZWYgZmluaXNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN0ZGluYmFja3VwOgorICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYudGVybWlvcy50Y3NldGF0dHIoZmQsIHNlbGYudGVybWlvcy5UQ1NBRFJBSU4sIHNlbGYuc3RkaW5iYWNrdXApCisKK2RlZiBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlcik6CisgICAgIyBHZXQgdmFsdWVzIG9mIHZhcmlhYmxlcyB3aGljaCBjb250cm9sIG91ciBvdXRwdXQKKyAgICBpbmNsdWRlbG9ncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1MiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTIHZhcmlhYmxlOiAlcyIgJSBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICBsb2dsaW5lcywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1NfTElORVMiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTX0xJTkVTIHZhcmlhYmxlOiAlcyIgJSBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICBjb25zb2xlbG9nZmlsZSwgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCX0NPTlNPTEVMT0ciXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQl9DT05TT0xFTE9HIHZhcmlhYmxlOiAlcyIgJSBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICByZXR1cm4gaW5jbHVkZWxvZ3MsIGxvZ2xpbmVzLCBjb25zb2xlbG9nZmlsZQorCitfZXZ0X2xpc3QgPSBbICJiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0IiwgImJiLmV2ZW50LkxvZ0V4ZWNUVFkiLCAibG9nZ2luZy5Mb2dSZWNvcmQiLAorICAgICAgICAgICAgICAiYmIuYnVpbGQuVGFza0ZhaWxlZCIsICJiYi5idWlsZC5UYXNrQmFzZSIsICJiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiLAorICAgICAgICAgICAgICAiYmIuZXZlbnQuUGFyc2VQcm9ncmVzcyIsICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCIsICJiYi5ldmVudC5DYWNoZUxvYWRTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzIiwgImJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCIsICJiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQiLAorICAgICAgICAgICAgICAiYmIuY29tbWFuZC5Db21tYW5kRXhpdCIsICJiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQiLCAgImJiLmNvb2tlci5Db29rZXJFeGl0IiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzIiwgImJiLmV2ZW50Lk5vUHJvdmlkZXIiLCAiYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkIiwKKyAgICAgICAgICAgICAgImJiLnJ1bnF1ZXVlLnJ1blF1ZXVlVGFza1N0YXJ0ZWQiLCAiYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkIiwgImJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkIiwKKyAgICAgICAgICAgICAgImJiLmV2ZW50LkJ1aWxkQmFzZSIsICJiYi5idWlsZC5UYXNrU3RhcnRlZCIsICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIiwgImJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQiXQorCitkZWYgbWFpbihzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zLCB0ZiA9IFRlcm1pbmFsRmlsdGVyKToKKworICAgIGluY2x1ZGVsb2dzLCBsb2dsaW5lcywgY29uc29sZWxvZ2ZpbGUgPSBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlcikKKworICAgIGlmIHN5cy5zdGRpbi5pc2F0dHkoKSBhbmQgc3lzLnN0ZG91dC5pc2F0dHkoKToKKyAgICAgICAgbG9nX2V4ZWNfdHR5ID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGxvZ19leGVjX3R0eSA9IEZhbHNlCisKKyAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkKKworICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBlcnJjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRlcnIpCisgICAgZm9ybWF0X3N0ciA9ICIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICBmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICBiYi5tc2cuYWRkRGVmYXVsdGxvZ0ZpbHRlcihjb25zb2xlLCBiYi5tc2cuQkJMb2dGaWx0ZXJTdGRPdXQpCisgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoZXJyY29uc29sZSwgYmIubXNnLkJCTG9nRmlsdGVyU3RkRXJyKQorICAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdCkKKyAgICBlcnJjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXQpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihlcnJjb25zb2xlKQorCisgICAgaWYgcGFyYW1zLm9wdGlvbnMucmVtb3RlX3NlcnZlciBhbmQgcGFyYW1zLm9wdGlvbnMua2lsbF9zZXJ2ZXI6CisgICAgICAgIHNlcnZlci50ZXJtaW5hdGVTZXJ2ZXIoKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGNvbnNvbGVsb2dmaWxlIGFuZCBub3QgcGFyYW1zLm9wdGlvbnMuc2hvd19lbnZpcm9ubWVudCBhbmQgbm90IHBhcmFtcy5vcHRpb25zLnNob3dfdmVyc2lvbnM6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoY29uc29sZWxvZ2ZpbGUpKQorICAgICAgICBjb25sb2dmb3JtYXQgPSBiYi5tc2cuQkJMb2dGb3JtYXR0ZXIoZm9ybWF0X3N0cikKKyAgICAgICAgY29uc29sZWxvZyA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoY29uc29sZWxvZ2ZpbGUpCisgICAgICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGVsb2cpCisgICAgICAgIGNvbnNvbGVsb2cuc2V0Rm9ybWF0dGVyKGNvbmxvZ2Zvcm1hdCkKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZWxvZykKKworICAgIGxsZXZlbCwgZGVidWdfZG9tYWlucyA9IGJiLm1zZy5jb25zdHJ1Y3RMb2dPcHRpb25zKCkKKyAgICBzZXJ2ZXIucnVuQ29tbWFuZChbInNldEV2ZW50TWFzayIsIHNlcnZlci5nZXRFdmVudEhhbmRsZSgpLCBsbGV2ZWwsIGRlYnVnX2RvbWFpbnMsIF9ldnRfbGlzdF0pCisKKyAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seToKKyAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICBwYXJhbXMudXBkYXRlVG9TZXJ2ZXIoc2VydmVyLCBvcy5lbnZpcm9uLmNvcHkoKSkKKyAgICAgICAgY21kbGluZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQorICAgICAgICBpZiBub3QgY21kbGluZToKKyAgICAgICAgICAgIHByaW50KCJOb3RoaW5nIHRvIGRvLiAgVXNlICdiaXRiYWtlIHdvcmxkJyB0byBidWlsZCBldmVyeXRoaW5nLCBvciBydW4gJ2JpdGJha2UgLS1oZWxwJyBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uIikKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmICdtc2cnIGluIGNtZGxpbmUgYW5kIGNtZGxpbmVbJ21zZyddOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGNtZGxpbmVbJ21zZyddKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICByZXQsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoY21kbGluZVsnYWN0aW9uJ10pCisgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb21tYW5kICclcycgZmFpbGVkOiAlcyIgJSAoY21kbGluZSwgZXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxpZiByZXQgIT0gVHJ1ZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ29tbWFuZCAnJXMnIGZhaWxlZDogcmV0dXJuZWQgJXMiICUgKGNtZGxpbmUsIHJldCkpCisgICAgICAgICAgICByZXR1cm4gMQorCisKKyAgICBwYXJzZXByb2dyZXNzID0gTm9uZQorICAgIGNhY2hlcHJvZ3Jlc3MgPSBOb25lCisgICAgbWFpbi5zaHV0ZG93biA9IDAKKyAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgcmV0dXJuX3ZhbHVlID0gMAorICAgIGVycm9ycyA9IDAKKyAgICB3YXJuaW5ncyA9IDAKKyAgICB0YXNrZmFpbHVyZXMgPSBbXQorCisgICAgdGVybWZpbHRlciA9IHRmKG1haW4sIGhlbHBlciwgY29uc29sZSwgZXJyY29uc29sZSwgZm9ybWF0KQorICAgIGF0ZXhpdC5yZWdpc3Rlcih0ZXJtZmlsdGVyLmZpbmlzaCkKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwKQorICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBtYWluLnNodXRkb3duID4gMToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLnVwZGF0ZUZvb3RlcigpCisgICAgICAgICAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIud2FpdEV2ZW50KDAuMjUpCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGhlbHBlci5ldmVudEhhbmRsZXIoZXZlbnQpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV4aXRXYWl0KToKKyAgICAgICAgICAgICAgICBpZiBub3QgbWFpbi5zaHV0ZG93bjoKKyAgICAgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICAgICAgaWYgbG9nX2V4ZWNfdHR5OgorICAgICAgICAgICAgICAgICAgICB0cmllcyA9IGV2ZW50LnJldHJpZXMKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgdHJpZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiVHJ5aW5nIHRvIHJ1bjogJXMiICUgZXZlbnQucHJvZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnN5c3RlbShldmVudC5wcm9nKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGV2ZW50LnNsZWVwX2RlbGF5KQorICAgICAgICAgICAgICAgICAgICAgICAgdHJpZXMgLT0gMQorICAgICAgICAgICAgICAgICAgICBpZiB0cmllczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXZlbnQubXNnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5sZXZlbG5vID49IGZvcm1hdC5FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdC5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyA9IHdhcm5pbmdzICsgMQorICAgICAgICAgICAgICAgICMgRm9yICJub3JtYWwiIGxvZ2dpbmcgY29uZGl0aW9ucywgZG9uJ3Qgc2hvdyBub3RlIGxvZ3MgZnJvbSB0YXNrcworICAgICAgICAgICAgICAgICMgYnV0IGRvIHNob3cgdGhlbSBpZiB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwgdG8KKyAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdmVyYm9zZS9kZWJ1ZyBtZXNzYWdlcworICAgICAgICAgICAgICAgIGlmIGV2ZW50LnRhc2twaWQgIT0gMCBhbmQgZXZlbnQubGV2ZWxubyA8PSBmb3JtYXQuTk9URSBhbmQgKGV2ZW50LmxldmVsbm8gPCBsbGV2ZWwgb3IgKGV2ZW50LmxldmVsbm8gPT0gZm9ybWF0Lk5PVEUgYW5kIGxsZXZlbCAhPSBmb3JtYXQuVkVSQk9TRSkpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkxvZ2ZpbGUgZm9yIGZhaWxlZCBzZXRzY2VuZSB0YXNrIGlzICVzIiAlIGV2ZW50LmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IDEKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQorICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIkxvZ2ZpbGUgb2YgZmFpbHVyZSBzdG9yZWQgaW46ICVzIiAlIGxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGluY2x1ZGVsb2dzIGFuZCBub3QgZXZlbnQuZXJycHJpbnRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJMb2cgZGF0YSBmb2xsb3dzOiIpCisgICAgICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihsb2dmaWxlLCAiciIpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsID09ICcnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9nbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnIHwgJXMnICUgbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA+IGludChsb2dsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnfCAlcycgJSBsKQorICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQobGluZSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhldmVudC5fbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC50b3RhbCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MgPSBuZXdfcHJvZ3Jlc3MoIlBhcnNpbmcgcmVjaXBlcyIsIGV2ZW50LnRvdGFsKS5zdGFydCgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MudXBkYXRlKGV2ZW50LmN1cnJlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgICAgICAgICBpZiBub3QgcGFyc2Vwcm9ncmVzczoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIHBhcnNlcHJvZ3Jlc3MuZmluaXNoKCkKKyAgICAgICAgICAgICAgICBwcmludCgoIlBhcnNpbmcgb2YgJWQgLmJiIGZpbGVzIGNvbXBsZXRlICglZCBjYWNoZWQsICVkIHBhcnNlZCkuICVkIHRhcmdldHMsICVkIHNraXBwZWQsICVkIG1hc2tlZCwgJWQgZXJyb3JzLiIKKyAgICAgICAgICAgICAgICAgICAgJSAoIGV2ZW50LnRvdGFsLCBldmVudC5jYWNoZWQsIGV2ZW50LnBhcnNlZCwgZXZlbnQudmlydHVhbHMsIGV2ZW50LnNraXBwZWQsIGV2ZW50Lm1hc2tlZCwgZXZlbnQuZXJyb3JzKSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgY2FjaGVwcm9ncmVzcyA9IG5ld19wcm9ncmVzcygiTG9hZGluZyBjYWNoZSIsIGV2ZW50LnRvdGFsKS5zdGFydCgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICBjYWNoZXByb2dyZXNzLnVwZGF0ZShldmVudC5jdXJyZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGNhY2hlcHJvZ3Jlc3MuZmluaXNoKCkKKyAgICAgICAgICAgICAgICBwcmludCgiTG9hZGVkICVkIGVudHJpZXMgZnJvbSBkZXBlbmRlbmN5IGNhY2hlLiIgJSBldmVudC5udW1fZW50cmllcykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IGV2ZW50LmV4aXRjb2RlCisgICAgICAgICAgICAgICAgaWYgZXZlbnQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyArIDEKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiwgZXZlbnQuZXJyb3IpCisgICAgICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuY29tbWFuZC5Db21tYW5kRXhpdCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHJldHVybl92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gZXZlbnQuZXhpdGNvZGUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCwgYmIuY29va2VyLkNvb2tlckV4aXQpKToKKyAgICAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5NdWx0aXBsZVByb3ZpZGVycyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIm11bHRpcGxlIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlIGZvciAlcyVzICglcykiLCBldmVudC5faXNfcnVudGltZSBhbmQgInJ1bnRpbWUgIiBvciAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5faXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4oZXZlbnQuX2NhbmRpZGF0ZXMpKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjb25zaWRlciBkZWZpbmluZyBhIFBSRUZFUlJFRF9QUk9WSURFUiBlbnRyeSB0byBtYXRjaCAlcyIsIGV2ZW50Ll9pdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Ob1Byb3ZpZGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9ydW50aW1lOgorICAgICAgICAgICAgICAgICAgICByID0gIlIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICIiCisKKyAgICAgICAgICAgICAgICBleHRyYSA9ICcnCisgICAgICAgICAgICAgICAgaWYgbm90IGV2ZW50Ll9yZWFzb25zOgorICAgICAgICAgICAgICAgICAgICBpZiBldmVudC5fY2xvc2VfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gIi4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMiICUgJ1xuICAnLmpvaW4oZXZlbnQuX2Nsb3NlX21hdGNoZXMpCisKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fZGVwZW5kZWVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCklcyIsIHIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2RlcGVuZGVlcyksIHIsIGV4dHJhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTm90aGluZyAlc1BST1ZJREVTICclcyclcyIsIHIsIGV2ZW50Ll9pdGVtLCBleHRyYSkKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiLCByZWFzb24pCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiUnVubmluZyBzZXRzY2VuZSB0YXNrICVkIG9mICVkICglcykiICUgKGV2ZW50LnN0YXRzLmNvbXBsZXRlZCArIGV2ZW50LnN0YXRzLmFjdGl2ZSArIGV2ZW50LnN0YXRzLmZhaWxlZCArIDEsIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNrc3RyaW5nKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5ub2V4ZWM6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ25vZXhlYyB0YXNrJworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhc2t0eXBlID0gJ3Rhc2snCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgJXMgJXMgb2YgJXMgKElEOiAlcywgJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy5jb21wbGV0ZWQgKyBldmVudC5zdGF0cy5hY3RpdmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0cy5mYWlsZWQgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRzLnRvdGFsLCBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICB0YXNrZmFpbHVyZXMuYXBwZW5kKGV2ZW50LnRhc2tzdHJpbmcpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUYXNrICVzICglcykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICclcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiU2V0c2NlbmUgdGFzayAlcyAoJXMpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnJXMnIC0gcmVhbCB0YXNrIHdpbGwgYmUgcnVuIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXNraWQsIGV2ZW50LnRhc2tzdHJpbmcsIGV2ZW50LmV4aXRjb2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkRlcFRyZWVHZW5lcmF0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgaWdub3JlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuU3RhbXBVcGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuQ29uZmlnUGFyc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ydW5xdWV1ZS5ydW5RdWV1ZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblN0YXJ0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXZlbnQuT3BlcmF0aW9uQ29tcGxldGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50Lk9wZXJhdGlvblByb2dyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LkRpc2tGdWxsKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmtub3duIGV2ZW50OiAlcyIsIGV2ZW50KQorCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgICMgaWdub3JlIGludGVycnVwdGVkIGlvCisgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzdHIoaW9lcnJvcikpCisgICAgICAgICAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seToKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICB0ZXJtZmlsdGVyLmNsZWFyRm9vdGVyKCkKKyAgICAgICAgICAgIGlmIHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlxuS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0aW5nIG9ic2VydmVyLi4uIikKKyAgICAgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMgorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHkgYW5kIG1haW4uc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICBwcmludCgiXG5TZWNvbmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBzdG9wcGluZy4uLlxuIikKKyAgICAgICAgICAgICAgICBfLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsic3RhdGVGb3JjZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seSBhbmQgbWFpbi5zaHV0ZG93biA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50KCJcbktleWJvYXJkIEludGVycnVwdCwgY2xvc2luZyBkb3duLi4uXG4iKQorICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGNsZWFubHkgc2h1dGRvd246ICVzIiAlIGVycm9yKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IG1haW4uc2h1dGRvd24gKyAxCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGUpKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtcy5vYnNlcnZlX29ubHk6CisgICAgICAgICAgICAgICAgXywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbInN0YXRlRm9yY2VTaHV0ZG93biJdKQorICAgICAgICAgICAgbWFpbi5zaHV0ZG93biA9IDIKKyAgICB0cnk6CisgICAgICAgIHN1bW1hcnkgPSAiIgorICAgICAgICBpZiB0YXNrZmFpbHVyZXM6CisgICAgICAgICAgICBzdW1tYXJ5ICs9IHBsdXJhbGlzZSgiXG5TdW1tYXJ5OiAlcyB0YXNrIGZhaWxlZDoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuU3VtbWFyeTogJXMgdGFza3MgZmFpbGVkOiIsIGxlbih0YXNrZmFpbHVyZXMpKQorICAgICAgICAgICAgZm9yIGZhaWx1cmUgaW4gdGFza2ZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHN1bW1hcnkgKz0gIlxuICAlcyIgJSBmYWlsdXJlCisgICAgICAgIGlmIHdhcm5pbmdzOgorICAgICAgICAgICAgc3VtbWFyeSArPSBwbHVyYWxpc2UoIlxuU3VtbWFyeTogVGhlcmUgd2FzICVzIFdBUk5JTkcgbWVzc2FnZSBzaG93bi4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuU3VtbWFyeTogVGhlcmUgd2VyZSAlcyBXQVJOSU5HIG1lc3NhZ2VzIHNob3duLiIsIHdhcm5pbmdzKQorICAgICAgICBpZiByZXR1cm5fdmFsdWUgYW5kIGVycm9yczoKKyAgICAgICAgICAgIHN1bW1hcnkgKz0gcGx1cmFsaXNlKCJcblN1bW1hcnk6IFRoZXJlIHdhcyAlcyBFUlJPUiBtZXNzYWdlIHNob3duLCByZXR1cm5pbmcgYSBub24temVybyBleGl0IGNvZGUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblN1bW1hcnk6IFRoZXJlIHdlcmUgJXMgRVJST1IgbWVzc2FnZXMgc2hvd24sIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4iLCBlcnJvcnMpCisgICAgICAgIGlmIHN1bW1hcnk6CisgICAgICAgICAgICBwcmludChzdW1tYXJ5KQorCisgICAgICAgIGlmIGludGVycnVwdGVkOgorICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGlvbiB3YXMgaW50ZXJydXB0ZWQsIHJldHVybmluZyBhIG5vbi16ZXJvIGV4aXQgY29kZS4iKQorICAgICAgICAgICAgaWYgcmV0dXJuX3ZhbHVlID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gMQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgcGFzcworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvbmN1cnNlcy5weSBiL2JpdGJha2UvbGliL2JiL3VpL25jdXJzZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4OWE3NwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL25jdXJzZXMucHkKQEAgLTAsMCArMSwzNzMgQEAKKyMKKyMgQml0QmFrZSBDdXJzZXMgVUkgSW1wbGVtZW50YXRpb24KKyMKKyMgSW1wbGVtZW50cyBhbiBuY3Vyc2VzIGZyb250ZW5kIGZvciB0aGUgQml0QmFrZSB1dGlsaXR5LgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiCisgICAgV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHdpbmRvd3M6CisKKyAgICAgICAgMS4pIE1haW4gV2luZG93OiBTaG93cyB3aGF0IHdlIGFyZSB1bHRpbWF0ZWx5IGJ1aWxkaW5nIGFuZCBob3cgZmFyIHdlIGFyZS4gSW5jbHVkZXMgc3RhdHVzIGJhcgorICAgICAgICAyLikgVGhyZWFkIEFjdGl2aXR5IFdpbmRvdzogU2hvd3Mgb25lIHN0YXR1cyBsaW5lIGZvciBldmVyeSBjb25jdXJyZW50IGJpdGJha2UgdGhyZWFkLgorICAgICAgICAzLikgQ29tbWFuZCBMaW5lIFdpbmRvdzogQ29udGFpbnMgYW4gaW50ZXJhY3RpdmUgY29tbWFuZCBsaW5lIHdoZXJlIHlvdSBjYW4gaW50ZXJhY3Qgdy8gQml0YmFrZS4KKworICAgIEJhc2ljIHdpbmRvdyBsYXlvdXQgaXMgbGlrZSB0aGF0OgorCisgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgIHwgPE1haW4gV2luZG93PiAgICAgICAgICAgICAgIHwgPFRocmVhZCBBY3Rpdml0eSBXaW5kb3c+ICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMDogZm9vIGRvX2NvbXBpbGUgY29tcGxldGV8CisgICAgICAgIHwgQnVpbGRpbmcgR3RrKy0yLjYuMTAgICAgICAgIHwgMTogYmFyIGRvX3BhdGNoIGNvbXBsZXRlICB8CisgICAgICAgIHwgU3RhdHVzOiA2MCUgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgIHw8Q29tbWFuZCBMaW5lIFdpbmRvdz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHw+Pj4gd2hpY2ggdmlydHVhbC9rZXJuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHxvcGVuemF1cnVzLWtlcm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHw+Pj4gXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisKKyIiIgorCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MsIHN5cywgaXRlcnRvb2xzLCB0aW1lLCBzdWJwcm9jZXNzCisKK3RyeToKKyAgICBpbXBvcnQgY3Vyc2VzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3lzLmV4aXQoIkZBVEFMOiBUaGUgbmN1cnNlcyB1aSBjb3VsZCBub3QgbG9hZCB0aGUgcmVxdWlyZWQgY3Vyc2VzIHB5dGhvbiBtb2R1bGUuIikKKworaW1wb3J0IGJiCitpbXBvcnQgeG1scnBjbGliCitmcm9tIGJiIGltcG9ydCB1aQorZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKKworcGFyc2VzcGluID0gaXRlcnRvb2xzLmN5Y2xlKCByJ3wvLVxcJyApCisKK1ggPSAwCitZID0gMQorV0lEVEggPSAyCitIRUlHSFQgPSAzCisKK01BWFNUQVRVU0xFTkdUSCA9IDMyCisKK2NsYXNzIE5DdXJzZXNVSToKKyAgICAiIiIKKyAgICBOQ3Vyc2VzIFVJIENsYXNzCisgICAgIiIiCisgICAgY2xhc3MgV2luZG93OgorICAgICAgICAiIiJCYXNlIFdpbmRvdyBDbGFzcyIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnPWN1cnNlcy5DT0xPUl9CTEFDSywgYmc9Y3Vyc2VzLkNPTE9SX1dISVRFICk6CisgICAgICAgICAgICBzZWxmLndpbiA9IGN1cnNlcy5uZXd3aW4oIGhlaWdodCwgd2lkdGgsIHksIHggKQorICAgICAgICAgICAgc2VsZi5kaW1lbnNpb25zID0gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKKyAgICAgICAgICAgICAgICBjb2xvciA9IDEKKyAgICAgICAgICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKCBjb2xvciwgZmcsIGJnICkKKyAgICAgICAgICAgICAgICBzZWxmLndpbi5ia2dkc2V0KCBvcmQoJyAnKSwgY3Vyc2VzLmNvbG9yX3BhaXIoY29sb3IpICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53aW4uYmtnZHNldCggb3JkKCcgJyksIGN1cnNlcy5BX0JPTEQgKQorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzZWxmLmVyYXNlKCkKKyAgICAgICAgICAgIHNlbGYuc2V0U2Nyb2xsaW5nKCkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgICAgICBkZWYgZXJhc2UoIHNlbGYgKToKKyAgICAgICAgICAgIHNlbGYud2luLmVyYXNlKCkKKworICAgICAgICBkZWYgc2V0U2Nyb2xsaW5nKCBzZWxmLCBiID0gVHJ1ZSApOgorICAgICAgICAgICAgc2VsZi53aW4uc2Nyb2xsb2soIGIgKQorICAgICAgICAgICAgc2VsZi53aW4uaWRsb2soIGIgKQorCisgICAgICAgIGRlZiBzZXRCb3hlZCggc2VsZiApOgorICAgICAgICAgICAgc2VsZi5ib3hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2luLmJveCgpCisgICAgICAgICAgICBzZWxmLndpbi5ub3V0cmVmcmVzaCgpCisKKyAgICAgICAgZGVmIHNldFRleHQoIHNlbGYsIHgsIHksIHRleHQsICphcmdzICk6CisgICAgICAgICAgICBzZWxmLndpbi5hZGRzdHIoIHksIHgsIHRleHQsICphcmdzICkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgICAgICBkZWYgYXBwZW5kVGV4dCggc2VsZiwgdGV4dCwgKmFyZ3MgKToKKyAgICAgICAgICAgIHNlbGYud2luLmFkZHN0ciggdGV4dCwgKmFyZ3MgKQorICAgICAgICAgICAgc2VsZi53aW4ubm91dHJlZnJlc2goKQorCisgICAgICAgIGRlZiBkcmF3SGxpbmUoIHNlbGYsIHkgKToKKyAgICAgICAgICAgIHNlbGYud2luLmhsaW5lKCB5LCAwLCBjdXJzZXMuQUNTX0hMSU5FLCBzZWxmLmRpbWVuc2lvbnNbV0lEVEhdICkKKyAgICAgICAgICAgIHNlbGYud2luLm5vdXRyZWZyZXNoKCkKKworICAgIGNsYXNzIERlY29yYXRlZFdpbmRvdyggV2luZG93ICk6CisgICAgICAgICIiIkJhc2UgY2xhc3MgZm9yIHdpbmRvd3Mgd2l0aCBhIGJveCBhbmQgYSB0aXRsZSBiYXIiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB0aXRsZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmc9Y3Vyc2VzLkNPTE9SX0JMQUNLLCBiZz1jdXJzZXMuQ09MT1JfV0hJVEUgKToKKyAgICAgICAgICAgIE5DdXJzZXNVSS5XaW5kb3cuX19pbml0X18oIHNlbGYsIHgrMSwgeSszLCB3aWR0aC0yLCBoZWlnaHQtNCwgZmcsIGJnICkKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbiA9IE5DdXJzZXNVSS5XaW5kb3coIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZnLCBiZyApCisgICAgICAgICAgICBzZWxmLmRlY29yYXRpb24uc2V0Qm94ZWQoKQorICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLndpbi5obGluZSggMiwgMSwgY3Vyc2VzLkFDU19ITElORSwgd2lkdGgtMiApCisgICAgICAgICAgICBzZWxmLnNldFRpdGxlKCB0aXRsZSApCisKKyAgICAgICAgZGVmIHNldFRpdGxlKCBzZWxmLCB0aXRsZSApOgorICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLnNldFRleHQoIDEsIDEsIHRpdGxlLmNlbnRlciggc2VsZi5kaW1lbnNpb25zW1dJRFRIXS0yICksIGN1cnNlcy5BX0JPTEQgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisjICAgIGNsYXNzIFRpdGxlV2luZG93KCBXaW5kb3cgKToKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMgICAgICAgICIiIlRpdGxlIFdpbmRvdyIiIgorIyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk6CisjICAgICAgICAgICAgTkN1cnNlc1VJLldpbmRvdy5fX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApCisjICAgICAgICAgICAgdmVyc2lvbiA9IGJiLl9fdmVyc2lvbl9fCisjICAgICAgICAgICAgdGl0bGUgPSAiQml0QmFrZSAlcyIgJSB2ZXJzaW9uCisjICAgICAgICAgICAgY3JlZGl0ID0gIihDKSAyMDAzLTIwMDcgVGVhbSBCaXRCYWtlIgorIyAgICAgICAgICAgICNzZWxmLndpbi5obGluZSggMiwgMSwgY3Vyc2VzLkFDU19ITElORSwgd2lkdGgtMiApCisjICAgICAgICAgICAgc2VsZi53aW4uYm9yZGVyKCkKKyMgICAgICAgICAgICBzZWxmLnNldFRleHQoIDEsIDEsIHRpdGxlLmNlbnRlciggc2VsZi5kaW1lbnNpb25zW1dJRFRIXS0yICksIGN1cnNlcy5BX0JPTEQgKQorIyAgICAgICAgICAgIHNlbGYuc2V0VGV4dCggMSwgMiwgY3JlZGl0LmNlbnRlciggc2VsZi5kaW1lbnNpb25zW1dJRFRIXS0yICksIGN1cnNlcy5BX0JPTEQgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgVGhyZWFkQWN0aXZpdHlXaW5kb3coIERlY29yYXRlZFdpbmRvdyApOgorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworICAgICAgICAiIiJUaHJlYWQgQWN0aXZpdHkgV2luZG93IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorICAgICAgICAgICAgTkN1cnNlc1VJLkRlY29yYXRlZFdpbmRvdy5fX2luaXRfXyggc2VsZiwgIlRocmVhZCBBY3Rpdml0eSIsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorCisgICAgICAgIGRlZiBzZXRTdGF0dXMoIHNlbGYsIHRocmVhZCwgdGV4dCApOgorICAgICAgICAgICAgbGluZSA9ICIlMDJkOiAlcyIgJSAoIHRocmVhZCwgdGV4dCApCisgICAgICAgICAgICB3aWR0aCA9IHNlbGYuZGltZW5zaW9uc1tXSURUSF0KKyAgICAgICAgICAgIGlmICggbGVuKGxpbmUpID4gd2lkdGggKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6d2lkdGgtM10gKyAiLi4uIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sanVzdCggd2lkdGggKQorICAgICAgICAgICAgc2VsZi5zZXRUZXh0KCAwLCB0aHJlYWQsIGxpbmUgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgTWFpbldpbmRvdyggRGVjb3JhdGVkV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgICIiIk1haW4gV2luZG93IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyggc2VsZiwgeCwgeSwgd2lkdGgsIGhlaWdodCApOgorICAgICAgICAgICAgc2VsZi5TdGF0dXNQb3NpdGlvbiA9IHdpZHRoIC0gTUFYU1RBVFVTTEVOR1RICisgICAgICAgICAgICBOQ3Vyc2VzVUkuRGVjb3JhdGVkV2luZG93Ll9faW5pdF9fKCBzZWxmLCBOb25lLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkKKyAgICAgICAgICAgIGN1cnNlcy5ubCgpCisKKyAgICAgICAgZGVmIHNldFRpdGxlKCBzZWxmLCB0aXRsZSApOgorICAgICAgICAgICAgdGl0bGUgPSAiQml0QmFrZSAlcyIgJSBiYi5fX3ZlcnNpb25fXworICAgICAgICAgICAgc2VsZi5kZWNvcmF0aW9uLnNldFRleHQoIDIsIDEsIHRpdGxlLCBjdXJzZXMuQV9CT0xEICkKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCBzZWxmLlN0YXR1c1Bvc2l0aW9uIC0gOCwgMSwgIlN0YXR1czoiLCBjdXJzZXMuQV9CT0xEICkKKworICAgICAgICBkZWYgc2V0U3RhdHVzKHNlbGYsIHN0YXR1cyk6CisgICAgICAgICAgICB3aGlsZSBsZW4oc3RhdHVzKSA8IE1BWFNUQVRVU0xFTkdUSDoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMgKyAiICIKKyAgICAgICAgICAgIHNlbGYuZGVjb3JhdGlvbi5zZXRUZXh0KCBzZWxmLlN0YXR1c1Bvc2l0aW9uLCAxLCBzdGF0dXMsIGN1cnNlcy5BX0JPTEQgKQorCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyAgICBjbGFzcyBTaGVsbE91dHB1dFdpbmRvdyggRGVjb3JhdGVkV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgICIiIkludGVyYWN0aXZlIENvbW1hbmQgTGluZSBPdXRwdXQiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKCBzZWxmLCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk6CisgICAgICAgICAgICBOQ3Vyc2VzVUkuRGVjb3JhdGVkV2luZG93Ll9faW5pdF9fKCBzZWxmLCAiQ29tbWFuZCBMaW5lIFdpbmRvdyIsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgY2xhc3MgU2hlbGxJbnB1dFdpbmRvdyggV2luZG93ICk6CisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgICAgICIiIkludGVyYWN0aXZlIENvbW1hbmQgTGluZSBJbnB1dCIiIgorICAgICAgICBkZWYgX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKToKKyAgICAgICAgICAgIE5DdXJzZXNVSS5XaW5kb3cuX19pbml0X18oIHNlbGYsIHgsIHksIHdpZHRoLCBoZWlnaHQgKQorCisjIHB1dCB0aGF0IHRvIHRoZSB0b3AgYWdhaW4gZnJvbSBjdXJzZXMudGV4dHBhZCBpbXBvcnQgVGV4dGJveAorIyAgICAgICAgICAgIHNlbGYudGV4dGJveCA9IFRleHRib3goIHNlbGYud2luICkKKyMgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCgpCisjICAgICAgICAgICAgdC5ydW4gPSBzZWxmLnRleHRib3guZWRpdAorIyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisgICAgZGVmIG1haW4oc2VsZiwgc3Rkc2NyLCBzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgcGFyYW1zKToKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyAgICAgICAgaGVpZ2h0LCB3aWR0aCA9IHN0ZHNjci5nZXRtYXh5eCgpCisKKyAgICAgICAgIyBmb3Igbm93IHNwbGl0IGl0IGxpa2UgdGhhdDoKKyAgICAgICAgIyBNQUlOX3kgKyBUSFJFQURfeSA9IDIvMyBzY3JlZW4gYXQgdGhlIHRvcAorICAgICAgICAjIE1BSU5feCA9IDIvMyBsZWZ0LCBUSFJFQURfeSA9IDEvMyByaWdodAorICAgICAgICAjIENMSV95ID0gMS8zIG9mIHNjcmVlbiBhdCB0aGUgYm90dG9tCisgICAgICAgICMgQ0xJX3ggPSBmdWxsCisKKyAgICAgICAgbWFpbl9sZWZ0ID0gMAorICAgICAgICBtYWluX3RvcCA9IDAKKyAgICAgICAgbWFpbl9oZWlnaHQgPSAoIGhlaWdodCAvLyAzICogMiApCisgICAgICAgIG1haW5fd2lkdGggPSAoIHdpZHRoIC8vIDMgKSAqIDIKKyAgICAgICAgY2xvX2xlZnQgPSBtYWluX2xlZnQKKyAgICAgICAgY2xvX3RvcCA9IG1haW5fdG9wICsgbWFpbl9oZWlnaHQKKyAgICAgICAgY2xvX2hlaWdodCA9IGhlaWdodCAtIG1haW5faGVpZ2h0IC0gbWFpbl90b3AgLSAxCisgICAgICAgIGNsb193aWR0aCA9IHdpZHRoCisgICAgICAgIGNsaV9sZWZ0ID0gbWFpbl9sZWZ0CisgICAgICAgIGNsaV90b3AgPSBjbG9fdG9wICsgY2xvX2hlaWdodAorICAgICAgICBjbGlfaGVpZ2h0ID0gMQorICAgICAgICBjbGlfd2lkdGggPSB3aWR0aAorICAgICAgICB0aHJlYWRfbGVmdCA9IG1haW5fbGVmdCArIG1haW5fd2lkdGgKKyAgICAgICAgdGhyZWFkX3RvcCA9IG1haW5fdG9wCisgICAgICAgIHRocmVhZF9oZWlnaHQgPSBtYWluX2hlaWdodAorICAgICAgICB0aHJlYWRfd2lkdGggPSB3aWR0aCAtIG1haW5fd2lkdGgKKworICAgICAgICAjdHcgPSBzZWxmLlRpdGxlV2luZG93KCAwLCAwLCB3aWR0aCwgbWFpbl90b3AgKQorICAgICAgICBtdyA9IHNlbGYuTWFpbldpbmRvdyggbWFpbl9sZWZ0LCBtYWluX3RvcCwgbWFpbl93aWR0aCwgbWFpbl9oZWlnaHQgKQorICAgICAgICB0YXcgPSBzZWxmLlRocmVhZEFjdGl2aXR5V2luZG93KCB0aHJlYWRfbGVmdCwgdGhyZWFkX3RvcCwgdGhyZWFkX3dpZHRoLCB0aHJlYWRfaGVpZ2h0ICkKKyAgICAgICAgY2xvID0gc2VsZi5TaGVsbE91dHB1dFdpbmRvdyggY2xvX2xlZnQsIGNsb190b3AsIGNsb193aWR0aCwgY2xvX2hlaWdodCApCisgICAgICAgIGNsaSA9IHNlbGYuU2hlbGxJbnB1dFdpbmRvdyggY2xpX2xlZnQsIGNsaV90b3AsIGNsaV93aWR0aCwgY2xpX2hlaWdodCApCisgICAgICAgIGNsaS5zZXRUZXh0KCAwLCAwLCAiQkI+IiApCisKKyAgICAgICAgbXcuc2V0U3RhdHVzKCJJZGxlIikKKworICAgICAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkKKyAgICAgICAgc2h1dGRvd24gPSAwCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyYW1zLnVwZGF0ZUZyb21TZXJ2ZXIoc2VydmVyKQorICAgICAgICAgICAgY21kbGluZSA9IHBhcmFtcy5wYXJzZUFjdGlvbnMoKQorICAgICAgICAgICAgaWYgbm90IGNtZGxpbmU6CisgICAgICAgICAgICAgICAgcHJpbnQoIk5vdGhpbmcgdG8gZG8uICBVc2UgJ2JpdGJha2Ugd29ybGQnIHRvIGJ1aWxkIGV2ZXJ5dGhpbmcsIG9yIHJ1biAnYml0YmFrZSAtLWhlbHAnIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBpZiAnbXNnJyBpbiBjbWRsaW5lIGFuZCBjbWRsaW5lWydtc2cnXToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoY21kbGluZVsnbXNnJ10pCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGNtZGxpbmUgPSBjbWRsaW5lWydhY3Rpb24nXQorICAgICAgICAgICAgcmV0LCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKGNtZGxpbmUpCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCgiRXJyb3IgcnVubmluZyBjb21tYW5kICclcyc6ICVzIiAlIChjbWRsaW5lLCBlcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIHJldCAhPSBUcnVlOgorICAgICAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBnZXQgZGVmYXVsdCBjb21tYW5kbGluZCEgJXMiICUgcmV0KQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0IGFzIHg6CisgICAgICAgICAgICBwcmludCgiWE1MUlBDIEZhdWx0IGdldHRpbmcgY29tbWFuZGxpbmU6XG4gJXMiICUgeCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGV4aXRmbGFnID0gRmFsc2UKKyAgICAgICAgd2hpbGUgbm90IGV4aXRmbGFnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLndhaXRFdmVudCgwLjI1KQorICAgICAgICAgICAgICAgIGlmIG5vdCBldmVudDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGhlbHBlci5ldmVudEhhbmRsZXIoZXZlbnQpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0Jhc2UpOgorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJOT1RFOiAlc1xuIiAlIGV2ZW50Ll9tZXNzYWdlKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dChsb2dnaW5nLmdldExldmVsTmFtZShldmVudC5sZXZlbG5vKSArICc6ICcgKyBldmVudC5nZXRNZXNzYWdlKCkgKyAnXG4nKQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuQ2FjaGVMb2FkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFByb2dyZXNzKToKKyAgICAgICAgICAgICAgICAgICAgeCA9IGV2ZW50LmN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgeSA9IHNlbGYucGFyc2VfdG90YWwKKyAgICAgICAgICAgICAgICAgICAgbXcuc2V0U3RhdHVzKCJMb2FkaW5nIENhY2hlOiAgICVzIFslMmQgJSVdIiAlICggbmV4dChwYXJzZXNwaW4pLCB4KjEwMC95ICkgKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgICAgIG13LnNldFN0YXR1cygiSWRsZSIpCisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoIkxvYWRlZCAlZCBlbnRyaWVzIGZyb20gZGVwZW5kZW5jeSBjYWNoZS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoIGV2ZW50Lm51bV9lbnRyaWVzKSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfdG90YWwgPSBldmVudC50b3RhbAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgICAgICB4ID0gZXZlbnQuY3VycmVudAorICAgICAgICAgICAgICAgICAgICB5ID0gc2VsZi5wYXJzZV90b3RhbAorICAgICAgICAgICAgICAgICAgICBtdy5zZXRTdGF0dXMoIlBhcnNpbmcgUmVjaXBlczogJXMgWyUyZCAlJV0iICUgKCBuZXh0KHBhcnNlc3BpbiksIHgqMTAwL3kgKSApCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgICAgICBtdy5zZXRTdGF0dXMoIklkbGUiKQorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJQYXJzaW5nIGZpbmlzaGVkLiAlZCBjYWNoZWQsICVkIHBhcnNlZCwgJWQgc2tpcHBlZCwgJWQgbWFza2VkLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICggZXZlbnQuY2FjaGVkLCBldmVudC5wYXJzZWQsIGV2ZW50LnNraXBwZWQsIGV2ZW50Lm1hc2tlZCApKQorCisjICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorIyAgICAgICAgICAgICAgICAgICAgaWYgZXZlbnQubG9nZmlsZToKKyMgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhLmdldFZhcigiQkJJTkNMVURFTE9HUyIsIGQpOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigibG9nIGRhdGEgZm9sbG93cyAoJXMpIiAlIGxvZ2ZpbGUpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9vZl9saW5lcyA9IGRhdGEuZ2V0VmFyKCJCQklOQ0xVREVMT0dTX0xJTkVTIiwgZCkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtYmVyX29mX2xpbmVzOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCd0YWlsIC1uJXMgJXMnICUgKG51bWJlcl9vZl9saW5lcywgbG9nZmlsZSksIHNoZWxsPVRydWUpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihsb2dmaWxlLCAiciIpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmLnJlYWRsaW5lKCkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsID09ICcnOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBsLnJzdHJpcCgpCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ3wgJXMnICUgbAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisjICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoInNlZSBsb2cgaW4gJXMiICUgbG9nZmlsZSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgICAgICMgc3RvcCBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXN1bHQgb2YgdGhlIGJ1aWxkLCBidXQKKyAgICAgICAgICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0gdG8gbm93IGV4aXQgd2l0aCBhIHNpbmdsZSBeQworICAgICAgICAgICAgICAgICAgICBzaHV0ZG93biA9IDIKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQpOgorICAgICAgICAgICAgICAgICAgICBtdy5hcHBlbmRUZXh0KCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiAlIGV2ZW50LmVycm9yKQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCisgICAgICAgICAgICAgICAgICAgIGV4aXRmbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEV4aXQpOgorICAgICAgICAgICAgICAgICAgICBleGl0ZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CisgICAgICAgICAgICAgICAgICAgIGV4aXRmbGFnID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICAgICAgICAgIG13LmFwcGVuZFRleHQoJ1dBUk46ICcgKyBldmVudC5tc2cgKyAnXG4nKQorICAgICAgICAgICAgICAgIGlmIGhlbHBlci5uZWVkVXBkYXRlOgorICAgICAgICAgICAgICAgICAgICBhY3RpdmV0YXNrcywgZmFpbGVkdGFza3MgPSBoZWxwZXIuZ2V0VGFza3MoKQorICAgICAgICAgICAgICAgICAgICB0YXcuZXJhc2UoKQorICAgICAgICAgICAgICAgICAgICB0YXcuc2V0VGV4dCgwLCAwLCAiIikKKyAgICAgICAgICAgICAgICAgICAgaWYgYWN0aXZldGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCgiQWN0aXZlIFRhc2tzOlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIGFjdGl2ZXRhc2tzLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCh0YXNrWyJ0aXRsZSJdICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmFpbGVkdGFza3M6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXcuYXBwZW5kVGV4dCgiRmFpbGVkIFRhc2tzOlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0YXNrIGluIGZhaWxlZHRhc2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhdy5hcHBlbmRUZXh0KHRhc2tbInRpdGxlIl0gKyAnXG4nKQorCisgICAgICAgICAgICAgICAgY3Vyc2VzLmRvdXBkYXRlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgaW50ZXJydXB0ZWQgaW8KKyAgICAgICAgICAgICAgICBpZiBpb2Vycm9yLmFyZ3NbMF0gPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiVGhpcmQgS2V5Ym9hcmQgSW50ZXJydXB0LCBleGl0LlxuIikKKyAgICAgICAgICAgICAgICAgICAgZXhpdGZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMToKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiU2Vjb25kIEtleWJvYXJkIEludGVycnVwdCwgc3RvcHBpbmcuLi5cbiIpCisgICAgICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZUZvcmNlU2h1dGRvd24iXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiVW5hYmxlIHRvIGNsZWFubHkgc3RvcDogJXMiICUgZXJyb3IpCisgICAgICAgICAgICAgICAgaWYgc2h1dGRvd24gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbXcuYXBwZW5kVGV4dCgiS2V5Ym9hcmQgSW50ZXJydXB0LCBjbG9zaW5nIGRvd24uLi5cbiIpCisgICAgICAgICAgICAgICAgICAgIF8sIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJzdGF0ZVNodXRkb3duIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVuYWJsZSB0byBjbGVhbmx5IHNodXRkb3duOiAlcyIgJSBlcnJvcikKKyAgICAgICAgICAgICAgICBzaHV0ZG93biA9IHNodXRkb3duICsgMQorICAgICAgICAgICAgICAgIHBhc3MKKworZGVmIG1haW4oc2VydmVyLCBldmVudEhhbmRsZXIsIHBhcmFtcyk6CisgICAgaWYgbm90IG9zLmlzYXR0eShzeXMuc3Rkb3V0LmZpbGVubygpKToKKyAgICAgICAgcHJpbnQoIkZBVEFMOiBVbmFibGUgdG8gcnVuICduY3Vyc2VzJyBVSSB3aXRob3V0IGEgVFRZLiIpCisgICAgICAgIHJldHVybgorICAgIHVpID0gTkN1cnNlc1VJKCkKKyAgICB0cnk6CisgICAgICAgIGN1cnNlcy53cmFwcGVyKHVpLm1haW4sIHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMpCisgICAgZXhjZXB0OgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvcHVjY2hvLnB5IGIvYml0YmFrZS9saWIvYmIvdWkvcHVjY2hvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTQ1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS9wdWNjaG8ucHkKQEAgLTAsMCArMSw0MjUgQEAKKyMKKyMgQml0QmFrZSBHcmFwaGljYWwgR1RLIFVzZXIgSW50ZXJmYWNlCisjCisjIENvcHlyaWdodCAoQykgMjAwOCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgQXV0aG9yZWQgYnkgUm9iIEJyYWRmb3JkIDxyb2JAbGludXguaW50ZWwuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGd0aworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsuZ2xhZGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgb3MKK2ltcG9ydCBjb250ZXh0bGliCisKK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkbWFuYWdlciBpbXBvcnQgQnVpbGRNYW5hZ2VyLCBCdWlsZENvbmZpZ3VyYXRpb24KK2Zyb20gYmIudWkuY3J1bWJzLmJ1aWxkbWFuYWdlciBpbXBvcnQgQnVpbGRNYW5hZ2VyVHJlZVZpZXcKKworZnJvbSBiYi51aS5jcnVtYnMucnVubmluZ2J1aWxkIGltcG9ydCBSdW5uaW5nQnVpbGQsIFJ1bm5pbmdCdWlsZFRyZWVWaWV3CisKKyMgVGhlIG1ldGFkYXRhIGxvYWRlciBpcyB1c2VkIGJ5IHRoZSBCdWlsZFNldHVwRGlhbG9nIHRvIGRvd25sb2FkIHRoZQorIyBhdmFpbGFibGUgb3B0aW9ucyB0byBwb3B1bGF0ZSB0aGUgZGlhbG9nCitjbGFzcyBNZXRhRGF0YUxvYWRlcihnb2JqZWN0LkdPYmplY3QpOgorICAgICIiIiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBtZWNoYW5pc20gZm9yIGxvYWRpbmcgdGhlIG1ldGFkYXRhICh0aGUKKyAgICBmZXRjaGluZyBhbmQgcGFyc2luZykgZnJvbSBhIGdpdmVuIFVSTC4gVGhlIG1ldGFkYXRhIGVuY29tcGFzc2VzIGRldGFpbHMKKyAgICBvbiB3aGF0IG1hY2hpbmVzIGFyZSBhdmFpbGFibGUuIFRoZSBkaXN0cmlidXRpb24gYW5kIGltYWdlcyBhdmFpbGFibGUgZm9yCisgICAgdGhlIG1hY2hpbmUgYW5kIHRoZSB0aGUgdXJpcyB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBnaXZlbiBtYWNoaW5lLiIiIgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgJ3N1Y2Nlc3MnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAoKSksCisgICAgICAgICdlcnJvcicgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgZ29iamVjdC5UWVBFX05PTkUsCisgICAgICAgICAgICAgICAgICAgKGdvYmplY3QuVFlQRV9TVFJJTkcsKSkKKyAgICAgICAgfQorCisgICAgIyBXZSB1c2UgdGhlc2UgbGl0dGxlIGhlbHBlciBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgdGFrZSB0aGUgZ2RrIGxvY2sKKyAgICAjIHdoZW4gZW1pdHRpbmcgdGhlIHNpZ25hbC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXMgaWRsZXMgKHNvIHRoYXQKKyAgICAjIHRoZXkgaGFwcGVuIGluIHRoZSBndGsgLyBtYWluIHRocmVhZCdzIG1haW4gbG9vcC4KKyAgICBkZWYgZW1pdF9lcnJvcl9zaWduYWwgKHNlbGYsIHJlbWFyayk6CisgICAgICAgIGd0ay5nZGsudGhyZWFkc19lbnRlcigpCisgICAgICAgIHNlbGYuZW1pdCAoImVycm9yIiwgcmVtYXJrKQorICAgICAgICBndGsuZ2RrLnRocmVhZHNfbGVhdmUoKQorCisgICAgZGVmIGVtaXRfc3VjY2Vzc19zaWduYWwgKHNlbGYpOgorICAgICAgICBndGsuZ2RrLnRocmVhZHNfZW50ZXIoKQorICAgICAgICBzZWxmLmVtaXQgKCJzdWNjZXNzIikKKyAgICAgICAgZ3RrLmdkay50aHJlYWRzX2xlYXZlKCkKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIGdvYmplY3QuR09iamVjdC5fX2luaXRfXyAoc2VsZikKKworICAgIGNsYXNzIExvYWRlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgIiIiIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gYXN5bmNocm9ub3VzIGxvYWRlciBmb3IgdGhlIG1ldGFkYXRhIChieQorICAgICAgICB1c2luZyB0aHJlYWRzIGFuZCBzaWduYWxzKS4gVGhpcyBpcyB1c2VmdWwgc2luY2UgdGhlIG1ldGFkYXRhIG1heSBiZQorICAgICAgICBhdCBhIHJlbW90ZSBVUkwuIiIiCisgICAgICAgIGNsYXNzIExvYWRlckltcG9ydEV4Y2VwdGlvbiAoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9hZGVyLCB1cmwpOgorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyAoc2VsZikKKyAgICAgICAgICAgIHNlbGYudXJsID0gdXJsCisgICAgICAgICAgICBzZWxmLmxvYWRlciA9IGxvYWRlcgorCisgICAgICAgIGRlZiBydW4gKHNlbGYpOgorICAgICAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyAodXJsbGliMi51cmxvcGVuIChzZWxmLnVybCkpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICMgUGFyc2UgdGhlIG1ldGFkYXRhIGZvcm1hdC4gVGhlIGZvcm1hdCBpcy4uLi4KKyAgICAgICAgICAgICAgICAgICAgIyA8bWFjaGluZT47PGRlZmF1bHQgZGlzdHJvPnw8ZGlzdHJvPi4uLjs8ZGVmYXVsdCBpbWFnZT58PGltYWdlPi4uLjs8dHlwZSMjdXJsPnwuLi4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSBsaW5lLnNwbGl0KCI7IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gKGNvbXBvbmVudHMpIDwgNCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTWV0YURhdGFMb2FkZXIuTG9hZGVyVGhyZWFkLkxvYWRlckltcG9ydEV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IGNvbXBvbmVudHNbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Ryb3MgPSBjb21wb25lbnRzWzFdLnNwbGl0KCJ8IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcyA9IGNvbXBvbmVudHNbMl0uc3BsaXQoInwiKQorICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IGNvbXBvbmVudHNbM10uc3BsaXQoInwiKQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbWFjaGluZV0gPSAoZGlzdHJvcywgaW1hZ2VzLCB1cmxzKQorCisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzICpwb3RlbnRpYWwqCisgICAgICAgICAgICAgICAgIyBjb25maWd1cmF0aW9uLiBJdCBjYW4gYmVjb21lIGNvbmNyZXRlIGlmIHRoZSBtYWNoaW5lLCBkaXN0cm8KKyAgICAgICAgICAgICAgICAjIGFuZCBpbWFnZSBhcmUgYWxsIGNob3NlbiBpbiB0aGUgVUkKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gQnVpbGRDb25maWd1cmF0aW9uKCkKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLm1ldGFkYXRhX3VybCA9IHNlbGYudXJsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5tYWNoaW5lX29wdGlvbnMgPSByZXN1bHQKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRlci5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorCisgICAgICAgICAgICAgICAgIyBFbWl0IHRoYXQgd2UndmUgYWN0dWFsbHkgZ290IGEgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGdvYmplY3QuaWRsZV9hZGQgKE1ldGFEYXRhTG9hZGVyLmVtaXRfc3VjY2Vzc19zaWduYWwsCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGVyKQorCisgICAgICAgICAgICBleGNlcHQgTWV0YURhdGFMb2FkZXIuTG9hZGVyVGhyZWFkLkxvYWRlckltcG9ydEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGdvYmplY3QuaWRsZV9hZGQgKE1ldGFEYXRhTG9hZGVyLmVtaXRfZXJyb3Jfc2lnbmFsLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIlJlcG9zaXRvcnkgbWV0YWRhdGEgY29ycnVwdCIpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgZ29iamVjdC5pZGxlX2FkZCAoTWV0YURhdGFMb2FkZXIuZW1pdF9lcnJvcl9zaWduYWwsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGRvd25sb2FkIHJlcG9zaXRvcnkgbWV0YWRhdGEiKQorICAgICAgICAgICAgICAgIHByaW50KGUpCisKKyAgICBkZWYgdHJ5X2ZldGNoX2Zyb21fdXJsIChzZWxmLCB1cmwpOgorICAgICAgICAjIFRyeSBhbmQgZG93bmxvYWQgdGhlIG1ldGFkYXRhLiBGaXJpbmcgYSBzaWduYWwgaWYgc3VjY2Vzc2Z1bAorICAgICAgICB0aHJlYWQgPSBNZXRhRGF0YUxvYWRlci5Mb2FkZXJUaHJlYWQoc2VsZiwgdXJsKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorCitjbGFzcyBCdWlsZFNldHVwRGlhbG9nIChndGsuRGlhbG9nKToKKyAgICBSRVNQT05TRV9CVUlMRCA9IDEKKworICAgICMgQSBsaXR0bGUgaGVscGVyIG1ldGhvZCB0aGF0IGp1c3Qgc2V0cyB0aGUgc3RhdGVzIG9uIHRoZSB3aWRnZXRzIGJhc2VkIG9uCisgICAgIyB3aGV0aGVyIHdlJ3ZlIGdvdCBnb29kIG1ldGFkYXRhIG9yIG5vdC4KKyAgICBkZWYgc2V0X2NvbmZpZ3VyYWJsZSAoc2VsZiwgY29uZmlndXJhYmxlKToKKyAgICAgICAgaWYgKHNlbGYuY29uZmlndXJhYmxlID09IGNvbmZpZ3VyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmNvbmZpZ3VyYWJsZSA9IGNvbmZpZ3VyYWJsZQorICAgICAgICBmb3Igd2lkZ2V0IGluIHNlbGYuY29uZl93aWRnZXRzOgorICAgICAgICAgICAgd2lkZ2V0LnNldF9zZW5zaXRpdmUgKGNvbmZpZ3VyYWJsZSkKKworICAgICAgICBpZiBub3QgY29uZmlndXJhYmxlOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9hY3RpdmUgKC0xKQorICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb25fY29tYm8uc2V0X2FjdGl2ZSAoLTEpCisgICAgICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnNldF9hY3RpdmUgKC0xKQorCisgICAgIyBHVEsgd2lkZ2V0IGNhbGxiYWNrcworICAgIGRlZiByZWZyZXNoX2J1dHRvbl9jbGlja2VkIChzZWxmLCBidXR0b24pOgorICAgICAgICAjIFJlZnJlc2ggYnV0dG9uIGNsaWNrZWQuCisKKyAgICAgICAgdXJsID0gc2VsZi5sb2NhdGlvbl9lbnRyeS5nZXRfY2hhcnMgKDAsIC0xKQorICAgICAgICBzZWxmLmxvYWRlci50cnlfZmV0Y2hfZnJvbV91cmwodXJsKQorCisgICAgZGVmIHJlcG9zaXRvcnlfZW50cnlfZWRpdGFibGVfY2hhbmdlZCAoc2VsZiwgZW50cnkpOgorICAgICAgICBpZiAobGVuIChlbnRyeS5nZXRfY2hhcnMgKDAsIC0xKSkgPiAwKToKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24uc2V0X3NlbnNpdGl2ZSAoVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaF9idXR0b24uc2V0X3NlbnNpdGl2ZSAoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N0YXR1c19tZXNzYWdlKCkKKworICAgICAgICAjIElmIHdlIHdlcmUgcHJldmlvdXNseSBjb25maWd1cmFibGUgd2UgYXJlIG5vIGxvbmdlciBzaW5jZSB0aGUKKyAgICAgICAgIyBsb2NhdGlvbiBlbnRyeSBoYXMgYmVlbiBjaGFuZ2VkCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ3VyYWJsZSAoRmFsc2UpCisKKyAgICBkZWYgbWFjaGluZV9jb21ib19jaGFuZ2VkIChzZWxmLCBjb21ib2JveCk6CisgICAgICAgIGFjdGl2ZV9pdGVyID0gY29tYm9ib3guZ2V0X2FjdGl2ZV9pdGVyKCkKKworICAgICAgICBpZiBub3QgYWN0aXZlX2l0ZXI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBtb2RlbCA9IGNvbWJvYm94LmdldF9tb2RlbCgpCisKKyAgICAgICAgaWYgbW9kZWw6CisgICAgICAgICAgICBjaG9zZW5fbWFjaGluZSA9IG1vZGVsLmdldCAoYWN0aXZlX2l0ZXIsIDApWzBdCisKKyAgICAgICAgKGRpc3Ryb3NfbW9kZWwsIGltYWdlc19tb2RlbCkgPSBcCisgICAgICAgICAgICBzZWxmLmxvYWRlci5jb25maWd1cmF0aW9uLmdldF9kaXN0cm9fYW5kX2ltYWdlc19tb2RlbHMgKGNob3Nlbl9tYWNoaW5lKQorCisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLnNldF9tb2RlbCAoZGlzdHJvc19tb2RlbCkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5zZXRfbW9kZWwgKGltYWdlc19tb2RlbCkKKworICAgICMgQ2FsbGJhY2tzIGZyb20gdGhlIGxvYWRlcgorICAgIGRlZiBsb2FkZXJfc3VjY2Vzc19jYiAoc2VsZiwgbG9hZGVyKToKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2Uuc2V0X2Zyb21faWNvbl9uYW1lICgiaW5mbyIsCisgICAgICAgICAgICBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2Uuc2hvdygpCisgICAgICAgIHNlbGYuc3RhdHVzX2xhYmVsLnNldF9sYWJlbCAoIlJlcG9zaXRvcnkgbWV0YWRhdGEgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQiKQorCisgICAgICAgICMgU2V0IHRoZSBtb2RlbHMgb24gdGhlIGNvbWJvIGJveGVzIGJhc2VkIG9uIHRoZSBtb2RlbHMgZ2VuZXJhdGVkIGZyb20KKyAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiB0aGF0IHRoZSBsb2FkZXIgaGFzIGNyZWF0ZWQKKworICAgICAgICAjIFdlIGp1c3QgbmVlZCB0byBzZXQgdGhlIG1hY2hpbmUgaGVyZSwgdGhhdCB0aGVuIGRldGVybWluZXMgdGhlCisgICAgICAgICMgZGlzdHJvIGFuZCBpbWFnZSBvcHRpb25zLiBDdW5uaW5nIGh1aD8gOi0pCisKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gc2VsZi5sb2FkZXIuY29uZmlndXJhdGlvbgorICAgICAgICBtb2RlbCA9IHNlbGYuY29uZmlndXJhdGlvbi5nZXRfbWFjaGluZXNfbW9kZWwgKCkKKyAgICAgICAgc2VsZi5tYWNoaW5lX2NvbWJvLnNldF9tb2RlbCAobW9kZWwpCisKKyAgICAgICAgc2VsZi5zZXRfY29uZmlndXJhYmxlIChUcnVlKQorCisgICAgZGVmIGxvYWRlcl9lcnJvcl9jYiAoc2VsZiwgbG9hZGVyLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2Uuc2V0X2Zyb21faWNvbl9uYW1lICgiZXJyb3IiLAorICAgICAgICAgICAgZ3RrLklDT05fU0laRV9CVVRUT04pCisgICAgICAgIHNlbGYuc3RhdHVzX2ltYWdlLnNob3coKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5zZXRfdGV4dCAoIkVycm9yIGRvd25sb2FkaW5nIHJlcG9zaXRvcnkgbWV0YWRhdGEiKQorICAgICAgICBmb3Igd2lkZ2V0IGluIHNlbGYuY29uZl93aWRnZXRzOgorICAgICAgICAgICAgd2lkZ2V0LnNldF9zZW5zaXRpdmUgKEZhbHNlKQorCisgICAgZGVmIGNsZWFyX3N0YXR1c19tZXNzYWdlIChzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2UuaGlkZSgpCisgICAgICAgIHNlbGYuc3RhdHVzX2xhYmVsLnNldF9sYWJlbCAoCisgICAgICAgICAgICAiIiI8aT5FbnRlciB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbiBhbmQgcHJlc3MgX1JlZnJlc2g8L2k+IiIiKQorCisgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKyAgICAgICAgZ3RrLkRpYWxvZy5fX2luaXRfXyAoc2VsZikKKworICAgICAgICAjIENhbmNlbAorICAgICAgICBzZWxmLmFkZF9idXR0b24gKGd0ay5TVE9DS19DQU5DRUwsIGd0ay5SRVNQT05TRV9DQU5DRUwpCisKKyAgICAgICAgIyBCdWlsZAorICAgICAgICBidXR0b24gPSBndGsuQnV0dG9uICgiX0J1aWxkIiwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgaW1hZ2UgPSBndGsuSW1hZ2UgKCkKKyAgICAgICAgaW1hZ2Uuc2V0X2Zyb21fc3RvY2sgKGd0ay5TVE9DS19FWEVDVVRFLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKyAgICAgICAgYnV0dG9uLnNldF9pbWFnZSAoaW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2FjdGlvbl93aWRnZXQgKGJ1dHRvbiwgQnVpbGRTZXR1cERpYWxvZy5SRVNQT05TRV9CVUlMRCkKKyAgICAgICAgYnV0dG9uLnNob3dfYWxsICgpCisKKyAgICAgICAgIyBQdWxsIGluICpqdXN0KiB0aGUgdGFibGUgZnJvbSB0aGUgR2xhZGUgWE1MIGRhdGEuCisgICAgICAgIGd4bWwgPSBndGsuZ2xhZGUuWE1MIChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgIi9jcnVtYnMvcHVjY2hvLmdsYWRlIiwKKyAgICAgICAgICAgIHJvb3QgPSAiYnVpbGRfdGFibGUiKQorICAgICAgICB0YWJsZSA9IGd4bWwuZ2V0X3dpZGdldCAoImJ1aWxkX3RhYmxlIikKKyAgICAgICAgc2VsZi52Ym94LnBhY2tfc3RhcnQgKHRhYmxlLCBUcnVlLCBGYWxzZSwgMCkKKworICAgICAgICAjIEdyYWIgYWxsIHRoZSB3aWRnZXRzIHRoYXQgd2UgbmVlZCB0byB0dXJuIG9uL29mZiB3aGVuIHdlIHJlZnJlc2guLi4KKyAgICAgICAgc2VsZi5jb25mX3dpZGdldHMgPSBbXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgibWFjaGluZV9sYWJlbCIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiZGlzdHJpYnV0aW9uX2xhYmVsIildCisgICAgICAgIHNlbGYuY29uZl93aWRnZXRzICs9IFtneG1sLmdldF93aWRnZXQgKCJpbWFnZV9sYWJlbCIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgibWFjaGluZV9jb21ibyIpXQorICAgICAgICBzZWxmLmNvbmZfd2lkZ2V0cyArPSBbZ3htbC5nZXRfd2lkZ2V0ICgiZGlzdHJpYnV0aW9uX2NvbWJvIildCisgICAgICAgIHNlbGYuY29uZl93aWRnZXRzICs9IFtneG1sLmdldF93aWRnZXQgKCJpbWFnZV9jb21ibyIpXQorCisgICAgICAgICMgR3JhYiB0aGUgc3RhdHVzIHdpZGdldHMKKyAgICAgICAgc2VsZi5zdGF0dXNfaW1hZ2UgPSBneG1sLmdldF93aWRnZXQgKCJzdGF0dXNfaW1hZ2UiKQorICAgICAgICBzZWxmLnN0YXR1c19sYWJlbCA9IGd4bWwuZ2V0X3dpZGdldCAoInN0YXR1c19sYWJlbCIpCisKKyAgICAgICAgIyBHcmFiIHRoZSByZWZyZXNoIGJ1dHRvbiBhbmQgY29ubmVjdCB0byB0aGUgY2xpY2tlZCBzaWduYWwKKyAgICAgICAgc2VsZi5yZWZyZXNoX2J1dHRvbiA9IGd4bWwuZ2V0X3dpZGdldCAoInJlZnJlc2hfYnV0dG9uIikKKyAgICAgICAgc2VsZi5yZWZyZXNoX2J1dHRvbi5jb25uZWN0ICgiY2xpY2tlZCIsIHNlbGYucmVmcmVzaF9idXR0b25fY2xpY2tlZCkKKworICAgICAgICAjIEdyYWIgdGhlIGxvY2F0aW9uIGVudHJ5IGFuZCBjb25uZWN0IHRvIGVkaXRhYmxlOjpjaGFuZ2VkCisgICAgICAgIHNlbGYubG9jYXRpb25fZW50cnkgPSBneG1sLmdldF93aWRnZXQgKCJsb2NhdGlvbl9lbnRyeSIpCisgICAgICAgIHNlbGYubG9jYXRpb25fZW50cnkuY29ubmVjdCAoImNoYW5nZWQiLAorICAgICAgICAgICAgc2VsZi5yZXBvc2l0b3J5X2VudHJ5X2VkaXRhYmxlX2NoYW5nZWQpCisKKyAgICAgICAgIyBHcmFiIHRoZSBtYWNoaW5lIGNvbWJvIGFuZCBob29rIG9udG8gdGhlIGNoYW5nZWQgc2lnbmFsLiBUaGlzIHRoZW4KKyAgICAgICAgIyBhbGxvd3MgdXMgdG8gcG9wdWxhdGUgdGhlIGRpc3RybyBhbmQgaW1hZ2UgY29tYm9zCisgICAgICAgIHNlbGYubWFjaGluZV9jb21ibyA9IGd4bWwuZ2V0X3dpZGdldCAoIm1hY2hpbmVfY29tYm8iKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uY29ubmVjdCAoImNoYW5nZWQiLCBzZWxmLm1hY2hpbmVfY29tYm9fY2hhbmdlZCkKKworICAgICAgICAjIFNldHVwIHRoZSBjb21ibworICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8ucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICBzZWxmLm1hY2hpbmVfY29tYm8uYWRkX2F0dHJpYnV0ZShjZWxsLCAndGV4dCcsIDApCisKKyAgICAgICAgIyBHcmFiIHRoZSBkaXN0cm8gYW5kIGltYWdlIGNvbWJvcy4gV2UgbmVlZCB0aGVzZSB0byBwb3B1bGF0ZSB3aXRoCisgICAgICAgICMgbW9kZWxzIG9uY2UgdGhlIG1hY2hpbmUgaXMgY2hvc2VuCisgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvID0gZ3htbC5nZXRfd2lkZ2V0ICgiZGlzdHJpYnV0aW9uX2NvbWJvIikKKyAgICAgICAgY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKyAgICAgICAgc2VsZi5kaXN0cmlidXRpb25fY29tYm8ucGFja19zdGFydChjZWxsLCBUcnVlKQorICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbl9jb21iby5hZGRfYXR0cmlidXRlKGNlbGwsICd0ZXh0JywgMCkKKworICAgICAgICBzZWxmLmltYWdlX2NvbWJvID0gZ3htbC5nZXRfd2lkZ2V0ICgiaW1hZ2VfY29tYm8iKQorICAgICAgICBjZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorICAgICAgICBzZWxmLmltYWdlX2NvbWJvLnBhY2tfc3RhcnQoY2VsbCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5pbWFnZV9jb21iby5hZGRfYXR0cmlidXRlKGNlbGwsICd0ZXh0JywgMCkKKworICAgICAgICAjIFB1dCB0aGUgZGVmYXVsdCBkZXNjcmlwdGl2ZSB0ZXh0IGluIHRoZSBzdGF0dXMgYm94CisgICAgICAgIHNlbGYuY2xlYXJfc3RhdHVzX21lc3NhZ2UoKQorCisgICAgICAgICMgTWFyayBhcyBub24tY29uZmlndXJhYmxlLCB0aGlzIGlzIGp1c3QgZ3JleXMgb3V0IHRoZSB3aWRnZXRzIHRoZQorICAgICAgICAjIHVzZXIgY2FuJ3QgeWV0IHVzZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYWJsZSA9IEZhbHNlCisgICAgICAgIHNlbGYuc2V0X2NvbmZpZ3VyYWJsZShGYWxzZSkKKworICAgICAgICAjIFNob3cgdGhlIHRhYmxlCisgICAgICAgIHRhYmxlLnNob3dfYWxsICgpCisKKyAgICAgICAgIyBUaGUgbG9hZGVyIGFuZCBzb21lIHNpZ25hbHMgY29ubmVjdGVkIHRvIGl0IHRvIHVwZGF0ZSB0aGUgc3RhdHVzCisgICAgICAgICMgYXJlYQorICAgICAgICBzZWxmLmxvYWRlciA9IE1ldGFEYXRhTG9hZGVyKCkKKyAgICAgICAgc2VsZi5sb2FkZXIuY29ubmVjdCAoInN1Y2Nlc3MiLCBzZWxmLmxvYWRlcl9zdWNjZXNzX2NiKQorICAgICAgICBzZWxmLmxvYWRlci5jb25uZWN0ICgiZXJyb3IiLCBzZWxmLmxvYWRlcl9lcnJvcl9jYikKKworICAgIGRlZiB1cGRhdGVfY29uZmlndXJhdGlvbiAoc2VsZik6CisgICAgICAgICIiIiBBIHBvb3JseSBuYW1lZCBmdW5jdGlvbiBidXQgaXQgdXBkYXRlcyB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbgorICAgICAgICBmcm9tIHRoZSB3aWRnZXRzLiBUaGlzIGNhbiBtYWtlIHRoYXQgY29uZmlndXJhdGlvbiBjb25jcmV0ZSBhbmQgY2FuCisgICAgICAgIHRodXMgYmUgdXNlZCBmb3IgYnVpbGRpbmcgIiIiCisgICAgICAgICMgRXh0cmFjdCB0aGUgY2hvc2VuIG1hY2hpbmUgZnJvbSB0aGUgY29tYm8KKyAgICAgICAgbW9kZWwgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X21vZGVsKCkKKyAgICAgICAgYWN0aXZlX2l0ZXIgPSBzZWxmLm1hY2hpbmVfY29tYm8uZ2V0X2FjdGl2ZV9pdGVyKCkKKyAgICAgICAgaWYgKGFjdGl2ZV9pdGVyKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5tYWNoaW5lID0gbW9kZWwuZ2V0KGFjdGl2ZV9pdGVyLCAwKVswXQorCisgICAgICAgICMgRXh0cmFjdCB0aGUgY2hvc2VuIGRpc3RybyBmcm9tIHRoZSBjb21ibworICAgICAgICBtb2RlbCA9IHNlbGYuZGlzdHJpYnV0aW9uX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZV9pdGVyID0gc2VsZi5kaXN0cmlidXRpb25fY29tYm8uZ2V0X2FjdGl2ZV9pdGVyKCkKKyAgICAgICAgaWYgKGFjdGl2ZV9pdGVyKToKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbi5kaXN0cm8gPSBtb2RlbC5nZXQoYWN0aXZlX2l0ZXIsIDApWzBdCisKKyAgICAgICAgIyBFeHRyYWN0IHRoZSBjaG9zZW4gaW1hZ2UgZnJvbSB0aGUgY29tYm8KKyAgICAgICAgbW9kZWwgPSBzZWxmLmltYWdlX2NvbWJvLmdldF9tb2RlbCgpCisgICAgICAgIGFjdGl2ZV9pdGVyID0gc2VsZi5pbWFnZV9jb21iby5nZXRfYWN0aXZlX2l0ZXIoKQorICAgICAgICBpZiAoYWN0aXZlX2l0ZXIpOgorICAgICAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uLmltYWdlID0gbW9kZWwuZ2V0KGFjdGl2ZV9pdGVyLCAwKVswXQorCisjIFRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgdG8gcHVsbCBldmVudHMgb3V0IGZyb20gdGhlIGV2ZW50IHF1ZXVlIGFuZCB0aGVuIHB1c2gKKyMgdGhlbSBpbnRvIHRoZSBSdW5uaW5nQnVpbGQgKHdoaWNoIHRoZW4gZHJpdmVzIHRoZSBSdW5uaW5nQnVpbGQgd2hpY2ggdGhlbgorIyBwdXNoZXMgdGhyb3VnaCBhbmQgdXBkYXRlcyB0aGUgcHJvZ3Jlc3MgdHJlZSB2aWV3LikKKyMKKyMgVE9ETzogU2hvdWxkIGJlIGEgbWV0aG9kIG9uIHRoZSBSdW5uaW5nQnVpbGQgY2xhc3MKK2RlZiBldmVudF9oYW5kbGVfdGltZW91dCAoZXZlbnRIYW5kbGVyLCBidWlsZCk6CisgICAgIyBDb25zdW1lIGFzIG1hbnkgbWVzc2FnZXMgYXMgd2UgY2FuIC4uLgorICAgIGV2ZW50ID0gZXZlbnRIYW5kbGVyLmdldEV2ZW50KCkKKyAgICB3aGlsZSBldmVudDoKKyAgICAgICAgYnVpbGQuaGFuZGxlX2V2ZW50IChldmVudCkKKyAgICAgICAgZXZlbnQgPSBldmVudEhhbmRsZXIuZ2V0RXZlbnQoKQorICAgIHJldHVybiBUcnVlCisKK2NsYXNzIE1haW5XaW5kb3cgKGd0ay5XaW5kb3cpOgorCisgICAgIyBDYWxsYmFjayB0aGF0IGdldHMgZmlyZWQgd2hlbiB0aGUgdXNlciBoaXRzIGEgYnV0dG9uIGluIHRoZQorICAgICMgQnVpbGRTZXR1cERpYWxvZy4KKyAgICBkZWYgYnVpbGRfZGlhbG9nX2JveF9yZXNwb25zZV9jYiAoc2VsZiwgZGlhbG9nLCByZXNwb25zZV9pZCk6CisgICAgICAgIGNvbmYgPSBOb25lCisgICAgICAgIGlmIChyZXNwb25zZV9pZCA9PSBCdWlsZFNldHVwRGlhbG9nLlJFU1BPTlNFX0JVSUxEKToKKyAgICAgICAgICAgIGRpYWxvZy51cGRhdGVfY29uZmlndXJhdGlvbigpCisgICAgICAgICAgICBwcmludChkaWFsb2cuY29uZmlndXJhdGlvbi5tYWNoaW5lLCBkaWFsb2cuY29uZmlndXJhdGlvbi5kaXN0cm8sIFwKKyAgICAgICAgICAgICAgICBkaWFsb2cuY29uZmlndXJhdGlvbi5pbWFnZSkKKyAgICAgICAgICAgIGNvbmYgPSBkaWFsb2cuY29uZmlndXJhdGlvbgorCisgICAgICAgIGRpYWxvZy5kZXN0cm95KCkKKworICAgICAgICBpZiBjb25mOgorICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLmRvX2J1aWxkIChjb25mKQorCisgICAgZGVmIGJ1aWxkX2J1dHRvbl9jbGlja2VkX2NiIChzZWxmLCBidXR0b24pOgorICAgICAgICBkaWFsb2cgPSBCdWlsZFNldHVwRGlhbG9nICgpCisKKyAgICAgICAgIyBGb3Igc29tZSB1bmtub3duIHJlYXNvbiBEaWFsb2cucnVuIGNhdXNlcyBuaWNlIGxpdHRsZSBkZWFkbG9ja3MgLi4uIDotKAorICAgICAgICBkaWFsb2cuY29ubmVjdCAoInJlc3BvbnNlIiwgc2VsZi5idWlsZF9kaWFsb2dfYm94X3Jlc3BvbnNlX2NiKQorICAgICAgICBkaWFsb2cuc2hvdygpCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBndGsuV2luZG93Ll9faW5pdF9fIChzZWxmKQorCisgICAgICAgICMgUHVsbCBpbiAqanVzdCogdGhlIG1haW4gdmJveCBmcm9tIHRoZSBHbGFkZSBYTUwgZGF0YSBhbmQgdGhlbiBwYWNrCisgICAgICAgICMgdGhhdCBpbnNpZGUgdGhlIHdpbmRvdworICAgICAgICBneG1sID0gZ3RrLmdsYWRlLlhNTCAob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICIvY3J1bWJzL3B1Y2Noby5nbGFkZSIsCisgICAgICAgICAgICByb290ID0gIm1haW5fd2luZG93X3Zib3giKQorICAgICAgICB2Ym94ID0gZ3htbC5nZXRfd2lkZ2V0ICgibWFpbl93aW5kb3dfdmJveCIpCisgICAgICAgIHNlbGYuYWRkICh2Ym94KQorCisgICAgICAgICMgQ3JlYXRlIHRoZSB0cmVlIHZpZXdzIGZvciB0aGUgYnVpbGQgbWFuYWdlciB2aWV3IGFuZCB0aGUgcHJvZ3Jlc3MgdmlldworICAgICAgICBzZWxmLmJ1aWxkX21hbmFnZXJfdmlldyA9IEJ1aWxkTWFuYWdlclRyZWVWaWV3KCkKKyAgICAgICAgc2VsZi5ydW5uaW5nX2J1aWxkX3ZpZXcgPSBSdW5uaW5nQnVpbGRUcmVlVmlldygpCisKKyAgICAgICAgIyBHcmFiIHRoZSBzY3JvbGxlZCB3aW5kb3dzIHRoYXQgd2UgcHV0IHRoZSB0cmVlIHZpZXdzIGludG8KKyAgICAgICAgc2VsZi5yZXN1bHRzX3Njcm9sbGVkd2luZG93ID0gZ3htbC5nZXRfd2lkZ2V0ICgicmVzdWx0c19zY3JvbGxlZHdpbmRvdyIpCisgICAgICAgIHNlbGYucHJvZ3Jlc3Nfc2Nyb2xsZWR3aW5kb3cgPSBneG1sLmdldF93aWRnZXQgKCJwcm9ncmVzc19zY3JvbGxlZHdpbmRvdyIpCisKKyAgICAgICAgIyBQdXQgdGhlIHRyZWUgdmlld3MgaW5zaWRlIC4uLgorICAgICAgICBzZWxmLnJlc3VsdHNfc2Nyb2xsZWR3aW5kb3cuYWRkIChzZWxmLmJ1aWxkX21hbmFnZXJfdmlldykKKyAgICAgICAgc2VsZi5wcm9ncmVzc19zY3JvbGxlZHdpbmRvdy5hZGQgKHNlbGYucnVubmluZ19idWlsZF92aWV3KQorCisgICAgICAgICMgSG9vayB1cCB0aGUgYnVpbGQgYnV0dG9uLi4uCisgICAgICAgIHNlbGYuYnVpbGRfYnV0dG9uID0gZ3htbC5nZXRfd2lkZ2V0ICgibWFpbl90b29sYnV0dG9uX2J1aWxkIikKKyAgICAgICAgc2VsZi5idWlsZF9idXR0b24uY29ubmVjdCAoImNsaWNrZWQiLCBzZWxmLmJ1aWxkX2J1dHRvbl9jbGlja2VkX2NiKQorCisjIEknbSBub3QgdmVyeSBoYXBweSBhYm91dCB0aGUgY3VycmVudCBvd25lcnNoaXAgb2YgdGhlIFJ1bm5pbmdCdWlsZC4gSSBoYXZlCisjIG15IHN1c3BpY2lvbnMgdGhhdCB0aGlzIG9iamVjdCBzaG91bGQgYmUgaGVsZCBieSB0aGUgQnVpbGRNYW5hZ2VyIHNpbmNlIHdlCisjIGNhcmUgYWJvdXQgdGhlIHNpZ25hbHMgaW4gdGhlIG1hbmFnZXIKKworZGVmIHJ1bm5pbmdfYnVpbGRfc3VjY2VlZGVkX2NiIChydW5uaW5nX2J1aWxkLCBtYW5hZ2VyKToKKyAgICAjIE5vdGlmeSB0aGUgbWFuYWdlciB0aGF0IGEgYnVpbGQgaGFzIHN1Y2NlZWRlZC4gVGhpcyBpcyBuZWNlc3NhcnkgYXMgcGFydAorICAgICMgb2YgdGhlICdoYWNrJyB0aGF0IHdlIHVzZSBmb3IgbWFraW5nIHRoZSByb3cgaW4gdGhlIG1vZGVsIC8gdmlldworICAgICMgcmVwcmVzZW50aW5nIHRoZSBvbmdvaW5nIGJ1aWxkIGNoYW5nZSBpbnRvIGEgcm93IHJlcHJlc2VudGluZyB0aGUKKyAgICAjIGNvbXBsZXRlZCBidWlsZC4gU2luY2Ugd2Uga25vdyBvbmx5IG9uZSBidWlsZCBjYW4gYmUgcnVubmluZyBhIHRpbWUgdGhlbgorICAgICMgd2UgY2FuIGhhbmRsZSB0aGlzLgorCisgICAgIyBGSVhNRTogUmVmYWN0b3IgYWxsIHRoaXMgc28gdGhhdCB0aGUgUnVubmluZ0J1aWxkIGlzIG93bmVkIGJ5IHRoZQorICAgICMgQnVpbGRNYW5hZ2VyLiBJdCBjYW4gdGhlbiBob29rIG9udG8gdGhlIHNpZ25hbHMgZGlyZWN0bHkgYW5kIGRyaXZlCisgICAgIyBpbnRlcmVzdGluZyB0aGluZ3MgaXQgY2FyZXMgYWJvdXQuCisgICAgbWFuYWdlci5ub3RpZnlfYnVpbGRfc3VjY2VlZGVkICgpCisgICAgcHJpbnQoImJ1aWxkIHN1Y2NlZWRlZCIpCisKK2RlZiBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYiAocnVubmluZ19idWlsZCwgbWFuYWdlcik6CisgICAgIyBBcyBhYm92ZQorICAgIHByaW50KCJidWlsZCBmYWlsZWQiKQorICAgIG1hbmFnZXIubm90aWZ5X2J1aWxkX2ZhaWxlZCAoKQorCitkZWYgbWFpbiAoc2VydmVyLCBldmVudEhhbmRsZXIpOgorICAgICMgSW5pdGlhbGlzZSB0aHJlYWRpbmcuLi4KKyAgICBnb2JqZWN0LnRocmVhZHNfaW5pdCgpCisgICAgZ3RrLmdkay50aHJlYWRzX2luaXQoKQorCisgICAgbWFpbl93aW5kb3cgPSBNYWluV2luZG93ICgpCisgICAgbWFpbl93aW5kb3cuc2hvd19hbGwgKCkKKworICAgICMgU2V0IHVwIHRoZSBidWlsZCBtYW5hZ2VyIHN0dWZmIGluIGdlbmVyYWwKKyAgICBidWlsZHNfZGlyID0gb3MucGF0aC5qb2luIChvcy5nZXRjd2QoKSwgICJyZXN1bHRzIikKKyAgICBtYW5hZ2VyID0gQnVpbGRNYW5hZ2VyIChzZXJ2ZXIsIGJ1aWxkc19kaXIpCisgICAgbWFpbl93aW5kb3cuYnVpbGRfbWFuYWdlcl92aWV3LnNldF9tb2RlbCAobWFuYWdlci5tb2RlbCkKKworICAgICMgRG8gdGhlIHJ1bm5pbmcgYnVpbGQgc2V0dXAKKyAgICBydW5uaW5nX2J1aWxkID0gUnVubmluZ0J1aWxkICgpCisgICAgbWFpbl93aW5kb3cucnVubmluZ19idWlsZF92aWV3LnNldF9tb2RlbCAocnVubmluZ19idWlsZC5tb2RlbCkKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1zdWNjZWVkZWQiLCBydW5uaW5nX2J1aWxkX3N1Y2NlZWRlZF9jYiwKKyAgICAgICAgbWFuYWdlcikKKyAgICBydW5uaW5nX2J1aWxkLmNvbm5lY3QgKCJidWlsZC1mYWlsZWQiLCBydW5uaW5nX2J1aWxkX2ZhaWxlZF9jYiwgbWFuYWdlcikKKworICAgICMgV2UgbmVlZCB0byBzYXZlIHRoZSBtYW5hZ2VyIGludG8gdGhlIE1haW5XaW5kb3cgc28gdGhhdCB0aGUgdG9vbGJhcgorICAgICMgYnV0dG9uIGNhbiB1c2UgaXQuCisgICAgIyBGSVhNRTogUmVmYWN0b3IgPworICAgIG1haW5fd2luZG93Lm1hbmFnZXIgPSBtYW5hZ2VyCisKKyAgICAjIFVzZSBhIHRpbWVvdXQgZnVuY3Rpb24gZm9yIHByb2JpbmcgdGhlIGV2ZW50IHF1ZXVlIHRvIGZpbmQgb3V0IGlmIHdlCisgICAgIyBoYXZlIGEgbWVzc2FnZSB3YWl0aW5nIGZvciB1cy4KKyAgICBnb2JqZWN0LnRpbWVvdXRfYWRkICgyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaGFuZGxlX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfYnVpbGQpCisKKyAgICBndGsubWFpbigpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkgYi9iaXRiYWtlL2xpYi9iYi91aS90b2FzdGVydWkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3ZTg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL3RvYXN0ZXJ1aS5weQpAQCAtMCwwICsxLDM1NSBAQAorIworIyBCaXRCYWtlIFRvYXN0ZXJVSSBJbXBsZW1lbnRhdGlvbgorIyBiYXNlZCBvbiAoTm8pVFRZIFVJIEltcGxlbWVudGF0aW9uIGJ5IFJpY2hhcmQgUHVyZGllCisjCisjIEhhbmRsaW5nIG91dHB1dCB0byBUVFlzIG9yIGZpbGVzIChubyBUVFkpCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDEyIFJpY2hhcmQgUHVyZGllCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IGJiCitleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKKyAgICBzeXMuZXhpdChzdHIoZXhjKSkKKworZnJvbSBiYi51aSBpbXBvcnQgdWloZWxwZXIKK2Zyb20gYmIudWkuYnVpbGRpbmZvaGVscGVyIGltcG9ydCBCdWlsZEluZm9IZWxwZXIKKworaW1wb3J0IGJiLm1zZworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworCisjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyMgbW9kdWxlIHByb3BlcnRpZXMgZm9yIFVJIG1vZHVsZXMgYXJlIHJlYWQgYnkgYml0YmFrZSBhbmQgdGhlIGNvbnRyYWN0IHNob3VsZCBub3QgYmUgYnJva2VuCisKKworZmVhdHVyZVNldCA9IFtiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuSE9CX0VYVFJBX0NBQ0hFUywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfREVQRU5EU19UUkVFLCBiYi5jb29rZXIuQ29va2VyRmVhdHVyZXMuQkFTRURBVEFTVE9SRV9UUkFDS0lORywgYmIuY29va2VyLkNvb2tlckZlYXR1cmVzLlNFTkRfU0FOSVRZRVZFTlRTXQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiVG9hc3RlckxvZ2dlciIpCitpbnRlcmFjdGl2ZSA9IHN5cy5zdGRvdXQuaXNhdHR5KCkKKworCisKK2RlZiBfbG9nX3NldHRpbmdzX2Zyb21fc2VydmVyKHNlcnZlcik6CisgICAgIyBHZXQgdmFsdWVzIG9mIHZhcmlhYmxlcyB3aGljaCBjb250cm9sIG91ciBvdXRwdXQKKyAgICBpbmNsdWRlbG9ncywgZXJyb3IgPSBzZXJ2ZXIucnVuQ29tbWFuZChbImdldFZhcmlhYmxlIiwgIkJCSU5DTFVERUxPR1MiXSkKKyAgICBpZiBlcnJvcjoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBCQklOQ0xVREVMT0dTIHZhcmlhYmxlOiAlcyIsIGVycm9yKQorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKGVycm9yKQorICAgIGxvZ2xpbmVzLCBlcnJvciA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiQkJJTkNMVURFTE9HU19MSU5FUyJdKQorICAgIGlmIGVycm9yOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBnZXQgdGhlIHZhbHVlIG9mIEJCSU5DTFVERUxPR1NfTElORVMgdmFyaWFibGU6ICVzIiwgZXJyb3IpCisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oZXJyb3IpCisgICAgY29uc29sZWxvZ2ZpbGUsIGVycm9yID0gc2VydmVyLnJ1bkNvbW1hbmQoWyJnZXRWYXJpYWJsZSIsICJCQl9DT05TT0xFTE9HIl0pCisgICAgaWYgZXJyb3I6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgQkJfQ09OU09MRUxPRyB2YXJpYWJsZTogJXMiLCBlcnJvcikKKyAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbihlcnJvcikKKyAgICByZXR1cm4gaW5jbHVkZWxvZ3MsIGxvZ2xpbmVzLCBjb25zb2xlbG9nZmlsZQorCisKK2RlZiBtYWluKHNlcnZlciwgZXZlbnRIYW5kbGVyLCBwYXJhbXMgKToKKyAgICBoZWxwZXIgPSB1aWhlbHBlci5CQlVJSGVscGVyKCkKKworICAgIGNvbnNvbGUgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZG91dCkKKyAgICBmb3JtYXRfc3RyID0gIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgorICAgIGZvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcihmb3JtYXRfc3RyKQorICAgIGJiLm1zZy5hZGREZWZhdWx0bG9nRmlsdGVyKGNvbnNvbGUpCisgICAgY29uc29sZS5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNvbnNvbGUpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworICAgIF8sIF8sIGNvbnNvbGVsb2dmaWxlID0gX2xvZ19zZXR0aW5nc19mcm9tX3NlcnZlcihzZXJ2ZXIpCisKKyAgICAjIHZlcmlmeSBhbmQgd2FybgorICAgIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCA9IFRydWUKKyAgICBpbmhlcml0bGlzdCwgXyA9IHNlcnZlci5ydW5Db21tYW5kKFsiZ2V0VmFyaWFibGUiLCAiSU5IRVJJVCJdKQorCisgICAgaWYgbm90ICJidWlsZGhpc3RvcnkiIGluIGluaGVyaXRsaXN0LnNwbGl0KCIgIik6CisgICAgICAgIGxvZ2dlci53YXJuKCJidWlsZGhpc3RvcnkgaXMgbm90IGVuYWJsZWQuIFBsZWFzZSBlbmFibGUgSU5IRVJJVCArPSBcImJ1aWxkaGlzdG9yeVwiIHRvIHNlZSBpbWFnZSBkZXRhaWxzLiIpCisgICAgICAgIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCA9IEZhbHNlCisKKyAgICBpZiBub3QgcGFyYW1zLm9ic2VydmVfb25seToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJUb2FzdGVyVUkgY2FuIG9ubHkgd29yayBpbiBvYnNlcnZlciBtb2RlIikKKyAgICAgICAgcmV0dXJuIDEKKworCisgICAgbWFpbi5zaHV0ZG93biA9IDAKKyAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCisgICAgcmV0dXJuX3ZhbHVlID0gMAorICAgIGVycm9ycyA9IDAKKyAgICB3YXJuaW5ncyA9IDAKKyAgICB0YXNrZmFpbHVyZXMgPSBbXQorICAgIGZpcnN0ID0gVHJ1ZQorCisgICAgYnVpbGRpbmZvaGVscGVyID0gQnVpbGRJbmZvSGVscGVyKHNlcnZlciwgYnVpbGRfaGlzdG9yeV9lbmFibGVkKQorCisgICAgaWYgYnVpbGRpbmZvaGVscGVyLmJyYmUgaXMgbm90IE5vbmUgYW5kIGNvbnNvbGVsb2dmaWxlOgorICAgICAgICAjIGlmIHdlIGFyZSB1bmRlciBtYW5hZ2VkIG1vZGUgd2UgaGF2ZSBubyBvdGhlciBVSSBhbmQgd2UgbmVlZCB0byB3cml0ZSBvdXIgb3duIGZpbGUKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShjb25zb2xlbG9nZmlsZSkpCisgICAgICAgIGNvbmxvZ2Zvcm1hdCA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcihmb3JtYXRfc3RyKQorICAgICAgICBjb25zb2xlbG9nID0gbG9nZ2luZy5GaWxlSGFuZGxlcihjb25zb2xlbG9nZmlsZSkKKyAgICAgICAgYmIubXNnLmFkZERlZmF1bHRsb2dGaWx0ZXIoY29uc29sZWxvZykKKyAgICAgICAgY29uc29sZWxvZy5zZXRGb3JtYXR0ZXIoY29ubG9nZm9ybWF0KQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlbG9nKQorCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudCA9IGV2ZW50SGFuZGxlci53YWl0RXZlbnQoMC4yNSkKKyAgICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiVG9hc3RlclVJIHdhaXRpbmcgZm9yIGV2ZW50cyIpCisKKyAgICAgICAgICAgIGlmIGV2ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbWFpbi5zaHV0ZG93biA+IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaGVscGVyLmV2ZW50SGFuZGxlcihldmVudCkKKworICAgICAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcworICAgICAgICAgICAgIyB0aGUgY29kZSB3aWxsIGxvb2sgaW50byB0aGUgcHJvdGVjdGVkIHZhcmlhYmxlcyBvZiB0aGUgZXZlbnQ7IG5vIGVhc3kgd2F5IGFyb3VuZCB0aGlzCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3N0YXJ0ZWRfYnVpbGQoZXZlbnQpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIChiYi5idWlsZC5UYXNrU3RhcnRlZCwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCwgYmIuYnVpbGQuVGFza0ZhaWxlZFNpbGVudCkpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkxvZ2ZpbGUgZm9yIHRhc2sgJXMiLCBldmVudC5sb2dmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tCYXNlKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhldmVudC5fbWVzc2FnZSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTG9nRXhlY1RUWSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXZlbnQubXNnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICAgICAgICAgICAgICBpZiBldmVudC5sZXZlbG5vID09IC0xOgorICAgICAgICAgICAgICAgICAgICBldmVudC5sZXZlbG5vID0gZm9ybWF0dGVyLkVSUk9SCisKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfbG9nX2V2ZW50KGV2ZW50KQorICAgICAgICAgICAgICAgIGlmIGV2ZW50LmxldmVsbm8gPj0gZm9ybWF0dGVyLkVSUk9SOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgKyAxCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC5sZXZlbG5vID09IGZvcm1hdHRlci5XQVJOSU5HOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncyA9IHdhcm5pbmdzICsgMQorICAgICAgICAgICAgICAgICMgRm9yICJub3JtYWwiIGxvZ2dpbmcgY29uZGl0aW9ucywgZG9uJ3Qgc2hvdyBub3RlIGxvZ3MgZnJvbSB0YXNrcworICAgICAgICAgICAgICAgICMgYnV0IGRvIHNob3cgdGhlbSBpZiB0aGUgdXNlciBoYXMgY2hhbmdlZCB0aGUgZGVmYXVsdCBsb2cgbGV2ZWwgdG8KKyAgICAgICAgICAgICAgICAjIGluY2x1ZGUgdmVyYm9zZS9kZWJ1ZyBtZXNzYWdlcworICAgICAgICAgICAgICAgIGlmIGV2ZW50LnRhc2twaWQgIT0gMCBhbmQgZXZlbnQubGV2ZWxubyA8PSBmb3JtYXR0ZXIuTk9URToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9hbmRfc3RvcmVfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBsb2dmaWxlID0gZXZlbnQubG9nZmlsZQorICAgICAgICAgICAgICAgIGlmIGxvZ2ZpbGUgYW5kIG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBiYi5lcnJvcigiTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogJXMiICUgbG9nZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIHRoZXNlIGV2ZW50cyBhcmUgdW5wcm9jZXNzZWQgbm93LCBidXQgbWF5IGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSB0byBsb2cKKyAgICAgICAgICAgICMgdGltaW5nIGFuZCBlcnJvciBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgcGFyc2luZyBwaGFzZSBpbiBUb2FzdGVyCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuU2FuaXR5Q2hlY2tQYXNzZWQsIGJiLmV2ZW50LlNhbml0eUNoZWNrKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LlBhcnNlUHJvZ3Jlc3MpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZFN0YXJ0ZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5DYWNoZUxvYWRQcm9ncmVzcyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50LkNhY2hlTG9hZENvbXBsZXRlZCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmV2ZW50Lk11bHRpcGxlUHJvdmlkZXJzKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygibXVsdGlwbGUgcHJvdmlkZXJzIGFyZSBhdmFpbGFibGUgZm9yICVzJXMgKCVzKSIsIGV2ZW50Ll9pc19ydW50aW1lIGFuZCAicnVudGltZSAiIG9yICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9pdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsICIuam9pbihldmVudC5fY2FuZGlkYXRlcykpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNvbnNpZGVyIGRlZmluaW5nIGEgUFJFRkVSUkVEX1BST1ZJREVSIGVudHJ5IHRvIG1hdGNoICVzIiwgZXZlbnQuX2l0ZW0pCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTm9Qcm92aWRlcik6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICsgMQorICAgICAgICAgICAgICAgIGlmIGV2ZW50Ll9ydW50aW1lOgorICAgICAgICAgICAgICAgICAgICByID0gIlIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgciA9ICIiCisKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fZGVwZW5kZWVzOgorICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gIk5vdGhpbmcgJXNQUk9WSURFUyAnJXMnIChidXQgJXMgJXNERVBFTkRTIG9uIG9yIG90aGVyd2lzZSByZXF1aXJlcyBpdCkiICUgKHIsIGV2ZW50Ll9pdGVtLCAiLCAiLmpvaW4oZXZlbnQuX2RlcGVuZGVlcyksIHIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJOb3RoaW5nICVzUFJPVklERVMgJyVzJyIgJSAociwgZXZlbnQuX2l0ZW0pCisKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYXNvbiBpbiBldmVudC5fcmVhc29uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXMiLCByZWFzb24pCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlYXNvbgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sb2dfZXJyb3IodGV4dCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5SZWNpcGVQYXJzZWQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgZW5kIG9mIHNhdmVkIGV2ZW50cworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTdGFydGVkLCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tTa2lwcGVkKSk6CisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX3N0YXJ0ZWRfdGFzayhldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ydW5xdWV1ZS5ydW5RdWV1ZVRhc2tDb21wbGV0ZWQpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrRmFpbGVkKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FuZF9zdG9yZV90YXNrKGV2ZW50KQorICAgICAgICAgICAgICAgIHRhc2tmYWlsdXJlcy5hcHBlbmQoZXZlbnQudGFza3N0cmluZykKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sgJXMgKCVzKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhc2tpZCwgZXZlbnQudGFza3N0cmluZywgZXZlbnQuZXhpdGNvZGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgKGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVUYXNrQ29tcGxldGVkLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlVGFza0ZhaWxlZCkpOgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci51cGRhdGVfYW5kX3N0b3JlX3Rhc2soZXZlbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuVHJlZURhdGFQcmVwYXJhdGlvblN0YXJ0ZWQsIGJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCkpOgorCisgICAgICAgICAgICAgICAgZXJyb3Jjb2RlID0gMAorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCk6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAxCisgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb21tYW5kIGV4ZWN1dGlvbiBmYWlsZWQ6ICVzIiwgZXZlbnQuZXJyb3IpCisKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgYnVpbGQgaW5mbyBoZWxwZXIgb24gQnVpbGRDb21wbGV0ZWQsIG5vdCBvbiBDb21tYW5kWFhYCisgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV9idWlsZF9pbmZvcm1hdGlvbihldmVudCwgZXJyb3JzLCB3YXJuaW5ncywgdGFza2ZhaWx1cmVzKQorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5jbG9zZShlcnJvcmNvZGUpCisgICAgICAgICAgICAgICAgIyBtYXJrIHRoZSBsb2cgb3V0cHV0OyBjb250cm9sbGVycyBtYXkga2lsbCB0aGUgdG9hc3RlclVJIGFmdGVyIHNlZWluZyB0aGlzIGxvZworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUb2FzdGVyVUkgYnVpbGQgZG9uZSAxLCBicmJlOiAlcyIsIGJ1aWxkaW5mb2hlbHBlci5icmJlICkKKworICAgICAgICAgICAgICAgICMgd2Ugc3RhcnQgYSBuZXcgYnVpbGQgaW5mbworICAgICAgICAgICAgICAgIGlmIGJ1aWxkaW5mb2hlbHBlci5icmJlIGlzIG5vdCBOb25lOgorCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiVG9hc3RlclVJIHVuZGVyIEJ1aWxkRW52aXJvbm1lbnQgbWFuYWdlbWVudCAtIGV4aXRpbmcgYWZ0ZXIgdGhlIGJ1aWxkIikKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyLnRlcm1pbmF0ZVNlcnZlcigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJUb2FzdGVyVUkgcHJlcGFyZWQgZm9yIG5ldyBidWlsZCIpCisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IDAKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgPSAwCisgICAgICAgICAgICAgICAgICAgIHRhc2tmYWlsdXJlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlciA9IEJ1aWxkSW5mb0hlbHBlcihzZXJ2ZXIsIGJ1aWxkX2hpc3RvcnlfZW5hYmxlZCkKKworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUb2FzdGVyVUkgYnVpbGQgZG9uZSAyIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuY29tbWFuZC5Db21tYW5kQ29tcGxldGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmNvbW1hbmQuQ29tbWFuZEZhaWxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRFeGl0KSk6CisgICAgICAgICAgICAgICAgZXJyb3Jjb2RlID0gMAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuZXZlbnQuTWV0YWRhdGFFdmVudCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnQudHlwZSA9PSAiU2luZ2xlUGFja2FnZUluZm8iOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfYnVpbGRfcGFja2FnZV9pbmZvcm1hdGlvbihldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkxheWVySW5mbyI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sYXllcl9pbmZvKGV2ZW50KQorICAgICAgICAgICAgICAgIGVsaWYgZXZlbnQudHlwZSA9PSAiQnVpbGRTdGF0c0xpc3QiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfdGFza3Nfc3RhdHMoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJJbWFnZVBrZ0xpc3QiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfdGFyZ2V0X3BhY2thZ2VfZGF0YShldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIk1pc3NlZFNzdGF0ZSI6CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9taXNzZWRfc3RhdGVfdGFza3MoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJJbWFnZUZpbGVTaXplIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnVwZGF0ZV90YXJnZXRfaW1hZ2VfZmlsZShldmVudCkKKyAgICAgICAgICAgICAgICBlbGlmIGV2ZW50LnR5cGUgPT0gIkFydGlmYWN0RmlsZVNpemUiOgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIudXBkYXRlX2FydGlmYWN0X2ltYWdlX2ZpbGUoZXZlbnQpCisgICAgICAgICAgICAgICAgZWxpZiBldmVudC50eXBlID09ICJMaWNlbnNlTWFuaWZlc3RQYXRoIjoKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmZvaGVscGVyLnN0b3JlX2xpY2Vuc2VfbWFuaWZlc3RfcGF0aChldmVudCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVucHJvY2Vzc2VkIE1ldGFkYXRhRXZlbnQgJXMgIiwgc3RyKGV2ZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5jb29rZXIuQ29va2VyRXhpdCk6CisgICAgICAgICAgICAgICAgIyBleGl0IHdoZW4gdGhlIHNlcnZlciBleGl0cworICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgaWdub3JlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoYmIuZXZlbnQuQnVpbGRCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlN0YW1wVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnJ1bnF1ZXVlLnJ1blF1ZXVlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIucnVucXVldWUucnVuUXVldWVFeGl0V2FpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ldmVudC5PcGVyYXRpb25Qcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRGYWlsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuY29tbWFuZC5Db21tYW5kRXhpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5jb21tYW5kLkNvbW1hbmRDb21wbGV0ZWQpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5ldmVudC5EZXBUcmVlR2VuZXJhdGVkKToKKyAgICAgICAgICAgICAgICBidWlsZGluZm9oZWxwZXIuc3RvcmVfZGVwZW5kZW5jeV9pbmZvcm1hdGlvbihldmVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVua25vd24gZXZlbnQ6ICVzIiwgZXZlbnQpCisgICAgICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQorCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGlvZXJyb3I6CisgICAgICAgICAgICAjIGlnbm9yZSBpbnRlcnJ1cHRlZCBpbworICAgICAgICAgICAgaWYgaW9lcnJvci5hcmdzWzBdID09IDQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBtYWluLnNodXRkb3duID0gMQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjIHByaW50IGVycm9ycyB0byBsb2cKKyAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgIGZyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CisgICAgICAgICAgICBleGNlcHRpb25fZGF0YSA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiJXNcbiVzIiAsIGUsIGV4Y2VwdGlvbl9kYXRhKQorCisgICAgICAgICAgICBfLCBfLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjdXJyID0gdGIKKyAgICAgICAgICAgICAgICB3aGlsZSBjdXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiRXJyb3IgZGF0YSBkdW1wICVzXG4lc1xuIiAsIHRyYWNlYmFjay5mb3JtYXRfdGIoY3VyciwxKSwgcGZvcm1hdChjdXJyLnRiX2ZyYW1lLmZfbG9jYWxzKSkKKyAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudGJfbmV4dAorCisgICAgICAgICAgICAjIHNhdmUgdGhlbSB0byBkYXRhYmFzZSwgaWYgcG9zc2libGU7IGlmIGl0IGZhaWxzLCB3ZSBhbHJlYWR5IGxvZ2dlZCB0byBjb25zb2xlLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ1aWxkaW5mb2hlbHBlci5zdG9yZV9sb2dfZXhjZXB0aW9uKCIlc1xuJXMiICUgKHN0cihlKSwgZXhjZXB0aW9uX2RhdGEpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBjZToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNSSVRJQ0FMIC0gRmFpbGVkIHRvIHRvIHNhdmUgdG9hc3RlciBleGNlcHRpb24gdG8gdGhlIGRhdGFiYXNlOiAlcyIsIHN0cihjZSkpCisKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlIHJldHVybiB3aXRoIGFuIGVycm9yCisgICAgICAgICAgICByZXR1cm5fdmFsdWUgKz0gMQorCisgICAgaWYgaW50ZXJydXB0ZWQ6CisgICAgICAgIGlmIHJldHVybl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICs9IDEKKworICAgIGxvZ2dlci53YXJuKCJSZXR1cm4gdmFsdWUgaXMgJWQiLCByZXR1cm5fdmFsdWUpCisgICAgcmV0dXJuIHJldHVybl92YWx1ZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYmIvdWkvdWlldmVudC5weSBiL2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNTBjNwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JiL3VpL3VpZXZlbnQucHkKQEAgLTAsMCArMSwxNTUgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDcgIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgUmljaGFyZCBQdXJkaWUKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIiIiCitVc2UgdGhpcyBjbGFzcyB0byBmb3JrIG9mZiBhIHRocmVhZCB0byByZWNpZXZlIGV2ZW50IGNhbGxiYWNrcyBmcm9tIHRoZSBiaXRiYWtlCitzZXJ2ZXIgYW5kIHF1ZXVlIHRoZW0gZm9yIHRoZSBVSSB0byBwcm9jZXNzLiBUaGlzIHByb2Nlc3MgbXVzdCBiZSB1c2VkIHRvIGF2b2lkCitjbGllbnQvc2VydmVyIGRlYWRsb2Nrcy4KKyIiIgorCitpbXBvcnQgc29ja2V0LCB0aHJlYWRpbmcsIHBpY2tsZQorZnJvbSBTaW1wbGVYTUxSUENTZXJ2ZXIgaW1wb3J0IFNpbXBsZVhNTFJQQ1NlcnZlciwgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKworY2xhc3MgQkJVSUV2ZW50UXVldWU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIEJCU2VydmVyLCBjbGllbnRpbmZvPSgibG9jYWxob3N0LCAwIikpOgorCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZSA9IFtdCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeSA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgc2VsZi5CQlNlcnZlciA9IEJCU2VydmVyCisgICAgICAgIHNlbGYuY2xpZW50aW5mbyA9IGNsaWVudGluZm8KKworICAgICAgICBzZXJ2ZXIgPSBVSVhNTFJQQ1NlcnZlcihzZWxmLmNsaWVudGluZm8pCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgc2VydmVyLnJlZ2lzdGVyX2Z1bmN0aW9uKCBzZWxmLnN5c3RlbV9xdWl0LCAiZXZlbnQucXVpdCIgKQorICAgICAgICBzZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb24oIHNlbGYuc2VuZF9ldmVudCwgImV2ZW50LnNlbmRwaWNrbGUiICkKKyAgICAgICAgc2VydmVyLnNvY2tldC5zZXR0aW1lb3V0KDEpCisKKyAgICAgICAgc2VsZi5FdmVudEhhbmRsZXIgPSBOb25lCisgICAgICAgIGNvdW50X3RyaWVzID0gMAorCisgICAgICAgICMgdGhlIGV2ZW50IGhhbmRsZXIgcmVnaXN0cmF0aW9uIG1heSBmYWlsIGhlcmUgZHVlIHRvIGNvb2tlciBiZWluZyBpbiBpbnZhbGlkIHN0YXRlCisgICAgICAgICMgdGhpcyBpcyBhIHRyYW5zaWVudCBzaXR1YXRpb24sIGFuZCB3ZSBzaG91bGQgcmV0cnkgYSBjb3VwbGUgb2YgdGltZXMgYmVmb3JlCisgICAgICAgICMgZ2l2aW5nIHVwCisKKyAgICAgICAgd2hpbGUgc2VsZi5FdmVudEhhbmRsZXIgPT0gTm9uZSBhbmQgY291bnRfdHJpZXMgPCA1OgorICAgICAgICAgICAgc2VsZi5FdmVudEhhbmRsZSA9IHNlbGYuQkJTZXJ2ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKKyAgICAgICAgICAgIGlmIChzZWxmLkV2ZW50SGFuZGxlICE9IE5vbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGJiLndhcm4oIkNvdWxkIG5vdCByZWdpc3RlciBVSSBldmVudCBoYW5kbGVyICVzOiVkLCByZXRyeSIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgY291bnRfdHJpZXMgKz0gMQorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworCisgICAgICAgIGlmIHNlbGYuRXZlbnRIYW5kbGUgPT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IHJlZ2lzdGVyIFVJIGV2ZW50IGhhbmRsZXIiKQorCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisKKyAgICAgICAgc2VsZi50ID0gdGhyZWFkaW5nLlRocmVhZCgpCisgICAgICAgIHNlbGYudC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi50LnJ1biA9IHNlbGYuc3RhcnRDYWxsYmFja0hhbmRsZXIKKyAgICAgICAgc2VsZi50LnN0YXJ0KCkKKworICAgIGRlZiBnZXRFdmVudChzZWxmKToKKworICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLmFjcXVpcmUoKQorCisgICAgICAgIGlmIGxlbihzZWxmLmV2ZW50UXVldWUpID09IDA6CisgICAgICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpdGVtID0gc2VsZi5ldmVudFF1ZXVlLnBvcCgwKQorCisgICAgICAgIGlmIGxlbihzZWxmLmV2ZW50UXVldWUpID09IDA6CisgICAgICAgICAgICBzZWxmLmV2ZW50UXVldWVOb3RpZnkuY2xlYXIoKQorCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2sucmVsZWFzZSgpCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgd2FpdEV2ZW50KHNlbGYsIGRlbGF5KToKKyAgICAgICAgc2VsZi5ldmVudFF1ZXVlTm90aWZ5LndhaXQoZGVsYXkpCisgICAgICAgIHJldHVybiBzZWxmLmdldEV2ZW50KCkKKworICAgIGRlZiBxdWV1ZV9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZUxvY2suYWNxdWlyZSgpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZS5hcHBlbmQoZXZlbnQpCisgICAgICAgIHNlbGYuZXZlbnRRdWV1ZU5vdGlmeS5zZXQoKQorICAgICAgICBzZWxmLmV2ZW50UXVldWVMb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIHNlbmRfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICBzZWxmLnF1ZXVlX2V2ZW50KHBpY2tsZS5sb2FkcyhldmVudCkpCisKKyAgICBkZWYgc3RhcnRDYWxsYmFja0hhbmRsZXIoc2VsZik6CisKKyAgICAgICAgc2VsZi5zZXJ2ZXIudGltZW91dCA9IDEKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuc2VydmVyLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkJCVUlFdmVudFF1ZXVlLnN0YXJ0Q2FsbGJhY2tIYW5kbGVyOiBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIGhhbmRsZSByZXF1ZXN0OiAlc1xuJXMiICUgKGUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKGUpKSkKKworICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZXJfY2xvc2UoKQorCisgICAgZGVmIHN5c3RlbV9xdWl0KCBzZWxmICk6CisgICAgICAgICIiIgorICAgICAgICBTaHV0IGRvd24gdGhlIGNhbGxiYWNrIHRocmVhZAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5CQlNlcnZlci51bnJlZ2lzdGVyRXZlbnRIYW5kbGVyKHNlbGYuRXZlbnRIYW5kbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5zZXJ2ZXIucXVpdCA9IFRydWUKKworY2xhc3MgVUlYTUxSUENTZXJ2ZXIgKFNpbXBsZVhNTFJQQ1NlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oIHNlbGYsIGludGVyZmFjZSApOgorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuX19pbml0X18oIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGFuZGxlcj1TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisKKyAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29jaywgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIChzb2NrLCBhZGRyKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorCisgICAgZGVmIGNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIGlmIHJlcXVlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuY2xvc2VfcmVxdWVzdChzZWxmLCByZXF1ZXN0KQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIGlmIHJlcXVlc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIucHJvY2Vzc19yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weSBiL2JpdGJha2UvbGliL2JiL3VpL3VpaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDMzODcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91aS91aWhlbHBlci5weQpAQCAtMCwwICsxLDEwMCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyAgTWljaGFlbCAnTWlja2V5JyBMYXVlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3ICBSaWNoYXJkIFB1cmRpZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IGJiLmJ1aWxkCisKK2NsYXNzIEJCVUlIZWxwZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bm5pbmdfdGFza3MgPSB7fQorICAgICAgICAjIFJ1bm5pbmcgUElEcyBwcmVzZXJ2ZXMgdGhlIG9yZGVyIHRhc2tzIHdlcmUgZXhlY3V0ZWQgaW4KKyAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF90YXNrcyA9IFtdCisgICAgICAgIHNlbGYudGFza251bWJlcl9jdXJyZW50ID0gMAorICAgICAgICBzZWxmLnRhc2tudW1iZXJfdG90YWwgPSAwCisKKyAgICBkZWYgZXZlbnRIYW5kbGVyKHNlbGYsIGV2ZW50KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0gPSB7ICd0aXRsZScgOiAiJXMgJXMiICUgKGV2ZW50Ll9wYWNrYWdlLCBldmVudC5fdGFzaykgfQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMuYXBwZW5kKGV2ZW50LnBpZCkKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCk6CisgICAgICAgICAgICBkZWwgc2VsZi5ydW5uaW5nX3Rhc2tzW2V2ZW50LnBpZF0KKyAgICAgICAgICAgIHNlbGYucnVubmluZ19waWRzLnJlbW92ZShldmVudC5waWQpCisgICAgICAgICAgICBzZWxmLm5lZWRVcGRhdGUgPSBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIGJiLmJ1aWxkLlRhc2tGYWlsZWRTaWxlbnQpOgorICAgICAgICAgICAgZGVsIHNlbGYucnVubmluZ190YXNrc1tldmVudC5waWRdCisgICAgICAgICAgICBzZWxmLnJ1bm5pbmdfcGlkcy5yZW1vdmUoZXZlbnQucGlkKQorICAgICAgICAgICAgIyBEb24ndCBhZGQgdG8gdGhlIGZhaWxlZCB0YXNrcyBsaXN0IHNpbmNlIHRoaXMgaXMgZS5nLiBhIHNldHNjZW5lIHRhc2sgZmFpbHVyZQorICAgICAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gVHJ1ZQorICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgICAgIGRlbCBzZWxmLnJ1bm5pbmdfdGFza3NbZXZlbnQucGlkXQorICAgICAgICAgICAgc2VsZi5ydW5uaW5nX3BpZHMucmVtb3ZlKGV2ZW50LnBpZCkKKyAgICAgICAgICAgIHNlbGYuZmFpbGVkX3Rhc2tzLmFwcGVuZCggeyAndGl0bGUnIDogIiVzICVzIiAlIChldmVudC5fcGFja2FnZSwgZXZlbnQuX3Rhc2spfSkKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUucnVuUXVldWVUYXNrU3RhcnRlZCkgb3IgaXNpbnN0YW5jZShldmVudCwgYmIucnVucXVldWUuc2NlbmVRdWV1ZVRhc2tTdGFydGVkKToKKyAgICAgICAgICAgIHNlbGYudGFza251bWJlcl9jdXJyZW50ID0gZXZlbnQuc3RhdHMuY29tcGxldGVkICsgZXZlbnQuc3RhdHMuYWN0aXZlICsgZXZlbnQuc3RhdHMuZmFpbGVkICsgMQorICAgICAgICAgICAgc2VsZi50YXNrbnVtYmVyX3RvdGFsID0gZXZlbnQuc3RhdHMudG90YWwKKyAgICAgICAgICAgIHNlbGYubmVlZFVwZGF0ZSA9IFRydWUKKworICAgIGRlZiBnZXRUYXNrcyhzZWxmKToKKyAgICAgICAgc2VsZi5uZWVkVXBkYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIChzZWxmLnJ1bm5pbmdfdGFza3MsIHNlbGYuZmFpbGVkX3Rhc2tzKQorCisgICAgZGVmIGZpbmRTZXJ2ZXJEZXRhaWxzKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCBvcHRwYXJzZQorICAgICAgICBmcm9tIGJiLnNlcnZlci54bWxycGMgaW1wb3J0IEJpdGJha2VTZXJ2ZXJJbmZvLCBCaXRCYWtlU2VydmVyQ29ubmVjdGlvbgorICAgICAgICBob3N0ID0gIiIKKyAgICAgICAgcG9ydCA9IDAKKyAgICAgICAgYmluZCA9ICIiCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgICAgIHVzYWdlID0gIiIiJXByb2cgLUggaG9zdCAtUCBwb3J0IC1CIGJpbmRhZGRyIiIiKQorCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSCIsICItLWhvc3QiLCBoZWxwID0gIkJpdGJha2Ugc2VydmVyJ3MgSVAgYWRkcmVzcyIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJob3N0IiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1QIiwgIi0tcG9ydCIsIGhlbHAgPSAiQml0YmFrZSBzZXJ2ZXIncyBQb3J0IG51bWJlciIsCisgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlIiwgZGVzdCA9ICJwb3J0IiwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1CIiwgIi0tYmluZCIsIGhlbHAgPSAiSG9iMiBsb2NhbCBiaW5kIGFkZHJlc3MiLAorICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZSIsIGRlc3QgPSAiYmluZCIsIGRlZmF1bHQgPSBOb25lKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICAgICAgZm9yIGtleSwgdmFsIGluIG9wdGlvbnMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGtleSA9PSAnaG9zdCcgYW5kIHZhbDoKKyAgICAgICAgICAgICAgICBob3N0ID0gdmFsCisgICAgICAgICAgICBlbGlmIGtleSA9PSAncG9ydCcgYW5kIHZhbDoKKyAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHZhbCkKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdiaW5kJyBhbmQgdmFsOgorICAgICAgICAgICAgICAgIGJpbmQgPSB2YWwKKworICAgICAgICBpZiBub3QgaG9zdCBvciBub3QgcG9ydCBvciBub3QgYmluZDoKKyAgICAgICAgICAgIHBhcnNlci5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHNlcnZlcmluZm8gPSBCaXRiYWtlU2VydmVySW5mbyhob3N0LCBwb3J0KQorICAgICAgICBjbGllbnRpbmZvID0gKGJpbmQsIDApCisgICAgICAgIGNvbm5lY3Rpb24gPSBCaXRCYWtlU2VydmVyQ29ubmVjdGlvbihzZXJ2ZXJpbmZvLCBjbGllbnRpbmZvKQorCisgICAgICAgIHNlcnZlciA9IGNvbm5lY3Rpb24uY29ubmVjdGlvbgorICAgICAgICBldmVudEhhbmRsZXIgPSBjb25uZWN0aW9uLmV2ZW50cworCisgICAgICAgIHJldHVybiBzZXJ2ZXIsIGV2ZW50SGFuZGxlciwgaG9zdCwgYmluZAorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iYi91dGlscy5weSBiL2JpdGJha2UvbGliL2JiL3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZmFhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iYi91dGlscy5weQpAQCAtMCwwICsxLDEzMTIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisiIiIKK0JpdEJha2UgVXRpbGl0eSBGdW5jdGlvbnMKKyIiIgorCisjIENvcHlyaWdodCAoQykgMjAwNCBNaWNoYWVsIExhdWVyCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUsIGZjbnRsLCBvcywgc3RyaW5nLCBzdGF0LCBzaHV0aWwsIHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBiYgoraW1wb3J0IGJiLm1zZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IGZjbnRsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGdsb2IKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzaWduYWwKK2Zyb20gY29tbWFuZHMgaW1wb3J0IGdldHN0YXR1c291dHB1dAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorZnJvbSBjdHlwZXMgaW1wb3J0IGNkbGwKKworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5VdGlsIikKKworZGVmIGNsZWFuX2NvbnRleHQoKToKKyAgICByZXR1cm4geworICAgICAgICAib3MiOiBvcywKKyAgICAgICAgImJiIjogYmIsCisgICAgICAgICJ0aW1lIjogdGltZSwKKyAgICB9CisKK2RlZiBnZXRfY29udGV4dCgpOgorICAgIHJldHVybiBfY29udGV4dAorICAgIAorCitkZWYgc2V0X2NvbnRleHQoY3R4KToKKyAgICBfY29udGV4dCA9IGN0eAorCisjIENvbnRleHQgdXNlZCBpbiBiZXR0ZXJfZXhlYywgZXZhbAorX2NvbnRleHQgPSBjbGVhbl9jb250ZXh0KCkKKworY2xhc3MgVmVyc2lvblN0cmluZ0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiBpbnZhbGlkIHZlcnNpb24gc3BlY2lmaWNhdGlvbiBpcyBmb3VuZCIiIgorCitkZWYgZXhwbG9kZV92ZXJzaW9uKHMpOgorICAgIHIgPSBbXQorICAgIGFscGhhX3JlZ2V4cCA9IHJlLmNvbXBpbGUoJ14oW2EtekEtWl0rKSguKikkJykKKyAgICBudW1lcmljX3JlZ2V4cCA9IHJlLmNvbXBpbGUoJ14oXGQrKSguKikkJykKKyAgICB3aGlsZSAocyAhPSAnJyk6CisgICAgICAgIGlmIHNbMF0gaW4gc3RyaW5nLmRpZ2l0czoKKyAgICAgICAgICAgIG0gPSBudW1lcmljX3JlZ2V4cC5tYXRjaChzKQorICAgICAgICAgICAgci5hcHBlbmQoKDAsIGludChtLmdyb3VwKDEpKSkpCisgICAgICAgICAgICBzID0gbS5ncm91cCgyKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgc1swXSBpbiBzdHJpbmcubGV0dGVyczoKKyAgICAgICAgICAgIG0gPSBhbHBoYV9yZWdleHAubWF0Y2gocykKKyAgICAgICAgICAgIHIuYXBwZW5kKCgxLCBtLmdyb3VwKDEpKSkKKyAgICAgICAgICAgIHMgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBzWzBdID09ICd+JzoKKyAgICAgICAgICAgIHIuYXBwZW5kKCgtMSwgc1swXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByLmFwcGVuZCgoMiwgc1swXSkpCisgICAgICAgIHMgPSBzWzE6XQorICAgIHJldHVybiByCisKK2RlZiBzcGxpdF92ZXJzaW9uKHMpOgorICAgICIiIlNwbGl0IGEgdmVyc2lvbiBzdHJpbmcgaW50byBpdHMgY29uc3RpdHVlbnQgcGFydHMgKFBFLCBQViwgUFIpIiIiCisgICAgcyA9IHMuc3RyaXAoIiA8Pj0iKQorICAgIGUgPSAwCisgICAgaWYgcy5jb3VudCgnOicpOgorICAgICAgICBlID0gaW50KHMuc3BsaXQoIjoiKVswXSkKKyAgICAgICAgcyA9IHMuc3BsaXQoIjoiKVsxXQorICAgIHIgPSAiIgorICAgIGlmIHMuY291bnQoJy0nKToKKyAgICAgICAgciA9IHMucnNwbGl0KCItIiwgMSlbMV0KKyAgICAgICAgcyA9IHMucnNwbGl0KCItIiwgMSlbMF0KKyAgICB2ID0gcworICAgIHJldHVybiAoZSwgdiwgcikKKworZGVmIHZlcmNtcF9wYXJ0KGEsIGIpOgorICAgIHZhID0gZXhwbG9kZV92ZXJzaW9uKGEpCisgICAgdmIgPSBleHBsb2RlX3ZlcnNpb24oYikKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBpZiB2YSA9PSBbXToKKyAgICAgICAgICAgIChvYSwgY2EpID0gKDAsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAob2EsIGNhKSA9IHZhLnBvcCgwKQorICAgICAgICBpZiB2YiA9PSBbXToKKyAgICAgICAgICAgIChvYiwgY2IpID0gKDAsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAob2IsIGNiKSA9IHZiLnBvcCgwKQorICAgICAgICBpZiAob2EsIGNhKSA9PSAoMCwgTm9uZSkgYW5kIChvYiwgY2IpID09ICgwLCBOb25lKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIG9hIDwgb2I6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBvYSA+IG9iOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZWxpZiBjYSA8IGNiOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsaWYgY2EgPiBjYjoKKyAgICAgICAgICAgIHJldHVybiAxCisKK2RlZiB2ZXJjbXAodGEsIHRiKToKKyAgICAoZWEsIHZhLCByYSkgPSB0YQorICAgIChlYiwgdmIsIHJiKSA9IHRiCisKKyAgICByID0gaW50KGVhIG9yIDApIC0gaW50KGViIG9yIDApCisgICAgaWYgKHIgPT0gMCk6CisgICAgICAgIHIgPSB2ZXJjbXBfcGFydCh2YSwgdmIpCisgICAgaWYgKHIgPT0gMCk6CisgICAgICAgIHIgPSB2ZXJjbXBfcGFydChyYSwgcmIpCisgICAgcmV0dXJuIHIKKworZGVmIHZlcmNtcF9zdHJpbmcoYSwgYik6CisgICAgdGEgPSBzcGxpdF92ZXJzaW9uKGEpCisgICAgdGIgPSBzcGxpdF92ZXJzaW9uKGIpCisgICAgcmV0dXJuIHZlcmNtcCh0YSwgdGIpCisKK2RlZiB2ZXJjbXBfc3RyaW5nX29wKGEsIGIsIG9wKToKKyAgICAiIiIKKyAgICBDb21wYXJlIHR3byB2ZXJzaW9ucyBhbmQgY2hlY2sgaWYgdGhlIHNwZWNpZmllZCBjb21wYXJpc29uIG9wZXJhdG9yIG1hdGNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbi4KKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGZhaXJseSBsaWJlcmFsIGFib3V0IHdoYXQgb3BlcmF0b3JzIGl0IHdpbGwgYWNjZXB0IHNpbmNlIHRoZXJlIGFyZSBhIHZhcmlldHkgb2Ygc3R5bGVzCisgICAgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LgorICAgICIiIgorICAgIHJlcyA9IHZlcmNtcF9zdHJpbmcoYSwgYikKKyAgICBpZiBvcCBpbiAoJz0nLCAnPT0nKToKKyAgICAgICAgcmV0dXJuIHJlcyA9PSAwCisgICAgZWxpZiBvcCA9PSAnPD0nOgorICAgICAgICByZXR1cm4gcmVzIDw9IDAKKyAgICBlbGlmIG9wID09ICc+PSc6CisgICAgICAgIHJldHVybiByZXMgPj0gMAorICAgIGVsaWYgb3AgaW4gKCc+JywgJz4+Jyk6CisgICAgICAgIHJldHVybiByZXMgPiAwCisgICAgZWxpZiBvcCBpbiAoJzwnLCAnPDwnKToKKyAgICAgICAgcmV0dXJuIHJlcyA8IDAKKyAgICBlbGlmIG9wID09ICchPSc6CisgICAgICAgIHJldHVybiByZXMgIT0gMAorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZlcnNpb25TdHJpbmdFeGNlcHRpb24oJ1Vuc3VwcG9ydGVkIGNvbXBhcmlzb24gb3BlcmF0b3IgIiVzIicgJSBvcCkKKworZGVmIGV4cGxvZGVfZGVwcyhzKToKKyAgICAiIiIKKyAgICBUYWtlIGFuIFJERVBFTkRTIHN0eWxlIHN0cmluZyBvZiBmb3JtYXQ6CisgICAgIkRFUEVORDEgKG9wdGlvbmFsIHZlcnNpb24pIERFUEVORDIgKG9wdGlvbmFsIHZlcnNpb24pIC4uLiIKKyAgICBhbmQgcmV0dXJuIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMuCisgICAgVmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBpZ25vcmVkLgorICAgICIiIgorICAgIHIgPSBbXQorICAgIGwgPSBzLnNwbGl0KCkKKyAgICBmbGFnID0gRmFsc2UKKyAgICBmb3IgaSBpbiBsOgorICAgICAgICBpZiBpWzBdID09ICcoJzoKKyAgICAgICAgICAgIGZsYWcgPSBUcnVlCisgICAgICAgICAgICAjaiA9IFtdCisgICAgICAgIGlmIG5vdCBmbGFnOgorICAgICAgICAgICAgci5hcHBlbmQoaSkKKyAgICAgICAgI2Vsc2U6CisgICAgICAgICMgICAgai5hcHBlbmQoaSkKKyAgICAgICAgaWYgZmxhZyBhbmQgaS5lbmRzd2l0aCgnKScpOgorICAgICAgICAgICAgZmxhZyA9IEZhbHNlCisgICAgICAgICAgICAjIElnbm9yZSB2ZXJzaW9uCisgICAgICAgICAgICAjclstMV0gKz0gJyAnICsgJyAnLmpvaW4oaikKKyAgICByZXR1cm4gcgorCitkZWYgZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHMpOgorICAgICIiIgorICAgIFRha2UgYW4gUkRFUEVORFMgc3R5bGUgc3RyaW5nIG9mIGZvcm1hdDoKKyAgICAiREVQRU5EMSAob3B0aW9uYWwgdmVyc2lvbikgREVQRU5EMiAob3B0aW9uYWwgdmVyc2lvbikgLi4uIgorICAgIGFuZCByZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGRlcGVuZGVuY2llcyBhbmQgdmVyc2lvbnMuCisgICAgIiIiCisgICAgciA9IHt9CisgICAgbCA9IHMucmVwbGFjZSgiLCIsICIiKS5zcGxpdCgpCisgICAgbGFzdGRlcCA9IE5vbmUKKyAgICBsYXN0Y21wID0gIiIKKyAgICBsYXN0dmVyID0gIiIKKyAgICBpbmNtcCA9IEZhbHNlCisgICAgaW52ZXJzaW9uID0gRmFsc2UKKyAgICBmb3IgaSBpbiBsOgorICAgICAgICBpZiBpWzBdID09ICcoJzoKKyAgICAgICAgICAgIGluY21wID0gVHJ1ZQorICAgICAgICAgICAgaSA9IGlbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaW5jbXA6CisgICAgICAgICAgICBpbmNtcCA9IEZhbHNlCisgICAgICAgICAgICBpbnZlcnNpb24gPSBUcnVlCisgICAgICAgICAgICAjIFRoaXMgbGlzdCBpcyBiYXNlZCBvbiBiZWhhdmlvciBhbmQgc3VwcG9ydGVkIGNvbXBhcmlzb25zIGZyb20gZGViLCBvcGtnIGFuZCBycG0uCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEV2ZW4gdGhvdWdoID08LCA8PCwgPT0sICE9LCA9PiwgYW5kID4+IG1heSBub3QgYmUgc3VwcG9ydGVkLCAKKyAgICAgICAgICAgICMgd2UgbGlzdCBlYWNoIHBvc3NpYmx5IHZhbGlkIGl0ZW0uIAorICAgICAgICAgICAgIyBUaGUgYnVpbGQgc3lzdGVtIGlzIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW9uIG9mIHdoYXQgaXQgc3VwcG9ydHMuCisgICAgICAgICAgICBpZiBpLnN0YXJ0c3dpdGgoKCc8PScsICc9PCcsICc8PCcsICc9PScsICchPScsICc+PScsICc9PicsICc+PicpKToKKyAgICAgICAgICAgICAgICBsYXN0Y21wID0gaVswOjJdCisgICAgICAgICAgICAgICAgaSA9IGlbMjpdCisgICAgICAgICAgICBlbGlmIGkuc3RhcnRzd2l0aCgoJzwnLCAnPicsICc9JykpOgorICAgICAgICAgICAgICAgIGxhc3RjbXAgPSBpWzA6MV0KKyAgICAgICAgICAgICAgICBpID0gaVsxOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIHVuc3VwcG9ydGVkIGNhc2UhCisgICAgICAgICAgICAgICAgcmFpc2UgVmVyc2lvblN0cmluZ0V4Y2VwdGlvbignSW52YWxpZCB2ZXJzaW9uIHNwZWNpZmljYXRpb24gaW4gIiglcyIgLSBpbnZhbGlkIG9yIG1pc3Npbmcgb3BlcmF0b3InICUgaSkKKyAgICAgICAgICAgICAgICBsYXN0Y21wID0gKGkgb3IgIiIpCisgICAgICAgICAgICAgICAgaSA9ICIiCisgICAgICAgICAgICBpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgaW52ZXJzaW9uOgorICAgICAgICAgICAgaWYgaS5lbmRzd2l0aCgnKScpOgorICAgICAgICAgICAgICAgIGkgPSBpWzotMV0gb3IgIiIKKyAgICAgICAgICAgICAgICBpbnZlcnNpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIGxhc3R2ZXIgYW5kIGk6CisgICAgICAgICAgICAgICAgICAgIGxhc3R2ZXIgKz0gIiAiCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgIGxhc3R2ZXIgKz0gaQorICAgICAgICAgICAgICAgIGlmIGxhc3RkZXAgbm90IGluIHI6CisgICAgICAgICAgICAgICAgICAgIHJbbGFzdGRlcF0gPSBbXQorICAgICAgICAgICAgICAgIHJbbGFzdGRlcF0uYXBwZW5kKGxhc3RjbXAgKyAiICIgKyBsYXN0dmVyKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjaWYgbm90IGludmVyc2lvbjoKKyAgICAgICAgbGFzdGRlcCA9IGkKKyAgICAgICAgbGFzdHZlciA9ICIiCisgICAgICAgIGxhc3RjbXAgPSAiIgorICAgICAgICBpZiBub3QgKGkgaW4gciBhbmQgcltpXSk6CisgICAgICAgICAgICByW2xhc3RkZXBdID0gW10KKworICAgIHJldHVybiByCisKK2RlZiBleHBsb2RlX2RlcF92ZXJzaW9ucyhzKToKKyAgICByID0gZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHMpCisgICAgZm9yIGQgaW4gcjoKKyAgICAgICAgaWYgbm90IHJbZF06CisgICAgICAgICAgICByW2RdID0gTm9uZQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGVuKHJbZF0pID4gMToKKyAgICAgICAgICAgIGJiLndhcm4oImV4cGxvZGVfZGVwX3ZlcnNpb25zKCk6IEl0ZW0gJXMgYXBwZWFyZWQgaW4gZGVwZW5kZW5jeSBzdHJpbmcgJyVzJyBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuICBleHBsb2RlX2RlcF92ZXJzaW9ucyBjYW5ub3QgY29wZSB3aXRoIHRoaXMuIiAlIChkLCBzKSkKKyAgICAgICAgcltkXSA9IHJbZF1bMF0KKyAgICByZXR1cm4gcgorCitkZWYgam9pbl9kZXBzKGRlcHMsIGNvbW1hc2VwPVRydWUpOgorICAgICIiIgorICAgIFRha2UgdGhlIHJlc3VsdCBmcm9tIGV4cGxvZGVfZGVwX3ZlcnNpb25zIGFuZCBnZW5lcmF0ZSBhIGRlcGVuZGVuY3kgc3RyaW5nCisgICAgIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGlmIGRlcHNbZGVwXToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVwc1tkZXBdLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmb3IgdiBpbiBkZXBzW2RlcF06CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVwICsgIiAoIiArIHYgKyAiKSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVwICsgIiAoIiArIGRlcHNbZGVwXSArICIpIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVwKQorICAgIGlmIGNvbW1hc2VwOgorICAgICAgICByZXR1cm4gIiwgIi5qb2luKHJlc3VsdCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocmVzdWx0KQorCitkZWYgX3ByaW50X3RyYWNlKGJvZHksIGxpbmUpOgorICAgICIiIgorICAgIFByaW50IHRoZSBFbnZpcm9ubWVudCBvZiBhIFRleHQgQm9keQorICAgICIiIgorICAgIGVycm9yID0gW10KKyAgICAjIHByaW50IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgbWV0aG9kCisgICAgbWluX2xpbmUgPSBtYXgoMSwgbGluZS00KQorICAgIG1heF9saW5lID0gbWluKGxpbmUgKyA0LCBsZW4oYm9keSkpCisgICAgZm9yIGkgaW4gcmFuZ2UobWluX2xpbmUsIG1heF9saW5lICsgMSk6CisgICAgICAgIGlmIGxpbmUgPT0gaToKKyAgICAgICAgICAgIGVycm9yLmFwcGVuZCgnICoqKiAlLjRkOiVzJyAlIChpLCBib2R5W2ktMV0ucnN0cmlwKCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCcgICAgICUuNGQ6JXMnICUgKGksIGJvZHlbaS0xXS5yc3RyaXAoKSkpCisgICAgcmV0dXJuIGVycm9yCisKK2RlZiBiZXR0ZXJfY29tcGlsZSh0ZXh0LCBmaWxlLCByZWFsZmlsZSwgbW9kZSA9ICJleGVjIik6CisgICAgIiIiCisgICAgQSBiZXR0ZXIgY29tcGlsZSBtZXRob2QuIFRoaXMgbWV0aG9kCisgICAgd2lsbCBwcmludCB0aGUgb2ZmZW5kaW5nIGxpbmVzLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUodGV4dCwgZmlsZSwgbW9kZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGVycm9yID0gW10KKyAgICAgICAgIyBzcGxpdCB0aGUgdGV4dCBpbnRvIGxpbmVzIGFnYWluCisgICAgICAgIGJvZHkgPSB0ZXh0LnNwbGl0KCdcbicpCisgICAgICAgIGVycm9yLmFwcGVuZCgiRXJyb3IgaW4gY29tcGlsaW5nIHB5dGhvbiBmdW5jdGlvbiBpbiAlczpcbiIgJSByZWFsZmlsZSkKKyAgICAgICAgaWYgZS5saW5lbm86CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIlRoZSBjb2RlIGxpbmVzIHJlc3VsdGluZyBpbiB0aGlzIGVycm9yIHdlcmU6IikKKyAgICAgICAgICAgIGVycm9yLmV4dGVuZChfcHJpbnRfdHJhY2UoYm9keSwgZS5saW5lbm8pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXJyb3IuYXBwZW5kKCJUaGUgZnVuY3Rpb24gY2F1c2luZyB0aGlzIGVycm9yIHdhczoiKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gYm9keToKKyAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQobGluZSkKKyAgICAgICAgZXJyb3IuYXBwZW5kKCIlczogJXMiICUgKGUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpKQorCisgICAgICAgIGxvZ2dlci5lcnJvcigiXG4iLmpvaW4oZXJyb3IpKQorCisgICAgICAgIGUgPSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oZSkKKyAgICAgICAgcmFpc2UgZQorCitkZWYgX3ByaW50X2V4Y2VwdGlvbih0LCB2YWx1ZSwgdGIsIHJlYWxmaWxlLCB0ZXh0LCBjb250ZXh0KToKKyAgICBlcnJvciA9IFtdCisgICAgdHJ5OgorICAgICAgICBleGNlcHRpb24gPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHQsIHZhbHVlKQorICAgICAgICBlcnJvci5hcHBlbmQoJ0Vycm9yIGV4ZWN1dGluZyBhIHB5dGhvbiBmdW5jdGlvbiBpbiAlczpcbicgJSByZWFsZmlsZSkKKworICAgICAgICAjIFN0cmlwICd1cycgZnJvbSB0aGUgc3RhY2sgKGJldHRlcl9leGVjIGNhbGwpCisgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgICAgIHRleHRhcnJheSA9IHRleHQuc3BsaXQoJ1xuJykKKworICAgICAgICBsaW5lZmFpbGVkID0gdGIudGJfbGluZW5vCisKKyAgICAgICAgdGJleHRyYWN0ID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIodGIpCisgICAgICAgIHRiZm9ybWF0ID0gdHJhY2ViYWNrLmZvcm1hdF9saXN0KHRiZXh0cmFjdCkKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJUaGUgc3RhY2sgdHJhY2Ugb2YgcHl0aG9uIGNhbGxzIHRoYXQgcmVzdWx0ZWQgaW4gdGhpcyBleGNlcHRpb24vZmFpbHVyZSB3YXM6IikKKyAgICAgICAgZXJyb3IuYXBwZW5kKCJGaWxlOiAnJXMnLCBsaW5lbm86ICVzLCBmdW5jdGlvbjogJXMiICUgKHRiZXh0cmFjdFswXVswXSwgdGJleHRyYWN0WzBdWzFdLCB0YmV4dHJhY3RbMF1bMl0pKQorICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHRhcnJheSwgbGluZWZhaWxlZCkpCisKKyAgICAgICAgIyBTZWUgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uIHdlIGNvbnN0cnVjdGVkIGFuZCBoYXMgY2FsbHMgYmFjayBpbnRvIG90aGVyIGZ1bmN0aW9ucyBpbgorICAgICAgICAjICJ0ZXh0Ii4gSWYgc28sIHRyeSBhbmQgaW1wcm92ZSB0aGUgY29udGV4dCBvZiB0aGUgZXJyb3IgYnkgZGl2aW5nIGRvd24gdGhlIHRyYWNlCisgICAgICAgIGxldmVsID0gMAorICAgICAgICBuZXh0dGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHdoaWxlIG5leHR0YiBpcyBub3QgTm9uZSBhbmQgKGxldmVsKzEpIDwgbGVuKHRiZXh0cmFjdCk6CisgICAgICAgICAgICBlcnJvci5hcHBlbmQoIkZpbGU6ICclcycsIGxpbmVubzogJXMsIGZ1bmN0aW9uOiAlcyIgJSAodGJleHRyYWN0W2xldmVsKzFdWzBdLCB0YmV4dHJhY3RbbGV2ZWwrMV1bMV0sIHRiZXh0cmFjdFtsZXZlbCsxXVsyXSkpCisgICAgICAgICAgICBpZiB0YmV4dHJhY3RbbGV2ZWxdWzBdID09IHRiZXh0cmFjdFtsZXZlbCsxXVswXSBhbmQgdGJleHRyYWN0W2xldmVsKzFdWzJdID09IHRiZXh0cmFjdFtsZXZlbF1bMF06CisgICAgICAgICAgICAgICAgIyBUaGUgY29kZSB3YXMgcG9zc2libHkgaW4gdGhlIHN0cmluZyB3ZSBjb21waWxlZCBvdXJzZWx2ZXMKKyAgICAgICAgICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHRhcnJheSwgdGJleHRyYWN0W2xldmVsKzFdWzFdKSkKKyAgICAgICAgICAgIGVsaWYgdGJleHRyYWN0W2xldmVsKzFdWzBdLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgaW4gYSBmaWxlLCB0cnkgYW5kIGxvYWQgaXQKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbih0YmV4dHJhY3RbbGV2ZWwrMV1bMF0sICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5leHRlbmQoX3ByaW50X3RyYWNlKHRleHQsIHRiZXh0cmFjdFtsZXZlbCsxXVsxXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBlcnJvci5hcHBlbmQodGJmb3JtYXRbbGV2ZWwrMV0pCisgICAgICAgICAgICBlbGlmICJkIiBpbiBjb250ZXh0IGFuZCB0YmV4dHJhY3RbbGV2ZWwrMV1bMl06CisgICAgICAgICAgICAgICAgIyBUcnkgYW5kIGZpbmQgdGhlIGNvZGUgaW4gdGhlIGRhdGFzdG9yZSBiYXNlZCBvbiB0aGUgZnVuY3Rpb25uYW1lCisgICAgICAgICAgICAgICAgZCA9IGNvbnRleHRbImQiXQorICAgICAgICAgICAgICAgIGZ1bmN0aW9ubmFtZSA9IHRiZXh0cmFjdFtsZXZlbCsxXVsyXQorICAgICAgICAgICAgICAgIHRleHQgPSBkLmdldFZhcihmdW5jdGlvbm5hbWUsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKF9wcmludF90cmFjZSh0ZXh0LnNwbGl0KCdcbicpLCB0YmV4dHJhY3RbbGV2ZWwrMV1bMV0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yLmFwcGVuZCh0YmZvcm1hdFtsZXZlbCsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3IuYXBwZW5kKHRiZm9ybWF0W2xldmVsKzFdKQorICAgICAgICAgICAgbmV4dHRiID0gdGIudGJfbmV4dAorICAgICAgICAgICAgbGV2ZWwgPSBsZXZlbCArIDEKKworICAgICAgICBlcnJvci5hcHBlbmQoIkV4Y2VwdGlvbjogJXMiICUgJycuam9pbihleGNlcHRpb24pKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiXG4iLmpvaW4oZXJyb3IpKQorCitkZWYgYmV0dGVyX2V4ZWMoY29kZSwgY29udGV4dCwgdGV4dCA9IE5vbmUsIHJlYWxmaWxlID0gIjxjb2RlPiIpOgorICAgICIiIgorICAgIFNpbWlsaWFyIHRvIGJldHRlcl9jb21waWxlLCBiZXR0ZXJfZXhlYyB3aWxsCisgICAgcHJpbnQgdGhlIGxpbmVzIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUKKyAgICBlcnJvci4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIucGFyc2UKKyAgICBpZiBub3QgdGV4dDoKKyAgICAgICAgdGV4dCA9IGNvZGUKKyAgICBpZiBub3QgaGFzYXR0cihjb2RlLCAiY29fZmlsZW5hbWUiKToKKyAgICAgICAgY29kZSA9IGJldHRlcl9jb21waWxlKGNvZGUsIHJlYWxmaWxlLCByZWFsZmlsZSkKKyAgICB0cnk6CisgICAgICAgIGV4ZWMoY29kZSwgZ2V0X2NvbnRleHQoKSwgY29udGV4dCkKKyAgICBleGNlcHQgKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbiwgYmIucGFyc2UuU2tpcFJlY2lwZSwgYmIuYnVpbGQuRnVuY0ZhaWxlZCwgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvcik6CisgICAgICAgICMgRXJyb3IgYWxyZWFkeSBzaG93biBzbyBwYXNzdGhyb3VnaCwgbm8gbmVlZCBmb3IgdHJhY2ViYWNrCisgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAodCwgdmFsdWUsIHRiKSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9wcmludF9leGNlcHRpb24odCwgdmFsdWUsIHRiLCByZWFsZmlsZSwgdGV4dCwgY29udGV4dCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gaGFuZGxlciBlcnJvcjogJXMiICUgc3RyKGUpKQorCisgICAgICAgIGUgPSBiYi5CQkhhbmRsZWRFeGNlcHRpb24oZSkKKyAgICAgICAgcmFpc2UgZQorCitkZWYgc2ltcGxlX2V4ZWMoY29kZSwgY29udGV4dCk6CisgICAgZXhlYyhjb2RlLCBnZXRfY29udGV4dCgpLCBjb250ZXh0KQorCitkZWYgYmV0dGVyX2V2YWwoc291cmNlLCBsb2NhbHMpOgorICAgIHJldHVybiBldmFsKHNvdXJjZSwgZ2V0X2NvbnRleHQoKSwgbG9jYWxzKQorCitAY29udGV4dG1hbmFnZXIKK2RlZiBmaWxlc2xvY2tlZChmaWxlcyk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIGZvciBsb2NraW5nIGFuZCB1bmxvY2tpbmcgZmlsZSBsb2Nrcy4iIiIKKyAgICBsb2NrcyA9IFtdCisgICAgaWYgZmlsZXM6CisgICAgICAgIGZvciBsb2NrZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrZmlsZSkpCisKKyAgICB5aWVsZAorCisgICAgZm9yIGxvY2sgaW4gbG9ja3M6CisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgdGltZW91dChzZWNvbmRzKToKKyAgICBkZWYgdGltZW91dF9oYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICBwYXNzCisKKyAgICBvcmlnaW5hbF9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgdGltZW91dF9oYW5kbGVyKQorCisgICAgdHJ5OgorICAgICAgICBzaWduYWwuYWxhcm0oc2Vjb25kcykKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb3JpZ2luYWxfaGFuZGxlcikKKworZGVmIGxvY2tmaWxlKG5hbWUsIHNoYXJlZD1GYWxzZSwgcmV0cnk9VHJ1ZSwgYmxvY2s9RmFsc2UpOgorICAgICIiIgorICAgIFVzZSB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgYSBsb2NrIGZpbGUsIHJldHVybiB3aGVuIHRoZSBsb2NrIGhhcworICAgIGJlZW4gYWNxdWlyZWQuIFJldHVybnMgYSB2YXJpYWJsZSB0byBwYXNzIHRvIHVubG9ja2ZpbGUoKS4KKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICByZXRyeTogVHJ1ZSB0byByZS10cnkgbG9ja2luZyBpZiBpdCBmYWlscywgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgIGJsb2NrOiBUcnVlIHRvIGJsb2NrIHVudGlsIHRoZSBsb2NrIHN1Y2NlZWRzLCBGYWxzZSBvdGhlcndpc2UKKyAgICBUaGUgcmV0cnkgYW5kIGJsb2NrIHBhcmFtZXRlcnMgYXJlIGtpbmQgb2YgZXF1aXZhbGVudCB1bmxlc3MgeW91CisgICAgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIHNlbmRpbmcgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MgdG8gYnJlYWsKKyAgICBvdXQgLSBhdCB3aGljaCBwb2ludCB5b3Ugd2FudCBibG9jaz1UcnVlIHJhdGhlciB0aGFuIHJldHJ5PVRydWUuCisgICAgIiIiCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShuYW1lKQorICAgIG1rZGlyaGllcihkaXJuYW1lKQorCisgICAgaWYgbm90IG9zLmFjY2VzcyhkaXJuYW1lLCBvcy5XX09LKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gYWNxdWlyZSBsb2NrICclcycsIGRpcmVjdG9yeSBpcyBub3Qgd3JpdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG9wID0gZmNudGwuTE9DS19FWAorICAgIGlmIHNoYXJlZDoKKyAgICAgICAgb3AgPSBmY250bC5MT0NLX1NICisgICAgaWYgbm90IHJldHJ5IGFuZCBub3QgYmxvY2s6CisgICAgICAgIG9wID0gb3AgfCBmY250bC5MT0NLX05CCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICAjIElmIHdlIGxlYXZlIHRoZSBsb2NrZmlsZXMgbHlpbmcgYXJvdW5kIHRoZXJlIGlzIG5vIHByb2JsZW0KKyAgICAgICAgIyBidXQgd2Ugc2hvdWxkIGNsZWFuIHVwIGFmdGVyIG91cnNlbHZlcy4gVGhpcyBnaXZlcyBwb3RlbnRpYWwKKyAgICAgICAgIyBmb3IgcmFjZXMgdGhvdWdoLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3aGVuIHdlIGFjcXVpcmUgdGhlIGxvY2sKKyAgICAgICAgIyB3ZSBjaGVjayB0aGUgZmlsZSB3ZSBsb2NrZWQgd2FzIHN0aWxsIHRoZSBsb2NrIGZpbGUgb24gZGlzay4KKyAgICAgICAgIyBieSBjb21wYXJpbmcgaW5vZGUgbnVtYmVycy4gSWYgdGhleSBkb24ndCBtYXRjaCBvciB0aGUgbG9ja2ZpbGUKKyAgICAgICAgIyBubyBsb25nZXIgZXhpc3RzLCB3ZSBzdGFydCBhZ2Fpbi4KKworICAgICAgICAjIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgdW5mYWlyIHNpbmNlIHRoZSBsYXN0IHBlcnNvbiB0byByZXF1ZXN0IHRoZQorICAgICAgICAjIGxvY2sgaXMgdGhlIG1vc3QgbGlrZWx5IHRvIHdpbiBpdC4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsZiA9IG9wZW4obmFtZSwgJ2ErJykKKyAgICAgICAgICAgIGZpbGVubyA9IGxmLmZpbGVubygpCisgICAgICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIG9wKQorICAgICAgICAgICAgc3RhdGluZm8gPSBvcy5mc3RhdChmaWxlbm8pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsZi5uYW1lKToKKyAgICAgICAgICAgICAgICBzdGF0aW5mbzIgPSBvcy5zdGF0KGxmLm5hbWUpCisgICAgICAgICAgICAgICAgaWYgc3RhdGluZm8uc3RfaW5vID09IHN0YXRpbmZvMi5zdF9pbm86CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZgorICAgICAgICAgICAgbGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgcmV0cnk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgdW5sb2NrZmlsZShsZik6CisgICAgIiIiCisgICAgVW5sb2NrIGEgZmlsZSBsb2NrZWQgdXNpbmcgbG9ja2ZpbGUoKQorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgIyBJZiB3ZSBoYWQgYSBzaGFyZWQgbG9jaywgd2UgbmVlZCB0byBwcm9tb3RlIHRvIGV4Y2x1c2l2ZSBiZWZvcmUKKyAgICAgICAgIyByZW1vdmluZyB0aGUgbG9ja2ZpbGUuIEF0dGVtcHQgdGhpcywgaWdub3JlIGZhaWx1cmVzLgorICAgICAgICBmY250bC5mbG9jayhsZi5maWxlbm8oKSwgZmNudGwuTE9DS19FWHxmY250bC5MT0NLX05CKQorICAgICAgICBvcy51bmxpbmsobGYubmFtZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZmNudGwuZmxvY2sobGYuZmlsZW5vKCksIGZjbnRsLkxPQ0tfVU4pCisgICAgbGYuY2xvc2UoKQorCitkZWYgbWQ1X2ZpbGUoZmlsZW5hbWUpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTUQ1IGNoZWNrc3VtIG9mIGZpbGVuYW1lLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGhhc2hsaWIKKyAgICAgICAgbSA9IGhhc2hsaWIubWQ1KCkKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBtZDUKKyAgICAgICAgbSA9IG1kNS5uZXcoKQorCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgbS51cGRhdGUobGluZSkKKyAgICByZXR1cm4gbS5oZXhkaWdlc3QoKQorCitkZWYgc2hhMjU2X2ZpbGUoZmlsZW5hbWUpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgaGV4IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgMjU2LWJpdCBTSEEgY2hlY2tzdW0gb2YKKyAgICBmaWxlbmFtZS4gIE9uIFB5dGhvbiAyLjQgdGhpcyB3aWxsIHJldHVybiBOb25lLCBzbyBjYWxsZXJzIHdpbGwgbmVlZCB0bworICAgIGhhbmRsZSB0aGF0IGJ5IGVpdGhlciBza2lwcGluZyBTSEEgY2hlY2tzLCBvciBydW5uaW5nIGEgc3RhbmRhbG9uZSBzaGEyNTZzdW0KKyAgICBiaW5hcnkuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgaGFzaGxpYgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIHMgPSBoYXNobGliLnNoYTI1NigpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgcy51cGRhdGUobGluZSkKKyAgICByZXR1cm4gcy5oZXhkaWdlc3QoKQorCitkZWYgcHJlc2VydmVkX2VudnZhcnNfZXhwb3J0ZWQoKToKKyAgICAiIiJWYXJpYWJsZXMgd2hpY2ggYXJlIHRha2VuIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBwbGFjZWQgaW4gYW5kIGV4cG9ydGVkCisgICAgZnJvbSB0aGUgbWV0YWRhdGEiIiIKKyAgICByZXR1cm4gWworICAgICAgICAnQkJfVEFTS0hBU0gnLAorICAgICAgICAnSE9NRScsCisgICAgICAgICdMT0dOQU1FJywKKyAgICAgICAgJ1BBVEgnLAorICAgICAgICAnUFdEJywKKyAgICAgICAgJ1NIRUxMJywKKyAgICAgICAgJ1RFUk0nLAorICAgICAgICAnVVNFUicsCisgICAgXQorCitkZWYgcHJlc2VydmVkX2VudnZhcnMoKToKKyAgICAiIiJWYXJpYWJsZXMgd2hpY2ggYXJlIHRha2VuIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBwbGFjZWQgaW4gdGhlIG1ldGFkYXRhIiIiCisgICAgdiA9IFsKKyAgICAgICAgJ0JCUEFUSCcsCisgICAgICAgICdCQl9QUkVTRVJWRV9FTlYnLAorICAgICAgICAnQkJfRU5WX1dISVRFTElTVCcsCisgICAgICAgICdCQl9FTlZfRVhUUkFXSElURScsCisgICAgXQorICAgIHJldHVybiB2ICsgcHJlc2VydmVkX2VudnZhcnNfZXhwb3J0ZWQoKQorCitkZWYgZmlsdGVyX2Vudmlyb25tZW50KGdvb2RfdmFycyk6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgcHJpc3RpbmUgZW52aXJvbm1lbnQgZm9yIGJpdGJha2UuIFRoaXMgd2lsbCByZW1vdmUgdmFyaWFibGVzIHRoYXQKKyAgICBhcmUgbm90IGtub3duIGFuZCBtYXkgaW5mbHVlbmNlIHRoZSBidWlsZCBpbiBhIG5lZ2F0aXZlIHdheS4KKyAgICAiIiIKKworICAgIHJlbW92ZWRfdmFycyA9IHt9CisgICAgZm9yIGtleSBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgaWYga2V5IGluIGdvb2RfdmFyczoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcmVtb3ZlZF92YXJzW2tleV0gPSBvcy5lbnZpcm9uW2tleV0KKyAgICAgICAgb3MudW5zZXRlbnYoa2V5KQorICAgICAgICBkZWwgb3MuZW52aXJvbltrZXldCisKKyAgICBpZiByZW1vdmVkX3ZhcnM6CisgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAiUmVtb3ZlZCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudDogJXMiLCAiLCAiLmpvaW4ocmVtb3ZlZF92YXJzLmtleXMoKSkpCisKKyAgICByZXR1cm4gcmVtb3ZlZF92YXJzCisKK2RlZiBhcHByb3ZlZF92YXJpYWJsZXMoKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgYW5kIHJldHVybiB0aGUgbGlzdCBvZiB3aGl0ZWxpc3RlZCB2YXJpYWJsZXMgd2hpY2ggYXJlIGFwcHJvdmVkCisgICAgdG8gcmVtYWluIGluIHRoZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICBpZiAnQkJfUFJFU0VSVkVfRU5WJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICByZXR1cm4gb3MuZW52aXJvbi5rZXlzKCkKKyAgICBhcHByb3ZlZCA9IFtdCisgICAgaWYgJ0JCX0VOVl9XSElURUxJU1QnIGluIG9zLmVudmlyb246CisgICAgICAgIGFwcHJvdmVkID0gb3MuZW52aXJvblsnQkJfRU5WX1dISVRFTElTVCddLnNwbGl0KCkKKyAgICAgICAgYXBwcm92ZWQuZXh0ZW5kKFsnQkJfRU5WX1dISVRFTElTVCddKQorICAgIGVsc2U6CisgICAgICAgIGFwcHJvdmVkID0gcHJlc2VydmVkX2VudnZhcnMoKQorICAgIGlmICdCQl9FTlZfRVhUUkFXSElURScgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgYXBwcm92ZWQuZXh0ZW5kKG9zLmVudmlyb25bJ0JCX0VOVl9FWFRSQVdISVRFJ10uc3BsaXQoKSkKKyAgICAgICAgaWYgJ0JCX0VOVl9FWFRSQVdISVRFJyBub3QgaW4gYXBwcm92ZWQ6CisgICAgICAgICAgICBhcHByb3ZlZC5leHRlbmQoWydCQl9FTlZfRVhUUkFXSElURSddKQorICAgIHJldHVybiBhcHByb3ZlZAorCitkZWYgY2xlYW5fZW52aXJvbm1lbnQoKToKKyAgICAiIiIKKyAgICBDbGVhbiB1cCBhbnkgc3B1cmlvdXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzIHdpbGwgcmVtb3ZlIGFueQorICAgIHZhcmlhYmxlcyB0aGUgdXNlciBoYXNuJ3QgY2hvc2VuIHRvIHByZXNlcnZlLgorICAgICIiIgorICAgIGlmICdCQl9QUkVTRVJWRV9FTlYnIG5vdCBpbiBvcy5lbnZpcm9uOgorICAgICAgICBnb29kX3ZhcnMgPSBhcHByb3ZlZF92YXJpYWJsZXMoKQorICAgICAgICByZXR1cm4gZmlsdGVyX2Vudmlyb25tZW50KGdvb2RfdmFycykKKworICAgIHJldHVybiB7fQorCitkZWYgZW1wdHlfZW52aXJvbm1lbnQoKToKKyAgICAiIiIKKyAgICBSZW1vdmUgYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICBmb3IgcyBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgb3MudW5zZXRlbnYocykKKyAgICAgICAgZGVsIG9zLmVudmlyb25bc10KKworZGVmIGJ1aWxkX2Vudmlyb25tZW50KGQpOgorICAgICIiIgorICAgIEJ1aWxkIGFuIGVudmlyb25tZW50IGZyb20gYWxsIGV4cG9ydGVkIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGZvciB2YXIgaW4gYmIuZGF0YS5rZXlzKGQpOgorICAgICAgICBleHBvcnQgPSBkLmdldFZhckZsYWcodmFyLCAiZXhwb3J0IikKKyAgICAgICAgaWYgZXhwb3J0OgorICAgICAgICAgICAgb3MuZW52aXJvblt2YXJdID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorCitkZWYgX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aChwYXRoKToKKyAgICAiIiIKKyAgICBCYXNpYyBzYWZlZ3VhcmQgYWdhaW5zdCByZWN1cnNpdmVseSBkZWxldGluZyBzb21ldGhpbmcgd2Ugc2hvdWxkbid0LiBJZiBpdCByZXR1cm5zIFRydWUsCisgICAgdGhlIGNhbGxlciBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggYW4gYXBwcm9wcmlhdGUgbWVzc2FnZS4KKyAgICBOT1RFOiBUaGlzIGlzIE5PVCBtZWFudCB0byBiZSBhIHNlY3VyaXR5IG1lY2hhbmlzbSAtIGp1c3QgYSBndWFyZCBhZ2FpbnN0IHNpbGx5IG1pc3Rha2VzCisgICAgd2l0aCBwb3RlbnRpYWxseSBkaXNhc3Ryb3VzIHJlc3VsdHMuCisgICAgIiIiCisgICAgZXh0cmEgPSAnJworICAgICMgSE9NRSBtaWdodCBub3QgYmUgL2hvbWUvc29tZXRoaW5nLCBzbyBpbiBjYXNlIHdlIGNhbiBnZXQgaXQsIGNoZWNrIGFnYWluc3QgaXQKKyAgICBob21lZGlyID0gb3MuZW52aXJvbi5nZXQoJ0hPTUUnLCAnJykKKyAgICBpZiBob21lZGlyOgorICAgICAgICBleHRyYSA9ICd8JXMnICUgaG9tZWRpcgorICAgIGlmIHJlLm1hdGNoKCcoL3wvL3wvaG9tZXwvaG9tZS9bXi9dKiVzKSQnICUgZXh0cmEsIG9zLnBhdGguYWJzcGF0aChwYXRoKSk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiByZW1vdmUocGF0aCwgcmVjdXJzZT1GYWxzZSk6CisgICAgIiIiRXF1aXZhbGVudCB0byBybSAtZiBvciBybSAtcmYiIiIKKyAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgcmV0dXJuCisgICAgaWYgcmVjdXJzZToKKyAgICAgICAgZm9yIG5hbWUgaW4gZ2xvYi5nbG9iKHBhdGgpOgorICAgICAgICAgICAgaWYgX2NoZWNrX3Vuc2FmZV9kZWxldGVfcGF0aChwYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2JiLnV0aWxzLnJlbW92ZTogY2FsbGVkIHdpdGggZGFuZ2Vyb3VzIHBhdGggIiVzIiBhbmQgcmVjdXJzZT1UcnVlLCByZWZ1c2luZyB0byBkZWxldGUhJyAlIHBhdGgpCisgICAgICAgICMgc2h1dGlsLnJtdHJlZShuYW1lKSB3b3VsZCBiZSBpZGVhbCBidXQgaXRzIHRvbyBzbG93CisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbJ3JtJywgJy1yZiddICsgZ2xvYi5nbG9iKHBhdGgpKQorICAgICAgICByZXR1cm4KKyAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBwcnVuZWRpcih0b3BkaXIpOgorICAgICMgRGVsZXRlIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhlIGRpcmVjdG9yeSBuYW1lZCBpbiAndG9wZGlyJy4KKyAgICAjIENBVVRJT046ICBUaGlzIGlzIGRhbmdlcm91cyEKKyAgICBpZiBfY2hlY2tfdW5zYWZlX2RlbGV0ZV9wYXRoKHRvcGRpcik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignYmIudXRpbHMucHJ1bmVkaXI6IGNhbGxlZCB3aXRoIGRhbmdlcm91cyBwYXRoICIlcyIsIHJlZnVzaW5nIHRvIGRlbGV0ZSEnICUgdG9wZGlyKQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpciwgdG9wZG93biA9IEZhbHNlKToKKyAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgb3Mucm1kaXIodG9wZGlyKQorCisjCisjIENvdWxkIGFsc28gdXNlIHJldHVybiByZS5jb21waWxlKCIoJXMpIiAlICJ8Ii5qb2luKG1hcChyZS5lc2NhcGUsIHN1ZmZpeGVzKSkpLnN1YihsYW1iZGEgbW86ICIiLCB2YXIpCisjIGJ1dCB0aGF0cyBwb3NzaWJseSBpbnNhbmUgYW5kIHN1ZmZpeGVzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHNtYWxsCisjCitkZWYgcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgICMgU2VlIGlmIHZhciBlbmRzIHdpdGggYW55IG9mIHRoZSBzdWZmaXhlcyBsaXN0ZWQgYW5kCisgICAgIyByZW1vdmUgaXQgaWYgZm91bmQKKyAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICBpZiB2YXIuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiB2YXIucmVwbGFjZShzdWZmaXgsICIiKQorICAgIHJldHVybiB2YXIKKworZGVmIG1rZGlyaGllcihkaXJlY3RvcnkpOgorICAgICIiIkNyZWF0ZSBhIGRpcmVjdG9yeSBsaWtlICdta2RpciAtcCcsIGJ1dCBkb2VzIG5vdCBjb21wbGFpbiBpZgorICAgIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBsaWtlIG9zLm1ha2VkaXJzCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGRpcmVjdG9yeSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGUKKworZGVmIG1vdmVmaWxlKHNyYywgZGVzdCwgbmV3bXRpbWUgPSBOb25lLCBzc3RhdCA9IE5vbmUpOgorICAgICIiIk1vdmVzIGEgZmlsZSBmcm9tIHNyYyB0byBkZXN0LCBwcmVzZXJ2aW5nIGFsbCBwZXJtaXNzaW9ucyBhbmQKKyAgICBhdHRyaWJ1dGVzOyBtdGltZSB3aWxsIGJlIHByZXNlcnZlZCBldmVuIHdoZW4gbW92aW5nIGFjcm9zcworICAgIGZpbGVzeXN0ZW1zLiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUuIE1vdmUgaXMKKyAgICBhdG9taWMuCisgICAgIiIiCisKKyAgICAjcHJpbnQgIm1vdmVmaWxlKCIgKyBzcmMgKyAiLCIgKyBkZXN0ICsgIiwiICsgc3RyKG5ld210aW1lKSArICIsIiArIHN0cihzc3RhdCkgKyAiKSIKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBzc3RhdDoKKyAgICAgICAgICAgIHNzdGF0ID0gb3MubHN0YXQoc3JjKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBTdGF0aW5nIHNvdXJjZSBmaWxlIGZhaWxlZC4uLiIsIGUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZXN0ZXhpc3RzID0gMQorICAgIHRyeToKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChkZXN0KQorICAgIGV4Y2VwdDoKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChvcy5wYXRoLmRpcm5hbWUoZGVzdCkpCisgICAgICAgIGRlc3RleGlzdHMgPSAwCisKKyAgICBpZiBkZXN0ZXhpc3RzOgorICAgICAgICBpZiBzdGF0LlNfSVNMTksoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICAgICAgZGVzdGV4aXN0cyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBzdGF0LlNfSVNMTksoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGlmIGRlc3RleGlzdHMgYW5kIG5vdCBzdGF0LlNfSVNESVIoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICBvcy5zeW1saW5rKHRhcmdldCwgZGVzdCkKKyAgICAgICAgICAgICNvcy5sY2hvd24oZGVzdCxzc3RhdFtzdGF0LlNUX1VJRF0sc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICAgICAgb3MudW5saW5rKHNyYykKKyAgICAgICAgICAgIHJldHVybiBvcy5sc3RhdChkZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCgibW92ZWZpbGU6IGZhaWxlZCB0byBwcm9wZXJseSBjcmVhdGUgc3ltbGluazoiLCBkZXN0LCAiLT4iLCB0YXJnZXQsIGUpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmVuYW1lZmFpbGVkID0gMQorICAgIGlmIHNzdGF0W3N0YXQuU1RfREVWXSA9PSBkc3RhdFtzdGF0LlNUX0RFVl06CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgb3MucmVuYW1lIG5lZWRzIHRvIGtub3cgdGhlIGRlc3QgcGF0aCBlbmRpbmcgd2l0aCBmaWxlIG5hbWUKKyAgICAgICAgICAgICMgc28gYXBwZW5kIHRoZSBmaWxlIG5hbWUgdG8gYSBwYXRoIG9ubHkgaWYgaXQncyBhIGRpciBzcGVjaWZpZWQKKyAgICAgICAgICAgIHNyY2ZuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCisgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0LCBzcmNmbmFtZSkgaWYgb3MucGF0aC5pc2RpcihkZXN0KSBcCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRlc3QKKyAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3RwYXRoKQorICAgICAgICAgICAgcmVuYW1lZmFpbGVkID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBpZiBlWzBdICE9IGVycm5vLkVYREVWOgorICAgICAgICAgICAgICAgICMgU29tZSByYW5kb20gZXJyb3IuCisgICAgICAgICAgICAgICAgcHJpbnQoIm1vdmVmaWxlOiBGYWlsZWQgdG8gbW92ZSIsIHNyYywgInRvIiwgZGVzdCwgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBJbnZhbGlkIGNyb3NzLWRldmljZS1saW5rICdiaW5kJyBtb3VudGVkIG9yIGFjdHVhbGx5IENyb3NzLURldmljZQorCisgICAgaWYgcmVuYW1lZmFpbGVkOgorICAgICAgICBkaWRjb3B5ID0gMAorICAgICAgICBpZiBzdGF0LlNfSVNSRUcoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICB0cnk6ICMgRm9yIHNhZmV0eSBjb3B5IHRoZW4gbW92ZSBpdCBvdmVyLgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QgKyAiI25ldyIpCisgICAgICAgICAgICAgICAgb3MucmVuYW1lKGRlc3QgKyAiI25ldyIsIGRlc3QpCisgICAgICAgICAgICAgICAgZGlkY29weSA9IDEKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwcmludCgnbW92ZWZpbGU6IGNvcHknLCBzcmMsICctPicsIGRlc3QsICdmYWlsZWQuJywgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3dlIGRvbid0IHlldCBoYW5kbGUgc3BlY2lhbCwgc28gd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gL2Jpbi9tdgorICAgICAgICAgICAgYSA9IGdldHN0YXR1c291dHB1dCgiL2Jpbi9tdiAtZiAiICsgIiciICsgc3JjICsgIicgJyIgKyBkZXN0ICsgIiciKQorICAgICAgICAgICAgaWYgYVswXSAhPSAwOgorICAgICAgICAgICAgICAgIHByaW50KCJtb3ZlZmlsZTogRmFpbGVkIHRvIG1vdmUgc3BlY2lhbCBmaWxlOiIgKyBzcmMgKyAiJyB0byAnIiArIGRlc3QgKyAiJyIsIGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUgIyBmYWlsdXJlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGRpZGNvcHk6CisgICAgICAgICAgICAgICAgb3MubGNob3duKGRlc3QsIHNzdGF0W3N0YXQuU1RfVUlEXSwgc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGRlc3QsIHN0YXQuU19JTU9ERShzc3RhdFtzdGF0LlNUX01PREVdKSkgIyBTdGlja3kgaXMgcmVzZXQgb24gY2hvd24KKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBwcmludCgibW92ZWZpbGU6IEZhaWxlZCB0byBjaG93bi9jaG1vZC91bmxpbmsiLCBkZXN0LCBlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGlmIG5ld210aW1lOgorICAgICAgICBvcy51dGltZShkZXN0LCAobmV3bXRpbWUsIG5ld210aW1lKSkKKyAgICBlbHNlOgorICAgICAgICBvcy51dGltZShkZXN0LCAoc3N0YXRbc3RhdC5TVF9BVElNRV0sIHNzdGF0W3N0YXQuU1RfTVRJTUVdKSkKKyAgICAgICAgbmV3bXRpbWUgPSBzc3RhdFtzdGF0LlNUX01USU1FXQorICAgIHJldHVybiBuZXdtdGltZQorCitkZWYgY29weWZpbGUoc3JjLCBkZXN0LCBuZXdtdGltZSA9IE5vbmUsIHNzdGF0ID0gTm9uZSk6CisgICAgIiIiCisgICAgQ29waWVzIGEgZmlsZSBmcm9tIHNyYyB0byBkZXN0LCBwcmVzZXJ2aW5nIGFsbCBwZXJtaXNzaW9ucyBhbmQKKyAgICBhdHRyaWJ1dGVzOyBtdGltZSB3aWxsIGJlIHByZXNlcnZlZCBldmVuIHdoZW4gbW92aW5nIGFjcm9zcworICAgIGZpbGVzeXN0ZW1zLiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUuCisgICAgIiIiCisgICAgI3ByaW50ICJjb3B5ZmlsZSgiICsgc3JjICsgIiwiICsgZGVzdCArICIsIiArIHN0cihuZXdtdGltZSkgKyAiLCIgKyBzdHIoc3N0YXQpICsgIikiCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgc3N0YXQ6CisgICAgICAgICAgICBzc3RhdCA9IG9zLmxzdGF0KHNyYykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogc3RhdCBvZiAlcyBmYWlsZWQgKCVzKSIgJSAoc3JjLCBlKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZXN0ZXhpc3RzID0gMQorICAgIHRyeToKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChkZXN0KQorICAgIGV4Y2VwdDoKKyAgICAgICAgZHN0YXQgPSBvcy5sc3RhdChvcy5wYXRoLmRpcm5hbWUoZGVzdCkpCisgICAgICAgIGRlc3RleGlzdHMgPSAwCisKKyAgICBpZiBkZXN0ZXhpc3RzOgorICAgICAgICBpZiBzdGF0LlNfSVNMTksoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICAgICAgZGVzdGV4aXN0cyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBzdGF0LlNfSVNMTksoc3N0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGlmIGRlc3RleGlzdHMgYW5kIG5vdCBzdGF0LlNfSVNESVIoZHN0YXRbc3RhdC5TVF9NT0RFXSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgICAgICBvcy5zeW1saW5rKHRhcmdldCwgZGVzdCkKKyAgICAgICAgICAgICNvcy5sY2hvd24oZGVzdCxzc3RhdFtzdGF0LlNUX1VJRF0sc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICAgICAgcmV0dXJuIG9zLmxzdGF0KGRlc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJjb3B5ZmlsZTogZmFpbGVkIHRvIGNyZWF0ZSBzeW1saW5rICVzIHRvICVzICglcykiICUgKGRlc3QsIHRhcmdldCwgZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIHN0YXQuU19JU1JFRyhzc3RhdFtzdGF0LlNUX01PREVdKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3JjY2hvd24gPSBGYWxzZQorICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhzcmMsIG9zLlJfT0spOgorICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiByZWFkIGl0CisgICAgICAgICAgICAgICAgc3JjY2hvd24gPSBUcnVlCisgICAgICAgICAgICAgICAgb3MuY2htb2Qoc3JjLCBzc3RhdFtzdGF0LlNUX01PREVdIHwgc3RhdC5TX0lSVVNSKQorCisgICAgICAgICAgICAjIEZvciBzYWZldHkgY29weSB0aGVuIG1vdmUgaXQgb3Zlci4KKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QgKyAiI25ldyIpCisgICAgICAgICAgICBvcy5yZW5hbWUoZGVzdCArICIjbmV3IiwgZGVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImNvcHlmaWxlOiBjb3B5ICVzIHRvICVzIGZhaWxlZCAoJXMpIiAlIChzcmMsIGRlc3QsIGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzcmNjaG93bjoKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChzcmMsIHNzdGF0W3N0YXQuU1RfTU9ERV0pCisgICAgICAgICAgICAgICAgb3MudXRpbWUoc3JjLCAoc3N0YXRbc3RhdC5TVF9BVElNRV0sIHNzdGF0W3N0YXQuU1RfTVRJTUVdKSkKKworICAgIGVsc2U6CisgICAgICAgICN3ZSBkb24ndCB5ZXQgaGFuZGxlIHNwZWNpYWwsIHNvIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIC9iaW4vbXYKKyAgICAgICAgYSA9IGdldHN0YXR1c291dHB1dCgiL2Jpbi9jcCAtZiAiICsgIiciICsgc3JjICsgIicgJyIgKyBkZXN0ICsgIiciKQorICAgICAgICBpZiBhWzBdICE9IDA6CisgICAgICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGZhaWxlZCB0byBjb3B5IHNwZWNpYWwgZmlsZSAlcyB0byAlcyAoJXMpIiAlIChzcmMsIGRlc3QsIGEpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlICMgZmFpbHVyZQorICAgIHRyeToKKyAgICAgICAgb3MubGNob3duKGRlc3QsIHNzdGF0W3N0YXQuU1RfVUlEXSwgc3N0YXRbc3RhdC5TVF9HSURdKQorICAgICAgICBvcy5jaG1vZChkZXN0LCBzdGF0LlNfSU1PREUoc3N0YXRbc3RhdC5TVF9NT0RFXSkpICMgU3RpY2t5IGlzIHJlc2V0IG9uIGNob3duCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBsb2dnZXIud2FybigiY29weWZpbGU6IGZhaWxlZCB0byBjaG93bi9jaG1vZCAlcyAoJXMpIiAlIChkZXN0LCBlKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBuZXdtdGltZToKKyAgICAgICAgb3MudXRpbWUoZGVzdCwgKG5ld210aW1lLCBuZXdtdGltZSkpCisgICAgZWxzZToKKyAgICAgICAgb3MudXRpbWUoZGVzdCwgKHNzdGF0W3N0YXQuU1RfQVRJTUVdLCBzc3RhdFtzdGF0LlNUX01USU1FXSkpCisgICAgICAgIG5ld210aW1lID0gc3N0YXRbc3RhdC5TVF9NVElNRV0KKyAgICByZXR1cm4gbmV3bXRpbWUKKworZGVmIHdoaWNoKHBhdGgsIGl0ZW0sIGRpcmVjdGlvbiA9IDAsIGhpc3RvcnkgPSBGYWxzZSk6CisgICAgIiIiCisgICAgTG9jYXRlIGEgZmlsZSBpbiBhIFBBVEgKKyAgICAiIiIKKworICAgIGhpc3QgPSBbXQorICAgIHBhdGhzID0gKHBhdGggb3IgIiIpLnNwbGl0KCc6JykKKyAgICBpZiBkaXJlY3Rpb24gIT0gMDoKKyAgICAgICAgcGF0aHMucmV2ZXJzZSgpCisKKyAgICBmb3IgcCBpbiBwYXRoczoKKyAgICAgICAgbmV4dCA9IG9zLnBhdGguam9pbihwLCBpdGVtKQorICAgICAgICBoaXN0LmFwcGVuZChuZXh0KQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuZXh0KToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKG5leHQpOgorICAgICAgICAgICAgICAgIG5leHQgPSBvcy5wYXRoLmFic3BhdGgobmV4dCkKKyAgICAgICAgICAgIGlmIGhpc3Rvcnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQsIGhpc3QKKyAgICAgICAgICAgIHJldHVybiBuZXh0CisKKyAgICBpZiBoaXN0b3J5OgorICAgICAgICByZXR1cm4gIiIsIGhpc3QKKyAgICByZXR1cm4gIiIKKworZGVmIHRvX2Jvb2xlYW4oc3RyaW5nLCBkZWZhdWx0PU5vbmUpOgorICAgIGlmIG5vdCBzdHJpbmc6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBub3JtYWxpemVkID0gc3RyaW5nLmxvd2VyKCkKKyAgICBpZiBub3JtYWxpemVkIGluICgieSIsICJ5ZXMiLCAiMSIsICJ0cnVlIik6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiBub3JtYWxpemVkIGluICgibiIsICJubyIsICIwIiwgImZhbHNlIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIHRvX2Jvb2xlYW46ICVzIiAlIHN0cmluZykKKworZGVmIGNvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICB2YWwgPSBkLmdldFZhcih2YXJpYWJsZSwgVHJ1ZSkKKyAgICBpZiBub3QgdmFsOgorICAgICAgICByZXR1cm4gZmFsc2V2YWx1ZQorICAgIHZhbCA9IHNldCh2YWwuc3BsaXQoKSkKKyAgICBpZiBpc2luc3RhbmNlKGNoZWNrdmFsdWVzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgY2hlY2t2YWx1ZXMgPSBzZXQoY2hlY2t2YWx1ZXMuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcykKKyAgICBpZiBjaGVja3ZhbHVlcy5pc3N1YnNldCh2YWwpOiAKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBjb250YWluc19hbnkodmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHZhbCA9IGQuZ2V0VmFyKHZhcmlhYmxlLCBUcnVlKQorICAgIGlmIG5vdCB2YWw6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisgICAgdmFsID0gc2V0KHZhbC5zcGxpdCgpKQorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICBjaGVja3ZhbHVlcyA9IHNldChjaGVja3ZhbHVlcy5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrdmFsdWVzID0gc2V0KGNoZWNrdmFsdWVzKQorICAgIGlmIGNoZWNrdmFsdWVzICYgdmFsOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGNwdV9jb3VudCgpOgorICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKKworZGVmIG5vbmJsb2NraW5nZmQoZmQpOgorICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkgfCBvcy5PX05PTkJMT0NLKQorCitkZWYgcHJvY2Vzc19wcm9maWxlbG9nKGZuLCBwb3V0ID0gTm9uZSk6CisgICAgIyBFaXRoZXIgY2FsbCB3aXRoIGEgbGlzdCBvZiBmaWxlbmFtZXMgYW5kIHNldCBwb3V0IG9yIGEgZmlsZW5hbWUgYW5kIG9wdGlvbmFsbHkgcG91dC4KKyAgICBpZiBub3QgcG91dDoKKyAgICAgICAgcG91dCA9IGZuICsgJy5wcm9jZXNzZWQnCisgICAgcG91dCA9IG9wZW4ocG91dCwgJ3cnKQorICAgCisgICAgaW1wb3J0IHBzdGF0cworICAgIGlmIGlzaW5zdGFuY2UoZm4sIGxpc3QpOgorICAgICAgICBwID0gcHN0YXRzLlN0YXRzKCpmbiwgc3RyZWFtPXBvdXQpCisgICAgZWxzZToKKyAgICAgICAgcCA9IHBzdGF0cy5TdGF0cyhmbiwgc3RyZWFtPXBvdXQpCisgICAgcC5zb3J0X3N0YXRzKCd0aW1lJykKKyAgICBwLnByaW50X3N0YXRzKCkKKyAgICBwLnByaW50X2NhbGxlcnMoKQorICAgIHAuc29ydF9zdGF0cygnY3VtdWxhdGl2ZScpCisgICAgcC5wcmludF9zdGF0cygpCisKKyAgICBwb3V0LmZsdXNoKCkKKyAgICBwb3V0LmNsb3NlKCkgIAorCisjCisjIFdhcyBwcmVzZW50IHRvIHdvcmsgYXJvdW5kIG11bHRpcHJvY2Vzc2luZyBwb29sIGJ1Z3MgaW4gcHl0aG9uIDwgMi43LjMKKyMKK2RlZiBtdWx0aXByb2Nlc3Npbmdwb29sKCphcmdzLCAqKmt3YXJncyk6CisKKyAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnBvb2wKKyAgICAjaW1wb3J0IG11bHRpcHJvY2Vzc2luZy51dGlsCisgICAgI211bHRpcHJvY2Vzc2luZy51dGlsLmxvZ190b19zdGRlcnIoMTApCisgICAgIyBEZWFsIHdpdGggYSBtdWx0aXByb2Nlc3NpbmcgYnVnIHdoZXJlIHNpZ25hbHMgdG8gdGhlIHByb2Nlc3NlcyB3b3VsZCBiZSBkZWxheWVkIHVudGlsIHRoZSB3b3JrCisgICAgIyBjb21wbGV0ZXMuIFB1dHRpbmcgaW4gYSB0aW1lb3V0IG1lYW5zIHRoZSBzaWduYWxzIChsaWtlIFNJR0lOVC9TSUdURVJNKSBnZXQgcHJvY2Vzc2VkLgorICAgIGRlZiB3cmFwcGVyKGZ1bmMpOgorICAgICAgICBkZWYgd3JhcChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoc2VsZiwgdGltZW91dD10aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAxZTEwMCkKKyAgICAgICAgcmV0dXJuIHdyYXAKKyAgICBtdWx0aXByb2Nlc3NpbmcucG9vbC5JTWFwSXRlcmF0b3IubmV4dCA9IHdyYXBwZXIobXVsdGlwcm9jZXNzaW5nLnBvb2wuSU1hcEl0ZXJhdG9yLm5leHQpCisKKyAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLlBvb2woKmFyZ3MsICoqa3dhcmdzKQorCitkZWYgZXhlY19mbGF0X3B5dGhvbl9mdW5jKGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgIiIiRXhlY3V0ZSBhIGZsYXQgcHl0aG9uIGZ1bmN0aW9uIChkZWZpbmVkIHdpdGggZGVmIGZ1bmNuYW1lKGFyZ3MpOi4uLikiIiIKKyAgICAjIFByZXBhcmUgYSBzbWFsbCBwaWVjZSBvZiBweXRob24gY29kZSB3aGljaCBjYWxscyB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uCisgICAgIyBUbyBkbyB0aGlzIHdlIG5lZWQgdG8gcHJlcGFyZSB0d28gdGhpbmdzIC0gYSBzZXQgb2YgdmFyaWFibGVzIHdlIGNhbiB1c2UgdG8gcGFzcworICAgICMgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYW5kIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBmb3IKKyAgICAjIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQKKyAgICBjb250ZXh0ID0ge30KKyAgICBmdW5jYXJncyA9IFtdCisgICAgIyBIYW5kbGUgdW5uYW1lZCBhcmd1bWVudHMKKyAgICBhaWR4ID0gMQorICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgYXJnbmFtZSA9ICdhcmdfJXMnICUgYWlkeAorICAgICAgICBjb250ZXh0W2FyZ25hbWVdID0gYXJnCisgICAgICAgIGZ1bmNhcmdzLmFwcGVuZChhcmduYW1lKQorICAgICAgICBhaWR4ICs9IDEKKyAgICAjIEhhbmRsZSBrZXl3b3JkIGFyZ3VtZW50cworICAgIGNvbnRleHQudXBkYXRlKGt3YXJncykKKyAgICBmdW5jYXJncy5leHRlbmQoWyclcz0lcycgJSAoYXJnLCBhcmcpIGZvciBhcmcgaW4ga3dhcmdzLml0ZXJrZXlzKCldKQorICAgIGNvZGUgPSAncmV0dmFsID0gJXMoJXMpJyAlIChmdW5jLCAnLCAnLmpvaW4oZnVuY2FyZ3MpKQorICAgIGNvbXAgPSBiYi51dGlscy5iZXR0ZXJfY29tcGlsZShjb2RlLCAnPHN0cmluZz4nLCAnPHN0cmluZz4nKQorICAgIGJiLnV0aWxzLmJldHRlcl9leGVjKGNvbXAsIGNvbnRleHQsIGNvZGUsICc8c3RyaW5nPicpCisgICAgcmV0dXJuIGNvbnRleHRbJ3JldHZhbCddCisKK2RlZiBlZGl0X21ldGFkYXRhKG1ldGFfbGluZXMsIHZhcmlhYmxlcywgdmFyZnVuYywgbWF0Y2hfb3ZlcnJpZGVzPUZhbHNlKToKKyAgICAiIiJFZGl0IGxpbmVzIGZyb20gYSByZWNpcGUgb3IgY29uZmlnIGZpbGUgYW5kIG1vZGlmeSBvbmUgb3IgbW9yZQorICAgIHNwZWNpZmllZCB2YXJpYWJsZSB2YWx1ZXMgc2V0IGluIHRoZSBmaWxlIHVzaW5nIGEgc3BlY2lmaWVkIGNhbGxiYWNrCisgICAgZnVuY3Rpb24uIExpbmVzIGFyZSBleHBlY3RlZCB0byBoYXZlIHRyYWlsaW5nIG5ld2xpbmVzLgorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIG1ldGFfbGluZXM6IGxpbmVzIGZyb20gdGhlIGZpbGU7IGNhbiBiZSBhIGxpc3Qgb3IgYW4gaXRlcmFibGUKKyAgICAgICAgICAgIChlLmcuIGZpbGUgcG9pbnRlcikKKyAgICAgICAgdmFyaWFibGVzOiBhIGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMgdG8gbG9vayBmb3IuIEZ1bmN0aW9ucworICAgICAgICAgICAgbWF5IGFsc28gYmUgc3BlY2lmaWVkLCBidXQgbXVzdCBiZSBzcGVjaWZpZWQgd2l0aCAnKCknIGF0CisgICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBuYW1lLiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZQorICAgICAgICAgICAgYW55IGludHJpbnNpYyB1bmRlcnN0YW5kaW5nIG9mIF9hcHBlbmQsIF9wcmVwZW5kLCBfcmVtb3ZlLAorICAgICAgICAgICAgb3Igb3ZlcnJpZGVzLCBzbyB0aGVzZSBhcmUgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBuYW1lLgorICAgICAgICAgICAgVGhlc2UgdmFsdWVzIGdvIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24sIHNvIHJlZ3VsYXIKKyAgICAgICAgICAgIGV4cHJlc3Npb24gc3ludGF4IGlzIGFsbG93ZWQuCisgICAgICAgIHZhcmZ1bmM6IGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZXZlcnkgdmFyaWFibGUgbWF0Y2hpbmcKKyAgICAgICAgICAgIG9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdmFyaWFibGVzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uCisgICAgICAgICAgICBzaG91bGQgdGFrZSBmb3VyIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICB2YXJuYW1lOiBuYW1lIG9mIHZhcmlhYmxlIG1hdGNoZWQKKyAgICAgICAgICAgICAgICBvcmlndmFsdWU6IGN1cnJlbnQgdmFsdWUgaW4gZmlsZQorICAgICAgICAgICAgICAgIG9wOiB0aGUgb3BlcmF0b3IgKGUuZy4gJys9JykKKyAgICAgICAgICAgICAgICBuZXdsaW5lczogbGlzdCBvZiBsaW5lcyB1cCB0byB0aGlzIHBvaW50LiBZb3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGlzIHRvIHByZXBlbmQgbGluZXMgYmVmb3JlIHRoaXMgdmFyaWFibGUgc2V0dGluZworICAgICAgICAgICAgICAgICAgICBpZiB5b3Ugd2lzaC4KKyAgICAgICAgICAgIGFuZCBzaG91bGQgcmV0dXJuIGEgdGhyZWUtZWxlbWVudCB0dXBsZToKKyAgICAgICAgICAgICAgICBuZXd2YWx1ZTogbmV3IHZhbHVlIHRvIHN1YnN0aXR1dGUgaW4sIG9yIE5vbmUgdG8gZHJvcAorICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgc2V0dGluZyBlbnRpcmVseS4gKElmIHRoZSByZW1vdmFsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgaW4gdHdvIGNvbnNlY3V0aXZlIGJsYW5rIGxpbmVzLCBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGJsYW5rIGxpbmVzIHdpbGwgYWxzbyBiZSBkcm9wcGVkKS4KKyAgICAgICAgICAgICAgICBuZXdvcDogdGhlIG9wZXJhdG9yIHRvIHVzZSAtIGlmIHlvdSBzcGVjaWZ5IE5vbmUgaGVyZSwKKyAgICAgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3aWxsIGJlIHVzZWQuCisgICAgICAgICAgICAgICAgaW5kZW50OiBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBtdWx0aS1saW5lIGVudHJpZXMsCisgICAgICAgICAgICAgICAgICAgIG9yIC0xIHRvIGluZGVudCB1cCB0byB0aGUgbGV2ZWwgb2YgdGhlIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgYW5kIG9wZW5pbmcgcXVvdGUsIG9yIGEgc3RyaW5nIHRvIHVzZSBhcyB0aGUgaW5kZW50LgorICAgICAgICAgICAgICAgIG1pbmJyZWFrOiBUcnVlIHRvIGFsbG93IHRoZSBmaXJzdCBlbGVtZW50IG9mIGEKKyAgICAgICAgICAgICAgICAgICAgbXVsdGktbGluZSB2YWx1ZSB0byBjb250aW51ZSBvbiB0aGUgc2FtZSBsaW5lIGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NpZ25tZW50LCBGYWxzZSB0byBpbmRlbnQgYmVmb3JlIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICBlbGVtZW50LgorICAgICAgICBtYXRjaF9vdmVycmlkZXM6IFRydWUgdG8gbWF0Y2ggaXRlbXMgd2l0aCBfb3ZlcnJpZGVzIG9uIHRoZSBlbmQsCisgICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UKKyAgICBSZXR1cm5zIGEgdHVwbGU6CisgICAgICAgIHVwZGF0ZWQ6CisgICAgICAgICAgICBUcnVlIGlmIGNoYW5nZXMgd2VyZSBtYWRlLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgIG5ld2xpbmVzOgorICAgICAgICAgICAgTGluZXMgYWZ0ZXIgcHJvY2Vzc2luZworICAgICIiIgorCisgICAgdmFyX3JlcyA9IHt9CisgICAgaWYgbWF0Y2hfb3ZlcnJpZGVzOgorICAgICAgICBvdmVycmlkZV9yZSA9ICcoX1thLXpBLVowLTktXyQoKXt9XSspPycKKyAgICBlbHNlOgorICAgICAgICBvdmVycmlkZV9yZSA9ICcnCisgICAgZm9yIHZhciBpbiB2YXJpYWJsZXM6CisgICAgICAgIGlmIHZhci5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgIHZhcl9yZXNbdmFyXSA9IHJlLmNvbXBpbGUoJ14oJXMlcylbIFxcdF0qXChbIFxcdF0qXClbIFxcdF0qeycgJSAodmFyWzotMl0ucnN0cmlwKCksIG92ZXJyaWRlX3JlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhcl9yZXNbdmFyXSA9IHJlLmNvbXBpbGUoJ14oJXMlcylbIFxcdF0qWz8rOi5dKj1bKy5dKlsgXFx0XSooWyJcJ10pJyAlICh2YXIsIG92ZXJyaWRlX3JlKSkKKworICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgIHZhcnNldF9zdGFydCA9ICcnCisgICAgdmFybGluZXMgPSBbXQorICAgIG5ld2xpbmVzID0gW10KKyAgICBpbl92YXIgPSBOb25lCisgICAgZnVsbF92YWx1ZSA9ICcnCisgICAgdmFyX2VuZCA9ICcnCisKKyAgICBkZWYgaGFuZGxlX3Zhcl9lbmQoKToKKyAgICAgICAgcHJlcnVuX25ld2xpbmVzID0gbmV3bGluZXNbOl0KKyAgICAgICAgb3AgPSB2YXJzZXRfc3RhcnRbbGVuKGluX3Zhcik6XS5zdHJpcCgpCisgICAgICAgIChuZXd2YWx1ZSwgbmV3b3AsIGluZGVudCwgbWluYnJlYWspID0gdmFyZnVuYyhpbl92YXIsIGZ1bGxfdmFsdWUsIG9wLCBuZXdsaW5lcykKKyAgICAgICAgY2hhbmdlZCA9IChwcmVydW5fbmV3bGluZXMgIT0gbmV3bGluZXMpCisKKyAgICAgICAgaWYgbmV3dmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICMgRHJvcCB0aGUgdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsaWYgbmV3dmFsdWUgIT0gZnVsbF92YWx1ZSBvciAobmV3b3Agbm90IGluIFtOb25lLCBvcF0pOgorICAgICAgICAgICAgaWYgbmV3b3Agbm90IGluIFtOb25lLCBvcF06CisgICAgICAgICAgICAgICAgIyBDYWxsYmFjayBjaGFuZ2VkIHRoZSBvcGVyYXRvcgorICAgICAgICAgICAgICAgIHZhcnNldF9uZXcgPSAiJXMgJXMiICUgKGluX3ZhciwgbmV3b3ApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhcnNldF9uZXcgPSB2YXJzZXRfc3RhcnQKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpbmRlbnQsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICBpZiBpbmRlbnQgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGluZGVudHNwYyA9ICcgJyAqIChsZW4odmFyc2V0X25ldykgKyAyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGVudHNwYyA9ICcgJyAqIGluZGVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmRlbnRzcGMgPSBpbmRlbnQKKyAgICAgICAgICAgIGlmIGluX3Zhci5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICAjIEEgZnVuY3Rpb24gZGVmaW5pdGlvbgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmV3dmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHtcbiVzJXNcbn1cbicgJSAodmFyc2V0X25ldywgaW5kZW50c3BjLCAoJ1xuJXMnICUgaW5kZW50c3BjKS5qb2luKG5ld3ZhbHVlKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlLnN0YXJ0c3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9ICdcbicgKyBuZXd2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dmFsdWUuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3ZhbHVlICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHslc31cbicgJSAodmFyc2V0X25ldywgbmV3dmFsdWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmV3dmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IGxpc3QgLT4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICIiXG4nICUgdmFyc2V0X25ldykKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBtaW5icmVhazoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmlyc3QgaXRlbSBvbiBmaXJzdCBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4obmV3dmFsdWUpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiJXMiXG4nICUgKHZhcnNldF9uZXcsIG5ld3ZhbHVlWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiJXMgXFxcbicgJSAodmFyc2V0X25ldywgbmV3dmFsdWVbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG5ld3ZhbHVlWzE6XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyVzIFxcXG4nICUgKGluZGVudHNwYywgaXRlbSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyJcbicgJSBpbmRlbnRzcGMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIGl0ZW0gb24gZmlyc3QgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiIFxcXG4nICUgdmFyc2V0X25ldykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMlcyBcXFxuJyAlIChpbmRlbnRzcGMsIGl0ZW0pKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyJcbicgJSBpbmRlbnRzcGMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAiJXMiXG4nICUgKHZhcnNldF9uZXcsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFB1dCB0aGUgb2xkIGxpbmVzIGJhY2sgd2hlcmUgdGhleSB3ZXJlCisgICAgICAgICAgICBuZXdsaW5lcy5leHRlbmQodmFybGluZXMpCisgICAgICAgICAgICAjIElmIG5ld2xpbmVzIHdhcyB0b3VjaGVkIGJ5IHRoZSBmdW5jdGlvbiwgd2UnbGwgbmVlZCB0byByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWQKKworICAgIGNoZWNrc3BjID0gRmFsc2UKKworICAgIGZvciBsaW5lIGluIG1ldGFfbGluZXM6CisgICAgICAgIGlmIGluX3ZhcjoKKyAgICAgICAgICAgIHZhbHVlID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgdmFybGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBpZiBpbl92YXIuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSArPSAnXG4nICsgdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVsbF92YWx1ZSArPSB2YWx1ZVs6LTFdCisgICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aCh2YXJfZW5kKToKKyAgICAgICAgICAgICAgICBpZiBpbl92YXIuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZ1bGxfdmFsdWUuY291bnQoJ3snKSAtIGZ1bGxfdmFsdWUuY291bnQoJ30nKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlID0gZnVsbF92YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgaWYgaGFuZGxlX3Zhcl9lbmQoKToKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzcGMgPSBUcnVlCisgICAgICAgICAgICAgICAgaW5fdmFyID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2tpcCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgKHZhcm5hbWUsIHZhcl9yZSkgaW4gdmFyX3Jlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXMgPSB2YXJfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIGlzZnVuYyA9IHZhcm5hbWUuZW5kc3dpdGgoJygpJykKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWx1ZSA9IGxpbmUuc3BsaXQoJ3snLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2VuZCA9ICd9JworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2VuZCA9IHJlcy5ncm91cHMoKVstMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSBsaW5lLnNwbGl0KHZhcl9lbmQsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhcnNldF9zdGFydCA9IHNwbGl0dmFsdWVbMF0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzcGxpdHZhbHVlWzFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2Z1bmMgYW5kIHZhbHVlLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgICAgIGZ1bGxfdmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICB2YXJsaW5lcyA9IFtsaW5lXQorICAgICAgICAgICAgICAgICAgICBpbl92YXIgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5fdmFyICs9ICcoKScKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUuZW5kc3dpdGgodmFyX2VuZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX3ZhbHVlID0gZnVsbF92YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYW5kbGVfdmFyX2VuZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzcGMgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpbl92YXIgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHNraXAgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3Qgc2tpcDoKKyAgICAgICAgICAgICAgICBpZiBjaGVja3NwYzoKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzcGMgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBuZXdsaW5lc1stMV0gPT0gJ1xuJyBhbmQgbGluZSA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBTcXVhc2ggYmxhbmsgbGluZSBpZiB0aGVyZSBhcmUgdHdvIGNvbnNlY3V0aXZlIGJsYW5rcyBhZnRlciBhIHJlbW92YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuICh1cGRhdGVkLCBuZXdsaW5lcykKKworCitkZWYgZWRpdF9tZXRhZGF0YV9maWxlKG1ldGFfZmlsZSwgdmFyaWFibGVzLCB2YXJmdW5jKToKKyAgICAiIiJFZGl0IGEgcmVjaXBlIG9yIGNvbmZpZyBmaWxlIGFuZCBtb2RpZnkgb25lIG9yIG1vcmUgc3BlY2lmaWVkCisgICAgdmFyaWFibGUgdmFsdWVzIHNldCBpbiB0aGUgZmlsZSB1c2luZyBhIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICBUaGUgZmlsZSBpcyBvbmx5IHdyaXR0ZW4gdG8gaWYgdGhlIHZhbHVlKHMpIGFjdHVhbGx5IGNoYW5nZS4KKyAgICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZmlsZSB2ZXJzaW9uIG9mIGVkaXRfbWV0YWRhdGEoKSwgc2VlIHRoYXQKKyAgICBmdW5jdGlvbidzIGRlc2NyaXB0aW9uIGZvciBwYXJhbWV0ZXIvdXNhZ2UgaW5mb3JtYXRpb24uCisgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBmaWxlIHdhcyB3cml0dGVuIHRvLCBGYWxzZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgd2l0aCBvcGVuKG1ldGFfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAodXBkYXRlZCwgbmV3bGluZXMpID0gZWRpdF9tZXRhZGF0YShmLCB2YXJpYWJsZXMsIHZhcmZ1bmMpCisgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgd2l0aCBvcGVuKG1ldGFfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld2xpbmVzKQorICAgIHJldHVybiB1cGRhdGVkCisKKworZGVmIGVkaXRfYmJsYXllcnNfY29uZihiYmxheWVyc19jb25mLCBhZGQsIHJlbW92ZSk6CisgICAgIiIiRWRpdCBiYmxheWVycy5jb25mLCBhZGRpbmcgYW5kL29yIHJlbW92aW5nIGxheWVycyIiIgorCisgICAgaW1wb3J0IGZubWF0Y2gKKworICAgIGRlZiByZW1vdmVfdHJhaWxpbmdfc2VwKHB0aCk6CisgICAgICAgIGlmIHB0aCBhbmQgcHRoWy0xXSA9PSBvcy5zZXA6CisgICAgICAgICAgICBwdGggPSBwdGhbOi0xXQorICAgICAgICByZXR1cm4gcHRoCisKKyAgICBkZWYgbGF5ZXJsaXN0X3BhcmFtKHZhbHVlKToKKyAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4gW3JlbW92ZV90cmFpbGluZ19zZXAoeCkgZm9yIHggaW4gdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW3JlbW92ZV90cmFpbGluZ19zZXAodmFsdWUpXQorCisgICAgbm90YWRkZWQgPSBbXQorICAgIG5vdHJlbW92ZWQgPSBbXQorCisgICAgYWRkbGF5ZXJzID0gbGF5ZXJsaXN0X3BhcmFtKGFkZCkKKyAgICByZW1vdmVsYXllcnMgPSBsYXllcmxpc3RfcGFyYW0ocmVtb3ZlKQorCisgICAgIyBOZWVkIHRvIHVzZSBhIGxpc3QgaGVyZSBiZWNhdXNlIHdlIGNhbid0IHNldCBub24tbG9jYWwgdmFyaWFibGVzIGZyb20gYSBjYWxsYmFjayBpbiBweXRob24gMi54CisgICAgYmJsYXllcmNhbGxzID0gW10KKworICAgIGRlZiBoYW5kbGVfYmJsYXllcnModmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgorICAgICAgICBiYmxheWVyY2FsbHMuYXBwZW5kKHZhcm5hbWUpCisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBiYmxheWVycyA9IFtyZW1vdmVfdHJhaWxpbmdfc2VwKHgpIGZvciB4IGluIG9yaWd2YWx1ZS5zcGxpdCgpXQorICAgICAgICBpZiByZW1vdmVsYXllcnM6CisgICAgICAgICAgICBmb3IgcmVtb3ZlbGF5ZXIgaW4gcmVtb3ZlbGF5ZXJzOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBsYXllciBpbiBiYmxheWVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGxheWVyLCByZW1vdmVsYXllcik6CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJibGF5ZXJzLnJlbW92ZShsYXllcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGNoZWQ6CisgICAgICAgICAgICAgICAgICAgIG5vdHJlbW92ZWQuYXBwZW5kKHJlbW92ZWxheWVyKQorICAgICAgICBpZiBhZGRsYXllcnM6CisgICAgICAgICAgICBmb3IgYWRkbGF5ZXIgaW4gYWRkbGF5ZXJzOgorICAgICAgICAgICAgICAgIGlmIGFkZGxheWVyIG5vdCBpbiBiYmxheWVyczoKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYmJsYXllcnMuYXBwZW5kKGFkZGxheWVyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5vdGFkZGVkLmFwcGVuZChhZGRsYXllcikKKworICAgICAgICBpZiB1cGRhdGVkOgorICAgICAgICAgICAgcmV0dXJuIChiYmxheWVycywgTm9uZSwgMiwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKG9yaWd2YWx1ZSwgTm9uZSwgMiwgRmFsc2UpCisKKyAgICBlZGl0X21ldGFkYXRhX2ZpbGUoYmJsYXllcnNfY29uZiwgWydCQkxBWUVSUyddLCBoYW5kbGVfYmJsYXllcnMpCisKKyAgICBpZiBub3QgYmJsYXllcmNhbGxzOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byBmaW5kIEJCTEFZRVJTIGluICVzJyAlIGJibGF5ZXJzX2NvbmYpCisKKyAgICByZXR1cm4gKG5vdGFkZGVkLCBub3RyZW1vdmVkKQorCisKK2RlZiBnZXRfZmlsZV9sYXllcihmaWxlbmFtZSwgZCk6CisgICAgIiIiRGV0ZXJtaW5lIHRoZSBjb2xsZWN0aW9uIChhcyBkZWZpbmVkIGJ5IGEgbGF5ZXIncyBsYXllci5jb25mIGZpbGUpIGNvbnRhaW5pbmcgdGhlIHNwZWNpZmllZCBmaWxlIiIiCisgICAgY29sbGVjdGlvbnMgPSAoZC5nZXRWYXIoJ0JCRklMRV9DT0xMRUNUSU9OUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgY29sbGVjdGlvbl9yZXMgPSB7fQorICAgIGZvciBjb2xsZWN0aW9uIGluIGNvbGxlY3Rpb25zOgorICAgICAgICBjb2xsZWN0aW9uX3Jlc1tjb2xsZWN0aW9uXSA9IGQuZ2V0VmFyKCdCQkZJTEVfUEFUVEVSTl8lcycgJSBjb2xsZWN0aW9uLCBUcnVlKSBvciAnJworCisgICAgZGVmIHBhdGhfdG9fbGF5ZXIocGF0aCk6CisgICAgICAgICMgVXNlIGxvbmdlc3QgcGF0aCBzbyB3ZSBoYW5kbGUgbmVzdGVkIGxheWVycworICAgICAgICBtYXRjaGxlbiA9IDAKKyAgICAgICAgbWF0Y2ggPSBOb25lCisgICAgICAgIGZvciBjb2xsZWN0aW9uLCByZWdleCBpbiBjb2xsZWN0aW9uX3Jlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGxlbihyZWdleCkgPiBtYXRjaGxlbiBhbmQgcmUubWF0Y2gocmVnZXgsIHBhdGgpOgorICAgICAgICAgICAgICAgIG1hdGNobGVuID0gbGVuKHJlZ2V4KQorICAgICAgICAgICAgICAgIG1hdGNoID0gY29sbGVjdGlvbgorICAgICAgICByZXR1cm4gbWF0Y2gKKworICAgIHJlc3VsdCA9IE5vbmUKKyAgICBiYmZpbGVzID0gKGQuZ2V0VmFyKCdCQkZJTEVTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBiYmZpbGVzbWF0Y2ggPSBGYWxzZQorICAgIGZvciBiYmZpbGVzZW50cnkgaW4gYmJmaWxlczoKKyAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBiYmZpbGVzZW50cnkpOgorICAgICAgICAgICAgYmJmaWxlc21hdGNoID0gVHJ1ZQorICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF90b19sYXllcihiYmZpbGVzZW50cnkpCisKKyAgICBpZiBub3QgYmJmaWxlc21hdGNoOgorICAgICAgICAjIFByb2JhYmx5IGEgYmJjbGFzcworICAgICAgICByZXN1bHQgPSBwYXRoX3RvX2xheWVyKGZpbGVuYW1lKQorCisgICAgcmV0dXJuIHJlc3VsdAorCisKKyMgQ29uc3RhbnQgdGFrZW4gZnJvbSBodHRwOi8vbGludXguZGllLm5ldC9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKK1BSX1NFVF9QREVBVEhTSUcgPSAxCisKK2NsYXNzIFByQ3RsRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBzaWduYWxfb25fcGFyZW50X2V4aXQoc2lnbmFtZSk6CisgICAgIiIiCisgICAgVHJpZ2dlciBzaWduYW1lIHRvIGJlIHNlbnQgd2hlbiB0aGUgcGFyZW50IHByb2Nlc3MgZGllcworICAgICIiIgorICAgIHNpZ251bSA9IGdldGF0dHIoc2lnbmFsLCBzaWduYW1lKQorICAgICMgaHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzIvcHJjdGwKKyAgICByZXN1bHQgPSBjZGxsWydsaWJjLnNvLjYnXS5wcmN0bChQUl9TRVRfUERFQVRIU0lHLCBzaWdudW0pCisgICAgaWYgcmVzdWx0ICE9IDA6CisgICAgICAgIHJhaXNlIFByQ3RsRXJyb3IoJ3ByY3RsIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJXMnICUgcmVzdWx0KQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYnM0L0FVVEhPUlMudHh0IGIvYml0YmFrZS9saWIvYnM0L0FVVEhPUlMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzhmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvQVVUSE9SUy50eHQKQEAgLTAsMCArMSw0MyBAQAorQmVob2xkLCBtb3J0YWwsIHRoZSBvcmlnaW5zIG9mIEJlYXV0aWZ1bCBTb3VwLi4uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTGVvbmFyZCBSaWNoYXJkc29uIGlzIHRoZSBwcmltYXJ5IHByb2dyYW1tZXIuCisKK0Fhcm9uIERlVm9yZSBpcyBhd2Vzb21lLgorCitNYXJrIFBpbGdyaW0gcHJvdmlkZWQgdGhlIGVuY29kaW5nIGRldGVjdGlvbiBjb2RlIHRoYXQgZm9ybXMgdGhlIGJhc2UKK29mIFVuaWNvZGVEYW1taXQuCisKK1Rob21hcyBLbHV5dmVyIGFuZCBFemlvIE1lbG90dGkgZmluaXNoZWQgdGhlIHdvcmsgb2YgZ2V0dGluZyBCZWF1dGlmdWwKK1NvdXAgNCB3b3JraW5nIHVuZGVyIFB5dGhvbiAzLgorCitTaW1vbiBXaWxsaXNvbiB3cm90ZSBzb3Vwc2VsZWN0LCB3aGljaCB3YXMgdXNlZCB0byBtYWtlIEJlYXV0aWZ1bCBTb3VwCitzdXBwb3J0IENTUyBzZWxlY3RvcnMuCisKK1NhbSBSdWJ5IGhlbHBlZCB3aXRoIGEgbG90IG9mIGVkZ2UgY2FzZXMuCisKK0pvbmF0aGFuIEVsbGlzIHdhcyBhd2FyZGVkIHRoZSBwcmVzdGlnb3VzIEJlYXUgUG90YWdlIEQnT3IgZm9yIGhpcword29yayBpbiBzb2x2aW5nIHRoZSBuZXN0YWJsZSB0YWdzIGNvbnVuZHJ1bS4KKworQW4gaW5jb21wbGV0ZSBsaXN0IG9mIHBlb3BsZSBoYXZlIGNvbnRyaWJ1dGVkIHBhdGNoZXMgdG8gQmVhdXRpZnVsCitTb3VwOgorCisgSXN0dmFuIEFsYmVydCwgQW5kcmV3IExpbiwgQW50aG9ueSBCYXh0ZXIsIEFuZHJldyBCb3lrbywgVG9ueSBDaGFuZywKKyBaZXBoeXIgRmFuZywgRnV6enksIFJvbWFuIEdhdWZtYW4sIFlvbmkgR2lsYWQsIFJpY2hpZSBIaW5kbGUsIFBldGVyaXMKKyBLcnVtaW5zLCBLZW50IEpvaG5zb24sIEJlbiBMYXN0LCBSb2JlcnQgTGVmdHdpY2gsIFN0YWZmYW4gTWFsbWdyZW4sCisgS3NlbmlhIE1hcmFzYW5vdmEsIEpQIE1vaW5zLCBBZGFtIE1vbnNlbiwgSm9obiBOYWdsZSwgIkpvbiIsIEVkCisgT3NraWV3aWN6LCBHcmVnIFBoaWxsaXBzLCBHaWxlcyBSYWRmb3JkLCBBcnRodXIgUnVkb2xwaCwgTWFya28KKyBTYW1hc3R1ciwgSm91bmkgU2VwcORuZW4sIEFsZXhhbmRlciBTY2htb2xjaywgQW5keSBUaGV5ZXJzLCBHbHluCisgV2Vic3RlciwgUGF1bCBXcmlnaHQsIERhbm55IFlvbworCitBbiBpbmNvbXBsZXRlIGxpc3Qgb2YgcGVvcGxlIHdobyBtYWRlIHN1Z2dlc3Rpb25zIG9yIGZvdW5kIGJ1Z3Mgb3IKK2ZvdW5kIHdheXMgdG8gYnJlYWsgQmVhdXRpZnVsIFNvdXA6CisKKyBIYW5ubyBC9mNrLCBNYXR0ZW8gQmVydGluaSwgQ2hyaXMgQ3VydmV5LCBTaW1vbiBDdXNhY2ssIEJydWNlIEVja2VsLAorIE1hdHQgRXJuc3QsIE1pY2hhZWwgRm9vcmQsIFRvbSBIYXJyaXMsIEJpbGwgZGUgaE9yYSwgRG9uYWxkIEhvd2VzLAorIE1hdHQgUGF0dGVyc29uLCBTY290dCBSb2JlcnRzLCBTdGV2ZSBTdHJhc3NtYW5uLCBNaWtlIFdpbGxpYW1zLAorIHdhcmNoaWxkIGF0IHJlZGhvIGRvdCBjb20sIFNhbWkgS3Vpc21hLCBDYXJsb3MgUm9jaGEsIEJvYiBIdXRjaGlzb24sCisgSm9yZW4gTWMsIE1pY2hhbCBNaWd1cnNraSwgSm9obiBLbGV2ZW4sIFRpbSBIZWFuZXksIFRyaXBwIExpbGxleSwgRWQKKyBTdW1tZXJzLCBEZW5uaXMgU3V0Y2gsIENocmlzIFNtaXRoLCBBYXJvbiBTd2VlcF5XIFN3YXJ0eiwgU3R1YXJ0CisgVHVybmVyLCBHcmVnIEVkd2FyZHMsIEtldmluIEogS2FsdXBzb24sIE5pa29zIEtvdXJlbWVub3MsIEFydHVyIGRlCisgU291c2EgUm9jaGEsIFlpY2h1biBXZWksIFBlciBWb2duc2VuCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvQ09QWUlORy50eHQgYi9iaXRiYWtlL2xpYi9iczQvQ09QWUlORy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2OGQxMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JzNC9DT1BZSU5HLnR4dApAQCAtMCwwICsxLDI2IEBACitCZWF1dGlmdWwgU291cCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6CisKKyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMiBMZW9uYXJkIFJpY2hhcmRzb24KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorIFNPRlRXQVJFLCBEQU1NSVQuCisKK0JlYXV0aWZ1bCBTb3VwIGluY29ycG9yYXRlcyBjb2RlIGZyb20gdGhlIGh0bWw1bGliIGxpYnJhcnksIHdoaWNoIGlzCithbHNvIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC9ORVdTLnR4dCBiL2JpdGJha2UvbGliL2JzNC9ORVdTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE2MGEyCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYnM0L05FV1MudHh0CkBAIC0wLDAgKzEsMTA2NiBAQAorPSA0LjMuMiAoMjAxMzEwMDIpID0KKworKiBGaXhlZCBhIGJ1ZyBpbiB3aGljaCBzaG9ydCBVbmljb2RlIGlucHV0IHdhcyBpbXByb3Blcmx5IGVuY29kZWQgdG8KKyAgQVNDSUkgd2hlbiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCBpdCB3YXMgdGhlIG5hbWUgb2YgYSBmaWxlIG9uCisgIGRpc2suIFtidWc9MTIyNzAxNl0KKworKiBGaXhlZCBhIGNyYXNoIHdoZW4gYSBzaG9ydCBpbnB1dCBjb250YWlucyBkYXRhIG5vdCB2YWxpZCBpbgorICBmaWxlbmFtZXMuIFtidWc9MTIzMjYwNF0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBVbmljb2RlIGRhdGEgcHV0IGludG8gVW5pY29kZURhbW1pdCB0bworICByZXR1cm4gTm9uZSBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBkYXRhLiBbYnVnPTEyMTQ5ODNdCisKKyogQ29tYmluZWQgdHdvIHRlc3RzIHRvIHN0b3AgYSBzcHVyaW91cyB0ZXN0IGZhaWx1cmUgd2hlbiB0ZXN0cyBhcmUKKyAgcnVuIGJ5IG5vc2V0ZXN0cy4gW2J1Zz0xMjEyNDQ1XQorCis9IDQuMy4xICgyMDEzMDgxNSkgPQorCisqIEZpeGVkIHlldCBhbm90aGVyIHByb2JsZW0gd2l0aCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyLCBjYXVzZWQgYnkKKyAgaHRtbDVsaWIncyB0ZW5kZW5jeSB0byByZWFycmFuZ2UgdGhlIHRyZWUgZHVyaW5nCisgIHBhcnNpbmcuIFtidWc9MTE4OTI2N10KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgb3B0aW1pemVkIHZlcnNpb24gb2YgZmluZF9hbGwoKSB0bworICByZXR1cm4gbm90aGluZy4gW2J1Zz0xMjEyNjU1XQorCis9IDQuMy4wICgyMDEzMDgxMikgPQorCisqIEluc3RlYWQgb2YgY29udmVydGluZyBpbmNvbWluZyBkYXRhIHRvIFVuaWNvZGUgYW5kIGZlZWRpbmcgaXQgdG8gdGhlCisgIGx4bWwgdHJlZSBidWlsZGVyIGluIGNodW5rcywgQmVhdXRpZnVsIFNvdXAgbm93IG1ha2VzIHN1Y2Nlc3NpdmUKKyAgZ3Vlc3NlcyBhdCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGluY29taW5nIGRhdGEsIGFuZCB0ZWxscyBseG1sIHRvCisgIHBhcnNlIHRoZSBkYXRhIGFzIHRoYXQgZW5jb2RpbmcuIEdpdmluZyBseG1sIG1vcmUgY29udHJvbCBvdmVyIHRoZQorICBwYXJzaW5nIHByb2Nlc3MgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIGF2b2lkcyBhIG51bWJlciBvZiBidWdzIGFuZAorICBpc3N1ZXMgd2l0aCB0aGUgbHhtbCBwYXJzZXIgd2hpY2ggaGFkIHByZXZpb3VzbHkgcmVxdWlyZWQgZWxhYm9yYXRlCisgIHdvcmthcm91bmRzOgorCisgIC0gQW4gaXNzdWUgaW4gd2hpY2ggbHhtbCByZWZ1c2VzIHRvIHBhcnNlIFVuaWNvZGUgc3RyaW5ncyBvbiBzb21lCisgICAgc3lzdGVtcy4gW2J1Zz0xMTgwNTI3XQorCisgIC0gQSByZXR1cm5pbmcgYnVnIHRoYXQgdHJ1bmNhdGVkIGRvY3VtZW50cyBsb25nZXIgdGhhbiBhICh2ZXJ5CisgICAgc21hbGwpIHNpemUuIFtidWc9OTYzODgwXQorCisgIC0gQSByZXR1cm5pbmcgYnVnIGluIHdoaWNoIGV4dHJhIHNwYWNlcyB3ZXJlIGFkZGVkIHRvIGEgZG9jdW1lbnQgaWYKKyAgICB0aGUgZG9jdW1lbnQgZGVmaW5lZCBhIGNoYXJzZXQgb3RoZXIgdGhhbiBVVEYtOC4gW2J1Zz05NzI0NjZdCisKKyAgVGhpcyByZXF1aXJlZCBhIG1ham9yIG92ZXJoYXVsIG9mIHRoZSB0cmVlIGJ1aWxkZXIgYXJjaGl0ZWN0dXJlLiBJZgorICB5b3Ugd3JvdGUgeW91ciBvd24gdHJlZSBidWlsZGVyIGFuZCBkaWRuJ3QgdGVsbCBtZSwgeW91J2xsIG5lZWQgdG8KKyAgbW9kaWZ5IHlvdXIgcHJlcGFyZV9tYXJrdXAoKSBtZXRob2QuCisKKyogVGhlIFVuaWNvZGVEYW1taXQgY29kZSB0aGF0IG1ha2VzIGd1ZXNzZXMgYXQgZW5jb2RpbmdzIGhhcyBiZWVuCisgIHNwbGl0IGludG8gaXRzIG93biBjbGFzcywgRW5jb2RpbmdEZXRlY3Rvci4gQSBsb3Qgb2YgYXBwYXJlbnRseQorICByZWR1bmRhbnQgY29kZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gVW5pY29kZSwgRGFtbWl0LCBhbmQgc29tZQorICB1bmRvY3VtZW50ZWQgZmVhdHVyZXMgaGF2ZSBhbHNvIGJlZW4gcmVtb3ZlZC4KKworKiBCZWF1dGlmdWwgU291cCB3aWxsIGlzc3VlIGEgd2FybmluZyBpZiBpbnN0ZWFkIG9mIG1hcmt1cCB5b3UgcGFzcyBpdAorICBhIFVSTCBvciB0aGUgbmFtZSBvZiBhIGZpbGUgb24gZGlzayAoYSBjb21tb24gYmVnaW5uZXIncyBtaXN0YWtlKS4KKworKiBBIG51bWJlciBvZiBvcHRpbWl6YXRpb25zIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBseG1sIHRyZWUKKyAgYnVpbGRlciBieSBhYm91dCAzMyUsIHRoZSBodG1sLnBhcnNlciB0cmVlIGJ1aWxkZXIgYnkgYWJvdXQgMjAlLCBhbmQKKyAgdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBieSBhYm91dCAxNSUuCisKKyogQWxsIGZpbmRfYWxsIGNhbGxzIHNob3VsZCBub3cgcmV0dXJuIGEgUmVzdWx0U2V0IG9iamVjdC4gUGF0Y2ggYnkKKyAgQWFyb24gRGVWb3JlLiBbYnVnPTExOTQwMzRdCisKKz0gNC4yLjEgKDIwMTMwNTMxKSA9CisKKyogVGhlIGRlZmF1bHQgWE1MIGZvcm1hdHRlciB3aWxsIG5vdyByZXBsYWNlIGFtcGVyc2FuZHMgZXZlbiBpZiB0aGV5CisgIGFwcGVhciB0byBiZSBwYXJ0IG9mIGVudGl0aWVzLiBUaGF0IGlzLCAiJmx0OyIgd2lsbCBiZWNvbWUKKyAgIiZhbXA7bHQ7Ii4gVGhlIG9sZCBjb2RlIHdhcyBsZWZ0IG92ZXIgZnJvbSBCZWF1dGlmdWwgU291cCAzLCB3aGljaAorICBkaWRuJ3QgYWx3YXlzIHR1cm4gZW50aXRpZXMgaW50byBVbmljb2RlIGNoYXJhY3RlcnMuCisKKyAgSWYgeW91IHJlYWxseSB3YW50IHRoZSBvbGQgYmVoYXZpb3IgKG1heWJlIGJlY2F1c2UgeW91IGFkZCBuZXcKKyAgc3RyaW5ncyB0byB0aGUgdHJlZSwgdGhvc2Ugc3RyaW5ncyBpbmNsdWRlIGVudGl0aWVzLCBhbmQgeW91IHdhbnQKKyAgdGhlIGZvcm1hdHRlciB0byBsZWF2ZSB0aGVtIGFsb25lIG9uIG91dHB1dCksIGl0IGNhbiBiZSBmb3VuZCBpbgorICBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygpLiBbYnVnPTExODIxODNdCisKKyogR2F2ZSBuZXdfc3RyaW5nKCkgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIHN1YmNsYXNzZXMgb2YKKyAgTmF2aWdhYmxlU3RyaW5nLiBbYnVnPTExODE5ODZdCisKKyogRml4ZWQgYW5vdGhlciBidWcgYnkgd2hpY2ggdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBjb3VsZCBjcmVhdGUgYQorICBkaXNjb25uZWN0ZWQgdHJlZS4gW2J1Zz0xMTgyMDg5XQorCisqIFRoZSAucHJldmlvdXNfZWxlbWVudCBvZiBhIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGlzIG5vdyBhbHdheXMgTm9uZSwKKyAgbm90IHRoZSBsYXN0IGVsZW1lbnQgdG8gYmUgcGFyc2VkLiBbYnVnPTExODIwODldCisKKyogRml4ZWQgdGVzdCBmYWlsdXJlcyB3aGVuIGx4bWwgaXMgbm90IGluc3RhbGxlZC4gW2J1Zz0xMTgxNTg5XQorCisqIGh0bWw1bGliIG5vdyBzdXBwb3J0cyBQeXRob24gMy4gRml4ZWQgc29tZSBQeXRob24gMi1zcGVjaWZpYworICBjb2RlIGluIHRoZSBodG1sNWxpYiB0ZXN0IHN1aXRlLiBbYnVnPTExODE2MjRdCisKKyogVGhlIGh0bWwucGFyc2VyIHRyZWVidWlsZGVyIGNhbiBub3cgaGFuZGxlIG51bWVyaWMgYXR0cmlidXRlcyBpbgorICB0ZXh0IHdoZW4gdGhlIGhleGlkZWNpbWFsIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBzdGFydHMgd2l0aCBhCisgIGNhcGl0YWwgWC4gUGF0Y2ggYnkgVGltIFNoaXJsZXkuIFtidWc9MTE4NjI0Ml0KKworPSA0LjIuMCAoMjAxMzA1MTQpID0KKworKiBUaGUgVGFnLnNlbGVjdCgpIG1ldGhvZCBub3cgc3VwcG9ydHMgYSBtdWNoIHdpZGVyIHZhcmlldHkgb2YgQ1NTCisgIHNlbGVjdG9ycy4KKworIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGFkamFjZW50IHNpYmxpbmcgY29tYmluYXRvciAoKykgYW5kIHRoZQorICAgZ2VuZXJhbCBzaWJsaW5nIGNvbWJpbmF0b3IgKH4pLiBUZXN0cyBieSAibGlxdWlkZXIiLiBbYnVnPTEwODIxNDRdCisKKyAtIFRoZSBjb21iaW5hdG9ycyAoPiwgKywgYW5kIH4pIGNhbiBub3cgY29tYmluZSB3aXRoIGFueSBzdXBwb3J0ZWQKKyAgIHNlbGVjdG9yLCBub3QganVzdCBvbmUgdGhhdCBzZWxlY3RzIGJhc2VkIG9uIHRhZyBuYW1lLgorCisgLSBBZGRlZCBsaW1pdGVkIHN1cHBvcnQgZm9yIHRoZSAibnRoLW9mLXR5cGUiIHBzZXVkby1jbGFzcy4gQ29kZQorICAgYnkgU3ZlbiBTbG9vdHdlZy4gW2J1Zz0xMTA5OTUyXQorCisqIFRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzIGlzIG5vdyBhbGlhc2VkIHRvICJfcyIgYW5kICJfc291cCIsIG1ha2luZworICBpdCBxdWlja2VyIHRvIHR5cGUgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW4gYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbjoKKworICBmcm9tIGJzNCBpbXBvcnQgX3MKKyAgIG9yCisgIGZyb20gYnM0IGltcG9ydCBfc291cAorCisgIFRoZSBhbGlhcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHNvIGRvbid0IHVzZSB0aGlzIGluIGNvZGUgeW91J3JlCisgIGdvaW5nIHRvIHJ1biBtb3JlIHRoYW4gb25jZS4KKworKiBBZGRlZCB0aGUgJ2RpYWdub3NlJyBzdWJtb2R1bGUsIHdoaWNoIGluY2x1ZGVzIHNldmVyYWwgdXNlZnVsCisgIGZ1bmN0aW9ucyBmb3IgcmVwb3J0aW5nIHByb2JsZW1zIGFuZCBkb2luZyB0ZWNoIHN1cHBvcnQuCisKKyAgLSBkaWFnbm9zZShkYXRhKSB0cmllcyB0aGUgZ2l2ZW4gbWFya3VwIG9uIGV2ZXJ5IGluc3RhbGxlZCBwYXJzZXIsCisgICAgcmVwb3J0aW5nIGV4Y2VwdGlvbnMgYW5kIGRpc3BsYXlpbmcgc3VjY2Vzc2VzLiBJZiBhIHBhcnNlciBpcyBub3QKKyAgICBpbnN0YWxsZWQsIGRpYWdub3NlKCkgbWVudGlvbnMgdGhpcyBmYWN0LgorCisgIC0gbHhtbF90cmFjZShkYXRhLCBodG1sPVRydWUpIHJ1bnMgdGhlIGdpdmVuIG1hcmt1cCB0aHJvdWdoIGx4bWwncworICAgIFhNTCBwYXJzZXIgb3IgSFRNTCBwYXJzZXIsIGFuZCBwcmludHMgb3V0IHRoZSBwYXJzZXIgZXZlbnRzIGFzCisgICAgdGhleSBoYXBwZW4uIFRoaXMgaGVscHMgeW91IHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbgorICAgIHByb2JsZW0gb2NjdXJzIGluIGx4bWwgY29kZSBvciBCZWF1dGlmdWwgU291cCBjb2RlLgorCisgIC0gaHRtbHBhcnNlcl90cmFjZShkYXRhKSBpcyB0aGUgc2FtZSB0aGluZywgYnV0IGZvciBQeXRob24ncworICAgIGJ1aWx0LWluIEhUTUxQYXJzZXIgY2xhc3MuCisKKyogSW4gYW4gSFRNTCBkb2N1bWVudCwgdGhlIGNvbnRlbnRzIG9mIGEgPHNjcmlwdD4gb3IgPHN0eWxlPiB0YWcgd2lsbAorICBubyBsb25nZXIgdW5kZXJnbyBlbnRpdHkgc3Vic3RpdHV0aW9uIGJ5IGRlZmF1bHQuIFhNTCBkb2N1bWVudHMgd29yaworICB0aGUgc2FtZSB3YXkgdGhleSBkaWQgYmVmb3JlLiBbYnVnPTEwODU5NTNdCisKKyogTWV0aG9kcyBsaWtlIGdldF90ZXh0KCkgYW5kIHByb3BlcnRpZXMgbGlrZSAuc3RyaW5ncyBub3cgb25seSBnaXZlCisgIHlvdSBzdHJpbmdzIHRoYXQgYXJlIHZpc2libGUgaW4gdGhlIGRvY3VtZW50LS1ubyBjb21tZW50cyBvcgorICBwcm9jZXNzaW5nIGNvbW1hbmRzLiBbYnVnPTEwNTAxNjRdCisKKyogVGhlIHByZXR0aWZ5KCkgbWV0aG9kIG5vdyBsZWF2ZXMgdGhlIGNvbnRlbnRzIG9mIDxwcmU+IHRhZ3MKKyAgYWxvbmUuIFtidWc9MTA5NTY1NF0KKworKiBGaXggYSBidWcgaW4gdGhlIGh0bWw1bGliIHRyZWVidWlsZGVyIHdoaWNoIHNvbWV0aW1lcyBjcmVhdGVkCisgIGRpc2Nvbm5lY3RlZCB0cmVlcy4gW2J1Zz0xMDM5NTI3XQorCisqIEZpeCBhIGJ1ZyBpbiB0aGUgbHhtbCB0cmVlYnVpbGRlciB3aGljaCBjcmFzaGVkIHdoZW4gYSB0YWcgaW5jbHVkZWQKKyAgYW4gYXR0cmlidXRlIGZyb20gdGhlIHByZWRlZmluZWQgInhtbDoiIG5hbWVzcGFjZS4gW2J1Zz0xMDY1NjE3XQorCisqIEZpeCBhIGJ1ZyBieSB3aGljaCBrZXl3b3JkIGFyZ3VtZW50cyB0byBmaW5kX3BhcmVudCgpIHdlcmUgbm90CisgIGJlaW5nIHBhc3NlZCBvbi4gW2J1Zz0xMTI2NzM0XQorCisqIFN0b3AgYSBjcmFzaCB3aGVuIHVud2lzZWx5IG1lc3Npbmcgd2l0aCBhIHRhZyB0aGF0J3MgYmVlbgorICBkZWNvbXBvc2VkLiBbYnVnPTEwOTc2OTldCisKKyogTm93IHRoYXQgbHhtbCdzIHNlZ2ZhdWx0IG9uIGludmFsaWQgZG9jdHlwZSBoYXMgYmVlbiBmaXhlZCwgZml4ZWQgYQorICBjb3JyZXNwb25kaW5nIHByb2JsZW0gb24gdGhlIEJlYXV0aWZ1bCBTb3VwIGVuZCB0aGF0IHdhcyBwcmV2aW91c2x5CisgIGludmlzaWJsZS4gW2J1Zz05ODQ5MzZdCisKKyogRml4ZWQgYW4gZXhjZXB0aW9uIHdoZW4gYW4gb3ZlcnNwZWNpZmllZCBDU1Mgc2VsZWN0b3IgZGlkbid0IG1hdGNoCisgIGFueXRoaW5nLiBDb2RlIGJ5IFN0ZWZhYW4gTGlwcGVucy4gW2J1Zz0xMTY4MTY3XQorCis9IDQuMS4zICgyMDEyMDgyMCkgPQorCisqIFNraXBwZWQgYSB0ZXN0IHVuZGVyIFB5dGhvbiAyLjYgYW5kIFB5dGhvbiAzLjEgdG8gYXZvaWQgYSBzcHVyaW91cworICB0ZXN0IGZhaWx1cmUgY2F1c2VkIGJ5IHRoZSBsb3VzeSBIVE1MUGFyc2VyIGluIHRob3NlCisgIHZlcnNpb25zLiBbYnVnPTEwMzg1MDNdCisKKyogUmFpc2UgYSBtb3JlIHNwZWNpZmljIGVycm9yIChGZWF0dXJlTm90Rm91bmQpIHdoZW4gYSByZXF1ZXN0ZWQKKyAgcGFyc2VyIG9yIHBhcnNlciBmZWF0dXJlIGlzIG5vdCBpbnN0YWxsZWQuIFJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4gdGhlIHVzZXIgY2FsbHMgaW5zZXJ0X2JlZm9yZSgpIG9yCisgIGluc2VydF9hZnRlcigpIG9uIHRoZSBCZWF1dGlmdWxTb3VwIG9iamVjdCBpdHNlbGYuIFBhdGNoIGJ5IEFhcm9uCisgIERldm9yZS4gW2J1Zz0xMDM4MzAxXQorCis9IDQuMS4yICgyMDEyMDgxNykgPQorCisqIEFzIHBlciBQRVAtOCwgYWxsb3cgc2VhcmNoaW5nIGJ5IENTUyBjbGFzcyB1c2luZyB0aGUgJ2NsYXNzXycKKyAga2V5d29yZCBhcmd1bWVudC4gW2J1Zz0xMDM3NjI0XQorCisqIERpc3BsYXkgbmFtZXNwYWNlIHByZWZpeGVzIGZvciBuYW1lc3BhY2VkIGF0dHJpYnV0ZSBuYW1lcywgaW5zdGVhZCBvZgorICB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWVzIGdpdmVuIGJ5IHRoZSBseG1sIHBhcnNlci4gW2J1Zz0xMDM3NTk3XQorCisqIEZpeGVkIGEgY3Jhc2ggb24gZW5jb2Rpbmcgd2hlbiBhbiBhdHRyaWJ1dGUgbmFtZSBjb250YWluZWQKKyAgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKKyogV2hlbiBzbmlmZmluZyBlbmNvZGluZ3MsIGlmIHRoZSBjY2hhcmRldCBsaWJyYXJ5IGlzIGluc3RhbGxlZCwKKyAgQmVhdXRpZnVsIFNvdXAgdXNlcyBpdCBpbnN0ZWFkIG9mIGNoYXJkZXQuIGNjaGFyZGV0IGlzIG11Y2gKKyAgZmFzdGVyLiBbYnVnPTEwMjA3NDhdCisKKyogVXNlIGxvZ2dpbmcud2FybmluZygpIGluc3RlYWQgb2Ygd2FybmluZy53YXJuKCkgdG8gbm90aWZ5IHRoZSB1c2VyCisgIHRoYXQgY2hhcmFjdGVycyB3ZXJlIHJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQKKyAgQ0hBUkFDVEVSLiBbYnVnPTEwMTM4NjJdCisKKz0gNC4xLjEgKDIwMTIwNzAzKSA9CisKKyogRml4ZWQgYW4gaHRtbDVsaWIgdHJlZSBidWlsZGVyIGNyYXNoIHdoaWNoIGhhcHBlbmVkIHdoZW4gaHRtbDVsaWIKKyAgbW92ZWQgYSB0YWcgd2l0aCBhIG11bHRpdmFsdWVkIGF0dHJpYnV0ZSBmcm9tIG9uZSBwYXJ0IG9mIHRoZSB0cmVlCisgIHRvIGFub3RoZXIuIFtidWc9MTAxOTYwM10KKworKiBDb3JyZWN0bHkgZGlzcGxheSBjbG9zaW5nIHRhZ3Mgd2l0aCBhbiBYTUwgbmFtZXNwYWNlIGRlY2xhcmVkLiBQYXRjaAorICBieSBBbmRyZWFzIEtvc3R5cmthLiBbYnVnPTEwMTk2MzVdCisKKyogRml4ZWQgYSB0eXBvIHRoYXQgbWFkZSBwYXJzaW5nIHNpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4gaXQgc2hvdWxkCisgIGhhdmUgYmVlbiwgYW5kIGFsc28gd2FpdGVkIHRvbyBsb25nIHRvIGNsb3NlIHRhZ3Mgd2l0aCBYTUwKKyAgbmFtZXNwYWNlcy4gW2J1Zz0xMDIwMjY4XQorCisqIGdldF90ZXh0KCkgbm93IHJldHVybnMgYW4gZW1wdHkgVW5pY29kZSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gdGV4dCwKKyAgcmF0aGVyIHRoYW4gYW4gZW1wdHkgYnl0ZXN0cmluZy4gW2J1Zz0xMDIwMzg3XQorCis9IDQuMS4wICgyMDEyMDUyOSkgPQorCisqIEFkZGVkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBmaXhpbmcgV2luZG93cy0xMjUyIGNoYXJhY3RlcnMKKyAgZW1iZWRkZWQgaW4gVVRGLTggZG9jdW1lbnRzLiAoVW5pY29kZURhbW1pdC5kZXR3aW5nbGUoKSkKKworKiBGaXhlZCB0aGUgaGFuZGxpbmcgb2YgJnF1b3Q7IHdpdGggdGhlIGJ1aWx0LWluIHBhcnNlci4gW2J1Zz05OTM4NzFdCisKKyogQ29tbWVudHMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9ucywgYW5kCisgIG1hcmt1cCBkZWNsYXJhdGlvbnMgYXJlIG5vdyB0cmVhdGVkIGFzIHByZWZvcm1hdHRlZCBzdHJpbmdzLCB0aGUgd2F5CisgIENEYXRhIGJsb2NrcyBhcmUuIFtidWc9MTAwMTAyNV0KKworKiBGaXhlZCBhIGJ1ZyB3aXRoIHRoZSBseG1sIHRyZWVidWlsZGVyIHRoYXQgcHJldmVudGVkIHRoZSB1c2VyIGZyb20KKyAgYWRkaW5nIGF0dHJpYnV0ZXMgdG8gYSB0YWcgdGhhdCBkaWRuJ3Qgb3JpZ2luYWxseSBoYXZlCisgIGF0dHJpYnV0ZXMuIFtidWc9MTAwMjM3OF0gVGhhbmtzIHRvIE9saXZlciBCZWF0dGllIGZvciB0aGUgcGF0Y2guCisKKyogRml4ZWQgc29tZSBlZGdlLWNhc2UgYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBpbnNlcnRpbmcgYW4gZWxlbWVudAorICBpbnRvIGEgdGFnIGl0J3MgYWxyZWFkeSBpbnNpZGUsIGFuZCByZXBsYWNpbmcgb25lIG9mIGEgdGFnJ3MKKyAgY2hpbGRyZW4gd2l0aCBhbm90aGVyLiBbYnVnPTk5NzUyOV0KKworKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZWFyY2ggZm9yIGF0dHJpYnV0ZSB2YWx1ZXMgc3BlY2lmaWVkIGluIFVURi04LiBbYnVnPTEwMDM5NzRdCisKKyAgVGhpcyBjYXVzZWQgYSBtYWpvciByZWZhY3RvcmluZyBvZiB0aGUgc2VhcmNoIGNvZGUuIEFsbCB0aGUgdGVzdHMKKyAgcGFzcywgYnV0IGl0J3MgcG9zc2libGUgdGhhdCBzb21lIHNlYXJjaGVzIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5LgorCis9IDQuMC41ICgyMDEyMDQyNykgPQorCisqIEFkZGVkIGEgbmV3IG1ldGhvZCwgd3JhcCgpLCB3aGljaCB3cmFwcyBhbiBlbGVtZW50IGluIGEgdGFnLgorCisqIFJlbmFtZWQgcmVwbGFjZV93aXRoX2NoaWxkcmVuKCkgdG8gdW53cmFwKCksIHdoaWNoIGlzIGVhc2llciB0bworICB1bmRlcnN0YW5kIGFuZCBhbHNvIHRoZSBqUXVlcnkgbmFtZSBvZiB0aGUgZnVuY3Rpb24uCisKKyogTWFkZSBlbmNvZGluZyBzdWJzdGl0dXRpb24gaW4gPG1ldGE+IHRhZ3MgY29tcGxldGVseSB0cmFuc3BhcmVudCAobm8KKyAgbW9yZSAlU09VUC1FTkNPRElORyUpLgorCisqIEZpeGVkIGEgYnVnIGluIGRlY29kaW5nIGRhdGEgdGhhdCBjb250YWluZWQgYSBieXRlLW9yZGVyIG1hcmssIHN1Y2gKKyAgYXMgZGF0YSBlbmNvZGVkIGluIFVURi0xNkxFLiBbYnVnPTk4ODk4MF0KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IG1hZGUgdGhlIEhUTUxQYXJzZXIgdHJlZWJ1aWxkZXIgZ2VuZXJhdGUgWE1MCisgIGRlZmluaXRpb25zIGVuZGluZyB3aXRoIHR3byBxdWVzdGlvbiBtYXJrcyBpbnN0ZWFkIG9mCisgIG9uZS4gW2J1Zz05ODQyNThdCisKKyogVXBvbiBkb2N1bWVudCBnZW5lcmF0aW9uLCBDRGF0YSBvYmplY3RzIGFyZSBubyBsb25nZXIgcnVuIHRocm91Z2gKKyAgdGhlIGZvcm1hdHRlci4gW2J1Zz05ODg5MDVdCisKKyogVGhlIHRlc3Qgc3VpdGUgbm93IHBhc3NlcyB3aGVuIGx4bWwgaXMgbm90IGluc3RhbGxlZCwgd2hldGhlciBvciBub3QKKyAgaHRtbDVsaWIgaXMgaW5zdGFsbGVkLiBbYnVnPTk4NzAwNF0KKworKiBQcmludCBhIHdhcm5pbmcgb24gSFRNTFBhcnNlRXJyb3JzIHRvIGxldCBwZW9wbGUga25vdyB0aGV5IHNob3VsZAorICBpbnN0YWxsIGEgYmV0dGVyIHBhcnNlciBsaWJyYXJ5LgorCis9IDQuMC40ICgyMDEyMDQxNikgPQorCisqIEZpeGVkIGEgYnVnIHRoYXQgc29tZXRpbWVzIGNyZWF0ZWQgZGlzY29ubmVjdGVkIHRyZWVzLgorCisqIEZpeGVkIGEgYnVnIHdpdGggdGhlIHN0cmluZyBzZXR0ZXIgdGhhdCBtb3ZlZCBhIHN0cmluZyBhcm91bmQgdGhlCisgIHRyZWUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0LiBbYnVnPTk4MzA1MF0KKworKiBBdHRyaWJ1dGUgdmFsdWVzIGFyZSBub3cgcnVuIHRocm91Z2ggdGhlIHByb3ZpZGVkIG91dHB1dCBmb3JtYXR0ZXIuCisgIFByZXZpb3VzbHkgdGhleSB3ZXJlIGFsd2F5cyBydW4gdGhyb3VnaCB0aGUgJ21pbmltYWwnIGZvcm1hdHRlci4gSW4KKyAgdGhlIGZ1dHVyZSBJIG1heSBtYWtlIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgZGlmZmVyZW50IGZvcm1hdHRlcnMKKyAgZm9yIGF0dHJpYnV0ZSB2YWx1ZXMgYW5kIHN0cmluZ3MsIGJ1dCBmb3Igbm93LCBjb25zaXN0ZW50IGJlaGF2aW9yCisgIGlzIGJldHRlciB0aGFuIGluY29uc2lzdGVudCBiZWhhdmlvci4gW2J1Zz05ODAyMzddCisKKyogQWRkZWQgdGhlIG1pc3NpbmcgcmVuZGVyQ29udGVudHMgbWV0aG9kIGZyb20gQmVhdXRpZnVsIFNvdXAgMy4gQWxzbworICBhZGRlZCBhbiBlbmNvZGVfY29udGVudHMoKSBtZXRob2QgdG8gZ28gYWxvbmcgd2l0aCBkZWNvZGVfY29udGVudHMoKS4KKworKiBHaXZlIGEgbW9yZSB1c2VmdWwgZXJyb3Igd2hlbiB0aGUgdXNlciB0cmllcyB0byBydW4gdGhlIFB5dGhvbiAyCisgIHZlcnNpb24gb2YgQlMgdW5kZXIgUHl0aG9uIDMuCisKKyogVW5pY29kZURhbW1pdCBjYW4gbm93IGNvbnZlcnQgTWljcm9zb2Z0IHNtYXJ0IHF1b3RlcyB0byBBU0NJSSB3aXRoCisgIFVuaWNvZGVEYW1taXQobWFya3VwLCBzbWFydF9xdW90ZXNfdG89ImFzY2lpIikuCisKKz0gNC4wLjMgKDIwMTIwNDAzKSA9CisKKyogRml4ZWQgYSB0eXBvIHRoYXQgY2F1c2VkIHNvbWUgdmVyc2lvbnMgb2YgUHl0aG9uIDMgdG8gY29udmVydCB0aGUKKyAgQmVhdXRpZnVsIFNvdXAgY29kZWJhc2UgaW5jb3JyZWN0bHkuCisKKyogR290IHJpZCBvZiB0aGUgNC4wLjIgd29ya2Fyb3VuZCBmb3IgSFRNTCBkb2N1bWVudHMtLWl0IHdhcworICB1bm5lY2Vzc2FyeSBhbmQgdGhlIHdvcmthcm91bmQgd2FzIHRyaWdnZXJpbmcgYSAocG9zc2libHkgZGlmZmVyZW50LAorICBidXQgcmVsYXRlZCkgYnVnIGluIGx4bWwuIFtidWc9OTcyNDY2XQorCis9IDQuMC4yICgyMDEyMDMyNikgPQorCisqIFdvcmtlZCBhcm91bmQgYSBwb3NzaWJsZSBidWcgaW4gbHhtbCB0aGF0IHByZXZlbnRzIG5vbi10aW55IFhNTAorICBkb2N1bWVudHMgZnJvbSBiZWluZyBwYXJzZWQuIFtidWc9OTYzODgwLCBidWc9OTYzOTM2XQorCisqIEZpeGVkIGEgYnVnIHdoZXJlIHNwZWNpZnlpbmcgYHRleHRgIHdoaWxlIGFsc28gc2VhcmNoaW5nIGZvciBhIHRhZworICBvbmx5IHdvcmtlZCBpZiBgdGV4dGAgd2FudGVkIGFuIGV4YWN0IHN0cmluZyBtYXRjaC4gW2J1Zz05NTU5NDJdCisKKz0gNC4wLjEgKDIwMTIwMzE0KSA9CisKKyogVGhpcyBpcyB0aGUgZmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZSBvZiBCZWF1dGlmdWwgU291cCA0LiBUaGVyZSBpcyBubworICA0LjAuMCByZWxlYXNlLCB0byBlbGltaW5hdGUgYW55IHBvc3NpYmlsaXR5IHRoYXQgcGFja2FnaW5nIHNvZnR3YXJlCisgIG1pZ2h0IHRyZWF0ICI0LjAuMCIgYXMgYmVpbmcgYW4gZWFybGllciB2ZXJzaW9uIHRoYW4gIjQuMC4wYjEwIi4KKworKiBCcm91Z2h0IEJTIHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0IHJlbGVhc2Ugb2Ygc291cHNlbGVjdCwgYWRkaW5nCisgIENTUyBzZWxlY3RvciBzdXBwb3J0IGZvciBkaXJlY3QgZGVzY2VuZGFudCBtYXRjaGVzIGFuZCBtdWx0aXBsZSBDU1MKKyAgY2xhc3MgbWF0Y2hlcy4KKworPSA0LjAuMGIxMCAoMjAxMjAzMDIpID0KKworKiBBZGRlZCBzdXBwb3J0IGZvciBzaW1wbGUgQ1NTIHNlbGVjdG9ycywgdGFrZW4gZnJvbSB0aGUgc291cHNlbGVjdCBwcm9qZWN0LgorCisqIEZpeGVkIGEgY3Jhc2ggd2hlbiB1c2luZyBodG1sNWxpYi4gW2J1Zz05NDMyNDZdCisKKyogSW4gSFRNTDUtc3R5bGUgPG1ldGEgY2hhcnNldD0iZm9vIj4gdGFncywgdGhlIHZhbHVlIG9mIHRoZSAiY2hhcnNldCIKKyAgYXR0cmlidXRlIGlzIG5vdyByZXBsYWNlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlbmNvZGluZyBvbgorICBvdXRwdXQuIFtidWc9OTQyNzE0XQorCisqIEZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIGNhbGxpbmcgYSB0YWcgdG8gc29tZXRpbWVzIGNhbGwgZmluZF9hbGwoKQorICB3aXRoIHRoZSB3cm9uZyBhcmd1bWVudHMuIFtidWc9OTQ0NDI2XQorCisqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnJvdWdodCBiYWNrIHRoZSBCZWF1dGlmdWxTdG9uZVNvdXAKKyAgY2xhc3MgYXMgYSBkZXByZWNhdGVkIHdyYXBwZXIgYXJvdW5kIEJlYXV0aWZ1bFNvdXAuCisKKz0gNC4wLjBiOSAoMjAxMjAyMjgpID0KKworKiBGaXhlZCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIERPQ1RZUEVzIHRoYXQgaGF2ZSBib3RoIGEgcHVibGljCisgIElEIGFuZCBhIHN5c3RlbSBJRC4KKworKiBGaXhlZCB0aGUgZ2VuZXJhdGVkIFhNTCBkZWNsYXJhdGlvbi4KKworKiBSZW5hbWVkIFRhZy5uc3ByZWZpeCB0byBUYWcucHJlZml4LCBmb3IgY29uc2lzdGVuY3kgd2l0aAorICBOYW1lc3BhY2VkQXR0cmlidXRlLgorCisqIEZpeGVkIGEgdGVzdCBmYWlsdXJlIHRoYXQgb2NjdXJlZCBvbiBQeXRob24gMy54IHdoZW4gY2hhcmRldCB3YXMKKyAgaW5zdGFsbGVkLgorCisqIE1hZGUgcHJldHRpZnkoKSByZXR1cm4gVW5pY29kZSBieSBkZWZhdWx0LCBzbyBpdCB3aWxsIGxvb2sgbmljZSBvbgorICBQeXRob24gMyB3aGVuIHBhc3NlZCBpbnRvIHByaW50KCkuCisKKz0gNC4wLjBiOCAoMjAxMjAyMjQpID0KKworKiBBbGwgdHJlZSBidWlsZGVycyBub3cgcHJlc2VydmUgbmFtZXNwYWNlIGluZm9ybWF0aW9uIGluIHRoZQorICBkb2N1bWVudHMgdGhleSBwYXJzZS4gSWYgeW91IHVzZSB0aGUgaHRtbDVsaWIgcGFyc2VyIG9yIGx4bWwncyBYTUwKKyAgcGFyc2VyLCB5b3UgY2FuIGFjY2VzcyB0aGUgbmFtZXNwYWNlIFVSTCBmb3IgYSB0YWcgYXMgdGFnLm5hbWVzcGFjZS4KKworICBIb3dldmVyLCB0aGVyZSBpcyBubyBzcGVjaWFsIHN1cHBvcnQgZm9yIG5hbWVzcGFjZS1vcmllbnRlZAorICBzZWFyY2hpbmcgb3IgdHJlZSBtYW5pcHVsYXRpb24uIFdoZW4geW91IHNlYXJjaCB0aGUgdHJlZSwgeW91IG5lZWQKKyAgdG8gdXNlIG5hbWVzcGFjZSBwcmVmaXhlcyBleGFjdGx5IGFzIHRoZXkncmUgdXNlZCBpbiB0aGUgb3JpZ2luYWwKKyAgZG9jdW1lbnQuCisKKyogVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERPQ1RZUEUgYWx3YXlzIGVuZHMgaW4gYSBuZXdsaW5lLgorCisqIElzc3VlIGEgd2FybmluZyBpZiB0aGUgdXNlciB0cmllcyB0byB1c2UgYSBTb3VwU3RyYWluZXIgaW4KKyAgY29uanVuY3Rpb24gd2l0aCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyLCB3aGljaCBkb2Vzbid0IHN1cHBvcnQKKyAgdGhlbS4KKworPSA0LjAuMGI3ICgyMDEyMDIyMykgPQorCisqIFVwb24gZGVjb2RpbmcgdG8gc3RyaW5nLCBhbnkgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIHJlcHJlc2VudGVkIGluCisgIHlvdXIgY2hvc2VuIGVuY29kaW5nIHdpbGwgYmUgY29udmVydGVkIGludG8gbnVtZXJpYyBYTUwgZW50aXR5CisgIHJlZmVyZW5jZXMuCisKKyogSXNzdWUgYSB3YXJuaW5nIGlmIGNoYXJhY3RlcnMgd2VyZSByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UCisgIENIQVJBQ1RFUiBkdXJpbmcgVW5pY29kZSBjb252ZXJzaW9uLgorCisqIFJlc3RvcmVkIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi42LgorCisqIFRoZSBpbnN0YWxsIHByb2Nlc3Mgbm8gbG9uZ2VyIGluc3RhbGxzIGRvY3Mgb3IgYXV4aWxsYXJ5IHRleHQgZmlsZXMuCisKKyogSXQncyBub3cgcG9zc2libGUgdG8gZGVlcGNvcHkgYSBCZWF1dGlmdWxTb3VwIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAgUHl0aG9uJ3MgYnVpbHQtaW4gSFRNTCBwYXJzZXIuCisKKyogQWJvdXQgMTAwIHVuaXQgdGVzdHMgdGhhdCAidGVzdCIgdGhlIGJlaGF2aW9yIG9mIHZhcmlvdXMgcGFyc2VycyBvbgorICBpbnZhbGlkIG1hcmt1cCBoYXZlIGJlZW4gcmVtb3ZlZC4gTGVnaXRpbWF0ZSBjaGFuZ2VzIHRvIHRob3NlCisgIHBhcnNlcnMgY2F1c2VkIHRoZXNlIHRlc3RzIHRvIGZhaWwsIGluZGljYXRpbmcgdGhhdCBwZXJoYXBzCisgIEJlYXV0aWZ1bCBTb3VwIHNob3VsZCBub3QgdGVzdCB0aGUgYmVoYXZpb3Igb2YgZm9yZWlnbgorICBsaWJyYXJpZXMuCisKKyAgVGhlIHByb2JsZW1hdGljIHVuaXQgdGVzdHMgaGF2ZSBiZWVuIHJlZm9ybXVsYXRlZCBhcyBpbmZvcm1hdGlvbmFsCisgIGNvbXBhcmlzb25zIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0CisgIHNjcmlwdHMvZGVtb25zdHJhdGVfcGFyc2VyX2RpZmZlcmVuY2VzLnB5LgorCisgIFRoaXMgbWFrZXMgQmVhdXRpZnVsIFNvdXAgY29tcGF0aWJsZSB3aXRoIGh0bWw1bGliIHZlcnNpb24gMC45NSBhbmQKKyAgZnV0dXJlIHZlcnNpb25zIG9mIEhUTUxQYXJzZXIuCisKKz0gNC4wLjBiNiAoMjAxMjAyMTYpID0KKworKiBNdWx0aS12YWx1ZWQgYXR0cmlidXRlcyBsaWtlICJjbGFzcyIgYWx3YXlzIGhhdmUgYSBsaXN0IG9mIHZhbHVlcywKKyAgZXZlbiBpZiB0aGVyZSdzIG9ubHkgb25lIHZhbHVlIGluIHRoZSBsaXN0LgorCisqIEFkZGVkIGEgbnVtYmVyIG9mIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gSFRNTDUuCisKKyogU3RvcHBlZCBnZW5lcmF0aW5nIGEgc3BhY2UgYmVmb3JlIHRoZSBzbGFzaCB0aGF0IGNsb3NlcyBhbgorICBlbXB0eS1lbGVtZW50IHRhZy4gVGhpcyBtYXkgY29tZSBiYWNrIGlmIEkgYWRkIGEgc3BlY2lhbCBYSFRNTCBtb2RlCisgIChodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvI0NfMiksIGJ1dCByaWdodCBub3cgaXQncyBwcmV0dHkKKyAgdXNlbGVzcy4KKworKiBQYXNzaW5nIHRleHQgYWxvbmcgd2l0aCB0YWctc3BlY2lmaWMgYXJndW1lbnRzIHRvIGEgZmluZCogbWV0aG9kOgorCisgICBmaW5kKCJhIiwgdGV4dD0iQ2xpY2sgaGVyZSIpCisKKyAgd2lsbCBmaW5kIHRhZ3MgdGhhdCBjb250YWluIHRoZSBnaXZlbiB0ZXh0IGFzIHRoZWlyCisgIC5zdHJpbmcuIFByZXZpb3VzbHksIHRoZSB0YWctc3BlY2lmaWMgYXJndW1lbnRzIHdlcmUgaWdub3JlZCBhbmQKKyAgb25seSBzdHJpbmdzIHdlcmUgc2VhcmNoZWQuCisKKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciB0byBidWlsZCBhCisgIHBhcnRpYWxseSBkaXNjb25uZWN0ZWQgdHJlZS4gR2VuZXJhbGx5IGNsZWFuZWQgdXAgdGhlIGh0bWw1bGliIHRyZWUKKyAgYnVpbGRlci4KKworKiBJZiB5b3UgcmVzdHJpY3QgYSBtdWx0aS12YWx1ZWQgYXR0cmlidXRlIGxpa2UgImNsYXNzIiB0byBhIHN0cmluZworICB0aGF0IGNvbnRhaW5zIHNwYWNlcywgQmVhdXRpZnVsIFNvdXAgd2lsbCBvbmx5IGNvbnNpZGVyIGl0IGEgbWF0Y2gKKyAgaWYgdGhlIHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoYXQgc3BlY2lmaWMgc3RyaW5nLgorCis9IDQuMC4wYjUgKDIwMTIwMjA5KSA9CisKKyogUmF0aW9uYWxpemVkIEJlYXV0aWZ1bCBTb3VwJ3MgdHJlYXRtZW50IG9mIENTUyBjbGFzcy4gQSB0YWcKKyAgYmVsb25naW5nIHRvIG11bHRpcGxlIENTUyBjbGFzc2VzIGlzIHRyZWF0ZWQgYXMgaGF2aW5nIGEgbGlzdCBvZgorICB2YWx1ZXMgZm9yIHRoZSAnY2xhc3MnIGF0dHJpYnV0ZS4gU2VhcmNoaW5nIGZvciBhIENTUyBjbGFzcyB3aWxsCisgIG1hdGNoICphbnkqIG9mIHRoZSBDU1MgY2xhc3Nlcy4KKworICBUaGlzIGFjdHVhbGx5IGFmZmVjdHMgYWxsIGF0dHJpYnV0ZXMgdGhhdCB0aGUgSFRNTCBzdGFuZGFyZCBkZWZpbmVzCisgIGFzIHRha2luZyBtdWx0aXBsZSB2YWx1ZXMgKGNsYXNzLCByZWwsIHJldiwgYXJjaGl2ZSwgYWNjZXB0LWNoYXJzZXQsCisgIGFuZCBoZWFkZXJzKSwgYnV0ICdjbGFzcycgaXMgYnkgZmFyIHRoZSBtb3N0IGNvbW1vbi4gW2J1Zz00MTAzNF0KKworKiBJZiB5b3UgcGFzcyBhbnl0aGluZyBvdGhlciB0aGFuIGEgZGljdGlvbmFyeSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50CisgIHRvIG9uZSBvZiB0aGUgZmluZCogbWV0aG9kcywgaXQnbGwgYXNzdW1lIHlvdSB3YW50IHRvIHVzZSB0aGF0CisgIG9iamVjdCB0byBzZWFyY2ggYWdhaW5zdCBhIHRhZydzIENTUyBjbGFzc2VzLiBQcmV2aW91c2x5IHRoaXMgb25seQorICB3b3JrZWQgaWYgeW91IHBhc3NlZCBpbiBhIHN0cmluZy4KKworKiBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBhIGNyYXNoIHdoZW4geW91IHBhc3NlZCBhIGRpY3Rpb25hcnkgYXMgYW4KKyAgYXR0cmlidXRlIHZhbHVlIChwb3NzaWJseSBiZWNhdXNlIHlvdSBtaXN0eXBlZCAiYXR0cnMiKS4gW2J1Zz04NDI0MTldCisKKyogVW5pY29kZSwgRGFtbWl0IG5vdyBkZXRlY3RzIHRoZSBlbmNvZGluZyBpbiBIVE1MIDUtc3R5bGUgPG1ldGE+IHRhZ3MKKyAgbGlrZSA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz4uIFtidWc9ODM3MjY4XQorCisqIElmIFVuaWNvZGUsIERhbW1pdCBjYW4ndCBmaWd1cmUgb3V0IGEgY29uc2lzdGVudCBlbmNvZGluZyBmb3IgYQorICBwYWdlLCBpdCB3aWxsIHRyeSBlYWNoIG9mIGl0cyBndWVzc2VzIGFnYWluLCB3aXRoIGVycm9ycz0icmVwbGFjZSIKKyAgaW5zdGVhZCBvZiBlcnJvcnM9InN0cmljdCIuIFRoaXMgbWF5IG1lYW4gdGhhdCBzb21lIGRhdGEgZ2V0cworICByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UIENIQVJBQ1RFUiwgYnV0IGF0IGxlYXN0IG1vc3Qgb2YgaXQgd2lsbAorICBnZXQgdHVybmVkIGludG8gVW5pY29kZS4gW2J1Zz03NTQ5MDNdCisKKyogUGF0Y2hlZCBvdmVyIGEgYnVnIGluIGh0bWw1bGliICg/KSB0aGF0IHdhcyBjcmFzaGluZyBCZWF1dGlmdWwgU291cAorICBvbiBjZXJ0YWluIGtpbmRzIG9mIG1hcmt1cC4gW2J1Zz04Mzg4MDBdCisKKyogRml4ZWQgYSBidWcgdGhhdCB3cmVja2VkIHRoZSB0cmVlIGlmIHlvdSByZXBsYWNlZCBhbiBlbGVtZW50IHdpdGggYW4KKyAgZW1wdHkgc3RyaW5nLiBbYnVnPTcyODY5N10KKworKiBJbXByb3ZlZCBVbmljb2RlLCBEYW1taXQncyBiZWhhdmlvciB3aGVuIHlvdSBnaXZlIGl0IFVuaWNvZGUgdG8KKyAgYmVnaW4gd2l0aC4KKworPSA0LjAuMGI0ICgyMDEyMDIwOCkgPQorCisqIEFkZGVkIEJlYXV0aWZ1bFNvdXAubmV3X3N0cmluZygpIHRvIGdvIGFsb25nIHdpdGggQmVhdXRpZnVsU291cC5uZXdfdGFnKCkKKworKiBCZWF1dGlmdWxTb3VwLm5ld190YWcoKSB3aWxsIGZvbGxvdyB0aGUgcnVsZXMgb2Ygd2hhdGV2ZXIKKyAgdHJlZS1idWlsZGVyIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUgb3JpZ2luYWwgQmVhdXRpZnVsU291cCBvYmplY3QuIEEKKyAgbmV3IDxwPiB0YWcgd2lsbCBsb29rIGxpa2UgIjxwIC8+IiBpZiB0aGUgc291cCBvYmplY3Qgd2FzIGNyZWF0ZWQgdG8KKyAgcGFyc2UgWE1MLCBidXQgaXQgd2lsbCBsb29rIGxpa2UgIjxwPjwvcD4iIGlmIHRoZSBzb3VwIG9iamVjdCB3YXMKKyAgY3JlYXRlZCB0byBwYXJzZSBIVE1MLgorCisqIFdlIHBhc3MgaW4gc3RyaWN0PUZhbHNlIHRvIGh0bWwucGFyc2VyIG9uIFB5dGhvbiAzLCBncmVhdGx5CisgIGltcHJvdmluZyBodG1sLnBhcnNlcidzIGFiaWxpdHkgdG8gaGFuZGxlIGJhZCBIVE1MLgorCisqIFdlIGFsc28gbW9ua2V5cGF0Y2ggYSBzZXJpb3VzIGJ1ZyBpbiBodG1sLnBhcnNlciB0aGF0IG1hZGUKKyAgc3RyaWN0PUZhbHNlIGRpc2FzdHJvdXMgb24gUHl0aG9uIDMuMi4yLgorCisqIFJlcGxhY2VkIHRoZSAic3Vic3RpdHV0ZV9odG1sX2VudGl0aWVzIiBhcmd1bWVudCB3aXRoIHRoZQorICBtb3JlIGdlbmVyYWwgImZvcm1hdHRlciIgYXJndW1lbnQuCisKKyogQmFyZSBhbXBlcnNhbmRzIGFuZCBhbmdsZSBicmFja2V0cyBhcmUgYWx3YXlzIGNvbnZlcnRlZCB0byBYTUwKKyAgZW50aXRpZXMgdW5sZXNzIHRoZSB1c2VyIHByZXZlbnRzIGl0LgorCisqIEFkZGVkIFBhZ2VFbGVtZW50Lmluc2VydF9iZWZvcmUoKSBhbmQgUGFnZUVsZW1lbnQuaW5zZXJ0X2FmdGVyKCksCisgIHdoaWNoIGxldCB5b3UgcHV0IGFuIGVsZW1lbnQgaW50byB0aGUgcGFyc2UgdHJlZSB3aXRoIHJlc3BlY3QgdG8KKyAgc29tZSBvdGhlciBlbGVtZW50LgorCisqIFJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIGRvIHNvbWV0aGluZyBub25zZW5zaWNhbAorICBsaWtlIGluc2VydCBhIHRhZyBpbnRvIGl0c2VsZi4KKworCis9IDQuMC4wYjMgKDIwMTIwMjAzKSA9CisKK0JlYXV0aWZ1bCBTb3VwIDQgaXMgYSBuZWFybHktY29tcGxldGUgcmV3cml0ZSB0aGF0IHJlbW92ZXMgQmVhdXRpZnVsCitTb3VwJ3MgY3VzdG9tIEhUTUwgcGFyc2VyIGluIGZhdm9yIG9mIGEgc3lzdGVtIHRoYXQgbGV0cyB5b3Ugd3JpdGUgYQorbGl0dGxlIGdsdWUgY29kZSBhbmQgcGx1ZyBpbiBhbnkgSFRNTCBvciBYTUwgcGFyc2VyIHlvdSB3YW50LgorCitCZWF1dGlmdWwgU291cCA0LjAgY29tZXMgd2l0aCBnbHVlIGNvZGUgZm9yIGZvdXIgcGFyc2VyczoKKworICogUHl0aG9uJ3Mgc3RhbmRhcmQgSFRNTFBhcnNlciAoaHRtbC5wYXJzZXIgaW4gUHl0aG9uIDMpCisgKiBseG1sJ3MgSFRNTCBhbmQgWE1MIHBhcnNlcnMKKyAqIGh0bWw1bGliJ3MgSFRNTCBwYXJzZXIKKworSFRNTFBhcnNlciBpcyB0aGUgZGVmYXVsdCwgYnV0IEkgcmVjb21tZW5kIHlvdSBpbnN0YWxsIGx4bWwgaWYgeW91CitjYW4uCisKK0ZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBzZWUgdGhlIFNwaGlueCBkb2N1bWVudGF0aW9uIGluCiticzQvZG9jL3NvdXJjZS8uIFdoYXQgZm9sbG93cyBpcyBhIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgZnJvbQorQmVhdXRpZnVsIFNvdXAgMy4KKworPT09IFRoZSBtb2R1bGUgbmFtZSBoYXMgY2hhbmdlZCA9PT0KKworUHJldmlvdXNseSB5b3UgaW1wb3J0ZWQgdGhlIEJlYXV0aWZ1bFNvdXAgY2xhc3MgZnJvbSBhIG1vZHVsZSBhbHNvCitjYWxsZWQgQmVhdXRpZnVsU291cC4gVG8gc2F2ZSBrZXlzdHJva2VzIGFuZCBtYWtlIGl0IGNsZWFyIHdoaWNoCit2ZXJzaW9uIG9mIHRoZSBBUEkgaXMgaW4gdXNlLCB0aGUgbW9kdWxlIGlzIG5vdyBjYWxsZWQgJ2JzNCc6CisKKyAgICA+Pj4gZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKKworPT09IEl0IHdvcmtzIHdpdGggUHl0aG9uIDMgPT09CisKK0JlYXV0aWZ1bCBTb3VwIDMuMS4wIHdvcmtlZCB3aXRoIFB5dGhvbiAzLCBidXQgdGhlIHBhcnNlciBpdCB1c2VkIHdhcworc28gYmFkIHRoYXQgaXQgYmFyZWx5IHdvcmtlZCBhdCBhbGwuIEJlYXV0aWZ1bCBTb3VwIDQgd29ya3Mgd2l0aAorUHl0aG9uIDMsIGFuZCBzaW5jZSBpdHMgcGFyc2VyIGlzIHBsdWdnYWJsZSwgeW91IGRvbid0IHNhY3JpZmljZQorcXVhbGl0eS4KKworU3BlY2lhbCB0aGFua3MgdG8gVGhvbWFzIEtsdXl2ZXIgYW5kIEV6aW8gTWVsb3R0aSBmb3IgZ2V0dGluZyBQeXRob24gMworc3VwcG9ydCB0byB0aGUgZmluaXNoIGxpbmUuIEV6aW8gTWVsb3R0aSBpcyBhbHNvIHRvIHRoYW5rIGZvciBncmVhdGx5CitpbXByb3ZpbmcgdGhlIEhUTUwgcGFyc2VyIHRoYXQgY29tZXMgd2l0aCBQeXRob24gMy4yLgorCis9PT0gQ0RBVEEgc2VjdGlvbnMgYXJlIG5vcm1hbCB0ZXh0LCBpZiB0aGV5J3JlIHVuZGVyc3Rvb2QgYXQgYWxsLiA9PT0KKworQ3VycmVudGx5LCB0aGUgbHhtbCBhbmQgaHRtbDVsaWIgSFRNTCBwYXJzZXJzIGlnbm9yZSBDREFUQSBzZWN0aW9ucyBpbgorbWFya3VwOgorCisgPHA+PCFbQ0RBVEFbZm9vXV0+PC9wPiA9PiA8cD48L3A+CisKK0EgZnV0dXJlIHZlcnNpb24gb2YgaHRtbDVsaWIgd2lsbCB0dXJuIENEQVRBIHNlY3Rpb25zIGludG8gdGV4dCBub2RlcywKK2J1dCBvbmx5IHdpdGhpbiB0YWdzIGxpa2UgPHN2Zz4gYW5kIDxtYXRoPjoKKworIDxzdmc+PCFbQ0RBVEFbZm9vXV0+PC9zdmc+ID0+IDxwPmZvbzwvcD4KKworVGhlIGRlZmF1bHQgWE1MIHBhcnNlciAod2hpY2ggdXNlcyBseG1sIGJlaGluZCB0aGUgc2NlbmVzKSB0dXJucyBDREFUQQorc2VjdGlvbnMgaW50byBvcmRpbmFyeSB0ZXh0IGVsZW1lbnRzOgorCisgPHA+PCFbQ0RBVEFbZm9vXV0+PC9wPiA9PiA8cD5mb288L3A+CisKK0luIHRoZW9yeSBpdCdzIHBvc3NpYmxlIHRvIHByZXNlcnZlIHRoZSBDREFUQSBzZWN0aW9ucyB3aGVuIHVzaW5nIHRoZQorWE1MIHBhcnNlciwgYnV0IEkgZG9uJ3Qgc2VlIGhvdyB0byBnZXQgaXQgdG8gd29yayBpbiBwcmFjdGljZS4KKworPT09IE1pc2NlbGxhbmVvdXMgb3RoZXIgc3R1ZmYgPT09CisKK0lmIHRoZSBCZWF1dGlmdWxTb3VwIGluc3RhbmNlIGhhcyAuaXNfeG1sIHNldCB0byBUcnVlLCBhbiBhcHByb3ByaWF0ZQorWE1MIGRlY2xhcmF0aW9uIHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSB0cmVlIGlzIHRyYW5zZm9ybWVkIGludG8gYQorc3RyaW5nOgorCisgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPgorICAgIDxtYXJrdXA+CisgICAgIC4uLgorICAgIDwvbWFya3VwPgorCitUaGUgWydseG1sJywgJ3htbCddIHRyZWUgYnVpbGRlciBzZXRzIC5pc194bWwgdG8gVHJ1ZTsgdGhlIG90aGVyIHRyZWUKK2J1aWxkZXJzIHNldCBpdCB0byBGYWxzZS4gSWYgeW91IHdhbnQgdG8gcGFyc2UgWEhUTUwgd2l0aCBhbiBIVE1MCitwYXJzZXIsIHlvdSBjYW4gc2V0IGl0IG1hbnVhbGx5LgorCisKKz0gMy4yLjAgPQorCitUaGUgMy4xIHNlcmllcyB3YXNuJ3QgdmVyeSB1c2VmdWwsIHNvIEkgcmVuYW1lZCB0aGUgMy4wIHNlcmllcyB0byAzLjIKK3RvIG1ha2UgaXQgb2J2aW91cyB3aGljaCBvbmUgeW91IHNob3VsZCB1c2UuCisKKz0gMy4xLjAgPQorCitBIGh5YnJpZCB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgMi40IGFuZCBjYW4gYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQKK3RvIHJ1biB1bmRlciBQeXRob24gMy4wLiBUaGVyZSBhcmUgdGhyZWUgYmFja3dhcmRzLWluY29tcGF0aWJsZQorY2hhbmdlcyB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mLCBidXQgbm8gbmV3IGZlYXR1cmVzIG9yIGRlbGliZXJhdGUKK2JlaGF2aW9yIGNoYW5nZXMuCisKKzEuIHN0cigpIG1heSBubyBsb25nZXIgZG8gd2hhdCB5b3Ugd2FudC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBtZWFuaW5nCitvZiBzdHIoKSBpbnZlcnRzIGJldHdlZW4gUHl0aG9uIDIgYW5kIDM7IGluIFB5dGhvbiAyIGl0IGdpdmVzIHlvdSBhCitieXRlIHN0cmluZywgaW4gUHl0aG9uIDMgaXQgZ2l2ZXMgeW91IGEgVW5pY29kZSBzdHJpbmcuCisKK1RoZSBlZmZlY3Qgb2YgdGhpcyBpcyB0aGF0IHlvdSBjYW4ndCBwYXNzIGFuIGVuY29kaW5nIHRvIC5fX3N0cl9fCithbnltb3JlLiBVc2UgZW5jb2RlKCkgdG8gZ2V0IGEgc3RyaW5nIGFuZCBkZWNvZGUoKSB0byBnZXQgVW5pY29kZSwgYW5kCit5b3UnbGwgYmUgcmVhZHkgKHdlbGwsIHJlYWRpZXIpIGZvciBQeXRob24gMy4KKworMi4gQmVhdXRpZnVsIFNvdXAgaXMgbm93IGJhc2VkIG9uIEhUTUxQYXJzZXIgcmF0aGVyIHRoYW4gU0dNTFBhcnNlciwKK3doaWNoIGlzIGdvbmUgaW4gUHl0aG9uIDMuIFRoZXJlJ3Mgc29tZSBiYWQgSFRNTCB0aGF0IFNHTUxQYXJzZXIKK2hhbmRsZWQgYnV0IEhUTUxQYXJzZXIgZG9lc24ndCwgdXN1YWxseSB0byBkbyB3aXRoIGF0dHJpYnV0ZSB2YWx1ZXMKK3RoYXQgYXJlbid0IGNsb3NlZCBvciBoYXZlIGJyYWNrZXRzIGluc2lkZSB0aGVtOgorCisgIDxhIGhyZWY9ImZvbzwvYT4sIDwvYT48YSBocmVmPSJiYXIiPmJhejwvYT4KKyAgPGEgYj0iPGE+Ij4nLCAnPGEgYj0iJmx0O2EmZ3Q7Ij48L2E+PGE+Ij48L2E+CisKK0EgbGF0ZXIgdmVyc2lvbiBvZiBCZWF1dGlmdWwgU291cCB3aWxsIGFsbG93IHlvdSB0byBwbHVnIGluIGRpZmZlcmVudAorcGFyc2VycyB0byBtYWtlIHRyYWRlb2ZmcyBiZXR3ZWVuIHNwZWVkIGFuZCB0aGUgYWJpbGl0eSB0byBoYW5kbGUgYmFkCitIVE1MLgorCiszLiBJbiBQeXRob24gMyAoYnV0IG5vdCBQeXRob24gMiksIEhUTUxQYXJzZXIgY29udmVydHMgZW50aXRpZXMgd2l0aGluCithdHRyaWJ1dGVzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4gSW4gUHl0aG9uIDIgaXQncworcG9zc2libGUgdG8gcGFyc2UgdGhpcyBzdHJpbmcgYW5kIGxlYXZlIHRoZSAmZWFjdXRlOyBpbnRhY3QuCisKKyA8YSBocmVmPSJodHRwOi8vY3J1bW15LmNvbT9zYWNyJmVhY3V0ZTsmYmxldSI+CisKK0luIFB5dGhvbiAzLCB0aGUgJmVhY3V0ZTsgaXMgYWx3YXlzIGNvbnZlcnRlZCB0byBceGU5IGR1cmluZworcGFyc2luZy4KKworCis9IDMuMC43YSA9CisKK0FkZGVkIGFuIGltcG9ydCB0aGF0IG1ha2VzIEJTIHdvcmsgaW4gUHl0aG9uIDIuMy4KKworCis9IDMuMC43ID0KKworRml4ZWQgYSBVbmljb2RlRGVjb2RlRXJyb3Igd2hlbiB1bnBpY2tsaW5nIGRvY3VtZW50cyB0aGF0IGNvbnRhaW4KK25vbi1BU0NJSSBjaGFyYWN0ZXJzLgorCitGaXhlZCBhIFR5cGVFcnJvciB0aGF0IG9jY3VyZWQgaW4gc29tZSBjaXJjdW1zdGFuY2VzIHdoZW4gYSB0YWcKK2NvbnRhaW5lZCBubyB0ZXh0LgorCitKdW1wIHRocm91Z2ggaG9vcHMgdG8gYXZvaWQgdGhlIHVzZSBvZiBjaGFyZGV0LCB3aGljaCBjYW4gYmUgZXh0cmVtZWx5CitzbG93IGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4gVVRGLTggZG9jdW1lbnRzIHNob3VsZCBuZXZlciB0cmlnZ2VyIHRoZQordXNlIG9mIGNoYXJkZXQuCisKK1doaXRlc3BhY2UgaXMgcHJlc2VydmVkIGluc2lkZSA8cHJlPiBhbmQgPHRleHRhcmVhPiB0YWdzIHRoYXQgY29udGFpbgorbm90aGluZyBidXQgd2hpdGVzcGFjZS4KKworQmVhdXRpZnVsIFNvdXAgY2FuIG5vdyBwYXJzZSBhIGRvY3R5cGUgdGhhdCdzIHNjb3BlZCB0byBhbiBYTUwgbmFtZXNwYWNlLgorCisKKz0gMy4wLjYgPQorCitHb3QgcmlkIG9mIGEgdmVyeSBvbGQgZGVidWcgbGluZSB0aGF0IHByZXZlbnRlZCBjaGFyZGV0IGZyb20gd29ya2luZy4KKworQWRkZWQgYSBUYWcuZGVjb21wb3NlKCkgbWV0aG9kIHRoYXQgY29tcGxldGVseSBkaXNjb25uZWN0cyBhIHRyZWUgb3IgYQorc3Vic2V0IG9mIGEgdHJlZSwgYnJlYWtpbmcgaXQgdXAgaW50byBiaXRlLXNpemVkIHBpZWNlcyB0aGF0IGFyZQorZWFzeSBmb3IgdGhlIGdhcmJhZ2UgY29sbGVjdGVyIHRvIGNvbGxlY3QuCisKK1RhZy5leHRyYWN0KCkgbm93IHJldHVybnMgdGhlIHRhZyB0aGF0IHdhcyBleHRyYWN0ZWQuCisKK1RhZy5maW5kTmV4dCgpIG5vdyBkb2VzIHNvbWV0aGluZyB3aXRoIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyB5b3UgcGFzcworaXQgaW5zdGVhZCBvZiBkcm9wcGluZyB0aGVtIG9uIHRoZSBmbG9vci4KKworRml4ZWQgYSBVbmljb2RlIGNvbnZlcnNpb24gYnVnLgorCitGaXhlZCBhIGJ1ZyB0aGF0IGdhcmJsZWQgc29tZSA8bWV0YT4gdGFncyB3aGVuIHJld3JpdGluZyB0aGVtLgorCisKKz0gMy4wLjUgPQorCitTb3VwIG9iamVjdHMgY2FuIG5vdyBiZSBwaWNrbGVkLCBhbmQgY29waWVkIHdpdGggY29weS5kZWVwY29weS4KKworVGFnLmFwcGVuZCBub3cgd29ya3MgcHJvcGVybHkgb24gZXhpc3RpbmcgQlMgb2JqZWN0cy4gKEl0IHdhc24ndAorb3JpZ2luYWxseSBpbnRlbmRlZCBmb3Igb3V0c2lkZSB1c2UsIGJ1dCBpdCBjYW4gYmUgbm93LikgKEdpbGVzCitSYWRmb3JkKQorCitQYXNzaW5nIGluIGEgbm9uZXhpc3RlbnQgZW5jb2Rpbmcgd2lsbCBubyBsb25nZXIgY3Jhc2ggdGhlIHBhcnNlciBvbgorUHl0aG9uIDIuNCAoSm9obiBOYWdsZSkuCisKK0ZpeGVkIGFuIHVuZGVybHlpbmcgYnVnIGluIFNHTUxQYXJzZXIgdGhhdCB0aGlua3MgQVNDSUkgaGFzIDI1NQorY2hhcmFjdGVycyBpbnN0ZWFkIG9mIDEyNyAoSm9obiBOYWdsZSkuCisKK0VudGl0aWVzIGFyZSBjb252ZXJ0ZWQgbW9yZSBjb25zaXN0ZW50bHkgdG8gVW5pY29kZSBjaGFyYWN0ZXJzLgorCitFbnRpdHkgcmVmZXJlbmNlcyBpbiBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBub3cgY29udmVydGVkIHRvIFVuaWNvZGUKK2NoYXJhY3RlcnMgd2hlbiBhcHByb3ByaWF0ZS4gTnVtZXJpYyBlbnRpdGllcyBhcmUgYWx3YXlzIGNvbnZlcnRlZCwKK2JlY2F1c2UgU0dNTFBhcnNlciBhbHdheXMgY29udmVydHMgdGhlbSBvdXRzaWRlIG9mIGF0dHJpYnV0ZSB2YWx1ZXMuCisKK0FMTF9FTlRJVElFUyBoYXBwZW5zIHRvIGp1c3QgYmUgdGhlIFhIVE1MIGVudGl0aWVzLCBzbyBJIHJlbmFtZWQgaXQgdG8KK1hIVE1MX0VOVElUSUVTLgorCitUaGUgcmVndWxhciBleHByZXNzaW9uIGZvciBiYXJlIGFtcGVyc2FuZHMgd2FzIHRvbyBsb29zZS4gSW4gc29tZQorY2FzZXMgYW1wZXJzYW5kcyB3ZXJlIG5vdCBiZWluZyBlc2NhcGVkLiAoU2FtIFJ1Ynk/KQorCitOb24tYnJlYWtpbmcgc3BhY2VzIGFuZCBvdGhlciBzcGVjaWFsIFVuaWNvZGUgc3BhY2UgY2hhcmFjdGVycyBhcmUgbm8KK2xvbmdlciBmb2xkZWQgdG8gQVNDSUkgc3BhY2VzLiAoUm9iZXJ0IExlZnR3aWNoKQorCitJbmZvcm1hdGlvbiBpbnNpZGUgYSBURVhUQVJFQSB0YWcgaXMgbm93IHBhcnNlZCBsaXRlcmFsbHksIG5vdCBhcyBIVE1MCit0YWdzLiBURVhUQVJFQSBub3cgd29ya3MgZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgU0NSSVBULiAoWmVwaHlyIEZhbmcpCisKKz0gMy4wLjQgPQorCitGaXhlZCBhIGJ1ZyB0aGF0IGNyYXNoZWQgVW5pY29kZSBjb252ZXJzaW9uIGluIHNvbWUgY2FzZXMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgcHJldmVudGVkIFVuaWNvZGVEYW1taXQgZnJvbSBiZWluZyB1c2VkIGFzIGEKK2dlbmVyYWwtcHVycG9zZSBkYXRhIHNjcnViYmVyLgorCitGaXhlZCBzb21lIHVuaXQgdGVzdCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgYWdhaW5zdCBQeXRob24gMi41LgorCitXaGVuIGNvbnNpZGVyaW5nIHdoZXRoZXIgdG8gY29udmVydCBzbWFydCBxdW90ZXMsIFVuaWNvZGVEYW1taXQgbm93Citsb29rcyBhdCB0aGUgb3JpZ2luYWwgZW5jb2RpbmcgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheS4KKworPSAzLjAuMyAoMjAwNjA2MDYpID0KKworQmVhdXRpZnVsIFNvdXAgaXMgbm93IHVzYWJsZSBhcyBhIHdheSB0byBjbGVhbiB1cCBpbnZhbGlkIFhNTC9IVE1MIChiZQorc3VyZSB0byBwYXNzIGluIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBjb252ZXJ0RW50aXRpZXMsIG9yIFhNTC9IVE1MCitlbnRpdGllcyBtaWdodCBzdGljayBhcm91bmQgdGhhdCBhcmVuJ3QgdmFsaWQgaW4gSFRNTC9YTUwpLiBUaGUgcmVzdWx0CittYXkgbm90IHZhbGlkYXRlLCBidXQgaXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIHRvIG5vdCBjaG9rZSBhCityZWFsLXdvcmxkIFhNTCBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhlIG91dHB1dCBvZiBhIHByb3Blcmx5Citjb25zdHJ1Y3RlZCBzb3VwIG9iamVjdCBzaG91bGQgYWx3YXlzIGJlIHZhbGlkIGFzIHBhcnQgb2YgYW4gWE1MCitkb2N1bWVudCwgYnV0IHBhcnRzIG1heSBiZSBtaXNzaW5nIGlmIHRoZXkgd2VyZSBtaXNzaW5nIGluIHRoZQorb3JpZ2luYWwuIEFzIGFsd2F5cywgaWYgdGhlIGlucHV0IGlzIHZhbGlkIFhNTCwgdGhlIG91dHB1dCB3aWxsIGFsc28KK2JlIHZhbGlkLgorCis9IDMuMC4yICgyMDA2MDYwMikgPQorCitQcmV2aW91c2x5LCBCZWF1dGlmdWwgU291cCBjb3JyZWN0bHkgaGFuZGxlZCBhdHRyaWJ1dGUgdmFsdWVzIHRoYXQKK2NvbnRhaW5lZCBlbWJlZGRlZCBxdW90ZXMgKHNvbWV0aW1lcyBieSBlc2NhcGluZyksIGJ1dCBub3Qgb3RoZXIga2luZHMKK29mIFhNTCBjaGFyYWN0ZXIuIE5vdywgaXQgY29ycmVjdGx5IGhhbmRsZXMgb3IgZXNjYXBlcyBhbGwgc3BlY2lhbCBYTUwKK2NoYXJhY3RlcnMgaW4gYXR0cmlidXRlIHZhbHVlcy4KKworSSBhbGlhc2VkIG1ldGhvZHMgdG8gdGhlIDIueCBuYW1lcyAoZmV0Y2gsIGZpbmQsIGZpbmRUZXh0LCBldGMuKSBmb3IKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLiBUaG9zZSBuYW1lcyBhcmUgZGVwcmVjYXRlZCBhbmQgaWYgSQorZXZlciBkbyBhIDQuMCBJIHdpbGwgcmVtb3ZlIHRoZW0uIEkgd2lsbCwgSSB0ZWxsIHlvdSEKKworRml4ZWQgYSBidWcgd2hlcmUgdGhlIGZpbmRBbGwgbWV0aG9kIHdhc24ndCBwYXNzaW5nIGFsb25nIGFueSBrZXl3b3JkCithcmd1bWVudHMuCisKK1doZW4gcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgQmVhdXRpZnVsIFNvdXAgbm93IGFjdHMgYXMgYW4gSFRNTAorcHJldHR5LXByaW50ZXIsIG5vdCBhbiBYTUwgcHJldHR5LXByaW50ZXIuCisKKz0gMy4wLjEgKDIwMDYwNTMwKSA9CisKK1JlaW50cm9kdWNlZCB0aGUgImZldGNoIGJ5IENTUyBjbGFzcyIgc2hvcnRjdXQuIEkgdGhvdWdodCBrZXl3b3JkCithcmd1bWVudHMgd291bGQgcmVwbGFjZSBpdCwgYnV0IHRoZXkgZG9uJ3QuIFlvdSBjYW4ndCBjYWxsIHNvdXAoJ2EnLAorY2xhc3M9J2ZvbycpIGJlY2F1c2UgY2xhc3MgaXMgYSBQeXRob24ga2V5d29yZC4KKworSWYgQmVhdXRpZnVsIFNvdXAgZW5jb3VudGVycyBhIG1ldGEgdGFnIHRoYXQgZGVjbGFyZXMgdGhlIGVuY29kaW5nLAorYnV0IGEgU291cFN0cmFpbmVyIHRlbGxzIGl0IG5vdCB0byBwYXJzZSB0aGF0IHRhZywgQmVhdXRpZnVsIFNvdXAgd2lsbAorbm8gbG9uZ2VyIHRyeSB0byByZXdyaXRlIHRoZSBtZXRhIHRhZyB0byBtZW50aW9uIHRoZSBuZXcKK2VuY29kaW5nLiBCYXNpY2FsbHksIHRoaXMgbWFrZXMgU291cFN0cmFpbmVycyB3b3JrIGluIHJlYWwtd29ybGQKK2FwcGxpY2F0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBwYXJzZXIuCisKKz0gMy4wLjAgIldobyB3b3VsZCBub3QgZ2l2ZSBhbGwgZWxzZSBmb3IgdHdvIHAiICgyMDA2MDUyOCkgPQorCitUaGlzIHJlbGVhc2UgaXMgbm90IGJhY2t3YXJkLWNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyByZWxlYXNlcy4gSWYKK3lvdSd2ZSBnb3QgY29kZSB3cml0dGVuIHdpdGggYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBnbworYWhlYWQgYW5kIGtlZXAgdXNpbmcgaXQsIHVubGVzcyBvbmUgb2YgdGhlIGZlYXR1cmVzIG1lbnRpb25lZCBoZXJlCityZWFsbHkgbWFrZXMgeW91ciBsaWZlIGVhc2llci4gU2luY2UgdGhlIGxpYnJhcnkgaXMgc2VsZi1jb250YWluZWQsCit5b3UgY2FuIGluY2x1ZGUgYW4gb2xkIGNvcHkgb2YgdGhlIGxpYnJhcnkgaW4geW91ciBvbGQgYXBwbGljYXRpb25zLAorYW5kIHVzZSB0aGUgbmV3IHZlcnNpb24gZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KKworVGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gcmV3cml0dGVuIGFuZCBncmVhdGx5IGV4cGFuZGVkIHdpdGggbWFueQorbW9yZSBleGFtcGxlcy4KKworQmVhdXRpZnVsIFNvdXAgYXV0b2RldGVjdHMgdGhlIGVuY29kaW5nIG9mIGEgZG9jdW1lbnQgKG9yIHVzZXMgdGhlIG9uZQoreW91IHNwZWNpZnkpLCBhbmQgY29udmVydHMgaXQgZnJvbSBpdHMgbmF0aXZlIGVuY29kaW5nIHRvCitVbmljb2RlLiBJbnRlcm5hbGx5LCBpdCBvbmx5IGRlYWxzIHdpdGggVW5pY29kZSBzdHJpbmdzLiBXaGVuIHlvdQorcHJpbnQgb3V0IHRoZSBkb2N1bWVudCwgaXQgY29udmVydHMgdG8gVVRGLTggKG9yIGFub3RoZXIgZW5jb2RpbmcgeW91CitzcGVjaWZ5KS4gW0RvYyByZWZlcmVuY2VdCisKK0l0J3Mgbm93IGVhc3kgdG8gbWFrZSBsYXJnZS1zY2FsZSBjaGFuZ2VzIHRvIHRoZSBwYXJzZSB0cmVlIHdpdGhvdXQKK3NjcmV3aW5nIHVwIHRoZSBuYXZpZ2F0aW9uIG1lbWJlcnMuIFRoZSBtZXRob2RzIGFyZSBleHRyYWN0LAorcmVwbGFjZVdpdGgsIGFuZCBpbnNlcnQuIFtEb2MgcmVmZXJlbmNlLiBTZWUgYWxzbyBJbXByb3ZpbmcgTWVtb3J5CitVc2FnZSB3aXRoIGV4dHJhY3RdCisKK1Bhc3NpbmcgVHJ1ZSBpbiBhcyBhbiBhdHRyaWJ1dGUgdmFsdWUgZ2l2ZXMgeW91IHRhZ3MgdGhhdCBoYXZlIGFueQordmFsdWUgZm9yIHRoYXQgYXR0cmlidXRlLiBZb3UgZG9uJ3QgaGF2ZSB0byBjcmVhdGUgYSByZWd1bGFyCitleHByZXNzaW9uLiBQYXNzaW5nIE5vbmUgZm9yIGFuIGF0dHJpYnV0ZSB2YWx1ZSBnaXZlcyB5b3UgdGFncyB0aGF0Citkb24ndCBoYXZlIHRoYXQgYXR0cmlidXRlIGF0IGFsbC4KKworVGFnIG9iamVjdHMgbm93IGtub3cgd2hldGhlciBvciBub3QgdGhleSdyZSBzZWxmLWNsb3NpbmcuIFRoaXMgYXZvaWRzCit0aGUgcHJvYmxlbSB3aGVyZSBCZWF1dGlmdWwgU291cCB0aG91Z2h0IHRoYXQgdGFncyBsaWtlIDxCUiAvPiB3ZXJlCitzZWxmLWNsb3NpbmcgZXZlbiBpbiBYTUwgZG9jdW1lbnRzLiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgc2VsZi1jbG9zaW5nCit0YWdzIGZvciBhIHBhcnNlciBvYmplY3QgYnkgcGFzc2luZyB0aGVtIGluIGFzIGEgbGlzdCBvZgorc2VsZkNsb3NpbmdUYWdzOiB5b3UgZG9uJ3QgaGF2ZSB0byBzdWJjbGFzcyBhbnltb3JlLgorCitUaGVyZSdzIGEgbmV3IGJ1aWx0LWluIHBhcnNlciwgTWluaW1hbFNvdXAsIHdoaWNoIGhhcyBtb3N0IG9mCitCZWF1dGlmdWxTb3VwJ3MgSFRNTC1zcGVjaWZpYyBydWxlcywgYnV0IG5vIHRhZyBuZXN0aW5nIHJ1bGVzLiBbRG9jCityZWZlcmVuY2VdCisKK1lvdSBjYW4gdXNlIGEgU291cFN0cmFpbmVyIHRvIHRlbGwgQmVhdXRpZnVsIFNvdXAgdG8gcGFyc2Ugb25seSBwYXJ0CitvZiBhIGRvY3VtZW50LiBUaGlzIHNhdmVzIHRpbWUgYW5kIG1lbW9yeSwgb2Z0ZW4gbWFraW5nIEJlYXV0aWZ1bCBTb3VwCithYm91dCBhcyBmYXN0IGFzIGEgY3VzdG9tLWJ1aWx0IFNHTUxQYXJzZXIgc3ViY2xhc3MuIFtEb2MgcmVmZXJlbmNlLAorU291cFN0cmFpbmVyIHJlZmVyZW5jZV0KKworWW91IGNhbiAodXN1YWxseSkgdXNlIGtleXdvcmQgYXJndW1lbnRzIGluc3RlYWQgb2YgcGFzc2luZyBhCitkaWN0aW9uYXJ5IG9mIGF0dHJpYnV0ZXMgdG8gYSBzZWFyY2ggbWV0aG9kLiBUaGF0IGlzLCB5b3UgY2FuIHJlcGxhY2UKK3NvdXAoYXJncz17ImlkIiA6ICI1In0pIHdpdGggc291cChpZD0iNSIpLiBZb3UgY2FuIHN0aWxsIHVzZSBhcmdzIGlmCisoZm9yIGluc3RhbmNlKSB5b3UgbmVlZCB0byBmaW5kIGFuIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGNsYXNoZXMgd2l0aAordGhlIG5hbWUgb2YgYW4gYXJndW1lbnQgdG8gZmluZEFsbC4gW0RvYyByZWZlcmVuY2U6ICoqa3dhcmdzIGF0dHJzXQorCitUaGUgbWV0aG9kIG5hbWVzIGhhdmUgY2hhbmdlZCB0byB0aGUgYmV0dGVyIG1ldGhvZCBuYW1lcyB1c2VkIGluCitSdWJ5ZnVsIFNvdXAuIEluc3RlYWQgb2YgZmluZCBtZXRob2RzIGFuZCBmZXRjaCBtZXRob2RzLCB0aGVyZSBhcmUKK29ubHkgZmluZCBtZXRob2RzLiBJbnN0ZWFkIG9mIGEgc2NoZW1lIHdoZXJlIHlvdSBjYW4ndCByZW1lbWJlciB3aGljaAorbWV0aG9kIGZpbmRzIG9uZSBlbGVtZW50IGFuZCB3aGljaCBvbmUgZmluZHMgdGhlbSBhbGwsIHdlIGhhdmUgZmluZAorYW5kIGZpbmRBbGwuIEluIGdlbmVyYWwsIGlmIHRoZSBtZXRob2QgbmFtZSBtZW50aW9ucyBBbGwgb3IgYSBwbHVyYWwKK25vdW4gKGVnLiBmaW5kTmV4dFNpYmxpbmdzKSwgdGhlbiBpdCBmaW5kcyBtYW55IGVsZW1lbnRzCittZXRob2QuIE90aGVyd2lzZSwgaXQgb25seSBmaW5kcyBvbmUgZWxlbWVudC4gW0RvYyByZWZlcmVuY2VdCisKK1NvbWUgb2YgdGhlIGFyZ3VtZW50IG5hbWVzIGhhdmUgYmVlbiByZW5hbWVkIGZvciBjbGFyaXR5LiBGb3IgaW5zdGFuY2UKK2F2b2lkUGFyc2VyUHJvYmxlbXMgaXMgbm93IHBhcnNlck1hc3NhZ2UuCisKK0JlYXV0aWZ1bCBTb3VwIG5vIGxvbmdlciBpbXBsZW1lbnRzIGEgZmVlZCBtZXRob2QuIFlvdSBuZWVkIHRvIHBhc3MgYQorc3RyaW5nIG9yIGEgZmlsZWhhbmRsZSBpbnRvIHRoZSBzb3VwIGNvbnN0cnVjdG9yLCBub3Qgd2l0aCBmZWVkIGFmdGVyCit0aGUgc291cCBoYXMgYmVlbiBjcmVhdGVkLiBUaGVyZSBpcyBzdGlsbCBhIGZlZWQgbWV0aG9kLCBidXQgaXQncyB0aGUKK2ZlZWQgbWV0aG9kIGltcGxlbWVudGVkIGJ5IFNHTUxQYXJzZXIgYW5kIGNhbGxpbmcgaXQgd2lsbCBieXBhc3MKK0JlYXV0aWZ1bCBTb3VwIGFuZCBjYXVzZSBwcm9ibGVtcy4KKworVGhlIE5hdmlnYWJsZVRleHQgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBOYXZpZ2FibGVTdHJpbmcuIFRoZXJlIGlzCitubyBOYXZpZ2FibGVVbmljb2RlU3RyaW5nIGFueW1vcmUsIGJlY2F1c2UgZXZlcnkgc3RyaW5nIGluc2lkZSBhCitCZWF1dGlmdWwgU291cCBwYXJzZSB0cmVlIGlzIGEgVW5pY29kZSBzdHJpbmcuCisKK2ZpbmRUZXh0IGFuZCBmZXRjaFRleHQgYXJlIGdvbmUuIEp1c3QgcGFzcyBhIHRleHQgYXJndW1lbnQgaW50byBmaW5kCitvciBmaW5kQWxsLgorCitOdWxsIHdhcyBtb3JlIHRyb3VibGUgdGhhbiBpdCB3YXMgd29ydGgsIHNvIEkgZ290IHJpZCBvZiBpdC4gQW55dGhpbmcKK3RoYXQgdXNlZCB0byByZXR1cm4gTnVsbCBub3cgcmV0dXJucyBOb25lLgorCitTcGVjaWFsIFhNTCBjb25zdHJ1Y3RzIGxpa2UgY29tbWVudHMgYW5kIENEQVRBIG5vdyBoYXZlIHRoZWlyIG93bgorTmF2aWdhYmxlU3RyaW5nIHN1YmNsYXNzZXMsIGluc3RlYWQgb2YgYmVpbmcgdHJlYXRlZCBhcyBvZGRseS1mb3JtZWQKK2RhdGEuIElmIHlvdSBwYXJzZSBhIGRvY3VtZW50IHRoYXQgY29udGFpbnMgQ0RBVEEgYW5kIHdyaXRlIGl0IGJhY2sKK291dCwgdGhlIENEQVRBIHdpbGwgc3RpbGwgYmUgdGhlcmUuCisKK1doZW4geW91J3JlIHBhcnNpbmcgYSBkb2N1bWVudCwgeW91IGNhbiBnZXQgQmVhdXRpZnVsIFNvdXAgdG8gY29udmVydAorWE1MIG9yIEhUTUwgZW50aXRpZXMgaW50byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuIFtEb2MKK3JlZmVyZW5jZV0KKworPSAyLjEuMSAoMjAwNTA5MTgpID0KKworRml4ZWQgYSBzZXJpb3VzIHBlcmZvcm1hbmNlIGJ1ZyBpbiBCZWF1dGlmdWxTdG9uZVNvdXAgd2hpY2ggd2FzCitjYXVzaW5nIHBhcnNpbmcgdG8gYmUgaW5jcmVkaWJseSBzbG93LgorCitDb3JyZWN0ZWQgc2V2ZXJhbCBlbnRpdGllcyB0aGF0IHdlcmUgcHJldmlvdXNseSBiZWluZyBpbmNvcnJlY3RseQordHJhbnNsYXRlZCBmcm9tIE1pY3Jvc29mdCBzbWFydC1xdW90ZS1saWtlIGNoYXJhY3RlcnMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgd2FzIGJyZWFraW5nIHRleHQgZmV0Y2guCisKK0ZpeGVkIGEgYnVnIHRoYXQgY3Jhc2hlZCB0aGUgcGFyc2VyIHdoZW4gdGV4dCBjaHVua3MgdGhhdCBsb29rIGxpa2UKK0hUTUwgdGFnIG5hbWVzIHNob3dlZCB1cCB3aXRoaW4gYSBTQ1JJUFQgdGFnLgorCitUSEVBRCwgVEJPRFksIGFuZCBURk9PVCB0YWdzIGFyZSBub3cgbmVzdGFibGUgd2l0aGluIFRBQkxFCit0YWdzLiBOZXN0ZWQgdGFibGVzIHNob3VsZCBwYXJzZSBtb3JlIHNlbnNpYmx5IG5vdy4KKworQkFTRSBpcyBub3cgY29uc2lkZXJlZCBhIHNlbGYtY2xvc2luZyB0YWcuCisKKz0gMi4xLjAgIkdhbWUsIG9yIGFueSBvdGhlciBkaXNoPyIgKDIwMDUwNTA0KSA9CisKK0FkZGVkIGEgd2lkZSB2YXJpZXR5IG9mIG5ldyBzZWFyY2ggbWV0aG9kcyB3aGljaCwgZ2l2ZW4gYSBzdGFydGluZworcG9pbnQgaW5zaWRlIHRoZSB0cmVlLCBmb2xsb3cgYSBwYXJ0aWN1bGFyIG5hdmlnYXRpb24gbWVtYmVyIChsaWtlCituZXh0U2libGluZykgb3ZlciBhbmQgb3ZlciBhZ2FpbiwgbG9va2luZyBmb3IgVGFnIGFuZCBOYXZpZ2FibGVUZXh0CitvYmplY3RzIHRoYXQgbWF0Y2ggY2VydGFpbiBjcml0ZXJpYS4gVGhlIG5ldyBtZXRob2RzIGFyZSBmaW5kTmV4dCwKK2ZldGNoTmV4dCwgZmluZFByZXZpb3VzLCBmZXRjaFByZXZpb3VzLCBmaW5kTmV4dFNpYmxpbmcsCitmZXRjaE5leHRTaWJsaW5ncywgZmluZFByZXZpb3VzU2libGluZywgZmV0Y2hQcmV2aW91c1NpYmxpbmdzLAorZmluZFBhcmVudCwgYW5kIGZldGNoUGFyZW50cy4gQWxsIG9mIHRoZXNlIHVzZSB0aGUgc2FtZSBiYXNpYyBjb2RlCit1c2VkIGJ5IGZpcnN0IGFuZCBmZXRjaCwgc28geW91IGNhbiBwYXNzIHlvdXIgd2VpcmQgd2F5cyBvZiBtYXRjaGluZwordGhpbmdzIGludG8gdGhlc2UgbWV0aG9kcy4KKworVGhlIGZldGNoIG1ldGhvZCBhbmQgaXRzIGRlcml2YXRpdmVzIG5vdyBhY2NlcHQgYSBsaW1pdCBhcmd1bWVudC4KKworWW91IGNhbiBub3cgcGFzcyBrZXl3b3JkIGFyZ3VtZW50cyB3aGVuIGNhbGxpbmcgYSBUYWcgb2JqZWN0IGFzIHRob3VnaAoraXQgd2VyZSBhIG1ldGhvZC4KKworRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgYWxsIGhhbmQtY3JlYXRlZCB0YWdzIHRvIHNoYXJlIGEgc2luZ2xlIHNldCBvZgorYXR0cmlidXRlcy4KKworPSAyLjAuMyAoMjAwNTA1MDEpID0KKworRml4ZWQgUHl0aG9uIDIuMiBzdXBwb3J0IGZvciBpdGVyYXRvcnMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgZ2F2ZSB0aGUgd3JvbmcgcmVwcmVzZW50YXRpb24gdG8gdGFncyB3aXRoaW4gcXVvdGUKK3RhZ3MgbGlrZSA8c2NyaXB0Pi4KKworVG9vayBzb21lIGNvZGUgZnJvbSBNYXJrIFBpbGdyaW0gdGhhdCB0cmVhdHMgQ0RBVEEgZGVjbGFyYXRpb25zIGFzCitkYXRhIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbS4KKworQmVhdXRpZnVsIFNvdXAncyBzZXR1cC5weSB3aWxsIG5vdyBkbyBhbiBpbnN0YWxsIGV2ZW4gaWYgdGhlIHVuaXQKK3Rlc3RzIGZhaWwuIEl0IHdvbid0IGJ1aWxkIGEgc291cmNlIGRpc3RyaWJ1dGlvbiBpZiB0aGUgdW5pdCB0ZXN0cworZmFpbCwgc28gSSBjYW4ndCByZWxlYXNlIGEgbmV3IHZlcnNpb24gdW5sZXNzIHRoZXkgcGFzcy4KKworPSAyLjAuMiAoMjAwNTA0MTYpID0KKworQWRkZWQgdGhlIHVuaXQgdGVzdHMgaW4gYSBzZXBhcmF0ZSBtb2R1bGUsIGFuZCBwYWNrYWdlZCBpdCB3aXRoCitkaXN0dXRpbHMuCisKK0ZpeGVkIGEgYnVnIHRoYXQgc29tZXRpbWVzIGNhdXNlZCByZW5kZXJDb250ZW50cygpIHRvIHJldHVybiBhIFVuaWNvZGUKK3N0cmluZyBldmVuIGlmIHRoZXJlIHdhcyBubyBVbmljb2RlIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcuCisKK0FkZGVkIHRoZSBkb25lKCkgbWV0aG9kLCB3aGljaCBjbG9zZXMgYWxsIG9mIHRoZSBwYXJzZXIncyBvcGVuCit0YWdzLiBJdCBnZXRzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IHBhc3MgaW4gc29tZSB0ZXh0IHRvIHRoZQorY29uc3RydWN0b3Igb2YgYSBwYXJzZXIgY2xhc3M7IG90aGVyd2lzZSB5b3UgbXVzdCBjYWxsIGl0IHlvdXJzZWxmLgorCitSZWluc3RhdGVkIHNvbWUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAxLnggdmVyc2lvbnM6IHJlZmVyZW5jaW5nCit0aGUgc3RyaW5nIG1lbWJlciBvZiBhIE5hdmlnYWJsZVRleHQgb2JqZWN0IHJldHVybnMgdGhlIE5hdmlnYWJsZVRleHQKK29iamVjdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLgorCis9IDIuMC4xICgyMDA1MDQxMikgPQorCitGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBiYWQgcmVzdWx0cyB3aGVuIHlvdSB0cmllZCB0byByZWZlcmVuY2UgYSB0YWcKK25hbWUgc2hvcnRlciB0aGFuIDMgY2hhcmFjdGVycyBhcyBhIG1lbWJlciBvZiBhIFRhZywgZWcuIHRhZy50YWJsZS50ZC4KKworTWFkZSBzdXJlIGFsbCBUYWdzIGhhdmUgdGhlICdoaWRkZW4nIGF0dHJpYnV0ZSBzbyB0aGF0IGFuIGF0dGVtcHQgdG8KK2FjY2VzcyB0YWcuaGlkZGVuIGRvZXNuJ3Qgc3Bhd24gYW4gYXR0ZW1wdCB0byBmaW5kIGEgdGFnIG5hbWVkCisnaGlkZGVuJy4KKworRml4ZWQgYSBidWcgaW4gdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IuCisKKz0gMi4wLjAgIldobyBjYXJlcyBmb3IgZmlzaD8iICgyMDA1MDQxMCkKKworQmVhdXRpZnVsIFNvdXAgdmVyc2lvbiAxIHdhcyB2ZXJ5IHVzZWZ1bCBidXQgYWxzbyBwcmV0dHkgc3R1cGlkLiBJCitvcmlnaW5hbGx5IHdyb3RlIGl0IHdpdGhvdXQgbm90aWNpbmcgYW55IG9mIHRoZSBwcm9ibGVtcyBpbmhlcmVudCBpbgordHJ5aW5nIHRvIGJ1aWxkIGEgcGFyc2UgdHJlZSBvdXQgb2YgYW1iaWd1b3VzIEhUTUwgdGFncy4gVGhpcyB2ZXJzaW9uCitzb2x2ZXMgYWxsIG9mIHRob3NlIHByb2JsZW1zIHRvIG15IHNhdGlzZmFjdGlvbi4gSXQgYWxzbyBhZGRzIG1hbnkgbmV3CitjbGV2ZXIgdGhpbmdzIHRvIG1ha2UgdXAgZm9yIHRoZSByZW1vdmFsIG9mIHRoZSBzdHVwaWQgdGhpbmdzLgorCis9PSBQYXJzaW5nID09CisKK1RoZSBwYXJzZXIgbG9naWMgaGFzIGJlZW4gZ3JlYXRseSBpbXByb3ZlZCwgYW5kIHRoZSBCZWF1dGlmdWxTb3VwCitjbGFzcyBzaG91bGQgbXVjaCBtb3JlIHJlbGlhYmx5IHlpZWxkIGEgcGFyc2UgdHJlZSB0aGF0IGxvb2tzIGxpa2UKK3doYXQgdGhlIHBhZ2UgYXV0aG9yIGludGVuZGVkLiBGb3IgYSBwYXJ0aWN1bGFyIGNsYXNzIG9mIG9kZCBlZGdlCitjYXNlcyB0aGF0IG5vdyBjYXVzZXMgcHJvYmxlbXMsIHRoZXJlIGlzIGEgbmV3IGNsYXNzLAorSUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cC4KKworQnkgZGVmYXVsdCwgQmVhdXRpZnVsIFNvdXAgbm93IHBlcmZvcm1zIHNvbWUgY2xlYW51cCBvcGVyYXRpb25zIG9uCit0ZXh0IGJlZm9yZSBwYXJzaW5nIGl0LiBUaGlzIGlzIHRvIGF2b2lkIGNvbW1vbiBwcm9ibGVtcyB3aXRoIGJhZAorZGVmaW5pdGlvbnMgYW5kIHNlbGYtY2xvc2luZyB0YWdzIHRoYXQgY3Jhc2ggU0dNTFBhcnNlci4gWW91IGNhbgorcHJvdmlkZSB5b3VyIG93biBzZXQgb2YgY2xlYW51cCBvcGVyYXRpb25zLCBvciB0dXJuIGl0IG9mZgorYWx0b2dldGhlci4gVGhlIGNsZWFudXAgb3BlcmF0aW9ucyBpbmNsdWRlIGZpeGluZyBzZWxmLWNsb3NpbmcgdGFncwordGhhdCBkb24ndCBjbG9zZSwgYW5kIHJlcGxhY2luZyBNaWNyb3NvZnQgc21hcnQgcXVvdGVzIGFuZCBzaW1pbGFyCitjaGFyYWN0ZXJzIHdpdGggdGhlaXIgSFRNTCBlbnRpdHkgZXF1aXZhbGVudHMuCisKK1lvdSBjYW4gbm93IGdldCBhIHByZXR0eS1wcmludCB2ZXJzaW9uIG9mIHBhcnNlZCBIVE1MIHRvIGdldCBhIHZpc3VhbAorcGljdHVyZSBvZiBob3cgQmVhdXRpZnVsIFNvdXAgcGFyc2VzIGl0LCB3aXRoIHRoZSBUYWcucHJldHRpZnkoKQorbWV0aG9kLgorCis9PSBTdHJpbmdzIGFuZCBVbmljb2RlID09CisKK1RoZXJlIGFyZSBzZXBhcmF0ZSBOYXZpZ2FibGVUZXh0IHN1YmNsYXNzZXMgZm9yIEFTQ0lJIGFuZCBVbmljb2RlCitzdHJpbmdzLiBUaGVzZSBjbGFzc2VzIGRpcmVjdGx5IHN1YmNsYXNzIHRoZSBjb3JyZXNwb25kaW5nIGJhc2UgZGF0YQordHlwZXMuIFRoaXMgbWVhbnMgeW91IGNhbiB0cmVhdCBOYXZpZ2FibGVUZXh0IG9iamVjdHMgYXMgc3RyaW5ncworaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2FsbCBtZXRob2RzIG9uIHRoZW0gdG8gZ2V0IHRoZSBzdHJpbmdzLgorCitzdHIoKSBvbiBhIFRhZyBhbHdheXMgcmV0dXJucyBhIHN0cmluZywgYW5kIHVuaWNvZGUoKSBhbHdheXMgcmV0dXJucworVW5pY29kZS4gUHJldmlvdXNseSBpdCB3YXMgaW5jb25zaXN0ZW50LgorCis9PSBUcmVlIHRyYXZlcnNhbCA9PQorCitJbiBhIGZpcnN0KCkgb3IgZmV0Y2goKSBjYWxsLCB0aGUgdGFnIG5hbWUgb3IgdGhlIGRlc2lyZWQgdmFsdWUgb2YgYW4KK2F0dHJpYnV0ZSBjYW4gbm93IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisgKiBBIHN0cmluZyAobWF0Y2hlcyB0aGF0IHNwZWNpZmljIHRhZyBvciB0aGF0IHNwZWNpZmljIGF0dHJpYnV0ZSB2YWx1ZSkKKyAqIEEgbGlzdCBvZiBzdHJpbmdzIChtYXRjaGVzIGFueSB0YWcgb3IgYXR0cmlidXRlIHZhbHVlIGluIHRoZSBsaXN0KQorICogQSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IChtYXRjaGVzIGFueSB0YWcgb3IgYXR0cmlidXRlCisgICB2YWx1ZSB0aGF0IG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbikKKyAqIEEgY2FsbGFibGUgb2JqZWN0IHRoYXQgdGFrZXMgdGhlIFRhZyBvYmplY3Qgb3IgYXR0cmlidXRlIHZhbHVlIGFzIGEKKyAgIHN0cmluZy4gSXQgcmV0dXJucyBOb25lL2ZhbHNlL2VtcHR5IHN0cmluZyBpZiB0aGUgZ2l2ZW4gc3RyaW5nCisgICBkb2Vzbid0IG1hdGNoLCBhbmQgYW55IG90aGVyIHZhbHVlIGlmIGl0IGRvZXMuCisKK1RoaXMgaXMgbXVjaCBlYXNpZXIgdG8gdXNlIHRoYW4gU1FMLXN0eWxlIHdpbGRjYXJkcyAoc2VlLCByZWd1bGFyCitleHByZXNzaW9ucyBhcmUgZ29vZCBmb3Igc29tZXRoaW5nKS4gQmVjYXVzZSBvZiB0aGlzLCBJIHRvb2sgb3V0CitTUUwtc3R5bGUgd2lsZGNhcmRzLiBJJ2xsIHB1dCB0aGVtIGJhY2sgaWYgc29tZW9uZSBjb21wbGFpbnMsIGJ1dAordGhlaXIgcmVtb3ZhbCBzaW1wbGlmaWVzIHRoZSBjb2RlIGEgbG90LgorCitZb3UgY2FuIHVzZSBmZXRjaCgpIGFuZCBmaXJzdCgpIHRvIHNlYXJjaCBmb3IgdGV4dCBpbiB0aGUgcGFyc2UgdHJlZSwKK25vdCBqdXN0IHRhZ3MuIFRoZXJlIGFyZSBuZXcgYWxpYXMgbWV0aG9kcyBmZXRjaFRleHQoKSBhbmQgZmlyc3RUZXh0KCkKK2Rlc2lnbmVkIGZvciB0aGlzIHB1cnBvc2UuIEFzIHdpdGggc2VhcmNoaW5nIGZvciB0YWdzLCB5b3UgY2FuIHBhc3MgaW4KK2Egc3RyaW5nLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIG9yIGEgbWV0aG9kIHRvIG1hdGNoIHlvdXIgdGV4dC4KKworSWYgeW91IHBhc3MgaW4gc29tZXRoaW5nIGJlc2lkZXMgYSBtYXAgdG8gdGhlIGF0dHJzIGFyZ3VtZW50IG9mCitmZXRjaCgpIG9yIGZpcnN0KCksIEJlYXV0aWZ1bCBTb3VwIHdpbGwgYXNzdW1lIHlvdSB3YW50IHRvIG1hdGNoIHRoYXQKK3RoaW5nIGFnYWluc3QgdGhlICJjbGFzcyIgYXR0cmlidXRlLiBXaGVuIHlvdSdyZSBzY3JhcGluZword2VsbC1zdHJ1Y3R1cmVkIEhUTUwsIHRoaXMgbWFrZXMgeW91ciBjb2RlIGEgbG90IGNsZWFuZXIuCisKKzEueCBhbmQgMi54IGJvdGggbGV0IHlvdSBjYWxsIGEgVGFnIG9iamVjdCBhcyBhIHNob3J0aGFuZCBmb3IKK2ZldGNoKCkuIEZvciBpbnN0YW5jZSwgZm9vKCJiYXIiKSBpcyBhIHNob3J0aGFuZCBmb3IKK2Zvby5mZXRjaCgiYmFyIikuIEluIDIueCwgeW91IGNhbiBhbHNvIGFjY2VzcyBhIHNwZWNpYWxseS1uYW1lZCBtZW1iZXIKK29mIGEgVGFnIG9iamVjdCBhcyBhIHNob3J0aGFuZCBmb3IgZmlyc3QoKS4gRm9yIGluc3RhbmNlLCBmb28uYmFyVGFnCitpcyBhIHNob3J0aGFuZCBmb3IgZm9vLmZpcnN0KCJiYXIiKS4gQnkgY2hhaW5pbmcgdGhlc2Ugc2hvcnRjdXRzIHlvdQordHJhdmVyc2UgYSB0cmVlIGluIHZlcnkgbGl0dGxlIGNvZGU6IGZvciBoZWFkZXIgaW4KK3NvdXAuYm9keVRhZy5wVGFnLnRhYmxlVGFnKCd0aCcpOgorCitJZiBhbiBlbGVtZW50IHJlbGF0aW9uc2hpcCAobGlrZSBwYXJlbnQgb3IgbmV4dCkgZG9lc24ndCBhcHBseSB0byBhCit0YWcsIGl0J2xsIG5vdyBzaG93IHVwIE51bGwgaW5zdGVhZCBvZiBOb25lLiBmaXJzdCgpIHdpbGwgYWxzbyByZXR1cm4KK051bGwgaWYgeW91IGFzayBpdCBmb3IgYSBub25leGlzdGVudCB0YWcuIE51bGwgaXMgYW4gb2JqZWN0IHRoYXQncworanVzdCBsaWtlIE5vbmUsIGV4Y2VwdCB5b3UgY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHRvIGl0IGFuZCBpdCdsbAorZ2l2ZSB5b3UgTnVsbCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLgorCitUaGlzIGxldHMgeW91IGRvIHRyZWUgdHJhdmVyc2FscyBsaWtlIHNvdXAuaHRtbFRhZy5oZWFkVGFnLnRpdGxlVGFnCit3aXRob3V0IGhhdmluZyB0byB3b3JyeSBpZiB0aGUgaW50ZXJtZWRpYXRlIHN0YWdlcyBhcmUgYWN0dWFsbHkKK3RoZXJlLiBQcmV2aW91c2x5LCBpZiB0aGVyZSB3YXMgbm8gJ2hlYWQnIHRhZyBpbiB0aGUgZG9jdW1lbnQsIGhlYWRUYWcKK2luIHRoYXQgaW5zdGFuY2Ugd291bGQgaGF2ZSBiZWVuIE5vbmUsIGFuZCBhY2Nlc3NpbmcgaXRzICd0aXRsZVRhZycKK21lbWJlciB3b3VsZCBoYXZlIHRocm93biBhbiBBdHRyaWJ1dGVFcnJvci4gTm93LCB5b3UgY2FuIGdldCB3aGF0IHlvdQord2FudCB3aGVuIGl0IGV4aXN0cywgYW5kIGdldCBOdWxsIHdoZW4gaXQgZG9lc24ndCwgd2l0aG91dCBoYXZpbmcgdG8KK2RvIGEgbG90IG9mIGNvbmRpdGlvbmFscyBjaGVja2luZyB0byBzZWUgaWYgZXZlcnkgc3RhZ2UgaXMgTm9uZS4KKworVGhlcmUgYXJlIHR3byBuZXcgcmVsYXRpb25zIGJldHdlZW4gcGFnZSBlbGVtZW50czogcHJldmlvdXNTaWJsaW5nIGFuZAorbmV4dFNpYmxpbmcuIFRoZXkgcmVmZXJlbmNlIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBlbGVtZW50IGF0IHRoZSBzYW1lCitsZXZlbCBvZiB0aGUgcGFyc2UgdHJlZS4gRm9yIGluc3RhbmNlLCBpZiB5b3UgaGF2ZSBIVE1MIGxpa2UgdGhpczoKKworICA8cD48dWw+PGxpPkZvbzxiciAvPjxsaT5CYXI8L3VsPgorCitUaGUgZmlyc3QgJ2xpJyB0YWcgaGFzIGEgcHJldmlvdXNTaWJsaW5nIG9mIE51bGwgYW5kIGl0cyBuZXh0U2libGluZworaXMgdGhlIHNlY29uZCAnbGknIHRhZy4gVGhlIHNlY29uZCAnbGknIHRhZyBoYXMgYSBuZXh0U2libGluZyBvZiBOdWxsCithbmQgaXRzIHByZXZpb3VzU2libGluZyBpcyB0aGUgZmlyc3QgJ2xpJyB0YWcuIFRoZSBwcmV2aW91c1NpYmxpbmcgb2YKK3RoZSAndWwnIHRhZyBpcyB0aGUgZmlyc3QgJ3AnIHRhZy4gVGhlIG5leHRTaWJsaW5nIG9mICdGb28nIGlzIHRoZQorJ2JyJyB0YWcuCisKK0kgdG9vayBvdXQgdGhlIGFiaWxpdHkgdG8gdXNlIGZldGNoKCkgdG8gZmluZCB0YWdzIHRoYXQgaGF2ZSBhCitzcGVjaWZpYyBsaXN0IG9mIGNvbnRlbnRzLiBTZWUsIEkgY2FuJ3QgZXZlbiBleHBsYWluIGl0IHdlbGwuIEl0IHdhcworcmVhbGx5IGRpZmZpY3VsdCB0byB1c2UsIEkgbmV2ZXIgdXNlZCBpdCwgYW5kIEkgZG9uJ3QgdGhpbmsgYW55b25lCitlbHNlIGV2ZXIgdXNlZCBpdC4gVG8gdGhlIGV4dGVudCBhbnlvbmUgZGlkLCB0aGV5IGNhbiBwcm9iYWJseSB1c2UKK2ZldGNoVGV4dCgpIGluc3RlYWQuIElmIGl0IHR1cm5zIG91dCBzb21lb25lIG5lZWRzIGl0IEknbGwgdGhpbmsgb2YKK2Fub3RoZXIgc29sdXRpb24uCisKKz09IFRyZWUgbWFuaXB1bGF0aW9uID09CisKK1lvdSBjYW4gYWRkIG5ldyBhdHRyaWJ1dGVzIHRvIGEgdGFnLCBhbmQgZGVsZXRlIGF0dHJpYnV0ZXMgZnJvbSBhCit0YWcuIEluIDEueCB5b3UgY291bGQgb25seSBjaGFuZ2UgYSB0YWcncyBleGlzdGluZyBhdHRyaWJ1dGVzLgorCis9PSBQb3J0aW5nIENvbnNpZGVyYXRpb25zID09CisKK1RoZXJlIGFyZSB0aHJlZSBjaGFuZ2VzIGluIDIuMCB0aGF0IGJyZWFrIG9sZCBjb2RlOgorCitJbiB0aGUgcG9zdC0xLjIgcmVsZWFzZSB5b3UgY291bGQgcGFzcyBpbiBhIGZ1bmN0aW9uIGludG8gZmV0Y2goKS4gVGhlCitmdW5jdGlvbiB0b29rIGEgc3RyaW5nLCB0aGUgdGFnIG5hbWUuIEluIDIuMCwgdGhlIGZ1bmN0aW9uIHRha2VzIHRoZQorYWN0dWFsIFRhZyBvYmplY3QuCisKK0l0J3Mgbm8gbG9uZ2VyIHRvIHBhc3MgaW4gU1FMLXN0eWxlIHdpbGRjYXJkcyB0byBmZXRjaCgpLiBVc2UgYQorcmVndWxhciBleHByZXNzaW9uIGluc3RlYWQuCisKK1RoZSBkaWZmZXJlbnQgcGFyc2luZyBhbGdvcml0aG0gbWVhbnMgdGhlIHBhcnNlIHRyZWUgbWF5IG5vdCBiZSBzaGFwZWQKK2xpa2UgeW91IGV4cGVjdC4gVGhpcyB3aWxsIG9ubHkgYWN0dWFsbHkgYWZmZWN0IHlvdSBpZiB5b3VyIGNvZGUgdXNlcworb25lIG9mIHRoZSBhZmZlY3RlZCBwYXJ0cy4gSSBoYXZlbid0IHJ1biBpbnRvIHRoaXMgcHJvYmxlbSB5ZXQgd2hpbGUKK3BvcnRpbmcgbXkgY29kZS4KKworPSBCZXR3ZWVuIDEuMiBhbmQgMi4wID0KKworVGhpcyBpcyB0aGUgcmVsZWFzZSB0byBnZXQgaWYgeW91IHdhbnQgUHl0aG9uIDEuNSBjb21wYXRpYmlsaXR5LgorCitUaGUgZGVzaXJlZCB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgY2FuIG5vdyBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICogQSBzdHJpbmcKKyAqIEEgc3RyaW5nIHdpdGggU1FMLXN0eWxlIHdpbGRjYXJkcworICogQSBjb21waWxlZCBSRSBvYmplY3QKKyAqIEEgY2FsbGFibGUgdGhhdCByZXR1cm5zIE5vbmUvZmFsc2UvZW1wdHkgc3RyaW5nIGlmIHRoZSBnaXZlbiB2YWx1ZQorICAgZG9lc24ndCBtYXRjaCwgYW5kIGFueSBvdGhlciB2YWx1ZSBvdGhlcndpc2UuCisKK1RoaXMgaXMgbXVjaCBlYXNpZXIgdG8gdXNlIHRoYW4gU1FMLXN0eWxlIHdpbGRjYXJkcyAoc2VlLCByZWd1bGFyCitleHByZXNzaW9ucyBhcmUgZ29vZCBmb3Igc29tZXRoaW5nKS4gQmVjYXVzZSBvZiB0aGlzLCBJIG5vIGxvbmdlcgorcmVjb21tZW5kIHlvdSB1c2UgU1FMLXN0eWxlIHdpbGRjYXJkcy4gVGhleSBtYXkgZ28gYXdheSBpbiBhIGZ1dHVyZQorcmVsZWFzZSB0byBjbGVhbiB1cCB0aGUgY29kZS4KKworTWFkZSBCZWF1dGlmdWwgU291cCBoYW5kbGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYXMgdGV4dCBpbnN0ZWFkIG9mCitpZ25vcmluZyB0aGVtLgorCitBcHBsaWVkIHBhdGNoIGZyb20gUmljaGllIEhpbmRsZSAocmljaGllIGF0IGVudHJpYW4gZG90IGNvbSkgdGhhdAorbWFrZXMgdGFnLnN0cmluZyBhIHNob3J0aGFuZCBmb3IgdGFnLmNvbnRlbnRzWzBdLnN0cmluZyB3aGVuIHRoZSB0YWcKK2hhcyBvbmx5IG9uZSBzdHJpbmctb3duaW5nIGNoaWxkLgorCitBZGRlZCBzdGlsbCBtb3JlIG5lc3RhYmxlIHRhZ3MuIFRoZSBuZXN0YWJsZSB0YWdzIHRoaW5nIHdvbid0IHdvcmsgaW4KK2EgbG90IG9mIGNhc2VzIGFuZCBuZWVkcyB0byBiZSByZXRob3VnaHQuCisKK0ZpeGVkIGFuIGVkZ2UgY2FzZSB3aGVyZSBzZWFyY2hpbmcgZm9yICIlZm9vIiB3b3VsZCBtYXRjaCBhbnkgc3RyaW5nCitzaG9ydGVyIHRoYW4gImZvbyIuCisKKz0gMS4yICJXaG8gZm9yIHN1Y2ggZGFpbnRpZXMgd291bGQgbm90IHN0b29wPyIgKDIwMDQwNzA4KSA9CisKK0FwcGxpZWQgcGF0Y2ggZnJvbSBCZW4gTGFzdCAoYmVuIGF0IGJlbmxhc3QgZG90IGNvbSkgdGhhdCBtYWRlCitUYWcucmVuZGVyQ29udGVudHMoKSBjb3JyZWN0bHkgaGFuZGxlIFVuaWNvZGUuCisKK01hZGUgQmVhdXRpZnVsU3RvbmVTb3VwIGV2ZW4gZHVtYmVyIGJ5IG1ha2luZyBpdCBub3QgaW1wbGljaXRseSBjbG9zZQorYSB0YWcgd2hlbiBhbm90aGVyIHRhZyBvZiB0aGUgc2FtZSB0eXBlIGlzIGVuY291bnRlcmVkOyBvbmx5IHdoZW4gYW4KK2FjdHVhbCBjbG9zaW5nIHRhZyBpcyBlbmNvdW50ZXJlZC4gVGhpcyBjaGFuZ2UgY291cnRlc3kgb2YgRnV6enkgKG1pa2UKK2F0IHBjYmxva2VzIGRvdCBjb20pLiBCZWF1dGlmdWxTb3VwIHN0aWxsIHdvcmtzIGFzIGJlZm9yZS4KKworPSAxLjEgIlN3aW1taW5nIGluIGEgaG90IHR1cmVlbiIgPQorCitBZGRlZCBtb3JlICduZXN0YWJsZScgdGFncy4gQ2hhbmdlZCBwb3BwaW5nIHNlbWFudGljcyBzbyB0aGF0IHdoZW4gYQorbmVzdGFibGUgdGFnIGlzIGVuY291bnRlcmVkLCB0YWdzIGFyZSBwb3BwZWQgdXAgdG8gdGhlIHByZXZpb3VzbHkKK2VuY291bnRlcmVkIG5lc3RhYmxlIHRhZyAob2Ygd2hhdGV2ZXIga2luZCkuIEkgd2lsbCByZXZlcnQgdGhpcyBpZgorZW5vdWdoIHBlb3BsZSBjb21wbGFpbiwgYnV0IGl0IHNob3VsZCBtYWtlIG1vcmUgcGVvcGxlJ3MgbGl2ZXMgZWFzaWVyCit0aGFuIGhhcmRlci4gVGhpcyBlbmhhbmNlbWVudCB3YXMgc3VnZ2VzdGVkIGJ5IEFudGhvbnkgQmF4dGVyIChhbnRob255CithdCBpbnRlcmxpbmsgZG90IGNvbSBkb3QgYXUpLgorCis9IDEuMCAiU28gcmljaCBhbmQgZ3JlZW4iICgyMDA0MDQyMCkgPQorCitJbml0aWFsIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi9iczQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhMzQyNgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JzNC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQwNiBAQAorIiIiQmVhdXRpZnVsIFNvdXAKK0VsaXhpciBhbmQgVG9uaWMKKyJUaGUgU2NyZWVuLVNjcmFwZXIncyBGcmllbmQiCitodHRwOi8vd3d3LmNydW1teS5jb20vc29mdHdhcmUvQmVhdXRpZnVsU291cC8KKworQmVhdXRpZnVsIFNvdXAgdXNlcyBhIHBsdWdnYWJsZSBYTUwgb3IgSFRNTCBwYXJzZXIgdG8gcGFyc2UgYQorKHBvc3NpYmx5IGludmFsaWQpIGRvY3VtZW50IGludG8gYSB0cmVlIHJlcHJlc2VudGF0aW9uLiBCZWF1dGlmdWwgU291cAorcHJvdmlkZXMgcHJvdmlkZXMgbWV0aG9kcyBhbmQgUHl0aG9uaWMgaWRpb21zIHRoYXQgbWFrZSBpdCBlYXN5IHRvCituYXZpZ2F0ZSwgc2VhcmNoLCBhbmQgbW9kaWZ5IHRoZSBwYXJzZSB0cmVlLgorCitCZWF1dGlmdWwgU291cCB3b3JrcyB3aXRoIFB5dGhvbiAyLjYgYW5kIHVwLiBJdCB3b3JrcyBiZXR0ZXIgaWYgbHhtbAorYW5kL29yIGh0bWw1bGliIGlzIGluc3RhbGxlZC4KKworRm9yIG1vcmUgdGhhbiB5b3UgZXZlciB3YW50ZWQgdG8ga25vdyBhYm91dCBCZWF1dGlmdWwgU291cCwgc2VlIHRoZQorZG9jdW1lbnRhdGlvbjoKK2h0dHA6Ly93d3cuY3J1bW15LmNvbS9zb2Z0d2FyZS9CZWF1dGlmdWxTb3VwL2JzNC9kb2MvCisiIiIKKworX19hdXRob3JfXyA9ICJMZW9uYXJkIFJpY2hhcmRzb24gKGxlb25hcmRyQHNlZ2ZhdWx0Lm9yZykiCitfX3ZlcnNpb25fXyA9ICI0LjMuMiIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMTMgTGVvbmFyZCBSaWNoYXJkc29uIgorX19saWNlbnNlX18gPSAiTUlUIgorCitfX2FsbF9fID0gWydCZWF1dGlmdWxTb3VwJ10KKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC5idWlsZGVyIGltcG9ydCBidWlsZGVyX3JlZ2lzdHJ5LCBQYXJzZXJSZWplY3RlZE1hcmt1cAorZnJvbSAuZGFtbWl0IGltcG9ydCBVbmljb2RlRGFtbWl0Citmcm9tIC5lbGVtZW50IGltcG9ydCAoCisgICAgQ0RhdGEsCisgICAgQ29tbWVudCwKKyAgICBERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICBEZWNsYXJhdGlvbiwKKyAgICBEb2N0eXBlLAorICAgIE5hdmlnYWJsZVN0cmluZywKKyAgICBQYWdlRWxlbWVudCwKKyAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sCisgICAgUmVzdWx0U2V0LAorICAgIFNvdXBTdHJhaW5lciwKKyAgICBUYWcsCisgICAgKQorCisjIFRoZSB2ZXJ5IGZpcnN0IHRoaW5nIHdlIGRvIGlzIGdpdmUgYSB1c2VmdWwgZXJyb3IgaWYgc29tZW9uZSBpcworIyBydW5uaW5nIHRoaXMgY29kZSB1bmRlciBQeXRob24gMyB3aXRob3V0IGNvbnZlcnRpbmcgaXQuCitzeW50YXhfZXJyb3IgPSB1J1lvdSBhcmUgdHJ5aW5nIHRvIHJ1biB0aGUgUHl0aG9uIDIgdmVyc2lvbiBvZiBCZWF1dGlmdWwgU291cCB1bmRlciBQeXRob24gMy4gVGhpcyB3aWxsIG5vdCB3b3JrLiBZb3UgbmVlZCB0byBjb252ZXJ0IHRoZSBjb2RlLCBlaXRoZXIgYnkgaW5zdGFsbGluZyBpdCAoYHB5dGhvbiBzZXR1cC5weSBpbnN0YWxsYCkgb3IgYnkgcnVubmluZyAydG8zIChgMnRvMyAtdyBiczRgKS4nCisKK2NsYXNzIEJlYXV0aWZ1bFNvdXAoVGFnKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGJhc2ljIGludGVyZmFjZSBjYWxsZWQgYnkgdGhlIHRyZWUgYnVpbGRlcnMuCisKKyAgICBUaGVzZSBtZXRob2RzIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBwYXJzZXI6CisgICAgICByZXNldCgpCisgICAgICBmZWVkKG1hcmt1cCkKKworICAgIFRoZSB0cmVlIGJ1aWxkZXIgbWF5IGNhbGwgdGhlc2UgbWV0aG9kcyBmcm9tIGl0cyBmZWVkKCkgaW1wbGVtZW50YXRpb246CisgICAgICBoYW5kbGVfc3RhcnR0YWcobmFtZSwgYXR0cnMpICMgU2VlIG5vdGUgYWJvdXQgcmV0dXJuIHZhbHVlCisgICAgICBoYW5kbGVfZW5kdGFnKG5hbWUpCisgICAgICBoYW5kbGVfZGF0YShkYXRhKSAjIEFwcGVuZHMgdG8gdGhlIGN1cnJlbnQgZGF0YSBub2RlCisgICAgICBlbmREYXRhKGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZykgIyBFbmRzIHRoZSBjdXJyZW50IGRhdGEgbm9kZQorCisgICAgTm8gbWF0dGVyIGhvdyBjb21wbGljYXRlZCB0aGUgdW5kZXJseWluZyBwYXJzZXIgaXMsIHlvdSBzaG91bGQgYmUKKyAgICBhYmxlIHRvIGJ1aWxkIGEgdHJlZSB1c2luZyAnc3RhcnQgdGFnJyBldmVudHMsICdlbmQgdGFnJyBldmVudHMsCisgICAgJ2RhdGEnIGV2ZW50cywgYW5kICJkb25lIHdpdGggZGF0YSIgZXZlbnRzLgorCisgICAgSWYgeW91IGVuY291bnRlciBhbiBlbXB0eS1lbGVtZW50IHRhZyAoYWthIGEgc2VsZi1jbG9zaW5nIHRhZywKKyAgICBsaWtlIEhUTUwncyA8YnI+IHRhZyksIGNhbGwgaGFuZGxlX3N0YXJ0dGFnIGFuZCB0aGVuCisgICAgaGFuZGxlX2VuZHRhZy4KKyAgICAiIiIKKyAgICBST09UX1RBR19OQU1FID0gdSdbZG9jdW1lbnRdJworCisgICAgIyBJZiB0aGUgZW5kLXVzZXIgZ2l2ZXMgbm8gaW5kaWNhdGlvbiB3aGljaCB0cmVlIGJ1aWxkZXIgdGhleQorICAgICMgd2FudCwgbG9vayBmb3Igb25lIHdpdGggdGhlc2UgZmVhdHVyZXMuCisgICAgREVGQVVMVF9CVUlMREVSX0ZFQVRVUkVTID0gWydodG1sJywgJ2Zhc3QnXQorCisgICAgQVNDSUlfU1BBQ0VTID0gJ1x4MjBceDBhXHgwOVx4MGNceDBkJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmt1cD0iIiwgZmVhdHVyZXM9Tm9uZSwgYnVpbGRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBwYXJzZV9vbmx5PU5vbmUsIGZyb21fZW5jb2Rpbmc9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJUaGUgU291cCBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgYXMgdGhlICdyb290IHRhZycsIGFuZCB0aGUKKyAgICAgICAgcHJvdmlkZWQgbWFya3VwICh3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0KQorICAgICAgICBpcyBmZWQgaW50byB0aGUgdW5kZXJseWluZyBwYXJzZXIuIiIiCisKKyAgICAgICAgaWYgJ2NvbnZlcnRFbnRpdGllcycgaW4ga3dhcmdzOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiQlM0IGRvZXMgbm90IHJlc3BlY3QgdGhlIGNvbnZlcnRFbnRpdGllcyBhcmd1bWVudCB0byB0aGUgIgorICAgICAgICAgICAgICAgICJCZWF1dGlmdWxTb3VwIGNvbnN0cnVjdG9yLiBFbnRpdGllcyBhcmUgYWx3YXlzIGNvbnZlcnRlZCAiCisgICAgICAgICAgICAgICAgInRvIFVuaWNvZGUgY2hhcmFjdGVycy4iKQorCisgICAgICAgIGlmICdtYXJrdXBNYXNzYWdlJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZWwga3dhcmdzWydtYXJrdXBNYXNzYWdlJ10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBtYXJrdXBNYXNzYWdlIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFRoZSB0cmVlIGJ1aWxkZXIgaXMgcmVzcG9uc2libGUgIgorICAgICAgICAgICAgICAgICJmb3IgYW55IG5lY2Vzc2FyeSBtYXJrdXAgbWFzc2FnZS4iKQorCisgICAgICAgIGlmICdzbWFydFF1b3Rlc1RvJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBkZWwga3dhcmdzWydzbWFydFF1b3Rlc1RvJ10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIkJTNCBkb2VzIG5vdCByZXNwZWN0IHRoZSBzbWFydFF1b3Rlc1RvIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFNtYXJ0IHF1b3RlcyBhcmUgYWx3YXlzIGNvbnZlcnRlZCAiCisgICAgICAgICAgICAgICAgInRvIFVuaWNvZGUgY2hhcmFjdGVycy4iKQorCisgICAgICAgIGlmICdzZWxmQ2xvc2luZ1RhZ3MnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ3NlbGZDbG9zaW5nVGFncyddCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgc2VsZkNsb3NpbmdUYWdzIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFRoZSB0cmVlIGJ1aWxkZXIgaXMgcmVzcG9uc2libGUgIgorICAgICAgICAgICAgICAgICJmb3IgdW5kZXJzdGFuZGluZyBzZWxmLWNsb3NpbmcgdGFncy4iKQorCisgICAgICAgIGlmICdpc0hUTUwnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ2lzSFRNTCddCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJCUzQgZG9lcyBub3QgcmVzcGVjdCB0aGUgaXNIVE1MIGFyZ3VtZW50IHRvIHRoZSAiCisgICAgICAgICAgICAgICAgIkJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuIFlvdSBjYW4gcGFzcyBpbiBmZWF0dXJlcz0naHRtbCcgIgorICAgICAgICAgICAgICAgICJvciBmZWF0dXJlcz0neG1sJyB0byBnZXQgYSBidWlsZGVyIGNhcGFibGUgb2YgaGFuZGxpbmcgIgorICAgICAgICAgICAgICAgICJvbmUgb3IgdGhlIG90aGVyLiIpCisKKyAgICAgICAgZGVmIGRlcHJlY2F0ZWRfYXJndW1lbnQob2xkX25hbWUsIG5ld19uYW1lKToKKyAgICAgICAgICAgIGlmIG9sZF9uYW1lIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAnVGhlICIlcyIgYXJndW1lbnQgdG8gdGhlIEJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IgJworICAgICAgICAgICAgICAgICAgICAnaGFzIGJlZW4gcmVuYW1lZCB0byAiJXMuIicgJSAob2xkX25hbWUsIG5ld19uYW1lKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGt3YXJnc1tvbGRfbmFtZV0KKyAgICAgICAgICAgICAgICBkZWwga3dhcmdzW29sZF9uYW1lXQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBwYXJzZV9vbmx5ID0gcGFyc2Vfb25seSBvciBkZXByZWNhdGVkX2FyZ3VtZW50KAorICAgICAgICAgICAgInBhcnNlT25seVRoZXNlIiwgInBhcnNlX29ubHkiKQorCisgICAgICAgIGZyb21fZW5jb2RpbmcgPSBmcm9tX2VuY29kaW5nIG9yIGRlcHJlY2F0ZWRfYXJndW1lbnQoCisgICAgICAgICAgICAiZnJvbUVuY29kaW5nIiwgImZyb21fZW5jb2RpbmciKQorCisgICAgICAgIGlmIGxlbihrd2FyZ3MpID4gMDoKKyAgICAgICAgICAgIGFyZyA9IGt3YXJncy5rZXlzKCkucG9wKCkKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAiX19pbml0X18oKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclcyciICUgYXJnKQorCisgICAgICAgIGlmIGJ1aWxkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmVhdHVyZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gW2ZlYXR1cmVzXQorICAgICAgICAgICAgaWYgZmVhdHVyZXMgaXMgTm9uZSBvciBsZW4oZmVhdHVyZXMpID09IDA6CisgICAgICAgICAgICAgICAgZmVhdHVyZXMgPSBzZWxmLkRFRkFVTFRfQlVJTERFUl9GRUFUVVJFUworICAgICAgICAgICAgYnVpbGRlcl9jbGFzcyA9IGJ1aWxkZXJfcmVnaXN0cnkubG9va3VwKCpmZWF0dXJlcykKKyAgICAgICAgICAgIGlmIGJ1aWxkZXJfY2xhc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBGZWF0dXJlTm90Rm91bmQoCisgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIGEgdHJlZSBidWlsZGVyIHdpdGggdGhlIGZlYXR1cmVzIHlvdSAiCisgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0ZWQ6ICVzLiBEbyB5b3UgbmVlZCB0byBpbnN0YWxsIGEgcGFyc2VyIGxpYnJhcnk/IgorICAgICAgICAgICAgICAgICAgICAlICIsIi5qb2luKGZlYXR1cmVzKSkKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyX2NsYXNzKCkKKyAgICAgICAgc2VsZi5idWlsZGVyID0gYnVpbGRlcgorICAgICAgICBzZWxmLmlzX3htbCA9IGJ1aWxkZXIuaXNfeG1sCisgICAgICAgIHNlbGYuYnVpbGRlci5zb3VwID0gc2VsZgorCisgICAgICAgIHNlbGYucGFyc2Vfb25seSA9IHBhcnNlX29ubHkKKworICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cCwgJ3JlYWQnKTogICAgICAgICMgSXQncyBhIGZpbGUtdHlwZSBvYmplY3QuCisgICAgICAgICAgICBtYXJrdXAgPSBtYXJrdXAucmVhZCgpCisgICAgICAgIGVsaWYgbGVuKG1hcmt1cCkgPD0gMjU2OgorICAgICAgICAgICAgIyBQcmludCBvdXQgd2FybmluZ3MgZm9yIGEgY291cGxlIGJlZ2lubmVyIHByb2JsZW1zCisgICAgICAgICAgICAjIGludm9sdmluZyBwYXNzaW5nIG5vbi1tYXJrdXAgdG8gQmVhdXRpZnVsIFNvdXAuCisgICAgICAgICAgICAjIEJlYXV0aWZ1bCBTb3VwIHdpbGwgc3RpbGwgcGFyc2UgdGhlIGlucHV0IGFzIG1hcmt1cCwKKyAgICAgICAgICAgICMganVzdCBpbiBjYXNlIHRoYXQncyB3aGF0IHRoZSB1c2VyIHJlYWxseSB3YW50cy4KKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSkKKyAgICAgICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMpOgorICAgICAgICAgICAgICAgIHBvc3NpYmxlX2ZpbGVuYW1lID0gbWFya3VwLmVuY29kZSgidXRmOCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBvc3NpYmxlX2ZpbGVuYW1lID0gbWFya3VwCisgICAgICAgICAgICBpc19maWxlID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19maWxlID0gb3MucGF0aC5leGlzdHMocG9zc2libGVfZmlsZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGEgcHJvYmxlbSBpbnZvbHZpbmcKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlcnMgbm90IHZhbGlkIGluIGZpbGVuYW1lcyBvbiB0aGlzCisgICAgICAgICAgICAgICAgIyBzeXN0ZW0uIEp1c3QgbGV0IGl0IGdvLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIGlzX2ZpbGU6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAgICAgJyIlcyIgbG9va3MgbGlrZSBhIGZpbGVuYW1lLCBub3QgbWFya3VwLiBZb3Ugc2hvdWxkIHByb2JhYmx5IG9wZW4gdGhpcyBmaWxlIGFuZCBwYXNzIHRoZSBmaWxlaGFuZGxlIGludG8gQmVhdXRpZnVsIFNvdXAuJyAlIG1hcmt1cCkKKyAgICAgICAgICAgIGlmIG1hcmt1cFs6NV0gPT0gImh0dHA6IiBvciBtYXJrdXBbOjZdID09ICJodHRwczoiOgorICAgICAgICAgICAgICAgICMgVE9ETzogVGhpcyBpcyB1Z2x5IGJ1dCBJIGNvdWxkbid0IGdldCBpdCB0byB3b3JrIGluCisgICAgICAgICAgICAgICAgIyBQeXRob24gMyBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgaWYgKChpc2luc3RhbmNlKG1hcmt1cCwgYnl0ZXMpIGFuZCBub3QgYicgJyBpbiBtYXJrdXApCisgICAgICAgICAgICAgICAgICAgIG9yIChpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSkgYW5kIG5vdCB1JyAnIGluIG1hcmt1cCkpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgJyIlcyIgbG9va3MgbGlrZSBhIFVSTC4gQmVhdXRpZnVsIFNvdXAgaXMgbm90IGFuIEhUVFAgY2xpZW50LiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhbiBIVFRQIGNsaWVudCB0byBnZXQgdGhlIGRvY3VtZW50IGJlaGluZCB0aGUgVVJMLCBhbmQgZmVlZCB0aGF0IGRvY3VtZW50IHRvIEJlYXV0aWZ1bCBTb3VwLicgJSBtYXJrdXApCisKKyAgICAgICAgZm9yIChzZWxmLm1hcmt1cCwgc2VsZi5vcmlnaW5hbF9lbmNvZGluZywgc2VsZi5kZWNsYXJlZF9odG1sX2VuY29kaW5nLAorICAgICAgICAgc2VsZi5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKSBpbiAoCisgICAgICAgICAgICBzZWxmLmJ1aWxkZXIucHJlcGFyZV9tYXJrdXAobWFya3VwLCBmcm9tX2VuY29kaW5nKSk6CisgICAgICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IFBhcnNlclJlamVjdGVkTWFya3VwOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIENsZWFyIG91dCB0aGUgbWFya3VwIGFuZCByZW1vdmUgdGhlIGJ1aWxkZXIncyBjaXJjdWxhcgorICAgICAgICAjIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KKyAgICAgICAgc2VsZi5tYXJrdXAgPSBOb25lCisgICAgICAgIHNlbGYuYnVpbGRlci5zb3VwID0gTm9uZQorCisgICAgZGVmIF9mZWVkKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgdGhlIGRvY3VtZW50IHRvIFVuaWNvZGUuCisgICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisKKyAgICAgICAgc2VsZi5idWlsZGVyLmZlZWQoc2VsZi5tYXJrdXApCisgICAgICAgICMgQ2xvc2Ugb3V0IGFueSB1bmZpbmlzaGVkIHN0cmluZ3MgYW5kIGNsb3NlIGFsbCB0aGUgb3BlbiB0YWdzLgorICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICB3aGlsZSBzZWxmLmN1cnJlbnRUYWcubmFtZSAhPSBzZWxmLlJPT1RfVEFHX05BTUU6CisgICAgICAgICAgICBzZWxmLnBvcFRhZygpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIFRhZy5fX2luaXRfXyhzZWxmLCBzZWxmLCBzZWxmLmJ1aWxkZXIsIHNlbGYuUk9PVF9UQUdfTkFNRSkKKyAgICAgICAgc2VsZi5oaWRkZW4gPSAxCisgICAgICAgIHNlbGYuYnVpbGRlci5yZXNldCgpCisgICAgICAgIHNlbGYuY3VycmVudF9kYXRhID0gW10KKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gTm9uZQorICAgICAgICBzZWxmLnRhZ1N0YWNrID0gW10KKyAgICAgICAgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjayA9IFtdCisgICAgICAgIHNlbGYucHVzaFRhZyhzZWxmKQorCisgICAgZGVmIG5ld190YWcoc2VsZiwgbmFtZSwgbmFtZXNwYWNlPU5vbmUsIG5zcHJlZml4PU5vbmUsICoqYXR0cnMpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgdGFnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvdXAuIiIiCisgICAgICAgIHJldHVybiBUYWcoTm9uZSwgc2VsZi5idWlsZGVyLCBuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycykKKworICAgIGRlZiBuZXdfc3RyaW5nKHNlbGYsIHMsIHN1YmNsYXNzPU5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOYXZpZ2FibGVTdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cC4iIiIKKyAgICAgICAgbmF2aWdhYmxlID0gc3ViY2xhc3MocykKKyAgICAgICAgbmF2aWdhYmxlLnNldHVwKCkKKyAgICAgICAgcmV0dXJuIG5hdmlnYWJsZQorCisgICAgZGVmIGluc2VydF9iZWZvcmUoc2VsZiwgc3VjY2Vzc29yKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQmVhdXRpZnVsU291cCBvYmplY3RzIGRvbid0IHN1cHBvcnQgaW5zZXJ0X2JlZm9yZSgpLiIpCisKKyAgICBkZWYgaW5zZXJ0X2FmdGVyKHNlbGYsIHN1Y2Nlc3Nvcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkJlYXV0aWZ1bFNvdXAgb2JqZWN0cyBkb24ndCBzdXBwb3J0IGluc2VydF9hZnRlcigpLiIpCisKKyAgICBkZWYgcG9wVGFnKHNlbGYpOgorICAgICAgICB0YWcgPSBzZWxmLnRhZ1N0YWNrLnBvcCgpCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2sgYW5kIHRhZyA9PSBzZWxmLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnX3N0YWNrWy0xXToKKyAgICAgICAgICAgIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2sucG9wKCkKKyAgICAgICAgI3ByaW50ICJQb3AiLCB0YWcubmFtZQorICAgICAgICBpZiBzZWxmLnRhZ1N0YWNrOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudFRhZworCisgICAgZGVmIHB1c2hUYWcoc2VsZiwgdGFnKToKKyAgICAgICAgI3ByaW50ICJQdXNoIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50VGFnOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYudGFnU3RhY2suYXBwZW5kKHRhZykKKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgaWYgdGFnLm5hbWUgaW4gc2VsZi5idWlsZGVyLnByZXNlcnZlX3doaXRlc3BhY2VfdGFnczoKKyAgICAgICAgICAgIHNlbGYucHJlc2VydmVfd2hpdGVzcGFjZV90YWdfc3RhY2suYXBwZW5kKHRhZykKKworICAgIGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9kYXRhOgorICAgICAgICAgICAgY3VycmVudF9kYXRhID0gdScnLmpvaW4oc2VsZi5jdXJyZW50X2RhdGEpCisgICAgICAgICAgICAjIElmIHdoaXRlc3BhY2UgaXMgbm90IHByZXNlcnZlZCwgYW5kIHRoaXMgc3RyaW5nIGNvbnRhaW5zCisgICAgICAgICAgICAjIG5vdGhpbmcgYnV0IEFTQ0lJIHNwYWNlcywgcmVwbGFjZSBpdCB3aXRoIGEgc2luZ2xlIHNwYWNlCisgICAgICAgICAgICAjIG9yIG5ld2xpbmUuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ19zdGFjazoKKyAgICAgICAgICAgICAgICBzdHJpcHBhYmxlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBpIGluIGN1cnJlbnRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSBub3QgaW4gc2VsZi5BU0NJSV9TUEFDRVM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHBhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgc3RyaXBwYWJsZToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBjdXJyZW50X2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2RhdGEgPSAnXG4nCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2RhdGEgPSAnICcKKworICAgICAgICAgICAgIyBSZXNldCB0aGUgZGF0YSBjb2xsZWN0b3IuCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZGF0YSA9IFtdCisKKyAgICAgICAgICAgICMgU2hvdWxkIHdlIGFkZCB0aGlzIHN0cmluZyB0byB0aGUgdHJlZSBhdCBhbGw/CisgICAgICAgICAgICBpZiBzZWxmLnBhcnNlX29ubHkgYW5kIGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxIGFuZCBcCisgICAgICAgICAgICAgICAgICAgKG5vdCBzZWxmLnBhcnNlX29ubHkudGV4dCBvciBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLnBhcnNlX29ubHkuc2VhcmNoKGN1cnJlbnRfZGF0YSkpOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBvID0gY29udGFpbmVyQ2xhc3MoY3VycmVudF9kYXRhKQorICAgICAgICAgICAgc2VsZi5vYmplY3Rfd2FzX3BhcnNlZChvKQorCisgICAgZGVmIG9iamVjdF93YXNfcGFyc2VkKHNlbGYsIG8sIHBhcmVudD1Ob25lLCBtb3N0X3JlY2VudF9lbGVtZW50PU5vbmUpOgorICAgICAgICAiIiJBZGQgYW4gb2JqZWN0IHRvIHRoZSBwYXJzZSB0cmVlLiIiIgorICAgICAgICBwYXJlbnQgPSBwYXJlbnQgb3Igc2VsZi5jdXJyZW50VGFnCisgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQgPSBtb3N0X3JlY2VudF9lbGVtZW50IG9yIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQKKyAgICAgICAgby5zZXR1cChwYXJlbnQsIG1vc3RfcmVjZW50X2VsZW1lbnQpCisKKyAgICAgICAgaWYgbW9zdF9yZWNlbnRfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1vc3RfcmVjZW50X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbworICAgICAgICBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50ID0gbworICAgICAgICBwYXJlbnQuY29udGVudHMuYXBwZW5kKG8pCisKKyAgICBkZWYgX3BvcFRvVGFnKHNlbGYsIG5hbWUsIG5zcHJlZml4PU5vbmUsIGluY2x1c2l2ZVBvcD1UcnVlKToKKyAgICAgICAgIiIiUG9wcyB0aGUgdGFnIHN0YWNrIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50CisgICAgICAgIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0YWcuIElmIGluY2x1c2l2ZVBvcCBpcyBmYWxzZSwgcG9wcyB0aGUgdGFnCisgICAgICAgIHN0YWNrIHVwIHRvIGJ1dCAqbm90KiBpbmNsdWRpbmcgdGhlIG1vc3QgcmVjZW50IGluc3RxYW5jZSBvZgorICAgICAgICB0aGUgZ2l2ZW4gdGFnLiIiIgorICAgICAgICAjcHJpbnQgIlBvcHBpbmcgdG8gJXMiICUgbmFtZQorICAgICAgICBpZiBuYW1lID09IHNlbGYuUk9PVF9UQUdfTkFNRToKKyAgICAgICAgICAgICMgVGhlIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGl0c2VsZiBjYW4gbmV2ZXIgYmUgcG9wcGVkLgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbW9zdF9yZWNlbnRseV9wb3BwZWQgPSBOb25lCisKKyAgICAgICAgc3RhY2tfc2l6ZSA9IGxlbihzZWxmLnRhZ1N0YWNrKQorICAgICAgICBmb3IgaSBpbiByYW5nZShzdGFja19zaXplIC0gMSwgMCwgLTEpOgorICAgICAgICAgICAgdCA9IHNlbGYudGFnU3RhY2tbaV0KKyAgICAgICAgICAgIGlmIChuYW1lID09IHQubmFtZSBhbmQgbnNwcmVmaXggPT0gdC5wcmVmaXgpOgorICAgICAgICAgICAgICAgIGlmIGluY2x1c2l2ZVBvcDoKKyAgICAgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRseV9wb3BwZWQgPSBzZWxmLnBvcFRhZygpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG1vc3RfcmVjZW50bHlfcG9wcGVkID0gc2VsZi5wb3BUYWcoKQorCisgICAgICAgIHJldHVybiBtb3N0X3JlY2VudGx5X3BvcHBlZAorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCBuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycyk6CisgICAgICAgICIiIlB1c2ggYSBzdGFydCB0YWcgb24gdG8gdGhlIHN0YWNrLgorCisgICAgICAgIElmIHRoaXMgbWV0aG9kIHJldHVybnMgTm9uZSwgdGhlIHRhZyB3YXMgcmVqZWN0ZWQgYnkgdGhlCisgICAgICAgIFNvdXBTdHJhaW5lci4gWW91IHNob3VsZCBwcm9jZWVkIGFzIGlmIHRoZSB0YWcgaGFkIG5vdCBvY2N1cmVkCisgICAgICAgIGluIHRoZSBkb2N1bWVudC4gRm9yIGluc3RhbmNlLCBpZiB0aGlzIHdhcyBhIHNlbGYtY2xvc2luZyB0YWcsCisgICAgICAgIGRvbid0IGNhbGwgaGFuZGxlX2VuZHRhZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBwcmludCAiU3RhcnQgdGFnICVzOiAlcyIgJSAobmFtZSwgYXR0cnMpCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisKKyAgICAgICAgaWYgKHNlbGYucGFyc2Vfb25seSBhbmQgbGVuKHNlbGYudGFnU3RhY2spIDw9IDEKKyAgICAgICAgICAgIGFuZCAoc2VsZi5wYXJzZV9vbmx5LnRleHQKKyAgICAgICAgICAgICAgICAgb3Igbm90IHNlbGYucGFyc2Vfb25seS5zZWFyY2hfdGFnKG5hbWUsIGF0dHJzKSkpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB0YWcgPSBUYWcoc2VsZiwgc2VsZi5idWlsZGVyLCBuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycywKKyAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFRhZywgc2VsZi5fbW9zdF9yZWNlbnRfZWxlbWVudCkKKyAgICAgICAgaWYgdGFnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gdGFnCisgICAgICAgIGlmIHNlbGYuX21vc3RfcmVjZW50X2VsZW1lbnQ6CisgICAgICAgICAgICBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50Lm5leHRfZWxlbWVudCA9IHRhZworICAgICAgICBzZWxmLl9tb3N0X3JlY2VudF9lbGVtZW50ID0gdGFnCisgICAgICAgIHNlbGYucHVzaFRhZyh0YWcpCisgICAgICAgIHJldHVybiB0YWcKKworICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIG5hbWUsIG5zcHJlZml4PU5vbmUpOgorICAgICAgICAjcHJpbnQgIkVuZCB0YWc6ICIgKyBuYW1lCisgICAgICAgIHNlbGYuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuX3BvcFRvVGFnKG5hbWUsIG5zcHJlZml4KQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZGF0YS5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgcHJldHR5X3ByaW50PUZhbHNlLAorICAgICAgICAgICAgICAgZXZlbnR1YWxfZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBvciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgZG9jdW1lbnQuCisgICAgICAgIFRvIGdldCBVbmljb2RlLCBwYXNzIE5vbmUgZm9yIGVuY29kaW5nLiIiIgorCisgICAgICAgIGlmIHNlbGYuaXNfeG1sOgorICAgICAgICAgICAgIyBQcmludCB0aGUgWE1MIGRlY2xhcmF0aW9uCisgICAgICAgICAgICBlbmNvZGluZ19wYXJ0ID0gJycKKyAgICAgICAgICAgIGlmIGV2ZW50dWFsX2VuY29kaW5nICE9IE5vbmU6CisgICAgICAgICAgICAgICAgZW5jb2RpbmdfcGFydCA9ICcgZW5jb2Rpbmc9IiVzIicgJSBldmVudHVhbF9lbmNvZGluZworICAgICAgICAgICAgcHJlZml4ID0gdSc8P3htbCB2ZXJzaW9uPSIxLjAiJXM/PlxuJyAlIGVuY29kaW5nX3BhcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9IHUnJworICAgICAgICBpZiBub3QgcHJldHR5X3ByaW50OgorICAgICAgICAgICAgaW5kZW50X2xldmVsID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZW50X2xldmVsID0gMAorICAgICAgICByZXR1cm4gcHJlZml4ICsgc3VwZXIoQmVhdXRpZnVsU291cCwgc2VsZikuZGVjb2RlKAorICAgICAgICAgICAgaW5kZW50X2xldmVsLCBldmVudHVhbF9lbmNvZGluZywgZm9ybWF0dGVyKQorCisjIEFsaWFzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHR5cGUgaW1wb3J0OiAnZnJvbSBiczQgaW1wb3J0IF9zb3VwJworX3MgPSBCZWF1dGlmdWxTb3VwCitfc291cCA9IEJlYXV0aWZ1bFNvdXAKKworY2xhc3MgQmVhdXRpZnVsU3RvbmVTb3VwKEJlYXV0aWZ1bFNvdXApOgorICAgICIiIkRlcHJlY2F0ZWQgaW50ZXJmYWNlIHRvIGFuIFhNTCBwYXJzZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAga3dhcmdzWydmZWF0dXJlcyddID0gJ3htbCcKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICdUaGUgQmVhdXRpZnVsU3RvbmVTb3VwIGNsYXNzIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgb2YgdXNpbmcgJworICAgICAgICAgICAgJ2l0LCBwYXNzIGZlYXR1cmVzPSJ4bWwiIGludG8gdGhlIEJlYXV0aWZ1bFNvdXAgY29uc3RydWN0b3IuJykKKyAgICAgICAgc3VwZXIoQmVhdXRpZnVsU3RvbmVTb3VwLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgU3RvcFBhcnNpbmcoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIEZlYXR1cmVOb3RGb3VuZChWYWx1ZUVycm9yKToKKyAgICBwYXNzCisKKworI0J5IGRlZmF1bHQsIGFjdCBhcyBhbiBIVE1MIHByZXR0eS1wcmludGVyLgoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoc3lzLnN0ZGluKQorICAgIHByaW50IHNvdXAucHJldHRpZnkoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDBmNWYyCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX19pbml0X18ucHkKQEAgLTAsMCArMSwzMjEgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgc3lzCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIHdoaXRlc3BhY2VfcmUKKyAgICApCisKK19fYWxsX18gPSBbCisgICAgJ0hUTUxUcmVlQnVpbGRlcicsCisgICAgJ1NBWFRyZWVCdWlsZGVyJywKKyAgICAnVHJlZUJ1aWxkZXInLAorICAgICdUcmVlQnVpbGRlclJlZ2lzdHJ5JywKKyAgICBdCisKKyMgU29tZSB1c2VmdWwgZmVhdHVyZXMgZm9yIGEgVHJlZUJ1aWxkZXIgdG8gaGF2ZS4KK0ZBU1QgPSAnZmFzdCcKK1BFUk1JU1NJVkUgPSAncGVybWlzc2l2ZScKK1NUUklDVCA9ICdzdHJpY3QnCitYTUwgPSAneG1sJworSFRNTCA9ICdodG1sJworSFRNTF81ID0gJ2h0bWw1JworCisKK2NsYXNzIFRyZWVCdWlsZGVyUmVnaXN0cnkob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5idWlsZGVyc19mb3JfZmVhdHVyZSA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgICAgIHNlbGYuYnVpbGRlcnMgPSBbXQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHRyZWVidWlsZGVyX2NsYXNzKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSB0cmVlYnVpbGRlciBiYXNlZCBvbiBpdHMgYWR2ZXJ0aXNlZCBmZWF0dXJlcy4iIiIKKyAgICAgICAgZm9yIGZlYXR1cmUgaW4gdHJlZWJ1aWxkZXJfY2xhc3MuZmVhdHVyZXM6CisgICAgICAgICAgICBzZWxmLmJ1aWxkZXJzX2Zvcl9mZWF0dXJlW2ZlYXR1cmVdLmluc2VydCgwLCB0cmVlYnVpbGRlcl9jbGFzcykKKyAgICAgICAgc2VsZi5idWlsZGVycy5pbnNlcnQoMCwgdHJlZWJ1aWxkZXJfY2xhc3MpCisKKyAgICBkZWYgbG9va3VwKHNlbGYsICpmZWF0dXJlcyk6CisgICAgICAgIGlmIGxlbihzZWxmLmJ1aWxkZXJzKSA9PSAwOgorICAgICAgICAgICAgIyBUaGVyZSBhcmUgbm8gYnVpbGRlcnMgYXQgYWxsLgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBsZW4oZmVhdHVyZXMpID09IDA6CisgICAgICAgICAgICAjIFRoZXkgZGlkbid0IGFzayBmb3IgYW55IGZlYXR1cmVzLiBHaXZlIHRoZW0gdGhlIG1vc3QKKyAgICAgICAgICAgICMgcmVjZW50bHkgcmVnaXN0ZXJlZCBidWlsZGVyLgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRlcnNbMF0KKworICAgICAgICAjIEdvIGRvd24gdGhlIGxpc3Qgb2YgZmVhdHVyZXMgaW4gb3JkZXIsIGFuZCBlbGltaW5hdGUgYW55IGJ1aWxkZXJzCisgICAgICAgICMgdGhhdCBkb24ndCBtYXRjaCBldmVyeSBmZWF0dXJlLgorICAgICAgICBmZWF0dXJlcyA9IGxpc3QoZmVhdHVyZXMpCisgICAgICAgIGZlYXR1cmVzLnJldmVyc2UoKQorICAgICAgICBjYW5kaWRhdGVzID0gTm9uZQorICAgICAgICBjYW5kaWRhdGVfc2V0ID0gTm9uZQorICAgICAgICB3aGlsZSBsZW4oZmVhdHVyZXMpID4gMDoKKyAgICAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlcy5wb3AoKQorICAgICAgICAgICAgd2VfaGF2ZV90aGVfZmVhdHVyZSA9IHNlbGYuYnVpbGRlcnNfZm9yX2ZlYXR1cmUuZ2V0KGZlYXR1cmUsIFtdKQorICAgICAgICAgICAgaWYgbGVuKHdlX2hhdmVfdGhlX2ZlYXR1cmUpID4gMDoKKyAgICAgICAgICAgICAgICBpZiBjYW5kaWRhdGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB3ZV9oYXZlX3RoZV9mZWF0dXJlCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZV9zZXQgPSBzZXQoY2FuZGlkYXRlcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEVsaW1pbmF0ZSBhbnkgY2FuZGlkYXRlcyB0aGF0IGRvbid0IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVfc2V0ID0gY2FuZGlkYXRlX3NldC5pbnRlcnNlY3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQod2VfaGF2ZV90aGVfZmVhdHVyZSkpCisKKyAgICAgICAgIyBUaGUgb25seSB2YWxpZCBjYW5kaWRhdGVzIGFyZSB0aGUgb25lcyBpbiBjYW5kaWRhdGVfc2V0LgorICAgICAgICAjIEdvIHRocm91Z2ggdGhlIG9yaWdpbmFsIGxpc3Qgb2YgY2FuZGlkYXRlcyBhbmQgcGljayB0aGUgZmlyc3Qgb25lCisgICAgICAgICMgdGhhdCdzIGluIGNhbmRpZGF0ZV9zZXQuCisgICAgICAgIGlmIGNhbmRpZGF0ZV9zZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gY2FuZGlkYXRlczoKKyAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBpbiBjYW5kaWRhdGVfc2V0OgorICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworIyBUaGUgQmVhdXRpZnVsU291cCBjbGFzcyB3aWxsIHRha2UgZmVhdHVyZSBsaXN0cyBmcm9tIGRldmVsb3BlcnMgYW5kIHVzZSB0aGVtCisjIHRvIGxvb2sgdXAgYnVpbGRlcnMgaW4gdGhpcyByZWdpc3RyeS4KK2J1aWxkZXJfcmVnaXN0cnkgPSBUcmVlQnVpbGRlclJlZ2lzdHJ5KCkKKworY2xhc3MgVHJlZUJ1aWxkZXIob2JqZWN0KToKKyAgICAiIiJUdXJuIGEgZG9jdW1lbnQgaW50byBhIEJlYXV0aWZ1bCBTb3VwIG9iamVjdCB0cmVlLiIiIgorCisgICAgZmVhdHVyZXMgPSBbXQorCisgICAgaXNfeG1sID0gRmFsc2UKKyAgICBwcmVzZXJ2ZV93aGl0ZXNwYWNlX3RhZ3MgPSBzZXQoKQorICAgIGVtcHR5X2VsZW1lbnRfdGFncyA9IE5vbmUgIyBBIHRhZyB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gZW1wdHktZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0YWcgd2hlbiBhbmQgb25seSB3aGVuIGl0IGhhcyBubyBjb250ZW50cy4KKworICAgICMgQSB2YWx1ZSBmb3IgdGhlc2UgdGFnL2F0dHJpYnV0ZSBjb21iaW5hdGlvbnMgaXMgYSBzcGFjZS0gb3IKKyAgICAjIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIENEQVRBLCByYXRoZXIgdGhhbiBhIHNpbmdsZSBDREFUQS4KKyAgICBjZGF0YV9saXN0X2F0dHJpYnV0ZXMgPSB7fQorCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc291cCA9IE5vbmUKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNhbl9iZV9lbXB0eV9lbGVtZW50KHNlbGYsIHRhZ19uYW1lKToKKyAgICAgICAgIiIiTWlnaHQgYSB0YWcgd2l0aCB0aGlzIG5hbWUgYmUgYW4gZW1wdHktZWxlbWVudCB0YWc/CisKKyAgICAgICAgVGhlIGZpbmFsIG1hcmt1cCBtYXkgb3IgbWF5IG5vdCBhY3R1YWxseSBwcmVzZW50IHRoaXMgdGFnIGFzCisgICAgICAgIHNlbGYtY2xvc2luZy4KKworICAgICAgICBGb3IgaW5zdGFuY2U6IGFuIEhUTUxCdWlsZGVyIGRvZXMgbm90IGNvbnNpZGVyIGEgPHA+IHRhZyB0byBiZQorICAgICAgICBhbiBlbXB0eS1lbGVtZW50IHRhZyAoaXQncyBub3QgaW4KKyAgICAgICAgSFRNTEJ1aWxkZXIuZW1wdHlfZWxlbWVudF90YWdzKS4gVGhpcyBtZWFucyBhbiBlbXB0eSA8cD4gdGFnCisgICAgICAgIHdpbGwgYmUgcHJlc2VudGVkIGFzICI8cD48L3A+Iiwgbm90ICI8cCAvPiIuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaGFzIG5vIG9waW5pb24gYWJvdXQgd2hpY2ggdGFncyBhcmUKKyAgICAgICAgZW1wdHktZWxlbWVudCB0YWdzLCBzbyBhIHRhZyB3aWxsIGJlIHByZXNlbnRlZCBhcyBhbgorICAgICAgICBlbXB0eS1lbGVtZW50IHRhZyBpZiBhbmQgb25seSBpZiBpdCBoYXMgbm8gY29udGVudHMuCisgICAgICAgICI8Zm9vPjwvZm9vPiIgd2lsbCBiZWNvbWUgIjxmb28gLz4iLCBhbmQgIjxmb28+YmFyPC9mb28+IiB3aWxsCisgICAgICAgIGJlIGxlZnQgYWxvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmVtcHR5X2VsZW1lbnRfdGFncyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHRhZ19uYW1lIGluIHNlbGYuZW1wdHlfZWxlbWVudF90YWdzCisKKyAgICBkZWYgZmVlZChzZWxmLCBtYXJrdXApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUpOgorICAgICAgICByZXR1cm4gbWFya3VwLCBOb25lLCBOb25lLCBGYWxzZQorCisgICAgZGVmIHRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQoc2VsZiwgZnJhZ21lbnQpOgorICAgICAgICAiIiJXcmFwIGFuIEhUTUwgZnJhZ21lbnQgdG8gbWFrZSBpdCBsb29rIGxpa2UgYSBkb2N1bWVudC4KKworICAgICAgICBEaWZmZXJlbnQgcGFyc2VycyBkbyB0aGlzIGRpZmZlcmVudGx5LiBGb3IgaW5zdGFuY2UsIGx4bWwKKyAgICAgICAgaW50cm9kdWNlcyBhbiBlbXB0eSA8aGVhZD4gdGFnLCBhbmQgaHRtbDVsaWIKKyAgICAgICAgZG9lc24ndC4gQWJzdHJhY3RpbmcgdGhpcyBhd2F5IGxldHMgdXMgd3JpdGUgc2ltcGxlIHRlc3RzCisgICAgICAgIHdoaWNoIHJ1biBIVE1MIGZyYWdtZW50cyB0aHJvdWdoIHRoZSBwYXJzZXIgYW5kIGNvbXBhcmUgdGhlCisgICAgICAgIHJlc3VsdHMgYWdhaW5zdCBvdGhlciBIVE1MIGZyYWdtZW50cy4KKworICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBmcmFnbWVudAorCisgICAgZGVmIHNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYsIHRhZyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9yZXBsYWNlX2NkYXRhX2xpc3RfYXR0cmlidXRlX3ZhbHVlcyhzZWxmLCB0YWdfbmFtZSwgYXR0cnMpOgorICAgICAgICAiIiJSZXBsYWNlcyBjbGFzcz0iZm9vIGJhciIgd2l0aCBjbGFzcz1bImZvbyIsICJiYXIiXQorCisgICAgICAgIE1vZGlmaWVzIGl0cyBpbnB1dCBpbiBwbGFjZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIHJldHVybiBhdHRycworICAgICAgICBpZiBzZWxmLmNkYXRhX2xpc3RfYXR0cmlidXRlczoKKyAgICAgICAgICAgIHVuaXZlcnNhbCA9IHNlbGYuY2RhdGFfbGlzdF9hdHRyaWJ1dGVzLmdldCgnKicsIFtdKQorICAgICAgICAgICAgdGFnX3NwZWNpZmljID0gc2VsZi5jZGF0YV9saXN0X2F0dHJpYnV0ZXMuZ2V0KAorICAgICAgICAgICAgICAgIHRhZ19uYW1lLmxvd2VyKCksIE5vbmUpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRycy5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgYXR0ciBpbiB1bml2ZXJzYWwgb3IgKHRhZ19zcGVjaWZpYyBhbmQgYXR0ciBpbiB0YWdfc3BlY2lmaWMpOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYSAiY2xhc3MiLXR5cGUgYXR0cmlidXRlIHdob3NlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIGlzIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAjIHZhbHVlcy4gU3BsaXQgaXQgaW50byBhIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXR0cnNbYXR0cl0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB3aGl0ZXNwYWNlX3JlLnNwbGl0KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBodG1sNWxpYiBzb21ldGltZXMgY2FsbHMgc2V0QXR0cmlidXRlcyB0d2ljZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3IgdGhlIHNhbWUgdGFnIHdoZW4gcmVhcnJhbmdpbmcgdGhlIHBhcnNlCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRyZWUuIE9uIHRoZSBzZWNvbmQgY2FsbCB0aGUgYXR0cmlidXRlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGhlcmUgaXMgYWxyZWFkeSBhIGxpc3QuICBJZiB0aGlzIGhhcHBlbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAjIGxlYXZlIHRoZSB2YWx1ZSBhbG9uZSByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3BsaXQgaXQgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhdHRyc1thdHRyXSA9IHZhbHVlcworICAgICAgICByZXR1cm4gYXR0cnMKKworY2xhc3MgU0FYVHJlZUJ1aWxkZXIoVHJlZUJ1aWxkZXIpOgorICAgICIiIkEgQmVhdXRpZnVsIFNvdXAgdHJlZWJ1aWxkZXIgdGhhdCBsaXN0ZW5zIGZvciBTQVggZXZlbnRzLiIiIgorCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICBhdHRycyA9IGRpY3QoKGtleVsxXSwgdmFsdWUpIGZvciBrZXksIHZhbHVlIGluIGxpc3QoYXR0cnMuaXRlbXMoKSkpCisgICAgICAgICNwcmludCAiU3RhcnQgJXMsICVyIiAlIChuYW1lLCBhdHRycykKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9zdGFydHRhZyhuYW1lLCBhdHRycykKKworICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIG5hbWUpOgorICAgICAgICAjcHJpbnQgIkVuZCAlcyIgJSBuYW1lCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZW5kdGFnKG5hbWUpCisKKyAgICBkZWYgc3RhcnRFbGVtZW50TlMoc2VsZiwgbnNUdXBsZSwgbm9kZU5hbWUsIGF0dHJzKToKKyAgICAgICAgIyBUaHJvdyBhd2F5IChucywgbm9kZU5hbWUpIGZvciBub3cuCisgICAgICAgIHNlbGYuc3RhcnRFbGVtZW50KG5vZGVOYW1lLCBhdHRycykKKworICAgIGRlZiBlbmRFbGVtZW50TlMoc2VsZiwgbnNUdXBsZSwgbm9kZU5hbWUpOgorICAgICAgICAjIFRocm93IGF3YXkgKG5zLCBub2RlTmFtZSkgZm9yIG5vdy4KKyAgICAgICAgc2VsZi5lbmRFbGVtZW50KG5vZGVOYW1lKQorICAgICAgICAjaGFuZGxlci5lbmRFbGVtZW50TlMoKG5zLCBub2RlLm5vZGVOYW1lKSwgbm9kZS5ub2RlTmFtZSkKKworICAgIGRlZiBzdGFydFByZWZpeE1hcHBpbmcoc2VsZiwgcHJlZml4LCBub2RlVmFsdWUpOgorICAgICAgICAjIElnbm9yZSB0aGUgcHJlZml4IGZvciBub3cuCisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbmRQcmVmaXhNYXBwaW5nKHNlbGYsIHByZWZpeCk6CisgICAgICAgICMgSWdub3JlIHRoZSBwcmVmaXggZm9yIG5vdy4KKyAgICAgICAgIyBoYW5kbGVyLmVuZFByZWZpeE1hcHBpbmcocHJlZml4KQorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2hhcmFjdGVycyhzZWxmLCBjb250ZW50KToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGNvbnRlbnQpCisKKyAgICBkZWYgc3RhcnREb2N1bWVudChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVuZERvY3VtZW50KHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgSFRNTFRyZWVCdWlsZGVyKFRyZWVCdWlsZGVyKToKKyAgICAiIiJUaGlzIFRyZWVCdWlsZGVyIGtub3dzIGZhY3RzIGFib3V0IEhUTUwuCisKKyAgICBTdWNoIGFzIHdoaWNoIHRhZ3MgYXJlIGVtcHR5LWVsZW1lbnQgdGFncy4KKyAgICAiIiIKKworICAgIHByZXNlcnZlX3doaXRlc3BhY2VfdGFncyA9IHNldChbJ3ByZScsICd0ZXh0YXJlYSddKQorICAgIGVtcHR5X2VsZW1lbnRfdGFncyA9IHNldChbJ2JyJyAsICdocicsICdpbnB1dCcsICdpbWcnLCAnbWV0YScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhY2VyJywgJ2xpbmsnLCAnZnJhbWUnLCAnYmFzZSddKQorCisgICAgIyBUaGUgSFRNTCBzdGFuZGFyZCBkZWZpbmVzIHRoZXNlIGF0dHJpYnV0ZXMgYXMgY29udGFpbmluZyBhCisgICAgIyBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMsIG5vdCBhIHNpbmdsZSB2YWx1ZS4gVGhhdCBpcywKKyAgICAjIGNsYXNzPSJmb28gYmFyIiBtZWFucyB0aGF0IHRoZSAnY2xhc3MnIGF0dHJpYnV0ZSBoYXMgdHdvIHZhbHVlcywKKyAgICAjICdmb28nIGFuZCAnYmFyJywgbm90IHRoZSBzaW5nbGUgdmFsdWUgJ2ZvbyBiYXInLiAgV2hlbiB3ZQorICAgICMgZW5jb3VudGVyIG9uZSBvZiB0aGVzZSBhdHRyaWJ1dGVzLCB3ZSB3aWxsIHBhcnNlIGl0cyB2YWx1ZSBpbnRvCisgICAgIyBhIGxpc3Qgb2YgdmFsdWVzIGlmIHBvc3NpYmxlLiBVcG9uIG91dHB1dCwgdGhlIGxpc3Qgd2lsbCBiZQorICAgICMgY29udmVydGVkIGJhY2sgaW50byBhIHN0cmluZy4KKyAgICBjZGF0YV9saXN0X2F0dHJpYnV0ZXMgPSB7CisgICAgICAgICIqIiA6IFsnY2xhc3MnLCAnYWNjZXNza2V5JywgJ2Ryb3B6b25lJ10sCisgICAgICAgICJhIiA6IFsncmVsJywgJ3JldiddLAorICAgICAgICAibGluayIgOiAgWydyZWwnLCAncmV2J10sCisgICAgICAgICJ0ZCIgOiBbImhlYWRlcnMiXSwKKyAgICAgICAgInRoIiA6IFsiaGVhZGVycyJdLAorICAgICAgICAidGQiIDogWyJoZWFkZXJzIl0sCisgICAgICAgICJmb3JtIiA6IFsiYWNjZXB0LWNoYXJzZXQiXSwKKyAgICAgICAgIm9iamVjdCIgOiBbImFyY2hpdmUiXSwKKworICAgICAgICAjIFRoZXNlIGFyZSBIVE1MNSBzcGVjaWZpYywgYXMgYXJlICouYWNjZXNza2V5IGFuZCAqLmRyb3B6b25lIGFib3ZlLgorICAgICAgICAiYXJlYSIgOiBbInJlbCJdLAorICAgICAgICAiaWNvbiIgOiBbInNpemVzIl0sCisgICAgICAgICJpZnJhbWUiIDogWyJzYW5kYm94Il0sCisgICAgICAgICJvdXRwdXQiIDogWyJmb3IiXSwKKyAgICAgICAgfQorCisgICAgZGVmIHNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYsIHRhZyk6CisgICAgICAgICMgV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiA8bWV0YT4gdGFncworICAgICAgICBpZiB0YWcubmFtZSAhPSAnbWV0YSc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBodHRwX2VxdWl2ID0gdGFnLmdldCgnaHR0cC1lcXVpdicpCisgICAgICAgIGNvbnRlbnQgPSB0YWcuZ2V0KCdjb250ZW50JykKKyAgICAgICAgY2hhcnNldCA9IHRhZy5nZXQoJ2NoYXJzZXQnKQorCisgICAgICAgICMgV2UgYXJlIGludGVyZXN0ZWQgaW4gPG1ldGE+IHRhZ3MgdGhhdCBzYXkgd2hhdCBlbmNvZGluZyB0aGUKKyAgICAgICAgIyBkb2N1bWVudCB3YXMgb3JpZ2luYWxseSBpbi4gVGhpcyBtZWFucyBIVE1MIDUtc3R5bGUgPG1ldGE+CisgICAgICAgICMgdGFncyB0aGF0IHByb3ZpZGUgdGhlICJjaGFyc2V0IiBhdHRyaWJ1dGUuIEl0IGFsc28gbWVhbnMKKyAgICAgICAgIyBIVE1MIDQtc3R5bGUgPG1ldGE+IHRhZ3MgdGhhdCBwcm92aWRlIHRoZSAiY29udGVudCIKKyAgICAgICAgIyBhdHRyaWJ1dGUgYW5kIGhhdmUgImh0dHAtZXF1aXYiIHNldCB0byAiY29udGVudC10eXBlIi4KKyAgICAgICAgIworICAgICAgICAjIEluIGJvdGggY2FzZXMgd2Ugd2lsbCByZXBsYWNlIHRoZSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgIyBhdHRyaWJ1dGUgd2l0aCBhIHN0YW5kaW4gb2JqZWN0IHRoYXQgY2FuIHRha2Ugb24gYW55CisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgIG1ldGFfZW5jb2RpbmcgPSBOb25lCisgICAgICAgIGlmIGNoYXJzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEhUTUwgNSBzdHlsZToKKyAgICAgICAgICAgICMgPG1ldGEgY2hhcnNldD0idXRmOCI+CisgICAgICAgICAgICBtZXRhX2VuY29kaW5nID0gY2hhcnNldAorICAgICAgICAgICAgdGFnWydjaGFyc2V0J10gPSBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKGNoYXJzZXQpCisKKyAgICAgICAgZWxpZiAoY29udGVudCBpcyBub3QgTm9uZSBhbmQgaHR0cF9lcXVpdiBpcyBub3QgTm9uZQorICAgICAgICAgICAgICBhbmQgaHR0cF9lcXVpdi5sb3dlcigpID09ICdjb250ZW50LXR5cGUnKToKKyAgICAgICAgICAgICMgSFRNTCA0IHN0eWxlOgorICAgICAgICAgICAgIyA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGY4Ij4KKyAgICAgICAgICAgIHRhZ1snY29udGVudCddID0gQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZShjb250ZW50KQorCisgICAgICAgIHJldHVybiAobWV0YV9lbmNvZGluZyBpcyBub3QgTm9uZSkKKworZGVmIHJlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKG1vZHVsZSk6CisgICAgIiIiQ29weSBUcmVlQnVpbGRlcnMgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGludG8gdGhpcyBtb2R1bGUuIiIiCisgICAgIyBJJ20gZmFpcmx5IHN1cmUgdGhpcyBpcyBub3QgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMuCisgICAgdGhpc19tb2R1bGUgPSBzeXMubW9kdWxlc1snYnM0LmJ1aWxkZXInXQorICAgIGZvciBuYW1lIGluIG1vZHVsZS5fX2FsbF9fOgorICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKKworICAgICAgICBpZiBpc3N1YmNsYXNzKG9iaiwgVHJlZUJ1aWxkZXIpOgorICAgICAgICAgICAgc2V0YXR0cih0aGlzX21vZHVsZSwgbmFtZSwgb2JqKQorICAgICAgICAgICAgdGhpc19tb2R1bGUuX19hbGxfXy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIGJ1aWxkZXIgd2hpbGUgd2UncmUgYXQgaXQuCisgICAgICAgICAgICB0aGlzX21vZHVsZS5idWlsZGVyX3JlZ2lzdHJ5LnJlZ2lzdGVyKG9iaikKKworY2xhc3MgUGFyc2VyUmVqZWN0ZWRNYXJrdXAoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKyMgQnVpbGRlcnMgYXJlIHJlZ2lzdGVyZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBwcmlvcml0eSwgc28gdGhhdCBjdXN0b20KKyMgYnVpbGRlciByZWdpc3RyYXRpb25zIHdpbGwgdGFrZSBwcmVjZWRlbmNlLiBJbiBnZW5lcmFsLCB3ZSB3YW50IGx4bWwKKyMgdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgaHRtbDVsaWIsIGJlY2F1c2UgaXQncyBmYXN0ZXIuIEFuZCB3ZSBvbmx5CisjIHdhbnQgdG8gdXNlIEhUTUxQYXJzZXIgYXMgYSBsYXN0IHJlc3VsdC4KK2Zyb20gLiBpbXBvcnQgX2h0bWxwYXJzZXIKK3JlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKF9odG1scGFyc2VyKQordHJ5OgorICAgIGZyb20gLiBpbXBvcnQgX2h0bWw1bGliCisgICAgcmVnaXN0ZXJfdHJlZWJ1aWxkZXJzX2Zyb20oX2h0bWw1bGliKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgVGhleSBkb24ndCBoYXZlIGh0bWw1bGliIGluc3RhbGxlZC4KKyAgICBwYXNzCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBfbHhtbAorICAgIHJlZ2lzdGVyX3RyZWVidWlsZGVyc19mcm9tKF9seG1sKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgVGhleSBkb24ndCBoYXZlIGx4bWwgaW5zdGFsbGVkLgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1sNWxpYi5weSBiL2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1sNWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGUzNmFlNwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19odG1sNWxpYi5weQpAQCAtMCwwICsxLDI4NSBAQAorX19hbGxfXyA9IFsKKyAgICAnSFRNTDVUcmVlQnVpbGRlcicsCisgICAgXQorCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBQRVJNSVNTSVZFLAorICAgIEhUTUwsCisgICAgSFRNTF81LAorICAgIEhUTUxUcmVlQnVpbGRlciwKKyAgICApCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCBOYW1lc3BhY2VkQXR0cmlidXRlCitpbXBvcnQgaHRtbDVsaWIKK2Zyb20gaHRtbDVsaWIuY29uc3RhbnRzIGltcG9ydCBuYW1lc3BhY2VzCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ29tbWVudCwKKyAgICBEb2N0eXBlLAorICAgIE5hdmlnYWJsZVN0cmluZywKKyAgICBUYWcsCisgICAgKQorCitjbGFzcyBIVE1MNVRyZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlcik6CisgICAgIiIiVXNlIGh0bWw1bGliIHRvIGJ1aWxkIGEgdHJlZS4iIiIKKworICAgIGZlYXR1cmVzID0gWydodG1sNWxpYicsIFBFUk1JU1NJVkUsIEhUTUxfNSwgSFRNTF0KKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nKToKKyAgICAgICAgIyBTdG9yZSB0aGUgdXNlci1zcGVjaWZpZWQgZW5jb2RpbmcgZm9yIHVzZSBsYXRlciBvbi4KKyAgICAgICAgc2VsZi51c2VyX3NwZWNpZmllZF9lbmNvZGluZyA9IHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nCisgICAgICAgIHlpZWxkIChtYXJrdXAsIE5vbmUsIE5vbmUsIEZhbHNlKQorCisgICAgIyBUaGVzZSBtZXRob2RzIGFyZSBkZWZpbmVkIGJ5IEJlYXV0aWZ1bCBTb3VwLgorICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGlmIHNlbGYuc291cC5wYXJzZV9vbmx5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiWW91IHByb3ZpZGVkIGEgdmFsdWUgZm9yIHBhcnNlX29ubHksIGJ1dCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCBwYXJzZV9vbmx5LiBUaGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgcGFyc2VkLiIpCisgICAgICAgIHBhcnNlciA9IGh0bWw1bGliLkhUTUxQYXJzZXIodHJlZT1zZWxmLmNyZWF0ZV90cmVlYnVpbGRlcikKKyAgICAgICAgZG9jID0gcGFyc2VyLnBhcnNlKG1hcmt1cCwgZW5jb2Rpbmc9c2VsZi51c2VyX3NwZWNpZmllZF9lbmNvZGluZykKKworICAgICAgICAjIFNldCB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGRldGVjdGVkIGJ5IHRoZSB0b2tlbml6ZXIuCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhpcyBiZWNhdXNlIGh0bWw1bGliIHNldHMKKyAgICAgICAgICAgICMgY2hhckVuY29kaW5nIHRvIFVURi04IGlmIGl0IGdldHMgVW5pY29kZSBpbnB1dC4KKyAgICAgICAgICAgIGRvYy5vcmlnaW5hbF9lbmNvZGluZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRvYy5vcmlnaW5hbF9lbmNvZGluZyA9IHBhcnNlci50b2tlbml6ZXIuc3RyZWFtLmNoYXJFbmNvZGluZ1swXQorCisgICAgZGVmIGNyZWF0ZV90cmVlYnVpbGRlcihzZWxmLCBuYW1lc3BhY2VIVE1MRWxlbWVudHMpOgorICAgICAgICBzZWxmLnVuZGVybHlpbmdfYnVpbGRlciA9IFRyZWVCdWlsZGVyRm9ySHRtbDVsaWIoCisgICAgICAgICAgICBzZWxmLnNvdXAsIG5hbWVzcGFjZUhUTUxFbGVtZW50cykKKyAgICAgICAgcmV0dXJuIHNlbGYudW5kZXJseWluZ19idWlsZGVyCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIlNlZSBgVHJlZUJ1aWxkZXJgLiIiIgorICAgICAgICByZXR1cm4gdSc8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+JXM8L2JvZHk+PC9odG1sPicgJSBmcmFnbWVudAorCisKK2NsYXNzIFRyZWVCdWlsZGVyRm9ySHRtbDVsaWIoaHRtbDVsaWIudHJlZWJ1aWxkZXJzLl9iYXNlLlRyZWVCdWlsZGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VwLCBuYW1lc3BhY2VIVE1MRWxlbWVudHMpOgorICAgICAgICBzZWxmLnNvdXAgPSBzb3VwCisgICAgICAgIHN1cGVyKFRyZWVCdWlsZGVyRm9ySHRtbDVsaWIsIHNlbGYpLl9faW5pdF9fKG5hbWVzcGFjZUhUTUxFbGVtZW50cykKKworICAgIGRlZiBkb2N1bWVudENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnNvdXAucmVzZXQoKQorICAgICAgICByZXR1cm4gRWxlbWVudChzZWxmLnNvdXAsIHNlbGYuc291cCwgTm9uZSkKKworICAgIGRlZiBpbnNlcnREb2N0eXBlKHNlbGYsIHRva2VuKToKKyAgICAgICAgbmFtZSA9IHRva2VuWyJuYW1lIl0KKyAgICAgICAgcHVibGljSWQgPSB0b2tlblsicHVibGljSWQiXQorICAgICAgICBzeXN0ZW1JZCA9IHRva2VuWyJzeXN0ZW1JZCJdCisKKyAgICAgICAgZG9jdHlwZSA9IERvY3R5cGUuZm9yX25hbWVfYW5kX2lkcyhuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpCisgICAgICAgIHNlbGYuc291cC5vYmplY3Rfd2FzX3BhcnNlZChkb2N0eXBlKQorCisgICAgZGVmIGVsZW1lbnRDbGFzcyhzZWxmLCBuYW1lLCBuYW1lc3BhY2UpOgorICAgICAgICB0YWcgPSBzZWxmLnNvdXAubmV3X3RhZyhuYW1lLCBuYW1lc3BhY2UpCisgICAgICAgIHJldHVybiBFbGVtZW50KHRhZywgc2VsZi5zb3VwLCBuYW1lc3BhY2UpCisKKyAgICBkZWYgY29tbWVudENsYXNzKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gVGV4dE5vZGUoQ29tbWVudChkYXRhKSwgc2VsZi5zb3VwKQorCisgICAgZGVmIGZyYWdtZW50Q2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIpCisgICAgICAgIHNlbGYuc291cC5uYW1lID0gIltkb2N1bWVudF9mcmFnbWVudF0iCisgICAgICAgIHJldHVybiBFbGVtZW50KHNlbGYuc291cCwgc2VsZi5zb3VwLCBOb25lKQorCisgICAgZGVmIGFwcGVuZENoaWxkKHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWCBUaGlzIGNvZGUgaXMgbm90IGNvdmVyZWQgYnkgdGhlIEJTNCB0ZXN0cy4KKyAgICAgICAgc2VsZi5zb3VwLmFwcGVuZChub2RlLmVsZW1lbnQpCisKKyAgICBkZWYgZ2V0RG9jdW1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNvdXAKKworICAgIGRlZiBnZXRGcmFnbWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5UcmVlQnVpbGRlci5nZXRGcmFnbWVudChzZWxmKS5lbGVtZW50CisKK2NsYXNzIEF0dHJMaXN0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CisgICAgICAgIHNlbGYuYXR0cnMgPSBkaWN0KHNlbGYuZWxlbWVudC5hdHRycykKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuYXR0cnMuaXRlbXMoKSkuX19pdGVyX18oKQorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICJzZXQgYXR0ciIsIG5hbWUsIHZhbHVlCisgICAgICAgIHNlbGYuZWxlbWVudFtuYW1lXSA9IHZhbHVlCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLmF0dHJzLml0ZW1zKCkpCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYuYXR0cnMua2V5cygpKQorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuYXR0cnMpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5hdHRyc1tuYW1lXQorICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGluIGxpc3Qoc2VsZi5hdHRycy5rZXlzKCkpCisKKworY2xhc3MgRWxlbWVudChodG1sNWxpYi50cmVlYnVpbGRlcnMuX2Jhc2UuTm9kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQsIHNvdXAsIG5hbWVzcGFjZSk6CisgICAgICAgIGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5Ob2RlLl9faW5pdF9fKHNlbGYsIGVsZW1lbnQubmFtZSkKKyAgICAgICAgc2VsZi5lbGVtZW50ID0gZWxlbWVudAorICAgICAgICBzZWxmLnNvdXAgPSBzb3VwCisgICAgICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCisKKyAgICBkZWYgYXBwZW5kQ2hpbGQoc2VsZiwgbm9kZSk6CisgICAgICAgIHN0cmluZ19jaGlsZCA9IGNoaWxkID0gTm9uZQorICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgIyBTb21lIG90aGVyIHBpZWNlIG9mIGNvZGUgZGVjaWRlZCB0byBwYXNzIGluIGEgc3RyaW5nCisgICAgICAgICAgICAjIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBUZXh0RWxlbWVudCBvYmplY3QgdG8gY29udGFpbiB0aGUKKyAgICAgICAgICAgICMgc3RyaW5nLgorICAgICAgICAgICAgc3RyaW5nX2NoaWxkID0gY2hpbGQgPSBub2RlCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBUYWcpOgorICAgICAgICAgICAgIyBTb21lIG90aGVyIHBpZWNlIG9mIGNvZGUgZGVjaWRlZCB0byBwYXNzIGluIGEgVGFnCisgICAgICAgICAgICAjIGluc3RlYWQgb2YgY3JlYXRpbmcgYW4gRWxlbWVudCBvYmplY3QgdG8gY29udGFpbiB0aGUKKyAgICAgICAgICAgICMgVGFnLgorICAgICAgICAgICAgY2hpbGQgPSBub2RlCisgICAgICAgIGVsaWYgbm9kZS5lbGVtZW50Ll9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmc6CisgICAgICAgICAgICBzdHJpbmdfY2hpbGQgPSBjaGlsZCA9IG5vZGUuZWxlbWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hpbGQgPSBub2RlLmVsZW1lbnQKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjaGlsZCwgYmFzZXN0cmluZykgYW5kIGNoaWxkLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5vZGUuZWxlbWVudC5leHRyYWN0KCkKKworICAgICAgICBpZiAoc3RyaW5nX2NoaWxkIGFuZCBzZWxmLmVsZW1lbnQuY29udGVudHMKKyAgICAgICAgICAgIGFuZCBzZWxmLmVsZW1lbnQuY29udGVudHNbLTFdLl9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgIyBXZSBhcmUgYXBwZW5kaW5nIGEgc3RyaW5nIG9udG8gYW5vdGhlciBzdHJpbmcuCisgICAgICAgICAgICAjIFRPRE8gVGhpcyBoYXMgTyhuXjIpIHBlcmZvcm1hbmNlLCBmb3IgaW5wdXQgbGlrZQorICAgICAgICAgICAgIyAiYTwvYT5hPC9hPmE8L2E+Li4uIgorICAgICAgICAgICAgb2xkX2VsZW1lbnQgPSBzZWxmLmVsZW1lbnQuY29udGVudHNbLTFdCisgICAgICAgICAgICBuZXdfZWxlbWVudCA9IHNlbGYuc291cC5uZXdfc3RyaW5nKG9sZF9lbGVtZW50ICsgc3RyaW5nX2NoaWxkKQorICAgICAgICAgICAgb2xkX2VsZW1lbnQucmVwbGFjZV93aXRoKG5ld19lbGVtZW50KQorICAgICAgICAgICAgc2VsZi5zb3VwLl9tb3N0X3JlY2VudF9lbGVtZW50ID0gbmV3X2VsZW1lbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSBicmFuZCBuZXcgTmF2aWdhYmxlU3RyaW5nIGZyb20gdGhpcyBzdHJpbmcuCisgICAgICAgICAgICAgICAgY2hpbGQgPSBzZWxmLnNvdXAubmV3X3N0cmluZyhub2RlKQorCisgICAgICAgICAgICAjIFRlbGwgQmVhdXRpZnVsIFNvdXAgdG8gYWN0IGFzIGlmIGl0IHBhcnNlZCB0aGlzIGVsZW1lbnQKKyAgICAgICAgICAgICMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhcmVudCdzIGxhc3QgZGVzY2VuZGFudC4gKE9yCisgICAgICAgICAgICAjIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwYXJlbnQsIGlmIGl0IGhhcyBubyBjaGlsZHJlbi4pCisgICAgICAgICAgICBpZiBzZWxmLmVsZW1lbnQuY29udGVudHM6CisgICAgICAgICAgICAgICAgbW9zdF9yZWNlbnRfZWxlbWVudCA9IHNlbGYuZWxlbWVudC5fbGFzdF9kZXNjZW5kYW50KEZhbHNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50ID0gc2VsZi5lbGVtZW50CisKKyAgICAgICAgICAgIHNlbGYuc291cC5vYmplY3Rfd2FzX3BhcnNlZCgKKyAgICAgICAgICAgICAgICBjaGlsZCwgcGFyZW50PXNlbGYuZWxlbWVudCwKKyAgICAgICAgICAgICAgICBtb3N0X3JlY2VudF9lbGVtZW50PW1vc3RfcmVjZW50X2VsZW1lbnQpCisKKyAgICBkZWYgZ2V0QXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIEF0dHJMaXN0KHNlbGYuZWxlbWVudCkKKworICAgIGRlZiBzZXRBdHRyaWJ1dGVzKHNlbGYsIGF0dHJpYnV0ZXMpOgorICAgICAgICBpZiBhdHRyaWJ1dGVzIGlzIG5vdCBOb25lIGFuZCBsZW4oYXR0cmlidXRlcykgPiAwOgorCisgICAgICAgICAgICBjb252ZXJ0ZWRfYXR0cmlidXRlcyA9IFtdCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbGlzdChhdHRyaWJ1dGVzLml0ZW1zKCkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgdHVwbGUpOgorICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoKm5hbWUpCisgICAgICAgICAgICAgICAgICAgIGRlbCBhdHRyaWJ1dGVzW25hbWVdCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmV3X25hbWVdID0gdmFsdWUKKworICAgICAgICAgICAgc2VsZi5zb3VwLmJ1aWxkZXIuX3JlcGxhY2VfY2RhdGFfbGlzdF9hdHRyaWJ1dGVfdmFsdWVzKAorICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgYXR0cmlidXRlcykKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBhdHRyaWJ1dGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50W25hbWVdID0gdmFsdWUKKworICAgICAgICAgICAgIyBUaGUgYXR0cmlidXRlcyBtYXkgY29udGFpbiB2YXJpYWJsZXMgdGhhdCBuZWVkIHN1YnN0aXR1dGlvbi4KKyAgICAgICAgICAgICMgQ2FsbCBzZXRfdXBfc3Vic3RpdHV0aW9ucyBtYW51YWxseS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlIFRhZyBjb25zdHJ1Y3RvciBjYWxsZWQgdGhpcyBtZXRob2Qgd2hlbiB0aGUgVGFnIHdhcyBjcmVhdGVkLAorICAgICAgICAgICAgIyBidXQgd2UganVzdCBzZXQvY2hhbmdlZCB0aGUgYXR0cmlidXRlcywgc28gY2FsbCBpdCBhZ2Fpbi4KKyAgICAgICAgICAgIHNlbGYuc291cC5idWlsZGVyLnNldF91cF9zdWJzdGl0dXRpb25zKHNlbGYuZWxlbWVudCkKKyAgICBhdHRyaWJ1dGVzID0gcHJvcGVydHkoZ2V0QXR0cmlidXRlcywgc2V0QXR0cmlidXRlcykKKworICAgIGRlZiBpbnNlcnRUZXh0KHNlbGYsIGRhdGEsIGluc2VydEJlZm9yZT1Ob25lKToKKyAgICAgICAgaWYgaW5zZXJ0QmVmb3JlOgorICAgICAgICAgICAgdGV4dCA9IFRleHROb2RlKHNlbGYuc291cC5uZXdfc3RyaW5nKGRhdGEpLCBzZWxmLnNvdXApCisgICAgICAgICAgICBzZWxmLmluc2VydEJlZm9yZShkYXRhLCBpbnNlcnRCZWZvcmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFwcGVuZENoaWxkKGRhdGEpCisKKyAgICBkZWYgaW5zZXJ0QmVmb3JlKHNlbGYsIG5vZGUsIHJlZk5vZGUpOgorICAgICAgICBpbmRleCA9IHNlbGYuZWxlbWVudC5pbmRleChyZWZOb2RlLmVsZW1lbnQpCisgICAgICAgIGlmIChub2RlLmVsZW1lbnQuX19jbGFzc19fID09IE5hdmlnYWJsZVN0cmluZyBhbmQgc2VsZi5lbGVtZW50LmNvbnRlbnRzCisgICAgICAgICAgICBhbmQgc2VsZi5lbGVtZW50LmNvbnRlbnRzW2luZGV4LTFdLl9fY2xhc3NfXyA9PSBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAgIyAoU2VlIGNvbW1lbnRzIGluIGFwcGVuZENoaWxkKQorICAgICAgICAgICAgb2xkX25vZGUgPSBzZWxmLmVsZW1lbnQuY29udGVudHNbaW5kZXgtMV0KKyAgICAgICAgICAgIG5ld19zdHIgPSBzZWxmLnNvdXAubmV3X3N0cmluZyhvbGRfbm9kZSArIG5vZGUuZWxlbWVudCkKKyAgICAgICAgICAgIG9sZF9ub2RlLnJlcGxhY2Vfd2l0aChuZXdfc3RyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lbGVtZW50Lmluc2VydChpbmRleCwgbm9kZS5lbGVtZW50KQorICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBzZWxmCisKKyAgICBkZWYgcmVtb3ZlQ2hpbGQoc2VsZiwgbm9kZSk6CisgICAgICAgIG5vZGUuZWxlbWVudC5leHRyYWN0KCkKKworICAgIGRlZiByZXBhcmVudENoaWxkcmVuKHNlbGYsIG5ld19wYXJlbnQpOgorICAgICAgICAiIiJNb3ZlIGFsbCBvZiB0aGlzIHRhZydzIGNoaWxkcmVuIGludG8gYW5vdGhlciB0YWcuIiIiCisgICAgICAgIGVsZW1lbnQgPSBzZWxmLmVsZW1lbnQKKyAgICAgICAgbmV3X3BhcmVudF9lbGVtZW50ID0gbmV3X3BhcmVudC5lbGVtZW50CisgICAgICAgICMgRGV0ZXJtaW5lIHdoYXQgdGhpcyB0YWcncyBuZXh0X2VsZW1lbnQgd2lsbCBiZSBvbmNlIGFsbCB0aGUgY2hpbGRyZW4KKyAgICAgICAgIyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgZmluYWxfbmV4dF9lbGVtZW50ID0gZWxlbWVudC5uZXh0X3NpYmxpbmcKKworICAgICAgICBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQgPSBuZXdfcGFyZW50X2VsZW1lbnQuX2xhc3RfZGVzY2VuZGFudChGYWxzZSwgRmFsc2UpCisgICAgICAgIGlmIGxlbihuZXdfcGFyZW50X2VsZW1lbnQuY29udGVudHMpID4gMDoKKyAgICAgICAgICAgICMgVGhlIG5ldyBwYXJlbnQgYWxyZWFkeSBjb250YWlucyBjaGlsZHJlbi4gV2Ugd2lsbCBiZQorICAgICAgICAgICAgIyBhcHBlbmRpbmcgdGhpcyB0YWcncyBjaGlsZHJlbiB0byB0aGUgZW5kLgorICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9jaGlsZCA9IG5ld19wYXJlbnRfZWxlbWVudC5jb250ZW50c1stMV0KKyAgICAgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQgPSBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnQubmV4dF9lbGVtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBuZXcgcGFyZW50IGNvbnRhaW5zIG5vIGNoaWxkcmVuLgorICAgICAgICAgICAgbmV3X3BhcmVudHNfbGFzdF9jaGlsZCA9IE5vbmUKKyAgICAgICAgICAgIG5ld19wYXJlbnRzX2xhc3RfZGVzY2VuZGFudF9uZXh0X2VsZW1lbnQgPSBuZXdfcGFyZW50X2VsZW1lbnQubmV4dF9lbGVtZW50CisKKyAgICAgICAgdG9fYXBwZW5kID0gZWxlbWVudC5jb250ZW50cworICAgICAgICBhcHBlbmRfYWZ0ZXIgPSBuZXdfcGFyZW50LmVsZW1lbnQuY29udGVudHMKKyAgICAgICAgaWYgbGVuKHRvX2FwcGVuZCkgPiAwOgorICAgICAgICAgICAgIyBTZXQgdGhlIGZpcnN0IGNoaWxkJ3MgcHJldmlvdXNfZWxlbWVudCBhbmQgcHJldmlvdXNfc2libGluZworICAgICAgICAgICAgIyB0byBlbGVtZW50cyB3aXRoaW4gdGhlIG5ldyBwYXJlbnQKKyAgICAgICAgICAgIGZpcnN0X2NoaWxkID0gdG9fYXBwZW5kWzBdCisgICAgICAgICAgICBmaXJzdF9jaGlsZC5wcmV2aW91c19lbGVtZW50ID0gbmV3X3BhcmVudHNfbGFzdF9kZXNjZW5kYW50CisgICAgICAgICAgICBmaXJzdF9jaGlsZC5wcmV2aW91c19zaWJsaW5nID0gbmV3X3BhcmVudHNfbGFzdF9jaGlsZAorCisgICAgICAgICAgICAjIEZpeCB0aGUgbGFzdCBjaGlsZCdzIG5leHRfZWxlbWVudCBhbmQgbmV4dF9zaWJsaW5nCisgICAgICAgICAgICBsYXN0X2NoaWxkID0gdG9fYXBwZW5kWy0xXQorICAgICAgICAgICAgbGFzdF9jaGlsZC5uZXh0X2VsZW1lbnQgPSBuZXdfcGFyZW50c19sYXN0X2Rlc2NlbmRhbnRfbmV4dF9lbGVtZW50CisgICAgICAgICAgICBsYXN0X2NoaWxkLm5leHRfc2libGluZyA9IE5vbmUKKworICAgICAgICBmb3IgY2hpbGQgaW4gdG9fYXBwZW5kOgorICAgICAgICAgICAgY2hpbGQucGFyZW50ID0gbmV3X3BhcmVudF9lbGVtZW50CisgICAgICAgICAgICBuZXdfcGFyZW50X2VsZW1lbnQuY29udGVudHMuYXBwZW5kKGNoaWxkKQorCisgICAgICAgICMgTm93IHRoYXQgdGhpcyBlbGVtZW50IGhhcyBubyBjaGlsZHJlbiwgY2hhbmdlIGl0cyAubmV4dF9lbGVtZW50LgorICAgICAgICBlbGVtZW50LmNvbnRlbnRzID0gW10KKyAgICAgICAgZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBmaW5hbF9uZXh0X2VsZW1lbnQKKworICAgIGRlZiBjbG9uZU5vZGUoc2VsZik6CisgICAgICAgIHRhZyA9IHNlbGYuc291cC5uZXdfdGFnKHNlbGYuZWxlbWVudC5uYW1lLCBzZWxmLm5hbWVzcGFjZSkKKyAgICAgICAgbm9kZSA9IEVsZW1lbnQodGFnLCBzZWxmLnNvdXAsIHNlbGYubmFtZXNwYWNlKQorICAgICAgICBmb3Iga2V5LHZhbHVlIGluIHNlbGYuYXR0cmlidXRlczoKKyAgICAgICAgICAgIG5vZGUuYXR0cmlidXRlc1trZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiBoYXNDb250ZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbGVtZW50LmNvbnRlbnRzCisKKyAgICBkZWYgZ2V0TmFtZVR1cGxlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm5hbWVzcGFjZSA9PSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZXNbImh0bWwiXSwgc2VsZi5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lc3BhY2UsIHNlbGYubmFtZQorCisgICAgbmFtZVR1cGxlID0gcHJvcGVydHkoZ2V0TmFtZVR1cGxlKQorCitjbGFzcyBUZXh0Tm9kZShFbGVtZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudCwgc291cCk6CisgICAgICAgIGh0bWw1bGliLnRyZWVidWlsZGVycy5fYmFzZS5Ob2RlLl9faW5pdF9fKHNlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuZWxlbWVudCA9IGVsZW1lbnQKKyAgICAgICAgc2VsZi5zb3VwID0gc291cAorCisgICAgZGVmIGNsb25lTm9kZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWxwYXJzZXIucHkgYi9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9faHRtbHBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThkOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYnM0L2J1aWxkZXIvX2h0bWxwYXJzZXIucHkKQEAgLTAsMCArMSwyNTggQEAKKyIiIlVzZSB0aGUgSFRNTFBhcnNlciBsaWJyYXJ5IHRvIHBhcnNlIEhUTUwgZmlsZXMgdGhhdCBhcmVuJ3QgdG9vIGJhZC4iIiIKKworX19hbGxfXyA9IFsKKyAgICAnSFRNTFBhcnNlclRyZWVCdWlsZGVyJywKKyAgICBdCisKK2Zyb20gSFRNTFBhcnNlciBpbXBvcnQgKAorICAgIEhUTUxQYXJzZXIsCisgICAgSFRNTFBhcnNlRXJyb3IsCisgICAgKQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKyMgU3RhcnRpbmcgaW4gUHl0aG9uIDMuMiwgdGhlIEhUTUxQYXJzZXIgY29uc3RydWN0b3IgdGFrZXMgYSAnc3RyaWN0JworIyBhcmd1bWVudCwgd2hpY2ggd2UnZCBsaWtlIHRvIHNldCB0byBGYWxzZS4gVW5mb3J0dW5hdGVseSwKKyMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMjczIG1ha2VzIHN0cmljdD1UcnVlIGEgYmV0dGVyIGJldAorIyBiZWZvcmUgUHl0aG9uIDMuMi4zLgorIworIyBBdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSwgd2UgbW9ua2V5cGF0Y2ggSFRNTFBhcnNlciBzbyB0aGF0CisjIHN0cmljdD1UcnVlIHdvcmtzIHdlbGwgb24gUHl0aG9uIDMuMi4yLgorbWFqb3IsIG1pbm9yLCByZWxlYXNlID0gc3lzLnZlcnNpb25faW5mb1s6M10KK0NPTlNUUlVDVE9SX1RBS0VTX1NUUklDVCA9ICgKKyAgICBtYWpvciA+IDMKKyAgICBvciAobWFqb3IgPT0gMyBhbmQgbWlub3IgPiAyKQorICAgIG9yIChtYWpvciA9PSAzIGFuZCBtaW5vciA9PSAyIGFuZCByZWxlYXNlID49IDMpKQorCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ0RhdGEsCisgICAgQ29tbWVudCwKKyAgICBEZWNsYXJhdGlvbiwKKyAgICBEb2N0eXBlLAorICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwKKyAgICApCitmcm9tIGJzNC5kYW1taXQgaW1wb3J0IEVudGl0eVN1YnN0aXR1dGlvbiwgVW5pY29kZURhbW1pdAorCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgSFRNTCwKKyAgICBIVE1MVHJlZUJ1aWxkZXIsCisgICAgU1RSSUNULAorICAgICkKKworCitIVE1MUEFSU0VSID0gJ2h0bWwucGFyc2VyJworCitjbGFzcyBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlcihIVE1MUGFyc2VyKToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0dGFnKHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgIyBYWFggbmFtZXNwYWNlCisgICAgICAgIGF0dHJfZGljdCA9IHt9CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJzOgorICAgICAgICAgICAgIyBDaGFuZ2UgTm9uZSBhdHRyaWJ1dGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICMgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG90aGVyIHRyZWUgYnVpbGRlcnMuCisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgICAgIGF0dHJfZGljdFtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGF0dHJ2YWx1ZSA9ICciIicKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9zdGFydHRhZyhuYW1lLCBOb25lLCBOb25lLCBhdHRyX2RpY3QpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9lbmR0YWcobmFtZSkKKworICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgICMgWFhYIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEhUTUxQYXJzZXIuIFJlbW92ZSB0aGlzIG9uY2UKKyAgICAgICAgIyBpdCdzIGZpeGVkLgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ3gnKToKKyAgICAgICAgICAgIHJlYWxfbmFtZSA9IGludChuYW1lLmxzdHJpcCgneCcpLCAxNikKKyAgICAgICAgZWxpZiBuYW1lLnN0YXJ0c3dpdGgoJ1gnKToKKyAgICAgICAgICAgIHJlYWxfbmFtZSA9IGludChuYW1lLmxzdHJpcCgnWCcpLCAxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWxfbmFtZSA9IGludChuYW1lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSB1bmljaHIocmVhbF9uYW1lKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpLCBlOgorICAgICAgICAgICAgZGF0YSA9IHUiXE57UkVQTEFDRU1FTlQgQ0hBUkFDVEVSfSIKKworICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgY2hhcmFjdGVyID0gRW50aXR5U3Vic3RpdHV0aW9uLkhUTUxfRU5USVRZX1RPX0NIQVJBQ1RFUi5nZXQobmFtZSkKKyAgICAgICAgaWYgY2hhcmFjdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGF0YSA9IGNoYXJhY3RlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9ICImJXM7IiAlIG5hbWUKKyAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShkYXRhKQorCisgICAgZGVmIGhhbmRsZV9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShDb21tZW50KQorCisgICAgZGVmIGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIGlmIGRhdGEuc3RhcnRzd2l0aCgiRE9DVFlQRSAiKToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhW2xlbigiRE9DVFlQRSAiKTpdCisgICAgICAgIGVsaWYgZGF0YSA9PSAnRE9DVFlQRSc6CisgICAgICAgICAgICAjIGkuZS4gIjwhRE9DVFlQRT4iCisgICAgICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKERvY3R5cGUpCisKKyAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhLnVwcGVyKCkuc3RhcnRzd2l0aCgnQ0RBVEFbJyk6CisgICAgICAgICAgICBjbHMgPSBDRGF0YQorICAgICAgICAgICAgZGF0YSA9IGRhdGFbbGVuKCdDREFUQVsnKTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMgPSBEZWNsYXJhdGlvbgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShkYXRhKQorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YShjbHMpCisKKyAgICBkZWYgaGFuZGxlX3BpKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNvdXAuZW5kRGF0YSgpCisgICAgICAgIGlmIGRhdGEuZW5kc3dpdGgoIj8iKSBhbmQgZGF0YS5sb3dlcigpLnN0YXJ0c3dpdGgoInhtbCIpOgorICAgICAgICAgICAgIyAiQW4gWEhUTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB1c2luZyB0aGUgdHJhaWxpbmcgJz8nCisgICAgICAgICAgICAjIHdpbGwgY2F1c2UgdGhlICc/JyB0byBiZSBpbmNsdWRlZCBpbiBkYXRhLiIgLSBIVE1MUGFyc2VyCisgICAgICAgICAgICAjIGRvY3MuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFN0cmlwIHRoZSBxdWVzdGlvbiBtYXJrIHNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIHR3bworICAgICAgICAgICAgIyBxdWVzdGlvbiBtYXJrcy4KKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzotMV0KKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGRhdGEpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKFByb2Nlc3NpbmdJbnN0cnVjdGlvbikKKworCitjbGFzcyBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyKToKKworICAgIGlzX3htbCA9IEZhbHNlCisgICAgZmVhdHVyZXMgPSBbSFRNTCwgU1RSSUNULCBIVE1MUEFSU0VSXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIENPTlNUUlVDVE9SX1RBS0VTX1NUUklDVDoKKyAgICAgICAgICAgIGt3YXJnc1snc3RyaWN0J10gPSBGYWxzZQorICAgICAgICBzZWxmLnBhcnNlcl9hcmdzID0gKGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBwcmVwYXJlX21hcmt1cChzZWxmLCBtYXJrdXAsIHVzZXJfc3BlY2lmaWVkX2VuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgOnJldHVybjogQSA0LXR1cGxlIChtYXJrdXAsIG9yaWdpbmFsIGVuY29kaW5nLCBlbmNvZGluZworICAgICAgICBkZWNsYXJlZCB3aXRoaW4gbWFya3VwLCB3aGV0aGVyIGFueSBjaGFyYWN0ZXJzIGhhZCB0byBiZQorICAgICAgICByZXBsYWNlZCB3aXRoIFJFUExBQ0VNRU5UIENIQVJBQ1RFUikuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSk6CisgICAgICAgICAgICB5aWVsZCAobWFya3VwLCBOb25lLCBOb25lLCBGYWxzZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeV9lbmNvZGluZ3MgPSBbdXNlcl9zcGVjaWZpZWRfZW5jb2RpbmcsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nXQorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCwgdHJ5X2VuY29kaW5ncywgaXNfaHRtbD1UcnVlKQorICAgICAgICB5aWVsZCAoZGFtbWl0Lm1hcmt1cCwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLAorICAgICAgICAgICAgICAgZGFtbWl0LmRlY2xhcmVkX2h0bWxfZW5jb2RpbmcsCisgICAgICAgICAgICAgICBkYW1taXQuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGFyZ3MsIGt3YXJncyA9IHNlbGYucGFyc2VyX2FyZ3MKKyAgICAgICAgcGFyc2VyID0gQmVhdXRpZnVsU291cEhUTUxQYXJzZXIoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBwYXJzZXIuc291cCA9IHNlbGYuc291cAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChtYXJrdXApCisgICAgICAgIGV4Y2VwdCBIVE1MUGFyc2VFcnJvciwgZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oUnVudGltZVdhcm5pbmcoCisgICAgICAgICAgICAgICAgIlB5dGhvbidzIGJ1aWx0LWluIEhUTUxQYXJzZXIgY2Fubm90IHBhcnNlIHRoZSBnaXZlbiBkb2N1bWVudC4gVGhpcyBpcyBub3QgYSBidWcgaW4gQmVhdXRpZnVsIFNvdXAuIFRoZSBiZXN0IHNvbHV0aW9uIGlzIHRvIGluc3RhbGwgYW4gZXh0ZXJuYWwgcGFyc2VyIChseG1sIG9yIGh0bWw1bGliKSwgYW5kIHVzZSBCZWF1dGlmdWwgU291cCB3aXRoIHRoYXQgcGFyc2VyLiBTZWUgaHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1bFNvdXAvYnM0L2RvYy8jaW5zdGFsbGluZy1hLXBhcnNlciBmb3IgaGVscC4iKSkKKyAgICAgICAgICAgIHJhaXNlIGUKKworIyBQYXRjaCAzLjIgdmVyc2lvbnMgb2YgSFRNTFBhcnNlciBlYXJsaWVyIHRoYW4gMy4yLjMgdG8gdXNlIHNvbWUKKyMgMy4yLjMgY29kZS4gVGhpcyBlbnN1cmVzIHRoZXkgZG9uJ3QgdHJlYXQgbWFya3VwIGxpa2UgPHA+PC9wPiBhcyBhCisjIHN0cmluZy4KKyMKKyMgWFhYIFRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZCBvbmNlIG1vc3QgUHl0aG9uIDMgdXNlcnMgYXJlIG9uIDMuMi4zLgoraWYgbWFqb3IgPT0gMyBhbmQgbWlub3IgPT0gMiBhbmQgbm90IENPTlNUUlVDVE9SX1RBS0VTX1NUUklDVDoKKyAgICBpbXBvcnQgcmUKKyAgICBhdHRyZmluZF90b2xlcmFudCA9IHJlLmNvbXBpbGUoCisgICAgICAgIHInXHMqKCg/PD1bXCciXHNdKVteXHMvPl1bXlxzLz0+XSopKFxzKj0rXHMqJworICAgICAgICByJyhcJ1teXCddKlwnfCJbXiJdKiJ8KD8hW1wnIl0pW14+XHNdKikpPycpCisgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyLmF0dHJmaW5kX3RvbGVyYW50ID0gYXR0cmZpbmRfdG9sZXJhbnQKKworICAgIGxvY2F0ZXN0YXJ0dGFnZW5kID0gcmUuY29tcGlsZShyIiIiCisgIDxbYS16QS1aXVstLmEtekEtWjAtOTpfXSogICAgICAgICAgIyB0YWcgbmFtZQorICAoPzpccysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpdGVzcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWUKKyAgICAoPzpbYS16QS1aX11bLS46YS16QS1aMC05X10qICAgICAjIGF0dHJpYnV0ZSBuYW1lCisgICAgICAoPzpccyo9XHMqICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZSBpbmRpY2F0b3IKKyAgICAgICAgKD86J1teJ10qJyAgICAgICAgICAgICAgICAgICAjIExJVEEtZW5jbG9zZWQgdmFsdWUKKyAgICAgICAgICB8XCJbXlwiXSpcIiAgICAgICAgICAgICAgICAjIExJVC1lbmNsb3NlZCB2YWx1ZQorICAgICAgICAgIHxbXidcIj5cc10rICAgICAgICAgICAgICAgICMgYmFyZSB2YWx1ZQorICAgICAgICAgKQorICAgICAgICk/CisgICAgICkKKyAgICkqCisgIFxzKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyB3aGl0ZXNwYWNlCisiIiIsIHJlLlZFUkJPU0UpCisgICAgQmVhdXRpZnVsU291cEhUTUxQYXJzZXIubG9jYXRlc3RhcnR0YWdlbmQgPSBsb2NhdGVzdGFydHRhZ2VuZAorCisgICAgZnJvbSBodG1sLnBhcnNlciBpbXBvcnQgdGFnZmluZCwgYXR0cmZpbmQKKworICAgIGRlZiBwYXJzZV9zdGFydHRhZyhzZWxmLCBpKToKKyAgICAgICAgc2VsZi5fX3N0YXJ0dGFnX3RleHQgPSBOb25lCisgICAgICAgIGVuZHBvcyA9IHNlbGYuY2hlY2tfZm9yX3dob2xlX3N0YXJ0X3RhZyhpKQorICAgICAgICBpZiBlbmRwb3MgPCAwOgorICAgICAgICAgICAgcmV0dXJuIGVuZHBvcworICAgICAgICByYXdkYXRhID0gc2VsZi5yYXdkYXRhCisgICAgICAgIHNlbGYuX19zdGFydHRhZ190ZXh0ID0gcmF3ZGF0YVtpOmVuZHBvc10KKworICAgICAgICAjIE5vdyBwYXJzZSB0aGUgZGF0YSBiZXR3ZWVuIGkrMSBhbmQgaiBpbnRvIGEgdGFnIGFuZCBhdHRycworICAgICAgICBhdHRycyA9IFtdCisgICAgICAgIG1hdGNoID0gdGFnZmluZC5tYXRjaChyYXdkYXRhLCBpKzEpCisgICAgICAgIGFzc2VydCBtYXRjaCwgJ3VuZXhwZWN0ZWQgY2FsbCB0byBwYXJzZV9zdGFydHRhZygpJworICAgICAgICBrID0gbWF0Y2guZW5kKCkKKyAgICAgICAgc2VsZi5sYXN0dGFnID0gdGFnID0gcmF3ZGF0YVtpKzE6a10ubG93ZXIoKQorICAgICAgICB3aGlsZSBrIDwgZW5kcG9zOgorICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6CisgICAgICAgICAgICAgICAgbSA9IGF0dHJmaW5kLm1hdGNoKHJhd2RhdGEsIGspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG0gPSBhdHRyZmluZF90b2xlcmFudC5tYXRjaChyYXdkYXRhLCBrKQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGF0dHJuYW1lLCByZXN0LCBhdHRydmFsdWUgPSBtLmdyb3VwKDEsIDIsIDMpCisgICAgICAgICAgICBpZiBub3QgcmVzdDoKKyAgICAgICAgICAgICAgICBhdHRydmFsdWUgPSBOb25lCisgICAgICAgICAgICBlbGlmIGF0dHJ2YWx1ZVs6MV0gPT0gJ1wnJyA9PSBhdHRydmFsdWVbLTE6XSBvciBcCisgICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZVs6MV0gPT0gJyInID09IGF0dHJ2YWx1ZVstMTpdOgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IGF0dHJ2YWx1ZVsxOi0xXQorICAgICAgICAgICAgaWYgYXR0cnZhbHVlOgorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudW5lc2NhcGUoYXR0cnZhbHVlKQorICAgICAgICAgICAgYXR0cnMuYXBwZW5kKChhdHRybmFtZS5sb3dlcigpLCBhdHRydmFsdWUpKQorICAgICAgICAgICAgayA9IG0uZW5kKCkKKworICAgICAgICBlbmQgPSByYXdkYXRhW2s6ZW5kcG9zXS5zdHJpcCgpCisgICAgICAgIGlmIGVuZCBub3QgaW4gKCI+IiwgIi8+Iik6CisgICAgICAgICAgICBsaW5lbm8sIG9mZnNldCA9IHNlbGYuZ2V0cG9zKCkKKyAgICAgICAgICAgIGlmICJcbiIgaW4gc2VsZi5fX3N0YXJ0dGFnX3RleHQ6CisgICAgICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgc2VsZi5fX3N0YXJ0dGFnX3RleHQuY291bnQoIlxuIikKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW4oc2VsZi5fX3N0YXJ0dGFnX3RleHQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtIHNlbGYuX19zdGFydHRhZ190ZXh0LnJmaW5kKCJcbiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIGxlbihzZWxmLl9fc3RhcnR0YWdfdGV4dCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoImp1bmsgY2hhcmFjdGVycyBpbiBzdGFydCB0YWc6ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmF3ZGF0YVtrOmVuZHBvc11bOjIwXSwpKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6ZW5kcG9zXSkKKyAgICAgICAgICAgIHJldHVybiBlbmRwb3MKKyAgICAgICAgaWYgZW5kLmVuZHN3aXRoKCcvPicpOgorICAgICAgICAgICAgIyBYSFRNTC1zdHlsZSBlbXB0eSB0YWc6IDxzcGFuIGF0dHI9InZhbHVlIiAvPgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfc3RhcnRlbmR0YWcodGFnLCBhdHRycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX3N0YXJ0dGFnKHRhZywgYXR0cnMpCisgICAgICAgICAgICBpZiB0YWcgaW4gc2VsZi5DREFUQV9DT05URU5UX0VMRU1FTlRTOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2NkYXRhX21vZGUodGFnKQorICAgICAgICByZXR1cm4gZW5kcG9zCisKKyAgICBkZWYgc2V0X2NkYXRhX21vZGUoc2VsZiwgZWxlbSk6CisgICAgICAgIHNlbGYuY2RhdGFfZWxlbSA9IGVsZW0ubG93ZXIoKQorICAgICAgICBzZWxmLmludGVyZXN0aW5nID0gcmUuY29tcGlsZShyJzwvXHMqJXNccyo+JyAlIHNlbGYuY2RhdGFfZWxlbSwgcmUuSSkKKworICAgIEJlYXV0aWZ1bFNvdXBIVE1MUGFyc2VyLnBhcnNlX3N0YXJ0dGFnID0gcGFyc2Vfc3RhcnR0YWcKKyAgICBCZWF1dGlmdWxTb3VwSFRNTFBhcnNlci5zZXRfY2RhdGFfbW9kZSA9IHNldF9jZGF0YV9tb2RlCisKKyAgICBDT05TVFJVQ1RPUl9UQUtFU19TVFJJQ1QgPSBUcnVlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fbHhtbC5weSBiL2JpdGJha2UvbGliL2JzNC9idWlsZGVyL19seG1sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWQ0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvYnVpbGRlci9fbHhtbC5weQpAQCAtMCwwICsxLDIzMyBAQAorX19hbGxfXyA9IFsKKyAgICAnTFhNTFRyZWVCdWlsZGVyRm9yWE1MJywKKyAgICAnTFhNTFRyZWVCdWlsZGVyJywKKyAgICBdCisKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgY29sbGVjdGlvbnMKK2Zyb20gbHhtbCBpbXBvcnQgZXRyZWUKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0IENvbW1lbnQsIERvY3R5cGUsIE5hbWVzcGFjZWRBdHRyaWJ1dGUKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBGQVNULAorICAgIEhUTUwsCisgICAgSFRNTFRyZWVCdWlsZGVyLAorICAgIFBFUk1JU1NJVkUsCisgICAgUGFyc2VyUmVqZWN0ZWRNYXJrdXAsCisgICAgVHJlZUJ1aWxkZXIsCisgICAgWE1MKQorZnJvbSBiczQuZGFtbWl0IGltcG9ydCBFbmNvZGluZ0RldGVjdG9yCisKK0xYTUwgPSAnbHhtbCcKKworY2xhc3MgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKFRyZWVCdWlsZGVyKToKKyAgICBERUZBVUxUX1BBUlNFUl9DTEFTUyA9IGV0cmVlLlhNTFBhcnNlcgorCisgICAgaXNfeG1sID0gVHJ1ZQorCisgICAgIyBXZWxsLCBpdCdzIHBlcm1pc3NpdmUgYnkgWE1MIHBhcnNlciBzdGFuZGFyZHMuCisgICAgZmVhdHVyZXMgPSBbTFhNTCwgWE1MLCBGQVNULCBQRVJNSVNTSVZFXQorCisgICAgQ0hVTktfU0laRSA9IDUxMgorCisgICAgIyBUaGlzIG5hbWVzcGFjZSBtYXBwaW5nIGlzIHNwZWNpZmllZCBpbiB0aGUgWE1MIE5hbWVzcGFjZQorICAgICMgc3RhbmRhcmQuCisgICAgREVGQVVMVF9OU01BUFMgPSB7J2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScgOiAieG1sIn0KKworICAgIGRlZiBkZWZhdWx0X3BhcnNlcihzZWxmLCBlbmNvZGluZyk6CisgICAgICAgICMgVGhpcyBjYW4gZWl0aGVyIHJldHVybiBhIHBhcnNlciBvYmplY3Qgb3IgYSBjbGFzcywgd2hpY2gKKyAgICAgICAgIyB3aWxsIGJlIGluc3RhbnRpYXRlZCB3aXRoIGRlZmF1bHQgYXJndW1lbnRzLgorICAgICAgICBpZiBzZWxmLl9kZWZhdWx0X3BhcnNlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X3BhcnNlcgorICAgICAgICByZXR1cm4gZXRyZWUuWE1MUGFyc2VyKAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYsIHN0cmlwX2NkYXRhPUZhbHNlLCByZWNvdmVyPVRydWUsIGVuY29kaW5nPWVuY29kaW5nKQorCisgICAgZGVmIHBhcnNlcl9mb3Ioc2VsZiwgZW5jb2RpbmcpOgorICAgICAgICAjIFVzZSB0aGUgZGVmYXVsdCBwYXJzZXIuCisgICAgICAgIHBhcnNlciA9IHNlbGYuZGVmYXVsdF9wYXJzZXIoZW5jb2RpbmcpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJzZXIsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKKyAgICAgICAgICAgICMgSW5zdGFudGlhdGUgdGhlIHBhcnNlciB3aXRoIGRlZmF1bHQgYXJndW1lbnRzCisgICAgICAgICAgICBwYXJzZXIgPSBwYXJzZXIodGFyZ2V0PXNlbGYsIHN0cmlwX2NkYXRhPUZhbHNlLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlcj1Ob25lLCBlbXB0eV9lbGVtZW50X3RhZ3M9Tm9uZSk6CisgICAgICAgICMgVE9ETzogSXNzdWUgYSB3YXJuaW5nIGlmIHBhcnNlciBpcyBwcmVzZW50IGJ1dCBub3QgYQorICAgICAgICAjIGNhbGxhYmxlLCBzaW5jZSB0aGF0IG1lYW5zIHRoZXJlJ3Mgbm8gd2F5IHRvIGNyZWF0ZSBuZXcKKyAgICAgICAgIyBwYXJzZXJzIGZvciBkaWZmZXJlbnQgZW5jb2RpbmdzLgorICAgICAgICBzZWxmLl9kZWZhdWx0X3BhcnNlciA9IHBhcnNlcgorICAgICAgICBpZiBlbXB0eV9lbGVtZW50X3RhZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmVtcHR5X2VsZW1lbnRfdGFncyA9IHNldChlbXB0eV9lbGVtZW50X3RhZ3MpCisgICAgICAgIHNlbGYuc291cCA9IE5vbmUKKyAgICAgICAgc2VsZi5uc21hcHMgPSBbc2VsZi5ERUZBVUxUX05TTUFQU10KKworICAgIGRlZiBfZ2V0TnNUYWcoc2VsZiwgdGFnKToKKyAgICAgICAgIyBTcGxpdCB0aGUgbmFtZXNwYWNlIFVSTCBvdXQgb2YgYSBmdWxseS1xdWFsaWZpZWQgbHhtbCB0YWcKKyAgICAgICAgIyBuYW1lLiBDb3BpZWQgZnJvbSBseG1sJ3Mgc3JjL2x4bWwvc2F4LnB5LgorICAgICAgICBpZiB0YWdbMF0gPT0gJ3snOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKHRhZ1sxOl0uc3BsaXQoJ30nLCAxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgdGFnKQorCisgICAgZGVmIHByZXBhcmVfbWFya3VwKHNlbGYsIG1hcmt1cCwgdXNlcl9zcGVjaWZpZWRfZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICA6eWllbGQ6IEEgc2VyaWVzIG9mIDQtdHVwbGVzLgorICAgICAgICAgKG1hcmt1cCwgZW5jb2RpbmcsIGRlY2xhcmVkIGVuY29kaW5nLAorICAgICAgICAgIGhhcyB1bmRlcmdvbmUgY2hhcmFjdGVyIHJlcGxhY2VtZW50KQorCisgICAgICAgIEVhY2ggNC10dXBsZSByZXByZXNlbnRzIGEgc3RyYXRlZ3kgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBXZSB3ZXJlIGdpdmVuIFVuaWNvZGUuIE1heWJlIGx4bWwgY2FuIHBhcnNlIFVuaWNvZGUgb24KKyAgICAgICAgICAgICMgdGhpcyBzeXN0ZW0/CisgICAgICAgICAgICB5aWVsZCBtYXJrdXAsIE5vbmUsIGRvY3VtZW50X2RlY2xhcmVkX2VuY29kaW5nLCBGYWxzZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgICMgTm8sIGFwcGFyZW50bHkgbm90LiBDb252ZXJ0IHRoZSBVbmljb2RlIHRvIFVURi04IGFuZAorICAgICAgICAgICAgIyB0ZWxsIGx4bWwgdG8gcGFyc2UgaXQgYXMgVVRGLTguCisgICAgICAgICAgICB5aWVsZCAobWFya3VwLmVuY29kZSgidXRmOCIpLCAidXRmOCIsCisgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmcsIEZhbHNlKQorCisgICAgICAgICMgSW5zdGVhZCBvZiB1c2luZyBVbmljb2RlRGFtbWl0IHRvIGNvbnZlcnQgdGhlIGJ5dGVzdHJpbmcgdG8KKyAgICAgICAgIyBVbmljb2RlIHVzaW5nIGRpZmZlcmVudCBlbmNvZGluZ3MsIHVzZSBFbmNvZGluZ0RldGVjdG9yIHRvCisgICAgICAgICMgaXRlcmF0ZSBvdmVyIHRoZSBlbmNvZGluZ3MsIGFuZCB0ZWxsIGx4bWwgdG8gdHJ5IHRvIHBhcnNlCisgICAgICAgICMgdGhlIGRvY3VtZW50IGFzIGVhY2ggb25lIGluIHR1cm4uCisgICAgICAgIGlzX2h0bWwgPSBub3Qgc2VsZi5pc194bWwKKyAgICAgICAgdHJ5X2VuY29kaW5ncyA9IFt1c2VyX3NwZWNpZmllZF9lbmNvZGluZywgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmddCisgICAgICAgIGRldGVjdG9yID0gRW5jb2RpbmdEZXRlY3RvcihtYXJrdXAsIHRyeV9lbmNvZGluZ3MsIGlzX2h0bWwpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBkZXRlY3Rvci5lbmNvZGluZ3M6CisgICAgICAgICAgICB5aWVsZCAoZGV0ZWN0b3IubWFya3VwLCBlbmNvZGluZywgZG9jdW1lbnRfZGVjbGFyZWRfZW5jb2RpbmcsIEZhbHNlKQorCisgICAgZGVmIGZlZWQoc2VsZiwgbWFya3VwKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIGJ5dGVzKToKKyAgICAgICAgICAgIG1hcmt1cCA9IEJ5dGVzSU8obWFya3VwKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIG1hcmt1cCA9IFN0cmluZ0lPKG1hcmt1cCkKKworICAgICAgICAjIENhbGwgZmVlZCgpIGF0IGxlYXN0IG9uY2UsIGV2ZW4gaWYgdGhlIG1hcmt1cCBpcyBlbXB0eSwKKyAgICAgICAgIyBvciB0aGUgcGFyc2VyIHdvbid0IGJlIGluaXRpYWxpemVkLgorICAgICAgICBkYXRhID0gbWFya3VwLnJlYWQoc2VsZi5DSFVOS19TSVpFKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYucGFyc2VyX2ZvcihzZWxmLnNvdXAub3JpZ2luYWxfZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLnBhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICB3aGlsZSBsZW4oZGF0YSkgIT0gMDoKKyAgICAgICAgICAgICAgICAjIE5vdyBjYWxsIGZlZWQoKSBvbiB0aGUgcmVzdCBvZiB0aGUgZGF0YSwgY2h1bmsgYnkgY2h1bmsuCisgICAgICAgICAgICAgICAgZGF0YSA9IG1hcmt1cC5yZWFkKHNlbGYuQ0hVTktfU0laRSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChkYXRhKQorICAgICAgICAgICAgc2VsZi5wYXJzZXIuY2xvc2UoKQorICAgICAgICBleGNlcHQgKFVuaWNvZGVEZWNvZGVFcnJvciwgTG9va3VwRXJyb3IsIGV0cmVlLlBhcnNlckVycm9yKSwgZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlclJlamVjdGVkTWFya3VwKHN0cihlKSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5uc21hcHMgPSBbc2VsZi5ERUZBVUxUX05TTUFQU10KKworICAgIGRlZiBzdGFydChzZWxmLCBuYW1lLCBhdHRycywgbnNtYXA9e30pOgorICAgICAgICAjIE1ha2Ugc3VyZSBhdHRycyBpcyBhIG11dGFibGUgZGljdC0tbHhtbCBtYXkgc2VuZCBhbiBpbW11dGFibGUgZGljdHByb3h5LgorICAgICAgICBhdHRycyA9IGRpY3QoYXR0cnMpCisgICAgICAgIG5zcHJlZml4ID0gTm9uZQorICAgICAgICAjIEludmVydCBlYWNoIG5hbWVzcGFjZSBtYXAgYXMgaXQgY29tZXMgaW4uCisgICAgICAgIGlmIGxlbihzZWxmLm5zbWFwcykgPiAxOgorICAgICAgICAgICAgIyBUaGVyZSBhcmUgbm8gbmV3IG5hbWVzcGFjZXMgZm9yIHRoaXMgdGFnLCBidXQKKyAgICAgICAgICAgICMgbm9uLWRlZmF1bHQgbmFtZXNwYWNlcyBhcmUgaW4gcGxheSwgc28gd2UgbmVlZCBhCisgICAgICAgICAgICAjIHNlcGFyYXRlIHRhZyBzdGFjayB0byBrbm93IHdoZW4gdGhleSBlbmQuCisgICAgICAgICAgICBzZWxmLm5zbWFwcy5hcHBlbmQoTm9uZSkKKyAgICAgICAgZWxpZiBsZW4obnNtYXApID4gMDoKKyAgICAgICAgICAgICMgQSBuZXcgbmFtZXNwYWNlIG1hcHBpbmcgaGFzIGNvbWUgaW50byBwbGF5LgorICAgICAgICAgICAgaW52ZXJ0ZWRfbnNtYXAgPSBkaWN0KCh2YWx1ZSwga2V5KSBmb3Iga2V5LCB2YWx1ZSBpbiBuc21hcC5pdGVtcygpKQorICAgICAgICAgICAgc2VsZi5uc21hcHMuYXBwZW5kKGludmVydGVkX25zbWFwKQorICAgICAgICAgICAgIyBBbHNvIHRyZWF0IHRoZSBuYW1lc3BhY2UgbWFwcGluZyBhcyBhIHNldCBvZiBhdHRyaWJ1dGVzIG9uIHRoZQorICAgICAgICAgICAgIyB0YWcsIHNvIHdlIGNhbiByZWNyZWF0ZSBpdCBsYXRlci4KKyAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuY29weSgpCisgICAgICAgICAgICBmb3IgcHJlZml4LCBuYW1lc3BhY2UgaW4gbnNtYXAuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBOYW1lc3BhY2VkQXR0cmlidXRlKAorICAgICAgICAgICAgICAgICAgICAieG1sbnMiLCBwcmVmaXgsICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIpCisgICAgICAgICAgICAgICAgYXR0cnNbYXR0cmlidXRlXSA9IG5hbWVzcGFjZQorCisgICAgICAgICMgTmFtZXNwYWNlcyBhcmUgaW4gcGxheS4gRmluZCBhbnkgYXR0cmlidXRlcyB0aGF0IGNhbWUgaW4KKyAgICAgICAgIyBmcm9tIGx4bWwgd2l0aCBuYW1lc3BhY2VzIGF0dGFjaGVkIHRvIHRoZWlyIG5hbWVzLCBhbmQKKyAgICAgICAgIyB0dXJuIHRoZW4gaW50byBOYW1lc3BhY2VkQXR0cmlidXRlIG9iamVjdHMuCisgICAgICAgIG5ld19hdHRycyA9IHt9CisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBhdHRycy5pdGVtcygpOgorICAgICAgICAgICAgbmFtZXNwYWNlLCBhdHRyID0gc2VsZi5fZ2V0TnNUYWcoYXR0cikKKyAgICAgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIG5ld19hdHRyc1thdHRyXSA9IHZhbHVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5zcHJlZml4ID0gc2VsZi5fcHJlZml4X2Zvcl9uYW1lc3BhY2UobmFtZXNwYWNlKQorICAgICAgICAgICAgICAgIGF0dHIgPSBOYW1lc3BhY2VkQXR0cmlidXRlKG5zcHJlZml4LCBhdHRyLCBuYW1lc3BhY2UpCisgICAgICAgICAgICAgICAgbmV3X2F0dHJzW2F0dHJdID0gdmFsdWUKKyAgICAgICAgYXR0cnMgPSBuZXdfYXR0cnMKKworICAgICAgICBuYW1lc3BhY2UsIG5hbWUgPSBzZWxmLl9nZXROc1RhZyhuYW1lKQorICAgICAgICBuc3ByZWZpeCA9IHNlbGYuX3ByZWZpeF9mb3JfbmFtZXNwYWNlKG5hbWVzcGFjZSkKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9zdGFydHRhZyhuYW1lLCBuYW1lc3BhY2UsIG5zcHJlZml4LCBhdHRycykKKworICAgIGRlZiBfcHJlZml4X2Zvcl9uYW1lc3BhY2Uoc2VsZiwgbmFtZXNwYWNlKToKKyAgICAgICAgIiIiRmluZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcmVmaXggZm9yIHRoZSBnaXZlbiBuYW1lc3BhY2UuIiIiCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZm9yIGludmVydGVkX25zbWFwIGluIHJldmVyc2VkKHNlbGYubnNtYXBzKToKKyAgICAgICAgICAgIGlmIGludmVydGVkX25zbWFwIGlzIG5vdCBOb25lIGFuZCBuYW1lc3BhY2UgaW4gaW52ZXJ0ZWRfbnNtYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludmVydGVkX25zbWFwW25hbWVzcGFjZV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBlbmQoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgY29tcGxldGVkX3RhZyA9IHNlbGYuc291cC50YWdTdGFja1stMV0KKyAgICAgICAgbmFtZXNwYWNlLCBuYW1lID0gc2VsZi5fZ2V0TnNUYWcobmFtZSkKKyAgICAgICAgbnNwcmVmaXggPSBOb25lCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBpbnZlcnRlZF9uc21hcCBpbiByZXZlcnNlZChzZWxmLm5zbWFwcyk6CisgICAgICAgICAgICAgICAgaWYgaW52ZXJ0ZWRfbnNtYXAgaXMgbm90IE5vbmUgYW5kIG5hbWVzcGFjZSBpbiBpbnZlcnRlZF9uc21hcDoKKyAgICAgICAgICAgICAgICAgICAgbnNwcmVmaXggPSBpbnZlcnRlZF9uc21hcFtuYW1lc3BhY2VdCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZW5kdGFnKG5hbWUsIG5zcHJlZml4KQorICAgICAgICBpZiBsZW4oc2VsZi5uc21hcHMpID4gMToKKyAgICAgICAgICAgICMgVGhpcyB0YWcsIG9yIG9uZSBvZiBpdHMgcGFyZW50cywgaW50cm9kdWNlZCBhIG5hbWVzcGFjZQorICAgICAgICAgICAgIyBtYXBwaW5nLCBzbyBwb3AgaXQgb2ZmIHRoZSBzdGFjay4KKyAgICAgICAgICAgIHNlbGYubnNtYXBzLnBvcCgpCisKKyAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRhdGEoc2VsZiwgY29udGVudCk6CisgICAgICAgIHNlbGYuc291cC5oYW5kbGVfZGF0YShjb250ZW50KQorCisgICAgZGVmIGRvY3R5cGUoc2VsZiwgbmFtZSwgcHViaWQsIHN5c3RlbSk6CisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgZG9jdHlwZSA9IERvY3R5cGUuZm9yX25hbWVfYW5kX2lkcyhuYW1lLCBwdWJpZCwgc3lzdGVtKQorICAgICAgICBzZWxmLnNvdXAub2JqZWN0X3dhc19wYXJzZWQoZG9jdHlwZSkKKworICAgIGRlZiBjb21tZW50KHNlbGYsIGNvbnRlbnQpOgorICAgICAgICAiSGFuZGxlIGNvbW1lbnRzIGFzIENvbW1lbnQgb2JqZWN0cy4iCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKCkKKyAgICAgICAgc2VsZi5zb3VwLmhhbmRsZV9kYXRhKGNvbnRlbnQpCisgICAgICAgIHNlbGYuc291cC5lbmREYXRhKENvbW1lbnQpCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIlNlZSBgVHJlZUJ1aWxkZXJgLiIiIgorICAgICAgICByZXR1cm4gdSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuJXMnICUgZnJhZ21lbnQKKworCitjbGFzcyBMWE1MVHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwpOgorCisgICAgZmVhdHVyZXMgPSBbTFhNTCwgSFRNTCwgRkFTVCwgUEVSTUlTU0lWRV0KKyAgICBpc194bWwgPSBGYWxzZQorCisgICAgZGVmIGRlZmF1bHRfcGFyc2VyKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgcmV0dXJuIGV0cmVlLkhUTUxQYXJzZXIKKworICAgIGRlZiBmZWVkKHNlbGYsIG1hcmt1cCk6CisgICAgICAgIGVuY29kaW5nID0gc2VsZi5zb3VwLm9yaWdpbmFsX2VuY29kaW5nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5wYXJzZXJfZm9yKGVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChtYXJrdXApCisgICAgICAgICAgICBzZWxmLnBhcnNlci5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCAoVW5pY29kZURlY29kZUVycm9yLCBMb29rdXBFcnJvciwgZXRyZWUuUGFyc2VyRXJyb3IpLCBlOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VyUmVqZWN0ZWRNYXJrdXAoc3RyKGUpKQorCisKKyAgICBkZWYgdGVzdF9mcmFnbWVudF90b19kb2N1bWVudChzZWxmLCBmcmFnbWVudCk6CisgICAgICAgICIiIlNlZSBgVHJlZUJ1aWxkZXJgLiIiIgorICAgICAgICByZXR1cm4gdSc8aHRtbD48Ym9keT4lczwvYm9keT48L2h0bWw+JyAlIGZyYWdtZW50CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvZGFtbWl0LnB5IGIvYml0YmFrZS9saWIvYnM0L2RhbW1pdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY0MGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYnM0L2RhbW1pdC5weQpAQCAtMCwwICsxLDgyOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIkJlYXV0aWZ1bCBTb3VwIGJvbnVzIGxpYnJhcnk6IFVuaWNvZGUsIERhbW1pdAorCitUaGlzIGxpYnJhcnkgY29udmVydHMgYSBieXRlc3RyZWFtIHRvIFVuaWNvZGUgdGhyb3VnaCBhbnkgbWVhbnMKK25lY2Vzc2FyeS4gSXQgaXMgaGVhdmlseSBiYXNlZCBvbiBjb2RlIGZyb20gTWFyayBQaWxncmltJ3MgVW5pdmVyc2FsCitGZWVkIFBhcnNlci4gSXQgd29ya3MgYmVzdCBvbiBYTUwgYW5kIFhNTCwgYnV0IGl0IGRvZXMgbm90IHJld3JpdGUgdGhlCitYTUwgb3IgSFRNTCB0byByZWZsZWN0IGEgbmV3IGVuY29kaW5nOyB0aGF0J3MgdGhlIHRyZWUgYnVpbGRlcidzIGpvYi4KKyIiIgorCitpbXBvcnQgY29kZWNzCitmcm9tIGh0bWxlbnRpdHlkZWZzIGltcG9ydCBjb2RlcG9pbnQybmFtZQoraW1wb3J0IHJlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworCisjIEltcG9ydCBhIGxpYnJhcnkgdG8gYXV0b2RldGVjdCBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorY2hhcmRldF90eXBlID0gTm9uZQordHJ5OgorICAgICMgRmlyc3QgdHJ5IHRoZSBmYXN0IEMgaW1wbGVtZW50YXRpb24uCisgICAgIyAgUHlQSSBwYWNrYWdlOiBjY2hhcmRldAorICAgIGltcG9ydCBjY2hhcmRldAorICAgIGRlZiBjaGFyZGV0X2RhbW1pdChzKToKKyAgICAgICAgcmV0dXJuIGNjaGFyZGV0LmRldGVjdChzKVsnZW5jb2RpbmcnXQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRyeToKKyAgICAgICAgIyBGYWxsIGJhY2sgdG8gdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgIERlYmlhbiBwYWNrYWdlOiBweXRob24tY2hhcmRldAorICAgICAgICAjICBQeVBJIHBhY2thZ2U6IGNoYXJkZXQKKyAgICAgICAgaW1wb3J0IGNoYXJkZXQKKyAgICAgICAgZGVmIGNoYXJkZXRfZGFtbWl0KHMpOgorICAgICAgICAgICAgcmV0dXJuIGNoYXJkZXQuZGV0ZWN0KHMpWydlbmNvZGluZyddCisgICAgICAgICNpbXBvcnQgY2hhcmRldC5jb25zdGFudHMKKyAgICAgICAgI2NoYXJkZXQuY29uc3RhbnRzLl9kZWJ1ZyA9IDEKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICMgTm8gY2hhcmRldCBhdmFpbGFibGUuCisgICAgICAgIGRlZiBjaGFyZGV0X2RhbW1pdChzKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyMgQXZhaWxhYmxlIGZyb20gaHR0cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8uCit0cnk6CisgICAgaW1wb3J0IGljb252X2NvZGVjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCit4bWxfZW5jb2RpbmdfcmUgPSByZS5jb21waWxlKAorICAgICdePFw/LiplbmNvZGluZz1bXCciXSguKj8pW1wnIl0uKlw/PicuZW5jb2RlKCksIHJlLkkpCitodG1sX21ldGFfcmUgPSByZS5jb21waWxlKAorICAgICc8XHMqbWV0YVtePl0rY2hhcnNldFxzKj1ccypbIlwnXT8oW14+XSo/KVsgLztcJyI+XScuZW5jb2RlKCksIHJlLkkpCisKK2NsYXNzIEVudGl0eVN1YnN0aXR1dGlvbihvYmplY3QpOgorCisgICAgIiIiU3Vic3RpdHV0ZSBYTUwgb3IgSFRNTCBlbnRpdGllcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4iIiIKKworICAgIGRlZiBfcG9wdWxhdGVfY2xhc3NfdmFyaWFibGVzKCk6CisgICAgICAgIGxvb2t1cCA9IHt9CisgICAgICAgIHJldmVyc2VfbG9va3VwID0ge30KKyAgICAgICAgY2hhcmFjdGVyc19mb3JfcmUgPSBbXQorICAgICAgICBmb3IgY29kZXBvaW50LCBuYW1lIGluIGxpc3QoY29kZXBvaW50Mm5hbWUuaXRlbXMoKSk6CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSB1bmljaHIoY29kZXBvaW50KQorICAgICAgICAgICAgaWYgY29kZXBvaW50ICE9IDM0OgorICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBwb2ludCBpbiB0dXJuaW5nIHRoZSBxdW90YXRpb24gbWFyayBpbnRvCisgICAgICAgICAgICAgICAgIyAmcXVvdDssIHVubGVzcyBpdCBoYXBwZW5zIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWUsIHdoaWNoCisgICAgICAgICAgICAgICAgIyBpcyBoYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzX2Zvcl9yZS5hcHBlbmQoY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIGxvb2t1cFtjaGFyYWN0ZXJdID0gbmFtZQorICAgICAgICAgICAgIyBCdXQgd2UgZG8gd2FudCB0byB0dXJuICZxdW90OyBpbnRvIHRoZSBxdW90YXRpb24gbWFyay4KKyAgICAgICAgICAgIHJldmVyc2VfbG9va3VwW25hbWVdID0gY2hhcmFjdGVyCisgICAgICAgIHJlX2RlZmluaXRpb24gPSAiWyVzXSIgJSAiIi5qb2luKGNoYXJhY3RlcnNfZm9yX3JlKQorICAgICAgICByZXR1cm4gbG9va3VwLCByZXZlcnNlX2xvb2t1cCwgcmUuY29tcGlsZShyZV9kZWZpbml0aW9uKQorICAgIChDSEFSQUNURVJfVE9fSFRNTF9FTlRJVFksIEhUTUxfRU5USVRZX1RPX0NIQVJBQ1RFUiwKKyAgICAgQ0hBUkFDVEVSX1RPX0hUTUxfRU5USVRZX1JFKSA9IF9wb3B1bGF0ZV9jbGFzc192YXJpYWJsZXMoKQorCisgICAgQ0hBUkFDVEVSX1RPX1hNTF9FTlRJVFkgPSB7CisgICAgICAgICInIjogImFwb3MiLAorICAgICAgICAnIic6ICJxdW90IiwKKyAgICAgICAgIiYiOiAiYW1wIiwKKyAgICAgICAgIjwiOiAibHQiLAorICAgICAgICAiPiI6ICJndCIsCisgICAgICAgIH0KKworICAgIEJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+XXwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiYoPyEjXGQrO3wjeFswLTlhLWZBLUZdKzt8XHcrOykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiKQorCisgICAgQU1QRVJTQU5EX09SX0JSQUNLRVQgPSByZS5jb21waWxlKCIoWzw+Jl0pIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc3Vic3RpdHV0ZV9odG1sX2VudGl0eShjbHMsIG1hdGNob2JqKToKKyAgICAgICAgZW50aXR5ID0gY2xzLkNIQVJBQ1RFUl9UT19IVE1MX0VOVElUWS5nZXQobWF0Y2hvYmouZ3JvdXAoMCkpCisgICAgICAgIHJldHVybiAiJiVzOyIgJSBlbnRpdHkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc3Vic3RpdHV0ZV94bWxfZW50aXR5KGNscywgbWF0Y2hvYmopOgorICAgICAgICAiIiJVc2VkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3Vic3RpdHV0ZSB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgWE1MIGVudGl0eSBmb3IgYW4gWE1MIHNwZWNpYWwgY2hhcmFjdGVyLiIiIgorICAgICAgICBlbnRpdHkgPSBjbHMuQ0hBUkFDVEVSX1RPX1hNTF9FTlRJVFlbbWF0Y2hvYmouZ3JvdXAoMCldCisgICAgICAgIHJldHVybiAiJiVzOyIgJSBlbnRpdHkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBxdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiTWFrZSBhIHZhbHVlIGludG8gYSBxdW90ZWQgWE1MIGF0dHJpYnV0ZSwgcG9zc2libHkgZXNjYXBpbmcgaXQuCisKKyAgICAgICAgIE1vc3Qgc3RyaW5ncyB3aWxsIGJlIHF1b3RlZCB1c2luZyBkb3VibGUgcXVvdGVzLgorCisgICAgICAgICAgQm9iJ3MgQmFyIC0+ICJCb2IncyBCYXIiCisKKyAgICAgICAgIElmIGEgc3RyaW5nIGNvbnRhaW5zIGRvdWJsZSBxdW90ZXMsIGl0IHdpbGwgYmUgcXVvdGVkIHVzaW5nCisgICAgICAgICBzaW5nbGUgcXVvdGVzLgorCisgICAgICAgICAgV2VsY29tZSB0byAibXkgYmFyIiAtPiAnV2VsY29tZSB0byAibXkgYmFyIicKKworICAgICAgICAgSWYgYSBzdHJpbmcgY29udGFpbnMgYm90aCBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMsIHRoZQorICAgICAgICAgZG91YmxlIHF1b3RlcyB3aWxsIGJlIGVzY2FwZWQsIGFuZCB0aGUgc3RyaW5nIHdpbGwgYmUgcXVvdGVkCisgICAgICAgICB1c2luZyBkb3VibGUgcXVvdGVzLgorCisgICAgICAgICAgV2VsY29tZSB0byAiQm9iJ3MgQmFyIiAtPiAiV2VsY29tZSB0byAmcXVvdDtCb2IncyBiYXImcXVvdDsKKyAgICAgICAgIiIiCisgICAgICAgIHF1b3RlX3dpdGggPSAnIicKKyAgICAgICAgaWYgJyInIGluIHZhbHVlOgorICAgICAgICAgICAgaWYgIiciIGluIHZhbHVlOgorICAgICAgICAgICAgICAgICMgVGhlIHN0cmluZyBjb250YWlucyBib3RoIHNpbmdsZSBhbmQgZG91YmxlCisgICAgICAgICAgICAgICAgIyBxdW90ZXMuICBUdXJuIHRoZSBkb3VibGUgcXVvdGVzIGludG8KKyAgICAgICAgICAgICAgICAjIGVudGl0aWVzLiBXZSBxdW90ZSB0aGUgZG91YmxlIHF1b3RlcyByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICMgdGhlIHNpbmdsZSBxdW90ZXMgYmVjYXVzZSB0aGUgZW50aXR5IG5hbWUgaXMKKyAgICAgICAgICAgICAgICAjICImcXVvdDsiIHdoZXRoZXIgdGhpcyBpcyBIVE1MIG9yIFhNTC4gIElmIHdlCisgICAgICAgICAgICAgICAgIyBxdW90ZWQgdGhlIHNpbmdsZSBxdW90ZXMsIHdlJ2QgaGF2ZSB0byBkZWNpZGUKKyAgICAgICAgICAgICAgICAjIGJldHdlZW4gJmFwb3M7IGFuZCAmc3F1b3Q7LgorICAgICAgICAgICAgICAgIHJlcGxhY2Vfd2l0aCA9ICImcXVvdDsiCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCciJywgcmVwbGFjZV93aXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBkb3VibGUgcXVvdGVzIGJ1dCBubyBzaW5nbGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICMgV2UgY2FuIHVzZSBzaW5nbGUgcXVvdGVzIHRvIHF1b3RlIHRoZSBhdHRyaWJ1dGUuCisgICAgICAgICAgICAgICAgcXVvdGVfd2l0aCA9ICInIgorICAgICAgICByZXR1cm4gcXVvdGVfd2l0aCArIHZhbHVlICsgcXVvdGVfd2l0aAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN1YnN0aXR1dGVfeG1sKGNscywgdmFsdWUsIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZT1GYWxzZSk6CisgICAgICAgICIiIlN1YnN0aXR1dGUgWE1MIGVudGl0aWVzIGZvciBzcGVjaWFsIFhNTCBjaGFyYWN0ZXJzLgorCisgICAgICAgIDpwYXJhbSB2YWx1ZTogQSBzdHJpbmcgdG8gYmUgc3Vic3RpdHV0ZWQuIFRoZSBsZXNzLXRoYW4gc2lnbgorICAgICAgICAgIHdpbGwgYmVjb21lICZsdDssIHRoZSBncmVhdGVyLXRoYW4gc2lnbiB3aWxsIGJlY29tZSAmZ3Q7LAorICAgICAgICAgIGFuZCBhbnkgYW1wZXJzYW5kcyB3aWxsIGJlY29tZSAmYW1wOy4gSWYgeW91IHdhbnQgYW1wZXJzYW5kcworICAgICAgICAgIHRoYXQgYXBwZWFyIHRvIGJlIHBhcnQgb2YgYW4gZW50aXR5IGRlZmluaXRpb24gdG8gYmUgbGVmdAorICAgICAgICAgIGFsb25lLCB1c2Ugc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygpIGluc3RlYWQuCisKKyAgICAgICAgOnBhcmFtIG1ha2VfcXVvdGVkX2F0dHJpYnV0ZTogSWYgVHJ1ZSwgdGhlbiB0aGUgc3RyaW5nIHdpbGwgYmUKKyAgICAgICAgIHF1b3RlZCwgYXMgYmVmaXRzIGFuIGF0dHJpYnV0ZSB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIGFuZCBhbXBlcnNhbmRzLgorICAgICAgICB2YWx1ZSA9IGNscy5BTVBFUlNBTkRfT1JfQlJBQ0tFVC5zdWIoCisgICAgICAgICAgICBjbHMuX3N1YnN0aXR1dGVfeG1sX2VudGl0eSwgdmFsdWUpCisKKyAgICAgICAgaWYgbWFrZV9xdW90ZWRfYXR0cmlidXRlOgorICAgICAgICAgICAgdmFsdWUgPSBjbHMucXVvdGVkX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Vic3RpdHV0ZV94bWxfY29udGFpbmluZ19lbnRpdGllcygKKyAgICAgICAgY2xzLCB2YWx1ZSwgbWFrZV9xdW90ZWRfYXR0cmlidXRlPUZhbHNlKToKKyAgICAgICAgIiIiU3Vic3RpdHV0ZSBYTUwgZW50aXRpZXMgZm9yIHNwZWNpYWwgWE1MIGNoYXJhY3RlcnMuCisKKyAgICAgICAgOnBhcmFtIHZhbHVlOiBBIHN0cmluZyB0byBiZSBzdWJzdGl0dXRlZC4gVGhlIGxlc3MtdGhhbiBzaWduIHdpbGwKKyAgICAgICAgICBiZWNvbWUgJmx0OywgdGhlIGdyZWF0ZXItdGhhbiBzaWduIHdpbGwgYmVjb21lICZndDssIGFuZCBhbnkKKyAgICAgICAgICBhbXBlcnNhbmRzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIGFuIGVudGl0eSBkZWZpdGlvbiB3aWxsCisgICAgICAgICAgYmVjb21lICZhbXA7LgorCisgICAgICAgIDpwYXJhbSBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU6IElmIFRydWUsIHRoZW4gdGhlIHN0cmluZyB3aWxsIGJlCisgICAgICAgICBxdW90ZWQsIGFzIGJlZml0cyBhbiBhdHRyaWJ1dGUgdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICAjIEVzY2FwZSBhbmdsZSBicmFja2V0cywgYW5kIGFtcGVyc2FuZHMgdGhhdCBhcmVuJ3QgcGFydCBvZgorICAgICAgICAjIGVudGl0aWVzLgorICAgICAgICB2YWx1ZSA9IGNscy5CQVJFX0FNUEVSU0FORF9PUl9CUkFDS0VULnN1YigKKyAgICAgICAgICAgIGNscy5fc3Vic3RpdHV0ZV94bWxfZW50aXR5LCB2YWx1ZSkKKworICAgICAgICBpZiBtYWtlX3F1b3RlZF9hdHRyaWJ1dGU6CisgICAgICAgICAgICB2YWx1ZSA9IGNscy5xdW90ZWRfYXR0cmlidXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX2h0bWwoY2xzLCBzKToKKyAgICAgICAgIiIiUmVwbGFjZSBjZXJ0YWluIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoIG5hbWVkIEhUTUwgZW50aXRpZXMuCisKKyAgICAgICAgVGhpcyBkaWZmZXJzIGZyb20gZGF0YS5lbmNvZGUoZW5jb2RpbmcsICd4bWxjaGFycmVmcmVwbGFjZScpCisgICAgICAgIGluIHRoYXQgdGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUgcmVzdWx0IG1vcmUgcmVhZGFibGUgKHRvIHRob3NlCisgICAgICAgIHdpdGggQVNDSUkgZGlzcGxheXMpIHJhdGhlciB0aGFuIHRvIHJlY292ZXIgZnJvbQorICAgICAgICBlcnJvcnMuIFRoZXJlJ3MgYWJzb2x1dGVseSBub3RoaW5nIHdyb25nIHdpdGggYSBVVEYtOCBzdHJpbmcKKyAgICAgICAgY29udGFpbmcgYSBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFLCBidXQgcmVwbGFjaW5nIHRoYXQKKyAgICAgICAgY2hhcmFjdGVyIHdpdGggIiZlYWN1dGU7IiB3aWxsIG1ha2UgaXQgbW9yZSByZWFkYWJsZSB0byBzb21lCisgICAgICAgIHBlb3BsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMuQ0hBUkFDVEVSX1RPX0hUTUxfRU5USVRZX1JFLnN1YigKKyAgICAgICAgICAgIGNscy5fc3Vic3RpdHV0ZV9odG1sX2VudGl0eSwgcykKKworCitjbGFzcyBFbmNvZGluZ0RldGVjdG9yOgorICAgICIiIlN1Z2dlc3RzIGEgbnVtYmVyIG9mIHBvc3NpYmxlIGVuY29kaW5ncyBmb3IgYSBieXRlc3RyaW5nLgorCisgICAgT3JkZXIgb2YgcHJlY2VkZW5jZToKKworICAgIDEuIEVuY29kaW5ncyB5b3Ugc3BlY2lmaWNhbGx5IHRlbGwgRW5jb2RpbmdEZXRlY3RvciB0byB0cnkgZmlyc3QKKyAgICAodGhlIG92ZXJyaWRlX2VuY29kaW5ncyBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IpLgorCisgICAgMi4gQW4gZW5jb2RpbmcgZGVjbGFyZWQgd2l0aGluIHRoZSBieXRlc3RyaW5nIGl0c2VsZiwgZWl0aGVyIGluIGFuCisgICAgWE1MIGRlY2xhcmF0aW9uIChpZiB0aGUgYnl0ZXN0cmluZyBpcyB0byBiZSBpbnRlcnByZXRlZCBhcyBhbiBYTUwKKyAgICBkb2N1bWVudCksIG9yIGluIGEgPG1ldGE+IHRhZyAoaWYgdGhlIGJ5dGVzdHJpbmcgaXMgdG8gYmUKKyAgICBpbnRlcnByZXRlZCBhcyBhbiBIVE1MIGRvY3VtZW50LikKKworICAgIDMuIEFuIGVuY29kaW5nIGRldGVjdGVkIHRocm91Z2ggdGV4dHVhbCBhbmFseXNpcyBieSBjaGFyZGV0LAorICAgIGNjaGFyZGV0LCBvciBhIHNpbWlsYXIgZXh0ZXJuYWwgbGlicmFyeS4KKworICAgIDQuIFVURi04LgorCisgICAgNS4gV2luZG93cy0xMjUyLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncz1Ob25lLCBpc19odG1sPUZhbHNlKToKKyAgICAgICAgc2VsZi5vdmVycmlkZV9lbmNvZGluZ3MgPSBvdmVycmlkZV9lbmNvZGluZ3Mgb3IgW10KKyAgICAgICAgc2VsZi5jaGFyZGV0X2VuY29kaW5nID0gTm9uZQorICAgICAgICBzZWxmLmlzX2h0bWwgPSBpc19odG1sCisgICAgICAgIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgPSBOb25lCisKKyAgICAgICAgIyBGaXJzdCBvcmRlciBvZiBidXNpbmVzczogc3RyaXAgYSBieXRlLW9yZGVyIG1hcmsuCisgICAgICAgIHNlbGYubWFya3VwLCBzZWxmLnNuaWZmZWRfZW5jb2RpbmcgPSBzZWxmLnN0cmlwX2J5dGVfb3JkZXJfbWFyayhtYXJrdXApCisKKyAgICBkZWYgX3VzYWJsZShzZWxmLCBlbmNvZGluZywgdHJpZWQpOgorICAgICAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcubG93ZXIoKQorICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIHRyaWVkOgorICAgICAgICAgICAgICAgIHRyaWVkLmFkZChlbmNvZGluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbmNvZGluZ3Moc2VsZik6CisgICAgICAgICIiIllpZWxkIGEgbnVtYmVyIG9mIGVuY29kaW5ncyB0aGF0IG1pZ2h0IHdvcmsgZm9yIHRoaXMgbWFya3VwLiIiIgorICAgICAgICB0cmllZCA9IHNldCgpCisgICAgICAgIGZvciBlIGluIHNlbGYub3ZlcnJpZGVfZW5jb2RpbmdzOgorICAgICAgICAgICAgaWYgc2VsZi5fdXNhYmxlKGUsIHRyaWVkKToKKyAgICAgICAgICAgICAgICB5aWVsZCBlCisKKyAgICAgICAgIyBEaWQgdGhlIGRvY3VtZW50IG9yaWdpbmFsbHkgc3RhcnQgd2l0aCBhIGJ5dGUtb3JkZXIgbWFyaworICAgICAgICAjIHRoYXQgaW5kaWNhdGVkIGl0cyBlbmNvZGluZz8KKyAgICAgICAgaWYgc2VsZi5fdXNhYmxlKHNlbGYuc25pZmZlZF9lbmNvZGluZywgdHJpZWQpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5zbmlmZmVkX2VuY29kaW5nCisKKyAgICAgICAgIyBMb29rIHdpdGhpbiB0aGUgZG9jdW1lbnQgZm9yIGFuIFhNTCBvciBIVE1MIGVuY29kaW5nCisgICAgICAgICMgZGVjbGFyYXRpb24uCisgICAgICAgIGlmIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcgPSBzZWxmLmZpbmRfZGVjbGFyZWRfZW5jb2RpbmcoCisgICAgICAgICAgICAgICAgc2VsZi5tYXJrdXAsIHNlbGYuaXNfaHRtbCkKKyAgICAgICAgaWYgc2VsZi5fdXNhYmxlKHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcsIHRyaWVkKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuZGVjbGFyZWRfZW5jb2RpbmcKKworICAgICAgICAjIFVzZSB0aGlyZC1wYXJ0eSBjaGFyYWN0ZXIgc2V0IGRldGVjdGlvbiB0byBndWVzcyBhdCB0aGUKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgaWYgc2VsZi5jaGFyZGV0X2VuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmNoYXJkZXRfZW5jb2RpbmcgPSBjaGFyZGV0X2RhbW1pdChzZWxmLm1hcmt1cCkKKyAgICAgICAgaWYgc2VsZi5fdXNhYmxlKHNlbGYuY2hhcmRldF9lbmNvZGluZywgdHJpZWQpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5jaGFyZGV0X2VuY29kaW5nCisKKyAgICAgICAgIyBBcyBhIGxhc3QtZGl0Y2ggZWZmb3J0LCB0cnkgdXRmLTggYW5kIHdpbmRvd3MtMTI1Mi4KKyAgICAgICAgZm9yIGUgaW4gKCd1dGYtOCcsICd3aW5kb3dzLTEyNTInKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3VzYWJsZShlLCB0cmllZCk6CisgICAgICAgICAgICAgICAgeWllbGQgZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN0cmlwX2J5dGVfb3JkZXJfbWFyayhjbHMsIGRhdGEpOgorICAgICAgICAiIiJJZiBhIGJ5dGUtb3JkZXIgbWFyayBpcyBwcmVzZW50LCBzdHJpcCBpdCBhbmQgcmV0dXJuIHRoZSBlbmNvZGluZyBpdCBpbXBsaWVzLiIiIgorICAgICAgICBlbmNvZGluZyA9IE5vbmUKKyAgICAgICAgaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09IGInXHhmZVx4ZmYnKSBcCisgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAgICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpdCisgICAgICAgIGVsaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09IGInXHhmZlx4ZmUnKSBcCisgICAgICAgICAgICAgICAgIGFuZCAoZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmLTE2bGUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVsyOl0KKyAgICAgICAgZWxpZiBkYXRhWzozXSA9PSBiJ1x4ZWZceGJiXHhiZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzM6XQorICAgICAgICBlbGlmIGRhdGFbOjRdID09IGInXHgwMFx4MDBceGZlXHhmZic6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJiZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAgICBlbGlmIGRhdGFbOjRdID09IGInXHhmZlx4ZmVceDAwXHgwMCc6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGYtMzJsZScKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzQ6XQorICAgICAgICByZXR1cm4gZGF0YSwgZW5jb2RpbmcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX2RlY2xhcmVkX2VuY29kaW5nKGNscywgbWFya3VwLCBpc19odG1sPUZhbHNlLCBzZWFyY2hfZW50aXJlX2RvY3VtZW50PUZhbHNlKToKKyAgICAgICAgIiIiR2l2ZW4gYSBkb2N1bWVudCwgdHJpZXMgdG8gZmluZCBpdHMgZGVjbGFyZWQgZW5jb2RpbmcuCisKKyAgICAgICAgQW4gWE1MIGVuY29kaW5nIGlzIGRlY2xhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LgorCisgICAgICAgIEFuIEhUTUwgZW5jb2RpbmcgaXMgZGVjbGFyZWQgaW4gYSA8bWV0YT4gdGFnLCBob3BlZnVsbHkgbmVhciB0aGUKKyAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlYXJjaF9lbnRpcmVfZG9jdW1lbnQ6CisgICAgICAgICAgICB4bWxfZW5kcG9zID0gaHRtbF9lbmRwb3MgPSBsZW4obWFya3VwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeG1sX2VuZHBvcyA9IDEwMjQKKyAgICAgICAgICAgIGh0bWxfZW5kcG9zID0gbWF4KDIwNDgsIGludChsZW4obWFya3VwKSAqIDAuMDUpKQorICAgICAgICAgICAgCisgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gTm9uZQorICAgICAgICBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCA9IHhtbF9lbmNvZGluZ19yZS5zZWFyY2gobWFya3VwLCBlbmRwb3M9eG1sX2VuZHBvcykKKyAgICAgICAgaWYgbm90IGRlY2xhcmVkX2VuY29kaW5nX21hdGNoIGFuZCBpc19odG1sOgorICAgICAgICAgICAgZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2ggPSBodG1sX21ldGFfcmUuc2VhcmNoKG1hcmt1cCwgZW5kcG9zPWh0bWxfZW5kcG9zKQorICAgICAgICBpZiBkZWNsYXJlZF9lbmNvZGluZ19tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gZGVjbGFyZWRfZW5jb2RpbmdfbWF0Y2guZ3JvdXBzKClbMF0uZGVjb2RlKAorICAgICAgICAgICAgICAgICdhc2NpaScpCisgICAgICAgIGlmIGRlY2xhcmVkX2VuY29kaW5nOgorICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmVkX2VuY29kaW5nLmxvd2VyKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVW5pY29kZURhbW1pdDoKKyAgICAiIiJBIGNsYXNzIGZvciBkZXRlY3RpbmcgdGhlIGVuY29kaW5nIG9mIGEgKk1MIGRvY3VtZW50IGFuZAorICAgIGNvbnZlcnRpbmcgaXQgdG8gYSBVbmljb2RlIHN0cmluZy4gSWYgdGhlIHNvdXJjZSBlbmNvZGluZyBpcworICAgIHdpbmRvd3MtMTI1MiwgY2FuIHJlcGxhY2UgTVMgc21hcnQgcXVvdGVzIHdpdGggdGhlaXIgSFRNTCBvciBYTUwKKyAgICBlcXVpdmFsZW50cy4iIiIKKworICAgICMgVGhpcyBkaWN0aW9uYXJ5IG1hcHMgY29tbW9ubHkgc2VlbiB2YWx1ZXMgZm9yICJjaGFyc2V0IiBpbiBIVE1MCisgICAgIyBtZXRhIHRhZ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIGNvZGVjIG5hbWVzLiBJdCBvbmx5IGNvdmVycworICAgICMgdmFsdWVzIHRoYXQgYXJlbid0IGluIFB5dGhvbidzIGFsaWFzZXMgYW5kIGNhbid0IGJlIGRldGVybWluZWQKKyAgICAjIGJ5IHRoZSBoZXVyaXN0aWNzIGluIGZpbmRfY29kZWMuCisgICAgQ0hBUlNFVF9BTElBU0VTID0geyJtYWNpbnRvc2giOiAibWFjLXJvbWFuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIngtc2ppcyI6ICJzaGlmdC1qaXMifQorCisgICAgRU5DT0RJTkdTX1dJVEhfU01BUlRfUVVPVEVTID0gWworICAgICAgICAid2luZG93cy0xMjUyIiwKKyAgICAgICAgImlzby04ODU5LTEiLAorICAgICAgICAiaXNvLTg4NTktMiIsCisgICAgICAgIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncz1bXSwKKyAgICAgICAgICAgICAgICAgc21hcnRfcXVvdGVzX3RvPU5vbmUsIGlzX2h0bWw9RmFsc2UpOgorICAgICAgICBzZWxmLnNtYXJ0X3F1b3Rlc190byA9IHNtYXJ0X3F1b3Rlc190bworICAgICAgICBzZWxmLnRyaWVkX2VuY29kaW5ncyA9IFtdCisgICAgICAgIHNlbGYuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycyA9IEZhbHNlCisgICAgICAgIHNlbGYuaXNfaHRtbCA9IGlzX2h0bWwKKworICAgICAgICBzZWxmLmRldGVjdG9yID0gRW5jb2RpbmdEZXRlY3RvcihtYXJrdXAsIG92ZXJyaWRlX2VuY29kaW5ncywgaXNfaHRtbCkKKworICAgICAgICAjIFNob3J0LWNpcmN1aXQgaWYgdGhlIGRhdGEgaXMgaW4gVW5pY29kZSB0byBiZWdpbiB3aXRoLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29kZSkgb3IgbWFya3VwID09ICcnOgorICAgICAgICAgICAgc2VsZi5tYXJrdXAgPSBtYXJrdXAKKyAgICAgICAgICAgIHNlbGYudW5pY29kZV9tYXJrdXAgPSB1bmljb2RlKG1hcmt1cCkKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcgPSBOb25lCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFRoZSBlbmNvZGluZyBkZXRlY3RvciBtYXkgaGF2ZSBzdHJpcHBlZCBhIGJ5dGUtb3JkZXIgbWFyay4KKyAgICAgICAgIyBVc2UgdGhlIHN0cmlwcGVkIG1hcmt1cCBmcm9tIHRoaXMgcG9pbnQgb24uCisgICAgICAgIHNlbGYubWFya3VwID0gc2VsZi5kZXRlY3Rvci5tYXJrdXAKKworICAgICAgICB1ID0gTm9uZQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gc2VsZi5kZXRlY3Rvci5lbmNvZGluZ3M6CisgICAgICAgICAgICBtYXJrdXAgPSBzZWxmLmRldGVjdG9yLm1hcmt1cAorICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRfZnJvbShlbmNvZGluZykKKyAgICAgICAgICAgIGlmIHUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBub3QgdToKKyAgICAgICAgICAgICMgTm9uZSBvZiB0aGUgZW5jb2RpbmdzIHdvcmtlZC4gQXMgYW4gYWJzb2x1dGUgbGFzdCByZXNvcnQsCisgICAgICAgICAgICAjIHRyeSB0aGVtIGFnYWluIHdpdGggY2hhcmFjdGVyIHJlcGxhY2VtZW50LgorCisgICAgICAgICAgICBmb3IgZW5jb2RpbmcgaW4gc2VsZi5kZXRlY3Rvci5lbmNvZGluZ3M6CisgICAgICAgICAgICAgICAgaWYgZW5jb2RpbmcgIT0gImFzY2lpIjoKKyAgICAgICAgICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRfZnJvbShlbmNvZGluZywgInJlcGxhY2UiKQorICAgICAgICAgICAgICAgIGlmIHUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29tZSBjaGFyYWN0ZXJzIGNvdWxkIG5vdCBiZSBkZWNvZGVkLCBhbmQgd2VyZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2VkIHdpdGggUkVQTEFDRU1FTlQgQ0hBUkFDVEVSLiIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIElmIG5vbmUgb2YgdGhhdCB3b3JrZWQsIHdlIGNvdWxkIGF0IHRoaXMgcG9pbnQgZm9yY2UgaXQgdG8KKyAgICAgICAgIyBBU0NJSSwgYnV0IHRoYXQgd291bGQgZGVzdHJveSBzbyBtdWNoIGRhdGEgdGhhdCBJIHRoaW5rCisgICAgICAgICMgZ2l2aW5nIHVwIGlzIGJldHRlci4KKyAgICAgICAgc2VsZi51bmljb2RlX21hcmt1cCA9IHUKKyAgICAgICAgaWYgbm90IHU6CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsX2VuY29kaW5nID0gTm9uZQorCisgICAgZGVmIF9zdWJfbXNfY2hhcihzZWxmLCBtYXRjaCk6CisgICAgICAgICIiIkNoYW5nZXMgYSBNUyBzbWFydCBxdW90ZSBjaGFyYWN0ZXIgdG8gYW4gWE1MIG9yIEhUTUwKKyAgICAgICAgZW50aXR5LCBvciBhbiBBU0NJSSBjaGFyYWN0ZXIuIiIiCisgICAgICAgIG9yaWcgPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBpZiBzZWxmLnNtYXJ0X3F1b3Rlc190byA9PSAnYXNjaWknOgorICAgICAgICAgICAgc3ViID0gc2VsZi5NU19DSEFSU19UT19BU0NJSS5nZXQob3JpZykuZW5jb2RlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1YiA9IHNlbGYuTVNfQ0hBUlMuZ2V0KG9yaWcpCisgICAgICAgICAgICBpZiB0eXBlKHN1YikgPT0gdHVwbGU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zbWFydF9xdW90ZXNfdG8gPT0gJ3htbCc6CisgICAgICAgICAgICAgICAgICAgIHN1YiA9ICcmI3gnLmVuY29kZSgpICsgc3ViWzFdLmVuY29kZSgpICsgJzsnLmVuY29kZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ViID0gJyYnLmVuY29kZSgpICsgc3ViWzBdLmVuY29kZSgpICsgJzsnLmVuY29kZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1YiA9IHN1Yi5lbmNvZGUoKQorICAgICAgICByZXR1cm4gc3ViCisKKyAgICBkZWYgX2NvbnZlcnRfZnJvbShzZWxmLCBwcm9wb3NlZCwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICAgICAgcHJvcG9zZWQgPSBzZWxmLmZpbmRfY29kZWMocHJvcG9zZWQpCisgICAgICAgIGlmIG5vdCBwcm9wb3NlZCBvciAocHJvcG9zZWQsIGVycm9ycykgaW4gc2VsZi50cmllZF9lbmNvZGluZ3M6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnRyaWVkX2VuY29kaW5ncy5hcHBlbmQoKHByb3Bvc2VkLCBlcnJvcnMpKQorICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorICAgICAgICAjIENvbnZlcnQgc21hcnQgcXVvdGVzIHRvIEhUTUwgaWYgY29taW5nIGZyb20gYW4gZW5jb2RpbmcKKyAgICAgICAgIyB0aGF0IG1pZ2h0IGhhdmUgdGhlbS4KKyAgICAgICAgaWYgKHNlbGYuc21hcnRfcXVvdGVzX3RvIGlzIG5vdCBOb25lCisgICAgICAgICAgICBhbmQgcHJvcG9zZWQgaW4gc2VsZi5FTkNPRElOR1NfV0lUSF9TTUFSVF9RVU9URVMpOgorICAgICAgICAgICAgc21hcnRfcXVvdGVzX3JlID0gYiIoW1x4ODAtXHg5Zl0pIgorICAgICAgICAgICAgc21hcnRfcXVvdGVzX2NvbXBpbGVkID0gcmUuY29tcGlsZShzbWFydF9xdW90ZXNfcmUpCisgICAgICAgICAgICBtYXJrdXAgPSBzbWFydF9xdW90ZXNfY29tcGlsZWQuc3ViKHNlbGYuX3N1Yl9tc19jaGFyLCBtYXJrdXApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI3ByaW50ICJUcnlpbmcgdG8gY29udmVydCBkb2N1bWVudCB0byAlcyAoZXJyb3JzPSVzKSIgJSAoCisgICAgICAgICAgICAjICAgIHByb3Bvc2VkLCBlcnJvcnMpCisgICAgICAgICAgICB1ID0gc2VsZi5fdG9fdW5pY29kZShtYXJrdXAsIHByb3Bvc2VkLCBlcnJvcnMpCisgICAgICAgICAgICBzZWxmLm1hcmt1cCA9IHUKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxfZW5jb2RpbmcgPSBwcm9wb3NlZAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjcHJpbnQgIlRoYXQgZGlkbid0IHdvcmshIgorICAgICAgICAgICAgI3ByaW50IGUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICNwcmludCAiQ29ycmVjdCBlbmNvZGluZzogJXMiICUgcHJvcG9zZWQKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya3VwCisKKyAgICBkZWYgX3RvX3VuaWNvZGUoc2VsZiwgZGF0YSwgZW5jb2RpbmcsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgICAgICcnJ0dpdmVuIGEgc3RyaW5nIGFuZCBpdHMgZW5jb2RpbmcsIGRlY29kZXMgdGhlIHN0cmluZyBpbnRvIFVuaWNvZGUuCisgICAgICAgICVlbmNvZGluZyBpcyBhIHN0cmluZyByZWNvZ25pemVkIGJ5IGVuY29kaW5ncy5hbGlhc2VzJycnCisgICAgICAgIHJldHVybiB1bmljb2RlKGRhdGEsIGVuY29kaW5nLCBlcnJvcnMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVjbGFyZWRfaHRtbF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfaHRtbDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLmRldGVjdG9yLmRlY2xhcmVkX2VuY29kaW5nCisKKyAgICBkZWYgZmluZF9jb2RlYyhzZWxmLCBjaGFyc2V0KToKKyAgICAgICAgdmFsdWUgPSAoc2VsZi5fY29kZWMoc2VsZi5DSEFSU0VUX0FMSUFTRVMuZ2V0KGNoYXJzZXQsIGNoYXJzZXQpKQorICAgICAgICAgICAgICAgb3IgKGNoYXJzZXQgYW5kIHNlbGYuX2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICIiKSkpCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgc2VsZi5fY29kZWMoY2hhcnNldC5yZXBsYWNlKCItIiwgIl8iKSkpCisgICAgICAgICAgICAgICBvciAoY2hhcnNldCBhbmQgY2hhcnNldC5sb3dlcigpKQorICAgICAgICAgICAgICAgb3IgY2hhcnNldAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUubG93ZXIoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9jb2RlYyhzZWxmLCBjaGFyc2V0KToKKyAgICAgICAgaWYgbm90IGNoYXJzZXQ6CisgICAgICAgICAgICByZXR1cm4gY2hhcnNldAorICAgICAgICBjb2RlYyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZWNzLmxvb2t1cChjaGFyc2V0KQorICAgICAgICAgICAgY29kZWMgPSBjaGFyc2V0CisgICAgICAgIGV4Y2VwdCAoTG9va3VwRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gY29kZWMKKworCisgICAgIyBBIHBhcnRpYWwgbWFwcGluZyBvZiBJU08tTGF0aW4tMSB0byBIVE1MIGVudGl0aWVzL1hNTCBudW1lcmljIGVudGl0aWVzLgorICAgIE1TX0NIQVJTID0ge2InXHg4MCc6ICgnZXVybycsICcyMEFDJyksCisgICAgICAgICAgICAgICAgYidceDgxJzogJyAnLAorICAgICAgICAgICAgICAgIGInXHg4Mic6ICgnc2JxdW8nLCAnMjAxQScpLAorICAgICAgICAgICAgICAgIGInXHg4Myc6ICgnZm5vZicsICcxOTInKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODQnOiAoJ2JkcXVvJywgJzIwMUUnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODUnOiAoJ2hlbGxpcCcsICcyMDI2JyksCisgICAgICAgICAgICAgICAgYidceDg2JzogKCdkYWdnZXInLCAnMjAyMCcpLAorICAgICAgICAgICAgICAgIGInXHg4Nyc6ICgnRGFnZ2VyJywgJzIwMjEnKSwKKyAgICAgICAgICAgICAgICBiJ1x4ODgnOiAoJ2NpcmMnLCAnMkM2JyksCisgICAgICAgICAgICAgICAgYidceDg5JzogKCdwZXJtaWwnLCAnMjAzMCcpLAorICAgICAgICAgICAgICAgIGInXHg4QSc6ICgnU2Nhcm9uJywgJzE2MCcpLAorICAgICAgICAgICAgICAgIGInXHg4Qic6ICgnbHNhcXVvJywgJzIwMzknKSwKKyAgICAgICAgICAgICAgICBiJ1x4OEMnOiAoJ09FbGlnJywgJzE1MicpLAorICAgICAgICAgICAgICAgIGInXHg4RCc6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OEUnOiAoJyN4MTdEJywgJzE3RCcpLAorICAgICAgICAgICAgICAgIGInXHg4Ric6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OTAnOiAnPycsCisgICAgICAgICAgICAgICAgYidceDkxJzogKCdsc3F1bycsICcyMDE4JyksCisgICAgICAgICAgICAgICAgYidceDkyJzogKCdyc3F1bycsICcyMDE5JyksCisgICAgICAgICAgICAgICAgYidceDkzJzogKCdsZHF1bycsICcyMDFDJyksCisgICAgICAgICAgICAgICAgYidceDk0JzogKCdyZHF1bycsICcyMDFEJyksCisgICAgICAgICAgICAgICAgYidceDk1JzogKCdidWxsJywgJzIwMjInKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTYnOiAoJ25kYXNoJywgJzIwMTMnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTcnOiAoJ21kYXNoJywgJzIwMTQnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OTgnOiAoJ3RpbGRlJywgJzJEQycpLAorICAgICAgICAgICAgICAgIGInXHg5OSc6ICgndHJhZGUnLCAnMjEyMicpLAorICAgICAgICAgICAgICAgIGInXHg5YSc6ICgnc2Nhcm9uJywgJzE2MScpLAorICAgICAgICAgICAgICAgIGInXHg5Yic6ICgncnNhcXVvJywgJzIwM0EnKSwKKyAgICAgICAgICAgICAgICBiJ1x4OWMnOiAoJ29lbGlnJywgJzE1MycpLAorICAgICAgICAgICAgICAgIGInXHg5ZCc6ICc/JywKKyAgICAgICAgICAgICAgICBiJ1x4OWUnOiAoJyN4MTdFJywgJzE3RScpLAorICAgICAgICAgICAgICAgIGInXHg5Zic6ICgnWXVtbCcsICcnKSx9CisKKyAgICAjIEEgcGFyb2NoaWFsIHBhcnRpYWwgbWFwcGluZyBvZiBJU08tTGF0aW4tMSB0byBBU0NJSS4gQ29udGFpbnMKKyAgICAjIGhvcnJvcnMgbGlrZSBzdHJpcHBpbmcgZGlhY3JpdGljYWwgbWFya3MgdG8gdHVybiDDoSBpbnRvIGEsIGJ1dCBhbHNvCisgICAgIyBjb250YWlucyBub24taG9ycm9ycyBsaWtlIHR1cm5pbmcg4oCcIGludG8gIi4KKyAgICBNU19DSEFSU19UT19BU0NJSSA9IHsKKyAgICAgICAgYidceDgwJyA6ICdFVVInLAorICAgICAgICBiJ1x4ODEnIDogJyAnLAorICAgICAgICBiJ1x4ODInIDogJywnLAorICAgICAgICBiJ1x4ODMnIDogJ2YnLAorICAgICAgICBiJ1x4ODQnIDogJywsJywKKyAgICAgICAgYidceDg1JyA6ICcuLi4nLAorICAgICAgICBiJ1x4ODYnIDogJysnLAorICAgICAgICBiJ1x4ODcnIDogJysrJywKKyAgICAgICAgYidceDg4JyA6ICdeJywKKyAgICAgICAgYidceDg5JyA6ICclJywKKyAgICAgICAgYidceDhhJyA6ICdTJywKKyAgICAgICAgYidceDhiJyA6ICc8JywKKyAgICAgICAgYidceDhjJyA6ICdPRScsCisgICAgICAgIGInXHg4ZCcgOiAnPycsCisgICAgICAgIGInXHg4ZScgOiAnWicsCisgICAgICAgIGInXHg4ZicgOiAnPycsCisgICAgICAgIGInXHg5MCcgOiAnPycsCisgICAgICAgIGInXHg5MScgOiAiJyIsCisgICAgICAgIGInXHg5MicgOiAiJyIsCisgICAgICAgIGInXHg5MycgOiAnIicsCisgICAgICAgIGInXHg5NCcgOiAnIicsCisgICAgICAgIGInXHg5NScgOiAnKicsCisgICAgICAgIGInXHg5NicgOiAnLScsCisgICAgICAgIGInXHg5NycgOiAnLS0nLAorICAgICAgICBiJ1x4OTgnIDogJ34nLAorICAgICAgICBiJ1x4OTknIDogJyhUTSknLAorICAgICAgICBiJ1x4OWEnIDogJ3MnLAorICAgICAgICBiJ1x4OWInIDogJz4nLAorICAgICAgICBiJ1x4OWMnIDogJ29lJywKKyAgICAgICAgYidceDlkJyA6ICc/JywKKyAgICAgICAgYidceDllJyA6ICd6JywKKyAgICAgICAgYidceDlmJyA6ICdZJywKKyAgICAgICAgYidceGEwJyA6ICcgJywKKyAgICAgICAgYidceGExJyA6ICchJywKKyAgICAgICAgYidceGEyJyA6ICdjJywKKyAgICAgICAgYidceGEzJyA6ICdHQlAnLAorICAgICAgICBiJ1x4YTQnIDogJyQnLCAjVGhpcyBhcHByb3hpbWF0aW9uIGlzIGVzcGVjaWFsbHkgcGFyb2NoaWFsLS10aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAjZ2VuZXJpYyBjdXJyZW5jeSBzeW1ib2wuCisgICAgICAgIGInXHhhNScgOiAnWUVOJywKKyAgICAgICAgYidceGE2JyA6ICd8JywKKyAgICAgICAgYidceGE3JyA6ICdTJywKKyAgICAgICAgYidceGE4JyA6ICcuLicsCisgICAgICAgIGInXHhhOScgOiAnJywKKyAgICAgICAgYidceGFhJyA6ICcodGgpJywKKyAgICAgICAgYidceGFiJyA6ICc8PCcsCisgICAgICAgIGInXHhhYycgOiAnIScsCisgICAgICAgIGInXHhhZCcgOiAnICcsCisgICAgICAgIGInXHhhZScgOiAnKFIpJywKKyAgICAgICAgYidceGFmJyA6ICctJywKKyAgICAgICAgYidceGIwJyA6ICdvJywKKyAgICAgICAgYidceGIxJyA6ICcrLScsCisgICAgICAgIGInXHhiMicgOiAnMicsCisgICAgICAgIGInXHhiMycgOiAnMycsCisgICAgICAgIGInXHhiNCcgOiAoIiciLCAnYWN1dGUnKSwKKyAgICAgICAgYidceGI1JyA6ICd1JywKKyAgICAgICAgYidceGI2JyA6ICdQJywKKyAgICAgICAgYidceGI3JyA6ICcqJywKKyAgICAgICAgYidceGI4JyA6ICcsJywKKyAgICAgICAgYidceGI5JyA6ICcxJywKKyAgICAgICAgYidceGJhJyA6ICcodGgpJywKKyAgICAgICAgYidceGJiJyA6ICc+PicsCisgICAgICAgIGInXHhiYycgOiAnMS80JywKKyAgICAgICAgYidceGJkJyA6ICcxLzInLAorICAgICAgICBiJ1x4YmUnIDogJzMvNCcsCisgICAgICAgIGInXHhiZicgOiAnPycsCisgICAgICAgIGInXHhjMCcgOiAnQScsCisgICAgICAgIGInXHhjMScgOiAnQScsCisgICAgICAgIGInXHhjMicgOiAnQScsCisgICAgICAgIGInXHhjMycgOiAnQScsCisgICAgICAgIGInXHhjNCcgOiAnQScsCisgICAgICAgIGInXHhjNScgOiAnQScsCisgICAgICAgIGInXHhjNicgOiAnQUUnLAorICAgICAgICBiJ1x4YzcnIDogJ0MnLAorICAgICAgICBiJ1x4YzgnIDogJ0UnLAorICAgICAgICBiJ1x4YzknIDogJ0UnLAorICAgICAgICBiJ1x4Y2EnIDogJ0UnLAorICAgICAgICBiJ1x4Y2InIDogJ0UnLAorICAgICAgICBiJ1x4Y2MnIDogJ0knLAorICAgICAgICBiJ1x4Y2QnIDogJ0knLAorICAgICAgICBiJ1x4Y2UnIDogJ0knLAorICAgICAgICBiJ1x4Y2YnIDogJ0knLAorICAgICAgICBiJ1x4ZDAnIDogJ0QnLAorICAgICAgICBiJ1x4ZDEnIDogJ04nLAorICAgICAgICBiJ1x4ZDInIDogJ08nLAorICAgICAgICBiJ1x4ZDMnIDogJ08nLAorICAgICAgICBiJ1x4ZDQnIDogJ08nLAorICAgICAgICBiJ1x4ZDUnIDogJ08nLAorICAgICAgICBiJ1x4ZDYnIDogJ08nLAorICAgICAgICBiJ1x4ZDcnIDogJyonLAorICAgICAgICBiJ1x4ZDgnIDogJ08nLAorICAgICAgICBiJ1x4ZDknIDogJ1UnLAorICAgICAgICBiJ1x4ZGEnIDogJ1UnLAorICAgICAgICBiJ1x4ZGInIDogJ1UnLAorICAgICAgICBiJ1x4ZGMnIDogJ1UnLAorICAgICAgICBiJ1x4ZGQnIDogJ1knLAorICAgICAgICBiJ1x4ZGUnIDogJ2InLAorICAgICAgICBiJ1x4ZGYnIDogJ0InLAorICAgICAgICBiJ1x4ZTAnIDogJ2EnLAorICAgICAgICBiJ1x4ZTEnIDogJ2EnLAorICAgICAgICBiJ1x4ZTInIDogJ2EnLAorICAgICAgICBiJ1x4ZTMnIDogJ2EnLAorICAgICAgICBiJ1x4ZTQnIDogJ2EnLAorICAgICAgICBiJ1x4ZTUnIDogJ2EnLAorICAgICAgICBiJ1x4ZTYnIDogJ2FlJywKKyAgICAgICAgYidceGU3JyA6ICdjJywKKyAgICAgICAgYidceGU4JyA6ICdlJywKKyAgICAgICAgYidceGU5JyA6ICdlJywKKyAgICAgICAgYidceGVhJyA6ICdlJywKKyAgICAgICAgYidceGViJyA6ICdlJywKKyAgICAgICAgYidceGVjJyA6ICdpJywKKyAgICAgICAgYidceGVkJyA6ICdpJywKKyAgICAgICAgYidceGVlJyA6ICdpJywKKyAgICAgICAgYidceGVmJyA6ICdpJywKKyAgICAgICAgYidceGYwJyA6ICdvJywKKyAgICAgICAgYidceGYxJyA6ICduJywKKyAgICAgICAgYidceGYyJyA6ICdvJywKKyAgICAgICAgYidceGYzJyA6ICdvJywKKyAgICAgICAgYidceGY0JyA6ICdvJywKKyAgICAgICAgYidceGY1JyA6ICdvJywKKyAgICAgICAgYidceGY2JyA6ICdvJywKKyAgICAgICAgYidceGY3JyA6ICcvJywKKyAgICAgICAgYidceGY4JyA6ICdvJywKKyAgICAgICAgYidceGY5JyA6ICd1JywKKyAgICAgICAgYidceGZhJyA6ICd1JywKKyAgICAgICAgYidceGZiJyA6ICd1JywKKyAgICAgICAgYidceGZjJyA6ICd1JywKKyAgICAgICAgYidceGZkJyA6ICd5JywKKyAgICAgICAgYidceGZlJyA6ICdiJywKKyAgICAgICAgYidceGZmJyA6ICd5JywKKyAgICAgICAgfQorCisgICAgIyBBIG1hcCB1c2VkIHdoZW4gcmVtb3Zpbmcgcm9ndWUgV2luZG93cy0xMjUyL0lTTy04ODU5LTEKKyAgICAjIGNoYXJhY3RlcnMgaW4gb3RoZXJ3aXNlIFVURi04IGRvY3VtZW50cy4KKyAgICAjCisgICAgIyBOb3RlIHRoYXQgXHg4MSwgXHg4ZCwgXHg4ZiwgXHg5MCwgYW5kIFx4OWQgYXJlIHVuZGVmaW5lZCBpbgorICAgICMgV2luZG93cy0xMjUyLgorICAgIFdJTkRPV1NfMTI1Ml9UT19VVEY4ID0geworICAgICAgICAweDgwIDogYidceGUyXHg4Mlx4YWMnLCAjIOKCrAorICAgICAgICAweDgyIDogYidceGUyXHg4MFx4OWEnLCAjIOKAmgorICAgICAgICAweDgzIDogYidceGM2XHg5MicsICAgICAjIMaSCisgICAgICAgIDB4ODQgOiBiJ1x4ZTJceDgwXHg5ZScsICMg4oCeCisgICAgICAgIDB4ODUgOiBiJ1x4ZTJceDgwXHhhNicsICMg4oCmCisgICAgICAgIDB4ODYgOiBiJ1x4ZTJceDgwXHhhMCcsICMg4oCgCisgICAgICAgIDB4ODcgOiBiJ1x4ZTJceDgwXHhhMScsICMg4oChCisgICAgICAgIDB4ODggOiBiJ1x4Y2JceDg2JywgICAgICMgy4YKKyAgICAgICAgMHg4OSA6IGInXHhlMlx4ODBceGIwJywgIyDigLAKKyAgICAgICAgMHg4YSA6IGInXHhjNVx4YTAnLCAgICAgIyDFoAorICAgICAgICAweDhiIDogYidceGUyXHg4MFx4YjknLCAjIOKAuQorICAgICAgICAweDhjIDogYidceGM1XHg5MicsICAgICAjIMWSCisgICAgICAgIDB4OGUgOiBiJ1x4YzVceGJkJywgICAgICMgxb0KKyAgICAgICAgMHg5MSA6IGInXHhlMlx4ODBceDk4JywgIyDigJgKKyAgICAgICAgMHg5MiA6IGInXHhlMlx4ODBceDk5JywgIyDigJkKKyAgICAgICAgMHg5MyA6IGInXHhlMlx4ODBceDljJywgIyDigJwKKyAgICAgICAgMHg5NCA6IGInXHhlMlx4ODBceDlkJywgIyDigJ0KKyAgICAgICAgMHg5NSA6IGInXHhlMlx4ODBceGEyJywgIyDigKIKKyAgICAgICAgMHg5NiA6IGInXHhlMlx4ODBceDkzJywgIyDigJMKKyAgICAgICAgMHg5NyA6IGInXHhlMlx4ODBceDk0JywgIyDigJQKKyAgICAgICAgMHg5OCA6IGInXHhjYlx4OWMnLCAgICAgIyDLnAorICAgICAgICAweDk5IDogYidceGUyXHg4NFx4YTInLCAjIOKEogorICAgICAgICAweDlhIDogYidceGM1XHhhMScsICAgICAjIMWhCisgICAgICAgIDB4OWIgOiBiJ1x4ZTJceDgwXHhiYScsICMg4oC6CisgICAgICAgIDB4OWMgOiBiJ1x4YzVceDkzJywgICAgICMgxZMKKyAgICAgICAgMHg5ZSA6IGInXHhjNVx4YmUnLCAgICAgIyDFvgorICAgICAgICAweDlmIDogYidceGM1XHhiOCcsICAgICAjIMW4CisgICAgICAgIDB4YTAgOiBiJ1x4YzJceGEwJywgICAgICMgwqAKKyAgICAgICAgMHhhMSA6IGInXHhjMlx4YTEnLCAgICAgIyDCoQorICAgICAgICAweGEyIDogYidceGMyXHhhMicsICAgICAjIMKiCisgICAgICAgIDB4YTMgOiBiJ1x4YzJceGEzJywgICAgICMgwqMKKyAgICAgICAgMHhhNCA6IGInXHhjMlx4YTQnLCAgICAgIyDCpAorICAgICAgICAweGE1IDogYidceGMyXHhhNScsICAgICAjIMKlCisgICAgICAgIDB4YTYgOiBiJ1x4YzJceGE2JywgICAgICMgwqYKKyAgICAgICAgMHhhNyA6IGInXHhjMlx4YTcnLCAgICAgIyDCpworICAgICAgICAweGE4IDogYidceGMyXHhhOCcsICAgICAjIMKoCisgICAgICAgIDB4YTkgOiBiJ1x4YzJceGE5JywgICAgICMgwqkKKyAgICAgICAgMHhhYSA6IGInXHhjMlx4YWEnLCAgICAgIyDCqgorICAgICAgICAweGFiIDogYidceGMyXHhhYicsICAgICAjIMKrCisgICAgICAgIDB4YWMgOiBiJ1x4YzJceGFjJywgICAgICMgwqwKKyAgICAgICAgMHhhZCA6IGInXHhjMlx4YWQnLCAgICAgIyDCrQorICAgICAgICAweGFlIDogYidceGMyXHhhZScsICAgICAjIMKuCisgICAgICAgIDB4YWYgOiBiJ1x4YzJceGFmJywgICAgICMgwq8KKyAgICAgICAgMHhiMCA6IGInXHhjMlx4YjAnLCAgICAgIyDCsAorICAgICAgICAweGIxIDogYidceGMyXHhiMScsICAgICAjIMKxCisgICAgICAgIDB4YjIgOiBiJ1x4YzJceGIyJywgICAgICMgwrIKKyAgICAgICAgMHhiMyA6IGInXHhjMlx4YjMnLCAgICAgIyDCsworICAgICAgICAweGI0IDogYidceGMyXHhiNCcsICAgICAjIMK0CisgICAgICAgIDB4YjUgOiBiJ1x4YzJceGI1JywgICAgICMgwrUKKyAgICAgICAgMHhiNiA6IGInXHhjMlx4YjYnLCAgICAgIyDCtgorICAgICAgICAweGI3IDogYidceGMyXHhiNycsICAgICAjIMK3CisgICAgICAgIDB4YjggOiBiJ1x4YzJceGI4JywgICAgICMgwrgKKyAgICAgICAgMHhiOSA6IGInXHhjMlx4YjknLCAgICAgIyDCuQorICAgICAgICAweGJhIDogYidceGMyXHhiYScsICAgICAjIMK6CisgICAgICAgIDB4YmIgOiBiJ1x4YzJceGJiJywgICAgICMgwrsKKyAgICAgICAgMHhiYyA6IGInXHhjMlx4YmMnLCAgICAgIyDCvAorICAgICAgICAweGJkIDogYidceGMyXHhiZCcsICAgICAjIMK9CisgICAgICAgIDB4YmUgOiBiJ1x4YzJceGJlJywgICAgICMgwr4KKyAgICAgICAgMHhiZiA6IGInXHhjMlx4YmYnLCAgICAgIyDCvworICAgICAgICAweGMwIDogYidceGMzXHg4MCcsICAgICAjIMOACisgICAgICAgIDB4YzEgOiBiJ1x4YzNceDgxJywgICAgICMgw4EKKyAgICAgICAgMHhjMiA6IGInXHhjM1x4ODInLCAgICAgIyDDggorICAgICAgICAweGMzIDogYidceGMzXHg4MycsICAgICAjIMODCisgICAgICAgIDB4YzQgOiBiJ1x4YzNceDg0JywgICAgICMgw4QKKyAgICAgICAgMHhjNSA6IGInXHhjM1x4ODUnLCAgICAgIyDDhQorICAgICAgICAweGM2IDogYidceGMzXHg4NicsICAgICAjIMOGCisgICAgICAgIDB4YzcgOiBiJ1x4YzNceDg3JywgICAgICMgw4cKKyAgICAgICAgMHhjOCA6IGInXHhjM1x4ODgnLCAgICAgIyDDiAorICAgICAgICAweGM5IDogYidceGMzXHg4OScsICAgICAjIMOJCisgICAgICAgIDB4Y2EgOiBiJ1x4YzNceDhhJywgICAgICMgw4oKKyAgICAgICAgMHhjYiA6IGInXHhjM1x4OGInLCAgICAgIyDDiworICAgICAgICAweGNjIDogYidceGMzXHg4YycsICAgICAjIMOMCisgICAgICAgIDB4Y2QgOiBiJ1x4YzNceDhkJywgICAgICMgw40KKyAgICAgICAgMHhjZSA6IGInXHhjM1x4OGUnLCAgICAgIyDDjgorICAgICAgICAweGNmIDogYidceGMzXHg4ZicsICAgICAjIMOPCisgICAgICAgIDB4ZDAgOiBiJ1x4YzNceDkwJywgICAgICMgw5AKKyAgICAgICAgMHhkMSA6IGInXHhjM1x4OTEnLCAgICAgIyDDkQorICAgICAgICAweGQyIDogYidceGMzXHg5MicsICAgICAjIMOSCisgICAgICAgIDB4ZDMgOiBiJ1x4YzNceDkzJywgICAgICMgw5MKKyAgICAgICAgMHhkNCA6IGInXHhjM1x4OTQnLCAgICAgIyDDlAorICAgICAgICAweGQ1IDogYidceGMzXHg5NScsICAgICAjIMOVCisgICAgICAgIDB4ZDYgOiBiJ1x4YzNceDk2JywgICAgICMgw5YKKyAgICAgICAgMHhkNyA6IGInXHhjM1x4OTcnLCAgICAgIyDDlworICAgICAgICAweGQ4IDogYidceGMzXHg5OCcsICAgICAjIMOYCisgICAgICAgIDB4ZDkgOiBiJ1x4YzNceDk5JywgICAgICMgw5kKKyAgICAgICAgMHhkYSA6IGInXHhjM1x4OWEnLCAgICAgIyDDmgorICAgICAgICAweGRiIDogYidceGMzXHg5YicsICAgICAjIMObCisgICAgICAgIDB4ZGMgOiBiJ1x4YzNceDljJywgICAgICMgw5wKKyAgICAgICAgMHhkZCA6IGInXHhjM1x4OWQnLCAgICAgIyDDnQorICAgICAgICAweGRlIDogYidceGMzXHg5ZScsICAgICAjIMOeCisgICAgICAgIDB4ZGYgOiBiJ1x4YzNceDlmJywgICAgICMgw58KKyAgICAgICAgMHhlMCA6IGInXHhjM1x4YTAnLCAgICAgIyDDoAorICAgICAgICAweGUxIDogYidceGExJywgICAgICMgw6EKKyAgICAgICAgMHhlMiA6IGInXHhjM1x4YTInLCAgICAgIyDDogorICAgICAgICAweGUzIDogYidceGMzXHhhMycsICAgICAjIMOjCisgICAgICAgIDB4ZTQgOiBiJ1x4YzNceGE0JywgICAgICMgw6QKKyAgICAgICAgMHhlNSA6IGInXHhjM1x4YTUnLCAgICAgIyDDpQorICAgICAgICAweGU2IDogYidceGMzXHhhNicsICAgICAjIMOmCisgICAgICAgIDB4ZTcgOiBiJ1x4YzNceGE3JywgICAgICMgw6cKKyAgICAgICAgMHhlOCA6IGInXHhjM1x4YTgnLCAgICAgIyDDqAorICAgICAgICAweGU5IDogYidceGMzXHhhOScsICAgICAjIMOpCisgICAgICAgIDB4ZWEgOiBiJ1x4YzNceGFhJywgICAgICMgw6oKKyAgICAgICAgMHhlYiA6IGInXHhjM1x4YWInLCAgICAgIyDDqworICAgICAgICAweGVjIDogYidceGMzXHhhYycsICAgICAjIMOsCisgICAgICAgIDB4ZWQgOiBiJ1x4YzNceGFkJywgICAgICMgw60KKyAgICAgICAgMHhlZSA6IGInXHhjM1x4YWUnLCAgICAgIyDDrgorICAgICAgICAweGVmIDogYidceGMzXHhhZicsICAgICAjIMOvCisgICAgICAgIDB4ZjAgOiBiJ1x4YzNceGIwJywgICAgICMgw7AKKyAgICAgICAgMHhmMSA6IGInXHhjM1x4YjEnLCAgICAgIyDDsQorICAgICAgICAweGYyIDogYidceGMzXHhiMicsICAgICAjIMOyCisgICAgICAgIDB4ZjMgOiBiJ1x4YzNceGIzJywgICAgICMgw7MKKyAgICAgICAgMHhmNCA6IGInXHhjM1x4YjQnLCAgICAgIyDDtAorICAgICAgICAweGY1IDogYidceGMzXHhiNScsICAgICAjIMO1CisgICAgICAgIDB4ZjYgOiBiJ1x4YzNceGI2JywgICAgICMgw7YKKyAgICAgICAgMHhmNyA6IGInXHhjM1x4YjcnLCAgICAgIyDDtworICAgICAgICAweGY4IDogYidceGMzXHhiOCcsICAgICAjIMO4CisgICAgICAgIDB4ZjkgOiBiJ1x4YzNceGI5JywgICAgICMgw7kKKyAgICAgICAgMHhmYSA6IGInXHhjM1x4YmEnLCAgICAgIyDDugorICAgICAgICAweGZiIDogYidceGMzXHhiYicsICAgICAjIMO7CisgICAgICAgIDB4ZmMgOiBiJ1x4YzNceGJjJywgICAgICMgw7wKKyAgICAgICAgMHhmZCA6IGInXHhjM1x4YmQnLCAgICAgIyDDvQorICAgICAgICAweGZlIDogYidceGMzXHhiZScsICAgICAjIMO+CisgICAgICAgIH0KKworICAgIE1VTFRJQllURV9NQVJLRVJTX0FORF9TSVpFUyA9IFsKKyAgICAgICAgKDB4YzIsIDB4ZGYsIDIpLCAjIDItYnl0ZSBjaGFyYWN0ZXJzIHN0YXJ0IHdpdGggYSBieXRlIEMyLURGCisgICAgICAgICgweGUwLCAweGVmLCAzKSwgIyAzLWJ5dGUgY2hhcmFjdGVycyBzdGFydCB3aXRoIEUwLUVGCisgICAgICAgICgweGYwLCAweGY0LCA0KSwgIyA0LWJ5dGUgY2hhcmFjdGVycyBzdGFydCB3aXRoIEYwLUY0CisgICAgICAgIF0KKworICAgIEZJUlNUX01VTFRJQllURV9NQVJLRVIgPSBNVUxUSUJZVEVfTUFSS0VSU19BTkRfU0laRVNbMF1bMF0KKyAgICBMQVNUX01VTFRJQllURV9NQVJLRVIgPSBNVUxUSUJZVEVfTUFSS0VSU19BTkRfU0laRVNbLTFdWzFdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGV0d2luZ2xlKGNscywgaW5fYnl0ZXMsIG1haW5fZW5jb2Rpbmc9InV0ZjgiLAorICAgICAgICAgICAgICAgICAgZW1iZWRkZWRfZW5jb2Rpbmc9IndpbmRvd3MtMTI1MiIpOgorICAgICAgICAiIiJGaXggY2hhcmFjdGVycyBmcm9tIG9uZSBlbmNvZGluZyBlbWJlZGRlZCBpbiBzb21lIG90aGVyIGVuY29kaW5nLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUgb25seSBzaXR1YXRpb24gc3VwcG9ydGVkIGlzIFdpbmRvd3MtMTI1MiAob3IgaXRzCisgICAgICAgIHN1YnNldCBJU08tODg1OS0xKSwgZW1iZWRkZWQgaW4gVVRGLTguCisKKyAgICAgICAgVGhlIGlucHV0IG11c3QgYmUgYSBieXRlc3RyaW5nLiBJZiB5b3UndmUgYWxyZWFkeSBjb252ZXJ0ZWQKKyAgICAgICAgdGhlIGRvY3VtZW50IHRvIFVuaWNvZGUsIHlvdSdyZSB0b28gbGF0ZS4KKworICAgICAgICBUaGUgb3V0cHV0IGlzIGEgYnl0ZXN0cmluZyBpbiB3aGljaCBgZW1iZWRkZWRfZW5jb2RpbmdgCisgICAgICAgIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB0aGVpciBgbWFpbl9lbmNvZGluZ2AKKyAgICAgICAgZXF1aXZhbGVudHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBlbWJlZGRlZF9lbmNvZGluZy5yZXBsYWNlKCdfJywgJy0nKS5sb3dlcigpIG5vdCBpbiAoCisgICAgICAgICAgICAnd2luZG93cy0xMjUyJywgJ3dpbmRvd3NfMTI1MicpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAiV2luZG93cy0xMjUyIGFuZCBJU08tODg1OS0xIGFyZSB0aGUgb25seSBjdXJyZW50bHkgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAiZW1iZWRkZWQgZW5jb2RpbmdzLiIpCisKKyAgICAgICAgaWYgbWFpbl9lbmNvZGluZy5sb3dlcigpIG5vdCBpbiAoJ3V0ZjgnLCAndXRmLTgnKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgIlVURi04IGlzIHRoZSBvbmx5IGN1cnJlbnRseSBzdXBwb3J0ZWQgbWFpbiBlbmNvZGluZy4iKQorCisgICAgICAgIGJ5dGVfY2h1bmtzID0gW10KKworICAgICAgICBjaHVua19zdGFydCA9IDAKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4oaW5fYnl0ZXMpOgorICAgICAgICAgICAgYnl0ZSA9IGluX2J5dGVzW3Bvc10KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJ5dGUsIGludCk6CisgICAgICAgICAgICAgICAgIyBQeXRob24gMi54CisgICAgICAgICAgICAgICAgYnl0ZSA9IG9yZChieXRlKQorICAgICAgICAgICAgaWYgKGJ5dGUgPj0gY2xzLkZJUlNUX01VTFRJQllURV9NQVJLRVIKKyAgICAgICAgICAgICAgICBhbmQgYnl0ZSA8PSBjbHMuTEFTVF9NVUxUSUJZVEVfTUFSS0VSKToKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgVVRGLTggbXVsdGlieXRlIGNoYXJhY3Rlci4gU2tpcAorICAgICAgICAgICAgICAgICMgdG8gdGhlIGVuZC4KKyAgICAgICAgICAgICAgICBmb3Igc3RhcnQsIGVuZCwgc2l6ZSBpbiBjbHMuTVVMVElCWVRFX01BUktFUlNfQU5EX1NJWkVTOgorICAgICAgICAgICAgICAgICAgICBpZiBieXRlID49IHN0YXJ0IGFuZCBieXRlIDw9IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBieXRlID49IDB4ODAgYW5kIGJ5dGUgaW4gY2xzLldJTkRPV1NfMTI1Ml9UT19VVEY4OgorICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBXaW5kb3dzLTEyNTIgY2hhcmFjdGVyIQorICAgICAgICAgICAgICAgICMgU2F2ZSB0aGUgc3RyaW5nIHVwIHRvIHRoaXMgcG9pbnQgYXMgYSBjaHVuay4KKyAgICAgICAgICAgICAgICBieXRlX2NodW5rcy5hcHBlbmQoaW5fYnl0ZXNbY2h1bmtfc3RhcnQ6cG9zXSkKKworICAgICAgICAgICAgICAgICMgTm93IHRyYW5zbGF0ZSB0aGUgV2luZG93cy0xMjUyIGNoYXJhY3RlciBpbnRvIFVURi04CisgICAgICAgICAgICAgICAgIyBhbmQgYWRkIGl0IGFzIGFub3RoZXIsIG9uZS1ieXRlIGNodW5rLgorICAgICAgICAgICAgICAgIGJ5dGVfY2h1bmtzLmFwcGVuZChjbHMuV0lORE9XU18xMjUyX1RPX1VURjhbYnl0ZV0pCisgICAgICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgICAgICAgICBjaHVua19zdGFydCA9IHBvcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEdvIG9uIHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICBpZiBjaHVua19zdGFydCA9PSAwOgorICAgICAgICAgICAgIyBUaGUgc3RyaW5nIGlzIHVuY2hhbmdlZC4KKyAgICAgICAgICAgIHJldHVybiBpbl9ieXRlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTdG9yZSB0aGUgZmluYWwgY2h1bmsuCisgICAgICAgICAgICBieXRlX2NodW5rcy5hcHBlbmQoaW5fYnl0ZXNbY2h1bmtfc3RhcnQ6XSkKKyAgICAgICAgcmV0dXJuIGInJy5qb2luKGJ5dGVfY2h1bmtzKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkgYi9iaXRiYWtlL2xpYi9iczQvZGlhZ25vc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwYjAwYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JzNC9kaWFnbm9zZS5weQpAQCAtMCwwICsxLDIwNCBAQAorIiIiRGlhZ25vc3RpYyBmdW5jdGlvbnMsIG1haW5seSBmb3IgdXNlIHdoZW4gZG9pbmcgdGVjaCBzdXBwb3J0LiIiIgoraW1wb3J0IGNQcm9maWxlCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBIVE1MUGFyc2VyIGltcG9ydCBIVE1MUGFyc2VyCitpbXBvcnQgYnM0Citmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cCwgX192ZXJzaW9uX18KK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IGJ1aWxkZXJfcmVnaXN0cnkKKworaW1wb3J0IG9zCitpbXBvcnQgcHN0YXRzCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgc3lzCitpbXBvcnQgY1Byb2ZpbGUKKworZGVmIGRpYWdub3NlKGRhdGEpOgorICAgICIiIkRpYWdub3N0aWMgc3VpdGUgZm9yIGlzb2xhdGluZyBjb21tb24gcHJvYmxlbXMuIiIiCisgICAgcHJpbnQgIkRpYWdub3N0aWMgcnVubmluZyBvbiBCZWF1dGlmdWwgU291cCAlcyIgJSBfX3ZlcnNpb25fXworICAgIHByaW50ICJQeXRob24gdmVyc2lvbiAlcyIgJSBzeXMudmVyc2lvbgorCisgICAgYmFzaWNfcGFyc2VycyA9IFsiaHRtbC5wYXJzZXIiLCAiaHRtbDVsaWIiLCAibHhtbCJdCisgICAgZm9yIG5hbWUgaW4gYmFzaWNfcGFyc2VyczoKKyAgICAgICAgZm9yIGJ1aWxkZXIgaW4gYnVpbGRlcl9yZWdpc3RyeS5idWlsZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gYnVpbGRlci5mZWF0dXJlczoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzaWNfcGFyc2Vycy5yZW1vdmUobmFtZSkKKyAgICAgICAgICAgIHByaW50ICgKKyAgICAgICAgICAgICAgICAiSSBub3RpY2VkIHRoYXQgJXMgaXMgbm90IGluc3RhbGxlZC4gSW5zdGFsbGluZyBpdCBtYXkgaGVscC4iICUKKyAgICAgICAgICAgICAgICBuYW1lKQorCisgICAgaWYgJ2x4bWwnIGluIGJhc2ljX3BhcnNlcnM6CisgICAgICAgIGJhc2ljX3BhcnNlcnMuYXBwZW5kKFsibHhtbCIsICJ4bWwiXSkKKyAgICAgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQorICAgICAgICBwcmludCAiRm91bmQgbHhtbCB2ZXJzaW9uICVzIiAlICIuIi5qb2luKG1hcChzdHIsZXRyZWUuTFhNTF9WRVJTSU9OKSkKKworICAgIGlmICdodG1sNWxpYicgaW4gYmFzaWNfcGFyc2VyczoKKyAgICAgICAgaW1wb3J0IGh0bWw1bGliCisgICAgICAgIHByaW50ICJGb3VuZCBodG1sNWxpYiB2ZXJzaW9uICVzIiAlIGh0bWw1bGliLl9fdmVyc2lvbl9fCisKKyAgICBpZiBoYXNhdHRyKGRhdGEsICdyZWFkJyk6CisgICAgICAgIGRhdGEgPSBkYXRhLnJlYWQoKQorICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZGF0YSk6CisgICAgICAgIHByaW50ICciJXMiIGxvb2tzIGxpa2UgYSBmaWxlbmFtZS4gUmVhZGluZyBkYXRhIGZyb20gdGhlIGZpbGUuJyAlIGRhdGEKKyAgICAgICAgZGF0YSA9IG9wZW4oZGF0YSkucmVhZCgpCisgICAgZWxpZiBkYXRhLnN0YXJ0c3dpdGgoImh0dHA6Iikgb3IgZGF0YS5zdGFydHN3aXRoKCJodHRwczoiKToKKyAgICAgICAgcHJpbnQgJyIlcyIgbG9va3MgbGlrZSBhIFVSTC4gQmVhdXRpZnVsIFNvdXAgaXMgbm90IGFuIEhUVFAgY2xpZW50LicgJSBkYXRhCisgICAgICAgIHByaW50ICJZb3UgbmVlZCB0byB1c2Ugc29tZSBvdGhlciBsaWJyYXJ5IHRvIGdldCB0aGUgZG9jdW1lbnQgYmVoaW5kIHRoZSBVUkwsIGFuZCBmZWVkIHRoYXQgZG9jdW1lbnQgdG8gQmVhdXRpZnVsIFNvdXAuIgorICAgICAgICByZXR1cm4KKyAgICBwcmludAorCisgICAgZm9yIHBhcnNlciBpbiBiYXNpY19wYXJzZXJzOgorICAgICAgICBwcmludCAiVHJ5aW5nIHRvIHBhcnNlIHlvdXIgbWFya3VwIHdpdGggJXMiICUgcGFyc2VyCisgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkYXRhLCBwYXJzZXIpCisgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgIiVzIGNvdWxkIG5vdCBwYXJzZSB0aGUgbWFya3VwLiIgJSBwYXJzZXIKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgcHJpbnQgIkhlcmUncyB3aGF0ICVzIGRpZCB3aXRoIHRoZSBtYXJrdXA6IiAlIHBhcnNlcgorICAgICAgICAgICAgcHJpbnQgc291cC5wcmV0dGlmeSgpCisKKyAgICAgICAgcHJpbnQgIi0iICogODAKKworZGVmIGx4bWxfdHJhY2UoZGF0YSwgaHRtbD1UcnVlLCAqKmt3YXJncyk6CisgICAgIiIiUHJpbnQgb3V0IHRoZSBseG1sIGV2ZW50cyB0aGF0IG9jY3VyIGR1cmluZyBwYXJzaW5nLgorCisgICAgVGhpcyBsZXRzIHlvdSBzZWUgaG93IGx4bWwgcGFyc2VzIGEgZG9jdW1lbnQgd2hlbiBubyBCZWF1dGlmdWwKKyAgICBTb3VwIGNvZGUgaXMgcnVubmluZy4KKyAgICAiIiIKKyAgICBmcm9tIGx4bWwgaW1wb3J0IGV0cmVlCisgICAgZm9yIGV2ZW50LCBlbGVtZW50IGluIGV0cmVlLml0ZXJwYXJzZShTdHJpbmdJTyhkYXRhKSwgaHRtbD1odG1sLCAqKmt3YXJncyk6CisgICAgICAgIHByaW50KCIlcywgJTRzLCAlcyIgJSAoZXZlbnQsIGVsZW1lbnQudGFnLCBlbGVtZW50LnRleHQpKQorCitjbGFzcyBBbm5vdW5jaW5nUGFyc2VyKEhUTUxQYXJzZXIpOgorICAgICIiIkFubm91bmNlcyBIVE1MUGFyc2VyIHBhcnNlIGV2ZW50cywgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLiIiIgorCisgICAgZGVmIF9wKHNlbGYsIHMpOgorICAgICAgICBwcmludChzKQorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgIHNlbGYuX3AoIiVzIFNUQVJUIiAlIG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fcCgiJXMgRU5EIiAlIG5hbWUpCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIERBVEEiICUgZGF0YSkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fcCgiJXMgQ0hBUlJFRiIgJSBuYW1lKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX3AoIiVzIEVOVElUWVJFRiIgJSBuYW1lKQorCisgICAgZGVmIGhhbmRsZV9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9wKCIlcyBDT01NRU5UIiAlIGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIERFQ0wiICUgZGF0YSkKKworICAgIGRlZiB1bmtub3duX2RlY2woc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3AoIiVzIFVOS05PV04tREVDTCIgJSBkYXRhKQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fcCgiJXMgUEkiICUgZGF0YSkKKworZGVmIGh0bWxwYXJzZXJfdHJhY2UoZGF0YSk6CisgICAgIiIiUHJpbnQgb3V0IHRoZSBIVE1MUGFyc2VyIGV2ZW50cyB0aGF0IG9jY3VyIGR1cmluZyBwYXJzaW5nLgorCisgICAgVGhpcyBsZXRzIHlvdSBzZWUgaG93IEhUTUxQYXJzZXIgcGFyc2VzIGEgZG9jdW1lbnQgd2hlbiBubworICAgIEJlYXV0aWZ1bCBTb3VwIGNvZGUgaXMgcnVubmluZy4KKyAgICAiIiIKKyAgICBwYXJzZXIgPSBBbm5vdW5jaW5nUGFyc2VyKCkKKyAgICBwYXJzZXIuZmVlZChkYXRhKQorCitfdm93ZWxzID0gImFlaW91IgorX2NvbnNvbmFudHMgPSAiYmNkZmdoamtsbW5wcXJzdHZ3eHl6IgorCitkZWYgcndvcmQobGVuZ3RoPTUpOgorICAgICJHZW5lcmF0ZSBhIHJhbmRvbSB3b3JkLWxpa2Ugc3RyaW5nLiIKKyAgICBzID0gJycKKyAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICBpZiBpICUgMiA9PSAwOgorICAgICAgICAgICAgdCA9IF9jb25zb25hbnRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ID0gX3Zvd2VscworICAgICAgICBzICs9IHJhbmRvbS5jaG9pY2UodCkKKyAgICByZXR1cm4gcworCitkZWYgcnNlbnRlbmNlKGxlbmd0aD00KToKKyAgICAiR2VuZXJhdGUgYSByYW5kb20gc2VudGVuY2UtbGlrZSBzdHJpbmcuIgorICAgIHJldHVybiAiICIuam9pbihyd29yZChyYW5kb20ucmFuZGludCg0LDkpKSBmb3IgaSBpbiByYW5nZShsZW5ndGgpKQorICAgICAgICAKK2RlZiByZG9jKG51bV9lbGVtZW50cz0xMDAwKToKKyAgICAiIiJSYW5kb21seSBnZW5lcmF0ZSBhbiBpbnZhbGlkIEhUTUwgZG9jdW1lbnQuIiIiCisgICAgdGFnX25hbWVzID0gWydwJywgJ2RpdicsICdzcGFuJywgJ2knLCAnYicsICdzY3JpcHQnLCAndGFibGUnXQorICAgIGVsZW1lbnRzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZShudW1fZWxlbWVudHMpOgorICAgICAgICBjaG9pY2UgPSByYW5kb20ucmFuZGludCgwLDMpCisgICAgICAgIGlmIGNob2ljZSA9PSAwOgorICAgICAgICAgICAgIyBOZXcgdGFnLgorICAgICAgICAgICAgdGFnX25hbWUgPSByYW5kb20uY2hvaWNlKHRhZ19uYW1lcykKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCgiPCVzPiIgJSB0YWdfbmFtZSkKKyAgICAgICAgZWxpZiBjaG9pY2UgPT0gMToKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChyc2VudGVuY2UocmFuZG9tLnJhbmRpbnQoMSw0KSkpCisgICAgICAgIGVsaWYgY2hvaWNlID09IDI6CisgICAgICAgICAgICAjIENsb3NlIGEgdGFnLgorICAgICAgICAgICAgdGFnX25hbWUgPSByYW5kb20uY2hvaWNlKHRhZ19uYW1lcykKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCgiPC8lcz4iICUgdGFnX25hbWUpCisgICAgcmV0dXJuICI8aHRtbD4iICsgIlxuIi5qb2luKGVsZW1lbnRzKSArICI8L2h0bWw+IgorCitkZWYgYmVuY2htYXJrX3BhcnNlcnMobnVtX2VsZW1lbnRzPTEwMDAwMCk6CisgICAgIiIiVmVyeSBiYXNpYyBoZWFkLXRvLWhlYWQgcGVyZm9ybWFuY2UgYmVuY2htYXJrLiIiIgorICAgIHByaW50ICJDb21wYXJhdGl2ZSBwYXJzZXIgYmVuY2htYXJrIG9uIEJlYXV0aWZ1bCBTb3VwICVzIiAlIF9fdmVyc2lvbl9fCisgICAgZGF0YSA9IHJkb2MobnVtX2VsZW1lbnRzKQorICAgIHByaW50ICJHZW5lcmF0ZWQgYSBsYXJnZSBpbnZhbGlkIEhUTUwgZG9jdW1lbnQgKCVkIGJ5dGVzKS4iICUgbGVuKGRhdGEpCisgICAgCisgICAgZm9yIHBhcnNlciBpbiBbImx4bWwiLCBbImx4bWwiLCAiaHRtbCJdLCAiaHRtbDVsaWIiLCAiaHRtbC5wYXJzZXIiXToKKyAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoZGF0YSwgcGFyc2VyKQorICAgICAgICAgICAgYiA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgIiVzIGNvdWxkIG5vdCBwYXJzZSB0aGUgbWFya3VwLiIgJSBwYXJzZXIKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgcHJpbnQgIkJTNCslcyBwYXJzZWQgdGhlIG1hcmt1cCBpbiAlLjJmcy4iICUgKHBhcnNlciwgYi1hKQorCisgICAgZnJvbSBseG1sIGltcG9ydCBldHJlZQorICAgIGEgPSB0aW1lLnRpbWUoKQorICAgIGV0cmVlLkhUTUwoZGF0YSkKKyAgICBiID0gdGltZS50aW1lKCkKKyAgICBwcmludCAiUmF3IGx4bWwgcGFyc2VkIHRoZSBtYXJrdXAgaW4gJS4yZnMuIiAlIChiLWEpCisKKyAgICBpbXBvcnQgaHRtbDVsaWIKKyAgICBwYXJzZXIgPSBodG1sNWxpYi5IVE1MUGFyc2VyKCkKKyAgICBhID0gdGltZS50aW1lKCkKKyAgICBwYXJzZXIucGFyc2UoZGF0YSkKKyAgICBiID0gdGltZS50aW1lKCkKKyAgICBwcmludCAiUmF3IGh0bWw1bGliIHBhcnNlZCB0aGUgbWFya3VwIGluICUuMmZzLiIgJSAoYi1hKQorCitkZWYgcHJvZmlsZShudW1fZWxlbWVudHM9MTAwMDAwLCBwYXJzZXI9Imx4bWwiKToKKworICAgIGZpbGVoYW5kbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgIGZpbGVuYW1lID0gZmlsZWhhbmRsZS5uYW1lCisKKyAgICBkYXRhID0gcmRvYyhudW1fZWxlbWVudHMpCisgICAgdmFycyA9IGRpY3QoYnM0PWJzNCwgZGF0YT1kYXRhLCBwYXJzZXI9cGFyc2VyKQorICAgIGNQcm9maWxlLnJ1bmN0eCgnYnM0LkJlYXV0aWZ1bFNvdXAoZGF0YSwgcGFyc2VyKScgLCB2YXJzLCB2YXJzLCBmaWxlbmFtZSkKKworICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKGZpbGVuYW1lKQorICAgICMgc3RhdHMuc3RyaXBfZGlycygpCisgICAgc3RhdHMuc29ydF9zdGF0cygiY3VtdWxhdGl2ZSIpCisgICAgc3RhdHMucHJpbnRfc3RhdHMoJ19odG1sNWxpYnxiczQnLCA1MCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBkaWFnbm9zZShzeXMuc3RkaW4ucmVhZCgpKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYnM0L2VsZW1lbnQucHkgYi9iaXRiYWtlL2xpYi9iczQvZWxlbWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTlhZmRmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYnM0L2VsZW1lbnQucHkKQEAgLTAsMCArMSwxNjExIEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCitmcm9tIGJzNC5kYW1taXQgaW1wb3J0IEVudGl0eVN1YnN0aXR1dGlvbgorCitERUZBVUxUX09VVFBVVF9FTkNPRElORyA9ICJ1dGYtOCIKK1BZM0sgPSAoc3lzLnZlcnNpb25faW5mb1swXSA+IDIpCisKK3doaXRlc3BhY2VfcmUgPSByZS5jb21waWxlKCJccysiKQorCitkZWYgX2FsaWFzKGF0dHIpOgorICAgICIiIkFsaWFzIG9uZSBhdHRyaWJ1dGUgbmFtZSB0byBhbm90aGVyIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IiIiCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFsaWFzKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRyKQorCisgICAgQGFsaWFzLnNldHRlcgorICAgIGRlZiBhbGlhcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNldGF0dHIoc2VsZiwgYXR0cikKKyAgICByZXR1cm4gYWxpYXMKKworCitjbGFzcyBOYW1lc3BhY2VkQXR0cmlidXRlKHVuaWNvZGUpOgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBwcmVmaXgsIG5hbWUsIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgcHJlZml4KQorICAgICAgICBlbGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgICAgIyBOb3QgcmVhbGx5IG5hbWVzcGFjZWQuCisgICAgICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2JqID0gdW5pY29kZS5fX25ld19fKGNscywgcHJlZml4ICsgIjoiICsgbmFtZSkKKyAgICAgICAgb2JqLnByZWZpeCA9IHByZWZpeAorICAgICAgICBvYmoubmFtZSA9IG5hbWUKKyAgICAgICAgb2JqLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gb2JqCisKK2NsYXNzIEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24odW5pY29kZSk6CisgICAgIiIiQSBzdGFuZC1pbiBvYmplY3QgZm9yIGEgY2hhcmFjdGVyIGVuY29kaW5nIHNwZWNpZmllZCBpbiBIVE1MLiIiIgorCitjbGFzcyBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlKEF0dHJpYnV0ZVZhbHVlV2l0aENoYXJzZXRTdWJzdGl0dXRpb24pOgorICAgICIiIkEgZ2VuZXJpYyBzdGFuZC1pbiBmb3IgdGhlIHZhbHVlIG9mIGEgbWV0YSB0YWcncyAnY2hhcnNldCcgYXR0cmlidXRlLgorCisgICAgV2hlbiBCZWF1dGlmdWwgU291cCBwYXJzZXMgdGhlIG1hcmt1cCAnPG1ldGEgY2hhcnNldD0idXRmOCI+JywgdGhlCisgICAgdmFsdWUgb2YgdGhlICdjaGFyc2V0JyBhdHRyaWJ1dGUgd2lsbCBiZSBvbmUgb2YgdGhlc2Ugb2JqZWN0cy4KKyAgICAiIiIKKworICAgIGRlZiBfX25ld19fKGNscywgb3JpZ2luYWxfdmFsdWUpOgorICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgb2JqLm9yaWdpbmFsX3ZhbHVlID0gb3JpZ2luYWxfdmFsdWUKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZyk6CisgICAgICAgIHJldHVybiBlbmNvZGluZworCisKK2NsYXNzIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUoQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbik6CisgICAgIiIiQSBnZW5lcmljIHN0YW5kLWluIGZvciB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZydzICdjb250ZW50JyBhdHRyaWJ1dGUuCisKKyAgICBXaGVuIEJlYXV0aWZ1bCBTb3VwIHBhcnNlcyB0aGUgbWFya3VwOgorICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGY4Ij4KKworICAgIFRoZSB2YWx1ZSBvZiB0aGUgJ2NvbnRlbnQnIGF0dHJpYnV0ZSB3aWxsIGJlIG9uZSBvZiB0aGVzZSBvYmplY3RzLgorICAgICIiIgorCisgICAgQ0hBUlNFVF9SRSA9IHJlLmNvbXBpbGUoIigoXnw7KVxzKmNoYXJzZXQ9KShbXjtdKikiLCByZS5NKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSk6CisgICAgICAgIG1hdGNoID0gY2xzLkNIQVJTRVRfUkUuc2VhcmNoKG9yaWdpbmFsX3ZhbHVlKQorICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgIyBObyBzdWJzdGl0dXRpb24gbmVjZXNzYXJ5LgorICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUuX19uZXdfXyh1bmljb2RlLCBvcmlnaW5hbF92YWx1ZSkKKworICAgICAgICBvYmogPSB1bmljb2RlLl9fbmV3X18oY2xzLCBvcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgb2JqLm9yaWdpbmFsX3ZhbHVlID0gb3JpZ2luYWxfdmFsdWUKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZyk6CisgICAgICAgIGRlZiByZXdyaXRlKG1hdGNoKToKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSArIGVuY29kaW5nCisgICAgICAgIHJldHVybiBzZWxmLkNIQVJTRVRfUkUuc3ViKHJld3JpdGUsIHNlbGYub3JpZ2luYWxfdmFsdWUpCisKK2NsYXNzIEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbihFbnRpdHlTdWJzdGl0dXRpb24pOgorCisgICAgIiIiRW50aXR5IHN1YnN0aXR1dGlvbiBydWxlcyB0aGF0IGFyZSBhd2FyZSBvZiBzb21lIEhUTUwgcXVpcmtzLgorCisgICAgU3BlY2lmaWNhbGx5LCB0aGUgY29udGVudHMgb2YgPHNjcmlwdD4gYW5kIDxzdHlsZT4gdGFncyBzaG91bGQgbm90CisgICAgdW5kZXJnbyBlbnRpdHkgc3Vic3RpdHV0aW9uLgorCisgICAgSW5jb21pbmcgTmF2aWdhYmxlU3RyaW5nIG9iamVjdHMgYXJlIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXkncmUgdGhlCisgICAgZGlyZWN0IGNoaWxkcmVuIG9mIGEgPHNjcmlwdD4gb3IgPHN0eWxlPiB0YWcuCisgICAgIiIiCisKKyAgICBjZGF0YV9jb250YWluaW5nX3RhZ3MgPSBzZXQoWyJzY3JpcHQiLCAic3R5bGUiXSkKKworICAgIHByZWZvcm1hdHRlZF90YWdzID0gc2V0KFsicHJlIl0pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3N1YnN0aXR1dGVfaWZfYXBwcm9wcmlhdGUoY2xzLCBucywgZik6CisgICAgICAgIGlmIChpc2luc3RhbmNlKG5zLCBOYXZpZ2FibGVTdHJpbmcpCisgICAgICAgICAgICBhbmQgbnMucGFyZW50IGlzIG5vdCBOb25lCisgICAgICAgICAgICBhbmQgbnMucGFyZW50Lm5hbWUgaW4gY2xzLmNkYXRhX2NvbnRhaW5pbmdfdGFncyk6CisgICAgICAgICAgICAjIERvIG5vdGhpbmcuCisgICAgICAgICAgICByZXR1cm4gbnMKKyAgICAgICAgIyBTdWJzdGl0dXRlLgorICAgICAgICByZXR1cm4gZihucykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX2h0bWwoY2xzLCBucyk6CisgICAgICAgIHJldHVybiBjbHMuX3N1YnN0aXR1dGVfaWZfYXBwcm9wcmlhdGUoCisgICAgICAgICAgICBucywgRW50aXR5U3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVfaHRtbCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJzdGl0dXRlX3htbChjbHMsIG5zKToKKyAgICAgICAgcmV0dXJuIGNscy5fc3Vic3RpdHV0ZV9pZl9hcHByb3ByaWF0ZSgKKyAgICAgICAgICAgIG5zLCBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwpCisKK2NsYXNzIFBhZ2VFbGVtZW50KG9iamVjdCk6CisgICAgIiIiQ29udGFpbnMgdGhlIG5hdmlnYXRpb25hbCBpbmZvcm1hdGlvbiBmb3Igc29tZSBwYXJ0IG9mIHRoZSBwYWdlCisgICAgKGVpdGhlciBhIHRhZyBvciBhIHBpZWNlIG9mIHRleHQpIiIiCisKKyAgICAjIFRoZXJlIGFyZSBmaXZlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlICJmb3JtYXR0ZXIiIGFyZ3VtZW50IHBhc3NlZCBpbgorICAgICMgdG8gbWV0aG9kcyBsaWtlIGVuY29kZSgpIGFuZCBwcmV0dGlmeSgpOgorICAgICMKKyAgICAjICJodG1sIiAtIEFsbCBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMKKyAgICAjICAgYXJlIGNvbnZlcnRlZCB0byB0aG9zZSBlbnRpdGllcyBvbiBvdXRwdXQuCisgICAgIyAibWluaW1hbCIgLSBCYXJlIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIGFyZSBjb252ZXJ0ZWQgdG8KKyAgICAjICAgWE1MIGVudGl0aWVzOiAmYW1wOyAmbHQ7ICZndDsKKyAgICAjIE5vbmUgLSBUaGUgbnVsbCBmb3JtYXR0ZXIuIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgbmV2ZXIKKyAgICAjICAgY29udmVydGVkIHRvIGVudGl0aWVzLiAgVGhpcyBpcyBub3QgcmVjb21tZW5kZWQsIGJ1dCBpdCdzCisgICAgIyAgIGZhc3RlciB0aGFuICJtaW5pbWFsIi4KKyAgICAjIEEgZnVuY3Rpb24gLSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHN0cmluZyB0aGF0CisgICAgIyAgbmVlZHMgdG8gdW5kZXJnbyBlbnRpdHkgc3Vic3RpdHV0aW9uLgorICAgICMKKworICAgICMgSW4gYW4gSFRNTCBkb2N1bWVudCwgdGhlIGRlZmF1bHQgImh0bWwiIGFuZCAibWluaW1hbCIgZnVuY3Rpb25zCisgICAgIyB3aWxsIGxlYXZlIHRoZSBjb250ZW50cyBvZiA8c2NyaXB0PiBhbmQgPHN0eWxlPiB0YWdzIGFsb25lLiBGb3IKKyAgICAjIGFuIFhNTCBkb2N1bWVudCwgYWxsIHRhZ3Mgd2lsbCBiZSBnaXZlbiB0aGUgc2FtZSB0cmVhdG1lbnQuCisKKyAgICBIVE1MX0ZPUk1BVFRFUlMgPSB7CisgICAgICAgICJodG1sIiA6IEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX2h0bWwsCisgICAgICAgICJtaW5pbWFsIiA6IEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCwKKyAgICAgICAgTm9uZSA6IE5vbmUKKyAgICAgICAgfQorCisgICAgWE1MX0ZPUk1BVFRFUlMgPSB7CisgICAgICAgICJodG1sIiA6IEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX2h0bWwsCisgICAgICAgICJtaW5pbWFsIiA6IEVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCwKKyAgICAgICAgTm9uZSA6IE5vbmUKKyAgICAgICAgfQorCisgICAgZGVmIGZvcm1hdF9zdHJpbmcoc2VsZiwgcywgZm9ybWF0dGVyPSdtaW5pbWFsJyk6CisgICAgICAgICIiIkZvcm1hdCB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBnaXZlbiBmb3JtYXR0ZXIuIiIiCisgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmb3JtYXR0ZXIpOgorICAgICAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZm9ybWF0dGVyX2Zvcl9uYW1lKGZvcm1hdHRlcikKKyAgICAgICAgaWYgZm9ybWF0dGVyIGlzIE5vbmU6CisgICAgICAgICAgICBvdXRwdXQgPSBzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXR0ZXIocykKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9pc194bWwoc2VsZik6CisgICAgICAgICIiIklzIHRoaXMgZWxlbWVudCBwYXJ0IG9mIGFuIFhNTCB0cmVlIG9yIGFuIEhUTUwgdHJlZT8KKworICAgICAgICBUaGlzIGlzIHVzZWQgd2hlbiBtYXBwaW5nIGEgZm9ybWF0dGVyIG5hbWUgKCJtaW5pbWFsIikgdG8gYW4KKyAgICAgICAgYXBwcm9wcmlhdGUgZnVuY3Rpb24gKG9uZSB0aGF0IHBlcmZvcm1zIGVudGl0eS1zdWJzdGl0dXRpb24gb24KKyAgICAgICAgdGhlIGNvbnRlbnRzIG9mIDxzY3JpcHQ+IGFuZCA8c3R5bGU+IHRhZ3MsIG9yIG5vdCkuIEl0J3MKKyAgICAgICAgaW5lZmZpY2llbnQsIGJ1dCBpdCBzaG91bGQgYmUgY2FsbGVkIHZlcnkgcmFyZWx5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgdG9wLWxldmVsIG9iamVjdC4gSXQgc2hvdWxkIGhhdmUgLmlzX3htbCBzZXQKKyAgICAgICAgICAgICMgZnJvbSB0cmVlIGNyZWF0aW9uLiBJZiBub3QsIHRha2UgYSBndWVzcy0tQlMgaXMgdXN1YWxseQorICAgICAgICAgICAgIyB1c2VkIG9uIEhUTUwgbWFya3VwLgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgJ2lzX3htbCcsIEZhbHNlKQorICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQuX2lzX3htbAorCisgICAgZGVmIF9mb3JtYXR0ZXJfZm9yX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICJMb29rIHVwIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIGJhc2VkIG9uIGl0cyBuYW1lIGFuZCB0aGUgdHJlZS4iCisgICAgICAgIGlmIHNlbGYuX2lzX3htbDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLlhNTF9GT1JNQVRURVJTLmdldCgKKyAgICAgICAgICAgICAgICBuYW1lLCBFbnRpdHlTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZV94bWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5IVE1MX0ZPUk1BVFRFUlMuZ2V0KAorICAgICAgICAgICAgICAgIG5hbWUsIEhUTUxBd2FyZUVudGl0eVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlX3htbCkKKworICAgIGRlZiBzZXR1cChzZWxmLCBwYXJlbnQ9Tm9uZSwgcHJldmlvdXNfZWxlbWVudD1Ob25lKToKKyAgICAgICAgIiIiU2V0cyB1cCB0aGUgaW5pdGlhbCByZWxhdGlvbnMgYmV0d2VlbiB0aGlzIGVsZW1lbnQgYW5kCisgICAgICAgIG90aGVyIGVsZW1lbnRzLiIiIgorICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQgPSBwcmV2aW91c19lbGVtZW50CisgICAgICAgIGlmIHByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50ID0gc2VsZgorICAgICAgICBzZWxmLm5leHRfZWxlbWVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gTm9uZQorICAgICAgICBzZWxmLm5leHRfc2libGluZyA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmUgYW5kIHNlbGYucGFyZW50LmNvbnRlbnRzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nID0gc2VsZi5wYXJlbnQuY29udGVudHNbLTFdCisgICAgICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcubmV4dF9zaWJsaW5nID0gc2VsZgorCisgICAgbmV4dFNpYmxpbmcgPSBfYWxpYXMoIm5leHRfc2libGluZyIpICAjIEJTMworICAgIHByZXZpb3VzU2libGluZyA9IF9hbGlhcygicHJldmlvdXNfc2libGluZyIpICAjIEJTMworCisgICAgZGVmIHJlcGxhY2Vfd2l0aChzZWxmLCByZXBsYWNlX3dpdGgpOgorICAgICAgICBpZiByZXBsYWNlX3dpdGggaXMgc2VsZjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiByZXBsYWNlX3dpdGggaXMgc2VsZi5wYXJlbnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgcmVwbGFjZSBhIFRhZyB3aXRoIGl0cyBwYXJlbnQuIikKKyAgICAgICAgb2xkX3BhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIG15X2luZGV4ID0gc2VsZi5wYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgb2xkX3BhcmVudC5pbnNlcnQobXlfaW5kZXgsIHJlcGxhY2Vfd2l0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICByZXBsYWNlV2l0aCA9IHJlcGxhY2Vfd2l0aCAgIyBCUzMKKworICAgIGRlZiB1bndyYXAoc2VsZik6CisgICAgICAgIG15X3BhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIG15X2luZGV4ID0gc2VsZi5wYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgZm9yIGNoaWxkIGluIHJldmVyc2VkKHNlbGYuY29udGVudHNbOl0pOgorICAgICAgICAgICAgbXlfcGFyZW50Lmluc2VydChteV9pbmRleCwgY2hpbGQpCisgICAgICAgIHJldHVybiBzZWxmCisgICAgcmVwbGFjZV93aXRoX2NoaWxkcmVuID0gdW53cmFwCisgICAgcmVwbGFjZVdpdGhDaGlsZHJlbiA9IHVud3JhcCAgIyBCUzMKKworICAgIGRlZiB3cmFwKHNlbGYsIHdyYXBfaW5zaWRlKToKKyAgICAgICAgbWUgPSBzZWxmLnJlcGxhY2Vfd2l0aCh3cmFwX2luc2lkZSkKKyAgICAgICAgd3JhcF9pbnNpZGUuYXBwZW5kKG1lKQorICAgICAgICByZXR1cm4gd3JhcF9pbnNpZGUKKworICAgIGRlZiBleHRyYWN0KHNlbGYpOgorICAgICAgICAiIiJEZXN0cnVjdGl2ZWx5IHJpcHMgdGhpcyBlbGVtZW50IG91dCBvZiB0aGUgdHJlZS4iIiIKKyAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgc2VsZi5wYXJlbnQuY29udGVudHNbc2VsZi5wYXJlbnQuaW5kZXgoc2VsZildCisKKyAgICAgICAgI0ZpbmQgdGhlIHR3byBlbGVtZW50cyB0aGF0IHdvdWxkIGJlIG5leHQgdG8gZWFjaCBvdGhlciBpZgorICAgICAgICAjdGhpcyBlbGVtZW50IChhbmQgYW55IGNoaWxkcmVuKSBoYWRuJ3QgYmVlbiBwYXJzZWQuIENvbm5lY3QKKyAgICAgICAgI3RoZSB0d28uCisgICAgICAgIGxhc3RfY2hpbGQgPSBzZWxmLl9sYXN0X2Rlc2NlbmRhbnQoKQorICAgICAgICBuZXh0X2VsZW1lbnQgPSBsYXN0X2NoaWxkLm5leHRfZWxlbWVudAorCisgICAgICAgIGlmIHNlbGYucHJldmlvdXNfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBuZXh0X2VsZW1lbnQKKyAgICAgICAgaWYgbmV4dF9lbGVtZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV4dF9lbGVtZW50LnByZXZpb3VzX2VsZW1lbnQgPSBzZWxmLnByZXZpb3VzX2VsZW1lbnQKKyAgICAgICAgc2VsZi5wcmV2aW91c19lbGVtZW50ID0gTm9uZQorICAgICAgICBsYXN0X2NoaWxkLm5leHRfZWxlbWVudCA9IE5vbmUKKworICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5wcmV2aW91c19zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5nLm5leHRfc2libGluZyA9IHNlbGYubmV4dF9zaWJsaW5nCisgICAgICAgIGlmIHNlbGYubmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5uZXh0X3NpYmxpbmcucHJldmlvdXNfc2libGluZyA9IHNlbGYucHJldmlvdXNfc2libGluZworICAgICAgICBzZWxmLnByZXZpb3VzX3NpYmxpbmcgPSBzZWxmLm5leHRfc2libGluZyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfbGFzdF9kZXNjZW5kYW50KHNlbGYsIGlzX2luaXRpYWxpemVkPVRydWUsIGFjY2VwdF9zZWxmPVRydWUpOgorICAgICAgICAiRmluZHMgdGhlIGxhc3QgZWxlbWVudCBiZW5lYXRoIHRoaXMgb2JqZWN0IHRvIGJlIHBhcnNlZC4iCisgICAgICAgIGlmIGlzX2luaXRpYWxpemVkIGFuZCBzZWxmLm5leHRfc2libGluZzoKKyAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBzZWxmLm5leHRfc2libGluZy5wcmV2aW91c19lbGVtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsYXN0X2NoaWxkID0gc2VsZgorICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShsYXN0X2NoaWxkLCBUYWcpIGFuZCBsYXN0X2NoaWxkLmNvbnRlbnRzOgorICAgICAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBsYXN0X2NoaWxkLmNvbnRlbnRzWy0xXQorICAgICAgICBpZiBub3QgYWNjZXB0X3NlbGYgYW5kIGxhc3RfY2hpbGQgPT0gc2VsZjoKKyAgICAgICAgICAgIGxhc3RfY2hpbGQgPSBOb25lCisgICAgICAgIHJldHVybiBsYXN0X2NoaWxkCisgICAgIyBCUzM6IE5vdCBwYXJ0IG9mIHRoZSBBUEkhCisgICAgX2xhc3RSZWN1cnNpdmVDaGlsZCA9IF9sYXN0X2Rlc2NlbmRhbnQKKworICAgIGRlZiBpbnNlcnQoc2VsZiwgcG9zaXRpb24sIG5ld19jaGlsZCk6CisgICAgICAgIGlmIG5ld19jaGlsZCBpcyBzZWxmOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGluc2VydCBhIHRhZyBpbnRvIGl0c2VsZi4iKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShuZXdfY2hpbGQsIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBhbmQgbm90IGlzaW5zdGFuY2UobmV3X2NoaWxkLCBOYXZpZ2FibGVTdHJpbmcpKToKKyAgICAgICAgICAgIG5ld19jaGlsZCA9IE5hdmlnYWJsZVN0cmluZyhuZXdfY2hpbGQpCisKKyAgICAgICAgcG9zaXRpb24gPSBtaW4ocG9zaXRpb24sIGxlbihzZWxmLmNvbnRlbnRzKSkKKyAgICAgICAgaWYgaGFzYXR0cihuZXdfY2hpbGQsICdwYXJlbnQnKSBhbmQgbmV3X2NoaWxkLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UncmUgJ2luc2VydGluZycgYW4gZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBvbmUKKyAgICAgICAgICAgICMgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgICAgIGlmIG5ld19jaGlsZC5wYXJlbnQgaXMgc2VsZjoKKyAgICAgICAgICAgICAgICBjdXJyZW50X2luZGV4ID0gc2VsZi5pbmRleChuZXdfY2hpbGQpCisgICAgICAgICAgICAgICAgaWYgY3VycmVudF9pbmRleCA8IHBvc2l0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIG1vdmluZyB0aGlzIGVsZW1lbnQgZnVydGhlciBkb3duIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICMgb2YgdGhpcyBvYmplY3QncyBjaGlsZHJlbi4gVGhhdCBtZWFucyB0aGF0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBleHRyYWN0IHRoaXMgZWxlbWVudCwgb3VyIHRhcmdldCBpbmRleCB3aWxsCisgICAgICAgICAgICAgICAgICAgICMganVtcCBkb3duIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gLT0gMQorICAgICAgICAgICAgbmV3X2NoaWxkLmV4dHJhY3QoKQorCisgICAgICAgIG5ld19jaGlsZC5wYXJlbnQgPSBzZWxmCisgICAgICAgIHByZXZpb3VzX2NoaWxkID0gTm9uZQorICAgICAgICBpZiBwb3NpdGlvbiA9PSAwOgorICAgICAgICAgICAgbmV3X2NoaWxkLnByZXZpb3VzX3NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfZWxlbWVudCA9IHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZXZpb3VzX2NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbiAtIDFdCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfc2libGluZyA9IHByZXZpb3VzX2NoaWxkCisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfc2libGluZy5uZXh0X3NpYmxpbmcgPSBuZXdfY2hpbGQKKyAgICAgICAgICAgIG5ld19jaGlsZC5wcmV2aW91c19lbGVtZW50ID0gcHJldmlvdXNfY2hpbGQuX2xhc3RfZGVzY2VuZGFudChGYWxzZSkKKyAgICAgICAgaWYgbmV3X2NoaWxkLnByZXZpb3VzX2VsZW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBuZXdfY2hpbGQucHJldmlvdXNfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBuZXdfY2hpbGQKKworICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudCA9IG5ld19jaGlsZC5fbGFzdF9kZXNjZW5kYW50KEZhbHNlKQorCisgICAgICAgIGlmIHBvc2l0aW9uID49IGxlbihzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcgPSBOb25lCisKKyAgICAgICAgICAgIHBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgIHBhcmVudHNfbmV4dF9zaWJsaW5nID0gTm9uZQorICAgICAgICAgICAgd2hpbGUgcGFyZW50c19uZXh0X3NpYmxpbmcgaXMgTm9uZSBhbmQgcGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBhcmVudHNfbmV4dF9zaWJsaW5nID0gcGFyZW50Lm5leHRfc2libGluZworICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQKKyAgICAgICAgICAgICAgICBpZiBwYXJlbnRzX25leHRfc2libGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCB0aGUgZWxlbWVudCB0aGF0IGNvbWVzIG5leHQgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcGFyZW50c19uZXh0X3NpYmxpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gcGFyZW50c19uZXh0X3NpYmxpbmcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaGUgbGFzdCBlbGVtZW50IG9mIHRoaXMgdGFnIGlzIHRoZSBsYXN0IGVsZW1lbnQgaW4KKyAgICAgICAgICAgICAgICAjIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgICAgICBuZXdfY2hpbGRzX2xhc3RfZWxlbWVudC5uZXh0X2VsZW1lbnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXh0X2NoaWxkID0gc2VsZi5jb250ZW50c1twb3NpdGlvbl0KKyAgICAgICAgICAgIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcgPSBuZXh0X2NoaWxkCisgICAgICAgICAgICBpZiBuZXdfY2hpbGQubmV4dF9zaWJsaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5ld19jaGlsZC5uZXh0X3NpYmxpbmcucHJldmlvdXNfc2libGluZyA9IG5ld19jaGlsZAorICAgICAgICAgICAgbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQubmV4dF9lbGVtZW50ID0gbmV4dF9jaGlsZAorCisgICAgICAgIGlmIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5ld19jaGlsZHNfbGFzdF9lbGVtZW50Lm5leHRfZWxlbWVudC5wcmV2aW91c19lbGVtZW50ID0gbmV3X2NoaWxkc19sYXN0X2VsZW1lbnQKKyAgICAgICAgc2VsZi5jb250ZW50cy5pbnNlcnQocG9zaXRpb24sIG5ld19jaGlsZCkKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdGFnKToKKyAgICAgICAgIiIiQXBwZW5kcyB0aGUgZ2l2ZW4gdGFnIHRvIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZy4iIiIKKyAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYuY29udGVudHMpLCB0YWcpCisKKyAgICBkZWYgaW5zZXJ0X2JlZm9yZShzZWxmLCBwcmVkZWNlc3Nvcik6CisgICAgICAgICIiIk1ha2VzIHRoZSBnaXZlbiBlbGVtZW50IHRoZSBpbW1lZGlhdGUgcHJlZGVjZXNzb3Igb2YgdGhpcyBvbmUuCisKKyAgICAgICAgVGhlIHR3byBlbGVtZW50cyB3aWxsIGhhdmUgdGhlIHNhbWUgcGFyZW50LCBhbmQgdGhlIGdpdmVuIGVsZW1lbnQKKyAgICAgICAgd2lsbCBiZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmIGlzIHByZWRlY2Vzc29yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2FuJ3QgaW5zZXJ0IGFuIGVsZW1lbnQgYmVmb3JlIGl0c2VsZi4iKQorICAgICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBpZiBwYXJlbnQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIkVsZW1lbnQgaGFzIG5vIHBhcmVudCwgc28gJ2JlZm9yZScgaGFzIG5vIG1lYW5pbmcuIikKKyAgICAgICAgIyBFeHRyYWN0IGZpcnN0IHNvIHRoYXQgdGhlIGluZGV4IHdvbid0IGJlIHNjcmV3ZWQgdXAgaWYgdGhleQorICAgICAgICAjIGFyZSBzaWJsaW5ncy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShwcmVkZWNlc3NvciwgUGFnZUVsZW1lbnQpOgorICAgICAgICAgICAgcHJlZGVjZXNzb3IuZXh0cmFjdCgpCisgICAgICAgIGluZGV4ID0gcGFyZW50LmluZGV4KHNlbGYpCisgICAgICAgIHBhcmVudC5pbnNlcnQoaW5kZXgsIHByZWRlY2Vzc29yKQorCisgICAgZGVmIGluc2VydF9hZnRlcihzZWxmLCBzdWNjZXNzb3IpOgorICAgICAgICAiIiJNYWtlcyB0aGUgZ2l2ZW4gZWxlbWVudCB0aGUgaW1tZWRpYXRlIHN1Y2Nlc3NvciBvZiB0aGlzIG9uZS4KKworICAgICAgICBUaGUgdHdvIGVsZW1lbnRzIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXJlbnQsIGFuZCB0aGUgZ2l2ZW4gZWxlbWVudAorICAgICAgICB3aWxsIGJlIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZiBpcyBzdWNjZXNzb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBpbnNlcnQgYW4gZWxlbWVudCBhZnRlciBpdHNlbGYuIikKKyAgICAgICAgcGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJFbGVtZW50IGhhcyBubyBwYXJlbnQsIHNvICdhZnRlcicgaGFzIG5vIG1lYW5pbmcuIikKKyAgICAgICAgIyBFeHRyYWN0IGZpcnN0IHNvIHRoYXQgdGhlIGluZGV4IHdvbid0IGJlIHNjcmV3ZWQgdXAgaWYgdGhleQorICAgICAgICAjIGFyZSBzaWJsaW5ncy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdWNjZXNzb3IsIFBhZ2VFbGVtZW50KToKKyAgICAgICAgICAgIHN1Y2Nlc3Nvci5leHRyYWN0KCkKKyAgICAgICAgaW5kZXggPSBwYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgcGFyZW50Lmluc2VydChpbmRleCsxLCBzdWNjZXNzb3IpCisKKyAgICBkZWYgZmluZF9uZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAgIGFwcGVhcnMgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9vbmUoc2VsZi5maW5kX2FsbF9uZXh0LCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCisgICAgZmluZE5leHQgPSBmaW5kX25leHQgICMgQlMzCisKKyAgICBkZWYgZmluZF9hbGxfbmV4dChzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcgorICAgICAgICBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIHNlbGYubmV4dF9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgZmluZEFsbE5leHQgPSBmaW5kX2FsbF9uZXh0ICAjIEJTMworCisgICAgZGVmIGZpbmRfbmV4dF9zaWJsaW5nKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZQorICAgICAgICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX29uZShzZWxmLmZpbmRfbmV4dF9zaWJsaW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmROZXh0U2libGluZyA9IGZpbmRfbmV4dF9zaWJsaW5nICAjIEJTMworCisgICAgZGVmIGZpbmRfbmV4dF9zaWJsaW5ncyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNpYmxpbmdzIG9mIHRoaXMgVGFnIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhIGFuZCBhcHBlYXIgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0X3NpYmxpbmdzLCAqKmt3YXJncykKKyAgICBmaW5kTmV4dFNpYmxpbmdzID0gZmluZF9uZXh0X3NpYmxpbmdzICAgIyBCUzMKKyAgICBmZXRjaE5leHRTaWJsaW5ncyA9IGZpbmRfbmV4dF9zaWJsaW5ncyAgIyBCUzIKKworICAgIGRlZiBmaW5kX3ByZXZpb3VzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAgIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfb25lKAorICAgICAgICAgICAgc2VsZi5maW5kX2FsbF9wcmV2aW91cywgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKQorICAgIGZpbmRQcmV2aW91cyA9IGZpbmRfcHJldmlvdXMgICMgQlMzCisKKyAgICBkZWYgZmluZF9hbGxfcHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIGFsbCBpdGVtcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFyCisgICAgICAgIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX2FsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIHNlbGYucHJldmlvdXNfZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kQWxsUHJldmlvdXMgPSBmaW5kX2FsbF9wcmV2aW91cyAgIyBCUzMKKyAgICBmZXRjaFByZXZpb3VzID0gZmluZF9hbGxfcHJldmlvdXMgICAgIyBCUzIKKworICAgIGRlZiBmaW5kX3ByZXZpb3VzX3NpYmxpbmcoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGNsb3Nlc3Qgc2libGluZyB0byB0aGlzIFRhZyB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXJzIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kX29uZShzZWxmLmZpbmRfcHJldmlvdXNfc2libGluZ3MsIG5hbWUsIGF0dHJzLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBmaW5kUHJldmlvdXNTaWJsaW5nID0gZmluZF9wcmV2aW91c19zaWJsaW5nICAjIEJTMworCisgICAgZGVmIGZpbmRfcHJldmlvdXNfc2libGluZ3Moc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2libGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEgYW5kIGFwcGVhciBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c19zaWJsaW5ncywgKiprd2FyZ3MpCisgICAgZmluZFByZXZpb3VzU2libGluZ3MgPSBmaW5kX3ByZXZpb3VzX3NpYmxpbmdzICAgIyBCUzMKKyAgICBmZXRjaFByZXZpb3VzU2libGluZ3MgPSBmaW5kX3ByZXZpb3VzX3NpYmxpbmdzICAjIEJTMgorCisgICAgZGVmIGZpbmRfcGFyZW50KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBwYXJlbnQgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4iIiIKKyAgICAgICAgIyBOT1RFOiBXZSBjYW4ndCB1c2UgX2ZpbmRfb25lIGJlY2F1c2UgZmluZFBhcmVudHMgdGFrZXMgYSBkaWZmZXJlbnQKKyAgICAgICAgIyBzZXQgb2YgYXJndW1lbnRzLgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kX3BhcmVudHMobmFtZSwgYXR0cnMsIDEsICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAgcmV0dXJuIHIKKyAgICBmaW5kUGFyZW50ID0gZmluZF9wYXJlbnQgICMgQlMzCisKKyAgICBkZWYgZmluZF9wYXJlbnRzKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgcGFyZW50cyBvZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4iIiIKKworICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIE5vbmUsIGxpbWl0LCBzZWxmLnBhcmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIGZpbmRQYXJlbnRzID0gZmluZF9wYXJlbnRzICAgIyBCUzMKKyAgICBmZXRjaFBhcmVudHMgPSBmaW5kX3BhcmVudHMgICMgQlMyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9lbGVtZW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJldmlvdXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnByZXZpb3VzX2VsZW1lbnQKKworICAgICNUaGVzZSBtZXRob2RzIGRvIHRoZSByZWFsIGhlYXZ5IGxpZnRpbmcuCisKKyAgICBkZWYgX2ZpbmRfb25lKHNlbGYsIG1ldGhvZCwgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dhcmdzKToKKyAgICAgICAgciA9IE5vbmUKKyAgICAgICAgbCA9IG1ldGhvZChuYW1lLCBhdHRycywgdGV4dCwgMSwgKiprd2FyZ3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIF9maW5kX2FsbChzZWxmLCBuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIGdlbmVyYXRvciwgKiprd2FyZ3MpOgorICAgICAgICAiSXRlcmF0ZXMgb3ZlciBhIGdlbmVyYXRvciBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtYXRjaC4iCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCBTb3VwU3RyYWluZXIpOgorICAgICAgICAgICAgc3RyYWluZXIgPSBuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcihuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCisKKyAgICAgICAgaWYgdGV4dCBpcyBOb25lIGFuZCBub3QgbGltaXQgYW5kIG5vdCBhdHRycyBhbmQgbm90IGt3YXJnczoKKyAgICAgICAgICAgIGlmIG5hbWUgaXMgVHJ1ZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBPcHRpbWl6YXRpb24gdG8gZmluZCBhbGwgdGFncy4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAoZWxlbWVudCBmb3IgZWxlbWVudCBpbiBnZW5lcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBUYWcpKQorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRTZXQoc3RyYWluZXIsIHJlc3VsdCkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICAjIE9wdGltaXphdGlvbiB0byBmaW5kIGFsbCB0YWdzIHdpdGggYSBnaXZlbiBuYW1lLgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IChlbGVtZW50IGZvciBlbGVtZW50IGluIGdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIFRhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZWxlbWVudC5uYW1lID09IG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3VsdFNldChzdHJhaW5lciwgcmVzdWx0KQorICAgICAgICByZXN1bHRzID0gUmVzdWx0U2V0KHN0cmFpbmVyKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBuZXh0KGdlbmVyYXRvcikKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gc3RyYWluZXIuc2VhcmNoKGkpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGZvdW5kKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCBhbmQgbGVuKHJlc3VsdHMpID49IGxpbWl0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgICNUaGVzZSBnZW5lcmF0b3JzIGNhbiBiZSB1c2VkIHRvIG5hdmlnYXRlIHN0YXJ0aW5nIGZyb20gYm90aAorICAgICNOYXZpZ2FibGVTdHJpbmdzIGFuZCBUYWdzLgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXh0X2VsZW1lbnRzKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5uZXh0X2VsZW1lbnQKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLm5leHRfZWxlbWVudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5leHRfc2libGluZ3Moc2VsZik6CisgICAgICAgIGkgPSBzZWxmLm5leHRfc2libGluZworICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkubmV4dF9zaWJsaW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJldmlvdXNfZWxlbWVudHMoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnByZXZpb3VzX2VsZW1lbnQKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzX2VsZW1lbnQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcmV2aW91c19zaWJsaW5ncyhzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucHJldmlvdXNfc2libGluZworICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkucHJldmlvdXNfc2libGluZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudHMoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnBhcmVudAorICAgICAgICB3aGlsZSBpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgaSA9IGkucGFyZW50CisKKyAgICAjIE1ldGhvZHMgZm9yIHN1cHBvcnRpbmcgQ1NTIHNlbGVjdG9ycy4KKworICAgIHRhZ19uYW1lX3JlID0gcmUuY29tcGlsZSgnXlthLXowLTldKyQnKQorCisgICAgIyAvXihcdyspXFsoXHcrKShbPX5cfFxeXCRcKl0/KT0/Ij8oW15cXSJdKikiP1xdJC8KKyAgICAjICAgXC0tLS8gIFwtLS0vXC0tLS0tLS0tLS0tLS0vICAgIFwtLS0tLS0tLworICAgICMgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAjICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIFRoZSB2YWx1ZQorICAgICMgICAgIHwgICAgICB8ICAgIH4sfCxeLCQsKiBvciA9CisgICAgIyAgICAgfCAgIEF0dHJpYnV0ZQorICAgICMgICAgVGFnCisgICAgYXR0cmlic2VsZWN0X3JlID0gcmUuY29tcGlsZSgKKyAgICAgICAgcideKD9QPHRhZz5cdyspP1xbKD9QPGF0dHJpYnV0ZT5cdyspKD9QPG9wZXJhdG9yPls9flx8XF5cJFwqXT8pJyArCisgICAgICAgIHInPT8iPyg/UDx2YWx1ZT5bXlxdIl0qKSI/XF0kJworICAgICAgICApCisKKyAgICBkZWYgX2F0dHJfdmFsdWVfYXNfc3RyaW5nKHNlbGYsIHZhbHVlLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJGb3JjZSBhbiBhdHRyaWJ1dGUgdmFsdWUgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKworICAgICAgICBBIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGUgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhCisgICAgICAgIHNwYWNlLXNlcGFyYXRlZCBzdGlybmcuCisgICAgICAgICIiIgorICAgICAgICB2YWx1ZSA9IHNlbGYuZ2V0KHZhbHVlLCBkZWZhdWx0KQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KSBvciBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSk6CisgICAgICAgICAgICB2YWx1ZSA9IiAiLmpvaW4odmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF90YWdfbmFtZV9tYXRjaGVzX2FuZChzZWxmLCBmdW5jdGlvbiwgdGFnX25hbWUpOgorICAgICAgICBpZiBub3QgdGFnX25hbWU6CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBfbWF0Y2godGFnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFnLm5hbWUgPT0gdGFnX25hbWUgYW5kIGZ1bmN0aW9uKHRhZykKKyAgICAgICAgICAgIHJldHVybiBfbWF0Y2gKKworICAgIGRlZiBfYXR0cmlidXRlX2NoZWNrZXIoc2VsZiwgb3BlcmF0b3IsIGF0dHJpYnV0ZSwgdmFsdWU9JycpOgorICAgICAgICAiIiJDcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgQ1NTIHNlbGVjdG9yIG9wZXJhdGlvbi4KKworICAgICAgICBUYWtlcyBhbiBvcGVyYXRvciwgYXR0cmlidXRlIGFuZCBvcHRpb25hbCB2YWx1ZS4gUmV0dXJucyBhCisgICAgICAgIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gVHJ1ZSBmb3IgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGF0CisgICAgICAgIGNvbWJpbmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgb3BlcmF0b3IgPT0gJz0nOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgaXMgZXF1YWwgdG8gYHZhbHVlYAorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogZWwuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKGF0dHJpYnV0ZSkgPT0gdmFsdWUKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnfic6CisgICAgICAgICAgICAjIHNwYWNlLXNlcGFyYXRlZCBsaXN0IHJlcHJlc2VudGF0aW9uIG9mIGBhdHRyaWJ1dGVgCisgICAgICAgICAgICAjIGNvbnRhaW5zIGB2YWx1ZWAKKyAgICAgICAgICAgIGRlZiBfaW5jbHVkZXNfdmFsdWUoZWxlbWVudCk6CisgICAgICAgICAgICAgICAgYXR0cmlidXRlX3ZhbHVlID0gZWxlbWVudC5nZXQoYXR0cmlidXRlLCBbXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyaWJ1dGVfdmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVfdmFsdWUgPSBhdHRyaWJ1dGVfdmFsdWUuc3BsaXQoKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBhdHRyaWJ1dGVfdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBfaW5jbHVkZXNfdmFsdWUKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnXic6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBgYXR0cmlidXRlYCBzdGFydHMgd2l0aCBgdmFsdWVgCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoCisgICAgICAgICAgICAgICAgYXR0cmlidXRlLCAnJykuc3RhcnRzd2l0aCh2YWx1ZSkKKyAgICAgICAgZWxpZiBvcGVyYXRvciA9PSAnJCc6CisgICAgICAgICAgICAjIHN0cmluZyByZXByZXNlbmF0aW9uIG9mIGBhdHRyaWJ1dGVgIGVuZHMgd2l0aCBgdmFsdWVgCisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5fYXR0cl92YWx1ZV9hc19zdHJpbmcoCisgICAgICAgICAgICAgICAgYXR0cmlidXRlLCAnJykuZW5kc3dpdGgodmFsdWUpCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJyonOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgY29udGFpbnMgYHZhbHVlYAorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBlbDogdmFsdWUgaW4gZWwuX2F0dHJfdmFsdWVfYXNfc3RyaW5nKGF0dHJpYnV0ZSwgJycpCisgICAgICAgIGVsaWYgb3BlcmF0b3IgPT0gJ3wnOgorICAgICAgICAgICAgIyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYGF0dHJpYnV0ZWAgaXMgZWl0aGVyIGV4YWN0bHkKKyAgICAgICAgICAgICMgYHZhbHVlYCBvciBzdGFydHMgd2l0aCBgdmFsdWVgIGFuZCB0aGVuIGEgZGFzaC4KKyAgICAgICAgICAgIGRlZiBfaXNfb3Jfc3RhcnRzX3dpdGhfZGFzaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVfdmFsdWUgPSBlbGVtZW50Ll9hdHRyX3ZhbHVlX2FzX3N0cmluZyhhdHRyaWJ1dGUsICcnKQorICAgICAgICAgICAgICAgIHJldHVybiAoYXR0cmlidXRlX3ZhbHVlID09IHZhbHVlIG9yIGF0dHJpYnV0ZV92YWx1ZS5zdGFydHN3aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLScpKQorICAgICAgICAgICAgcmV0dXJuIF9pc19vcl9zdGFydHNfd2l0aF9kYXNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGVsOiBlbC5oYXNfYXR0cihhdHRyaWJ1dGUpCisKKyAgICAjIE9sZCBub24tcHJvcGVydHkgdmVyc2lvbnMgb2YgdGhlIGdlbmVyYXRvcnMsIGZvciBiYWNrd2FyZHMKKyAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCBCUzMuCisgICAgZGVmIG5leHRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5leHRfZWxlbWVudHMKKworICAgIGRlZiBuZXh0U2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dF9zaWJsaW5ncworCisgICAgZGVmIHByZXZpb3VzR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcmV2aW91c19lbGVtZW50cworCisgICAgZGVmIHByZXZpb3VzU2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucHJldmlvdXNfc2libGluZ3MKKworICAgIGRlZiBwYXJlbnRHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcmVudHMKKworCitjbGFzcyBOYXZpZ2FibGVTdHJpbmcodW5pY29kZSwgUGFnZUVsZW1lbnQpOgorCisgICAgUFJFRklYID0gJycKKyAgICBTVUZGSVggPSAnJworCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOYXZpZ2FibGVTdHJpbmcuCisKKyAgICAgICAgV2hlbiB1bnBpY2tsaW5nIGEgTmF2aWdhYmxlU3RyaW5nLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgc3RyaW5nIGluIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLiBUaGF0IGVuY29kaW5nIG5lZWRzIHRvIGJlCisgICAgICAgIHBhc3NlZCBpbiB0byB0aGUgc3VwZXJjbGFzcydzIF9fbmV3X18gb3IgdGhlIHN1cGVyY2xhc3Mgd29uJ3Qga25vdworICAgICAgICBob3cgdG8gaGFuZGxlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSk6CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpCisKKyAgICBkZWYgX19jb3B5X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAodW5pY29kZShzZWxmKSwpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICIiInRleHQuc3RyaW5nIGdpdmVzIHlvdSB0ZXh0LiBUaGlzIGlzIGZvciBiYWNrd2FyZHMKKyAgICAgICAgY29tcGF0aWJpbGl0eSBmb3IgTmF2aWdhYmxlKlN0cmluZywgYnV0IGZvciBDRGF0YSogaXQgbGV0cyB5b3UKKyAgICAgICAgZ2V0IHRoZSBzdHJpbmcgd2l0aG91dCB0aGUgQ0RhdGEgd3JhcHBlci4iIiIKKyAgICAgICAgaWYgYXR0ciA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlICgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGF0dHIpKQorCisgICAgZGVmIG91dHB1dF9yZWFkeShzZWxmLCBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5mb3JtYXRfc3RyaW5nKHNlbGYsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuUFJFRklYICsgb3V0cHV0ICsgc2VsZi5TVUZGSVgKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQG5hbWUuc2V0dGVyCisgICAgZGVmIG5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJBIE5hdmlnYWJsZVN0cmluZyBjYW5ub3QgYmUgZ2l2ZW4gYSBuYW1lLiIpCisKK2NsYXNzIFByZWZvcm1hdHRlZFN0cmluZyhOYXZpZ2FibGVTdHJpbmcpOgorICAgICIiIkEgTmF2aWdhYmxlU3RyaW5nIG5vdCBzdWJqZWN0IHRvIHRoZSBub3JtYWwgZm9ybWF0dGluZyBydWxlcy4KKworICAgIFRoZSBzdHJpbmcgd2lsbCBiZSBwYXNzZWQgaW50byB0aGUgZm9ybWF0dGVyICh0byB0cmlnZ2VyIHNpZGUgZWZmZWN0cyksCisgICAgYnV0IHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgorICAgICIiIgorCisgICAgZGVmIG91dHB1dF9yZWFkeShzZWxmLCBmb3JtYXR0ZXI9Im1pbmltYWwiKToKKyAgICAgICAgIiIiQ0RhdGEgc3RyaW5ncyBhcmUgcGFzc2VkIGludG8gdGhlIGZvcm1hdHRlci4KKyAgICAgICAgQnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4iIiIKKyAgICAgICAgc2VsZi5mb3JtYXRfc3RyaW5nKHNlbGYsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuUFJFRklYICsgc2VsZiArIHNlbGYuU1VGRklYCisKK2NsYXNzIENEYXRhKFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBQUkVGSVggPSB1JzwhW0NEQVRBWycKKyAgICBTVUZGSVggPSB1J11dPicKKworY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uKFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBQUkVGSVggPSB1Jzw/JworICAgIFNVRkZJWCA9IHUnPz4nCisKK2NsYXNzIENvbW1lbnQoUHJlZm9ybWF0dGVkU3RyaW5nKToKKworICAgIFBSRUZJWCA9IHUnPCEtLScKKyAgICBTVUZGSVggPSB1Jy0tPicKKworCitjbGFzcyBEZWNsYXJhdGlvbihQcmVmb3JtYXR0ZWRTdHJpbmcpOgorICAgIFBSRUZJWCA9IHUnPCEnCisgICAgU1VGRklYID0gdSchPicKKworCitjbGFzcyBEb2N0eXBlKFByZWZvcm1hdHRlZFN0cmluZyk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZm9yX25hbWVfYW5kX2lkcyhjbHMsIG5hbWUsIHB1Yl9pZCwgc3lzdGVtX2lkKToKKyAgICAgICAgdmFsdWUgPSBuYW1lIG9yICcnCisgICAgICAgIGlmIHB1Yl9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlICs9ICcgUFVCTElDICIlcyInICUgcHViX2lkCisgICAgICAgICAgICBpZiBzeXN0ZW1faWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gJyAiJXMiJyAlIHN5c3RlbV9pZAorICAgICAgICBlbGlmIHN5c3RlbV9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlICs9ICcgU1lTVEVNICIlcyInICUgc3lzdGVtX2lkCisKKyAgICAgICAgcmV0dXJuIERvY3R5cGUodmFsdWUpCisKKyAgICBQUkVGSVggPSB1JzwhRE9DVFlQRSAnCisgICAgU1VGRklYID0gdSc+XG4nCisKKworY2xhc3MgVGFnKFBhZ2VFbGVtZW50KToKKworICAgICIiIlJlcHJlc2VudHMgYSBmb3VuZCBIVE1MIHRhZyB3aXRoIGl0cyBhdHRyaWJ1dGVzIGFuZCBjb250ZW50cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJzZXI9Tm9uZSwgYnVpbGRlcj1Ob25lLCBuYW1lPU5vbmUsIG5hbWVzcGFjZT1Ob25lLAorICAgICAgICAgICAgICAgICBwcmVmaXg9Tm9uZSwgYXR0cnM9Tm9uZSwgcGFyZW50PU5vbmUsIHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiQmFzaWMgY29uc3RydWN0b3IuIgorCisgICAgICAgIGlmIHBhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5wYXJzZXJfY2xhc3MgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlIGRvbid0IGFjdHVhbGx5IHN0b3JlIHRoZSBwYXJzZXIgb2JqZWN0OiB0aGF0IGxldHMgZXh0cmFjdGVkCisgICAgICAgICAgICAjIGNodW5rcyBiZSBnYXJiYWdlLWNvbGxlY3RlZC4KKyAgICAgICAgICAgIHNlbGYucGFyc2VyX2NsYXNzID0gcGFyc2VyLl9fY2xhc3NfXworICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgbmV3IHRhZydzIG5hbWUuIikKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQorICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAorICAgICAgICBpZiBhdHRycyBpcyBOb25lOgorICAgICAgICAgICAgYXR0cnMgPSB7fQorICAgICAgICBlbGlmIGF0dHJzIGFuZCBidWlsZGVyLmNkYXRhX2xpc3RfYXR0cmlidXRlczoKKyAgICAgICAgICAgIGF0dHJzID0gYnVpbGRlci5fcmVwbGFjZV9jZGF0YV9saXN0X2F0dHJpYnV0ZV92YWx1ZXMoCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBhdHRycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGF0dHJzID0gZGljdChhdHRycykKKyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCisgICAgICAgIHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICBzZWxmLnNldHVwKHBhcmVudCwgcHJldmlvdXMpCisgICAgICAgIHNlbGYuaGlkZGVuID0gRmFsc2UKKworICAgICAgICAjIFNldCB1cCBhbnkgc3Vic3RpdHV0aW9ucywgc3VjaCBhcyB0aGUgY2hhcnNldCBpbiBhIE1FVEEgdGFnLgorICAgICAgICBpZiBidWlsZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYnVpbGRlci5zZXRfdXBfc3Vic3RpdHV0aW9ucyhzZWxmKQorICAgICAgICAgICAgc2VsZi5jYW5fYmVfZW1wdHlfZWxlbWVudCA9IGJ1aWxkZXIuY2FuX2JlX2VtcHR5X2VsZW1lbnQobmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2FuX2JlX2VtcHR5X2VsZW1lbnQgPSBGYWxzZQorCisgICAgcGFyc2VyQ2xhc3MgPSBfYWxpYXMoInBhcnNlcl9jbGFzcyIpICAjIEJTMworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2VtcHR5X2VsZW1lbnQoc2VsZik6CisgICAgICAgICIiIklzIHRoaXMgdGFnIGFuIGVtcHR5LWVsZW1lbnQgdGFnPyAoYWthIGEgc2VsZi1jbG9zaW5nIHRhZykKKworICAgICAgICBBIHRhZyB0aGF0IGhhcyBjb250ZW50cyBpcyBuZXZlciBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKworICAgICAgICBBIHRhZyB0aGF0IGhhcyBubyBjb250ZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBhbiBlbXB0eS1lbGVtZW50CisgICAgICAgIHRhZy4gSXQgZGVwZW5kcyBvbiB0aGUgYnVpbGRlciB1c2VkIHRvIGNyZWF0ZSB0aGUgdGFnLiBJZiB0aGUKKyAgICAgICAgYnVpbGRlciBoYXMgYSBkZXNpZ25hdGVkIGxpc3Qgb2YgZW1wdHktZWxlbWVudCB0YWdzLCB0aGVuIG9ubHkKKyAgICAgICAgYSB0YWcgd2hvc2UgbmFtZSBzaG93cyB1cCBpbiB0aGF0IGxpc3QgaXMgY29uc2lkZXJlZCBhbgorICAgICAgICBlbXB0eS1lbGVtZW50IHRhZy4KKworICAgICAgICBJZiB0aGUgYnVpbGRlciBoYXMgbm8gZGVzaWduYXRlZCBsaXN0IG9mIGVtcHR5LWVsZW1lbnQgdGFncywKKyAgICAgICAgdGhlbiBhbnkgdGFnIHdpdGggbm8gY29udGVudHMgaXMgYW4gZW1wdHktZWxlbWVudCB0YWcuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpID09IDAgYW5kIHNlbGYuY2FuX2JlX2VtcHR5X2VsZW1lbnQKKyAgICBpc1NlbGZDbG9zaW5nID0gaXNfZW1wdHlfZWxlbWVudCAgIyBCUzMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdHJpbmcoc2VsZik6CisgICAgICAgICIiIkNvbnZlbmllbmNlIHByb3BlcnR5IHRvIGdldCB0aGUgc2luZ2xlIHN0cmluZyB3aXRoaW4gdGhpcyB0YWcuCisKKyAgICAgICAgOlJldHVybjogSWYgdGhpcyB0YWcgaGFzIGEgc2luZ2xlIHN0cmluZyBjaGlsZCwgcmV0dXJuIHZhbHVlCisgICAgICAgICBpcyB0aGF0IHN0cmluZy4gSWYgdGhpcyB0YWcgaGFzIG5vIGNoaWxkcmVuLCBvciBtb3JlIHRoYW4gb25lCisgICAgICAgICBjaGlsZCwgcmV0dXJuIHZhbHVlIGlzIE5vbmUuIElmIHRoaXMgdGFnIGhhcyBvbmUgY2hpbGQgdGFnLAorICAgICAgICAgcmV0dXJuIHZhbHVlIGlzIHRoZSAnc3RyaW5nJyBhdHRyaWJ1dGUgb2YgdGhlIGNoaWxkIHRhZywKKyAgICAgICAgIHJlY3Vyc2l2ZWx5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKHNlbGYuY29udGVudHMpICE9IDE6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBjaGlsZCA9IHNlbGYuY29udGVudHNbMF0KKyAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBjaGlsZAorICAgICAgICByZXR1cm4gY2hpbGQuc3RyaW5nCisKKyAgICBAc3RyaW5nLnNldHRlcgorICAgIGRlZiBzdHJpbmcoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cmluZy5fX2NsYXNzX18oc3RyaW5nKSkKKworICAgIGRlZiBfYWxsX3N0cmluZ3Moc2VsZiwgc3RyaXA9RmFsc2UsIHR5cGVzPShOYXZpZ2FibGVTdHJpbmcsIENEYXRhKSk6CisgICAgICAgICIiIllpZWxkIGFsbCBzdHJpbmdzIG9mIGNlcnRhaW4gY2xhc3NlcywgcG9zc2libHkgc3RyaXBwaW5nIHRoZW0uCisKKyAgICAgICAgQnkgZGVmYXVsdCwgeWllbGRzIG9ubHkgTmF2aWdhYmxlU3RyaW5nIGFuZCBDRGF0YSBvYmplY3RzLiBTbworICAgICAgICBubyBjb21tZW50cywgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGV0Yy4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkZXNjZW5kYW50IGluIHNlbGYuZGVzY2VuZGFudHM6CisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgKHR5cGVzIGlzIE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKGRlc2NlbmRhbnQsIE5hdmlnYWJsZVN0cmluZykpCisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAodHlwZXMgaXMgbm90IE5vbmUgYW5kIHR5cGUoZGVzY2VuZGFudCkgbm90IGluIHR5cGVzKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHN0cmlwOgorICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZGVzY2VuZGFudCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIGRlc2NlbmRhbnQKKworICAgIHN0cmluZ3MgPSBwcm9wZXJ0eShfYWxsX3N0cmluZ3MpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RyaXBwZWRfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgZm9yIHN0cmluZyBpbiBzZWxmLl9hbGxfc3RyaW5ncyhUcnVlKToKKyAgICAgICAgICAgIHlpZWxkIHN0cmluZworCisgICAgZGVmIGdldF90ZXh0KHNlbGYsIHNlcGFyYXRvcj11IiIsIHN0cmlwPUZhbHNlLAorICAgICAgICAgICAgICAgICB0eXBlcz0oTmF2aWdhYmxlU3RyaW5nLCBDRGF0YSkpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGFsbCBjaGlsZCBzdHJpbmdzLCBjb25jYXRlbmF0ZWQgdXNpbmcgdGhlIGdpdmVuIHNlcGFyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZXBhcmF0b3Iuam9pbihbcyBmb3IgcyBpbiBzZWxmLl9hbGxfc3RyaW5ncygKKyAgICAgICAgICAgICAgICAgICAgc3RyaXAsIHR5cGVzPXR5cGVzKV0pCisgICAgZ2V0VGV4dCA9IGdldF90ZXh0CisgICAgdGV4dCA9IHByb3BlcnR5KGdldF90ZXh0KQorCisgICAgZGVmIGRlY29tcG9zZShzZWxmKToKKyAgICAgICAgIiIiUmVjdXJzaXZlbHkgZGVzdHJveXMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdHJlZS4iIiIKKyAgICAgICAgc2VsZi5leHRyYWN0KCkKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5leHQgPSBpLm5leHRfZWxlbWVudAorICAgICAgICAgICAgaS5fX2RpY3RfXy5jbGVhcigpCisgICAgICAgICAgICBpLmNvbnRlbnRzID0gW10KKyAgICAgICAgICAgIGkgPSBuZXh0CisKKyAgICBkZWYgY2xlYXIoc2VsZiwgZGVjb21wb3NlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4dHJhY3QgYWxsIGNoaWxkcmVuLiBJZiBkZWNvbXBvc2UgaXMgVHJ1ZSwgZGVjb21wb3NlIGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBkZWNvbXBvc2U6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbnRlbnRzWzpdOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGFnKToKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kZWNvbXBvc2UoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXh0cmFjdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbnRlbnRzWzpdOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuZXh0cmFjdCgpCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgZWxlbWVudCk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBpbmRleCBvZiBhIGNoaWxkIGJ5IGlkZW50aXR5LCBub3QgdmFsdWUuIEF2b2lkcyBpc3N1ZXMgd2l0aAorICAgICAgICB0YWcuY29udGVudHMuaW5kZXgoZWxlbWVudCkgZ2V0dGluZyB0aGUgaW5kZXggb2YgZXF1YWwgZWxlbWVudHMuCisgICAgICAgICIiIgorICAgICAgICBmb3IgaSwgY2hpbGQgaW4gZW51bWVyYXRlKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgaWYgY2hpbGQgaXMgZWxlbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUYWcuaW5kZXg6IGVsZW1lbnQgbm90IGluIHRhZyIpCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRhZywgb3IKKyAgICAgICAgdGhlIHZhbHVlIGdpdmVuIGZvciAnZGVmYXVsdCcgaWYgaXQgZG9lc24ndCBoYXZlIHRoYXQKKyAgICAgICAgYXR0cmlidXRlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5hdHRycy5nZXQoa2V5LCBkZWZhdWx0KQorCisgICAgZGVmIGhhc19hdHRyKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5hdHRycworCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpLl9faGFzaF9fKCkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiIiJ0YWdba2V5XSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScgYXR0cmlidXRlIGZvciB0aGUgdGFnLAorICAgICAgICBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBpdCdzIG5vdCB0aGVyZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuYXR0cnNba2V5XQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAiSXRlcmF0aW5nIG92ZXIgYSB0YWcgaXRlcmF0ZXMgb3ZlciBpdHMgY29udGVudHMuIgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICJUaGUgbGVuZ3RoIG9mIGEgdGFnIGlzIHRoZSBsZW5ndGggb2YgaXRzIGxpc3Qgb2YgY29udGVudHMuIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29udGVudHMpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRzCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICJBIHRhZyBpcyBub24tTm9uZSBldmVuIGlmIGl0IGhhcyBubyBjb250ZW50cy4iCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldHRpbmcgdGFnW2tleV0gc2V0cyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlCisgICAgICAgIHRhZy4iIiIKKyAgICAgICAgc2VsZi5hdHRyc1trZXldID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiRGVsZXRpbmcgdGFnW2tleV0gZGVsZXRlcyBhbGwgJ2tleScgYXR0cmlidXRlcyBmb3IgdGhlIHRhZy4iCisgICAgICAgIHNlbGYuYXR0cnMucG9wKGtleSwgTm9uZSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDYWxsaW5nIGEgdGFnIGxpa2UgYSBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIGl0cworICAgICAgICBmaW5kX2FsbCgpIG1ldGhvZC4gRWcuIHRhZygnYScpIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgQSB0YWdzCisgICAgICAgIGZvdW5kIHdpdGhpbiB0aGlzIHRhZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZmluZF9hbGwoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHRhZyk6CisgICAgICAgICNwcmludCAiR2V0YXR0ciAlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18sIHRhZykKKyAgICAgICAgaWYgbGVuKHRhZykgPiAzIGFuZCB0YWcuZW5kc3dpdGgoJ1RhZycpOgorICAgICAgICAgICAgIyBCUzM6IHNvdXAuYVRhZyAtPiAic291cC5maW5kKCJhIikKKyAgICAgICAgICAgIHRhZ19uYW1lID0gdGFnWzotM10KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgJy4lc1RhZyBpcyBkZXByZWNhdGVkLCB1c2UgLmZpbmQoIiVzIikgaW5zdGVhZC4nICUgKAorICAgICAgICAgICAgICAgICAgICB0YWdfbmFtZSwgdGFnX25hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWdfbmFtZSkKKyAgICAgICAgIyBXZSBzcGVjaWFsIGNhc2UgY29udGVudHMgdG8gYXZvaWQgcmVjdXJzaW9uLgorICAgICAgICBlbGlmIG5vdCB0YWcuc3RhcnRzd2l0aCgiX18iKSBhbmQgbm90IHRhZz09ImNvbnRlbnRzIjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQodGFnKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUgKHNlbGYuX19jbGFzc19fLCB0YWcpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhpcyB0YWcgaGFzIHRoZSBzYW1lIG5hbWUsIHRoZSBzYW1lIGF0dHJpYnV0ZXMsCisgICAgICAgIGFuZCB0aGUgc2FtZSBjb250ZW50cyAocmVjdXJzaXZlbHkpIGFzIHRoZSBnaXZlbiB0YWcuIiIiCisgICAgICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiAobm90IGhhc2F0dHIob3RoZXIsICduYW1lJykgb3IKKyAgICAgICAgICAgIG5vdCBoYXNhdHRyKG90aGVyLCAnYXR0cnMnKSBvcgorICAgICAgICAgICAgbm90IGhhc2F0dHIob3RoZXIsICdjb250ZW50cycpIG9yCisgICAgICAgICAgICBzZWxmLm5hbWUgIT0gb3RoZXIubmFtZSBvcgorICAgICAgICAgICAgc2VsZi5hdHRycyAhPSBvdGhlci5hdHRycyBvcgorICAgICAgICAgICAgbGVuKHNlbGYpICE9IGxlbihvdGhlcikpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBpLCBteV9jaGlsZCBpbiBlbnVtZXJhdGUoc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBpZiBteV9jaGlsZCAhPSBvdGhlci5jb250ZW50c1tpXToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGFnIGlzIG5vdCBpZGVudGljYWwgdG8gdGhlIG90aGVyIHRhZywKKyAgICAgICAgYXMgZGVmaW5lZCBpbiBfX2VxX18uIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGlzIHRhZyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKGVuY29kaW5nKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGUoKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmVuY29kZSgpCisKKyAgICBpZiBQWTNLOgorICAgICAgICBfX3N0cl9fID0gX19yZXByX18gPSBfX3VuaWNvZGVfXworCisgICAgZGVmIGVuY29kZShzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgIGluZGVudF9sZXZlbD1Ob25lLCBmb3JtYXR0ZXI9Im1pbmltYWwiLAorICAgICAgICAgICAgICAgZXJyb3JzPSJ4bWxjaGFycmVmcmVwbGFjZSIpOgorICAgICAgICAjIFR1cm4gdGhlIGRhdGEgc3RydWN0dXJlIGludG8gVW5pY29kZSwgdGhlbiBlbmNvZGUgdGhlCisgICAgICAgICMgVW5pY29kZS4KKyAgICAgICAgdSA9IHNlbGYuZGVjb2RlKGluZGVudF9sZXZlbCwgZW5jb2RpbmcsIGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIHUuZW5jb2RlKGVuY29kaW5nLCBlcnJvcnMpCisKKyAgICBkZWYgX3Nob3VsZF9wcmV0dHlfcHJpbnQoc2VsZiwgaW5kZW50X2xldmVsKToKKyAgICAgICAgIiIiU2hvdWxkIHRoaXMgdGFnIGJlIHByZXR0eS1wcmludGVkPyIiIgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgKHNlbGYubmFtZSBub3QgaW4gSFRNTEF3YXJlRW50aXR5U3Vic3RpdHV0aW9uLnByZWZvcm1hdHRlZF90YWdzCisgICAgICAgICAgICAgb3Igc2VsZi5faXNfeG1sKSkKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5kZW50X2xldmVsPU5vbmUsCisgICAgICAgICAgICAgICBldmVudHVhbF9lbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJSZXR1cm5zIGEgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRhZyBhbmQgaXRzIGNvbnRlbnRzLgorCisgICAgICAgIDpwYXJhbSBldmVudHVhbF9lbmNvZGluZzogVGhlIHRhZyBpcyBkZXN0aW5lZCB0byBiZQorICAgICAgICAgICBlbmNvZGVkIGludG8gdGhpcyBlbmNvZGluZy4gVGhpcyBtZXRob2QgaXMgX25vdF8KKyAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgdGhhdCBlbmNvZGluZy4gVGhpcyBpbmZvcm1hdGlvbgorICAgICAgICAgICBpcyBwYXNzZWQgaW4gc28gdGhhdCBpdCBjYW4gYmUgc3Vic3RpdHV0ZWQgaW4gaWYgdGhlCisgICAgICAgICAgIGRvY3VtZW50IGNvbnRhaW5zIGEgPE1FVEE+IHRhZyB0aGF0IG1lbnRpb25zIHRoZSBkb2N1bWVudCdzCisgICAgICAgICAgIGVuY29kaW5nLgorICAgICAgICAiIiIKKworICAgICAgICAjIEZpcnN0IG9mZiwgdHVybiBhIHN0cmluZyBmb3JtYXR0ZXIgaW50byBhIGZ1bmN0aW9uLiBUaGlzCisgICAgICAgICMgd2lsbCBzdG9wIHRoZSBsb29rdXAgZnJvbSBoYXBwZW5pbmcgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9mb3JtYXR0ZXJfZm9yX25hbWUoZm9ybWF0dGVyKQorCisgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgaWYgc2VsZi5hdHRyczoKKyAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBzb3J0ZWQoc2VsZi5hdHRycy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGtleQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0KSBvciBpc2luc3RhbmNlKHZhbCwgdHVwbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gJyAnLmpvaW4odmFsKQorICAgICAgICAgICAgICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB1bmljb2RlKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAoCisgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgQXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBldmVudHVhbF9lbmNvZGluZyBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuZW5jb2RlKGV2ZW50dWFsX2VuY29kaW5nKQorCisgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmZvcm1hdF9zdHJpbmcodmFsLCBmb3JtYXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKGtleSkgKyAnPScKKyAgICAgICAgICAgICAgICAgICAgICAgICsgRW50aXR5U3Vic3RpdHV0aW9uLnF1b3RlZF9hdHRyaWJ1dGVfdmFsdWUodGV4dCkpCisgICAgICAgICAgICAgICAgYXR0cnMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIGNsb3NlID0gJycKKyAgICAgICAgY2xvc2VUYWcgPSAnJworCisgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIGlmIHNlbGYucHJlZml4OgorICAgICAgICAgICAgcHJlZml4ID0gc2VsZi5wcmVmaXggKyAiOiIKKworICAgICAgICBpZiBzZWxmLmlzX2VtcHR5X2VsZW1lbnQ6CisgICAgICAgICAgICBjbG9zZSA9ICcvJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xvc2VUYWcgPSAnPC8lcyVzPicgJSAocHJlZml4LCBzZWxmLm5hbWUpCisKKyAgICAgICAgcHJldHR5X3ByaW50ID0gc2VsZi5fc2hvdWxkX3ByZXR0eV9wcmludChpbmRlbnRfbGV2ZWwpCisgICAgICAgIHNwYWNlID0gJycKKyAgICAgICAgaW5kZW50X3NwYWNlID0gJycKKyAgICAgICAgaWYgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5kZW50X3NwYWNlID0gKCcgJyAqIChpbmRlbnRfbGV2ZWwgLSAxKSkKKyAgICAgICAgaWYgcHJldHR5X3ByaW50OgorICAgICAgICAgICAgc3BhY2UgPSBpbmRlbnRfc3BhY2UKKyAgICAgICAgICAgIGluZGVudF9jb250ZW50cyA9IGluZGVudF9sZXZlbCArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZGVudF9jb250ZW50cyA9IE5vbmUKKyAgICAgICAgY29udGVudHMgPSBzZWxmLmRlY29kZV9jb250ZW50cygKKyAgICAgICAgICAgIGluZGVudF9jb250ZW50cywgZXZlbnR1YWxfZW5jb2RpbmcsIGZvcm1hdHRlcikKKworICAgICAgICBpZiBzZWxmLmhpZGRlbjoKKyAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgJ2RvY3VtZW50IHJvb3QnIG9iamVjdC4KKyAgICAgICAgICAgIHMgPSBjb250ZW50cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcyA9IFtdCisgICAgICAgICAgICBhdHRyaWJ1dGVfc3RyaW5nID0gJycKKyAgICAgICAgICAgIGlmIGF0dHJzOgorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV9zdHJpbmcgPSAnICcgKyAnICcuam9pbihhdHRycykKKyAgICAgICAgICAgIGlmIGluZGVudF9sZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIEV2ZW4gaWYgdGhpcyBwYXJ0aWN1bGFyIHRhZyBpcyBub3QgcHJldHR5LXByaW50ZWQsCisgICAgICAgICAgICAgICAgIyB3ZSBzaG91bGQgaW5kZW50IHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFnLgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKGluZGVudF9zcGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKCc8JXMlcyVzJXM+JyAlICgKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4LCBzZWxmLm5hbWUsIGF0dHJpYnV0ZV9zdHJpbmcsIGNsb3NlKSkKKyAgICAgICAgICAgIGlmIHByZXR0eV9wcmludDoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgcy5hcHBlbmQoY29udGVudHMpCisgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQgYW5kIGNvbnRlbnRzIGFuZCBjb250ZW50c1stMV0gIT0gIlxuIjoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50IGFuZCBjbG9zZVRhZzoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZChzcGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKGNsb3NlVGFnKQorICAgICAgICAgICAgaWYgaW5kZW50X2xldmVsIGlzIG5vdCBOb25lIGFuZCBjbG9zZVRhZyBhbmQgc2VsZi5uZXh0X3NpYmxpbmc6CisgICAgICAgICAgICAgICAgIyBFdmVuIGlmIHRoaXMgcGFydGljdWxhciB0YWcgaXMgbm90IHByZXR0eS1wcmludGVkLAorICAgICAgICAgICAgICAgICMgd2UncmUgbm93IGRvbmUgd2l0aCB0aGUgdGFnLCBhbmQgd2Ugc2hvdWxkIGFkZCBhCisgICAgICAgICAgICAgICAgIyBuZXdsaW5lIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICBzID0gJycuam9pbihzKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIHByZXR0aWZ5KHNlbGYsIGVuY29kaW5nPU5vbmUsIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVjb2RlKFRydWUsIGZvcm1hdHRlcj1mb3JtYXR0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5lbmNvZGUoZW5jb2RpbmcsIFRydWUsIGZvcm1hdHRlcj1mb3JtYXR0ZXIpCisKKyAgICBkZWYgZGVjb2RlX2NvbnRlbnRzKHNlbGYsIGluZGVudF9sZXZlbD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBldmVudHVhbF9lbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyPSJtaW5pbWFsIik6CisgICAgICAgICIiIlJlbmRlcnMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdGFnIGFzIGEgVW5pY29kZSBzdHJpbmcuCisKKyAgICAgICAgOnBhcmFtIGV2ZW50dWFsX2VuY29kaW5nOiBUaGUgdGFnIGlzIGRlc3RpbmVkIHRvIGJlCisgICAgICAgICAgIGVuY29kZWQgaW50byB0aGlzIGVuY29kaW5nLiBUaGlzIG1ldGhvZCBpcyBfbm90XworICAgICAgICAgICByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyB0aGF0IGVuY29kaW5nLiBUaGlzIGluZm9ybWF0aW9uCisgICAgICAgICAgIGlzIHBhc3NlZCBpbiBzbyB0aGF0IGl0IGNhbiBiZSBzdWJzdGl0dXRlZCBpbiBpZiB0aGUKKyAgICAgICAgICAgZG9jdW1lbnQgY29udGFpbnMgYSA8TUVUQT4gdGFnIHRoYXQgbWVudGlvbnMgdGhlIGRvY3VtZW50J3MKKyAgICAgICAgICAgZW5jb2RpbmcuCisgICAgICAgICIiIgorICAgICAgICAjIEZpcnN0IG9mZiwgdHVybiBhIHN0cmluZyBmb3JtYXR0ZXIgaW50byBhIGZ1bmN0aW9uLiBUaGlzCisgICAgICAgICMgd2lsbCBzdG9wIHRoZSBsb29rdXAgZnJvbSBoYXBwZW5pbmcgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZvcm1hdHRlcik6CisgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9mb3JtYXR0ZXJfZm9yX25hbWUoZm9ybWF0dGVyKQorCisgICAgICAgIHByZXR0eV9wcmludCA9IChpbmRlbnRfbGV2ZWwgaXMgbm90IE5vbmUpCisgICAgICAgIHMgPSBbXQorICAgICAgICBmb3IgYyBpbiBzZWxmOgorICAgICAgICAgICAgdGV4dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgTmF2aWdhYmxlU3RyaW5nKToKKyAgICAgICAgICAgICAgICB0ZXh0ID0gYy5vdXRwdXRfcmVhZHkoZm9ybWF0dGVyKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGMsIFRhZyk6CisgICAgICAgICAgICAgICAgcy5hcHBlbmQoYy5kZWNvZGUoaW5kZW50X2xldmVsLCBldmVudHVhbF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIpKQorICAgICAgICAgICAgaWYgdGV4dCBhbmQgaW5kZW50X2xldmVsIGFuZCBub3Qgc2VsZi5uYW1lID09ICdwcmUnOgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgaWYgcHJldHR5X3ByaW50IGFuZCBub3Qgc2VsZi5uYW1lID09ICdwcmUnOgorICAgICAgICAgICAgICAgICAgICBzLmFwcGVuZCgiICIgKiAoaW5kZW50X2xldmVsIC0gMSkpCisgICAgICAgICAgICAgICAgcy5hcHBlbmQodGV4dCkKKyAgICAgICAgICAgICAgICBpZiBwcmV0dHlfcHJpbnQgYW5kIG5vdCBzZWxmLm5hbWUgPT0gJ3ByZSc6CisgICAgICAgICAgICAgICAgICAgIHMuYXBwZW5kKCJcbiIpCisgICAgICAgIHJldHVybiAnJy5qb2luKHMpCisKKyAgICBkZWYgZW5jb2RlX2NvbnRlbnRzKAorICAgICAgICBzZWxmLCBpbmRlbnRfbGV2ZWw9Tm9uZSwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgIGZvcm1hdHRlcj0ibWluaW1hbCIpOgorICAgICAgICAiIiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlzIHRhZyBhcyBhIGJ5dGVzdHJpbmcuIiIiCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5kZWNvZGVfY29udGVudHMoaW5kZW50X2xldmVsLCBlbmNvZGluZywgZm9ybWF0dGVyKQorICAgICAgICByZXR1cm4gY29udGVudHMuZW5jb2RlKGVuY29kaW5nKQorCisgICAgIyBPbGQgbWV0aG9kIGZvciBCUzMgY29tcGF0aWJpbGl0eQorICAgIGRlZiByZW5kZXJDb250ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTApOgorICAgICAgICBpZiBub3QgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICBpbmRlbnRMZXZlbCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlX2NvbnRlbnRzKAorICAgICAgICAgICAgaW5kZW50X2xldmVsPWluZGVudExldmVsLCBlbmNvZGluZz1lbmNvZGluZykKKworICAgICNTb3VwIG1ldGhvZHMKKworICAgIGRlZiBmaW5kKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm4gb25seSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBUYWcgbWF0Y2hpbmcgdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiIiIgorICAgICAgICByID0gTm9uZQorICAgICAgICBsID0gc2VsZi5maW5kX2FsbChuYW1lLCBhdHRycywgcmVjdXJzaXZlLCB0ZXh0LCAxLCAqKmt3YXJncykKKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHIgPSBsWzBdCisgICAgICAgIHJldHVybiByCisgICAgZmluZENoaWxkID0gZmluZAorCisgICAgZGVmIGZpbmRfYWxsKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgIGxpbWl0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiRXh0cmFjdHMgYSBsaXN0IG9mIFRhZyBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuCisgICAgICAgIGNyaXRlcmlhLiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBUYWcgYW5kIGFueQorICAgICAgICBhdHRyaWJ1dGVzIHlvdSB3YW50IHRoZSBUYWcgdG8gaGF2ZS4KKworICAgICAgICBUaGUgdmFsdWUgb2YgYSBrZXktdmFsdWUgcGFpciBpbiB0aGUgJ2F0dHJzJyBtYXAgY2FuIGJlIGEKKyAgICAgICAgc3RyaW5nLCBhIGxpc3Qgb2Ygc3RyaW5ncywgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBvciBhCisgICAgICAgIGNhbGxhYmxlIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgd2hldGhlciBvciBub3QgdGhlCisgICAgICAgIHN0cmluZyBtYXRjaGVzIGZvciBzb21lIGN1c3RvbSBkZWZpbml0aW9uIG9mICdtYXRjaGVzJy4gVGhlCisgICAgICAgIHNhbWUgaXMgdHJ1ZSBvZiB0aGUgdGFnIG5hbWUuIiIiCisKKyAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5kZXNjZW5kYW50cworICAgICAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5jaGlsZHJlbgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9hbGwobmFtZSwgYXR0cnMsIHRleHQsIGxpbWl0LCBnZW5lcmF0b3IsICoqa3dhcmdzKQorICAgIGZpbmRBbGwgPSBmaW5kX2FsbCAgICAgICAjIEJTMworICAgIGZpbmRDaGlsZHJlbiA9IGZpbmRfYWxsICAjIEJTMgorCisgICAgI0dlbmVyYXRvciBtZXRob2RzCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNoaWxkcmVuKHNlbGYpOgorICAgICAgICAjIHJldHVybiBpdGVyKCkgdG8gbWFrZSB0aGUgcHVycG9zZSBvZiB0aGUgbWV0aG9kIGNsZWFyCisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuY29udGVudHMpICAjIFhYWCBUaGlzIHNlZW1zIHRvIGJlIHVudGVzdGVkLgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlc2NlbmRhbnRzKHNlbGYpOgorICAgICAgICBpZiBub3QgbGVuKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0b3BOb2RlID0gc2VsZi5fbGFzdF9kZXNjZW5kYW50KCkubmV4dF9lbGVtZW50CisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmNvbnRlbnRzWzBdCisgICAgICAgIHdoaWxlIGN1cnJlbnQgaXMgbm90IHN0b3BOb2RlOgorICAgICAgICAgICAgeWllbGQgY3VycmVudAorICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dF9lbGVtZW50CisKKyAgICAjIENTUyBzZWxlY3RvciBjb2RlCisKKyAgICBfc2VsZWN0b3JfY29tYmluYXRvcnMgPSBbJz4nLCAnKycsICd+J10KKyAgICBfc2VsZWN0X2RlYnVnID0gRmFsc2UKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHNlbGVjdG9yLCBfY2FuZGlkYXRlX2dlbmVyYXRvcj1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybSBhIENTUyBzZWxlY3Rpb24gb3BlcmF0aW9uIG9uIHRoZSBjdXJyZW50IGVsZW1lbnQuIiIiCisgICAgICAgIHRva2VucyA9IHNlbGVjdG9yLnNwbGl0KCkKKyAgICAgICAgY3VycmVudF9jb250ZXh0ID0gW3NlbGZdCisKKyAgICAgICAgaWYgdG9rZW5zWy0xXSBpbiBzZWxmLl9zZWxlY3Rvcl9jb21iaW5hdG9yczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ0ZpbmFsIGNvbWJpbmF0b3IgIiVzIiBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LicgJSB0b2tlbnNbLTFdKQorICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICBwcmludCAnUnVubmluZyBDU1Mgc2VsZWN0b3IgIiVzIicgJSBzZWxlY3RvcgorICAgICAgICBmb3IgaW5kZXgsIHRva2VuIGluIGVudW1lcmF0ZSh0b2tlbnMpOgorICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgIHByaW50ICcgQ29uc2lkZXJpbmcgdG9rZW4gIiVzIicgJSB0b2tlbgorICAgICAgICAgICAgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBOb25lCisgICAgICAgICAgICB0YWdfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHRva2Vuc1tpbmRleC0xXSBpbiBzZWxmLl9zZWxlY3Rvcl9jb21iaW5hdG9yczoKKyAgICAgICAgICAgICAgICAjIFRoaXMgdG9rZW4gd2FzIGNvbnN1bWVkIGJ5IHRoZSBwcmV2aW91cyBjb21iaW5hdG9yLiBTa2lwIGl0LgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgVG9rZW4gd2FzIGNvbnN1bWVkIGJ5IHRoZSBwcmV2aW91cyBjb21iaW5hdG9yLicKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBFYWNoIG9wZXJhdGlvbiBjb3JyZXNwb25kcyB0byBhIGNoZWNrZXIgZnVuY3Rpb24sIGEgcnVsZQorICAgICAgICAgICAgIyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGNhbmRpZGF0ZSBtYXRjaGVzIHRoZQorICAgICAgICAgICAgIyBzZWxlY3Rvci4gQ2FuZGlkYXRlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBhY3RpdmUKKyAgICAgICAgICAgICMgaXRlcmF0b3IuCisgICAgICAgICAgICBjaGVja2VyID0gTm9uZQorCisgICAgICAgICAgICBtID0gc2VsZi5hdHRyaWJzZWxlY3RfcmUubWF0Y2godG9rZW4pCisgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgQXR0cmlidXRlIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgdGFnX25hbWUsIGF0dHJpYnV0ZSwgb3BlcmF0b3IsIHZhbHVlID0gbS5ncm91cHMoKQorICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBzZWxmLl9hdHRyaWJ1dGVfY2hlY2tlcihvcGVyYXRvciwgYXR0cmlidXRlLCB2YWx1ZSkKKworICAgICAgICAgICAgZWxpZiAnIycgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgIyBJRCBzZWxlY3RvcgorICAgICAgICAgICAgICAgIHRhZ19uYW1lLCB0YWdfaWQgPSB0b2tlbi5zcGxpdCgnIycsIDEpCisgICAgICAgICAgICAgICAgZGVmIGlkX21hdGNoZXModGFnKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhZy5nZXQoJ2lkJywgTm9uZSkgPT0gdGFnX2lkCisgICAgICAgICAgICAgICAgY2hlY2tlciA9IGlkX21hdGNoZXMKKworICAgICAgICAgICAgZWxpZiAnLicgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgIyBDbGFzcyBzZWxlY3RvcgorICAgICAgICAgICAgICAgIHRhZ19uYW1lLCBrbGFzcyA9IHRva2VuLnNwbGl0KCcuJywgMSkKKyAgICAgICAgICAgICAgICBjbGFzc2VzID0gc2V0KGtsYXNzLnNwbGl0KCcuJykpCisgICAgICAgICAgICAgICAgZGVmIGNsYXNzZXNfbWF0Y2goY2FuZGlkYXRlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzZXMuaXNzdWJzZXQoY2FuZGlkYXRlLmdldCgnY2xhc3MnLCBbXSkpCisgICAgICAgICAgICAgICAgY2hlY2tlciA9IGNsYXNzZXNfbWF0Y2gKKworICAgICAgICAgICAgZWxpZiAnOicgaW4gdG9rZW46CisgICAgICAgICAgICAgICAgIyBQc2V1ZG8tY2xhc3MKKyAgICAgICAgICAgICAgICB0YWdfbmFtZSwgcHNldWRvID0gdG9rZW4uc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgICAgIGlmIHRhZ19uYW1lID09ICcnOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgIkEgcHNldWRvLWNsYXNzIG11c3QgYmUgcHJlZml4ZWQgd2l0aCBhIHRhZyBuYW1lLiIpCisgICAgICAgICAgICAgICAgcHNldWRvX2F0dHJpYnV0ZXMgPSByZS5tYXRjaCgnKFthLXpBLVpcZC1dKylcKChbYS16QS1aXGRdKylcKScsIHBzZXVkbykKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgICAgICAgICAgaWYgcHNldWRvX2F0dHJpYnV0ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBzZXVkb190eXBlLCBwc2V1ZG9fdmFsdWUgPSBwc2V1ZG9fYXR0cmlidXRlcy5ncm91cHMoKQorICAgICAgICAgICAgICAgICAgICBpZiBwc2V1ZG9fdHlwZSA9PSAnbnRoLW9mLXR5cGUnOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb192YWx1ZSA9IGludChwc2V1ZG9fdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09ubHkgbnVtZXJpYyB2YWx1ZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHRoZSBudGgtb2YtdHlwZSBwc2V1ZG8tY2xhc3MuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBzZXVkb192YWx1ZSA8IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ250aC1vZi10eXBlIHBzZXVkby1jbGFzcyB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IDEuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvdW50ZXIob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzdGluYXRpb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb24KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBudGhfY2hpbGRfb2ZfdHlwZShzZWxmLCB0YWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSBzZWxmLmRlc3RpbmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA+IHNlbGYuZGVzdGluYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN0b3AgdGhlIGdlbmVyYXRvciB0aGF0J3Mgc2VuZGluZyB1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGVzZSB0aGluZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VyID0gQ291bnRlcihwc2V1ZG9fdmFsdWUpLm50aF9jaGlsZF9vZl90eXBlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPbmx5IHRoZSBmb2xsb3dpbmcgcHNldWRvLWNsYXNzZXMgYXJlIGltcGxlbWVudGVkOiBudGgtb2YtdHlwZS4nKQorCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICcqJzoKKyAgICAgICAgICAgICAgICAjIFN0YXIgc2VsZWN0b3IgLS0gbWF0Y2hlcyBldmVyeXRoaW5nCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiB0b2tlbiA9PSAnPic6CisgICAgICAgICAgICAgICAgIyBSdW4gdGhlIG5leHQgdG9rZW4gYXMgYSBDU1Mgc2VsZWN0b3IgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICAjIGRpcmVjdCBjaGlsZHJlbiBvZiBlYWNoIHRhZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LgorICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gbGFtYmRhIHRhZzogdGFnLmNoaWxkcmVuCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICd+JzoKKyAgICAgICAgICAgICAgICAjIFJ1biB0aGUgbmV4dCB0b2tlbiBhcyBhIENTUyBzZWxlY3RvciBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgICMgc2libGluZ3Mgb2YgZWFjaCB0YWcgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgICAgICAgICByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGxhbWJkYSB0YWc6IHRhZy5uZXh0X3NpYmxpbmdzCisgICAgICAgICAgICBlbGlmIHRva2VuID09ICcrJzoKKyAgICAgICAgICAgICAgICAjIEZvciBlYWNoIHRhZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBydW4gdGhlIG5leHQKKyAgICAgICAgICAgICAgICAjIHRva2VuIGFzIGEgQ1NTIHNlbGVjdG9yIGFnYWluc3QgdGhlIHRhZydzIG5leHQKKyAgICAgICAgICAgICAgICAjIHNpYmxpbmcgdGhhdCdzIGEgdGFnLgorICAgICAgICAgICAgICAgIGRlZiBuZXh0X3RhZ19zaWJsaW5nKHRhZyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRhZy5maW5kX25leHRfc2libGluZyhUcnVlKQorICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZV9jYW5kaWRhdGVfZ2VuZXJhdG9yID0gbmV4dF90YWdfc2libGluZworCisgICAgICAgICAgICBlbGlmIHNlbGYudGFnX25hbWVfcmUubWF0Y2godG9rZW4pOgorICAgICAgICAgICAgICAgICMgSnVzdCBhIHRhZyBuYW1lLgorICAgICAgICAgICAgICAgIHRhZ19uYW1lID0gdG9rZW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIG9yIGludmFsaWQgQ1NTIHNlbGVjdG9yOiAiJXMiJyAlIHRva2VuKQorCisgICAgICAgICAgICBpZiByZWN1cnNpdmVfY2FuZGlkYXRlX2dlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBzZWxlY3RvciBsb29rcyBsaWtlICAiPiBmb28iLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoZSBnZW5lcmF0b3IgY2FsbHMgc2VsZWN0KCkgcmVjdXJzaXZlbHkgb24gZXZlcnkKKyAgICAgICAgICAgICAgICAjIG1lbWJlciBvZiB0aGUgY3VycmVudCBjb250ZXh0LCBwYXNzaW5nIGluIGEgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgIyBjYW5kaWRhdGUgZ2VuZXJhdG9yIGFuZCBhIGRpZmZlcmVudCBzZWxlY3Rvci4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJbiB0aGUgY2FzZSBvZiAiPiBmb28iLCB0aGUgY2FuZGlkYXRlIGdlbmVyYXRvciBpcworICAgICAgICAgICAgICAgICMgb25lIHRoYXQgeWllbGRzIGEgdGFnJ3MgZGlyZWN0IGNoaWxkcmVuICgiPiIpLCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSBzZWxlY3RvciBpcyAiZm9vIi4KKyAgICAgICAgICAgICAgICBuZXh0X3Rva2VuID0gdG9rZW5zW2luZGV4KzFdCisgICAgICAgICAgICAgICAgZGVmIHJlY3Vyc2l2ZV9zZWxlY3QodGFnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgICBDYWxsaW5nIHNlbGVjdCgiJXMiKSByZWN1cnNpdmVseSBvbiAlcyAlcycgJSAobmV4dF90b2tlbiwgdGFnLm5hbWUsIHRhZy5hdHRycykKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctJyAqIDQwCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHRhZy5zZWxlY3QobmV4dF90b2tlbiwgcmVjdXJzaXZlX2NhbmRpZGF0ZV9nZW5lcmF0b3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICcoUmVjdXJzaXZlIHNlbGVjdCBwaWNrZWQgdXAgY2FuZGlkYXRlICVzICVzKScgJSAoaS5uYW1lLCBpLmF0dHJzKQorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLScgKiA0MAorICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IHJlY3Vyc2l2ZV9zZWxlY3QKKyAgICAgICAgICAgIGVsaWYgX2NhbmRpZGF0ZV9nZW5lcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEJ5IGRlZmF1bHQsIGEgdGFnJ3MgY2FuZGlkYXRlcyBhcmUgYWxsIG9mIGl0cworICAgICAgICAgICAgICAgICMgY2hpbGRyZW4uIElmIHRhZ19uYW1lIGlzIGRlZmluZWQsIG9ubHkgeWllbGQgdGFncworICAgICAgICAgICAgICAgICMgd2l0aCB0aGF0IG5hbWUuCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBpZiB0YWdfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrID0gIlthbnldIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgPSB0YWdfbmFtZQorICAgICAgICAgICAgICAgICAgICBwcmludCAnICAgRGVmYXVsdCBjYW5kaWRhdGUgZ2VuZXJhdG9yLCB0YWcgbmFtZT0iJXMiJyAlIGNoZWNrCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2VsZWN0X2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgcmVkdW5kYW50IHdpdGggbGF0ZXIgY29kZSwgYnV0IGl0IHN0b3BzCisgICAgICAgICAgICAgICAgICAgICMgYSBidW5jaCBvZiBib2d1cyB0YWdzIGZyb20gY2x1dHRlcmluZyB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBkZWJ1ZyBsb2cuCisgICAgICAgICAgICAgICAgICAgIGRlZiBkZWZhdWx0X2NhbmRpZGF0ZV9nZW5lcmF0b3IodGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiB0YWcuZGVzY2VuZGFudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2hpbGQsIFRhZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFnX25hbWUgYW5kIG5vdCBjaGlsZC5uYW1lID09IHRhZ19uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNoaWxkCisgICAgICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGRlZmF1bHRfY2FuZGlkYXRlX2dlbmVyYXRvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF91c2VfY2FuZGlkYXRlX2dlbmVyYXRvciA9IGxhbWJkYSB0YWc6IHRhZy5kZXNjZW5kYW50cworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IgPSBfY2FuZGlkYXRlX2dlbmVyYXRvcgorCisgICAgICAgICAgICBuZXdfY29udGV4dCA9IFtdCisgICAgICAgICAgICBuZXdfY29udGV4dF9pZHMgPSBzZXQoW10pCisgICAgICAgICAgICBmb3IgdGFnIGluIGN1cnJlbnRfY29udGV4dDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICAgUnVubmluZyBjYW5kaWRhdGUgZ2VuZXJhdG9yIG9uICVzICVzIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5uYW1lLCByZXByKHRhZy5hdHRycykpCisgICAgICAgICAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiBfdXNlX2NhbmRpZGF0ZV9nZW5lcmF0b3IodGFnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2FuZGlkYXRlLCBUYWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGFnX25hbWUgYW5kIGNhbmRpZGF0ZS5uYW1lICE9IHRhZ19uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hlY2tlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGVja2VyKGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNoZWNrZXIgaGFzIGRlY2lkZWQgd2Ugc2hvdWxkIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcnVuIHRoZSBnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hlY2tlciBpcyBOb25lIG9yIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgICBTVUNDRVNTICVzICVzIiAlIChjYW5kaWRhdGUubmFtZSwgcmVwcihjYW5kaWRhdGUuYXR0cnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaWQoY2FuZGlkYXRlKSBub3QgaW4gbmV3X2NvbnRleHRfaWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYSB0YWcgbWF0Y2hlcyBhIHNlbGVjdG9yIG1vcmUgdGhhbiBvbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgaW5jbHVkZSBpdCBpbiB0aGUgY29udGV4dCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY29udGV4dC5hcHBlbmQoY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jb250ZXh0X2lkcy5hZGQoaWQoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9zZWxlY3RfZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgICBGQUlMVVJFICVzICVzIiAlIChjYW5kaWRhdGUubmFtZSwgcmVwcihjYW5kaWRhdGUuYXR0cnMpKQorCisgICAgICAgICAgICBjdXJyZW50X2NvbnRleHQgPSBuZXdfY29udGV4dAorCisgICAgICAgIGlmIHNlbGYuX3NlbGVjdF9kZWJ1ZzoKKyAgICAgICAgICAgIHByaW50ICJGaW5hbCB2ZXJkaWN0OiIKKyAgICAgICAgICAgIGZvciBpIGluIGN1cnJlbnRfY29udGV4dDoKKyAgICAgICAgICAgICAgICBwcmludCAiICVzICVzIiAlIChpLm5hbWUsIGkuYXR0cnMpCisgICAgICAgIHJldHVybiBjdXJyZW50X2NvbnRleHQKKworICAgICMgT2xkIG5hbWVzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAgIGRlZiBjaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hpbGRyZW4KKworICAgIGRlZiByZWN1cnNpdmVDaGlsZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVzY2VuZGFudHMKKworICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6CisgICAgICAgICIiIlRoaXMgd2FzIGtpbmQgb2YgbWlzbGVhZGluZyBiZWNhdXNlIGhhc19rZXkoKSAoYXR0cmlidXRlcykKKyAgICAgICAgd2FzIGRpZmZlcmVudCBmcm9tIF9faW5fXyAoY29udGVudHMpLiBoYXNfa2V5KCkgaXMgZ29uZSBpbgorICAgICAgICBQeXRob24gMywgYW55d2F5LiIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKCdoYXNfa2V5IGlzIGRlcHJlY2F0ZWQuIFVzZSBoYXNfYXR0cigiJXMiKSBpbnN0ZWFkLicgJSAoCisgICAgICAgICAgICAgICAga2V5KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFzX2F0dHIoa2V5KQorCisjIE5leHQsIGEgY291cGxlIGNsYXNzZXMgdG8gcmVwcmVzZW50IHF1ZXJpZXMgYW5kIHRoZWlyIHJlc3VsdHMuCitjbGFzcyBTb3VwU3RyYWluZXIob2JqZWN0KToKKyAgICAiIiJFbmNhcHN1bGF0ZXMgYSBudW1iZXIgb2Ygd2F5cyBvZiBtYXRjaGluZyBhIG1hcmt1cCBlbGVtZW50ICh0YWcgb3IKKyAgICB0ZXh0KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZShuYW1lKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRycywgZGljdCk6CisgICAgICAgICAgICAjIFRyZWF0IGEgbm9uLWRpY3QgdmFsdWUgZm9yIGF0dHJzIGFzIGEgc2VhcmNoIGZvciB0aGUgJ2NsYXNzJworICAgICAgICAgICAgIyBhdHRyaWJ1dGUuCisgICAgICAgICAgICBrd2FyZ3NbJ2NsYXNzJ10gPSBhdHRycworICAgICAgICAgICAgYXR0cnMgPSBOb25lCisKKyAgICAgICAgaWYgJ2NsYXNzXycgaW4ga3dhcmdzOgorICAgICAgICAgICAgIyBUcmVhdCBjbGFzc189ImZvbyIgYXMgYSBzZWFyY2ggZm9yIHRoZSAnY2xhc3MnCisgICAgICAgICAgICAjIGF0dHJpYnV0ZSwgb3ZlcnJpZGluZyBhbnkgbm9uLWRpY3QgdmFsdWUgZm9yIGF0dHJzLgorICAgICAgICAgICAga3dhcmdzWydjbGFzcyddID0ga3dhcmdzWydjbGFzc18nXQorICAgICAgICAgICAgZGVsIGt3YXJnc1snY2xhc3NfJ10KKworICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBpZiBhdHRyczoKKyAgICAgICAgICAgICAgICBhdHRycyA9IGF0dHJzLmNvcHkoKQorICAgICAgICAgICAgICAgIGF0dHJzLnVwZGF0ZShrd2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGF0dHJzID0ga3dhcmdzCisgICAgICAgIG5vcm1hbGl6ZWRfYXR0cnMgPSB7fQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRycy5pdGVtcygpOgorICAgICAgICAgICAgbm9ybWFsaXplZF9hdHRyc1trZXldID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZSh2YWx1ZSkKKworICAgICAgICBzZWxmLmF0dHJzID0gbm9ybWFsaXplZF9hdHRycworICAgICAgICBzZWxmLnRleHQgPSBzZWxmLl9ub3JtYWxpemVfc2VhcmNoX3ZhbHVlKHRleHQpCisKKyAgICBkZWYgX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUoc2VsZiwgdmFsdWUpOgorICAgICAgICAjIExlYXZlIGl0IGFsb25lIGlmIGl0J3MgYSBVbmljb2RlIHN0cmluZywgYSBjYWxsYWJsZSwgYQorICAgICAgICAjIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYSBib29sZWFuLCBvciBOb25lLgorICAgICAgICBpZiAoaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSkgb3IgY2FsbGFibGUodmFsdWUpIG9yIGhhc2F0dHIodmFsdWUsICdtYXRjaCcpCisgICAgICAgICAgICBvciBpc2luc3RhbmNlKHZhbHVlLCBib29sKSBvciB2YWx1ZSBpcyBOb25lKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgICMgSWYgaXQncyBhIGJ5dGVzdHJpbmcsIGNvbnZlcnQgaXQgdG8gVW5pY29kZSwgdHJlYXRpbmcgaXQgYXMgVVRGLTguCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoInV0ZjgiKQorCisgICAgICAgICMgSWYgaXQncyBsaXN0bGlrZSwgY29udmVydCBpdCBpbnRvIGEgbGlzdCBvZiBzdHJpbmdzLgorICAgICAgICBpZiBoYXNhdHRyKHZhbHVlLCAnX19pdGVyX18nKToKKyAgICAgICAgICAgIG5ld192YWx1ZSA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBpZiAoaGFzYXR0cih2LCAnX19pdGVyX18nKSBhbmQgbm90IGlzaW5zdGFuY2UodiwgYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZSh2LCB1bmljb2RlKSk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHRoZSB1c2VyJ3MgbWlzdGFrZS4gSW4gdGhlCisgICAgICAgICAgICAgICAgICAgICMgaW50ZXJlc3RzIG9mIGF2b2lkaW5nIGluZmluaXRlIGxvb3BzLCB3ZSdsbCBsZXQKKyAgICAgICAgICAgICAgICAgICAgIyBpdCB0aHJvdWdoIGFzLWlzIHJhdGhlciB0aGFuIGRvaW5nIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZS5hcHBlbmQodikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfdmFsdWUuYXBwZW5kKHNlbGYuX25vcm1hbGl6ZV9zZWFyY2hfdmFsdWUodikpCisgICAgICAgICAgICByZXR1cm4gbmV3X3ZhbHVlCisKKyAgICAgICAgIyBPdGhlcndpc2UsIGNvbnZlcnQgaXQgaW50byBhIFVuaWNvZGUgc3RyaW5nLgorICAgICAgICAjIFRoZSB1bmljb2RlKHN0cigpKSB0aGluZyBpcyBzbyB0aGlzIHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcgb24gUHl0aG9uIDIKKyAgICAgICAgIyBhbmQgUHl0aG9uIDMuCisgICAgICAgIHJldHVybiB1bmljb2RlKHN0cih2YWx1ZSkpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXh0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIlc3wlcyIgJSAoc2VsZi5uYW1lLCBzZWxmLmF0dHJzKQorCisgICAgZGVmIHNlYXJjaF90YWcoc2VsZiwgbWFya3VwX25hbWU9Tm9uZSwgbWFya3VwX2F0dHJzPXt9KToKKyAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgIG1hcmt1cCA9IE5vbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXBfbmFtZSwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cF9uYW1lCisgICAgICAgICAgICBtYXJrdXBfYXR0cnMgPSBtYXJrdXAKKyAgICAgICAgY2FsbF9mdW5jdGlvbl93aXRoX3RhZ19kYXRhID0gKAorICAgICAgICAgICAgaXNpbnN0YW5jZShzZWxmLm5hbWUsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKQorICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cF9uYW1lLCBUYWcpKQorCisgICAgICAgIGlmICgobm90IHNlbGYubmFtZSkKKyAgICAgICAgICAgIG9yIGNhbGxfZnVuY3Rpb25fd2l0aF90YWdfZGF0YQorICAgICAgICAgICAgb3IgKG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYubmFtZSkpCisgICAgICAgICAgICBvciAobm90IG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXBfbmFtZSwgc2VsZi5uYW1lKSkpOgorICAgICAgICAgICAgaWYgY2FsbF9mdW5jdGlvbl93aXRoX3RhZ19kYXRhOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5uYW1lKG1hcmt1cF9uYW1lLCBtYXJrdXBfYXR0cnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIG1hcmt1cF9hdHRyX21hcCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgYXR0ciwgbWF0Y2hfYWdhaW5zdCBpbiBsaXN0KHNlbGYuYXR0cnMuaXRlbXMoKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtYXJrdXBfYXR0cl9tYXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cF9hdHRycywgJ2dldCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cF9hdHRyX21hcCA9IG1hcmt1cF9hdHRycworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBfYXR0cl9tYXAgPSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIG1hcmt1cF9hdHRyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwX2F0dHJfbWFwW2tdID0gdgorICAgICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gbWFya3VwX2F0dHJfbWFwLmdldChhdHRyKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hlcyhhdHRyX3ZhbHVlLCBtYXRjaF9hZ2FpbnN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZiBtYXJrdXA6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXBfbmFtZQorICAgICAgICBpZiBmb3VuZCBhbmQgc2VsZi50ZXh0IGFuZCBub3Qgc2VsZi5fbWF0Y2hlcyhmb3VuZC5zdHJpbmcsIHNlbGYudGV4dCk6CisgICAgICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgc2VhcmNoVGFnID0gc2VhcmNoX3RhZworCisgICAgZGVmIHNlYXJjaChzZWxmLCBtYXJrdXApOgorICAgICAgICAjIHByaW50ICdsb29raW5nIGZvciAlcyBpbiAlcycgJSAoc2VsZiwgbWFya3VwKQorICAgICAgICBmb3VuZCA9IE5vbmUKKyAgICAgICAgIyBJZiBnaXZlbiBhIGxpc3Qgb2YgaXRlbXMsIHNjYW4gaXQgZm9yIGEgdGV4dCBlbGVtZW50IHRoYXQKKyAgICAgICAgIyBtYXRjaGVzLgorICAgICAgICBpZiBoYXNhdHRyKG1hcmt1cCwgJ19faXRlcl9fJykgYW5kIG5vdCBpc2luc3RhbmNlKG1hcmt1cCwgKFRhZywgYmFzZXN0cmluZykpOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gbWFya3VwOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgTmF2aWdhYmxlU3RyaW5nKSBcCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNlYXJjaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgSWYgaXQncyBhIFRhZywgbWFrZSBzdXJlIGl0cyBuYW1lIG9yIGF0dHJpYnV0ZXMgbWF0Y2guCisgICAgICAgICMgRG9uJ3QgYm90aGVyIHdpdGggVGFncyBpZiB3ZSdyZSBzZWFyY2hpbmcgZm9yIHRleHQuCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi50ZXh0IG9yIHNlbGYubmFtZSBvciBzZWxmLmF0dHJzOgorICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5zZWFyY2hfdGFnKG1hcmt1cCkKKyAgICAgICAgIyBJZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4dCBtYXRjaGVzLgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJpbmcpIG9yIFwKKyAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShtYXJrdXAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYubmFtZSBhbmQgbm90IHNlbGYuYXR0cnMgYW5kIHNlbGYuX21hdGNoZXMobWFya3VwLCBzZWxmLnRleHQpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyBob3cgdG8gbWF0Y2ggYWdhaW5zdCBhICVzIiAlIG1hcmt1cC5fX2NsYXNzX18pCisgICAgICAgIHJldHVybiBmb3VuZAorCisgICAgZGVmIF9tYXRjaGVzKHNlbGYsIG1hcmt1cCwgbWF0Y2hfYWdhaW5zdCk6CisgICAgICAgICMgcHJpbnQgdSJNYXRjaGluZyAlcyBhZ2FpbnN0ICVzIiAlIChtYXJrdXAsIG1hdGNoX2FnYWluc3QpCisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCBsaXN0KSBvciBpc2luc3RhbmNlKG1hcmt1cCwgdHVwbGUpOgorICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiB3aGVuIHNlYXJjaGluZyBhIG11bHRpLXZhbHVlZCBhdHRyaWJ1dGUKKyAgICAgICAgICAgICMgbGlrZSAnY2xhc3MnLgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobWF0Y2hfYWdhaW5zdCwgdW5pY29kZSkKKyAgICAgICAgICAgICAgICBhbmQgJyAnIGluIG1hdGNoX2FnYWluc3QpOgorICAgICAgICAgICAgICAgICMgQSBiaXQgb2YgYSBzcGVjaWFsIGNhc2UuIElmIHRoZXkgdHJ5IHRvIG1hdGNoICJmb28KKyAgICAgICAgICAgICAgICAjIGJhciIgb24gYSBtdWx0aXZhbHVlIGF0dHJpYnV0ZSdzIHZhbHVlLCBvbmx5IGFjY2VwdAorICAgICAgICAgICAgICAgICMgdGhlIGxpdGVyYWwgdmFsdWUgImZvbyBiYXIiCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgWFhYIFRoaXMgaXMgZ29pbmcgdG8gYmUgcHJldHR5IHNsb3cgYmVjYXVzZSB3ZSBrZWVwCisgICAgICAgICAgICAgICAgIyBzcGxpdHRpbmcgbWF0Y2hfYWdhaW5zdC4gQnV0IGl0IHNob3VsZG4ndCBjb21lIHVwCisgICAgICAgICAgICAgICAgIyB0b28gb2Z0ZW4uCisgICAgICAgICAgICAgICAgcmV0dXJuICh3aGl0ZXNwYWNlX3JlLnNwbGl0KG1hdGNoX2FnYWluc3QpID09IG1hcmt1cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbWFya3VwOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9tYXRjaGVzKGl0ZW0sIG1hdGNoX2FnYWluc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBtYXRjaF9hZ2FpbnN0IGlzIFRydWU6CisgICAgICAgICAgICAjIFRydWUgbWF0Y2hlcyBhbnkgbm9uLU5vbmUgdmFsdWUuCisgICAgICAgICAgICByZXR1cm4gbWFya3VwIGlzIG5vdCBOb25lCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXRjaF9hZ2FpbnN0LCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hfYWdhaW5zdChtYXJrdXApCisKKyAgICAgICAgIyBDdXN0b20gY2FsbGFibGVzIHRha2UgdGhlIHRhZyBhcyBhbiBhcmd1bWVudCwgYnV0IGFsbAorICAgICAgICAjIG90aGVyIHdheXMgb2YgbWF0Y2hpbmcgbWF0Y2ggdGhlIHRhZyBuYW1lIGFzIGEgc3RyaW5nLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmt1cCwgVGFnKToKKyAgICAgICAgICAgIG1hcmt1cCA9IG1hcmt1cC5uYW1lCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBgbWFya3VwYCBpcyBlaXRoZXIgYSBVbmljb2RlIHN0cmluZywgb3IgTm9uZS4KKyAgICAgICAgbWFya3VwID0gc2VsZi5fbm9ybWFsaXplX3NlYXJjaF92YWx1ZShtYXJrdXApCisKKyAgICAgICAgaWYgbWFya3VwIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vbmUgbWF0Y2hlcyBOb25lLCBGYWxzZSwgYW4gZW1wdHkgc3RyaW5nLCBhbiBlbXB0eSBsaXN0LCBhbmQgc28gb24uCisgICAgICAgICAgICByZXR1cm4gbm90IG1hdGNoX2FnYWluc3QKKworICAgICAgICBpZiBpc2luc3RhbmNlKG1hdGNoX2FnYWluc3QsIHVuaWNvZGUpOgorICAgICAgICAgICAgIyBFeGFjdCBzdHJpbmcgbWF0Y2gKKyAgICAgICAgICAgIHJldHVybiBtYXJrdXAgPT0gbWF0Y2hfYWdhaW5zdAorCisgICAgICAgIGlmIGhhc2F0dHIobWF0Y2hfYWdhaW5zdCwgJ21hdGNoJyk6CisgICAgICAgICAgICAjIFJlZ2V4cCBtYXRjaAorICAgICAgICAgICAgcmV0dXJuIG1hdGNoX2FnYWluc3Quc2VhcmNoKG1hcmt1cCkKKworICAgICAgICBpZiBoYXNhdHRyKG1hdGNoX2FnYWluc3QsICdfX2l0ZXJfXycpOgorICAgICAgICAgICAgIyBUaGUgbWFya3VwIG11c3QgYmUgYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBzb21ldGhpbmcKKyAgICAgICAgICAgICMgaW4gdGhlIGl0ZXJhYmxlLgorICAgICAgICAgICAgcmV0dXJuIG1hcmt1cCBpbiBtYXRjaF9hZ2FpbnN0CisKKworY2xhc3MgUmVzdWx0U2V0KGxpc3QpOgorICAgICIiIkEgUmVzdWx0U2V0IGlzIGp1c3QgYSBsaXN0IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIFNvdXBTdHJhaW5lcgorICAgIHRoYXQgY3JlYXRlZCBpdC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCByZXN1bHQ9KCkpOgorICAgICAgICBzdXBlcihSZXN1bHRTZXQsIHNlbGYpLl9faW5pdF9fKHJlc3VsdCkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC90ZXN0aW5nLnB5IGIvYml0YmFrZS9saWIvYnM0L3Rlc3RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NDk1YQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JzNC90ZXN0aW5nLnB5CkBAIC0wLDAgKzEsNTkyIEBACisiIiJIZWxwZXIgY2xhc3NlcyBmb3IgdGVzdHMuIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIGJzNCBpbXBvcnQgQmVhdXRpZnVsU291cAorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgKAorICAgIENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUsCisgICAgQ29tbWVudCwKKyAgICBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIERvY3R5cGUsCisgICAgU291cFN0cmFpbmVyLAorKQorCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIKK2RlZmF1bHRfYnVpbGRlciA9IEhUTUxQYXJzZXJUcmVlQnVpbGRlcgorCisKK2NsYXNzIFNvdXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBkZWZhdWx0X2J1aWxkZXIoKQorCisgICAgZGVmIHNvdXAoc2VsZiwgbWFya3VwLCAqKmt3YXJncyk6CisgICAgICAgICIiIkJ1aWxkIGEgQmVhdXRpZnVsIFNvdXAgb2JqZWN0IGZyb20gbWFya3VwLiIiIgorICAgICAgICBidWlsZGVyID0ga3dhcmdzLnBvcCgnYnVpbGRlcicsIHNlbGYuZGVmYXVsdF9idWlsZGVyKQorICAgICAgICByZXR1cm4gQmVhdXRpZnVsU291cChtYXJrdXAsIGJ1aWxkZXI9YnVpbGRlciwgKiprd2FyZ3MpCisKKyAgICBkZWYgZG9jdW1lbnRfZm9yKHNlbGYsIG1hcmt1cCk6CisgICAgICAgICIiIlR1cm4gYW4gSFRNTCBmcmFnbWVudCBpbnRvIGEgZG9jdW1lbnQuCisKKyAgICAgICAgVGhlIGRldGFpbHMgZGVwZW5kIG9uIHRoZSBidWlsZGVyLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9idWlsZGVyLnRlc3RfZnJhZ21lbnRfdG9fZG9jdW1lbnQobWFya3VwKQorCisgICAgZGVmIGFzc2VydFNvdXBFcXVhbHMoc2VsZiwgdG9fcGFyc2UsIGNvbXBhcmVfcGFyc2VkX3RvPU5vbmUpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5kZWZhdWx0X2J1aWxkZXIKKyAgICAgICAgb2JqID0gQmVhdXRpZnVsU291cCh0b19wYXJzZSwgYnVpbGRlcj1idWlsZGVyKQorICAgICAgICBpZiBjb21wYXJlX3BhcnNlZF90byBpcyBOb25lOgorICAgICAgICAgICAgY29tcGFyZV9wYXJzZWRfdG8gPSB0b19wYXJzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2Zvcihjb21wYXJlX3BhcnNlZF90bykpCisKKworY2xhc3MgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0KG9iamVjdCk6CisKKyAgICAiIiJBIGJhc2ljIHRlc3Qgb2YgYSB0cmVlYnVpbGRlcidzIGNvbXBldGVuY2UuCisKKyAgICBBbnkgSFRNTCB0cmVlYnVpbGRlciwgcHJlc2VudCBvciBmdXR1cmUsIHNob3VsZCBiZSBhYmxlIHRvIHBhc3MKKyAgICB0aGVzZSB0ZXN0cy4gV2l0aCBpbnZhbGlkIG1hcmt1cCwgdGhlcmUncyByb29tIGZvciBpbnRlcnByZXRhdGlvbiwKKyAgICBhbmQgZGlmZmVyZW50IHBhcnNlcnMgY2FuIGhhbmRsZSBpdCBkaWZmZXJlbnRseS4gQnV0IHdpdGggdGhlCisgICAgbWFya3VwIGluIHRoZXNlIHRlc3RzLCB0aGVyZSdzIG5vdCBtdWNoIHJvb20gZm9yIGludGVycHJldGF0aW9uLgorICAgICIiIgorCisgICAgZGVmIGFzc2VydERvY3R5cGVIYW5kbGVkKHNlbGYsIGRvY3R5cGVfZnJhZ21lbnQpOgorICAgICAgICAiIiJBc3NlcnQgdGhhdCBhIGdpdmVuIGRvY3R5cGUgc3RyaW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LiIiIgorICAgICAgICBkb2N0eXBlX3N0ciwgc291cCA9IHNlbGYuX2RvY3VtZW50X3dpdGhfZG9jdHlwZShkb2N0eXBlX2ZyYWdtZW50KQorCisgICAgICAgICMgTWFrZSBzdXJlIGEgRG9jdHlwZSBvYmplY3Qgd2FzIGNyZWF0ZWQuCisgICAgICAgIGRvY3R5cGUgPSBzb3VwLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9jdHlwZS5fX2NsYXNzX18sIERvY3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9jdHlwZSwgZG9jdHlwZV9mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cClbOmxlbihkb2N0eXBlX3N0cildLCBkb2N0eXBlX3N0cikKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkb2N0eXBlIHdhcyBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAjIHBhcnNlIHRyZWUgYW5kIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGRvY3VtZW50IHBhcnNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLnAuY29udGVudHNbMF0sICdmb28nKQorCisgICAgZGVmIF9kb2N1bWVudF93aXRoX2RvY3R5cGUoc2VsZiwgZG9jdHlwZV9mcmFnbWVudCk6CisgICAgICAgICIiIkdlbmVyYXRlIGFuZCBwYXJzZSBhIGRvY3VtZW50IHdpdGggdGhlIGdpdmVuIGRvY3R5cGUuIiIiCisgICAgICAgIGRvY3R5cGUgPSAnPCFET0NUWVBFICVzPicgJSBkb2N0eXBlX2ZyYWdtZW50CisgICAgICAgIG1hcmt1cCA9IGRvY3R5cGUgKyAnXG48cD5mb288L3A+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgcmV0dXJuIGRvY3R5cGUsIHNvdXAKKworICAgIGRlZiB0ZXN0X25vcm1hbF9kb2N0eXBlcyhzZWxmKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIG5vcm1hbCwgZXZlcnlkYXkgSFRNTCBkb2N0eXBlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RG9jdHlwZUhhbmRsZWQoImh0bWwiKQorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKAorICAgICAgICAgICAgJ2h0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiInKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZG9jdHlwZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPCFET0NUWVBFPiIpCisgICAgICAgIGRvY3R5cGUgPSBzb3VwLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIsIGRvY3R5cGUuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X3B1YmxpY19kb2N0eXBlX3dpdGhfdXJsKHNlbGYpOgorICAgICAgICBkb2N0eXBlID0gJ2h0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiJworICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKGRvY3R5cGUpCisKKyAgICBkZWYgdGVzdF9zeXN0ZW1fZG9jdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgnZm9vIFNZU1RFTSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iJykKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfc3lzdGVtX2RvY3R5cGUoc2VsZik6CisgICAgICAgICMgV2UgY2FuIGhhbmRsZSBhIG5hbWVzcGFjZWQgZG9jdHlwZSB3aXRoIGEgc3lzdGVtIElELgorICAgICAgICBzZWxmLmFzc2VydERvY3R5cGVIYW5kbGVkKCd4c2w6c3R5bGVzaGVldCBTWVNURU0gImh0bWxlbnQuZHRkIicpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3B1YmxpY19kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBuYW1lc3BhY2VkIGRvY3R5cGUgd2l0aCBhIHB1YmxpYyBpZC4KKyAgICAgICAgc2VsZi5hc3NlcnREb2N0eXBlSGFuZGxlZCgneHNsOnN0eWxlc2hlZXQgUFVCTElDICJodG1sZW50LmR0ZCInKQorCisgICAgZGVmIHRlc3RfcmVhbF94aHRtbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIiQSByZWFsIFhIVE1MIGRvY3VtZW50IHNob3VsZCBjb21lIG91dCBtb3JlIG9yIGxlc3MgdGhlIHNhbWUgYXMgaXQgd2VudCBpbi4iIiIKKyAgICAgICAgbWFya3VwID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPjx0aXRsZT5IZWxsby48L3RpdGxlPjwvaGVhZD4KKzxib2R5Pkdvb2RieWUuPC9ib2R5PgorPC9odG1sPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCJ1dGYtOCIpLnJlcGxhY2UoYiJcbiIsIGIiIiksCisgICAgICAgICAgICBtYXJrdXAucmVwbGFjZShiIlxuIiwgYiIiKSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICAiIiJNYWtlIHN1cmUgeW91IGNhbiBjb3B5IHRoZSB0cmVlIGJ1aWxkZXIuCisKKyAgICAgICAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgYnVpbGRlciBpcyBwYXJ0IG9mIGEKKyAgICAgICAgQmVhdXRpZnVsU291cCBvYmplY3QsIGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY29weSB0aGF0LgorICAgICAgICAiIiIKKyAgICAgICAgY29weS5kZWVwY29weShzZWxmLmRlZmF1bHRfYnVpbGRlcikKKworICAgIGRlZiB0ZXN0X3BfdGFnX2lzX25ldmVyX2VtcHR5X2VsZW1lbnQoc2VsZik6CisgICAgICAgICIiIkEgPHA+IHRhZyBpcyBuZXZlciBkZXNpZ25hdGVkIGFzIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorCisgICAgICAgIEV2ZW4gaWYgdGhlIG1hcmt1cCBzaG93cyBpdCBhcyBhbiBlbXB0eS1lbGVtZW50IHRhZywgaXQKKyAgICAgICAgc2hvdWxkbid0IGJlIHByZXNlbnRlZCB0aGF0IHdheS4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxwLz4iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvdXAucC5pc19lbXB0eV9lbGVtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLnApLCAiPHA+PC9wPiIpCisKKyAgICBkZWYgdGVzdF91bmNsb3NlZF90YWdzX2dldF9jbG9zZWQoc2VsZik6CisgICAgICAgICIiIkEgdGFnIHRoYXQncyBub3QgY2xvc2VkIGJ5IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50IHNob3VsZCBiZSBjbG9zZWQuCisKKyAgICAgICAgVGhpcyBhcHBsaWVzIHRvIGFsbCB0YWdzIGV4Y2VwdCBlbXB0eS1lbGVtZW50IHRhZ3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPiIsICI8cD48L3A+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8Yj4iLCAiPGI+PC9iPiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8YnI+IiwgIjxici8+IikKKworICAgIGRlZiB0ZXN0X2JyX2lzX2Fsd2F5c19lbXB0eV9lbGVtZW50X3RhZyhzZWxmKToKKyAgICAgICAgIiIiQSA8YnI+IHRhZyBpcyBkZXNpZ25hdGVkIGFzIGFuIGVtcHR5LWVsZW1lbnQgdGFnLgorCisgICAgICAgIFNvbWUgcGFyc2VycyB0cmVhdCA8YnI+PC9icj4gYXMgb25lIDxici8+IHRhZywgc29tZSBwYXJzZXJzIGFzCisgICAgICAgIHR3byB0YWdzLCBidXQgaXQgc2hvdWxkIGFsd2F5cyBiZSBhbiBlbXB0eS1lbGVtZW50IHRhZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxicj48L2JyPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VwLmJyLmlzX2VtcHR5X2VsZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNvdXAuYnIpLCAiPGJyLz4iKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2Zvcm1hdHRpbmdfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPGVtPjxlbT48L2VtPjwvZW0+IikKKworICAgIGRlZiB0ZXN0X2NvbW1lbnQoc2VsZik6CisgICAgICAgICMgQ29tbWVudHMgYXJlIHJlcHJlc2VudGVkIGFzIENvbW1lbnQgb2JqZWN0cy4KKyAgICAgICAgbWFya3VwID0gIjxwPmZvbzwhLS1mb29iYXItLT5iYXo8L3A+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobWFya3VwKQorCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBjb21tZW50ID0gc291cC5maW5kKHRleHQ9ImZvb2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWVudC5fX2NsYXNzX18sIENvbW1lbnQpCisKKyAgICAgICAgIyBUaGUgY29tbWVudCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvbyA9IHNvdXAuZmluZCh0ZXh0PSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1lbnQsIGZvby5uZXh0X2VsZW1lbnQpCisgICAgICAgIGJheiA9IHNvdXAuZmluZCh0ZXh0PSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1lbnQsIGJhei5wcmV2aW91c19lbGVtZW50KQorCisgICAgZGVmIHRlc3RfcHJlc2VydmVkX3doaXRlc3BhY2VfaW5fcHJlX2FuZF90ZXh0YXJlYShzZWxmKToKKyAgICAgICAgIiIiV2hpdGVzcGFjZSBtdXN0IGJlIHByZXNlcnZlZCBpbiA8cHJlPiBhbmQgPHRleHRhcmVhPiB0YWdzLiIiIgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwcmU+ICAgPC9wcmU+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8dGV4dGFyZWE+IHdvbyAgPC90ZXh0YXJlYT4iKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2lubGluZV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIiIiSW5saW5lIGVsZW1lbnRzIGNhbiBiZSBuZXN0ZWQgaW5kZWZpbml0ZWx5LiIiIgorICAgICAgICBiX3RhZyA9ICI8Yj5JbnNpZGUgYSBCIHRhZzwvYj4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhiX3RhZykKKworICAgICAgICBuZXN0ZWRfYl90YWcgPSAiPHA+QSA8aT5uZXN0ZWQgPGI+dGFnPC9iPjwvaT48L3A+IgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobmVzdGVkX2JfdGFnKQorCisgICAgICAgIGRvdWJsZV9uZXN0ZWRfYl90YWcgPSAiPHA+QSA8YT5kb3VibHkgPGk+bmVzdGVkIDxiPnRhZzwvYj48L2k+PC9hPjwvcD4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyhuZXN0ZWRfYl90YWcpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfYmxvY2tfbGV2ZWxfZWxlbWVudHMoc2VsZik6CisgICAgICAgICIiIkJsb2NrIGVsZW1lbnRzIGNhbiBiZSBuZXN0ZWQuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoJzxibG9ja3F1b3RlPjxwPjxiPkZvbzwvYj48L3A+PC9ibG9ja3F1b3RlPicpCisgICAgICAgIGJsb2NrcXVvdGUgPSBzb3VwLmJsb2NrcXVvdGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibG9ja3F1b3RlLnAuYi5zdHJpbmcsICdGb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJsb2NrcXVvdGUuYi5zdHJpbmcsICdGb28nKQorCisgICAgZGVmIHRlc3RfY29ycmVjdGx5X25lc3RlZF90YWJsZXMoc2VsZik6CisgICAgICAgICIiIk9uZSB0YWJsZSBjYW4gZ28gaW5zaWRlIGFub3RoZXIgb25lLiIiIgorICAgICAgICBtYXJrdXAgPSAoJzx0YWJsZSBpZD0iMSI+JworICAgICAgICAgICAgICAgICAgJzx0cj4nCisgICAgICAgICAgICAgICAgICAiPHRkPkhlcmUncyBhbm90aGVyIHRhYmxlOiIKKyAgICAgICAgICAgICAgICAgICc8dGFibGUgaWQ9IjIiPicKKyAgICAgICAgICAgICAgICAgICc8dHI+PHRkPmZvbzwvdGQ+PC90cj4nCisgICAgICAgICAgICAgICAgICAnPC90YWJsZT48L3RkPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgbWFya3VwLAorICAgICAgICAgICAgJzx0YWJsZSBpZD0iMSI+PHRyPjx0ZD5IZXJlXCdzIGFub3RoZXIgdGFibGU6JworICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+PHRyPjx0ZD5mb288L3RkPjwvdHI+PC90YWJsZT4nCisgICAgICAgICAgICAnPC90ZD48L3RyPjwvdGFibGU+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHRhYmxlPjx0aGVhZD48dHI+PHRkPkZvbzwvdGQ+PC90cj48L3RoZWFkPiIKKyAgICAgICAgICAgICI8dGJvZHk+PHRyPjx0ZD5CYXI8L3RkPjwvdHI+PC90Ym9keT4iCisgICAgICAgICAgICAiPHRmb290Pjx0cj48dGQ+QmF6PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT4iKQorCisgICAgZGVmIHRlc3RfZGVlcGx5X25lc3RlZF9tdWx0aXZhbHVlZF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgaHRtbDVsaWIgY2FuIHNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSB0YWcgbWFueSB0aW1lcworICAgICAgICAjIGFzIGl0IHJlYXJyYW5nZXMgdGhlIHRyZWUuIFRoaXMgaGFzIGNhdXNlZCBwcm9ibGVtcyB3aXRoCisgICAgICAgICMgbXVsdGl2YWx1ZWQgYXR0cmlidXRlcy4KKyAgICAgICAgbWFya3VwID0gJzx0YWJsZT48ZGl2PjxkaXYgY2xhc3M9ImNzcyI+PC9kaXY+PC9kaXY+PC90YWJsZT4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiY3NzIl0sIHNvdXAuZGl2LmRpdlsnY2xhc3MnXSkKKworICAgIGRlZiB0ZXN0X2FuZ2xlX2JyYWNrZXRzX2luX2F0dHJpYnV0ZV92YWx1ZXNfYXJlX2VzY2FwZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPGEgYj0iPGE+Ij48L2E+JywgJzxhIGI9IiZsdDthJmd0OyI+PC9hPicpCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19pbl9hdHRyaWJ1dGVzX2NvbnZlcnRlZF90b191bmljb2RlKHNlbGYpOgorICAgICAgICBleHBlY3QgPSB1JzxwIGlkPSJwaVxOe0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREV9YXRhIj48L3A+JworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSYjMjQxO2F0YSI+PC9wPicsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8cCBpZD0icGkmI3hmMTthdGEiPjwvcD4nLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygnPHAgaWQ9InBpJiNYZjE7YXRhIj48L3A+JywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxwIGlkPSJwaSZudGlsZGU7YXRhIj48L3A+JywgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfZW50aXRpZXNfaW5fdGV4dF9jb252ZXJ0ZWRfdG9fdW5pY29kZShzZWxmKToKKyAgICAgICAgZXhwZWN0ID0gdSc8cD5waVxOe0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREV9YXRhPC9wPicKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSYjMjQxO2F0YTwvcD4iLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+cGkmI3hmMTthdGE8L3A+IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPnBpJiNYZjE7YXRhPC9wPiIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5waSZudGlsZGU7YXRhPC9wPiIsIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3F1b3RfZW50aXR5X2NvbnZlcnRlZF90b19xdW90YXRpb25fbWFyayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCI8cD5JIHNhaWQgJnF1b3Q7Z29vZCBkYXkhJnF1b3Q7PC9wPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHA+SSBzYWlkICJnb29kIGRheSEiPC9wPicpCisKKyAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2VfZW50aXR5KHNlbGYpOgorICAgICAgICBleHBlY3QgPSB1IlxOe1JFUExBQ0VNRU5UIENIQVJBQ1RFUn0iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiJiMxMDAwMDAwMDAwMDAwMDsiLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiJiN4MTAwMDAwMDAwMDAwMDA7IiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIiYjMTAwMDAwMDAwMDsiLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBhcnRfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgIk1vc3RseSB0byBwcmV2ZW50IGEgcmVjdXJyZW5jZSBvZiBhIGJ1ZyBpbiB0aGUgaHRtbDVsaWIgdHJlZWJ1aWxkZXIuIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8aHRtbD48aDI+XG5mb288L2gyPjxwPjwvcD48L2h0bWw+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicCIsIHNvdXAuaDIuc3RyaW5nLm5leHRfZWxlbWVudC5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJwIiwgc291cC5wLm5hbWUpCisKKyAgICBkZWYgdGVzdF9iYXNpY19uYW1lc3BhY2VzKHNlbGYpOgorICAgICAgICAiIiJQYXJzZXJzIGRvbid0IG5lZWQgdG8gKnVuZGVyc3RhbmQqIG5hbWVzcGFjZXMsIGJ1dCBhdCB0aGUKKyAgICAgICAgdmVyeSBsZWFzdCB0aGV5IHNob3VsZCBub3QgY2hva2Ugb24gbmFtZXNwYWNlcyBvciBsb3NlCisgICAgICAgIGRhdGEuIiIiCisKKyAgICAgICAgbWFya3VwID0gYic8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6bWF0aG1sPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48aGVhZD48L2hlYWQ+PGJvZHk+PG1hdGhtbDptc3FydD40PC9tYXRobWw6bXNxcnQ+PGIgc3ZnOmZpbGw9InJlZCI+PC9iPjwvYm9keT48L2h0bWw+JworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJrdXAsIHNvdXAuZW5jb2RlKCkpCisgICAgICAgIGh0bWwgPSBzb3VwLmh0bWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsIHNvdXAuaHRtbFsneG1sbnMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJywgc291cC5odG1sWyd4bWxuczptYXRobWwnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIHNvdXAuaHRtbFsneG1sbnM6c3ZnJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXZhbHVlZF9hdHRyaWJ1dGVfdmFsdWVfYmVjb21lc19saXN0KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiJzxhIGNsYXNzPSJmb28gYmFyIj4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnZm9vJywgJ2JhciddLCBzb3VwLmFbJ2NsYXNzJ10pCisKKyAgICAjCisgICAgIyBHZW5lcmFsbHkgc3BlYWtpbmcsIHRlc3RzIGJlbG93IHRoaXMgcG9pbnQgYXJlIG1vcmUgdGVzdHMgb2YKKyAgICAjIEJlYXV0aWZ1bCBTb3VwIHRoYW4gdGVzdHMgb2YgdGhlIHRyZWUgYnVpbGRlcnMuIEJ1dCBwYXJzZXJzIGFyZQorICAgICMgd2VpcmQsIHNvIHdlIHJ1biB0aGVzZSB0ZXN0cyBzZXBhcmF0ZWx5IGZvciBldmVyeSB0cmVlIGJ1aWxkZXIKKyAgICAjIHRvIGRldGVjdCBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtLgorICAgICMKKworICAgIGRlZiB0ZXN0X2Nhbl9wYXJzZV91bmljb2RlX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIEEgc2VlbWluZ2x5IGlubm9jdW91cyBkb2N1bWVudC4uLiBidXQgaXQncyBpbiBVbmljb2RlISBBbmQKKyAgICAgICAgIyBpdCBjb250YWlucyBjaGFyYWN0ZXJzIHRoYXQgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlCisgICAgICAgICMgZW5jb2RpbmcgZm91bmQgaW4gdGhlICBkZWNsYXJhdGlvbiEgVGhlIGhvcnJvciEKKyAgICAgICAgbWFya3VwID0gdSc8aHRtbD48aGVhZD48bWV0YSBlbmNvZGluZz0iZXVjLWpwIj48L2hlYWQ+PGJvZHk+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9ib2R5PicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdTYWNyXHhlOSBibGV1IScsIHNvdXAuYm9keS5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9zb3Vwc3RyYWluZXIoc2VsZik6CisgICAgICAgICIiIlBhcnNlcnMgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIFNvdXBTdHJhaW5lcnMuIiIiCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKCJiIikKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiQSA8Yj5ib2xkPC9iPiA8bWV0YS8+IDxpPnN0YXRlbWVudDwvaT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX29ubHk9c3RyYWluZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgIjxiPmJvbGQ8L2I+IikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9xdW90ZV9hdHRyaWJ1dGVfdmFsdWVzX2JlY29tZV9kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxmb28gYXR0cj0nYmFyJz48L2Zvbz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxmb28gYXR0cj0iYmFyIj48L2Zvbz4nKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX3ZhbHVlc193aXRoX25lc3RlZF9xdW90ZXNfYXJlX2xlZnRfYWxvbmUoc2VsZik6CisgICAgICAgIHRleHQgPSAiIiI8Zm9vIGF0dHI9J2JhciAiYnJhd2xzIiBoYXBwZW4nPmE8L2Zvbz4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKHRleHQpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfdmFsdWVzX3dpdGhfZG91YmxlX25lc3RlZF9xdW90ZXNfZ2V0X3F1b3RlZChzZWxmKToKKyAgICAgICAgdGV4dCA9ICIiIjxmb28gYXR0cj0nYmFyICJicmF3bHMiIGhhcHBlbic+YTwvZm9vPiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNvdXAuZm9vWydhdHRyJ10gPSAnQnJhd2xzIGhhcHBlbiBhdCAiQm9iXCdzIEJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgIHNvdXAuZm9vLmRlY29kZSgpLAorICAgICAgICAgICAgIiIiPGZvbyBhdHRyPSJCcmF3bHMgaGFwcGVuIGF0ICZxdW90O0JvYlwncyBCYXImcXVvdDsiPmE8L2Zvbz4iIiIpCisKKyAgICBkZWYgdGVzdF9hbXBlcnNhbmRfaW5fYXR0cmlidXRlX3ZhbHVlX2dldHNfZXNjYXBlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKCc8dGhpcyBpcz0icmVhbGx5IG1lc3NlZCB1cCAmIHN0dWZmIj48L3RoaXM+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGhpcyBpcz0icmVhbGx5IG1lc3NlZCB1cCAmYW1wOyBzdHVmZiI+PC90aGlzPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgJzxhIGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZz9hPTEmYj0yOzMiPmZvbzwvYT4nLAorICAgICAgICAgICAgJzxhIGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZz9hPTEmYW1wO2I9MjszIj5mb288L2E+JykKKworICAgIGRlZiB0ZXN0X2VzY2FwZWRfYW1wZXJzYW5kX2luX2F0dHJpYnV0ZV92YWx1ZV9pc19sZWZ0X2Fsb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoJzxhIGhyZWY9Imh0dHA6Ly9leGFtcGxlLm9yZz9hPTEmYW1wO2I9MjszIj48L2E+JykKKworICAgIGRlZiB0ZXN0X2VudGl0aWVzX2luX3N0cmluZ3NfY29udmVydGVkX2R1cmluZ19wYXJzaW5nKHNlbGYpOgorICAgICAgICAjIEJvdGggWE1MIGFuZCBIVE1MIGVudGl0aWVzIGFyZSBjb252ZXJ0ZWQgdG8gVW5pY29kZSBjaGFyYWN0ZXJzCisgICAgICAgICMgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgIHRleHQgPSAiPHA+Jmx0OyZsdDtzYWNyJmVhY3V0ZTsmIzMyO2JsZXUhJmd0OyZndDs8L3A+IgorICAgICAgICBleHBlY3RlZCA9IHUiPHA+Jmx0OyZsdDtzYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvcD4iCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscyh0ZXh0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc19jb252ZXJ0ZWRfb25fdGhlX3dheV9pbihzZWxmKToKKyAgICAgICAgIyBNaWNyb3NvZnQgc21hcnQgcXVvdGVzIGFyZSBjb252ZXJ0ZWQgdG8gVW5pY29kZSBjaGFyYWN0ZXJzIGR1cmluZworICAgICAgICAjIHBhcnNpbmcuCisgICAgICAgIHF1b3RlID0gYiI8cD5ceDkxRm9vXHg5MjwvcD4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAocXVvdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLnAuc3RyaW5nLAorICAgICAgICAgICAgdSJcTntMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSS31Gb29cTntSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUkt9IikKKworICAgIGRlZiB0ZXN0X25vbl9icmVha2luZ19zcGFjZXNfY29udmVydGVkX29uX3RoZV93YXlfaW4oc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPiZuYnNwOyZuYnNwOzwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5zdHJpbmcsIHUiXE57Tk8tQlJFQUsgU1BBQ0V9IiAqIDIpCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19jb252ZXJ0ZWRfb25fdGhlX3dheV9vdXQoc2VsZik6CisgICAgICAgIHRleHQgPSAiPHA+Jmx0OyZsdDtzYWNyJmVhY3V0ZTsmIzMyO2JsZXUhJmd0OyZndDs8L3A+IgorICAgICAgICBleHBlY3RlZCA9IHUiPHA+Jmx0OyZsdDtzYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvcD4iLmVuY29kZSgidXRmLTgiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5wLmVuY29kZSgidXRmLTgiKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFsX2lzb19sYXRpbl9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBTbW9rZSB0ZXN0IG9mIGludGVycmVsYXRlZCBmdW5jdGlvbmFsaXR5LCB1c2luZyBhbgorICAgICAgICAjIGVhc3ktdG8tdW5kZXJzdGFuZCBkb2N1bWVudC4KKworICAgICAgICAjIEhlcmUgaXQgaXMgaW4gVW5pY29kZS4gTm90ZSB0aGF0IGl0IGNsYWltcyB0byBiZSBpbiBJU08tTGF0aW4tMS4KKyAgICAgICAgdW5pY29kZV9odG1sID0gdSc8aHRtbD48aGVhZD48bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLUxhdGluLTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPjwvaGVhZD48Ym9keT48cD5TYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSE8L3A+PC9ib2R5PjwvaHRtbD4nCisKKyAgICAgICAgIyBUaGF0J3MgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBlbmNvZGUgaXQgaW50byBJU08tTGF0aW4tMSwgYW5kIHVzZQorICAgICAgICAjIHRoYXQgdG8gdGVzdC4KKyAgICAgICAgaXNvX2xhdGluX2h0bWwgPSB1bmljb2RlX2h0bWwuZW5jb2RlKCJpc28tODg1OS0xIikKKworICAgICAgICAjIFBhcnNlIHRoZSBJU08tTGF0aW4tMSBIVE1MLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGlzb19sYXRpbl9odG1sKQorICAgICAgICAjIEVuY29kZSBpdCB0byBVVEYtOC4KKyAgICAgICAgcmVzdWx0ID0gc291cC5lbmNvZGUoInV0Zi04IikKKworICAgICAgICAjIFdoYXQgZG8gd2UgZXhwZWN0IHRoZSByZXN1bHQgdG8gbG9vayBsaWtlPyBXZWxsLCBpdCB3b3VsZAorICAgICAgICAjIGxvb2sgbGlrZSB1bmljb2RlX2h0bWwsIGV4Y2VwdCB0aGF0IHRoZSBNRVRBIHRhZyB3b3VsZCBzYXkKKyAgICAgICAgIyBVVEYtOCBpbnN0ZWFkIG9mIElTTy1MYXRpbi0xLgorICAgICAgICBleHBlY3RlZCA9IHVuaWNvZGVfaHRtbC5yZXBsYWNlKCJJU08tTGF0aW4tMSIsICJ1dGYtOCIpCisKKyAgICAgICAgIyBBbmQsIG9mIGNvdXJzZSwgaXQgd291bGQgYmUgaW4gVVRGLTgsIG5vdCBVbmljb2RlLgorICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLmVuY29kZSgidXRmLTgiKQorCisgICAgICAgICMgVGEtZGEhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlYWxfc2hpZnRfamlzX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIFNtb2tlIHRlc3QgdG8gbWFrZSBzdXJlIHRoZSBwYXJzZXIgY2FuIGhhbmRsZSBhIGRvY3VtZW50IGluCisgICAgICAgICMgU2hpZnQtSklTIGVuY29kaW5nLCB3aXRob3V0IGNob2tpbmcuCisgICAgICAgIHNoaWZ0X2ppc19odG1sID0gKAorICAgICAgICAgICAgYic8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+PHByZT4nCisgICAgICAgICAgICBiJ1x4ODJceGIxXHg4Mlx4ZWFceDgyXHhjZFNoaWZ0LUpJU1x4ODJceGM1XHg4M1JceDgxW1x4ODNmJworICAgICAgICAgICAgYidceDgzQlx4ODNceDkzXHg4M09ceDgyXHhiM1x4ODJceGVhXHg4Mlx4YmRceDkzXHhmYVx4OTZ7XHg4YycKKyAgICAgICAgICAgIGInXHhlYVx4ODJceGNjXHg4M3RceDgzQFx4ODNDXHg4M1x4OGJceDgyXHhjNVx4ODJceGI3XHg4MUInCisgICAgICAgICAgICBiJzwvcHJlPjwvYm9keT48L2h0bWw+JykKKyAgICAgICAgdW5pY29kZV9odG1sID0gc2hpZnRfamlzX2h0bWwuZGVjb2RlKCJzaGlmdC1qaXMiKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHVuaWNvZGVfaHRtbCkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcGFyc2UgdHJlZSBpcyBjb3JyZWN0bHkgZW5jb2RlZCB0byB2YXJpb3VzCisgICAgICAgICMgZW5jb2RpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCJ1dGYtOCIpLCB1bmljb2RlX2h0bWwuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCJldWNfanAiKSwgdW5pY29kZV9odG1sLmVuY29kZSgiZXVjX2pwIikpCisKKyAgICBkZWYgdGVzdF9yZWFsX2hlYnJld19kb2N1bWVudChzZWxmKToKKyAgICAgICAgIyBBIHJlYWwtd29ybGQgdGVzdCB0byBtYWtlIHN1cmUgd2UgY2FuIGNvbnZlcnQgSVNPLTg4NTktOSAoYQorICAgICAgICAjIEhlYnJldyBlbmNvZGluZykgdG8gVVRGLTguCisgICAgICAgIGhlYnJld19kb2N1bWVudCA9IGInPGh0bWw+PGhlYWQ+PHRpdGxlPkhlYnJldyAoSVNPIDg4NTktOCkgaW4gVmlzdWFsIERpcmVjdGlvbmFsaXR5PC90aXRsZT48L2hlYWQ+PGJvZHk+PGgxPkhlYnJldyAoSVNPIDg4NTktOCkgaW4gVmlzdWFsIERpcmVjdGlvbmFsaXR5PC9oMT5ceGVkXHhlNVx4ZWNceGY5PC9ib2R5PjwvaHRtbD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICBoZWJyZXdfZG9jdW1lbnQsIGZyb21fZW5jb2Rpbmc9Imlzbzg4NTktOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5vcmlnaW5hbF9lbmNvZGluZywgJ2lzbzg4NTktOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgIGhlYnJld19kb2N1bWVudC5kZWNvZGUoImlzbzg4NTktOCIpLmVuY29kZSgidXRmLTgiKSkKKworICAgIGRlZiB0ZXN0X21ldGFfdGFnX3JlZmxlY3RzX2N1cnJlbnRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgSGVyZSdzIHRoZSA8bWV0YT4gdGFnIHNheWluZyB0aGF0IGEgZG9jdW1lbnQgaXMKKyAgICAgICAgIyBlbmNvZGVkIGluIFNoaWZ0LUpJUy4KKyAgICAgICAgbWV0YV90YWcgPSAoJzxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD14LXNqaXMiICcKKyAgICAgICAgICAgICAgICAgICAgJ2h0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPicpCisKKyAgICAgICAgIyBIZXJlJ3MgYSBkb2N1bWVudCBpbmNvcnBvcmF0aW5nIHRoYXQgbWV0YSB0YWcuCisgICAgICAgIHNoaWZ0X2ppc19odG1sID0gKAorICAgICAgICAgICAgJzxodG1sPjxoZWFkPlxuJXNcbicKKyAgICAgICAgICAgICc8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LWxhbmd1YWdlIiBjb250ZW50PSJqYSIvPicKKyAgICAgICAgICAgICc8L2hlYWQ+PGJvZHk+U2hpZnQtSklTIG1hcmt1cCBnb2VzIGhlcmUuJykgJSBtZXRhX3RhZworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHNoaWZ0X2ppc19odG1sKQorCisgICAgICAgICMgUGFyc2UgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGNoYXJzZXQgaXMgc2VlbWluZ2x5IHVuYWZmZWN0ZWQuCisgICAgICAgIHBhcnNlZF9tZXRhID0gc291cC5maW5kKCdtZXRhJywgeydodHRwLWVxdWl2JzogJ0NvbnRlbnQtdHlwZSd9KQorICAgICAgICBjb250ZW50ID0gcGFyc2VkX21ldGFbJ2NvbnRlbnQnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXh0L2h0bWw7IGNoYXJzZXQ9eC1zamlzJywgY29udGVudCkKKworICAgICAgICAjIEJ1dCB0aGF0IHZhbHVlIGlzIGFjdHVhbGx5IGEgQ29udGVudE1ldGFBdHRyaWJ1dGVWYWx1ZSBvYmplY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGNvbnRlbnQsIENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUpKQorCisgICAgICAgICMgQW5kIGl0IHdpbGwgdGFrZSBvbiBhIHZhbHVlIHRoYXQgcmVmbGVjdHMgaXRzIGN1cnJlbnQKKyAgICAgICAgIyBlbmNvZGluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndGV4dC9odG1sOyBjaGFyc2V0PXV0ZjgnLCBjb250ZW50LmVuY29kZSgidXRmOCIpKQorCisgICAgICAgICMgRm9yIHRoZSByZXN0IG9mIHRoZSBzdG9yeSwgc2VlIFRlc3RTdWJzdGl0dXRpb25zIGluCisgICAgICAgICMgdGVzdF90cmVlLnB5LgorCisgICAgZGVmIHRlc3RfaHRtbDVfc3R5bGVfbWV0YV90YWdfcmVmbGVjdHNfY3VycmVudF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBIZXJlJ3MgdGhlIDxtZXRhPiB0YWcgc2F5aW5nIHRoYXQgYSBkb2N1bWVudCBpcworICAgICAgICAjIGVuY29kZWQgaW4gU2hpZnQtSklTLgorICAgICAgICBtZXRhX3RhZyA9ICgnPG1ldGEgaWQ9ImVuY29kaW5nIiBjaGFyc2V0PSJ4LXNqaXMiIC8+JykKKworICAgICAgICAjIEhlcmUncyBhIGRvY3VtZW50IGluY29ycG9yYXRpbmcgdGhhdCBtZXRhIHRhZy4KKyAgICAgICAgc2hpZnRfamlzX2h0bWwgPSAoCisgICAgICAgICAgICAnPGh0bWw+PGhlYWQ+XG4lc1xuJworICAgICAgICAgICAgJzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtbGFuZ3VhZ2UiIGNvbnRlbnQ9ImphIi8+JworICAgICAgICAgICAgJzwvaGVhZD48Ym9keT5TaGlmdC1KSVMgbWFya3VwIGdvZXMgaGVyZS4nKSAlIG1ldGFfdGFnCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoc2hpZnRfamlzX2h0bWwpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgY2hhcnNldCBpcyBzZWVtaW5nbHkgdW5hZmZlY3RlZC4KKyAgICAgICAgcGFyc2VkX21ldGEgPSBzb3VwLmZpbmQoJ21ldGEnLCBpZD0iZW5jb2RpbmciKQorICAgICAgICBjaGFyc2V0ID0gcGFyc2VkX21ldGFbJ2NoYXJzZXQnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd4LXNqaXMnLCBjaGFyc2V0KQorCisgICAgICAgICMgQnV0IHRoYXQgdmFsdWUgaXMgYWN0dWFsbHkgYSBDaGFyc2V0TWV0YUF0dHJpYnV0ZVZhbHVlIG9iamVjdC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoY2hhcnNldCwgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSkpCisKKyAgICAgICAgIyBBbmQgaXQgd2lsbCB0YWtlIG9uIGEgdmFsdWUgdGhhdCByZWZsZWN0cyBpdHMgY3VycmVudAorICAgICAgICAjIGVuY29kaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd1dGY4JywgY2hhcnNldC5lbmNvZGUoInV0ZjgiKSkKKworICAgIGRlZiB0ZXN0X3RhZ193aXRoX25vX2F0dHJpYnV0ZXNfY2FuX2hhdmVfYXR0cmlidXRlc19hZGRlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYuc291cCgiPGE+dGV4dDwvYT4iKQorICAgICAgICBkYXRhLmFbJ2ZvbyddID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnPGEgZm9vPSJiYXIiPnRleHQ8L2E+JywgZGF0YS5hLmRlY29kZSgpKQorCitjbGFzcyBYTUxUcmVlQnVpbGRlclNtb2tlVGVzdChvYmplY3QpOgorCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2dlbmVyYXRlZChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPHJvb3QvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgpLCBiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG48cm9vdC8+JykKKworICAgIGRlZiB0ZXN0X3JlYWxfeGh0bWxfZG9jdW1lbnQoc2VsZik6CisgICAgICAgICIiIkEgcmVhbCBYSFRNTCBkb2N1bWVudCBzaG91bGQgY29tZSBvdXQgKmV4YWN0bHkqIHRoZSBzYW1lIGFzIGl0IHdlbnQgaW4uIiIiCisgICAgICAgIG1hcmt1cCA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD48dGl0bGU+SGVsbG8uPC90aXRsZT48L2hlYWQ+Cis8Ym9keT5Hb29kYnllLjwvYm9keT4KKzwvaHRtbD4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmVuY29kZSgidXRmLTgiKSwgbWFya3VwKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX3Byb2Nlc3Nlc19zY3JpcHRfdGFnX2Zvcl94bWxfZG9jdW1lbnRzKHNlbGYpOgorICAgICAgICBkb2MgPSAiIiIKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICA8L3NjcmlwdD4KKyIiIgorICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkb2MsICJ4bWwiKQorICAgICAgICAjIGx4bWwgd291bGQgaGF2ZSBzdHJpcHBlZCB0aGlzIHdoaWxlIHBhcnNpbmcsIGJ1dCB3ZSBjYW4gYWRkCisgICAgICAgICMgaXQgbGF0ZXIuCisgICAgICAgIHNvdXAuc2NyaXB0LnN0cmluZyA9ICdjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7JworICAgICAgICBlbmNvZGVkID0gc291cC5lbmNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiImbHQ7ICZsdDsgaGV5ICZndDsgJmd0OyIgaW4gZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X2Nhbl9wYXJzZV91bmljb2RlX2RvY3VtZW50KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImV1Yy1qcCI+PHJvb3Q+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9yb290PicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdTYWNyXHhlOSBibGV1IScsIHNvdXAucm9vdC5zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wb3BwaW5nX25hbWVzcGFjZWRfdGFnKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHJzcyB4bWxuczpkYz0iZm9vIj48ZGM6Y3JlYXRvcj5iPC9kYzpjcmVhdG9yPjxkYzpkYXRlPjIwMTItMDctMDJUMjA6MzM6NDJaPC9kYzpkYXRlPjxkYzpyaWdodHM+YzwvZGM6cmlnaHRzPjxpbWFnZT5kPC9pbWFnZT48L3Jzcz4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdW5pY29kZShzb3VwLnJzcyksIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19pbmNsdWRlc19jb3JyZWN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8cm9vdC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZW5jb2RlKCJsYXRpbjEiKSwKKyAgICAgICAgICAgIGInPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ibGF0aW4xIj8+XG48cm9vdC8+JykKKworICAgIGRlZiB0ZXN0X2xhcmdlX3htbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIiQSBsYXJnZSBYTUwgZG9jdW1lbnQgc2hvdWxkIGNvbWUgb3V0IHRoZSBzYW1lIGFzIGl0IHdlbnQgaW4uIiIiCisgICAgICAgIG1hcmt1cCA9IChiJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG48cm9vdD4nCisgICAgICAgICAgICAgICAgICArIGInMCcgKiAoMioqMTIpCisgICAgICAgICAgICAgICAgICArIGInPC9yb290PicpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCJ1dGYtOCIpLCBtYXJrdXApCisKKworICAgIGRlZiB0ZXN0X3RhZ3NfYXJlX2VtcHR5X2VsZW1lbnRfaWZfYW5kX29ubHlfaWZfdGhleV9hcmVfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygiPHA+IiwgIjxwLz4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoIjxwPmZvbzwvcD4iKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlc19hcmVfcHJlc2VydmVkKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHJvb3QgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tLyIgeG1sbnM6Yj0iaHR0cDovL2V4YW1wbGUubmV0LyI+PGE6Zm9vPlRoaXMgdGFnIGlzIGluIHRoZSBhIG5hbWVzcGFjZTwvYTpmb28+PGI6Zm9vPlRoaXMgdGFnIGlzIGluIHRoZSBiIG5hbWVzcGFjZTwvYjpmb28+PC9yb290PicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHJvb3QgPSBzb3VwLnJvb3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL2V4YW1wbGUuY29tLyIsIHJvb3RbJ3htbG5zOmEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL2V4YW1wbGUubmV0LyIsIHJvb3RbJ3htbG5zOmInXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NpbmdfbmFtZXNwYWNlZF90YWcoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cCB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpkYXRlPjIwMDEwNTA0PC9kYzpkYXRlPjwvcD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoc291cC5wKSwgbWFya3VwKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlZF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPGZvbyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj48YmFyIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIvPjwvZm9vPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzb3VwLmZvbyksIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZWRfYXR0cmlidXRlc194bWxfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPGZvbyB4bWw6bGFuZz0iZnIiPmJhcjwvZm9vPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzb3VwLmZvbyksIG1hcmt1cCkKKworY2xhc3MgSFRNTDVUcmVlQnVpbGRlclNtb2tlVGVzdChIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNtb2tlIHRlc3QgZm9yIGEgdHJlZSBidWlsZGVyIHRoYXQgc3VwcG9ydHMgSFRNTDUuIiIiCisKKyAgICBkZWYgdGVzdF9yZWFsX3hodG1sX2RvY3VtZW50KHNlbGYpOgorICAgICAgICAjIFNpbmNlIFhIVE1MIGlzIG5vdCBIVE1MNSwgSFRNTDUgcGFyc2VycyBhcmUgbm90IHRlc3RlZCB0byBoYW5kbGUKKyAgICAgICAgIyBYSFRNTCBkb2N1bWVudHMgaW4gYW55IHBhcnRpY3VsYXIgd2F5LgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9odG1sX3RhZ3NfaGF2ZV9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICI8YT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgc291cC5hLm5hbWVzcGFjZSkKKworICAgIGRlZiB0ZXN0X3N2Z190YWdzX2hhdmVfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHN2Zz48Y2lyY2xlLz48L3N2Zz4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBuYW1lc3BhY2UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLnN2Zy5uYW1lc3BhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLmNpcmNsZS5uYW1lc3BhY2UpCisKKworICAgIGRlZiB0ZXN0X21hdGhtbF90YWdzX2hhdmVfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPG1hdGg+PG1zcXJ0PjU8L21zcXJ0PjwvbWF0aD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2UsIHNvdXAubWF0aC5uYW1lc3BhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlLCBzb3VwLm1zcXJ0Lm5hbWVzcGFjZSkKKworICAgIGRlZiB0ZXN0X3htbF9kZWNsYXJhdGlvbl9iZWNvbWVzX2NvbW1lbnQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PjxodG1sPjwvaHRtbD4nCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzb3VwLmNvbnRlbnRzWzBdLCBDb21tZW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmNvbnRlbnRzWzBdLCAnP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHRtbCIsIHNvdXAuY29udGVudHNbMF0ubmV4dF9lbGVtZW50Lm5hbWUpCisKK2RlZiBza2lwSWYoY29uZGl0aW9uLCByZWFzb24pOgorICAgZGVmIG5vdGhpbmcodGVzdCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICByZXR1cm4gTm9uZQorCisgICBkZWYgZGVjb3JhdG9yKHRlc3RfaXRlbSk6CisgICAgICAgaWYgY29uZGl0aW9uOgorICAgICAgICAgICByZXR1cm4gbm90aGluZworICAgICAgIGVsc2U6CisgICAgICAgICAgIHJldHVybiB0ZXN0X2l0ZW0KKworICAgcmV0dXJuIGRlY29yYXRvcgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYnM0L3Rlc3RzL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvYnM0L3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MmM4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIlRoZSBiZWF1dGlmdWxzb3VwIHRlc3RzLiIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2J1aWxkZXJfcmVnaXN0cnkucHkgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9idWlsZGVyX3JlZ2lzdHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWQxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9idWlsZGVyX3JlZ2lzdHJ5LnB5CkBAIC0wLDAgKzEsMTQxIEBACisiIiJUZXN0cyBvZiB0aGUgYnVpbGRlciByZWdpc3RyeS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gYnM0IGltcG9ydCBCZWF1dGlmdWxTb3VwCitmcm9tIGJzNC5idWlsZGVyIGltcG9ydCAoCisgICAgYnVpbGRlcl9yZWdpc3RyeSBhcyByZWdpc3RyeSwKKyAgICBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIsCisgICAgVHJlZUJ1aWxkZXJSZWdpc3RyeSwKKykKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IEhUTUw1VHJlZUJ1aWxkZXIKKyAgICBIVE1MNUxJQl9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhUTUw1TElCX1BSRVNFTlQgPSBGYWxzZQorCit0cnk6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgKAorICAgICAgICBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwsCisgICAgICAgIExYTUxUcmVlQnVpbGRlciwKKyAgICAgICAgKQorICAgIExYTUxfUFJFU0VOVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBMWE1MX1BSRVNFTlQgPSBGYWxzZQorCisKK2NsYXNzIEJ1aWx0SW5SZWdpc3RyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGJ1aWx0LWluIHJlZ2lzdHJ5IHdpdGggdGhlIGRlZmF1bHQgYnVpbGRlcnMgcmVnaXN0ZXJlZC4iIiIKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uKHNlbGYpOgorICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnZmFzdCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExYTUxUcmVlQnVpbGRlcikKKworICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgncGVybWlzc2l2ZScsICd4bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnc3RyaWN0JywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTFBhcnNlclRyZWVCdWlsZGVyKQorICAgICAgICBpZiBIVE1MNUxJQl9QUkVTRU5UOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWw1bGliJywgJ2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUw1VHJlZUJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfYnlfbWFya3VwX3R5cGUoc2VsZik6CisgICAgICAgIGlmIExYTUxfUFJFU0VOVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCdodG1sJyksIExYTUxUcmVlQnVpbGRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVnaXN0cnkubG9va3VwKCd4bWwnKSwgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ3htbCcpLCBOb25lKQorICAgICAgICAgICAgaWYgSFRNTDVMSUJfUFJFU0VOVDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbCcpLCBIVE1MNVRyZWVCdWlsZGVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbCcpLCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIpCisKKyAgICBkZWYgdGVzdF9uYW1lZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICBpZiBMWE1MX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnbHhtbCcsICd4bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFhNTFRyZWVCdWlsZGVyRm9yWE1MKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2x4bWwnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMWE1MVHJlZUJ1aWxkZXIpCisgICAgICAgIGlmIEhUTUw1TElCX1BSRVNFTlQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZ2lzdHJ5Lmxvb2t1cCgnaHRtbDVsaWInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUw1VHJlZUJ1aWxkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWdpc3RyeS5sb29rdXAoJ2h0bWwucGFyc2VyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlcikKKworICAgIGRlZiB0ZXN0X2JlYXV0aWZ1bHNvdXBfY29uc3RydWN0b3JfZG9lc19sb29rdXAoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIGEgc3RyaW5nLgorICAgICAgICBCZWF1dGlmdWxTb3VwKCIiLCBmZWF0dXJlcz0iaHRtbCIpCisgICAgICAgICMgT3IgYSBsaXN0IG9mIHN0cmluZ3MuCisgICAgICAgIEJlYXV0aWZ1bFNvdXAoIiIsIGZlYXR1cmVzPVsiaHRtbCIsICJmYXN0Il0pCisKKyAgICAgICAgIyBZb3UnbGwgZ2V0IGFuIGV4Y2VwdGlvbiBpZiBCUyBjYW4ndCBmaW5kIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICMgYnVpbGRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQmVhdXRpZnVsU291cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIGZlYXR1cmVzPSJuby1zdWNoLWZlYXR1cmUiKQorCitjbGFzcyBSZWdpc3RyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIFRyZWVCdWlsZGVyUmVnaXN0cnkgY2xhc3MgaW4gZ2VuZXJhbC4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWdpc3RyeSA9IFRyZWVCdWlsZGVyUmVnaXN0cnkoKQorCisgICAgZGVmIGJ1aWxkZXJfZm9yX2ZlYXR1cmVzKHNlbGYsICpmZWF0dXJlX2xpc3QpOgorICAgICAgICBjbHMgPSB0eXBlKCdCdWlsZGVyXycgKyAnXycuam9pbihmZWF0dXJlX2xpc3QpLAorICAgICAgICAgICAgICAgICAgIChvYmplY3QsKSwgeydmZWF0dXJlcycgOiBmZWF0dXJlX2xpc3R9KQorCisgICAgICAgIHNlbGYucmVnaXN0cnkucmVnaXN0ZXIoY2xzKQorICAgICAgICByZXR1cm4gY2xzCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl93aXRoX25vX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygpCisKKyAgICAgICAgIyBTaW5jZSB0aGUgYnVpbGRlciBhZHZlcnRpc2VzIG5vIGZlYXR1cmVzLCB5b3UgY2FuJ3QgZmluZCBpdAorICAgICAgICAjIGJ5IGxvb2tpbmcgdXAgZmVhdHVyZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2ZvbycpLCBOb25lKQorCisgICAgICAgICMgQnV0IHlvdSBjYW4gZmluZCBpdCBieSBkb2luZyBhIGxvb2t1cCB3aXRoIG5vIGZlYXR1cmVzLCBpZgorICAgICAgICAjIHRoaXMgaGFwcGVucyB0byBiZSB0aGUgb25seSByZWdpc3RlcmVkIGJ1aWxkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoKSwgYnVpbGRlcikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX3dpdGhfZmVhdHVyZXNfbWFrZXNfbG9va3VwX3N1Y2NlZWQoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnZm9vJyksIGJ1aWxkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoJ2JhcicpLCBidWlsZGVyKQorCisgICAgZGVmIHRlc3RfbG9va3VwX2ZhaWxzX3doZW5fbm9fYnVpbGRlcl9pbXBsZW1lbnRzX2ZlYXR1cmUoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnYmF6JyksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZ2V0c19tb3N0X3JlY2VudF9yZWdpc3RyYXRpb25fd2hlbl9ub19mZWF0dXJlX3NwZWNpZmllZChzZWxmKToKKyAgICAgICAgYnVpbGRlcjEgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nKQorICAgICAgICBidWlsZGVyMiA9IHNlbGYuYnVpbGRlcl9mb3JfZmVhdHVyZXMoJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoKSwgYnVpbGRlcjIpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZmFpbHNfd2hlbl9ub190cmVlX2J1aWxkZXJzX3JlZ2lzdGVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWdpc3RyeS5sb29rdXAoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9nZXRzX21vc3RfcmVjZW50X2J1aWxkZXJfc3VwcG9ydGluZ19hbGxfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIGhhc19vbmUgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nKQorICAgICAgICBoYXNfdGhlX290aGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnYmFyJykKKyAgICAgICAgaGFzX2JvdGhfZWFybHkgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgICAgIGhhc19ib3RoX2xhdGUgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJywgJ3F1dXgnKQorICAgICAgICBsYWNrc19vbmUgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdiYXInKQorICAgICAgICBoYXNfdGhlX290aGVyID0gc2VsZi5idWlsZGVyX2Zvcl9mZWF0dXJlcygnZm9vJykKKworICAgICAgICAjIFRoZXJlIGFyZSB0d28gYnVpbGRlcnMgZmVhdHVyaW5nICdmb28nIGFuZCAnYmFyJywgYnV0CisgICAgICAgICMgdGhlIG9uZSB0aGF0IGFsc28gZmVhdHVyZXMgJ3F1dXgnIHdhcyByZWdpc3RlcmVkIGxhdGVyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVnaXN0cnkubG9va3VwKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19ib3RoX2xhdGUpCisKKyAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBidWlsZGVyIGZlYXR1cmluZyAnZm9vJywgJ2JhcicsIGFuZCAnYmF6Jy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnZm9vJywgJ2JhcicsICdiYXonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2JvdGhfZWFybHkpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfZmFpbHNfd2hlbl9jYW5ub3RfcmVjb25jaWxlX3JlcXVlc3RlZF9mZWF0dXJlcyhzZWxmKToKKyAgICAgICAgYnVpbGRlcjEgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmFyJykKKyAgICAgICAgYnVpbGRlcjIgPSBzZWxmLmJ1aWxkZXJfZm9yX2ZlYXR1cmVzKCdmb28nLCAnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZ2lzdHJ5Lmxvb2t1cCgnYmFyJywgJ2JheicpLCBOb25lKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfZG9jcy5weSBiL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2RvY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5ZjY3NwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2RvY3MucHkKQEAgLTAsMCArMSwzNiBAQAorIlRlc3QgaGFybmVzcyBmb3IgZG9jdGVzdHMuIgorCisjIHB5bGludDogZGlzYWJsZS1tc2c9RTA2MTEsVzAxNDIKKworX19tZXRhY2xhc3NfXyA9IHR5cGUKK19fYWxsX18gPSBbCisgICAgJ2FkZGl0aW9uYWxfdGVzdHMnLAorICAgIF0KKworaW1wb3J0IGF0ZXhpdAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBvcworI2Zyb20gcGtnX3Jlc291cmNlcyBpbXBvcnQgKAorIyAgICByZXNvdXJjZV9maWxlbmFtZSwgcmVzb3VyY2VfZXhpc3RzLCByZXNvdXJjZV9saXN0ZGlyLCBjbGVhbnVwX3Jlc291cmNlcykKK2ltcG9ydCB1bml0dGVzdAorCitET0NURVNUX0ZMQUdTID0gKAorICAgIGRvY3Rlc3QuRUxMSVBTSVMgfAorICAgIGRvY3Rlc3QuTk9STUFMSVpFX1dISVRFU1BBQ0UgfAorICAgIGRvY3Rlc3QuUkVQT1JUX05ESUZGKQorCisKKyMgZGVmIGFkZGl0aW9uYWxfdGVzdHMoKToKKyMgICAgICJSdW4gdGhlIGRvYyB0ZXN0cyAoUkVBRE1FLnR4dCBhbmQgZG9jcy8qLCBpZiBhbnkgZXhpc3QpIgorIyAgICAgZG9jdGVzdF9maWxlcyA9IFsKKyMgICAgICAgICBvcy5wYXRoLmFic3BhdGgocmVzb3VyY2VfZmlsZW5hbWUoJ2JzNCcsICdSRUFETUUudHh0JykpXQorIyAgICAgaWYgcmVzb3VyY2VfZXhpc3RzKCdiczQnLCAnZG9jcycpOgorIyAgICAgICAgIGZvciBuYW1lIGluIHJlc291cmNlX2xpc3RkaXIoJ2JzNCcsICdkb2NzJyk6CisjICAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy50eHQnKToKKyMgICAgICAgICAgICAgICAgIGRvY3Rlc3RfZmlsZXMuYXBwZW5kKAorIyAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aCgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfZmlsZW5hbWUoJ2JzNCcsICdkb2NzLyVzJyAlIG5hbWUpKSkKKyMgICAgIGt3YXJncyA9IGRpY3QobW9kdWxlX3JlbGF0aXZlPUZhbHNlLCBvcHRpb25mbGFncz1ET0NURVNUX0ZMQUdTKQorIyAgICAgYXRleGl0LnJlZ2lzdGVyKGNsZWFudXBfcmVzb3VyY2VzKQorIyAgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZSgoCisjICAgICAgICAgZG9jdGVzdC5Eb2NGaWxlU3VpdGUoKmRvY3Rlc3RfZmlsZXMsICoqa3dhcmdzKSkpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1sNWxpYi5weSBiL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWw1bGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NGMzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1sNWxpYi5weQpAQCAtMCwwICsxLDg1IEBACisiIiJUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGdlbmVyYXRlcyBnb29kIHRyZWVzLiIiIgorCitpbXBvcnQgd2FybmluZ3MKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IEhUTUw1VHJlZUJ1aWxkZXIKKyAgICBIVE1MNUxJQl9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIEhUTUw1TElCX1BSRVNFTlQgPSBGYWxzZQorZnJvbSBiczQuZWxlbWVudCBpbXBvcnQgU291cFN0cmFpbmVyCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCisgICAgSFRNTDVUcmVlQnVpbGRlclNtb2tlVGVzdCwKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCisKK0Bza2lwSWYoCisgICAgbm90IEhUTUw1TElCX1BSRVNFTlQsCisgICAgImh0bWw1bGliIHNlZW1zIG5vdCB0byBiZSBwcmVzZW50LCBub3QgdGVzdGluZyBpdHMgdHJlZSBidWlsZGVyLiIpCitjbGFzcyBIVE1MNUxpYkJ1aWxkZXJTbW9rZVRlc3QoU291cFRlc3QsIEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNlZSBgYEhUTUw1VHJlZUJ1aWxkZXJTbW9rZVRlc3RgYC4iIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkZWZhdWx0X2J1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBIVE1MNVRyZWVCdWlsZGVyKCkKKworICAgIGRlZiB0ZXN0X3NvdXBzdHJhaW5lcihzZWxmKToKKyAgICAgICAgIyBUaGUgaHRtbDVsaWIgdHJlZSBidWlsZGVyIGRvZXMgbm90IHN1cHBvcnQgU291cFN0cmFpbmVycy4KKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoImIiKQorICAgICAgICBtYXJrdXAgPSAiPHA+QSA8Yj5ib2xkPC9iPiBzdGF0ZW1lbnQuPC9wPiIKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwLCBwYXJzZV9vbmx5PXN0cmFpbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IobWFya3VwKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAidGhlIGh0bWw1bGliIHRyZWUgYnVpbGRlciBkb2Vzbid0IHN1cHBvcnQgcGFyc2Vfb25seSIgaW4KKyAgICAgICAgICAgIHN0cih3WzBdLm1lc3NhZ2UpKQorCisgICAgZGVmIHRlc3RfY29ycmVjdGx5X25lc3RlZF90YWJsZXMoc2VsZik6CisgICAgICAgICIiImh0bWw1bGliIGluc2VydHMgPHRib2R5PiB0YWdzIHdoZXJlIG90aGVyIHBhcnNlcnMgZG9uJ3QuIiIiCisgICAgICAgIG1hcmt1cCA9ICgnPHRhYmxlIGlkPSIxIj4nCisgICAgICAgICAgICAgICAgICAnPHRyPicKKyAgICAgICAgICAgICAgICAgICI8dGQ+SGVyZSdzIGFub3RoZXIgdGFibGU6IgorICAgICAgICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+JworICAgICAgICAgICAgICAgICAgJzx0cj48dGQ+Zm9vPC90ZD48L3RyPicKKyAgICAgICAgICAgICAgICAgICc8L3RhYmxlPjwvdGQ+JykKKworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICBtYXJrdXAsCisgICAgICAgICAgICAnPHRhYmxlIGlkPSIxIj48dGJvZHk+PHRyPjx0ZD5IZXJlXCdzIGFub3RoZXIgdGFibGU6JworICAgICAgICAgICAgJzx0YWJsZSBpZD0iMiI+PHRib2R5Pjx0cj48dGQ+Zm9vPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4nCisgICAgICAgICAgICAnPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U291cEVxdWFscygKKyAgICAgICAgICAgICI8dGFibGU+PHRoZWFkPjx0cj48dGQ+Rm9vPC90ZD48L3RyPjwvdGhlYWQ+IgorICAgICAgICAgICAgIjx0Ym9keT48dHI+PHRkPkJhcjwvdGQ+PC90cj48L3Rib2R5PiIKKyAgICAgICAgICAgICI8dGZvb3Q+PHRyPjx0ZD5CYXo8L3RkPjwvdHI+PC90Zm9vdD48L3RhYmxlPiIpCisKKyAgICBkZWYgdGVzdF94bWxfZGVjbGFyYXRpb25fZm9sbG93ZWRfYnlfZG9jdHlwZShzZWxmKToKKyAgICAgICAgbWFya3VwID0gJycnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgPHA+Zm9vPC9wPgorICA8L2JvZHk+Cis8L2h0bWw+JycnCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFjaCB0aGUgPHA+IHRhZzsgdGhpcyBtZWFucyB0aGUgdHJlZSBpcyBjb25uZWN0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiI8cD5mb288L3A+Iiwgc291cC5wLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfcmVwYXJlbnRlZF9tYXJrdXAoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8cD48ZW0+Zm9vPC9wPlxuPHA+YmFyPGE+PC9hPjwvZW0+PC9wPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8Ym9keT48cD48ZW0+Zm9vPC9lbT48L3A+PGVtPlxuPC9lbT48cD48ZW0+YmFyPGE+PC9hPjwvZW0+PC9wPjwvYm9keT4iLCBzb3VwLmJvZHkuZGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNvdXAuZmluZF9hbGwoJ3AnKSkpCisKKworICAgIGRlZiB0ZXN0X3JlcGFyZW50ZWRfbWFya3VwX2VuZHNfd2l0aF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAnPHA+PGVtPmZvbzwvcD5cbjxwPmJhcjxhPjwvYT48L2VtPjwvcD5cbicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSI8Ym9keT48cD48ZW0+Zm9vPC9lbT48L3A+PGVtPlxuPC9lbT48cD48ZW0+YmFyPGE+PC9hPjwvZW0+PC9wPlxuPC9ib2R5PiIsIHNvdXAuYm9keS5kZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgncCcpKSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X2h0bWxwYXJzZXIucHkgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1scGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjVlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9odG1scGFyc2VyLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIlRlc3RzIHRvIGVuc3VyZSB0aGF0IHRoZSBodG1sLnBhcnNlciB0cmVlIGJ1aWxkZXIgZ2VuZXJhdGVzIGdvb2QKK3RyZWVzLiIiIgorCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCBTb3VwVGVzdCwgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0Citmcm9tIGJzNC5idWlsZGVyIGltcG9ydCBIVE1MUGFyc2VyVHJlZUJ1aWxkZXIKKworY2xhc3MgSFRNTFBhcnNlclRyZWVCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEhUTUxQYXJzZXJUcmVlQnVpbGRlcigpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3N5c3RlbV9kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIGh0bWwucGFyc2VyIGNhbid0IGhhbmRsZSBuYW1lc3BhY2VkIGRvY3R5cGVzLCBzbyBza2lwIHRoaXMgb25lLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VkX3B1YmxpY19kb2N0eXBlKHNlbGYpOgorICAgICAgICAjIGh0bWwucGFyc2VyIGNhbid0IGhhbmRsZSBuYW1lc3BhY2VkIGRvY3R5cGVzLCBzbyBza2lwIHRoaXMgb25lLgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9seG1sLnB5IGIvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjJlOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvYnM0L3Rlc3RzL3Rlc3RfbHhtbC5weQpAQCAtMCwwICsxLDkxIEBACisiIiJUZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgbHhtbCB0cmVlIGJ1aWxkZXIgZ2VuZXJhdGVzIGdvb2QgdHJlZXMuIiIiCisKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCisKK3RyeToKKyAgICBpbXBvcnQgbHhtbC5ldHJlZQorICAgIExYTUxfUFJFU0VOVCA9IFRydWUKKyAgICBMWE1MX1ZFUlNJT04gPSBseG1sLmV0cmVlLkxYTUxfVkVSU0lPTgorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIExYTUxfUFJFU0VOVCA9IEZhbHNlCisgICAgTFhNTF9WRVJTSU9OID0gKDAsKQorCitpZiBMWE1MX1BSRVNFTlQ6CisgICAgZnJvbSBiczQuYnVpbGRlciBpbXBvcnQgTFhNTFRyZWVCdWlsZGVyLCBMWE1MVHJlZUJ1aWxkZXJGb3JYTUwKKworZnJvbSBiczQgaW1wb3J0ICgKKyAgICBCZWF1dGlmdWxTb3VwLAorICAgIEJlYXV0aWZ1bFN0b25lU291cCwKKyAgICApCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCBDb21tZW50LCBEb2N0eXBlLCBTb3VwU3RyYWluZXIKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0IHNraXBJZgorZnJvbSBiczQudGVzdHMgaW1wb3J0IHRlc3RfaHRtbHBhcnNlcgorZnJvbSBiczQudGVzdGluZyBpbXBvcnQgKAorICAgIEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdCwKKyAgICBYTUxUcmVlQnVpbGRlclNtb2tlVGVzdCwKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCisKK0Bza2lwSWYoCisgICAgbm90IExYTUxfUFJFU0VOVCwKKyAgICAibHhtbCBzZWVtcyBub3QgdG8gYmUgcHJlc2VudCwgbm90IHRlc3RpbmcgaXRzIHRyZWUgYnVpbGRlci4iKQorY2xhc3MgTFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBIVE1MVHJlZUJ1aWxkZXJTbW9rZVRlc3QpOgorICAgICIiIlNlZSBgYEhUTUxUcmVlQnVpbGRlclNtb2tlVGVzdGBgLiIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlZmF1bHRfYnVpbGRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIExYTUxUcmVlQnVpbGRlcigpCisKKyAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2VfZW50aXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHA+Zm9vJiMxMDAwMDAwMDAwMDAwMDtiYXI8L3A+IiwgIjxwPmZvb2JhcjwvcD4iKQorICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMoCisgICAgICAgICAgICAiPHA+Zm9vJiN4MTAwMDAwMDAwMDAwMDA7YmFyPC9wPiIsICI8cD5mb29iYXI8L3A+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VwRXF1YWxzKAorICAgICAgICAgICAgIjxwPmZvbyYjMTAwMDAwMDAwMDtiYXI8L3A+IiwgIjxwPmZvb2JhcjwvcD4iKQorCisgICAgIyBJbiBseG1sIDwgMi4zLjUsIGFuIGVtcHR5IGRvY3R5cGUgY2F1c2VzIGEgc2VnZmF1bHQuIFNraXAgdGhpcworICAgICMgdGVzdCBpZiBhbiBvbGQgdmVyc2lvbiBvZiBseG1sIGlzIGluc3RhbGxlZC4KKworICAgIEBza2lwSWYoCisgICAgICAgIG5vdCBMWE1MX1BSRVNFTlQgb3IgTFhNTF9WRVJTSU9OIDwgKDIsMyw1LDApLAorICAgICAgICAiU2tpcHBpbmcgZG9jdHlwZSB0ZXN0IGZvciBvbGQgdmVyc2lvbiBvZiBseG1sIHRvIGF2b2lkIHNlZ2ZhdWx0LiIpCisgICAgZGVmIHRlc3RfZW1wdHlfZG9jdHlwZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPCFET0NUWVBFPiIpCisgICAgICAgIGRvY3R5cGUgPSBzb3VwLmNvbnRlbnRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIsIGRvY3R5cGUuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X2JlYXV0aWZ1bHN0b25lc291cF9pc194bWxfcGFyc2VyKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXByZWNhdGVkIEJTUyBjbGFzcyB1c2VzIGFuIHhtbCBidWlsZGVyCisgICAgICAgICMgaWYgb25lIGlzIGluc3RhbGxlZC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBCZWF1dGlmdWxTdG9uZVNvdXAoIjxiIC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IjxiLz4iLCB1bmljb2RlKHNvdXAuYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiQmVhdXRpZnVsU3RvbmVTb3VwIGNsYXNzIGlzIGRlcHJlY2F0ZWQiIGluIHN0cih3WzBdLm1lc3NhZ2UpKQorCisgICAgZGVmIHRlc3RfcmVhbF94aHRtbF9kb2N1bWVudChzZWxmKToKKyAgICAgICAgIiIibHhtbCBzdHJpcHMgdGhlIFhNTCBkZWZpbml0aW9uIGZyb20gYW4gWEhUTUwgZG9jLCB3aGljaCBpcyBmaW5lLiIiIgorICAgICAgICBtYXJrdXAgPSBiIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+PHRpdGxlPkhlbGxvLjwvdGl0bGU+PC9oZWFkPgorPGJvZHk+R29vZGJ5ZS48L2JvZHk+Cis8L2h0bWw+IiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5lbmNvZGUoInV0Zi04IikucmVwbGFjZShiIlxuIiwgYicnKSwKKyAgICAgICAgICAgIG1hcmt1cC5yZXBsYWNlKGInXG4nLCBiJycpLnJlcGxhY2UoCisgICAgICAgICAgICAgICAgYic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PicsIGInJykpCisKKworQHNraXBJZigKKyAgICBub3QgTFhNTF9QUkVTRU5ULAorICAgICJseG1sIHNlZW1zIG5vdCB0byBiZSBwcmVzZW50LCBub3QgdGVzdGluZyBpdHMgWE1MIHRyZWUgYnVpbGRlci4iKQorY2xhc3MgTFhNTFhNTFRyZWVCdWlsZGVyU21va2VUZXN0KFNvdXBUZXN0LCBYTUxUcmVlQnVpbGRlclNtb2tlVGVzdCk6CisgICAgIiIiU2VlIGBgSFRNTFRyZWVCdWlsZGVyU21va2VUZXN0YGAuIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVmYXVsdF9idWlsZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gTFhNTFRyZWVCdWlsZGVyRm9yWE1MKCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3NvdXAucHkgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWMyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF9zb3VwLnB5CkBAIC0wLDAgKzEsNDM0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiVGVzdHMgb2YgQmVhdXRpZnVsIFNvdXAgYXMgYSB3aG9sZS4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gYnM0IGltcG9ydCAoCisgICAgQmVhdXRpZnVsU291cCwKKyAgICBCZWF1dGlmdWxTdG9uZVNvdXAsCispCitmcm9tIGJzNC5lbGVtZW50IGltcG9ydCAoCisgICAgQ2hhcnNldE1ldGFBdHRyaWJ1dGVWYWx1ZSwKKyAgICBDb250ZW50TWV0YUF0dHJpYnV0ZVZhbHVlLAorICAgIFNvdXBTdHJhaW5lciwKKyAgICBOYW1lc3BhY2VkQXR0cmlidXRlLAorICAgICkKK2ltcG9ydCBiczQuZGFtbWl0Citmcm9tIGJzNC5kYW1taXQgaW1wb3J0ICgKKyAgICBFbnRpdHlTdWJzdGl0dXRpb24sCisgICAgVW5pY29kZURhbW1pdCwKKykKK2Zyb20gYnM0LnRlc3RpbmcgaW1wb3J0ICgKKyAgICBTb3VwVGVzdCwKKyAgICBza2lwSWYsCispCitpbXBvcnQgd2FybmluZ3MKKwordHJ5OgorICAgIGZyb20gYnM0LmJ1aWxkZXIgaW1wb3J0IExYTUxUcmVlQnVpbGRlciwgTFhNTFRyZWVCdWlsZGVyRm9yWE1MCisgICAgTFhNTF9QUkVTRU5UID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgIExYTUxfUFJFU0VOVCA9IEZhbHNlCisKK1BZVEhPTl8yX1BSRV8yXzcgPSAoc3lzLnZlcnNpb25faW5mbyA8ICgyLDcpKQorUFlUSE9OXzNfUFJFXzNfMiA9IChzeXMudmVyc2lvbl9pbmZvWzBdID09IDMgYW5kIHN5cy52ZXJzaW9uX2luZm8gPCAoMywyKSkKKworY2xhc3MgVGVzdENvbnN0cnVjdG9yKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X3Nob3J0X3VuaWNvZGVfaW5wdXQoc2VsZik6CisgICAgICAgIGRhdGEgPSB1IjxoMT7DqcOpPC9oMT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IsOpw6kiLCBzb3VwLmgxLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2VtYmVkZGVkX251bGwoc2VsZik6CisgICAgICAgIGRhdGEgPSB1IjxoMT5mb29cMGJhcjwvaDE+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJmb29cMGJhciIsIHNvdXAuaDEuc3RyaW5nKQorCisKK2NsYXNzIFRlc3REZXByZWNhdGVkQ29uc3RydWN0b3JBcmd1bWVudHMoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfcGFyc2VPbmx5VGhlc2VfcmVuYW1lZF90b19wYXJzZV9vbmx5KHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PGI+PC9iPjwvYT4iLCBwYXJzZU9ubHlUaGVzZT1Tb3VwU3RyYWluZXIoImIiKSkKKyAgICAgICAgbXNnID0gc3RyKHdbMF0ubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwYXJzZU9ubHlUaGVzZSIgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBhcnNlX29ubHkiIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxiPjwvYj4iLCBzb3VwLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfZnJvbUVuY29kaW5nX3JlbmFtZWRfdG9fZnJvbV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHV0ZjggPSBiIlx4YzNceGE5IgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCh1dGY4LCBmcm9tRW5jb2Rpbmc9InV0ZjgiKQorICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImZyb21FbmNvZGluZyIgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImZyb21fZW5jb2RpbmciIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidXRmOCIsIHNvdXAub3JpZ2luYWxfZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF91bnJlY29nbml6ZWRfa2V5d29yZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYuc291cCwgIjxhPiIsIG5vX3N1Y2hfYXJndW1lbnQ9VHJ1ZSkKKworY2xhc3MgVGVzdFdhcm5pbmdzKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X2Rpc2tfZmlsZV93YXJuaW5nKHNlbGYpOgorICAgICAgICBmaWxlaGFuZGxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlaGFuZGxlLm5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGZpbGVuYW1lKQorICAgICAgICAgICAgbXNnID0gc3RyKHdbMF0ubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibG9va3MgbGlrZSBhIGZpbGVuYW1lIiBpbiBtc2cpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlaGFuZGxlLmNsb3NlKCkKKworICAgICAgICAjIFRoZSBmaWxlIG5vIGxvbmdlciBleGlzdHMsIHNvIEJlYXV0aWZ1bCBTb3VwIHdpbGwgbm8gbG9uZ2VyIGlzc3VlIHRoZSB3YXJuaW5nLgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cChmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4odykpCisKKyAgICBkZWYgdGVzdF91cmxfd2FybmluZyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoImh0dHA6Ly93d3cuY3J1bW15LmNvbS8iKQorICAgICAgICBtc2cgPSBzdHIod1swXS5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImxvb2tzIGxpa2UgYSBVUkwiIGluIG1zZykKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc291cCA9IHNlbGYuc291cCgiaHR0cDovL3d3dy5jcnVtbXkuY29tLyBpcyBncmVhdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHcpKQorCitjbGFzcyBUZXN0U2VsZWN0aXZlUGFyc2luZyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9wYXJzZV93aXRoX3NvdXBzdHJhaW5lcihzZWxmKToKKyAgICAgICAgbWFya3VwID0gIk5vPGI+WWVzPC9iPjxhPk5vPGI+WWVzIDxjPlllczwvYz48L2I+IgorICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcigiYiIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAobWFya3VwLCBwYXJzZV9vbmx5PXN0cmFpbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZW5jb2RlKCksIGIiPGI+WWVzPC9iPjxiPlllcyA8Yz5ZZXM8L2M+PC9iPiIpCisKKworY2xhc3MgVGVzdEVudGl0eVN1YnN0aXR1dGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiU3RhbmRhbG9uZSB0ZXN0cyBvZiB0aGUgRW50aXR5U3Vic3RpdHV0aW9uIGNsYXNzLiIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zdWIgPSBFbnRpdHlTdWJzdGl0dXRpb24KKworICAgIGRlZiB0ZXN0X3NpbXBsZV9odG1sX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgIyBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byBuYW1lZCBIVE1MIGVudGl0ZXMKKyAgICAgICAgIyBhcmUgc3Vic3RpdHV0ZWQsIGFuZCBubyBvdGhlcnMuCisgICAgICAgIHMgPSB1ImZvb1x1MjIwMFxOe1NOT1dNQU59XHUwMGY1YmFyIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfaHRtbChzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSJmb28mZm9yYWxsO1xOe1NOT1dNQU59Jm90aWxkZTtiYXIiKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICAjIE1TIHNtYXJ0IHF1b3RlcyBhcmUgYSBjb21tb24gc291cmNlIG9mIGZydXN0cmF0aW9uLCBzbyB3ZQorICAgICAgICAjIGdpdmUgdGhlbSBhIHNwZWNpYWwgdGVzdC4KKyAgICAgICAgcXVvdGVzID0gYiJceDkxXHg5MmZvb1x4OTNceDk0IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KHF1b3RlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX2h0bWwoZGFtbWl0Lm1hcmt1cCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICImbHNxdW87JnJzcXVvO2ZvbyZsZHF1bzsmcmRxdW87IikKKworICAgIGRlZiB0ZXN0X3htbF9jb252ZXJzdGlvbl9pbmNsdWRlc19ub19xdW90ZXNfaWZfbWFrZV9xdW90ZWRfYXR0cmlidXRlX2lzX2ZhbHNlKHNlbGYpOgorICAgICAgICBzID0gJ1dlbGNvbWUgdG8gIm15IGJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwocywgRmFsc2UpLCBzKQorCisgICAgZGVmIHRlc3RfeG1sX2F0dHJpYnV0ZV9xdW90aW5nX25vcm1hbGx5X3VzZXNfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiV2VsY29tZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnIldlbGNvbWUiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbCgiQm9iJ3MgQmFyIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICciQm9iXCdzIEJhciInKQorCisgICAgZGVmIHRlc3RfeG1sX2F0dHJpYnV0ZV9xdW90aW5nX3VzZXNfc2luZ2xlX3F1b3Rlc193aGVuX3ZhbHVlX2NvbnRhaW5zX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIHMgPSAnV2VsY29tZSB0byAibXkgYmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbChzLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidXZWxjb21lIHRvIFwibXkgYmFyXCInIikKKworICAgIGRlZiB0ZXN0X3htbF9hdHRyaWJ1dGVfcXVvdGluZ19lc2NhcGVzX3NpbmdsZV9xdW90ZXNfd2hlbl92YWx1ZV9jb250YWluc19ib3RoX3NpbmdsZV9hbmRfZG91YmxlX3F1b3RlcyhzZWxmKToKKyAgICAgICAgcyA9ICdXZWxjb21lIHRvICJCb2JcJ3MgQmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKHMsIFRydWUpLAorICAgICAgICAgICAgJyJXZWxjb21lIHRvICZxdW90O0JvYlwncyBCYXImcXVvdDsiJykKKworICAgIGRlZiB0ZXN0X3htbF9xdW90ZXNfYXJlbnRfZXNjYXBlZF93aGVuX3ZhbHVlX2lzX25vdF9iZWluZ19xdW90ZWQoc2VsZik6CisgICAgICAgIHF1b3RlZCA9ICdXZWxjb21lIHRvICJCb2JcJ3MgQmFyIicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbChxdW90ZWQpLCBxdW90ZWQpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19oYW5kbGVzX2FuZ2xlX2JyYWNrZXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoImZvbzxiYXI+IiksCisgICAgICAgICAgICAiZm9vJmx0O2JhciZndDsiKQorCisgICAgZGVmIHRlc3RfeG1sX3F1b3RpbmdfaGFuZGxlc19hbXBlcnNhbmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3ViLnN1YnN0aXR1dGVfeG1sKCJBVCZUIiksICJBVCZhbXA7VCIpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19pbmNsdWRpbmdfYW1wZXJzYW5kc193aGVuX3RoZXlfYXJlX3BhcnRfb2ZfYW5fZW50aXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zdWIuc3Vic3RpdHV0ZV94bWwoIiZBYWN1dGU7VCZUIiksCisgICAgICAgICAgICAiJmFtcDtBYWN1dGU7VCZhbXA7VCIpCisKKyAgICBkZWYgdGVzdF94bWxfcXVvdGluZ19pZ25vcmluZ19hbXBlcnNhbmRzX3doZW5fdGhleV9hcmVfcGFydF9vZl9hbl9lbnRpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnN1Yi5zdWJzdGl0dXRlX3htbF9jb250YWluaW5nX2VudGl0aWVzKCImQWFjdXRlO1QmVCIpLAorICAgICAgICAgICAgIiZBYWN1dGU7VCZhbXA7VCIpCisKKyAgICBkZWYgdGVzdF9xdW90ZXNfbm90X2h0bWxfc3Vic3RpdHV0ZWQoc2VsZik6CisgICAgICAgICIiIlRoZXJlJ3Mgbm8gbmVlZCB0byBkbyB0aGlzIGV4Y2VwdCBpbnNpZGUgYXR0cmlidXRlIHZhbHVlcy4iIiIKKyAgICAgICAgdGV4dCA9ICdCb2JcJ3MgImJhciInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWIuc3Vic3RpdHV0ZV9odG1sKHRleHQpLCB0ZXh0KQorCisKK2NsYXNzIFRlc3RFbmNvZGluZ0NvbnZlcnNpb24oU291cFRlc3QpOgorICAgICMgVGVzdCBCZWF1dGlmdWwgU291cCdzIGFiaWxpdHkgdG8gZGVjb2RlIGFuZCBlbmNvZGUgZnJvbSB2YXJpb3VzCisgICAgIyBlbmNvZGluZ3MuCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RFbmNvZGluZ0NvbnZlcnNpb24sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi51bmljb2RlX2RhdGEgPSB1JzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PC9oZWFkPjxib2R5Pjxmb28+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9mb28+PC9ib2R5PjwvaHRtbD4nCisgICAgICAgIHNlbGYudXRmOF9kYXRhID0gc2VsZi51bmljb2RlX2RhdGEuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgICMgSnVzdCBzbyB5b3Uga25vdyB3aGF0IGl0IGxvb2tzIGxpa2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnV0ZjhfZGF0YSwKKyAgICAgICAgICAgIGInPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48L2hlYWQ+PGJvZHk+PGZvbz5TYWNyXHhjM1x4YTkgYmxldSE8L2Zvbz48L2JvZHk+PC9odG1sPicpCisKKyAgICBkZWYgdGVzdF9hc2NpaV9pbl91bmljb2RlX291dChzZWxmKToKKyAgICAgICAgIyBBU0NJSSBpbnB1dCBpcyBjb252ZXJ0ZWQgdG8gVW5pY29kZS4gVGhlIG9yaWdpbmFsX2VuY29kaW5nCisgICAgICAgICMgYXR0cmlidXRlIGlzIHNldCB0byAndXRmLTgnLCBhIHN1cGVyc2V0IG9mIEFTQ0lJLgorICAgICAgICBjaGFyZGV0ID0gYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdAorICAgICAgICBsb2dnaW5nLmRpc2FibGUobG9nZ2luZy5XQVJOSU5HKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWYgbm9vcChzdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIERpc2FibGUgY2hhcmRldCwgd2hpY2ggd2lsbCByZWFsaXplIHRoYXQgdGhlIEFTQ0lJIGlzIEFTQ0lJLgorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IG5vb3AKKyAgICAgICAgICAgIGFzY2lpID0gYiI8Zm9vPmE8L2Zvbz4iCisgICAgICAgICAgICBzb3VwX2Zyb21fYXNjaWkgPSBzZWxmLnNvdXAoYXNjaWkpCisgICAgICAgICAgICB1bmljb2RlX291dHB1dCA9IHNvdXBfZnJvbV9hc2NpaS5kZWNvZGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodW5pY29kZV9vdXRwdXQsIHVuaWNvZGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX291dHB1dCwgc2VsZi5kb2N1bWVudF9mb3IoYXNjaWkuZGVjb2RlKCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fYXNjaWkub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgInV0Zi04IikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZ2dpbmcuZGlzYWJsZShsb2dnaW5nLk5PVFNFVCkKKyAgICAgICAgICAgIGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQgPSBjaGFyZGV0CisKKyAgICBkZWYgdGVzdF91bmljb2RlX2luX3VuaWNvZGVfb3V0KHNlbGYpOgorICAgICAgICAjIFVuaWNvZGUgaW5wdXQgaXMgbGVmdCBhbG9uZS4gVGhlIG9yaWdpbmFsX2VuY29kaW5nIGF0dHJpYnV0ZQorICAgICAgICAjIGlzIG5vdCBzZXQuCisgICAgICAgIHNvdXBfZnJvbV91bmljb2RlID0gc2VsZi5zb3VwKHNlbGYudW5pY29kZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLmRlY29kZSgpLCBzZWxmLnVuaWNvZGVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5mb28uc3RyaW5nLCB1J1NhY3JceGU5IGJsZXUhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdW5pY29kZS5vcmlnaW5hbF9lbmNvZGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3V0ZjhfaW5fdW5pY29kZV9vdXQoc2VsZik6CisgICAgICAgICMgVVRGLTggaW5wdXQgaXMgY29udmVydGVkIHRvIFVuaWNvZGUuIFRoZSBvcmlnaW5hbF9lbmNvZGluZworICAgICAgICAjIGF0dHJpYnV0ZSBpcyBzZXQuCisgICAgICAgIHNvdXBfZnJvbV91dGY4ID0gc2VsZi5zb3VwKHNlbGYudXRmOF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91dGY4LmRlY29kZSgpLCBzZWxmLnVuaWNvZGVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwX2Zyb21fdXRmOC5mb28uc3RyaW5nLCB1J1NhY3JceGU5IGJsZXUhJykKKworICAgIGRlZiB0ZXN0X3V0Zjhfb3V0KHNlbGYpOgorICAgICAgICAjIFRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgY2FuIGJlIGVuY29kZWQgYXMgVVRGLTguCisgICAgICAgIHNvdXBfZnJvbV91bmljb2RlID0gc2VsZi5zb3VwKHNlbGYudW5pY29kZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXBfZnJvbV91bmljb2RlLmVuY29kZSgndXRmLTgnKSwgc2VsZi51dGY4X2RhdGEpCisKKyAgICBAc2tpcElmKAorICAgICAgICBQWVRIT05fMl9QUkVfMl83IG9yIFBZVEhPTl8zX1BSRV8zXzIsCisgICAgICAgICJCYWQgSFRNTFBhcnNlciBkZXRlY3RlZDsgc2tpcHBpbmcgdGVzdCBvZiBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBhdHRyaWJ1dGUgbmFtZS4iKQorICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9uYW1lX2NvbnRhaW5pbmdfdW5pY29kZV9jaGFyYWN0ZXJzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1JzxkaXY+PGEgXE57U05PV01BTn09InNub3dtYW4iPjwvYT48L2Rpdj4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb3VwKG1hcmt1cCkuZGl2LmVuY29kZSgidXRmOCIpLCBtYXJrdXAuZW5jb2RlKCJ1dGY4IikpCisKK2NsYXNzIFRlc3RVbmljb2RlRGFtbWl0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJTdGFuZGFsb25lIHRlc3RzIG9mIFVuaWNvZGVEYW1taXQuIiIiCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2lucHV0KHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IkknbSBhbHJlYWR5IFVuaWNvZGUhIFxOe1NOT1dNQU59IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KG1hcmt1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAsIG1hcmt1cCkKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b191bmljb2RlKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsIHUiPGZvbz5cdTIwMThcdTIwMTlcdTIwMWNcdTIwMWQ8L2Zvbz4iKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX3RvX3htbF9lbnRpdGllcyhzZWxmKToKKyAgICAgICAgbWFya3VwID0gYiI8Zm9vPlx4OTFceDkyXHg5M1x4OTQ8L2Zvbz4iCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQobWFya3VwLCBzbWFydF9xdW90ZXNfdG89InhtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsICI8Zm9vPiYjeDIwMTg7JiN4MjAxOTsmI3gyMDFDOyYjeDIwMUQ7PC9mb28+IikKKworICAgIGRlZiB0ZXN0X3NtYXJ0X3F1b3Rlc190b19odG1sX2VudGl0aWVzKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHNtYXJ0X3F1b3Rlc190bz0iaHRtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkYW1taXQudW5pY29kZV9tYXJrdXAsICI8Zm9vPiZsc3F1bzsmcnNxdW87JmxkcXVvOyZyZHF1bzs8L2Zvbz4iKQorCisgICAgZGVmIHRlc3Rfc21hcnRfcXVvdGVzX3RvX2FzY2lpKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSBiIjxmb28+XHg5MVx4OTJceDkzXHg5NDwvZm9vPiIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChtYXJrdXAsIHNtYXJ0X3F1b3Rlc190bz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGFtbWl0LnVuaWNvZGVfbWFya3VwLCAiIiI8Zm9vPicnIiI8L2Zvbz4iIiIpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfdXRmOChzZWxmKToKKyAgICAgICAgdXRmOCA9IGIiXHhjM1x4YTkiCisgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQodXRmOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAsIHUnXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICd1dGYtOCcpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2hlYnJldyhzZWxmKToKKyAgICAgICAgaGVicmV3ID0gYiJceGVkXHhlNVx4ZWNceGY5IgorICAgICAgICBkYW1taXQgPSBVbmljb2RlRGFtbWl0KGhlYnJldywgWyJpc28tODg1OS04Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICdpc28tODg1OS04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAsIHUnXHUwNWRkXHUwNWQ1XHUwNWRjXHUwNWU5JykKKworICAgIGRlZiB0ZXN0X2RvbnRfc2VlX3NtYXJ0X3F1b3Rlc193aGVyZV90aGVyZV9hcmVfbm9uZShzZWxmKToKKyAgICAgICAgdXRmXzggPSBiIlwzNDNcMjAyXDI2MVwzNDNcMjAzXDI3NFwzNDNcMjAyXDI3N1wzNDNcMjAyXDI0NCBXYXRjaCIKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGZfOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQub3JpZ2luYWxfZW5jb2RpbmcubG93ZXIoKSwgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYW1taXQudW5pY29kZV9tYXJrdXAuZW5jb2RlKCJ1dGYtOCIpLCB1dGZfOCkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9pbmFwcHJvcHJpYXRlX2NvZGVjcyhzZWxmKToKKyAgICAgICAgdXRmOF9kYXRhID0gdSJSw6Rrc23DtnJnw6VzIi5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdCh1dGY4X2RhdGEsIFsiaXNvLTg4NTktOCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhbW1pdC5vcmlnaW5hbF9lbmNvZGluZy5sb3dlcigpLCAndXRmLTgnKQorCisgICAgZGVmIHRlc3RfaWdub3JlX2ludmFsaWRfY29kZWNzKHNlbGYpOgorICAgICAgICB1dGY4X2RhdGEgPSB1IlLDpGtzbcO2cmfDpXMiLmVuY29kZSgidXRmLTgiKQorICAgICAgICBmb3IgYmFkX2VuY29kaW5nIGluIFsnLnV0ZjgnLCAnLi4uJywgJ3V0Ri0tLTE2LiEnXToKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQodXRmOF9kYXRhLCBbYmFkX2VuY29kaW5nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nLmxvd2VyKCksICd1dGYtOCcpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfaHRtbDVfc3R5bGVfbWV0YV90YWcoc2VsZik6CisKKyAgICAgICAgZm9yIGRhdGEgaW4gKAorICAgICAgICAgICAgYic8aHRtbD48bWV0YSBjaGFyc2V0PSJldWMtanAiIC8+PC9odG1sPicsCisgICAgICAgICAgICBiIjxodG1sPjxtZXRhIGNoYXJzZXQ9J2V1Yy1qcCcgLz48L2h0bWw+IiwKKyAgICAgICAgICAgIGIiPGh0bWw+PG1ldGEgY2hhcnNldD1ldWMtanAgLz48L2h0bWw+IiwKKyAgICAgICAgICAgIGIiPGh0bWw+PG1ldGEgY2hhcnNldD1ldWMtanAvPjwvaHRtbD4iKToKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoZGF0YSwgaXNfaHRtbD1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAiZXVjLWpwIiwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nKQorCisgICAgZGVmIHRlc3RfbGFzdF9kaXRjaF9lbnRpdHlfcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIFVURi04IGRvY3VtZW50IHRoYXQgY29udGFpbnMgYnl0ZXN0cmluZ3MKKyAgICAgICAgIyBjb21wbGV0ZWx5IGluY29tcGF0aWJsZSB3aXRoIFVURi04IChpZS4gZW5jb2RlZCB3aXRoIHNvbWUgb3RoZXIKKyAgICAgICAgIyBlbmNvZGluZykuCisgICAgICAgICMKKyAgICAgICAgIyBTaW5jZSB0aGVyZSBpcyBubyBjb25zaXN0ZW50IGVuY29kaW5nIGZvciB0aGUgZG9jdW1lbnQsCisgICAgICAgICMgVW5pY29kZSwgRGFtbWl0IHdpbGwgZXZlbnR1YWxseSBlbmNvZGUgdGhlIGRvY3VtZW50IGFzIFVURi04CisgICAgICAgICMgYW5kIGVuY29kZSB0aGUgaW5jb21wYXRpYmxlIGNoYXJhY3RlcnMgYXMgUkVQTEFDRU1FTlQKKyAgICAgICAgIyBDSEFSQUNURVIuCisgICAgICAgICMKKyAgICAgICAgIyBJZiBjaGFyZGV0IGlzIGluc3RhbGxlZCwgaXQgd2lsbCBkZXRlY3QgdGhhdCB0aGUgZG9jdW1lbnQKKyAgICAgICAgIyBjYW4gYmUgY29udmVydGVkIGludG8gSVNPLTg4NTktMSB3aXRob3V0IGVycm9ycy4gVGhpcyBoYXBwZW5zCisgICAgICAgICMgdG8gYmUgdGhlIHdyb25nIGVuY29kaW5nLCBidXQgaXQgaXMgYSBjb25zaXN0ZW50IGVuY29kaW5nLCBzbyB0aGUKKyAgICAgICAgIyBjb2RlIHdlJ3JlIHRlc3RpbmcgaGVyZSB3b24ndCBydW4uCisgICAgICAgICMKKyAgICAgICAgIyBTbyB3ZSB0ZW1wb3JhcmlseSBkaXNhYmxlIGNoYXJkZXQgaWYgaXQncyBwcmVzZW50LgorICAgICAgICBkb2MgPSBiIiIiXDM1N1wyNzNcMjc3PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxodG1sPjxiPlwzMzBcMjUwXDMzMFwyNTJcMzMwXDI2MTwvYj4KKzxpPlwzMTBcMzIyXDMyMVwyMjBcMzEyXDMyMVwzNTVcMzQ0PC9pPjwvaHRtbD4iIiIKKyAgICAgICAgY2hhcmRldCA9IGJzNC5kYW1taXQuY2hhcmRldF9kYW1taXQKKyAgICAgICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmIG5vb3Aoc3RyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IG5vb3AKKyAgICAgICAgICAgIGRhbW1pdCA9IFVuaWNvZGVEYW1taXQoZG9jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBkYW1taXQuY29udGFpbnNfcmVwbGFjZW1lbnRfY2hhcmFjdGVycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Ilx1ZmZmZCIgaW4gZGFtbWl0LnVuaWNvZGVfbWFya3VwKQorCisgICAgICAgICAgICBzb3VwID0gQmVhdXRpZnVsU291cChkb2MsICJodG1sLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cC5jb250YWluc19yZXBsYWNlbWVudF9jaGFyYWN0ZXJzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZ2luZy5kaXNhYmxlKGxvZ2dpbmcuTk9UU0VUKQorICAgICAgICAgICAgYnM0LmRhbW1pdC5jaGFyZGV0X2RhbW1pdCA9IGNoYXJkZXQKKworICAgIGRlZiB0ZXN0X2J5dGVfb3JkZXJfbWFya19yZW1vdmVkKHNlbGYpOgorICAgICAgICAjIEEgZG9jdW1lbnQgd3JpdHRlbiBpbiBVVEYtMTZMRSB3aWxsIGhhdmUgaXRzIGJ5dGUgb3JkZXIgbWFya2VyIHN0cmlwcGVkLgorICAgICAgICBkYXRhID0gYidceGZmXHhmZTxceDAwYVx4MDA+XHgwMFx4ZTFceDAwXHhlOVx4MDA8XHgwMC9ceDAwYVx4MDA+XHgwMCcKKyAgICAgICAgZGFtbWl0ID0gVW5pY29kZURhbW1pdChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiPGE+w6HDqTwvYT4iLCBkYW1taXQudW5pY29kZV9tYXJrdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInV0Zi0xNmxlIiwgZGFtbWl0Lm9yaWdpbmFsX2VuY29kaW5nKQorCisgICAgZGVmIHRlc3RfZGV0d2luZ2xlKHNlbGYpOgorICAgICAgICAjIEhlcmUncyBhIFVURjggZG9jdW1lbnQuCisgICAgICAgIHV0ZjggPSAodSJcTntTTk9XTUFOfSIgKiAzKS5lbmNvZGUoInV0ZjgiKQorCisgICAgICAgICMgSGVyZSdzIGEgV2luZG93cy0xMjUyIGRvY3VtZW50LgorICAgICAgICB3aW5kb3dzXzEyNTIgPSAoCisgICAgICAgICAgICB1IlxOe0xFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLfUhpLCBJIGxpa2UgV2luZG93cyEiCisgICAgICAgICAgICB1IlxOe1JJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSS30iKS5lbmNvZGUoIndpbmRvd3NfMTI1MiIpCisKKyAgICAgICAgIyBUaHJvdWdoIHNvbWUgdW5ob2x5IGFsY2hlbXksIHRoZXkndmUgYmVlbiBzdHVjayB0b2dldGhlci4KKyAgICAgICAgZG9jID0gdXRmOCArIHdpbmRvd3NfMTI1MiArIHV0ZjgKKworICAgICAgICAjIFRoZSBkb2N1bWVudCBjYW4ndCBiZSB0dXJuZWQgaW50byBVVEYtODoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkb2MuZGVjb2RlLCAidXRmOCIpCisKKyAgICAgICAgIyBVbmljb2RlLCBEYW1taXQgdGhpbmtzIHRoZSB3aG9sZSBkb2N1bWVudCBpcyBXaW5kb3dzLTEyNTIsCisgICAgICAgICMgYW5kIGRlY29kZXMgaXQgaW50byAiw6LLnMaSw6LLnMaSw6LLnMaS4oCcSGksIEkgbGlrZSBXaW5kb3dzIeKAncOiy5zGksOiy5zGksOiy5zGkiIKKworICAgICAgICAjIEJ1dCBpZiB3ZSBydW4gaXQgdGhyb3VnaCBmaXhfZW1iZWRkZWRfd2luZG93c18xMjUyLCBpdCdzIGZpeGVkOgorCisgICAgICAgIGZpeGVkID0gVW5pY29kZURhbW1pdC5kZXR3aW5nbGUoZG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSLimIPimIPimIPigJxIaSwgSSBsaWtlIFdpbmRvd3Mh4oCd4piD4piD4piDIiwgZml4ZWQuZGVjb2RlKCJ1dGY4IikpCisKKyAgICBkZWYgdGVzdF9kZXR3aW5nbGVfaWdub3Jlc19tdWx0aWJ5dGVfY2hhcmFjdGVycyhzZWxmKToKKyAgICAgICAgIyBFYWNoIG9mIHRoZXNlIGNoYXJhY3RlcnMgaGFzIGEgVVRGLTggcmVwcmVzZW50YXRpb24gZW5kaW5nCisgICAgICAgICMgaW4gXHg5My4gXHg5MyBpcyBhIHNtYXJ0IHF1b3RlIGlmIGludGVycHJldGVkIGFzCisgICAgICAgICMgV2luZG93cy0xMjUyLiBCdXQgb3VyIGNvZGUga25vd3MgdG8gc2tpcCBvdmVyIG11bHRpYnl0ZQorICAgICAgICAjIFVURi04IGNoYXJhY3RlcnMsIHNvIHRoZXknbGwgc3Vydml2ZSB0aGUgcHJvY2VzcyB1bnNjYXRoZWQuCisgICAgICAgIGZvciB0cmlja3lfdW5pY29kZV9jaGFyIGluICgKKyAgICAgICAgICAgIHUiXE57TEFUSU4gU01BTEwgTElHQVRVUkUgT0V9IiwgIyAyLWJ5dGUgY2hhciAnXHhjNVx4OTMnCisgICAgICAgICAgICB1IlxOe0xBVElOIFNVQlNDUklQVCBTTUFMTCBMRVRURVIgWH0iLCAjIDMtYnl0ZSBjaGFyICdceGUyXHg4Mlx4OTMnCisgICAgICAgICAgICB1Ilx4ZjBceDkwXHg5MFx4OTMiLCAjIFRoaXMgaXMgYSBDSksgY2hhcmFjdGVyLCBub3Qgc3VyZSB3aGljaCBvbmUuCisgICAgICAgICAgICApOgorICAgICAgICAgICAgaW5wdXQgPSB0cmlja3lfdW5pY29kZV9jaGFyLmVuY29kZSgidXRmOCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5wdXQuZW5kc3dpdGgoYidceDkzJykpCisgICAgICAgICAgICBvdXRwdXQgPSBVbmljb2RlRGFtbWl0LmRldHdpbmdsZShpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBpbnB1dCkKKworY2xhc3MgVGVzdE5hbWVkc3BhY2VkQXR0cmlidXRlKFNvdXBUZXN0KToKKworICAgIGRlZiB0ZXN0X25hbWVfbWF5X2JlX25vbmUoc2VsZik6CisgICAgICAgIGEgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJ4bWxucyIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgInhtbG5zIikKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9pc19lcXVpdmFsZW50X3RvX2NvbG9uX3NlcGFyYXRlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIGEgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJhIiwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhOmIiLCBhKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19hcmVfZXF1aXZhbGVudF9pZl9wcmVmaXhfYW5kX25hbWVfaWRlbnRpY2FsKHNlbGYpOgorICAgICAgICBhID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJiIiwgImMiKQorICAgICAgICBiID0gTmFtZXNwYWNlZEF0dHJpYnV0ZSgiYSIsICJiIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgIyBUaGUgYWN0dWFsIG5hbWVzcGFjZSBpcyBub3QgY29uc2lkZXJlZC4KKyAgICAgICAgYyA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAiYiIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYykKKworICAgICAgICAjIEJ1dCBuYW1lIGFuZCBwcmVmaXggYXJlIGltcG9ydGFudC4KKyAgICAgICAgZCA9IE5hbWVzcGFjZWRBdHRyaWJ1dGUoImEiLCAieiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBkKQorCisgICAgICAgIGUgPSBOYW1lc3BhY2VkQXR0cmlidXRlKCJ6IiwgImIiLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgZSkKKworCitjbGFzcyBUZXN0QXR0cmlidXRlVmFsdWVXaXRoQ2hhcnNldFN1YnN0aXR1dGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb250ZW50X21ldGFfYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IENoYXJzZXRNZXRhQXR0cmlidXRlVmFsdWUoImV1Yy1qcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImV1Yy1qcCIsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJldWMtanAiLCB2YWx1ZS5vcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidXRmOCIsIHZhbHVlLmVuY29kZSgidXRmOCIpKQorCisKKyAgICBkZWYgdGVzdF9jb250ZW50X21ldGFfYXR0cmlidXRlX3ZhbHVlKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IENvbnRlbnRNZXRhQXR0cmlidXRlVmFsdWUoInRleHQvaHRtbDsgY2hhcnNldD1ldWMtanAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9ZXVjLWpwIiwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRleHQvaHRtbDsgY2hhcnNldD1ldWMtanAiLCB2YWx1ZS5vcmlnaW5hbF92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9odG1sOyBjaGFyc2V0PXV0ZjgiLCB2YWx1ZS5lbmNvZGUoInV0ZjgiKSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2JzNC90ZXN0cy90ZXN0X3RyZWUucHkgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF90cmVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTE1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9iczQvdGVzdHMvdGVzdF90cmVlLnB5CkBAIC0wLDAgKzEsMTgyOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyIiIlRlc3RzIGZvciBCZWF1dGlmdWwgU291cCdzIHRyZWUgdHJhdmVyc2FsIG1ldGhvZHMuCisKK1RoZSB0cmVlIHRyYXZlcnNhbCBtZXRob2RzIGFyZSB0aGUgbWFpbiBhZHZhbnRhZ2Ugb2YgdXNpbmcgQmVhdXRpZnVsCitTb3VwIG92ZXIganVzdCB1c2luZyBhIHBhcnNlci4KKworRGlmZmVyZW50IHBhcnNlcnMgd2lsbCBidWlsZCBkaWZmZXJlbnQgQmVhdXRpZnVsIFNvdXAgdHJlZXMgZ2l2ZW4gdGhlCitzYW1lIG1hcmt1cCwgYnV0IGFsbCBCZWF1dGlmdWwgU291cCB0cmVlcyBjYW4gYmUgdHJhdmVyc2VkIHdpdGggdGhlCittZXRob2RzIHRlc3RlZCBoZXJlLgorIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgcGlja2xlCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBiczQgaW1wb3J0IEJlYXV0aWZ1bFNvdXAKK2Zyb20gYnM0LmJ1aWxkZXIgaW1wb3J0ICgKKyAgICBidWlsZGVyX3JlZ2lzdHJ5LAorICAgIEhUTUxQYXJzZXJUcmVlQnVpbGRlciwKKykKK2Zyb20gYnM0LmVsZW1lbnQgaW1wb3J0ICgKKyAgICBDRGF0YSwKKyAgICBDb21tZW50LAorICAgIERvY3R5cGUsCisgICAgTmF2aWdhYmxlU3RyaW5nLAorICAgIFNvdXBTdHJhaW5lciwKKyAgICBUYWcsCispCitmcm9tIGJzNC50ZXN0aW5nIGltcG9ydCAoCisgICAgU291cFRlc3QsCisgICAgc2tpcElmLAorKQorCitYTUxfQlVJTERFUl9QUkVTRU5UID0gKGJ1aWxkZXJfcmVnaXN0cnkubG9va3VwKCJ4bWwiKSBpcyBub3QgTm9uZSkKK0xYTUxfUFJFU0VOVCA9IChidWlsZGVyX3JlZ2lzdHJ5Lmxvb2t1cCgibHhtbCIpIGlzIG5vdCBOb25lKQorCitjbGFzcyBUcmVlVGVzdChTb3VwVGVzdCk6CisKKyAgICBkZWYgYXNzZXJ0U2VsZWN0cyhzZWxmLCB0YWdzLCBzaG91bGRfbWF0Y2gpOgorICAgICAgICAiIiJNYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gdGFncyBoYXZlIHRoZSBjb3JyZWN0IHRleHQuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGluIHRlc3RzIHRoYXQgZGVmaW5lIGEgYnVuY2ggb2YgdGFncywgZWFjaAorICAgICAgICBjb250YWluaW5nIGEgc2luZ2xlIHN0cmluZywgYW5kIHRoZW4gc2VsZWN0IGNlcnRhaW4gc3RyaW5ncyBieQorICAgICAgICBzb21lIG1lY2hhbmlzbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3RhZy5zdHJpbmcgZm9yIHRhZyBpbiB0YWdzXSwgc2hvdWxkX21hdGNoKQorCisgICAgZGVmIGFzc2VydFNlbGVjdHNJRHMoc2VsZiwgdGFncywgc2hvdWxkX21hdGNoKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIHRhZ3MgaGF2ZSB0aGUgY29ycmVjdCBJRHMuCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGluIHRlc3RzIHRoYXQgZGVmaW5lIGEgYnVuY2ggb2YgdGFncywgZWFjaAorICAgICAgICBjb250YWluaW5nIGEgc2luZ2xlIHN0cmluZywgYW5kIHRoZW4gc2VsZWN0IGNlcnRhaW4gc3RyaW5ncyBieQorICAgICAgICBzb21lIG1lY2hhbmlzbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3RhZ1snaWQnXSBmb3IgdGFnIGluIHRhZ3NdLCBzaG91bGRfbWF0Y2gpCisKKworY2xhc3MgVGVzdEZpbmQoVHJlZVRlc3QpOgorICAgICIiIkJhc2ljIHRlc3RzIG9mIHRoZSBmaW5kKCkgbWV0aG9kLgorCisgICAgZmluZCgpIGp1c3QgY2FsbHMgZmluZF9hbGwoKSB3aXRoIGxpbWl0PTEsIHNvIGl0J3Mgbm90IHRlc3RlZCBhbGwKKyAgICB0aGF0IHRob3Vyb3VnaGx5IGhlcmUuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9maW5kX3RhZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+MTwvYT48Yj4yPC9iPjxhPjM8L2E+PGI+NDwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZCgiYiIpLnN0cmluZywgIjIiKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV90ZXh0X2ZpbmQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodSc8aDE+UsOka3Ntw7ZyZ8OlczwvaDE+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmQodGV4dD11J1LDpGtzbcO2cmfDpXMnKSwgdSdSw6Rrc23DtnJnw6VzJykKKworICAgIGRlZiB0ZXN0X2ZpbmRfZXZlcnl0aGluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhbiBvcHRpbWl6YXRpb24gdGhhdCBmaW5kcyBhbGwgdGFncy4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmZpbmRfYWxsKCkpKQorCisgICAgZGVmIHRlc3RfZmluZF9ldmVyeXRoaW5nX3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhbiBvcHRpbWl6YXRpb24gdGhhdCBmaW5kcyBhbGwgdGFncyB3aXRoIGEgZ2l2ZW4gbmFtZS4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+Zm9vPC9hPjxiPmJhcjwvYj48YT5iYXo8L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc291cC5maW5kX2FsbCgnYScpKSkKKworY2xhc3MgVGVzdEZpbmRBbGwoVHJlZVRlc3QpOgorICAgICIiIkJhc2ljIHRlc3RzIG9mIHRoZSBmaW5kX2FsbCgpIG1ldGhvZC4iIiIKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3RleHRfbm9kZXMoc2VsZik6CisgICAgICAgICIiIllvdSBjYW4gc2VhcmNoIHRoZSB0cmVlIGZvciB0ZXh0IG5vZGVzLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8aHRtbD5Gb288Yj5iYXI8L2I+XHhiYjwvaHRtbD4iKQorICAgICAgICAjIEV4YWN0IG1hdGNoLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZF9hbGwodGV4dD0iYmFyIiksIFt1ImJhciJdKQorICAgICAgICAjIE1hdGNoIGFueSBvZiBhIG51bWJlciBvZiBzdHJpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5maW5kX2FsbCh0ZXh0PVsiRm9vIiwgImJhciJdKSwgW3UiRm9vIiwgdSJiYXIiXSkKKyAgICAgICAgIyBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKHRleHQ9cmUuY29tcGlsZSgnLionKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3UiRm9vIiwgdSJiYXIiLCB1J1x4YmInXSkKKyAgICAgICAgIyBNYXRjaCBhbnl0aGluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKHRleHQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3UiRm9vIiwgdSJiYXIiLCB1J1x4YmInXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2xpbWl0KHNlbGYpOgorICAgICAgICAiIiJZb3UgY2FuIGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgYnkgZmluZF9hbGwuIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjE8L2E+PGE+MjwvYT48YT4zPC9hPjxhPjQ8L2E+PGE+NTwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5maW5kX2FsbCgnYScsIGxpbWl0PTMpLCBbIjEiLCAiMiIsICIzIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MSksIFsiMSJdKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MTApLCBbIjEiLCAiMiIsICIzIiwgIjQiLCAiNSJdKQorCisgICAgICAgICMgQSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzb3VwLmZpbmRfYWxsKCdhJywgbGltaXQ9MCksIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1Il0pCisKKyAgICBkZWYgdGVzdF9jYWxsaW5nX2FfdGFnX2lzX2NhbGxpbmdfZmluZGFsbChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+MTwvYT48Yj4yPGEgaWQ9J2Zvbyc+MzwvYT48L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAoJ2EnLCBsaW1pdD0xKSwgWyIxIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzb3VwLmIoaWQ9ImZvbyIpLCBbIjMiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfc2VsZl9yZWZlcmVudGlhbF9kYXRhX3N0cnVjdHVyZV9kb2VzX25vdF9jYXVzZV9pbmZpbml0ZV9yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICAjIENyZWF0ZSBhIHNlbGYtcmVmZXJlbnRpYWwgbGlzdC4KKyAgICAgICAgbCA9IFtdCisgICAgICAgIGwuYXBwZW5kKGwpCisKKyAgICAgICAgIyBXaXRob3V0IHNwZWNpYWwgY29kZSBpbiBfbm9ybWFsaXplX3NlYXJjaF92YWx1ZSwgdGhpcyB3b3VsZCBjYXVzZSBpbmZpbml0ZQorICAgICAgICAjIHJlY3Vyc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbChsKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3Jlc3VsdHNldChzZWxmKToKKyAgICAgICAgIiIiQWxsIGZpbmRfYWxsIGNhbGxzIHJldHVybiBhIFJlc3VsdFNldCIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48L2E+IikKKyAgICAgICAgcmVzdWx0ID0gc291cC5maW5kX2FsbCgiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlc3VsdCwgInNvdXJjZSIpKQorCisgICAgICAgIHJlc3VsdCA9IHNvdXAuZmluZF9hbGwoVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzdWx0LCAic291cmNlIikpCisKKyAgICAgICAgcmVzdWx0ID0gc291cC5maW5kX2FsbCh0ZXh0PSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZXN1bHQsICJzb3VyY2UiKSkKKworCitjbGFzcyBUZXN0RmluZEFsbEJhc2ljTmFtZXNwYWNlcyhUcmVlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9maW5kX2J5X25hbWVzcGFjZWRfbmFtZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPG1hdGhtbDptc3FydD40PC9tYXRobWw6bXNxcnQ+PGEgc3ZnOmZpbGw9InJlZCI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNCIsIHNvdXAuZmluZCgibWF0aG1sOm1zcXJ0Iikuc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgc291cC5maW5kKGF0dHJzPSB7ICJzdmc6ZmlsbCIgOiAicmVkIiB9KS5uYW1lKQorCisKK2NsYXNzIFRlc3RGaW5kQWxsQnlOYW1lKFRyZWVUZXN0KToKKyAgICAiIiJUZXN0IHdheXMgb2YgZmluZGluZyB0YWdzIGJ5IHRhZyBuYW1lLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUcmVlVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRyZWUgPSAgc2VsZi5zb3VwKCIiIjxhPkZpcnN0IHRhZy48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+U2Vjb25kIHRhZy48L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGM+VGhpcmQgPGE+TmVzdGVkIHRhZy48L2E+IHRhZy48L2M+IiIiKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX25hbWUoc2VsZik6CisgICAgICAgICMgRmluZCBhbGwgdGhlIDxhPiB0YWdzLgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoJ2EnKSwgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9uYW1lX2FuZF90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoJ2EnLCB0ZXh0PSdGaXJzdCB0YWcuJyksIFsnRmlyc3QgdGFnLiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCgnYScsIHRleHQ9VHJ1ZSksIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCgnYScsIHRleHQ9cmUuY29tcGlsZSgidGFnIikpLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX29uX25vbl9yb290X2VsZW1lbnQoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBjYWxsIGZpbmRfYWxsIG9uIGFueSBub2RlLCBub3QganVzdCB0aGUgcm9vdC4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGYudHJlZS5jLmZpbmRfYWxsKCdhJyksIFsnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2NhbGxpbmdfZWxlbWVudF9pbnZva2VzX2ZpbmRfYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZi50cmVlKCdhJyksIFsnRmlyc3QgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX3N0cmFpbmVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICBzZWxmLnRyZWUuZmluZF9hbGwoU291cFN0cmFpbmVyKCdhJykpLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbChbJ2EnLCAnYiddKSwKKyAgICAgICAgICAgIFsnRmlyc3QgdGFnLicsICdTZWNvbmQgdGFnLicsICdOZXN0ZWQgdGFnLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfdGFnX2RpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbCh7J2EnIDogVHJ1ZSwgJ2InIDogVHJ1ZX0pLAorICAgICAgICAgICAgWydGaXJzdCB0YWcuJywgJ1NlY29uZCB0YWcuJywgJ05lc3RlZCB0YWcuJ10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV90YWdfcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygKKyAgICAgICAgICAgIHNlbGYudHJlZS5maW5kX2FsbChyZS5jb21waWxlKCdeW2FiXSQnKSksCisgICAgICAgICAgICBbJ0ZpcnN0IHRhZy4nLCAnU2Vjb25kIHRhZy4nLCAnTmVzdGVkIHRhZy4nXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfdGFnc19tYXRjaGluZ19tZXRob2Qoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBkZWZpbmUgYW4gb3JhY2xlIG1ldGhvZCB0aGF0IGRldGVybWluZXMgd2hldGhlcgorICAgICAgICAjIGEgdGFnIG1hdGNoZXMgdGhlIHNlYXJjaC4KKyAgICAgICAgZGVmIGlkX21hdGNoZXNfbmFtZSh0YWcpOgorICAgICAgICAgICAgcmV0dXJuIHRhZy5uYW1lID09IHRhZy5nZXQoJ2lkJykKKworICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSJhIj5NYXRjaCAxLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iMSI+RG9lcyBub3QgbWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGlkPSJiIj5NYXRjaCAyLjwvYT4iIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgdHJlZS5maW5kX2FsbChpZF9tYXRjaGVzX25hbWUpLCBbIk1hdGNoIDEuIiwgIk1hdGNoIDIuIl0pCisKKworY2xhc3MgVGVzdEZpbmRBbGxCeUF0dHJpYnV0ZShUcmVlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9hdHRyaWJ1dGVfbmFtZShzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgaW4ga2V5d29yZCBhcmd1bWVudHMgdG8gZmluZF9hbGwgdG8gc2VhcmNoIGJ5CisgICAgICAgICMgYXR0cmlidXRlLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJmaXJzdCI+TWF0Y2hpbmcgYS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9InNlY29uZCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbi1tYXRjaGluZyA8YiBpZD0iZmlyc3QiPk1hdGNoaW5nIGIuPC9iPmEuCisgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9J2ZpcnN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk1hdGNoaW5nIGEuIiwgIk1hdGNoaW5nIGIuIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV91dGY4X2F0dHJpYnV0ZV92YWx1ZShzZWxmKToKKyAgICAgICAgcGVhY2UgPSB1Ited15XXnNepIi5lbmNvZGUoInV0ZjgiKQorICAgICAgICBkYXRhID0gdSc8YSB0aXRsZT0i153Xldec16kiPjwvYT4nLmVuY29kZSgidXRmOCIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc291cC5hXSwgc291cC5maW5kX2FsbCh0aXRsZT1wZWFjZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3NvdXAuYV0sIHNvdXAuZmluZF9hbGwodGl0bGU9cGVhY2UuZGVjb2RlKCJ1dGY4IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzb3VwLmFdLCBzb3VwLmZpbmRfYWxsKHRpdGxlPVtwZWFjZSwgInNvbWV0aGluZyBlbHNlIl0pKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfYnlfYXR0cmlidXRlX2RpY3Qoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIGEgZGljdGlvbmFyeSBhcyB0aGUgYXJndW1lbnQgJ2F0dHJzJy4gVGhpcworICAgICAgICAjIGxldHMgeW91IHNlYXJjaCBmb3IgYXR0cmlidXRlcyBsaWtlICduYW1lJyAoYSBmaXhlZCBhcmd1bWVudAorICAgICAgICAjIHRvIGZpbmRfYWxsKSBhbmQgJ2NsYXNzJyAoYSByZXNlcnZlZCB3b3JkIGluIFB5dGhvbi4pCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0ibmFtZTEiIGNsYXNzPSJjbGFzczEiPk5hbWUgbWF0Y2guPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5hbWU9Im5hbWUyIiBjbGFzcz0iY2xhc3MyIj5DbGFzcyBtYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0ibmFtZTMiIGNsYXNzPSJjbGFzczMiPk5vbi1tYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWUxPkEgdGFnIGNhbGxlZCAnbmFtZTEnLjwvbmFtZTE+CisgICAgICAgICAgICAgICAgICAgICAgICAgIiIiKQorCisgICAgICAgICMgVGhpcyBkb2Vzbid0IGRvIHdoYXQgeW91IHdhbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKG5hbWU9J25hbWUxJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkEgdGFnIGNhbGxlZCAnbmFtZTEnLiJdKQorICAgICAgICAjIFRoaXMgZG9lcyB3aGF0IHlvdSB3YW50LgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbChhdHRycz17J25hbWUnIDogJ25hbWUxJ30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJOYW1lIG1hdGNoLiJdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGF0dHJzPXsnY2xhc3MnIDogJ2NsYXNzMid9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiQ2xhc3MgbWF0Y2guIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9ieV9jbGFzcyhzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iMSI+Q2xhc3MgMS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IjIiPkNsYXNzIDIuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPSIxIj5DbGFzcyAxLjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8YyBjbGFzcz0iMyA0Ij5DbGFzcyAzIGFuZCA0LjwvYz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgIyBQYXNzaW5nIGluIHRoZSBjbGFzc18ga2V5d29yZCBhcmd1bWVudCB3aWxsIHNlYXJjaCBhZ2FpbnN0CisgICAgICAgICMgdGhlICdjbGFzcycgYXR0cmlidXRlLgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHModHJlZS5maW5kX2FsbCgnYScsIGNsYXNzXz0nMScpLCBbJ0NsYXNzIDEuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdjJywgY2xhc3NfPSczJyksIFsnQ2xhc3MgMyBhbmQgNC4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2MnLCBjbGFzc189JzQnKSwgWydDbGFzcyAzIGFuZCA0LiddKQorCisgICAgICAgICMgUGFzc2luZyBpbiBhIHN0cmluZyB0byAnYXR0cnMnIHdpbGwgYWxzbyBzZWFyY2ggdGhlIENTUyBjbGFzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2EnLCAnMScpLCBbJ0NsYXNzIDEuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGF0dHJzPScxJyksIFsnQ2xhc3MgMS4nLCAnQ2xhc3MgMS4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoJ2MnLCAnMycpLCBbJ0NsYXNzIDMgYW5kIDQuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdjJywgJzQnKSwgWydDbGFzcyAzIGFuZCA0LiddKQorCisgICAgZGVmIHRlc3RfZmluZF9ieV9jbGFzc193aGVuX211bHRpcGxlX2NsYXNzZXNfcHJlc2VudChzZWxmKToKKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiPGdhciBjbGFzcz0nZm9vIGJhcic+Rm91bmQgaXQ8L2dhcj4iKQorCisgICAgICAgIGYgPSB0cmVlLmZpbmRfYWxsKCJnYXIiLCBjbGFzc189cmUuY29tcGlsZSgibyIpKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoZiwgWyJGb3VuZCBpdCJdKQorCisgICAgICAgIGYgPSB0cmVlLmZpbmRfYWxsKCJnYXIiLCBjbGFzc189cmUuY29tcGlsZSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoZiwgWyJGb3VuZCBpdCJdKQorCisgICAgICAgICMgU2luY2UgdGhlIGNsYXNzIGlzIG5vdCB0aGUgc3RyaW5nICJmb28gYmFyIiwgYnV0IHRoZSB0d28KKyAgICAgICAgIyBzdHJpbmdzICJmb28iIGFuZCAiYmFyIiwgdGhpcyB3aWxsIG5vdCBmaW5kIGFueXRoaW5nLgorICAgICAgICBmID0gdHJlZS5maW5kX2FsbCgiZ2FyIiwgY2xhc3NfPXJlLmNvbXBpbGUoIm8gYiIpKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoZiwgW10pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX25vbl9kaWN0aW9uYXJ5X2Zvcl9hdHRyc19maW5kc19ieV9jbGFzcyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGEgY2xhc3M9J2Jhcic+Rm91bmQgaXQ8L2E+IikKKworICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc291cC5maW5kX2FsbCgiYSIsIHJlLmNvbXBpbGUoImJhIikpLCBbIkZvdW5kIGl0Il0pCisKKyAgICAgICAgZGVmIGJpZ19hdHRyaWJ1dGVfdmFsdWUodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIGxlbih2YWx1ZSkgPiAzCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNvdXAuZmluZF9hbGwoImEiLCBiaWdfYXR0cmlidXRlX3ZhbHVlKSwgW10pCisKKyAgICAgICAgZGVmIHNtYWxsX2F0dHJpYnV0ZV92YWx1ZSh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gbGVuKHZhbHVlKSA8PSAzCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc291cC5maW5kX2FsbCgiYSIsIHNtYWxsX2F0dHJpYnV0ZV92YWx1ZSksIFsiRm91bmQgaXQiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfc3RyaW5nX2Zvcl9hdHRyc19maW5kc19tdWx0aXBsZV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8YSBjbGFzcz0iZm9vIGJhciI+PC9hPjxhIGNsYXNzPSJmb28iPjwvYT4nKQorICAgICAgICBhLCBhMiA9IHNvdXAuZmluZF9hbGwoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthLCBhMl0sIHNvdXAuZmluZF9hbGwoImEiLCAiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2FdLCBzb3VwLmZpbmRfYWxsKCJhIiwgImJhciIpKQorCisgICAgICAgICMgSWYgeW91IHNwZWNpZnkgdGhlIGNsYXNzIGFzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYQorICAgICAgICAjIHNwYWNlLCBvbmx5IHRoYXQgc3BlY2lmaWMgdmFsdWUgd2lsbCBiZSBmb3VuZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoImEiLCBjbGFzc189ImZvbyBiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYV0sIHNvdXAuZmluZF9hbGwoImEiLCAiZm9vIGJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKCJhIiwgImJhciBmb28iKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX2J5X2F0dHJpYnV0ZV9zb3Vwc3RyYWluZXIoc2VsZik6CisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImZpcnN0Ij5NYXRjaC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9InNlY29uZCI+Tm9uLW1hdGNoLjwvYT4iIiIpCisKKyAgICAgICAgc3RyYWluZXIgPSBTb3VwU3RyYWluZXIoYXR0cnM9eydpZCcgOiAnZmlyc3QnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoc3RyYWluZXIpLCBbJ01hdGNoLiddKQorCisgICAgZGVmIHRlc3RfZmluZF9hbGxfd2l0aF9taXNzaW5nX2F0cmlidXRlKHNlbGYpOgorICAgICAgICAjIFlvdSBjYW4gcGFzcyBpbiBOb25lIGFzIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgdG8gZmluZF9hbGwuCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHRhZ3MgdGhhdCBkbyBub3QgaGF2ZSB0aGF0IGF0dHJpYnV0ZSBzZXQuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9IjEiPklEIHByZXNlbnQuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPk5vIElEIHByZXNlbnQuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSIiPklEIGlzIGVtcHR5LjwvYT4iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKCdhJywgaWQ9Tm9uZSksIFsiTm8gSUQgcHJlc2VudC4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfZGVmaW5lZF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGluIE5vbmUgYXMgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSB0byBmaW5kX2FsbC4KKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggdGFncyB0aGF0IGhhdmUgdGhhdCBhdHRyaWJ1dGUgc2V0IHRvIGFueSB2YWx1ZS4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0iMSI+SUQgcHJlc2VudC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+Tm8gSUQgcHJlc2VudC48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IiI+SUQgaXMgZW1wdHkuPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgdHJlZS5maW5kX2FsbChpZD1UcnVlKSwgWyJJRCBwcmVzZW50LiIsICJJRCBpcyBlbXB0eS4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX3dpdGhfbnVtZXJpY19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgSWYgeW91IHNlYXJjaCBmb3IgYSBudW1iZXIsIGl0J3MgdHJlYXRlZCBhcyBhIHN0cmluZy4KKyAgICAgICAgdHJlZSA9IHNlbGYuc291cCgiIiI8YSBpZD0xPlVucXVvdGVkIGF0dHJpYnV0ZS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjEiPlF1b3RlZCBhdHRyaWJ1dGUuPC9hPiIiIikKKworICAgICAgICBleHBlY3RlZCA9IFsiVW5xdW90ZWQgYXR0cmlidXRlLiIsICJRdW90ZWQgYXR0cmlidXRlLiJdCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0cmVlLmZpbmRfYWxsKGlkPTEpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9IjEiKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX2xpc3RfYXR0cmlidXRlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBZb3UgY2FuIHBhc3MgYSBsaXN0IG9mIGF0dHJpYnV0ZSB2YWx1ZXMgaW5zdGVhZCBvZiBqdXN0IG9uZSwKKyAgICAgICAgIyBhbmQgeW91J2xsIGdldCB0YWdzIHRoYXQgbWF0Y2ggYW55IG9mIHRoZSB2YWx1ZXMuCisgICAgICAgIHRyZWUgPSBzZWxmLnNvdXAoIiIiPGEgaWQ9IjEiPjE8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjIiPjI8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IjMiPjM8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+Tm8gSUQuPC9hPiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9WyIxIiwgIjMiLCAiNCJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiMSIsICIzIl0pCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF93aXRoX3JlZ3VsYXJfZXhwcmVzc2lvbl9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgWW91IGNhbiBwYXNzIGEgcmVndWxhciBleHByZXNzaW9uIGFzIGFuIGF0dHJpYnV0ZSB2YWx1ZSwgYW5kCisgICAgICAgICMgeW91J2xsIGdldCB0YWdzIHdob3NlIHZhbHVlcyBmb3IgdGhhdCBhdHRyaWJ1dGUgbWF0Y2ggdGhlCisgICAgICAgICMgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxhIGlkPSJhIj5PbmUgYS48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImFhIj5Ud28gYXMuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJhYiI+TWl4ZWQgYXMgYW5kIGJzLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iYiI+T25lIGIuPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhPk5vIElELjwvYT4iIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHRyZWUuZmluZF9hbGwoaWQ9cmUuY29tcGlsZSgiXmErJCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiT25lIGEuIiwgIlR3byBhcy4iXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfbmFtZV9hbmRfY29udGFpbmluZ19zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPmZvbzwvYj48Yj5iYXI8L2I+PGE+Zm9vPC9hPiIpCisgICAgICAgIGEgPSBzb3VwLmEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbCgiYSIsIHRleHQ9ImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzb3VwLmZpbmRfYWxsKCJhIiwgdGV4dD0iYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNvdXAuZmluZF9hbGwoImEiLCB0ZXh0PSJiYXIiKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfbmFtZV9hbmRfY29udGFpbmluZ19zdHJpbmdfd2hlbl9zdHJpbmdfaXNfYnVyaWVkKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288L2E+PGE+PGI+PGM+Zm9vPC9jPjwvYj48L2E+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmZpbmRfYWxsKCJhIiksIHNvdXAuZmluZF9hbGwoImEiLCB0ZXh0PSJmb28iKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYnlfYXR0cmlidXRlX2FuZF9jb250YWluaW5nX3N0cmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGIgaWQ9IjEiPmZvbzwvYj48YSBpZD0iMiI+Zm9vPC9hPicpCisgICAgICAgIGEgPSBzb3VwLmEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFthXSwgc291cC5maW5kX2FsbChpZD0yLCB0ZXh0PSJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc291cC5maW5kX2FsbChpZD0xLCB0ZXh0PSJiYXIiKSkKKworCisKKworY2xhc3MgVGVzdEluZGV4KFRyZWVUZXN0KToKKyAgICAiIiJUZXN0IFRhZy5pbmRleCIiIgorICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIjxkaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+SWRlbnRpY2FsPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPk5vdCBpZGVudGljYWw8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+SWRlbnRpY2FsPC9hPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGM+PGQ+SWRlbnRpY2FsIHdpdGggY2hpbGQ8L2Q+PC9jPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkFsc28gbm90IGlkZW50aWNhbDwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yz48ZD5JZGVudGljYWwgd2l0aCBjaGlsZDwvZD48L2M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IiIiKQorICAgICAgICBkaXYgPSB0cmVlLmRpdgorICAgICAgICBmb3IgaSwgZWxlbWVudCBpbiBlbnVtZXJhdGUoZGl2LmNvbnRlbnRzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgZGl2LmluZGV4KGVsZW1lbnQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0cmVlLmluZGV4LCAxKQorCisKK2NsYXNzIFRlc3RQYXJlbnRPcGVyYXRpb25zKFRyZWVUZXN0KToKKyAgICAiIiJUZXN0IG5hdmlnYXRpb24gYW5kIHNlYXJjaGluZyB0aHJvdWdoIGFuIGVsZW1lbnQncyBwYXJlbnRzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UGFyZW50T3BlcmF0aW9ucywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnRyZWUgPSBzZWxmLnNvdXAoJycnPHVsIGlkPSJlbXB0eSI+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0idG9wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9Im1pZGRsZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0iYm90dG9tIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlN0YXJ0IGhlcmU8L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4nJycpCisgICAgICAgIHNlbGYuc3RhcnQgPSBzZWxmLnRyZWUuYgorCisKKyAgICBkZWYgdGVzdF9wYXJlbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5wYXJlbnRbJ2lkJ10sICdib3R0b20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQucGFyZW50LnBhcmVudFsnaWQnXSwgJ21pZGRsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5wYXJlbnQucGFyZW50LnBhcmVudFsnaWQnXSwgJ3RvcCcpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfb2ZfdG9wX3RhZ19pc19zb3VwX29iamVjdChzZWxmKToKKyAgICAgICAgdG9wX3RhZyA9IHNlbGYudHJlZS5jb250ZW50c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvcF90YWcucGFyZW50LCBzZWxmLnRyZWUpCisKKyAgICBkZWYgdGVzdF9zb3VwX29iamVjdF9oYXNfbm9fcGFyZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYudHJlZS5wYXJlbnQpCisKKyAgICBkZWYgdGVzdF9maW5kX3BhcmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcygKKyAgICAgICAgICAgIHNlbGYuc3RhcnQuZmluZF9wYXJlbnRzKCd1bCcpLCBbJ2JvdHRvbScsICdtaWRkbGUnLCAndG9wJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcygKKyAgICAgICAgICAgIHNlbGYuc3RhcnQuZmluZF9wYXJlbnRzKCd1bCcsIGlkPSJtaWRkbGUiKSwgWydtaWRkbGUnXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcGFyZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9wYXJlbnQoJ3VsJylbJ2lkJ10sICdib3R0b20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQuZmluZF9wYXJlbnQoJ3VsJywgaWQ9J3RvcCcpWydpZCddLCAndG9wJykKKworICAgIGRlZiB0ZXN0X3BhcmVudF9vZl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJTdGFydCBoZXJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnBhcmVudC5uYW1lLCAnYicpCisKKyAgICBkZWYgdGVzdF90ZXh0X2VsZW1lbnRfZmluZF9wYXJlbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJTdGFydCBoZXJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmZpbmRfcGFyZW50KCd1bCcpWydpZCddLCAnYm90dG9tJykKKworICAgIGRlZiB0ZXN0X3BhcmVudF9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbcGFyZW50WydpZCddIGZvciBwYXJlbnQgaW4gc2VsZi5zdGFydC5wYXJlbnRzCisgICAgICAgICAgICAgICAgICAgaWYgcGFyZW50IGlzIG5vdCBOb25lIGFuZCAnaWQnIGluIHBhcmVudC5hdHRyc10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnRzLCBbJ2JvdHRvbScsICdtaWRkbGUnLCAndG9wJ10pCisKKworY2xhc3MgUHJveGltaXR5VGVzdChUcmVlVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRyZWVUZXN0LCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudHJlZSA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICc8aHRtbCBpZD0ic3RhcnQiPjxoZWFkPjwvaGVhZD48Ym9keT48YiBpZD0iMSI+T25lPC9iPjxiIGlkPSIyIj5Ud288L2I+PGIgaWQ9IjMiPlRocmVlPC9iPjwvYm9keT48L2h0bWw+JykKKworCitjbGFzcyBUZXN0TmV4dE9wZXJhdGlvbnMoUHJveGltaXR5VGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3ROZXh0T3BlcmF0aW9ucywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnN0YXJ0ID0gc2VsZi50cmVlLmIKKworICAgIGRlZiB0ZXN0X25leHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X2VsZW1lbnQsICJPbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhcnQubmV4dF9lbGVtZW50Lm5leHRfZWxlbWVudFsnaWQnXSwgIjIiKQorCisgICAgZGVmIHRlc3RfbmV4dF9vZl9sYXN0X2l0ZW1faXNfbm9uZShzZWxmKToKKyAgICAgICAgbGFzdCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlRocmVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYXN0Lm5leHRfZWxlbWVudCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25leHRfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICAjIFRoZSBkb2N1bWVudCByb290IGlzIG91dHNpZGUgdGhlIG5leHQvcHJldmlvdXMgY2hhaW4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmVlLm5leHRfZWxlbWVudCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfYWxsX25leHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLnN0YXJ0LmZpbmRfYWxsX25leHQoJ2InKSwgWyJUd28iLCAiVGhyZWUiXSkKKyAgICAgICAgc2VsZi5zdGFydC5maW5kX2FsbF9uZXh0KGlkPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLnN0YXJ0LmZpbmRfYWxsX25leHQoaWQ9MyksIFsiVGhyZWUiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfbmV4dCgnYicpWydpZCddLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5maW5kX25leHQodGV4dD0iVGhyZWUiKSwgIlRocmVlIikKKworICAgIGRlZiB0ZXN0X2ZpbmRfbmV4dF9mb3JfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50cmVlLmZpbmQodGV4dD0iT25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmZpbmRfbmV4dCgiYiIpLnN0cmluZywgIlR3byIpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyh0ZXh0LmZpbmRfYWxsX25leHQoImIiKSwgWyJUd28iLCAiVGhyZWUiXSkKKworICAgIGRlZiB0ZXN0X25leHRfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudHJlZS5maW5kKHRleHQ9IlR3byIpCisgICAgICAgIHN1Y2Nlc3NvcnMgPSBbbm9kZSBmb3Igbm9kZSBpbiBzdGFydC5uZXh0X2VsZW1lbnRzXQorICAgICAgICAjIFRoZXJlIGFyZSB0d28gc3VjY2Vzc29yczogdGhlIGZpbmFsIDxiPiB0YWcgYW5kIGl0cyB0ZXh0IGNvbnRlbnRzLgorICAgICAgICB0YWcsIGNvbnRlbnRzID0gc3VjY2Vzc29ycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhZ1snaWQnXSwgJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCAiVGhyZWUiKQorCitjbGFzcyBUZXN0UHJldmlvdXNPcGVyYXRpb25zKFByb3hpbWl0eVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0UHJldmlvdXNPcGVyYXRpb25zLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuZW5kID0gc2VsZi50cmVlLmZpbmQodGV4dD0iVGhyZWUiKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfZWxlbWVudFsnaWQnXSwgIjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW5kLnByZXZpb3VzX2VsZW1lbnQucHJldmlvdXNfZWxlbWVudCwgIlR3byIpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19vZl9maXJzdF9pdGVtX2lzX25vbmUoc2VsZik6CisgICAgICAgIGZpcnN0ID0gc2VsZi50cmVlLmZpbmQoJ2h0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0LnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19vZl9yb290X2lzX25vbmUoc2VsZik6CisgICAgICAgICMgVGhlIGRvY3VtZW50IHJvb3QgaXMgb3V0c2lkZSB0aGUgbmV4dC9wcmV2aW91cyBjaGFpbi4KKyAgICAgICAgIyBYWFggVGhpcyBpcyBicm9rZW4hCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5wcmV2aW91c19lbGVtZW50LCBOb25lKQorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9maW5kX2FsbF9wcmV2aW91cyhzZWxmKToKKyAgICAgICAgIyBUaGUgPGI+IHRhZyBjb250YWluaW5nIHRoZSAiVGhyZWUiIG5vZGUgaXMgdGhlIHByZWRlY2Vzc29yCisgICAgICAgICMgb2YgdGhlICJUaHJlZSIgbm9kZSBpdHNlbGYsIHdoaWNoIGlzIHdoeSAiVGhyZWUiIHNob3dzIHVwCisgICAgICAgICMgaGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKAorICAgICAgICAgICAgc2VsZi5lbmQuZmluZF9hbGxfcHJldmlvdXMoJ2InKSwgWyJUaHJlZSIsICJUd28iLCAiT25lIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzZWxmLmVuZC5maW5kX2FsbF9wcmV2aW91cyhpZD0xKSwgWyJPbmUiXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcHJldmlvdXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQuZmluZF9wcmV2aW91cygnYicpWydpZCddLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQuZmluZF9wcmV2aW91cyh0ZXh0PSJPbmUiKSwgIk9uZSIpCisKKyAgICBkZWYgdGVzdF9maW5kX3ByZXZpb3VzX2Zvcl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRyZWUuZmluZCh0ZXh0PSJUaHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5maW5kX3ByZXZpb3VzKCJiIikuc3RyaW5nLCAiVGhyZWUiKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoCisgICAgICAgICAgICB0ZXh0LmZpbmRfYWxsX3ByZXZpb3VzKCJiIiksIFsiVGhyZWUiLCAiVHdvIiwgIk9uZSJdKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudHJlZS5maW5kKHRleHQ9Ik9uZSIpCisgICAgICAgIHByZWRlY2Vzc29ycyA9IFtub2RlIGZvciBub2RlIGluIHN0YXJ0LnByZXZpb3VzX2VsZW1lbnRzXQorCisgICAgICAgICMgVGhlcmUgYXJlIGZvdXIgcHJlZGVjZXNzb3JzOiB0aGUgPGI+IHRhZyBjb250YWluaW5nICJPbmUiCisgICAgICAgICMgdGhlIDxib2R5PiB0YWcsIHRoZSA8aGVhZD4gdGFnLCBhbmQgdGhlIDxodG1sPiB0YWcuCisgICAgICAgIGIsIGJvZHksIGhlYWQsIGh0bWwgPSBwcmVkZWNlc3NvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWydpZCddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9keS5uYW1lLCAiYm9keSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZC5uYW1lLCAiaGVhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHRtbC5uYW1lLCAiaHRtbCIpCisKKworY2xhc3MgU2libGluZ1Rlc3QoVHJlZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihTaWJsaW5nVGVzdCwgc2VsZikuc2V0VXAoKQorICAgICAgICBtYXJrdXAgPSAnJyc8aHRtbD4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjEiPgorICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjEuMSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIyIj4KKyAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSIyLjEiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMyI+CisgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iMy4xIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9IjQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9odG1sPicnJworICAgICAgICAjIEFsbCB0aGF0IHdoaXRlc3BhY2UgbG9va3MgZ29vZCBidXQgbWFrZXMgdGhlIHRlc3RzIG1vcmUKKyAgICAgICAgIyBkaWZmaWN1bHQuIEdldCByaWQgb2YgaXQuCisgICAgICAgIG1hcmt1cCA9IHJlLmNvbXBpbGUoIlxuXHMqIikuc3ViKCIiLCBtYXJrdXApCisgICAgICAgIHNlbGYudHJlZSA9IHNlbGYuc291cChtYXJrdXApCisKKworY2xhc3MgVGVzdE5leHRTaWJsaW5nKFNpYmxpbmdUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdE5leHRTaWJsaW5nLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuc3RhcnQgPSBzZWxmLnRyZWUuZmluZChpZD0iMSIpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmdfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGFydC5uZXh0X3NpYmxpbmdbJ2lkJ10sICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfc2libGluZy5uZXh0X3NpYmxpbmdbJ2lkJ10sICczJykKKworICAgICAgICAjIE5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBuZXh0X3NpYmxpbmcgYW5kIG5leHRfZWxlbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0Lm5leHRfZWxlbWVudFsnaWQnXSwgJzEuMScpCisKKyAgICBkZWYgdGVzdF9uZXh0X3NpYmxpbmdfbWF5X25vdF9leGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUuaHRtbC5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgbmVzdGVkX3NwYW4gPSBzZWxmLnRyZWUuZmluZChpZD0iMS4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXN0ZWRfc3Bhbi5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgbGFzdF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhc3Rfc3Bhbi5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX25leHRfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5nKCdzcGFuJylbJ2lkJ10sICcyJykKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLnN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5ncygic3BhbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycyJywgJzMnLCAnNCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLnN0YXJ0LmZpbmRfbmV4dF9zaWJsaW5ncyhpZD0nMycpLCBbJzMnXSkKKworICAgIGRlZiB0ZXN0X25leHRfc2libGluZ19mb3JfdGV4dF9lbGVtZW50KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCJGb288Yj5iYXI8L2I+YmF6IikKKyAgICAgICAgc3RhcnQgPSBzb3VwLmZpbmQodGV4dD0iRm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5uZXh0X3NpYmxpbmcubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0Lm5leHRfc2libGluZy5uZXh0X3NpYmxpbmcsICdiYXonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cyhzdGFydC5maW5kX25leHRfc2libGluZ3MoJ2InKSwgWydiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5maW5kX25leHRfc2libGluZyh0ZXh0PSJiYXoiKSwgImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnQuZmluZF9uZXh0X3NpYmxpbmcodGV4dD0ibm9uZXN1Y2giKSwgTm9uZSkKKworCitjbGFzcyBUZXN0UHJldmlvdXNTaWJsaW5nKFNpYmxpbmdUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFByZXZpb3VzU2libGluZywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmVuZCA9IHNlbGYudHJlZS5maW5kKGlkPSI0IikKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmdfb2Zfcm9vdF9pc19ub25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJlZS5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19zaWJsaW5nWydpZCddLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmQucHJldmlvdXNfc2libGluZy5wcmV2aW91c19zaWJsaW5nWydpZCddLCAnMicpCisKKyAgICAgICAgIyBOb3RlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcHJldmlvdXNfc2libGluZyBhbmQgcHJldmlvdXNfZWxlbWVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5wcmV2aW91c19lbGVtZW50WydpZCddLCAnMy4xJykKKworICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3NpYmxpbmdfbWF5X25vdF9leGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyZWUuaHRtbC5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgICAgIG5lc3RlZF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjEuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVzdGVkX3NwYW4ucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgICAgICBmaXJzdF9zcGFuID0gc2VsZi50cmVlLmZpbmQoaWQ9IjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0X3NwYW4ucHJldmlvdXNfc2libGluZywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcHJldmlvdXNfc2libGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuZC5maW5kX3ByZXZpb3VzX3NpYmxpbmcoJ3NwYW4nKVsnaWQnXSwgJzMnKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfc2libGluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxmLmVuZC5maW5kX3ByZXZpb3VzX3NpYmxpbmdzKCJzcGFuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJzMnLCAnMicsICcxJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzSURzKHNlbGYuZW5kLmZpbmRfcHJldmlvdXNfc2libGluZ3MoaWQ9JzEnKSwgWycxJ10pCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19zaWJsaW5nX2Zvcl90ZXh0X2VsZW1lbnQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIkZvbzxiPmJhcjwvYj5iYXoiKQorICAgICAgICBzdGFydCA9IHNvdXAuZmluZCh0ZXh0PSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LnByZXZpb3VzX3NpYmxpbmcubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LnByZXZpb3VzX3NpYmxpbmcucHJldmlvdXNfc2libGluZywgJ0ZvbycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHN0YXJ0LmZpbmRfcHJldmlvdXNfc2libGluZ3MoJ2InKSwgWydiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydC5maW5kX3ByZXZpb3VzX3NpYmxpbmcodGV4dD0iRm9vIiksICJGb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0LmZpbmRfcHJldmlvdXNfc2libGluZyh0ZXh0PSJub25lc3VjaCIpLCBOb25lKQorCisKK2NsYXNzIFRlc3RUYWdDcmVhdGlvbihTb3VwVGVzdCk6CisgICAgIiIiVGVzdCB0aGUgYWJpbGl0eSB0byBjcmVhdGUgbmV3IHRhZ3MuIiIiCisgICAgZGVmIHRlc3RfbmV3X3RhZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgbmV3X3RhZyA9IHNvdXAubmV3X3RhZygiZm9vIiwgYmFyPSJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShuZXdfdGFnLCBUYWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb28iLCBuZXdfdGFnLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChiYXI9ImJheiIpLCBuZXdfdGFnLmF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIG5ld190YWcucGFyZW50KQorCisgICAgZGVmIHRlc3RfdGFnX2luaGVyaXRzX3NlbGZfY2xvc2luZ19ydWxlc19mcm9tX2J1aWxkZXIoc2VsZik6CisgICAgICAgIGlmIFhNTF9CVUlMREVSX1BSRVNFTlQ6CisgICAgICAgICAgICB4bWxfc291cCA9IEJlYXV0aWZ1bFNvdXAoIiIsICJ4bWwiKQorICAgICAgICAgICAgeG1sX2JyID0geG1sX3NvdXAubmV3X3RhZygiYnIiKQorICAgICAgICAgICAgeG1sX3AgPSB4bWxfc291cC5uZXdfdGFnKCJwIikKKworICAgICAgICAgICAgIyBCb3RoIHRoZSA8YnI+IGFuZCA8cD4gdGFnIGFyZSBlbXB0eS1lbGVtZW50LCBqdXN0IGJlY2F1c2UKKyAgICAgICAgICAgICMgdGhleSBoYXZlIG5vIGNvbnRlbnRzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxici8+IiwgeG1sX2JyLmVuY29kZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjxwLz4iLCB4bWxfcC5lbmNvZGUoKSkKKworICAgICAgICBodG1sX3NvdXAgPSBCZWF1dGlmdWxTb3VwKCIiLCAiaHRtbCIpCisgICAgICAgIGh0bWxfYnIgPSBodG1sX3NvdXAubmV3X3RhZygiYnIiKQorICAgICAgICBodG1sX3AgPSBodG1sX3NvdXAubmV3X3RhZygicCIpCisKKyAgICAgICAgIyBUaGUgSFRNTCBidWlsZGVyIHVzZXJzIEhUTUwncyBydWxlcyBhYm91dCB3aGljaCB0YWdzIGFyZQorICAgICAgICAjIGVtcHR5LWVsZW1lbnQgdGFncywgYW5kIHRoZSBuZXcgdGFncyByZWZsZWN0IHRoZXNlIHJ1bGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPGJyLz4iLCBodG1sX2JyLmVuY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiPHA+PC9wPiIsIGh0bWxfcC5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X25ld19zdHJpbmdfY3JlYXRlc19uYXZpZ2FibGVzdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHMgPSBzb3VwLm5ld19zdHJpbmcoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZvbyIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHMsIE5hdmlnYWJsZVN0cmluZykpCisKKyAgICBkZWYgdGVzdF9uZXdfc3RyaW5nX2Nhbl9jcmVhdGVfbmF2aWdhYmxlc3RyaW5nX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBzID0gc291cC5uZXdfc3RyaW5nKCJmb28iLCBDb21tZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb28iLCBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzLCBDb21tZW50KSkKKworY2xhc3MgVGVzdFRyZWVNb2RpZmljYXRpb24oU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX21vZGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGEgaWQ9IjEiPjwvYT4nKQorICAgICAgICBzb3VwLmFbJ2lkJ10gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoJzxhIGlkPSIyIj48L2E+JykpCisgICAgICAgIGRlbChzb3VwLmFbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoJzxhPjwvYT4nKSkKKyAgICAgICAgc291cC5hWydpZDInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoJzxhIGlkMj0iZm9vIj48L2E+JykpCisKKyAgICBkZWYgdGVzdF9uZXdfdGFnX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBidWlsZGVyID0gYnVpbGRlcl9yZWdpc3RyeS5sb29rdXAoJ2h0bWwnKSgpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxib2R5PjwvYm9keT4iLCBidWlsZGVyPWJ1aWxkZXIpCisgICAgICAgIGEgPSBUYWcoc291cCwgYnVpbGRlciwgJ2EnKQorICAgICAgICBvbCA9IFRhZyhzb3VwLCBidWlsZGVyLCAnb2wnKQorICAgICAgICBhWydocmVmJ10gPSAnaHR0cDovL2Zvby5jb20vJworICAgICAgICBzb3VwLmJvZHkuaW5zZXJ0KDAsIGEpCisgICAgICAgIHNvdXAuYm9keS5pbnNlcnQoMSwgb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmJvZHkuZW5jb2RlKCksCisgICAgICAgICAgICBiJzxib2R5PjxhIGhyZWY9Imh0dHA6Ly9mb28uY29tLyI+PC9hPjxvbD48L29sPjwvYm9keT4nKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX3RvX2NvbnRlbnRzX21vdmVzX3RhZyhzZWxmKToKKyAgICAgICAgZG9jID0gIiIiPHAgaWQ9IjEiPkRvbid0IGxlYXZlIG1lIDxiPmhlcmU8L2I+LjwvcD4KKyAgICAgICAgICAgICAgICA8cCBpZD0iMiI+RG9uXCd0IGxlYXZlITwvcD4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkb2MpCisgICAgICAgIHNlY29uZF9wYXJhID0gc291cC5maW5kKGlkPScyJykKKyAgICAgICAgYm9sZCA9IHNvdXAuYgorCisgICAgICAgICMgTW92ZSB0aGUgPGI+IHRhZyB0byB0aGUgZW5kIG9mIHRoZSBzZWNvbmQgcGFyYWdyYXBoLgorICAgICAgICBzb3VwLmZpbmQoaWQ9JzInKS5hcHBlbmQoc291cC5iKQorCisgICAgICAgICMgVGhlIDxiPiB0YWcgaXMgbm93IGEgY2hpbGQgb2YgdGhlIHNlY29uZCBwYXJhZ3JhcGguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9sZC5wYXJlbnQsIHNlY29uZF9wYXJhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAnPHAgaWQ9IjEiPkRvblwndCBsZWF2ZSBtZSAuPC9wPlxuJworICAgICAgICAgICAgICAgICc8cCBpZD0iMiI+RG9uXCd0IGxlYXZlITxiPmhlcmU8L2I+PC9wPicpKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV93aXRoX3JldHVybnNfdGhpbmdfdGhhdF93YXNfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIHRleHQgPSAiPGE+PC9hPjxiPjxjPjwvYz48L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIGEgPSBzb3VwLmEKKyAgICAgICAgbmV3X2EgPSBhLnJlcGxhY2Vfd2l0aChzb3VwLmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbmV3X2EpCisKKyAgICBkZWYgdGVzdF91bndyYXBfcmV0dXJuc190aGluZ190aGF0X3dhc19yZXBsYWNlZChzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48Yj48L2I+PGM+PC9jPjwvYT4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAodGV4dCkKKyAgICAgICAgYSA9IHNvdXAuYQorICAgICAgICBuZXdfYSA9IGEudW53cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBuZXdfYSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfdGFnX3dpdGhfaXRzZWxmKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjxiPjwvYj48Yz5Gb288ZD48L2Q+PC9jPjwvYT48YT48ZT48L2U+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBjID0gc291cC5jCisgICAgICAgIHNvdXAuYy5yZXBsYWNlX3dpdGgoYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2Zvcih0ZXh0KSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfdGFnX3dpdGhfaXRzX3BhcmVudF9yYWlzZXNfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIjxhPjxiPjwvYj48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNvdXAuYi5yZXBsYWNlX3dpdGgsIHNvdXAuYSkKKworICAgIGRlZiB0ZXN0X2luc2VydF90YWdfaW50b19pdHNlbGZfcmFpc2VzX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGV4dCA9ICI8YT48Yj48L2I+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCh0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzb3VwLmEuaW5zZXJ0LCAwLCBzb3VwLmEpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dpdGhfbWFpbnRhaW5zX25leHRfZWxlbWVudF90aHJvdWdob3V0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8cD48YT5vbmU8L2E+PGI+dGhyZWU8L2I+PC9wPicpCisgICAgICAgIGEgPSBzb3VwLmEKKyAgICAgICAgYiA9IGEuY29udGVudHNbMF0KKyAgICAgICAgIyBNYWtlIGl0IHNvIHRoZSA8YT4gdGFnIGhhcyB0d28gdGV4dCBjaGlsZHJlbi4KKyAgICAgICAgYS5pbnNlcnQoMSwgInR3byIpCisKKyAgICAgICAgIyBOb3cgcmVwbGFjZSBlYWNoIG9uZSB3aXRoIHRoZSBlbXB0eSBzdHJpbmcuCisgICAgICAgIGxlZnQsIHJpZ2h0ID0gYS5jb250ZW50cworICAgICAgICBsZWZ0LnJlcGxhY2VXaXRoKCcnKQorICAgICAgICByaWdodC5yZXBsYWNlV2l0aCgnJykKKworICAgICAgICAjIFRoZSA8Yj4gdGFnIGlzIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgdHJlZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGhyZWUiLCBzb3VwLmIuc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV9maW5hbF9ub2RlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5BcmdoITwvYj4iKQorICAgICAgICBzb3VwLmZpbmQodGV4dD0iQXJnaCEiKS5yZXBsYWNlX3dpdGgoIkhvb3JheSEiKQorICAgICAgICBuZXdfdGV4dCA9IHNvdXAuZmluZCh0ZXh0PSJIb29yYXkhIikKKyAgICAgICAgYiA9IHNvdXAuYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX2VsZW1lbnQsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucGFyZW50LCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX2VsZW1lbnQubmV4dF9lbGVtZW50LCBuZXdfdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5uZXh0X2VsZW1lbnQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jb25zZWN1dGl2ZV90ZXh0X25vZGVzKHNlbGYpOgorICAgICAgICAjIEEgYnVpbGRlciBzaG91bGQgbmV2ZXIgY3JlYXRlIHR3byBjb25zZWN1dGl2ZSB0ZXh0IG5vZGVzLAorICAgICAgICAjIGJ1dCBpZiB5b3UgaW5zZXJ0IG9uZSBuZXh0IHRvIGFub3RoZXIsIEJlYXV0aWZ1bCBTb3VwIHdpbGwKKyAgICAgICAgIyBoYW5kbGUgaXQgY29ycmVjdGx5LgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5BcmdoITwvYj48Yz48L2M+PC9hPiIpCisgICAgICAgIHNvdXAuYi5pbnNlcnQoMSwgIkhvb3JheSEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPGE+PGI+QXJnaCFIb29yYXkhPC9iPjxjPjwvYz48L2E+IikpCisKKyAgICAgICAgbmV3X3RleHQgPSBzb3VwLmZpbmQodGV4dD0iSG9vcmF5ISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X3RleHQucHJldmlvdXNfZWxlbWVudCwgIkFyZ2ghIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19lbGVtZW50Lm5leHRfZWxlbWVudCwgbmV3X3RleHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5wcmV2aW91c19zaWJsaW5nLCAiQXJnaCEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0LnByZXZpb3VzX3NpYmxpbmcubmV4dF9zaWJsaW5nLCBuZXdfdGV4dCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZXh0Lm5leHRfc2libGluZywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfdGV4dC5uZXh0X2VsZW1lbnQsIHNvdXAuYykKKworICAgIGRlZiB0ZXN0X2luc2VydF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDAsICJiYXIiKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDAsICJmb28iKQorICAgICAgICAjIFRoZSBzdHJpbmcgd2VyZSBhZGRlZCB0byB0aGUgdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiZm9vIiwgImJhciJdLCBzb3VwLmEuY29udGVudHMpCisgICAgICAgICMgQW5kIHRoZXkgd2VyZSBjb252ZXJ0ZWQgdG8gTmF2aWdhYmxlU3RyaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuY29udGVudHNbMF0ubmV4dF9lbGVtZW50LCAiYmFyIikKKworICAgIGRlZiB0ZXN0X2luc2VydF90YWcoc2VsZik6CisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLmRlZmF1bHRfYnVpbGRlcgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKAorICAgICAgICAgICAgIjxhPjxiPkZpbmQ8L2I+PGM+bGFkeSE8L2M+PGQ+PC9kPjwvYT4iLCBidWlsZGVyPWJ1aWxkZXIpCisgICAgICAgIG1hZ2ljX3RhZyA9IFRhZyhzb3VwLCBidWlsZGVyLCAnbWFnaWN0YWcnKQorICAgICAgICBtYWdpY190YWcuaW5zZXJ0KDAsICJ0aGUiKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDEsIG1hZ2ljX3RhZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxhPjxiPkZpbmQ8L2I+PG1hZ2ljdGFnPnRoZTwvbWFnaWN0YWc+PGM+bGFkeSE8L2M+PGQ+PC9kPjwvYT4iKSkKKworICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgYXJlIGhvb2tlZCB1cCBjb3JyZWN0bHkuCisgICAgICAgIGJfdGFnID0gc291cC5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYl90YWcubmV4dF9zaWJsaW5nLCBtYWdpY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWNfdGFnLnByZXZpb3VzX3NpYmxpbmcsIGJfdGFnKQorCisgICAgICAgIGZpbmQgPSBiX3RhZy5maW5kKHRleHQ9IkZpbmQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmQubmV4dF9lbGVtZW50LCBtYWdpY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWNfdGFnLnByZXZpb3VzX2VsZW1lbnQsIGZpbmQpCisKKyAgICAgICAgY190YWcgPSBzb3VwLmMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWdpY190YWcubmV4dF9zaWJsaW5nLCBjX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3RhZy5wcmV2aW91c19zaWJsaW5nLCBtYWdpY190YWcpCisKKyAgICAgICAgdGhlID0gbWFnaWNfdGFnLmZpbmQodGV4dD0idGhlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGUucGFyZW50LCBtYWdpY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlLm5leHRfZWxlbWVudCwgY190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY190YWcucHJldmlvdXNfZWxlbWVudCwgdGhlKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX2NoaWxkX3RoYXRzX2FscmVhZHlfYXRfdGhlX2VuZChzZWxmKToKKyAgICAgICAgZGF0YSA9ICI8YT48Yj48L2I+PC9hPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICBzb3VwLmEuYXBwZW5kKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzb3VwLmRlY29kZSgpKQorCisgICAgZGVmIHRlc3RfbW92ZV90YWdfdG9fYmVnaW5uaW5nX29mX3BhcmVudChzZWxmKToKKyAgICAgICAgZGF0YSA9ICI8YT48Yj48L2I+PGM+PC9jPjxkPjwvZD48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYS5pbnNlcnQoMCwgc291cC5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8YT48ZD48L2Q+PGI+PC9iPjxjPjwvYz48L2E+Iiwgc291cC5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X2luc2VydF93b3Jrc19vbl9lbXB0eV9lbGVtZW50X3RhZyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGEgbGl0dGxlIHN0cmFuZ2UsIHNpbmNlIG1vc3QgSFRNTCBwYXJzZXJzIGRvbid0IGFsbG93CisgICAgICAgICMgbWFya3VwIGxpa2UgdGhpcyB0byBjb21lIHRocm91Z2guIEJ1dCBpbiBnZW5lcmFsLCB3ZSBkb24ndAorICAgICAgICAjIGtub3cgd2hhdCB0aGUgcGFyc2VyIHdvdWxkIG9yIHdvdWxkbid0IGhhdmUgYWxsb3dlZCwgc28KKyAgICAgICAgIyBJJ20gbGV0dGluZyB0aGlzIHN1Y2NlZWQgZm9yIG5vdy4KKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGJyLz4iKQorICAgICAgICBzb3VwLmJyLmluc2VydCgxLCAiQ29udGVudHMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzb3VwLmJyKSwgIjxicj5Db250ZW50czwvYnI+IikKKworICAgIGRlZiB0ZXN0X2luc2VydF9iZWZvcmUoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgc291cC5iLmluc2VydF9iZWZvcmUoIkJBWiIpCisgICAgICAgIHNvdXAuYS5pbnNlcnRfYmVmb3JlKCJRVVVYIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCJRVVVYPGE+Zm9vPC9hPkJBWjxiPmJhcjwvYj4iKSkKKworICAgICAgICBzb3VwLmEuaW5zZXJ0X2JlZm9yZShzb3VwLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiUVVVWDxiPmJhcjwvYj48YT5mb288L2E+QkFaIikpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfYWZ0ZXIoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgc291cC5iLmluc2VydF9hZnRlcigiQkFaIikKKyAgICAgICAgc291cC5hLmluc2VydF9hZnRlcigiUVVVWCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigiPGE+Zm9vPC9hPlFVVVg8Yj5iYXI8L2I+QkFaIikpCisgICAgICAgIHNvdXAuYi5pbnNlcnRfYWZ0ZXIoc291cC5hKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIlFVVVg8Yj5iYXI8L2I+PGE+Zm9vPC9hPkJBWiIpKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0X2FmdGVyX3JhaXNlc19leGNlcHRpb25faWZfYWZ0ZXJfaGFzX25vX21lYW5pbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHRhZyA9IHNvdXAubmV3X3RhZygiYSIpCisgICAgICAgIHN0cmluZyA9IHNvdXAubmV3X3N0cmluZygiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmluc2VydF9hZnRlciwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzb3VwLmluc2VydF9hZnRlciwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YWcuaW5zZXJ0X2FmdGVyLCB0YWcpCisKKyAgICBkZWYgdGVzdF9pbnNlcnRfYmVmb3JlX3JhaXNlc19ub3RpbXBsZW1lbnRlZGVycm9yX2lmX2JlZm9yZV9oYXNfbm9fbWVhbmluZyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgdGFnID0gc291cC5uZXdfdGFnKCJhIikKKyAgICAgICAgc3RyaW5nID0gc291cC5uZXdfc3RyaW5nKCIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuaW5zZXJ0X2JlZm9yZSwgdGFnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzb3VwLmluc2VydF9iZWZvcmUsIHRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFnLmluc2VydF9iZWZvcmUsIHRhZykKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Vfd2l0aChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICAgICAiPHA+VGhlcmUncyA8Yj5ubzwvYj4gYnVzaW5lc3MgbGlrZSA8Yj5zaG93PC9iPiBidXNpbmVzczwvcD4iKQorICAgICAgICBubywgc2hvdyA9IHNvdXAuZmluZF9hbGwoJ2InKQorICAgICAgICBzaG93LnJlcGxhY2Vfd2l0aChubykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksCisgICAgICAgICAgICBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPHA+VGhlcmUncyAgYnVzaW5lc3MgbGlrZSA8Yj5ubzwvYj4gYnVzaW5lc3M8L3A+IikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG93LnBhcmVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuby5wYXJlbnQsIHNvdXAucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuby5uZXh0X2VsZW1lbnQsICJubyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm8ubmV4dF9zaWJsaW5nLCAiIGJ1c2luZXNzIikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfZmlyc3RfY2hpbGQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiPGE+PGI+PC9iPjxjPjwvYz48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYi5yZXBsYWNlX3dpdGgoc291cC5jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8YT48Yz48L2M+PC9hPiIsIHNvdXAuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2xhc3RfY2hpbGQoc2VsZik6CisgICAgICAgIGRhdGEgPSAiPGE+PGI+PC9iPjxjPjwvYz48L2E+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGRhdGEpCisgICAgICAgIHNvdXAuYy5yZXBsYWNlX3dpdGgoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8YT48Yj48L2I+PC9hPiIsIHNvdXAuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfdGFnX3JlcGxhY2Vfd2l0aChzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgKKyAgICAgICAgICAgICIiIjxhPldlPGI+cmVzZXJ2ZTxjPnRoZTwvYz48ZD5yaWdodDwvZD48L2I+PC9hPjxlPnRvPGY+cmVmdXNlPC9mPjxnPnNlcnZpY2U8L2c+PC9lPiIiIikKKworICAgICAgICAjIFJlcGxhY2UgdGhlIGVudGlyZSA8Yj4gdGFnIGFuZCBpdHMgY29udGVudHMgKCJyZXNlcnZlIHRoZQorICAgICAgICAjIHJpZ2h0Iikgd2l0aCB0aGUgPGY+IHRhZyAoInJlZnVzZSIpLgorICAgICAgICByZW1vdmVfdGFnID0gc291cC5iCisgICAgICAgIG1vdmVfdGFnID0gc291cC5mCisgICAgICAgIHJlbW92ZV90YWcucmVwbGFjZV93aXRoKG1vdmVfdGFnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmRlY29kZSgpLCBzZWxmLmRvY3VtZW50X2ZvcigKKyAgICAgICAgICAgICAgICAiPGE+V2U8Zj5yZWZ1c2U8L2Y+PC9hPjxlPnRvPGc+c2VydmljZTwvZz48L2U+IikpCisKKyAgICAgICAgIyBUaGUgPGI+IHRhZyBpcyBub3cgYW4gb3JwaGFuLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcucGFyZW50LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV90YWcuZmluZCh0ZXh0PSJyaWdodCIpLm5leHRfZWxlbWVudCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfdGFnLnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5uZXh0X3NpYmxpbmcsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3RhZy5wcmV2aW91c19zaWJsaW5nLCBOb25lKQorCisgICAgICAgICMgVGhlIDxmPiB0YWcgaXMgbm93IGNvbm5lY3RlZCB0byB0aGUgPGE+IHRhZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5wYXJlbnQsIHNvdXAuYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5wcmV2aW91c19lbGVtZW50LCAiV2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vdmVfdGFnLm5leHRfZWxlbWVudC5uZXh0X2VsZW1lbnQsIHNvdXAuZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3ZlX3RhZy5uZXh0X3NpYmxpbmcsIE5vbmUpCisKKyAgICAgICAgIyBUaGUgZ2FwIHdoZXJlIHRoZSA8Zj4gdGFnIHVzZWQgdG8gYmUgaGFzIGJlZW4gbWVuZGVkLCBhbmQKKyAgICAgICAgIyB0aGUgd29yZCAidG8iIGlzIG5vdyBjb25uZWN0ZWQgdG8gdGhlIDxnPiB0YWcuCisgICAgICAgIHRvX3RleHQgPSBzb3VwLmZpbmQodGV4dD0idG8iKQorICAgICAgICBnX3RhZyA9IHNvdXAuZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvX3RleHQubmV4dF9lbGVtZW50LCBnX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190ZXh0Lm5leHRfc2libGluZywgZ190YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ190YWcucHJldmlvdXNfZWxlbWVudCwgdG9fdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnX3RhZy5wcmV2aW91c19zaWJsaW5nLCB0b190ZXh0KQorCisgICAgZGVmIHRlc3RfdW53cmFwKHNlbGYpOgorICAgICAgICB0cmVlID0gc2VsZi5zb3VwKCIiIgorICAgICAgICAgICAgPHA+VW5uZWVkZWQgPGVtPmZvcm1hdHRpbmc8L2VtPiBpcyB1bm5lZWRlZDwvcD4KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgdHJlZS5lbS51bndyYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUuZW0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJlZS5wLnRleHQsICJVbm5lZWRlZCBmb3JtYXR0aW5nIGlzIHVubmVlZGVkIikKKworICAgIGRlZiB0ZXN0X3dyYXAoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIkkgd2lzaCBJIHdhcyBib2xkLiIpCisgICAgICAgIHZhbHVlID0gc291cC5zdHJpbmcud3JhcChzb3VwLm5ld190YWcoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5kZWNvZGUoKSwgIjxiPkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoIjxiPkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZXh0cmFjdHNfdGFnX2Zyb21fZWxzZXdoZXJlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj48L2I+SSB3aXNoIEkgd2FzIGJvbGQuIikKKyAgICAgICAgc291cC5iLm5leHRfc2libGluZy53cmFwKHNvdXAuYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZGVjb2RlKCksIHNlbGYuZG9jdW1lbnRfZm9yKCI8Yj5JIHdpc2ggSSB3YXMgYm9sZC48L2I+IikpCisKKyAgICBkZWYgdGVzdF93cmFwX3B1dHNfbmV3X2NvbnRlbnRzX2F0X3RoZV9lbmQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPkkgbGlrZSBiZWluZyBib2xkLjwvYj5JIHdpc2ggSSB3YXMgYm9sZC4iKQorICAgICAgICBzb3VwLmIubmV4dF9zaWJsaW5nLndyYXAoc291cC5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzb3VwLmIuY29udGVudHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgc2VsZi5kb2N1bWVudF9mb3IoCisgICAgICAgICAgICAgICAgIjxiPkkgbGlrZSBiZWluZyBib2xkLkkgd2lzaCBJIHdhcyBib2xkLjwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Qoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoCisgICAgICAgICAgICAnPGh0bWw+PGJvZHk+U29tZSBjb250ZW50LiA8ZGl2IGlkPSJuYXYiPk5hdiBjcmFwPC9kaXY+IE1vcmUgY29udGVudC48L2JvZHk+PC9odG1sPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cC5ib2R5LmNvbnRlbnRzKSwgMykKKyAgICAgICAgZXh0cmFjdGVkID0gc291cC5maW5kKGlkPSJuYXYiKS5leHRyYWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc291cC5kZWNvZGUoKSwgIjxodG1sPjxib2R5PlNvbWUgY29udGVudC4gIE1vcmUgY29udGVudC48L2JvZHk+PC9odG1sPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLmRlY29kZSgpLCAnPGRpdiBpZD0ibmF2Ij5OYXYgY3JhcDwvZGl2PicpCisKKyAgICAgICAgIyBUaGUgZXh0cmFjdGVkIHRhZyBpcyBub3cgYW4gb3JwaGFuLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLmJvZHkuY29udGVudHMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3RlZC5wYXJlbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLnByZXZpb3VzX2VsZW1lbnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdGVkLm5leHRfZWxlbWVudC5uZXh0X2VsZW1lbnQsIE5vbmUpCisKKyAgICAgICAgIyBUaGUgZ2FwIHdoZXJlIHRoZSBleHRyYWN0ZWQgdGFnIHVzZWQgdG8gYmUgaGFzIGJlZW4gbWVuZGVkLgorICAgICAgICBjb250ZW50XzEgPSBzb3VwLmZpbmQodGV4dD0iU29tZSBjb250ZW50LiAiKQorICAgICAgICBjb250ZW50XzIgPSBzb3VwLmZpbmQodGV4dD0iIE1vcmUgY29udGVudC4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRfMS5uZXh0X2VsZW1lbnQsIGNvbnRlbnRfMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50XzEubmV4dF9zaWJsaW5nLCBjb250ZW50XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudF8yLnByZXZpb3VzX2VsZW1lbnQsIGNvbnRlbnRfMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50XzIucHJldmlvdXNfc2libGluZywgY29udGVudF8xKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9kaXN0aW5ndWlzaGVzX2JldHdlZW5faWRlbnRpY2FsX3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYT48Yj5iYXI8L2I+IikKKyAgICAgICAgZm9vXzEgPSBzb3VwLmEuc3RyaW5nCisgICAgICAgIGJhcl8xID0gc291cC5iLnN0cmluZworICAgICAgICBmb29fMiA9IHNvdXAubmV3X3N0cmluZygiZm9vIikKKyAgICAgICAgYmFyXzIgPSBzb3VwLm5ld19zdHJpbmcoImJhciIpCisgICAgICAgIHNvdXAuYS5hcHBlbmQoZm9vXzIpCisgICAgICAgIHNvdXAuYi5hcHBlbmQoYmFyXzIpCisKKyAgICAgICAgIyBOb3cgdGhlcmUgYXJlIHR3byBpZGVudGljYWwgc3RyaW5ncyBpbiB0aGUgPGE+IHRhZywgYW5kIHR3bworICAgICAgICAjIGluIHRoZSA8Yj4gdGFnLiBMZXQncyByZW1vdmUgdGhlIGZpcnN0ICJmb28iIGFuZCB0aGUgc2Vjb25kCisgICAgICAgICMgImJhciIuCisgICAgICAgIGZvb18xLmV4dHJhY3QoKQorICAgICAgICBiYXJfMi5leHRyYWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29fMiwgc291cC5hLnN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXJfMiwgc291cC5iLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICAiIiJUYWcuY2xlYXIoKSIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8cD48YT5TdHJpbmcgPGVtPkl0YWxpY2l6ZWQ8L2VtPjwvYT4gYW5kIGFub3RoZXI8L3A+IikKKyAgICAgICAgIyBjbGVhciB1c2luZyBleHRyYWN0KCkKKyAgICAgICAgYSA9IHNvdXAuYQorICAgICAgICBzb3VwLnAuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLnAuY29udGVudHMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiY29udGVudHMiKSkKKworICAgICAgICAjIGNsZWFyIHVzaW5nIGRlY29tcG9zZSgpCisgICAgICAgIGVtID0gYS5lbQorICAgICAgICBhLmNsZWFyKGRlY29tcG9zZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihlbS5jb250ZW50cykpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfc2V0KHNlbGYpOgorICAgICAgICAiIiJUYWcuc3RyaW5nID0gJ3N0cmluZyciIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiA8Yj48Yz48L2M+PC9iPiIpCisgICAgICAgIHNvdXAuYS5zdHJpbmcgPSAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5jb250ZW50cywgWyJmb28iXSkKKyAgICAgICAgc291cC5iLnN0cmluZyA9ICJiYXIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLmNvbnRlbnRzLCBbImJhciJdKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3NldF9kb2VzX25vdF9hZmZlY3Rfb3JpZ2luYWxfc3RyaW5nKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5mb288L2I+PGM+YmFyPC9jPiIpCisgICAgICAgIHNvdXAuYi5zdHJpbmcgPSBzb3VwLmMuc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLmVuY29kZSgpLCBiIjxhPjxiPmJhcjwvYj48Yz5iYXI8L2M+PC9hPiIpCisKKyAgICBkZWYgdGVzdF9zZXRfc3RyaW5nX3ByZXNlcnZlc19jbGFzc19vZl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBjZGF0YSA9IENEYXRhKCJmb28iKQorICAgICAgICBzb3VwLmEuc3RyaW5nID0gY2RhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc291cC5hLnN0cmluZywgQ0RhdGEpKQorCitjbGFzcyBUZXN0RWxlbWVudE9iamVjdHMoU291cFRlc3QpOgorICAgICIiIlRlc3QgdmFyaW91cyBmZWF0dXJlcyBvZiBlbGVtZW50IG9iamVjdHMuIiIiCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgICIiIlRoZSBsZW5ndGggb2YgYW4gZWxlbWVudCBpcyBpdHMgbnVtYmVyIG9mIGNoaWxkcmVuLiIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8dG9wPjE8Yj4yPC9iPjM8L3RvcD4iKQorCisgICAgICAgICMgVGhlIEJlYXV0aWZ1bFNvdXAgb2JqZWN0IGl0c2VsZiBjb250YWlucyBvbmUgZWxlbWVudDogdGhlCisgICAgICAgICMgPHRvcD4gdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLmNvbnRlbnRzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc291cCksIDEpCisKKyAgICAgICAgIyBUaGUgPHRvcD4gdGFnIGNvbnRhaW5zIHRocmVlIGVsZW1lbnRzOiB0aGUgdGV4dCBub2RlICIxIiwgdGhlCisgICAgICAgICMgPGI+IHRhZywgYW5kIHRoZSB0ZXh0IG5vZGUgIjMiLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzb3VwLnRvcCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNvdXAudG9wLmNvbnRlbnRzKSwgMykKKworICAgIGRlZiB0ZXN0X21lbWJlcl9hY2Nlc3NfaW52b2tlc19maW5kKHNlbGYpOgorICAgICAgICAiIiJBY2Nlc3NpbmcgYSBQeXRob24gbWVtYmVyIC5mb28gaW52b2tlcyBmaW5kKCdmb28nKSIiIgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8Yj48aT48L2k+PC9iPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLCBzb3VwLmZpbmQoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuaSwgc291cC5maW5kKCdiJykuZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfbWVtYmVyX2FjY2VzcyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgnPGI+PGk+PC9pPjwvYj4nKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgdGFnID0gc291cC5iVGFnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLCB0YWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnLmJUYWcgaXMgZGVwcmVjYXRlZCwgdXNlIC5maW5kKCJiIikgaW5zdGVhZC4nLAorICAgICAgICAgICAgc3RyKHdbMF0ubWVzc2FnZSkpCisKKyAgICBkZWYgdGVzdF9oYXNfYXR0cihzZWxmKToKKyAgICAgICAgIiIiaGFzX2F0dHIoKSBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbiBhdHRyaWJ1dGUuCisKKyAgICAgICAgUGxlYXNlIG5vdGUgbm90ZTogaGFzX2F0dHIoKSBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgICBfX2luX18uIGhhc19hdHRyKCkgY2hlY2tzIHRoZSB0YWcncyBhdHRyaWJ1dGVzIGFuZCBfX2luX18KKyAgICAgICAgY2hlY2tzIHRoZSB0YWcncyBjaGlkbHJlbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxmb28gYXR0cj0nYmFyJz4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cC5mb28uaGFzX2F0dHIoJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb3VwLmZvby5oYXNfYXR0cignYXR0cjInKSkKKworCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19jb21lX291dF9pbl9hbHBoYWJldGljYWxfb3JkZXIoc2VsZik6CisgICAgICAgIG1hcmt1cCA9ICc8YiBhPSIxIiB6PSI1IiBtPSIzIiBmPSIyIiB5PSI0Ij48L2I+JworICAgICAgICBzZWxmLmFzc2VydFNvdXBFcXVhbHMobWFya3VwLCAnPGIgYT0iMSIgZj0iMiIgbT0iMyIgeT0iNCIgej0iNSI+PC9iPicpCisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgQSB0YWcgdGhhdCBjb250YWlucyBvbmx5IGEgdGV4dCBub2RlIG1ha2VzIHRoYXQgbm9kZQorICAgICAgICAjIGF2YWlsYWJsZSBhcyAuc3RyaW5nLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8Yj5mb288L2I+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmIuc3RyaW5nLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3RhZ19oYXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGFnIHdpdGggbm8gY2hpbGRyZW4gaGFzIG5vIC5zdGlybmcuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxiPjwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF90YWdfd2l0aF9tdWx0aXBsZV9jaGlsZHJlbl9oYXNfbm9fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGFnIHdpdGggbm8gY2hpbGRyZW4gaGFzIG5vIC5zdHJpbmcuCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzxiPjwvYj48Yj48L2I+PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZywgTm9uZSkKKworICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT5mb288Yj48L2I+YmFyPC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5iLnN0cmluZywgTm9uZSkKKworICAgICAgICAjIEV2ZW4gaWYgYWxsIHRoZSBjaGlsZHJlbiBhcmUgc3RyaW5ncywgZHVlIHRvIHRyaWNrZXJ5LAorICAgICAgICAjIGl0IHdvbid0IHdvcmstLWJ1dCB0aGlzIHdvdWxkIGJlIGEgZ29vZCBvcHRpbWl6YXRpb24uCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPmZvbzwvYj4iKQorICAgICAgICBzb3VwLmEuaW5zZXJ0KDEsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5zdHJpbmcsIE5vbmUpCisKKyAgICBkZWYgdGVzdF90YWdfd2l0aF9yZWN1cnNpdmVfc3RyaW5nX2hhc19zdHJpbmcoc2VsZik6CisgICAgICAgICMgQSB0YWcgd2l0aCBhIHNpbmdsZSBjaGlsZCB3aGljaCBoYXMgYSAuc3RyaW5nIGluaGVyaXRzIHRoYXQKKyAgICAgICAgIyAuc3RyaW5nLgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YT48Yj5mb288L2I+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5hLnN0cmluZywgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5zdHJpbmcsICJmb28iKQorCisgICAgZGVmIHRlc3RfbGFja19vZl9zdHJpbmcoc2VsZik6CisgICAgICAgICIiIk9ubHkgYSB0YWcgY29udGFpbmluZyBhIHNpbmdsZSB0ZXh0IG5vZGUgaGFzIGEgLnN0cmluZy4iIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+ZjxpPmU8L2k+bzwvYj4iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvdXAuYi5zdHJpbmcpCisKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGI+PC9iPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc291cC5iLnN0cmluZykKKworICAgIGRlZiB0ZXN0X2FsbF90ZXh0KHNlbGYpOgorICAgICAgICAiIiJUYWcudGV4dCBhbmQgVGFnLmdldF90ZXh0KHNlcD11IiIpIC0+IGFsbCBjaGlsZCB0ZXh0LCBjb25jYXRlbmF0ZWQiIiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+YTxiPnI8L2I+ICAgPHI+IHQgPC9yPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS50ZXh0LCAiYXIgIHQgIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuZ2V0X3RleHQoc3RyaXA9VHJ1ZSksICJhcnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYS5nZXRfdGV4dCgiLCIpLCAiYSxyLCAsIHQgIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmEuZ2V0X3RleHQoIiwiLCBzdHJpcD1UcnVlKSwgImEscix0IikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X2lnbm9yZXNfY29tbWVudHMoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoImZvbzwhLS1JR05PUkUtLT5iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZ2V0X3RleHQoKSwgImZvb2JhciIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZ2V0X3RleHQodHlwZXM9KE5hdmlnYWJsZVN0cmluZywgQ29tbWVudCkpLCAiZm9vSUdOT1JFYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvdXAuZ2V0X3RleHQodHlwZXM9Tm9uZSksICJmb29JR05PUkViYXIiKQorCisgICAgZGVmIHRlc3RfYWxsX3N0cmluZ3NfaWdub3Jlc19jb21tZW50cyhzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiZm9vPCEtLUlHTk9SRS0tPmJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydmb28nLCAnYmFyJ10sIGxpc3Qoc291cC5zdHJpbmdzKSkKKworY2xhc3MgVGVzdENEQXRhTGlzdEF0dHJpYnV0ZXMoU291cFRlc3QpOgorCisgICAgIiIiVGVzdGluZyBjZGF0YS1saXN0IGF0dHJpYnV0ZXMgbGlrZSAnY2xhc3MnLgorICAgICIiIgorICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZV9iZWNvbWVzX2xpc3Qoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhIGNsYXNzPSdmb28nPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJmb28iXSxzb3VwLmFbJ2NsYXNzJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV92YWx1ZXNfYmVjb21lc19saXN0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vIGJhcic+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImZvbyIsICJiYXIiXSwgc291cC5hWydjbGFzcyddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfdmFsdWVzX3NlcGFyYXRlZF9ieV93ZWlyZF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vXHRiYXJcbmJheic+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImZvbyIsICJiYXIiLCAiYmF6Il0sc291cC5hWydjbGFzcyddKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlc19qb2luZWRfaW50b19zdHJpbmdfb25fb3V0cHV0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCI8YSBjbGFzcz0nZm9vXHRiYXInPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYic8YSBjbGFzcz0iZm9vIGJhciI+PC9hPicsIHNvdXAuYS5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X2FjY2VwdF9jaGFyc2V0KHNlbGYpOgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCc8Zm9ybSBhY2NlcHQtY2hhcnNldD0iSVNPLTg4NTktMSBVVEYtOCI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lTTy04ODU5LTEnLCAnVVRGLTgnXSwgc291cC5mb3JtWydhY2NlcHQtY2hhcnNldCddKQorCisgICAgZGVmIHRlc3RfY2RhdGFfYXR0cmlidXRlX2FwcGx5aW5nX29ubHlfdG9fb25lX3RhZyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICc8YSBhY2NlcHQtY2hhcnNldD0iSVNPLTg4NTktMSBVVEYtOCI+PC9hPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChkYXRhKQorICAgICAgICAjIFdlIHNhdyBpbiBhbm90aGVyIHRlc3QgdGhhdCBhY2NlcHQtY2hhcnNldCBpcyBhIGNkYXRhLWxpc3QKKyAgICAgICAgIyBhdHRyaWJ1dGUgZm9yIHRoZSA8Zm9ybT4gdGFnLiBCdXQgaXQncyBub3QgYSBjZGF0YS1saXN0CisgICAgICAgICMgYXR0cmlidXRlIGZvciBhbnkgb3RoZXIgdGFnLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJU08tODg1OS0xIFVURi04Jywgc291cC5hWydhY2NlcHQtY2hhcnNldCddKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2hhc19pbW11dGFibGVfbmFtZV9wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgc3RyaW5nID0gc2VsZi5zb3VwKCJzIikuc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc3RyaW5nLm5hbWUpCisgICAgICAgIGRlZiB0KCk6CisgICAgICAgICAgICBzdHJpbmcubmFtZSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCB0KQorCitjbGFzcyBUZXN0UGVyc2lzdGVuY2UoU291cFRlc3QpOgorICAgICJUZXN0aW5nIGZlYXR1cmVzIGxpa2UgcGlja2xlIGFuZCBkZWVwY29weS4iCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RQZXJzaXN0ZW5jZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnBhZ2UgPSAiIiI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iCisiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC90cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+QmVhdXRpZnVsIFNvdXA6IFdlIGNhbGxlZCBoaW0gVG9ydG9pc2UgYmVjYXVzZSBoZSB0YXVnaHQgdXMuPC90aXRsZT4KKzxsaW5rIHJldj0ibWFkZSIgaHJlZj0ibWFpbHRvOmxlb25hcmRyQHNlZ2ZhdWx0Lm9yZyI+Cis8bWV0YSBuYW1lPSJEZXNjcmlwdGlvbiIgY29udGVudD0iQmVhdXRpZnVsIFNvdXA6IGFuIEhUTUwgcGFyc2VyIG9wdGltaXplZCBmb3Igc2NyZWVuLXNjcmFwaW5nLiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Ik1hcmtvdiBBcHByb3hpbWF0aW9uIDEuNCAobW9kdWxlOiBsZW9uYXJkcikiPgorPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJMZW9uYXJkIFJpY2hhcmRzb24iPgorPC9oZWFkPgorPGJvZHk+Cis8YSBocmVmPSJmb28iPmZvbzwvYT4KKzxhIGhyZWY9ImZvbyI+PGI+YmFyPC9iPjwvYT4KKzwvYm9keT4KKzwvaHRtbD4iIiIKKyAgICAgICAgc2VsZi50cmVlID0gc2VsZi5zb3VwKHNlbGYucGFnZSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9hbmRfdW5waWNrbGVfaWRlbnRpdHkoc2VsZik6CisgICAgICAgICMgUGlja2xpbmcgYSB0cmVlLCB0aGVuIHVucGlja2xpbmcgaXQsIHlpZWxkcyBhIHRyZWUgaWRlbnRpY2FsCisgICAgICAgICMgdG8gdGhlIG9yaWdpbmFsLgorICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMoc2VsZi50cmVlLCAyKQorICAgICAgICBsb2FkZWQgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX2NsYXNzX18sIEJlYXV0aWZ1bFNvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmRlY29kZSgpLCBzZWxmLnRyZWUuZGVjb2RlKCkpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pZGVudGl0eShzZWxmKToKKyAgICAgICAgIyBNYWtpbmcgYSBkZWVwY29weSBvZiBhIHRyZWUgeWllbGRzIGFuIGlkZW50aWNhbCB0cmVlLgorICAgICAgICBjb3BpZWQgPSBjb3B5LmRlZXBjb3B5KHNlbGYudHJlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3BpZWQuZGVjb2RlKCksIHNlbGYudHJlZS5kZWNvZGUoKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfcGlja2xlKHNlbGYpOgorICAgICAgICAjIEEgdHJlZSBjb250YWluaW5nIFVuaWNvZGUgY2hhcmFjdGVycyBjYW4gYmUgcGlja2xlZC4KKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhzb3VwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKyAgICAgICAgbG9hZGVkID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZGVjb2RlKCksIHNvdXAuZGVjb2RlKCkpCisKKworY2xhc3MgVGVzdFN1YnN0aXR1dGlvbnMoU291cFRlc3QpOgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9mb3JtYXR0ZXJfaXNfbWluaW1hbChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKQorICAgICAgICAjIFRoZSA8IGlzIGNvbnZlcnRlZCBiYWNrIGludG8gJmx0OyBidXQgdGhlIGUtd2l0aC1hY3V0ZSBpcyBsZWZ0IGFsb25lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGVjb2RlZCwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgIHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9odG1sKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlcj0iaHRtbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IoIjxiPiZsdDsmbHQ7U2FjciZlYWN1dGU7IGJsZXUhJmd0OyZndDs8L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfbWluaW1hbChzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Jmx0O1NhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1ISZndDsmZ3Q7PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGRlY29kZWQgPSBzb3VwLmRlY29kZShmb3JtYXR0ZXI9Im1pbmltYWwiKQorICAgICAgICAjIFRoZSA8IGlzIGNvbnZlcnRlZCBiYWNrIGludG8gJmx0OyBidXQgdGhlIGUtd2l0aC1hY3V0ZSBpcyBsZWZ0IGFsb25lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZGVjb2RlZCwKKyAgICAgICAgICAgIHNlbGYuZG9jdW1lbnRfZm9yKAorICAgICAgICAgICAgICAgIHUiPGI+Jmx0OyZsdDtTYWNyXE57TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURX0gYmxldSEmZ3Q7Jmd0OzwvYj4iKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9udWxsKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSB1IjxiPiZsdDsmbHQ7U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhJmd0OyZndDs8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlcj1Ob25lKQorICAgICAgICAjIE5laXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXRzIG5vciB0aGUgZS13aXRoLWFjdXRlIGFyZSBjb252ZXJ0ZWQuCisgICAgICAgICMgVGhpcyBpcyBub3QgdmFsaWQgSFRNTCwgYnV0IGl0J3Mgd2hhdCB0aGUgdXNlciB3YW50ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IodSI8Yj48PFNhY3JcTntMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFfSBibGV1IT4+PC9iPiIpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyX2N1c3RvbShzZWxmKToKKyAgICAgICAgbWFya3VwID0gdSI8Yj4mbHQ7Zm9vJmd0OzwvYj48Yj5iYXI8L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCkKKyAgICAgICAgZGVjb2RlZCA9IHNvdXAuZGVjb2RlKGZvcm1hdHRlciA9IGxhbWJkYSB4OiB4LnVwcGVyKCkpCisgICAgICAgICMgSW5zdGVhZCBvZiBub3JtYWwgZW50aXR5IGNvbnZlcnNpb24gY29kZSwgdGhlIGN1c3RvbQorICAgICAgICAjIGNhbGxhYmxlIGlzIGNhbGxlZCBvbiBldmVyeSBzdHJpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLAorICAgICAgICAgICAgc2VsZi5kb2N1bWVudF9mb3IodSI8Yj48Rk9PPjwvYj48Yj5CQVI8L2I+IikpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfaXNfcnVuX29uX2F0dHJpYnV0ZV92YWx1ZXMoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZjPcOpIj5lPC9hPicKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGEgPSBzb3VwLmEKKworICAgICAgICBleHBlY3RfbWluaW1hbCA9IHUnPGEgaHJlZj0iaHR0cDovL2EuY29tP2E9YiZhbXA7Yz3DqSI+ZTwvYT4nCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfbWluaW1hbCwgYS5kZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfbWluaW1hbCwgYS5kZWNvZGUoZm9ybWF0dGVyPSJtaW5pbWFsIikpCisKKyAgICAgICAgZXhwZWN0X2h0bWwgPSB1JzxhIGhyZWY9Imh0dHA6Ly9hLmNvbT9hPWImYW1wO2M9JmVhY3V0ZTsiPmU8L2E+JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9odG1sLCBhLmRlY29kZShmb3JtYXR0ZXI9Imh0bWwiKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcmt1cCwgYS5kZWNvZGUoZm9ybWF0dGVyPU5vbmUpKQorICAgICAgICBleHBlY3RfdXBwZXIgPSB1JzxhIGhyZWY9IkhUVFA6Ly9BLkNPTT9BPUImQz3DiSI+RTwvYT4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X3VwcGVyLCBhLmRlY29kZShmb3JtYXR0ZXI9bGFtYmRhIHg6IHgudXBwZXIoKSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfc2tpcHNfc2NyaXB0X3RhZ19mb3JfaHRtbF9kb2N1bWVudHMoc2VsZik6CisgICAgICAgIGRvYyA9ICIiIgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICBjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7CisgIDwvc2NyaXB0PgorIiIiCisgICAgICAgIGVuY29kZWQgPSBCZWF1dGlmdWxTb3VwKGRvYykuZW5jb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiPCA8IGhleSA+ID4iIGluIGVuY29kZWQpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfc2tpcHNfc3R5bGVfdGFnX2Zvcl9odG1sX2RvY3VtZW50cyhzZWxmKToKKyAgICAgICAgZG9jID0gIiIiCisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICBjb25zb2xlLmxvZygiPCA8IGhleSA+ID4gIik7CisgIDwvc3R5bGU+CisiIiIKKyAgICAgICAgZW5jb2RlZCA9IEJlYXV0aWZ1bFNvdXAoZG9jKS5lbmNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiI8IDwgaGV5ID4gPiIgaW4gZW5jb2RlZCkKKworICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X2xlYXZlc19wcmVmb3JtYXR0ZWRfdGV4dF9hbG9uZShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGRpdj4gIGZvbyAgPHByZT4gIFx0YmFyXG4gIFxuICA8L3ByZT4gIGJheiAgIikKKyAgICAgICAgIyBFdmVyeXRoaW5nIG91dHNpZGUgdGhlIDxwcmU+IHRhZyBpcyByZWZvcm1hdHRlZCwgYnV0IGV2ZXJ5dGhpbmcKKyAgICAgICAgIyBpbnNpZGUgaXMgbGVmdCBhbG9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUnPGRpdj5cbiBmb29cbiA8cHJlPiAgXHRiYXJcbiAgXG4gIDwvcHJlPlxuIGJhelxuPC9kaXY+JywKKyAgICAgICAgICAgIHNvdXAuZGl2LnByZXR0aWZ5KCkpCisKKyAgICBkZWYgdGVzdF9wcmV0dGlmeV9hY2NlcHRzX2Zvcm1hdHRlcihzZWxmKToKKyAgICAgICAgc291cCA9IEJlYXV0aWZ1bFNvdXAoIjxodG1sPjxib2R5PmZvbzwvYm9keT48L2h0bWw+IikKKyAgICAgICAgcHJldHR5ID0gc291cC5wcmV0dGlmeShmb3JtYXR0ZXIgPSBsYW1iZGEgeDogeC51cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkZPTyIgaW4gcHJldHR5KQorCisgICAgZGVmIHRlc3RfcHJldHRpZnlfb3V0cHV0c191bmljb2RlX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIjxhPjwvYT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUsIHR5cGUoc291cC5wcmV0dGlmeSgpKSkKKworICAgIGRlZiB0ZXN0X3ByZXR0aWZ5X2Nhbl9lbmNvZGVfZGF0YShzZWxmKToKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiPGE+PC9hPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMsIHR5cGUoc291cC5wcmV0dGlmeSgidXRmLTgiKSkpCisKKyAgICBkZWYgdGVzdF9odG1sX2VudGl0eV9zdWJzdGl0dXRpb25fb2ZmX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIG1hcmt1cCA9IHUiPGI+U2FjclxOe0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEV9IGJsZXUhPC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtYXJrdXApCisgICAgICAgIGVuY29kZWQgPSBzb3VwLmIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlZCwgbWFya3VwLmVuY29kZSgndXRmLTgnKSkKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgIyBIZXJlJ3MgdGhlIDxtZXRhPiB0YWcgc2F5aW5nIHRoYXQgYSBkb2N1bWVudCBpcworICAgICAgICAjIGVuY29kZWQgaW4gU2hpZnQtSklTLgorICAgICAgICBtZXRhX3RhZyA9ICgnPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXgtc2ppcyIgJworICAgICAgICAgICAgICAgICAgICAnaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIi8+JykKKyAgICAgICAgc291cCA9IHNlbGYuc291cChtZXRhX3RhZykKKworICAgICAgICAjIFBhcnNlIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBjaGFyc2V0IGFwcHJlYXJzIHVuY2hhbmdlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLm1ldGFbJ2NvbnRlbnQnXSwgJ3RleHQvaHRtbDsgY2hhcnNldD14LXNqaXMnKQorCisgICAgICAgICMgRW5jb2RlIHRoZSBkb2N1bWVudCBpbnRvIHNvbWUgZW5jb2RpbmcsIGFuZCB0aGUgZW5jb2RpbmcgaXMKKyAgICAgICAgIyBzdWJzdGl0dXRlZCBpbnRvIHRoZSBtZXRhIHRhZy4KKyAgICAgICAgdXRmXzggPSBzb3VwLmVuY29kZSgidXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJjaGFyc2V0PXV0Zi04IiBpbiB1dGZfOCkKKworICAgICAgICBldWNfanAgPSBzb3VwLmVuY29kZSgiZXVjX2pwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiY2hhcnNldD1ldWNfanAiIGluIGV1Y19qcCkKKworICAgICAgICBzaGlmdF9qaXMgPSBzb3VwLmVuY29kZSgic2hpZnQtamlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiY2hhcnNldD1zaGlmdC1qaXMiIGluIHNoaWZ0X2ppcykKKworICAgICAgICB1dGZfMTZfdSA9IHNvdXAuZW5jb2RlKCJ1dGYtMTYiKS5kZWNvZGUoInV0Zi0xNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY2hhcnNldD11dGYtMTYiIGluIHV0Zl8xNl91KQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmdfc3Vic3RpdHV0aW9uX2RvZXNudF9oYXBwZW5faWZfdGFnX2lzX3N0cmFpbmVkKHNlbGYpOgorICAgICAgICBtYXJrdXAgPSAoJzxoZWFkPjxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD14LXNqaXMiICcKKyAgICAgICAgICAgICAgICAgICAgJ2h0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIvPjwvaGVhZD48cHJlPmZvbzwvcHJlPicpCisKKyAgICAgICAgIyBCZWF1dGlmdWwgU291cCB1c2VkIHRvIHRyeSB0byByZXdyaXRlIHRoZSBtZXRhIHRhZyBldmVuIGlmIHRoZQorICAgICAgICAjIG1ldGEgdGFnIGdvdCBmaWx0ZXJlZCBvdXQgYnkgdGhlIHN0cmFpbmVyLiBUaGlzIHRlc3QgbWFrZXMKKyAgICAgICAgIyBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCisgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKCdwcmUnKQorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKG1hcmt1cCwgcGFyc2Vfb25seT1zdHJhaW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VwLmNvbnRlbnRzWzBdLm5hbWUsICdwcmUnKQorCitjbGFzcyBUZXN0RW5jb2RpbmcoU291cFRlc3QpOgorICAgICIiIlRlc3QgdGhlIGFiaWxpdHkgdG8gZW5jb2RlIG9iamVjdHMgaW50byBzdHJpbmdzLiIiIgorCisgICAgZGVmIHRlc3RfdW5pY29kZV9zdHJpbmdfY2FuX2JlX2VuY29kZWQoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5zdHJpbmcuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1IlxOe1NOT1dNQU59Ii5lbmNvZGUoInV0Zi04IikpCisKKyAgICBkZWYgdGVzdF90YWdfY29udGFpbmluZ191bmljb2RlX3N0cmluZ19jYW5fYmVfZW5jb2RlZChzZWxmKToKKyAgICAgICAgaHRtbCA9IHUiPGI+XE57U05PV01BTn08L2I+IgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKGh0bWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3VwLmIuZW5jb2RlKCJ1dGYtOCIpLCBodG1sLmVuY29kZSgidXRmLTgiKSkKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nX3N1YnN0aXR1dGVzX3VucmVjb2duaXplZF9jaGFyYWN0ZXJzX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuYi5lbmNvZGUoImFzY2lpIiksIGIiPGI+JiM5NzMxOzwvYj4iKQorCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfY2FuX2JlX21hZGVfc3RyaWN0KHNlbGYpOgorICAgICAgICBodG1sID0gdSI8Yj5cTntTTk9XTUFOfTwvYj4iCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoaHRtbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsIHNvdXAuZW5jb2RlLCAiYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfY29udGVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXE57U05PV01BTn0iLCBzb3VwLmIuZGVjb2RlX2NvbnRlbnRzKCkpCisKKyAgICBkZWYgdGVzdF9lbmNvZGVfY29udGVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGY4IiksIHNvdXAuYi5lbmNvZGVfY29udGVudHMoCisgICAgICAgICAgICAgICAgZW5jb2Rpbmc9InV0ZjgiKSkKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcmVuZGVyQ29udGVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSB1IjxiPlxOe1NOT1dNQU59PC9iPiIKKyAgICAgICAgc291cCA9IHNlbGYuc291cChodG1sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSJcTntTTk9XTUFOfSIuZW5jb2RlKCJ1dGY4IiksIHNvdXAuYi5yZW5kZXJDb250ZW50cygpKQorCitjbGFzcyBUZXN0TmF2aWdhYmxlU3RyaW5nU3ViY2xhc3NlcyhTb3VwVGVzdCk6CisKKyAgICBkZWYgdGVzdF9jZGF0YShzZWxmKToKKyAgICAgICAgIyBOb25lIG9mIHRoZSBjdXJyZW50IGJ1aWxkZXJzIHR1cm4gQ0RBVEEgc2VjdGlvbnMgaW50byBDRGF0YQorICAgICAgICAjIG9iamVjdHMsIGJ1dCB5b3UgY2FuIGNyZWF0ZSB0aGVtIG1hbnVhbGx5LgorICAgICAgICBzb3VwID0gc2VsZi5zb3VwKCIiKQorICAgICAgICBjZGF0YSA9IENEYXRhKCJmb28iKQorICAgICAgICBzb3VwLmluc2VydCgxLCBjZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc291cCksICI8IVtDREFUQVtmb29dXT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXAuZmluZCh0ZXh0PSJmb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5jb250ZW50c1swXSwgImZvbyIpCisKKyAgICBkZWYgdGVzdF9jZGF0YV9pc19uZXZlcl9mb3JtYXR0ZWQoc2VsZik6CisgICAgICAgICIiIlRleHQgaW5zaWRlIGEgQ0RhdGEgb2JqZWN0IGlzIHBhc3NlZCBpbnRvIHRoZSBmb3JtYXR0ZXIuCisKKyAgICAgICAgQnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAgZGVmIGluY3JlbWVudCgqYXJncyk6CisgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVybiAiQklUVEVSIEZBSUxVUkUiCisKKyAgICAgICAgc291cCA9IHNlbGYuc291cCgiIikKKyAgICAgICAgY2RhdGEgPSBDRGF0YSgiPD48Pjw+IikKKyAgICAgICAgc291cC5pbnNlcnQoMSwgY2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBiIjwhW0NEQVRBWzw+PD48Pl1dPiIsIHNvdXAuZW5jb2RlKGZvcm1hdHRlcj1pbmNyZW1lbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYuY291bnQpCisKKyAgICBkZWYgdGVzdF9kb2N0eXBlX2VuZHNfaW5fbmV3bGluZShzZWxmKToKKyAgICAgICAgIyBVbmxpa2Ugb3RoZXIgTmF2aWdhYmxlU3RyaW5nIHN1YmNsYXNzZXMsIGEgRE9DVFlQRSBhbHdheXMgZW5kcworICAgICAgICAjIGluIGEgbmV3bGluZS4KKyAgICAgICAgZG9jdHlwZSA9IERvY3R5cGUoImZvbyIpCisgICAgICAgIHNvdXAgPSBzZWxmLnNvdXAoIiIpCisgICAgICAgIHNvdXAuaW5zZXJ0KDEsIGRvY3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291cC5lbmNvZGUoKSwgYiI8IURPQ1RZUEUgZm9vPlxuIikKKworCitjbGFzcyBUZXN0U291cFNlbGVjdG9yKFRyZWVUZXN0KToKKworICAgIEhUTUwgPSAiIiIKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGhlIHRpdGxlPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYmxhaC5jc3MiIHR5cGU9InRleHQvY3NzIiBpZD0ibDEiPgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgaWQ9Im1haW4iIGNsYXNzPSJmYW5jeSI+Cis8ZGl2IGlkPSJpbm5lciI+Cis8aDEgaWQ9ImhlYWRlcjEiPkFuIEgxPC9oMT4KKzxwPlNvbWUgdGV4dDwvcD4KKzxwIGNsYXNzPSJvbmVwIiBpZD0icDEiPlNvbWUgbW9yZSB0ZXh0PC9wPgorPGgyIGlkPSJoZWFkZXIyIj5BbiBIMjwvaDI+Cis8cCBjbGFzcz0iY2xhc3MxIGNsYXNzMiBjbGFzczMiIGlkPSJwbXVsdGkiPkFub3RoZXI8L3A+Cis8YSBocmVmPSJodHRwOi8vYm9iLmV4YW1wbGUub3JnLyIgcmVsPSJmcmllbmQgbWV0IiBpZD0iYm9iIj5Cb2I8L2E+Cis8aDIgaWQ9ImhlYWRlcjMiPkFub3RoZXIgSDI8L2gyPgorPGEgaWQ9Im1lIiBocmVmPSJodHRwOi8vc2ltb253aWxsaXNvbi5uZXQvIiByZWw9Im1lIj5tZTwvYT4KKzxzcGFuIGNsYXNzPSJzMSI+Cis8YSBocmVmPSIjIiBpZD0iczFhMSI+c3BhbjFhMTwvYT4KKzxhIGhyZWY9IiMiIGlkPSJzMWEyIj5zcGFuMWEyIDxzcGFuIGlkPSJzMWEyczEiPnRlc3Q8L3NwYW4+PC9hPgorPHNwYW4gY2xhc3M9InNwYW4yIj4KKzxhIGhyZWY9IiMiIGlkPSJzMmExIj5zcGFuMmExPC9hPgorPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwYW4zIj48L3NwYW4+Cis8L3NwYW4+Cis8L2Rpdj4KKzxwIGxhbmc9ImVuIiBpZD0ibGFuZy1lbiI+RW5nbGlzaDwvcD4KKzxwIGxhbmc9ImVuLWdiIiBpZD0ibGFuZy1lbi1nYiI+RW5nbGlzaCBVSzwvcD4KKzxwIGxhbmc9ImVuLXVzIiBpZD0ibGFuZy1lbi11cyI+RW5nbGlzaCBVUzwvcD4KKzxwIGxhbmc9ImZyIiBpZD0ibGFuZy1mciI+RnJlbmNoPC9wPgorPC9kaXY+CisKKzxkaXYgaWQ9ImZvb3RlciI+Cis8L2Rpdj4KKyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvdXAgPSBCZWF1dGlmdWxTb3VwKHNlbGYuSFRNTCkKKworICAgIGRlZiBhc3NlcnRTZWxlY3RzKHNlbGYsIHNlbGVjdG9yLCBleHBlY3RlZF9pZHMpOgorICAgICAgICBlbF9pZHMgPSBbZWxbJ2lkJ10gZm9yIGVsIGluIHNlbGYuc291cC5zZWxlY3Qoc2VsZWN0b3IpXQorICAgICAgICBlbF9pZHMuc29ydCgpCisgICAgICAgIGV4cGVjdGVkX2lkcy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9pZHMsIGVsX2lkcywKKyAgICAgICAgICAgICJTZWxlY3RvciAlcywgZXhwZWN0ZWQgWyVzXSwgZ290IFslc10iICUgKAorICAgICAgICAgICAgICAgIHNlbGVjdG9yLCAnLCAnLmpvaW4oZXhwZWN0ZWRfaWRzKSwgJywgJy5qb2luKGVsX2lkcykKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCisgICAgYXNzZXJ0U2VsZWN0ID0gYXNzZXJ0U2VsZWN0cworCisgICAgZGVmIGFzc2VydFNlbGVjdE11bHRpcGxlKHNlbGYsICp0ZXN0cyk6CisgICAgICAgIGZvciBzZWxlY3RvciwgZXhwZWN0ZWRfaWRzIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3Qoc2VsZWN0b3IsIGV4cGVjdGVkX2lkcykKKworICAgIGRlZiB0ZXN0X29uZV90YWdfb25lKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCd0aXRsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLm5hbWUsICd0aXRsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLmNvbnRlbnRzLCBbdSdUaGUgdGl0bGUnXSkKKworICAgIGRlZiB0ZXN0X29uZV90YWdfbWFueShzZWxmKToKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMykKKyAgICAgICAgZm9yIGRpdiBpbiBlbHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdi5uYW1lLCAnZGl2JykKKworICAgIGRlZiB0ZXN0X3RhZ19pbl90YWdfb25lKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYgZGl2JykKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdkaXYgZGl2JywgWydpbm5lciddKQorCisgICAgZGVmIHRlc3RfdGFnX2luX3RhZ19tYW55KHNlbGYpOgorICAgICAgICBmb3Igc2VsZWN0b3IgaW4gKCdodG1sIGRpdicsICdodG1sIGJvZHkgZGl2JywgJ2JvZHkgZGl2Jyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsnbWFpbicsICdpbm5lcicsICdmb290ZXInXSkKKworICAgIGRlZiB0ZXN0X3RhZ19ub19tYXRjaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zb3VwLnNlbGVjdCgnZGVsJykpLCAwKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF90YWcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc291cC5zZWxlY3QsICd0YWcldCcpCisKKyAgICBkZWYgdGVzdF9oZWFkZXJfdGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgnaDEnLCBbJ2hlYWRlcjEnXSksCisgICAgICAgICAgICAoJ2gyJywgWydoZWFkZXIyJywgJ2hlYWRlcjMnXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2NsYXNzX29uZShzZWxmKToKKyAgICAgICAgZm9yIHNlbGVjdG9yIGluICgnLm9uZXAnLCAncC5vbmVwJywgJ2h0bWwgcC5vbmVwJyk6CisgICAgICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KHNlbGVjdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLm5hbWUsICdwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdWydjbGFzcyddLCBbJ29uZXAnXSkKKworICAgIGRlZiB0ZXN0X2NsYXNzX21pc21hdGNoZWRfdGFnKHNlbGYpOgorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYub25lcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDApCisKKyAgICBkZWYgdGVzdF9vbmVfaWQoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJ2RpdiNpbm5lcicsICcjaW5uZXInLCAnZGl2IGRpdiNpbm5lcicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKHNlbGVjdG9yLCBbJ2lubmVyJ10pCisKKyAgICBkZWYgdGVzdF9iYWRfaWQoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJyNkb2Vzbm90ZXhpc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAwKQorCisgICAgZGVmIHRlc3RfaXRlbXNfaW5faWQoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciBwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMykKKyAgICAgICAgZm9yIGVsIGluIGVsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWwubmFtZSwgJ3AnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1sxXVsnY2xhc3MnXSwgWydvbmVwJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZWxzWzBdLmhhc19hdHRyKCdjbGFzcycpKQorCisgICAgZGVmIHRlc3RfYV9idW5jaF9vZl9lbXB0eXMoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJ2RpdiNtYWluIGRlbCcsICdkaXYjbWFpbiBkaXYub29wcycsICdkaXYgZGl2I21haW4nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc291cC5zZWxlY3Qoc2VsZWN0b3IpKSwgMCkKKworICAgIGRlZiB0ZXN0X211bHRpX2NsYXNzX3N1cHBvcnQoc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJy5jbGFzczEnLCAncC5jbGFzczEnLCAnLmNsYXNzMicsICdwLmNsYXNzMicsCisgICAgICAgICAgICAnLmNsYXNzMycsICdwLmNsYXNzMycsICdodG1sIHAuY2xhc3MyJywgJ2RpdiNpbm5lciAuY2xhc3MyJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsncG11bHRpJ10pCisKKyAgICBkZWYgdGVzdF9tdWx0aV9jbGFzc19zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIGZvciBzZWxlY3RvciBpbiAoJy5jbGFzczEuY2xhc3MzJywgJy5jbGFzczMuY2xhc3MyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLmNsYXNzMS5jbGFzczIuY2xhc3MzJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoc2VsZWN0b3IsIFsncG11bHRpJ10pCisKKyAgICBkZWYgdGVzdF9jaGlsZF9zZWxlY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcuczEgPiBhJywgWydzMWExJywgJ3MxYTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcuczEgPiBhIHNwYW4nLCBbJ3MxYTJzMSddKQorCisgICAgZGVmIHRlc3RfY2hpbGRfc2VsZWN0b3JfaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnLnMxID4gYSNzMWEyIHNwYW4nLCBbJ3MxYTJzMSddKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2VxdWFscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgncFtjbGFzcz0ib25lcCJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgncFtpZD0icDEiXScsIFsncDEnXSksCisgICAgICAgICAgICAoJ1tjbGFzcz0ib25lcCJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgnW2lkPSJwMSJdJywgWydwMSddKSwKKyAgICAgICAgICAgICgnbGlua1tyZWw9InN0eWxlc2hlZXQiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbdHlwZT0idGV4dC9jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZj0iYmxhaC5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZj0ibm8tYmxhaC5jc3MiXScsIFtdKSwKKyAgICAgICAgICAgICgnW3JlbD0ic3R5bGVzaGVldCJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW3R5cGU9InRleHQvY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbaHJlZj0iYmxhaC5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ1tocmVmPSJuby1ibGFoLmNzcyJdJywgW10pLAorICAgICAgICAgICAgKCdwW2hyZWY9Im5vLWJsYWguY3NzIl0nLCBbXSksCisgICAgICAgICAgICAoJ1tocmVmPSJuby1ibGFoLmNzcyJdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfdGlsZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAoJ3BbY2xhc3N+PSJjbGFzczEiXScsIFsncG11bHRpJ10pLAorICAgICAgICAgICAgKCdwW2NsYXNzfj0iY2xhc3MyIl0nLCBbJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgncFtjbGFzc349ImNsYXNzMyJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tjbGFzc349ImNsYXNzMSJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tjbGFzc349ImNsYXNzMiJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ1tjbGFzc349ImNsYXNzMyJdJywgWydwbXVsdGknXSksCisgICAgICAgICAgICAoJ2FbcmVsfj0iZnJpZW5kIl0nLCBbJ2JvYiddKSwKKyAgICAgICAgICAgICgnYVtyZWx+PSJtZXQiXScsIFsnYm9iJ10pLAorICAgICAgICAgICAgKCdbcmVsfj0iZnJpZW5kIl0nLCBbJ2JvYiddKSwKKyAgICAgICAgICAgICgnW3JlbH49Im1ldCJdJywgWydib2InXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9zdGFydHN3aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdbcmVsXj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsXj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ25vdGxpbmtbcmVsXj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnW3JlbF49Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsXj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmXj0iYmxhIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdhW2hyZWZePSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2hyZWZePSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2lkXj0icCJdJywgWydwbXVsdGknLCAncDEnXSksCisgICAgICAgICAgICAoJ1tpZF49Im0iXScsIFsnbWUnLCAnbWFpbiddKSwKKyAgICAgICAgICAgICgnZGl2W2lkXj0ibSJdJywgWydtYWluJ10pLAorICAgICAgICAgICAgKCdhW2lkXj0ibSJdJywgWydtZSddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2VuZHN3aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdbaHJlZiQ9Ii5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaHJlZiQ9Ii5jc3MiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbaWQkPSIxIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdbaWQkPSIxIl0nLCBbJ2wxJywgJ3AxJywgJ2hlYWRlcjEnLCAnczFhMScsICdzMmExJywgJ3MxYTJzMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkJD0iMSJdJywgW10pLAorICAgICAgICAgICAgKCdbaWQkPSJub2VuZGluZyJdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfY29udGFpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0TXVsdGlwbGUoCisgICAgICAgICAgICAjIEZyb20gdGVzdF9hdHRyaWJ1dGVfc3RhcnRzd2l0aAorICAgICAgICAgICAgKCdbcmVsKj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsKj0ic3R5bGUiXScsIFsnbDEnXSksCisgICAgICAgICAgICAoJ25vdGxpbmtbcmVsKj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnW3JlbCo9Im5vdHN0eWxlIl0nLCBbXSksCisgICAgICAgICAgICAoJ2xpbmtbcmVsKj0ibm90c3R5bGUiXScsIFtdKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmKj0iYmxhIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdhW2hyZWYqPSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2hyZWYqPSJodHRwOi8vIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnW2lkKj0icCJdJywgWydwbXVsdGknLCAncDEnXSksCisgICAgICAgICAgICAoJ2RpdltpZCo9Im0iXScsIFsnbWFpbiddKSwKKyAgICAgICAgICAgICgnYVtpZCo9Im0iXScsIFsnbWUnXSksCisgICAgICAgICAgICAjIEZyb20gdGVzdF9hdHRyaWJ1dGVfZW5kc3dpdGgKKyAgICAgICAgICAgICgnW2hyZWYqPSIuY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2hyZWYqPSIuY3NzIl0nLCBbJ2wxJ10pLAorICAgICAgICAgICAgKCdsaW5rW2lkKj0iMSJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnW2lkKj0iMSJdJywgWydsMScsICdwMScsICdoZWFkZXIxJywgJ3MxYTEnLCAnczFhMicsICdzMmExJywgJ3MxYTJzMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkKj0iMSJdJywgW10pLAorICAgICAgICAgICAgKCdbaWQqPSJub2VuZGluZyJdJywgW10pLAorICAgICAgICAgICAgIyBOZXcgZm9yIHRoaXMgdGVzdAorICAgICAgICAgICAgKCdbaHJlZio9Ii4iXScsIFsnYm9iJywgJ21lJywgJ2wxJ10pLAorICAgICAgICAgICAgKCdhW2hyZWYqPSIuIl0nLCBbJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnbGlua1tocmVmKj0iLiJdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnZGl2W2lkKj0ibiJdJywgWydtYWluJywgJ2lubmVyJ10pLAorICAgICAgICAgICAgKCdkaXZbaWQqPSJubiJdJywgWydpbm5lciddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2V4YWN0X29yX2h5cGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdE11bHRpcGxlKAorICAgICAgICAgICAgKCdwW2xhbmd8PSJlbiJdJywgWydsYW5nLWVuJywgJ2xhbmctZW4tZ2InLCAnbGFuZy1lbi11cyddKSwKKyAgICAgICAgICAgICgnW2xhbmd8PSJlbiJdJywgWydsYW5nLWVuJywgJ2xhbmctZW4tZ2InLCAnbGFuZy1lbi11cyddKSwKKyAgICAgICAgICAgICgncFtsYW5nfD0iZnIiXScsIFsnbGFuZy1mciddKSwKKyAgICAgICAgICAgICgncFtsYW5nfD0iZ2IiXScsIFtdKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2V4aXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RNdWx0aXBsZSgKKyAgICAgICAgICAgICgnW3JlbF0nLCBbJ2wxJywgJ2JvYicsICdtZSddKSwKKyAgICAgICAgICAgICgnbGlua1tyZWxdJywgWydsMSddKSwKKyAgICAgICAgICAgICgnYVtyZWxdJywgWydib2InLCAnbWUnXSksCisgICAgICAgICAgICAoJ1tsYW5nXScsIFsnbGFuZy1lbicsICdsYW5nLWVuLWdiJywgJ2xhbmctZW4tdXMnLCAnbGFuZy1mciddKSwKKyAgICAgICAgICAgICgncFtjbGFzc10nLCBbJ3AxJywgJ3BtdWx0aSddKSwKKyAgICAgICAgICAgICgnW2JsYWhdJywgW10pLAorICAgICAgICAgICAgKCdwW2JsYWhdJywgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9udGhfb2ZfdHlwZShzZWxmKToKKyAgICAgICAgIyBUcnkgdG8gc2VsZWN0IGZpcnN0IHBhcmFncmFwaAorICAgICAgICBlbHMgPSBzZWxmLnNvdXAuc2VsZWN0KCdkaXYjaW5uZXIgcDpudGgtb2YtdHlwZSgxKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxzWzBdLnN0cmluZywgdSdTb21lIHRleHQnKQorCisgICAgICAgICMgVHJ5IHRvIHNlbGVjdCB0aGlyZCBwYXJhZ3JhcGgKKyAgICAgICAgZWxzID0gc2VsZi5zb3VwLnNlbGVjdCgnZGl2I2lubmVyIHA6bnRoLW9mLXR5cGUoMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsIHUnQW5vdGhlcicpCisKKyAgICAgICAgIyBUcnkgdG8gc2VsZWN0IChub24tZXhpc3RlbnQhKSBmb3VydGggcGFyYWdyYXBoCisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciBwOm50aC1vZi10eXBlKDQpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxzKSwgMCkKKworICAgICAgICAjIFBhc3MgaW4gYW4gaW52YWxpZCB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnNvdXAuc2VsZWN0LCAnZGl2IHA6bnRoLW9mLXR5cGUoMCknKQorCisgICAgZGVmIHRlc3RfbnRoX29mX3R5cGVfZGlyZWN0X2Rlc2NlbmRhbnQoc2VsZik6CisgICAgICAgIGVscyA9IHNlbGYuc291cC5zZWxlY3QoJ2RpdiNpbm5lciA+IHA6bnRoLW9mLXR5cGUoMSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsc1swXS5zdHJpbmcsIHUnU29tZSB0ZXh0JykKKworICAgIGRlZiB0ZXN0X2lkX2NoaWxkX3NlbGVjdG9yX250aF9vZl90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNpbm5lciA+IHA6bnRoLW9mLXR5cGUoMiknLCBbJ3AxJ10pCisKKyAgICBkZWYgdGVzdF9zZWxlY3Rfb25fZWxlbWVudChzZWxmKToKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBvcGVyYXRlIG9uIHRoZSB0cmVlOyB0aGlzIG9wZXJhdGVzIG9uIGFuIGVsZW1lbnQKKyAgICAgICAgIyB3aXRoaW4gdGhlIHRyZWUuCisgICAgICAgIGlubmVyID0gc2VsZi5zb3VwLmZpbmQoImRpdiIsIGlkPSJtYWluIikKKyAgICAgICAgc2VsZWN0ZWQgPSBpbm5lci5zZWxlY3QoImRpdiIpCisgICAgICAgICMgVGhlIDxkaXYgaWQ9ImlubmVyIj4gdGFnIHdhcyBzZWxlY3RlZC4gVGhlIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgICMgdGFnIHdhcyBub3QuCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0c0lEcyhzZWxlY3RlZCwgWydpbm5lciddKQorCisgICAgZGVmIHRlc3Rfb3ZlcnNwZWNpZmllZF9jaGlsZF9pZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCIuZmFuY3kgI2lubmVyIiwgWydpbm5lciddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoIi5ub3JtYWwgI2lubmVyIiwgW10pCisKKyAgICBkZWYgdGVzdF9hZGphY2VudF9zaWJsaW5nX3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSArIGgyJywgWydoZWFkZXIyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxICsgaDIgKyBwJywgWydwbXVsdGknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCcjcDEgKyAjaGVhZGVyMiArIC5jbGFzczEnLCBbJ3BtdWx0aSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBzZWxmLnNvdXAuc2VsZWN0KCcjcDEgKyBwJykpCisKKyAgICBkZWYgdGVzdF9nZW5lcmFsX3NpYmxpbmdfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxIH4gaDInLCBbJ2hlYWRlcjInLCAnaGVhZGVyMyddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSB+ICNoZWFkZXIyJywgWydoZWFkZXIyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2VsZWN0cygnI3AxIH4gaDIgKyBhJywgWydtZSddKQorICAgICAgICBzZWxmLmFzc2VydFNlbGVjdHMoJyNwMSB+IGgyICsgW3JlbD0ibWUiXScsIFsnbWUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc2VsZi5zb3VwLnNlbGVjdCgnI2lubmVyIH4gaDInKSkKKworICAgIGRlZiB0ZXN0X2RhbmdsaW5nX2NvbWJpbmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc291cC5zZWxlY3QsICdoMSA+JykKKworICAgIGRlZiB0ZXN0X3NpYmxpbmdfY29tYmluYXRvcl93b250X3NlbGVjdF9zYW1lX3RhZ190d2ljZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTZWxlY3RzKCdwW2xhbmddIH4gcCcsIFsnbGFuZy1lbi1nYicsICdsYW5nLWVuLXVzJywgJ2xhbmctZnInXSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL2NvZGVnZW4ucHkgYi9iaXRiYWtlL2xpYi9jb2RlZ2VuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzcyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9jb2RlZ2VuLnB5CkBAIC0wLDAgKzEsNTcwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiCisgICAgY29kZWdlbgorICAgIH5+fn5+fn4KKworICAgIEV4dGVuc2lvbiB0byBhc3QgdGhhdCBhbGxvdyBhc3QgLT4gcHl0aG9uIGNvZGUgZ2VuZXJhdGlvbi4KKworICAgIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAyMDA4IGJ5IEFybWluIFJvbmFjaGVyLgorICAgIDpsaWNlbnNlOiBCU0QuCisiIiIKK2Zyb20gYXN0IGltcG9ydCAqCisKK0JPT0xPUF9TWU1CT0xTID0geworICAgIEFuZDogICAgICAgICdhbmQnLAorICAgIE9yOiAgICAgICAgICdvcicKK30KKworQklOT1BfU1lNQk9MUyA9IHsKKyAgICBBZGQ6ICAgICAgICAnKycsCisgICAgU3ViOiAgICAgICAgJy0nLAorICAgIE11bHQ6ICAgICAgICcqJywKKyAgICBEaXY6ICAgICAgICAnLycsCisgICAgRmxvb3JEaXY6ICAgJy8vJywKKyAgICBNb2Q6ICAgICAgICAnJScsCisgICAgTFNoaWZ0OiAgICAgJzw8JywKKyAgICBSU2hpZnQ6ICAgICAnPj4nLAorICAgIEJpdE9yOiAgICAgICd8JywKKyAgICBCaXRBbmQ6ICAgICAnJicsCisgICAgQml0WG9yOiAgICAgJ14nCit9CisKK0NNUE9QX1NZTUJPTFMgPSB7CisgICAgRXE6ICAgICAgICAgJz09JywKKyAgICBHdDogICAgICAgICAnPicsCisgICAgR3RFOiAgICAgICAgJz49JywKKyAgICBJbjogICAgICAgICAnaW4nLAorICAgIElzOiAgICAgICAgICdpcycsCisgICAgSXNOb3Q6ICAgICAgJ2lzIG5vdCcsCisgICAgTHQ6ICAgICAgICAgJzwnLAorICAgIEx0RTogICAgICAgICc8PScsCisgICAgTm90RXE6ICAgICAgJyE9JywKKyAgICBOb3RJbjogICAgICAnbm90IGluJworfQorCitVTkFSWU9QX1NZTUJPTFMgPSB7CisgICAgSW52ZXJ0OiAgICAgJ34nLAorICAgIE5vdDogICAgICAgICdub3QnLAorICAgIFVBZGQ6ICAgICAgICcrJywKKyAgICBVU3ViOiAgICAgICAnLScKK30KKworQUxMX1NZTUJPTFMgPSB7fQorQUxMX1NZTUJPTFMudXBkYXRlKEJPT0xPUF9TWU1CT0xTKQorQUxMX1NZTUJPTFMudXBkYXRlKEJJTk9QX1NZTUJPTFMpCitBTExfU1lNQk9MUy51cGRhdGUoQ01QT1BfU1lNQk9MUykKK0FMTF9TWU1CT0xTLnVwZGF0ZShVTkFSWU9QX1NZTUJPTFMpCisKK2RlZiB0b19zb3VyY2Uobm9kZSwgaW5kZW50X3dpdGg9JyAnICogNCwgYWRkX2xpbmVfaW5mb3JtYXRpb249RmFsc2UpOgorICAgICIiIlRoaXMgZnVuY3Rpb24gY2FuIGNvbnZlcnQgYSBub2RlIHRyZWUgYmFjayBpbnRvIHB5dGhvbiBzb3VyY2Vjb2RlLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGVzcGVjaWFsbHkgaWYgeW91J3JlIGRlYWxpbmcgd2l0aAorICAgIGN1c3RvbSBhc3RzIG5vdCBnZW5lcmF0ZWQgYnkgcHl0aG9uIGl0c2VsZi4KKworICAgIEl0IGNvdWxkIGJlIHRoYXQgdGhlIHNvdXJjZWNvZGUgaXMgZXZhbHVhYmxlIHdoZW4gdGhlIEFTVCBpdHNlbGYgaXMgbm90CisgICAgY29tcGlsYWJsZSAvIGV2YWx1YWJsZS4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgQVNUIGNvbnRhaW5zIHNvbWUKKyAgICBtb3JlIGRhdGEgdGhhbiByZWd1bGFyIHNvdXJjZWNvZGUgZG9lcywgd2hpY2ggaXMgZHJvcHBlZCBkdXJpbmcKKyAgICBjb252ZXJzaW9uLgorCisgICAgRWFjaCBsZXZlbCBvZiBpbmRlbnRhdGlvbiBpcyByZXBsYWNlZCB3aXRoIGBpbmRlbnRfd2l0aGAuICBQZXIgZGVmYXVsdCB0aGlzCisgICAgcGFyYW1ldGVyIGlzIGVxdWFsIHRvIGZvdXIgc3BhY2VzIGFzIHN1Z2dlc3RlZCBieSBQRVAgOCwgYnV0IGl0IG1pZ2h0IGJlCisgICAgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIGFwcGxpY2F0aW9uJ3Mgc3R5bGVndWlkZS4KKworICAgIElmIGBhZGRfbGluZV9pbmZvcm1hdGlvbmAgaXMgc2V0IHRvIGBUcnVlYCBjb21tZW50cyBmb3IgdGhlIGxpbmUgbnVtYmVycworICAgIG9mIHRoZSBub2RlcyBhcmUgYWRkZWQgdG8gdGhlIG91dHB1dC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3BvdCB3cm9uZyBsaW5lCisgICAgbnVtYmVyIGluZm9ybWF0aW9uIG9mIHN0YXRlbWVudCBub2Rlcy4KKyAgICAiIiIKKyAgICBnZW5lcmF0b3IgPSBTb3VyY2VHZW5lcmF0b3IoaW5kZW50X3dpdGgsIGFkZF9saW5lX2luZm9ybWF0aW9uKQorICAgIGdlbmVyYXRvci52aXNpdChub2RlKQorICAgIHJldHVybiAnJy5qb2luKGdlbmVyYXRvci5yZXN1bHQpCisKKworY2xhc3MgU291cmNlR2VuZXJhdG9yKE5vZGVWaXNpdG9yKToKKyAgICAiIiJUaGlzIHZpc2l0b3IgaXMgYWJsZSB0byB0cmFuc2Zvcm0gYSB3ZWxsIGZvcm1lZCBzeW50YXggdHJlZSBpbnRvIHB5dGhvbgorICAgIHNvdXJjZWNvZGUuICBGb3IgbW9yZSBkZXRhaWxzIGhhdmUgYSBsb29rIGF0IHRoZSBkb2NzdHJpbmcgb2YgdGhlCisgICAgYG5vZGVfdG9fc291cmNlYCBmdW5jdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnRfd2l0aCwgYWRkX2xpbmVfaW5mb3JtYXRpb249RmFsc2UpOgorICAgICAgICBzZWxmLnJlc3VsdCA9IFtdCisgICAgICAgIHNlbGYuaW5kZW50X3dpdGggPSBpbmRlbnRfd2l0aAorICAgICAgICBzZWxmLmFkZF9saW5lX2luZm9ybWF0aW9uID0gYWRkX2xpbmVfaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiA9IDAKKyAgICAgICAgc2VsZi5uZXdfbGluZXMgPSAwCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgeCk6CisgICAgICAgIGlmIHNlbGYubmV3X2xpbmVzOgorICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHQ6CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKCdcbicgKiBzZWxmLm5ld19saW5lcykKKyAgICAgICAgICAgIHNlbGYucmVzdWx0LmFwcGVuZChzZWxmLmluZGVudF93aXRoICogc2VsZi5pbmRlbnRhdGlvbikKKyAgICAgICAgICAgIHNlbGYubmV3X2xpbmVzID0gMAorICAgICAgICBzZWxmLnJlc3VsdC5hcHBlbmQoeCkKKworICAgIGRlZiBuZXdsaW5lKHNlbGYsIG5vZGU9Tm9uZSwgZXh0cmE9MCk6CisgICAgICAgIHNlbGYubmV3X2xpbmVzID0gbWF4KHNlbGYubmV3X2xpbmVzLCAxICsgZXh0cmEpCisgICAgICAgIGlmIG5vZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuYWRkX2xpbmVfaW5mb3JtYXRpb246CisgICAgICAgICAgICBzZWxmLndyaXRlKCcjIGxpbmU6ICVzJyAlIG5vZGUubGluZW5vKQorICAgICAgICAgICAgc2VsZi5uZXdfbGluZXMgPSAxCisKKyAgICBkZWYgYm9keShzZWxmLCBzdGF0ZW1lbnRzKToKKyAgICAgICAgc2VsZi5uZXdfbGluZSA9IFRydWUKKyAgICAgICAgc2VsZi5pbmRlbnRhdGlvbiArPSAxCisgICAgICAgIGZvciBzdG10IGluIHN0YXRlbWVudHM6CisgICAgICAgICAgICBzZWxmLnZpc2l0KHN0bXQpCisgICAgICAgIHNlbGYuaW5kZW50YXRpb24gLT0gMQorCisgICAgZGVmIGJvZHlfb3JfZWxzZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgaWYgbm9kZS5vcmVsc2U6CisgICAgICAgICAgICBzZWxmLm5ld2xpbmUoKQorICAgICAgICAgICAgc2VsZi53cml0ZSgnZWxzZTonKQorICAgICAgICAgICAgc2VsZi5ib2R5KG5vZGUub3JlbHNlKQorCisgICAgZGVmIHNpZ25hdHVyZShzZWxmLCBub2RlKToKKyAgICAgICAgd2FudF9jb21tYSA9IFtdCisgICAgICAgIGRlZiB3cml0ZV9jb21tYSgpOgorICAgICAgICAgICAgaWYgd2FudF9jb21tYToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdhbnRfY29tbWEuYXBwZW5kKFRydWUpCisKKyAgICAgICAgcGFkZGluZyA9IFtOb25lXSAqIChsZW4obm9kZS5hcmdzKSAtIGxlbihub2RlLmRlZmF1bHRzKSkKKyAgICAgICAgZm9yIGFyZywgZGVmYXVsdCBpbiB6aXAobm9kZS5hcmdzLCBwYWRkaW5nICsgbm9kZS5kZWZhdWx0cyk6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGFyZykKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnPScpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChkZWZhdWx0KQorICAgICAgICBpZiBub2RlLnZhcmFyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyonICsgbm9kZS52YXJhcmcpCisgICAgICAgIGlmIG5vZGUua3dhcmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3cml0ZV9jb21tYSgpCisgICAgICAgICAgICBzZWxmLndyaXRlKCcqKicgKyBub2RlLmt3YXJnKQorCisgICAgZGVmIGRlY29yYXRvcnMoc2VsZiwgbm9kZSk6CisgICAgICAgIGZvciBkZWNvcmF0b3IgaW4gbm9kZS5kZWNvcmF0b3JfbGlzdDoKKyAgICAgICAgICAgIHNlbGYubmV3bGluZShkZWNvcmF0b3IpCisgICAgICAgICAgICBzZWxmLndyaXRlKCdAJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoZGVjb3JhdG9yKQorCisgICAgIyBTdGF0ZW1lbnRzCisKKyAgICBkZWYgdmlzaXRfQXNzaWduKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgZm9yIGlkeCwgdGFyZ2V0IGluIGVudW1lcmF0ZShub2RlLnRhcmdldHMpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQodGFyZ2V0KQorICAgICAgICBzZWxmLndyaXRlKCcgPSAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfQXVnQXNzaWduKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRhcmdldCkKKyAgICAgICAgc2VsZi53cml0ZShCSU5PUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldICsgJz0nKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0RnJvbShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2Zyb20gJXMlcyBpbXBvcnQgJyAlICgnLicgKiBub2RlLmxldmVsLCBub2RlLm1vZHVsZSkpCisgICAgICAgIGZvciBpZHgsIGl0ZW0gaW4gZW51bWVyYXRlKG5vZGUubmFtZXMpOgorICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIHNlbGYud3JpdGUoaXRlbSkKKworICAgIGRlZiB2aXNpdF9JbXBvcnQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBmb3IgaXRlbSBpbiBub2RlLm5hbWVzOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnaW1wb3J0ICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisKKyAgICBkZWYgdmlzaXRfRXhwcihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCisgICAgZGVmIHZpc2l0X0Z1bmN0aW9uRGVmKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUoZXh0cmE9MSkKKyAgICAgICAgc2VsZi5kZWNvcmF0b3JzKG5vZGUpCisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdkZWYgJXMoJyAlIG5vZGUubmFtZSkKKyAgICAgICAgc2VsZi5zaWduYXR1cmUobm9kZS5hcmdzKQorICAgICAgICBzZWxmLndyaXRlKCcpOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfQ2xhc3NEZWYoc2VsZiwgbm9kZSk6CisgICAgICAgIGhhdmVfYXJncyA9IFtdCisgICAgICAgIGRlZiBwYXJlbl9vcl9jb21tYSgpOgorICAgICAgICAgICAgaWYgaGF2ZV9hcmdzOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGF2ZV9hcmdzLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJygnKQorCisgICAgICAgIHNlbGYubmV3bGluZShleHRyYT0yKQorICAgICAgICBzZWxmLmRlY29yYXRvcnMobm9kZSkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ2NsYXNzICVzJyAlIG5vZGUubmFtZSkKKyAgICAgICAgZm9yIGJhc2UgaW4gbm9kZS5iYXNlczoKKyAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYudmlzaXQoYmFzZSkKKyAgICAgICAgIyBYWFg6IHRoZSBpZiBoZXJlIGlzIHVzZWQgdG8ga2VlcCB0aGlzIG1vZHVsZSBjb21wYXRpYmxlCisgICAgICAgICMgICAgICB3aXRoIHB5dGhvbiAyLjYuCisgICAgICAgIGlmIGhhc2F0dHIobm9kZSwgJ2tleXdvcmRzJyk6CisgICAgICAgICAgICBmb3Iga2V5d29yZCBpbiBub2RlLmtleXdvcmRzOgorICAgICAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGtleXdvcmQuYXJnICsgJz0nKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoa2V5d29yZC52YWx1ZSkKKyAgICAgICAgICAgIGlmIG5vZGUuc3RhcmFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGFyZW5fb3JfY29tbWEoKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyonKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5zdGFyYXJncykKKyAgICAgICAgICAgIGlmIG5vZGUua3dhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBhcmVuX29yX2NvbW1hKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcqKicpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLmt3YXJncykKKyAgICAgICAgc2VsZi53cml0ZShoYXZlX2FyZ3MgYW5kICcpOicgb3IgJzonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorCisgICAgZGVmIHZpc2l0X0lmKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnaWYgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZWxzZV8gPSBub2RlLm9yZWxzZQorICAgICAgICAgICAgaWYgbGVuKGVsc2VfKSA9PSAxIGFuZCBpc2luc3RhbmNlKGVsc2VfWzBdLCBJZik6CisgICAgICAgICAgICAgICAgbm9kZSA9IGVsc2VfWzBdCisgICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdlbGlmICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgICAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdlbHNlOicpCisgICAgICAgICAgICAgICAgc2VsZi5ib2R5KGVsc2VfKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgdmlzaXRfRm9yKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZm9yICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50YXJnZXQpCisgICAgICAgIHNlbGYud3JpdGUoJyBpbiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuaXRlcikKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keV9vcl9lbHNlKG5vZGUpCisKKyAgICBkZWYgdmlzaXRfV2hpbGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCd3aGlsZSAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keV9vcl9lbHNlKG5vZGUpCisKKyAgICBkZWYgdmlzaXRfV2l0aChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3dpdGggJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmNvbnRleHRfZXhwcikKKyAgICAgICAgaWYgbm9kZS5vcHRpb25hbF92YXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnIGFzICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUub3B0aW9uYWxfdmFycykKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfUGFzcyhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3Bhc3MnKQorCisgICAgZGVmIHZpc2l0X1ByaW50KHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWDogcHl0aG9uIDIuNiBvbmx5CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdwcmludCAnKQorICAgICAgICB3YW50X2NvbW1hID0gRmFsc2UKKyAgICAgICAgaWYgbm9kZS5kZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnID4+ICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZGVzdCkKKyAgICAgICAgICAgIHdhbnRfY29tbWEgPSBUcnVlCisgICAgICAgIGZvciB2YWx1ZSBpbiBub2RlLnZhbHVlczoKKyAgICAgICAgICAgIGlmIHdhbnRfY29tbWE6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdCh2YWx1ZSkKKyAgICAgICAgICAgIHdhbnRfY29tbWEgPSBUcnVlCisgICAgICAgIGlmIG5vdCBub2RlLm5sOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnLCcpCisKKyAgICBkZWYgdmlzaXRfRGVsZXRlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZGVsICcpCisgICAgICAgIGZvciBpZHgsIHRhcmdldCBpbiBlbnVtZXJhdGUobm9kZSk6CisgICAgICAgICAgICBpZiBpZHg6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgc2VsZi52aXNpdCh0YXJnZXQpCisKKyAgICBkZWYgdmlzaXRfVHJ5RXhjZXB0KHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgndHJ5OicpCisgICAgICAgIHNlbGYuYm9keShub2RlLmJvZHkpCisgICAgICAgIGZvciBoYW5kbGVyIGluIG5vZGUuaGFuZGxlcnM6CisgICAgICAgICAgICBzZWxmLnZpc2l0KGhhbmRsZXIpCisKKyAgICBkZWYgdmlzaXRfVHJ5RmluYWxseShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3RyeTonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5ib2R5KQorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZmluYWxseTonKQorICAgICAgICBzZWxmLmJvZHkobm9kZS5maW5hbGJvZHkpCisKKyAgICBkZWYgdmlzaXRfR2xvYmFsKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLm5ld2xpbmUobm9kZSkKKyAgICAgICAgc2VsZi53cml0ZSgnZ2xvYmFsICcgKyAnLCAnLmpvaW4obm9kZS5uYW1lcykpCisKKyAgICBkZWYgdmlzaXRfTm9ubG9jYWwoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdub25sb2NhbCAnICsgJywgJy5qb2luKG5vZGUubmFtZXMpKQorCisgICAgZGVmIHZpc2l0X1JldHVybihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3JldHVybiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisKKyAgICBkZWYgdmlzaXRfQnJlYWsoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdicmVhaycpCisKKyAgICBkZWYgdmlzaXRfQ29udGludWUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdjb250aW51ZScpCisKKyAgICBkZWYgdmlzaXRfUmFpc2Uoc2VsZiwgbm9kZSk6CisgICAgICAgICMgWFhYOiBQeXRob24gMi42IC8gMy4wIGNvbXBhdGliaWxpdHkKKyAgICAgICAgc2VsZi5uZXdsaW5lKG5vZGUpCisgICAgICAgIHNlbGYud3JpdGUoJ3JhaXNlJykKKyAgICAgICAgaWYgaGFzYXR0cihub2RlLCAnZXhjJykgYW5kIG5vZGUuZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZXhjKQorICAgICAgICAgICAgaWYgbm9kZS5jYXVzZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcgZnJvbSAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5jYXVzZSkKKyAgICAgICAgZWxpZiBoYXNhdHRyKG5vZGUsICd0eXBlJykgYW5kIG5vZGUudHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50eXBlKQorICAgICAgICAgICAgaWYgbm9kZS5pbnN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJywgJykKKyAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuaW5zdCkKKyAgICAgICAgICAgIGlmIG5vZGUudGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnLCAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50YmFjaykKKworICAgICMgRXhwcmVzc2lvbnMKKworICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnLicgKyBub2RlLmF0dHIpCisKKyAgICBkZWYgdmlzaXRfQ2FsbChzZWxmLCBub2RlKToKKyAgICAgICAgd2FudF9jb21tYSA9IFtdCisgICAgICAgIGRlZiB3cml0ZV9jb21tYSgpOgorICAgICAgICAgICAgaWYgd2FudF9jb21tYToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdhbnRfY29tbWEuYXBwZW5kKFRydWUpCisKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmZ1bmMpCisgICAgICAgIHNlbGYud3JpdGUoJygnKQorICAgICAgICBmb3IgYXJnIGluIG5vZGUuYXJnczoKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYudmlzaXQoYXJnKQorICAgICAgICBmb3Iga2V5d29yZCBpbiBub2RlLmtleXdvcmRzOgorICAgICAgICAgICAgd3JpdGVfY29tbWEoKQorICAgICAgICAgICAgc2VsZi53cml0ZShrZXl3b3JkLmFyZyArICc9JykKKyAgICAgICAgICAgIHNlbGYudmlzaXQoa2V5d29yZC52YWx1ZSkKKyAgICAgICAgaWYgbm9kZS5zdGFyYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyonKQorICAgICAgICAgICAgc2VsZi52aXNpdChub2RlLnN0YXJhcmdzKQorICAgICAgICBpZiBub2RlLmt3YXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdyaXRlX2NvbW1hKCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyoqJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5rd2FyZ3MpCisgICAgICAgIHNlbGYud3JpdGUoJyknKQorCisgICAgZGVmIHZpc2l0X05hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUobm9kZS5pZCkKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcihub2RlLnMpKQorCisgICAgZGVmIHZpc2l0X0J5dGVzKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIobm9kZS5zKSkKKworICAgIGRlZiB2aXNpdF9OdW0oc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUocmVwcihub2RlLm4pKQorCisgICAgZGVmIHZpc2l0X1R1cGxlKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgZm9yIGlkeCwgaXRlbSBpbiBlbnVtZXJhdGUobm9kZS5lbHRzKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisgICAgICAgIHNlbGYud3JpdGUoaWR4IGFuZCAnKScgb3IgJywpJykKKworICAgIGRlZiBzZXF1ZW5jZV92aXNpdChsZWZ0LCByaWdodCk6CisgICAgICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUobGVmdCkKKyAgICAgICAgICAgIGZvciBpZHgsIGl0ZW0gaW4gZW51bWVyYXRlKG5vZGUuZWx0cyk6CisgICAgICAgICAgICAgICAgaWYgaWR4OgorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpdGVtKQorICAgICAgICAgICAgc2VsZi53cml0ZShyaWdodCkKKyAgICAgICAgcmV0dXJuIHZpc2l0CisKKyAgICB2aXNpdF9MaXN0ID0gc2VxdWVuY2VfdmlzaXQoJ1snLCAnXScpCisgICAgdmlzaXRfU2V0ID0gc2VxdWVuY2VfdmlzaXQoJ3snLCAnfScpCisgICAgZGVsIHNlcXVlbmNlX3Zpc2l0CisKKyAgICBkZWYgdmlzaXRfRGljdChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgneycpCisgICAgICAgIGZvciBpZHgsIChrZXksIHZhbHVlKSBpbiBlbnVtZXJhdGUoemlwKG5vZGUua2V5cywgbm9kZS52YWx1ZXMpKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGtleSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJzogJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJ30nKQorCisgICAgZGVmIHZpc2l0X0Jpbk9wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLnZpc2l0KG5vZGUubGVmdCkKKyAgICAgICAgc2VsZi53cml0ZSgnICVzICcgJSBCSU5PUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUucmlnaHQpCisKKyAgICBkZWYgdmlzaXRfQm9vbE9wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgZm9yIGlkeCwgdmFsdWUgaW4gZW51bWVyYXRlKG5vZGUudmFsdWVzKToKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcgJXMgJyAlIEJPT0xPUF9TWU1CT0xTW3R5cGUobm9kZS5vcCldKQorICAgICAgICAgICAgc2VsZi52aXNpdCh2YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgnKScpCisKKyAgICBkZWYgdmlzaXRfQ29tcGFyZShzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKCcpCisgICAgICAgIHNlbGYud3JpdGUobm9kZS5sZWZ0KQorICAgICAgICBmb3Igb3AsIHJpZ2h0IGluIHppcChub2RlLm9wcywgbm9kZS5jb21wYXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJXMgJSUnICUgQ01QT1BfU1lNQk9MU1t0eXBlKG9wKV0pCisgICAgICAgICAgICBzZWxmLnZpc2l0KHJpZ2h0KQorICAgICAgICBzZWxmLndyaXRlKCcpJykKKworICAgIGRlZiB2aXNpdF9VbmFyeU9wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcoJykKKyAgICAgICAgb3AgPSBVTkFSWU9QX1NZTUJPTFNbdHlwZShub2RlLm9wKV0KKyAgICAgICAgc2VsZi53cml0ZShvcCkKKyAgICAgICAgaWYgb3AgPT0gJ25vdCc6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLm9wZXJhbmQpCisgICAgICAgIHNlbGYud3JpdGUoJyknKQorCisgICAgZGVmIHZpc2l0X1N1YnNjcmlwdChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnZhbHVlKQorICAgICAgICBzZWxmLndyaXRlKCdbJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnNsaWNlKQorICAgICAgICBzZWxmLndyaXRlKCddJykKKworICAgIGRlZiB2aXNpdF9TbGljZShzZWxmLCBub2RlKToKKyAgICAgICAgaWYgbm9kZS5sb3dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5sb3dlcikKKyAgICAgICAgc2VsZi53cml0ZSgnOicpCisgICAgICAgIGlmIG5vZGUudXBwZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudXBwZXIpCisgICAgICAgIGlmIG5vZGUuc3RlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJzonKQorICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKG5vZGUuc3RlcCwgTmFtZSkgYW5kIG5vZGUuc3RlcC5pZCA9PSAnTm9uZScpOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5zdGVwKQorCisgICAgZGVmIHZpc2l0X0V4dFNsaWNlKHNlbGYsIG5vZGUpOgorICAgICAgICBmb3IgaWR4LCBpdGVtIGluIG5vZGUuZGltczoKKyAgICAgICAgICAgIGlmIGlkeDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCcsICcpCisgICAgICAgICAgICBzZWxmLnZpc2l0KGl0ZW0pCisKKyAgICBkZWYgdmlzaXRfWWllbGQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ3lpZWxkICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9MYW1iZGEoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ2xhbWJkYSAnKQorICAgICAgICBzZWxmLnNpZ25hdHVyZShub2RlLmFyZ3MpCisgICAgICAgIHNlbGYud3JpdGUoJzogJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmJvZHkpCisKKyAgICBkZWYgdmlzaXRfRWxsaXBzaXMoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYud3JpdGUoJ0VsbGlwc2lzJykKKworICAgIGRlZiBnZW5lcmF0b3JfdmlzaXQobGVmdCwgcmlnaHQpOgorICAgICAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBzZWxmLndyaXRlKGxlZnQpCisgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZWx0KQorICAgICAgICAgICAgZm9yIGNvbXByZWhlbnNpb24gaW4gbm9kZS5nZW5lcmF0b3JzOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoY29tcHJlaGVuc2lvbikKKyAgICAgICAgICAgIHNlbGYud3JpdGUocmlnaHQpCisgICAgICAgIHJldHVybiB2aXNpdAorCisgICAgdmlzaXRfTGlzdENvbXAgPSBnZW5lcmF0b3JfdmlzaXQoJ1snLCAnXScpCisgICAgdmlzaXRfR2VuZXJhdG9yRXhwID0gZ2VuZXJhdG9yX3Zpc2l0KCcoJywgJyknKQorICAgIHZpc2l0X1NldENvbXAgPSBnZW5lcmF0b3JfdmlzaXQoJ3snLCAnfScpCisgICAgZGVsIGdlbmVyYXRvcl92aXNpdAorCisgICAgZGVmIHZpc2l0X0RpY3RDb21wKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCd7JykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLmtleSkKKyAgICAgICAgc2VsZi53cml0ZSgnOiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIGZvciBjb21wcmVoZW5zaW9uIGluIG5vZGUuZ2VuZXJhdG9yczoKKyAgICAgICAgICAgIHNlbGYudmlzaXQoY29tcHJlaGVuc2lvbikKKyAgICAgICAgc2VsZi53cml0ZSgnfScpCisKKyAgICBkZWYgdmlzaXRfSWZFeHAoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYudmlzaXQobm9kZS5ib2R5KQorICAgICAgICBzZWxmLndyaXRlKCcgaWYgJykKKyAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCisgICAgICAgIHNlbGYud3JpdGUoJyBlbHNlICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5vcmVsc2UpCisKKyAgICBkZWYgdmlzaXRfU3RhcnJlZChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZSgnKicpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS52YWx1ZSkKKworICAgIGRlZiB2aXNpdF9SZXByKHNlbGYsIG5vZGUpOgorICAgICAgICAjIFhYWDogcHl0aG9uIDIuNiBvbmx5CisgICAgICAgIHNlbGYud3JpdGUoJ2AnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIHNlbGYud3JpdGUoJ2AnKQorCisgICAgIyBIZWxwZXIgTm9kZXMKKworICAgIGRlZiB2aXNpdF9hbGlhcyhzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi53cml0ZShub2RlLm5hbWUpCisgICAgICAgIGlmIG5vZGUuYXNuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi53cml0ZSgnIGFzICcgKyBub2RlLmFzbmFtZSkKKworICAgIGRlZiB2aXNpdF9jb21wcmVoZW5zaW9uKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLndyaXRlKCcgZm9yICcpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS50YXJnZXQpCisgICAgICAgIHNlbGYud3JpdGUoJyBpbiAnKQorICAgICAgICBzZWxmLnZpc2l0KG5vZGUuaXRlcikKKyAgICAgICAgaWYgbm9kZS5pZnM6CisgICAgICAgICAgICBmb3IgaWZfIGluIG5vZGUuaWZzOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyBpZiAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoaWZfKQorCisgICAgZGVmIHZpc2l0X2V4Y2VwdGhhbmRsZXIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubmV3bGluZShub2RlKQorICAgICAgICBzZWxmLndyaXRlKCdleGNlcHQnKQorICAgICAgICBpZiBub2RlLnR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCcgJykKKyAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS50eXBlKQorICAgICAgICAgICAgaWYgbm9kZS5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyBhcyAnKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5uYW1lKQorICAgICAgICBzZWxmLndyaXRlKCc6JykKKyAgICAgICAgc2VsZi5ib2R5KG5vZGUuYm9keSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3BseS9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL3BseS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNhOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvcGx5L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNCBAQAorIyBQTFkgcGFja2FnZQorIyBBdXRob3I6IERhdmlkIEJlYXpsZXkgKGRhdmVAZGFiZWF6LmNvbSkKKworX19hbGxfXyA9IFsnbGV4JywneWFjYyddCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9wbHkvbGV4LnB5IGIvYml0YmFrZS9saWIvcGx5L2xleC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjdlYzEwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvcGx5L2xleC5weQpAQCAtMCwwICsxLDEwNTggQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGx5OiBsZXgucHkKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDksCisjIERhdmlkIE0uIEJlYXpsZXkgKERhYmVheiBMTEMpCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAKKyMgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIAorIyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIERhdmlkIEJlYXpsZXkgb3IgRGFiZWF6IExMQyBtYXkgYmUgdXNlZCB0bworIyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisjICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK19fdmVyc2lvbl9fICAgID0gIjMuMyIKK19fdGFidmVyc2lvbl9fID0gIjMuMiIgICAgICAgIyBWZXJzaW9uIG9mIHRhYmxlIGZpbGUgdXNlZAorCitpbXBvcnQgcmUsIHN5cywgdHlwZXMsIGNvcHksIG9zCisKKyMgVGhpcyB0dXBsZSBjb250YWlucyBrbm93biBzdHJpbmcgdHlwZXMKK3RyeToKKyAgICAjIFB5dGhvbiAyLjYKKyAgICBTdHJpbmdUeXBlcyA9ICh0eXBlcy5TdHJpbmdUeXBlLCB0eXBlcy5Vbmljb2RlVHlwZSkKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIFB5dGhvbiAzLjAKKyAgICBTdHJpbmdUeXBlcyA9IChzdHIsIGJ5dGVzKQorCisjIEV4dHJhY3QgdGhlIGNvZGUgYXR0cmlidXRlIG9mIGEgZnVuY3Rpb24uIERpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMKKyMgYXJlIGZvciBQeXRob24gMi8zIGNvbXBhdGliaWxpdHkuCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgIGRlZiBmdW5jX2NvZGUoZik6CisgICAgICAgIHJldHVybiBmLmZ1bmNfY29kZQorZWxzZToKKyAgICBkZWYgZnVuY19jb2RlKGYpOgorICAgICAgICByZXR1cm4gZi5fX2NvZGVfXworCisjIFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIHVzZWQgdG8gbWF0Y2ggdmFsaWQgdG9rZW4gbmFtZXMKK19pc19pZGVudGlmaWVyID0gcmUuY29tcGlsZShyJ15bYS16QS1aMC05X10rJCcpCisKKyMgRXhjZXB0aW9uIHRocm93biB3aGVuIGludmFsaWQgdG9rZW4gZW5jb3VudGVyZWQgYW5kIG5vIGRlZmF1bHQgZXJyb3IKKyMgaGFuZGxlciBpcyBkZWZpbmVkLgorCitjbGFzcyBMZXhFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG1lc3NhZ2Uscyk6CisgICAgICAgICBzZWxmLmFyZ3MgPSAobWVzc2FnZSwpCisgICAgICAgICBzZWxmLnRleHQgPSBzCisKKyMgVG9rZW4gY2xhc3MuICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSB0b2tlbnMgcHJvZHVjZWQuCitjbGFzcyBMZXhUb2tlbihvYmplY3QpOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxleFRva2VuKCVzLCVyLCVkLCVkKSIgJSAoc2VsZi50eXBlLHNlbGYudmFsdWUsc2VsZi5saW5lbm8sc2VsZi5sZXhwb3MpCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyMgVGhpcyBvYmplY3QgaXMgYSBzdGFuZC1pbiBmb3IgYSBsb2dnaW5nIG9iamVjdCBjcmVhdGVkIGJ5IHRoZSAKKyMgbG9nZ2luZyBtb2R1bGUuICAKKworY2xhc3MgUGx5TG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsZik6CisgICAgICAgIHNlbGYuZiA9IGYKKyAgICBkZWYgY3JpdGljYWwoc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGRlZiB3YXJuaW5nKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKCJXQVJOSU5HOiAiKyAobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgZGVmIGVycm9yKHNlbGYsbXNnLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5mLndyaXRlKCJFUlJPUjogIiArIChtc2cgJSBhcmdzKSArICJcbiIpCisKKyAgICBpbmZvID0gY3JpdGljYWwKKyAgICBkZWJ1ZyA9IGNyaXRpY2FsCisKKyMgTnVsbCBsb2dnZXIgaXMgdXNlZCB3aGVuIG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQuIERvZXMgbm90aGluZy4KK2NsYXNzIE51bGxMb2dnZXIob2JqZWN0KToKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCphcmdzLCoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgID09PSBMZXhpbmcgRW5naW5lID09PQorIworIyBUaGUgZm9sbG93aW5nIExleGVyIGNsYXNzIGltcGxlbWVudHMgdGhlIGxleGVyIHJ1bnRpbWUuICAgVGhlcmUgYXJlIG9ubHkKKyMgYSBmZXcgcHVibGljIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CisjCisjICAgIGlucHV0KCkgICAgICAgICAgLSAgU3RvcmUgYSBuZXcgc3RyaW5nIGluIHRoZSBsZXhlcgorIyAgICB0b2tlbigpICAgICAgICAgIC0gIEdldCB0aGUgbmV4dCB0b2tlbgorIyAgICBjbG9uZSgpICAgICAgICAgIC0gIENsb25lIHRoZSBsZXhlcgorIworIyAgICBsaW5lbm8gICAgICAgICAgIC0gIEN1cnJlbnQgbGluZSBudW1iZXIKKyMgICAgbGV4cG9zICAgICAgICAgICAtICBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBpbnB1dCBzdHJpbmcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTGV4ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxleHJlID0gTm9uZSAgICAgICAgICAgICAjIE1hc3RlciByZWd1bGFyIGV4cHJlc3Npb24uIFRoaXMgaXMgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHVwbGVzIChyZSxmaW5kZXgpIHdoZXJlIHJlIGlzIGEgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGZpbmRleCBpcyBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXBwaW5nIHJlZ2V4IGdyb3VwIG51bWJlcnMgdG8gcnVsZXMKKyAgICAgICAgc2VsZi5sZXhyZXRleHQgPSBOb25lICAgICAgICAgIyBDdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmdzCisgICAgICAgIHNlbGYubGV4c3RhdGVyZSA9IHt9ICAgICAgICAgICMgRGljdGlvbmFyeSBtYXBwaW5nIGxleGVyIHN0YXRlcyB0byBtYXN0ZXIgcmVnZXhzCisgICAgICAgIHNlbGYubGV4c3RhdGVyZXRleHQgPSB7fSAgICAgICMgRGljdGlvbmFyeSBtYXBwaW5nIGxleGVyIHN0YXRlcyB0byByZWdleCBzdHJpbmdzCisgICAgICAgIHNlbGYubGV4c3RhdGVyZW5hbWVzID0ge30gICAgICMgRGljdGlvbmFyeSBtYXBwaW5nIGxleGVyIHN0YXRlcyB0byBzeW1ib2wgbmFtZXMKKyAgICAgICAgc2VsZi5sZXhzdGF0ZSA9ICJJTklUSUFMIiAgICAgIyBDdXJyZW50IGxleGVyIHN0YXRlCisgICAgICAgIHNlbGYubGV4c3RhdGVzdGFjayA9IFtdICAgICAgICMgU3RhY2sgb2YgbGV4ZXIgc3RhdGVzCisgICAgICAgIHNlbGYubGV4c3RhdGVpbmZvID0gTm9uZSAgICAgICMgU3RhdGUgaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5sZXhzdGF0ZWlnbm9yZSA9IHt9ICAgICAgIyBEaWN0aW9uYXJ5IG9mIGlnbm9yZWQgY2hhcmFjdGVycyBmb3IgZWFjaCBzdGF0ZQorICAgICAgICBzZWxmLmxleHN0YXRlZXJyb3JmID0ge30gICAgICAjIERpY3Rpb25hcnkgb2YgZXJyb3IgZnVuY3Rpb25zIGZvciBlYWNoIHN0YXRlCisgICAgICAgIHNlbGYubGV4cmVmbGFncyA9IDAgICAgICAgICAgICMgT3B0aW9uYWwgcmUgY29tcGlsZSBmbGFncworICAgICAgICBzZWxmLmxleGRhdGEgPSBOb25lICAgICAgICAgICAjIEFjdHVhbCBpbnB1dCBkYXRhIChhcyBhIHN0cmluZykKKyAgICAgICAgc2VsZi5sZXhwb3MgPSAwICAgICAgICAgICAgICAgIyBDdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IHRleHQKKyAgICAgICAgc2VsZi5sZXhsZW4gPSAwICAgICAgICAgICAgICAgIyBMZW5ndGggb2YgdGhlIGlucHV0IHRleHQKKyAgICAgICAgc2VsZi5sZXhlcnJvcmYgPSBOb25lICAgICAgICAgIyBFcnJvciBydWxlIChpZiBhbnkpCisgICAgICAgIHNlbGYubGV4dG9rZW5zID0gTm9uZSAgICAgICAgICMgTGlzdCBvZiB2YWxpZCB0b2tlbnMKKyAgICAgICAgc2VsZi5sZXhpZ25vcmUgPSAiIiAgICAgICAgICAgIyBJZ25vcmVkIGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5sZXhsaXRlcmFscyA9ICIiICAgICAgICAgIyBMaXRlcmFsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRocm91Z2gKKyAgICAgICAgc2VsZi5sZXhtb2R1bGUgPSBOb25lICAgICAgICAgIyBNb2R1bGUKKyAgICAgICAgc2VsZi5saW5lbm8gPSAxICAgICAgICAgICAgICAgIyBDdXJyZW50IGxpbmUgbnVtYmVyCisgICAgICAgIHNlbGYubGV4b3B0aW1pemUgPSAwICAgICAgICAgICMgT3B0aW1pemVkIG1vZGUKKworICAgIGRlZiBjbG9uZShzZWxmLG9iamVjdD1Ob25lKToKKyAgICAgICAgYyA9IGNvcHkuY29weShzZWxmKQorCisgICAgICAgICMgSWYgdGhlIG9iamVjdCBwYXJhbWV0ZXIgaGFzIGJlZW4gc3VwcGxpZWQsIGl0IG1lYW5zIHdlIGFyZSBhdHRhY2hpbmcgdGhlCisgICAgICAgICMgbGV4ZXIgdG8gYSBuZXcgb2JqZWN0LiAgSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIHRvIHJlYmluZCBhbGwgbWV0aG9kcyBpbgorICAgICAgICAjIHRoZSBsZXhzdGF0ZXJlIGFuZCBsZXhzdGF0ZWVycm9yZiB0YWJsZXMuCisKKyAgICAgICAgaWYgb2JqZWN0OgorICAgICAgICAgICAgbmV3dGFiID0geyB9CisgICAgICAgICAgICBmb3Iga2V5LCByaXRlbSBpbiBzZWxmLmxleHN0YXRlcmUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBuZXdyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGNyZSwgZmluZGV4IGluIHJpdGVtOgorICAgICAgICAgICAgICAgICAgICAgbmV3ZmluZGV4ID0gW10KKyAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbmRleDoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZiBvciBub3QgZlswXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZmluZGV4LmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2ZpbmRleC5hcHBlbmQoKGdldGF0dHIob2JqZWN0LGZbMF0uX19uYW1lX18pLGZbMV0pKQorICAgICAgICAgICAgICAgIG5ld3JlLmFwcGVuZCgoY3JlLG5ld2ZpbmRleCkpCisgICAgICAgICAgICAgICAgbmV3dGFiW2tleV0gPSBuZXdyZQorICAgICAgICAgICAgYy5sZXhzdGF0ZXJlID0gbmV3dGFiCisgICAgICAgICAgICBjLmxleHN0YXRlZXJyb3JmID0geyB9CisgICAgICAgICAgICBmb3Iga2V5LCBlZiBpbiBzZWxmLmxleHN0YXRlZXJyb3JmLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgYy5sZXhzdGF0ZWVycm9yZltrZXldID0gZ2V0YXR0cihvYmplY3QsZWYuX19uYW1lX18pCisgICAgICAgICAgICBjLmxleG1vZHVsZSA9IG9iamVjdAorICAgICAgICByZXR1cm4gYworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHdyaXRldGFiKCkgLSBXcml0ZSBsZXhlciBpbmZvcm1hdGlvbiB0byBhIHRhYmxlIGZpbGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiB3cml0ZXRhYihzZWxmLHRhYmZpbGUsb3V0cHV0ZGlyPSIiKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWJmaWxlLHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJhc2V0YWJmaWxlbmFtZSA9IHRhYmZpbGUuc3BsaXQoIi4iKVstMV0KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLGJhc2V0YWJmaWxlbmFtZSkrIi5weSIKKyAgICAgICAgdGYgPSBvcGVuKGZpbGVuYW1lLCJ3IikKKyAgICAgICAgdGYud3JpdGUoIiMgJXMucHkuIFRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgUExZICh2ZXJzaW9uICVzKS4gRG9uJ3QgZWRpdCFcbiIgJSAodGFiZmlsZSxfX3ZlcnNpb25fXykpCisgICAgICAgIHRmLndyaXRlKCJfdGFidmVyc2lvbiAgID0gJXNcbiIgJSByZXByKF9fdmVyc2lvbl9fKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXh0b2tlbnMgICAgPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXh0b2tlbnMpKQorICAgICAgICB0Zi53cml0ZSgiX2xleHJlZmxhZ3MgICA9ICVzXG4iICUgcmVwcihzZWxmLmxleHJlZmxhZ3MpKQorICAgICAgICB0Zi53cml0ZSgiX2xleGxpdGVyYWxzICA9ICVzXG4iICUgcmVwcihzZWxmLmxleGxpdGVyYWxzKSkKKyAgICAgICAgdGYud3JpdGUoIl9sZXhzdGF0ZWluZm8gPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXhzdGF0ZWluZm8pKQorCisgICAgICAgIHRhYnJlID0geyB9CisgICAgICAgICMgQ29sbGVjdCBhbGwgZnVuY3Rpb25zIGluIHRoZSBpbml0aWFsIHN0YXRlCisgICAgICAgIGluaXRpYWwgPSBzZWxmLmxleHN0YXRlcmVbIklOSVRJQUwiXQorICAgICAgICBpbml0aWFsZnVuY3MgPSBbXQorICAgICAgICBmb3IgcGFydCBpbiBpbml0aWFsOgorICAgICAgICAgICAgZm9yIGYgaW4gcGFydFsxXToKKyAgICAgICAgICAgICAgICBpZiBmIGFuZCBmWzBdOgorICAgICAgICAgICAgICAgICAgICBpbml0aWFsZnVuY3MuYXBwZW5kKGYpCisKKyAgICAgICAgZm9yIGtleSwgbHJlIGluIHNlbGYubGV4c3RhdGVyZS5pdGVtcygpOgorICAgICAgICAgICAgIHRpdGVtID0gW10KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obHJlKSk6CisgICAgICAgICAgICAgICAgICB0aXRlbS5hcHBlbmQoKHNlbGYubGV4c3RhdGVyZXRleHRba2V5XVtpXSxfZnVuY3NfdG9fbmFtZXMobHJlW2ldWzFdLHNlbGYubGV4c3RhdGVyZW5hbWVzW2tleV1baV0pKSkKKyAgICAgICAgICAgICB0YWJyZVtrZXldID0gdGl0ZW0KKworICAgICAgICB0Zi53cml0ZSgiX2xleHN0YXRlcmUgICA9ICVzXG4iICUgcmVwcih0YWJyZSkpCisgICAgICAgIHRmLndyaXRlKCJfbGV4c3RhdGVpZ25vcmUgPSAlc1xuIiAlIHJlcHIoc2VsZi5sZXhzdGF0ZWlnbm9yZSkpCisKKyAgICAgICAgdGFiZXJyID0geyB9CisgICAgICAgIGZvciBrZXksIGVmIGluIHNlbGYubGV4c3RhdGVlcnJvcmYuaXRlbXMoKToKKyAgICAgICAgICAgICBpZiBlZjoKKyAgICAgICAgICAgICAgICAgIHRhYmVycltrZXldID0gZWYuX19uYW1lX18KKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgdGFiZXJyW2tleV0gPSBOb25lCisgICAgICAgIHRmLndyaXRlKCJfbGV4c3RhdGVlcnJvcmYgPSAlc1xuIiAlIHJlcHIodGFiZXJyKSkKKyAgICAgICAgdGYuY2xvc2UoKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHJlYWR0YWIoKSAtIFJlYWQgbGV4ZXIgaW5mb3JtYXRpb24gZnJvbSBhIHRhYiBmaWxlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgcmVhZHRhYihzZWxmLHRhYmZpbGUsZmRpY3QpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRhYmZpbGUsdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBsZXh0YWIgPSB0YWJmaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKKyAgICAgICAgICAgICAgICBleGVjKCJpbXBvcnQgJXMgYXMgbGV4dGFiIiAlIHRhYmZpbGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudiA9IHsgfQorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBsZXh0YWIiICUgdGFiZmlsZSwgZW52LGVudikKKyAgICAgICAgICAgICAgICBsZXh0YWIgPSBlbnZbJ2xleHRhYiddCisKKyAgICAgICAgaWYgZ2V0YXR0cihsZXh0YWIsIl90YWJ2ZXJzaW9uIiwiMC4wIikgIT0gX192ZXJzaW9uX186CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiSW5jb25zaXN0ZW50IFBMWSB2ZXJzaW9uIikKKworICAgICAgICBzZWxmLmxleHRva2VucyAgICAgID0gbGV4dGFiLl9sZXh0b2tlbnMKKyAgICAgICAgc2VsZi5sZXhyZWZsYWdzICAgICA9IGxleHRhYi5fbGV4cmVmbGFncworICAgICAgICBzZWxmLmxleGxpdGVyYWxzICAgID0gbGV4dGFiLl9sZXhsaXRlcmFscworICAgICAgICBzZWxmLmxleHN0YXRlaW5mbyAgID0gbGV4dGFiLl9sZXhzdGF0ZWluZm8KKyAgICAgICAgc2VsZi5sZXhzdGF0ZWlnbm9yZSA9IGxleHRhYi5fbGV4c3RhdGVpZ25vcmUKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXJlICAgICA9IHsgfQorICAgICAgICBzZWxmLmxleHN0YXRlcmV0ZXh0ID0geyB9CisgICAgICAgIGZvciBrZXksbHJlIGluIGxleHRhYi5fbGV4c3RhdGVyZS5pdGVtcygpOgorICAgICAgICAgICAgIHRpdGVtID0gW10KKyAgICAgICAgICAgICB0eHRpdGVtID0gW10KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obHJlKSk6CisgICAgICAgICAgICAgICAgICB0aXRlbS5hcHBlbmQoKHJlLmNvbXBpbGUobHJlW2ldWzBdLGxleHRhYi5fbGV4cmVmbGFncyB8IHJlLlZFUkJPU0UpLF9uYW1lc190b19mdW5jcyhscmVbaV1bMV0sZmRpY3QpKSkKKyAgICAgICAgICAgICAgICAgIHR4dGl0ZW0uYXBwZW5kKGxyZVtpXVswXSkKKyAgICAgICAgICAgICBzZWxmLmxleHN0YXRlcmVba2V5XSA9IHRpdGVtCisgICAgICAgICAgICAgc2VsZi5sZXhzdGF0ZXJldGV4dFtrZXldID0gdHh0aXRlbQorICAgICAgICBzZWxmLmxleHN0YXRlZXJyb3JmID0geyB9CisgICAgICAgIGZvciBrZXksZWYgaW4gbGV4dGFiLl9sZXhzdGF0ZWVycm9yZi5pdGVtcygpOgorICAgICAgICAgICAgIHNlbGYubGV4c3RhdGVlcnJvcmZba2V5XSA9IGZkaWN0W2VmXQorICAgICAgICBzZWxmLmJlZ2luKCdJTklUSUFMJykKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBpbnB1dCgpIC0gUHVzaCBhIG5ldyBzdHJpbmcgaW50byB0aGUgbGV4ZXIKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBpbnB1dChzZWxmLHMpOgorICAgICAgICAjIFB1bGwgb2ZmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gc2VlIGlmIHMgbG9va3MgbGlrZSBhIHN0cmluZworICAgICAgICBjID0gc1s6MV0KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYyxTdHJpbmdUeXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCBhIHN0cmluZyIpCisgICAgICAgIHNlbGYubGV4ZGF0YSA9IHMKKyAgICAgICAgc2VsZi5sZXhwb3MgPSAwCisgICAgICAgIHNlbGYubGV4bGVuID0gbGVuKHMpCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYmVnaW4oKSAtIENoYW5nZXMgdGhlIGxleGluZyBzdGF0ZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGJlZ2luKHNlbGYsc3RhdGUpOgorICAgICAgICBpZiBub3Qgc3RhdGUgaW4gc2VsZi5sZXhzdGF0ZXJlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5kZWZpbmVkIHN0YXRlIikKKyAgICAgICAgc2VsZi5sZXhyZSA9IHNlbGYubGV4c3RhdGVyZVtzdGF0ZV0KKyAgICAgICAgc2VsZi5sZXhyZXRleHQgPSBzZWxmLmxleHN0YXRlcmV0ZXh0W3N0YXRlXQorICAgICAgICBzZWxmLmxleGlnbm9yZSA9IHNlbGYubGV4c3RhdGVpZ25vcmUuZ2V0KHN0YXRlLCIiKQorICAgICAgICBzZWxmLmxleGVycm9yZiA9IHNlbGYubGV4c3RhdGVlcnJvcmYuZ2V0KHN0YXRlLE5vbmUpCisgICAgICAgIHNlbGYubGV4c3RhdGUgPSBzdGF0ZQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHB1c2hfc3RhdGUoKSAtIENoYW5nZXMgdGhlIGxleGluZyBzdGF0ZSBhbmQgc2F2ZXMgb2xkIG9uIHN0YWNrCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgcHVzaF9zdGF0ZShzZWxmLHN0YXRlKToKKyAgICAgICAgc2VsZi5sZXhzdGF0ZXN0YWNrLmFwcGVuZChzZWxmLmxleHN0YXRlKQorICAgICAgICBzZWxmLmJlZ2luKHN0YXRlKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHBvcF9zdGF0ZSgpIC0gUmVzdG9yZXMgdGhlIHByZXZpb3VzIHN0YXRlCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgcG9wX3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLmJlZ2luKHNlbGYubGV4c3RhdGVzdGFjay5wb3AoKSkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjdXJyZW50X3N0YXRlKCkgLSBSZXR1cm5zIHRoZSBjdXJyZW50IGxleGluZyBzdGF0ZQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGN1cnJlbnRfc3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxleHN0YXRlCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgc2tpcCgpIC0gU2tpcCBhaGVhZCBuIGNoYXJhY3RlcnMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBza2lwKHNlbGYsbik6CisgICAgICAgIHNlbGYubGV4cG9zICs9IG4KKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBvcHR0b2tlbigpIC0gUmV0dXJuIHRoZSBuZXh0IHRva2VuIGZyb20gdGhlIExleGVyCisgICAgIworICAgICMgTm90ZTogVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYXJlZnVsbHkgaW1wbGVtZW50ZWQgdG8gYmUgYXMgZmFzdAorICAgICMgYXMgcG9zc2libGUuICBEb24ndCBtYWtlIGNoYW5nZXMgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0CisgICAgIyB5b3UgYXJlIGRvaW5nCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgdG9rZW4oc2VsZik6CisgICAgICAgICMgTWFrZSBsb2NhbCBjb3BpZXMgb2YgZnJlcXVlbnRseSByZWZlcmVuY2VkIGF0dHJpYnV0ZXMKKyAgICAgICAgbGV4cG9zICAgID0gc2VsZi5sZXhwb3MKKyAgICAgICAgbGV4bGVuICAgID0gc2VsZi5sZXhsZW4KKyAgICAgICAgbGV4aWdub3JlID0gc2VsZi5sZXhpZ25vcmUKKyAgICAgICAgbGV4ZGF0YSAgID0gc2VsZi5sZXhkYXRhCisKKyAgICAgICAgd2hpbGUgbGV4cG9zIDwgbGV4bGVuOgorICAgICAgICAgICAgIyBUaGlzIGNvZGUgcHJvdmlkZXMgc29tZSBzaG9ydC1jaXJjdWl0IGNvZGUgZm9yIHdoaXRlc3BhY2UsIHRhYnMsIGFuZCBvdGhlciBpZ25vcmVkIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmIGxleGRhdGFbbGV4cG9zXSBpbiBsZXhpZ25vcmU6CisgICAgICAgICAgICAgICAgbGV4cG9zICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIExvb2sgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoCisgICAgICAgICAgICBmb3IgbGV4cmUsbGV4aW5kZXhmdW5jIGluIHNlbGYubGV4cmU6CisgICAgICAgICAgICAgICAgbSA9IGxleHJlLm1hdGNoKGxleGRhdGEsbGV4cG9zKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtOiBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSB0b2tlbiBmb3IgcmV0dXJuCisgICAgICAgICAgICAgICAgdG9rID0gTGV4VG9rZW4oKQorICAgICAgICAgICAgICAgIHRvay52YWx1ZSA9IG0uZ3JvdXAoKQorICAgICAgICAgICAgICAgIHRvay5saW5lbm8gPSBzZWxmLmxpbmVubworICAgICAgICAgICAgICAgIHRvay5sZXhwb3MgPSBsZXhwb3MKKworICAgICAgICAgICAgICAgIGkgPSBtLmxhc3RpbmRleAorICAgICAgICAgICAgICAgIGZ1bmMsdG9rLnR5cGUgPSBsZXhpbmRleGZ1bmNbaV0KKworICAgICAgICAgICAgICAgIGlmIG5vdCBmdW5jOgorICAgICAgICAgICAgICAgICAgICMgSWYgbm8gdG9rZW4gdHlwZSB3YXMgc2V0LCBpdCdzIGFuIGlnbm9yZWQgdG9rZW4KKyAgICAgICAgICAgICAgICAgICBpZiB0b2sudHlwZToKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IG0uZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rCisgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICBsZXhwb3MgPSBtLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGxleHBvcyA9IG0uZW5kKCkKKworICAgICAgICAgICAgICAgICMgSWYgdG9rZW4gaXMgcHJvY2Vzc2VkIGJ5IGEgZnVuY3Rpb24sIGNhbGwgaXQKKworICAgICAgICAgICAgICAgIHRvay5sZXhlciA9IHNlbGYgICAgICAjIFNldCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgdXNlZnVsIGluIHRva2VuIHJ1bGVzCisgICAgICAgICAgICAgICAgc2VsZi5sZXhtYXRjaCA9IG0KKyAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcworCisgICAgICAgICAgICAgICAgbmV3dG9rID0gZnVuYyh0b2spCisKKyAgICAgICAgICAgICAgICAjIEV2ZXJ5IGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgdG9rZW4sIGlmIG5vdGhpbmcsIHdlIGp1c3QgbW92ZSB0byBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAgaWYgbm90IG5ld3RvazoKKyAgICAgICAgICAgICAgICAgICAgbGV4cG9zICAgID0gc2VsZi5sZXhwb3MgICAgICAgICAjIFRoaXMgaXMgaGVyZSBpbiBjYXNlIHVzZXIgaGFzIHVwZGF0ZWQgbGV4cG9zLgorICAgICAgICAgICAgICAgICAgICBsZXhpZ25vcmUgPSBzZWxmLmxleGlnbm9yZSAgICAgICMgVGhpcyBpcyBoZXJlIGluIGNhc2UgdGhlcmUgd2FzIGEgc3RhdGUgY2hhbmdlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIFZlcmlmeSB0eXBlIG9mIHRoZSB0b2tlbi4gIElmIG5vdCBpbiB0aGUgdG9rZW4gbWFwLCByYWlzZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmxleG9wdGltaXplOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dG9rLnR5cGUgaW4gc2VsZi5sZXh0b2tlbnM6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMZXhFcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyByZXR1cm5lZCBhbiB1bmtub3duIHRva2VuIHR5cGUgJyVzJyIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jb2RlKGZ1bmMpLmNvX2ZpbGVuYW1lLCBmdW5jX2NvZGUoZnVuYykuY29fZmlyc3RsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5fX25hbWVfXywgbmV3dG9rLnR5cGUpLGxleGRhdGFbbGV4cG9zOl0pCisKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3dG9rCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm8gbWF0Y2gsIHNlZSBpZiBpbiBsaXRlcmFscworICAgICAgICAgICAgICAgIGlmIGxleGRhdGFbbGV4cG9zXSBpbiBzZWxmLmxleGxpdGVyYWxzOgorICAgICAgICAgICAgICAgICAgICB0b2sgPSBMZXhUb2tlbigpCisgICAgICAgICAgICAgICAgICAgIHRvay52YWx1ZSA9IGxleGRhdGFbbGV4cG9zXQorICAgICAgICAgICAgICAgICAgICB0b2subGluZW5vID0gc2VsZi5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgdG9rLnR5cGUgPSB0b2sudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgdG9rLmxleHBvcyA9IGxleHBvcworICAgICAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcyArIDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvaworCisgICAgICAgICAgICAgICAgIyBObyBtYXRjaC4gQ2FsbCB0X2Vycm9yKCkgaWYgZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBpZiBzZWxmLmxleGVycm9yZjoKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gTGV4VG9rZW4oKQorICAgICAgICAgICAgICAgICAgICB0b2sudmFsdWUgPSBzZWxmLmxleGRhdGFbbGV4cG9zOl0KKyAgICAgICAgICAgICAgICAgICAgdG9rLmxpbmVubyA9IHNlbGYubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHRvay50eXBlID0gImVycm9yIgorICAgICAgICAgICAgICAgICAgICB0b2subGV4ZXIgPSBzZWxmCisgICAgICAgICAgICAgICAgICAgIHRvay5sZXhwb3MgPSBsZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sZXhwb3MgPSBsZXhwb3MKKyAgICAgICAgICAgICAgICAgICAgbmV3dG9rID0gc2VsZi5sZXhlcnJvcmYodG9rKQorICAgICAgICAgICAgICAgICAgICBpZiBsZXhwb3MgPT0gc2VsZi5sZXhwb3M6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVycm9yIG1ldGhvZCBkaWRuJ3QgY2hhbmdlIHRleHQgcG9zaXRpb24gYXQgYWxsLiBUaGlzIGlzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGV4RXJyb3IoIlNjYW5uaW5nIGVycm9yLiBJbGxlZ2FsIGNoYXJhY3RlciAnJXMnIiAlIChsZXhkYXRhW2xleHBvc10pLCBsZXhkYXRhW2xleHBvczpdKQorICAgICAgICAgICAgICAgICAgICBsZXhwb3MgPSBzZWxmLmxleHBvcworICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3dG9rOiBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3dG9rCisKKyAgICAgICAgICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcworICAgICAgICAgICAgICAgIHJhaXNlIExleEVycm9yKCJJbGxlZ2FsIGNoYXJhY3RlciAnJXMnIGF0IGluZGV4ICVkIiAlIChsZXhkYXRhW2xleHBvc10sbGV4cG9zKSwgbGV4ZGF0YVtsZXhwb3M6XSkKKworICAgICAgICBzZWxmLmxleHBvcyA9IGxleHBvcyArIDEKKyAgICAgICAgaWYgc2VsZi5sZXhkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJObyBpbnB1dCBzdHJpbmcgZ2l2ZW4gd2l0aCBpbnB1dCgpIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgSXRlcmF0b3IgaW50ZXJmYWNlCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRva2VuKCkKKyAgICAgICAgaWYgdCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICByZXR1cm4gdAorCisgICAgX19uZXh0X18gPSBuZXh0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09IExleCBCdWlsZGVyID09PQorIworIyBUaGUgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGJlbG93IGFyZSB1c2VkIHRvIGNvbGxlY3QgbGV4aW5nIGluZm9ybWF0aW9uCisjIGFuZCBidWlsZCBhIExleGVyIG9iamVjdCBmcm9tIGl0LgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdldF9jYWxsZXJfbW9kdWxlX2RpY3QoKQorIworIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBzeW1ib2xzIGRlZmluZWQgd2l0aGluCisjIGEgY2FsbGVyIGZ1cnRoZXIgZG93biB0aGUgY2FsbCBzdGFjay4gIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIGVudmlyb25tZW50CisjIGFzc29jaWF0ZWQgd2l0aCB0aGUgeWFjYygpIGNhbGwgaWYgbm9uZSB3YXMgcHJvdmlkZWQuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KGxldmVscyk6CisgICAgdHJ5OgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICBlLGIsdCA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGYgPSB0LnRiX2ZyYW1lCisgICAgICAgIHdoaWxlIGxldmVscyA+IDA6CisgICAgICAgICAgICBmID0gZi5mX2JhY2sgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBsZXZlbHMgLT0gMQorICAgICAgICBsZGljdCA9IGYuZl9nbG9iYWxzLmNvcHkoKQorICAgICAgICBpZiBmLmZfZ2xvYmFscyAhPSBmLmZfbG9jYWxzOgorICAgICAgICAgICAgbGRpY3QudXBkYXRlKGYuZl9sb2NhbHMpCisKKyAgICAgICAgcmV0dXJuIGxkaWN0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX2Z1bmNzX3RvX25hbWVzKCkKKyMKKyMgR2l2ZW4gYSBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBmdW5jdGlvbnMsIHRoaXMgY29udmVydHMgaXQgdG8gYSBsaXN0CisjIHN1aXRhYmxlIGZvciBvdXRwdXQgdG8gYSB0YWJsZSBmaWxlCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBfZnVuY3NfdG9fbmFtZXMoZnVuY2xpc3QsbmFtZWxpc3QpOgorICAgIHJlc3VsdCA9IFtdCisgICAgZm9yIGYsbmFtZSBpbiB6aXAoZnVuY2xpc3QsbmFtZWxpc3QpOgorICAgICAgICAgaWYgZiBhbmQgZlswXToKKyAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKChuYW1lLCBmWzFdKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgIHJldHVybiByZXN1bHQKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBfbmFtZXNfdG9fZnVuY3MoKQorIworIyBHaXZlbiBhIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9uIGZ1bmN0aW9uIG5hbWVzLCB0aGlzIGNvbnZlcnRzIGl0IGJhY2sgdG8KKyMgZnVuY3Rpb25zLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgX25hbWVzX3RvX2Z1bmNzKG5hbWVsaXN0LGZkaWN0KToKKyAgICAgcmVzdWx0ID0gW10KKyAgICAgZm9yIG4gaW4gbmFtZWxpc3Q6CisgICAgICAgICAgaWYgbiBhbmQgblswXToKKyAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoZmRpY3RbblswXV0sblsxXSkpCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuKQorICAgICByZXR1cm4gcmVzdWx0CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX2Zvcm1fbWFzdGVyX3JlKCkKKyMKKyMgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSByZWdleCBjb21wb25lbnRzIGFuZCBhdHRlbXB0cyB0bworIyBmb3JtIHRoZSBtYXN0ZXIgcmVndWxhciBleHByZXNzaW9uLiAgR2l2ZW4gbGltaXRhdGlvbnMgaW4gdGhlIFB5dGhvbiByZQorIyBtb2R1bGUsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gYnJlYWsgdGhlIG1hc3RlciByZWdleCBpbnRvIHNlcGFyYXRlIGV4cHJlc3Npb25zLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgX2Zvcm1fbWFzdGVyX3JlKHJlbGlzdCxyZWZsYWdzLGxkaWN0LHRva25hbWVzKToKKyAgICBpZiBub3QgcmVsaXN0OiByZXR1cm4gW10KKyAgICByZWdleCA9ICJ8Ii5qb2luKHJlbGlzdCkKKyAgICB0cnk6CisgICAgICAgIGxleHJlID0gcmUuY29tcGlsZShyZWdleCxyZS5WRVJCT1NFIHwgcmVmbGFncykKKworICAgICAgICAjIEJ1aWxkIHRoZSBpbmRleCB0byBmdW5jdGlvbiBtYXAgZm9yIHRoZSBtYXRjaGluZyBlbmdpbmUKKyAgICAgICAgbGV4aW5kZXhmdW5jID0gWyBOb25lIF0gKiAobWF4KGxleHJlLmdyb3VwaW5kZXgudmFsdWVzKCkpKzEpCisgICAgICAgIGxleGluZGV4bmFtZXMgPSBsZXhpbmRleGZ1bmNbOl0KKworICAgICAgICBmb3IgZixpIGluIGxleHJlLmdyb3VwaW5kZXguaXRlbXMoKToKKyAgICAgICAgICAgIGhhbmRsZSA9IGxkaWN0LmdldChmLE5vbmUpCisgICAgICAgICAgICBpZiB0eXBlKGhhbmRsZSkgaW4gKHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgbGV4aW5kZXhmdW5jW2ldID0gKGhhbmRsZSx0b2tuYW1lc1tmXSkKKyAgICAgICAgICAgICAgICBsZXhpbmRleG5hbWVzW2ldID0gZgorICAgICAgICAgICAgZWxpZiBoYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGV4aW5kZXhuYW1lc1tpXSA9IGYKKyAgICAgICAgICAgICAgICBpZiBmLmZpbmQoImlnbm9yZV8iKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIGxleGluZGV4ZnVuY1tpXSA9IChOb25lLE5vbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGV4aW5kZXhmdW5jW2ldID0gKE5vbmUsIHRva25hbWVzW2ZdKQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFsobGV4cmUsbGV4aW5kZXhmdW5jKV0sW3JlZ2V4XSxbbGV4aW5kZXhuYW1lc10KKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBtID0gaW50KGxlbihyZWxpc3QpLzIpCisgICAgICAgIGlmIG0gPT0gMDogbSA9IDEKKyAgICAgICAgbGxpc3QsIGxyZSwgbG5hbWVzID0gX2Zvcm1fbWFzdGVyX3JlKHJlbGlzdFs6bV0scmVmbGFncyxsZGljdCx0b2tuYW1lcykKKyAgICAgICAgcmxpc3QsIHJyZSwgcm5hbWVzID0gX2Zvcm1fbWFzdGVyX3JlKHJlbGlzdFttOl0scmVmbGFncyxsZGljdCx0b2tuYW1lcykKKyAgICAgICAgcmV0dXJuIGxsaXN0K3JsaXN0LCBscmUrcnJlLCBsbmFtZXMrcm5hbWVzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZGVmIF9zdGF0ZXRva2VuKHMsbmFtZXMpCisjCisjIEdpdmVuIGEgZGVjbGFyYXRpb24gbmFtZSBzIG9mIHRoZSBmb3JtICJ0XyIgYW5kIGEgZGljdGlvbmFyeSB3aG9zZSBrZXlzIGFyZQorIyBzdGF0ZSBuYW1lcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdHVwbGUgKHN0YXRlcyx0b2tlbm5hbWUpIHdoZXJlIHN0YXRlcworIyBpcyBhIHR1cGxlIG9mIHN0YXRlIG5hbWVzIGFuZCB0b2tlbm5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHRva2VuLiAgRm9yIGV4YW1wbGUsCisjIGNhbGxpbmcgdGhpcyB3aXRoIHMgPSAidF9mb29fYmFyX1NQQU0iIG1pZ2h0IHJldHVybiAoKCdmb28nLCdiYXInKSwnU1BBTScpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBfc3RhdGV0b2tlbihzLG5hbWVzKToKKyAgICBub25zdGF0ZSA9IDEKKyAgICBwYXJ0cyA9IHMuc3BsaXQoIl8iKQorICAgIGZvciBpIGluIHJhbmdlKDEsbGVuKHBhcnRzKSk6CisgICAgICAgICBpZiBub3QgcGFydHNbaV0gaW4gbmFtZXMgYW5kIHBhcnRzW2ldICE9ICdBTlknOiBicmVhaworICAgIGlmIGkgPiAxOgorICAgICAgIHN0YXRlcyA9IHR1cGxlKHBhcnRzWzE6aV0pCisgICAgZWxzZToKKyAgICAgICBzdGF0ZXMgPSAoJ0lOSVRJQUwnLCkKKworICAgIGlmICdBTlknIGluIHN0YXRlczoKKyAgICAgICBzdGF0ZXMgPSB0dXBsZShuYW1lcykKKworICAgIHRva2VubmFtZSA9ICJfIi5qb2luKHBhcnRzW2k6XSkKKyAgICByZXR1cm4gKHN0YXRlcyx0b2tlbm5hbWUpCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMZXhlclJlZmxlY3QoKQorIworIyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIGEgbGV4ZXIgYXMgZXh0cmFjdGVkIGZyb20gYQorIyB1c2VyJ3MgaW5wdXQgZmlsZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIExleGVyUmVmbGVjdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGxkaWN0LGxvZz1Ob25lLHJlZmxhZ3M9MCk6CisgICAgICAgIHNlbGYubGRpY3QgICAgICA9IGxkaWN0CisgICAgICAgIHNlbGYuZXJyb3JfZnVuYyA9IE5vbmUKKyAgICAgICAgc2VsZi50b2tlbnMgICAgID0gW10KKyAgICAgICAgc2VsZi5yZWZsYWdzICAgID0gcmVmbGFncworICAgICAgICBzZWxmLnN0YXRlaW5mbyAgPSB7ICdJTklUSUFMJyA6ICdpbmNsdXNpdmUnfQorICAgICAgICBzZWxmLmZpbGVzICAgICAgPSB7fQorICAgICAgICBzZWxmLmVycm9yICAgICAgPSAwCisKKyAgICAgICAgaWYgbG9nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmxvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sb2cgPSBsb2cKKworICAgICMgR2V0IGFsbCBvZiB0aGUgYmFzaWMgaW5mb3JtYXRpb24KKyAgICBkZWYgZ2V0X2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfdG9rZW5zKCkKKyAgICAgICAgc2VsZi5nZXRfbGl0ZXJhbHMoKQorICAgICAgICBzZWxmLmdldF9zdGF0ZXMoKQorICAgICAgICBzZWxmLmdldF9ydWxlcygpCisgICAgICAgIAorICAgICMgVmFsaWRhdGUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbgorICAgIGRlZiB2YWxpZGF0ZV9hbGwoc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGVfdG9rZW5zKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9saXRlcmFscygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfcnVsZXMoKQorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcgorCisgICAgIyBHZXQgdGhlIHRva2VucyBtYXAKKyAgICBkZWYgZ2V0X3Rva2VucyhzZWxmKToKKyAgICAgICAgdG9rZW5zID0gc2VsZi5sZGljdC5nZXQoInRva2VucyIsTm9uZSkKKyAgICAgICAgaWYgbm90IHRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyB0b2tlbiBsaXN0IGlzIGRlZmluZWQiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRva2VucywobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0b2tlbnMgbXVzdCBiZSBhIGxpc3Qgb3IgdHVwbGUiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgaWYgbm90IHRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0b2tlbnMgaXMgZW1wdHkiKQorICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYudG9rZW5zID0gdG9rZW5zCisKKyAgICAjIFZhbGlkYXRlIHRoZSB0b2tlbnMKKyAgICBkZWYgdmFsaWRhdGVfdG9rZW5zKHNlbGYpOgorICAgICAgICB0ZXJtaW5hbHMgPSB7fQorICAgICAgICBmb3IgbiBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIGlmIG5vdCBfaXNfaWRlbnRpZmllci5tYXRjaChuKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiQmFkIHRva2VuIG5hbWUgJyVzJyIsbikKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgaWYgbiBpbiB0ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiVG9rZW4gJyVzJyBtdWx0aXBseSBkZWZpbmVkIiwgbikKKyAgICAgICAgICAgIHRlcm1pbmFsc1tuXSA9IDEKKworICAgICMgR2V0IHRoZSBsaXRlcmFscyBzcGVjaWZpZXIKKyAgICBkZWYgZ2V0X2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmxpdGVyYWxzID0gc2VsZi5sZGljdC5nZXQoImxpdGVyYWxzIiwiIikKKworICAgICMgVmFsaWRhdGUgbGl0ZXJhbHMKKyAgICBkZWYgdmFsaWRhdGVfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIHNlbGYubGl0ZXJhbHM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYyxTdHJpbmdUeXBlcykgb3IgbGVuKGMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgbGl0ZXJhbCAlcy4gTXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiLCByZXByKGMpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiSW52YWxpZCBsaXRlcmFscyBzcGVjaWZpY2F0aW9uLiBsaXRlcmFscyBtdXN0IGJlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgZGVmIGdldF9zdGF0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3RhdGVzID0gc2VsZi5sZGljdC5nZXQoInN0YXRlcyIsTm9uZSkKKyAgICAgICAgIyBCdWlsZCBzdGF0ZW1hcAorICAgICAgICBpZiBzZWxmLnN0YXRlczoKKyAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YXRlcywodHVwbGUsbGlzdCkpOgorICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInN0YXRlcyBtdXN0IGJlIGRlZmluZWQgYXMgYSB0dXBsZSBvciBsaXN0IikKKyAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgIGZvciBzIGluIHNlbGYuc3RhdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocyx0dXBsZSkgb3IgbGVuKHMpICE9IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgc3RhdGUgc3BlY2lmaWVyICVzLiBNdXN0IGJlIGEgdHVwbGUgKHN0YXRlbmFtZSwnZXhjbHVzaXZlfGluY2x1c2l2ZScpIixyZXByKHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHN0YXRldHlwZSA9IHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsU3RyaW5nVHlwZXMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJTdGF0ZSBuYW1lICVzIG11c3QgYmUgYSBzdHJpbmciLCByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAoc3RhdGV0eXBlID09ICdpbmNsdXNpdmUnIG9yIHN0YXRldHlwZSA9PSAnZXhjbHVzaXZlJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlN0YXRlIHR5cGUgZm9yIHN0YXRlICVzIG11c3QgYmUgJ2luY2x1c2l2ZScgb3IgJ2V4Y2x1c2l2ZSciLG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLnN0YXRlaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiU3RhdGUgJyVzJyBhbHJlYWR5IGRlZmluZWQiLG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZWluZm9bbmFtZV0gPSBzdGF0ZXR5cGUKKworICAgICMgR2V0IGFsbCBvZiB0aGUgc3ltYm9scyB3aXRoIGEgdF8gcHJlZml4IGFuZCBzb3J0IHRoZW0gaW50byB2YXJpb3VzCisgICAgIyBjYXRlZ29yaWVzIChmdW5jdGlvbnMsIHN0cmluZ3MsIGVycm9yIGZ1bmN0aW9ucywgYW5kIGlnbm9yZSBjaGFyYWN0ZXJzKQorCisgICAgZGVmIGdldF9ydWxlcyhzZWxmKToKKyAgICAgICAgdHN5bWJvbHMgPSBbZiBmb3IgZiBpbiBzZWxmLmxkaWN0IGlmIGZbOjJdID09ICd0XycgXQorCisgICAgICAgICMgTm93IGJ1aWxkIHVwIGEgbGlzdCBvZiBmdW5jdGlvbnMgYW5kIGEgbGlzdCBvZiBzdHJpbmdzCisKKyAgICAgICAgc2VsZi50b2tuYW1lcyA9IHsgfSAgICAgICAgIyBNYXBwaW5nIG9mIHN5bWJvbHMgdG8gdG9rZW4gbmFtZXMKKyAgICAgICAgc2VsZi5mdW5jc3ltID0gIHsgfSAgICAgICAgIyBTeW1ib2xzIGRlZmluZWQgYXMgZnVuY3Rpb25zCisgICAgICAgIHNlbGYuc3Ryc3ltID0gICB7IH0gICAgICAgICMgU3ltYm9scyBkZWZpbmVkIGFzIHN0cmluZ3MKKyAgICAgICAgc2VsZi5pZ25vcmUgICA9IHsgfSAgICAgICAgIyBJZ25vcmUgc3RyaW5ncyBieSBzdGF0ZQorICAgICAgICBzZWxmLmVycm9yZiAgID0geyB9ICAgICAgICAjIEVycm9yIGZ1bmN0aW9ucyBieSBzdGF0ZQorCisgICAgICAgIGZvciBzIGluIHNlbGYuc3RhdGVpbmZvOgorICAgICAgICAgICAgIHNlbGYuZnVuY3N5bVtzXSA9IFtdCisgICAgICAgICAgICAgc2VsZi5zdHJzeW1bc10gPSBbXQorCisgICAgICAgIGlmIGxlbih0c3ltYm9scykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyBydWxlcyBvZiB0aGUgZm9ybSB0X3J1bGVuYW1lIGFyZSBkZWZpbmVkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgZiBpbiB0c3ltYm9sczoKKyAgICAgICAgICAgIHQgPSBzZWxmLmxkaWN0W2ZdCisgICAgICAgICAgICBzdGF0ZXMsIHRva25hbWUgPSBfc3RhdGV0b2tlbihmLHNlbGYuc3RhdGVpbmZvKQorICAgICAgICAgICAgc2VsZi50b2tuYW1lc1tmXSA9IHRva25hbWUKKworICAgICAgICAgICAgaWYgaGFzYXR0cih0LCJfX2NhbGxfXyIpOgorICAgICAgICAgICAgICAgIGlmIHRva25hbWUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcmZbc10gPSB0CisgICAgICAgICAgICAgICAgZWxpZiB0b2tuYW1lID09ICdpZ25vcmUnOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gZnVuY19jb2RlKHQpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUodCkuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgbXVzdCBiZSBkZWZpbmVkIGFzIGEgc3RyaW5nIixmaWxlLGxpbmUsdC5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZXM6IAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mdW5jc3ltW3NdLmFwcGVuZCgoZix0KSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0LCBTdHJpbmdUeXBlcyk6CisgICAgICAgICAgICAgICAgaWYgdG9rbmFtZSA9PSAnaWdub3JlJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pZ25vcmVbc10gPSB0CisgICAgICAgICAgICAgICAgICAgIGlmICJcXCIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIiVzIGNvbnRhaW5zIGEgbGl0ZXJhbCBiYWNrc2xhc2ggJ1xcJyIsZikKKworICAgICAgICAgICAgICAgIGVsaWYgdG9rbmFtZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiUnVsZSAnJXMnIG11c3QgYmUgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uIiwgZikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZXM6IAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJzeW1bc10uYXBwZW5kKChmLHQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXMgbm90IGRlZmluZWQgYXMgYSBmdW5jdGlvbiBvciBzdHJpbmciLCBmKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgIyBTb3J0IHRoZSBmdW5jdGlvbnMgYnkgbGluZSBudW1iZXIKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5mdW5jc3ltLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICAgICAgZi5zb3J0KGxhbWJkYSB4LHk6IGNtcChmdW5jX2NvZGUoeFsxXSkuY29fZmlyc3RsaW5lbm8sZnVuY19jb2RlKHlbMV0pLmNvX2ZpcnN0bGluZW5vKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBQeXRob24gMy4wCisgICAgICAgICAgICAgICAgZi5zb3J0KGtleT1sYW1iZGEgeDogZnVuY19jb2RlKHhbMV0pLmNvX2ZpcnN0bGluZW5vKQorCisgICAgICAgICMgU29ydCB0aGUgc3RyaW5ncyBieSByZWd1bGFyIGV4cHJlc3Npb24gbGVuZ3RoCisgICAgICAgIGZvciBzIGluIHNlbGYuc3Ryc3ltLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CisgICAgICAgICAgICAgICAgcy5zb3J0KGxhbWJkYSB4LHk6IChsZW4oeFsxXSkgPCBsZW4oeVsxXSkpIC0gKGxlbih4WzFdKSA+IGxlbih5WzFdKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUHl0aG9uIDMuMAorICAgICAgICAgICAgICAgIHMuc29ydChrZXk9bGFtYmRhIHg6IGxlbih4WzFdKSxyZXZlcnNlPVRydWUpCisKKyAgICAjIFZhbGlkYXRlIGFsbCBvZiB0aGUgdF9ydWxlcyBjb2xsZWN0ZWQgCisgICAgZGVmIHZhbGlkYXRlX3J1bGVzKHNlbGYpOgorICAgICAgICBmb3Igc3RhdGUgaW4gc2VsZi5zdGF0ZWluZm86CisgICAgICAgICAgICAjIFZhbGlkYXRlIGFsbCBydWxlcyBkZWZpbmVkIGJ5IGZ1bmN0aW9ucworCisgICAgICAgICAgICAKKworICAgICAgICAgICAgZm9yIGZuYW1lLCBmIGluIHNlbGYuZnVuY3N5bVtzdGF0ZV06CisgICAgICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZShmKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoZikuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVzW2ZpbGVdID0gMQorCisgICAgICAgICAgICAgICAgdG9rbmFtZSA9IHNlbGYudG9rbmFtZXNbZm5hbWVdCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgcmVxYXJncyA9IDIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXFhcmdzID0gMQorICAgICAgICAgICAgICAgIG5hcmdzID0gZnVuY19jb2RlKGYpLmNvX2FyZ2NvdW50CisgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPiByZXFhcmdzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyBoYXMgdG9vIG1hbnkgYXJndW1lbnRzIixmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5hcmdzIDwgcmVxYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgcmVxdWlyZXMgYW4gYXJndW1lbnQiLCBmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBmLl9fZG9jX186CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogTm8gcmVndWxhciBleHByZXNzaW9uIGRlZmluZWQgZm9yIHJ1bGUgJyVzJyIsZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGMgPSByZS5jb21waWxlKCIoP1A8JXM+JXMpIiAlIChmbmFtZSxmLl9fZG9jX18pLCByZS5WRVJCT1NFIHwgc2VsZi5yZWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiBjLm1hdGNoKCIiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycgbWF0Y2hlcyBlbXB0eSBzdHJpbmciLCBmaWxlLGxpbmUsZi5fX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBfZXR5cGUsIGUsIF9ldHJhY2UgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycuICVzIiwgZmlsZSxsaW5lLGYuX19uYW1lX18sZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgJyMnIGluIGYuX19kb2NfXzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZC4gTWFrZSBzdXJlICcjJyBpbiBydWxlICclcycgaXMgZXNjYXBlZCB3aXRoICdcXCMnIixmaWxlLGxpbmUsIGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgICMgVmFsaWRhdGUgYWxsIHJ1bGVzIGRlZmluZWQgYnkgc3RyaW5ncworICAgICAgICAgICAgZm9yIG5hbWUsciBpbiBzZWxmLnN0cnN5bVtzdGF0ZV06CisgICAgICAgICAgICAgICAgdG9rbmFtZSA9IHNlbGYudG9rbmFtZXNbbmFtZV0KKyAgICAgICAgICAgICAgICBpZiB0b2tuYW1lID09ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJSdWxlICclcycgbXVzdCBiZSBkZWZpbmVkIGFzIGEgZnVuY3Rpb24iLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IHRva25hbWUgaW4gc2VsZi50b2tlbnMgYW5kIHRva25hbWUuZmluZCgiaWdub3JlXyIpIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIlJ1bGUgJyVzJyBkZWZpbmVkIGZvciBhbiB1bnNwZWNpZmllZCB0b2tlbiAlcyIsbmFtZSx0b2tuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjID0gcmUuY29tcGlsZSgiKD9QPCVzPiVzKSIgJSAobmFtZSxyKSxyZS5WRVJCT1NFIHwgc2VsZi5yZWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiAoYy5tYXRjaCgiIikpOgorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHJ1bGUgJyVzJyBtYXRjaGVzIGVtcHR5IHN0cmluZyIsbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgX2V0eXBlLCBlLCBfZXRyYWNlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZvciBydWxlICclcycuICVzIixuYW1lLGUpCisgICAgICAgICAgICAgICAgICAgIGlmICcjJyBpbiByOgorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJNYWtlIHN1cmUgJyMnIGluIHJ1bGUgJyVzJyBpcyBlc2NhcGVkIHdpdGggJ1xcIyciLG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmZ1bmNzeW1bc3RhdGVdIGFuZCBub3Qgc2VsZi5zdHJzeW1bc3RhdGVdOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJObyBydWxlcyBkZWZpbmVkIGZvciBzdGF0ZSAnJXMnIixzdGF0ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICAjIFZhbGlkYXRlIHRoZSBlcnJvciBmdW5jdGlvbgorICAgICAgICAgICAgZWZ1bmMgPSBzZWxmLmVycm9yZi5nZXQoc3RhdGUsTm9uZSkKKyAgICAgICAgICAgIGlmIGVmdW5jOgorICAgICAgICAgICAgICAgIGYgPSBlZnVuYworICAgICAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUoZikuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgICAgICBmaWxlID0gZnVuY19jb2RlKGYpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5maWxlc1tmaWxlXSA9IDEKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHJlcWFyZ3MgPSAyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVxYXJncyA9IDEKKyAgICAgICAgICAgICAgICBuYXJncyA9IGZ1bmNfY29kZShmKS5jb19hcmdjb3VudAorICAgICAgICAgICAgICAgIGlmIG5hcmdzID4gcmVxYXJnczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIsZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgICAgICAgICBpZiBuYXJncyA8IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogUnVsZSAnJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwgZmlsZSxsaW5lLGYuX19uYW1lX18pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfZmlsZShmKQorCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB2YWxpZGF0ZV9maWxlKCkKKyAgICAjCisgICAgIyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZWQgdF9ydWxlbmFtZSgpIGZ1bmN0aW9ucyBvciBzdHJpbmdzCisgICAgIyBpbiB0aGUgcGFyc2VyIGlucHV0IGZpbGUuICBUaGlzIGlzIGRvbmUgdXNpbmcgYSBzaW1wbGUgcmVndWxhciBleHByZXNzaW9uCisgICAgIyBtYXRjaCBvbiBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUuICAKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdmFsaWRhdGVfZmlsZShzZWxmLGZpbGVuYW1lKToKKyAgICAgICAgaW1wb3J0IG9zLnBhdGgKKyAgICAgICAgYmFzZSxleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICBpZiBleHQgIT0gJy5weSc6IHJldHVybiAgICAgICAgICMgTm8gaWRlYSB3aGF0IHRoZSBmaWxlIGlzLiBSZXR1cm4gT0sKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKKyAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICMgQ291bGRuJ3QgZmluZCB0aGUgZmlsZS4gIERvbid0IHdvcnJ5IGFib3V0IGl0CisKKyAgICAgICAgZnJlID0gcmUuY29tcGlsZShyJ1xzKmRlZlxzKyh0X1thLXpBLVpfMC05XSopXCgnKQorICAgICAgICBzcmUgPSByZS5jb21waWxlKHInXHMqKHRfW2EtekEtWl8wLTldKilccyo9JykKKworICAgICAgICBjb3VudGhhc2ggPSB7IH0KKyAgICAgICAgbGluZW4gPSAxCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IGZyZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgbSA9IHNyZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIHByZXYgPSBjb3VudGhhc2guZ2V0KG5hbWUpCisgICAgICAgICAgICAgICAgaWYgbm90IHByZXY6CisgICAgICAgICAgICAgICAgICAgIGNvdW50aGFzaFtuYW1lXSA9IGxpbmVuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICVzIHJlZGVmaW5lZC4gUHJldmlvdXNseSBkZWZpbmVkIG9uIGxpbmUgJWQiLGZpbGVuYW1lLGxpbmVuLG5hbWUscHJldikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGxpbmVuICs9IDEKKyAgICAgICAgICAgIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsZXgobW9kdWxlKQorIworIyBCdWlsZCBhbGwgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBydWxlcyBmcm9tIGRlZmluaXRpb25zIGluIHRoZSBzdXBwbGllZCBtb2R1bGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiBsZXgobW9kdWxlPU5vbmUsb2JqZWN0PU5vbmUsZGVidWc9MCxvcHRpbWl6ZT0wLGxleHRhYj0ibGV4dGFiIixyZWZsYWdzPTAsbm93YXJuPTAsb3V0cHV0ZGlyPSIiLCBkZWJ1Z2xvZz1Ob25lLCBlcnJvcmxvZz1Ob25lKToKKyAgICBnbG9iYWwgbGV4ZXIKKyAgICBsZGljdCA9IE5vbmUKKyAgICBzdGF0ZWluZm8gID0geyAnSU5JVElBTCcgOiAnaW5jbHVzaXZlJ30KKyAgICBsZXhvYmogPSBMZXhlcigpCisgICAgbGV4b2JqLmxleG9wdGltaXplID0gb3B0aW1pemUKKyAgICBnbG9iYWwgdG9rZW4saW5wdXQKKworICAgIGlmIGVycm9ybG9nIGlzIE5vbmU6CisgICAgICAgIGVycm9ybG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgaWYgZGVidWdsb2cgaXMgTm9uZToKKyAgICAgICAgICAgIGRlYnVnbG9nID0gUGx5TG9nZ2VyKHN5cy5zdGRlcnIpCisKKyAgICAjIEdldCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgdXNlZCBmb3IgdGhlIGxleGVyCisgICAgaWYgb2JqZWN0OiBtb2R1bGUgPSBvYmplY3QKKworICAgIGlmIG1vZHVsZToKKyAgICAgICAgX2l0ZW1zID0gWyhrLGdldGF0dHIobW9kdWxlLGspKSBmb3IgayBpbiBkaXIobW9kdWxlKV0KKyAgICAgICAgbGRpY3QgPSBkaWN0KF9pdGVtcykKKyAgICBlbHNlOgorICAgICAgICBsZGljdCA9IGdldF9jYWxsZXJfbW9kdWxlX2RpY3QoMikKKworICAgICMgQ29sbGVjdCBwYXJzZXIgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGljdGlvbmFyeQorICAgIGxpbmZvID0gTGV4ZXJSZWZsZWN0KGxkaWN0LGxvZz1lcnJvcmxvZyxyZWZsYWdzPXJlZmxhZ3MpCisgICAgbGluZm8uZ2V0X2FsbCgpCisgICAgaWYgbm90IG9wdGltaXplOgorICAgICAgICBpZiBsaW5mby52YWxpZGF0ZV9hbGwoKToKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJDYW4ndCBidWlsZCBsZXhlciIpCisKKyAgICBpZiBvcHRpbWl6ZSBhbmQgbGV4dGFiOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsZXhvYmoucmVhZHRhYihsZXh0YWIsbGRpY3QpCisgICAgICAgICAgICB0b2tlbiA9IGxleG9iai50b2tlbgorICAgICAgICAgICAgaW5wdXQgPSBsZXhvYmouaW5wdXQKKyAgICAgICAgICAgIGxleGVyID0gbGV4b2JqCisgICAgICAgICAgICByZXR1cm4gbGV4b2JqCisKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBEdW1wIHNvbWUgYmFzaWMgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogdG9rZW5zICAgPSAlciIsIGxpbmZvLnRva2VucykKKyAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBsaXRlcmFscyA9ICVyIiwgbGluZm8ubGl0ZXJhbHMpCisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogc3RhdGVzICAgPSAlciIsIGxpbmZvLnN0YXRlaW5mbykKKworICAgICMgQnVpbGQgYSBkaWN0aW9uYXJ5IG9mIHZhbGlkIHRva2VuIG5hbWVzCisgICAgbGV4b2JqLmxleHRva2VucyA9IHsgfQorICAgIGZvciBuIGluIGxpbmZvLnRva2VuczoKKyAgICAgICAgbGV4b2JqLmxleHRva2Vuc1tuXSA9IDEKKworICAgICMgR2V0IGxpdGVyYWxzIHNwZWNpZmljYXRpb24KKyAgICBpZiBpc2luc3RhbmNlKGxpbmZvLmxpdGVyYWxzLChsaXN0LHR1cGxlKSk6CisgICAgICAgIGxleG9iai5sZXhsaXRlcmFscyA9IHR5cGUobGluZm8ubGl0ZXJhbHNbMF0pKCkuam9pbihsaW5mby5saXRlcmFscykKKyAgICBlbHNlOgorICAgICAgICBsZXhvYmoubGV4bGl0ZXJhbHMgPSBsaW5mby5saXRlcmFscworCisgICAgIyBHZXQgdGhlIHN0YXRlaW5mbyBkaWN0aW9uYXJ5CisgICAgc3RhdGVpbmZvID0gbGluZm8uc3RhdGVpbmZvCisKKyAgICByZWdleHMgPSB7IH0KKyAgICAjIEJ1aWxkIHRoZSBtYXN0ZXIgcmVndWxhciBleHByZXNzaW9ucworICAgIGZvciBzdGF0ZSBpbiBzdGF0ZWluZm86CisgICAgICAgIHJlZ2V4X2xpc3QgPSBbXQorCisgICAgICAgICMgQWRkIHJ1bGVzIGRlZmluZWQgYnkgZnVuY3Rpb25zIGZpcnN0CisgICAgICAgIGZvciBmbmFtZSwgZiBpbiBsaW5mby5mdW5jc3ltW3N0YXRlXToKKyAgICAgICAgICAgIGxpbmUgPSBmdW5jX2NvZGUoZikuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoZikuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIHJlZ2V4X2xpc3QuYXBwZW5kKCIoP1A8JXM+JXMpIiAlIChmbmFtZSxmLl9fZG9jX18pKQorICAgICAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICAgICAgZGVidWdsb2cuaW5mbygibGV4OiBBZGRpbmcgcnVsZSAlcyAtPiAnJXMnIChzdGF0ZSAnJXMnKSIsZm5hbWUsZi5fX2RvY19fLCBzdGF0ZSkKKworICAgICAgICAjIE5vdyBhZGQgYWxsIG9mIHRoZSBzaW1wbGUgcnVsZXMKKyAgICAgICAgZm9yIG5hbWUsciBpbiBsaW5mby5zdHJzeW1bc3RhdGVdOgorICAgICAgICAgICAgcmVnZXhfbGlzdC5hcHBlbmQoIig/UDwlcz4lcykiICUgKG5hbWUscikpCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJsZXg6IEFkZGluZyBydWxlICVzIC0+ICclcycgKHN0YXRlICclcycpIixuYW1lLHIsIHN0YXRlKQorCisgICAgICAgIHJlZ2V4c1tzdGF0ZV0gPSByZWdleF9saXN0CisKKyAgICAjIEJ1aWxkIHRoZSBtYXN0ZXIgcmVndWxhciBleHByZXNzaW9ucworCisgICAgaWYgZGVidWc6CisgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogPT09PSBNQVNURVIgUkVHRVhTIEZPTExPVyA9PT09IikKKworICAgIGZvciBzdGF0ZSBpbiByZWdleHM6CisgICAgICAgIGxleHJlLCByZV90ZXh0LCByZV9uYW1lcyA9IF9mb3JtX21hc3Rlcl9yZShyZWdleHNbc3RhdGVdLHJlZmxhZ3MsbGRpY3QsbGluZm8udG9rbmFtZXMpCisgICAgICAgIGxleG9iai5sZXhzdGF0ZXJlW3N0YXRlXSA9IGxleHJlCisgICAgICAgIGxleG9iai5sZXhzdGF0ZXJldGV4dFtzdGF0ZV0gPSByZV90ZXh0CisgICAgICAgIGxleG9iai5sZXhzdGF0ZXJlbmFtZXNbc3RhdGVdID0gcmVfbmFtZXMKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVfdGV4dCkpOgorICAgICAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oImxleDogc3RhdGUgJyVzJyA6IHJlZ2V4WyVkXSA9ICclcyciLHN0YXRlLCBpLCByZV90ZXh0W2ldKQorCisgICAgIyBGb3IgaW5jbHVzaXZlIHN0YXRlcywgd2UgbmVlZCB0byBhZGQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZnJvbSB0aGUgSU5JVElBTCBzdGF0ZQorICAgIGZvciBzdGF0ZSxzdHlwZSBpbiBzdGF0ZWluZm8uaXRlbXMoKToKKyAgICAgICAgaWYgc3RhdGUgIT0gIklOSVRJQUwiIGFuZCBzdHlwZSA9PSAnaW5jbHVzaXZlJzoKKyAgICAgICAgICAgICBsZXhvYmoubGV4c3RhdGVyZVtzdGF0ZV0uZXh0ZW5kKGxleG9iai5sZXhzdGF0ZXJlWydJTklUSUFMJ10pCisgICAgICAgICAgICAgbGV4b2JqLmxleHN0YXRlcmV0ZXh0W3N0YXRlXS5leHRlbmQobGV4b2JqLmxleHN0YXRlcmV0ZXh0WydJTklUSUFMJ10pCisgICAgICAgICAgICAgbGV4b2JqLmxleHN0YXRlcmVuYW1lc1tzdGF0ZV0uZXh0ZW5kKGxleG9iai5sZXhzdGF0ZXJlbmFtZXNbJ0lOSVRJQUwnXSkKKworICAgIGxleG9iai5sZXhzdGF0ZWluZm8gPSBzdGF0ZWluZm8KKyAgICBsZXhvYmoubGV4cmUgPSBsZXhvYmoubGV4c3RhdGVyZVsiSU5JVElBTCJdCisgICAgbGV4b2JqLmxleHJldGV4dCA9IGxleG9iai5sZXhzdGF0ZXJldGV4dFsiSU5JVElBTCJdCisgICAgbGV4b2JqLmxleHJlZmxhZ3MgPSByZWZsYWdzCisKKyAgICAjIFNldCB1cCBpZ25vcmUgdmFyaWFibGVzCisgICAgbGV4b2JqLmxleHN0YXRlaWdub3JlID0gbGluZm8uaWdub3JlCisgICAgbGV4b2JqLmxleGlnbm9yZSA9IGxleG9iai5sZXhzdGF0ZWlnbm9yZS5nZXQoIklOSVRJQUwiLCIiKQorCisgICAgIyBTZXQgdXAgZXJyb3IgZnVuY3Rpb25zCisgICAgbGV4b2JqLmxleHN0YXRlZXJyb3JmID0gbGluZm8uZXJyb3JmCisgICAgbGV4b2JqLmxleGVycm9yZiA9IGxpbmZvLmVycm9yZi5nZXQoIklOSVRJQUwiLE5vbmUpCisgICAgaWYgbm90IGxleG9iai5sZXhlcnJvcmY6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIk5vIHRfZXJyb3IgcnVsZSBpcyBkZWZpbmVkIikKKworICAgICMgQ2hlY2sgc3RhdGUgaW5mb3JtYXRpb24gZm9yIGlnbm9yZSBhbmQgZXJyb3IgcnVsZXMKKyAgICBmb3IgcyxzdHlwZSBpbiBzdGF0ZWluZm8uaXRlbXMoKToKKyAgICAgICAgaWYgc3R5cGUgPT0gJ2V4Y2x1c2l2ZSc6CisgICAgICAgICAgICAgIGlmIG5vdCBzIGluIGxpbmZvLmVycm9yZjoKKyAgICAgICAgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJObyBlcnJvciBydWxlIGlzIGRlZmluZWQgZm9yIGV4Y2x1c2l2ZSBzdGF0ZSAnJXMnIiwgcykKKyAgICAgICAgICAgICAgaWYgbm90IHMgaW4gbGluZm8uaWdub3JlIGFuZCBsZXhvYmoubGV4aWdub3JlOgorICAgICAgICAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIk5vIGlnbm9yZSBydWxlIGlzIGRlZmluZWQgZm9yIGV4Y2x1c2l2ZSBzdGF0ZSAnJXMnIiwgcykKKyAgICAgICAgZWxpZiBzdHlwZSA9PSAnaW5jbHVzaXZlJzoKKyAgICAgICAgICAgICAgaWYgbm90IHMgaW4gbGluZm8uZXJyb3JmOgorICAgICAgICAgICAgICAgICAgIGxpbmZvLmVycm9yZltzXSA9IGxpbmZvLmVycm9yZi5nZXQoIklOSVRJQUwiLE5vbmUpCisgICAgICAgICAgICAgIGlmIG5vdCBzIGluIGxpbmZvLmlnbm9yZToKKyAgICAgICAgICAgICAgICAgICBsaW5mby5pZ25vcmVbc10gPSBsaW5mby5pZ25vcmUuZ2V0KCJJTklUSUFMIiwiIikKKworICAgICMgQ3JlYXRlIGdsb2JhbCB2ZXJzaW9ucyBvZiB0aGUgdG9rZW4oKSBhbmQgaW5wdXQoKSBmdW5jdGlvbnMKKyAgICB0b2tlbiA9IGxleG9iai50b2tlbgorICAgIGlucHV0ID0gbGV4b2JqLmlucHV0CisgICAgbGV4ZXIgPSBsZXhvYmoKKworICAgICMgSWYgaW4gb3B0aW1pemUgbW9kZSwgd2Ugd3JpdGUgdGhlIGxleHRhYgorICAgIGlmIGxleHRhYiBhbmQgb3B0aW1pemU6CisgICAgICAgIGxleG9iai53cml0ZXRhYihsZXh0YWIsb3V0cHV0ZGlyKQorCisgICAgcmV0dXJuIGxleG9iagorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJ1bm1haW4oKQorIworIyBUaGlzIHJ1bnMgdGhlIGxleGVyIGFzIGEgbWFpbiBwcm9ncmFtCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBydW5tYWluKGxleGVyPU5vbmUsZGF0YT1Ob25lKToKKyAgICBpZiBub3QgZGF0YToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQorICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlJlYWRpbmcgZnJvbSBzdGFuZGFyZCBpbnB1dCAodHlwZSBFT0YgdG8gZW5kKTpcbiIpCisgICAgICAgICAgICBkYXRhID0gc3lzLnN0ZGluLnJlYWQoKQorCisgICAgaWYgbGV4ZXI6CisgICAgICAgIF9pbnB1dCA9IGxleGVyLmlucHV0CisgICAgZWxzZToKKyAgICAgICAgX2lucHV0ID0gaW5wdXQKKyAgICBfaW5wdXQoZGF0YSkKKyAgICBpZiBsZXhlcjoKKyAgICAgICAgX3Rva2VuID0gbGV4ZXIudG9rZW4KKyAgICBlbHNlOgorICAgICAgICBfdG9rZW4gPSB0b2tlbgorCisgICAgd2hpbGUgMToKKyAgICAgICAgdG9rID0gX3Rva2VuKCkKKyAgICAgICAgaWYgbm90IHRvazogYnJlYWsKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiKCVzLCVyLCVkLCVkKVxuIiAlICh0b2sudHlwZSwgdG9rLnZhbHVlLCB0b2subGluZW5vLHRvay5sZXhwb3MpKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEBUT0tFTihyZWdleCkKKyMKKyMgVGhpcyBkZWNvcmF0b3IgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSByZWdleCBleHByZXNzaW9uIG9uIGEgZnVuY3Rpb24KKyMgd2hlbiBpdHMgZG9jc3RyaW5nIG1pZ2h0IG5lZWQgdG8gYmUgc2V0IGluIGFuIGFsdGVybmF0aXZlIHdheQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgVE9LRU4ocik6CisgICAgZGVmIHNldF9kb2MoZik6CisgICAgICAgIGlmIGhhc2F0dHIociwiX19jYWxsX18iKToKKyAgICAgICAgICAgIGYuX19kb2NfXyA9IHIuX19kb2NfXworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5fX2RvY19fID0gcgorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBzZXRfZG9jCisKKyMgQWx0ZXJuYXRpdmUgc3BlbGxpbmcgb2YgdGhlIFRPS0VOIGRlY29yYXRvcgorVG9rZW4gPSBUT0tFTgorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9wbHkveWFjYy5weSBiL2JpdGJha2UvbGliL3BseS95YWNjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjhmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9wbHkveWFjYy5weQpAQCAtMCwwICsxLDMyNzYgQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGx5OiB5YWNjLnB5CisjCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDA5LAorIyBEYXZpZCBNLiBCZWF6bGV5IChEYWJlYXogTExDKQorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgCisjICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKyMgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisjICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uICAKKyMgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBEYXZpZCBCZWF6bGV5IG9yIERhYmVheiBMTEMgbWF5IGJlIHVzZWQgdG8KKyMgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorIyAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBUaGlzIGltcGxlbWVudHMgYW4gTFIgcGFyc2VyIHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSBncmFtbWFyIHJ1bGVzIGRlZmluZWQKKyMgYXMgUHl0aG9uIGZ1bmN0aW9ucy4gVGhlIGdyYW1tZXIgaXMgc3BlY2lmaWVkIGJ5IHN1cHBseWluZyB0aGUgQk5GIGluc2lkZQorIyBQeXRob24gZG9jdW1lbnRhdGlvbiBzdHJpbmdzLiAgVGhlIGluc3BpcmF0aW9uIGZvciB0aGlzIHRlY2huaXF1ZSB3YXMgYm9ycm93ZWQKKyMgZnJvbSBKb2huIEF5Y29jaydzIFNwYXJrIHBhcnNpbmcgc3lzdGVtLiAgUExZIG1pZ2h0IGJlIHZpZXdlZCBhcyBjcm9zcyBiZXR3ZWVuCisjIFNwYXJrIGFuZCB0aGUgR05VIGJpc29uIHV0aWxpdHkuCisjCisjIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG9ubHkgc29tZXdoYXQgb2JqZWN0LW9yaWVudGVkLiBUaGUKKyMgTFIgcGFyc2VyIGl0c2VsZiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIGFuIG9iamVjdCAod2hpY2ggYWxsb3dzIG11bHRpcGxlCisjIHBhcnNlcnMgdG8gY28tZXhpc3QpLiAgSG93ZXZlciwgbW9zdCBvZiB0aGUgdmFyaWFibGVzIHVzZWQgZHVyaW5nIHRhYmxlCisjIGNvbnN0cnVjdGlvbiBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBnbG9iYWwgdmFyaWFibGVzLiAgVXNlcnMgc2hvdWxkbid0CisjIG5vdGljZSB1bmxlc3MgdGhleSBhcmUgdHJ5aW5nIHRvIGRlZmluZSBtdWx0aXBsZSBwYXJzZXJzIGF0IHRoZSBzYW1lCisjIHRpbWUgdXNpbmcgdGhyZWFkcyAoaW4gd2hpY2ggY2FzZSB0aGV5IHNob3VsZCBoYXZlIHRoZWlyIGhlYWQgZXhhbWluZWQpLgorIworIyBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGJvdGggU0xSIGFuZCBMQUxSKDEpIHBhcnNpbmcuICBMQUxSKDEpCisjIHN1cHBvcnQgd2FzIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgYnkgRWxpYXMgSW91cCAoZXppb3VwQGFsdW1uaS51Y2hpY2Fnby5lZHUpLAorIyB1c2luZyB0aGUgYWxnb3JpdGhtIGZvdW5kIGluIEFobywgU2V0aGksIGFuZCBVbGxtYW4gIkNvbXBpbGVyczogUHJpbmNpcGxlcywKKyMgVGVjaG5pcXVlcywgYW5kIFRvb2xzIiAoVGhlIERyYWdvbiBCb29rKS4gIExBTFIoMSkgaGFzIHNpbmNlIGJlZW4gcmVwbGFjZWQKKyMgYnkgdGhlIG1vcmUgZWZmaWNpZW50IERlUmVtZXIgYW5kIFBlbm5lbGxvIGFsZ29yaXRobS4KKyMKKyMgOjo6Ojo6OjogV0FSTklORyA6Ojo6Ojo6CisjCisjIENvbnN0cnVjdGlvbiBvZiBMUiBwYXJzaW5nIHRhYmxlcyBpcyBmYWlybHkgY29tcGxpY2F0ZWQgYW5kIGV4cGVuc2l2ZS4KKyMgVG8gbWFrZSB0aGlzIG1vZHVsZSBydW4gZmFzdCwgYSAqTE9UKiBvZiB3b3JrIGhhcyBiZWVuIHB1dCBpbnRvCisjIG9wdGltaXphdGlvbi0tLW9mdGVuIGF0IHRoZSBleHBlbnNpdmUgb2YgcmVhZGFiaWxpdHkgYW5kIHdoYXQgbWlnaHQKKyMgY29uc2lkZXIgdG8gYmUgZ29vZCBQeXRob24gImNvZGluZyBzdHlsZS4iICAgTW9kaWZ5IHRoZSBjb2RlIGF0IHlvdXIKKyMgb3duIHJpc2shCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX192ZXJzaW9uX18gICAgPSAiMy4zIgorX190YWJ2ZXJzaW9uX18gPSAiMy4yIiAgICAgICAjIFRhYmxlIHZlcnNpb24KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgPT09IFVzZXIgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgPT09CisjCisjIENoYW5nZSB0aGVzZSB0byBtb2RpZnkgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgeWFjYyAoaWYgeW91IHdpc2gpCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworeWFjY2RlYnVnICAgPSAwICAgICAgICAgICAgICAgICMgRGVidWdnaW5nIG1vZGUuICBJZiBzZXQsIHlhY2MgZ2VuZXJhdGVzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgJ3BhcnNlci5vdXQnIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisKK2RlYnVnX2ZpbGUgID0gJ3BhcnNlci5vdXQnICAgICAjIERlZmF1bHQgbmFtZSBvZiB0aGUgZGVidWdnaW5nIGZpbGUKK3RhYl9tb2R1bGUgID0gJ3BhcnNldGFiJyAgICAgICAjIERlZmF1bHQgbmFtZSBvZiB0aGUgdGFibGUgbW9kdWxlCitkZWZhdWx0X2xyICA9ICdMQUxSJyAgICAgICAgICAgIyBEZWZhdWx0IExSIHRhYmxlIGdlbmVyYXRpb24gbWV0aG9kCisKK2Vycm9yX2NvdW50ID0gMyAgICAgICAgICAgICAgICAjIE51bWJlciBvZiBzeW1ib2xzIHRoYXQgbXVzdCBiZSBzaGlmdGVkIHRvIGxlYXZlIHJlY292ZXJ5IG1vZGUKKworeWFjY2RldmVsICAgPSAwICAgICAgICAgICAgICAgICMgU2V0IHRvIFRydWUgaWYgZGV2ZWxvcGluZyB5YWNjLiAgVGhpcyB0dXJucyBvZmYgb3B0aW1pemVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbXBsZW1lbnRhdGlvbnMgb2YgY2VydGFpbiBmdW5jdGlvbnMuCisKK3Jlc3VsdGxpbWl0ID0gNDAgICAgICAgICAgICAgICAjIFNpemUgbGltaXQgb2YgcmVzdWx0cyB3aGVuIHJ1bm5pbmcgaW4gZGVidWcgbW9kZS4KKworcGlja2xlX3Byb3RvY29sID0gMCAgICAgICAgICAgICMgUHJvdG9jb2wgdG8gdXNlIHdoZW4gd3JpdGluZyBwaWNrbGUgZmlsZXMKKworaW1wb3J0IHJlLCB0eXBlcywgc3lzLCBvcy5wYXRoCisKKyMgQ29tcGF0aWJpbGl0eSBmdW5jdGlvbiBmb3IgcHl0aG9uIDIuNi8zLjAKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgIGRlZiBmdW5jX2NvZGUoZik6CisgICAgICAgIHJldHVybiBmLmZ1bmNfY29kZQorZWxzZToKKyAgICBkZWYgZnVuY19jb2RlKGYpOgorICAgICAgICByZXR1cm4gZi5fX2NvZGVfXworCisjIENvbXBhdGliaWxpdHkKK3RyeToKKyAgICBNQVhJTlQgPSBzeXMubWF4aW50CitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgTUFYSU5UID0gc3lzLm1heHNpemUKKworIyBQeXRob24gMi54LzMuMCBjb21wYXRpYmlsaXR5LgorZGVmIGxvYWRfcGx5X2xleCgpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICBpbXBvcnQgbGV4CisgICAgZWxzZToKKyAgICAgICAgaW1wb3J0IHBseS5sZXggYXMgbGV4CisgICAgcmV0dXJuIGxleAorCisjIFRoaXMgb2JqZWN0IGlzIGEgc3RhbmQtaW4gZm9yIGEgbG9nZ2luZyBvYmplY3QgY3JlYXRlZCBieSB0aGUgCisjIGxvZ2dpbmcgbW9kdWxlLiAgIFBMWSB3aWxsIHVzZSB0aGlzIGJ5IGRlZmF1bHQgdG8gY3JlYXRlIHRoaW5ncworIyBzdWNoIGFzIHRoZSBwYXJzZXIub3V0IGZpbGUuICBJZiBhIHVzZXIgd2FudHMgbW9yZSBkZXRhaWxlZAorIyBpbmZvcm1hdGlvbiwgdGhleSBjYW4gY3JlYXRlIHRoZWlyIG93biBsb2dnaW5nIG9iamVjdCBhbmQgcGFzcworIyBpdCBpbnRvIFBMWS4KKworY2xhc3MgUGx5TG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsZik6CisgICAgICAgIHNlbGYuZiA9IGYKKyAgICBkZWYgZGVidWcoc2VsZixtc2csKmFyZ3MsKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmYud3JpdGUoKG1zZyAlIGFyZ3MpICsgIlxuIikKKyAgICBpbmZvICAgICA9IGRlYnVnCisKKyAgICBkZWYgd2FybmluZyhzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgiV0FSTklORzogIisgKG1zZyAlIGFyZ3MpICsgIlxuIikKKworICAgIGRlZiBlcnJvcihzZWxmLG1zZywqYXJncywqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZi53cml0ZSgiRVJST1I6ICIgKyAobXNnICUgYXJncykgKyAiXG4iKQorCisgICAgY3JpdGljYWwgPSBkZWJ1ZworCisjIE51bGwgbG9nZ2VyIGlzIHVzZWQgd2hlbiBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkLiBEb2VzIG5vdGhpbmcuCitjbGFzcyBOdWxsTG9nZ2VyKG9iamVjdCk6CisgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZixuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgX19jYWxsX18oc2VsZiwqYXJncywqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIAorIyBFeGNlcHRpb24gcmFpc2VkIGZvciB5YWNjLXJlbGF0ZWQgZXJyb3JzCitjbGFzcyBZYWNjRXJyb3IoRXhjZXB0aW9uKTogICBwYXNzCisKKyMgRm9ybWF0IHRoZSByZXN1bHQgbWVzc2FnZSB0aGF0IHRoZSBwYXJzZXIgcHJvZHVjZXMgd2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUuCitkZWYgZm9ybWF0X3Jlc3VsdChyKToKKyAgICByZXByX3N0ciA9IHJlcHIocikKKyAgICBpZiAnXG4nIGluIHJlcHJfc3RyOiByZXByX3N0ciA9IHJlcHIocmVwcl9zdHIpCisgICAgaWYgbGVuKHJlcHJfc3RyKSA+IHJlc3VsdGxpbWl0OgorICAgICAgICByZXByX3N0ciA9IHJlcHJfc3RyWzpyZXN1bHRsaW1pdF0rIiAuLi4iCisgICAgcmVzdWx0ID0gIjwlcyBAIDB4JXg+ICglcykiICUgKHR5cGUocikuX19uYW1lX18saWQocikscmVwcl9zdHIpCisgICAgcmV0dXJuIHJlc3VsdAorCisKKyMgRm9ybWF0IHN0YWNrIGVudHJpZXMgd2hlbiB0aGUgcGFyc2VyIGlzIHJ1bm5pbmcgaW4gZGVidWcgbW9kZQorZGVmIGZvcm1hdF9zdGFja19lbnRyeShyKToKKyAgICByZXByX3N0ciA9IHJlcHIocikKKyAgICBpZiAnXG4nIGluIHJlcHJfc3RyOiByZXByX3N0ciA9IHJlcHIocmVwcl9zdHIpCisgICAgaWYgbGVuKHJlcHJfc3RyKSA8IDE2OgorICAgICAgICByZXR1cm4gcmVwcl9zdHIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIjwlcyBAIDB4JXg+IiAlICh0eXBlKHIpLl9fbmFtZV9fLGlkKHIpKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICA9PT0gIExSIFBhcnNpbmcgRW5naW5lID09PQorIworIyBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIHVzZWQgZm9yIHRoZSBMUiBwYXJzZXIgaXRzZWxmLiAgVGhlc2UgYXJlIG5vdAorIyB1c2VkIGR1cmluZyB0YWJsZSBjb25zdHJ1Y3Rpb24gYW5kIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgYWN0dWFsIExSCisjIHRhYmxlIGdlbmVyYXRpb24gYWxnb3JpdGhtCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaG9sZCBub24tdGVybWluYWwgZ3JhbW1hciBzeW1ib2xzIGR1cmluZyBwYXJzaW5nLgorIyBJdCBub3JtYWxseSBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHNldDoKKyMgICAgICAgIC50eXBlICAgICAgID0gR3JhbW1hciBzeW1ib2wgdHlwZQorIyAgICAgICAgLnZhbHVlICAgICAgPSBTeW1ib2wgdmFsdWUKKyMgICAgICAgIC5saW5lbm8gICAgID0gU3RhcnRpbmcgbGluZSBudW1iZXIKKyMgICAgICAgIC5lbmRsaW5lbm8gID0gRW5kaW5nIGxpbmUgbnVtYmVyIChvcHRpb25hbCwgc2V0IGF1dG9tYXRpY2FsbHkpCisjICAgICAgICAubGV4cG9zICAgICA9IFN0YXJ0aW5nIGxleCBwb3NpdGlvbgorIyAgICAgICAgLmVuZGxleHBvcyAgPSBFbmRpbmcgbGV4IHBvc2l0aW9uIChvcHRpb25hbCwgc2V0IGF1dG9tYXRpY2FsbHkpCisKK2NsYXNzIFlhY2NTeW1ib2w6CisgICAgZGVmIF9fc3RyX18oc2VsZik6ICAgIHJldHVybiBzZWxmLnR5cGUKKyAgICBkZWYgX19yZXByX18oc2VsZik6ICAgcmV0dXJuIHN0cihzZWxmKQorCisjIFRoaXMgY2xhc3MgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgb2JqZWN0cyBhY3R1YWxseSBwYXNzZWQgdG8gZWFjaAorIyBncmFtbWFyIHJ1bGUuICAgSW5kZXggbG9va3VwIGFuZCBhc3NpZ25tZW50IGFjdHVhbGx5IGFzc2lnbiB0aGUKKyMgLnZhbHVlIGF0dHJpYnV0ZSBvZiB0aGUgdW5kZXJseWluZyBZYWNjU3ltYm9sIG9iamVjdC4KKyMgVGhlIGxpbmVubygpIG1ldGhvZCByZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiBhIGdpdmVuCisjIGl0ZW0gKG9yIDAgaWYgbm90IGRlZmluZWQpLiAgIFRoZSBsaW5lc3BhbigpIG1ldGhvZCByZXR1cm5zCisjIGEgdHVwbGUgb2YgKHN0YXJ0bGluZSxlbmRsaW5lKSByZXByZXNlbnRpbmcgdGhlIHJhbmdlIG9mIGxpbmVzCisjIGZvciBhIHN5bWJvbC4gIFRoZSBsZXhzcGFuKCkgbWV0aG9kIHJldHVybnMgYSB0dXBsZSAobGV4cG9zLGVuZGxleHBvcykKKyMgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBvZiBwb3NpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhIHN5bWJvbC4KKworY2xhc3MgWWFjY1Byb2R1Y3Rpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYscyxzdGFjaz1Ob25lKToKKyAgICAgICAgc2VsZi5zbGljZSA9IHMKKyAgICAgICAgc2VsZi5zdGFjayA9IHN0YWNrCisgICAgICAgIHNlbGYubGV4ZXIgPSBOb25lCisgICAgICAgIHNlbGYucGFyc2VyPSBOb25lCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsbik6CisgICAgICAgIGlmIG4gPj0gMDogcmV0dXJuIHNlbGYuc2xpY2Vbbl0udmFsdWUKKyAgICAgICAgZWxzZTogcmV0dXJuIHNlbGYuc3RhY2tbbl0udmFsdWUKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLG4sdik6CisgICAgICAgIHNlbGYuc2xpY2Vbbl0udmFsdWUgPSB2CisKKyAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsaSxqKToKKyAgICAgICAgcmV0dXJuIFtzLnZhbHVlIGZvciBzIGluIHNlbGYuc2xpY2VbaTpqXV0KKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuc2xpY2UpCisKKyAgICBkZWYgbGluZW5vKHNlbGYsbik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImxpbmVubyIsMCkKKworICAgIGRlZiBzZXRfbGluZW5vKHNlbGYsbixsaW5lbm8pOgorICAgICAgICBzZWxmLnNsaWNlW25dLmxpbmVubyA9IGxpbmVubworCisgICAgZGVmIGxpbmVzcGFuKHNlbGYsbik6CisgICAgICAgIHN0YXJ0bGluZSA9IGdldGF0dHIoc2VsZi5zbGljZVtuXSwibGluZW5vIiwwKQorICAgICAgICBlbmRsaW5lID0gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJlbmRsaW5lbm8iLHN0YXJ0bGluZSkKKyAgICAgICAgcmV0dXJuIHN0YXJ0bGluZSxlbmRsaW5lCisKKyAgICBkZWYgbGV4cG9zKHNlbGYsbik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc2xpY2Vbbl0sImxleHBvcyIsMCkKKworICAgIGRlZiBsZXhzcGFuKHNlbGYsbik6CisgICAgICAgIHN0YXJ0cG9zID0gZ2V0YXR0cihzZWxmLnNsaWNlW25dLCJsZXhwb3MiLDApCisgICAgICAgIGVuZHBvcyA9IGdldGF0dHIoc2VsZi5zbGljZVtuXSwiZW5kbGV4cG9zIixzdGFydHBvcykKKyAgICAgICAgcmV0dXJuIHN0YXJ0cG9zLGVuZHBvcworCisgICAgZGVmIGVycm9yKHNlbGYpOgorICAgICAgIHJhaXNlIFN5bnRheEVycm9yCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBMUlBhcnNlciA9PQorIworIyBUaGUgTFIgUGFyc2luZyBlbmdpbmUuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIExSUGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGxydGFiLGVycm9yZik6CisgICAgICAgIHNlbGYucHJvZHVjdGlvbnMgPSBscnRhYi5scl9wcm9kdWN0aW9ucworICAgICAgICBzZWxmLmFjdGlvbiAgICAgID0gbHJ0YWIubHJfYWN0aW9uCisgICAgICAgIHNlbGYuZ290byAgICAgICAgPSBscnRhYi5scl9nb3RvCisgICAgICAgIHNlbGYuZXJyb3JmdW5jICAgPSBlcnJvcmYKKworICAgIGRlZiBlcnJvayhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcm9rICAgICA9IDEKKworICAgIGRlZiByZXN0YXJ0KHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5zdGF0ZXN0YWNrWzpdCisgICAgICAgIGRlbCBzZWxmLnN5bXN0YWNrWzpdCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICckZW5kJworICAgICAgICBzZWxmLnN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgIHNlbGYuc3RhdGVzdGFjay5hcHBlbmQoMCkKKworICAgIGRlZiBwYXJzZShzZWxmLGlucHV0PU5vbmUsbGV4ZXI9Tm9uZSxkZWJ1Zz0wLHRyYWNraW5nPTAsdG9rZW5mdW5jPU5vbmUpOgorICAgICAgICBpZiBkZWJ1ZyBvciB5YWNjZGV2ZWw6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlYnVnLGludCk6CisgICAgICAgICAgICAgICAgZGVidWcgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlZGVidWcoaW5wdXQsbGV4ZXIsZGVidWcsdHJhY2tpbmcsdG9rZW5mdW5jKQorICAgICAgICBlbGlmIHRyYWNraW5nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VvcHQoaW5wdXQsbGV4ZXIsZGVidWcsdHJhY2tpbmcsdG9rZW5mdW5jKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VvcHRfbm90cmFjayhpbnB1dCxsZXhlcixkZWJ1Zyx0cmFja2luZyx0b2tlbmZ1bmMpCisgICAgICAgIAorCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICMgcGFyc2VkZWJ1ZygpLgorICAgICMKKyAgICAjIFRoaXMgaXMgdGhlIGRlYnVnZ2luZyBlbmFibGVkIHZlcnNpb24gb2YgcGFyc2UoKS4gIEFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlCisgICAgIyBwYXJzaW5nIGVuZ2luZSBzaG91bGQgYmUgbWFkZSBoZXJlLiAgIEZvciB0aGUgbm9uLWRlYnVnZ2luZyB2ZXJzaW9uLAorICAgICMgY29weSB0aGlzIGNvZGUgdG8gYSBtZXRob2QgcGFyc2VvcHQoKSBhbmQgZGVsZXRlIGFsbCBvZiB0aGUgc2VjdGlvbnMKKyAgICAjIGVuY2xvc2VkIGluOgorICAgICMKKyAgICAjICAgICAgIy0tISBERUJVRworICAgICMgICAgICBzdGF0ZW1lbnRzCisgICAgIyAgICAgICMtLSEgREVCVUcKKyAgICAjCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgZGVmIHBhcnNlZGVidWcoc2VsZixpbnB1dD1Ob25lLGxleGVyPU5vbmUsZGVidWc9Tm9uZSx0cmFja2luZz0wLHRva2VuZnVuYz1Ob25lKToKKyAgICAgICAgbG9va2FoZWFkID0gTm9uZSAgICAgICAgICAgICAgICAgIyBDdXJyZW50IGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgbG9va2FoZWFkc3RhY2sgPSBbIF0gICAgICAgICAgICAgIyBTdGFjayBvZiBsb29rYWhlYWQgc3ltYm9scworICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3Rpb24gICAgICAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBhY3Rpb24gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgZ290byAgICA9IHNlbGYuZ290byAgICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gZ290byB0YWJsZSAodG8gYXZvaWQgbG9va3VwIG9uIHNlbGYuKQorICAgICAgICBwcm9kICAgID0gc2VsZi5wcm9kdWN0aW9ucyAgICAgICAjIExvY2FsIHJlZmVyZW5jZSB0byBwcm9kdWN0aW9uIGxpc3QgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHNsaWNlICA9IFlhY2NQcm9kdWN0aW9uKE5vbmUpICAgIyBQcm9kdWN0aW9uIG9iamVjdCBwYXNzZWQgdG8gZ3JhbW1hciBydWxlcworICAgICAgICBlcnJvcmNvdW50ID0gMCAgICAgICAgICAgICAgICAgICAjIFVzZWQgZHVyaW5nIGVycm9yIHJlY292ZXJ5IAorCisgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgIGRlYnVnLmluZm8oIlBMWTogUEFSU0UgREVCVUcgU1RBUlQiKQorICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICMgSWYgbm8gbGV4ZXIgd2FzIGdpdmVuLCB3ZSB3aWxsIHRyeSB0byB1c2UgdGhlIGxleCBtb2R1bGUKKyAgICAgICAgaWYgbm90IGxleGVyOgorICAgICAgICAgICAgbGV4ID0gbG9hZF9wbHlfbGV4KCkKKyAgICAgICAgICAgIGxleGVyID0gbGV4LmxleGVyCisKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxleGVyIGFuZCBwYXJzZXIgb2JqZWN0cyBvbiBwc2xpY2UKKyAgICAgICAgcHNsaWNlLmxleGVyID0gbGV4ZXIKKyAgICAgICAgcHNsaWNlLnBhcnNlciA9IHNlbGYKKworICAgICAgICAjIElmIGlucHV0IHdhcyBzdXBwbGllZCwgcGFzcyB0byBsZXhlcgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxleGVyLmlucHV0KGlucHV0KQorCisgICAgICAgIGlmIHRva2VuZnVuYyBpcyBOb25lOgorICAgICAgICAgICAjIFRva2VuaXplIGZ1bmN0aW9uCisgICAgICAgICAgIGdldF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIGdldF90b2tlbiA9IHRva2VuZnVuYworCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBhbmQgc3ltYm9sIHN0YWNrcworCisgICAgICAgIHN0YXRlc3RhY2sgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBwYXJzaW5nIHN0YXRlcworICAgICAgICBzZWxmLnN0YXRlc3RhY2sgPSBzdGF0ZXN0YWNrCisgICAgICAgIHN5bXN0YWNrICAgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgc2VsZi5zeW1zdGFjayA9IHN5bXN0YWNrCisKKyAgICAgICAgcHNsaWNlLnN0YWNrID0gc3ltc3RhY2sgICAgICAgICAjIFB1dCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBlcnJ0b2tlbiAgID0gTm9uZSAgICAgICAgICAgICAgICMgRXJyIHRva2VuCisKKyAgICAgICAgIyBUaGUgc3RhcnQgc3RhdGUgaXMgYXNzdW1lZCB0byBiZSAoMCwkZW5kKQorCisgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKDApCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICIkZW5kIgorICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IHN5bWJvbCBvbiB0aGUgaW5wdXQuICBJZiBhIGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBzZXQsIHdlIGp1c3QgdXNlIHRoYXQuIE90aGVyd2lzZSwgd2UnbGwgcHVsbAorICAgICAgICAgICAgIyB0aGUgbmV4dCB0b2tlbiBvZmYgb2YgdGhlIGxvb2thaGVhZHN0YWNrIG9yIGZyb20gdGhlIGxleGVyCisKKyAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICBkZWJ1Zy5kZWJ1ZygnJykKKyAgICAgICAgICAgIGRlYnVnLmRlYnVnKCdTdGF0ZSAgOiAlcycsIHN0YXRlKQorICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbG9va2FoZWFkc3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGdldF90b2tlbigpICAgICAjIEdldCB0aGUgbmV4dCB0b2tlbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IGxvb2thaGVhZHN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZDoKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZC50eXBlID0gIiRlbmQiCisKKyAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICBkZWJ1Zy5kZWJ1ZygnU3RhY2sgIDogJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgKCIlcyAuICVzIiAlICgiICIuam9pbihbeHgudHlwZSBmb3IgeHggaW4gc3ltc3RhY2tdWzE6XSksIHN0cihsb29rYWhlYWQpKSkubHN0cmlwKCkpCisgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICAjIENoZWNrIHRoZSBhY3Rpb24gdGFibGUKKyAgICAgICAgICAgIGx0eXBlID0gbG9va2FoZWFkLnR5cGUKKyAgICAgICAgICAgIHQgPSBhY3Rpb25zW3N0YXRlXS5nZXQobHR5cGUpCisKKyAgICAgICAgICAgIGlmIHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgdCA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgc2hpZnQgYSBzeW1ib2wgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgZGVidWcuZGVidWcoIkFjdGlvbiA6IFNoaWZ0IGFuZCBnb3RvIHN0YXRlICVzIiwgdCkKKyAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKworICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgIyBEZWNyZWFzZSBlcnJvciBjb3VudCBvbiBzdWNjZXNzZnVsIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQ6IGVycm9yY291bnQgLT0xCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiB0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgIyByZWR1Y2UgYSBzeW1ib2wgb24gdGhlIHN0YWNrLCBlbWl0IGEgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICBwID0gcHJvZFstdF0KKyAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBwLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcGxlbiAgPSBwLmxlbgorCisgICAgICAgICAgICAgICAgICAgICMgR2V0IHByb2R1Y3Rpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgc3ltID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gcG5hbWUgICAgICAgIyBQcm9kdWN0aW9uIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgc3ltLnZhbHVlID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGlmIHBsZW46CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJBY3Rpb24gOiBSZWR1Y2UgcnVsZSBbJXNdIHdpdGggJXMgYW5kIGdvdG8gc3RhdGUgJWQiLCBwLnN0ciwgIlsiKyIsIi5qb2luKFtmb3JtYXRfc3RhY2tfZW50cnkoX3YudmFsdWUpIGZvciBfdiBpbiBzeW1zdGFja1stcGxlbjpdXSkrIl0iLC10KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiQWN0aW9uIDogUmVkdWNlIHJ1bGUgWyVzXSB3aXRoICVzIGFuZCBnb3RvIHN0YXRlICVkIiwgcC5zdHIsIFtdLC10KQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBzeW1zdGFja1stcGxlbi0xOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdbMF0gPSBzeW0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0YXJnWzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gdDEubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gdDEubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHRhcmdbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGluZW5vID0gZ2V0YXR0cih0MSwiZW5kbGluZW5vIix0MS5saW5lbm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGV4cG9zID0gZ2V0YXR0cih0MSwiZW5kbGV4cG9zIix0MS5sZXhwb3MpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlbG93IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN5bXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3RhdGVzdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5pbmZvKCJSZXN1bHQgOiAlcyIsIGZvcm1hdF9yZXN1bHQocHNsaWNlWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxpbmVubyA9IGxleGVyLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLmxleHBvcyA9IGxleGVyLmxleHBvcworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZyA9IFsgc3ltIF0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWJvdmUgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIlJlc3VsdCA6ICVzIiwgZm9ybWF0X3Jlc3VsdChwc2xpY2VbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgICAgICAgICAgICAgaWYgdCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdldGF0dHIobiwidmFsdWUiLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgICAgIGRlYnVnLmluZm8oIkRvbmUgICA6IFJldHVybmluZyAlcyIsIGZvcm1hdF9yZXN1bHQocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgZGVidWcuaW5mbygiUExZOiBQQVJTRSBERUJVRyBFTkQiKQorICAgICAgICAgICAgICAgICAgICAjIC0tISBERUJVRworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGlmIHQgPT0gTm9uZToKKworICAgICAgICAgICAgICAgICMgLS0hIERFQlVHCisgICAgICAgICAgICAgICAgZGVidWcuZXJyb3IoJ0Vycm9yICA6ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiVzIC4gJXMiICUgKCIgIi5qb2luKFt4eC50eXBlIGZvciB4eCBpbiBzeW1zdGFja11bMTpdKSwgc3RyKGxvb2thaGVhZCkpKS5sc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAjIC0tISBERUJVRworCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHNvbWUga2luZCBvZiBwYXJzaW5nIGVycm9yIGhlcmUuICBUbyBoYW5kbGUKKyAgICAgICAgICAgICAgICAjIHRoaXMsIHdlIGFyZSBnb2luZyB0byBwdXNoIHRoZSBjdXJyZW50IHRva2VuIG9udG8KKyAgICAgICAgICAgICAgICAjIHRoZSB0b2tlbnN0YWNrIGFuZCByZXBsYWNlIGl0IHdpdGggYW4gJ2Vycm9yJyB0b2tlbi4KKyAgICAgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBhbnkgc3luY2hyb25pemF0aW9uIHJ1bGVzLCB0aGV5IG1heQorICAgICAgICAgICAgICAgICMgY2F0Y2ggaXQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSW4gYWRkaXRpb24gdG8gcHVzaGluZyB0aGUgZXJyb3IgdG9rZW4sIHdlIGNhbGwgY2FsbAorICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgZGVmaW5lZCBwX2Vycm9yKCkgZnVuY3Rpb24gaWYgdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAjIGZpcnN0IHN5bnRheCBlcnJvci4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYKKyAgICAgICAgICAgICAgICAjIGVycm9yY291bnQgPT0gMC4KKyAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50ID09IDAgb3Igc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbi50eXBlID09ICIkZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZSAgICAgICAgICAgICAgICMgRW5kIG9mIGZpbGUhCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIGVycm9rLHRva2VuLHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9rID0gc2VsZi5lcnJvayAgICAgICAgIyBTZXQgc29tZSBzcGVjaWFsIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0X3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0YXJ0ID0gc2VsZi5yZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbiBhbmQgbm90IGhhc2F0dHIoZXJydG9rZW4sJ2xleGVyJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4ubGV4ZXIgPSBsZXhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gc2VsZi5lcnJvcmZ1bmMoZXJydG9rZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZXJyb2ssIHRva2VuLCByZXN0YXJ0ICAgIyBEZWxldGUgc3BlY2lhbCBmdW5jdGlvbnMKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBtdXN0IGhhdmUgZG9uZSBzb21lIGtpbmQgb2YgcGFuaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1vZGUgcmVjb3Zlcnkgb24gdGhlaXIgb3duLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5lZCB0b2tlbiBpcyB0aGUgbmV4dCBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0b2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlcnJ0b2tlbiwibGluZW5vIik6IGxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiBsaW5lbm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IgYXQgbGluZSAlZCwgdG9rZW49JXNcbiIgJSAobGluZW5vLCBlcnJ0b2tlbi50eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IsIHRva2VuPSVzIiAlIGVycnRva2VuLnR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFBhcnNlIGVycm9yIGluIGlucHV0LiBFT0ZcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKworICAgICAgICAgICAgICAgICMgY2FzZSAxOiAgdGhlIHN0YXRlc3RhY2sgb25seSBoYXMgMSBlbnRyeSBvbiBpdC4gIElmIHdlJ3JlIGluIHRoaXMgc3RhdGUsIHRoZQorICAgICAgICAgICAgICAgICMgZW50aXJlIHBhcnNlIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGFuZCB3ZSdyZSBjb21wbGV0ZWx5IGhvc2VkLiAgIFRoZSB0b2tlbiBpcworICAgICAgICAgICAgICAgICMgZGlzY2FyZGVkIGFuZCB3ZSBqdXN0IGtlZXAgZ29pbmcuCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdGVzdGFjaykgPD0gMSBhbmQgbG9va2FoZWFkLnR5cGUgIT0gIiRlbmQiOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgIyBOdWtlIHRoZSBwdXNoYmFjayBzdGFjaworICAgICAgICAgICAgICAgICAgICBkZWwgbG9va2FoZWFkc3RhY2tbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgY2FzZSAyOiB0aGUgc3RhdGVzdGFjayBoYXMgYSBjb3VwbGUgb2YgZW50cmllcyBvbiBpdCwgYnV0IHdlJ3JlCisgICAgICAgICAgICAgICAgIyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBudWtlIHRoZSB0b3AgZW50cnkgYW5kIGdlbmVyYXRlIGFuIGVycm9yIHRva2VuCisKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IG51a2luZyBlbnRyaWVzIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlID09ICIkZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBXZSdyZSByZWFsbHkgaG9zZWQgaGVyZS4gQmFpbCBvdXQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3ltLnR5cGUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gRXJyb3IgaXMgb24gdG9wIG9mIHN0YWNrLCB3ZSdsbCBqdXN0IG51a2UgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltYm9sIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobG9va2FoZWFkLCJsaW5lbm8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQubGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0gICAgICAgIyBQb3RlbnRpYWwgYnVnIGZpeAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBDYWxsIGFuIGVycm9yIGZ1bmN0aW9uIGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigieWFjYzogaW50ZXJuYWwgcGFyc2VyIGVycm9yISEhXG4iKQorCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICMgcGFyc2VvcHQoKS4KKyAgICAjCisgICAgIyBPcHRpbWl6ZWQgdmVyc2lvbiBvZiBwYXJzZSgpIG1ldGhvZC4gIERPIE5PVCBFRElUIFRISVMgQ09ERSBESVJFQ1RMWS4KKyAgICAjIEVkaXQgdGhlIGRlYnVnIHZlcnNpb24gYWJvdmUsIHRoZW4gY29weSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWV0aG9kCisgICAgIyBiZWxvdyB3aGlsZSByZW1vdmluZyAjLS0hIERFQlVHIHNlY3Rpb25zLgorICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworCisgICAgZGVmIHBhcnNlb3B0KHNlbGYsaW5wdXQ9Tm9uZSxsZXhlcj1Ob25lLGRlYnVnPTAsdHJhY2tpbmc9MCx0b2tlbmZ1bmM9Tm9uZSk6CisgICAgICAgIGxvb2thaGVhZCA9IE5vbmUgICAgICAgICAgICAgICAgICMgQ3VycmVudCBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgIGxvb2thaGVhZHN0YWNrID0gWyBdICAgICAgICAgICAgICMgU3RhY2sgb2YgbG9va2FoZWFkIHN5bWJvbHMKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9uICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gYWN0aW9uIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIGdvdG8gICAgPSBzZWxmLmdvdG8gICAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGdvdG8gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHJvZCAgICA9IHNlbGYucHJvZHVjdGlvbnMgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gcHJvZHVjdGlvbiBsaXN0ICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHBzbGljZSAgPSBZYWNjUHJvZHVjdGlvbihOb25lKSAgICMgUHJvZHVjdGlvbiBvYmplY3QgcGFzc2VkIHRvIGdyYW1tYXIgcnVsZXMKKyAgICAgICAgZXJyb3Jjb3VudCA9IDAgICAgICAgICAgICAgICAgICAgIyBVc2VkIGR1cmluZyBlcnJvciByZWNvdmVyeSAKKworICAgICAgICAjIElmIG5vIGxleGVyIHdhcyBnaXZlbiwgd2Ugd2lsbCB0cnkgdG8gdXNlIHRoZSBsZXggbW9kdWxlCisgICAgICAgIGlmIG5vdCBsZXhlcjoKKyAgICAgICAgICAgIGxleCA9IGxvYWRfcGx5X2xleCgpCisgICAgICAgICAgICBsZXhlciA9IGxleC5sZXhlcgorICAgICAgICAKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxleGVyIGFuZCBwYXJzZXIgb2JqZWN0cyBvbiBwc2xpY2UKKyAgICAgICAgcHNsaWNlLmxleGVyID0gbGV4ZXIKKyAgICAgICAgcHNsaWNlLnBhcnNlciA9IHNlbGYKKworICAgICAgICAjIElmIGlucHV0IHdhcyBzdXBwbGllZCwgcGFzcyB0byBsZXhlcgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxleGVyLmlucHV0KGlucHV0KQorCisgICAgICAgIGlmIHRva2VuZnVuYyBpcyBOb25lOgorICAgICAgICAgICAjIFRva2VuaXplIGZ1bmN0aW9uCisgICAgICAgICAgIGdldF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIGdldF90b2tlbiA9IHRva2VuZnVuYworCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBhbmQgc3ltYm9sIHN0YWNrcworCisgICAgICAgIHN0YXRlc3RhY2sgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBwYXJzaW5nIHN0YXRlcworICAgICAgICBzZWxmLnN0YXRlc3RhY2sgPSBzdGF0ZXN0YWNrCisgICAgICAgIHN5bXN0YWNrICAgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgc2VsZi5zeW1zdGFjayA9IHN5bXN0YWNrCisKKyAgICAgICAgcHNsaWNlLnN0YWNrID0gc3ltc3RhY2sgICAgICAgICAjIFB1dCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBlcnJ0b2tlbiAgID0gTm9uZSAgICAgICAgICAgICAgICMgRXJyIHRva2VuCisKKyAgICAgICAgIyBUaGUgc3RhcnQgc3RhdGUgaXMgYXNzdW1lZCB0byBiZSAoMCwkZW5kKQorCisgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKDApCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICckZW5kJworICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IHN5bWJvbCBvbiB0aGUgaW5wdXQuICBJZiBhIGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBzZXQsIHdlIGp1c3QgdXNlIHRoYXQuIE90aGVyd2lzZSwgd2UnbGwgcHVsbAorICAgICAgICAgICAgIyB0aGUgbmV4dCB0b2tlbiBvZmYgb2YgdGhlIGxvb2thaGVhZHN0YWNrIG9yIGZyb20gdGhlIGxleGVyCisKKyAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZHN0YWNrOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBnZXRfdG9rZW4oKSAgICAgIyBHZXQgdGhlIG5leHQgdG9rZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBsb29rYWhlYWRzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9ICckZW5kJworCisgICAgICAgICAgICAjIENoZWNrIHRoZSBhY3Rpb24gdGFibGUKKyAgICAgICAgICAgIGx0eXBlID0gbG9va2FoZWFkLnR5cGUKKyAgICAgICAgICAgIHQgPSBhY3Rpb25zW3N0YXRlXS5nZXQobHR5cGUpCisKKyAgICAgICAgICAgIGlmIHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgdCA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgc2hpZnQgYSBzeW1ib2wgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdAorCisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICAjIERlY3JlYXNlIGVycm9yIGNvdW50IG9uIHN1Y2Nlc3NmdWwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudDogZXJyb3Jjb3VudCAtPTEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHQgPCAwOgorICAgICAgICAgICAgICAgICAgICAjIHJlZHVjZSBhIHN5bWJvbCBvbiB0aGUgc3RhY2ssIGVtaXQgYSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9kWy10XQorICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IHAubmFtZQorICAgICAgICAgICAgICAgICAgICBwbGVuICA9IHAubGVuCisKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgcHJvZHVjdGlvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSBwbmFtZSAgICAgICAjIFByb2R1Y3Rpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICBzeW0udmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBzeW1zdGFja1stcGxlbi0xOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdbMF0gPSBzeW0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAtLSEgVFJBQ0tJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRyYWNraW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0YXJnWzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gdDEubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gdDEubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHRhcmdbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGluZW5vID0gZ2V0YXR0cih0MSwiZW5kbGluZW5vIix0MS5saW5lbm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0uZW5kbGV4cG9zID0gZ2V0YXR0cih0MSwiZW5kbGV4cG9zIix0MS5sZXhwb3MpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgLS0hIFRSQUNLSU5HCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlbG93IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN5bXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3RhdGVzdGFja1stcGxlbjpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgIAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHJhY2tpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGluZW5vID0gbGV4ZXIubGluZW5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0ubGV4cG9zID0gbGV4ZXIubGV4cG9zCisgICAgICAgICAgICAgICAgICAgICAgICAjIC0tISBUUkFDS0lORworCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnID0gWyBzeW0gXQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb2RlIGVuY2xvc2VkIGluIHRoaXMgc2VjdGlvbiBpcyBkdXBsaWNhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhYm92ZSBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gIE1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2VzIGdldCBtYWRlIGluIGJvdGggbG9jYXRpb25zLgorCisgICAgICAgICAgICAgICAgICAgICAgICBwc2xpY2Uuc2xpY2UgPSB0YXJnCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGwgdGhlIGdyYW1tYXIgcnVsZSB3aXRoIG91ciBzcGVjaWFsIHNsaWNlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2FsbGFibGUocHNsaWNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChzeW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBnb3RvW3N0YXRlc3RhY2tbLTFdXVtwbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGFuIGVycm9yIHdhcyBzZXQuIEVudGVyIGVycm9yIHJlY292ZXJ5IHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gc3ltCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb3VudCA9IGVycm9yX2NvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgICAgICAgICAgICAgIGlmIHQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihuLCJ2YWx1ZSIsTm9uZSkKKworICAgICAgICAgICAgaWYgdCA9PSBOb25lOgorCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHNvbWUga2luZCBvZiBwYXJzaW5nIGVycm9yIGhlcmUuICBUbyBoYW5kbGUKKyAgICAgICAgICAgICAgICAjIHRoaXMsIHdlIGFyZSBnb2luZyB0byBwdXNoIHRoZSBjdXJyZW50IHRva2VuIG9udG8KKyAgICAgICAgICAgICAgICAjIHRoZSB0b2tlbnN0YWNrIGFuZCByZXBsYWNlIGl0IHdpdGggYW4gJ2Vycm9yJyB0b2tlbi4KKyAgICAgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBhbnkgc3luY2hyb25pemF0aW9uIHJ1bGVzLCB0aGV5IG1heQorICAgICAgICAgICAgICAgICMgY2F0Y2ggaXQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgSW4gYWRkaXRpb24gdG8gcHVzaGluZyB0aGUgZXJyb3IgdG9rZW4sIHdlIGNhbGwgY2FsbAorICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgZGVmaW5lZCBwX2Vycm9yKCkgZnVuY3Rpb24gaWYgdGhpcyBpcyB0aGUKKyAgICAgICAgICAgICAgICAjIGZpcnN0IHN5bnRheCBlcnJvci4gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYKKyAgICAgICAgICAgICAgICAjIGVycm9yY291bnQgPT0gMC4KKyAgICAgICAgICAgICAgICBpZiBlcnJvcmNvdW50ID09IDAgb3Igc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcm9rID0gMAorICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbi50eXBlID09ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZSAgICAgICAgICAgICAgICMgRW5kIG9mIGZpbGUhCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JmdW5jOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIGVycm9rLHRva2VuLHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9rID0gc2VsZi5lcnJvayAgICAgICAgIyBTZXQgc29tZSBzcGVjaWFsIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gZ2V0X3Rva2VuCisgICAgICAgICAgICAgICAgICAgICAgICByZXN0YXJ0ID0gc2VsZi5yZXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbiBhbmQgbm90IGhhc2F0dHIoZXJydG9rZW4sJ2xleGVyJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4ubGV4ZXIgPSBsZXhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gc2VsZi5lcnJvcmZ1bmMoZXJydG9rZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZXJyb2ssIHRva2VuLCByZXN0YXJ0ICAgIyBEZWxldGUgc3BlY2lhbCBmdW5jdGlvbnMKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcm9rOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBtdXN0IGhhdmUgZG9uZSBzb21lIGtpbmQgb2YgcGFuaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1vZGUgcmVjb3Zlcnkgb24gdGhlaXIgb3duLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5lZCB0b2tlbiBpcyB0aGUgbmV4dCBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSB0b2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJydG9rZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlcnJ0b2tlbiwibGluZW5vIik6IGxpbmVubyA9IGxvb2thaGVhZC5saW5lbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiBsaW5lbm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IgYXQgbGluZSAlZCwgdG9rZW49JXNcbiIgJSAobGluZW5vLCBlcnJ0b2tlbi50eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ5YWNjOiBTeW50YXggZXJyb3IsIHRva2VuPSVzIiAlIGVycnRva2VuLnR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFBhcnNlIGVycm9yIGluIGlucHV0LiBFT0ZcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKworICAgICAgICAgICAgICAgICMgY2FzZSAxOiAgdGhlIHN0YXRlc3RhY2sgb25seSBoYXMgMSBlbnRyeSBvbiBpdC4gIElmIHdlJ3JlIGluIHRoaXMgc3RhdGUsIHRoZQorICAgICAgICAgICAgICAgICMgZW50aXJlIHBhcnNlIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGFuZCB3ZSdyZSBjb21wbGV0ZWx5IGhvc2VkLiAgIFRoZSB0b2tlbiBpcworICAgICAgICAgICAgICAgICMgZGlzY2FyZGVkIGFuZCB3ZSBqdXN0IGtlZXAgZ29pbmcuCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdGVzdGFjaykgPD0gMSBhbmQgbG9va2FoZWFkLnR5cGUgIT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgIyBOdWtlIHRoZSBwdXNoYmFjayBzdGFjaworICAgICAgICAgICAgICAgICAgICBkZWwgbG9va2FoZWFkc3RhY2tbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgY2FzZSAyOiB0aGUgc3RhdGVzdGFjayBoYXMgYSBjb3VwbGUgb2YgZW50cmllcyBvbiBpdCwgYnV0IHdlJ3JlCisgICAgICAgICAgICAgICAgIyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBudWtlIHRoZSB0b3AgZW50cnkgYW5kIGdlbmVyYXRlIGFuIGVycm9yIHRva2VuCisKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IG51a2luZyBlbnRyaWVzIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlID09ICckZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBXZSdyZSByZWFsbHkgaG9zZWQgaGVyZS4gQmFpbCBvdXQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiBsb29rYWhlYWQudHlwZSAhPSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBzeW1zdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3ltLnR5cGUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gRXJyb3IgaXMgb24gdG9wIG9mIHN0YWNrLCB3ZSdsbCBqdXN0IG51a2UgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltYm9sIGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICB0LnR5cGUgPSAnZXJyb3InCisgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobG9va2FoZWFkLCJsaW5lbm8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQubGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICB0LnZhbHVlID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0gICAgICAgIyBQb3RlbnRpYWwgYnVnIGZpeAorCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBDYWxsIGFuIGVycm9yIGZ1bmN0aW9uIGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigieWFjYzogaW50ZXJuYWwgcGFyc2VyIGVycm9yISEhXG4iKQorCisgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICMgcGFyc2VvcHRfbm90cmFjaygpLgorICAgICMKKyAgICAjIE9wdGltaXplZCB2ZXJzaW9uIG9mIHBhcnNlb3B0KCkgd2l0aCBsaW5lIG51bWJlciB0cmFja2luZyByZW1vdmVkLiAKKyAgICAjIERPIE5PVCBFRElUIFRISVMgQ09ERSBESVJFQ1RMWS4gQ29weSB0aGUgb3B0aW1pemVkIHZlcnNpb24gYW5kIHJlbW92ZQorICAgICMgY29kZSBpbiB0aGUgIy0tISBUUkFDS0lORyBzZWN0aW9ucworICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKworICAgIGRlZiBwYXJzZW9wdF9ub3RyYWNrKHNlbGYsaW5wdXQ9Tm9uZSxsZXhlcj1Ob25lLGRlYnVnPTAsdHJhY2tpbmc9MCx0b2tlbmZ1bmM9Tm9uZSk6CisgICAgICAgIGxvb2thaGVhZCA9IE5vbmUgICAgICAgICAgICAgICAgICMgQ3VycmVudCBsb29rYWhlYWQgc3ltYm9sCisgICAgICAgIGxvb2thaGVhZHN0YWNrID0gWyBdICAgICAgICAgICAgICMgU3RhY2sgb2YgbG9va2FoZWFkIHN5bWJvbHMKKyAgICAgICAgYWN0aW9ucyA9IHNlbGYuYWN0aW9uICAgICAgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gYWN0aW9uIHRhYmxlICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIGdvdG8gICAgPSBzZWxmLmdvdG8gICAgICAgICAgICAgICMgTG9jYWwgcmVmZXJlbmNlIHRvIGdvdG8gdGFibGUgKHRvIGF2b2lkIGxvb2t1cCBvbiBzZWxmLikKKyAgICAgICAgcHJvZCAgICA9IHNlbGYucHJvZHVjdGlvbnMgICAgICAgIyBMb2NhbCByZWZlcmVuY2UgdG8gcHJvZHVjdGlvbiBsaXN0ICh0byBhdm9pZCBsb29rdXAgb24gc2VsZi4pCisgICAgICAgIHBzbGljZSAgPSBZYWNjUHJvZHVjdGlvbihOb25lKSAgICMgUHJvZHVjdGlvbiBvYmplY3QgcGFzc2VkIHRvIGdyYW1tYXIgcnVsZXMKKyAgICAgICAgZXJyb3Jjb3VudCA9IDAgICAgICAgICAgICAgICAgICAgIyBVc2VkIGR1cmluZyBlcnJvciByZWNvdmVyeSAKKworICAgICAgICAjIElmIG5vIGxleGVyIHdhcyBnaXZlbiwgd2Ugd2lsbCB0cnkgdG8gdXNlIHRoZSBsZXggbW9kdWxlCisgICAgICAgIGlmIG5vdCBsZXhlcjoKKyAgICAgICAgICAgIGxleCA9IGxvYWRfcGx5X2xleCgpCisgICAgICAgICAgICBsZXhlciA9IGxleC5sZXhlcgorICAgICAgICAKKyAgICAgICAgIyBTZXQgdXAgdGhlIGxleGVyIGFuZCBwYXJzZXIgb2JqZWN0cyBvbiBwc2xpY2UKKyAgICAgICAgcHNsaWNlLmxleGVyID0gbGV4ZXIKKyAgICAgICAgcHNsaWNlLnBhcnNlciA9IHNlbGYKKworICAgICAgICAjIElmIGlucHV0IHdhcyBzdXBwbGllZCwgcGFzcyB0byBsZXhlcgorICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxleGVyLmlucHV0KGlucHV0KQorCisgICAgICAgIGlmIHRva2VuZnVuYyBpcyBOb25lOgorICAgICAgICAgICAjIFRva2VuaXplIGZ1bmN0aW9uCisgICAgICAgICAgIGdldF90b2tlbiA9IGxleGVyLnRva2VuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgIGdldF90b2tlbiA9IHRva2VuZnVuYworCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBhbmQgc3ltYm9sIHN0YWNrcworCisgICAgICAgIHN0YXRlc3RhY2sgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBwYXJzaW5nIHN0YXRlcworICAgICAgICBzZWxmLnN0YXRlc3RhY2sgPSBzdGF0ZXN0YWNrCisgICAgICAgIHN5bXN0YWNrICAgPSBbIF0gICAgICAgICAgICAgICAgIyBTdGFjayBvZiBncmFtbWFyIHN5bWJvbHMKKyAgICAgICAgc2VsZi5zeW1zdGFjayA9IHN5bXN0YWNrCisKKyAgICAgICAgcHNsaWNlLnN0YWNrID0gc3ltc3RhY2sgICAgICAgICAjIFB1dCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBlcnJ0b2tlbiAgID0gTm9uZSAgICAgICAgICAgICAgICMgRXJyIHRva2VuCisKKyAgICAgICAgIyBUaGUgc3RhcnQgc3RhdGUgaXMgYXNzdW1lZCB0byBiZSAoMCwkZW5kKQorCisgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKDApCisgICAgICAgIHN5bSA9IFlhY2NTeW1ib2woKQorICAgICAgICBzeW0udHlwZSA9ICckZW5kJworICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICMgR2V0IHRoZSBuZXh0IHN5bWJvbCBvbiB0aGUgaW5wdXQuICBJZiBhIGxvb2thaGVhZCBzeW1ib2wKKyAgICAgICAgICAgICMgaXMgYWxyZWFkeSBzZXQsIHdlIGp1c3QgdXNlIHRoYXQuIE90aGVyd2lzZSwgd2UnbGwgcHVsbAorICAgICAgICAgICAgIyB0aGUgbmV4dCB0b2tlbiBvZmYgb2YgdGhlIGxvb2thaGVhZHN0YWNrIG9yIGZyb20gdGhlIGxleGVyCisKKyAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IGxvb2thaGVhZHN0YWNrOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBnZXRfdG9rZW4oKSAgICAgIyBHZXQgdGhlIG5leHQgdG9rZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBsb29rYWhlYWRzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IFlhY2NTeW1ib2woKQorICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQudHlwZSA9ICckZW5kJworCisgICAgICAgICAgICAjIENoZWNrIHRoZSBhY3Rpb24gdGFibGUKKyAgICAgICAgICAgIGx0eXBlID0gbG9va2FoZWFkLnR5cGUKKyAgICAgICAgICAgIHQgPSBhY3Rpb25zW3N0YXRlXS5nZXQobHR5cGUpCisKKyAgICAgICAgICAgIGlmIHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgdCA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgc2hpZnQgYSBzeW1ib2wgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdAorCisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICAjIERlY3JlYXNlIGVycm9yIGNvdW50IG9uIHN1Y2Nlc3NmdWwgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3Jjb3VudDogZXJyb3Jjb3VudCAtPTEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHQgPCAwOgorICAgICAgICAgICAgICAgICAgICAjIHJlZHVjZSBhIHN5bWJvbCBvbiB0aGUgc3RhY2ssIGVtaXQgYSBwcm9kdWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHAgPSBwcm9kWy10XQorICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IHAubmFtZQorICAgICAgICAgICAgICAgICAgICBwbGVuICA9IHAubGVuCisKKyAgICAgICAgICAgICAgICAgICAgIyBHZXQgcHJvZHVjdGlvbiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzeW0gPSBZYWNjU3ltYm9sKCkKKyAgICAgICAgICAgICAgICAgICAgc3ltLnR5cGUgPSBwbmFtZSAgICAgICAjIFByb2R1Y3Rpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICBzeW0udmFsdWUgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBzeW1zdGFja1stcGxlbi0xOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdbMF0gPSBzeW0KKworICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgY29kZSBlbmNsb3NlZCBpbiB0aGlzIHNlY3Rpb24gaXMgZHVwbGljYXRlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYmVsb3cgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uICBNYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlcyBnZXQgbWFkZSBpbiBib3RoIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgICAgICAgICAgICAgcHNsaWNlLnNsaWNlID0gdGFyZworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsIHRoZSBncmFtbWFyIHJ1bGUgd2l0aCBvdXIgc3BlY2lhbCBzbGljZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgc3ltc3RhY2tbLXBsZW46XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBzdGF0ZXN0YWNrWy1wbGVuOl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGxhYmxlKHBzbGljZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zdGFjay5hcHBlbmQoc3ltKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gZ290b1tzdGF0ZXN0YWNrWy0xXV1bcG5hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5hcHBlbmQoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBhbiBlcnJvciB3YXMgc2V0LiBFbnRlciBlcnJvciByZWNvdmVyeSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZHN0YWNrLmFwcGVuZChsb29rYWhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bS50eXBlID0gJ2Vycm9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHN5bQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JvayA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAjICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgICAgCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmcgPSBbIHN5bSBdCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGNvZGUgZW5jbG9zZWQgaW4gdGhpcyBzZWN0aW9uIGlzIGR1cGxpY2F0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFib3ZlIGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiAgTWFrZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZXMgZ2V0IG1hZGUgaW4gYm90aCBsb2NhdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzbGljZS5zbGljZSA9IHRhcmcKKworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbCB0aGUgZ3JhbW1hciBydWxlIHdpdGggb3VyIHNwZWNpYWwgc2xpY2Ugb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jYWxsYWJsZShwc2xpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltc3RhY2suYXBwZW5kKHN5bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGdvdG9bc3RhdGVzdGFja1stMV1dW3BuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2suYXBwZW5kKHN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgYW4gZXJyb3Igd2FzIHNldC4gRW50ZXIgZXJyb3IgcmVjb3Zlcnkgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWRzdGFjay5hcHBlbmQobG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVzdGFja1stMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0udHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBzeW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvdW50ID0gZXJyb3JfY291bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCisgICAgICAgICAgICAgICAgaWYgdCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gc3ltc3RhY2tbLTFdCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG4sInZhbHVlIixOb25lKQorCisgICAgICAgICAgICBpZiB0ID09IE5vbmU6CisKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgc29tZSBraW5kIG9mIHBhcnNpbmcgZXJyb3IgaGVyZS4gIFRvIGhhbmRsZQorICAgICAgICAgICAgICAgICMgdGhpcywgd2UgYXJlIGdvaW5nIHRvIHB1c2ggdGhlIGN1cnJlbnQgdG9rZW4gb250bworICAgICAgICAgICAgICAgICMgdGhlIHRva2Vuc3RhY2sgYW5kIHJlcGxhY2UgaXQgd2l0aCBhbiAnZXJyb3InIHRva2VuLgorICAgICAgICAgICAgICAgICMgSWYgdGhlcmUgYXJlIGFueSBzeW5jaHJvbml6YXRpb24gcnVsZXMsIHRoZXkgbWF5CisgICAgICAgICAgICAgICAgIyBjYXRjaCBpdC4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBJbiBhZGRpdGlvbiB0byBwdXNoaW5nIHRoZSBlcnJvciB0b2tlbiwgd2UgY2FsbCBjYWxsCisgICAgICAgICAgICAgICAgIyB0aGUgdXNlciBkZWZpbmVkIHBfZXJyb3IoKSBmdW5jdGlvbiBpZiB0aGlzIGlzIHRoZQorICAgICAgICAgICAgICAgICMgZmlyc3Qgc3ludGF4IGVycm9yLiAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZgorICAgICAgICAgICAgICAgICMgZXJyb3Jjb3VudCA9PSAwLgorICAgICAgICAgICAgICAgIGlmIGVycm9yY291bnQgPT0gMCBvciBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yb2sgPSAwCisgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gbG9va2FoZWFkCisgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuLnR5cGUgPT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lICAgICAgICAgICAgICAgIyBFbmQgb2YgZmlsZSEKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmZ1bmM6CisgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgZXJyb2ssdG9rZW4scmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb2sgPSBzZWxmLmVycm9rICAgICAgICAjIFNldCBzb21lIHNwZWNpYWwgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiBlcnJvciByZWNvdmVyeQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBnZXRfdG9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RhcnQgPSBzZWxmLnJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnRva2VuIGFuZCBub3QgaGFzYXR0cihlcnJ0b2tlbiwnbGV4ZXInKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJ0b2tlbi5sZXhlciA9IGxleGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBzZWxmLmVycm9yZnVuYyhlcnJ0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBlcnJvaywgdG9rZW4sIHJlc3RhcnQgICAjIERlbGV0ZSBzcGVjaWFsIGZ1bmN0aW9ucworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVycm9yb2s6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyIG11c3QgaGF2ZSBkb25lIHNvbWUga2luZCBvZiBwYW5pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbW9kZSByZWNvdmVyeSBvbiB0aGVpciBvd24uICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybmVkIHRva2VuIGlzIHRoZSBuZXh0IGxvb2thaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IHRvaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnRva2VuID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJ0b2tlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGVycnRva2VuLCJsaW5lbm8iKTogbGluZW5vID0gbG9va2FoZWFkLmxpbmVubworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6IGxpbmVubyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lbm86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciBhdCBsaW5lICVkLCB0b2tlbj0lc1xuIiAlIChsaW5lbm8sIGVycnRva2VuLnR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInlhY2M6IFN5bnRheCBlcnJvciwgdG9rZW49JXMiICUgZXJydG9rZW4udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgieWFjYzogUGFyc2UgZXJyb3IgaW4gaW5wdXQuIEVPRlxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVycm9yY291bnQgPSBlcnJvcl9jb3VudAorCisgICAgICAgICAgICAgICAgIyBjYXNlIDE6ICB0aGUgc3RhdGVzdGFjayBvbmx5IGhhcyAxIGVudHJ5IG9uIGl0LiAgSWYgd2UncmUgaW4gdGhpcyBzdGF0ZSwgdGhlCisgICAgICAgICAgICAgICAgIyBlbnRpcmUgcGFyc2UgaGFzIGJlZW4gcm9sbGVkIGJhY2sgYW5kIHdlJ3JlIGNvbXBsZXRlbHkgaG9zZWQuICAgVGhlIHRva2VuIGlzCisgICAgICAgICAgICAgICAgIyBkaXNjYXJkZWQgYW5kIHdlIGp1c3Qga2VlcCBnb2luZy4KKworICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0ZXN0YWNrKSA8PSAxIGFuZCBsb29rYWhlYWQudHlwZSAhPSAnJGVuZCc6CisgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZXJydG9rZW4gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMAorICAgICAgICAgICAgICAgICAgICAjIE51a2UgdGhlIHB1c2hiYWNrIHN0YWNrCisgICAgICAgICAgICAgICAgICAgIGRlbCBsb29rYWhlYWRzdGFja1s6XQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBjYXNlIDI6IHRoZSBzdGF0ZXN0YWNrIGhhcyBhIGNvdXBsZSBvZiBlbnRyaWVzIG9uIGl0LCBidXQgd2UncmUKKyAgICAgICAgICAgICAgICAjIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIG51a2UgdGhlIHRvcCBlbnRyeSBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgdG9rZW4KKworICAgICAgICAgICAgICAgICMgU3RhcnQgbnVraW5nIGVudHJpZXMgb24gdGhlIHN0YWNrCisgICAgICAgICAgICAgICAgaWYgbG9va2FoZWFkLnR5cGUgPT0gJyRlbmQnOgorICAgICAgICAgICAgICAgICAgICAjIFdob2EuIFdlJ3JlIHJlYWxseSBob3NlZCBoZXJlLiBCYWlsIG91dAorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIGxvb2thaGVhZC50eXBlICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHN5bSA9IHN5bXN0YWNrWy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBzeW0udHlwZSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBIbW1tLiBFcnJvciBpcyBvbiB0b3Agb2Ygc3RhY2ssIHdlJ2xsIGp1c3QgbnVrZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1ib2wgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBsb29rYWhlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0ID0gWWFjY1N5bWJvbCgpCisgICAgICAgICAgICAgICAgICAgIHQudHlwZSA9ICdlcnJvcicKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb29rYWhlYWQsImxpbmVubyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdC5saW5lbm8gPSBsb29rYWhlYWQubGluZW5vCisgICAgICAgICAgICAgICAgICAgIHQudmFsdWUgPSBsb29rYWhlYWQKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkc3RhY2suYXBwZW5kKGxvb2thaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgbG9va2FoZWFkID0gdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN5bXN0YWNrLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlc3RhY2sucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZXN0YWNrWy0xXSAgICAgICAjIFBvdGVudGlhbCBidWcgZml4CisKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIENhbGwgYW4gZXJyb3IgZnVuY3Rpb24gaGVyZQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ5YWNjOiBpbnRlcm5hbCBwYXJzZXIgZXJyb3IhISFcbiIpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBHcmFtbWFyIFJlcHJlc2VudGF0aW9uID09PQorIworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIHZhcmlhYmxlcyBhcmUgdXNlZCB0byByZXByZXNlbnQgYW5kCisjIG1hbmlwdWxhdGUgdGhlIHJ1bGVzIHRoYXQgbWFrZSB1cCBhIGdyYW1tYXIuIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbXBvcnQgcmUKKworIyByZWdleCBtYXRjaGluZyBpZGVudGlmaWVycworX2lzX2lkZW50aWZpZXIgPSByZS5jb21waWxlKHInXlthLXpBLVowLTlfLV0rJCcpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY2xhc3MgUHJvZHVjdGlvbjoKKyMKKyMgVGhpcyBjbGFzcyBzdG9yZXMgdGhlIHJhdyBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwcm9kdWN0aW9uIG9yIGdyYW1tYXIgcnVsZS4KKyMgQSBncmFtbWFyIHJ1bGUgcmVmZXJzIHRvIGEgc3BlY2lmaWNhdGlvbiBzdWNoIGFzIHRoaXM6CisjCisjICAgICAgIGV4cHIgOiBleHByIFBMVVMgdGVybSAKKyMKKyMgSGVyZSBhcmUgdGhlIGJhc2ljIGF0dHJpYnV0ZXMgZGVmaW5lZCBvbiBhbGwgcHJvZHVjdGlvbnMKKyMKKyMgICAgICAgbmFtZSAgICAgLSBOYW1lIG9mIHRoZSBwcm9kdWN0aW9uLiAgRm9yIGV4YW1wbGUgJ2V4cHInCisjICAgICAgIHByb2QgICAgIC0gQSBsaXN0IG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IHNpZGUgWydleHByJywnUExVUycsJ3Rlcm0nXQorIyAgICAgICBwcmVjICAgICAtIFByb2R1Y3Rpb24gcHJlY2VkZW5jZSBsZXZlbAorIyAgICAgICBudW1iZXIgICAtIFByb2R1Y3Rpb24gbnVtYmVyLgorIyAgICAgICBmdW5jICAgICAtIEZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgb24gcmVkdWNlCisjICAgICAgIGZpbGUgICAgIC0gRmlsZSB3aGVyZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIGlzIGRlZmluZWQKKyMgICAgICAgbGluZW5vICAgLSBMaW5lIG51bWJlciB3aGVyZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIGlzIGRlZmluZWQKKyMKKyMgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIG9yIG9wdGlvbmFsLgorIworIyAgICAgICBsZW4gICAgICAgLSBMZW5ndGggb2YgdGhlIHByb2R1Y3Rpb24gKG51bWJlciBvZiBzeW1ib2xzIG9uIHJpZ2h0IGhhbmQgc2lkZSkKKyMgICAgICAgdXN5bXMgICAgIC0gU2V0IG9mIHVuaXF1ZSBzeW1ib2xzIGZvdW5kIGluIHRoZSBwcm9kdWN0aW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFByb2R1Y3Rpb24ob2JqZWN0KToKKyAgICByZWR1Y2VkID0gMAorICAgIGRlZiBfX2luaXRfXyhzZWxmLG51bWJlcixuYW1lLHByb2QscHJlY2VkZW5jZT0oJ3JpZ2h0JywwKSxmdW5jPU5vbmUsZmlsZT0nJyxsaW5lPTApOgorICAgICAgICBzZWxmLm5hbWUgICAgID0gbmFtZQorICAgICAgICBzZWxmLnByb2QgICAgID0gdHVwbGUocHJvZCkKKyAgICAgICAgc2VsZi5udW1iZXIgICA9IG51bWJlcgorICAgICAgICBzZWxmLmZ1bmMgICAgID0gZnVuYworICAgICAgICBzZWxmLmNhbGxhYmxlID0gTm9uZQorICAgICAgICBzZWxmLmZpbGUgICAgID0gZmlsZQorICAgICAgICBzZWxmLmxpbmUgICAgID0gbGluZQorICAgICAgICBzZWxmLnByZWMgICAgID0gcHJlY2VkZW5jZQorCisgICAgICAgICMgSW50ZXJuYWwgc2V0dGluZ3MgdXNlZCBkdXJpbmcgdGFibGUgY29uc3RydWN0aW9uCisgICAgICAgIAorICAgICAgICBzZWxmLmxlbiAgPSBsZW4oc2VsZi5wcm9kKSAgICMgTGVuZ3RoIG9mIHRoZSBwcm9kdWN0aW9uCisKKyAgICAgICAgIyBDcmVhdGUgYSBsaXN0IG9mIHVuaXF1ZSBwcm9kdWN0aW9uIHN5bWJvbHMgdXNlZCBpbiB0aGUgcHJvZHVjdGlvbgorICAgICAgICBzZWxmLnVzeW1zID0gWyBdICAgICAgICAgICAgIAorICAgICAgICBmb3IgcyBpbiBzZWxmLnByb2Q6CisgICAgICAgICAgICBpZiBzIG5vdCBpbiBzZWxmLnVzeW1zOgorICAgICAgICAgICAgICAgIHNlbGYudXN5bXMuYXBwZW5kKHMpCisKKyAgICAgICAgIyBMaXN0IG9mIGFsbCBMUiBpdGVtcyBmb3IgdGhlIHByb2R1Y3Rpb24KKyAgICAgICAgc2VsZi5scl9pdGVtcyA9IFtdCisgICAgICAgIHNlbGYubHJfbmV4dCA9IE5vbmUKKworICAgICAgICAjIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAgICBpZiBzZWxmLnByb2Q6CisgICAgICAgICAgICBzZWxmLnN0ciA9ICIlcyAtPiAlcyIgJSAoc2VsZi5uYW1lLCIgIi5qb2luKHNlbGYucHJvZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0ciA9ICIlcyAtPiA8ZW1wdHk+IiAlIHNlbGYubmFtZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0cgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlByb2R1Y3Rpb24oIitzdHIoc2VsZikrIikiCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnByb2QpCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZixpbmRleCk6CisgICAgICAgIHJldHVybiBzZWxmLnByb2RbaW5kZXhdCisgICAgICAgICAgICAKKyAgICAjIFJldHVybiB0aGUgbnRoIGxyX2l0ZW0gZnJvbSB0aGUgcHJvZHVjdGlvbiAob3IgTm9uZSBpZiBhdCB0aGUgZW5kKQorICAgIGRlZiBscl9pdGVtKHNlbGYsbik6CisgICAgICAgIGlmIG4gPiBsZW4oc2VsZi5wcm9kKTogcmV0dXJuIE5vbmUKKyAgICAgICAgcCA9IExSSXRlbShzZWxmLG4pCisKKyAgICAgICAgIyBQcmVjb21wdXRlIHRoZSBsaXN0IG9mIHByb2R1Y3Rpb25zIGltbWVkaWF0ZWx5IGZvbGxvd2luZy4gIEhhY2suIFJlbW92ZSBsYXRlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwLmxyX2FmdGVyID0gUHJvZG5hbWVzW3AucHJvZFtuKzFdXQorICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsS2V5RXJyb3IpOgorICAgICAgICAgICAgcC5scl9hZnRlciA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAubHJfYmVmb3JlID0gcC5wcm9kW24tMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwLmxyX2JlZm9yZSA9IE5vbmUKKworICAgICAgICByZXR1cm4gcAorICAgIAorICAgICMgQmluZCB0aGUgcHJvZHVjdGlvbiBmdW5jdGlvbiBuYW1lIHRvIGEgY2FsbGFibGUKKyAgICBkZWYgYmluZChzZWxmLHBkaWN0KToKKyAgICAgICAgaWYgc2VsZi5mdW5jOgorICAgICAgICAgICAgc2VsZi5jYWxsYWJsZSA9IHBkaWN0W3NlbGYuZnVuY10KKworIyBUaGlzIGNsYXNzIHNlcnZlcyBhcyBhIG1pbmltYWwgc3RhbmRpbiBmb3IgUHJvZHVjdGlvbiBvYmplY3RzIHdoZW4KKyMgcmVhZGluZyB0YWJsZSBkYXRhIGZyb20gZmlsZXMuICAgSXQgb25seSBjb250YWlucyBpbmZvcm1hdGlvbgorIyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBMUiBwYXJzaW5nIGVuZ2luZSwgcGx1cyBzb21lIGFkZGl0aW9uYWwKKyMgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorY2xhc3MgTWluaVByb2R1Y3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixzdHIsbmFtZSxsZW4sZnVuYyxmaWxlLGxpbmUpOgorICAgICAgICBzZWxmLm5hbWUgICAgID0gbmFtZQorICAgICAgICBzZWxmLmxlbiAgICAgID0gbGVuCisgICAgICAgIHNlbGYuZnVuYyAgICAgPSBmdW5jCisgICAgICAgIHNlbGYuY2FsbGFibGUgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZSAgICAgPSBmaWxlCisgICAgICAgIHNlbGYubGluZSAgICAgPSBsaW5lCisgICAgICAgIHNlbGYuc3RyICAgICAgPSBzdHIKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1pbmlQcm9kdWN0aW9uKCVzKSIgJSBzZWxmLnN0cgorCisgICAgIyBCaW5kIHRoZSBwcm9kdWN0aW9uIGZ1bmN0aW9uIG5hbWUgdG8gYSBjYWxsYWJsZQorICAgIGRlZiBiaW5kKHNlbGYscGRpY3QpOgorICAgICAgICBpZiBzZWxmLmZ1bmM6CisgICAgICAgICAgICBzZWxmLmNhbGxhYmxlID0gcGRpY3Rbc2VsZi5mdW5jXQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY2xhc3MgTFJJdGVtCisjCisjIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNwZWNpZmljIHN0YWdlIG9mIHBhcnNpbmcgYSBwcm9kdWN0aW9uIHJ1bGUuICBGb3IKKyMgZXhhbXBsZTogCisjCisjICAgICAgIGV4cHIgOiBleHByIC4gUExVUyB0ZXJtIAorIworIyBJbiB0aGUgYWJvdmUsIHRoZSAiLiIgcmVwcmVzZW50cyB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgcGFyc2UuICBIZXJlCisjIGJhc2ljIGF0dHJpYnV0ZXM6CisjCisjICAgICAgIG5hbWUgICAgICAgLSBOYW1lIG9mIHRoZSBwcm9kdWN0aW9uLiAgRm9yIGV4YW1wbGUgJ2V4cHInCisjICAgICAgIHByb2QgICAgICAgLSBBIGxpc3Qgb2Ygc3ltYm9scyBvbiB0aGUgcmlnaHQgc2lkZSBbJ2V4cHInLCcuJywgJ1BMVVMnLCd0ZXJtJ10KKyMgICAgICAgbnVtYmVyICAgICAtIFByb2R1Y3Rpb24gbnVtYmVyLgorIworIyAgICAgICBscl9uZXh0ICAgICAgTmV4dCBMUiBpdGVtLiBFeGFtcGxlLCBpZiB3ZSBhcmUgJyBleHByIC0+IGV4cHIgLiBQTFVTIHRlcm0nCisjICAgICAgICAgICAgICAgICAgICB0aGVuIGxyX25leHQgcmVmZXJzIHRvICdleHByIC0+IGV4cHIgUExVUyAuIHRlcm0nCisjICAgICAgIGxyX2luZGV4ICAgLSBMUiBpdGVtIGluZGV4IChsb2NhdGlvbiBvZiB0aGUgIi4iKSBpbiB0aGUgcHJvZCBsaXN0LgorIyAgICAgICBsb29rYWhlYWRzIC0gTEFMUiBsb29rYWhlYWQgc3ltYm9scyBmb3IgdGhpcyBpdGVtCisjICAgICAgIGxlbiAgICAgICAgLSBMZW5ndGggb2YgdGhlIHByb2R1Y3Rpb24gKG51bWJlciBvZiBzeW1ib2xzIG9uIHJpZ2h0IGhhbmQgc2lkZSkKKyMgICAgICAgbHJfYWZ0ZXIgICAgLSBMaXN0IG9mIGFsbCBwcm9kdWN0aW9ucyB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvdworIyAgICAgICBscl9iZWZvcmUgICAtIEdyYW1tYXIgc3ltYm9sIGltbWVkaWF0ZWx5IGJlZm9yZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBMUkl0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZixwLG4pOgorICAgICAgICBzZWxmLm5hbWUgICAgICAgPSBwLm5hbWUKKyAgICAgICAgc2VsZi5wcm9kICAgICAgID0gbGlzdChwLnByb2QpCisgICAgICAgIHNlbGYubnVtYmVyICAgICA9IHAubnVtYmVyCisgICAgICAgIHNlbGYubHJfaW5kZXggICA9IG4KKyAgICAgICAgc2VsZi5sb29rYWhlYWRzID0geyB9CisgICAgICAgIHNlbGYucHJvZC5pbnNlcnQobiwiLiIpCisgICAgICAgIHNlbGYucHJvZCAgICAgICA9IHR1cGxlKHNlbGYucHJvZCkKKyAgICAgICAgc2VsZi5sZW4gICAgICAgID0gbGVuKHNlbGYucHJvZCkKKyAgICAgICAgc2VsZi51c3ltcyAgICAgID0gcC51c3ltcworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYucHJvZDoKKyAgICAgICAgICAgIHMgPSAiJXMgLT4gJXMiICUgKHNlbGYubmFtZSwiICIuam9pbihzZWxmLnByb2QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcyA9ICIlcyAtPiA8ZW1wdHk+IiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkxSSXRlbSgiK3N0cihzZWxmKSsiKSIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByaWdodG1vc3RfdGVybWluYWwoKQorIworIyBSZXR1cm4gdGhlIHJpZ2h0bW9zdCB0ZXJtaW5hbCBmcm9tIGEgbGlzdCBvZiBzeW1ib2xzLiAgVXNlZCBpbiBhZGRfcHJvZHVjdGlvbigpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWYgcmlnaHRtb3N0X3Rlcm1pbmFsKHN5bWJvbHMsIHRlcm1pbmFscyk6CisgICAgaSA9IGxlbihzeW1ib2xzKSAtIDEKKyAgICB3aGlsZSBpID49IDA6CisgICAgICAgIGlmIHN5bWJvbHNbaV0gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbHNbaV0KKyAgICAgICAgaSAtPSAxCisgICAgcmV0dXJuIE5vbmUKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSBHUkFNTUFSIENMQVNTID09PQorIworIyBUaGUgZm9sbG93aW5nIGNsYXNzIHJlcHJlc2VudHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZ3JhbW1hciBhbG9uZworIyB3aXRoIHZhcmlvdXMgY29tcHV0ZWQgcHJvcGVydGllcyBzdWNoIGFzIGZpcnN0IHNldHMsIGZvbGxvdyBzZXRzLCBMUiBpdGVtcywgZXRjLgorIyBUaGlzIGRhdGEgaXMgdXNlZCBmb3IgY3JpdGljYWwgcGFydHMgb2YgdGhlIHRhYmxlIGdlbmVyYXRpb24gcHJvY2VzcyBsYXRlci4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgR3JhbW1hckVycm9yKFlhY2NFcnJvcik6IHBhc3MKKworY2xhc3MgR3JhbW1hcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlcm1pbmFscyk6CisgICAgICAgIHNlbGYuUHJvZHVjdGlvbnMgID0gW05vbmVdICAjIEEgbGlzdCBvZiBhbGwgb2YgdGhlIHByb2R1Y3Rpb25zLiAgVGhlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVudHJ5IGlzIGFsd2F5cyByZXNlcnZlZCBmb3IgdGhlIHB1cnBvc2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnVpbGRpbmcgYW4gYXVnbWVudGVkIGdyYW1tYXIKKworICAgICAgICBzZWxmLlByb2RuYW1lcyAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgbWFwcGluZyB0aGUgbmFtZXMgb2Ygbm9udGVybWluYWxzIHRvIGEgbGlzdCBvZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvZHVjdGlvbnMgb2YgdGhhdCBub250ZXJtaW5hbC4KKworICAgICAgICBzZWxmLlByb2RtYXAgICAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgdGhhdCBpcyBvbmx5IHVzZWQgdG8gZGV0ZWN0IGR1cGxpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9kdWN0aW9ucy4KKworICAgICAgICBzZWxmLlRlcm1pbmFscyAgICA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgbWFwcGluZyB0aGUgbmFtZXMgb2YgdGVybWluYWwgc3ltYm9scyB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgdGhlIHJ1bGVzIHdoZXJlIHRoZXkgYXJlIHVzZWQuCisKKyAgICAgICAgZm9yIHRlcm0gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5UZXJtaW5hbHNbdGVybV0gPSBbXQorCisgICAgICAgIHNlbGYuVGVybWluYWxzWydlcnJvciddID0gW10KKworICAgICAgICBzZWxmLk5vbnRlcm1pbmFscyA9IHsgfSAgICAgIyBBIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcyBvZiBub250ZXJtaW5hbHMgdG8gYSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIHJ1bGUgbnVtYmVycyB3aGVyZSB0aGV5IGFyZSB1c2VkLgorCisgICAgICAgIHNlbGYuRmlyc3QgICAgICAgID0geyB9ICAgICAjIEEgZGljdGlvbmFyeSBvZiBwcmVjb21wdXRlZCBGSVJTVCh4KSBzeW1ib2xzCisKKyAgICAgICAgc2VsZi5Gb2xsb3cgICAgICAgPSB7IH0gICAgICMgQSBkaWN0aW9uYXJ5IG9mIHByZWNvbXB1dGVkIEZPTExPVyh4KSBzeW1ib2xzCisKKyAgICAgICAgc2VsZi5QcmVjZWRlbmNlICAgPSB7IH0gICAgICMgUHJlY2VkZW5jZSBydWxlcyBmb3IgZWFjaCB0ZXJtaW5hbC4gQ29udGFpbnMgdHVwbGVzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3JtICgncmlnaHQnLGxldmVsKSBvciAoJ25vbmFzc29jJywgbGV2ZWwpIG9yICgnbGVmdCcsbGV2ZWwpCisKKyAgICAgICAgc2VsZi5Vc2VkUHJlY2VkZW5jZSA9IHsgfSAgICMgUHJlY2VkZW5jZSBydWxlcyB0aGF0IHdlcmUgYWN0dWFsbHkgdXNlZCBieSB0aGUgZ3JhbW1lci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBvbmx5IHVzZWQgdG8gcHJvdmlkZSBlcnJvciBjaGVja2luZyBhbmQgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSB3YXJuaW5nIGFib3V0IHVudXNlZCBwcmVjZWRlbmNlIHJ1bGVzLgorCisgICAgICAgIHNlbGYuU3RhcnQgPSBOb25lICAgICAgICAgICAjIFN0YXJ0aW5nIHN5bWJvbCBmb3IgdGhlIGdyYW1tYXIKKworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5Qcm9kdWN0aW9ucykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLGluZGV4KToKKyAgICAgICAgcmV0dXJuIHNlbGYuUHJvZHVjdGlvbnNbaW5kZXhdCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBzZXRfcHJlY2VkZW5jZSgpCisgICAgIworICAgICMgU2V0cyB0aGUgcHJlY2VkZW5jZSBmb3IgYSBnaXZlbiB0ZXJtaW5hbC4gYXNzb2MgaXMgdGhlIGFzc29jaWF0aXZpdHkgc3VjaCBhcworICAgICMgJ2xlZnQnLCdyaWdodCcsIG9yICdub25hc3NvYycuICBsZXZlbCBpcyBhIG51bWVyaWMgbGV2ZWwuCisgICAgIworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBzZXRfcHJlY2VkZW5jZShzZWxmLHRlcm0sYXNzb2MsbGV2ZWwpOgorICAgICAgICBhc3NlcnQgc2VsZi5Qcm9kdWN0aW9ucyA9PSBbTm9uZV0sIk11c3QgY2FsbCBzZXRfcHJlY2VkZW5jZSgpIGJlZm9yZSBhZGRfcHJvZHVjdGlvbigpIgorICAgICAgICBpZiB0ZXJtIGluIHNlbGYuUHJlY2VkZW5jZToKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiUHJlY2VkZW5jZSBhbHJlYWR5IHNwZWNpZmllZCBmb3IgdGVybWluYWwgJyVzJyIgJSB0ZXJtKQorICAgICAgICBpZiBhc3NvYyBub3QgaW4gWydsZWZ0JywncmlnaHQnLCdub25hc3NvYyddOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCJBc3NvY2lhdGl2aXR5IG11c3QgYmUgb25lIG9mICdsZWZ0JywncmlnaHQnLCBvciAnbm9uYXNzb2MnIikKKyAgICAgICAgc2VsZi5QcmVjZWRlbmNlW3Rlcm1dID0gKGFzc29jLGxldmVsKQorIAorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGFkZF9wcm9kdWN0aW9uKCkKKyAgICAjCisgICAgIyBHaXZlbiBhbiBhY3Rpb24gZnVuY3Rpb24sIHRoaXMgZnVuY3Rpb24gYXNzZW1ibGVzIGEgcHJvZHVjdGlvbiBydWxlIGFuZAorICAgICMgY29tcHV0ZXMgaXRzIHByZWNlZGVuY2UgbGV2ZWwuCisgICAgIworICAgICMgVGhlIHByb2R1Y3Rpb24gcnVsZSBpcyBzdXBwbGllZCBhcyBhIGxpc3Qgb2Ygc3ltYm9scy4gICBGb3IgZXhhbXBsZSwKKyAgICAjIGEgcnVsZSBzdWNoIGFzICdleHByIDogZXhwciBQTFVTIHRlcm0nIGhhcyBhIHByb2R1Y3Rpb24gbmFtZSBvZiAnZXhwcicgYW5kCisgICAgIyBzeW1ib2xzIFsnZXhwcicsJ1BMVVMnLCd0ZXJtJ10uCisgICAgIworICAgICMgUHJlY2VkZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVjZWRlbmNlIG9mIHRoZSByaWdodC1tb3N0IG5vbi10ZXJtaW5hbAorICAgICMgb3IgdGhlIHByZWNlZGVuY2Ugb2YgYSB0ZXJtaW5hbCBzcGVjaWZpZWQgYnkgJXByZWMuCisgICAgIworICAgICMgQSB2YXJpZXR5IG9mIGVycm9yIGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIG1ha2Ugc3VyZSBwcm9kdWN0aW9uIHN5bWJvbHMKKyAgICAjIGFyZSB2YWxpZCBhbmQgdGhhdCAlcHJlYyBpcyB1c2VkIGNvcnJlY3RseS4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgYWRkX3Byb2R1Y3Rpb24oc2VsZixwcm9kbmFtZSxzeW1zLGZ1bmM9Tm9uZSxmaWxlPScnLGxpbmU9MCk6CisKKyAgICAgICAgaWYgcHJvZG5hbWUgaW4gc2VsZi5UZXJtaW5hbHM6CisgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBJbGxlZ2FsIHJ1bGUgbmFtZSAnJXMnLiBBbHJlYWR5IGRlZmluZWQgYXMgYSB0b2tlbiIgJSAoZmlsZSxsaW5lLHByb2RuYW1lKSkKKyAgICAgICAgaWYgcHJvZG5hbWUgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgcnVsZSBuYW1lICclcycuIGVycm9yIGlzIGEgcmVzZXJ2ZWQgd29yZCIgJSAoZmlsZSxsaW5lLHByb2RuYW1lKSkKKyAgICAgICAgaWYgbm90IF9pc19pZGVudGlmaWVyLm1hdGNoKHByb2RuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgcnVsZSBuYW1lICclcyciICUgKGZpbGUsbGluZSxwcm9kbmFtZSkpCisKKyAgICAgICAgIyBMb29rIGZvciBsaXRlcmFsIHRva2VucyAKKyAgICAgICAgZm9yIG4scyBpbiBlbnVtZXJhdGUoc3ltcyk6CisgICAgICAgICAgICBpZiBzWzBdIGluICInXCIiOgorICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICBjID0gZXZhbChzKQorICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihjKSA+IDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBMaXRlcmFsIHRva2VuICVzIGluIHJ1bGUgJyVzJyBtYXkgb25seSBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiICUgKGZpbGUsbGluZSxzLCBwcm9kbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYyBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5UZXJtaW5hbHNbY10gPSBbXQorICAgICAgICAgICAgICAgICAgICAgc3ltc1tuXSA9IGMKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIG5vdCBfaXNfaWRlbnRpZmllci5tYXRjaChzKSBhbmQgcyAhPSAnJXByZWMnOgorICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IElsbGVnYWwgbmFtZSAnJXMnIGluIHJ1bGUgJyVzJyIgJSAoZmlsZSxsaW5lLHMsIHByb2RuYW1lKSkKKyAgICAgICAgCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBwcmVjZWRlbmNlIGxldmVsCisgICAgICAgIGlmICclcHJlYycgaW4gc3ltczoKKyAgICAgICAgICAgIGlmIHN5bXNbLTFdID09ICclcHJlYyc6CisgICAgICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogU3ludGF4IGVycm9yLiBOb3RoaW5nIGZvbGxvd3MgJSVwcmVjIiAlIChmaWxlLGxpbmUpKQorICAgICAgICAgICAgaWYgc3ltc1stMl0gIT0gJyVwcmVjJzoKKyAgICAgICAgICAgICAgICByYWlzZSBHcmFtbWFyRXJyb3IoIiVzOiVkOiBTeW50YXggZXJyb3IuICUlcHJlYyBjYW4gb25seSBhcHBlYXIgYXQgdGhlIGVuZCBvZiBhIGdyYW1tYXIgcnVsZSIgJSAoZmlsZSxsaW5lKSkKKyAgICAgICAgICAgIHByZWNuYW1lID0gc3ltc1stMV0KKyAgICAgICAgICAgIHByb2RwcmVjID0gc2VsZi5QcmVjZWRlbmNlLmdldChwcmVjbmFtZSxOb25lKQorICAgICAgICAgICAgaWYgbm90IHByb2RwcmVjOgorICAgICAgICAgICAgICAgIHJhaXNlIEdyYW1tYXJFcnJvcigiJXM6JWQ6IE5vdGhpbmcga25vd24gYWJvdXQgdGhlIHByZWNlZGVuY2Ugb2YgJyVzJyIgJSAoZmlsZSxsaW5lLHByZWNuYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5Vc2VkUHJlY2VkZW5jZVtwcmVjbmFtZV0gPSAxCisgICAgICAgICAgICBkZWwgc3ltc1stMjpdICAgICAjIERyb3AgJXByZWMgZnJvbSB0aGUgcnVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBubyAlcHJlYywgcHJlY2VkZW5jZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByaWdodG1vc3QgdGVybWluYWwgc3ltYm9sCisgICAgICAgICAgICBwcmVjbmFtZSA9IHJpZ2h0bW9zdF90ZXJtaW5hbChzeW1zLHNlbGYuVGVybWluYWxzKQorICAgICAgICAgICAgcHJvZHByZWMgPSBzZWxmLlByZWNlZGVuY2UuZ2V0KHByZWNuYW1lLCgncmlnaHQnLDApKSAKKyAgICAgICAgICAgIAorICAgICAgICAjIFNlZSBpZiB0aGUgcnVsZSBpcyBhbHJlYWR5IGluIHRoZSBydWxlbWFwCisgICAgICAgIG1hcCA9ICIlcyAtPiAlcyIgJSAocHJvZG5hbWUsc3ltcykKKyAgICAgICAgaWYgbWFwIGluIHNlbGYuUHJvZG1hcDoKKyAgICAgICAgICAgIG0gPSBzZWxmLlByb2RtYXBbbWFwXQorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCIlczolZDogRHVwbGljYXRlIHJ1bGUgJXMuICIgJSAoZmlsZSxsaW5lLCBtKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZXZpb3VzIGRlZmluaXRpb24gYXQgJXM6JWQiICUgKG0uZmlsZSwgbS5saW5lKSkKKworICAgICAgICAjIEZyb20gdGhpcyBwb2ludCBvbiwgZXZlcnl0aGluZyBpcyB2YWxpZC4gIENyZWF0ZSBhIG5ldyBQcm9kdWN0aW9uIGluc3RhbmNlCisgICAgICAgIHBudW1iZXIgID0gbGVuKHNlbGYuUHJvZHVjdGlvbnMpCisgICAgICAgIGlmIG5vdCBwcm9kbmFtZSBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuTm9udGVybWluYWxzW3Byb2RuYW1lXSA9IFsgXQorCisgICAgICAgICMgQWRkIHRoZSBwcm9kdWN0aW9uIG51bWJlciB0byBUZXJtaW5hbHMgYW5kIE5vbnRlcm1pbmFscworICAgICAgICBmb3IgdCBpbiBzeW1zOgorICAgICAgICAgICAgaWYgdCBpbiBzZWxmLlRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICBzZWxmLlRlcm1pbmFsc1t0XS5hcHBlbmQocG51bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbm90IHQgaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuTm9udGVybWluYWxzW3RdID0gWyBdCisgICAgICAgICAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHNbdF0uYXBwZW5kKHBudW1iZXIpCisKKyAgICAgICAgIyBDcmVhdGUgYSBwcm9kdWN0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMKKyAgICAgICAgcCA9IFByb2R1Y3Rpb24ocG51bWJlcixwcm9kbmFtZSxzeW1zLHByb2RwcmVjLGZ1bmMsZmlsZSxsaW5lKQorICAgICAgICBzZWxmLlByb2R1Y3Rpb25zLmFwcGVuZChwKQorICAgICAgICBzZWxmLlByb2RtYXBbbWFwXSA9IHAKKworICAgICAgICAjIEFkZCB0byB0aGUgZ2xvYmFsIHByb2R1Y3Rpb25zIGxpc3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5Qcm9kbmFtZXNbcHJvZG5hbWVdLmFwcGVuZChwKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLlByb2RuYW1lc1twcm9kbmFtZV0gPSBbIHAgXQorICAgICAgICByZXR1cm4gMAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgc2V0X3N0YXJ0KCkKKyAgICAjCisgICAgIyBTZXRzIHRoZSBzdGFydGluZyBzeW1ib2wgYW5kIGNyZWF0ZXMgdGhlIGF1Z21lbnRlZCBncmFtbWFyLiAgUHJvZHVjdGlvbiAKKyAgICAjIHJ1bGUgMCBpcyBTJyAtPiBzdGFydCB3aGVyZSBzdGFydCBpcyB0aGUgc3RhcnQgc3ltYm9sLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBzZXRfc3RhcnQoc2VsZixzdGFydD1Ob25lKToKKyAgICAgICAgaWYgbm90IHN0YXJ0OgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLlByb2R1Y3Rpb25zWzFdLm5hbWUKKyAgICAgICAgaWYgc3RhcnQgbm90IGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgcmFpc2UgR3JhbW1hckVycm9yKCJzdGFydCBzeW1ib2wgJXMgdW5kZWZpbmVkIiAlIHN0YXJ0KQorICAgICAgICBzZWxmLlByb2R1Y3Rpb25zWzBdID0gUHJvZHVjdGlvbigwLCJTJyIsW3N0YXJ0XSkKKyAgICAgICAgc2VsZi5Ob250ZXJtaW5hbHNbc3RhcnRdLmFwcGVuZCgwKQorICAgICAgICBzZWxmLlN0YXJ0ID0gc3RhcnQKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpbmRfdW5yZWFjaGFibGUoKQorICAgICMKKyAgICAjIEZpbmQgYWxsIG9mIHRoZSBub250ZXJtaW5hbCBzeW1ib2xzIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZCBmcm9tIHRoZSBzdGFydGluZworICAgICMgc3ltYm9sLiAgUmV0dXJucyBhIGxpc3Qgb2Ygbm9udGVybWluYWxzIHRoYXQgY2FuJ3QgYmUgcmVhY2hlZC4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgZmluZF91bnJlYWNoYWJsZShzZWxmKToKKyAgICAgICAgCisgICAgICAgICMgTWFyayBhbGwgc3ltYm9scyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBhIHN5bWJvbCBzCisgICAgICAgIGRlZiBtYXJrX3JlYWNoYWJsZV9mcm9tKHMpOgorICAgICAgICAgICAgaWYgcmVhY2hhYmxlW3NdOgorICAgICAgICAgICAgICAgICMgV2UndmUgYWxyZWFkeSByZWFjaGVkIHN5bWJvbCBzLgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmVhY2hhYmxlW3NdID0gMQorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kbmFtZXMuZ2V0KHMsW10pOgorICAgICAgICAgICAgICAgIGZvciByIGluIHAucHJvZDoKKyAgICAgICAgICAgICAgICAgICAgbWFya19yZWFjaGFibGVfZnJvbShyKQorCisgICAgICAgIHJlYWNoYWJsZSAgID0geyB9CisgICAgICAgIGZvciBzIGluIGxpc3Qoc2VsZi5UZXJtaW5hbHMpICsgbGlzdChzZWxmLk5vbnRlcm1pbmFscyk6CisgICAgICAgICAgICByZWFjaGFibGVbc10gPSAwCisKKyAgICAgICAgbWFya19yZWFjaGFibGVfZnJvbSggc2VsZi5Qcm9kdWN0aW9uc1swXS5wcm9kWzBdICkKKworICAgICAgICByZXR1cm4gW3MgZm9yIHMgaW4gbGlzdChzZWxmLk5vbnRlcm1pbmFscykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFjaGFibGVbc11dCisgICAgCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgaW5maW5pdGVfY3ljbGVzKCkKKyAgICAjCisgICAgIyBUaGlzIGZ1bmN0aW9uIGxvb2tzIGF0IHRoZSB2YXJpb3VzIHBhcnNpbmcgcnVsZXMgYW5kIHRyaWVzIHRvIGRldGVjdAorICAgICMgaW5maW5pdGUgcmVjdXJzaW9uIGN5Y2xlcyAoZ3JhbW1hciBydWxlcyB3aGVyZSB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkKKyAgICAjIHRvIGRlcml2ZSBhIHN0cmluZyBvZiBvbmx5IHRlcm1pbmFscykuCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGluZmluaXRlX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgdGVybWluYXRlcyA9IHt9CisKKyAgICAgICAgIyBUZXJtaW5hbHM6CisgICAgICAgIGZvciB0IGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgdGVybWluYXRlc1t0XSA9IDEKKworICAgICAgICB0ZXJtaW5hdGVzWyckZW5kJ10gPSAxCisKKyAgICAgICAgIyBOb250ZXJtaW5hbHM6CisKKyAgICAgICAgIyBJbml0aWFsaXplIHRvIGZhbHNlOgorICAgICAgICBmb3IgbiBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHRlcm1pbmF0ZXNbbl0gPSAwCisKKyAgICAgICAgIyBUaGVuIHByb3BhZ2F0ZSB0ZXJtaW5hdGlvbiB1bnRpbCBubyBjaGFuZ2U6CisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDAKKyAgICAgICAgICAgIGZvciAobixwbCkgaW4gc2VsZi5Qcm9kbmFtZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAjIE5vbnRlcm1pbmFsIG4gdGVybWluYXRlcyBpZmYgYW55IG9mIGl0cyBwcm9kdWN0aW9ucyB0ZXJtaW5hdGVzLgorICAgICAgICAgICAgICAgIGZvciBwIGluIHBsOgorICAgICAgICAgICAgICAgICAgICAjIFByb2R1Y3Rpb24gcCB0ZXJtaW5hdGVzIGlmZiBhbGwgb2YgaXRzIHJocyBzeW1ib2xzIHRlcm1pbmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gcC5wcm9kOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRlcm1pbmF0ZXNbc106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3ltYm9sIHMgZG9lcyBub3QgdGVybWluYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc28gcHJvZHVjdGlvbiBwIGRvZXMgbm90IHRlcm1pbmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX3Rlcm1pbmF0ZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZGlkbid0IGJyZWFrIGZyb20gdGhlIGxvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNvIGV2ZXJ5IHN5bWJvbCBzIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc28gcHJvZHVjdGlvbiBwIHRlcm1pbmF0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBwX3Rlcm1pbmF0ZXMgPSAxCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcF90ZXJtaW5hdGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBzeW1ib2wgbiB0ZXJtaW5hdGVzIQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRlcm1pbmF0ZXNbbl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlc1tuXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgbmVlZCB0byBjb25zaWRlciBhbnkgbW9yZSBwcm9kdWN0aW9ucyBmb3IgdGhpcyBuLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IHNvbWVfY2hhbmdlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaW5maW5pdGUgPSBbXQorICAgICAgICBmb3IgKHMsdGVybSkgaW4gdGVybWluYXRlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IHRlcm06CisgICAgICAgICAgICAgICAgaWYgbm90IHMgaW4gc2VsZi5Qcm9kbmFtZXMgYW5kIG5vdCBzIGluIHNlbGYuVGVybWluYWxzIGFuZCBzICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgICMgcyBpcyB1c2VkLWJ1dC1ub3QtZGVmaW5lZCwgYW5kIHdlJ3ZlIGFscmVhZHkgd2FybmVkIG9mIHRoYXQsCisgICAgICAgICAgICAgICAgICAgICMgc28gaXQgd291bGQgYmUgb3ZlcmtpbGwgdG8gc2F5IHRoYXQgaXQncyBhbHNvIG5vbi10ZXJtaW5hdGluZy4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZmluaXRlLmFwcGVuZChzKQorCisgICAgICAgIHJldHVybiBpbmZpbml0ZQorCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyB1bmRlZmluZWRfc3ltYm9scygpCisgICAgIworICAgICMgRmluZCBhbGwgc3ltYm9scyB0aGF0IHdlcmUgdXNlZCB0aGUgZ3JhbW1hciwgYnV0IG5vdCBkZWZpbmVkIGFzIHRva2VucyBvcgorICAgICMgZ3JhbW1hciBydWxlcy4gIFJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyAoc3ltLCBwcm9kKSB3aGVyZSBzeW0gaW4gdGhlIHN5bWJvbAorICAgICMgYW5kIHByb2QgaXMgdGhlIHByb2R1Y3Rpb24gd2hlcmUgdGhlIHN5bWJvbCB3YXMgdXNlZC4gCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiB1bmRlZmluZWRfc3ltYm9scyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kdWN0aW9uczoKKyAgICAgICAgICAgIGlmIG5vdCBwOiBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgcyBpbiBwLnByb2Q6CisgICAgICAgICAgICAgICAgaWYgbm90IHMgaW4gc2VsZi5Qcm9kbmFtZXMgYW5kIG5vdCBzIGluIHNlbGYuVGVybWluYWxzIGFuZCBzICE9ICdlcnJvcic6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHMscCkpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVudXNlZF90ZXJtaW5hbHMoKQorICAgICMKKyAgICAjIEZpbmQgYWxsIHRlcm1pbmFscyB0aGF0IHdlcmUgZGVmaW5lZCwgYnV0IG5vdCB1c2VkIGJ5IHRoZSBncmFtbWFyLiAgUmV0dXJucworICAgICMgYSBsaXN0IG9mIGFsbCBzeW1ib2xzLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgdW51c2VkX3Rlcm1pbmFscyhzZWxmKToKKyAgICAgICAgdW51c2VkX3RvayA9IFtdCisgICAgICAgIGZvciBzLHYgaW4gc2VsZi5UZXJtaW5hbHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHMgIT0gJ2Vycm9yJyBhbmQgbm90IHY6CisgICAgICAgICAgICAgICAgdW51c2VkX3Rvay5hcHBlbmQocykKKworICAgICAgICByZXR1cm4gdW51c2VkX3RvaworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVudXNlZF9ydWxlcygpCisgICAgIworICAgICMgRmluZCBhbGwgZ3JhbW1hciBydWxlcyB0aGF0IHdlcmUgZGVmaW5lZCwgIGJ1dCBub3QgdXNlZCAobWF5YmUgbm90IHJlYWNoYWJsZSkKKyAgICAjIFJldHVybnMgYSBsaXN0IG9mIHByb2R1Y3Rpb25zLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdW51c2VkX3J1bGVzKHNlbGYpOgorICAgICAgICB1bnVzZWRfcHJvZCA9IFtdCisgICAgICAgIGZvciBzLHYgaW4gc2VsZi5Ob250ZXJtaW5hbHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2OgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLlByb2RuYW1lc1tzXVswXQorICAgICAgICAgICAgICAgIHVudXNlZF9wcm9kLmFwcGVuZChwKQorICAgICAgICByZXR1cm4gdW51c2VkX3Byb2QKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHVudXNlZF9wcmVjZWRlbmNlKCkKKyAgICAjCisgICAgIyBSZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgKHRlcm0scHJlY2VkZW5jZSkgY29ycmVzcG9uZGluZyB0byBwcmVjZWRlbmNlCisgICAgIyBydWxlcyB0aGF0IHdlcmUgbmV2ZXIgdXNlZCBieSB0aGUgZ3JhbW1hci4gIHRlcm0gaXMgdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsCisgICAgIyBvbiB3aGljaCBwcmVjZWRlbmNlIHdhcyBhcHBsaWVkIGFuZCBwcmVjZWRlbmNlIGlzIGEgc3RyaW5nIHN1Y2ggYXMgJ2xlZnQnIG9yCisgICAgIyAncmlnaHQnIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgb2YgcHJlY2VkZW5jZS4gCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHVudXNlZF9wcmVjZWRlbmNlKHNlbGYpOgorICAgICAgICB1bnVzZWQgPSBbXQorICAgICAgICBmb3IgdGVybW5hbWUgaW4gc2VsZi5QcmVjZWRlbmNlOgorICAgICAgICAgICAgaWYgbm90ICh0ZXJtbmFtZSBpbiBzZWxmLlRlcm1pbmFscyBvciB0ZXJtbmFtZSBpbiBzZWxmLlVzZWRQcmVjZWRlbmNlKToKKyAgICAgICAgICAgICAgICB1bnVzZWQuYXBwZW5kKCh0ZXJtbmFtZSxzZWxmLlByZWNlZGVuY2VbdGVybW5hbWVdWzBdKSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHVudXNlZAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBfZmlyc3QoKQorICAgICMKKyAgICAjIENvbXB1dGUgdGhlIHZhbHVlIG9mIEZJUlNUMShiZXRhKSB3aGVyZSBiZXRhIGlzIGEgdHVwbGUgb2Ygc3ltYm9scy4KKyAgICAjCisgICAgIyBEdXJpbmcgZXhlY3V0aW9uIG9mIGNvbXB1dGVfZmlyc3QxLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvbXBsZXRlLgorICAgICMgQWZ0ZXJ3YXJkIChlLmcuLCB3aGVuIGNhbGxlZCBmcm9tIGNvbXB1dGVfZm9sbG93KCkpLCBpdCB3aWxsIGJlIGNvbXBsZXRlLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGRlZiBfZmlyc3Qoc2VsZixiZXRhKToKKworICAgICAgICAjIFdlIGFyZSBjb21wdXRpbmcgRmlyc3QoeDEseDIseDMsLi4uLHhuKQorICAgICAgICByZXN1bHQgPSBbIF0KKyAgICAgICAgZm9yIHggaW4gYmV0YToKKyAgICAgICAgICAgIHhfcHJvZHVjZXNfZW1wdHkgPSAwCisKKyAgICAgICAgICAgICMgQWRkIGFsbCB0aGUgbm9uLTxlbXB0eT4gc3ltYm9scyBvZiBGaXJzdFt4XSB0byB0aGUgcmVzdWx0LgorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5GaXJzdFt4XToKKyAgICAgICAgICAgICAgICBpZiBmID09ICc8ZW1wdHk+JzoKKyAgICAgICAgICAgICAgICAgICAgeF9wcm9kdWNlc19lbXB0eSA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiByZXN1bHQ6IHJlc3VsdC5hcHBlbmQoZikKKworICAgICAgICAgICAgaWYgeF9wcm9kdWNlc19lbXB0eToKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgdG8gY29uc2lkZXIgdGhlIG5leHQgeCBpbiBiZXRhLAorICAgICAgICAgICAgICAgICMgaS5lLiBzdGF5IGluIHRoZSBsb29wLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBoYXZlIHRvIGNvbnNpZGVyIGFueSBmdXJ0aGVyIHN5bWJvbHMgaW4gYmV0YS4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGVyZSB3YXMgbm8gJ2JyZWFrJyBmcm9tIHRoZSBsb29wLAorICAgICAgICAgICAgIyBzbyB4X3Byb2R1Y2VzX2VtcHR5IHdhcyB0cnVlIGZvciBhbGwgeCBpbiBiZXRhLAorICAgICAgICAgICAgIyBzbyBiZXRhIHByb2R1Y2VzIGVtcHR5IGFzIHdlbGwuCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc8ZW1wdHk+JykKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNvbXB1dGVfZmlyc3QoKQorICAgICMKKyAgICAjIENvbXB1dGUgdGhlIHZhbHVlIG9mIEZJUlNUMShYKSBmb3IgYWxsIHN5bWJvbHMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgY29tcHV0ZV9maXJzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5GaXJzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLkZpcnN0CisKKyAgICAgICAgIyBUZXJtaW5hbHM6CisgICAgICAgIGZvciB0IGluIHNlbGYuVGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5GaXJzdFt0XSA9IFt0XQorCisgICAgICAgIHNlbGYuRmlyc3RbJyRlbmQnXSA9IFsnJGVuZCddCisKKyAgICAgICAgIyBOb250ZXJtaW5hbHM6CisKKyAgICAgICAgIyBJbml0aWFsaXplIHRvIHRoZSBlbXB0eSBzZXQ6CisgICAgICAgIGZvciBuIGluIHNlbGYuTm9udGVybWluYWxzOgorICAgICAgICAgICAgc2VsZi5GaXJzdFtuXSA9IFtdCisKKyAgICAgICAgIyBUaGVuIHByb3BhZ2F0ZSBzeW1ib2xzIHVudGlsIG5vIGNoYW5nZToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHNvbWVfY2hhbmdlID0gMAorICAgICAgICAgICAgZm9yIG4gaW4gc2VsZi5Ob250ZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5Qcm9kbmFtZXNbbl06CisgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIHNlbGYuX2ZpcnN0KHAucHJvZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLkZpcnN0W25dOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRmlyc3Rbbl0uYXBwZW5kKCBmICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lX2NoYW5nZSA9IDEKKyAgICAgICAgICAgIGlmIG5vdCBzb21lX2NoYW5nZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHNlbGYuRmlyc3QKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX2ZvbGxvdygpCisgICAgIworICAgICMgQ29tcHV0ZXMgYWxsIG9mIHRoZSBmb2xsb3cgc2V0cyBmb3IgZXZlcnkgbm9uLXRlcm1pbmFsIHN5bWJvbC4gIFRoZQorICAgICMgZm9sbG93IHNldCBpcyB0aGUgc2V0IG9mIGFsbCBzeW1ib2xzIHRoYXQgbWlnaHQgZm9sbG93IGEgZ2l2ZW4KKyAgICAjIG5vbi10ZXJtaW5hbC4gIFNlZSB0aGUgRHJhZ29uIGJvb2ssIDJuZCBFZC4gcC4gMTg5LgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZGVmIGNvbXB1dGVfZm9sbG93KHNlbGYsc3RhcnQ9Tm9uZSk6CisgICAgICAgICMgSWYgYWxyZWFkeSBjb21wdXRlZCwgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgICAgaWYgc2VsZi5Gb2xsb3c6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5Gb2xsb3cKKworICAgICAgICAjIElmIGZpcnN0IHNldHMgbm90IGNvbXB1dGVkIHlldCwgZG8gdGhhdCBmaXJzdC4KKyAgICAgICAgaWYgbm90IHNlbGYuRmlyc3Q6CisgICAgICAgICAgICBzZWxmLmNvbXB1dGVfZmlyc3QoKQorCisgICAgICAgICMgQWRkICckZW5kJyB0byB0aGUgZm9sbG93IGxpc3Qgb2YgdGhlIHN0YXJ0IHN5bWJvbAorICAgICAgICBmb3IgayBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgIHNlbGYuRm9sbG93W2tdID0gWyBdCisKKyAgICAgICAgaWYgbm90IHN0YXJ0OgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLlByb2R1Y3Rpb25zWzFdLm5hbWUKKworICAgICAgICBzZWxmLkZvbGxvd1tzdGFydF0gPSBbICckZW5kJyBdCisKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGRpZGFkZCA9IDAKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuUHJvZHVjdGlvbnNbMTpdOgorICAgICAgICAgICAgICAgICMgSGVyZSBpcyB0aGUgcHJvZHVjdGlvbiBzZXQKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocC5wcm9kKSk6CisgICAgICAgICAgICAgICAgICAgIEIgPSBwLnByb2RbaV0KKyAgICAgICAgICAgICAgICAgICAgaWYgQiBpbiBzZWxmLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgT2theS4gV2UgZ290IGEgbm9uLXRlcm1pbmFsIGluIGEgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZnN0ID0gc2VsZi5fZmlyc3QocC5wcm9kW2krMTpdKQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzZW1wdHkgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZiAhPSAnPGVtcHR5PicgYW5kIGYgbm90IGluIHNlbGYuRm9sbG93W0JdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZvbGxvd1tCXS5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkYWRkID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgPT0gJzxlbXB0eT4nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNlbXB0eSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2VtcHR5IG9yIGkgPT0gKGxlbihwLnByb2QpLTEpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIGVsZW1lbnRzIG9mIGZvbGxvdyhhKSB0byBmb2xsb3coYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiBzZWxmLkZvbGxvd1twLm5hbWVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmIG5vdCBpbiBzZWxmLkZvbGxvd1tCXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRm9sbG93W0JdLmFwcGVuZChmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkYWRkID0gMQorICAgICAgICAgICAgaWYgbm90IGRpZGFkZDogYnJlYWsKKyAgICAgICAgcmV0dXJuIHNlbGYuRm9sbG93CisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGJ1aWxkX2xyaXRlbXMoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMgYW5kIGJ1aWxkcyBhIGNvbXBsZXRlIHNldCBvZiB0aGUKKyAgICAjIExSIGl0ZW1zLiAgVGhlIExSIGl0ZW1zIGFyZSBzdG9yZWQgaW4gdHdvIHdheXM6ICBGaXJzdCwgdGhleSBhcmUgdW5pcXVlbHkKKyAgICAjIG51bWJlcmVkIGFuZCBwbGFjZWQgaW4gdGhlIGxpc3QgX2xyaXRlbXMuICBTZWNvbmQsIGEgbGlua2VkIGxpc3Qgb2YgTFIgaXRlbXMKKyAgICAjIGlzIGJ1aWx0IGZvciBlYWNoIHByb2R1Y3Rpb24uICBGb3IgZXhhbXBsZToKKyAgICAjCisgICAgIyAgIEUgLT4gRSBQTFVTIEUKKyAgICAjCisgICAgIyBDcmVhdGVzIHRoZSBsaXN0CisgICAgIworICAgICMgIFtFIC0+IC4gRSBQTFVTIEUsIEUgLT4gRSAuIFBMVVMgRSwgRSAtPiBFIFBMVVMgLiBFLCBFIC0+IEUgUExVUyBFIC4gXQorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBidWlsZF9scml0ZW1zKHNlbGYpOgorICAgICAgICBmb3IgcCBpbiBzZWxmLlByb2R1Y3Rpb25zOgorICAgICAgICAgICAgbGFzdGxyaSA9IHAKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBscl9pdGVtcyA9IFtdCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIGkgPiBsZW4ocCk6CisgICAgICAgICAgICAgICAgICAgIGxyaSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBscmkgPSBMUkl0ZW0ocCxpKQorICAgICAgICAgICAgICAgICAgICAjIFByZWNvbXB1dGUgdGhlIGxpc3Qgb2YgcHJvZHVjdGlvbnMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxyaS5scl9hZnRlciA9IHNlbGYuUHJvZG5hbWVzW2xyaS5wcm9kW2krMV1dCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW5kZXhFcnJvcixLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBscmkubHJfYWZ0ZXIgPSBbXQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBscmkubHJfYmVmb3JlID0gbHJpLnByb2RbaS0xXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxyaS5scl9iZWZvcmUgPSBOb25lCisKKyAgICAgICAgICAgICAgICBsYXN0bHJpLmxyX25leHQgPSBscmkKKyAgICAgICAgICAgICAgICBpZiBub3QgbHJpOiBicmVhaworICAgICAgICAgICAgICAgIGxyX2l0ZW1zLmFwcGVuZChscmkpCisgICAgICAgICAgICAgICAgbGFzdGxyaSA9IGxyaQorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgcC5scl9pdGVtcyA9IGxyX2l0ZW1zCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQ2xhc3MgTFJUYWJsZSA9PQorIworIyBUaGlzIGJhc2ljIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNpYyB0YWJsZSBvZiBMUiBwYXJzaW5nIGluZm9ybWF0aW9uLiAgCisjIE1ldGhvZHMgZm9yIGdlbmVyYXRpbmcgdGhlIHRhYmxlcyBhcmUgbm90IGRlZmluZWQgaGVyZS4gIFRoZXkgYXJlIGRlZmluZWQKKyMgaW4gdGhlIGRlcml2ZWQgY2xhc3MgTFJHZW5lcmF0ZWRUYWJsZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVmVyc2lvbkVycm9yKFlhY2NFcnJvcik6IHBhc3MKKworY2xhc3MgTFJUYWJsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5scl9hY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYubHJfZ290byA9IE5vbmUKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyA9IE5vbmUKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBOb25lCisKKyAgICBkZWYgcmVhZF90YWJsZShzZWxmLG1vZHVsZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgcGFyc2V0YWIgPSBtb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBwYXJzZXRhYiIgJSBtb2R1bGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudiA9IHsgfQorICAgICAgICAgICAgICAgIGV4ZWMoImltcG9ydCAlcyBhcyBwYXJzZXRhYiIgJSBtb2R1bGUsIGVudiwgZW52KQorICAgICAgICAgICAgICAgIHBhcnNldGFiID0gZW52WydwYXJzZXRhYiddCisKKyAgICAgICAgaWYgcGFyc2V0YWIuX3RhYnZlcnNpb24gIT0gX190YWJ2ZXJzaW9uX186CisgICAgICAgICAgICByYWlzZSBWZXJzaW9uRXJyb3IoInlhY2MgdGFibGUgZmlsZSB2ZXJzaW9uIGlzIG91dCBvZiBkYXRlIikKKworICAgICAgICBzZWxmLmxyX2FjdGlvbiA9IHBhcnNldGFiLl9scl9hY3Rpb24KKyAgICAgICAgc2VsZi5scl9nb3RvID0gcGFyc2V0YWIuX2xyX2dvdG8KKworICAgICAgICBzZWxmLmxyX3Byb2R1Y3Rpb25zID0gW10KKyAgICAgICAgZm9yIHAgaW4gcGFyc2V0YWIuX2xyX3Byb2R1Y3Rpb25zOgorICAgICAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucy5hcHBlbmQoTWluaVByb2R1Y3Rpb24oKnApKQorCisgICAgICAgIHNlbGYubHJfbWV0aG9kID0gcGFyc2V0YWIuX2xyX21ldGhvZAorICAgICAgICByZXR1cm4gcGFyc2V0YWIuX2xyX3NpZ25hdHVyZQorCisgICAgZGVmIHJlYWRfcGlja2xlKHNlbGYsZmlsZW5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHBpY2tsZQorCisgICAgICAgIGluX2YgPSBvcGVuKGZpbGVuYW1lLCJyYiIpCisKKyAgICAgICAgdGFidmVyc2lvbiA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIGlmIHRhYnZlcnNpb24gIT0gX190YWJ2ZXJzaW9uX186CisgICAgICAgICAgICByYWlzZSBWZXJzaW9uRXJyb3IoInlhY2MgdGFibGUgZmlsZSB2ZXJzaW9uIGlzIG91dCBvZiBkYXRlIikKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBzaWduYXR1cmUgICAgICA9IHBpY2tsZS5sb2FkKGluX2YpCisgICAgICAgIHNlbGYubHJfYWN0aW9uID0gcGlja2xlLmxvYWQoaW5fZikKKyAgICAgICAgc2VsZi5scl9nb3RvICAgPSBwaWNrbGUubG9hZChpbl9mKQorICAgICAgICBwcm9kdWN0aW9ucyAgICA9IHBpY2tsZS5sb2FkKGluX2YpCisKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGZvciBwIGluIHByb2R1Y3Rpb25zOgorICAgICAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucy5hcHBlbmQoTWluaVByb2R1Y3Rpb24oKnApKQorCisgICAgICAgIGluX2YuY2xvc2UoKQorICAgICAgICByZXR1cm4gc2lnbmF0dXJlCisKKyAgICAjIEJpbmQgYWxsIHByb2R1Y3Rpb24gZnVuY3Rpb24gbmFtZXMgdG8gY2FsbGFibGUgb2JqZWN0cyBpbiBwZGljdAorICAgIGRlZiBiaW5kX2NhbGxhYmxlcyhzZWxmLHBkaWN0KToKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5scl9wcm9kdWN0aW9uczoKKyAgICAgICAgICAgIHAuYmluZChwZGljdCkKKyAgICAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gTFIgR2VuZXJhdG9yID09PQorIworIyBUaGUgZm9sbG93aW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBnZW5lcmF0ZSBMUiBwYXJzaW5nIHRhYmxlcyBvbiAKKyMgYSBncmFtbWFyLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGRpZ3JhcGgoKQorIyB0cmF2ZXJzZSgpCisjCisjIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjb21wdXRlIHNldCB2YWx1ZWQgZnVuY3Rpb25zCisjIG9mIHRoZSBmb3JtOgorIworIyAgICAgRih4KSA9IEYnKHgpIFUgVXtGKHkpIHwgeCBSIHl9CisjCisjIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZSB2YWx1ZXMgb2YgUmVhZCgpIHNldHMgYXMgd2VsbCBhcyBGT0xMT1cgc2V0cworIyBpbiBMQUxSKDEpIGdlbmVyYXRpb24uCisjCisjIElucHV0czogIFggICAgLSBBbiBpbnB1dCBzZXQKKyMgICAgICAgICAgUiAgICAtIEEgcmVsYXRpb24KKyMgICAgICAgICAgRlAgICAtIFNldC12YWx1ZWQgZnVuY3Rpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBkaWdyYXBoKFgsUixGUCk6CisgICAgTiA9IHsgfQorICAgIGZvciB4IGluIFg6CisgICAgICAgTlt4XSA9IDAKKyAgICBzdGFjayA9IFtdCisgICAgRiA9IHsgfQorICAgIGZvciB4IGluIFg6CisgICAgICAgIGlmIE5beF0gPT0gMDogdHJhdmVyc2UoeCxOLHN0YWNrLEYsWCxSLEZQKQorICAgIHJldHVybiBGCisKK2RlZiB0cmF2ZXJzZSh4LE4sc3RhY2ssRixYLFIsRlApOgorICAgIHN0YWNrLmFwcGVuZCh4KQorICAgIGQgPSBsZW4oc3RhY2spCisgICAgTlt4XSA9IGQKKyAgICBGW3hdID0gRlAoeCkgICAgICAgICAgICAgIyBGKFgpIDwtIEYnKHgpCisKKyAgICByZWwgPSBSKHgpICAgICAgICAgICAgICAgIyBHZXQgeSdzIHJlbGF0ZWQgdG8geAorICAgIGZvciB5IGluIHJlbDoKKyAgICAgICAgaWYgTlt5XSA9PSAwOgorICAgICAgICAgICAgIHRyYXZlcnNlKHksTixzdGFjayxGLFgsUixGUCkKKyAgICAgICAgTlt4XSA9IG1pbihOW3hdLE5beV0pCisgICAgICAgIGZvciBhIGluIEYuZ2V0KHksW10pOgorICAgICAgICAgICAgaWYgYSBub3QgaW4gRlt4XTogRlt4XS5hcHBlbmQoYSkKKyAgICBpZiBOW3hdID09IGQ6CisgICAgICAgTltzdGFja1stMV1dID0gTUFYSU5UCisgICAgICAgRltzdGFja1stMV1dID0gRlt4XQorICAgICAgIGVsZW1lbnQgPSBzdGFjay5wb3AoKQorICAgICAgIHdoaWxlIGVsZW1lbnQgIT0geDoKKyAgICAgICAgICAgTltzdGFja1stMV1dID0gTUFYSU5UCisgICAgICAgICAgIEZbc3RhY2tbLTFdXSA9IEZbeF0KKyAgICAgICAgICAgZWxlbWVudCA9IHN0YWNrLnBvcCgpCisKK2NsYXNzIExBTFJFcnJvcihZYWNjRXJyb3IpOiBwYXNzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IExSR2VuZXJhdGVkVGFibGUgPT0KKyMKKyMgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBMUiB0YWJsZSBnZW5lcmF0aW9uIGFsZ29yaXRobS4gIFRoZXJlIGFyZSBubworIyBwdWJsaWMgbWV0aG9kcyBleGNlcHQgZm9yIHdyaXRlKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTFJHZW5lcmF0ZWRUYWJsZShMUlRhYmxlKToKKyAgICBkZWYgX19pbml0X18oc2VsZixncmFtbWFyLG1ldGhvZD0nTEFMUicsbG9nPU5vbmUpOgorICAgICAgICBpZiBtZXRob2Qgbm90IGluIFsnU0xSJywnTEFMUiddOgorICAgICAgICAgICAgcmFpc2UgTEFMUkVycm9yKCJVbnN1cHBvcnRlZCBtZXRob2QgJXMiICUgbWV0aG9kKQorCisgICAgICAgIHNlbGYuZ3JhbW1hciA9IGdyYW1tYXIKKyAgICAgICAgc2VsZi5scl9tZXRob2QgPSBtZXRob2QKKworICAgICAgICAjIFNldCB1cCB0aGUgbG9nZ2VyCisgICAgICAgIGlmIG5vdCBsb2c6CisgICAgICAgICAgICBsb2cgPSBOdWxsTG9nZ2VyKCkKKyAgICAgICAgc2VsZi5sb2cgPSBsb2cKKworICAgICAgICAjIEludGVybmFsIGF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi5scl9hY3Rpb24gICAgID0ge30gICAgICAgICMgQWN0aW9uIHRhYmxlCisgICAgICAgIHNlbGYubHJfZ290byAgICAgICA9IHt9ICAgICAgICAjIEdvdG8gdGFibGUKKyAgICAgICAgc2VsZi5scl9wcm9kdWN0aW9ucyAgPSBncmFtbWFyLlByb2R1Y3Rpb25zICAgICMgQ29weSBvZiBncmFtbWFyIFByb2R1Y3Rpb24gYXJyYXkKKyAgICAgICAgc2VsZi5scl9nb3RvX2NhY2hlID0ge30gICAgICAgICMgQ2FjaGUgb2YgY29tcHV0ZWQgZ290b3MKKyAgICAgICAgc2VsZi5scjBfY2lkaGFzaCAgID0ge30gICAgICAgICMgQ2FjaGUgb2YgY2xvc3VyZXMKKworICAgICAgICBzZWxmLl9hZGRfY291bnQgICAgPSAwICAgICAgICAgIyBJbnRlcm5hbCBjb3VudGVyIHVzZWQgdG8gZGV0ZWN0IGN5Y2xlcworCisgICAgICAgICMgRGlhZ29uaXN0aWMgaW5mb3JtYXRpb24gZmlsbGVkIGluIGJ5IHRoZSB0YWJsZSBnZW5lcmF0b3IKKyAgICAgICAgc2VsZi5zcl9jb25mbGljdCAgID0gMAorICAgICAgICBzZWxmLnJyX2NvbmZsaWN0ICAgPSAwCisgICAgICAgIHNlbGYuY29uZmxpY3RzICAgICA9IFtdICAgICAgICAjIExpc3Qgb2YgY29uZmxpY3RzCisKKyAgICAgICAgc2VsZi5zcl9jb25mbGljdHMgID0gW10KKyAgICAgICAgc2VsZi5ycl9jb25mbGljdHMgID0gW10KKworICAgICAgICAjIEJ1aWxkIHRoZSB0YWJsZXMKKyAgICAgICAgc2VsZi5ncmFtbWFyLmJ1aWxkX2xyaXRlbXMoKQorICAgICAgICBzZWxmLmdyYW1tYXIuY29tcHV0ZV9maXJzdCgpCisgICAgICAgIHNlbGYuZ3JhbW1hci5jb21wdXRlX2ZvbGxvdygpCisgICAgICAgIHNlbGYubHJfcGFyc2VfdGFibGUoKQorCisgICAgIyBDb21wdXRlIHRoZSBMUigwKSBjbG9zdXJlIG9wZXJhdGlvbiBvbiBJLCB3aGVyZSBJIGlzIGEgc2V0IG9mIExSKDApIGl0ZW1zLgorCisgICAgZGVmIGxyMF9jbG9zdXJlKHNlbGYsSSk6CisgICAgICAgIHNlbGYuX2FkZF9jb3VudCArPSAxCisKKyAgICAgICAgIyBBZGQgZXZlcnl0aGluZyBpbiBJIHRvIEoKKyAgICAgICAgSiA9IElbOl0KKyAgICAgICAgZGlkYWRkID0gMQorICAgICAgICB3aGlsZSBkaWRhZGQ6CisgICAgICAgICAgICBkaWRhZGQgPSAwCisgICAgICAgICAgICBmb3IgaiBpbiBKOgorICAgICAgICAgICAgICAgIGZvciB4IGluIGoubHJfYWZ0ZXI6CisgICAgICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoeCwibHIwX2FkZGVkIiwwKSA9PSBzZWxmLl9hZGRfY291bnQ6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQWRkIEIgLS0+IC5HIHRvIEoKKyAgICAgICAgICAgICAgICAgICAgSi5hcHBlbmQoeC5scl9uZXh0KQorICAgICAgICAgICAgICAgICAgICB4LmxyMF9hZGRlZCA9IHNlbGYuX2FkZF9jb3VudAorICAgICAgICAgICAgICAgICAgICBkaWRhZGQgPSAxCisKKyAgICAgICAgcmV0dXJuIEoKKworICAgICMgQ29tcHV0ZSB0aGUgTFIoMCkgZ290byBmdW5jdGlvbiBnb3RvKEksWCkgd2hlcmUgSSBpcyBhIHNldAorICAgICMgb2YgTFIoMCkgaXRlbXMgYW5kIFggaXMgYSBncmFtbWFyIHN5bWJvbC4gICBUaGlzIGZ1bmN0aW9uIGlzIHdyaXR0ZW4KKyAgICAjIGluIGEgd2F5IHRoYXQgZ3VhcmFudGVlcyB1bmlxdWVuZXNzIG9mIHRoZSBnZW5lcmF0ZWQgZ290byBzZXRzCisgICAgIyAoaS5lLiB0aGUgc2FtZSBnb3RvIHNldCB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGFzIHR3byBkaWZmZXJlbnQgUHl0aG9uCisgICAgIyBvYmplY3RzKS4gIFdpdGggdW5pcXVlbmVzcywgd2UgY2FuIGxhdGVyIGRvIGZhc3Qgc2V0IGNvbXBhcmlzb25zIHVzaW5nCisgICAgIyBpZChvYmopIGluc3RlYWQgb2YgZWxlbWVudC13aXNlIGNvbXBhcmlzb24uCisKKyAgICBkZWYgbHIwX2dvdG8oc2VsZixJLHgpOgorICAgICAgICAjIEZpcnN0IHdlIGxvb2sgZm9yIGEgcHJldmlvdXNseSBjYWNoZWQgZW50cnkKKyAgICAgICAgZyA9IHNlbGYubHJfZ290b19jYWNoZS5nZXQoKGlkKEkpLHgpLE5vbmUpCisgICAgICAgIGlmIGc6IHJldHVybiBnCisKKyAgICAgICAgIyBOb3cgd2UgZ2VuZXJhdGUgdGhlIGdvdG8gc2V0IGluIGEgd2F5IHRoYXQgZ3VhcmFudGVlcyB1bmlxdWVuZXNzCisgICAgICAgICMgb2YgdGhlIHJlc3VsdAorCisgICAgICAgIHMgPSBzZWxmLmxyX2dvdG9fY2FjaGUuZ2V0KHgsTm9uZSkKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICBzID0geyB9CisgICAgICAgICAgICBzZWxmLmxyX2dvdG9fY2FjaGVbeF0gPSBzCisKKyAgICAgICAgZ3MgPSBbIF0KKyAgICAgICAgZm9yIHAgaW4gSToKKyAgICAgICAgICAgIG4gPSBwLmxyX25leHQKKyAgICAgICAgICAgIGlmIG4gYW5kIG4ubHJfYmVmb3JlID09IHg6CisgICAgICAgICAgICAgICAgczEgPSBzLmdldChpZChuKSxOb25lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzMToKKyAgICAgICAgICAgICAgICAgICAgczEgPSB7IH0KKyAgICAgICAgICAgICAgICAgICAgc1tpZChuKV0gPSBzMQorICAgICAgICAgICAgICAgIGdzLmFwcGVuZChuKQorICAgICAgICAgICAgICAgIHMgPSBzMQorICAgICAgICBnID0gcy5nZXQoJyRlbmQnLE5vbmUpCisgICAgICAgIGlmIG5vdCBnOgorICAgICAgICAgICAgaWYgZ3M6CisgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2Nsb3N1cmUoZ3MpCisgICAgICAgICAgICAgICAgc1snJGVuZCddID0gZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzWyckZW5kJ10gPSBncworICAgICAgICBzZWxmLmxyX2dvdG9fY2FjaGVbKGlkKEkpLHgpXSA9IGcKKyAgICAgICAgcmV0dXJuIGcKKworICAgICMgQ29tcHV0ZSB0aGUgTFIoMCkgc2V0cyBvZiBpdGVtIGZ1bmN0aW9uCisgICAgZGVmIGxyMF9pdGVtcyhzZWxmKToKKworICAgICAgICBDID0gWyBzZWxmLmxyMF9jbG9zdXJlKFtzZWxmLmdyYW1tYXIuUHJvZHVjdGlvbnNbMF0ubHJfbmV4dF0pIF0KKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIEkgaW4gQzoKKyAgICAgICAgICAgIHNlbGYubHIwX2NpZGhhc2hbaWQoSSldID0gaQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyBMb29wIG92ZXIgdGhlIGl0ZW1zIGluIEMgYW5kIGVhY2ggZ3JhbW1hciBzeW1ib2xzCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4oQyk6CisgICAgICAgICAgICBJID0gQ1tpXQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgICMgQ29sbGVjdCBhbGwgb2YgdGhlIHN5bWJvbHMgdGhhdCBjb3VsZCBwb3NzaWJseSBiZSBpbiB0aGUgZ290byhJLFgpIHNldHMKKyAgICAgICAgICAgIGFzeW1zID0geyB9CisgICAgICAgICAgICBmb3IgaWkgaW4gSToKKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBpaS51c3ltczoKKyAgICAgICAgICAgICAgICAgICAgYXN5bXNbc10gPSBOb25lCisKKyAgICAgICAgICAgIGZvciB4IGluIGFzeW1zOgorICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKEkseCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZzogIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgaWQoZykgaW4gc2VsZi5scjBfY2lkaGFzaDogY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmxyMF9jaWRoYXNoW2lkKGcpXSA9IGxlbihDKQorICAgICAgICAgICAgICAgIEMuYXBwZW5kKGcpCisKKyAgICAgICAgcmV0dXJuIEMKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjICAgICAgICAgICAgICAgICAgICAgICA9PT09IExBTFIoMSkgUGFyc2luZyA9PT09CisgICAgIworICAgICMgTEFMUigxKSBwYXJzaW5nIGlzIGFsbW9zdCBleGFjdGx5IHRoZSBzYW1lIGFzIFNMUiBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mCisgICAgIyByZWx5aW5nIHVwb24gRm9sbG93KCkgc2V0cyB3aGVuIHBlcmZvcm1pbmcgcmVkdWN0aW9ucywgYSBtb3JlIHNlbGVjdGl2ZQorICAgICMgbG9va2FoZWFkIHNldCB0aGF0IGluY29ycG9yYXRlcyB0aGUgc3RhdGUgb2YgdGhlIExSKDApIG1hY2hpbmUgaXMgdXRpbGl6ZWQuCisgICAgIyBUaHVzLCB3ZSBtYWlubHkganVzdCBoYXZlIHRvIGZvY3VzIG9uIGNhbGN1bGF0aW5nIHRoZSBsb29rYWhlYWQgc2V0cy4KKyAgICAjCisgICAgIyBUaGUgbWV0aG9kIHVzZWQgaGVyZSBpcyBkdWUgdG8gRGVSZW1lciBhbmQgUGVubmVsbyAoMTk4MikuCisgICAgIworICAgICMgRGVSZW1lciwgRi4gTC4sIGFuZCBULiBKLiBQZW5uZWxvOiAiRWZmaWNpZW50IENvbXB1dGF0aW9uIG9mIExBTFIoMSkKKyAgICAjICAgICBMb29rYWhlYWQgU2V0cyIsIEFDTSBUcmFuc2FjdGlvbnMgb24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIGFuZCBTeXN0ZW1zLAorICAgICMgICAgIFZvbC4gNCwgTm8uIDQsIE9jdC4gMTk4MiwgcHAuIDYxNS02NDkKKyAgICAjCisgICAgIyBGdXJ0aGVyIGRldGFpbHMgY2FuIGFsc28gYmUgZm91bmQgaW46CisgICAgIworICAgICMgIEouIFRyZW1ibGF5IGFuZCBQLiBTb3JlbnNvbiwgIlRoZSBUaGVvcnkgYW5kIFByYWN0aWNlIG9mIENvbXBpbGVyIFdyaXRpbmciLAorICAgICMgICAgICBNY0dyYXctSGlsbCBCb29rIENvbXBhbnksICgxOTg1KS4KKyAgICAjCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9udWxsYWJsZV9ub250ZXJtaW5hbHMoKQorICAgICMKKyAgICAjIENyZWF0ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBub24tdGVybWluYWxzIHRoYXQgbWlnaHQgcHJvZHVjZQorICAgICMgYW4gZW1wdHkgcHJvZHVjdGlvbi4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgY29tcHV0ZV9udWxsYWJsZV9ub250ZXJtaW5hbHMoc2VsZik6CisgICAgICAgIG51bGxhYmxlID0ge30KKyAgICAgICAgbnVtX251bGxhYmxlID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmdyYW1tYXIuUHJvZHVjdGlvbnNbMTpdOgorICAgICAgICAgICAgICAgaWYgcC5sZW4gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbnVsbGFibGVbcC5uYW1lXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgIGZvciB0IGluIHAucHJvZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHQgaW4gbnVsbGFibGU6IGJyZWFrCisgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudWxsYWJsZVtwLm5hbWVdID0gMQorICAgICAgICAgICBpZiBsZW4obnVsbGFibGUpID09IG51bV9udWxsYWJsZTogYnJlYWsKKyAgICAgICAgICAgbnVtX251bGxhYmxlID0gbGVuKG51bGxhYmxlKQorICAgICAgICByZXR1cm4gbnVsbGFibGUKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGZpbmRfbm9udGVybWluYWxfdHJhbnMoQykKKyAgICAjCisgICAgIyBHaXZlbiBhIHNldCBvZiBMUigwKSBpdGVtcywgdGhpcyBmdW5jdGlvbnMgZmluZHMgYWxsIG9mIHRoZSBub24tdGVybWluYWwKKyAgICAjIHRyYW5zaXRpb25zLiAgICBUaGVzZSBhcmUgdHJhbnNpdGlvbnMgaW4gd2hpY2ggYSBkb3QgYXBwZWFycyBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAjIGEgbm9uLXRlcm1pbmFsLiAgIFJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyBvZiB0aGUgZm9ybSAoc3RhdGUsTikgd2hlcmUgc3RhdGUKKyAgICAjIGlzIHRoZSBzdGF0ZSBudW1iZXIgYW5kIE4gaXMgdGhlIG5vbnRlcm1pbmFsIHN5bWJvbC4KKyAgICAjCisgICAgIyBUaGUgaW5wdXQgQyBpcyB0aGUgc2V0IG9mIExSKDApIGl0ZW1zLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBmaW5kX25vbnRlcm1pbmFsX3RyYW5zaXRpb25zKHNlbGYsQyk6CisgICAgICAgICB0cmFucyA9IFtdCisgICAgICAgICBmb3Igc3RhdGUgaW4gcmFuZ2UobGVuKEMpKToKKyAgICAgICAgICAgICBmb3IgcCBpbiBDW3N0YXRlXToKKyAgICAgICAgICAgICAgICAgaWYgcC5scl9pbmRleCA8IHAubGVuIC0gMToKKyAgICAgICAgICAgICAgICAgICAgICB0ID0gKHN0YXRlLHAucHJvZFtwLmxyX2luZGV4KzFdKQorICAgICAgICAgICAgICAgICAgICAgIGlmIHRbMV0gaW4gc2VsZi5ncmFtbWFyLk5vbnRlcm1pbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0IG5vdCBpbiB0cmFuczogdHJhbnMuYXBwZW5kKHQpCisgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZSArIDEKKyAgICAgICAgIHJldHVybiB0cmFucworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgZHJfcmVsYXRpb24oKQorICAgICMKKyAgICAjIENvbXB1dGVzIHRoZSBEUihwLEEpIHJlbGF0aW9uc2hpcHMgZm9yIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucy4gIFRoZSBpbnB1dAorICAgICMgaXMgYSB0dXBsZSAoc3RhdGUsTikgd2hlcmUgc3RhdGUgaXMgYSBudW1iZXIgYW5kIE4gaXMgYSBub250ZXJtaW5hbCBzeW1ib2wuCisgICAgIworICAgICMgUmV0dXJucyBhIGxpc3Qgb2YgdGVybWluYWxzLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBkcl9yZWxhdGlvbihzZWxmLEMsdHJhbnMsbnVsbGFibGUpOgorICAgICAgICBkcl9zZXQgPSB7IH0KKyAgICAgICAgc3RhdGUsTiA9IHRyYW5zCisgICAgICAgIHRlcm1zID0gW10KKworICAgICAgICBnID0gc2VsZi5scjBfZ290byhDW3N0YXRlXSxOKQorICAgICAgICBmb3IgcCBpbiBnOgorICAgICAgICAgICBpZiBwLmxyX2luZGV4IDwgcC5sZW4gLSAxOgorICAgICAgICAgICAgICAgYSA9IHAucHJvZFtwLmxyX2luZGV4KzFdCisgICAgICAgICAgICAgICBpZiBhIGluIHNlbGYuZ3JhbW1hci5UZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gdGVybXM6IHRlcm1zLmFwcGVuZChhKQorCisgICAgICAgICMgVGhpcyBleHRyYSBiaXQgaXMgdG8gaGFuZGxlIHRoZSBzdGFydCBzdGF0ZQorICAgICAgICBpZiBzdGF0ZSA9PSAwIGFuZCBOID09IHNlbGYuZ3JhbW1hci5Qcm9kdWN0aW9uc1swXS5wcm9kWzBdOgorICAgICAgICAgICB0ZXJtcy5hcHBlbmQoJyRlbmQnKQorCisgICAgICAgIHJldHVybiB0ZXJtcworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgcmVhZHNfcmVsYXRpb24oKQorICAgICMKKyAgICAjIENvbXB1dGVzIHRoZSBSRUFEUygpIHJlbGF0aW9uIChwLEEpIFJFQURTICh0LEMpLgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiByZWFkc19yZWxhdGlvbihzZWxmLEMsIHRyYW5zLCBlbXB0eSk6CisgICAgICAgICMgTG9vayBmb3IgZW1wdHkgdHJhbnNpdGlvbnMKKyAgICAgICAgcmVsID0gW10KKyAgICAgICAgc3RhdGUsIE4gPSB0cmFucworCisgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKENbc3RhdGVdLE4pCisgICAgICAgIGogPSBzZWxmLmxyMF9jaWRoYXNoLmdldChpZChnKSwtMSkKKyAgICAgICAgZm9yIHAgaW4gZzoKKyAgICAgICAgICAgIGlmIHAubHJfaW5kZXggPCBwLmxlbiAtIDE6CisgICAgICAgICAgICAgICAgIGEgPSBwLnByb2RbcC5scl9pbmRleCArIDFdCisgICAgICAgICAgICAgICAgIGlmIGEgaW4gZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgcmVsLmFwcGVuZCgoaixhKSkKKworICAgICAgICByZXR1cm4gcmVsCisKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBjb21wdXRlX2xvb2tiYWNrX2luY2x1ZGVzKCkKKyAgICAjCisgICAgIyBEZXRlcm1pbmVzIHRoZSBsb29rYmFjayBhbmQgaW5jbHVkZXMgcmVsYXRpb25zCisgICAgIworICAgICMgTE9PS0JBQ0s6CisgICAgIworICAgICMgVGhpcyByZWxhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHJ1bm5pbmcgdGhlIExSKDApIHN0YXRlIG1hY2hpbmUgZm9yd2FyZC4KKyAgICAjIEZvciBleGFtcGxlLCBzdGFydGluZyB3aXRoIGEgcHJvZHVjdGlvbiAiTiA6IC4gQSBCIEMiLCB3ZSBydW4gaXQgZm9yd2FyZAorICAgICMgdG8gb2J0YWluICJOIDogQSBCIEMgLiIgICBXZSB0aGVuIGJ1aWxkIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmaW5hbAorICAgICMgc3RhdGUgYW5kIHRoZSBzdGFydGluZyBzdGF0ZS4gICBUaGVzZSByZWxhdGlvbnNoaXBzIGFyZSBzdG9yZWQgaW4gYSBkaWN0aW9uYXJ5CisgICAgIyBsb29rZGljdC4KKyAgICAjCisgICAgIyBJTkNMVURFUzoKKyAgICAjCisgICAgIyBDb21wdXRlcyB0aGUgSU5DTFVERSgpIHJlbGF0aW9uIChwLEEpIElOQ0xVREVTIChwJyxCKS4KKyAgICAjCisgICAgIyBUaGlzIHJlbGF0aW9uIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucyB0aGF0IG9jY3VyCisgICAgIyBpbnNpZGUgb2Ygb3RoZXIgbm9uLXRlcm1pbmFsIHRyYW5zaXRpb24gc3RhdGVzLiAgIChwLEEpIElOQ0xVREVTIChwJywgQikKKyAgICAjIGlmIHRoZSBmb2xsb3dpbmcgaG9sZHM6CisgICAgIworICAgICMgICAgICAgQiAtPiBMQVQsIHdoZXJlIFQgLT4gZXBzaWxvbiBhbmQgcCcgLUwtPiBwCisgICAgIworICAgICMgTCBpcyBlc3NlbnRpYWxseSBhIHByZWZpeCAod2hpY2ggbWF5IGJlIGVtcHR5KSwgVCBpcyBhIHN1ZmZpeCB0aGF0IG11c3QgYmUKKyAgICAjIGFibGUgdG8gZGVyaXZlIGFuIGVtcHR5IHN0cmluZy4gIFN0YXRlIHAnIG11c3QgbGVhZCB0byBzdGF0ZSBwIHdpdGggdGhlIHN0cmluZyBMLgorICAgICMKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgY29tcHV0ZV9sb29rYmFja19pbmNsdWRlcyhzZWxmLEMsdHJhbnMsbnVsbGFibGUpOgorCisgICAgICAgIGxvb2tkaWN0ID0ge30gICAgICAgICAgIyBEaWN0aW9uYXJ5IG9mIGxvb2tiYWNrIHJlbGF0aW9ucworICAgICAgICBpbmNsdWRlZGljdCA9IHt9ICAgICAgICMgRGljdGlvbmFyeSBvZiBpbmNsdWRlIHJlbGF0aW9ucworCisgICAgICAgICMgTWFrZSBhIGRpY3Rpb25hcnkgb2Ygbm9uLXRlcm1pbmFsIHRyYW5zaXRpb25zCisgICAgICAgIGR0cmFucyA9IHt9CisgICAgICAgIGZvciB0IGluIHRyYW5zOgorICAgICAgICAgICAgZHRyYW5zW3RdID0gMQorCisgICAgICAgICMgTG9vcCBvdmVyIGFsbCB0cmFuc2l0aW9ucyBhbmQgY29tcHV0ZSBsb29rYmFja3MgYW5kIGluY2x1ZGVzCisgICAgICAgIGZvciBzdGF0ZSxOIGluIHRyYW5zOgorICAgICAgICAgICAgbG9va2IgPSBbXQorICAgICAgICAgICAgaW5jbHVkZXMgPSBbXQorICAgICAgICAgICAgZm9yIHAgaW4gQ1tzdGF0ZV06CisgICAgICAgICAgICAgICAgaWYgcC5uYW1lICE9IE46IGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAjIE9rYXksIHdlIGhhdmUgYSBuYW1lIG1hdGNoLiAgV2Ugbm93IGZvbGxvdyB0aGUgcHJvZHVjdGlvbiBhbGwgdGhlIHdheQorICAgICAgICAgICAgICAgICMgdGhyb3VnaCB0aGUgc3RhdGUgbWFjaGluZSB1bnRpbCB3ZSBnZXQgdGhlIC4gb24gdGhlIHJpZ2h0IGhhbmQgc2lkZQorCisgICAgICAgICAgICAgICAgbHJfaW5kZXggPSBwLmxyX2luZGV4CisgICAgICAgICAgICAgICAgaiA9IHN0YXRlCisgICAgICAgICAgICAgICAgd2hpbGUgbHJfaW5kZXggPCBwLmxlbiAtIDE6CisgICAgICAgICAgICAgICAgICAgICBscl9pbmRleCA9IGxyX2luZGV4ICsgMQorICAgICAgICAgICAgICAgICAgICAgdCA9IHAucHJvZFtscl9pbmRleF0KKworICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhpcyBzeW1ib2wgYW5kIHN0YXRlIGFyZSBhIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICBpZiAoaix0KSBpbiBkdHJhbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFllcy4gIE9rYXksIHRoZXJlIGlzIHNvbWUgY2hhbmNlIHRoYXQgdGhpcyBpcyBhbiBpbmNsdWRlcyByZWxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb25seSB3YXkgdG8ga25vdyBmb3IgY2VydGFpbiBpcyB3aGV0aGVyIHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9kdWN0aW9uIGRlcml2ZXMgZW1wdHkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkgPSBscl9pbmRleCArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGxpIDwgcC5sZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAucHJvZFtsaV0gaW4gc2VsZi5ncmFtbWFyLlRlcm1pbmFsczogYnJlYWsgICAgICAjIE5vIGZvcmdldCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcC5wcm9kW2xpXSBpbiBudWxsYWJsZTogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkgPSBsaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQXBwZWFycyB0byBiZSBhIHJlbGF0aW9uIGJldHdlZW4gKGosdCkgYW5kIChzdGF0ZSxOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5hcHBlbmQoKGosdCkpCisKKyAgICAgICAgICAgICAgICAgICAgIGcgPSBzZWxmLmxyMF9nb3RvKENbal0sdCkgICAgICAgICAgICAgICAjIEdvIHRvIG5leHQgc2V0CisgICAgICAgICAgICAgICAgICAgICBqID0gc2VsZi5scjBfY2lkaGFzaC5nZXQoaWQoZyksLTEpICAgICAjIEdvIHRvIG5leHQgc3RhdGUKKworICAgICAgICAgICAgICAgICMgV2hlbiB3ZSBnZXQgaGVyZSwgaiBpcyB0aGUgZmluYWwgc3RhdGUsIG5vdyB3ZSBoYXZlIHRvIGxvY2F0ZSB0aGUgcHJvZHVjdGlvbgorICAgICAgICAgICAgICAgIGZvciByIGluIENbal06CisgICAgICAgICAgICAgICAgICAgICBpZiByLm5hbWUgIT0gcC5uYW1lOiBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgaWYgci5sZW4gIT0gcC5sZW46ICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbG9vayBpcyBjb21wYXJpbmcgYSBwcm9kdWN0aW9uICIuIEEgQiBDIiB3aXRoICJBIEIgQyAuIgorICAgICAgICAgICAgICAgICAgICAgd2hpbGUgaSA8IHIubHJfaW5kZXg6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIucHJvZFtpXSAhPSBwLnByb2RbaSsxXTogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rYi5hcHBlbmQoKGoscikpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmNsdWRlczoKKyAgICAgICAgICAgICAgICAgaWYgbm90IGkgaW4gaW5jbHVkZWRpY3Q6IGluY2x1ZGVkaWN0W2ldID0gW10KKyAgICAgICAgICAgICAgICAgaW5jbHVkZWRpY3RbaV0uYXBwZW5kKChzdGF0ZSxOKSkKKyAgICAgICAgICAgIGxvb2tkaWN0WyhzdGF0ZSxOKV0gPSBsb29rYgorCisgICAgICAgIHJldHVybiBsb29rZGljdCxpbmNsdWRlZGljdAorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9yZWFkX3NldHMoKQorICAgICMKKyAgICAjIEdpdmVuIGEgc2V0IG9mIExSKDApIGl0ZW1zLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSByZWFkIHNldHMuCisgICAgIworICAgICMgSW5wdXRzOiAgQyAgICAgICAgPSAgU2V0IG9mIExSKDApIGl0ZW1zCisgICAgIyAgICAgICAgICBudHJhbnMgICA9IFNldCBvZiBub250ZXJtaW5hbCB0cmFuc2l0aW9ucworICAgICMgICAgICAgICAgbnVsbGFibGUgPSBTZXQgb2YgZW1wdHkgdHJhbnNpdGlvbnMKKyAgICAjCisgICAgIyBSZXR1cm5zIGEgc2V0IGNvbnRhaW5pbmcgdGhlIHJlYWQgc2V0cworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBjb21wdXRlX3JlYWRfc2V0cyhzZWxmLEMsIG50cmFucywgbnVsbGFibGUpOgorICAgICAgICBGUCA9IGxhbWJkYSB4OiBzZWxmLmRyX3JlbGF0aW9uKEMseCxudWxsYWJsZSkKKyAgICAgICAgUiA9ICBsYW1iZGEgeDogc2VsZi5yZWFkc19yZWxhdGlvbihDLHgsbnVsbGFibGUpCisgICAgICAgIEYgPSBkaWdyYXBoKG50cmFucyxSLEZQKQorICAgICAgICByZXR1cm4gRgorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgY29tcHV0ZV9mb2xsb3dfc2V0cygpCisgICAgIworICAgICMgR2l2ZW4gYSBzZXQgb2YgTFIoMCkgaXRlbXMsIGEgc2V0IG9mIG5vbi10ZXJtaW5hbCB0cmFuc2l0aW9ucywgYSByZWFkc2V0LAorICAgICMgYW5kIGFuIGluY2x1ZGUgc2V0LCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBmb2xsb3cgc2V0cworICAgICMKKyAgICAjIEZvbGxvdyhwLEEpID0gUmVhZChwLEEpIFUgVSB7Rm9sbG93KHAnLEIpIHwgKHAsQSkgSU5DTFVERVMgKHAnLEIpfQorICAgICMKKyAgICAjIElucHV0czoKKyAgICAjICAgICAgICAgICAgbnRyYW5zICAgICA9IFNldCBvZiBub250ZXJtaW5hbCB0cmFuc2l0aW9ucworICAgICMgICAgICAgICAgICByZWFkc2V0cyAgID0gUmVhZHNldCAocHJldmlvdXNseSBjb21wdXRlZCkKKyAgICAjICAgICAgICAgICAgaW5jbHNldHMgICA9IEluY2x1ZGUgc2V0cyAocHJldmlvdXNseSBjb21wdXRlZCkKKyAgICAjCisgICAgIyBSZXR1cm5zIGEgc2V0IGNvbnRhaW5pbmcgdGhlIGZvbGxvdyBzZXRzCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGNvbXB1dGVfZm9sbG93X3NldHMoc2VsZixudHJhbnMscmVhZHNldHMsaW5jbHNldHMpOgorICAgICAgICAgRlAgPSBsYW1iZGEgeDogcmVhZHNldHNbeF0KKyAgICAgICAgIFIgID0gbGFtYmRhIHg6IGluY2xzZXRzLmdldCh4LFtdKQorICAgICAgICAgRiA9IGRpZ3JhcGgobnRyYW5zLFIsRlApCisgICAgICAgICByZXR1cm4gRgorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgYWRkX2xvb2thaGVhZHMoKQorICAgICMKKyAgICAjIEF0dGFjaGVzIHRoZSBsb29rYWhlYWQgc3ltYm9scyB0byBncmFtbWFyIHJ1bGVzLgorICAgICMKKyAgICAjIElucHV0czogICAgbG9va2JhY2tzICAgICAgICAgLSAgU2V0IG9mIGxvb2tiYWNrIHJlbGF0aW9ucworICAgICMgICAgICAgICAgICBmb2xsb3dzZXQgICAgICAgICAtICBDb21wdXRlZCBmb2xsb3cgc2V0CisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBkaXJlY3RseSBhdHRhY2hlcyB0aGUgbG9va2FoZWFkcyB0byBwcm9kdWN0aW9ucyBjb250YWluZWQKKyAgICAjIGluIHRoZSBsb29rYmFja3Mgc2V0CisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIGFkZF9sb29rYWhlYWRzKHNlbGYsbG9va2JhY2tzLGZvbGxvd3NldCk6CisgICAgICAgIGZvciB0cmFucyxsYiBpbiBsb29rYmFja3MuaXRlbXMoKToKKyAgICAgICAgICAgICMgTG9vcCBvdmVyIHByb2R1Y3Rpb25zIGluIGxvb2tiYWNrCisgICAgICAgICAgICBmb3Igc3RhdGUscCBpbiBsYjoKKyAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXRlIGluIHAubG9va2FoZWFkczoKKyAgICAgICAgICAgICAgICAgICAgICBwLmxvb2thaGVhZHNbc3RhdGVdID0gW10KKyAgICAgICAgICAgICAgICAgZiA9IGZvbGxvd3NldC5nZXQodHJhbnMsW10pCisgICAgICAgICAgICAgICAgIGZvciBhIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gcC5sb29rYWhlYWRzW3N0YXRlXTogcC5sb29rYWhlYWRzW3N0YXRlXS5hcHBlbmQoYSkKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGFkZF9sYWxyX2xvb2thaGVhZHMoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgb2YgdGhlIHdvcmsgb2YgYWRkaW5nIGxvb2thaGVhZCBpbmZvcm1hdGlvbiBmb3IgdXNlCisgICAgIyB3aXRoIExBTFIgcGFyc2luZworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBhZGRfbGFscl9sb29rYWhlYWRzKHNlbGYsQyk6CisgICAgICAgICMgRGV0ZXJtaW5lIGFsbCBvZiB0aGUgbnVsbGFibGUgbm9udGVybWluYWxzCisgICAgICAgIG51bGxhYmxlID0gc2VsZi5jb21wdXRlX251bGxhYmxlX25vbnRlcm1pbmFscygpCisKKyAgICAgICAgIyBGaW5kIGFsbCBub24tdGVybWluYWwgdHJhbnNpdGlvbnMKKyAgICAgICAgdHJhbnMgPSBzZWxmLmZpbmRfbm9udGVybWluYWxfdHJhbnNpdGlvbnMoQykKKworICAgICAgICAjIENvbXB1dGUgcmVhZCBzZXRzCisgICAgICAgIHJlYWRzZXRzID0gc2VsZi5jb21wdXRlX3JlYWRfc2V0cyhDLHRyYW5zLG51bGxhYmxlKQorCisgICAgICAgICMgQ29tcHV0ZSBsb29rYmFjay9pbmNsdWRlcyByZWxhdGlvbnMKKyAgICAgICAgbG9va2QsIGluY2x1ZGVkID0gc2VsZi5jb21wdXRlX2xvb2tiYWNrX2luY2x1ZGVzKEMsdHJhbnMsbnVsbGFibGUpCisKKyAgICAgICAgIyBDb21wdXRlIExBTFIgRk9MTE9XIHNldHMKKyAgICAgICAgZm9sbG93c2V0cyA9IHNlbGYuY29tcHV0ZV9mb2xsb3dfc2V0cyh0cmFucyxyZWFkc2V0cyxpbmNsdWRlZCkKKworICAgICAgICAjIEFkZCBhbGwgb2YgdGhlIGxvb2thaGVhZHMKKyAgICAgICAgc2VsZi5hZGRfbG9va2FoZWFkcyhsb29rZCxmb2xsb3dzZXRzKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgbHJfcGFyc2VfdGFibGUoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyB0aGUgcGFyc2UgdGFibGVzIGZvciBTTFIgb3IgTEFMUgorICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBkZWYgbHJfcGFyc2VfdGFibGUoc2VsZik6CisgICAgICAgIFByb2R1Y3Rpb25zID0gc2VsZi5ncmFtbWFyLlByb2R1Y3Rpb25zCisgICAgICAgIFByZWNlZGVuY2UgID0gc2VsZi5ncmFtbWFyLlByZWNlZGVuY2UKKyAgICAgICAgZ290byAgID0gc2VsZi5scl9nb3RvICAgICAgICAgIyBHb3RvIGFycmF5CisgICAgICAgIGFjdGlvbiA9IHNlbGYubHJfYWN0aW9uICAgICAgICMgQWN0aW9uIGFycmF5CisgICAgICAgIGxvZyAgICA9IHNlbGYubG9nICAgICAgICAgICAgICMgTG9nZ2VyIGZvciBvdXRwdXQKKworICAgICAgICBhY3Rpb25wID0geyB9ICAgICAgICAgICAgICAgICAjIEFjdGlvbiBwcm9kdWN0aW9uIGFycmF5ICh0ZW1wb3JhcnkpCisgICAgICAgIAorICAgICAgICBsb2cuaW5mbygiUGFyc2luZyBtZXRob2Q6ICVzIiwgc2VsZi5scl9tZXRob2QpCisKKyAgICAgICAgIyBTdGVwIDE6IENvbnN0cnVjdCBDID0geyBJMCwgSTEsIC4uLiBJTn0sIGNvbGxlY3Rpb24gb2YgTFIoMCkgaXRlbXMKKyAgICAgICAgIyBUaGlzIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBzdGF0ZXMKKworICAgICAgICBDID0gc2VsZi5scjBfaXRlbXMoKQorCisgICAgICAgIGlmIHNlbGYubHJfbWV0aG9kID09ICdMQUxSJzoKKyAgICAgICAgICAgIHNlbGYuYWRkX2xhbHJfbG9va2FoZWFkcyhDKQorCisgICAgICAgICMgQnVpbGQgdGhlIHBhcnNlciB0YWJsZSwgc3RhdGUgYnkgc3RhdGUKKyAgICAgICAgc3QgPSAwCisgICAgICAgIGZvciBJIGluIEM6CisgICAgICAgICAgICAjIExvb3Agb3ZlciBlYWNoIHByb2R1Y3Rpb24gaW4gSQorICAgICAgICAgICAgYWN0bGlzdCA9IFsgXSAgICAgICAgICAgICAgIyBMaXN0IG9mIGFjdGlvbnMKKyAgICAgICAgICAgIHN0X2FjdGlvbiAgPSB7IH0KKyAgICAgICAgICAgIHN0X2FjdGlvbnAgPSB7IH0KKyAgICAgICAgICAgIHN0X2dvdG8gICAgPSB7IH0KKyAgICAgICAgICAgIGxvZy5pbmZvKCIiKQorICAgICAgICAgICAgbG9nLmluZm8oInN0YXRlICVkIiwgc3QpCisgICAgICAgICAgICBsb2cuaW5mbygiIikKKyAgICAgICAgICAgIGZvciBwIGluIEk6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgICAoJWQpICVzIiwgcC5udW1iZXIsIHN0cihwKSkKKyAgICAgICAgICAgIGxvZy5pbmZvKCIiKQorCisgICAgICAgICAgICBmb3IgcCBpbiBJOgorICAgICAgICAgICAgICAgICAgICBpZiBwLmxlbiA9PSBwLmxyX2luZGV4ICsgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAubmFtZSA9PSAiUyciOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgc3ltYm9sLiBBY2NlcHQhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uWyIkZW5kIl0gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFsiJGVuZCJdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFyZSBhdCB0aGUgZW5kIG9mIGEgcHJvZHVjdGlvbi4gIFJlZHVjZSEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmxyX21ldGhvZCA9PSAnTEFMUic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhaGVhZHMgPSBwLmxvb2thaGVhZHNbc3RdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFoZWFkcyA9IHNlbGYuZ3JhbW1hci5Gb2xsb3dbcC5uYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIGxhaGVhZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGxpc3QuYXBwZW5kKChhLHAsInJlZHVjZSB1c2luZyBydWxlICVkICglcykiICUgKHAubnVtYmVyLHApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0X2FjdGlvbi5nZXQoYSxOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXaG9hLiBIYXZlIGEgc2hpZnQvcmVkdWNlIG9yIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTmVlZCB0byBkZWNpZGUgb24gc2hpZnQgb3IgcmVkdWNlIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ5IGRlZmF1bHQgd2UgZmF2b3Igc2hpZnRpbmcuIE5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzb21lIHByZWNlZGVuY2UgcnVsZXMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJlYyxzbGV2ZWwgPSBQcm9kdWN0aW9uc1tzdF9hY3Rpb25wW2FdLm51bWJlcl0ucHJlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwcmVjLHJsZXZlbCA9IFByZWNlZGVuY2UuZ2V0KGEsKCdyaWdodCcsMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsZXZlbCA8IHJsZXZlbCkgb3IgKChzbGV2ZWwgPT0gcmxldmVsKSBhbmQgKHJwcmVjID09ICdsZWZ0JykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIHJlYWxseSBuZWVkIHRvIHJlZHVjZSBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSAtcC5udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9ucFthXSA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNsZXZlbCBhbmQgbm90IHJsZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCBhcyByZWR1Y2UiLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGEsJ3JlZHVjZScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1twLm51bWJlcl0ucmVkdWNlZCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoc2xldmVsID09IHJsZXZlbCkgYW5kIChycHJlYyA9PSAnbm9uYXNzb2MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gR3Vlc3Mgd2UnbGwga2VlcCB0aGUgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJsZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKCIgICEgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCBhcyBzaGlmdCIsYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3JfY29uZmxpY3RzLmFwcGVuZCgoc3QsYSwnc2hpZnQnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgciA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZWR1Y2UvcmVkdWNlIGNvbmZsaWN0LiAgIEluIHRoaXMgY2FzZSwgd2UgZmF2b3IgdGhlIHJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoYXQgd2FzIGRlZmluZWQgZmlyc3QgaW4gdGhlIGdyYW1tYXIgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZHAgPSBQcm9kdWN0aW9uc1stcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcCA9IFByb2R1Y3Rpb25zW3AubnVtYmVyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9sZHAubGluZSA+IHBwLmxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvblthXSA9IC1wLm51bWJlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5wLHJlamVjdHAgPSBwcCxvbGRwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3Rpb25zW3AubnVtYmVyXS5yZWR1Y2VkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbb2xkcC5udW1iZXJdLnJlZHVjZWQgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlbnAscmVqZWN0cCA9IG9sZHAscHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGNob3NlbnAscmVqZWN0cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgISByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGZvciAlcyByZXNvbHZlZCB1c2luZyBydWxlICVkICglcykiLCBhLHN0X2FjdGlvbnBbYV0ubnVtYmVyLCBzdF9hY3Rpb25wW2FdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlVua25vd24gY29uZmxpY3QgaW4gc3RhdGUgJWQiICUgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSAtcC5udW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0aW9uc1twLm51bWJlcl0ucmVkdWNlZCArPSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gcC5scl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHAucHJvZFtpKzFdICAgICAgICMgR2V0IHN5bWJvbCByaWdodCBhZnRlciB0aGUgIi4iCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhIGluIHNlbGYuZ3JhbW1hci5UZXJtaW5hbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IHNlbGYubHIwX2dvdG8oSSxhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBzZWxmLmxyMF9jaWRoYXNoLmdldChpZChnKSwtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBqID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYXJlIGluIGEgc2hpZnQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0bGlzdC5hcHBlbmQoKGEscCwic2hpZnQgYW5kIGdvIHRvIHN0YXRlICVkIiAlIGopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3RfYWN0aW9uLmdldChhLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdob2EgaGF2ZSBhIHNoaWZ0L3JlZHVjZSBvciBzaGlmdC9zaGlmdCBjb25mbGljdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgciAhPSBqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlNoaWZ0L3NoaWZ0IGNvbmZsaWN0IGluIHN0YXRlICVkIiAlIHN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiByIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERvIGEgcHJlY2VkZW5jZSBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLSAgaWYgcHJlY2VkZW5jZSBvZiByZWR1Y2UgcnVsZSBpcyBoaWdoZXIsIHdlIHJlZHVjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgLSAgaWYgcHJlY2VkZW5jZSBvZiByZWR1Y2UgaXMgc2FtZSBhbmQgbGVmdCBhc3NvYywgd2UgcmVkdWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAtICBvdGhlcndpc2Ugd2Ugc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHJlYyxybGV2ZWwgPSBQcm9kdWN0aW9uc1tzdF9hY3Rpb25wW2FdLm51bWJlcl0ucHJlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmVjLHNsZXZlbCA9IFByZWNlZGVuY2UuZ2V0KGEsKCdyaWdodCcsMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsZXZlbCA+IHJsZXZlbCkgb3IgKChzbGV2ZWwgPT0gcmxldmVsKSBhbmQgKHJwcmVjID09ICdyaWdodCcpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkZWNpZGUgdG8gc2hpZnQgaGVyZS4uLiBoaWdoZXN0IHByZWNlZGVuY2UgdG8gc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdGlvbnNbc3RfYWN0aW9ucFthXS5udW1iZXJdLnJlZHVjZWQgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSBqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0X2FjdGlvbnBbYV0gPSBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBybGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgYXMgc2hpZnQiLGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNyX2NvbmZsaWN0cy5hcHBlbmQoKHN0LGEsJ3NoaWZ0JykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoc2xldmVsID09IHJsZXZlbCkgYW5kIChycHJlYyA9PSAnbm9uYXNzb2MnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfYWN0aW9uW2FdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSG1tbS4gR3Vlc3Mgd2UnbGwga2VlcCB0aGUgcmVkdWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzbGV2ZWwgYW5kIG5vdCBybGV2ZWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAhIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBmb3IgJXMgcmVzb2x2ZWQgYXMgcmVkdWNlIixhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcl9jb25mbGljdHMuYXBwZW5kKChzdCxhLCdyZWR1Y2UnKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMQUxSRXJyb3IoIlVua25vd24gY29uZmxpY3QgaW4gc3RhdGUgJWQiICUgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25bYV0gPSBqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9hY3Rpb25wW2FdID0gcAorCisgICAgICAgICAgICAjIFByaW50IHRoZSBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRlcm1pbmFsCisgICAgICAgICAgICBfYWN0cHJpbnQgPSB7IH0KKyAgICAgICAgICAgIGZvciBhLHAsbSBpbiBhY3RsaXN0OgorICAgICAgICAgICAgICAgIGlmIGEgaW4gc3RfYWN0aW9uOgorICAgICAgICAgICAgICAgICAgICBpZiBwIGlzIHN0X2FjdGlvbnBbYV06CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiICAgICUtMTVzICVzIixhLG0pCisgICAgICAgICAgICAgICAgICAgICAgICBfYWN0cHJpbnRbKGEsbSldID0gMQorICAgICAgICAgICAgbG9nLmluZm8oIiIpCisgICAgICAgICAgICAjIFByaW50IHRoZSBhY3Rpb25zIHRoYXQgd2VyZSBub3QgdXNlZC4gKGRlYnVnZ2luZykKKyAgICAgICAgICAgIG5vdF91c2VkID0gMAorICAgICAgICAgICAgZm9yIGEscCxtIGluIGFjdGxpc3Q6CisgICAgICAgICAgICAgICAgaWYgYSBpbiBzdF9hY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGlmIHAgaXMgbm90IHN0X2FjdGlvbnBbYV06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGEsbSkgaW4gX2FjdHByaW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiICAhICUtMTVzIFsgJXMgXSIsYSxtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF91c2VkID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hY3RwcmludFsoYSxtKV0gPSAxCisgICAgICAgICAgICBpZiBub3RfdXNlZDoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIiIpCisKKyAgICAgICAgICAgICMgQ29uc3RydWN0IHRoZSBnb3RvIHRhYmxlIGZvciB0aGlzIHN0YXRlCisKKyAgICAgICAgICAgIG5rZXlzID0geyB9CisgICAgICAgICAgICBmb3IgaWkgaW4gSToKKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBpaS51c3ltczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcyBpbiBzZWxmLmdyYW1tYXIuTm9udGVybWluYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgbmtleXNbc10gPSBOb25lCisgICAgICAgICAgICBmb3IgbiBpbiBua2V5czoKKyAgICAgICAgICAgICAgICBnID0gc2VsZi5scjBfZ290byhJLG4pCisgICAgICAgICAgICAgICAgaiA9IHNlbGYubHIwX2NpZGhhc2guZ2V0KGlkKGcpLC0xKQorICAgICAgICAgICAgICAgIGlmIGogPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgc3RfZ290b1tuXSA9IGoKKyAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oIiAgICAlLTMwcyBzaGlmdCBhbmQgZ28gdG8gc3RhdGUgJWQiLG4saikKKworICAgICAgICAgICAgYWN0aW9uW3N0XSA9IHN0X2FjdGlvbgorICAgICAgICAgICAgYWN0aW9ucFtzdF0gPSBzdF9hY3Rpb25wCisgICAgICAgICAgICBnb3RvW3N0XSA9IHN0X2dvdG8KKyAgICAgICAgICAgIHN0ICs9IDEKKworCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgd3JpdGUoKQorICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBMUiBwYXJzaW5nIHRhYmxlcyB0byBhIGZpbGUKKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgd3JpdGVfdGFibGUoc2VsZixtb2R1bGVuYW1lLG91dHB1dGRpcj0nJyxzaWduYXR1cmU9IiIpOgorICAgICAgICBiYXNlbW9kdWxlbmFtZSA9IG1vZHVsZW5hbWUuc3BsaXQoIi4iKVstMV0KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0ZGlyLGJhc2Vtb2R1bGVuYW1lKSArICIucHkiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCJ3IikKKworICAgICAgICAgICAgZi53cml0ZSgiIiIKKyMgJXMKKyMgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiBEbyBub3QgZWRpdC4KK190YWJ2ZXJzaW9uID0gJXIKKworX2xyX21ldGhvZCA9ICVyCisKK19scl9zaWduYXR1cmUgPSAlcgorICAgICIiIiAlIChmaWxlbmFtZSwgX190YWJ2ZXJzaW9uX18sIHNlbGYubHJfbWV0aG9kLCBzaWduYXR1cmUpKQorCisgICAgICAgICAgICAjIENoYW5nZSBzbWFsbGVyIHRvIDAgdG8gZ28gYmFjayB0byBvcmlnaW5hbCB0YWJsZXMKKyAgICAgICAgICAgIHNtYWxsZXIgPSAxCisKKyAgICAgICAgICAgICMgRmFjdG9yIG91dCBuYW1lcyB0byB0cnkgYW5kIG1ha2Ugc21hbGxlcgorICAgICAgICAgICAgaWYgc21hbGxlcjoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHsgfQorCisgICAgICAgICAgICAgICAgZm9yIHMsbmQgaW4gc2VsZi5scl9hY3Rpb24uaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSx2IGluIG5kLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgaSA9IGl0ZW1zLmdldChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoW10sW10pCisgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbmFtZV0gPSBpCisgICAgICAgICAgICAgICAgICAgICAgaVswXS5hcHBlbmQocykKKyAgICAgICAgICAgICAgICAgICAgICBpWzFdLmFwcGVuZCh2KQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5fbHJfYWN0aW9uX2l0ZW1zID0geyIpCisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBpdGVtcy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlcjooWyIgJSBrKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB2WzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXIsIiAlIGkpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIl0sWyIpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHZbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIlciwiICUgaSkKKworICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJdKSwiKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIn1cbiIpCisKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIiIgorX2xyX2FjdGlvbiA9IHsgfQorZm9yIF9rLCBfdiBpbiBfbHJfYWN0aW9uX2l0ZW1zLml0ZW1zKCk6CisgICBmb3IgX3gsX3kgaW4gemlwKF92WzBdLF92WzFdKToKKyAgICAgIGlmIG5vdCBfeCBpbiBfbHJfYWN0aW9uOiAgX2xyX2FjdGlvbltfeF0gPSB7IH0KKyAgICAgIF9scl9hY3Rpb25bX3hdW19rXSA9IF95CitkZWwgX2xyX2FjdGlvbl9pdGVtcworIiIiKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIlxuX2xyX2FjdGlvbiA9IHsgIik7CisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBzZWxmLmxyX2FjdGlvbi5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIoJXIsJXIpOiVyLCIgJSAoa1swXSxrWzFdLHYpKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIn1cbiIpOworCisgICAgICAgICAgICBpZiBzbWFsbGVyOgorICAgICAgICAgICAgICAgICMgRmFjdG9yIG91dCBuYW1lcyB0byB0cnkgYW5kIG1ha2Ugc21hbGxlcgorICAgICAgICAgICAgICAgIGl0ZW1zID0geyB9CisKKyAgICAgICAgICAgICAgICBmb3IgcyxuZCBpbiBzZWxmLmxyX2dvdG8uaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSx2IGluIG5kLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgaSA9IGl0ZW1zLmdldChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoW10sW10pCisgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbmFtZV0gPSBpCisgICAgICAgICAgICAgICAgICAgICAgaVswXS5hcHBlbmQocykKKyAgICAgICAgICAgICAgICAgICAgICBpWzFdLmFwcGVuZCh2KQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiXG5fbHJfZ290b19pdGVtcyA9IHsiKQorICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gaXRlbXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXI6KFsiICUgaykKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gdlswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiVyLCIgJSBpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJdLFsiKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB2WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiJXIsIiAlIGkpCisKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiXSksIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ9XG4iKQorCisgICAgICAgICAgICAgICAgZi53cml0ZSgiIiIKK19scl9nb3RvID0geyB9Citmb3IgX2ssIF92IGluIF9scl9nb3RvX2l0ZW1zLml0ZW1zKCk6CisgICBmb3IgX3gsX3kgaW4gemlwKF92WzBdLF92WzFdKToKKyAgICAgICBpZiBub3QgX3ggaW4gX2xyX2dvdG86IF9scl9nb3RvW194XSA9IHsgfQorICAgICAgIF9scl9nb3RvW194XVtfa10gPSBfeQorZGVsIF9scl9nb3RvX2l0ZW1zCisiIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIlxuX2xyX2dvdG8gPSB7ICIpOworICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gc2VsZi5scl9nb3RvLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiglciwlcik6JXIsIiAlIChrWzBdLGtbMV0sdikpCisgICAgICAgICAgICAgICAgZi53cml0ZSgifVxuIik7CisKKyAgICAgICAgICAgICMgV3JpdGUgcHJvZHVjdGlvbiB0YWJsZQorICAgICAgICAgICAgZi53cml0ZSgiX2xyX3Byb2R1Y3Rpb25zID0gW1xuIikKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYubHJfcHJvZHVjdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgcC5mdW5jOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICglciwlciwlZCwlciwlciwlZCksXG4iICUgKHAuc3RyLHAubmFtZSwgcC5sZW4sIHAuZnVuYyxwLmZpbGUscC5saW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICglciwlciwlZCxOb25lLE5vbmUsTm9uZSksXG4iICUgKHN0cihwKSxwLm5hbWUsIHAubGVuKSkKKyAgICAgICAgICAgIGYud3JpdGUoIl1cbiIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGNyZWF0ZSAnJXMnXG4iICUgZmlsZW5hbWUpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihlKSsiXG4iKQorICAgICAgICAgICAgcmV0dXJuCisKKworICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIHBpY2tsZV90YWJsZSgpCisgICAgIworICAgICMgVGhpcyBmdW5jdGlvbiBwaWNrbGVzIHRoZSBMUiBwYXJzaW5nIHRhYmxlcyB0byBhIHN1cHBsaWVkIGZpbGUgb2JqZWN0CisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHBpY2tsZV90YWJsZShzZWxmLGZpbGVuYW1lLHNpZ25hdHVyZT0iIik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjUGlja2xlIGFzIHBpY2tsZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIG91dGYgPSBvcGVuKGZpbGVuYW1lLCJ3YiIpCisgICAgICAgIHBpY2tsZS5kdW1wKF9fdGFidmVyc2lvbl9fLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBwaWNrbGUuZHVtcChzZWxmLmxyX21ldGhvZCxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgcGlja2xlLmR1bXAoc2lnbmF0dXJlLG91dGYscGlja2xlX3Byb3RvY29sKQorICAgICAgICBwaWNrbGUuZHVtcChzZWxmLmxyX2FjdGlvbixvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5scl9nb3RvLG91dGYscGlja2xlX3Byb3RvY29sKQorCisgICAgICAgIG91dHAgPSBbXQorICAgICAgICBmb3IgcCBpbiBzZWxmLmxyX3Byb2R1Y3Rpb25zOgorICAgICAgICAgICAgaWYgcC5mdW5jOgorICAgICAgICAgICAgICAgIG91dHAuYXBwZW5kKChwLnN0cixwLm5hbWUsIHAubGVuLCBwLmZ1bmMscC5maWxlLHAubGluZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHAuYXBwZW5kKChzdHIocCkscC5uYW1lLHAubGVuLE5vbmUsTm9uZSxOb25lKSkKKyAgICAgICAgcGlja2xlLmR1bXAob3V0cCxvdXRmLHBpY2tsZV9wcm90b2NvbCkKKyAgICAgICAgb3V0Zi5jbG9zZSgpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09IElOVFJPU1BFQ1RJT04gPT09CisjCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGFyZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgUExZCisjIGludHJvc3BlY3Rpb24gZmVhdHVyZXMgZm9sbG93ZWQgYnkgdGhlIHlhY2MoKSBmdW5jdGlvbiBpdHNlbGYuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZ2V0X2NhbGxlcl9tb2R1bGVfZGljdCgpCisjCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgb2YgdGhlIHN5bWJvbHMgZGVmaW5lZCB3aXRoaW4KKyMgYSBjYWxsZXIgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLiAgVGhpcyBpcyB1c2VkIHRvIGdldCB0aGUgZW52aXJvbm1lbnQKKyMgYXNzb2NpYXRlZCB3aXRoIHRoZSB5YWNjKCkgY2FsbCBpZiBub25lIHdhcyBwcm92aWRlZC4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdldF9jYWxsZXJfbW9kdWxlX2RpY3QobGV2ZWxzKToKKyAgICB0cnk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIGUsYix0ID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgZiA9IHQudGJfZnJhbWUKKyAgICAgICAgd2hpbGUgbGV2ZWxzID4gMDoKKyAgICAgICAgICAgIGYgPSBmLmZfYmFjayAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldmVscyAtPSAxCisgICAgICAgIGxkaWN0ID0gZi5mX2dsb2JhbHMuY29weSgpCisgICAgICAgIGlmIGYuZl9nbG9iYWxzICE9IGYuZl9sb2NhbHM6CisgICAgICAgICAgICBsZGljdC51cGRhdGUoZi5mX2xvY2FscykKKworICAgICAgICByZXR1cm4gbGRpY3QKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwYXJzZV9ncmFtbWFyKCkKKyMKKyMgVGhpcyB0YWtlcyBhIHJhdyBncmFtbWFyIHJ1bGUgc3RyaW5nIGFuZCBwYXJzZXMgaXQgaW50byBwcm9kdWN0aW9uIGRhdGEKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZiBwYXJzZV9ncmFtbWFyKGRvYyxmaWxlLGxpbmUpOgorICAgIGdyYW1tYXIgPSBbXQorICAgICMgU3BsaXQgdGhlIGRvYyBzdHJpbmcgaW50byBsaW5lcworICAgIHBzdHJpbmdzID0gZG9jLnNwbGl0bGluZXMoKQorICAgIGxhc3RwID0gTm9uZQorICAgIGRsaW5lID0gbGluZQorICAgIGZvciBwcyBpbiBwc3RyaW5nczoKKyAgICAgICAgZGxpbmUgKz0gMQorICAgICAgICBwID0gcHMuc3BsaXQoKQorICAgICAgICBpZiBub3QgcDogY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcFswXSA9PSAnfCc6CisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIGEgcHJldmlvdXMgcnVsZQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYXN0cDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIiVzOiVkOiBNaXNwbGFjZWQgJ3wnIiAlIChmaWxlLGRsaW5lKSkKKyAgICAgICAgICAgICAgICBwcm9kbmFtZSA9IGxhc3RwCisgICAgICAgICAgICAgICAgc3ltcyA9IHBbMTpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2RuYW1lID0gcFswXQorICAgICAgICAgICAgICAgIGxhc3RwID0gcHJvZG5hbWUKKyAgICAgICAgICAgICAgICBzeW1zICAgPSBwWzI6XQorICAgICAgICAgICAgICAgIGFzc2lnbiA9IHBbMV0KKyAgICAgICAgICAgICAgICBpZiBhc3NpZ24gIT0gJzonIGFuZCBhc3NpZ24gIT0gJzo6PSc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczolZDogU3ludGF4IGVycm9yLiBFeHBlY3RlZCAnOiciICUgKGZpbGUsZGxpbmUpKQorCisgICAgICAgICAgICBncmFtbWFyLmFwcGVuZCgoZmlsZSxkbGluZSxwcm9kbmFtZSxzeW1zKSkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczolZDogU3ludGF4IGVycm9yIGluIHJ1bGUgJyVzJyIgJSAoZmlsZSxkbGluZSxwcy5zdHJpcCgpKSkKKworICAgIHJldHVybiBncmFtbWFyCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGFyc2VyUmVmbGVjdCgpCisjCisjIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZm9yIGJ1aWxkaW5nIGEgcGFyc2VyIGluY2x1ZGluZworIyBzdGFydCBzeW1ib2wsIGVycm9yIGZ1bmN0aW9uLCB0b2tlbnMsIHByZWNlZGVuY2UgbGlzdCwgYWN0aW9uIGZ1bmN0aW9ucywKKyMgZXRjLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgUGFyc2VyUmVmbGVjdChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHBkaWN0LGxvZz1Ob25lKToKKyAgICAgICAgc2VsZi5wZGljdCAgICAgID0gcGRpY3QKKyAgICAgICAgc2VsZi5zdGFydCAgICAgID0gTm9uZQorICAgICAgICBzZWxmLmVycm9yX2Z1bmMgPSBOb25lCisgICAgICAgIHNlbGYudG9rZW5zICAgICA9IE5vbmUKKyAgICAgICAgc2VsZi5maWxlcyAgICAgID0ge30KKyAgICAgICAgc2VsZi5ncmFtbWFyICAgID0gW10KKyAgICAgICAgc2VsZi5lcnJvciAgICAgID0gMAorCisgICAgICAgIGlmIGxvZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2cgPSBQbHlMb2dnZXIoc3lzLnN0ZGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubG9nID0gbG9nCisKKyAgICAjIEdldCBhbGwgb2YgdGhlIGJhc2ljIGluZm9ybWF0aW9uCisgICAgZGVmIGdldF9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X3N0YXJ0KCkKKyAgICAgICAgc2VsZi5nZXRfZXJyb3JfZnVuYygpCisgICAgICAgIHNlbGYuZ2V0X3Rva2VucygpCisgICAgICAgIHNlbGYuZ2V0X3ByZWNlZGVuY2UoKQorICAgICAgICBzZWxmLmdldF9wZnVuY3Rpb25zKCkKKyAgICAgICAgCisgICAgIyBWYWxpZGF0ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uCisgICAgZGVmIHZhbGlkYXRlX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9zdGFydCgpCisgICAgICAgIHNlbGYudmFsaWRhdGVfZXJyb3JfZnVuYygpCisgICAgICAgIHNlbGYudmFsaWRhdGVfdG9rZW5zKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9wcmVjZWRlbmNlKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9wZnVuY3Rpb25zKCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9maWxlcygpCisgICAgICAgIHJldHVybiBzZWxmLmVycm9yCisKKyAgICAjIENvbXB1dGUgYSBzaWduYXR1cmUgb3ZlciB0aGUgZ3JhbW1hcgorICAgIGRlZiBzaWduYXR1cmUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGZyb20gbWQ1IGltcG9ydCBtZDUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnID0gbWQ1KCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnQ6CisgICAgICAgICAgICAgICAgc2lnLnVwZGF0ZShzZWxmLnN0YXJ0LmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICAgICAgaWYgc2VsZi5wcmVjOgorICAgICAgICAgICAgICAgIHNpZy51cGRhdGUoIiIuam9pbihbIiIuam9pbihwKSBmb3IgcCBpbiBzZWxmLnByZWNdKS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgICAgIGlmIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgICAgIHNpZy51cGRhdGUoIiAiLmpvaW4oc2VsZi50b2tlbnMpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICAgICAgZm9yIGYgaW4gc2VsZi5wZnVuY3M6CisgICAgICAgICAgICAgICAgaWYgZlszXToKKyAgICAgICAgICAgICAgICAgICAgc2lnLnVwZGF0ZShmWzNdLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvcixWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHNpZy5kaWdlc3QoKQorCisgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgdmFsaWRhdGVfZmlsZSgpCisgICAgIworICAgICMgVGhpcyBtZXRob2QgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBhcmUgZHVwbGljYXRlZCBwX3J1bGVuYW1lKCkgZnVuY3Rpb25zCisgICAgIyBpbiB0aGUgcGFyc2VyIG1vZHVsZSBmaWxlLiAgV2l0aG91dCB0aGlzIGZ1bmN0aW9uLCBpdCBpcyByZWFsbHkgZWFzeSBmb3IKKyAgICAjIHVzZXJzIHRvIG1ha2UgbWlzdGFrZXMgYnkgY3V0dGluZyBhbmQgcGFzdGluZyBjb2RlIGZyYWdtZW50cyAoYW5kIGl0J3MgYSByZWFsCisgICAgIyBidWdnZXIgdG8gdHJ5IGFuZCBmaWd1cmUgb3V0IHdoeSB0aGUgcmVzdWx0aW5nIHBhcnNlciBkb2Vzbid0IHdvcmspLiAgVGhlcmVmb3JlLAorICAgICMgd2UganVzdCBkbyBhIGxpdHRsZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyBvZiBkZWYgc3RhdGVtZW50cworICAgICMgdG8gdHJ5IGFuZCBkZXRlY3QgZHVwbGljYXRlcy4KKyAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdmFsaWRhdGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgTWF0Y2ggZGVmIHBfZnVuY25hbWUoCisgICAgICAgIGZyZSA9IHJlLmNvbXBpbGUocidccypkZWZccysocF9bYS16QS1aXzAtOV0qKVwoJykKKworICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5maWxlcy5rZXlzKCk6CisgICAgICAgICAgICBiYXNlLGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBleHQgIT0gJy5weSc6IHJldHVybiAxICAgICAgICAgICMgTm8gaWRlYS4gQXNzdW1lIGl0J3Mgb2theS4KKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY291bnRoYXNoID0geyB9CisgICAgICAgICAgICBmb3IgbGluZW4sbCBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgIGxpbmVuICs9IDEKKyAgICAgICAgICAgICAgICBtID0gZnJlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcHJldiA9IGNvdW50aGFzaC5nZXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByZXY6CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGhhc2hbbmFtZV0gPSBsaW5lbgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cud2FybmluZygiJXM6JWQ6IEZ1bmN0aW9uICVzIHJlZGVmaW5lZC4gUHJldmlvdXNseSBkZWZpbmVkIG9uIGxpbmUgJWQiLCBmaWxlbmFtZSxsaW5lbixuYW1lLHByZXYpCisKKyAgICAjIEdldCB0aGUgc3RhcnQgc3ltYm9sCisgICAgZGVmIGdldF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5zdGFydCA9IHNlbGYucGRpY3QuZ2V0KCdzdGFydCcpCisKKyAgICAjIFZhbGlkYXRlIHRoZSBzdGFydCBzeW1ib2wKKyAgICBkZWYgdmFsaWRhdGVfc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YXJ0LHN0cik6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIidzdGFydCcgbXVzdCBiZSBhIHN0cmluZyIpCisKKyAgICAjIExvb2sgZm9yIGVycm9yIGhhbmRsZXIKKyAgICBkZWYgZ2V0X2Vycm9yX2Z1bmMoc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JfZnVuYyA9IHNlbGYucGRpY3QuZ2V0KCdwX2Vycm9yJykKKworICAgICMgVmFsaWRhdGUgdGhlIGVycm9yIGZ1bmN0aW9uCisgICAgZGVmIHZhbGlkYXRlX2Vycm9yX2Z1bmMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZXJyb3JfZnVuYzoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5lcnJvcl9mdW5jLHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICAgICAgaXNtZXRob2QgPSAwCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5lcnJvcl9mdW5jLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICBpc21ldGhvZCA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIidwX2Vycm9yJyBkZWZpbmVkLCBidXQgaXMgbm90IGEgZnVuY3Rpb24gb3IgbWV0aG9kIikKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBlbGluZSA9IGZ1bmNfY29kZShzZWxmLmVycm9yX2Z1bmMpLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBlZmlsZSA9IGZ1bmNfY29kZShzZWxmLmVycm9yX2Z1bmMpLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBzZWxmLmZpbGVzW2VmaWxlXSA9IDEKKworICAgICAgICAgICAgaWYgKGZ1bmNfY29kZShzZWxmLmVycm9yX2Z1bmMpLmNvX2FyZ2NvdW50ICE9IDEraXNtZXRob2QpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlczolZDogcF9lcnJvcigpIHJlcXVpcmVzIDEgYXJndW1lbnQiLGVmaWxlLGVsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisKKyAgICAjIEdldCB0aGUgdG9rZW5zIG1hcAorICAgIGRlZiBnZXRfdG9rZW5zKHNlbGYpOgorICAgICAgICB0b2tlbnMgPSBzZWxmLnBkaWN0LmdldCgidG9rZW5zIixOb25lKQorICAgICAgICBpZiBub3QgdG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk5vIHRva2VuIGxpc3QgaXMgZGVmaW5lZCIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodG9rZW5zLChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInRva2VucyBtdXN0IGJlIGEgbGlzdCBvciB0dXBsZSIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgICAgICBpZiBub3QgdG9rZW5zOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInRva2VucyBpcyBlbXB0eSIpCisgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi50b2tlbnMgPSB0b2tlbnMKKworICAgICMgVmFsaWRhdGUgdGhlIHRva2VucworICAgIGRlZiB2YWxpZGF0ZV90b2tlbnMoc2VsZik6CisgICAgICAgICMgVmFsaWRhdGUgdGhlIHRva2Vucy4KKyAgICAgICAgaWYgJ2Vycm9yJyBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJJbGxlZ2FsIHRva2VuIG5hbWUgJ2Vycm9yJy4gSXMgYSByZXNlcnZlZCB3b3JkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ZXJtaW5hbHMgPSB7fQorICAgICAgICBmb3IgbiBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgIGlmIG4gaW4gdGVybWluYWxzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoIlRva2VuICclcycgbXVsdGlwbHkgZGVmaW5lZCIsIG4pCisgICAgICAgICAgICB0ZXJtaW5hbHNbbl0gPSAxCisKKyAgICAjIEdldCB0aGUgcHJlY2VkZW5jZSBtYXAgKGlmIGFueSkKKyAgICBkZWYgZ2V0X3ByZWNlZGVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYucHJlYyA9IHNlbGYucGRpY3QuZ2V0KCJwcmVjZWRlbmNlIixOb25lKQorCisgICAgIyBWYWxpZGF0ZSBhbmQgcGFyc2UgdGhlIHByZWNlZGVuY2UgbWFwCisgICAgZGVmIHZhbGlkYXRlX3ByZWNlZGVuY2Uoc2VsZik6CisgICAgICAgIHByZWNsaXN0ID0gW10KKyAgICAgICAgaWYgc2VsZi5wcmVjOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5wcmVjLChsaXN0LHR1cGxlKSk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInByZWNlZGVuY2UgbXVzdCBiZSBhIGxpc3Qgb3IgdHVwbGUiKQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmb3IgbGV2ZWwscCBpbiBlbnVtZXJhdGUoc2VsZi5wcmVjKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwLChsaXN0LHR1cGxlKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJCYWQgcHJlY2VkZW5jZSB0YWJsZSIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgbGVuKHApIDwgMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIk1hbGZvcm1lZCBwcmVjZWRlbmNlIGVudHJ5ICVzLiBNdXN0IGJlIChhc3NvYywgdGVybSwgLi4uLCB0ZXJtKSIscCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgYXNzb2MgPSBwWzBdCisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXNzb2Msc3RyKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoInByZWNlZGVuY2UgYXNzb2NpYXRpdml0eSBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZm9yIHRlcm0gaW4gcFsxOl06CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRlcm0sc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwcmVjZWRlbmNlIGl0ZW1zIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHByZWNsaXN0LmFwcGVuZCgodGVybSxhc3NvYyxsZXZlbCsxKSkKKyAgICAgICAgc2VsZi5wcmVjbGlzdCA9IHByZWNsaXN0CisKKyAgICAjIEdldCBhbGwgcF9mdW5jdGlvbnMgZnJvbSB0aGUgZ3JhbW1hcgorICAgIGRlZiBnZXRfcGZ1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgcF9mdW5jdGlvbnMgPSBbXQorICAgICAgICBmb3IgbmFtZSwgaXRlbSBpbiBzZWxmLnBkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBuYW1lWzoyXSAhPSAncF8nOiBjb250aW51ZQorICAgICAgICAgICAgaWYgbmFtZSA9PSAncF9lcnJvcic6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sKHR5cGVzLkZ1bmN0aW9uVHlwZSx0eXBlcy5NZXRob2RUeXBlKSk6CisgICAgICAgICAgICAgICAgbGluZSA9IGZ1bmNfY29kZShpdGVtKS5jb19maXJzdGxpbmVubworICAgICAgICAgICAgICAgIGZpbGUgPSBmdW5jX2NvZGUoaXRlbSkuY29fZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBwX2Z1bmN0aW9ucy5hcHBlbmQoKGxpbmUsZmlsZSxuYW1lLGl0ZW0uX19kb2NfXykpCisKKyAgICAgICAgIyBTb3J0IGFsbCBvZiB0aGUgYWN0aW9ucyBieSBsaW5lIG51bWJlcgorICAgICAgICBwX2Z1bmN0aW9ucy5zb3J0KCkKKyAgICAgICAgc2VsZi5wZnVuY3MgPSBwX2Z1bmN0aW9ucworCisKKyAgICAjIFZhbGlkYXRlIGFsbCBvZiB0aGUgcF9mdW5jdGlvbnMKKyAgICBkZWYgdmFsaWRhdGVfcGZ1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgZ3JhbW1hciA9IFtdCisgICAgICAgICMgQ2hlY2sgZm9yIG5vbi1lbXB0eSBzeW1ib2xzCisgICAgICAgIGlmIGxlbihzZWxmLnBmdW5jcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJubyBydWxlcyBvZiB0aGUgZm9ybSBwX3J1bGVuYW1lIGFyZSBkZWZpbmVkIikKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSAxCisgICAgICAgICAgICByZXR1cm4gCisgICAgICAgIAorICAgICAgICBmb3IgbGluZSwgZmlsZSwgbmFtZSwgZG9jIGluIHNlbGYucGZ1bmNzOgorICAgICAgICAgICAgZnVuYyA9IHNlbGYucGRpY3RbbmFtZV0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZXMuTWV0aG9kVHlwZSk6CisgICAgICAgICAgICAgICAgcmVxYXJncyA9IDIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVxYXJncyA9IDEKKyAgICAgICAgICAgIGlmIGZ1bmNfY29kZShmdW5jKS5jb19hcmdjb3VudCA+IHJlcWFyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzOiVkOiBSdWxlICclcycgaGFzIHRvbyBtYW55IGFyZ3VtZW50cyIsZmlsZSxsaW5lLGZ1bmMuX19uYW1lX18pCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGVsaWYgZnVuY19jb2RlKGZ1bmMpLmNvX2FyZ2NvdW50IDwgcmVxYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigiJXM6JWQ6IFJ1bGUgJyVzJyByZXF1aXJlcyBhbiBhcmd1bWVudCIsZmlsZSxsaW5lLGZ1bmMuX19uYW1lX18pCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IDEKKyAgICAgICAgICAgIGVsaWYgbm90IGZ1bmMuX19kb2NfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCIlczolZDogTm8gZG9jdW1lbnRhdGlvbiBzdHJpbmcgc3BlY2lmaWVkIGluIGZ1bmN0aW9uICclcycgKGlnbm9yZWQpIixmaWxlLGxpbmUsZnVuYy5fX25hbWVfXykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYXJzZWRfZyA9IHBhcnNlX2dyYW1tYXIoZG9jLGZpbGUsbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGcgaW4gcGFyc2VkX2c6CisgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyLmFwcGVuZCgobmFtZSwgZykpCisgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yID0gMQorCisgICAgICAgICAgICAgICAgIyBMb29rcyBsaWtlIGEgdmFsaWQgZ3JhbW1hciBydWxlCisgICAgICAgICAgICAgICAgIyBNYXJrIHRoZSBmaWxlIGluIHdoaWNoIGRlZmluZWQuCisgICAgICAgICAgICAgICAgc2VsZi5maWxlc1tmaWxlXSA9IDEKKworICAgICAgICAjIFNlY29uZGFyeSB2YWxpZGF0aW9uIHN0ZXAgdGhhdCBsb29rcyBmb3IgcF8gZGVmaW5pdGlvbnMgdGhhdCBhcmUgbm90IGZ1bmN0aW9ucworICAgICAgICAjIG9yIGZ1bmN0aW9ucyB0aGF0IGxvb2sgbGlrZSB0aGV5IG1pZ2h0IGJlIGdyYW1tYXIgcnVsZXMuCisKKyAgICAgICAgZm9yIG4sdiBpbiBzZWxmLnBkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBuWzA6Ml0gPT0gJ3BfJyBhbmQgaXNpbnN0YW5jZSh2LCAodHlwZXMuRnVuY3Rpb25UeXBlLCB0eXBlcy5NZXRob2RUeXBlKSk6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuWzA6Ml0gPT0gJ3RfJzogY29udGludWUKKyAgICAgICAgICAgIGlmIG5bMDoyXSA9PSAncF8nIGFuZCBuICE9ICdwX2Vycm9yJzoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCInJXMnIG5vdCBkZWZpbmVkIGFzIGEgZnVuY3Rpb24iLCBuKQorICAgICAgICAgICAgaWYgKChpc2luc3RhbmNlKHYsdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQgZnVuY19jb2RlKHYpLmNvX2FyZ2NvdW50ID09IDEpIG9yCisgICAgICAgICAgICAgICAgKGlzaW5zdGFuY2Uodix0eXBlcy5NZXRob2RUeXBlKSBhbmQgZnVuY19jb2RlKHYpLmNvX2FyZ2NvdW50ID09IDIpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRvYyA9IHYuX19kb2NfXy5zcGxpdCgiICIpCisgICAgICAgICAgICAgICAgICAgIGlmIGRvY1sxXSA9PSAnOic6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy53YXJuaW5nKCIlczolZDogUG9zc2libGUgZ3JhbW1hciBydWxlICclcycgZGVmaW5lZCB3aXRob3V0IHBfIHByZWZpeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfY29kZSh2KS5jb19maWxlbmFtZSwgZnVuY19jb2RlKHYpLmNvX2ZpcnN0bGluZW5vLG4pCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuZ3JhbW1hciA9IGdyYW1tYXIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB5YWNjKG1vZHVsZSkKKyMKKyMgQnVpbGQgYSBwYXJzZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHlhY2MobWV0aG9kPSdMQUxSJywgZGVidWc9eWFjY2RlYnVnLCBtb2R1bGU9Tm9uZSwgdGFibW9kdWxlPXRhYl9tb2R1bGUsIHN0YXJ0PU5vbmUsIAorICAgICAgICAgY2hlY2tfcmVjdXJzaW9uPTEsIG9wdGltaXplPTAsIHdyaXRlX3RhYmxlcz0xLCBkZWJ1Z2ZpbGU9ZGVidWdfZmlsZSxvdXRwdXRkaXI9JycsCisgICAgICAgICBkZWJ1Z2xvZz1Ob25lLCBlcnJvcmxvZyA9IE5vbmUsIHBpY2tsZWZpbGU9Tm9uZSk6CisKKyAgICBnbG9iYWwgcGFyc2UgICAgICAgICAgICAgICAgICMgUmVmZXJlbmNlIHRvIHRoZSBwYXJzaW5nIG1ldGhvZCBvZiB0aGUgbGFzdCBidWlsdCBwYXJzZXIKKworICAgICMgSWYgcGlja2xpbmcgaXMgZW5hYmxlZCwgdGFibGUgZmlsZXMgYXJlIG5vdCBjcmVhdGVkCisKKyAgICBpZiBwaWNrbGVmaWxlOgorICAgICAgICB3cml0ZV90YWJsZXMgPSAwCisKKyAgICBpZiBlcnJvcmxvZyBpcyBOb25lOgorICAgICAgICBlcnJvcmxvZyA9IFBseUxvZ2dlcihzeXMuc3RkZXJyKQorCisgICAgIyBHZXQgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHRoZSBwYXJzZXIKKyAgICBpZiBtb2R1bGU6CisgICAgICAgIF9pdGVtcyA9IFsoayxnZXRhdHRyKG1vZHVsZSxrKSkgZm9yIGsgaW4gZGlyKG1vZHVsZSldCisgICAgICAgIHBkaWN0ID0gZGljdChfaXRlbXMpCisgICAgZWxzZToKKyAgICAgICAgcGRpY3QgPSBnZXRfY2FsbGVyX21vZHVsZV9kaWN0KDIpCisKKyAgICAjIENvbGxlY3QgcGFyc2VyIGluZm9ybWF0aW9uIGZyb20gdGhlIGRpY3Rpb25hcnkKKyAgICBwaW5mbyA9IFBhcnNlclJlZmxlY3QocGRpY3QsbG9nPWVycm9ybG9nKQorICAgIHBpbmZvLmdldF9hbGwoKQorCisgICAgaWYgcGluZm8uZXJyb3I6CisgICAgICAgIHJhaXNlIFlhY2NFcnJvcigiVW5hYmxlIHRvIGJ1aWxkIHBhcnNlciIpCisKKyAgICAjIENoZWNrIHNpZ25hdHVyZSBhZ2FpbnN0IHRhYmxlIGZpbGVzIChpZiBhbnkpCisgICAgc2lnbmF0dXJlID0gcGluZm8uc2lnbmF0dXJlKCkKKworICAgICMgUmVhZCB0aGUgdGFibGVzCisgICAgdHJ5OgorICAgICAgICBsciA9IExSVGFibGUoKQorICAgICAgICBpZiBwaWNrbGVmaWxlOgorICAgICAgICAgICAgcmVhZF9zaWduYXR1cmUgPSBsci5yZWFkX3BpY2tsZShwaWNrbGVmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZF9zaWduYXR1cmUgPSBsci5yZWFkX3RhYmxlKHRhYm1vZHVsZSkKKyAgICAgICAgaWYgb3B0aW1pemUgb3IgKHJlYWRfc2lnbmF0dXJlID09IHNpZ25hdHVyZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHIuYmluZF9jYWxsYWJsZXMocGluZm8ucGRpY3QpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gTFJQYXJzZXIobHIscGluZm8uZXJyb3JfZnVuYykKKyAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlci5wYXJzZQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgd2FzIGEgcHJvYmxlbSBsb2FkaW5nIHRoZSB0YWJsZSBmaWxlOiAlcyIsIHJlcHIoZSkpCisgICAgZXhjZXB0IFZlcnNpb25FcnJvcjoKKyAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoc3RyKGUpKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHBhc3MKKworICAgIGlmIGRlYnVnbG9nIGlzIE5vbmU6CisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgZGVidWdsb2cgPSBQbHlMb2dnZXIob3BlbihkZWJ1Z2ZpbGUsInciKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlYnVnbG9nID0gTnVsbExvZ2dlcigpCisKKyAgICBkZWJ1Z2xvZy5pbmZvKCJDcmVhdGVkIGJ5IFBMWSB2ZXJzaW9uICVzIChodHRwOi8vd3d3LmRhYmVhei5jb20vcGx5KSIsIF9fdmVyc2lvbl9fKQorCisKKyAgICBlcnJvcnMgPSAwCisKKyAgICAjIFZhbGlkYXRlIHRoZSBwYXJzZXIgaW5mb3JtYXRpb24KKyAgICBpZiBwaW5mby52YWxpZGF0ZV9hbGwoKToKKyAgICAgICAgcmFpc2UgWWFjY0Vycm9yKCJVbmFibGUgdG8gYnVpbGQgcGFyc2VyIikKKyAgICAKKyAgICBpZiBub3QgcGluZm8uZXJyb3JfZnVuYzoKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygibm8gcF9lcnJvcigpIGZ1bmN0aW9uIGlzIGRlZmluZWQiKQorCisgICAgIyBDcmVhdGUgYSBncmFtbWFyIG9iamVjdAorICAgIGdyYW1tYXIgPSBHcmFtbWFyKHBpbmZvLnRva2VucykKKworICAgICMgU2V0IHByZWNlZGVuY2UgbGV2ZWwgZm9yIHRlcm1pbmFscworICAgIGZvciB0ZXJtLCBhc3NvYywgbGV2ZWwgaW4gcGluZm8ucHJlY2xpc3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdyYW1tYXIuc2V0X3ByZWNlZGVuY2UodGVybSxhc3NvYyxsZXZlbCkKKyAgICAgICAgZXhjZXB0IEdyYW1tYXJFcnJvcjoKKyAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiJXMiLHN0cihlKSkKKworICAgICMgQWRkIHByb2R1Y3Rpb25zIHRvIHRoZSBncmFtbWFyCisgICAgZm9yIGZ1bmNuYW1lLCBncmFtIGluIHBpbmZvLmdyYW1tYXI6CisgICAgICAgIGZpbGUsIGxpbmUsIHByb2RuYW1lLCBzeW1zID0gZ3JhbQorICAgICAgICB0cnk6CisgICAgICAgICAgICBncmFtbWFyLmFkZF9wcm9kdWN0aW9uKHByb2RuYW1lLHN5bXMsZnVuY25hbWUsZmlsZSxsaW5lKQorICAgICAgICBleGNlcHQgR3JhbW1hckVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBlcnJvcmxvZy5lcnJvcigiJXMiLHN0cihlKSkKKyAgICAgICAgICAgIGVycm9ycyA9IDEKKworICAgICMgU2V0IHRoZSBncmFtbWFyIHN0YXJ0IHN5bWJvbHMKKyAgICB0cnk6CisgICAgICAgIGlmIHN0YXJ0IGlzIE5vbmU6CisgICAgICAgICAgICBncmFtbWFyLnNldF9zdGFydChwaW5mby5zdGFydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyYW1tYXIuc2V0X3N0YXJ0KHN0YXJ0KQorICAgIGV4Y2VwdCBHcmFtbWFyRXJyb3I6CisgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBlcnJvcmxvZy5lcnJvcihzdHIoZSkpCisgICAgICAgIGVycm9ycyA9IDEKKworICAgIGlmIGVycm9yczoKKyAgICAgICAgcmFpc2UgWWFjY0Vycm9yKCJVbmFibGUgdG8gYnVpbGQgcGFyc2VyIikKKworICAgICMgVmVyaWZ5IHRoZSBncmFtbWFyIHN0cnVjdHVyZQorICAgIHVuZGVmaW5lZF9zeW1ib2xzID0gZ3JhbW1hci51bmRlZmluZWRfc3ltYm9scygpCisgICAgZm9yIHN5bSwgcHJvZCBpbiB1bmRlZmluZWRfc3ltYm9sczoKKyAgICAgICAgZXJyb3Jsb2cuZXJyb3IoIiVzOiVkOiBTeW1ib2wgJyVzJyB1c2VkLCBidXQgbm90IGRlZmluZWQgYXMgYSB0b2tlbiBvciBhIHJ1bGUiLHByb2QuZmlsZSxwcm9kLmxpbmUsc3ltKQorICAgICAgICBlcnJvcnMgPSAxCisKKyAgICB1bnVzZWRfdGVybWluYWxzID0gZ3JhbW1hci51bnVzZWRfdGVybWluYWxzKCkKKyAgICBpZiB1bnVzZWRfdGVybWluYWxzOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJVbnVzZWQgdGVybWluYWxzOiIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGZvciB0ZXJtIGluIHVudXNlZF90ZXJtaW5hbHM6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUb2tlbiAnJXMnIGRlZmluZWQsIGJ1dCBub3QgdXNlZCIsIHRlcm0pCisgICAgICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIgICAgJXMiLCB0ZXJtKQorCisgICAgIyBQcmludCBvdXQgYWxsIHByb2R1Y3Rpb25zIHRvIHRoZSBkZWJ1ZyBsb2cKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgZGVidWdsb2cuaW5mbygiIikKKyAgICAgICAgZGVidWdsb2cuaW5mbygiR3JhbW1hciIpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisgICAgICAgIGZvciBuLHAgaW4gZW51bWVyYXRlKGdyYW1tYXIuUHJvZHVjdGlvbnMpOgorICAgICAgICAgICAgZGVidWdsb2cuaW5mbygiUnVsZSAlLTVkICVzIiwgbiwgcCkKKworICAgICMgRmluZCB1bnVzZWQgbm9uLXRlcm1pbmFscworICAgIHVudXNlZF9ydWxlcyA9IGdyYW1tYXIudW51c2VkX3J1bGVzKCkKKyAgICBmb3IgcHJvZCBpbiB1bnVzZWRfcnVsZXM6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIiVzOiVkOiBSdWxlICclcycgZGVmaW5lZCwgYnV0IG5vdCB1c2VkIiwgcHJvZC5maWxlLCBwcm9kLmxpbmUsIHByb2QubmFtZSkKKworICAgIGlmIGxlbih1bnVzZWRfdGVybWluYWxzKSA9PSAxOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSBpcyAxIHVudXNlZCB0b2tlbiIpCisgICAgaWYgbGVuKHVudXNlZF90ZXJtaW5hbHMpID4gMToKKyAgICAgICAgZXJyb3Jsb2cud2FybmluZygiVGhlcmUgYXJlICVkIHVudXNlZCB0b2tlbnMiLCBsZW4odW51c2VkX3Rlcm1pbmFscykpCisKKyAgICBpZiBsZW4odW51c2VkX3J1bGVzKSA9PSAxOgorICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJUaGVyZSBpcyAxIHVudXNlZCBydWxlIikKKyAgICBpZiBsZW4odW51c2VkX3J1bGVzKSA+IDE6CisgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIlRoZXJlIGFyZSAlZCB1bnVzZWQgcnVsZXMiLCBsZW4odW51c2VkX3J1bGVzKSkKKworICAgIGlmIGRlYnVnOgorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJUZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICB0ZXJtcyA9IGxpc3QoZ3JhbW1hci5UZXJtaW5hbHMpCisgICAgICAgIHRlcm1zLnNvcnQoKQorICAgICAgICBmb3IgdGVybSBpbiB0ZXJtczoKKyAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oIiUtMjBzIDogJXMiLCB0ZXJtLCAiICIuam9pbihbc3RyKHMpIGZvciBzIGluIGdyYW1tYXIuVGVybWluYWxzW3Rlcm1dXSkpCisgICAgICAgIAorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCJOb250ZXJtaW5hbHMsIHdpdGggcnVsZXMgd2hlcmUgdGhleSBhcHBlYXIiKQorICAgICAgICBkZWJ1Z2xvZy5pbmZvKCIiKQorICAgICAgICBub250ZXJtcyA9IGxpc3QoZ3JhbW1hci5Ob250ZXJtaW5hbHMpCisgICAgICAgIG5vbnRlcm1zLnNvcnQoKQorICAgICAgICBmb3Igbm9udGVybSBpbiBub250ZXJtczoKKyAgICAgICAgICAgIGRlYnVnbG9nLmluZm8oIiUtMjBzIDogJXMiLCBub250ZXJtLCAiICIuam9pbihbc3RyKHMpIGZvciBzIGluIGdyYW1tYXIuTm9udGVybWluYWxzW25vbnRlcm1dXSkpCisgICAgICAgIGRlYnVnbG9nLmluZm8oIiIpCisKKyAgICBpZiBjaGVja19yZWN1cnNpb246CisgICAgICAgIHVucmVhY2hhYmxlID0gZ3JhbW1hci5maW5kX3VucmVhY2hhYmxlKCkKKyAgICAgICAgZm9yIHUgaW4gdW5yZWFjaGFibGU6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJTeW1ib2wgJyVzJyBpcyB1bnJlYWNoYWJsZSIsdSkKKworICAgICAgICBpbmZpbml0ZSA9IGdyYW1tYXIuaW5maW5pdGVfY3ljbGVzKCkKKyAgICAgICAgZm9yIGluZiBpbiBpbmZpbml0ZToKKyAgICAgICAgICAgIGVycm9ybG9nLmVycm9yKCJJbmZpbml0ZSByZWN1cnNpb24gZGV0ZWN0ZWQgZm9yIHN5bWJvbCAnJXMnIiwgaW5mKQorICAgICAgICAgICAgZXJyb3JzID0gMQorICAgICAgICAKKyAgICB1bnVzZWRfcHJlYyA9IGdyYW1tYXIudW51c2VkX3ByZWNlZGVuY2UoKQorICAgIGZvciB0ZXJtLCBhc3NvYyBpbiB1bnVzZWRfcHJlYzoKKyAgICAgICAgZXJyb3Jsb2cuZXJyb3IoIlByZWNlZGVuY2UgcnVsZSAnJXMnIGRlZmluZWQgZm9yIHVua25vd24gc3ltYm9sICclcyciLCBhc3NvYywgdGVybSkKKyAgICAgICAgZXJyb3JzID0gMQorCisgICAgaWYgZXJyb3JzOgorICAgICAgICByYWlzZSBZYWNjRXJyb3IoIlVuYWJsZSB0byBidWlsZCBwYXJzZXIiKQorICAgIAorICAgICMgUnVuIHRoZSBMUkdlbmVyYXRlZFRhYmxlIG9uIHRoZSBncmFtbWFyCisgICAgaWYgZGVidWc6CisgICAgICAgIGVycm9ybG9nLmRlYnVnKCJHZW5lcmF0aW5nICVzIHRhYmxlcyIsIG1ldGhvZCkKKyAgICAgICAgICAgIAorICAgIGxyID0gTFJHZW5lcmF0ZWRUYWJsZShncmFtbWFyLG1ldGhvZCxkZWJ1Z2xvZykKKworICAgIGlmIGRlYnVnOgorICAgICAgICBudW1fc3IgPSBsZW4obHIuc3JfY29uZmxpY3RzKQorCisgICAgICAgICMgUmVwb3J0IHNoaWZ0L3JlZHVjZSBhbmQgcmVkdWNlL3JlZHVjZSBjb25mbGljdHMKKyAgICAgICAgaWYgbnVtX3NyID09IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIxIHNoaWZ0L3JlZHVjZSBjb25mbGljdCIpCisgICAgICAgIGVsaWYgbnVtX3NyID4gMToKKyAgICAgICAgICAgIGVycm9ybG9nLndhcm5pbmcoIiVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdHMiLCBudW1fc3IpCisKKyAgICAgICAgbnVtX3JyID0gbGVuKGxyLnJyX2NvbmZsaWN0cykKKyAgICAgICAgaWYgbnVtX3JyID09IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIxIHJlZHVjZS9yZWR1Y2UgY29uZmxpY3QiKQorICAgICAgICBlbGlmIG51bV9yciA+IDE6CisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCIlZCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0cyIsIG51bV9ycikKKworICAgICMgV3JpdGUgb3V0IGNvbmZsaWN0cyB0byB0aGUgb3V0cHV0IGZpbGUKKyAgICBpZiBkZWJ1ZyBhbmQgKGxyLnNyX2NvbmZsaWN0cyBvciBsci5ycl9jb25mbGljdHMpOgorICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCIiKQorICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJDb25mbGljdHM6IikKKyAgICAgICAgZGVidWdsb2cud2FybmluZygiIikKKworICAgICAgICBmb3Igc3RhdGUsIHRvaywgcmVzb2x1dGlvbiBpbiBsci5zcl9jb25mbGljdHM6CisgICAgICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJzaGlmdC9yZWR1Y2UgY29uZmxpY3QgZm9yICVzIGluIHN0YXRlICVkIHJlc29sdmVkIGFzICVzIiwgIHRvaywgc3RhdGUsIHJlc29sdXRpb24pCisgICAgICAgIAorICAgICAgICBhbHJlYWR5X3JlcG9ydGVkID0ge30KKyAgICAgICAgZm9yIHN0YXRlLCBydWxlLCByZWplY3RlZCBpbiBsci5ycl9jb25mbGljdHM6CisgICAgICAgICAgICBpZiAoc3RhdGUsaWQocnVsZSksaWQocmVqZWN0ZWQpKSBpbiBhbHJlYWR5X3JlcG9ydGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkZWJ1Z2xvZy53YXJuaW5nKCJyZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGluIHN0YXRlICVkIHJlc29sdmVkIHVzaW5nIHJ1bGUgKCVzKSIsIHN0YXRlLCBydWxlKQorICAgICAgICAgICAgZGVidWdsb2cud2FybmluZygicmVqZWN0ZWQgcnVsZSAoJXMpIGluIHN0YXRlICVkIiwgcmVqZWN0ZWQsc3RhdGUpCisgICAgICAgICAgICBlcnJvcmxvZy53YXJuaW5nKCJyZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IGluIHN0YXRlICVkIHJlc29sdmVkIHVzaW5nIHJ1bGUgKCVzKSIsIHN0YXRlLCBydWxlKQorICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygicmVqZWN0ZWQgcnVsZSAoJXMpIGluIHN0YXRlICVkIiwgcmVqZWN0ZWQsIHN0YXRlKQorICAgICAgICAgICAgYWxyZWFkeV9yZXBvcnRlZFtzdGF0ZSxpZChydWxlKSxpZChyZWplY3RlZCldID0gMQorICAgICAgICAKKyAgICAgICAgd2FybmVkX25ldmVyID0gW10KKyAgICAgICAgZm9yIHN0YXRlLCBydWxlLCByZWplY3RlZCBpbiBsci5ycl9jb25mbGljdHM6CisgICAgICAgICAgICBpZiBub3QgcmVqZWN0ZWQucmVkdWNlZCBhbmQgKHJlamVjdGVkIG5vdCBpbiB3YXJuZWRfbmV2ZXIpOgorICAgICAgICAgICAgICAgIGRlYnVnbG9nLndhcm5pbmcoIlJ1bGUgKCVzKSBpcyBuZXZlciByZWR1Y2VkIiwgcmVqZWN0ZWQpCisgICAgICAgICAgICAgICAgZXJyb3Jsb2cud2FybmluZygiUnVsZSAoJXMpIGlzIG5ldmVyIHJlZHVjZWQiLCByZWplY3RlZCkKKyAgICAgICAgICAgICAgICB3YXJuZWRfbmV2ZXIuYXBwZW5kKHJlamVjdGVkKQorCisgICAgIyBXcml0ZSB0aGUgdGFibGUgZmlsZSBpZiByZXF1ZXN0ZWQKKyAgICBpZiB3cml0ZV90YWJsZXM6CisgICAgICAgIGxyLndyaXRlX3RhYmxlKHRhYm1vZHVsZSxvdXRwdXRkaXIsc2lnbmF0dXJlKQorCisgICAgIyBXcml0ZSBhIHBpY2tsZWQgdmVyc2lvbiBvZiB0aGUgdGFibGVzCisgICAgaWYgcGlja2xlZmlsZToKKyAgICAgICAgbHIucGlja2xlX3RhYmxlKHBpY2tsZWZpbGUsc2lnbmF0dXJlKQorCisgICAgIyBCdWlsZCB0aGUgcGFyc2VyCisgICAgbHIuYmluZF9jYWxsYWJsZXMocGluZm8ucGRpY3QpCisgICAgcGFyc2VyID0gTFJQYXJzZXIobHIscGluZm8uZXJyb3JfZnVuYykKKworICAgIHBhcnNlID0gcGFyc2VyLnBhcnNlCisgICAgcmV0dXJuIHBhcnNlcgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIucHkgYi9iaXRiYWtlL2xpYi9wcm9ncmVzc2Jhci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRjZGMxCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvcHJvZ3Jlc3NiYXIucHkKQEAgLTAsMCArMSwzODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorIworIyBwcm9ncmVzc2JhciAgLSBUZXh0IHByb2dyZXNzYmFyIGxpYnJhcnkgZm9yIHB5dGhvbi4KKyMgQ29weXJpZ2h0IChjKSAyMDA1IE5pbHRvbiBWb2xwYXRvCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCisiIiJUZXh0IHByb2dyZXNzYmFyIGxpYnJhcnkgZm9yIHB5dGhvbi4KKworVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGEgdGV4dCBtb2RlIHByb2dyZXNzYmFyLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkCit0byBkaXNwbGF5IHRoZSBwcm9ncmVzcyBvZiBhIGxvbmcgcnVubmluZyBvcGVyYXRpb24sIHByb3ZpZGluZyBhCit2aXN1YWwgY2x1ZSB0aGF0IHByb2Nlc3NpbmcgaXMgdW5kZXJ3YXkuCisKK1RoZSBQcm9ncmVzc0JhciBjbGFzcyBtYW5hZ2VzIHRoZSBwcm9ncmVzcywgYW5kIHRoZSBmb3JtYXQgb2YgdGhlIGxpbmUKK2lzIGdpdmVuIGJ5IGEgbnVtYmVyIG9mIHdpZGdldHMuIEEgd2lkZ2V0IGlzIGFuIG9iamVjdCB0aGF0IG1heQorZGlzcGxheSBkaWZlcmVudGx5IGRlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHByb2dyZXNzLiBUaGVyZSBhcmUKK3RocmVlIHR5cGVzIG9mIHdpZGdldDoKKy0gYSBzdHJpbmcsIHdoaWNoIGFsd2F5cyBzaG93cyBpdHNlbGY7CistIGEgUHJvZ3Jlc3NCYXJXaWRnZXQsIHdoaWNoIG1heSByZXR1cm4gYSBkaWZlcmVudCB2YWx1ZSBldmVyeSB0aW1lCitpdCdzIHVwZGF0ZSBtZXRob2QgaXMgY2FsbGVkOyBhbmQKKy0gYSBQcm9ncmVzc0JhcldpZGdldEhGaWxsLCB3aGljaCBpcyBsaWtlIFByb2dyZXNzQmFyV2lkZ2V0LCBleGNlcHQgaXQKK2V4cGFuZHMgdG8gZmlsbCB0aGUgcmVtYWluaW5nIHdpZHRoIG9mIHRoZSBsaW5lLgorCitUaGUgcHJvZ3Jlc3NiYXIgbW9kdWxlIGlzIHZlcnkgZWFzeSB0byB1c2UsIHlldCB2ZXJ5IHBvd2VyZnVsLiBBbmQKK2F1dG9tYXRpY2FsbHkgc3VwcG9ydHMgZmVhdHVyZXMgbGlrZSBhdXRvLXJlc2l6aW5nIHdoZW4gYXZhaWxhYmxlLgorIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKworX19hdXRob3JfXyA9ICJOaWx0b24gVm9scGF0byIKK19fYXV0aG9yX2VtYWlsX18gPSAiZmlyc3QtbmFtZSBkb3QgbGFzdC1uYW1lIEAgZ21haWwuY29tIgorX19kYXRlX18gPSAiMjAwNi0wNS0wNyIKK19fdmVyc2lvbl9fID0gIjIuMy1kZXYiCisKK2ltcG9ydCBzeXMsIHRpbWUsIG9zCitmcm9tIGFycmF5IGltcG9ydCBhcnJheQordHJ5OgorICAgIGZyb20gZmNudGwgaW1wb3J0IGlvY3RsCisgICAgaW1wb3J0IHRlcm1pb3MKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitpbXBvcnQgc2lnbmFsCit0cnk6CisgICAgYmFzZXN0cmluZworZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBiYXNlc3RyaW5nID0gKHN0ciwpCisKK2NsYXNzIFByb2dyZXNzQmFyV2lkZ2V0KG9iamVjdCk6CisgICAgIiIiVGhpcyBpcyBhbiBlbGVtZW50IG9mIFByb2dyZXNzQmFyIGZvcm1hdHRpbmcuCisKKyAgICBUaGUgUHJvZ3Jlc3NCYXIgb2JqZWN0IHdpbGwgY2FsbCBpdCdzIHVwZGF0ZSB2YWx1ZSB3aGVuIGFuIHVwZGF0ZQorICAgIGlzIG5lZWRlZC4gSXQncyBzaXplIG1heSBjaGFuZ2UgYmV0d2VlbiBjYWxsLCBidXQgdGhlIHJlc3VsdHMgd2lsbAorICAgIG5vdCBiZSBnb29kIGlmIHRoZSBzaXplIGNoYW5nZXMgZHJhc3RpY2FsbHkgYW5kIHJlcGVhdGVkbHkuCisgICAgIiIiCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgd2lkZ2V0LgorCisgICAgICAgIFRoZSBwYXJhbWV0ZXIgcGJhciBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY2FsbGluZyBQcm9ncmVzc0JhciwKKyAgICAgICAgd2hlcmUgb25lIGNhbiBhY2Nlc3MgYXR0cmlidXRlcyBvZiB0aGUgY2xhc3MgZm9yIGtub3dpbmcgaG93CisgICAgICAgIHRoZSB1cGRhdGUgbXVzdCBiZSBtYWRlLgorCisgICAgICAgIEF0IGxlYXN0IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBvdmVycmlkZW4uIiIiCisgICAgICAgIHBhc3MKKworY2xhc3MgUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbChvYmplY3QpOgorICAgICIiIlRoaXMgaXMgYSB2YXJpYWJsZSB3aWR0aCBlbGVtZW50IG9mIFByb2dyZXNzQmFyIGZvcm1hdHRpbmcuCisKKyAgICBUaGUgUHJvZ3Jlc3NCYXIgb2JqZWN0IHdpbGwgY2FsbCBpdCdzIHVwZGF0ZSB2YWx1ZSwgaW5mb3JtaW5nIHRoZQorICAgIHdpZHRoIHRoaXMgb2JqZWN0IG11c3QgdGhlIG1hZGUuIFRoaXMgaXMgbGlrZSBUZVggXFxoZmlsbCwgaXQgd2lsbAorICAgIGV4cGFuZCB0byBmaWxsIHRoZSBsaW5lLiBZb3UgY2FuIHVzZSBtb3JlIHRoYW4gb25lIGluIHRoZSBzYW1lCisgICAgbGluZSwgYW5kIHRoZXkgd2lsbCBhbGwgaGF2ZSB0aGUgc2FtZSB3aWR0aCwgYW5kIHRvZ2V0aGVyIHdpbGwKKyAgICBmaWxsIHRoZSBsaW5lLgorICAgICIiIgorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB3aWRnZXQuCisKKyAgICAgICAgVGhlIHBhcmFtZXRlciBwYmFyIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBjYWxsaW5nIFByb2dyZXNzQmFyLAorICAgICAgICB3aGVyZSBvbmUgY2FuIGFjY2VzcyBhdHRyaWJ1dGVzIG9mIHRoZSBjbGFzcyBmb3Iga25vd2luZyBob3cKKyAgICAgICAgdGhlIHVwZGF0ZSBtdXN0IGJlIG1hZGUuIFRoZSBwYXJhbWV0ZXIgd2lkdGggaXMgdGhlIHRvdGFsCisgICAgICAgIGhvcml6b250YWwgd2lkdGggdGhlIHdpZGdldCBtdXN0IGhhdmUuCisKKyAgICAgICAgQXQgbGVhc3QgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG92ZXJyaWRlbi4iIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEVUQShQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIldpZGdldCBmb3IgdGhlIEVzdGltYXRlZCBUaW1lIG9mIEFycml2YWwiCisgICAgZGVmIGZvcm1hdF90aW1lKHNlbGYsIHNlY29uZHMpOgorICAgICAgICByZXR1cm4gdGltZS5zdHJmdGltZSgnJUg6JU06JVMnLCB0aW1lLmdtdGltZShzZWNvbmRzKSkKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIpOgorICAgICAgICBpZiBwYmFyLmN1cnJ2YWwgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnRVRBOiAgLS06LS06LS0nCisgICAgICAgIGVsaWYgcGJhci5maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybiAnVGltZTogJXMnICUgc2VsZi5mb3JtYXRfdGltZShwYmFyLnNlY29uZHNfZWxhcHNlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVsYXBzZWQgPSBwYmFyLnNlY29uZHNfZWxhcHNlZAorICAgICAgICAgICAgZXRhID0gZWxhcHNlZCAqIHBiYXIubWF4dmFsIC8gcGJhci5jdXJydmFsIC0gZWxhcHNlZAorICAgICAgICAgICAgcmV0dXJuICdFVEE6ICAlcycgJSBzZWxmLmZvcm1hdF90aW1lKGV0YSkKKworY2xhc3MgRmlsZVRyYW5zZmVyU3BlZWQoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJXaWRnZXQgZm9yIHNob3dpbmcgdGhlIHRyYW5zZmVyIHNwZWVkICh1c2VmdWwgZm9yIGZpbGUgdHJhbnNmZXJzKS4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVuaXQ9J0InKToKKyAgICAgICAgc2VsZi51bml0ID0gdW5pdAorICAgICAgICBzZWxmLmZtdCA9ICclNi4yZiAlcycKKyAgICAgICAgc2VsZi5wcmVmaXhlcyA9IFsnJywgJ0snLCAnTScsICdHJywgJ1QnLCAnUCddCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgaWYgcGJhci5zZWNvbmRzX2VsYXBzZWQgPCAyZS02OiM9PSAwOgorICAgICAgICAgICAgYnBzID0gMC4wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBicHMgPSBwYmFyLmN1cnJ2YWwgLyBwYmFyLnNlY29uZHNfZWxhcHNlZAorICAgICAgICBzcGQgPSBicHMKKyAgICAgICAgZm9yIHUgaW4gc2VsZi5wcmVmaXhlczoKKyAgICAgICAgICAgIGlmIHNwZCA8IDEwMDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNwZCAvPSAxMDAwCisgICAgICAgIHJldHVybiBzZWxmLmZtdCAlIChzcGQsIHUgKyBzZWxmLnVuaXQgKyAnL3MnKQorCitjbGFzcyBSb3RhdGluZ01hcmtlcihQcm9ncmVzc0JhcldpZGdldCk6CisgICAgIkEgcm90YXRpbmcgbWFya2VyIGZvciBmaWxsaW5nIHRoZSBiYXIgb2YgcHJvZ3Jlc3MuIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrZXJzPSd8Ly1cXCcpOgorICAgICAgICBzZWxmLm1hcmtlcnMgPSBtYXJrZXJzCisgICAgICAgIHNlbGYuY3VybWFyayA9IC0xCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgaWYgcGJhci5maW5pc2hlZDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcmtlcnNbMF0KKyAgICAgICAgc2VsZi5jdXJtYXJrID0gKHNlbGYuY3VybWFyayArIDEpICUgbGVuKHNlbGYubWFya2VycykKKyAgICAgICAgcmV0dXJuIHNlbGYubWFya2Vyc1tzZWxmLmN1cm1hcmtdCisKK2NsYXNzIFBlcmNlbnRhZ2UoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJKdXN0IHRoZSBwZXJjZW50YWdlIGRvbmUuIgorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhcik6CisgICAgICAgIHJldHVybiAnJTNkJSUnICUgcGJhci5wZXJjZW50YWdlKCkKKworY2xhc3MgU2ltcGxlUHJvZ3Jlc3MoUHJvZ3Jlc3NCYXJXaWRnZXQpOgorICAgICJSZXR1cm5zIHdoYXQgaXMgYWxyZWFkeSBkb25lIGFuZCB0aGUgdG90YWwsIGUuZy46ICc1IG9mIDQ3JyIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VwPScgb2YgJyk6CisgICAgICAgIHNlbGYuc2VwID0gc2VwCisgICAgZGVmIHVwZGF0ZShzZWxmLCBwYmFyKToKKyAgICAgICAgcmV0dXJuICclZCVzJWQnICUgKHBiYXIuY3VycnZhbCwgc2VsZi5zZXAsIHBiYXIubWF4dmFsKQorCitjbGFzcyBCYXIoUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbCk6CisgICAgIlRoZSBiYXIgb2YgcHJvZ3Jlc3MuIEl0IHdpbGwgc3RyZXRjaCB0byBmaWxsIHRoZSBsaW5lLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya2VyPScjJywgbGVmdD0nfCcsIHJpZ2h0PSd8Jyk6CisgICAgICAgIHNlbGYubWFya2VyID0gbWFya2VyCisgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKKyAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0CisgICAgZGVmIF9mb3JtYXRfbWFya2VyKHNlbGYsIHBiYXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubWFya2VyLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcmtlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFya2VyLnVwZGF0ZShwYmFyKQorICAgIGRlZiB1cGRhdGUoc2VsZiwgcGJhciwgd2lkdGgpOgorICAgICAgICBwZXJjZW50ID0gcGJhci5wZXJjZW50YWdlKCkKKyAgICAgICAgY3dpZHRoID0gd2lkdGggLSBsZW4oc2VsZi5sZWZ0KSAtIGxlbihzZWxmLnJpZ2h0KQorICAgICAgICBtYXJrZWRfd2lkdGggPSBpbnQocGVyY2VudCAqIGN3aWR0aCAvLyAxMDApCisgICAgICAgIG0gPSBzZWxmLl9mb3JtYXRfbWFya2VyKHBiYXIpCisgICAgICAgIGJhciA9IChzZWxmLmxlZnQgKyAobSAqIG1hcmtlZF93aWR0aCkubGp1c3QoY3dpZHRoKSArIHNlbGYucmlnaHQpCisgICAgICAgIHJldHVybiBiYXIKKworY2xhc3MgUmV2ZXJzZUJhcihCYXIpOgorICAgICJUaGUgcmV2ZXJzZSBiYXIgb2YgcHJvZ3Jlc3MsIG9yIGJhciBvZiByZWdyZXNzLiA6KSIKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHBiYXIsIHdpZHRoKToKKyAgICAgICAgcGVyY2VudCA9IHBiYXIucGVyY2VudGFnZSgpCisgICAgICAgIGN3aWR0aCA9IHdpZHRoIC0gbGVuKHNlbGYubGVmdCkgLSBsZW4oc2VsZi5yaWdodCkKKyAgICAgICAgbWFya2VkX3dpZHRoID0gaW50KHBlcmNlbnQgKiBjd2lkdGggLy8gMTAwKQorICAgICAgICBtID0gc2VsZi5fZm9ybWF0X21hcmtlcihwYmFyKQorICAgICAgICBiYXIgPSAoc2VsZi5sZWZ0ICsgKG0qbWFya2VkX3dpZHRoKS5yanVzdChjd2lkdGgpICsgc2VsZi5yaWdodCkKKyAgICAgICAgcmV0dXJuIGJhcgorCitkZWZhdWx0X3dpZGdldHMgPSBbUGVyY2VudGFnZSgpLCAnICcsIEJhcigpXQorY2xhc3MgUHJvZ3Jlc3NCYXIob2JqZWN0KToKKyAgICAiIiJUaGlzIGlzIHRoZSBQcm9ncmVzc0JhciBjbGFzcywgaXQgdXBkYXRlcyBhbmQgcHJpbnRzIHRoZSBiYXIuCisKKyAgICBBIGNvbW1vbiB3YXkgb2YgdXNpbmcgaXQgaXMgbGlrZToKKyAgICA+Pj4gcGJhciA9IFByb2dyZXNzQmFyKCkuc3RhcnQoKQorICAgID4+PiBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAuLi4gICAgIyBkbyBzb21ldGhpbmcKKyAgICAuLi4gICAgcGJhci51cGRhdGUoaSsxKQorICAgIC4uLgorICAgID4+PiBwYmFyLmZpbmlzaCgpCisKKyAgICBZb3UgY2FuIGFsc28gdXNlIGEgcHJvZ3Jlc3NiYXIgYXMgYW4gaXRlcmF0b3I6CisgICAgPj4+IHByb2dyZXNzID0gUHJvZ3Jlc3NCYXIoKQorICAgID4+PiBmb3IgaSBpbiBwcm9ncmVzcyhzb21lX2l0ZXJhYmxlKToKKyAgICAuLi4gICAgIyBkbyBzb21ldGhpbmcKKyAgICAuLi4KKworICAgIEJ1dCBhbnl0aGluZyB5b3Ugd2FudCB0byBkbyBpcyBwb3NzaWJsZSAod2VsbCwgYWxtb3N0IGFueXRoaW5nKS4KKyAgICBZb3UgY2FuIHN1cHBseSBkaWZmZXJlbnQgd2lkZ2V0cyBvZiBhbnkgdHlwZSBpbiBhbnkgb3JkZXIuIEFuZCB5b3UKKyAgICBjYW4gZXZlbiB3cml0ZSB5b3VyIG93biB3aWRnZXRzISBUaGVyZSBhcmUgbWFueSB3aWRnZXRzIGFscmVhZHkKKyAgICBzaGlwcGVkIGFuZCB5b3Ugc2hvdWxkIGV4cGVyaW1lbnQgd2l0aCB0aGVtLgorCisgICAgVGhlIHRlcm1fd2lkdGggcGFyYW1ldGVyIG11c3QgYmUgYW4gaW50ZWdlciBvciBOb25lLiBJbiB0aGUgbGF0dGVyIGNhc2UKKyAgICBpdCB3aWxsIHRyeSB0byBndWVzcyBpdCwgaWYgaXQgZmFpbHMgaXQgd2lsbCBkZWZhdWx0IHRvIDgwIGNvbHVtbnMuCisKKyAgICBXaGVuIGltcGxlbWVudGluZyBhIHdpZGdldCB1cGRhdGUgbWV0aG9kIHlvdSBtYXkgYWNjZXNzIGFueQorICAgIGF0dHJpYnV0ZSBvciBmdW5jdGlvbiBvZiB0aGUgUHJvZ3Jlc3NCYXIgb2JqZWN0IGNhbGxpbmcgdGhlCisgICAgd2lkZ2V0J3MgdXBkYXRlIG1ldGhvZC4gVGhlIG1vc3QgaW1wb3J0YW50IGF0dHJpYnV0ZXMgeW91IHdvdWxkCisgICAgbGlrZSB0byBhY2Nlc3MgYXJlOgorICAgIC0gY3VycnZhbDogY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MsIDAgPD0gY3VycnZhbCA8PSBtYXh2YWwKKyAgICAtIG1heHZhbDogbWF4aW11bSAoYW5kIGZpbmFsKSB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MKKyAgICAtIGZpbmlzaGVkOiBUcnVlIGlmIHRoZSBiYXIgaGFzIGZpbmlzaGVkIChyZWFjaGVkIDEwMCUpLCBGYWxzZSBvL3cKKyAgICAtIHN0YXJ0X3RpbWU6IHRoZSB0aW1lIHdoZW4gc3RhcnQoKSBtZXRob2Qgb2YgUHJvZ3Jlc3NCYXIgd2FzIGNhbGxlZAorICAgIC0gc2Vjb25kc19lbGFwc2VkOiBzZWNvbmRzIGVsYXBzZWQgc2luY2Ugc3RhcnRfdGltZQorICAgIC0gcGVyY2VudGFnZSgpOiBwZXJjZW50YWdlIG9mIHRoZSBwcm9ncmVzcyBbMC4uMTAwXS4gVGhpcyBpcyBhIG1ldGhvZC4KKworICAgIFRoZSBhdHRyaWJ1dGVzIGFib3ZlIGFyZSB1bmxpa2VseSB0byBjaGFuZ2UgYmV0d2VlbiBkaWZmZXJlbnQgdmVyc2lvbnMsCisgICAgdGhlIG90aGVyIG9uZXMgbWF5IGNoYW5nZSBvciBjZWFzZSB0byBleGlzdCB3aXRob3V0IG5vdGljZSwgc28gdHJ5IHRvIHJlbHkKKyAgICBvbmx5IG9uIHRoZSBvbmVzIGRvY3VtZW50ZWQgYWJvdmUgaWYgeW91IGFyZSBleHRlbmRpbmcgdGhlIHByb2dyZXNzIGJhci4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgnY3VycnZhbCcsICdmZCcsICdmaW5pc2hlZCcsICdsYXN0X3VwZGF0ZV90aW1lJywgJ21heHZhbCcsCisgICAgICAgICAgICAgICAgICduZXh0X3VwZGF0ZScsICdudW1faW50ZXJ2YWxzJywgJ3NlY29uZHNfZWxhcHNlZCcsCisgICAgICAgICAgICAgICAgICdzaWduYWxfc2V0JywgJ3N0YXJ0X3RpbWUnLCAndGVybV93aWR0aCcsICd1cGRhdGVfaW50ZXJ2YWwnLAorICAgICAgICAgICAgICAgICAnd2lkZ2V0cycsICdfaXRlcmFibGUnKQorCisgICAgX0RFRkFVTFRfTUFYVkFMID0gMTAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4dmFsPU5vbmUsIHdpZGdldHM9ZGVmYXVsdF93aWRnZXRzLCB0ZXJtX3dpZHRoPU5vbmUsCisgICAgICAgICAgICAgICAgIGZkPXN5cy5zdGRlcnIpOgorICAgICAgICBzZWxmLm1heHZhbCA9IG1heHZhbAorICAgICAgICBzZWxmLndpZGdldHMgPSB3aWRnZXRzCisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICBzZWxmLnNpZ25hbF9zZXQgPSBGYWxzZQorICAgICAgICBpZiB0ZXJtX3dpZHRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi50ZXJtX3dpZHRoID0gdGVybV93aWR0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9yZXNpemUoTm9uZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdXSU5DSCwgc2VsZi5faGFuZGxlX3Jlc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZ25hbF9zZXQgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQgKFN5c3RlbUV4aXQsIEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYudGVybV93aWR0aCA9IGludChvcy5lbnZpcm9uLmdldCgnQ09MVU1OUycsIDgwKSkgLSAxCisKKyAgICAgICAgc2VsZi5jdXJydmFsID0gMAorICAgICAgICBzZWxmLmZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxhc3RfdXBkYXRlX3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuc2Vjb25kc19lbGFwc2VkID0gMAorICAgICAgICBzZWxmLl9pdGVyYWJsZSA9IE5vbmUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBpdGVyYWJsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubWF4dmFsID0gbGVuKGl0ZXJhYmxlKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBJZiB0aGUgaXRlcmFibGUgaGFzIG5vIGxlbmd0aCwgdGhlbiByZWx5IG9uIHRoZSB2YWx1ZSBwcm92aWRlZAorICAgICAgICAgICAgIyBieSB0aGUgdXNlciwgb3RoZXJ3aXNlIGZhaWwuCisgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2Uoc2VsZi5tYXh2YWwsIChpbnQsIGxvbmcpKSBhbmQgc2VsZi5tYXh2YWwgPiAwKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgbWF4dmFsIGZyb20gaXRlcmFibGUuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdSBtdXN0IGV4cGxpY2l0bHkgcHJvdmlkZSBhIG1heHZhbC4nKQorICAgICAgICBzZWxmLl9pdGVyYWJsZSA9IGl0ZXIoaXRlcmFibGUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQgPSBzZWxmLl9pdGVyYWJsZS5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuY3VycnZhbCArIDEpCisgICAgICAgICAgICByZXR1cm4gbmV4dAorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmluaXNoKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2hhbmRsZV9yZXNpemUoc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIGgsIHcgPSBhcnJheSgnaCcsIGlvY3RsKHNlbGYuZmQsIHRlcm1pb3MuVElPQ0dXSU5TWiwgJ1wwJyAqIDgpKVs6Ml0KKyAgICAgICAgc2VsZi50ZXJtX3dpZHRoID0gdworCisgICAgZGVmIHBlcmNlbnRhZ2Uoc2VsZik6CisgICAgICAgICJSZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBwcm9ncmVzcy4iCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJ2YWwgKiAxMDAuMCAvIHNlbGYubWF4dmFsCisKKyAgICBkZWYgX2Zvcm1hdF93aWRnZXRzKHNlbGYpOgorICAgICAgICByID0gW10KKyAgICAgICAgaGZpbGxfaW5kcyA9IFtdCisgICAgICAgIG51bV9oZmlsbCA9IDAKKyAgICAgICAgY3VycndpZHRoID0gMAorICAgICAgICBmb3IgaSwgdyBpbiBlbnVtZXJhdGUoc2VsZi53aWRnZXRzKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodywgUHJvZ3Jlc3NCYXJXaWRnZXRIRmlsbCk6CisgICAgICAgICAgICAgICAgci5hcHBlbmQodykKKyAgICAgICAgICAgICAgICBoZmlsbF9pbmRzLmFwcGVuZChpKQorICAgICAgICAgICAgICAgIG51bV9oZmlsbCArPSAxCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgci5hcHBlbmQodykKKyAgICAgICAgICAgICAgICBjdXJyd2lkdGggKz0gbGVuKHcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdldmFsID0gdy51cGRhdGUoc2VsZikKKyAgICAgICAgICAgICAgICBjdXJyd2lkdGggKz0gbGVuKHdldmFsKQorICAgICAgICAgICAgICAgIHIuYXBwZW5kKHdldmFsKQorICAgICAgICBmb3IgaXcgaW4gaGZpbGxfaW5kczoKKyAgICAgICAgICAgIHdpZGdldF93aWR0aCA9IGludCgoc2VsZi50ZXJtX3dpZHRoIC0gY3VycndpZHRoKSAvLyBudW1faGZpbGwpCisgICAgICAgICAgICByW2l3XSA9IHJbaXddLnVwZGF0ZShzZWxmLCB3aWRnZXRfd2lkdGgpCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2Zvcm1hdF9saW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gJycuam9pbihzZWxmLl9mb3JtYXRfd2lkZ2V0cygpKS5sanVzdChzZWxmLnRlcm1fd2lkdGgpCisKKyAgICBkZWYgX25leHRfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KChpbnQoc2VsZi5udW1faW50ZXJ2YWxzICoKKyAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJ2YWwgLyBzZWxmLm1heHZhbCkpICsgMSkgKgorICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX2ludGVydmFsKQorCisgICAgZGVmIF9uZWVkX3VwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0cnVlIHdoZW4gdGhlIHByb2dyZXNzYmFyIHNob3VsZCBwcmludCBhbiB1cGRhdGVkIGxpbmUuCisKKyAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB5b3Ugd2FudCBmaW5lciBncmFpbmVkIGNvbnRyb2wgb3ZlcgorICAgICAgICB1cGRhdGVzLgorCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG9wdGltaXplZCB0byBiZSBhcyBmYXN0IGFzIHBvc3NpYmxlIGFuZAorICAgICAgICBhcyBlY29ub21pY2FsIGFzIHBvc3NpYmxlIGluIHRoZSBudW1iZXIgb2YgdXBkYXRlcy4gSG93ZXZlciwgZGVwZW5kaW5nCisgICAgICAgIG9uIHlvdXIgdXNhZ2UgeW91IG1heSB3YW50IHRvIGRvIG1vcmUgdXBkYXRlcy4gRm9yIGluc3RhbmNlLCBpZiB5b3VyCisgICAgICAgIHByb2dyZXNzYmFyIHN0YXlzIGluIHRoZSBzYW1lIHBlcmNlbnRhZ2UgZm9yIGEgbG9uZyB0aW1lLCBhbmQgeW91IHdhbnQKKyAgICAgICAgdG8gdXBkYXRlIG90aGVyIHdpZGdldHMsIGxpa2UgRVRBLCB0aGVuIHlvdSBjb3VsZCByZXR1cm4gVHJ1ZSBhZnRlcgorICAgICAgICBzb21lIHRpbWUgaGFzIHBhc3NlZCB3aXRoIG5vIHVwZGF0ZXMuCisKKyAgICAgICAgSWRlYWxseSB5b3UgY291bGQgY2FsbCBzZWxmLl9mb3JtYXRfbGluZSgpIGFuZCBzZWUgaWYgaXQncyBkaWZmZXJlbnQKKyAgICAgICAgZnJvbSB0aGUgcHJldmlvdXMgX2Zvcm1hdF9saW5lKCkgY2FsbCwgYnV0IGNhbGxpbmcgX2Zvcm1hdF9saW5lKCkgdGFrZXMKKyAgICAgICAgYXJvdW5kIDIwIHRpbWVzIG1vcmUgdGltZSB0aGFuIGNhbGxpbmcgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBfbmVlZF91cGRhdGUoKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmN1cnJ2YWwgPj0gc2VsZi5uZXh0X3VwZGF0ZQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICJVcGRhdGVzIHRoZSBwcm9ncmVzcyBiYXIgdG8gYSBuZXcgdmFsdWUuIgorICAgICAgICBhc3NlcnQgMCA8PSB2YWx1ZSA8PSBzZWxmLm1heHZhbCwgJzAgPD0gJWQgPD0gJWQnICUgKHZhbHVlLCBzZWxmLm1heHZhbCkKKyAgICAgICAgc2VsZi5jdXJydmFsID0gdmFsdWUKKyAgICAgICAgaWYgbm90IHNlbGYuX25lZWRfdXBkYXRlKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5zdGFydF90aW1lIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1lvdSBtdXN0IGNhbGwgc3RhcnQoKSBiZWZvcmUgY2FsbGluZyB1cGRhdGUoKScpCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuc2Vjb25kc19lbGFwc2VkID0gbm93IC0gc2VsZi5zdGFydF90aW1lCisgICAgICAgIHNlbGYubmV4dF91cGRhdGUgPSBzZWxmLl9uZXh0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuZmQud3JpdGUoc2VsZi5fZm9ybWF0X2xpbmUoKSArICdccicpCisgICAgICAgIHNlbGYubGFzdF91cGRhdGVfdGltZSA9IG5vdworCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAiIiJTdGFydHMgbWVhc3VyaW5nIHRpbWUsIGFuZCBwcmludHMgdGhlIGJhciBhdCAwJS4KKworICAgICAgICBJdCByZXR1cm5zIHNlbGYgc28geW91IGNhbiB1c2UgaXQgbGlrZSB0aGlzOgorICAgICAgICA+Pj4gcGJhciA9IFByb2dyZXNzQmFyKCkuc3RhcnQoKQorICAgICAgICA+Pj4gZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgIC4uLiAgICAjIGRvIHNvbWV0aGluZworICAgICAgICAuLi4gICAgcGJhci51cGRhdGUoaSsxKQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IHBiYXIuZmluaXNoKCkKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYubWF4dmFsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1heHZhbCA9IHNlbGYuX0RFRkFVTFRfTUFYVkFMCisgICAgICAgIGFzc2VydCBzZWxmLm1heHZhbCA+IDAKKworICAgICAgICBzZWxmLm51bV9pbnRlcnZhbHMgPSBtYXgoMTAwLCBzZWxmLnRlcm1fd2lkdGgpCisgICAgICAgIHNlbGYudXBkYXRlX2ludGVydmFsID0gc2VsZi5tYXh2YWwgLyBzZWxmLm51bV9pbnRlcnZhbHMKKyAgICAgICAgc2VsZi5uZXh0X3VwZGF0ZSA9IDAKKworICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzZWxmLmxhc3RfdXBkYXRlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLnVwZGF0ZSgwKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGZpbmlzaChzZWxmKToKKyAgICAgICAgIiIiVXNlZCB0byB0ZWxsIHRoZSBwcm9ncmVzcyBpcyBmaW5pc2hlZC4iIiIKKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IFRydWUKKyAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5tYXh2YWwpCisgICAgICAgIHNlbGYuZmQud3JpdGUoJ1xuJykKKyAgICAgICAgaWYgc2VsZi5zaWduYWxfc2V0OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHV0lOQ0gsIHNpZ25hbC5TSUdfREZMKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvcHJzZXJ2L19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvcHJzZXJ2L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzY2I3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9wcnNlcnYvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNCBAQAorX192ZXJzaW9uX18gPSAiMS4wLjAiCisKK2ltcG9ydCBvcywgdGltZQoraW1wb3J0IHN5cyxsb2dnaW5nCisKK2RlZiBpbml0X2xvZ2dlcihsb2dmaWxlLCBsb2dsZXZlbCk6CisgICAgbnVtZXJpY19sZXZlbCA9IGdldGF0dHIobG9nZ2luZywgbG9nbGV2ZWwudXBwZXIoKSwgTm9uZSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShudW1lcmljX2xldmVsLCBpbnQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGxvZyBsZXZlbDogJXMnICUgbG9nbGV2ZWwpCisgICAgRk9STUFUID0gJyUoYXNjdGltZSktMTVzICUobWVzc2FnZSlzJworICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bnVtZXJpY19sZXZlbCwgZmlsZW5hbWU9bG9nZmlsZSwgZm9ybWF0PUZPUk1BVCkKKworY2xhc3MgTm90Rm91bmRFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3Byc2Vydi9kYi5weSBiL2JpdGJha2UvbGliL3Byc2Vydi9kYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzc5NTgwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvcHJzZXJ2L2RiLnB5CkBAIC0wLDAgKzEsMjY4IEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBlcnJubworaW1wb3J0IHByc2VydgoraW1wb3J0IHRpbWUKKwordHJ5OgorICAgIGltcG9ydCBzcWxpdGUzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBweXNxbGl0ZTIgaW1wb3J0IGRiYXBpMiBhcyBzcWxpdGUzCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBSc2VydiIpCisKK3NxbHZlcnNpb24gPSBzcWxpdGUzLnNxbGl0ZV92ZXJzaW9uX2luZm8KK2lmIHNxbHZlcnNpb25bMF0gPCAzIG9yIChzcWx2ZXJzaW9uWzBdID09IDMgYW5kIHNxbHZlcnNpb25bMV0gPCAzKToKKyAgICByYWlzZSBFeGNlcHRpb24oInNxbGl0ZTMgdmVyc2lvbiAzLjMuMCBvciBsYXRlciBpcyByZXF1aXJlZC4iKQorCisjCisjICJObyBIaXN0b3J5IiBtb2RlIC0gZm9yIGEgZ2l2ZW4gcXVlcnkgdHVwbGUgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSwKKyMgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdGhlIGxhcmdlc3QgYW1vbmcgYWxsIHRoZSB2YWx1ZXMgb2YgdGhlIHNhbWUKKyMgKHZlcnNpb24sIHBrZ2FyY2gpLiBUaGlzIG1lYW5zIHRoZSBQUiB2YWx1ZSByZXR1cm5lZCBjYW4gTk9UIGJlIGRlY3JlbWVudGVkLgorIworIyAiSGlzdG9yeSIgbW9kZSAtIFJldHVybiBhIG5ldyBoaWdoZXIgdmFsdWUgZm9yIHByZXZpb3VzbHkgdW5zZWVuIHF1ZXJ5CisjIHR1cGxlICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSksIG90aGVyd2lzZSByZXR1cm4gaGlzdG9yaWNhbCB2YWx1ZS4KKyMgVmFsdWUgY2FuIGRlY3JlbWVudCBpZiByZXR1cm5pbmcgdG8gYSBwcmV2aW91cyBidWlsZC4KKyMKKworY2xhc3MgUFJUYWJsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCB0YWJsZSwgbm9oaXN0KToKKyAgICAgICAgc2VsZi5jb25uID0gY29ubgorICAgICAgICBzZWxmLm5vaGlzdCA9IG5vaGlzdAorICAgICAgICBzZWxmLmRpcnR5ID0gRmFsc2UKKyAgICAgICAgaWYgbm9oaXN0OgorICAgICAgICAgICAgc2VsZi50YWJsZSA9ICIlc19ub2hpc3QiICUgdGFibGUgCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRhYmxlID0gIiVzX2hpc3QiICUgdGFibGUgCisKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJXMgXAorICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiBURVhUIE5PVCBOVUxMLCBcCisgICAgICAgICAgICAgICAgICAgIHBrZ2FyY2ggVEVYVCBOT1QgTlVMTCwgIFwKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gVEVYVCBOT1QgTlVMTCwgXAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBJTlRFR0VSLCBcCisgICAgICAgICAgICAgICAgICAgIFBSSU1BUlkgS0VZICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpOyIgJSBzZWxmLnRhYmxlKQorCisgICAgZGVmIF9leGVjdXRlKHNlbGYsICpxdWVyeSk6CisgICAgICAgICIiIkV4ZWN1dGUgYSBxdWVyeSwgd2FpdGluZyB0byBhY3F1aXJlIGEgbG9jayBpZiBuZWNlc3NhcnkiIiIKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBlbmQgPSBzdGFydCArIDIwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29ubi5leGVjdXRlKCpxdWVyeSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLk9wZXJhdGlvbmFsRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmICdpcyBsb2NrZWQnIGluIHN0cihleGMpIGFuZCBlbmQgPiB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKworICAgIGRlZiBzeW5jKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm4uY29tbWl0KCkKKyAgICAgICAgc2VsZi5fZXhlY3V0ZSgiQkVHSU4gRVhDTFVTSVZFIFRSQU5TQUNUSU9OIikKKworICAgIGRlZiBzeW5jX2lmX2RpcnR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRpcnR5OgorICAgICAgICAgICAgc2VsZi5zeW5jKCkKKyAgICAgICAgICAgIHNlbGYuZGlydHkgPSBGYWxzZQorCisgICAgZGVmIF9nZXRWYWx1ZUhpc3Qoc2VsZiwgdmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pOgorICAgICAgICBkYXRhPXNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKSkKKyAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNubyB2YWx1ZSBmb3VuZCwgdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIklOU0VSVCBJTlRPICVzIFZBTFVFUyAoPywgPywgPywgKHNlbGVjdCBpZm51bGwobWF4KHZhbHVlKSsxLDApIGZyb20gJXMgd2hlcmUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8pKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnRhYmxlLHNlbGYudGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24scGtnYXJjaCwgY2hlY2tzdW0sdmVyc2lvbiwgcGtnYXJjaCkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorCisgICAgICAgICAgICBzZWxmLmRpcnR5ID0gVHJ1ZQorCisgICAgICAgICAgICBkYXRhPXNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/OyIgJSBzZWxmLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcm93WzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIHByc2Vydi5Ob3RGb3VuZEVycm9yCisKKyAgICBkZWYgX2dldFZhbHVlTm9oaXN0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgZGF0YT1zZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgdmVyc2lvbj0/IEFORCBwa2dhcmNoPT8gQU5EIGNoZWNrc3VtPT8gQU5EIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA+PSAoc2VsZWN0IG1heCh2YWx1ZSkgZnJvbSAlcyB3aGVyZSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9Pyk7IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLnRhYmxlLCBzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZlcnNpb24sIHBrZ2FyY2gpKQorICAgICAgICByb3c9ZGF0YS5mZXRjaG9uZSgpCisgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI25vIHZhbHVlIGZvdW5kLCB0cnkgdG8gaW5zZXJ0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAlcyBWQUxVRVMgKD8sID8sID8sIChzZWxlY3QgaWZudWxsKG1heCh2YWx1ZSkrMSwwKSBmcm9tICVzIHdoZXJlIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/KSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYudGFibGUsc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2ZXJzaW9uLCBwa2dhcmNoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICAgICAgc2VsZi5jb25uLnJvbGxiYWNrKCkKKworICAgICAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKKworICAgICAgICAgICAgZGF0YT1zZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pKQorICAgICAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICAgICAgaWYgcm93ICE9IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBwcnNlcnYuTm90Rm91bmRFcnJvcgorCisgICAgZGVmIGdldFZhbHVlKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKToKKyAgICAgICAgaWYgc2VsZi5ub2hpc3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0VmFsdWVOb2hpc3QodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0VmFsdWVIaXN0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorCisgICAgZGVmIF9pbXBvcnRIaXN0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIHZhbCA9IE5vbmUgCisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgIHJvdyA9IGRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHZhbD1yb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNubyB2YWx1ZSBmb3VuZCwgdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIklOU0VSVCBJTlRPICVzIFZBTFVFUyAoPywgPywgPywgPyk7IiAgJSAoc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCisKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRlKCJTRUxFQ1QgdmFsdWUgRlJPTSAlcyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSkpCisgICAgICAgICAgICByb3cgPSBkYXRhLmZldGNob25lKCkKKyAgICAgICAgICAgIGlmIHJvdyAhPSBOb25lOgorICAgICAgICAgICAgICAgIHZhbCA9IHJvd1swXQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgX2ltcG9ydE5vaGlzdChzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjdHJ5IHRvIGluc2VydAorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZSgiSU5TRVJUIElOVE8gJXMgVkFMVUVTICg/LCA/LCA/LCA/KTsiICAlIChzZWxmLnRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSx2YWx1ZSkpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUzLkludGVncml0eUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICNhbHJlYWR5IGhhdmUgdGhlIHJlY29yZCwgdHJ5IHRvIHVwZGF0ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGUoIlVQREFURSAlcyBTRVQgdmFsdWU9PyBXSEVSRSB2ZXJzaW9uPT8gQU5EIHBrZ2FyY2g9PyBBTkQgY2hlY2tzdW09PyBBTkQgdmFsdWU8PyIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50YWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlMy5JbnRlZ3JpdHlFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorCisgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCisKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoIlNFTEVDVCB2YWx1ZSBGUk9NICVzIFdIRVJFIHZlcnNpb249PyBBTkQgcGtnYXJjaD0/IEFORCBjaGVja3N1bT0/IEFORCB2YWx1ZT49PzsiICUgc2VsZi50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKSkKKyAgICAgICAgcm93PWRhdGEuZmV0Y2hvbmUoKQorICAgICAgICBpZiByb3cgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiByb3dbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaW1wb3J0b25lKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYubm9oaXN0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ltcG9ydE5vaGlzdCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faW1wb3J0SGlzdCh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpCisKKyAgICBkZWYgZXhwb3J0KHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCBjb2xpbmZvKToKKyAgICAgICAgbWV0YWluZm8gPSB7fQorICAgICAgICAjY29sdW1uIGluZm8gCisgICAgICAgIGlmIGNvbGluZm86CisgICAgICAgICAgICBtZXRhaW5mb1sndGJsX25hbWUnXSA9IHNlbGYudGFibGUKKyAgICAgICAgICAgIG1ldGFpbmZvWydjb3JlX3ZlciddID0gcHJzZXJ2Ll9fdmVyc2lvbl9fCisgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXSA9IFtdCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZSgiUFJBR01BIHRhYmxlX2luZm8oJXMpOyIgJSBzZWxmLnRhYmxlKQorICAgICAgICAgICAgZm9yIHJvdyBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGNvbCA9IHt9CisgICAgICAgICAgICAgICAgY29sWyduYW1lJ10gPSByb3dbJ25hbWUnXQorICAgICAgICAgICAgICAgIGNvbFsndHlwZSddID0gcm93Wyd0eXBlJ10KKyAgICAgICAgICAgICAgICBjb2xbJ25vdG51bGwnXSA9IHJvd1snbm90bnVsbCddCisgICAgICAgICAgICAgICAgY29sWydkZmx0X3ZhbHVlJ10gPSByb3dbJ2RmbHRfdmFsdWUnXQorICAgICAgICAgICAgICAgIGNvbFsncGsnXSA9IHJvd1sncGsnXQorICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddLmFwcGVuZChjb2wpCisKKyAgICAgICAgI2RhdGEgaW5mbworICAgICAgICBkYXRhaW5mbyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5ub2hpc3Q6CisgICAgICAgICAgICBzcWxzdG10ID0gIlNFTEVDVCBUMS52ZXJzaW9uLCBUMS5wa2dhcmNoLCBUMS5jaGVja3N1bSwgVDEudmFsdWUgRlJPTSAlcyBhcyBUMSwgXAorICAgICAgICAgICAgICAgICAgICAoU0VMRUNUIHZlcnNpb24scGtnYXJjaCxtYXgodmFsdWUpIGFzIG1heHZhbHVlIEZST00gJXMgR1JPVVAgQlkgdmVyc2lvbixwa2dhcmNoKSBhcyBUMiBcCisgICAgICAgICAgICAgICAgICAgIFdIRVJFIFQxLnZlcnNpb249VDIudmVyc2lvbiBBTkQgVDEucGtnYXJjaD1UMi5wa2dhcmNoIEFORCBUMS52YWx1ZT1UMi5tYXh2YWx1ZSAiICUgKHNlbGYudGFibGUsIHNlbGYudGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcWxzdG10ID0gIlNFTEVDVCAqIEZST00gJXMgYXMgVDEgV0hFUkUgMT0xICIgJSBzZWxmLnRhYmxlCisgICAgICAgIHNxbGFyZyA9IFtdCisgICAgICAgIHdoZXJlID0gIiIKKyAgICAgICAgaWYgdmVyc2lvbjoKKyAgICAgICAgICAgIHdoZXJlICs9ICJBTkQgVDEudmVyc2lvbj0/ICIKKyAgICAgICAgICAgIHNxbGFyZy5hcHBlbmQoc3RyKHZlcnNpb24pKQorICAgICAgICBpZiBwa2dhcmNoOgorICAgICAgICAgICAgd2hlcmUgKz0gIkFORCBUMS5wa2dhcmNoPT8gIgorICAgICAgICAgICAgc3FsYXJnLmFwcGVuZChzdHIocGtnYXJjaCkpCisgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgd2hlcmUgKz0gIkFORCBUMS5jaGVja3N1bT0/ICIKKyAgICAgICAgICAgIHNxbGFyZy5hcHBlbmQoc3RyKGNoZWNrc3VtKSkKKworICAgICAgICBzcWxzdG10ICs9IHdoZXJlICsgIjsiCisKKyAgICAgICAgaWYgbGVuKHNxbGFyZyk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZXhlY3V0ZShzcWxzdG10LCB0dXBsZShzcWxhcmcpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGUoc3Fsc3RtdCkKKyAgICAgICAgZm9yIHJvdyBpbiBkYXRhOgorICAgICAgICAgICAgaWYgcm93Wyd2ZXJzaW9uJ106CisgICAgICAgICAgICAgICAgY29sID0ge30KKyAgICAgICAgICAgICAgICBjb2xbJ3ZlcnNpb24nXSA9IHJvd1sndmVyc2lvbiddCisgICAgICAgICAgICAgICAgY29sWydwa2dhcmNoJ10gPSByb3dbJ3BrZ2FyY2gnXQorICAgICAgICAgICAgICAgIGNvbFsnY2hlY2tzdW0nXSA9IHJvd1snY2hlY2tzdW0nXQorICAgICAgICAgICAgICAgIGNvbFsndmFsdWUnXSA9IHJvd1sndmFsdWUnXQorICAgICAgICAgICAgICAgIGRhdGFpbmZvLmFwcGVuZChjb2wpCisgICAgICAgIHJldHVybiAobWV0YWluZm8sIGRhdGFpbmZvKQorCitjbGFzcyBQUkRhdGEob2JqZWN0KToKKyAgICAiIiJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBQUiBkYXRhYmFzZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbm9oaXN0PVRydWUpOgorICAgICAgICBzZWxmLmZpbGVuYW1lPW9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5ub2hpc3Q9bm9oaXN0CisgICAgICAgICNidWlsZCBkaXJlY3RvcnkgaGllcmFyY2h5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShzZWxmLmZpbGVuYW1lKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uPXNxbGl0ZTMuY29ubmVjdChzZWxmLmZpbGVuYW1lLCBpc29sYXRpb25fbGV2ZWw9IkVYQ0xVU0lWRSIsIGNoZWNrX3NhbWVfdGhyZWFkID0gRmFsc2UpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yb3dfZmFjdG9yeT1zcWxpdGUzLlJvdworICAgICAgICBzZWxmLmNvbm5lY3Rpb24uZXhlY3V0ZSgicHJhZ21hIHN5bmNocm9ub3VzID0gb2ZmOyIpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5leGVjdXRlKCJQUkFHTUEgam91cm5hbF9tb2RlID0gV0FMOyIpCisgICAgICAgIHNlbGYuX3RhYmxlcz17fQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5jbG9zZSgpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZix0YmxuYW1lKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGJsbmFtZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInRibG5hbWUgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgbm90ICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHRibG5hbWUpKQorICAgICAgICBpZiB0YmxuYW1lIGluIHNlbGYuX3RhYmxlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90YWJsZXNbdGJsbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhYmxlb2JqID0gc2VsZi5fdGFibGVzW3RibG5hbWVdID0gUFJUYWJsZShzZWxmLmNvbm5lY3Rpb24sIHRibG5hbWUsIHNlbGYubm9oaXN0KQorICAgICAgICAgICAgcmV0dXJuIHRhYmxlb2JqCisKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgdGJsbmFtZSk6CisgICAgICAgIGlmIHRibG5hbWUgaW4gc2VsZi5fdGFibGVzOgorICAgICAgICAgICAgZGVsIHNlbGYuX3RhYmxlc1t0YmxuYW1lXQorICAgICAgICBsb2dnZXIuaW5mbygiZHJvcCB0YWJsZSAlcyIgJSAodGJsbmFtZSkpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5leGVjdXRlKCJEUk9QIFRBQkxFIElGIEVYSVNUUyAlczsiICUgdGJsbmFtZSkgCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weSBiL2JpdGJha2UvbGliL3Byc2Vydi9zZXJ2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMGZmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi9wcnNlcnYvc2Vydi5weQpAQCAtMCwwICsxLDQxOCBAQAoraW1wb3J0IG9zLHN5cyxsb2dnaW5nCitpbXBvcnQgc2lnbmFsLCB0aW1lCitmcm9tIFNpbXBsZVhNTFJQQ1NlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyLCBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IFF1ZXVlCisKK3RyeToKKyAgICBpbXBvcnQgc3FsaXRlMworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gcHlzcWxpdGUyIGltcG9ydCBkYmFwaTIgYXMgc3FsaXRlMworCitpbXBvcnQgYmIuc2VydmVyLnhtbHJwYworaW1wb3J0IHByc2VydgoraW1wb3J0IHByc2Vydi5kYgoraW1wb3J0IGVycm5vCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJCaXRCYWtlLlBSc2VydiIpCisKK2lmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA2MDBGMDoKKyAgICBwcmludCgiU29ycnksIHB5dGhvbiAyLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuIikKKyAgICBzeXMuZXhpdCgxKQorCitjbGFzcyBIYW5kbGVyKFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICBkZWYgX2Rpc3BhdGNoKHNlbGYsbWV0aG9kLHBhcmFtcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlPXNlbGYuc2VydmVyLmZ1bmNzW21ldGhvZF0oKnBhcmFtcykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gdmFsdWUKKworUElEUFJFRklYID0gIi90bXAvUFJTZXJ2ZXJfJXNfJXMucGlkIgorc2luZ2xldG9uID0gTm9uZQorCisKK2NsYXNzIFBSU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiZmlsZSwgbG9nZmlsZSwgaW50ZXJmYWNlLCBkYWVtb249VHJ1ZSk6CisgICAgICAgICcnJyBjb25zdHJ1Y3RvciAnJycKKyAgICAgICAgaW1wb3J0IHNvY2tldAorICAgICAgICB0cnk6CisgICAgICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuX19pbml0X18oc2VsZiwgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBhbGxvd19ub25lPVRydWUpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBpcD1zb2NrZXQuZ2V0aG9zdGJ5bmFtZShpbnRlcmZhY2VbMF0pCisgICAgICAgICAgICBwb3J0PWludGVyZmFjZVsxXQorICAgICAgICAgICAgbXNnPSJQUiBTZXJ2ZXIgdW5hYmxlIHRvIGJpbmQgdG8gJXM6JXNcbiIgJSAoaXAsIHBvcnQpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZykKKyAgICAgICAgICAgIHJhaXNlIFBSU2VydmljZUNvbmZpZ0Vycm9yCisKKyAgICAgICAgc2VsZi5kYmZpbGU9ZGJmaWxlCisgICAgICAgIHNlbGYuZGFlbW9uPWRhZW1vbgorICAgICAgICBzZWxmLmxvZ2ZpbGU9bG9nZmlsZQorICAgICAgICBzZWxmLndvcmtpbmdfdGhyZWFkPU5vbmUKKyAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYucGlkZmlsZT1QSURQUkVGSVggJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLmdldFBSLCAiZ2V0UFIiKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYucXVpdCwgInF1aXQiKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYucGluZywgInBpbmciKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2Z1bmN0aW9uKHNlbGYuZXhwb3J0LCAiZXhwb3J0IikKKyAgICAgICAgc2VsZi5yZWdpc3Rlcl9mdW5jdGlvbihzZWxmLmltcG9ydG9uZSwgImltcG9ydG9uZSIpCisgICAgICAgIHNlbGYucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnMoKQorCisgICAgICAgIHNlbGYuZGIgPSBwcnNlcnYuZGIuUFJEYXRhKHNlbGYuZGJmaWxlKQorICAgICAgICBzZWxmLnRhYmxlID0gc2VsZi5kYlsiUFJNQUlOIl0KKworICAgICAgICBzZWxmLnJlcXVlc3RxdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQgPSBzZWxmLnByb2Nlc3NfcmVxdWVzdF90aHJlYWQpCisgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZC5kYWVtb24gPSBGYWxzZQorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdF90aHJlYWQoc2VsZik6CisgICAgICAgICIiIlNhbWUgYXMgaW4gQmFzZVNlcnZlciBidXQgYXMgYSB0aHJlYWQuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIGV4Y2VwdGlvbiBoYW5kbGluZyBpcyBkb25lIGhlcmUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGl0ZXJfY291bnQgPSAxCisgICAgICAgICMgNjAgaXRlcmF0aW9ucyBiZXR3ZWVuIHN5bmNzIG9yIHN5bmMgaWYgZGlydHkgZXZlcnkgfjMwIHNlY29uZHMKKyAgICAgICAgaXRlcmF0aW9uc19iZXR3ZWVuX3N5bmMgPSA2MAorCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKSA9IHNlbGYucmVxdWVzdHF1ZXVlLmdldChUcnVlLCAzMCkKKyAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmNfaWZfZGlydHkoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBpdGVyX2NvdW50ID0gKGl0ZXJfY291bnQgKyAxKSAlIGl0ZXJhdGlvbnNfYmV0d2Vlbl9zeW5jCisgICAgICAgICAgICAgICAgaWYgaXRlcl9jb3VudCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmNfaWZfZGlydHkoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYudGFibGUuc3luYygpCisgICAgICAgICAgICBzZWxmLnRhYmxlLnN5bmNfaWZfZGlydHkoKQorCisgICAgZGVmIHNpZ2ludF9oYW5kbGVyKHNlbGYsIHNpZ251bSwgc3RhY2spOgorICAgICAgICBzZWxmLnRhYmxlLnN5bmMoKQorCisgICAgZGVmIHNpZ3Rlcm1faGFuZGxlcihzZWxmLCBzaWdudW0sIHN0YWNrKToKKyAgICAgICAgc2VsZi50YWJsZS5zeW5jKCkKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIHNlbGYucmVxdWVzdHF1ZXVlLnB1dCgocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpKQorCisgICAgZGVmIGV4cG9ydChzZWxmLCB2ZXJzaW9uPU5vbmUsIHBrZ2FyY2g9Tm9uZSwgY2hlY2tzdW09Tm9uZSwgY29saW5mbz1UcnVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFibGUuZXhwb3J0KHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCBjb2xpbmZvKQorICAgICAgICBleGNlcHQgc3FsaXRlMy5FcnJvciBhcyBleGM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc3RyKGV4YykpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGltcG9ydG9uZShzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi50YWJsZS5pbXBvcnRvbmUodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKQorCisgICAgZGVmIHBpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5xdWl0CisKKyAgICBkZWYgZ2V0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgIGRlZiBnZXRQUihzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRhYmxlLmdldFZhbHVlKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorICAgICAgICBleGNlcHQgcHJzZXJ2Lk5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoImNhbiBub3QgZmluZCB2YWx1ZSBmb3IgKCVzLCAlcykiLHZlcnNpb24sIGNoZWNrc3VtKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhjZXB0IHNxbGl0ZTMuRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHN0cihleGMpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBxdWl0KHNlbGYpOgorICAgICAgICBzZWxmLnF1aXQ9VHJ1ZQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB3b3JrX2ZvcmV2ZXIoc2VsZiwpOgorICAgICAgICBzZWxmLnF1aXQgPSBGYWxzZQorICAgICAgICBzZWxmLnRpbWVvdXQgPSAwLjUKKworICAgICAgICBsb2dnZXIuaW5mbygiU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZTogJXMsIElQOiAlcywgUE9SVDogJXMsIFBJRDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgIChzZWxmLmRiZmlsZSwgc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHN0cihvcy5nZXRwaWQoKSkpKQorCisgICAgICAgIHNlbGYuaGFuZGxlcnRocmVhZC5zdGFydCgpCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnF1aXQ6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgc2VsZi5oYW5kbGVydGhyZWFkLmpvaW4oKQorICAgICAgICBzZWxmLnRhYmxlLnN5bmMoKQorICAgICAgICBsb2dnZXIuaW5mbygiUFJTZXJ2ZXI6IHN0b3BwaW5nLi4uIikKKyAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kYWVtb246CisgICAgICAgICAgICBwaWQgPSBzZWxmLmRhZW1vbml6ZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwaWQgPSBzZWxmLmZvcmsoKQorCisgICAgICAgICMgRW5zdXJlIGJvdGggdGhlIHBhcmVudCBzZWVzIHRoaXMgYW5kIHRoZSBjaGlsZCBmcm9tIHRoZSB3b3JrX2ZvcmV2ZXIgbG9nIGVudHJ5IGFib3ZlCisgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGVkIFBSU2VydmVyIHdpdGggREJmaWxlOiAlcywgSVA6ICVzLCBQT1JUOiAlcywgUElEOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZGJmaWxlLCBzZWxmLmhvc3QsIHNlbGYucG9ydCwgc3RyKHBpZCkpKQorCisgICAgZGVmIGRlbHBpZChzZWxmKToKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYucGlkZmlsZSkKKworICAgIGRlZiBkYWVtb25pemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZWUgQWR2YW5jZWQgUHJvZ3JhbW1pbmcgaW4gdGhlIFVOSVgsIFNlYyAxMy4zCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA+IDA6CisgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICAgICAgI3BhcmVudCByZXR1cm4gaW5zdGVhZCBvZiBleGl0IHRvIGdpdmUgY29udHJvbCAKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIFslZF0iICUgKGUuc3RyZXJyb3IsIGUuZXJybm8pKQorCisgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgICIiIgorICAgICAgICBmb3JrIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGUgZGFlbW9uIGlzIG5vdCBzZXNzaW9uIGxlYWRlciwgCisgICAgICAgIHdoaWNoIHByZXZlbnRzIGl0IGZyb20gYWNxdWlyaW5nIGNvbnRyb2xsaW5nIHRlcm1pbmFsCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA+IDA6ICNwYXJlbnQKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyBbJWRdIiAlIChlLnN0cmVycm9yLCBlLmVycm5vKSkKKworICAgICAgICBzZWxmLmNsZWFudXBfaGFuZGxlcygpCisgICAgICAgIG9zLl9leGl0KDApCisKKyAgICBkZWYgZm9yayhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICBpZiBwaWQgPiAwOgorICAgICAgICAgICAgICAgIHJldHVybiBwaWQKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgWyVkXSIgJSAoZS5zdHJlcnJvciwgZS5lcnJubykpCisKKyAgICAgICAgYmIudXRpbHMuc2lnbmFsX29uX3BhcmVudF9leGl0KCJTSUdURVJNIikKKyAgICAgICAgc2VsZi5jbGVhbnVwX2hhbmRsZXMoKQorICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgZGVmIGNsZWFudXBfaGFuZGxlcyhzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzZWxmLnNpZ2ludF9oYW5kbGVyKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCBzZWxmLnNpZ3Rlcm1faGFuZGxlcikKKyAgICAgICAgb3MudW1hc2soMCkKKyAgICAgICAgb3MuY2hkaXIoIi8iKQorCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgc2kgPSBmaWxlKCcvZGV2L251bGwnLCAncicpCisgICAgICAgIHNvID0gZmlsZShzZWxmLmxvZ2ZpbGUsICdhKycpCisgICAgICAgIHNlID0gc28KKyAgICAgICAgb3MuZHVwMihzaS5maWxlbm8oKSxzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIoc28uZmlsZW5vKCksc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgb3MuZHVwMihzZS5maWxlbm8oKSxzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgICAgICMgQ2xlYXIgb3V0IGFsbCBsb2cgaGFuZGxlcnMgcHJpb3IgdG8gdGhlIGZvcmsoKSB0byBhdm9pZCBjYWxsaW5nCisgICAgICAgICMgZXZlbnQgaGFuZGxlcnMgbm90IHBhcnQgb2YgdGhlIFBSc2VydmVyCisgICAgICAgIGZvciBsb2dnZXJfaXRlciBpbiBsb2dnaW5nLkxvZ2dlci5tYW5hZ2VyLmxvZ2dlckRpY3Qua2V5cygpOgorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyX2l0ZXIpLmhhbmRsZXJzID0gW10KKworICAgICAgICAjIEVuc3VyZSBsb2dnaW5nIG1ha2VzIGl0IHRvIHRoZSBsb2dmaWxlCisgICAgICAgIHN0cmVhbWhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgICAgICBzdHJlYW1oYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGZvcm1hdHRlciA9IGJiLm1zZy5CQkxvZ0Zvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKQorICAgICAgICBzdHJlYW1oYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKHN0cmVhbWhhbmRsZXIpCisKKyAgICAgICAgIyB3cml0ZSBwaWRmaWxlCisgICAgICAgIHBpZCA9IHN0cihvcy5nZXRwaWQoKSkgCisgICAgICAgIHBmID0gZmlsZShzZWxmLnBpZGZpbGUsICd3JykKKyAgICAgICAgcGYud3JpdGUoIiVzXG4iICUgcGlkKQorICAgICAgICBwZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi53b3JrX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmRlbHBpZCgpCisKK2NsYXNzIFBSU2VydlNpbmdsZXRvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYmZpbGUsIGxvZ2ZpbGUsIGludGVyZmFjZSk6CisgICAgICAgIHNlbGYuZGJmaWxlID0gZGJmaWxlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5pbnRlcmZhY2UgPSBpbnRlcmZhY2UKKyAgICAgICAgc2VsZi5ob3N0ID0gTm9uZQorICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYucHJzZXJ2ID0gUFJTZXJ2ZXIoc2VsZi5kYmZpbGUsIHNlbGYubG9nZmlsZSwgc2VsZi5pbnRlcmZhY2UsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5wcnNlcnYuc3RhcnQoKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYucHJzZXJ2LmdldGluZm8oKQorCisgICAgZGVmIGdldGluZm8oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpCisKK2NsYXNzIFBSU2VydmVyQ29ubmVjdGlvbihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KToKKyAgICAgICAgaWYgaXNfbG9jYWxfc3BlY2lhbChob3N0LCBwb3J0KToKKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBzaW5nbGV0b24uZ2V0aW5mbygpCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmNvbm5lY3Rpb24sIHNlbGYudHJhbnNwb3J0ID0gYmIuc2VydmVyLnhtbHJwYy5fY3JlYXRlX3NlcnZlcihzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUZXJtaW5hdGluZyBQUlNlcnZlci4uLiIpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucXVpdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcbiIgJSBzdHIoZXhjKSkKKworICAgIGRlZiBnZXRQUihzZWxmLCB2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uZ2V0UFIodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisKKyAgICBkZWYgcGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5waW5nKCkKKworICAgIGRlZiBleHBvcnQoc2VsZix2ZXJzaW9uPU5vbmUsIHBrZ2FyY2g9Tm9uZSwgY2hlY2tzdW09Tm9uZSwgY29saW5mbz1UcnVlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5leHBvcnQodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIGNvbGluZm8pCisKKyAgICBkZWYgaW1wb3J0b25lKHNlbGYsIHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uaW1wb3J0b25lKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkKKworICAgIGRlZiBnZXRpbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ob3N0LCBzZWxmLnBvcnQKKworZGVmIHN0YXJ0X2RhZW1vbihkYmZpbGUsIGhvc3QsIHBvcnQsIGxvZ2ZpbGUpOgorICAgIHBpZGZpbGUgPSBQSURQUkVGSVggJSAoaG9zdCwgcG9ydCkKKyAgICB0cnk6CisgICAgICAgIHBmID0gZmlsZShwaWRmaWxlLCdyJykKKyAgICAgICAgcGlkID0gaW50KHBmLnJlYWRsaW5lKCkuc3RyaXAoKSkKKyAgICAgICAgcGYuY2xvc2UoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwaWQgPSBOb25lCisKKyAgICBpZiBwaWQ6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInBpZGZpbGUgJXMgYWxyZWFkeSBleGlzdC4gRGFlbW9uIGFscmVhZHkgcnVubmluZz9cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHBpZGZpbGUpCisgICAgICAgIHJldHVybiAxCisKKyAgICBzZXJ2ZXIgPSBQUlNlcnZlcihvcy5wYXRoLmFic3BhdGgoZGJmaWxlKSwgb3MucGF0aC5hYnNwYXRoKGxvZ2ZpbGUpLCAoaG9zdCxwb3J0KSkKKyAgICBzZXJ2ZXIuc3RhcnQoKQorICAgIHJldHVybiAwCisKK2RlZiBzdG9wX2RhZW1vbihob3N0LCBwb3J0KToKKyAgICBwaWRmaWxlID0gUElEUFJFRklYICUgKGhvc3QsIHBvcnQpCisgICAgdHJ5OgorICAgICAgICBwZiA9IGZpbGUocGlkZmlsZSwncicpCisgICAgICAgIHBpZCA9IGludChwZi5yZWFkbGluZSgpLnN0cmlwKCkpCisgICAgICAgIHBmLmNsb3NlKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGlkID0gTm9uZQorCisgICAgaWYgbm90IHBpZDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicGlkZmlsZSAlcyBkb2VzIG5vdCBleGlzdC4gRGFlbW9uIG5vdCBydW5uaW5nP1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgJSBwaWRmaWxlKQorCisgICAgdHJ5OgorICAgICAgICBQUlNlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCkudGVybWluYXRlKCkKKyAgICBleGNlcHQ6CisgICAgICAgIGxvZ2dlci5jcml0aWNhbCgiU3RvcCBQUlNlcnZpY2UgJXM6JWQgZmFpbGVkIiAlIChob3N0LHBvcnQpKQorCisgICAgdHJ5OgorICAgICAgICBpZiBwaWQ6CisgICAgICAgICAgICB3YWl0X3RpbWVvdXQgPSAwCisgICAgICAgICAgICBwcmludCgiV2FpdGluZyBmb3IgcHItc2VydmVyIHRvIGV4aXQuIikKKyAgICAgICAgICAgIHdoaWxlIGlzX3J1bm5pbmcocGlkKSBhbmQgd2FpdF90aW1lb3V0IDwgNTA6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICAgICAgd2FpdF90aW1lb3V0ICs9IDEKKworICAgICAgICAgICAgaWYgaXNfcnVubmluZyhwaWQpOgorICAgICAgICAgICAgICAgIHByaW50KCJTZW5kaW5nIFNJR1RFUk0gdG8gcHItc2VydmVyLiIpCisgICAgICAgICAgICAgICAgb3Mua2lsbChwaWQsc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBpZGZpbGUpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwaWRmaWxlKQorCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgZXJyID0gc3RyKGUpCisgICAgICAgIGlmIGVyci5maW5kKCJObyBzdWNoIHByb2Nlc3MiKSA8PSAwOgorICAgICAgICAgICAgcmFpc2UgZQorCisgICAgcmV0dXJuIDAKKworZGVmIGlzX3J1bm5pbmcocGlkKToKKyAgICB0cnk6CisgICAgICAgIG9zLmtpbGwocGlkLCAwKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVTUkNIOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGlzX2xvY2FsX3NwZWNpYWwoaG9zdCwgcG9ydCk6CisgICAgaWYgaG9zdC5zdHJpcCgpLnVwcGVyKCkgPT0gJ2xvY2FsaG9zdCcudXBwZXIoKSBhbmQgKG5vdCBwb3J0KToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgUFJTZXJ2aWNlQ29uZmlnRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBhdXRvX3N0YXJ0KGQpOgorICAgIGdsb2JhbCBzaW5nbGV0b24KKworICAgIGhvc3RfcGFyYW1zID0gZmlsdGVyKE5vbmUsIChkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKSkKKyAgICBpZiBub3QgaG9zdF9wYXJhbXM6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBpZiBsZW4oaG9zdF9wYXJhbXMpICE9IDI6CisgICAgICAgIGxvZ2dlci5jcml0aWNhbCgnXG4nLmpvaW4oWydQUlNFUlZfSE9TVDogaW5jb3JyZWN0IGZvcm1hdCcsCisgICAgICAgICAgICAgICAgJ1VzYWdlOiBQUlNFUlZfSE9TVCA9ICI8aG9zdG5hbWU+Ojxwb3J0PiInXSkpCisgICAgICAgIHJhaXNlIFBSU2VydmljZUNvbmZpZ0Vycm9yCisKKyAgICBpZiBpc19sb2NhbF9zcGVjaWFsKGhvc3RfcGFyYW1zWzBdLCBpbnQoaG9zdF9wYXJhbXNbMV0pKSBhbmQgbm90IHNpbmdsZXRvbjoKKyAgICAgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgICAgIGNhY2hlZGlyID0gKGQuZ2V0VmFyKCJQRVJTSVNURU5UX0RJUiIsIFRydWUpIG9yIGQuZ2V0VmFyKCJDQUNIRSIsIFRydWUpKQorICAgICAgICBpZiBub3QgY2FjaGVkaXI6CisgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlBsZWFzZSBzZXQgdGhlICdQRVJTSVNURU5UX0RJUicgb3IgJ0NBQ0hFJyB2YXJpYWJsZSIpCisgICAgICAgICAgICByYWlzZSBQUlNlcnZpY2VDb25maWdFcnJvcgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY2FjaGVkaXIpCisgICAgICAgIGRiZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgInByc2Vydi5zcWxpdGUzIikKKyAgICAgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihjYWNoZWRpciwgInByc2Vydi5sb2ciKQorICAgICAgICBzaW5nbGV0b24gPSBQUlNlcnZTaW5nbGV0b24ob3MucGF0aC5hYnNwYXRoKGRiZmlsZSksIG9zLnBhdGguYWJzcGF0aChsb2dmaWxlKSwgKCJsb2NhbGhvc3QiLDApKQorICAgICAgICBzaW5nbGV0b24uc3RhcnQoKQorICAgIGlmIHNpbmdsZXRvbjoKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNpbmdsZXRvbi5nZXRpbmZvKCkKKyAgICBlbHNlOgorICAgICAgICBob3N0ID0gaG9zdF9wYXJhbXNbMF0KKyAgICAgICAgcG9ydCA9IGludChob3N0X3BhcmFtc1sxXSkKKworICAgIHRyeToKKyAgICAgICAgY29ubmVjdGlvbiA9IFBSU2VydmVyQ29ubmVjdGlvbihob3N0LHBvcnQpCisgICAgICAgIGNvbm5lY3Rpb24ucGluZygpCisgICAgICAgIHJlYWxob3N0LCByZWFscG9ydCA9IGNvbm5lY3Rpb24uZ2V0aW5mbygpCisgICAgICAgIHJldHVybiBzdHIocmVhbGhvc3QpICsgIjoiICsgc3RyKHJlYWxwb3J0KQorICAgICAgICAKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBsb2dnZXIuY3JpdGljYWwoIlBSc2VydmljZSAlczolZCBub3QgYXZhaWxhYmxlIiAlIChob3N0LCBwb3J0KSkKKyAgICAgICAgcmFpc2UgUFJTZXJ2aWNlQ29uZmlnRXJyb3IKKworZGVmIGF1dG9fc2h1dGRvd24oZD1Ob25lKToKKyAgICBnbG9iYWwgc2luZ2xldG9uCisgICAgaWYgc2luZ2xldG9uOgorICAgICAgICBob3N0LCBwb3J0ID0gc2luZ2xldG9uLmdldGluZm8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBQUlNlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCkudGVybWluYXRlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJTdG9wIFBSU2VydmljZSAlczolZCBmYWlsZWQiICUgKGhvc3QscG9ydCkpCisgICAgICAgIHNpbmdsZXRvbiA9IE5vbmUKKworZGVmIHBpbmcoaG9zdCwgcG9ydCk6CisgICAgY29ubj1QUlNlcnZlckNvbm5lY3Rpb24oaG9zdCwgcG9ydCkKKyAgICByZXR1cm4gY29ubi5waW5nKCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3B5aW5vdGlmeS5weSBiL2JpdGJha2UvbGliL3B5aW5vdGlmeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGFlMDAyCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvcHlpbm90aWZ5LnB5CkBAIC0wLDAgKzEsMjQxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgcHlpbm90aWZ5LnB5IC0gcHl0aG9uIGludGVyZmFjZSB0byBpbm90aWZ5CisjIENvcHlyaWdodCAoYykgMjAwNS0yMDE1IFNlYmFzdGllbiBNYXJ0aW5pIDxzZWJAZGJ6dGVhbS5vcmc+CisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorIiIiCitweWlub3RpZnkKKworQGF1dGhvcjogU2ViYXN0aWVuIE1hcnRpbmkKK0BsaWNlbnNlOiBNSVQgTGljZW5zZQorQGNvbnRhY3Q6IHNlYkBkYnp0ZWFtLm9yZworIiIiCisKK2NsYXNzIFB5aW5vdGlmeUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiSW5kaWNhdGVzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgUHlpbm90aWZ5IGNsYXNzLiIiIgorICAgIHBhc3MKKworCitjbGFzcyBVbnN1cHBvcnRlZFB5dGhvblZlcnNpb25FcnJvcihQeWlub3RpZnlFcnJvcik6CisgICAgIiIiCisgICAgUmFpc2VkIG9uIHVuc3VwcG9ydGVkIFB5dGhvbiB2ZXJzaW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyc2lvbik6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gdmVyc2lvbjogQ3VycmVudCBQeXRob24gdmVyc2lvbgorICAgICAgICBAdHlwZSB2ZXJzaW9uOiBzdHJpbmcKKyAgICAgICAgIiIiCisgICAgICAgIGVyciA9ICdQeXRob24gJXMgaXMgdW5zdXBwb3J0ZWQsIHJlcXVpcmVzIGF0IGxlYXN0IFB5dGhvbiAyLjQnCisgICAgICAgIFB5aW5vdGlmeUVycm9yLl9faW5pdF9fKHNlbGYsIGVyciAlIHZlcnNpb24pCisKKworIyBDaGVjayBQeXRob24gdmVyc2lvbgoraW1wb3J0IHN5cworaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KToKKyAgICByYWlzZSBVbnN1cHBvcnRlZFB5dGhvblZlcnNpb25FcnJvcihzeXMudmVyc2lvbikKKworCisjIEltcG9ydCBkaXJlY3RpdmVzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBmY250bAoraW1wb3J0IGVycm5vCitpbXBvcnQgdGVybWlvcworaW1wb3J0IGFycmF5CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGF0ZXhpdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKK2ltcG9ydCB0aW1lCitpbXBvcnQgcmUKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IHN1YnByb2Nlc3MKKwordHJ5OgorICAgIGZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzICAjIFdpbGwgZmFpbCBvbiBQeXRob24gMi40IHdoaWNoIGhhcyByZWR1Y2UoKSBidWlsdGluIGFueXdheS4KKwordHJ5OgorICAgIGZyb20gZ2xvYiBpbXBvcnQgaWdsb2IgYXMgZ2xvYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHl0aG9uIDIuNCBkb2VzIG5vdCBoYXZlIGdsb2IuaWdsb2IoKS4KKyAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IgYXMgZ2xvYgorCit0cnk6CisgICAgaW1wb3J0IGN0eXBlcworICAgIGltcG9ydCBjdHlwZXMudXRpbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGN0eXBlcyA9IE5vbmUKKwordHJ5OgorICAgIGltcG9ydCBpbm90aWZ5X3N5c2NhbGxzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW5vdGlmeV9zeXNjYWxscyA9IE5vbmUKKworCitfX2F1dGhvcl9fID0gInNlYkBkYnp0ZWFtLm9yZyAoU2ViYXN0aWVuIE1hcnRpbmkpIgorCitfX3ZlcnNpb25fXyA9ICIwLjkuNSIKKworX19tZXRhY2xhc3NfXyA9IHR5cGUgICMgVXNlIG5ldy1zdHlsZSBjbGFzc2VzIGJ5IGRlZmF1bHQKKworCisjIENvbXBhdGliaXR5IG1vZGU6IHNldCB0byBUcnVlIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoCisjIFB5aW5vdGlmeSAwLjcuMS4gRG8gbm90IHNldCB0aGlzIHZhcmlhYmxlIHlvdXJzZWxmLCBjYWxsIHRoZQorIyBmdW5jdGlvbiBjb21wYXRpYmlsaXR5X21vZGUoKSBpbnN0ZWFkLgorQ09NUEFUSUJJTElUWV9NT0RFID0gRmFsc2UKKworCitjbGFzcyBJbm90aWZ5QmluZGluZ05vdEZvdW5kRXJyb3IoUHlpbm90aWZ5RXJyb3IpOgorICAgICIiIgorICAgIFJhaXNlZCB3aGVuIG5vIGlub3RpZnkgc3VwcG9ydCBjb3VsZG4ndCBiZSBmb3VuZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGVyciA9ICJDb3VsZG4ndCBmaW5kIGFueSBpbm90aWZ5IGJpbmRpbmciCisgICAgICAgIFB5aW5vdGlmeUVycm9yLl9faW5pdF9fKHNlbGYsIGVycikKKworCitjbGFzcyBJTm90aWZ5V3JhcHBlcjoKKyAgICAiIiIKKyAgICBBYnN0cmFjdCBjbGFzcyB3cmFwcGluZyBhY2Nlc3MgdG8gaW5vdGlmeSdzIGZ1bmN0aW9ucy4gVGhpcyBpcyBhbgorICAgIGludGVybmFsIGNsYXNzLgorICAgICIiIgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlKCk6CisgICAgICAgICMgRmlyc3QsIHRyeSB0byB1c2UgY3R5cGVzLgorICAgICAgICBpZiBjdHlwZXM6CisgICAgICAgICAgICBpbm90aWZ5ID0gX0N0eXBlc0xpYmNJTm90aWZ5V3JhcHBlcigpCisgICAgICAgICAgICBpZiBpbm90aWZ5LmluaXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5vdGlmeQorICAgICAgICAjIFNlY29uZCwgc2VlIGlmIEMgZXh0ZW5zaW9uIGlzIGNvbXBpbGVkLgorICAgICAgICBpZiBpbm90aWZ5X3N5c2NhbGxzOgorICAgICAgICAgICAgaW5vdGlmeSA9IF9JTm90aWZ5U3lzY2FsbHNXcmFwcGVyKCkKKyAgICAgICAgICAgIGlmIGlub3RpZnkuaW5pdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbm90aWZ5CisKKyAgICBkZWYgZ2V0X2Vycm5vKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIE5vbmUgaXMgbm8gZXJybm8gY29kZSBpcyBhdmFpbGFibGUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2Vycm5vKCkKKworICAgIGRlZiBzdHJfZXJybm8oc2VsZik6CisgICAgICAgIGNvZGUgPSBzZWxmLmdldF9lcnJubygpCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnRXJybm86IG5vIGVycm5vIHN1cHBvcnQnCisgICAgICAgIHJldHVybiAnRXJybm89JXMgKCVzKScgJSAob3Muc3RyZXJyb3IoY29kZSksIGVycm5vLmVycm9yY29kZVtjb2RlXSkKKworICAgIGRlZiBpbm90aWZ5X2luaXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pbm90aWZ5X2luaXQoKQorCisgICAgZGVmIGlub3RpZnlfYWRkX3dhdGNoKHNlbGYsIGZkLCBwYXRobmFtZSwgbWFzayk6CisgICAgICAgICMgVW5pY29kZSBzdHJpbmdzIG11c3QgYmUgZW5jb2RlZCB0byBzdHJpbmcgcHJpb3IgdG8gY2FsbGluZyB0aGlzCisgICAgICAgICMgbWV0aG9kLgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRobmFtZSwgc3RyKQorICAgICAgICByZXR1cm4gc2VsZi5faW5vdGlmeV9hZGRfd2F0Y2goZmQsIHBhdGhuYW1lLCBtYXNrKQorCisgICAgZGVmIGlub3RpZnlfcm1fd2F0Y2goc2VsZiwgZmQsIHdkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lub3RpZnlfcm1fd2F0Y2goZmQsIHdkKQorCisKK2NsYXNzIF9JTm90aWZ5U3lzY2FsbHNXcmFwcGVyKElOb3RpZnlXcmFwcGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgU3RvcmVzIHRoZSBsYXN0IGVycm5vIHZhbHVlLgorICAgICAgICBzZWxmLl9sYXN0X2Vycm5vID0gTm9uZQorCisgICAgZGVmIGluaXQoc2VsZik6CisgICAgICAgIGFzc2VydCBpbm90aWZ5X3N5c2NhbGxzCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2dldF9lcnJubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3RfZXJybm8KKworICAgIGRlZiBfaW5vdGlmeV9pbml0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGlub3RpZnlfc3lzY2FsbHMuaW5vdGlmeV9pbml0KCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfZXJybm8gPSBlcnIuZXJybm8KKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBfaW5vdGlmeV9hZGRfd2F0Y2goc2VsZiwgZmQsIHBhdGhuYW1lLCBtYXNrKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2QgPSBpbm90aWZ5X3N5c2NhbGxzLmlub3RpZnlfYWRkX3dhdGNoKGZkLCBwYXRobmFtZSwgbWFzaykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuX2xhc3RfZXJybm8gPSBlcnIuZXJybm8KKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICByZXR1cm4gd2QKKworICAgIGRlZiBfaW5vdGlmeV9ybV93YXRjaChzZWxmLCBmZCwgd2QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXQgPSBpbm90aWZ5X3N5c2NhbGxzLmlub3RpZnlfcm1fd2F0Y2goZmQsIHdkKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5fbGFzdF9lcnJubyA9IGVyci5lcnJubworICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJldHVybiByZXQKKworCitjbGFzcyBfQ3R5cGVzTGliY0lOb3RpZnlXcmFwcGVyKElOb3RpZnlXcmFwcGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xpYmMgPSBOb25lCisgICAgICAgIHNlbGYuX2dldF9lcnJub19mdW5jID0gTm9uZQorCisgICAgZGVmIGluaXQoc2VsZik6CisgICAgICAgIGFzc2VydCBjdHlwZXMKKworICAgICAgICB0cnlfbGliY19uYW1lID0gJ2MnCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdmcmVlYnNkJyk6CisgICAgICAgICAgICB0cnlfbGliY19uYW1lID0gJ2lub3RpZnknCisKKyAgICAgICAgbGliY19uYW1lID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaWJjX25hbWUgPSBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkodHJ5X2xpYmNfbmFtZSkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MgICMgV2lsbCBhdHRlbXAgdG8gbG9hZCBpdCB3aXRoIE5vbmUgYW55d2F5LgorCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDYpOgorICAgICAgICAgICAgc2VsZi5fbGliYyA9IGN0eXBlcy5DRExMKGxpYmNfbmFtZSwgdXNlX2Vycm5vPVRydWUpCisgICAgICAgICAgICBzZWxmLl9nZXRfZXJybm9fZnVuYyA9IGN0eXBlcy5nZXRfZXJybm8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xpYmMgPSBjdHlwZXMuQ0RMTChsaWJjX25hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBzZWxmLl9saWJjLl9fZXJybm9fbG9jYXRpb24KKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXN0eXBlID0gY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfaW50KQorICAgICAgICAgICAgICAgIHNlbGYuX2dldF9lcnJub19mdW5jID0gbGFtYmRhOiBsb2NhdGlvbigpLmNvbnRlbnRzLnZhbHVlCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgRXZlbnR1YWxseSBjaGVjayB0aGF0IGxpYmMgaGFzIG5lZWRlZCBpbm90aWZ5IGJpbmRpbmdzLgorICAgICAgICBpZiAobm90IGhhc2F0dHIoc2VsZi5fbGliYywgJ2lub3RpZnlfaW5pdCcpIG9yCisgICAgICAgICAgICBub3QgaGFzYXR0cihzZWxmLl9saWJjLCAnaW5vdGlmeV9hZGRfd2F0Y2gnKSBvcgorICAgICAgICAgICAgbm90IGhhc2F0dHIoc2VsZi5fbGliYywgJ2lub3RpZnlfcm1fd2F0Y2gnKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfaW5pdC5hcmd0eXBlcyA9IFtdCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9pbml0LnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICAgICAgc2VsZi5fbGliYy5pbm90aWZ5X2FkZF93YXRjaC5hcmd0eXBlcyA9IFtjdHlwZXMuY19pbnQsIGN0eXBlcy5jX2NoYXJfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY191aW50MzJdCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9hZGRfd2F0Y2gucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgICAgICBzZWxmLl9saWJjLmlub3RpZnlfcm1fd2F0Y2guYXJndHlwZXMgPSBbY3R5cGVzLmNfaW50LCBjdHlwZXMuY19pbnRdCisgICAgICAgIHNlbGYuX2xpYmMuaW5vdGlmeV9ybV93YXRjaC5yZXN0eXBlID0gY3R5cGVzLmNfaW50CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2dldF9lcnJubyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZ2V0X2Vycm5vX2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2Vycm5vX2Z1bmMoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9pbm90aWZ5X2luaXQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9saWJjLmlub3RpZnlfaW5pdCgpCisKKyAgICBkZWYgX2lub3RpZnlfYWRkX3dhdGNoKHNlbGYsIGZkLCBwYXRobmFtZSwgbWFzayk6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHBhdGhuYW1lID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKHBhdGhuYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbGliYy5pbm90aWZ5X2FkZF93YXRjaChmZCwgcGF0aG5hbWUsIG1hc2spCisKKyAgICBkZWYgX2lub3RpZnlfcm1fd2F0Y2goc2VsZiwgZmQsIHdkKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xpYmMgaXMgbm90IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpYmMuaW5vdGlmeV9ybV93YXRjaChmZCwgd2QpCisKKyAgICBkZWYgX3N5c2N0bChzZWxmLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBzZWxmLl9saWJjIGlzIG5vdCBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9saWJjLnN5c2N0bCgqYXJncykKKworCisjIExvZ2dpbmcKK2RlZiBsb2dnZXJfaW5pdCgpOgorICAgICIiIkluaXRpYWxpemUgbG9nZ2VyIGluc3RhbmNlLiIiIgorICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJweWlub3RpZnkiKQorICAgIGNvbnNvbGVfaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgY29uc29sZV9oYW5kbGVyLnNldEZvcm1hdHRlcigKKyAgICAgICAgbG9nZ2luZy5Gb3JtYXR0ZXIoIlslKGFzY3RpbWUpcyAlKG5hbWUpcyAlKGxldmVsbmFtZSlzXSAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZy5hZGRIYW5kbGVyKGNvbnNvbGVfaGFuZGxlcikKKyAgICBsb2cuc2V0TGV2ZWwoMjApCisgICAgcmV0dXJuIGxvZworCitsb2cgPSBsb2dnZXJfaW5pdCgpCisKKworIyBpbm90aWZ5J3MgdmFyaWFibGVzCitjbGFzcyBTeXNDdGxJTm90aWZ5OgorICAgICIiIgorICAgIEFjY2VzcyAocmVhZCwgd3JpdGUpIGlub3RpZnkncyB2YXJpYWJsZXMgdGhyb3VnaCBzeXNjdGwuIFVzdWFsbHkgaXQKKyAgICByZXF1aXJlcyBhZG1pbmlzdHJhdG9yIHJpZ2h0cyB0byB1cGRhdGUgdGhlbS4KKworICAgIEV4YW1wbGVzOgorICAgICAgLSBSZWFkIG1heF9xdWV1ZWRfZXZlbnRzIGF0dHJpYnV0ZTogbXl2YXIgPSBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZQorICAgICAgLSBVcGRhdGUgbWF4X3F1ZXVlZF9ldmVudHMgYXR0cmlidXRlOiBtYXhfcXVldWVkX2V2ZW50cy52YWx1ZSA9IDQyCisgICAgIiIiCisKKyAgICBpbm90aWZ5X2F0dHJzID0geydtYXhfdXNlcl9pbnN0YW5jZXMnOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ21heF91c2VyX3dhdGNoZXMnOiAyLAorICAgICAgICAgICAgICAgICAgICAgJ21heF9xdWV1ZWRfZXZlbnRzJzogM30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRybmFtZSwgaW5vdGlmeV93cmFwcGVyKToKKyAgICAgICAgIyBGSVhNRTogcmlnaHQgbm93IG9ubHkgc3VwcG9ydGluZyBjdHlwZXMKKyAgICAgICAgYXNzZXJ0IGN0eXBlcworICAgICAgICBzZWxmLl9hdHRybmFtZSA9IGF0dHJuYW1lCisgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlciA9IGlub3RpZnlfd3JhcHBlcgorICAgICAgICBzaW5vID0gY3R5cGVzLmNfaW50ICogMworICAgICAgICBzZWxmLl9hdHRyID0gc2lubyg1LCAyMCwgU3lzQ3RsSU5vdGlmeS5pbm90aWZ5X2F0dHJzW2F0dHJuYW1lXSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlKGF0dHJuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIEZhY3RvcnkgbWV0aG9kIGluc3RhbmNpYXRpbmcgYW5kIHJldHVybmluZyB0aGUgcmlnaHQgd3JhcHBlci4KKyAgICAgICAgIiIiCisgICAgICAgICMgRklYTUU6IHJpZ2h0IG5vdyBvbmx5IHN1cHBvcnRpbmcgY3R5cGVzCisgICAgICAgIGlmIGN0eXBlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaW5vdGlmeV93cmFwcGVyID0gX0N0eXBlc0xpYmNJTm90aWZ5V3JhcHBlcigpCisgICAgICAgIGlmIG5vdCBpbm90aWZ5X3dyYXBwZXIuaW5pdCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFN5c0N0bElOb3RpZnkoYXR0cm5hbWUsIGlub3RpZnlfd3JhcHBlcikKKworICAgIGRlZiBnZXRfdmFsKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0cyBhdHRyaWJ1dGUncyB2YWx1ZS4gUmFpc2VzIE9TRXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWQuCisKKyAgICAgICAgQHJldHVybjogc3RvcmVkIHZhbHVlLgorICAgICAgICBAcnR5cGU6IGludAorICAgICAgICAiIiIKKyAgICAgICAgb2xkdiA9IGN0eXBlcy5jX2ludCgwKQorICAgICAgICBzaXplID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2Yob2xkdikpCisgICAgICAgIHN5c2N0bCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5fc3lzY3RsCisgICAgICAgIHJlcyA9IHN5c2N0bChzZWxmLl9hdHRyLCAzLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihvbGR2KSksCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYWRkcmVzc29mKHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMCkKKyAgICAgICAgaWYgcmVzID09IC0xOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihzZWxmLl9pbm90aWZ5X3dyYXBwZXIuZ2V0X2Vycm5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lub3RpZnlfd3JhcHBlci5zdHJfZXJybm8oKSkKKyAgICAgICAgcmV0dXJuIG9sZHYudmFsdWUKKworICAgIGRlZiBzZXRfdmFsKHNlbGYsIG52YWwpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0cyBuZXcgYXR0cmlidXRlJ3MgdmFsdWUuIFJhaXNlcyBPU0Vycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgorCisgICAgICAgIEBwYXJhbSBudmFsOiByZXBsYWNlcyBjdXJyZW50IHZhbHVlIGJ5IG52YWwuCisgICAgICAgIEB0eXBlIG52YWw6IGludAorICAgICAgICAiIiIKKyAgICAgICAgb2xkdiA9IGN0eXBlcy5jX2ludCgwKQorICAgICAgICBzaXplbyA9IGN0eXBlcy5jX2ludChjdHlwZXMuc2l6ZW9mKG9sZHYpKQorICAgICAgICBuZXd2ID0gY3R5cGVzLmNfaW50KG52YWwpCisgICAgICAgIHNpemVuID0gY3R5cGVzLmNfaW50KGN0eXBlcy5zaXplb2YobmV3dikpCisgICAgICAgIHN5c2N0bCA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5fc3lzY3RsCisgICAgICAgIHJlcyA9IHN5c2N0bChzZWxmLl9hdHRyLCAzLAorICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmNfdm9pZHAoY3R5cGVzLmFkZHJlc3NvZihvbGR2KSksCisgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYWRkcmVzc29mKHNpemVvKSwKKyAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5jX3ZvaWRwKGN0eXBlcy5hZGRyZXNzb2YobmV3dikpLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW4pCisgICAgICAgIGlmIHJlcyA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3Ioc2VsZi5faW5vdGlmeV93cmFwcGVyLmdldF9lcnJubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpCisKKyAgICB2YWx1ZSA9IHByb3BlcnR5KGdldF92YWwsIHNldF92YWwpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPCVzPSVkPicgJSAoc2VsZi5fYXR0cm5hbWUsIHNlbGYuZ2V0X3ZhbCgpKQorCisKKyMgSW5vdGlmeSdzIHZhcmlhYmxlcworIworIyBGSVhNRTogY3VycmVudGx5IHRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSBhY2Nlc3NpYmxlIHdoZW4gY3R5cGVzIGlzIHVzZWQsCisjICAgICAgICBvdGhlcndpc2UgdGhlcmUgYXJlIHNldCB0byBOb25lLgorIworIyByZWFkOiBteXZhciA9IG1heF9xdWV1ZWRfZXZlbnRzLnZhbHVlCisjIHVwZGF0ZTogbWF4X3F1ZXVlZF9ldmVudHMudmFsdWUgPSA0MgorIworZm9yIGF0dHJuYW1lIGluICgnbWF4X3F1ZXVlZF9ldmVudHMnLCAnbWF4X3VzZXJfaW5zdGFuY2VzJywgJ21heF91c2VyX3dhdGNoZXMnKToKKyAgICBnbG9iYWxzKClbYXR0cm5hbWVdID0gU3lzQ3RsSU5vdGlmeS5jcmVhdGUoYXR0cm5hbWUpCisKKworY2xhc3MgRXZlbnRzQ29kZXM6CisgICAgIiIiCisgICAgU2V0IG9mIGNvZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBraW5kIG9mIGV2ZW50cy4KKyAgICBTb21lIG9mIHRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggaW5vdGlmeSwgd2hlcmVhcworICAgIHRoZSBvdGhlcnMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIGJ5IGlub3RpZnkgbm90aWZ5aW5nIHNvbWUgZXZlbnRzLgorCisgICAgQGN2YXIgSU5fQUNDRVNTOiBGaWxlIHdhcyBhY2Nlc3NlZC4KKyAgICBAdHlwZSBJTl9BQ0NFU1M6IGludAorICAgIEBjdmFyIElOX01PRElGWTogRmlsZSB3YXMgbW9kaWZpZWQuCisgICAgQHR5cGUgSU5fTU9ESUZZOiBpbnQKKyAgICBAY3ZhciBJTl9BVFRSSUI6IE1ldGFkYXRhIGNoYW5nZWQuCisgICAgQHR5cGUgSU5fQVRUUklCOiBpbnQKKyAgICBAY3ZhciBJTl9DTE9TRV9XUklURTogV3JpdHRhYmxlIGZpbGUgd2FzIGNsb3NlZC4KKyAgICBAdHlwZSBJTl9DTE9TRV9XUklURTogaW50CisgICAgQGN2YXIgSU5fQ0xPU0VfTk9XUklURTogVW53cml0dGFibGUgZmlsZSBjbG9zZWQuCisgICAgQHR5cGUgSU5fQ0xPU0VfTk9XUklURTogaW50CisgICAgQGN2YXIgSU5fT1BFTjogRmlsZSB3YXMgb3BlbmVkLgorICAgIEB0eXBlIElOX09QRU46IGludAorICAgIEBjdmFyIElOX01PVkVEX0ZST006IEZpbGUgd2FzIG1vdmVkIGZyb20gWC4KKyAgICBAdHlwZSBJTl9NT1ZFRF9GUk9NOiBpbnQKKyAgICBAY3ZhciBJTl9NT1ZFRF9UTzogRmlsZSB3YXMgbW92ZWQgdG8gWS4KKyAgICBAdHlwZSBJTl9NT1ZFRF9UTzogaW50CisgICAgQGN2YXIgSU5fQ1JFQVRFOiBTdWJmaWxlIHdhcyBjcmVhdGVkLgorICAgIEB0eXBlIElOX0NSRUFURTogaW50CisgICAgQGN2YXIgSU5fREVMRVRFOiBTdWJmaWxlIHdhcyBkZWxldGVkLgorICAgIEB0eXBlIElOX0RFTEVURTogaW50CisgICAgQGN2YXIgSU5fREVMRVRFX1NFTEY6IFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpIHdhcyBkZWxldGVkLgorICAgIEB0eXBlIElOX0RFTEVURV9TRUxGOiBpbnQKKyAgICBAY3ZhciBJTl9NT1ZFX1NFTEY6IFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpIHdhcyBtb3ZlZC4KKyAgICBAdHlwZSBJTl9NT1ZFX1NFTEY6IGludAorICAgIEBjdmFyIElOX1VOTU9VTlQ6IEJhY2tpbmcgZnMgd2FzIHVubW91bnRlZC4KKyAgICBAdHlwZSBJTl9VTk1PVU5UOiBpbnQKKyAgICBAY3ZhciBJTl9RX09WRVJGTE9XOiBFdmVudCBxdWV1ZWQgb3ZlcmZsb3dlZC4KKyAgICBAdHlwZSBJTl9RX09WRVJGTE9XOiBpbnQKKyAgICBAY3ZhciBJTl9JR05PUkVEOiBGaWxlIHdhcyBpZ25vcmVkLgorICAgIEB0eXBlIElOX0lHTk9SRUQ6IGludAorICAgIEBjdmFyIElOX09OTFlESVI6IG9ubHkgd2F0Y2ggdGhlIHBhdGggaWYgaXQgaXMgYSBkaXJlY3RvcnkgKG5ldworICAgICAgICAgICAgICAgICAgICAgIGluIGtlcm5lbCAyLjYuMTUpLgorICAgIEB0eXBlIElOX09OTFlESVI6IGludAorICAgIEBjdmFyIElOX0RPTlRfRk9MTE9XOiBkb24ndCBmb2xsb3cgYSBzeW1saW5rIChuZXcgaW4ga2VybmVsIDIuNi4xNSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOX09OTFlESVIgd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHdhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgb2Ygc3ltbGlua3MuCisgICAgQHR5cGUgSU5fRE9OVF9GT0xMT1c6IGludAorICAgIEBjdmFyIElOX0VYQ0xfVU5MSU5LOiBFdmVudHMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGNoaWxkcmVuIGFmdGVyIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIHVubGlua2VkIGZyb20gdGhlIHdhdGNoZWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3IGluIGtlcm5lbCAyLjYuMzYpLgorICAgIEB0eXBlIElOX0VYQ0xfVU5MSU5LOiBpbnQKKyAgICBAY3ZhciBJTl9NQVNLX0FERDogYWRkIHRvIHRoZSBtYXNrIG9mIGFuIGFscmVhZHkgZXhpc3Rpbmcgd2F0Y2ggKG5ldworICAgICAgICAgICAgICAgICAgICAgICBpbiBrZXJuZWwgMi42LjE0KS4KKyAgICBAdHlwZSBJTl9NQVNLX0FERDogaW50CisgICAgQGN2YXIgSU5fSVNESVI6IEV2ZW50IG9jY3VycmVkIGFnYWluc3QgZGlyLgorICAgIEB0eXBlIElOX0lTRElSOiBpbnQKKyAgICBAY3ZhciBJTl9PTkVTSE9UOiBPbmx5IHNlbmQgZXZlbnQgb25jZS4KKyAgICBAdHlwZSBJTl9PTkVTSE9UOiBpbnQKKyAgICBAY3ZhciBBTExfRVZFTlRTOiBBbGlhcyBmb3IgY29uc2lkZXJpbmcgYWxsIG9mIHRoZSBldmVudHMuCisgICAgQHR5cGUgQUxMX0VWRU5UUzogaW50CisgICAgIiIiCisKKyAgICAjIFRoZSBpZGVhIGhlcmUgaXMgJ2NvbmZpZ3VyYXRpb24tYXMtY29kZScgLSB0aGlzIHdheSwgd2UgZ2V0IG91ciBuaWNlIGNsYXNzCisgICAgIyBjb25zdGFudHMsIGJ1dCB3ZSBhbHNvIGdldCBuaWNlIGh1bWFuLWZyaWVuZGx5IHRleHQgbWFwcGluZ3MgdG8gZG8gbG9va3VwcworICAgICMgYWdhaW5zdCBhcyB3ZWxsLCBmb3IgZnJlZToKKyAgICBGTEFHX0NPTExFQ1RJT05TID0geydPUF9GTEFHUyc6IHsKKyAgICAgICAgJ0lOX0FDQ0VTUycgICAgICAgIDogMHgwMDAwMDAwMSwgICMgRmlsZSB3YXMgYWNjZXNzZWQKKyAgICAgICAgJ0lOX01PRElGWScgICAgICAgIDogMHgwMDAwMDAwMiwgICMgRmlsZSB3YXMgbW9kaWZpZWQKKyAgICAgICAgJ0lOX0FUVFJJQicgICAgICAgIDogMHgwMDAwMDAwNCwgICMgTWV0YWRhdGEgY2hhbmdlZAorICAgICAgICAnSU5fQ0xPU0VfV1JJVEUnICAgOiAweDAwMDAwMDA4LCAgIyBXcml0YWJsZSBmaWxlIHdhcyBjbG9zZWQKKyAgICAgICAgJ0lOX0NMT1NFX05PV1JJVEUnIDogMHgwMDAwMDAxMCwgICMgVW53cml0YWJsZSBmaWxlIGNsb3NlZAorICAgICAgICAnSU5fT1BFTicgICAgICAgICAgOiAweDAwMDAwMDIwLCAgIyBGaWxlIHdhcyBvcGVuZWQKKyAgICAgICAgJ0lOX01PVkVEX0ZST00nICAgIDogMHgwMDAwMDA0MCwgICMgRmlsZSB3YXMgbW92ZWQgZnJvbSBYCisgICAgICAgICdJTl9NT1ZFRF9UTycgICAgICA6IDB4MDAwMDAwODAsICAjIEZpbGUgd2FzIG1vdmVkIHRvIFkKKyAgICAgICAgJ0lOX0NSRUFURScgICAgICAgIDogMHgwMDAwMDEwMCwgICMgU3ViZmlsZSB3YXMgY3JlYXRlZAorICAgICAgICAnSU5fREVMRVRFJyAgICAgICAgOiAweDAwMDAwMjAwLCAgIyBTdWJmaWxlIHdhcyBkZWxldGVkCisgICAgICAgICdJTl9ERUxFVEVfU0VMRicgICA6IDB4MDAwMDA0MDAsICAjIFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdhcyBkZWxldGVkCisgICAgICAgICdJTl9NT1ZFX1NFTEYnICAgICA6IDB4MDAwMDA4MDAsICAjIFNlbGYgKHdhdGNoZWQgaXRlbSBpdHNlbGYpIHdhcyBtb3ZlZAorICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgJ0VWRU5UX0ZMQUdTJzogeworICAgICAgICAnSU5fVU5NT1VOVCcgICAgICAgOiAweDAwMDAyMDAwLCAgIyBCYWNraW5nIGZzIHdhcyB1bm1vdW50ZWQKKyAgICAgICAgJ0lOX1FfT1ZFUkZMT1cnICAgIDogMHgwMDAwNDAwMCwgICMgRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQKKyAgICAgICAgJ0lOX0lHTk9SRUQnICAgICAgIDogMHgwMDAwODAwMCwgICMgRmlsZSB3YXMgaWdub3JlZAorICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgJ1NQRUNJQUxfRkxBR1MnOiB7CisgICAgICAgICdJTl9PTkxZRElSJyAgICAgICA6IDB4MDEwMDAwMDAsICAjIG9ubHkgd2F0Y2ggdGhlIHBhdGggaWYgaXQgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaXJlY3RvcnkKKyAgICAgICAgJ0lOX0RPTlRfRk9MTE9XJyAgIDogMHgwMjAwMDAwMCwgICMgZG9uJ3QgZm9sbG93IGEgc3ltbGluaworICAgICAgICAnSU5fRVhDTF9VTkxJTksnICAgOiAweDA0MDAwMDAwLCAgIyBleGNsdWRlIGV2ZW50cyBvbiB1bmxpbmtlZCBvYmplY3RzCisgICAgICAgICdJTl9NQVNLX0FERCcgICAgICA6IDB4MjAwMDAwMDAsICAjIGFkZCB0byB0aGUgbWFzayBvZiBhbiBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIHdhdGNoCisgICAgICAgICdJTl9JU0RJUicgICAgICAgICA6IDB4NDAwMDAwMDAsICAjIGV2ZW50IG9jY3VycmVkIGFnYWluc3QgZGlyCisgICAgICAgICdJTl9PTkVTSE9UJyAgICAgICA6IDB4ODAwMDAwMDAsICAjIG9ubHkgc2VuZCBldmVudCBvbmNlCisgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICBkZWYgbWFza25hbWUobWFzayk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBldmVudCBuYW1lIGFzc29jaWF0ZWQgdG8gbWFzay4gSU5fSVNESVIgaXMgYXBwZW5kZWQgdG8KKyAgICAgICAgdGhlIHJlc3VsdCB3aGVuIGFwcHJvcHJpYXRlLiBOb3RlOiBvbmx5IG9uZSBldmVudCBpcyByZXR1cm5lZCwgYmVjYXVzZQorICAgICAgICBvbmx5IG9uZSBldmVudCBjYW4gYmUgcmFpc2VkIGF0IGEgZ2l2ZW4gdGltZS4KKworICAgICAgICBAcGFyYW0gbWFzazogbWFzay4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEByZXR1cm46IGV2ZW50IG5hbWUuCisgICAgICAgIEBydHlwZTogc3RyCisgICAgICAgICIiIgorICAgICAgICBtcyA9IG1hc2sKKyAgICAgICAgbmFtZSA9ICclcycKKyAgICAgICAgaWYgbWFzayAmIElOX0lTRElSOgorICAgICAgICAgICAgbXMgPSBtYXNrIC0gSU5fSVNESVIKKyAgICAgICAgICAgIG5hbWUgPSAnJXN8SU5fSVNESVInCisgICAgICAgIHJldHVybiBuYW1lICUgRXZlbnRzQ29kZXMuQUxMX1ZBTFVFU1ttc10KKworICAgIG1hc2tuYW1lID0gc3RhdGljbWV0aG9kKG1hc2tuYW1lKQorCisKKyMgU28gbGV0J3Mgbm93IHR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW50byBjb2RlCitFdmVudHNDb2Rlcy5BTExfRkxBR1MgPSB7fQorRXZlbnRzQ29kZXMuQUxMX1ZBTFVFUyA9IHt9Citmb3IgZmxhZ2MsIHZhbGMgaW4gRXZlbnRzQ29kZXMuRkxBR19DT0xMRUNUSU9OUy5pdGVtcygpOgorICAgICMgTWFrZSB0aGUgY29sbGVjdGlvbnMnIG1lbWJlcnMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZQorICAgICMgY2xhc3MgZGljdGlvbmFyeQorICAgIHNldGF0dHIoRXZlbnRzQ29kZXMsIGZsYWdjLCB2YWxjKQorCisgICAgIyBDb2xsZWN0IGFsbCB0aGUgZmxhZ3MgdW5kZXIgYSBjb21tb24gdW1icmVsbGEKKyAgICBFdmVudHNDb2Rlcy5BTExfRkxBR1MudXBkYXRlKHZhbGMpCisKKyAgICAjIE1ha2UgdGhlIGluZGl2aWR1YWwgbWFza3MgYWNjZXNzaWJsZSBhcyAnY29uc3RhbnRzJyBhdCBnbG9iYWxzKCkgc2NvcGUKKyAgICAjIGFuZCBtYXNrbmFtZXMgYWNjZXNzaWJsZSBieSB2YWx1ZXMuCisgICAgZm9yIG5hbWUsIHZhbCBpbiB2YWxjLml0ZW1zKCk6CisgICAgICAgIGdsb2JhbHMoKVtuYW1lXSA9IHZhbAorICAgICAgICBFdmVudHNDb2Rlcy5BTExfVkFMVUVTW3ZhbF0gPSBuYW1lCisKKworIyBhbGwgJ25vcm1hbCcgZXZlbnRzCitBTExfRVZFTlRTID0gcmVkdWNlKGxhbWJkYSB4LCB5OiB4IHwgeSwgRXZlbnRzQ29kZXMuT1BfRkxBR1MudmFsdWVzKCkpCitFdmVudHNDb2Rlcy5BTExfRkxBR1NbJ0FMTF9FVkVOVFMnXSA9IEFMTF9FVkVOVFMKK0V2ZW50c0NvZGVzLkFMTF9WQUxVRVNbQUxMX0VWRU5UU10gPSAnQUxMX0VWRU5UUycKKworCitjbGFzcyBfRXZlbnQ6CisgICAgIiIiCisgICAgRXZlbnQgc3RydWN0dXJlLCByZXByZXNlbnQgZXZlbnRzIHJhaXNlZCBieSB0aGUgc3lzdGVtLiBUaGlzCisgICAgaXMgdGhlIGJhc2UgY2xhc3MgYW5kIHNob3VsZCBiZSBzdWJjbGFzc2VkLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpY3RfKToKKyAgICAgICAgIiIiCisgICAgICAgIEF0dGFjaCBhdHRyaWJ1dGVzIChjb250YWluZWQgaW4gZGljdF8pIHRvIHNlbGYuCisKKyAgICAgICAgQHBhcmFtIGRpY3RfOiBTZXQgb2YgYXR0cmlidXRlcy4KKyAgICAgICAgQHR5cGUgZGljdF86IGRpY3Rpb25hcnkKKyAgICAgICAgIiIiCisgICAgICAgIGZvciB0cGwgaW4gZGljdF8uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgKnRwbCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEByZXR1cm46IEdlbmVyaWMgZXZlbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICBAcnR5cGU6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgcyA9ICcnCisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBzb3J0ZWQoc2VsZi5fX2RpY3RfXy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMF0pOgorICAgICAgICAgICAgaWYgYXR0ci5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGF0dHIgPT0gJ21hc2snOgorICAgICAgICAgICAgICAgIHZhbHVlID0gaGV4KGdldGF0dHIoc2VsZiwgYXR0cikpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpIGFuZCBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiJyciCisgICAgICAgICAgICBzICs9ICcgJXMlcyVzJyAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc9JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LmZpZWxkX3ZhbHVlKHZhbHVlKSkKKworICAgICAgICBzID0gJyVzJXMlcyAlcycgJSAob3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5jbGFzc19uYW1lKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc+JykpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlcHIoc2VsZikKKworCitjbGFzcyBfUmF3RXZlbnQoX0V2ZW50KToKKyAgICAiIiIKKyAgICBSYXcgZXZlbnQsIGl0IGNvbnRhaW5zIG9ubHkgdGhlIGluZm9ybWF0aW9ucyBwcm92aWRlZCBieSB0aGUgc3lzdGVtLgorICAgIEl0IGRvZXNuJ3QgaW5mZXIgYW55dGhpbmcuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdkLCBtYXNrLCBjb29raWUsIG5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBEZXNjcmlwdG9yLgorICAgICAgICBAdHlwZSB3ZDogaW50CisgICAgICAgIEBwYXJhbSBtYXNrOiBCaXRtYXNrIG9mIGV2ZW50cy4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBjb29raWU6IENvb2tpZS4KKyAgICAgICAgQHR5cGUgY29va2llOiBpbnQKKyAgICAgICAgQHBhcmFtIG5hbWU6IEJhc2VuYW1lIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBhZ2FpbnN0IHdoaWNoIHRoZQorICAgICAgICAgICAgICAgICAgICAgZXZlbnQgd2FzIHJhaXNlZCBpbiBjYXNlIHdoZXJlIHRoZSB3YXRjaGVkIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBkaXJlY3RvcnkuIE5vbmUgaWYgdGhlIGV2ZW50IHdhcyByYWlzZWQKKyAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB3YXRjaGVkIGl0ZW0gaXRzZWxmLgorICAgICAgICBAdHlwZSBuYW1lOiBzdHJpbmcgb3IgTm9uZQorICAgICAgICAiIiIKKyAgICAgICAgIyBVc2UgdGhpcyB2YXJpYWJsZSB0byBjYWNoZSB0aGUgcmVzdWx0IG9mIHN0cihzZWxmKSwgdGhpcyBvYmplY3QKKyAgICAgICAgIyBpcyBpbW11dGFibGUuCisgICAgICAgIHNlbGYuX3N0ciA9IE5vbmUKKyAgICAgICAgIyBuYW1lOiByZW1vdmUgdHJhaWxpbmcgJ1wwJworICAgICAgICBkID0geyd3ZCc6IHdkLAorICAgICAgICAgICAgICdtYXNrJzogbWFzaywKKyAgICAgICAgICAgICAnY29va2llJzogY29va2llLAorICAgICAgICAgICAgICduYW1lJzogbmFtZS5yc3RyaXAoJ1wwJyl9CisgICAgICAgIF9FdmVudC5fX2luaXRfXyhzZWxmLCBkKQorICAgICAgICBsb2cuZGVidWcoc3RyKHNlbGYpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3N0ciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyID0gX0V2ZW50Ll9fc3RyX18oc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0cgorCisKK2NsYXNzIEV2ZW50KF9FdmVudCk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBjb250YWlucyBhbGwgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIG9ic2VydmVkCisgICAgZXZlbnQuIEhvd2V2ZXIsIHRoZSBwcmVzZW5jZSBvZiBlYWNoIGZpZWxkIGlzIG5vdCBndWFyYW50ZWVkIGFuZAorICAgIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgZXZlbnQuIEluIGVmZmVjdCwgc29tZSBmaWVsZHMgYXJlIGlycmVsZXZhbnQKKyAgICBmb3Igc29tZSBraW5kIG9mIGV2ZW50IChmb3IgZXhhbXBsZSAnY29va2llJyBpcyBtZWFuaW5nbGVzcyBmb3IKKyAgICBJTl9DUkVBVEUgd2hlcmVhcyBpdCBpcyBtYW5kYXRvcnkgZm9yIElOX01PVkVfVE8pLgorCisgICAgVGhlIHBvc3NpYmxlIGZpZWxkcyBhcmU6CisgICAgICAtIHdkIChpbnQpOiBXYXRjaCBEZXNjcmlwdG9yLgorICAgICAgLSBtYXNrIChpbnQpOiBNYXNrLgorICAgICAgLSBtYXNrbmFtZSAoc3RyKTogUmVhZGFibGUgZXZlbnQgbmFtZS4KKyAgICAgIC0gcGF0aCAoc3RyKTogcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYmVpbmcgd2F0Y2hlZC4KKyAgICAgIC0gbmFtZSAoc3RyKTogQmFzZW5hbWUgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGFnYWluc3Qgd2hpY2ggdGhlCisgICAgICAgICAgICAgIGV2ZW50IHdhcyByYWlzZWQgaW4gY2FzZSB3aGVyZSB0aGUgd2F0Y2hlZCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgaXMgdGhlIHBhcmVudCBkaXJlY3RvcnkuIE5vbmUgaWYgdGhlIGV2ZW50IHdhcyByYWlzZWQKKyAgICAgICAgICAgICAgb24gdGhlIHdhdGNoZWQgaXRlbSBpdHNlbGYuIFRoaXMgZmllbGQgaXMgYWx3YXlzIHByb3ZpZGVkCisgICAgICAgICAgICAgIGV2ZW4gaWYgdGhlIHN0cmluZyBpcyAnJy4KKyAgICAgIC0gcGF0aG5hbWUgKHN0cik6IENvbmNhdGVuYXRpb24gb2YgJ3BhdGgnIGFuZCAnbmFtZScuCisgICAgICAtIHNyY19wYXRobmFtZSAoc3RyKTogT25seSBwcmVzZW50IGZvciBJTl9NT1ZFRF9UTyBldmVudHMgYW5kIG9ubHkgaW4KKyAgICAgICAgICAgICAgdGhlIGNhc2Ugd2hlcmUgSU5fTU9WRURfRlJPTSBldmVudHMgYXJlIHdhdGNoZWQgdG9vLiBIb2xkcyB0aGUKKyAgICAgICAgICAgICAgc291cmNlIHBhdGhuYW1lIGZyb20gd2hlcmUgcGF0aG5hbWUgd2FzIG1vdmVkIGZyb20uCisgICAgICAtIGNvb2tpZSAoaW50KTogQ29va2llLgorICAgICAgLSBkaXIgKGJvb2wpOiBUcnVlIGlmIHRoZSBldmVudCB3YXMgcmFpc2VkIGFnYWluc3QgYSBkaXJlY3RvcnkuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3KToKKyAgICAgICAgIiIiCisgICAgICAgIENvbmNyZXRlbHksIHRoaXMgaXMgdGhlIHJhdyBldmVudCBwbHVzIGluZmVycmVkIGluZm9zLgorICAgICAgICAiIiIKKyAgICAgICAgX0V2ZW50Ll9faW5pdF9fKHNlbGYsIHJhdykKKyAgICAgICAgc2VsZi5tYXNrbmFtZSA9IEV2ZW50c0NvZGVzLm1hc2tuYW1lKHNlbGYubWFzaykKKyAgICAgICAgaWYgQ09NUEFUSUJJTElUWV9NT0RFOgorICAgICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gc2VsZi5tYXNrbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLm5hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aG5hbWUgPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5wYXRoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGVycjoKKyAgICAgICAgICAgICMgVXN1YWxseSBpdCBpcyBub3QgYW4gZXJyb3Igc29tZSBldmVudHMgYXJlIHBlcmZlY3RseSB2YWxpZHMKKyAgICAgICAgICAgICMgZGVzcGl0ZSB0aGUgbGFjayBvZiB0aGVzZSBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgbG9nLmRlYnVnKGVycikKKworCitjbGFzcyBQcm9jZXNzRXZlbnRFcnJvcihQeWlub3RpZnlFcnJvcik6CisgICAgIiIiCisgICAgUHJvY2Vzc0V2ZW50RXJyb3IgRXhjZXB0aW9uLiBSYWlzZWQgb24gUHJvY2Vzc0V2ZW50IGVycm9yLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnIpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIGVycjogRXhjZXB0aW9uIGVycm9yIGRlc2NyaXB0aW9uLgorICAgICAgICBAdHlwZSBlcnI6IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyKQorCisKK2NsYXNzIF9Qcm9jZXNzRXZlbnQ6CisgICAgIiIiCisgICAgQWJzdHJhY3QgcHJvY2Vzc2luZyBldmVudCBjbGFzcy4KKyAgICAiIiIKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgVG8gYmVoYXZlIGxpa2UgYSBmdW5jdG9yIHRoZSBvYmplY3QgbXVzdCBiZSBjYWxsYWJsZS4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBkaXNwYXRjaCBtZXRob2QuIEl0cyBsb29rdXAgb3JkZXIgaXM6CisgICAgICAgICAgMS4gcHJvY2Vzc19NQVNLTkFNRSBtZXRob2QKKyAgICAgICAgICAyLiBwcm9jZXNzX0ZBTUlMWV9OQU1FIG1ldGhvZAorICAgICAgICAgIDMuIG90aGVyd2lzZSBjYWxscyBwcm9jZXNzX2RlZmF1bHQKKworICAgICAgICBAcGFyYW0gZXZlbnQ6IEV2ZW50IHRvIGJlIHByb2Nlc3NlZC4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IEV2ZW50IG9iamVjdAorICAgICAgICBAcmV0dXJuOiBCeSBjb252ZW50aW9uIHdoZW4gdXNlZCBmcm9tIHRoZSBQcm9jZXNzRXZlbnQgY2xhc3M6CisgICAgICAgICAgICAgICAgIC0gUmV0dXJuaW5nIEZhbHNlIG9yIE5vbmUgKGRlZmF1bHQgdmFsdWUpIG1lYW5zIGtlZXAgb24KKyAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIG5leHQgY2hhaW5lZCBmdW5jdG9ycyAoc2VlIGNoYWluLnB5IGV4YW1wbGUpLgorICAgICAgICAgICAgICAgICAtIFJldHVybmluZyBUcnVlIGluc3RlYWQgbWVhbnMgZG8gbm90IGV4ZWN1dGUgbmV4dAorICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorICAgICAgICBAcnR5cGU6IGJvb2wKKyAgICAgICAgQHJhaXNlIFByb2Nlc3NFdmVudEVycm9yOiBFdmVudCBvYmplY3QgdW5kaXNwYXRjaGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBldmVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHN0cmlwcGVkX21hc2sgPSBldmVudC5tYXNrIC0gKGV2ZW50Lm1hc2sgJiBJTl9JU0RJUikKKyAgICAgICAgbWFza25hbWUgPSBFdmVudHNDb2Rlcy5BTExfVkFMVUVTLmdldChzdHJpcHBlZF9tYXNrKQorICAgICAgICBpZiBtYXNrbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUHJvY2Vzc0V2ZW50RXJyb3IoIlVua25vd24gbWFzayAweCUwOHgiICUgc3RyaXBwZWRfbWFzaykKKworICAgICAgICAjIDEtIGxvb2sgZm9yIHByb2Nlc3NfTUFTS05BTUUKKyAgICAgICAgbWV0aCA9IGdldGF0dHIoc2VsZiwgJ3Byb2Nlc3NfJyArIG1hc2tuYW1lLCBOb25lKQorICAgICAgICBpZiBtZXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIG1ldGgoZXZlbnQpCisgICAgICAgICMgMi0gbG9vayBmb3IgcHJvY2Vzc19GQU1JTFlfTkFNRQorICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCAncHJvY2Vzc19JTl8nICsgbWFza25hbWUuc3BsaXQoJ18nKVsxXSwgTm9uZSkKKyAgICAgICAgaWYgbWV0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBtZXRoKGV2ZW50KQorICAgICAgICAjIDMtIGRlZmF1bHQgY2FsbCBtZXRob2QgcHJvY2Vzc19kZWZhdWx0CisgICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3NfZGVmYXVsdChldmVudCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKworY2xhc3MgX1N5c1Byb2Nlc3NFdmVudChfUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBUaGVyZSBpcyB0aHJlZSBraW5kIG9mIHByb2Nlc3NpbmcgYWNjb3JkaW5nIHRvIGVhY2ggZXZlbnQ6CisKKyAgICAgIDEuIHNwZWNpYWwgaGFuZGxpbmcgKGRlbGV0aW9uIGZyb20gaW50ZXJuYWwgY29udGFpbmVyLCBidWcsIC4uLikuCisgICAgICAyLiBkZWZhdWx0IHRyZWF0bWVudDogd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgbWFqb3JpdHkgb2YgZXZlbnRzLgorICAgICAgMy4gSU5fSVNESVIgaXMgbmV2ZXIgc2VudCBhbG9uZSwgaGUgaXMgcGlnZ3liYWNrZWQgd2l0aCBhIHN0YW5kYXJkCisgICAgICAgICBldmVudCwgaGUgaXMgbm90IHByb2Nlc3NlZCBhcyB0aGUgb3RoZXJzIGV2ZW50cywgaW5zdGVhZCwgaXRzCisgICAgICAgICB2YWx1ZSBpcyBjYXB0dXJlZCBhbmQgYXBwcm9wcmlhdGVseSBhZ2dyZWdhdGVkIHRvIGRzdCBldmVudC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd20sIG5vdGlmaWVyKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgQHBhcmFtIHdtOiBXYXRjaCBNYW5hZ2VyLgorICAgICAgICBAdHlwZSB3bTogV2F0Y2hNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIEBwYXJhbSBub3RpZmllcjogTm90aWZpZXIuCisgICAgICAgIEB0eXBlIG5vdGlmaWVyOiBOb3RpZmllciBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fd2F0Y2hfbWFuYWdlciA9IHdtICAjIHdhdGNoIG1hbmFnZXIKKyAgICAgICAgc2VsZi5fbm90aWZpZXIgPSBub3RpZmllciAgIyBub3RpZmllcgorICAgICAgICBzZWxmLl9tdl9jb29raWUgPSB7fSAgIyB7Y29va2llKGludCk6IChzcmNfcGF0aChzdHIpLCBkYXRlKSwgLi4ufQorICAgICAgICBzZWxmLl9tdiA9IHt9ICAjIHtzcmNfcGF0aChzdHIpOiAoZHN0X3BhdGgoc3RyKSwgZGF0ZSksIC4uLn0KKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYW51cCAoZGVsZXRlKSBvbGQgKD4xbW4pIHJlY29yZHMgY29udGFpbmVkIGluIHNlbGYuX212X2Nvb2tpZQorICAgICAgICBhbmQgc2VsZi5fbXYuCisgICAgICAgICIiIgorICAgICAgICBkYXRlX2N1cl8gPSBkYXRldGltZS5ub3coKQorICAgICAgICBmb3Igc2VxIGluIFtzZWxmLl9tdl9jb29raWUsIHNlbGYuX212XToKKyAgICAgICAgICAgIGZvciBrIGluIHNlcS5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgKGRhdGVfY3VyXyAtIHNlcVtrXVsxXSkgPiB0aW1lZGVsdGEobWludXRlcz0xKToKKyAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCdDbGVhbnVwOiBkZWxldGluZyBlbnRyeSAlcycsIHNlcVtrXVswXSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlcVtrXQorCisgICAgZGVmIHByb2Nlc3NfSU5fQ1JFQVRFKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBJZiB0aGUgZXZlbnQgYWZmZWN0cyBhIGRpcmVjdG9yeSBhbmQgdGhlIGF1dG9fYWRkIGZsYWcgb2YgdGhlCisgICAgICAgIHRhcmdldHRlZCB3YXRjaCBpcyBzZXQgdG8gVHJ1ZSwgYSBuZXcgd2F0Y2ggaXMgYWRkZWQgb24gdGhpcworICAgICAgICBuZXcgZGlyZWN0b3J5LCB3aXRoIHRoZSBzYW1lIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhbiB0aG9zZSBvZgorICAgICAgICB0aGlzIHdhdGNoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcmF3X2V2ZW50Lm1hc2sgJiBJTl9JU0RJUjoKKyAgICAgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuZ2V0X3dhdGNoKHJhd19ldmVudC53ZCkKKyAgICAgICAgICAgIGNyZWF0ZWRfZGlyID0gb3MucGF0aC5qb2luKHdhdGNoXy5wYXRoLCByYXdfZXZlbnQubmFtZSkKKyAgICAgICAgICAgIGlmIHdhdGNoXy5hdXRvX2FkZCBhbmQgbm90IHdhdGNoXy5leGNsdWRlX2ZpbHRlcihjcmVhdGVkX2Rpcik6CisgICAgICAgICAgICAgICAgYWRkdyA9IHNlbGYuX3dhdGNoX21hbmFnZXIuYWRkX3dhdGNoCisgICAgICAgICAgICAgICAgIyBUaGUgbmV3bHkgbW9uaXRvcmVkIGRpcmVjdG9yeSBpbmhlcml0cyBhdHRyaWJ1dGVzIGZyb20gaXRzCisgICAgICAgICAgICAgICAgIyBwYXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIGFkZHdfcmV0ID0gYWRkdyhjcmVhdGVkX2Rpciwgd2F0Y2hfLm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfZnVuPXdhdGNoXy5wcm9jX2Z1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjPUZhbHNlLCBhdXRvX2FkZD13YXRjaF8uYXV0b19hZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyPXdhdGNoXy5leGNsdWRlX2ZpbHRlcikKKworICAgICAgICAgICAgICAgICMgVHJpY2sgdG8gaGFuZGxlIG1rZGlyIC1wIC9kMS9kMi90MyB3aGVyZSBkMSBpcyB3YXRjaGVkIGFuZAorICAgICAgICAgICAgICAgICMgZDIgYW5kIHQzIChkaXJlY3Rvcnkgb3IgZmlsZSkgYXJlIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgIyBTaW5jZSB0aGUgZGlyZWN0b3J5IGQyIGlzIG5ldywgdGhlbiBldmVyeXRoaW5nIGluc2lkZSBpdCBtdXN0CisgICAgICAgICAgICAgICAgIyBhbHNvIGJlIG5ldy4KKyAgICAgICAgICAgICAgICBjcmVhdGVkX2Rpcl93ZCA9IGFkZHdfcmV0LmdldChjcmVhdGVkX2RpcikKKyAgICAgICAgICAgICAgICBpZiAoKGNyZWF0ZWRfZGlyX3dkIGlzIG5vdCBOb25lKSBhbmQgKGNyZWF0ZWRfZGlyX3dkID4gMCkgYW5kCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguaXNkaXIoY3JlYXRlZF9kaXIpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihjcmVhdGVkX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXIgPSBvcy5wYXRoLmpvaW4oY3JlYXRlZF9kaXIsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2QoaW5uZXIpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgKHNpbXVsYXRlKSBjcmVhdGlvbiBldmVudHMgZm9yIHN1Yi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpbm5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3ltbGlua3MgYXJlIGhhbmRsZWQgYXMgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gSU5fQ1JFQVRFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGlubmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBJTl9DUkVBVEUgfCBJTl9JU0RJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBwYXRoIHNob3VsZCBub3QgYmUgdGFrZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ZXZlbnQgPSBfUmF3RXZlbnQoY3JlYXRlZF9kaXJfd2QsIGZsYWdzLCAwLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vdGlmaWVyLmFwcGVuZF9ldmVudChyYXdldmVudCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJwcm9jZXNzX0lOX0NSRUFURSwgaW52YWxpZCBkaXJlY3RvcnkgJXM6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKG1zZyAlIChjcmVhdGVkX2Rpciwgc3RyKGVycikpKQorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2RlZmF1bHQocmF3X2V2ZW50KQorCisgICAgZGVmIHByb2Nlc3NfSU5fTU9WRURfRlJPTShzZWxmLCByYXdfZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFwIHRoZSBjb29raWUgd2l0aCB0aGUgc291cmNlIHBhdGggKCsgZGF0ZSBmb3IgY2xlYW5pbmcpLgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBwYXRoXyA9IHdhdGNoXy5wYXRoCisgICAgICAgIHNyY19wYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocGF0aF8sIHJhd19ldmVudC5uYW1lKSkKKyAgICAgICAgc2VsZi5fbXZfY29va2llW3Jhd19ldmVudC5jb29raWVdID0gKHNyY19wYXRoLCBkYXRldGltZS5ub3coKSkKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCwgeydjb29raWUnOiByYXdfZXZlbnQuY29va2llfSkKKworICAgIGRlZiBwcm9jZXNzX0lOX01PVkVEX1RPKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBNYXAgdGhlIHNvdXJjZSBwYXRoIHdpdGggdGhlIGRlc3RpbmF0aW9uIHBhdGggKCsgZGF0ZSBmb3IKKyAgICAgICAgY2xlYW5pbmcpLgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBwYXRoXyA9IHdhdGNoXy5wYXRoCisgICAgICAgIGRzdF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocGF0aF8sIHJhd19ldmVudC5uYW1lKSkKKyAgICAgICAgbXZfID0gc2VsZi5fbXZfY29va2llLmdldChyYXdfZXZlbnQuY29va2llKQorICAgICAgICB0b19hcHBlbmQgPSB7J2Nvb2tpZSc6IHJhd19ldmVudC5jb29raWV9CisgICAgICAgIGlmIG12XyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX212W212X1swXV0gPSAoZHN0X3BhdGgsIGRhdGV0aW1lLm5vdygpKQorICAgICAgICAgICAgIyBMZXQncyBhc3N1bWUgdGhhdCBJTl9NT1ZFRF9GUk9NIGV2ZW50IGlzIGFsd2F5cyBxdWV1ZWQgYmVmb3JlCisgICAgICAgICAgICAjIHRoYXQgaXRzIGFzc29jaWF0ZWQgKHRoZXkgc2hhcmUgYSBjb21tb24gY29va2llKSBJTl9NT1ZFRF9UTworICAgICAgICAgICAgIyBldmVudCBpcyBxdWV1ZWQgaXRzZWxmLiBJdCBpcyB0aGVuIHBvc3NpYmxlIGluIHRoYXQgc2NlbmFyaW8KKyAgICAgICAgICAgICMgdG8gcHJvdmlkZSBhcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIHRoZSBJTl9NT1ZFRF9UTyBldmVudAorICAgICAgICAgICAgIyB0aGUgb3JpZ2luYWwgcGF0aG5hbWUgb2YgdGhlIG1vdmVkIGZpbGUvZGlyZWN0b3J5LgorICAgICAgICAgICAgdG9fYXBwZW5kWydzcmNfcGF0aG5hbWUnXSA9IG12X1swXQorICAgICAgICBlbGlmIChyYXdfZXZlbnQubWFzayAmIElOX0lTRElSIGFuZCB3YXRjaF8uYXV0b19hZGQgYW5kCisgICAgICAgICAgICAgIG5vdCB3YXRjaF8uZXhjbHVkZV9maWx0ZXIoZHN0X3BhdGgpKToKKyAgICAgICAgICAgICMgV2UgZ290IGEgZGlyZXRvcnkgdGhhdCdzICJtb3ZlZCBpbiIgZnJvbSBhbiB1bmtub3duIHNvdXJjZSBhbmQKKyAgICAgICAgICAgICMgYXV0b19hZGQgaXMgZW5hYmxlZC4gTWFudWFsbHkgYWRkIHdhdGNoZXMgdG8gdGhlIGlubmVyIHN1YnRyZWVzLgorICAgICAgICAgICAgIyBUaGUgbmV3bHkgbW9uaXRvcmVkIGRpcmVjdG9yeSBpbmhlcml0cyBhdHRyaWJ1dGVzIGZyb20gaXRzCisgICAgICAgICAgICAjIHBhcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICBzZWxmLl93YXRjaF9tYW5hZ2VyLmFkZF93YXRjaChkc3RfcGF0aCwgd2F0Y2hfLm1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2Z1bj13YXRjaF8ucHJvY19mdW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWM9VHJ1ZSwgYXV0b19hZGQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVyPXdhdGNoXy5leGNsdWRlX2ZpbHRlcikKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCwgdG9fYXBwZW5kKQorCisgICAgZGVmIHByb2Nlc3NfSU5fTU9WRV9TRUxGKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBTVEFUVVM6IHRoZSBmb2xsb3dpbmcgYnVnIGhhcyBiZWVuIGZpeGVkIGluIHJlY2VudCBrZXJuZWxzIChGSVhNRToKKyAgICAgICAgd2hpY2ggdmVyc2lvbiA/KS4gTm93IGl0IHJhaXNlcyBJTl9ERUxFVEVfU0VMRiBpbnN0ZWFkLgorCisgICAgICAgIE9sZCBrZXJuZWxzIHdlcmUgYnVnZ2VkLCB0aGlzIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSB3YXRjaGVkIGl0ZW0KKyAgICAgICAgd2VyZSBtb3ZlZCwgc28gd2UgaGFkIHRvIHVwZGF0ZSBpdHMgcGF0aCwgYnV0IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcworICAgICAgICBpdCB3YXMgaW1wb3NzaWJsZTogaWYgaXRzIHBhcmVudCBkaXJlY3RvcnkgYW5kIGl0cyBkZXN0aW5hdGlvbgorICAgICAgICBkaXJlY3Rvcnkgd2Fzbid0IHdhdGNoZWQuIFRoZSBrZXJuZWwgKHNlZSBpbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgpCisgICAgICAgIGRvZXNuJ3QgYnJpbmcgdXMgZW5vdWdoIGluZm9ybWF0aW9ucyBsaWtlIHRoZSBkZXN0aW5hdGlvbiBwYXRoIG9mCisgICAgICAgIG1vdmVkIGl0ZW1zLgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBzcmNfcGF0aCA9IHdhdGNoXy5wYXRoCisgICAgICAgIG12XyA9IHNlbGYuX212LmdldChzcmNfcGF0aCkKKyAgICAgICAgaWYgbXZfOgorICAgICAgICAgICAgZGVzdF9wYXRoID0gbXZfWzBdCisgICAgICAgICAgICB3YXRjaF8ucGF0aCA9IGRlc3RfcGF0aAorICAgICAgICAgICAgIyBhZGQgdGhlIHNlcGFyYXRvciB0byB0aGUgc291cmNlIHBhdGggdG8gYXZvaWQgb3ZlcmxhcHBpbmcKKyAgICAgICAgICAgICMgcGF0aCBpc3N1ZSB3aGVuIHRlc3Rpbmcgd2l0aCBzdGFydHN3aXRoKCkKKyAgICAgICAgICAgIHNyY19wYXRoICs9IG9zLnBhdGguc2VwCisgICAgICAgICAgICBzcmNfcGF0aF9sZW4gPSBsZW4oc3JjX3BhdGgpCisgICAgICAgICAgICAjIFRoZSBuZXh0IGxvb3AgcmVuYW1lcyBhbGwgd2F0Y2hlcyB3aXRoIHNyY19wYXRoIGFzIGJhc2UgcGF0aC4KKyAgICAgICAgICAgICMgSXQgc2VlbXMgdGhhdCBJTl9NT1ZFX1NFTEYgZG9lcyBub3QgcHJvdmlkZSBJTl9JU0RJUiBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIyB0aGVyZWZvcmUgdGhlIG5leHQgbG9vcCBpcyBpdGVyYXRlZCBldmVuIGlmIHJhd19ldmVudCBpcyBhIGZpbGUuCisgICAgICAgICAgICBmb3IgdyBpbiBzZWxmLl93YXRjaF9tYW5hZ2VyLndhdGNoZXMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgdy5wYXRoLnN0YXJ0c3dpdGgoc3JjX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCBkZXN0X3BhdGggaXMgYSBub3JtYWxpemVkIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHcucGF0aCA9IG9zLnBhdGguam9pbihkZXN0X3BhdGgsIHcucGF0aFtzcmNfcGF0aF9sZW46XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcigiVGhlIHBhdGhuYW1lICclcycgb2YgdGhpcyB3YXRjaCAlcyBoYXMgcHJvYmFibHkgY2hhbmdlZCAiCisgICAgICAgICAgICAgICAgICAgICAgImFuZCBjb3VsZG4ndCBiZSB1cGRhdGVkLCBzbyBpdCBjYW5ub3QgYmUgdHJ1c3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgImFueW1vcmUuIFRvIGZpeCB0aGlzIGVycm9yIG1vdmUgZGlyZWN0b3JpZXMvZmlsZXMgb25seSAiCisgICAgICAgICAgICAgICAgICAgICAgImJldHdlZW4gd2F0Y2hlZCBwYXJlbnRzIGRpcmVjdG9yaWVzLCBpbiB0aGlzIGNhc2UgZS5nLiAiCisgICAgICAgICAgICAgICAgICAgICAgInB1dCBhIHdhdGNoIG9uICclcycuIiwKKyAgICAgICAgICAgICAgICAgICAgICB3YXRjaF8ucGF0aCwgd2F0Y2hfLAorICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHdhdGNoXy5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucGFyZGlyKSkpCisgICAgICAgICAgICBpZiBub3Qgd2F0Y2hfLnBhdGguZW5kc3dpdGgoJy11bmtub3duLXBhdGgnKToKKyAgICAgICAgICAgICAgICB3YXRjaF8ucGF0aCArPSAnLXVua25vd24tcGF0aCcKKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCkKKworICAgIGRlZiBwcm9jZXNzX0lOX1FfT1ZFUkZMT1coc2VsZiwgcmF3X2V2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIE9ubHkgc2lnbmFsIGFuIG92ZXJmbG93LCBtb3N0IG9mIHRoZSBjb21tb24gZmxhZ3MgYXJlIGlycmVsZXZhbnQKKyAgICAgICAgZm9yIHRoaXMgZXZlbnQgKHBhdGgsIHdkLCBuYW1lKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBFdmVudCh7J21hc2snOiByYXdfZXZlbnQubWFza30pCisKKyAgICBkZWYgcHJvY2Vzc19JTl9JR05PUkVEKHNlbGYsIHJhd19ldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgd2F0Y2ggZGVzY3JpcHRvciByYWlzZWQgYnkgdGhpcyBldmVudCBpcyBub3cgaWdub3JlZCAoZm9yZXZlciksCisgICAgICAgIGl0IGNhbiBiZSBzYWZlbHkgZGVsZXRlZCBmcm9tIHRoZSB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuCisgICAgICAgIEFmdGVyIHRoaXMgZXZlbnQgd2UgY2FuIGJlIHN1cmUgdGhhdCBuZWl0aGVyIHRoZSBldmVudCBxdWV1ZSBub3IKKyAgICAgICAgdGhlIHN5c3RlbSB3aWxsIHJhaXNlIGFuIGV2ZW50IGFzc29jaWF0ZWQgdG8gdGhpcyB3ZCBhZ2Fpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGV2ZW50XyA9IHNlbGYucHJvY2Vzc19kZWZhdWx0KHJhd19ldmVudCkKKyAgICAgICAgc2VsZi5fd2F0Y2hfbWFuYWdlci5kZWxfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICByZXR1cm4gZXZlbnRfCisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIHJhd19ldmVudCwgdG9fYXBwZW5kPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tbW9ucyBoYW5kbGluZyBmb3IgdGhlIGZvbGxvd2luZ3MgZXZlbnRzOgorCisgICAgICAgIElOX0FDQ0VTUywgSU5fTU9ESUZZLCBJTl9BVFRSSUIsIElOX0NMT1NFX1dSSVRFLCBJTl9DTE9TRV9OT1dSSVRFLAorICAgICAgICBJTl9PUEVOLCBJTl9ERUxFVEUsIElOX0RFTEVURV9TRUxGLCBJTl9VTk1PVU5ULgorICAgICAgICAiIiIKKyAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICBpZiByYXdfZXZlbnQubWFzayAmIChJTl9ERUxFVEVfU0VMRiB8IElOX01PVkVfU0VMRik6CisgICAgICAgICAgICAjIFVuZm9ybnVsYXRlbHkgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbAorICAgICAgICAgICAgZGlyXyA9IHdhdGNoXy5kaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcl8gPSBib29sKHJhd19ldmVudC5tYXNrICYgSU5fSVNESVIpCisgICAgICAgIGRpY3RfID0geyd3ZCc6IHJhd19ldmVudC53ZCwKKyAgICAgICAgICAgICAgICAgJ21hc2snOiByYXdfZXZlbnQubWFzaywKKyAgICAgICAgICAgICAgICAgJ3BhdGgnOiB3YXRjaF8ucGF0aCwKKyAgICAgICAgICAgICAgICAgJ25hbWUnOiByYXdfZXZlbnQubmFtZSwKKyAgICAgICAgICAgICAgICAgJ2Rpcic6IGRpcl99CisgICAgICAgIGlmIENPTVBBVElCSUxJVFlfTU9ERToKKyAgICAgICAgICAgIGRpY3RfWydpc19kaXInXSA9IGRpcl8KKyAgICAgICAgaWYgdG9fYXBwZW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGljdF8udXBkYXRlKHRvX2FwcGVuZCkKKyAgICAgICAgcmV0dXJuIEV2ZW50KGRpY3RfKQorCisKK2NsYXNzIFByb2Nlc3NFdmVudChfUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBQcm9jZXNzIGV2ZW50cyBvYmplY3RzLCBjYW4gYmUgc3BlY2lhbGl6ZWQgdmlhIHN1YmNsYXNzaW5nLCB0aHVzIGl0cworICAgIGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZW46CisKKyAgICBOb3RlOiB5b3Ugc2hvdWxkIG5vdCBvdmVycmlkZSBfX2luaXRfXyBpbiB5b3VyIHN1YmNsYXNzIGluc3RlYWQgZGVmaW5lCisgICAgYSBteV9pbml0KCkgbWV0aG9kLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlCisgICAgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyB3aXRoIGl0cyBvcHRpb25hbHMgcGFyYW1ldGVycy4KKworICAgICAgMS4gUHJvdmlkZSBzcGVjaWFsaXplZCBpbmRpdmlkdWFsIG1ldGhvZHMsIGUuZy4gcHJvY2Vzc19JTl9ERUxFVEUgZm9yCisgICAgICAgICBwcm9jZXNzaW5nIGEgcHJlY2lzZSB0eXBlIG9mIGV2ZW50IChlLmcuIElOX0RFTEVURSBpbiB0aGlzIGNhc2UpLgorICAgICAgMi4gT3IvYW5kIHByb3ZpZGUgbWV0aG9kcyBmb3IgcHJvY2Vzc2luZyBldmVudHMgYnkgJ2ZhbWlseScsIGUuZy4KKyAgICAgICAgIHByb2Nlc3NfSU5fQ0xPU0UgbWV0aG9kIHdpbGwgcHJvY2VzcyBib3RoIElOX0NMT1NFX1dSSVRFIGFuZAorICAgICAgICAgSU5fQ0xPU0VfTk9XUklURSBldmVudHMgKGlmIHByb2Nlc3NfSU5fQ0xPU0VfV1JJVEUgYW5kCisgICAgICAgICBwcm9jZXNzX0lOX0NMT1NFX05PV1JJVEUgYXJlbid0IGRlZmluZWQgdGhvdWdoKS4KKyAgICAgIDMuIE9yL2FuZCBvdmVycmlkZSBwcm9jZXNzX2RlZmF1bHQgZm9yIGNhdGNoaW5nIGFuZCBwcm9jZXNzaW5nIGFsbAorICAgICAgICAgdGhlIHJlbWFpbmluZyB0eXBlcyBvZiBldmVudHMuCisgICAgIiIiCisgICAgcGV2ZW50ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBldmVudD1Ob25lLCAqKmthcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuYWJsZSBjaGFpbmluZyBvZiBQcm9jZXNzRXZlbnQgaW5zdGFuY2VzLgorCisgICAgICAgIEBwYXJhbSBwZXZlbnQ6IE9wdGlvbmFsIGNhbGxhYmxlIG9iamVjdCwgd2lsbCBiZSBjYWxsZWQgb24gZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyAoYmVmb3JlIHNlbGYpLgorICAgICAgICBAdHlwZSBwZXZlbnQ6IGNhbGxhYmxlCisgICAgICAgIEBwYXJhbSBrYXJnczogVGhpcyBjb25zdHJ1Y3RvciBpcyBpbXBsZW1lbnRlZCBhcyBhIHRlbXBsYXRlIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRpbmcgaXRzIG9wdGlvbmFscyBrZXl3b3JkZWQgYXJndW1lbnRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBteV9pbml0KCkuCisgICAgICAgIEB0eXBlIGthcmdzOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLnBldmVudCA9IHBldmVudAorICAgICAgICBzZWxmLm15X2luaXQoKiprYXJncykKKworICAgIGRlZiBteV9pbml0KHNlbGYsICoqa2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gUHJvY2Vzc0V2ZW50Ll9faW5pdF9fKCkuIFRoaXMgbWV0aG9kIGlzCisgICAgICAgIGVtcHR5IGhlcmUgYW5kIG11c3QgYmUgcmVkZWZpbmVkIHRvIGJlIHVzZWZ1bC4gSW4gZWZmZWN0LCBpZiB5b3UKKyAgICAgICAgbmVlZCB0byBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZSB5b3VyIHN1YmNsYXNzJyBpbnN0YW5jZSB0aGVuIHlvdQorICAgICAgICBqdXN0IGhhdmUgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBzdWJjbGFzcy4gVGhlbiBhbGwgdGhlCisgICAgICAgIGtleXdvcmRlZCBhcmd1bWVudHMgcGFzc2VkIHRvIFByb2Nlc3NFdmVudC5fX2luaXRfXygpIHdpbGwgYmUKKyAgICAgICAgdHJhbnNtaXR0ZWQgYXMgcGFyYW1ldGVycyB0byB0aGlzIG1ldGhvZC4gQmV3YXJlIHlvdSBNVVNUIHBhc3MKKyAgICAgICAga2V5d29yZCBhcmd1bWVudHMgdGhvdWdoLgorCisgICAgICAgIEBwYXJhbSBrYXJnczogb3B0aW9uYWwgZGVsZWdhdGVkIGFyZ3VtZW50cyBmcm9tIF9faW5pdF9fKCkuCisgICAgICAgIEB0eXBlIGthcmdzOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZXZlbnQpOgorICAgICAgICBzdG9wX2NoYWluaW5nID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5wZXZlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEJ5IGRlZmF1bHQgbWV0aG9kcyByZXR1cm4gTm9uZSBzbyB3ZSBzZXQgYXMgZ3VpZGVsaW5lCisgICAgICAgICAgICAjIHRoYXQgbWV0aG9kcyBhc2tpbmcgZm9yIHN0b3AgY2hhaW5pbmcgbXVzdCBleHBsaWNpdGVseQorICAgICAgICAgICAgIyByZXR1cm4gbm9uIE5vbmUgb3Igbm9uIEZhbHNlIHZhbHVlcywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAjIGJlaGF2aW9yIHdpbGwgYmUgdG8gYWNjZXB0IGNoYWluIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICMgbG9jYWwgbWV0aG9kLgorICAgICAgICAgICAgc3RvcF9jaGFpbmluZyA9IHNlbGYucGV2ZW50KGV2ZW50KQorICAgICAgICBpZiBub3Qgc3RvcF9jaGFpbmluZzoKKyAgICAgICAgICAgIHJldHVybiBfUHJvY2Vzc0V2ZW50Ll9fY2FsbF9fKHNlbGYsIGV2ZW50KQorCisgICAgZGVmIG5lc3RlZF9wZXZlbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBldmVudAorCisgICAgZGVmIHByb2Nlc3NfSU5fUV9PVkVSRkxPVyhzZWxmLCBldmVudCk6CisgICAgICAgICIiIgorICAgICAgICBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIG9ubHkgcmVwb3J0cyB3YXJuaW5nIG1lc3NhZ2VzLCB5b3UgY2FuIG92ZXJyZWRpZGUKKyAgICAgICAgaXQgYnkgc3ViY2xhc3NpbmcgUHJvY2Vzc0V2ZW50IGFuZCBpbXBsZW1lbnQgeW91ciBvd24KKyAgICAgICAgcHJvY2Vzc19JTl9RX09WRVJGTE9XIG1ldGhvZC4gVGhlIGFjdGlvbnMgeW91IGNhbiB0YWtlIG9uIHJlY2VpdmluZyB0aGlzCisgICAgICAgIGV2ZW50IGlzIGVpdGhlciB0byB1cGRhdGUgdGhlIHZhcmlhYmxlIG1heF9xdWV1ZWRfZXZlbnRzIGluIG9yZGVyIHRvCisgICAgICAgIGhhbmRsZSBtb3JlIHNpbXVsdGFuZW91cyBldmVudHMgb3IgdG8gbW9kaWZ5IHlvdXIgY29kZSBpbiBvcmRlciB0bworICAgICAgICBhY2NvbXBsaXNoIGEgYmV0dGVyIGZpbHRlcmluZyBkaW1pbmlzaGluZyB0aGUgbnVtYmVyIG9mIHJhaXNlZCBldmVudHMuCisgICAgICAgIEJlY2F1c2UgdGhpcyBtZXRob2QgaXMgZGVmaW5lZCwgSU5fUV9PVkVSRkxPVyB3aWxsIG5ldmVyIGdldAorICAgICAgICB0cmFuc21pdHRlZCBhcyBhcmd1bWVudHMgdG8gcHJvY2Vzc19kZWZhdWx0IGNhbGxzLgorCisgICAgICAgIEBwYXJhbSBldmVudDogSU5fUV9PVkVSRkxPVyBldmVudC4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIGxvZy53YXJuaW5nKCdFdmVudCBxdWV1ZSBvdmVyZmxvd2VkLicpCisKKyAgICBkZWYgcHJvY2Vzc19kZWZhdWx0KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIERlZmF1bHQgcHJvY2Vzc2luZyBldmVudCBtZXRob2QuIEJ5IGRlZmF1bHQgZG9lcyBub3RoaW5nLiBTdWJjbGFzcworICAgICAgICBQcm9jZXNzRXZlbnQgYW5kIHJlZGVmaW5lIHRoaXMgbWV0aG9kIGluIG9yZGVyIHRvIG1vZGlmeSBpdHMgYmVoYXZpb3IuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBFdmVudCB0byBiZSBwcm9jZXNzZWQuIENhbiBiZSBvZiBhbnkgdHlwZSBvZiBldmVudHMgYnV0CisgICAgICAgICAgICAgICAgICAgICAgSU5fUV9PVkVSRkxPVyBldmVudHMgKHNlZSBtZXRob2QgcHJvY2Vzc19JTl9RX09WRVJGTE9XKS4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IEV2ZW50IGluc3RhbmNlCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgUHJpbnRBbGxFdmVudHMoUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBEdW1teSBjbGFzcyB1c2VkIHRvIHByaW50IGV2ZW50cyBzdHJpbmdzIHJlcHJlc2VudGF0aW9ucy4gRm9yIGluc3RhbmNlIHRoaXMKKyAgICBjbGFzcyBpcyB1c2VkIGZyb20gY29tbWFuZCBsaW5lIHRvIHByaW50IGFsbCByZWNlaXZlZCBldmVudHMgdG8gc3Rkb3V0LgorICAgICIiIgorICAgIGRlZiBteV9pbml0KHNlbGYsIG91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBvdXQ6IFdoZXJlIGV2ZW50cyB3aWxsIGJlIHdyaXR0ZW4uCisgICAgICAgIEB0eXBlIG91dDogT2JqZWN0IHByb3ZpZGluZyBhIHZhbGlkIGZpbGUgb2JqZWN0IGludGVyZmFjZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG91dCBpcyBOb25lOgorICAgICAgICAgICAgb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl9vdXQgPSBvdXQKKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGVzIGV2ZW50IHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBmaWxlIG9iamVjdCBwcm92aWRlZCB0bworICAgICAgICBteV9pbml0KCkuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBFdmVudCB0byBiZSBwcm9jZXNzZWQuIENhbiBiZSBvZiBhbnkgdHlwZSBvZiBldmVudHMgYnV0CisgICAgICAgICAgICAgICAgICAgICAgSU5fUV9PVkVSRkxPVyBldmVudHMgKHNlZSBtZXRob2QgcHJvY2Vzc19JTl9RX09WRVJGTE9XKS4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IEV2ZW50IGluc3RhbmNlCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9vdXQud3JpdGUoc3RyKGV2ZW50KSkKKyAgICAgICAgc2VsZi5fb3V0LndyaXRlKCdcbicpCisgICAgICAgIHNlbGYuX291dC5mbHVzaCgpCisKKworY2xhc3MgQ2hhaW5JZlRydWUoUHJvY2Vzc0V2ZW50KToKKyAgICAiIiIKKyAgICBNYWtlcyBjb25kaXRpb25hbCBjaGFpbmluZyBkZXBlbmRpbmcgb24gdGhlIHJlc3VsdCBvZiB0aGUgbmVzdGVkCisgICAgcHJvY2Vzc2luZyBpbnN0YW5jZS4KKyAgICAiIiIKKyAgICBkZWYgbXlfaW5pdChzZWxmLCBmdW5jKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ldGhvZCBhdXRvbWF0aWNhbGx5IGNhbGxlZCBmcm9tIGJhc2UgY2xhc3MgY29uc3RydWN0b3IuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9mdW5jID0gZnVuYworCisgICAgZGVmIHByb2Nlc3NfZGVmYXVsdChzZWxmLCBldmVudCk6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZnVuYyhldmVudCkKKworCitjbGFzcyBTdGF0cyhQcm9jZXNzRXZlbnQpOgorICAgICIiIgorICAgIENvbXB1dGUgYW5kIGRpc3BsYXkgdHJpdmlhbCBzdGF0aXN0aWNzIGFib3V0IHByb2Nlc3NlZCBldmVudHMuCisgICAgIiIiCisgICAgZGVmIG15X2luaXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBNZXRob2QgYXV0b21hdGljYWxseSBjYWxsZWQgZnJvbSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fc3RhdHNfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICAgIGRlZiBwcm9jZXNzX2RlZmF1bHQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJvY2Vzc2VzIHxldmVudHwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zdGF0c19sb2NrLmFjcXVpcmUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMgPSBldmVudC5tYXNrbmFtZS5zcGxpdCgnfCcpCisgICAgICAgICAgICBmb3IgZXZlbnRfbmFtZSBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zdGF0cy5nZXQoZXZlbnRfbmFtZSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0c1tldmVudF9uYW1lXSA9IGNvdW50ICsgMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5yZWxlYXNlKCkKKworICAgIGRlZiBfc3RhdHNfY29weShzZWxmKToKKyAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRzLmNvcHkoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3RhdHNfbG9jay5yZWxlYXNlKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc3RhdHMgPSBzZWxmLl9zdGF0c19jb3B5KCkKKworICAgICAgICBlbGFwc2VkID0gaW50KHRpbWUudGltZSgpIC0gc2VsZi5fc3RhcnRfdGltZSkKKyAgICAgICAgZWxhcHNlZF9zdHIgPSAnJworICAgICAgICBpZiBlbGFwc2VkIDwgNjA6CisgICAgICAgICAgICBlbGFwc2VkX3N0ciA9IHN0cihlbGFwc2VkKSArICdzZWMnCisgICAgICAgIGVsaWYgNjAgPD0gZWxhcHNlZCA8IDM2MDA6CisgICAgICAgICAgICBlbGFwc2VkX3N0ciA9ICclZG1uJWRzZWMnICUgKGVsYXBzZWQgLyA2MCwgZWxhcHNlZCAlIDYwKQorICAgICAgICBlbGlmIDM2MDAgPD0gZWxhcHNlZCA8IDg2NDAwOgorICAgICAgICAgICAgZWxhcHNlZF9zdHIgPSAnJWRoJWRtbicgJSAoZWxhcHNlZCAvIDM2MDAsIChlbGFwc2VkICUgMzYwMCkgLyA2MCkKKyAgICAgICAgZWxpZiBlbGFwc2VkID49IDg2NDAwOgorICAgICAgICAgICAgZWxhcHNlZF9zdHIgPSAnJWRkJWRoJyAlIChlbGFwc2VkIC8gODY0MDAsIChlbGFwc2VkICUgODY0MDApIC8gMzYwMCkKKyAgICAgICAgc3RhdHNbJ0VsYXBzZWRUaW1lJ10gPSBlbGFwc2VkX3N0cgorCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgZXYsIHZhbHVlIGluIHNvcnRlZChzdGF0cy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMF0pOgorICAgICAgICAgICAgbC5hcHBlbmQoJyAlcz0lcycgJSAob3V0cHV0X2Zvcm1hdC5maWVsZF9uYW1lKGV2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUodmFsdWUpKSkKKyAgICAgICAgcyA9ICc8JXMlcyA+JyAlIChvdXRwdXRfZm9ybWF0LmNsYXNzX25hbWUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4obCkpCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBEdW1wcyBzdGF0aXN0aWNzLgorCisgICAgICAgIEBwYXJhbSBmaWxlbmFtZTogZmlsZW5hbWUgd2hlcmUgc3RhdHMgd2lsbCBiZSBkdW1wZWQsIGZpbGVuYW1lIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgbXVzdCBub3QgZXhpc3QgcHJpb3IgdG8gdGhpcyBjYWxsLgorICAgICAgICBAdHlwZSBmaWxlbmFtZTogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBmbGFncyA9IG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVR8b3MuT19OT0ZPTExPV3xvcy5PX0VYQ0wKKyAgICAgICAgZmQgPSBvcy5vcGVuKGZpbGVuYW1lLCBmbGFncywgMDYwMCkKKyAgICAgICAgb3Mud3JpdGUoZmQsIHN0cihzZWxmKSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmLCBzY2FsZT00NSk6CisgICAgICAgIHN0YXRzID0gc2VsZi5fc3RhdHNfY29weSgpCisgICAgICAgIGlmIG5vdCBzdGF0czoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIG0gPSBtYXgoc3RhdHMudmFsdWVzKCkpCisgICAgICAgIHVuaXR5ID0gZmxvYXQoc2NhbGUpIC8gbQorICAgICAgICBmbXQgPSAnJSUtMjZzJSUtJWRzJSVzJyAlIChsZW4ob3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZSgnQCcgKiBzY2FsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSkKKyAgICAgICAgZGVmIGZ1bmMoeCk6CisgICAgICAgICAgICByZXR1cm4gZm10ICUgKG91dHB1dF9mb3JtYXQuZmllbGRfbmFtZSh4WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5maWVsZF92YWx1ZSgnQCcgKiBpbnQoeFsxXSAqIHVuaXR5KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuc2ltcGxlKCclZCcgJSB4WzFdLCAneWVsbG93JykpCisgICAgICAgIHMgPSAnXG4nLmpvaW4obWFwKGZ1bmMsIHNvcnRlZChzdGF0cy5pdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMF0pKSkKKyAgICAgICAgcmV0dXJuIHMKKworCitjbGFzcyBOb3RpZmllckVycm9yKFB5aW5vdGlmeUVycm9yKToKKyAgICAiIiIKKyAgICBOb3RpZmllciBFeGNlcHRpb24uIFJhaXNlZCBvbiBOb3RpZmllciBlcnJvci4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnIpOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIGVycjogRXhjZXB0aW9uIHN0cmluZydzIGRlc2NyaXB0aW9uLgorICAgICAgICBAdHlwZSBlcnI6IHN0cmluZworICAgICAgICAiIiIKKyAgICAgICAgUHlpbm90aWZ5RXJyb3IuX19pbml0X18oc2VsZiwgZXJyKQorCisKK2NsYXNzIE5vdGlmaWVyOgorICAgICIiIgorICAgIFJlYWQgbm90aWZpY2F0aW9ucywgcHJvY2VzcyBldmVudHMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1bj1Ob25lLCByZWFkX2ZyZXE9MCwKKyAgICAgICAgICAgICAgICAgdGhyZXNob2xkPTAsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXphdGlvbi4gcmVhZF9mcmVxLCB0aHJlc2hvbGQgYW5kIHRpbWVvdXQgcGFyYW1ldGVycyBhcmUgdXNlZAorICAgICAgICB3aGVuIGxvb3BpbmcuCisKKyAgICAgICAgQHBhcmFtIHdhdGNoX21hbmFnZXI6IFdhdGNoIE1hbmFnZXIuCisgICAgICAgIEB0eXBlIHdhdGNoX21hbmFnZXI6IFdhdGNoTWFuYWdlciBpbnN0YW5jZQorICAgICAgICBAcGFyYW0gZGVmYXVsdF9wcm9jX2Z1bjogRGVmYXVsdCBwcm9jZXNzaW5nIG1ldGhvZC4gSWYgTm9uZSwgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIFByaW50QWxsRXZlbnRzIHdpbGwgYmUgYXNzaWduZWQuCisgICAgICAgIEB0eXBlIGRlZmF1bHRfcHJvY19mdW46IGluc3RhbmNlIG9mIFByb2Nlc3NFdmVudAorICAgICAgICBAcGFyYW0gcmVhZF9mcmVxOiBpZiByZWFkX2ZyZXEgPT0gMCwgZXZlbnRzIGFyZSByZWFkIGFzYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYWRfZnJlcSBpcyA+IDAsIHRoaXMgdGhyZWFkIHNsZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMCwgcmVhZF9mcmVxIC0gdGltZW91dCkgc2Vjb25kcy4gQnV0IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgaXMgTm9uZSBpdCBtYXkgYmUgZGlmZmVyZW50IGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbCBpcyBibG9ja2luZyB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gcmVhZC4KKyAgICAgICAgQHR5cGUgcmVhZF9mcmVxOiBpbnQKKyAgICAgICAgQHBhcmFtIHRocmVzaG9sZDogRmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmVhZCBvbmx5IGlmIHRoZSBhY2N1bXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIHRvIHJlYWQgYmVjb21lcyA+PSB0aHJlc2hvbGQuIElmICE9IDAsIHlvdSBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byB1c2UgaXQgaW4gY29tYmluYXRpb24gd2l0aCBhbiBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBmb3IgcmVhZF9mcmVxIGJlY2F1c2Ugd2l0aG91dCB0aGF0IHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwIGxvb3Bpbmcgd2l0aG91dCByZWFsbHkgcmVhZGluZyBhbnl0aGluZyBhbmQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgYW1vdW50IG9mIGV2ZW50cyB0byByZWFkIGlzID49IHRocmVzaG9sZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgQXQgbGVhc3Qgd2l0aCByZWFkX2ZyZXEgc2V0IHlvdSBtaWdodCBzbGVlcC4KKyAgICAgICAgQHR5cGUgdGhyZXNob2xkOiBpbnQKKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6CisgICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbGluZy1vYmplY3RzCisgICAgICAgIEB0eXBlIHRpbWVvdXQ6IGludAorICAgICAgICAiIiIKKyAgICAgICAgIyBXYXRjaCBNYW5hZ2VyIGluc3RhbmNlCisgICAgICAgIHNlbGYuX3dhdGNoX21hbmFnZXIgPSB3YXRjaF9tYW5hZ2VyCisgICAgICAgICMgRmlsZSBkZXNjcmlwdG9yCisgICAgICAgIHNlbGYuX2ZkID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfZmQoKQorICAgICAgICAjIFBvbGwgb2JqZWN0IGFuZCByZWdpc3RyYXRpb24KKyAgICAgICAgc2VsZi5fcG9sbG9iaiA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgc2VsZi5fcG9sbG9iai5yZWdpc3RlcihzZWxmLl9mZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgIyBUaGlzIHBpcGUgaXMgY29ycmVjdGVseSBpbml0aWFsaXplZCBhbmQgdXNlZCBieSBUaHJlYWRlZE5vdGlmaWVyCisgICAgICAgIHNlbGYuX3BpcGUgPSAoLTEsIC0xKQorICAgICAgICAjIEV2ZW50IHF1ZXVlCisgICAgICAgIHNlbGYuX2V2ZW50cSA9IGRlcXVlKCkKKyAgICAgICAgIyBTeXN0ZW0gcHJvY2Vzc2luZyBmdW5jdG9yLCBjb21tb24gdG8gYWxsIGV2ZW50cworICAgICAgICBzZWxmLl9zeXNfcHJvY19mdW4gPSBfU3lzUHJvY2Vzc0V2ZW50KHNlbGYuX3dhdGNoX21hbmFnZXIsIHNlbGYpCisgICAgICAgICMgRGVmYXVsdCBwcm9jZXNzaW5nIG1ldGhvZAorICAgICAgICBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuID0gZGVmYXVsdF9wcm9jX2Z1bgorICAgICAgICBpZiBkZWZhdWx0X3Byb2NfZnVuIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuID0gUHJpbnRBbGxFdmVudHMoKQorICAgICAgICAjIExvb3AgcGFyYW1ldGVycworICAgICAgICBzZWxmLl9yZWFkX2ZyZXEgPSByZWFkX2ZyZXEKKyAgICAgICAgc2VsZi5fdGhyZXNob2xkID0gdGhyZXNob2xkCisgICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgICMgQ29hbGVzY2UgZXZlbnRzIG9wdGlvbgorICAgICAgICBzZWxmLl9jb2FsZXNjZSA9IEZhbHNlCisgICAgICAgICMgc2V0IG9mIHN0cihyYXdfZXZlbnQpLCBvbmx5IHVzZWQgd2hlbiBjb2FsZXNjZSBvcHRpb24gaXMgVHJ1ZQorICAgICAgICBzZWxmLl9ldmVudHNldCA9IHNldCgpCisKKyAgICBkZWYgYXBwZW5kX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiCisgICAgICAgIEFwcGVuZCBhIHJhdyBldmVudCB0byB0aGUgZXZlbnQgcXVldWUuCisKKyAgICAgICAgQHBhcmFtIGV2ZW50OiBBbiBldmVudC4KKyAgICAgICAgQHR5cGUgZXZlbnQ6IF9SYXdFdmVudCBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2V2ZW50cS5hcHBlbmQoZXZlbnQpCisKKyAgICBkZWYgcHJvY19mdW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X3Byb2NfZnVuCisKKyAgICBkZWYgY29hbGVzY2VfZXZlbnRzKHNlbGYsIGNvYWxlc2NlPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29hbGVzY2luZyBldmVudHMuIEV2ZW50cyBhcmUgdXN1YWxseSBwcm9jZXNzZWQgYnkgYmF0Y2hzLCB0aGVpciBzaXplCisgICAgICAgIGRlcGVuZCBvbiB2YXJpb3VzIGZhY3RvcnMuIFRodXMsIGJlZm9yZSBwcm9jZXNzaW5nIHRoZW0sIGV2ZW50cyByZWNlaXZlZAorICAgICAgICBmcm9tIGlub3RpZnkgYXJlIGFnZ3JlZ2F0ZWQgaW4gYSBmaWZvIHF1ZXVlLiBJZiB0aGlzIGNvYWxlc2NpbmcKKyAgICAgICAgb3B0aW9uIGlzIGVuYWJsZWQgZXZlbnRzIGFyZSBmaWx0ZXJlZCBiYXNlZCBvbiB0aGVpciB1bmljaXR5LCBvbmx5CisgICAgICAgIHVuaXF1ZSBldmVudHMgYXJlIGVucXVldWVkLCBkb3VibG9ucyBhcmUgZGlzY2FyZGVkLiBBbiBldmVudCBpcyB1bmlxdWUKKyAgICAgICAgd2hlbiB0aGUgY29tYmluYXRpb24gb2YgaXRzIGZpZWxkcyAod2QsIG1hc2ssIGNvb2tpZSwgbmFtZSkgaXMgdW5pcXVlCisgICAgICAgIGFtb25nIGV2ZW50cyBvZiBhIHNhbWUgYmF0Y2guIEFmdGVyIGEgYmF0Y2ggb2YgZXZlbnRzIGlzIHByb2Nlc3NlZCBhbnkKKyAgICAgICAgZXZlbnRzIGlzIGFjY2VwdGVkIGFnYWluLiBCeSBkZWZhdWx0IHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCB5b3UgaGF2ZQorICAgICAgICB0byBleHBsaWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHR1cm4gaXQgb24uCisKKyAgICAgICAgQHBhcmFtIGNvYWxlc2NlOiBPcHRpb25hbCBuZXcgY29hbGVzY2luZyB2YWx1ZS4gVHJ1ZSBieSBkZWZhdWx0LgorICAgICAgICBAdHlwZSBjb2FsZXNjZTogQm9vbAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29hbGVzY2UgPSBjb2FsZXNjZQorICAgICAgICBpZiBub3QgY29hbGVzY2U6CisgICAgICAgICAgICBzZWxmLl9ldmVudHNldC5jbGVhcigpCisKKyAgICBkZWYgY2hlY2tfZXZlbnRzKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayBmb3IgbmV3IGV2ZW50cyBhdmFpbGFibGUgdG8gcmVhZCwgYmxvY2tzIHVwIHRvIHRpbWVvdXQKKyAgICAgICAgbWlsbGlzZWNvbmRzLgorCisgICAgICAgIEBwYXJhbSB0aW1lb3V0OiBJZiBzcGVjaWZpZWQgaXQgb3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgX3RpbWVvdXQuCisgICAgICAgIEB0eXBlIHRpbWVvdXQ6IGludAorCisgICAgICAgIEByZXR1cm46IE5ldyBldmVudHMgdG8gcmVhZC4KKyAgICAgICAgQHJ0eXBlOiBib29sCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgYmxvY2tzIHVwIHRvICd0aW1lb3V0JyBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl90aW1lb3V0CisgICAgICAgICAgICAgICAgcmV0ID0gc2VsZi5fcG9sbG9iai5wb2xsKHRpbWVvdXQpCisgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyWzBdID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAjIGludGVycnVwdGVkLCByZXRyeQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IHJldCBvciAoc2VsZi5fcGlwZVswXSA9PSByZXRbMF1bMF0pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgb25seSBvbmUgZmQgaXMgcG9sbGVkCisgICAgICAgIHJldHVybiByZXRbMF1bMV0gJiBzZWxlY3QuUE9MTElOCisKKyAgICBkZWYgcmVhZF9ldmVudHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIGV2ZW50cyBmcm9tIGRldmljZSwgYnVpbGQgX1Jhd0V2ZW50cywgYW5kIGVucXVldWUgdGhlbS4KKyAgICAgICAgIiIiCisgICAgICAgIGJ1Zl8gPSBhcnJheS5hcnJheSgnaScsIFswXSkKKyAgICAgICAgIyBnZXQgZXZlbnQgcXVldWUgc2l6ZQorICAgICAgICBpZiBmY250bC5pb2N0bChzZWxmLl9mZCwgdGVybWlvcy5GSU9OUkVBRCwgYnVmXywgMSkgPT0gLTE6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcXVldWVfc2l6ZSA9IGJ1Zl9bMF0KKyAgICAgICAgaWYgcXVldWVfc2l6ZSA8IHNlbGYuX3RocmVzaG9sZDoKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnKGZkOiAlZCkgJWQgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQgYnV0IHRocmVzaG9sZCBpcyAnCisgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIHRvICVkIGJ5dGVzJywgc2VsZi5fZmQsIHF1ZXVlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGhyZXNob2xkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBSZWFkIGNvbnRlbnQgZnJvbSBmaWxlCisgICAgICAgICAgICByID0gb3MucmVhZChzZWxmLl9mZCwgcXVldWVfc2l6ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgbXNnOgorICAgICAgICAgICAgcmFpc2UgTm90aWZpZXJFcnJvcihtc2cpCisgICAgICAgIGxvZy5kZWJ1ZygnRXZlbnQgcXVldWUgc2l6ZTogJWQnLCBxdWV1ZV9zaXplKQorICAgICAgICByc3VtID0gMCAgIyBjb3VudGVyCisgICAgICAgIHdoaWxlIHJzdW0gPCBxdWV1ZV9zaXplOgorICAgICAgICAgICAgc19zaXplID0gMTYKKyAgICAgICAgICAgICMgUmV0cmlldmUgd2QsIG1hc2ssIGNvb2tpZSBhbmQgZm5hbWVfbGVuCisgICAgICAgICAgICB3ZCwgbWFzaywgY29va2llLCBmbmFtZV9sZW4gPSBzdHJ1Y3QudW5wYWNrKCdpSUlJJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltyc3VtOnJzdW0rc19zaXplXSkKKyAgICAgICAgICAgICMgUmV0cmlldmUgbmFtZQorICAgICAgICAgICAgZm5hbWUsID0gc3RydWN0LnVucGFjaygnJWRzJyAlIGZuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcltyc3VtICsgc19zaXplOnJzdW0gKyBzX3NpemUgKyBmbmFtZV9sZW5dKQorICAgICAgICAgICAgcmF3ZXZlbnQgPSBfUmF3RXZlbnQod2QsIG1hc2ssIGNvb2tpZSwgZm5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLl9jb2FsZXNjZToKKyAgICAgICAgICAgICAgICAjIE9ubHkgZW5xdWV1ZSBuZXcgKHVuaXF1ZSkgZXZlbnRzLgorICAgICAgICAgICAgICAgIHJhd2V2ZW50c3RyID0gc3RyKHJhd2V2ZW50KQorICAgICAgICAgICAgICAgIGlmIHJhd2V2ZW50c3RyIG5vdCBpbiBzZWxmLl9ldmVudHNldDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRzZXQuYWRkKHJhd2V2ZW50c3RyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHEuYXBwZW5kKHJhd2V2ZW50KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHEuYXBwZW5kKHJhd2V2ZW50KQorICAgICAgICAgICAgcnN1bSArPSBzX3NpemUgKyBmbmFtZV9sZW4KKworICAgIGRlZiBwcm9jZXNzX2V2ZW50cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJvdXRpbmUgZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGZyb20gcXVldWUgYnkgY2FsbGluZyB0aGVpcgorICAgICAgICBhc3NvY2lhdGVkIHByb2NjZXNzaW5nIG1ldGhvZCAoYW4gaW5zdGFuY2Ugb2YgUHJvY2Vzc0V2ZW50KS4KKyAgICAgICAgSXQgYWxzbyBkb2VzIGludGVybmFsIHByb2Nlc3NpbmdzLCB0byBrZWVwIHRoZSBzeXN0ZW0gdXBkYXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHNlbGYuX2V2ZW50cToKKyAgICAgICAgICAgIHJhd19ldmVudCA9IHNlbGYuX2V2ZW50cS5wb3BsZWZ0KCkgICMgcG9wIG5leHQgZXZlbnQKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoX21hbmFnZXIuaWdub3JlX2V2ZW50czoKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkV2ZW50IGlnbm9yZWQ6ICVzIiAlIHJlcHIocmF3X2V2ZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2F0Y2hfID0gc2VsZi5fd2F0Y2hfbWFuYWdlci5nZXRfd2F0Y2gocmF3X2V2ZW50LndkKQorICAgICAgICAgICAgaWYgKHdhdGNoXyBpcyBOb25lKSBhbmQgbm90IChyYXdfZXZlbnQubWFzayAmIElOX1FfT1ZFUkZMT1cpOgorICAgICAgICAgICAgICAgIGlmIG5vdCAocmF3X2V2ZW50Lm1hc2sgJiBJTl9JR05PUkVEKToKKyAgICAgICAgICAgICAgICAgICAgIyBOb3QgcmVhbGx5IHN1cmUgaG93IHdlIGVuZGVkIHVwIGhlcmUsIG5vciBob3cgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICMgaGFuZGxlIHRoZXNlIHR5cGVzIG9mIGV2ZW50cyBhbmQgaWYgaXQgaXMgYXBwcm9wcmlhdGUgdG8KKyAgICAgICAgICAgICAgICAgICAgIyBjb21wbGV0bHkgc2tpcCB0aGVtIChsaWtlIHdlIGFyZSBkb2luZyBoZXJlKS4KKyAgICAgICAgICAgICAgICAgICAgbG9nLndhcm5pbmcoIlVuYWJsZSB0byByZXRyaWV2ZSBXYXRjaCBvYmplY3QgYXNzb2NpYXRlZCB0byAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIocmF3X2V2ZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV2ZW50ID0gc2VsZi5fc3lzX3Byb2NfZnVuKHJhd19ldmVudCkgICMgc3lzdGVtIHByb2Nlc3NpbmdzCisgICAgICAgICAgICBpZiB3YXRjaF8gYW5kIHdhdGNoXy5wcm9jX2Z1bjoKKyAgICAgICAgICAgICAgICB3YXRjaF8ucHJvY19mdW4ocmV2ZW50KSAgIyB1c2VyIHByb2Nlc3NpbmdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfcHJvY19mdW4ocmV2ZW50KQorICAgICAgICBzZWxmLl9zeXNfcHJvY19mdW4uY2xlYW51cCgpICAjIHJlbW92ZSBvbGRzIE1PVkVEXyogZXZlbnRzIHJlY29yZHMKKyAgICAgICAgaWYgc2VsZi5fY29hbGVzY2U6CisgICAgICAgICAgICBzZWxmLl9ldmVudHNldC5jbGVhcigpCisKKyAgICBkZWYgX19kYWVtb25pemUoc2VsZiwgcGlkX2ZpbGU9Tm9uZSwgc3RkaW49b3MuZGV2bnVsbCwgc3Rkb3V0PW9zLmRldm51bGwsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1vcy5kZXZudWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBwaWRfZmlsZTogZmlsZSB3aGVyZSB0aGUgcGlkIHdpbGwgYmUgd3JpdHRlbi4gSWYgcGlkX2ZpbGU9Tm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwaWQgaXMgd3JpdHRlbiB0bworICAgICAgICAgICAgICAgICAgICAgICAgIC92YXIvcnVuLzxzeXMuYXJndlswXXxweWlub3RpZnk+LnBpZCwgaWYgcGlkX2ZpbGU9RmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBubyBwaWRfZmlsZSBpcyB3cml0dGVuLgorICAgICAgICBAcGFyYW0gc3RkaW46CisgICAgICAgIEBwYXJhbSBzdGRvdXQ6CisgICAgICAgIEBwYXJhbSBzdGRlcnI6IGZpbGVzIGFzc29jaWF0ZWQgdG8gY29tbW9uIHN0cmVhbXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBwaWRfZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgZGlybmFtZSA9ICcvdmFyL3J1bi8nCisgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pIG9yICdweWlub3RpZnknCisgICAgICAgICAgICBwaWRfZmlsZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBiYXNlbmFtZSArICcucGlkJykKKworICAgICAgICBpZiBwaWRfZmlsZSAhPSBGYWxzZSBhbmQgb3MucGF0aC5sZXhpc3RzKHBpZF9maWxlKToKKyAgICAgICAgICAgIGVyciA9ICdDYW5ub3QgZGFlbW9uaXplOiBwaWQgZmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4nICUgcGlkX2ZpbGUKKyAgICAgICAgICAgIHJhaXNlIE5vdGlmaWVyRXJyb3IoZXJyKQorCisgICAgICAgIGRlZiBmb3JrX2RhZW1vbigpOgorICAgICAgICAgICAgIyBBZGFwdGVkIGZyb20gQ2hhZCBKLiBTY2hyb2VkZXIncyByZWNpcGUKKyAgICAgICAgICAgICMgQHNlZSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNzg3MzEvCisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIChwaWQgPT0gMCk6CisgICAgICAgICAgICAgICAgIyBwYXJlbnQgMgorICAgICAgICAgICAgICAgIG9zLnNldHNpZCgpCisgICAgICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgKHBpZCA9PSAwKToKKyAgICAgICAgICAgICAgICAgICAgIyBjaGlsZAorICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLycpCisgICAgICAgICAgICAgICAgICAgIG9zLnVtYXNrKDAyMikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHBhcmVudCAyCisgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcGFyZW50IDEKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgICAgICAgICBmZF9pbnAgPSBvcy5vcGVuKHN0ZGluLCBvcy5PX1JET05MWSkKKyAgICAgICAgICAgIG9zLmR1cDIoZmRfaW5wLCAwKQorICAgICAgICAgICAgZmRfb3V0ID0gb3Mub3BlbihzdGRvdXQsIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQsIDA2MDApCisgICAgICAgICAgICBvcy5kdXAyKGZkX291dCwgMSkKKyAgICAgICAgICAgIGZkX2VyciA9IG9zLm9wZW4oc3RkZXJyLCBvcy5PX1dST05MWXxvcy5PX0NSRUFULCAwNjAwKQorICAgICAgICAgICAgb3MuZHVwMihmZF9lcnIsIDIpCisKKyAgICAgICAgIyBEZXRhY2ggdGFzaworICAgICAgICBmb3JrX2RhZW1vbigpCisKKyAgICAgICAgIyBXcml0ZSBwaWQKKyAgICAgICAgaWYgcGlkX2ZpbGUgIT0gRmFsc2U6CisgICAgICAgICAgICBmbGFncyA9IG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVR8b3MuT19OT0ZPTExPV3xvcy5PX0VYQ0wKKyAgICAgICAgICAgIGZkX3BpZCA9IG9zLm9wZW4ocGlkX2ZpbGUsIGZsYWdzLCAwNjAwKQorICAgICAgICAgICAgb3Mud3JpdGUoZmRfcGlkLCBzdHIob3MuZ2V0cGlkKCkpICsgJ1xuJykKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkX3BpZCkKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdW5saW5rIGZ1bmN0aW9uCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhIDogb3MudW5saW5rKHBpZF9maWxlKSkKKworICAgIGRlZiBfc2xlZXAoc2VsZiwgcmVmX3RpbWUpOgorICAgICAgICAjIE9ubHkgY29uc2lkZXIgc2xlZXBpbmcgaWYgcmVhZF9mcmVxIGlzID4gMAorICAgICAgICBpZiBzZWxmLl9yZWFkX2ZyZXEgPiAwOgorICAgICAgICAgICAgY3VyX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc2xlZXBfYW1vdW50ID0gc2VsZi5fcmVhZF9mcmVxIC0gKGN1cl90aW1lIC0gcmVmX3RpbWUpCisgICAgICAgICAgICBpZiBzbGVlcF9hbW91bnQgPiAwOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnTm93IHNsZWVwaW5nICVkIHNlY29uZHMnLCBzbGVlcF9hbW91bnQpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChzbGVlcF9hbW91bnQpCisKKyAgICBkZWYgbG9vcChzZWxmLCBjYWxsYmFjaz1Ob25lLCBkYWVtb25pemU9RmFsc2UsICoqYXJncyk6CisgICAgICAgICIiIgorICAgICAgICBFdmVudHMgYXJlIHJlYWQgb25seSBvbmUgdGltZSBldmVyeSBtaW4ocmVhZF9mcmVxLCB0aW1lb3V0KQorICAgICAgICBzZWNvbmRzIGF0IGJlc3QgYW5kIG9ubHkgaWYgdGhlIHNpemUgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuCisgICAgICAgIEFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMgaXQgbXVzdCBub3QgYmUgY2FsbGVkIGFnYWluIGZvciB0aGUgc2FtZQorICAgICAgICBpbnN0YW5jZS4KKworICAgICAgICBAcGFyYW0gY2FsbGJhY2s6IEZ1bmN0b3IgY2FsbGVkIGFmdGVyIGVhY2ggZXZlbnQgcHJvY2Vzc2luZyBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0cyB0byByZWNlaXZlIHRoZSBub3RpZmllciBvYmplY3QgKHNlbGYpIGFzIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSB0aGUgbG9vcCBpcworICAgICAgICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZWQgb3RoZXJ3aXNlIHRoZSBsb29wIG1ldGhvZCBrZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BpbmcuCisgICAgICAgIEB0eXBlIGNhbGxiYWNrOiBjYWxsYWJsZSBvYmplY3Qgb3IgZnVuY3Rpb24KKyAgICAgICAgQHBhcmFtIGRhZW1vbml6ZTogVGhpcyB0aHJlYWQgaXMgZGFlbW9uaXplZCBpZiBzZXQgdG8gVHJ1ZS4KKyAgICAgICAgQHR5cGUgZGFlbW9uaXplOiBib29sZWFuCisgICAgICAgIEBwYXJhbSBhcmdzOiBPcHRpb25hbCBhbmQgcmVsZXZhbnQgb25seSBpZiBkYWVtb25pemUgaXMgVHJ1ZS4gUmVtYWluaW5nCisgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkZWQgYXJndW1lbnRzIGFyZSBkaXJlY3RseSBwYXNzZWQgdG8gZGFlbW9uaXplIHNlZQorICAgICAgICAgICAgICAgICAgICAgX19kYWVtb25pemUoKSBtZXRob2QuIElmIHBpZF9maWxlPU5vbmUgb3IgaXMgc2V0IHRvIGEKKyAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lIHRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgcHlpbm90aWZ5Lk5vdGlmaWVyRXJyb3Igd2lsbCBiZSByYWlzZWQuIElmIHBpZF9maWxlPUZhbHNlCisgICAgICAgICAgICAgICAgICAgICBpdCBpcyBzdGlsbCBkYWVtb25pemVkIGJ1dCB0aGUgcGlkIGlzIG5vdCB3cml0dGVuIGluIGFueQorICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgQHR5cGUgYXJnczogdmFyaW91cworICAgICAgICAiIiIKKyAgICAgICAgaWYgZGFlbW9uaXplOgorICAgICAgICAgICAgc2VsZi5fX2RhZW1vbml6ZSgqKmFyZ3MpCisKKyAgICAgICAgIyBSZWFkIGFuZCBwcm9jZXNzIGV2ZW50cyBmb3JldmVyCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrIGlzIG5vdCBOb25lKSBhbmQgKGNhbGxiYWNrKHNlbGYpIGlzIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHJlZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICAjIGNoZWNrX2V2ZW50cyBpcyBibG9ja2luZworICAgICAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfZXZlbnRzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NsZWVwKHJlZl90aW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAjIFN0b3AgbW9uaXRvcmluZyBpZiBzaWdpbnQgaXMgY2F1Z2h0IChDb250cm9sLUMpLgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnUHlpbm90aWZ5IHN0b3BzIG1vbml0b3JpbmcuJykKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAjIENsb3NlIGludGVybmFscworICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbG9zZSBpbm90aWZ5J3MgaW5zdGFuY2UgKGNsb3NlIGl0cyBmaWxlIGRlc2NyaXB0b3IpLgorICAgICAgICBJdCBkZXN0cm95cyBhbGwgZXhpc3Rpbmcgd2F0Y2hlcywgcGVuZGluZyBldmVudHMsLi4uCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGF0IHRoZSBlbmQgb2YgbG9vcCgpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcG9sbG9iai51bnJlZ2lzdGVyKHNlbGYuX2ZkKQorICAgICAgICBvcy5jbG9zZShzZWxmLl9mZCkKKyAgICAgICAgc2VsZi5fc3lzX3Byb2NfZnVuID0gTm9uZQorCisKK2NsYXNzIFRocmVhZGVkTm90aWZpZXIodGhyZWFkaW5nLlRocmVhZCwgTm90aWZpZXIpOgorICAgICIiIgorICAgIFRoaXMgbm90aWZpZXIgaW5oZXJpdHMgZnJvbSB0aHJlYWRpbmcuVGhyZWFkIGZvciBpbnN0YW5jaWF0aW5nIGEgc2VwYXJhdGUKKyAgICB0aHJlYWQsIGFuZCBhbHNvIGluaGVyaXRzIGZyb20gTm90aWZpZXIsIGJlY2F1c2UgaXQgaXMgYSB0aHJlYWRlZCBub3RpZmllci4KKworICAgIE5vdGUgdGhhdCBldmVyeSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgY2xhc3MgaXMgYWxzbyBwcm92aWRlZAorICAgIHRocm91Z2ggTm90aWZpZXIgY2xhc3MuIE1vcmVvdmVyIE5vdGlmaWVyIHNob3VsZCBiZSBjb25zaWRlcmVkIGZpcnN0IGJlY2F1c2UKKyAgICBpdCBpcyBub3QgdGhyZWFkZWQgYW5kIGNvdWxkIGJlIGVhc2lseSBkYWVtb25pemVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLAorICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluaXRpYWxpemF0aW9uLCBpbml0aWFsaXplIGJhc2UgY2xhc3Nlcy4gcmVhZF9mcmVxLCB0aHJlc2hvbGQgYW5kCisgICAgICAgIHRpbWVvdXQgcGFyYW1ldGVycyBhcmUgdXNlZCB3aGVuIGxvb3BpbmcuCisKKyAgICAgICAgQHBhcmFtIHdhdGNoX21hbmFnZXI6IFdhdGNoIE1hbmFnZXIuCisgICAgICAgIEB0eXBlIHdhdGNoX21hbmFnZXI6IFdhdGNoTWFuYWdlciBpbnN0YW5jZQorICAgICAgICBAcGFyYW0gZGVmYXVsdF9wcm9jX2Z1bjogRGVmYXVsdCBwcm9jZXNzaW5nIG1ldGhvZC4gU2VlIGJhc2UgY2xhc3MuCisgICAgICAgIEB0eXBlIGRlZmF1bHRfcHJvY19mdW46IGluc3RhbmNlIG9mIFByb2Nlc3NFdmVudAorICAgICAgICBAcGFyYW0gcmVhZF9mcmVxOiBpZiByZWFkX2ZyZXEgPT0gMCwgZXZlbnRzIGFyZSByZWFkIGFzYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYWRfZnJlcSBpcyA+IDAsIHRoaXMgdGhyZWFkIHNsZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgoMCwgcmVhZF9mcmVxIC0gdGltZW91dCkgc2Vjb25kcy4KKyAgICAgICAgQHR5cGUgcmVhZF9mcmVxOiBpbnQKKyAgICAgICAgQHBhcmFtIHRocmVzaG9sZDogRmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgcmVhZCBvbmx5IGlmIHRoZSBhY2N1bXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIHRvIHJlYWQgYmVjb21lcyA+PSB0aHJlc2hvbGQuIElmICE9IDAsIHlvdSBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCB0byB1c2UgaXQgaW4gY29tYmluYXRpb24gd2l0aCBhbiBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBzZXQgZm9yIHJlYWRfZnJlcSBiZWNhdXNlIHdpdGhvdXQgdGhhdCB5b3Ugd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcCBsb29waW5nIHdpdGhvdXQgcmVhbGx5IHJlYWRpbmcgYW55dGhpbmcgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW50aWwgdGhlIGFtb3VudCBvZiBldmVudHMgdG8gcmVhZCBpcyA+PSB0aHJlc2hvbGQuIEF0CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IHdpdGggcmVhZF9mcmVxIHlvdSBtaWdodCBzbGVlcC4KKyAgICAgICAgQHR5cGUgdGhyZXNob2xkOiBpbnQKKyAgICAgICAgQHBhcmFtIHRpbWVvdXQ6CisgICAgICAgICAgICBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjcG9sbGluZy1vYmplY3RzCisgICAgICAgIEB0eXBlIHRpbWVvdXQ6IGludAorICAgICAgICAiIiIKKyAgICAgICAgIyBJbml0IHRocmVhZGluZyBiYXNlIGNsYXNzCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgIyBTdG9wIGNvbmRpdGlvbgorICAgICAgICBzZWxmLl9zdG9wX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgIyBJbml0IE5vdGlmaWVyIGJhc2UgY2xhc3MKKyAgICAgICAgTm90aWZpZXIuX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgZGVmYXVsdF9wcm9jX2Z1biwgcmVhZF9mcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQsIHRpbWVvdXQpCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IHBpcGUgdXNlZCBmb3IgdGhyZWFkIHRlcm1pbmF0aW9uCisgICAgICAgIHNlbGYuX3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5fcG9sbG9iai5yZWdpc3RlcihzZWxmLl9waXBlWzBdLCBzZWxlY3QuUE9MTElOKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdG9wIG5vdGlmaWVyJ3MgbG9vcC4gU3RvcCBub3RpZmljYXRpb24uIEpvaW4gdGhlIHRocmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0b3BfZXZlbnQuc2V0KCkKKyAgICAgICAgb3Mud3JpdGUoc2VsZi5fcGlwZVsxXSwgJ3N0b3AnKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLmpvaW4oc2VsZikKKyAgICAgICAgTm90aWZpZXIuc3RvcChzZWxmKQorICAgICAgICBzZWxmLl9wb2xsb2JqLnVucmVnaXN0ZXIoc2VsZi5fcGlwZVswXSkKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5fcGlwZVswXSkKKyAgICAgICAgb3MuY2xvc2Uoc2VsZi5fcGlwZVsxXSkKKworICAgIGRlZiBsb29wKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhyZWFkJ3MgbWFpbiBsb29wLiBEb24ndCBtZWFudCB0byBiZSBjYWxsZWQgYnkgdXNlciBkaXJlY3RseS4KKyAgICAgICAgQ2FsbCBpbmhlcml0ZWQgc3RhcnQoKSBtZXRob2QgaW5zdGVhZC4KKworICAgICAgICBFdmVudHMgYXJlIHJlYWQgb25seSBvbmNlIHRpbWUgZXZlcnkgbWluKHJlYWRfZnJlcSwgdGltZW91dCkKKyAgICAgICAgc2Vjb25kcyBhdCBiZXN0IGFuZCBvbmx5IGlmIHRoZSBzaXplIG9mIGV2ZW50cyB0byByZWFkIGlzID49IHRocmVzaG9sZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgV2hlbiB0aGUgbG9vcCBtdXN0IGJlIHRlcm1pbmF0ZWQgLnN0b3AoKSBpcyBjYWxsZWQsICdzdG9wJworICAgICAgICAjIGlzIHdyaXR0ZW4gdG8gcGlwZSBmZCBzbyBwb2xsKCkgcmV0dXJucyBhbmQgLmNoZWNrX2V2ZW50cygpCisgICAgICAgICMgcmV0dXJucyBGYWxzZSB3aGljaCBtYWtlIGV2YWx1YXRlIHRoZSBXaGlsZSdzIHN0b3AgY29uZGl0aW9uCisgICAgICAgICMgLl9zdG9wX2V2ZW50LmlzU2V0KCkgd2ljaCBwdXQgYW4gZW5kIHRvIHRoZSB0aHJlYWQncyBleGVjdXRpb24uCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wX2V2ZW50LmlzU2V0KCk6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3NfZXZlbnRzKCkKKyAgICAgICAgICAgIHJlZl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tfZXZlbnRzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2xlZXAocmVmX3RpbWUpCisgICAgICAgICAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3RhcnQgdGhyZWFkJ3MgbG9vcDogcmVhZCBhbmQgcHJvY2VzcyBldmVudHMgdW50aWwgdGhlIG1ldGhvZAorICAgICAgICBzdG9wKCkgaXMgY2FsbGVkLgorICAgICAgICBOZXZlciBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LCBpbnN0ZWFkIGNhbGwgdGhlIHN0YXJ0KCkgbWV0aG9kCisgICAgICAgIGluaGVyaXRlZCBmcm9tIHRocmVhZGluZy5UaHJlYWQsIHdoaWNoIHRoZW4gd2lsbCBjYWxsIHJ1bigpIGluCisgICAgICAgIGl0cyB0dXJuLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5sb29wKCkKKworCitjbGFzcyBBc3luY05vdGlmaWVyKGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciwgTm90aWZpZXIpOgorICAgICIiIgorICAgIFRoaXMgbm90aWZpZXIgaW5oZXJpdHMgZnJvbSBhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIgaW4gb3JkZXIgdG8gYmUgYWJsZSB0bworICAgIHVzZSBweWlub3RpZnkgYWxvbmcgd2l0aCB0aGUgYXN5bmNvcmUgZnJhbWV3b3JrLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW49Tm9uZSwgcmVhZF9mcmVxPTAsCisgICAgICAgICAgICAgICAgIHRocmVzaG9sZD0wLCB0aW1lb3V0PU5vbmUsIGNoYW5uZWxfbWFwPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6ZXMgdGhlIGFzeW5jIG5vdGlmaWVyLiBUaGUgb25seSBhZGRpdGlvbmFsIHBhcmFtZXRlciBpcworICAgICAgICAnY2hhbm5lbF9tYXAnIHdoaWNoIGlzIHRoZSBvcHRpb25hbCBhc3luY29yZSBwcml2YXRlIG1hcC4gU2VlCisgICAgICAgIE5vdGlmaWVyIGNsYXNzIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgb3RoZXJzIHBhcmFtZXRlcnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIE5vdGlmaWVyLl9faW5pdF9fKHNlbGYsIHdhdGNoX21hbmFnZXIsIGRlZmF1bHRfcHJvY19mdW4sIHJlYWRfZnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkLCB0aW1lb3V0KQorICAgICAgICBhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgc2VsZi5fZmQsIGNoYW5uZWxfbWFwKQorCisgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hlbiBhc3luY29yZSB0ZWxscyB1cyB3ZSBjYW4gcmVhZCBmcm9tIHRoZSBmZCwgd2UgcHJvY2VlZCBwcm9jZXNzaW5nCisgICAgICAgIGV2ZW50cy4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIGhhbmRsaW5nIGEgbm90aWZpY2F0aW9uCisgICAgICAgIGRpZmZlcmVudGx5LgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5wcm9jZXNzX2V2ZW50cygpCisKKworY2xhc3MgVG9ybmFkb0FzeW5jTm90aWZpZXIoTm90aWZpZXIpOgorICAgICIiIgorICAgIFRvcm5hZG8gaW9sb29wIGFkYXB0ZXIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2F0Y2hfbWFuYWdlciwgaW9sb29wLCBjYWxsYmFjaz1Ob25lLAorICAgICAgICAgICAgICAgICBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLCB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lLAorICAgICAgICAgICAgICAgICBjaGFubmVsX21hcD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE5vdGUgdGhhdCBpZiBsYXRlciB5b3UgbXVzdCBjYWxsIGlvbG9vcC5jbG9zZSgpIGJlIHN1cmUgdG8gbGV0IHRoZQorICAgICAgICBkZWZhdWx0IHBhcmFtZXRlciB0byBhbGxfZmRzPUZhbHNlLgorCisgICAgICAgIFNlZSBleGFtcGxlIHRvcm5hZG9fbm90aWZpZXIucHkgZm9yIGFuIGV4YW1wbGUgdXNpbmcgdGhpcyBub3RpZmllci4KKworICAgICAgICBAcGFyYW0gaW9sb29wOiBUb3JuYWRvJ3MgSU8gbG9vcC4KKyAgICAgICAgQHR5cGUgaW9sb29wOiB0b3JuYWRvLmlvbG9vcC5JT0xvb3AgaW5zdGFuY2UuCisgICAgICAgIEBwYXJhbSBjYWxsYmFjazogRnVuY3RvciBjYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGNhbGwgdG8gaGFuZGxlX3JlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAoSU9Mb29wJ3MgcmVhZCBoYW5kbGVyKS4gRXhwZWN0cyB0byByZWNlaXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyIG9iamVjdCAoc2VsZikgYXMgc2luZ2xlIHBhcmFtZXRlci4KKyAgICAgICAgQHR5cGUgY2FsbGJhY2s6IGNhbGxhYmxlIG9iamVjdCBvciBmdW5jdGlvbgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5pb19sb29wID0gaW9sb29wCisgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2sgPSBjYWxsYmFjaworICAgICAgICBOb3RpZmllci5fX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuLCByZWFkX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgdGltZW91dCkKKyAgICAgICAgaW9sb29wLmFkZF9oYW5kbGVyKHNlbGYuX2ZkLCBzZWxmLmhhbmRsZV9yZWFkLCBpb2xvb3AuUkVBRCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLmlvX2xvb3AucmVtb3ZlX2hhbmRsZXIoc2VsZi5fZmQpCisgICAgICAgIE5vdGlmaWVyLnN0b3Aoc2VsZikKKworICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIGNvbW1lbnQgaW4gQXN5bmNOb3RpZmllci4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorICAgICAgICBpZiBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayhzZWxmKQorCisKK2NsYXNzIEFzeW5jaW9Ob3RpZmllcihOb3RpZmllcik6CisgICAgIiIiCisKKyAgICBhc3luY2lvL3Ryb2xsaXVzIGV2ZW50IGxvb3AgYWRhcHRlci4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBsb29wLCBjYWxsYmFjaz1Ob25lLAorICAgICAgICAgICAgICAgICBkZWZhdWx0X3Byb2NfZnVuPU5vbmUsIHJlYWRfZnJlcT0wLCB0aHJlc2hvbGQ9MCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgU2VlIGV4YW1wbGVzL2FzeW5jaW9fbm90aWZpZXIucHkgZm9yIGFuIGV4YW1wbGUgdXNhZ2UuCisKKyAgICAgICAgQHBhcmFtIGxvb3A6IGFzeW5jaW8gb3IgdHJvbGxpdXMgZXZlbnQgbG9vcCBpbnN0YW5jZS4KKyAgICAgICAgQHR5cGUgbG9vcDogYXN5bmNpby5CYXNlRXZlbnRMb29wIG9yIHRyb2xsaXVzLkJhc2VFdmVudExvb3AgaW5zdGFuY2UuCisgICAgICAgIEBwYXJhbSBjYWxsYmFjazogRnVuY3RvciBjYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGNhbGwgdG8gaGFuZGxlX3JlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0cyB0byByZWNlaXZlIHRoZSBub3RpZmllciBvYmplY3QgKHNlbGYpIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlIHBhcmFtZXRlci4KKyAgICAgICAgQHR5cGUgY2FsbGJhY2s6IGNhbGxhYmxlIG9iamVjdCBvciBmdW5jdGlvbgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxvb3AgPSBsb29wCisgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfY2FsbGJhY2sgPSBjYWxsYmFjaworICAgICAgICBOb3RpZmllci5fX2luaXRfXyhzZWxmLCB3YXRjaF9tYW5hZ2VyLCBkZWZhdWx0X3Byb2NfZnVuLCByZWFkX2ZyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCwgdGltZW91dCkKKyAgICAgICAgbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZkLCBzZWxmLmhhbmRsZV9yZWFkKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZkKQorICAgICAgICBOb3RpZmllci5zdG9wKHNlbGYpCisKKyAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYucHJvY2Vzc19ldmVudHMoKQorICAgICAgICBpZiBzZWxmLmhhbmRsZV9yZWFkX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVhZF9jYWxsYmFjayhzZWxmKQorCisKK2NsYXNzIFdhdGNoOgorICAgICIiIgorICAgIFJlcHJlc2VudCBhIHdhdGNoLCBpLmUuIGEgZmlsZSBvciBkaXJlY3RvcnkgYmVpbmcgd2F0Y2hlZC4KKworICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgnd2QnLCAncGF0aCcsICdtYXNrJywgJ3Byb2NfZnVuJywgJ2F1dG9fYWRkJywKKyAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVfZmlsdGVyJywgJ2RpcicpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2QsIHBhdGgsIG1hc2ssIHByb2NfZnVuLCBhdXRvX2FkZCwgZXhjbHVkZV9maWx0ZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6YXRpb25zLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICBAcGFyYW0gcGF0aDogUGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYmVpbmcgd2F0Y2hlZC4KKyAgICAgICAgQHR5cGUgcGF0aDogc3RyCisgICAgICAgIEBwYXJhbSBtYXNrOiBNYXNrLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIHByb2NfZnVuOiBQcm9jZXNzaW5nIGNhbGxhYmxlIG9iamVjdC4KKyAgICAgICAgQHR5cGUgcHJvY19mdW46CisgICAgICAgIEBwYXJhbSBhdXRvX2FkZDogQXV0b21hdGljYWxseSBhZGQgd2F0Y2hlcyBvbiBuZXcgZGlyZWN0b3JpZXMuCisgICAgICAgIEB0eXBlIGF1dG9fYWRkOiBib29sCisgICAgICAgIEBwYXJhbSBleGNsdWRlX2ZpbHRlcjogQm9vbGVhbiBmdW5jdGlvbiwgdXNlZCB0byBleGNsdWRlIG5ldworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGZyb20gYmVpbmcgYXV0b21hdGljYWxseSB3YXRjaGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBXYXRjaE1hbmFnZXIuX19pbml0X18KKyAgICAgICAgQHR5cGUgZXhjbHVkZV9maWx0ZXI6IGNhbGxhYmxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi53ZCA9IHdkCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5tYXNrID0gbWFzaworICAgICAgICBzZWxmLnByb2NfZnVuID0gcHJvY19mdW4KKyAgICAgICAgc2VsZi5hdXRvX2FkZCA9IGF1dG9fYWRkCisgICAgICAgIHNlbGYuZXhjbHVkZV9maWx0ZXIgPSBleGNsdWRlX2ZpbHRlcgorICAgICAgICBzZWxmLmRpciA9IG9zLnBhdGguaXNkaXIoc2VsZi5wYXRoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQHJldHVybjogU3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICBAcnR5cGU6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgcyA9ICcgJy5qb2luKFsnJXMlcyVzJyAlIChvdXRwdXRfZm9ybWF0LmZpZWxkX25hbWUoYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuZmllbGRfdmFsdWUoZ2V0YXR0cihzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKSkpIFwKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLl9fc2xvdHNfXyBpZiBub3QgYXR0ci5zdGFydHN3aXRoKCdfJyldKQorCisgICAgICAgIHMgPSAnJXMlcyAlcyAlcycgJSAob3V0cHV0X2Zvcm1hdC5wdW5jdHVhdGlvbignPCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQuY2xhc3NfbmFtZShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0LnB1bmN0dWF0aW9uKCc+JykpCisgICAgICAgIHJldHVybiBzCisKKworY2xhc3MgRXhjbHVkZUZpbHRlcjoKKyAgICAiIiIKKyAgICBFeGNsdWRlRmlsdGVyIGlzIGFuIGV4Y2x1c2lvbiBmaWx0ZXIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnX2xzdCk6CisgICAgICAgICIiIgorICAgICAgICBFeGFtcGxlczoKKyAgICAgICAgICBlZjEgPSBFeGNsdWRlRmlsdGVyKFsiL2V0Yy9yYy4qIiwgIi9ldGMvaG9zdG5hbWUiXSkKKyAgICAgICAgICBlZjIgPSBFeGNsdWRlRmlsdGVyKCIvbXkvcGF0aC9leGNsdWRlLmxzdCIpCisgICAgICAgICAgV2hlcmUgZXhjbHVkZS5sc3QgY29udGFpbnM6CisgICAgICAgICAgL2V0Yy9yYy4qCisgICAgICAgICAgL2V0Yy9ob3N0bmFtZQorCisgICAgICAgIE5vdGU6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBleGNsdWRlIGEgZmlsZSBpZiBpdHMgZW5jYXBzdWxhdGluZworICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgaXRzZWxmIHdhdGNoZWQuIFNlZSB0aGlzIGlzc3VlIGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3NlYi1tL3B5aW5vdGlmeS9pc3N1ZXMvMzEKKworICAgICAgICBAcGFyYW0gYXJnX2xzdDogaXMgZWl0aGVyIGEgbGlzdCBvZiBwYXR0ZXJucyBvciBhIGZpbGVuYW1lIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zIHdpbGwgYmUgbG9hZGVkLgorICAgICAgICBAdHlwZSBhcmdfbHN0OiBsaXN0IG9mIHN0ciBvciBzdHIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnX2xzdCwgc3RyKToKKyAgICAgICAgICAgIGxzdCA9IHNlbGYuX2xvYWRfcGF0dGVybnNfZnJvbV9maWxlKGFyZ19sc3QpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmdfbHN0LCBsaXN0KToKKyAgICAgICAgICAgIGxzdCA9IGFyZ19sc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisgICAgICAgIHNlbGYuX2xyZWdleCA9IFtdCisgICAgICAgIGZvciByZWdleCBpbiBsc3Q6CisgICAgICAgICAgICBzZWxmLl9scmVnZXguYXBwZW5kKHJlLmNvbXBpbGUocmVnZXgsIHJlLlVOSUNPREUpKQorCisgICAgZGVmIF9sb2FkX3BhdHRlcm5zX2Zyb21fZmlsZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGxzdCA9IFtdCisgICAgICAgIGZpbGVfb2JqID0gZmlsZShmaWxlbmFtZSwgJ3InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlX29iai5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAjIFRyaW0gbGVhZGluZyBhbiB0cmFpbGluZyB3aGl0ZXNwYWNlcworICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgcGF0dGVybiBvciBwYXR0ZXJuLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHBhdHRlcm4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlX29iai5jbG9zZSgpCisgICAgICAgIHJldHVybiBsc3QKKworICAgIGRlZiBfbWF0Y2goc2VsZiwgcmVnZXgsIHBhdGgpOgorICAgICAgICByZXR1cm4gcmVnZXgubWF0Y2gocGF0aCkgaXMgbm90IE5vbmUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIEBwYXJhbSBwYXRoOiBQYXRoIHRvIG1hdGNoIGFnYWluc3QgcHJvdmlkZWQgcmVnZXhwcy4KKyAgICAgICAgQHR5cGUgcGF0aDogc3RyCisgICAgICAgIEByZXR1cm46IFJldHVybiBUcnVlIGlmIHBhdGggaGFzIGJlZW4gbWF0Y2hlZCBhbmQgc2hvdWxkCisgICAgICAgICAgICAgICAgIGJlIGV4Y2x1ZGVkLCBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgIEBydHlwZTogYm9vbAorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHJlZ2V4IGluIHNlbGYuX2xyZWdleDoKKyAgICAgICAgICAgIGlmIHNlbGYuX21hdGNoKHJlZ2V4LCBwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBXYXRjaE1hbmFnZXJFcnJvcihFeGNlcHRpb24pOgorICAgICIiIgorICAgIFdhdGNoTWFuYWdlciBFeGNlcHRpb24uIFJhaXNlZCBvbiBlcnJvciBlbmNvdW50ZXJlZCBvbiB3YXRjaGVzCisgICAgb3BlcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIHdtZCk6CisgICAgICAgICIiIgorICAgICAgICBAcGFyYW0gbXNnOiBFeGNlcHRpb24gc3RyaW5nJ3MgZGVzY3JpcHRpb24uCisgICAgICAgIEB0eXBlIG1zZzogc3RyaW5nCisgICAgICAgIEBwYXJhbSB3bWQ6IFRoaXMgZGljdGlvbmFyeSBjb250YWlucyB0aGUgd2QgYXNzaWduZWQgdG8gcGF0aHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgY2FsbCBmb3Igd2hpY2ggd2F0Y2hlcyB3ZXJlIHN1Y2Nlc3NmdWxseSBhZGRlZC4KKyAgICAgICAgQHR5cGUgd21kOiBkaWN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLndtZCA9IHdtZAorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNnKQorCisKK2NsYXNzIFdhdGNoTWFuYWdlcjoKKyAgICAiIiIKKyAgICBQcm92aWRlIG9wZXJhdGlvbnMgZm9yIHdhdGNoaW5nIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gSXRzIGludGVybmFsCisgICAgZGljdGlvbmFyeSBpcyB1c2VkIHRvIHJlZmVyZW5jZSB3YXRjaGVkIGl0ZW1zLiBXaGVuIHVzZWQgaW5zaWRlCisgICAgdGhyZWFkZWQgY29kZSwgb25lIG11c3QgaW5zdGFuY2lhdGUgYXMgbWFueSBXYXRjaE1hbmFnZXIgaW5zdGFuY2VzIGFzCisgICAgdGhlcmUgYXJlIFRocmVhZGVkTm90aWZpZXIgaW5zdGFuY2VzLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y2x1ZGVfZmlsdGVyPWxhbWJkYSBwYXRoOiBGYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXphdGlvbjogaW5pdCBpbm90aWZ5LCBpbml0IHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4KKyAgICAgICAgUmFpc2UgT1NFcnJvciBpZiBpbml0aWFsaXphdGlvbiBmYWlscywgcmFpc2UgSW5vdGlmeUJpbmRpbmdOb3RGb3VuZEVycm9yCisgICAgICAgIGlmIG5vIGlub3RpZnkgYmluZGluZyB3YXMgZm91bmQgKHRocm91Z2ggY3R5cGVzIG9yIGZyb20gZGlyZWN0IGFjY2VzcyB0bworICAgICAgICBzeXNjYWxscykuCisKKyAgICAgICAgQHBhcmFtIGV4Y2x1ZGVfZmlsdGVyOiBib29sZWFuIGZ1bmN0aW9uLCByZXR1cm5zIFRydWUgaWYgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggbXVzdCBiZSBleGNsdWRlZCBmcm9tIGJlaW5nIHdhdGNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVuaWVudCBmb3IgcHJvdmlkaW5nIGEgY29tbW9uIGV4Y2x1c2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciBmb3IgZXZlcnkgY2FsbCB0byBhZGRfd2F0Y2guCisgICAgICAgIEB0eXBlIGV4Y2x1ZGVfZmlsdGVyOiBjYWxsYWJsZSBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2lnbm9yZV9ldmVudHMgPSBGYWxzZQorICAgICAgICBzZWxmLl9leGNsdWRlX2ZpbHRlciA9IGV4Y2x1ZGVfZmlsdGVyCisgICAgICAgIHNlbGYuX3dtZCA9IHt9ICAjIHdhdGNoIGRpY3Qga2V5OiB3YXRjaCBkZXNjcmlwdG9yLCB2YWx1ZTogd2F0Y2gKKworICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIgPSBJTm90aWZ5V3JhcHBlci5jcmVhdGUoKQorICAgICAgICBpZiBzZWxmLl9pbm90aWZ5X3dyYXBwZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIElub3RpZnlCaW5kaW5nTm90Rm91bmRFcnJvcigpCisKKyAgICAgICAgc2VsZi5fZmQgPSBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuaW5vdGlmeV9pbml0KCkgIyBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgaWYgc2VsZi5fZmQgPCAwOgorICAgICAgICAgICAgZXJyID0gJ0Nhbm5vdCBpbml0aWFsaXplIG5ldyBpbnN0YW5jZSBvZiBpbm90aWZ5LCAlcycKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyICUgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xvc2UgaW5vdGlmeSdzIGZpbGUgZGVzY3JpcHRvciwgdGhpcyBhY3Rpb24gd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgcmVtb3ZlIChpLmUuIHN0b3Agd2F0Y2hpbmcpIGFsbCBpdHMgYXNzb2NpYXRlZCB3YXRjaCBkZXNjcmlwdG9ycy4KKyAgICAgICAgQWZ0ZXIgYSBjYWxsIHRvIHRoaXMgbWV0aG9kIHRoZSBXYXRjaE1hbmFnZXIncyBpbnN0YW5jZSBiZWNvbWUgdXNlbGVzcworICAgICAgICBhbmQgY2Fubm90IGJlIHJldXNlZCwgYSBuZXcgaW5zdGFuY2UgbXVzdCB0aGVuIGJlIGluc3RhbmNpYXRlZC4gSXQKKyAgICAgICAgbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlzIG1ldGhvZCBpbiBmZXcgc2l0dWF0aW9ucyBmb3IgaW5zdGFuY2UgaWYKKyAgICAgICAgc2V2ZXJhbCBpbmRlcGVuZGFudCBXYXRjaE1hbmFnZXIgbXVzdCBiZSBpbnN0YW5jaWF0ZWQgb3IgaWYgYWxsIHdhdGNoZXMKKyAgICAgICAgbXVzdCBiZSByZW1vdmVkIGFuZCBubyBvdGhlciB3YXRjaGVzIG5lZWQgdG8gYmUgYWRkZWQuCisgICAgICAgICIiIgorICAgICAgICBvcy5jbG9zZShzZWxmLl9mZCkKKworICAgIGRlZiBnZXRfZmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYXNzaWduZWQgaW5vdGlmeSdzIGZpbGUgZGVzY3JpcHRvci4KKworICAgICAgICBAcmV0dXJuOiBGaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIEBydHlwZTogaW50CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmQKKworICAgIGRlZiBnZXRfd2F0Y2goc2VsZiwgd2QpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IHdhdGNoIGZyb20gcHJvdmlkZWQgd2F0Y2ggZGVzY3JpcHRvciB3ZC4KKworICAgICAgICBAcGFyYW0gd2Q6IFdhdGNoIGRlc2NyaXB0b3IuCisgICAgICAgIEB0eXBlIHdkOiBpbnQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl93bWQuZ2V0KHdkKQorCisgICAgZGVmIGRlbF93YXRjaChzZWxmLCB3ZCk6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgd2F0Y2ggZW50cnkgYXNzb2NpYXRlZCB0byB3YXRjaCBkZXNjcmlwdG9yIHdkLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX3dtZFt3ZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ0Nhbm5vdCBkZWxldGUgdW5rbm93biB3YXRjaCBkZXNjcmlwdG9yICVzJyAlIHN0cihlcnIpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdhdGNoZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYSByZWZlcmVuY2Ugb24gdGhlIGludGVybmFsIHdhdGNoIG1hbmFnZXIgZGljdGlvbmFyeS4KKworICAgICAgICBAcmV0dXJuOiBJbnRlcm5hbCB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuCisgICAgICAgIEBydHlwZTogZGljdAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dtZAorCisgICAgZGVmIF9fZm9ybWF0X3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBGb3JtYXQgcGF0aCB0byBpdHMgaW50ZXJuYWwgKHN0b3JlZCBpbiB3YXRjaCBtYW5hZ2VyKSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgICMgVW5pY29kZSBzdHJpbmdzIGFyZSBjb252ZXJ0ZWQgYmFjayB0byBzdHJpbmdzLCBiZWNhdXNlIGl0IHNlZW1zCisgICAgICAgICMgdGhhdCBpbm90aWZ5X2FkZF93YXRjaCBmcm9tIGN0eXBlcyBkb2VzIG5vdCB3b3JrIHdlbGwgd2hlbgorICAgICAgICAjIGl0IHJlY2VpdmVzIGFuIGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIgaW5zdGFuY2UgYXMgYXJndW1lbnQuCisgICAgICAgICMgVGhlcmVmb3JlIGV2ZW4gd2QgYXJlIGluZGV4ZWQgd2l0aCBieXRlcyBzdHJpbmcgYW5kIG5vdCB3aXRoCisgICAgICAgICMgdW5pY29kZSBwYXRocy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCB1bmljb2RlKToKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisKKyAgICBkZWYgX19hZGRfd2F0Y2goc2VsZiwgcGF0aCwgbWFzaywgcHJvY19mdW4sIGF1dG9fYWRkLCBleGNsdWRlX2ZpbHRlcik6CisgICAgICAgICIiIgorICAgICAgICBBZGQgYSB3YXRjaCBvbiBwYXRoLCBidWlsZCBhIFdhdGNoIG9iamVjdCBhbmQgaW5zZXJ0IGl0IGluIHRoZQorICAgICAgICB3YXRjaCBtYW5hZ2VyIGRpY3Rpb25hcnkuIFJldHVybiB0aGUgd2QgdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gc2VsZi5fX2Zvcm1hdF9wYXRoKHBhdGgpCisgICAgICAgIGlmIGF1dG9fYWRkIGFuZCBub3QgbWFzayAmIElOX0NSRUFURToKKyAgICAgICAgICAgIG1hc2sgfD0gSU5fQ1JFQVRFCisgICAgICAgIHdkID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLmlub3RpZnlfYWRkX3dhdGNoKHNlbGYuX2ZkLCBwYXRoLCBtYXNrKQorICAgICAgICBpZiB3ZCA8IDA6CisgICAgICAgICAgICByZXR1cm4gd2QKKyAgICAgICAgd2F0Y2ggPSBXYXRjaCh3ZD13ZCwgcGF0aD1wYXRoLCBtYXNrPW1hc2ssIHByb2NfZnVuPXByb2NfZnVuLAorICAgICAgICAgICAgICAgICAgICAgIGF1dG9fYWRkPWF1dG9fYWRkLCBleGNsdWRlX2ZpbHRlcj1leGNsdWRlX2ZpbHRlcikKKyAgICAgICAgc2VsZi5fd21kW3dkXSA9IHdhdGNoCisgICAgICAgIGxvZy5kZWJ1ZygnTmV3ICVzJywgd2F0Y2gpCisgICAgICAgIHJldHVybiB3ZAorCisgICAgZGVmIF9fZ2xvYihzZWxmLCBwYXRoLCBkb19nbG9iKToKKyAgICAgICAgaWYgZG9fZ2xvYjoKKyAgICAgICAgICAgIHJldHVybiBnbG9iKHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW3BhdGhdCisKKyAgICBkZWYgYWRkX3dhdGNoKHNlbGYsIHBhdGgsIG1hc2ssIHByb2NfZnVuPU5vbmUsIHJlYz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgIGF1dG9fYWRkPUZhbHNlLCBkb19nbG9iPUZhbHNlLCBxdWlldD1UcnVlLAorICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXI9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBBZGQgd2F0Y2gocykgb24gdGhlIHByb3ZpZGVkIHxwYXRofChzKSB3aXRoIGFzc29jaWF0ZWQgfG1hc2t8IGZsYWcKKyAgICAgICAgdmFsdWUgYW5kIG9wdGlvbmFsbHkgd2l0aCBhIHByb2Nlc3NpbmcgfHByb2NfZnVufCBmdW5jdGlvbiBhbmQKKyAgICAgICAgcmVjdXJzaXZlIGZsYWcgfHJlY3wgc2V0IHRvIFRydWUuCisgICAgICAgIElkZWFsbHkgfHBhdGh8IGNvbXBvbmVudHMgc2hvdWxkIG5vdCBiZSB1bmljb2RlIG9iamVjdHMuIE5vdGUgdGhhdAorICAgICAgICBhbHRob3VnaCB1bmljb2RlIHBhdGhzIGFyZSBhY2NlcHRlZCB0aGVyZSBhcmUgY29udmVydGVkIHRvIGJ5dGUKKyAgICAgICAgc3RyaW5ncyBiZWZvcmUgYSB3YXRjaCBpcyBwdXQgb24gdGhhdCBwYXRoLiBUaGUgZW5jb2RpbmcgdXNlZCBmb3IKKyAgICAgICAgY29udmVydGluZyB0aGUgdW5pY29kZSBvYmplY3QgaXMgZ2l2ZW4gYnkgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLgorICAgICAgICBJZiB8cGF0aHwgc2kgYWxyZWFkeSB3YXRjaGVkIGl0IGlzIGlnbm9yZWQsIGJ1dCBpZiBpdCBpcyBjYWxsZWQgd2l0aAorICAgICAgICBvcHRpb24gcmVjPVRydWUgYSB3YXRjaCBpcyBwdXQgb24gZWFjaCBvbmUgb2YgaXRzIG5vdC13YXRjaGVkCisgICAgICAgIHN1YmRpcmVjdG9yeS4KKworICAgICAgICBAcGFyYW0gcGF0aDogUGF0aCB0byB3YXRjaCwgdGhlIHBhdGggY2FuIGVpdGhlciBiZSBhIGZpbGUgb3IgYQorICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LiBBbHNvIGFjY2VwdHMgYSBzZXF1ZW5jZSAobGlzdCkgb2YgcGF0aHMuCisgICAgICAgIEB0eXBlIHBhdGg6IHN0cmluZyBvciBsaXN0IG9mIHN0cmluZ3MKKyAgICAgICAgQHBhcmFtIG1hc2s6IEJpdG1hc2sgb2YgZXZlbnRzLgorICAgICAgICBAdHlwZSBtYXNrOiBpbnQKKyAgICAgICAgQHBhcmFtIHByb2NfZnVuOiBQcm9jZXNzaW5nIG9iamVjdC4KKyAgICAgICAgQHR5cGUgcHJvY19mdW46IGZ1bmN0aW9uIG9yIFByb2Nlc3NFdmVudCBpbnN0YW5jZSBvciBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgb25lIG9mIGl0cyBzdWJjbGFzc2VzIG9yIGNhbGxhYmxlIG9iamVjdC4KKyAgICAgICAgQHBhcmFtIHJlYzogUmVjdXJzaXZlbHkgYWRkIHdhdGNoZXMgZnJvbSBwYXRoIG9uIGFsbCBpdHMKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMsIHNldCB0byBGYWxzZSBieSBkZWZhdWx0IChkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3Mgc3ltbGlua3MgaW4gYW55IGNhc2UpLgorICAgICAgICBAdHlwZSByZWM6IGJvb2wKKyAgICAgICAgQHBhcmFtIGF1dG9fYWRkOiBBdXRvbWF0aWNhbGx5IGFkZCB3YXRjaGVzIG9uIG5ld2x5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB3YXRjaGVkIHBhcmVudCB8cGF0aHwgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgIElmIHxhdXRvX2FkZHwgaXMgVHJ1ZSwgSU5fQ1JFQVRFIGlzIG9yZWQgd2l0aCB8bWFza3wKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSB3YXRjaCBpcyBhZGRlZC4KKyAgICAgICAgQHR5cGUgYXV0b19hZGQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIGRvX2dsb2I6IERvIGdsb2JiaW5nIG9uIHBhdGhuYW1lIChzZWUgc3RhbmRhcmQgZ2xvYmJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMpLgorICAgICAgICBAdHlwZSBkb19nbG9iOiBib29sCisgICAgICAgIEBwYXJhbSBxdWlldDogaWYgRmFsc2UgcmFpc2VzIGEgV2F0Y2hNYW5hZ2VyRXJyb3IgZXhjZXB0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuIFNlZSBleGFtcGxlIG5vdF9xdWlldC5weS4KKyAgICAgICAgQHR5cGUgcXVpZXQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIGV4Y2x1ZGVfZmlsdGVyOiBwcmVkaWNhdGUgKGJvb2xlYW4gZnVuY3Rpb24pLCB3aGljaCByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgY3VycmVudCBwYXRoIG11c3QgYmUgZXhjbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGJlaW5nIHdhdGNoZWQuIFRoaXMgYXJndW1lbnQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSBvdmVyIGV4Y2x1ZGVfZmlsdGVyIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjbGFzcycgY29uc3RydWN0b3IuCisgICAgICAgIEB0eXBlIGV4Y2x1ZGVfZmlsdGVyOiBjYWxsYWJsZSBvYmplY3QKKyAgICAgICAgQHJldHVybjogZGljdCBvZiBwYXRocyBhc3NvY2lhdGVkIHRvIHdhdGNoIGRlc2NyaXB0b3JzLiBBIHdkIHZhbHVlCisgICAgICAgICAgICAgICAgIGlzIHBvc2l0aXZlIGlmIHRoZSB3YXRjaCB3YXMgYWRkZWQgc3VjZXNzZnVsbHksCisgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgbmVnYXRpdmUuIElmIHRoZSBwYXRoIHdhcyBpbnZhbGlkCisgICAgICAgICAgICAgICAgIG9yIHdhcyBhbHJlYWR5IHdhdGNoZWQgaXQgaXMgbm90IGluY2x1ZGVkIGludG8gdGhpcyByZXR1cm5lZAorICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LgorICAgICAgICBAcnR5cGU6IGRpY3Qgb2Yge3N0cjogaW50fQorICAgICAgICAiIiIKKyAgICAgICAgcmV0XyA9IHt9ICMgcmV0dXJuIHtwYXRoOiB3ZCwgLi4ufQorCisgICAgICAgIGlmIGV4Y2x1ZGVfZmlsdGVyIGlzIE5vbmU6CisgICAgICAgICAgICBleGNsdWRlX2ZpbHRlciA9IHNlbGYuX2V4Y2x1ZGVfZmlsdGVyCisKKyAgICAgICAgIyBub3JtYWxpemUgYXJncyBhcyBsaXN0IGVsZW1lbnRzCisgICAgICAgIGZvciBucGF0aCBpbiBzZWxmLl9fZm9ybWF0X3BhcmFtKHBhdGgpOgorICAgICAgICAgICAgIyB1bml4IHBhdGhuYW1lIHBhdHRlcm4gZXhwYW5zaW9uCisgICAgICAgICAgICBmb3IgYXBhdGggaW4gc2VsZi5fX2dsb2IobnBhdGgsIGRvX2dsb2IpOgorICAgICAgICAgICAgICAgICMgcmVjdXJzaXZlbHkgbGlzdCBzdWJkaXJzIGFjY29yZGluZyB0byByZWMgcGFyYW0KKyAgICAgICAgICAgICAgICBmb3IgcnBhdGggaW4gc2VsZi5fX3dhbGtfcmVjKGFwYXRoLCByZWMpOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXhjbHVkZV9maWx0ZXIocnBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgd2QgPSByZXRfW3JwYXRoXSA9IHNlbGYuX19hZGRfd2F0Y2gocnBhdGgsIG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2Z1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9fYWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB3ZCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gKCdhZGRfd2F0Y2g6IGNhbm5vdCB3YXRjaCAlcyBXRD0lZCwgJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJwYXRoLCB3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFdhdGNoTWFuYWdlckVycm9yKGVyciwgcmV0XykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTGV0J3Mgc2F5IC0yIG1lYW5zICdleHBsaWNpdGVseSBleGNsdWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBmcm9tIHdhdGNoaW5nJy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldF9bcnBhdGhdID0gLTIKKyAgICAgICAgcmV0dXJuIHJldF8KKworICAgIGRlZiBfX2dldF9zdWJfcmVjKHNlbGYsIGxwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBldmVyeSB3ZCBmcm9tIHNlbGYuX3dtZCBpZiBpdHMgcGF0aCBpcyB1bmRlciB0aGUgcGF0aCBvZgorICAgICAgICBvbmUgKGF0IGxlYXN0KSBvZiB0aG9zZSBpbiBscGF0aC4gRG9lc24ndCBmb2xsb3cgc3ltbGlua3MuCisKKyAgICAgICAgQHBhcmFtIGxwYXRoOiBsaXN0IG9mIHdhdGNoIGRlc2NyaXB0b3IKKyAgICAgICAgQHR5cGUgbHBhdGg6IGxpc3Qgb2YgaW50CisgICAgICAgIEByZXR1cm46IGxpc3Qgb2Ygd2F0Y2ggZGVzY3JpcHRvcgorICAgICAgICBAcnR5cGU6IGxpc3Qgb2YgaW50CisgICAgICAgICIiIgorICAgICAgICBmb3IgZCBpbiBscGF0aDoKKyAgICAgICAgICAgIHJvb3QgPSBzZWxmLmdldF9wYXRoKGQpCisgICAgICAgICAgICBpZiByb290IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgYWx3YXlzIGtlZXAgcm9vdAorICAgICAgICAgICAgICAgIHlpZWxkIGQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBpZiBpbnZhbGlkCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBub3RoaW5nIGVsc2UgdG8gZXhwZWN0CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihyb290KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIG5vcm1hbGl6YXRpb24KKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3QpCisgICAgICAgICAgICAjIHJlY3Vyc2lvbgorICAgICAgICAgICAgbGVuZCA9IGxlbihyb290KQorICAgICAgICAgICAgZm9yIGl3ZCBpbiBzZWxmLl93bWQuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBjdXIgPSBpd2RbMV0ucGF0aAorICAgICAgICAgICAgICAgIHByZWYgPSBvcy5wYXRoLmNvbW1vbnByZWZpeChbcm9vdCwgY3VyXSkKKyAgICAgICAgICAgICAgICBpZiByb290ID09IG9zLnNlcCBvciAobGVuKHByZWYpID09IGxlbmQgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGN1cikgPiBsZW5kIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltsZW5kXSA9PSBvcy5zZXApOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBpd2RbMV0ud2QKKworICAgIGRlZiB1cGRhdGVfd2F0Y2goc2VsZiwgd2QsIG1hc2s9Tm9uZSwgcHJvY19mdW49Tm9uZSwgcmVjPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9RmFsc2UsIHF1aWV0PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgVXBkYXRlIGV4aXN0aW5nIHdhdGNoIGRlc2NyaXB0b3JzIHx3ZHwuIFRoZSB8bWFza3wgdmFsdWUsIHRoZQorICAgICAgICBwcm9jZXNzaW5nIG9iamVjdCB8cHJvY19mdW58LCB0aGUgcmVjdXJzaXZlIHBhcmFtIHxyZWN8IGFuZCB0aGUKKyAgICAgICAgfGF1dG9fYWRkfCBhbmQgfHF1aWV0fCBmbGFncyBjYW4gYWxsIGJlIHVwZGF0ZWQuCisKKyAgICAgICAgQHBhcmFtIHdkOiBXYXRjaCBEZXNjcmlwdG9yIHRvIHVwZGF0ZS4gQWxzbyBhY2NlcHRzIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgIHdhdGNoIGRlc2NyaXB0b3JzLgorICAgICAgICBAdHlwZSB3ZDogaW50IG9yIGxpc3Qgb2YgaW50CisgICAgICAgIEBwYXJhbSBtYXNrOiBPcHRpb25hbCBuZXcgYml0bWFzayBvZiBldmVudHMuCisgICAgICAgIEB0eXBlIG1hc2s6IGludAorICAgICAgICBAcGFyYW0gcHJvY19mdW46IE9wdGlvbmFsIG5ldyBwcm9jZXNzaW5nIGZ1bmN0aW9uLgorICAgICAgICBAdHlwZSBwcm9jX2Z1bjogZnVuY3Rpb24gb3IgUHJvY2Vzc0V2ZW50IGluc3RhbmNlIG9yIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBvbmUgb2YgaXRzIHN1YmNsYXNzZXMgb3IgY2FsbGFibGUgb2JqZWN0LgorICAgICAgICBAcGFyYW0gcmVjOiBPcHRpb25hbGx5IGFkZHMgd2F0Y2hlcyByZWN1cnNpdmVseSBvbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgY29udGFpbmVkIGludG8gfHdkfCBkaXJlY3RvcnkuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcGFyYW0gYXV0b19hZGQ6IEF1dG9tYXRpY2FsbHkgYWRkcyB3YXRjaGVzIG9uIG5ld2x5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGUgd2F0Y2gncyBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gfHdkfC4KKyAgICAgICAgICAgICAgICAgICAgICAgICBJZiB8YXV0b19hZGR8IGlzIFRydWUsIElOX0NSRUFURSBpcyBvcmVkIHdpdGggfG1hc2t8CisgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgd2F0Y2ggaXMgdXBkYXRlZC4KKyAgICAgICAgQHR5cGUgYXV0b19hZGQ6IGJvb2wKKyAgICAgICAgQHBhcmFtIHF1aWV0OiBJZiBGYWxzZSByYWlzZXMgYSBXYXRjaE1hbmFnZXJFcnJvciBleGNlcHRpb24gb24KKyAgICAgICAgICAgICAgICAgICAgICBlcnJvci4gU2VlIGV4YW1wbGUgbm90X3F1aWV0LnB5CisgICAgICAgIEB0eXBlIHF1aWV0OiBib29sCisgICAgICAgIEByZXR1cm46IGRpY3Qgb2Ygd2F0Y2ggZGVzY3JpcHRvcnMgYXNzb2NpYXRlZCB0byBib29sZWFucyB2YWx1ZXMuCisgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgd2QgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICAgICAgIHVwZGF0ZWQsIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IG9mIHtpbnQ6IGJvb2x9CisgICAgICAgICIiIgorICAgICAgICBsd2QgPSBzZWxmLl9fZm9ybWF0X3BhcmFtKHdkKQorICAgICAgICBpZiByZWM6CisgICAgICAgICAgICBsd2QgPSBzZWxmLl9fZ2V0X3N1Yl9yZWMobHdkKQorCisgICAgICAgIHJldF8gPSB7fSAgIyByZXR1cm4ge3dkOiBib29sLCAuLi59CisgICAgICAgIGZvciBhd2QgaW4gbHdkOgorICAgICAgICAgICAgYXBhdGggPSBzZWxmLmdldF9wYXRoKGF3ZCkKKyAgICAgICAgICAgIGlmIG5vdCBhcGF0aCBvciBhd2QgPCAwOgorICAgICAgICAgICAgICAgIGVyciA9ICd1cGRhdGVfd2F0Y2g6IGludmFsaWQgV0Q9JWQnICUgYXdkCisgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlcnIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmFpc2UgV2F0Y2hNYW5hZ2VyRXJyb3IoZXJyLCByZXRfKQorCisgICAgICAgICAgICBpZiBtYXNrOgorICAgICAgICAgICAgICAgIHdkXyA9IHNlbGYuX2lub3RpZnlfd3JhcHBlci5pbm90aWZ5X2FkZF93YXRjaChzZWxmLl9mZCwgYXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spCisgICAgICAgICAgICAgICAgaWYgd2RfIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0X1thd2RdID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gKCd1cGRhdGVfd2F0Y2g6IGNhbm5vdCB1cGRhdGUgJXMgV0Q9JWQsICVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBhdGgsIHdkXywgc2VsZi5faW5vdGlmeV93cmFwcGVyLnN0cl9lcnJubygpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgV2F0Y2hNYW5hZ2VyRXJyb3IoZXJyLCByZXRfKQorCisgICAgICAgICAgICAgICAgYXNzZXJ0KGF3ZCA9PSB3ZF8pCisKKyAgICAgICAgICAgIGlmIHByb2NfZnVuIG9yIGF1dG9fYWRkOgorICAgICAgICAgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dtZFthd2RdCisKKyAgICAgICAgICAgIGlmIHByb2NfZnVuOgorICAgICAgICAgICAgICAgIHdhdGNoXy5wcm9jX2Z1biA9IHByb2NfZnVuCisKKyAgICAgICAgICAgIGlmIGF1dG9fYWRkOgorICAgICAgICAgICAgICAgIHdhdGNoXy5hdXRvX2FkZCA9IGF1dG9fYWRkCisKKyAgICAgICAgICAgIHJldF9bYXdkXSA9IFRydWUKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnVXBkYXRlZCB3YXRjaCAtICVzJywgc2VsZi5fd21kW2F3ZF0pCisgICAgICAgIHJldHVybiByZXRfCisKKyAgICBkZWYgX19mb3JtYXRfcGFyYW0oc2VsZiwgcGFyYW0pOgorICAgICAgICAiIiIKKyAgICAgICAgQHBhcmFtIHBhcmFtOiBQYXJhbWV0ZXIuCisgICAgICAgIEB0eXBlIHBhcmFtOiBzdHJpbmcgb3IgaW50CisgICAgICAgIEByZXR1cm46IHdyYXAgcGFyYW0uCisgICAgICAgIEBydHlwZTogbGlzdCBvZiB0eXBlKHBhcmFtKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbSwgbGlzdCk6CisgICAgICAgICAgICBmb3IgcF8gaW4gcGFyYW06CisgICAgICAgICAgICAgICAgeWllbGQgcF8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHBhcmFtCisKKyAgICBkZWYgZ2V0X3dkKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgd2F0Y2ggZGVzY3JpcHRvciBhc3NvY2lhdGVkIHRvIHBhdGguIFRoaXMgbWV0aG9kCisgICAgICAgIHByZXNlbnRzIGEgcHJvaGliaXRpdmUgY29zdCwgYWx3YXlzIHByZWZlciB0byBrZWVwIHRoZSBXRAorICAgICAgICByZXR1cm5lZCBieSBhZGRfd2F0Y2goKS4gSWYgdGhlIHBhdGggaXMgdW5rbm93biBpdCByZXR1cm5zIE5vbmUuCisKKyAgICAgICAgQHBhcmFtIHBhdGg6IFBhdGguCisgICAgICAgIEB0eXBlIHBhdGg6IHN0cgorICAgICAgICBAcmV0dXJuOiBXRCBvciBOb25lLgorICAgICAgICBAcnR5cGU6IGludCBvciBOb25lCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gc2VsZi5fX2Zvcm1hdF9wYXRoKHBhdGgpCisgICAgICAgIGZvciBpd2QgaW4gc2VsZi5fd21kLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpd2RbMV0ucGF0aCA9PSBwYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBpd2RbMF0KKworICAgIGRlZiBnZXRfcGF0aChzZWxmLCB3ZCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBwYXRoIGFzc29jaWF0ZWQgdG8gV0QsIGlmIFdEIGlzIHVua25vd24gaXQgcmV0dXJucyBOb25lLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggZGVzY3JpcHRvci4KKyAgICAgICAgQHR5cGUgd2Q6IGludAorICAgICAgICBAcmV0dXJuOiBQYXRoIG9yIE5vbmUuCisgICAgICAgIEBydHlwZTogc3RyaW5nIG9yIE5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIHdhdGNoXyA9IHNlbGYuX3dtZC5nZXQod2QpCisgICAgICAgIGlmIHdhdGNoXyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB3YXRjaF8ucGF0aAorCisgICAgZGVmIF9fd2Fsa19yZWMoc2VsZiwgdG9wLCByZWMpOgorICAgICAgICAiIiIKKyAgICAgICAgWWllbGRzIGVhY2ggc3ViZGlyZWN0b3JpZXMgb2YgdG9wLCBkb2Vzbid0IGZvbGxvdyBzeW1saW5rcy4KKyAgICAgICAgSWYgcmVjIGlzIGZhbHNlLCBvbmx5IHlpZWxkIHRvcC4KKworICAgICAgICBAcGFyYW0gdG9wOiByb290IGRpcmVjdG9yeS4KKyAgICAgICAgQHR5cGUgdG9wOiBzdHJpbmcKKyAgICAgICAgQHBhcmFtIHJlYzogcmVjdXJzaXZlIGZsYWcuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcmV0dXJuOiBwYXRoIG9mIG9uZSBzdWJkaXJlY3RvcnkuCisgICAgICAgIEBydHlwZTogc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcmVjIG9yIG9zLnBhdGguaXNsaW5rKHRvcCkgb3Igbm90IG9zLnBhdGguaXNkaXIodG9wKToKKyAgICAgICAgICAgIHlpZWxkIHRvcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodG9wKToKKyAgICAgICAgICAgICAgICB5aWVsZCByb290CisKKyAgICBkZWYgcm1fd2F0Y2goc2VsZiwgd2QsIHJlYz1GYWxzZSwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmVzIHdhdGNoKHMpLgorCisgICAgICAgIEBwYXJhbSB3ZDogV2F0Y2ggRGVzY3JpcHRvciBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gdW53YXRjaC4KKyAgICAgICAgICAgICAgICAgICBBbHNvIGFjY2VwdHMgYSBsaXN0IG9mIFdEcy4KKyAgICAgICAgQHR5cGUgd2Q6IGludCBvciBsaXN0IG9mIGludC4KKyAgICAgICAgQHBhcmFtIHJlYzogUmVjdXJzaXZlbHkgcmVtb3ZlcyB3YXRjaGVzIG9uIGV2ZXJ5IGFscmVhZHkgd2F0Y2hlZAorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3RvcmllcyBhbmQgc3ViZmlsZXMuCisgICAgICAgIEB0eXBlIHJlYzogYm9vbAorICAgICAgICBAcGFyYW0gcXVpZXQ6IElmIEZhbHNlIHJhaXNlcyBhIFdhdGNoTWFuYWdlckVycm9yIGV4Y2VwdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgIGVycm9yLiBTZWUgZXhhbXBsZSBub3RfcXVpZXQucHkKKyAgICAgICAgQHR5cGUgcXVpZXQ6IGJvb2wKKyAgICAgICAgQHJldHVybjogZGljdCBvZiB3YXRjaCBkZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHRvIGJvb2xlYW5zIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyB3ZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICAgcmVtb3ZlZCwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICBAcnR5cGU6IGRpY3Qgb2Yge2ludDogYm9vbH0KKyAgICAgICAgIiIiCisgICAgICAgIGx3ZCA9IHNlbGYuX19mb3JtYXRfcGFyYW0od2QpCisgICAgICAgIGlmIHJlYzoKKyAgICAgICAgICAgIGx3ZCA9IHNlbGYuX19nZXRfc3ViX3JlYyhsd2QpCisKKyAgICAgICAgcmV0XyA9IHt9ICAjIHJldHVybiB7d2Q6IGJvb2wsIC4uLn0KKyAgICAgICAgZm9yIGF3ZCBpbiBsd2Q6CisgICAgICAgICAgICAjIHJlbW92ZSB3YXRjaAorICAgICAgICAgICAgd2RfID0gc2VsZi5faW5vdGlmeV93cmFwcGVyLmlub3RpZnlfcm1fd2F0Y2goc2VsZi5fZmQsIGF3ZCkKKyAgICAgICAgICAgIGlmIHdkXyA8IDA6CisgICAgICAgICAgICAgICAgcmV0X1thd2RdID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlcnIgPSAoJ3JtX3dhdGNoOiBjYW5ub3QgcmVtb3ZlIFdEPSVkLCAlcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXdkLCBzZWxmLl9pbm90aWZ5X3dyYXBwZXIuc3RyX2Vycm5vKCkpKQorICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZXJyKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJhaXNlIFdhdGNoTWFuYWdlckVycm9yKGVyciwgcmV0XykKKworICAgICAgICAgICAgIyBSZW1vdmUgd2F0Y2ggZnJvbSBvdXIgZGljdGlvbmFyeQorICAgICAgICAgICAgaWYgYXdkIGluIHNlbGYuX3dtZDoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fd21kW2F3ZF0KKyAgICAgICAgICAgIHJldF9bYXdkXSA9IFRydWUKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygnV2F0Y2ggV0Q9JWQgKCVzKSByZW1vdmVkJywgYXdkLCBzZWxmLmdldF9wYXRoKGF3ZCkpCisgICAgICAgIHJldHVybiByZXRfCisKKworICAgIGRlZiB3YXRjaF90cmFuc2llbnRfZmlsZShzZWxmLCBmaWxlbmFtZSwgbWFzaywgcHJvY19jbGFzcyk6CisgICAgICAgICIiIgorICAgICAgICBXYXRjaCBhIHRyYW5zaWVudCBmaWxlLCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGRlbGV0ZWQgZnJlcXVlbnRseQorICAgICAgICBvdmVyIHRpbWUgKGUuZy4gcGlkIGZpbGUpLgorCisgICAgICAgIEBhdHRlbnRpb246IEN1cnJlbnRseSB1bmRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGl0IGlzIG5vdAorICAgICAgICBwb3NzaWJsZSB0byBjb3JyZWN0bHkgd2F0Y2ggdGhlIGV2ZW50cyB0cmlnZ2VyZWQgaW50byB0aGUgc2FtZQorICAgICAgICBiYXNlIGRpcmVjdG9yeSB0aGFuIHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXMgbG9jYXRlZCB0aGlzIHdhdGNoZWQKKyAgICAgICAgdHJhbnNpZW50IGZpbGUuIEZvciBpbnN0YW5jZSBpdCB3b3VsZCBiZSB3cm9uZyB0byBtYWtlIHRoZXNlCisgICAgICAgIHR3byBzdWNjZXNzaXZlIGNhbGxzOiB3bS53YXRjaF90cmFuc2llbnRfZmlsZSgnL3Zhci9ydW4vZm9vLnBpZCcsIC4uLikKKyAgICAgICAgYW5kIHdtLmFkZF93YXRjaCgnL3Zhci9ydW4vJywgLi4uKQorCisgICAgICAgIEBwYXJhbSBmaWxlbmFtZTogRmlsZW5hbWUuCisgICAgICAgIEB0eXBlIGZpbGVuYW1lOiBzdHJpbmcKKyAgICAgICAgQHBhcmFtIG1hc2s6IEJpdG1hc2sgb2YgZXZlbnRzLCBzaG91bGQgY29udGFpbiBJTl9DUkVBVEUgYW5kIElOX0RFTEVURS4KKyAgICAgICAgQHR5cGUgbWFzazogaW50CisgICAgICAgIEBwYXJhbSBwcm9jX2NsYXNzOiBQcm9jZXNzRXZlbnQgKG9yIG9mIG9uZSBvZiBpdHMgc3ViY2xhc3MpLCBiZXdhcmUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGluZyBhIFByb2Nlc3NFdmVudCdzIGluc3RhbmNlIGFzIGFyZ3VtZW50IGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5pdF9fLCBzZWUgdHJhbnNpZW50X2ZpbGUucHkgZXhhbXBsZSBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy4KKyAgICAgICAgQHR5cGUgcHJvY19jbGFzczogUHJvY2Vzc0V2ZW50J3MgaW5zdGFuY2Ugb3Igb2Ygb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorICAgICAgICBAcmV0dXJuOiBTYW1lIGFzIGFkZF93YXRjaCgpLgorICAgICAgICBAcnR5cGU6IFNhbWUgYXMgYWRkX3dhdGNoKCkuCisgICAgICAgICIiIgorICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKQorICAgICAgICBpZiBkaXJuYW1lID09ICcnOgorICAgICAgICAgICAgcmV0dXJuIHt9ICAjIE1haW50YWlucyBjb2hlcmVuY2Ugd2l0aCBhZGRfd2F0Y2goKQorICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCisgICAgICAgICMgQXNzdW1pbmcgd2UgYXJlIHdhdGNoaW5nIGF0IGxlYXN0IGZvciBJTl9DUkVBVEUgYW5kIElOX0RFTEVURQorICAgICAgICBtYXNrIHw9IElOX0NSRUFURSB8IElOX0RFTEVURQorCisgICAgICAgIGRlZiBjbXBfbmFtZShldmVudCk6CisgICAgICAgICAgICBpZiBnZXRhdHRyKGV2ZW50LCAnbmFtZScpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gYmFzZW5hbWUgPT0gZXZlbnQubmFtZQorICAgICAgICByZXR1cm4gc2VsZi5hZGRfd2F0Y2goZGlybmFtZSwgbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfZnVuPXByb2NfY2xhc3MoQ2hhaW5JZlRydWUoZnVuYz1jbXBfbmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19hZGQ9RmFsc2UsIGRvX2dsb2I9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcj1sYW1iZGEgcGF0aDogRmFsc2UpCisKKyAgICBkZWYgZ2V0X2lnbm9yZV9ldmVudHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pZ25vcmVfZXZlbnRzCisKKyAgICBkZWYgc2V0X2lnbm9yZV9ldmVudHMoc2VsZiwgbnZhbCk6CisgICAgICAgIHNlbGYuX2lnbm9yZV9ldmVudHMgPSBudmFsCisKKyAgICBpZ25vcmVfZXZlbnRzID0gcHJvcGVydHkoZ2V0X2lnbm9yZV9ldmVudHMsIHNldF9pZ25vcmVfZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZSB3YXRjaCBtYW5hZ2VyIGlnbm9yaW5nIG5ldyBldmVudHMuIikKKworCisKK2NsYXNzIFJhd091dHB1dEZvcm1hdDoKKyAgICAiIiIKKyAgICBGb3JtYXQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBzZWxmLmZvcm1hdCA9IGZvcm1hdCBvciB7fQorCisgICAgZGVmIHNpbXBsZShzZWxmLCBzLCBhdHRyaWJ1dGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICAgICAgcyA9IHN0cihzKQorICAgICAgICByZXR1cm4gKHNlbGYuZm9ybWF0LmdldChhdHRyaWJ1dGUsICcnKSArIHMgKworICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0LmdldCgnbm9ybWFsJywgJycpKQorCisgICAgZGVmIHB1bmN0dWF0aW9uKHNlbGYsIHMpOgorICAgICAgICAiIiJQdW5jdHVhdGlvbiBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2ltcGxlKHMsICdub3JtYWwnKQorCisgICAgZGVmIGZpZWxkX3ZhbHVlKHNlbGYsIHMpOgorICAgICAgICAiIiJGaWVsZCB2YWx1ZSBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2ltcGxlKHMsICdwdXJwbGUnKQorCisgICAgZGVmIGZpZWxkX25hbWUoc2VsZiwgcyk6CisgICAgICAgICIiIkZpZWxkIG5hbWUgY29sb3IuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNpbXBsZShzLCAnYmx1ZScpCisKKyAgICBkZWYgY2xhc3NfbmFtZShzZWxmLCBzKToKKyAgICAgICAgIiIiQ2xhc3MgbmFtZSBjb2xvci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0LmdldCgncmVkJywgJycpICsgc2VsZi5zaW1wbGUocywgJ2JvbGQnKQorCitvdXRwdXRfZm9ybWF0ID0gUmF3T3V0cHV0Rm9ybWF0KCkKKworY2xhc3MgQ29sb3JlZE91dHB1dEZvcm1hdChSYXdPdXRwdXRGb3JtYXQpOgorICAgICIiIgorICAgIEZvcm1hdCBjb2xvcmVkIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBmID0geydub3JtYWwnOiAnXDAzM1swbScsCisgICAgICAgICAgICAgJ2JsYWNrJzogJ1wwMzNbMzBtJywKKyAgICAgICAgICAgICAncmVkJzogJ1wwMzNbMzFtJywKKyAgICAgICAgICAgICAnZ3JlZW4nOiAnXDAzM1szMm0nLAorICAgICAgICAgICAgICd5ZWxsb3cnOiAnXDAzM1szM20nLAorICAgICAgICAgICAgICdibHVlJzogJ1wwMzNbMzRtJywKKyAgICAgICAgICAgICAncHVycGxlJzogJ1wwMzNbMzVtJywKKyAgICAgICAgICAgICAnY3lhbic6ICdcMDMzWzM2bScsCisgICAgICAgICAgICAgJ2JvbGQnOiAnXDAzM1sxbScsCisgICAgICAgICAgICAgJ3VsaW5lJzogJ1wwMzNbNG0nLAorICAgICAgICAgICAgICdibGluayc6ICdcMDMzWzVtJywKKyAgICAgICAgICAgICAnaW52ZXJ0JzogJ1wwMzNbN20nfQorICAgICAgICBSYXdPdXRwdXRGb3JtYXQuX19pbml0X18oc2VsZiwgZikKKworCitkZWYgY29tcGF0aWJpbGl0eV9tb2RlKCk6CisgICAgIiIiCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gdHVybiBvbiB0aGUgY29tcGF0aWJpbGl0eSBtb2RlLiBUaGUgY29tcGF0aWJpbGl0eQorICAgIG1vZGUgaXMgdXNlZCB0byBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBQeWlub3RpZnkgMC43LjEgKG9yIG9sZGVyKQorICAgIHByb2dyYW1zLiBUaGUgY29tcGF0aWJpbGl0eSBtb2RlIHByb3ZpZGVzIGFkZGl0aW9uYWwgdmFyaWFibGVzICdpc19kaXInLAorICAgICdldmVudF9uYW1lJywgJ0V2ZW50c0NvZGVzLklOXyonIGFuZCAnRXZlbnRzQ29kZXMuQUxMX0VWRU5UUycgYXMKKyAgICBQeWlub3RpZnkgMC43LjEgcHJvdmlkZWQuIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBuZXcgcHJvZ3JhbXMhIQorICAgIEVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGRldmVsb3BwZWQgZm9yIFB5aW5vdGlmeSA+PSAwLjgueC4KKyAgICAiIiIKKyAgICBzZXRhdHRyKEV2ZW50c0NvZGVzLCAnQUxMX0VWRU5UUycsIEFMTF9FVkVOVFMpCisgICAgZm9yIGV2bmFtZSBpbiBnbG9iYWxzKCk6CisgICAgICAgIGlmIGV2bmFtZS5zdGFydHN3aXRoKCdJTl8nKToKKyAgICAgICAgICAgIHNldGF0dHIoRXZlbnRzQ29kZXMsIGV2bmFtZSwgZ2xvYmFscygpW2V2bmFtZV0pCisgICAgZ2xvYmFsIENPTVBBVElCSUxJVFlfTU9ERQorICAgIENPTVBBVElCSUxJVFlfTU9ERSA9IFRydWUKKworCitkZWYgY29tbWFuZF9saW5lKCk6CisgICAgIiIiCisgICAgQnkgZGVmYXVsdCB0aGUgd2F0Y2hlZCBwYXRoIGlzICcvdG1wJyBhbmQgYWxsIHR5cGVzIG9mIGV2ZW50cyBhcmUKKyAgICBtb25pdG9yZWQuIEV2ZW50cyBtb25pdG9yaW5nIHNlcnZlcyBmb3JldmVyLCB0eXBlIGNeYyB0byBzdG9wIGl0LgorICAgICIiIgorICAgIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCisgICAgdXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbcGF0aDFdIFtwYXRoMl0gW3BhdGhuXSIKKworICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJ2ZXJib3NlIiwgaGVscD0iVmVyYm9zZSBtb2RlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yZWN1cnNpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InJlY3Vyc2l2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQWRkIHdhdGNoZXMgcmVjdXJzaXZlbHkgb24gcGF0aHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLWF1dG9fYWRkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJhdXRvX2FkZCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQXV0b21hdGljYWxseSBhZGQgd2F0Y2hlcyBvbiBuZXcgZGlyZWN0b3JpZXMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZyIsICItLWdsb2IiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9Imdsb2IiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlRyZWF0IHBhdGhzIGFzIGdsb2JzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWUiLCAiLS1ldmVudHMtbGlzdCIsIG1ldGF2YXI9IkVWRU5UWywuLi5dIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJldmVudHNfbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0oIkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnRzIHRvIHdhdGNoIGZvciAtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHZhbGlkIG9wdGlvbnMgKGRlZmF1bHRzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBldmVyeXRoaW5nKSIpKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXN0YXRzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlzcGxheSBkdW1teSBzdGF0aXN0aWNzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLVYiLCAiLS12ZXJzaW9uIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJ2ZXJzaW9uIiwgIGhlbHA9IlB5aW5vdGlmeSB2ZXJzaW9uIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1yYXctZm9ybWF0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJyYXdfZm9ybWF0IiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXNhYmxlIGVuaGFuY2VkIG91dHB1dCBmb3JtYXQuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb21tYW5kIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0iY29tbWFuZCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iU2hlbGwgY29tbWFuZCB0byBydW4gdXBvbiBldmVudCIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgIGxvZy5zZXRMZXZlbCgxMCkKKworICAgIGlmIG9wdGlvbnMudmVyc2lvbjoKKyAgICAgICAgcHJpbnQoX192ZXJzaW9uX18pCisKKyAgICBpZiBub3Qgb3B0aW9ucy5yYXdfZm9ybWF0OgorICAgICAgICBnbG9iYWwgb3V0cHV0X2Zvcm1hdAorICAgICAgICBvdXRwdXRfZm9ybWF0ID0gQ29sb3JlZE91dHB1dEZvcm1hdCgpCisKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICBwYXRoID0gJy90bXAnICAjIGRlZmF1bHQgd2F0Y2hlZCBwYXRoCisgICAgZWxzZToKKyAgICAgICAgcGF0aCA9IGFyZ3MKKworICAgICMgd2F0Y2ggbWFuYWdlciBpbnN0YW5jZQorICAgIHdtID0gV2F0Y2hNYW5hZ2VyKCkKKyAgICAjIG5vdGlmaWVyIGluc3RhbmNlIGFuZCBpbml0CisgICAgaWYgb3B0aW9ucy5zdGF0czoKKyAgICAgICAgbm90aWZpZXIgPSBOb3RpZmllcih3bSwgZGVmYXVsdF9wcm9jX2Z1bj1TdGF0cygpLCByZWFkX2ZyZXE9NSkKKyAgICBlbHNlOgorICAgICAgICBub3RpZmllciA9IE5vdGlmaWVyKHdtLCBkZWZhdWx0X3Byb2NfZnVuPVByaW50QWxsRXZlbnRzKCkpCisKKyAgICAjIFdoYXQgbWFzayB0byBhcHBseQorICAgIG1hc2sgPSAwCisgICAgaWYgb3B0aW9ucy5ldmVudHNfbGlzdDoKKyAgICAgICAgZXZlbnRzX2xpc3QgPSBvcHRpb25zLmV2ZW50c19saXN0LnNwbGl0KCcsJykKKyAgICAgICAgZm9yIGV2IGluIGV2ZW50c19saXN0OgorICAgICAgICAgICAgZXZjb2RlID0gRXZlbnRzQ29kZXMuQUxMX0ZMQUdTLmdldChldiwgMCkKKyAgICAgICAgICAgIGlmIGV2Y29kZToKKyAgICAgICAgICAgICAgICBtYXNrIHw9IGV2Y29kZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZXJyb3IoIlRoZSBldmVudCAnJXMnIHNwZWNpZmllZCB3aXRoIG9wdGlvbiAtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBub3QgdmFsaWQiICUgZXYpCisgICAgZWxzZToKKyAgICAgICAgbWFzayA9IEFMTF9FVkVOVFMKKworICAgICMgc3RhdHMKKyAgICBjYl9mdW4gPSBOb25lCisgICAgaWYgb3B0aW9ucy5zdGF0czoKKyAgICAgICAgZGVmIGNiKHMpOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShyZXByKHMucHJvY19mdW4oKSkpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihzLnByb2NfZnVuKCkpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIGNiX2Z1biA9IGNiCisKKyAgICAjIEV4dGVybmFsIGNvbW1hbmQKKyAgICBpZiBvcHRpb25zLmNvbW1hbmQ6CisgICAgICAgIGRlZiBjYihzKToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4ob3B0aW9ucy5jb21tYW5kLCBzaGVsbD1UcnVlKQorICAgICAgICBjYl9mdW4gPSBjYgorCisgICAgbG9nLmRlYnVnKCdTdGFydCBtb25pdG9yaW5nICVzLCAocHJlc3MgY15jIHRvIGhhbHQgcHlpbm90aWZ5KScgJSBwYXRoKQorCisgICAgd20uYWRkX3dhdGNoKHBhdGgsIG1hc2ssIHJlYz1vcHRpb25zLnJlY3Vyc2l2ZSwgYXV0b19hZGQ9b3B0aW9ucy5hdXRvX2FkZCwgZG9fZ2xvYj1vcHRpb25zLmdsb2IpCisgICAgIyBMb29wIGZvcmV2ZXIgKHVudGlsIHNpZ2ludCBzaWduYWwgZ2V0IGNhdWdodCkKKyAgICBub3RpZmllci5sb29wKGNhbGxiYWNrPWNiX2Z1bikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGNvbW1hbmRfbGluZSgpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL2FkbWluLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3IvYWRtaW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmODVkNwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL2FkbWluLnB5CkBAIC0wLDAgKzEsMzMgQEAKK2Zyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCitmcm9tIGRqYW5nby5jb250cmliLmFkbWluLmZpbHRlcnMgaW1wb3J0IFJlbGF0ZWRGaWVsZExpc3RGaWx0ZXIKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24sIFJlbGVhc2UsIExheWVyU291cmNlLCBUb2FzdGVyU2V0dGluZworZnJvbSBkamFuZ28uZm9ybXMud2lkZ2V0cyBpbXBvcnQgVGV4dGFyZWEKK2Zyb20gZGphbmdvIGltcG9ydCBmb3JtcworaW1wb3J0IGRqYW5nby5kYi5tb2RlbHMgYXMgbW9kZWxzCisKK2Zyb20gZGphbmdvLmNvbnRyaWIuYWRtaW4gaW1wb3J0IHdpZGdldHMsIGhlbHBlcnMKKworY2xhc3MgTGF5ZXJTb3VyY2VBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKyAgICBwYXNzCisKK2NsYXNzIEJpdGJha2VWZXJzaW9uQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisKKyAgICAjIHdlIG92ZXJyaWRlIHRoZSBmb3JtZmllbGQgZm9yIGRiIFVSTEZpZWxkIGJlY2F1c2Ugb2YgYnJva2VuIFVSTCB2YWxpZGF0aW9uCisKKyAgICBkZWYgZm9ybWZpZWxkX2Zvcl9kYmZpZWxkKHNlbGYsIGRiX2ZpZWxkLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGJfZmllbGQsIG1vZGVscy5maWVsZHMuVVJMRmllbGQpOgorICAgICAgICAgICAgcmV0dXJuIGZvcm1zLmZpZWxkcy5DaGFyRmllbGQoKQorICAgICAgICByZXR1cm4gc3VwZXIoQml0YmFrZVZlcnNpb25BZG1pbiwgc2VsZikuZm9ybWZpZWxkX2Zvcl9kYmZpZWxkKGRiX2ZpZWxkLCAqKmt3YXJncykKKworCisKK2NsYXNzIFJlbGVhc2VBZG1pbihhZG1pbi5Nb2RlbEFkbWluKToKKyAgICBwYXNzCisKK2NsYXNzIFRvYXN0ZXJTZXR0aW5nQWRtaW4oYWRtaW4uTW9kZWxBZG1pbik6CisgICAgcGFzcworCithZG1pbi5zaXRlLnJlZ2lzdGVyKExheWVyU291cmNlLCBMYXllclNvdXJjZUFkbWluKQorYWRtaW4uc2l0ZS5yZWdpc3RlcihCaXRiYWtlVmVyc2lvbiwgQml0YmFrZVZlcnNpb25BZG1pbikKK2FkbWluLnNpdGUucmVnaXN0ZXIoUmVsZWFzZSwgUmVsZWFzZUFkbWluKQorYWRtaW4uc2l0ZS5yZWdpc3RlcihUb2FzdGVyU2V0dGluZywgVG9hc3RlclNldHRpbmdBZG1pbikKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3VybHMucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci91cmxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDM4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbGxlY3Rvci91cmxzLnB5CkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCBwYXR0ZXJucywgaW5jbHVkZSwgdXJsCitmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBSZWRpcmVjdFZpZXcKKwordXJscGF0dGVybnMgPSBwYXR0ZXJucygnYmxkY29sbGVjdG9yLnZpZXdzJywKKyAgICAgICAgIyBsYW5kaW5nIHBvaW50IGZvciBwdXNoaW5nIGEgYml0YmFrZV9ldmVudGxvZy5qc29uIGZpbGUgdG8gdGhpcyB0b2FzdGVyIGluc3RhY2UKKyAgICAgICAgdXJsKHInXmV2ZW50ZmlsZSQnLCAnZXZlbnRmaWxlJywgbmFtZT0nZXZlbnRmaWxlJyksCisgICAgICAgICkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3ZpZXdzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb2xsZWN0b3Ivdmlld3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyZmE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29sbGVjdG9yL3ZpZXdzLnB5CkBAIC0wLDAgKzEsNjIgQEAKKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLnZpZXdzLmRlY29yYXRvcnMuY2FjaGUgaW1wb3J0IGNhY2hlX2NvbnRyb2wKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby5jb3JlLnBhZ2luYXRvciBpbXBvcnQgUGFnaW5hdG9yLCBFbXB0eVBhZ2UsIFBhZ2VOb3RBbkludGVnZXIKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QsIEh0dHBSZXNwb25zZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby51dGlscy5odG1sIGltcG9ydCBlc2NhcGUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IGZvcm1hdHMKK2Zyb20gdG9hc3Rlcmd1aS50ZW1wbGF0ZXRhZ3MucHJvamVjdHRhZ3MgaW1wb3J0IGpzb24gYXMganNvbmZpbHRlcgoraW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRvYXN0ZXJtYWluCitmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNzcmYgaW1wb3J0IGNzcmZfZXhlbXB0CisKKworQGNzcmZfZXhlbXB0CitkZWYgZXZlbnRmaWxlKHJlcXVlc3QpOgorICAgICIiIiBSZWNlaXZlcyBhIGZpbGUgYnkgUE9TVCwgYW5kIHJ1bnMgdG9hc3Rlci1ldmVudHJlcGx5IG9uIHRoaXMgZmlsZSAiIiIKKyAgICBpZiByZXF1ZXN0Lm1ldGhvZCAhPSAiUE9TVCI6CisgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0KCJUaGlzIEFQSSBvbmx5IGFjY2VwdHMgUE9TVCByZXF1ZXN0cy4gUG9zdCBhIGZpbGUgd2l0aDpcblxuY3VybCAtRiBldmVudGxvZz1AYml0YmFrZV9ldmVudGxvZy5qc29uICVzXG4iICUgcmVxdWVzdC5idWlsZF9hYnNvbHV0ZV91cmkocmV2ZXJzZSgnZXZlbnRmaWxlJykpLCBjb250ZW50X3R5cGU9InRleHQvcGxhaW47dXRmOCIpCisKKyAgICAjIHdyaXRlIHRlbXBvcmFyeSBmaWxlCisgICAgKGhhbmRsZSwgYWJzdGVtcHBhdGgpID0gdGVtcGZpbGUubWtzdGVtcChkaXI9Ii90bXAvIikKKyAgICB3aXRoIG9zLmZkb3BlbihoYW5kbGUsICJ3IikgYXMgdG1wZmlsZToKKyAgICAgICAgZm9yIGNodW5rIGluIHJlcXVlc3QuRklMRVNbJ2V2ZW50bG9nJ10uY2h1bmtzKCk6CisgICAgICAgICAgICB0bXBmaWxlLndyaXRlKGNodW5rKQorICAgIHRtcGZpbGUuY2xvc2UoKQorCisgICAgIyBjb21wdXRlIHRoZSBwYXRoIHRvICJiaXRiYWtlL2Jpbi90b2FzdGVyLWV2ZW50cmVwbGF5IgorICAgIGZyb20gb3MucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBETgorICAgIGltcG9ydF9zY3JpcHQgPSBvcy5wYXRoLmpvaW4oRE4oRE4oRE4oRE4ob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSksICJiaW4vdG9hc3Rlci1ldmVudHJlcGxheSIpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGltcG9ydF9zY3JpcHQpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oInNjcmlwdCBtaXNzaW5nICVzIiAlIGltcG9ydF9zY3JpcHQpCisgICAgc2NyaXB0ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICBzY3JpcHRlbnZbIkRBVEFCQVNFX1VSTCJdID0gdG9hc3Rlcm1haW4uc2V0dGluZ3MuZ2V0REFUQUJBU0VfVVJMKCkKKworICAgICMgcnVuIHRoZSBkYXRhIGxvYWRpbmcgcHJvY2VzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRzCisgICAgaW1wb3J0ZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFtpbXBvcnRfc2NyaXB0LCBhYnN0ZW1wcGF0aF0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIGVudj1zY3JpcHRlbnYpCisgICAgKG91dCwgZXJyKSA9IGltcG9ydGVyLmNvbW11bmljYXRlKCkKKyAgICBpZiBpbXBvcnRlci5yZXR1cm5jb2RlID09IDA6CisgICAgICAgIG9zLnJlbW92ZShhYnN0ZW1wcGF0aCkKKyAgICByZXR1cm4gSHR0cFJlc3BvbnNlKCI9PSBSZXR2YWwgJWRcbj09IFNURE9VVFxuJXNcblxuPT0gU1RERVJSXG4lcyIgJSAoaW1wb3J0ZXIucmV0dXJuY29kZSwgb3V0LCBlcnIpLCBjb250ZW50X3R5cGU9InRleHQvcGxhaW47dXRmOCIpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2FkbWluLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2FkbWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYmU1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYWRtaW4ucHkKQEAgLTAsMCArMSw4IEBACitmcm9tIGRqYW5nby5jb250cmliIGltcG9ydCBhZG1pbgorZnJvbSBkamFuZ28uY29udHJpYi5hZG1pbi5maWx0ZXJzIGltcG9ydCBSZWxhdGVkRmllbGRMaXN0RmlsdGVyCitmcm9tIC5tb2RlbHMgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnQKKworY2xhc3MgQnVpbGRFbnZpcm9ubWVudEFkbWluKGFkbWluLk1vZGVsQWRtaW4pOgorICAgIHBhc3MKKworYWRtaW4uc2l0ZS5yZWdpc3RlcihCdWlsZEVudmlyb25tZW50LCBCdWlsZEVudmlyb25tZW50QWRtaW4pCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvYmJjb250cm9sbGVyLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2JiY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDcwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2JiY29udHJvbGxlci5weQpAQCAtMCwwICsxLDIwMiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCUkxheWVyLCBCUlZhcmlhYmxlLCBCUlRhcmdldCwgQlJCaXRiYWtlCisKKyMgbG9hZCBCaXRiYWtlIGNvbXBvbmVudHMKK3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkKK3N5cy5wYXRoLmluc2VydCgwLCBwYXRoKQoraW1wb3J0IGJiLnNlcnZlci54bWxycGMKKworY2xhc3MgQml0YmFrZUNvbnRyb2xsZXIob2JqZWN0KToKKyAgICAiIiIgVGhpcyBpcyB0aGUgYmFzaWMgY2xhc3MgdGhhdCBjb250cm9sbHMgYSBiaXRiYWtlIHNlcnZlci4KKyAgICAgICAgSXQgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBjbGFzcyBvbiBob3cgdGhlIHNlcnZlciBpcyBzdGFydGVkIGFuZCBhcXVpcmVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubmVjdGlvbik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKworICAgIGRlZiBfcnVuQ29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgcmVzdWx0LCBlcnJvciA9IHNlbGYuY29ubmVjdGlvbi5jb25uZWN0aW9uLnJ1bkNvbW1hbmQoY29tbWFuZCkKKyAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZXJyb3IpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkaXNjb25uZWN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJlbW92ZUNsaWVudCgpCisKKyAgICBkZWYgc2V0VmFyaWFibGUoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuQ29tbWFuZChbInNldFZhcmlhYmxlIiwgbmFtZSwgdmFsdWVdKQorCisgICAgZGVmIGJ1aWxkKHNlbGYsIHRhcmdldHMsIHRhc2sgPSBOb25lKToKKyAgICAgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICAgICAgdGFzayA9ICJidWlsZCIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bkNvbW1hbmQoWyJidWlsZFRhcmdldHMiLCB0YXJnZXRzLCB0YXNrXSkKKworCisKK2RlZiBnZXRCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcigqKmt3YXJncyk6CisgICAgIiIiIEdldHMgeW91IGEgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgdGhhdCBlbmNhcHN1bGF0ZXMgYSBidWlsZCBlbnZpcm9ubWVudCwKKyAgICAgICAgYmFzZWQgb24gdGhlIHF1ZXJ5IGRpY3Rpb25hcnkgc2VudCBpbi4KKworICAgICAgICBUaGlzIGlzIHVzZWQgdG8gcmV0cmlldmUsIGZvciBleGFtcGxlLCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgQkUgZnJvbSBpbnNpZGUKKyAgICAgICAgdGhlIHRvYXN0ZXIgVUksIG9yIGZpbmQgYSBuZXcgQkUgdG8gc3RhcnQgYSBuZXcgYnVpbGQgaW4gaXQuCisKKyAgICAgICAgVGhlIHJldHVybiBvYmplY3QgTVVTVCBhbHdheXMgYmUgYSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlci4KKyAgICAiIiIKKworICAgIGZyb20gbG9jYWxob3N0YmVjb250cm9sbGVyIGltcG9ydCBMb2NhbGhvc3RCRUNvbnRyb2xsZXIKKyAgICBmcm9tIHNzaGJlY29udHJvbGxlciAgICBpbXBvcnQgU1NIQkVDb250cm9sbGVyCisKKyAgICBiZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5maWx0ZXIoUSgqKmt3YXJncykpWzBdCisgICAgaWYgYmUuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgcmV0dXJuIExvY2FsaG9zdEJFQ29udHJvbGxlcihiZSkKKyAgICBlbGlmIGJlLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NIOgorICAgICAgICByZXR1cm4gU1NIQkVDb250cm9sbGVyKGJlKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IEltcGxlbWVudCBCRUMgZm9yIHR5cGUgJXMiICUgc3RyKGJlLmJldHlwZSkpCisKKworY2xhc3MgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIob2JqZWN0KToKKyAgICAiIiIgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIgKEJFQykgaXMgdGhlIGFic3RyYWN0IGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgb3BlcmF0aW9ucyB0aGF0IE1VU1QKKyAgICAgICAgb3IgU0hPVUxEIGJlIHN1cHBvcnRlZCBieSBhIEJ1aWxkIEVudmlyb25tZW50LiBJdCBpcyB1c2VkIHRvIGVzdGFibGlzaCB0aGUgZnJhbWV3b3JrLCBhbmQgbXVzdAorICAgICAgICBub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGJ5IHRoZSB1c2VyLgorCisgICAgICAgIFVzZSB0aGUgImdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKCkiIGZ1bmN0aW9uIHRvIGdldCBhIHdvcmtpbmcgQkVDIGZvciB5b3VyIHJlbW90ZS4KKworICAgICAgICBIb3cgdGhlIEJ1aWxkRW52aXJvbm1lbnRzIGFyZSBkaXNjb3ZlcmVkIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY2xhc3MuCisKKyAgICAgICAgWW91IG11c3QgZGVyaXZlIHRoaXMgY2xhc3MgdG8gdGVhY2ggVG9hc3RlciBob3cgdG8gb3BlcmF0ZSBpbiB5b3VyIG93biBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgV2UgcHJvdmlkZSBzb21lIHNwZWNpZmljIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCBlaXRoZXIgdG8KKyAgICAgICAgZGlyZWN0bHkgc2V0LXVwIFRvYXN0ZXIgaW5mcmFzdHJ1Y3R1cmUsIG9yIGFzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGluZnJhc3RydWN0dXJlIHNldDoKKworICAgICAgICAgICAgKiBMb2NhbGhvc3QgY29udHJvbGxlciB3aWxsIHJ1biB0aGUgVG9hc3RlciBCRSBvbiB0aGUgc2FtZSBhY2NvdW50IGFzIHRoZSB3ZWIgc2VydmVyCisgICAgICAgIChjdXJyZW50IHVzZXIgaWYgeW91IGFyZSB1c2luZyB0aGUgdGhlIERqYW5nbyBkZXZlbG9wbWVudCB3ZWIgc2VydmVyKQorICAgICAgICBvbiB0aGUgbG9jYWwgbWFjaGluZSwgd2l0aCB0aGUgImJ1aWxkLyIgZGlyZWN0b3J5IHVuZGVyIHRoZSAicG9reS8iIHNvdXJjZSBjaGVja291dCBkaXJlY3RvcnkuCisgICAgICAgIEJhc2ggaXMgZXhwZWN0ZWQgdG8gYmUgYXZhaWxhYmxlLgorCisgICAgICAgICAgICAqIFNTSCBjb250cm9sbGVyIHdpbGwgcnVuIHRoZSBUb2FzdGVyIEJFIG9uIGEgcmVtb3RlIG1hY2hpbmUsIHdoZXJlIHRoZSBjdXJyZW50IHVzZXIKKyAgICAgICAgY2FuIGNvbm5lY3Qgd2l0aG91dCByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBpbXBsZW1lbnQiKXdvcmQgKHNldCB1cCB3aXRoIGVpdGhlciBzc2gtYWdlbnQgb3IgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogaW1wbGVtZW50IilwaHJhc2UtbGVzcyBrZXkgYXV0aGVudGljYXRpb24pCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICAiIiIgVGFrZXMgYSBCdWlsZEVudmlyb25tZW50IG9iamVjdCBhcyBwYXJhbWV0ZXIgdGhhdCBwb2ludHMgdG8gdGhlIHNldHRpbmdzIG9mIHRoZSBCRS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYmUgPSBiZQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF91cGRhdGVCQkxheWVycyhiYmxheWVyY29uZiwgbGF5ZXJsaXN0KToKKyAgICAgICAgY29uZmxpbmVzID0gb3BlbihiYmxheWVyY29uZiwgInIiKS5yZWFkbGluZXMoKQorCisgICAgICAgIGJibGF5ZXJjb25mZmlsZSA9IG9wZW4oYmJsYXllcmNvbmYsICJ3IikKKyAgICAgICAgc2tpcCA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb25mbGluZXMpKToKKyAgICAgICAgICAgIGlmIHNraXAgPiAwOgorICAgICAgICAgICAgICAgIHNraXAgPS0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBjb25mbGluZXNbaV0uc3RhcnRzd2l0aCgiIyBsaW5lIGFkZGVkIGJ5IHRvYXN0ZXIiKToKKyAgICAgICAgICAgICAgICBza2lwID0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYmxheWVyY29uZmZpbGUud3JpdGUoY29uZmxpbmVzW2ldKQorCisgICAgICAgIGJibGF5ZXJjb25mZmlsZS53cml0ZSgiIyBsaW5lIGFkZGVkIGJ5IHRvYXN0ZXIgYnVpbGQgY29udHJvbFxuQkJMQVlFUlMgPSBcIiIgKyAiICIuam9pbihsYXllcmxpc3QpICsgIlwiIikKKyAgICAgICAgYmJsYXllcmNvbmZmaWxlLmNsb3NlKCkKKworCisgICAgZGVmIHdyaXRlQ29uZkZpbGUoc2VsZiwgdmFyaWFibGVfbGlzdCA9IE5vbmUsIHJhdyA9IE5vbmUpOgorICAgICAgICAiIiIgV3JpdGVzIGEgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuIE92ZXJyaWRlIHdpdGggYnVpbGRlbnYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBNdXN0IG92ZXJyaWRlIHRvIGFjdHVhbGx5IHdyaXRlIGEgY29uZmlndXJhdGlvbiBmaWxlIikKKworCisgICAgZGVmIHN0YXJ0QkJTZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIiBTdGFydHMgYSAgQkIgc2VydmVyIHdpdGggVG9hc3RlciB0b2FzdGVydWkgc2V0IHVwIHRvIHJlY29yZCB0aGUgYnVpbGRzLCBhbiBubyBjb250cm9sbGluZyBVSS4KKyAgICAgICAgICAgIEFmdGVyIHRoaXMgbWV0aG9kIGV4ZWN1dGVzLCBzZWxmLmJlIGJiYWRkcmVzcy9iYnBvcnQgTVVTVCBwb2ludCB0byBhIHJ1bm5pbmcgYW5kIGZyZWUgc2VydmVyLAorICAgICAgICAgICAgYW5kIHRoZSBiYnN0YXRlIE1VU1QgYmUgIHVwZGF0ZWQgdG8gInN0YXJ0ZWQiLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogTXVzdCBvdmVycmlkZSBpbiBvcmRlciB0byBhY3R1YWxseSBzdGFydCB0aGUgQkIgc2VydmVyIikKKworICAgIGRlZiBzdG9wQkJTZXJ2ZXIoc2VsZik6CisgICAgICAgICIiIiBTdG9wcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgQkIgc2VydmVyLgorICAgICAgICAgICAgVGhlIGJic3RhdGUgTVVTVCBiZSB1cGRhdGVkIHRvICJzdG9wcGVkIi4KKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiBtdXN0IGJlIG5vbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBNdXN0IG92ZXJyaWRlIHN0b0JCU2VydmVyIikKKworICAgIGRlZiBzZXRMYXllcnMoc2VsZiwgYmJzLCBscyk6CisgICAgICAgICIiIiBDaGVja3Mtb3V0IGJpdGJha2UgZXhlY3V0b3IgYW5kIGxheWVycyBmcm9tIGdpdCByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICBTZXRzIHRoZSBsYXllciB2YXJpYWJsZXMgaW4gdGhlIGNvbmZpZyBmaWxlLCBhZnRlciB2YWxpZGF0aW5nIGxvY2FsIGxheWVyIHBhdGhzLgorICAgICAgICAgICAgVGhlIGJpdGJha2VzIG11c3QgYmUgYSAxLWxlbmd0aCBsaXN0IG9mIEJSQml0YmFrZQorICAgICAgICAgICAgVGhlIGxheWVyIHBhdGhzIG11c3QgYmUgaW4gYSBsaXN0IG9mIEJSTGF5ZXIgb2JqZWN0CisKKyAgICAgICAgICAgIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IE11c3Qgb3ZlcnJpZGUgc2V0TGF5ZXJzIikKKworCisgICAgZGVmIGdldEJCQ29udHJvbGxlcihzZWxmKToKKyAgICAgICAgIiIiIHJldHVybnMgYSBCaXRiYWtlQ29udHJvbGxlciB0byBhbiBhbHJlYWR5IHN0YXJ0ZWQgc2VydmVyOyB0aGlzIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgc2VydmVyCisgICAgICAgICAgICBzdGFydHMgaWYgbmVlZGVkOyBvciByZWNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgaWYgd2UgY2FuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5jb25uZWN0aW9uOgorICAgICAgICAgICAgc2VsZi5zdGFydEJCU2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuYmUubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19SVU5OSU5HCisgICAgICAgICAgICBzZWxmLmJlLnNhdmUoKQorCisgICAgICAgIHNlcnZlciA9IGJiLnNlcnZlci54bWxycGMuQml0QmFrZVhNTFJQQ0NsaWVudCgpCisgICAgICAgIHNlcnZlci5pbml0U2VydmVyKCkKKyAgICAgICAgc2VydmVyLnNhdmVDb25uZWN0aW9uRGV0YWlscygiJXM6JXMiICUgKHNlbGYuYmUuYmJhZGRyZXNzLCBzZWxmLmJlLmJicG9ydCkpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNlcnZlci5lc3RhYmxpc2hDb25uZWN0aW9uKFtdKQorCisgICAgICAgIHNlbGYuYmUuYmJ0b2tlbiA9IHNlbGYuY29ubmVjdGlvbi50cmFuc3BvcnQuY29ubmVjdGlvbl90b2tlbgorICAgICAgICBzZWxmLmJlLnNhdmUoKQorCisgICAgICAgIHJldHVybiBCaXRiYWtlQ29udHJvbGxlcihzZWxmLmNvbm5lY3Rpb24pCisKKyAgICBkZWYgZ2V0QXJ0aWZhY3Qoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIiBUaGlzIGNhbGwgcmV0dXJucyBhbiBhcnRpZmFjdCBpZGVudGlmaWVkIGJ5IHRoZSAncGF0aCcuIEhvdyAncGF0aCcgaXMgaW50ZXJwcmV0ZWQgYXMKKyAgICAgICAgICAgIHVwIHRvIHRoZSBpbXBsZW1lbnRpbmcgQkVDLiBUaGUgcmV0dXJuIE1VU1QgYmUgYSBSRVNUIFVSTCB3aGVyZSBhIEdFVCB3aWxsIGFjdHVhbGx5IHJldHVybgorICAgICAgICAgICAgdGhlIGNvbnRlbnQgb2YgdGhlIGFydGlmYWN0LCBlLmcuIGZvciB1c2UgYXMgYSAiZG93bmxvYWQgbGluayIgaW4gYSB3ZWIgVUkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3QgcmV0dXJuIHRoZSBSRVNUIFVSTCBvZiB0aGUgYXJ0aWZhY3QiKQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgICIiIiBUaGlzIHN0b3BzIHRoZSBzZXJ2ZXIgYW5kIHJlbGVhc2VzIGFueSByZXNvdXJjZXMuIEFmdGVyIHRoaXMgcG9pbnQsIGFsbCByZXNvdXJjZXMKKyAgICAgICAgICAgIGFyZSB1bi1hdmFpbGFibGUgZm9yIGZ1cnRoZXIgcmVmZXJlbmNlCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk11c3Qgb3ZlcnJpZGUgQkUgcmVsZWFzZSIpCisKKyAgICBkZWYgdHJpZ2dlckJ1aWxkKHNlbGYsIGJpdGJha2UsIGxheWVycywgdmFyaWFibGVzLCB0YXJnZXRzKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IG92ZXJyaWRlIEJFIHJlbGVhc2UiKQorCitjbGFzcyBTaGVsbENtZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBCdWlsZFNldHVwRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbG9jYWxob3N0YmVjb250cm9sbGVyLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2xvY2FsaG9zdGJlY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkwOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL2xvY2FsaG9zdGJlY29udHJvbGxlci5weQpAQCAtMCwwICsxLDMzNiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCUkxheWVyLCBCUlZhcmlhYmxlLCBCUlRhcmdldCwgQlJCaXRiYWtlCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIHRvYXN0ZXJtYWluIGltcG9ydCBzZXR0aW5ncworCitmcm9tIGJiY29udHJvbGxlciBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIsIFNoZWxsQ21kRXhjZXB0aW9uLCBCdWlsZFNldHVwRXhjZXB0aW9uCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKK2Zyb20gcHByaW50IGltcG9ydCBwcHJpbnQsIHBmb3JtYXQKKworY2xhc3MgTG9jYWxob3N0QkVDb250cm9sbGVyKEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKToKKyAgICAiIiIgSW1wbGVtZW50YXRpb24gb2YgdGhlIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyIGZvciB0aGUgbG9jYWxob3N0OworICAgICAgICB0aGlzIGNvbnRyb2xsZXIgbWFuYWdlcyB0aGUgZGVmYXVsdCBidWlsZCBkaXJlY3RvcnksCisgICAgICAgIHRoZSBzZXJ2ZXIgc2V0dXAgYW5kIHN5c3RlbSBzdGFydCBhbmQgc3RvcCBmb3IgdGhlIGxvY2FsaG9zdC10eXBlIGJ1aWxkIGVudmlyb25tZW50CisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiZSk6CisgICAgICAgIHN1cGVyKExvY2FsaG9zdEJFQ29udHJvbGxlciwgc2VsZikuX19pbml0X18oYmUpCisgICAgICAgIHNlbGYuZGJ1cmwgPSBzZXR0aW5ncy5nZXREQVRBQkFTRV9VUkwoKQorICAgICAgICBzZWxmLnBva3lkaXJuYW1lID0gTm9uZQorICAgICAgICBzZWxmLmlzbGF5ZXJzZXQgPSBGYWxzZQorCisgICAgZGVmIF9zaGVsbGNtZChzZWxmLCBjb21tYW5kLCBjd2QgPSBOb25lKToKKyAgICAgICAgaWYgY3dkIGlzIE5vbmU6CisgICAgICAgICAgICBjd2QgPSBzZWxmLmJlLnNvdXJjZWRpcgorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibGJjX3NoZWxsY21tZDogKCVzKSAlcyIgJSAoY3dkLCBjb21tYW5kKSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgY3dkID0gY3dkLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAob3V0LGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgaWYgbGVuKGVycikgPT0gMDoKKyAgICAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgb3V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnIgPSAiY29tbWFuZDogJXMgXG4lcyIgJSAoY29tbWFuZCwgZXJyKQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgZXJyb3IgJXMiICUgZXJyKQorICAgICAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNoZWxsY21kIHN1Y2Nlc3MiKQorICAgICAgICAgICAgcmV0dXJuIG91dAorCisgICAgZGVmIF9zZXR1cEJFKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgcGF0aCA9IHNlbGYuYmUuYnVpbGRkaXIKKyAgICAgICAgaWYgbm90IHBhdGg6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgcGF0aCBjcmVhdGlvbiBzcGVjaWZpZWQuIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgMDc1NSkKKyAgICAgICAgc2VsZi5fc2hlbGxjbWQoImJhc2ggLWMgXCJzb3VyY2UgJXMvb2UtaW5pdC1idWlsZC1lbnYgJXNcIiIgJSAoc2VsZi5wb2t5ZGlybmFtZSwgcGF0aCkpCisgICAgICAgICMgZGVsZXRlIHRoZSB0ZW1wbGF0ZWNvbmYuY2ZnOyBpdCBtYXkgY29tZSBmcm9tIGFuIHVuc3VwcG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihwYXRoLCAiY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIikpCisKKworICAgIGRlZiB3cml0ZUNvbmZGaWxlKHNlbGYsIGZpbGVfbmFtZSwgdmFyaWFibGVfbGlzdCA9IE5vbmUsIHJhdyA9IE5vbmUpOgorICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCBmaWxlX25hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInciKSBhcyBjb25mZmlsZToKKyAgICAgICAgICAgIGlmIHZhcmlhYmxlX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gdmFyaWFibGVfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGUud3JpdGUoIiVzPVwiJXNcIlxuIiAlIChpLm5hbWUsIGkudmFsdWUpKQorICAgICAgICAgICAgaWYgcmF3IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZmaWxlLndyaXRlKHJhdykKKworCisgICAgZGVmIHN0YXJ0QkJTZXJ2ZXIoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnBva3lkaXJuYW1lIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisKKyAgICAgICAgIyBmaW5kIG91ciBvd24gdG9hc3RlcnVpIGxpc3RlbmVyL2JpdGJha2UKKyAgICAgICAgZnJvbSB0b2FzdGVyLmJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoCisKKyAgICAgICAgb3duX2JpdGJha2UgPSBfcmVkdWNlX2Nhbm9uX3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgIi4uLy4uLy4uL2Jpbi9iaXRiYWtlIikpCisKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKG93bl9iaXRiYWtlKSBhbmQgb3MucGF0aC5pc2ZpbGUob3duX2JpdGJha2UpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHJ1bm5pbmcgdGhlIGxpc3RlbmVyIGF0ICVzIiAlIG93bl9iaXRiYWtlKQorCisgICAgICAgIHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJ0b2FzdGVyX3VpLmxvZyIpCisgICAgICAgICMgZ2V0IHRoZSBmaWxlIGxlbmd0aDsgd2UgbmVlZCB0byBkZXRlY3QgdGhlIF9sYXN0XyBzdGFydCBvZiB0aGUgdG9hc3RlciBVSSwgbm90IHRoZSBmaXJzdAorICAgICAgICB0b2FzdGVyX3VpX2xvZ19maWxlbGVuZ3RoID0gMAorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0b2FzdGVyX3VpX2xvZ19maWxlcGF0aCk6CisgICAgICAgICAgICB3aXRoIG9wZW4odG9hc3Rlcl91aV9sb2dfZmlsZXBhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMikgICAgIyBqdW1wIHRvIHRoZSBlbmQKKyAgICAgICAgICAgICAgICB0b2FzdGVyX3VpX2xvZ19maWxlbGVuZ3RoID0gZi50ZWxsKCkKKworICAgICAgICBjbWQgPSAiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAyPiYxID50b2FzdGVyX3NlcnZlci5sb2cgJiYgYml0YmFrZSAtLXJlYWQgJXMvY29uZi90b2FzdGVyLXByZS5jb25mIC0tcG9zdHJlYWQgJXMvY29uZi90b2FzdGVyLmNvbmYgLS1zZXJ2ZXItb25seSAtdCB4bWxycGMgLUIgMC4wLjAuMDowIDI+JjEgPj50b2FzdGVyX3NlcnZlci5sb2cgXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuYmUuYnVpbGRkaXIpCisKKyAgICAgICAgcG9ydCA9ICItMSIKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHN0YXJ0aW5nIGJ1aWxkZXIgXG4lc1xuIiAlIGNtZCkKKworICAgICAgICBjbWRvdXRwdXQgPSBzZWxmLl9zaGVsbGNtZChjbWQpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmJlLmJ1aWxkZGlyICsgIi90b2FzdGVyX3NlcnZlci5sb2ciLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgaSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaS5zcGxpdCgiICIpWy0xXQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogRm91bmQgYml0YmFrZSBzZXJ2ZXIgcG9ydCAlcyIgJSBwb3J0KQorCisgICAgICAgIGNtZCA9ICJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcyAtMSAlcyAmJiBEQVRBQkFTRV9VUkw9JXMgJXMgLS1vYnNlcnZlLW9ubHkgLXUgdG9hc3RlcnVpIC0tcmVtb3RlLXNlcnZlcj0wLjAuMC4wOi0xIC10IHhtbHJwY1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCBzZWxmLmRidXJsLCBvd25fYml0YmFrZSkKKyAgICAgICAgd2l0aCBvcGVuKHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoLCAiYSsiKSBhcyBmOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBjd2QgPSBzZWxmLmJlLmJ1aWxkZGlyLCBzaGVsbD1UcnVlLCBzdGRvdXQ9Ziwgc3RkZXJyPWYpCisKKyAgICAgICAgZGVmIF90b2FzdGVyX3VpX3N0YXJ0ZWQoZmlsZXBhdGgsIGZpbGVwb3MgPSAwKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsoZmlsZXBvcykKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk5PVEU6IFRvYXN0ZXJVSSB3YWl0aW5nIGZvciBldmVudHMiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXRyaWVzID0gMAorICAgICAgICBzdGFydGVkID0gRmFsc2UKKyAgICAgICAgd2hpbGUgbm90IHN0YXJ0ZWQgYW5kIHJldHJpZXMgPCA1MDoKKyAgICAgICAgICAgIHN0YXJ0ZWQgPSBfdG9hc3Rlcl91aV9zdGFydGVkKHRvYXN0ZXJfdWlfbG9nX2ZpbGVwYXRoLCB0b2FzdGVyX3VpX2xvZ19maWxlbGVuZ3RoKQorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBXYWl0aW5nIGJpdGJha2Ugc2VydmVyIHRvIHN0YXJ0IikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgcmV0cmllcyArPSAxCisKKyAgICAgICAgaWYgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICB0b2FzdGVyX3VpX2xvZyA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYmUuYnVpbGRkaXIsICJ0b2FzdGVyX3VpLmxvZyIpLCAiciIpLnJlYWQoKQorICAgICAgICAgICAgdG9hc3Rlcl9zZXJ2ZXJfbG9nID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgInRvYXN0ZXJfc2VydmVyLmxvZyIpLCAiciIpLnJlYWQoKQorICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigibG9jYWxob3N0YmVjb250cm9sbGVyOiBCaXRiYWtlIHNlcnZlciBkaWQgbm90IHN0YXJ0IGluIDI1IHNlY29uZHMsIGFib3J0aW5nIChFcnJvcjogJyVzJyAnJXMnKSIgJSAodG9hc3Rlcl91aV9sb2csIHRvYXN0ZXJfc2VydmVyX2xvZykpCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IFN0YXJ0ZWQgYml0YmFrZSBzZXJ2ZXIiKQorCisgICAgICAgIHdoaWxlIHBvcnQgPT0gIi0xIjoKKyAgICAgICAgICAgICMgdGhlIHBvcnQgc3BlY2lmaWNhdGlvbiBpcyAiYXV0b2RldGVjdCI7IHJlYWQgdGhlIGJpdGJha2UubG9jayBmaWxlCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2JpdGJha2UubG9jayIgJSBzZWxmLmJlLmJ1aWxkZGlyLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIjoiIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gbGluZS5zcGxpdCgiOiIpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBBdXRvZGV0ZWN0ZWQgYml0YmFrZSBwb3J0ICVzIiwgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBzZWxmLmJlLmJiYWRkcmVzcyA9ICJsb2NhbGhvc3QiCisgICAgICAgIHNlbGYuYmUuYmJwb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmJlLmJic3RhdGUgPSBCdWlsZEVudmlyb25tZW50LlNFUlZFUl9TVEFSVEVECisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICBkZWYgc3RvcEJCU2VydmVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNsYXllcnNldAorICAgICAgICBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAlcyBzb3VyY2UgdG9hc3RlciBzdG9wXCIiICUKKyAgICAgICAgICAgIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyLCAobGFtYmRhOiAiIiBpZiBzZWxmLmJlLmJidG9rZW4gaXMgTm9uZSBlbHNlICJCQlRPS0VOPSVzIiAlIHNlbGYuYmUuYmJ0b2tlbikoKSkpCisgICAgICAgIHNlbGYuYmUuYmJzdGF0ZSA9IEJ1aWxkRW52aXJvbm1lbnQuU0VSVkVSX1NUT1BQRUQKKyAgICAgICAgc2VsZi5iZS5zYXZlKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IFN0b3BwZWQgYml0YmFrZSBzZXJ2ZXIiKQorCisgICAgZGVmIGdldEdpdENsb25lRGlyZWN0b3J5KHNlbGYsIHVybCwgYnJhbmNoKToKKyAgICAgICAgIiIiIFV0aWxpdHkgdGhhdCByZXR1cm5zIHRoZSBsYXN0IGNvbXBvbmVudCBvZiBhIGdpdCBwYXRoIGFzIGRpcmVjdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGNvbXBvbmVudHMgPSByZS5zcGxpdChyJ1s6XC5cL10nLCB1cmwpCisgICAgICAgIGJhc2UgPSBjb21wb25lbnRzWy0yXSBpZiBjb21wb25lbnRzWy0xXSA9PSAiZ2l0IiBlbHNlIGNvbXBvbmVudHNbLTFdCisKKyAgICAgICAgaWYgYnJhbmNoICE9ICJIRUFEIjoKKyAgICAgICAgICAgIHJldHVybiAiXyVzXyVzLnRvYXN0ZXJfY2xvbmVkIiAlIChiYXNlLCBicmFuY2gpCisKKworICAgICAgICAjIHdvcmQgb2YgYXR0ZW50aW9uOyB0aGlzIGlzIGEgbG9jYWxob3N0LXNwZWNpZmljIGlzc3VlOyBvbmx5IG9uIHRoZSBsb2NhbGhvc3Qgd2UgZXhwZWN0IHRvIGhhdmUgIkhFQUQiIHJlbGVhc2VzCisgICAgICAgICMgd2hpY2ggX0FMV0FZU18gbWVhbnMgdGhlIGN1cnJlbnQgcG9reSBjaGVja291dAorICAgICAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgRE4KKyAgICAgICAgbG9jYWxfY2hlY2tvdXRfcGF0aCA9IEROKEROKEROKEROKEROKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpKQorICAgICAgICAjbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHVzaW5nIEhFQUQgY2hlY2tvdXQgaW4gJXMiICUgbG9jYWxfY2hlY2tvdXRfcGF0aCkKKyAgICAgICAgcmV0dXJuIGxvY2FsX2NoZWNrb3V0X3BhdGgKKworCisgICAgZGVmIHNldExheWVycyhzZWxmLCBiaXRiYWtlcywgbGF5ZXJzKToKKyAgICAgICAgIiIiIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEgIiIiCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGlzIG5vdCBOb25lCisgICAgICAgIGFzc2VydCBsZW4oYml0YmFrZXMpID09IDEKKyAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQorCisgICAgICAgICMgMS4gZ2V0IGEgbGlzdCBvZiByZXBvcyB3aXRoIGJyYW5jaGVzLCBhbmQgbWFwIGRpcnBhdGhzIGZvciBlYWNoIGxheWVyCisgICAgICAgIGdpdHJlcG9zID0ge30KKworICAgICAgICBnaXRyZXBvc1soYml0YmFrZXNbMF0uZ2l0dXJsLCBiaXRiYWtlc1swXS5jb21taXQpXSA9IFtdCisgICAgICAgIGdpdHJlcG9zWyhiaXRiYWtlc1swXS5naXR1cmwsIGJpdGJha2VzWzBdLmNvbW1pdCldLmFwcGVuZCggKCJiaXRiYWtlIiwgYml0YmFrZXNbMF0uZGlycGF0aCkgKQorCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICAjIHdlIGRvbid0IHByb2Nlc3MgbG9jYWwgVVJMcworICAgICAgICAgICAgaWYgbGF5ZXIuZ2l0dXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IChsYXllci5naXR1cmwsIGxheWVyLmNvbW1pdCkgaW4gZ2l0cmVwb3M6CisgICAgICAgICAgICAgICAgZ2l0cmVwb3NbKGxheWVyLmdpdHVybCwgbGF5ZXIuY29tbWl0KV0gPSBbXQorICAgICAgICAgICAgZ2l0cmVwb3NbKGxheWVyLmdpdHVybCwgbGF5ZXIuY29tbWl0KV0uYXBwZW5kKCAobGF5ZXIubmFtZSwgbGF5ZXIuZGlycGF0aCkgKQorCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXIsIG91ciBnaXQgcmVwb3MgYXJlICVzIiAlIHBmb3JtYXQoZ2l0cmVwb3MpKQorCisKKyAgICAgICAgIyAyLiBmaW5kIGNoZWNrZWQtb3V0IGdpdCByZXBvcyBpbiB0aGUgc291cmNlZGlyIGRpcmVjdG9yeSB0aGF0IG1heSBoZWxwIGZhc3RlciBjbG9uaW5nCisKKyAgICAgICAgY2FjaGVkX2xheWVycyA9IHt9CisgICAgICAgIGZvciBsZGlyIGluIG9zLmxpc3RkaXIoc2VsZi5iZS5zb3VyY2VkaXIpOgorICAgICAgICAgICAgZmxkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5zb3VyY2VkaXIsIGxkaXIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZsZGlyKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIC12IiwgZmxkaXIpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSA9IGxpbmUuc3BsaXQoIlx0IilbMV0uc3BsaXQoIiAiKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbW90ZSBub3QgaW4gY2FjaGVkX2xheWVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkX2xheWVyc1tyZW1vdGVdID0gZmxkaXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICMgaWdub3JlIGFueSBlcnJvcnMgaW4gY29sbGVjdGluZyBnaXQgcmVtb3RlcworICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbGF5ZXJsaXN0ID0gW10KKworCisgICAgICAgICMgMy4gY2hlY2tvdXQgdGhlIHJlcG9zaXRvcmllcworICAgICAgICBmb3IgZ2l0dXJsLCBjb21taXQgaW4gZ2l0cmVwb3Mua2V5cygpOgorICAgICAgICAgICAgbG9jYWxkaXJuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCBzZWxmLmdldEdpdENsb25lRGlyZWN0b3J5KGdpdHVybCwgY29tbWl0KSkKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBnaXR1cmwgJXM6JXMgY2hlY2tpbmcgb3V0IGluIGN1cnJlbnQgZGlyZWN0b3J5ICVzIiAlIChnaXR1cmwsIGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKKworICAgICAgICAgICAgIyBtYWtlIHN1cmUgb3VyIGRpcmVjdG9yeSBpcyBhIGdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2NhbGRpcm5hbWUpOgorICAgICAgICAgICAgICAgIGxvY2FscmVtb3RlcyA9IHNlbGYuX3NoZWxsY21kKCJnaXQgcmVtb3RlIC12IiwgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBnaXR1cmwgaW4gbG9jYWxyZW1vdGVzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJFeGlzdGluZyBnaXQgcmVwb3NpdG9yeSBhdCAlcywgYnV0IHdpdGggZGlmZmVyZW50IHJlbW90ZXMgKCclcycsIGV4cGVjdGVkICclcycpLiBUb2FzdGVyIHdpbGwgbm90IGNvbnRpbnVlIG91dCBvZiBmZWFyIG9mIGRhbWFnaW5nIHNvbWV0aGluZy4iICUgKGxvY2FsZGlybmFtZSwgIiwgIi5qb2luKGxvY2FscmVtb3Rlcy5zcGxpdCgiXG4iKSksIGdpdHVybCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGdpdHVybCBpbiBjYWNoZWRfbGF5ZXJzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlciBnaXQtY29weWluZyAlcyB0byAlcyIgJSAoY2FjaGVkX2xheWVyc1tnaXR1cmxdLCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGNsb25lIFwiJXNcIiBcIiVzXCIiICUgKGNhY2hlZF9sYXllcnNbZ2l0dXJsXSwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiIsIGxvY2FsZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hlbGxjbWQoImdpdCByZW1vdGUgYWRkIG9yaWdpbiBcIiVzXCIiICUgZ2l0dXJsLCBsb2NhbGRpcm5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IGNsb25pbmcgJXM6JXMgaW4gJXMiICUgKGdpdHVybCwgY29tbWl0LCBsb2NhbGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGNsb25lIFwiJXNcIiAtLXNpbmdsZS1icmFuY2ggLS1icmFuY2ggXCIlc1wiIFwiJXNcIiIgJSAoZ2l0dXJsLCBjb21taXQsIGxvY2FsZGlybmFtZSkpCisKKyAgICAgICAgICAgICMgYnJhbmNoIG1hZ2ljIG5hbWUgIkhFQUQiIHdpbGwgaW5oaWJpdCBjaGVja291dAorICAgICAgICAgICAgaWYgY29tbWl0ICE9ICJIRUFEIjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY2hlY2tpbmcgb3V0IGNvbW1pdCAlcyB0byAlcyAiICUgKGNvbW1pdCwgbG9jYWxkaXJuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgiZ2l0IGZldGNoIC0tYWxsICYmIGdpdCBjaGVja291dCBcIiVzXCIgJiYgZ2l0IHJlYmFzZSBcIm9yaWdpbi8lc1wiIiAlIChjb21taXQsIGNvbW1pdCkgLCBsb2NhbGRpcm5hbWUpCisKKyAgICAgICAgICAgICMgdGFrZSB0aGUgbG9jYWxkaXJuYW1lIGFzIHBva3kgZGlyIGlmIHdlIGNhbiBmaW5kIHRoZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAgICAgICAgaWYgc2VsZi5wb2t5ZGlybmFtZSBpcyBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obG9jYWxkaXJuYW1lLCAib2UtaW5pdC1idWlsZC1lbnYiKSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IHNlbGVjdGVkIHBva3kgZGlyIG5hbWUgJXMiICUgbG9jYWxkaXJuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYucG9reWRpcm5hbWUgPSBsb2NhbGRpcm5hbWUKKworICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlIGhhdmUgYSB3b3JraW5nIGJpdGJha2UKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJykpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogY2hlY2tpbmcgYml0YmFrZSBpbnRvIHRoZSBwb2t5IGRpcm5hbWUgJXMgIiAlIHNlbGYucG9reWRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NoZWxsY21kKCJnaXQgY2xvbmUgLWIgXCIlc1wiIFwiJXNcIiBcIiVzXCIgIiAlIChiaXRiYWtlc1swXS5jb21taXQsIGJpdGJha2VzWzBdLmdpdHVybCwgb3MucGF0aC5qb2luKHNlbGYucG9reWRpcm5hbWUsICdiaXRiYWtlJykpKQorCisgICAgICAgICAgICAjIHZlcmlmeSBvdXIgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICBmb3IgbmFtZSwgZGlycGF0aCBpbiBnaXRyZXBvc1soZ2l0dXJsLCBjb21taXQpXToKKyAgICAgICAgICAgICAgICBsb2NhbGRpcnBhdGggPSBvcy5wYXRoLmpvaW4obG9jYWxkaXJuYW1lLCBkaXJwYXRoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBsb2NhbGRpcnBhdGggZXhwZWN0ZWQgJyVzJyIgJSBsb2NhbGRpcnBhdGgpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvY2FsZGlycGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJ1aWxkU2V0dXBFeGNlcHRpb24oIkNhbm5vdCBmaW5kIGxheWVyIGdpdCBwYXRoICclcycgaW4gY2hlY2tlZCBvdXQgcmVwb3NpdG9yeSAnJXM6JXMnLiBBYm9ydGluZy4iICUgKGxvY2FsZGlycGF0aCwgZ2l0dXJsLCBjb21taXQpKQorCisgICAgICAgICAgICAgICAgaWYgbmFtZSAhPSAiYml0YmFrZSI6CisgICAgICAgICAgICAgICAgICAgIGxheWVybGlzdC5hcHBlbmQobG9jYWxkaXJwYXRoLnJzdHJpcCgiLyIpKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBjdXJyZW50IGxheWVyIGxpc3QgJXMgIiAlIHBmb3JtYXQobGF5ZXJsaXN0KSkKKworICAgICAgICAjIDQuIGNvbmZpZ3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIHNvIHdlIGhhdmUgYSBjb25mL2JibGF5ZXJzLmNvbmYKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5fc2V0dXBCRSgpCisKKyAgICAgICAgIyA1LiB1cGRhdGUgdGhlIGJibGF5ZXJzLmNvbmYKKyAgICAgICAgYmJsYXllcmNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYmxheWVyY29uZik6CisgICAgICAgICAgICByYWlzZSBCdWlsZFNldHVwRXhjZXB0aW9uKCJCRSBpcyBub3QgY29uc2lzdGVudDogYmJsYXllcnMuY29uZiBmaWxlIG1pc3NpbmcgYXQgJXMiICUgYmJsYXllcmNvbmYpCisKKyAgICAgICAgQnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIuX3VwZGF0ZUJCTGF5ZXJzKGJibGF5ZXJjb25mLCBsYXllcmxpc3QpCisKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlYWRTZXJ2ZXJMb2dGaWxlKHNlbGYpOgorICAgICAgICByZXR1cm4gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5iZS5idWlsZGRpciwgInRvYXN0ZXJfc2VydmVyLmxvZyIpLCAiciIpLnJlYWQoKQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgb3MucGF0aC5leGlzdHMoc2VsZi5iZS5idWlsZGRpcikKKyAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihzZWxmLmJlLnNvdXJjZWRpciwgImJ1aWxkIikpCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5iZS5idWlsZGRpcikKKworCisgICAgZGVmIHRyaWdnZXJCdWlsZChzZWxmLCBiaXRiYWtlLCBsYXllcnMsIHZhcmlhYmxlcywgdGFyZ2V0cyk6CisgICAgICAgICMgc2V0IHVwIHRoZSBidWlkIGVudmlyb25tZW50IHdpdGggdGhlIG5lZWRlZCBsYXllcnMKKyAgICAgICAgc2VsZi5zZXRMYXllcnMoYml0YmFrZSwgbGF5ZXJzKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci1wcmUuY29uZiIsIHZhcmlhYmxlcykKKyAgICAgICAgc2VsZi53cml0ZUNvbmZGaWxlKCJjb25mL3RvYXN0ZXIuY29uZiIsIHJhdyA9ICJJTkhFUklUKz1cInRvYXN0ZXIgYnVpbGRoaXN0b3J5XCIiKQorCisgICAgICAgICMgZ2V0IHRoZSBiYiBzZXJ2ZXIgcnVubmluZyB3aXRoIHRoZSBidWlsZCByZXEgaWQgYW5kIGJ1aWxkIGVudiBpZAorICAgICAgICBiYmN0cmwgPSBzZWxmLmdldEJCQ29udHJvbGxlcigpCisKKyAgICAgICAgIyB0cmlnZ2VyIHRoZSBidWlsZCBjb21tYW5kCisgICAgICAgIHRhc2sgPSByZWR1Y2UobGFtYmRhIHgsIHk6IHggaWYgbGVuKHkpPT0gMCBlbHNlIHksIG1hcChsYW1iZGEgeTogeS50YXNrLCB0YXJnZXRzKSkKKyAgICAgICAgaWYgbGVuKHRhc2spID09IDA6CisgICAgICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgIGJiY3RybC5idWlsZChsaXN0KG1hcChsYW1iZGEgeDp4LnRhcmdldCwgdGFyZ2V0cykpLCB0YXNrKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygibG9jYWxob3N0YmVjb250cm9sbGVyOiBCdWlsZCBsYXVuY2hlZCwgZXhpdGluZy4gRm9sbG93IGJ1aWxkIGxvZ3MgYXQgJXMvdG9hc3Rlcl91aS5sb2ciICUgc2VsZi5iZS5idWlsZGRpcikKKworICAgICAgICAjIGRpc2Nvbm5lY3QgZnJvbSB0aGUgc2VydmVyCisgICAgICAgIGJiY3RybC5kaXNjb25uZWN0KCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvY2hlY2tzZXR0aW5ncy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2NoZWNrc2V0dGluZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjYzdjNgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2NoZWNrc2V0dGluZ3MucHkKQEAgLTAsMCArMSwyNDcgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIsIFNoZWxsQ21kRXhjZXB0aW9uCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QsIEJ1aWxkRW52aXJvbm1lbnQsIEJSRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVG9hc3RlclNldHRpbmcsIEJ1aWxkCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMsIHRyYWNlYmFjaworCitkZWYgRE4ocGF0aCk6CisgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICByZXR1cm4gIiIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisKKworY2xhc3MgQ29tbWFuZChOb0FyZ3NDb21tYW5kKToKKyAgICBhcmdzID0gIiIKKyAgICBoZWxwID0gIlZlcmlmaWVzIHRoYXQgdGhlIGNvbmZpZ3VyZWQgc2V0dGluZ3MgYXJlIHZhbGlkIGFuZCB1c2FibGUsIG9yIHByb21wdHMgdGhlIHVzZXIgdG8gZml4IHRoZSBzZXR0aW5ncy4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoQ29tbWFuZCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmd1ZXNzcGF0aCA9IEROKEROKEROKEROKEROKEROKEROKF9fZmlsZV9fKSkpKSkpKQorCisgICAgZGVmIF9maW5kX2ZpcnN0X3BhdGhfZm9yX2ZpbGUoc2VsZiwgc3RhcnRkaXJlY3RvcnksIGZpbGVuYW1lLCBsZXZlbCA9IDApOgorICAgICAgICBpZiBsZXZlbCA8IDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBkaXJzID0gW10KKyAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihzdGFydGRpcmVjdG9yeSk6CisgICAgICAgICAgICBqID0gb3MucGF0aC5qb2luKHN0YXJ0ZGlyZWN0b3J5LCBpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoaik6CisgICAgICAgICAgICAgICAgaWYgaSA9PSBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ZGlyZWN0b3J5CisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoaik6CisgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQoaikKKyAgICAgICAgZm9yIGogaW4gZGlyczoKKyAgICAgICAgICAgIHJldCA9IHNlbGYuX2ZpbmRfZmlyc3RfcGF0aF9mb3JfZmlsZShqLCBmaWxlbmFtZSwgbGV2ZWwgLSAxKQorICAgICAgICAgICAgaWYgcmV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfcmVjdXJzaXZlX2xpc3RfZGlyZWN0b3JpZXMoc2VsZiwgc3RhcnRkaXJlY3RvcnksIGxldmVsID0gMCk6CisgICAgICAgIGlmIGxldmVsIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBkaXJzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihzdGFydGRpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgaiA9IG9zLnBhdGguam9pbihzdGFydGRpcmVjdG9yeSwgaSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGopOgorICAgICAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChqKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGogaW4gZGlyczoKKyAgICAgICAgICAgICAgICBkaXJzID0gZGlycyArIHNlbGYuX3JlY3Vyc2l2ZV9saXN0X2RpcmVjdG9yaWVzKGosIGxldmVsIC0gMSkKKyAgICAgICAgcmV0dXJuIGRpcnMKKworCisgICAgZGVmIF9nZXRfc3VnZ2VzdGVkX3NvdXJjZWRpcihzZWxmLCBiZSk6CisgICAgICAgIGlmIGJlLmJldHlwZSAhPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgcmV0dXJuIEROKEROKEROKHNlbGYuX2ZpbmRfZmlyc3RfcGF0aF9mb3JfZmlsZShzZWxmLmd1ZXNzcGF0aCwgInRvYXN0ZXJjb25mLmpzb24iLCA0KSkpKQorCisgICAgZGVmIF9nZXRfc3VnZ2VzdGVkX2J1aWxkZGlyKHNlbGYsIGJlKToKKyAgICAgICAgaWYgYmUuYmV0eXBlICE9IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICByZXR1cm4gRE4oc2VsZi5fZmluZF9maXJzdF9wYXRoX2Zvcl9maWxlKEROKHNlbGYuZ3Vlc3NwYXRoKSwgImJibGF5ZXJzLmNvbmYiLCA0KSkKKworCisgICAgZGVmIF92ZXJpZnlfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHNldHRpbmdzIGZvciBkb3dubG9hZGluZyBhcnRpZmFjdHMKKyAgICAgICAgd2hpbGUgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZT0iQVJUSUZBQ1RTX1NUT1JBR0VfRElSIikuY291bnQoKSA9PSAwOgorICAgICAgICAgICAgZ3Vlc3NlZHBhdGggPSBvcy5nZXRjd2QoKSArICIvdG9hc3Rlcl9idWlsZF9hcnRpZmFjdHMvIgorICAgICAgICAgICAgcHJpbnQoIlxuVG9hc3RlciBuZWVkcyB0byBrbm93IGluIHdoaWNoIGRpcmVjdG9yeSBpdCBjYW4gZG93bmxvYWQgYnVpbGQgbG9nIGZpbGVzIGFuZCBvdGhlciBhcnRpZmFjdHMuXG5Ub2FzdGVyIHN1Z2dlc3RzIFwiJXNcIi4iICUgZ3Vlc3NlZHBhdGgpCisgICAgICAgICAgICBhcnRpZmFjdHNfc3RvcmFnZV9kaXIgPSByYXdfaW5wdXQoIlByZXNzIEVudGVyIHRvIHNlbGVjdCBcIiVzXCIgb3IgdHlwZSB0aGUgZnVsbCBwYXRoIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeTogIiAlIGd1ZXNzZWRwYXRoKQorICAgICAgICAgICAgaWYgbGVuKGFydGlmYWN0c19zdG9yYWdlX2RpcikgPT0gMDoKKyAgICAgICAgICAgICAgICBhcnRpZmFjdHNfc3RvcmFnZV9kaXIgPSBndWVzc2VkcGF0aAorICAgICAgICAgICAgaWYgbGVuKGFydGlmYWN0c19zdG9yYWdlX2RpcikgPiAwIGFuZCBhcnRpZmFjdHNfc3RvcmFnZV9kaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoYXJ0aWZhY3RzX3N0b3JhZ2VfZGlyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG9zZToKKyAgICAgICAgICAgICAgICAgICAgaWYgIkZpbGUgZXhpc3RzIiBpbiBzdHIob3NlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIG9zZQorICAgICAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuY3JlYXRlKG5hbWU9IkFSVElGQUNUU19TVE9SQUdFX0RJUiIsIHZhbHVlPWFydGlmYWN0c19zdG9yYWdlX2RpcikKKyAgICAgICAgcmV0dXJuIDAKKworCisgICAgZGVmIF92ZXJpZnlfYnVpbGRfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgICMgcmVmdXNlIHRvIHN0YXJ0IGlmIHdlIGhhdmUgbm8gYnVpbGQgZW52aXJvbm1lbnRzCisgICAgICAgIHdoaWxlIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jb3VudCgpID09IDA6CisgICAgICAgICAgICBwcmludCgiICEhIE5vIGJ1aWxkIGVudmlyb25tZW50cyBmb3VuZC4gVG9hc3RlciBuZWVkcyBhdCBsZWFzdCBvbmUgYnVpbGQgZW52aXJvbm1lbnQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBydW4gYnVpbGRzLlxuIiArCisgICAgICAgICAgICAgICAgIllvdSBjYW4gbWFudWFsbHkgZGVmaW5lIGJ1aWxkIGVudmlyb25tZW50cyBpbiB0aGUgZGF0YWJhc2UgdGFibGUgYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50LlxuIiArCisgICAgICAgICAgICAgICAgIk9yIFRvYXN0ZXIgY2FuIGRlZmluZSBhIHNpbXBsZSBsb2NhbGhvc3QtYmFzZWQgYnVpbGQgZW52aXJvbm1lbnQgZm9yIHlvdS4iKQorCisgICAgICAgICAgICBpID0gcmF3X2lucHV0KCIgLS0gIERvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGJhc2ljIGxvY2FsaG9zdCBidWlsZCBlbnZpcm9ubWVudCA/IChZL24pICIpOworICAgICAgICAgICAgaWYgbm90IGxlbihpKSBvciBpLnN0YXJ0c3dpdGgoInkiKSBvciBpLnN0YXJ0c3dpdGgoIlkiKToKKyAgICAgICAgICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKHBrID0gMSwgYmV0eXBlID0gMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUb2FzdGVyIGNhbm5vdCBzdGFydCB3aXRob3V0IGJ1aWxkIGVudmlyb25tZW50cy4gQWJvcnRpbmcuIikKKworCisgICAgICAgICMgd2UgbWFrZSBzdXJlIHdlIGhhdmUgYnVpbGRkaXIgYW5kIHNvdXJjZWRpciBmb3IgYWxsIGRlZmluZWQgYnVpbGQgZW52aW9ubWVudHMKKyAgICAgICAgZm9yIGJlIGluIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGJlLm5lZWRzX2ltcG9ydCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX3ZlcmlmeV9iZSgpOgorICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHByaW50KCJcblZlcmlmeWluZyB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIElmIHRoZSBsb2NhbCBidWlsZCBlbnZpcm9ubWVudCBpcyBub3QgcHJvcGVybHkgY29uZmlndXJlZCwgeW91IHdpbGwgYmUgYXNrZWQgdG8gY29uZmlndXJlIGl0LiIpCisKKyAgICAgICAgICAgICAgICBkZWYgX3VwZGF0ZV9zb3VyY2VkaXIoKToKKyAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkZGlyID0gc2VsZi5fZ2V0X3N1Z2dlc3RlZF9zb3VyY2VkaXIoYmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLnNvdXJjZWRpciA9IHJhd19pbnB1dCgiVGhpcyBpcyB0aGUgZGlyZWN0b3J5IFRvYXN0ZXIgdXNlcyB0byBjaGVjayBvdXQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBsYXllcnMgeW91IHdpbGwgYnVpbGQuIFRvYXN0ZXIgd2lsbCBjcmVhdGUgbmV3IGNsb25lcyBvZiB0aGUgbGF5ZXJzLCBzbyBleGlzdGluZyBjb250ZW50IGluIHRoZSBjaG9zZW4gZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNoYW5nZWQuXG5Ub2FzdGVyIHN1Z2dlc3RzIHlvdSB1c2UgXCIlc1wiIGFzIHlvdXIgbGF5ZXJzIGNoZWNrb3V0IGRpcmVjdG9yeS4gSWYgeW91IHNlbGVjdCB0aGlzIGRpcmVjdG9yeSwgYSBsYXllciBsaWtlIFwibWV0YS1pbnRlbFwiIHdpbGwgZW5kIHVwIGluIFwiJXMvbWV0YS1pbnRlbFwiLlxuUHJlc3MgRW50ZXIgdG8gc2VsZWN0IFwiJXNcIiBvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LiBJZiB5b3UgcHJvdmlkZSB5b3VyIG93biBkaXJlY3RvcnksIGl0IG11c3QgYmUgYSBwYXJlbnQgb2YgdGhlIGNsb25lZCBkaXJlY3RvcnkgZm9yIHRoZSBzb3VyY2VzIHlvdSBhcmUgdXNpbmcgdG8gcnVuIFRvYXN0ZXI6ICIgJSAoc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIsIHN1Z2dlc3RlZGRpcikpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiZS5zb3VyY2VkaXIgPSByYXdfaW5wdXQoIlRvYXN0ZXIgbmVlZHMgdG8ga25vdyBpbiB3aGljaCBkaXJlY3RvcnkgaXQgc2hvdWxkIGNoZWNrIG91dCB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGxheWVycyB5b3Ugd2lsbCBidWlsZC4gVGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgYSBwYXJlbnQgb2YgdGhlIGNsb25lZCBkaXJlY3RvcnkgZm9yIHRoZSBzb3VyY2VzIHlvdSBhcmUgdXNpbmcgdG8gcnVuIFRvYXN0ZXIuIFRvYXN0ZXIgd2lsbCBjcmVhdGUgbmV3IGNsb25lcyBvZiB0aGUgbGF5ZXJzLCBzbyBleGlzdGluZyBjb250ZW50IGluIHRoZSBjaG9zZW4gZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNoYW5nZWQuXG5UeXBlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeSAoZm9yIGV4YW1wbGU6IFwiJXNcIjogIiAlIG9zLmVudmlyb24uZ2V0KCdIT01FJywgJy90bXAvJykpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihiZS5zb3VyY2VkaXIpID09IDAgYW5kIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLnNvdXJjZWRpciA9IHN1Z2dlc3RlZGRpcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGJlLnNvdXJjZWRpcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgc2V0LiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfc291cmNlZGlyKCkKKworICAgICAgICAgICAgICAgIGlmIG5vdCBiZS5zb3VyY2VkaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGxheWVycyBjaGVja291dCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQgdG8gYW4gYWJzb2x1dGUgcGF0aC4iCisgICAgICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQgPSBfdXBkYXRlX3NvdXJjZWRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuc291cmNlZGlyIGluIEROKF9fZmlsZV9fKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBsYXllcnMgY2hlY2tvdXQgZGlyZWN0b3J5IG11c3QgYmUgYSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgY2hlY2tvdXQuIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9zb3VyY2VkaXIoKQorCisgICAgICAgICAgICAgICAgaWYgaXNfY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgYmUuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLm5lZWRzX2ltcG9ydCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGRlZiBfdXBkYXRlX2J1aWxkZGlyKCk6CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZGRpciA9IHNlbGYuX2dldF9zdWdnZXN0ZWRfYnVpbGRkaXIoYmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdWdnZXN0ZWRkaXIpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlLmJ1aWxkZGlyID0gcmF3X2lucHV0KCJUb2FzdGVyIG5lZWRzIHRvIGtub3cgd2hlcmUgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgbG9jYXRlZC5cblRoZSBidWlsZCBkaXJlY3RvcnkgaXMgd2hlcmUgYWxsIHRoZSBhcnRpZmFjdHMgY3JlYXRlZCBieSB5b3VyIGJ1aWxkcyB3aWxsIGJlIHN0b3JlZC4gVG9hc3RlciBzdWdnZXN0cyBcIiVzXCIuXG5QcmVzcyBFbnRlciB0byBzZWxlY3QgXCIlc1wiIG9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIgJSAoc3VnZ2VzdGVkZGlyLCBzdWdnZXN0ZWRkaXIpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuYnVpbGRkaXIgPSByYXdfaW5wdXQoIlRvYXN0ZXIgbmVlZHMgdG8ga25vdyB3aGVyZSBpcyB5b3VyIGJ1aWxkIGRpcmVjdG9yeS5cblRoZSBidWlsZCBkaXJlY3RvcnkgaXMgd2hlcmUgYWxsIHRoZSBhcnRpZmFjdHMgY3JlYXRlZCBieSB5b3VyIGJ1aWxkcyB3aWxsIGJlIHN0b3JlZC4gVHlwZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgKGZvciBleGFtcGxlOiBcIiAlcy9idWlsZFwiKSIgJSBvcy5lbnZpcm9uLmdldCgnSE9NRScsJy90bXAvJykpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihiZS5idWlsZGRpcikgPT0gMCBhbmQgbGVuKHN1Z2dlc3RlZGRpcikgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYmUuYnVpbGRkaXIgPSBzdWdnZXN0ZWRkaXIKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgICAgIGlmIGxlbihiZS5idWlsZGRpcikgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIC0tIFZhbGlkYXRpb246IFRoZSBidWlsZCBkaXJlY3RvcnkgbXVzdCBiZSBzZXQuIgorICAgICAgICAgICAgICAgICAgICBpc19jaGFuZ2VkID0gX3VwZGF0ZV9idWlsZGRpcigpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYmUuYnVpbGRkaXIuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4gLS0gVmFsaWRhdGlvbjogVGhlIGJ1aWxkIGRpcmVjdG9yeSBtdXN0IHRvIGJlIHNldCB0byBhbiBhYnNvbHV0ZSBwYXRoLiIKKyAgICAgICAgICAgICAgICAgICAgaXNfY2hhbmdlZCA9IF91cGRhdGVfYnVpbGRkaXIoKQorCisKKyAgICAgICAgICAgICAgICBpZiBpc19jaGFuZ2VkOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5CdWlsZCBjb25maWd1cmF0aW9uIHNhdmVkIgorICAgICAgICAgICAgICAgICAgICBiZS5zYXZlKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgICAgICAgICAgICAgaWYgYmUubmVlZHNfaW1wb3J0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5Ub2FzdGVyIGNhbiB1c2UgYSBTSU5HTEUgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGUgdG8gc2V0IHVwIGRlZmF1bHQgcHJvamVjdCBzZXR0aW5ncyBhbmQgbGF5ZXIgaW5mb3JtYXRpb24gc291cmNlcy5cbiIKKworICAgICAgICAgICAgICAgICAgICAjIGZpbmQgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgZGlybmFtZSBpbiBzZWxmLl9yZWN1cnNpdmVfbGlzdF9kaXJlY3RvcmllcyhiZS5zb3VyY2VkaXIsMik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGlybmFtZSwgIi50ZW1wbGF0ZWNvbmYiKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbignYmFzaCAtYyAiLiAnK29zLnBhdGguam9pbihkaXJuYW1lLCAiLnRlbXBsYXRlY29uZiIpKyc7IGVjaG8gXCJcJFRFTVBMQVRFQ09ORlwiIicsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVwYXRoLCBzdGRlcnJvcm91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Mud2FpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvYy5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHNvdXJjZSBURU1QTEFURUNPTkY6ICVzIiAlIHN0ZGVycm9yb3V0cHV0KQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVwYXRoID0gb3MucGF0aC5qb2luKGNvbmZmaWxlcGF0aC5zdHJpcCgpLCAidG9hc3RlcmNvbmYuanNvbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgY29uZmZpbGVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJ0b2FzdGVyX2Nsb25lZCIgaW4gY2FuZGlkYXRlZmlsZXBhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2FuZGlkYXRlZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZXMuYXBwZW5kKGNhbmRpZGF0ZWZpbGVwYXRoKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihjb25maWdfZmlsZXMpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJUb2FzdGVyIHdpbGwgbGlzdCBub3cgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBpdCBmb3VuZC4gU2VsZWN0IHRoZSBudW1iZXIgdG8gdXNlIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2YgaW4gY29uZmlnX2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgIFslZF0gLSAlcyIgJSAoY29uZmlnX2ZpbGVzLmluZGV4KGNmKSArIDEsIGNmKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuICBbMF0gLSBFeGl0IHdpdGhvdXQgaW1wb3J0aW5nIGFueSBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcmF3X2lucHV0KCJcbkVudGVyIHlvdXIgb3B0aW9uOiAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaSkgYW5kIChpbnQoaSkgLSAxID49IDAgYW5kIGludChpKSAtIDEgPCBsZW4oY29uZmlnX2ZpbGVzKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG5JbXBvcnRpbmcgZmlsZTogJXMiICUgY29uZmlnX2ZpbGVzW2ludChpKS0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBsb2FkY29uZiBpbXBvcnQgQ29tbWFuZCBhcyBMb2FkQ29uZmlnQ29tbWFuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkQ29uZmlnQ29tbWFuZCgpLl9pbXBvcnRfbGF5ZXJfY29uZmlnKGNvbmZpZ19maWxlc1tpbnQoaSktMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIHJ1biBsc3VwZGF0ZXMgYWZ0ZXIgY29uZmlnIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuTGF5ZXIgY29uZmlndXJhdGlvbiBpbXBvcnRlZC4gVXBkYXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgbGF5ZXIgc291cmNlcywgcGxlYXNlIHdhaXQuXG5Zb3UgY2FuIHJlLXVwZGF0ZSBhbnkgdGltZSBsYXRlciBieSBydW5uaW5nIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxzdXBkYXRlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgY2FsbF9jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2NvbW1hbmQoImxzdXBkYXRlcyIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2NoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbHVyZSB3aGlsZSB0cnlpbmcgdG8gaW1wb3J0IHRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlOiAlcyIgJSBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuVG9hc3RlciBjb3VsZCBub3QgZmluZCBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gWW91IG5lZWQgdG8gY29uZmlndXJlIFRvYXN0ZXIgbWFudWFsbHkgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UsIG9yIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdXNlXG4gIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlcHkucHkgbG9hZGNvbmYgW2ZpbGVuYW1lXVxuIGNvbW1hbmQgdG8gbG9hZCBpdC4gWW91IGNhbiB1c2UgaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoIGFzIGEgc3RhcnRpbmcgcG9pbnQuIgorCisKKworCisgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2NoYW5nZWQKKworICAgICAgICAgICAgd2hpbGUgKF92ZXJpZnlfYmUoKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIF92ZXJpZnlfZGVmYXVsdF9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBkZWZhdWx0IHNldHRpbmdzIGFyZSB0aGVyZQorICAgICAgICBpZiBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmZpbHRlcihuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScpLmNvdW50KCkgIT0gMToKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAnREVGQVVMVF9SRUxFQVNFJykuZGVsZXRlKCkKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lID0gJ0RFRkFVTFRfUkVMRUFTRScsIHZhbHVlID0gJycpCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgX3ZlcmlmeV9idWlsZHNfaW5fcHJvZ3Jlc3Moc2VsZik6CisgICAgICAgICMgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdXAuIHdlIG11c3Qgbm90IGhhdmUgYW55IGJ1aWxkcyBpbiBwcm9ncmVzcywgb3IgYnVpbGQgZW52aXJvbm1lbnRzIHRha2VuCisgICAgICAgIGZvciBiIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUyk6CisgICAgICAgICAgICBCUkVycm9yLm9iamVjdHMuY3JlYXRlKHJlcSA9IGIsIGVycnR5cGUgPSAidG9hc3RlciIsIGVycm1zZyA9ICJUb2FzdGVyIGZvdW5kIHRoaXMgYnVpbGQgSU4gUFJPR1JFU1Mgd2hpbGUgVG9hc3RlciBzdGFydGVkIHVwLiBUaGlzIGlzIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgYW5kIHRoZSBidWlsZCB3YXMgbWFya2VkIGFzIGZhaWxlZCIpCisKKyAgICAgICAgQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTKS51cGRhdGUoc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0ZBSUxFRCkKKworICAgICAgICBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMudXBkYXRlKGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSkKKworICAgICAgICAjIGFsc28gbWFyayAiSW4gUHJvZ3Jlc3MgYnVpbGRzIGFzIGZhaWx1cmVzIgorICAgICAgICBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKyAgICAgICAgQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKS51cGRhdGUob3V0Y29tZSA9IEJ1aWxkLkZBSUxFRCwgY29tcGxldGVkX29uID0gdGltZXpvbmUubm93KCkpCisKKyAgICAgICAgcmV0dXJuIDAKKworCisKKyAgICBkZWYgaGFuZGxlX25vYXJncyhzZWxmLCAqKm9wdGlvbnMpOgorICAgICAgICByZXR2YWwgPSAwCisgICAgICAgIHJldHZhbCArPSBzZWxmLl92ZXJpZnlfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIoKQorICAgICAgICByZXR2YWwgKz0gc2VsZi5fdmVyaWZ5X2J1aWxkX2Vudmlyb25tZW50KCkKKyAgICAgICAgcmV0dmFsICs9IHNlbGYuX3ZlcmlmeV9kZWZhdWx0X3NldHRpbmdzKCkKKyAgICAgICAgcmV0dmFsICs9IHNlbGYuX3ZlcmlmeV9idWlsZHNfaW5fcHJvZ3Jlc3MoKQorCisgICAgICAgIHJldHVybiByZXR2YWwKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2xvYWRjb25mLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvbG9hZGNvbmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyMmI1OQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9tYW5hZ2VtZW50L2NvbW1hbmRzL2xvYWRjb25mLnB5CkBAIC0wLDAgKzEsMTgzIEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllclNvdXJjZSwgVG9hc3RlclNldHRpbmcsIEJyYW5jaCwgTGF5ZXIsIExheWVyX1ZlcnNpb24KK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24sIFJlbGVhc2UsIFJlbGVhc2VEZWZhdWx0TGF5ZXIsIFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Citmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKK2ltcG9ydCBvcworCitmcm9tIGNoZWNrc2V0dGluZ3MgaW1wb3J0IEROCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidG9hc3RlciIpCisKK2RlZiBfcmVkdWNlX2Nhbm9uX3BhdGgocGF0aCk6CisgICAgY29tcG9uZW50cyA9IFtdCisgICAgZm9yIGMgaW4gcGF0aC5zcGxpdCgiLyIpOgorICAgICAgICBpZiBjID09ICIuLiI6CisgICAgICAgICAgICBkZWwgY29tcG9uZW50c1stMV0KKyAgICAgICAgZWxpZiBjID09ICIuIjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKGMpCisgICAgaWYgbGVuKGNvbXBvbmVudHMpIDwgMjoKKyAgICAgICAgY29tcG9uZW50cy5hcHBlbmQoJycpCisgICAgcmV0dXJuICIvIi5qb2luKGNvbXBvbmVudHMpCisKK2RlZiBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKHMpOgorICAgIGZvciBpIGluIExheWVyU291cmNlLlNPVVJDRV9UWVBFOgorICAgICAgICBpZiBzID09IGlbMV06CisgICAgICAgICAgICByZXR1cm4gaVswXQorICAgIHJhaXNlIEV4Y2VwdGlvbigiQ291bGQgbm90IGZpbmQgZGVmaW5pdGlvbiBmb3Igc291cmNldHlwZSAnJXMnLiBWYWxpZCBzb3VyY2UgdHlwZXMgYXJlICVzIiAlIChzdHIocyksICcsICcuam9pbihtYXAobGFtYmRhIHg6ICInJXMnIiAlIHhbMV0sIExheWVyU291cmNlLlNPVVJDRV9UWVBFICkpKSkKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgaGVscCA9ICJMb2FkcyBhIHRvYXN0ZXJjb25mLmpzb24gZmlsZSBpbiB0aGUgZGF0YWJhc2UiCisgICAgYXJncyA9ICJmaWxlcGF0aCIKKworCisKKyAgICBkZWYgX2ltcG9ydF9sYXllcl9jb25maWcoc2VsZiwgZmlsZXBhdGgpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCBvcy5wYXRoLmlzZmlsZShmaWxlcGF0aCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kIHRvYXN0ZXIgY29uZmlnIGZpbGUgJXMgLiIgJSBmaWxlcGF0aCkKKworICAgICAgICBpbXBvcnQganNvbgorICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhvcGVuKGZpbGVwYXRoLCAiciIpLnJlYWQoKSkKKworICAgICAgICAjIHZlcmlmeSBjb25maWcgZmlsZSB2YWxpZGl0eSBiZWZvcmUgdXBkYXRpbmcgc2V0dGluZ3MKKyAgICAgICAgZm9yIGkgaW4gWydiaXRiYWtlJywgJ3JlbGVhc2VzJywgJ2RlZmF1bHRyZWxlYXNlJywgJ2NvbmZpZycsICdsYXllcnNvdXJjZXMnXToKKyAgICAgICAgICAgIGFzc2VydCBpIGluIGRhdGEKKworICAgICAgICBkZWYgX3JlYWRfZ2l0X3VybF9mcm9tX2xvY2FsX3JlcG9zaXRvcnkoYWRkcmVzcyk6CisgICAgICAgICAgICB1cmwgPSBOb25lCisgICAgICAgICAgICAjIHdlIGRldGVjdCB0aGUgcmVtb3RlIG5hbWUgYXQgcnVudGltZQorICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgIChyZW1vdGUsIHJlbW90ZV9uYW1lKSA9IGFkZHJlc3Muc3BsaXQoIjoiLCAxKQorICAgICAgICAgICAgY21kID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHJlbW90ZSAtdiIsIHNoZWxsPVRydWUsIGN3ZCA9IG9zLnBhdGguZGlybmFtZShmaWxlcGF0aCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVyciA9IHN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIChvdXQsZXJyKSA9IGNtZC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBpZiBjbWQucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygiRXJyb3Igd2hpbGUgaW1wb3J0aW5nIGxheWVyIHZjc191cmw6IGdpdCBlcnJvcjogJXMiICUgZXJyKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHBhdGgpID0gbGluZS5zcGxpdCgiXHQiLCAxKQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09IHJlbW90ZV9uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcGF0aC5zcGxpdCgiICIpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiB1cmwgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkVycm9yIHdoaWxlIGxvb2tpbmcgZm9yIHJlbW90ZSBcIiVzXCIgaW4gXCIlc1wiIiAlIChyZW1vdGVfbmFtZSwgb3V0KSkKKyAgICAgICAgICAgIHJldHVybiB1cmwKKworCisgICAgICAgICMgaW1wb3J0IGJpdGJha2UgZGF0YQorICAgICAgICBmb3IgYnZpIGluIGRhdGFbJ2JpdGJha2UnXToKKyAgICAgICAgICAgIGJ2bywgY3JlYXRlZCA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPWJ2aVsnbmFtZSddKQorICAgICAgICAgICAgaWYgYnZpWydnaXR1cmwnXS5zdGFydHN3aXRoKCJyZW1vdGU6Iik6CisgICAgICAgICAgICAgICAgYnZvLmdpdHVybCA9IF9yZWFkX2dpdF91cmxfZnJvbV9sb2NhbF9yZXBvc2l0b3J5KGJ2aVsnZ2l0dXJsJ10pCisgICAgICAgICAgICAgICAgaWYgYnZvLmdpdHVybCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoZSB0b2FzdGVyIGNvbmZpZyBmaWxlIHJlZmVyZW5jZXMgdGhlIGxvY2FsIGdpdCByZXBvLCBidXQgVG9hc3RlciBjYW5ub3QgZGV0ZWN0IGl0LlxuWW91ciBsb2NhbCBjb25maWd1cmF0aW9uIGZvciBiaXRiYWtlIHZlcnNpb24gJXMgaXMgaW52YWxpZC4gTWFrZSBzdXJlIHRoYXQgdGhlIHRvYXN0ZXJjb25mLmpzb24gZmlsZSBpcyBjb3JyZWN0LiIgJSBidmlbJ25hbWUnXSkKKworICAgICAgICAgICAgaWYgYnZvLmdpdHVybCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJ2by5naXR1cmwgPSBidmlbJ2dpdHVybCddCisgICAgICAgICAgICBidm8uYnJhbmNoID0gYnZpWydicmFuY2gnXQorICAgICAgICAgICAgYnZvLmRpcnBhdGggPSBidmlbJ2RpcnBhdGgnXQorICAgICAgICAgICAgYnZvLnNhdmUoKQorCisgICAgICAgICMgc2V0IHRoZSBsYXllciBzb3VyY2VzCisgICAgICAgIGZvciBsc2kgaW4gZGF0YVsnbGF5ZXJzb3VyY2VzJ106CisgICAgICAgICAgICBhc3NlcnQgJ3NvdXJjZXR5cGUnIGluIGxzaQorICAgICAgICAgICAgYXNzZXJ0ICdhcGl1cmwnIGluIGxzaQorICAgICAgICAgICAgYXNzZXJ0ICduYW1lJyBpbiBsc2kKKyAgICAgICAgICAgIGFzc2VydCAnYnJhbmNoZXMnIGluIGxzaQorCisKKyAgICAgICAgICAgIGlmIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUobHNpWydzb3VyY2V0eXBlJ10pID09IExheWVyU291cmNlLlRZUEVfTEFZRVJJTkRFWCBvciBsc2lbJ2FwaXVybCddLnN0YXJ0c3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICBhcGl1cmwgPSBsc2lbJ2FwaXVybCddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFwaXVybCA9IF9yZWR1Y2VfY2Fub25fcGF0aChvcy5wYXRoLmpvaW4oRE4ob3MucGF0aC5hYnNwYXRoKGZpbGVwYXRoKSksIGxzaVsnYXBpdXJsJ10pKQorCisgICAgICAgICAgICBhc3NlcnQgKChfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlKGxzaVsnc291cmNldHlwZSddKSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgpIG9yIGFwaXVybC5zdGFydHN3aXRoKCIvIikpLCAobHNpWydzb3VyY2V0eXBlJ10sYXBpdXJsKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbHMsIGNyZWF0ZWQgPSBMYXllclNvdXJjZS5vYmplY3RzLmdldF9vcl9jcmVhdGUoc291cmNldHlwZSA9IF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUobHNpWydzb3VyY2V0eXBlJ10pLCBhcGl1cmwgPSBhcGl1cmwpCisgICAgICAgICAgICAgICAgbHMubmFtZSA9IGxzaVsnbmFtZSddCisgICAgICAgICAgICAgICAgbHMuc2F2ZSgpCisgICAgICAgICAgICBleGNlcHQgSW50ZWdyaXR5RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiSW50ZWdyaXR5RXJyb3IgJXMgXG5XaGlsZSBzZXR0aW5nIG5hbWUgJXMgZm9yIGxheWVyIHNvdXJjZSAlcyAiICUgKGUsIGxzaVsnbmFtZSddLCBscykpCisKKworICAgICAgICAgICAgbGF5ZXJicmFuY2hlcyA9IFtdCisgICAgICAgICAgICBmb3IgYnJhbmNobmFtZSBpbiBsc2lbJ2JyYW5jaGVzJ106CisgICAgICAgICAgICAgICAgYm8sIGNyZWF0ZWQgPSBCcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IGxzLCBuYW1lID0gYnJhbmNobmFtZSkKKyAgICAgICAgICAgICAgICBsYXllcmJyYW5jaGVzLmFwcGVuZChibykKKworICAgICAgICAgICAgaWYgJ2xheWVycycgaW4gbHNpOgorICAgICAgICAgICAgICAgIGZvciBsYXllcmluZm8gaW4gbHNpWydsYXllcnMnXToKKyAgICAgICAgICAgICAgICAgICAgbG8sIGNyZWF0ZWQgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gbHMsIG5hbWUgPSBsYXllcmluZm9bJ25hbWUnXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGF5ZXJpbmZvWydsb2NhbF9wYXRoJ10uc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8ubG9jYWxfcGF0aCA9IGxheWVyaW5mb1snbG9jYWxfcGF0aCddCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsby5sb2NhbF9wYXRoID0gX3JlZHVjZV9jYW5vbl9wYXRoKG9zLnBhdGguam9pbihscy5hcGl1cmwsIGxheWVyaW5mb1snbG9jYWxfcGF0aCddKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG8ubG9jYWxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkxvY2FsIGxheWVyIHBhdGggJXMgbXVzdCBleGlzdHMuIEFyZSB5b3UgdHJ5aW5nIHRvIGltcG9ydCBhIGxheWVyIHRoYXQgZG9lcyBub3QgZXhpc3QgPyBDaGVjayB5b3VyIGxvY2FsIHRvYXN0ZXJjb25mLmpzb24iICUgbG8ubG9jYWxfcGF0aCkKKworICAgICAgICAgICAgICAgICAgICBpZiBsYXllcmluZm9bJ3Zjc191cmwnXS5zdGFydHN3aXRoKCJyZW1vdGU6Iik6CisgICAgICAgICAgICAgICAgICAgICAgICBsby52Y3NfdXJsID0gX3JlYWRfZ2l0X3VybF9mcm9tX2xvY2FsX3JlcG9zaXRvcnkobGF5ZXJpbmZvWyd2Y3NfdXJsJ10pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsby52Y3NfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJUaGUgdG9hc3RlciBjb25maWcgZmlsZSByZWZlcmVuY2VzIHRoZSBsb2NhbCBnaXQgcmVwbywgYnV0IFRvYXN0ZXIgY2Fubm90IGRldGVjdCBpdC5cbllvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmb3IgbGF5ZXIgJXMgaXMgaW52YWxpZC4gTWFrZSBzdXJlIHRoYXQgdGhlIHRvYXN0ZXJjb25mLmpzb24gZmlsZSBpcyBjb3JyZWN0LiIgJSBsYXllcmluZm9bJ25hbWUnXSkKKworICAgICAgICAgICAgICAgICAgICBpZiBsby52Y3NfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsby52Y3NfdXJsID0gbGF5ZXJpbmZvWyd2Y3NfdXJsJ10KKworICAgICAgICAgICAgICAgICAgICBpZiAnbGF5ZXJfaW5kZXhfdXJsJyBpbiBsYXllcmluZm86CisgICAgICAgICAgICAgICAgICAgICAgICBsby5sYXllcl9pbmRleF91cmwgPSBsYXllcmluZm9bJ2xheWVyX2luZGV4X3VybCddCisgICAgICAgICAgICAgICAgICAgIGxvLnNhdmUoKQorCisgICAgICAgICAgICAgICAgICAgIGZvciBicmFuY2ggaW4gbGF5ZXJicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGx2bywgY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cF9icmFuY2ggPSBicmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCA9IGJyYW5jaC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllciA9IGxvKQorICAgICAgICAgICAgICAgICAgICAgICAgbHZvLmRpcnBhdGggPSBsYXllcmluZm9bJ2RpcnBhdGgnXQorICAgICAgICAgICAgICAgICAgICAgICAgbHZvLnNhdmUoKQorICAgICAgICAjIHNldCByZWxlYXNlcworICAgICAgICBmb3IgcmkgaW4gZGF0YVsncmVsZWFzZXMnXToKKyAgICAgICAgICAgIGJ2byA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0KG5hbWUgPSByaVsnYml0YmFrZSddKQorICAgICAgICAgICAgYXNzZXJ0IGJ2byBpcyBub3QgTm9uZQorCisgICAgICAgICAgICBybywgY3JlYXRlZCA9IFJlbGVhc2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWUgPSByaVsnbmFtZSddLCBiaXRiYWtlX3ZlcnNpb24gPSBidm8sIGJyYW5jaF9uYW1lID0gcmlbJ2JyYW5jaCddKQorICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgcm8uaGVscHRleHQgPSByaVsnaGVscHRleHQnXQorICAgICAgICAgICAgcm8uc2F2ZSgpCisKKyAgICAgICAgICAgICMgc2F2ZSBsYXllciBzb3VyY2UgcHJpb3JpdHkgZm9yIHJlbGVhc2UKKyAgICAgICAgICAgIGZvciBsc19uYW1lIGluIHJpWydsYXllcnNvdXJjZXByaW9yaXR5J10ua2V5cygpOgorICAgICAgICAgICAgICAgIHJsc3BvLCBjcmVhdGVkID0gUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHJlbGVhc2UgPSBybywgbGF5ZXJfc291cmNlID0gTGF5ZXJTb3VyY2Uub2JqZWN0cy5nZXQobmFtZT1sc19uYW1lKSkKKyAgICAgICAgICAgICAgICBybHNwby5wcmlvcml0eSA9IHJpWydsYXllcnNvdXJjZXByaW9yaXR5J11bbHNfbmFtZV0KKyAgICAgICAgICAgICAgICBybHNwby5zYXZlKCkKKworICAgICAgICAgICAgZm9yIGRsaSBpbiByaVsnZGVmYXVsdGxheWVycyddOgorICAgICAgICAgICAgICAgICMgZmluZCBsYXllcnMgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgICAgICAgICAgUmVsZWFzZURlZmF1bHRMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUoIHJlbGVhc2UgPSBybywgbGF5ZXJfbmFtZSA9IGRsaSkKKworICAgICAgICAjIHNldCBkZWZhdWx0IHJlbGVhc2UKKyAgICAgICAgaWYgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICJERUZBVUxUX1JFTEVBU0UiKS5jb3VudCgpID4gMDoKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIikudXBkYXRlKHZhbHVlID0gZGF0YVsnZGVmYXVsdHJlbGVhc2UnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuY3JlYXRlKG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIiwgdmFsdWUgPSBkYXRhWydkZWZhdWx0cmVsZWFzZSddKQorCisgICAgICAgICMgc2V0IGRlZmF1bHQgY29uZmlnIHZhcmlhYmxlcworICAgICAgICBmb3IgY29uZmlnbmFtZSBpbiBkYXRhWydjb25maWcnXToKKyAgICAgICAgICAgIGlmIFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZmlsdGVyKG5hbWUgPSAiREVGQ09ORl8iICsgY29uZmlnbmFtZSkuY291bnQoKSA+IDA6CisgICAgICAgICAgICAgICAgVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZSA9ICJERUZDT05GXyIgKyBjb25maWduYW1lKS51cGRhdGUodmFsdWUgPSBkYXRhWydjb25maWcnXVtjb25maWduYW1lXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgVG9hc3RlclNldHRpbmcub2JqZWN0cy5jcmVhdGUobmFtZSA9ICJERUZDT05GXyIgKyBjb25maWduYW1lLCB2YWx1ZSA9IGRhdGFbJ2NvbmZpZyddW2NvbmZpZ25hbWVdKQorCisKKyAgICBkZWYgaGFuZGxlKHNlbGYsICphcmdzLCAqKm9wdGlvbnMpOgorICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIENvbW1hbmRFcnJvcigiTmVlZCBhIHBhdGggdG8gdGhlIHRvYXN0ZXJjb25mLmpzb24gZmlsZSIpCisgICAgICAgIGZpbGVwYXRoID0gYXJnc1swXQorICAgICAgICBzZWxmLl9pbXBvcnRfbGF5ZXJfY29uZmlnKGZpbGVwYXRoKQorCisKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21hbmFnZW1lbnQvY29tbWFuZHMvcnVuYnVpbGRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTliNzQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWFuYWdlbWVudC9jb21tYW5kcy9ydW5idWlsZHMucHkKQEAgLTAsMCArMSwxNTMgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gZGphbmdvLmRiIGltcG9ydCB0cmFuc2FjdGlvbgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZCwgVG9hc3RlclNldHRpbmcsIExvZ01lc3NhZ2UsIFRhcmdldAorZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgZ2V0QnVpbGRFbnZpcm9ubWVudENvbnRyb2xsZXIsIFNoZWxsQ21kRXhjZXB0aW9uLCBCdWlsZFNldHVwRXhjZXB0aW9uCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QsIEJ1aWxkRW52aXJvbm1lbnQsIEJSRXJyb3IsIEJSVmFyaWFibGUKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlRvYXN0ZXJTY2hlZHVsZXIiKQorCitjbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorICAgIGFyZ3MgICAgPSAiIgorICAgIGhlbHAgICAgPSAiU2NoZWR1bGVzIGFuZCBleGVjdXRlcyBidWlsZCByZXF1ZXN0cyBhcyBwb3NzaWJsZS4gRG9lcyBub3QgcmV0dXJuIChpbnRlcnJ1cHQgd2l0aCBDdHJsLUMpIgorCisKKyAgICBAdHJhbnNhY3Rpb24uY29tbWl0X29uX3N1Y2Nlc3MKKyAgICBkZWYgX3NlbGVjdEJ1aWxkRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIGJlYyA9IGdldEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyKGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSkKKyAgICAgICAgYmVjLmJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfTE9DSworICAgICAgICBiZWMuYmUuc2F2ZSgpCisgICAgICAgIHJldHVybiBiZWMKKworICAgIEB0cmFuc2FjdGlvbi5jb21taXRfb25fc3VjY2VzcworICAgIGRlZiBfc2VsZWN0QnVpbGRSZXF1ZXN0KHNlbGYpOgorICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVEKS5vcmRlcl9ieSgncGsnKVswXQorICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUworICAgICAgICBici5zYXZlKCkKKyAgICAgICAgcmV0dXJuIGJyCisKKyAgICBkZWYgc2NoZWR1bGUoc2VsZik6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnIgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBzZWxlY3QgdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCB0aGUgcmVxdWVzdCB0byBidWlsZAorICAgICAgICAgICAgICAgIGJyID0gc2VsZi5fc2VsZWN0QnVpbGRSZXF1ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgI2xvZ2dlci5kZWJ1ZygicnVuYnVpbGRzOiBObyBidWlsZCByZXF1ZXN0IikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiZWMgPSBzZWxmLl9zZWxlY3RCdWlsZEVudmlyb25tZW50KCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyB3ZSBjb3VsZCBub3QgZmluZCBhIEJFQzsgcG9zdHBvbmUgdGhlIEJSCisgICAgICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX1FVRVVFRAorICAgICAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygicnVuYnVpbGRzOiBObyBidWlsZCBlbnYiKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoInJ1bmJ1aWxkczogc3RhcnRpbmcgYnVpbGQgJXMsIGVudmlyb25tZW50ICVzIiAlIChiciwgYmVjLmJlKSkKKworICAgICAgICAgICAgIyB3cml0ZSB0aGUgYnVpbGQgaWRlbnRpZmljYXRpb24gdmFyaWFibGUKKyAgICAgICAgICAgIEJSVmFyaWFibGUub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWU9IlRPQVNURVJfQlJCRSIsIHZhbHVlPSIlZDolZCIgJSAoYnIucGssIGJlYy5iZS5waykpCisKKyAgICAgICAgICAgICMgbGV0IHRoZSBidWlsZCByZXF1ZXN0IGtub3cgd2hlcmUgaXQgaXMgYmVpbmcgZXhlY3V0ZWQKKyAgICAgICAgICAgIGJyLmVudmlyb25tZW50ID0gYmVjLmJlCisgICAgICAgICAgICBici5zYXZlKCkKKworICAgICAgICAgICAgIyB0aGlzIHRyaWdnZXJzIGFuIGFzeW5jIGJ1aWxkCisgICAgICAgICAgICBiZWMudHJpZ2dlckJ1aWxkKGJyLmJyYml0YmFrZV9zZXQuYWxsKCksIGJyLmJybGF5ZXJfc2V0LmFsbCgpLCBici5icnZhcmlhYmxlX3NldC5hbGwoKSwgYnIuYnJ0YXJnZXRfc2V0LmFsbCgpKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigicnVuYnVpbGRzOiBFcnJvciBsYXVuY2hpbmcgYnVpbGQgJXMiICUgZSkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZSkKKyAgICAgICAgICAgIGlmICJbRXJybm8gMTExXSBDb25uZWN0aW9uIHJlZnVzZWQiIGluIHN0cihlKToKKyAgICAgICAgICAgICAgICAjIENvbm5lY3Rpb24gcmVmdXNlZCwgcmVhZCB0b2FzdGVyX3NlcnZlci5vdXQKKyAgICAgICAgICAgICAgICBlcnJtc2cgPSBiZWMucmVhZFNlcnZlckxvZ0ZpbGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJtc2cgPSBzdHIoZSkKKworICAgICAgICAgICAgQlJFcnJvci5vYmplY3RzLmNyZWF0ZShyZXEgPSBiciwKKyAgICAgICAgICAgICAgICAgICAgZXJydHlwZSA9IHN0cih0eXBlKGUpKSwKKyAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gZXJybXNnLAorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2suZm9ybWF0X2V4YyhlKSkKKyAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQKKyAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICAgICAgYmVjLmJlLmxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRQorICAgICAgICAgICAgYmVjLmJlLnNhdmUoKQorCisgICAgZGVmIGFyY2hpdmUoc2VsZik6CisgICAgICAgICcnJyBhcmNoaXZlcyBkYXRhIGZyb20gdGhlIGJ1aWxkcyAnJycKKyAgICAgICAgYXJ0aWZhY3Rfc3RvcmFnZV9kaXIgPSBUb2FzdGVyU2V0dGluZy5vYmplY3RzLmdldChuYW1lPSJBUlRJRkFDVFNfU1RPUkFHRV9ESVIiKS52YWx1ZQorICAgICAgICBmb3IgYnIgaW4gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9BUkNISVZFKToKKyAgICAgICAgICAgICMgc2F2ZSBjb29rZXIgbG9nCisgICAgICAgICAgICBpZiBici5idWlsZCA9PSBOb25lOgorICAgICAgICAgICAgICAgIGJyLnN0YXRlID0gQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQKKyAgICAgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIgPSBvcy5wYXRoLmpvaW4oYXJ0aWZhY3Rfc3RvcmFnZV9kaXIsICIlZCIgJSBici5idWlsZC5waykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhidWlsZF9hcnRpZmFjdF9zdG9yYWdlX2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG9zZToKKyAgICAgICAgICAgICAgICBpZiAiRmlsZSBleGlzdHMiIGluIHN0cihvc2UpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugb3NlCisKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihidWlsZF9hcnRpZmFjdF9zdG9yYWdlX2RpciwgImNvb2tlcl9sb2cudHh0IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZV9uYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYnIuZW52aXJvbm1lbnQuZ2V0X2FydGlmYWN0KGJyLmJ1aWxkLmNvb2tlcl9sb2dfcGF0aCkucmVhZCgpKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfbmFtZSkKKworICAgICAgICAgICAgYnIuc3RhdGUgPSBCdWlsZFJlcXVlc3QuUkVRX0NPTVBMRVRFRAorICAgICAgICAgICAgYnIuc2F2ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCisgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQorICAgICAgICAjIGVudmlyb25tZW50cyBsb2NrZWQgZm9yIG1vcmUgdGhhbiAzMCBzZWNvbmRzIC0gdGhleSBzaG91bGQgYmUgdW5sb2NrZWQKKyAgICAgICAgQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmZpbHRlcihidWlsZHJlcXVlc3RfX3N0YXRlX19pbj1bQnVpbGRSZXF1ZXN0LlJFUV9GQUlMRUQsIEJ1aWxkUmVxdWVzdC5SRVFfQ09NUExFVEVEXSkuZmlsdGVyKGxvY2s9QnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0spLmZpbHRlcih1cGRhdGVkX19sdCA9IHRpbWV6b25lLm5vdygpIC0gdGltZWRlbHRhKHNlY29uZHMgPSAzMCkpLnVwZGF0ZShsb2NrID0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0ZSRUUpCisKKworICAgICAgICAjIHVwZGF0ZSBhbGwgQnVpbGRzIHRoYXQgZmFpbGVkIHRvIHN0YXJ0CisKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVELCBidWlsZF9fb3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKToKKyAgICAgICAgICAgICMgdHJhbnNwb3NlIHRoZSBsYXVuY2ggZXJyb3JzIGluIFRvYXN0ZXJFeGNlcHRpb25zCisgICAgICAgICAgICBici5idWlsZC5vdXRjb21lID0gQnVpbGQuRkFJTEVECisgICAgICAgICAgICBmb3IgYnJlcnJvciBpbiBici5icmVycm9yX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlNhdmluZyBlcnJvciAlcyIgJSBicmVycm9yKQorICAgICAgICAgICAgICAgIExvZ01lc3NhZ2Uub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgbGV2ZWwgPSBMb2dNZXNzYWdlLkVYQ0VQVElPTiwgbWVzc2FnZSA9IGJyZXJyb3IuZXJybXNnKQorICAgICAgICAgICAgYnIuYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBhIHRydWUgYnVpbGQgb2JqZWN0IGhlcmU7IGhlbmNlLCB0b2FzdGVydWkgZGlkbid0IGhhdmUgYSBjaGFuZ2UgdG8gcmVsZWFzZSB0aGUgQkUgbG9jaworICAgICAgICAgICAgYnIuZW52aXJvbm1lbnQubG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFCisgICAgICAgICAgICBici5lbnZpcm9ubWVudC5zYXZlKCkKKworCisKKyAgICAgICAgIyB1cGRhdGUgYWxsIEJ1aWxkUmVxdWVzdHMgd2l0aG91dCBhIGJ1aWxkIGNyZWF0ZWQKKyAgICAgICAgZm9yIGJyIGluIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihidWlsZCA9IE5vbmUpOgorICAgICAgICAgICAgYnIuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gYnIucHJvamVjdCwgY29tcGxldGVkX29uID0gYnIudXBkYXRlZCwgc3RhcnRlZF9vbiA9IGJyLmNyZWF0ZWQpCisgICAgICAgICAgICBici5idWlsZC5vdXRjb21lID0gQnVpbGQuRkFJTEVECisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnIuYnVpbGQubWFjaGluZSA9IGJyLmJydmFyaWFibGVfc2V0LmdldChuYW1lPSdNQUNISU5FJykudmFsdWUKKyAgICAgICAgICAgIGV4Y2VwdCBCUlZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBici5zYXZlKCkKKyAgICAgICAgICAgICMgdHJhbnNwb3NlIHRhcmdldCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgZm9yIGJydGFyZ2V0IGluIGJyLmJydGFyZ2V0X3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBUYXJnZXQub2JqZWN0cy5jcmVhdGUoYnVpbGQgPSBici5idWlsZCwgdGFyZ2V0PSBicnRhcmdldC50YXJnZXQpCisgICAgICAgICAgICAjIHRyYW5zcG9zZSB0aGUgbGF1bmNoIGVycm9ycyBpbiBUb2FzdGVyRXhjZXB0aW9ucworICAgICAgICAgICAgZm9yIGJyZXJyb3IgaW4gYnIuYnJlcnJvcl9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgTG9nTWVzc2FnZS5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJyLmJ1aWxkLCBsZXZlbCA9IExvZ01lc3NhZ2UuRVhDRVBUSU9OLCBtZXNzYWdlID0gYnJlcnJvci5lcnJtc2cpCisKKyAgICAgICAgICAgIGJyLmJ1aWxkLnNhdmUoKQorICAgICAgICBwYXNzCisKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXJjaGl2ZSgpCisgICAgICAgIHNlbGYuc2NoZWR1bGUoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTYzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkKQEAgLTAsMCArMSwxNTQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZEVudmlyb25tZW50JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYWRkcmVzcycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2JldHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdiYmFkZHJlc3MnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdiYnBvcnQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PS0xKSksCisgICAgICAgICAgICAoJ2JidG9rZW4nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEyNiwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdiYnN0YXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2xvY2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQnVpbGRFbnZpcm9ubWVudCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdCdWlsZFJlcXVlc3QnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3Byb2plY3QnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnc3RhdGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnYmxkY29udHJvbCcsIFsnQnVpbGRSZXF1ZXN0J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JSTGF5ZXInCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSTGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJWYXJpYWJsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icnZhcmlhYmxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSVmFyaWFibGUnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJUYXJnZXQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ0YXJnZXQnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVxJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3Rhc2snLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J2JsZGNvbnRyb2wnLCBbJ0JSVGFyZ2V0J10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQnVpbGRFbnZpcm9ubWVudCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCdWlsZFJlcXVlc3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUkxheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdibGRjb250cm9sX2JybGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0JSVmFyaWFibGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ2YXJpYWJsZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJUYXJnZXQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJ0YXJnZXQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDJfYXV0b19fYWRkX2ZpZWxkX2J1aWxkZW52aXJvbm1lbnRfc291cmNlZGlyX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudC5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDJfYXV0b19fYWRkX2ZpZWxkX2J1aWxkZW52aXJvbm1lbnRfc291cmNlZGlyX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTIyYTUwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRlbnZpcm9ubWVudF9zb3VyY2VkaXJfX2FkZF9maWVsZF9idWlsZGVudmlyb25tZW50LnB5CkBAIC0wLDAgKzEsMTA2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5zb3VyY2VkaXInCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdibGRjb250cm9sX2J1aWxkZW52aXJvbm1lbnQnLCAnc291cmNlZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUxMiwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZEVudmlyb25tZW50LmJ1aWxkZGlyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ2J1aWxkZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUxMiwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkRW52aXJvbm1lbnQuc291cmNlZGlyJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZGVudmlyb25tZW50JywgJ3NvdXJjZWRpcicpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGRFbnZpcm9ubWVudC5idWlsZGRpcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRlbnZpcm9ubWVudCcsICdidWlsZGRpcicpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnYmxkY29udHJvbCddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwM19hdXRvX19hZGRfZmllbGRfYnJsYXllcl9kaXJwYXRoLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwM19hdXRvX19hZGRfZmllbGRfYnJsYXllcl9kaXJwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmE4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDAzX2F1dG9fX2FkZF9maWVsZF9icmxheWVyX2RpcnBhdGgucHkKQEAgLTAsMCArMSw5OSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0JSTGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnJsYXllcicsICdkaXJwYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTI1NCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0JSTGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnJsYXllcicsICdkaXJwYXRoJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDRfbG9hZGluaXRpYWxkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDg1NzgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA0X2xvYWRpbml0aWFsZGF0YS5weQpAQCAtMCwwICsxLDEwNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgRGF0YU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCitjbGFzcyBNaWdyYXRpb24oRGF0YU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIldyaXRlIHlvdXIgZm9yd2FyZHMgbWV0aG9kcyBoZXJlLiIKKyAgICAgICAgIyBOb3RlOiBEb24ndCB1c2UgImZyb20gYXBwbmFtZS5tb2RlbHMgaW1wb3J0IE1vZGVsTmFtZSIuCisgICAgICAgICMgVXNlIG9ybS5Nb2RlbE5hbWUgdG8gcmVmZXIgdG8gbW9kZWxzIGluIHRoaXMgYXBwbGljYXRpb24sCisgICAgICAgICMgYW5kIG9ybVsnYXBwbmFtZS5Nb2RlbE5hbWUnXSBmb3IgbW9kZWxzIGluIG90aGVyIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3JtLkJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5nZXQocGsgPSAxKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKyAgICAgICAgICAgIG9ybS5CdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKHBrID0gMSwKKyAgICAgICAgICAgICAgICBjcmVhdGVkID0gdGltZXpvbmUubm93KCksCisgICAgICAgICAgICAgICAgdXBkYXRlZCA9IHRpbWV6b25lLm5vdygpLAorICAgICAgICAgICAgICAgIGJldHlwZSA9IDApCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkxheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRlbnZpcm9ubWVudCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEVudmlyb25tZW50J30sCisgICAgICAgICAgICAnYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnYmJhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JicG9ydCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdiYnN0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnYmJ0b2tlbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjYnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGRkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VkaXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTEyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnVpbGRyZXF1ZXN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkUmVxdWVzdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDVfYXV0b19fYWRkX2JyZXJyb3IucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF9icmVycm9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YWViNDEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF9icmVycm9yLnB5CkBAIC0wLDAgKzEsMTEyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJFcnJvcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmVycm9yJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3JlcScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSkpLAorICAgICAgICAgICAgKCdlcnJ0eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZXJybXNnJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSksCisgICAgICAgICAgICAoJ3RyYWNlYmFjaycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkVycm9yJ10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnQlJFcnJvcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnYmxkY29udHJvbF9icmVycm9yJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDZfYXV0b19fYWRkX2JyYml0YmFrZS5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDZfYXV0b19fYWRkX2JyYml0YmFrZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM4OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfYnJiaXRiYWtlLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQlJCaXRiYWtlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdibGRjb250cm9sX2JyYml0YmFrZScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10sIHVuaXF1ZT1UcnVlKSksCisgICAgICAgICAgICAoJ2dpdHVybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2NvbW1pdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSksCisgICAgICAgICAgICAoJ2RpcnBhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdibGRjb250cm9sJywgWydCUkJpdGJha2UnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCUkJpdGJha2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J2JsZGNvbnRyb2xfYnJiaXRiYWtlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJiaXRiYWtlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSQml0YmFrZSd9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIiwgJ3VuaXF1ZSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmVycm9yJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSRXJyb3InfSwKKyAgICAgICAgICAgICdlcnJtc2cnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZXJydHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0cmFjZWJhY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9maWVsZF9idWlsZHJlcXVlc3RfZW52aXJvbm1lbnRfX2NoZ19maWVsZF9idWlsZHJlcXVlc3RfYnVpbGQucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbWlncmF0aW9ucy8wMDA3X2F1dG9fX2FkZF9maWVsZF9idWlsZHJlcXVlc3RfZW52aXJvbm1lbnRfX2NoZ19maWVsZF9idWlsZHJlcXVlc3RfYnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2NzdhMgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2ZpZWxkX2J1aWxkcmVxdWVzdF9lbnZpcm9ubWVudF9fY2hnX2ZpZWxkX2J1aWxkcmVxdWVzdF9idWlsZC5weQpAQCAtMCwwICsxLDE0NSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5lbnZpcm9ubWVudCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2Vudmlyb25tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ2JsZGNvbnRyb2wuQnVpbGRFbnZpcm9ubWVudCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZHJlcXVlc3QnLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLk9uZVRvT25lRmllbGQnKSh0bz1vcm1bJ29ybS5CdWlsZCddLCB1bmlxdWU9VHJ1ZSwgbnVsbD1UcnVlKSkKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0J1aWxkUmVxdWVzdCcsIGZpZWxkcyBbJ2J1aWxkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgWydidWlsZF9pZCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0J1aWxkUmVxdWVzdCcsIGZpZWxkcyBbJ2J1aWxkJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgWydidWlsZF9pZCddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5lbnZpcm9ubWVudCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J2JsZGNvbnRyb2xfYnVpbGRyZXF1ZXN0JywgJ2Vudmlyb25tZW50X2lkJykKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0J1aWxkUmVxdWVzdC5idWlsZCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnYmxkY29udHJvbF9idWlsZHJlcXVlc3QnLCAnYnVpbGRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddLCBudWxsPVRydWUpKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J2JsZGNvbnRyb2wuYnJiaXRiYWtlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSQml0YmFrZSd9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIiwgJ3VuaXF1ZSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmVycm9yJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSRXJyb3InfSwKKyAgICAgICAgICAgICdlcnJtc2cnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZXJydHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KSwKKyAgICAgICAgICAgICd0cmFjZWJhY2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJybGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUlRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJydmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkZW52aXJvbm1lbnQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRFbnZpcm9ubWVudCd9LAorICAgICAgICAgICAgJ2FkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2JiYWRkcmVzcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdiYnBvcnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAnYmJzdGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2JidG9rZW4nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI2JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlZGlyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUxMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdibGRjb250cm9sLmJ1aWxkcmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZFJlcXVlc3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5PbmVUb09uZUZpZWxkJywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10iLCAndW5pcXVlJzogJ1RydWUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Vudmlyb25tZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkRW52aXJvbm1lbnQnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ2JsZGNvbnRyb2wnXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvMDAwOF9icmFyY2hpdmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0Njk2MAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zLzAwMDhfYnJhcmNoaXZlLnB5CkBAIC0wLDAgKzEsMTM4IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBEYXRhTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihEYXRhTWlncmF0aW9uKToKKyAgICAjIGlkcyB0aGF0IGNhbm5vdCBiZSBpbXBvcnRlZCBmcm9tIEJ1aWxkUmVxdWVzdAorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgIFJFUV9DT01QTEVURUQgPSAzCisgICAgICAgIFJFUV9BUkNISVZFID0gNgorICAgICAgICAiV3JpdGUgeW91ciBmb3J3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICAjIE5vdGU6IERvbid0IHVzZSAiZnJvbSBhcHBuYW1lLm1vZGVscyBpbXBvcnQgTW9kZWxOYW1lIi4KKyAgICAgICAgIyBVc2Ugb3JtLk1vZGVsTmFtZSB0byByZWZlciB0byBtb2RlbHMgaW4gdGhpcyBhcHBsaWNhdGlvbiwKKyAgICAgICAgIyBhbmQgb3JtWydhcHBuYW1lLk1vZGVsTmFtZSddIGZvciBtb2RlbHMgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBvcm0uQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlPVJFUV9DT01QTEVURUQpLnVwZGF0ZShzdGF0ZT1SRVFfQVJDSElWRSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgUkVRX0NPTVBMRVRFRCA9IDMKKyAgICAgICAgUkVRX0FSQ0hJVkUgPSA2CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICBvcm0uQnVpbGRSZXF1ZXN0Lm9iamVjdHMuZmlsdGVyKHN0YXRlPVJFUV9BUkNISVZFKS51cGRhdGUoc3RhdGU9UkVRX0NPTVBMRVRFRCkKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdibGRjb250cm9sLmJyYml0YmFrZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkJpdGJha2UnfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSIsICd1bmlxdWUnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJlcnJvcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCUkVycm9yJ30sCisgICAgICAgICAgICAnZXJybXNnJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2VycnR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ2JsZGNvbnRyb2wuQnVpbGRSZXF1ZXN0J10ifSksCisgICAgICAgICAgICAndHJhY2ViYWNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSTGF5ZXInfSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlcSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZFJlcXVlc3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J2JsZGNvbnRyb2wuYnJ0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQlJUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5icnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JSVmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVxJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydibGRjb250cm9sLkJ1aWxkUmVxdWVzdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZGVudmlyb25tZW50JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkRW52aXJvbm1lbnQnfSwKKyAgICAgICAgICAgICdhZGRyZXNzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdiYmFkZHJlc3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnYmJwb3J0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ2Jic3RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdiYnRva2VuJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyNicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2JldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZGRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZWRpcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MTInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnYmxkY29udHJvbC5idWlsZHJlcXVlc3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRSZXF1ZXN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuT25lVG9PbmVGaWVsZCcsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIiwgJ3VuaXF1ZSc6ICdUcnVlJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbnZpcm9ubWVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnYmxkY29udHJvbC5CdWlsZEVudmlyb25tZW50J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydibGRjb250cm9sJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21pZ3JhdGlvbnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC9taWdyYXRpb25zL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvbW9kZWxzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21vZGVscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjFkZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL21vZGVscy5weQpAQCAtMCwwICsxLDE2NCBAQAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworZnJvbSBkamFuZ28uY29yZS52YWxpZGF0b3JzIGltcG9ydCBNYXhWYWx1ZVZhbGlkYXRvciwgTWluVmFsdWVWYWxpZGF0b3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgUHJvamVjdExheWVyLCBQcm9qZWN0VmFyaWFibGUsIFByb2plY3RUYXJnZXQsIEJ1aWxkCisKKyMgYSBCdWlsZEVudmlyb25tZW50IGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSAiYnVpbGQvIiBkaXJlY3Rvcnkgb24gdGhlIGxvY2FsaG9zdAorY2xhc3MgQnVpbGRFbnZpcm9ubWVudChtb2RlbHMuTW9kZWwpOgorICAgIFNFUlZFUl9TVE9QUEVEID0gMAorICAgIFNFUlZFUl9TVEFSVEVEID0gMQorICAgIFNFUlZFUl9TVEFURSA9ICgKKyAgICAgICAgKFNFUlZFUl9TVE9QUEVELCAic3RvcHBlZCIpLAorICAgICAgICAoU0VSVkVSX1NUQVJURUQsICJzdGFydGVkIiksCisgICAgKQorCisgICAgVFlQRV9MT0NBTCA9IDAKKyAgICBUWVBFX1NTSCAgID0gMQorICAgIFRZUEUgPSAoCisgICAgICAgIChUWVBFX0xPQ0FMLCAibG9jYWwiKSwKKyAgICAgICAgKFRZUEVfU1NILCAic3NoIiksCisgICAgKQorCisgICAgTE9DS19GUkVFID0gMAorICAgIExPQ0tfTE9DSyA9IDEKKyAgICBMT0NLX1JVTk5JTkcgPSAyCisgICAgTE9DS19TVEFURSA9ICgKKyAgICAgICAgKExPQ0tfRlJFRSwgImZyZWUiKSwKKyAgICAgICAgKExPQ0tfTE9DSywgImxvY2siKSwKKyAgICAgICAgKExPQ0tfUlVOTklORywgInJ1bm5pbmciKSwKKyAgICApCisKKyAgICBhZGRyZXNzICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBiZXR5cGUgICAgICA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcyA9IFRZUEUpCisgICAgYmJhZGRyZXNzICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPSAyNTQsIGJsYW5rID0gVHJ1ZSkKKyAgICBiYnBvcnQgICAgICA9IG1vZGVscy5JbnRlZ2VyRmllbGQoZGVmYXVsdCA9IC0xKQorICAgIGJidG9rZW4gICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gMTI2LCBibGFuayA9IFRydWUpCisgICAgYmJzdGF0ZSAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBTRVJWRVJfU1RBVEUsIGRlZmF1bHQgPSBTRVJWRVJfU1RPUFBFRCkKKyAgICBzb3VyY2VkaXIgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDUxMiwgYmxhbmsgPSBUcnVlKQorICAgIGJ1aWxkZGlyICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoID0gNTEyLCBibGFuayA9IFRydWUpCisgICAgbG9jayAgICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBMT0NLX1NUQVRFLCBkZWZhdWx0ID0gTE9DS19GUkVFKQorICAgIGNyZWF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3dfYWRkID0gVHJ1ZSkKKyAgICB1cGRhdGVkICAgICA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93ID0gVHJ1ZSkKKworCisgICAgZGVmIGdldF9hcnRpZmFjdF90eXBlKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IG1hZ2ljCisKKyAgICAgICAgICAgICAgICAjIGZhaXIgd2FybmluZzogdGhpcyBpcyBhIG1lc3M7IHRoZXJlIGFyZSBtdWx0aXBsZSBjb21wZXRlaW5nIGFuZCBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAjIG1hZ2ljIG1vZHVsZXMgZmxvYXRpbmcgYXJvdW5kLCBzbyB3ZSB0cnkgc29tZSBvZiB0aGUgbW9zdCBjb21tb24gY29tYmluYXRpb25zCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHVidW50dSdzIHB5dGhvbi1tYWdpYyA1LjQKKyAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLm9wZW4obWFnaWMuTUFHSUNfTUlNRV9UWVBFKQorICAgICAgICAgICAgICAgICAgICBtLmxvYWQoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHB5dGhvbi1tYWdpYyAwLjQuNgorICAgICAgICAgICAgICAgICAgICBtID0gbWFnaWMuTWFnaWMobWFnaWMuTUFHSUNfTUlNRSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0uZnJvbV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHBpcCBmaWxlbWFnaWMgMS42CisgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5NYWdpYyhmbGFncz1tYWdpYy5NQUdJQ19NSU1FX1RZUEUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmlkX2ZpbGVuYW1lKHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICByZXR1cm4gImJpbmFyeS9vY3RldC1zdHJlYW0iCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBhcnRpZmFjdCB0eXBlIG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisKKyAgICBkZWYgZ2V0X2FydGlmYWN0KHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLmJldHlwZSA9PSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUw6CisgICAgICAgICAgICByZXR1cm4gb3BlbihwYXRoLCAiciIpCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGFydGlmYWN0IGRvd25sb2FkIG5vdCBpbXBsZW1lbnRlZCBmb3IgYnVpbGQgZW52aXJvbm1lbnQgdHlwZSAlcyIgJSBzZWxmLmdldF9iZXR5cGVfZGlzcGxheSgpKQorCisgICAgZGVmIGhhc19hcnRpZmFjdChzZWxmLCBwYXRoKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGlmIHNlbGYuYmV0eXBlID09IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhwYXRoKQorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZJWE1FOiBoYXMgYXJ0aWZhY3Qgbm90IGltcGxlbWVudGVkIGZvciBidWlsZCBlbnZpcm9ubWVudCB0eXBlICVzIiAlIHNlbGYuZ2V0X2JldHlwZV9kaXNwbGF5KCkpCisKKyMgYSBCdWlsZFJlcXVlc3QgaXMgYSByZXF1ZXN0IHRoYXQgdGhlIHNjaGVkdWxlciB3aWxsIGJ1aWxkIHVzaW5nIGEgQnVpbGRFbnZpcm9ubWVudAorIyB0aGUgYnVpbGQgcmVxdWVzdCBxdWV1ZSBpcyB0aGUgdGFibGUgaXRzZWxmLCBvcmRlcmVkIGJ5IHN0YXRlCisKK2NsYXNzIEJ1aWxkUmVxdWVzdChtb2RlbHMuTW9kZWwpOgorICAgIFJFUV9DUkVBVEVEID0gMAorICAgIFJFUV9RVUVVRUQgPSAxCisgICAgUkVRX0lOUFJPR1JFU1MgPSAyCisgICAgUkVRX0NPTVBMRVRFRCA9IDMKKyAgICBSRVFfRkFJTEVEID0gNAorICAgIFJFUV9ERUxFVEVEID0gNQorICAgIFJFUV9BUkNISVZFID0gNgorCisgICAgUkVRVUVTVF9TVEFURSA9ICgKKyAgICAgICAgKFJFUV9DUkVBVEVELCAiY3JlYXRlZCIpLAorICAgICAgICAoUkVRX1FVRVVFRCwgInF1ZXVlZCIpLAorICAgICAgICAoUkVRX0lOUFJPR1JFU1MsICJpbiBwcm9ncmVzcyIpLAorICAgICAgICAoUkVRX0NPTVBMRVRFRCwgImNvbXBsZXRlZCIpLAorICAgICAgICAoUkVRX0ZBSUxFRCwgImZhaWxlZCIpLAorICAgICAgICAoUkVRX0RFTEVURUQsICJkZWxldGVkIiksCisgICAgICAgIChSRVFfQVJDSElWRSwgImFyY2hpdmUiKSwKKyAgICApCisKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSAoImJydGFyZ2V0X190YXJnZXQiLCAiYnVpbGRfX3Byb2plY3RfX25hbWUiKQorCisgICAgcHJvamVjdCAgICAgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIGJ1aWxkICAgICAgID0gbW9kZWxzLk9uZVRvT25lRmllbGQoQnVpbGQsIG51bGwgPSBUcnVlKSAgICAgIyBUT0RPOiB0b2FzdGVydWkgc2hvdWxkIHNldCB0aGlzIHdoZW4gQnVpbGQgaXMgY3JlYXRlZAorICAgIGVudmlyb25tZW50ID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRFbnZpcm9ubWVudCwgbnVsbCA9IFRydWUpCisgICAgc3RhdGUgICAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXMgPSBSRVFVRVNUX1NUQVRFLCBkZWZhdWx0ID0gUkVRX0NSRUFURUQpCisgICAgY3JlYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQgPSBUcnVlKQorICAgIHVwZGF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3cgPSBUcnVlKQorCisgICAgZGVmIGdldF9kdXJhdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnVwZGF0ZWQgLSBzZWxmLmNyZWF0ZWQpLnRvdGFsX3NlY29uZHMoKQorCisgICAgZGVmIGdldF9zb3J0ZWRfdGFyZ2V0X2xpc3Qoc2VsZik6CisgICAgICAgIHRndHMgPSBzZWxmLmJydGFyZ2V0X3NldC5vcmRlcl9ieSggJ3RhcmdldCcgKTsKKyAgICAgICAgcmV0dXJuKCB0Z3RzICk7CisKKyAgICBkZWYgZ2V0X21hY2hpbmUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJydmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICVzIiAlIChzZWxmLnByb2plY3QsIHNlbGYuZ2V0X3N0YXRlX2Rpc3BsYXkoKSkKKworIyBUaGVzZSB0YWJsZXMgc3BlY2lmeSB0aGUgc2V0dGluZ3MgZm9yIHJ1bm5pbmcgYW4gYWN0dWFsIGJ1aWxkLgorIyBUaGV5IE1VU1QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRhYmxlcyBpbiBvcm0ubW9kZWxzLlByb2plY3QqCisKK2NsYXNzIEJSTGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICByZXEgICAgICAgICA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkUmVxdWVzdCkKKyAgICBuYW1lICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDEwMCkKKyAgICBnaXR1cmwgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKworY2xhc3MgQlJCaXRiYWtlKG1vZGVscy5Nb2RlbCk6CisgICAgcmVxICAgICAgICAgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZFJlcXVlc3QsIHVuaXF1ZSA9IFRydWUpICAgICMgb25seSBvbmUgYml0YmFrZSBmb3IgYSByZXF1ZXN0CisgICAgZ2l0dXJsICAgICAgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGggPTI1NCkKKyAgICBjb21taXQgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKyAgICBkaXJwYXRoICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aCA9IDI1NCkKKworY2xhc3MgQlJWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIG5hbWUgICAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB2YWx1ZSAgICAgICA9IG1vZGVscy5UZXh0RmllbGQoYmxhbmsgPSBUcnVlKQorCitjbGFzcyBCUlRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIHRhcmdldCAgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB0YXNrICAgICAgICA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKworY2xhc3MgQlJFcnJvcihtb2RlbHMuTW9kZWwpOgorICAgIHJlcSAgICAgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGRSZXF1ZXN0KQorICAgIGVycnR5cGUgICAgID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBlcnJtc2cgICAgICA9IG1vZGVscy5UZXh0RmllbGQoKQorICAgIHRyYWNlYmFjayAgID0gbW9kZWxzLlRleHRGaWVsZCgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLmVycm1zZywgc2VsZi5yZXEpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvc3NoYmVjb250cm9sbGVyLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3NzaGJlY29udHJvbGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWY0MzRiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3NzaGJlY29udHJvbGxlci5weQpAQCAtMCwwICsxLDE3OSBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNCAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworaW1wb3J0IHN5cworaW1wb3J0IHJlCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24KK2Zyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgUQorZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRFbnZpcm9ubWVudCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJUYXJnZXQsIEJSQml0YmFrZQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0b2FzdGVybWFpbiBpbXBvcnQgc2V0dGluZ3MKKworZnJvbSBiYmNvbnRyb2xsZXIgaW1wb3J0IEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLCBTaGVsbENtZEV4Y2VwdGlvbiwgQnVpbGRTZXR1cEV4Y2VwdGlvbgorCitjbGFzcyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIEROKHBhdGgpOgorICAgIHJldHVybiAiLyIuam9pbihwYXRoLnNwbGl0KCIvIilbMDotMV0pCisKK2NsYXNzIFNTSEJFQ29udHJvbGxlcihCdWlsZEVudmlyb25tZW50Q29udHJvbGxlcik6CisgICAgIiIiIEltcGxlbWVudGF0aW9uIG9mIHRoZSBCdWlsZEVudmlyb25tZW50Q29udHJvbGxlciBmb3IgdGhlIGxvY2FsaG9zdDsKKyAgICAgICAgdGhpcyBjb250cm9sbGVyIG1hbmFnZXMgdGhlIGRlZmF1bHQgYnVpbGQgZGlyZWN0b3J5LAorICAgICAgICB0aGUgc2VydmVyIHNldHVwIGFuZCBzeXN0ZW0gc3RhcnQgYW5kIHN0b3AgZm9yIHRoZSBsb2NhbGhvc3QtdHlwZSBidWlsZCBlbnZpcm9ubWVudAorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmUpOgorICAgICAgICBzdXBlcihTU0hCRUNvbnRyb2xsZXIsIHNlbGYpLl9faW5pdF9fKGJlKQorICAgICAgICBzZWxmLmRidXJsID0gc2V0dGluZ3MuZ2V0REFUQUJBU0VfVVJMKCkKKyAgICAgICAgc2VsZi5wb2t5ZGlybmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gRmFsc2UKKworICAgIGRlZiBfc2hlbGxjbWQoc2VsZiwgY29tbWFuZCwgY3dkID0gTm9uZSk6CisgICAgICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICAgICAgY3dkID0gc2VsZi5iZS5zb3VyY2VkaXIKKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic3NoICVzICdjZCAlcyAmJiAlcyciICUgKHNlbGYuYmUuYWRkcmVzcywgY3dkLCBjb21tYW5kKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgKG91dCxlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZToKKyAgICAgICAgICAgIGlmIGxlbihlcnIpID09IDA6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIGVycikKKyAgICAgICAgICAgIHJhaXNlIFNoZWxsQ21kRXhjZXB0aW9uKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvdXQuc3RyaXAoKQorCisgICAgZGVmIF9wYXRoZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zaGVsbGNtZCgidGVzdCAtZSBcIiVzXCIiICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3BhdGhjcmVhdGUoc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3NoZWxsY21kKCJta2RpciAtcCBcIiVzXCIiICUgcGF0aCkKKworICAgIGRlZiBfc2V0dXBCRShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucG9reWRpcm5hbWUgYW5kIHNlbGYuX3BhdGhleGlzdHMoc2VsZi5wb2t5ZGlybmFtZSkKKyAgICAgICAgc2VsZi5fcGF0aGNyZWF0ZShzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBzZWxmLl9zaGVsbGNtZCgiYmFzaCAtYyBcInNvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAlc1wiIiAlIChzZWxmLnBva3lkaXJuYW1lLCBzZWxmLmJlLmJ1aWxkZGlyKSkKKworICAgIGRlZiBzdGFydEJCU2VydmVyKHNlbGYsIGJyYmUpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIGNtZCA9IHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmIERBVEFCQVNFX1VSTD0lcyBzb3VyY2UgdG9hc3RlciBzdGFydCBub3dlYiBicmJlPSVzXCIiICUgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIHNlbGYuZGJ1cmwsIGJyYmUpKQorCisgICAgICAgIHBvcnQgPSAiLTEiCisgICAgICAgIGZvciBpIGluIGNtZC5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiQml0YmFrZSBzZXJ2ZXIgYWRkcmVzcyIpOgorICAgICAgICAgICAgICAgIHBvcnQgPSBpLnNwbGl0KCIgIilbLTFdCisgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kIGJpdGJha2Ugc2VydmVyIHBvcnQgIiwgcG9ydAorCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGFuZCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisgICAgICAgIHNlbGYuYmUuYmJhZGRyZXNzID0gc2VsZi5iZS5hZGRyZXNzLnNwbGl0KCJAIilbLTFdCisgICAgICAgIHNlbGYuYmUuYmJwb3J0ID0gcG9ydAorICAgICAgICBzZWxmLmJlLmJic3RhdGUgPSBCdWlsZEVudmlyb25tZW50LlNFUlZFUl9TVEFSVEVECisgICAgICAgIHNlbGYuYmUuc2F2ZSgpCisKKyAgICBkZWYgc3RvcEJCU2VydmVyKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLnBva3lkaXJuYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5pc2xheWVyc2V0CisgICAgICAgIHByaW50IHNlbGYuX3NoZWxsY21kKCJiYXNoIC1jIFwic291cmNlICVzL29lLWluaXQtYnVpbGQtZW52ICVzICYmICVzIHNvdXJjZSB0b2FzdGVyIHN0b3BcIiIgJQorICAgICAgICAgICAgKHNlbGYucG9reWRpcm5hbWUsIHNlbGYuYmUuYnVpbGRkaXIsIChsYW1iZGE6ICIiIGlmIHNlbGYuYmUuYmJ0b2tlbiBpcyBOb25lIGVsc2UgIkJCVE9LRU49JXMiICUgc2VsZi5iZS5iYnRva2VuKSgpKSkKKyAgICAgICAgc2VsZi5iZS5iYnN0YXRlID0gQnVpbGRFbnZpcm9ubWVudC5TRVJWRVJfU1RPUFBFRAorICAgICAgICBzZWxmLmJlLnNhdmUoKQorICAgICAgICBwcmludCAiU3RvcHBlZCBzZXJ2ZXIiCisKKworICAgIGRlZiBfY29weUZpbGUoc2VsZiwgZmlsZXBhdGgxLCBmaWxlcGF0aDIpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic2NwICclcycgJyVzJyIgJSAoZmlsZXBhdGgxLCBmaWxlcGF0aDIpLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnIgPSBzdWJwcm9jZXNzLlBJUEUsIHNoZWxsPVRydWUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2UgU2hlbGxDbWRFeGNlcHRpb24oZXJyKQorCisgICAgZGVmIHB1bGxGaWxlKHNlbGYsIGxvY2FsX2ZpbGVuYW1lLCByZW1vdGVfZmlsZW5hbWUpOgorICAgICAgICBfY29weUZpbGUobG9jYWxfZmlsZW5hbWUsICIlczolcyIgJSAoc2VsZi5iZS5hZGRyZXNzLCByZW1vdGVfZmlsZW5hbWUpKQorCisgICAgZGVmIHB1c2hGaWxlKHNlbGYsIGxvY2FsX2ZpbGVuYW1lLCByZW1vdGVfZmlsZW5hbWUpOgorICAgICAgICBfY29weUZpbGUoIiVzOiVzIiAlIChzZWxmLmJlLmFkZHJlc3MsIHJlbW90ZV9maWxlbmFtZSksIGxvY2FsX2ZpbGVuYW1lKQorCisgICAgZGVmIHNldExheWVycyhzZWxmLCBiaXRiYWtlcywgbGF5ZXJzKToKKyAgICAgICAgIiIiIGEgd29yZCBvZiBhdHRlbnRpb246IGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBsYXllciBmb3IgYW55IGJ1aWxkIHdpbGwgYmUgcG9reSEgIiIiCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuYmUuc291cmNlZGlyIGlzIG5vdCBOb25lCisgICAgICAgIGFzc2VydCBsZW4oYml0YmFrZXMpID09IDEKKyAgICAgICAgIyBzZXQgbGF5ZXJzIGluIHRoZSBsYXllcnNvdXJjZQorCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZDogU1NIIHNldExheWVycyIpCisgICAgICAgICMgMy4gY29uZmlndXJlIHRoZSBidWlsZCBlbnZpcm9ubWVudCwgc28gd2UgaGF2ZSBhIGNvbmYvYmJsYXllcnMuY29uZgorICAgICAgICBhc3NlcnQgc2VsZi5wb2t5ZGlybmFtZSBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9zZXR1cEJFKCkKKworICAgICAgICAjIDQuIHVwZGF0ZSB0aGUgYmJsYXllcnMuY29uZgorICAgICAgICBiYmxheWVyY29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJlLmJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdGhleGlzdHMoYmJsYXllcmNvbmYpOgorICAgICAgICAgICAgcmFpc2UgQnVpbGRTZXR1cEV4Y2VwdGlvbigiQkUgaXMgbm90IGNvbnNpc3RlbnQ6IGJibGF5ZXJzLmNvbmYgZmlsZSBtaXNzaW5nIGF0ICVzIiAlIGJibGF5ZXJjb25mKQorCisgICAgICAgIGltcG9ydCB1dWlkCisgICAgICAgIGxvY2FsX2JibGF5ZXJjb25mID0gIi90bXAvIiArIHV1aWQudXVpZDQoKSArICItYmJsYXllci5jb25mIgorCisgICAgICAgIHNlbGYucHVsbEZpbGUoYmJsYXllcmNvbmYsIGxvY2FsX2JibGF5ZXJjb25mKQorCisgICAgICAgIEJ1aWxkRW52aXJvbm1lbnRDb250cm9sbGVyLl91cGRhdGVCQkxheWVycyhsb2NhbF9iYmxheWVyY29uZiwgbGF5ZXJsaXN0KQorICAgICAgICBzZWxmLnB1c2hGaWxlKGxvY2FsX2JibGF5ZXJjb25mLCBiYmxheWVyY29uZikKKworICAgICAgICBvcy51bmxpbmsobG9jYWxfYmJsYXllcmNvbmYpCisKKyAgICAgICAgc2VsZi5pc2xheWVyc2V0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmJlLnNvdXJjZWRpciBhbmQgc2VsZi5fcGF0aGV4aXN0cyhzZWxmLmJlLmJ1aWxkZGlyKQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKHNlbGYuYmUuc291cmNlZGlyLCAiYnVpbGQiKSkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXRoZXhpc3RzKHNlbGYuYmUuYnVpbGRkaXIpCisKKyAgICBkZWYgdHJpZ2dlckJ1aWxkKHNlbGYsIGJpdGJha2UsIGxheWVycywgdmFyaWFibGVzLCB0YXJnZXRzKToKKyAgICAgICAgIyBzZXQgdXAgdGhlIGJ1aWQgZW52aXJvbm1lbnQgd2l0aCB0aGUgbmVlZGVkIGxheWVycworICAgICAgICBzZWxmLnNldExheWVycyhiaXRiYWtlLCBsYXllcnMpCisgICAgICAgIHNlbGYud3JpdGVDb25mRmlsZSgiY29uZi90b2FzdGVyLXByZS5jb25mIiwgKQorICAgICAgICBzZWxmLndyaXRlQ29uZkZpbGUoImNvbmYvdG9hc3Rlci5jb25mIiwgcmF3ID0gIklOSEVSSVQrPVwidG9hc3RlciBidWlsZGhpc3RvcnlcIiIpCisKKyAgICAgICAgIyBnZXQgdGhlIGJiIHNlcnZlciBydW5uaW5nIHdpdGggdGhlIGJ1aWxkIHJlcSBpZCBhbmQgYnVpbGQgZW52IGlkCisgICAgICAgIGJiY3RybCA9IHNlbGYuZ2V0QkJDb250cm9sbGVyKCkKKworICAgICAgICAjIHRyaWdnZXIgdGhlIGJ1aWxkIGNvbW1hbmQKKyAgICAgICAgdGFzayA9IHJlZHVjZShsYW1iZGEgeCwgeTogeCBpZiBsZW4oeSk9PSAwIGVsc2UgeSwgbWFwKGxhbWJkYSB5OiB5LnRhc2ssIHRhcmdldHMpKQorICAgICAgICBpZiBsZW4odGFzaykgPT0gMDoKKyAgICAgICAgICAgIHRhc2sgPSBOb25lCisKKyAgICAgICAgYmJjdHJsLmJ1aWxkKGxpc3QobWFwKGxhbWJkYSB4OngudGFyZ2V0LCB0YXJnZXRzKSksIHRhc2spCisKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJsb2NhbGhvc3RiZWNvbnRyb2xsZXI6IEJ1aWxkIGxhdW5jaGVkLCBleGl0aW5nLiBGb2xsb3cgYnVpbGQgbG9ncyBhdCAlcy90b2FzdGVyX3VpLmxvZyIgJSBzZWxmLmJlLmJ1aWxkZGlyKQorCisgICAgICAgICMgZGlzY29ubmVjdCBmcm9tIHRoZSBzZXJ2ZXIKKyAgICAgICAgYmJjdHJsLmRpc2Nvbm5lY3QoKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3Rlc3RzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9ibGRjb250cm9sL3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmM3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdGVzdHMucHkKQEAgLTAsMCArMSwxOTAgQEAKKyIiIgorVGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB3cml0aW5nIHRlc3RzIHVzaW5nIHRoZSB1bml0dGVzdCBtb2R1bGUuIFRoZXNlIHdpbGwgcGFzcword2hlbiB5b3UgcnVuICJtYW5hZ2UucHkgdGVzdCIuCisKK1JlcGxhY2UgdGhpcyB3aXRoIG1vcmUgYXBwcm9wcmlhdGUgdGVzdHMgZm9yIHlvdXIgYXBwbGljYXRpb24uCisiIiIKKworZnJvbSBkamFuZ28udGVzdCBpbXBvcnQgVGVzdENhc2UKKworZnJvbSBibGRjb250cm9sLmJiY29udHJvbGxlciBpbXBvcnQgQml0YmFrZUNvbnRyb2xsZXIsIEJ1aWxkU2V0dXBFeGNlcHRpb24KK2Zyb20gYmxkY29udHJvbC5sb2NhbGhvc3RiZWNvbnRyb2xsZXIgaW1wb3J0IExvY2FsaG9zdEJFQ29udHJvbGxlcgorZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgU1NIQkVDb250cm9sbGVyCitmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZEVudmlyb25tZW50LCBCdWlsZFJlcXVlc3QKK2Zyb20gYmxkY29udHJvbC5tYW5hZ2VtZW50LmNvbW1hbmRzLnJ1bmJ1aWxkcyBpbXBvcnQgQ29tbWFuZAorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCisKKyMgc3RhbmRhcmQgcG9reSBkYXRhIGhhcmRjb2RlZCBmb3IgdGVzdGluZworQklUQkFLRV9MQVlFUlMgPSBbdHlwZSgnYml0YmFrZV9pbmZvJywgKG9iamVjdCwpLCB7ICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICIiLCAiY29tbWl0IjogIkhFQUQifSldCitQT0tZX0xBWUVSUyA9IFsKKyAgICB0eXBlKCdwb2t5X2luZm8nLCAob2JqZWN0LCksIHsgIm5hbWUiOiAibWV0YSIsICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reS5naXQiLCAiZGlycGF0aCI6ICJtZXRhIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIHR5cGUoJ3Bva3lfaW5mbycsIChvYmplY3QsKSwgeyAibmFtZSI6ICJtZXRhLXlvY3RvIiwgImdpdHVybCI6ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdCIsICJkaXJwYXRoIjogIm1ldGEteW9jdG8iLCAiY29tbWl0IjogIkhFQUQifSksCisgICAgdHlwZSgncG9reV9pbmZvJywgKG9iamVjdCwpLCB7ICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwgImdpdHVybCI6ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdCIsICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIiwgImNvbW1pdCI6ICJIRUFEIn0pLAorICAgIF0KKworCisKKyMgd2UgaGF2ZSBhbiBhYnN0cmFjdCB0ZXN0IGNsYXNzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250cm9sbGVycyB1c2UgYSBzaW5nbGUgaW50ZXJmYWNlCisjIHNwZWNpZmljIGNvbnRyb2xsZXIgdGVzdHMgb25seSBuZWVkIHRvIG92ZXJyaWRlIHRoZSBfZ2V0QnVpbGRFbnZpcm9ubWVudCgpIG1ldGhvZAorCit0ZXN0X3NvdXJjZWRpciA9IG9zLmdldGVudigiVFRTX1NPVVJDRV9ESVIiKQordGVzdF9idWlsZGRpciA9IG9zLmdldGVudigiVFRTX0JVSUxEX0RJUiIpCit0ZXN0X2FkZHJlc3MgPSBvcy5nZXRlbnYoIlRUU19URVNUX0FERFJFU1MiLCAibG9jYWxob3N0IikKKworaWYgdGVzdF9zb3VyY2VkaXIgPT0gTm9uZSBvciB0ZXN0X2J1aWxkZGlyID09IE5vbmUgb3IgdGVzdF9hZGRyZXNzID09IE5vbmU6CisgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2Ugc2V0IFRUVFNfU09VUkNFX0RJUiwgVFRTX0JVSUxEX0RJUiBhbmQgVFRTX1RFU1RfQUREUkVTUyIpCisKKyMgVGhlIGJiIHNlcnZlciB3aWxsIGV4cGVjdCBhIHRvYXN0ZXItcHJlLmNvbmYgZmlsZSB0byBleGlzdC4gSWYgaXQgZG9lc24ndCBleGl0IHRoZW4gd2UgbWFrZQorIyBhbiBlbXB0eSBvbmUgaGVyZS4KK29wZW4odGVzdF9idWlsZGRpciArICdjb25mL3RvYXN0ZXItcHJlLmNvbmYnLCAnYScpLmNsb3NlKCkKKworY2xhc3MgQkVDb250cm9sbGVyVGVzdHMob2JqZWN0KToKKworICAgIGRlZiBfc2VydmVyRm9yY2VTdG9wKHNlbGYsIGJjKToKKyAgICAgICAgZXJyID0gYmMuX3NoZWxsY21kKCJuZXRzdGF0ICAtdGFwbiAyPi9kZXYvbnVsbCB8IGdyZXAgODIwMCB8IGF3ayAne3ByaW50ICQ3fScgfCBzb3J0IC1mdSB8IGN1dCAtZCBcIi9cIiAtZiAxIHwgZ3JlcCAtdiAtLSAtIHwgdGVlIC9kZXYvZmQvMiB8IHhhcmdzIC1yIGtpbGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyID09ICcnLCAiYml0YmFrZSBzZXJ2ZXIgcGlkICVzIG5vdCBzdG9wcGVkIiAlIGVycikKKworICAgIGRlZiB0ZXN0X3NlcnZlclN0YXJ0QW5kU3RvcChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLnNzaGJlY29udHJvbGxlciBpbXBvcnQgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24KKyAgICAgICAgb2JlID0gIHNlbGYuX2dldEJ1aWxkRW52aXJvbm1lbnQoKQorICAgICAgICBiYyA9IHNlbGYuX2dldEJFQ29udHJvbGxlcihvYmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KKyAgICAgICAgICAgIGJjLnNldExheWVycyhCSVRCQUtFX0xBWUVSUywgUE9LWV9MQVlFUlMpCisgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiwgIGU6CisgICAgICAgICAgICBwcmludCAiVGVzdCBza2lwcGVkIGR1ZSB0byBjb21tYW5kIG5vdCBpbXBsZW1lbnRlZCB5ZXQiCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIFdlIGFyZSBvayB3aXRoIHRoZSBleGNlcHRpb24gYXMgd2UncmUgaGFuZGxpbmcgdGhlIGdpdCBhbHJlYWR5IGV4aXN0cworICAgICAgICBleGNlcHQgQnVpbGRTZXR1cEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBiYy5wb2t5ZGlybmFtZSA9IHRlc3Rfc291cmNlZGlyCisgICAgICAgIGJjLmlzbGF5ZXJzZXQgPSBUcnVlCisKKyAgICAgICAgaG9zdG5hbWUgPSB0ZXN0X2FkZHJlc3Muc3BsaXQoIkAiKVstMV0KKworICAgICAgICAjIHRlc3Qgc3RhcnQgc2VydmVyIGFuZCBzdG9wCisgICAgICAgIGJjLnN0YXJ0QkJTZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKS5jb25uZWN0X2V4KChob3N0bmFtZSwgaW50KGJjLmJlLmJicG9ydCkpKSwgIlNlcnZlciBub3QgYW5zd2VyaW5nIikKKworICAgICAgICBiYy5zdG9wQkJTZXJ2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKS5jb25uZWN0X2V4KChob3N0bmFtZSwgaW50KGJjLmJlLmJicG9ydCkpKSwgIlNlcnZlciBub3Qgc3RvcHBlZCIpCisKKyAgICAgICAgc2VsZi5fc2VydmVyRm9yY2VTdG9wKGJjKQorCisgICAgZGVmIHRlc3RfZ2V0QkJDb250cm9sbGVyKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wuc3NoYmVjb250cm9sbGVyIGltcG9ydCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbgorICAgICAgICBvYmUgPSBzZWxmLl9nZXRCdWlsZEVudmlyb25tZW50KCkKKyAgICAgICAgYmMgPSBzZWxmLl9nZXRCRUNvbnRyb2xsZXIob2JlKQorICAgICAgICBsYXllclNldCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0dGluZyBsYXllcnMsIHNraXAgYW55IGxheWVyIGluZm8KKyAgICAgICAgICAgIGxheWVyU2V0ID0gYmMuc2V0TGF5ZXJzKEJJVEJBS0VfTEFZRVJTLCBQT0tZX0xBWUVSUykKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uOgorICAgICAgICAgICAgcHJpbnQgIlRlc3Qgc2tpcHBlZCBkdWUgdG8gY29tbWFuZCBub3QgaW1wbGVtZW50ZWQgeWV0IgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBXZSBhcmUgb2sgd2l0aCB0aGUgZXhjZXB0aW9uIGFzIHdlJ3JlIGhhbmRsaW5nIHRoZSBnaXQgYWxyZWFkeSBleGlzdHMKKyAgICAgICAgZXhjZXB0IEJ1aWxkU2V0dXBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYmMucG9reWRpcm5hbWUgPSB0ZXN0X3NvdXJjZWRpcgorICAgICAgICBiYy5pc2xheWVyc2V0ID0gVHJ1ZQorCisgICAgICAgIGJiYyA9IGJjLmdldEJCQ29udHJvbGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJiYywgQml0YmFrZUNvbnRyb2xsZXIpKQorICAgICAgICBiYy5zdG9wQkJTZXJ2ZXIoKQorCisgICAgICAgIHNlbGYuX3NlcnZlckZvcmNlU3RvcChiYykKKworY2xhc3MgTG9jYWxob3N0QkVDb250cm9sbGVyVGVzdHMoVGVzdENhc2UsIEJFQ29udHJvbGxlclRlc3RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihMb2NhbGhvc3RCRUNvbnRyb2xsZXJUZXN0cywgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKworICAgIGRlZiBfZ2V0QnVpbGRFbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgcmV0dXJuIEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUoCisgICAgICAgICAgICAgICAgbG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFLAorICAgICAgICAgICAgICAgIGJldHlwZSA9IEJ1aWxkRW52aXJvbm1lbnQuVFlQRV9MT0NBTCwKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gdGVzdF9hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNvdXJjZWRpciA9IHRlc3Rfc291cmNlZGlyLAorICAgICAgICAgICAgICAgIGJ1aWxkZGlyID0gdGVzdF9idWlsZGRpciApCisKKyAgICBkZWYgX2dldEJFQ29udHJvbGxlcihzZWxmLCBvYmUpOgorICAgICAgICByZXR1cm4gTG9jYWxob3N0QkVDb250cm9sbGVyKG9iZSkKKworY2xhc3MgU1NIQkVDb250cm9sbGVyVGVzdHMoVGVzdENhc2UsIEJFQ29udHJvbGxlclRlc3RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihTU0hCRUNvbnRyb2xsZXJUZXN0cywgc2VsZikuX19pbml0X18oKmFyZ3MpCisKKyAgICBkZWYgX2dldEJ1aWxkRW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHJldHVybiBCdWlsZEVudmlyb25tZW50Lm9iamVjdHMuY3JlYXRlKAorICAgICAgICAgICAgICAgIGxvY2sgPSBCdWlsZEVudmlyb25tZW50LkxPQ0tfRlJFRSwKKyAgICAgICAgICAgICAgICBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NILAorICAgICAgICAgICAgICAgIGFkZHJlc3MgPSB0ZXN0X2FkZHJlc3MsCisgICAgICAgICAgICAgICAgc291cmNlZGlyID0gdGVzdF9zb3VyY2VkaXIsCisgICAgICAgICAgICAgICAgYnVpbGRkaXIgPSB0ZXN0X2J1aWxkZGlyICkKKworICAgIGRlZiBfZ2V0QkVDb250cm9sbGVyKHNlbGYsIG9iZSk6CisgICAgICAgIHJldHVybiBTU0hCRUNvbnRyb2xsZXIob2JlKQorCisgICAgZGVmIHRlc3RfcGF0aEV4aXN0cyhzZWxmKToKKyAgICAgICAgb2JlID0gQnVpbGRFbnZpcm9ubWVudC5vYmplY3RzLmNyZWF0ZShiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfU1NILCBhZGRyZXNzPSB0ZXN0X2FkZHJlc3MpCisgICAgICAgIHNiYyA9IFNTSEJFQ29udHJvbGxlcihvYmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzYmMuX3BhdGhleGlzdHMoIi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzYmMuX3BhdGhleGlzdHMoIi8uZGVhZGJlZWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNiYy5fcGF0aGV4aXN0cyhzYmMuX3NoZWxsY21kKCJwd2QiKSkpCisKKworY2xhc3MgUnVuQnVpbGRzQ29tbWFuZFRlc3RzKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iZWNfc2VsZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdHMgdGhhdCB3ZSBjYW4gZmluZCBhbmQgbG9jayBhIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICIiIgorCisgICAgICAgIG9iZSA9IEJ1aWxkRW52aXJvbm1lbnQub2JqZWN0cy5jcmVhdGUobG9jayA9IEJ1aWxkRW52aXJvbm1lbnQuTE9DS19GUkVFLCBiZXR5cGUgPSBCdWlsZEVudmlyb25tZW50LlRZUEVfTE9DQUwpCisgICAgICAgIGNvbW1hbmQgPSBDb21tYW5kKCkKKyAgICAgICAgYmVjID0gY29tbWFuZC5fc2VsZWN0QnVpbGRFbnZpcm9ubWVudCgpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBvYmplY3Qgd2UndmUganVzdCBidWlsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmVjLmJlLmlkID09IG9iZS5pZCwgIkVudmlyb25tZW50IGlzIG5vdCBwcm9wZXJseSBzZWxlY3RlZCIpCisgICAgICAgICMgd2UgaGF2ZSBhIGxvY2tlZCBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmVjLmJlLmxvY2sgPT0gQnVpbGRFbnZpcm9ubWVudC5MT0NLX0xPQ0ssICJFbnZpcm9ubWVudCBpcyBub3QgbG9ja2VkIikKKyAgICAgICAgIyBubyBtb3JlIHNlbGVjdGlvbnMgcG9zc2libGUgaGVyZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBjb21tYW5kLl9zZWxlY3RCdWlsZEVudmlyb25tZW50KQorCisgICAgZGVmIHRlc3RfYnJfc2VsZWN0KHNlbGYpOgorICAgICAgICBmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFJlbGVhc2UsIEJpdGJha2VWZXJzaW9uLCBCcmFuY2gKKyAgICAgICAgcCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgidGVzdCIsIFJlbGVhc2Uub2JqZWN0cy5nZXRfb3JfY3JlYXRlKG5hbWUgPSAiSEVBRCIsIGJpdGJha2VfdmVyc2lvbiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShuYW1lPSJIRUFEIiwgYnJhbmNoPUJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT0iSEVBRCIpKVswXSlbMF0pCisgICAgICAgIG9iciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLmNyZWF0ZShzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVELCBwcm9qZWN0ID0gcCkKKyAgICAgICAgY29tbWFuZCA9IENvbW1hbmQoKQorICAgICAgICBiciA9IGNvbW1hbmQuX3NlbGVjdEJ1aWxkUmVxdWVzdCgpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2Ugc2VsZWN0IHRoZSBvYmplY3Qgd2UndmUganVzdCBidWlsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUob2JyLmlkID09IGJyLmlkLCAiUmVxdWVzdCBpcyBub3QgcHJvcGVybHkgc2VsZWN0ZWQiKQorICAgICAgICAjIHdlIGhhdmUgYSBsb2NrZWQgZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJyLnN0YXRlID09IEJ1aWxkUmVxdWVzdC5SRVFfSU5QUk9HUkVTUywgIlJlcXVlc3QgaXMgbm90IHVwZGF0ZWQiKQorICAgICAgICAjIG5vIG1vcmUgc2VsZWN0aW9ucyBwb3NzaWJsZSBoZXJlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGNvbW1hbmQuX3NlbGVjdEJ1aWxkUmVxdWVzdCkKKworCitjbGFzcyBVdGlsaXR5VGVzdHMoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlZHVjZV9wYXRoKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoLCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi8iKSA9PSAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX3JlZHVjZV9jYW5vbl9wYXRoKCIvaG9tZS8uLiIpID09ICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lLy4uL2FuYSIpID09ICIvYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lLy4uL2FuYS8uLiIpID09ICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCBfcmVkdWNlX2Nhbm9uX3BhdGgoIi9ob21lL2FuYS9taWhhaS8uLi9tYXJpYSIpID09ICIvaG9tZS9hbmEvbWFyaWEiKQorCisgICAgZGVmIHRlc3RfZ2V0X2lkX2Zvcl9zb3J1Y2V0eXBlKHNlbGYpOgorICAgICAgICBmcm9tIGJsZGNvbnRyb2wubWFuYWdlbWVudC5jb21tYW5kcy5sb2FkY29uZiBpbXBvcnQgX3JlZHVjZV9jYW5vbl9wYXRoLCBfZ2V0X2lkX2Zvcl9zb3VyY2V0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX2dldF9pZF9mb3Jfc291cmNldHlwZSgibGF5ZXJpbmRleCIpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSggX2dldF9pZF9mb3Jfc291cmNldHlwZSgibG9jYWwiKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIF9nZXRfaWRfZm9yX3NvdXJjZXR5cGUoImltcG9ydGVkIikgPT0gMikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pOgorICAgICAgICAgICAgX2dldF9pZF9mb3Jfc291cmNldHlwZSgidW5rbm93biIpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdmlld3MucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2JsZGNvbnRyb2wvdmlld3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmMDBlZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvYmxkY29udHJvbC92aWV3cy5weQpAQCAtMCwwICsxIEBACisjIENyZWF0ZSB5b3VyIHZpZXdzIGhlcmUuCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvUkVBRE1FIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQwZmYwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKK2NvbnRyaWIgZGlyZWN0b3J5IGZvciB0b2FzdGVyCisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIGNvZGUgdGhhdCB3b3JrcyB3aXRoIFRvYXN0ZXIsIHdpdGhvdXQgYmVpbmcgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgVG9hc3RlciBwcm9qZWN0LgorSXQgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgY29kZSwgdGVzdGluZyBmaXh0dXJlcywgdG9vbHMgZm9yIFRvYXN0ZXIsIGV0Yy4KKworTk9URTogVGhpcyBkaXJlY3RvcnkgaXMgTk9UIGEgUHl0aG9uIG1vZHVsZS4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NjUyZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMTAgQEAKKyoucHljCisqLnN3cAorKi5zd28KKyoua3BmCisqLmVnZy1pbmZvLworLmlkZWEKKy50b3gKK3RtcC8KK2Rpc3QvCisuRFNfU3RvcmUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8udHJhdmlzLnltbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTIwZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyLy50cmF2aXMueW1sCkBAIC0wLDAgKzEsNTAgQEAKK2xhbmd1YWdlOiBweXRob24KK3B5dGhvbjoKKyAgLSAiMi43IgorICAtICIzLjQiCitzZXJ2aWNlczoKKyAgLSBteXNxbAorICAtIHBvc3RncmVzcWwKK2VudjoKKyAgLSBESkFOR089MS40IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjQgREI9bXlzcWwKKyAgLSBESkFOR089MS40IERCPXBvc3RncmVzCisgIC0gREpBTkdPPTEuNSBEQj1zcWxpdGUKKyAgLSBESkFOR089MS41IERCPW15c3FsCisgIC0gREpBTkdPPTEuNSBEQj1wb3N0Z3JlcworICAtIERKQU5HTz0xLjYgREI9c3FsaXRlCisgIC0gREpBTkdPPTEuNiBEQj1teXNxbAorICAtIERKQU5HTz0xLjYgREI9cG9zdGdyZXMKKyAgLSBESkFOR089MS43IERCPXNxbGl0ZQorICAtIERKQU5HTz0xLjcgREI9bXlzcWwKKyAgLSBESkFOR089MS43IERCPXBvc3RncmVzCisKK21hdHJpeDoKKyAgZXhjbHVkZToKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1zcWxpdGUKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNCBEQj1teXNxbAorICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS40IERCPXBvc3RncmVzCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9c3FsaXRlCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjUgREI9bXlzcWwKKyAgICAtIHB5dGhvbjogIjMuNCIKKyAgICAgIGVudjogREpBTkdPPTEuNSBEQj1wb3N0Z3JlcworICAgIC0gcHl0aG9uOiAiMy40IgorICAgICAgZW52OiBESkFOR089MS42IERCPW15c3FsCisgICAgLSBweXRob246ICIzLjQiCisgICAgICBlbnY6IERKQU5HTz0xLjcgREI9bXlzcWwKKworYmVmb3JlX3NjcmlwdDoKKyAgLSBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgLSBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyAtVSBwb3N0Z3JlcworaW5zdGFsbDoKKyAgLSBwaXAgaW5zdGFsbCBzaXgKKyAgLSBpZiBbICIkREIiID09ICJteXNxbCIgXTsgdGhlbiBwaXAgaW5zdGFsbCBteXNxbC1weXRob247IGZpCisgIC0gaWYgWyAiJERCIiA9PSAicG9zdGdyZXMiIF07IHRoZW4gcGlwIGluc3RhbGwgcHN5Y29wZzI7IGZpCisgIC0gcGlwIGluc3RhbGwgLXEgRGphbmdvPT0kREpBTkdPIC0tdXNlLW1pcnJvcnMKK3NjcmlwdDoKKyAgLSAuL3J1bnRlc3RzLnB5IC0tc2V0dGluZ3M9dGVzdHMudGVzdF8kREIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI3YzNiMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9MSUNFTlNFCkBAIC0wLDAgKzEsMjEgQEAKK1RoZSBNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMTIgSGVucmlxdWUgQmFzdG9zCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvUkVBRE1FLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzlkNGRhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL1JFQURNRS5yc3QKQEAgLTAsMCArMSwxNTYgQEAKK0RqYW5nbyBBZ2dyZWdhdGUgSWY6IENvbmRpdGlvbiBhZ2dyZWdhdGVzIGZvciBEamFuZ28KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gaW1hZ2U6OiBodHRwczovL3RyYXZpcy1jaS5vcmcvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi5wbmc/YnJhbmNoPW1hc3RlcgorICAgIDp0YXJnZXQ6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmCisgICAgOmFsdDogVGVzdCBTdGF0dXMKKworLi4gaW1hZ2U6OiBodHRwczovL2xhbmRzY2FwZS5pby9naXRodWIvaGVucmlxdWViYXN0b3MvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9tYXN0ZXIvbGFuZHNjYXBlLnBuZworICAgIDp0YXJnZXQ6IGh0dHBzOi8vbGFuZHNjYXBlLmlvL2dpdGh1Yi9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmL21hc3RlcgorICAgIDphbHQ6IENvZGUgSGVsdGgKKworLi4gaW1hZ2U6OiBodHRwczovL3B5cGlwLmluL3YvZGphbmdvLWFnZ3JlZ2F0ZS1pZi9iYWRnZS5wbmcKKyAgICA6dGFyZ2V0OiBodHRwczovL2NyYXRlLmlvL3BhY2thZ2VzL2RqYW5nby1hZ2dyZWdhdGUtaWYvCisgICAgOmFsdDogTGF0ZXN0IFB5UEkgdmVyc2lvbgorCisuLiBpbWFnZTo6IGh0dHBzOi8vcHlwaXAuaW4vZC9kamFuZ28tYWdncmVnYXRlLWlmL2JhZGdlLnBuZworICAgIDp0YXJnZXQ6IGh0dHBzOi8vY3JhdGUuaW8vcGFja2FnZXMvZGphbmdvLWFnZ3JlZ2F0ZS1pZi8KKyAgICA6YWx0OiBOdW1iZXIgb2YgUHlQSSBkb3dubG9hZHMKKworKkFnZ3JlZ2F0ZS1pZiogYWRkcyBjb25kaXRpb25hbCBhZ2dyZWdhdGVzIHRvIERqYW5nby4KKworQ29uZGl0aW9uYWwgYWdncmVnYXRlcyBjYW4gaGVscCB5b3UgcmVkdWNlIHRoZSBhbW1vdW50IG9mIHF1ZXJpZXMgdG8gb2J0YWluCithZ2dyZWdhdGVkIGluZm9ybWF0aW9uLCBsaWtlIHN0YXRpc3RpY3MgZm9yIGV4YW1wbGUuCisKK0ltYWdpbmUgeW91IGhhdmUgYSBtb2RlbCBgYE9mZmVyYGAgbGlrZSB0aGlzIG9uZToKKworLi4gY29kZS1ibG9jazo6IHB5dGhvbgorCisgICAgY2xhc3MgT2ZmZXIobW9kZWxzLk1vZGVsKToKKyAgICAgICAgc3BvbnNvciA9IG1vZGVscy5Gb3JlaWduS2V5KFVzZXIpCisgICAgICAgIHByaWNlID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTksIGRlY2ltYWxfcGxhY2VzPTIpCisgICAgICAgIHN0YXR1cyA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMCkKKyAgICAgICAgZXhwaXJlX2F0ID0gbW9kZWxzLkRhdGVGaWVsZChudWxsPVRydWUsIGJsYW5rPVRydWUpCisgICAgICAgIGNyZWF0ZWRfYXQgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQ9VHJ1ZSkKKyAgICAgICAgdXBkYXRlZF9hdCA9IG1vZGVscy5EYXRlVGltZUZpZWxkKGF1dG9fbm93PVRydWUpCisKKyAgICAgICAgT1BFTiA9ICJPUEVOIgorICAgICAgICBSRVZPS0VEID0gIlJFVk9LRUQiCisgICAgICAgIFBBSUQgPSAiUEFJRCIKKworTGV0J3Mgc2F5IHlvdSB3YW50IHRvIGtub3c6CisKKyMuIEhvdyBtYW55IG9mZmVycyBleGlzdHMgaW4gdG90YWw7CisjLiBIb3cgbWFueSBvZiB0aGVtIGFyZSBPUEVOLCBSRVZPS0VEIG9yIFBBSUQ7CisjLiBIb3cgbXVjaCBtb25leSB3YXMgb2ZmZXJlZCBpbiB0b3RhbDsKKyMuIEhvdyBtdWNoIG1vbmV5IGlzIGluIE9QRU4sIFJFVk9LRUQgYW5kIFBBSUQgb2ZmZXJzOworCitUbyBnZXQgdGhlc2UgaW5mb3JtYXRpb25zLCB5b3UgY291bGQgcXVlcnk6CisKKy4uIGNvZGUtYmxvY2s6OiBweXRob24KKworICAgIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgQ291bnQsIFN1bQorCisgICAgT2ZmZXIub2JqZWN0cy5jb3VudCgpCisgICAgT2ZmZXIub2JqZWN0cy5maWx0ZXIoc3RhdHVzPU9mZmVyLk9QRU4pLmFnZ3JlZ2F0ZShDb3VudCgncGsnKSkKKyAgICBPZmZlci5vYmplY3RzLmZpbHRlcihzdGF0dXM9T2ZmZXIuUkVWT0tFRCkuYWdncmVnYXRlKENvdW50KCdwaycpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5QQUlEKS5hZ2dyZWdhdGUoQ291bnQoJ3BrJykpCisgICAgT2ZmZXIub2JqZWN0cy5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5PUEVOKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5SRVZPS0VEKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorICAgIE9mZmVyLm9iamVjdHMuZmlsdGVyKHN0YXR1cz1PZmZlci5QQUlEKS5hZ2dyZWdhdGUoU3VtKCdwcmljZScpKQorCitJbiB0aGlzIGNhc2UsICoqOCBxdWVyaWVzKiogd2VyZSBuZWVkZWQgdG8gcmV0cmlldmUgdGhlIGRlc2lyZWQgaW5mb3JtYXRpb24uCisKK1dpdGggY29uZGl0aW9uYWwgYWdncmVnYXRlcyB5b3UgY2FuIGdldCBpdCBhbGwgd2l0aCBvbmx5ICoqMSBxdWVyeSoqOgorCisuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICBmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKKyAgICBmcm9tIGFnZ3JlZ2F0ZV9pZiBpbXBvcnQgQ291bnQsIFN1bQorCisgICAgT2ZmZXIub2JqZWN0cy5hZ2dyZWdhdGUoCisgICAgICAgIHBrX19jb3VudD1Db3VudCgncGsnKSwKKyAgICAgICAgcGtfX29wZW5fX2NvdW50PUNvdW50KCdwaycsIG9ubHk9UShzdGF0dXM9T2ZmZXIuT1BFTikpLAorICAgICAgICBwa19fcmV2b2tlZF9fY291bnQ9Q291bnQoJ3BrJywgb25seT1RKHN0YXR1cz1PZmZlci5SRVZPS0VEKSksCisgICAgICAgIHBrX19wYWlkX19jb3VudD1Db3VudCgncGsnLCBvbmx5PVEoc3RhdHVzPU9mZmVyLlBBSUQpKSwKKyAgICAgICAgcGtfX3N1bT1TdW0oJ3ByaWNlJyksCisgICAgICAgIHBrX19vcGVuX19zdW09U3VtKCdwcmljZScsIG9ubHk9UShzdGF0dXM9T2ZmZXIuT1BFTikpLAorICAgICAgICBwa19fcmV2b2tlZF9fc3VtPVN1bSgncHJpY2UnKSwgb25seT1RKHN0YXR1cz1PZmZlci5SRVZPS0VEKSksCisgICAgICAgIHBrX19wYWlkX19zdW09U3VtKCdwcmljZScpLCBvbmx5PVEoc3RhdHVzPU9mZmVyLlBBSUQpKQorICAgICkKKworSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0KKworKkFnZ3JlZ2F0ZS1pZiogd29ya3Mgd2l0aCBEamFuZ28gMS40LCAxLjUsIDEuNiBhbmQgMS43LgorCitUbyBpbnN0YWxsIGl0LCBzaW1wbHk6CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCisKKyAgICAkIHBpcCBpbnN0YWxsIGRqYW5nby1hZ2dyZWdhdGUtaWYKKworSW5zcGlyYXRpb24KKy0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIGEgNSB5ZWFycyBvbGQgYHRpY2tldCAxMTMwNWBfIHRoYXQgd2lsbCAoKmhvcGVmdWxseSopIGltcGxlbWVudCB0aGlzIGZlYXR1cmUgaW50bworRGphbmdvIDEuOC4KKworVXNpbmcgRGphbmdvIDEuNiwgSSBzdGlsbCB3YW50ZWQgdG8gYXZvaWQgY3JlYXRpbmcgY3VzdG9tIHF1ZXJpZXMgZm9yIHZlcnkgc2ltcGxlCitjb25kaXRpb25hbCBhZ2dyZWdhdGlvbnMuIFNvIEkndmUgY2hlcnJ5IHBpY2tlZCB0aG9zZSBpZGVhcyBhbmQgb3RoZXJzIGZyb20gdGhlCitpbnRlcm5ldCBhbmQgYnVpbHQgdGhpcyBsaWJyYXJ5LgorCitUaGlzIGxpYnJhcnkgdXNlcyB0aGUgc2FtZSBBUEkgYW5kIHRlc3RzIHByb3Bvc2VkIG9uIGB0aWNrZXQgMTEzMDVgXywgc28gd2hlbiB0aGUKK25ldyBmZWF0dXJlIGlzIGF2YWlsYWJsZSB5b3UgY2FuIGVhc2lseSByZXBsYWNlIGBgZGphbmdvLWFnZ3JlZ2F0ZS1pZmBgLgorCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworQ29uZGl0aW9ucyBpbnZvbHZpbmcgam9pbnMgd2l0aCBhbGlhc2VzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gSWYgeW91IHdhbnQgdG8KK2hlbHAgYWRkaW5nIHRoaXMgZmVhdHVyZSwgeW91J3JlIHdlbGNvbWUgdG8gY2hlY2sgdGhlIGBmaXJzdCBpc3N1ZWBfLgorCitDb250cmlidXRvcnMKKy0tLS0tLS0tLS0tLQorCisqIGBIZW5yaXF1ZSBCYXN0b3MgPGh0dHA6Ly9naXRodWIuY29tL2hlbnJpcXVlYmFzdG9zPmBfCisqIGBJdXJpIGRlIFNpbHZpbyA8aHR0cHM6Ly9naXRodWIuY29tL2l1cmlzaWx2aW8+YF8KKyogYEhhbXB1cyBTdGplcm5oYXYgPGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFtcD5gXworKiBgQnJhZGxleSBNYXJ0c2JlcmdlciA8aHR0cHM6Ly9naXRodWIuY29tL21hcnRzYmVyZ2VyPmBfCisqIGBNYXJrdXMgQmVydGhlYXUgPGh0dHBzOi8vZ2l0aHViLmNvbS9tYmVydGhlYXU+YF8KKyogYGVuZDAgPGh0dHBzOi8vZ2l0aHViLmNvbS9lbmQwPmBfCisqIGBTY290dCBTZXh0b24gPGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHNleHRvbj5gXworKiBgTWF1bGVyIDxodHRwczovL2dpdGh1Yi5jb20vbWF1bGVyPmBfCisqIGB0cmJzIDxodHRwczovL2dpdGh1Yi5jb20vdHJicz5gXworCitDaGFuZ2Vsb2cKKy0tLS0tLS0tLQorCiswLjUKKyAgICAtIFN1cHBvcnQgZm9yIERqYW5nbyAxLjcKKworMC40CisgICAgLSBVc2UgdG94IHRvIHJ1biB0ZXN0cy4KKyAgICAtIEFkZCBzdXBwb3J0IGZvciBEamFuZ28gMS42LgorICAgIC0gQWRkIHN1cHBvcnQgZm9yIFB5dGhvbjMuCisgICAgLSBUaGUgYGBvbmx5YGAgcGFyYW1ldGVyIG5vdyBmcmVlbHkgc3VwcG9ydHMgam9pbnMgaW5kZXBlbmRlbnQgb2YgdGhlIG1haW4gcXVlcnkuCisgICAgLSBBZGRzIHN1cHBvcnQgZm9yIGFsaWFzIHJlbGFiZWxpbmcgcGVybWl0dGluZyBleGNsdWRlcyBhbmQgdXBkYXRlcyB3aXRoIGFnZ3JlZ2F0ZXMgZmlsdGVyZWQgb24gcmVtb3RlIGZvcmVpZ24ga2V5IHJlbGF0aW9ucy4KKworMC4zLjEKKyAgICAtIEZpeCBxdW90YXRpb24gZXNjYXBpbmcuCisgICAgLSBGaXggYm9vbGVhbiBjYXN0cyBvbiBQb3N0Z3Jlcy4KKworMC4yCisgICAgLSBGaXggcG9zdGdyZXMgaXNzdWUgd2l0aCBMSUtFIGNvbmRpdGlvbnMuCisKKzAuMQorICAgIC0gSW5pdGlhbCByZWxlYXNlLgorCisKK0xpY2Vuc2UKKz09PT09PT0KKworVGhlIE1JVCBMaWNlbnNlLgorCisuLiBfdGlja2V0IDExMzA1OiBodHRwczovL2NvZGUuZGphbmdvcHJvamVjdC5jb20vdGlja2V0LzExMzA1CisuLiBfZmlyc3QgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZW5yaXF1ZWJhc3Rvcy9kamFuZ28tYWdncmVnYXRlLWlmL2lzc3Vlcy8xCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIvYWdncmVnYXRlX2lmLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL2FnZ3JlZ2F0ZV9pZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWYzNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL2FnZ3JlZ2F0ZV9pZi5weQpAQCAtMCwwICsxLDE2NCBAQAorIyBjb2Rpbmc6IHV0Zi04CisnJycKK0ltcGxlbWVudHMgY29uZGl0aW9uYWwgYWdncmVnYXRlcy4KKworVGhpcyBjb2RlIHdhcyBiYXNlZCBvbiB0aGUgd29yayBvZiBvdGhlcnMgZm91bmQgb24gdGhlIGludGVybmV0OgorCisxLiBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMTExNTE3MDgwNC9odHRwOi8vd3d3LnZvdGVydW5pdmVyc2UuY29tL01lbWJlcnMvamxhbnR6L2Jsb2cvY29uZGl0aW9uYWwtYWdncmVnYXRlcy1pbi1kamFuZ28KKzIuIGh0dHBzOi8vY29kZS5kamFuZ29wcm9qZWN0LmNvbS90aWNrZXQvMTEzMDUKKzMuIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHM9IyF0b3BpYy9kamFuZ28tdXNlcnMvY2p6bG9UVXdtUzAKKzQuIGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vP2Zyb21ncm91cHM9IyF0b3BpYy9kamFuZ28tdXNlcnMvdlZwck1wc0FuUG8KKycnJworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2l4CitpbXBvcnQgZGphbmdvCitmcm9tIGRqYW5nby5kYi5tb2RlbHMuYWdncmVnYXRlcyBpbXBvcnQgQWdncmVnYXRlIGFzIERqYW5nb0FnZ3JlZ2F0ZQorZnJvbSBkamFuZ28uZGIubW9kZWxzLnNxbC5hZ2dyZWdhdGVzIGltcG9ydCBBZ2dyZWdhdGUgYXMgRGphbmdvU3FsQWdncmVnYXRlCisKKworVkVSU0lPTiA9IGRqYW5nby5WRVJTSU9OWzoyXQorCisKK2NsYXNzIFNxbEFnZ3JlZ2F0ZShEamFuZ29TcWxBZ2dyZWdhdGUpOgorICAgIGNvbmRpdGlvbmFsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyhDQVNFIFdIRU4gJShjb25kaXRpb24pcyBUSEVOICUoZmllbGQpcyBFTFNFIG51bGwgRU5EKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2wsIHNvdXJjZT1Ob25lLCBpc19zdW1tYXJ5PUZhbHNlLCBjb25kaXRpb249Tm9uZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKFNxbEFnZ3JlZ2F0ZSwgc2VsZikuX19pbml0X18oY29sLCBzb3VyY2UsIGlzX3N1bW1hcnksICoqZXh0cmEpCisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gY29uZGl0aW9uCisKKyAgICBkZWYgcmVsYWJlbF9hbGlhc2VzKHNlbGYsIGNoYW5nZV9tYXApOgorICAgICAgICBpZiBWRVJTSU9OIDwgKDEsIDcpOgorICAgICAgICAgICAgc3VwZXIoU3FsQWdncmVnYXRlLCBzZWxmKS5yZWxhYmVsX2FsaWFzZXMoY2hhbmdlX21hcCkKKyAgICAgICAgaWYgc2VsZi5oYXNfY29uZGl0aW9uOgorICAgICAgICAgICAgY29uZGl0aW9uX2NoYW5nZV9tYXAgPSBkaWN0KChrLCB2KSBmb3IgaywgdiBpbiBcCisgICAgICAgICAgICAgICAgY2hhbmdlX21hcC5pdGVtcygpIGlmIGsgaW4gc2VsZi5jb25kaXRpb24ucXVlcnkuYWxpYXNfbWFwCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmNvbmRpdGlvbi5xdWVyeS5jaGFuZ2VfYWxpYXNlcyhjb25kaXRpb25fY2hhbmdlX21hcCkKKworICAgIGRlZiByZWxhYmVsZWRfY2xvbmUoc2VsZiwgY2hhbmdlX21hcCk6CisgICAgICAgIHNlbGYucmVsYWJlbF9hbGlhc2VzKGNoYW5nZV9tYXApCisgICAgICAgIHJldHVybiBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLnJlbGFiZWxlZF9jbG9uZShjaGFuZ2VfbWFwKQorCisgICAgZGVmIGFzX3NxbChzZWxmLCBxbiwgY29ubmVjdGlvbik6CisgICAgICAgIGlmIHNlbGYuaGFzX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc3FsX3RlbXBsYXRlID0gc2VsZi5jb25kaXRpb25hbF90ZW1wbGF0ZQorICAgICAgICAgICAgc2VsZi5leHRyYVsnY29uZGl0aW9uJ10gPSBzZWxmLl9jb25kaXRpb25fYXNfc3FsKHFuLCBjb25uZWN0aW9uKQorCisgICAgICAgIHJldHVybiBzdXBlcihTcWxBZ2dyZWdhdGUsIHNlbGYpLmFzX3NxbChxbiwgY29ubmVjdGlvbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfY29uZGl0aW9uKHNlbGYpOgorICAgICAgICAjIFdhcm5pbmc6IGJvb2woUXVlcnlTZXQpIHdpbGwgaGl0IHRoZSBkYXRhYmFzZQorICAgICAgICByZXR1cm4gc2VsZi5jb25kaXRpb24gaXMgbm90IE5vbmUKKworICAgIGRlZiBfY29uZGl0aW9uX2FzX3NxbChzZWxmLCBxbiwgY29ubmVjdGlvbik6CisgICAgICAgICcnJworICAgICAgICBSZXR1cm4gc3FsIGZvciBjb25kaXRpb24uCisgICAgICAgICcnJworICAgICAgICBkZWYgZXNjYXBlKHZhbHVlKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RyKGludCh2YWx1ZSkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgICAgICAjIEVzY2FwZSBwYXJhbXMgdXNlZCB3aXRoIExJS0UKKyAgICAgICAgICAgICAgICBpZiAnJScgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnJScsICclJScpCisgICAgICAgICAgICAgICAgIyBFc2NhcGUgc2luZ2xlIHF1b3RlcworICAgICAgICAgICAgICAgIGlmICInIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCInIiwgIicnIikKKyAgICAgICAgICAgICAgICAjIEFkZCBzaW5nbGUgcXVvdGUgdG8gdGV4dCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICInIiArIHZhbHVlICsgIiciCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICBzcWwsIHBhcmFtID0gc2VsZi5jb25kaXRpb24ucXVlcnkud2hlcmUuYXNfc3FsKHFuLCBjb25uZWN0aW9uKQorICAgICAgICBwYXJhbSA9IG1hcChlc2NhcGUsIHBhcmFtKQorCisgICAgICAgIHJldHVybiBzcWwgJSB0dXBsZShwYXJhbSkKKworCitjbGFzcyBTcWxTdW0oU3FsQWdncmVnYXRlKToKKyAgICBzcWxfZnVuY3Rpb24gPSAnU1VNJworCisKK2NsYXNzIFNxbENvdW50KFNxbEFnZ3JlZ2F0ZSk6CisgICAgaXNfb3JkaW5hbCA9IFRydWUKKyAgICBzcWxfZnVuY3Rpb24gPSAnQ09VTlQnCisgICAgc3FsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyglKGRpc3RpbmN0KXMlKGZpZWxkKXMpJworICAgIGNvbmRpdGlvbmFsX3RlbXBsYXRlID0gJyUoZnVuY3Rpb24pcyglKGRpc3RpbmN0KXNDQVNFIFdIRU4gJShjb25kaXRpb24pcyBUSEVOICUoZmllbGQpcyBFTFNFIG51bGwgRU5EKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2wsIGRpc3RpbmN0PUZhbHNlLCAqKmV4dHJhKToKKyAgICAgICAgc3VwZXIoU3FsQ291bnQsIHNlbGYpLl9faW5pdF9fKGNvbCwgZGlzdGluY3Q9ZGlzdGluY3QgYW5kICdESVNUSU5DVCAnIG9yICcnLCAqKmV4dHJhKQorCisKK2NsYXNzIFNxbEF2ZyhTcWxBZ2dyZWdhdGUpOgorICAgIGlzX2NvbXB1dGVkID0gVHJ1ZQorICAgIHNxbF9mdW5jdGlvbiA9ICdBVkcnCisKKworY2xhc3MgU3FsTWF4KFNxbEFnZ3JlZ2F0ZSk6CisgICAgc3FsX2Z1bmN0aW9uID0gJ01BWCcKKworCitjbGFzcyBTcWxNaW4oU3FsQWdncmVnYXRlKToKKyAgICBzcWxfZnVuY3Rpb24gPSAnTUlOJworCisKK2NsYXNzIEFnZ3JlZ2F0ZShEamFuZ29BZ2dyZWdhdGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29rdXAsIG9ubHk9Tm9uZSwgKipleHRyYSk6CisgICAgICAgIHN1cGVyKEFnZ3JlZ2F0ZSwgc2VsZikuX19pbml0X18obG9va3VwLCAqKmV4dHJhKQorICAgICAgICBzZWxmLm9ubHkgPSBvbmx5CisgICAgICAgIHNlbGYuY29uZGl0aW9uID0gTm9uZQorCisgICAgZGVmIF9nZXRfZmllbGRzX2Zyb21fUShzZWxmLCBxKToKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgZm9yIGNoaWxkIGluIHEuY2hpbGRyZW46CisgICAgICAgICAgICBpZiBoYXNhdHRyKGNoaWxkLCAnY2hpbGRyZW4nKToKKyAgICAgICAgICAgICAgICBmaWVsZHMuZXh0ZW5kKHNlbGYuX2dldF9maWVsZHNfZnJvbV9RKGNoaWxkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZChjaGlsZCkKKyAgICAgICAgcmV0dXJuIGZpZWxkcworCisgICAgZGVmIGFkZF90b19xdWVyeShzZWxmLCBxdWVyeSwgYWxpYXMsIGNvbCwgc291cmNlLCBpc19zdW1tYXJ5KToKKyAgICAgICAgaWYgc2VsZi5vbmx5OgorICAgICAgICAgICAgc2VsZi5jb25kaXRpb24gPSBxdWVyeS5tb2RlbC5fZGVmYXVsdF9tYW5hZ2VyLmZpbHRlcihzZWxmLm9ubHkpCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5fZ2V0X2ZpZWxkc19mcm9tX1Eoc2VsZi5vbmx5KToKKyAgICAgICAgICAgICAgICBmaWVsZF9saXN0ID0gY2hpbGRbMF0uc3BsaXQoJ19fJykKKyAgICAgICAgICAgICAgICAjIFBvcCBvZmYgdGhlIGxhc3QgZmllbGQgaWYgaXQncyBhIHF1ZXJ5IHRlcm0gKCdndGUnLCAnY29udGFpbnMnLCAnaXNudWxsJywgZXRjLikKKyAgICAgICAgICAgICAgICBpZiBmaWVsZF9saXN0Wy0xXSBpbiBxdWVyeS5xdWVyeV90ZXJtczoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wb3AoKQorICAgICAgICAgICAgICAgICMgc2V0dXBfam9pbnMgaGF2ZSBkaWZmZXJlbnQgcmV0dXJucyBpbiBEamFuZ28gMS41IGFuZCAxLjYsIGJ1dCB0aGUgb3JkZXIgb2Ygd2hhdCB3ZSBuZWVkIHJlbWFpbnMuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcXVlcnkuc2V0dXBfam9pbnMoZmllbGRfbGlzdCwgcXVlcnkubW9kZWwuX21ldGEsIHF1ZXJ5LmdldF9pbml0aWFsX2FsaWFzKCksIE5vbmUpCisgICAgICAgICAgICAgICAgam9pbl9saXN0ID0gcmVzdWx0WzNdCisKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICdwcm9tb3RlX2FsaWFzX2NoYWluJyBpZiBWRVJTSU9OIDwgKDEsIDUpIGVsc2UgJ3Byb21vdGVfam9pbnMnCisgICAgICAgICAgICAgICAgYXJncyA9IChqb2luX2xpc3QsIFRydWUpIGlmIFZFUlNJT04gPCAoMSwgNykgZWxzZSAoam9pbl9saXN0LCkKKworICAgICAgICAgICAgICAgIHByb21vdGUgPSBnZXRhdHRyKHF1ZXJ5LCBmbmFtZSkKKyAgICAgICAgICAgICAgICBwcm9tb3RlKCphcmdzKQorCisgICAgICAgIGFnZ3JlZ2F0ZSA9IHNlbGYuc3FsX2tsYXNzKGNvbCwgc291cmNlPXNvdXJjZSwgaXNfc3VtbWFyeT1pc19zdW1tYXJ5LCBjb25kaXRpb249c2VsZi5jb25kaXRpb24sICoqc2VsZi5leHRyYSkKKyAgICAgICAgcXVlcnkuYWdncmVnYXRlc1thbGlhc10gPSBhZ2dyZWdhdGUKKworCitjbGFzcyBTdW0oQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ1N1bScKKyAgICBzcWxfa2xhc3MgPSBTcWxTdW0KKworCitjbGFzcyBDb3VudChBZ2dyZWdhdGUpOgorICAgIG5hbWUgPSAnQ291bnQnCisgICAgc3FsX2tsYXNzID0gU3FsQ291bnQKKworCitjbGFzcyBBdmcoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ0F2ZycKKyAgICBzcWxfa2xhc3MgPSBTcWxBdmcKKworCitjbGFzcyBNYXgoQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ01heCcKKyAgICBzcWxfa2xhc3MgPSBTcWxNYXgKKworCitjbGFzcyBNaW4oQWdncmVnYXRlKToKKyAgICBuYW1lID0gJ01pbicKKyAgICBzcWxfa2xhc3MgPSBTcWxNaW4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9ydW50ZXN0cy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9ydW50ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZTU1ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3J1bnRlc3RzLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCisKK2RlZiBwYXJzZV9hcmdzKCk6CisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZXR0aW5ncycsIGhlbHA9J0RlZmluZSBzZXR0aW5ncy4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXVuaXR0ZXN0JywgaGVscD0nRGVmaW5lIHdoaWNoIHRlc3QgdG8gcnVuLiBEZWZhdWx0IGFsbC4nKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5zZXR0aW5nczoKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9wdGlvbnMudW5pdHRlc3Q6CisgICAgICAgIG9wdGlvbnMudW5pdHRlc3QgPSBbJ2FnZ3JlZ2F0aW9uJ10KKworICAgIHJldHVybiBvcHRpb25zCisKKworZGVmIGdldF9ydW5uZXIoc2V0dGluZ3NfbW9kdWxlKToKKyAgICAnJycKKyAgICBBc2tzIERqYW5nbyBmb3IgdGhlIFRlc3RSdW5uZXIgZGVmaW5lZCBpbiBzZXR0aW5ncyBvciB0aGUgZGVmYXVsdCBvbmUuCisgICAgJycnCisgICAgb3MuZW52aXJvblsnREpBTkdPX1NFVFRJTkdTX01PRFVMRSddID0gc2V0dGluZ3NfbW9kdWxlCisKKyAgICBpbXBvcnQgZGphbmdvCisgICAgZnJvbSBkamFuZ28udGVzdC51dGlscyBpbXBvcnQgZ2V0X3J1bm5lcgorICAgIGZyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCisKKyAgICBpZiBoYXNhdHRyKGRqYW5nbywgJ3NldHVwJyk6CisgICAgICAgIGRqYW5nby5zZXR1cCgpCisKKyAgICByZXR1cm4gZ2V0X3J1bm5lcihzZXR0aW5ncykKKworCitkZWYgcnVudGVzdHMoKToKKyAgICBvcHRpb25zID0gcGFyc2VfYXJncygpCisgICAgVGVzdFJ1bm5lciA9IGdldF9ydW5uZXIob3B0aW9ucy5zZXR0aW5ncykKKyAgICBydW5uZXIgPSBUZXN0UnVubmVyKHZlcmJvc2l0eT0xLCBpbnRlcmFjdGl2ZT1UcnVlLCBmYWlsZmFzdD1GYWxzZSkKKyAgICBzeXMuZXhpdChydW5uZXIucnVuX3Rlc3RzKFtdKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bnRlc3RzKCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9zZXR1cC5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci9zZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWQzZGIxCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3NldHVwLnB5CkBAIC0wLDAgKzEsMzMgQEAKKyMgY29kaW5nOiB1dGYtOAorZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAoraW1wb3J0IG9zCisKKworc2V0dXAobmFtZT0nZGphbmdvLWFnZ3JlZ2F0ZS1pZicsCisgICAgICB2ZXJzaW9uPScwLjUnLAorICAgICAgZGVzY3JpcHRpb249J0NvbmRpdGlvbmFsIGFnZ3JlZ2F0ZXMgZm9yIERqYW5nbywganVzdCBsaWtlIHRoZSBmYW1vdXMgU3VtSWYgaW4gRXhjZWwuJywKKyAgICAgIGxvbmdfZGVzY3JpcHRpb249b3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIlJFQURNRS5yc3QiKSkucmVhZCgpLAorICAgICAgYXV0aG9yPSJIZW5yaXF1ZSBCYXN0b3MiLCBhdXRob3JfZW1haWw9ImhlbnJpcXVlQGJhc3Rvcy5uZXQiLAorICAgICAgbGljZW5zZT0iTUlUIiwKKyAgICAgIHB5X21vZHVsZXM9WydhZ2dyZWdhdGVfaWYnXSwKKyAgICAgIGluc3RhbGxfcmVxdWlyZXM9WworICAgICAgICAgICdzaXg+PTEuNi4xJywKKyAgICAgIF0sCisgICAgICB6aXBfc2FmZT1GYWxzZSwKKyAgICAgIHBsYXRmb3Jtcz0nYW55JywKKyAgICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCisgICAgICBjbGFzc2lmaWVycz1bCisgICAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA1IC0gUHJvZHVjdGlvbi9TdGFibGUnLAorICAgICAgICAgICdGcmFtZXdvcmsgOjogRGphbmdvJywKKyAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsCisgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKKyAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywKKyAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsCisgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCisgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAorICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMycsCisgICAgICAgICAgJ1RvcGljIDo6IERhdGFiYXNlJywKKyAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKKyAgICAgIF0sCisgICAgICB1cmw9J2h0dHA6Ly9naXRodWIuY29tL2hlbnJpcXVlYmFzdG9zL2RqYW5nby1hZ2dyZWdhdGUtaWYvJywKKykKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL2RqYW5nby1hZ2dyZWdhdGUtaWYtbWFzdGVyL3RveC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiZWIxNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi9kamFuZ28tYWdncmVnYXRlLWlmLW1hc3Rlci90b3guaW5pCkBAIC0wLDAgKzEsMTk4IEBACitbdG94XQorZW52bGlzdCA9CisgICAgcHkyNy1kamFuZ28xLjQtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS40LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS40LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjUtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS41LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS41LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjYtc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS42LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS42LW15c3FsLAorCisgICAgcHkyNy1kamFuZ28xLjctc3FsaXRlLAorICAgIHB5MjctZGphbmdvMS43LXBvc3RncmVzLAorICAgIHB5MjctZGphbmdvMS43LW15c3FsLAorCisgICAgcHkzNC1kamFuZ28xLjYtc3FsaXRlLAorICAgIHB5MzQtZGphbmdvMS42LXBvc3RncmVzLAorICAgICNweTM0LWRqYW5nbzEuNi1teXNxbAorCisgICAgcHkzNC1kamFuZ28xLjctc3FsaXRlLAorICAgIHB5MzQtZGphbmdvMS43LXBvc3RncmVzLAorICAgICNweTM0LWRqYW5nbzEuNy1teXNxbAorCitbdGVzdGVudl0KK3doaXRlbGlzdF9leHRlcm5hbHM9CisgICAgbXlzcWwKKyAgICBwc3FsCisKKyMgUHl0aG9uIDIuNworIyBEamFuZ28gMS40CitbdGVzdGVudjpweTI3LWRqYW5nbzEuNC1zcWxpdGVdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorY29tbWFuZHMgPSBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3NxbGl0ZQorCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNC1wb3N0Z3Jlc10KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS40CisgICAgcHN5Y29wZzIKK2NvbW1hbmRzID0KKyAgICBwc3FsIC1jICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfcG9zdGdyZXMKKyAgICBwc3FsIC1jICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjQtbXlzcWxdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNAorICAgIG15c3FsLXB5dGhvbgorY29tbWFuZHMgPQorICAgIG15c3FsIC1lICdjcmVhdGUgZGF0YWJhc2UgYWdncmVnYXRpb247JworICAgIHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3RfbXlzcWwKKyAgICBteXNxbCAtZSAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisKKyMgRGphbmdvIDEuNQorW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjUtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkyNy1kamFuZ28xLjUtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMi43CitkZXBzID0KKyAgICBkamFuZ289PTEuNQorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS41LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjUKKyAgICBteXNxbC1weXRob24KK2NvbW1hbmRzID0KKyAgICBteXNxbCAtZSAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X215c3FsCisgICAgbXlzcWwgLWUgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JworCisjIERqYW5nbyAxLjYKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS42LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS42LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNi1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS42CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAyLjcgYW5kIERqYW5nbyAxLjcKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS43LXNxbGl0ZV0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43Citjb21tYW5kcyA9IHB5dGhvbiBydW50ZXN0cy5weSAtLXNldHRpbmdzIHRlc3RzLnRlc3Rfc3FsaXRlCisKK1t0ZXN0ZW52OnB5MjctZGphbmdvMS43LXBvc3RncmVzXQorYmFzZXB5dGhvbiA9IHB5dGhvbjIuNworZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBwc3ljb3BnMgorY29tbWFuZHMgPQorICAgIHBzcWwgLWMgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9wb3N0Z3JlcworICAgIHBzcWwgLWMgJ2Ryb3AgZGF0YWJhc2UgYWdncmVnYXRpb247JyBwb3N0Z3JlcworCitbdGVzdGVudjpweTI3LWRqYW5nbzEuNy1teXNxbF0KK2Jhc2VweXRob24gPSBweXRob24yLjcKK2RlcHMgPQorICAgIGRqYW5nbz09MS43CisgICAgbXlzcWwtcHl0aG9uCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAzLjQKKyMgRGphbmdvIDEuNgorW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjYtc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjYtcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMy40CitkZXBzID0KKyAgICBkamFuZ289PTEuNgorICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS42LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjYKKyAgICBteXNxbC1weXRob24zCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKKworCisjIFB5dGhvbiAzLjQKKyMgRGphbmdvIDEuNworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjctc3FsaXRlXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKK2NvbW1hbmRzID0gcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9zcWxpdGUKKworW3Rlc3RlbnY6cHkzNC1kamFuZ28xLjctcG9zdGdyZXNdCitiYXNlcHl0aG9uID0gcHl0aG9uMy40CitkZXBzID0KKyAgICBkamFuZ289PTEuNworICAgIHBzeWNvcGcyCitjb21tYW5kcyA9CisgICAgcHNxbCAtYyAnY3JlYXRlIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycgcG9zdGdyZXMKKyAgICBweXRob24gcnVudGVzdHMucHkgLS1zZXR0aW5ncyB0ZXN0cy50ZXN0X3Bvc3RncmVzCisgICAgcHNxbCAtYyAnZHJvcCBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnIHBvc3RncmVzCisKK1t0ZXN0ZW52OnB5MzQtZGphbmdvMS43LW15c3FsXQorYmFzZXB5dGhvbiA9IHB5dGhvbjMuNAorZGVwcyA9CisgICAgZGphbmdvPT0xLjcKKyAgICBteXNxbC1weXRob24zCitjb21tYW5kcyA9CisgICAgbXlzcWwgLWUgJ2NyZWF0ZSBkYXRhYmFzZSBhZ2dyZWdhdGlvbjsnCisgICAgcHl0aG9uIHJ1bnRlc3RzLnB5IC0tc2V0dGluZ3MgdGVzdHMudGVzdF9teXNxbAorICAgIG15c3FsIC1lICdkcm9wIGRhdGFiYXNlIGFnZ3JlZ2F0aW9uOycKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmYTU2NwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvUkVBRE1FCkBAIC0wLDAgKzEsNDEgQEAKKworVG9hc3RlciBUZXN0aW5nIEZyYW1ld29yaworWW9jdG8gUHJvamVjdAorCisKK1JhdGlvbmFsZQorLS0tLS0tLS0tLS0tCitBcyBUb2FzdGVyIGNvbnRyaWJ1dGlvbnMgZ3JvdyB3aXRoIHRoZSBudW1iZXIgb2YgcGVvcGxlIHRoYXQgY29udHJpYnV0ZSBjb2RlLCB2ZXJpZnlpbmcgZWFjaCBwYXRjaCBwcmlvciB0byBzdWJtaXR0aW5nIHVwc3RyZWFtIGJlY29tZXMgYSBoYXJkLXRvLXNjYWxlIHByb2JsZW0gZm9yIGh1bWFucy4gV2UgZGV2aXNlZCB0aGlzIHN5c3RlbSBpbiBvcmRlciB0byBydW4gcGF0Y2gtbGV2ZWwgdmFsaWRhdGlvbiwgdHJ5aW5nIHRvIGVsaW1pbmF0ZSBjb21tb24gcHJvYmxlbXMgZnJvbSBzdWJtaXR0ZWQgcGF0Y2hlcywgaW4gYW4gYXV0b21hdGVkIGZhc2hpb24uCisKK1RoZSBUb2FzdGVyIFRlc3RpbmcgRnJhbWV3b3JrIGlzIGEgc2V0IG9mIFB5dGhvbiBzY3JpcHRzIHRoYXQgcHJvdmlkZXMgYW4gZXh0ZW5zaWJsZSB3YXkgdG8gd3JpdGUgc21va2UgYW5kIHJlZ3Jlc3Npb24gdGVzdHMgdGhhdCB3aWxsIGJlIHJ1biBvbiBlYWNoIHBhdGNoIHNldCBzZW50IGZvciByZXZpZXcgb24gdGhlIHRvYXN0ZXIgbWFpbGluZyBsaXN0LgorCisKK1VzYWdlCistLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0aHJlZSBtYWluIGV4ZWN1dGFibGUgc2NyaXB0cyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAqICAgIHJ1bm5lci5weSAgaXMgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gSXQgcmVxdWlyZXMsIGFzIG1hbmRhdG9yeSBwYXJhbWV0ZXIsIGEgYnJhbmNoIG5hbWUgb24gcG9reS1jb250cmliLCBicmFuY2ggd2hpY2ggY29udGFpbnMgdGhlIHBhdGNoZXMgdG8gYmUgdGVzdGVkLiBUaGUgcHJvZ3JhbSB3aWxsIGF1dG8tZGlzY292ZXIgdGhlIGF2YWlsYWJsZSB0ZXN0cyByZXNpZGluZyBpbiB0aGlzIGRpcmVjdG9yeSBieSBsb29raW5nIGZvciB1bml0dGVzdCBjbGFzc2VzLCBhbmQgd2lsbCBydW4gdGhlIHRlc3RzIG9uIHRoZSBicmFuY2ggZHVtcGluZyB0aGUgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuIE9wdGlvbmFsbHksIGl0IGNhbiB0YWtlIHBhcmFtZXRlcnMgaW5oaWJpdGluZyB0aGUgYnJhbmNoIGNoZWNrb3V0LCBvciBzcGVjaWZ5aW5nIGEgc2luZ2xlIHRlc3QgdG8gYmUgcnVuLCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICogICAgbGF1bmNoZXIucHkgIGlzIGEgZGVzaWduZWQgdG8gYmUgcnVuIGZyb20gYSBjcm9udGFiIG9yIHNpbWlsYXIgc2NoZWR1bGluZyBtZWNoYW5pc20uIEl0IGxvb2tzIHVwIGEgYmFja2xvZyBmaWxlIGNvbnRhaW5pbmcgYnJhbmNoZXMtdG8tdGVzdCAobmFtZWQgdGFza3MgaW4gdGhlIHNvdXJjZSBjb2RlKSwgc2VsZWN0IHRoZSBmaXJzdCBvbmUgaW4gRklGTyBtYW5uZXIsIGFuZCBsYXVuY2ggcnVubmVyLnB5IG9uIGl0LiBJdCB3aWxsIGF3YWl0IGZvciBjb21wbGV0aW9uLCBhbmQgZW1haWwgdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3IgZHVtcHMgZnJvbSB0aGUgcnVubmVyLnB5IGV4ZWN1dGlvbgorICAgICogICAgcmVjdi5weSAgaXMgYW4gZW1haWwgcmVjZWl2ZXIsIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBhcyBhIHBpcGUgZnJvbSBhIC5mb3J3YXJkIGZpbGUuIEl0IGlzIHVzZWQgdG8gbW9uaXRvciBhIG1haWxpbmcgbGlzdCwgZm9yIGV4YW1wbGUsIGFuZCBhZGQgdGFza3MgdG8gdGhlIGJhY2tsb2cgYmFzZWQgb24gcmV2aWV3IHJlcXVlc3RzIGNvbWluZyBvbiB0aGUgbWFpbGluZyBsaXN0LgorCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCitBcyBwcmVyZXF1aXNpdGUsIHdlIGV4cGVjdCBhIGZ1bmN0aW9uaW5nIGVtYWlsIHN5c3RlbSBvbiBhIG1hY2hpbmUgd2l0aCBQeXRob24yLgorCitUaGUgYnJvYWQgc3RlcHMgdG8gaW5zdGFsbGF0aW9uCisqIHNldCB1cCB0aGUgLmZvcndhcmQgb24gdGhlIHJlY2VpdmluZyBlbWFpbCBhY2NvdW50IHRvIHBpcGUgdG8gdGhlIHJlY3YucHkgZmlsZQorKiBlZGl0IGNvbmZpZy5weSBhbmQgc2V0dGluZ3MuanNvbiB0byBhbHRlciBmb3IgbG9jYWwgaW5zdGFsbGF0aW9uIHNldHRpbmdzCisqIG9uIGVtYWlsIHJlY2VpdmUsIHZlcmlmeSBiYWNrbG9nLnR4dCB0byBzZWUgdGhhdCB0aGUgdGFza3MgYXJlIHJlY2VpdmVkIGFuZCBtYXJrZWQgZm9yIHByb2Nlc3NpbmcKKyogZXhlY3V0ZSBsYXVuY2hlci5weSBpbiBjb21tYW5kIGxpbmUgdG8gdmVyaWZ5IHRoYXQgYSB0ZXN0IG9jY3VycyB3aXRoIG5vIHByb2JsZW1zLCBhbmQgdGhhdCB0aGUgb3V0Z29pbmcgZW1haWwgaXMgZGVsaXZlcmVkCisqIGFkZCBsYXVuY2hlci5weQorCisKKworQ29udHJpYnV0ZQorLS0tLS0tLS0tLS0tCitXaGF0IHdlIG5lZWQgYXJlIHRlc3RzLiBBZGQgeW91ciBvd24gdGVzdHMgdG8gZWl0aGVyIHRlc3RzLnB5IGZpbGUsIG9yIHRvIGEgbmV3IGZpbGUuCitVc2UgImNvbmZpZy5sb2dnZXIiIHRvIHdyaXRlIGxvZ3MgdGhhdCB3aWxsIG1ha2UgaXQgdG8gZW1haWwuCisKK0NvbW1vbmx5IHVzZWQgY29kZSBzaG91bGQgYmUgZ29pbmcgdG8gc2hlbGx1dGlscywgYW5kIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlnLnB5LgorCitDb250cmlidXRlIGNvZGUgYnkgZW1haWxpbmcgcGF0Y2hlcyB0byB0aGUgbGlzdDogdG9hc3RlckB5b2N0b3Byb2plY3Qub3JnIChtZW1iZXJzaGlwIHJlcXVpcmVkKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9UT0RPIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzE5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL1RPRE8KQEAgLTAsMCArMSw5IEBACitXZSBuZWVkIHRvIGltcGxlbWVudCB0ZXN0czoKKworYXV0b21hdGVkIGxpbmsgY2hlY2tlcjsgY3VycmVudGx5CiskIGxpbmtjaGVja2VyIC10IDEwMDAgLUYgY3N2IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8KKworaW50ZWdyYXRlIHRoZSB3M2MtdmFsaWRhdGlvbiBzZXJ2aWNlOyBjdXJyZW50bHkKKyQgcHl0aG9uIHVybGNoZWNrLnB5CisKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2NvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQ0NWYzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9jb25maWcucHkKQEAgLTAsMCArMSw5OCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24vc2luZ2xlIG1vZHVsZSBmb3IgdHRzCisjIGV2ZXJ5dGhpbmcgdGhhdCB3b3VsZCBiZSBhIGdsb2JhbCB2YXJpYWJsZSBnb2VzIGhlcmUKKworaW1wb3J0IG9zLCBzeXMsIGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKKworTE9HRElSID0gImxvZyIKK1NFVFRJTkdTX0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInNldHRpbmdzLmpzb24iKQorVEVTVF9ESVJfTkFNRSA9ICJ0dHNfdGVzdGRpciIKKworREVCVUcgPSBUcnVlCisKK09XTl9QSUQgPSBvcy5nZXRwaWQoKQorCitXM0NfVkFMSURBVE9SID0gImh0dHA6Ly9pY2FydXMubG9jYWwvdzNjLXZhbGlkYXRvci9jaGVjaz9kb2N0eXBlPUhUTUw1JnVyaT0iCisKK1RPQVNURVJfUE9SVCA9IDU2Nzg5CisKK1RFU1RESVIgPSBOb25lCisKKyN3ZSBwYXJzZSB0aGUgdzNjIFVSTCB0byBrbm93IHdoZXJlIHRvIGNvbm5lY3QKKworaW1wb3J0IHVybHBhcnNlCisKK2RlZiBnZXRfcHVibGljX2lwKCk6CisgICAgdGVtcF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICBwYXJzZWRfdXJsID0gdXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly9pY2FydXMubG9jYWwvdzNjLXZhbGlkYXRvci9jaGVjaz9kb2N0eXBlPUhUTUw1JnVyaT0iKQorICAgIHRlbXBfc29ja2V0LmNvbm5lY3QoKHBhcnNlZF91cmwubmV0bG9jLCA4MCBpZiBwYXJzZWRfdXJsLnBvcnQgaXMgTm9uZSBlbHNlIHBhcnNlZF91cmwucG9ydCkpCisgICAgcHVibGljX2lwID0gdGVtcF9zb2NrZXQuZ2V0c29ja25hbWUoKVswXQorICAgIHRlbXBfc29ja2V0LmNsb3NlKCkKKyAgICByZXR1cm4gcHVibGljX2lwCisKK1RPQVNURVJfQkFTRVVSTCA9ICJodHRwOi8vJXM6JWQvIiAlIChnZXRfcHVibGljX2lwKCksIFRPQVNURVJfUE9SVCkKKworCitPV05fRU1BSUxfQUREUkVTUyA9ICJUb2FzdGVyIFRlc3RpbmcgRnJhbWV3b3JrIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4iCitSRVBPUlRfRU1BSUxfQUREUkVTUyA9ICJhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbSIKKworIyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgYmFzaWMgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZQorCisjcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQorIyB3ZSBkaXNhYmxlIHRoZSBpbnZhbGlkIG5hbWUgYmVjYXVzZSB0aGUgbW9kdWxlLWxldmVsICJsb2dnZXIiIGlzIHVzZWQgdGhyb3Vnb3V0IGJpdGJha2UKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0b2FzdGVydGVzdCIpCitfX2NvbnNvbGVfXyA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorX19jb25zb2xlX18uc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorbG9nZ2VyLmFkZEhhbmRsZXIoX19jb25zb2xlX18pCitsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworCisjIHNpbmdsZXRvbiBmaWxlIG5hbWVzCitMT0NLRklMRSA9ICIvdG1wL3R0Zi5sb2NrIgorQkFDS0xPR0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImJhY2tsb2cudHh0IikKKworIyB0YXNrIHN0YXRlcworZGVmIGVudW0oKnNlcXVlbnRpYWwsICoqbmFtZWQpOgorICAgIGVudW1zID0gZGljdCh6aXAoc2VxdWVudGlhbCwgcmFuZ2UobGVuKHNlcXVlbnRpYWwpKSksICoqbmFtZWQpCisgICAgcmV2ZXJzZSA9IGRpY3QoKHZhbHVlLCBrZXkpIGZvciBrZXksIHZhbHVlIGluIGVudW1zLml0ZXJpdGVtcygpKQorICAgIGVudW1zWydyZXZlcnNlX21hcHBpbmcnXSA9IHJldmVyc2UKKyAgICByZXR1cm4gdHlwZSgnRW51bScsICgpLCBlbnVtcykKKworCitjbGFzcyBUQVNLUyhvYmplY3QpOgorICAgICNweWxpbnQ6IGRpc2FibGU9dG9vLWZldy1wdWJsaWMtbWV0aG9kcworICAgIFBFTkRJTkcgPSAiUEVORElORyIKKyAgICBJTlBST0dSRVNTID0gIklOUFJPR1JFU1MiCisgICAgRE9ORSA9ICJET05FIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBuZXh0X3Rhc2sodGFzayk6CisgICAgICAgIGlmIHRhc2sgPT0gVEFTS1MuUEVORElORzoKKyAgICAgICAgICAgIHJldHVybiBUQVNLUy5JTlBST0dSRVNTCisgICAgICAgIGlmIHRhc2sgPT0gVEFTS1MuSU5QUk9HUkVTUzoKKyAgICAgICAgICAgIHJldHVybiBUQVNLUy5ET05FCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW52YWxpZCBuZXh0IHRhc2sgc3RhdGUgZm9yICVzIiAlIHRhc2spCisKKyMgVFRTIHNwZWNpZmljCitDT05UUklCX1JFUE8gPSAiZ2l0QGdpdC55b2N0b3Byb2plY3Qub3JnOnBva3ktY29udHJpYiIKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sYXVuY2hlci5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbGF1bmNoZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTU3OTRjMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvbGF1bmNoZXIucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBQcm9ncmFtIHRvIHJ1biB0aGUgbmV4dCB0YXNrIGxpc3RlZCBmcm9tIHRoZSBiYWNrbG9nLnR4dDsgZGVzaWduZWQgdG8gYmUKKyMgcnVuIGZyb20gY3JvbnRhYi4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MsIGNvbmZpZywgc2hlbGx1dGlscworZnJvbSBzaGVsbHV0aWxzIGltcG9ydCBTaGVsbENtZEV4Y2VwdGlvbgorCisjIEltcG9ydCBzbXRwbGliIGZvciB0aGUgYWN0dWFsIHNlbmRpbmcgZnVuY3Rpb24KK2ltcG9ydCBzbXRwbGliCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKK2Zyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAorCitkZWYgX3Rha2VfbG9ja2ZpbGUoKToKKyAgICByZXR1cm4gc2hlbGx1dGlscy5sb2NrZmlsZShzaGVsbHV0aWxzLm1rX2xvY2tfZmlsZW5hbWUoKSkKKworCitkZWYgcmVhZF9uZXh0X3Rhc2tfYnlfc3RhdGUodGFza19zdGF0ZSwgdGFza19uYW1lPU5vbmUpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgY29uZmlnLkJBQ0tMT0dGSUxFKSk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgb3MucmVuYW1lKGNvbmZpZy5CQUNLTE9HRklMRSwgY29uZmlnLkJBQ0tMT0dGSUxFICsgIi50bXAiKQorICAgIHRhc2sgPSBOb25lCisgICAgd2l0aCBvcGVuKGNvbmZpZy5CQUNLTE9HRklMRSArICIudG1wIiwgInIiKSBhcyBmX2luOgorICAgICAgICB3aXRoIG9wZW4oY29uZmlnLkJBQ0tMT0dGSUxFLCAidyIpIGFzIGZfb3V0OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZl9pbi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgifCIsIDIpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkc1sxXSA9PSB0YXNrX3N0YXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGFza19uYW1lIGlzIE5vbmUgb3IgdGFza19uYW1lID09IGZpZWxkc1swXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gZmllbGRzWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlVwZGF0aW5nICVzICVzIHRvICVzIiAlICh0YXNrLCB0YXNrX3N0YXRlLCBjb25maWcuVEFTS1MubmV4dF90YXNrKHRhc2tfc3RhdGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gIiVzfCVzXG4iICUgKHRhc2ssIGNvbmZpZy5UQVNLUy5uZXh0X3Rhc2sodGFza19zdGF0ZSkpCisgICAgICAgICAgICAgICAgZl9vdXQud3JpdGUobGluZSkKKyAgICBvcy5yZW1vdmUoY29uZmlnLkJBQ0tMT0dGSUxFICsgIi50bXAiKQorICAgIHJldHVybiB0YXNrCisKK2RlZiBzZW5kX3JlcG9ydCh0YXNrX25hbWUsIHBsYWludGV4dCwgZXJydGV4dD1Ob25lKToKKyAgICBpZiBlcnJ0ZXh0IGlzIE5vbmU6CisgICAgICAgIG1zZyA9IE1JTUVUZXh0KHBsYWludGV4dCkKKyAgICBlbHNlOgorICAgICAgICBpZiBwbGFpbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIHBsYWludGV4dCA9ICIiCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCItLVNURE9VVCBkdW1wLS1cblxuJXNcblxuLS1TVERFUlIgZHVtcC0tXG5cbiVzIiAlIChwbGFpbnRleHQsIGVycnRleHQpKQorCisgICAgbXNnWydTdWJqZWN0J10gPSAiW3Jldmlldy1yZXF1ZXN0XSAlcyAtIHNtb2tlIHRlc3QgcmVzdWx0cyIgJSB0YXNrX25hbWUKKyAgICBtc2dbJ0Zyb20nXSA9IGNvbmZpZy5PV05fRU1BSUxfQUREUkVTUworICAgIG1zZ1snVG8nXSA9IGNvbmZpZy5SRVBPUlRfRU1BSUxfQUREUkVTUworCisgICAgc210cF9jb25uZWN0aW9uID0gc210cGxpYi5TTVRQKCJsb2NhbGhvc3QiKQorICAgIHNtdHBfY29ubmVjdGlvbi5zZW5kbWFpbChjb25maWcuT1dOX0VNQUlMX0FERFJFU1MsIFtjb25maWcuUkVQT1JUX0VNQUlMX0FERFJFU1NdLCBtc2cuYXNfc3RyaW5nKCkpCisgICAgc210cF9jb25uZWN0aW9uLnF1aXQoKQorCitkZWYgbWFpbigpOgorICAgICMgd2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBhbm90aGVyIGluc3RhbmNlIG9mIHVzIHJ1bm5pbmcKKyAgICBsb2NrX2ZpbGUgPSBfdGFrZV9sb2NrZmlsZSgpCisKKyAgICBpZiBsb2NrX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgY29uZmlnLkRFQlVHOgorICAgICAgICAgICAgcHJpbnQoIkNvbmN1cnJlbnQgc2NyaXB0IGluIHByb2dyZXNzLCBleGl0aW5nIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG5leHRfdGFzayA9IHJlYWRfbmV4dF90YXNrX2J5X3N0YXRlKGNvbmZpZy5UQVNLUy5QRU5ESU5HKQorICAgIGlmIG5leHRfdGFzayBpcyBub3QgTm9uZToKKyAgICAgICAgcHJpbnQoIk5leHQgdGFzayBpcyIsIG5leHRfdGFzaykKKyAgICAgICAgZXJydGV4dCA9IE5vbmUKKyAgICAgICAgb3V0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXQgPSBzaGVsbHV0aWxzLnJ1bl9zaGVsbF9jbWQoIiVzICVzIiAlIChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInJ1bm5lci5weSIpLCBuZXh0X3Rhc2spKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB3aGlsZSBydW5uaW5nIHRoZSB0ZXN0IHJ1bm5lcjogJXMiLCBleGMpCisgICAgICAgICAgICBlcnJ0ZXh0ID0gZXhjLl9fc3RyX18oKQorICAgICAgICBzZW5kX3JlcG9ydChuZXh0X3Rhc2ssIG91dCwgZXJydGV4dCkKKyAgICAgICAgcmVhZF9uZXh0X3Rhc2tfYnlfc3RhdGUoY29uZmlnLlRBU0tTLklOUFJPR1JFU1MsIG5leHRfdGFzaykKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiTm8gdGFzayIpCisKKyAgICBzaGVsbHV0aWxzLnVubG9ja2ZpbGUobG9ja19maWxlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL2xvZy8uY3JlYXRlIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sb2cvLmNyZWF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9sb2cvLmNyZWF0ZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9yZWN2LnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9yZWN2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3ZWZkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3JlY3YucHkKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFByb2dyYW0gdG8gcmVjZWl2ZSByZXZpZXcgcmVxdWVzdHMgYnkgZW1haWwgYW5kIGxvZyB0YXNrcyB0byBiYWNrbG9nLnR4dAorIyBEZXNpZ25lZCB0byBiZSBydW4gYnkgdGhlIGVtYWlsIHN5c3RlbSBmcm9tIGEgLmZvcndhcmQgZmlsZToKKyMKKyMgY2F0IC5mb3J3YXJkCisjIHxbZnVsbC9wYXRoXS9yZWN2LnB5CisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMsIGNvbmZpZywgc2hlbGx1dGlscworCitmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgUGFyc2VyCisKK2RlZiByZWN2X21haWwoZGF0YXN0cmluZyk6CisgICAgaGVhZGVycyA9IFBhcnNlcigpLnBhcnNlc3RyKGRhdGFzdHJpbmcpCisgICAgcmV0dXJuIGhlYWRlcnNbJ3N1YmplY3QnXQorCitkZWYgbWFpbigpOgorICAgIGxvY2tfZmlsZSA9IHNoZWxsdXRpbHMubG9ja2ZpbGUoc2hlbGx1dGlscy5ta19sb2NrX2ZpbGVuYW1lKCksIHJldHJ5PVRydWUpCisKKyAgICBpZiBsb2NrX2ZpbGUgaXMgTm9uZToKKyAgICAgICAgaWYgY29uZmlnLkRFQlVHOgorICAgICAgICAgICAgcHJpbnQoIkNvbmN1cnJlbnQgc2NyaXB0IGluIHByb2dyZXNzLCBleGl0aW5nIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHN1YmplY3QgPSByZWN2X21haWwoc3lzLnN0ZGluLnJlYWQoKSkKKworICAgIHN1YmplY3RfcGFydHMgPSBzdWJqZWN0LnNwbGl0KCkKKyAgICBpZiAiW3Jldmlldy1yZXF1ZXN0XSIgaW4gc3ViamVjdF9wYXJ0czoKKyAgICAgICAgdGFza19uYW1lID0gc3ViamVjdF9wYXJ0c1tzdWJqZWN0X3BhcnRzLmluZGV4KCJbcmV2aWV3LXJlcXVlc3RdIikgKyAxXQorICAgICAgICB3aXRoIG9wZW4oY29uZmlnLkJBQ0tMT0dGSUxFLCAiYSIpIGFzIGZvdXQ6CisgICAgICAgICAgICBsaW5lID0gIiVzfCVzXG4iICUgKHRhc2tfbmFtZSwgY29uZmlnLlRBU0tTLlBFTkRJTkcpCisgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCisKKyAgICBzaGVsbHV0aWxzLnVubG9ja2ZpbGUobG9ja19maWxlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZWQ2NjUxCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy9ydW5uZXIucHkKQEAgLTAsMCArMSwyMjIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBBbGV4YW5kcnUgRGFtaWFuIGZvciBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworCisjIFRoaXMgaXMgdGhlIG1haW4gdGVzdCBleGVjdXRpb24gY29udHJvbGxlci4gSXQgaXMgZGVzaWduZWQgdG8gYmUgcnVuCisjIG1hbnVhbGx5IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgdG8gYmUgY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgcHJvZ3JhbQorIyB0aGF0IHNjaGVkdWxlcyB0ZXN0IGV4ZWN1dGlvbi4KKyMKKyMgRXhlY3V0ZSAgIHJ1bm5lci5weSAtaCAgIGZvciBoZWxwLgorCisKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHN5cywgb3MKK2ltcG9ydCB1bml0dGVzdCwgaW1wb3J0bGliCitpbXBvcnQgbG9nZ2luZywgcHByaW50LCBqc29uCitpbXBvcnQgcmUKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgU2hlbGxDbWRFeGNlcHRpb24sIG1rZGlyaGllciwgcnVuX3NoZWxsX2NtZAorCitpbXBvcnQgY29uZmlnCisKKyMgd2UgYWxzbyBsb2cgdG8gYSBmaWxlLCBpbiBhZGRpdGlvbiB0byBjb25zb2xlLCBiZWNhdXNlIG91ciBvdXRwdXQgaXMgaW1wb3J0YW50CitfX2xvZ19maWxlX25hbWVfXyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAibG9nL3R0c18lZC5sb2ciICUgY29uZmlnLk9XTl9QSUQpCitta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKF9fbG9nX2ZpbGVfbmFtZV9fKSkKK19fbG9nX2ZpbGVfXyA9IG9wZW4oX19sb2dfZmlsZV9uYW1lX18sICJ3IikKK19fZmlsZV9oYW5kbGVyX18gPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoX19sb2dfZmlsZV9fKQorX19maWxlX2hhbmRsZXJfXy5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisKK2NvbmZpZy5sb2dnZXIuYWRkSGFuZGxlcihfX2ZpbGVfaGFuZGxlcl9fKQorCisjIHNldCB1cCBsb2cgZGlyZWN0b3J5Cit0cnk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNvbmZpZy5MT0dESVIpOgorICAgICAgICBvcy5ta2Rpcihjb25maWcuTE9HRElSKQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGNvbmZpZy5MT0dESVIpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFeHBlY3RlZCBsb2cgZGlyICclcycgaXMgbm90IGFjdHVhbGx5IGEgZGlyZWN0b3J5LiIgJSBjb25maWcuTE9HRElSKQorZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgIHJhaXNlIGV4YworCisjIGNyZWF0ZXMgdGhlIHVuZGVyLXRlc3QtYnJhbmNoIGFzIGEgc2VwYXJhdGUgZGlyZWN0b3J5CitkZWYgc2V0X3VwX3Rlc3RfYnJhbmNoKHNldHRpbmdzLCBicmFuY2hfbmFtZSk6CisgICAgdGVzdGRpciA9ICIlcy8lcy4lZCIgJSAoc2V0dGluZ3NbJ3dvcmtkaXInXSwgY29uZmlnLlRFU1RfRElSX05BTUUsIGNvbmZpZy5PV05fUElEKQorCisgICAgIyBjcmVhdGVzIHRoZSBob3N0IGRpcgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3RkaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRlc3QgZGlyICclcydpcyBhbHJlYWR5IHRoZXJlLCBhYm9ydGluZyIgJSB0ZXN0ZGlyKQorCisgICAgIyBtYXkgcmFpc2UgT1NFcnJvciwgaXMgdG8gYmUgaGFuZGxlZCBieSB0aGUgY2FsbGVyCisgICAgb3MubWFrZWRpcnModGVzdGRpcikKKworCisgICAgIyBjb3BpZXMgb3ZlciB0aGUgLmdpdCBmcm9tIHRoZSBsb2NhbGNsb25lCisgICAgcnVuX3NoZWxsX2NtZCgiY3AgLWEgJyVzJy8uZ2l0ICclcyciICUgKHNldHRpbmdzWydsb2NhbGNsb25lJ10sIHRlc3RkaXIpKQorCisgICAgIyBhZGQgdGhlIHJlbW90ZSBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAgY3J0X3JlbW90ZXMgPSBydW5fc2hlbGxfY21kKCJnaXQgcmVtb3RlIC12IiwgY3dkPXRlc3RkaXIpCisgICAgcmVtb3RlcyA9IFt3b3JkIGZvciBsaW5lIGluIGNydF9yZW1vdGVzLnNwbGl0KCJcbiIpIGZvciB3b3JkIGluIGxpbmUuc3BsaXQoKV0KKyAgICBpZiBub3QgY29uZmlnLkNPTlRSSUJfUkVQTyBpbiByZW1vdGVzOgorICAgICAgICByZW1vdGVfbmFtZSA9ICJ0dHNfY29udHJpYiIKKyAgICAgICAgcnVuX3NoZWxsX2NtZCgiZ2l0IHJlbW90ZSBhZGQgJXMgJXMiICUgKHJlbW90ZV9uYW1lLCBjb25maWcuQ09OVFJJQl9SRVBPKSwgY3dkPXRlc3RkaXIpCisgICAgZWxzZToKKyAgICAgICAgcmVtb3RlX25hbWUgPSByZW1vdGVzW3JlbW90ZXMuaW5kZXgoY29uZmlnLkNPTlRSSUJfUkVQTykgLSAxXQorCisgICAgIyBkbyB0aGUgZmV0Y2gKKyAgICBydW5fc2hlbGxfY21kKCJnaXQgZmV0Y2ggJXMgLXAiICUgcmVtb3RlX25hbWUsIGN3ZD10ZXN0ZGlyKQorCisgICAgIyBkbyB0aGUgY2hlY2tvdXQKKyAgICBydW5fc2hlbGxfY21kKCJnaXQgY2hlY2tvdXQgb3JpZ2luL21hc3RlciAmJiBnaXQgYnJhbmNoIC1EICVzOyBnaXQgY2hlY2tvdXQgJXMvJXMgLWIgJXMgJiYgZ2l0IHJlc2V0IC0taGFyZCIgJSAoYnJhbmNoX25hbWUsIHJlbW90ZV9uYW1lLCBicmFuY2hfbmFtZSwgYnJhbmNoX25hbWUpLCBjd2Q9dGVzdGRpcikKKworICAgIHJldHVybiB0ZXN0ZGlyCisKKworZGVmIF9fc2VhcmNoX2Zvcl90ZXN0cygpOgorICAgICMgd2UgZmluZCBhbGwgY2xhc3NlcyB0aGF0IGNhbiBydW4sIGFuZCBydW4gdGhlbQorICAgIHRlc3RzID0gW10KKyAgICBmb3IgXywgXywgZmlsZXNfbGlzdCBpbiBvcy53YWxrKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSk6CisgICAgICAgIGZvciBtb2R1bGVfZmlsZSBpbiBbZls6LTNdIGZvciBmIGluIGZpbGVzX2xpc3QgaWYgZi5lbmRzd2l0aCgiLnB5IikgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoIl9faW5pdF9fIildOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiSW5zcGVjdGluZyBtb2R1bGUgJXMiLCBtb2R1bGVfZmlsZSkKKyAgICAgICAgICAgIGN1cnJlbnRfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobW9kdWxlX2ZpbGUpCisgICAgICAgICAgICBjcnRjbGFzc19uYW1lcyA9IHZhcnMoY3VycmVudF9tb2R1bGUpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBjcnRjbGFzc19uYW1lczoKKyAgICAgICAgICAgICAgICB0ZXN0ZWRfdmFsdWUgPSBjcnRjbGFzc19uYW1lc1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdGVkX3ZhbHVlLCB0eXBlKHVuaXR0ZXN0LlRlc3RDYXNlKSkgYW5kIGlzc3ViY2xhc3ModGVzdGVkX3ZhbHVlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZCgobW9kdWxlX2ZpbGUsIG5hbWUpKQorICAgICAgICBicmVhaworICAgIHJldHVybiB0ZXN0cworCisKKyMgYm9pbGVycGxhdGUgdG8gc2VsZiBkaXNjb3ZlciB0ZXN0cyBhbmQgcnVuIHRoZW0KK2RlZiBleGVjdXRlX3Rlc3RzKGRpcl91bmRlcl90ZXN0LCB0ZXN0bmFtZSk6CisKKyAgICBpZiB0ZXN0bmFtZSBpcyBub3QgTm9uZSBhbmQgIi4iIGluIHRlc3RuYW1lOgorICAgICAgICB0ZXN0cyA9IFtdCisgICAgICAgIHRlc3RzLmFwcGVuZCh0dXBsZSh0ZXN0bmFtZS5zcGxpdCgiLiIsIDIpKSkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cyA9IF9fc2VhcmNoX2Zvcl90ZXN0cygpCisKKyAgICAjIGxldCdzIG1vdmUgdG8gdGhlIGRpcmVjdG9yeSB1bmRlciB0ZXN0CisgICAgY3J0X2RpciA9IG9zLmdldGN3ZCgpCisgICAgb3MuY2hkaXIoZGlyX3VuZGVyX3Rlc3QpCisKKyAgICAjIGV4ZWN1dGUgZWFjaCBtb2R1bGUKKyAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKKyAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICB0cnk6CisgICAgICAgICMgc29ydGluZyB0aGUgdGVzdHMgYnkgdGhlIG51bWVyaWMgb3JkZXIgaW4gdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgdGVzdHMgPSBzb3J0ZWQodGVzdHMsIGtleT1sYW1iZGEgeDogaW50KHJlLnNlYXJjaChyIlswLTldKyIsIHhbMV0pLmdyb3VwKDApKSkKKyAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiRGlzY292ZXJlZCB0ZXN0IGNsYXNlczogJXMiLCBwcHJpbnQucGZvcm1hdCh0ZXN0cykpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgZm9yIG1vZHVsZV9maWxlLCB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgiJXMuJXMiICUgKG1vZHVsZV9maWxlLCB0ZXN0X25hbWUpKSkKKyAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJSdW5uaW5nICVkIHRlc3QocykiLCBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIGZvciBlcnJvciBpbiByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIG9uIHRlc3Q6ICVzXG4lcyIsIGVycm9yWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLmpvaW4oWyItLSAlcyIgJSB4IGZvciB4IGluIGVycm9yWzFdLnNwbGl0KCJcbiIpXSkpCisKKyAgICAgICAgZm9yIGZhaWx1cmUgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRmFpbGVkIHRlc3Q6ICVzOlxuJXNcbiIsIGZhaWx1cmVbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIuam9pbihbIi0tICAlcyIgJSB4IGZvciB4IGluIGZhaWx1cmVbMV0uc3BsaXQoIlxuIildKSkKKworICAgICAgICBjb25maWcubG9nZ2VyLmluZm8oIlRlc3QgcmVzdWx0czogJWQgcmFuLCAlZCBlcnJvcnMsICVkIGZhaWx1cmVzIiwgcmVzdWx0LnRlc3RzUnVuLCBsZW4ocmVzdWx0LmVycm9ycyksIGxlbihyZXN1bHQuZmFpbHVyZXMpKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgY29uZmlnLmxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgdGVzdC4gVHJhY2VkdW1wOiBcbiVzIiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZXhjKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjcnRfZGlyKQorICAgIHJldHVybiBsZW4ocmVzdWx0LmZhaWx1cmVzKQorCisjIHZlcmlmeSB0aGF0IHdlIGhhZCBhIGJyYW5jaC11bmRlci10ZXN0IG5hbWUgYXMgcGFyYW1ldGVyCitkZWYgdmFsaWRhdGVfYXJncygpOgorICAgIGZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBicmFuY2hfdW5kZXJfdGVzdCIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0LWRpciIsIGRlc3Q9InRlc3RkaXIiLCBkZWZhdWx0PU5vbmUsIGhlbHA9IlVzZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHRvIHJ1biB0ZXN0cywgaW5oaWJpdHMgdGhlIGNoZWNrb3V0LiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2luZ2xlIiwgZGVzdD0ic2luZ2xldGVzdCIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0iUnVuIG9ubHkgdGhlIHNwZWNpZmllZCB0ZXN0IikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBzcGVjaWZ5IHRoZSBicmFuY2ggdG8gcnVuIG9uLiBVc2Ugb3B0aW9uICctaCcgd2hlbiBpbiBkb3VidC4iKQorICAgIHJldHVybiAob3B0aW9ucywgYXJncykKKworCisKKworIyBsb2FkIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMKK2RlZiByZWFkX3NldHRpbmdzKCk6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNvbmZpZy5TRVRUSU5HU19GSUxFKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoY29uZmlnLlNFVFRJTkdTX0ZJTEUpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvbmZpZyBmaWxlICclcycgY2Fubm90IGJlIG9wZW5lbmQiICUgY29uZmlnLlNFVFRJTkdTX0ZJTEUpCisgICAgcmV0dXJuIGpzb24ubG9hZHMob3Blbihjb25maWcuU0VUVElOR1NfRklMRSwgInIiKS5yZWFkKCkpCisKKworIyBjbGVhbnVwICEKK2RlZiBjbGVhbl91cCh0ZXN0ZGlyKToKKyAgICBydW5fc2hlbGxfY21kKCJybSAtcmYgLS0gJyVzJyIgJSB0ZXN0ZGlyKQorCitkZWYgZHVtcF9pbmZvKHNldHRpbmdzLCBvcHRpb25zLCBhcmdzKToKKyAgICAiIiIgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBydW4gY29uZmlndXJhdGlvbiwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAiIiIKKyAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJTZXR0aW5nczpcbiVzXG5PcHRpb25zOlxuJXNcbkFyZ3VtZW50czpcbiVzXG4iLCBzZXR0aW5ncywgb3B0aW9ucywgYXJncykKKworZGVmIG1haW4oKToKKyAgICAob3B0aW9ucywgYXJncykgPSB2YWxpZGF0ZV9hcmdzKCkKKworICAgIHNldHRpbmdzID0gcmVhZF9zZXR0aW5ncygpCisgICAgbmVlZF9jbGVhbnVwID0gRmFsc2UKKworICAgICMgZHVtcCBkZWJ1ZyBpbmZvCisgICAgZHVtcF9pbmZvKHNldHRpbmdzLCBvcHRpb25zLCBhcmdzKQorCisgICAgdGVzdGRpciA9IE5vbmUKKyAgICBub19mYWlsdXJlcyA9IDEKKyAgICB0cnk6CisgICAgICAgIGlmIG9wdGlvbnMudGVzdGRpciBpcyBub3QgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMob3B0aW9ucy50ZXN0ZGlyKToKKyAgICAgICAgICAgIHRlc3RkaXIgPSBvcy5wYXRoLmFic3BhdGgob3B0aW9ucy50ZXN0ZGlyKQorICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5pbmZvKCJObyBjaGVja291dCwgdXNpbmcgJXMiLCB0ZXN0ZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmVlZF9jbGVhbnVwID0gVHJ1ZQorICAgICAgICAgICAgdGVzdGRpciA9IHNldF91cF90ZXN0X2JyYW5jaChzZXR0aW5ncywgYXJnc1swXSkgIyB3ZSBleHBlY3QgYSBicmFuY2ggbmFtZSBhcyBmaXJzdCBhcmd1bWVudAorCisgICAgICAgIGNvbmZpZy5URVNURElSID0gdGVzdGRpciAgICAjIHdlIGxldCB0ZXN0cyBrbm93IHdoZXJlIHRvIHJ1bgorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIHRlc3QgZGlyIG9ubHkgY29udGFpbnMgbm8gKi5weWMgbGVmdG92ZXJzCisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImZpbmQgJyVzJyAtdHlwZSBmIC1uYW1lICoucHljIC1leGVjIHJtIHt9IFxcOyIgJSB0ZXN0ZGlyKQorCisgICAgICAgIG5vX2ZhaWx1cmVzID0gZXhlY3V0ZV90ZXN0cyh0ZXN0ZGlyLCBvcHRpb25zLnNpbmdsZXRlc3QpCisKKyAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGNvbmZpZy5sb2dnZXIuZXJyb3IoIkVycm9yIHdoaWxlIHNldHRpbmcgdXAgdGVzdGluZy4gVHJhY2ViYWNrOiBcbiVzIiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZXhjKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBuZWVkX2NsZWFudXAgYW5kIHRlc3RkaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGVhbl91cCh0ZXN0ZGlyKQorCisgICAgc3lzLmV4aXQobm9fZmFpbHVyZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NldHRpbmdzLmpzb24gYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NldHRpbmdzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2NzFlYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2V0dGluZ3MuanNvbgpAQCAtMCwwICsxLDUgQEAKK3sKKwkicmVwbyI6ICJnaXRAZ2l0LnlvY3RvcHJvamVjdC5vcmc6cG9reS1jb250cmliIiwKKwkibG9jYWxjbG9uZSI6ICIvaG9tZS9kZGFsZXgvc3NkL3lvY3RvL3Bva3kiLAorCSJ3b3JrZGlyIjogIi9ob21lL2RkYWxleC9zc2QveW9jdG8iCit9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NoZWxsdXRpbHMucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3NoZWxsdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwMTJlZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvc2hlbGx1dGlscy5weQpAQCAtMCwwICsxLDE0MSBAQAorIyEvdXNyL2Jpbi9weXRob24KKworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFsZXhhbmRydSBEYW1pYW4gZm9yIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIFV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMgYW5kIG90aGVyIGNvbW1vbiBiaXRzIG9mIGNvZGUuCisKK2ltcG9ydCBzeXMsIG9zLCBzdWJwcm9jZXNzLCBmY250bCwgZXJybm8KK2ltcG9ydCBjb25maWcKK2Zyb20gY29uZmlnIGltcG9ydCBsb2dnZXIKKworCisjIExpY2Vuc2Ugd2FybmluZzsgdGhpcyBjb2RlIGlzIGNvcGllZCBmcm9tIHRoZSBCaXRCYWtlIHByb2plY3QsIGZpbGUgYml0YmFrZS9saWIvYmIvdXRpbHMucHkKKyMgVGhlIGNvZGUgaXMgb3JpZ2luYWxseSBsaWNlbnNlZCBHUEwtMi4wLCBhbmQgd2UgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHN0aWxsIEdQTC0yLjAKKworIyBFbmQgb2YgY29weSBpcyBtYXJrZWQgd2l0aCAjRU5ET0ZDT1BZIG1hcmtlcgorCitkZWYgbWtkaXJoaWVyKGRpcmVjdG9yeSk6CisgICAgIiIiQ3JlYXRlIGEgZGlyZWN0b3J5IGxpa2UgJ21rZGlyIC1wJywgYnV0IGRvZXMgbm90IGNvbXBsYWluIGlmCisgICAgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGxpa2Ugb3MubWFrZWRpcnMKKyAgICAiIiIKKworICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyZWN0b3J5KQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlIGV4YworCitkZWYgbG9ja2ZpbGUobmFtZSwgc2hhcmVkPUZhbHNlLCByZXRyeT1UcnVlKToKKyAgICAiIiIKKyAgICBVc2UgdGhlIGZpbGUgZm4gYXMgYSBsb2NrIGZpbGUsIHJldHVybiB3aGVuIHRoZSBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgIFJldHVybnMgYSB2YXJpYWJsZSB0byBwYXNzIHRvIHVubG9ja2ZpbGUoKS4KKyAgICAiIiIKKyAgICBjb25maWcubG9nZ2VyLmRlYnVnKCJ0YWtlIGxvY2tmaWxlICVzIiwgbmFtZSkKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKG5hbWUpCisgICAgbWtkaXJoaWVyKGRpcm5hbWUpCisKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGRpcm5hbWUsIG9zLldfT0spOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBhY3F1aXJlIGxvY2sgJyVzJywgZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgb3BlcmF0aW9uID0gZmNudGwuTE9DS19FWAorICAgIGlmIHNoYXJlZDoKKyAgICAgICAgb3BlcmF0aW9uID0gZmNudGwuTE9DS19TSAorICAgIGlmIG5vdCByZXRyeToKKyAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uIHwgZmNudGwuTE9DS19OQgorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBJZiB3ZSBsZWF2ZSB0aGUgbG9ja2ZpbGVzIGx5aW5nIGFyb3VuZCB0aGVyZSBpcyBubyBwcm9ibGVtCisgICAgICAgICMgYnV0IHdlIHNob3VsZCBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuIFRoaXMgZ2l2ZXMgcG90ZW50aWFsCisgICAgICAgICMgZm9yIHJhY2VzIHRob3VnaC4gVG8gd29yayBhcm91bmQgdGhpcywgd2hlbiB3ZSBhY3F1aXJlIHRoZSBsb2NrCisgICAgICAgICMgd2UgY2hlY2sgdGhlIGZpbGUgd2UgbG9ja2VkIHdhcyBzdGlsbCB0aGUgbG9jayBmaWxlIG9uIGRpc2suCisgICAgICAgICMgYnkgY29tcGFyaW5nIGlub2RlIG51bWJlcnMuIElmIHRoZXkgZG9uJ3QgbWF0Y2ggb3IgdGhlIGxvY2tmaWxlCisgICAgICAgICMgbm8gbG9uZ2VyIGV4aXN0cywgd2Ugc3RhcnQgYWdhaW4uCisKKyAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHVuZmFpciBzaW5jZSB0aGUgbGFzdCBwZXJzb24gdG8gcmVxdWVzdCB0aGUKKyAgICAgICAgIyBsb2NrIGlzIHRoZSBtb3N0IGxpa2VseSB0byB3aW4gaXQuCisKKyAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CisgICAgICAgICMgd2UgZGlzYWJsZSB0aGUgYnJvYWQtZXhjZXB0IGJlY2F1c2Ugd2Ugd2FudCB0byBhY3R1YWxseSBjYXRjaCBhbGwgcG9zc2libGUgZXhjZXB0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NrX2ZpbGUgPSBvcGVuKG5hbWUsICdhKycpCisgICAgICAgICAgICBmaWxlbm8gPSBsb2NrX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgb3BlcmF0aW9uKQorICAgICAgICAgICAgc3RhdGluZm8gPSBvcy5mc3RhdChmaWxlbm8pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2NrX2ZpbGUubmFtZSk6CisgICAgICAgICAgICAgICAgc3RhdGluZm8yID0gb3Muc3RhdChsb2NrX2ZpbGUubmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0aW5mby5zdF9pbm8gPT0gc3RhdGluZm8yLnN0X2lubzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2tfZmlsZQorICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjMjoKKyAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gY2xvc2UgdGhlIGxvY2tmaWxlOiAlcyIsIGV4YzIpCisgICAgICAgICAgICBjb25maWcubG9nZ2VyLmVycm9yKCJGYWlsZWQgdG8gYWNxdWlyZSB0aGUgbG9ja2ZpbGU6ICVzIiwgZXhjKQorICAgICAgICBpZiBub3QgcmV0cnk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgdW5sb2NrZmlsZShsb2NrX2ZpbGUpOgorICAgICIiIgorICAgIFVubG9jayBhIGZpbGUgbG9ja2VkIHVzaW5nIGxvY2tmaWxlKCkKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgICMgSWYgd2UgaGFkIGEgc2hhcmVkIGxvY2ssIHdlIG5lZWQgdG8gcHJvbW90ZSB0byBleGNsdXNpdmUgYmVmb3JlCisgICAgICAgICMgcmVtb3ZpbmcgdGhlIGxvY2tmaWxlLiBBdHRlbXB0IHRoaXMsIGlnbm9yZSBmYWlsdXJlcy4KKyAgICAgICAgZmNudGwuZmxvY2sobG9ja19maWxlLmZpbGVubygpLCBmY250bC5MT0NLX0VYfGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIG9zLnVubGluayhsb2NrX2ZpbGUubmFtZSkKKyAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZmNudGwuZmxvY2sobG9ja19maWxlLmZpbGVubygpLCBmY250bC5MT0NLX1VOKQorICAgIGxvY2tfZmlsZS5jbG9zZSgpCisKKyNFTkRPRkNPUFkKKworCitkZWYgbWtfbG9ja19maWxlbmFtZSgpOgorICAgIG91cl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykKKyAgICBvdXJfbmFtZSA9ICIuJXMiICUgIi4iLmpvaW4ocmV2ZXJzZWQob3VyX25hbWUuc3BsaXQoIi4iKSkpCisgICAgcmV0dXJuIGNvbmZpZy5MT0NLRklMRSArIG91cl9uYW1lCisKKworCitjbGFzcyBTaGVsbENtZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHJ1bl9zaGVsbF9jbWQoY29tbWFuZCwgY3dkPU5vbmUpOgorICAgIGlmIGN3ZCBpcyBOb25lOgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorCisgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiX3NoZWxsY21kOiAoJXMpICVzIiwgY3dkLCBjb21tYW5kKQorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIGN3ZD1jd2QsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgKG91dCwgZXJyKSA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHByb2Nlc3Mud2FpdCgpCisgICAgaWYgcHJvY2Vzcy5yZXR1cm5jb2RlOgorICAgICAgICBpZiBsZW4oZXJyKSA9PSAwOgorICAgICAgICAgICAgZXJyID0gImNvbW1hbmQ6ICVzIFxuJXMiICUgKGNvbW1hbmQsIG91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVyciA9ICJjb21tYW5kOiAlcyBcbiVzIiAlIChjb21tYW5kLCBlcnIpCisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiX3NoZWxsY21kOiBlcnJvciBcbiVzXG4lcyIsIG91dCwgZXJyKQorICAgICAgICByYWlzZSBTaGVsbENtZEV4Y2VwdGlvbihlcnIpCisgICAgZWxzZToKKyAgICAgICAgI2NvbmZpZy5sb2dnZXIuZGVidWcoImxvY2FsaG9zdGJlY29udHJvbGxlcjogc2hlbGxjbWQgc3VjY2Vzc1xuJXMiICUgb3V0KQorICAgICAgICByZXR1cm4gb3V0CisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdGVzdHMucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MTBlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTE1IEBACisjIS91c3IvYmluL3B5dGhvbgorCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQWxleGFuZHJ1IERhbWlhbiBmb3IgSW50ZWwgQ29ycC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKworIyBUZXN0IGRlZmluaXRpb25zLiBUaGUgcnVubmVyIHdpbGwgbG9vayBmb3IgYW5kIGF1dG8tZGlzY292ZXIgdGhlIHRlc3RzCisjIG5vIG1hdHRlciB3aGF0IHRoZXkgZmlsZSBhcmUgdGhleSBpbiwgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyMgYXMgdGhpcyBmaWxlLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gc2hlbGx1dGlscyBpbXBvcnQgcnVuX3NoZWxsX2NtZCwgU2hlbGxDbWRFeGNlcHRpb24KK2ltcG9ydCBjb25maWcKKworaW1wb3J0IHBleHBlY3QKK2ltcG9ydCBzeXMsIG9zLCBzaWduYWwsIHRpbWUKKworY2xhc3MgVGVzdDAwUHlDb21waWxhYmxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJycgVmVyaWZpZXMgdGhhdCBhbGwgUHl0aG9uIGZpbGVzIGFyZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QgJycnCisgICAgZGVmIHRlc3RfY29tcGlsZV9maWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCJmaW5kIC4gLW5hbWUgKnB5IC10eXBlIGYgLXByaW50MCB8IHhhcmdzIC0wIC1uMSAtUDIwIHB5dGhvbiAtbSBweV9jb21waWxlIiwgY29uZmlnLlRFU1RESVIpCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIGNvbXBpbGluZyBweXRob24gZmlsZXM6ICVzIiAlIChleGMpKQorCisgICAgZGVmIHRlc3RfcHlsaW50X2ZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQociJmaW5kIC4gLWluYW1lIFwiKlwucHlcIiAtdHlwZSBmIC1wcmludDAgfCBQWVRIT05QQVRIPSR7UFlUSE9OUEFUSH06LiB4YXJncyAtciAtMCAtbjEgcHlsaW50IC0tbG9hZC1wbHVnaW5zIHB5bGludF9kamFuZ28gLUUgLS1yZXBvcnRzPW4gMj4mMSIsIGN3ZD1jb25maWcuVEVTVERJUiArICIvYml0YmFrZS9saWIvdG9hc3RlciIpCisgICAgICAgIGV4Y2VwdCBTaGVsbENtZEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlB5bGludCBmYWlsczogJXNcbiIgJSBleGMpCisKK2NsYXNzIFRlc3QwMVB5U3lzdGVtU3RhcnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJyBBdHRlbXB0cyB0byBzdGFydCBUb2FzdGVyLCB2ZXJpZnkgdGhhdCBpdCBpcyBzdWNjZXNmdWxsLCBhbmQgc3RvcCBpdCAnJycKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJ1bl9zaGVsbF9jbWQoImJhc2ggLWMgJ3JtIC1mIGJ1aWxkLypsb2cnIikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2ludGVyYWN0aXZlX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoImJhc2ggLWMgJ3NvdXJjZSAlcy9vZS1pbml0LWJ1aWxkLWVudiAmJiBzb3VyY2UgdG9hc3RlciBzdGFydCB3ZWJwb3J0PSVkICYmIHNvdXJjZSB0b2FzdGVyIHN0b3AnIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRPQVNURVJfUE9SVCksIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgc3RhcnRpbmcgaW50ZXJhY3RpdmUgbW9kZTogJXMiICUgKGV4YykpCisKKyAgICBkZWYgdGVzdF9zdGFydF9tYW5hZ2VkX21vZGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvYmluL3RvYXN0ZXIgd2VicG9ydD0lZCBub2Jyb3dzZXIgJiBzbGVlcCAxMCAmJiBjdXJsIGh0dHA6Ly9sb2NhbGhvc3Q6JWQvICYmIGtpbGwgLTIgJSUxIiAlIChjb25maWcuVEVTVERJUiwgY29uZmlnLlRPQVNURVJfUE9SVCwgY29uZmlnLlRPQVNURVJfUE9SVCksIGNvbmZpZy5URVNURElSKQorICAgICAgICBleGNlcHQgU2hlbGxDbWRFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgc3RhcnRpbmcgbWFuYWdlZCBtb2RlOiAlcyIgJSAoZXhjKSkKKworY2xhc3MgVGVzdDAySFRNTDVDb21wbGlhbmNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub3JpZ2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIHNlbGYuY3J0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGNvbmZpZy5URVNURElSKQorICAgICAgICBzZWxmLmNsZWFudXBfZGF0YWJhc2UgPSBGYWxzZQorICAgICAgICBvcy5jaGRpcihzZWxmLmNydGRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmNydGRpciwgInRvYXN0ZXIuc3FsaXRlIikpOgorICAgICAgICAgICAgc2VsZi5jbGVhbnVwX2RhdGFiYXNlID0gVHJ1ZQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiIC0tbm9pbnB1dCIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHJ1bl9zaGVsbF9jbWQoIiVzL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IG1pZ3JhdGUgb3JtIiAlIGNvbmZpZy5URVNURElSKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sIiAlIGNvbmZpZy5URVNURElSKQorICAgICAgICAgICAgcnVuX3NoZWxsX2NtZCgiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbG9hZGNvbmYgJXMvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24iICUgKGNvbmZpZy5URVNURElSLCBjb25maWcuVEVTVERJUikpCisgICAgICAgICAgICBydW5fc2hlbGxfY21kKCIlcy9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMiICUgY29uZmlnLlRFU1RESVIpCisKKyAgICAgICAgICAgIHNldHVwID0gcGV4cGVjdC5zcGF3bigiJXMvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY2hlY2tzZXR0aW5ncyIgJSBjb25maWcuVEVTVERJUikKKyAgICAgICAgICAgIHNldHVwLmxvZ2ZpbGUgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzZXR1cC5leHBlY3QociIuKm9yIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3Rvcnk6ICIpCisgICAgICAgICAgICBzZXR1cC5zZW5kbGluZSgnJykKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcnKQorICAgICAgICAgICAgc2V0dXAuZXhwZWN0KHIiLipvciB0eXBlIHRoZSBmdWxsIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5OiAiKQorICAgICAgICAgICAgc2V0dXAuc2VuZGxpbmUoJycpCisgICAgICAgICAgICBzZXR1cC5leHBlY3QociJFbnRlciB5b3VyIG9wdGlvbjogIikKKyAgICAgICAgICAgIHNldHVwLnNlbmRsaW5lKCcwJykKKworICAgICAgICBzZWxmLmNoaWxkID0gcGV4cGVjdC5zcGF3bigiYmFzaCIsIFsiJXMvYml0YmFrZS9iaW4vdG9hc3RlciIgJSBjb25maWcuVEVTVERJUiwgIndlYnBvcnQ9JWQiICUgY29uZmlnLlRPQVNURVJfUE9SVCwgIm5vYnJvd3NlciJdLCBjd2Q9c2VsZi5jcnRkaXIpCisgICAgICAgIHNlbGYuY2hpbGQubG9nZmlsZSA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5jaGlsZC5leHBlY3QoIlRvYXN0ZXIgaXMgbm93IHJ1bm5pbmcuIFlvdSBjYW4gc3RvcCBpdCB3aXRoIEN0cmwtQyIpCisKKyAgICBkZWYgdGVzdF9odG1sNV9jb21wbGlhbmNlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdXJsbGlzdCwgdXJsY2hlY2sKKyAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgIGZvciB1cmwgaW4gdXJsbGlzdC5VUkxTOgorICAgICAgICAgICAgcmVzdWx0c1t1cmxdID0gdXJsY2hlY2sudmFsaWRhdGVfaHRtbDUoY29uZmlnLlRPQVNURVJfQkFTRVVSTCArIHVybCkKKworICAgICAgICBmYWlsZWQgPSBbXQorICAgICAgICBmb3IgdXJsIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiByZXN1bHRzW3VybF1bMV0gIT0gMDoKKyAgICAgICAgICAgICAgICBmYWlsZWQuYXBwZW5kKCh1cmwsIHJlc3VsdHNbdXJsXSkpCisKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZhaWxlZCkgPT0gMCwgIk5vdCBhbGwgVVJMcyB2YWxpZGF0ZTogXG4lcyAiICUgIlxuIi5qb2luKFsiIi5qb2luKHN0cih4KSkgZm9yIHggaW4gZmFpbGVkXSkpCisKKyAgICAgICAgIyhjb25maWcuVE9BU1RFUl9CQVNFVVJMICsgdXJsLCBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLmNoaWxkLmlzYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuY2hpbGQua2lsbChzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBvcy5jaGRpcihzZWxmLm9yaWdkaXIpCisgICAgICAgIHRvYXN0ZXJfc3FsaXRlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jcnRkaXIsICJ0b2FzdGVyLnNxbGl0ZSIpCisgICAgICAgIGlmIHNlbGYuY2xlYW51cF9kYXRhYmFzZSBhbmQgb3MucGF0aC5leGlzdHModG9hc3Rlcl9zcWxpdGVfcGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUodG9hc3Rlcl9zcWxpdGVfcGF0aCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3J1bl90b2FzdGVydGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODgwNDg3YwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC9ydW5fdG9hc3RlcnRlc3RzLnB5CkBAIC0wLDAgKzEsODcgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgQ29weXJpZ2h0CisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpcyBzY3JpcHQgZm9yIHJ1bm5pbmcgYWxsIHNlbGVjdGVkIHRvYXN0ZXIgY2FzZXMgb24KKyMgc2VsZWN0ZWQgd2ViIGJyb3dzZXJzIG1hbmlmZXN0ZWQgaW4gdG9hc3Rlcl90ZXN0LmNmZy4KKworIyAxLiBIb3cgdG8gc3RhcnQgdG9hc3RlciBpbiB5b2N0bzoKKyMgJCBzb3VyY2UgcG9reS9vZS1pbml0LWJ1aWxkLWVudgorIyAkIHNvdXJjZSB0b2FzdGVyIHN0YXJ0CisjICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKworIyAyLiBIb3cgdG8gaW5zdGFsbCBzZWxlbml1bSBvbiBVYnVudHU6CisjICQgc3VkbyBhcHQtZ2V0IGluc3RhbGwgc2Nyb3QgcHl0aG9uLXBpcAorIyAkIHN1ZG8gcGlwIGluc3RhbGwgc2VsZW5pdW0KKworIyAzLiBIb3cgdG8gaW5zdGFsbCBzZWxlbml1bSBhZGRvbiBpbiBmaXJlZm94OgorIyBEb3dubG9hZCB0aGUgbGFzdGVzdCBmaXJlZm94IGFkZG9uIGZyb20gaHR0cDovL3JlbGVhc2Uuc2VsZW5pdW1ocS5vcmcvc2VsZW5pdW0taWRlLworIyBUaGVuIGluc3RhbGwgaXQuIFlvdSBjYW4gYWxzbyBpbnN0YWxsIGZpcmVidWcgYW5kIGZpcmVwYXRoIGFkZG9uCisKKyMgNC4gSG93IHRvIHN0YXJ0IHdyaXRpbmcgYSBuZXcgY2FzZToKKyMgQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHRvIGltcGxlbWVudCB0aGUgZnVuY3Rpb24gdGVzdF94eHgoKSBhbmQgIHBpbGUgaXQgb24uCisKKyMgNS4gSG93IHRvIHRlc3Qgd2l0aCBDaHJvbWUgYnJvd3NlcgorIyBEb3dubG9hZC9pbnN0YWxsIGNocm9tZSBvbiBob3N0CisjIERvd25sb2FkIGNocm9tZWRyaXZlciBmcm9tIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21lZHJpdmVyL2Rvd25sb2Fkcy9saXN0ICBhY2NvcmRpbmcgdG8geW91ciBob3N0IHR5cGUKKyMgcHV0IGNocm9tZWRyaXZlciBpbiBQQVRILCAoZS5nLiAvdXNyL2Jpbi8sIGJlYXIgaW4gbWluZCB0byBjaG1vZCkKKyMgRm9yIHdpbmRvd3MgaG9zdCwgeW91IG1heSBwdXQgY2hyb21lZHJpdmVyLmV4ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgY2hyb21lLmV4ZQorCisKK2ltcG9ydCB1bml0dGVzdCwgdGltZSwgcmUsIHN5cywgZ2V0b3B0LCBvcywgbG9nZ2luZywgcGxhdGZvcm0KK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgdG9hc3Rlcl9ydW5fYWxsKCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIGluIGNhc2UgdGhpcyBzY3JpcHQgaXMgY2FsbGVkIGZyb20gb3RoZXIgZGlyZWN0b3J5CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkpCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gdGltZS5zdHJwdGltZSh0aW1lLmN0aW1lKCkpCisgICAgICAgIHNlbGYucGFyc2VyID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgICAgICBmb3VuZCA9IHNlbGYucGFyc2VyLnJlYWQoJ3RvYXN0ZXJfdGVzdC5jZmcnKQorICAgICAgICBzZWxmLmhvc3Rfb3MgPSBwbGF0Zm9ybS5zeXN0ZW0oKS5sb3dlcigpCisgICAgICAgIHNlbGYucnVuX2FsbF9jYXNlcygpCisgICAgICAgIHNlbGYuY29sbGVjdF9sb2coKQorCisgICAgZGVmIGdldF90ZXN0X2Nhc2VzKHNlbGYpOgorICAgICAgICAjIHdlIGhhdmUgY29uZmlnIGdyb3VwcyBmb3IgZGlmZmVyZW50IG9zIHR5cGUgaW4gdG9hc3Rlcl90ZXN0LmNmZworICAgICAgICBjYXNlc190b19ydW4gPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICd0ZXN0X2Nhc2VzJykpCisgICAgICAgIHJldHVybiBjYXNlc190b19ydW4KKworCisgICAgZGVmIHJ1bl9hbGxfY2FzZXMoc2VsZik6CisgICAgICAgIGNhc2VzX3RlbXAgPSBzZWxmLmdldF90ZXN0X2Nhc2VzKCkKKyAgICAgICAgZm9yIGNhc2UgaW4gY2FzZXNfdGVtcDoKKyAgICAgICAgICAgIHNpbmdsZV9jYXNlX2NtZCA9ICJweXRob24gLW0gdW5pdHRlc3QgdG9hc3Rlcl9hdXRvbWF0aW9uX3Rlc3QudG9hc3Rlcl9jYXNlcy50ZXN0XyIgKyBzdHIoY2FzZSkKKyAgICAgICAgICAgIHByaW50IHNpbmdsZV9jYXNlX2NtZAorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNpbmdsZV9jYXNlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgIGRlZiBjb2xsZWN0X2xvZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHRoZSBsb2cgZmlsZXMgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCBpbiAuL2xvZy90bXAvLi4KKyAgICAgICAgQWZ0ZXIgYWxsIGNhc2VzIGFyZSBkb25lLCB0aGV5IHNob3VsZCBiZSB0cmFuc2ZlcmVkIHRvIC4vbG9nLyRUSU1FU1RBTVAvCisgICAgICAgICIiIgorICAgICAgICBkZWYgY29tcGxlKG51bWJlcik6CisgICAgICAgICAgICBpZiBudW1iZXIgPCAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKDApICsgc3RyKG51bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihudW1iZXIpCisgICAgICAgIG5vdyA9IHNlbGYuc3RhcnR0aW1lCisgICAgICAgIG5vd19zdHIgPSBjb21wbGUobm93LnRtX3llYXIpICsgY29tcGxlKG5vdy50bV9tb24pICsgY29tcGxlKG5vdy50bV9tZGF5KSArIFwKKyAgICAgICAgICAgICAgICAgIGNvbXBsZShub3cudG1faG91cikgKyBjb21wbGUobm93LnRtX21pbikgKyBjb21wbGUobm93LnRtX3NlYykKKyAgICAgICAgbG9nX2RpciA9IG9zLnBhdGguYWJzcGF0aChzeXMucGF0aFswXSkgKyBvcy5zZXAgKyAnbG9nJyArIG9zLnNlcCArIG5vd19zdHIKKyAgICAgICAgbG9nX3RtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyAndG1wJworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW5hbWVzKGxvZ190bXBfZGlyLCBsb2dfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciA6CisgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCIgQ2Fubm90IGNyZWF0ZSBsb2cgZGlyKHRpbWVzdGFtcCkgIHVuZGVyIGxvZywgcGxlYXNlIGNoZWNrIHlvdXIgcHJpdmlsZWdlIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRvYXN0ZXJfcnVuX2FsbCgpCisKKworCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX2F1dG9tYXRpb25fdGVzdC5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdG9hc3RlcnVpdGVzdC90b2FzdGVyX2F1dG9tYXRpb25fdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTIwNzhmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfYXV0b21hdGlvbl90ZXN0LnB5CkBAIC0wLDAgKzEsMTg4MyBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgQ29weXJpZ2h0CisKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpcyB0b2FzdGVyIGF1dG9tYXRpb24gYmFzZSBjbGFzcyBhbmQgdGVzdCBjYXNlcyBmaWxlCisKKyMgSGlzdG9yeToKKyMgMjAxNS4wMy4wOSAgaW5pdGFsIHZlcnNpb24KKyMgMjAxNS4wMy4yMyAgYWRkaW5nIHRvYXN0ZXJfdGVzdC5jZmcsIHJ1bl90b2FzdGVydGVzdC5weSBzbyB3ZSBjYW4gcnVuIGNhc2UgYnkgY2FzZSBmcm9tIG91dHNpZGUKKworIyBCcmllZnM6CisjIFRoaXMgZmlsZSBpcyBjb21wcmlzZWQgb2YgMyBwYXJ0czoKKyMgSTogICBjb21tb24gdXRpbHMgbGlrZSBzb3J0aW5nLCBnZXR0aW5nIGF0dHJpYnV0ZS4uIGV0YworIyBJSTogIGJhc2UgY2xhc3MgcGFydCwgd2hpY2ggY29tcGxpZXMgd2l0aCB1bml0dGVzdCBmcmFtZSB3b3JrIGFuZAorIyAgICAgIGNvbnRhaW5zIGNsYXNzIHNlbGVuaXVtLWJhc2VkIGZ1bmN0aW9ucworIyBJSUk6IHRlc3QgY2FzZXMKKyMgICAgICB0byBhZGQgbmV3IGNhc2U6IGp1c3QgaW1wbGVtZW50IG5ldyB0ZXN0X3h4eCgpIGZ1bmN0aW9uIGluIGNsYXNzIHRvYXN0ZXJfY2FzZXMKKworIyBOT1RFUyBmb3IgY2FzZXM6CisjIGNhc2UgOTQ2OgorIyBzdGVwIDYgLSA4IG5lZWRzIHRvIGJlIG9ic2VydmVkIHVzaW5nIHNjcmVlbnNob3RzCisjIGNhc2UgOTU2OgorIyBzdGVwIDIgLSAzIG5lZWRzIHRvIGJlIHJ1biBtYW51YWxseQorCitpbXBvcnQgdW5pdHRlc3QsIHRpbWUsIHJlLCBzeXMsIGdldG9wdCwgb3MsIGxvZ2dpbmcsIHN0cmluZywgZXJybm8sIGV4Y2VwdGlvbnMKK2ltcG9ydCBzaHV0aWwsIGFyZ3BhcnNlLCBDb25maWdQYXJzZXIsIHBsYXRmb3JtCitmcm9tIHNlbGVuaXVtIGltcG9ydCB3ZWJkcml2ZXIKK2Zyb20gc2VsZW5pdW0uY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24KK2Zyb20gc2VsZW5pdW0gaW1wb3J0IHNlbGVuaXVtCitmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYnkgaW1wb3J0IEJ5Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5jb21tb24ua2V5cyBpbXBvcnQgS2V5cworZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC51aSBpbXBvcnQgU2VsZWN0CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyBQQVJUIEk6IHV0aWxzIHN0dWZmICAgICAgICAgICAgICAgICAgICAgIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBMaXN0YXR0cihvYmplY3QpOgorICAgICIiIgorICAgIFNldCBvZiBsaXN0IGF0dHJpYnV0ZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRoZSBsaXN0IGNvbnRlbnQgaXMuCisgICAgTGF0ZXIgb24gd2UgbWF5IGFkZCBtb3JlIGF0dHJpYnV0ZXMgaGVyZS4KKyAgICAiIiIKKyAgICBOVUxMID0gIm51bGwiCisgICAgTlVNQkVSUyA9ICJudW1iZXJzIgorICAgIFNUUklOR1MgPSAic3RyaW5ncyIKKyAgICBQRVJDRU5UID0gInBlcmNlbnRhZ2UiCisgICAgU0laRSA9ICJzaXplIgorICAgIFVOS05PV04gPSAidW5rbm93biIKKworCitkZWYgZ2V0X2xvZ19yb290X2RpcigpOgorICAgIG1heF9kZXB0aCA9IDUKKyAgICBwYXJlbnRfZGlyID0gJy4uLycKKyAgICBmb3IgbnVtYmVyIGluIHJhbmdlKDAsIG1heF9kZXB0aCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzLnBhdGhbMF0gKyBvcy5zZXAgKyAob3MucGFyZGlyICsgb3Muc2VwKSpudW1iZXIgKyAnbG9nJyk6CisgICAgICAgICAgICBsb2dfcm9vdF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0gKyBvcy5zZXAgKyAob3MucGFyZGlyICsgb3Muc2VwKSpudW1iZXIgKyAnbG9nJykKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBudW1iZXIgPT0gKG1heF9kZXB0aCAtIDEpOgorICAgICAgICBwcmludCAnTm8gbG9nIGRpciBmb3VuZC4gUGxlYXNlIGNoZWNrJworICAgICAgICByYWlzZSBFeGNlcHRpb24KKworICAgIHJldHVybiBsb2dfcm9vdF9kaXIKKworCitkZWYgbWtkaXJfcChkaXIpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVFWElTVCBhbmQgb3MucGF0aC5pc2RpcihkaXIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgVG8gZGV0ZXJtaW5lIHRoZSBsaXN0IGNvbnRlbnQKKyAgICAiIiIKKyAgICBpZiBub3QgdGVzdGxpc3Q6CisgICAgICAgIHJldHVybiBMaXN0YXR0ci5OVUxMCisgICAgbGlzdHRlc3QgPSB0ZXN0bGlzdFs6XQorICAgIHRyeToKKyAgICAgICAgbGlzdHRlc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgcGF0dGVybl9wZXJjZW50ID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSolJCIpCisgICAgcGF0dGVybl9zaXplID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSooICkqKEspKihNKSooRykqQiQiKQorICAgIHBhdHRlcm5fbnVtYmVyID0gcmUuY29tcGlsZShyIl4oWzAtOV0pKyhcLik/KFswLTldKSokIikKKyAgICBkZWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybiwgdGxpc3QpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGl0ZW0gaW4gdGxpc3Q6CisgICAgICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgaXRlbSk6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICByZXR1cm4gY291bnQKKyAgICBpZiBnZXRfcGF0dGVybmVkX251bWJlcihwYXR0ZXJuX3BlcmNlbnQsIGxpc3R0ZXN0KSA9PSBsZW4obGlzdHRlc3QpOgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuUEVSQ0VOVAorICAgIGVsaWYgZ2V0X3BhdHRlcm5lZF9udW1iZXIocGF0dGVybl9zaXplLCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLlNJWkUKKyAgICBlbGlmIGdldF9wYXR0ZXJuZWRfbnVtYmVyKHBhdHRlcm5fbnVtYmVyLCBsaXN0dGVzdCkgPT0gbGVuKGxpc3R0ZXN0KToKKyAgICAgICAgcmV0dXJuIExpc3RhdHRyLk5VTUJFUlMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTGlzdGF0dHIuU1RSSU5HUworCisKK2RlZiBpc19saXN0X3NlcXVlbmNlZCh0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgRnVuY3Rpb24gdG8gdGVsbCBpZiBsaXN0IGlzIHNlcXVlbmNlZAorICAgIEN1cnJlbnRseSB3ZSBtYXkgaGF2ZSBsaXN0IG1hZGUgdXAgb2Y6IFN0cmluZ3MgOyBudW1iZXJzIDsgcGVyY2VudGFnZSA7IHRpbWU7IHNpemUKKyAgICBFYWNoIGhhcyByZXNwZWN0aXZlIHdheSB0byBkZXRlcm1pbmUgaWYgaXQncyBzZXF1ZW5jZWQuCisgICAgIiIiCisgICAgdGVzdF9saXN0ID0gdGVzdGxpc3RbOl0KKyAgICB0cnk6CisgICAgICAgIHRlc3RfbGlzdC5yZW1vdmUoJycpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTEwgOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZWxpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5TVFJJTkdTIDoKKyAgICAgICAgcmV0dXJuIChzb3J0ZWQodGVzdF9saXN0KSA9PSB0ZXN0X2xpc3QpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLk5VTUJFUlMgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlBFUkNFTlQgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3RyaXAoJyUnKSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyKSA9PSBsaXN0X251bWJlcikKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU0laRSA6CisgICAgICAgIGxpc3RfbnVtYmVyID0gW10KKyAgICAgICAgIyBjdXJyZW50bHkgU0laRSBpcyBzcGxpdHRlZCBieSBzcGFjZQorICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiS0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiTUIiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIGV2YWwoaXRlbS5zcGxpdCgpWzBdKSkKKyAgICAgICAgICAgIGVsaWYgaXRlbS5zcGxpdCgpWzFdLnVwcGVyKCkgPT0gIkdCIjoKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoMTAyNCAqIDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaXN0X251bWJlci5hcHBlbmQoZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICByZXR1cm4gKHNvcnRlZChsaXN0X251bWJlcikgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgaXNfbGlzdF9pbnZlcnRlZCh0ZXN0bGlzdCk6CisgICAgIiIiCisgICAgRnVuY3Rpb24gdG8gdGVsbCBpZiBsaXN0IGlzIGludmVydGVkCisgICAgQ3VycmVudGx5IHdlIG1heSBoYXZlIGxpc3QgbWFkZSB1cCBvZjogU3RyaW5ncyA7IG51bWJlcnMgOyBwZXJjZW50YWdlIDsgdGltZTsgc2l6ZQorICAgIEVhY2ggaGFzIHJlc3BlY3RpdmUgd2F5IHRvIGRldGVybWluZSBpZiBpdCdzIGludmVydGVkLgorICAgICIiIgorICAgIHRlc3RfbGlzdCA9IHRlc3RsaXN0WzpdCisgICAgdHJ5OgorICAgICAgICB0ZXN0X2xpc3QucmVtb3ZlKCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICBpZiBnZXRfbGlzdF9hdHRyKHRlc3RsaXN0KSA9PSBMaXN0YXR0ci5OVUxMIDoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuU1RSSU5HUyA6CisgICAgICAgIHJldHVybiAoc29ydGVkKHRlc3RfbGlzdCwgcmV2ZXJzZSA9IFRydWUpID09IHRlc3RfbGlzdCkKKworICAgIGVsaWYgZ2V0X2xpc3RfYXR0cih0ZXN0bGlzdCkgPT0gTGlzdGF0dHIuTlVNQkVSUyA6CisgICAgICAgIGxpc3RfbnVtYmVyID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKGV2YWwoaXRlbSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlBFUkNFTlQgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3RyaXAoJyUnKSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbGlmIGdldF9saXN0X2F0dHIodGVzdGxpc3QpID09IExpc3RhdHRyLlNJWkUgOgorICAgICAgICBsaXN0X251bWJlciA9IFtdCisgICAgICAgICMgY3VycmVudGx5IFNJWkUgaXMgc3BsaXR0ZWQgYnkgc3BhY2UuIHN1Y2ggYXMgMCBCOyAxIEtCOyAyIE1CCisgICAgICAgIGZvciBpdGVtIGluIHRlc3RfbGlzdDoKKyAgICAgICAgICAgIGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJLQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbGlmIGl0ZW0uc3BsaXQoKVsxXS51cHBlcigpID09ICJNQiI6CisgICAgICAgICAgICAgICAgbGlzdF9udW1iZXIuYXBwZW5kKDEwMjQgKiAxMDI0ICogZXZhbChpdGVtLnNwbGl0KClbMF0pKQorICAgICAgICAgICAgZWxpZiBpdGVtLnNwbGl0KClbMV0udXBwZXIoKSA9PSAiR0IiOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZCgxMDI0ICogMTAyNCAqIDEwMjQgKiBldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpc3RfbnVtYmVyLmFwcGVuZChldmFsKGl0ZW0uc3BsaXQoKVswXSkpCisgICAgICAgIHJldHVybiAoc29ydGVkKGxpc3RfbnVtYmVyLCByZXZlcnNlID0gVHJ1ZSkgPT0gbGlzdF9udW1iZXIpCisKKyAgICBlbHNlOgorICAgICAgICBwcmludCAnVW5yZWNvZ25pemVkIGxpc3QgdHlwZSwgcGxlYXNlIGNoZWNrJworICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIHJlcGxhY2VfZmlsZV9jb250ZW50KGZpbGVuYW1lLCBpdGVtLCBvcHRpb24pOgorICAgIGYgPSBvcGVuKGZpbGVuYW1lKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGYuY2xvc2UoKQorICAgIG91dHB1dCA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGl0ZW0pOgorICAgICAgICAgICAgb3V0cHV0LndyaXRlKGl0ZW0gKyAiID0gJyIgKyBvcHRpb24gKyAiJ1xuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShsaW5lKQorICAgIG91dHB1dC5jbG9zZSgpCisKK2RlZiBleHRyYWN0X251bWJlcl9mcm9tX3N0cmluZyhzKToKKyAgICAiIiIKKyAgICBleHRyYWN0IHRoZSBudW1iZXJzIGluIGEgc3RyaW5nLiByZXR1cm4gdHlwZSBpcyAnbGlzdCcKKyAgICAiIiIKKyAgICByZXR1cm4gcmUuZmluZGFsbChyJyhbMC05XSspJywgcykKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJSTogYmFzZSBjbGFzcyAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgdG9hc3Rlcl9jYXNlc19iYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlID0gMQorICAgICAgICBzZWxmLnZlcmlmaWNhdGlvbkVycm9ycyA9IFtdCisgICAgICAgIHNlbGYuYWNjZXB0X25leHRfYWxlcnQgPSBUcnVlCisgICAgICAgIHNlbGYuaG9zdF9vcyA9IHBsYXRmb3JtLnN5c3RlbSgpLmxvd2VyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisgICAgICAgIGNvbmZpZ3MgPSBzZWxmLnBhcnNlci5yZWFkKCd0b2FzdGVyX3Rlc3QuY2ZnJykKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYuaG9zdF9vcywgJ3RvYXN0ZXJfdXJsJykpCisKKyAgICAgICAgIyBjcmVhdGUgbG9nIGRpciAuIEN1cnJlbnRseSAsIHdlIHB1dCBsb2cgZmlsZXMgaW4gbG9nL3RtcC4gQWZ0ZXIgYWxsCisgICAgICAgICMgdGVzdCBjYXNlcyBhcmUgZG9uZSwgbW92ZSB0aGVtIHRvIGxvZy8kZGF0ZXRpbWUgZGlyCisgICAgICAgIHNlbGYubG9nX3RtcF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3lzLnBhdGhbMF0pICsgb3Muc2VwICsgJ2xvZycgKyBvcy5zZXAgKyAndG1wJworICAgICAgICB0cnk6CisgICAgICAgICAgICBta2Rpcl9wKHNlbGYubG9nX3RtcF9kaXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIiUoYXNjdGltZSlzIENhbm5vdCBjcmVhdGUgdG1wIGRpciB1bmRlciBsb2csIHBsZWFzZSBjaGVjayB5b3VyIHByaXZpbGVnZSIpCisgICAgICAgIHNlbGYubG9nID0gc2VsZi5sb2dnZXJfY3JlYXRlKCkKKyAgICAgICAgIyBkcml2ZXIgc2V0dXAKKyAgICAgICAgc2VsZi5zZXR1cF9icm93c2VyKCkKKworICAgIGRlZiBsb2dnZXJfY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgd2UgdXNlIHJvb3QgbG9nZ2VyIGZvciBldmVyeSB0ZXN0Y2FzZS4KKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3QgdXNlIFRPQVNURVJYWFhfbG9nZ2VyIGlzIHRvIGF2b2lkIHNldHRpbmcgcmVzcGVjdGl2ZSBsZXZlbCBmb3IKKyAgICAgICAgcm9vdCBsb2dnZXIgYW5kIFRPQVNURVJYWFhfbG9nZ2VyCisgICAgICAgIFRvIEJlIERpc2N1c3NlZAorICAgICAgICAiIiIKKyAgICAgICAgbG9nX2xldmVsX2RpY3QgPSB7J0NSSVRJQ0FMJzpsb2dnaW5nLkNSSVRJQ0FMLCAnRVJST1InOmxvZ2dpbmcuRVJST1IsICdXQVJOSU5HJzpsb2dnaW5nLldBUk5JTkcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lORk8nOmxvZ2dpbmcuSU5GTywgJ0RFQlVHJzpsb2dnaW5nLkRFQlVHLCAnTk9UU0VUJzpsb2dnaW5nLk5PVFNFVH0KKyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorIyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ1RPQVNURVJfJyArIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmxvZ2dpbmdfbGV2ZWwgPSBldmFsKHNlbGYucGFyc2VyLmdldCgndG9hc3Rlcl90ZXN0XycgKyBzZWxmLmhvc3Rfb3MsICdsb2dnaW5nX2xldmVsJykpCisgICAgICAgIGtleSA9IHNlbGYubG9nZ2luZ19sZXZlbC51cHBlcigpCisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dfbGV2ZWxfZGljdFtrZXldKQorICAgICAgICBmaCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZW5hbWU9c2VsZi5sb2dfdG1wX2RpciArIG9zLnNlcCArICdjYXNlX2FsbCcgKyAnLmxvZycsIG1vZGU9J2EnKQorICAgICAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShwYXRobmFtZSlzIC0gJShsaW5lbm8pZCAtICUoYXNjdGltZSlzIFxuICBcCisgICAgICAgICAgICAgJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgICAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBsb2cuYWRkSGFuZGxlcihmaCkKKyAgICAgICAgbG9nLmFkZEhhbmRsZXIoY2gpCisgICAgICAgIHJldHVybiBsb2cKKworCisgICAgZGVmIHNldHVwX2Jyb3dzZXIoc2VsZiwgKmJyb3dzZXJfcGF0aCk6CisgICAgICAgIHNlbGYuYnJvd3NlciA9IGV2YWwoc2VsZi5wYXJzZXIuZ2V0KCd0b2FzdGVyX3Rlc3RfJyArIHNlbGYuaG9zdF9vcywgJ3Rlc3RfYnJvd3NlcicpKQorICAgICAgICBwcmludCBzZWxmLmJyb3dzZXIKKyAgICAgICAgaWYgc2VsZi5icm93c2VyID09ICJmaXJlZm94IjoKKyAgICAgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5GaXJlZm94KCkKKyAgICAgICAgZWxpZiBzZWxmLmJyb3dzZXIgPT0gImNocm9tZSI6CisgICAgICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKCkKKyAgICAgICAgZWxpZiBzZWxmLmJyb3dzZXIgPT0gImllIjoKKyAgICAgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5JZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkcml2ZXIgPSBOb25lCisgICAgICAgICAgICBwcmludCAidW5yZWNvZ25pemVkIGJyb3dzZXIgdHlwZSwgcGxlYXNlIGNoZWNrIgorICAgICAgICBzZWxmLmRyaXZlciA9IGRyaXZlcgorICAgICAgICBzZWxmLmRyaXZlci5pbXBsaWNpdGx5X3dhaXQoMzApCisgICAgICAgIHJldHVybiBzZWxmLmRyaXZlcgorCisKKyAgICBkZWYgc2F2ZV9zY3JlZW5zaG90KHNlbGYsICAqKmxvZ19hcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzYXZlIHNjcmVlbiBlaXRoZXIgYnkgb3MgaW50ZXJmYWNlIG9yIHNlbGVuaXVtIGludGVyZmFjZS4KKyAgICAgICAgSG93IHRvIHVzZToKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlID0gJ25hdGl2ZScvJ3NlbGVuaXVtJywgbG9nX3N1Yl9kaXIgPSAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25hbWUgPSAnc3RlcHgnKQorICAgICAgICB3aGVyZSBuYXRpdmUgbWVhbnMgc2NyZWVuc2hvdCBmdW5jIHByb3ZpZGVkIGJ5IE9TLAorICAgICAgICBzZWxlbml1bSBtZWFucyBzY3JlZW5zaG90IGZ1bmMgcHJvdmlkZWQgYnkgc2VsZW5pdW0gd2ViZHJpdmVyCisgICAgICAgICIiIgorICAgICAgICB0eXBlcyA9IFtsb2dfYXJncy5nZXQoJ3NjcmVlbnNob3RfdHlwZScpXQorICAgICAgICAjIHdoZW4gbm8gc2NyZWVuc2hvdF90eXBlIGlzIHNwZWNpZmllZAorICAgICAgICBpZiB0eXBlcyA9PSBbTm9uZV06CisgICAgICAgICAgICB0eXBlcyA9IFsnbmF0aXZlJywgJ3NlbGVuaXVtJ10KKyAgICAgICAgIyBub3JtYWxseSBhcHBlbmRfbmFtZSBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggc3RlcC4uCisgICAgICAgIGFkZF9uYW1lID0gbG9nX2FyZ3MuZ2V0KCdhcHBlbmRfbmFtZScpCisgICAgICAgIGlmIG5vdCBhZGRfbmFtZToKKyAgICAgICAgICAgIGFkZF9uYW1lID0gJy0nCisgICAgICAgICMgbm9ybWFsbHkgdGhlcmUncyBubyBuZWVkIHRvIHNwZWNpZnkgc3ViX2RpcgorICAgICAgICBzdWJfZGlyID0gbG9nX2FyZ3MuZ2V0KCdsb2dfc3ViX2RpcicpCisgICAgICAgIGlmIG5vdCBzdWJfZGlyOgorICAgICAgICAgICAgIyB1c2UgY2FzZXh4eCBhcyBzdWJfZGlyIG5hbWUKKyAgICAgICAgICAgIHN1Yl9kaXIgPSAnY2FzZScgKyBzdHIoc2VsZi5jYXNlX25vKQorICAgICAgICBmb3IgaXRlbSBpbiB0eXBlczoKKyAgICAgICAgICAgIGxvZ19kaXIgPSBzZWxmLmxvZ190bXBfZGlyICsgb3Muc2VwICsgc3ViX2RpcgorICAgICAgICAgICAgbWtkaXJfcChsb2dfZGlyKQorICAgICAgICAgICAgbG9nX3BhdGggPSBsb2dfZGlyICsgb3Muc2VwICsgIHNlbGYuYnJvd3NlciArICctJyArXAorICAgICAgICAgICAgICAgICAgICBpdGVtICsgJy0nICsgYWRkX25hbWUgKyAnLScgKyBzdHIoc2VsZi5zY3JlZW5zaG90X3NlcXVlbmNlKSArICcucG5nJworICAgICAgICAgICAgaWYgaXRlbSA9PSAnbmF0aXZlJzoKKyAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oInNjcm90ICIgKyBsb2dfcGF0aCkKKyAgICAgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZW5pdW0nOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdldF9zY3JlZW5zaG90X2FzX2ZpbGUobG9nX3BhdGgpCisgICAgICAgICAgICBzZWxmLnNjcmVlbnNob3Rfc2VxdWVuY2UgKz0gMQorCisgICAgZGVmIGJyb3dzZXJfZGVsYXkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBjdXJyZW50bHkgdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHNvbWUgY2hyb21lIHRlc3QuCisgICAgICAgIFNvbWV0aW1lcyB3ZSBuZWVkIGEgZGVsYXkgdG8gYWNjb21wbGlzaCBzb21lIG9wZXJhdGlvbi4KKyAgICAgICAgQnV0IGZvciBmaXJlZm94LCBtb3N0bHkgd2UgZG9uJ3QgbmVlZCB0aGlzLgorICAgICAgICBUbyBiZSBkaXNjdXNzZWQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuYnJvd3NlciA9PSAiY2hyb21lIjoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgcmV0dXJuCisKKworIyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBjb250YWluZWQgaW4gV2ViRHJpdmVyIGNsYXNzLi4KKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3RleHQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW3RleHQoKT0nIiArIHN0cmluZyArICInXSIpCisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRzX2J5X3RleHQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKlt0ZXh0KCk9JyIgKyBzdHJpbmcgKyAiJ10iKQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIHRleHRfc3RyaW5nKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaXMgdXNlZCB0byBzZWFyY2ggc29tZSBjZXJ0YWluICd0ZXh0JyBpbiBjZXJ0YWluIHRhYmxlCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW3RleHQoKT0nIiArIHRleHRfc3RyaW5nICsgIiddIikKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBmaW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzdW1lIHRoZXJlJ3JlIG11bHRpcGxlIHN1aXRhYmxlICJmaW5kX2VsZW1lbnRfYnlfbGlua190ZXh0Ii4KKyAgICAgICAgSW4gdGhpcyBjaXJjdW1zdGFuY2Ugd2UgbmVlZCB0byBzcGVjaWZ5ICJ0YWJsZSIuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQobGlua190ZXh0KQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCBsaW5rX3RleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VhcmNoIGxpbmstdGV4dCBpbiBjZXJ0YWluIHRhYmxlLiBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfbGlua190ZXh0KGxpbmtfdGV4dCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBwcmludCAnbm8gZWxlbWVudCBmb3VuZCcKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBlbGVtZW50X2xpc3QKKworCisgICAgZGVmIGZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLCB0YWJsZV9pZCwgbGlua190ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIFNlYXJjaCBlbGVtZW50IGJ5IHBhcnRpYWwgbGluayB0ZXh0IGluIGNlcnRhaW4gdGFibGUuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHRfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIGxpbmtfdGV4dCk6CisgICAgICAgICIiIgorICAgICAgICBBc3N1bWUgdGhlcmUncmUgbXVsdGlwbGUgc3VpdGFibGUgImZpbmRfcGFydGlhbF9lbGVtZW50X2J5X2xpbmtfdGV4dCIuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YWJsZV9lbGVtZW50ID0gc2VsZi5nZXRfdGFibGVfZWxlbWVudCh0YWJsZV9pZCkKKyAgICAgICAgICAgIGVsZW1lbnRfbGlzdCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50c19ieV9wYXJ0aWFsX2xpbmtfdGV4dChsaW5rX3RleHQpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudF9saXN0CisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnQgZm91bmQnCisgICAgICAgICAgICByYWlzZQorCisKKyAgICBkZWYgZmluZF9lbGVtZW50X2J5X3hwYXRoX2luX3RhYmxlKHNlbGYsIHRhYmxlX2lkLCB4cGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGhlbHBzIHRvIG5hcnJvdyBkb3duIHNlYXJjaCBhcmVhLiBFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBwb3AtdXAgZm9ybS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhYmxlX2VsZW1lbnQgPSBzZWxmLmdldF90YWJsZV9lbGVtZW50KHRhYmxlX2lkKQorICAgICAgICAgICAgZWxlbWVudCA9IHRhYmxlX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoKQorICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHByaW50ICdubyBlbGVtZW50IGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQKKworCisgICAgZGVmIGZpbmRfZWxlbWVudHNfYnlfeHBhdGhfaW5fdGFibGUoc2VsZiwgdGFibGVfaWQsIHhwYXRoKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaGVscHMgdG8gbmFycm93IGRvd24gc2VhcmNoIGFyZWEuIEVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRoIHBvcC11cCBmb3JtLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFibGVfZWxlbWVudCA9IHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQodGFibGVfaWQpCisgICAgICAgICAgICBlbGVtZW50X2xpc3QgPSB0YWJsZV9lbGVtZW50LmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoeHBhdGgpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgJ25vIGVsZW1lbnRzIGZvdW5kJworICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRfbGlzdAorCisKKyAgICBkZWYgc2hvcnRlc3RfeHBhdGgoc2VsZiwgcG5hbWUsIHB2YWx1ZSk6CisgICAgICAgIHJldHVybiAiLy8qW0AiICsgcG5hbWUgKyAiPSciICsgcHZhbHVlICsgIiddIgorCisKKyN1c3VhbGx5IGVsZW1lbnRzIGluIHRoZSBzYW1lIGNvbHVtbiBhcmUgd2l0aCBzYW1lIGNsYXNzIG5hbWUuIGZvciBpbnN0YW5jZTogY2xhc3M9Im91dGNvbWUiIC5UQkQKKyAgICBkZWYgZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KHNlbGYsIGF0dHJfbmFtZSwgYXR0cl92YWx1ZSk6CisgICAgICAgIGNfeHBhdGggPSBzZWxmLnNob3J0ZXN0X3hwYXRoKGF0dHJfbmFtZSwgYXR0cl92YWx1ZSkKKyAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKGNfeHBhdGgpCisgICAgICAgIGNfbGlzdCA9IFtdCisgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIHJldHVybiBjX2xpc3QKKworCisgICAgZGVmIGdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYsIHRhYmxlX2lkLCBjb2x1bW5fbnVtYmVyKToKKyAgICAgICAgY194cGF0aCA9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vL3RkWyIgKyBzdHIoY29sdW1uX251bWJlcikgKyAiXSIKKyAgICAgICAgZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKGNfeHBhdGgpCisgICAgICAgIGNfbGlzdCA9IFtdCisgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgY19saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIHJldHVybiBjX2xpc3QKKworCisgICAgZGVmIGdldF90YWJsZV9oZWFkX3RleHQoc2VsZiwgKnRhYmxlX2lkKToKKyNub3cgdGFibGVfaWQgaXMgYSB0dXBsZS4uLgorICAgICAgICBpZiB0YWJsZV9pZDoKKyAgICAgICAgICAgIHRoZWFkX3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZFswXSArICInXS8vdGhlYWQvL3RoW3RleHQoKV0iCisgICAgICAgICAgICBlbGVtZW50cyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgodGhlYWRfeHBhdGgpCisgICAgICAgICAgICBjX2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC50ZXh0OgorICAgICAgICAgICAgICAgICAgICBjX2xpc3QuYXBwZW5kKGVsZW1lbnQudGV4dCkKKyAgICAgICAgICAgIHJldHVybiBjX2xpc3QKKyNkZWZhdWx0IHRhYmxlIG9uIHBhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKi90YWJsZS90aGVhZCIpLnRleHQKKworCisKKyAgICBkZWYgZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZiwgdGFibGVfaWQsICpjb29yZGluYXRlKToKKyAgICAgICAgaWYgbGVuKGNvb3JkaW5hdGUpID09IDA6CisjcmV0dXJuIHdob2xlLXRhYmxlIGVsZW1lbnQKKyAgICAgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoZWxlbWVudF94cGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudAorICAgICAgICByb3cgPSBjb29yZGluYXRlWzBdCisKKyAgICAgICAgaWYgbGVuKGNvb3JkaW5hdGUpID09IDE6CisjcmV0dXJuIHdob2xlLXJvdyBlbGVtZW50CisgICAgICAgICAgICBlbGVtZW50X3hwYXRoID0gIi8vKltAaWQ9JyIgKyB0YWJsZV9pZCArICInXS90Ym9keS90clsiICsgc3RyKHJvdykgKyAiXSIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgICAgICBleGNlcHQgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50Cisjbm93IHdlIGFyZSBsb29raW5nIGZvciBhbiBlbGVtZW50IHdpdGggc3BlY2lmaWVkIFggYW5kIFkKKyAgICAgICAgY29sdW1uID0gY29vcmRpbmF0ZVsxXQorCisgICAgICAgIGVsZW1lbnRfeHBhdGggPSAiLy8qW0BpZD0nIiArIHRhYmxlX2lkICsgIiddL3Rib2R5L3RyWyIgKyBzdHIocm93KSArICJdL3RkWyIgKyBzdHIoY29sdW1uKSArICJdIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKGVsZW1lbnRfeHBhdGgpCisgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBlbGVtZW50CisKKworICAgIGRlZiBnZXRfdGFibGVfZGF0YShzZWxmLCB0YWJsZV9pZCwgcm93X2NvdW50LCBjb2x1bW5fY291bnQpOgorICAgICAgICByb3cgPSAxCisgICAgICAgIExpc3RzID0gW10KKyAgICAgICAgd2hpbGUgcm93IDw9IHJvd19jb3VudDoKKyAgICAgICAgICAgIGNvbHVtbiA9IDEKKyAgICAgICAgICAgIHJvd19jb250ZW50PVtdCisgICAgICAgICAgICB3aGlsZSBjb2x1bW4gPD0gY29sdW1uX2NvdW50OgorICAgICAgICAgICAgICAgIHM9ICIvLypbQGlkPSciICsgdGFibGVfaWQgKyAiJ10vdGJvZHkvdHJbIiArIHN0cihyb3cpICsiXS90ZFsiICsgc3RyKGNvbHVtbikgKyAiXSIKKyAgICAgICAgICAgICAgICB2ID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHMpLnRleHQKKyAgICAgICAgICAgICAgICByb3dfY29udGVudC5hcHBlbmQodikKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gKyAxCisgICAgICAgICAgICAgICAgcHJpbnQoInJvd19jb250ZW50PSIscm93X2NvbnRlbnQpCisgICAgICAgICAgICBMaXN0cy5leHRlbmQocm93X2NvbnRlbnQpCisgICAgICAgICAgICBwcmludCBMaXN0c1tyb3ctMV1bMF0KKyAgICAgICAgICAgIHJvdyA9IHJvdyArIDEKKyAgICAgICAgcmV0dXJuIExpc3RzCisKKyAgICAjIFRoZSBpc194eHhfcHJlc2VudCBmdW5jdGlvbnMgb25seSByZXR1cm5zIFRydWUvRmFsc2UKKyAgICAjIEFsbCB0aGUgbG9nIHdvcmsgaXMgZG9uZSBpbiB0ZXN0IHByb2NlZHVyZSwgc28gd2UgY2FuIGVhc2lseSB0cmFjZSBiYWNrCisgICAgIyB1c2luZyBsb2dnaW5nCisgICAgZGVmIGlzX3RleHRfcHJlc2VudCAoc2VsZiwgcGF0dGVybnMpOgorICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKKyAgICAgICAgICAgIGlmIHN0cihwYXR0ZXJuKSBub3QgaW4gc2VsZi5kcml2ZXIucGFnZV9zb3VyY2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGRlZiBpc19lbGVtZW50X3ByZXNlbnQoc2VsZiwgaG93LCB3aGF0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50KGhvdywgd2hhdCkKKyAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24sIGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIGlzX2FsZXJ0X3ByZXNlbnQoc2VsZik6CisgICAgICAgIHRyeTogc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKKyAgICAgICAgZXhjZXB0IE5vQWxlcnRQcmVzZW50RXhjZXB0aW9uLCBlOiByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgZGVmIGNsb3NlX2FsZXJ0X2FuZF9nZXRfaXRzX3RleHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFsZXJ0ID0gc2VsZi5kcml2ZXIuc3dpdGNoX3RvX2FsZXJ0KCkKKyAgICAgICAgICAgIGFsZXJ0X3RleHQgPSBhbGVydC50ZXh0CisgICAgICAgICAgICBpZiBzZWxmLmFjY2VwdF9uZXh0X2FsZXJ0OgorICAgICAgICAgICAgICAgIGFsZXJ0LmFjY2VwdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsZXJ0LmRpc21pc3MoKQorICAgICAgICAgICAgcmV0dXJuIGFsZXJ0X3RleHQKKyAgICAgICAgZmluYWxseTogc2VsZi5hY2NlcHRfbmV4dF9hbGVydCA9IFRydWUKKworCisgICAgZGVmIGdldF9jYXNlX251bWJlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHdoYXQgY2FzZSBhcmUgd2UgcnVubmluZyBub3cKKyAgICAgICAgIiIiCisgICAgICAgIGZ1bmNuYW1lID0gc3lzLl9nZXRmcmFtZSgxKS5mX2NvZGUuY29fbmFtZQorICAgICAgICBjYXNlbm9fc3RyID0gZnVuY25hbWUuc3RyaXAoJ3Rlc3RfJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FzZW5vID0gaW50KGNhc2Vub19zdHIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgImdldCBjYXNlIG51bWJlciBlcnJvciEgcGxlYXNlIGNoZWNrIGlmIGZ1bmMgbmFtZSBpcyB0ZXN0X3h4eCIKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gY2FzZW5vCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIEVORDogQ0FTRSAlcyBsb2cgXG5cbicgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIucXVpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYudmVyaWZpY2F0aW9uRXJyb3JzKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgUEFSVCBJSUk6IHRlc3QgY2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgcGxlYXNlIHJlZmVyIHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD14eHggICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBOb3RlOiB0byBjb21wbHkgd2l0aCB0aGUgdW5pdHRlc3QgZnJhbWV3b3JrLCB3ZSBjYWxsIHRoZXNlIHRlc3RfeHh4IGZ1bmN0aW9ucworIyBmcm9tIHJ1bl90b2FzdGVyY2FzZXMucHkgdG8gYXZvaWQgY2FsbGluZyBzZXRVcCgpIGFuZCB0ZWFyRG93bigpIG11bHRpcGxlIHRpbWVzCisKKworY2xhc3MgdG9hc3Rlcl9jYXNlcyh0b2FzdGVyX2Nhc2VzX2Jhc2UpOgorICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMSAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMShzZWxmKToKKyAgICAgICAgIyB0aGUgcmVhc29uIHdoeSBnZXRfY2FzZV9udW1iZXIgaXMgbm90IGluIHNldFVwIGZ1bmN0aW9uIGlzIHRoYXQKKyAgICAgICAgIyBvdGhlcndpc2UgaXQgcmV0dXJucyAic2V0VXAiIGluc3RlYWQgb2YgInRlc3RfeHh4IgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgIyBvcGVuIGFsbCBjb2x1bW5zCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBhZGRpbmcgZXhwbGljaXRseSB3YWl0IGZvciBjaHJvbWVkcml2ZXIuLi1fLQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInN0YXJ0ZWRfb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgidGltZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIGRpY3Q6IHtsaW50IHRleHQgbmFtZSA6IGFjdHVhbCBjbGFzcyBuYW1lfQorICAgICAgICB0YWJsZV9oZWFkX2RpY3QgPSB7J091dGNvbWUnOidvdXRjb21lJywgJ1JlY2lwZSc6J3RhcmdldCcsICdNYWNoaW5lJzonbWFjaGluZScsICdTdGFydGVkIG9uJzonc3RhcnRlZF9vbicsICdDb21wbGV0ZWQgb24nOidjb21wbGV0ZWRfb24nLCBcCisgICAgICAgICAgICAgICAgJ0Vycm9ycyc6J2Vycm9yc19ubycsICdXYXJuaW5ncyc6J3dhcm5pbmdzX25vJywgJ1RpbWUnOid0aW1lJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiVzIGNhbm5vdCBiZSBmb3VuZCBvbiBwYWdlIiAlIGtleSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICMgYWZ0ZXIgMXN0IGNsaWNrLCB0aGUgbGlzdCBzaG91bGQgYmUgZWl0aGVyIHNlcXVlbmNlZCBvciBpbnZlcnRlZCwgYnV0IHdlIGRvbid0IGhhdmUgYSAiZGVmYXVsdCBvcmRlciIgaGVyZQorICAgICAgICAgICAgIyB0aGUgcG9pbnQgaXMsIGFmdGVyIGFub3RoZXIgY2xpY2ssIGl0IHNob3VsZCBiZSBhbm90aGVyIG9yZGVyCisgICAgICAgICAgICBpZiBpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCJjYXNlIHBhc3NlZCIpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgQ291bGQgYWRkIG1vcmUgdGVzdCBwYXR0ZXJucyBoZXJlIGluIHRoZSBmdXR1cmUuIEFsc28sIGNvdWxkIHNlYXJjaCBzb21lIGl0ZW1zIG90aGVyIHRoYW4gdGFyZ2V0IGNvbHVtbiBpbiBmdXR1cmUuLgorICAgICAgICBwYXR0ZXJucyA9IFsibWluaW1hbCIsICJzYXRvIl0KKyAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CisgICAgICAgICAgICBvcmlfdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgcHJpbnQgb3JpX3RhcmdldF9jb2x1bW5fdGV4dHMKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMocGF0dGVybikKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIG5ld190YXJnZXRfY29sdW1uX3RleHRzID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgInRhcmdldCIpCisgICAgICAgICAgICAjIGlmIG5vdGhpbmcgZm91bmQsIHdlIHN0aWxsIGNvdW50IGl0IGFzICJwYXNzIgorICAgICAgICAgICAgaWYgbmV3X3RhcmdldF9jb2x1bW5fdGV4dHM6CisgICAgICAgICAgICAgICAgZm9yIHRleHQgaW4gbmV3X3RhcmdldF9jb2x1bW5fdGV4dHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0ZXh0LmZpbmQocGF0dGVybikpCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICAgICAgdGFyZ2V0X2NvbHVtbl90ZXh0cyA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsICJ0YXJnZXQiKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9yaV90YXJnZXRfY29sdW1uX3RleHRzID09IHRhcmdldF9jb2x1bW5fdGV4dHMpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwMyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwMyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgd2hlbiBvcGVuaW5nIGEgbmV3IHBhZ2UsICJzdGFydGVkX29uIiBpcyBub3QgZGlzcGxheWVkIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIGN1cnJlbnRseSBhbGwgdGhlIGRlbGF5IGFyZSBmb3IgY2hyb21lIGRyaXZlciAtXy0KKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIGl0ZW1zID0gWyJPdXRjb21lIiwgIkNvbXBsZXRlZCBvbiIsICJTdGFydGVkIG9uIiwgIkZhaWxlZCB0YXNrcyIsICJFcnJvcnMiLCAiV2FybmluZ3MiXQorICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV90ZXh0X2luX3RhYmxlKCdvdGFibGUnLCBpdGVtKQorICAgICAgICAgICAgICAgICMgdGhpcyBpcyBob3cgd2UgZmluZCAiZmlsdGVyIGljb24iIGluIHRoZSBzYW1lIGxldmVsIGFzIHRlbXBfZWxlbWVudCh3aGVyZSAiYSIgbWVhbnMgY2xpY2thYmxlLCAiaSIgbWVhbnMgaWNvbikKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLyovYS9pW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgY2Fubm90IGJlIGZvdW5kISAlcyIgJSAoaXRlbSwgZSkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHN0ZXAgNS02CisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ091dGNvbWUnKQorICAgICAgICB0ZW1wX2VsZW1lbnQuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIuLi8vKi9hL2lbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAjIHRoZSAybmQgb3B0aW9uLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIigvL2lucHV0W0BuYW1lPSdmaWx0ZXInXSlbMl0iKS5jbGljaygpCisgICAgICAgICMgY2xpY2sgIkFwcGx5IiBidXR0b24KKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdmaWx0ZXJfb3V0Y29tZSddLy8qW3RleHQoKT0nQXBwbHknXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNScpCisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ0NvbXBsZXRlZCBvbicpCisgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nZmlsdGVyX2NvbXBsZXRlZF9vbiddLy8qW3RleHQoKT0nQXBwbHknXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIHRvIGNvbXBhcmUgdG8gcHJldmlvdXMgb25lCisgICAgICAgICMgcGxlYXNlIG5vdGUgdGhhdCBmb3IgY2hyb21lIGRyaXZlciwgbmVlZCBhIGxpdHRsZSBicmVhayBiZWZvcmUgc2F2aW5nCisgICAgICAgICMgc2NyZWVuIGhlcmUgLV8tCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDYnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImNvcmUtaW1hZ2UiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkwNCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkwNChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiY29yZS1pbWFnZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiVGFza3MiKS5jbGljaygpCisjICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJBbGwgYnVpbGRzIikuY2xpY2soKQorIyAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgIHNlbGYudGFibGVfbmFtZSA9ICdvdGFibGUnCisgICAgICAgICMgVGhpcyBpcyBob3cgd2UgZmluZCB0aGUgImRlZmF1bHQiIHJvd3MtbnVtYmVyIQorICAgICAgICByb3dzX2Rpc3BsYXllZCA9IGludChTZWxlY3Qoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3Rvcigic2VsZWN0LnBhZ2VzaXplIikpLmZpcnN0X3NlbGVjdGVkX29wdGlvbi50ZXh0KQorICAgICAgICBwcmludCByb3dzX2Rpc3BsYXllZAorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkKSkKKyAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5nZXRfdGFibGVfZWxlbWVudChzZWxmLnRhYmxlX25hbWUsIHJvd3NfZGlzcGxheWVkICsgMSkpCisgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHRhc2tzIgorICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCB0YXNrcyddIikpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKCJidXN5Ym94IikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgIyBTYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDVfMicpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJjcHVfdXNlZCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkaXNrX2lvIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRhc2tfbG9nIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV92ZXJzaW9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInRpbWVfdGFrZW4iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgVGhlIG9wZXJhdGlvbiBpcyB0aGUgc2FtZSBhcyBjYXNlOTAxCisgICAgICAgICMgZGljdDoge2xpbnQgdGV4dCBuYW1lIDogYWN0dWFsIGNsYXNzIG5hbWV9CisgICAgICAgIHRhYmxlX2hlYWRfZGljdCA9IHsnT3JkZXInOidvcmRlcicsICdSZWNpcGUnOidyZWNpcGVfbmFtZScsICdUYXNrJzondGFza19uYW1lJywgJ0V4ZWN1dGVkJzonZXhlY3V0ZWQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnT3V0Y29tZSc6J291dGNvbWUnLCAnQ2FjaGUgYXR0ZW1wdCc6J2NhY2hlX2F0dGVtcHQnLCAnVGltZSAoc2VjcyknOid0aW1lX3Rha2VuJywgJ0NQVSB1c2FnZSc6J2NwdV91c2VkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rpc2sgSS9PIChtcyknOidkaXNrX2lvJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisjIFRoaXMgaXMgdHJpY2t5IGhlcmU6IHdlIGFyZSBkb2luZyBzbyBiZWNhdXNlIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gMQorIyBzYW1lLW5hbWUgbGlua190ZXh0IGluIG9uZSBwYWdlLiBTbyB3ZSBvbmx5IGZpbmQgZWxlbWVudCBpbnNpZGUgdGhlIHRhYmxlCisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisjIGFmdGVyIDFzdCBjbGljaywgdGhlIGxpc3Qgc2hvdWxkIGJlIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQsIGJ1dCB3ZSBkb24ndCBoYXZlIGEgImRlZmF1bHQgb3JkZXIiIGhlcmUKKyMgdGhlIHBvaW50IGlzLCBhZnRlciBhbm90aGVyIGNsaWNrLCBpdCBzaG91bGQgYmUgYW5vdGhlciBvcmRlcgorIyB0aGUgZmlzdCBjYXNlIGlzIHNwZWNpYWw6dGhpcyBtZWFucyBldmVyeSBpdGVtIGluIGNvbHVtbl9saXN0IGlzIHRoZSBzYW1lLCBzbworIyBhZnRlciBvbmUgY2xpY2ssIGVpdGhlciBzZXF1ZW5jZWQgb3IgaW52ZXJ0ZWQgd2lsbCBiZSBmaW5lCisgICAgICAgICAgICBpZiAoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkgYW5kIGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkgXAorICAgICAgICAgICAgICAgIG9yIChub3QgY29sdW1uX2xpc3QpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICBlbGlmIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCJjbGFzcyIsIHRhYmxlX2hlYWRfZGljdFtrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKyMgc3RlcCA4LTEwCisgICAgICAgICMgZmlsdGVyIGRpY3Q6IHtsaW5rIHRleHQgbmFtZSA6IGZpbHRlciB0YWJsZSBuYW1lIGluIHhwYXRofQorICAgICAgICBmaWx0ZXJfZGljdCA9IHsnRXhlY3V0ZWQnOidmaWx0ZXJfZXhlY3V0ZWQnLCAnT3V0Y29tZSc6J2ZpbHRlcl9vdXRjb21lJywgJ0NhY2hlIGF0dGVtcHQnOidmaWx0ZXJfY2FjaGVfYXR0ZW1wdCd9CisgICAgICAgIGZvciBrZXkgaW4gZmlsdGVyX2RpY3Q6CisgICAgICAgICAgICB0ZW1wX2VsZW1lbnQgPSBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpCisgICAgICAgICAgICAjIGZpbmQgdGhlIGZpbHRlciBpY29uIGJlc2lkZXMgaXQuCisgICAgICAgICAgICAjIEFuZCBoZXJlIHdlIG11c3QgaGF2ZSBicmVhayAoMSBzZWMpIHRvIGdldCB0aGUgcG9wdXAgc3R1ZmYKKyAgICAgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qW0BjbGFzcz0naWNvbi1maWx0ZXIgZmlsdGVyZWQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBhdmFpbF9vcHRpb25zID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gKyAiJ10vLypbQG5hbWU9J2ZpbHRlciddW25vdChAZGlzYWJsZWQpXSIpCisgICAgICAgICAgICBmb3IgbnVtYmVyIGluIHJhbmdlKDAsIGxlbihhdmFpbF9vcHRpb25zKSk6CisgICAgICAgICAgICAgICAgYXZhaWxfb3B0aW9uc1tudW1iZXJdLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICAgICAgICAgICMgY2xpY2sgIkFwcGx5IgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nIiArIGZpbHRlcl9kaWN0W2tleV0gICsgIiddLy8qW0B0eXBlPSdzdWJtaXQnXSIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICAjIGluc2VydCBzY3JlZW4gY2FwdHVyZSBoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA4JykKKyAgICAgICAgICAgICAgICAjIGFmdGVyIHRoZSBsYXN0IG9wdGlvbiB3YXMgY2xpY2tlZCwgd2UgZG9uJ3QgbmVlZCBvcGVyYXRpb24gYmVsb3cgYW55bW9yZQorICAgICAgICAgICAgICAgIGlmIG51bWJlciA8IGxlbihhdmFpbF9vcHRpb25zKS0xOgorICAgICAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50ID0gc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KQorICAgICAgICAgICAgICAgICAgICAgdGVtcF9lbGVtZW50LmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLi4vLypbQGNsYXNzPSdpY29uLWZpbHRlciBmaWx0ZXJlZCddIikuY2xpY2soKQorICAgICAgICAgICAgICAgICAgICAgYXZhaWxfb3B0aW9ucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9JyIgKyBmaWx0ZXJfZGljdFtrZXldICsgIiddLy8qW0BuYW1lPSdmaWx0ZXInXVtub3QoQGRpc2FibGVkKV0iKQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyMgc3RlcCAxMQorICAgICAgICBmb3IgaXRlbSBpbiBbJ29yZGVyJywgJ3Rhc2tfbmFtZScsICdleGVjdXRlZCcsICdvdXRjb21lJywgJ3JlY2lwZV9uYW1lJywgJ3JlY2lwZV92ZXJzaW9uJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfeHBhdGhfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAiLi90Ym9keS90clsxXS8qW0BjbGFzcz0nIiArIGl0ZW0gKyAiJ10vYSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgIyBsZXQgaXQgZ28uLi4KKyAgICAgICAgICAgICAgICBwcmludCAnbm8gaXRlbSBpbiB0aGUgY29sdW0nICsgaXRlbQorICAgICAgICAgICAgIyBpbnNlcnQgc2NyZWVuIHNob3QgaGVyZQorICAgICAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwMTEnKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisjIHN0ZXAgMTItMTQKKyAgICAgICAgIyBhYm91dCB0ZXN0X2RpY3Q6IHBsZWFzZSByZWZlciB0byB0ZXN0Y2FzZSA5MDQgcmVxdWlyZW1lbnQgc3RlcCAxMi0xNAorICAgICAgICB0ZXN0X2RpY3QgPSB7CisgICAgICAgICAgICAnVGltZSc6eworICAgICAgICAgICAgICAgICdjbGFzcyc6J3RpbWVfdGFrZW4nLAorICAgICAgICAgICAgICAgICdjaGVja19oZWFkX2xpc3QnOlsnUmVjaXBlJywgJ1Rhc2snLCAnRXhlY3V0ZWQnLCAnT3V0Y29tZScsICdUaW1lIChzZWNzKSddLAorICAgICAgICAgICAgICAgICdjaGVja19jb2x1bW5fbGlzdCc6WydjcHVfdXNlZCcsICdjYWNoZV9hdHRlbXB0JywgJ2Rpc2tfaW8nLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdDUFUgdXNhZ2UnOnsKKyAgICAgICAgICAgICAgICAnY2xhc3MnOidjcHVfdXNlZCcsCisgICAgICAgICAgICAgICAgJ2NoZWNrX2hlYWRfbGlzdCc6WydSZWNpcGUnLCAnVGFzaycsICdFeGVjdXRlZCcsICdPdXRjb21lJywgJ0NQVSB1c2FnZSddLAorICAgICAgICAgICAgICAgICdjaGVja19jb2x1bW5fbGlzdCc6WydjYWNoZV9hdHRlbXB0JywgJ2Rpc2tfaW8nLCAnb3JkZXInLCAncmVjaXBlX3ZlcnNpb24nLCAndGltZV90YWtlbiddCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ0Rpc2sgSS9PJzp7CisgICAgICAgICAgICAgICAgJ2NsYXNzJzonZGlza19pbycsCisgICAgICAgICAgICAgICAgJ2NoZWNrX2hlYWRfbGlzdCc6WydSZWNpcGUnLCAnVGFzaycsICdFeGVjdXRlZCcsICdPdXRjb21lJywgJ0Rpc2sgSS9PIChtcyknXSwKKyAgICAgICAgICAgICAgICAnY2hlY2tfY29sdW1uX2xpc3QnOlsnY3B1X3VzZWQnLCAnY2FjaGVfYXR0ZW1wdCcsICdvcmRlcicsICdyZWNpcGVfdmVyc2lvbicsICd0aW1lX3Rha2VuJ10KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3Iga2V5IGluIHRlc3RfZGljdDoKKyAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnY29yZS1pbWFnZScpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2Jywga2V5KS5jbGljaygpCisgICAgICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiB0ZXN0X2RpY3Rba2V5XVsnY2hlY2tfaGVhZF9saXN0J106CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgnY2xhc3MnLCB0ZXN0X2RpY3Rba2V5XVsnY2xhc3MnXSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9saXN0KSkKKworICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgZm9yIGl0ZW0yIGluIHRlc3RfZGljdFtrZXldWydjaGVja19jb2x1bW5fbGlzdCddOgorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZChpdGVtMikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgIyBUQkQ6IHNhdmUgc2NyZWVuIGhlcmUKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTA2ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTA2KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdQYWNrYWdlcycpLmNsaWNrKCkKKyAgICAgICAgIyBmaW5kICJiYXNoIiBpbiBmaXJzdCBjb2x1bW4gKFBhY2thZ2VzKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J290YWJsZSddLy90ZFsxXS8vKlt0ZXh0KCk9J2Jhc2gnXSIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjZWVuIGhlcmUgdG8gb2JzZXJ2ZS4uLgorIyBzdGVwIDYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJHZW5lcmF0ZWQgZmlsZXMiKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydGaWxlJywgJ1NpemUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3BhdGgnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY19saXN0KSkKKyMgc3RlcCA3CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUnVudGltZSBkZXBlbmRlbmNpZXMiKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY2VlbiBoZXJlIHRvIG9ic2VydmUuLi4KKyAgICAgICAgIyBub3RlIHRoYXQgaGVyZSB0YWJsZSBuYW1lIGlzIG5vdCAnb3RhYmxlJworICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ2RlcGVuZGVuY2llcycpCisgICAgICAgIGZvciBpdGVtIGluIFsnUGFja2FnZScsICdWZXJzaW9uJywgJ1NpemUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcignZGVwZW5kZW5jaWVzJywgMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNfbGlzdCkpCisgICAgICAgIHRleHRzID0gWydTaXplJywgJ0xpY2Vuc2UnLCAnUmVjaXBlJywgJ1JlY2lwZSB2ZXJzaW9uJywgJ0xheWVyJywgXAorICAgICAgICAgICAgICAgICAgICAgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCAnTGF5ZXIgZGlyZWN0b3J5J10KKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KHRleHRzKSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTEwICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTEwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBpbWFnZV90eXBlPSJjb3JlLWltYWdlLW1pbmltYWwiCisgICAgICAgIHRlc3RfcGFja2FnZTE9ImJ1c3lib3giCisgICAgICAgIHRlc3RfcGFja2FnZTI9ImxpYiIKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaW1hZ2VfdHlwZSkuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzJykKKworICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnb3RhYmxlJworICAgICAgICAjIFRoaXMgaXMgaG93IHdlIGZpbmQgdGhlICJkZWZhdWx0IiByb3dzLW51bWJlciEKKyAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoU2VsZWN0KHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoInNlbGVjdC5wYWdlc2l6ZSIpKS5maXJzdF9zZWxlY3RlZF9vcHRpb24udGV4dCkKKyAgICAgICAgcHJpbnQgcm93c19kaXNwbGF5ZWQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCkpCisgICAgICAgIHNlbGYuZmFpbElmKHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoc2VsZi50YWJsZV9uYW1lLCByb3dzX2Rpc3BsYXllZCArIDEpKQorCisgICAgICAgICMgQ2hlY2sgdGhlIGRlZmF1bHQgdGFibGUgaXMgc29ydGVkIGJ5IFJlY2lwZQorICAgICAgICB0YXNrc19jb2x1bW5fY291bnQgPSBsZW4oc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlsyXS9kaXZbMl0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgdGFza3NfY29sdW1uX2NvdW50CisgICAgICAgIGRlZmF1bHRfY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMSkKKyAgICAgICAgI3ByaW50IGRlZmF1bHRfY29sdW1uX2xpc3QKKworICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoZGVmYXVsdF9jb2x1bW5fbGlzdCkpCisKKyAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuc2VuZF9rZXlzKHRlc3RfcGFja2FnZTEpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBTYXZlIHNjcmVlbiBoZXJlCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDQnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0XzInKQorCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAnUmVjaXBlJykuY2xpY2soKQorICAgICAgICAjIENoZWNrIHRoZSBpbnZlcnRlZCB0YWJsZSBieSBSZWNpcGUKKyAgICAgICAgIyBSZWNpcGUgZG9lc24ndCBoYXZlIGNsYXNzIG5hbWUKKyAgICAgICAgI2ludmVydGVkX3Rhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keS90ci90ZFsxXSIpKQorICAgICAgICAjcHJpbnQgaW52ZXJ0ZWRfdGFza3NfY29sdW1uX2NvdW50CisgICAgICAgICNpbnZlcnRlZF9jb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAxKQorICAgICAgICAjcHJpbnQgaW52ZXJ0ZWRfY29sdW1uX2xpc3QKKworICAgICAgICAjc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJ6bGliIikuY2xpY2soKQorICAgICAgICAjc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICNzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChpbnZlcnRlZF9jb2x1bW5fbGlzdCkpCisgICAgICAgICNzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCAnUmVjaXBlJykuY2xpY2soKQorCisgICAgICAgIHRhYmxlX2hlYWRfZGljdCA9IHsnUmVjaXBlJzoncmVjaXBlX19uYW1lJywgJ1JlY2lwZSBmaWxlJzoncmVjaXBlX2ZpbGUnLCAnU2VjdGlvbic6J3JlY2lwZV9zZWN0aW9uJywgXAorICAgICAgICAgICAgICAgICdMaWNlbnNlJzoncmVjaXBlX2xpY2Vuc2UnLCAnTGF5ZXInOidsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZScsIFwKKyAgICAgICAgICAgICAgICAnTGF5ZXIgYnJhbmNoJzonbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJ30KKyAgICAgICAgZm9yIGtleSBpbiB0YWJsZV9oZWFkX2RpY3Q6CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICBpZiAoaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkgYW5kIGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkgXAorICAgICAgICAgICAgICAgICAgICBvciAobm90IGNvbHVtbl9saXN0KSA6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpIG9yIGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkgb3IgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCByZWNpcGVzJ10iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UyKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fc2VhcmNoX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX3NlYXJjaF9saXN0KSBvciBpc19saXN0X2ludmVydGVkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKyAgICAgICAgICAgIGVsaWYgaXNfbGlzdF9pbnZlcnRlZChjb2x1bW5fbGlzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKHNlbGYudGFibGVfbmFtZSwga2V5KS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiYWNsIikuY2xpY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChjb2x1bW5fbGlzdCkpCisgICAgICAgICAgICAgICAgIyBTZWFyY2ggdGV4dCBib3ggYmFja2dyb3VuZCB0ZXh0IGlzICJTZWFyY2ggcmVjaXBlcyIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGlkPSdzZWFyY2hmb3JtJ10vKltAcGxhY2Vob2xkZXI9J1NlYXJjaCByZWNpcGVzJ10iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cyh0ZXN0X3BhY2thZ2UyKQorICAgICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgICAgICBjb2x1bW5fc2VhcmNoX2xpc3QgPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dCgiY2xhc3MiLCB0YWJsZV9oZWFkX2RpY3Rba2V5XSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX3NlYXJjaF9saXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZShzZWxmLnRhYmxlX25hbWUsIGtleSkuY2xpY2soKQorICAgICAgICAgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJhY2wiKS5jbGljaygpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoInpsaWIiKS5jbGljaygpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQoY29sdW1uX2xpc3QpKQorICAgICAgICAgICAgICAgICMgU2VhcmNoIHRleHQgYm94IGJhY2tncm91bmQgdGV4dCBpcyAiU2VhcmNoIHJlY2lwZXMiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nc2VhcmNoZm9ybSddLypbQHBsYWNlaG9sZGVyPSdTZWFyY2ggcmVjaXBlcyddIikpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXModGVzdF9wYWNrYWdlMikKKyAgICAgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICAgICAgICAgY29sdW1uX3NlYXJjaF9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoImNsYXNzIiwgdGFibGVfaGVhZF9kaWN0W2tleV0pCisgICAgICAgICAgICAgICAgI3ByaW50IGNvbHVtbl9zZWFyY2hfbGlzdAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNvbHVtbl9zZWFyY2hfbGlzdCkpCisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiaS5pY29uLXJlbW92ZSIpLmNsaWNrKCkKKworICAgICAgICAjIEJ1ZyA1OTE5CisgICAgICAgIGZvciBrZXkgaW4gdGFibGVfaGVhZF9kaWN0OgorICAgICAgICAgICAgcHJpbnQga2V5CisgICAgICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoc2VsZi50YWJsZV9uYW1lLCBrZXkpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCh0YWJsZV9oZWFkX2RpY3Rba2V5XSkuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgICMgQWZ0ZXIgaGlkZSB0aGUgY29sdW1uLCB0aGUgZGVmYXVsdCB0YWJsZSBzaG91bGQgYmUgc29ydGVkIGJ5IFJlY2lwZQorICAgICAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfcGFydGlhbF9saW5rX3RleHQoImFjbCIpKQorICAgICAgICAgICAgI3ByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorICAgICAgICAgICAgZGVmYXVsdF9jb2x1bW5fbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAxKQorICAgICAgICAgICAgI3ByaW50IGRlZmF1bHRfY29sdW1uX2xpc3QKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X3NlcXVlbmNlZChkZWZhdWx0X2NvbHVtbl9saXN0KSkKKworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX2ZpbGUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX3NlY3Rpb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgicmVjaXBlX2xpY2Vuc2UiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTExICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTExKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdSZWNpcGVzJykuY2xpY2soKQorIyBzdGVwIDMtNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImxpYiIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbiBoZXJlIGZvciBvYnNlcnZhdGlvbgorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA1JykKKyMgc3RlcCA2CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImkuaWNvbi1yZW1vdmUiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICAjIHdlIGRlbGliZXJhdGVseSB3YW50ICJubyByZXN1bHQiIGhlcmUKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoIm5vIHN1Y2ggaW5wdXQiKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X3RleHQoIlNob3cgYWxsIHJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLnF1aXQoKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTIgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTIoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyID0gc2VsZi5zZXR1cF9icm93c2VyKHNlbGYpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1JlY2lwZXMnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmVjaXBlIGZpbGUnLCAnU2VjdGlvbicsICdMaWNlbnNlJywgJ0xheWVyJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfb24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZGVwZW5kc19ieSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiYnV0dG9uLmJ0bi5kcm9wZG93bi10b2dnbGUiKS5jbGljaygpCisgICAgICAgICMgY2hlY2sgaWYgY29sdW1ucyBzZWxlY3RlZCBhYm92ZSBpcyBzaG93bgorICAgICAgICBjaGVja19saXN0ID0gWydEZXBlbmRlbmNpZXMnLCAnTGF5ZXIgYnJhbmNoJywgJ0xheWVyIGNvbW1pdCcsICdMYXllciBkaXJlY3RvcnknLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnXQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgcHJpbnQgaGVhZF9saXN0CisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgdW4tY2hlY2sgJ2VtIGFsbAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmRyb3Bkb3duLXRvZ2dsZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJkZXBlbmRzX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImRlcGVuZHNfYnkiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoImJ1dHRvbi5idG4uZHJvcGRvd24tdG9nZ2xlIikuY2xpY2soKQorICAgICAgICAjIGRvbid0IGV4aXN0IGFueSBtb3JlCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTMgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTMoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1JlY2lwZXMnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmVjaXBlIGZpbGUnLCAnU2VjdGlvbicsICdMaWNlbnNlJywgJ0xheWVyJ106CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXRlbSBpbiBoZWFkX2xpc3QpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzYXZlIHNjcmVlbgorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIGltYWdlX3R5cGU9ImNvcmUtaW1hZ2UtbWluaW1hbCIKKyAgICAgICAgdGVzdF9wYWNrYWdlMT0iYnVzeWJveCIKKyAgICAgICAgdGVzdF9wYWNrYWdlMj0iZ2RibSIKKyAgICAgICAgdGVzdF9wYWNrYWdlMz0iZ2V0dGV4dC1uYXRpdmUiCisgICAgICAgIGRyaXZlciA9IHNlbGYuZHJpdmVyCisgICAgICAgIGRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBkcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KGltYWdlX3R5cGUpLmNsaWNrKCkKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KHRlc3RfcGFja2FnZTEpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnRhYmxlX25hbWUgPSAnaW5mb3JtYXRpb24nCisKKyAgICAgICAgdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgdGFza3NfY29sdW1uX2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHJbMV0vdGQiKSkKKyAgICAgICAgcHJpbnQgdGFza3Nfcm93X2NvdW50CisgICAgICAgIHByaW50IHRhc2tzX2NvbHVtbl9jb3VudAorCisgICAgICAgIFRhc2tzX2NvbHVtbiA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0X2J5X2NvbHVtbl9udW1iZXIoc2VsZi50YWJsZV9uYW1lLCAyKQorICAgICAgICBwcmludCAoIlRhc2tzX2NvbHVtbj0iLCBUYXNrc19jb2x1bW4pCisKKyAgICAgICAga2V5X3Rhc2tzPVsiZG9fZmV0Y2giLCAiZG9fdW5wYWNrIiwgICJkb19wYXRjaCIsICJkb19jb25maWd1cmUiLCAiZG9fY29tcGlsZSIsICJkb19pbnN0YWxsIiwgImRvX3BhY2thZ2UiLCAiZG9fYnVpbGQiXQorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpIDwgbGVuKGtleV90YXNrcyk6CisgICAgICAgICAgICBpZiBrZXlfdGFza3NbaV0gbm90IGluIFRhc2tzX2NvbHVtbjoKKyAgICAgICAgICAgICAgICBwcmludCAoIkVycm9yISBNaXNzaW5nIGtleSB0YXNrOiAlcyIgJSBrZXlfdGFza3NbaV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gdGFza3MiICUga2V5X3Rhc2tzW2ldKQorICAgICAgICAgICAgaSA9IGkgKyAxCisKKyAgICAgICAgaWYgVGFza3NfY29sdW1uLmluZGV4KGtleV90YXNrc1swXSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUga2V5X3Rhc2tzWzBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbMF0pCisKKyAgICAgICAgaWYgVGFza3NfY29sdW1uWy0xXSAhPSBrZXlfdGFza3NbLTFdOgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgJXMgaXMgbm90IGluIHRoZSByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbLTFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBpbiByaWdodCBwb3NpdGlvbiIgJSBrZXlfdGFza3NbLTFdKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIHBhY2thZ2VzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJQYWNrYWdlcyAoIikudGV4dAorICAgICAgICBwcmludCBwYWNrYWdlc19uYW1lCisgICAgICAgIHBhY2thZ2VzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihwYWNrYWdlc19uYW1lKSkpCisgICAgICAgIHByaW50IHBhY2thZ2VzX251bQorCisgICAgICAgIHBhY2thZ2VzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzJdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgIHByaW50IHBhY2thZ2VzX3Jvd19jb3VudAorCisgICAgICAgIGlmIHBhY2thZ2VzX251bSAhPSBwYWNrYWdlc19yb3dfY291bnQ6CisgICAgICAgICAgICBwcmludCAoIkVycm9yISBUaGUgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIHBha2NhZ2VzIG51bWJlciBpcyBjb3JyZWN0IikKKworICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJCdWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0CisgICAgICAgIHByaW50IGRlcGVuZHNfbmFtZQorICAgICAgICBkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihkZXBlbmRzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgZGVwZW5kc19udW0KKworICAgICAgICBpZiBkZXBlbmRzX251bSA9PSAwOgorICAgICAgICAgICAgZGVwZW5kc19tZXNzYWdlID0gcmVwcihkcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgZGVwZW5kc19tZXNzYWdlCisgICAgICAgICAgICBpZiBkZXBlbmRzX21lc3NhZ2UuZmluZCgiaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcy4iKSA8IDA6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIG1lc3NhZ2UgaXNuJ3QgZXhwZWN0ZWQuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJUaGUgbWVzc2FnZSBpcyBleHBlY3RlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXBlbmRzX3Jvd19jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzNdL3RhYmxlL3Rib2R5L3RyL3RkWzFdIikpCisgICAgICAgICAgICBwcmludCBkZXBlbmRzX3Jvd19jb3VudAorICAgICAgICAgICAgaWYgZGVwZW5kc19udW0gIT0gZGVwZW5kc19yb3dfY291bnQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgVGhlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgbm90IGNvcnJlY3QiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICgiKS5jbGljaygpCisgICAgICAgIHJkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCByZGVwZW5kc19uYW1lCisgICAgICAgIHJkZXBlbmRzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihyZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IHJkZXBlbmRzX251bQorCisgICAgICAgIGlmIHJkZXBlbmRzX251bSA9PSAwOgorICAgICAgICAgICAgcmRlcGVuZHNfbWVzc2FnZSA9IHJlcHIoZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jc3Nfc2VsZWN0b3IoIiNicm91Z2h0LWluLWJ5ID4gZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgcmRlcGVuZHNfbWVzc2FnZQorICAgICAgICAgICAgaWYgcmRlcGVuZHNfbWVzc2FnZS5maW5kKCJoYXMgbm8gcmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGlzbid0IGV4cGVjdGVkLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiVGhlIG1lc3NhZ2UgaXMgZXhwZWN0ZWQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCh0ZXN0X3BhY2thZ2UyKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIlJlY2lwZXMiKS5jbGljaygpCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KHRlc3RfcGFja2FnZTMpLmNsaWNrKCkKKworICAgICAgICBuYXRpdmVfdGFza3Nfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbMV0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudCA9IGxlbihkcml2ZXIuZmluZF9lbGVtZW50c19ieV94cGF0aCgiL2h0bWwvYm9keS9kaXZbMl0vZGl2L2RpdlszXS9kaXYvZGl2WzFdL3RhYmxlL3Rib2R5L3RyWzFdL3RkIikpCisgICAgICAgIHByaW50IG5hdGl2ZV90YXNrc19yb3dfY291bnQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3Rhc2tzX2NvbHVtbl9jb3VudAorCisgICAgICAgIE5hdGl2ZV9UYXNrc19jb2x1bW4gPSBzZWxmLmdldF90YWJsZV9jb2x1bW5fdGV4dF9ieV9jb2x1bW5fbnVtYmVyKHNlbGYudGFibGVfbmFtZSwgMikKKyAgICAgICAgcHJpbnQgKCJOYXRpdmVfVGFza3NfY29sdW1uPSIsIE5hdGl2ZV9UYXNrc19jb2x1bW4pCisKKyAgICAgICAgbmF0aXZlX2tleV90YXNrcz1bImRvX2ZldGNoIiwgImRvX3VucGFjayIsICAiZG9fcGF0Y2giLCAiZG9fY29uZmlndXJlIiwgImRvX2NvbXBpbGUiLCAiZG9faW5zdGFsbCIsICJkb19idWlsZCJdCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4obmF0aXZlX2tleV90YXNrcyk6CisgICAgICAgICAgICBpZiBuYXRpdmVfa2V5X3Rhc2tzW2ldIG5vdCBpbiBOYXRpdmVfVGFza3NfY29sdW1uOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIE1pc3Npbmcga2V5IHRhc2s6ICVzIiAlIG5hdGl2ZV9rZXlfdGFza3NbaV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gdGFza3MiICUgbmF0aXZlX2tleV90YXNrc1tpXSkKKyAgICAgICAgICAgIGkgPSBpICsgMQorCisgICAgICAgIGlmIE5hdGl2ZV9UYXNrc19jb2x1bW4uaW5kZXgobmF0aXZlX2tleV90YXNrc1swXSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiJXMgaXMgaW4gcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1swXSkKKworICAgICAgICBpZiBOYXRpdmVfVGFza3NfY29sdW1uWy0xXSAhPSBuYXRpdmVfa2V5X3Rhc2tzWy0xXToKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhICVzIGlzIG5vdCBpbiB0aGUgcmlnaHQgcG9zaXRpb24iICUgbmF0aXZlX2tleV90YXNrc1stMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIiVzIGlzIGluIHJpZ2h0IHBvc2l0aW9uIiAlIG5hdGl2ZV9rZXlfdGFza3NbLTFdKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIlBhY2thZ2VzICgiKS5jbGljaygpCisgICAgICAgIG5hdGl2ZV9wYWNrYWdlc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgKCIpLnRleHQKKyAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VzX25hbWUKKyAgICAgICAgbmF0aXZlX3BhY2thZ2VzX251bSA9IHN0cmluZy5hdG9pKGZpbHRlcihzdHIuaXNkaWdpdCwgcmVwcihuYXRpdmVfcGFja2FnZXNfbmFtZSkpKQorICAgICAgICBwcmludCBuYXRpdmVfcGFja2FnZXNfbnVtCisKKyAgICAgICAgaWYgbmF0aXZlX3BhY2thZ2VzX251bSAhPSAwOgorICAgICAgICAgICAgcHJpbnQgKCJFcnJvciEgTmF0aXZlIHRhc2sgc2hvdWxkbid0IGhhdmUgYW55IHBhY2thZ2VzLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYXRpdmVfcGFja2FnZV9tZXNzYWdlID0gcmVwcihkcml2ZXIuZmluZF9lbGVtZW50X2J5X2Nzc19zZWxlY3RvcigiZGl2LmFsZXJ0LmFsZXJ0LWluZm8iKS50ZXh0KQorICAgICAgICAgICAgcHJpbnQgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZQorICAgICAgICAgICAgaWYgbmF0aXZlX3BhY2thZ2VfbWVzc2FnZS5maW5kKCJkb2VzIG5vdCBidWlsZCBhbnkgcGFja2FnZXMuIikgPCAwOgorICAgICAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBtZXNzYWdlIGZvciBuYXRpdmUgdGFzayBpc24ndCBleHBlY3RlZC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIlRoZSBtZXNzYWdlIGZvciBuYXRpdmUgdGFzayBpcyBleHBlY3RlZC4iKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoIkJ1aWxkIGRlcGVuZGVuY2llcyAoIikuY2xpY2soKQorICAgICAgICBuYXRpdmVfZGVwZW5kc19uYW1lID0gZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiQnVpbGQgZGVwZW5kZW5jaWVzICgiKS50ZXh0CisgICAgICAgIHByaW50IG5hdGl2ZV9kZXBlbmRzX25hbWUKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfbnVtID0gc3RyaW5nLmF0b2koZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKG5hdGl2ZV9kZXBlbmRzX25hbWUpKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX2RlcGVuZHNfbnVtCisKKyAgICAgICAgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbM10vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX2RlcGVuZHNfcm93X2NvdW50CisKKyAgICAgICAgaWYgbmF0aXZlX2RlcGVuZHNfbnVtICE9IG5hdGl2ZV9kZXBlbmRzX3Jvd19jb3VudDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIG5vdCBjb3JyZWN0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiVGhlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgY29ycmVjdCIpCisKKyAgICAgICAgZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMgKCIpLmNsaWNrKCkKKyAgICAgICAgbmF0aXZlX3JkZXBlbmRzX25hbWUgPSBkcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoIikudGV4dAorICAgICAgICBwcmludCBuYXRpdmVfcmRlcGVuZHNfbmFtZQorICAgICAgICBuYXRpdmVfcmRlcGVuZHNfbnVtID0gc3RyaW5nLmF0b2koZmlsdGVyKHN0ci5pc2RpZ2l0LCByZXByKG5hdGl2ZV9yZGVwZW5kc19uYW1lKSkpCisgICAgICAgIHByaW50IG5hdGl2ZV9yZGVwZW5kc19udW0KKworICAgICAgICBuYXRpdmVfcmRlcGVuZHNfcm93X2NvdW50ID0gbGVuKGRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzNdL2Rpdi9kaXZbNF0vdGFibGUvdGJvZHkvdHIvdGRbMV0iKSkKKyAgICAgICAgcHJpbnQgbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudAorCisgICAgICAgIGlmIG5hdGl2ZV9yZGVwZW5kc19udW0gIT0gbmF0aXZlX3JkZXBlbmRzX3Jvd19jb3VudDoKKyAgICAgICAgICAgIHByaW50ICgiRXJyb3IhIFRoZSByZXZlcnNlIGRlcGVuZGVudCBwYWNrYWdlcyBudW1iZXIgaXMgbm90IGNvcnJlY3QiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgcmV2ZXJzZSBkZXBlbmRlbnQgcGFja2FnZXMgbnVtYmVyIGlzIGNvcnJlY3QiKQorCisgICAgICAgIGRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJSZWNpcGVzIikuY2xpY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTUgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTUoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIHN0ZXAgMworICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdDb25maWd1cmF0aW9uJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJCaXRCYWtlIHZhcmlhYmxlcyIpLmNsaWNrKCkKKyMgc3RlcCA0CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygibGliIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIHRvIHNlZSByZXN1bHQKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5zYXZlX3NjcmVlbnNob3Qoc2NyZWVuc2hvdF90eXBlPSdzZWxlbml1bScsIGFwcGVuZF9uYW1lPSdzdGVwNCcpCisjIHN0ZXAgNQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tcmVtb3ZlIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHByaW50IGhlYWRfbGlzdAorICAgICAgICBwcmludCBsZW4oaGVhZF9saXN0KQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IFsnVmFyaWFibGUnLCAnVmFsdWUnLCAnU2V0IGluIGZpbGUnLCAnRGVzY3JpcHRpb24nXSkKKyMgc3RlcCA4CisgICAgICAgICMgc2VhcmNoIG90aGVyIHN0cmluZy4gYW5kIGNsaWNrICJWYXJpYWJsZSIgdG8gcmUtc29ydCwgY2hlY2sgaWYgdGFibGUKKyAgICAgICAgIyBoZWFkIGlzIHN0aWxsIHRoZSBzYW1lCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygicG9reSIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnVmFyaWFibGUnKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA9PSBbJ1ZhcmlhYmxlJywgJ1ZhbHVlJywgJ1NldCBpbiBmaWxlJywgJ0Rlc2NyaXB0aW9uJ10pCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhoZWFkX2xpc3QgPT0gWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MTYgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MTYoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIHN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICB2YXJpYWJsZV9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQodmFyaWFibGVfbGlzdCkpCisjIHN0ZXAgNAorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ290YWJsZScsICdWYXJpYWJsZScpLmNsaWNrKCkKKyAgICAgICAgdmFyaWFibGVfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICd2YXJpYWJsZV9uYW1lJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3RfaW52ZXJ0ZWQodmFyaWFibGVfbGlzdCkpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnb3RhYmxlJywgJ1ZhcmlhYmxlJykuY2xpY2soKQorIyBzdGVwIDUKKyAgICAgICAgIyBzZWFyY2hpbmcgd29uJ3QgY2hhbmdlIHRoZSBzZXF1ZW50aWFsaXR5CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgic2VhcmNoIikuY2xlYXIoKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLnNlbmRfa2V5cygibGliIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICB2YXJpYWJsZV9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ3ZhcmlhYmxlX25hbWUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9zZXF1ZW5jZWQodmFyaWFibGVfbGlzdCkpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDkyMyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0XzkyMyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgU3RlcCAyCisgICAgICAgICMgZGVmYXVsdCBzZXF1ZW5jZSBpbiAiQ29tcGxldGVkIG9uIiBjb2x1bW4gaXMgaW52ZXJ0ZWQKKyAgICAgICAgY19saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHQoJ2NsYXNzJywgJ2NvbXBsZXRlZF9vbicpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc19saXN0X2ludmVydGVkKGNfbGlzdCkpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzdGFydGVkX29uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxvZyIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJ0aW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydPdXRjb21lJywgJ1RhcmdldCcsICdNYWNoaW5lJywgJ1N0YXJ0ZWQgb24nLCAnQ29tcGxldGVkIG9uJywgJ0ZhaWxlZCB0YXNrcycsICdFcnJvcnMnLCAnV2FybmluZ3MnLCAnV2FybmluZ3MnLCAnVGltZSddOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5MjQgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85MjQoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIFBsZWFzZSByZWZlciB0byBjYXNlIDkyNCByZXF1aXJlbWVudAorICAgICAgICAjIGRlZmF1bHQgc2VxdWVuY2UgaW4gIkNvbXBsZXRlZCBvbiIgY29sdW1uIGlzIGludmVydGVkCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorICAgICAgICAjIFN0ZXAgNAorICAgICAgICAjIGNsaWNrIEVycm9ycyAsIG9yZGVyIGluICJDb21wbGV0ZWQgb24iIHNob3VsZCBiZSBkaXN0dXJiZWQuIFRoZW4gaGlkZQorICAgICAgICAjIGVycm9yIGNvbHVtbiB0byBjaGVjayBpZiBvcmRlciBpbiAiQ29tcGxldGVkIG9uIiBjYW4gYmUgcmVzdG9yZWQKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnRXJyb3JzJykuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZXJyb3JzX25vIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgTm90ZTogd2l0aG91dCB0aW1lLnNsZWVwIGhlcmUsIHRoZXJlJ2xsIGJlIHVucHJlZGljdGFibGUgZXJyb3IuLlRCRAorICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGNfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2NvbHVtbl90ZXh0KCdjbGFzcycsICdjb21wbGV0ZWRfb24nKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNfbGlzdF9pbnZlcnRlZChjX2xpc3QpKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDAgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisjIFN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1BhY2thZ2VzJykuY2xpY2soKQorICAgICAgICBjaGVja19oZWFkX2xpc3QgPSBbJ1BhY2thZ2UnLCAnUGFja2FnZSB2ZXJzaW9uJywgJ1NpemUnLCAnUmVjaXBlJ10KKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGVhZF9saXN0ID09IGNoZWNrX2hlYWRfbGlzdCkKKyMgU3RlcCA0CisgICAgICAgICMgcHVsbGRvd24gbWVudQorICAgICAgICBvcHRpb25faWRzID0gWydyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgXAorICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQnLCAnbGljZW5zZScsICdyZWNpcGVfX3ZlcnNpb24nXQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIGZvciBpdGVtIGluIG9wdGlvbl9pZHM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKGl0ZW0pLmlzX3NlbGVjdGVkKCk6CisgICAgICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKGl0ZW0pLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gb2JzZXJ2ZSB0aGF0ICdQYWNrYWdlJyBhbmQgJ1BhY2thZ2UgdmVyc2lvbicgaXMKKyAgICAgICAgIyBub3Qgc2VsZWN0YWJsZQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQxICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQxKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIFN0ZXAgMi0zCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ1BhY2thZ2VzJykuY2xpY2soKQorICAgICAgICAjIGNvbHVtbiAtLSBQYWNrYWdlCisgICAgICAgIGNvbHVtbl9saXN0ID0gc2VsZi5nZXRfdGFibGVfY29sdW1uX3RleHRfYnlfY29sdW1uX251bWJlcignb3RhYmxlJywgMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzX2xpc3Rfc2VxdWVuY2VkKGNvbHVtbl9saXN0KSkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCdvdGFibGUnLCAnU2l6ZScpLmNsaWNrKCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQyICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQyKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJQYWNrYWdlcyIpLmNsaWNrKCkKKyAgICAgICAgI2dldCBpbml0aWFsIHRhYmxlIGhlYWRlcgorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgICNyZW1vdmUgdGhlIFJlY2lwZSBjb2x1bW4gZnJvbSB0YWJsZSBoZWFkZXIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjZ2V0IG1vZGlmaWVkIHRhYmxlIGhlYWRlcgorICAgICAgICBuZXdfaGVhZCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhlYWRfbGlzdCA+IG5ld19oZWFkKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQzICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQzKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJQYWNrYWdlcyIpLmNsaWNrKCkKKyAgICAgICAgI3NlYXJjaCBmb3IgdGhlICJiYXNoIiBwYWNrYWdlIC0+IHRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgcHJlc2VudAorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoImJhc2giKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaC1idXR0b24iKS5jbGljaygpCisgICAgICAgICNjaGVjayBmb3IgdGhlIHNlYXJjaCByZXN1bHQgbWVzc2FnZSAiWFggcGFja2FnZXMgZm91bmQiCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudCgicGFja2FnZXMgZm91bmQiKSkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ0ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ0KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMTogdGVzdCBSZWNpcGVzIHBhZ2Ugc3R1ZmYKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUmVjaXBlcyIpLmNsaWNrKCkKKyAgICAgICAgIyBmb3IgdGhlc2UgMyBpdGVtcywgZGVmYXVsdCBzdGF0dXMgaXMgbm90LWNoZWNrZWQKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgb3RhYmxlIGlzIHRoZSByZWNpcGVzIHRhYmxlIGhlcmUKKyAgICAgICAgb3RhYmxlX2hlYWRfdGV4dCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0IiwgIkxheWVyIGRpcmVjdG9yeSJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKyAgICAgICAgIyBjbGljayB0aGUgZmlzdCByZWNpcGUsIHdoYXRldmVyIGl0IGlzCisgICAgICAgIHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoIm90YWJsZSIsIDEsIDEpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCIsICJSZWNpcGUgZmlsZSJdKSkKKworICAgICAgICAjIHN0ZXAgMjogdGVzdCBQYWNrYWdlcyBwYWdlIHN0dWZmLiBhbG1vc3Qgc2FtZSBhcyBhYm92ZQorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiUGFja2FnZXMiKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCJvdGFibGUiKQorICAgICAgICBmb3IgaXRlbSBpbiBbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGl0ZW0gbm90IGluIG90YWJsZV9oZWFkX3RleHQpCisgICAgICAgICMgY2xpY2sgdGhlIGZpc3QgcmVjaXBlLCB3aGF0ZXZlciBpdCBpcworICAgICAgICBzZWxmLmdldF90YWJsZV9lbGVtZW50KCJvdGFibGUiLCAxLCAxKS5jbGljaygpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmlzX3RleHRfcHJlc2VudChbIkxheWVyIiwgIkxheWVyIGJyYW5jaCIsICJMYXllciBjb21taXQiXSkpCisKKyAgICAgICAgIyBzdGVwIDM6IHRlc3QgUGFja2FnZXMgY29yZS1pbWFnZS1taW5pbWFsKGltYWdlcykgc3R1ZmYuIGFsbW9zdCBzYW1lIGFzIGFib3ZlLiBOb3RlIHdoZW4gZnV0dXJlIGVsZW1lbnQtaWQgY2hhbmdlcy4uLgorICAgICAgICBzZWxmLmRyaXZlci5iYWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfbmFtZSIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJsYXllcl9icmFuY2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgibGF5ZXJfY29tbWl0IikuY2xpY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIG90YWJsZV9oZWFkX3RleHQgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoIm90YWJsZSIpCisgICAgICAgIGZvciBpdGVtIGluIFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdOgorICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXRlbSBub3QgaW4gb3RhYmxlX2hlYWRfdGV4dCkKKyAgICAgICAgIyBjbGljayB0aGUgZmlzdCByZWNpcGUsIHdoYXRldmVyIGl0IGlzCisgICAgICAgIHNlbGYuZ2V0X3RhYmxlX2VsZW1lbnQoIm90YWJsZSIsIDEsIDEpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfdGV4dF9wcmVzZW50KFsiTGF5ZXIiLCAiTGF5ZXIgYnJhbmNoIiwgIkxheWVyIGNvbW1pdCJdKSkKKworICAgICAgICAjIHN0ZXAgNDogY2hlY2sgQ29uZmlndXJhdGlvbiBwYWdlCisgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJDb25maWd1cmF0aW9uIikuY2xpY2soKQorICAgICAgICBvdGFibGVfaGVhZF90ZXh0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gWyJMYXllciIsICJMYXllciBicmFuY2giLCAiTGF5ZXIgY29tbWl0Il06CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIG5vdCBpbiBvdGFibGVfaGVhZF90ZXh0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDUgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDUoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIGZvciBpdGVtcyBpbiBbIlBhY2thZ2VzIiwgIlJlY2lwZXMiLCAiVGFza3MiXToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpdGVtcykuY2xpY2soKQorCisgICAgICAgICAgICAjIHRoaXMgbWF5IGJlIHBhZ2Ugc3BlY2lmaWMuIElmIGZ1dHVyZSBwYWdlIGNvbnRlbnQgY2hhbmdlcywgdHJ5IHRvIHJlcGxhY2UgaXQgd2l0aCBuZXcgeHBhdGgKKyAgICAgICAgICAgIHhwYXRoX3Nob3dyb3dzID0gIi9odG1sL2JvZHkvZGl2WzJdL2Rpdi9kaXZbMl0vZGl2WzJdL2RpdlsyXS9kaXYvZGl2L2RpdlsyXS9zZWxlY3QiCisgICAgICAgICAgICB4cGF0aF90YWJsZSA9ICIvaHRtbC9ib2R5L2RpdlsyXS9kaXYvZGl2WzJdL2RpdlsyXS90YWJsZS90Ym9keSIKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9zaG93cm93cykuY2xpY2soKQorICAgICAgICAgICAgcm93c19kaXNwbGF5ZWQgPSBpbnQoc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX3Nob3dyb3dzICsgIi9vcHRpb25bMl0iKS50ZXh0KQorCisgICAgICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgYSBTZWxlbml1bSBTZWxlY3QgYnVnOiBJZiBwYWdlIGlzIG5vdCByZWZyZXNoZWQgaGVyZSwgInNlbGVjdChieSB2aXNpYmxlIHRleHQpIiBvcGVyYXRpb24gd2lsbCBnbyBiYWNrIHRvIDEwMC1yb3cgcGFnZQorICAgICAgICAgICAgIyBTdXJlIHdlIGNhbiB1c2UgZHJpdmVyLmdldCh1cmwpIHRvIHJlZnJlc2ggcGFnZSwgYnV0IHNpbmNlIHBhZ2Ugd2lsbCB2YXJ5LCB3ZSB1c2UgY2xpY2sgbGluayB0ZXh0IGhlcmUKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoaXRlbXMpLmNsaWNrKCkKKyAgICAgICAgICAgIFNlbGVjdChzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJzZWxlY3QucGFnZXNpemUiKSkuc2VsZWN0X2J5X3Zpc2libGVfdGV4dChzdHIocm93c19kaXNwbGF5ZWQpKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfZWxlbWVudF9wcmVzZW50KEJ5LlhQQVRILCB4cGF0aF90YWJsZSArICIvdHJbIiArIHN0cihyb3dzX2Rpc3BsYXllZCkgKyJdIikpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQrMSkgKyJdIikpCisKKyAgICAgICAgICAgICMgY2xpY2sgMXN0IHBhY2thZ2UsIHRoZW4gZ28gYmFjayB0byBjaGVjayBpZiBpdCdzIHN0aWxsIHRob3NlIHJvd3Mgc2hvd24uCisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoeHBhdGhfdGFibGUgKyAiL3RyWzFdL3RkWzFdIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dChpdGVtcykuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYuaXNfZWxlbWVudF9wcmVzZW50KEJ5LlhQQVRILCB4cGF0aF90YWJsZSArICIvdHJbIiArIHN0cihyb3dzX2Rpc3BsYXllZCkgKyJdIikpCisgICAgICAgICAgICBzZWxmLmZhaWxJZihzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChCeS5YUEFUSCwgeHBhdGhfdGFibGUgKyAiL3RyWyIgKyBzdHIocm93c19kaXNwbGF5ZWQrMSkgKyJdIikpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQ29uZmlndXJhdGlvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDMtNAorICAgICAgICBjaGVja19saXN0ID0gWyJTdW1tYXJ5IiwgIkJpdEJha2UgdmFyaWFibGVzIl0KKyAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2VsZW1lbnRfcHJlc2VudChob3c9QnkuTElOS19URVhULCB3aGF0PWl0ZW0pOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZm91bmQiICVpdGVtKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoWydMYXllcnMnLCAnTGF5ZXInLCAnTGF5ZXIgYnJhbmNoJywgJ0xheWVyIGNvbW1pdCddKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0ZXh0IG5vdCBmb3VuZCIpCisgICAgICAgICMgc3RlcCA1CisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICBpZiBub3Qgc2VsZi5pc190ZXh0X3ByZXNlbnQoWydWYXJpYWJsZScsICdWYWx1ZScsICdTZXQgaW4gZmlsZScsICdEZXNjcmlwdGlvbiddKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJ0ZXh0IG5vdCBmb3VuZCIpCisgICAgICAgICMgVGhpcyBtYXkgYmUgdW5zdGFibGUgYmVjYXVzZSBpdCdzIHBhZ2Utc3BlY2lmaWMKKyAgICAgICAgIyBzdGVwIDY6IHRoaXMgaXMgaG93IHdlIGZpbmQgZmlsdGVyIGJlc2lkZSAiU2V0IGluIGZpbGUiCisgICAgICAgIHRlbXBfZWxlbWVudCA9IHNlbGYuZmluZF9lbGVtZW50X2J5X3RleHRfaW5fdGFibGUoJ290YWJsZScsICJTZXQgaW4gZmlsZSIpCisgICAgICAgIHRlbXBfZWxlbWVudC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi4uLy8qL2EvaVtAY2xhc3M9J2ljb24tZmlsdGVyIGZpbHRlcmVkJ10iKS5jbGljaygpCisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiKC8vaW5wdXRbQG5hbWU9J2ZpbHRlciddKVszXSIpLmNsaWNrKCkKKyAgICAgICAgYnRucyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfY3NzX3NlbGVjdG9yKCJidXR0b24uYnRuLmJ0bi1wcmltYXJ5IikKKyAgICAgICAgZm9yIGJ0biBpbiBidG5zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJ0bi5jbGljaygpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA2JykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJlZGl0LWNvbHVtbnMtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUKKyAgICAgICAgIyBzdGVwIDcKKyAgICAgICAgIyB3ZSBzaG91bGQgbWFudWFsbHkgY2hlY2sgdGhlIHN0ZXAgNi04IHJlc3VsdCB1c2luZyBzY3JlZW5zaG90CisgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDcnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgICMgc3RlcCA5CisgICAgICAgICMgY2xpY2sgdGhlIDFzdCBpdGVtLCBubyBtYXR0ZXIgd2hhdCBpdCBpcworICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAaWQ9J290YWJsZSddL3Rib2R5L3RyWzFdL3RkWzFdL2EiKS5jbGljaygpCisgICAgICAgICMgZ2l2ZSBpdCAxIHNlYyBzbyB0aGUgcG9wLXVwIGJlY29tZXMgdGhlICJhY3RpdmVfZWxlbWVudCIKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBlbGVtZW50ID0gc2VsZi5kcml2ZXIuc3dpdGNoX3RvLmFjdGl2ZV9lbGVtZW50CisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ09yZGVyJywgJ0NvbmZpZ3VyYXRpb24gZmlsZScsICdPcGVyYXRpb24nLCAnTGluZSBudW1iZXInXQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gZWxlbWVudC50ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIlcyBub3QgZm91bmQiICVpdGVtKQorICAgICAgICAjIGFueSBiZXR0ZXIgd2F5IHRvIGNsb3NlIHRoaXMgcG9wLXVwPyAuLi4gVEJECisgICAgICAgIGVsZW1lbnQuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoImNsb3NlIikuY2xpY2soKQorICAgICAgICAjIHN0ZXAgMTAgOiBuZWVkIHRvIG1hbnVhbGx5IGNoZWNrICJZb2N0byBNYW51YWwiIGluIHNhdmVkIHNjcmVlbgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfY3NzX3NlbGVjdG9yKCJpLmljb24tc2hhcmUuZ2V0LWluZm8iKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZQorICAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nbmF0aXZlJywgYXBwZW5kX25hbWU9J3N0ZXAxMCcpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk0NyAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk0NyhzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoImNvcmUtaW1hZ2UtbWluaW1hbCIpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCAnQ29uZmlndXJhdGlvbicpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDIKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQml0QmFrZSB2YXJpYWJsZXMiKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIGRlZiB4cGF0aF9vcHRpb24oY29sdW1uX25hbWUpOgorICAgICAgICAgICAgIyByZXR1cm4geHBhdGggb2Ygb3B0aW9ucyB1bmRlciAiRWRpdCBjb2x1bW5zIiBidXR0b24KKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsICduYXZUYWInKSArIHNlbGYuc2hvcnRlc3RfeHBhdGgoJ2lkJywgJ2VkaXRjb2wnKSBcCisgICAgICAgICAgICAgICAgKyBzZWxmLnNob3J0ZXN0X3hwYXRoKCdpZCcsIGNvbHVtbl9uYW1lKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgICMgYnkgZGVmYXVsdCwgb3B0aW9uICJEZXNjcmlwdGlvbiIgYW5kICJTZXQgaW4gZmlsZSIgd2VyZSBjaGVja2VkCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2Rlc2NyaXB0aW9uJykpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX29wdGlvbignZmlsZScpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jb2x1bW5zLWJ1dHRvbicpLmNsaWNrKCkKKyAgICAgICAgY2hlY2tfbGlzdCA9IFsnRGVzY3JpcHRpb24nLCAnU2V0IGluIGZpbGUnXQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ290YWJsZScpCisgICAgICAgIGZvciBpdGVtIGluIGNoZWNrX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZhaWxJZihpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgIyBjaGVjayB0aGVzZSAyIG9wdGlvbnMgYW5kIHZlcmlmeSBhZ2FpbgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ2VkaXQtY29sdW1ucy1idXR0b24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCh4cGF0aF9vcHRpb24oJ2Rlc2NyaXB0aW9uJykpLmNsaWNrKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKHhwYXRoX29wdGlvbignZmlsZScpKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgnZWRpdC1jb2x1bW5zLWJ1dHRvbicpLmNsaWNrKCkKKyAgICAgICAgaGVhZF9saXN0ID0gc2VsZi5nZXRfdGFibGVfaGVhZF90ZXh0KCdvdGFibGUnKQorICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0ZW0gaW4gaGVhZF9saXN0KQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NDggICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NDgoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgJ0NvbmZpZ3VyYXRpb24nKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkJpdEJha2UgdmFyaWFibGVzIikuY2xpY2soKQorICAgICAgICAjZ2V0IG51bWJlciBvZiB2YXJpYWJsZXMgdmlzaWJsZSBieSBkZWZhdWx0CisgICAgICAgIG51bWJlcl9iZWZvcmVfc2VhcmNoID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2NsYXNzX25hbWUoJ3BhZ2UtaGVhZGVyJykudGV4dAorICAgICAgICAjIHNlYXJjaCBmb3IgYSB3aGlsZS4uLgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoInNlYXJjaCIpLmNsZWFyKCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2giKS5zZW5kX2tleXMoIkJCIikKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2lkKCJzZWFyY2gtYnV0dG9uIikuY2xpY2soKQorICAgICAgICAjZ2V0IG51bWJlciBvZiB2YXJpYWJsZXMgdmlzaWJsZSBhZnRlciBzZWFyY2gKKyAgICAgICAgbnVtYmVyX2FmdGVyX3NlYXJjaCA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9jbGFzc19uYW1lKCdwYWdlLWhlYWRlcicpLnRleHQKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG51bWJlcl9iZWZvcmVfc2VhcmNoID4gbnVtYmVyX2FmdGVyX3NlYXJjaCkKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTQ5ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTQ5KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiY29yZS1pbWFnZS1taW5pbWFsIikuY2xpY2soKQorICAgICAgICBzZWxmLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHRfaW5fdGFibGUoJ25hdicsICdjb3JlLWltYWdlLW1pbmltYWwnKS5jbGljaygpCisgICAgICAgICMgc3RlcCAzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiUGFja2FnZXMgaW5jbHVkZWQiKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoZSkKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICMgc3RlcCA0CisgICAgICAgIGhlYWRfbGlzdCA9IHNlbGYuZ2V0X3RhYmxlX2hlYWRfdGV4dCgnb3RhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydQYWNrYWdlJywgJ1BhY2thZ2UgdmVyc2lvbicsICdTaXplJywgJ0RlcGVuZGVuY2llcycsICdSZXZlcnNlIGRlcGVuZGVuY2llcycsICdSZWNpcGUnXToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpdGVtIGluIGhlYWRfbGlzdCkKKyAgICAgICAgIyBzdGVwIDUtNgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoImVkaXQtY29sdW1ucy1idXR0b24iKS5jbGljaygpCisgICAgICAgIHNlbGVjdGFibGVfY2xhc3MgPSAnY2hlY2tib3gnCisgICAgICAgICMgbWluaW11bS10YWJsZSA6IG1lYW5zIHVuc2VsZWN0YWJsZSBpdGVtcworICAgICAgICB1bnNlbGVjdGFibGVfY2xhc3MgPSAnY2hlY2tib3ggbXV0ZWQnCisgICAgICAgIHNlbGVjdGFibGVfY2hlY2tfbGlzdCA9IFsnRGVwZW5kZW5jaWVzJywgJ0xheWVyJywgJ0xheWVyIGJyYW5jaCcsICdMYXllciBjb21taXQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZScsICdSZWNpcGUnLCAnUmVjaXBlIHZlcnNpb24nLCAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2l6ZScsICdTaXplIG92ZXIgdG90YWwgKCUpJ10KKyAgICAgICAgdW5zZWxlY3RhYmxlX2NoZWNrX2xpc3QgPSBbJ1BhY2thZ2UnLCAnUGFja2FnZSB2ZXJzaW9uJ10KKyAgICAgICAgc2VsZWN0YWJsZV9saXN0ID0gbGlzdCgpCisgICAgICAgIHVuc2VsZWN0YWJsZV9saXN0ID0gbGlzdCgpCisgICAgICAgIHNlbGVjdGFibGVfZWxlbWVudHMgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvLypbQGlkPSdlZGl0Y29sJ10vLypbQGNsYXNzPSciICsgc2VsZWN0YWJsZV9jbGFzcyArICInXSIpCisgICAgICAgIHVuc2VsZWN0YWJsZV9lbGVtZW50cyA9IHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudHNfYnlfeHBhdGgoIi8vKltAaWQ9J2VkaXRjb2wnXS8vKltAY2xhc3M9JyIgKyB1bnNlbGVjdGFibGVfY2xhc3MgKyAiJ10iKQorICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxlY3RhYmxlX2VsZW1lbnRzOgorICAgICAgICAgICAgc2VsZWN0YWJsZV9saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgIGZvciBlbGVtZW50IGluIHVuc2VsZWN0YWJsZV9lbGVtZW50czoKKyAgICAgICAgICAgIHVuc2VsZWN0YWJsZV9saXN0LmFwcGVuZChlbGVtZW50LnRleHQpCisgICAgICAgICMgY2hlY2sgdGhlbQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxlY3RhYmxlX2NoZWNrX2xpc3Q6CisgICAgICAgICAgICBpZiBpdGVtIG5vdCBpbiBzZWxlY3RhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiAlcyBub3QgZm91bmQgaW4gZHJvcGRvd24gbWVudSBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgIGZvciBpdGVtIGluIHVuc2VsZWN0YWJsZV9jaGVja19saXN0OgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gdW5zZWxlY3RhYmxlX2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZXJyb3IoIiAlcyBub3QgZm91bmQgaW4gZHJvcGRvd24gbWVudSBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9pZCgiZWRpdC1jb2x1bW5zLWJ1dHRvbiIpLmNsaWNrKCkKKyAgICAgICAgIyBzdGVwIDcKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3BhcnRpYWxfbGlua190ZXh0KCJEaXJlY3Rvcnkgc3RydWN0dXJlIikuY2xpY2soKQorICAgICAgICBoZWFkX2xpc3QgPSBzZWxmLmdldF90YWJsZV9oZWFkX3RleHQoJ2RpcnRhYmxlJykKKyAgICAgICAgZm9yIGl0ZW0gaW4gWydEaXJlY3RvcnkgLyBGaWxlJywgJ1N5bWJvbGljIGxpbmsgdG8nLCAnU291cmNlIHBhY2thZ2UnLCAnU2l6ZScsICdQZXJtaXNzaW9ucycsICdPd25lcicsICdHcm91cCddOgorICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gaGVhZF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCIgJXMgbm90IGZvdW5kIGluIERpcmVjdG9yeSBzdHJ1Y3R1cmUgdGFibGUgaGVhZCBcbiIgJSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1MCAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1MChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgc3RlcDMmNDogc28gZmFyIHdlJ3JlIG5vdCBzdXJlIGlmIHRoZXJlJ3MgInN1Y2Nlc3NmdWwgYnVpbGQiIG9yICJmYWlsZWQKKyAgICAgICAgIyBidWlsZCIuSWYgZWl0aGVyIG9mIHRoZW0gZG9lc24ndCBleGlzdCwgd2UgY2FuIHN0aWxsIGdvIG9uIG90aGVyIHN0ZXBzCisgICAgICAgIGNoZWNrX2xpc3QgPSBbJ0NvbmZpZ3VyYXRpb24nLCAnVGFza3MnLCAnUmVjaXBlcycsICdQYWNrYWdlcycsICdUaW1lJywgJ0NQVSB1c2FnZScsICdEaXNrIEkvTyddCisgICAgICAgIGhhc19zdWNjZXNzZnVsX2J1aWxkID0gMQorICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXNzX2ljb24gPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAY2xhc3M9J2ljb24tb2stc2lnbiBzdWNjZXNzJ10iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gc3VjY2Vzc2Z1bCBidWlsZCBleGlzdHMiKQorICAgICAgICAgICAgaGFzX3N1Y2Nlc3NmdWxfYnVpbGQgPSAwCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGhhc19zdWNjZXNzZnVsX2J1aWxkOgorICAgICAgICAgICAgcGFzc19pY29uLmNsaWNrKCkKKyAgICAgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBjaGVjayBpZiBpdCBtYXRjaGVzIHJlcXVpcmVtZW50LgorICAgICAgICAgICAgc2VsZi5icm93c2VyX2RlbGF5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9zY3JlZW5zaG90KHNjcmVlbnNob3RfdHlwZT0nc2VsZW5pdW0nLCBhcHBlbmRfbmFtZT0nc3RlcDNfMScpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBjaGVja19saXN0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0X2luX3RhYmxlKCduYXYnLCBpdGVtKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJsaW5rICAlcyBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHBhZ2UiICUgaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKyAgICAgICAgICAgICMgc3RlcCA2CisgICAgICAgICAgICBjaGVja19saXN0XzIgPSBbJ1BhY2thZ2VzIGluY2x1ZGVkJywgJ1RvdGFsIHBhY2thZ2Ugc2l6ZScsIFwKKyAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSBtYW5pZmVzdCcsICdJbWFnZSBmaWxlcyddCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoY2hlY2tfbGlzdF8yKSkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmYWlsX2ljb24gPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltAY2xhc3M9J2ljb24tbWludXMtc2lnbiBlcnJvciddIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGhhc19mYWlsZWRfYnVpbGQgPSAwCisgICAgICAgICAgICBzZWxmLmxvZy5pbmZvKCJubyBmYWlsZWQgYnVpbGQgZXhpc3RzIikKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgaGFzX2ZhaWxlZF9idWlsZDoKKyAgICAgICAgICAgIGZhaWxfaWNvbi5jbGljaygpCisgICAgICAgICAgICAjIHNhdmUgc2NyZWVuIGhlcmUgdG8gY2hlY2sgaWYgaXQgbWF0Y2hlcyByZXF1aXJlbWVudC4KKyAgICAgICAgICAgIHNlbGYuYnJvd3Nlcl9kZWxheSgpCisgICAgICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXAzXzInKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gY2hlY2tfbGlzdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dF9pbl90YWJsZSgnbmF2JywgaXRlbSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZy5lcnJvcigibGluayAgJXMgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBwYWdlIiAlIGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKFRydWUpCisgICAgICAgICAgICAjIHN0ZXAgNyBpbnZvbHZlZAorICAgICAgICAgICAgY2hlY2tfbGlzdF8zID0gWydNYWNoaW5lJywgJ0Rpc3RybycsICdMYXllcnMnLCAnVG90YWwgbnVtYmVyIG9mIHRhc2tzJywgJ1Rhc2tzIGV4ZWN1dGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICdUYXNrcyBub3QgZXhlY3V0ZWQnLCAnUmV1c2UnLCAnUmVjaXBlcyBidWlsdCcsICdQYWNrYWdlcyBidWlsdCddCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5pc190ZXh0X3ByZXNlbnQoY2hlY2tfbGlzdF8zKSkKKyAgICAgICAgICAgIHNlbGYuZHJpdmVyLmJhY2soKQorCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAgQ0FTRSA5NTEgICMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF85NTEoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZV9ubyA9IHNlbGYuZ2V0X2Nhc2VfbnVtYmVyKCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygnIENBU0UgJXMgbG9nOiAnICUgc3RyKHNlbGYuY2FzZV9ubykpCisgICAgICAgIHNlbGYuZHJpdmVyLm1heGltaXplX3dpbmRvdygpCisgICAgICAgIHNlbGYuZHJpdmVyLmdldChzZWxmLmJhc2VfdXJsKQorICAgICAgICAjIGN1cnJlbnRseSB0ZXN0IGNhc2UgaXRzZWxmIGlzbid0IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyAiMSBzdWNjZXNzZnVsIGFuZAorICAgICAgICAjIDEgZmFpbGVkIGJ1aWxkIgorICAgICAgICBoYXNfc3VjY2Vzc2Z1bF9idWlsZCA9IDEKKyAgICAgICAgaGFzX2ZhaWxlZF9idWlsZCA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmFpbF9pY29uID0gc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbQGNsYXNzPSdpY29uLW1pbnVzLXNpZ24gZXJyb3InXSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBoYXNfZmFpbGVkX2J1aWxkID0gMAorICAgICAgICAgICAgc2VsZi5sb2cuaW5mbygibm8gZmFpbGVkIGJ1aWxkIGV4aXN0cyIpCisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgaWYgdGhlcmUncyBmYWlsZWQgYnVpbGQsIHdlIGNhbiBwcm9jZWVkCisgICAgICAgIGlmIGhhc19mYWlsZWRfYnVpbGQ6CisgICAgICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfcGFydGlhbF9saW5rX3RleHQoImVycm9yIikuY2xpY2soKQorICAgICAgICAgICAgc2VsZi5kcml2ZXIuYmFjaygpCisgICAgICAgICMgbm90IHN1cmUgaWYgdGhlcmUgIm11c3QgYmUiIHNvbWUgd2FybmluZ3MsIHNvIGhlcmUgc2F2ZSBhIHNjcmVlbgorICAgICAgICBzZWxmLmJyb3dzZXJfZGVsYXkoKQorICAgICAgICBzZWxmLnNhdmVfc2NyZWVuc2hvdChzY3JlZW5zaG90X3R5cGU9J3NlbGVuaXVtJywgYXBwZW5kX25hbWU9J3N0ZXA0JykKKworCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgIENBU0UgOTU1ICAjCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisgICAgZGVmIHRlc3RfOTU1KHNlbGYpOgorICAgICAgICBzZWxmLmNhc2Vfbm8gPSBzZWxmLmdldF9jYXNlX251bWJlcigpCisgICAgICAgIHNlbGYubG9nLmluZm8oJyBDQVNFICVzIGxvZzogJyAlIHN0cihzZWxmLmNhc2Vfbm8pKQorICAgICAgICBzZWxmLmRyaXZlci5tYXhpbWl6ZV93aW5kb3coKQorICAgICAgICBzZWxmLmRyaXZlci5nZXQoc2VsZi5iYXNlX3VybCkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygiIFlvdSBzaG91bGQgbWFudWFsbHkgY3JlYXRlIGFsbCBpbWFnZXMgYmVmb3JlIHRlc3Qgc3RhcnRzISIpCisgICAgICAgICMgU28gZmFyIHRoZSBjYXNlIGl0c2VsZiBpcyBub3QgcmVzcG9uc2FibGUgZm9yIGNyZWF0aW5nIGFsbCBzb3J0cyBvZiBpbWFnZXMuCisgICAgICAgICMgU28gYXNzdW1pbmcgdGhleSBhcmUgYWxyZWFkeSB0aGVyZQorICAgICAgICAjIHN0ZXAgMgorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJjb3JlLWltYWdlLW1pbmltYWwiKS5jbGljaygpCisgICAgICAgICMgc2F2ZSBzY3JlZW4gaGVyZSB0byBzZWUgdGhlIHBhZ2UgY29tcG9uZW50CisKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgICAgICAjICBDQVNFIDk1NiAgIworICAgICAgICAjIyMjIyMjIyMjIyMjIworICAgIGRlZiB0ZXN0Xzk1NihzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlX25vID0gc2VsZi5nZXRfY2FzZV9udW1iZXIoKQorICAgICAgICBzZWxmLmxvZy5pbmZvKCcgQ0FTRSAlcyBsb2c6ICcgJSBzdHIoc2VsZi5jYXNlX25vKSkKKyAgICAgICAgc2VsZi5kcml2ZXIubWF4aW1pemVfd2luZG93KCkKKyAgICAgICAgc2VsZi5kcml2ZXIuZ2V0KHNlbGYuYmFzZV91cmwpCisgICAgICAgICMgc3RlcCAyLTMgbmVlZCB0byBydW4gbWFudWFsbHkKKyAgICAgICAgc2VsZi5sb2cuaW5mbygic3RlcCAyLTM6IGNoZWNraW5nIHRoZSBoZWxwIG1lc3NhZ2Ugd2hlbiB5b3UgaG92ZXIgb24gaGVscCBpY29uIG9mIHRhcmdldCxcCisgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzLCByZWNpcGVzLCBwYWNrYWdlcyBuZWVkIHRvIHJ1biBtYW51YWxseSIpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgiVG9hc3RlciBtYW51YWwiKS5jbGljaygpCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3RleHRfcHJlc2VudCgiVG9hc3RlciBNYW51YWwiKToKKyAgICAgICAgICAgIHNlbGYubG9nLmVycm9yKCJwbGVhc2UgY2hlY2sgW1RvYXN0ZXIgbWFudWFsXSBsaW5rIG9uIHBhZ2UiKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoVHJ1ZSkKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3RvYXN0ZXJ1aXRlc3QvdG9hc3Rlcl90ZXN0LmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDA1ZjlhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9jb250cmliL3R0cy90b2FzdGVydWl0ZXN0L3RvYXN0ZXJfdGVzdC5jZmcKQEAgLTAsMCArMSwyMSBAQAorIyBDb25maWd1cmF0aW9uIGZpbGUgZm9yIHRvYXN0ZXJfdGVzdAorIyBTb3J0ZWQgYnkgZGlmZmVyZW50IGhvc3QgdHlwZQorCisjIHRlc3QgYnJvd3NlciBjb3VsZCBiZTogZmlyZWZveDsgY2hyb21lOyBpZShzdGlsbCB1bmRlciBkZXZlbG9wbWVudCkKKyMgbG9nZ2luZ19sZXZlbCBjb3VsZCBiZTogQ1JJVElDQUw7IEVSUk9SOyBXQVJOSU5HOyBJTkZPOyBERUJVRzsgTk9UU0VUCisKKworW3RvYXN0ZXJfdGVzdF9saW51eF0KK3RvYXN0ZXJfdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMCcKK3Rlc3RfYnJvd3NlciA9ICdmaXJlZm94JwordGVzdF9jYXNlcyA9IFs5NDZdCitsb2dnaW5nX2xldmVsID0gJ0lORk8nCisKKworW3RvYXN0ZXJfdGVzdF93aW5kb3dzXQordG9hc3Rlcl91cmwgPSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwJwordGVzdF9icm93c2VyID0gWydpZScsICdmaXJlZm94JywgJ2Nocm9tZSddCit0ZXN0X2Nhc2VzID0gWzkwMSwgOTAyLCA5MDNdCitsb2dnaW5nX2xldmVsID0gJ0RFQlVHJworCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsY2hlY2sucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjBmODIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGNoZWNrLnB5CkBAIC0wLDAgKzEsNTMgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2ltcG9ydCBzeXMKKworaW1wb3J0IGh0dHBsaWIyCitpbXBvcnQgY29uZmlnCitpbXBvcnQgdXJsbGlzdAorCisKK2NvbmZpZy5sb2dnZXIuaW5mbygiVGVzdGluZyAlcyB3aXRoICVzIiwgY29uZmlnLlRPQVNURVJfQkFTRVVSTCwgY29uZmlnLlczQ19WQUxJREFUT1IpCisKK2RlZiB2YWxpZGF0ZV9odG1sNSh1cmwpOgorICAgIGh0dHBfY2xpZW50ID0gaHR0cGxpYjIuSHR0cChOb25lKQorICAgIHN0YXR1cyA9ICJGYWlsZWQiCisgICAgZXJyb3JzID0gLTEKKyAgICB3YXJuaW5ncyA9IC0xCisKKyAgICB1cmxyZXF1ZXN0ID0gY29uZmlnLlczQ19WQUxJREFUT1IrdXJsCisKKyAgICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKKyAgICAjIHdlIGRpc2FibGUgdGhlIGJyb2FkLWV4Y2VwdCBiZWNhdXNlIHdlIHdhbnQgdG8gYWN0dWFsbHkgY2F0Y2ggYWxsIHBvc3NpYmxlIGV4Y2VwdGlvbnMKKyAgICB0cnk6CisgICAgICAgIHJlc3AsIF8gPSBodHRwX2NsaWVudC5yZXF1ZXN0KHVybHJlcXVlc3QsICJIRUFEIikKKyAgICAgICAgaWYgcmVzcFsneC13M2MtdmFsaWRhdG9yLXN0YXR1cyddICE9ICJBYm9ydCI6CisgICAgICAgICAgICBzdGF0dXMgPSByZXNwWyd4LXczYy12YWxpZGF0b3Itc3RhdHVzJ10KKyAgICAgICAgICAgIGVycm9ycyA9IGludChyZXNwWyd4LXczYy12YWxpZGF0b3ItZXJyb3JzJ10pCisgICAgICAgICAgICB3YXJuaW5ncyA9IGludChyZXNwWyd4LXczYy12YWxpZGF0b3Itd2FybmluZ3MnXSkKKworICAgICAgICAgICAgaWYgc3RhdHVzID09ICdJbnZhbGlkJzoKKyAgICAgICAgICAgICAgICBjb25maWcubG9nZ2VyLndhcm4oIkZhaWxlZCAlcyBpcyAlc1x0ZXJyb3JzICVzIHdhcm5pbmdzICVzIChjaGVjayBhdCAlcykiLCB1cmwsIHN0YXR1cywgZXJyb3JzLCB3YXJuaW5ncywgdXJscmVxdWVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygiT0shICVzIiwgdXJsKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgIGNvbmZpZy5sb2dnZXIud2FybigiRmFpbGVkIHZhbGlkYXRpb24gY2FsbDogJXMiLCBleGMpCisgICAgcmV0dXJuIChzdGF0dXMsIGVycm9ycywgd2FybmluZ3MpCisKKworZGVmIHByaW50X3ZhbGlkYXRpb24odXJsKToKKyAgICBzdGF0dXMsIGVycm9ycywgd2FybmluZ3MgPSB2YWxpZGF0ZV9odG1sNSh1cmwpCisgICAgY29uZmlnLmxvZ2dlci5lcnJvcigidXJsICVzIGlzICVzXHRlcnJvcnMgJXMgd2FybmluZ3MgJXMgKGNoZWNrIGF0ICVzKSIsIHVybCwgc3RhdHVzLCBlcnJvcnMsIHdhcm5pbmdzLCBjb25maWcuVzNDX1ZBTElEQVRPUit1cmwpCisKKworZGVmIG1haW4oKToKKyAgICBwcmludCgiVGVzdGluZyAlcyB3aXRoICVzIiAlIChjb25maWcuVE9BU1RFUl9CQVNFVVJMLCBjb25maWcuVzNDX1ZBTElEQVRPUikpCisKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICAgICAgcHJpbnRfdmFsaWRhdGlvbihzeXMuYXJndlsxXSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdXJsIGluIHVybGxpc3QuVVJMUzoKKyAgICAgICAgICAgIHByaW50X3ZhbGlkYXRpb24oY29uZmlnLlRPQVNURVJfQkFTRVVSTCt1cmwpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGxpc3QucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL2NvbnRyaWIvdHRzL3VybGxpc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiOWZmYwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvY29udHJpYi90dHMvdXJsbGlzdC5weQpAQCAtMCwwICsxLDM5IEBACitVUkxTID0gWworICAgICd0b2FzdGVyZ3VpL2xhbmRpbmcvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZHMvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3Rhc2tzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrcy8xLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXNrLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcmVjaXBlcy8nLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcmVjaXBlLzEvYWN0aXZlX3RhYi8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3JlY2lwZV9wYWNrYWdlcy8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VzLycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMvMScsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC8xLzEnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMvMS8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xL3RhcmdldHBrZycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9kaXJpbmZvJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL3RhcmdldC8xL2RpcmluZm9fZmlsZXBhdGgvXy9iaW4vYmFzaCcsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS9jb25maWd1cmF0aW9uJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2NvbmZpZ3ZhcnMnLAorICAgICd0b2FzdGVyZ3VpL2J1aWxkLzEvYnVpbGR0aW1lJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2NwdXVzYWdlJywKKyAgICAndG9hc3Rlcmd1aS9idWlsZC8xL2Rpc2tpbycsCisgICAgJ3RvYXN0ZXJndWkvYnVpbGQvMS90YXJnZXQvMS9wYWNrYWdlZmlsZS8xJywKKyAgICAndG9hc3Rlcmd1aS9uZXdwcm9qZWN0LycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdHMvJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEnLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9jb25maWd1cmF0aW9uJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvYnVpbGRzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVycy8nLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci8xJywKKyAgICAndG9hc3Rlcmd1aS9wcm9qZWN0LzEvaW1wb3J0bGF5ZXInLAorICAgICd0b2FzdGVyZ3VpL3Byb2plY3QvMS90YXJnZXRzLycsCisgICAgJ3RvYXN0ZXJndWkvcHJvamVjdC8xL21hY2hpbmVzLycsCisgICAgJ3RvYXN0ZXJndWkvJywKK10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2VhYTExYgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworICAgIGZyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudCBpbXBvcnQgZXhlY3V0ZV9mcm9tX2NvbW1hbmRfbGluZQorCisgICAgZXhlY3V0ZV9mcm9tX2NvbW1hbmRfbGluZShzeXMuYXJndikKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9tYW5hZ2VtZW50L19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWFuYWdlbWVudC9jb21tYW5kcy9sc3VwZGF0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlOTUxMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21hbmFnZW1lbnQvY29tbWFuZHMvbHN1cGRhdGVzLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBOb0FyZ3NDb21tYW5kLCBDb21tYW5kRXJyb3IKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgTGF5ZXJTb3VyY2UKK2ltcG9ydCBvcworCitjbGFzcyBDb21tYW5kKE5vQXJnc0NvbW1hbmQpOgorICAgIGFyZ3MgICAgPSAiIgorICAgIGhlbHAgICAgPSAiVXBkYXRlcyBsb2NhbGx5IGNhY2hlZCBpbmZvcm1hdGlvbiBmcm9tIGFsbCBMYXllclNvdXJjZXMiCisKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsICoqb3B0aW9ucyk6CisgICAgICAgIGZvciBscyBpbiBMYXllclNvdXJjZS5vYmplY3RzLmFsbCgpOgorICAgICAgICAgICAgbHMudXBkYXRlKCkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAxX2luaXRpYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkZWVmOAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMV9pbml0aWFsLnB5CkBAIC0wLDAgKzEsNDAwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnQnVpbGQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9idWlsZCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdtYWNoaW5lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnaW1hZ2VfZnN0eXBlcycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Rpc3RybycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2Rpc3Ryb192ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc3RhcnRlZF9vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgnY29tcGxldGVkX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdvdXRjb21lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0yKSksCisgICAgICAgICAgICAoJ2Vycm9yc19ubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCd3YXJuaW5nc19ubycsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdjb29rZXJfbG9nX3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwMCkpLAorICAgICAgICAgICAgKCdidWlsZF9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnYml0YmFrZV92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0J1aWxkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RhcmdldCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnaXNfaW1hZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ2ZpbGVfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RhcmdldCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXNrJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdGFzaycsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0ndGFza19idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnb3JkZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndGFza19leGVjdXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9RmFsc2UpKSwKKyAgICAgICAgICAgICgnb3V0Y29tZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9NSkpLAorICAgICAgICAgICAgKCdzc3RhdGVfY2hlY2tzdW0nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwYXRoX3RvX3NzdGF0ZV9vYmonLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD01MDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgncmVjaXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdidWlsZF9yZWNpcGUnLCB0bz1vcm1bJ29ybS5SZWNpcGUnXSkpLAorICAgICAgICAgICAgKCd0YXNrX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdzb3VyY2VfdXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3dvcmtfZGlyZWN0b3J5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3NjcmlwdF90eXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2xpbmVfbnVtYmVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSksCisgICAgICAgICAgICAoJ2Rpc2tfaW8nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKSwKKyAgICAgICAgICAgICgnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0wLCBtYXhfbGVuZ3RoPTUwKSksCisgICAgICAgICAgICAoJ3NzdGF0ZV9yZXN1bHQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgICAgICgnbWVzc2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjQwKSksCisgICAgICAgICAgICAoJ2xvZ2ZpbGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXNrJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1Rhc2tfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Rhc2tfZGVwZW5kZW5jeScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCd0YXNrJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc190YXNrJywgdG89b3JtWydvcm0uVGFzayddKSksCisgICAgICAgICAgICAoJ2RlcGVuZHNfb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnLCB0bz1vcm1bJ29ybS5UYXNrJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXNrX0RlcGVuZGVuY3knXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3BhY2thZ2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ3JlY2lwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlY2lwZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICAgICAoJ3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZXZpc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdpbnN0YWxsZWRfc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdzZWN0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsaWNlbnNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD04MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUGFja2FnZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcGFja2FnZV9kZXBlbmRlbmN5JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3BhY2thZ2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZScsIHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnLCB0bz1vcm1bJ29ybS5QYWNrYWdlJ10pKSwKKyAgICAgICAgICAgICgnZGVwX3R5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0J10sIG51bGw9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2VfRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0J10pKSwKKyAgICAgICAgICAgICgncGFja2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlBhY2thZ2UnXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQYWNrYWdlX0ZpbGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2ZpbGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncGFja2FnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nYnVpbGRmaWxlbGlzdF9wYWNrYWdlJywgdG89b3JtWydvcm0uUGFja2FnZSddKSksCisgICAgICAgICAgICAoJ3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1BhY2thZ2VfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWNpcGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWNpcGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyZWNpcGVfbGF5ZXJfdmVyc2lvbicsIHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICAgICAgKCdzdW1tYXJ5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnZGVzY3JpcHRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdzZWN0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGljZW5zZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2xpY2Vuc2luZ19pbmZvJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCdob21lcGFnZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnYnVndHJhY2tlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDAsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnZmlsZV9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUmVjaXBlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlY2lwZV9EZXBlbmRlbmN5JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVjaXBlX2RlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncmVjaXBlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19yZWNpcGUnLCB0bz1vcm1bJ29ybS5SZWNpcGUnXSkpLAorICAgICAgICAgICAgKCdkZXBlbmRzX29uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdyX2RlcGVuZGVuY2llc19kZXBlbmRzJywgdG89b3JtWydvcm0uUmVjaXBlJ10pKSwKKyAgICAgICAgICAgICgnZGVwX3R5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWNpcGVfRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVyJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2xheWVyX2luZGV4X3VybCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykobWF4X2xlbmd0aD0yMDApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdMYXllcl9WZXJzaW9uJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbGF5ZXJfdmVyc2lvbicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9idWlsZCcsIHRvPW9ybVsnb3JtLkJ1aWxkJ10pKSwKKyAgICAgICAgICAgICgnbGF5ZXInLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J2xheWVyX3ZlcnNpb25fbGF5ZXInLCB0bz1vcm1bJ29ybS5MYXllciddKSksCisgICAgICAgICAgICAoJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgICAgICgnY29tbWl0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgncHJpb3JpdHknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllcl9WZXJzaW9uJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1ZhcmlhYmxlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdmFyaWFibGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnYnVpbGQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShyZWxhdGVkX25hbWU9J3ZhcmlhYmxlX2J1aWxkJywgdG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCd2YXJpYWJsZV9uYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFyaWFibGVfdmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ2NoYW5nZWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PUZhbHNlKSksCisgICAgICAgICAgICAoJ2h1bWFuX3JlYWRhYmxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydWYXJpYWJsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdWYXJpYWJsZUhpc3RvcnknCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV92YXJpYWJsZWhpc3RvcnknLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgndmFyaWFibGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5WYXJpYWJsZSddKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICAgICAgKCdsaW5lX251bWJlcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdvcGVyYXRpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTE2KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVmFyaWFibGVIaXN0b3J5J10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xvZ01lc3NhZ2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9sb2dtZXNzYWdlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdsZXZlbCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCkpLAorICAgICAgICAgICAgKCdtZXNzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNDApKSwKKyAgICAgICAgICAgICgncGF0aG5hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgICAgICgnbGluZW5vJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykobnVsbD1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTG9nTWVzc2FnZSddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fYnVpbGQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RhcmdldCcpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVGFzaycKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Rhc2snKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Rhc2tfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Rhc2tfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUGFja2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3BhY2thZ2UnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1BhY2thZ2VfRGVwZW5kZW5jeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3BhY2thZ2VfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQYWNrYWdlX0ZpbGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wYWNrYWdlX2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlY2lwZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3JlY2lwZScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUmVjaXBlX0RlcGVuZGVuY3knCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWNpcGVfZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9sYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTGF5ZXJfVmVyc2lvbicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xheWVyX3ZlcnNpb24nKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1ZhcmlhYmxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1ZhcmlhYmxlSGlzdG9yeScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3ZhcmlhYmxlaGlzdG9yeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTG9nTWVzc2FnZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2xvZ21lc3NhZ2UnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDAyX2F1dG9fX2FkZF9maWVsZF9idWlsZF90aW1lc3BlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0MjFjYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwMl9hdXRvX19hZGRfZmllbGRfYnVpbGRfdGltZXNwZW50LnB5CkBAIC0wLDAgKzEsMTgwIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9mc3R5cGVzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwM190aW1lc3BlbnQucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDNfdGltZXNwZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MDBmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDNfdGltZXNwZW50LnB5CkBAIC0wLDAgKzEsMTgyIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBEYXRhTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKK2NsYXNzIE1pZ3JhdGlvbihEYXRhTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAiV3JpdGUgeW91ciBmb3J3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICAjIE5vdGU6IERvbid0IHVzZSAiZnJvbSBhcHBuYW1lLm1vZGVscyBpbXBvcnQgTW9kZWxOYW1lIi4KKyAgICAgICAgIyBVc2Ugb3JtLk1vZGVsTmFtZSB0byByZWZlciB0byBtb2RlbHMgaW4gdGhpcyBhcHBsaWNhdGlvbiwKKyAgICAgICAgIyBhbmQgb3JtWydhcHBuYW1lLk1vZGVsTmFtZSddIGZvciBtb2RlbHMgaW4gb3RoZXIgYXBwbGljYXRpb25zLgorCisgICAgICAgIGZvciBidWlsZCBpbiBvcm0uQnVpbGQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIGJ1aWxkLnRpbWVzcGVudCA9IGludCgoYnVpbGQuY29tcGxldGVkX29uIC0gYnVpbGQuc3RhcnRlZF9vbikudG90YWxfc2Vjb25kcygpKQorICAgICAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICJXcml0ZSB5b3VyIGJhY2t3YXJkcyBtZXRob2RzIGhlcmUuIgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiIpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2VfZnN0eXBlcyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNpbmdfaW5mbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCcsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICc1J30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KKyAgICBzeW1tZXRyaWNhbCA9IFRydWUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNF9hdXRvX19hZGRfZmllbGRfcGFja2FnZV9pbnN0YWxsZWRfbmFtZS5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNF9hdXRvX19hZGRfZmllbGRfcGFja2FnZV9pbnN0YWxsZWRfbmFtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ0NDViCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA0X2F1dG9fX2FkZF9maWVsZF9wYWNrYWdlX2luc3RhbGxlZF9uYW1lLnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUGFja2FnZS5pbnN0YWxsZWRfbmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2luc3RhbGxlZF9uYW1lJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTEwMCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1BhY2thZ2UuaW5zdGFsbGVkX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcGFja2FnZScsICdpbnN0YWxsZWRfbmFtZScpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9mc3R5cGVzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2luZ19pbmZvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJywgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzUnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDVfYXV0b19fYWRkX3RhcmdldF9pbWFnZV9maWxlX19hZGRfdGFyZ2V0X2ZpbGVfX2FkZF9maWVsZF92YXJpYWJsZWhpc3Rvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU3YWMzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA1X2F1dG9fX2FkZF90YXJnZXRfaW1hZ2VfZmlsZV9fYWRkX3RhcmdldF9maWxlX19hZGRfZmllbGRfdmFyaWFibGVoaXN0b3IucHkKQEAgLTAsMCArMSwyODEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfRmlsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldF9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ3BhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnc2l6ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdpbm9kZXR5cGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgncGVybWlzc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdvd25lcicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTI4KSksCisgICAgICAgICAgICAoJ2dyb3VwJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMjgpKSwKKyAgICAgICAgICAgICgnZGlyZWN0b3J5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdkaXJlY3Rvcnlfc2V0JywgdG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpLAorICAgICAgICAgICAgKCdzeW1fdGFyZ2V0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdzeW1saW5rX3NldCcsIGJsYW5rPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdUYXJnZXRfSW1hZ2VfRmlsZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3RhcmdldF9pbWFnZV9maWxlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldCddKSksCisgICAgICAgICAgICAoJ2ZpbGVfbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdmaWxlX3NpemUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydUYXJnZXRfSW1hZ2VfRmlsZSddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdWYXJpYWJsZUhpc3RvcnkudmFsdWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShkZWZhdWx0PScnLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVjaXBlLmxpY2Vuc2luZ19pbmZvJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsaWNlbnNpbmdfaW5mbycpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfbmFtZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9uYW1lJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQuZmlsZV9zaXplJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdmaWxlX3NpemUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLmltYWdlX2ZzdHlwZXMnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAnaW1hZ2VfZnN0eXBlcycpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xvZ01lc3NhZ2UudGFzaycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sb2dtZXNzYWdlJywgJ3Rhc2snLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhc2snXSwgbnVsbD1UcnVlLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmVsYXBzZWRfdGltZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnZWxhcHNlZF90aW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnVGFzaycsIGZpZWxkcyBbJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX3Rhc2snLCBbJ2J1aWxkX2lkJywgJ3JlY2lwZV9pZCcsICd0YXNrX25hbWUnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdUYXNrJywgZmllbGRzIFsnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fdGFzaycsIFsnYnVpbGRfaWQnLCAncmVjaXBlX2lkJywgJ3Rhc2tfbmFtZSddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RhcmdldF9JbWFnZV9GaWxlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdGFyZ2V0X2ltYWdlX2ZpbGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1ZhcmlhYmxlSGlzdG9yeS52YWx1ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV92YXJpYWJsZWhpc3RvcnknLCAndmFsdWUnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUubGljZW5zaW5nX2luZm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2xpY2Vuc2luZ19pbmZvJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShkZWZhdWx0PScnLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1RhcmdldC5maWxlX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ZpbGVfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmZpbGVfc2l6ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV90YXJnZXQnLCAnZmlsZV9zaXplJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQuaW1hZ2VfZnN0eXBlcycKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9idWlsZCcsICdpbWFnZV9mc3R5cGVzJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTEwMCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xvZ01lc3NhZ2UudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sb2dtZXNzYWdlJywgJ3Rhc2tfaWQnKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFzay5lbGFwc2VkX3RpbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXNrJywgJ2VsYXBzZWRfdGltZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ2JsYW5rJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA2X2F1dG9fX2FkZF9maWVsZF90YXJnZXRfaW1hZ2Vfc2l6ZV9fYWRkX2ZpZWxkX3RhcmdldF9saWNlbnNlX21hbmlmZXN0X3AucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiZTMwYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwNl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X2ltYWdlX3NpemVfX2FkZF9maWVsZF90YXJnZXRfbGljZW5zZV9tYW5pZmVzdF9wLnB5CkBAIC0wLDAgKzEsMjM1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LmltYWdlX3NpemUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ2ltYWdlX3NpemUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdUYXJnZXQubGljZW5zZV9tYW5pZmVzdF9wYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3RhcmdldCcsICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLnBlcm1pc3Npb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfZmlsZScsICdwZXJtaXNzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xNikpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuc3ltX3RhcmdldCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3N5bV90YXJnZXRfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShudWxsPVRydWUsIHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ2RpcmVjdG9yeV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKG51bGw9VHJ1ZSwgdG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1RhcmdldC5pbWFnZV9zaXplJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdpbWFnZV9zaXplJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQubGljZW5zZV9tYW5pZmVzdF9wYXRoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3RhcmdldCcsICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnKQorCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUucGVybWlzc2lvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3RhcmdldF9maWxlJywgJ3Blcm1pc3Npb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1RhcmdldF9GaWxlLnN5bV90YXJnZXQnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbgorICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfRmlsZS5zeW1fdGFyZ2V0JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAnc3ltX3RhcmdldF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlRhcmdldF9GaWxlJ10pKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1RhcmdldF9GaWxlLmRpcmVjdG9yeScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnVGFyZ2V0X0ZpbGUuZGlyZWN0b3J5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFyZ2V0X2ZpbGUnLCAnZGlyZWN0b3J5X2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSkpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwN19hdXRvX19hZGRfaGVscHRleHQucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2hlbHB0ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGM1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDdfYXV0b19fYWRkX2hlbHB0ZXh0LnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBtb2RlbCAnSGVscFRleHQnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9oZWxwdGV4dCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdidWlsZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0naGVscHRleHRfYnVpbGQnLCB0bz1vcm1bJ29ybS5CdWlsZCddKSksCisgICAgICAgICAgICAoJ2FyZWEnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKSgpKSwKKyAgICAgICAgICAgICgna2V5Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndGV4dCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0hlbHBUZXh0J10pCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnSGVscFRleHQnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9oZWxwdGV4dCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA4X2F1dG9fX2NoZ19maWVsZF92YXJpYWJsZWhpc3Rvcnlfb3BlcmF0aW9uX19jaGdfZmllbGRfcmVjaXBlX2Rlc2NyaXB0aW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlNDA4YQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAwOF9hdXRvX19jaGdfZmllbGRfdmFyaWFibGVoaXN0b3J5X29wZXJhdGlvbl9fY2hnX2ZpZWxkX3JlY2lwZV9kZXNjcmlwdGlvLnB5CkBAIC0wLDAgKzEsMjI1IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1ZhcmlhYmxlSGlzdG9yeS5vcGVyYXRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV92YXJpYWJsZWhpc3RvcnknLCAnb3BlcmF0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD02NCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUmVjaXBlLmRlc2NyaXB0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfSW1hZ2VfRmlsZS5maWxlX25hbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0yNTQpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2UuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoKSkKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdWYXJpYWJsZUhpc3Rvcnkub3BlcmF0aW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdmFyaWFibGVoaXN0b3J5JywgJ29wZXJhdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTYpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3JlY2lwZScsICdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXJnZXRfSW1hZ2VfRmlsZS5maWxlX25hbWUnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV90YXJnZXRfaW1hZ2VfZmlsZScsICdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2UuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wYWNrYWdlJywgJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yMDApKQorCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMDlfYXV0b19fYWRkX3Byb2plY3R2YXJpYWJsZV9fYWRkX3Byb2plY3RsYXllcl9fYWRkX3Byb2plY3R0YXJnZXRfX2FkZF9wci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTU4ZGMyCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDA5X2F1dG9fX2FkZF9wcm9qZWN0dmFyaWFibGVfX2FkZF9wcm9qZWN0bGF5ZXJfX2FkZF9wcm9qZWN0dGFyZ2V0X19hZGRfcHIucHkKQEAgLTAsMCArMSwyODYgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0VmFyaWFibGUnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9wcm9qZWN0dmFyaWFibGUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgncHJvamVjdCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlByb2plY3QnXSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgndmFsdWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShibGFuaz1UcnVlKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdFZhcmlhYmxlJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1Byb2plY3RMYXllcicKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX3Byb2plY3RsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpLAorICAgICAgICAgICAgKCdnaXR1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICAgICAgKCdjb21taXQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NCkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1Byb2plY3RMYXllciddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0VGFyZ2V0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdHRhcmdldCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdwcm9qZWN0Jywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddKSksCisgICAgICAgICAgICAoJ3RhcmdldCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnUHJvamVjdFRhcmdldCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdQcm9qZWN0JworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcHJvamVjdCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnY3JlYXRlZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShhdXRvX25vd19hZGQ9VHJ1ZSwgYmxhbms9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cGRhdGVkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGF1dG9fbm93PVRydWUsIGJsYW5rPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydQcm9qZWN0J10pCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0J1aWxkLnByb2plY3QnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAncHJvamVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUHJvamVjdCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdQcm9qZWN0VmFyaWFibGUnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0dmFyaWFibGUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3RMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Byb2plY3RsYXllcicpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUHJvamVjdFRhcmdldCcKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3Byb2plY3R0YXJnZXQnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1Byb2plY3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9wcm9qZWN0JykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5wcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDEwX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0X2JyYW5jaF9fYWRkX2ZpZWxkX3Byb2plY3Rfc2hvcnRfZGVzY3JpcHRpb25fX2EucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExY2UxZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMF9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9icmFuY2hfX2FkZF9maWVsZF9wcm9qZWN0X3Nob3J0X2Rlc2NyaXB0aW9uX19hLnB5CkBAIC0wLDAgKzEsMjU3IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdicmFuY2gnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9J21hc3RlcicsIG1heF9sZW5ndGg9NTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdC5zaG9ydF9kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3Nob3J0X2Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PScnLCBtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QudXNlcl9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3VzZXJfaWQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LnNob3J0X2Rlc2NyaXB0aW9uJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnc2hvcnRfZGVzY3JpcHRpb24nKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QudXNlcl9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3VzZXJfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDExX2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0bGF5ZXJfZGlycGF0aC5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMV9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX2RpcnBhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2NTIyMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMV9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX2RpcnBhdGgucHkKQEAgLTAsMCArMSwyNDIgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0yNTQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZGlycGF0aCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxMl9hdXRvX19hZGRfZmllbGRfcHJvamVjdGxheWVyX29wdGlvbmFsX19hZGRfZmllbGRfcHJvamVjdHRhcmdldF90YXNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDgzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTJfYXV0b19fYWRkX2ZpZWxkX3Byb2plY3RsYXllcl9vcHRpb25hbF9fYWRkX2ZpZWxkX3Byb2plY3R0YXJnZXRfdGFzay5weQpAQCAtMCwwICsxLDI1MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5vcHRpb25hbCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnb3B0aW9uYWwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0VGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdHRhcmdldCcsICd0YXNrJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLm9wdGlvbmFsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdvcHRpb25hbCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdFRhcmdldC50YXNrJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3R0YXJnZXQnLCAndGFzaycpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxM19hdXRvX19hZGRfcmVsZWFzZV9fYWRkX2xheWVydmVyc2lvbmRlcGVuZGVuY3lfX2FkZF91bmlxdWVfbGF5ZXJ2ZXJzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOTU0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTNfYXV0b19fYWRkX3JlbGVhc2VfX2FkZF9sYXllcnZlcnNpb25kZXBlbmRlbmN5X19hZGRfdW5pcXVlX2xheWVydmVyc2lvbi5weQpAQCAtMCwwICsxLDcxMCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1JlbGVhc2UnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWxlYXNlJywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKSh1bmlxdWU9VHJ1ZSwgbWF4X2xlbmd0aD0zMikpLAorICAgICAgICAgICAgKCdkZXNjcmlwdGlvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2JpdGJha2VfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0zMikpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlbGVhc2UnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl92ZXJzaW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykocmVsYXRlZF9uYW1lPSdkZXBlbmRlbmNpZXMnLCB0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnZGVwZW5kc19vbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHJlbGF0ZWRfbmFtZT0nZGVwZW5kZWVzJywgdG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclZlcnNpb25EZXBlbmRlbmN5JywgZmllbGRzIFsnbGF5ZXJfc291cmNlJywgJ3VwX2lkJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnZlcnNpb25kZXBlbmRlbmN5JywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmcnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZycsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD02MykpLAorICAgICAgICAgICAgKCdoZWxwdGV4dCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCd2YWx1ZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnVG9hc3RlclNldHRpbmcnXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnTWFjaGluZScKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX21hY2hpbmUnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfc291cmNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgndXBfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9kYXRlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ2xheWVyX3ZlcnNpb24nLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10pKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSksCisgICAgICAgICAgICAoJ2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0yNTUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydNYWNoaW5lJ10pCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ01hY2hpbmUnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX21hY2hpbmUnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgQWRkaW5nIG1vZGVsICdSZWxlYXNlRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZWxlYXNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSksCisgICAgICAgICAgICAoJ2xheWVyJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXInXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1JlbGVhc2VEZWZhdWx0TGF5ZXInXSkKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnQml0YmFrZVZlcnNpb24nCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9iaXRiYWtldmVyc2lvbicsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCduYW1lJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykodW5pcXVlPVRydWUsIG1heF9sZW5ndGg9MzIpKSwKKyAgICAgICAgICAgICgnZ2l0dXJsJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnKShtYXhfbGVuZ3RoPTIwMCkpLAorICAgICAgICAgICAgKCdicmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTMyKSksCisgICAgICAgICAgICAoJ2RpcnBhdGgnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTI1NSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0JpdGJha2VWZXJzaW9uJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0JyYW5jaCcKKyAgICAgICAgZGIuY3JlYXRlX3RhYmxlKHUnb3JtX2JyYW5jaCcsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdsYXllcl9zb3VyY2UnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PVRydWUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSkpLAorICAgICAgICAgICAgKCd1cF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSksCisgICAgICAgICAgICAoJ3VwX2RhdGUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKSwKKyAgICAgICAgICAgICgnYml0YmFrZV9icmFuY2gnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKSksCisgICAgICAgICAgICAoJ3Nob3J0X2Rlc2NyaXB0aW9uJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ0JyYW5jaCddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2JyYW5jaCcsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0xheWVyU291cmNlJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fbGF5ZXJzb3VyY2UnLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbmFtZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NjMpKSwKKyAgICAgICAgICAgICgnc291cmNldHlwZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKCkpLAorICAgICAgICAgICAgKCdhcGl1cmwnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShkZWZhdWx0PU5vbmUsIG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUpKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydMYXllclNvdXJjZSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9sYXllcnNvdXJjZScsIFsnc291cmNldHlwZScsICdhcGl1cmwnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIubmFtZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbmFtZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3RMYXllci5jb21taXQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2NvbW1pdCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmdpdHVybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnZ2l0dXJsJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmxheWVyY29tbWl0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdsYXllcmNvbW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsYXllcl9zb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKGRlZmF1bHQ9Tm9uZSwgdG89b3JtWydvcm0uTGF5ZXJTb3VyY2UnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfaWQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9kYXRlJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfZGF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkJyYW5jaCddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5kaXJwYXRoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAnZGlycGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTI1NSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmJ1aWxkJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdidWlsZF9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKG51bGw9VHJ1ZSwgdG89b3JtWydvcm0uQnVpbGQnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9ODApKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXJfVmVyc2lvbicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXJfdmVyc2lvbicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ3VwX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2xheWVyX3NvdXJjZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD1Ob25lLCB0bz1vcm1bJ29ybS5MYXllclNvdXJjZSddLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnVwX2lkJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVjaXBlLnVwX2RhdGUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3VwX2RhdGUnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnKShkZWZhdWx0PU5vbmUsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbGF5ZXJfc291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10sIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci51cF9pZCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudXBfZGF0ZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9kYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3VybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3NfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9Tm9uZSwgbWF4X2xlbmd0aD0yMDAsIG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllci5kZXNjcmlwdGlvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICdkZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJykoZGVmYXVsdD1Ob25lLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUpKQorICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIEFkZGluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnTGF5ZXInLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICduYW1lJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdicmFuY2gnKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JpdGJha2VfdmVyc2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykoZGVmYXVsdD0tMSwgdG89b3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LnJlbGVhc2UnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PS0xLCB0bz1vcm1bJ29ybS5SZWxlYXNlJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICduYW1lJ10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9sYXllcicsIFsnbGF5ZXJfc291cmNlX2lkJywgJ25hbWUnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllcicsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fbGF5ZXInLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyX1ZlcnNpb24nLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyX3ZlcnNpb24nLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyU291cmNlJywgZmllbGRzIFsnc291cmNldHlwZScsICdhcGl1cmwnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWydzb3VyY2V0eXBlJywgJ2FwaXVybCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0JyYW5jaCcsIGZpZWxkcyBbJ2xheWVyX3NvdXJjZScsICd1cF9pZCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAndXBfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdCcmFuY2gnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAnbmFtZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fYnJhbmNoJywgWydsYXllcl9zb3VyY2VfaWQnLCAnbmFtZSddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ01hY2hpbmUnLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX21hY2hpbmUnLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgUmVtb3ZpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knLCBmaWVsZHMgWydsYXllcl9zb3VyY2UnLCAndXBfaWQnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVydmVyc2lvbmRlcGVuZGVuY3knLCBbJ2xheWVyX3NvdXJjZV9pZCcsICd1cF9pZCddKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2UnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdMYXllclZlcnNpb25EZXBlbmRlbmN5JworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeScpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnVG9hc3RlclNldHRpbmcnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV90b2FzdGVyc2V0dGluZycpCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnTWFjaGluZScKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX21hY2hpbmUnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1JlbGVhc2VEZWZhdWx0TGF5ZXInCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCaXRiYWtlVmVyc2lvbicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX2JpdGJha2V2ZXJzaW9uJykKKworICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdCcmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9icmFuY2gnKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInKQorCisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0xheWVyU291cmNlJworICAgICAgICBkYi5kZWxldGVfdGFibGUodSdvcm1fbGF5ZXJzb3VyY2UnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdExheWVyLm5hbWUnCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0TGF5ZXIubmFtZScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIubmFtZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9wcm9qZWN0bGF5ZXInLCAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykobWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3RMYXllci5kaXJwYXRoJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmRpcnBhdGgnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uICAgICAgICAjIEFkZGluZyBmaWVsZCAnUHJvamVjdExheWVyLmRpcnBhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdGxheWVyJywgJ2RpcnBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmNvbW1pdCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuY29tbWl0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdjb21taXQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0TGF5ZXIuZ2l0dXJsJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUHJvamVjdExheWVyLmdpdHVybCcgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0TGF5ZXIuZ2l0dXJsJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdnaXR1cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjU0KSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdExheWVyLmxheWVyY29tbWl0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3Byb2plY3RsYXllcicsICdsYXllcmNvbW1pdF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsYXllcl9zb3VyY2VfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24udXBfaWQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9kYXRlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAndXBfZGF0ZScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi51cF9icmFuY2gnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICd1cF9icmFuY2hfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uZGlycGF0aCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2RpcnBhdGgnKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnTGF5ZXJfVmVyc2lvbi5idWlsZCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ0xheWVyX1ZlcnNpb24uYnVpbGQnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyX1ZlcnNpb24uYnVpbGQnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2J1aWxkX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcl92ZXJzaW9uJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9NTApKQorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUubGF5ZXJfc291cmNlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICdsYXllcl9zb3VyY2VfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS51cF9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWNpcGUnLCAndXBfaWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlY2lwZS51cF9kYXRlJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX3JlY2lwZScsICd1cF9kYXRlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci5sYXllcl9zb3VyY2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnbGF5ZXJfc291cmNlX2lkJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci51cF9pZCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9pZCcpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudXBfZGF0ZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd1cF9kYXRlJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdMYXllci52Y3NfdXJsJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyJywgJ3Zjc191cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnN1bW1hcnknCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnc3VtbWFyeScpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIuZGVzY3JpcHRpb24nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAnZGVzY3JpcHRpb24nKQorCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnTGF5ZXIubG9jYWxfcGF0aCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ0xheWVyLmxvY2FsX3BhdGgnIGFuZCBpdHMgdmFsdWVzIGNhbm5vdCBiZSByZXN0b3JlZC4iKQorICAgICAgICAKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgcHJvdmlkZWQgaGVyZSB0byBhaWQgaW4gd3JpdGluZyBhIGNvcnJlY3QgbWlncmF0aW9uCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ0xheWVyLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcpKG1heF9sZW5ndGg9MjU1KSkKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdQcm9qZWN0LmJyYW5jaCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3QuYnJhbmNoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1Byb2plY3QuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTUwKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ3JlbGVhc2VfaWQnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE0X2F1dG9fX2NoZ19maWVsZF9wYWNrYWdlX3N1bW1hcnlfX2NoZ19maWVsZF9sYXllcl9zdW1tYXJ5X19jaGdfZmllbGRfcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NWYxNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNF9hdXRvX19jaGdfZmllbGRfcGFja2FnZV9zdW1tYXJ5X19jaGdfZmllbGRfbGF5ZXJfc3VtbWFyeV9fY2hnX2ZpZWxkX3JlLnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2Uuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKCkpCisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnTGF5ZXIuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2xheWVyJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKShudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnKSgpKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1BhY2thZ2Uuc3VtbWFyeScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3BhY2thZ2UnLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdMYXllci5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fbGF5ZXInLCAnc3VtbWFyeScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MjAwLCBudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlY2lwZS5zdW1tYXJ5JworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ3N1bW1hcnknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnKShtYXhfbGVuZ3RoPTEwMCkpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE1X2F1dG9fX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3VybF9fYWRkX2ZpZWxkX2xheWVyX3Zjc193ZWJfdHJlZV9iYXNlX3UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2NjRjOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxNV9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmNzX3dlYl91cmxfX2FkZF9maWVsZF9sYXllcl92Y3Nfd2ViX3RyZWVfYmFzZV91LnB5CkBAIC0wLDAgKzEsMzM2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl91cmwnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl91cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdHJlZV9iYXNlX3VybCcKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJykoZGVmYXVsdD1Ob25lLCBtYXhfbGVuZ3RoPTIwMCwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXIudmNzX3dlYl91cmwnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fbGF5ZXInLCAndmNzX3dlYl91cmwnKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0xheWVyLnZjc193ZWJfdHJlZV9iYXNlX3VybCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTZfYXV0b19fYWRkX2ZpZWxkX3JlbGVhc2VfaGVscHRleHRfX2NoZ19maWVsZF9yZWxlYXNlX2JyYW5jaF9fYWRkX2luZGV4Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVjMGJhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE2X2F1dG9fX2FkZF9maWVsZF9yZWxlYXNlX2hlbHB0ZXh0X19jaGdfZmllbGRfcmVsZWFzZV9icmFuY2hfX2FkZF9pbmRleF8ucHkKQEAgLTAsMCArMSwzNTkgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlLmhlbHB0ZXh0JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnaGVscHRleHQnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcpKG51bGw9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICAgICAgIyBSZW5hbWluZyBjb2x1bW4gZm9yICdSZWxlYXNlLmJyYW5jaCcgdG8gbWF0Y2ggbmV3IGZpZWxkIHR5cGUuCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2gnKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnJhbmNoJ10sIGRlZmF1bHQ9LTEpKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0JyYW5jaC5iaXRiYWtlX2JyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9icmFuY2gnLCAnYml0YmFrZV9icmFuY2gnKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdQcm9qZWN0TGF5ZXInLCBmaWVsZHMgWydwcm9qZWN0JywgJ2xheWVyY29tbWl0J10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9wcm9qZWN0bGF5ZXInLCBbJ3Byb2plY3RfaWQnLCAnbGF5ZXJjb21taXRfaWQnXSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdQcm9qZWN0TGF5ZXInLCBmaWVsZHMgWydwcm9qZWN0JywgJ2xheWVyY29tbWl0J10KKyAgICAgICAgZGIuZGVsZXRlX3VuaXF1ZSh1J29ybV9wcm9qZWN0bGF5ZXInLCBbJ3Byb2plY3RfaWQnLCAnbGF5ZXJjb21taXRfaWQnXSkKKworICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2UuaGVscHRleHQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdoZWxwdGV4dCcpCisKKyAgICAgICAgIyBSZW5hbWluZyBjb2x1bW4gZm9yICdSZWxlYXNlLmJyYW5jaCcgdG8gbWF0Y2ggbmV3IGZpZWxkIHR5cGUuCisgICAgICAgIGRiLnJlbmFtZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfaWQnLCAnYnJhbmNoJykKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUmVsZWFzZS5icmFuY2gnCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MzIpKQorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnJhbmNoLmJpdGJha2VfYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2JyYW5jaCcsICdiaXRiYWtlX2JyYW5jaCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCwgYmxhbms9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmdEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE3X2F1dG9fX2RlbF90b2FzdGVyc2V0dGluZ2RlZmF1bHRsYXllcl9fYWRkX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4NWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxN19hdXRvX19kZWxfdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXJfX2FkZF9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fLnB5CkBAIC0wLDAgKzEsMzk2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIG1vZGVsICdUb2FzdGVyU2V0dGluZ0RlZmF1bHRMYXllcicKKyAgICAgICAgZGIuZGVsZXRlX3RhYmxlKHUnb3JtX3RvYXN0ZXJzZXR0aW5nZGVmYXVsdGxheWVyJykKKworICAgICAgICAjIEFkZGluZyBtb2RlbCAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScsICgKKyAgICAgICAgICAgICh1J2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJykocHJpbWFyeV9rZXk9VHJ1ZSkpLAorICAgICAgICAgICAgKCdyZWxlYXNlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSksCisgICAgICAgICAgICAoJ2xheWVyX3NvdXJjZScsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyU291cmNlJ10pKSwKKyAgICAgICAgICAgICgncHJpb3JpdHknLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApKSwKKyAgICAgICAgKSkKKyAgICAgICAgZGIuc2VuZF9jcmVhdGVfc2lnbmFsKHUnb3JtJywgWydSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSddKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eScsIGZpZWxkcyBbJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJ10KKyAgICAgICAgZGIuY3JlYXRlX3VuaXF1ZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScsIFsncmVsZWFzZV9pZCcsICdsYXllcl9zb3VyY2VfaWQnXSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWxlYXNlJywgJ2JyYW5jaF9pZCcpCisKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoX25hbWUnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD01MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ25hbWUnXQorICAgICAgICBkYi5jcmVhdGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWyduYW1lJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9yZWxlYXNlZGVmYXVsdGxheWVyJywgJ2xheWVyX2lkJykKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcl9uYW1lJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXJfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJykoZGVmYXVsdD0nJywgbWF4X2xlbmd0aD0xMDApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdMYXllclNvdXJjZScsIGZpZWxkcyBbJ25hbWUnXQorICAgICAgICBkYi5kZWxldGVfdW5pcXVlKHUnb3JtX2xheWVyc291cmNlJywgWyduYW1lJ10pCisKKyAgICAgICAgIyBSZW1vdmluZyB1bmlxdWUgY29uc3RyYWludCBvbiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknLCBmaWVsZHMgWydyZWxlYXNlJywgJ2xheWVyX3NvdXJjZSddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknLCBbJ3JlbGVhc2VfaWQnLCAnbGF5ZXJfc291cmNlX2lkJ10pCisKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJworICAgICAgICBkYi5jcmVhdGVfdGFibGUodSdvcm1fdG9hc3RlcnNldHRpbmdkZWZhdWx0bGF5ZXInLCAoCisgICAgICAgICAgICAodSdpZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcpKHByaW1hcnlfa2V5PVRydWUpKSwKKyAgICAgICAgICAgICgnbGF5ZXJfdmVyc2lvbicsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSkpLAorICAgICAgICApKQorICAgICAgICBkYi5zZW5kX2NyZWF0ZV9zaWduYWwodSdvcm0nLCBbJ1RvYXN0ZXJTZXR0aW5nRGVmYXVsdExheWVyJ10pCisKKyAgICAgICAgIyBEZWxldGluZyBtb2RlbCAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eScpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdSZWxlYXNlLmJyYW5jaCcKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1JlbGVhc2UuYnJhbmNoJyBhbmQgaXRzIHZhbHVlcyBjYW5ub3QgYmUgcmVzdG9yZWQuIikKKyAgICAgICAgCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByb3ZpZGVkIGhlcmUgdG8gYWlkIGluIHdyaXRpbmcgYSBjb3JyZWN0IG1pZ3JhdGlvbiAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2UnLCAnYnJhbmNoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CcmFuY2gnXSksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ1JlbGVhc2UuYnJhbmNoX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZScsICdicmFuY2hfbmFtZScpCisKKworICAgICAgICAjIFVzZXIgY2hvc2UgdG8gbm90IGRlYWwgd2l0aCBiYWNrd2FyZHMgTlVMTCBpc3N1ZXMgZm9yICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyJworICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uLiAnUmVsZWFzZURlZmF1bHRMYXllci5sYXllcicgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24gICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlbGVhc2VkZWZhdWx0bGF5ZXInLCAnbGF5ZXInLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkxheWVyJ10pLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWxlYXNlRGVmYXVsdExheWVyLmxheWVyX25hbWUnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVsZWFzZWRlZmF1bHRsYXllcicsICdsYXllcl9uYW1lJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2NyZWF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vd19hZGQnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZF9yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMThfYXV0b19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fcHJvamVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjg0YmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDE4X2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX3Byb2plY3QucHkKQEAgLTAsMCArMSwzMzEgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLnByb2plY3QnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdwcm9qZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKShkZWZhdWx0PU5vbmUsIHRvPW9ybVsnb3JtLlByb2plY3QnXSwgbnVsbD1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIGRlZiBiYWNrd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBEZWxldGluZyBmaWVsZCAnTGF5ZXJfVmVyc2lvbi5wcm9qZWN0JworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2xheWVyX3ZlcnNpb24nLCAncHJvamVjdF9pZCcpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9icmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uQnJhbmNoJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyc291cmNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJTb3VyY2UnfSwKKyAgICAgICAgICAgICdhcGl1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAnc291cmNldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnZlcnNpb25kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyVmVyc2lvbkRlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVlcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZW5jaWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxvZ21lc3NhZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnTG9nTWVzc2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGV2ZWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaW5lbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdwYXRobmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhc2snXSIsICdudWxsJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5tYWNoaW5lJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ01hY2hpbmUnfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnaW5zdGFsbGVkX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JldmlzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfdGFyZ2V0JyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSIsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2VfRmlsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkZmlsZWxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc2JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTlfYXV0b19fYWRkX2J1aWxkYXJ0aWZhY3QucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMTlfYXV0b19fYWRkX2J1aWxkYXJ0aWZhY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjZTllYQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAxOV9hdXRvX19hZGRfYnVpbGRhcnRpZmFjdC5weQpAQCAtMCwwICsxLDM0MiBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgbW9kZWwgJ0J1aWxkQXJ0aWZhY3QnCisgICAgICAgIGRiLmNyZWF0ZV90YWJsZSh1J29ybV9idWlsZGFydGlmYWN0JywgKAorICAgICAgICAgICAgKHUnaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnKShwcmltYXJ5X2tleT1UcnVlKSksCisgICAgICAgICAgICAoJ2J1aWxkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uQnVpbGQnXSkpLAorICAgICAgICAgICAgKCdmaWxlX25hbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykobWF4X2xlbmd0aD0xMDApKSwKKyAgICAgICAgICAgICgnZmlsZV9zaXplJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoKSksCisgICAgICAgICkpCisgICAgICAgIGRiLnNlbmRfY3JlYXRlX3NpZ25hbCh1J29ybScsIFsnQnVpbGRBcnRpZmFjdCddKQorCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgbW9kZWwgJ0J1aWxkQXJ0aWZhY3QnCisgICAgICAgIGRiLmRlbGV0ZV90YWJsZSh1J29ybV9idWlsZGFydGlmYWN0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnNicsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzYnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIwX2F1dG9fX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2FkZF9maWVsZF9yZWNpcGVfcGF0aGZsYWdzX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVjNTc5NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMF9hdXRvX19hZGRfZmllbGRfbGF5ZXJfdmVyc2lvbl9sb2NhbF9wYXRoX19hZGRfZmllbGRfcmVjaXBlX3BhdGhmbGFnc19fLnB5CkBAIC0wLDAgKzEsMzYxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIFJlbW92aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uICdSZWNpcGUnLCBmaWVsZHMgWydsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCddCisgICAgICAgIGRiLmRlbGV0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCddKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdMYXllcl9WZXJzaW9uLmxvY2FsX3BhdGgnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fbGF5ZXJfdmVyc2lvbicsICdsb2NhbF9wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJykoZGVmYXVsdD0iLyIsIG1heF9sZW5ndGg9MTAyNCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdSZWNpcGUucGF0aGZsYWdzJworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX3JlY2lwZScsICdwYXRoZmxhZ3MnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKGRlZmF1bHQ9JycsIG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKyAgICAgICAgIyBBZGRpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gJ1JlY2lwZScsIGZpZWxkcyBbJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncyddCisgICAgICAgIGRiLmNyZWF0ZV91bmlxdWUodSdvcm1fcmVjaXBlJywgWydsYXllcl92ZXJzaW9uX2lkJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnXSkKKworICAgICAgICAjIE1pZ3JhdGUgZGF0YSBmcm9tIExheWVyLmxvY2FsX3BhdGggdG8gTGF5ZXJfVmVyc2lvbi5sb2NhbF9wYXRoCisgICAgICAgIGlmIG5vdCBkYi5kcnlfcnVuOgorICAgICAgICAgICAgZm9yIGx2IGluIG9ybS5MYXllcl9WZXJzaW9uLm9iamVjdHMuYWxsKCk6CisgICAgICAgICAgICAgICAgaWYgbHYubGF5ZXIubG9jYWxfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbHYubG9jYWxfcGF0aCA9IGx2LmxheWVyLmxvY2FsX3BhdGgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsdi5sb2NhbF9wYXRoID0gIi8iCisgICAgICAgICAgICAgICAgbHYuc2F2ZSgpCisKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV9sYXllcicsICdsb2NhbF9wYXRoJykKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZXZlcnNlIHRoaXMgbWlncmF0aW9uIikKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZXJyb3JzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3RpbWVzcGVudCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3dhcm5pbmdzX25vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGRhcnRpZmFjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZEFydGlmYWN0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uaGVscHRleHQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnSGVscFRleHQnfSwKKyAgICAgICAgICAgICdhcmVhJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2hlbHB0ZXh0X2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAna2V5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwgKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcid9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9pbmRleF91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfZmlsZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdHJlZV9iYXNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc193ZWJfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJfdmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllcl9WZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJ30pLAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2J1aWxkJyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidsYXllcl92ZXJzaW9uX2xheWVyJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXInXSJ9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbG9jYWxfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCAoJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMV9hdXRvX19jaGdfZmllbGRfYnVpbGRfcHJvamVjdF9fY2hnX2ZpZWxkX3Byb2plY3RfYml0YmFrZV92ZXJzaW9uX19jaGdfLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MmRkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjFfYXV0b19fY2hnX2ZpZWxkX2J1aWxkX3Byb2plY3RfX2NoZ19maWVsZF9wcm9qZWN0X2JpdGJha2VfdmVyc2lvbl9fY2hnXy5weQpAQCAtMCwwICsxLDM3MSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBub19kcnlfcnVuID0gVHJ1ZQorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10pKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QuYml0YmFrZV92ZXJzaW9uJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdiaXRiYWtlX3ZlcnNpb25faWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddLCBudWxsPVRydWUpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Byb2plY3QnLCAncmVsZWFzZV9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLlJlbGVhc2UnXSwgbnVsbD1UcnVlKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmNwdV91c2FnZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnKShudWxsPVRydWUsIG1heF9kaWdpdHM9OCwgZGVjaW1hbF9wbGFjZXM9MikpCisKKyAgICBkZWYgYmFja3dhcmRzKHNlbGYsIG9ybSk6CisKKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnQnVpbGQucHJvamVjdCcKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3Byb2plY3RfaWQnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknKSh0bz1vcm1bJ29ybS5Qcm9qZWN0J10sIG51bGw9VHJ1ZSkpCisKKyAgICAgICAgIyBVc2VyIGNob3NlIHRvIG5vdCBkZWFsIHdpdGggYmFja3dhcmRzIE5VTEwgaXNzdWVzIGZvciAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IHJldmVyc2UgdGhpcyBtaWdyYXRpb24uICdQcm9qZWN0LmJpdGJha2VfdmVyc2lvbicgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUHJvamVjdC5iaXRiYWtlX3ZlcnNpb24nCisgICAgICAgIGRiLmFsdGVyX2NvbHVtbih1J29ybV9wcm9qZWN0JywgJ2JpdGJha2VfdmVyc2lvbl9pZCcsIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScpKHRvPW9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10pKQorCisgICAgICAgICMgVXNlciBjaG9zZSB0byBub3QgZGVhbCB3aXRoIGJhY2t3YXJkcyBOVUxMIGlzc3VlcyBmb3IgJ1Byb2plY3QucmVsZWFzZScKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgcmV2ZXJzZSB0aGlzIG1pZ3JhdGlvbi4gJ1Byb2plY3QucmVsZWFzZScgYW5kIGl0cyB2YWx1ZXMgY2Fubm90IGJlIHJlc3RvcmVkLiIpCisgICAgICAgIAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBwcm92aWRlZCBoZXJlIHRvIGFpZCBpbiB3cml0aW5nIGEgY29ycmVjdCBtaWdyYXRpb24KKyAgICAgICAgIyBDaGFuZ2luZyBmaWVsZCAnUHJvamVjdC5yZWxlYXNlJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdyZWxlYXNlX2lkJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JykodG89b3JtWydvcm0uUmVsZWFzZSddKSkKKworICAgICAgICAjIENoYW5naW5nIGZpZWxkICdUYXNrLmNwdV91c2FnZScKKyAgICAgICAgZGIuYWx0ZXJfY29sdW1uKHUnb3JtX3Rhc2snLCAnY3B1X3VzYWdlJywgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJykobnVsbD1UcnVlLCBtYXhfZGlnaXRzPTYsIGRlY2ltYWxfcGxhY2VzPTIpKQorCisgICAgICAgICMgQ2hhbmdpbmcgZmllbGQgJ1Rhc2suZWxhcHNlZF90aW1lJworICAgICAgICBkYi5hbHRlcl9jb2x1bW4odSdvcm1fdGFzaycsICdlbGFwc2VkX3RpbWUnLCBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnKShudWxsPVRydWUsIG1heF9kaWdpdHM9NiwgZGVjaW1hbF9wbGFjZXM9MikpCisKKyAgICBtb2RlbHMgPSB7CisgICAgICAgIHUnb3JtLmJpdGJha2V2ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0JpdGJha2VWZXJzaW9uJ30sCisgICAgICAgICAgICAnYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzMyJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2dpdHVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5icmFuY2gnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICduYW1lJyksICgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJykpIiwgJ29iamVjdF9uYW1lJzogJ0JyYW5jaCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2J1aWxkX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2NvbXBsZXRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnY29va2VyX2xvZ19wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Ryb192ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdlcnJvcnNfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWFjaGluZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcyJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAnc3RhcnRlZF9vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAndGltZXNwZW50JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnd2FybmluZ3Nfbm8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIyX2F1dG9fX2FkZF9maWVsZF90YXJnZXRfdGFza19fYWRkX2ZpZWxkX2xheWVyX3ZlcnNpb25fbG9jYWxfcGF0aF9fZGVsX2YucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlYzM5MQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyMl9hdXRvX19hZGRfZmllbGRfdGFyZ2V0X3Rhc2tfX2FkZF9maWVsZF9sYXllcl92ZXJzaW9uX2xvY2FsX3BhdGhfX2RlbF9mLnB5CkBAIC0wLDAgKzEsMzQzIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnVGFyZ2V0LnRhc2snCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fdGFyZ2V0JywgJ3Rhc2snLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcpKG1heF9sZW5ndGg9MTAwLCBudWxsPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdUYXJnZXQudGFzaycKKyAgICAgICAgZGIuZGVsZXRlX2NvbHVtbih1J29ybV90YXJnZXQnLCAndGFzaycpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2Vycm9yc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICd0aW1lc3BlbnQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd3YXJuaW5nc19ubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjNfYXV0b19fZGVsX2ZpZWxkX2J1aWxkX3dhcm5pbmdzX25vX19kZWxfZmllbGRfYnVpbGRfZXJyb3JzX25vX19kZWxfZmllbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWIyMDBjCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDIzX2F1dG9fX2RlbF9maWVsZF9idWlsZF93YXJuaW5nc19ub19fZGVsX2ZpZWxkX2J1aWxkX2Vycm9yc19ub19fZGVsX2ZpZWwucHkKQEAgLTAsMCArMSwzNTMgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitmcm9tIHNvdXRoLnV0aWxzIGltcG9ydCBkYXRldGltZV91dGlscyBhcyBkYXRldGltZQorZnJvbSBzb3V0aC5kYiBpbXBvcnQgZGIKK2Zyb20gc291dGgudjIgaW1wb3J0IFNjaGVtYU1pZ3JhdGlvbgorZnJvbSBkamFuZ28uZGIgaW1wb3J0IG1vZGVscworCisKK2NsYXNzIE1pZ3JhdGlvbihTY2hlbWFNaWdyYXRpb24pOgorCisgICAgZGVmIGZvcndhcmRzKHNlbGYsIG9ybSk6CisgICAgICAgICMgRGVsZXRpbmcgZmllbGQgJ0J1aWxkLndhcm5pbmdzX25vJworICAgICAgICBkYi5kZWxldGVfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3dhcm5pbmdzX25vJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC5lcnJvcnNfbm8nCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAnZXJyb3JzX25vJykKKworICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdCdWlsZC50aW1lc3BlbnQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fYnVpbGQnLCAndGltZXNwZW50JykKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQud2FybmluZ3Nfbm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcpKGRlZmF1bHQ9MCksCisgICAgICAgICAgICAgICAgICAgICAga2VlcF9kZWZhdWx0PUZhbHNlKQorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdCdWlsZC5lcnJvcnNfbm8nCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fYnVpbGQnLCAnZXJyb3JzX25vJywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnKShkZWZhdWx0PTApLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAjIEFkZGluZyBmaWVsZCAnQnVpbGQudGltZXNwZW50JworICAgICAgICBkYi5hZGRfY29sdW1uKHUnb3JtX2J1aWxkJywgJ3RpbWVzcGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZignZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJykoZGVmYXVsdD0wKSwKKyAgICAgICAgICAgICAgICAgICAgICBrZWVwX2RlZmF1bHQ9RmFsc2UpCisKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBkYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93JzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1c2VyX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdwcm9qZWN0JywgJ2xheWVyY29tbWl0JyksKSIsICdvYmplY3RfbmFtZSc6ICdQcm9qZWN0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wdGlvbmFsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RUYXJnZXQnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0dmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFZhcmlhYmxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl92ZXJzaW9uJywgJ2ZpbGVfcGF0aCcsICdwYXRoZmxhZ3MnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlY2lwZSd9LAorICAgICAgICAgICAgJ2J1Z3RyYWNrZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdmaWxlX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdob21lcGFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyZWNpcGVfbGF5ZXJfdmVyc2lvbiciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdsaWNlbnNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncGF0aGZsYWdzJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZV9kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlY2lwZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidyX2RlcGVuZGVuY2llc19yZWNpcGUnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2UnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2JyYW5jaF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWRlZmF1bHRsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlRGVmYXVsdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1JlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10ifSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXQnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ltYWdlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdpc19pbWFnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdsaWNlbnNlX21hbmlmZXN0X3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfRmlsZSd9LAorICAgICAgICAgICAgJ2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkaXJlY3Rvcnlfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAnZ3JvdXAnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbm9kZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnb3duZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTI4J30pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwZXJtaXNzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzE2J30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnc3ltX3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidzeW1saW5rX3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbWFnZV9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbWFnZV9GaWxlJ30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTQnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW5zdGFsbGVkX3BhY2thZ2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFzayc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvcmRlcmluZyc6ICIoJ29yZGVyJywgJ3JlY2lwZScpIiwgJ3VuaXF1ZV90b2dldGhlcic6ICIoKCdidWlsZCcsICdyZWNpcGUnLCAndGFza19uYW1lJyksKSIsICdvYmplY3RfbmFtZSc6ICdUYXNrJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY3B1X3VzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICAnZGlza19pbyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2VsYXBzZWRfdGltZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xvZ2ZpbGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ29yZGVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3V0Y29tZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICctMSd9KSwKKyAgICAgICAgICAgICdwYXRoX3RvX3NzdGF0ZV9vYmonOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgJ3NjcmlwdF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc291cmNlX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX2NoZWNrc3VtJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9yZXN1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICd0YXNrX2V4ZWN1dGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ3Rhc2tfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnd29ya19kaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2tfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXNrX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfdGFzayciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50b2FzdGVyc2V0dGluZyc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUb2FzdGVyU2V0dGluZyd9LAorICAgICAgICAgICAgJ2hlbHB0ZXh0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZSd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZhcmlhYmxlX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjaGFuZ2VkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2h1bWFuX3JlYWRhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZV92YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS52YXJpYWJsZWhpc3RvcnknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGVIaXN0b3J5J30sCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3BlcmF0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzY0J30pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3ZoaXN0b3J5JyIsICd0byc6IHUib3JtWydvcm0uVmFyaWFibGUnXSJ9KQorICAgICAgICB9CisgICAgfQorCisgICAgY29tcGxldGVfYXBwcyA9IFsnb3JtJ10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNF9hdXRvX19hZGRfZmllbGRfcmVjaXBlX2lzX2ltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZjYwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjRfYXV0b19fYWRkX2ZpZWxkX3JlY2lwZV9pc19pbWFnZS5weQpAQCAtMCwwICsxLDMzOCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKworY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBkZWYgZm9yd2FyZHMoc2VsZiwgb3JtKToKKyAgICAgICAgIyBBZGRpbmcgZmllbGQgJ1JlY2lwZS5pc19pbWFnZScKKyAgICAgICAgZGIuYWRkX2NvbHVtbih1J29ybV9yZWNpcGUnLCAnaXNfaW1hZ2UnLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2YoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcpKGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdSZWNpcGUuaXNfaW1hZ2UnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcmVjaXBlJywgJ2lzX2ltYWdlJykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy8wMDI1X2F1dG9fX2FkZF9maWVsZF9wcm9qZWN0X2lzX2RlZmF1bHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc2OTkwZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNV9hdXRvX19hZGRfZmllbGRfcHJvamVjdF9pc19kZWZhdWx0LnB5CkBAIC0wLDAgKzEsMzQ2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorZnJvbSBzb3V0aC51dGlscyBpbXBvcnQgZGF0ZXRpbWVfdXRpbHMgYXMgZGF0ZXRpbWUKK2Zyb20gc291dGguZGIgaW1wb3J0IGRiCitmcm9tIHNvdXRoLnYyIGltcG9ydCBTY2hlbWFNaWdyYXRpb24KK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMKKworCitjbGFzcyBNaWdyYXRpb24oU2NoZW1hTWlncmF0aW9uKToKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIHdvcmstYXJvdW5kIGZvciBodHRwOi8vc291dGguYWVyYWNvZGUub3JnL3RpY2tldC81Nzg6CisgICAgICAgICMgU1FMaXRlIGJvb2xlYW4gZmllbGRzIGFyZW4ndCBzZXQgdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZQorICAgICAgICAjIChuZWVkcyB0byBiZSAwIG9yIDEsIHJhdGhlciB0aGFuIFRydWUgb3IgRmFsc2UpCisgICAgICAgIGRlZmF1bHQgPSBGYWxzZQorICAgICAgICBpZiBkYi5iYWNrZW5kX25hbWUgPT0gJ3NxbGl0ZTMnOgorICAgICAgICAgICBkZWZhdWx0ID0gMAorCisgICAgICAgICMgQWRkaW5nIGZpZWxkICdQcm9qZWN0LmlzX2RlZmF1bHQnCisgICAgICAgIGRiLmFkZF9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdpc19kZWZhdWx0JywKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdmKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnKShkZWZhdWx0PWRlZmF1bHQpLAorICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZGVmYXVsdD1GYWxzZSkKKworCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIERlbGV0aW5nIGZpZWxkICdQcm9qZWN0LmlzX2RlZmF1bHQnCisgICAgICAgIGRiLmRlbGV0ZV9jb2x1bW4odSdvcm1fcHJvamVjdCcsICdpc19kZWZhdWx0JykKKworCisgICAgbW9kZWxzID0geworICAgICAgICB1J29ybS5iaXRiYWtldmVyc2lvbic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCaXRiYWtlVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMid9KSwKKyAgICAgICAgICAgICdkaXJwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdnaXR1cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J3VuaXF1ZSc6ICdUcnVlJywgJ21heF9sZW5ndGgnOiAnMzInfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnJhbmNoJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAnbmFtZScpLCAoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKSIsICdvYmplY3RfbmFtZSc6ICdCcmFuY2gnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdCdWlsZCd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdidWlsZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdjb21wbGV0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2Nvb2tlcl9sb2dfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnfSksCisgICAgICAgICAgICAnZGlzdHJvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdkaXN0cm9fdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21hY2hpbmUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMid9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3N0YXJ0ZWRfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJ1aWxkYXJ0aWZhY3QnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGRBcnRpZmFjdCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmhlbHB0ZXh0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0hlbHBUZXh0J30sCisgICAgICAgICAgICAnYXJlYSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidoZWxwdGV4dF9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2tleSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksICgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXInfSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfaW5kZXhfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Zjc191cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3Nfd2ViX3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVyX3ZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJfVmVyc2lvbid9LAorICAgICAgICAgICAgJ2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCd9KSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9idWlsZCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInbGF5ZXJfdmVyc2lvbl9sYXllciciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyJ10ifSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xvY2FsX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicvJyIsICdtYXhfbGVuZ3RoJzogJzEwMjQnfSksCisgICAgICAgICAgICAncHJpb3JpdHknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfYnJhbmNoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkJyYW5jaCddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcnNvdXJjZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnc291cmNldHlwZScsICdhcGl1cmwnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyU291cmNlJ30sCisgICAgICAgICAgICAnYXBpdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbWF4X2xlbmd0aCc6ICcyNTUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzYzJ30pLAorICAgICAgICAgICAgJ3NvdXJjZXR5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJ2ZXJzaW9uZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclZlcnNpb25EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RlcGVuZGVuY2llcyciLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sb2dtZXNzYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0xvZ01lc3NhZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xldmVsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGluZW5vJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAncGF0aG5hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Rhc2snOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXNrJ10iLCAnbnVsbCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubWFjaGluZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ3VwX2lkJyksKSIsICdvYmplY3RfbmFtZSc6ICdNYWNoaW5lJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1BhY2thZ2UnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2luc3RhbGxlZF9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc4MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlY2lwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZXZpc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICczMicsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NlY3Rpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3BhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldCciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10iLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnBhY2thZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZGZpbGVsaXN0X3BhY2thZ2UnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3QnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CaXRiYWtlVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdjcmVhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3dfYWRkJzogJ1RydWUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfZGVmYXVsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzaG9ydF9kZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwZGF0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydhdXRvX25vdyc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXNlcl9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3RsYXllcic6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgncHJvamVjdCcsICdsYXllcmNvbW1pdCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnUHJvamVjdExheWVyJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyY29tbWl0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcHRpb25hbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHRhcmdldCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VGFyZ2V0J30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3Byb2plY3QnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdHZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Byb2plY3RWYXJpYWJsZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlY2lwZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfdmVyc2lvbicsICdmaWxlX3BhdGgnLCAncGF0aGZsYWdzJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWNpcGUnfSwKKyAgICAgICAgICAgICdidWd0cmFja2VyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZmlsZV9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaG9tZXBhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncmVjaXBlX2xheWVyX3ZlcnNpb24nIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbGljZW5zZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhdGhmbGFncyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGVfZGVwZW5kZW5jeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWNpcGVfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcF90eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncl9kZXBlbmRlbmNpZXNfcmVjaXBlJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdSZWxlYXNlJ30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSJ9KSwKKyAgICAgICAgICAgICdicmFuY2hfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VkZWZhdWx0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZURlZmF1bHRMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogIicnIiwgJ21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVsZWFzZWxheWVyc291cmNlcHJpb3JpdHknOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3JlbGVhc2UnLCAnbGF5ZXJfc291cmNlJyksKSIsICdvYmplY3RfbmFtZSc6ICdSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIn0pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0J30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbWFnZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnaXNfaW1hZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbGljZW5zZV9tYW5pZmVzdF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCcsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ZpbGUnfSwKKyAgICAgICAgICAgICdkaXJlY3RvcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGlyZWN0b3J5X3NldCciLCAnbnVsbCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5UYXJnZXRfRmlsZSddIn0pLAorICAgICAgICAgICAgJ2dyb3VwJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW5vZGV0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ293bmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEyOCd9KSwKKyAgICAgICAgICAgICdwYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncGVybWlzc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxNid9KSwKKyAgICAgICAgICAgICdzaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgJ3N5bV90YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInc3ltbGlua19zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXJnZXRfaW1hZ2VfZmlsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW1hZ2VfRmlsZSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU0J30pLAorICAgICAgICAgICAgJ2ZpbGVfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2luc3RhbGxlZF9wYWNrYWdlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9JbnN0YWxsZWRfUGFja2FnZSd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYWNrYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhc2snOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb3JkZXJpbmcnOiAiKCdvcmRlcicsICdyZWNpcGUnKSIsICd1bmlxdWVfdG9nZXRoZXInOiAiKCgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnVGFzayd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NwdV91c2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGVjaW1hbEZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJywgJ21heF9kaWdpdHMnOiAnOCcsICdkZWNpbWFsX3BsYWNlcyc6ICcyJ30pLAorICAgICAgICAgICAgJ2Rpc2tfaW8nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdlbGFwc2VkX3RpbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdsb2dmaWxlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI0MCd9KSwKKyAgICAgICAgICAgICdvcmRlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ291dGNvbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnLTEnfSksCisgICAgICAgICAgICAncGF0aF90b19zc3RhdGVfb2JqJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza3MnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgICdzY3JpcHRfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3NvdXJjZV91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NzdGF0ZV9jaGVja3N1bSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfcmVzdWx0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAndGFza19leGVjdXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICd0YXNrX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3dvcmtfZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFza19EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tfZGVwZW5kZW5jaWVzX3Rhc2snIiwgJ3RvJzogdSJvcm1bJ29ybS5UYXNrJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udG9hc3RlcnNldHRpbmcnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVG9hc3RlclNldHRpbmcnfSwKKyAgICAgICAgICAgICdoZWxwdGV4dCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVmFyaWFibGUnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2YXJpYWJsZV9idWlsZCciLCAndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnY2hhbmdlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQm9vbGVhbkZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdGYWxzZSd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdodW1hbl9yZWFkYWJsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndmFyaWFibGVfdmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udmFyaWFibGVoaXN0b3J5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlSGlzdG9yeSd9LAorICAgICAgICAgICAgJ2ZpbGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsaW5lX251bWJlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ29wZXJhdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc2NCd9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2YXJpYWJsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid2aGlzdG9yeSciLCAndG8nOiB1Im9ybVsnb3JtLlZhcmlhYmxlJ10ifSkKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbXBsZXRlX2FwcHMgPSBbJ29ybSddCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvMDAyNl9zZXRfZGVmYXVsdF9wcm9qZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDBhYmQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS9taWdyYXRpb25zLzAwMjZfc2V0X2RlZmF1bHRfcHJvamVjdC5weQpAQCAtMCwwICsxLDM3NCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gc291dGgudXRpbHMgaW1wb3J0IGRhdGV0aW1lX3V0aWxzIGFzIGRhdGV0aW1lCitmcm9tIHNvdXRoLmRiIGltcG9ydCBkYgorZnJvbSBzb3V0aC52MiBpbXBvcnQgU2NoZW1hTWlncmF0aW9uCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgbW9kZWxzCisKKyMgZGF0YS1vbmx5IG1pZ3JhdGlvbiB0byBzZXQgdGhlIGlzX2RlZmF1bHQgZmllbGQgY29ycmVjdGx5CisjIGFjcm9zcyBhbGwgcHJvamVjdHMsIHNvIGl0IGhhcyB0aGUgY29ycmVjdCB2YWx1ZSBvbiBhIHNpbmdsZQorIyByZWNvcmQgb25seTsgdGhpcyB3aWxsIGFkZCBvciBhbWVuZCBkZWZhdWx0IHByb2plY3QgKG1hcmtlZCB3aXRoCisjIGlzX2RlZmF1bHQgPSBUcnVlKQorY2xhc3MgTWlncmF0aW9uKFNjaGVtYU1pZ3JhdGlvbik6CisKKyAgICBub19kcnlfcnVuID0gVHJ1ZQorCisgICAgIyB3b3JrLWFyb3VuZCBmb3IgaHR0cDovL3NvdXRoLmFlcmFjb2RlLm9yZy90aWNrZXQvNTc4OgorICAgICMgU1FMaXRlIGJvb2xlYW4gZmllbGRzIGFyZW4ndCBzZXQgdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZQorICAgICMgd2hlbiBhZGRlZCB0byBleGlzdGluZyByZWNvcmRzICh2YWx1ZSBuZWVkcyB0byBiZSAwIG9yIDEsIHJhdGhlcgorICAgICMgdGhhbiBUcnVlIG9yIEZhbHNlKSwgc28gbWFudWFsbHkgdXBkYXRlIHRoYXQgZmllbGQgZm9yIGFsbAorICAgICMgZXhpc3RpbmcgcmVjb3JkcworICAgIGRlZiBfc3FsaXRlX3VwZGF0ZV9hbGxfcHJvamVjdHNfaXNfZGVmYXVsdChzZWxmLCBvcm0pOgorICAgICAgICBpZiBkYi5iYWNrZW5kX25hbWUgPT0gJ3NxbGl0ZTMnOgorICAgICAgICAgICAgZm9yIHByb2plY3QgaW4gb3JtLlByb2plY3Qub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgICAgICBwcm9qZWN0LmlzX2RlZmF1bHQgPSAwCisgICAgICAgICAgICAgICAgcHJvamVjdC5zYXZlKCkKKworICAgIGRlZiBmb3J3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIGZpeCBpc19kZWZhdWx0IGZpZWxkCisgICAgICAgIHNlbGYuX3NxbGl0ZV91cGRhdGVfYWxsX3Byb2plY3RzX2lzX2RlZmF1bHQob3JtKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBvciBtb2RpZnkgdGhlIGRlZmF1bHQgcHJvamVjdAorICAgICAgICBwcm9qZWN0ID0gTm9uZQorCisgICAgICAgICMgY2hlY2sgZm9yIGV4aXN0aW5nIGRlZmF1bHQgcHJvamVjdCB3aXRoIElEIDAgd2hpY2ggaGFzCisgICAgICAgICMgYWxyZWFkeSBiZWVuIGFkZGVkIGluIGNvZGUKKyAgICAgICAgcHJvamVjdHMgPSBvcm0uUHJvamVjdC5vYmplY3RzLmZpbHRlcihwayA9IDApCisKKyAgICAgICAgaWYgbGVuKHByb2plY3RzKSA9PSAxOgorICAgICAgICAgICAgcHJvamVjdCA9IHByb2plY3RzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGNyZWF0ZSBkZWZhdWx0IHByb2plY3QKKyAgICAgICAgICAgIG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ29tbWFuZCBsaW5lIGJ1aWxkcyIsCisgICAgICAgICAgICAgICAgInNob3J0X2Rlc2NyaXB0aW9uIjogIlByb2plY3QgZm9yIGJ1aWxkcyBzdGFydGVkIG91dHNpZGUgVG9hc3RlciIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb2plY3QgPSBvcm0uUHJvamVjdC5vYmplY3RzLmNyZWF0ZSgqKm9wdGlvbnMpCisKKyAgICAgICAgcHJvamVjdC5pc19kZWZhdWx0ID0gVHJ1ZQorICAgICAgICBwcm9qZWN0LnNhdmUoKQorCisgICAgZGVmIGJhY2t3YXJkcyhzZWxmLCBvcm0pOgorICAgICAgICAjIGRvbid0IGRvIGFueXRoaW5nIHdoZW4gcmV2ZXJzaW5nIHRoaXMgbWlncmF0aW9uLCBhcyB3ZSBjYW4gc2FmZWx5CisgICAgICAgICMga2VlcCBhbnkgZ2VuZXJhdGVkIGRlZmF1bHQgcHJvamVjdCB3aGljaCBoYXMgYnVpbGRzIGF0dGFjaGVkOworICAgICAgICAjIGl0J3MganVzdCB0aGF0IHRoZSBvbGQgY29kZSB3b24ndCB1c2UgdGhhdCBwcm9qZWN0IGFzIHRoZQorICAgICAgICAjIGNvbnRhaW5lciBmb3IgYW55IG5ldyBidWlsZHMsIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbiBJRCBvZiAwCisgICAgICAgIHBhc3MKKworICAgIG1vZGVscyA9IHsKKyAgICAgICAgdSdvcm0uYml0YmFrZXZlcnNpb24nOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQml0YmFrZVZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInfSksCisgICAgICAgICAgICAnZGlycGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnZ2l0dXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeyd1bmlxdWUnOiAnVHJ1ZScsICdtYXhfbGVuZ3RoJzogJzMyJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmJyYW5jaCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeyd1bmlxdWVfdG9nZXRoZXInOiAiKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwgKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSkiLCAnb2JqZWN0X25hbWUnOiAnQnJhbmNoJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdUcnVlJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJ30pLAorICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzUwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0uYnVpbGQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnQnVpbGQnfSwKKyAgICAgICAgICAgICdiaXRiYWtlX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnfSksCisgICAgICAgICAgICAnYnVpbGRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnY29tcGxldGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdjb29rZXJfbG9nX3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJ30pLAorICAgICAgICAgICAgJ2Rpc3Rybyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZGlzdHJvX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdtYWNoaW5lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzInfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICdzdGFydGVkX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHt9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5idWlsZGFydGlmYWN0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ0J1aWxkQXJ0aWZhY3QnfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJ1aWxkJ10ifSksCisgICAgICAgICAgICAnZmlsZV9uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnZmlsZV9zaXplJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5oZWxwdGV4dCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdIZWxwVGV4dCd9LAorICAgICAgICAgICAgJ2FyZWEnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInaGVscHRleHRfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdrZXknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3RleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCAoJ2xheWVyX3NvdXJjZScsICduYW1lJykpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyJ30sCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX2luZGV4X3VybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAnc3VtbWFyeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9kYXRlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cF9pZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd2Y3NfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl9maWxlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl90cmVlX2Jhc2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzIwMCcsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmNzX3dlYl91cmwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlVSTEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjAwJywgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5sYXllcl92ZXJzaW9uJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdsYXllcl9zb3VyY2UnLCAndXBfaWQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ0xheWVyX1ZlcnNpb24nfSwKKyAgICAgICAgICAgICdicmFuY2gnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnfSksCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fYnVpbGQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjb21taXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ2RpcnBhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdtYXhfbGVuZ3RoJzogJzI1NScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2xheWVyX3ZlcnNpb25fbGF5ZXInIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllciddIn0pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsb2NhbF9wYXRoJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInLyciLCAnbWF4X2xlbmd0aCc6ICcxMDI0J30pLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5Qcm9qZWN0J10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2JyYW5jaCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5CcmFuY2gnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubGF5ZXJzb3VyY2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3NvdXJjZXR5cGUnLCAnYXBpdXJsJyksKSIsICdvYmplY3RfbmFtZSc6ICdMYXllclNvdXJjZSd9LAorICAgICAgICAgICAgJ2FwaXVybCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ21heF9sZW5ndGgnOiAnMjU1JywgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICc2Myd9KSwKKyAgICAgICAgICAgICdzb3VyY2V0eXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwge30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLmxheWVydmVyc2lvbmRlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInZGVwZW5kZWVzJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl9zb3VyY2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidkZXBlbmRlbmNpZXMnIiwgJ3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ubG9nbWVzc2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdMb2dNZXNzYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsZXZlbCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpbmVubyc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjQwJ30pLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd0YXNrJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFzayddIiwgJ251bGwnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLm1hY2hpbmUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpLCkiLCAnb2JqZWN0X25hbWUnOiAnTWFjaGluZSd9LAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAndG8nOiB1Im9ybVsnb3JtLkxheWVyU291cmNlJ10iLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5MYXllcl9WZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAndXBfZGF0ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAndXBfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnTm9uZScsICdudWxsJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQYWNrYWdlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdpbnN0YWxsZWRfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnODAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICduYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWNpcGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmV2aXNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMzInLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzZWN0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzgwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3N1bW1hcnknOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9EZXBlbmRlbmN5J30sCisgICAgICAgICAgICAnZGVwX3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICAnZGVwZW5kc19vbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIidwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnIiwgJ3RvJzogdSJvcm1bJ29ybS5QYWNrYWdlJ10ifSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIiwgJ251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wYWNrYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUGFja2FnZV9GaWxlJ30sCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3BhY2thZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICInYnVpbGRmaWxlbGlzdF9wYWNrYWdlJyIsICd0byc6IHUib3JtWydvcm0uUGFja2FnZSddIn0pLAorICAgICAgICAgICAgJ3BhdGgnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucHJvamVjdCc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0J30sCisgICAgICAgICAgICAnYml0YmFrZV92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQml0YmFrZVZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnY3JlYXRlZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRGF0ZVRpbWVGaWVsZCcsIFtdLCB7J2F1dG9fbm93X2FkZCc6ICdUcnVlJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2RlZmF1bHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncmVsZWFzZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlJlbGVhc2UnXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2hvcnRfZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICd1cGRhdGVkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EYXRlVGltZUZpZWxkJywgW10sIHsnYXV0b19ub3cnOiAnVHJ1ZScsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VzZXJfaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5wcm9qZWN0bGF5ZXInOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ3Byb2plY3QnLCAnbGF5ZXJjb21taXQnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Byb2plY3RMYXllcid9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcmNvbW1pdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkxheWVyX1ZlcnNpb24nXSIsICdudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnb3B0aW9uYWwnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R0YXJnZXQnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUHJvamVjdFRhcmdldCd9LAorICAgICAgICAgICAgdSdpZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQXV0b0ZpZWxkJywgW10sIHsncHJpbWFyeV9rZXknOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwcm9qZWN0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUHJvamVjdCddIn0pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnByb2plY3R2YXJpYWJsZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdQcm9qZWN0VmFyaWFibGUnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAncHJvamVjdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlByb2plY3QnXSJ9KSwKKyAgICAgICAgICAgICd2YWx1ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVGV4dEZpZWxkJywgW10sIHsnYmxhbmsnOiAnVHJ1ZSd9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWNpcGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2xheWVyX3ZlcnNpb24nLCAnZmlsZV9wYXRoJywgJ3BhdGhmbGFncycpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVjaXBlJ30sCisgICAgICAgICAgICAnYnVndHJhY2tlcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuVVJMRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzIwMCcsICdibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pLAorICAgICAgICAgICAgJ2hvbWVwYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5VUkxGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xheWVyX3NvdXJjZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsnZGVmYXVsdCc6ICdOb25lJywgJ3RvJzogdSJvcm1bJ29ybS5MYXllclNvdXJjZSddIiwgJ251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JlY2lwZV9sYXllcl92ZXJzaW9uJyIsICd0byc6IHUib3JtWydvcm0uTGF5ZXJfVmVyc2lvbiddIn0pLAorICAgICAgICAgICAgJ2xpY2Vuc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdwYXRoZmxhZ3MnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc2VjdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzdW1tYXJ5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2RhdGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRhdGVUaW1lRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3VwX2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ05vbmUnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0ucmVjaXBlX2RlcGVuZGVuY3knOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVjaXBlX0RlcGVuZGVuY3knfSwKKyAgICAgICAgICAgICdkZXBfdHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdkZXBlbmRzX29uJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnIiwgJ3RvJzogdSJvcm1bJ29ybS5SZWNpcGUnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3JfZGVwZW5kZW5jaWVzX3JlY2lwZSciLCAndG8nOiB1Im9ybVsnb3JtLlJlY2lwZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2UnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnUmVsZWFzZSd9LAorICAgICAgICAgICAgJ2JpdGJha2VfdmVyc2lvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLkJpdGJha2VWZXJzaW9uJ10ifSksCisgICAgICAgICAgICAnYnJhbmNoX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAiJyciLCAnbWF4X2xlbmd0aCc6ICc1MCd9KSwKKyAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnfSksCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsndW5pcXVlJzogJ1RydWUnLCAnbWF4X2xlbmd0aCc6ICczMid9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS5yZWxlYXNlZGVmYXVsdGxheWVyJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1JlbGVhc2VEZWZhdWx0TGF5ZXInfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICInJyIsICdtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICdyZWxlYXNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uUmVsZWFzZSddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnJlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J3VuaXF1ZV90b2dldGhlcic6ICIoKCdyZWxlYXNlJywgJ2xheWVyX3NvdXJjZScpLCkiLCAnb2JqZWN0X25hbWUnOiAnUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHknfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGF5ZXJfc291cmNlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uTGF5ZXJTb3VyY2UnXSJ9KSwKKyAgICAgICAgICAgICdwcmlvcml0eSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3JlbGVhc2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5SZWxlYXNlJ10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldCd9LAorICAgICAgICAgICAgJ2J1aWxkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnaW1hZ2Vfc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ2lzX2ltYWdlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5Cb29sZWFuRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJ0ZhbHNlJ30pLAorICAgICAgICAgICAgJ2xpY2Vuc2VfbWFuaWZlc3RfcGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICc1MDAnLCAnbnVsbCc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMDAnLCAnbnVsbCc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9maWxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RhcmdldF9GaWxlJ30sCisgICAgICAgICAgICAnZGlyZWN0b3J5JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ2RpcmVjdG9yeV9zZXQnIiwgJ251bGwnOiAnVHJ1ZScsICd0byc6IHUib3JtWydvcm0uVGFyZ2V0X0ZpbGUnXSJ9KSwKKyAgICAgICAgICAgICdncm91cCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2lub2RldHlwZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdvd25lcic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcxMjgnfSksCisgICAgICAgICAgICAncGF0aCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3Blcm1pc3Npb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTYnfSksCisgICAgICAgICAgICAnc2l6ZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHt9KSwKKyAgICAgICAgICAgICdzeW1fdGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3N5bWxpbmtfc2V0JyIsICdudWxsJzogJ1RydWUnLCAndG8nOiB1Im9ybVsnb3JtLlRhcmdldF9GaWxlJ10ifSksCisgICAgICAgICAgICAndGFyZ2V0JzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeyd0byc6IHUib3JtWydvcm0uVGFyZ2V0J10ifSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFyZ2V0X2ltYWdlX2ZpbGUnOiB7CisgICAgICAgICAgICAnTWV0YSc6IHsnb2JqZWN0X25hbWUnOiAnVGFyZ2V0X0ltYWdlX0ZpbGUnfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NCd9KSwKKyAgICAgICAgICAgICdmaWxlX3NpemUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3RhcmdldCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsndG8nOiB1Im9ybVsnb3JtLlRhcmdldCddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2UnfSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAncGFja2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIididWlsZHRhcmdldGxpc3RfcGFja2FnZSciLCAndG8nOiB1Im9ybVsnb3JtLlBhY2thZ2UnXSJ9KSwKKyAgICAgICAgICAgICd0YXJnZXQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3RvJzogdSJvcm1bJ29ybS5UYXJnZXQnXSJ9KQorICAgICAgICB9LAorICAgICAgICB1J29ybS50YXNrJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29yZGVyaW5nJzogIignb3JkZXInLCAncmVjaXBlJykiLCAndW5pcXVlX3RvZ2V0aGVyJzogIigoJ2J1aWxkJywgJ3JlY2lwZScsICd0YXNrX25hbWUnKSwpIiwgJ29iamVjdF9uYW1lJzogJ1Rhc2snfSwKKyAgICAgICAgICAgICdidWlsZCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2J1aWxkJyIsICd0byc6IHUib3JtWydvcm0uQnVpbGQnXSJ9KSwKKyAgICAgICAgICAgICdjcHVfdXNhZ2UnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkRlY2ltYWxGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZScsICdtYXhfZGlnaXRzJzogJzgnLCAnZGVjaW1hbF9wbGFjZXMnOiAnMid9KSwKKyAgICAgICAgICAgICdkaXNrX2lvJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnfSksCisgICAgICAgICAgICAnZWxhcHNlZF90aW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5EZWNpbWFsRmllbGQnLCBbXSwgeydudWxsJzogJ1RydWUnLCAnbWF4X2RpZ2l0cyc6ICc4JywgJ2RlY2ltYWxfcGxhY2VzJzogJzInfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ2xpbmVfbnVtYmVyJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJzAnfSksCisgICAgICAgICAgICAnbG9nZmlsZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnbWVzc2FnZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNDAnfSksCisgICAgICAgICAgICAnb3JkZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvdXRjb21lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5JbnRlZ2VyRmllbGQnLCBbXSwgeydkZWZhdWx0JzogJy0xJ30pLAorICAgICAgICAgICAgJ3BhdGhfdG9fc3N0YXRlX29iaic6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAncmVjaXBlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5yZWxhdGVkLkZvcmVpZ25LZXknLCBbXSwgeydyZWxhdGVkX25hbWUnOiAiJ3Rhc2tzJyIsICd0byc6IHUib3JtWydvcm0uUmVjaXBlJ10ifSksCisgICAgICAgICAgICAnc2NyaXB0X3R5cGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnMCd9KSwKKyAgICAgICAgICAgICdzb3VyY2VfdXJsJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5GaWxlUGF0aEZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyNTUnLCAnYmxhbmsnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdzc3RhdGVfY2hlY2tzdW0nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJywgJ2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnc3N0YXRlX3Jlc3VsdCc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuSW50ZWdlckZpZWxkJywgW10sIHsnZGVmYXVsdCc6ICcwJ30pLAorICAgICAgICAgICAgJ3Rhc2tfZXhlY3V0ZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAndGFza19uYW1lJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5DaGFyRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzEwMCd9KSwKKyAgICAgICAgICAgICd3b3JrX2RpcmVjdG9yeSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuRmlsZVBhdGhGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1JywgJ2JsYW5rJzogJ1RydWUnfSkKKyAgICAgICAgfSwKKyAgICAgICAgdSdvcm0udGFza19kZXBlbmRlbmN5JzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1Rhc2tfRGVwZW5kZW5jeSd9LAorICAgICAgICAgICAgJ2RlcGVuZHNfb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndGFza19kZXBlbmRlbmNpZXNfZGVwZW5kcyciLCAndG8nOiB1Im9ybVsnb3JtLlRhc2snXSJ9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAndGFzayc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMucmVsYXRlZC5Gb3JlaWduS2V5JywgW10sIHsncmVsYXRlZF9uYW1lJzogIid0YXNrX2RlcGVuZGVuY2llc190YXNrJyIsICd0byc6IHUib3JtWydvcm0uVGFzayddIn0pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnRvYXN0ZXJzZXR0aW5nJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1RvYXN0ZXJTZXR0aW5nJ30sCisgICAgICAgICAgICAnaGVscHRleHQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7fSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjMnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMjU1J30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlJzogeworICAgICAgICAgICAgJ01ldGEnOiB7J29iamVjdF9uYW1lJzogJ1ZhcmlhYmxlJ30sCisgICAgICAgICAgICAnYnVpbGQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmFyaWFibGVfYnVpbGQnIiwgJ3RvJzogdSJvcm1bJ29ybS5CdWlsZCddIn0pLAorICAgICAgICAgICAgJ2NoYW5nZWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkJvb2xlYW5GaWVsZCcsIFtdLCB7J2RlZmF1bHQnOiAnRmFsc2UnfSksCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAnaHVtYW5fcmVhZGFibGVfbmFtZSc6ICgnZGphbmdvLmRiLm1vZGVscy5maWVsZHMuQ2hhckZpZWxkJywgW10sIHsnbWF4X2xlbmd0aCc6ICcyMDAnfSksCisgICAgICAgICAgICB1J2lkJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5BdXRvRmllbGQnLCBbXSwgeydwcmltYXJ5X2tleSc6ICdUcnVlJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnMTAwJ30pLAorICAgICAgICAgICAgJ3ZhcmlhYmxlX3ZhbHVlJzogKCdkamFuZ28uZGIubW9kZWxzLmZpZWxkcy5UZXh0RmllbGQnLCBbXSwgeydibGFuayc6ICdUcnVlJ30pCisgICAgICAgIH0sCisgICAgICAgIHUnb3JtLnZhcmlhYmxlaGlzdG9yeSc6IHsKKyAgICAgICAgICAgICdNZXRhJzogeydvYmplY3RfbmFtZSc6ICdWYXJpYWJsZUhpc3RvcnknfSwKKyAgICAgICAgICAgICdmaWxlX25hbWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkZpbGVQYXRoRmllbGQnLCBbXSwgeydtYXhfbGVuZ3RoJzogJzI1NSd9KSwKKyAgICAgICAgICAgIHUnaWQnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkF1dG9GaWVsZCcsIFtdLCB7J3ByaW1hcnlfa2V5JzogJ1RydWUnfSksCisgICAgICAgICAgICAnbGluZV9udW1iZXInOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkludGVnZXJGaWVsZCcsIFtdLCB7J251bGwnOiAnVHJ1ZSd9KSwKKyAgICAgICAgICAgICdvcGVyYXRpb24nOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLkNoYXJGaWVsZCcsIFtdLCB7J21heF9sZW5ndGgnOiAnNjQnfSksCisgICAgICAgICAgICAndmFsdWUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLlRleHRGaWVsZCcsIFtdLCB7J2JsYW5rJzogJ1RydWUnfSksCisgICAgICAgICAgICAndmFyaWFibGUnOiAoJ2RqYW5nby5kYi5tb2RlbHMuZmllbGRzLnJlbGF0ZWQuRm9yZWlnbktleScsIFtdLCB7J3JlbGF0ZWRfbmFtZSc6ICIndmhpc3RvcnknIiwgJ3RvJzogdSJvcm1bJ29ybS5WYXJpYWJsZSddIn0pCisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb21wbGV0ZV9hcHBzID0gWydvcm0nXQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbWlncmF0aW9ucy9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21pZ3JhdGlvbnMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21vZGVscy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvb3JtL21vZGVscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQyZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vbW9kZWxzLnB5CkBAIC0wLDAgKzEsMTIzMyBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2Zyb20gZGphbmdvLmRiIGltcG9ydCBtb2RlbHMsIEludGVncml0eUVycm9yCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEYsIFEsIEF2ZywgTWF4Citmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgdGltZXpvbmUKKworZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKKworZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgdmFsaWRhdG9ycworZnJvbSBkamFuZ28uY29uZiBpbXBvcnQgc2V0dGluZ3MKK2ltcG9ydCBkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMKKworCitpbXBvcnQgbG9nZ2luZworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisKK2NsYXNzIEdpdFVSTFZhbGlkYXRvcih2YWxpZGF0b3JzLlVSTFZhbGlkYXRvcik6CisgICAgaW1wb3J0IHJlCisgICAgcmVnZXggPSByZS5jb21waWxlKAorICAgICAgICByJ14oPzpzc2h8Z2l0fGh0dHB8ZnRwKXM/Oi8vJyAgIyBodHRwOi8vIG9yIGh0dHBzOi8vCisgICAgICAgIHInKD86KD86W0EtWjAtOV0oPzpbQS1aMC05LV17MCw2MX1bQS1aMC05XSk/XC4pKyg/OltBLVpdezIsNn1cLj98W0EtWjAtOS1dezIsfVwuPyl8JyAgIyBkb21haW4uLi4KKyAgICAgICAgcidsb2NhbGhvc3R8JyAgIyBsb2NhbGhvc3QuLi4KKyAgICAgICAgcidcZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9fCcgICMgLi4ub3IgaXB2NAorICAgICAgICByJ1xbP1tBLUYwLTldKjpbQS1GMC05Ol0rXF0/KScgICMgLi4ub3IgaXB2NgorICAgICAgICByJyg/OjpcZCspPycgICMgb3B0aW9uYWwgcG9ydAorICAgICAgICByJyg/Oi8/fFsvP11cUyspJCcsIHJlLklHTk9SRUNBU0UpCisKK2RlZiBHaXRVUkxGaWVsZCgqKmt3YXJncyk6CisgICAgciA9IG1vZGVscy5VUkxGaWVsZCgqKmt3YXJncykKKyAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHIudmFsaWRhdG9ycykpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHIudmFsaWRhdG9yc1tpXSwgdmFsaWRhdG9ycy5VUkxWYWxpZGF0b3IpOgorICAgICAgICAgICAgci52YWxpZGF0b3JzW2ldID0gR2l0VVJMVmFsaWRhdG9yKCkKKyAgICByZXR1cm4gcgorCisKK2NsYXNzIFRvYXN0ZXJTZXR0aW5nKG1vZGVscy5Nb2RlbCk6CisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD02MykKKyAgICBoZWxwdGV4dCA9IG1vZGVscy5UZXh0RmllbGQoKQorICAgIHZhbHVlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJTZXR0aW5nICVzID0gJXMiICUgKHNlbGYubmFtZSwgc2VsZi52YWx1ZSkKKworY2xhc3MgUHJvamVjdE1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIGRlZiBjcmVhdGVfcHJvamVjdChzZWxmLCBuYW1lLCByZWxlYXNlKToKKyAgICAgICAgaWYgcmVsZWFzZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IHJlbGVhc2UuYml0YmFrZV92ZXJzaW9uLCByZWxlYXNlID0gcmVsZWFzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaiA9IHNlbGYubW9kZWwobmFtZSA9IG5hbWUsIGJpdGJha2VfdmVyc2lvbiA9IE5vbmUsIHJlbGVhc2UgPSBOb25lKQorCisgICAgICAgIHByai5zYXZlKCkKKworICAgICAgICBmb3IgZGVmYXVsdGNvbmYgaW4gVG9hc3RlclNldHRpbmcub2JqZWN0cy5maWx0ZXIobmFtZV9fc3RhcnRzd2l0aD0iREVGQ09ORl8iKToKKyAgICAgICAgICAgIG5hbWUgPSBkZWZhdWx0Y29uZi5uYW1lWzg6XQorICAgICAgICAgICAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLAorICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdGNvbmYudmFsdWUpCisKKyAgICAgICAgaWYgcmVsZWFzZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHByagorCisgICAgICAgIGZvciByZGwgaW4gcmVsZWFzZS5yZWxlYXNlZGVmYXVsdGxheWVyX3NldC5hbGwoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIobGF5ZXJfX25hbWUgPSByZGwubGF5ZXJfbmFtZSwgdXBfYnJhbmNoX19uYW1lID0gcmVsZWFzZS5icmFuY2hfbmFtZSlbMF0uZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShwcmopWzBdCisgICAgICAgICAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKCBwcm9qZWN0ID0gcHJqLAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQgPSBsdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gRmFsc2UgKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBtYXkgaGF2ZSBubyB2YWxpZCBsYXllciB2ZXJzaW9uIG9iamVjdHMsIGFuZCB0aGF0J3Mgb2sKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHByagorCisgICAgZGVmIGNyZWF0ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgY2FsbCB0byBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlLiBVc2UgUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCkgdG8gY3JlYXRlIGEgcHJvamVjdCIpCisKKyAgICAjIHJldHVybiBzaW5nbGUgb2JqZWN0IHdpdGggaXNfZGVmYXVsdCA9IFRydWUKKyAgICBkZWYgZ2V0X2RlZmF1bHRfcHJvamVjdChzZWxmKToKKyAgICAgICAgcHJvamVjdHMgPSBzdXBlcihQcm9qZWN0TWFuYWdlciwgc2VsZikuZmlsdGVyKGlzX2RlZmF1bHQgPSBUcnVlKQorICAgICAgICBpZiBsZW4ocHJvamVjdHMpID4gMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbXVsdGlwbGUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgcHJvamVjdHMgKGkuZS4gd2l0aCBpc19kZWZhdWx0PVRydWUpIikKKyAgICAgICAgZWxpZiBsZW4ocHJvamVjdHMpIDwgMToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IHByb2plY3QgZGF0YTogbm8gZGVmYXVsdCBwcm9qZWN0IGZvdW5kIikKKyAgICAgICAgcmV0dXJuIHByb2plY3RzWzBdCisKK2NsYXNzIFByb2plY3QobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAnc2hvcnRfZGVzY3JpcHRpb24nLCAncmVsZWFzZV9fbmFtZScsICdyZWxlYXNlX19icmFuY2hfbmFtZSddCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgc2hvcnRfZGVzY3JpcHRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAsIGJsYW5rPVRydWUpCisgICAgYml0YmFrZV92ZXJzaW9uID0gbW9kZWxzLkZvcmVpZ25LZXkoJ0JpdGJha2VWZXJzaW9uJywgbnVsbD1UcnVlKQorICAgIHJlbGVhc2UgICAgID0gbW9kZWxzLkZvcmVpZ25LZXkoIlJlbGVhc2UiLCBudWxsPVRydWUpCisgICAgY3JlYXRlZCAgICAgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChhdXRvX25vd19hZGQgPSBUcnVlKQorICAgIHVwZGF0ZWQgICAgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoYXV0b19ub3cgPSBUcnVlKQorICAgICMgVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2s7IHNpbmNlIFRvYXN0ZXIgaGFzIG5vICJVc2VyIiBtb2RlbCBhdmFpbGFibGUgd2hlbgorICAgICMgcnVubmluZyBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBjYW4ndCByZWZlcmVuY2UgdGhlIGZpZWxkIGhlcmUgZGlyZWN0bHkKKyAgICAjIEluc3RlYWQsIHdlIGtlZXAgYSBwb3NzaWJsZSBudWxsIHJlZmVyZW5jZSB0byB0aGUgVXNlciBpZCwgYXMgbm90IHRvIGZvcmNlCisgICAgIyBoYXJkIGxpbmtzIHRvIHBvc3NpYmx5IG1pc3NpbmcgbW9kZWxzCisgICAgdXNlcl9pZCAgICAgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGwgPSBUcnVlKQorICAgIG9iamVjdHMgICAgID0gUHJvamVjdE1hbmFnZXIoKQorCisgICAgIyBzZXQgdG8gVHJ1ZSBmb3IgdGhlIHByb2plY3Qgd2hpY2ggaXMgdGhlIGRlZmF1bHQgY29udGFpbmVyCisgICAgIyBmb3IgYnVpbGRzIGluaXRpYXRlZCBieSB0aGUgY29tbWFuZCBsaW5lIGV0Yy4KKyAgICBpc19kZWZhdWx0ICA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IEZhbHNlKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzIChSZWxlYXNlICVzLCBCQlYgJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYucmVsZWFzZSwgc2VsZi5iaXRiYWtlX3ZlcnNpb24pCisKKyAgICBkZWYgZ2V0X2N1cnJlbnRfbWFjaGluZV9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWUKKyAgICAgICAgZXhjZXB0IChQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAiTm9uZSIgKTsKKworICAgIGRlZiBnZXRfbnVtYmVyX29mX2J1aWxkcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxlbihCdWlsZC5vYmplY3RzLmZpbHRlciggcHJvamVjdCA9IHNlbGYuaWQgKSkKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oIDAgKQorCisgICAgZGVmIGdldF9sYXN0X2J1aWxkX2lkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoIHByb2plY3QgPSBzZWxmLmlkICkub3JkZXJfYnkoJy1jb21wbGV0ZWRfb24nKVswXS5pZAorICAgICAgICBleGNlcHQgKEJ1aWxkLkRvZXNOb3RFeGlzdCxJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiggLTEgKQorCisgICAgZGVmIGdldF9sYXN0X291dGNvbWUoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAiIiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBCdWlsZC5vYmplY3RzLmZpbHRlciggaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkIClbIDAgXS5vdXRjb21lCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfdGFyZ2V0KHNlbGYpOgorICAgICAgICBidWlsZF9pZCA9IHNlbGYuZ2V0X2xhc3RfYnVpbGRfaWQKKyAgICAgICAgaWYgKC0xID09IGJ1aWxkX2lkKToKKyAgICAgICAgICAgIHJldHVybiggIiIgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRfaWQpWzBdLnRhcmdldAorICAgICAgICBleGNlcHQgKFRhcmdldC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oICJub3RfZm91bmQiICkKKworICAgIGRlZiBnZXRfbGFzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAwICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gYnVpbGRfaWQpWyAwIF0uZXJyb3JzLmNvdW50KCkKKyAgICAgICAgZXhjZXB0IChCdWlsZC5Eb2VzTm90RXhpc3QsSW5kZXhFcnJvcik6CisgICAgICAgICAgICByZXR1cm4oICJub3RfZm91bmQiICkKKworICAgIGRlZiBnZXRfbGFzdF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgYnVpbGRfaWQgPSBzZWxmLmdldF9sYXN0X2J1aWxkX2lkCisgICAgICAgIGlmICgtMSA9PSBidWlsZF9pZCk6CisgICAgICAgICAgICByZXR1cm4oIDAgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gQnVpbGQub2JqZWN0cy5maWx0ZXIoaWQgPSBidWlsZF9pZClbIDAgXS53YXJuaW5ncy5jb3VudCgpCisgICAgICAgIGV4Y2VwdCAoQnVpbGQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICBkZWYgZ2V0X2xhc3RfaW1nZmlsZXMoc2VsZik6CisgICAgICAgIGJ1aWxkX2lkID0gc2VsZi5nZXRfbGFzdF9idWlsZF9pZAorICAgICAgICBpZiAoLTEgPT0gYnVpbGRfaWQpOgorICAgICAgICAgICAgcmV0dXJuKCAiIiApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkX2lkLCB2YXJpYWJsZV9uYW1lID0gIklNQUdFX0ZTVFlQRVMiKVsgMCBdLnZhcmlhYmxlX3ZhbHVlCisgICAgICAgIGV4Y2VwdCAoVmFyaWFibGUuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcmV0dXJuKCAibm90X2ZvdW5kIiApCisKKyAgICAjIHJldHVybnMgYSBxdWVyeXNldCBvZiBjb21wYXRpYmxlIGxheWVycyBmb3IgYSBwcm9qZWN0CisgICAgZGVmIGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhzZWxmLCByZWxlYXNlID0gTm9uZSwgbGF5ZXJfbmFtZSA9IE5vbmUpOgorICAgICAgICBpZiByZWxlYXNlID09IE5vbmU6CisgICAgICAgICAgICByZWxlYXNlID0gc2VsZi5yZWxlYXNlCisgICAgICAgICMgbGF5ZXJzIG9uIHRoZSBzYW1lIGJyYW5jaCBvciBsYXllcnMgc3BlY2lmaWNhbGx5IHNldCBmb3IgdGhpcyBwcm9qZWN0CisgICAgICAgIHF1ZXJ5c2V0ID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcigoUSh1cF9icmFuY2hfX25hbWUgPSByZWxlYXNlLmJyYW5jaF9uYW1lKSAmIFEocHJvamVjdCA9IE5vbmUpKSB8IFEocHJvamVjdCA9IHNlbGYpIHwgUShidWlsZF9fcHJvamVjdCA9IHNlbGYpKQorCisgICAgICAgIGlmIGxheWVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIHdlIHNlbGVjdCBvbmx5IGEgbGF5ZXIgbmFtZQorICAgICAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIobGF5ZXJfX25hbWUgPSBsYXllcl9uYW1lKQorCisgICAgICAgICMgb3JkZXIgYnkgbGF5ZXIgdmVyc2lvbiBwcmlvcml0eQorICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmZpbHRlcihRKGxheWVyX3NvdXJjZT1Ob25lKSB8IFEobGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcmVsZWFzZSA9IHJlbGVhc2UpKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfc291cmNlJywgJ2xheWVyJywgJ3VwX2JyYW5jaCcsICJsYXllcl9zb3VyY2VfX3JlbGVhc2VsYXllcnNvdXJjZXByaW9yaXR5X19wcmlvcml0eSIpLm9yZGVyX2J5KCItbGF5ZXJfc291cmNlX19yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9fcHJpb3JpdHkiKQorCisgICAgICAgIHJldHVybiBxdWVyeXNldAorCisgICAgZGVmIHByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkuZmlsdGVyKGxheWVyX19uYW1lX19pbiA9IFt4LmxheWVyY29tbWl0LmxheWVyLm5hbWUgZm9yIHggaW4gc2VsZi5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpXSkuc2VsZWN0X3JlbGF0ZWQoInVwX2JyYW5jaCIpCisKKyAgICBkZWYgZ2V0X2F2YWlsYWJsZV9tYWNoaW5lcyhzZWxmKToKKyAgICAgICAgIiIiIFJldHVybnMgUXVlcnlTZXQgb2YgYWxsIE1hY2hpbmVzIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUKKyAgICAgICAgTGF5ZXJzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcXVlcnlzZXQgPSBNYWNoaW5lLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPXNlbGYucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KQorICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBnZXRfYWxsX2NvbXBhdGlibGVfbWFjaGluZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBtYWNoaW5lcyBhdmFpbGFibGUgdG8gdGhlCisgICAgICAgIHByb2plY3QgaW5jbHVkaW5nIG9uZXMgZnJvbSBMYXllcnMgbm90IGN1cnJlbnRseSBhZGRlZCAiIiIKKyAgICAgICAgY29tcGF0aWJsZV9sYXllcnMgPSBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisKKyAgICAgICAgcXVlcnlzZXQgPSBNYWNoaW5lLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luPWNvbXBhdGlibGVfbGF5ZXJzKQorICAgICAgICByZXR1cm4gcXVlcnlzZXQKKworICAgIGRlZiBnZXRfYXZhaWxhYmxlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCBSZWNpcGVzIHdoaWNoIGFyZSBwcm92aWRlZCBieSB0aGUgTGF5ZXJzCisgICAgICAgIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgUHJvamVjdCAiIiIKKyAgICAgICAgcHJvamVjdF9sYXllcnMgPSBzZWxmLnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpCisgICAgICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gcHJvamVjdF9sYXllcnMpCisKKyAgICAgICAgIyBDb3BpZWQgZnJvbSBnZXRfYWxsX2NvbXBhdGlibGVfcmVjaXBlcworICAgICAgICBzZWFyY2hfbWF4aWRzID0gbWFwKGxhbWJkYSBpOiBpWzBdLCBsaXN0KHF1ZXJ5c2V0LnZhbHVlcygnbmFtZScpLmRpc3RpbmN0KCkuYW5ub3RhdGUobWF4X2lkPU1heCgnaWQnKSkudmFsdWVzX2xpc3QoJ21heF9pZCcpKSkKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoaWRfX2luPXNlYXJjaF9tYXhpZHMpLnNlbGVjdF9yZWxhdGVkKCdsYXllcl92ZXJzaW9uJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyJywgJ2xheWVyX3ZlcnNpb25fX3VwX2JyYW5jaCcsICdsYXllcl9zb3VyY2UnKQorICAgICAgICAjIEVuZCBjb3B5CisKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKyAgICBkZWYgZ2V0X2FsbF9jb21wYXRpYmxlX3JlY2lwZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIFF1ZXJ5U2V0IG9mIGFsbCB0aGUgY29tcGF0aWJsZSBSZWNpcGVzIGF2YWlsYWJsZSB0byB0aGUKKyAgICAgICAgcHJvamVjdCBpbmNsdWRpbmcgb25lcyBmcm9tIExheWVycyBub3QgY3VycmVudGx5IGFkZGVkICIiIgorICAgICAgICBjb21wYXRpYmxlX2xheWVydmVyc2lvbnMgPSBzZWxmLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHF1ZXJ5c2V0ID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2luID0gY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKQorCisgICAgICAgIHNlYXJjaF9tYXhpZHMgPSBtYXAobGFtYmRhIGk6IGlbMF0sIGxpc3QocXVlcnlzZXQudmFsdWVzKCduYW1lJykuZGlzdGluY3QoKS5hbm5vdGF0ZShtYXhfaWQ9TWF4KCdpZCcpKS52YWx1ZXNfbGlzdCgnbWF4X2lkJykpKQorCisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKGlkX19pbj1zZWFyY2hfbWF4aWRzKS5zZWxlY3RfcmVsYXRlZCgnbGF5ZXJfdmVyc2lvbicsICdsYXllcl92ZXJzaW9uX19sYXllcicsICdsYXllcl92ZXJzaW9uX191cF9icmFuY2gnLCAnbGF5ZXJfc291cmNlJykKKyAgICAgICAgcmV0dXJuIHF1ZXJ5c2V0CisKKworICAgIGRlZiBzY2hlZHVsZV9idWlsZChzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0LCBCUlRhcmdldCwgQlJMYXllciwgQlJWYXJpYWJsZSwgQlJCaXRiYWtlCisgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuY3JlYXRlKHByb2plY3QgPSBzZWxmKQorICAgICAgICB0cnk6CisKKyAgICAgICAgICAgIEJSQml0YmFrZS5vYmplY3RzLmNyZWF0ZShyZXEgPSBiciwKKyAgICAgICAgICAgICAgICBnaXR1cmwgPSBzZWxmLmJpdGJha2VfdmVyc2lvbi5naXR1cmwsCisgICAgICAgICAgICAgICAgY29tbWl0ID0gc2VsZi5iaXRiYWtlX3ZlcnNpb24uYnJhbmNoLAorICAgICAgICAgICAgICAgIGRpcnBhdGggPSBzZWxmLmJpdGJha2VfdmVyc2lvbi5kaXJwYXRoKQorCisgICAgICAgICAgICBmb3IgbCBpbiBzZWxmLnByb2plY3RsYXllcl9zZXQuYWxsKCkub3JkZXJfYnkoInBrIik6CisgICAgICAgICAgICAgICAgY29tbWl0ID0gbC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpCisgICAgICAgICAgICAgICAgcHJpbnQoImlpIEJ1aWxkaW5nIGxheWVyICIsIGwubGF5ZXJjb21taXQubGF5ZXIubmFtZSwgIiBhdCB2Y3MgcG9pbnQgIiwgY29tbWl0KQorICAgICAgICAgICAgICAgIEJSTGF5ZXIub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSBsLmxheWVyY29tbWl0LmxheWVyLm5hbWUsIGdpdHVybCA9IGwubGF5ZXJjb21taXQubGF5ZXIudmNzX3VybCwgY29tbWl0ID0gY29tbWl0LCBkaXJwYXRoID0gbC5sYXllcmNvbW1pdC5kaXJwYXRoKQorCisgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfUVVFVUVECisgICAgICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICAgICAgYnIuYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0ID0gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGZvciB0IGluIHNlbGYucHJvamVjdHRhcmdldF9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgQlJUYXJnZXQub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIHRhcmdldCA9IHQudGFyZ2V0LCB0YXNrID0gdC50YXNrKQorICAgICAgICAgICAgICAgIFRhcmdldC5vYmplY3RzLmNyZWF0ZShidWlsZCA9IGJyLmJ1aWxkLCB0YXJnZXQgPSB0LnRhcmdldCkKKworICAgICAgICAgICAgZm9yIHYgaW4gc2VsZi5wcm9qZWN0dmFyaWFibGVfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIEJSVmFyaWFibGUub2JqZWN0cy5jcmVhdGUocmVxID0gYnIsIG5hbWUgPSB2Lm5hbWUsIHZhbHVlID0gdi52YWx1ZSkKKworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnIuYnVpbGQubWFjaGluZSA9IHNlbGYucHJvamVjdHZhcmlhYmxlX3NldC5nZXQobmFtZSA9ICdNQUNISU5FJykudmFsdWUKKyAgICAgICAgICAgICAgICBici5idWlsZC5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGJyLnNhdmUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgIyByZXZlcnQgdGhlIGJ1aWxkIHJlcXVlc3QgY3JlYXRpb24gc2luY2Ugd2UncmUgbm90IGRvbmUgY2xlYW5seQorICAgICAgICAgICAgYnIuZGVsZXRlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBicgorCitjbGFzcyBCdWlsZChtb2RlbHMuTW9kZWwpOgorICAgIFNVQ0NFRURFRCA9IDAKKyAgICBGQUlMRUQgPSAxCisgICAgSU5fUFJPR1JFU1MgPSAyCisKKyAgICBCVUlMRF9PVVRDT01FID0gKAorICAgICAgICAoU1VDQ0VFREVELCAnU3VjY2VlZGVkJyksCisgICAgICAgIChGQUlMRUQsICdGYWlsZWQnKSwKKyAgICAgICAgKElOX1BST0dSRVNTLCAnSW4gUHJvZ3Jlc3MnKSwKKyAgICApCisKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ21hY2hpbmUnLCAnY29va2VyX2xvZ19wYXRoJywgInRhcmdldF9fdGFyZ2V0IiwgInRhcmdldF9fdGFyZ2V0X2ltYWdlX2ZpbGVfX2ZpbGVfbmFtZSJdCisKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkgICAgICAgICAgICAjIG11c3QgaGF2ZSBhIHByb2plY3QKKyAgICBtYWNoaW5lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBkaXN0cm8gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGRpc3Ryb192ZXJzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBzdGFydGVkX29uID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoKQorICAgIGNvbXBsZXRlZF9vbiA9IG1vZGVscy5EYXRlVGltZUZpZWxkKCkKKyAgICBvdXRjb21lID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUJVSUxEX09VVENPTUUsIGRlZmF1bHQ9SU5fUFJPR1JFU1MpCisgICAgY29va2VyX2xvZ19wYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwMCkKKyAgICBidWlsZF9uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBiaXRiYWtlX3ZlcnNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTApCisKKyAgICBkZWYgY29tcGxldGVwZXIoc2VsZik6CisgICAgICAgIHRmID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IHNlbGYpCisgICAgICAgIHRmYyA9IHRmLmNvdW50KCkKKyAgICAgICAgaWYgdGZjID4gMDoKKyAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gdGYuZXhjbHVkZShvcmRlcl9faXNudWxsPVRydWUpLmNvdW50KCkqMTAwL3RmLmNvdW50KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBsZXRlcGVyID0gMAorICAgICAgICByZXR1cm4gY29tcGxldGVwZXIKKworICAgIGRlZiBldGEoc2VsZik6CisgICAgICAgIGV0YSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGNvbXBsZXRlcGVyID0gc2VsZi5jb21wbGV0ZXBlcigpCisgICAgICAgIGlmIHNlbGYuY29tcGxldGVwZXIoKSA+IDA6CisgICAgICAgICAgICBldGEgKz0gKChldGEgLSBzZWxmLnN0YXJ0ZWRfb24pKigxMDAtY29tcGxldGVwZXIpKS9jb21wbGV0ZXBlcgorICAgICAgICByZXR1cm4gZXRhCisKKworICAgIGRlZiBnZXRfc29ydGVkX3RhcmdldF9saXN0KHNlbGYpOgorICAgICAgICB0Z3RzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKGJ1aWxkX2lkID0gc2VsZi5pZCkub3JkZXJfYnkoICd0YXJnZXQnICk7CisgICAgICAgIHJldHVybiggdGd0cyApOworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRvYXN0ZXJfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nbWVzc2FnZV9zZXQuZmlsdGVyKGxldmVsPUxvZ01lc3NhZ2UuRVhDRVBUSU9OKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVycm9ycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVSUk9SKXxzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLkVYQ0VQVElPTikpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2FybmluZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmxvZ21lc3NhZ2Vfc2V0LmZpbHRlcihsZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdGltZXNwZW50X3NlY29uZHMoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5jb21wbGV0ZWRfb24gLSBzZWxmLnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKQorCisgICAgZGVmIGdldF9jdXJyZW50X3N0YXR1cyhzZWxmKToKKyAgICAgICAgZnJvbSBibGRjb250cm9sLm1vZGVscyBpbXBvcnQgQnVpbGRSZXF1ZXN0CisgICAgICAgIGlmIHNlbGYub3V0Y29tZSA9PSBCdWlsZC5JTl9QUk9HUkVTUyBhbmQgc2VsZi5idWlsZHJlcXVlc3Quc3RhdGUgIT0gQnVpbGRSZXF1ZXN0LlJFUV9JTlBST0dSRVNTOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGRyZXF1ZXN0LmdldF9zdGF0ZV9kaXNwbGF5KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X291dGNvbWVfZGlzcGxheSgpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlZCAlcyAlcyIgJSAoc2VsZi5pZCwgc2VsZi5wcm9qZWN0LCAiLCIuam9pbihbdC50YXJnZXQgZm9yIHQgaW4gc2VsZi50YXJnZXRfc2V0LmFsbCgpXSkpCisKKworIyBhbiBBcnRpZmFjdCBpcyBhbnl0aGluZyB0aGF0IHJlc3VsdHMgZnJvbSBhIEJ1aWxkLCBhbmQgbWF5IGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLCBhbmQgaXMgbm90IHN0b3JlZCBlbHNld2hlcmUKK2NsYXNzIEJ1aWxkQXJ0aWZhY3QobW9kZWxzLk1vZGVsKToKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKCkKKyAgICBmaWxlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKCkKKworICAgIGRlZiBnZXRfbG9jYWxfZmlsZV9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXBsb3lkaXIgPSBWYXJpYWJsZS5vYmplY3RzLmdldChidWlsZCA9IHNlbGYuYnVpbGQsIHZhcmlhYmxlX25hbWU9IkRFUExPWV9ESVIiKS52YXJpYWJsZV92YWx1ZQorICAgICAgICAgICAgcmV0dXJuICBzZWxmLmZpbGVfbmFtZVtsZW4oZGVwbG95ZGlyKSsxOl0KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5maWxlX25hbWUKKworCisgICAgZGVmIGlzX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVpbGQuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50Lmhhc19hcnRpZmFjdChzZWxmLmZpbGVfbmFtZSkKKworY2xhc3MgUHJvamVjdFRhcmdldChtb2RlbHMuTW9kZWwpOgorICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIHRhcmdldCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKworY2xhc3MgVGFyZ2V0KG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyd0YXJnZXQnLCAnZmlsZV9uYW1lJ10KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIHRhcmdldCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDApCisgICAgdGFzayA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIG51bGw9VHJ1ZSkKKyAgICBpc19pbWFnZSA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IEZhbHNlKQorICAgIGltYWdlX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBsaWNlbnNlX21hbmlmZXN0X3BhdGggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NTAwLCBudWxsPVRydWUpCisKKyAgICBkZWYgcGFja2FnZV9jb3VudChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0PXNlbGYuaWQpLmNvdW50KCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0CisKK2NsYXNzIFRhcmdldF9JbWFnZV9GaWxlKG1vZGVscy5Nb2RlbCk6CisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIGZpbGVfbmFtZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU0KQorICAgIGZpbGVfc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCitjbGFzcyBUYXJnZXRfRmlsZShtb2RlbHMuTW9kZWwpOgorICAgIElUWVBFX1JFR1VMQVIgPSAxCisgICAgSVRZUEVfRElSRUNUT1JZID0gMgorICAgIElUWVBFX1NZTUxJTksgPSAzCisgICAgSVRZUEVfU09DS0VUID0gNAorICAgIElUWVBFX0ZJRk8gPSA1CisgICAgSVRZUEVfQ0hBUkFDVEVSID0gNgorICAgIElUWVBFX0JMT0NLID0gNworICAgIElUWVBFUyA9ICggKElUWVBFX1JFR1VMQVIgLCdyZWd1bGFyJyksCisgICAgICAgICggSVRZUEVfRElSRUNUT1JZICwnZGlyZWN0b3J5JyksCisgICAgICAgICggSVRZUEVfU1lNTElOSyAsJ3N5bWxpbmsnKSwKKyAgICAgICAgKCBJVFlQRV9TT0NLRVQgLCdzb2NrZXQnKSwKKyAgICAgICAgKCBJVFlQRV9GSUZPICwnZmlmbycpLAorICAgICAgICAoIElUWVBFX0NIQVJBQ1RFUiAsJ2NoYXJhY3RlcicpLAorICAgICAgICAoIElUWVBFX0JMT0NLICwnYmxvY2snKSwKKyAgICAgICAgKQorCisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIHBhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZCgpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorICAgIGlub2RldHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcyA9IElUWVBFUykKKyAgICBwZXJtaXNzaW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTE2KQorICAgIG93bmVyID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEyOCkKKyAgICBncm91cCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMjgpCisgICAgZGlyZWN0b3J5ID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1RhcmdldF9GaWxlJywgcmVsYXRlZF9uYW1lPSJkaXJlY3Rvcnlfc2V0IiwgbnVsbD1UcnVlKQorICAgIHN5bV90YXJnZXQgPSBtb2RlbHMuRm9yZWlnbktleSgnVGFyZ2V0X0ZpbGUnLCByZWxhdGVkX25hbWU9InN5bWxpbmtfc2V0IiwgbnVsbD1UcnVlKQorCisKK2NsYXNzIFRhc2sobW9kZWxzLk1vZGVsKToKKworICAgIFNTVEFURV9OQSA9IDAKKyAgICBTU1RBVEVfTUlTUyA9IDEKKyAgICBTU1RBVEVfRkFJTEVEID0gMgorICAgIFNTVEFURV9SRVNUT1JFRCA9IDMKKworICAgIFNTVEFURV9SRVNVTFQgPSAoCisgICAgICAgIChTU1RBVEVfTkEsICdOb3QgQXBwbGljYWJsZScpLCAjIEZvciByZXN0IG9mIHRhc2tzLCBidXQgdGhleSBzdGlsbCBuZWVkIGNoZWNraW5nLgorICAgICAgICAoU1NUQVRFX01JU1MsICdGaWxlIG5vdCBpbiBjYWNoZScpLCAjIHRoZSBzc3RhdGUgb2JqZWN0IHdhcyBub3QgZm91bmQKKyAgICAgICAgKFNTVEFURV9GQUlMRUQsICdGYWlsZWQnKSwgIyB0aGVyZSB3YXMgYSBwa2csIGJ1dCB0aGUgc2NyaXB0IGZhaWxlZAorICAgICAgICAoU1NUQVRFX1JFU1RPUkVELCAnU3VjY2VlZGVkJyksICMgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkCisgICAgKQorCisgICAgQ09ESU5HX05BID0gMAorICAgIENPRElOR19QWVRIT04gPSAyCisgICAgQ09ESU5HX1NIRUxMID0gMworCisgICAgVEFTS19DT0RJTkcgPSAoCisgICAgICAgIChDT0RJTkdfTkEsICdOL0EnKSwKKyAgICAgICAgKENPRElOR19QWVRIT04sICdQeXRob24nKSwKKyAgICAgICAgKENPRElOR19TSEVMTCwgJ1NoZWxsJyksCisgICAgKQorCisgICAgT1VUQ09NRV9OQSA9IC0xCisgICAgT1VUQ09NRV9TVUNDRVNTID0gMAorICAgIE9VVENPTUVfQ09WRVJFRCA9IDEKKyAgICBPVVRDT01FX0NBQ0hFRCA9IDIKKyAgICBPVVRDT01FX1BSRUJVSUxUID0gMworICAgIE9VVENPTUVfRkFJTEVEID0gNAorICAgIE9VVENPTUVfRU1QVFkgPSA1CisKKyAgICBUQVNLX09VVENPTUUgPSAoCisgICAgICAgIChPVVRDT01FX05BLCAnTm90IEF2YWlsYWJsZScpLAorICAgICAgICAoT1VUQ09NRV9TVUNDRVNTLCAnU3VjY2VlZGVkJyksCisgICAgICAgIChPVVRDT01FX0NPVkVSRUQsICdDb3ZlcmVkJyksCisgICAgICAgIChPVVRDT01FX0NBQ0hFRCwgJ0NhY2hlZCcpLAorICAgICAgICAoT1VUQ09NRV9QUkVCVUlMVCwgJ1ByZWJ1aWx0JyksCisgICAgICAgIChPVVRDT01FX0ZBSUxFRCwgJ0ZhaWxlZCcpLAorICAgICAgICAoT1VUQ09NRV9FTVBUWSwgJ0VtcHR5JyksCisgICAgKQorCisgICAgVEFTS19PVVRDT01FX0hFTFAgPSAoCisgICAgICAgIChPVVRDT01FX1NVQ0NFU1MsICdUaGlzIHRhc2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCcpLAorICAgICAgICAoT1VUQ09NRV9DT1ZFUkVELCAnVGhpcyB0YXNrIGRpZCBub3QgcnVuIGJlY2F1c2UgaXRzIG91dHB1dCBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2snKSwKKyAgICAgICAgKE9VVENPTUVfQ0FDSEVELCAnVGhpcyB0YXNrIHJlc3RvcmVkIG91dHB1dCBmcm9tIHRoZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgKE9VVENPTUVfUFJFQlVJTFQsICdUaGlzIHRhc2sgZGlkIG5vdCBydW4gYmVjYXVzZSBpdHMgb3V0Y29tZSB3YXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBidWlsZCcpLAorICAgICAgICAoT1VUQ09NRV9GQUlMRUQsICdUaGlzIHRhc2sgZGlkIG5vdCBjb21wbGV0ZScpLAorICAgICAgICAoT1VUQ09NRV9FTVBUWSwgJ1RoaXMgdGFzayBoYXMgbm8gZXhlY3V0YWJsZSBjb250ZW50JyksCisgICAgICAgIChPVVRDT01FX05BLCAnJyksCisgICAgKQorCisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyAicmVjaXBlX19uYW1lIiwgInJlY2lwZV9fdmVyc2lvbiIsICJ0YXNrX25hbWUiLCAibG9nZmlsZSIgXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRhc2ssIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5faGVscHRleHQgPSBIZWxwVGV4dC5vYmplY3RzLmdldChrZXk9c2VsZi50YXNrX25hbWUsIGFyZWE9SGVscFRleHQuVkFSSUFCTEUsIGJ1aWxkPXNlbGYuYnVpbGQpLnRleHQKKyAgICAgICAgZXhjZXB0IEhlbHBUZXh0LkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2hlbHB0ZXh0ID0gTm9uZQorCisgICAgZGVmIGdldF9yZWxhdGVkX3NldHNjZW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkPVRydWUsIGJ1aWxkID0gc2VsZi5idWlsZCwgcmVjaXBlID0gc2VsZi5yZWNpcGUsIHRhc2tfbmFtZT1zZWxmLnRhc2tfbmFtZSsiX3NldHNjZW5lIikKKworICAgIGRlZiBnZXRfb3V0Y29tZV90ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gVGFzay5UQVNLX09VVENPTUVbaW50KHNlbGYub3V0Y29tZSkgKyAxXVsxXQorCisgICAgZGVmIGdldF9vdXRjb21lX2hlbHAoc2VsZik6CisgICAgICAgIHJldHVybiBUYXNrLlRBU0tfT1VUQ09NRV9IRUxQW2ludChzZWxmLm91dGNvbWUpXVsxXQorCisgICAgZGVmIGdldF9zc3RhdGVfdGV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zc3RhdGVfcmVzdWx0PT1UYXNrLlNTVEFURV9OQToKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRhc2suU1NUQVRFX1JFU1VMVFtpbnQoc2VsZi5zc3RhdGVfcmVzdWx0KV1bMV0KKworICAgIGRlZiBnZXRfZXhlY3V0ZWRfZGlzcGxheShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50YXNrX2V4ZWN1dGVkOgorICAgICAgICAgICAgcmV0dXJuICJFeGVjdXRlZCIKKyAgICAgICAgcmV0dXJuICJOb3QgRXhlY3V0ZWQiCisKKyAgICBkZWYgZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGVscHRleHQKKworICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0ndGFza19idWlsZCcpCisgICAgb3JkZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGw9VHJ1ZSkKKyAgICB0YXNrX2V4ZWN1dGVkID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKSAjIFRydWUgbWVhbnMgRXhlY3V0ZWQsIEZhbHNlIG1lYW5zIE5vdC9FeGVjdXRlZAorICAgIG91dGNvbWUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9VEFTS19PVVRDT01FLCBkZWZhdWx0PU9VVENPTUVfTkEpCisgICAgc3N0YXRlX2NoZWNrc3VtID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBwYXRoX3RvX3NzdGF0ZV9vYmogPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTUwMCwgYmxhbms9VHJ1ZSkKKyAgICByZWNpcGUgPSBtb2RlbHMuRm9yZWlnbktleSgnUmVjaXBlJywgcmVsYXRlZF9uYW1lPSd0YXNrcycpCisgICAgdGFza19uYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBzb3VyY2VfdXJsID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgd29ya19kaXJlY3RvcnkgPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSwgYmxhbms9VHJ1ZSkKKyAgICBzY3JpcHRfdHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1UQVNLX0NPRElORywgZGVmYXVsdD1DT0RJTkdfTkEpCisgICAgbGluZV9udW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBkaXNrX2lvID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisgICAgY3B1X3VzYWdlID0gbW9kZWxzLkRlY2ltYWxGaWVsZChtYXhfZGlnaXRzPTgsIGRlY2ltYWxfcGxhY2VzPTIsIG51bGw9VHJ1ZSkKKyAgICBlbGFwc2VkX3RpbWUgPSBtb2RlbHMuRGVjaW1hbEZpZWxkKG1heF9kaWdpdHM9OCwgZGVjaW1hbF9wbGFjZXM9MiwgbnVsbD1UcnVlKQorICAgIHNzdGF0ZV9yZXN1bHQgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9U1NUQVRFX1JFU1VMVCwgZGVmYXVsdD1TU1RBVEVfTkEpCisgICAgbWVzc2FnZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNDApCisgICAgbG9nZmlsZSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKG1heF9sZW5ndGg9MjU1LCBibGFuaz1UcnVlKQorCisgICAgb3V0Y29tZV90ZXh0ID0gcHJvcGVydHkoZ2V0X291dGNvbWVfdGV4dCkKKyAgICBzc3RhdGVfdGV4dCAgPSBwcm9wZXJ0eShnZXRfc3N0YXRlX3RleHQpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJWQoJWQpICVzOiVzIiAlIChzZWxmLnBrLCBzZWxmLmJ1aWxkLnBrLCBzZWxmLnJlY2lwZS5uYW1lLCBzZWxmLnRhc2tfbmFtZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIG9yZGVyaW5nID0gKCdvcmRlcicsICdyZWNpcGUnICwpCisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgnYnVpbGQnLCAncmVjaXBlJywgJ3Rhc2tfbmFtZScsICkKKworCitjbGFzcyBUYXNrX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICB0YXNrID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgcmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc190YXNrJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgcmVsYXRlZF9uYW1lPSd0YXNrX2RlcGVuZGVuY2llc19kZXBlbmRzJykKKworY2xhc3MgUGFja2FnZShtb2RlbHMuTW9kZWwpOgorICAgIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyA9IFsnbmFtZScsICd2ZXJzaW9uJywgJ3JldmlzaW9uJywgJ3JlY2lwZV9fbmFtZScsICdyZWNpcGVfX3ZlcnNpb24nLCAncmVjaXBlX19saWNlbnNlJywgJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2gnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19jb21taXQnLCAncmVjaXBlX19sYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2luc3RhbGxlZF9uYW1lJ10KKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KCdCdWlsZCcpCisgICAgcmVjaXBlID0gbW9kZWxzLkZvcmVpZ25LZXkoJ1JlY2lwZScsIG51bGw9VHJ1ZSkKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICBpbnN0YWxsZWRfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGRlZmF1bHQ9JycpCisgICAgdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpCisgICAgcmV2aXNpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIGJsYW5rPVRydWUpCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBzaXplID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0PTApCisgICAgaW5zdGFsbGVkX3NpemUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQ9MCkKKyAgICBzZWN0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTgwLCBibGFuaz1UcnVlKQorICAgIGxpY2Vuc2UgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9ODAsIGJsYW5rPVRydWUpCisKK2NsYXNzIFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIHVzZV9mb3JfcmVsYXRlZF9maWVsZHMgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3F1ZXJ5X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFBhY2thZ2VfRGVwZW5kZW5jeU1hbmFnZXIsIHNlbGYpLmdldF9xdWVyeV9zZXQoKS5leGNsdWRlKHBhY2thZ2VfaWQgPSBGKCdkZXBlbmRzX29uX19pZCcpKQorCitjbGFzcyBQYWNrYWdlX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICBUWVBFX1JERVBFTkRTID0gMAorICAgIFRZUEVfVFJERVBFTkRTID0gMQorICAgIFRZUEVfUlJFQ09NTUVORFMgPSAyCisgICAgVFlQRV9UUkVDT01NRU5EUyA9IDMKKyAgICBUWVBFX1JTVUdHRVNUUyA9IDQKKyAgICBUWVBFX1JQUk9WSURFUyA9IDUKKyAgICBUWVBFX1JSRVBMQUNFUyA9IDYKKyAgICBUWVBFX1JDT05GTElDVFMgPSA3CisgICAgJyBUT0RPOiBicGFja2FnZSBzaG91bGQgYmUgY2hhbmdlZCB0byByZW1vdmUgdGhlIERFUEVORFNfVFlQRSBhY2Nlc3MgJworICAgIERFUEVORFNfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfUkRFUEVORFMsICJkZXBlbmRzIiksCisgICAgICAgIChUWVBFX1RSREVQRU5EUywgImRlcGVuZHMiKSwKKyAgICAgICAgKFRZUEVfVFJFQ09NTUVORFMsICJyZWNvbW1lbmRzIiksCisgICAgICAgIChUWVBFX1JSRUNPTU1FTkRTLCAicmVjb21tZW5kcyIpLAorICAgICAgICAoVFlQRV9SU1VHR0VTVFMsICJzdWdnZXN0cyIpLAorICAgICAgICAoVFlQRV9SUFJPVklERVMsICJwcm92aWRlcyIpLAorICAgICAgICAoVFlQRV9SUkVQTEFDRVMsICJyZXBsYWNlcyIpLAorICAgICAgICAoVFlQRV9SQ09ORkxJQ1RTLCAiY29uZmxpY3RzIiksCisgICAgKQorICAgICIiIiBJbmRleGVkIGJ5IGRlcF90eXBlLCBpbiB2aWV3IG9yZGVyLCBrZXkgZm9yIHNob3J0IG5hbWUgYW5kIGhlbHAKKyAgICAgICAgZGVzY3JpcHRpb24gd2hpY2ggd2hlbiB2aWV3ZWQgd2lsbCBiZSBwcmludGYnZCB3aXRoIHRoZQorICAgICAgICBwYWNrYWdlIG5hbWUuCisgICAgIiIiCisgICAgREVQRU5EU19ESUNUID0geworICAgICAgICBUWVBFX1JERVBFTkRTIDogICAgICgiZGVwZW5kcyIsICIlcyBpcyByZXF1aXJlZCB0byBydW4gJXMiKSwKKyAgICAgICAgVFlQRV9UUkRFUEVORFMgOiAgICAoImRlcGVuZHMiLCAiJXMgaXMgcmVxdWlyZWQgdG8gcnVuICVzIiksCisgICAgICAgIFRZUEVfVFJFQ09NTUVORFMgOiAgKCJyZWNvbW1lbmRzIiwgIiVzIGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiAlcyIpLAorICAgICAgICBUWVBFX1JSRUNPTU1FTkRTIDogICgicmVjb21tZW5kcyIsICIlcyBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgJXMiKSwKKyAgICAgICAgVFlQRV9SU1VHR0VTVFMgOiAgICAoInN1Z2dlc3RzIiwgIiVzIGlzIHN1Z2dlc3RlZCBmb3IgaW5zdGFsbGF0aW9uIHdpdGggJXMiKSwKKyAgICAgICAgVFlQRV9SUFJPVklERVMgOiAgICAoInByb3ZpZGVzIiwgIiVzIGlzIHByb3ZpZGVkIGJ5ICVzIiksCisgICAgICAgIFRZUEVfUlJFUExBQ0VTIDogICAgKCJyZXBsYWNlcyIsICIlcyBpcyByZXBsYWNlZCBieSAlcyIpLAorICAgICAgICBUWVBFX1JDT05GTElDVFMgOiAgICgiY29uZmxpY3RzIiwgIiVzIGNvbmZsaWN0cyB3aXRoICVzLCB3aGljaCB3aWxsIG5vdCBiZSBpbnN0YWxsZWQgaWYgdGhpcyBwYWNrYWdlIGlzIG5vdCBmaXJzdCByZW1vdmVkIiksCisgICAgfQorCisgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0ncGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoUGFja2FnZSwgcmVsYXRlZF9uYW1lPSdwYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQnKSAgICMgc29mdCBkZXBlbmRlbmN5CisgICAgZGVwX3R5cGUgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9REVQRU5EU19UWVBFKQorICAgIHRhcmdldCA9IG1vZGVscy5Gb3JlaWduS2V5KFRhcmdldCwgbnVsbD1UcnVlKQorICAgIG9iamVjdHMgPSBQYWNrYWdlX0RlcGVuZGVuY3lNYW5hZ2VyKCkKKworY2xhc3MgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlKG1vZGVscy5Nb2RlbCk6CisgICAgdGFyZ2V0ID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFyZ2V0KQorICAgIHBhY2thZ2UgPSBtb2RlbHMuRm9yZWlnbktleShQYWNrYWdlLCByZWxhdGVkX25hbWU9J2J1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlJykKKworY2xhc3MgUGFja2FnZV9GaWxlKG1vZGVscy5Nb2RlbCk6CisgICAgcGFja2FnZSA9IG1vZGVscy5Gb3JlaWduS2V5KFBhY2thZ2UsIHJlbGF0ZWRfbmFtZT0nYnVpbGRmaWxlbGlzdF9wYWNrYWdlJykKKyAgICBwYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgc2l6ZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoKQorCitjbGFzcyBSZWNpcGUobW9kZWxzLk1vZGVsKToKKyAgICBzZWFyY2hfYWxsb3dlZF9maWVsZHMgPSBbJ25hbWUnLCAndmVyc2lvbicsICdmaWxlX3BhdGgnLCAnc2VjdGlvbicsICdzdW1tYXJ5JywgJ2Rlc2NyaXB0aW9uJywgJ2xpY2Vuc2UnLCAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLCAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywgJ2xheWVyX3ZlcnNpb25fX2NvbW1pdCcsICdsYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoJywgJ2xheWVyX3ZlcnNpb25fX2xheWVyX3NvdXJjZV9fbmFtZSddCisKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIHJlY2lwZQorICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGVudHJ5IGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpICAgICAgICAgICAgICAgICAjIHBuCisgICAgdmVyc2lvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0xMDAsIGJsYW5rPVRydWUpICAgICAgICAgICAgICAjIHB2CisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllcl9WZXJzaW9uJywgcmVsYXRlZF9uYW1lPSdyZWNpcGVfbGF5ZXJfdmVyc2lvbicpCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5UZXh0RmllbGQoYmxhbms9VHJ1ZSkKKyAgICBzZWN0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCwgYmxhbms9VHJ1ZSkKKyAgICBsaWNlbnNlID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTIwMCwgYmxhbms9VHJ1ZSkKKyAgICBob21lcGFnZSA9IG1vZGVscy5VUkxGaWVsZChibGFuaz1UcnVlKQorICAgIGJ1Z3RyYWNrZXIgPSBtb2RlbHMuVVJMRmllbGQoYmxhbms9VHJ1ZSkKKyAgICBmaWxlX3BhdGggPSBtb2RlbHMuRmlsZVBhdGhGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBwYXRoZmxhZ3MgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjAwLCBibGFuaz1UcnVlKQorICAgIGlzX2ltYWdlID0gbW9kZWxzLkJvb2xlYW5GaWVsZChkZWZhdWx0PUZhbHNlKQorCisgICAgZGVmIGdldF9sYXllcnNvdXJjZV92aWV3X3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllcl9zb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHVybCA9IHNlbGYubGF5ZXJfc291cmNlLmdldF9vYmplY3RfdmlldyhzZWxmLmxheWVyX3ZlcnNpb24udXBfYnJhbmNoLCAicmVjaXBlcyIsIHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuIHVybAorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlJlY2lwZSAiICsgc2VsZi5uYW1lICsgIjoiICsgc2VsZi52ZXJzaW9uCisKKyAgICBkZWYgZ2V0X3Zjc19yZWNpcGVfZmlsZV9saW5rX3VybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGF5ZXJfdmVyc2lvbi5nZXRfdmNzX2ZpbGVfbGlua191cmwoc2VsZi5maWxlX3BhdGgpCisKKyAgICBkZWYgZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVzY3JpcHRpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZXNjcmlwdGlvbgorICAgICAgICBlbGlmIHNlbGYuc3VtbWFyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1bW1hcnkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgibGF5ZXJfdmVyc2lvbiIsICJmaWxlX3BhdGgiLCAicGF0aGZsYWdzIiksICkKKworCitjbGFzcyBSZWNpcGVfRGVwZW5kZW5jeU1hbmFnZXIobW9kZWxzLk1hbmFnZXIpOgorICAgIHVzZV9mb3JfcmVsYXRlZF9maWVsZHMgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3F1ZXJ5X3NldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFJlY2lwZV9EZXBlbmRlbmN5TWFuYWdlciwgc2VsZikuZ2V0X3F1ZXJ5X3NldCgpLmV4Y2x1ZGUocmVjaXBlX2lkID0gRignZGVwZW5kc19vbl9faWQnKSkKKworY2xhc3MgUmVjaXBlX0RlcGVuZGVuY3kobW9kZWxzLk1vZGVsKToKKyAgICBUWVBFX0RFUEVORFMgPSAwCisgICAgVFlQRV9SREVQRU5EUyA9IDEKKworICAgIERFUEVORFNfVFlQRSA9ICgKKyAgICAgICAgKFRZUEVfREVQRU5EUywgImRlcGVuZHMiKSwKKyAgICAgICAgKFRZUEVfUkRFUEVORFMsICJyZGVwZW5kcyIpLAorICAgICkKKyAgICByZWNpcGUgPSBtb2RlbHMuRm9yZWlnbktleShSZWNpcGUsIHJlbGF0ZWRfbmFtZT0ncl9kZXBlbmRlbmNpZXNfcmVjaXBlJykKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoUmVjaXBlLCByZWxhdGVkX25hbWU9J3JfZGVwZW5kZW5jaWVzX2RlcGVuZHMnKQorICAgIGRlcF90eXBlID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPURFUEVORFNfVFlQRSkKKyAgICBvYmplY3RzID0gUmVjaXBlX0RlcGVuZGVuY3lNYW5hZ2VyKCkKKworCitjbGFzcyBNYWNoaW5lKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyJuYW1lIiwgImRlc2NyaXB0aW9uIiwgImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIl0KKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgnTGF5ZXJTb3VyY2UnLCBkZWZhdWx0ID0gTm9uZSwgbnVsbCA9IFRydWUpICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIG1hY2hpbmUKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGVudHJ5IGluIHRoZSBzb3VyY2UKKyAgICB1cF9kYXRlID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllcl9WZXJzaW9uJykKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBkZXNjcmlwdGlvbiA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUpCisKKyAgICBkZWYgZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmwoc2VsZik6CisgICAgICAgIHBhdGggPSAnY29uZi9tYWNoaW5lLycrc2VsZi5uYW1lKycuY29uZicKKworICAgICAgICByZXR1cm4gc2VsZi5sYXllcl92ZXJzaW9uLmdldF92Y3NfZmlsZV9saW5rX3VybChwYXRoKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk1hY2hpbmUgIiArIHNlbGYubmFtZSArICIoIiArIHNlbGYuZGVzY3JpcHRpb24gKyAiKSIKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgibGF5ZXJfc291cmNlIiwgInVwX2lkIikKKworCitmcm9tIGRqYW5nby5kYi5tb2RlbHMuYmFzZSBpbXBvcnQgTW9kZWxCYXNlCisKK2NsYXNzIEluaGVyaXRhbmNlTWV0YWNsYXNzKE1vZGVsQmFzZSk6CisgICAgZGVmIF9fY2FsbF9fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgb2JqID0gc3VwZXIoSW5oZXJpdGFuY2VNZXRhY2xhc3MsIGNscykuX19jYWxsX18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gb2JqLmdldF9vYmplY3QoKQorCisKK2NsYXNzIExheWVyU291cmNlKG1vZGVscy5Nb2RlbCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEluaGVyaXRhbmNlTWV0YWNsYXNzCisKKyAgICBjbGFzcyBNZXRhOgorICAgICAgICB1bmlxdWVfdG9nZXRoZXIgPSAoKCdzb3VyY2V0eXBlJywgJ2FwaXVybCcpLCApCisKKyAgICBUWVBFX0xPQ0FMID0gMAorICAgIFRZUEVfTEFZRVJJTkRFWCA9IDEKKyAgICBUWVBFX0lNUE9SVEVEID0gMgorICAgIFNPVVJDRV9UWVBFID0gKAorICAgICAgICAoVFlQRV9MT0NBTCwgImxvY2FsIiksCisgICAgICAgIChUWVBFX0xBWUVSSU5ERVgsICJsYXllcmluZGV4IiksCisgICAgICAgIChUWVBFX0lNUE9SVEVELCAiaW1wb3J0ZWQiKSwKKyAgICAgICkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjMsIHVuaXF1ZSA9IFRydWUpCisgICAgc291cmNldHlwZSA9IG1vZGVscy5JbnRlZ2VyRmllbGQoY2hvaWNlcz1TT1VSQ0VfVFlQRSkKKyAgICBhcGl1cmwgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjU1LCBudWxsPVRydWUsIGRlZmF1bHQ9Tm9uZSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gTG9jYWxMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVg6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExheWVySW5kZXhMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBJbXBvcnRlZExheWVyU291cmNlCisgICAgICAgIGVsaWYgc2VsZi5zb3VyY2V0eXBlID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gTGF5ZXJTb3VyY2UtZGVyaXZlZCBjbGFzcy4gSWYgeW91IGFkZGVkIGEgbmV3IGxheWVyIHNvdXJjZSB0eXBlLCBmaWxsIG91dCBhbGwgY29kZSBzdHVicy4iKQorCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIFVwZGF0ZXMgdGhlIGxvY2FsIGRhdGFiYXNlIGluZm9ybWF0aW9uIGZyb20gdGhlIHVwc3RyZWFtIGxheWVyIHNvdXJjZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBYnN0cmFjdCwgdXBkYXRlKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgTGF5ZXJTb3VyY2UtZGVyaXZlZCBjbGFzc2VzIChvYmplY3QgaXMgJXMpIiAlIHN0cih2YXJzKHNlbGYpKSkKKworICAgIGRlZiBzYXZlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzdXBlcihMYXllclNvdXJjZSwgc2VsZikuc2F2ZSgqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X29iamVjdChzZWxmKToKKyAgICAgICAgIyBwcmVzZXQgYW4gdW4taW5pdGlsaXplZCBvYmplY3QKKyAgICAgICAgaWYgTm9uZSA9PSBzZWxmLm5hbWU6CisgICAgICAgICAgICBzZWxmLm5hbWU9IiIKKyAgICAgICAgaWYgTm9uZSA9PSBzZWxmLmFwaXVybDoKKyAgICAgICAgICAgIHNlbGYuYXBpdXJsPSIiCisgICAgICAgIGlmIE5vbmUgPT0gc2VsZi5zb3VyY2V0eXBlOgorICAgICAgICAgICAgc2VsZi5zb3VyY2V0eXBlPUxheWVyU291cmNlLlRZUEVfTE9DQUwKKworICAgICAgICBpZiBzZWxmLnNvdXJjZXR5cGUgPT0gTGF5ZXJTb3VyY2UuVFlQRV9MT0NBTDoKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fID0gTG9jYWxMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVg6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXyA9IExheWVySW5kZXhMYXllclNvdXJjZQorICAgICAgICBlbGlmIHNlbGYuc291cmNldHlwZSA9PSBMYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEOgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBJbXBvcnRlZExheWVyU291cmNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gTGF5ZXJTb3VyY2UgdHlwZS4gSWYgeW91IGFkZGVkIGEgbmV3IGxheWVyIHNvdXJjZSB0eXBlLCBmaWxsIG91dCBhbGwgY29kZSBzdHVicy4iKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYubmFtZSwgc2VsZi5zb3VyY2V0eXBlKQorCisKK2NsYXNzIExvY2FsTGF5ZXJTb3VyY2UoTGF5ZXJTb3VyY2UpOgorICAgIGNsYXNzIE1ldGEoTGF5ZXJTb3VyY2UuX21ldGEuX19jbGFzc19fKToKKyAgICAgICAgcHJveHkgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoTG9jYWxMYXllclNvdXJjZSwgc2VsZikuX19pbml0X18oYXJncywga3dhcmdzKQorICAgICAgICBzZWxmLnNvdXJjZXR5cGUgPSBMYXllclNvdXJjZS5UWVBFX0xPQ0FMCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEZldGNoZXMgbGF5ZXIsIHJlY2lwZSBhbmQgbWFjaGluZSBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworY2xhc3MgSW1wb3J0ZWRMYXllclNvdXJjZShMYXllclNvdXJjZSk6CisgICAgY2xhc3MgTWV0YShMYXllclNvdXJjZS5fbWV0YS5fX2NsYXNzX18pOgorICAgICAgICBwcm94eSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihJbXBvcnRlZExheWVyU291cmNlLCBzZWxmKS5fX2luaXRfXyhhcmdzLCBrd2FyZ3MpCisgICAgICAgIHNlbGYuc291cmNldHlwZSA9IExheWVyU291cmNlLlRZUEVfSU1QT1JURUQKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgRmV0Y2hlcyBsYXllciwgcmVjaXBlIGFuZCBtYWNoaW5lIGluZm9ybWF0aW9uIGZyb20gbG9jYWwgcmVwb3NpdG9yeQorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIExheWVySW5kZXhMYXllclNvdXJjZShMYXllclNvdXJjZSk6CisgICAgY2xhc3MgTWV0YShMYXllclNvdXJjZS5fbWV0YS5fX2NsYXNzX18pOgorICAgICAgICBwcm94eSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllckluZGV4TGF5ZXJTb3VyY2UsIHNlbGYpLl9faW5pdF9fKGFyZ3MsIGt3YXJncykKKyAgICAgICAgc2VsZi5zb3VyY2V0eXBlID0gTGF5ZXJTb3VyY2UuVFlQRV9MQVlFUklOREVYCisKKyAgICBkZWYgZ2V0X29iamVjdF92aWV3KHNlbGYsIGJyYW5jaCwgb2JqZWN0eXBlLCB1cGlkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXBpdXJsICsgIi4uL2JyYW5jaC8iICsgYnJhbmNoLm5hbWUgKyAiLyIgKyBvYmplY3R5cGUgKyAiLz9xPSIgKyBzdHIodXBpZCkKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICAgICAgRmV0Y2hlcyBsYXllciwgcmVjaXBlIGFuZCBtYWNoaW5lIGluZm9ybWF0aW9uIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkKKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBzZWxmLmFwaXVybCBpcyBub3QgTm9uZQorICAgICAgICBmcm9tIGRqYW5nby5kYiBpbXBvcnQgdHJhbnNhY3Rpb24sIGNvbm5lY3Rpb24KKworICAgICAgICBpbXBvcnQgdXJsbGliMiwgdXJscGFyc2UsIGpzb24KKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHByb3h5X3NldHRpbmdzID0gb3MuZW52aXJvbi5nZXQoImh0dHBfcHJveHkiLCBOb25lKQorCisgICAgICAgIGRlZiBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpdXJsID0gc2VsZi5hcGl1cmwpOgorICAgICAgICAgICAgX3BhcnNlZHVybCA9IHVybHBhcnNlLnVybHBhcnNlKGFwaXVybCkKKyAgICAgICAgICAgIHBhdGggPSBfcGFyc2VkdXJsLnBhdGgKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlcyA9IHVybGxpYjIudXJsb3BlbihhcGl1cmwpCisgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIHJlYWQgJXM6ICVzIiAlIChwYXRoLCBlLnJlYXNvbikpCisKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlcy5yZWFkKCkpCisKKyAgICAgICAgIyB2ZXJpZnkgd2UgY2FuIGdldCB0aGUgYmFzaWMgYXBpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFwaWxpbmtzID0gX2dldF9qc29uX3Jlc3BvbnNlKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgaWYgcHJveHlfc2V0dGluZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkVFOiBVc2luZyBwcm94eSAlcyIgJSBwcm94eV9zZXR0aW5ncykKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJFRTogY291bGQgbm90IGNvbm5lY3QgdG8gJXMsIHNraXBwaW5nIHVwZGF0ZTogJXNcbiVzIiAlIChzZWxmLmFwaXVybCwgZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoZSkpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyB1cGRhdGUgYnJhbmNoZXM7IG9ubHkgdGhvc2UgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgbmFtZXMgbGlzdGVkIGluIHRoZQorICAgICAgICAjIFJlbGVhc2VzIHRhYmxlCisgICAgICAgIHdoaXRlbGlzdF9icmFuY2hfbmFtZXMgPSBtYXAobGFtYmRhIHg6IHguYnJhbmNoX25hbWUsIFJlbGVhc2Uub2JqZWN0cy5hbGwoKSkKKyAgICAgICAgaWYgbGVuKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBtYWtlIGxpc3Qgb2YgYnJhbmNoZXMgdG8gZmV0Y2giKQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgYnJhbmNoZXMiKQorICAgICAgICBicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydicmFuY2hlcyddCisgICAgICAgICAgICArICI/ZmlsdGVyPW5hbWU6JXMiICUgIk9SIi5qb2luKHdoaXRlbGlzdF9icmFuY2hfbmFtZXMpKQorICAgICAgICBmb3IgYmkgaW4gYnJhbmNoZXNfaW5mbzoKKyAgICAgICAgICAgIGIsIGNyZWF0ZWQgPSBCcmFuY2gub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsIG5hbWUgPSBiaVsnbmFtZSddKQorICAgICAgICAgICAgYi51cF9pZCA9IGJpWydpZCddCisgICAgICAgICAgICBiLnVwX2RhdGUgPSBiaVsndXBkYXRlZCddCisgICAgICAgICAgICBiLm5hbWUgPSBiaVsnbmFtZSddCisgICAgICAgICAgICBiLnNob3J0X2Rlc2NyaXB0aW9uID0gYmlbJ3Nob3J0X2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIGIuc2F2ZSgpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXJzCisgICAgICAgIGxheWVyc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckl0ZW1zJ10pCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIGxpIGluIGxheWVyc19pbmZvOgorICAgICAgICAgICAgbCwgY3JlYXRlZCA9IExheWVyLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCBuYW1lID0gbGlbJ25hbWUnXSkKKyAgICAgICAgICAgIGwudXBfaWQgPSBsaVsnaWQnXQorICAgICAgICAgICAgbC51cF9kYXRlID0gbGlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbC52Y3NfdXJsID0gbGlbJ3Zjc191cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX3VybCA9IGxpWyd2Y3Nfd2ViX3VybCddCisgICAgICAgICAgICBsLnZjc193ZWJfdHJlZV9iYXNlX3VybCA9IGxpWyd2Y3Nfd2ViX3RyZWVfYmFzZV91cmwnXQorICAgICAgICAgICAgbC52Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBsaVsndmNzX3dlYl9maWxlX2Jhc2VfdXJsJ10KKyAgICAgICAgICAgIGwuc3VtbWFyeSA9IGxpWydzdW1tYXJ5J10KKyAgICAgICAgICAgIGwuZGVzY3JpcHRpb24gPSBsaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgbC5zYXZlKCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXJicmFuY2hlcy9sYXllcl92ZXJzaW9ucworICAgICAgICBsb2dnZXIuZGVidWcoIkZldGNoaW5nIGxheWVyIGluZm9ybWF0aW9uIikKKyAgICAgICAgbGF5ZXJicmFuY2hlc19pbmZvID0gX2dldF9qc29uX3Jlc3BvbnNlKGFwaWxpbmtzWydsYXllckJyYW5jaGVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWJyYW5jaDolcyIgJSAiT1IiLmpvaW4obWFwKGxhbWJkYSB4OiBzdHIoeC51cF9pZCksIFtpIGZvciBpIGluIEJyYW5jaC5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSBpZiBpLnVwX2lkIGlzIG5vdCBOb25lXSApKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChGYWxzZSkKKyAgICAgICAgZm9yIGxiaSBpbiBsYXllcmJyYW5jaGVzX2luZm86CisgICAgICAgICAgICBsdiwgY3JlYXRlZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXRfb3JfY3JlYXRlKGxheWVyX3NvdXJjZSA9IHNlbGYsCisgICAgICAgICAgICAgICAgICAgIHVwX2lkID0gbGJpWydpZCddLAorICAgICAgICAgICAgICAgICAgICBsYXllcj1MYXllci5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IGxiaVsnbGF5ZXInXSkKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGx2LnVwX2RhdGUgPSBsYmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbHYudXBfYnJhbmNoID0gQnJhbmNoLm9iamVjdHMuZ2V0KGxheWVyX3NvdXJjZSA9IHNlbGYsIHVwX2lkID0gbGJpWydicmFuY2gnXSkKKyAgICAgICAgICAgIGx2LmJyYW5jaCA9IGxiaVsnYWN0dWFsX2JyYW5jaCddCisgICAgICAgICAgICBsdi5jb21taXQgPSBsYmlbJ2FjdHVhbF9icmFuY2gnXQorICAgICAgICAgICAgbHYuZGlycGF0aCA9IGxiaVsndmNzX3N1YmRpciddCisgICAgICAgICAgICBsdi5zYXZlKCkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgbGF5ZXIgZGVwZW5kZW5jaWVzCisgICAgICAgIGxheWVyZGVwZW5kZW5jaWVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ2xheWVyRGVwZW5kZW5jaWVzJ10pCisgICAgICAgIGRlcGVuZGxpc3QgPSB7fQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoRmFsc2UpCisgICAgICAgIGZvciBsZGkgaW4gbGF5ZXJkZXBlbmRlbmNpZXNfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsdiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBsZGlbJ2xheWVyYnJhbmNoJ10pCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3QgYXMgZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBsdiBub3QgaW4gZGVwZW5kbGlzdDoKKyAgICAgICAgICAgICAgICBkZXBlbmRsaXN0W2x2XSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVwZW5kbGlzdFtsdl0uYXBwZW5kKExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgbGF5ZXJfX3VwX2lkID0gbGRpWydkZXBlbmRlbmN5J10sIHVwX2JyYW5jaCA9IGx2LnVwX2JyYW5jaCkpCisgICAgICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkNhbm5vdCBmaW5kIGxheWVyIHZlcnNpb24gKGxzOiVzKSwgdXBfaWQ6JXMgbHY6JXMiICUgKHNlbGYsIGxkaVsnZGVwZW5kZW5jeSddLCBsdikpCisKKyAgICAgICAgZm9yIGx2IGluIGRlcGVuZGxpc3Q6CisgICAgICAgICAgICBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKGxheWVyX3ZlcnNpb24gPSBsdikuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBsdmQgaW4gZGVwZW5kbGlzdFtsdl06CisgICAgICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfdmVyc2lvbiA9IGx2LCBkZXBlbmRzX29uID0gbHZkKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworCisgICAgICAgICMgdXBkYXRlIG1hY2hpbmVzCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmV0Y2hpbmcgbWFjaGluZSBpbmZvcm1hdGlvbiIpCisgICAgICAgIG1hY2hpbmVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ21hY2hpbmVzJ10KKyAgICAgICAgICAgICAgICArICI/ZmlsdGVyPWxheWVyYnJhbmNoOiVzIiAlICJPUiIuam9pbihtYXAobGFtYmRhIHg6IHN0cih4LnVwX2lkKSwgTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihsYXllcl9zb3VyY2UgPSBzZWxmKSkpCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgbWkgaW4gbWFjaGluZXNfaW5mbzoKKyAgICAgICAgICAgIG1vLCBjcmVhdGVkID0gTWFjaGluZS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBtaVsnaWQnXSwgbGF5ZXJfdmVyc2lvbiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQobGF5ZXJfc291cmNlID0gc2VsZiwgdXBfaWQgPSBtaVsnbGF5ZXJicmFuY2gnXSkpCisgICAgICAgICAgICBtby51cF9kYXRlID0gbWlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgbW8ubmFtZSA9IG1pWyduYW1lJ10KKyAgICAgICAgICAgIG1vLmRlc2NyaXB0aW9uID0gbWlbJ2Rlc2NyaXB0aW9uJ10KKyAgICAgICAgICAgIG1vLnNhdmUoKQorCisgICAgICAgIGlmIG5vdCBjb25uZWN0aW9uLmZlYXR1cmVzLmF1dG9jb21taXRzX3doZW5fYXV0b2NvbW1pdF9pc19vZmY6CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5zZXRfYXV0b2NvbW1pdChUcnVlKQorCisgICAgICAgICMgdXBkYXRlIHJlY2lwZXM7IHBhZ2luYXRlIGJ5IGxheWVyIHZlcnNpb24gLyBsYXllciBicmFuY2gKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJGZXRjaGluZyB0YXJnZXQgaW5mb3JtYXRpb24iKQorICAgICAgICByZWNpcGVzX2luZm8gPSBfZ2V0X2pzb25fcmVzcG9uc2UoYXBpbGlua3NbJ3JlY2lwZXMnXQorICAgICAgICAgICAgICAgICsgIj9maWx0ZXI9bGF5ZXJicmFuY2g6JXMiICUgIk9SIi5qb2luKG1hcChsYW1iZGEgeDogc3RyKHgudXBfaWQpLCBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGxheWVyX3NvdXJjZSA9IHNlbGYpKSkKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgbm90IGNvbm5lY3Rpb24uZmVhdHVyZXMuYXV0b2NvbW1pdHNfd2hlbl9hdXRvY29tbWl0X2lzX29mZjoKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLnNldF9hdXRvY29tbWl0KEZhbHNlKQorICAgICAgICBmb3IgcmkgaW4gcmVjaXBlc19pbmZvOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJvLCBjcmVhdGVkID0gUmVjaXBlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydpZCddLCBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChsYXllcl9zb3VyY2UgPSBzZWxmLCB1cF9pZCA9IHJpWydsYXllcmJyYW5jaCddKSkKKyAgICAgICAgICAgICAgICByby51cF9kYXRlID0gcmlbJ3VwZGF0ZWQnXQorICAgICAgICAgICAgICAgIHJvLm5hbWUgPSByaVsncG4nXQorICAgICAgICAgICAgICAgIHJvLnZlcnNpb24gPSByaVsncHYnXQorICAgICAgICAgICAgICAgIHJvLnN1bW1hcnkgPSByaVsnc3VtbWFyeSddCisgICAgICAgICAgICAgICAgcm8uZGVzY3JpcHRpb24gPSByaVsnZGVzY3JpcHRpb24nXQorICAgICAgICAgICAgICAgIHJvLnNlY3Rpb24gPSByaVsnc2VjdGlvbiddCisgICAgICAgICAgICAgICAgcm8ubGljZW5zZSA9IHJpWydsaWNlbnNlJ10KKyAgICAgICAgICAgICAgICByby5ob21lcGFnZSA9IHJpWydob21lcGFnZSddCisgICAgICAgICAgICAgICAgcm8uYnVndHJhY2tlciA9IHJpWydidWd0cmFja2VyJ10KKyAgICAgICAgICAgICAgICByby5maWxlX3BhdGggPSByaVsnZmlsZXBhdGgnXSArICIvIiArIHJpWydmaWxlbmFtZSddCisgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRzJyBpbiByaToKKyAgICAgICAgICAgICAgICAgICAgcm8uaXNfaW1hZ2UgPSAnaW1hZ2UnIGluIHJpWydpbmhlcml0cyddLnNwbGl0KCkKKyAgICAgICAgICAgICAgICByby5zYXZlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlZ3JpdHlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmFpbGVkIHNhdmluZyByZWNpcGUsIGlnbm9yaW5nOiAlcyAoJXM6JXMpIiAlIChlLCByby5sYXllcl92ZXJzaW9uLCByaVsnZmlsZXBhdGgnXSsiLyIrcmlbJ2ZpbGVuYW1lJ10pKQorICAgICAgICBpZiBub3QgY29ubmVjdGlvbi5mZWF0dXJlcy5hdXRvY29tbWl0c193aGVuX2F1dG9jb21taXRfaXNfb2ZmOgorICAgICAgICAgICAgdHJhbnNhY3Rpb24uc2V0X2F1dG9jb21taXQoVHJ1ZSkKKworY2xhc3MgQml0YmFrZVZlcnNpb24obW9kZWxzLk1vZGVsKToKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MzIsIHVuaXF1ZSA9IFRydWUpCisgICAgZ2l0dXJsID0gR2l0VVJMRmllbGQoKQorICAgIGJyYW5jaCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0zMikKKyAgICBkaXJwYXRoID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoQnJhbmNoOiAlcykiICUgKHNlbGYubmFtZSwgc2VsZi5icmFuY2gpCisKKworY2xhc3MgUmVsZWFzZShtb2RlbHMuTW9kZWwpOgorICAgICIiIiBBIHJlbGVhc2UgaXMgYSBwcm9qZWN0IHRlbXBsYXRlLCB1c2VkIHRvIHByZS1wb3B1bGF0ZSBQcm9qZWN0IHNldHRpbmdzIHdpdGggYSBjb25maWd1cmF0aW9uIHNldCAiIiIKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTMyLCB1bmlxdWUgPSBUcnVlKQorICAgIGRlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTI1NSkKKyAgICBiaXRiYWtlX3ZlcnNpb24gPSBtb2RlbHMuRm9yZWlnbktleShCaXRiYWtlVmVyc2lvbikKKyAgICBicmFuY2hfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD01MCwgZGVmYXVsdCA9ICIiKQorICAgIGhlbHB0ZXh0ID0gbW9kZWxzLlRleHRGaWVsZChudWxsPVRydWUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5uYW1lLCBzZWxmLmJyYW5jaF9uYW1lKQorCitjbGFzcyBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eShtb2RlbHMuTW9kZWwpOgorICAgICIiIiBFYWNoIHJlbGVhc2Ugc2VsZWN0cyBsYXllcnMgZnJvbSB0aGUgc2V0IHVwIGxheWVyIHNvdXJjZXMsIG9yZGVyZWQgYnkgcHJpb3JpdHkgIiIiCisgICAgcmVsZWFzZSA9IG1vZGVscy5Gb3JlaWduS2V5KCJSZWxlYXNlIikKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleSgiTGF5ZXJTb3VyY2UiKQorICAgIHByaW9yaXR5ID0gbW9kZWxzLkludGVnZXJGaWVsZChkZWZhdWx0ID0gMCkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy0lczolZCIgJSAoc2VsZi5yZWxlYXNlLm5hbWUsIHNlbGYubGF5ZXJfc291cmNlLm5hbWUsIHNlbGYucHJpb3JpdHkpCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgncmVsZWFzZScsICdsYXllcl9zb3VyY2UnKSwpCisKKworY2xhc3MgUmVsZWFzZURlZmF1bHRMYXllcihtb2RlbHMuTW9kZWwpOgorICAgIHJlbGVhc2UgPSBtb2RlbHMuRm9yZWlnbktleShSZWxlYXNlKQorICAgIGxheWVyX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwLCBkZWZhdWx0PSIiKQorCisKKyMgQnJhbmNoIGNsYXNzIGlzIHN5bmNlZCB3aXRoIGxheWVyaW5kZXguQnJhbmNoLCBicmFuY2hlcyBjYW4gb25seSBjb21lIGZyb20gcmVtb3RlIGxheWVyIGluZGV4ZXMKK2NsYXNzIEJyYW5jaChtb2RlbHMuTW9kZWwpOgorICAgIGxheWVyX3NvdXJjZSA9IG1vZGVscy5Gb3JlaWduS2V5KCdMYXllclNvdXJjZScsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gVHJ1ZSkKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBicmFuY2ggaW4gdGhlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBuYW1lID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwKQorICAgIHNob3J0X2Rlc2NyaXB0aW9uID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTUwLCBibGFuaz1UcnVlKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdmVyYm9zZV9uYW1lX3BsdXJhbCA9ICJCcmFuY2hlcyIKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCgnbGF5ZXJfc291cmNlJywgJ25hbWUnKSwoJ2xheWVyX3NvdXJjZScsICd1cF9pZCcpKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKworIyBMYXllciBjbGFzcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVySXRlbQorY2xhc3MgTGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgIyBmcm9tIHdoZXJlIGRpZCB3ZSBnb3QgdGhpcyBsYXllcgorICAgIHVwX2lkID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpICAgICAgICAgICAgICAgICAgICAjIGlkIG9mIGxheWVyIGluIHRoZSByZW1vdGUgc291cmNlCisgICAgdXBfZGF0ZSA9IG1vZGVscy5EYXRlVGltZUZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIGxheWVyX2luZGV4X3VybCA9IG1vZGVscy5VUkxGaWVsZCgpCisgICAgdmNzX3VybCA9IEdpdFVSTEZpZWxkKGRlZmF1bHQgPSBOb25lLCBudWxsID0gVHJ1ZSkKKyAgICB2Y3Nfd2ViX3VybCA9IG1vZGVscy5VUkxGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdmNzX3dlYl90cmVlX2Jhc2VfdXJsID0gbW9kZWxzLlVSTEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKyAgICB2Y3Nfd2ViX2ZpbGVfYmFzZV91cmwgPSBtb2RlbHMuVVJMRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKQorCisgICAgc3VtbWFyeSA9IG1vZGVscy5UZXh0RmllbGQoaGVscF90ZXh0PSdPbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGF5ZXInLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAvICVzICIgJSAoc2VsZi5uYW1lLCBzZWxmLmxheWVyX3NvdXJjZSkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoImxheWVyX3NvdXJjZSIsICJ1cF9pZCIpLCAoImxheWVyX3NvdXJjZSIsICJuYW1lIikpCisKKworIyBMYXllckNvbW1pdCBjbGFzcyBpcyBzeW5jZWQgd2l0aCBsYXllcmluZGV4LkxheWVyQnJhbmNoCitjbGFzcyBMYXllcl9WZXJzaW9uKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyJsYXllcl9fbmFtZSIsICJsYXllcl9fc3VtbWFyeSIsICJsYXllcl9fZGVzY3JpcHRpb24iLCAibGF5ZXJfX3Zjc191cmwiLCAiZGlycGF0aCIsICJ1cF9icmFuY2hfX25hbWUiLCAiY29tbWl0IiwgImJyYW5jaCJdCisgICAgYnVpbGQgPSBtb2RlbHMuRm9yZWlnbktleShCdWlsZCwgcmVsYXRlZF9uYW1lPSdsYXllcl92ZXJzaW9uX2J1aWxkJywgZGVmYXVsdCA9IE5vbmUsIG51bGwgPSBUcnVlKQorICAgIGxheWVyID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXIsIHJlbGF0ZWRfbmFtZT0nbGF5ZXJfdmVyc2lvbl9sYXllcicpCisKKyAgICBsYXllcl9zb3VyY2UgPSBtb2RlbHMuRm9yZWlnbktleShMYXllclNvdXJjZSwgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAjIGZyb20gd2hlcmUgZGlkIHdlIGdldCB0aGlzIExheWVyIFZlcnNpb24KKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQorICAgIHVwX2RhdGUgPSBtb2RlbHMuRGF0ZVRpbWVGaWVsZChudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisgICAgdXBfYnJhbmNoID0gbW9kZWxzLkZvcmVpZ25LZXkoQnJhbmNoLCBudWxsID0gVHJ1ZSwgZGVmYXVsdCA9IE5vbmUpCisKKyAgICBicmFuY2ggPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9ODApICAgICAgICAgICAgIyBMYXllckJyYW5jaC5hY3R1YWxfYnJhbmNoCisgICAgY29tbWl0ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkgICAgICAgICAgICMgTGF5ZXJCcmFuY2gudmNzX2xhc3RfcmV2CisgICAgZGlycGF0aCA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yNTUsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICAgICAgICAgIyBMYXllckJyYW5jaC52Y3Nfc3ViZGlyCisgICAgcHJpb3JpdHkgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGRlZmF1bHQgPSAwKSAgICAgICAgICMgaWYgLTEsIHRoaXMgaXMgYSBkZWZhdWx0IGxheWVyCisKKyAgICBsb2NhbF9wYXRoID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0xMDI0LCBkZWZhdWx0ID0gIi8iKSAgIyB3aGVyZSB0aGlzIGxheWVyIHdhcyBjaGVja2VkLW91dAorCisgICAgcHJvamVjdCA9IG1vZGVscy5Gb3JlaWduS2V5KCdQcm9qZWN0JywgbnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICMgU2V0IGlmIHRoaXMgbGF5ZXIgaXMgcHJvamVjdC1zcGVjaWZpYzsgYWx3YXlzIHNldCBmb3IgaW1wb3J0ZWQgbGF5ZXJzLCBhbmQgcHJvamVjdC1zZXQgYnJhbmNoZXMKKworICAgICMgY29kZSBsaWZ0ZWQsIHdpdGggYWRhcHRhdGlvbnMsIGZyb20gdGhlIGxheWVyaW5kZXgtd2ViIGFwcGxpY2F0aW9uIGh0dHBzOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9sYXllcmluZGV4LXdlYi8KKyAgICBkZWYgX2hhbmRsZV91cmxfcGF0aChzZWxmLCBiYXNlX3VybCwgcGF0aCk6CisgICAgICAgIGltcG9ydCByZSwgcG9zaXhwYXRoCisgICAgICAgIGlmIGJhc2VfdXJsOgorICAgICAgICAgICAgaWYgc2VsZi5kaXJwYXRoOgorICAgICAgICAgICAgICAgIGlmIHBhdGg6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBzZWxmLmRpcnBhdGggKyAnLycgKyBwYXRoCisgICAgICAgICAgICAgICAgICAgICMgTm9ybWFsaXNlIG91dCAuLi8gaW4gcGF0aCBmb3IgdXNhZ2UgVVJMCisgICAgICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgoZXh0cmFfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgIyBNaW5vciB3b3JrYXJvdW5kIHRvIGhhbmRsZSBjYXNlIHdoZXJlIHN1YmRpcmVjdG9yeSBoYXMgYmVlbiBhZGRlZCBiZXR3ZWVuIGJyYW5jaGVzCisgICAgICAgICAgICAgICAgICAgICMgKHNob3VsZCBwcm9iYWJseSBzdXBwb3J0IHVzYWdlIFVSTCBwZXIgYnJhbmNoIHRvIGhhbmRsZSB0aGlzLi4uIHNpZ2guLi4pCisgICAgICAgICAgICAgICAgICAgIGlmIGV4dHJhX3BhdGguc3RhcnRzd2l0aCgnLi4vJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gZXh0cmFfcGF0aFszOl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHRyYV9wYXRoID0gc2VsZi5kaXJwYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBwYXRoCisgICAgICAgICAgICBicmFuY2huYW1lID0gc2VsZi51cF9icmFuY2gubmFtZQorICAgICAgICAgICAgdXJsID0gYmFzZV91cmwucmVwbGFjZSgnJWJyYW5jaCUnLCBicmFuY2huYW1lKQorCisgICAgICAgICAgICAjIElmIHRoZXJlJ3MgYSAlIGluIHRoZSBwYXRoIChlLmcuIGEgd2lsZGNhcmQgYmJhcHBlbmQpIHdlIG5lZWQgdG8gZW5jb2RlIGl0CisgICAgICAgICAgICBpZiBleHRyYV9wYXRoOgorICAgICAgICAgICAgICAgIGV4dHJhX3BhdGggPSBleHRyYV9wYXRoLnJlcGxhY2UoJyUnLCAnJTI1JykKKworICAgICAgICAgICAgaWYgJyVwYXRoJScgaW4gYmFzZV91cmw6CisgICAgICAgICAgICAgICAgaWYgZXh0cmFfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gcmUuc3ViKHInXFsoW15cXV0qJXBhdGglW15cXV0qKVxdJywgJ1xcMScsIHVybCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1cmwgPSByZS5zdWIocidcWyhbXlxdXSolcGF0aCVbXlxdXSopXF0nLCAnJywgdXJsKQorICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnJXBhdGglJywgZXh0cmFfcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGV4dHJhX3BhdGgKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBnZXRfdmNzX2xpbmtfdXJsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmxheWVyLnZjc193ZWJfdXJsIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5sYXllci52Y3Nfd2ViX3VybAorCisgICAgZGVmIGdldF92Y3NfZmlsZV9saW5rX3VybChzZWxmLCBmaWxlX3BhdGg9IiIpOgorICAgICAgICBpZiBzZWxmLmxheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV91cmxfcGF0aChzZWxmLmxheWVyLnZjc193ZWJfZmlsZV9iYXNlX3VybCwgZmlsZV9wYXRoKQorCisgICAgZGVmIGdldF92Y3NfZGlycGF0aF9saW5rX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdXJsX3BhdGgoc2VsZi5sYXllci52Y3Nfd2ViX3RyZWVfYmFzZV91cmwsICcnKQorCisgICAgZGVmIGdldF9lcXVpdmFsZW50c193cHJpb3JpdHkoc2VsZiwgcHJvamVjdCk6CisgICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhsYXllcl9uYW1lID0gc2VsZi5sYXllci5uYW1lKQorCisgICAgZGVmIGdldF92Y3NfcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbW1pdCBpcyBub3QgTm9uZSBhbmQgbGVuKHNlbGYuY29tbWl0KSA+IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQKKyAgICAgICAgaWYgc2VsZi5icmFuY2ggaXMgbm90IE5vbmUgYW5kIGxlbihzZWxmLmJyYW5jaCkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnJhbmNoCisgICAgICAgIGlmIHNlbGYudXBfYnJhbmNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudXBfYnJhbmNoLm5hbWUKKyAgICAgICAgcmV0dXJuICgiQ2Fubm90IGRldGVybWluZSB0aGUgdmNzX3JlZmVyZW5jZSBmb3IgbGF5ZXIgdmVyc2lvbiAlcyIgJSB2YXJzKHNlbGYpKQorCisgICAgZGVmIGdldF9kZXRhaWxzcGFnZV91cmwoc2VsZiwgcHJvamVjdF9pZCk6CisgICAgICAgIHJldHVybiByZXZlcnNlKCdsYXllcmRldGFpbHMnLCBhcmdzPShwcm9qZWN0X2lkLCBzZWxmLnBrKSkKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlZCAlcyAoVkNTICVzLCBQcm9qZWN0ICVzKSIgJSAoc2VsZi5waywgc3RyKHNlbGYubGF5ZXIpLCBzZWxmLmdldF92Y3NfcmVmZXJlbmNlKCksIHNlbGYuYnVpbGQucHJvamVjdCBpZiBzZWxmLmJ1aWxkIGlzIG5vdCBOb25lIGVsc2UgIk5vIHByb2plY3QiKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorCitjbGFzcyBMYXllclZlcnNpb25EZXBlbmRlbmN5KG1vZGVscy5Nb2RlbCk6CisgICAgbGF5ZXJfc291cmNlID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJTb3VyY2UsIG51bGwgPSBUcnVlLCBkZWZhdWx0ID0gTm9uZSkgICMgZnJvbSB3aGVyZSBkaWQgd2UgZ290IHRoaXMgbGF5ZXIKKyAgICB1cF9pZCA9IG1vZGVscy5JbnRlZ2VyRmllbGQobnVsbCA9IFRydWUsIGRlZmF1bHQgPSBOb25lKSAgICAgICAgICAgICAgICAgICAgIyBpZCBvZiBsYXllcmJyYW5jaCBpbiB0aGUgcmVtb3RlIHNvdXJjZQorCisgICAgbGF5ZXJfdmVyc2lvbiA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIHJlbGF0ZWRfbmFtZT0iZGVwZW5kZW5jaWVzIikKKyAgICBkZXBlbmRzX29uID0gbW9kZWxzLkZvcmVpZ25LZXkoTGF5ZXJfVmVyc2lvbiwgcmVsYXRlZF9uYW1lPSJkZXBlbmRlZXMiKQorCisgICAgY2xhc3MgTWV0YToKKyAgICAgICAgdW5pcXVlX3RvZ2V0aGVyID0gKCJsYXllcl9zb3VyY2UiLCAidXBfaWQiKQorCitjbGFzcyBQcm9qZWN0TGF5ZXIobW9kZWxzLk1vZGVsKToKKyAgICBwcm9qZWN0ID0gbW9kZWxzLkZvcmVpZ25LZXkoUHJvamVjdCkKKyAgICBsYXllcmNvbW1pdCA9IG1vZGVscy5Gb3JlaWduS2V5KExheWVyX1ZlcnNpb24sIG51bGw9VHJ1ZSkKKyAgICBvcHRpb25hbCA9IG1vZGVscy5Cb29sZWFuRmllbGQoZGVmYXVsdCA9IFRydWUpCisKKyAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMsICVzIiAlIChzZWxmLnByb2plY3QubmFtZSwgc2VsZi5sYXllcmNvbW1pdCkKKworICAgIGNsYXNzIE1ldGE6CisgICAgICAgIHVuaXF1ZV90b2dldGhlciA9ICgoInByb2plY3QiLCAibGF5ZXJjb21taXQiKSwpCisKK2NsYXNzIFByb2plY3RWYXJpYWJsZShtb2RlbHMuTW9kZWwpOgorICAgIHByb2plY3QgPSBtb2RlbHMuRm9yZWlnbktleShQcm9qZWN0KQorICAgIG5hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHZhbHVlID0gbW9kZWxzLlRleHRGaWVsZChibGFuayA9IFRydWUpCisKK2NsYXNzIFZhcmlhYmxlKG1vZGVscy5Nb2RlbCk6CisgICAgc2VhcmNoX2FsbG93ZWRfZmllbGRzID0gWyd2YXJpYWJsZV9uYW1lJywgJ3ZhcmlhYmxlX3ZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZoaXN0b3J5X19maWxlX25hbWUnLCAiZGVzY3JpcHRpb24iXQorICAgIGJ1aWxkID0gbW9kZWxzLkZvcmVpZ25LZXkoQnVpbGQsIHJlbGF0ZWRfbmFtZT0ndmFyaWFibGVfYnVpbGQnKQorICAgIHZhcmlhYmxlX25hbWUgPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MTAwKQorICAgIHZhcmlhYmxlX3ZhbHVlID0gbW9kZWxzLlRleHRGaWVsZChibGFuaz1UcnVlKQorICAgIGNoYW5nZWQgPSBtb2RlbHMuQm9vbGVhbkZpZWxkKGRlZmF1bHQ9RmFsc2UpCisgICAgaHVtYW5fcmVhZGFibGVfbmFtZSA9IG1vZGVscy5DaGFyRmllbGQobWF4X2xlbmd0aD0yMDApCisgICAgZGVzY3JpcHRpb24gPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisKK2NsYXNzIFZhcmlhYmxlSGlzdG9yeShtb2RlbHMuTW9kZWwpOgorICAgIHZhcmlhYmxlID0gbW9kZWxzLkZvcmVpZ25LZXkoVmFyaWFibGUsIHJlbGF0ZWRfbmFtZT0ndmhpc3RvcnknKQorICAgIHZhbHVlICAgPSBtb2RlbHMuVGV4dEZpZWxkKGJsYW5rPVRydWUpCisgICAgZmlsZV9uYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUpCisgICAgbGluZV9udW1iZXIgPSBtb2RlbHMuSW50ZWdlckZpZWxkKG51bGw9VHJ1ZSkKKyAgICBvcGVyYXRpb24gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9NjQpCisKK2NsYXNzIEhlbHBUZXh0KG1vZGVscy5Nb2RlbCk6CisgICAgVkFSSUFCTEUgPSAwCisgICAgSEVMUFRFWFRfQVJFQSA9ICgoVkFSSUFCTEUsICd2YXJpYWJsZScpLCApCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkLCByZWxhdGVkX25hbWU9J2hlbHB0ZXh0X2J1aWxkJykKKyAgICBhcmVhID0gbW9kZWxzLkludGVnZXJGaWVsZChjaG9pY2VzPUhFTFBURVhUX0FSRUEpCisgICAga2V5ID0gbW9kZWxzLkNoYXJGaWVsZChtYXhfbGVuZ3RoPTEwMCkKKyAgICB0ZXh0ID0gbW9kZWxzLlRleHRGaWVsZCgpCisKK2NsYXNzIExvZ01lc3NhZ2UobW9kZWxzLk1vZGVsKToKKyAgICBFWENFUFRJT04gPSAtMSAgICAgICMgdXNlZCB0byBzaWduYWwgc2VsZi10b2FzdGVyLWV4Y2VwdGlvbnMKKyAgICBJTkZPID0gMAorICAgIFdBUk5JTkcgPSAxCisgICAgRVJST1IgPSAyCisKKyAgICBMT0dfTEVWRUwgPSAoIChJTkZPLCAiaW5mbyIpLAorICAgICAgICAgICAgKFdBUk5JTkcsICJ3YXJuIiksCisgICAgICAgICAgICAoRVJST1IsICJlcnJvciIpLAorICAgICAgICAgICAgKEVYQ0VQVElPTiwgInRvYXN0ZXIgZXhjZXB0aW9uIikpCisKKyAgICBidWlsZCA9IG1vZGVscy5Gb3JlaWduS2V5KEJ1aWxkKQorICAgIHRhc2sgID0gbW9kZWxzLkZvcmVpZ25LZXkoVGFzaywgYmxhbmsgPSBUcnVlLCBudWxsPVRydWUpCisgICAgbGV2ZWwgPSBtb2RlbHMuSW50ZWdlckZpZWxkKGNob2ljZXM9TE9HX0xFVkVMLCBkZWZhdWx0PUlORk8pCisgICAgbWVzc2FnZT1tb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9MjQwKQorICAgIHBhdGhuYW1lID0gbW9kZWxzLkZpbGVQYXRoRmllbGQobWF4X2xlbmd0aD0yNTUsIGJsYW5rPVRydWUpCisgICAgbGluZW5vID0gbW9kZWxzLkludGVnZXJGaWVsZChudWxsPVRydWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAlcyAlcyIgJSAoc2VsZi5nZXRfbGV2ZWxfZGlzcGxheSgpLCBzZWxmLm1lc3NhZ2UsIHNlbGYuYnVpbGQpCisKK2RlZiBpbnZhbGlkYXRlX2NhY2hlKCoqa3dhcmdzKToKKyAgICBmcm9tIGRqYW5nby5jb3JlLmNhY2hlIGltcG9ydCBjYWNoZQorICAgIHRyeToKKyAgICAgIGNhY2hlLmNsZWFyKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICBsb2dnZXIud2FybmluZygiUHJvYmxlbSB3aXRoIGNhY2hlIGJhY2tlbmQ6IEZhaWxlZCB0byBjbGVhciBjYWNoZTogJXMiICUgZSkKKworZGphbmdvLmRiLm1vZGVscy5zaWduYWxzLnBvc3Rfc2F2ZS5jb25uZWN0KGludmFsaWRhdGVfY2FjaGUpCitkamFuZ28uZGIubW9kZWxzLnNpZ25hbHMucG9zdF9kZWxldGUuY29ubmVjdChpbnZhbGlkYXRlX2NhY2hlKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL29ybS90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODNhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci9vcm0vdGVzdHMucHkKQEAgLTAsMCArMSwxODcgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIiIiVGVzdCBjYXNlcyBmb3IgVG9hc3RlciBPUk0uIiIiCisKK2Zyb20gZGphbmdvLnRlc3QgaW1wb3J0IFRlc3RDYXNlLCBUcmFuc2FjdGlvblRlc3RDYXNlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IExvY2FsTGF5ZXJTb3VyY2UsIExheWVySW5kZXhMYXllclNvdXJjZSwgSW1wb3J0ZWRMYXllclNvdXJjZSwgTGF5ZXJTb3VyY2UKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnJhbmNoCisKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdCwgQnVpbGQsIExheWVyLCBMYXllcl9WZXJzaW9uLCBCcmFuY2gsIFByb2plY3RMYXllcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBSZWxlYXNlLCBSZWxlYXNlTGF5ZXJTb3VyY2VQcmlvcml0eSwgQml0YmFrZVZlcnNpb24KKworZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby5kYiBpbXBvcnQgSW50ZWdyaXR5RXJyb3IKKworaW1wb3J0IG9zCisKKyMgc2V0IFRUU19MQVlFUl9JTkRFWCB0byB0aGUgYmFzZSB1cmwgdG8gdXNlIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoZSBsYXllciBpbmRleAorCitjbGFzcyBMYXllclNvdXJjZVZlcmlmeUluaGVyaXRhbmNlU2F2ZUxvYWQoVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIHRvIHZlcmlmeSBpbmhlcml0YW5jZSBmb3IgdGhlIExheWVyU291cmNlIHByb3h5LWluaGVyaXRhbmNlIGNsYXNzZXMuCisgICAgIiIiCisgICAgZGVmIHRlc3Rfb2JqZWN0X2NyZWF0aW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IExheWVyU291cmNlIG9iamVjdCBjcmVhdGlvbi4iIiIKKyAgICAgICAgZm9yIG5hbWUsIHNvdXJjZXR5cGUgaW4gWygiYTEiLCBMYXllclNvdXJjZS5UWVBFX0xPQ0FMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYTIiLCBMYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJhMyIsIExheWVyU291cmNlLlRZUEVfSU1QT1JURUQpXToKKyAgICAgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9bmFtZSwgc291cmNldHlwZT1zb3VyY2V0eXBlKQorCisgICAgICAgIG9iamVjdHMgPSBMYXllclNvdXJjZS5vYmplY3RzLmFsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iamVjdHNbMF0sIExvY2FsTGF5ZXJTb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzFdLCBMYXllckluZGV4TGF5ZXJTb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmplY3RzWzJdLCBJbXBvcnRlZExheWVyU291cmNlKSkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBkdXBsaWNhdGUgTGF5ZXJTb3VyY2Ugb2JqZWN0cy4iIiIKKyAgICAgICAgc3R5cGUgPSBMYXllclNvdXJjZS5UWVBFX0xPQ0FMCisgICAgICAgIExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImExIiwgc291cmNldHlwZT1zdHlwZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbnRlZ3JpdHlFcnJvcik6CisgICAgICAgICAgICBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJhMSIsIHNvdXJjZXR5cGU9c3R5cGUpCisKKworY2xhc3MgTElMU1VwZGF0ZVRlc3RDYXNlKFRyYW5zYWN0aW9uVGVzdENhc2UpOgorICAgICIiIlRlc3QgTGF5ZXIgU291cmNlIHVwZGF0ZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlbGVhc2UuIiIiCisgICAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgICAgICAgIG5hbWU9Im1hc3RlciIsIGdpdHVybD0iZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIpCisgICAgICAgIFJlbGVhc2Uub2JqZWN0cy5jcmVhdGUobmFtZT0iZGVmYXVsdC1yZWxlYXNlIiwgYml0YmFrZV92ZXJzaW9uPWJidiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfbmFtZT0ibWFzdGVyIikKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgTGF5ZXJTb3VyY2UudXBkYXRlIGNhbiBmZXRjaCBicmFuY2hlcy4iIiIKKyAgICAgICAgdXJsID0gb3MuZ2V0ZW52KCJUVFNfTEFZRVJfSU5ERVgiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnLyIpCisKKyAgICAgICAgbHNvYmogPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICAgIG5hbWU9ImIxIiwgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xBWUVSSU5ERVgsCisgICAgICAgICAgICAgICAgICAgIGFwaXVybD11cmwgKyAibGF5ZXJpbmRleC9hcGkvIikKKyAgICAgICAgbHNvYmoudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzb2JqLmJyYW5jaF9zZXQuYWxsKCkuY291bnQoKSA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAibm8gYnJhbmNoZXMgZmV0Y2hlZCIpCisKK2NsYXNzIExheWVyVmVyc2lvbkVxdWl2YWxlbmNlVGVzdENhc2UoVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSBMYXllcl9WZXJzaW9uIHByaW9yaXR5IHNlbGVjdGlvbi4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlcXVpcmVkIG9iamVjdHMuIiIiCisgICAgICAgICMgY3JlYXRlIGxheWVyIHNvdXJjZQorICAgICAgICBzZWxmLmxzcmMgPSBMYXllclNvdXJjZS5vYmplY3RzLmNyZWF0ZShuYW1lPSJkdW1teS1sYXllcnNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9MT0NBTCkKKyAgICAgICAgIyBjcmVhdGUgcmVsZWFzZQorICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShcCisgICAgICAgICAgICAgICAgICBuYW1lPSJtYXN0ZXIiLCBnaXR1cmw9ImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiKQorICAgICAgICBzZWxmLnJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9ImRlZmF1bHQtcmVsZWFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0YmFrZV92ZXJzaW9uPWJidiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hfbmFtZT0ibWFzdGVyIikKKyAgICAgICAgIyBhdHRhY2ggbGF5ZXIgc291cmNlIHRvIHJlbGVhc2UKKyAgICAgICAgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHkub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgcmVsZWFzZT1zZWxmLnJlbGVhc2UsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsIHByaW9yaXR5PTEpCisKKyAgICAgICAgIyBjcmVhdGUgYSBsYXllciB2ZXJzaW9uIGZvciB0aGUgbGF5ZXIgb24gdGhlIHNwZWNpZmllZCBicmFuY2gKKyAgICAgICAgc2VsZi5sYXllciA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtdGVzdGxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYuYnJhbmNoID0gQnJhbmNoLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1hc3RlciIsIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMpCisgICAgICAgIHNlbGYubHZlciA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUoXAorICAgICAgICAgICAgbGF5ZXI9c2VsZi5sYXllciwgbGF5ZXJfc291cmNlPXNlbGYubHNyYywgdXBfYnJhbmNoPXNlbGYuYnJhbmNoKQorCisgICAgICAgICMgY3JlYXRlIHByb2plY3QgYW5kIHByb2plY3QgbGF5ZXIKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9InRlc3QtcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlPXNlbGYucmVsZWFzZSkKKyAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJjb21taXQ9c2VsZi5sdmVyKQorCisgICAgICAgICMgY3JlYXRlIHNwb29mIGxheWVyIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIHNlYXJjaCByZXN1bHRzCisgICAgICAgIGxheWVyID0gTGF5ZXIub2JqZWN0cy5jcmVhdGUobmFtZT0ibWV0YS1ub3R2YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPXNlbGYubHNyYykKKyAgICAgICAgc2VsZi5sdmVyMiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1zZWxmLmxzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwX2JyYW5jaD1zZWxmLmJyYW5jaCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9sYXllcnNvdXJjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gd2UgaGF2ZSBhIHNpbmdsZSBsYXllciB2ZXJzaW9uLAorICAgICAgICBnZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KCkgc2hvdWxkIHJldHVybiBhIGxpc3Qgd2l0aAorICAgICAgICBqdXN0IHRoaXMgbGF5ZXJfdmVyc2lvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChlcXVpdnFzKSwgW3NlbGYubHZlcl0pCisKKyAgICBkZWYgdGVzdF9kdWFsX2xheWVyc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgd2UgaGF2ZSB0d28gbGF5ZXJzIHdpdGggdGhlIHNhbWUgbmFtZSwgZnJvbSBkaWZmZXJlbnQgbGF5ZXIgc291cmNlcywKKyAgICAgICAgd2UgZXhwZWN0IGJvdGggbGF5ZXJzIGluLCBpbiBpbmNyZWFzaW5nIHByaW9yaXR5IG9mIHRoZSBsYXllciBzb3VyY2UuCisgICAgICAgICIiIgorICAgICAgICBsc3JjMiA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKFwKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iZHVtbXktbGF5ZXJzb3VyY2UyIiwKKyAgICAgICAgICAgICAgICAgICAgc291cmNldHlwZT1MYXllclNvdXJjZS5UWVBFX0xPQ0FMLAorICAgICAgICAgICAgICAgICAgICBhcGl1cmw9InRlc3QiKQorCisgICAgICAgICMgYXNzaWduIGEgbG93ZXIgcHJpb3JpdHkgZm9yIHRoZSBzZWNvbmQgbGF5ZXIgc291cmNlCisgICAgICAgIHNlbGYucmVsZWFzZS5yZWxlYXNlbGF5ZXJzb3VyY2Vwcmlvcml0eV9zZXQuY3JlYXRlKGxheWVyX3NvdXJjZT1sc3JjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk9MikKKworICAgICAgICAjIGNyZWF0ZSBhIG5ldyBsYXllcl92ZXJzaW9uIGZvciBhIGxheWVyIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAjIGNvbWluZyBmcm9tIHRoZSBzZWNvbmQgbGF5ZXIgc291cmNlCisgICAgICAgIGxheWVyMiA9IExheWVyLm9iamVjdHMuY3JlYXRlKG5hbWU9Im1ldGEtdGVzdGxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfc291cmNlPWxzcmMyKQorICAgICAgICBsdmVyMiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5jcmVhdGUobGF5ZXI9bGF5ZXIyLCBsYXllcl9zb3VyY2U9bHNyYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cF9icmFuY2g9c2VsZi5icmFuY2gpCisKKyAgICAgICAgIyBleHBlY3QgdHdvIGxheWVyIHZlcnNpb25zLCBpbiB0aGUgcHJpb3JpdHkgb3JkZXIKKyAgICAgICAgZXF1aXZxcyA9IHNlbGYubHZlci5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHNlbGYucHJvamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBbbHZlcjIsIHNlbGYubHZlcl0pCisKKyAgICBkZWYgdGVzdF9idWlsZF9sYXllcnZlcnNpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBbnkgbGF5ZXIgdmVyc2lvbiBjb21pbmcgZnJvbSB0aGUgYnVpbGQgc2hvdWxkIHNob3cgdXAKKyAgICAgICAgYmVmb3JlIGFueSBsYXllciB2ZXJzaW9uIGNvbWluZyBmcm9tIHVwc3RyZWFtCisgICAgICAgICIiIgorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249dGltZXpvbmUubm93KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPXRpbWV6b25lLm5vdygpKQorICAgICAgICBsdmIgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuY3JlYXRlKGxheWVyPXNlbGYubGF5ZXIsIGJ1aWxkPWJ1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdD0iZGVhZGJlZWYiKQorCisgICAgICAgICMgYSBidWlsZCBsYXllcnZlcnNpb24gbXVzdCBiZSBpbiB0aGUgZXF1aXZhbGVuY2UKKyAgICAgICAgIyBsaXN0IGZvciB0aGUgb3JpZ2luYWwgbGF5ZXJ2ZXJzaW9uCisgICAgICAgIGVxdWl2cXMgPSBzZWxmLmx2ZXIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXF1aXZxcykgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVxdWl2cXNbMF0gPT0gc2VsZi5sdmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXF1aXZxc1sxXSA9PSBsdmIpCisKKyAgICAgICAgIyBnZXR0aW5nIHRoZSBidWlsZCBsYXllcnZlcnNpb24gZXF1aXZhbGVudCBsaXN0IG11c3QKKyAgICAgICAgIyByZXR1cm4gdGhlIHNhbWUgbGlzdCBhcyB0aGUgb3JpZ2luYWwgbGF5ZXIKKyAgICAgICAgYmVxdWl2cXMgPSBsdmIuZ2V0X2VxdWl2YWxlbnRzX3dwcmlvcml0eShzZWxmLnByb2plY3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGVxdWl2cXMpLCBsaXN0KGJlcXVpdnFzKSkKKworICAgIGRlZiB0ZXN0X2NvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZW4gd2UgaGF2ZSBhIDIgbGF5ZXIgdmVyc2lvbnMsIGNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIHNob3VsZCByZXR1cm4gYSBxdWVyeXNldCB3aXRoIGJvdGguCisgICAgICAgICIiIgorICAgICAgICBjb21wYXRfbHYgPSBzZWxmLnByb2plY3QuY29tcGF0aWJsZV9sYXllcnZlcnNpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXBhdF9sdiksIFtzZWxmLmx2ZXIsIHNlbGYubHZlcjJdKQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvX19pbml0X18ucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU5Nzg2MAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJhcCBSZXNwb25zaXZlIHYyLjMuMAorICoKKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAqLy5jbGVhcmZpeHsqem9vbToxfS5jbGVhcmZpeDpiZWZvcmUsLmNsZWFyZml4OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS5oaWRlLXRleHR7Zm9udDowLzAgYTtjb2xvcjp0cmFuc3BhcmVudDt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LmlucHV0LWJsb2NrLWxldmVse2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fUAtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofS5oaWRkZW57ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxlLXBob25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk3OXB4KXsuaGlkZGVuLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWltcG9ydGFudH0udmlzaWJsZS1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi10YWJsZXR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXBob25le2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udmlzaWJsZS1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsudmlzaWJsZS1wcmludHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5yb3d7bWFyZ2luLWxlZnQ6LTMwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDozMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjExNzBweH0uc3BhbjEye3dpZHRoOjExNzBweH0uc3BhbjExe3dpZHRoOjEwNzBweH0uc3BhbjEwe3dpZHRoOjk3MHB4fS5zcGFuOXt3aWR0aDo4NzBweH0uc3Bhbjh7d2lkdGg6NzcwcHh9LnNwYW43e3dpZHRoOjY3MHB4fS5zcGFuNnt3aWR0aDo1NzBweH0uc3BhbjV7d2lkdGg6NDcwcHh9LnNwYW40e3dpZHRoOjM3MHB4fS5zcGFuM3t3aWR0aDoyNzBweH0uc3BhbjJ7d2lkdGg6MTcwcHh9LnNwYW4xe3dpZHRoOjcwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0OjEyMzBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6MTEzMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVmdDoxMDMwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6OTMwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6ODMwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NzMwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NjMwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NTMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6NDMwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MjMwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTMwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JTsqbWFyZ2luLWxlZnQ6Mi41MTA5MTEwNzQ3NDA4NjE2JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEwMjU2NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDUyOTkxNDUyOTkxNDUlOyp3aWR0aDo5MS4zOTk3OTk5NjM2Mjk3NSV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjkwNTk4MjkwNTk4MjkxJTsqd2lkdGg6ODIuODUyNzkxNDE2NjIxMiV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuMzU4OTc0MzU4OTc0MzYlOyp3aWR0aDo3NC4zMDU3ODI4Njk2MTI2NiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuODExOTY1ODExOTY1ODIlOyp3aWR0aDo2NS43NTg3NzQzMjI2MDQxMSV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuMjY0OTU3MjY0OTU3MjYlOyp3aWR0aDo1Ny4yMTE3NjU3NzU1OTU1NiV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNzE3OTQ4NzE3OTQ4NzE1JTsqd2lkdGg6NDguNjY0NzU3MjI4NTg3MDE0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4xNzA5NDAxNzA5NDAxNyU7KndpZHRoOjQwLjExNzc0ODY4MTU3ODQ3JX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0aDozMS42MjM5MzE2MjM5MzE2MjUlOyp3aWR0aDozMS41NzA3NDAxMzQ1Njk5MjQlfS5yb3ctZmx1aWQgLnNwYW4ze3dpZHRoOjIzLjA3NjkyMzA3NjkyMzA3NyU7KndpZHRoOjIzLjAyMzczMTU4NzU2MTM3NSV9LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuNTI5OTE0NTI5OTE0NTMlOyp3aWR0aDoxNC40NzY3MjMwNDA1NTI4MjglfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuOTgyOTA1OTgyOTA1OTgzJTsqd2lkdGg6NS45Mjk3MTQ0OTM1NDQyODElfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNS4xMjgyMDUxMjgyMDUxMiU7Km1hcmdpbi1sZWZ0OjEwNS4wMjE4MjIxNDk0ODE3MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjU2NDEwMjU2NDEwMjU3JTsqbWFyZ2luLWxlZnQ6MTAyLjQ1NzcxOTU4NTM3OTE1JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni41ODExOTY1ODExOTY1OCU7Km1hcmdpbi1sZWZ0Ojk2LjQ3NDgxMzYwMjQ3MzE2JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo5NC4wMTcwOTQwMTcwOTQwMiU7Km1hcmdpbi1sZWZ0OjkzLjkxMDcxMTAzODM3MDYxJX0ucm93LWZsdWlkIC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4wMzQxODgwMzQxODgwMyU7Km1hcmdpbi1sZWZ0Ojg3LjkyNzgwNTA1NTQ2NDYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS40NzAwODU0NzAwODU0OCU7Km1hcmdpbi1sZWZ0Ojg1LjM2MzcwMjQ5MTM2MjA2JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjQ4NzE3OTQ4NzE3OTQ5JTsqbWFyZ2luLWxlZnQ6NzkuMzgwNzk2NTA4NDU2MDclfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuOTIzMDc2OTIzMDc2OTMlOyptYXJnaW4tbGVmdDo3Ni44MTY2OTM5NDQzNTM1MiV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC45NDAxNzA5NDAxNzA5NCU7Km1hcmdpbi1sZWZ0OjcwLjgzMzc4Nzk2MTQ0NzUzJX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjM3NjA2ODM3NjA2ODM5JTsqbWFyZ2luLWxlZnQ6NjguMjY5Njg1Mzk3MzQ0OTclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuMzkzMTYyMzkzMTYyMzg1JTsqbWFyZ2luLWxlZnQ6NjIuMjg2Nzc5NDE0NDM4OTklfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuODI5MDU5ODI5MDU5ODIlOyptYXJnaW4tbGVmdDo1OS43MjI2NzY4NTAzMzY0MiV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4tbGVmdDo1My44NDYxNTM4NDYxNTM4NCU7Km1hcmdpbi1sZWZ0OjUzLjczOTc3MDg2NzQzMDQ0NCV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4yODIwNTEyODIwNTEyOCU7Km1hcmdpbi1sZWZ0OjUxLjE3NTY2ODMwMzMyNzg3NSV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS4yOTkxNDUyOTkxNDUyOTUlOyptYXJnaW4tbGVmdDo0NS4xOTI3NjIzMjA0MjE5JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjczNTA0MjczNTA0MjczJTsqbWFyZ2luLWxlZnQ6NDIuNjI4NjU5NzU2MzE5MzMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuNzUyMTM2NzUyMTM2NzUlOyptYXJnaW4tbGVmdDozNi42NDU3NTM3NzM0MTMzNTQlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMTg4MDM0MTg4MDM0MTklOyptYXJnaW4tbGVmdDozNC4wODE2NTEyMDkzMTA3ODUlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguMjA1MTI4MjA1MTI4MjA0JTsqbWFyZ2luLWxlZnQ6MjguMDk4NzQ1MjI2NDA0OCV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS42NDEwMjU2NDEwMjU2NDIlOyptYXJnaW4tbGVmdDoyNS41MzQ2NDI2NjIzMDIyNCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS42NTgxMTk2NTgxMTk2NiU7Km1hcmdpbi1sZWZ0OjE5LjU1MTczNjY3OTM5NjI1NyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDoxNi45ODc2MzQxMTUyOTM2OSV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4xMTExMTExMTExMTExMSU7Km1hcmdpbi1sZWZ0OjExLjAwNDcyODEzMjM4NzcwOCV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjU0NzAwODU0NzAwODU0NyU7Km1hcmdpbi1sZWZ0OjguNDQwNjI1NTY4Mjg1MTQyJX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDozMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjExNTZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDoxMDU2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6OTU2cHh9aW5wdXQuc3BhbjksdGV4dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6ODU2cHh9aW5wdXQuc3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NzU2cHh9aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NjU2cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6NTU2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7d2lkdGg6NDU2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjR7d2lkdGg6MzU2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6MjU2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTU2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NTZweH0udGh1bWJuYWlsc3ttYXJnaW4tbGVmdDotMzBweH0udGh1bWJuYWlscz5saXttYXJnaW4tbGVmdDozMHB4fS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lkdGg6OTc5cHgpey5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjcyNHB4fS5zcGFuMTJ7d2lkdGg6NzI0cHh9LnNwYW4xMXt3aWR0aDo2NjJweH0uc3BhbjEwe3dpZHRoOjYwMHB4fS5zcGFuOXt3aWR0aDo1MzhweH0uc3Bhbjh7d2lkdGg6NDc2cHh9LnNwYW43e3dpZHRoOjQxNHB4fS5zcGFuNnt3aWR0aDozNTJweH0uc3BhbjV7d2lkdGg6MjkwcHh9LnNwYW40e3dpZHRoOjIyOHB4fS5zcGFuM3t3aWR0aDoxNjZweH0uc3BhbjJ7d2lkdGg6MTA0cHh9LnNwYW4xe3dpZHRoOjQycHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojc2NHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo3MDJweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6NjQwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NTc4cHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NTE2cHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NDU0cHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6MzkycHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MjY4cHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjA2cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTQ0cHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6ODJweH0ucm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi43NjI0MzA5MzkyMjY1MTk0JTsqbWFyZ2luLWxlZnQ6Mi43MDkyMzk0NDk4NjQ4MTclOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDM2NDY0MDg4Mzk3NzglOyp3aWR0aDo5MS4zODMyNzI1OTkwMzYwOCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjg3MjkyODE3Njc5NTU4JTsqd2lkdGg6ODIuODE5NzM2Njg3NDMzODclfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjMwOTM5MjI2NTE5MzM3JTsqd2lkdGg6NzQuMjU2MjAwNzc1ODMxNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljc0NTg1NjM1MzU5MTE3JTsqd2lkdGg6NjUuNjkyNjY0ODY0MjI5NDYlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjE4MjMyMDQ0MTk4ODk1JTsqd2lkdGg6NTcuMTI5MTI4OTUyNjI3MjUlfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjYxODc4NDUzMDM4Njc0JTsqd2lkdGg6NDguNTY1NTkzMDQxMDI1MDQlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjA1NTI0ODYxODc4NDUzJTsqd2lkdGg6NDAuMDAyMDU3MTI5NDIyODMlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjQ5MTcxMjcwNzE4MjMyMyU7KndpZHRoOjMxLjQzODUyMTIxNzgyMDYyJX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMi45MjgxNzY3OTU1ODAxMSU7KndpZHRoOjIyLjg3NDk4NTMwNjIxODQxJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC4zNjQ2NDA4ODM5Nzc5JTsqd2lkdGg6MTQuMzExNDQ5Mzk0NjE2MTk5JX0ucm93LWZsdWlkIC5zcGFuMXt3aWR0aDo1LjgwMTEwNDk3MjM3NTY5MSU7KndpZHRoOjUuNzQ3OTEzNDgzMDEzOTg4JX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuNTI0ODYxODc4NDUzMDQlOyptYXJnaW4tbGVmdDoxMDUuNDE4NDc4ODk5NzI5NjIlfS5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjEwMi43NjI0MzA5MzkyMjY1MiU7Km1hcmdpbi1sZWZ0OjEwMi42NTYwNDc5NjA1MDMxJX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni45NjEzMjU5NjY4NTA4MiU7Km1hcmdpbi1sZWZ0Ojk2Ljg1NDk0Mjk4ODEyNzQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjE5ODg5NTAyNzYyNDMlOyptYXJnaW4tbGVmdDo5NC4wOTI1MTIwNDg5MDA4OSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODguMzk3NzkwMDU1MjQ4NjIlOyptYXJnaW4tbGVmdDo4OC4yOTE0MDcwNzY1MjUyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS42MzUzNTkxMTYwMjIxJTsqbWFyZ2luLWxlZnQ6ODUuNTI4OTc2MTM3Mjk4NjglfS5yb3ctZmx1aWQgLm9mZnNldDl7bWFyZ2luLWxlZnQ6NzkuODM0MjU0MTQzNjQ2NCU7Km1hcmdpbi1sZWZ0Ojc5LjcyNzg3MTE2NDkyMjk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc3LjA3MTgyMzIwNDQxOTg5JTsqbWFyZ2luLWxlZnQ6NzYuOTY1NDQwMjI1Njk2NDclfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzEuMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjcxLjE2NDMzNTI1MzMyMDc5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjUwODI4NzI5MjgxNzY4JTsqbWFyZ2luLWxlZnQ6NjguNDAxOTA0MzE0MDk0MjclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuNzA3MTgyMzIwNDQxOTklOyptYXJnaW4tbGVmdDo2Mi42MDA3OTkzNDE3MTg1ODQlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuOTQ0NzUxMzgxMjE1NDclOyptYXJnaW4tbGVmdDo1OS44MzgzNjg0MDI0OTIwNjUlfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTQuMTQzNjQ2NDA4ODM5NzglOyptYXJnaW4tbGVmdDo1NC4wMzcyNjM0MzAxMTYzNzYlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTEuMzgxMjE1NDY5NjEzMjYlOyptYXJnaW4tbGVmdDo1MS4yNzQ4MzI0OTA4ODk4NiV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS41ODAxMTA0OTcyMzc1NyU7Km1hcmdpbi1sZWZ0OjQ1LjQ3MzcyNzUxODUxNDE3JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjgxNzY3OTU1ODAxMTA1JTsqbWFyZ2luLWxlZnQ6NDIuNzExMjk2NTc5Mjg3NjUlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzcuMDE2NTc0NTg1NjM1MzYlOyptYXJnaW4tbGVmdDozNi45MTAxOTE2MDY5MTE5NiV9LnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDozNC4yNTQxNDM2NDY0MDg4NCU7Km1hcmdpbi1sZWZ0OjM0LjE0Nzc2MDY2NzY4NTQ0JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjQ1MzAzODY3NDAzMzE1JTsqbWFyZ2luLWxlZnQ6MjguMzQ2NjU1Njk1MzA5NzQ2JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY5MDYwNzczNDgwNjYzJTsqbWFyZ2luLWxlZnQ6MjUuNTg0MjI0NzU2MDgzMjI3JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5Ljg4OTUwMjc2MjQzMDk0JTsqbWFyZ2luLWxlZnQ6MTkuNzgzMTE5NzgzNzA3NTM3JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjEyNzA3MTgyMzIwNDQyJTsqbWFyZ2luLWxlZnQ6MTcuMDIwNjg4ODQ0NDgxMDIlfS5yb3ctZmx1aWQgLm9mZnNldDF7bWFyZ2luLWxlZnQ6MTEuMzI1OTY2ODUwODI4NzMlOyptYXJnaW4tbGVmdDoxMS4yMTk1ODM4NzIxMDUzMjUlfS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NjM1MzU5MTE2MDIyMSU7Km1hcmdpbi1sZWZ0OjguNDU3MTUyOTMyODc4ODA2JX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjcxMHB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjY0OHB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjU4NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjUyNHB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjQ2MnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjQwMHB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjMzOHB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjI3NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjIxNHB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjE1MnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjkwcHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6MjhweH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7Ym9keXtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1zdGF0aWMtdG9we21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmc6MH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpub25lO3dpZHRoOmF1dG87Y2xlYXI6bm9uZTt0ZXh0LWFsaWduOmxlZnR9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MH0uY29udGFpbmVye3dpZHRoOmF1dG99LnJvdy1mbHVpZHt3aWR0aDoxMDAlfS5yb3csLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9W2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5zcGFuMTIsLnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNzKj0ib2Zmc2V0Il06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtbGFyZ2UsLmlucHV0LXhsYXJnZSwuaW5wdXQteHhsYXJnZSxpbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG99LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjB9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoyMHB4O3JpZ2h0OjIwcHg7bGVmdDoyMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9Lm1vZGFsLmZhZGV7dG9wOi0xMDBweH0ubW9kYWwuZmFkZS5pbnt0b3A6MjBweH19QG1lZGlhKG1heC13aWR0aDo0ODBweCl7Lm5hdi1jb2xsYXBzZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnBhZ2UtaGVhZGVyIGgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweH1pbnB1dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bm9uZTt3aWR0aDphdXRvO3BhZGRpbmctdG9wOjA7dGV4dC1hbGlnbjpsZWZ0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xze21hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0e3BhZGRpbmctdG9wOjB9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH0ubWVkaWEgLnB1bGwtbGVmdCwubWVkaWEgLnB1bGwtcmlnaHR7ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21hcmdpbi1ib3R0b206MTBweH0ubWVkaWEtb2JqZWN0e21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1vZGFse3RvcDoxMHB4O3JpZ2h0OjEwcHg7bGVmdDoxMHB4fS5tb2RhbC1oZWFkZXIgLmNsb3Nle3BhZGRpbmc6MTBweDttYXJnaW46LTEwcHh9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246c3RhdGljfX1AbWVkaWEobWF4LXdpZHRoOjk3OXB4KXtib2R5e3BhZGRpbmctdG9wOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9zaXRpb246c3RhdGljfS5uYXZiYXItZml4ZWQtdG9we21hcmdpbi1ib3R0b206MjBweH0ubmF2YmFyLWZpeGVkLWJvdHRvbXttYXJnaW4tdG9wOjIwcHh9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmc6NXB4fS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvO3BhZGRpbmc6MH0ubmF2YmFyIC5icmFuZHtwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luOjAgMCAwIC01cHh9Lm5hdi1jb2xsYXBzZXtjbGVhcjpib3RofS5uYXYtY29sbGFwc2UgLm5hdntmbG9hdDpub25lO21hcmdpbjowIDAgMTBweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGl7ZmxvYXQ6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+YXttYXJnaW4tYm90dG9tOjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+LmRpdmlkZXItdmVydGljYWx7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdiAubmF2LWhlYWRlcntjb2xvcjojNzc3O3RleHQtc2hhZG93Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhe3BhZGRpbmc6OXB4IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojNzc3Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0ubmF2LWNvbGxhcHNlIC5idG57cGFkZGluZzo0cHggMTBweCA0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGxpK2xpIGF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6Zm9jdXMsLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVyLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjJ9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGF7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdi1jb2xsYXBzZS5pbiAuYnRuLWdyb3Vwe3BhZGRpbmc6MDttYXJnaW4tdG9wOjVweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpYzt0b3A6YXV0bztsZWZ0OmF1dG87ZGlzcGxheTpub25lO2Zsb2F0Om5vbmU7bWF4LXdpZHRoOm5vbmU7cGFkZGluZzowO21hcmdpbjowIDE1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5uYXYtY29sbGFwc2UgLm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51OmFmdGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IC5kaXZpZGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXYtY29sbGFwc2UgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdi1jb2xsYXBzZSAubmF2YmFyLXNlYXJjaHtmbG9hdDpub25lO3BhZGRpbmc6MTBweCAxNXB4O21hcmdpbjoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2YyZjJmMjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjJmMmYyOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKX0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2h7Ym9yZGVyLXRvcC1jb2xvcjojMTExO2JvcmRlci1ib3R0b20tY29sb3I6IzExMX0ubmF2YmFyIC5uYXYtY29sbGFwc2UgLm5hdi5wdWxsLXJpZ2h0e2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0ubmF2LWNvbGxhcHNlLC5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVufS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpibG9ja30ubmF2YmFyLXN0YXRpYyAubmF2YmFyLWlubmVye3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweH19QG1lZGlhKG1pbi13aWR0aDo5ODBweCl7Lm5hdi1jb2xsYXBzZS5jb2xsYXBzZXtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9fQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9ib290c3RyYXAubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjkyN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJhcCB2Mi4zLjAKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi8uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZX1odG1se2ZvbnQtc2l6ZToxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCV9YTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH1hOmhvdmVyLGE6YWN0aXZle291dGxpbmU6MH1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0wLjVlbX1zdWJ7Ym90dG9tOi0wLjI1ZW19aW1ne3dpZHRoOmF1dG9cOTtoZWlnaHQ6YXV0bzttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjA7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljfSNtYXBfY2FudmFzIGltZywuZ29vZ2xlLW1hcHMgaW1ne21heC13aWR0aDpub25lfWJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWF7bWFyZ2luOjA7Zm9udC1zaXplOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfWJ1dHRvbixpbnB1dHsqb3ZlcmZsb3c6dmlzaWJsZTtsaW5lLWhlaWdodDpub3JtYWx9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24saHRtbCBpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJde2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259bGFiZWwsc2VsZWN0LGJ1dHRvbixpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXtjdXJzb3I6cG9pbnRlcn1pbnB1dFt0eXBlPSJzZWFyY2giXXstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZH1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX10ZXh0YXJlYXtvdmVyZmxvdzphdXRvO3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgcHJpbnR7Kntjb2xvcjojMDAwIWltcG9ydGFudDt0ZXh0LXNoYWRvdzpub25lIWltcG9ydGFudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWEsYTp2aXNpdGVke3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9YVtocmVmXTphZnRlcntjb250ZW50OiIgKCIgYXR0cihocmVmKSAiKSJ9YWJiclt0aXRsZV06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIodGl0bGUpICIpIn0uaXIgYTphZnRlcixhW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyLGFbaHJlZl49IiMiXTphZnRlcntjb250ZW50OiIifXByZSxibG9ja3F1b3Rle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTphdm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH10cixpbWd7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1AcGFnZXttYXJnaW46LjVjbX1wLGgyLGgze29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lkfX1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1he2NvbG9yOiMwOGM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTpob3ZlcixhOmZvY3Vze2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW1nLXJvdW5kZWR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5pbWctcG9sYXJvaWR7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSl9LmltZy1jaXJjbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwMHB4Oy1tb3otYm9yZGVyLXJhZGl1czo1MDBweDtib3JkZXItcmFkaXVzOjUwMHB4fS5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjk0MHB4fS5zcGFuMTJ7d2lkdGg6OTQwcHh9LnNwYW4xMXt3aWR0aDo4NjBweH0uc3BhbjEwe3dpZHRoOjc4MHB4fS5zcGFuOXt3aWR0aDo3MDBweH0uc3Bhbjh7d2lkdGg6NjIwcHh9LnNwYW43e3dpZHRoOjU0MHB4fS5zcGFuNnt3aWR0aDo0NjBweH0uc3BhbjV7d2lkdGg6MzgwcHh9LnNwYW40e3dpZHRoOjMwMHB4fS5zcGFuM3t3aWR0aDoyMjBweH0uc3BhbjJ7d2lkdGg6MTQwcHh9LnNwYW4xe3dpZHRoOjYwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojk4MHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo5MDBweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODIwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NzQwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NjYwcHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NTgwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTAwcHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NDIwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MzQwcHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjYwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTgwcHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6MTAwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JTsqbWFyZ2luLWxlZnQ6Mi4wNzQ0NjgwODUxMDYzODMlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JX0ucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3aWR0aDo5MS40ODkzNjE3MDIxMjc2NSU7KndpZHRoOjkxLjQzNjE3MDIxMjc2NTk0JX0ucm93LWZsdWlkIC5zcGFuMTB7d2lkdGg6ODIuOTc4NzIzNDA0MjU1MzIlOyp3aWR0aDo4Mi45MjU1MzE5MTQ4OTM2MSV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuNDY4MDg1MTA2MzgyOTclOyp3aWR0aDo3NC40MTQ4OTM2MTcwMjEyNiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuOTU3NDQ2ODA4NTEwNjQlOyp3aWR0aDo2NS45MDQyNTUzMTkxNDg5MyV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuNDQ2ODA4NTEwNjM4MjklOyp3aWR0aDo1Ny4zOTM2MTcwMjEyNzY1OSV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguOTM2MTcwMjEyNzY1OTUlOyp3aWR0aDo0OC44ODI5Nzg3MjM0MDQyNSV9LnJvdy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuNDI1NTMxOTE0ODkzNjIlOyp3aWR0aDo0MC4zNzIzNDA0MjU1MzE5MiV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEuOTE0ODkzNjE3MDIxMjc4JTsqd2lkdGg6MzEuODYxNzAyMTI3NjU5NTc2JX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMy40MDQyNTUzMTkxNDg5MzQlOyp3aWR0aDoyMy4zNTEwNjM4Mjk3ODcyMzMlfS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0Ljg5MzYxNzAyMTI3NjU5NSU7KndpZHRoOjE0Ljg0MDQyNTUzMTkxNDg5NCV9LnJvdy1mbHVpZCAuc3BhbjF7d2lkdGg6Ni4zODI5Nzg3MjM0MDQyNTUlOyp3aWR0aDo2LjMyOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA0LjI1NTMxOTE0ODkzNjE3JTsqbWFyZ2luLWxlZnQ6MTA0LjE0ODkzNjE3MDIxMjc1JX0ucm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuMTI3NjU5NTc0NDY4MDglOyptYXJnaW4tbGVmdDoxMDIuMDIxMjc2NTk1NzQ0NjclfS5yb3ctZmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk1Ljc0NDY4MDg1MTA2MzgyJTsqbWFyZ2luLWxlZnQ6OTUuNjM4Mjk3ODcyMzQwNCV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTMuNjE3MDIxMjc2NTk1NzQlOyptYXJnaW4tbGVmdDo5My41MTA2MzgyOTc4NzIzMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODcuMjM0MDQyNTUzMTkxNDklOyptYXJnaW4tbGVmdDo4Ny4xMjc2NTk1NzQ0NjgwNyV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuMTA2MzgyOTc4NzIzNCU7Km1hcmdpbi1sZWZ0Ojg0Ljk5OTk5OTk5OTk5OTk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc4LjcyMzQwNDI1NTMxOTE0JTsqbWFyZ2luLWxlZnQ6NzguNjE3MDIxMjc2NTk1NzIlfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuNTk1NzQ0NjgwODUxMDYlOyptYXJnaW4tbGVmdDo3Ni40ODkzNjE3MDIxMjc2NCV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC4yMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6NzAuMTA2MzgyOTc4NzIzMzklfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NjguMDg1MTA2MzgyOTc4NzIlOyptYXJnaW4tbGVmdDo2Ny45Nzg3MjM0MDQyNTUzJX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYxLjcwMjEyNzY1OTU3NDQ2JTsqbWFyZ2luLWxlZnQ6NjEuNTk1NzQ0NjgwODUxMDYlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuNTc0NDY4MDg1MTA2Mzc1JTsqbWFyZ2luLWxlZnQ6NTkuNDY4MDg1MTA2MzgyOTclfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuMTkxNDg5MzYxNzAyMTI1JTsqbWFyZ2luLWxlZnQ6NTMuMDg1MTA2MzgyOTc4NzE1JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjUxLjA2MzgyOTc4NzIzNDAzNSU7Km1hcmdpbi1sZWZ0OjUwLjk1NzQ0NjgwODUxMDYzJX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQ0LjY4MDg1MTA2MzgyOTc5JTsqbWFyZ2luLWxlZnQ6NDQuNTc0NDY4MDg1MTA2MzglfS5yb3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjQyLjQ0NjgwODUxMDYzODMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuMTcwMjEyNzY1OTU3NDQ0JTsqbWFyZ2luLWxlZnQ6MzYuMDYzODI5Nzg3MjM0MDUlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMDQyNTUzMTkxNDg5MzYlOyptYXJnaW4tbGVmdDozMy45MzYxNzAyMTI3NjU5NiV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVmdDoyNy42NTk1NzQ0NjgwODUxMDQlOyptYXJnaW4tbGVmdDoyNy41NTMxOTE0ODkzNjE3JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjUzMTkxNDg5MzYxNzAyJTsqbWFyZ2luLWxlZnQ6MjUuNDI1NTMxOTE0ODkzNjE4JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5LjE0ODkzNjE3MDIxMjc2NCU7Km1hcmdpbi1sZWZ0OjE5LjA0MjU1MzE5MTQ4OTM2JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjAyMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6MTYuOTE0ODkzNjE3MDIxMjc4JX0ucm93LWZsdWlkIC5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwLjYzODI5Nzg3MjM0MDQyNSU7Km1hcmdpbi1sZWZ0OjEwLjUzMTkxNDg5MzYxNzAyJX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjguNTEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4LjQwNDI1NTMxOTE0ODkzOCV9W2NsYXNzKj0ic3BhbiJdLmhpZGUsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0uaGlkZXtkaXNwbGF5Om5vbmV9W2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0uY29udGFpbmVye21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87Knpvb206MX0uY29udGFpbmVyOmJlZm9yZSwuY29udGFpbmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDsqem9vbToxfS5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRhaW5lci1mbHVpZDphZnRlcntjbGVhcjpib3RofXB7bWFyZ2luOjAgMCAxMHB4fS5sZWFke21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweH1zbWFsbHtmb250LXNpemU6ODUlfXN0cm9uZ3tmb250LXdlaWdodDpib2xkfWVte2ZvbnQtc3R5bGU6aXRhbGljfWNpdGV7Zm9udC1zdHlsZTpub3JtYWx9Lm11dGVke2NvbG9yOiM5OTl9YS5tdXRlZDpob3ZlcixhLm11dGVkOmZvY3Vze2NvbG9yOiM4MDgwODB9LnRleHQtd2FybmluZ3tjb2xvcjojYzA5ODUzfWEudGV4dC13YXJuaW5nOmhvdmVyLGEudGV4dC13YXJuaW5nOmZvY3Vze2NvbG9yOiNhNDdlM2N9LnRleHQtZXJyb3J7Y29sb3I6I2I5NGE0OH1hLnRleHQtZXJyb3I6aG92ZXIsYS50ZXh0LWVycm9yOmZvY3Vze2NvbG9yOiM5NTNiMzl9LnRleHQtaW5mb3tjb2xvcjojM2E4N2FkfWEudGV4dC1pbmZvOmhvdmVyLGEudGV4dC1pbmZvOmZvY3Vze2NvbG9yOiMyZDY5ODd9LnRleHQtc3VjY2Vzc3tjb2xvcjojNDY4ODQ3fWEudGV4dC1zdWNjZXNzOmhvdmVyLGEudGV4dC1zdWNjZXNzOmZvY3Vze2NvbG9yOiMzNTY2MzV9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9aDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjEwcHggMDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjppbmhlcml0O3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVnaWJpbGl0eX1oMSBzbWFsbCxoMiBzbWFsbCxoMyBzbWFsbCxoNCBzbWFsbCxoNSBzbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTtjb2xvcjojOTk5fWgxLGgyLGgze2xpbmUtaGVpZ2h0OjQwcHh9aDF7Zm9udC1zaXplOjM4LjVweH1oMntmb250LXNpemU6MzEuNXB4fWgze2ZvbnQtc2l6ZToyNC41cHh9aDR7Zm9udC1zaXplOjE3LjVweH1oNXtmb250LXNpemU6MTRweH1oNntmb250LXNpemU6MTEuOXB4fWgxIHNtYWxse2ZvbnQtc2l6ZToyNC41cHh9aDIgc21hbGx7Zm9udC1zaXplOjE3LjVweH1oMyBzbWFsbHtmb250LXNpemU6MTRweH1oNCBzbWFsbHtmb250LXNpemU6MTRweH0ucGFnZS1oZWFkZXJ7cGFkZGluZy1ib3R0b206OXB4O21hcmdpbjoyMHB4IDAgMzBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfXVsLG9se3BhZGRpbmc6MDttYXJnaW46MCAwIDEwcHggMjVweH11bCB1bCx1bCBvbCxvbCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9bGl7bGluZS1oZWlnaHQ6MjBweH11bC51bnN0eWxlZCxvbC51bnN0eWxlZHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmUsb2wuaW5saW5le21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfXVsLmlubGluZT5saSxvbC5pbmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctcmlnaHQ6NXB4O3BhZGRpbmctbGVmdDo1cHg7Knpvb206MX1kbHttYXJnaW4tYm90dG9tOjIwcHh9ZHQsZGR7bGluZS1oZWlnaHQ6MjBweH1kdHtmb250LXdlaWdodDpib2xkfWRke21hcmdpbi1sZWZ0OjEwcHh9LmRsLWhvcml6b250YWx7Knpvb206MX0uZGwtaG9yaXpvbnRhbDpiZWZvcmUsLmRsLWhvcml6b250YWw6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmRsLWhvcml6b250YWw6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpsZWZ0O3dpZHRoOjIwMHB4O292ZXJmbG93OmhpZGRlbjtjbGVhcjpsZWZ0O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MjIwcHh9aHJ7bWFyZ2luOjIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9YWJiclt0aXRsZV0sYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXXtjdXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzk5OX1hYmJyLmluaXRpYWxpc217Zm9udC1zaXplOjkwJTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9YmxvY2txdW90ZXtwYWRkaW5nOjAgMCAwIDE1cHg7bWFyZ2luOjAgMCAyMHB4O2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjZWVlfWJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE3LjVweDtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MS4yNX1ibG9ja3F1b3RlIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojOTk5fWJsb2NrcXVvdGUgc21hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyMDE0IFwwMEEwJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDowO2JvcmRlci1yaWdodDo1cHggc29saWQgI2VlZTtib3JkZXItbGVmdDowfWJsb2NrcXVvdGUucHVsbC1yaWdodCBwLGJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbHt0ZXh0LWFsaWduOnJpZ2h0fWJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmV7Y29udGVudDonJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXJ7Y29udGVudDonXDAwQTAgXDIwMTQnfXE6YmVmb3JlLHE6YWZ0ZXIsYmxvY2txdW90ZTpiZWZvcmUsYmxvY2txdW90ZTphZnRlcntjb250ZW50OiIifWFkZHJlc3N7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zdHlsZTpub3JtYWw7bGluZS1oZWlnaHQ6MjBweH1jb2RlLHByZXtwYWRkaW5nOjAgM3B4IDJweDtmb250LWZhbWlseTpNb25hY28sTWVubG8sQ29uc29sYXMsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7Y29sb3I6IzMzMzstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9Y29kZXtwYWRkaW5nOjJweCA0cHg7Y29sb3I6I2QxNDt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y5O2JvcmRlcjoxcHggc29saWQgI2UxZTFlOH1wcmV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjkuNXB4O21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoyMHB4O3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9cHJlLnByZXR0eXByaW50e21hcmdpbi1ib3R0b206MjBweH1wcmUgY29kZXtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0ucHJlLXNjcm9sbGFibGV7bWF4LWhlaWdodDozNDBweDtvdmVyZmxvdy15OnNjcm9sbH1mb3Jte21hcmdpbjowIDAgMjBweH1maWVsZHNldHtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMXB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzMzMztib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fWxlZ2VuZCBzbWFsbHtmb250LXNpemU6MTVweDtjb2xvcjojOTk5fWxhYmVsLGlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9aW5wdXQsYnV0dG9uLHNlbGVjdCx0ZXh0YXJlYXtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmfWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHh9c2VsZWN0LHRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtwYWRkaW5nOjRweCA2cHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzU1NTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fWlucHV0LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e3dpZHRoOjIwNnB4fXRleHRhcmVhe2hlaWdodDphdXRvfXRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1tb3otdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7LW8tdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7dHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnN9dGV4dGFyZWE6Zm9jdXMsaW5wdXRbdHlwZT0idGV4dCJdOmZvY3VzLGlucHV0W3R5cGU9InBhc3N3b3JkIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJtb250aCJdOmZvY3VzLGlucHV0W3R5cGU9InRpbWUiXTpmb2N1cyxpbnB1dFt0eXBlPSJ3ZWVrIl06Zm9jdXMsaW5wdXRbdHlwZT0ibnVtYmVyIl06Zm9jdXMsaW5wdXRbdHlwZT0iZW1haWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJ1cmwiXTpmb2N1cyxpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cyxpbnB1dFt0eXBlPSJ0ZWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJjb2xvciJdOmZvY3VzLC51bmVkaXRhYmxlLWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjpyZ2JhKDgyLDE2OCwyMzYsMC44KTtvdXRsaW5lOjA7b3V0bGluZTp0aGluIGRvdHRlZCBcOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNik7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNil9aW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde21hcmdpbjo0cHggMCAwO21hcmdpbi10b3A6MXB4IFw5OyptYXJnaW4tdG9wOjA7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9ImZpbGUiXSxpbnB1dFt0eXBlPSJpbWFnZSJdLGlucHV0W3R5cGU9InN1Ym1pdCJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0iYnV0dG9uIl0saW5wdXRbdHlwZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde3dpZHRoOmF1dG99c2VsZWN0LGlucHV0W3R5cGU9ImZpbGUiXXtoZWlnaHQ6MzBweDsqbWFyZ2luLXRvcDo0cHg7bGluZS1oZWlnaHQ6MzBweH1zZWxlY3R7d2lkdGg6MjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjY31zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtoZWlnaHQ6YXV0b31zZWxlY3Q6Zm9jdXMsaW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLGlucHV0W3R5cGU9InJhZGlvIl06Zm9jdXMsaW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0udW5lZGl0YWJsZS1pbnB1dCwudW5lZGl0YWJsZS10ZXh0YXJlYXtjb2xvcjojOTk5O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNmY2ZjZmM7Ym9yZGVyLWNvbG9yOiNjY2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpfS51bmVkaXRhYmxlLWlucHV0e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnVuZWRpdGFibGUtdGV4dGFyZWF7d2lkdGg6YXV0bztoZWlnaHQ6YXV0b31pbnB1dDotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0ucmFkaW8sLmNoZWNrYm94e21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0ucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1sZWZ0Oi0yMHB4fS5jb250cm9scz4ucmFkaW86Zmlyc3QtY2hpbGQsLmNvbnRyb2xzPi5jaGVja2JveDpmaXJzdC1jaGlsZHtwYWRkaW5nLXRvcDo1cHh9LnJhZGlvLmlubGluZSwuY2hlY2tib3guaW5saW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctdG9wOjVweDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5yYWRpby5pbmxpbmUrLnJhZGlvLmlubGluZSwuY2hlY2tib3guaW5saW5lKy5jaGVja2JveC5pbmxpbmV7bWFyZ2luLWxlZnQ6MTBweH0uaW5wdXQtbWluaXt3aWR0aDo2MHB4fS5pbnB1dC1zbWFsbHt3aWR0aDo5MHB4fS5pbnB1dC1tZWRpdW17d2lkdGg6MTUwcHh9LmlucHV0LWxhcmdle3dpZHRoOjIxMHB4fS5pbnB1dC14bGFyZ2V7d2lkdGg6MjcwcHh9LmlucHV0LXh4bGFyZ2V7d2lkdGg6NTMwcHh9aW5wdXRbY2xhc3MqPSJzcGFuIl0sc2VsZWN0W2NsYXNzKj0ic3BhbiJdLHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJde2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LXByZXBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHNlbGVjdFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAuaW5wdXQtcHJlcGVuZCBbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAuaW5wdXQtYXBwZW5kIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmlubGluZS1ibG9ja31pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjkyNnB4fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjg0NnB4fWlucHV0LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjc2NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dpZHRoOjY4NnB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNwYW44e3dpZHRoOjYwNnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlucHV0LnNwYW43e3dpZHRoOjUyNnB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRhYmxlLWlucHV0LnNwYW42e3dpZHRoOjQ0NnB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjM2NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNwYW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjI4NnB4fWlucHV0LnNwYW4zLHRleHRhcmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjIwNnB4fWlucHV0LnNwYW4yLHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjEyNnB4fWlucHV0LnNwYW4xLHRleHRhcmVhLnNwYW4xLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xe3dpZHRoOjQ2cHh9LmNvbnRyb2xzLXJvd3sqem9vbToxfS5jb250cm9scy1yb3c6YmVmb3JlLC5jb250cm9scy1yb3c6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRyb2xzLXJvdzphZnRlcntjbGVhcjpib3RofS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdH0uY29udHJvbHMtcm93IC5jaGVja2JveFtjbGFzcyo9InNwYW4iXSwuY29udHJvbHMtcm93IC5yYWRpb1tjbGFzcyo9InNwYW4iXXtwYWRkaW5nLXRvcDo1cHh9aW5wdXRbZGlzYWJsZWRdLHNlbGVjdFtkaXNhYmxlZF0sdGV4dGFyZWFbZGlzYWJsZWRdLGlucHV0W3JlYWRvbmx5XSxzZWxlY3RbcmVhZG9ubHldLHRleHRhcmVhW3JlYWRvbmx5XXtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZWVlfWlucHV0W3R5cGU9InJhZGlvIl1bZGlzYWJsZWRdLGlucHV0W3R5cGU9ImNoZWNrYm94Il1bZGlzYWJsZWRdLGlucHV0W3R5cGU9InJhZGlvIl1bcmVhZG9ubHldLGlucHV0W3R5cGU9ImNoZWNrYm94Il1bcmVhZG9ubHlde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLndhcm5pbmcgLmhlbHAtaW5saW5le2NvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhe2NvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCwuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCwuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhe2JvcmRlci1jb2xvcjojYzA5ODUzOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNhNDdlM2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYzA5ODUzO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6I2MwOTg1M30uY29udHJvbC1ncm91cC5lcnJvciAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1pbmxpbmV7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnJhZGlvLC5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtjb2xvcjojYjk0YTQ4fS5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtib3JkZXItY29sb3I6I2I5NGE0ODstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojOTUzYjM5Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mn0uY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmVycm9yIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYjk0YTQ4O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaGVscC1pbmxpbmV7Y29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5yYWRpbywuY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWF7Y29sb3I6IzQ2ODg0N30uY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiM0Njg4NDc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzM1NjYzNTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3YjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3Yjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2J9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojNDY4ODQ3fS5jb250cm9sLWdyb3VwLmluZm8gLmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5pbmZvIC5oZWxwLWlubGluZXtjb2xvcjojM2E4N2FkfS5jb250cm9sLWdyb3VwLmluZm8gLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmluZm8gLnJhZGlvLC5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYXtjb2xvcjojM2E4N2FkfS5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYXtib3JkZXItY29sb3I6IzNhODdhZDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC5pbmZvIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojMmQ2OTg3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiNWQzOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiNWQzO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkM30uY29udHJvbC1ncm91cC5pbmZvIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6IzNhODdhZDtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjc7Ym9yZGVyLWNvbG9yOiMzYTg3YWR9aW5wdXQ6Zm9jdXM6aW52YWxpZCx0ZXh0YXJlYTpmb2N1czppbnZhbGlkLHNlbGVjdDpmb2N1czppbnZhbGlke2NvbG9yOiNiOTRhNDg7Ym9yZGVyLWNvbG9yOiNlZTVmNWJ9aW5wdXQ6Zm9jdXM6aW52YWxpZDpmb2N1cyx0ZXh0YXJlYTpmb2N1czppbnZhbGlkOmZvY3VzLHNlbGVjdDpmb2N1czppbnZhbGlkOmZvY3Vze2JvcmRlci1jb2xvcjojZTkzMjJkOy13ZWJraXQtYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7LW1vei1ib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliNztib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliN30uZm9ybS1hY3Rpb25ze3BhZGRpbmc6MTlweCAyMHB4IDIwcHg7bWFyZ2luLXRvcDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTsqem9vbToxfS5mb3JtLWFjdGlvbnM6YmVmb3JlLC5mb3JtLWFjdGlvbnM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmZvcm0tYWN0aW9uczphZnRlcntjbGVhcjpib3RofS5oZWxwLWJsb2NrLC5oZWxwLWlubGluZXtjb2xvcjojNTk1OTU5fS5oZWxwLWJsb2Nre2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxMHB4fS5oZWxwLWlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7cGFkZGluZy1sZWZ0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uaW5wdXQtYXBwZW5kLC5pbnB1dC1wcmVwZW5ke2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LWFwcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtcHJlcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtYXBwZW5kIC5wb3BvdmVyLC5pbnB1dC1wcmVwZW5kIC5wb3BvdmVye2ZvbnQtc2l6ZToxNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDowO3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtYXBwZW5kIHNlbGVjdDpmb2N1cywuaW5wdXQtcHJlcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3t6LWluZGV4OjJ9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bztoZWlnaHQ6MjBweDttaW4td2lkdGg6MTZweDtwYWRkaW5nOjRweCA1cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2N9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1wcmVwZW5kIC5idG4sLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGUsLmlucHV0LXByZXBlbmQgLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xle3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LWFwcGVuZCAuYWN0aXZlLC5pbnB1dC1wcmVwZW5kIC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYTlkYmE5O2JvcmRlci1jb2xvcjojNDZhNTQ2fS5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmJ0bnttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtYXBwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cHttYXJnaW4tbGVmdDotMXB4fS5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpsYXN0LWNoaWxkPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIGlucHV0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQrLmJ0bi1ncm91cCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4tcmlnaHQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxke21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9aW5wdXQuc2VhcmNoLXF1ZXJ5e3BhZGRpbmctcmlnaHQ6MTRweDtwYWRkaW5nLXJpZ2h0OjRweCBcOTtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLWxlZnQ6NHB4IFw5O21hcmdpbi1ib3R0b206MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDtib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4O2JvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggaW5wdXQsLmZvcm0taW5saW5lIGlucHV0LC5mb3JtLWhvcml6b250YWwgaW5wdXQsLmZvcm0tc2VhcmNoIHRleHRhcmVhLC5mb3JtLWlubGluZSB0ZXh0YXJlYSwuZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLC5mb3JtLXNlYXJjaCBzZWxlY3QsLmZvcm0taW5saW5lIHNlbGVjdCwuZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwuZm9ybS1zZWFyY2ggLmhlbHAtaW5saW5lLC5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsLmZvcm0taG9yaXpvbnRhbCAuaGVscC1pbmxpbmUsLmZvcm0tc2VhcmNoIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLWlubGluZSAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uZm9ybS1zZWFyY2ggLmhpZGUsLmZvcm0taW5saW5lIC5oaWRlLC5mb3JtLWhvcml6b250YWwgLmhpZGV7ZGlzcGxheTpub25lfS5mb3JtLXNlYXJjaCBsYWJlbCwuZm9ybS1pbmxpbmUgbGFiZWwsLmZvcm0tc2VhcmNoIC5idG4tZ3JvdXAsLmZvcm0taW5saW5lIC5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjB9LmZvcm0tc2VhcmNoIC5yYWRpbywuZm9ybS1zZWFyY2ggLmNoZWNrYm94LC5mb3JtLWlubGluZSAucmFkaW8sLmZvcm0taW5saW5lIC5jaGVja2JveHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLXNlYXJjaCAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDozcHg7bWFyZ2luLWxlZnQ6MH0uY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjEwcHh9bGVnZW5kKy5jb250cm9sLWdyb3Vwe21hcmdpbi10b3A6MjBweDstd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2U6c2VwYXJhdGV9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHg7Knpvb206MX0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSwuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHN7KmRpc3BsYXk6aW5saW5lLWJsb2NrOypwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tbGVmdDoxODBweDsqbWFyZ2luLWxlZnQ6MH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGlsZHsqcGFkZGluZy1sZWZ0OjE4MHB4fS5mb3JtLWhvcml6b250YWwgLmhlbHAtYmxvY2t7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWhvcml6b250YWwgaW5wdXQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5kKy5oZWxwLWJsb2Nre21hcmdpbi10b3A6MTBweH0uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnN7cGFkZGluZy1sZWZ0OjE4MHB4fXRhYmxle21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9LnRhYmxle3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToyMHB4fS50YWJsZSB0aCwudGFibGUgdGR7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYmxlIHRoe2ZvbnQtd2VpZ2h0OmJvbGR9LnRhYmxlIHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wOjJweCBzb2xpZCAjZGRkfS50YWJsZSAudGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfS50YWJsZS1jb25kZW5zZWQgdGgsLnRhYmxlLWNvbmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA1cHh9LnRhYmxlLWJvcmRlcmVke2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7KmJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udGFibGUtYm9yZGVyZWQgdGgsLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50aDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGZvb3QrdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDowfS50YWJsZS1ib3JkZXJlZCB0Zm9vdCt0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6MH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50ZCwudGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjl9LnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyPnRkLC50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3Zlcj50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9dGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sdGFibGUgdGhbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0YWJsZSB0ZFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRhYmxlIHRoW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6dGFibGUtY2VsbDtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xLC50YWJsZSB0aC5zcGFuMXtmbG9hdDpub25lO3dpZHRoOjQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjIsLnRhYmxlIHRoLnNwYW4ye2Zsb2F0Om5vbmU7d2lkdGg6MTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjMsLnRhYmxlIHRoLnNwYW4ze2Zsb2F0Om5vbmU7d2lkdGg6MjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjQsLnRhYmxlIHRoLnNwYW40e2Zsb2F0Om5vbmU7d2lkdGg6Mjg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjUsLnRhYmxlIHRoLnNwYW41e2Zsb2F0Om5vbmU7d2lkdGg6MzY0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjYsLnRhYmxlIHRoLnNwYW42e2Zsb2F0Om5vbmU7d2lkdGg6NDQ0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjcsLnRhYmxlIHRoLnNwYW43e2Zsb2F0Om5vbmU7d2lkdGg6NTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjgsLnRhYmxlIHRoLnNwYW44e2Zsb2F0Om5vbmU7d2lkdGg6NjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjksLnRhYmxlIHRoLnNwYW45e2Zsb2F0Om5vbmU7d2lkdGg6Njg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjEwLC50YWJsZSB0aC5zcGFuMTB7ZmxvYXQ6bm9uZTt3aWR0aDo3NjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTEsLnRhYmxlIHRoLnNwYW4xMXtmbG9hdDpub25lO3dpZHRoOjg0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMiwudGFibGUgdGguc3BhbjEye2Zsb2F0Om5vbmU7d2lkdGg6OTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGJvZHkgdHIuc3VjY2Vzcz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDh9LnRhYmxlIHRib2R5IHRyLmVycm9yPnRke2JhY2tncm91bmQtY29sb3I6I2YyZGVkZX0udGFibGUgdGJvZHkgdHIud2FybmluZz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTN9LnRhYmxlIHRib2R5IHRyLmluZm8+dGR7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3fS50YWJsZS1ob3ZlciB0Ym9keSB0ci5zdWNjZXNzOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2QwZTljNn0udGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXI+dGR7YmFja2dyb3VuZC1jb2xvcjojZWJjY2NjfS50YWJsZS1ob3ZlciB0Ym9keSB0ci53YXJuaW5nOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2ZhZjJjY30udGFibGUtaG92ZXIgdGJvZHkgdHIuaW5mbzpob3Zlcj50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9W2NsYXNzXj0iaWNvbi0iXSxbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6MXB4OyptYXJnaW4tcmlnaHQ6LjNlbTtsaW5lLWhlaWdodDoxNHB4O3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wO2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxNHB4IDE0cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmZvY3VzPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXM+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6Zm9jdXM+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyIpfS5pY29uLWdsYXNze2JhY2tncm91bmQtcG9zaXRpb246MCAwfS5pY29uLW11c2lje2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggMH0uaWNvbi1zZWFyY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS5pY29uLWVudmVsb3Ble2JhY2tncm91bmQtcG9zaXRpb246LTcycHggMH0uaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9Lmljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAwfS5pY29uLXN0YXItZW1wdHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0uaWNvbi11c2Vye2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IDB9Lmljb24tZmlsbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAwfS5pY29uLXRoLWxhcmdle2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IDB9Lmljb24tdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggMH0uaWNvbi10aC1saXN0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IDB9Lmljb24tb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggMH0uaWNvbi1yZW1vdmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggMH0uaWNvbi16b29tLWlue2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IDB9Lmljb24tem9vbS1vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggMH0uaWNvbi1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggMH0uaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggMH0uaWNvbi1jb2d7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggMH0uaWNvbi10cmFzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAwfS5pY29uLWhvbWV7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yNHB4fS5pY29uLWZpbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMjRweH0uaWNvbi10aW1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTI0cHh9Lmljb24tcm9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0yNHB4fS5pY29uLWRvd25sb2FkLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0yNHB4fS5pY29uLWRvd25sb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0yNHB4fS5pY29uLXVwbG9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMjRweH0uaWNvbi1pbmJveHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMjRweH0uaWNvbi1wbGF5LWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMjRweH0uaWNvbi1yZXBlYXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTI0cHh9Lmljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMjRweH0uaWNvbi1saXN0LWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMjRweH0uaWNvbi1sb2Nre2JhY2tncm91bmQtcG9zaXRpb246LTI4N3B4IC0yNHB4fS5pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTI0cHh9Lmljb24taGVhZHBob25lc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMjRweH0uaWNvbi12b2x1bWUtb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0yNHB4fS5pY29uLXZvbHVtZS1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0yNHB4fS5pY29uLXZvbHVtZS11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMjRweH0uaWNvbi1xcmNvZGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTI0cHh9Lmljb24tYmFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMjRweH0uaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS5pY29uLXRhZ3N7YmFja2dyb3VuZC1wb3NpdGlvbjotMjVweCAtNDhweH0uaWNvbi1ib29re2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9Lmljb24tYm9va21hcmt7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNDhweH0uaWNvbi1wcmludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS5pY29uLWNhbWVyYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNDhweH0uaWNvbi1mb250e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS5pY29uLWJvbGR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY3cHggLTQ4cHh9Lmljb24taXRhbGlje2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS5pY29uLXRleHQtaGVpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC00OHB4fS5pY29uLXRleHQtd2lkdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9Lmljb24tYWxpZ24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNDhweH0uaWNvbi1hbGlnbi1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTQ4cHh9Lmljb24tYWxpZ24tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTQ4cHh9Lmljb24tYWxpZ24tanVzdGlmeXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtNDhweH0uaWNvbi1saXN0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC00OHB4fS5pY29uLWluZGVudC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC00OHB4fS5pY29uLWluZGVudC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNDhweH0uaWNvbi1mYWNldGltZS12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtNDhweH0uaWNvbi1waWN0dXJle2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC00OHB4fS5pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTcycHh9Lmljb24tbWFwLW1hcmtlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC03MnB4fS5pY29uLWFkanVzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC03MnB4fS5pY29uLXRpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNzJweH0uaWNvbi1lZGl0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTcycHh9Lmljb24tc2hhcmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTcycHh9Lmljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTcycHh9Lmljb24tbW92ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtNzJweH0uaWNvbi1zdGVwLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC03MnB4fS5pY29uLWZhc3QtYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTcycHh9Lmljb24tYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTcycHh9Lmljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNzJweH0uaWNvbi1wYXVzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtNzJweH0uaWNvbi1zdG9we2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC03MnB4fS5pY29uLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTcycHh9Lmljb24tZmFzdC1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC03MnB4fS5pY29uLXN0ZXAtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNzJweH0uaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNzJweH0uaWNvbi1jaGV2cm9uLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTcycHh9Lmljb24tY2hldnJvbi1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtNzJweH0uaWNvbi1wbHVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS5pY29uLW1pbnVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtOTZweH0uaWNvbi1yZW1vdmUtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS5pY29uLW9rLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtOTZweH0uaWNvbi1xdWVzdGlvbi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9Lmljb24taW5mby1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC05NnB4fS5pY29uLXNjcmVlbnNob3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9Lmljb24tcmVtb3ZlLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtOTZweH0uaWNvbi1vay1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTk2cHh9Lmljb24tYmFuLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtOTZweH0uaWNvbi1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC05NnB4fS5pY29uLWFycm93LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC05NnB4fS5pY29uLWFycm93LXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OXB4IC05NnB4fS5pY29uLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTk2cHh9Lmljb24tc2hhcmUtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC05NnB4fS5pY29uLXJlc2l6ZS1mdWxse2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC05NnB4fS5pY29uLXJlc2l6ZS1zbWFsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtOTZweH0uaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC05NnB4fS5pY29uLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTQzM3B4IC05NnB4fS5pY29uLWFzdGVyaXNre2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC05NnB4fS5pY29uLWV4Y2xhbWF0aW9uLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjBweH0uaWNvbi1naWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTEyMHB4fS5pY29uLWxlYWZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTIwcHh9Lmljb24tZmlyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xMjBweH0uaWNvbi1leWUtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMjBweH0uaWNvbi1leWUtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTEyMHB4fS5pY29uLXdhcm5pbmctc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTIwcHh9Lmljb24tcGxhbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTEyMHB4fS5pY29uLWNhbGVuZGFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjBweH0uaWNvbi1yYW5kb217d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtMTIwcHh9Lmljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTIwcHh9Lmljb24tbWFnbmV0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xMjBweH0uaWNvbi1jaGV2cm9uLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC0xMjBweH0uaWNvbi1jaGV2cm9uLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEzcHggLTExOXB4fS5pY29uLXJldHdlZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTEyMHB4fS5pY29uLXNob3BwaW5nLWNhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTEyMHB4fS5pY29uLWZvbGRlci1jbG9zZXt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xMjBweH0uaWNvbi1mb2xkZXItb3Blbnt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xMjBweH0uaWNvbi1yZXNpemUtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTExOXB4fS5pY29uLXJlc2l6ZS1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0xMThweH0uaWNvbi1oZGR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0uaWNvbi1idWxsaG9ybntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xNDRweH0uaWNvbi1iZWxse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS5pY29uLWNlcnRpZmljYXRle2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTE0NHB4fS5pY29uLXRodW1icy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0uaWNvbi10aHVtYnMtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTQ0cHh9Lmljb24taGFuZC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9Lmljb24taGFuZC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xNDRweH0uaWNvbi1oYW5kLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xNDRweH0uaWNvbi1oYW5kLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTE0NHB4fS5pY29uLWdsb2Jle2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xNDRweH0uaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTE0NHB4fS5pY29uLXRhc2tze2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xNDRweH0uaWNvbi1maWx0ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTE0NHB4fS5pY29uLWJyaWVmY2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMTQ0cHh9Lmljb24tZnVsbHNjcmVlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTQ0cHh9LmRyb3B1cCwuZHJvcGRvd257cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXRvZ2dsZXsqbWFyZ2luLWJvdHRvbTotM3B4fS5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5jYXJldHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjRweCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6IiJ9LmRyb3Bkb3duIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDoycHh9LmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNwbGF5Om5vbmU7ZmxvYXQ6bGVmdDttaW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46MnB4IDAgMDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTsqYm9yZGVyLXJpZ2h0LXdpZHRoOjJweDsqYm9yZGVyLWJvdHRvbS13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdodDoxcHg7bWFyZ2luOjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0uZHJvcGRvd24tbWVudT5saT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtjbGVhcjpib3RoO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+bGk+YTpmb2N1cywuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hLC5kcm9wZG93bi1zdWJtZW51OmZvY3VzPmF7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDgxYzI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMDhjKSx0bygjMDA3N2IzKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7b3V0bGluZTowO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA3N2IzJyxHcmFkaWVudFR5cGU9MCl9LmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmEsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmRpc2FibGVkPmE6Zm9jdXN7Y29sb3I6Izk5OX0uZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpob3ZlciwuZHJvcGRvd24tbWVudT4uZGlzYWJsZWQ+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5vcGVueyp6LWluZGV4OjEwMDB9Lm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ucHVsbC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uZHJvcHVwIC5jYXJldCwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0e2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjRweCBzb2xpZCAjMDAwO2NvbnRlbnQ6IiJ9LmRyb3B1cCAuZHJvcGRvd24tbWVudSwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luLWJvdHRvbToxcHh9LmRyb3Bkb3duLXN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOjA7bGVmdDoxMDAlO21hcmdpbi10b3A6LTZweDttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweH0uZHJvcGRvd24tc3VibWVudTpob3Zlcj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5kcm9wdXAgLmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206LTJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDtib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDB9LmRyb3Bkb3duLXN1Ym1lbnU+YTphZnRlcntkaXNwbGF5OmJsb2NrO2Zsb2F0OnJpZ2h0O3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDo1cHg7bWFyZ2luLXJpZ2h0Oi0xMHB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtjb250ZW50OiIgIn0uZHJvcGRvd24tc3VibWVudTpob3Zlcj5hOmFmdGVye2JvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0e2Zsb2F0Om5vbmV9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0Pi5kcm9wZG93bi1tZW51e2xlZnQ6LTEwMCU7bWFyZ2luLWxlZnQ6MTBweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5uYXYtaGVhZGVye3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0udHlwZWFoZWFke3otaW5kZXg6MTA1MTttYXJnaW4tdG9wOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LndlbGx7bWluLWhlaWdodDoyMHB4O3BhZGRpbmc6MTlweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2UzZTNlMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNkZGQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSl9LndlbGwtbGFyZ2V7cGFkZGluZzoyNHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ud2VsbC1zbWFsbHtwYWRkaW5nOjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmZhZGV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBzZXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW1vei10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW8tdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlO3RyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZX0uY29sbGFwc2UuaW57aGVpZ2h0OmF1dG99LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMDAwO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtvcGFjaXR5Oi4yO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKX0uY2xvc2U6aG92ZXIsLmNsb3NlOmZvY3Vze2NvbG9yOiMwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNDtmaWx0ZXI6YWxwaGEob3BhY2l0eT00MCl9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmc6NHB4IDEycHg7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDouM2VtO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1OypiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZTZlNmU2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXI6MXB4IHNvbGlkICNjY2M7KmJvcmRlcjowO2JvcmRlci1jb2xvcjojZTZlNmU2ICNlNmU2ZTYgI2JmYmZiZjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1ib3R0b20tY29sb3I6I2IzYjNiMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZlNmU2ZTYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG46aG92ZXIsLmJ0bjpmb2N1cywuYnRuOmFjdGl2ZSwuYnRuLmFjdGl2ZSwuYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2OypiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDl9LmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjIFw5fS5idG46Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bjpob3ZlciwuYnRuOmZvY3Vze2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4Oy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjstby10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcn0uYnRuOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fS5idG4uYWN0aXZlLC5idG46YWN0aXZle2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4uZGlzYWJsZWQsLmJ0bltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1pbWFnZTpub25lO29wYWNpdHk6LjY1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTY1KTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1sYXJnZXtwYWRkaW5nOjExcHggMTlweDtmb250LXNpemU6MTcuNXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0sLmJ0bi1sYXJnZSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOjRweH0uYnRuLXNtYWxse3BhZGRpbmc6MnB4IDEwcHg7Zm9udC1zaXplOjExLjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLC5idG4tc21hbGwgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDowfS5idG4tbWluaSBbY2xhc3NePSJpY29uLSJdLC5idG4tbWluaSBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOi0xcHh9LmJ0bi1taW5pe3BhZGRpbmc6MCA2cHg7Zm9udC1zaXplOjEwLjVweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmJ0bi1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLXRvcDo1cHh9aW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLWJsb2NrLGlucHV0W3R5cGU9InJlc2V0Il0uYnRuLWJsb2NrLGlucHV0W3R5cGU9ImJ1dHRvbiJdLmJ0bi1ibG9ja3t3aWR0aDoxMDAlfS5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW52ZXJzZS5hY3RpdmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjc1KX0uYnRuLXByaW1hcnl7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzAwNmRjYzsqYmFja2dyb3VuZC1jb2xvcjojMDRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzA0YykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMwNGMgIzA0YyAjMDAyYTgwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDQ0Y2MnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnk6Zm9jdXMsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZlLC5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLXByaW1hcnlbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDRjOypiYWNrZ3JvdW5kLWNvbG9yOiMwMDNiYjN9LmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzAzOSBcOX0uYnRuLXdhcm5pbmd7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjsqYmFja2dyb3VuZC1jb2xvcjojZjg5NDA2O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNmODk0MDYgI2Y4OTQwNiAjYWQ2NzA0O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4td2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmc6Zm9jdXMsLmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLXdhcm5pbmdbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2OypiYWNrZ3JvdW5kLWNvbG9yOiNkZjg1MDV9LmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2M2NzYwNSBcOX0uYnRuLWRhbmdlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZGE0ZjQ5OypiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZWU1ZjViKSx0bygjYmQzNjJmKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2JkMzYyZiAjYmQzNjJmICM4MDI0MjA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmJkMzYyZicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXI6Zm9jdXMsLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZSwuYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLWRhbmdlcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7KmJhY2tncm91bmQtY29sb3I6I2E5MzAyYX0uYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6Izk0MmEyNSBcOX0uYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzViYjc1YjsqYmFja2dyb3VuZC1jb2xvcjojNTFhMzUxO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8oIzUxYTM1MSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiM1MWEzNTEgIzUxYTM1MSAjMzg3MDM4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScjZmY1MWEzNTEnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3M6Zm9jdXMsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxOypiYWNrZ3JvdW5kLWNvbG9yOiM0OTkyNDl9LmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwODE0MCBcOX0uYnRuLWluZm97Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzQ5YWZjZDsqYmFja2dyb3VuZC1jb2xvcjojMmY5NmI0O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzViYzBkZSksdG8oIzJmOTZiNCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyZjk2YjQgIzJmOTZiNCAjMWY2Mzc3O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9yc3RyPScjZmYyZjk2YjQnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW5mbzpob3ZlciwuYnRuLWluZm86Zm9jdXMsLmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW5mby5kaXNhYmxlZCwuYnRuLWluZm9bZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0OypiYWNrZ3JvdW5kLWNvbG9yOiMyYTg1YTB9LmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzI0NzQ4YyBcOX0uYnRuLWludmVyc2V7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzM2MzYzNjsqYmFja2dyb3VuZC1jb2xvcjojMjIyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzQ0NCksdG8oIzIyMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM0NDQsIzIyMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyMjIgIzIyMiAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY0NDQ0NDQnLGVuZENvbG9yc3RyPScjZmYyMjIyMjInLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW52ZXJzZTpob3ZlciwuYnRuLWludmVyc2U6Zm9jdXMsLmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZlLC5idG4taW52ZXJzZS5kaXNhYmxlZCwuYnRuLWludmVyc2VbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOypiYWNrZ3JvdW5kLWNvbG9yOiMxNTE1MTV9LmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzA4MDgwOCBcOX1idXR0b24uYnRuLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bnsqcGFkZGluZy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbTozcHh9YnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG46Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlcjowfWJ1dHRvbi5idG4uYnRuLWxhcmdlLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbGFyZ2V7KnBhZGRpbmctdG9wOjdweDsqcGFkZGluZy1ib3R0b206N3B4fWJ1dHRvbi5idG4uYnRuLXNtYWxsLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tc21hbGx7KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG4uYnRuLW1pbmksaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1taW5peypwYWRkaW5nLXRvcDoxcHg7KnBhZGRpbmctYm90dG9tOjFweH0uYnRuLWxpbmssLmJ0bi1saW5rOmFjdGl2ZSwuYnRuLWxpbmtbZGlzYWJsZWRde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRvdzpub25lOy1tb3otYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuLWxpbmt7Y29sb3I6IzA4YztjdXJzb3I6cG9pbnRlcjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tbGluazpob3ZlciwuYnRuLWxpbms6Zm9jdXN7Y29sb3I6IzAwNTU4MDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJ0bi1saW5rW2Rpc2FibGVkXTpob3ZlciwuYnRuLWxpbmtbZGlzYWJsZWRdOmZvY3Vze2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0bi1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsqem9vbToxfS5idG4tZ3JvdXA6Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cCsuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLXRvb2xiYXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MH0uYnRuLXRvb2xiYXI+LmJ0bisuYnRuLC5idG4tdG9vbGJhcj4uYnRuLWdyb3VwKy5idG4sLmJ0bi10b29sYmFyPi5idG4rLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRue3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5idG4tZ3JvdXA+LmJ0biwuYnRuLWdyb3VwPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXA+LnBvcG92ZXJ7Zm9udC1zaXplOjE0cHh9LmJ0bi1ncm91cD4uYnRuLW1pbml7Zm9udC1zaXplOjEwLjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGx7Zm9udC1zaXplOjExLjlweH0uYnRuLWdyb3VwPi5idG4tbGFyZ2V7Zm9udC1zaXplOjE3LjVweH0uYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0uYnRuLWdyb3VwPi5idG46bGFzdC1jaGlsZCwuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo2cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4ubGFyZ2UuZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5idG4tZ3JvdXA+LmJ0bjpob3ZlciwuYnRuLWdyb3VwPi5idG46Zm9jdXMsLmJ0bi1ncm91cD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwPi5idG4uYWN0aXZle3otaW5kZXg6Mn0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4O3BhZGRpbmctcmlnaHQ6OHB4OypwYWRkaW5nLWJvdHRvbTo1cHg7cGFkZGluZy1sZWZ0OjhweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi1ncm91cD4uYnRuLW1pbmkrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6MnB4O3BhZGRpbmctcmlnaHQ6NXB4OypwYWRkaW5nLWJvdHRvbToycHg7cGFkZGluZy1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGwrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4OypwYWRkaW5nLWJvdHRvbTo0cHh9LmJ0bi1ncm91cD4uYnRuLWxhcmdlKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjdweDtwYWRkaW5nLXJpZ2h0OjEycHg7KnBhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLWxlZnQ6MTJweH0uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXAub3BlbiAuYnRuLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMDRjfS5idG4tZ3JvdXAub3BlbiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2JkMzYyZn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTF9LmJ0bi1ncm91cC5vcGVuIC5idG4taW5mby5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0fS5idG4tZ3JvdXAub3BlbiAuYnRuLWludmVyc2UuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzIyMn0uYnRuIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDowfS5idG4tbGFyZ2UgLmNhcmV0e21hcmdpbi10b3A6NnB4fS5idG4tbGFyZ2UgLmNhcmV0e2JvcmRlci10b3Atd2lkdGg6NXB4O2JvcmRlci1yaWdodC13aWR0aDo1cHg7Ym9yZGVyLWxlZnQtd2lkdGg6NXB4fS5idG4tbWluaSAuY2FyZXQsLmJ0bi1zbWFsbCAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9LmRyb3B1cCAuYnRuLWxhcmdlIC5jYXJldHtib3JkZXItYm90dG9tLXdpZHRoOjVweH0uYnRuLXByaW1hcnkgLmNhcmV0LC5idG4td2FybmluZyAuY2FyZXQsLmJ0bi1kYW5nZXIgLmNhcmV0LC5idG4taW5mbyAuY2FyZXQsLmJ0bi1zdWNjZXNzIC5jYXJldCwuYnRuLWludmVyc2UgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9LmJ0bi1ncm91cC12ZXJ0aWNhbHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG57ZGlzcGxheTpibG9jaztmbG9hdDpub25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4rLmJ0bnttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tbGFyZ2U6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCA2cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1sYXJnZTpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0uYWxlcnR7cGFkZGluZzo4cHggMzVweCA4cHggMTRweDttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlcjoxcHggc29saWQgI2ZiZWVkNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmFsZXJ0LC5hbGVydCBoNHtjb2xvcjojYzA5ODUzfS5hbGVydCBoNHttYXJnaW46MH0uYWxlcnQgLmNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4O3JpZ2h0Oi0yMXB4O2xpbmUtaGVpZ2h0OjIwcHh9LmFsZXJ0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0NztiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LmFsZXJ0LXN1Y2Nlc3MgaDR7Y29sb3I6IzQ2ODg0N30uYWxlcnQtZGFuZ2VyLC5hbGVydC1lcnJvcntjb2xvcjojYjk0YTQ4O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2VlZDNkN30uYWxlcnQtZGFuZ2VyIGg0LC5hbGVydC1lcnJvciBoNHtjb2xvcjojYjk0YTQ4fS5hbGVydC1pbmZve2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5hbGVydC1pbmZvIGg0e2NvbG9yOiMzYTg3YWR9LmFsZXJ0LWJsb2Nre3BhZGRpbmctdG9wOjE0cHg7cGFkZGluZy1ib3R0b206MTRweH0uYWxlcnQtYmxvY2s+cCwuYWxlcnQtYmxvY2s+dWx7bWFyZ2luLWJvdHRvbTowfS5hbGVydC1ibG9jayBwK3B7bWFyZ2luLXRvcDo1cHh9Lm5hdnttYXJnaW4tYm90dG9tOjIwcHg7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saT5he2Rpc3BsYXk6YmxvY2t9Lm5hdj5saT5hOmhvdmVyLC5uYXY+bGk+YTpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm5hdj5saT5hPmltZ3ttYXgtd2lkdGg6bm9uZX0ubmF2Pi5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5uYXYtaGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMTVweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lm5hdiBsaSsubmF2LWhlYWRlcnttYXJnaW4tdG9wOjlweH0ubmF2LWxpc3R7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MH0ubmF2LWxpc3Q+bGk+YSwubmF2LWxpc3QgLm5hdi1oZWFkZXJ7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1sZWZ0Oi0xNXB4O3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpfS5uYXYtbGlzdD5saT5he3BhZGRpbmc6M3B4IDE1cHh9Lm5hdi1saXN0Pi5hY3RpdmU+YSwubmF2LWxpc3Q+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtbGlzdD4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMik7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtbGlzdCBbY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdCBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tcmlnaHQ6MnB4fS5uYXYtbGlzdCAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9Lm5hdi10YWJzLC5uYXYtcGlsbHN7Knpvb206MX0ubmF2LXRhYnM6YmVmb3JlLC5uYXYtcGlsbHM6YmVmb3JlLC5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2NsZWFyOmJvdGh9Lm5hdi10YWJzPmxpLC5uYXYtcGlsbHM+bGl7ZmxvYXQ6bGVmdH0ubmF2LXRhYnM+bGk+YSwubmF2LXBpbGxzPmxpPmF7cGFkZGluZy1yaWdodDoxMnB4O3BhZGRpbmctbGVmdDoxMnB4O21hcmdpbi1yaWdodDoycHg7bGluZS1oZWlnaHQ6MTRweH0ubmF2LXRhYnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0ubmF2LXRhYnM+bGl7bWFyZ2luLWJvdHRvbTotMXB4fS5uYXYtdGFicz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnM+bGk+YTpob3ZlciwubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZWVlICNkZGR9Lm5hdi10YWJzPi5hY3RpdmU+YSwubmF2LXRhYnM+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtdGFicz4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9Lm5hdi1waWxscz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWJvdHRvbToycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1yYWRpdXM6NXB4fS5uYXYtcGlsbHM+LmFjdGl2ZT5hLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmhvdmVyLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtc3RhY2tlZD5saXtmbG9hdDpub25lfS5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1yaWdodDowfS5uYXYtdGFicy5uYXYtc3RhY2tlZHtib3JkZXItYm90dG9tOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpPmF7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6Zmlyc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5hey13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmhvdmVyLC5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5hOmZvY3Vze3otaW5kZXg6Mjtib3JkZXItY29sb3I6I2RkZH0ubmF2LXBpbGxzLm5hdi1zdGFja2VkPmxpPmF7bWFyZ2luLWJvdHRvbTozcHh9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saTpsYXN0LWNoaWxkPmF7bWFyZ2luLWJvdHRvbToxcHh9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0ubmF2LXBpbGxzIC5kcm9wZG93bi1tZW51ey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6NnB4O2JvcmRlci10b3AtY29sb3I6IzA4Yztib3JkZXItYm90dG9tLWNvbG9yOiMwOGN9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIC5jYXJldCwubmF2IC5kcm9wZG93bi10b2dnbGU6Zm9jdXMgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzAwNTU4MDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDU1ODB9Lm5hdi10YWJzIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5uYXYgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXYtdGFicyAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6aG92ZXIsLm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6Zm9jdXN7Y3Vyc29yOnBvaW50ZXJ9Lm5hdi10YWJzIC5vcGVuIC5kcm9wZG93bi10b2dnbGUsLm5hdi1waWxscyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXY+bGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+YTpob3ZlciwubmF2PmxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM5OTk7Ym9yZGVyLWNvbG9yOiM5OTl9Lm5hdiBsaS5kcm9wZG93bi5vcGVuIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlIC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4gYTpob3ZlciAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6Zm9jdXMgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7b3BhY2l0eToxO2ZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCl9LnRhYnMtc3RhY2tlZCAub3Blbj5hOmhvdmVyLC50YWJzLXN0YWNrZWQgLm9wZW4+YTpmb2N1c3tib3JkZXItY29sb3I6Izk5OX0udGFiYmFibGV7Knpvb206MX0udGFiYmFibGU6YmVmb3JlLC50YWJiYWJsZTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGFiYmFibGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0udGFiLWNvbnRlbnR7b3ZlcmZsb3c6YXV0b30udGFicy1iZWxvdz4ubmF2LXRhYnMsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzLC50YWJzLWxlZnQ+Lm5hdi10YWJze2JvcmRlci1ib3R0b206MH0udGFiLWNvbnRlbnQ+LnRhYi1wYW5lLC5waWxsLWNvbnRlbnQ+LnBpbGwtcGFuZXtkaXNwbGF5Om5vbmV9LnRhYi1jb250ZW50Pi5hY3RpdmUsLnBpbGwtY29udGVudD4uYWN0aXZle2Rpc3BsYXk6YmxvY2t9LnRhYnMtYmVsb3c+Lm5hdi10YWJze2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpe21hcmdpbi10b3A6LTFweDttYXJnaW4tYm90dG9tOjB9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpPmF7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4fS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmZvY3Vze2JvcmRlci10b3AtY29sb3I6I2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmEsLnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YTpob3ZlciwudGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hOmZvY3Vze2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjZGRkICNkZGQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGl7ZmxvYXQ6bm9uZX0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21pbi13aWR0aDo3NHB4O21hcmdpbi1yaWdodDowO21hcmdpbi1ib3R0b206M3B4fS50YWJzLWxlZnQ+Lm5hdi10YWJze2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjE5cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmF7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6aG92ZXIsLnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YTpmb2N1c3tib3JkZXItY29sb3I6I2VlZSAjZGRkICNlZWUgI2VlZX0udGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmhvdmVyLC50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpmb2N1c3tib3JkZXItY29sb3I6I2RkZCB0cmFuc3BhcmVudCAjZGRkICNkZGQ7KmJvcmRlci1yaWdodC1jb2xvcjojZmZmfS50YWJzLXJpZ2h0Pi5uYXYtdGFic3tmbG9hdDpyaWdodDttYXJnaW4tbGVmdDoxOXB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmhvdmVyLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmZvY3Vze2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2VlZSAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3ZlciwudGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmZvY3Vze2JvcmRlci1jb2xvcjojZGRkICNkZGQgI2RkZCB0cmFuc3BhcmVudDsqYm9yZGVyLWxlZnQtY29sb3I6I2ZmZn0ubmF2Pi5kaXNhYmxlZD5he2NvbG9yOiM5OTl9Lm5hdj4uZGlzYWJsZWQ+YTpob3ZlciwubmF2Pi5kaXNhYmxlZD5hOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhcnsqcG9zaXRpb246cmVsYXRpdmU7KnotaW5kZXg6MjttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyLWlubmVye21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZmZiksdG8oI2YyZjJmMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmZmYsI2YyZjJmMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyOjFweCBzb2xpZCAjZDRkNGQ0Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZicsZW5kQ29sb3JzdHI9JyNmZmYyZjJmMicsR3JhZGllbnRUeXBlPTApOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpfS5uYXZiYXItaW5uZXI6YmVmb3JlLC5uYXZiYXItaW5uZXI6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5hdmJhci1pbm5lcjphZnRlcntjbGVhcjpib3RofS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvfS5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyIC5icmFuZHtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7cGFkZGluZzoxMHB4IDIwcHggMTBweDttYXJnaW4tbGVmdDotMjBweDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDoyMDA7Y29sb3I6Izc3Nzt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAuYnJhbmQ6aG92ZXIsLm5hdmJhciAuYnJhbmQ6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdmJhci10ZXh0e21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiM3Nzd9Lm5hdmJhci1saW5re2NvbG9yOiM3Nzd9Lm5hdmJhci1saW5rOmhvdmVyLC5uYXZiYXItbGluazpmb2N1c3tjb2xvcjojMzMzfS5uYXZiYXIgLmRpdmlkZXItdmVydGljYWx7aGVpZ2h0OjQwcHg7bWFyZ2luOjAgOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2ZmZjtib3JkZXItbGVmdDoxcHggc29saWQgI2YyZjJmMn0ubmF2YmFyIC5idG4sLm5hdmJhciAuYnRuLWdyb3Vwe21hcmdpbi10b3A6NXB4fS5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLC5uYXZiYXIgLmlucHV0LXByZXBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1hcHBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXAsLm5hdmJhciAuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXB7bWFyZ2luLXRvcDowfS5uYXZiYXItZm9ybXttYXJnaW4tYm90dG9tOjA7Knpvb206MX0ubmF2YmFyLWZvcm06YmVmb3JlLC5uYXZiYXItZm9ybTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2YmFyLWZvcm06YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNlbGVjdCwubmF2YmFyLWZvcm0gLnJhZGlvLC5uYXZiYXItZm9ybSAuY2hlY2tib3h7bWFyZ2luLXRvcDo1cHh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJpbWFnZSJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJyYWRpbyJde21hcmdpbi10b3A6M3B4fS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kLC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tdG9wOjVweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQgaW5wdXQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVwZW5kIGlucHV0e21hcmdpbi10b3A6MH0ubmF2YmFyLXNlYXJjaHtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5e3BhZGRpbmc6NHB4IDE0cHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5uYXZiYXItc3RhdGljLXRvcHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLWZpeGVkLXRvcCwubmF2YmFyLWZpeGVkLWJvdHRvbXtwb3NpdGlvbjpmaXhlZDtyaWdodDowO2xlZnQ6MDt6LWluZGV4OjEwMzA7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7Ym9yZGVyLXdpZHRoOjAgMCAxcHh9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcntib3JkZXItd2lkdGg6MXB4IDAgMH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6OTQwcHh9Lm5hdmJhci1maXhlZC10b3B7dG9wOjB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhci1maXhlZC1ib3R0b217Ym90dG9tOjB9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhciAubmF2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MDtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgMTBweCAwIDB9Lm5hdmJhciAubmF2LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXJpZ2h0OjB9Lm5hdmJhciAubmF2Pmxpe2Zsb2F0OmxlZnR9Lm5hdmJhciAubmF2PmxpPmF7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVweCAxMHB4O2NvbG9yOiM3Nzc7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2YmFyIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhciAubmF2Pi5hY3RpdmU+YSwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXIgLm5hdj4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpfS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6N3B4IDEwcHg7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDo1cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2VkZWRlZDsqYmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2YyZjJmMiksdG8oI2U1ZTVlNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNlNWU1ZTUgI2U1ZTVlNSAjYmZiZmJmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMmYyZjInLGVuZENvbG9yc3RyPScjZmZlNWU1ZTUnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KX0ubmF2YmFyIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXIgLmJ0bi1uYXZiYXI6Zm9jdXMsLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5kaXNhYmxlZCwubmF2YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0ubmF2YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhcntkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjFweDstbW96LWJvcmRlci1yYWRpdXM6MXB4O2JvcmRlci1yYWRpdXM6MXB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0uYnRuLW5hdmJhciAuaWNvbi1iYXIrLmljb24tYmFye21hcmdpbi10b3A6M3B4fS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bGVmdDo5cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjdweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yKTtjb250ZW50OicnfS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTZweDtsZWZ0OjEwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZmO2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OicnfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3RvcDphdXRvO2JvdHRvbTotN3B4O2JvcmRlci10b3A6N3B4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjIpfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7dG9wOmF1dG87Ym90dG9tOi02cHg7Ym9yZGVyLXRvcDo2cHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjB9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPmE6aG92ZXIgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj5hOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiMzMzM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzMzfS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM3Nzc7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNzc3fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDpiZWZvcmV7cmlnaHQ6MTJweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudTphZnRlciwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDphZnRlcntyaWdodDoxM3B4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51e3JpZ2h0OjEwMCU7bGVmdDphdXRvO21hcmdpbi1yaWdodDotMXB4O21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVye2JhY2tncm91bmQtY29sb3I6IzFiMWIxYjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMyMjIpLHRvKCMxMTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMjIyLCMxMTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjUyNTI1O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxlbmRDb2xvcnN0cj0nI2ZmMTExMTExJyxHcmFkaWVudFR5cGU9MCl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZCwubmF2YmFyLWludmVyc2UgLm5hdj5saT5he2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0ubmF2YmFyLWludmVyc2UgLmJyYW5kOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5icmFuZDpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3Vze2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5icmFuZHtjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRleHR7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YSwubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmt7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6Zm9jdXN7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMyMjI7Ym9yZGVyLWxlZnQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmhvdmVyIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmZvY3VzIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzUxNTE1MTtib3JkZXItY29sb3I6IzExMTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7LW1vei10cmFuc2l0aW9uOm5vbmU7LW8tdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeS5mb2N1c2Vke3BhZGRpbmc6NXB4IDE1cHg7Y29sb3I6IzMzMzt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjowO291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSl9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTBlMGU7KmJhY2tncm91bmQtY29sb3I6IzA0MDQwNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMxNTE1MTUpLHRvKCMwNDA0MDQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDQwNDA0ICMwNDA0MDQgIzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMTUxNTE1JyxlbmRDb2xvcnN0cj0nI2ZmMDQwNDA0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZSwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0MDQwNDsqYmFja2dyb3VuZC1jb2xvcjojMDAwfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAgXDl9LmJyZWFkY3J1bWJ7cGFkZGluZzo4cHggMTVweDttYXJnaW46MCAwIDIwcHg7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmJyZWFkY3J1bWI+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjsqem9vbToxfS5icmVhZGNydW1iPmxpPi5kaXZpZGVye3BhZGRpbmc6MCA1cHg7Y29sb3I6I2NjY30uYnJlYWRjcnVtYj4uYWN0aXZle2NvbG9yOiM5OTl9LnBhZ2luYXRpb257bWFyZ2luOjIwcHggMH0ucGFnaW5hdGlvbiB1bHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5wYWdpbmF0aW9uIHVsPmxpe2Rpc3BsYXk6aW5saW5lfS5wYWdpbmF0aW9uIHVsPmxpPmEsLnBhZ2luYXRpb24gdWw+bGk+c3BhbntmbG9hdDpsZWZ0O3BhZGRpbmc6NHB4IDEycHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBhZ2luYXRpb24gdWw+bGk+YTpob3ZlciwucGFnaW5hdGlvbiB1bD5saT5hOmZvY3VzLC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0ucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+c3BhbiwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YSwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YTpob3ZlciwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YTpmb2N1c3tjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnBhZ2luYXRpb24gdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbiB1bD5saTpmaXJzdC1jaGlsZD5zcGFue2JvcmRlci1sZWZ0LXdpZHRoOjFweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0ucGFnaW5hdGlvbiB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24gdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5wYWdpbmF0aW9uLWNlbnRlcmVke3RleHQtYWxpZ246Y2VudGVyfS5wYWdpbmF0aW9uLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saT5zcGFue3BhZGRpbmc6MTFweCAxOXB4O2ZvbnQtc2l6ZToxNy41cHh9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpsYXN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo2cHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDozcHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6bGFzdC1jaGlsZD5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk6bGFzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweH0ucGFnaW5hdGlvbi1zbWFsbCB1bD5saT5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpPnNwYW57cGFkZGluZzoycHggMTBweDtmb250LXNpemU6MTEuOXB4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpPnNwYW57cGFkZGluZzowIDZweDtmb250LXNpemU6MTAuNXB4fS5wYWdlcnttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS5wYWdlcjpiZWZvcmUsLnBhZ2VyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5wYWdlcjphZnRlcntjbGVhcjpib3RofS5wYWdlciBsaXtkaXNwbGF5OmlubGluZX0ucGFnZXIgbGk+YSwucGFnZXIgbGk+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweCAxNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5wYWdlciBsaT5hOmhvdmVyLC5wYWdlciBsaT5hOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0ucGFnZXIgLm5leHQ+YSwucGFnZXIgLm5leHQ+c3BhbntmbG9hdDpyaWdodH0ucGFnZXIgLnByZXZpb3VzPmEsLnBhZ2VyIC5wcmV2aW91cz5zcGFue2Zsb2F0OmxlZnR9LnBhZ2VyIC5kaXNhYmxlZD5hLC5wYWdlciAuZGlzYWJsZWQ+YTpob3ZlciwucGFnZXIgLmRpc2FibGVkPmE6Zm9jdXMsLnBhZ2VyIC5kaXNhYmxlZD5zcGFue2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwNDA7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tb2RhbC1iYWNrZHJvcC5mYWRle29wYWNpdHk6MH0ubW9kYWwtYmFja2Ryb3AsLm1vZGFsLWJhY2tkcm9wLmZhZGUuaW57b3BhY2l0eTouODtmaWx0ZXI6YWxwaGEob3BhY2l0eT04MCl9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDoxMCU7bGVmdDo1MCU7ei1pbmRleDoxMDUwO3dpZHRoOjU2MHB4O21hcmdpbi1sZWZ0Oi0yODBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjMpOypib3JkZXI6MXB4IHNvbGlkICM5OTk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4O291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTstbW96LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTtib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5tb2RhbC5mYWRle3RvcDotMjUlOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0fS5tb2RhbC5mYWRlLmlue3RvcDoxMCV9Lm1vZGFsLWhlYWRlcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9Lm1vZGFsLWhlYWRlciAuY2xvc2V7bWFyZ2luLXRvcDoycHh9Lm1vZGFsLWhlYWRlciBoM3ttYXJnaW46MDtsaW5lLWhlaWdodDozMHB4fS5tb2RhbC1ib2R5e3Bvc2l0aW9uOnJlbGF0aXZlO21heC1oZWlnaHQ6NDAwcHg7cGFkZGluZzoxNXB4O292ZXJmbG93LXk6YXV0b30ubW9kYWwtZm9ybXttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjE0cHggMTVweCAxNXB4O21hcmdpbi1ib3R0b206MDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZn0ubW9kYWwtZm9vdGVyOmJlZm9yZSwubW9kYWwtZm9vdGVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5tb2RhbC1mb290ZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubW9kYWwtZm9vdGVyIC5idG4rLmJ0bnttYXJnaW4tYm90dG9tOjA7bWFyZ2luLWxlZnQ6NXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuKy5idG57bWFyZ2luLWxlZnQ6LTFweH0ubW9kYWwtZm9vdGVyIC5idG4tYmxvY2srLmJ0bi1ibG9ja3ttYXJnaW4tbGVmdDowfS50b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAzMDtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjEuNDtvcGFjaXR5OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7dmlzaWJpbGl0eTp2aXNpYmxlfS50b29sdGlwLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS50b29sdGlwLnRvcHtwYWRkaW5nOjVweCAwO21hcmdpbi10b3A6LTNweH0udG9vbHRpcC5yaWdodHtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjNweH0udG9vbHRpcC5ib3R0b217cGFkZGluZzo1cHggMDttYXJnaW4tdG9wOjNweH0udG9vbHRpcC5sZWZ0e3BhZGRpbmc6MCA1cHg7bWFyZ2luLWxlZnQ6LTNweH0udG9vbHRpcC1pbm5lcnttYXgtd2lkdGg6MjAwcHg7cGFkZGluZzo4cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS50b29sdGlwLWFycm93e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggMH0udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO2xlZnQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggNXB4IDB9LnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotNXB4O2JvcmRlci1sZWZ0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHh9LnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93e3RvcDowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci13aWR0aDowIDVweCA1cHh9LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTAxMDtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjQwMHB4O3BhZGRpbmc6MXB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy1tb3otYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTtib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmc7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5wb3BvdmVyLnRvcHttYXJnaW4tdG9wOi0xMHB4fS5wb3BvdmVyLnJpZ2h0e21hcmdpbi1sZWZ0OjEwcHh9LnBvcG92ZXIuYm90dG9te21hcmdpbi10b3A6MTBweH0ucG9wb3Zlci5sZWZ0e21hcmdpbi1sZWZ0Oi0xMHB4fS5wb3BvdmVyLXRpdGxle3BhZGRpbmc6OHB4IDE0cHg7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE4cHg7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y3O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDtib3JkZXItcmFkaXVzOjVweCA1cHggMCAwfS5wb3BvdmVyLXRpdGxlOmVtcHR5e2Rpc3BsYXk6bm9uZX0ucG9wb3Zlci1jb250ZW50e3BhZGRpbmc6OXB4IDE0cHh9LnBvcG92ZXIgLmFycm93LC5wb3BvdmVyIC5hcnJvdzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0ucG9wb3ZlciAuYXJyb3d7Ym9yZGVyLXdpZHRoOjExcHh9LnBvcG92ZXIgLmFycm93OmFmdGVye2JvcmRlci13aWR0aDoxMHB4O2NvbnRlbnQ6IiJ9LnBvcG92ZXIudG9wIC5hcnJvd3tib3R0b206LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTExcHg7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIudG9wIC5hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi0xMHB4O2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJnaW4tdG9wOi0xMXB4O2JvcmRlci1yaWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93OmFmdGVye2JvdHRvbTotMTBweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItbGVmdC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3d7dG9wOi0xMXB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3c6YWZ0ZXJ7dG9wOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93e3RvcDo1MCU7cmlnaHQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItbGVmdC1jb2xvcjojOTk5O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9LnBvcG92ZXIubGVmdCAuYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1yaWdodC13aWR0aDowfS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0yMHB4O2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS50aHVtYm5haWxzOmJlZm9yZSwudGh1bWJuYWlsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGh1bWJuYWlsczphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDoyMHB4fS50aHVtYm5haWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoyMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9YS50aHVtYm5haWw6aG92ZXIsYS50aHVtYm5haWw6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwOGM7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpfS50aHVtYm5haWw+aW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30udGh1bWJuYWlsIC5jYXB0aW9ue3BhZGRpbmc6OXB4O2NvbG9yOiM1NTV9Lm1lZGlhLC5tZWRpYS1ib2R5e292ZXJmbG93OmhpZGRlbjsqb3ZlcmZsb3c6dmlzaWJsZTt6b29tOjF9Lm1lZGlhLC5tZWRpYSAubWVkaWF7bWFyZ2luLXRvcDoxNXB4fS5tZWRpYTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1lZGlhLW9iamVjdHtkaXNwbGF5OmJsb2NrfS5tZWRpYS1oZWFkaW5ne21hcmdpbjowIDAgNXB4fS5tZWRpYT4ucHVsbC1sZWZ0e21hcmdpbi1yaWdodDoxMHB4fS5tZWRpYT4ucHVsbC1yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5tZWRpYS1saXN0e21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5sYWJlbCwuYmFkZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZToxMS44NDRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiM5OTl9LmxhYmVsey13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYmFkZ2V7cGFkZGluZy1yaWdodDo5cHg7cGFkZGluZy1sZWZ0OjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6OXB4Oy1tb3otYm9yZGVyLXJhZGl1czo5cHg7Ym9yZGVyLXJhZGl1czo5cHh9LmxhYmVsOmVtcHR5LC5iYWRnZTplbXB0eXtkaXNwbGF5Om5vbmV9YS5sYWJlbDpob3ZlcixhLmxhYmVsOmZvY3VzLGEuYmFkZ2U6aG92ZXIsYS5iYWRnZTpmb2N1c3tjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5sYWJlbC1pbXBvcnRhbnQsLmJhZGdlLWltcG9ydGFudHtiYWNrZ3JvdW5kLWNvbG9yOiNiOTRhNDh9LmxhYmVsLWltcG9ydGFudFtocmVmXSwuYmFkZ2UtaW1wb3J0YW50W2hyZWZde2JhY2tncm91bmQtY29sb3I6Izk1M2IzOX0ubGFiZWwtd2FybmluZywuYmFkZ2Utd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmxhYmVsLXdhcm5pbmdbaHJlZl0sLmJhZGdlLXdhcm5pbmdbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojYzY3NjA1fS5sYWJlbC1zdWNjZXNzLC5iYWRnZS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzQ2ODg0N30ubGFiZWwtc3VjY2Vzc1tocmVmXSwuYmFkZ2Utc3VjY2Vzc1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMzNTY2MzV9LmxhYmVsLWluZm8sLmJhZGdlLWluZm97YmFja2dyb3VuZC1jb2xvcjojM2E4N2FkfS5sYWJlbC1pbmZvW2hyZWZdLC5iYWRnZS1pbmZvW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzJkNjk4N30ubGFiZWwtaW52ZXJzZSwuYmFkZ2UtaW52ZXJzZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9LmxhYmVsLWludmVyc2VbaHJlZl0sLmJhZGdlLWludmVyc2VbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMWExYTFhfS5idG4gLmxhYmVsLC5idG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5idG4tbWluaSAubGFiZWwsLmJ0bi1taW5pIC5iYWRnZXt0b3A6MH1ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbXMta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtby1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH19QGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX0ucHJvZ3Jlc3N7aGVpZ2h0OjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZjVmNWY1KSx0bygjZjlmOWY5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmNWY1ZjUnLGVuZENvbG9yc3RyPScjZmZmOWY5ZjknLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSl9LnByb2dyZXNzIC5iYXJ7ZmxvYXQ6bGVmdDt3aWR0aDowO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTkwZDI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMTQ5YmRmKSx0bygjMDQ4MGJlKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE0OWJkZicsZW5kQ29sb3JzdHI9JyNmZjA0ODBiZScsR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlOy1tb3otdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnByb2dyZXNzIC5iYXIrLmJhcnstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSl9LnByb2dyZXNzLXN0cmlwZWQgLmJhcntiYWNrZ3JvdW5kLWNvbG9yOiMxNDliZGY7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7LXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4Oy1tb3otYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDstby1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4O2JhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHh9LnByb2dyZXNzLmFjdGl2ZSAuYmFyey13ZWJraXQtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstbW96LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW1zLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW8tYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlfS5wcm9ncmVzcy1kYW5nZXIgLmJhciwucHJvZ3Jlc3MgLmJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZGQ1MTRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2M0M2MzNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZjNDNjMzUnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtZGFuZ2VyLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZTVmNWI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXN1Y2Nlc3MgLmJhciwucHJvZ3Jlc3MgLmJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVlYjk1ZTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM2MmM0NjIpLHRvKCM1N2E5NTcpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTdhOTU3JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXN1Y2Nlc3MucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MmM0NjI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLWluZm8gLmJhciwucHJvZ3Jlc3MgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6IzRiYjFjZjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMzMzliYjkpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2ZmMzM5YmI5JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWluZm8ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM1YmMwZGU7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXdhcm5pbmcgLmJhciwucHJvZ3Jlc3MgLmJhci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXdhcm5pbmcucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYmI0NTA7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LmFjY29yZGlvbnttYXJnaW4tYm90dG9tOjIwcHh9LmFjY29yZGlvbi1ncm91cHttYXJnaW4tYm90dG9tOjJweDtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hY2NvcmRpb24taGVhZGluZ3tib3JkZXItYm90dG9tOjB9LmFjY29yZGlvbi1oZWFkaW5nIC5hY2NvcmRpb24tdG9nZ2xle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo4cHggMTVweH0uYWNjb3JkaW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uYWNjb3JkaW9uLWlubmVye3BhZGRpbmc6OXB4IDE1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0uY2Fyb3VzZWx7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbToyMHB4O2xpbmUtaGVpZ2h0OjF9LmNhcm91c2VsLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5jYXJvdXNlbC1pbm5lcj4uaXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7LXdlYmtpdC10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0Oy1tb3otdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstby10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0O3RyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnR9LmNhcm91c2VsLWlubmVyPi5pdGVtPmltZywuY2Fyb3VzZWwtaW5uZXI+Lml0ZW0+YT5pbWd7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLC5jYXJvdXNlbC1pbm5lcj4ubmV4dCwuY2Fyb3VzZWwtaW5uZXI+LnByZXZ7ZGlzcGxheTpibG9ja30uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZXtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5uZXh0LC5jYXJvdXNlbC1pbm5lcj4ucHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dHtsZWZ0OjEwMCV9LmNhcm91c2VsLWlubmVyPi5wcmV2e2xlZnQ6LTEwMCV9LmNhcm91c2VsLWlubmVyPi5uZXh0LmxlZnQsLmNhcm91c2VsLWlubmVyPi5wcmV2LnJpZ2h0e2xlZnQ6MH0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5sZWZ0e2xlZnQ6LTEwMCV9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUucmlnaHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1jb250cm9se3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0MCU7bGVmdDoxNXB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDotMjBweDtmb250LXNpemU6NjBweDtmb250LXdlaWdodDoxMDA7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6IzIyMjtib3JkZXI6M3B4IHNvbGlkICNmZmY7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjIzcHg7LW1vei1ib3JkZXItcmFkaXVzOjIzcHg7Ym9yZGVyLXJhZGl1czoyM3B4O29wYWNpdHk6LjU7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NTApfS5jYXJvdXNlbC1jb250cm9sLnJpZ2h0e3JpZ2h0OjE1cHg7bGVmdDphdXRvfS5jYXJvdXNlbC1jb250cm9sOmhvdmVyLC5jYXJvdXNlbC1jb250cm9sOmZvY3Vze2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3BhY2l0eTouOTtmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCl9LmNhcm91c2VsLWluZGljYXRvcnN7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MTVweDt6LWluZGV4OjU7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lfS5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpe2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O21hcmdpbi1sZWZ0OjVweDt0ZXh0LWluZGVudDotOTk5cHg7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjI1KTtib3JkZXItcmFkaXVzOjVweH0uY2Fyb3VzZWwtaW5kaWNhdG9ycyAuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojMzMzO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjc1KX0uY2Fyb3VzZWwtY2FwdGlvbiBoNCwuY2Fyb3VzZWwtY2FwdGlvbiBwe2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbiBoNHttYXJnaW46MCAwIDVweH0uY2Fyb3VzZWwtY2FwdGlvbiBwe21hcmdpbi1ib3R0b206MH0uaGVyby11bml0e3BhZGRpbmc6NjBweDttYXJnaW4tYm90dG9tOjMwcHg7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5oZXJvLXVuaXQgaDF7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZTo2MHB4O2xpbmUtaGVpZ2h0OjE7bGV0dGVyLXNwYWNpbmc6LTFweDtjb2xvcjppbmhlcml0fS5oZXJvLXVuaXQgbGl7bGluZS1oZWlnaHQ6MzBweH0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmhpZGV7ZGlzcGxheTpub25lfS5zaG93e2Rpc3BsYXk6YmxvY2t9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0uYWZmaXh7cG9zaXRpb246Zml4ZWR9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2RlZmF1bHQuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZTNlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9kZWZhdWx0LmNzcwpAQCAtMCwwICsxLDMzMCBAQAorLyogU3R5bGUgdGhlIFlvY3RvIFByb2plY3QgbG9nbyAqLworLmxvZ28gaW1nIHsgaGVpZ2h0OiAzMHB4OyB3aWR0aDogYXV0byAhaW1wb3J0YW50OyB9CisubG9nbyB7IHBhZGRpbmctdG9wOiA0cHggIWltcG9ydGFudDsgcGFkZGluZy1ib3R0b206MHB4ICFpbXBvcnRhbnQ7IH0KKworLyogc3R5bGUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKy5icmFuZCA+IGEgeyBjb2xvcjogIzc3NzsgfQorLmJyYW5kID4gYTpob3ZlciB7IGNvbG9yOiAjOTk5OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKy5pY29uLWluZm8tc2lnbiB7IGNvbG9yOiAjNzc3OyBmb250LXNpemU6IDE2cHg7IG1hcmdpbi1sZWZ0OiA1cHg7fQorLmljb24taW5mby1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorCisvKiBTdHlsZSB0aGUgYnJlYWRjcnVtYiAqLworLmJyZWFkY3J1bWIgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CisuYnJlYWRjcnVtYiBsaTpmaXJzdC1jaGlsZCB7IHBhZGRpbmctcmlnaHQ6IDEwcHg7IH0KKworLyogU3R5bGVzIGZvciB0aGUgaGVscCBpbmZvcm1hdGlvbiAqLworLmdldC1oZWxwIHsgY29sb3I6ICNDQ0NDQ0M7IH0KKy5nZXQtaGVscDpob3ZlciwgLmljb24tcGx1cy1zaWduOmhvdmVyIHsgY29sb3I6ICM5OTk5OTk7IGN1cnNvcjogcG9pbnRlcjsgfQorLmdldC1oZWxwLWJsdWUgeyBjb2xvcjogIzNBODdBRDsgfQorLmdldC1oZWxwLWJsdWU6aG92ZXIgeyBjb2xvcjogIzAwNTU4MDsgY3Vyc29yOiBwb2ludGVyOyB9CisuZ2V0LWhlbHAteWVsbG93IHsgY29sb3I6ICNDMDk4NTM7IH0KKy5nZXQtaGVscC15ZWxsb3c6aG92ZXIgeyBjb2xvcjogI0IzODk0MjsgY3Vyc29yOiBwb2ludGVyOyB9CisuZ2V0LWhlbHAtcmVkIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiAycHg7IH0KKy5nZXQtaGVscC1yZWQ6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgY3Vyc29yOiBwb2ludGVyOyB9CisuYnVpbGQtZm9ybT5pOmZpcnN0LW9mLXR5cGUgeyBtYXJnaW4tbGVmdDogNXB4OyB9CisubWFudWFsIHsgbWFyZ2luOiAxMXB4IDE1cHggMCAxMXB4O30KKy5oZWFkaW5nLWhlbHAgeyBmb250LXNpemU6IDE0cHg7IH0KKworLyogU3R5bGVzIGZvciB0aGUgZXh0ZXJuYWwgbGluayAqLworLmdldC1pbmZvIHsgY29sb3I6ICMwMDg4Q0M7IH0KKy5nZXQtaW5mbzpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCisvKiBTdHlsZXMgZm9yIGNvZGUgYW5kIHByZSB0YWdzICovCitjb2RlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICMzMzMzMzM7IH0KK2RkIGNvZGUsIC5hbGVydCBjb2RlIHsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgfQorLmFsZXJ0LXdhcm5pbmcgY29kZSwgLmFsZXJ0LXdhcm5pbmcgcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogbm9uZTsgY29sb3I6ICNDMDk4NTM7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmFsZXJ0LWVycm9yIGNvZGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgbWFyZ2luLWJvdHRvbTowcHg7IH0KKy5hbGVydC1lcnJvciBwcmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogI0I5NEE0ODsgd29yZC1icmVhazogbm9ybWFsOyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKy5hbGVydC13YXJuaW5nIHByZSB7IHdvcmQtYnJlYWs6IG5vcm1hbDsgfQorLmFsZXJ0LWluZm8gYSB7IGZvbnQtd2VpZ2h0OiAzMDA7IH0KKy5hbGVydC1pbmZvIGNvZGUgeyBjb2xvcjogIzNBODdBRDsgfQorLnRvb2x0aXAgY29kZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgYm9yZGVyOiBub25lOyBmb250LXNpemU6IDFlbTsgfQorCisvKiBTdHlsZSBmb3IgZGVmaW5pdGlvbiBsaXN0cyAqLworZGQgdWwgeyBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IG1hcmdpbjogMHB4OyB9CitkdCwgZGQgIHtsaW5lLWhlaWdodDogMjVweDsgfQorZGQgbGkgeyBsaW5lLWhlaWdodDogMjVweDsgfQorLml0ZW0taW5mbyBkZCB7IGxpbmUtaGVpZ2h0OiAyMHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyB9CisKKy8qIFN0eWxlIHRoZSBmaWx0ZXIgbW9kYWwgZGlhbG9ncyAqLworLm1vZGFsIHsgd2lkdGg6IDgwMHB4OyBtYXJnaW4tbGVmdDogLTQwMHB4OyB9CisubW9kYWwtZm9vdGVyIC5idG4geyBmbG9hdDogbGVmdDsgfQorCisvKiBIb3ZlciBzdHlsZSBmb3IgdGhlIGNsZWFyIHNlYXJjaCBpY29uICovCisuaWNvbi1yZW1vdmUtc2lnbjpob3ZlciB7IGNvbG9yOiAjOTk5OTk5OyBjdXJzb3I6IHBvaW50ZXI7IH0KKworLyogU29tZSBleHRyYSBzcGFjZSBiZWZvcmUgaGVhZGluZ3Mgd2hlbiBuZWVkZWQgKi8KKy5kZXRhaWxzIHsgbWFyZ2luLXRvcDogMzBweDsgfQorLmFpciB7IG1hcmdpbi10b3A6IDMwcHg7IH0KKworLyogUmVxdWlyZWQgY2xhc3NlcyBmb3IgdGhlIGhpZ2hsaWdodCBiZWhhdmlvdXIgaW4gdGFibGVzICovCisuaGlnaGxpZ2h0IHsgLXdlYmtpdC1hbmltYXRpb246IHRhcmdldC1mYWRlIDEwcyAxOyAtbW96LWFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTBzIDE7IGFuaW1hdGlvbjogdGFyZ2V0LWZhZGUgMTBzIDE7IH0KK0Atd2Via2l0LWtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CitALW1vei1rZXlmcmFtZXMgdGFyZ2V0LWZhZGUgeyAwJSB7IGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7IH0gMjUlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAxMDAlIHsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7IH0gfQorQGtleWZyYW1lcyB0YXJnZXQtZmFkZSB7IDAlIHsgYmFja2dyb3VuZC1jb2xvcjogI0Q5RURGNzsgfSAyNSUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3OyB9IDEwMCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfSB9CisKKy8qIFRoaXMgbWFrZXMgdG9vbHRpcHMgd29yayBpbnNpZGUgbW9kYWwgZGlhbG9ncyAqLworLnRvb2x0aXAgeyB6LWluZGV4OiAyMDAwICFpbXBvcnRhbnQ7IH0KKworLyogT3ZlcnJpZGUgZGVmYXVsdCBUd2l0dGVyIEJvb3N0cmFwIHN0eWxlcyBmb3IgYW5jaG9yIHRhZ3MgaW5zaWRlIHRhYmxlcyAqLwordGQgYSwgdGQgYSA+IGNvZGUgeyBjb2xvcjogIzMzMzMzMzsgfQordGQgY29kZSB7IHdoaXRlLXNwYWNlOiBub3JtYWw7IH0KK3RkIGE6aG92ZXIsIHRkIGEgPiBjb2RlOmhvdmVyIHsgY29sb3I6ICMwMDAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9CisKKy8qIE92ZXJyaWRlIGRlZmF1bHQgVHdpdHRlciBCb290c3RyYXAgc3R5bGVzIGZvciB0ci5lcnJvciAqLworLnRhYmxlIHRib2R5IHRyLmVycm9yID4gdGQgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfSAvKiBvdmVycmlkZSBkZWZhdWx0IEJvb3RzdHJhcCBiZWhhdmlvdXIgKi8KKy50YWJsZS1ob3ZlciB0Ym9keSB0ci5lcnJvcjpob3ZlciA+IHRkIHsgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTt9IC8qIG92ZXJyaWRlIGRlZmF1bHQgQm9vdHN0cmFwIGJlaGF2aW91ciAqLworCisvKiBSaWdodCBqdXN0aWZ5IEJvb3RzdHJhcCB0YWJsZSBjb2x1bW5zIGZvciBzaXplIGZpZWxkcyAqLworLnRhYmxlIC5zaXplY29sIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KKworLyogU2V0IGVycm9yLCB3YXJuaW5nLCBzdWNjZXNzIGFuZCBtdXRlZCBzdHlsZXMgKi8KKy5lcnJvciwgLnJlZCwgdGQuZXJyb3IgYSwgdHIuZXJyb3IgYSB7IGNvbG9yOiAjYjk0YTQ4OyB9CithLmVycm9yOmhvdmVyLCBhLmVycm9yOmZvY3VzLCB0ci5lcnJvciBhOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cisud2FybmluZywgLnllbGxvdyB7IGNvbG9yOiAjYzA5ODUzO30KK2Eud2FybmluZyB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CithLndhcm5pbmc6aG92ZXIsIGEud2FybmluZzpmb2N1cyB7IGNvbG9yOiAjQjM4OTQyOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnN1Y2Nlc3MsIC5ncmVlbiB7IGNvbG9yOiAjNDY4ODQ3O30KKy5zdWNjZXNzOmhvdmVyIHsgY29sb3I6ICMzNDcxMzI7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cit0ZCA+IC5zdWNjZXNzOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKy5tdXRlZCBhIHsgY29sb3I6Izk5OTk5OTsgfQorLm11dGVkIGE6aG92ZXIgeyBjb2xvcjojOTk5OTk5OyB9CisKKy8qIFNvcnRpbmcgZnVuY3Rpb25hbGl0eSBzdHlsZXMgZm9yIHRhYmxlIGhlYWRpbmdzICovCisuc29ydGVkIHsgY29sb3I6ICMzMzMzMzM7IGZvbnQtd2VpZ2h0OiBib2xkOyB9Cisuc29ydGVkOmhvdmVyIHsgY29sb3I6ICMwMDAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9Cit0aCA+IGEsIHRoID4gc3BhbiB7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KKworLyogRm9yY2UgbG9uZyBzdHJpbmdzIGxpa2UgY29tbWl0IGhhc2hlcyB0byB3cmFwICovCisuaXNjb21taXQgeyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd29yZC13cmFwOiBicmVhay13b3JkO30KKworLyogTWFrZSB0aGUgcG9wb3ZlcnMgc2Nyb2xsYWJsZSBpZiB0aGV5IGFyZSB0b28gbG9uZyAqLworLnBvcG92ZXItY29udGVudCB7IG1heC1oZWlnaHQ6IDMwZW07IG92ZXJmbG93LXk6IHNjcm9sbDsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRhYmxlLiBXZSdsbCBwcm9iYWJseSB3b24ndCB1c2UgdGhvc2UgaW4gcHJvZHVjdGlvbiAqLworLm9uZSB7IHBhZGRpbmctbGVmdDogMThweCAhaW1wb3J0YW50OyB9CisudHdvIHsgcGFkZGluZy1sZWZ0OiAzNnB4ICFpbXBvcnRhbnQ7IH0KKy50aHJlZSB7IHBhZGRpbmctbGVmdDogNTRweCAhaW1wb3J0YW50OyB9CisuY29udGVudC1kaXJlY3RvcnkgYSB7IGNvbG9yOiAjMDA4OENDOyB9CisuY29udGVudC1kaXJlY3RvcnkgYTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorLnN5bWxpbmsgeyBjb2xvcjogI0NDQ0NDQzsgfQorCisvKiBTdHlsZXMgZm9yIHRoZSBuYXZiYXIgYWN0aW9ucyAqLworLmJ0bi1ncm91cCArIC5idG4tZ3JvdXAgeyBtYXJnaW4tcmlnaHQ6IDEwcHg7IH0KKy5uYXZiYXItaW5uZXIgPiAuYnRuLWdyb3VwIHsgbWFyZ2luLXRvcDogNnB4OyB9CisKKy8qIFN0eWxlcyBmb3IgdGhlIHBhcmVudCBpdGVtIGluIHRoZSBsZWZ0IG5hdmlnYXRpb24gKi8KKworLm5hdiA+IGxpID4gYS5uYXYtcGFyZW50IHsgZm9udC1zaXplOiAxOHB4OyBsaW5lLWhlaWdodDogMjVweDsgIH0KKworLyogT3RoZXIgc3R5bGVzICovCisuZHJvcGRvd24tbWVudSB7IHBhZGRpbmc6IDEwcHg7IH0KK3NlbGVjdCB7IHdpZHRoOiBhdXRvOyB9CisucGFnZS1oZWFkZXIgeyBjb2xvcjogIzVBNUE1QTsgfQorLnRvcC1haXIgeyBtYXJnaW4tdG9wOiA0MHB4O30KKy5wcm9ncmVzcyB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmxlYWQgLmJhZGdlIHsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogbm9ybWFsOyBib3JkZXItcmFkaXVzOiAxNXB4OyBwYWRkaW5nOiA5cHg7IH0KKy5sZWFkIG9sLCAubGVhZCB1bCB7IHBhZGRpbmc6IDEwcHggMCAwIDIwcHg7IH0KKy5sZWFkIG9sID4gbGksIC5sZWFkIHVsID4gbGkgeworICAgIGxpbmUtaGVpZ2h0OiAzNXB4OworfQorLndlbGwgPiAubGVhZCwgLmFsZXJ0IC5sZWFkIHsgbWFyZ2luLWJvdHRvbTogMHB4OyB9Cisud2VsbC10cmFuc3BhcmVudCB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9Cisubm8tcmVzdWx0cyB7IG1hcmdpbjogMTBweCAwOyB9CisudGFzay1uYW1lIHsgbWFyZ2luLWxlZnQ6IDdweDsgfQorLmljb24taGFuZC1yaWdodCB7Y29sb3I6ICNDQ0NDQ0M7IH0KKy5oZWxwLWlubGluZSB7IG1hcmdpbjogNXB4OyB9CisuZGFzaGJvYXJkLXNlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfQorCisvKiBzdHlsZXMgZm9yIGxhbmRpbmcgcGFnZSAtIGFuYWx5c2lzIG1vZGUgKi8KKy5oZXJvLXVuaXQgeyBtYXJnaW46IDIwcHggMCAzMHB4OyB9CisuaGVyby11bml0ID4gLmNsb3NlIHsgZm9udC1zaXplOjQwcHg7IH0KKy5oZXJvLWFjdGlvbnMgeyBtYXJnaW4tdG9wOiAzMHB4OyB9CisKKy8qIHN0eWxlcyBmb3IgbGFuZGluZyBwYWdlIC0gYnVpbGQgbW9kZSAqLworLmhlcm8tdW5pdCBwIHsgbGluZS1oZWlnaHQ6IDI1cHg7IH0KKy5oZXJvLXVuaXQgcCwgLmhlcm8tdW5pdCAuYnRuLWxhcmdlIHsgbWFyZ2luLXRvcDogMTVweDsgfQorLmhlcm8tdW5pdCB1bCB7IG1hcmdpbi10b3A6IDIwcHg7IH0KKy5oZXJvLXVuaXQgbGkgeyBsaW5lLWhlaWdodDogMzBweDsgfQorLmhlcm8tdW5pdCBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOyBtYXJnaW4tdG9wOiAxNXB4OyB9CisKKy8qIG1ha2UgdGFibGVzIENocm9tZS1oYXBweSAobWUsIG5vdCBzbyBtdWNoKSAqLwordGFibGUgeyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IH0KKworLyogc3R5bGVzIGZvciB0aGUgbmV3IGJ1aWxkIGJ1dHRvbiAqLworLm5ldy1idWlsZCAuYnRuLXByaW1hcnkgeyBwYWRkaW5nOiA0cHggMzBweDsgfQorLm5ldy1idWlsZCAuYWxlcnQgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisubmV3LWJ1aWxkIC5hbGVydCBwIHsgbWFyZ2luLXRvcDogMTBweDsgfQorCisvKiBzdHlsZXMgZm9yIHNob3dpbmcgdGhlIHByb2plY3QgbmFtZSBpbiBidWlsZCBtb2RlICovCisucHJvamVjdC1uYW1lIHsgcGFkZGluZy10b3A6IDA7IH0KKy5wcm9qZWN0LW5hbWUgLmxhYmVsIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTogNXB4OyBtYXJnaW4tbGVmdDogLTE1cHg7IHBhZGRpbmc6IDVweDsgfQorLnByb2plY3QtbmFtZSAubGFiZWwgPiBhIHsgY29sb3I6ICNmZmY7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH0KKworLyogUmVtb3ZlIGJvdHRvbSBtYXJnaW4gZm9yIGZvcm1zIGluc2lkZSBtb2RhbCBkaWFsb2dzICovCisjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0geyBtYXJnaW4tYm90dG9tOiAwcHg7IH0KKworLyogQ29uZmlndXJhdGlvbiBzdHlsZXMgKi8KKy5pY29uLXRyYXNoIHsgY29sb3I6ICNCOTRBNDg7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZy1sZWZ0OiA1cHg7IH0KKy5pY29uLXRyYXNoOmhvdmVyIHsgY29sb3I6ICM5NDNBMzg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CisuaWNvbi1wZW5jaWwsIC5pY29uLWRvd25sb2FkLWFsdCwgLmljb24tcmVmcmVzaCwgLmljb24tc3Rhci1lbXB0eSwgLmljb24tc3RhciAgeyBmb250LXNpemU6IDE2cHg7IGNvbG9yOiAjMDA4OENDOyBwYWRkaW5nLWxlZnQ6IDJweDsgfQorLmljb24tcGVuY2lsOmhvdmVyLCAuaWNvbi1kb3dubG9hZC1hbHQ6aG92ZXIsIC5pY29uLXJlZnJlc2g6aG92ZXIsIC5pY29uLXN0YXItZW1wdHk6aG92ZXIsIC5pY29uLXN0YXI6aG92ZXIsIC5pY29uLXRhc2tzOmhvdmVyIHsgY29sb3I6ICMwMDU1ODA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY3Vyc29yOiBwb2ludGVyOyB9CisuaWNvbi1zaGFyZSB7IHBhZGRpbmctbGVmdDogMnB4OyB9CisuYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrcyB7IGNvbG9yOiAjNDY4ODQ3OyB9CisuYWxlcnQtc3VjY2VzcyAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtc3VjY2VzcyAuaWNvbi10YXNrczpob3ZlciB7IGNvbG9yOiAjMzQ3MTMyOyB9CisuYWxlcnQtZXJyb3IgLmljb24tcmVmcmVzaCwgLmFsZXJ0LWVycm9yIC5pY29uLXRhc2tzIHsgY29sb3I6ICNiOTRhNDg7IH0KKy5hbGVydC1lcnJvciAuaWNvbi1yZWZyZXNoOmhvdmVyLCAuYWxlcnQtZXJyb3IgLmljb24tdGFza3M6aG92ZXIgeyBjb2xvcjogIzk0M0EzODsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBsaSwgLmNvbmZpZ3VyYXRpb24tbGlzdCBsYWJlbCB7IGxpbmUtaGVpZ2h0OiAzNXB4OyBmb250LXNpemU6IDIxcHg7IGZvbnQtd2VpZ2h0OiAyMDA7IG1hcmdpbi1ib3R0b206IDBweDt9CisuY29uZmlndXJhdGlvbi1saXN0IHsgZm9udC1zaXplOiAxNnB4OyBtYXJnaW4tYm90dG9tOiAxLjVlbTsgfQorLmNvbmZpZ3VyYXRpb24tbGlzdCBpIHsgZm9udC1zaXplOiAxNnB4OyB9CisvKi5jb25maWd1cmF0aW9uLWxheWVycyB7IGhlaWdodDogMTM1cHg7IG92ZXJmbG93OiBzY3JvbGw7IH0qLworLmNvdW50ZXIgeyBmb250LXdlaWdodDogbm9ybWFsOyB9Cisud2VsbC1hbGVydCB7IGJhY2tncm91bmQtY29sb3I6ICNGQ0Y4RTM7IGJvcmRlcjogMXB4IHNvbGlkICNGQkVFRDU7IGJvcmRlci1yYWRpdXM6IDRweDsgfQorLndlbGwtYWxlcnQgPiAubGVhZCB7IGNvbG9yOiAjQzA5ODUzOyBwYWRkaW5nLWJvdHRvbTogLjc1ZW07IH0KKy5jb25maWd1cmF0aW9uLWFsZXJ0IHsgbWFyZ2luLWJvdHRvbTogMHB4OyBwYWRkaW5nOiA4cHggMTRweDsgfQorLmNvbmZpZ3VyYXRpb24tYWxlcnQgcCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLnByb2plY3QtZm9ybSB7IG1hcmdpbi10b3A6IDEwcHg7IH0KKy5hZGQtbGF5ZXJzIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrLCAuYnVpbGQgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sgeyBtYXJnaW4tdG9wOiAwcHg7IH0KK2lucHV0Lmh1Z2UgeyBmb250LXNpemU6IDE3LjVweDsgcGFkZGluZzogMTFweCAxOXB4OyB9CisuYnVpbGQtZm9ybSB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ1aWxkLWZvcm0gLmlucHV0LWFwcGVuZCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ1aWxkLWZvcm0gLmJ0bi1sYXJnZSB7IHBhZGRpbmc6IDExcHggMzVweDsgfQorLmJ1aWxkLWZvcm0gcCB7IGZvbnQtc2l6ZToxNy41cHggO21hcmdpbjoxMnB4IDAgMCAxMHB4O30KKyNsYXllci1jb250YWluZXIgZm9ybSwgI3RhcmdldC1jb250YWluZXIgZm9ybSB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorLmJ0bi1wcmltYXJ5IC5pY29uLXF1ZXN0aW9uLXNpZ24sIC5idG4tZGFuZ2VyIC5pY29uLXF1ZXN0aW9uLXNpZ24geyBjb2xvcjogI2ZmZjsgfQorLmJ0bi1wcmltYXJ5IC5pY29uLXF1ZXN0aW9uLXNpZ246aG92ZXIsIC5idG4tZGFuZ2VyIC5pY29uLXF1ZXN0aW9uLXNpZ246aG92ZXIgeyBjb2xvcjogIzk5OTsgfQorYSBjb2RlIHsgY29sb3I6ICMwMDg4Q0M7IH0KK2EgY29kZTpob3ZlciB7IGNvbG9yOiAjMDA1NTgwOyB9CisubG9jYWxjb25mIHsgZm9udC1zaXplOiAxNy41cHg7IG1hcmdpbi10b3A6IDQwcHg7IH0KKy5sb2NhbGNvbmYgY29kZSB7IGZvbnQtc2l6ZTogMTcuNXB4OyB9CisjYWRkLWxheWVyLWRlcGVuZGVuY2llcyB7ICBtYXJnaW4tdG9wOiA1cHg7IH0KKy5saW5rLWFjdGlvbiB7IGZvbnQtc2l6ZTogMTcuNXB4OyBtYXJnaW4tdG9wOiA0MHB4OyB9CisubGluay1hY3Rpb24gY29kZSB7IGZvbnQtc2l6ZTogMTcuNXB4OyB9CisuYXJ0aWZhY3QgeyB3aWR0aDogOWVtOyB9CisuY29udHJvbC1ncm91cCB7IG1hcmdpbi1ib3R0b206IDBweDsgfQorI3Byb2plY3QtZGV0YWlscyBmb3JtIHsgbWFyZ2luOiAwcHg7IH0KK2RkIGZvcm0geyBtYXJnaW46IDEwcHggMCAwIDA7IH0KK2RsIHRleHRhcmVhIHsgcmVzaXplOiB2ZXJ0aWNhbDsgfQorLm5hdmJhci1maXhlZC10b3AgeyAgei1pbmRleDogMTsgfQorLnBvcG92ZXIgeyB6LWluZGV4OiAyOyB9CisuYnRuLWRhbmdlciAuaWNvbi10cmFzaCB7IGNvbG9yOiAjZmZmOyB9CisuYmJhcHBlbmRzIHsgbGlzdC1zdHlsZS10eXBlOiBub25lOyBtYXJnaW4tbGVmdDogMDsgfQorLmJiYXBwZW5kcyBsaSB7IGxpbmUtaGVpZ2h0OiAyNXB4OyB9CisuY29uZmlndXJhdGlvbi1saXN0IGlucHV0W3R5cGU9ImNoZWNrYm94Il0geyBtYXJnaW4tdG9wOjEzcHg7bWFyZ2luLXJpZ2h0OjEwcHg7IH0KKy5hbGVydCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgbWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tcmlnaHQ6IDNweDsgfQorLmFsZXJ0IG9sIHsgcGFkZGluZzogMTBweCAwcHggMHB4IDIwcHg7IH0KKy5hbGVydCBvbCA+IGxpIHsgbGluZS1oZWlnaHQ6IDM1cHg7IH0KKy5kbC12ZXJ0aWNhbCBmb3JtIHsgbWFyZ2luLXRvcDogMTBweDsgfQorLnNjcm9sbGluZyB7IGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7IGhlaWdodDogMTU0cHg7IG92ZXJmbG93OiBhdXRvOyBwYWRkaW5nOiA4cHg7IHdpZHRoOiAyNy41JTsgbWFyZ2luLWJvdHRvbTogMTBweDsgfQorLmxlYWQgLmhlbHAtYmxvY2sgeyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAyMHB4OyBmb250LXdlaWdodDogbm9ybWFsOyB9CisuYnV0dG9uLXBsYWNlICAuYnRuIHsgbWFyZ2luOiAwIDAgMjBweCAwOyB9CisudG9vbHRpcC1pbm5lciB7IG1heC13aWR0aDogMjUwcHg7IH0KKy5uZXctYnVpbGQgeyBwYWRkaW5nOiAyMHB4OyB9CisubmV3LWJ1aWxkIGxpIHsgbGluZS1oZWlnaHQ6IDMwcHg7IH0KKy5uZXctYnVpbGQgbGkgLmFsZXJ0IHsgbGluZS1oZWlnaHQ6IDIwcHg7IHdpZHRoOiAyMDBweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgfQorLm5ldy1idWlsZCBoNiB7IG1hcmdpbjogMTBweCAwIDAgMDsgY29sb3I6ICM1YTVhNWE7IH0KKy5uZXctYnVpbGQgaDMgeyBtYXJnaW46IDA7IGNvbG9yOiAjNWE1YTVhOyB9CisubmV3LWJ1aWxkIGZvcm0geyBtYXJnaW46IDVweCAwIDA7IH0KKy5uZXctYnVpbGQgLmlucHV0LWFwcGVuZCB7IG1hcmdpbi1ib3R0b206IDA7IH0KKyNidWlsZC1zZWxlY3RlZCB7IG1hcmdpbi10b3A6IDE1cHg7IH0KK2Rpdi5hZGQtZGVwcyB7IG1hcmdpbi10b3A6IDE1cHg7IH0KKy5idG4ubG9nIHsgbWFyZ2luLWxlZnQ6IDIwcHg7IH0KKworCisuYW5pbWF0ZS1yZXBlYXQgeworICBsaXN0LXN0eWxlOm5vbmU7CisgIGJveC1zaXppbmc6Ym9yZGVyLWJveDsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLW1vdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIsCisuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUgeworICAtd2Via2l0LXRyYW5zaXRpb246YWxsIGxpbmVhciAwLjVzOworICB0cmFuc2l0aW9uOmFsbCBsaW5lYXIgMC41czsKK30KKworLmFuaW1hdGUtcmVwZWF0Lm5nLWxlYXZlLm5nLWxlYXZlLWFjdGl2ZSwKKy5hbmltYXRlLXJlcGVhdC5uZy1tb3ZlLAorLmFuaW1hdGUtcmVwZWF0Lm5nLWVudGVyIHsKKyAgb3BhY2l0eTowOworfQorCisuYW5pbWF0ZS1yZXBlYXQubmctbGVhdmUsCisuYW5pbWF0ZS1yZXBlYXQubmctZW50ZXIubmctZW50ZXItYWN0aXZlIHsKKyAgb3BhY2l0eToxOworfQorCisudGFiLXBhbmUgdGFibGUgeyBtYXJnaW4tdG9wOiAxMHB4OyB9CisKK3RoZWFkIC5kZXNjcmlwdGlvbiwgLmdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IHsgd2lkdGg6IDM2NHB4OyB9Cit0aGVhZCAuYWRkLWRlbC1sYXllcnMgeyB3aWR0aDogMTI0cHg7IH0KKworI2xvYWRpbmctbm90aWZpY2F0aW9uIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiAxMDE7CisgIHRvcDogMyU7CisgIGxlZnQ6IDQwJTsKKyAgcmlnaHQ6IDQwJTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjYzA5ODUzOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7CisgIGJveC1zaGFkb3c6IDAgMCAxMHB4ICNjMDk4NTM7Cit9CisKKyNjaGFuZ2Utbm90aWZpY2F0aW9uIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB6LWluZGV4OiAxMDE7CisgIHRvcDogMyU7CisgIGxlZnQ6IDIwJTsKKyAgcmlnaHQ6IDIwJTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCAjM2E4N2FkOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7CisgIGJveC1zaGFkb3c6IDAgMCAxMHB4ICMzYTg3YWQ7Cit9CisKKy8qIENvcGllZCBpbiBmcm9tIG5ld2VyIHZlcnNpb24gb2YgRm9udC1Bd2Vzb21lIDQuMy4wICovCisuZmEtc3BpbiB7CisgIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKKyAgYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorLmZhLXB1bHNlIHsKKyAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMXMgaW5maW5pdGUgc3RlcHMoOCk7CisgIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCitALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICB9CisgIDEwMCUgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICB9Cit9CisKK0BrZXlmcmFtZXMgZmEtc3BpbiB7CisgIDAlIHsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOworICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CisgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CisgIH0KKyAgMTAwJSB7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpOworICB9Cit9CisvKiBFbmQgY29waWVkIGluIGZyb20gbmV3ZXIgdmVyc2lvbiBvZiBGb250LUF3ZXNvbWUgNC4zLjAgKi8KKworLnRvcC1wYWRkZWQgeworICBwYWRkaW5nLXRvcDogNjBweDsKK30KKworaW5wdXQuaW5wdXQtbGcgeworICBmb250LXNpemU6IDE4cHg7CisgIGhlaWdodDogMjJweDsKKyAgbGluZS1oZWlnaHQ6IDEuMzMzMzM7CisgIHBhZGRpbmc6IDEwcHggMTZweDsKK30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmExNWZkNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzCkBAIC0wLDAgKzEsMzMgQEAKKy8qIQorICogIEZvbnQgQXdlc29tZSAzLjAuMgorICogIHRoZSBpY29uaWMgZm9udCBkZXNpZ25lZCBmb3IgdXNlIHdpdGggVHdpdHRlciBCb290c3RyYXAKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhlIGZ1bGwgc3VpdGUgb2YgcGljdG9ncmFwaGljIGljb25zLCBleGFtcGxlcywgYW5kIGRvY3VtZW50YXRpb24KKyAqICBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly9mb3J0YXdlc29tZS5naXRodWIuY29tL0ZvbnQtQXdlc29tZS8KKyAqCisgKiAgTGljZW5zZQorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAtIFRoZSBGb250IEF3ZXNvbWUgZm9udCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlIC0gaHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwKKyAqICAtIEZvbnQgQXdlc29tZSBDU1MsIExFU1MsIGFuZCBTQVNTIGZpbGVzIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgLQorICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLmh0bWwKKyAqICAtIFRoZSBGb250IEF3ZXNvbWUgcGljdG9ncmFtcyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZIDMuMCBMaWNlbnNlIC0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLworICogIC0gQXR0cmlidXRpb24gaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIGluIEZvbnQgQXdlc29tZSAzLjAsIGJ1dCBtdWNoIGFwcHJlY2lhdGVkOgorICogICAgIkZvbnQgQXdlc29tZSBieSBEYXZlIEdhbmR5IC0gaHR0cDovL2ZvcnRhd2Vzb21lLmdpdGh1Yi5jb20vRm9udC1Bd2Vzb21lIgorCisgKiAgQ29udGFjdAorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBFbWFpbDogZGF2ZUBkYXZlZ2FuZHkuY29tCisgKiAgVHdpdHRlcjogaHR0cDovL3R3aXR0ZXIuY29tL2ZvcnRhd2Vzb19tZQorICogIFdvcms6IExlYWQgUHJvZHVjdCBEZXNpZ25lciBAIGh0dHA6Ly9reXJ1dXMuY29tCisgKi8KKworQGZvbnQtZmFjZXsKKyAgZm9udC1mYW1pbHk6J0ZvbnRBd2Vzb21lJzsKKyAgc3JjOnVybCgnLi4vZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC5lb3Q/dj0zLjAuMScpOworICBzcmM6dXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdD8jaWVmaXgmdj0zLjAuMScpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwKKyAgdXJsKCcuLi9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmY/dj0zLjAuMScpIGZvcm1hdCgnd29mZicpLAorICB1cmwoJy4uL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQudHRmP3Y9My4wLjEnKSBmb3JtYXQoJ3RydWV0eXBlJyk7CisgIGZvbnQtd2VpZ2h0Om5vcm1hbDsKKyAgZm9udC1zdHlsZTpub3JtYWwgfQorCitbY2xhc3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2ZvbnQtZmFtaWx5OkZvbnRBd2Vzb21lO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2Rpc3BsYXk6aW5saW5lO3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7bWFyZ2luLXRvcDowfS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9W2NsYXNzXj0iaWNvbi0iXTpiZWZvcmUsW2NsYXNzKj0iIGljb24tIl06YmVmb3Jle3RleHQtZGVjb3JhdGlvbjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3NwZWFrOm5vbmV9YSBbY2xhc3NePSJpY29uLSJdLGEgW2NsYXNzKj0iIGljb24tIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lmljb24tbGFyZ2U6YmVmb3Jle3ZlcnRpY2FsLWFsaWduOi0xMCU7Zm9udC1zaXplOjEuMzMzMzMzMzMzMzMzMzMzM2VtfS5idG4gW2NsYXNzXj0iaWNvbi0iXSwubmF2IFtjbGFzc149Imljb24tIl0sLmJ0biBbY2xhc3MqPSIgaWNvbi0iXSwubmF2IFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5idG4gW2NsYXNzKj0iIGljb24tIl0uaWNvbi1sYXJnZSwubmF2IFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2V7bGluZS1oZWlnaHQ6LjllbX0uYnRuIFtjbGFzc149Imljb24tIl0uaWNvbi1zcGluLC5uYXYgW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4sLmJ0biBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW4sLm5hdiBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLXNwaW57ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdi10YWJzIFtjbGFzc149Imljb24tIl0sLm5hdi1waWxscyBbY2xhc3NePSJpY29uLSJdLC5uYXYtdGFicyBbY2xhc3MqPSIgaWNvbi0iXSwubmF2LXBpbGxzIFtjbGFzcyo9IiBpY29uLSJdLC5uYXYtdGFicyBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdi1waWxscyBbY2xhc3NePSJpY29uLSJdLmljb24tbGFyZ2UsLm5hdi10YWJzIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdi1waWxscyBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi45ZW19bGkgW2NsYXNzXj0iaWNvbi0iXSwubmF2IGxpIFtjbGFzc149Imljb24tIl0sbGkgW2NsYXNzKj0iIGljb24tIl0sLm5hdiBsaSBbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxLjI1ZW07dGV4dC1hbGlnbjpjZW50ZXJ9bGkgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLC5uYXYgbGkgW2NsYXNzXj0iaWNvbi0iXS5pY29uLWxhcmdlLGxpIFtjbGFzcyo9IiBpY29uLSJdLmljb24tbGFyZ2UsLm5hdiBsaSBbY2xhc3MqPSIgaWNvbi0iXS5pY29uLWxhcmdle3dpZHRoOjEuNTYyNWVtfXVsLmljb25ze2xpc3Qtc3R5bGUtdHlwZTpub25lO3RleHQtaW5kZW50Oi0wLjc1ZW19dWwuaWNvbnMgbGkgW2NsYXNzXj0iaWNvbi0iXSx1bC5pY29ucyBsaSBbY2xhc3MqPSIgaWNvbi0iXXt3aWR0aDouNzVlbX0uaWNvbi1tdXRlZHtjb2xvcjojZWVlfS5pY29uLWJvcmRlcntib3JkZXI6c29saWQgMXB4ICNlZWU7cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uaWNvbi0yeHtmb250LXNpemU6MmVtfS5pY29uLTJ4Lmljb24tYm9yZGVye2JvcmRlci13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5pY29uLTN4e2ZvbnQtc2l6ZTozZW19Lmljb24tM3guaWNvbi1ib3JkZXJ7Ym9yZGVyLXdpZHRoOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHh9Lmljb24tNHh7Zm9udC1zaXplOjRlbX0uaWNvbi00eC5pY29uLWJvcmRlcntib3JkZXItd2lkdGg6NHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9W2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQsW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfVtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodCxbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0e21hcmdpbi1sZWZ0Oi4zZW19LmJ0biBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4gW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0biBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4xOGVtfS5idG4gW2NsYXNzXj0iaWNvbi0iXS5pY29uLXNwaW4uaWNvbi1sYXJnZSwuYnRuIFtjbGFzcyo9IiBpY29uLSJdLmljb24tc3Bpbi5pY29uLWxhcmdle2xpbmUtaGVpZ2h0Oi44ZW19LmJ0bi5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLWxlZnQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeCwuYnRuLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMnh7bWFyZ2luLXRvcDouMjVlbX0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtbGVmdC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4LC5idG4uYnRuLWxhcmdlIFtjbGFzcyo9IiBpY29uLSJdLnB1bGwtcmlnaHQuaWNvbi0yeHttYXJnaW4tdG9wOi4wNWVtfS5idG4uYnRuLWxhcmdlIFtjbGFzc149Imljb24tIl0ucHVsbC1sZWZ0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1sZWZ0Lmljb24tMnh7bWFyZ2luLXJpZ2h0Oi4yZW19LmJ0bi5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXS5wdWxsLXJpZ2h0Lmljb24tMngsLmJ0bi5idG4tbGFyZ2UgW2NsYXNzKj0iIGljb24tIl0ucHVsbC1yaWdodC5pY29uLTJ4e21hcmdpbi1sZWZ0Oi4yZW19Lmljb24tc3BpbntkaXNwbGF5OmlubGluZS1ibG9jazstbW96LWFuaW1hdGlvbjpzcGluIDJzIGluZmluaXRlIGxpbmVhcjstby1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7LXdlYmtpdC1hbmltYXRpb246c3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOnNwaW4gMnMgaW5maW5pdGUgbGluZWFyfUAtbW96LWtleWZyYW1lcyBzcGluezAley1tb3otdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAley1tb3otdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1ALXdlYmtpdC1rZXlmcmFtZXMgc3BpbnswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1vLWtleWZyYW1lcyBzcGluezAley1vLXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstby10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fUAtbXMta2V5ZnJhbWVzIHNwaW57MCV7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstbXMtdHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX0xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKX19QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey5pY29uLXNwaW57aGVpZ2h0Oi45ZW19LmJ0biAuaWNvbi1zcGlue2hlaWdodDphdXRvfS5pY29uLXNwaW4uaWNvbi1sYXJnZXtoZWlnaHQ6MS4yNWVtfS5idG4gLmljb24tc3Bpbi5pY29uLWxhcmdle2hlaWdodDouNzVlbX19Lmljb24tZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDAwIn0uaWNvbi1tdXNpYzpiZWZvcmV7Y29udGVudDoiXGYwMDEifS5pY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGYwMDIifS5pY29uLWVudmVsb3BlOmJlZm9yZXtjb250ZW50OiJcZjAwMyJ9Lmljb24taGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0uaWNvbi1zdGFyOmJlZm9yZXtjb250ZW50OiJcZjAwNSJ9Lmljb24tc3Rhci1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwMDYifS5pY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDA3In0uaWNvbi1maWxtOmJlZm9yZXtjb250ZW50OiJcZjAwOCJ9Lmljb24tdGgtbGFyZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDA5In0uaWNvbi10aDpiZWZvcmV7Y29udGVudDoiXGYwMGEifS5pY29uLXRoLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDBiIn0uaWNvbi1vazpiZWZvcmV7Y29udGVudDoiXGYwMGMifS5pY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwMGQifS5pY29uLXpvb20taW46YmVmb3Jle2NvbnRlbnQ6IlxmMDBlIn0uaWNvbi16b29tLW91dDpiZWZvcmV7Y29udGVudDoiXGYwMTAifS5pY29uLW9mZjpiZWZvcmV7Y29udGVudDoiXGYwMTEifS5pY29uLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS5pY29uLWNvZzpiZWZvcmV7Y29udGVudDoiXGYwMTMifS5pY29uLXRyYXNoOmJlZm9yZXtjb250ZW50OiJcZjAxNCJ9Lmljb24taG9tZTpiZWZvcmV7Y29udGVudDoiXGYwMTUifS5pY29uLWZpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDE2In0uaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OiJcZjAxNyJ9Lmljb24tcm9hZDpiZWZvcmV7Y29udGVudDoiXGYwMTgifS5pY29uLWRvd25sb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMTkifS5pY29uLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYSJ9Lmljb24tdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxYiJ9Lmljb24taW5ib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMDFjIn0uaWNvbi1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwMWQifS5pY29uLXJlcGVhdDpiZWZvcmV7Y29udGVudDoiXGYwMWUifS5pY29uLXJlZnJlc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDIxIn0uaWNvbi1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMjIifS5pY29uLWxvY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDIzIn0uaWNvbi1mbGFnOmJlZm9yZXtjb250ZW50OiJcZjAyNCJ9Lmljb24taGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGYwMjUifS5pY29uLXZvbHVtZS1vZmY6YmVmb3Jle2NvbnRlbnQ6IlxmMDI2In0uaWNvbi12b2x1bWUtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwMjcifS5pY29uLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGYwMjgifS5pY29uLXFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMjkifS5pY29uLWJhcmNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDJhIn0uaWNvbi10YWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDJiIn0uaWNvbi10YWdzOmJlZm9yZXtjb250ZW50OiJcZjAyYyJ9Lmljb24tYm9vazpiZWZvcmV7Y29udGVudDoiXGYwMmQifS5pY29uLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZjAyZSJ9Lmljb24tcHJpbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDJmIn0uaWNvbi1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMDMwIn0uaWNvbi1mb250OmJlZm9yZXtjb250ZW50OiJcZjAzMSJ9Lmljb24tYm9sZDpiZWZvcmV7Y29udGVudDoiXGYwMzIifS5pY29uLWl0YWxpYzpiZWZvcmV7Y29udGVudDoiXGYwMzMifS5pY29uLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzNCJ9Lmljb24tdGV4dC13aWR0aDpiZWZvcmV7Y29udGVudDoiXGYwMzUifS5pY29uLWFsaWduLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM2In0uaWNvbi1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDM3In0uaWNvbi1hbGlnbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwMzgifS5pY29uLWFsaWduLWp1c3RpZnk6YmVmb3Jle2NvbnRlbnQ6IlxmMDM5In0uaWNvbi1saXN0OmJlZm9yZXtjb250ZW50OiJcZjAzYSJ9Lmljb24taW5kZW50LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNiIn0uaWNvbi1pbmRlbnQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNjIn0uaWNvbi1mYWNldGltZS12aWRlbzpiZWZvcmV7Y29udGVudDoiXGYwM2QifS5pY29uLXBpY3R1cmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDNlIn0uaWNvbi1wZW5jaWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDQwIn0uaWNvbi1tYXAtbWFya2VyOmJlZm9yZXtjb250ZW50OiJcZjA0MSJ9Lmljb24tYWRqdXN0OmJlZm9yZXtjb250ZW50OiJcZjA0MiJ9Lmljb24tdGludDpiZWZvcmV7Y29udGVudDoiXGYwNDMifS5pY29uLWVkaXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ0In0uaWNvbi1zaGFyZTpiZWZvcmV7Y29udGVudDoiXGYwNDUifS5pY29uLWNoZWNrOmJlZm9yZXtjb250ZW50OiJcZjA0NiJ9Lmljb24tbW92ZTpiZWZvcmV7Y29udGVudDoiXGYwNDcifS5pY29uLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ4In0uaWNvbi1mYXN0LWJhY2t3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA0OSJ9Lmljb24tYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDRhIn0uaWNvbi1wbGF5OmJlZm9yZXtjb250ZW50OiJcZjA0YiJ9Lmljb24tcGF1c2U6YmVmb3Jle2NvbnRlbnQ6IlxmMDRjIn0uaWNvbi1zdG9wOmJlZm9yZXtjb250ZW50OiJcZjA0ZCJ9Lmljb24tZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGUifS5pY29uLWZhc3QtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTAifS5pY29uLXN0ZXAtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNTEifS5pY29uLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZjA1MiJ9Lmljb24tY2hldnJvbi1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA1MyJ9Lmljb24tY2hldnJvbi1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwNTQifS5pY29uLXBsdXMtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTUifS5pY29uLW1pbnVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU2In0uaWNvbi1yZW1vdmUtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNTcifS5pY29uLW9rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDU4In0uaWNvbi1xdWVzdGlvbi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1OSJ9Lmljb24taW5mby1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA1YSJ9Lmljb24tc2NyZWVuc2hvdDpiZWZvcmV7Y29udGVudDoiXGYwNWIifS5pY29uLXJlbW92ZS1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVjIn0uaWNvbi1vay1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDVkIn0uaWNvbi1iYW4tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1ZSJ9Lmljb24tYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwNjAifS5pY29uLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA2MSJ9Lmljb24tYXJyb3ctdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDYyIn0uaWNvbi1hcnJvdy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjA2MyJ9Lmljb24tc2hhcmUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjA2NCJ9Lmljb24tcmVzaXplLWZ1bGw6YmVmb3Jle2NvbnRlbnQ6IlxmMDY1In0uaWNvbi1yZXNpemUtc21hbGw6YmVmb3Jle2NvbnRlbnQ6IlxmMDY2In0uaWNvbi1wbHVzOmJlZm9yZXtjb250ZW50OiJcZjA2NyJ9Lmljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY4In0uaWNvbi1hc3RlcmlzazpiZWZvcmV7Y29udGVudDoiXGYwNjkifS5pY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDZhIn0uaWNvbi1naWZ0OmJlZm9yZXtjb250ZW50OiJcZjA2YiJ9Lmljb24tbGVhZjpiZWZvcmV7Y29udGVudDoiXGYwNmMifS5pY29uLWZpcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDZkIn0uaWNvbi1leWUtb3BlbjpiZWZvcmV7Y29udGVudDoiXGYwNmUifS5pY29uLWV5ZS1jbG9zZTpiZWZvcmV7Y29udGVudDoiXGYwNzAifS5pY29uLXdhcm5pbmctc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwNzEifS5pY29uLXBsYW5lOmJlZm9yZXtjb250ZW50OiJcZjA3MiJ9Lmljb24tY2FsZW5kYXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDczIn0uaWNvbi1yYW5kb206YmVmb3Jle2NvbnRlbnQ6IlxmMDc0In0uaWNvbi1jb21tZW50OmJlZm9yZXtjb250ZW50OiJcZjA3NSJ9Lmljb24tbWFnbmV0OmJlZm9yZXtjb250ZW50OiJcZjA3NiJ9Lmljb24tY2hldnJvbi11cDpiZWZvcmV7Y29udGVudDoiXGYwNzcifS5pY29uLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNzgifS5pY29uLXJldHdlZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDc5In0uaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZXtjb250ZW50OiJcZjA3YSJ9Lmljb24tZm9sZGVyLWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZjA3YiJ9Lmljb24tZm9sZGVyLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMDdjIn0uaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMDdkIn0uaWNvbi1yZXNpemUtaG9yaXpvbnRhbDpiZWZvcmV7Y29udGVudDoiXGYwN2UifS5pY29uLWJhci1jaGFydDpiZWZvcmV7Y29udGVudDoiXGYwODAifS5pY29uLXR3aXR0ZXItc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwODEifS5pY29uLWZhY2Vib29rLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDgyIn0uaWNvbi1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6IlxmMDgzIn0uaWNvbi1rZXk6YmVmb3Jle2NvbnRlbnQ6IlxmMDg0In0uaWNvbi1jb2dzOmJlZm9yZXtjb250ZW50OiJcZjA4NSJ9Lmljb24tY29tbWVudHM6YmVmb3Jle2NvbnRlbnQ6IlxmMDg2In0uaWNvbi10aHVtYnMtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDg3In0uaWNvbi10aHVtYnMtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwODgifS5pY29uLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDoiXGYwODkifS5pY29uLWhlYXJ0LWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjA4YSJ9Lmljb24tc2lnbm91dDpiZWZvcmV7Y29udGVudDoiXGYwOGIifS5pY29uLWxpbmtlZGluLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMDhjIn0uaWNvbi1wdXNocGluOmJlZm9yZXtjb250ZW50OiJcZjA4ZCJ9Lmljb24tZXh0ZXJuYWwtbGluazpiZWZvcmV7Y29udGVudDoiXGYwOGUifS5pY29uLXNpZ25pbjpiZWZvcmV7Y29udGVudDoiXGYwOTAifS5pY29uLXRyb3BoeTpiZWZvcmV7Y29udGVudDoiXGYwOTEifS5pY29uLWdpdGh1Yi1zaWduOmJlZm9yZXtjb250ZW50OiJcZjA5MiJ9Lmljb24tdXBsb2FkLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwOTMifS5pY29uLWxlbW9uOmJlZm9yZXtjb250ZW50OiJcZjA5NCJ9Lmljb24tcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDk1In0uaWNvbi1jaGVjay1lbXB0eTpiZWZvcmV7Y29udGVudDoiXGYwOTYifS5pY29uLWJvb2ttYXJrLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjA5NyJ9Lmljb24tcGhvbmUtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwOTgifS5pY29uLXR3aXR0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDk5In0uaWNvbi1mYWNlYm9vazpiZWZvcmV7Y29udGVudDoiXGYwOWEifS5pY29uLWdpdGh1YjpiZWZvcmV7Y29udGVudDoiXGYwOWIifS5pY29uLXVubG9jazpiZWZvcmV7Y29udGVudDoiXGYwOWMifS5pY29uLWNyZWRpdC1jYXJkOmJlZm9yZXtjb250ZW50OiJcZjA5ZCJ9Lmljb24tcnNzOmJlZm9yZXtjb250ZW50OiJcZjA5ZSJ9Lmljb24taGRkOmJlZm9yZXtjb250ZW50OiJcZjBhMCJ9Lmljb24tYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxmMGExIn0uaWNvbi1iZWxsOmJlZm9yZXtjb250ZW50OiJcZjBhMiJ9Lmljb24tY2VydGlmaWNhdGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGEzIn0uaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhNCJ9Lmljb24taGFuZC1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhNSJ9Lmljb24taGFuZC11cDpiZWZvcmV7Y29udGVudDoiXGYwYTYifS5pY29uLWhhbmQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwYTcifS5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhOCJ9Lmljb24tY2lyY2xlLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBhOSJ9Lmljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjBhYSJ9Lmljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGFiIn0uaWNvbi1nbG9iZTpiZWZvcmV7Y29udGVudDoiXGYwYWMifS5pY29uLXdyZW5jaDpiZWZvcmV7Y29udGVudDoiXGYwYWQifS5pY29uLXRhc2tzOmJlZm9yZXtjb250ZW50OiJcZjBhZSJ9Lmljb24tZmlsdGVyOmJlZm9yZXtjb250ZW50OiJcZjBiMCJ9Lmljb24tYnJpZWZjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBiMSJ9Lmljb24tZnVsbHNjcmVlbjpiZWZvcmV7Y29udGVudDoiXGYwYjIifS5pY29uLWdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjBjMCJ9Lmljb24tbGluazpiZWZvcmV7Y29udGVudDoiXGYwYzEifS5pY29uLWNsb3VkOmJlZm9yZXtjb250ZW50OiJcZjBjMiJ9Lmljb24tYmVha2VyOmJlZm9yZXtjb250ZW50OiJcZjBjMyJ9Lmljb24tY3V0OmJlZm9yZXtjb250ZW50OiJcZjBjNCJ9Lmljb24tY29weTpiZWZvcmV7Y29udGVudDoiXGYwYzUifS5pY29uLXBhcGVyLWNsaXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGM2In0uaWNvbi1zYXZlOmJlZm9yZXtjb250ZW50OiJcZjBjNyJ9Lmljb24tc2lnbi1ibGFuazpiZWZvcmV7Y29udGVudDoiXGYwYzgifS5pY29uLXJlb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMGM5In0uaWNvbi1saXN0LXVsOmJlZm9yZXtjb250ZW50OiJcZjBjYSJ9Lmljb24tbGlzdC1vbDpiZWZvcmV7Y29udGVudDoiXGYwY2IifS5pY29uLXN0cmlrZXRocm91Z2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGNjIn0uaWNvbi11bmRlcmxpbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGNkIn0uaWNvbi10YWJsZTpiZWZvcmV7Y29udGVudDoiXGYwY2UifS5pY29uLW1hZ2ljOmJlZm9yZXtjb250ZW50OiJcZjBkMCJ9Lmljb24tdHJ1Y2s6YmVmb3Jle2NvbnRlbnQ6IlxmMGQxIn0uaWNvbi1waW50ZXJlc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMGQyIn0uaWNvbi1waW50ZXJlc3Qtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwZDMifS5pY29uLWdvb2dsZS1wbHVzLXNpZ246YmVmb3Jle2NvbnRlbnQ6IlxmMGQ0In0uaWNvbi1nb29nbGUtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwZDUifS5pY29uLW1vbmV5OmJlZm9yZXtjb250ZW50OiJcZjBkNiJ9Lmljb24tY2FyZXQtZG93bjpiZWZvcmV7Y29udGVudDoiXGYwZDcifS5pY29uLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkOCJ9Lmljb24tY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwZDkifS5pY29uLWNhcmV0LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjBkYSJ9Lmljb24tY29sdW1uczpiZWZvcmV7Y29udGVudDoiXGYwZGIifS5pY29uLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRjIn0uaWNvbi1zb3J0LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGRkIn0uaWNvbi1zb3J0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkZSJ9Lmljb24tZW52ZWxvcGUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBlMCJ9Lmljb24tbGlua2VkaW46YmVmb3Jle2NvbnRlbnQ6IlxmMGUxIn0uaWNvbi11bmRvOmJlZm9yZXtjb250ZW50OiJcZjBlMiJ9Lmljb24tbGVnYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMGUzIn0uaWNvbi1kYXNoYm9hcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU0In0uaWNvbi1jb21tZW50LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTUifS5pY29uLWNvbW1lbnRzLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwZTYifS5pY29uLWJvbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGU3In0uaWNvbi1zaXRlbWFwOmJlZm9yZXtjb250ZW50OiJcZjBlOCJ9Lmljb24tdW1icmVsbGE6YmVmb3Jle2NvbnRlbnQ6IlxmMGU5In0uaWNvbi1wYXN0ZTpiZWZvcmV7Y29udGVudDoiXGYwZWEifS5pY29uLWxpZ2h0YnVsYjpiZWZvcmV7Y29udGVudDoiXGYwZWIifS5pY29uLWV4Y2hhbmdlOmJlZm9yZXtjb250ZW50OiJcZjBlYyJ9Lmljb24tY2xvdWQtZG93bmxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGVkIn0uaWNvbi1jbG91ZC11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGVlIn0uaWNvbi11c2VyLW1kOmJlZm9yZXtjb250ZW50OiJcZjBmMCJ9Lmljb24tc3RldGhvc2NvcGU6YmVmb3Jle2NvbnRlbnQ6IlxmMGYxIn0uaWNvbi1zdWl0Y2FzZTpiZWZvcmV7Y29udGVudDoiXGYwZjIifS5pY29uLWJlbGwtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmMyJ9Lmljb24tY29mZmVlOmJlZm9yZXtjb250ZW50OiJcZjBmNCJ9Lmljb24tZm9vZDpiZWZvcmV7Y29udGVudDoiXGYwZjUifS5pY29uLWZpbGUtYWx0OmJlZm9yZXtjb250ZW50OiJcZjBmNiJ9Lmljb24tYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMGY3In0uaWNvbi1ob3NwaXRhbDpiZWZvcmV7Y29udGVudDoiXGYwZjgifS5pY29uLWFtYnVsYW5jZTpiZWZvcmV7Y29udGVudDoiXGYwZjkifS5pY29uLW1lZGtpdDpiZWZvcmV7Y29udGVudDoiXGYwZmEifS5pY29uLWZpZ2h0ZXItamV0OmJlZm9yZXtjb250ZW50OiJcZjBmYiJ9Lmljb24tYmVlcjpiZWZvcmV7Y29udGVudDoiXGYwZmMifS5pY29uLWgtc2lnbjpiZWZvcmV7Y29udGVudDoiXGYwZmQifS5pY29uLXBsdXMtc2lnbi1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGZlIn0uaWNvbi1kb3VibGUtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDAifS5pY29uLWRvdWJsZS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDEifS5pY29uLWRvdWJsZS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMDIifS5pY29uLWRvdWJsZS1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwMyJ9Lmljb24tYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDQifS5pY29uLWFuZ2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEwNSJ9Lmljb24tYW5nbGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTA2In0uaWNvbi1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwNyJ9Lmljb24tZGVza3RvcDpiZWZvcmV7Y29udGVudDoiXGYxMDgifS5pY29uLWxhcHRvcDpiZWZvcmV7Y29udGVudDoiXGYxMDkifS5pY29uLXRhYmxldDpiZWZvcmV7Y29udGVudDoiXGYxMGEifS5pY29uLW1vYmlsZS1waG9uZTpiZWZvcmV7Y29udGVudDoiXGYxMGIifS5pY29uLWNpcmNsZS1ibGFuazpiZWZvcmV7Y29udGVudDoiXGYxMGMifS5pY29uLXF1b3RlLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTBkIn0uaWNvbi1xdW90ZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMGUifS5pY29uLXNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTEwIn0uaWNvbi1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTExIn0uaWNvbi1yZXBseTpiZWZvcmV7Y29udGVudDoiXGYxMTIifS5pY29uLWdpdGh1Yi1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTEzIn0uaWNvbi1mb2xkZXItY2xvc2UtYWx0OmJlZm9yZXtjb250ZW50OiJcZjExNCJ9Lmljb24tZm9sZGVyLW9wZW4tYWx0OmJlZm9yZXtjb250ZW50OiJcZjExNSJ9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDVkNzhhMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWIwYTA0NQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMjBfNjY2NjY2XzQweDQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19mbGF0XzEwXzAwMDAwMF80MHgxMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1NWY4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWE0ZmEwZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmY1OWUyZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxNzJiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzOWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfMTAwX2VlZWVlZV8xeDEwMC5wbmcgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfMTAwX2VlZWVlZV8xeDEwMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA4OWI3MAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2ltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF83NV9mZmU0NWNfMXgxMDAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2MWI3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWM4ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfMjI4ZWYxXzI1NngyNDAucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDY4YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGJiZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZmZkMjdhXzI1NngyNDAucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDM1YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9pbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY2ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvaW1hZ2VzL3VpLWljb25zX2ZmZmZmZl8yNTZ4MjQwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0ODZlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnktdWkubWluLmNzcwpAQCAtMCwwICsxLDcgQEAKKy8qISBqUXVlcnkgVUkgLSB2MS4xMS40IC0gMjAxNS0wMy0xNworKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIEluY2x1ZGVzOiBjb3JlLmNzcywgZGF0ZXBpY2tlci5jc3MsIHRoZW1lLmNzcworKiBUbyB2aWV3IGFuZCBtb2RpZnkgdGhpcyB0aGVtZSwgdmlzaXQgaHR0cDovL2pxdWVyeXVpLmNvbS90aGVtZXJvbGxlci8/ZmZEZWZhdWx0PVRyZWJ1Y2hldCUyME1TJTJDVGFob21hJTJDVmVyZGFuYSUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9Ym9sZCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTRweCZiZ0NvbG9ySGVhZGVyPWY2YTgyOCZiZ1RleHR1cmVIZWFkZXI9Z2xvc3Nfd2F2ZSZiZ0ltZ09wYWNpdHlIZWFkZXI9MzUmYm9yZGVyQ29sb3JIZWFkZXI9ZTc4ZjA4JmZjSGVhZGVyPWZmZmZmZiZpY29uQ29sb3JIZWFkZXI9ZmZmZmZmJmJnQ29sb3JDb250ZW50PWVlZWVlZSZiZ1RleHR1cmVDb250ZW50PWhpZ2hsaWdodF9zb2Z0JmJnSW1nT3BhY2l0eUNvbnRlbnQ9MTAwJmJvcmRlckNvbG9yQ29udGVudD1kZGRkZGQmZmNDb250ZW50PTMzMzMzMyZpY29uQ29sb3JDb250ZW50PTIyMjIyMiZiZ0NvbG9yRGVmYXVsdD1mNmY2ZjYmYmdUZXh0dXJlRGVmYXVsdD1nbGFzcyZiZ0ltZ09wYWNpdHlEZWZhdWx0PTEwMCZib3JkZXJDb2xvckRlZmF1bHQ9Y2NjY2NjJmZjRGVmYXVsdD0xYzk0YzQmaWNvbkNvbG9yRGVmYXVsdD1lZjhjMDgmYmdDb2xvckhvdmVyPWZkZjVjZSZiZ1RleHR1cmVIb3Zlcj1nbGFzcyZiZ0ltZ09wYWNpdHlIb3Zlcj0xMDAmYm9yZGVyQ29sb3JIb3Zlcj1mYmNiMDkmZmNIb3Zlcj1jNzc0MDUmaWNvbkNvbG9ySG92ZXI9ZWY4YzA4JmJnQ29sb3JBY3RpdmU9ZmZmZmZmJmJnVGV4dHVyZUFjdGl2ZT1nbGFzcyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9ZmJkODUwJmZjQWN0aXZlPWViOGYwMCZpY29uQ29sb3JBY3RpdmU9ZWY4YzA4JmJnQ29sb3JIaWdobGlnaHQ9ZmZlNDVjJmJnVGV4dHVyZUhpZ2hsaWdodD1oaWdobGlnaHRfc29mdCZiZ0ltZ09wYWNpdHlIaWdobGlnaHQ9NzUmYm9yZGVyQ29sb3JIaWdobGlnaHQ9ZmVkMjJmJmZjSGlnaGxpZ2h0PTM2MzYzNiZpY29uQ29sb3JIaWdobGlnaHQ9MjI4ZWYxJmJnQ29sb3JFcnJvcj1iODE5MDAmYmdUZXh0dXJlRXJyb3I9ZGlhZ29uYWxzX3RoaWNrJmJnSW1nT3BhY2l0eUVycm9yPTE4JmJvcmRlckNvbG9yRXJyb3I9Y2QwYTBhJmZjRXJyb3I9ZmZmZmZmJmljb25Db2xvckVycm9yPWZmZDI3YSZiZ0NvbG9yT3ZlcmxheT02NjY2NjYmYmdUZXh0dXJlT3ZlcmxheT1kaWFnb25hbHNfdGhpY2smYmdJbWdPcGFjaXR5T3ZlcmxheT0yMCZvcGFjaXR5T3ZlcmxheT01MCZiZ0NvbG9yU2hhZG93PTAwMDAwMCZiZ1RleHR1cmVTaGFkb3c9ZmxhdCZiZ0ltZ09wYWNpdHlTaGFkb3c9MTAmb3BhY2l0eVNoYWRvdz0yMCZ0aGlja25lc3NTaGFkb3c9NXB4Jm9mZnNldFRvcFNoYWRvdz0tNXB4Jm9mZnNldExlZnRTaGFkb3c9LTVweCZjb3JuZXJSYWRpdXNTaGFkb3c9NXB4CisqIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLworCisudWktaGVscGVyLWhpZGRlbntkaXNwbGF5Om5vbmV9LnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0udWktaGVscGVyLXJlc2V0e21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtvdXRsaW5lOjA7bGluZS1oZWlnaHQ6MS4zO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2xpc3Qtc3R5bGU6bm9uZX0udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSwudWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9LnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS51aS1oZWxwZXItY2xlYXJmaXh7bWluLWhlaWdodDowfS51aS1oZWxwZXItemZpeHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCl9LnVpLWZyb250e3otaW5kZXg6MTAwfS51aS1zdGF0ZS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LnVpLWljb257ZGlzcGxheTpibG9jazt0ZXh0LWluZGVudDotOTk5OTlweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51aS13aWRnZXQtb3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFye3dpZHRoOjQ1JX0udWktZGF0ZXBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MCAwIC40ZW19LnVpLWRhdGVwaWNrZXIgdGh7cGFkZGluZzouN2VtIC4zZW07dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDAgMDtwYWRkaW5nOjAgLjJlbTtib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpyaWdodDttYXJnaW46LjVlbSAuMmVtIC40ZW07Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMmVtIC42ZW0gLjNlbSAuNmVtO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnR7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpe3dpZHRoOmF1dG99LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZXt3aWR0aDo5NSU7bWFyZ2luOjAgYXV0byAuNGVtfS51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6NTAlfS51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MzMuMyV9LnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDoyNSV9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItbGVmdC13aWR0aDowfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6bGVmdH0udWktZGF0ZXBpY2tlci1yb3ctYnJlYWt7Y2xlYXI6Ym90aDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowfS51aS1kYXRlcGlja2VyLXJ0bHtkaXJlY3Rpb246cnRsfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2e3JpZ2h0OjJweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHR7bGVmdDoycHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlcntyaWdodDoxcHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVye2xlZnQ6MXB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjFweH0udWktd2lkZ2V0e2ZvbnQtZmFtaWx5OlRyZWJ1Y2hldCBNUyxUYWhvbWEsVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjFlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0LWNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQ6I2VlZSB1cmwoImltYWdlcy91aS1iZ19oaWdobGlnaHQtc29mdF8xMDBfZWVlZWVlXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzMzM30udWktd2lkZ2V0LWNvbnRlbnQgYXtjb2xvcjojMzMzfS51aS13aWRnZXQtaGVhZGVye2JvcmRlcjoxcHggc29saWQgI2U3OGYwODtiYWNrZ3JvdW5kOiNmNmE4MjggdXJsKCJpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV8zNV9mNmE4MjhfNTAweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0udWktd2lkZ2V0LWhlYWRlciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0e2JvcmRlcjoxcHggc29saWQgI2NjYztiYWNrZ3JvdW5kOiNmNmY2ZjYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2Y2ZjZmNl8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzFjOTRjNH0udWktc3RhdGUtZGVmYXVsdCBhLC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWR7Y29sb3I6IzFjOTRjNDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3Vze2JvcmRlcjoxcHggc29saWQgI2ZiY2IwOTtiYWNrZ3JvdW5kOiNmZGY1Y2UgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfMTAwX2ZkZjVjZV8xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2M3NzQwNX0udWktc3RhdGUtaG92ZXIgYSwudWktc3RhdGUtaG92ZXIgYTpob3ZlciwudWktc3RhdGUtaG92ZXIgYTpsaW5rLC51aS1zdGF0ZS1ob3ZlciBhOnZpc2l0ZWQsLnVpLXN0YXRlLWZvY3VzIGEsLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsLnVpLXN0YXRlLWZvY3VzIGE6bGluaywudWktc3RhdGUtZm9jdXMgYTp2aXNpdGVke2NvbG9yOiNjNzc0MDU7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZle2JvcmRlcjoxcHggc29saWQgI2ZiZDg1MDtiYWNrZ3JvdW5kOiNmZmYgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojZWI4ZjAwfS51aS1zdGF0ZS1hY3RpdmUgYSwudWktc3RhdGUtYWN0aXZlIGE6bGluaywudWktc3RhdGUtYWN0aXZlIGE6dmlzaXRlZHtjb2xvcjojZWI4ZjAwO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodHtib3JkZXI6MXB4IHNvbGlkICNmZWQyMmY7YmFja2dyb3VuZDojZmZlNDVjIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2ZmZTQ1Y18xeDEwMC5wbmciKSA1MCUgdG9wIHJlcGVhdC14O2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhe2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9ye2JvcmRlcjoxcHggc29saWQgI2NkMGEwYTtiYWNrZ3JvdW5kOiNiODE5MDAgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzE4X2I4MTkwMF80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYXtjb2xvcjojZmZmfS51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dHtjb2xvcjojZmZmfS51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeXtmb250LXdlaWdodDpib2xkfS51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeXtvcGFjaXR5Oi43O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTtmb250LXdlaWdodDpub3JtYWx9LnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVke29wYWNpdHk6LjM1O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29ue2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KX0udWktaWNvbnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS51aS1pY29uLC51aS13aWRnZXQtY29udGVudCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyIpfS51aS13aWRnZXQtaGVhZGVyIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZmZmZmZmXzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtaG92ZXIgLnVpLWljb24sLnVpLXN0YXRlLWZvY3VzIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc18yMjhlZjFfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZXJyb3IgLnVpLWljb24sLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmQyN2FfMjU2eDI0MC5wbmciKX0udWktaWNvbi1ibGFua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktaWNvbi1jYXJhdC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVpLWljb24tY2FyYXQtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IDB9LnVpLWljb24tY2FyYXQtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0udWktaWNvbi1jYXJhdC0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0udWktaWNvbi1jYXJhdC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAwfS51aS1pY29uLWNhcmF0LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS51aS1pY29uLWNhcmF0LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9LnVpLWljb24tY2FyYXQtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAwfS51aS1pY29uLWNhcmF0LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IDB9LnVpLWljb24tY2FyYXQtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0udWktaWNvbi10cmlhbmdsZS0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2cHh9LnVpLWljb24tYXJyb3ctMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0zMnB4fS51aS1pY29uLWFycm93dGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246MCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNjRweH0udWktaWNvbi1hcnJvdy00e2JhY2tncm91bmQtcG9zaXRpb246MCAtODBweH0udWktaWNvbi1hcnJvdy00LWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtODBweH0udWktaWNvbi1leHRsaW5re2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTgwcHh9LnVpLWljb24tbmV3d2lue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTgwcHh9LnVpLWljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC04MHB4fS51aS1pY29uLXNodWZmbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtODBweH0udWktaWNvbi10cmFuc2Zlci1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtODBweH0udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtODBweH0udWktaWNvbi1mb2xkZXItY29sbGFwc2Vke2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0udWktaWNvbi1mb2xkZXItb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnQtYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS51aS1pY29uLW5vdGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtOTZweH0udWktaWNvbi1tYWlsLWNsb3NlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC05NnB4fS51aS1pY29uLW1haWwtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS51aS1pY29uLXN1aXRjYXNle2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05NnB4fS51aS1pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTk2cHh9LnVpLWljb24tcGVyc29ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS51aS1pY29uLXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC05NnB4fS51aS1pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC05NnB4fS51aS1pY29uLWxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0udWktaWNvbi11bmxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtOTZweH0udWktaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtOTZweH0udWktaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9LnVpLWljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTExMnB4fS51aS1pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTEycHh9LnVpLWljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTEycHh9LnVpLWljb24tY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMTJweH0udWktaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTEycHh9LnVpLWljb24tY2xvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTEycHh9LnVpLWljb24tZGlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMTJweH0udWktaWNvbi1jYWxjdWxhdG9ye2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMTJweH0udWktaWNvbi16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTExMnB4fS51aS1pY29uLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTExMnB4fS51aS1pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTEycHh9LnVpLWljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMTJweH0udWktaWNvbi1nZWFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMTJweH0udWktaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTEycHh9LnVpLWljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTEycHh9LnVpLWljb24tbGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTEycHh9LnVpLWljb24tY2FuY2Vse2JhY2tncm91bmQtcG9zaXRpb246MCAtMTI4cHh9LnVpLWljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMjhweH0udWktaWNvbi1wbHVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTI4cHh9LnVpLWljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTI4cHh9LnVpLWljb24tbWludXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXRoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyOHB4fS51aS1pY29uLWtleXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTI4cHh9LnVpLWljb24tbGlnaHRidWxie2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMjhweH0udWktaWNvbi1zY2lzc29yc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTI4cHh9LnVpLWljb24tY2xpcGJvYXJke2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMjhweH0udWktaWNvbi1jb3B5e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMjhweH0udWktaWNvbi1jb250YWN0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjhweH0udWktaWNvbi1pbWFnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTI4cHh9LnVpLWljb24tdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTEyOHB4fS51aS1pY29uLXNjcmlwdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTI4cHh9LnVpLWljb24tYWxlcnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0udWktaWNvbi1pbmZve2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE0NHB4fS51aS1pY29uLW5vdGljZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNDRweH0udWktaWNvbi1oZWxwe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS51aS1pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE0NHB4fS51aS1pY29uLWJ1bGxldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE0NHB4fS51aS1pY29uLXBpbi13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNDRweH0udWktaWNvbi1waW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9LnVpLWljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2MHB4fS51aS1pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2MHB4fS51aS1pY29uLXNlZWstbmV4dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNjBweH0udWktaWNvbi1zZWVrLXByZXZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTYwcHh9LnVpLWljb24tc2Vlay1lbmR7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTYwcHh9LnVpLWljb24tc2Vlay1zdGFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWZpcnN0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTYwcHh9LnVpLWljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTYwcHh9LnVpLWljb24tcG93ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNzZweH0udWktaWNvbi1zaWduYWwtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNzZweH0udWktaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0we2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTJ7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ze2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE3NnB4fS51aS1pY29uLWNpcmNsZS1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMTkycHh9LnVpLWljb24tY2lyY2xlLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjA4cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMjRweH0udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIyNHB4fS51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMjRweH0udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIyNHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLXRse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci10cntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItYmx7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLWJye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0udWktd2lkZ2V0LW92ZXJsYXl7YmFja2dyb3VuZDojNjY2IHVybCgiaW1hZ2VzL3VpLWJnX2RpYWdvbmFscy10aGlja18yMF82NjY2NjZfNDB4NDAucG5nIikgNTAlIDUwJSByZXBlYXQ7b3BhY2l0eTouNTtmaWx0ZXI6QWxwaGEoT3BhY2l0eT01MCl9LnVpLXdpZGdldC1zaGFkb3d7bWFyZ2luOi01cHggMCAwIC01cHg7cGFkZGluZzo1cHg7YmFja2dyb3VuZDojMDAwIHVybCgiaW1hZ2VzL3VpLWJnX2ZsYXRfMTBfMDAwMDAwXzQweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O29wYWNpdHk6LjI7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MjApO2JvcmRlci1yYWRpdXM6NXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTU3OGE0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzCkBAIC0wLDAgKzEsNSBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE1CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKy51aS1oZWxwZXItaGlkZGVue2Rpc3BsYXk6bm9uZX0udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxle2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS51aS1oZWxwZXItcmVzZXR7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO291dGxpbmU6MDtsaW5lLWhlaWdodDoxLjM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwMCU7bGlzdC1zdHlsZTpub25lfS51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLC51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0udWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LnVpLWhlbHBlci1jbGVhcmZpeHttaW4taGVpZ2h0OjB9LnVpLWhlbHBlci16Zml4e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKX0udWktZnJvbnR7ei1pbmRleDoxMDB9LnVpLXN0YXRlLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0udWktaWNvbntkaXNwbGF5OmJsb2NrO3RleHQtaW5kZW50Oi05OTk5OXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVpLXdpZGdldC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS51aS1kYXRlcGlja2Vye3dpZHRoOjE3ZW07cGFkZGluZzouMmVtIC4yZW0gMDtkaXNwbGF5Om5vbmV9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItaGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6LjJlbSAwfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3dpZHRoOjEuOGVtO2hlaWdodDoxLjhlbX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7dG9wOjFweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2e2xlZnQ6MnB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cmlnaHQ6MnB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXJ7bGVmdDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlcntyaWdodDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi04cHg7dG9wOjUwJTttYXJnaW4tdG9wOi04cHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGV7bWFyZ2luOjAgMi4zZW07bGluZS1oZWlnaHQ6MS44ZW07dGV4dC1hbGlnbjpjZW50ZXJ9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0e2ZvbnQtc2l6ZToxZW07bWFyZ2luOjFweCAwfS51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLC51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJ7d2lkdGg6NDUlfS51aS1kYXRlcGlja2VyIHRhYmxle3dpZHRoOjEwMCU7Zm9udC1zaXplOi45ZW07Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21hcmdpbjowIDAgLjRlbX0udWktZGF0ZXBpY2tlciB0aHtwYWRkaW5nOi43ZW0gLjNlbTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDpib2xkO2JvcmRlcjowfS51aS1kYXRlcGlja2VyIHRke2JvcmRlcjowO3BhZGRpbmc6MXB4fS51aS1kYXRlcGlja2VyIHRkIHNwYW4sLnVpLWRhdGVwaWNrZXIgdGQgYXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6LjJlbTt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7YmFja2dyb3VuZC1pbWFnZTpub25lO21hcmdpbjouN2VtIDAgMCAwO3BhZGRpbmc6MCAuMmVtO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLWJvdHRvbTowfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OnJpZ2h0O21hcmdpbjouNWVtIC4yZW0gLjRlbTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOi4yZW0gLjZlbSAuM2VtIC42ZW07d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGl7d2lkdGg6YXV0b30udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxle3dpZHRoOjk1JTttYXJnaW46MCBhdXRvIC40ZW19LnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDo1MCV9LnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDozMy4zJX0udWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjI1JX0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1sZWZ0LXdpZHRoOjB9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpsZWZ0fS51aS1kYXRlcGlja2VyLXJvdy1icmVha3tjbGVhcjpib3RoO3dpZHRoOjEwMCU7Zm9udC1zaXplOjB9LnVpLWRhdGVwaWNrZXItcnRse2RpcmVjdGlvbjpydGx9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXZ7cmlnaHQ6MnB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dHtsZWZ0OjJweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVye3JpZ2h0OjFweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXJ7bGVmdDoxcHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnRoZW1lLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzQ1NDMxMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzCkBAIC0wLDAgKzEsNSBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE3CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKy51aS13aWRnZXR7Zm9udC1mYW1pbHk6VHJlYnVjaGV0IE1TLFRhaG9tYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEuMWVtfS51aS13aWRnZXQgLnVpLXdpZGdldHtmb250LXNpemU6MWVtfS51aS13aWRnZXQgaW5wdXQsLnVpLXdpZGdldCBzZWxlY3QsLnVpLXdpZGdldCB0ZXh0YXJlYSwudWktd2lkZ2V0IGJ1dHRvbntmb250LWZhbWlseTpUcmVidWNoZXQgTVMsVGFob21hLFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MWVtfS51aS13aWRnZXQtY29udGVudHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7YmFja2dyb3VuZDojZWVlIHVybCgiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0XzEwMF9lZWVlZWVfMXgxMDAucG5nIikgNTAlIHRvcCByZXBlYXQteDtjb2xvcjojMzMzfS51aS13aWRnZXQtY29udGVudCBhe2NvbG9yOiMzMzN9LnVpLXdpZGdldC1oZWFkZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZTc4ZjA4O2JhY2tncm91bmQ6I2Y2YTgyOCB1cmwoImltYWdlcy91aS1iZ19nbG9zcy13YXZlXzM1X2Y2YTgyOF81MDB4MTAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfS51aS13aWRnZXQtaGVhZGVyIGF7Y29sb3I6I2ZmZn0udWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQ6I2Y2ZjZmNiB1cmwoImltYWdlcy91aS1iZ19nbGFzc18xMDBfZjZmNmY2XzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMWM5NGM0fS51aS1zdGF0ZS1kZWZhdWx0IGEsLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLC51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZHtjb2xvcjojMWM5NGM0O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlciwudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXN7Ym9yZGVyOjFweCBzb2xpZCAjZmJjYjA5O2JhY2tncm91bmQ6I2ZkZjVjZSB1cmwoImltYWdlcy91aS1iZ19nbGFzc18xMDBfZmRmNWNlXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojYzc3NDA1fS51aS1zdGF0ZS1ob3ZlciBhLC51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLC51aS1zdGF0ZS1ob3ZlciBhOmxpbmssLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZCwudWktc3RhdGUtZm9jdXMgYSwudWktc3RhdGUtZm9jdXMgYTpob3ZlciwudWktc3RhdGUtZm9jdXMgYTpsaW5rLC51aS1zdGF0ZS1mb2N1cyBhOnZpc2l0ZWR7Y29sb3I6I2M3NzQwNTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtYWN0aXZlLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjZmJkODUwO2JhY2tncm91bmQ6I2ZmZiB1cmwoImltYWdlcy91aS1iZ19nbGFzc182NV9mZmZmZmZfMXg0MDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNlYjhmMDB9LnVpLXN0YXRlLWFjdGl2ZSBhLC51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLC51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVke2NvbG9yOiNlYjhmMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0e2JvcmRlcjoxcHggc29saWQgI2ZlZDIyZjtiYWNrZ3JvdW5kOiNmZmU0NWMgdXJsKCJpbWFnZXMvdWktYmdfaGlnaGxpZ2h0LXNvZnRfNzVfZmZlNDVjXzF4MTAwLnBuZyIpIDUwJSB0b3AgcmVwZWF0LXg7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGF7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3J7Ym9yZGVyOjFweCBzb2xpZCAjY2QwYTBhO2JhY2tncm91bmQ6I2I4MTkwMCB1cmwoImltYWdlcy91aS1iZ19kaWFnb25hbHMtdGhpY2tfMThfYjgxOTAwXzQweDQwLnBuZyIpIDUwJSA1MCUgcmVwZWF0O2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0e2NvbG9yOiNmZmZ9LnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5e2ZvbnQtd2VpZ2h0OmJvbGR9LnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5e29wYWNpdHk6Ljc7ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApO2ZvbnQtd2VpZ2h0Om5vcm1hbH0udWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWR7b3BhY2l0eTouMzU7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0udWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb257ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpfS51aS1pY29ue3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LnVpLWljb24sLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nIil9LnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19mZmZmZmZfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZGVmYXVsdCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2VmOGMwOF8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwudWktc3RhdGUtZm9jdXMgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19lZjhjMDhfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtYWN0aXZlIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZWY4YzA4XzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzIyOGVmMV8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2ZmZDI3YV8yNTZ4MjQwLnBuZyIpfS51aS1pY29uLWJsYW5re2JhY2tncm91bmQtcG9zaXRpb246MTZweCAxNnB4fS51aS1pY29uLWNhcmF0LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWktaWNvbi1jYXJhdC0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0udWktaWNvbi1jYXJhdC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAwfS51aS1pY29uLWNhcmF0LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS51aS1pY29uLWNhcmF0LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IDB9LnVpLWljb24tY2FyYXQtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IDB9LnVpLWljb24tY2FyYXQtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0udWktaWNvbi1jYXJhdC0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IDB9LnVpLWljb24tY2FyYXQtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggMH0udWktaWNvbi1jYXJhdC0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS51aS1pY29uLXRyaWFuZ2xlLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTZweH0udWktaWNvbi1hcnJvdy0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0zMnB4fS51aS1pY29uLWFycm93LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTMycHh9LnVpLWljb24tYXJyb3d0aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC02NHB4fS51aS1pY29uLWFycm93LTR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC04MHB4fS51aS1pY29uLWFycm93LTQtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC04MHB4fS51aS1pY29uLWV4dGxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtODBweH0udWktaWNvbi1uZXd3aW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtODBweH0udWktaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTgwcHh9LnVpLWljb24tc2h1ZmZsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVyLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVydGhpY2stZS13e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC04MHB4fS51aS1pY29uLWZvbGRlci1jb2xsYXBzZWR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS51aS1pY29uLWZvbGRlci1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtOTZweH0udWktaWNvbi1kb2N1bWVudC1ie2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9LnVpLWljb24tbm90ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC05NnB4fS51aS1pY29uLW1haWwtY2xvc2Vke2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTk2cHh9LnVpLWljb24tbWFpbC1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9LnVpLWljb24tc3VpdGNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTk2cHh9LnVpLWljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtOTZweH0udWktaWNvbi1wZXJzb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9LnVpLWljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTk2cHh9LnVpLWljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTk2cHh9LnVpLWljb24tbG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS51aS1pY29uLXVubG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC05NnB4fS51aS1pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC05NnB4fS51aS1pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0udWktaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9LnVpLWljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMTJweH0udWktaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMTJweH0udWktaWNvbi1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTExMnB4fS51aS1pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMTJweH0udWktaWNvbi1jbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMTJweH0udWktaWNvbi1kaXNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTExMnB4fS51aS1pY29uLWNhbGN1bGF0b3J7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTExMnB4fS51aS1pY29uLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTEycHh9LnVpLWljb24tem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTEycHh9LnVpLWljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMTJweH0udWktaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTExMnB4fS51aS1pY29uLWdlYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExMnB4fS51aS1pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMTJweH0udWktaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMTJweH0udWktaWNvbi1saW5re2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMTJweH0udWktaWNvbi1jYW5jZWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0udWktaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTEyOHB4fS51aS1pY29uLXBsdXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMjhweH0udWktaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjhweH0udWktaWNvbi1taW51c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTEyOHB4fS51aS1pY29uLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTEyOHB4fS51aS1pY29uLWNsb3NldGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTI4cHh9LnVpLWljb24ta2V5e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMjhweH0udWktaWNvbi1saWdodGJ1bGJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTEyOHB4fS51aS1pY29uLXNjaXNzb3Jze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjhweH0udWktaWNvbi1jbGlwYm9hcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTEyOHB4fS51aS1pY29uLWNvcHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTEyOHB4fS51aS1pY29uLWNvbnRhY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyOHB4fS51aS1pY29uLWltYWdle2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMjhweH0udWktaWNvbi12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTI4cHh9LnVpLWljb24tc2NyaXB0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjhweH0udWktaWNvbi1hbGVydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0NHB4fS51aS1pY29uLWluZm97YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTQ0cHh9LnVpLWljb24tbm90aWNle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE0NHB4fS51aS1pY29uLWhlbHB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9LnVpLWljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTQ0cHh9LnVpLWljb24tYnVsbGV0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTQ0cHh9LnVpLWljb24tcGluLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE0NHB4fS51aS1pY29uLXBpbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNDRweH0udWktaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTYwcHh9LnVpLWljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTYwcHh9LnVpLWljb24tc2Vlay1uZXh0e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2MHB4fS51aS1pY29uLXNlZWstcHJldntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWVuZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNjBweH0udWktaWNvbi1zZWVrLXN0YXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXNlZWstZmlyc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNjBweH0udWktaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNjBweH0udWktaWNvbi1wb3dlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE3NnB4fS51aS1pY29uLXNpZ25hbC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE3NnB4fS51aS1pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0xe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTN7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTc2cHh9LnVpLWljb24tY2lyY2xlLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xOTJweH0udWktaWNvbi1jaXJjbGUtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1le2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMDhweH0udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIyNHB4fS51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjI0cHh9LnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIyNHB4fS51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjI0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItdGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLXRye2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci1ibHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItYnJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS51aS13aWRnZXQtb3ZlcmxheXtiYWNrZ3JvdW5kOiM2NjYgdXJsKCJpbWFnZXMvdWktYmdfZGlhZ29uYWxzLXRoaWNrXzIwXzY2NjY2Nl80MHg0MC5wbmciKSA1MCUgNTAlIHJlcGVhdDtvcGFjaXR5Oi41O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTUwKX0udWktd2lkZ2V0LXNoYWRvd3ttYXJnaW46LTVweCAwIDAgLTVweDtwYWRkaW5nOjVweDtiYWNrZ3JvdW5kOiMwMDAgdXJsKCJpbWFnZXMvdWktYmdfZmxhdF8xMF8wMDAwMDBfNDB4MTAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7b3BhY2l0eTouMjtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0yMCk7Ym9yZGVyLXJhZGl1czo1cHh9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTk1YmZkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MKQEAgLTAsMCArMSwyOCBAQAordGFibGUudHJlZXRhYmxlIHNwYW4uaW5kZW50ZXIgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisKKyAgLyogRGlzYWJsZSB0ZXh0IHNlbGVjdGlvbiBvZiBub2RlcyAoZm9yIGJldHRlciBEJkQgVVgpICovCisgIHVzZXItc2VsZWN0OiBub25lOworICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1vLXVzZXItc2VsZWN0OiBub25lOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworCisgIC8qIEZvcmNlIGNvbnRlbnQtYm94IGJveCBtb2RlbCBmb3IgaW5kZW50ZXIgKEJvb3RzdHJhcCBjb21wYXRpYmlsaXR5KSAqLworICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKworICB3aWR0aDogMTlweDsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgd2lkdGg6IDE5cHg7Cit9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLmRlZmF1bHQuY3NzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS5kZWZhdWx0LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI4OWJhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS5kZWZhdWx0LmNzcwpAQCAtMCwwICsxLDY0IEBACit0YWJsZS50cmVldGFibGUgeworICBib3JkZXI6IDFweCBzb2xpZCAjODg4OworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBmb250LXNpemU6IC44ZW07CisgIGxpbmUtaGVpZ2h0OiAxOworICBtYXJnaW46IC42ZW0gMCAxLjhlbSAwOworICB3aWR0aDogMTAwJTsKK30KKwordGFibGUudHJlZXRhYmxlIGNhcHRpb24geworICBmb250LXNpemU6IC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW4tYm90dG9tOiAuMmVtOworfQorCit0YWJsZS50cmVldGFibGUgdGJvZHkgdHIgdGQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIHBhZGRpbmc6IC4zZW0gMWVtOworfQorCit0YWJsZS50cmVldGFibGUgc3BhbiB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nOiAuMmVtIDAgLjJlbSAxLjVlbTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZmlsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVFBQUFDMStqZnFBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQURvU1VSQlZCZ1pCY0V4YmxOQkdBYkEyY2VlZ1RSQnVJS09naWloU1pOVGNDNUxVSEFpaE5KUjBrR0tDRGNZSlk2RDMvNzdNZE9pblR2ekFnQ3c4eXNUaEl2bi9Wb2pJeU1qSXlQUCtiUzFzVVFJVjJzOTVwQkREdm1iUC9tZGtmdDgzdHBZZ3VacTVKaC9PZWFZaCt5enk4aFRIdk5sYXhOTmN6bStsYTlPVGxhcjFVZEEvK0MyQTR0clJDbkQzalM4QkIxb2JxMkdrNkdVNlFiUUFTNEJVYVlTUUFmNGJoaEtLVEZkQXpyQU93QXhFVUFIK0tFTTAxU1kzZ002d0JzRUFRQjBnSittYVpvQzNnSTZpUFlhQUlCSnNpUm1IVTBBQUxPZUZDM2FLMmNXQUFDVVhlNytBd08wbGM5ZVRIWVRBQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZm9sZGVyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBR3JTVVJCVkRqTHhaTzdpaFJCRklhLzZ1MFpXN0dIQlVWMFVRUVRaemQzUWRoTVF4T2Z3TVJYRUFOQk1OUVgwTXpBekZBd0V6SHdBUmJORkRkd0VkMzFNajNYN2E2dU9yOUJ0ek5qWWpLQko2bmljUDd2M0txY0pGYXhoQlZ0WlVBSzhPSGxsZDJzdDdYbDNESlBWT05QK3pFVVY0SHFMNVVEWUhyNXh2dVFBamdsL1FzN1R6dk9PVkFqeGpsQytlUFN3ZTZEZmJWZWdMVnVUNHIxNGVUcjZ6dkE4eFNBb0JMeng2cHZqNGwrRFpJZXp1VmtHOWZZMkg3WVJRSU1aSUJ3eWNtekgxL3MzRjhBYXBmSVBORjNrUWs3K2t3OVBXQnkrSVpPZGc1VWczbWtBQVR5L3QwdXNvdnpHZUNVV1RqQ3owQitTajBla2ZkdmtaM2FiQnYrVTRHYUN0SjFpRW02QU5RSjZmRXpyRy9lbmdjS3cvd1hRdkVLeFNFS1F4UkdLRTdJenQrRFNpd0JKTVVTbTcxcmd1TVloUUtyQnlnT0lSU3RmNFRpRkZSQnZiUkdLaVFMV1AyOXlSU0hLQlR0ZmRCbUhzMEJVcGd2dGdGNHlSRlIrTlVLaTBYWmNZakNlQ0cyc21rekxBSGtiUkJtUDAvVWsyNk81WW5VQWN0QnAxR3NBSStTNW5SSkpKYWw1SzFhQU1ycTBkNlRtOXVJNnpqeWY3NWRBZTZ0eC9Tc1dlRC8vbzIvQWI2SUgzL2gyNXBPQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIbEpSRUZVZU5yY1Uxc05nREFRNndnbWNBTTJNSUNHR2xnMWdKbk56V1FjdndRR3kxajRvVWwvN3RIMG1wd3pNN1NnUXlPK0VaQVVXaDJNa2t6U1doSnd1UkFsSFlzSndFd3l2czFnQUJEdXpxb0pjVHc1cXhhSUpOMGJnUVJnSWpubG1uMWhlU081UEU2WTJZWGUrNUNyNStoKytnczEyQWNBUzZGUys3WU9zajRBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhGSlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmd2aGZhMjl2M016QXdPT0RSYzZDeXN0SVJieGkwdDdmakRKakt5a3BHWXJ3d2kxaHhuTEhRM3Q3K2pJR0JRUkpKNkhsbFphVVVLWUVZUllCUE9CMGdCU2hLd0tHQS8vLy80OFZ0YlczLzhjbFRuQklIM2dDS2t6SmdBR3ZCWDBkRG0wc0NBQUFBQUVsRlRrU3VRbUNDKTsKK30KKworCisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5hY2NlcHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNiY2U0OworICBjb2xvcjogI2ZmZgorfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvanF1ZXJ5LnRyZWV0YWJsZS50aGVtZS50b2FzdGVyLmNzcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1NTJlNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKQEAgLTAsMCArMSwzOCBAQAordGFibGUudHJlZXRhYmxlIHNwYW4uZmlsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVFBQUFDMStqZnFBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQURvU1VSQlZCZ1pCY0V4YmxOQkdBYkEyY2VlZ1RSQnVJS09naWloU1pOVGNDNUxVSEFpaE5KUjBrR0tDRGNZSlk2RDMvNzdNZE9pblR2ekFnQ3c4eXNUaEl2bi9Wb2pJeU1qSXlQUCtiUzFzVVFJVjJzOTVwQkREdm1iUC9tZGtmdDgzdHBZZ3VacTVKaC9PZWFZaCt5enk4aFRIdk5sYXhOTmN6bStsYTlPVGxhcjFVZEEvK0MyQTR0clJDbkQzalM4QkIxb2JxMkdrNkdVNlFiUUFTNEJVYVlTUUFmNGJoaEtLVEZkQXpyQU93QXhFVUFIK0tFTTAxU1kzZ002d0JzRUFRQjBnSittYVpvQzNnSTZpUFlhQUlCSnNpUm1IVTBBQUxPZUZDM2FLMmNXQUFDVVhlNytBd08wbGM5ZVRIWVRBQUFBQUVsRlRrU3VRbUNDKTsKK30KKwordGFibGUudHJlZXRhYmxlIHNwYW4uZm9sZGVyIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RCVFVFQUFLL0lOd1dLNlFBQUFCbDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdTVzFoWjJWU1pXRmtlWEhKWlR3QUFBR3JTVVJCVkRqTHhaTzdpaFJCRklhLzZ1MFpXN0dIQlVWMFVRUVRaemQzUWRoTVF4T2Z3TVJYRUFOQk1OUVgwTXpBekZBd0V6SHdBUmJORkRkd0VkMzFNajNYN2E2dU9yOUJ0ek5qWWpLQko2bmljUDd2M0txY0pGYXhoQlZ0WlVBSzhPSGxsZDJzdDdYbDNESlBWT05QK3pFVVY0SHFMNVVEWUhyNXh2dVFBamdsL1FzN1R6dk9PVkFqeGpsQytlUFN3ZTZEZmJWZWdMVnVUNHIxNGVUcjZ6dkE4eFNBb0JMeng2cHZqNGwrRFpJZXp1VmtHOWZZMkg3WVJRSU1aSUJ3eWNtekgxL3MzRjhBYXBmSVBORjNrUWs3K2t3OVBXQnkrSVpPZGc1VWczbWtBQVR5L3QwdXNvdnpHZUNVV1RqQ3owQitTajBla2ZkdmtaM2FiQnYrVTRHYUN0SjFpRW02QU5RSjZmRXpyRy9lbmdjS3cvd1hRdkVLeFNFS1F4UkdLRTdJenQrRFNpd0JKTVVTbTcxcmd1TVloUUtyQnlnT0lSU3RmNFRpRkZSQnZiUkdLaVFMV1AyOXlSU0hLQlR0ZmRCbUhzMEJVcGd2dGdGNHlSRlIrTlVLaTBYWmNZakNlQ0cyc21rekxBSGtiUkJtUDAvVWsyNk81WW5VQWN0QnAxR3NBSStTNW5SSkpKYWw1SzFhQU1ycTBkNlRtOXVJNnpqeWY3NWRBZTZ0eC9Tc1dlRC8vbzIvQWI2SUgzL2gyNXBPQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIbEpSRUZVZU5yY1Uxc05nREFRNndnbWNBTTJNSUNHR2xnMWdKbk56V1FjdndRR3kxajRvVWwvN3RIMG1wd3pNN1NnUXlPK0VaQVVXaDJNa2t6U1doSnd1UkFsSFlzSndFd3l2czFnQUJEdXpxb0pjVHc1cXhhSUpOMGJnUVJnSWpubG1uMWhlU081UEU2WTJZWGUrNUNyNStoKytnczEyQWNBUzZGUys3WU9zajRBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUhGSlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmd2aGZhMjl2M016QXdPT0RSYzZDeXN0SVJieGkwdDdmakRKakt5a3BHWXJ3d2kxaHhuTEhRM3Q3K2pJR0JRUkpKNkhsbFphVVVLWUVZUllCUE9CMGdCU2hLd0tHQS8vLy80OFZ0YlczLzhjbFRuQklIM2dDS2t6SmdBR3ZCWDBkRG0wc0NBQUFBQUVsRlRrU3VRbUNDKTsKK30KKworCisKK3RhYmxlLnRyZWV0YWJsZSB0ci5jb2xsYXBzZWQuc2VsZWN0ZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGcEpSRUZVZU5waS9QLy9Qd01sZ0hIQURXRDQvLzgvTnR5QVF4d0Q0NUtBQVFkS0Rmai8vLy8vL2ZnTUlzWUFaSU13MURLUkVGd09EQXdNLzRrTlJLcTY0QUFEQTRNakZET1E2Z0t5WTRIb2RNQTQ5UE1DeFFZQUJnQVZZSHNqeVoxeDdRQUFBQUJKUlU1RXJrSmdnZz09KTsKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmV4cGFuZGVkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnRKUkVGVWVOcGkvUC8vUHdNbGdJbUJRc0E0NEM2Z2lRRU5EQXdNLy9IZ0JtTENBRi9BTUJMakJVZWl4Zi8vLzQ4TDcvK1BDdlpqVTRmUEFBYzBBeHl3cWNNWEN3ZWdHSjFOY2tMNmp4NXdwS1lEeHFHWEVra0NnQUVBbXJxQkllamRnbmdBQUFBQVNVVk9SSzVDWUlJPSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5hY2NlcHQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNiY2U0OworICBjb2xvcjogI2ZmZgorfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLmFjY2VwdCB0ZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS94LXBuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvcHJldHRpZnkuY3NzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3MvcHJldHRpZnkuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzMTdhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9wcmV0dGlmeS5jc3MKQEAgLTAsMCArMSBAQAorLnBsbntjb2xvcjojMDAwfUBtZWRpYSBzY3JlZW57LnN0cntjb2xvcjojMDgwfS5rd2R7Y29sb3I6IzAwOH0uY29te2NvbG9yOiM4MDB9LnR5cHtjb2xvcjojNjA2fS5saXR7Y29sb3I6IzA2Nn0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNjYwfS50YWd7Y29sb3I6IzAwOH0uYXRue2NvbG9yOiM2MDZ9LmF0dntjb2xvcjojMDgwfS5kZWMsLnZhcntjb2xvcjojNjA2fS5mdW57Y29sb3I6cmVkfX1AbWVkaWEgcHJpbnQscHJvamVjdGlvbnsuc3Rye2NvbG9yOiMwNjB9Lmt3ZHtjb2xvcjojMDA2O2ZvbnQtd2VpZ2h0OmJvbGR9LmNvbXtjb2xvcjojNjAwO2ZvbnQtc3R5bGU6aXRhbGljfS50eXB7Y29sb3I6IzQwNDtmb250LXdlaWdodDpib2xkfS5saXR7Y29sb3I6IzA0NH0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNDQwfS50YWd7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5hdG57Y29sb3I6IzQwNH0uYXR2e2NvbG9yOiMwNjB9fXByZS5wcmV0dHlwcmludHtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICM4ODh9b2wubGluZW51bXN7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MH1saS5MMCxsaS5MMSxsaS5MMixsaS5MMyxsaS5MNSxsaS5MNixsaS5MNyxsaS5MOHtsaXN0LXN0eWxlLXR5cGU6bm9uZX1saS5MMSxsaS5MMyxsaS5MNSxsaS5MNyxsaS5MOXtiYWNrZ3JvdW5kOiNlZWV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2Nzcy9zY3JlZW4uY3NzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3Mvc2NyZWVuLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjMzZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9jc3Mvc2NyZWVuLmNzcwpAQCAtMCwwICsxLDI4IEBACitib2R5IHsKKyAgYmFja2dyb3VuZDogI2RkZDsKKyAgY29sb3I6ICMwMDA7CisgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBsaW5lLWhlaWdodDogMS41OworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7Cit9CisKKyNtYWluIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgYm9yZGVyLWxlZnQ6IDIwcHggc29saWQgI2VlZTsKKyAgYm9yZGVyLXJpZ2h0OiAyMHB4IHNvbGlkICNlZWU7CisgIG1hcmdpbjogMCBhdXRvOworICBtYXgtd2lkdGg6IDgwMHB4OworICBwYWRkaW5nOiAyMHB4OworfQorCitwcmUubGlzdGluZyB7CisgIGJhY2tncm91bmQ6ICNlZWU7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIG1hcmdpbjogLjZlbSAwIC4zZW0gMDsKKyAgcGFkZGluZzogLjFlbSAuM2VtOworfQorCitwcmUubGlzdGluZyBiIHsKKyAgY29sb3I6ICNmMDA7Cit9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZiBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvRm9udEF3ZXNvbWUub3RmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDQ5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL0ZvbnRBd2Vzb21lLm90ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuZW90IGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDgxMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LmVvdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQuc3ZnIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBhZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnN2ZwpAQCAtMCwwICsxLDI4NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PgorPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cis8bWV0YWRhdGE+PC9tZXRhZGF0YT4KKzxkZWZzPgorPGZvbnQgaWQ9ImZvbnRhd2Vzb21lcmVndWxhciIgaG9yaXotYWR2LXg9IjE1MzYiID4KKzxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxNzkyIiBhc2NlbnQ9IjE1MzYiIGRlc2NlbnQ9Ii0yNTYiIC8+Cis8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiAiICBob3Jpei1hZHYteD0iNDQ4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDA5OyIgaG9yaXotYWR2LXg9IjQ0OCIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhMDsiIGhvcml6LWFkdi14PSI0NDgiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YTg7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hhOTsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4YjQ7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hjNjsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNzY4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDE7IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDI7IiBob3Jpei1hZHYteD0iNzY4IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDM7IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNTEyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzg0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjU2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjU2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDk7IiBob3Jpei1hZHYteD0iMzA3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMGE7IiBob3Jpei1hZHYteD0iODUiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIzMDciIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjA1ZjsiIGhvcml6LWFkdi14PSIzODQiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjEyMjsiIGhvcml6LWFkdi14PSIxNzkyIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIyMWU7IiBob3Jpei1hZHYteD0iMTc5MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjYwOyIgaG9yaXotYWR2LXg9IjE3OTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMDsiIGhvcml6LWFkdi14PSI1MDAiIGQ9Ik0wIDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2OTkgMTM1MHEwIC0zNSAtNDMgLTc4bC02MzIgLTYzMnYtNzY4aDMyMHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgzMjB2NzY4bC02MzIgNjMycS00MyA0MyAtNDMgNzhxMCAyMyAxOCAzNi41dDM4IDE3LjV0NDMgNGgxNDA4cTIzIDAgNDMgLTR0MzggLTE3LjV0MTggLTM2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDE7IiBkPSJNMTUzNiAxMzEydi0xMTIwcTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5dDM0IDg5dDg2IDYwLjV0MTAzLjUgMzJ0OTYuNSAxMC41cTEwNSAwIDE5MiAtMzl2NTM3bC03NjggLTIzN3YtNzA5cTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5IHQzNCA4OXQ4NiA2MC41dDEwMy41IDMydDk2LjUgMTAuNXExMDUgMCAxOTIgLTM5djk2N3EwIDMxIDE5IDU2LjV0NDkgMzUuNWw4MzIgMjU2cTEyIDQgMjggNHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMDI7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41IHQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwMzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCAzMnY3NjhxLTMyIC0zNiAtNjkgLTY2cS0yNjggLTIwNiAtNDI2IC0zMzhxLTUxIC00MyAtODMgLTY3dC04Ni41IC00OC41dC0xMDIuNSAtMjQuNWgtMWgtMXEtNDggMCAtMTAyLjUgMjQuNXQtODYuNSA0OC41dC04MyA2N3EtMTU4IDEzMiAtNDI2IDMzOHEtMzcgMzAgLTY5IDY2di03NjhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNDcycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTA4M3YxMXYxMy41dC0wLjUgMTMgdC0zIDEyLjV0LTUuNSA5dC05IDcuNXQtMTQgMi41aC0xNDcycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXEwIC0xNjggMTQ3IC0yODRxMTkzIC0xNTIgNDAxIC0zMTdxNiAtNSAzNSAtMjkuNXQ0NiAtMzcuNXQ0NC41IC0zMS41dDUwLjUgLTI3LjV0NDMgLTloMWgxcTIwIDAgNDMgOXQ1MC41IDI3LjV0NDQuNSAzMS41dDQ2IDM3LjV0MzUgMjkuNXEyMDggMTY1IDQwMSAzMTdxNTQgNDMgMTAwLjUgMTE1LjV0NDYuNSAxMzEuNXogTTE3OTIgMTEyMHYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IC0xMjhxLTI2IDAgLTQ0IDE4bC02MjQgNjAycS0xMCA4IC0yNy41IDI2dC01NS41IDY1LjV0LTY4IDk3LjV0LTUzLjUgMTIxdC0yMy41IDEzOHEwIDIyMCAxMjcgMzQ0dDM1MSAxMjRxNjIgMCAxMjYuNSAtMjEuNXQxMjAgLTU4dDk1LjUgLTY4LjV0NzYgLTY4cTM2IDM2IDc2IDY4dDk1LjUgNjguNXQxMjAgNTh0MTI2LjUgMjEuNXEyMjQgMCAzNTEgLTEyNHQxMjcgLTM0NHEwIC0yMjEgLTIyOSAtNDUwbC02MjMgLTYwMCBxLTE4IC0xOCAtNDQgLTE4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA1OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtMjEgLTEwLjUgLTM1LjV0LTMwLjUgLTE0LjVxLTE5IDAgLTQwIDEybC00NDkgMjM2bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1IGw1MDIgLTczcTU2IC05IDU2IC00NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwNjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTEzNyA1MzJsMzA2IDI5N2wtNDIyIDYybC0xODkgMzgybC0xODkgLTM4MmwtNDIyIC02MmwzMDYgLTI5N2wtNzMgLTQyMWwzNzggMTk5bDM3NyAtMTk5ek0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtNTAgLTQxIC01MHEtMTkgMCAtNDAgMTJsLTQ0OSAyMzZsLTQ0OSAtMjM2cS0yMiAtMTIgLTQwIC0xMnEtMjEgMCAtMzEuNSAxNC41dC0xMC41IDM1LjVxMCA2IDIgMjBsODYgNTAwIGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1bDUwMiAtNzNxNTYgLTkgNTYgLTQ2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDEzMXEwIC0xMjAgLTczIC0xODkuNXQtMTk0IC02OS41aC04NzRxLTEyMSAwIC0xOTQgNjkuNXQtNzMgMTg5LjVxMCA1MyAzLjUgMTAzLjV0MTQgMTA5dDI2LjUgMTA4LjV0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxOSAwIDQyIC0yMS41dDc0LjUgLTQ4dDEwOCAtNDh0MTMzLjUgLTIxLjV0MTMzLjUgMjEuNXQxMDggNDh0NzQuNSA0OHQ0MiAyMS41cTYxIDAgMTExLjUgLTIwdDg1LjUgLTUzLjV0NjIgLTgxIHQ0MyAtOTcuNXQyNi41IC0xMDguNXQxNCAtMTA5dDMuNSAtMTAzLjV6TTEwODggMTAyNHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41dC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwODsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMzg0IC02NHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDMyMHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDcwNHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjggcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE0MDggLTY0djUxMnEwIDI2IC0xOSA0NXQtNDUgMTloLTc2OHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUxMnEwIC0yNiAxOSAtNDV0NDUgLTE5aDc2OHEyNiAwIDQ1IDE5dDE5IDQ1ek0zODQgMTA4OHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1IHQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgLTY0djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNDA4IDcwNHY1MTJxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di01MTJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAzMjB2MTI4IHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIDcwNHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAxMDg4djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5IHQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTkyMCAxMjQ4di0xMzQ0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMzQ0cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDA5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03NjggNTEydi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek03NjggMTI4MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNMTY2NCA1MTJ2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzggaC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek0xNjY0IDEyODB2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjAgcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOCBoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTExNTIgMTMxMnYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiA4MDB2LTE5MiBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGI7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjAgcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOCBoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg5NjBxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDBjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjcxIDk3MHEwIC00MCAtMjggLTY4bC03MjQgLTcyNGwtMTM2IC0xMzZxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMTM2IDEzNmwtMzYyIDM2MnEtMjggMjggLTI4IDY4dDI4IDY4bDEzNiAxMzZxMjggMjggNjggMjh0NjggLTI4bDI5NCAtMjk1bDY1NiA2NTdxMjggMjggNjggMjh0NjggLTI4bDEzNiAtMTM2cTI4IC0yOCAyOCAtNjh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMGQ7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTEyOTggMjE0cTAgLTQwIC0yOCAtNjhsLTEzNiAtMTM2cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTI5NCAyOTRsLTI5NCAtMjk0cS0yOCAtMjggLTY4IC0yOHQtNjggMjhsLTEzNiAxMzZxLTI4IDI4IC0yOCA2OHQyOCA2OGwyOTQgMjk0bC0yOTQgMjk0cS0yOCAyOCAtMjggNjh0MjggNjhsMTM2IDEzNnEyOCAyOCA2OCAyOHQ2OCAtMjhsMjk0IC0yOTRsMjk0IDI5NHEyOCAyOCA2OCAyOHQ2OCAtMjhsMTM2IC0xMzZxMjggLTI4IDI4IC02OCB0LTI4IC02OGwtMjk0IC0yOTRsMjk0IC0yOTRxMjggLTI4IDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAwZTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTAyNCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMjI0di0yMjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djIyNGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMjR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjRoMjI0IHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtNTQgMCAtOTAgMzhsLTM0MyAzNDJxLTE3OSAtMTI0IC0zOTkgLTEyNHEtMTQzIDAgLTI3My41IDU1LjUgdC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEwOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMDI0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC01NzZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDU3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6IE0xNjY0IC0xMjhxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxMTsiIGQ9Ik0xNTM2IDY0MHEwIC0xNTYgLTYxIC0yOTh0LTE2NCAtMjQ1dC0yNDUgLTE2NHQtMjk4IC02MXQtMjk4IDYxdC0yNDUgMTY0dC0xNjQgMjQ1dC02MSAyOThxMCAxODIgODAuNSAzNDN0MjI2LjUgMjcwcTQzIDMyIDk1LjUgMjV0ODMuNSAtNTBxMzIgLTQyIDI0LjUgLTk0LjV0LTQ5LjUgLTg0LjVxLTk4IC03NCAtMTUxLjUgLTE4MXQtNTMuNSAtMjI4cTAgLTEwNCA0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41IHQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjVxMCAxMjEgLTUzLjUgMjI4dC0xNTEuNSAxODFxLTQyIDMyIC00OS41IDg0LjV0MjQuNSA5NC41cTMxIDQzIDg0IDUwdDk1IC0yNXExNDYgLTEwOSAyMjYuNSAtMjcwdDgwLjUgLTM0M3pNODk2IDE0MDh2LTY0MHEwIC01MiAtMzggLTkwdC05MCAtMzh0LTkwIDM4dC0zOCA5MHY2NDBxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgOTZ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek02NDAgMjI0di0zMjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjMyMHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTAyNCA0ODB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjMgdjU3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTQwOCA4NjR2LTk2MHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2OTYwcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNzkyIDEzNzZ2LTE0NzJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE0NzJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTM7IiBkPSJNMTAyNCA2NDBxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0xNTM2IDc0OXYtMjIycTAgLTEyIC04IC0yM3QtMjAgLTEzbC0xODUgLTI4cS0xOSAtNTQgLTM5IC05MXEzNSAtNTAgMTA3IC0xMzhxMTAgLTEyIDEwIC0yNXQtOSAtMjNxLTI3IC0zNyAtOTkgLTEwOHQtOTQgLTcxcS0xMiAwIC0yNiA5bC0xMzggMTA4cS00NCAtMjMgLTkxIC0zOCBxLTE2IC0xMzYgLTI5IC0xODZxLTcgLTI4IC0zNiAtMjhoLTIyMnEtMTQgMCAtMjQuNSA4LjV0LTExLjUgMjEuNWwtMjggMTg0cS00OSAxNiAtOTAgMzdsLTE0MSAtMTA3cS0xMCAtOSAtMjUgLTlxLTE0IDAgLTI1IDExcS0xMjYgMTE0IC0xNjUgMTY4cS03IDEwIC03IDIzcTAgMTIgOCAyM3ExNSAyMSA1MSA2Ni41dDU0IDcwLjVxLTI3IDUwIC00MSA5OWwtMTgzIDI3cS0xMyAyIC0yMSAxMi41dC04IDIzLjV2MjIycTAgMTIgOCAyM3QxOSAxMyBsMTg2IDI4cTE0IDQ2IDM5IDkycS00MCA1NyAtMTA3IDEzOHEtMTAgMTIgLTEwIDI0cTAgMTAgOSAyM3EyNiAzNiA5OC41IDEwNy41dDk0LjUgNzEuNXExMyAwIDI2IC0xMGwxMzggLTEwN3E0NCAyMyA5MSAzOHExNiAxMzYgMjkgMTg2cTcgMjggMzYgMjhoMjIycTE0IDAgMjQuNSAtOC41dDExLjUgLTIxLjVsMjggLTE4NHE0OSAtMTYgOTAgLTM3bDE0MiAxMDdxOSA5IDI0IDlxMTMgMCAyNSAtMTBxMTI5IC0xMTkgMTY1IC0xNzBxNyAtOCA3IC0yMiBxMCAtMTIgLTggLTIzcS0xNSAtMjEgLTUxIC02Ni41dC01NCAtNzAuNXEyNiAtNTAgNDEgLTk4bDE4MyAtMjhxMTMgLTIgMjEgLTEyLjV0OCAtMjMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNNTEyIDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek03NjggODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgODAwdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NTc2IHEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMTUyIDc2djk0OGgtODk2di05NDhxMCAtMjIgNyAtNDAuNXQxNC41IC0yN3QxMC41IC04LjVoODMycTMgMCAxMC41IDguNXQxNC41IDI3dDcgNDAuNXpNNDgwIDExNTJoNDQ4bC00OCAxMTdxLTcgOSAtMTcgMTFoLTMxN3EtMTAgLTIgLTE3IC0xMXpNMTQwOCAxMTIwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTQ4cTAgLTgzIC00NyAtMTQzLjV0LTExMyAtNjAuNWgtODMyIHEtNjYgMCAtMTEzIDU4LjV0LTQ3IDE0MS41djk1MmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzA5bDcwIDE2N3ExNSAzNyA1NCA2M3Q3OSAyNmgzMjBxNDAgMCA3OSAtMjZ0NTQgLTYzbDcwIC0xNjdoMzA5cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0MDggNTQ0di00ODBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0zODR2Mzg0aC0yNTZ2LTM4NGgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2NDgwcTAgMSAwLjUgM3QwLjUgM2w1NzUgNDc0bDU3NSAtNDc0cTEgLTIgMSAtNnpNMTYzMSA2MTNsLTYyIC03NHEtOCAtOSAtMjEgLTExaC0zcS0xMyAwIC0yMSA3bC02OTIgNTc3bC02OTIgLTU3N3EtMTIgLTggLTI0IC03cS0xMyAyIC0yMSAxMWwtNjIgNzRxLTggMTAgLTcgMjMuNXQxMSAyMS41IGw3MTkgNTk5cTMyIDI2IDc2IDI2dDc2IC0yNmwyNDQgLTIwNHYxOTVxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTQwOGwyMTkgLTE4MnExMCAtOCAxMSAtMjEuNXQtNyAtMjMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxNjsiIGhvcml6LWFkdi14PSIxMjgwIiBkPSJNMTI4IDBoMTAyNHY3NjhoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNTEydi0xMjgwek03NjggODk2aDI5OWwtMjk5IDI5OXYtMjk5ek0xMjgwIDc2OHYtODAwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGg1NDRxNDAgMCA4OCAtMjB0NzYgLTQ4bDQwOCAtNDA4cTI4IC0yOCA0OCAtNzZ0MjAgLTg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE3OyIgZD0iTTEwODggNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTM4NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djQ0OHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMzUyaDI4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjV0LTE5OC41IC00MC41IHQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNSB0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMTg7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTExMTEgNTQwdjRsLTI0IDMyMHEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aC0xODZxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0yNCAtMzIwdi00cS0xIC0xMiA4IC0yMHQyMSAtOGgyNDRxMTIgMCAyMSA4dDggMjB6TTE4NzAgNzNxMCAtNzMgLTQ2IC03M2gtNzA0cTEzIDAgMjIgOS41dDggMjIuNWwtMjAgMjU2cS0xIDEzIC0xMSAyMi41dC0yMyA5LjVoLTI3MnEtMTMgMCAtMjMgLTkuNXQtMTEgLTIyLjVsLTIwIC0yNTYgcS0xIC0xMyA4IC0yMi41dDIyIC05LjVoLTcwNHEtNDYgMCAtNDYgNzNxMCA1NCAyNiAxMTZsNDE3IDEwNDRxOCAxOSAyNiAzM3QzOCAxNGgzMzlxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0xNSAtMTkycS0xIC0xNCA4IC0yM3QyMiAtOWgxNjZxMTMgMCAyMiA5dDggMjNsLTE1IDE5MnEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aDMzOXEyMCAwIDM4IC0xNHQyNiAtMzNsNDE3IC0xMDQ0cTI2IC02MiAyNiAtMTE2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDE5OyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMzM5IDcyOXExNyAtNDEgLTE0IC03MGwtNDQ4IC00NDhxLTE4IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMzEgMjkgLTE0IDcwcTE3IDM5IDU5IDM5aDI1NnY0NDhxMCAyNiAxOSA0NXQ0NSAxOWgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1di00NDhoMjU2cTQyIDAgNTkgLTM5ek0xNjMyIDUxMnExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTYwMHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzIHQyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi0zNTJoMTE1MnYzNTJxMCAxNCA5IDIzdDIzIDloMTkyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFhOyIgZD0iTTExMjAgNjA4cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS05IC05IC0yMyAtOXQtMjMgOWwtMzIwIDMyMHEtOSA5IC05IDIzcTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkydjM1MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTM1MmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNSB0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41IHQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAxYjsiIGQ9Ik0xMTIwIDY3MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnYtMzUycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MzUyaC0xOTJxLTE0IDAgLTIzIDl0LTkgMjNxMCAxMiAxMCAyNGwzMTkgMzE5cTkgOSAyMyA5dDIzIC05bDMyMCAtMzIwcTkgLTkgOSAtMjN6TTEyODAgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjUgdC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41IHQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWM7IiBkPSJNMTAyMyA1NzZoMzE2cS0xIDMgLTIuNSA4dC0yLjUgOGwtMjEyIDQ5NmgtNzA4bC0yMTIgLTQ5NnEtMSAtMiAtMi41IC04dC0yLjUgLThoMzE2bDk1IC0xOTJoMzIwek0xNTM2IDU0NnYtNDgycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ4MnEwIDYyIDI1IDEyM2wyMzggNTUycTEwIDI1IDM2LjUgNDJ0NTIuNSAxN2g4MzJxMjYgMCA1Mi41IC0xN3QzNi41IC00MmwyMzggLTU1MiBxMjUgLTYxIDI1IC0xMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMWQ7IiBkPSJNMTE1MiA2NDBxMCAtMzcgLTMzIC01NmwtNTEyIC0yODhxLTE0IC04IC0zMSAtOHQtMzIgOXEtMzIgMTggLTMyIDU1djU3NnEwIDM3IDMyIDU1cTMxIDIwIDYzIDFsNTEyIC0yODhxMzMgLTE5IDMzIC01NnpNMTI4MCA2NDBxMCAxMDQgLTQwLjUgMTk4LjV0LTEwOS41IDE2My41dC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNSB0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDFlOyIgZD0iTTE1MzYgMTI4MHYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDQ4cS00MiAwIC01OSA0MHEtMTcgMzkgMTQgNjlsMTM4IDEzOHEtMTQ4IDEzNyAtMzQ5IDEzN3EtMTA0IDAgLTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXExNjkgMCAzMDQgOTkuNXQxODUgMjYxLjVxNyAyMyAzMCAyM2gxOTkgcTE2IDAgMjUgLTEycTEwIC0xMyA3IC0yN3EtMzkgLTE3NSAtMTQ3LjUgLTMxMnQtMjY2IC0yMTN0LTMzNi41IC03NnEtMTU2IDAgLTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4dDYxIDI5OHQxNjQgMjQ1dDI0NSAxNjR0Mjk4IDYxcTE0NyAwIDI4NC41IC01NS41dDI0NC41IC0xNTYuNWwxMzAgMTI5cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjE7IiBkPSJNMTUxMSA0ODBxMCAtNSAtMSAtN3EtNjQgLTI2OCAtMjY4IC00MzQuNXQtNDc4IC0xNjYuNXEtMTQ2IDAgLTI4Mi41IDU1dC0yNDMuNSAxNTdsLTEyOSAtMTI5cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMTM3IC0xMzdxNzEgLTY2IDE2MSAtMTAydDE4NyAtMzZxMTM0IDAgMjUwIDY1dDE4NiAxNzlxMTEgMTcgNTMgMTE3IHE4IDIzIDMwIDIzaDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMTI4MHYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsMTM4IDEzOHEtMTQ4IDEzNyAtMzQ5IDEzN3EtMTM0IDAgLTI1MCAtNjV0LTE4NiAtMTc5cS0xMSAtMTcgLTUzIC0xMTdxLTggLTIzIC0zMCAtMjNoLTE5OXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djdxNjUgMjY4IDI3MCA0MzQuNXQ0ODAgMTY2LjUgcTE0NiAwIDI4NCAtNTUuNXQyNDUgLTE1Ni41bDEzMCAxMjlxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzg0IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0zODQgODY0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMzUydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTE1MzYgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTUzNiA4NjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxMTMgMCAyMi41IC05LjUgdDkuNSAtMjIuNXpNMTY2NCAxNjB2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTQ3MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc5MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzIC00NyB0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyMzsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNzA0IDUxMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXEwIC0zNyAxOSAtNjd0NTEgLTQ3bC02OSAtMjI5cS01IC0xNSA1IC0yOHQyNiAtMTNoMTkycTE2IDAgMjYgMTN0NSAyOGwtNjkgMjI5cTMyIDE3IDUxIDQ3dDE5IDY3ek0zMjAgNzY4aDUxMnYxOTJxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdi0xOTJ6TTExNTIgNjcydi01NzZxMCAtNDAgLTI4IC02OCB0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2NTc2cTAgNDAgMjggNjh0NjggMjhoMzJ2MTkycTAgMTg0IDEzMiAzMTZ0MzE2IDEzMnQzMTYgLTEzMnQxMzIgLTMxNnYtMTkyaDMycTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzIwIDEyODBxMCAtNzIgLTY0IC0xMTB2LTEyNjZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djEyNjZxLTY0IDM4IC02NCAxMTBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTc5MiAxMjE2di03NjNxMCAtMjUgLTEyLjUgLTM4LjV0LTM5LjUgLTI3LjVxLTIxNSAtMTE2IC0zNjkgLTExNnEtNjEgMCAtMTIzLjUgMjJ0LTEwOC41IDQ4IHQtMTE1LjUgNDh0LTE0Mi41IDIycS0xOTIgMCAtNDY0IC0xNDZxLTE3IC05IC0zMyAtOXEtMjYgMCAtNDUgMTl0LTE5IDQ1djc0MnEwIDMyIDMxIDU1cTIxIDE0IDc5IDQzcTIzNiAxMjAgNDIxIDEyMHExMDcgMCAyMDAgLTI5dDIxOSAtODhxMzggLTE5IDg4IC0xOXE1NCAwIDExNy41IDIxdDExMCA0N3Q4OCA0N3Q1NC41IDIxcTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA2NTBxMCAtMTY2IC02MCAtMzE0bC0yMCAtNDlsLTE4NSAtMzNxLTIyIC04MyAtOTAuNSAtMTM2LjV0LTE1Ni41IC01My41di0zMnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtMzJxNzEgMCAxMzAgLTM1LjV0OTMgLTk1LjVsNjggMTJxMjkgOTUgMjkgMTkzcTAgMTQ4IC04OCAyNzl0LTIzNi41IDIwOXQtMzE1LjUgNzggdC0zMTUuNSAtNzh0LTIzNi41IC0yMDl0LTg4IC0yNzlxMCAtOTggMjkgLTE5M2w2OCAtMTJxMzQgNjAgOTMgOTUuNXQxMzAgMzUuNXYzMnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzJxLTg4IDAgLTE1Ni41IDUzLjV0LTkwLjUgMTM2LjVsLTE4NSAzM2wtMjAgNDlxLTYwIDE0OCAtNjAgMzE0cTAgMTUxIDY3IDI5MXQxNzkgMjQyLjUgdDI2NiAxNjMuNXQzMjAgNjF0MzIwIC02MXQyNjYgLTE2My41dDE3OSAtMjQyLjV0NjcgLTI5MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyNjsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI3OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xMTUyIDY0MHEwIC03NiAtNDIuNSAtMTQxLjV0LTExMi41IC05My41cS0xMCAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE4LjV0LTE5IDQ1LjVxMCAyMSAxMiAzNS41dDI5IDI1dDM0IDIzdDI5IDM1LjUgdDEyIDU3dC0xMiA1N3QtMjkgMzUuNXQtMzQgMjN0LTI5IDI1dC0xMiAzNS41cTAgMjcgMTkgNDUuNXQ0NSAxOC41cTE1IDAgMjUgLTVxNzAgLTI3IDExMi41IC05M3Q0Mi41IC0xNDJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMjg7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMTg0di0xMDg4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTMzMyAzMzNoLTI2MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDI2MmwzMzMgMzMzcTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTExNTIgNjQwcTAgLTc2IC00Mi41IC0xNDEuNXQtMTEyLjUgLTkzLjVxLTEwIC01IC0yNSAtNXEtMjYgMCAtNDUgMTguNXQtMTkgNDUuNXEwIDIxIDEyIDM1LjV0MjkgMjV0MzQgMjN0MjkgMzUuNSB0MTIgNTd0LTEyIDU3dC0yOSAzNS41dC0zNCAyM3QtMjkgMjV0LTEyIDM1LjVxMCAyNyAxOSA0NS41dDQ1IDE4LjVxMTUgMCAyNSAtNXE3MCAtMjcgMTEyLjUgLTkzdDQyLjUgLTE0MnpNMTQwOCA2NDBxMCAtMTUzIC04NSAtMjgyLjV0LTIyNSAtMTg4LjVxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDYgMTl0LTE5IDQ1cTAgMzkgMzkgNTlxNTYgMjkgNzYgNDRxNzQgNTQgMTE1LjUgMTM1LjV0NDEuNSAxNzMuNXQtNDEuNSAxNzMuNSB0LTExNS41IDEzNS41cS0yMCAxNSAtNzYgNDRxLTM5IDIwIC0zOSA1OXEwIDI2IDE5IDQ1dDQ1IDE5cTEzIDAgMjYgLTVxMTQwIC01OSAyMjUgLTE4OC41dDg1IC0yODIuNXpNMTY2NCA2NDBxMCAtMjMwIC0xMjcgLTQyMi41dC0zMzggLTI4My41cS0xMyAtNSAtMjYgLTVxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDM2IDM5IDU5cTcgNCAyMi41IDEwLjV0MjIuNSAxMC41cTQ2IDI1IDgyIDUxcTEyMyA5MSAxOTIgMjI3dDY5IDI4OXQtNjkgMjg5IHQtMTkyIDIyN3EtMzYgMjYgLTgyIDUxcS03IDQgLTIyLjUgMTAuNXQtMjIuNSAxMC41cS0zOSAyMyAtMzkgNTlxMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2IC01cTIxMSAtOTEgMzM4IC0yODMuNXQxMjcgLTQyMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDI5OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMzg0di0xMjhoLTEyOHYxMjhoMTI4ek0zODQgMTE1MnYtMTI4aC0xMjh2MTI4aDEyOHpNMTE1MiAxMTUydi0xMjhoLTEyOHYxMjhoMTI4ek0xMjggMTI5aDM4NHYzODNoLTM4NHYtMzgzek0xMjggODk2aDM4NHYzODRoLTM4NHYtMzg0ek04OTYgODk2aDM4NHYzODRoLTM4NHYtMzg0ek02NDAgNjQwdi02NDBoLTY0MHY2NDBoNjQwek0xMTUyIDEyOHYtMTI4aC0xMjh2MTI4aDEyOHpNMTQwOCAxMjh2LTEyOGgtMTI4djEyOGgxMjh6IE0xNDA4IDY0MHYtMzg0aC0zODR2MTI4aC0xMjh2LTM4NGgtMTI4djY0MGgzODR2LTEyOGgxMjh2MTI4aDEyOHpNNjQwIDE0MDh2LTY0MGgtNjQwdjY0MGg2NDB6TTE0MDggMTQwOHYtNjQwaC02NDB2NjQwaDY0MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjcyIDE0MDh2LTE1MzZoLTY0djE1MzZoNjR6TTE0MDggMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNMTU2OCAxNDA4di0xNTM2aC02NHYxNTM2aDY0ek01NzYgMTQwOHYtMTUzNmgtNjR2MTUzNmg2NHpNMTI4MCAxNDA4di0xNTM2aC0yNTZ2MTUzNmgyNTZ6TTg5NiAxNDA4di0xNTM2aC0xMjh2MTUzNmgxMjh6TTQ0OCAxNDA4di0xNTM2aC0xMjh2MTUzNmgxMjh6TTE3OTIgMTQwOHYtMTUzNmgtMTI4djE1MzZoMTI4ek0yNTYgMTQwOHYtMTUzNiBoLTI1NnYxNTM2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyYjsiIGQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41IGw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDJjOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41IGw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxek0xODk5IDUxMnEwIC01MyAtMzcgLTkwbC00OTEgLTQ5MnEtMzkgLTM3IC05MSAtMzdxLTM2IDAgLTU5IDE0dC01MyA0NWw0NzAgNDcwcTM3IDM3IDM3IDkwcTAgNTIgLTM3IDkxbC03MTUgNzE0cS0zOCAzOCAtMTAyIDY0LjV0LTExNyAyNi41aDIyNHE1MyAwIDExNyAtMjYuNXQxMDIgLTY0LjVsNzE1IC03MTRxMzcgLTM5IDM3IC05MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAyZDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYzOSAxMDU4cTQwIC01NyAxOCAtMTI5bC0yNzUgLTkwNnEtMTkgLTY0IC03Ni41IC0xMDcuNXQtMTIyLjUgLTQzLjVoLTkyM3EtNzcgMCAtMTQ4LjUgNTMuNXQtOTkuNSAxMzEuNXEtMjQgNjcgLTIgMTI3cTAgNCAzIDI3dDQgMzdxMSA4IC0zIDIxLjV0LTMgMTkuNXEyIDExIDggMjF0MTYuNSAyMy41dDE2LjUgMjMuNXEyMyAzOCA0NSA5MS41dDMwIDkxLjVxMyAxMCAwLjUgMzB0LTAuNSAyOHEzIDExIDE3IDI4dDE3IDIzIHEyMSAzNiA0MiA5MnQyNSA5MHExIDkgLTIuNSAzMnQwLjUgMjhxNCAxMyAyMiAzMC41dDIyIDIyLjVxMTkgMjYgNDIuNSA4NC41dDI3LjUgOTYuNXExIDggLTMgMjUuNXQtMiAyNi41cTIgOCA5IDE4dDE4IDIzdDE3IDIxcTggMTIgMTYuNSAzMC41dDE1IDM1dDE2IDM2dDE5LjUgMzJ0MjYuNSAyMy41dDM2IDExLjV0NDcuNSAtNS41bC0xIC0zcTM4IDkgNTEgOWg3NjFxNzQgMCAxMTQgLTU2dDE4IC0xMzBsLTI3NCAtOTA2IHEtMzYgLTExOSAtNzEuNSAtMTUzLjV0LTEyOC41IC0zNC41aC04NjlxLTI3IDAgLTM4IC0xNXEtMTEgLTE2IC0xIC00M3EyNCAtNzAgMTQ0IC03MGg5MjNxMjkgMCA1NiAxNS41dDM1IDQxLjVsMzAwIDk4N3E3IDIyIDUgNTdxMzggLTE1IDU5IC00M3pNNTc1IDEwNTZxLTQgLTEzIDIgLTIyLjV0MjAgLTkuNWg2MDhxMTMgMCAyNS41IDkuNXQxNi41IDIyLjVsMjEgNjRxNCAxMyAtMiAyMi41dC0yMCA5LjVoLTYwOHEtMTMgMCAtMjUuNSAtOS41IHQtMTYuNSAtMjIuNXpNNDkyIDgwMHEtNCAtMTMgMiAtMjIuNXQyMCAtOS41aDYwOHExMyAwIDI1LjUgOS41dDE2LjUgMjIuNWwyMSA2NHE0IDEzIC0yIDIyLjV0LTIwIDkuNWgtNjA4cS0xMyAwIC0yNS41IC05LjV0LTE2LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmU7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNjQgMTQwOHEyMyAwIDQ0IC05cTMzIC0xMyA1Mi41IC00MXQxOS41IC02MnYtMTI4OXEwIC0zNCAtMTkuNSAtNjJ0LTUyLjUgLTQxcS0xOSAtOCAtNDQgLThxLTQ4IDAgLTgzIDMybC00NDEgNDI0bC00NDEgLTQyNHEtMzYgLTMzIC04MyAtMzNxLTIzIDAgLTQ0IDlxLTMzIDEzIC01Mi41IDQxdC0xOS41IDYydjEyODlxMCAzNCAxOS41IDYydDUyLjUgNDFxMjEgOSA0NCA5aDEwNDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMmY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCAwaDg5NnYyNTZoLTg5NnYtMjU2ek0zODQgNjQwaDg5NnYzODRoLTE2MHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MGgtNjQwdi02NDB6TTE1MzYgNTc2cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA1NzZ2LTQxNnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTIyNHYtMTYwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjggdjE2MGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NDE2cTAgNzkgNTYuNSAxMzUuNXQxMzUuNSA1Ni41aDY0djU0NHEwIDQwIDI4IDY4dDY4IDI4aDY3MnE0MCAwIDg4IC0yMHQ3NiAtNDhsMTUyIC0xNTJxMjggLTI4IDQ4IC03NnQyMCAtODh2LTI1Nmg2NHE3OSAwIDEzNS41IC01Ni41dDU2LjUgLTEzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMwOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik05NjAgODY0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41dC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjV0LTIwMy41IDg0LjV0LTg0LjUgMjAzLjV0ODQuNSAyMDMuNXQyMDMuNSA4NC41ek0xNjY0IDEyODBxMTA2IDAgMTgxIC03NXQ3NSAtMTgxdi04OTZxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1aC0xNDA4cS0xMDYgMCAtMTgxIDc1dC03NSAxODF2ODk2cTAgMTA2IDc1IDE4MXQxODEgNzVoMjI0bDUxIDEzNiBxMTkgNDkgNjkuNSA4NC41dDEwMy41IDM1LjVoNTEycTUzIDAgMTAzLjUgLTM1LjV0NjkuNSAtODQuNWw1MSAtMTM2aDIyNHpNOTYwIDEyOHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03MjUgOTc3bC0xNzAgLTQ1MHE3MyAtMSAxNTMuNSAtMnQxMTkgLTEuNXQ1Mi41IC0wLjVsMjkgMnEtMzIgOTUgLTkyIDI0MXEtNTMgMTMyIC05MiAyMTF6TTIxIC0xMjhoLTIxbDIgNzlxMjIgNyA4MCAxOHE4OSAxNiAxMTAgMzFxMjAgMTYgNDggNjhsMjM3IDYxNmwyODAgNzI0aDc1aDUzbDExIC0yMWwyMDUgLTQ4MHExMDMgLTI0MiAxMjQgLTI5N3EzOSAtMTAyIDk2IC0yMzVxMjYgLTU4IDY1IC0xNjRxMjQgLTY3IDY1IC0xNDkgcTIyIC00OSAzNSAtNTdxMjIgLTE5IDY5IC0yM3E0NyAtNiAxMDMgLTI3cTYgLTM5IDYgLTU3cTAgLTE0IC0xIC0yNnEtODAgMCAtMTkyIDhxLTkzIDggLTE4OSA4cS03OSAwIC0xMzUgLTJsLTIwMCAtMTFsLTU4IC0ycTAgNDUgNCA3OGwxMzEgMjhxNTYgMTMgNjggMjNxMTIgMTIgMTIgMjd0LTYgMzJsLTQ3IDExNGwtOTIgMjI4bC00NTAgMnEtMjkgLTY1IC0xMDQgLTI3NHEtMjMgLTY0IC0yMyAtODRxMCAtMzEgMTcgLTQzIHEyNiAtMjEgMTAzIC0zMnEzIDAgMTMuNSAtMnQzMCAtNXQ0MC41IC02cTEgLTI4IDEgLTU4cTAgLTE3IC0yIC0yN3EtNjYgMCAtMzQ5IDIwbC00OCAtOHEtODEgLTE0IC0xNjcgLTE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDMyOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik01NTUgMTVxNzYgLTMyIDE0MCAtMzJxMTMxIDAgMjE2IDQxdDEyMiAxMTNxMzggNzAgMzggMTgxcTAgMTE0IC00MSAxODBxLTU4IDk0IC0xNDEgMTI2cS04MCAzMiAtMjQ3IDMycS03NCAwIC0xMDEgLTEwdi0xNDRsLTEgLTE3M2wzIC0yNzBxMCAtMTUgMTIgLTQ0ek01NDEgNzYxcTQzIC03IDEwOSAtN3ExNzUgMCAyNjQgNjV0ODkgMjI0cTAgMTEyIC04NSAxODdxLTg0IDc1IC0yNTUgNzVxLTUyIDAgLTEzMCAtMTNxMCAtNDQgMiAtNzcgcTcgLTEyMiA2IC0yNzlsLTEgLTk4cTAgLTQzIDEgLTc3ek0wIC0xMjhsMiA5NHE0NSA5IDY4IDEycTc3IDEyIDEyMyAzMXExNyAyNyAyMSA1MXE5IDY2IDkgMTk0bC0yIDQ5N3EtNSAyNTYgLTkgNDA0cS0xIDg3IC0xMSAxMDlxLTEgNCAtMTIgMTJxLTE4IDEyIC02OSAxNXEtMzAgMiAtMTE0IDEzbC00IDgzbDI2MCA2bDM4MCAxM2w0NSAxcTUgMCAxNCAwLjV0MTQgMC41cTEgMCAyMS41IC0wLjV0NDAuNSAtMC41aDc0cTg4IDAgMTkxIC0yNyBxNDMgLTEzIDk2IC0zOXE1NyAtMjkgMTAyIC03NnE0NCAtNDcgNjUgLTEwNHQyMSAtMTIycTAgLTcwIC0zMiAtMTI4dC05NSAtMTA1cS0yNiAtMjAgLTE1MCAtNzdxMTc3IC00MSAyNjcgLTE0NnE5MiAtMTA2IDkyIC0yMzZxMCAtNzYgLTI5IC0xNjFxLTIxIC02MiAtNzEgLTExN3EtNjYgLTcyIC0xNDAgLTEwOHEtNzMgLTM2IC0yMDMgLTYwcS04MiAtMTUgLTE5OCAtMTFsLTE5NyA0cS04NCAyIC0yOTggLTExcS0zMyAtMyAtMjcyIC0xMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzMzsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMCAtMTI2bDE3IDg1cTQgMSA3NyAyMHE3NiAxOSAxMTYgMzlxMjkgMzcgNDEgMTAxbDI3IDEzOWw1NiAyNjhsMTIgNjRxOCA0NCAxNyA4NC41dDE2IDY3dDEyLjUgNDYuNXQ5IDMwLjV0My41IDExLjVsMjkgMTU3bDE2IDYzbDIyIDEzNWw4IDUwdjM4cS00MSAyMiAtMTQ0IDI4cS0yOCAyIC0zOCA0bDE5IDEwM2wzMTcgLTE0cTM5IC0yIDczIC0ycTY2IDAgMjE0IDlxMzMgMiA2OCA0LjV0MzYgMi41cS0yIC0xOSAtNiAtMzggcS03IC0yOSAtMTMgLTUxcS01NSAtMTkgLTEwOSAtMzFxLTY0IC0xNiAtMTAxIC0zMXEtMTIgLTMxIC0yNCAtODhxLTkgLTQ0IC0xMyAtODJxLTQ0IC0xOTkgLTY2IC0zMDZsLTYxIC0zMTFsLTM4IC0xNThsLTQzIC0yMzVsLTEyIC00NXEtMiAtNyAxIC0yN3E2NCAtMTUgMTE5IC0yMXEzNiAtNSA2NiAtMTBxLTEgLTI5IC03IC01OHEtNyAtMzEgLTkgLTQxcS0xOCAwIC0yMyAtMXEtMjQgLTIgLTQyIC0ycS05IDAgLTI4IDNxLTE5IDQgLTE0NSAxNyBsLTE5OCAycS00MSAxIC0xNzQgLTExcS03NCAtNyAtOTggLTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTgxIDE0MDdsNTQgLTI3cTIwIC01IDIxMSAtNWgxMzBsMTkgM2wxMTUgMWwyMTUgLTFoMjkzbDM0IC0ycTE0IC0xIDI4IDd0MjEgMTZsNyA4bDQyIDFxMTUgMCAyOCAtMXYtMTA0LjV0MSAtMTMxLjVsMSAtMTAwbC0xIC01OHEwIC0zMiAtNCAtNTFxLTM5IC0xNSAtNjggLTE4cS0yNSA0MyAtNTQgMTI4cS04IDI0IC0xNS41IDYyLjV0LTExLjUgNjUuNXQtNiAyOXEtMTMgMTUgLTI3IDE5cS03IDIgLTQyLjUgMnQtMTAzLjUgLTF0LTExMSAtMSBxLTM0IDAgLTY3IC01cS0xMCAtOTcgLTggLTEzNmwxIC0xNTJ2LTMzMmwzIC0zNTlsLTEgLTE0N3EtMSAtNDYgMTEgLTg1cTQ5IC0yNSA4OSAtMzJxMiAwIDE4IC01dDQ0IC0xM3Q0MyAtMTJxMzAgLTggNTAgLTE4cTUgLTQ1IDUgLTUwcTAgLTEwIC0zIC0yOXEtMTQgLTEgLTM0IC0xcS0xMTAgMCAtMTg3IDEwcS03MiA4IC0yMzggOHEtODggMCAtMjMzIC0xNHEtNDggLTQgLTcwIC00cS0yIDIyIC0yIDI2bC0xIDI2djlxMjEgMzMgNzkgNDkgcTEzOSAzOCAxNTkgNTBxOSAyMSAxMiA1NnE4IDE5MiA2IDQzM2wtNSA0MjhxLTEgNjIgLTAuNSAxMTguNXQwLjUgMTAyLjV0LTIgNTd0LTYgMTVxLTYgNSAtMTQgNnEtMzggNiAtMTQ4IDZxLTQzIDAgLTEwMCAtMTMuNXQtNzMgLTI0LjVxLTEzIC05IC0yMiAtMzN0LTIyIC03NXQtMjQgLTg0cS02IC0xOSAtMTkuNSAtMzJ0LTIwLjUgLTEzcS00NCAyNyAtNTYgNDR2Mjk3djg2ek0xNzQ0IDEyOHEzMyAwIDQyIC0xOC41dC0xMSAtNDQuNSBsLTEyNiAtMTYycS0yMCAtMjYgLTQ5IC0yNnQtNDkgMjZsLTEyNiAxNjJxLTIwIDI2IC0xMSA0NC41dDQyIDE4LjVoODB2MTAyNGgtODBxLTMzIDAgLTQyIDE4LjV0MTEgNDQuNWwxMjYgMTYycTIwIDI2IDQ5IDI2dDQ5IC0yNmwxMjYgLTE2MnEyMCAtMjYgMTEgLTQ0LjV0LTQyIC0xOC41aC04MHYtMTAyNGg4MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzNTsiIGQ9Ik04MSAxNDA3bDU0IC0yN3EyMCAtNSAyMTEgLTVoMTMwbDE5IDNsMTE1IDFsNDQ2IC0xaDMxOGwzNCAtMnExNCAtMSAyOCA3dDIxIDE2bDcgOGw0MiAxcTE1IDAgMjggLTF2LTEwNC41dDEgLTEzMS41bDEgLTEwMGwtMSAtNThxMCAtMzIgLTQgLTUxcS0zOSAtMTUgLTY4IC0xOHEtMjUgNDMgLTU0IDEyOHEtOCAyNCAtMTUuNSA2Mi41dC0xMS41IDY1LjV0LTYgMjlxLTEzIDE1IC0yNyAxOXEtNyAyIC01OC41IDJ0LTEzOC41IC0xdC0xMjggLTEgcS05NCAwIC0xMjcgLTVxLTEwIC05NyAtOCAtMTM2bDEgLTE1MnY1MmwzIC0zNTlsLTEgLTE0N3EtMSAtNDYgMTEgLTg1cTQ5IC0yNSA4OSAtMzJxMiAwIDE4IC01dDQ0IC0xM3Q0MyAtMTJxMzAgLTggNTAgLTE4cTUgLTQ1IDUgLTUwcTAgLTEwIC0zIC0yOXEtMTQgLTEgLTM0IC0xcS0xMTAgMCAtMTg3IDEwcS03MiA4IC0yMzggOHEtODIgMCAtMjMzIC0xM3EtNDUgLTUgLTcwIC01cS0yIDIyIC0yIDI2bC0xIDI2djlxMjEgMzMgNzkgNDkgcTEzOSAzOCAxNTkgNTBxOSAyMSAxMiA1NnE2IDEzNyA2IDQzM2wtNSA0NHEwIDI2NSAtMiAyNzhxLTIgMTEgLTYgMTVxLTYgNSAtMTQgNnEtMzggNiAtMTQ4IDZxLTUwIDAgLTE2OC41IC0xNHQtMTMyLjUgLTI0cS0xMyAtOSAtMjIgLTMzdC0yMiAtNzV0LTI0IC04NHEtNiAtMTkgLTE5LjUgLTMydC0yMC41IC0xM3EtNDQgMjcgLTU2IDQ0djI5N3Y4NnpNMTUwNSAxMTNxMjYgLTIwIDI2IC00OXQtMjYgLTQ5bC0xNjIgLTEyNiBxLTI2IC0yMCAtNDQuNSAtMTF0LTE4LjUgNDJ2ODBoLTEwMjR2LTgwcTAgLTMzIC0xOC41IC00MnQtNDQuNSAxMWwtMTYyIDEyNnEtMjYgMjAgLTI2IDQ5dDI2IDQ5bDE2MiAxMjZxMjYgMjAgNDQuNSAxMXQxOC41IC00MnYtODBoMTAyNHY4MHEwIDMzIDE4LjUgNDJ0NDQuNSAtMTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzY7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE0MDggNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE2NjQgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzNzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTQwOCA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE2NjQgOTYwdi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5IGgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwMzg7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgOTYwdi0xMjhxMCAtMjYgLTE5IC00NSB0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzOTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA1NzZ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiA5NjB2LTEyOHEwIC0yNiAtMTkgLTQ1IHQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgMTM0NHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNhOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0yNTYgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0yNTYgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjUgdDkuNSAtMjIuNXpNMjU2IDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTkycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0IHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTI1NiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41IHQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiA5OTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkyIHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgOTkydi01NzZxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41cS0xNCAwIC0yMyA5bC0yODggMjg4cS05IDkgLTkgMjN0OSAyM2wyODggMjg4cTkgOSAyMyA5cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMzUyIDcwNHEwIC0xNCAtOSAtMjNsLTI4OCAtMjg4cS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djU3NnEwIDEzIDkuNSAyMi41dDIyLjUgOS41cTE0IDAgMjMgLTlsMjg4IC0yODhxOSAtOSA5IC0yM3pNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41IHQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMDg4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTA4OCBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE3MjhxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxNzI4cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjAzZDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTkwMCAxMjc4cTIwIC04IDIwIC0zMHYtMTIxNnEwIC0yMiAtMjAgLTMwcS04IC0yIC0xMiAtMnEtMTIgMCAtMjMgOWwtNTg1IDU4NnYtMzA3cTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC03MDRxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djcwNHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoNzA0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di0zMDdsNTg1IDU4NnExNiAxNSAzNSA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDNlOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgOTYwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTY2NCA1NzZ2LTQ0OGgtMTQwOHYxOTJsMzIwIDMyMGwxNjAgLTE2MGw1MTIgNTEyek0xNzYwIDEyODBoLTE2MDBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMjE2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41djEyMTYgcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXpNMTkyMCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQwOyIgZD0iTTM2MyAwbDkxIDkxbC0yMzUgMjM1bC05MSAtOTF2LTEwN2gxMjh2LTEyOGgxMDd6TTg4NiA5MjhxMCAyMiAtMjIgMjJxLTEwIDAgLTE3IC03bC01NDIgLTU0MnEtNyAtNyAtNyAtMTdxMCAtMjIgMjIgLTIycTEwIDAgMTcgN2w1NDIgNTQycTcgNyA3IDE3ek04MzIgMTEyMGw0MTYgLTQxNmwtODMyIC04MzJoLTQxNnY0MTZ6TTE1MTUgMTAyNHEwIC01MyAtMzcgLTkwbC0xNjYgLTE2NmwtNDE2IDQxNmwxNjYgMTY1cTM2IDM4IDkwIDM4IHE1MyAwIDkxIC0zOGwyMzUgLTIzNHEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik03NjggODk2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTAyNCA4OTZxMCAtMTA5IC0zMyAtMTc5bC0zNjQgLTc3NHEtMTYgLTMzIC00Ny41IC01MnQtNjcuNSAtMTl0LTY3LjUgMTl0LTQ2LjUgNTJsLTM2NSA3NzRxLTMzIDcwIC0zMyAxNzlxMCAyMTIgMTUwIDM2MnQzNjIgMTUwdDM2MiAtMTUwdDE1MCAtMzYyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQyOyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTI1NiA2NDBxMCAtMTA0IDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV2MTAyNHEtMTA0IDAgLTE5OC41IC00MC41IHQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQzOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01MTIgMzg0cTAgMzYgLTIwIDY5cS0xIDEgLTE1LjUgMjIuNXQtMjUuNSAzOHQtMjUgNDR0LTIxIDUwLjVxLTQgMTYgLTIxIDE2dC0yMSAtMTZxLTcgLTIzIC0yMSAtNTAuNXQtMjUgLTQ0dC0yNS41IC0zOHQtMTUuNSAtMjIuNXEtMjAgLTMzIC0yMCAtNjlxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgNTEycTAgLTIxMiAtMTUwIC0zNjJ0LTM2MiAtMTUwdC0zNjIgMTUwdC0xNTAgMzYyIHEwIDE0NSA4MSAyNzVxNiA5IDYyLjUgOTAuNXQxMDEgMTUxdDk5LjUgMTc4dDgzIDIwMS41cTkgMzAgMzQgNDd0NTEgMTd0NTEuNSAtMTd0MzMuNSAtNDdxMjggLTkzIDgzIC0yMDEuNXQ5OS41IC0xNzh0MTAxIC0xNTF0NjIuNSAtOTAuNXE4MSAtMTI3IDgxIC0yNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTg4OCAzNTJsMTE2IDExNmwtMTUyIDE1MmwtMTE2IC0xMTZ2LTU2aDk2di05Nmg1NnpNMTMyOCAxMDcycS0xNiAxNiAtMzMgLTFsLTM1MCAtMzUwcS0xNyAtMTcgLTEgLTMzdDMzIDFsMzUwIDM1MHExNyAxNyAxIDMzek0xNDA4IDQ3OHYtMTkwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoODMyIHE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xNCAtMTQgLTMyIC04cS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YxMjZxMCAxMyA5IDIybDY0IDY0cTE1IDE1IDM1IDd0MjAgLTI5ek0xMzEyIDEyMTZsMjg4IC0yODhsLTY3MiAtNjcyaC0yODh2Mjg4ek0xNzU2IDEwODRsLTkyIC05MiBsLTI4OCAyODhsOTIgOTJxMjggMjggNjggMjh0NjggLTI4bDE1MiAtMTUycTI4IC0yOCAyOCAtNjh0LTI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0NTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQwOCA1NDd2LTI1OXEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDI1NXYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC0yNyAtMjYgLTMycS03NyAtMjYgLTEzMyAtNjBxLTEwIC00IC0xNiAtNGgtMTEycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMiBxNjYgMCAxMTMgNDd0NDcgMTEzdjIxNHEwIDE5IDE4IDI5cTI4IDEzIDU0IDM3cTE2IDE2IDM1IDhxMjEgLTkgMjEgLTI5ek0xNjQ1IDEwNDNsLTM4NCAtMzg0cS0xOCAtMTkgLTQ1IC0xOXEtMTIgMCAtMjUgNXEtMzkgMTcgLTM5IDU5djE5MmgtMTYwcS0zMjMgMCAtNDM4IC0xMzFxLTExOSAtMTM3IC03NCAtNDczcTMgLTIzIC0yMCAtMzRxLTggLTIgLTEyIC0ycS0xNiAwIC0yNiAxM3EtMTAgMTQgLTIxIDMxdC0zOS41IDY4LjV0LTQ5LjUgOTkuNSB0LTM4LjUgMTE0dC0xNy41IDEyMnEwIDQ5IDMuNSA5MXQxNCA5MHQyOCA4OHQ0NyA4MS41dDY4LjUgNzR0OTQuNSA2MS41dDEyNC41IDQ4LjV0MTU5LjUgMzAuNXQxOTYuNSAxMWgxNjB2MTkycTAgNDIgMzkgNTlxMTMgNSAyNSA1cTI2IDAgNDUgLTE5bDM4NCAtMzg0cTE5IC0xOSAxOSAtNDV0LTE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0NjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQwOCA2MDZ2LTMxOHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMnE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xMCAtMTAgLTIzIC0xMHEtMyAwIC05IDJxLTIzIDYgLTQ1IDZoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMyIHEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YyNTRxMCAxMyA5IDIybDY0IDY0cTEwIDEwIDIzIDEwcTYgMCAxMiAtM3EyMCAtOCAyMCAtMjl6TTE2MzkgMTA5NWwtODE0IC04MTRxLTI0IC0yNCAtNTcgLTI0dC01NyAyNGwtNDMwIDQzMHEtMjQgMjQgLTI0IDU3dDI0IDU3bDExMCAxMTBxMjQgMjQgNTcgMjR0NTcgLTI0bDI2MyAtMjYzbDY0NyA2NDdxMjQgMjQgNTcgMjR0NTcgLTI0bDExMCAtMTEwIHEyNCAtMjQgMjQgLTU3dC0yNCAtNTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNDc7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgNjQwcTAgLTI2IC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djEyOGgtMzg0di0zODRoMTI4cTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloMTI4djM4NGgtMzg0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1IHQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTEyOGgzODR2Mzg0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0zODRoMzg0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDQ4OyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik05NzkgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTY3OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di02NzhxNCAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0OTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc0NyAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS05IDkgLTEzIDE5di02NzhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtNjc4cTQgMTEgMTMgMTlsNzEwIDcxMCBxMTkgMTkgMzIgMTN0MTMgLTMydi03MTBxNCAxMSAxMyAxOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA0YTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxOSAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOCA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS0xOSAxOSAtMTkgNDV0MTkgNDVsNzEwIDcxMHExOSAxOSAzMiAxM3QxMyAtMzJ2LTcxMHE1IDExIDEzIDE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRiOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzg0IDYwOWwtMTMyOCAtNzM4cS0yMyAtMTMgLTM5LjUgLTN0LTE2LjUgMzZ2MTQ3MnEwIDI2IDE2LjUgMzZ0MzkuNSAtM2wxMzI4IC03MzhxMjMgLTEzIDIzIC0zMXQtMjMgLTMxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRjOyIgZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1ek02NDAgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDRkOyIgZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDA4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTQ1IC0xMTVxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnYxNDcycTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTggLTggMTMgLTE5djcxMHEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHExOSAtMTkgMTkgLTQ1dC0xOSAtNDVsLTcxMCAtNzEwcS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2NzEwcS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUwOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY3MTBxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOCAtOCAxMyAtMTl2Njc4cTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3OHEtNSAtMTAgLTEzIC0xOWwtNzEwIC03MTAgcS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2NzEwcS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik00NSAtMTE1cS0xOSAtMTkgLTMyIC0xM3QtMTMgMzJ2MTQ3MnEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE4IC04IDEzIC0xOXY2NzhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDA4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2Njc4cS01IC0xMCAtMTMgLTE5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDUyOyIgaG9yaXotYWR2LXg9IjE1MzgiIGQ9Ik0xNCA1NTdsNzEwIDcxMHExOSAxOSA0NSAxOXQ0NSAtMTlsNzEwIC03MTBxMTkgLTE5IDEzIC0zMnQtMzIgLTEzaC0xNDcycS0yNiAwIC0zMiAxM3QxMyAzMnpNMTQ3MyAwaC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTc0MiAtMzdsLTY1MiA2NTFxLTM3IDM3IC0zNyA5MC41dDM3IDkwLjVsNjUyIDY1MXEzNyAzNyA5MC41IDM3dDkwLjUgLTM3bDc1IC03NXEzNyAtMzcgMzcgLTkwLjV0LTM3IC05MC41bC00ODYgLTQ4Nmw0ODYgLTQ4NXEzNyAtMzggMzcgLTkxdC0zNyAtOTBsLTc1IC03NXEtMzcgLTM3IC05MC41IC0zN3QtOTAuNSAzN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NDsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA5OSA3MDRxMCAtNTIgLTM3IC05MWwtNjUyIC02NTFxLTM3IC0zNyAtOTAgLTM3dC05MCAzN2wtNzYgNzVxLTM3IDM5IC0zNyA5MXEwIDUzIDM3IDkwbDQ4NiA0ODZsLTQ4NiA0ODVxLTM3IDM5IC0zNyA5MXEwIDUzIDM3IDkwbDc2IDc1cTM2IDM4IDkwIDM4dDkwIC0zOGw2NTIgLTY1MXEzNyAtMzcgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU1OyIgZD0iTTEyMTYgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTI1NnYyNTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0yNTZoLTI1NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDI1NnYtMjU2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MjU2aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNTY7IiBkPSJNMTIxNiA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtNzY4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNSB0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1NzsiIGQ9Ik0xMTQ5IDQxNHEwIDI2IC0xOSA0NWwtMTgxIDE4MWwxODEgMTgxcTE5IDE5IDE5IDQ1cTAgMjcgLTE5IDQ2bC05MCA5MHEtMTkgMTkgLTQ2IDE5cS0yNiAwIC00NSAtMTlsLTE4MSAtMTgxbC0xODEgMTgxcS0xOSAxOSAtNDUgMTlxLTI3IDAgLTQ2IC0xOWwtOTAgLTkwcS0xOSAtMTkgLTE5IC00NnEwIC0yNiAxOSAtNDVsMTgxIC0xODFsLTE4MSAtMTgxcS0xOSAtMTkgLTE5IC00NXEwIC0yNyAxOSAtNDZsOTAgLTkwcTE5IC0xOSA0NiAtMTkgcTI2IDAgNDUgMTlsMTgxIDE4MWwxODEgLTE4MXExOSAtMTkgNDUgLTE5cTI3IDAgNDYgMTlsOTAgOTBxMTkgMTkgMTkgNDZ6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDU4OyIgZD0iTTEyODQgODAycTAgMjggLTE4IDQ2bC05MSA5MHEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTQwOCAtNDA3bC0yMjYgMjI2cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtOTEgLTkwcS0xOCAtMTggLTE4IC00NnEwIC0yNyAxOCAtNDVsMzYyIC0zNjJxMTkgLTE5IDQ1IC0xOXEyNyAwIDQ2IDE5bDU0MyA1NDNxMTggMTggMTggNDV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDMgdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA1OTsiIGQ9Ik04OTYgMTYwdjE5MnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE5MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTE5MnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDgzMnEwIDk3IC01OC41IDE3MnQtMTQ0LjUgMTExLjV0LTE4MSAzNi41dC0xODEgLTM2LjV0LTE0NC41IC0xMTEuNXQtNTguNSAtMTcydi0xMXYtMTN0MSAtMTEuNXQzIC0xMS41dDUuNSAtOHQ5IC03IHQxMy41IC0yaDE5MnExNCAwIDIzIDl0OSAyM3EwIDEyIDExIDI3cTE5IDMxIDUwLjUgNTB0NjYuNSAxOXEzOSAwIDgzIC0yMS41dDQ0IC01Ny41cTAgLTMzIC0yNi41IC01OHQtNjMuNSAtNDR0LTc0LjUgLTQxLjV0LTY0IC02My41dC0yNi41IC05OHYtMTF2LTEzdDEgLTExLjV0MyAtMTEuNXQ1LjUgLTh0OSAtN3QxMy41IC0yaDE5MnExNyAwIDI0IDEwLjV0OCAyNC41dDEzLjUgMzN0MzcuNSAzMnE2MCAzMyA3MCAzOXE2MiA0NCA5OC41IDEwOCB0MzYuNSAxMzd6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVhOyIgZD0iTTEwMjQgMTYwdjY0cTAgMTQgLTkgMjN0LTIzIDloLTk2djQ4MHEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloOTZ2LTM4NGgtOTZxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNDQ4cTE0IDAgMjMgOXQ5IDIzek04OTYgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzIHQyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDViOyIgZD0iTTExOTcgNTEyaC0xMDlxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMDlxLTMyIDEwOCAtMTEyLjUgMTg4LjV0LTE4OC41IDExMi41di0xMDlxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMDlxLTEwOCAtMzIgLTE4OC41IC0xMTIuNXQtMTEyLjUgLTE4OC41aDEwOXEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEwOSBxMzIgLTEwOCAxMTIuNSAtMTg4LjV0MTg4LjUgLTExMi41djEwOXEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEwOXExMDggMzIgMTg4LjUgMTEyLjV0MTEyLjUgMTg4LjV6TTE1MzYgNzA0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDNxLTM3IC0xNjEgLTE1NC41IC0yNzguNXQtMjc4LjUgLTE1NC41di0xNDNxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNDMgcS0xNjEgMzcgLTI3OC41IDE1NC41dC0xNTQuNSAyNzguNWgtMTQzcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQzcTM3IDE2MSAxNTQuNSAyNzguNXQyNzguNSAxNTQuNXYxNDNxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDNxMTYxIC0zNyAyNzguNSAtMTU0LjV0MTU0LjUgLTI3OC41aDE0M3EyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNWM7IiBkPSJNMTEyNSA0NDhxMCAtMjcgLTE4IC00NWwtMTAyIC0xMDJxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTQ3IDE0N2wtMTQ3IC0xNDdxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTAyIDEwMnEtMTggMTggLTE4IDQ1dDE4IDQ1bDE0NyAxNDdsLTE0NyAxNDdxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMDIgMTAycTE4IDE4IDQ1IDE4dDQ1IC0xOGwxNDcgLTE0N2wxNDcgMTQ3cTE4IDE4IDQ1IDE4dDQ1IC0xOGwxMDIgLTEwMnExOCAtMTggMTggLTQ1IHQtMTggLTQ1bC0xNDcgLTE0N2wxNDcgLTE0N3ExOCAtMTggMTggLTQ1ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNSB0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNWQ7IiBkPSJNMTE4OSA3NjhxMCAtMjcgLTE4IC00NWwtMzIwIC0zMjBsLTEwMiAtMTAycS0xOCAtMTggLTQ1IC0xOHQtNDUgMThsLTEwMiAxMDJsLTE5MiAxOTJxLTE4IDE4IC0xOCA0NXQxOCA0NWwxMDIgMTAycTE4IDE4IDQ1IDE4dDQ1IC0xOGwxNDcgLTE0N2wyNzUgMjc1cTE4IDE4IDQ1IDE4dDQ1IC0xOGwxMDIgLTEwMnExOCAtMTggMTggLTQ1ek0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41IHQtMTk4LjUgNDAuNXQtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNSB0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDVlOyIgZD0iTTEyODAgNjQwcTAgMTM5IC03MSAyNjBsLTcwMSAtNzAxcTEyMSAtNzEgMjYwIC03MXExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTMyNyAzODBsNzAxIDcwMXEtMTIxIDcxIC0yNjAgNzFxLTEwNCAwIC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41cTAgLTEzOSA3MSAtMjYwek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjA7IiBkPSJNMTUzNiA2NDB2LTEyOHEwIC01MyAtMzIuNSAtOTAuNXQtODQuNSAtMzcuNWgtNzA0bDI5MyAtMjk0cTM4IC0zNiAzOCAtOTB0LTM4IC05MGwtNzUgLTc2cS0zNyAtMzcgLTkwIC0zN3EtNTIgMCAtOTEgMzdsLTY1MSA2NTJxLTM3IDM3IC0zNyA5MHEwIDUyIDM3IDkxbDY1MSA2NTBxMzggMzggOTEgMzhxNTIgMCA5MCAtMzhsNzUgLTc0cTM4IC0zOCAzOCAtOTF0LTM4IC05MWwtMjkzIC0yOTNoNzA0cTUyIDAgODQuNSAtMzcuNSB0MzIuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2MTsiIGQ9Ik0xNDcyIDU3NnEwIC01NCAtMzcgLTkxbC02NTEgLTY1MXEtMzkgLTM3IC05MSAtMzdxLTUxIDAgLTkwIDM3bC03NSA3NXEtMzggMzggLTM4IDkxdDM4IDkxbDI5MyAyOTNoLTcwNHEtNTIgMCAtODQuNSAzNy41dC0zMi41IDkwLjV2MTI4cTAgNTMgMzIuNSA5MC41dDg0LjUgMzcuNWg3MDRsLTI5MyAyOTRxLTM4IDM2IC0zOCA5MHQzOCA5MGw3NSA3NXEzOCAzOCA5MCAzOHE1MyAwIDkxIC0zOGw2NTEgLTY1MXEzNyAtMzUgMzcgLTkweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDYyOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjExIDU2NXEwIC01MSAtMzcgLTkwbC03NSAtNzVxLTM4IC0zOCAtOTEgLTM4cS01NCAwIC05MCAzOGwtMjk0IDI5M3YtNzA0cTAgLTUyIC0zNy41IC04NC41dC05MC41IC0zMi41aC0xMjhxLTUzIDAgLTkwLjUgMzIuNXQtMzcuNSA4NC41djcwNGwtMjk0IC0yOTNxLTM2IC0zOCAtOTAgLTM4dC05MCAzOGwtNzUgNzVxLTM4IDM4IC0zOCA5MHEwIDUzIDM4IDkxbDY1MSA2NTFxMzUgMzcgOTAgMzdxNTQgMCA5MSAtMzdsNjUxIC02NTEgcTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNjM7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgNzA0cTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTY1MSA2NTJxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDI5NCAtMjk0djcwNHEwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTcwNGwyOTQgMjk0cTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDc1IC03NXEzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDg5NnEwIC0yNiAtMTkgLTQ1bC01MTIgLTUxMnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyNTZoLTIyNHEtOTggMCAtMTc1LjUgLTZ0LTE1NCAtMjEuNXQtMTMzIC00Mi41dC0xMDUuNSAtNjkuNXQtODAgLTEwMXQtNDguNSAtMTM4LjV0LTE3LjUgLTE4MXEwIC01NSA1IC0xMjNxMCAtNiAyLjUgLTIzLjV0Mi41IC0yNi41cTAgLTE1IC04LjUgLTI1dC0yMy41IC0xMHEtMTYgMCAtMjggMTdxLTcgOSAtMTMgMjIgdC0xMy41IDMwdC0xMC41IDI0cS0xMjcgMjg1IC0xMjcgNDUxcTAgMTk5IDUzIDMzM3ExNjIgNDAzIDg3NSA0MDNoMjI0djI1NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw1MTIgLTUxMnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY1OyIgZD0iTTc1NSA0ODBxMCAtMTMgLTEwIC0yM2wtMzMyIC0zMzJsMTQ0IC0xNDRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzek0xNTM2IDEzNDR2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMiBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTE0IDExNHEtMTAgMTAgLTEwIDIzdDEwIDIzbDMzMiAzMzJsLTE0NCAxNDRxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY2OyIgZD0iTTc2OCA1NzZ2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsMzMyIDMzMmwtMTQ0IDE0NHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MjMgMTI0OHEwIC0xMyAtMTAgLTIzbC0zMzIgLTMzMmwxNDQgLTE0NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDUgdC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDY3OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA4IDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xOTJxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDQxNnY0MTZxMCA0MCAyOCA2OHQ2OCAyOGgxOTJxNDAgMCA2OCAtMjh0MjggLTY4di00MTZoNDE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ODsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEyMTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxMjE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2OTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTQ4MiA0ODZxNDYgLTI2IDU5LjUgLTc3LjV0LTEyLjUgLTk3LjVsLTY0IC0xMTBxLTI2IC00NiAtNzcuNSAtNTkuNXQtOTcuNSAxMi41bC0yNjYgMTUzdi0zMDdxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHYzMDdsLTI2NiAtMTUzcS00NiAtMjYgLTk3LjUgLTEyLjV0LTc3LjUgNTkuNWwtNjQgMTEwcS0yNiA0NiAtMTIuNSA5Ny41dDU5LjUgNzcuNWwyNjYgMTU0bC0yNjYgMTU0IHEtNDYgMjYgLTU5LjUgNzcuNXQxMi41IDk3LjVsNjQgMTEwcTI2IDQ2IDc3LjUgNTkuNXQ5Ny41IC0xMi41bDI2NiAtMTUzdjMwN3EwIDUyIDM4IDkwdDkwIDM4aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB2LTMwN2wyNjYgMTUzcTQ2IDI2IDk3LjUgMTIuNXQ3Ny41IC01OS41bDY0IC0xMTBxMjYgLTQ2IDEyLjUgLTk3LjV0LTU5LjUgLTc3LjVsLTI2NiAtMTU0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDZhOyIgZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTg5NiAxNjF2MTkwcTAgMTQgLTkgMjMuNXQtMjIgOS41aC0xOTJxLTEzIDAgLTIzIC0xMHQtMTAgLTIzdi0xOTBxMCAtMTMgMTAgLTIzdDIzIC0xMGgxOTIgcTEzIDAgMjIgOS41dDkgMjMuNXpNODk0IDUwNWwxOCA2MjFxMCAxMiAtMTAgMThxLTEwIDggLTI0IDhoLTIyMHEtMTQgMCAtMjQgLThxLTEwIC02IC0xMCAtMThsMTcgLTYyMXEwIC0xMCAxMCAtMTcuNXQyNCAtNy41aDE4NXExNCAwIDIzLjUgNy41dDEwLjUgMTcuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2YjsiIGQ9Ik05MjggMTgwdjcxNmgtMzIwdi03MTZxMCAtMjUgMTguNSAtMzguNXQ0NS41IC0xMy41aDE5MnEyNyAwIDQ1LjUgMTMuNXQxOC41IDM4LjV6TTQ3MiAxMDI0aDE5NWwtMTI2IDE2MXEtMjQgMzEgLTY5IDMxcS00MCAwIC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4ek0xMTYwIDExMjBxMCA0MCAtMjggNjh0LTY4IDI4cS00NSAwIC02OSAtMzFsLTEyNSAtMTYxaDE5NHE0MCAwIDY4IDI4dDI4IDY4ek0xNTM2IDg2NHYtMzIwIHEwIC0xNCAtMTAgLTIydC0yNyAtMTAuNXQtMzIgLTIuNXQtMzQuNSAxLjV0LTI0LjUgMS41di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMDg4cS00MCAwIC02OCAyOHQtMjggNjh2NDE2cS01IDAgLTI0LjUgLTEuNXQtMzQuNSAtMS41dC0zMiAyLjV0LTI3IDEwLjV0LTEwIDIydjMyMHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDQ0MHEtOTMgMCAtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjUgcTEwOCAwIDE2OCAtNzdsMTI4IC0xNjVsMTI4IDE2NXE2MCA3NyAxNjggNzdxOTMgMCAxNTguNSAtNjUuNXQ2NS41IC0xNTguNXQtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41aDQ0MHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNmM7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTEyODAgODMycTAgMjYgLTE5IDQ1dC00NSAxOXEtMTcyIDAgLTMxOCAtNDkuNXQtMjU5LjUgLTEzNHQtMjM1LjUgLTIxOS41cS0xOSAtMjEgLTE5IC00NXEwIC0yNiAxOSAtNDV0NDUgLTE5cTI0IDAgNDUgMTlxMjcgMjQgNzQgNzF0NjcgNjZxMTM3IDEyNCAyNjguNSAxNzZ0MzEzLjUgNTJxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiAxMDMwcTAgLTk1IC0yMCAtMTkzcS00NiAtMjI0IC0xODQuNSAtMzgzdC0zNTcuNSAtMjY4IHEtMjE0IC0xMDggLTQzOCAtMTA4cS0xNDggMCAtMjg2IDQ3cS0xNSA1IC04OCA0MnQtOTYgMzdxLTE2IDAgLTM5LjUgLTMydC00NSAtNzB0LTUyLjUgLTcwdC02MCAtMzJxLTMwIDAgLTUxIDExdC0zMSAyNHQtMjcgNDJxLTIgNCAtNiAxMXQtNS41IDEwdC0zIDkuNXQtMS41IDEzLjVxMCAzNSAzMSA3My41dDY4IDY1LjV0NjggNTZ0MzEgNDhxMCA0IC0xNCAzOHQtMTYgNDRxLTkgNTEgLTkgMTA0cTAgMTE1IDQzLjUgMjIwdDExOSAxODQuNSB0MTcwLjUgMTM5dDIwNCA5NS41cTU1IDE4IDE0NSAyNS41dDE3OS41IDl0MTc4LjUgNnQxNjMuNSAyNHQxMTMuNSA1Ni41bDI5LjUgMjkuNXQyOS41IDI4dDI3IDIwdDM2LjUgMTZ0NDMuNSA0LjVxMzkgMCA3MC41IC00NnQ0Ny41IC0xMTJ0MjQgLTEyNHQ4IC05NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ZDsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAtMTYwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDg5NnEwIC03OCAtMjQuNSAtMTQ0dC02NCAtMTEyLjV0LTg3LjUgLTg4dC05NiAtNzcuNXQtODcuNSAtNzJ0LTY0IC04MS41dC0yNC41IC05Ni41cTAgLTk2IDY3IC0yMjRsLTQgMWwxIC0xIHEtOTAgNDEgLTE2MCA4M3QtMTM4LjUgMTAwdC0xMTMuNSAxMjIuNXQtNzIuNSAxNTAuNXQtMjcuNSAxODRxMCA3OCAyNC41IDE0NHQ2NCAxMTIuNXQ4Ny41IDg4dDk2IDc3LjV0ODcuNSA3MnQ2NCA4MS41dDI0LjUgOTYuNXEwIDk0IC02NiAyMjRsMyAtMWwtMSAxcTkwIC00MSAxNjAgLTgzdDEzOC41IC0xMDB0MTEzLjUgLTEyMi41dDcyLjUgLTE1MC41dDI3LjUgLTE4NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA2ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTY2NCA1NzZxLTE1MiAyMzYgLTM4MSAzNTNxNjEgLTEwNCA2MSAtMjI1cTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEyMSA2MSAyMjVxLTIyOSAtMTE3IC0zODEgLTM1M3ExMzMgLTIwNSAzMzMuNSAtMzI2LjV0NDM0LjUgLTEyMS41dDQzNC41IDEyMS41dDMzMy41IDMyNi41ek05NDQgOTYwcTAgMjAgLTE0IDM0dC0zNCAxNHEtMTI1IDAgLTIxNC41IC04OS41IHQtODkuNSAtMjE0LjVxMCAtMjAgMTQgLTM0dDM0IC0xNHQzNCAxNHQxNCAzNHEwIDg2IDYxIDE0N3QxNDcgNjFxMjAgMCAzNCAxNHQxNCAzNHpNMTc5MiA1NzZxMCAtMzQgLTIwIC02OXEtMTQwIC0yMzAgLTM3Ni41IC0zNjguNXQtNDk5LjUgLTEzOC41dC00OTkuNSAxMzl0LTM3Ni41IDM2OHEtMjAgMzUgLTIwIDY5dDIwIDY5cTE0MCAyMjkgMzc2LjUgMzY4dDQ5OS41IDEzOXQ0OTkuNSAtMTM5dDM3Ni41IC0zNjhxMjAgLTM1IDIwIC02OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNTU1IDIwMWw3OCAxNDFxLTg3IDYzIC0xMzYgMTU5dC00OSAyMDNxMCAxMjEgNjEgMjI1cS0yMjkgLTExNyAtMzgxIC0zNTNxMTY3IC0yNTggNDI3IC0zNzV6TTk0NCA5NjBxMCAyMCAtMTQgMzR0LTM0IDE0cS0xMjUgMCAtMjE0LjUgLTg5LjV0LTg5LjUgLTIxNC41cTAgLTIwIDE0IC0zNHQzNCAtMTR0MzQgMTR0MTQgMzRxMCA4NiA2MSAxNDd0MTQ3IDYxcTIwIDAgMzQgMTR0MTQgMzR6TTEzMDcgMTE1MXEwIC03IC0xIC05IHEtMTA1IC0xODggLTMxNSAtNTY2dC0zMTYgLTU2N2wtNDkgLTg5cS0xMCAtMTYgLTI4IC0xNnEtMTIgMCAtMTM0IDcwcS0xNiAxMCAtMTYgMjhxMCAxMiA0NCA4N3EtMTQzIDY1IC0yNjMuNSAxNzN0LTIwOC41IDI0NXEtMjAgMzEgLTIwIDY5dDIwIDY5cTE1MyAyMzUgMzgwIDM3MXQ0OTYgMTM2cTg5IDAgMTgwIC0xN2w1NCA5N3ExMCAxNiAyOCAxNnE1IDAgMTggLTZ0MzEgLTE1LjV0MzMgLTE4LjV0MzEuNSAtMTguNXQxOS41IC0xMS41IHExNiAtMTAgMTYgLTI3ek0xMzQ0IDcwNHEwIC0xMzkgLTc5IC0yNTMuNXQtMjA5IC0xNjQuNWwyODAgNTAycTggLTQ1IDggLTg0ek0xNzkyIDU3NnEwIC0zNSAtMjAgLTY5cS0zOSAtNjQgLTEwOSAtMTQ1cS0xNTAgLTE3MiAtMzQ3LjUgLTI2N3QtNDE5LjUgLTk1bDc0IDEzMnEyMTIgMTggMzkyLjUgMTM3dDMwMS41IDMwN3EtMTE1IDE3OSAtMjgyIDI5NGw2MyAxMTJxOTUgLTY0IDE4Mi41IC0xNTN0MTQ0LjUgLTE4NHEyMCAtMzQgMjAgLTY5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3MTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTAyNCAxNjF2MTkwcTAgMTQgLTkuNSAyMy41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjMuNXYtMTkwcTAgLTE0IDkuNSAtMjMuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIzLjV6TTEwMjIgNTM1bDE4IDQ1OXEwIDEyIC0xMCAxOXEtMTMgMTEgLTI0IDExaC0yMjBxLTExIDAgLTI0IC0xMXEtMTAgLTcgLTEwIC0yMWwxNyAtNDU3cTAgLTEwIDEwIC0xNi41dDI0IC02LjVoMTg1IHExNCAwIDIzLjUgNi41dDEwLjUgMTYuNXpNMTAwOCAxNDY5bDc2OCAtMTQwOHEzNSAtNjMgLTIgLTEyNnEtMTcgLTI5IC00Ni41IC00NnQtNjMuNSAtMTdoLTE1MzZxLTM0IDAgLTYzLjUgMTd0LTQ2LjUgNDZxLTM3IDYzIC0yIDEyNmw3NjggMTQwOHExNyAzMSA0NyA0OXQ2NSAxOHQ2NSAtMTh0NDcgLTQ5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDcyOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMzk3IDEzMjRxMCAtODcgLTE0OSAtMjM2bC0yNDAgLTI0MGwxNDMgLTc0NmwxIC02cTAgLTE0IC05IC0yM2wtNjQgLTY0cS05IC05IC0yMyAtOXEtMjEgMCAtMjkgMThsLTI3NCA1NzVsLTI0NSAtMjQ1cTY4IC0yMzggNjggLTI1MnQtOSAtMjNsLTY0IC02NHEtOSAtOSAtMjMgLTlxLTE4IDAgLTI4IDE2bC0xNTUgMjgwbC0yODAgMTU1cS0xNyA5IC0xNyAyOHEwIDE0IDkgMjNsNjQgNjVxOSA5IDIzIDl0MjUyIC02OGwyNDUgMjQ1IGwtNTc1IDI3NHEtMTggOCAtMTggMjlxMCAxNCA5IDIzbDY0IDY0cTkgOSAyMyA5cTQgMCA2IC0xbDc0NiAtMTQzbDI0MCAyNDBxMTQ5IDE0OSAyMzYgMTQ5cTMyIDAgNTIuNSAtMjAuNXQyMC41IC01Mi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDczOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMjggLTEyOGgyODh2Mjg4aC0yODh2LTI4OHpNNDgwIC0xMjhoMzIwdjI4OGgtMzIwdi0yODh6TTEyOCAyMjRoMjg4djMyMGgtMjg4di0zMjB6TTQ4MCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6TTEyOCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAtMTI4aDMyMHYyODhoLTMyMHYtMjg4ek00ODAgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IC0xMjhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6IE01MTIgMTA4OHYyODhxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTEyNDggMjI0aDI4OHYzMjBoLTI4OHYtMzIwek04NjQgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IDYwOGgyODh2Mjg4aC0yODh2LTI4OHpNMTI4MCAxMDg4djI4OHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTY0IHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTE1MnYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0NyBoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY2NiAxMDU1cS02MCAtOTIgLTEzNyAtMjczcS0yMiA0NSAtMzcgNzIuNXQtNDAuNSA2My41dC01MSA1Ni41dC02MyAzNXQtODEuNSAxNC41aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHEyNTAgMCA0MTAgLTIyNXpNMTc5MiAyNTZxMCAtMTQgLTkgLTIzbC0zMjAgLTMyMHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxLTMyIDAgLTg1IC0wLjV0LTgxIC0xdC03MyAxIHQtNzEgNXQtNjQgMTAuNXQtNjMgMTguNXQtNTggMjguNXQtNTkgNDB0LTU1IDUzLjV0LTU2IDY5LjVxNTkgOTMgMTM2IDI3M3EyMiAtNDUgMzcgLTcyLjV0NDAuNSAtNjMuNXQ1MSAtNTYuNXQ2MyAtMzV0ODEuNSAtMTQuNWgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6TTE3OTIgMTE1MnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41IHYxOTJoLTI1NnEtNDggMCAtODcgLTE1dC02OSAtNDV0LTUxIC02MS41dC00NSAtNzcuNXEtMzIgLTYyIC03OCAtMTcxcS0yOSAtNjYgLTQ5LjUgLTExMXQtNTQgLTEwNXQtNjQgLTEwMHQtNzQgLTgzdC05MCAtNjguNXQtMTA2LjUgLTQydC0xMjggLTE2LjVoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0cTQ4IDAgODcgMTV0NjkgNDV0NTEgNjEuNXQ0NSA3Ny41cTMyIDYyIDc4IDE3MXEyOSA2NiA0OS41IDExMSB0NTQgMTA1dDY0IDEwMHQ3NCA4M3Q5MCA2OC41dDEwNi41IDQydDEyOCAxNi41aDI1NnYxOTJxMCAxNCA5IDIzdDIzIDlxMTIgMCAyNCAtMTBsMzE5IC0zMTlxOSAtOSA5IC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA2NDBxMCAtMTc0IC0xMjAgLTMyMS41dC0zMjYgLTIzM3QtNDUwIC04NS41cS03MCAwIC0xNDUgOHEtMTk4IC0xNzUgLTQ2MCAtMjQycS00OSAtMTQgLTExNCAtMjJxLTE3IC0yIC0zMC41IDl0LTE3LjUgMjl2MXEtMyA0IC0wLjUgMTJ0MiAxMHQ0LjUgOS41bDYgOXQ3IDguNXQ4IDlxNyA4IDMxIDM0LjV0MzQuNSAzOHQzMSAzOS41dDMyLjUgNTF0MjcgNTl0MjYgNzZxLTE1NyA4OSAtMjQ3LjUgMjIwdC05MC41IDI4MSBxMCAxMzAgNzEgMjQ4LjV0MTkxIDIwNC41dDI4NiAxMzYuNXQzNDggNTAuNXEyNDQgMCA0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NjsiIGQ9Ik0xNTM2IDcwNHYtMTI4cTAgLTIwMSAtOTguNSAtMzYydC0yNzQgLTI1MS41dC0zOTUuNSAtOTAuNXQtMzk1LjUgOTAuNXQtMjc0IDI1MS41dC05OC41IDM2MnYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtNTIgMjMuNSAtOTB0NTMuNSAtNTd0NzEgLTMwdDY0IC0xM3Q0NCAtMnQ0NCAydDY0IDEzdDcxIDMwdDUzLjUgNTd0MjMuNSA5MHYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODQgcTI2IDAgNDUgLTE5dDE5IC00NXpNNTEyIDEzNDR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MzYgMTM0NHYtMzg0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA3NzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTYxMSAzMjBxMCAtNTMgLTM3IC05MGwtNzUgLTc1cS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTQ4NiA0ODVsLTQ4NiAtNDg1cS0zNiAtMzggLTkwIC0zOHQtOTAgMzhsLTc1IDc1cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2NTEgNjUxcTM3IDM3IDkwIDM3cTUyIDAgOTEgLTM3bDY1MCAtNjUxcTM4IC0zOCAzOCAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzg7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2MTEgODMycTAgLTUzIC0zNyAtOTBsLTY1MSAtNjUxcS0zOCAtMzggLTkxIC0zOHEtNTQgMCAtOTAgMzhsLTY1MSA2NTFxLTM4IDM2IC0zOCA5MHEwIDUzIDM4IDkxbDc0IDc1cTM5IDM3IDkxIDM3cTUzIDAgOTAgLTM3bDQ4NiAtNDg2bDQ4NiA0ODZxMzcgMzcgOTAgMzdxNTIgMCA5MSAtMzdsNzUgLTc1cTM3IC0zOSAzNyAtOTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwNzk7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgMzJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NjBxLTggMCAtMTMuNSAydC05IDd0LTUuNSA4dC0zIDExLjV0LTEgMTEuNXYxM3YxMXYxNjB2NDE2aC0xOTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDI0IDE1IDQxbDMyMCAzODRxMTkgMjIgNDkgMjJ0NDkgLTIybDMyMCAtMzg0cTE1IC0xNyAxNSAtNDFxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xOTJ2LTM4NGg1NzZxMTYgMCAyNSAtMTFsMTYwIC0xOTJxNyAtMTEgNyAtMjEgek0xOTIwIDQ0OHEwIC0yNCAtMTUgLTQxbC0zMjAgLTM4NHEtMjAgLTIzIC00OSAtMjN0LTQ5IDIzbC0zMjAgMzg0cS0xNSAxNyAtMTUgNDFxMCAyNiAxOSA0NXQ0NSAxOWgxOTJ2Mzg0aC01NzZxLTE2IDAgLTI1IDEybC0xNjAgMTkycS03IDkgLTcgMjBxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxOCAwIDEzLjUgLTJ0OSAtN3Q1LjUgLTh0MyAtMTEuNXQxIC0xMS41di0xM3YtMTF2LTE2MHYtNDE2aDE5MnEyNiAwIDQ1IC0xOXQxOSAtNDV6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdhOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE1MzYgMHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE2NjQgMTA4OHYtNTEycTAgLTI0IC0xNiAtNDIuNXQtNDEgLTIxLjUgbC0xMDQ0IC0xMjJxMSAtNyA0LjUgLTIxLjV0NiAtMjYuNXQyLjUgLTIycTAgLTE2IC0yNCAtNjRoOTIwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTEwMjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDE0IDExIDM5LjV0MjkuNSA1OS41dDIwLjUgMzhsLTE3NyA4MjNoLTIwNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnExNiAwIDI4LjUgLTYuNXQyMCAtMTUuNXQxMyAtMjQuNXQ3LjUgLTI2LjUgdDUuNSAtMjkuNXQ0LjUgLTI1LjVoMTIwMXEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwN2I7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwcTkyIDAgMTU4IC02NnQ2NiAtMTU4di0zMmg2NzJxOTIgMCAxNTggLTY2dDY2IC0xNTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwN2M7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE4NzkgNTg0cTAgLTMxIC0zMSAtNjZsLTMzNiAtMzk2cS00MyAtNTEgLTEyMC41IC04Ni41dC0xNDMuNSAtMzUuNWgtMTA4OHEtMzQgMCAtNjAuNSAxM3QtMjYuNSA0M3EwIDMxIDMxIDY2bDMzNiAzOTZxNDMgNTEgMTIwLjUgODYuNXQxNDMuNSAzNS41aDEwODhxMzQgMCA2MC41IC0xM3QyNi41IC00M3pNMTUzNiA5Mjh2LTE2MGgtODMycS05NCAwIC0xOTcgLTQ3LjV0LTE2NCAtMTE5LjVsLTMzNyAtMzk2bC01IC02cTAgNCAtMC41IDEyLjUgdC0wLjUgMTIuNXY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNTQ0cTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdkOyIgaG9yaXotYWR2LXg9Ijc2OCIgZD0iTTcwNCAxMjE2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0xMDI0aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDEyOHYxMDI0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDdlOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzkyIDY0MHEwIC0yNiAtMTkgLTQ1bC0yNTYgLTI1NnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYxMjhoLTEwMjR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV0MTkgNDVsMjU2IDI1NnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhoMTAyNHYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsMjU2IC0yNTZxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTEyIDUxMnYtMzg0aC0yNTZ2Mzg0aDI1NnpNODk2IDEwMjR2LTg5NmgtMjU2djg5NmgyNTZ6TTEyODAgNzY4di02NDBoLTI1NnY2NDBoMjU2ek0xNjY0IDExNTJ2LTEwMjRoLTI1NnYxMDI0aDI1NnpNMTc5MiAzMnYxMjE2cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTEyMTZxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6IE0xOTIwIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE2MDBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwODE7IiBkPSJNMTI4MCA5NThxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41cS01IDAgLTE1IC00cTIwIDM0IDIwIDU1cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNXEtNyAwIC0xNyAtNXEtNjAgLTM0IC05NyAtNDNxLTY1IDYzIC0xNTQgNjNxLTk4IDAgLTE2NC41IC03Mi41dC02NC41IC0xNjkuNXYtMTJxLTEwNyAxNCAtMTg3LjUgNjR0LTE1Ni41IDEzOXEtMTAgMTIgLTI4IDEycS0yNiAwIC00MSAtNTAuNXQtMTUgLTg2LjVxMCAtNjIgMjkgLTExNyBxLTEzIC0yIC0yMS41IC0xMS41dC04LjUgLTIyLjVxMCAtMTEyIDgxIC0xODVxLTEyIC04IC0xMiAtMjVxMCAtNiAxIC05cTE1IC01MSA1MC41IC05MS41dDg0LjUgLTYwLjVxLTc3IC00MyAtMTY1IC00M3EtOCAwIC0yNCAxLjV0LTIzIDEuNXEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTcgMTQgLTI2cTYzIC00NyAxNTAgLTczLjV0MTcwIC0yNi41cTEzMCAwIDI0OCA1OHExNjYgNzkgMjU2IDIzMi41dDg4IDMzOS41djEyIHEyNyAyMiA2Mi41IDYzdDM1LjUgNjF6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDgyOyIgZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC0zNTBxLTIgMCAtMiAxdjY3MWgxNzdxMzEgMCAzMiAyM2wxMiAxNjRxMiAxNSAtOCAyNXEtMTAgMTIgLTI0IDEyaC0xODl2NzJxMCA0NCAxMS41IDU3dDU0LjUgMTNxNTcgMCAxMTcgLTEzcTEzIC0zIDI2IDVxMTEgOCAxMyAyMmwyMyAxNjZxMiAxMiAtNS41IDIyLjV0LTE5LjUgMTMuNSBxLTkzIDI2IC0xOTcgMjZxLTMxMSAwIC0zMTEgLTI5OXYtODVoLTk1cS0xMyAwIC0yMyAtMTAuNXQtMTAgLTI0LjV2LTE3MnEwIC04IDUuNSAtMTJ0MTAgLTQuNXQxNy41IC0wLjVoOTV2LTY3MWwxMCAtMWgtMzMwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4MzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNOTI4IDcwNHEwIDE0IC05IDIzdC0yMyA5cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzcTAgLTE0IDkgLTIzdDIzIC05dDIzIDl0OSAyM3EwIDQwIDI4IDY4dDY4IDI4cTE0IDAgMjMgOXQ5IDIzek0xMTUyIDU3NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxek0xMjggMGgxNTM2djEyOGgtMTUzNnYtMTI4ek0xMjgwIDU3NHEwIDE1OSAtMTEyLjUgMjcxLjUgdC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXpNMjU2IDEyMTZoMzg0djEyOGgtMzg0di0xMjh6TTEyOCAxMDI0aDE1MzZ2MTE4djEzOGgtODI4bC02NCAtMTI4aC02NDR2LTEyOHpNMTc5MiAxMjgwdi0xMjgwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNTM2cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXYxMjgwIHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjVoMTUzNnE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NDsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODMyIDEwMjRxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZxMCAtNDIgMTkgLTgzcS00MSAxOSAtODMgMTlxLTgwIDAgLTEzNiAtNTZ0LTU2IC0xMzZ0NTYgLTEzNnQxMzYgLTU2dDEzNiA1NnQ1NiAxMzZxMCA0MiAtMTkgODNxNDEgLTE5IDgzIC0xOXE4MCAwIDEzNiA1NnQ1NiAxMzZ6TTE2ODMgMzIwcTAgLTE3IC00OSAtNjZ0LTY2IC00OXEtOSAwIC0yOC41IDE2dC0zNi41IDMzdC0zOC41IDQwdC0yNC41IDI2IGwtOTYgLTk2bDIyMCAtMjIwcTI4IC0yOCAyOCAtNjhxMCAtNDIgLTM5IC04MXQtODEgLTM5cS00MCAwIC02OCAyOGwtNjcxIDY3MXEtMTc2IC0xMzEgLTM2NSAtMTMxcS0xNjMgMCAtMjY1LjUgMTAyLjV0LTEwMi41IDI2NS41cTAgMTYwIDk1IDMxM3QyNDggMjQ4dDMxMyA5NXExNjMgMCAyNjUuNSAtMTAyLjV0MTAyLjUgLTI2NS41cTAgLTE4OSAtMTMxIC0zNjVsMzU1IC0zNTVsOTYgOTZxLTMgMyAtMjYgMjQuNXQtNDAgMzguNXQtMzMgMzYuNSB0LTE2IDI4LjVxMCAxNyA0OSA2NnQ2NiA0OXExMyAwIDIzIC0xMHE2IC02IDQ2IC00NC41dDgyIC03OS41dDg2LjUgLTg2dDczIC03OHQyOC41IC00MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNODk2IDY0MHEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1dDE4MSA3NXQ3NSAxODF6TTE2NjQgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTBxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE2NjQgMTE1MnEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwcTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNSB0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTI4MCA3MzF2LTE4NXEwIC0xMCAtNyAtMTkuNXQtMTYgLTEwLjVsLTE1NSAtMjRxLTExIC0zNSAtMzIgLTc2cTM0IC00OCA5MCAtMTE1cTcgLTEwIDcgLTIwcTAgLTEyIC03IC0xOXEtMjMgLTMwIC04Mi41IC04OS41dC03OC41IC01OS41cS0xMSAwIC0yMSA3bC0xMTUgOTBxLTM3IC0xOSAtNzcgLTMxcS0xMSAtMTA4IC0yMyAtMTU1cS03IC0yNCAtMzAgLTI0aC0xODZxLTExIDAgLTIwIDcuNXQtMTAgMTcuNSBsLTIzIDE1M3EtMzQgMTAgLTc1IDMxbC0xMTggLTg5cS03IC03IC0yMCAtN3EtMTEgMCAtMjEgOHEtMTQ0IDEzMyAtMTQ0IDE2MHEwIDkgNyAxOXExMCAxNCA0MSA1M3Q0NyA2MXEtMjMgNDQgLTM1IDgybC0xNTIgMjRxLTEwIDEgLTE3IDkuNXQtNyAxOS41djE4NXEwIDEwIDcgMTkuNXQxNiAxMC41bDE1NSAyNHExMSAzNSAzMiA3NnEtMzQgNDggLTkwIDExNXEtNyAxMSAtNyAyMHEwIDEyIDcgMjBxMjIgMzAgODIgODl0NzkgNTlxMTEgMCAyMSAtNyBsMTE1IC05MHEzNCAxOCA3NyAzMnExMSAxMDggMjMgMTU0cTcgMjQgMzAgMjRoMTg2cTExIDAgMjAgLTcuNXQxMCAtMTcuNWwyMyAtMTUzcTM0IC0xMCA3NSAtMzFsMTE4IDg5cTggNyAyMCA3cTExIDAgMjEgLThxMTQ0IC0xMzMgMTQ0IC0xNjBxMCAtOSAtNyAtMTlxLTEyIC0xNiAtNDIgLTU0dC00NSAtNjBxMjMgLTQ4IDM0IC04MmwxNTIgLTIzcTEwIC0yIDE3IC0xMC41dDcgLTE5LjV6TTE5MjAgMTk4di0xNDBxMCAtMTYgLTE0OSAtMzEgcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjhxLTIwIC0yIC0zMCAtMnQtMzAgMnEtMTQgLTIxIC01MiAtNjh0LTQ2IC00N3EtMiAwIC0xMjQgNzFxLTQgMyAtNCA3cTAgMjUgNTEgMTM4cS0xOCAyNSAtMzAgNTJxLTE0OSAxNSAtMTQ5IDMxdjE0MHEwIDE2IDE0OSAzMXExMyAyOSAzMCA1MnEtNTEgMTEzIC01MSAxMzhxMCA0IDQgN3E0IDIgMzUgMjAgdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MHE0IC0zIDQgLTdxMCAtMjUgLTUxIC0xMzhxMTcgLTIzIDMwIC01MnExNDkgLTE1IDE0OSAtMzF6TTE5MjAgMTIyMnYtMTQwcTAgLTE2IC0xNDkgLTMxcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjggcS0yMCAtMiAtMzAgLTJ0LTMwIDJxLTE0IC0yMSAtNTIgLTY4dC00NiAtNDdxLTIgMCAtMTI0IDcxcS00IDMgLTQgN3EwIDI1IDUxIDEzOHEtMTggMjUgLTMwIDUycS0xNDkgMTUgLTE0OSAzMXYxNDBxMCAxNiAxNDkgMzFxMTMgMjkgMzAgNTJxLTUxIDExMyAtNTEgMTM4cTAgNCA0IDdxNCAyIDM1IDIwdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MCBxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDg2OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNDA4IDc2OHEwIC0xMzkgLTk0IC0yNTd0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjQgcTAgMTM5IDk0IDI1N3QyNTYuNSAxODYuNXQzNTMuNSA2OC41dDM1My41IC02OC41dDI1Ni41IC0xODYuNXQ5NCAtMjU3ek0xNzkyIDUxMnEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03IHEtNTAgNyAtODYgMTZxLTE1NCA0MCAtMjc4IDEyOHEtOTAgLTE2IC0xNzYgLTE2cS0yNzEgMCAtNDcyIDEzMnE1OCAtNCA4OCAtNHExNjEgMCAzMDkgNDV0MjY0IDEyOXExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4NzsiIGQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtMzUycTAgNTggNDggMTU5LjV0NDggMTYwLjVxMCA5OCAtMzIgMTQ1dC0xMjggNDdxLTI2IC0yNiAtMzggLTg1dC0zMC41IC0xMjUuNXQtNTkuNSAtMTA5LjVxLTIyIC0yMyAtNzcgLTkxcS00IC01IC0yMyAtMzB0LTMxLjUgLTQxdC0zNC41IC00Mi41IHQtNDAgLTQ0dC0zOC41IC0zNS41dC00MCAtMjd0LTM1LjUgLTloLTMydi02NDBoMzJxMTMgMCAzMS41IC0zdDMzIC02LjV0MzggLTExdDM1IC0xMS41dDM1LjUgLTEyLjV0MjkgLTEwLjVxMjExIC03MyAzNDIgLTczaDEyMXExOTIgMCAxOTIgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVxMzIgMSA1My41IDQ3dDIxLjUgODF6TTE1MzYgNzY5IHEwIC04OSAtNDkgLTE2M3E5IC0zMyA5IC02OXEwIC03NyAtMzggLTE0NHEzIC0yMSAzIC00M3EwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNWgtMzZoLTkzcS05NiAwIC0xODkuNSAyMi41dC0yMTYuNSA2NS41cS0xMTYgNDAgLTEzOCA0MGgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI3NHEzNiAyNCAxMzcgMTU1cTU4IDc1IDEwNyAxMjggcTI0IDI1IDM1LjUgODUuNXQzMC41IDEyNi41dDYyIDEwOHEzOSAzNyA5MCAzN3E4NCAwIDE1MSAtMzIuNXQxMDIgLTEwMS41dDM1IC0xODZxMCAtOTMgLTQ4IC0xOTJoMTc2cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ODsiIGQ9Ik0yNTYgMTA4OHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNTEycTAgMzUgLTIxLjUgODF0LTUzLjUgNDdxMTUgMTcgMjUgNDcuNXQxMCA1NS41cTAgNjkgLTUzIDExOXExOCAzMiAxOCA2OXQtMTcuNSA3My41dC00Ny41IDUyLjVxNSAzMCA1IDU2cTAgODUgLTQ5IDEyNnQtMTM2IDQxaC0xMjhxLTEzMSAwIC0zNDIgLTczcS01IC0yIC0yOSAtMTAuNSB0LTM1LjUgLTEyLjV0LTM1IC0xMS41dC0zOCAtMTF0LTMzIC02LjV0LTMxLjUgLTNoLTMydi02NDBoMzJxMTYgMCAzNS41IC05dDQwIC0yN3QzOC41IC0zNS41dDQwIC00NHQzNC41IC00Mi41dDMxLjUgLTQxdDIzIC0zMHE1NSAtNjggNzcgLTkxcTQxIC00MyA1OS41IC0xMDkuNXQzMC41IC0xMjUuNXQzOCAtODVxOTYgMCAxMjggNDd0MzIgMTQ1cTAgNTkgLTQ4IDE2MC41dC00OCAxNTkuNWgzNTJxNTAgMCA4OSAzOC41dDM5IDg5LjV6IE0xNTM2IDUxMXEwIC0xMDMgLTc2IC0xNzl0LTE4MCAtNzZoLTE3NnE0OCAtOTkgNDggLTE5MnEwIC0xMTggLTM1IC0xODZxLTM1IC02OSAtMTAyIC0xMDEuNXQtMTUxIC0zMi41cS01MSAwIC05MCAzN3EtMzQgMzMgLTU0IDgydC0yNS41IDkwLjV0LTE3LjUgODQuNXQtMzEgNjRxLTQ4IDUwIC0xMDcgMTI3cS0xMDEgMTMxIC0xMzcgMTU1aC0yNzRxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djY0MHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjUgaDI4OHEyMiAwIDEzOCA0MHExMjggNDQgMjIzIDY2dDIwMCAyMmgxMTJxMTQwIDAgMjI2LjUgLTc5dDg1LjUgLTIxNnYtNXE2MCAtNzcgNjAgLTE3OHEwIC0yMiAtMyAtNDNxMzggLTY3IDM4IC0xNDRxMCAtMzYgLTkgLTY5cTQ5IC03NCA0OSAtMTYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDg5OyIgaG9yaXotYWR2LXg9Ijg5NiIgZD0iTTgzMiAxNTA0di0xMzM5bC00NDkgLTIzNnEtMjIgLTEyIC00MCAtMTJxLTIxIDAgLTMxLjUgMTQuNXQtMTAuNSAzNS41cTAgNiAyIDIwbDg2IDUwMGwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgOTQwcTAgODEgLTIxLjUgMTQzdC01NSA5OC41dC04MS41IDU5LjV0LTk0IDMxdC05OCA4dC0xMTIgLTI1LjV0LTExMC41IC02NHQtODYuNSAtNzJ0LTYwIC02MS41cS0xOCAtMjIgLTQ5IC0yMnQtNDkgMjJxLTI0IDI4IC02MCA2MS41dC04Ni41IDcydC0xMTAuNSA2NHQtMTEyIDI1LjV0LTk4IC04dC05NCAtMzF0LTgxLjUgLTU5LjV0LTU1IC05OC41dC0yMS41IC0xNDNxMCAtMTY4IDE4NyAtMzU1bDU4MSAtNTYwbDU4MCA1NTkgcTE4OCAxODggMTg4IDM1NnpNMTc5MiA5NDBxMCAtMjIxIC0yMjkgLTQ1MGwtNjIzIC02MDBxLTE4IC0xOCAtNDQgLTE4dC00NCAxOGwtNjI0IDYwMnEtMTAgOCAtMjcuNSAyNnQtNTUuNSA2NS41dC02OCA5Ny41dC01My41IDEyMXQtMjMuNSAxMzhxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUgLTIxLjV0MTIwIC01OHQ5NS41IC02OC41dDc2IC02OHEzNiAzNiA3NiA2OHQ5NS41IDY4LjV0MTIwIDU4dDEyNi41IDIxLjUgcTIyNCAwIDM1MSAtMTI0dDEyNyAtMzQ0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgOTZxMCAtNCAxIC0yMHQwLjUgLTI2LjV0LTMgLTIzLjV0LTEwIC0xOS41dC0yMC41IC02LjVoLTMyMHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2NzA0cTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41cTAgLTQgMSAtMjB0MC41IC0yNi41dC0zIC0yMy41dC0xMCAtMTkuNXQtMjAuNSAtNi41aC0zMjBxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTcwNCBxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDI4OGgxMWgxM3QxMS41IC0xdDExLjUgLTN0OCAtNS41dDcgLTl0MiAtMTMuNXpNMTU2OCA2NDBxMCAtMjYgLTE5IC00NWwtNTQ0IC01NDRxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2Mjg4aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWg0NDh2Mjg4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDU0NCAtNTQ0cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOGM7IiBkPSJNNTEyIDE2MHY2NDBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NDBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNNTAzIDEwMjhxMCA1MSAtMzYgODcuNXQtODggMzYuNXEtNTEgMCAtODcgLTM2LjV0LTM2IC04Ny41dDM2IC04Ny41dDg3IC0zNi41cTUyIDAgODggMzYuNXQzNiA4Ny41ek0xMjgwIDE2MHY0MzUgcTAgMTI3IC03My41IDE5Mi41dC0yMDIuNSA2NS41cS05MCAwIC0xNTggLTQ1cS0xMiAtOCAtMTQgLTEycTAgMzYgLTM1IDM2aC0xNzZxLTE0IDAgLTI5LjUgLTcuNXQtMTUuNSAtMjAuNXYtNjQ0cTAgLTEzIDE1LjUgLTIyLjV0MjkuNSAtOS41aDE4MnExMiAwIDIwLjUgOS41dDguNSAyMi41djM0OXEwIDE0MCAxMTQgMTQwcTQ5IDAgNjMuNSAtMjIuNXQxNC41IC03My41di0zOTNxMCAtMTMgMTIgLTIyLjV0MjYgLTkuNWgxODYgcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDhkOyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik00ODAgNjcydjQ0OHEwIDE0IC05IDIzdC0yMyA5dC0yMyAtOXQtOSAtMjN2LTQ0OHEwIC0xNCA5IC0yM3QyMyAtOXQyMyA5dDkgMjN6TTExNTIgMzIwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDI5bC01MSAtNDgzcS0yIC0xMiAtMTAuNSAtMjAuNXQtMjAuNSAtOC41aC0xcS0yNyAwIC0zMiAyN2wtNzYgNDg1aC00MDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDEyMyA3OC41IDIyMS41dDE3Ny41IDk4LjV2NTEycS01MiAwIC05MCAzOCB0LTM4IDkwdDM4IDkwdDkwIDM4aDY0MHE1MiAwIDkwIC0zOHQzOCAtOTB0LTM4IC05MHQtOTAgLTM4di01MTJxOTkgMCAxNzcuNSAtOTguNXQ3OC41IC0yMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA4ZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTQwOCA2MDh2LTMyMHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDcwNHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YzMjAgcTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTQ3MnYtNTEycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTE3NiAxNzZsLTY1MiAtNjUycS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTExNCAxMTRxLTEwIDEwIC0xMCAyM3QxMCAyM2w2NTIgNjUybC0xNzYgMTc2cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloNTEycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MDsiIGQ9Ik0xMTg0IDY0MHEwIC0yNiAtMTkgLTQ1bC01NDQgLTU0NHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyODhoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHYyODhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNTQ0IC01NDRxMTkgLTE5IDE5IC00NXpNMTUzNiA5OTJ2LTcwNHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtMzIwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjUgcTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTY2IDAgMTEzIDQ3dDQ3IDExM3Y3MDRxMCA2NiAtNDcgMTEzdC0xMTMgNDdoLTI4OGgtMTFoLTEzdC0xMS41IDF0LTExLjUgM3QtOCA1LjV0LTcgOXQtMiAxMy41cTAgNCAtMSAyMHQtMC41IDI2LjV0MyAyMy41dDEwIDE5LjV0MjAuNSA2LjVoMzIwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDkxOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik00NTggNjUzcS03NCAxNjIgLTc0IDM3MWgtMjU2di05NnEwIC03OCA5NC41IC0xNjJ0MjM1LjUgLTExM3pNMTUzNiA5Mjh2OTZoLTI1NnEwIC0yMDkgLTc0IC0zNzFxMTQxIDI5IDIzNS41IDExM3Q5NC41IDE2MnpNMTY2NCAxMDU2di0xMjhxMCAtNzEgLTQxLjUgLTE0M3QtMTEyIC0xMzB0LTE3MyAtOTcuNXQtMjE1LjUgLTQ0LjVxLTQyIC01NCAtOTUgLTk1cS0zOCAtMzQgLTUyLjUgLTcyLjV0LTE0LjUgLTg5LjVxMCAtNTQgMzAuNSAtOTEgdDk3LjUgLTM3cTc1IDAgMTMzLjUgLTQ1LjV0NTguNSAtMTE0LjV2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDY5IDU4LjUgMTE0LjV0MTMzLjUgNDUuNXE2NyAwIDk3LjUgMzd0MzAuNSA5MXEwIDUxIC0xNC41IDg5LjV0LTUyLjUgNzIuNXEtNTMgNDEgLTk1IDk1cS0xMTMgNSAtMjE1LjUgNDQuNXQtMTczIDk3LjV0LTExMiAxMzB0LTQxLjUgMTQzdjEyOHEwIDQwIDI4IDY4dDY4IDI4aDI4OHY5NiBxMCA2NiA0NyAxMTN0MTEzIDQ3aDU3NnE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMjg4cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MjsiIGQ9Ik01ODIgMjI4cTAgLTY2IC05MyAtNjZxLTEwNyAwIC0xMDcgNjNxMCA2NCA5OCA2NHExMDIgMCAxMDIgLTYxek01NDYgNjk0cTAgLTg1IC03NCAtODVxLTc3IDAgLTc3IDg0cTAgOTAgNzcgOTBxMzYgMCA1NSAtMjZ0MTkgLTYzek03MTIgNzY5djEyNXEtNzggLTI5IC0xMzUgLTI5cS01MCAyOSAtMTEwIDI5cS04NiAwIC0xNDUgLTU3dC01OSAtMTQzcTAgLTUwIDI5LjUgLTEwMnQ3My41IC02N3YtM3EtMzggLTE3IC0zOCAtODUgcTAgLTUyIDQxIC03N3YtM3EtMTEzIC0zNyAtMTEzIC0xMzlxMCAtNjAgMzYgLTk4dDg0IC01MXQxMDcgLTEzcTIyNCAwIDIyNCAxODdxMCA0OCAtMjUuNSA3OHQtNjIuNSA0Mi41dC03NCAyMS41dC02Mi41IDIzLjV0LTI1LjUgMzkuNXEwIDQ0IDQ5IDUycTc3IDE1IDEyMiA3MHQ0NSAxMzRxMCAyNCAtMTAgNTJxMzAgNyA0OSAxM3pNNzcxIDM1MGgxMzdxLTIgMjAgLTIgOTB2MzcycTAgNTkgMiA3NmgtMTM3cTMgLTI2IDMgLTc5di0zNzcgcTAgLTU1IC0zIC04MnpNMTI4MCAzNjZ2MTIxcS0zMCAtMjEgLTY4IC0yMXEtNTMgMCAtNTMgODJ2MjI1aDUycTkgMCAyNi41IC0xdDI2LjUgLTF2MTE3aC0xMDVxMCA4MiAzIDEwMmgtMTQwcTQgLTI0IDQgLTU1di00N2gtNjB2LTExN3EzNiAzIDM3IDNxNCAwIDExLjUgLTAuNXQxMS41IC0wLjV2LTJoLTJ2LTIxN3EwIC0zNyAyLjUgLTY0dDExLjUgLTU2LjV0MjQuNSAtNDguNXQ0My41IC0zMXQ2NiAtMTJxNjQgMCAxMDggMjR6TTkyNCAxMDcyIHEwIDM2IC0yNCA2My41dC02MCAyNy41dC02MC41IC0yN3QtMjQuNSAtNjRxMCAtMzYgMjUgLTYyLjV0NjAgLTI2LjV0NTkuNSAyN3QyNC41IDYyek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5MzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTY2NCA0ODB2LTU3NnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE2MDBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY1NzZxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0zNTJoMTE1MnYzNTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMzQ0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnYtNDQ4IHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OGgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5NDsiIGQ9Ik0xNDA3IDcxMHEwIDQ0IC03IDExMy41dC0xOCA5Ni41cS0xMiAzMCAtMTcgNDR0LTkgMzYuNXQtNCA0OC41cTAgMjMgNSA2OC41dDUgNjcuNXEwIDM3IC0xMCA1NXEtNCAxIC0xMyAxcS0xOSAwIC01OCAtNC41dC01OSAtNC41cS02MCAwIC0xNzYgMjR0LTE3NSAyNHEtNDMgMCAtOTQuNSAtMTEuNXQtODUgLTIzLjV0LTg5LjUgLTM0cS0xMzcgLTU0IC0yMDIgLTEwM3EtOTYgLTczIC0xNTkuNSAtMTg5LjV0LTg4IC0yMzZ0LTI0LjUgLTI0OC41IHEwIC00MCAxMi41IC0xMjB0MTIuNSAtMTIxcTAgLTIzIC0xMSAtNjYuNXQtMTEgLTY1LjV0MTIgLTM2LjV0MzQgLTE0LjVxMjQgMCA3Mi41IDExdDczLjUgMTFxNTcgMCAxNjkuNSAtMTUuNXQxNjkuNSAtMTUuNXExODEgMCAyODQgMzZxMTI5IDQ1IDIzNS41IDE1Mi41dDE2NiAyNDUuNXQ1OS41IDI3NXpNMTUzNSA3MTJxMCAtMTY1IC03MCAtMzI3LjV0LTE5NiAtMjg4dC0yODEgLTE4MC41cS0xMjQgLTQ0IC0zMjYgLTQ0IHEtNTcgMCAtMTcwIDE0LjV0LTE2OSAxNC41cS0yNCAwIC03Mi41IC0xNC41dC03My41IC0xNC41cS03MyAwIC0xMjMuNSA1NS41dC01MC41IDEyOC41cTAgMjQgMTEgNjh0MTEgNjdxMCA0MCAtMTIuNSAxMjAuNXQtMTIuNSAxMjEuNXEwIDExMSAxOCAyMTcuNXQ1NC41IDIwOS41dDEwMC41IDE5NHQxNTAgMTU2cTc4IDU5IDIzMiAxMjBxMTk0IDc4IDMxNiA3OHE2MCAwIDE3NS41IC0yNHQxNzMuNSAtMjRxMTkgMCA1NyA1dDU4IDUgcTgxIDAgMTE4IC01MC41dDM3IC0xMzQuNXEwIC0yMyAtNSAtNjh0LTUgLTY4cTAgLTEwIDEgLTE4LjV0MyAtMTd0NCAtMTMuNXQ2LjUgLTE2dDYuNSAtMTdxMTYgLTQwIDI1IC0xMTguNXQ5IC0xMzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5NTsiIGhvcml6LWFkdi14PSIxNDA4IiBkPSJNMTQwOCAyOTZxMCAtMjcgLTEwIC03MC41dC0yMSAtNjguNXEtMjEgLTUwIC0xMjIgLTEwNnEtOTQgLTUxIC0xODYgLTUxcS0yNyAwIC01Mi41IDMuNXQtNTcuNSAxMi41dC00Ny41IDE0LjV0LTU1LjUgMjAuNXQtNDkgMThxLTk4IDM1IC0xNzUgODNxLTEyOCA3OSAtMjY0LjUgMjE1LjV0LTIxNS41IDI2NC41cS00OCA3NyAtODMgMTc1cS0zIDkgLTE4IDQ5dC0yMC41IDU1LjV0LTE0LjUgNDcuNXQtMTIuNSA1Ny41dC0zLjUgNTIuNSBxMCA5MiA1MSAxODZxNTYgMTAxIDEwNiAxMjJxMjUgMTEgNjguNSAyMXQ3MC41IDEwcTE0IDAgMjEgLTNxMTggLTYgNTMgLTc2cTExIC0xOSAzMCAtNTR0MzUgLTYzLjV0MzEgLTUzLjVxMyAtNCAxNy41IC0yNXQyMS41IC0zNS41dDcgLTI4LjVxMCAtMjAgLTI4LjUgLTUwdC02MiAtNTV0LTYyIC01M3QtMjguNSAtNDZxMCAtOSA1IC0yMi41dDguNSAtMjAuNXQxNCAtMjR0MTEuNSAtMTlxNzYgLTEzNyAxNzQgLTIzNXQyMzUgLTE3NCBxMiAtMSAxOSAtMTEuNXQyNCAtMTR0MjAuNSAtOC41dDIyLjUgLTVxMTggMCA0NiAyOC41dDUzIDYydDU1IDYydDUwIDI4LjVxMTQgMCAyOC41IC03dDM1LjUgLTIxLjV0MjUgLTE3LjVxMjUgLTE1IDUzLjUgLTMxdDYzLjUgLTM1dDU0IC0zMHE3MCAtMzUgNzYgLTUzcTMgLTcgMyAtMjF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTY7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTExMjAgMTI4MGgtODMycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2ODMycTAgNjYgLTQ3IDExM3QtMTEzIDQ3ek0xNDA4IDExMjB2LTgzMnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMiBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOTc7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTExNTIgMTI4MGgtMTAyNHYtMTI0Mmw0MjMgNDA2bDg5IDg1bDg5IC04NWw0MjMgLTQwNnYxMjQyek0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5IHEwIDM0IDE5LjUgNjJ0NTIuNSA0MXEyMSA5IDQ0IDloMTA0OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5ODsiIGQ9Ik0xMjgwIDM0M3EwIDExIC0yIDE2cS0zIDggLTM4LjUgMjkuNXQtODguNSA0OS41bC01MyAyOXEtNSAzIC0xOSAxM3QtMjUgMTV0LTIxIDVxLTE4IDAgLTQ3IC0zMi41dC01NyAtNjUuNXQtNDQgLTMzcS03IDAgLTE2LjUgMy41dC0xNS41IDYuNXQtMTcgOS41dC0xNCA4LjVxLTk5IDU1IC0xNzAuNSAxMjYuNXQtMTI2LjUgMTcwLjVxLTIgMyAtOC41IDE0dC05LjUgMTd0LTYuNSAxNS41dC0zLjUgMTYuNXEwIDEzIDIwLjUgMzMuNXQ0NSAzOC41IHQ0NSAzOS41dDIwLjUgMzYuNXEwIDEwIC01IDIxdC0xNSAyNXQtMTMgMTlxLTMgNiAtMTUgMjguNXQtMjUgNDUuNXQtMjYuNSA0Ny41dC0yNSA0MC41dC0xNi41IDE4dC0xNiAycS00OCAwIC0xMDEgLTIycS00NiAtMjEgLTgwIC05NC41dC0zNCAtMTMwLjVxMCAtMTYgMi41IC0zNHQ1IC0zMC41dDkgLTMzdDEwIC0yOS41dDEyLjUgLTMzdDExIC0zMHE2MCAtMTY0IDIxNi41IC0zMjAuNXQzMjAuNSAtMjE2LjVxNiAtMiAzMCAtMTF0MzMgLTEyLjUgdDI5LjUgLTEwdDMzIC05dDMwLjUgLTV0MzQgLTIuNXE1NyAwIDEzMC41IDM0dDk0LjUgODBxMjIgNTMgMjIgMTAxek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5OTsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNMTg3NSAxMjAycTAgLTEwIC01IC0xOHEtNjQgLTEwNCAtMTc5IC0xOTB2LTMzcTQgLTIyNyAtMTAwIC00NTdxLTEzNCAtMjk3IC0zOTcuNSAtNDY0LjV0LTU5MS41IC0xNjcuNXEtMjY1IDAgLTUwMCAxMjJxLTY0IDMzIC04NyA1MHEtMTUgMTIgLTE1IDI3cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVxMTQgMCA0NCAtMi41dDQ1IC0yLjVxMjA0IDAgMzc1IDEwNnEtMTAzIDI0IC0xODEgOTZ0LTExMSAxNzNxLTIgOCAtMiAxMXEwIDEyIDkgMjEuNSB0MjIgOS41cTUgMCAxNCAtMnQxMiAtMnEtODkgNTUgLTE0MiAxNDd0LTUzIDE5NnEwIDE1IDExLjUgMjUuNXQyNy41IDEwLjVxMTAgMCAzNSAtMTEuNXQzMCAtMTMuNXEtOTIgMTEwIC05MiAyNTZxMCA1MSAxNC41IDEwOHQ0MC41IDk1cTEwIDE2IDI1IDE2cTE2IDAgMjcgLTEycTc2IC04NCAxMTAgLTExNXExMjMgLTExMSAyNzYgLTE3Ny41dDMxNyAtODAuNXEtNCAyMSAtNCA0OXEwIDE2NyAxMTguNSAyODUuNXQyODUuNSAxMTguNSBxMTYzIDAgMjgyIC0xMTRxOTUgMjAgMjA5IDgycTggNSAxNiA1cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXEwIC0yNCAtMjggLTczdC01MSAtNzZxNyAyIDMwIDEwLjV0NDMgMTZ0MjQgNy41cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YTsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik01NjAgMTEyNXEtNDkgMCAtNjIgLTE1LjV0LTEzIC02Ni41di04OGgyMTdxMTYgMCAyNyAtMTJxMTEgLTEzIDEwIC0yOWwtMTQgLTIwMHEtMiAtMTUgLTEyLjUgLTI1LjV0LTI1LjUgLTEwLjVoLTIwMnYtNzY4cTAgLTE2IC0xMSAtMjd0LTI2IC0xMWgtMjUwcS0xNiAwIC0yNyAxMXQtMTEgMjd2NzY4aC0xMjJxLTE2IDAgLTI3IDExLjV0LTExIDI3LjV2MjAwcTAgMTYgMTEgMjd0MjcgMTFoMTIydjEwM3EwIDE3NyA4OCAyNjMuNSB0MjY3IDg2LjVxMTIwIDAgMjI1IC0zMHExNCAtNCAyMiAtMTZ0NiAtMjZsLTI3IC0xOTVxLTIgLTE2IC0xNiAtMjZxLTE0IC05IC0zMCAtNnEtNzYgMTYgLTEzNSAxNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjA5YjsiIGQ9Ik0xNDA4IDY0MHEwIDEzMCAtNTEgMjQ4LjV0LTEzNi41IDIwNHQtMjA0IDEzNi41dC0yNDguNSA1MXQtMjQ4LjUgLTUxdC0yMDQgLTEzNi41dC0xMzYuNSAtMjA0dC01MSAtMjQ4LjVxMCAtMjA5IDEyNC41IC0zNzguNXQzMjMuNSAtMjMxLjV2MTY5cS01NCAtNyAtNjkgLTdxLTExMCAwIC0xNTMgMTAwcS0xNSAzOCAtMzYgNjNxLTUgNiAtMjEgMTl0LTI4LjUgMjR0LTEyLjUgMTZxMCAxMiAyOCAxMnEyOSAwIDUxLjUgLTE0LjV0MzggLTM1IHQzMS41IC00MS41dDQwLjUgLTM1LjV0NTYuNSAtMTQuNXE0MiAwIDgxIDE0cTE2IDU3IDYzIDg5cS0xNjYgMTYgLTI0NiA4My41dC04MCAyMjQuNXEwIDExOCA3MyAxOThxLTE0IDQyIC0xNCA4NHEwIDU4IDI3IDEwOXE1NyAwIDEwMSAtMTkuNXQxMDEgLTYwLjVxNzYgMTggMTY5IDE4cTgwIDAgMTUzIC0xNnE1NyA0MCAxMDAuNSA1OXQ5OS41IDE5cTI3IC01MSAyNyAtMTA5cTAgLTQzIC0xNCAtODNxNzMgLTgyIDczIC0xOTkgcTAgLTE1NyAtODAgLTIyNS41dC0yNDUgLTgzLjVxNjkgLTQ3IDY5IC0xMzF2LTIyNnExOTkgNjIgMzIzLjUgMjMxLjV0MTI0LjUgMzc4LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDljOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik03MDQgMTYwcTAgNiAtMTUgNTd0LTM1IDExNS41dC0yMCA2NS41cTMyIDE2IDUxIDQ3dDE5IDY3cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41cTAgLTM2IDE5IC02Ni41dDUxIC00Ny41cTAgLTIgLTIwIC02NnQtMzUgLTExNXQtMTUgLTU3cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgOTYwdi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5IGgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4di01NzZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHY1NzZxMCA0MCAyOCA2OHQ2OCAyOGg2NzJ2MTkycTAgMTg1IDEzMS41IDMxNi41dDMxNi41IDEzMS41dDMxNi41IC0xMzEuNXQxMzEuNSAtMzE2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwOWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE3NjAgMTQwOHE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTYwMHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHpNMTYwIDEyODBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0yMjRoMTY2NHYyMjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwek0xNzYwIDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY2MDhoLTE2NjR2LTYwOCBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwek0yNTYgMTI4djEyOGgyNTZ2LTEyOGgtMjU2ek02NDAgMTI4djEyOGgzODR2LTEyOGgtMzg0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMDllOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNODk2IDY5cTIgLTI4IC0xNyAtNDhxLTE4IC0yMSAtNDcgLTIxaC0xMzVxLTI1IDAgLTQzIDE2LjV0LTIwIDQxLjVxLTIyIDIyOSAtMTg0LjUgMzkxLjV0LTM5MS41IDE4NC41cS0yNSAyIC00MS41IDIwdC0xNi41IDQzdjEzNXEwIDI5IDIxIDQ3cTE3IDE3IDQzIDE3aDVxMTYwIC0xMyAzMDYgLTgwLjUgdDI1OSAtMTgxLjVxMTE0IC0xMTMgMTgxLjUgLTI1OXQ4MC41IC0zMDZ6TTE0MDggNjdxMiAtMjcgLTE4IC00N3EtMTggLTIwIC00NiAtMjBoLTE0M3EtMjYgMCAtNDQuNSAxNy41dC0xOS41IDQyLjVxLTEyIDIxNSAtMTAxIDQwOC41dC0yMzEuNSAzMzZ0LTMzNiAyMzEuNXQtNDA4LjUgMTAycS0yNSAxIC00Mi41IDE5LjV0LTE3LjUgNDMuNXYxNDNxMCAyOCAyMCA0NnExOCAxOCA0NCAxOGgzcTI2MiAtMTMgNTAxLjUgLTEyMHQ0MjUuNSAtMjk0IHExODcgLTE4NiAyOTQgLTQyNS41dDEyMCAtNTAxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTA7IiBkPSJNMTA0MCAzMjBxMCAtMzMgLTIzLjUgLTU2LjV0LTU2LjUgLTIzLjV0LTU2LjUgMjMuNXQtMjMuNSA1Ni41dDIzLjUgNTYuNXQ1Ni41IDIzLjV0NTYuNSAtMjMuNXQyMy41IC01Ni41ek0xMjk2IDMyMHEwIC0zMyAtMjMuNSAtNTYuNXQtNTYuNSAtMjMuNXQtNTYuNSAyMy41dC0yMy41IDU2LjV0MjMuNSA1Ni41dDU2LjUgMjMuNXQ1Ni41IC0yMy41dDIzLjUgLTU2LjV6TTE0MDggMTYwdjMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUgaC0xMjE2cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTIxNnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzggNjQwaDExODBsLTE1NyA0ODJxLTQgMTMgLTE2IDIxLjV0LTI2IDguNWgtNzgycS0xNCAwIC0yNiAtOC41dC0xNiAtMjEuNXpNMTUzNiA0ODB2LTMyMHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTIxNnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MzIwcTAgMjUgMTYgNzUgbDE5NyA2MDZxMTcgNTMgNjMgODZ0MTAxIDMzaDc4MnE1NSAwIDEwMSAtMzN0NjMgLTg2bDE5NyAtNjA2cTE2IC01MCAxNiAtNzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE2NjQgODk2cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41dC0zNy41IC05MC41dC05MC41IC0zNy41di0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS00MTcgMzQ3IC04MTIgMzgwcS01OCAtMTkgLTkxIC02NnQtMzEgLTEwMC41dDQwIC05Mi41cS0yMCAtMzMgLTIzIC02NS41dDYgLTU4dDMzLjUgLTU1dDQ4IC01MHQ2MS41IC01MC41cS0yOSAtNTggLTExMS41IC04M3QtMTY4LjUgLTExLjV0LTEzMiA1NS41cS03IDIzIC0yOS41IDg3LjUgdC0zMiA5NC41dC0yMyA4OXQtMTUgMTAxdDMuNSA5OC41dDIyIDExMC41aC0xMjJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjE5MnEwIDY2IDQ3IDExM3QxMTMgNDdoNDgwcTQzNSAwIDg5NiAzODRxNTIgMCA5MCAtMzh0MzggLTkwdi0zODR6TTE1MzYgMjkydjk1NHEtMzk0IC0zMDIgLTc2OCAtMzQzdi0yNzBxMzc3IC00MiA3NjggLTM0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhMjsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODQ4IC0xNjBxMCAxNiAtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXExNiAwIDE2IDE2ek0xODMgMTI4aDEyOThxLTE2NCAxODEgLTI0Ni41IDQxMS41dC04Mi41IDQ4NC41cTAgMjU2IC0zMjAgMjU2dC0zMjAgLTI1NnEwIC0yNTQgLTgyLjUgLTQ4NC41dC0yNDYuNSAtNDExLjV6TTE2NjQgMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOCBoLTQ0OHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC00NDhxLTUyIDAgLTkwIDM4dC0zOCA5MHExOTAgMTYxIDI4NyAzOTcuNXQ5NyA0OTguNXEwIDE2NSA5NiAyNjJ0MjY0IDExN3EtOCAxOCAtOCAzN3EwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMTkgLTggLTM3cTE2OCAtMjAgMjY0IC0xMTd0OTYgLTI2MnEwIC0yNjIgOTcgLTQ5OC41dDI4NyAtMzk3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTM7IiBkPSJNMTM3NiA2NDBsMTM4IC0xMzVxMzAgLTI4IDIwIC03MHEtMTIgLTQxIC01MiAtNTFsLTE4OCAtNDhsNTMgLTE4NnExMiAtNDEgLTE5IC03MHEtMjkgLTMxIC03MCAtMTlsLTE4NiA1M2wtNDggLTE4OHEtMTAgLTQwIC01MSAtNTJxLTEyIC0yIC0xOSAtMnEtMzEgMCAtNTEgMjJsLTEzNSAxMzhsLTEzNSAtMTM4cS0yOCAtMzAgLTcwIC0yMHEtNDEgMTEgLTUxIDUybC00OCAxODhsLTE4NiAtNTNxLTQxIC0xMiAtNzAgMTlxLTMxIDI5IC0xOSA3MCBsNTMgMTg2bC0xODggNDhxLTQwIDEwIC01MiA1MXEtMTAgNDIgMjAgNzBsMTM4IDEzNWwtMTM4IDEzNXEtMzAgMjggLTIwIDcwcTEyIDQxIDUyIDUxbDE4OCA0OGwtNTMgMTg2cS0xMiA0MSAxOSA3MHEyOSAzMSA3MCAxOWwxODYgLTUzbDQ4IDE4OHExMCA0MSA1MSA1MXE0MSAxMiA3MCAtMTlsMTM1IC0xMzlsMTM1IDEzOXEyOSAzMCA3MCAxOXE0MSAtMTAgNTEgLTUxbDQ4IC0xODhsMTg2IDUzcTQxIDEyIDcwIC0xOXEzMSAtMjkgMTkgLTcwIGwtNTMgLTE4NmwxODggLTQ4cTQwIC0xMCA1MiAtNTFxMTAgLTQyIC0yMCAtNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTI1NiAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNjY0IDc2OHEwIDUxIC0zOSA4OS41dC04OSAzOC41aC01NzZxMCAyMCAxNSA0OC41dDMzIDU1dDMzIDY4dDE1IDg0LjVxMCA2NyAtNDQuNSA5Ny41dC0xMTUuNSAzMC41cS0yNCAwIC05MCAtMTM5cS0yNCAtNDQgLTM3IC02NXEtNDAgLTY0IC0xMTIgLTE0NXEtNzEgLTgxIC0xMDEgLTEwNiBxLTY5IC01NyAtMTQwIC01N2gtMzJ2LTY0MGgzMnE3MiAwIDE2NyAtMzJ0MTkzLjUgLTY0dDE3OS41IC0zMnExODkgMCAxODkgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVoMzMxcTUyIDAgOTAgMzh0MzggOTB6TTE3OTIgNzY5cTAgLTEwNSAtNzUuNSAtMTgxdC0xODAuNSAtNzZoLTE2OXEtNCAtNjIgLTM3IC0xMTlxMyAtMjEgMyAtNDMgcTAgLTEwMSAtNjAgLTE3OHExIC0xMzkgLTg1IC0yMTkuNXQtMjI3IC04MC41cS0xMzMgMCAtMzIyIDY5cS0xNjQgNTkgLTIyMyA1OWgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI4OHExMCAwIDIxLjUgNC41dDIzLjUgMTR0MjIuNSAxOHQyNCAyMi41dDIwLjUgMjEuNXQxOSAyMS41dDE0IDE3cTY1IDc0IDEwMCAxMjlxMTMgMjEgMzMgNjJ0MzcgNzJ0NDAuNSA2M3Q1NSA0OS41IHQ2OS41IDE3LjVxMTI1IDAgMjA2LjUgLTY3dDgxLjUgLTE4OXEwIC02OCAtMjIgLTEyOGgzNzRxMTA0IDAgMTgwIC03NnQ3NiAtMTc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE1OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xMzc2IDEyOGgzMnY2NDBoLTMycS0zNSAwIC02NyAxMS41dC02NCAzOC41dC00OCA0NHQtNTAgNTVxLTIgMyAtMy41IDQuNXQtNCA0LjV0LTQuNSA1cS03MiA4MSAtMTEyIDE0NXEtMTQgMjIgLTM4IDY4cS0xIDMgLTEwLjUgMjIuNXQtMTguNSAzNnQtMjAgMzUuNXQtMjEuNSAzMC41dC0xOC41IDExLjVxLTcxIDAgLTExNS41IC0zMC41dC00NC41IC05Ny41cTAgLTQzIDE1IC04NC41dDMzIC02OHQzMyAtNTV0MTUgLTQ4LjVoLTU3NiBxLTUwIDAgLTg5IC0zOC41dC0zOSAtODkuNXEwIC01MiAzOCAtOTB0OTAgLTM4aDMzMXEtMTUgLTE3IC0yNSAtNDcuNXQtMTAgLTU1LjVxMCAtNjkgNTMgLTExOXEtMTggLTMyIC0xOCAtNjl0MTcuNSAtNzMuNXQ0Ny41IC01Mi41cS00IC0yNCAtNCAtNTZxMCAtODUgNDguNSAtMTI2dDEzNS41IC00MXE4NCAwIDE4MyAzMnQxOTQgNjR0MTY3IDMyek0xNjY0IDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NSB0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNzkyIDc2OHYtNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0yODhxLTU5IDAgLTIyMyAtNTlxLTE5MCAtNjkgLTMxNyAtNjlxLTE0MiAwIC0yMzAgNzcuNXQtODcgMjE3LjVsMSA1cS02MSA3NiAtNjEgMTc4cTAgMjIgMyA0M3EtMzMgNTcgLTM3IDExOWgtMTY5cS0xMDUgMCAtMTgwLjUgNzZ0LTc1LjUgMTgxcTAgMTAzIDc2IDE3OXQxODAgNzZoMzc0cS0yMiA2MCAtMjIgMTI4IHEwIDEyMiA4MS41IDE4OXQyMDYuNSA2N3EzOCAwIDY5LjUgLTE3LjV0NTUgLTQ5LjV0NDAuNSAtNjN0MzcgLTcydDMzIC02MnEzNSAtNTUgMTAwIC0xMjlxMiAtMyAxNCAtMTd0MTkgLTIxLjV0MjAuNSAtMjEuNXQyNCAtMjIuNXQyMi41IC0xOHQyMy41IC0xNHQyMS41IC00LjVoMjg4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE2OyIgZD0iTTEyODAgLTY0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3MDBxMCAxODkgLTE2NyAxODlxLTI2IDAgLTU2IC01cS0xNiAzMCAtNTIuNSA0Ny41dC03My41IDE3LjV0LTY5IC0xOHEtNTAgNTMgLTExOSA1M3EtMjUgMCAtNTUuNSAtMTB0LTQ3LjUgLTI1djMzMXEwIDUyIC0zOCA5MHQtOTAgMzhxLTUxIDAgLTg5LjUgLTM5dC0zOC41IC04OXYtNTc2IHEtMjAgMCAtNDguNSAxNXQtNTUgMzN0LTY4IDMzdC04NC41IDE1cS02NyAwIC05Ny41IC00NC41dC0zMC41IC0xMTUuNXEwIC0yNCAxMzkgLTkwcTQ0IC0yNCA2NSAtMzdxNjQgLTQwIDE0NSAtMTEycTgxIC03MSAxMDYgLTEwMXE1NyAtNjkgNTcgLTE0MHYtMzJoNjQwdjMycTAgNzIgMzIgMTY3dDY0IDE5My41dDMyIDE3OS41ek0xNTM2IDcwNXEwIC0xMzMgLTY5IC0zMjJxLTU5IC0xNjQgLTU5IC0yMjN2LTI4OHEwIC01MyAtMzcuNSAtOTAuNSB0LTkwLjUgLTM3LjVoLTY0MHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2Mjg4cTAgMTAgLTQuNSAyMS41dC0xNCAyMy41dC0xOCAyMi41dC0yMi41IDI0dC0yMS41IDIwLjV0LTIxLjUgMTl0LTE3IDE0cS03NCA2NSAtMTI5IDEwMHEtMjEgMTMgLTYyIDMzdC03MiAzN3QtNjMgNDAuNXQtNDkuNSA1NXQtMTcuNSA2OS41cTAgMTI1IDY3IDIwNi41dDE4OSA4MS41cTY4IDAgMTI4IC0yMnYzNzRxMCAxMDQgNzYgMTgwdDE3OSA3NiBxMTA1IDAgMTgxIC03NS41dDc2IC0xODAuNXYtMTY5cTYyIC00IDExOSAtMzdxMjEgMyA0MyAzcTEwMSAwIDE3OCAtNjBxMTM5IDEgMjE5LjUgLTg1dDgwLjUgLTIyN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhNzsiIGQ9Ik0xNDA4IDU3NnEwIDg0IC0zMiAxODN0LTY0IDE5NHQtMzIgMTY3djMyaC02NDB2LTMycTAgLTQ2IC0yNSAtOTF0LTUyIC03MnQtNzIgLTY2cS05IC04IC0xNCAtMTJxLTgxIC03MiAtMTQ1IC0xMTJxLTIyIC0xNCAtNjggLTM4cS0zIC0xIC0yMi41IC0xMC41dC0zNiAtMTguNXQtMzUuNSAtMjB0LTMwLjUgLTIxLjV0LTExLjUgLTE4LjVxMCAtNzEgMzAuNSAtMTE1LjV0OTcuNSAtNDQuNXE0MyAwIDg0LjUgMTV0NjggMzN0NTUgMzMgdDQ4LjUgMTV2LTU3NnEwIC01MCAzOC41IC04OXQ4OS41IC0zOXE1MiAwIDkwIDM4dDM4IDkwdjMzMXE0NiAtMzUgMTAzIC0zNXE2OSAwIDExOSA1M3EzMiAtMTggNjkgLTE4dDczLjUgMTcuNXQ1Mi41IDQ3LjVxMjQgLTQgNTYgLTRxODUgMCAxMjYgNDguNXQ0MSAxMzUuNXpNMTI4MCAxMzQ0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTUzNiA1ODBxMCAtMTQyIC03Ny41IC0yMzAgdC0yMTcuNSAtODdsLTUgMXEtNzYgLTYxIC0xNzggLTYxcS0yMiAwIC00MyAzcS01NCAtMzAgLTExOSAtMzd2LTE2OXEwIC0xMDUgLTc2IC0xODAuNXQtMTgxIC03NS41cS0xMDMgMCAtMTc5IDc2dC03NiAxODB2Mzc0cS01NCAtMjIgLTEyOCAtMjJxLTEyMSAwIC0xODguNSA4MS41dC02Ny41IDIwNi41cTAgMzggMTcuNSA2OS41dDQ5LjUgNTV0NjMgNDAuNXQ3MiAzN3Q2MiAzM3E1NSAzNSAxMjkgMTAwcTMgMiAxNyAxNHQyMS41IDE5IHQyMS41IDIwLjV0MjIuNSAyNHQxOCAyMi41dDE0IDIzLjV0NC41IDIxLjV2Mjg4cTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWg2NDBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTI4OHEwIC01OSA1OSAtMjIzcTY5IC0xOTAgNjkgLTMxN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhODsiIGQ9Ik0xMjgwIDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC01MDJsMTg5IDE4OXExOSAxOSAxOSA0NXQtMTkgNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMzYyIC0zNjJsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDkxIC05MWwzNjIgLTM2MnExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxcTE4IDE4IDE4IDQ1dC0xOCA0NWwtMTg5IDE4OWg1MDJxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGE5OyIgZD0iTTEyODUgNjQwcTAgMjcgLTE4IDQ1bC05MSA5MWwtMzYyIDM2MnEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDE4OSAtMTg5aC01MDJxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg1MDJsLTE4OSAtMTg5cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsMzYyIDM2Mmw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFhOyIgZD0iTTEyODQgNjQxcTAgMjcgLTE4IDQ1bC0zNjIgMzYybC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MWwtMzYyIC0zNjJxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWw5MSAtOTFxMTggLTE4IDQ1IC0xOHQ0NSAxOGwxODkgMTg5di01MDJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXY1MDJsMTg5IC0xODlxMTkgLTE5IDQ1IC0xOXQ0NSAxOWw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAgcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGFiOyIgZD0iTTEyODQgNjM5cTAgMjcgLTE4IDQ1bC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTE4OSAtMTg5djUwMnEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUwMmwtMTg5IDE4OXEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDM2MiAtMzYybDkxIC05MXExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxbDM2MiAzNjJxMTggMTggMTggNDV6TTE1MzYgNjQwIHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhYzsiIGQ9Ik0xMTkzIDk5M3ExMSA3IDI1IDIydi0xcTAgLTIgLTkuNSAtMTB0LTExLjUgLTEycS0xIDEgLTQgMXpNMTE4NyA5OTJxLTEgMSAtMi41IDN0LTEuNSAzcTMgLTIgMTAgLTVxLTYgLTQgLTYgLTF6TTcyOCAxMTc1cS0xNiAyIC0yNiA1cTEgMCA2LjUgLTF0MTAuNSAtMnQ5IC0yek03NzMgMTIxMnE3IDQgMTMuNSAyLjV0Ny41IC03LjVxLTUgMyAtMjEgNXpNNzY1IDEyMDZsLTMgMnEtMiAzIC01LjUgNXQtNC41IDJxMiAtMSAyMSAtMyBxLTYgLTQgLTggLTZ6TTY2MyAxMjkwdjJxMSAtMiAzIC01LjV0MyAtNS41ek01NTggMTI1MHEwIC0yIC0xIC0ybC0xIDJoMnpNOTMzIDIwNnYtMXYxek03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek0xMjQwIDE2MiBsNSA1cS03IDEwIC0yOSAxMnExIDEyIC0xNCAyNi41dC0yNyAxNS41cTAgNCAtMTAuNSAxMXQtMTcuNSA4cS05IDIgLTI3IC05cS03IC0zIC00IC01cS0zIDMgLTEyIDExdC0xNiAxMXEtMiAxIC03LjUgMXQtOC41IDJxLTEgMSAtNiA0LjV0LTcgNC41dC02LjUgM3QtNy41IDEuNXQtNy41IC0yLjV0LTguNSAtNnQtNC41IC0xNS41dC0yLjUgLTE0LjVxLTggNiAtMC41IDIwdDEuNSAyMHEtNyA3IC0yMSAwLjV0LTIxIC0xNS41IHEtMSAtMSAtOS41IC01LjV0LTExLjUgLTcuNXEtNCAtNiAtOSAtMTcuNXQtNiAtMTMuNXEwIDIgLTIuNSA2LjV0LTIuNSA2LjVxLTEyIC0yIC0xNiAzcTUgLTE2IDggLTE3bC00IDJxLTEgLTYgMyAtMTV0NCAtMTFxMSAtNSAtMS41IC0xM3QtMi41IC0xMXEwIC0yIDUgLTExcTQgLTE5IC0yIC0zMnEwIC0xIC0zLjUgLTd0LTYuNSAtMTFsLTIgLTVsLTIgMXEtMSAxIC0yIDBxLTEgLTYgLTkgLTEzdC0xMCAtMTFxLTE1IC0yMyAtOSAtMzggcTMgLTggMTAgLTEwcTMgLTEgMyAycTEgLTkgLTExIC0yN3ExIC0xIDQgLTNxLTE3IDAgLTEwIC0xNHEyMDIgMzYgMzUyIDE4MWgtM3pNNjgwIDM0N3ExNiAzIDMwLjUgLTE2dDIyLjUgLTIzcTQxIC0yMCA1OSAtMTFxMCAtOSAxNCAtMjhxMyAtNCA2LjUgLTExLjV0NS41IC0xMC41cTUgLTcgMTkgLTE2dDE5IC0xNnE2IDMgOSA5cTEzIC0zNSAyNCAtMzRxNSAwIDggOHEwIC0xIC0wLjUgLTN0LTEuNSAtM3E3IDE1IDUgMjZsNiA0cTUgNCA1IDUgcS02IDYgLTkgLTNxLTMwIC0xNCAtNDggMjJxLTIgMyAtNC41IDh0LTUgMTJ0LTEuNSAxMS41dDYgNC41cTExIDAgMTIuNSAxLjV0LTIuNSA2dC00IDcuNXEtMSA0IC0xLjUgMTIuNXQtMS41IDEyLjVsLTUgNnEtNSA2IC0xMS41IDEzLjV0LTcuNSA5LjVxLTQgLTEwIC0xNi41IC04LjV0LTE4LjUgOS41cTEgLTIgLTAuNSAtNi41dC0xLjUgLTYuNXEtMTQgMCAtMTcgMXExIDYgMyAyMXQ0IDIycTEgNSA1LjUgMTMuNXQ4IDE1LjV0NC41IDE0IHQtNC41IDEwLjV0LTE4LjUgMi41cS0yMCAtMSAtMjkgLTIycS0xIC0zIC0zIC0xMS41dC01IC0xMi41dC05IC03cS04IC0zIC0yNyAtMnQtMjYgNXEtMTQgOCAtMjQgMzAuNXQtMTEgNDEuNXEwIDEwIDMgMjcuNXQzIDI3dC02IDI2LjVxMyAyIDEwIDEwLjV0MTEgMTEuNXEyIDIgNSAyaDV0NCAydDMgNnEtMSAxIC00IDNxLTMgMyAtNCAzcTQgLTMgMTkgLTF0MTkgMnEwIDEgMjIgMHExNyAtMTMgMjQgMnEwIDEgLTIuNSAxMC41dC0wLjUgMTQuNSBxNSAtMjkgMzIgLTEwcTMgLTQgMTYuNSAtNnQxOC41IC01cTMgLTIgNyAtNS41dDYgLTV0NiAtMC41dDkgN3ExMSAtMTcgMTMgLTI1cTExIC00MyAyMCAtNDhxOCAtMiAxMi41IC0ydDUgMTAuNXQwIDE1LjV0LTEuNSAxM2wtMiAzN3EtMTYgMyAtMjAgMTIuNXQxLjUgMjB0MTYuNSAxOS41cTEgMSAxNi41IDh0MjEuNSAxMnEyNCAxOSAxNyAzOXE5IC0yIDExIDlsLTUgM3EtNCAzIC04IDUuNXQtNSAxLjVxMTEgNyAyIDE4cTUgMyA4IDExLjUgdDkgMTEuNXE5IC0xNCAyMiAtM3E4IDkgMiAxOHE1IDggMjIgMTEuNXQyMCA5LjVxNSAtMSA3IDB0MiA0LjV2Ny41dDEgOC41dDMgNy41cTQgNiAxNiAxMC41dDE0IDUuNWwxOSAxMnE0IDQgMCA0cTE4IC0yIDMyIDExcTEzIDEyIC01IDIzcTIgNyAtNCAxMC41dC0xNiA1LjVxMyAxIDEyIDAuNXQxMiAxLjVxMTUgMTEgLTcgMTdxLTIwIDUgLTQ3IC0xM3EtMyAtMiAtMTMgLTEydC0xNyAtMTFxMTUgMTggNSAyMnE4IC0xIDIyLjUgOXQxNS41IDExIHE0IDIgMTAuNSAyLjV0OC41IDEuNXE3MSAyNSA5MiAtMXE4IDExIDExIDE1dDkuNSA5dDE1LjUgOHEyMSA3IDIzIDlsMSAyM3EtMTIgLTEgLTE4IDh0LTcgMjJsLTYgLThxMCA2IC0zLjUgNy41dC03LjUgMC41dC05LjUgLTJ0LTcuNSAwcS05IDIgLTE5LjUgMTUuNXQtMTQuNSAxNi41cTkgMCA5IDVxLTIgNSAtMTAgOHExIDYgLTIgOHQtOSAwcS0yIDEyIC0xIDEzcS02IDEgLTExIDExdC04IDEwcS0yIDAgLTQuNSAtMnQtNSAtNS41bC01IC03IHQtMy41IC01LjVsLTIgLTJxLTEyIDYgLTI0IC0xMHEtOSAxIC0xNyAtMnExNSA2IDIgMTNxLTExIDUgLTIxIDJxMTIgNSAxMCAxNHQtMTIgMTZxMSAwIDQgLTF0NCAtMXEtMSA1IC05LjUgOS41dC0xOS41IDl0LTE0IDYuNXEtNyA1IC0zNiAxMC41dC0zNiAxLjVxLTUgLTMgLTYgLTZ0MS41IC04LjV0My41IC04LjVxNiAtMjMgNSAtMjdxLTEgLTMgLTguNSAtOHQtNS41IC0xMnExIC00IDExLjUgLTEwdDEyLjUgLTEycTUgLTEzIC00IC0yNSBxLTQgLTUgLTE1IC0xMXQtMTQgLTEwcS01IC01IC0zLjUgLTExLjV0MC41IC05LjVxMSAxIDEgMi41dDEgMi41cTAgLTEzIDExIC0yMnE4IC02IC0xNiAtMThxLTIwIC0xMSAtMjAgLTRxMSA4IC03LjUgMTZ0LTEwLjUgMTJ0LTMuNSAxOXQtOS41IDIxcS02IDQgLTE5IDR0LTE4IC01cTAgMTAgLTQ5IDMwcS0xNyA4IC01OCA0cTcgMSAwIDE3cS04IDE2IC0yMSAxMnEtOCAyNSAtNCAzNXEyIDUgOSAxNHQ5IDE1cTEgMyAxNS41IDZ0MTYuNSA4IHExIDQgLTIuNSA2LjV0LTkuNSA0LjVxNTMgLTYgNjMgMThxNSA5IDMgMTRxMCAtMSAyIC0xdDIgLTFxMTIgMyA3IDE3cTE5IDggMjYgOHE1IC0xIDExIC02dDEwIC01cTE3IC0zIDIxLjUgMTB0LTkuNSAyM3E3IC00IDcgNnEtMSAxMyAtNyAxOXEtMyAyIC02LjUgMi41dC02LjUgMHQtNyAwLjVxLTEgMCAtOCAycS0xIC0xIC0yIC0xaC04cS00IC0yIC00IC01di0xcS0xIC0zIDQgLTZsNSAtMWwzIC0ycS0xIDAgLTIuNSAtMi41dC0yLjUgLTIuNSBxMCAtMyAzIC01cS0yIC0xIC0xNCAtNy41dC0xNyAtMTAuNXEtMSAtMSAtNCAtMi41dC00IC0yLjVxLTIgLTEgLTQgMnQtNCA5dC00IDExLjV0LTQuNSAxMHQtNS41IDQuNXEtMTIgMCAtMTggLTE3cTMgMTAgLTEzIDE3LjV0LTI1IDcuNXEyMCAxNSAtOSAzMGwtMSAxcS0zMCAtNCAtNDUgLTdxLTIgLTYgMyAtMTJxLTEgLTcgNiAtOXEwIC0xIDAuNSAtMXQwLjUgLTFxMCAxIC0wLjUgMXQtMC41IDFxMyAtMSAxMC41IC0xLjV0OS41IC0xLjUgcTMgLTEgNC41IC0ybDcuNSAtNXQ1LjUgLTZ0LTIuNSAtNXEtMiAtMSAtOSAtNHQtMTIuNSAtNS41dC02LjUgLTMuNXEtMyAtNSAwIC0xNnQtMiAtMTVxLTUgNSAtMTAgMTguNXQtOCAxNy41cTggLTkgLTMwIC02bC04IDFxLTQgMCAtMTUgLTJ0LTE2IC0xcS03IDAgLTI5IDZxNyAxNyA1IDI1cTUgMCA3IDJsLTYgM3EtMyAtMSAtMjUgLTlxMiAtMyA4IC05LjV0OSAtMTEuNXEtMjIgNiAtMjcgLTJxMCAtMSAtOSAwcS0yNSAxIC0yNCAtNyBxMSAtNCA5IC0xMnEwIC05IC0xIC05cS0yNyAyMiAtMzAgMjNxLTE3MiAtODMgLTI3NiAtMjQ4cTEgLTIgMi41IC0xMXQzLjUgLTguNXQxMSA0LjVxOSAtOSAzIC0yMXEyIDIgMzYgLTIxcTU2IC00MCAyMiAtNTN2NS41dDEgNi41cS05IC0xIC0xOSA1cS0zIC02IDAuNSAtMjB0MTEuNSAtMTRxLTggMCAtMTAuNSAtMTd0LTIuNSAtMzguNXQtMSAtMjUuNWwyIC0xcS0zIC0xMyA2IC0zNy41dDI0IC0yMC41cS00IC0xOCA1IC0yMXEtMSAtNCAwIC04IHQ0LjUgLTguNXQ2IC03bDcuNSAtNy41bDYgLTZxMjggLTExIDQxIC0yOXE0IC02IDEwLjUgLTI0LjV0MTUuNSAtMjUuNXEtMiAtNiAxMCAtMjEuNXQxMSAtMjUuNXEtMSAwIC0yLjUgLTAuNXQtMi41IC0wLjVxMyAtOCAxNi41IC0xNnQxNi41IC0xNHEyIC0zIDIuNSAtMTAuNXQzIC0xMnQ4LjUgLTIuNXEzIDI0IC0yNiA2OHEtMTYgMjcgLTE4IDMxcS0zIDUgLTUuNSAxNi41dC00LjUgMTUuNXEyNyAtOSAyNiAtMTNxLTUgLTEwIDI2IC01MiBxMiAtMyAxMCAtMTB0MTEgLTEycTMgLTQgOS41IC0xNC41dDEwLjUgLTE1LjVxLTEgMCAtMyAtMmwtMyAtM3E0IC0yIDkgLTV0OCAtNC41dDcuNSAtNXQ3LjUgLTcuNXExNiAtMTggMjAgLTMzcTEgLTQgMC41IC0xNS41dDEuNSAtMTYuNXEyIC02IDYgLTExdDExLjUgLTEwdDExLjUgLTd0MTQuNSAtNi41dDExLjUgLTUuNXEyIC0xIDE4IC0xMXQyNSAtMTRxMTAgLTQgMTYuNSAtNC41dDE2IDIuNXQxNS41IDR6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYWQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTM4NCA2NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjggNDg0bC02ODIgLTY4MnEtMzcgLTM3IC05MCAtMzdxLTUyIDAgLTkxIDM3bC0xMDYgMTA4cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2ODEgNjgxcTM5IC05OCAxMTQuNSAtMTczLjV0MTczLjUgLTExNC41ek0xNjYyIDkxOXEwIC0zOSAtMjMgLTEwNnEtNDcgLTEzNCAtMTY0LjUgLTIxNy41IHQtMjU4LjUgLTgzLjVxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjV0MTMxLjUgMzE2LjV0MzE2LjUgMTMxLjVxNTggMCAxMjEuNSAtMTYuNXQxMDcuNSAtNDYuNXExNiAtMTEgMTYgLTI4dC0xNiAtMjhsLTI5MyAtMTY5di0yMjRsMTkzIC0xMDdxNSAzIDc5IDQ4LjV0MTM1LjUgODF0NzAuNSAzNS41cTE1IDAgMjMuNSAtMTB0OC41IC0yNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBhZTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTAyNCAxMjhoNjQwdjEyOGgtNjQwdi0xMjh6TTY0MCA2NDBoMTAyNHYxMjhoLTEwMjR2LTEyOHpNMTI4MCAxMTUyaDM4NHYxMjhoLTM4NHYtMTI4ek0xNzkyIDMyMHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDgzMnYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTkgdC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXpNMTc5MiAxMzQ0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYjA7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTE0MDMgMTI0MXExNyAtNDEgLTE0IC03MGwtNDkzIC00OTN2LTc0MnEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDV2NDg2bC00OTMgNDkzcS0zMSAyOSAtMTQgNzBxMTcgMzkgNTkgMzloMTI4MHE0MiAwIDU5IC0zOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBiMTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTE3OTIgNTEydi00ODBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjQ4MGg2NzJ2LTE2MHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHEyNiAwIDQ1IDE5dDE5IDQ1djE2MGg2NzJ6TTEwMjQgNTEydi0xMjhoLTI1NnYxMjhoMjU2ek0xNzkyIDk5MnYtMzg0aC0xNzkydjM4NHEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydjE2MHEwIDQwIDI4IDY4IHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMzUycTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGIyOyIgZD0iTTEyODMgOTk1bC0zNTUgLTM1NWwzNTUgLTM1NWwxNDQgMTQ0cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtNDIgMCAtNTkgNDBxLTE3IDM5IDE0IDY5bDE0NCAxNDRsLTM1NSAzNTVsLTM1NSAtMzU1bDE0NCAtMTQ0cTMxIC0zMCAxNCAtNjlxLTE3IC00MCAtNTkgLTQwaC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCA0MiA0MCA1OXEzOSAxNyA2OSAtMTRsMTQ0IC0xNDQgbDM1NSAzNTVsLTM1NSAzNTVsLTE0NCAtMTQ0cS0xOSAtMTkgLTQ1IC0xOXEtMTIgMCAtMjQgNXEtNDAgMTcgLTQwIDU5djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHE0MiAwIDU5IC00MHExNyAtMzkgLTE0IC02OWwtMTQ0IC0xNDRsMzU1IC0zNTVsMzU1IDM1NWwtMTQ0IDE0NHEtMzEgMzAgLTE0IDY5cTE3IDQwIDU5IDQwaDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQ0OHEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE5eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMDsiIGhvcml6LWFkdi14PSIxOTIwIiBkPSJNNTkzIDY0MHEtMTYyIC01IC0yNjUgLTEyOGgtMTM0cS04MiAwIC0xMzggNDAuNXQtNTYgMTE4LjVxMCAzNTMgMTI0IDM1M3E2IDAgNDMuNSAtMjF0OTcuNSAtNDIuNXQxMTkgLTIxLjVxNjcgMCAxMzMgMjNxLTUgLTM3IC01IC02NnEwIC0xMzkgODEgLTI1NnpNMTY2NCAzcTAgLTEyMCAtNzMgLTE4OS41dC0xOTQgLTY5LjVoLTg3NHEtMTIxIDAgLTE5NCA2OS41dC03MyAxODkuNXEwIDUzIDMuNSAxMDMuNXQxNCAxMDl0MjYuNSAxMDguNSB0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxMTAgMCA0MyAtMjEuNXQ3MyAtNDh0MTA3IC00OHQxMzUgLTIxLjV0MTM1IDIxLjV0MTA3IDQ4dDczIDQ4dDQzIDIxLjVxNjEgMCAxMTEuNSAtMjB0ODUuNSAtNTMuNXQ2MiAtODF0NDMgLTk3LjV0MjYuNSAtMTA4LjV0MTQgLTEwOXQzLjUgLTEwMy41ek02NDAgMTI4MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NSB0NzUgLTE4MXpNMTM0NCA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41dDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6TTE5MjAgNjcxcTAgLTc4IC01NiAtMTE4LjV0LTEzOCAtNDAuNWgtMTM0cS0xMDMgMTIzIC0yNjUgMTI4cTgxIDExNyA4MSAyNTZxMCAyOSAtNSA2NnE2NiAtMjMgMTMzIC0yM3E1OSAwIDExOSAyMS41dDk3LjUgNDIuNSB0NDMuNSAyMXExMjQgMCAxMjQgLTM1M3pNMTc5MiAxMjgwcTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwYzE7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTE0NTYgMzIwcTAgNDAgLTI4IDY4bC0yMDggMjA4cS0yOCAyOCAtNjggMjhxLTQyIDAgLTcyIC0zMnEzIC0zIDE5IC0xOC41dDIxLjUgLTIxLjV0MTUgLTE5dDEzIC0yNS41dDMuNSAtMjcuNXEwIC00MCAtMjggLTY4dC02OCAtMjhxLTE1IDAgLTI3LjUgMy41dC0yNS41IDEzdC0xOSAxNXQtMjEuNSAyMS41dC0xOC41IDE5cS0zMyAtMzEgLTMzIC03M3EwIC00MCAyOCAtNjhsMjA2IC0yMDdxMjcgLTI3IDY4IC0yN3E0MCAwIDY4IDI2IGwxNDcgMTQ2cTI4IDI4IDI4IDY3ek03NTMgMTAyNXEwIDQwIC0yOCA2OGwtMjA2IDIwN3EtMjggMjggLTY4IDI4cS0zOSAwIC02OCAtMjdsLTE0NyAtMTQ2cS0yOCAtMjggLTI4IC02N3EwIC00MCAyOCAtNjhsMjA4IC0yMDhxMjcgLTI3IDY4IC0yN3E0MiAwIDcyIDMxcS0zIDMgLTE5IDE4LjV0LTIxLjUgMjEuNXQtMTUgMTl0LTEzIDI1LjV0LTMuNSAyNy41cTAgNDAgMjggNjh0NjggMjhxMTUgMCAyNy41IC0zLjV0MjUuNSAtMTN0MTkgLTE1IHQyMS41IC0yMS41dDE4LjUgLTE5cTMzIDMxIDMzIDczek0xNjQ4IDMyMHEwIC0xMjAgLTg1IC0yMDNsLTE0NyAtMTQ2cS04MyAtODMgLTIwMyAtODNxLTEyMSAwIC0yMDQgODVsLTIwNiAyMDdxLTgzIDgzIC04MyAyMDNxMCAxMjMgODggMjA5bC04OCA4OHEtODYgLTg4IC0yMDggLTg4cS0xMjAgMCAtMjA0IDg0bC0yMDggMjA4cS04NCA4NCAtODQgMjA0dDg1IDIwM2wxNDcgMTQ2cTgzIDgzIDIwMyA4M3ExMjEgMCAyMDQgLTg1bDIwNiAtMjA3IHE4MyAtODMgODMgLTIwM3EwIC0xMjMgLTg4IC0yMDlsODggLTg4cTg2IDg4IDIwOCA4OHExMjAgMCAyMDQgLTg0bDIwOCAtMjA4cTg0IC04NCA4NCAtMjA0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGMyOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xOTIwIDM4NHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41aC0xMDg4cS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMyIDcxIDI0MS41dDE4NyAxNjMuNXEtMiAyOCAtMiA0M3EwIDIxMiAxNTAgMzYydDM2MiAxNTBxMTU4IDAgMjg2LjUgLTg4dDE4Ny41IC0yMzBxNzAgNjIgMTY2IDYycTEwNiAwIDE4MSAtNzV0NzUgLTE4MXEwIC03NSAtNDEgLTEzOHExMjkgLTMwIDIxMyAtMTM0LjV0ODQgLTIzOS41eiAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjMzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUyNyA4OHE1NiAtODkgMjEuNSAtMTUyLjV0LTE0MC41IC02My41aC0xMTUycS0xMDYgMCAtMTQwLjUgNjMuNXQyMS41IDE1Mi41bDUwMyA3OTN2Mzk5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC02NHYtMzk5ek03NDggODEzbC0yNzIgLTQyOWg3MTJsLTI3MiA0MjlsLTIwIDMxdjM3djM5OWgtMTI4di0zOTl2LTM3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik05NjAgNjQwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTI2MCA1NzZsNTA3IC0zOThxMjggLTIwIDI1IC01NnEtNSAtMzUgLTM1IC01MWwtMTI4IC02NHEtMTMgLTcgLTI5IC03cS0xNyAwIC0zMSA4bC02OTAgMzg3bC0xMTAgLTY2cS04IC00IC0xMiAtNXExNCAtNDkgMTAgLTk3cS03IC03NyAtNTYgLTE0Ny41dC0xMzIgLTEyMy41cS0xMzIgLTg0IC0yNzcgLTg0IHEtMTM2IDAgLTIyMiA3OHEtOTAgODQgLTc5IDIwN3E3IDc2IDU2IDE0N3QxMzEgMTI0cTEzMiA4NCAyNzggODRxODMgMCAxNTEgLTMxcTkgMTMgMjIgMjJsMTIyIDczbC0xMjIgNzNxLTEzIDkgLTIyIDIycS02OCAtMzEgLTE1MSAtMzFxLTE0NiAwIC0yNzggODRxLTgyIDUzIC0xMzEgMTI0dC01NiAxNDdxLTUgNTkgMTUuNSAxMTN0NjMuNSA5M3E4NSA3OSAyMjIgNzlxMTQ1IDAgMjc3IC04NHE4MyAtNTIgMTMyIC0xMjN0NTYgLTE0OCBxNCAtNDggLTEwIC05N3E0IC0xIDEyIC01bDExMCAtNjZsNjkwIDM4N3ExNCA4IDMxIDhxMTYgMCAyOSAtN2wxMjggLTY0cTMwIC0xNiAzNSAtNTFxMyAtMzYgLTI1IC01NnpNNTc5IDgzNnE0NiA0MiAyMSAxMDh0LTEwNiAxMTdxLTkyIDU5IC0xOTIgNTlxLTc0IDAgLTExMyAtMzZxLTQ2IC00MiAtMjEgLTEwOHQxMDYgLTExN3E5MiAtNTkgMTkyIC01OXE3NCAwIDExMyAzNnpNNDk0IDkxcTgxIDUxIDEwNiAxMTd0LTIxIDEwOCBxLTM5IDM2IC0xMTMgMzZxLTEwMCAwIC0xOTIgLTU5cS04MSAtNTEgLTEwNiAtMTE3dDIxIC0xMDhxMzkgLTM2IDExMyAtMzZxMTAwIDAgMTkyIDU5ek02NzIgNzA0bDk2IC01OHYxMXEwIDM2IDMzIDU2bDE0IDhsLTc5IDQ3bC0yNiAtMjZxLTMgLTMgLTEwIC0xMXQtMTIgLTEycS0yIC0yIC00IC0zLjV0LTMgLTIuNXpNODk2IDQ4MGw5NiAtMzJsNzM2IDU3NmwtMTI4IDY0bC03NjggLTQzMXYtMTEzbC0xNjAgLTk2bDkgLThxMiAtMiA3IC02IHE0IC00IDExIC0xMnQxMSAtMTJsMjYgLTI2ek0xNjAwIDY0bDEyOCA2NGwtNTIwIDQwOGwtMTc3IC0xMzhxLTIgLTMgLTEzIC03eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM1OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNjk2IDExNTJxNDAgMCA2OCAtMjh0MjggLTY4di0xMjE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2Mjg4aC01NDRxLTQwIDAgLTY4IDI4dC0yOCA2OHY2NzJxMCA0MCAyMCA4OHQ0OCA3Nmw0MDggNDA4cTI4IDI4IDc2IDQ4dDg4IDIwaDQxNnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyOHE2OCA0MCAxMjggNDBoNDE2ek0xMTUyIDkzOWwtMjk5IC0yOTloMjk5djI5OXpNNTEyIDEzMjNsLTI5OSAtMjk5IGgyOTl2Mjk5ek03MDggNjc2bDMxNiAzMTZ2NDE2aC0zODR2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNjQwaDUxMnYyNTZxMCA0MCAyMCA4OHQ0OCA3NnpNMTY2NCAtMTI4djExNTJoLTM4NHYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtNDE2di02NDBoODk2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM2OyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xNDA0IDE1MXEwIC0xMTcgLTc5IC0xOTZ0LTE5NiAtNzlxLTEzNSAwIC0yMzUgMTAwbC03NzcgNzc2cS0xMTMgMTE1IC0xMTMgMjcxcTAgMTU5IDExMCAyNzB0MjY5IDExMXExNTggMCAyNzMgLTExM2w2MDUgLTYwNnExMCAtMTAgMTAgLTIycTAgLTE2IC0zMC41IC00Ni41dC00Ni41IC0zMC41cS0xMyAwIC0yMyAxMGwtNjA2IDYwN3EtNzkgNzcgLTE4MSA3N3EtMTA2IDAgLTE3OSAtNzV0LTczIC0xODFxMCAtMTA1IDc2IC0xODEgbDc3NiAtNzc3cTYzIC02MyAxNDUgLTYzcTY0IDAgMTA2IDQydDQyIDEwNnEwIDgyIC02MyAxNDVsLTU4MSA1ODFxLTI2IDI0IC02MCAyNHEtMjkgMCAtNDggLTE5dC0xOSAtNDhxMCAtMzIgMjUgLTU5bDQxMCAtNDEwcTEwIC0xMCAxMCAtMjJxMCAtMTYgLTMxIC00N3QtNDcgLTMxcS0xMiAwIC0yMiAxMGwtNDEwIDQxMHEtNjMgNjEgLTYzIDE0OXEwIDgyIDU3IDEzOXQxMzkgNTdxODggMCAxNDkgLTYzbDU4MSAtNTgxcTEwMCAtOTggMTAwIC0yMzUgeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGM3OyIgZD0iTTM4NCAwaDc2OHYzODRoLTc2OHYtMzg0ek0xMjgwIDBoMTI4djg5NnEwIDE0IC0xMCAzOC41dC0yMCAzNC41bC0yODEgMjgxcS0xMCAxMCAtMzQgMjB0LTM5IDEwdi00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC01NzZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTEyOHYtMTI4MGgxMjh2NDE2cTAgNDAgMjggNjh0NjggMjhoODMycTQwIDAgNjggLTI4dDI4IC02OHYtNDE2ek04OTYgOTI4djMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUgaC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTUzNiA4OTZ2LTkyOHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoOTI4cTQwIDAgODggLTIwdDc2IC00OGwyODAgLTI4MHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjODsiIGQ9Ik0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjOTsiIGQ9Ik0xNTM2IDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDcwNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDEyMTZ2LTEyOHEwIC0yNiAtMTkgLTQ1IHQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwY2E7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTM4NCAxMjhxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0zODQgNjQwcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNSB0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMTUycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTc5MiA3MzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODEgLTg0cTAgLTgwIC01NC41IC0xMjZ0LTEzNS41IC00NnEtMTA2IDAgLTE3MiA2Nmw1NyA4OHE0OSAtNDUgMTA2IC00NXEyOSAwIDUwLjUgMTQuNXQyMS41IDQyLjVxMCA2NCAtMTA1IDU2bC0yNiA1NnE4IDEwIDMyLjUgNDMuNXQ0Mi41IDU0dDM3IDM4LjV2MXEtMTYgMCAtNDguNSAtMXQtNDguNSAtMXYtNTNoLTEwNnYxNTJoMzMzdi04OGwtOTUgLTExNXE1MSAtMTIgODEgLTQ5dDMwIC04OHpNMzgzIDU0M3YtMTU5aC0zNjIgcS02IDM2IC02IDU0cTAgNTEgMjMuNSA5M3Q1Ni41IDY4dDY2IDQ3LjV0NTYuNSA0My41dDIzLjUgNDVxMCAyNSAtMTQuNSAzOC41dC0zOS41IDEzLjVxLTQ2IDAgLTgxIC01OGwtODUgNTlxMjQgNTEgNzEuNSA3OS41dDEwNS41IDI4LjVxNzMgMCAxMjMgLTQxLjV0NTAgLTExMi41cTAgLTUwIC0zNCAtOTEuNXQtNzUgLTY0LjV0LTc1LjUgLTUwLjV0LTM1LjUgLTUyLjVoMTI3djYwaDEwNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41IHQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTQgOSAyM3QyMyA5aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgMTEyM3YtOTloLTMzNXY5OWgxMDdxMCA0MSAwLjUgMTIydDAuNSAxMjF2MTJoLTJxLTggLTE3IC01MCAtNTRsLTcxIDc2bDEzNiAxMjdoMTA2di00MDRoMTA4ek0xNzkyIDczNnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjUgdC05LjUgMjIuNXYxOTJxMCAxNCA5IDIzdDIzIDloMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMTI0OHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTIxNnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNjOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzYwIDY0MHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNzI4cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE3Mjh6TTQ4MyA3MDRxLTI4IDM1IC01MSA4MHEtNDggOTcgLTQ4IDE4OHEwIDE4MSAxMzQgMzA5cTEzMyAxMjcgMzkzIDEyN3E1MCAwIDE2NyAtMTlxNjYgLTEyIDE3NyAtNDhxMTAgLTM4IDIxIC0xMThxMTQgLTEyMyAxNCAtMTgzcTAgLTE4IC01IC00NWwtMTIgLTNsLTg0IDYgbC0xNCAycS01MCAxNDkgLTEwMyAyMDVxLTg4IDkxIC0yMTAgOTFxLTExNCAwIC0xODIgLTU5cS02NyAtNTggLTY3IC0xNDZxMCAtNzMgNjYgLTE0MHQyNzkgLTEyOXE2OSAtMjAgMTczIC02NnE1OCAtMjggOTUgLTUyaC03NDN6TTk5MCA0NDhoNDExcTcgLTM5IDcgLTkycTAgLTExMSAtNDEgLTIxMnEtMjMgLTU1IC03MSAtMTA0cS0zNyAtMzUgLTEwOSAtODFxLTgwIC00OCAtMTUzIC02NnEtODAgLTIxIC0yMDMgLTIxcS0xMTQgMCAtMTk1IDIzIGwtMTQwIDQwcS01NyAxNiAtNzIgMjhxLTggOCAtOCAyMnYxM3EwIDEwOCAtMiAxNTZxLTEgMzAgMCA2OGwyIDM3djQ0bDEwMiAycTE1IC0zNCAzMCAtNzF0MjIuNSAtNTZ0MTIuNSAtMjdxMzUgLTU3IDgwIC05NHE0MyAtMzYgMTA1IC01N3E1OSAtMjIgMTMyIC0yMnE2NCAwIDEzOSAyN3E3NyAyNiAxMjIgODZxNDcgNjEgNDcgMTI5cTAgODQgLTgxIDE1N3EtMzQgMjkgLTEzNyA3MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBjZDsiIGQ9Ik00OCAxMzEzcS0zNyAyIC00NSA0bC0zIDg4cTEzIDEgNDAgMXE2MCAwIDExMiAtNHExMzIgLTcgMTY2IC03cTg2IDAgMTY4IDNxMTE2IDQgMTQ2IDVxNTYgMCA4NiAybC0xIC0xNGwyIC02NHYtOXEtNjAgLTkgLTEyNCAtOXEtNjAgMCAtNzkgLTI1cS0xMyAtMTQgLTEzIC0xMzJxMCAtMTMgMC41IC0zMi41dDAuNSAtMjUuNWwxIC0yMjlsMTQgLTI4MHE2IC0xMjQgNTEgLTIwMnEzNSAtNTkgOTYgLTkycTg4IC00NyAxNzcgLTQ3IHExMDQgMCAxOTEgMjhxNTYgMTggOTkgNTFxNDggMzYgNjUgNjRxMzYgNTYgNTMgMTE0cTIxIDczIDIxIDIyOXEwIDc5IC0zLjUgMTI4dC0xMSAxMjIuNXQtMTMuNSAxNTkuNWwtNCA1OXEtNSA2NyAtMjQgODhxLTM0IDM1IC03NyAzNGwtMTAwIC0ybC0xNCAzbDIgODZoODRsMjA1IC0xMHE3NiAtMyAxOTYgMTBsMTggLTJxNiAtMzggNiAtNTFxMCAtNyAtNCAtMzFxLTQ1IC0xMiAtODQgLTEzcS03MyAtMTEgLTc5IC0xN3EtMTUgLTE1IC0xNSAtNDEgcTAgLTcgMS41IC0yN3QxLjUgLTMxcTggLTE5IDIyIC0zOTZxNiAtMTk1IC0xNSAtMzA0cS0xNSAtNzYgLTQxIC0xMjJxLTM4IC02NSAtMTEyIC0xMjNxLTc1IC01NyAtMTgyIC04OXEtMTA5IC0zMyAtMjU1IC0zM3EtMTY3IDAgLTI4NCA0NnEtMTE5IDQ3IC0xNzkgMTIycS02MSA3NiAtODMgMTk1cS0xNiA4MCAtMTYgMjM3djMzM3EwIDE4OCAtMTcgMjEzcS0yNSAzNiAtMTQ3IDM5ek0xNTM2IC05NnY2NHEwIDE0IC05IDIzdC0yMyA5aC0xNDcyIHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWgxNDcycTE0IDAgMjMgOXQ5IDIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGNlOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik01MTIgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNNTEyIDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTEwMjQgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yMyB2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTUxMiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDU0NHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTYwdjE5MiBxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTEwMjQgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTUzNiA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTIgcTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTUzNiA5Mjh2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xNjY0IDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEzNDRxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDEzNDRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTMgeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQwOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xMTkwIDk1NWwyOTMgMjkzbC0xMDcgMTA3bC0yOTMgLTI5M3pNMTYzNyAxMjQ4cTAgLTI3IC0xOCAtNDVsLTEyODYgLTEyODZxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTk4IDE5OHEtMTggMTggLTE4IDQ1dDE4IDQ1bDEyODYgMTI4NnExOCAxOCA0NSAxOHQ0NSAtMThsMTk4IC0xOThxMTggLTE4IDE4IC00NXpNMjg2IDE0MzhsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek02MzYgMTI3NiBsMTk2IC02MGwtMTk2IC02MGwtNjAgLTE5NmwtNjAgMTk2bC0xOTYgNjBsMTk2IDYwbDYwIDE5NnpNMTU2NiA3OThsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek05MjYgMTQzOGw5OCAtMzBsLTk4IC0zMGwtMzAgLTk4bC0zMCA5OGwtOTggMzBsOTggMzBsMzAgOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTY0MCAxMjhxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTMgMCAtMjIgLTlsLTE5NSAtMTk1cS05IC05IC05IC0yMnYtMzB6TTE1MzYgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNMTc5MiAxMjE2di0xMDI0cTAgLTE1IC00IC0yNi41dC0xMy41IC0xOC41IHQtMTYuNSAtMTEuNXQtMjMuNSAtNnQtMjIuNSAtMnQtMjUuNSAwdC0yMi41IDAuNXEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0zODRxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MWgtNjRxLTMgMCAtMjIuNSAtMC41dC0yNS41IDB0LTIyLjUgMnQtMjMuNSA2dC0xNi41IDExLjV0LTEzLjUgMTguNXQtNCAyNi41cTAgMjYgMTkgNDV0NDUgMTl2MzIwcTAgOCAtMC41IDM1dDAgMzggdDIuNSAzNC41dDYuNSAzN3QxNCAzMC41dDIyLjUgMzBsMTk4IDE5OHExOSAxOSA1MC41IDMydDU4LjUgMTNoMTYwdjE5MnEwIDI2IDE5IDQ1dDQ1IDE5aDEwMjRxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQyOyIgZD0iTTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzcS0xMTEgMCAtMjE4IDMycTU5IDkzIDc4IDE2NHE5IDM0IDU0IDIxMXEyMCAtMzkgNzMgLTY3LjV0MTE0IC0yOC41cTEyMSAwIDIxNiA2OC41dDE0NyAxODguNXQ1MiAyNzBxMCAxMTQgLTU5LjUgMjE0dC0xNzIuNSAxNjN0LTI1NSA2M3EtMTA1IDAgLTE5NiAtMjl0LTE1NC41IC03N3QtMTA5IC0xMTAuNXQtNjcgLTEyOS41dC0yMS41IC0xMzQgcTAgLTEwNCA0MCAtMTgzdDExNyAtMTExcTMwIC0xMiAzOCAyMHEyIDcgOCAzMXQ4IDMwcTYgMjMgLTExIDQzcS01MSA2MSAtNTEgMTUxcTAgMTUxIDEwNC41IDI1OS41dDI3My41IDEwOC41cTE1MSAwIDIzNS41IC04MnQ4NC41IC0yMTNxMCAtMTcwIC02OC41IC0yODl0LTE3NS41IC0xMTlxLTYxIDAgLTk4IDQzLjV0LTIzIDEwNC41cTggMzUgMjYuNSA5My41dDMwIDEwM3QxMS41IDc1LjVxMCA1MCAtMjcgODN0LTc3IDMzIHEtNjIgMCAtMTA1IC01N3QtNDMgLTE0MnEwIC03MyAyNSAtMTIybC05OSAtNDE4cS0xNyAtNzAgLTEzIC0xNzdxLTIwNiA5MSAtMzMzIDI4MXQtMTI3IDQyM3EwIDIwOSAxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDM7IiBkPSJNMTI0OCAxNDA4cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTcyNXE4NSAxMjIgMTA4IDIxMHE5IDM0IDUzIDIwOXEyMSAtMzkgNzMuNSAtNjd0MTEyLjUgLTI4cTE4MSAwIDI5NS41IDE0Ny41dDExNC41IDM3My41cTAgODQgLTM1IDE2Mi41dC05Ni41IDEzOXQtMTUyLjUgOTd0LTE5NyAzNi41cS0xMDQgMCAtMTk0LjUgLTI4LjV0LTE1MyAtNzYuNSB0LTEwNy41IC0xMDkuNXQtNjYuNSAtMTI4dC0yMS41IC0xMzIuNXEwIC0xMDIgMzkuNSAtMTgwdDExNi41IC0xMTBxMTMgLTUgMjMuNSAwdDE0LjUgMTlxMTAgNDQgMTUgNjFxNiAyMyAtMTEgNDJxLTUwIDYyIC01MCAxNTBxMCAxNTAgMTAzLjUgMjU2LjV0MjcwLjUgMTA2LjVxMTQ5IDAgMjMyLjUgLTgxdDgzLjUgLTIxMHEwIC0xNjggLTY3LjUgLTI4NnQtMTczLjUgLTExOHEtNjAgMCAtOTcgNDMuNXQtMjMgMTAzLjVxOCAzNCAyNi41IDkyLjUgdDI5LjUgMTAydDExIDc0LjVxMCA0OSAtMjYuNSA4MS41dC03NS41IDMyLjVxLTYxIDAgLTEwMy41IC01Ni41dC00Mi41IC0xMzkuNXEwIC03MiAyNCAtMTIxbC05OCAtNDE0cS0yNCAtMTAwIC03IC0yNTRoLTE4M3EtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZDQ7IiBkPSJNNjc4IC01N3EwIC0zOCAtMTAgLTcxaC0zODBxLTk1IDAgLTE3MS41IDU2LjV0LTEwMy41IDE0Ny41cTI0IDQ1IDY5IDc3LjV0MTAwIDQ5LjV0MTA3IDI0dDEwNyA3cTMyIDAgNDkgLTJxNiAtNCAzMC41IC0yMXQzMyAtMjN0MzEgLTIzdDMyIC0yNS41dDI3LjUgLTI1LjV0MjYuNSAtMjkuNXQyMSAtMzAuNXQxNy41IC0zNC41dDkuNSAtMzZ0NC41IC00MC41ek0zODUgMjk0cS0yMzQgLTcgLTM4NSAtODV2NDMzcTEwMyAtMTE4IDI3MyAtMTE4IHEzMiAwIDcwIDVxLTIxIC02MSAtMjEgLTg2cTAgLTY3IDYzIC0xNDl6TTU1OCA4MDVxMCAtMTAwIC00My41IC0xNjAuNXQtMTQwLjUgLTYwLjVxLTUxIDAgLTk3IDI2dC03OCA2Ny41dC01NiA5My41dC0zNS41IDEwNHQtMTEuNSA5OXEwIDk2IDUxLjUgMTY1dDE0NC41IDY5cTY2IDAgMTE5IC00MXQ4NCAtMTA0dDQ3IC0xMzB0MTYgLTEyOHpNMTUzNiA4OTZ2LTczNnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtNDY4IHEzOSA3MyAzOSAxNTdxMCA2NiAtMjIgMTIyLjV0LTU1LjUgOTN0LTcyIDcxdC03MiA1OS41dC01NS41IDU0LjV0LTIyIDU5LjVxMCAzNiAyMyA2OHQ1NiA2MS41dDY1LjUgNjQuNXQ1NS41IDkzdDIzIDEzMXQtMjYuNSAxNDUuNXQtNzUuNSAxMTguNXEtNiA2IC0xNCAxMXQtMTIuNSA3LjV0LTEwIDkuNXQtMTAuNSAxN2gxMzVsMTM1IDY0aC00MzdxLTEzOCAwIC0yNDQuNSAtMzguNXQtMTgyLjUgLTEzMy41cTAgMTI2IDgxIDIxM3QyMDcgODdoOTYwIHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTZoLTI1NnYyNTZoLTEyOHYtMjU2aC0yNTZ2LTEyOGgyNTZ2LTI1NmgxMjh2MjU2aDI1NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkNTsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNODc2IDcxcTAgMjEgLTQuNSA0MC41dC05LjUgMzZ0LTE3LjUgMzQuNXQtMjEgMzAuNXQtMjYuNSAyOS41dC0yNy41IDI1LjV0LTMyIDI1LjV0LTMxIDIzdC0zMyAyM3QtMzAuNSAyMXEtMTcgMiAtNTAgMnEtNTQgMCAtMTA2IC03dC0xMDggLTI1dC05OCAtNDZ0LTY5IC03NXQtMjcgLTEwN3EwIC02OCAzNS41IC0xMjEuNXQ5MyAtODR0MTIwLjUgLTQ1LjV0MTI3IC0xNXE1OSAwIDExMi41IDEyLjV0MTAwLjUgMzl0NzQuNSA3My41IHQyNy41IDExMHpNNzU2IDkzM3EwIDYwIC0xNi41IDEyNy41dC00NyAxMzAuNXQtODQgMTA0dC0xMTkuNSA0MXEtOTMgMCAtMTQ0IC02OXQtNTEgLTE2NXEwIC00NyAxMS41IC05OXQzNS41IC0xMDR0NTYgLTkzLjV0NzggLTY3LjV0OTcgLTI2cTk3IDAgMTQwLjUgNjAuNXQ0My41IDE2MC41ek02MjUgMTQwOGg0MzdsLTEzNSAtNzloLTEzNXE3MSAtNDUgMTEwIC0xMjZ0MzkgLTE2OXEwIC03NCAtMjMgLTEzMS41dC01NiAtOTIuNXQtNjYgLTY0LjUgdC01NiAtNjF0LTIzIC02Ny41cTAgLTI2IDE2LjUgLTUxdDQzIC00OHQ1OC41IC00OHQ2NCAtNTUuNXQ1OC41IC02NnQ0MyAtODV0MTYuNSAtMTA2LjVxMCAtMTYwIC0xNDAgLTI4MnEtMTUyIC0xMzEgLTQyMCAtMTMxcS01OSAwIC0xMTkuNSAxMHQtMTIyIDMzLjV0LTEwOC41IDU4dC03NyA4OXQtMzAgMTIxLjVxMCA2MSAzNyAxMzVxMzIgNjQgOTYgMTEwLjV0MTQ1IDcxdDE1NSAzNnQxNTAgMTMuNXEtNjQgODMgLTY0IDE0OXEwIDEyIDIgMjMuNSB0NSAxOS41dDggMjEuNXQ3IDIxLjVxLTQwIC01IC03MCAtNXEtMTQ5IDAgLTI1NS41IDk4dC0xMDYuNSAyNDZxMCAxNDAgOTUgMjUwLjV0MjM0IDE0MS41cTk0IDIwIDE4NyAyMHpNMTY2NCAxMTUydi0xMjhoLTI1NnYtMjU2aC0xMjh2MjU2aC0yNTZ2MTI4aDI1NnYyNTZoMTI4di0yNTZoMjU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ2OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik03NjggMzg0aDM4NHY5NmgtMTI4djQ0OGgtMTE0bC0xNDggLTEzN2w3NyAtODBxNDIgMzcgNTUgNTdoMnYtMjg4aC0xMjh2LTk2ek0xMjgwIDY0MHEwIC03MCAtMjEgLTE0MnQtNTkuNSAtMTM0dC0xMDEuNSAtMTAxdC0xMzggLTM5dC0xMzggMzl0LTEwMS41IDEwMXQtNTkuNSAxMzR0LTIxIDE0MnQyMSAxNDJ0NTkuNSAxMzR0MTAxLjUgMTAxdDEzOCAzOXQxMzggLTM5dDEwMS41IC0xMDF0NTkuNSAtMTM0dDIxIC0xNDJ6TTE3OTIgMzg0IHY1MTJxLTEwNiAwIC0xODEgNzV0LTc1IDE4MWgtMTE1MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV2LTUxMnExMDYgMCAxODEgLTc1dDc1IC0xODFoMTE1MnEwIDEwNiA3NSAxODF0MTgxIDc1ek0xOTIwIDEyMTZ2LTExNTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNzkycS0yNiAwIC00NSAxOXQtMTkgNDV2MTE1MnEwIDI2IDE5IDQ1dDQ1IDE5aDE3OTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ3OyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1bC00NDggLTQ0OHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTloODk2cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkODsiIGhvcml6LWFkdi14PSIxMDI0IiBkPSJNMTAyNCAzMjBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGQ5OyIgaG9yaXotYWR2LXg9IjY0MCIgZD0iTTY0MCAxMDg4di04OTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBkYTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik01NzYgNjQwcTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djg5NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRiOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik0xNjAgMGg2MDh2MTE1MmgtNjQwdi0xMTIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjV6TTE1MzYgMzJ2MTEyMGgtNjQwdi0xMTUyaDYwOHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNjY0IDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEzNDRxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDEzNDRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGM7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZGQ7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTEwMjQgNDQ4cTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGRlOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTA7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgODI2di03OTRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjc5NHE0NCAtNDkgMTAxIC04N3EzNjIgLTI0NiA0OTcgLTM0NXE1NyAtNDIgOTIuNSAtNjUuNXQ5NC41IC00OHQxMTAgLTI0LjVoMWgxcTUxIDAgMTEwIDI0LjV0OTQuNSA0OHQ5Mi41IDY1LjVxMTcwIDEyMyA0OTggMzQ1cTU3IDM5IDEwMCA4N3pNMTc5MiAxMTIwcTAgLTc5IC00OSAtMTUxdC0xMjIgLTEyMyBxLTM3NiAtMjYxIC00NjggLTMyNXEtMTAgLTcgLTQyLjUgLTMwLjV0LTU0IC0zOHQtNTIgLTMyLjV0LTU3LjUgLTI3dC01MCAtOWgtMWgtMXEtMjMgMCAtNTAgOXQtNTcuNSAyN3QtNTIgMzIuNXQtNTQgMzh0LTQyLjUgMzAuNXEtOTEgNjQgLTI2MiAxODIuNXQtMjA1IDE0Mi41cS02MiA0MiAtMTE3IDExNS41dC01NSAxMzYuNXEwIDc4IDQxLjUgMTMwdDExOC41IDUyaDE0NzJxNjUgMCAxMTIuNSAtNDd0NDcuNSAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUxOyIgaG9yaXotYWR2LXg9IjEzNzkiIGQ9Ik0xMDE0IDk2MXExNzEgMCAyNjggLTg1LjV0OTcgLTI1NC41di01ODZxMCAtMTQgLTEwLjUgLTI0LjV0LTI0LjUgLTEwLjVoLTI1MnEtMTQgMCAtMjQuNSAxMC41dC0xMC41IDI0LjV2NTI5cTAgNzEgLTI2LjUgMTA0dC05NS41IDMzcS04OCAwIC0xMjMuNSAtNTEuNXQtMzUuNSAtMTQzLjV2LTQ3MXEwIC0xNCAtMTAuNSAtMjQuNXQtMjUuNSAtMTAuNWgtMjQ2cS0xNCAwIC0yNC41IDEwLjV0LTEwLjUgMjQuNXY4NjhxMCAxNCAxMC41IDI0LjUgdDI0LjUgMTAuNWgyMzlxMTMgMCAyMSAtNXQxMC41IC0xOC41dDMgLTE4dDAuNSAtMjIuNXE5MyA4NyAyNDYgODd6TTI5MCA5MzhxMTQgMCAyNC41IC0xMC41dDEwLjUgLTI0LjV2LTg2OHEwIC0xNCAtMTAuNSAtMjQuNXQtMjQuNSAtMTAuNWgtMjQ2cS0xNCAwIC0yNC41IDEwLjV0LTEwLjUgMjQuNXY4NjhxMCAxNCAxMC41IDI0LjV0MjQuNSAxMC41aDI0NnpNMTY3IDEzNzFxNjkgMCAxMTggLTQ5dDQ5IC0xMTh0LTQ5IC0xMTh0LTExOCAtNDkgdC0xMTggNDl0LTQ5IDExOHQ0OSAxMTh0MTE4IDQ5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUyOyIgZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxcS0xNzkgMCAtMzM2LjUgNzZ0LTI2NiAyMTN0LTE0Ny41IDMxMnEtMyAxNCA3IDI3cTkgMTIgMjUgMTJoMTk5cTIzIDAgMzAgLTIzcTUwIC0xNjIgMTg1IC0yNjEuNXQzMDQgLTk5LjVxMTA0IDAgMTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41dC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjUgdC0xOTguNSA0MC41cS05OCAwIC0xODggLTM1LjV0LTE2MCAtMTAxLjVsMTM3IC0xMzhxMzEgLTMwIDE0IC02OXEtMTcgLTQwIC01OSAtNDBoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDQyIDQwIDU5cTM5IDE3IDY5IC0xNGwxMzAgLTEyOXExMDcgMTAxIDI0NC41IDE1Ni41dDI4NC41IDU1LjVxMTU2IDAgMjk4IC02MXQyNDUgLTE2NHQxNjQgLTI0NXQ2MSAtMjk4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGUzOyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0xNzcxIDBxMCAtNTMgLTM3IC05MGwtMTA3IC0xMDhxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtMzYzIDM2NHEtMzggMzYgLTM4IDkwcTAgNTMgNDMgOTZsLTI1NiAyNTZsLTEyNiAtMTI2cS0xNCAtMTQgLTM0IC0xNHQtMzQgMTRxMiAtMiAxMi41IC0xMnQxMi41IC0xM3QxMCAtMTEuNXQxMCAtMTMuNXQ2IC0xMy41dDUuNSAtMTYuNXQxLjUgLTE4cTAgLTM4IC0yOCAtNjhxLTMgLTMgLTE2LjUgLTE4dC0xOSAtMjAuNSB0LTE4LjUgLTE2LjV0LTIyIC0xNS41dC0yMiAtOXQtMjYgLTQuNXEtNDAgMCAtNjggMjhsLTQwOCA0MDhxLTI4IDI4IC0yOCA2OHEwIDEzIDQuNSAyNnQ5IDIydDE1LjUgMjJ0MTYuNSAxOC41dDIwLjUgMTl0MTggMTYuNXEzMCAyOCA2OCAyOHExMCAwIDE4IC0xLjV0MTYuNSAtNS41dDEzLjUgLTZ0MTMuNSAtMTB0MTEuNSAtMTB0MTMgLTEyLjV0MTIgLTEyLjVxLTE0IDE0IC0xNCAzNHQxNCAzNGwzNDggMzQ4cTE0IDE0IDM0IDE0dDM0IC0xNCBxLTIgMiAtMTIuNSAxMnQtMTIuNSAxM3QtMTAgMTEuNXQtMTAgMTMuNXQtNiAxMy41dC01LjUgMTYuNXQtMS41IDE4cTAgMzggMjggNjhxMyAzIDE2LjUgMTh0MTkgMjAuNXQxOC41IDE2LjV0MjIgMTUuNXQyMiA5dDI2IDQuNXE0MCAwIDY4IC0yOGw0MDggLTQwOHEyOCAtMjggMjggLTY4cTAgLTEzIC00LjUgLTI2dC05IC0yMnQtMTUuNSAtMjJ0LTE2LjUgLTE4LjV0LTIwLjUgLTE5dC0xOCAtMTYuNXEtMzAgLTI4IC02OCAtMjggcS0xMCAwIC0xOCAxLjV0LTE2LjUgNS41dC0xMy41IDZ0LTEzLjUgMTB0LTExLjUgMTB0LTEzIDEyLjV0LTEyIDEyLjVxMTQgLTE0IDE0IC0zNHQtMTQgLTM0bC0xMjYgLTEyNmwyNTYgLTI1NnE0MyA0MyA5NiA0M3E1MiAwIDkxIC0zN2wzNjMgLTM2M3EzNyAtMzkgMzcgLTkxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGU0OyIgaG9yaXotYWR2LXg9IjE3OTIiIGQ9Ik0zODQgMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek01NzYgODMycTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMDA0IDM1MWwxMDEgMzgycTYgMjYgLTcuNSA0OC41dC0zOC41IDI5LjUgdC00OCAtNi41dC0zMCAtMzkuNWwtMTAxIC0zODJxLTYwIC01IC0xMDcgLTQzLjV0LTYzIC05OC41cS0yMCAtNzcgMjAgLTE0NnQxMTcgLTg5dDE0NiAyMHQ4OSAxMTdxMTYgNjAgLTYgMTE3dC03MiA5MXpNMTY2NCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgMTAyNHEwIDUzIC0zNy41IDkwLjUgdC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE0NzIgODMycTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNzkyIDM4NHEwIC0yNjEgLTE0MSAtNDgzcS0xOSAtMjkgLTU0IC0yOWgtMTQwMnEtMzUgMCAtNTQgMjkgcS0xNDEgMjIxIC0xNDEgNDgzcTAgMTgyIDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNODk2IDExNTJxLTIwNCAwIC0zODEuNSAtNjkuNXQtMjgyIC0xODcuNXQtMTA0LjUgLTI1NXEwIC0xMTIgNzEuNSAtMjEzLjV0MjAxLjUgLTE3NS41bDg3IC01MGwtMjcgLTk2cS0yNCAtOTEgLTcwIC0xNzJxMTUyIDYzIDI3NSAxNzFsNDMgMzhsNTcgLTZxNjkgLTggMTMwIC04cTIwNCAwIDM4MS41IDY5LjV0MjgyIDE4Ny41dDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwIHEwIC0xNzQgLTEyMCAtMzIxLjV0LTMyNiAtMjMzdC00NTAgLTg1LjVxLTcwIDAgLTE0NSA4cS0xOTggLTE3NSAtNDYwIC0yNDJxLTQ5IC0xNCAtMTE0IC0yMmgtNXEtMTUgMCAtMjcgMTAuNXQtMTYgMjcuNXYxcS0zIDQgLTAuNSAxMnQyIDEwdDQuNSA5LjVsNiA5dDcgOC41dDggOXE3IDggMzEgMzQuNXQzNC41IDM4dDMxIDM5LjV0MzIuNSA1MXQyNyA1OXQyNiA3NnEtMTU3IDg5IC0yNDcuNSAyMjB0LTkwLjUgMjgxcTAgMTc0IDEyMCAzMjEuNSB0MzI2IDIzM3Q0NTAgODUuNXQ0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNzA0IDExNTJxLTE1MyAwIC0yODYgLTUydC0yMTEuNSAtMTQxdC03OC41IC0xOTFxMCAtODIgNTMgLTE1OHQxNDkgLTEzMmw5NyAtNTZsLTM1IC04NHEzNCAyMCA2MiAzOWw0NCAzMWw1MyAtMTBxNzggLTE0IDE1MyAtMTRxMTUzIDAgMjg2IDUydDIxMS41IDE0MXQ3OC41IDE5MXQtNzguNSAxOTF0LTIxMS41IDE0MXQtMjg2IDUyek03MDQgMTI4MHExOTEgMCAzNTMuNSAtNjguNXQyNTYuNSAtMTg2LjV0OTQgLTI1N3QtOTQgLTI1NyB0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjRxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41IHQzNTMuNSA2OC41ek0xNTI2IDExMXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03cS01MCA3IC04NiAxNnEtMTU0IDQwIC0yNzggMTI4cS05MCAtMTYgLTE3NiAtMTZxLTI3MSAwIC00NzIgMTMycTU4IC00IDg4IC00cTE2MSAwIDMwOSA0NXQyNjQgMTI5IHExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlNzsiIGhvcml6LWFkdi14PSI4OTYiIGQ9Ik04ODUgOTcwcTE4IC0yMCA3IC00NGwtNTQwIC0xMTU3cS0xMyAtMjUgLTQyIC0yNXEtNCAwIC0xNCAycS0xNyA1IC0yNS41IDE5dC00LjUgMzBsMTk3IDgwOGwtNDA2IC0xMDFxLTQgLTEgLTEyIC0xcS0xOCAwIC0zMSAxMXEtMTggMTUgLTEzIDM5bDIwMSA4MjVxNCAxNCAxNiAyM3QyOCA5aDMyOHExOSAwIDMyIC0xMi41dDEzIC0yOS41cTAgLTggLTUgLTE4bC0xNzEgLTQ2M2wzOTYgOThxOCAyIDEyIDJxMTkgMCAzNCAtMTV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTg7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTE3OTIgMjg4di0zMjBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJoLTUxMnYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoOTZ2MTkyaC01MTJ2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMCBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJxMCA1MiAzOCA5MHQ5MCAzOGg1MTJ2MTkyaC05NnEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2di0xOTJoNTEycTUyIDAgOTAgLTM4dDM4IC05MHYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OCB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZTk7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTg5NiA3MDh2LTU4MHEwIC0xMDQgLTc2IC0xODB0LTE4MCAtNzZ0LTE4MCA3NnQtNzYgMTgwcTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXEwIC01MCAzOSAtODl0ODkgLTM5dDg5IDM5dDM5IDg5djU4MHEzMyAxMSA2NCAxMXQ2NCAtMTF6TTE2NjQgNjgxcTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXEtMTEgMCAtMjMgMTBxLTQ5IDQ2IC05MyA2OXQtMTAyIDIzcS02OCAwIC0xMjggLTM3dC0xMDMgLTk3IHEtNyAtMTAgLTE3LjUgLTI4dC0xNC41IC0yNHEtMTEgLTE3IC0yOCAtMTdxLTE4IDAgLTI5IDE3cS00IDYgLTE0LjUgMjR0LTE3LjUgMjhxLTQzIDYwIC0xMDIuNSA5N3QtMTI3LjUgMzd0LTEyNy41IC0zN3QtMTAyLjUgLTk3cS03IC0xMCAtMTcuNSAtMjh0LTE0LjUgLTI0cS0xMSAtMTcgLTI5IC0xN3EtMTcgMCAtMjggMTdxLTQgNiAtMTQuNSAyNHQtMTcuNSAyOHEtNDMgNjAgLTEwMyA5N3QtMTI4IDM3cS01OCAwIC0xMDIgLTIzdC05MyAtNjkgcS0xMiAtMTAgLTIzIC0xMHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41cTAgNSAxIDdxNDUgMTgzIDE3Mi41IDMxOS41dDI5OCAyMDQuNXQzNjAuNSA2OHExNDAgMCAyNzQuNSAtNDB0MjQ2LjUgLTExMy41dDE5NC41IC0xODd0MTE1LjUgLTI1MS41cTEgLTIgMSAtN3pNODk2IDE0MDh2LTk4cS00MiAyIC02NCAydC02NCAtMnY5OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWE7IiBob3Jpei1hZHYteD0iMTc5MiIgZD0iTTc2OCAtMTI4aDg5NnY2NDBoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtMzg0di0xMTUyek0xMDI0IDEzMTJ2NjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC03MDRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDcwNHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjgwIDY0MGgyOTlsLTI5OSAyOTl2LTI5OXpNMTc5MiA1MTJ2LTY3MnEwIC00MCAtMjggLTY4dC02OCAtMjggaC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjBoLTU0NHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGgxMDg4cTQwIDAgNjggLTI4dDI4IC02OHYtMzI4cTIxIC0xMyAzNiAtMjhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWI7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTczNiA5NjBxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41dC0yMi41IDkuNXQtOS41IDIyLjVxMCA0NiAtNTQgNzF0LTEwNiAyNXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41dDkuNSAyMi41dDIyLjUgOS41cTUwIDAgOTkuNSAtMTZ0ODcgLTU0dDM3LjUgLTkwek04OTYgOTYwcTAgNzIgLTM0LjUgMTM0dC05MCAxMDEuNXQtMTIzIDYydC0xMzYuNSAyMi41dC0xMzYuNSAtMjIuNXQtMTIzIC02MnQtOTAgLTEwMS41dC0zNC41IC0xMzQgcTAgLTEwMSA2OCAtMTgwcTEwIC0xMSAzMC41IC0zM3QzMC41IC0zM3ExMjggLTE1MyAxNDEgLTI5OGgyMjhxMTMgMTQ1IDE0MSAyOThxMTAgMTEgMzAuNSAzM3QzMC41IDMzcTY4IDc5IDY4IDE4MHpNMTAyNCA5NjBxMCAtMTU1IC0xMDMgLTI2OHEtNDUgLTQ5IC03NC41IC04N3QtNTkuNSAtOTUuNXQtMzQgLTEwNy41cTQ3IC0yOCA0NyAtODJxMCAtMzcgLTI1IC02NHEyNSAtMjcgMjUgLTY0cTAgLTUyIC00NSAtODFxMTMgLTIzIDEzIC00NyBxMCAtNDYgLTMxLjUgLTcxdC03Ny41IC0yNXEtMjAgLTQ0IC02MCAtNzB0LTg3IC0yNnQtODcgMjZ0LTYwIDcwcS00NiAwIC03Ny41IDI1dC0zMS41IDcxcTAgMjQgMTMgNDdxLTQ1IDI5IC00NSA4MXEwIDM3IDI1IDY0cS0yNSAyNyAtMjUgNjRxMCA1NCA0NyA4MnEtNCA1MCAtMzQgMTA3LjV0LTU5LjUgOTUuNXQtNzQuNSA4N3EtMTAzIDExMyAtMTAzIDI2OHEwIDk5IDQ0LjUgMTg0LjV0MTE3IDE0MnQxNjQgODl0MTg2LjUgMzIuNSB0MTg2LjUgLTMyLjV0MTY0IC04OXQxMTcgLTE0MnQ0NC41IC0xODQuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBlYzsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiAzNTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTEyIDAgLTI0IDEwbC0zMTkgMzIwcS05IDkgLTkgMjJxMCAxNCA5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMTM3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgODk2cTAgLTE0IC05IC0yM2wtMzIwIC0zMjBxLTkgLTkgLTIzIC05IHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MmgtMTM3NnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNzZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZWQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTEyODAgNjA4cTAgMTQgLTkgMjN0LTIzIDloLTIyNHYzNTJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zNTJoLTIyNHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjVxMCAtMTQgOSAtMjNsMzUyIC0zNTJxOSAtOSAyMyAtOXQyMyA5bDM1MSAzNTFxMTAgMTIgMTAgMjR6TTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODggcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGVlOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xMjgwIDY3MnEwIDE0IC05IDIzbC0zNTIgMzUycS05IDkgLTIzIDl0LTIzIC05bC0zNTEgLTM1MXEtMTAgLTEyIC0xMCAtMjRxMCAtMTQgOSAtMjN0MjMgLTloMjI0di0zNTJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXYzNTJoMjI0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE5MjAgMzg0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVoLTEwODggcS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMwIDcwIDI0MHQxODggMTY1cS0yIDMwIC0yIDQzcTAgMjEyIDE1MCAzNjJ0MzYyIDE1MHExNTYgMCAyODUuNSAtODd0MTg4LjUgLTIzMXE3MSA2MiAxNjYgNjJxMTA2IDAgMTgxIC03NXQ3NSAtMTgxcTAgLTc2IC00MSAtMTM4cTEzMCAtMzEgMjEzLjUgLTEzNS41dDgzLjUgLTIzOC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYwOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0zODQgMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTE0MDggMTMxcTAgLTEyMSAtNzMgLTE5MHQtMTk0IC02OWgtODc0cS0xMjEgMCAtMTk0IDY5dC03MyAxOTBxMCA2OCA1LjUgMTMxdDI0IDEzOHQ0Ny41IDEzMi41dDgxIDEwM3QxMjAgNjAuNXEtMjIgLTUyIC0yMiAtMTIwdi0yMDNxLTU4IC0yMCAtOTMgLTcwdC0zNSAtMTExcTAgLTgwIDU2IC0xMzZ0MTM2IC01NiB0MTM2IDU2dDU2IDEzNnEwIDYxIC0zNS41IDExMXQtOTIuNSA3MHYyMDNxMCA2MiAyNSA5M3ExMzIgLTEwNCAyOTUgLTEwNHQyOTUgMTA0cTI1IC0zMSAyNSAtOTN2LTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtODlxLTMyIC0yOSAtMzIgLTcxcTAgLTQwIDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkwdi04OXEtMzIgLTI5IC0zMiAtNzFxMCAtNDAgMjggLTY4IHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA2OCAtMzQuNSAxMjcuNXQtOTMuNSA5My41cTAgMTAgMC41IDQyLjV0MCA0OHQtMi41IDQxLjV0LTcgNDd0LTEzIDQwcTY4IC0xNSAxMjAgLTYwLjV0ODEgLTEwM3Q0Ny41IC0xMzIuNXQyNCAtMTM4dDUuNSAtMTMxek0xMDg4IDEwMjRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41IHQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYxOyIgaG9yaXotYWR2LXg9IjE0MDgiIGQ9Ik0xMjgwIDgzMnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggODMycTAgLTYyIC0zNS41IC0xMTF0LTkyLjUgLTcwdi0zOTVxMCAtMTU5IC0xMzEuNSAtMjcxLjV0LTMxNi41IC0xMTIuNXQtMzE2LjUgMTEyLjV0LTEzMS41IDI3MS41djEzMnEtMTY0IDIwIC0yNzQgMTI4dC0xMTAgMjUydjUxMnEwIDI2IDE5IDQ1dDQ1IDE5cTYgMCAxNiAtMnExNyAzMCA0NyA0OCB0NjUgMThxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV0LTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTMzIDAgLTY0IDE4di00MDJxMCAtMTA2IDk0IC0xODF0MjI2IC03NXQyMjYgNzV0OTQgMTgxdjQwMnEtMzEgLTE4IC02NCAtMThxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjVxMzUgMCA2NSAtMTh0NDcgLTQ4cTEwIDIgMTYgMnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTUxMnEwIC0xNDQgLTExMCAtMjUyIHQtMjc0IC0xMjh2LTEzMnEwIC0xMDYgOTQgLTE4MXQyMjYgLTc1dDIyNiA3NXQ5NCAxODF2Mzk1cS01NyAyMSAtOTIuNSA3MHQtMzUuNSAxMTFxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI4OCAxMTUydi0xMjgwaC02NHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2ODMycTAgOTIgNjYgMTU4dDE1OCA2Nmg2NHpNMTQwOCAxMTUydi0xMjgwaC0xMDI0djEyODBoMTI4djE2MHEwIDQwIDI4IDY4dDY4IDI4aDU3NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTE2MGgxMjh6TTE3OTIgOTI4di04MzJxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTY0djEyODBoNjRxOTIgMCAxNTggLTY2IHQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGYzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik04NDggLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTE2NjQgMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNDQ4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTQ0OHEtNTIgMCAtOTAgMzh0LTM4IDkwcTE5MCAxNjEgMjg3IDM5Ny41dDk3IDQ5OC41IHEwIDE2NSA5NiAyNjJ0MjY0IDExN3EtOCAxOCAtOCAzN3EwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMTkgLTggLTM3cTE2OCAtMjAgMjY0IC0xMTd0OTYgLTI2MnEwIC0yNjIgOTcgLTQ5OC41dDI4NyAtMzk3LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjQ7IiBob3Jpei1hZHYteD0iMTkyMCIgZD0iTTE2NjQgODk2cTAgODAgLTU2IDEzNnQtMTM2IDU2aC02NHYtMzg0aDY0cTgwIDAgMTM2IDU2dDU2IDEzNnpNMCAxMjhoMTc5MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzVoLTEyODBxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXpNMTg1NiA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtNjR2LTMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC03MDRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djczNnEwIDI2IDE5IDQ1IHQ0NSAxOWgxMTUycTE1OSAwIDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjU7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTY0MCAxNDcydi02NDBxMCAtNjEgLTM1LjUgLTExMXQtOTIuNSAtNzB2LTc3OXEwIC01MiAtMzggLTkwdC05MCAtMzhoLTEyOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjc3OXEtNTcgMjAgLTkyLjUgNzB0LTM1LjUgMTExdjY0MHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1djQxNnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDUgdDQ1IC0xOXQ0NSAxOXQxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xNDA4IDE0NzJ2LTE2MDBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHY1MTJoLTIyNHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djgwMHEwIDEzMiA5NCAyMjZ0MjI2IDk0aDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjY7IiBob3Jpei1hZHYteD0iMTI4MCIgZD0iTTEwMjQgMzUydi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTEwMjQgNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTEyOCAwaDEwMjR2NzY4aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTUxMnYtMTI4MHogTTc2OCA4OTZoMjk5bC0yOTkgMjk5di0yOTl6TTEyODAgNzY4di04MDBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMDg4cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDU0NHE0MCAwIDg4IC0yMHQ3NiAtNDhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjc7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTg5NiA5OTJ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTY0MCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgMTI0OHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXogTTg5NiAtMTI4aDM4NHYxNTM2aC0xMTUydi0xNTM2aDM4NHYyMjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgzMjBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjR6TTE0MDggMTQ3MnYtMTY2NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNjY0cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYwZjg7IiBob3Jpei1hZHYteD0iMTQwOCIgZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41eiBNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IE04OTYgLTEyOGgzODR2MTE1MmgtMjU2di0zMnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQ0OHEtNDAgMCAtNjggMjh0LTI4IDY4djMyaC0yNTZ2LTExNTJoMzg0djIyNHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDMyMHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTIyNHpNODk2IDEwNTZ2MzIwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NmgtMTI4djk2cTAgMTMgLTkuNSAyMi41IHQtMjIuNSA5LjVoLTY0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY5NmgxMjh2LTk2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTQwOCAxMDg4di0xMjgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyODBxMCAyNiAxOSA0NXQ0NSAxOWgzMjAgdjI4OHEwIDQwIDI4IDY4dDY4IDI4aDQ0OHE0MCAwIDY4IC0yOHQyOCAtNjh2LTI4OGgzMjBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGY5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik02NDAgMTI4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTQgLTIgLTIyIC05bC0xOTUgLTE5NXEtNyAtMTIgLTkgLTIydi0zMHpNMTUzNiAxMjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41IHQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDgwMHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMjI0djIyNHEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMjI0aC0yMjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDIyNHYtMjI0cTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3YyMjRoMjI0cTE0IDAgMjMgOXQ5IDIzek0xOTIwIDEzNDR2LTExNTIgcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkycTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTM4NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXY0MTZxMCAyNiAxMyA1OHQzMiA1MWwxOTggMTk4cTE5IDE5IDUxIDMydDU4IDEzaDE2MHYzMjBxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYTsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTI4MCA0MTZ2MTkycTAgMTQgLTkgMjN0LTIzIDloLTIyNHYyMjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTIyNGgtMjI0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTIyNHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2MjI0aDIyNHExNCAwIDIzIDl0OSAyM3pNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI1NiAxMTUydi0xMjgwaC0zMiBxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoMzJ6TTE0NDAgMTE1MnYtMTI4MGgtMTA4OHYxMjgwaDE2MHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTYwek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0zMnYxMjgwaDMycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGZiOyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNjMyIDgwMHEyNjEgLTU4IDI4NyAtOTNsMSAtM3EtMSAtMzIgLTI4OCAtOTZsLTM1MiAtMzJsLTIyNCAtNjRoLTY0bC0yOTMgLTM1Mmg2OXEyNiAwIDQ1IC00LjV0MTkgLTExLjV0LTE5IC0xMS41dC00NSAtNC41aC05NmgtMTYwaC02NHYzMmg2NHY0MTZoLTE2MGwtMTkyIC0yMjRoLTk2bC0zMiAzMnYxOTJoMzJ2MzJoMTI4djhsLTE5MiAyNHYxMjhsMTkyIDI0djhoLTEyOHYzMmgtMzJ2MTkybDMyIDMyaDk2bDE5MiAtMjI0aDE2MHY0MTYgaC02NHYzMmg2NGgxNjBoOTZxMjYgMCA0NSAtNC41dDE5IC0xMS41dC0xOSAtMTEuNXQtNDUgLTQuNWgtNjlsMjkzIC0zNTJoNjRsMjI0IC02NHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmYzsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNNjQwIDY0MHYzODRoLTI1NnYtMTYwcTAgLTQ1IDIgLTc2dDcuNSAtNTYuNXQxNC41IC00MHQyMyAtMjYuNXQzMy41IC0xNS41dDQ1IC03LjV0NTggLTIuNXQ3Mi41IDAuNXpNMTY2NCAxOTJ2LTE5MmgtMTE1MnYxOTJsMTI4IDE5MmgtOTdxLTIxMSAwIC0zMTMgMTAyLjV0LTEwMiAzMTQuNXYyODdsLTY0IDY0bDMyIDEyOGg0ODBsMzIgMTI4aDk2MGwzMiAtMTkybC02NCAtMzJ2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjBmZDsiIGQ9Ik0xMjgwIDE5MnY4OTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTUxMnYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di04OTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYzMjBoNTEydi0zMjBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiAxMTIwdi05NjAgcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMGZlOyIgZD0iTTEyODAgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTMyMHYzMjBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0zMjBoLTMyMHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDMyMHYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDMyMHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDExMjB2LTk2MCBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDA7IiBob3Jpei1hZHYteD0iMTAyNCIgZD0iTTYyNyAxNjBxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzek0xMDExIDE2MHEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNDY2IDQ2NnEtMTAgMTAgLTEwIDIzIHQxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3QtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTAxOyIgaG9yaXotYWR2LXg9IjEwMjQiIGQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzek05NzkgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjMgbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwMjsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNMTA3NSAyMjRxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3pNMTA3NSA2MDhxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTM5MyAzOTNsLTM5MyAtMzkzIHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMDM7IiBob3Jpei1hZHYteD0iMTE1MiIgZD0iTTEwNzUgNjcycTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6TTEwNzUgMTA1NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjMgdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGwzOTMgLTM5M2wzOTMgMzkzcTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNDsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik02MjcgOTkycTAgLTEzIC0xMCAtMjNsLTM5MyAtMzkzbDM5MyAtMzkzcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwNTsiIGhvcml6LWFkdi14PSI2NDAiIGQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA2OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDM1MnEwIC0xMyAtMTAgLTIzbC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMzkzIDM5M2wtMzkzIC0zOTNxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA3OyIgaG9yaXotYWR2LXg9IjExNTIiIGQ9Ik0xMDc1IDgwMHEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDM5MyAtMzkzbDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA4OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzkyIDU0NHY4MzJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtODMycTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xOTIwIDEzNzZ2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTU0NHEwIC0zNyAxNiAtNzcuNXQzMiAtNzF0MTYgLTQzLjVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5IHQtMTkgNDVxMCAxNCAxNiA0NHQzMiA3MHQxNiA3OGgtNTQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwcTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTA5OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik00MTYgMjU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y3MDRxMCA2NiA0NyAxMTN0MTEzIDQ3aDEwODhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTcwNHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTA4OHpNMzg0IDExMjB2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDEwODhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY3MDRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xMDg4cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXogTTE3NjAgMTkyaDE2MHYtOTZxMCAtNDAgLTQ3IC02OHQtMTEzIC0yOGgtMTYwMHEtNjYgMCAtMTEzIDI4dC00NyA2OHY5NmgxNjBoMTYwMHpNMTA0MCA5NnExNiAwIDE2IDE2dC0xNiAxNmgtMTYwcS0xNiAwIC0xNiAtMTZ0MTYgLTE2aDE2MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYTsiIGhvcml6LWFkdi14PSIxMTUyIiBkPSJNNjQwIDEyOHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjQgMjg4djk2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTgzMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDgzMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMTUyIDEyNDh2LTEwODhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTgzMiBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEwODhxMCA2NiA0NyAxMTN0MTEzIDQ3aDgzMnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYjsiIGhvcml6LWFkdi14PSI3NjgiIGQ9Ik00NjQgMTI4cTAgMzMgLTIzLjUgNTYuNXQtNTYuNSAyMy41dC01Ni41IC0yMy41dC0yMy41IC01Ni41dDIzLjUgLTU2LjV0NTYuNSAtMjMuNXQ1Ni41IDIzLjV0MjMuNSA1Ni41ek02NzIgMjg4djcwNHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTUxMnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTcwNHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDUxMnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek00ODAgMTEzNiBxMCAxNiAtMTYgMTZoLTE2MHEtMTYgMCAtMTYgLTE2dDE2IC0xNmgxNjBxMTYgMCAxNiAxNnpNNzY4IDExNTJ2LTEwMjRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMDI0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjEwYzsiIGQ9Ik0xMjgwIDY0MHEwIDEwNCAtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41dC0xOTguNSAtNDAuNXQtMTYzLjUgLTEwOS41dC0xMDkuNSAtMTYzLjV0LTQwLjUgLTE5OC41dDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjV0MTk4LjUgLTQwLjV0MTk4LjUgNDAuNXQxNjMuNSAxMDkuNXQxMDkuNSAxNjMuNXQ0MC41IDE5OC41ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjUgdC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGQ7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCA1NzZ2LTM4NHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NmgtMzg0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnY3MDRxMCAxMDQgNDAuNSAxOTguNXQxMDkuNSAxNjMuNXQxNjMuNSAxMDkuNXQxOTguNSA0MC41aDY0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNjRxLTEwNiAwIC0xODEgLTc1dC03NSAtMTgxdi0zMnEwIC00MCAyOCAtNjh0NjggLTI4aDIyNHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnogTTE2NjQgNTc2di0zODRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTM4NHEtODAgMCAtMTM2IDU2dC01NiAxMzZ2NzA0cTAgMTA0IDQwLjUgMTk4LjV0MTA5LjUgMTYzLjV0MTYzLjUgMTA5LjV0MTk4LjUgNDAuNWg2NHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtMzJxMCAtNDAgMjggLTY4dDY4IC0yOGgyMjRxODAgMCAxMzYgLTU2dDU2IC0xMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGYxMGU7IiBob3Jpei1hZHYteD0iMTY2NCIgZD0iTTc2OCAxMjE2di03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2ek0xNjY0IDEyMTYgdi03MDRxMCAtMTA0IC00MC41IC0xOTguNXQtMTA5LjUgLTE2My41dC0xNjMuNSAtMTA5LjV0LTE5OC41IC00MC41aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0cTEwNiAwIDE4MSA3NXQ3NSAxODF2MzJxMCA0MCAtMjggNjh0LTY4IDI4aC0yMjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djM4NHEwIDgwIDU2IDEzNnQxMzYgNTZoMzg0cTgwIDAgMTM2IC01NnQ1NiAtMTM2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTEwOyIgaG9yaXotYWR2LXg9IjE1NjgiIGQ9Ik00OTYgMTkycTAgLTYwIC00Mi41IC0xMDJ0LTEwMS41IC00MnEtNjAgMCAtMTAyIDQydC00MiAxMDJ0NDIgMTAydDEwMiA0MnE1OSAwIDEwMS41IC00MnQ0Mi41IC0xMDJ6TTkyOCAwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMzIwIDY0MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N3QtMTEzIDQ3dC00NyAxMTMgdDQ3IDExM3QxMTMgNDd0MTEzIC00N3Q0NyAtMTEzek0xMzYwIDE5MnEwIC00NiAtMzMgLTc5dC03OSAtMzN0LTc5IDMzdC0zMyA3OXQzMyA3OXQ3OSAzM3Q3OSAtMzN0MzMgLTc5ek01MjggMTA4OHEwIC03MyAtNTEuNSAtMTI0LjV0LTEyNC41IC01MS41dC0xMjQuNSA1MS41dC01MS41IDEyNC41dDUxLjUgMTI0LjV0MTI0LjUgNTEuNXQxMjQuNSAtNTEuNXQ1MS41IC0xMjQuNXpNOTkyIDEyODBxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTYgdC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTUzNiA2NDBxMCAtNDAgLTI4IC02OHQtNjggLTI4dC02OCAyOHQtMjggNjh0MjggNjh0NjggMjh0NjggLTI4dDI4IC02OHpNMTMyOCAxMDg4cTAgLTMzIC0yMy41IC01Ni41dC01Ni41IC0yMy41dC01Ni41IDIzLjV0LTIzLjUgNTYuNXQyMy41IDU2LjV0NTYuNSAyMy41dDU2LjUgLTIzLjV0MjMuNSAtNTYuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMTsiIGQ9Ik0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExMjsiIGhvcml6LWFkdi14PSIxNzkyIiBkPSJNMTc5MiA0MTZxMCAtMTY2IC0xMjcgLTQ1MXEtMyAtNyAtMTAuNSAtMjR0LTEzLjUgLTMwdC0xMyAtMjJxLTEyIC0xNyAtMjggLTE3cS0xNSAwIC0yMy41IDEwdC04LjUgMjVxMCA5IDIuNSAyNi41dDIuNSAyMy41cTUgNjggNSAxMjNxMCAxMDEgLTE3LjUgMTgxdC00OC41IDEzOC41dC04MCAxMDF0LTEwNS41IDY5LjV0LTEzMyA0Mi41dC0xNTQgMjEuNXQtMTc1LjUgNmgtMjI0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOSBsLTUxMiA1MTJxLTE5IDE5IC0xOSA0NXQxOSA0NWw1MTIgNTEycTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTI1NmgyMjRxNzEzIDAgODc1IC00MDNxNTMgLTEzNCA1MyAtMzMzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTEzOyIgaG9yaXotYWR2LXg9IjE2NjQiIGQ9Ik02NDAgMzIwcTAgLTQwIC0xMi41IC04MnQtNDMgLTc2dC03Mi41IC0zNHQtNzIuNSAzNHQtNDMgNzZ0LTEyLjUgODJ0MTIuNSA4MnQ0MyA3NnQ3Mi41IDM0dDcyLjUgLTM0dDQzIC03NnQxMi41IC04MnpNMTI4MCAzMjBxMCAtNDAgLTEyLjUgLTgydC00MyAtNzZ0LTcyLjUgLTM0dC03Mi41IDM0dC00MyA3NnQtMTIuNSA4MnQxMi41IDgydDQzIDc2dDcyLjUgMzR0NzIuNSAtMzR0NDMgLTc2dDEyLjUgLTgyek0xNDQwIDMyMCBxMCAxMjAgLTY5IDIwNHQtMTg3IDg0cS00MSAwIC0xOTUgLTIxcS03MSAtMTEgLTE1NyAtMTF0LTE1NyAxMXEtMTUyIDIxIC0xOTUgMjFxLTExOCAwIC0xODcgLTg0dC02OSAtMjA0cTAgLTg4IDMyIC0xNTMuNXQ4MSAtMTAzdDEyMiAtNjB0MTQwIC0yOS41dDE0OSAtN2gxNjhxODIgMCAxNDkgN3QxNDAgMjkuNXQxMjIgNjB0ODEgMTAzdDMyIDE1My41ek0xNjY0IDQ5NnEwIC0yMDcgLTYxIC0zMzFxLTM4IC03NyAtMTA1LjUgLTEzM3QtMTQxIC04NiB0LTE3MCAtNDcuNXQtMTcxLjUgLTIydC0xNjcgLTQuNXEtNzggMCAtMTQyIDN0LTE0Ny41IDEyLjV0LTE1Mi41IDMwdC0xMzcgNTEuNXQtMTIxIDgxdC04NiAxMTVxLTYyIDEyMyAtNjIgMzMxcTAgMjM3IDEzNiAzOTZxLTI3IDgyIC0yNyAxNzBxMCAxMTYgNTEgMjE4cTEwOCAwIDE5MCAtMzkuNXQxODkgLTEyMy41cTE0NyAzNSAzMDkgMzVxMTQ4IDAgMjgwIC0zMnExMDUgODIgMTg3IDEyMXQxODkgMzlxNTEgLTEwMiA1MSAtMjE4IHEwIC04NyAtMjcgLTE2OHExMzYgLTE2MCAxMzYgLTM5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZjExNDsiIGhvcml6LWFkdi14PSIxNjY0IiBkPSJNMTUzNiAyMjR2NzA0cTAgNDAgLTI4IDY4dC02OCAyOGgtNzA0cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4di05NjBxMCAtNDAgMjggLTY4dDY4IC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6TTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwIHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hmMTE1OyIgaG9yaXotYWR2LXg9IjE5MjAiIGQ9Ik0xNzgxIDYwNXEwIDM1IC01MyAzNWgtMTA4OHEtNDAgMCAtODUuNSAtMjEuNXQtNzEuNSAtNTIuNWwtMjk0IC0zNjNxLTE4IC0yNCAtMTggLTQwcTAgLTM1IDUzIC0zNWgxMDg4cTQwIDAgODYgMjJ0NzEgNTNsMjk0IDM2M3ExOCAyMiAxOCAzOXpNNjQwIDc2OGg3Njh2MTYwcTAgNDAgLTI4IDY4dC02OCAyOGgtNTc2cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4IHYtODUzbDI1NiAzMTVxNDQgNTMgMTE2IDg3LjV0MTQwIDM0LjV6TTE5MDkgNjA1cTAgLTYyIC00NiAtMTIwbC0yOTUgLTM2M3EtNDMgLTUzIC0xMTYgLTg3LjV0LTE0MCAtMzQuNWgtMTA4OHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDU0NHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMTYwaDE5MnE1NCAwIDk5IC0yNC41dDY3IC03MC41cTE1IC0zMiAxNSAtNjh6ICIgLz4KKzwvZm9udD4KKzwvZGVmcz48L3N2Zz4gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LnR0ZiBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2MTcyNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZm9udGF3ZXNvbWUtd2ViZm9udC50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2ZvbnRhd2Vzb21lLXdlYmZvbnQud29mZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg5YWUwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9mb250YXdlc29tZS13ZWJmb250LndvZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzYmQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnN2ZyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2OTQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcKQEAgLTAsMCArMSwyMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgPgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorPG1ldGFkYXRhPjwvbWV0YWRhdGE+Cis8ZGVmcz4KKzxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA+Cis8Zm9udC1mYWNlIHVuaXRzLXBlci1lbT0iMTIwMCIgYXNjZW50PSI5NjAiIGRlc2NlbnQ9Ii0yNDAiIC8+Cis8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iNTAwIiAvPgorPGdseXBoIC8+Cis8Z2x5cGggLz4KKzxnbHlwaCB1bmljb2RlPSImI3hkOyIgLz4KKzxnbHlwaCB1bmljb2RlPSIgIiAvPgorPGdseXBoIHVuaWNvZGU9IioiIGQ9Ik0xMDAgNTAwdjIwMGgyNTlsLTE4MyAxODNsMTQxIDE0MWwxODMgLTE4M3YyNTloMjAwdi0yNTlsMTgzIDE4M2wxNDEgLTE0MWwtMTgzIC0xODNoMjU5di0yMDBoLTI1OWwxODMgLTE4M2wtMTQxIC0xNDFsLTE4MyAxODN2LTI1OWgtMjAwdjI1OWwtMTgzIC0xODNsLTE0MSAxNDFsMTgzIDE4M2gtMjU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSIrIiBkPSJNMCA0MDB2MzAwaDQwMHY0MDBoMzAwdi00MDBoNDAwdi0zMDBoLTQwMHYtNDAwaC0zMDB2NDAwaC00MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGEwOyIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAwOyIgaG9yaXotYWR2LXg9IjY1MiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMDAxOyIgaG9yaXotYWR2LXg9IjEzMDQiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAwMzsiIGhvcml6LWFkdi14PSIxMzA0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDQ7IiBob3Jpei1hZHYteD0iNDM0IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI2IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDY7IiBob3Jpei1hZHYteD0iMjE3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDc7IiBob3Jpei1hZHYteD0iMjE3IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYzIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMDk7IiBob3Jpei1hZHYteD0iMjYwIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDIwMGE7IiBob3Jpei1hZHYteD0iNzIiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjA1ZjsiIGhvcml6LWFkdi14PSIzMjYiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjBhYzsiIGQ9Ik0xMDAgNTAwbDEwMCAxMDBoMTEzcTAgNDcgNSAxMDBoLTIxOGwxMDAgMTAwaDEzNXEzNyAxNjcgMTEyIDI1N3ExMTcgMTQxIDI5NyAxNDFxMjQyIDAgMzU0IC0xODlxNjAgLTEwMyA2NiAtMjA5aC0xODFxMCA1NSAtMjUuNSA5OXQtNjMuNSA2OHQtNzUgMzYuNXQtNjcgMTIuNXEtMjQgMCAtNTIuNSAtMTB0LTYyLjUgLTMydC02NS41IC02N3QtNTAuNSAtMTA3aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNDYgLTYgLTEwMGg0MDZsLTEwMCAtMTAwIGgtMzAwcTkgLTc0IDMzIC0xMzJ0NTIuNSAtOTF0NjIgLTU0LjV0NTkgLTI5dDQ2LjUgLTcuNXEyOSAwIDY2IDEzdDc1IDM3dDYzLjUgNjcuNXQyNS41IDk2LjVoMTc0cS0zMSAtMTcyIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDUgMCAtMzI0IDE1OHEtMzYgNDYgLTY5IDEzMS41dC00NSAyMDUuNWgtMjE3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3gyMjEyOyIgZD0iTTIwMCA0MDBoOTAwdjMwMGgtOTAwdi0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNLTE0IDQ5NHEwIC04MCA1Ni41IC0xMzd0MTM1LjUgLTU3aDc1MHExMjAgMCAyMDUgODZ0ODUgMjA4cTAgMTIwIC04NSAyMDYuNXQtMjA1IDg2LjVxLTQ2IDAgLTkwIC0xNHEtNDQgOTcgLTEzNC41IDE1Ni41dC0yMDAuNSA1OS41cS0xNTIgMCAtMjYwIC0xMDcuNXQtMTA4IC0yNjAuNXEwIC0yNSAyIC0zN3EtNjYgLTE0IC0xMDguNSAtNjcuNXQtNDIuNSAtMTIyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeDI3MDk7IiBkPSJNMCAxMDBsNDAwIDQwMGwyMDAgLTIwMGwyMDAgMjAwbDQwMCAtNDAwaC0xMjAwek0wIDMwMHY2MDBsMzAwIC0zMDB6TTAgMTEwMGw2MDAgLTYwM2w2MDAgNjAzaC0xMjAwek05MDAgNjAwbDMwMCAzMDB2LTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0tMTMgLTEzbDMzMyAxMTJsLTIyMyAyMjN6TTE4NyA0MDNsMjE0IC0yMTRsNjE0IDYxNGwtMjE0IDIxNHpNODg3IDExMDNsMjE0IC0yMTRsOTkgOTJxMTMgMTMgMTMgMzIuNXQtMTMgMzMuNWwtMTUzIDE1M3EtMTUgMTMgLTMzIDEzdC0zMyAtMTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDA7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDAxOyIgZD0iTTAgMTIwMGgxMjAwbC01MDAgLTU1MHYtNTUwaDMwMHYtMTAwaC04MDB2MTAwaDMwMHY1NTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDI7IiBkPSJNMTQgODRxMTggLTU1IDg2IC03NS41dDE0NyA1LjVxNjUgMjEgMTA5IDY5dDQ0IDkwdjYwNmw2MDAgMTU1di01MjFxLTY0IDE2IC0xMzggLTdxLTc5IC0yNiAtMTIyLjUgLTgzdC0yNS41IC0xMTFxMTcgLTU1IDg1LjUgLTc1LjV0MTQ3LjUgNC41cTcwIDIzIDExMS41IDYzLjV0NDEuNSA5NS41djg4MXEwIDEwIC03IDE1LjV0LTE3IDIuNWwtNzUyIC0xOTNxLTEwIC0zIC0xNyAtMTIuNXQtNyAtMTkuNXYtNjg5cS02NCAxNyAtMTM4IC03IHEtNzkgLTI1IC0xMjIuNSAtODJ0LTI1LjUgLTExMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMzsiIGQ9Ik0yMyA2OTNxMCAyMDAgMTQyIDM0MnQzNDIgMTQydDM0MiAtMTQydDE0MiAtMzQycTAgLTE0MiAtNzggLTI2MWwzMDAgLTMwMHE3IC04IDcgLTE4dC03IC0xOGwtMTA5IC0xMDlxLTggLTcgLTE4IC03dC0xOCA3bC0zMDAgMzAwcS0xMTkgLTc4IC0yNjEgLTc4cS0yMDAgMCAtMzQyIDE0MnQtMTQyIDM0MnpNMTc2IDY5M3EwIC0xMzYgOTcgLTIzM3QyMzQgLTk3dDIzMy41IDk2LjV0OTYuNSAyMzMuNXQtOTYuNSAyMzMuNXQtMjMzLjUgOTYuNSB0LTIzNCAtOTd0LTk3IC0yMzN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNMTAwIDc4NHEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQuNSA2NHQxMTkgMjAuNXQxMjAgLTM4LjV0MTA0LjUgLTEwNC41cTQ4IDY5IDEwOS41IDEwNXQxMjEuNSAzOHQxMTguNSAtMjAuNXQxMDIuNSAtNjR0NzEgLTEwMC41dDI3IC0xMjNxMCAtNTcgLTMzLjUgLTExNy41dC05NCAtMTI0LjV0LTEyNi41IC0xMjcuNXQtMTUwIC0xNTIuNXQtMTQ2IC0xNzRxLTYyIDg1IC0xNDUuNSAxNzR0LTE0OS41IDE1Mi41dC0xMjYuNSAxMjcuNSB0LTk0IDEyNC41dC0zMy41IDExNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA2OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA3OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxek0yMzcgNzAwbDE5NiAtMTQybC03MyAtMjI2bDE5MiAxNDBsMTk1IC0xNDFsLTc0IDIyOWwxOTMgMTQwaC0yMzVsLTc3IDIxMWwtNzggLTIxMWgtMjM5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA4OyIgZD0iTTAgMHYxNDNsNDAwIDI1N3YxMDBxLTM3IDAgLTY4LjUgNzQuNXQtMzEuNSAxMjUuNXYyMDBxMCAxMjQgODggMjEydDIxMiA4OHQyMTIgLTg4dDg4IC0yMTJ2LTIwMHEwIC01MSAtMzEuNSAtMTI1LjV0LTY4LjUgLTc0LjV2LTEwMGw0MDAgLTI1N3YtMTQzaC0xMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDA5OyIgZD0iTTAgMHYxMTAwaDEyMDB2LTExMDBoLTEyMDB6TTEwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA1MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA3MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTMwMCAxMDBoNjAwdjQwMGgtNjAwdi00MDB6TTMwMCA2MDBoNjAwdjQwMGgtNjAwdi00MDB6TTEwMDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAweiBNMTAwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMDAgNTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAwIDcwMGgxMDB2MTAwaC0xMDB2LTEwMHpNMTAwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNMCA1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDY1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCA2NTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTE7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTgwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTI7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYyMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTIwMHpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTM7IiBkPSJNMjkgNDU0bDQxOSAtNDIwbDgxOCA4MjBsLTIxMiAyMTJsLTYwNyAtNjA3bC0yMDYgMjA3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE0OyIgZD0iTTEwNiAzMThsMjgyIDI4MmwtMjgyIDI4MmwyMTIgMjEybDI4MiAtMjgybDI4MiAyODJsMjEyIC0yMTJsLTI4MiAtMjgybDI4MiAtMjgybC0yMTIgLTIxMmwtMjgyIDI4MmwtMjgyIC0yODJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNMjMgNjkzcTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDIgLTc4IC0yNjFsMzAwIC0zMDBxNyAtOCA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC03IC0xOCAtN3QtMTggN2wtMzAwIDMwMHEtMTE5IC03OCAtMjYxIC03OHEtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTNxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5Ni41dDk2LjUgMjMzLjV0LTk2LjUgMjMzLjV0LTIzMy41IDk2LjUgdC0yMzQgLTk3dC05NyAtMjMzek0zMDAgNjAwdjIwMGgxMDB2MTAwaDIwMHYtMTAwaDEwMHYtMjAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDE2OyIgZD0iTTIzIDY5NHEwIDIwMCAxNDIgMzQydDM0MiAxNDJ0MzQyIC0xNDJ0MTQyIC0zNDJxMCAtMTQxIC03OCAtMjYybDMwMCAtMjk5cTcgLTcgNyAtMTh0LTcgLTE4bC0xMDkgLTEwOXEtOCAtOCAtMTggLTh0LTE4IDhsLTMwMCAyOTlxLTEyMCAtNzcgLTI2MSAtNzdxLTIwMCAwIC0zNDIgMTQydC0xNDIgMzQyek0xNzYgNjk0cTAgLTEzNiA5NyAtMjMzdDIzNCAtOTd0MjMzLjUgOTd0OTYuNSAyMzN0LTk2LjUgMjMzdC0yMzMuNSA5N3QtMjM0IC05NyB0LTk3IC0yMzN6TTMwMCA2MDFoNDAwdjIwMGgtNDAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMTc7IiBkPSJNMjMgNjAwcTAgMTgzIDEwNSAzMzF0MjcyIDIxMHYtMTY2cS0xMDMgLTU1IC0xNjUgLTE1NXQtNjIgLTIyMHEwIC0xNzcgMTI1IC0zMDJ0MzAyIC0xMjV0MzAyIDEyNXQxMjUgMzAycTAgMTIwIC02MiAyMjB0LTE2NSAxNTV2MTY2cTE2NyAtNjIgMjcyIC0yMTB0MTA1IC0zMzFxMCAtMTE4IC00NS41IC0yMjQuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjQuNSAtNDUuNXQtMjI0LjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjQuNSB6TTUwMCA3NTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDEwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2NDAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxODsiIGQ9Ik0xMDAgMWgyMDB2MzAwaC0yMDB2LTMwMHpNNDAwIDF2NTAwaDIwMHYtNTAwaC0yMDB6TTcwMCAxdjgwMGgyMDB2LTgwMGgtMjAwek0xMDAwIDF2MTIwMGgyMDB2LTEyMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAxOTsiIGQ9Ik0yNiA2MDFxMCAtMzMgNiAtNzRsMTUxIC0zOGwyIC02cTE0IC00OSAzOCAtOTNsMyAtNWwtODAgLTEzNHE0NSAtNTkgMTA1IC0xMDVsMTMzIDgxbDUgLTNxNDUgLTI2IDk0IC0zOWw1IC0ybDM4IC0xNTFxNDAgLTUgNzQgLTVxMjcgMCA3NCA1bDM4IDE1MWw2IDJxNDYgMTMgOTMgMzlsNSAzbDEzNCAtODFxNTYgNDQgMTA0IDEwNWwtODAgMTM0bDMgNXEyNCA0NCAzOSA5M2wxIDZsMTUyIDM4cTUgNDAgNSA3NHEwIDI4IC01IDczbC0xNTIgMzggbC0xIDZxLTE2IDUxIC0zOSA5M2wtMyA1bDgwIDEzNHEtNDQgNTggLTEwNCAxMDVsLTEzNCAtODFsLTUgM3EtNDUgMjUgLTkzIDM5bC02IDFsLTM4IDE1MnEtNDAgNSAtNzQgNXEtMjcgMCAtNzQgLTVsLTM4IC0xNTJsLTUgLTFxLTUwIC0xNCAtOTQgLTM5bC01IC0zbC0xMzMgODFxLTU5IC00NyAtMTA1IC0xMDVsODAgLTEzNGwtMyAtNXEtMjUgLTQ3IC0zOCAtOTNsLTIgLTZsLTE1MSAtMzhxLTYgLTQ4IC02IC03M3pNMzg1IDYwMSBxMCA4OCA2MyAxNTF0MTUyIDYzdDE1MiAtNjN0NjMgLTE1MXEwIC04OSAtNjMgLTE1MnQtMTUyIC02M3QtMTUyIDYzdC02MyAxNTJ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNMTAwIDEwMjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgyNzVxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMSAtNyAtMTh0LTE4IC03aC0xMDUwcS0xMSAwIC0xOCA3dC03IDE4ek0yMDAgMTAwdjgwMGg5MDB2LTgwMHEwIC00MSAtMjkuNSAtNzF0LTcwLjUgLTMwaC03MDBxLTQxIDAgLTcwLjUgMzAgdC0yOS41IDcxek0zMDAgMTAwaDEwMHY3MDBoLTEwMHYtNzAwek01MDAgMTAwaDEwMHY3MDBoLTEwMHYtNzAwek01MDAgMTEwMGgzMDB2MTAwaC0zMDB2LTEwMHpNNzAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNOTAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xIDYwMWw2NTYgNjQ0bDY0NCAtNjQ0aC0yMDB2LTYwMGgtMzAwdjQwMGgtMzAwdi00MDBoLTMwMHY2MDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMjsiIGQ9Ik0xMDAgMjV2MTE1MHEwIDExIDcgMTh0MTggN2g0NzV2LTUwMGg0MDB2LTY3NXEwIC0xMSAtNyAtMTh0LTE4IC03aC04NTBxLTExIDAgLTE4IDd0LTcgMTh6TTcwMCA4MDB2MzAwbDMwMCAtMzAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek01MDAgNTAwdjQwMGgxMDAgdi0zMDBoMjAwdi0xMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNDsiIGQ9Ik0tMTAwIDBsNDMxIDEyMDBoMjA5bC0yMSAtMzAwaDE2MmwtMjAgMzAwaDIwOGw0MzEgLTEyMDBoLTUzOGwtNDEgNDAwaC0yNDJsLTQwIC00MDBoLTUzOXpNNDg4IDUwMGgyMjRsLTI3IDMwMGgtMTcweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTAgMHY0MDBoNDkwbC0yOTAgMzAwaDIwMHY1MDBoMzAwdi01MDBoMjAwbC0yOTAgLTMwMGg0OTB2LTQwMGgtMTEwMHpNODEzIDIwMGgxNzV2MTAwaC0xNzV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNjsiIGQ9Ik0xIDYwMHEwIDEyMiA0Ny41IDIzM3QxMjcuNSAxOTF0MTkxIDEyNy41dDIzMyA0Ny41dDIzMyAtNDcuNXQxOTEgLTEyNy41dDEyNy41IC0xOTF0NDcuNSAtMjMzdC00Ny41IC0yMzN0LTEyNy41IC0xOTF0LTE5MSAtMTI3LjV0LTIzMyAtNDcuNXQtMjMzIDQ3LjV0LTE5MSAxMjcuNXQtMTI3LjUgMTkxdC00Ny41IDIzM3pNMTg4IDYwMHEwIC0xNzAgMTIxIC0yOTF0MjkxIC0xMjF0MjkxIDEyMXQxMjEgMjkxdC0xMjEgMjkxdC0yOTEgMTIxIHQtMjkxIC0xMjF0LTEyMSAtMjkxek0zNTAgNjAwaDE1MHYzMDBoMjAwdi0zMDBoMTUwbC0yNTAgLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTM1MCA2MDBsMjUwIDMwMCBsMjUwIC0zMDBoLTE1MHYtMzAwaC0yMDB2MzAwaC0xNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMjg7IiBkPSJNMCAyNXY0NzVsMjAwIDcwMGg4MDBxMTk5IC03MDAgMjAwIC03MDB2LTQ3NXEwIC0xMSAtNyAtMTh0LTE4IC03aC0xMTUwcS0xMSAwIC0xOCA3dC03IDE4ek0yMDAgNTAwaDIwMGw1MCAtMjAwaDMwMGw1MCAyMDBoMjAwbC05NyA1MDBoLTYwNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAyOTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcyIDEyMS41IC0yOTN0MjkyLjUgLTEyMXQyOTIuNSAxMjF0MTIxLjUgMjkzcTAgMTcxIC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek01MDAgMzk3djQwMSBsMjk3IC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwMzA7IiBkPSJNMjMgNjAwcTAgLTExOCA0NS41IC0yMjQuNXQxMjMgLTE4NHQxODQgLTEyM3QyMjQuNSAtNDUuNXQyMjQuNSA0NS41dDE4NCAxMjN0MTIzIDE4NHQ0NS41IDIyNC41aC0xNTBxMCAtMTc3IC0xMjUgLTMwMnQtMzAyIC0xMjV0LTMwMiAxMjV0LTEyNSAzMDJ0MTI1IDMwMnQzMDIgMTI1cTEzNiAwIDI0NiAtODFsLTE0NiAtMTQ2aDQwMHY0MDBsLTE0NSAtMTQ1cS0xNTcgMTIyIC0zNTUgMTIycS0xMTggMCAtMjI0LjUgLTQ1LjV0LTE4NCAtMTIzIHQtMTIzIC0xODR0LTQ1LjUgLTIyNC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTIzIDYwMHEwIDExOCA0NS41IDIyNC41dDEyMyAxODR0MTg0IDEyM3QyMjQuNSA0NS41cTE5OCAwIDM1NSAtMTIybDE0NSAxNDV2LTQwMGgtNDAwbDE0NyAxNDdxLTExMiA4MCAtMjQ3IDgwcS0xNzcgMCAtMzAyIC0xMjV0LTEyNSAtMzAyaC0xNTB6TTEwMCAwdjQwMGg0MDBsLTE0NyAtMTQ3cTExMiAtODAgMjQ3IC04MHExNzcgMCAzMDIgMTI1dDEyNSAzMDJoMTUwcTAgLTExOCAtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyMyB0LTIyNC41IC00NS41cS0xOTggMCAtMzU1IDEyMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMjsiIGQ9Ik0xMDAgMGgxMTAwdjEyMDBoLTExMDB2LTEyMDB6TTIwMCAxMDB2OTAwaDkwMHYtOTAwaC05MDB6TTMwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA0MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA2MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA4MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAyMDBoNTAwdjEwMGgtNTAwdi0xMDB6TTUwMCA0MDB2MTAwaDUwMHYtMTAwaC01MDB6TTUwMCA2MDB2MTAwaDUwMHYtMTAwaC01MDB6IE01MDAgODAwdjEwMGg1MDB2LTEwMGgtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDMzOyIgZD0iTTAgMTAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwdjIwMHEwIDgyIDU5IDE0MXQxNDEgNTloMzAwcTgyIDAgMTQxIC01OXQ1OSAtMTQxdi0yMDBoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTkwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTQwMCA4MDBoMzAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM0OyIgZD0iTTEwMCAwdjExMDBoMTAwdi0xMTAwaC0xMDB6TTMwMCA0MDBxNjAgNjAgMTI3LjUgODR0MTI3LjUgMTcuNXQxMjIgLTIzdDExOSAtMzB0MTEwIC0xMXQxMDMgNDJ0OTEgMTIwLjV2NTAwcS00MCAtODEgLTEwMS41IC0xMTUuNXQtMTI3LjUgLTI5LjV0LTEzOCAyNXQtMTM5LjUgNDB0LTEyNS41IDI1dC0xMDMgLTI5LjV0LTY1IC0xMTUuNXYtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTAgMjc1cTAgLTExIDcgLTE4dDE4IC03aDUwcTExIDAgMTggN3Q3IDE4djMwMHEwIDEyNyA3MC41IDIzMS41dDE4NC41IDE2MS41dDI0NSA1N3QyNDUgLTU3dDE4NC41IC0xNjEuNXQ3MC41IC0yMzEuNXYtMzAwcTAgLTExIDcgLTE4dDE4IC03aDUwcTExIDAgMTggN3Q3IDE4djMwMHEwIDExNiAtNDkuNSAyMjd0LTEzMSAxOTIuNXQtMTkyLjUgMTMxdC0yMjcgNDkuNXQtMjI3IC00OS41dC0xOTIuNSAtMTMxdC0xMzEgLTE5Mi41IHQtNDkuNSAtMjI3di0zMDB6TTIwMCAyMHY0NjBxMCA4IDYgMTR0MTQgNmgxNjBxOCAwIDE0IC02dDYgLTE0di00NjBxMCAtOCAtNiAtMTR0LTE0IC02aC0xNjBxLTggMCAtMTQgNnQtNiAxNHpNODAwIDIwdjQ2MHEwIDggNiAxNHQxNCA2aDE2MHE4IDAgMTQgLTZ0NiAtMTR2LTQ2MHEwIC04IC02IC0xNHQtMTQgLTZoLTE2MHEtOCAwIC0xNCA2dC02IDE0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM2OyIgZD0iTTAgNDAwaDMwMGwzMDAgLTIwMHY4MDBsLTMwMCAtMjAwaC0zMDB2LTQwMHpNNjg4IDQ1OWwxNDEgMTQxbC0xNDEgMTQxbDcxIDcxbDE0MSAtMTQxbDE0MSAxNDFsNzEgLTcxbC0xNDEgLTE0MWwxNDEgLTE0MWwtNzEgLTcxbC0xNDEgMTQxbC0xNDEgLTE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0wIDQwMGgzMDBsMzAwIC0yMDB2ODAwbC0zMDAgLTIwMGgtMzAwdi00MDB6TTcwMCA4NTdsNjkgNTNxMTExIC0xMzUgMTExIC0zMTBxMCAtMTY5IC0xMDYgLTMwMmwtNjcgNTRxODYgMTEwIDg2IDI0OHEwIDE0NiAtOTMgMjU3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM4OyIgZD0iTTAgNDAxdjQwMGgzMDBsMzAwIDIwMHYtODAwbC0zMDAgMjAwaC0zMDB6TTcwMiA4NThsNjkgNTNxMTExIC0xMzUgMTExIC0zMTBxMCAtMTcwIC0xMDYgLTMwM2wtNjcgNTVxODYgMTEwIDg2IDI0OHEwIDE0NSAtOTMgMjU3ek04ODkgOTUxbDcgLThxMTIzIC0xNTEgMTIzIC0zNDRxMCAtMTg5IC0xMTkgLTMzOWwtNyAtOGw4MSAtNjZsNiA4cTE0MiAxNzggMTQyIDQwNXEwIDIzMCAtMTQ0IDQwOGwtNiA4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTAgMGg1MDB2NTAwaC0yMDB2MTAwaC0xMDB2LTEwMGgtMjAwdi01MDB6TTAgNjAwaDEwMHYxMDBoNDAwdjEwMGgxMDB2MTAwaC0xMDB2MzAwaC01MDB2LTYwMHpNMTAwIDEwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMTAwIDgwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMjAwIDIwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMjAwIDkwMGgxMDB2MTAwaC0xMDB2LTEwMHpNNTAwIDUwMHYxMDBoMzAwdi0zMDBoMjAwdi0xMDBoLTEwMHYtMTAwaC0yMDB2MTAwIGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB6TTYwMCAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDAgMTAwMGgxMDB2LTMwMGgyMDB2LTMwMGgzMDB2MjAwaC0yMDB2MTAwaDIwMHY1MDBoLTYwMHYtMjAwek04MDAgODAwdjMwMGgzMDB2LTMwMGgtMzAwek05MDAgMHYxMDBoMzAwdi0xMDBoLTMwMHpNOTAwIDkwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTEwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDA7IiBkPSJNMCAyMDBoMTAwdjEwMDBoLTEwMHYtMTAwMHpNMTAwIDB2MTAwaDMwMHYtMTAwaC0zMDB6TTIwMCAyMDB2MTAwMGgxMDB2LTEwMDBoLTEwMHpNNTAwIDB2OTFoMTAwdi05MWgtMTAwek01MDAgMjAwdjEwMDBoMjAwdi0xMDAwaC0yMDB6TTcwMCAwdjkxaDEwMHYtOTFoLTEwMHpNODAwIDIwMHYxMDAwaDEwMHYtMTAwMGgtMTAwek05MDAgMHY5MWgyMDB2LTkxaC0yMDB6TTEwMDAgMjAwdjEwMDBoMjAwdi0xMDAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNMSA3MDB2NDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNDc0bDcwMCAtNzAwbC01MDAgLTUwMHpNMTQ4IDk1M3EwIC00MiAyOSAtNzFxMzAgLTMwIDcxLjUgLTMwdDcxLjUgMzBxMjkgMjkgMjkgNzF0LTI5IDcxcS0zMCAzMCAtNzEuNSAzMHQtNzEuNSAtMzBxLTI5IC0yOSAtMjkgLTcxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTIgNzAwdjQ3NXEwIDExIDcgMTh0MTggN2g0NzRsNzAwIC03MDBsLTUwMCAtNTAwek0xNDggOTUzcTAgLTQyIDMwIC03MXEyOSAtMzAgNzEgLTMwdDcxIDMwcTMwIDI5IDMwIDcxdC0zMCA3MXEtMjkgMzAgLTcxIDMwdC03MSAtMzBxLTMwIC0yOSAtMzAgLTcxek03MDEgMTIwMGgxMDBsNzAwIC03MDBsLTUwMCAtNTAwbC01MCA1MGw0NTAgNDUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTEwMCAwdjEwMjVsMTc1IDE3NWg5MjV2LTEwMDBsLTEwMCAtMTAwdjEwMDBoLTc1MGwtMTAwIC0xMDBoNzUwdi0xMDAwaC05MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNDQ7IiBkPSJNMjAwIDBsNDUwIDQ0NGw0NTAgLTQ0M3YxMTUwcTAgMjAgLTE0LjUgMzV0LTM1LjUgMTVoLTgwMHEtMjEgMCAtMzUuNSAtMTV0LTE0LjUgLTM1di0xMTUxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ1OyIgZD0iTTAgMTAwdjcwMGgyMDBsMTAwIC0yMDBoNjAwbDEwMCAyMDBoMjAwdi03MDBoLTIwMHYyMDBoLTgwMHYtMjAwaC0yMDB6TTI1MyA4MjlsNDAgLTEyNGg1OTJsNjIgMTI0bC05NCAzNDZxLTIgMTEgLTEwIDE4dC0xOCA3aC00NTBxLTEwIDAgLTE4IC03dC0xMCAtMTh6TTI4MSAyNGwzOCAxNTJxMiAxMCAxMS41IDE3dDE5LjUgN2g1MDBxMTAgMCAxOS41IC03dDExLjUgLTE3bDM4IC0xNTJxMiAtMTAgLTMuNSAtMTd0LTE1LjUgLTdoLTYwMCBxLTEwIDAgLTE1LjUgN3QtMy41IDE3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ2OyIgZD0iTTAgMjAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWgxMDAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTE1MHEtNCA4IC0xMS41IDIxLjV0LTMzIDQ4dC01MyA2MXQtNjkgNDh0LTgzLjUgMjEuNWgtMjAwcS00MSAwIC04MiAtMjAuNXQtNzAgLTUwdC01MiAtNTl0LTM0IC01MC41bC0xMiAtMjBoLTE1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNjAweiBNMzU2IDUwMHEwIDEwMCA3MiAxNzJ0MTcyIDcydDE3MiAtNzJ0NzIgLTE3MnQtNzIgLTE3MnQtMTcyIC03MnQtMTcyIDcydC03MiAxNzJ6TTQ5NCA1MDBxMCAtNDQgMzEgLTc1dDc1IC0zMXQ3NSAzMXQzMSA3NXQtMzEgNzV0LTc1IDMxdC03NSAtMzF0LTMxIC03NXpNOTAwIDcwMHYxMDBoMTAwdi0xMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik01MyAwaDM2NXY2NnEtNDEgMCAtNzIgMTF0LTQ5IDM4dDEgNzFsOTIgMjM0aDM5MWw4MiAtMjIycTE2IC00NSAtNS41IC04OC41dC03NC41IC00My41di02Nmg0MTd2NjZxLTM0IDEgLTc0IDQzcS0xOCAxOSAtMzMgNDJ0LTIxIDM3bC02IDEzbC0zODUgOTk4aC05M2wtMzk5IC0xMDA2cS0yNCAtNDggLTUyIC03NXEtMTIgLTEyIC0zMyAtMjV0LTM2IC0yMGwtMTUgLTd2LTY2ek00MTYgNTIxbDE3OCA0NTdsNDYgLTE0MGwxMTYgLTMxN2gtMzQwIHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA0ODsiIGQ9Ik0xMDAgMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjggLTEgMzkuNXQtNS41IDI2dC0xNS41IDIxdC0yOSAxNHQtNDkgMTQuNXY3MGg0NzFxMTIwIDAgMjEzIC04OHQ5MyAtMjI4cTAgLTU1IC0xMS41IC0xMDEuNXQtMjggLTc0dC0zMy41IC00Ny41dC0yOCAtMjhsLTEyIC03cTggLTMgMjEuNSAtOXQ0OCAtMzEuNXQ2MC41IC01OHQ0Ny41IC05MS41dDIxLjUgLTEyOXEwIC04NCAtNTkgLTE1Ni41dC0xNDIgLTExMSB0LTE2MiAtMzguNWgtNTAwek00MDAgMjAwaDE2MXE4OSAwIDE1MyA0OC41dDY0IDEzMi41cTAgOTAgLTYyLjUgMTU0LjV0LTE1Ni41IDY0LjVoLTE1OXYtNDAwek00MDAgNzAwaDEzOXE3NiAwIDEzMCA2MS41dDU0IDEzOC41cTAgODIgLTg0IDEzMC41dC0yMzkgNDguNXYtMzc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTIwMCAwdjU3cTc3IDcgMTM0LjUgNDAuNXQ2NS41IDgwLjVsMTczIDg0OXExMCA1NiAtMTAgNzR0LTkxIDM3cS02IDEgLTEwLjUgMi41dC05LjUgMi41djU3aDQyNWwyIC01N3EtMzMgLTggLTYyIC0yNS41dC00NiAtMzd0LTI5LjUgLTM4dC0xNy41IC0zMC41bC01IC0xMmwtMTI4IC04MjVxLTEwIC01MiAxNCAtODJ0OTUgLTM2di01N2gtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTS03NSAyMDBoNzV2ODAwaC03NWwxMjUgMTY3bDEyNSAtMTY3aC03NXYtODAwaDc1bC0xMjUgLTE2N3pNMzAwIDkwMHYzMDBoMTUwaDcwMGgxNTB2LTMwMGgtNTBxMCAyOSAtOCA0OC41dC0xOC41IDMwdC0zMy41IDE1dC0zOS41IDUuNXQtNTAuNSAxaC0yMDB2LTg1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjg1MGgtMjAwcS0zNCAwIC01MC41IC0xdC00MCAtNS41dC0zMy41IC0xNXQtMTguNSAtMzB0LTguNSAtNDguNWgtNDl6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDUxOyIgZD0iTTMzIDUxbDE2NyAxMjV2LTc1aDgwMHY3NWwxNjcgLTEyNWwtMTY3IC0xMjV2NzVoLTgwMHYtNzV6TTEwMCA5MDF2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTggMzB0LTMzLjUgMTV0LTQwIDUuNXQtNTAuNSAxaC0yMDB2LTY1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjY1MGgtMjAwcS0zNCAwIC01MC41IC0xdC0zOS41IC01LjV0LTMzLjUgLTE1dC0xOC41IC0zMHQtOCAtNDguNWgtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTI7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg4MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC04MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjUgdi0xMDB6TTAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDEwMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMDAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTYwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0wIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41IHYtMTAwek0yMDAgMzUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDcwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTcwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0yMDAgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDcwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTcwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NDsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTEwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC02MDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU2OyIgZD0iTTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTAgOTUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMzAwIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtODAwIHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTUgaC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNLTEwMSA1MDB2MTAwaDIwMXY3NWwxNjYgLTEyNWwtMTY2IC0xMjV2NzVoLTIwMXpNMzAwIDBoMTAwdjExMDBoLTEwMHYtMTEwMHpNNTAwIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNSB2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek01MDAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDUwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC01MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDAgcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU4OyIgZD0iTTEgNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoNjAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTYwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0xIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtMzAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgNjUwIHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg1MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgOTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDEwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNODAxIDB2MTEwMGgxMDB2LTExMDAgaC0xMDB6TTkzNCA1NTBsMTY3IC0xMjV2NzVoMjAwdjEwMGgtMjAwdjc1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDU5OyIgZD0iTTAgMjc1djY1MHEwIDMxIDIyIDUzdDUzIDIyaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzek05MDAgNjAwbDMwMCAzMDB2LTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik0wIDQ0djEwMTJxMCAxOCAxMyAzMXQzMSAxM2gxMTEycTE5IDAgMzEuNSAtMTN0MTIuNSAtMzF2LTEwMTJxMCAtMTggLTEyLjUgLTMxdC0zMS41IC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxek0xMDAgMjYzbDI0NyAxODJsMjk4IC0xMzFsLTc0IDE1NmwyOTMgMzE4bDIzNiAtMjg4djUwMGgtMTAwMHYtNzM3ek0yMDggNzUwcTAgNTYgMzkgOTV0OTUgMzl0OTUgLTM5dDM5IC05NXQtMzkgLTk1dC05NSAtMzl0LTk1IDM5dC0zOSA5NXogIiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNMTQ4IDc0NXEwIDEyNCA2MC41IDIzMS41dDE2NSAxNzJ0MjI2LjUgNjQuNXExMjMgMCAyMjcgLTYzdDE2NC41IC0xNjkuNXQ2MC41IC0yMjkuNXQtNzMgLTI3MnEtNzMgLTExNCAtMTY2LjUgLTIzN3QtMTUwLjUgLTE4OWwtNTcgLTY2cS0xMCA5IC0yNyAyNnQtNjYuNSA3MC41dC05NiAxMDl0LTEwNCAxMzUuNXQtMTAwLjUgMTU1cS02MyAxMzkgLTYzIDI2MnpNMzQyIDc3MnEwIC0xMDcgNzUuNSAtMTgyLjV0MTgxLjUgLTc1LjUgcTEwNyAwIDE4Mi41IDc1LjV0NzUuNSAxODIuNXQtNzUuNSAxODJ0LTE4Mi41IDc1dC0xODIgLTc1LjV0LTc1IC0xODEuNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MzsiIGQ9Ik0xIDYwMHEwIDEyMiA0Ny41IDIzM3QxMjcuNSAxOTF0MTkxIDEyNy41dDIzMyA0Ny41dDIzMyAtNDcuNXQxOTEgLTEyNy41dDEyNy41IC0xOTF0NDcuNSAtMjMzdC00Ny41IC0yMzN0LTEyNy41IC0xOTF0LTE5MSAtMTI3LjV0LTIzMyAtNDcuNXQtMjMzIDQ3LjV0LTE5MSAxMjcuNXQtMTI3LjUgMTkxdC00Ny41IDIzM3pNMTczIDYwMHEwIC0xNzcgMTI1LjUgLTMwMnQzMDEuNSAtMTI1djg1NHEtMTc2IDAgLTMwMS41IC0xMjUgdC0xMjUuNSAtMzAyeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY0OyIgZD0iTTExNyA0MDZxMCA5NCAzNCAxODZ0ODguNSAxNzIuNXQxMTIgMTU5dDExNSAxNzd0ODcuNSAxOTQuNXEyMSAtNzEgNTcuNSAtMTQyLjV0NzYgLTEzMC41dDgzIC0xMTguNXQ4MiAtMTE3dDcwIC0xMTZ0NTAgLTEyNS41dDE4LjUgLTEzNnEwIC04OSAtMzkgLTE2NS41dC0xMDIgLTEyNi41dC0xNDAgLTc5LjV0LTE1NiAtMzMuNXEtMTE0IDYgLTIxMS41IDUzdC0xNjEuNSAxMzguNXQtNjQgMjEwLjV6TTI0MyA0MTRxMTQgLTgyIDU5LjUgLTEzNiB0MTM2LjUgLTgwbDE2IDk4cS03IDYgLTE4IDE3dC0zNCA0OHQtMzMgNzdxLTE1IDczIC0xNCAxNDMuNXQxMCAxMjIuNWw5IDUxcS05MiAtMTEwIC0xMTkuNSAtMTg1dC0xMi41IC0xNTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41cTM2NiAtNiAzOTcgLTE0bC0xODYgLTE4NmgtMzExcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTI1bDIwMCAyMDB2LTIyNXEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNSB0LTExNy41IDI4Mi41ek00MzYgMzQxbDE2MSA1MGw0MTIgNDEybC0xMTQgMTEzbC00MDUgLTQwNXpNOTk1IDEwMTVsMTEzIC0xMTNsMTEzIDExM2wtMjEgODVsLTkyIDI4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgyNjFsMiAtODBxLTEzMyAtMzIgLTIxOCAtMTIwaC0xNDVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi01M3EwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjUgek00MjMgNTI0cTMwIDM4IDgxLjUgNjR0MTAzIDM1LjV0OTkgMTR0NzcuNSAzLjVsMjkgLTF2LTIwOWwzNjAgMzI0bC0zNTkgMzE4di0yMTZxLTcgMCAtMTkgLTF0LTQ4IC04dC02OS41IC0xOC41dC03Ni41IC0zN3QtNzYuNSAtNTl0LTYyIC04OHQtMzkuNSAtMTIxLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwNjc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0xNjlxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjUgdC0xMTcuNSAyODIuNXpNMzQyIDYzMmwyODMgLTI4NGw1NjYgNTY3bC0xMzYgMTM3bC00MzAgLTQzMWwtMTQ3IDE0N3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2ODsiIGQ9Ik0wIDYwM2wzMDAgMjk2di0xOThoMjAwdjIwMGgtMjAwbDMwMCAzMDBsMjk1IC0zMDBoLTE5NXYtMjAwaDIwMHYxOThsMzAwIC0yOTZsLTMwMCAtMzAwdjE5OGgtMjAwdi0yMDBoMTk1bC0yOTUgLTMwMGwtMzAwIDMwMGgyMDB2MjAwaC0yMDB2LTE5OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA2OTsiIGQ9Ik0yMDAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtMTEwMGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEzNiA1NTBsNTY0IDU1MHYtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yMDAgMGw5MDAgNTUwbC05MDAgNTUwdi0xMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTIwMCAxNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHpNNjAwIDE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NDsiIGQ9Ik0yMDAgMTUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDgwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTgwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtODAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1NjQgLTU1MGwtNTY0IC01NTB2NDg4eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc2OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1MDAgLTQ4N3Y0MzdxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MzhsLTUwMCAtNDg4djQ4OHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik0zMDAgMHYxMTAwbDUwMCAtNDg3djQzN3EwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQzOHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA3ODsiIGQ9Ik0xMDAgMjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDUwMGgxMTAwbC01NTAgNTY0eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTE4NSA1OTlsNTkyIC01OTJsMjQwIDI0MGwtMzUzIDM1M2wzNTMgMzUzbC0yNDAgMjQweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgwOyIgZD0iTTI3MiAxOTRsMzUzIDM1M2wtMzUzIDM1M2wyNDEgMjQwbDU3MiAtNTcxbDIxIC0yMmwtMSAtMXYtMWwtNTkyIC01OTF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODE7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek0zMDAgNTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdjIwMGgtMjAwdjIwMGgtMjAwdi0yMDBoLTIwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDgyOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGg2MDB2MjAwaC02MDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MzsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTI0NiA0NTlsMjEzIC0yMTNsMTQxIDE0MmwxNDEgLTE0MmwyMTMgMjEzbC0xNDIgMTQxbDE0MiAxNDFsLTIxMyAyMTJsLTE0MSAtMTQxbC0xNDEgMTQybC0yMTIgLTIxM2wxNDEgLTE0MXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxNy41dC04MCAyOTkuNXpNMjcwIDU1MWwyNzYgLTI3N2w0MTEgNDExbC0xNzUgMTc0bC0yMzYgLTIzNmwtMTAyIDEwMnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NTsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTM2MyA3MDBoMTQ0cTQgMCAxMS41IC0xdDExIC0xdDYuNSAzdDMgOXQxIDExdDMuNSA4LjV0My41IDZ0NS41IDR0Ni41IDIuNXQ5IDEuNXQ5IDAuNWgxMS41aDEyLjVxMTkgMCAzMCAtMTB0MTEgLTI2IHEwIC0yMiAtNCAtMjh0LTI3IC0yMnEtNSAtMSAtMTIuNSAtM3QtMjcgLTEzLjV0LTM0IC0yN3QtMjYuNSAtNDZ0LTExIC02OC41aDIwMHE1IDMgMTQgOHQzMS41IDI1LjV0MzkuNSA0NS41dDMxIDY5dDE0IDk0cTAgNTEgLTE3LjUgODl0LTQyIDU4dC01OC41IDMydC01OC41IDE1dC01MS41IDNxLTEwNSAwIC0xNzIgLTU2dC02NyAtMTgzek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNNDAwIDMwMGg0MDB2MTAwaC0xMDB2MzAwaC0zMDB2LTEwMGgxMDB2LTIwMGgtMTAwdi0xMDB6TTUwMCA4MDBoMjAwdjEwMGgtMjAwdi0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODc7IiBkPSJNMCA1MDB2MjAwaDE5NHExNSA2MCAzNiAxMDQuNXQ1NS41IDg2dDg4IDY5dDEyNi41IDQwLjV2MjAwaDIwMHYtMjAwcTU0IC0yMCAxMTMgLTYwdDExMi41IC0xMDUuNXQ3MS41IC0xMzQuNWgyMDN2LTIwMGgtMjAzcS0yNSAtMTAyIC0xMTYuNSAtMTg2dC0xODAuNSAtMTE3di0xOTdoLTIwMHYxOTdxLTE0MCAyNyAtMjA4IDEwMi41dC05OCAyMDAuNWgtMTk0ek0yOTAgNTAwcTI0IC03MyA3OS41IC0xMjcuNXQxMzAuNSAtNzguNXYyMDZoMjAwIHYtMjA2cTE0OSA0OCAyMDEgMjA2aC0yMDF2MjAwaDIwMHEtMjUgNzQgLTc2IDEyNy41dC0xMjQgNzYuNXYtMjA0aC0yMDB2MjAzcS03NSAtMjQgLTEzMCAtNzcuNXQtNzkgLTEyNS41aDIwOXYtMjAwaC0yMTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwODg7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zNTYgNDY1bDEzNSAxMzUgbC0xMzUgMTM1bDEwOSAxMDlsMTM1IC0xMzVsMTM1IDEzNWwxMDkgLTEwOWwtMTM1IC0xMzVsMTM1IC0xMzVsLTEwOSAtMTA5bC0xMzUgMTM1bC0xMzUgLTEzNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTMyMiA1MzdsMTQxIDE0MSBsODcgLTg3bDIwNCAyMDVsMTQyIC0xNDJsLTM0NiAtMzQ1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xMTUgNjIgLTIxNWw1NjggNTY3cS0xMDAgNjIgLTIxNiA2MnEtMTcxIDAgLTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zOTEgMjQ1cTk3IC01OSAyMDkgLTU5cTE3MSAwIDI5Mi41IDEyMS41dDEyMS41IDI5Mi41IHEwIDExMiAtNTkgMjA5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTAgNTQ3bDYwMCA0NTN2LTMwMGg2MDB2LTMwMGgtNjAwdi0zMDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNMCA0MDB2MzAwaDYwMHYzMDBsNjAwIC00NTNsLTYwMCAtNDQ4djMwMWgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDkzOyIgZD0iTTIwNCA2MDBsNDUwIDYwMGw0NDQgLTYwMGgtMjk4di02MDBoLTMwMHY2MDBoLTI5NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NDsiIGQ9Ik0xMDQgNjAwaDI5NnY2MDBoMzAwdi02MDBoMjk4bC00NDkgLTYwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik0wIDIwMHE2IDEzMiA0MSAyMzguNXQxMDMuNSAxOTN0MTg0IDEzOHQyNzEuNSA1OS41djI3MWw2MDAgLTQ1M2wtNjAwIC00NDh2MzAxcS05NSAtMiAtMTgzIC0yMHQtMTcwIC01MnQtMTQ3IC05Mi41dC0xMDAgLTEzNS41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTAgMHY0MDBsMTI5IC0xMjlsMjk0IDI5NGwxNDIgLTE0MmwtMjk0IC0yOTRsMTI5IC0xMjloLTQwMHpNNjM1IDc3N2wxNDIgLTE0MmwyOTQgMjk0bDEyOSAtMTI5djQwMGgtNDAwbDEyOSAtMTI5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTM0IDE3NmwyOTUgMjk1bC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTMwbC0yOTUgLTI5NXpNNjAwIDYwMHY0MDBsMTI5IC0xMjlsMjk1IDI5NWwxNDIgLTE0MWwtMjk1IC0yOTVsMTI5IC0xMzBoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEwMTsiIGQ9Ik0yMyA2MDBxMCAxMTggNDUuNSAyMjQuNXQxMjMgMTg0dDE4NCAxMjN0MjI0LjUgNDUuNXQyMjQuNSAtNDUuNXQxODQgLTEyM3QxMjMgLTE4NHQ0NS41IC0yMjQuNXQtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjI0LjUgLTQ1LjV0LTIyNC41IDQ1LjV0LTE4NCAxMjN0LTEyMyAxODR0LTQ1LjUgMjI0LjV6TTQ1NiA4NTFsNTggLTMwMnE0IC0yMCAyMS41IC0zNC41dDM3LjUgLTE0LjVoNTRxMjAgMCAzNy41IDE0LjUgdDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMyAxNC41aC0yMDdxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41ek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTAgODAwaDEwMHYtMjAwaDQwMHYzMDBoMjAwdi0zMDBoNDAwdjIwMGgxMDB2MTAwaC0xMTF2NnQtMSAxNXQtMyAxOGwtMzQgMTcycS0xMSAzOSAtNDEuNSA2M3QtNjkuNSAyNHEtMzIgMCAtNjEgLTE3bC0yMzkgLTE0NHEtMjIgLTEzIC00MCAtMzVxLTE5IDI0IC00MCAzNmwtMjM4IDE0NHEtMzMgMTggLTYyIDE4cS0zOSAwIC02OS41IC0yM3QtNDAuNSAtNjFsLTM1IC0xNzdxLTIgLTggLTMgLTE4dC0xIC0xNXYtNmgtMTExdi0xMDB6IE0xMDAgMGg0MDB2NDAwaC00MDB2LTQwMHpNMjAwIDkwMHEtMyAwIDE0IDQ4dDM1IDk2bDE4IDQ3bDIxNCAtMTkxaC0yODF6TTcwMCAwdjQwMGg0MDB2LTQwMGgtNDAwek03MzEgOTAwbDIwMiAxOTdxNSAtMTIgMTIgLTMyLjV0MjMgLTY0dDI1IC03MnQ3IC0yOC41aC0yNjl6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDM7IiBkPSJNMCAtMjJ2MTQzbDIxNiAxOTNxLTkgNTMgLTEzIDgzdC01LjUgOTR0OSAxMTN0MzguNSAxMTR0NzQgMTI0cTQ3IDYwIDk5LjUgMTAyLjV0MTAzIDY4dDEyNy41IDQ4dDE0NS41IDM3LjV0MTg0LjUgNDMuNXQyMjAgNTguNXEwIC0xODkgLTIyIC0zNDN0LTU5IC0yNTh0LTg5IC0xODEuNXQtMTA4LjUgLTEyMHQtMTIyIC02OHQtMTI1LjUgLTMwdC0xMjEuNSAtMS41dC0xMDcuNSAxMi41dC04Ny41IDE3dC01Ni41IDcuNWwtOTkgLTU1eiBNMjM4LjUgMzAwLjVxMTkuNSAtNi41IDg2LjUgNzYuNXE1NSA2NiAzNjcgMjM0cTcwIDM4IDExOC41IDY5LjV0MTAyIDc5dDk5IDExMS41dDg2LjUgMTQ4cTIyIDUwIDI0IDYwdC02IDE5cS03IDUgLTE3IDV0LTI2LjUgLTE0LjV0LTMzLjUgLTM5LjVxLTM1IC01MSAtMTEzLjUgLTEwOC41dC0xMzkuNSAtODkuNWwtNjEgLTMycS0zNjkgLTE5NyAtNDU4IC00MDFxLTQ4IC0xMTEgLTI4LjUgLTExNy41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA0OyIgZD0iTTExMSA0MDhxMCAtMzMgNSAtNjNxOSAtNTYgNDQgLTExOS41dDEwNSAtMTA4LjVxMzEgLTIxIDY0IC0xNnQ2MiAyMy41dDU3IDQ5LjV0NDggNjEuNXQzNSA2MC41cTMyIDY2IDM5IDE4NC41dC0xMyAxNTcuNXE3OSAtODAgMTIyIC0xNjR0MjYgLTE4NHEtNSAtMzMgLTIwLjUgLTY5LjV0LTM3LjUgLTgwLjVxLTEwIC0xOSAtMTQuNSAtMjl0LTEyIC0yNnQtOSAtMjMuNXQtMyAtMTl0Mi41IC0xNS41dDExIC05LjV0MTkuNSAtNXQzMC41IDIuNSB0NDIgOHE1NyAyMCA5MSAzNHQ4Ny41IDQ0LjV0ODcgNjR0NjUuNSA4OC41dDQ3IDEyMnEzOCAxNzIgLTQ0LjUgMzQxLjV0LTI0Ni41IDI3OC41cTIyIC00NCA0MyAtMTI5cTM5IC0xNTkgLTMyIC0xNTRxLTE1IDIgLTMzIDlxLTc5IDMzIC0xMjAuNSAxMDB0LTQ0IDE3NS41dDQ4LjUgMjU3LjVxLTEzIC04IC0zNCAtMjMuNXQtNzIuNSAtNjYuNXQtODguNSAtMTA1LjV0LTYwIC0xMzh0LTggLTE2Ni41cTIgLTEyIDggLTQxLjV0OCAtNDN0NiAtMzkuNSB0My41IC0zOS41dC0xIC0zMy41dC02IC0zMS41dC0xMy41IC0yNHQtMjEgLTIwLjV0LTMxIC0xMnEtMzggLTEwIC02NyAxM3QtNDAuNSA2MS41dC0xNSA4MS41dDEwLjUgNzVxLTUyIC00NiAtODMuNSAtMTAxdC0zOSAtMTA3dC03LjUgLTg1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA1OyIgZD0iTS02MSA2MDBsMjYgNDBxNiAxMCAyMCAzMHQ0OSA2My41dDc0LjUgODUuNXQ5NyA5MHQxMTYuNSA4My41dDEzMi41IDU5dDE0NS41IDIzLjV0MTQ1LjUgLTIzLjV0MTMyLjUgLTU5dDExNi41IC04My41dDk3IC05MHQ3NC41IC04NS41dDQ5IC02My41dDIwIC0zMGwyNiAtNDBsLTI2IC00MHEtNiAtMTAgLTIwIC0zMHQtNDkgLTYzLjV0LTc0LjUgLTg1LjV0LTk3IC05MHQtMTE2LjUgLTgzLjV0LTEzMi41IC01OXQtMTQ1LjUgLTIzLjUgdC0xNDUuNSAyMy41dC0xMzIuNSA1OXQtMTE2LjUgODMuNXQtOTcgOTB0LTc0LjUgODUuNXQtNDkgNjMuNXQtMjAgMzB6TTEyMCA2MDBxNyAtMTAgNDAuNSAtNTh0NTYgLTc4LjV0NjggLTc3LjV0ODcuNSAtNzV0MTAzIC00OS41dDEyNSAtMjEuNXQxMjMuNSAyMHQxMDAuNSA0NS41dDg1LjUgNzEuNXQ2Ni41IDc1LjV0NTggODEuNXQ0NyA2NnEtMSAxIC0yOC41IDM3LjV0LTQyIDU1dC00My41IDUzdC01Ny41IDYzLjV0LTU4LjUgNTQgcTQ5IC03NCA0OSAtMTYzcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHQtMjEyIDg4dC04OCAyMTJxMCA4NSA0NiAxNThxLTEwMiAtODcgLTIyNiAtMjU4ek0zNzcgNjU2cTQ5IC0xMjQgMTU0IC0xOTFsMTA1IDEwNXEtMzcgMjQgLTc1IDcydC01NyA4NGwtMjAgMzZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDY7IiBkPSJNLTYxIDYwMGwyNiA0MHE2IDEwIDIwIDMwdDQ5IDYzLjV0NzQuNSA4NS41dDk3IDkwdDExNi41IDgzLjV0MTMyLjUgNTl0MTQ1LjUgMjMuNXE2MSAwIDEyMSAtMTdsMzcgMTQyaDE0OGwtMzE0IC0xMjAwaC0xNDhsMzcgMTQzcS04MiAyMSAtMTY1IDcxLjV0LTE0MCAxMDJ0LTEwOS41IDExMnQtNzIgODguNXQtMjkuNSA0M3pNMTIwIDYwMHEyMTAgLTI4MiAzOTMgLTMzNmwzNyAxNDFxLTEwNyAxOCAtMTc4LjUgMTAxLjV0LTcxLjUgMTkzLjUgcTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDQ3IDQ3bDIzIDg3cS0zMCAyOCAtNTkgNjl0LTQ0IDY4bC0xNCAyNnpNNzgwIDE2MWwzOCAxNDVxMjIgMTUgNDQuNSAzNHQ0NiA0NHQ0MC41IDQ0dDQxIDUwLjV0MzMuNSA0My41dDMzIDQ0dDI0LjUgMzRxLTk3IDEyNyAtMTQwIDE3NWwzOSAxNDZxNjcgLTU0IDEzMS41IC0xMjUuNXQ4Ny41IC0xMDMuNXQzNiAtNTJsMjYgLTQwbC0yNiAtNDAgcS03IC0xMiAtMjUuNSAtMzh0LTYzLjUgLTc5LjV0LTk1LjUgLTEwMi41dC0xMjQgLTEwMHQtMTQ2LjUgLTc5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05Ny41IDM0cTEzLjUgLTM0IDUwLjUgLTM0aDEyOTRxMzcgMCA1MC41IDM1LjV0LTcuNSA2Ny41bC02NDIgMTA1NnEtMjAgMzMgLTQ4IDM2dC00OCAtMjlsLTY0MiAtMTA2NnEtMjEgLTMyIC03LjUgLTY2ek0xNTUgMjAwbDQ0NSA3MjNsNDQ1IC03MjNoLTM0NXYxMDBoLTIwMHYtMTAwaC0zNDV6TTUwMCA2MDBsMTAwIC0zMDBsMTAwIDMwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTA4OyIgZD0iTTEwMCAyNjJ2NDFxMCAyMCAxMSA0NC41dDI2IDM4LjVsMzYzIDMyNXYzMzlxMCA2MiA0NCAxMDZ0MTA2IDQ0dDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkxIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC05NCA3OGgtMjIybC05NCAtNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjQgcTAgMjIgMTAwIDExM3YyNjNsLTM1OSAtMjQ5cS0xNyAtMTIgLTI5IC01LjV0LTEyIDI2LjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMDk7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djc1MGgtMTEwMHYtNzUwek0wIDkwMGgxMTAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTUwdjEwMGgtMTAwdi0xMDBoLTUwMHYxMDBoLTEwMHYtMTAwaC0xNTBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHpNMTAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTAwIDMwMHYxMDBoMTAwdi0xMDBoLTEwMHogTTEwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCA1MDAgdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEwOyIgZD0iTTAgMjAwdjIwMGgyNTlsNjAwIDYwMGgyNDF2MTk4bDMwMCAtMjk1bC0zMDAgLTMwMHYxOTdoLTE1OWwtNjAwIC02MDBoLTM0MXpNMCA4MDBoMjU5bDEyMiAtMTIybDE0MSAxNDJsLTE4MSAxODBoLTM0MXYtMjAwek02NzggMzgxbDE0MSAxNDJsMTIyIC0xMjNoMTU5djE5OGwzMDAgLTI5NWwtMzAwIC0zMDB2MTk3aC0yNDF6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMCA0MDB2NjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTU5NmwtMzA0IC0zMDB2MzAwaC0xMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTEyOyIgZD0iTTEwMCA2MDB2MjAwaDMwMHYtMjUwcTAgLTExMyA2IC0xNDVxMTcgLTkyIDEwMiAtMTE3cTM5IC0xMSA5MiAtMTFxMzcgMCA2Ni41IDUuNXQ1MCAxNS41dDM2IDI0dDI0IDMxLjV0MTQgMzcuNXQ3IDQydDIuNSA0NXQwIDQ3djI1djI1MGgzMDB2LTIwMHEwIC00MiAtMyAtODN0LTE1IC0xMDR0LTMxLjUgLTExNnQtNTggLTEwOS41dC04OSAtOTYuNXQtMTI5IC02NS41dC0xNzQuNSAtMjUuNXQtMTc0LjUgMjUuNXQtMTI5IDY1LjV0LTg5IDk2LjUgdC01OCAxMDkuNXQtMzEuNSAxMTZ0LTE1IDEwNHQtMyA4M3pNMTAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHpNODAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExMzsiIGQ9Ik0tMzAgNDExbDIyNyAtMjI3bDM1MiAzNTNsMzUzIC0zNTNsMjI2IDIyN2wtNTc4IDU3OXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExNDsiIGQ9Ik03MCA3OTdsNTgwIC01NzlsNTc4IDU3OWwtMjI2IDIyN2wtMzUzIC0zNTNsLTM1MiAzNTN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTU7IiBkPSJNLTE5OCA3MDBsMjk5IDI4M2wzMDAgLTI4M2gtMjAzdi00MDBoMzg1bDIxNSAtMjAwaC04MDB2NjAwaC0xOTZ6TTQwMiAxMDAwbDIxNSAtMjAwaDM4MXYtNDAwaC0xOThsMjk5IC0yODNsMjk5IDI4M2gtMjAwdjYwMGgtNzk2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE2OyIgZD0iTTE4IDkzOXEtNSAyNCAxMCA0MnExNCAxOSAzOSAxOWg4OTZsMzggMTYycTUgMTcgMTguNSAyNy41dDMwLjUgMTAuNWg5NHEyMCAwIDM1IC0xNC41dDE1IC0zNS41dC0xNSAtMzUuNXQtMzUgLTE0LjVoLTU0bC0yMDEgLTk2MXEtMiAtNCAtNiAtMTAuNXQtMTkgLTE3LjV0LTMzIC0xMWgtMzF2LTUwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTV0LTM1LjUgMTV0LTE0LjUgMzV2NTBoLTMwMHYtNTBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNSB0LTM1LjUgMTV0LTE0LjUgMzV2NTBoLTUwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1cTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MzVsNDggMjAwaC02MzNxLTMyIDAgLTU0LjUgMjF0LTI3LjUgNDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMCAwdjgwMGgxMjAwdi04MDBoLTEyMDB6TTAgOTAwdjEwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNWg1MDB2LTEwMGgtMTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTExODsiIGQ9Ik0xIDBsMzAwIDcwMGgxMjAwbC0zMDAgLTcwMGgtMTIwMHpNMSA0MDB2NjAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHYtMjAwaC0xMDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTE5OyIgZD0iTTMwMiAzMDBoMTk4djYwMGgtMTk4bDI5OCAzMDBsMjk4IC0zMDBoLTE5OHYtNjAwaDE5OGwtMjk4IC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNMCA2MDBsMzAwIDI5OHYtMTk4aDYwMHYxOThsMzAwIC0yOThsLTMwMCAtMjk3djE5N2gtNjAwdi0xOTd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjE7IiBkPSJNMCAxMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMSA0MDBsMTcyIDczOXE1IDIyIDIzIDQxLjV0MzggMTkuNWg2NzJxMTkgMCAzNy41IC0yMi41dDIzLjUgLTQ1LjVsMTcyIC03MzJoLTExMzh6TTgwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6IE0xMDAwIDEwMGgxMDB2MTAwaC0xMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0tMTAxIDYwMHY1MHEwIDI0IDI1IDQ5dDUwIDM4bDI1IDEzdi0yNTBsLTExIDUuNXQtMjQgMTR0LTMwIDIxLjV0LTI0IDI3LjV0LTExIDMxLjV6TTk5IDUwMHYyNTB2NXEwIDEzIDAuNSAxOC41dDIuNSAxM3Q4IDEwLjV0MTUgM2gyMDBsNjc1IDI1MHYtODUwbC02NzUgMjAwaC0zOGw0NyAtMjc2cTIgLTEyIC0zIC0xNy41dC0xMSAtNnQtMjEgLTAuNWgtOGgtODNxLTIwIDAgLTM0LjUgMTR0LTE4LjUgMzVxLTU2IDMzNyAtNTYgMzUxeiBNMTEwMCAyMDB2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXEyMCAwIDM1IC0xNC41dDE1IC0zNS41di04NTBxMCAtMjAgLTE1IC0zNXQtMzUgLTE1cS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTc0IDM1MHEwIDIxIDEzLjUgMzUuNXQzMy41IDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMyAzMnQyOSAxM2g5NHEyMCAwIDI5IC0xMC41dDMgLTI5LjVsLTE4IC0zN3E4MyAtMTkgMTQ0IC04Mi41dDc2IC0xNDAuNWw2MyAtMzI3bDExOCAtMTczaDE3cTIwIDAgMzMuNSAtMTQuNXQxMy41IC0zNS41cTAgLTIwIC0xMyAtNDB0LTMxIC0yN3EtMjIgLTkgLTYzIC0yM3QtMTY3LjUgLTM3IHQtMjUxLjUgLTIzdC0yNDUuNSAyMC41dC0xNzguNSA0MS41bC01OCAyMHEtMTggNyAtMzEgMjcuNXQtMTMgNDAuNXpNNDk3IDExMHExMiAtNDkgNDAgLTc5LjV0NjMgLTMwLjV0NjMgMzAuNXQzOSA3OS41cS00OCAtNiAtMTAyIC02dC0xMDMgNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNDsiIGQ9Ik0yMSA0NDVsMjMzIC00NWwtNzggLTIyNGwyMjQgNzhsNDUgLTIzM2wxNTUgMTc5bDE1NSAtMTc5bDQ1IDIzM2wyMjQgLTc4bC03OCAyMjRsMjM0IDQ1bC0xODAgMTU1bDE4MCAxNTZsLTIzNCA0NGw3OCAyMjVsLTIyNCAtNzhsLTQ1IDIzM2wtMTU1IC0xODBsLTE1NSAxODBsLTQ1IC0yMzNsLTIyNCA3OGw3OCAtMjI1bC0yMzMgLTQ0bDE3OSAtMTU2eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTI1OyIgZD0iTTAgMjAwaDIwMHY2MDBoLTIwMHYtNjAwek0zMDAgMjc1cTAgLTc1IDEwMCAtNzVoNjFxMTIzIC0xMDAgMTM5IC0xMDBoMjUwcTQ2IDAgODMgNTdsMjM4IDM0NHEyOSAzMSAyOSA3NHYxMDBxMCA0NCAtMzAuNSA4NC41dC02OS41IDQwLjVoLTMyOHEyOCAxMTggMjggMTI1djE1MHEwIDQ0IC0zMC41IDg0LjV0LTY5LjUgNDAuNWgtNTBxLTI3IDAgLTUxIC0yMHQtMzggLTQ4bC05NiAtMTk4bC0xNDUgLTE5NnEtMjAgLTI2IC0yMCAtNjN2LTQwMHogTTQwMCAzMDB2Mzc1bDE1MCAyMTJsMTAwIDIxM2g1MHYtMTc1bC01MCAtMjI1aDQ1MHYtMTI1bC0yNTAgLTM3NWgtMjE0bC0xMzYgMTAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjY7IiBkPSJNMCA0MDB2NjAwaDIwMHYtNjAwaC0yMDB6TTMwMCA1MjV2NDAwcTAgNzUgMTAwIDc1aDYxcTEyMyAxMDAgMTM5IDEwMGgyNTBxNDYgMCA4MyAtNTdsMjM4IC0zNDRxMjkgLTMxIDI5IC03NHYtMTAwcTAgLTQ0IC0zMC41IC04NC41dC02OS41IC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwLjUgLTg0LjV0LTY5LjUgLTQwLjVoLTUwcS0yNyAwIC01MSAyMHQtMzggNDhsLTk2IDE5OGwtMTQ1IDE5NiBxLTIwIDI2IC0yMCA2M3pNNDAwIDUyNWwxNTAgLTIxMmwxMDAgLTIxM2g1MHYxNzVsLTUwIDIyNWg0NTB2MTI1bC0yNTAgMzc1aC0yMTRsLTEzNiAtMTAwaC0xMDB2LTM3NXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNzsiIGQ9Ik04IDIwMHY2MDBoMjAwdi02MDBoLTIwMHpNMzA4IDI3NXY1MjVxMCAxNyAxNCAzNS41dDI4IDI4LjVsMTQgOWwzNjIgMjMwcTE0IDYgMjUgNnExNyAwIDI5IC0xMmwxMDkgLTExMnExNCAtMTQgMTQgLTM0cTAgLTE4IC0xMSAtMzJsLTg1IC0xMjFoMzAycTg1IDAgMTM4LjUgLTM4dDUzLjUgLTExMHQtNTQuNSAtMTExdC0xMzguNSAtMzloLTEwN2wtMTMwIC0zMzlxLTcgLTIyIC0yMC41IC00MS41dC0yOC41IC0xOS41aC0zNDEgcS03IDAgLTkwIDgxdC04MyA5NHpNNDA4IDI4OWwxMDAgLTg5aDI5M2wxMzEgMzM5cTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3ExNiAwIDI1IDE1dDkgMzZxMCAyMCAtOSAzNC41dC0yNSAxNC41aC00NTdoLTYuNWgtNy41dC02LjUgMC41dC02IDF0LTUgMS41dC01LjUgMi41dC00IDR0LTQgNS41cS01IDEyIC01IDIwcTAgMTQgMTAgMjdsMTQ3IDE4M2wtODYgODNsLTMzOSAtMjM2di01MDN6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMjg7IiBkPSJNLTEwMSA2NTFxMCA3MiA1NCAxMTB0MTM5IDM3aDMwMmwtODUgMTIxcS0xMSAxNiAtMTEgMzJxMCAyMSAxNCAzNGwxMDkgMTEzcTEzIDEyIDI5IDEycTExIDAgMjUgLTZsMzY1IC0yMzBxNyAtNCAxNi41IC0xMC41dDI2IC0yNnQxNi41IC0zNi41di01MjZxMCAtMTMgLTg1LjUgLTkzLjV0LTkzLjUgLTgwLjVoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NCAwIC0xMzkgMzl0LTU1IDExMXpNLTEgNjAxaDIyMiBxMTUgMCAyOC41IC0yMC41dDE5LjUgLTQwLjVsMTMxIC0zMzloMjkzbDEwNiA4OXY1MDJsLTM0MiAyMzdsLTg3IC04M2wxNDUgLTE4NHExMCAtMTEgMTAgLTI2cTAgLTExIC01IC0yMHEtMSAtMyAtMy41IC01LjVsLTQgLTR0LTUgLTIuNXQtNS41IC0xLjV0LTYuNSAtMXQtNi41IC0wLjVoLTcuNWgtNi41aC00NzZ2LTEwMHpNOTk5IDIwMXY2MDBoMjAwdi02MDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik05NyA3MTlsMjMwIC0zNjNxNCAtNiAxMC41IC0xNS41dDI2IC0yNXQzNi41IC0xNS41aDUyNXExMyAwIDk0IDgzdDgxIDkwdjM0MnEwIDE1IC0yMCAyOC41dC00MSAxOS41bC0zMzkgMTMxdjEwNnEwIDg0IC0zOSAxMzl0LTExMSA1NXQtMTEwIC01My41dC0zOCAtMTM4LjV2LTMwMmwtMTIxIDg0cS0xNSAxMiAtMzMuNSAxMS41dC0zMi41IC0xMy41bC0xMTIgLTExMHEtMjIgLTIyIC02IC01M3pNMTcyIDczOWw4MyA4NmwxODMgLTE0NiBxMjIgLTE4IDQ3IC01cTMgMSA1LjUgMy41bDQgNHQyLjUgNXQxLjUgNS41dDEgNi41dDAuNSA2djcuNXY3djQ1NnEwIDIyIDI1IDMxdDUwIC0wLjV0MjUgLTMwLjV2LTIwMnEwIC0xNiAyMCAtMjkuNXQ0MSAtMTkuNWwzMzkgLTEzMHYtMjk0bC04OSAtMTAwaC01MDN6TTQwMCAwdjIwMGg2MDB2LTIwMGgtNjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMwOyIgZD0iTTEgNTg1cS0xNSAtMzEgNyAtNTNsMTEyIC0xMTBxMTMgLTEzIDMyIC0xMy41dDM0IDEwLjVsMTIxIDg1bC0xIC0zMDJxMCAtODQgMzguNSAtMTM4dDExMC41IC01NHQxMTEgNTV0MzkgMTM5djEwNmwzMzkgMTMxcTIwIDYgNDAuNSAxOS41dDIwLjUgMjguNXYzNDJxMCA3IC04MSA5MHQtOTQgODNoLTUyNXEtMTcgMCAtMzUuNSAtMTR0LTI4LjUgLTI4bC0xMCAtMTV6TTc2IDU2NWwyMzcgMzM5aDUwM2w4OSAtMTAwdi0yOTRsLTM0MCAtMTMwIHEtMjAgLTYgLTQwIC0yMHQtMjAgLTI5di0yMDJxMCAtMjIgLTI1IC0zMXQtNTAgMHQtMjUgMzF2NDU2djE0LjV0LTEuNSAxMS41dC01IDEydC05LjUgN3EtMjQgMTMgLTQ2IC01bC0xODQgLTE0NnpNMzA1IDExMDR2MjAwaDYwMHYtMjAwaC02MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzE7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTE2MiAwIDI5OS41IC04MHQyMTcuNSAtMjE4dDgwIC0zMDB0LTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTMwMCA4MHQtMjE4IDIxNy41dC04MCAyOTkuNXpNMzAwIDUwMGgzMDBsLTIgLTE5NGw0MDIgMjk0bC00MDIgMjk4di0xOTdoLTI5OHYtMjAxeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTAgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMxLjUgNDcuNXExMjIgMCAyMzIuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTggLTIxNy41dC0zMDAgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE3LjV0LTgwIDI5OS41ek0yMDAgNjAwbDQwMCAtMjk0djE5NGgzMDJ2MjAxaC0zMDB2MTk3eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTMzOyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwaDIwMHYtMzAwaDIwMHYzMDBoMjAwbC0zMDAgNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwbDMwMCAtNDAwbDMwMCA0MDBoLTIwMHYzMDBoLTIwMHYtMzAwaC0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzU7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTEyMSAwIDIzMS41IC00Ny41dDE5MC41IC0xMjcuNXQxMjcuNSAtMTkwLjV0NDcuNSAtMjMyLjVxMCAtMTYyIC04MCAtMjk5LjV0LTIxNy41IC0yMTcuNXQtMjk5LjUgLTgwdC0zMDAgODB0LTIxOCAyMTcuNXQtODAgMjk5LjV6TTI1NCA3ODBxLTggLTM0IDUuNSAtOTN0Ny41IC04N3EwIC05IDE3IC00NHQxNiAtNjBxMTIgMCAyMyAtNS41IHQyMyAtMTV0MjAgLTEzLjVxMjAgLTEwIDEwOCAtNDJxMjIgLTggNTMgLTMxLjV0NTkuNSAtMzguNXQ1Ny41IC0xMXE4IC0xOCAtMTUgLTU1LjV0LTIwIC01Ny41cTEyIC0yMSAyMi41IC0zNC41dDI4IC0yN3QzNi41IC0xNy41cTAgLTYgLTMgLTE1LjV0LTMuNSAtMTQuNXQ0LjUgLTE3cTEwMSAtMiAyMjEgMTExcTMxIDMwIDQ3IDQ4dDM0IDQ5dDIxIDYycS0xNCA5IC0zNy41IDkuNXQtMzUuNSA3LjVxLTE0IDcgLTQ5IDE1dC01MiAxOSBxLTkgMCAtMzkuNSAtMC41dC00Ni41IC0xLjV0LTM5IC02LjV0LTM5IC0xNi41cS01MCAtMzUgLTY2IC0xMnEtNCAyIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxN3QtMjQuNSA3cTIgMjIgLTIgNDF0LTE2LjUgMjh0LTM4LjUgLTIwcS0yMyAtMjUgLTQyIDRxLTE5IDI4IC04IDU4cTggMTYgMjIgMjJxNiAtMSAyNiAtMS41dDMzLjUgLTQuNXQxOS41IC0xM3ExMiAtMTkgMzIgLTM3LjV0MzQgLTI3LjVsMTQgLThxMCAzIDkuNSAzOS41IHQ1LjUgNTcuNXEtNCAyMyAxNC41IDQ0LjV0MjIuNSAzMS41cTUgMTQgMTAgMzV0OC41IDMxdDE1LjUgMjIuNXQzNCAyMS41cS02IDE4IDEwIDM3cTggMCAyMy41IC0xLjV0MjQuNSAtMS41dDIwLjUgNC41dDIwLjUgMTUuNXEtMTAgMjMgLTMwLjUgNDIuNXQtMzggMzB0LTQ5IDI2LjV0LTQzLjUgMjNxMTEgNDEgMSA0NHEzMSAtMTMgNTguNSAtMTQuNXQzOS41IDMuNWwxMSA0cTYgMzYgLTE3IDUzLjV0LTY0IDI4LjV0LTU2IDIzIHEtMTkgLTMgLTM3IDBxLTE1IC0xMiAtMzYuNSAtMjF0LTM0LjUgLTEydC00NCAtOHQtMzkgLTZxLTE1IC0zIC00NiAwdC00NSAtM3EtMjAgLTYgLTUxLjUgLTI1LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzl6TTUxOCA5MTVxMyAxMiAxNiAzMC41dDE2IDI1LjVxMTAgLTEwIDE4LjUgLTEwdDE0IDZ0MTQuNSAxNC41dDE2IDEyLjVxMCAtMTggOCAtNDIuNXQxNi41IC00NCB0OS41IC0yMy41cS02IDEgLTM5IDV0LTUzLjUgMTB0LTM2LjUgMTZ6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxMzY7IiBkPSJNMCAxNjQuNXEwIDIxLjUgMTUgMzcuNWw2MDAgNTk5cS0zMyAxMDEgNiAyMDEuNXQxMzUgMTU0LjVxMTY0IDkyIDMwNiAtOWwtMjU5IC0xMzhsMTQ1IC0yMzJsMjUxIDEyNnExMyAtMTc1IC0xNTEgLTI2N3EtMTIzIC03MCAtMjUzIC0yM2wtNTk2IC01OTZxLTE1IC0xNiAtMzYuNSAtMTZ0LTM2LjUgMTZsLTExMSAxMTBxLTE1IDE1IC0xNSAzNi41eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTM3OyIgaG9yaXotYWR2LXg9IjEyMjAiIGQ9Ik0wIDE5NnYxMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgNTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTAgOTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNNjAwIDU5Nmg1MDB2MTAwaC01MDB2LTEwMHpNODAwIDE5NmgzMDB2MTAwaC0zMDB2LTEwMHpNOTAwIDk5NmgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzODsiIGQ9Ik0xMDAgMTEwMHYxMDBoMTAwMHYtMTAwaC0xMDAwek0xNTAgMTAwMGg5MDBsLTM1MCAtNTAwdi0zMDBsLTIwMCAtMjAwdjUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTEzOTsiIGQ9Ik0wIDIwMHYyMDBoMTIwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMCA1MDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgyMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMGgtNTAwdjEwMGgtMjAwdi0xMDBoLTUwMHogTTUwMCAxMDAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQwOyIgZD0iTTAgMHY0MDBsMTI5IC0xMjlsMjAwIDIwMGwxNDIgLTE0MmwtMjAwIC0yMDBsMTI5IC0xMjloLTQwMHpNMCA4MDBsMTI5IDEyOWwyMDAgLTIwMGwxNDIgMTQybC0yMDAgMjAwbDEyOSAxMjloLTQwMHYtNDAwek03MjkgMzI5bDE0MiAxNDJsMjAwIC0yMDBsMTI5IDEyOXYtNDAwaC00MDBsMTI5IDEyOXpNNzI5IDg3MWwyMDAgMjAwbC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTI5bC0yMDAgLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik0wIDU5NnEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4MiA1OTZxMCAtMTcyIDEyMS41IC0yOTN0MjkyLjUgLTEyMXQyOTIuNSAxMjF0MTIxLjUgMjkzcTAgMTcxIC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0yOTEgNjU1IHEwIDIzIDE1LjUgMzguNXQzOC41IDE1LjV0MzkgLTE2dDE2IC0zOHEwIC0yMyAtMTYgLTM5dC0zOSAtMTZxLTIyIDAgLTM4IDE2dC0xNiAzOXpNNDAwIDg1MHEwIDIyIDE2IDM4LjV0MzkgMTYuNXEyMiAwIDM4IC0xNnQxNiAtMzl0LTE2IC0zOXQtMzggLTE2cS0yMyAwIC0zOSAxNi41dC0xNiAzOC41ek01MTMgNjA5cTAgMzIgMjEgNTYuNXQ1MiAyOS41bDEyMiAxMjZsMSAxcS05IDE0IC05IDI4cTAgMjIgMTYgMzguNXQzOSAxNi41IHEyMiAwIDM4IC0xNnQxNiAtMzl0LTE2IC0zOXQtMzggLTE2cS0xNiAwIC0yOSAxMGwtNTUgLTE0NXExNyAtMjIgMTcgLTUxcTAgLTM2IC0yNS41IC02MS41dC02MS41IC0yNS41cS0zNyAwIC02Mi41IDI1LjV0LTI1LjUgNjEuNXpNODAwIDY1NXEwIDIyIDE2IDM4dDM5IDE2dDM4LjUgLTE1LjV0MTUuNSAtMzguNXQtMTYgLTM5dC0zOCAtMTZxLTIzIDAgLTM5IDE2dC0xNiAzOXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MjsiIGQ9Ik0tNDAgMzc1cS0xMyAtOTUgMzUgLTE3M3EzNSAtNTcgOTQgLTg5dDEyOSAtMzJxNjMgMCAxMTkgMjhxMzMgMTYgNjUgNDAuNXQ1Mi41IDQ1LjV0NTkuNSA2NHE0MCA0NCA1NyA2MWwzOTQgMzk0cTM1IDM1IDQ3IDg0dC0zIDk2cS0yNyA4NyAtMTE3IDEwNHEtMjAgMiAtMjkgMnEtNDYgMCAtNzkuNSAtMTd0LTY3LjUgLTUxbC0zODggLTM5NmwtNyAtN2w2OSAtNjdsMzc3IDM3M3EyMCAyMiAzOSAzOHEyMyAyMyA1MCAyM3EzOCAwIDUzIC0zNiBxMTYgLTM5IC0yMCAtNzVsLTU0NyAtNTQ3cS01MiAtNTIgLTEyNSAtNTJxLTU1IDAgLTEwMCAzM3QtNTQgOTZxLTUgMzUgMi41IDY2dDMxLjUgNjN0NDIgNTB0NTYgNTRxMjQgMjEgNDQgNDFsMzQ4IDM0OHE1MiA1MiA4Mi41IDc5LjV0ODQgNTR0MTA3LjUgMjYuNXEyNSAwIDQ4IC00cTk1IC0xNyAxNTQgLTk0LjV0NTEgLTE3NS41cS03IC0xMDEgLTk4IC0xOTJsLTI1MiAtMjQ5bC0yNTMgLTI1Nmw3IC03bDY5IC02MGw1MTcgNTExIHE2NyA2NyA5NSAxNTd0MTEgMTgzcS0xNiA4NyAtNjcgMTU0dC0xMzAgMTAzcS02OSAzMyAtMTUyIDMzcS0xMDcgMCAtMTk3IC01NXEtNDAgLTI0IC0xMTEgLTk1bC01MTIgLTUxMnEtNjggLTY4IC04MSAtMTYzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTc5IDc4NHEwIDEzMSA5OSAyMjkuNXQyMzAgOTguNXExNDQgMCAyNDIgLTEyOXExMDMgMTI5IDI0NSAxMjlxMTMwIDAgMjI3IC05OC41dDk3IC0yMjkuNXEwIC00NiAtMTcuNSAtOTF0LTYxIC05OXQtNzcgLTg5LjV0LTEwNC41IC0xMDUuNXEtMTk3IC0xOTEgLTI5MyAtMzIybC0xNyAtMjNsLTE2IDIzcS00MyA1OCAtMTAwIDEyMi41dC05MiA5OS41dC0xMDEgMTAwbC04NC41IDg0LjV0LTY4IDc0dC02MCA3OHQtMzMuNSA3MC41dC0xNSA3OHogTTI1MCA3ODRxMCAtMjcgMzAuNSAtNzB0NjEuNSAtNzUuNXQ5NSAtOTQuNWwyMiAtMjJxOTMgLTkwIDE5MCAtMjAxcTgyIDkyIDE5NSAyMDNsMTIgMTJxNjQgNjIgOTcuNSA5N3Q2NC41IDc5dDMxIDcycTAgNzEgLTQ4IDExOS41dC0xMDYgNDguNXEtNzMgMCAtMTMxIC04M2wtMTE4IC0xNzFsLTExNCAxNzRxLTUxIDgwIC0xMjQgODBxLTU5IDAgLTEwOC41IC00OS41dC00OS41IC0xMTguNXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0NDsiIGQ9Ik01NyAzNTNxMCAtOTQgNjYgLTE2MGwxNDEgLTE0MXE2NiAtNjYgMTU5IC02NnE5NSAwIDE1OSA2NmwyODMgMjgzcTY2IDY2IDY2IDE1OXQtNjYgMTU5bC0xNDEgMTQxcS0xMiAxMiAtMTkgMTdsLTEwNSAtMTA1bDIxMiAtMjEybC0zODkgLTM4OWwtMjQ3IDI0OGw5NSA5NWwtMTggMThxLTQ2IDQ1IC03NSAxMDFsLTU1IC01NXEtNjYgLTY2IC02NiAtMTU5ek0yNjkgNzA2cTAgLTkzIDY2IC0xNTlsMTQxIC0xNDFsMTkgLTE3bDEwNSAxMDUgbC0yMTIgMjEybDM4OSAzODlsMjQ3IC0yNDdsLTk1IC05NmwxOCAtMThxNDYgLTQ2IDc3IC05OWwyOSAyOXEzNSAzNSA2Mi41IDg4dDI3LjUgOTZxMCA5MyAtNjYgMTU5bC0xNDEgMTQxcS02NiA2NiAtMTU5IDY2cS05NSAwIC0xNTkgLTY2bC0yODMgLTI4M3EtNjYgLTY0IC02NiAtMTU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ1OyIgZD0iTTIwMCAxMDB2OTUzcTAgMjEgMzAgNDZ0ODEgNDh0MTI5IDM4dDE2MyAxNXQxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMDAgMzAwaDYwMHY3MDBoLTYwMHYtNzAwek00OTYgMTUwcTAgLTQzIDMwLjUgLTczLjV0NzMuNSAtMzAuNXQ3My41IDMwLjV0MzAuNSA3My41dC0zMC41IDczLjV0LTczLjUgMzAuNSB0LTczLjUgLTMwLjV0LTMwLjUgLTczLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNMCAwbDMwMyAzODBsMjA3IDIwOGwtMjEwIDIxMmgzMDBsMjY3IDI3OWwtMzUgMzZxLTE1IDE0IC0xNSAzNXQxNSAzNXExNCAxNSAzNSAxNXQzNSAtMTVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTUgLTM1cS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0yMDggLTIwN3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE0ODsiIGQ9Ik0yOTUgNDMzaDEzOXE1IC03NyA0OC41IC0xMjYuNXQxMTcuNSAtNjQuNXYzMzVsLTI3IDdxLTQ2IDE0IC03OSAyNi41dC03MiAzNnQtNjIuNSA1MnQtNDAgNzIuNXQtMTYuNSA5OXEwIDkyIDQ0IDE1OS41dDEwOSAxMDF0MTQ0IDQwLjV2NzhoMTAwdi03OXEzOCAtNCA3Mi41IC0xMy41dDc1LjUgLTMxLjV0NzEgLTUzLjV0NTEuNSAtODR0MjQuNSAtMTE4LjVoLTE1OXEtOCA3MiAtMzUgMTA5LjV0LTEwMSA1MC41di0zMDdsNjQgLTE0IHEzNCAtNyA2NCAtMTYuNXQ3MCAtMzEuNXQ2Ny41IC01MnQ0Ny41IC04MC41dDIwIC0xMTIuNXEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTZ2LTc3aC0xMDB2NzhxLTE1MiAxNyAtMjM3IDEwNHEtNDAgNDAgLTUyLjUgOTMuNXQtMTUuNSAxMzkuNXpNNDY2IDg4OXEwIC0yOSA4IC01MXQxNi41IC0zNHQyOS41IC0yMi41dDMxIC0xMy41dDM4IC0xMHE3IC0yIDExIC0zdjI3NHEtNjEgLTggLTk3LjUgLTM3LjV0LTM2LjUgLTEwMi41ek03MDAgMjM3IHExNzAgMTggMTcwIDE1MXEwIDY0IC00NCA5OS41dC0xMjYgNjAuNXYtMzExeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTQ5OyIgZD0iTTEwMCA2MDB2MTAwaDE2NnEtMjQgNDkgLTQ0IDEwNHEtMTAgMjYgLTE0LjUgNTUuNXQtMyA3Mi41dDI1IDkwdDY4LjUgODdxOTcgODggMjYzIDg4cTEyOSAwIDIzMCAtODl0MTAxIC0yMDhoLTE1M3EwIDUyIC0zNCA4OS41dC03NCA1MS41dC03NiAxNHEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMTEgMi41IC0yNC41dDUuNSAtMjR0OS41IC0yNi41dDEwLjUgLTI1dDE0IC0yNy41dDE0IC0yNS41IHQxNS41IC0yN3QxMy41IC0yNGgyNDJ2LTEwMGgtMTk3cTggLTUwIC0yLjUgLTExNXQtMzEuNSAtOTRxLTQxIC01OSAtOTkgLTExM3EzNSAxMSA4NCAxOHQ3MCA3cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTc2IDAgMTM2IDMwbDUwIC0xNDdxLTQxIC0yNSAtODAuNSAtMzYuNXQtNTkgLTEzdC02MS41IC0xLjVxLTIzIDAgLTEyOCAzM3QtMTU1IDI5cS0zOSAtNCAtODIgLTE3dC02NiAtMjVsLTI0IC0xMWwtNTUgMTQ1bDE2LjUgMTF0MTUuNSAxMCB0MTMuNSA5LjV0MTQuNSAxMnQxNC41IDE0dDE3LjUgMTguNXE0OCA1NSA1NCAxMjYuNXQtMzAgMTQyLjVoLTIyMXoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MDsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek02MDIgOTAwbDI5OCAzMDBsMjk4IC0zMDBoLTE5OHYtOTAwaC0yMDB2OTAwaC0xOTh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTE7IiBkPSJNMiAzMDBoMTk4djkwMGgyMDB2LTkwMGgxOThsLTI5OCAtMzAwek03MDAgMHYyMDBoMTAwdi0xMDBoMjAwdi0xMDBoLTMwMHpNNzAwIDQwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTcwMCA3MDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek04MDEgOTAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTUyOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek03MDAgNzAwdjIwMGgxMDB2LTEwMGgyMDB2LTEwMGgtMzAwek03MDAgMTEwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTgwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTM7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNODAwIDEwMHY0MDBoMzAwdi01MDBoLTEwMHYxMDBoLTIwMHpNODAwIDExMDB2MTAwaDIwMHYtNTAwaC0xMDB2NDAwaC0xMDB6TTkwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNMiAzMDBsMjk4IC0zMDBsMjk4IDMwMGgtMTk4djkwMGgtMjAwdi05MDBoLTE5OHpNODAwIDQwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHpNODAwIDgwMHY0MDBoMzAwdi01MDBoLTEwMHYxMDBoLTIwMHpNOTAxIDkwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NTsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGg1MDB2LTIwMGgtNTAwek03MDAgNDAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgNzAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgMTAwMHYyMDBoMjAwdi0yMDBoLTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NjsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGgyMDB2LTIwMGgtMjAwek03MDAgNDAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgNzAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgMTAwMHYyMDBoNTAwdi0yMDBoLTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NzsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMzAwcTE2MiAwIDI4MSAtMTE4LjV0MTE5IC0yODEuNXYtMzAwcTAgLTE2NSAtMTE4LjUgLTI4Mi41dC0yODEuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41dC0xMTcuNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE1ODsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjMgMTE5IDI4MS41dDI4MSAxMTguNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTYzIDAgLTI4MS41IDExNy41dC0xMTguNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNNDAwIDMwMGwzMzMgMjUwbC0zMzMgMjUwdi01MDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNTk7IiBkPSJNMCA0MDB2MzAwcTAgMTYzIDExNy41IDI4MS41dDI4Mi41IDExOC41aDMwMHExNjMgMCAyODEuNSAtMTE5dDExOC41IC0yODF2LTMwMHEwIC0xNjUgLTExNy41IC0yODIuNXQtMjgyLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6TTMwMCA3MDBsMjUwIC0zMzNsMjUwIDMzM2gtNTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTAgNDAwdjMwMHEwIDE2NSAxMTcuNSAyODIuNXQyODIuNSAxMTcuNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2MiAtMTE4LjUgLTI4MXQtMjgxLjUgLTExOWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE4LjV0LTExNy41IDI4MS41ek0yMDAgMzAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNSBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0zMDAgNDAwaDUwMGwtMjUwIDMzM3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik0wIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6TTUwMCAwdjIwMGg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtNTAwdjIwMGg0MDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTQwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MjsiIGQ9Ik0yMTYgNTE5cTEwIC0xOSAzMiAtMTloMzAycS0xNTUgLTQzOCAtMTYwIC00NThxLTUgLTIxIDQgLTMybDkgLThsOSAtMXExMyAwIDI2IDE2bDUzOCA2MzBxMTUgMTkgNiAzNnEtOCAxOCAtMzIgMTZoLTMwMHExIDQgNzggMjE5LjV0NzkgMjI3LjVxMiAxNyAtNiAyN2wtOCA4aC05cS0xNiAwIC0yNSAtMTVxLTQgLTUgLTk4LjUgLTExMS41dC0yMjggLTI1N3QtMjA5LjUgLTIzOC41cS0xNyAtMTkgLTcgLTQweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHE0NyAwIDEwMCAxNXYxODVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWg1MDB2MTg1cS0xNCA0IC0xMTQgNy41dC0xOTMgNS41bC05MyAycS0xNjUgMCAtMjgyLjUgLTExNy41dC0xMTcuNSAtMjgyLjV2LTMwMHpNNjAwIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6ICIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY0OyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHExNjMgMCAyODEuNSAxMTcuNXQxMTguNSAyODIuNXY5OGwtNzggNzNsLTEyMiAtMTIzdi0xNDhxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxNTZsMTE4IDEyMmwtNzQgNzhoLTEwMHEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41IHYtMzAwek00OTYgNzA5bDM1MyAzNDJsLTE0OSAxNDloNTAwdi01MDBsLTE0OSAxNDlsLTM0MiAtMzUzeiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDA2IDYwMCBxMCA4MCA1NyAxMzd0MTM3IDU3dDEzNyAtNTd0NTcgLTEzN3QtNTcgLTEzN3QtMTM3IC01N3QtMTM3IDU3dC01NyAxMzd6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA4MDBsNDQ1IC01MDBsNDUwIDUwMGgtMjk1djQwMGgtMzAwdi00MDBoLTMwMHpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNjc7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA3MDBoMzAwdi0zMDBoMzAwdjMwMGgyOTVsLTQ0NSA1MDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTY4OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgNzA1bDMwNSAtMzA1bDU5NiA1OTZsLTE1NCAxNTVsLTQ0MiAtNDQybC0xNTAgMTUxek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE2OTsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMTAwIDk4OGw5NyAtOThsMjEyIDIxM2wtOTcgOTd6TTIwMCA0MDFoNzAwdjY5OWwtMjUwIC0yMzlsLTE0OSAxNDlsLTIxMiAtMjEybDE0OSAtMTQ5ek05MDAgMTUwaDEwMHY1MGgtMTAwdi01MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMjAwIDYxMmwyMTIgLTIxMmw5OCA5N2wtMjEzIDIxMnpNMzAwIDEyMDBsMjM5IC0yNTBsLTE0OSAtMTQ5bDIxMiAtMjEybDE0OSAxNDhsMjQ4IC0yMzd2NzAwaC02OTl6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTcxOyIgZD0iTTIzIDQxNWwxMTc3IDc4NHYtMTA3OWwtNDc1IDI3MmwtMzEwIC0zOTN2NDE2aC0zOTJ6TTQ5NCAyMTBsNjcyIDkzOGwtNjcyIC03MTJ2LTIyNnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi04NTBxMCAtMjEgLTE1IC0zNS41dC0zNSAtMTQuNWgtMTUwdjQwMGgtNzAwdi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAxMDAwaDEwMHYyMDBoLTEwMHYtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTczOyIgZD0iTTAgMTUwdjEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDBsMjAwIC0yMDB2LTIxOGwtMjc2IC0yNzVsLTEyMCAxMjBsLTEyNiAtMTI3aC0zNzh2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNTgxIDMwNmwxMjMgMTIzbDEyMCAtMTIwbDM1MyAzNTJsMTIzIC0xMjNsLTQ3NSAtNDc2ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NDsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0yNjlsLTEwMyAtMTAzbC0xNzAgMTcwbC0yOTggLTI5OGgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAxMDAwaDEwMHYyMDBoLTEwMHYtMjAwek03MDAgMTMzbDE3MCAxNzBsLTE3MCAxNzBsMTI3IDEyN2wxNzAgLTE3MGwxNzAgMTcwbDEyNyAtMTI4bC0xNzAgLTE2OWwxNzAgLTE3MCBsLTEyNyAtMTI3bC0xNzAgMTcwbC0xNzAgLTE3MHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi0zMDBoLTQwMHYtMjAwaC01MDB2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGwzMDAgLTMwMGwzMDAgMzAwaC0yMDB2MzAwaC0yMDB2LTMwMGgtMjAwek02MDAgMTAwMHYyMDBoMTAwdi0yMDBoLTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi00MDJsLTIwMCAyMDBsLTI5OCAtMjk4aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGgyMDB2LTMwMGgyMDB2MzAwaDIwMGwtMzAwIDMwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxNzc7IiBkPSJNMCAyNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDExMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djU1MGgtMTIwMHYtNTUwek0wIDkwMGgxMjAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUwek0xMDAgMzAwdjIwMGg0MDB2LTIwMGgtNDAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTAgNDAwbDMwMCAyOTh2LTE5OGg0MDB2LTIwMGgtNDAwdi0xOTh6TTEwMCA4MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTMwMCA4MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTUwMCA4MDB2MjAwaDQwMHYxOThsMzAwIC0yOThsLTMwMCAtMjk4djE5OGgtNDAwek04MDAgMzAwdjIwMGgxMDB2LTIwMGgtMTAwek0xMDAwIDMwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE3OTsiIGQ9Ik0xMDAgNzAwdjQwMGw1MCAxMDBsNTAgLTEwMHYtMzAwaDEwMHYzMDBsNTAgMTAwbDUwIC0xMDB2LTMwMGgxMDB2MzAwbDUwIDEwMGw1MCAtMTAwdi00MDBsLTEwMCAtMjAzdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3ek04MDAgNTk3cTAgLTI5IDEwLjUgLTU1LjV0MjUgLTQzdDI5IC0yOC41dDI1LjUgLTE4bDEwIC01di0zOTdxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWgyMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djExMDZxMCAzMSAtMTggNDAuNXQtNDQgLTcuNWwtMjc2IC0xMTdxLTI1IC0xNiAtNDMuNSAtNTAuNXQtMTguNSAtNjUuNXYtMzU5eiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEwMCAwaDQwMHY1NnEtNzUgMCAtODcuNSA2dC0xMi41IDQ0djM5NGg1MDB2LTM5NHEwIC0zOCAtMTIuNSAtNDR0LTg3LjUgLTZ2LTU2aDQwMHY1NnEtNCAwIC0xMSAwLjV0LTI0IDN0LTMwIDd0LTI0IDE1dC0xMSAyNC41djg4OHEwIDIyIDI1IDM0LjV0NTAgMTMuNWwyNSAydjU2aC00MDB2LTU2cTc1IDAgODcuNSAtNnQxMi41IC00NHYtMzk0aC01MDB2Mzk0cTAgMzggMTIuNSA0NHQ4Ny41IDZ2NTZoLTQwMHYtNTZxNCAwIDExIC0wLjUgdDI0IC0zdDMwIC03dDI0IC0xNXQxMSAtMjQuNXYtODg4cTAgLTIyIC0yNSAtMzQuNXQtNTAgLTEzLjVsLTI1IC0ydi01NnoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MTsiIGQ9Ik0wIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMzAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTMwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwek0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNWwyOTUgOTh2LTI5OGgtNDI1bC0xMDAgLTEwMGgtMzc1ek0xMDAgMzAwdjIwMGgzMDB2LTIwMGgtMzAwek0xMDAgNjAwdjIwMGgzMDB2LTIwMGgtMzAweiBNMTAwIDEwMDBoNDAwbDIwMCAtMjAwdi05OGwyOTUgOThoMTA1djIwMGgtNDI1bC0xMDAgMTAwaC0zNzV6TTcwMCA0MDJ2MTYzbDQwMCAxMzN2LTE2M3oiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MjsiIGQ9Ik0xNi41IDk3NC41cTAuNSAtMjEuNSAxNiAtOTB0NDYuNSAtMTQwdDEwNCAtMTc3LjV0MTc1IC0yMDhxMTAzIC0xMDMgMjA3LjUgLTE3NnQxODAgLTEwMy41dDEzNyAtNDd0OTIuNSAtMTYuNWwzMSAxbDE2MyAxNjJxMTYgMTcgMTMgNDAuNXQtMjIgMzcuNWwtMTkyIDEzNnEtMTkgMTQgLTQ1IDEydC00MiAtMTlsLTExOSAtMTE4cS0xNDMgMTAzIC0yNjcgMjI3cS0xMjYgMTI2IC0yMjcgMjY4bDExOCAxMThxMTcgMTcgMjAgNDEuNSB0LTExIDQ0LjVsLTEzOSAxOTRxLTE0IDE5IC0zNi41IDIydC00MC41IC0xNGwtMTYyIC0xNjJxLTEgLTExIC0wLjUgLTMyLjV6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODM7IiBkPSJNMCA1MHYyMTJxMCAyMCAxMC41IDQ1LjV0MjQuNSAzOS41bDM2NSAzMDN2NTBxMCA0IDEgMTAuNXQxMiAyMi41dDMwIDI4LjV0NjAgMjN0OTcgMTAuNXQ5NyAtMTB0NjAgLTIzLjV0MzAgLTI3LjV0MTIgLTI0bDEgLTEwdi01MGwzNjUgLTMwM3ExNCAtMTQgMjQuNSAtMzkuNXQxMC41IC00NS41di0yMTJxMCAtMjEgLTE1IC0zNS41dC0zNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNzEyIHEwIC0yMSAxNC41IC0zMy41dDM0LjUgLTguNWwyMDIgMzNxMjAgNCAzNC41IDIxdDE0LjUgMzh2MTQ2cTE0MSAyNCAzMDAgMjR0MzAwIC0yNHYtMTQ2cTAgLTIxIDE0LjUgLTM4dDM0LjUgLTIxbDIwMiAtMzNxMjAgLTQgMzQuNSA4LjV0MTQuNSAzMy41djIwMHEtNiA4IC0xOSAyMC41dC02MyA0NXQtMTEyIDU3dC0xNzEgNDV0LTIzNSAyMC41cS05MiAwIC0xNzUgLTEwLjV0LTE0MS41IC0yN3QtMTA4LjUgLTM2LjV0LTgxLjUgLTQwIHQtNTMuNSAtMzYuNXQtMzEgLTI3LjVsLTkgLTEwdi0yMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTAwIDB2MTAwaDExMDB2LTEwMGgtMTEwMHpNMTc1IDIwMGg5NTBsLTEyNSAxNTB2MjUwbDEwMCAxMDB2NDAwaC0xMDB2LTIwMGgtMTAwdjIwMGgtMjAwdi0yMDBoLTEwMHYyMDBoLTIwMHYtMjAwaC0xMDB2MjAwaC0xMDB2LTQwMGwxMDAgLTEwMHYtMjUweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg1OyIgZD0iTTEwMCAwaDMwMHY0MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNDAwek01MDAgMHYxMDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMDBoLTMwMHpNOTAwIDB2NzAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTcwMGgtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg2OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYzMDBoLTIwMHYxMDBoMjAwdjEwMGgtMzAwdi0zMDBoMjAwdi0xMDBoLTIwMHYtMTAwek02MDAgMzAwaDIwMHYxMDBoMTAwdjMwMGgtMTAwdjEwMGgtMjAwdi01MDAgek03MDAgNDAwdjMwMGgxMDB2LTMwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg3OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDEwMHYyMDBoMTAwdi0yMDBoMTAwdjUwMGgtMTAwdi0yMDBoLTEwMHYyMDBoLTEwMHYtNTAwek02MDAgMzAwaDIwMHYxMDBoMTAwdjMwMGgtMTAwdjEwMGgtMjAwdi01MDAgek03MDAgNDAwdjMwMGgxMDB2LTMwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYxMDBoLTIwMHYzMDBoMjAwdjEwMGgtMzAwdi01MDB6TTYwMCAzMDBoMzAwdjEwMGgtMjAwdjMwMGgyMDB2MTAwaC0zMDB2LTUwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDU1MGwzMDAgLTE1MHYzMDB6TTYwMCA0MDBsMzAwIDE1MGwtMzAwIDE1MHYtMzAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwdjUwMGg3MDB2LTUwMGgtNzAwek0zMDAgNDAwaDEzMHE0MSAwIDY4IDQydDI3IDEwN3QtMjguNSAxMDh0LTY2LjUgNDNoLTEzMHYtMzAwek01NzUgNTQ5IHEwIC02NSAyNyAtMTA3dDY4IC00MmgxMzB2MzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTE7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCAzMDBoMzAwdjMwMGgtMjAwdjEwMGgyMDB2MTAwaC0zMDB2LTMwMGgyMDB2LTEwMGgtMjAwdi0xMDB6TTYwMSAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTcwMCA3MDBoMTAwIHYtNDAwaDEwMHY1MDBoLTIwMHYtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTkyOyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHY0MDBoLTIwMHYxMDBoLTEwMHYtNTAwek0zMDEgNDAwdjIwMGgxMDB2LTIwMGgtMTAwek02MDEgMzAwaDEwMHYxMDBoLTEwMHYtMTAwek03MDAgNzAwaDEwMCB2LTQwMGgxMDB2NTAwaC0yMDB2LTEwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDcwMHYxMDBoMzAwdi0zMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MjAwaC0yMDB6TTIwMSAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTYwMSAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6IE03MDAgNzAwdjEwMGgyMDB2LTUwMGgtMTAwdjQwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk0OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDAwIDUwMHYyMDAgbDEwMCAxMDBoMzAwdi0xMDBoLTMwMHYtMjAwaDMwMHYtMTAwaC0zMDB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUxOTU7IiBkPSJNMCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODIgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek00MDAgNDAwdjQwMGgzMDAgbDEwMCAtMTAwdi0xMDBoLTEwMHYxMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgtMTAwek03MDAgNDAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk3OyIgZD0iTS0xNCA0OTRxMCAtODAgNTYuNSAtMTM3dDEzNS41IC01N2gyMjJ2MzAwaDQwMHYtMzAwaDEyOHExMjAgMCAyMDUgODZ0ODUgMjA4cTAgMTIwIC04NSAyMDYuNXQtMjA1IDg2LjVxLTQ2IDAgLTkwIC0xNHEtNDQgOTcgLTEzNC41IDE1Ni41dC0yMDAuNSA1OS41cS0xNTIgMCAtMjYwIC0xMDcuNXQtMTA4IC0yNjAuNXEwIC0yNSAyIC0zN3EtNjYgLTE0IC0xMDguNSAtNjcuNXQtNDIuNSAtMTIyLjV6TTMwMCAyMDBoMjAwdjMwMGgyMDB2LTMwMCBoMjAwbC0zMDAgLTMwMHoiIC8+Cis8Z2x5cGggdW5pY29kZT0iJiN4ZTE5ODsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoOGw0MTQgNDE0bDQwMyAtNDAzcTk0IDI2IDE1NC41IDEwNHQ2MC41IDE3OHEwIDEyMSAtODUgMjA3LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwbDMwMCAzMDAgbDMwMCAtMzAwaC0yMDB2LTMwMGgtMjAwdjMwMGgtMjAweiIgLz4KKzxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTEwMCAyMDBoNDAwdi0xNTVsLTc1IC00NWgzNTBsLTc1IDQ1djE1NWg0MDBsLTI3MCAzMDBoMTcwbC0yNzAgMzAwaDE3MGwtMzAwIDMzM2wtMzAwIC0zMzNoMTcwbC0yNzAgLTMwMGgxNzB6IiAvPgorPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNMTIxIDcwMHEwIC01MyAyOC41IC05N3Q3NS41IC02NXEtNCAtMTYgLTQgLTM4cTAgLTc0IDUyLjUgLTEyNi41dDEyNi41IC01Mi41cTU2IDAgMTAwIDMwdi0zMDZsLTc1IC00NWgzNTBsLTc1IDQ1djMwNnE0NiAtMzAgMTAwIC0zMHE3NCAwIDEyNi41IDUyLjV0NTIuNSAxMjYuNXEwIDI0IC05IDU1cTUwIDMyIDc5LjUgODN0MjkuNSAxMTJxMCA5MCAtNjEuNSAxNTUuNXQtMTUwLjUgNzEuNXEtMjYgODkgLTk5LjUgMTQ1LjUgdC0xNjcuNSA1Ni41cS0xMTYgMCAtMTk3LjUgLTgxLjV0LTgxLjUgLTE5Ny41cTAgLTQgMSAtMTJ0MSAtMTFxLTE0IDIgLTIzIDJxLTc0IDAgLTEyNi41IC01Mi41dC01Mi41IC0xMjYuNXoiIC8+Cis8L2ZvbnQ+Cis8L2RlZnM+PC9zdmc+IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci50dGYgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OThlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzYzUzOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci53b2ZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaHRtbC9sYXllcl9kZXBzX21vZGFsLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2h0bWwvbGF5ZXJfZGVwc19tb2RhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZGJhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2h0bWwvbGF5ZXJfZGVwc19tb2RhbC5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzxkaXYgaWQ9ImRlcGVuZGVuY2llcy1tb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxmb3JtIGlkPSJkZXBlbmRlbmNpZXMtbW9kYWwtZm9ybSI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICA8aDM+PHNwYW4gaWQ9InRpdGxlIj48L3NwYW4+IGRlcGVuZGVuY2llczwvaDM+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICA8cCBpZD0iYm9keS10ZXh0Ij4gPHN0cm9uZyBpZD0ibGF5ZXItbmFtZSI+PC9zdHJvbmc+IGRlcGVuZHMgb24gc29tZSBsYXllcnMgdGhhdCBhcmUgbm90IGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gU2VsZWN0IHRoZSBvbmVzIHlvdSB3YW50IHRvIGFkZDo8L3A+CisgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIiBpZD0iZGVwZW5kZW5jaWVzLWxpc3QiPgorICAgICAgPC91bD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiPkFkZCBsYXllcnM8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0icmVzZXQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY2NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk2OTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvbG9nby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhZDczMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL2xvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9pbWcvdG9hc3Rlcl9idy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2NTkwNwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvaW1nL3RvYXN0ZXJfYncucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL0dQTC1MSUNFTlNFLnR4dCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL0dQTC1MSUNFTlNFLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkyN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvR1BMLUxJQ0VOU0UudHh0CkBAIC0wLDAgKzEsMjc4IEBACisgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9NSVQtTElDRU5TRS50eHQgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9NSVQtTElDRU5TRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlODI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanF1ZXJ5LXRyZWV0YWJsZS1saWNlbnNlL01JVC1MSUNFTlNFLnR4dApAQCAtMCwwICsxLDIwIEBACitDb3B5cmlnaHQgKGMpIDIwMTMgTHVkbyB2YW4gZGVuIEJvb20sIGh0dHA6Ly9sdWRvdmFuZGVuYm9vbS5jb20KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCitPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvUkVBRE1FLm1kIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnktdHJlZXRhYmxlLWxpY2Vuc2UvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZTdhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS10cmVldGFibGUtbGljZW5zZS9SRUFETUUubWQKQEAgLTAsMCArMSwyMCBAQAorIyBqUXVlcnkgdHJlZXRhYmxlCisKK2pRdWVyeSB0cmVldGFibGUgaXMgYSBwbHVnaW4gZm9yIGpRdWVyeSwgdGhlICdXcml0ZSBMZXNzLCBEbyBNb3JlLCBKYXZhU2NyaXB0CitMaWJyYXJ5Jy4gV2l0aCB0aGlzIHBsdWdpbiB5b3UgY2FuIGRpc3BsYXkgYSB0cmVlIGluIGFuIEhUTUwgdGFibGUsIGUuZy4gYQorZGlyZWN0b3J5IHN0cnVjdHVyZSBvciBhIG5lc3RlZCBsaXN0LiBXaHkgbm90IHVzZSBhIGxpc3QsIHlvdSBzYXk/IEJlY2F1c2UgbGlzdHMKK2FyZSBncmVhdCBmb3IgZGlzcGxheWluZyBhIHRyZWUsIGFuZCB0YWJsZXMgYXJlIG5vdC4gT2ggd2FpdCwgYnV0IHRoaXMgcGx1Z2luCit1c2VzIHRhYmxlcywgZG9lc24ndCBpdD8gWWVzLiBXaHkgZG8gSSB1c2UgYSB0YWJsZSB0byBkaXNwbGF5IGEgbGlzdD8gQmVjYXVzZSBJCituZWVkIG11bHRpcGxlIGNvbHVtbnMgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGRhdGEgYmVzaWRlcyB0aGUgdHJlZS4KKworRG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gdGhlIGpRdWVyeSBQbHVnaW4gUmVnaXN0cnkgb3IgZ3JhYiB0aGUgc291cmNlCitjb2RlIGZyb20gR2l0aHViLiBQbGVhc2UgcmVwb3J0IGlzc3VlcyB0aHJvdWdoIEdpdGh1YiBpc3N1ZXMuIFRoaXMgcGx1Z2luIGlzCityZWxlYXNlZCB1bmRlciBib3RoIHRoZSBNSVQgYW5kIHRoZSBHUEx2MiBsaWNlbnNlIGJ5IEx1ZG8gdmFuIGRlbiBCb29tLgorCisjIyBEb2N1bWVudGF0aW9uIGFuZCBFeGFtcGxlcworCitTZWUgaW5kZXguaHRtbCBmb3IgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLiBUaGUgbW9zdCByZWNlbnQgdmVyc2lvbgorb2YgdGhpcyBkb2N1bWVudCBpcyBhbHNvIGF2YWlsYWJsZSBvbmxpbmUgYXQKK2h0dHA6Ly9sdWRvLmN1YmljcGh1c2UubmwvanF1ZXJ5LXRyZWV0YWJsZS4gQW4gQUpBWCBlbmFibGVkIGV4YW1wbGUgYnVpbHQgd2l0aAorUnVieSBvbiBSYWlscyBjYW4gYmUgZm91bmQgYXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9sdWRvL2pxdWVyeS10cmVldGFibGUtYWpheC1leGFtcGxlLgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcXVlcnkudHJlZXRhYmxlLnRoZW1lLnRvYXN0ZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTRiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MKQEAgLTAsMCArMSw2NiBAQAorLyoKK3RhYmxlLnRyZWV0YWJsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7IAorICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBmb250LXNpemU6IC44ZW07CisgIGxpbmUtaGVpZ2h0OiAxOworICBtYXJnaW46IC42ZW0gMCAxLjhlbSAwOworICB3aWR0aDogMTAwJTsKK30KKwordGFibGUudHJlZXRhYmxlIGNhcHRpb24geworICBmb250LXNpemU6IC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBtYXJnaW4tYm90dG9tOiAuMmVtOworfQorCit0YWJsZS50cmVldGFibGUgdGJvZHkgdHIgdGQgeworICBjdXJzb3I6IGRlZmF1bHQ7CisgIHBhZGRpbmc6IC4zZW0gMWVtOworfQorCit0YWJsZS50cmVldGFibGUgc3BhbiB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBsZWZ0OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nOiAuMmVtIDAgLjJlbSAxLjVlbTsKK30KKyovCisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZpbGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FRQUFBQzEramZxQUFBQUJHZEJUVUVBQUsvSU53V0s2UUFBQUJsMFJWaDBVMjltZEhkaGNtVUFRV1J2WW1VZ1NXMWhaMlZTWldGa2VYSEpaVHdBQUFEb1NVUkJWQmdaQmNFeGJsTkJHQWJBMmNlZWdUUkJ1SUtPZ2lpaFNaTlRjQzVMVUhBaWhOSlIwa0dLQ0RjWUpZNkQzLzc3TWRPaW5UdnpBZ0N3OHlzVGhJdm4vVm9qSXlNakl5UFArYlMxc1VRSVYyczk1cEJERHZtYlAvbWRrZnQ4M3RwWWd1WnE1SmgvT2VhWWgreXp5OGhUSHZObGF4Tk5jem0rbGE5T1RsYXIxVWRBLytDMkE0dHJSQ25EM2pTOEJCMW9icTJHazZHVTZRYlFBUzRCVWFZU1FBZjRiaGhLS1RGZEF6ckFPd0F4RVVBSCtLRU0wMVNZM2dNNndCc0VBUUIwZ0orbWFab0MzZ0k2aVBZYUFJQkpzaVJtSFUwQUFMT2VGQzNhSzJjV0FBQ1VYZTcrQXdPMGxjOWVUSFlUQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSBzcGFuLmZvbGRlciB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBSy9JTndXSzZRQUFBQmwwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnU1cxaFoyVlNaV0ZrZVhISlpUd0FBQUdyU1VSQlZEakx4Wk83aWhSQkZJYS82dTBaVzdHSEJVVjBVUVFUWnpkM1FkaE1ReE9md01SWEVBTkJNTlFYME16QXpGQXdFekh3QVJiTkZEZHdFZDMxTWozWDdhNnVPcjlCdHpOallqS0JKNm5pY1A3djNLcWNKRmF4aEJWdFpVQUs4T0hsbGQyc3Q3WGwzREpQVk9OUCt6RVVWNEhxTDVVRFlIcjV4dnVRQWpnbC9RczdUenZPT1ZBanhqbEMrZVBTd2U2RGZiVmVnTFZ1VDRyMTRlVHI2enZBOHhTQW9CTHp4NnB2ajRsK0RaSWV6dVZrRzlmWTJIN1lSUUlNWklCd3ljbXpIMS9zM0Y4QWFwZklQTkYza1FrNytrdzlQV0J5K0laT2RnNVVnM21rQUFUeS90MHVzb3Z6R2VDVVdUakN6MEIrU2owZWtmZHZrWjNhYkJ2K1U0R2FDdEoxaUVtNkFOUUo2ZkV6ckcvZW5nY0t3L3dYUXZFS3hTRUtReFJHS0U3SXp0K0RTaXdCSk1VU203MXJndU1ZaFFLckJ5Z09JUlN0ZjRUaUZGUkJ2YlJHS2lRTFdQMjl5UlNIS0JUdGZkQm1IczBCVXBndnRnRjR5UkZSK05VS2kwWFpjWWpDZUNHMnNta3pMQUhrYlJCbVAwL1VrMjZPNVluVUFjdEJwMUdzQUkrUzVuUkpKSmFsNUsxYUFNcnEwZDZUbTl1STZ6anlmNzVkQWU2dHgvU3NXZUQvL28yL0FiNklIMy9oMjVwT0FBQUFBRWxGVGtTdVFtQ0MpOworfQorCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBSGxKUkVGVWVOcmNVMXNOZ0RBUTZ3Z21jQU0yTUlDR0dsZzFnSm5OeldRY3Z3UUd5MWo0b1VsLzd0SDBtcHd6TTdTZ1F5TytFWkFVV2gyTWtrelNXaEp3dVJBbEhZc0p3RXd5dnMxZ0FCRHV6cW9KY1R3NXF4YUlKTjBiZ1FSZ0lqbmxtbjFoZVNPNVBFNlkyWVhlKzVDcjUraCsrZ3MxMkFjQVM2RlMrN1lPc2o0QUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFIRkpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZndmhmYTI5djNNekF3T09EUmM2Q3lzdElSYnhpMHQ3ZmpESmpLeWtwR1lyd3dpMWh4bkxIUTN0NytqSUdCUVJKSjZIbGxaYVVVS1lFWVJZQlBPQjBnQlNoS3dLR0EvLy8vNDhWdGJXMy84Y2xUbkJJSDNnQ0trekpnQUd2QlgwZERtMHNDQUFBQUFFbEZUa1N1UW1DQyk7Cit9CisKKworCit0YWJsZS50cmVldGFibGUgdHIuY29sbGFwc2VkLnNlbGVjdGVkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFBRDUvd0FBZ09rQUFIVXdBQURxWUFBQU9wZ0FBQmR2a2wvRlJnQUFBRnBKUkVGVWVOcGkvUC8vUHdNbGdISEFEV0Q0Ly84L050eUFReHdENDVLQUFRZEtEZmovLy8vLy9mZ01Jc1lBWklNdzFES1JFRndPREF3TS80a05SS3E2NEFBREE0TWpGRE9RNmdLeVk0SG9kTUE0OVBNQ3hRWUFCZ0FWWUhzanlaMXg3UUFBQUFCSlJVNUVya0pnZ2c9PSk7Cit9CisKK3RhYmxlLnRyZWV0YWJsZSB0ci5leHBhbmRlZC5zZWxlY3RlZCBzcGFuLmluZGVudGVyIGEgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZ0SlJFRlVlTnBpL1AvL1B3TWxnSW1CUXNBNDRDNmdpUUVOREF3TS8vSGdCbUxDQUYvQU1CTGpCVWVpeGYvLy80OEw3LytQQ3ZaalU0ZlBBQWMwQXh5d3FjTVhDd2VnR0oxTmNrTDZqeDV3cEtZRHhxR1hFa2tDZ0FFQW1ycUJJZWpkZ25nQUFBQUFTVVZPUks1Q1lJST0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuYWNjZXB0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2EzYmNlNDsKKyAgY29sb3I6ICNmZmYKK30KKwordGFibGUudHJlZXRhYmxlIHRyLmNvbGxhcHNlZC5hY2NlcHQgdGQgc3Bhbi5pbmRlbnRlciBhIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UveC1wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUZwSlJFRlVlTnBpL1AvL1B3TWxnSEhBRFdENC8vOC9OdHlBUXh3RDQ1S0FBUWRLRGZqLy8vLy8vZmdNSXNZQVpJTXcxREtSRUZ3T0RBd00vNGtOUktxNjRBQURBNE1qRkRPUTZnS3lZNEhvZE1BNDlQTUN4UVlBQmdBVllIc2p5WjF4N1FBQUFBQkpSVTVFcmtKZ2dnPT0pOworfQorCit0YWJsZS50cmVldGFibGUgdHIuZXhwYW5kZWQuYWNjZXB0IHRkIHNwYW4uaW5kZW50ZXIgYSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3gtcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFLVDJsRFExQlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVoVUlJRkpDaTRBVWtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9LMkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFhQdWVzODUyenp3ZkFDQXlXU0ROUk5ZQU1xVUllRWVDRHg4VEc0ZVF1UUlFS0pIQUFFQWl6WkNGei9TTUJBUGgrUER3cklzQUh2Z0FCZU5NTENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtBRUFHRExZMkxqQUZBdEFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdBS3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzNBTURPRUF1eUFBZ01BREJSaUlVcEFBUjdBR0RJSXlONEFJU1pBQlJHOGxjODhTdXVFT2NxQUFCNG1iSTh1U1E1UllGYkNDMXhCMWRYTGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYyRGw4dDZyOEcveUppWXVQKzVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hndWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGs1TmhLeEVKYlljcFhmZjVud2wvQVYvMXMrWDQ4L1BmMTRMN2lKSUV5WFlGSEJQamd3c3owVEtVY3o1SUpoR0xjNW85SC9MY0wvL3dkMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytBWHVSTGFoZFl3UDJTeWNRV0hUQTR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFDQVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekFCaHpCQmR6QkMveGdOb1JDSk1UQ1FoQkNDbVNBSEhKZ0theUNRaWlHemJBZEttQXYxRUFkTk1CUmFJYVRjQTR1d2xXNERqMXdEL3BoQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNWgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZEdWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCtROGN3d09nWUJ6UEViREF1eHNOQ3NUZ3NDWk5qeTdFaXJBeXJ4aHF3VnF3RHU0bjFZOCt4ZHdRU2dVWEFDVFlFZDBJZ1lSNUJTRmhNV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUUFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2prOG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW9Vc3BxU2hubEVPVTA1UVpsbURKQlZhT2FVdDJvb1ZRUk5ZOWFRcTJodGxLdlVZZW9FelIxbWpuTmd4WkpTNld0b3BYVEdtZ1hhUGRwcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWJVMmVwTzZpSHFtZW9iMVEvcEg1Wi9Za0dXY05NdzA5RHBGR2dzVi9qdk1ZZ0MyTVpzM2dzSVdzTnE0WjFnVFhFSnJITjJYeDJLcnVZL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpclNLdFJxMGZydlRhdTdhZWRwcjFGdTFuN2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXVwKzZZbnI1ZWdKNU1iNmZlZWIzbitoeDlMLzFVL1czNnAvVkhERmdHc3d3a0J0c016aGc4eFRWeGJ6d2RMOGZiOFZGRFhjTkFRNlZobFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMW16MHgxekxubStlYjE1dmZ0MkJhZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE9rMDZybnRabnc3RHh0c20ycWJjWnNPWFlCdHV1dG0yMmZXRm5ZaGRudDhXdXcrNlR2Wk45dW4yTi9UMEhEWWZaRHFzZFdoMStjN1J5RkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSXZlUktkUFZ4WGVGNjB2V2RtN09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEwK0JaN1huSXk5akw1RlhyZGV3dDZWM3F2ZGg3eGMrOWo1eW4rTSs0enczM2pMZVdWL01OOEMzeUxmTFQ4TnZubCtGMzBOL0kvOWsvM3IvMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cERvVlFmdWpXMEFkaDVtR0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNvK3FpNXFQTm8zdWpTNlA4WXVabG5NMVZpZFdFbHNTeHc1TGlxdU5tNXN2dC84N2ZPSDRwM2lDK043RjVndnlGMXdlYUhPd3ZTRnB4YXBMaElzT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNWhDZXBrTHhNRFV6ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThlbFFmSmE3T1FyQVZaTFFxMlFxYm9WRm9vMXlvSHNtZGxWMmEvelluS09aYXJuaXZON2N5enl0dVFONXp2bi8vdEVzSVM0WksycFlaTFZ5MGRXT2E5ckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZFQxZ3ZXZCsxWWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVMWjViRHBhcWwrYVhEbTROMmRxMERkOVd0TzMxOWtYYkw1Zk5LTnU3ZzdaRHVhTy9QTGk4WmFmSnpzMDdQMVNrVlBSVStsUTI3dExkdFdIWCtHN1I3aHQ3dlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzU1BWUlNqOVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4OTJIV2NkTDJwQ212S2FScHRUbXZ0YllsdTZUOHcrMGRicTNucjhSOXNmRDV3MFBGbDVTdk5VeVduYTZZTFRrMmZ5ejR5ZGxaMTlmaTc1M0dEYm9yWjc1MlBPMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMWUyYjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3EyOFQ3eGY5RUR0UWRsRDNZZlZQMXYrM05qdjNIOXF3SGVnODlIY1IvY0doWVBQL3BIMWp3OURCWStaajh1R0RZYnJuamcrT1RuaVAzTDk2ZnluUTg5a3p5YWVGLzZpL3N1dUZ4WXZmdmpWNjlmTzBaalJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOElIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNEQUFENS93QUFnT2tBQUhVd0FBRHFZQUFBT3BnQUFCZHZrbC9GUmdBQUFGdEpSRUZVZU5waS9QLy9Qd01sZ0ltQlFzQTQ0QzZnaVFFTkRBd00vL0hnQm1MQ0FGL0FNQkxqQlVlaXhmLy8vNDhMNy8rUEN2WmpVNGZQQUFjMEF4eXdxY01YQ3dlZ0dKMU5ja0w2ang1d3BLWUR4cUdYRWtrQ2dBRUFtcnFCSWVqZGduZ0FBQUFBU1VWT1JLNUNZSUk9KTsKK30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy8uanNoaW50cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyZjNlZgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvLmpzaGludHJjCkBAIC0wLDAgKzEsMTEgQEAKK3sKKyAgImN1cmx5IiA6IGZhbHNlLAorICAicHJlZGVmIiA6IFsgIiQiLCJsaWJ0b2FzdGVyIiwgInByZXR0eVByaW50IiBdLAorICAiZXFudWxsIjogdHJ1ZSwKKyAgInBsdXNwbHVzIiA6IGZhbHNlLAorICAiYnJvd3NlciIgOiB0cnVlLAorICAianF1ZXJ5IiA6IHRydWUsCisgICJkZXZlbCIgOiB0cnVlLAorICAidW51c2VkIiA6IHRydWUsCisgICJtYXhlcnIiIDogNjAKK30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYmFzZS5qcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGRmNDYzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9iYXNlLmpzCkBAIC0wLDAgKzEsMjMxIEBACisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIGJhc2VQYWdlSW5pdChjdHgpIHsKKworICB2YXIgbmV3QnVpbGRCdXR0b24gPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiIpOworICB2YXIgbmV3QnVpbGRUYXJnZXRJbnB1dDsKKyAgdmFyIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG47CisgIHZhciBwcm9qZWN0TmFtZUZvcm0gPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIik7CisgIHZhciBwcm9qZWN0TmFtZSA9ICQoIiNwcm9qZWN0LW5hbWUiKTsKKyAgdmFyIHByb2plY3ROYW1lRm9ybVRvZ2dsZSA9ICQoIiNwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIpOworICB2YXIgcHJvamVjdE5hbWVDaGFuZ2VDYW5jZWwgPSAkKCIjcHJvamVjdC1uYW1lLWNoYW5nZS1jYW5jZWwiKTsKKworICAvKiBpbml0aWFsbHkgdGhlIGN1cnJlbnQgcHJvamVjdCBpcyB1c2VkIHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSBuZXcgYnVpbGQKKyAgICogYnV0dG9uIGluIHRvcCByaWdodCBuYXYKKyAgICovCisgIHZhciBzZWxlY3RlZFByb2plY3QgPSBsaWJ0b2FzdGVyLmN0eDsKKworICB2YXIgc2VsZWN0ZWRUYXJnZXQ7CisKKyAgdmFyIG5ld0J1aWxkUHJvamVjdElucHV0ID0gJCgiI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QtbmFtZS1pbnB1dCIpOworICB2YXIgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0biA9ICQoIiNuZXctYnVpbGQtYnV0dG9uICNzYXZlLXByb2plY3QtYnV0dG9uIik7CisKKyAgLyogUHJvamVjdCBuYW1lIGNoYW5nZSBmdW5jdGlvbmFsaXR5ICovCisgIHByb2plY3ROYW1lRm9ybVRvZ2dsZS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAkKHRoaXMpLmFkZChwcm9qZWN0TmFtZSkuaGlkZSgpOworICAgIHByb2plY3ROYW1lRm9ybS5mYWRlSW4oKTsKKyAgfSk7CisKKyAgcHJvamVjdE5hbWVDaGFuZ2VDYW5jZWwuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgcHJvamVjdE5hbWVGb3JtLmhpZGUoKTsKKyAgICBwcm9qZWN0TmFtZS5hZGQocHJvamVjdE5hbWVGb3JtVG9nZ2xlKS5mYWRlSW4oKTsKKyAgfSk7CisKKyAgJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgdmFyIG5ld1Byb2plY3ROYW1lID0gJCgiI3Byb2plY3QtbmFtZS1jaGFuZ2UtaW5wdXQiKS52YWwoKTsKKworICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgcHJvamVjdE5hbWU6IG5ld1Byb2plY3ROYW1lIH0sZnVuY3Rpb24gKCl7CisKKyAgICAgIHByb2plY3ROYW1lLnRleHQobmV3UHJvamVjdE5hbWUpOworICAgICAgbGlidG9hc3Rlci5jdHgucHJvamVjdE5hbWUgPSBuZXdQcm9qZWN0TmFtZTsKKyAgICAgIHByb2plY3ROYW1lQ2hhbmdlQ2FuY2VsLmNsaWNrKCk7CisgICAgfSk7CisgIH0pOworCisgIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKTsKKworICAkKCIjcHJvamVjdC10b3BiYXIgLm5hdiBsaSBhIikuZWFjaChmdW5jdGlvbigpeworICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09ICQodGhpcykuYXR0cignaHJlZicpKQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnYWN0aXZlJyk7CisgICAgZWxzZQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CisgIH0pOworCisgIGlmICgkKCIudG90YWwtYnVpbGRzIikubGVuZ3RoICE9PSAwKXsKKyAgICBsaWJ0b2FzdGVyLmdldFByb2plY3RJbmZvKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsLCBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICAgIGlmIChwcmpJbmZvLmJ1aWxkcykKKyAgICAgICAgJCgiLnRvdGFsLWJ1aWxkcyIpLnRleHQocHJqSW5mby5idWlsZHMubGVuZ3RoKTsKKyAgICB9KTsKKyAgfQorCisgIC8qIEhpZGUgdGhlIGJ1dHRvbiBpZiB3ZSdyZSBvbiB0aGUgcHJvamVjdCxuZXdwcm9qZWN0IG9yIGltcG9ydGx5YWVyIHBhZ2UKKyAgICogb3IgaWYgdGhlcmUgYXJlIG5vIHByb2plY3RzIHlldCBkZWZpbmVkCisgICAqIG9ubHkgc2hvdyBpZiB0aGVyZSBpc24ndCBhbHJlYWR5IGEgYnVpbGQtdGFyZ2V0LWlucHV0IGFscmVhZHkKKyAgICovCisgIGlmIChjdHgubnVtUHJvamVjdHMgPiAwICYmCisgICAgICBjdHguY3VycmVudFVybC5zZWFyY2goJ25ld3Byb2plY3QnKSA8IDAgJiYKKyAgICAgICQoIi5idWlsZC10YXJnZXQtaW5wdXQiKS5sZW5ndGggPT09IDEpIHsKKworICAgIG5ld0J1aWxkVGFyZ2V0SW5wdXQgPSAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYnVpbGQtdGFyZ2V0LWlucHV0Iik7CisgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0biA9ICQoIiNuZXctYnVpbGQtYnV0dG9uIikuZmluZCgiLmJ1aWxkLWJ1dHRvbiIpOworCisgICAgX3NldHVwTmV3QnVpbGRCdXR0b24oKTsKKyAgICBuZXdCdWlsZEJ1dHRvbi5zaG93KCk7CisgIH0gZWxzZSBpZiAoJCgiLmJ1aWxkLXRhcmdldC1pbnB1dCIpLmxlbmd0aCA+IDApIHsKKyAgICBuZXdCdWlsZFRhcmdldElucHV0ID0gJCgiI3Byb2plY3QtdG9wYmFyIC5idWlsZC10YXJnZXQtaW5wdXQiKTsKKyAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuID0gJCgiI3Byb2plY3QtdG9wYmFyIC5idWlsZC1idXR0b24iKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBIaWRlIHRoZSBjaGFuZ2UgcHJvamVjdCBpY29uIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcHJvamVjdCAqLworICBpZiAoY3R4Lm51bVByb2plY3RzID09PSAxKSB7CisgICAgJCgnI3Byb2plY3QgLmljb24tcGVuY2lsJykuaGlkZSgpOworICB9CisKKyAgLyogSWYgd2UgaGF2ZSBhIHByb2plY3Qgc2V0dXAgdGhlIHR5cGVhaGVhZCAqLworICBpZiAoc2VsZWN0ZWRQcm9qZWN0LnJlY2lwZXNUeXBlQWhlYWRVcmwpeworICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFRhcmdldElucHV0LCBzZWxlY3RlZFByb2plY3QucmVjaXBlc1R5cGVBaGVhZFVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgc2VsZWN0ZWRUYXJnZXQgPSBpdGVtOworICAgICAgbmV3QnVpbGRUYXJnZXRCdWlsZEJ0bi5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgIH0pOworICB9CisKKyAgbmV3QnVpbGRUYXJnZXRJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09PSAwKSB7CisgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICB9CisgIH0pOworCisgIG5ld0J1aWxkVGFyZ2V0QnVpbGRCdG4uY2xpY2soZnVuY3Rpb24gKGUpIHsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICBpZiAoIW5ld0J1aWxkVGFyZ2V0SW5wdXQudmFsKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBXZSB1c2UgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dCBmaWVsZCBzbyBhcyB0byBtYWludGFpbiBhbnkgY29tbWFuZCBhbHNvCisgICAgICogYWRkZWQgZS5nLiBjb3JlLWltYWdlLW1pbmltYWw6Y2xlYW4KKyAgICAgKi8KKyAgICBzZWxlY3RlZFRhcmdldCA9IHsgbmFtZTogbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoKSB9OworCisgICAgLyogRmlyZSBvZmYgdGhlIGJ1aWxkICovCisgICAgbGlidG9hc3Rlci5zdGFydEFCdWlsZChzZWxlY3RlZFByb2plY3QucHJvamVjdEJ1aWxkc1VybCwKKyAgICAgIHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQsIHNlbGVjdGVkVGFyZ2V0Lm5hbWUsIGZ1bmN0aW9uKCl7CisgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShzZWxlY3RlZFByb2plY3QucHJvamVjdEJ1aWxkc1VybCk7CisgICAgfSwgbnVsbCk7CisgIH0pOworCisgIGZ1bmN0aW9uIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKSB7CisgICAgaWYgKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8oc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsLAorICAgICAgZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEubWFjaGluZSA9PT0gbnVsbCB8fCBkYXRhLm1hY2hpbmUubmFtZSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEubGF5ZXJzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgIC8qIHdlIGNhbid0IGJ1aWxkIGFueXRoaW5nIHdpdGggb3V0IGEgbWFjaGluZSBhbmQgc29tZSBsYXllcnMgKi8KKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjdGFyZ2V0cy1mb3JtIikuaGlkZSgpOworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uIC5hbGVydCIpLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjdGFyZ2V0cy1mb3JtIikuc2hvdygpOworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uIC5hbGVydCIpLmhpZGUoKTsKKworICAgICAgICAgIC8qIHdlIGNhbiBidWlsZCB0aGlzIHByb2plY3Q7IGVuYWJsZSBpbnB1dCBmaWVsZHMgKi8KKyAgICAgICAgICBuZXdCdWlsZFRhcmdldElucHV0LnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgfQorICAgICAgfSwgbnVsbCk7CisgIH0KKworICAvKiBTZXR1cCBOZXcgYnVpbGQgYnV0dG9uIGluIHRoZSB0b3AgbmF2IGJhciAqLworICBmdW5jdGlvbiBfc2V0dXBOZXdCdWlsZEJ1dHRvbigpIHsKKworICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50IHByb2plY3QgdGhlbiBwcmVzZW50IHRoZSBzZXQgcHJvamVjdAorICAgICAqIGZvcm0uCisgICAgICovCisgICAgaWYgKHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0SWQgPT09IHVuZGVmaW5lZCkgeworICAgICAgJCgnI2NoYW5nZS1wcm9qZWN0LWZvcm0nKS5zaG93KCk7CisgICAgICAkKCcjcHJvamVjdCAuaWNvbi1wZW5jaWwnKS5oaWRlKCk7CisgICAgfQorCisgICAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKG5ld0J1aWxkUHJvamVjdElucHV0LCBzZWxlY3RlZFByb2plY3QucHJvamVjdHNUeXBlQWhlYWRVcmwsIHsgZm9ybWF0IDogImpzb24iIH0sIGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAvKiBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQgYSBwcm9qZWN0ICovCisgICAgICBuZXdCdWlsZFByb2plY3RTYXZlQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBzZWxlY3RlZFByb2plY3QgPSBpdGVtOworICAgIH0pOworCisgICAgLyogQW55IHR5cGluZyBpbiB0aGUgaW5wdXQgYXBhcnQgZnJvbSBlbnRlciBrZXkgaXMgZ29pbmcgdG8gaW52YWxpZGF0ZQorICAgICAqIHRoZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIHNldCBieSBzZWxlY3RpbmcgYSBzdWdnZXN0aW9uIGZyb20gdGhlIHR5cGVhaGVhZAorICAgICAqLworICAgIG5ld0J1aWxkUHJvamVjdElucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uIChldmVudCkgeworICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIG5ld0J1aWxkUHJvamVjdFNhdmVCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICB9KTsKKworCisgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICBzZWxlY3RlZFByb2plY3QucHJvamVjdElkID0gc2VsZWN0ZWRQcm9qZWN0LmlkOworICAgICAgLyogVXBkYXRlIHRoZSB0eXBlYWhlYWQgcHJvamVjdF9pZCBwYXJhbWF0ZXIgKi8KKyAgICAgIF9jaGVja1Byb2plY3RCdWlsZGFibGUoKTsKKworICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworCisgICAgICAvKiBXZSd2ZSBnb3QgYSBuZXcgcHJvamVjdCBzbyBub3cgd2UgbmVlZCB0byB1cGRhdGUgdGhlCisgICAgICAgKiB0YXJnZXQgdXJscy4gV2UgY2FuIGdldCB0aGlzIGZyb20gdGhlIG5ldyBwcm9qZWN0J3MgaW5mbworICAgICAgICovCisgICAgICAkLmdldEpTT04oc2VsZWN0ZWRQcm9qZWN0LnByb2plY3RQYWdlVXJsLCB7IGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIGZ1bmN0aW9uKHByb2plY3RJbmZvKXsKKyAgICAgICAgICAvKiBVcGRhdGUgdGhlIHR5cGVhaGVhZCB0byB1c2UgdGhlIG5ldyBzZWxlY3RlZFByb2plY3QgKi8KKyAgICAgICAgICBzZWxlY3RlZFByb2plY3QgPSBwcm9qZWN0SW5mbzsKKworICAgICAgICAgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChuZXdCdWlsZFRhcmdldElucHV0LCBzZWxlY3RlZFByb2plY3QucmVjaXBlc1R5cGVBaGVhZFVybCwgeyBmb3JtYXQ6ICJqc29uIiB9LCBmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgICAgICAvKiBzdWNjZXNzZnVsbHkgc2VsZWN0ZWQgYSB0YXJnZXQgKi8KKyAgICAgICAgICAgICAgc2VsZWN0ZWRUYXJnZXQgPSBpdGVtOworICAgICAgICAgICAgICBuZXdCdWlsZFRhcmdldEJ1aWxkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgfSk7CisKKyAgICAgIH0pOworICAgICAgbmV3QnVpbGRUYXJnZXRJbnB1dC52YWwoIiIpOworCisgICAgICAvKiBzZXQgdXAgbmV3IGZvcm0gYXNwZWN0ICovCisgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCBhIikudGV4dChzZWxlY3RlZFByb2plY3QubmFtZSkuYXR0cignaHJlZicsIHNlbGVjdGVkUHJvamVjdC5wcm9qZWN0UGFnZVVybCk7CisgICAgICAkKCIjbmV3LWJ1aWxkLWJ1dHRvbiAuYWxlcnQgYSIpLmF0dHIoJ2hyZWYnLCBzZWxlY3RlZFByb2plY3QucHJvamVjdFBhZ2VVcmwpOworICAgICAgJCgiI3Byb2plY3QgLmljb24tcGVuY2lsIikuc2hvdygpOworCisgICAgICAkKCIjY2hhbmdlLXByb2plY3QtZm9ybSIpLnNsaWRlVXAoeyAnY29tcGxldGUnIDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0Iikuc2hvdygpOworICAgICAgfX0pOworICAgIH0pOworCisgICAgJCgnI25ldy1idWlsZC1idXR0b24gI3Byb2plY3QgLmljb24tcGVuY2lsJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgbmV3QnVpbGRQcm9qZWN0SW5wdXQudmFsKCQoIiNuZXctYnVpbGQtYnV0dG9uICNwcm9qZWN0IGEiKS50ZXh0KCkpOworICAgICAgJCgiI2NhbmNlbC1jaGFuZ2UtcHJvamVjdCIpLnNob3coKTsKKyAgICAgICQodGhpcykucGFyZW50KCkuaGlkZSgpOworICAgICAgJCgiI2NoYW5nZS1wcm9qZWN0LWZvcm0iKS5zbGlkZURvd24oKTsKKyAgICB9KTsKKworICAgICQoIiNuZXctYnVpbGQtYnV0dG9uICNjYW5jZWwtY2hhbmdlLXByb2plY3QiKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAkKCIjY2hhbmdlLXByb2plY3QtZm9ybSIpLmhpZGUoZnVuY3Rpb24gKCkgeworICAgICAgICAkKCcjbmV3LWJ1aWxkLWJ1dHRvbiAjcHJvamVjdCcpLnNob3coKTsKKyAgICAgIH0pOworCisgICAgICBuZXdCdWlsZFByb2plY3RJbnB1dC52YWwoIiIpOworICAgICAgbmV3QnVpbGRQcm9qZWN0U2F2ZUJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgIH0pOworCisgICAgLyogS2VlcCB0aGUgZHJvcGRvd24gb3BlbiBldmVuIHVubGVzcyB3ZSBjbGljayBvdXRzaWRlIHRoZSBkcm9wZG93biBhcmVhICovCisgICAgJCgiLm5ldy1idWlsZCIpLmNsaWNrIChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworICB9OworCit9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jvb3RzdHJhcC5taW4uanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2Jvb3RzdHJhcC5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4MjU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvYm9vdHN0cmFwLm1pbi5qcwpAQCAtMCwwICsxLDYgQEAKKy8qIQorKiBCb290c3RyYXAuanMgYnkgQGZhdCAmIEBtZG8KKyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLgorKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0CisqLworIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtlKGZ1bmN0aW9uKCl7ZS5zdXBwb3J0LnRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLHQ9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LG47Zm9yKG4gaW4gdClpZihlLnN0eWxlW25dIT09dW5kZWZpbmVkKXJldHVybiB0W25dfSgpO3JldHVybiBlJiZ7ZW5kOmV9fSgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLG49ZnVuY3Rpb24obil7ZShuKS5vbigiY2xpY2siLHQsdGhpcy5jbG9zZSl9O24ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHMoKXtpLnRyaWdnZXIoImNsb3NlZCIpLnJlbW92ZSgpfXZhciBuPWUodGhpcykscj1uLmF0dHIoImRhdGEtdGFyZ2V0IiksaTtyfHwocj1uLmF0dHIoImhyZWYiKSxyPXImJnIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSksaT1lKHIpLHQmJnQucHJldmVudERlZmF1bHQoKSxpLmxlbmd0aHx8KGk9bi5oYXNDbGFzcygiYWxlcnQiKT9uOm4ucGFyZW50KCkpLGkudHJpZ2dlcih0PWUuRXZlbnQoImNsb3NlIikpO2lmKHQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2kucmVtb3ZlQ2xhc3MoImluIiksZS5zdXBwb3J0LnRyYW5zaXRpb24mJmkuaGFzQ2xhc3MoImZhZGUiKT9pLm9uKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxzKTpzKCl9O3ZhciByPWUuZm4uYWxlcnQ7ZS5mbi5hbGVydD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiYWxlcnQiKTtpfHxyLmRhdGEoImFsZXJ0IixpPW5ldyBuKHRoaXMpKSx0eXBlb2YgdD09InN0cmluZyImJmlbdF0uY2FsbChyKX0pfSxlLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPW4sZS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYWxlcnQ9cix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suYWxlcnQuZGF0YS1hcGkiLHQsbi5wcm90b3R5cGUuY2xvc2UpfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLmJ1dHRvbi5kZWZhdWx0cyxuKX07dC5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ImRpc2FibGVkIixuPXRoaXMuJGVsZW1lbnQscj1uLmRhdGEoKSxpPW4uaXMoImlucHV0Iik/InZhbCI6Imh0bWwiO2UrPSJUZXh0IixyLnJlc2V0VGV4dHx8bi5kYXRhKCJyZXNldFRleHQiLG5baV0oKSksbltpXShyW2VdfHx0aGlzLm9wdGlvbnNbZV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPT0ibG9hZGluZ1RleHQiP24uYWRkQ2xhc3ModCkuYXR0cih0LHQpOm4ucmVtb3ZlQ2xhc3ModCkucmVtb3ZlQXR0cih0KX0sMCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zLXJhZGlvIl0nKTtlJiZlLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBuPWUuZm4uYnV0dG9uO2UuZm4uYnV0dG9uPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJidXR0b24iKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoImJ1dHRvbiIsaT1uZXcgdCh0aGlzLHMpKSxuPT0idG9nZ2xlIj9pLnRvZ2dsZSgpOm4mJmkuc2V0U3RhdGUobil9KX0sZS5mbi5idXR0b24uZGVmYXVsdHM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sZS5mbi5idXR0b24uQ29uc3RydWN0b3I9dCxlLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uYnV0dG9uPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLmJ1dHRvbi5kYXRhLWFwaSIsIltkYXRhLXRvZ2dsZV49YnV0dG9uXSIsZnVuY3Rpb24odCl7dmFyIG49ZSh0LnRhcmdldCk7bi5oYXNDbGFzcygiYnRuIil8fChuPW4uY2xvc2VzdCgiLmJ0biIpKSxuLmJ1dHRvbigidG9nZ2xlIil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1mdW5jdGlvbih0LG4pe3RoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9bix0aGlzLm9wdGlvbnMucGF1c2U9PSJob3ZlciImJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIiLGUucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUiLGUucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O3QucHJvdG90eXBlPXtjeWNsZTpmdW5jdGlvbih0KXtyZXR1cm4gdHx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChlLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxnZXRBY3RpdmVJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSx0aGlzLiRpdGVtcz10aGlzLiRhY3RpdmUucGFyZW50KCkuY2hpbGRyZW4oKSx0aGlzLiRpdGVtcy5pbmRleCh0aGlzLiRhY3RpdmUpfSx0bzpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmdldEFjdGl2ZUluZGV4KCkscj10aGlzO2lmKHQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fHQ8MClyZXR1cm47cmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZCIsZnVuY3Rpb24oKXtyLnRvKHQpfSk6bj09dD90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKHQ+bj8ibmV4dCI6InByZXYiLGUodGhpcy4kaXRlbXNbdF0pKX0scGF1c2U6ZnVuY3Rpb24odCl7cmV0dXJuIHR8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXJldHVybjtyZXR1cm4gdGhpcy5zbGlkZSgibmV4dCIpfSxwcmV2OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXJldHVybjtyZXR1cm4gdGhpcy5zbGlkZSgicHJldiIpfSxzbGlkZTpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksaT1ufHxyW3RdKCkscz10aGlzLmludGVydmFsLG89dD09Im5leHQiPyJsZWZ0IjoicmlnaHQiLHU9dD09Im5leHQiPyJmaXJzdCI6Imxhc3QiLGE9dGhpcyxmO3RoaXMuc2xpZGluZz0hMCxzJiZ0aGlzLnBhdXNlKCksaT1pLmxlbmd0aD9pOnRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0iKVt1XSgpLGY9ZS5FdmVudCgic2xpZGUiLHtyZWxhdGVkVGFyZ2V0OmlbMF0sZGlyZWN0aW9uOm99KTtpZihpLmhhc0NsYXNzKCJhY3RpdmUiKSlyZXR1cm47dGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgmJih0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7dmFyIHQ9ZShhLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbYS5nZXRBY3RpdmVJbmRleCgpXSk7dCYmdC5hZGRDbGFzcygiYWN0aXZlIil9KSk7aWYoZS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIikpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihmKTtpZihmLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtpLmFkZENsYXNzKHQpLGlbMF0ub2Zmc2V0V2lkdGgsci5hZGRDbGFzcyhvKSxpLmFkZENsYXNzKG8pLHRoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2kucmVtb3ZlQ2xhc3MoW3Qsb10uam9pbigiICIpKS5hZGRDbGFzcygiYWN0aXZlIiksci5yZW1vdmVDbGFzcyhbImFjdGl2ZSIsb10uam9pbigiICIpKSxhLnNsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe2EuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfSwwKX0pfWVsc2V7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGYpO2lmKGYuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3IucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX1yZXR1cm4gcyYmdGhpcy5jeWNsZSgpLHRoaXN9fTt2YXIgbj1lLmZuLmNhcm91c2VsO2UuZm4uY2Fyb3VzZWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoImNhcm91c2VsIikscz1lLmV4dGVuZCh7fSxlLmZuLmNhcm91c2VsLmRlZmF1bHRzLHR5cGVvZiBuPT0ib2JqZWN0IiYmbiksbz10eXBlb2Ygbj09InN0cmluZyI/bjpzLnNsaWRlO2l8fHIuZGF0YSgiY2Fyb3VzZWwiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJudW1iZXIiP2kudG8obik6bz9pW29dKCk6cy5pbnRlcnZhbCYmaS5wYXVzZSgpLmN5Y2xlKCl9KX0sZS5mbi5jYXJvdXNlbC5kZWZhdWx0cz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciJ9LGUuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9dCxlLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5jYXJvdXNlbD1uLHRoaXN9LGUoZG9jdW1lbnQpLm9uKCJjbGljay5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dIixmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHIsaT1lKG4uYXR0cigiZGF0YS10YXJnZXQiKXx8KHI9bi5hdHRyKCJocmVmIikpJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLHM9ZS5leHRlbmQoe30saS5kYXRhKCksbi5kYXRhKCkpLG87aS5jYXJvdXNlbChzKSwobz1uLmF0dHIoImRhdGEtc2xpZGUtdG8iKSkmJmkuZGF0YSgiY2Fyb3VzZWwiKS5wYXVzZSgpLnRvKG8pLmN5Y2xlKCksdC5wcmV2ZW50RGVmYXVsdCgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCxuKXt0aGlzLiRlbGVtZW50PWUodCksdGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uY29sbGFwc2UuZGVmYXVsdHMsbiksdGhpcy5vcHRpb25zLnBhcmVudCYmKHRoaXMuJHBhcmVudD1lKHRoaXMub3B0aW9ucy5wYXJlbnQpKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxkaW1lbnNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJ3aWR0aCIpO3JldHVybiBlPyJ3aWR0aCI6ImhlaWdodCJ9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdCxuLHIsaTtpZih0aGlzLnRyYW5zaXRpb25pbmd8fHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpcmV0dXJuO3Q9dGhpcy5kaW1lbnNpb24oKSxuPWUuY2FtZWxDYXNlKFsic2Nyb2xsIix0XS5qb2luKCItIikpLHI9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuZmluZCgiPiAuYWNjb3JkaW9uLWdyb3VwID4gLmluIik7aWYociYmci5sZW5ndGgpe2k9ci5kYXRhKCJjb2xsYXBzZSIpO2lmKGkmJmkudHJhbnNpdGlvbmluZylyZXR1cm47ci5jb2xsYXBzZSgiaGlkZSIpLGl8fHIuZGF0YSgiY29sbGFwc2UiLG51bGwpfXRoaXMuJGVsZW1lbnRbdF0oMCksdGhpcy50cmFuc2l0aW9uKCJhZGRDbGFzcyIsZS5FdmVudCgic2hvdyIpLCJzaG93biIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50W3RdKHRoaXMuJGVsZW1lbnRbMF1bbl0pfSxoaWRlOmZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy50cmFuc2l0aW9uaW5nfHwhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKSlyZXR1cm47dD10aGlzLmRpbWVuc2lvbigpLHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFt0XSgpKSx0aGlzLnRyYW5zaXRpb24oInJlbW92ZUNsYXNzIixlLkV2ZW50KCJoaWRlIiksImhpZGRlbiIpLHRoaXMuJGVsZW1lbnRbdF0oMCl9LHJlc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGltZW5zaW9uKCk7cmV0dXJuIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIilbdF0oZXx8ImF1dG8iKVswXS5vZmZzZXRXaWR0aCx0aGlzLiRlbGVtZW50W2UhPT1udWxsPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlIiksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcyxzPWZ1bmN0aW9uKCl7bi50eXBlPT0ic2hvdyImJmkucmVzZXQoKSxpLnRyYW5zaXRpb25pbmc9MCxpLiRlbGVtZW50LnRyaWdnZXIocil9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihuKTtpZihuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLnRyYW5zaXRpb25pbmc9MSx0aGlzLiRlbGVtZW50W3RdKCJpbiIpLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJjb2xsYXBzZSIpP3RoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxzKTpzKCl9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfX07dmFyIG49ZS5mbi5jb2xsYXBzZTtlLmZuLmNvbGxhcHNlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJjb2xsYXBzZSIpLHM9ZS5leHRlbmQoe30sZS5mbi5jb2xsYXBzZS5kZWZhdWx0cyxyLmRhdGEoKSx0eXBlb2Ygbj09Im9iamVjdCImJm4pO2l8fHIuZGF0YSgiY29sbGFwc2UiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5jb2xsYXBzZS5kZWZhdWx0cz17dG9nZ2xlOiEwfSxlLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPXQsZS5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uY29sbGFwc2U9bix0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suY29sbGFwc2UuZGF0YS1hcGkiLCJbZGF0YS10b2dnbGU9Y29sbGFwc2VdIixmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHIsaT1uLmF0dHIoImRhdGEtdGFyZ2V0Iil8fHQucHJldmVudERlZmF1bHQoKXx8KHI9bi5hdHRyKCJocmVmIikpJiZyLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikscz1lKGkpLmRhdGEoImNvbGxhcHNlIik/InRvZ2dsZSI6bi5kYXRhKCk7bltlKGkpLmhhc0NsYXNzKCJpbiIpPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlZCIpLGUoaSkuY29sbGFwc2Uocyl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7ZSgiLmRyb3Bkb3duLWJhY2tkcm9wIikucmVtb3ZlKCksZSh0KS5lYWNoKGZ1bmN0aW9uKCl7aShlKHRoaXMpKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9ZnVuY3Rpb24gaSh0KXt2YXIgbj10LmF0dHIoImRhdGEtdGFyZ2V0IikscjtufHwobj10LmF0dHIoImhyZWYiKSxuPW4mJi8jLy50ZXN0KG4pJiZuLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLHI9biYmZShuKTtpZighcnx8IXIubGVuZ3RoKXI9dC5wYXJlbnQoKTtyZXR1cm4gcn12YXIgdD0iW2RhdGEtdG9nZ2xlPWRyb3Bkb3duXSIsbj1mdW5jdGlvbih0KXt2YXIgbj1lKHQpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdGhpcy50b2dnbGUpO2UoImh0bWwiKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLGZ1bmN0aW9uKCl7bi5wYXJlbnQoKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9O24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLHRvZ2dsZTpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHMsbztpZihuLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXJldHVybjtyZXR1cm4gcz1pKG4pLG89cy5oYXNDbGFzcygib3BlbiIpLHIoKSxvfHwoIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmUoJzxkaXYgY2xhc3M9ImRyb3Bkb3duLWJhY2tkcm9wIi8+JykuaW5zZXJ0QmVmb3JlKGUodGhpcykpLm9uKCJjbGljayIscikscy50b2dnbGVDbGFzcygib3BlbiIpKSxuLmZvY3VzKCksITF9LGtleWRvd246ZnVuY3Rpb24obil7dmFyIHIscyxvLHUsYSxmO2lmKCEvKDM4fDQwfDI3KS8udGVzdChuLmtleUNvZGUpKXJldHVybjtyPWUodGhpcyksbi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCk7aWYoci5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm47dT1pKHIpLGE9dS5oYXNDbGFzcygib3BlbiIpO2lmKCFhfHxhJiZuLmtleUNvZGU9PTI3KXJldHVybiBuLndoaWNoPT0yNyYmdS5maW5kKHQpLmZvY3VzKCksci5jbGljaygpO3M9ZSgiW3JvbGU9bWVudV0gbGk6bm90KC5kaXZpZGVyKTp2aXNpYmxlIGEiLHUpO2lmKCFzLmxlbmd0aClyZXR1cm47Zj1zLmluZGV4KHMuZmlsdGVyKCI6Zm9jdXMiKSksbi5rZXlDb2RlPT0zOCYmZj4wJiZmLS0sbi5rZXlDb2RlPT00MCYmZjxzLmxlbmd0aC0xJiZmKyssfmZ8fChmPTApLHMuZXEoZikuZm9jdXMoKX19O3ZhciBzPWUuZm4uZHJvcGRvd247ZS5mbi5kcm9wZG93bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgiZHJvcGRvd24iKTtpfHxyLmRhdGEoImRyb3Bkb3duIixpPW5ldyBuKHRoaXMpKSx0eXBlb2YgdD09InN0cmluZyImJmlbdF0uY2FsbChyKX0pfSxlLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPW4sZS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4uZHJvcGRvd249cyx0aGlzfSxlKGRvY3VtZW50KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLHIpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biBmb3JtIixmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIix0LG4ucHJvdG90eXBlLnRvZ2dsZSkub24oImtleWRvd24uZHJvcGRvd24uZGF0YS1hcGkiLHQrIiwgW3JvbGU9bWVudV0iLG4ucHJvdG90eXBlLmtleWRvd24pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy5vcHRpb25zPW4sdGhpcy4kZWxlbWVudD1lKHQpLmRlbGVnYXRlKCdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJywiY2xpY2suZGlzbWlzcy5tb2RhbCIsZS5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWJvZHkiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCx0b2dnbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmlzU2hvd24/ImhpZGUiOiJzaG93Il0oKX0sc2hvdzpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1lLkV2ZW50KCJzaG93Iik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKG4pO2lmKHRoaXMuaXNTaG93bnx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5pc1Nob3duPSEwLHRoaXMuZXNjYXBlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBuPWUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0LiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7dC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fHQuJGVsZW1lbnQuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdC4kZWxlbWVudC5zaG93KCksbiYmdC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCx0LiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMSksdC5lbmZvcmNlRm9jdXMoKSxuP3QuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe3QuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCJzaG93biIpfSk6dC4kZWxlbWVudC5mb2N1cygpLnRyaWdnZXIoInNob3duIil9KX0saGlkZTpmdW5jdGlvbih0KXt0JiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dGhpczt0PWUuRXZlbnQoImhpZGUiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIodCk7aWYoIXRoaXMuaXNTaG93bnx8dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksZShkb2N1bWVudCkub2ZmKCJmb2N1c2luLm1vZGFsIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiaW4iKS5hdHRyKCJhcmlhLWhpZGRlbiIsITApLGUuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy5oaWRlV2l0aFRyYW5zaXRpb24oKTp0aGlzLmhpZGVNb2RhbCgpfSxlbmZvcmNlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UoZG9jdW1lbnQpLm9uKCJmb2N1c2luLm1vZGFsIixmdW5jdGlvbihlKXt0LiRlbGVtZW50WzBdIT09ZS50YXJnZXQmJiF0LiRlbGVtZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoJiZ0LiRlbGVtZW50LmZvY3VzKCl9KX0sZXNjYXBlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKCJrZXl1cC5kaXNtaXNzLm1vZGFsIixmdW5jdGlvbih0KXt0LndoaWNoPT0yNyYmZS5oaWRlKCl9KTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXl1cC5kaXNtaXNzLm1vZGFsIil9LGhpZGVXaXRoVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0LmhpZGVNb2RhbCgpfSw1MDApO3RoaXMuJGVsZW1lbnQub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKSx0LmhpZGVNb2RhbCgpfSl9LGhpZGVNb2RhbDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe2UucmVtb3ZlQmFja2Ryb3AoKSxlLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbiIpfSl9LHJlbW92ZUJhY2tkcm9wOmZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGJhY2tkcm9wOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgaT1lLnN1cHBvcnQudHJhbnNpdGlvbiYmcjt0aGlzLiRiYWNrZHJvcD1lKCc8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCAnK3IrJyIgLz4nKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSx0aGlzLiRiYWNrZHJvcC5jbGljayh0aGlzLm9wdGlvbnMuYmFja2Ryb3A9PSJzdGF0aWMiP2UucHJveHkodGhpcy4kZWxlbWVudFswXS5mb2N1cyx0aGlzLiRlbGVtZW50WzBdKTplLnByb3h5KHRoaXMuaGlkZSx0aGlzKSksaSYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIik7aWYoIXQpcmV0dXJuO2k/dGhpcy4kYmFja2Ryb3Aub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCx0KTp0KCl9ZWxzZSF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJhY2tkcm9wLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsdCk6dCgpKTp0JiZ0KCl9fTt2YXIgbj1lLmZuLm1vZGFsO2UuZm4ubW9kYWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPWUodGhpcyksaT1yLmRhdGEoIm1vZGFsIikscz1lLmV4dGVuZCh7fSxlLmZuLm1vZGFsLmRlZmF1bHRzLHIuZGF0YSgpLHR5cGVvZiBuPT0ib2JqZWN0IiYmbik7aXx8ci5kYXRhKCJtb2RhbCIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyI/aVtuXSgpOnMuc2hvdyYmaS5zaG93KCl9KX0sZS5mbi5tb2RhbC5kZWZhdWx0cz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sZS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj10LGUuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLm1vZGFsPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLHI9bi5hdHRyKCJocmVmIiksaT1lKG4uYXR0cigiZGF0YS10YXJnZXQiKXx8ciYmci5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxzPWkuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjplLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChyKSYmcn0saS5kYXRhKCksbi5kYXRhKCkpO3QucHJldmVudERlZmF1bHQoKSxpLm1vZGFsKHMpLm9uZSgiaGlkZSIsZnVuY3Rpb24oKXtuLmZvY3VzKCl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUsdCl7dGhpcy5pbml0KCJ0b29sdGlwIixlLHQpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxpbml0OmZ1bmN0aW9uKHQsbixyKXt2YXIgaSxzLG8sdSxhO3RoaXMudHlwZT10LHRoaXMuJGVsZW1lbnQ9ZShuKSx0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKHIpLHRoaXMuZW5hYmxlZD0hMCxvPXRoaXMub3B0aW9ucy50cmlnZ2VyLnNwbGl0KCIgIik7Zm9yKGE9by5sZW5ndGg7YS0tOyl1PW9bYV0sdT09ImNsaWNrIj90aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsZS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk6dSE9Im1hbnVhbCImJihpPXU9PSJob3ZlciI/Im1vdXNlZW50ZXIiOiJmb2N1cyIscz11PT0iaG92ZXIiPyJtb3VzZWxlYXZlIjoiYmx1ciIsdGhpcy4kZWxlbWVudC5vbihpKyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihzKyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGUucHJveHkodGhpcy5sZWF2ZSx0aGlzKSkpO3RoaXMub3B0aW9ucy5zZWxlY3Rvcj90aGlzLl9vcHRpb25zPWUuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dHJpZ2dlcjoibWFudWFsIixzZWxlY3RvcjoiIn0pOnRoaXMuZml4VGl0bGUoKX0sZ2V0T3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdD1lLmV4dGVuZCh7fSxlLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsdGhpcy4kZWxlbWVudC5kYXRhKCksdCksdC5kZWxheSYmdHlwZW9mIHQuZGVsYXk9PSJudW1iZXIiJiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLHR9LGVudGVyOmZ1bmN0aW9uKHQpe3ZhciBuPWUuZm5bdGhpcy50eXBlXS5kZWZhdWx0cyxyPXt9LGk7dGhpcy5fb3B0aW9ucyYmZS5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24oZSx0KXtuW2VdIT10JiYocltlXT10KX0sdGhpcyksaT1lKHQuY3VycmVudFRhcmdldClbdGhpcy50eXBlXShyKS5kYXRhKHRoaXMudHlwZSk7aWYoIWkub3B0aW9ucy5kZWxheXx8IWkub3B0aW9ucy5kZWxheS5zaG93KXJldHVybiBpLnNob3coKTtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSxpLmhvdmVyU3RhdGU9ImluIix0aGlzLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2kuaG92ZXJTdGF0ZT09ImluIiYmaS5zaG93KCl9LGkub3B0aW9ucy5kZWxheS5zaG93KX0sbGVhdmU6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO3RoaXMudGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7aWYoIW4ub3B0aW9ucy5kZWxheXx8IW4ub3B0aW9ucy5kZWxheS5oaWRlKXJldHVybiBuLmhpZGUoKTtuLmhvdmVyU3RhdGU9Im91dCIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmhvdmVyU3RhdGU9PSJvdXQiJiZuLmhpZGUoKX0sbi5vcHRpb25zLmRlbGF5LmhpZGUpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIHQsbixyLGkscyxvLHU9ZS5FdmVudCgic2hvdyIpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcih1KTtpZih1LmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0PXRoaXMudGlwKCksdGhpcy5zZXRDb250ZW50KCksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmdC5hZGRDbGFzcygiZmFkZSIpLHM9dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ9PSJmdW5jdGlvbiI/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsdFswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LHQuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj90LmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOnQuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksbj10aGlzLmdldFBvc2l0aW9uKCkscj10WzBdLm9mZnNldFdpZHRoLGk9dFswXS5vZmZzZXRIZWlnaHQ7c3dpdGNoKHMpe2Nhc2UiYm90dG9tIjpvPXt0b3A6bi50b3Arbi5oZWlnaHQsbGVmdDpuLmxlZnQrbi53aWR0aC8yLXIvMn07YnJlYWs7Y2FzZSJ0b3AiOm89e3RvcDpuLnRvcC1pLGxlZnQ6bi5sZWZ0K24ud2lkdGgvMi1yLzJ9O2JyZWFrO2Nhc2UibGVmdCI6bz17dG9wOm4udG9wK24uaGVpZ2h0LzItaS8yLGxlZnQ6bi5sZWZ0LXJ9O2JyZWFrO2Nhc2UicmlnaHQiOm89e3RvcDpuLnRvcCtuLmhlaWdodC8yLWkvMixsZWZ0Om4ubGVmdCtuLndpZHRofX10aGlzLmFwcGx5UGxhY2VtZW50KG8scyksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzaG93biIpfX0sYXBwbHlQbGFjZW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnRpcCgpLHI9blswXS5vZmZzZXRXaWR0aCxpPW5bMF0ub2Zmc2V0SGVpZ2h0LHMsbyx1LGE7bi5vZmZzZXQoZSkuYWRkQ2xhc3ModCkuYWRkQ2xhc3MoImluIikscz1uWzBdLm9mZnNldFdpZHRoLG89blswXS5vZmZzZXRIZWlnaHQsdD09InRvcCImJm8hPWkmJihlLnRvcD1lLnRvcCtpLW8sYT0hMCksdD09ImJvdHRvbSJ8fHQ9PSJ0b3AiPyh1PTAsZS5sZWZ0PDAmJih1PWUubGVmdCotMixlLmxlZnQ9MCxuLm9mZnNldChlKSxzPW5bMF0ub2Zmc2V0V2lkdGgsbz1uWzBdLm9mZnNldEhlaWdodCksdGhpcy5yZXBsYWNlQXJyb3codS1yK3MscywibGVmdCIpKTp0aGlzLnJlcGxhY2VBcnJvdyhvLWksbywidG9wIiksYSYmbi5vZmZzZXQoZSl9LHJlcGxhY2VBcnJvdzpmdW5jdGlvbihlLHQsbil7dGhpcy5hcnJvdygpLmNzcyhuLGU/NTAqKDEtZS90KSsiJSI6IiIpfSxzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50aXAoKSx0PXRoaXMuZ2V0VGl0bGUoKTtlLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0odCksZS5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt2YXIgdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vZmYoZS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5kZXRhY2goKX0sNTAwKTtuLm9uZShlLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodCksbi5kZXRhY2goKX0pfXZhciB0PXRoaXMsbj10aGlzLnRpcCgpLHI9ZS5FdmVudCgiaGlkZSIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihyKTtpZihyLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjtyZXR1cm4gbi5yZW1vdmVDbGFzcygiaW4iKSxlLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/aSgpOm4uZGV0YWNoKCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJoaWRkZW4iKSx0aGlzfSxmaXhUaXRsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsZW1lbnQ7KGUuYXR0cigidGl0bGUiKXx8dHlwZW9mIGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpIT0ic3RyaW5nIikmJmUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsZS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudFswXTtyZXR1cm4gZS5leHRlbmQoe30sdHlwZW9mIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PT0iZnVuY3Rpb24iP3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fSx0aGlzLiRlbGVtZW50Lm9mZnNldCgpKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuJGVsZW1lbnQsbj10aGlzLm9wdGlvbnM7cmV0dXJuIGU9dC5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCh0eXBlb2Ygbi50aXRsZT09ImZ1bmN0aW9uIj9uLnRpdGxlLmNhbGwodFswXSk6bi50aXRsZSksZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcD10aGlzLiR0aXB8fGUodGhpcy5vcHRpb25zLnRlbXBsYXRlKX0sYXJyb3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50WzBdLnBhcmVudE5vZGV8fCh0aGlzLmhpZGUoKSx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5vcHRpb25zPW51bGwpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LHRvZ2dsZUVuYWJsZWQ6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBuPXQ/ZSh0LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpOnRoaXM7bi50aXAoKS5oYXNDbGFzcygiaW4iKT9uLmhpZGUoKTpuLnNob3coKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fTt2YXIgbj1lLmZuLnRvb2x0aXA7ZS5mbi50b29sdGlwPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJ0b29sdGlwIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJ0b29sdGlwIixpPW5ldyB0KHRoaXMscykpLHR5cGVvZiBuPT0ic3RyaW5nIiYmaVtuXSgpfSl9LGUuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj10LGUuZm4udG9vbHRpcC5kZWZhdWx0cz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOiJob3ZlciBmb2N1cyIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMX0sZS5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi50b29sdGlwPW4sdGhpc319KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmluaXQoInBvcG92ZXIiLGUsdCl9O3QucHJvdG90eXBlPWUuZXh0ZW5kKHt9LGUuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnQsc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGlwKCksdD10aGlzLmdldFRpdGxlKCksbj10aGlzLmdldENvbnRlbnQoKTtlLmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0odCksZS5maW5kKCIucG9wb3Zlci1jb250ZW50IilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0obiksZS5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLiRlbGVtZW50LG49dGhpcy5vcHRpb25zO3JldHVybiBlPSh0eXBlb2Ygbi5jb250ZW50PT0iZnVuY3Rpb24iP24uY29udGVudC5jYWxsKHRbMF0pOm4uY29udGVudCl8fHQuYXR0cigiZGF0YS1jb250ZW50IiksZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD1lKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fSk7dmFyIG49ZS5mbi5wb3BvdmVyO2UuZm4ucG9wb3Zlcj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgicG9wb3ZlciIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgicG9wb3ZlciIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnBvcG92ZXIuQ29uc3RydWN0b3I9dCxlLmZuLnBvcG92ZXIuZGVmYXVsdHM9ZS5leHRlbmQoe30sZS5mbi50b29sdGlwLmRlZmF1bHRzLHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2Pid9KSxlLmZuLnBvcG92ZXIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBlLmZuLnBvcG92ZXI9bix0aGlzfX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcyksaT1lKHQpLmlzKCJib2R5Iik/ZSh3aW5kb3cpOmUodCksczt0aGlzLm9wdGlvbnM9ZS5leHRlbmQoe30sZS5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsbiksdGhpcy4kc2Nyb2xsRWxlbWVudD1pLm9uKCJzY3JvbGwuc2Nyb2xsLXNweS5kYXRhLWFwaSIsciksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8KHM9ZSh0KS5hdHRyKCJocmVmIikpJiZzLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIil8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLiRib2R5PWUoImJvZHkiKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX10LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuO3RoaXMub2Zmc2V0cz1lKFtdKSx0aGlzLnRhcmdldHM9ZShbXSksbj10aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uZGF0YSgidGFyZ2V0Iil8fG4uYXR0cigiaHJlZiIpLGk9L14jXHcvLnRlc3QocikmJmUocik7cmV0dXJuIGkmJmkubGVuZ3RoJiZbW2kucG9zaXRpb24oKS50b3ArKCFlLmlzV2luZG93KHQuJHNjcm9sbEVsZW1lbnQuZ2V0KDApKSYmdC4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSkscl1dfHxudWxsfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlWzBdLXRbMF19KS5lYWNoKGZ1bmN0aW9uKCl7dC5vZmZzZXRzLnB1c2godGhpc1swXSksdC50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0scHJvY2VzczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCx0PXRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHx0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxuPXQtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxyPXRoaXMub2Zmc2V0cyxpPXRoaXMudGFyZ2V0cyxzPXRoaXMuYWN0aXZlVGFyZ2V0LG87aWYoZT49bilyZXR1cm4gcyE9KG89aS5sYXN0KClbMF0pJiZ0aGlzLmFjdGl2YXRlKG8pO2ZvcihvPXIubGVuZ3RoO28tLTspcyE9aVtvXSYmZT49cltvXSYmKCFyW28rMV18fGU8PXJbbysxXSkmJnRoaXMuYWN0aXZhdGUoaVtvXSl9LGFjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuLHI7dGhpcy5hY3RpdmVUYXJnZXQ9dCxlKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxyPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJyt0KyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK3QrJyJdJyxuPWUocikucGFyZW50KCJsaSIpLmFkZENsYXNzKCJhY3RpdmUiKSxuLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgmJihuPW4uY2xvc2VzdCgibGkuZHJvcGRvd24iKS5hZGRDbGFzcygiYWN0aXZlIikpLG4udHJpZ2dlcigiYWN0aXZhdGUiKX19O3ZhciBuPWUuZm4uc2Nyb2xsc3B5O2UuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJzY3JvbGxzcHkiKSxzPXR5cGVvZiBuPT0ib2JqZWN0IiYmbjtpfHxyLmRhdGEoInNjcm9sbHNweSIsaT1uZXcgdCh0aGlzLHMpKSx0eXBlb2Ygbj09InN0cmluZyImJmlbbl0oKX0pfSxlLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj10LGUuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzPXtvZmZzZXQ6MTB9LGUuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5zY3JvbGxzcHk9bix0aGlzfSxlKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7ZSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3Quc2Nyb2xsc3B5KHQuZGF0YSgpKX0pfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7dmFyIHQ9ZnVuY3Rpb24odCl7dGhpcy5lbGVtZW50PWUodCl9O3QucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsbj10LmNsb3Nlc3QoInVsOm5vdCguZHJvcGRvd24tbWVudSkiKSxyPXQuYXR0cigiZGF0YS10YXJnZXQiKSxpLHMsbztyfHwocj10LmF0dHIoImhyZWYiKSxyPXImJnIucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7aWYodC5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybjtpPW4uZmluZCgiLmFjdGl2ZTpsYXN0IGEiKVswXSxvPWUuRXZlbnQoInNob3ciLHtyZWxhdGVkVGFyZ2V0Oml9KSx0LnRyaWdnZXIobyk7aWYoby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47cz1lKHIpLHRoaXMuYWN0aXZhdGUodC5wYXJlbnQoImxpIiksbiksdGhpcy5hY3RpdmF0ZShzLHMucGFyZW50KCksZnVuY3Rpb24oKXt0LnRyaWdnZXIoe3R5cGU6InNob3duIixyZWxhdGVkVGFyZ2V0Oml9KX0pfSxhY3RpdmF0ZTpmdW5jdGlvbih0LG4scil7ZnVuY3Rpb24gbygpe2kucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLHQuYWRkQ2xhc3MoImFjdGl2ZSIpLHM/KHRbMF0ub2Zmc2V0V2lkdGgsdC5hZGRDbGFzcygiaW4iKSk6dC5yZW1vdmVDbGFzcygiZmFkZSIpLHQucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZ0LmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLHImJnIoKX12YXIgaT1uLmZpbmQoIj4gLmFjdGl2ZSIpLHM9ciYmZS5zdXBwb3J0LnRyYW5zaXRpb24mJmkuaGFzQ2xhc3MoImZhZGUiKTtzP2kub25lKGUuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxvKTpvKCksaS5yZW1vdmVDbGFzcygiaW4iKX19O3ZhciBuPWUuZm4udGFiO2UuZm4udGFiPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJ0YWIiKTtpfHxyLmRhdGEoInRhYiIsaT1uZXcgdCh0aGlzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi50YWIuQ29uc3RydWN0b3I9dCxlLmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udGFiPW4sdGhpc30sZShkb2N1bWVudCkub24oImNsaWNrLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0idGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdJyxmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZSh0aGlzKS50YWIoInNob3ciKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy4kZWxlbWVudD1lKHQpLHRoaXMub3B0aW9ucz1lLmV4dGVuZCh7fSxlLmZuLnR5cGVhaGVhZC5kZWZhdWx0cyxuKSx0aGlzLm1hdGNoZXI9dGhpcy5vcHRpb25zLm1hdGNoZXJ8fHRoaXMubWF0Y2hlcix0aGlzLnNvcnRlcj10aGlzLm9wdGlvbnMuc29ydGVyfHx0aGlzLnNvcnRlcix0aGlzLmhpZ2hsaWdodGVyPXRoaXMub3B0aW9ucy5oaWdobGlnaHRlcnx8dGhpcy5oaWdobGlnaHRlcix0aGlzLnVwZGF0ZXI9dGhpcy5vcHRpb25zLnVwZGF0ZXJ8fHRoaXMudXBkYXRlcix0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuJG1lbnU9ZSh0aGlzLm9wdGlvbnMubWVudSksdGhpcy5zaG93bj0hMSx0aGlzLmxpc3RlbigpfTt0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dCxzZWxlY3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5hdHRyKCJkYXRhLXZhbHVlIik7cmV0dXJuIHRoaXMuJGVsZW1lbnQudmFsKHRoaXMudXBkYXRlcihlKSkuY2hhbmdlKCksdGhpcy5oaWRlKCl9LHVwZGF0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdD1lLmV4dGVuZCh7fSx0aGlzLiRlbGVtZW50LnBvc2l0aW9uKCkse2hlaWdodDp0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdodH0pO3JldHVybiB0aGlzLiRtZW51Lmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLmNzcyh7dG9wOnQudG9wK3QuaGVpZ2h0LGxlZnQ6dC5sZWZ0fSkuc2hvdygpLHRoaXMuc2hvd249ITAsdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRtZW51LmhpZGUoKSx0aGlzLnNob3duPSExLHRoaXN9LGxvb2t1cDpmdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gdGhpcy5xdWVyeT10aGlzLiRlbGVtZW50LnZhbCgpLCF0aGlzLnF1ZXJ5fHx0aGlzLnF1ZXJ5Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoP3RoaXMuc2hvd24/dGhpcy5oaWRlKCk6dGhpczoobj1lLmlzRnVuY3Rpb24odGhpcy5zb3VyY2UpP3RoaXMuc291cmNlKHRoaXMucXVlcnksZS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpOnRoaXMuc291cmNlLG4/dGhpcy5wcm9jZXNzKG4pOnRoaXMpfSxwcm9jZXNzOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHQ9ZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWF0Y2hlcihlKX0pLHQ9dGhpcy5zb3J0ZXIodCksdC5sZW5ndGg/dGhpcy5yZW5kZXIodC5zbGljZSgwLHRoaXMub3B0aW9ucy5pdGVtcykpLnNob3coKTp0aGlzLnNob3duP3RoaXMuaGlkZSgpOnRoaXN9LG1hdGNoZXI6ZnVuY3Rpb24oZSl7cmV0dXJufmUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSl9LHNvcnRlcjpmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9W10saTt3aGlsZShpPWUuc2hpZnQoKSlpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpP35pLmluZGV4T2YodGhpcy5xdWVyeSk/bi5wdXNoKGkpOnIucHVzaChpKTp0LnB1c2goaSk7cmV0dXJuIHQuY29uY2F0KG4scil9LGhpZ2hsaWdodGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpO3JldHVybiBlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKCIrdCsiKSIsImlnIiksZnVuY3Rpb24oZSx0KXtyZXR1cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9KX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIHQ9ZSh0KS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1lKG4ub3B0aW9ucy5pdGVtKS5hdHRyKCJkYXRhLXZhbHVlIixyKSx0LmZpbmQoImEiKS5odG1sKG4uaGlnaGxpZ2h0ZXIocikpLHRbMF19KSx0LmZpcnN0KCkuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuJG1lbnUuaHRtbCh0KSx0aGlzfSxuZXh0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxyPW4ubmV4dCgpO3IubGVuZ3RofHwocj1lKHRoaXMuJG1lbnUuZmluZCgibGkiKVswXSkpLHIuYWRkQ2xhc3MoImFjdGl2ZSIpfSxwcmV2OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxuPXQucHJldigpO24ubGVuZ3RofHwobj10aGlzLiRtZW51LmZpbmQoImxpIikubGFzdCgpKSxuLmFkZENsYXNzKCJhY3RpdmUiKX0sbGlzdGVuOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5vbigiZm9jdXMiLGUucHJveHkodGhpcy5mb2N1cyx0aGlzKSkub24oImJsdXIiLGUucHJveHkodGhpcy5ibHVyLHRoaXMpKS5vbigia2V5cHJlc3MiLGUucHJveHkodGhpcy5rZXlwcmVzcyx0aGlzKSkub24oImtleXVwIixlLnByb3h5KHRoaXMua2V5dXAsdGhpcykpLHRoaXMuZXZlbnRTdXBwb3J0ZWQoImtleWRvd24iKSYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93biIsZS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLHRoaXMuJG1lbnUub24oImNsaWNrIixlLnByb3h5KHRoaXMuY2xpY2ssdGhpcykpLm9uKCJtb3VzZWVudGVyIiwibGkiLGUucHJveHkodGhpcy5tb3VzZWVudGVyLHRoaXMpKS5vbigibW91c2VsZWF2ZSIsImxpIixlLnByb3h5KHRoaXMubW91c2VsZWF2ZSx0aGlzKSl9LGV2ZW50U3VwcG9ydGVkOmZ1bmN0aW9uKGUpe3ZhciB0PWUgaW4gdGhpcy4kZWxlbWVudDtyZXR1cm4gdHx8KHRoaXMuJGVsZW1lbnQuc2V0QXR0cmlidXRlKGUsInJldHVybjsiKSx0PXR5cGVvZiB0aGlzLiRlbGVtZW50W2VdPT0iZnVuY3Rpb24iKSx0fSxtb3ZlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNob3duKXJldHVybjtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6Y2FzZSAxMzpjYXNlIDI3OmUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDM4OmUucHJldmVudERlZmF1bHQoKSx0aGlzLnByZXYoKTticmVhaztjYXNlIDQwOmUucHJldmVudERlZmF1bHQoKSx0aGlzLm5leHQoKX1lLnN0b3BQcm9wYWdhdGlvbigpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdD1+ZS5pbkFycmF5KHQua2V5Q29kZSxbNDAsMzgsOSwxMywyN10pLHRoaXMubW92ZSh0KX0sa2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYodGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0KXJldHVybjt0aGlzLm1vdmUoZSl9LGtleXVwOmZ1bmN0aW9uKGUpe3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgNDA6Y2FzZSAzODpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztjYXNlIDk6Y2FzZSAxMzppZighdGhpcy5zaG93bilyZXR1cm47dGhpcy5zZWxlY3QoKTticmVhaztjYXNlIDI3OmlmKCF0aGlzLnNob3duKXJldHVybjt0aGlzLmhpZGUoKTticmVhaztkZWZhdWx0OnRoaXMubG9va3VwKCl9ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9LGZvY3VzOmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZD0hMH0sYmx1cjpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWQ9ITEsIXRoaXMubW91c2Vkb3ZlciYmdGhpcy5zaG93biYmdGhpcy5oaWRlKCl9LGNsaWNrOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0KCksdGhpcy4kZWxlbWVudC5mb2N1cygpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKHQpe3RoaXMubW91c2Vkb3Zlcj0hMCx0aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJhY3RpdmUiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0aGlzLm1vdXNlZG92ZXI9ITEsIXRoaXMuZm9jdXNlZCYmdGhpcy5zaG93biYmdGhpcy5oaWRlKCl9fTt2YXIgbj1lLmZuLnR5cGVhaGVhZDtlLmZuLnR5cGVhaGVhZD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxpPXIuZGF0YSgidHlwZWFoZWFkIikscz10eXBlb2Ygbj09Im9iamVjdCImJm47aXx8ci5kYXRhKCJ0eXBlYWhlYWQiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi50eXBlYWhlYWQuZGVmYXVsdHM9e3NvdXJjZTpbXSxpdGVtczo4LG1lbnU6Jzx1bCBjbGFzcz0idHlwZWFoZWFkIGRyb3Bkb3duLW1lbnUiPjwvdWw+JyxpdGVtOic8bGk+PGEgaHJlZj0iIyI+PC9hPjwvbGk+JyxtaW5MZW5ndGg6MX0sZS5mbi50eXBlYWhlYWQuQ29uc3RydWN0b3I9dCxlLmZuLnR5cGVhaGVhZC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZm4udHlwZWFoZWFkPW4sdGhpc30sZShkb2N1bWVudCkub24oImZvY3VzLnR5cGVhaGVhZC5kYXRhLWFwaSIsJ1tkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCJdJyxmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpO2lmKG4uZGF0YSgidHlwZWFoZWFkIikpcmV0dXJuO24udHlwZWFoZWFkKG4uZGF0YSgpKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKHQsbil7dGhpcy5vcHRpb25zPWUuZXh0ZW5kKHt9LGUuZm4uYWZmaXguZGVmYXVsdHMsbiksdGhpcy4kd2luZG93PWUod2luZG93KS5vbigic2Nyb2xsLmFmZml4LmRhdGEtYXBpIixlLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSkub24oImNsaWNrLmFmZml4LmRhdGEtYXBpIixlLnByb3h5KGZ1bmN0aW9uKCl7c2V0VGltZW91dChlLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0sdGhpcykpLHRoaXMuJGVsZW1lbnQ9ZSh0KSx0aGlzLmNoZWNrUG9zaXRpb24oKX07dC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXJldHVybjt2YXIgdD1lKGRvY3VtZW50KS5oZWlnaHQoKSxuPXRoaXMuJHdpbmRvdy5zY3JvbGxUb3AoKSxyPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksaT10aGlzLm9wdGlvbnMub2Zmc2V0LHM9aS5ib3R0b20sbz1pLnRvcCx1PSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIixhO3R5cGVvZiBpIT0ib2JqZWN0IiYmKHM9bz1pKSx0eXBlb2Ygbz09ImZ1bmN0aW9uIiYmKG89aS50b3AoKSksdHlwZW9mIHM9PSJmdW5jdGlvbiImJihzPWkuYm90dG9tKCkpLGE9dGhpcy51bnBpbiE9bnVsbCYmbit0aGlzLnVucGluPD1yLnRvcD8hMTpzIT1udWxsJiZyLnRvcCt0aGlzLiRlbGVtZW50LmhlaWdodCgpPj10LXM/ImJvdHRvbSI6byE9bnVsbCYmbjw9bz8idG9wIjohMTtpZih0aGlzLmFmZml4ZWQ9PT1hKXJldHVybjt0aGlzLmFmZml4ZWQ9YSx0aGlzLnVucGluPWE9PSJib3R0b20iP3IudG9wLW46bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHUpLmFkZENsYXNzKCJhZmZpeCIrKGE/Ii0iK2E6IiIpKX07dmFyIG49ZS5mbi5hZmZpeDtlLmZuLmFmZml4PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLGk9ci5kYXRhKCJhZmZpeCIpLHM9dHlwZW9mIG49PSJvYmplY3QiJiZuO2l8fHIuZGF0YSgiYWZmaXgiLGk9bmV3IHQodGhpcyxzKSksdHlwZW9mIG49PSJzdHJpbmciJiZpW25dKCl9KX0sZS5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj10LGUuZm4uYWZmaXguZGVmYXVsdHM9e29mZnNldDowfSxlLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mbi5hZmZpeD1uLHRoaXN9LGUod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXtlKCdbZGF0YS1zcHk9ImFmZml4Il0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPXQuZGF0YSgpO24ub2Zmc2V0PW4ub2Zmc2V0fHx7fSxuLm9mZnNldEJvdHRvbSYmKG4ub2Zmc2V0LmJvdHRvbT1uLm9mZnNldEJvdHRvbSksbi5vZmZzZXRUb3AmJihuLm9mZnNldC50b3A9bi5vZmZzZXRUb3ApLHQuYWZmaXgobil9KX0pfSh3aW5kb3cualF1ZXJ5KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmI4NGM1NAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvZmlsdGVyc25pcHBldC5qcwpAQCAtMCwwICsxLDk0IEBACisidXNlIHN0cmljdCIKKworLy8gVGhlIGRpc2FibGUgcmVtb3ZlcyB0aGUgJ2RhdGVwaWNrZXInIGF0dHJpYnV0ZSBhbmQKKy8vIHNldHRpbmdzLCBzbyB5b3UgaGF2ZSB0byByZS1pbml0aWFsaXplIGl0IGVhY2ggdGltZQorLy8gdGhlIGRhdGUgcmFuZ2UgaXMgc2VsZWN0ZWQgYW5kIGVuYWJsZWQKKy8vIERPTSBpcyB1c2VkIGluc3RlYWQgb2YgalF1ZXJ5IHRvIGZpbmQgdGhlIGVsZW1lbnRzCisvLyBpbiBhbGwgY29udGV4dHMKK2Z1bmN0aW9uIGRhdGVfZW5hYmxlIChrZXksIGFjdGlvbikgeworCisgICAgdmFyIGVsZW1Gcm9tPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX2Zyb21fIitrZXkpOworICAgIHZhciBlbGVtVG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGVfdG9fIitrZXkpOworCisgICAgaWYgKCdlbmFibGUnID09IGFjdGlvbikgeworICAgICAgICBlbGVtRnJvbS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CisgICAgICAgIGVsZW1Uby5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CisKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlcigpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlcigpOworCisgICAgICAgICQoZWxlbUZyb20pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAiZGF0ZUZvcm1hdCIsICJkZC9tbS95eSIgKTsKKyAgICAgICAgJChlbGVtVG8pLmRhdGVwaWNrZXIoICJvcHRpb24iLCAiZGF0ZUZvcm1hdCIsICJkZC9tbS95eSIgKTsKKworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAic2V0RGF0ZSIsIGVsZW1Gcm9tLmdldEF0dHJpYnV0ZSggImRhdGEtc2V0RGF0ZSIpICk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAic2V0RGF0ZSIsIGVsZW1Uby5nZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiKSApOworICAgICAgICAkKGVsZW1Gcm9tKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCBlbGVtRnJvbS5nZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiKSk7CisgICAgICAgICQoZWxlbVRvKS5kYXRlcGlja2VyKCAib3B0aW9uIiwgIm1pbkRhdGUiLCAgZWxlbVRvLmdldEF0dHJpYnV0ZSggImRhdGEtbWluRGF0ZSIpKTsKKyAgICAgICAgJChlbGVtRnJvbSkuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtYXhEYXRlIiwgZWxlbUZyb20uZ2V0QXR0cmlidXRlKCAiZGF0YS1tYXhEYXRlIikpOworICAgICAgICAkKGVsZW1UbykuZGF0ZXBpY2tlciggIm9wdGlvbiIsICJtYXhEYXRlIiwgZWxlbVRvLmdldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbGVtRnJvbS5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgZWxlbVRvLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgIH0KK30KKworLy8gSW5pdGlhbGl6ZSB0aGUgZGF0ZSBwaWNrZXIgZWxlbWVudHMgd2l0aCB0aGVpciBkZWZhdWx0IHN0YXRlIHZhcmlhYmxlcywgYW5kCisvLyByZWdpc3RlciB0aGUgcmFkaW8gYnV0dG9uIGFuZCBmb3JtIGFjdGlvbnMKK2Z1bmN0aW9uIGRhdGVfaW5pdCAoa2V5LCBmcm9tX2RhdGUsIHRvX2RhdGUsIG1pbl9kYXRlLCBtYXhfZGF0ZSwgaW5pdGlhbF9lbmFibGUpIHsKKworICAgIHZhciBlbGVtRnJvbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0ZV9mcm9tXyIra2V5KTsKKyAgICB2YXIgZWxlbVRvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYXRlX3RvXyIra2V5KTsKKworICAgIC8vIFdlcmUgdGhlcmUgYW55IGRhdGVyYW5nZSBmaWx0ZXJzIGluc3RhbnRpYXRlZD8gKGUuZy4gbm8gYnVpbGRzIGZvdW5kKQorICAgIGlmIChudWxsID09IGVsZW1Gcm9tKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBpbml0IHRoZSBkYXRlcGlja2VyIGNvbnRleHQgZGF0YQorICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtc2V0RGF0ZSIsIGZyb21fZGF0ZSApOworICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoICJkYXRhLXNldERhdGUiLCB0b19kYXRlICk7CisgICAgZWxlbUZyb20uc2V0QXR0cmlidXRlKCAiZGF0YS1taW5EYXRlIiwgbWluX2RhdGUpOworICAgIGVsZW1Uby5zZXRBdHRyaWJ1dGUoICJkYXRhLW1pbkRhdGUiLCAgbWluX2RhdGUpOworICAgIGVsZW1Gcm9tLnNldEF0dHJpYnV0ZSggImRhdGEtbWF4RGF0ZSIsIG1heF9kYXRlKTsKKyAgICBlbGVtVG8uc2V0QXR0cmlidXRlKCAiZGF0YS1tYXhEYXRlIiwgbWF4X2RhdGUpOworCisgICAgLy8gZG9lcyB0aGUgZGF0ZSBzZXQgc3RhcnQgZW5hYmxlZD8KKyAgICBpZiAoa2V5ID09IGluaXRpYWxfZW5hYmxlKSB7CisgICAgICAgIGRhdGVfZW5hYmxlIChrZXksICJlbmFibGUiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAiZGlzYWJsZSIpOworICAgIH0KKworICAgIC8vIGNhdGNoIHRoZSByYWRpbyBidXR0b24gc2VsZWN0cyBmb3IgZW5hYmxlL2Rpc2FibGUKKyAgICAkKCdpbnB1dDpyYWRpb1tuYW1lPSJmaWx0ZXIiXScpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICBpZiAoJCh0aGlzKS52YWwoKSA9PSAnZGF0ZXJhbmdlJykgeworICAgICAgICAgICAga2V5PSQodGhpcykuYXR0cigiZGF0YS1rZXkiKTsKKyAgICAgICAgICAgIGRhdGVfZW5hYmxlIChrZXksICdlbmFibGUnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleT0kKHRoaXMpLmF0dHIoImRhdGEta2V5Iik7CisgICAgICAgICAgICBkYXRlX2VuYWJsZSAoa2V5LCAnZGlzYWJsZScpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBjYXRjaCBhbnkgbmV3ICdmcm9tJyBkYXRlIGFzIG1pbkRhdGUgZm9yICd0bycgZGF0ZQorICAgICQoIiNkYXRlX2Zyb21fIitrZXkpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICBmcm9tX2RhdGUgPSAkKCIjZGF0ZV9mcm9tXyIra2V5KS52YWwoKTsKKyAgICAgICAgJCgiI2RhdGVfdG9fIitrZXkpLmRhdGVwaWNrZXIoICJvcHRpb24iLCAibWluRGF0ZSIsIGZyb21fZGF0ZSApOworICAgIH0pOworCisgICAgLy8gY2F0Y2ggdGhlIHN1Ym1pdCAoanVzdCBvbmNlKQorICAgICQoImZvcm0iKS51bmJpbmQoJ3N1Ym1pdCcpOworICAgICQoImZvcm0iKS5zdWJtaXQoZnVuY3Rpb24oZSkgeworICAgICAgICAvLyBmb3JtYXQgYSBjb21wb3NpdGUgZGF0ZXJhbmdlIGZpbHRlciB2YWx1ZSBzbyB0aGF0IGl0IGNhbiBiZSBwYXJzZWQgYW5kIHBvc3QtcHJvY2Vzc2VkIGluIHRoZSB2aWV3CisgICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgaWYgKCQoIiNkYXRlX2Zyb21fIitrZXkpLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHZhciBmaWx0ZXI9a2V5KyJfX2d0ZSEiK2tleSsiX19sdDoiKyQoIiNkYXRlX2Zyb21fIitrZXkpLnZhbCgpKyIhIiskKCIjZGF0ZV90b18iK2tleSkudmFsKCkrIl9kYXRlcmFuZ2UiOworICAgICAgICAgICAgICAgICQoIiNsYXN0X2RhdGVfZnJvbV8iK2tleSkudmFsKCQoIiNkYXRlX2Zyb21fIitrZXkpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICAkKCIjbGFzdF9kYXRlX3RvXyIra2V5KS52YWwoJCgiI2RhdGVfdG9fIitrZXkpLnZhbCgpKTsKKyAgICAgICAgICAgICAgICAkKCIjZmlsdGVyX3ZhbHVlXyIra2V5KS52YWwoZmlsdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKKworfTsKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvaW1wb3J0bGF5ZXIuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWRiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2ltcG9ydGxheWVyLmpzCkBAIC0wLDAgKzEsMjc2IEBACisidXNlIHN0cmljdCIKKworZnVuY3Rpb24gaW1wb3J0TGF5ZXJQYWdlSW5pdCAoY3R4KSB7CisKKyAgdmFyIGxheWVyRGVwQnRuID0gJCgiI2FkZC1sYXllci1kZXBlbmRlbmN5LWJ0biIpOworICB2YXIgaW1wb3J0QW5kQWRkQnRuID0gJCgiI2ltcG9ydC1hbmQtYWRkLWJ0biIpOworICB2YXIgbGF5ZXJOYW1lSW5wdXQgPSAkKCIjaW1wb3J0LWxheWVyLW5hbWUiKTsKKyAgdmFyIHZjc1VSTElucHV0ID0gJCgiI2xheWVyLWdpdC1yZXBvLXVybCIpOworICB2YXIgZ2l0UmVmSW5wdXQgPSAkKCIjbGF5ZXItZ2l0LXJlZiIpOworICB2YXIgbGF5ZXJEZXBJbnB1dCA9ICQoIiNsYXllci1kZXBlbmRlbmN5Iik7CisgIHZhciBsYXllck5hbWVDdHJsID0gJCgiI2xheWVyLW5hbWUtY3RybCIpOworICB2YXIgZHVwbGljYXRlZExheWVyTmFtZSA9ICQoIiNkdXBsaWNhdGVkLWxheWVyLW5hbWUtaGludCIpOworCisgIHZhciBsYXllckRlcHMgPSB7fTsKKyAgdmFyIGxheWVyRGVwc0RlcHMgPSB7fTsKKyAgdmFyIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKyAgdmFyIHZhbGlkTGF5ZXJOYW1lID0gL14oXHd8LSkrJC87CisKKyAgbGlidG9hc3Rlci5tYWtlVHlwZWFoZWFkKGxheWVyRGVwSW5wdXQsIGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgfSwgZnVuY3Rpb24oaXRlbSl7CisgICAgY3VycmVudExheWVyRGVwU2VsZWN0aW9uID0gaXRlbTsKKworICAgIGxheWVyRGVwQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisKKyAgLyogV2UgYXV0b21hdGljYWxseSBhZGQgIm9wZW5lbWJlZGRlZC1jb3JlIiBsYXllciBmb3IgY29udmVuaWVuY2UgYXMgYQorICAgKiBkZXBlbmRlbmN5IGFzIHByZXR0eSBtdWNoIGFsbCBsYXllcnMgZGVwZW5kIG9uIHRoaXMgb25lCisgICAqLworICAkLmdldEpTT04obGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLAorICAgIHsgaW5jbHVkZV9hZGRlZDogInRydWUiICwgc2VhcmNoOiAib3BlbmVtYmVkZGVkLWNvcmUiIH0sCisgICAgZnVuY3Rpb24obGF5ZXIpIHsKKyAgICBpZiAobGF5ZXIucmVzdWx0cy5sZW5ndGggPiAwKSB7CisgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSBsYXllci5yZXN1bHRzWzBdOworICAgICAgbGF5ZXJEZXBCdG4uY2xpY2soKTsKKyAgICB9CisgIH0pOworCisgIGxheWVyRGVwQnRuLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgaWYgKGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbiA9PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBsYXllckRlcHNbY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkXSA9IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKworICAgIC8qIE1ha2UgYSBsaXN0IGl0ZW0gZm9yIHRoZSBuZXcgbGF5ZXIgZGVwZW5kZW5jeSAqLworICAgIHZhciBuZXdMYXllckRlcCA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJEZWxldGVcIj48L3NwYW4+PC9saT4iKTsKKworICAgIG5ld0xheWVyRGVwLmRhdGEoJ2xheWVyLWlkJywgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkKTsKKyAgICBuZXdMYXllckRlcC5jaGlsZHJlbigic3BhbiIpLnRvb2x0aXAoKTsKKworICAgIHZhciBsaW5rID0gbmV3TGF5ZXJEZXAuY2hpbGRyZW4oImEiKTsKKyAgICBsaW5rLmF0dHIoImhyZWYiLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwpOworICAgIGxpbmsudGV4dChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubmFtZSk7CisgICAgbGluay50b29sdGlwKHt0aXRsZTogY3VycmVudExheWVyRGVwU2VsZWN0aW9uLnRvb2x0aXAsIHBsYWNlbWVudDogInJpZ2h0In0pOworCisgICAgdmFyIHRyYXNoSXRlbSA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIik7CisgICAgdHJhc2hJdGVtLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciB0b1JlbW92ZSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnbGF5ZXItaWQnKTsKKyAgICAgIGRlbGV0ZSBsYXllckRlcHNbdG9SZW1vdmVdOworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5mYWRlT3V0KGZ1bmN0aW9uICgpeworICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICAkKCIjbGF5ZXItZGVwcy1saXN0IikuYXBwZW5kKG5ld0xheWVyRGVwKTsKKworICAgIGxpYnRvYXN0ZXIuZ2V0TGF5ZXJEZXBzRm9yUHJvamVjdChjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwsIGZ1bmN0aW9uIChkYXRhKXsKKyAgICAgICAgLyogVGhlc2UgYXJlIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIGxheWVyIGFkZGVkIGFzIGEgZGVwZW5kZW5jeSAqLworICAgICAgICBpZiAoZGF0YS5saXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24udXJsID0gY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmxheWVyZGV0YWlsdXJsOworICAgICAgICAgIGxheWVyRGVwc1tjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24uaWRdLmRlcHMgPSBkYXRhLmxpc3Q7CisgICAgICAgIH0KKworICAgICAgICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gKi8KKyAgICAgICAgbGF5ZXJEZXBJbnB1dC52YWwoIiIpOworICAgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICAgIGxheWVyRGVwQnRuLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgIH0sIG51bGwpOworICB9KTsKKworICBpbXBvcnRBbmRBZGRCdG4uY2xpY2soZnVuY3Rpb24oKXsKKyAgICAvKiBUaGlzIGlzIGEgbGlzdCBvZiB0aGUgbmFtZXMgZnJvbSBsYXllckRlcHMgZm9yIHRoZSBsYXllciBkZXBzCisgICAgICogbW9kYWwgZGlhbG9nIGJvZHkKKyAgICAgKi8KKyAgICB2YXIgZGVwTmFtZXMgPSBbXTsKKworICAgIC8qIGFycnJheSBvZiBhbGwgbGF5ZXIgZGVwIGlkcyBpbmNsdWRlcyBwYXJlbnQgYW5kIGNoaWxkIGRlcHMgKi8KKyAgICB2YXIgYWxsRGVwcyA9IFtdOworCisgICAgLyogdGVtcG9yYXJ5IG9iamVjdCB0byB1c2UgdG8gZG8gYSByZWR1Y2Ugb24gdGhlIGRlcGVuZGVuY2llcyBmb3IgZWFjaAorICAgICAqIGxheWVyIGRlcGVuZGVuY3kgYWRkZWQKKyAgICAgKi8KKyAgICB2YXIgZGVwRGVwcyA9IHt9OworCisgICAgLyogdGhlIGxheWVycyB0aGF0IGhhdmUgZGVwZW5kZW5jaWVzIGhhdmUgYW4gZXh0cmEgcHJvcGVydHkgImRlcHMiCisgICAgICogbG9vayBpbiB0aGlzIGZvciBlYWNoIGxheWVyIGFuZCByZWR1Y2UgdGhpcyB0byBhIHVucXVpZSBvYmplY3QKKyAgICAgKiBvZiBkZXBzLgorICAgICAqLworICAgIGZvciAodmFyIGtleSBpbiBsYXllckRlcHMpeworICAgICAgaWYgKGxheWVyRGVwc1trZXldLmhhc093blByb3BlcnR5KCdkZXBzJykpeworICAgICAgICBmb3IgKHZhciBkZXAgaW4gbGF5ZXJEZXBzW2tleV0uZGVwcyl7CisgICAgICAgICAgdmFyIGxheWVyID0gbGF5ZXJEZXBzW2tleV0uZGVwc1tkZXBdOworICAgICAgICAgIGRlcERlcHNbbGF5ZXIuaWRdID0gbGF5ZXI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRlcE5hbWVzLnB1c2gobGF5ZXJEZXBzW2tleV0ubmFtZSk7CisgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJEZXBzW2tleV0uaWQpOworICAgIH0KKworICAgIC8qIHdlIGFjdHVhbGx5IHdhbnQgaXQgYXMgYW4gYXJyYXkgc28gY29udmVydCBpdCBub3cgKi8KKyAgICB2YXIgZGVwRGVwc0FycmF5ID0gW107CisgICAgZm9yICh2YXIga2V5IGluIGRlcERlcHMpCisgICAgICBkZXBEZXBzQXJyYXkucHVzaCAoZGVwRGVwc1trZXldKTsKKworICAgIGlmIChkZXBEZXBzQXJyYXkubGVuZ3RoID4gMCkgeworICAgICAgdmFyIGxheWVyID0geyBuYW1lOiBsYXllck5hbWVJbnB1dC52YWwoKSwgdXJsOiAiIyIsIGlkOiAtMSB9OworICAgICAgdmFyIHRpdGxlID0gIkxheWVyIjsKKyAgICAgIHZhciBib2R5ID0gIjxzdHJvbmc+IitsYXllci5uYW1lKyI8L3N0cm9uZz4ncyBkZXBlbmRlbmNpZXMgKCIrCisgICAgICAgIGRlcE5hbWVzLmpvaW4oIiwgIikrIjwvc3Bhbj4pIHJlcXVpcmUgc29tZSBsYXllcnMgdGhhdCBhcmUgbm90IGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gU2VsZWN0IHRoZSBvbmVzIHlvdSB3YW50IHRvIGFkZDo8L3A+IjsKKworICAgICAgc2hvd0xheWVyRGVwc01vZGFsKGxheWVyLCBkZXBEZXBzQXJyYXksIHRpdGxlLCBib2R5LCBmYWxzZSwgZnVuY3Rpb24obGF5ZXJPYnNMaXN0KXsKKyAgICAgICAgLyogQWRkIHRoZSBhY2NlcHRlZCBsYXllciBkZXBlbmRlbmNpZXMnIGlkcyB0byB0aGUgYWxsRGVwcyBhcnJheSAqLworICAgICAgICBmb3IgKHZhciBrZXkgaW4gbGF5ZXJPYnNMaXN0KXsKKyAgICAgICAgICBhbGxEZXBzLnB1c2gobGF5ZXJPYnNMaXN0W2tleV0uaWQpOworICAgICAgICB9CisgICAgICAgIGltcG9ydF9hbmRfYWRkICgpOworICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGltcG9ydF9hbmRfYWRkICgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGltcG9ydF9hbmRfYWRkICgpIHsKKyAgICAgIC8qIGNvbnZlcnQgdG8gYSBjc3Ygb2YgYWxsIHRoZSBkZXBzIHRvIGJlIGFkZGVkICovCisgICAgICB2YXIgbGF5ZXJEZXBzQ3N2ID0gYWxsRGVwcy5qb2luKCIsIik7CisKKyAgICAgIHZhciBsYXllckRhdGEgPSB7CisgICAgICAgIG5hbWU6IGxheWVyTmFtZUlucHV0LnZhbCgpLAorICAgICAgICB2Y3NfdXJsOiB2Y3NVUkxJbnB1dC52YWwoKSwKKyAgICAgICAgZ2l0X3JlZjogZ2l0UmVmSW5wdXQudmFsKCksCisgICAgICAgIGRpcl9wYXRoOiAkKCIjbGF5ZXItc3ViZGlyIikudmFsKCksCisgICAgICAgIHByb2plY3RfaWQ6IGxpYnRvYXN0ZXIuY3R4LnByb2plY3RJZCwKKyAgICAgICAgbGF5ZXJfZGVwczogbGF5ZXJEZXBzQ3N2LAorICAgICAgfTsKKworICAgICAgJC5hamF4KHsKKyAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgdXJsOiBjdHgueGhySW1wb3J0TGF5ZXJVcmwsCisgICAgICAgICAgZGF0YTogbGF5ZXJEYXRhLAorICAgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5lcnJvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvKiBTdWNjZXNzIGxheWVyIGltcG9ydCBub3cgZ28gdG8gdGhlIHByb2plY3QgcGFnZSAqLworICAgICAgICAgICAgICAkLmNvb2tpZSgnbGF5ZXItaW1wb3J0ZWQtYWxlcnQnLCBKU09OLnN0cmluZ2lmeShkYXRhKSwgeyBwYXRoOiAnLyd9KTsKKyAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwrJz9ub3RpZnk9bGF5ZXItaW1wb3J0ZWQnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgY29uc29sZS5sb2coIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKKyAgICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH0pOworCisgIGZ1bmN0aW9uIGVuYWJsZV9pbXBvcnRfYnRuKGVuYWJsZWQpIHsKKyAgICB2YXIgaW1wb3J0QW5kQWRkSGludCA9ICQoIiNpbXBvcnQtYW5kLWFkZC1oaW50Iik7CisKKyAgICBpZiAoZW5hYmxlZCkgeworICAgICAgaW1wb3J0QW5kQWRkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICBpbXBvcnRBbmRBZGRIaW50LmhpZGUoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbXBvcnRBbmRBZGRCdG4uYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICBpbXBvcnRBbmRBZGRIaW50LnNob3coKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrX2Zvcm0oKSB7CisgICAgdmFyIHZhbGlkID0gZmFsc2U7CisgICAgdmFyIGlucHV0cyA9ICQoImlucHV0OnJlcXVpcmVkIik7CisKKyAgICBmb3IgKHZhciBpPTA7IGk8aW5wdXRzLmxlbmd0aDsgaSsrKXsKKyAgICAgIGlmICghKHZhbGlkID0gaW5wdXRzW2ldLnZhbHVlKSl7CisgICAgICAgIGVuYWJsZV9pbXBvcnRfYnRuKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHZhbGlkKQorICAgICAgZW5hYmxlX2ltcG9ydF9idG4odHJ1ZSk7CisgIH0KKworICBmdW5jdGlvbiBsYXllckV4aXN0c0Vycm9yKGxheWVyKXsKKyAgICB2YXIgZHVwTGF5ZXJJbmZvID0gJCgiI2R1cGxpY2F0ZS1sYXllci1pbmZvIik7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIi5kdXAtbGF5ZXItbmFtZSIpLnRleHQobGF5ZXIubmFtZSk7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIi5kdXAtbGF5ZXItbGluayIpLmF0dHIoImhyZWYiLCBsYXllci5sYXllcmRldGFpbHVybCk7CisgICAgZHVwTGF5ZXJJbmZvLmZpbmQoIiNkdXAtbGF5ZXItdmNzLXVybCIpLnRleHQobGF5ZXIubGF5ZXJfX3Zjc191cmwpOworICAgIGR1cExheWVySW5mby5maW5kKCIjZHVwLWxheWVyLXJldmlzaW9uIikudGV4dChsYXllci5yZXZpc2lvbi5jb21taXQpOworCisgICAgJCgiLmZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisKKyAgICAgIGR1cExheWVySW5mby5mYWRlSW4oKTsKKyAgICB9KTsKKyAgfQorCisgIGxheWVyTmFtZUlucHV0Lm9uKCdibHVyJywgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoISQodGhpcykudmFsKCkpeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbmFtZSA9ICQodGhpcykudmFsKCk7CisKKyAgICAgIC8qIENoZWNrIGlmIHRoZSBsYXllciBuYW1lIGV4aXN0cyAqLworICAgICAgJC5nZXRKU09OKGxpYnRvYXN0ZXIuY3R4LmxheWVyc1R5cGVBaGVhZFVybCwKKyAgICAgICAgeyBpbmNsdWRlX2FkZGVkOiAidHJ1ZSIgLCBzZWFyY2g6IG5hbWUsIGZvcm1hdDogImpzb24iIH0sCisgICAgICAgIGZ1bmN0aW9uKGxheWVyKSB7CisgICAgICAgICAgaWYgKGxheWVyLnJvd3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBsYXllci5yb3dzKXsKKyAgICAgICAgICAgICAgaWYgKGxheWVyLnJvd3NbaV0ubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGF5ZXIucm93c1tpXSkKKyAgICAgICAgICAgICAgICBsYXllckV4aXN0c0Vycm9yKGxheWVyLnJvd3NbaV0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfSk7CisgIH0pOworCisgIHZjc1VSTElucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCkgeworICAgIGNoZWNrX2Zvcm0oKTsKKyAgfSk7CisKKyAgZ2l0UmVmSW5wdXQub24oJ2lucHV0JywgZnVuY3Rpb24oKSB7CisgICAgY2hlY2tfZm9ybSgpOworICB9KTsKKworICBsYXllck5hbWVJbnB1dC5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoJCh0aGlzKS52YWwoKSAmJiAhdmFsaWRMYXllck5hbWUudGVzdCgkKHRoaXMpLnZhbCgpKSl7CisgICAgICBsYXllck5hbWVDdHJsLmFkZENsYXNzKCJlcnJvciIpCisgICAgICAkKCIjaW52YWxpZC1sYXllci1uYW1lLWhpbnQiKS5zaG93KCk7CisgICAgICBlbmFibGVfaW1wb3J0X2J0bihmYWxzZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCQoIiNkdXBsaWNhdGUtbGF5ZXItaW5mbyIpLmNzcygiZGlzcGxheSIpICE9ICJOb25lIil7CisgICAgICAkKCIjZHVwbGljYXRlLWxheWVyLWluZm8iKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICQoIi5maWVsZHMtYXBhcnQtZnJvbS1sYXllci1uYW1lIikuc2hvdygpOworICAgICAgfSk7CisKKyAgICB9CisKKyAgICAvKiBEb24ndCByZW1vdmUgdGhlIGVycm9yIGNsYXNzIGlmIHdlJ3JlIGRpc3BsYXlpbmcgdGhlIGVycm9yIGZvciBhbm90aGVyCisgICAgICogcmVhc29uLgorICAgICAqLworICAgIGlmICghZHVwbGljYXRlZExheWVyTmFtZS5pcygiOnZpc2libGUiKSkKKyAgICAgIGxheWVyTmFtZUN0cmwucmVtb3ZlQ2xhc3MoImVycm9yIikKKworICAgICQoIiNpbnZhbGlkLWxheWVyLW5hbWUtaGludCIpLmhpZGUoKTsKKyAgICBjaGVja19mb3JtKCk7CisgIH0pOworCisgIC8qIEhhdmUgYSBndWVzcyBhdCB0aGUgbGF5ZXIgbmFtZSAqLworICB2Y3NVUkxJbnB1dC5mb2N1c291dChmdW5jdGlvbiAoKXsKKyAgICAvKiBJZiB3ZSBhIGxheWVyIG5hbWUgc3BlY2lmaWVkIGRvbid0IG92ZXJ3cml0ZSBpdCBvciBpZiB0aGVyZSBpc24ndCBhCisgICAgICogdXJsIHR5cGVkIGluIHlldCByZXR1cm4KKyAgICAgKi8KKyAgICBpZiAobGF5ZXJOYW1lSW5wdXQudmFsKCkgfHwgISQodGhpcykudmFsKCkpCisgICAgICByZXR1cm47CisKKyAgICBpZiAoJCh0aGlzKS52YWwoKS5zZWFyY2goIi8iKSl7CisgICAgICB2YXIgdXJsUHRzID0gJCh0aGlzKS52YWwoKS5zcGxpdCgiLyIpOworICAgICAgdmFyIHN1Z2dlc3Rpb24gPSB1cmxQdHNbdXJsUHRzLmxlbmd0aC0xXS5yZXBsYWNlKCIuZ2l0IiwiIik7CisgICAgICBsYXllck5hbWVJbnB1dC52YWwoc3VnZ2VzdGlvbik7CisgICAgfQorICB9KTsKKworfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLmpzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktMi4wLjMubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTIwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4uanMKQEAgLTAsMCArMSw2IEBACisvKiEgalF1ZXJ5IHYyLjAuMyB8IChjKSAyMDA1LCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwganF1ZXJ5Lm9yZy9saWNlbnNlCisvL0Agc291cmNlTWFwcGluZ1VSTD1qcXVlcnktMi4wLjMubWluLm1hcAorKi8KKyhmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyPXR5cGVvZiB1bmRlZmluZWQsaT1lLmxvY2F0aW9uLG89ZS5kb2N1bWVudCxzPW8uZG9jdW1lbnRFbGVtZW50LGE9ZS5qUXVlcnksdT1lLiQsbD17fSxjPVtdLHA9IjIuMC4zIixmPWMuY29uY2F0LGg9Yy5wdXNoLGQ9Yy5zbGljZSxnPWMuaW5kZXhPZixtPWwudG9TdHJpbmcseT1sLmhhc093blByb3BlcnR5LHY9cC50cmltLHg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLG4sdCl9LGI9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usdz0vXFMrL2csVD0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxrPS9eLW1zLS8sTj0vLShbXGRhLXpdKS9naSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sUz1mdW5jdGlvbigpe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSx4LnJlYWR5KCl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpwLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKHI9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOlQuZXhlYyhlKSwhcnx8IXJbMV0mJnQpcmV0dXJuIXR8fHQuanF1ZXJ5Pyh0fHxuKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiB4P3RbMF06dCx4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpvLCEwKSksQy50ZXN0KHJbMV0pJiZ4LmlzUGxhaW5PYmplY3QodCkpZm9yKHIgaW4gdCl4LmlzRnVuY3Rpb24odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gaT1vLmdldEVsZW1lbnRCeUlkKHJbMl0pLGkmJmkucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1pKSx0aGlzLmNvbnRleHQ9byx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9uLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dW5kZWZpbmVkJiYodGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHgubWFrZUFycmF5KGUsdGhpcykpfSxzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3RoaXMudG9BcnJheSgpOjA+ZT90aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD14Lm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdC5jb250ZXh0PXRoaXMuY29udGV4dCx0fSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZWFjaCh0aGlzLGUsdCl9LHJlYWR5OmZ1bmN0aW9uKGUpe3JldHVybiB4LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoMD5lP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJnQ+bj9bdGhpc1tuXV06W10pfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpoLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx4LmZuLmluaXQucHJvdG90eXBlPXguZm4seC5leHRlbmQ9eC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgcyYmKGw9cyxzPWFyZ3VtZW50c1sxXXx8e30sYT0yKSwib2JqZWN0Ij09dHlwZW9mIHN8fHguaXNGdW5jdGlvbihzKXx8KHM9e30pLHU9PT1hJiYocz10aGlzLC0tYSk7dT5hO2ErKylpZihudWxsIT0oZT1hcmd1bWVudHNbYV0pKWZvcih0IGluIGUpbj1zW3RdLHI9ZVt0XSxzIT09ciYmKGwmJnImJih4LmlzUGxhaW5PYmplY3Qocil8fChpPXguaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmeC5pc0FycmF5KG4pP246W10pOm89biYmeC5pc1BsYWluT2JqZWN0KG4pP246e30sc1t0XT14LmV4dGVuZChsLG8scikpOnIhPT11bmRlZmluZWQmJihzW3RdPXIpKTtyZXR1cm4gc30seC5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHArTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09eCYmKGUuJD11KSx0JiZlLmpRdWVyeT09PXgmJihlLmpRdWVyeT1hKSx4fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP3gucmVhZHlXYWl0Kys6eC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpeyhlPT09ITA/LS14LnJlYWR5V2FpdDp4LmlzUmVhZHkpfHwoeC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChvLFt4XSkseC5mbi50cmlnZ2VyJiZ4KG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKSl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW20uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09eC50eXBlKGUpfHxlLm5vZGVUeXBlfHx4LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYheS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8bzt2YXIgcj1DLmV4ZWMoZSksaT0hbiYmW107cmV0dXJuIHI/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9eC5idWlsZEZyYWdtZW50KFtlXSx0LGkpLGkmJngoaSkucmVtb3ZlKCkseC5tZXJnZShbXSxyLmNoaWxkTm9kZXMpKX0scGFyc2VKU09OOkpTT04ucGFyc2UscGFyc2VYTUw6ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXtuPW5ldyBET01QYXJzZXIsdD1uLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKHIpe3Q9dW5kZWZpbmVkfXJldHVybighdHx8dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ4LmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZXZhbDtlPXgudHJpbShlKSxlJiYoMT09PWUuaW5kZXhPZigidXNlIHN0cmljdCIpPyh0PW8uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksdC50ZXh0PWUsby5oZWFkLmFwcGVuZENoaWxkKHQpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOm4oZSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLCJtcy0iKS5yZXBsYWNlKE4sRSl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpO2lmKG4pe2lmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGlmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOnYuY2FsbChlKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihqKE9iamVjdChlKSk/eC5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6aC5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmcuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPTA7aWYoIm51bWJlciI9PXR5cGVvZiBuKWZvcig7bj5pO2krKyllW3IrK109dFtpXTtlbHNlIHdoaWxlKHRbaV0hPT11bmRlZmluZWQpZVtyKytdPXRbaSsrXTtyZXR1cm4gZS5sZW5ndGg9cixlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLG89MCxzPWUubGVuZ3RoO2ZvcihuPSEhbjtzPm87bysrKXI9ISF0KGVbb10sbyksbiE9PXImJmkucHVzaChlW29dKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxzPWooZSksYT1bXTtpZihzKWZvcig7bz5pO2krKylyPXQoZVtpXSxpLG4pLG51bGwhPXImJihhW2EubGVuZ3RoXT1yKTtlbHNlIGZvcihpIGluIGUpcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7cmV0dXJuIGYuYXBwbHkoW10sYSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9bikseC5pc0Z1bmN0aW9uKGUpPyhyPWQuY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHguZ3VpZCsrLGkpOnVuZGVmaW5lZH0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpe3ZhciBhPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT14LnR5cGUobikpe2k9ITA7Zm9yKGEgaW4gbil4LmFjY2VzcyhlLHQsYSxuW2FdLCEwLG8scyl9ZWxzZSBpZihyIT09dW5kZWZpbmVkJiYoaT0hMCx4LmlzRnVuY3Rpb24ocil8fChzPSEwKSxsJiYocz8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoeChlKSxuKX0pKSx0KSlmb3IoO3U+YTthKyspdChlW2FdLG4scz9yOnIuY2FsbChlW2FdLGEsdChlW2FdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxub3c6RGF0ZS5ub3csc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHM9e307Zm9yKG8gaW4gdClzW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109c1tvXTtyZXR1cm4gaX19KSx4LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG58fChuPXguRGVmZXJyZWQoKSwiY29tcGxldGUiPT09by5yZWFkeVN0YXRlP3NldFRpbWVvdXQoeC5yZWFkeSk6KG8uYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSkpLG4ucHJvbWlzZSh0KX0seC5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBqKGUpe3ZhciB0PWUubGVuZ3RoLG49eC50eXBlKGUpO3JldHVybiB4LmlzV2luZG93KGUpPyExOjE9PT1lLm5vZGVUeXBlJiZ0PyEwOiJhcnJheSI9PT1ufHwiZnVuY3Rpb24iIT09biYmKDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXQ9eChvKSxmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxnLG0seSx2PSJzaXp6bGUiKy1uZXcgRGF0ZSxiPWUuZG9jdW1lbnQsdz0wLFQ9MCxDPXN0KCksaz1zdCgpLE49c3QoKSxFPSExLFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KEU9ITAsMCk6MH0saj10eXBlb2YgdW5kZWZpbmVkLEQ9MTw8MzEsQT17fS5oYXNPd25Qcm9wZXJ0eSxMPVtdLHE9TC5wb3AsSD1MLnB1c2gsTz1MLnB1c2gsRj1MLnNsaWNlLFA9TC5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsVz0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCQ9Vy5yZXBsYWNlKCJ3IiwidyMiKSxCPSJcXFsiK00rIiooIitXKyIpIitNKyIqKD86KFsqXiR8IX5dPz0pIitNKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiskKyIpfCl8KSIrTSsiKlxcXSIsST0iOigiK1crIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK0IucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLHo9UmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89UmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFg9UmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9UmVnRXhwKE0rIipbK35dIiksWT1SZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKikiK00rIipcXF0iLCJnIiksVj1SZWdFeHAoSSksRz1SZWdFeHAoIl4iKyQrIiQiKSxKPXtJRDpSZWdFeHAoIl4jKCIrVysiKSIpLENMQVNTOlJlZ0V4cCgiXlxcLigiK1crIikiKSxUQUc6UmVnRXhwKCJeKCIrVy5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6UmVnRXhwKCJeIitCKSxQU0VVRE86UmVnRXhwKCJeIitJKSxDSElMRDpSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOlJlZ0V4cCgiXig/OiIrUisiKSQiLCJpIiksbmVlZHNDb250ZXh0OlJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxRPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxLPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGV0PS9eaFxkJC9pLHR0PS8nfFxcL2csbnQ9UmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIikscnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9PXJ8fG4/dDowPnI/U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHI+PjEwLDU2MzIwfDEwMjMmcil9O3RyeXtPLmFwcGx5KEw9Ri5jYWxsKGIuY2hpbGROb2RlcyksYi5jaGlsZE5vZGVzKSxMW2IuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGl0KXtPPXthcHBseTpMLmxlbmd0aD9mdW5jdGlvbihlLHQpe0guYXBwbHkoZSxGLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBvdChlLHQscixpKXt2YXIgbyxzLGEsdSxsLGYsZyxtLHgsdztpZigodD90Lm93bmVyRG9jdW1lbnR8fHQ6YikhPT1wJiZjKHQpLHQ9dHx8cCxyPXJ8fFtdLCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHI7aWYoMSE9PSh1PXQubm9kZVR5cGUpJiY5IT09dSlyZXR1cm5bXTtpZihoJiYhaSl7aWYobz1LLmV4ZWMoZSkpaWYoYT1vWzFdKXtpZig5PT09dSl7aWYocz10LmdldEVsZW1lbnRCeUlkKGEpLCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiByO2lmKHMuaWQ9PT1hKXJldHVybiByLnB1c2gocykscn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKSYmeSh0LHMpJiZzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZXtpZihvWzJdKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigoYT1vWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIE8uYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkpLHJ9aWYobi5xc2EmJighZHx8IWQudGVzdChlKSkpe2lmKG09Zz12LHg9dCx3PTk9PT11JiZlLDE9PT11JiYib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zj1ndChlKSwoZz10LmdldEF0dHJpYnV0ZSgiaWQiKSk/bT1nLnJlcGxhY2UodHQsIlxcJCYiKTp0LnNldEF0dHJpYnV0ZSgiaWQiLG0pLG09IltpZD0nIittKyInXSAiLGw9Zi5sZW5ndGg7d2hpbGUobC0tKWZbbF09bSttdChmW2xdKTt4PVUudGVzdChlKSYmdC5wYXJlbnROb2RlfHx0LHc9Zi5qb2luKCIsIil9aWYodyl0cnl7cmV0dXJuIE8uYXBwbHkocix4LnF1ZXJ5U2VsZWN0b3JBbGwodykpLHJ9Y2F0Y2goVCl7fWZpbmFsbHl7Z3x8dC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4ga3QoZS5yZXBsYWNlKHosIiQxIiksdCxyLGkpfWZ1bmN0aW9uIHN0KCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLHIpe3JldHVybiBlLnB1c2gobis9IiAiKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbl09cn1yZXR1cm4gdH1mdW5jdGlvbiBhdChlKXtyZXR1cm4gZVt2XT0hMCxlfWZ1bmN0aW9uIHV0KGUpe3ZhciB0PXAuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1lLmxlbmd0aDt3aGlsZShyLS0paS5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiYofnQuc291cmNlSW5kZXh8fEQpLSh+ZS5zb3VyY2VJbmRleHx8RCk7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PW4mJnQudHlwZT09PWV9fWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBodChlKXtyZXR1cm4gYXQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsYXQoZnVuY3Rpb24obixyKXt2YXIgaSxvPWUoW10sbi5sZW5ndGgsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0pbltpPW9bc11dJiYobltpXT0hKHJbaV09bltpXSkpfSl9KX1zPW90LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD8iSFRNTCIhPT10Lm5vZGVOYW1lOiExfSxuPW90LnN1cHBvcnQ9e30sYz1vdC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpiLHI9dC5kZWZhdWx0VmlldztyZXR1cm4gdCE9PXAmJjk9PT10Lm5vZGVUeXBlJiZ0LmRvY3VtZW50RWxlbWVudD8ocD10LGY9dC5kb2N1bWVudEVsZW1lbnQsaD0hcyh0KSxyJiZyLmF0dGFjaEV2ZW50JiZyIT09ci50b3AmJnIuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixmdW5jdGlvbigpe2MoKX0pLG4uYXR0cmlidXRlcz11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iLGUuZmlyc3RDaGlsZC5jbGFzc05hbWU9ImkiLDI9PT1lLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImkiKS5sZW5ndGh9KSxuLmdldEJ5SWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGYuYXBwZW5kQ2hpbGQoZSkuaWQ9diwhdC5nZXRFbGVtZW50c0J5TmFtZXx8IXQuZ2V0RWxlbWVudHNCeU5hbWUodikubGVuZ3RofSksbi5nZXRCeUlkPyhpLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCE9PWomJmgpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4mJm4ucGFyZW50Tm9kZT9bbl06W119fSxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0pOihkZWxldGUgaS5maW5kLklELGkuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT1qJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9PT10fX0pLGkuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWo/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTp1bmRlZmluZWR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGkuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp1bmRlZmluZWR9LGc9W10sZD1bXSwobi5xc2E9US50ZXN0KHQucXVlcnlTZWxlY3RvckFsbCkpJiYodXQoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZC5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxkLnB1c2goIjpjaGVja2VkIil9KSx1dChmdW5jdGlvbihlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKG4pLnNldEF0dHJpYnV0ZSgidCIsIiIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3RePScnXSIpLmxlbmd0aCYmZC5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxkLnB1c2goIiwuKjoiKX0pKSwobi5tYXRjaGVzU2VsZWN0b3I9US50ZXN0KG09Zi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGYubW96TWF0Y2hlc1NlbGVjdG9yfHxmLm9NYXRjaGVzU2VsZWN0b3J8fGYubXNNYXRjaGVzU2VsZWN0b3IpKSYmdXQoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiZGl2IiksbS5jYWxsKGUsIltzIT0nJ106eCIpLGcucHVzaCgiIT0iLEkpfSksZD1kLmxlbmd0aCYmUmVnRXhwKGQuam9pbigifCIpKSxnPWcubGVuZ3RoJiZSZWdFeHAoZy5qb2luKCJ8IikpLHk9US50ZXN0KGYuY29udGFpbnMpfHxmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sUz1mLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUscil7aWYoZT09PXIpcmV0dXJuIEU9ITAsMDt2YXIgaT1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpO3JldHVybiBpPzEmaXx8IW4uc29ydERldGFjaGVkJiZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09aT9lPT09dHx8eShiLGUpPy0xOnI9PT10fHx5KGIscik/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLHIpOjA6NCZpPy0xOjE6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MCxvPWUucGFyZW50Tm9kZSxzPW4ucGFyZW50Tm9kZSxhPVtlXSx1PVtuXTtpZihlPT09bilyZXR1cm4gRT0hMCwwO2lmKCFvfHwhcylyZXR1cm4gZT09PXQ/LTE6bj09PXQ/MTpvPy0xOnM/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLG4pOjA7aWYobz09PXMpcmV0dXJuIGN0KGUsbik7cj1lO3doaWxlKHI9ci5wYXJlbnROb2RlKWEudW5zaGlmdChyKTtyPW47d2hpbGUocj1yLnBhcmVudE5vZGUpdS51bnNoaWZ0KHIpO3doaWxlKGFbaV09PT11W2ldKWkrKztyZXR1cm4gaT9jdChhW2ldLHVbaV0pOmFbaV09PT1iPy0xOnVbaV09PT1iPzE6MH0sdCk6cH0sb3QubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvdChlLG51bGwsbnVsbCx0KX0sb3QubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpLHQ9dC5yZXBsYWNlKFksIj0nJDEnXSIpLCEoIW4ubWF0Y2hlc1NlbGVjdG9yfHwhaHx8ZyYmZy50ZXN0KHQpfHxkJiZkLnRlc3QodCkpKXRyeXt2YXIgcj1tLmNhbGwoZSx0KTtpZihyfHxuLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goaSl7fXJldHVybiBvdCh0LHAsbnVsbCxbZV0pLmxlbmd0aD4wfSxvdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx5KGUsdCl9LG90LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSk7dmFyIHI9aS5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0sbz1yJiZBLmNhbGwoaS5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/cihlLHQsIWgpOnVuZGVmaW5lZDtyZXR1cm4gbz09PXVuZGVmaW5lZD9uLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKHQpOihvPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJm8uc3BlY2lmaWVkP28udmFsdWU6bnVsbDpvfSxvdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb3QudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoRT0hbi5kZXRlY3REdXBsaWNhdGVzLGw9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoUyksRSl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGV9LG89b3QuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9byh0KTtyZXR1cm4gbn0saT1vdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzphdCxtYXRjaDpKLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UobnQscnQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKG50LHJ0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b3QuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmb3QuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNV0mJmVbMl07cmV0dXJuIEouQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dW5kZWZpbmVkP2VbMl09ZVs0XTpuJiZWLnRlc3QobikmJih0PWd0KG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9Q1tlKyIgIl07cmV0dXJuIHR8fCh0PVJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJkMoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1qJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vdC5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/IiE9Ij09PXQ6dD8oaSs9IiIsIj0iPT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIqPSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9PT1uOiJ+PSI9PT10PygiICIraSsiICIpLmluZGV4T2Yobik+LTE6Inw9Ij09PXQ/aT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMykscz0ibGFzdCIhPT1lLnNsaWNlKC00KSxhPSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMscCxmLGgsZCxnPW8hPT1zPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbT10LnBhcmVudE5vZGUseT1hJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkseD0hdSYmIWE7aWYobSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7ZD1nPSJvbmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W3M/bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxzJiZ4KXtjPW1bdl18fChtW3ZdPXt9KSxsPWNbZV18fFtdLGg9bFswXT09PXcmJmxbMV0sZj1sWzBdPT09dyYmbFsyXSxwPWgmJm0uY2hpbGROb2Rlc1toXTt3aGlsZShwPSsraCYmcCYmcFtnXXx8KGY9aD0wKXx8ZC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKytmJiZwPT09dCl7Y1tlXT1bdyxoLGZdO2JyZWFrfX1lbHNlIGlmKHgmJihsPSh0W3ZdfHwodFt2XT17fSkpW2VdKSYmbFswXT09PXcpZj1sWzFdO2Vsc2Ugd2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoKGE/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSkmJisrZiYmKHgmJigocFt2XXx8KHBbdl09e30pKVtlXT1bdyxmXSkscD09PXQpKWJyZWFrO3JldHVybiBmLT1pLGY9PT1yfHwwPT09ZiVyJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiByW3ZdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2F0KGZ1bmN0aW9uKGUsbil7dmFyIGksbz1yKGUsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0paT1QLmNhbGwoZSxvW3NdKSxlW2ldPSEobltpXT1vW3NdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6YXQoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPWEoZS5yZXBsYWNlKHosIiQxIikpO3JldHVybiByW3ZdP2F0KGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHM9cihlLG51bGwsaSxbXSksYT1lLmxlbmd0aDt3aGlsZShhLS0pKG89c1thXSkmJihlW2FdPSEodFthXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLCFuLnBvcCgpfX0pLGhhczphdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG90KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8byh0KSkuaW5kZXhPZihlKT4tMX19KSxsYW5nOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZXx8IiIpfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkbyBpZihuPWg/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBuPW4udG9Mb3dlckNhc2UoKSxuPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIik7d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zn0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wLmFjdGl2ZUVsZW1lbnQmJighcC5oYXNGb2N1c3x8cC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVOYW1lPiJAInx8Mz09PWUubm9kZVR5cGV8fDQ9PT1lLm5vZGVUeXBlKXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBldC50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gWi50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHx0LnRvTG93ZXJDYXNlKCk9PT1lLnR5cGUpfSxmaXJzdDpodChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aHQoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmh0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bMD5uP24rdDpuXX0pLGV2ZW46aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0wO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MTtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDt0PisrcjspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcTtmb3IodCBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlpLnBzZXVkb3NbdF09cHQodCk7Zm9yKHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlpLnBzZXVkb3NbdF09ZnQodCk7ZnVuY3Rpb24gZHQoKXt9ZHQucHJvdG90eXBlPWkuZmlsdGVycz1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBkdDtmdW5jdGlvbiBndChlLHQpe3ZhciBuLHIsbyxzLGEsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7YT1lLHU9W10sbD1pLnByZUZpbHRlcjt3aGlsZShhKXsoIW58fChyPV8uZXhlYyhhKSkpJiYociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHUucHVzaChvPVtdKSksbj0hMSwocj1YLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKHosIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2ZvcihzIGluIGkuZmlsdGVyKSEocj1KW3NdLmV4ZWMoYSkpfHxsW3NdJiYhKHI9bFtzXShyKSl8fChuPXIuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTpzLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/b3QuZXJyb3IoZSk6ayhlLHUpLnNsaWNlKDApfWZ1bmN0aW9uIG10KGUpe3ZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO2Zvcig7bj50O3QrKylyKz1lW3RdLnZhbHVlO3JldHVybiByfWZ1bmN0aW9uIHl0KGUsdCxuKXt2YXIgaT10LmRpcixvPW4mJiJwYXJlbnROb2RlIj09PWkscz1UKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQsbixhKXt2YXIgdSxsLGMscD13KyIgIitzO2lmKGEpe3doaWxlKHQ9dFtpXSlpZigoMT09PXQubm9kZVR5cGV8fG8pJiZlKHQsbixhKSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylpZihjPXRbdl18fCh0W3ZdPXt9KSwobD1jW2ldKSYmbFswXT09PXApe2lmKCh1PWxbMV0pPT09ITB8fHU9PT1yKXJldHVybiB1PT09ITB9ZWxzZSBpZihsPWNbaV09W3BdLGxbMV09ZSh0LG4sYSl8fHIsbFsxXT09PSEwKXJldHVybiEwfX1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiB4dChlLHQsbixyLGkpe3ZhciBvLHM9W10sYT0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O2Zvcig7dT5hO2ErKykobz1lW2FdKSYmKCFufHxuKG8scixpKSkmJihzLnB1c2gobyksbCYmdC5wdXNoKGEpKTtyZXR1cm4gc31mdW5jdGlvbiBidChlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW3ZdJiYocj1idChyKSksaSYmIWlbdl0mJihpPWJ0KGksbykpLGF0KGZ1bmN0aW9uKG8scyxhLHUpe3ZhciBsLGMscCxmPVtdLGg9W10sZD1zLmxlbmd0aCxnPW98fEN0KHR8fCIqIixhLm5vZGVUeXBlP1thXTphLFtdKSxtPSFlfHwhbyYmdD9nOnh0KGcsZixlLGEsdSkseT1uP2l8fChvP2U6ZHx8cik/W106czptO2lmKG4mJm4obSx5LGEsdSkscil7bD14dCh5LGgpLHIobCxbXSxhLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShwPWxbY10pJiYoeVtoW2NdXT0hKG1baFtjXV09cCkpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJmwucHVzaChtW2NdPXApO2kobnVsbCx5PVtdLGwsdSl9Yz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJihsPWk/UC5jYWxsKG8scCk6ZltjXSk+LTEmJihvW2xdPSEoc1tsXT1wKSl9fWVsc2UgeT14dCh5PT09cz95LnNwbGljZShkLHkubGVuZ3RoKTp5KSxpP2kobnVsbCxzLHksdSk6Ty5hcHBseShzLHkpfSl9ZnVuY3Rpb24gd3QoZSl7dmFyIHQsbixyLG89ZS5sZW5ndGgscz1pLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1zfHxpLnJlbGF0aXZlWyIgIl0sbD1zPzE6MCxjPXl0KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sYSwhMCkscD15dChmdW5jdGlvbihlKXtyZXR1cm4gUC5jYWxsKHQsZSk+LTF9LGEsITApLGY9W2Z1bmN0aW9uKGUsbixyKXtyZXR1cm4hcyYmKHJ8fG4hPT11KXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOnAoZSxuLHIpKX1dO2Zvcig7bz5sO2wrKylpZihuPWkucmVsYXRpdmVbZVtsXS50eXBlXSlmPVt5dCh2dChmKSxuKV07ZWxzZXtpZihuPWkuZmlsdGVyW2VbbF0udHlwZV0uYXBwbHkobnVsbCxlW2xdLm1hdGNoZXMpLG5bdl0pe2ZvcihyPSsrbDtvPnI7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gYnQobD4xJiZ2dChmKSxsPjEmJm10KGUuc2xpY2UoMCxsLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtsLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoeiwiJDEiKSxuLHI+bCYmd3QoZS5zbGljZShsLHIpKSxvPnImJnd0KGU9ZS5zbGljZShyKSksbz5yJiZtdChlKSl9Zi5wdXNoKG4pfXJldHVybiB2dChmKX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPTAsbz10Lmxlbmd0aD4wLHM9ZS5sZW5ndGg+MCxhPWZ1bmN0aW9uKGEsbCxjLGYsaCl7dmFyIGQsZyxtLHk9W10sdj0wLHg9IjAiLGI9YSYmW10sVD1udWxsIT1oLEM9dSxrPWF8fHMmJmkuZmluZC5UQUcoIioiLGgmJmwucGFyZW50Tm9kZXx8bCksTj13Kz1udWxsPT1DPzE6TWF0aC5yYW5kb20oKXx8LjE7Zm9yKFQmJih1PWwhPT1wJiZsLHI9bik7bnVsbCE9KGQ9a1t4XSk7eCsrKXtpZihzJiZkKXtnPTA7d2hpbGUobT1lW2crK10paWYobShkLGwsYykpe2YucHVzaChkKTticmVha31UJiYodz1OLHI9KytuKX1vJiYoKGQ9IW0mJmQpJiZ2LS0sYSYmYi5wdXNoKGQpKX1pZih2Kz14LG8mJnghPT12KXtnPTA7d2hpbGUobT10W2crK10pbShiLHksbCxjKTtpZihhKXtpZih2PjApd2hpbGUoeC0tKWJbeF18fHlbeF18fCh5W3hdPXEuY2FsbChmKSk7eT14dCh5KX1PLmFwcGx5KGYseSksVCYmIWEmJnkubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb3QudW5pcXVlU29ydChmKX1yZXR1cm4gVCYmKHc9Tix1PUMpLGJ9O3JldHVybiBvP2F0KGEpOmF9YT1vdC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89TltlKyIgIl07aWYoIW8pe3R8fCh0PWd0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlvPXd0KHRbbl0pLG9bdl0/ci5wdXNoKG8pOmkucHVzaChvKTtvPU4oZSxUdChpLHIpKX1yZXR1cm4gb307ZnVuY3Rpb24gQ3QoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO2k+cjtyKyspb3QoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIGt0KGUsdCxyLG8pe3ZhciBzLHUsbCxjLHAsZj1ndChlKTtpZighbyYmMT09PWYubGVuZ3RoKXtpZih1PWZbMF09ZlswXS5zbGljZSgwKSx1Lmxlbmd0aD4yJiYiSUQiPT09KGw9dVswXSkudHlwZSYmbi5nZXRCeUlkJiY5PT09dC5ub2RlVHlwZSYmaCYmaS5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZih0PShpLmZpbmQuSUQobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLHQpfHxbXSlbMF0sIXQpcmV0dXJuIHI7ZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfXM9Si5uZWVkc0NvbnRleHQudGVzdChlKT8wOnUubGVuZ3RoO3doaWxlKHMtLSl7aWYobD11W3NdLGkucmVsYXRpdmVbYz1sLnR5cGVdKWJyZWFrO2lmKChwPWkuZmluZFtjXSkmJihvPXAobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLFUudGVzdCh1WzBdLnR5cGUpJiZ0LnBhcmVudE5vZGV8fHQpKSl7aWYodS5zcGxpY2UocywxKSxlPW8ubGVuZ3RoJiZtdCh1KSwhZSlyZXR1cm4gTy5hcHBseShyLG8pLHI7YnJlYWt9fX1yZXR1cm4gYShlLGYpKG8sdCwhaCxyLFUudGVzdChlKSkscn1uLnNvcnRTdGFibGU9di5zcGxpdCgiIikuc29ydChTKS5qb2luKCIiKT09PXYsbi5kZXRlY3REdXBsaWNhdGVzPUUsYygpLG4uc29ydERldGFjaGVkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxsdCgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP3VuZGVmaW5lZDplLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxsdCgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT91bmRlZmluZWQ6ZS5kZWZhdWx0VmFsdWV9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8bHQoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIG4/dW5kZWZpbmVkOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6ZVt0XT09PSEwP3QudG9Mb3dlckNhc2UoKTpudWxsfSkseC5maW5kPW90LHguZXhwcj1vdC5zZWxlY3RvcnMseC5leHByWyI6Il09eC5leHByLnBzZXVkb3MseC51bmlxdWU9b3QudW5pcXVlU29ydCx4LnRleHQ9b3QuZ2V0VGV4dCx4LmlzWE1MRG9jPW90LmlzWE1MLHguY29udGFpbnM9b3QuY29udGFpbnN9KGUpO3ZhciBEPXt9O2Z1bmN0aW9uIEEoZSl7dmFyIHQ9RFtlXT17fTtyZXR1cm4geC5lYWNoKGUubWF0Y2godyl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9eC5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/RFtlXXx8QShlKTp4LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvLHMsYT1bXSx1PSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24ocCl7Zm9yKHQ9ZS5tZW1vcnkmJnAsbj0hMCxzPWl8fDAsaT0wLG89YS5sZW5ndGgscj0hMDthJiZvPnM7cysrKWlmKGFbc10uYXBwbHkocFswXSxwWzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXt0PSExO2JyZWFrfXI9ITEsYSYmKHU/dS5sZW5ndGgmJmwodS5zaGlmdCgpKTp0P2E9W106Yy5kaXNhYmxlKCkpfSxjPXthZGQ6ZnVuY3Rpb24oKXtpZihhKXt2YXIgbj1hLmxlbmd0aDsoZnVuY3Rpb24gcyh0KXt4LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPXgudHlwZShuKTsiZnVuY3Rpb24iPT09cj9lLnVuaXF1ZSYmYy5oYXMobil8fGEucHVzaChuKTpuJiZuLmxlbmd0aCYmInN0cmluZyIhPT1yJiZzKG4pfSl9KShhcmd1bWVudHMpLHI/bz1hLmxlbmd0aDp0JiYoaT1uLGwodCkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmeC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXguaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksciYmKG8+PW4mJm8tLSxzPj1uJiZzLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3guaW5BcnJheShlLGEpPi0xOiEoIWF8fCFhLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGE9W10sbz0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PXQ9dW5kZWZpbmVkLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT11bmRlZmluZWQsdHx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWF8fG4mJiF1fHwodD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLHI/dS5wdXNoKHQpOmwodCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW59fTtyZXR1cm4gY30seC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHguQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4geC5EZWZlcnJlZChmdW5jdGlvbihuKXt4LmVhY2godCxmdW5jdGlvbih0LG8pe3ZhciBzPW9bMF0sYT14LmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShmdW5jdGlvbigpe3ZhciBlPWEmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxhP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/eC5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbix4LmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBzPW9bMl0sYT1vWzNdO3Jbb1sxXV09cy5hZGQsYSYmcy5hZGQoZnVuY3Rpb24oKXtuPWF9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1zLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWQuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmeC5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLG89MT09PWk/ZTp4LkRlZmVycmVkKCkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTpyLG49PT1hP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0sYSx1LGw7aWYocj4xKWZvcihhPUFycmF5KHIpLHU9QXJyYXkociksbD1BcnJheShyKTtyPnQ7dCsrKW5bdF0mJnguaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUocyh0LGwsbikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKHModCx1LGEpKTotLWk7cmV0dXJuIGl8fG8ucmVzb2x2ZVdpdGgobCxuKSxvLnByb21pc2UoKX19KSx4LnN1cHBvcnQ9ZnVuY3Rpb24odCl7dmFyIG49by5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHI9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9by5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxhPXMuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7cmV0dXJuIG4udHlwZT8obi50eXBlPSJjaGVja2JveCIsdC5jaGVja09uPSIiIT09bi52YWx1ZSx0Lm9wdFNlbGVjdGVkPWEuc2VsZWN0ZWQsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSEwLHQuYm94U2l6aW5nUmVsaWFibGU9ITAsdC5waXhlbFBvc2l0aW9uPSExLG4uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW4uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hYS5kaXNhYmxlZCxuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxuLnZhbHVlPSJ0IixuLnR5cGU9InJhZGlvIix0LnJhZGlvVmFsdWU9InQiPT09bi52YWx1ZSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxuLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxyLmFwcGVuZENoaWxkKG4pLHQuY2hlY2tDbG9uZT1yLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gZSxpLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsaS5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1pLnN0eWxlLmJhY2tncm91bmRDbGlwLHgoZnVuY3Rpb24oKXt2YXIgbixyLHM9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveCIsYT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07YSYmKG49by5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixhLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGkpLGkuaW5uZXJIVE1MPSIiLGkuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSUiLHguc3dhcChhLG51bGwhPWEuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1pLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1pLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1pLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGkuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksYS5yZW1vdmVDaGlsZChuKSl9KSx0KTp0fSh7fSk7dmFyIEwscSxIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gRigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz14LmV4cGFuZG8rTWF0aC5yYW5kb20oKX1GLnVpZD0xLEYuYWNjZXB0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT8xPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGU6ITB9LEYucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oZSl7aWYoIUYuYWNjZXB0cyhlKSlyZXR1cm4gMDt2YXIgdD17fSxuPWVbdGhpcy5leHBhbmRvXTtpZighbil7bj1GLnVpZCsrO3RyeXt0W3RoaXMuZXhwYW5kb109e3ZhbHVlOm59LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCl9Y2F0Y2gocil7dFt0aGlzLmV4cGFuZG9dPW4seC5leHRlbmQoZSx0KX19cmV0dXJuIHRoaXMuY2FjaGVbbl18fCh0aGlzLmNhY2hlW25dPXt9KSxufSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5rZXkoZSksbz10aGlzLmNhY2hlW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgdClvW3RdPW47ZWxzZSBpZih4LmlzRW1wdHlPYmplY3QobykpeC5leHRlbmQodGhpcy5jYWNoZVtpXSx0KTtlbHNlIGZvcihyIGluIHQpb1tyXT10W3JdO3JldHVybiBvfSxnZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNhY2hlW3RoaXMua2V5KGUpXTtyZXR1cm4gdD09PXVuZGVmaW5lZD9uOm5bdF19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmbj09PXVuZGVmaW5lZD8ocj10aGlzLmdldChlLHQpLHIhPT11bmRlZmluZWQ/cjp0aGlzLmdldChlLHguY2FtZWxDYXNlKHQpKSk6KHRoaXMuc2V0KGUsdCxuKSxuIT09dW5kZWZpbmVkP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXMua2V5KGUpLHM9dGhpcy5jYWNoZVtvXTtpZih0PT09dW5kZWZpbmVkKXRoaXMuY2FjaGVbb109e307ZWxzZXt4LmlzQXJyYXkodCk/cj10LmNvbmNhdCh0Lm1hcCh4LmNhbWVsQ2FzZSkpOihpPXguY2FtZWxDYXNlKHQpLHQgaW4gcz9yPVt0LGldOihyPWkscj1yIGluIHM/W3JdOnIubWF0Y2godyl8fFtdKSksbj1yLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHNbcltuXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiF4LmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oZSl7ZVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfX0sTD1uZXcgRixxPW5ldyBGLHguZXh0ZW5kKHthY2NlcHREYXRhOkYuYWNjZXB0cyxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBMLmhhc0RhdGEoZSl8fHEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0wucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3EucmVtb3ZlKGUsdCl9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpc1swXSxvPTAscz1udWxsO2lmKGU9PT11bmRlZmluZWQpe2lmKHRoaXMubGVuZ3RoJiYocz1MLmdldChpKSwxPT09aS5ub2RlVHlwZSYmIXEuZ2V0KGksImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49aS5hdHRyaWJ1dGVzO24ubGVuZ3RoPm87bysrKXI9bltvXS5uYW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPXguY2FtZWxDYXNlKHIuc2xpY2UoNSkpLFAoaSxyLHNbcl0pKTtxLnNldChpLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gc31yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5zZXQodGhpcyxlKX0pOnguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCl7dmFyIG4scj14LmNhbWVsQ2FzZShlKTtpZihpJiZ0PT09dW5kZWZpbmVkKXtpZihuPUwuZ2V0KGksZSksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPUwuZ2V0KGksciksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPVAoaSxyLHVuZGVmaW5lZCksbiE9PXVuZGVmaW5lZClyZXR1cm4gbn1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPUwuZ2V0KHRoaXMscik7TC5zZXQodGhpcyxyLHQpLC0xIT09ZS5pbmRleE9mKCItIikmJm4hPT11bmRlZmluZWQmJkwuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLnJlbW92ZSh0aGlzLGUpfSl9fSk7ZnVuY3Rpb24gUChlLHQsbil7dmFyIHI7aWYobj09PXVuZGVmaW5lZCYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpLG49ZS5nZXRBdHRyaWJ1dGUociksInN0cmluZyI9PXR5cGVvZiBuKXt0cnl7bj0idHJ1ZSI9PT1uPyEwOiJmYWxzZSI9PT1uPyExOiJudWxsIj09PW4/bnVsbDorbisiIj09PW4/K246SC50ZXN0KG4pP0pTT04ucGFyc2Uobik6bn1jYXRjaChpKXt9TC5zZXQoZSx0LG4pfWVsc2Ugbj11bmRlZmluZWQ7cmV0dXJuIG59eC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZT8odD0odHx8ImZ4IikrInF1ZXVlIixyPXEuZ2V0KGUsdCksbiYmKCFyfHx4LmlzQXJyYXkobik/cj1xLmFjY2VzcyhlLHQseC5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W10pOnVuZGVmaW5lZH0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj14LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXguX3F1ZXVlSG9va3MoZSx0KSxzPWZ1bmN0aW9uKCl7eC5kZXF1ZXVlKGUsdCkKK307ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3MoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxuPmFyZ3VtZW50cy5sZW5ndGg/eC5xdWV1ZSh0aGlzWzBdLGUpOnQ9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj14LnF1ZXVlKHRoaXMsZSx0KTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5bMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9eC5EZWZlcnJlZCgpLG89dGhpcyxzPXRoaXMubGVuZ3RoLGE9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pbj1xLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KTt2YXIgUixNLFc9L1tcdFxyXG5cZl0vZywkPS9cci9nLEI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbeC5wcm9wRml4W2VdfHxlXX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9MCxhPXRoaXMubGVuZ3RoLHU9InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigiICIraSsiICIpJiYocis9aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2godyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10W28rK10pd2hpbGUoci5pbmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAiLCIgIik7bi5jbGFzc05hbWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2YXIgdCxpPTAsbz14KHRoaXMpLHM9ZS5tYXRjaCh3KXx8W107d2hpbGUodD1zW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZShuPT09cnx8ImJvb2xlYW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmcS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6cS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT0iIjoibnVtYmVyIj09dHlwZW9mIGk/aSs9IiI6eC5pc0FycmF5KGkpJiYoaT14Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksdD14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnQuc2V0KHRoaXMsaSwidmFsdWUiKSE9PXVuZGVmaW5lZHx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4gdD14LnZhbEhvb2tzW2kudHlwZV18fHgudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYiZ2V0ImluIHQmJihuPXQuZ2V0KGksInZhbHVlIikpIT09dW5kZWZpbmVkP246KG49aS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5yZXBsYWNlKCQsIiIpOm51bGw9PW4/IiI6bil9fX0pLHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgsbz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxzPW8/bnVsbDpbXSxhPW8/aSsxOnIubGVuZ3RoLHU9MD5pP2E6bz9pOjA7Zm9yKDthPnU7dSsrKWlmKG49clt1XSwhKCFuLnNlbGVjdGVkJiZ1IT09aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVkOm51bGwhPT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxlZCYmeC5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCksbylyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz14Lm1ha2VBcnJheSh0KSxzPWkubGVuZ3RoO3doaWxlKHMtLSlyPWlbc10sKHIuc2VsZWN0ZWQ9eC5pbkFycmF5KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX0sYXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0QXR0cmlidXRlPT09cj94LnByb3AoZSx0LG4pOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KHQ9dC50b0xvd2VyQ2FzZSgpLGk9eC5hdHRySG9va3NbdF18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP006UikpLG49PT11bmRlZmluZWQ/aSYmImdldCJpbiBpJiZudWxsIT09KG89aS5nZXQoZSx0KSk/bzoobz14LmZpbmQuYXR0cihlLHQpLG51bGw9PW8/dW5kZWZpbmVkOm8pOm51bGwhPT1uP2kmJiJzZXQiaW4gaSYmKG89aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9vOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOih4LnJlbW92ZUF0dHIoZSx0KSx1bmRlZmluZWQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pJiYoZVtyXT0hMSksZS5yZW1vdmVBdHRyaWJ1dGUobil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXguc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gbz0xIT09c3x8IXguaXNYTUxEb2MoZSksbyYmKHQ9eC5wcm9wRml4W3RdfHx0LGk9eC5wcm9wSG9va3NbdF0pLG4hPT11bmRlZmluZWQ/aSYmInNldCJpbiBpJiYocj1pLnNldChlLG4sdCkpIT09dW5kZWZpbmVkP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8Qi50ZXN0KGUubm9kZU5hbWUpfHxlLmhyZWY/ZS50YWJJbmRleDotMX19fX0pLE09e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9PT0hMT94LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx4LmVhY2goeC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj14LmV4cHIuYXR0ckhhbmRsZVt0XXx8eC5maW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXguZXhwci5hdHRySGFuZGxlW3RdLG89cj91bmRlZmluZWQ6KHguZXhwci5hdHRySGFuZGxlW3RdPXVuZGVmaW5lZCkhPW4oZSx0LHIpP3QudG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVt0XT1pLG99fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5pc0FycmF5KHQpP2UuY2hlY2tlZD14LmluQXJyYXkoeChlKS52YWwoKSx0KT49MDp1bmRlZmluZWR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgST0vXmtleS8sej0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXz0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFUoKXtyZXR1cm4hMH1mdW5jdGlvbiBZKCl7cmV0dXJuITF9ZnVuY3Rpb24gVigpe3RyeXtyZXR1cm4gby5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzLGEsdSxsLGMscCxmLGgsZCxnLG0seT1xLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihzPW4sbj1zLmhhbmRsZXIsbz1zLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9eC5ndWlkKyspLChsPXkuZXZlbnRzKXx8KGw9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09cnx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dW5kZWZpbmVkOnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoYS5lbGVtLGFyZ3VtZW50cyl9LGEuZWxlbT1lKSx0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sYz10Lmxlbmd0aDt3aGlsZShjLS0pdT1YLmV4ZWModFtjXSl8fFtdLGQ9bT11WzFdLGc9KHVbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KG8/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9eC5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTptLGRhdGE6aSxoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6byxuZWVkc0NvbnRleHQ6byYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KG8pLG5hbWVzcGFjZTpnLmpvaW4oIi4iKX0scyksKGg9bFtkXSl8fChoPWxbZF09W10saC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmZi5zZXR1cC5jYWxsKGUsaSxnLGEpIT09ITF8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSwhMSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLHApLHAuaGFuZGxlci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksbz9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLHApOmgucHVzaChwKSx4LmV2ZW50Lmdsb2JhbFtkXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsZyxtPXEuaGFzRGF0YShlKSYmcS5nZXQoZSk7aWYobSYmKHU9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sbD10Lmxlbmd0aDt3aGlsZShsLS0paWYoYT1YLmV4ZWModFtsXSl8fFtdLGg9Zz1hWzFdLGQ9KGFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtwPXguZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPXVbaF18fFtdLGE9YVsyXSYmUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDt3aGlsZShvLS0pYz1mW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYhYS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKTtzJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxkLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsaCxtLmhhbmRsZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9yKGggaW4gdSl4LmV2ZW50LnJlbW92ZShlLGgrdFtsXSxuLHIsITApO3guaXNFbXB0eU9iamVjdCh1KSYmKGRlbGV0ZSBtLmhhbmRsZSxxLnJlbW92ZShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLGEsdSxsLGMscCxmLGg9W3J8fG9dLGQ9eS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxnPXkuY2FsbCh0LCJuYW1lc3BhY2UiKT90Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGE9dT1yPXJ8fG8sMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhXy50ZXN0KGQreC5ldmVudC50cmlnZ2VyZWQpJiYoZC5pbmRleE9mKCIuIik+PTAmJihnPWQuc3BsaXQoIi4iKSxkPWcuc2hpZnQoKSxnLnNvcnQoKSksYz0wPmQuaW5kZXhPZigiOiIpJiYib24iK2QsdD10W3guZXhwYW5kb10/dDpuZXcgeC5FdmVudChkLCJvYmplY3QiPT10eXBlb2YgdCYmdCksdC5pc1RyaWdnZXI9aT8yOjMsdC5uYW1lc3BhY2U9Zy5qb2luKCIuIiksdC5uYW1lc3BhY2VfcmU9dC5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitnLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dW5kZWZpbmVkLHQudGFyZ2V0fHwodC50YXJnZXQ9ciksbj1udWxsPT1uP1t0XTp4Lm1ha2VBcnJheShuLFt0XSksZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGl8fCFmLnRyaWdnZXJ8fGYudHJpZ2dlci5hcHBseShyLG4pIT09ITEpKXtpZighaSYmIWYubm9CdWJibGUmJiF4LmlzV2luZG93KHIpKXtmb3IobD1mLmRlbGVnYXRlVHlwZXx8ZCxfLnRlc3QobCtkKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWgucHVzaChhKSx1PWE7dT09PShyLm93bmVyRG9jdW1lbnR8fG8pJiZoLnB1c2godS5kZWZhdWx0Vmlld3x8dS5wYXJlbnRXaW5kb3d8fGUpfXM9MDt3aGlsZSgoYT1oW3MrK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXQudHlwZT1zPjE/bDpmLmJpbmRUeXBlfHxkLHA9KHEuZ2V0KGEsImV2ZW50cyIpfHx7fSlbdC50eXBlXSYmcS5nZXQoYSwiaGFuZGxlIikscCYmcC5hcHBseShhLG4pLHA9YyYmYVtjXSxwJiZ4LmFjY2VwdERhdGEoYSkmJnAuYXBwbHkmJnAuYXBwbHkoYSxuKT09PSExJiZ0LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHQudHlwZT1kLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYuX2RlZmF1bHQmJmYuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxuKSE9PSExfHwheC5hY2NlcHREYXRhKHIpfHxjJiZ4LmlzRnVuY3Rpb24ocltkXSkmJiF4LmlzV2luZG93KHIpJiYodT1yW2NdLHUmJihyW2NdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWQscltkXSgpLHguZXZlbnQudHJpZ2dlcmVkPXVuZGVmaW5lZCx1JiYocltjXT11KSksdC5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciB0LG4scixpLG8scz1bXSxhPWQuY2FsbChhcmd1bWVudHMpLHU9KHEuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sbD14LmV2ZW50LnNwZWNpYWxbZS50eXBlXXx8e307aWYoYVswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhbC5wcmVEaXNwYXRjaHx8bC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxlLHUpLHQ9MDt3aGlsZSgoaT1zW3QrK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtlLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUubmFtZXNwYWNlX3JlLnRlc3Qoby5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPW8sZS5kYXRhPW8uZGF0YSxyPSgoeC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxhKSxyIT09dW5kZWZpbmVkJiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGwucG9zdERpc3BhdGNoJiZsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9W10sYT10LmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihhJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPT10aGlzO3U9dS5wYXJlbnROb2RlfHx0aGlzKWlmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSl7Zm9yKHI9W10sbj0wO2E+bjtuKyspbz10W25dLGk9by5zZWxlY3RvcisiICIscltpXT09PXVuZGVmaW5lZCYmKHJbaV09by5uZWVkc0NvbnRleHQ/eChpLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChpLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCkscltpXSYmci5wdXNoKG8pO3IubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpyfSl9cmV0dXJuIHQubGVuZ3RoPmEmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOnQuc2xpY2UoYSl9KSxzfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHM9dC5idXR0b247cmV0dXJuIG51bGw9PWUucGFnZVgmJm51bGwhPXQuY2xpZW50WCYmKG49ZS50YXJnZXQub3duZXJEb2N1bWVudHx8byxyPW4uZG9jdW1lbnRFbGVtZW50LGk9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xsTGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQuY2xpZW50WSsociYmci5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRUb3B8fGkmJmkuY2xpZW50VG9wfHwwKSksZS53aGljaHx8cz09PXVuZGVmaW5lZHx8KGUud2hpY2g9MSZzPzE6MiZzPzM6NCZzPzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10pcmV0dXJuIGU7dmFyIHQsbixyLGk9ZS50eXBlLHM9ZSxhPXRoaXMuZml4SG9va3NbaV07YXx8KHRoaXMuZml4SG9va3NbaV09YT16LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOkkudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPWEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYS5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KHMpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPXNbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9byksMz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksYS5maWx0ZXI/YS5maWx0ZXIoZSxzKTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PVYoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp1bmRlZmluZWR9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PVYoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZ4Lm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMuY2xpY2soKSwhMSk6dW5kZWZpbmVkfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT11bmRlZmluZWQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9LHguRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9VOlkpOnRoaXMudHlwZT1lLHQmJnguZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFuZG9dPSEwLHVuZGVmaW5lZCk6bmV3IHguRXZlbnQoZSx0KX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6WSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1VLGUmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9VSxlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1VLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMocixpKSkmJihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmby5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmby5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPW58fHQsdD11bmRlZmluZWQpO2ZvcihzIGluIGUpdGhpcy5vbihzLHQsbixlW3NdLGkpO3JldHVybiB0aGlzfWlmKG51bGw9PW4mJm51bGw9PXI/KHI9dCxuPXQ9dW5kZWZpbmVkKTpudWxsPT1yJiYoInN0cmluZyI9PXR5cGVvZiB0PyhyPW4sbj11bmRlZmluZWQpOihyPW4sbj10LHQ9dW5kZWZpbmVkKSkscj09PSExKXI9WTtlbHNlIGlmKCFyKXJldHVybiB0aGlzO3JldHVybiAxPT09aSYmKG89cixyPWZ1bmN0aW9uKGUpe3JldHVybiB4KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmd1aWQ9by5ndWlkfHwoby5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5hZGQodGhpcyxlLHIsbix0KX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4odD09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkmJihuPXQsdD11bmRlZmluZWQpLG49PT0hMSYmKG49WSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtyZXR1cm4gbj94LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApOnVuZGVmaW5lZH19KTt2YXIgRz0vXi5bXjojXFtcLixdKiQvLEo9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUT14LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LEs9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9eChlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IoO24+ZTtlKyspaWYoeC5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZXQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFldCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmUS50ZXN0KGUpP3goZSk6ZXx8W10sITEpLmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10scz1RLnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDExPm4ubm9kZVR5cGUmJihzP3MuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/Zy5jYWxsKHgoZSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gWihlLHQpe3doaWxlKChlPWVbdF0pJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGVudERvY3VtZW50fHx4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihLW2VdfHx4LnVuaXF1ZShpKSxKLnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT1uIT09dW5kZWZpbmVkO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmeChlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGV0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKEcudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4pO3Q9eC5maWx0ZXIodCxlKX1yZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGcuY2FsbCh0LGUpPj0wIT09bn0pfXZhciB0dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLG50PS88KFtcdzpdKykvLHJ0PS88fCYjP1x3KzsvLGl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksb3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksc3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYXQ9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHV0PS9edHJ1ZVwvKC4qKS8sbHQ9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLGN0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Y3Qub3B0Z3JvdXA9Y3Qub3B0aW9uLGN0LnRib2R5PWN0LnRmb290PWN0LmNvbGdyb3VwPWN0LmNhcHRpb249Y3QudGhlYWQsY3QudGg9Y3QudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11bmRlZmluZWQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1wdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShtdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJmR0KG10KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKGU9PT11bmRlZmluZWQmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFpdC50ZXN0KGUpJiYhY3RbKG50LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZSh0dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7cj5uO24rKyl0PXRoaXNbbl18fHt9LDE9PT10Lm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEobXQodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChpKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1mLmFwcGx5KFtdLGUpO3ZhciByLGksbyxzLGEsdSxsPTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsaD1jLTEsZD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGQpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBkfHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJnN0LnRlc3QoZCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWQuY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihyPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcyksaT1yLmZpcnN0Q2hpbGQsMT09PXIuY2hpbGROb2Rlcy5sZW5ndGgmJihyPWkpLGkpKXtmb3Iobz14Lm1hcChtdChyLCJzY3JpcHQiKSxmdCkscz1vLmxlbmd0aDtjPmw7bCsrKWE9cixsIT09aCYmKGE9eC5jbG9uZShhLCEwLCEwKSxzJiZ4Lm1lcmdlKG8sbXQoYSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1tsXSxhLGwpO2lmKHMpZm9yKHU9b1tvLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKG8saHQpLGw9MDtzPmw7bCsrKWE9b1tsXSxhdC50ZXN0KGEudHlwZXx8IiIpJiYhcS5hY2Nlc3MoYSwiZ2xvYmFsRXZhbCIpJiZ4LmNvbnRhaW5zKHUsYSkmJihhLnNyYz94Ll9ldmFsVXJsKGEuc3JjKTp4Lmdsb2JhbEV2YWwoYS50ZXh0Q29udGVudC5yZXBsYWNlKGx0LCIiKSkpfXJldHVybiB0aGlzfX0pLHguZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlKXt2YXIgbixyPVtdLGk9eChlKSxvPWkubGVuZ3RoLTEscz0wO2Zvcig7bz49cztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLHgoaVtzXSlbdF0obiksaC5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KSx4LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUoITApLHU9eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihzPW10KGEpLG89bXQoZSkscj0wLGk9by5sZW5ndGg7aT5yO3IrKyl5dChvW3JdLHNbcl0pO2lmKHQpaWYobilmb3Iobz1vfHxtdChlKSxzPXN8fG10KGEpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspZ3Qob1tyXSxzW3JdKTtlbHNlIGd0KGUsYSk7cmV0dXJuIHM9bXQoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYmZHQocywhdSYmbXQoZSwic2NyaXB0IikpLGF9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsLGM9MCxwPWUubGVuZ3RoLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1bXTtmb3IoO3A+YztjKyspaWYoaT1lW2NdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09eC50eXBlKGkpKXgubWVyZ2UoaCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKHJ0LnRlc3QoaSkpe289b3x8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShudC5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGE9Y3Rbc118fGN0Ll9kZWZhdWx0LG8uaW5uZXJIVE1MPWFbMV0raS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4iKSthWzJdLGw9YVswXTt3aGlsZShsLS0pbz1vLmxhc3RDaGlsZDt4Lm1lcmdlKGgsby5jaGlsZE5vZGVzKSxvPWYuZmlyc3RDaGlsZCxvLnRleHRDb250ZW50PSIifWVsc2UgaC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoaSkpO2YudGV4dENvbnRlbnQ9IiIsYz0wO3doaWxlKGk9aFtjKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkoaSxyKSkmJih1PXguY29udGFpbnMoaS5vd25lckRvY3VtZW50LGkpLG89bXQoZi5hcHBlbmRDaGlsZChpKSwic2NyaXB0IiksdSYmZHQobyksbikpe2w9MDt3aGlsZShpPW9bbCsrXSlhdC50ZXN0KGkudHlwZXx8IiIpJiZuLnB1c2goaSl9cmV0dXJuIGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT14LmV2ZW50LnNwZWNpYWwsdT0wO2Zvcig7KG49ZVt1XSkhPT11bmRlZmluZWQ7dSsrKXtpZihGLmFjY2VwdHMobikmJihvPW5bcS5leHBhbmRvXSxvJiYodD1xLmNhY2hlW29dKSkpe2lmKHI9T2JqZWN0LmtleXModC5ldmVudHN8fHt9KSxyLmxlbmd0aClmb3Iocz0wOyhpPXJbc10pIT09dW5kZWZpbmVkO3MrKylhW2ldP3guZXZlbnQucmVtb3ZlKG4saSk6eC5yZW1vdmVFdmVudChuLGksdC5oYW5kbGUpO3EuY2FjaGVbb10mJmRlbGV0ZSBxLmNhY2hlW29dfWRlbGV0ZSBMLmNhY2hlW25bTC5leHBhbmRvXV19fSxfZXZhbFVybDpmdW5jdGlvbihlKXtyZXR1cm4geC5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfX0pO2Z1bmN0aW9uIHB0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgxPT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTplfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9dXQuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDtmb3IoO24+cjtyKyspcS5zZXQoZVtyXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbcl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLGksbyxzLGEsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihxLmhhc0RhdGEoZSkmJihvPXEuYWNjZXNzKGUpLHM9cS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMuaGFuZGxlLHMuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO3I+bjtuKyspeC5ldmVudC5hZGQodCxpLGxbaV1bbl0pfUwuaGFzRGF0YShlKSYmKGE9TC5hY2Nlc3MoZSksdT14LmV4dGVuZCh7fSxhKSxMLnNldCh0LHUpKX19ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJngubm9kZU5hbWUoZSx0KT94Lm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHl0KGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZvdC50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX14LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk6KHRoaXNbMF0mJih0PXgoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXguaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIHZ0LHh0LGJ0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx3dD0vXm1hcmdpbi8sVHQ9UmVnRXhwKCJeKCIrYisiKSguKikkIiwiaSIpLEN0PVJlZ0V4cCgiXigiK2IrIikoPyFweClbYS16JV0rJCIsImkiKSxrdD1SZWdFeHAoIl4oWystXSk9KCIrYisiKSIsImkiKSxOdD17Qk9EWToiYmxvY2sifSxFdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sanQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxEdD1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEF0KGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1EdC5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9RHRbaV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX1mdW5jdGlvbiBIdChlLHQpe3ZhciBuLHIsaSxvPVtdLHM9MCxhPWUubGVuZ3RoO2Zvcig7YT5zO3MrKylyPWVbc10sci5zdHlsZSYmKG9bc109cS5nZXQociwib2xkZGlzcGxheSIpLG49ci5zdHlsZS5kaXNwbGF5LHQ/KG9bc118fCJub25lIiE9PW58fChyLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZMdChyKSYmKG9bc109cS5hY2Nlc3Mociwib2xkZGlzcGxheSIsUnQoci5ub2RlTmFtZSkpKSk6b1tzXXx8KGk9THQociksKG4mJiJub25lIiE9PW58fCFpKSYmcS5zZXQociwib2xkZGlzcGxheSIsaT9uOnguY3NzKHIsImRpc3BsYXkiKSkpKTtmb3Iocz0wO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/b1tzXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30scz0wO2lmKHguaXNBcnJheSh0KSl7Zm9yKHI9cXQoZSksaT10Lmxlbmd0aDtpPnM7cysrKW9bdFtzXV09eC5jc3MoZSx0W3NdLCExLHIpO3JldHVybiBvfXJldHVybiBuIT09dW5kZWZpbmVkP3guc3R5bGUoZSx0LG4pOnguY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0x0KHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj12dChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpLHU9ZS5zdHlsZTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdCh1LGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0sbj09PXVuZGVmaW5lZD9zJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITEscikpIT09dW5kZWZpbmVkP2k6dVt0XToobz10eXBlb2Ygbiwic3RyaW5nIj09PW8mJihpPWt0LmV4ZWMobikpJiYobj0oaVsxXSsxKSppWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSx0KSksbz0ibnVtYmVyIiksbnVsbD09bnx8Im51bWJlciI9PT1vJiZpc05hTihuKXx8KCJudW1iZXIiIT09b3x8eC5jc3NOdW1iZXJbYV18fChuKz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KHVbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihuPXMuc2V0KGUsbixyKSk9PT11bmRlZmluZWR8fCh1W3RdPW4pKSx1bmRlZmluZWQpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpO3JldHVybiB0PXguY3NzUHJvcHNbYV18fCh4LmNzc1Byb3BzW2FdPUF0KGUuc3R5bGUsYSkpLHM9eC5jc3NIb29rc1t0XXx8eC5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLGk9PT11bmRlZmluZWQmJihpPXZ0KGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFN0JiYoaT1TdFt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksbj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmkpOml9fSksdnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPW58fHF0KGUpLGE9cz9zLmdldFByb3BlcnR5VmFsdWUodCl8fHNbdF06dW5kZWZpbmVkLHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09YXx8eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXguc3R5bGUoZSx0KSksQ3QudGVzdChhKSYmd3QudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1zLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWksdS5tYXhXaWR0aD1vKSksYX07ZnVuY3Rpb24gT3QoZSx0LG4pe3ZhciByPVR0LmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gRnQoZSx0LG4scixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxzPTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihzKz14LmNzcyhlLG4ranRbb10sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJihzLT14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk6KHMrPXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz14LmNzcyhlLCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gc31mdW5jdGlvbiBQdChlLHQsbil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LG89cXQoZSkscz14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9dnQoZSx0LG8pLCgwPml8fG51bGw9PWkpJiYoaT1lLnN0eWxlW3RdKSxDdC50ZXN0KGkpKXJldHVybiBpO3I9cyYmKHguc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8MH1yZXR1cm4gaStGdChlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVuY3Rpb24gUnQoZSl7dmFyIHQ9byxuPU50W2VdO3JldHVybiBufHwobj1NdChlLHQpLCJub25lIiE9PW4mJm58fCh4dD0oeHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8odC5kb2N1bWVudEVsZW1lbnQpLHQ9KHh0WzBdLmNvbnRlbnRXaW5kb3d8fHh0WzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksdC5jbG9zZSgpLG49TXQoZSx0KSx4dC5kZXRhY2goKSksTnRbZV09biksbn1mdW5jdGlvbiBNdChlLHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9eC5jc3MoblswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIG4/MD09PWUub2Zmc2V0V2lkdGgmJmJ0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIpKT94LnN3YXAoZSxFdCxmdW5jdGlvbigpe3JldHVybiBQdChlLHQscil9KTpQdChlLHQscik6dW5kZWZpbmVkfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnF0KGUpO3JldHVybiBPdChlLG4scj9GdChlLHQscix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdnQsW2UsIm1hcmdpblJpZ2h0Il0pOnVuZGVmaW5lZH19KSwheC5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnguZm4ucG9zaXRpb24mJnguZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPXZ0KGUsdCksQ3QudGVzdChuKT94KGUpLnBvc2l0aW9uKClbdF0rInB4IjpuKTp1bmRlZmluZWR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0aCYmMD49ZS5vZmZzZXRIZWlnaHR9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStqdFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSx3dC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1PdCl9KTt2YXIgV3Q9LyUyMC9nLCR0PS9cW1xdJC8sQnQ9L1xyP1xuL2csSXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLHp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmenQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUl0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFvdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEJ0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShCdCwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LHJbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZih0PT09dW5kZWZpbmVkJiYodD14LmFqYXhTZXR0aW5ncyYmeC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLHguaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF4LmlzUGxhaW5PYmplY3QoZSkpeC5lYWNoKGUsZnVuY3Rpb24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlfdChuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIikucmVwbGFjZShXdCwiKyIpfTtmdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaTtpZih4LmlzQXJyYXkodCkpeC5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHwkdC50ZXN0KGUpP3IoZSxpKTpfdChlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKG58fCJvYmplY3QiIT09eC50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpX3QoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXguZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLHguZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCkKK30sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KTt2YXIgWHQsVXQsWXQ9eC5ub3coKSxWdD0vXD8vLEd0PS8jLiokLyxKdD0vKFs/Jl0pXz1bXiZdKi8sUXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxLdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxadD0vXig/OkdFVHxIRUFEKSQvLGVuPS9eXC9cLy8sdG49L14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLG5uPXguZm4ubG9hZCxybj17fSxvbj17fSxzbj0iKi8iLmNvbmNhdCgiKiIpO3RyeXtVdD1pLmhyZWZ9Y2F0Y2goYW4pe1V0PW8uY3JlYXRlRWxlbWVudCgiYSIpLFV0LmhyZWY9IiIsVXQ9VXQuaHJlZn1YdD10bi5leGVjKFV0LnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiB1bihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iKiIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8W107aWYoeC5pc0Z1bmN0aW9uKG4pKXdoaWxlKHI9b1tpKytdKSIrIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8IioiLChlW3JdPWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24gbG4oZSx0LG4scil7dmFyIGk9e30sbz1lPT09b247ZnVuY3Rpb24gcyhhKXt2YXIgdTtyZXR1cm4gaVthXT0hMCx4LmVhY2goZVthXXx8W10sZnVuY3Rpb24oZSxhKXt2YXIgbD1hKHQsbixyKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGx8fG98fGlbbF0/bz8hKHU9bCk6dW5kZWZpbmVkOih0LmRhdGFUeXBlcy51bnNoaWZ0KGwpLHMobCksITEpfSksdX1yZXR1cm4gcyh0LmRhdGFUeXBlc1swXSl8fCFpWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBjbihlLHQpe3ZhciBuLHIsaT14LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl0W25dIT09dW5kZWZpbmVkJiYoKGlbbl0/ZTpyfHwocj17fSkpW25dPXRbbl0pO3JldHVybiByJiZ4LmV4dGVuZCghMCxlLHIpLGV9eC5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJm5uKXJldHVybiBubi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHIsaSxvLHM9dGhpcyxhPWUuaW5kZXhPZigiICIpO3JldHVybiBhPj0wJiYocj1lLnNsaWNlKGEpLGU9ZS5zbGljZSgwLGEpKSx4LmlzRnVuY3Rpb24odCk/KG49dCx0PXVuZGVmaW5lZCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLHMubGVuZ3RoPjAmJnguYWpheCh7dXJsOmUsdHlwZTppLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHMuaHRtbChyP3goIjxkaXY+IikuYXBwZW5kKHgucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuY29tcGxldGUobiYmZnVuY3Rpb24oZSx0KXtzLmVhY2gobixvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KSx0aGlzfSx4LmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx4LmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VXQsdHlwZToiR0VUIixpc0xvY2FsOkt0LnRlc3QoWHRbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6c24sdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjp4LnBhcnNlSlNPTiwidGV4dCB4bWwiOngucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P2NuKGNuKGUseC5hamF4U2V0dGluZ3MpLHQpOmNuKHguYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOnVuKHJuKSxhamF4VHJhbnNwb3J0OnVuKG9uKSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVkKSx0PXR8fHt9O3ZhciBuLHIsaSxvLHMsYSx1LGwsYz14LmFqYXhTZXR1cCh7fSx0KSxwPWMuY29udGV4dHx8YyxmPWMuY29udGV4dCYmKHAubm9kZVR5cGV8fHAuanF1ZXJ5KT94KHApOnguZXZlbnQsaD14LkRlZmVycmVkKCksZD14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29kZXx8e30sbT17fSx5PXt9LHY9MCxiPSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT12KXtpZighbyl7bz17fTt3aGlsZSh0PVF0LmV4ZWMoaSkpb1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1vW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXY/aTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB2fHwoZT15W25dPXlbbl18fGUsbVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiB2fHwoYy5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj52KWZvcih0IGluIGUpZ1t0XT1bZ1t0XSxlW3RdXTtlbHNlIFQuYWx3YXlzKGVbVC5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8YjtyZXR1cm4gbiYmbi5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKGgucHJvbWlzZShUKS5jb21wbGV0ZT1kLmFkZCxULnN1Y2Nlc3M9VC5kb25lLFQuZXJyb3I9VC5mYWlsLGMudXJsPSgoZXx8Yy51cmx8fFV0KSsiIikucmVwbGFjZShHdCwiIikucmVwbGFjZShlbixYdFsxXSsiLy8iKSxjLnR5cGU9dC5tZXRob2R8fHQudHlwZXx8Yy5tZXRob2R8fGMudHlwZSxjLmRhdGFUeXBlcz14LnRyaW0oYy5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbIiJdLG51bGw9PWMuY3Jvc3NEb21haW4mJihhPXRuLmV4ZWMoYy51cmwudG9Mb3dlckNhc2UoKSksYy5jcm9zc0RvbWFpbj0hKCFhfHxhWzFdPT09WHRbMV0mJmFbMl09PT1YdFsyXSYmKGFbM118fCgiaHR0cDoiPT09YVsxXT8iODAiOiI0NDMiKSk9PT0oWHRbM118fCgiaHR0cDoiPT09WHRbMV0/IjgwIjoiNDQzIikpKSksYy5kYXRhJiZjLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGMuZGF0YSYmKGMuZGF0YT14LnBhcmFtKGMuZGF0YSxjLnRyYWRpdGlvbmFsKSksbG4ocm4sYyx0LFQpLDI9PT12KXJldHVybiBUO3U9Yy5nbG9iYWwsdSYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IiksYy50eXBlPWMudHlwZS50b1VwcGVyQ2FzZSgpLGMuaGFzQ29udGVudD0hWnQudGVzdChjLnR5cGUpLHI9Yy51cmwsYy5oYXNDb250ZW50fHwoYy5kYXRhJiYocj1jLnVybCs9KFZ0LnRlc3Qocik/IiYiOiI/IikrYy5kYXRhLGRlbGV0ZSBjLmRhdGEpLGMuY2FjaGU9PT0hMSYmKGMudXJsPUp0LnRlc3Qocik/ci5yZXBsYWNlKEp0LCIkMV89IitZdCsrKTpyKyhWdC50ZXN0KHIpPyImIjoiPyIpKyJfPSIrWXQrKykpLGMuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtyXSkseC5ldGFnW3JdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tyXSkpLChjLmRhdGEmJmMuaGFzQ29udGVudCYmYy5jb250ZW50VHlwZSE9PSExfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGMuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixjLmRhdGFUeXBlc1swXSYmYy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXT9jLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dKygiKiIhPT1jLmRhdGFUeXBlc1swXT8iLCAiK3NuKyI7IHE9MC4wMSI6IiIpOmMuYWNjZXB0c1siKiJdKTtmb3IobCBpbiBjLmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGwsYy5oZWFkZXJzW2xdKTtpZihjLmJlZm9yZVNlbmQmJihjLmJlZm9yZVNlbmQuY2FsbChwLFQsYyk9PT0hMXx8Mj09PXYpKXJldHVybiBULmFib3J0KCk7Yj0iYWJvcnQiO2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KVRbbF0oY1tsXSk7aWYobj1sbihvbixjLHQsVCkpe1QucmVhZHlTdGF0ZT0xLHUmJmYudHJpZ2dlcigiYWpheFNlbmQiLFtULGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe1QuYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e3Y9MSxuLnNlbmQobSxrKX1jYXRjaChDKXtpZighKDI+dikpdGhyb3cgQztrKC0xLEMpfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsoZSx0LG8sYSl7dmFyIGwsbSx5LGIsdyxDPXQ7MiE9PXYmJih2PTIscyYmY2xlYXJUaW1lb3V0KHMpLG49dW5kZWZpbmVkLGk9YXx8IiIsVC5yZWFkeVN0YXRlPWU+MD80OjAsbD1lPj0yMDAmJjMwMD5lfHwzMDQ9PT1lLG8mJihiPXBuKGMsVCxvKSksYj1mbihjLGIsVCxsKSxsPyhjLmlmTW9kaWZpZWQmJih3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYoeC5sYXN0TW9kaWZpZWRbcl09dyksdz1ULmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKHguZXRhZ1tyXT13KSksMjA0PT09ZXx8IkhFQUQiPT09Yy50eXBlP0M9Im5vY29udGVudCI6MzA0PT09ZT9DPSJub3Rtb2RpZmllZCI6KEM9Yi5zdGF0ZSxtPWIuZGF0YSx5PWIuZXJyb3IsbD0heSkpOih5PUMsKGV8fCFDKSYmKEM9ImVycm9yIiwwPmUmJihlPTApKSksVC5zdGF0dXM9ZSxULnN0YXR1c1RleHQ9KHR8fEMpKyIiLGw/aC5yZXNvbHZlV2l0aChwLFttLEMsVF0pOmgucmVqZWN0V2l0aChwLFtULEMseV0pLFQuc3RhdHVzQ29kZShnKSxnPXVuZGVmaW5lZCx1JiZmLnRyaWdnZXIobD8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtULGMsbD9tOnldKSxkLmZpcmVXaXRoKHAsW1QsQ10pLHUmJihmLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW1QsY10pLC0teC5hY3RpdmV8fHguZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBUfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZ2V0KGUsdW5kZWZpbmVkLHQsInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLHQpe3hbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIHguaXNGdW5jdGlvbihuKSYmKGk9aXx8cixyPW4sbj11bmRlZmluZWQpLHguYWpheCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0pfX0pO2Z1bmN0aW9uIHBuKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSxyPT09dW5kZWZpbmVkJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBhKWlmKGFbaV0mJmFbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31zfHwocz1pKX1vPW98fHN9cmV0dXJuIG8/KG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXSk6dW5kZWZpbmVkfWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IocyBpbiBlLmNvbnZlcnRlcnMpbFtzLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1tzXTtvPWMuc2hpZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCF1JiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSx1PW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPXU7ZWxzZSBpZigiKiIhPT11JiZ1IT09byl7aWYocz1sW3UrIiAiK29dfHxsWyIqICIrb10sIXMpZm9yKGkgaW4gbClpZihhPWkuc3BsaXQoIiAiKSxhWzFdPT09byYmKHM9bFt1KyIgIithWzBdXXx8bFsiKiAiK2FbMF1dKSl7cz09PSEwP3M9bFtpXTpsW2ldIT09ITAmJihvPWFbMF0sYy51bnNoaWZ0KGFbMV0pKTticmVha31pZihzIT09ITApaWYocyYmZVsidGhyb3dzIl0pdD1zKHQpO2Vsc2UgdHJ5e3Q9cyh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpzP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAiK299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dW5kZWZpbmVkJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSx4LmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIHQsbjtyZXR1cm57c2VuZDpmdW5jdGlvbihyLGkpe3Q9eCgiPHNjcmlwdD4iKS5wcm9wKHthc3luYzohMCxjaGFyc2V0OmUuc2NyaXB0Q2hhcnNldCxzcmM6ZS51cmx9KS5vbigibG9hZCBlcnJvciIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZpKCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksby5oZWFkLmFwcGVuZENoaWxkKHRbMF0pfSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fX0pO3ZhciBobj1bXSxkbj0vKD0pXD8oPz0mfCQpfFw/XD8vO3guYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1obi5wb3AoKXx8eC5leHBhbmRvKyJfIitZdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSkseC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbih0LG4scil7dmFyIGksbyxzLGE9dC5qc29ucCE9PSExJiYoZG4udGVzdCh0LnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiB0LmRhdGEmJiEodC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZkbi50ZXN0KHQuZGF0YSkmJiJkYXRhIik7cmV0dXJuIGF8fCJqc29ucCI9PT10LmRhdGFUeXBlc1swXT8oaT10Lmpzb25wQ2FsbGJhY2s9eC5pc0Z1bmN0aW9uKHQuanNvbnBDYWxsYmFjayk/dC5qc29ucENhbGxiYWNrKCk6dC5qc29ucENhbGxiYWNrLGE/dFthXT10W2FdLnJlcGxhY2UoZG4sIiQxIitpKTp0Lmpzb25wIT09ITEmJih0LnVybCs9KFZ0LnRlc3QodC51cmwpPyImIjoiPyIpK3QuanNvbnArIj0iK2kpLHQuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBzfHx4LmVycm9yKGkrIiB3YXMgbm90IGNhbGxlZCIpLHNbMF19LHQuZGF0YVR5cGVzWzBdPSJqc29uIixvPWVbaV0sZVtpXT1mdW5jdGlvbigpe3M9YXJndW1lbnRzfSxyLmFsd2F5cyhmdW5jdGlvbigpe2VbaV09byx0W2ldJiYodC5qc29ucENhbGxiYWNrPW4uanNvbnBDYWxsYmFjayxobi5wdXNoKGkpKSxzJiZ4LmlzRnVuY3Rpb24obykmJm8oc1swXSkscz1vPXVuZGVmaW5lZH0pLCJzY3JpcHQiKTp1bmRlZmluZWR9KSx4LmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgZ249eC5hamF4U2V0dGluZ3MueGhyKCksbW49ezA6MjAwLDEyMjM6MjA0fSx5bj0wLHZuPXt9O2UuQWN0aXZlWE9iamVjdCYmeChlKS5vbigidW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB2bil2bltlXSgpO3ZuPXVuZGVmaW5lZH0pLHguc3VwcG9ydC5jb3JzPSEhZ24mJiJ3aXRoQ3JlZGVudGlhbHMiaW4gZ24seC5zdXBwb3J0LmFqYXg9Z249ISFnbix4LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHguc3VwcG9ydC5jb3JzfHxnbiYmIWUuY3Jvc3NEb21haW4/e3NlbmQ6ZnVuY3Rpb24obixyKXt2YXIgaSxvLHM9ZS54aHIoKTtpZihzLm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKSxlLnhockZpZWxkcylmb3IoaSBpbiBlLnhockZpZWxkcylzW2ldPWUueGhyRmllbGRzW2ldO2UubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKGUubWltZVR5cGUpLGUuY3Jvc3NEb21haW58fG5bIlgtUmVxdWVzdGVkLVdpdGgiXXx8KG5bIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoaSBpbiBuKXMuc2V0UmVxdWVzdEhlYWRlcihpLG5baV0pO3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dCYmKGRlbGV0ZSB2bltvXSx0PXMub25sb2FkPXMub25lcnJvcj1udWxsLCJhYm9ydCI9PT1lP3MuYWJvcnQoKToiZXJyb3IiPT09ZT9yKHMuc3RhdHVzfHw0MDQscy5zdGF0dXNUZXh0KTpyKG1uW3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJzdHJpbmciPT10eXBlb2Ygcy5yZXNwb25zZVRleHQ/e3RleHQ6cy5yZXNwb25zZVRleHR9OnVuZGVmaW5lZCxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD10KCkscy5vbmVycm9yPXQoImVycm9yIiksdD12bltvPXluKytdPXQoImFib3J0Iikscy5zZW5kKGUuaGFzQ29udGVudCYmZS5kYXRhfHxudWxsKX0sYWJvcnQ6ZnVuY3Rpb24oKXt0JiZ0KCl9fTp1bmRlZmluZWR9KTt2YXIgeG4sYm4sd249L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFRuPVJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2IrIikoW2EteiVdKikkIiwiaSIpLENuPS9xdWV1ZUhvb2tzJC8sa249W0FuXSxObj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KSxyPW4uY3VyKCksaT1Ubi5leGVjKHQpLG89aSYmaVszXXx8KHguY3NzTnVtYmVyW2VdPyIiOiJweCIpLHM9KHguY3NzTnVtYmVyW2VdfHwicHgiIT09byYmK3IpJiZUbi5leGVjKHguY3NzKG4uZWxlbSxlKSksYT0xLHU9MjA7aWYocyYmc1szXSE9PW8pe289b3x8c1szXSxpPWl8fFtdLHM9K3J8fDE7ZG8gYT1hfHwiLjUiLHMvPWEseC5zdHlsZShuLmVsZW0sZSxzK28pO3doaWxlKGEhPT0oYT1uLmN1cigpL3IpJiYxIT09YSYmLS11KX1yZXR1cm4gaSYmKHM9bi5zdGFydD0rc3x8K3J8fDAsbi51bml0PW8sbi5lbmQ9aVsxXT9zKyhpWzFdKzEpKmlbMl06K2lbMl0pLG59XX07ZnVuY3Rpb24gRW4oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3huPXVuZGVmaW5lZH0pLHhuPXgubm93KCl9ZnVuY3Rpb24gU24oZSx0LG4pe3ZhciByLGk9KE5uW3RdfHxbXSkuY29uY2F0KE5uWyIqIl0pLG89MCxzPWkubGVuZ3RoO2Zvcig7cz5vO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gam4oZSx0LG4pe3ZhciByLGksbz0wLHM9a24ubGVuZ3RoLGE9eC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTt2YXIgdD14bnx8RW4oKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPW4vbC5kdXJhdGlvbnx8MCxvPTEtcixzPTAsdT1sLnR3ZWVucy5sZW5ndGg7Zm9yKDt1PnM7cysrKWwudHdlZW5zW3NdLnJ1bihvKTtyZXR1cm4gYS5ub3RpZnlXaXRoKGUsW2wsbyxuXSksMT5vJiZ1P246KGEucmVzb2x2ZVdpdGgoZSxbbF0pLCExKX0sbD1hLnByb21pc2Uoe2VsZW06ZSxwcm9wczp4LmV4dGVuZCh7fSx0KSxvcHRzOnguZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6eG58fEVuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj14LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P2EucmVzb2x2ZVdpdGgoZSxbbCx0XSk6YS5yZWplY3RXaXRoKGUsW2wsdF0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcihEbihjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtzPm87bysrKWlmKHI9a25bb10uY2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiByO3JldHVybiB4Lm1hcChjLFNuLGwpLHguaXNGdW5jdGlvbihsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChlLGwpLHguZngudGltZXIoeC5leHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gRG4oZSx0KXt2YXIgbixyLGksbyxzO2ZvcihuIGluIGUpaWYocj14LmNhbWVsQ2FzZShuKSxpPXRbcl0sbz1lW25dLHguaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLHM9eC5jc3NIb29rc1tyXSxzJiYiZXhwYW5kImluIHMpe289cy5leHBhbmQobyksZGVsZXRlIGVbcl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX14LkFuaW1hdGlvbj14LmV4dGVuZChqbix7dHdlZW5lcjpmdW5jdGlvbihlLHQpe3guaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxpPWUubGVuZ3RoO2Zvcig7aT5yO3IrKyluPWVbcl0sTm5bbl09Tm5bbl18fFtdLE5uW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/a24udW5zaGlmdChlKTprbi5wdXNoKGUpfX0pO2Z1bmN0aW9uIEFuKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbD10aGlzLGM9e30scD1lLnN0eWxlLGY9ZS5ub2RlVHlwZSYmTHQoZSksaD1xLmdldChlLCJmeHNob3ciKTtuLnF1ZXVlfHwoYT14Ll9xdWV1ZUhvb2tzKGUsImZ4IiksbnVsbD09YS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCx1PWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHx1KCl9KSxhLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx4LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1lLm5vZGVUeXBlJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSwiaW5saW5lIj09PXguY3NzKGUsImRpc3BsYXkiKSYmIm5vbmUiPT09eC5jc3MoZSwiZmxvYXQiKSYmKHAuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLGwuYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSx3bi5leGVjKGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGY/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCFofHxoW3JdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Y9ITB9Y1tyXT1oJiZoW3JdfHx4LnN0eWxlKGUscil9aWYoIXguaXNFbXB0eU9iamVjdChjKSl7aD8iaGlkZGVuImluIGgmJihmPWguaGlkZGVuKTpoPXEuYWNjZXNzKGUsImZ4c2hvdyIse30pLG8mJihoLmhpZGRlbj0hZiksZj94KGUpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXt4KGUpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciB0O3EucmVtb3ZlKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBjKXM9U24oZj9oW3JdOjAscixsKSxyIGluIGh8fChoW3JdPXMuc3RhcnQsZiYmKHMuZW5kPXMuc3RhcnQscy5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBMbihlLHQsbixyLGkpe3JldHVybiBuZXcgTG4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVuPUxuLExuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TG4saW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49TG4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6TG4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sTG4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUxuLnByb3RvdHlwZSxMbi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LExuLnByb3BIb29rcy5zY3JvbGxUb3A9TG4ucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKHFuKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihMdCkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4scikscz1mdW5jdGlvbigpe3ZhciB0PWpuKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHEuZ2V0KHRoaXMsImZpbmlzaCIpKSYmdC5zdG9wKCEwKX07cmV0dXJuIHMuZmluaXNoPXMsaXx8by5xdWV1ZT09PSExP3RoaXMuZWFjaChzKTp0aGlzLnF1ZXVlKG8ucXVldWUscyl9LHN0b3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQobil9O3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49dCx0PWUsZT11bmRlZmluZWQpLHQmJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxpPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMscz1xLmdldCh0aGlzKTtpZihpKXNbaV0mJnNbaV0uc3RvcCYmcihzW2ldKTtlbHNlIGZvcihpIGluIHMpc1tpXSYmc1tpXS5zdG9wJiZDbi50ZXN0KGkpJiZyKHNbaV0pO2ZvcihpPW8ubGVuZ3RoO2ktLTspb1tpXS5lbGVtIT09dGhpc3x8bnVsbCE9ZSYmb1tpXS5xdWV1ZSE9PWV8fChvW2ldLmFuaW0uc3RvcChuKSx0PSExLG8uc3BsaWNlKGksMSkpOyh0fHwhbikmJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4gZSE9PSExJiYoZT1lfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPXEuZ2V0KHRoaXMpLHI9bltlKyJxdWV1ZSJdLGk9bltlKyJxdWV1ZUhvb2tzIl0sbz14LnRpbWVycyxzPXI/ci5sZW5ndGg6MDtmb3Iobi5maW5pc2g9ITAseC5xdWV1ZSh0aGlzLGUsW10pLGkmJmkuc3RvcCYmaS5zdG9wLmNhbGwodGhpcywhMCksdD1vLmxlbmd0aDt0LS07KW9bdF0uZWxlbT09PXRoaXMmJm9bdF0ucXVldWU9PT1lJiYob1t0XS5hbmltLnN0b3AoITApLG8uc3BsaWNlKHQsMSkpO2Zvcih0PTA7cz50O3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0XS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgbi5maW5pc2h9KX19KTtmdW5jdGlvbiBxbihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7Zm9yKHQ9dD8xOjA7ND5pO2krPTItdCluPWp0W2ldLHJbIm1hcmdpbiIrbl09clsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKHIub3BhY2l0eT1yLndpZHRoPWUpLHJ9eC5lYWNoKHtzbGlkZURvd246cW4oInNob3ciKSxzbGlkZVVwOnFuKCJoaWRlIiksc2xpZGVUb2dnbGU6cW4oInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHguc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT94LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fHguaXNGdW5jdGlvbihlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYheC5pc0Z1bmN0aW9uKHQpJiZ0fTtyZXR1cm4gci5kdXJhdGlvbj14LmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2Ygci5kdXJhdGlvbj9yLmR1cmF0aW9uOnIuZHVyYXRpb24gaW4geC5meC5zcGVlZHM/eC5meC5zcGVlZHNbci5kdXJhdGlvbl06eC5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PXIucXVldWV8fHIucXVldWU9PT0hMCkmJihyLnF1ZXVlPSJmeCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3guaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmeC5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHguZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LHgudGltZXJzPVtdLHguZng9TG4ucHJvdG90eXBlLmluaXQseC5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD14LnRpbWVycyxuPTA7Zm9yKHhuPXgubm93KCk7dC5sZW5ndGg+bjtuKyspZT10W25dLGUoKXx8dFtuXSE9PWV8fHQuc3BsaWNlKG4tLSwxKTt0Lmxlbmd0aHx8eC5meC5zdG9wKCkseG49dW5kZWZpbmVkfSx4LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmeC50aW1lcnMucHVzaChlKSYmeC5meC5zdGFydCgpfSx4LmZ4LmludGVydmFsPTEzLHguZnguc3RhcnQ9ZnVuY3Rpb24oKXtibnx8KGJuPXNldEludGVydmFsKHguZngudGljayx4LmZ4LmludGVydmFsKSl9LHguZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoYm4pLGJuPW51bGx9LHguZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHguZnguc3RlcD17fSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ3JlcCh4LnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pLHguZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciB0LG4saT10aGlzWzBdLG89e3RvcDowLGxlZnQ6MH0scz1pJiZpLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1cm4gdD1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKHQsaSk/KHR5cGVvZiBpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PXImJihvPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLG49SG4ocykse3RvcDpvLnRvcCtuLnBhZ2VZT2Zmc2V0LXQuY2xpZW50VG9wLGxlZnQ6by5sZWZ0K24ucGFnZVhPZmZzZXQtdC5jbGllbnRMZWZ0fSk6b30seC5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYz14LmNzcyhlLCJwb3NpdGlvbiIpLHA9eChlKSxmPXt9OyJzdGF0aWMiPT09YyYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksYT1wLm9mZnNldCgpLG89eC5jc3MoZSwidG9wIiksdT14LmNzcyhlLCJsZWZ0IiksbD0oImFic29sdXRlIj09PWN8fCJmaXhlZCI9PT1jKSYmKG8rdSkuaW5kZXhPZigiYXV0byIpPi0xLGw/KHI9cC5wb3NpdGlvbigpLHM9ci50b3AsaT1yLmxlZnQpOihzPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sYSkpLG51bGwhPXQudG9wJiYoZi50b3A9dC50b3AtYS50b3ArcyksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1hLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6cC5jc3MoZil9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49dGhpc1swXSxyPXt0b3A6MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT14LmNzcyhuLCJwb3NpdGlvbiIpP3Q9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KHI9ZS5vZmZzZXQoKSksci50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksci5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1yLnRvcC14LmNzcyhuLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1yLmxlZnQteC5jc3MobiwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24odCxuKXt2YXIgcj0icGFnZVlPZmZzZXQiPT09bjt4LmZuW3RdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsaSxvKXt2YXIgcz1Ibih0KTtyZXR1cm4gbz09PXVuZGVmaW5lZD9zP3Nbbl06dFtpXToocz9zLnNjcm9sbFRvKHI/ZS5wYWdlWE9mZnNldDpvLHI/bzplLnBhZ2VZT2Zmc2V0KTp0W2ldPW8sdW5kZWZpbmVkKX0sdCxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSk7ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHguaXNXaW5kb3coZSk/ZTo5PT09ZS5ub2RlVHlwZSYmZS5kZWZhdWx0Vmlld314LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe3guZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDp0LCIiOiJvdXRlciIrZX0sZnVuY3Rpb24obixyKXt4LmZuW3JdPWZ1bmN0aW9uKHIsaSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aCYmKG58fCJib29sZWFuIiE9dHlwZW9mIHIpLHM9bnx8KHI9PT0hMHx8aT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0LG4scil7dmFyIGk7cmV0dXJuIHguaXNXaW5kb3codCk/dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09PXQubm9kZVR5cGU/KGk9dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwiK2VdLGlbInNjcm9sbCIrZV0sdC5ib2R5WyJvZmZzZXQiK2VdLGlbIm9mZnNldCIrZV0saVsiY2xpZW50IitlXSkpOnI9PT11bmRlZmluZWQ/eC5jc3ModCxuLHMpOnguc3R5bGUodCxuLHIscyl9LHQsbz9yOnVuZGVmaW5lZCxvLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9eDoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4geH0pLCJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiBlLmRvY3VtZW50JiYoZS5qUXVlcnk9ZS4kPXgpfSkod2luZG93KTsKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LTIuMC4zLm1pbi5tYXAgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4ubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZGVjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2pxdWVyeS0yLjAuMy5taW4ubWFwCkBAIC0wLDAgKzEgQEAKK3sidmVyc2lvbiI6MywiZmlsZSI6ImpxdWVyeS0yLjAuMy5taW4uanMiLCJzb3VyY2VzIjpbImpxdWVyeS0yLjAuMy5qcyJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJ1bmRlZmluZWQiLCJyb290alF1ZXJ5IiwicmVhZHlMaXN0IiwiY29yZV9zdHJ1bmRlZmluZWQiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiZG9jRWxlbSIsImRvY3VtZW50RWxlbWVudCIsIl9qUXVlcnkiLCJqUXVlcnkiLCJfJCIsIiQiLCJjbGFzczJ0eXBlIiwiY29yZV9kZWxldGVkSWRzIiwiY29yZV92ZXJzaW9uIiwiY29yZV9jb25jYXQiLCJjb25jYXQiLCJjb3JlX3B1c2giLCJwdXNoIiwiY29yZV9zbGljZSIsInNsaWNlIiwiY29yZV9pbmRleE9mIiwiaW5kZXhPZiIsImNvcmVfdG9TdHJpbmciLCJ0b1N0cmluZyIsImNvcmVfaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjb3JlX3RyaW0iLCJ0cmltIiwic2VsZWN0b3IiLCJjb250ZXh0IiwiZm4iLCJpbml0IiwiY29yZV9wbnVtIiwic291cmNlIiwiY29yZV9ybm90d2hpdGUiLCJycXVpY2tFeHByIiwicnNpbmdsZVRhZyIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiYWxsIiwibGV0dGVyIiwidG9VcHBlckNhc2UiLCJjb21wbGV0ZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVhZHkiLCJwcm90b3R5cGUiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsIm1hdGNoIiwiZWxlbSIsInRoaXMiLCJjaGFyQXQiLCJsZW5ndGgiLCJleGVjIiwiZmluZCIsIm1lcmdlIiwicGFyc2VIVE1MIiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50IiwidGVzdCIsImlzUGxhaW5PYmplY3QiLCJpc0Z1bmN0aW9uIiwiYXR0ciIsImdldEVsZW1lbnRCeUlkIiwicGFyZW50Tm9kZSIsIm1ha2VBcnJheSIsInRvQXJyYXkiLCJjYWxsIiwiZ2V0IiwibnVtIiwicHVzaFN0YWNrIiwiZWxlbXMiLCJyZXQiLCJwcmV2T2JqZWN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJncyIsInByb21pc2UiLCJkb25lIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImkiLCJsZW4iLCJqIiwibWFwIiwiZW5kIiwic29ydCIsInNwbGljZSIsImV4dGVuZCIsIm9wdGlvbnMiLCJuYW1lIiwic3JjIiwiY29weSIsImNvcHlJc0FycmF5IiwiY2xvbmUiLCJ0YXJnZXQiLCJkZWVwIiwiaXNBcnJheSIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsIm5vQ29uZmxpY3QiLCJpc1JlYWR5IiwicmVhZHlXYWl0IiwiaG9sZFJlYWR5IiwiaG9sZCIsIndhaXQiLCJyZXNvbHZlV2l0aCIsInRyaWdnZXIiLCJvZmYiLCJvYmoiLCJ0eXBlIiwiQXJyYXkiLCJpc1dpbmRvdyIsImlzTnVtZXJpYyIsImlzTmFOIiwicGFyc2VGbG9hdCIsImlzRmluaXRlIiwiU3RyaW5nIiwiZSIsImlzRW1wdHlPYmplY3QiLCJlcnJvciIsIm1zZyIsIkVycm9yIiwiZGF0YSIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwic2NyaXB0cyIsImNyZWF0ZUVsZW1lbnQiLCJidWlsZEZyYWdtZW50IiwicmVtb3ZlIiwiY2hpbGROb2RlcyIsInBhcnNlSlNPTiIsIkpTT04iLCJwYXJzZSIsInBhcnNlWE1MIiwieG1sIiwidG1wIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJub29wIiwiZ2xvYmFsRXZhbCIsImNvZGUiLCJzY3JpcHQiLCJpbmRpcmVjdCIsImV2YWwiLCJ0ZXh0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjYW1lbENhc2UiLCJzdHJpbmciLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwidmFsdWUiLCJpc0FycmF5bGlrZSIsImFyciIsInJlc3VsdHMiLCJPYmplY3QiLCJpbkFycmF5Iiwic2Vjb25kIiwibCIsImdyZXAiLCJpbnYiLCJyZXRWYWwiLCJhcmciLCJndWlkIiwicHJveHkiLCJhY2Nlc3MiLCJrZXkiLCJjaGFpbmFibGUiLCJlbXB0eUdldCIsInJhdyIsImJ1bGsiLCJub3ciLCJEYXRlIiwic3dhcCIsIm9sZCIsInN0eWxlIiwiRGVmZXJyZWQiLCJyZWFkeVN0YXRlIiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzcGxpdCIsInN1cHBvcnQiLCJjYWNoZWRydW5zIiwiRXhwciIsImdldFRleHQiLCJpc1hNTCIsImNvbXBpbGUiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0Iiwic2V0RG9jdW1lbnQiLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsInJidWdneU1hdGNoZXMiLCJtYXRjaGVzIiwiY29udGFpbnMiLCJwcmVmZXJyZWREb2MiLCJkaXJydW5zIiwiY2xhc3NDYWNoZSIsImNyZWF0ZUNhY2hlIiwidG9rZW5DYWNoZSIsImNvbXBpbGVyQ2FjaGUiLCJoYXNEdXBsaWNhdGUiLCJzb3J0T3JkZXIiLCJhIiwiYiIsInN0cnVuZGVmaW5lZCIsIk1BWF9ORUdBVElWRSIsImhhc093biIsInBvcCIsInB1c2hfbmF0aXZlIiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiY2hhcmFjdGVyRW5jb2RpbmciLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJydHJpbSIsIlJlZ0V4cCIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJzaWJsaW5nIiwicmF0dHJpYnV0ZVF1b3RlcyIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsIklEIiwiQ0xBU1MiLCJUQUciLCJBVFRSIiwiUFNFVURPIiwiQ0hJTEQiLCJib29sIiwibmVlZHNDb250ZXh0Iiwicm5hdGl2ZSIsInJpbnB1dHMiLCJyaGVhZGVyIiwicmVzY2FwZSIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsIl8iLCJlc2NhcGVkIiwiZXNjYXBlZFdoaXRlc3BhY2UiLCJoaWdoIiwiZnJvbUNoYXJDb2RlIiwiZWxzIiwiU2l6emxlIiwic2VlZCIsIm0iLCJncm91cHMiLCJuaWQiLCJuZXdDb250ZXh0IiwibmV3U2VsZWN0b3IiLCJpZCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJ0b2tlbml6ZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInRvU2VsZWN0b3IiLCJqb2luIiwicXVlcnlTZWxlY3RvckFsbCIsInFzYUVycm9yIiwicmVtb3ZlQXR0cmlidXRlIiwic2VsZWN0Iiwia2V5cyIsImNhY2hlIiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImRpdiIsImFkZEhhbmRsZSIsImF0dHJzIiwiaGFuZGxlciIsImF0dHJIYW5kbGUiLCJzaWJsaW5nQ2hlY2siLCJjdXIiLCJkaWZmIiwic291cmNlSW5kZXgiLCJuZXh0U2libGluZyIsImNyZWF0ZUlucHV0UHNldWRvIiwiY3JlYXRlQnV0dG9uUHNldWRvIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwibm9kZSIsImRvYyIsInBhcmVudCIsImRlZmF1bHRWaWV3IiwiYXR0YWNoRXZlbnQiLCJ0b3AiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiaW5uZXJIVE1MIiwiZmlyc3RDaGlsZCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImZpbHRlciIsImF0dHJJZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJpbnB1dCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsInZhbCIsInNwZWNpZmllZCIsInVuaXF1ZVNvcnQiLCJkdXBsaWNhdGVzIiwiZGV0ZWN0RHVwbGljYXRlcyIsInNvcnRTdGFibGUiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwiPiIsImRpciIsIiAiLCIrIiwifiIsInByZUZpbHRlciIsImV4Y2VzcyIsInVucXVvdGVkIiwibm9kZU5hbWVTZWxlY3RvciIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsInNpbXBsZSIsImZvcndhcmQiLCJvZlR5cGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJ1c2VDYWNoZSIsImxhc3RDaGlsZCIsInBzZXVkbyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibm90IiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImhhcyIsImlubmVyVGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJyb290IiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiZW1wdHkiLCJoZWFkZXIiLCJidXR0b24iLCJldmVuIiwib2RkIiwibHQiLCJndCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInRva2VucyIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiYmFzZSIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsImRpcmtleSIsImVsZW1lbnRNYXRjaGVyIiwibWF0Y2hlcnMiLCJjb25kZW5zZSIsIm5ld1VubWF0Y2hlZCIsIm1hcHBlZCIsInNldE1hdGNoZXIiLCJwb3N0RmlsdGVyIiwicG9zdEZpbmRlciIsInBvc3RTZWxlY3RvciIsInRlbXAiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJtdWx0aXBsZUNvbnRleHRzIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsIm1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsInNldE1hdGNoZXJzIiwibWF0Y2hlckNhY2hlZFJ1bnMiLCJieVNldCIsImJ5RWxlbWVudCIsInN1cGVyTWF0Y2hlciIsImV4cGFuZENvbnRleHQiLCJzZXRNYXRjaGVkIiwibWF0Y2hlZENvdW50Iiwib3V0ZXJtb3N0IiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJncm91cCIsImNvbnRleHRzIiwidG9rZW4iLCJkaXYxIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJvcHRpb25zQ2FjaGUiLCJjcmVhdGVPcHRpb25zIiwib2JqZWN0IiwiZmxhZyIsIkNhbGxiYWNrcyIsIm1lbW9yeSIsImZpcmVkIiwiZmlyaW5nIiwiZmlyaW5nU3RhcnQiLCJmaXJpbmdMZW5ndGgiLCJmaXJpbmdJbmRleCIsImxpc3QiLCJzdGFjayIsIm9uY2UiLCJmaXJlIiwic3RvcE9uRmFsc2UiLCJzZWxmIiwiZGlzYWJsZSIsImFkZCIsImluZGV4IiwibG9jayIsImxvY2tlZCIsImZpcmVXaXRoIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJmYWlsIiwidGhlbiIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJhY3Rpb24iLCJyZXR1cm5lZCIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9ncmVzcyIsIm5vdGlmeSIsInBpcGUiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzdWJvcmRpbmF0ZSIsInJlc29sdmVWYWx1ZXMiLCJyZW1haW5pbmciLCJ1cGRhdGVGdW5jIiwidmFsdWVzIiwicHJvZ3Jlc3NWYWx1ZXMiLCJub3RpZnlXaXRoIiwicHJvZ3Jlc3NDb250ZXh0cyIsInJlc29sdmVDb250ZXh0cyIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIm9wdCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsUG9zaXRpb24iLCJub0Nsb25lQ2hlY2tlZCIsImNsb25lTm9kZSIsIm9wdERpc2FibGVkIiwicmFkaW9WYWx1ZSIsImNoZWNrQ2xvbmUiLCJmb2N1c2luQnViYmxlcyIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwiY29udGFpbmVyIiwibWFyZ2luRGl2IiwiZGl2UmVzZXQiLCJib2R5IiwiY3NzVGV4dCIsInpvb20iLCJib3hTaXppbmciLCJvZmZzZXRXaWR0aCIsImdldENvbXB1dGVkU3R5bGUiLCJ3aWR0aCIsIm1hcmdpblJpZ2h0IiwiZGF0YV91c2VyIiwiZGF0YV9wcml2IiwicmJyYWNlIiwicm11bHRpRGFzaCIsIkRhdGEiLCJkZWZpbmVQcm9wZXJ0eSIsInVpZCIsImFjY2VwdHMiLCJvd25lciIsImRlc2NyaXB0b3IiLCJ1bmxvY2siLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2V0IiwicHJvcCIsInN0b3JlZCIsImNhbWVsIiwiaGFzRGF0YSIsImRpc2NhcmQiLCJhY2NlcHREYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkYXRhQXR0ciIsImNhbWVsS2V5IiwicXVldWUiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwibmV4dCIsInN0b3AiLCJzZXR0ZXIiLCJkZWxheSIsInRpbWUiLCJmeCIsInNwZWVkcyIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjbGVhclF1ZXVlIiwiY291bnQiLCJkZWZlciIsIm5vZGVIb29rIiwiYm9vbEhvb2siLCJyY2xhc3MiLCJycmV0dXJuIiwicmZvY3VzYWJsZSIsInJlbW92ZUF0dHIiLCJyZW1vdmVQcm9wIiwicHJvcEZpeCIsImFkZENsYXNzIiwiY2xhc3NlcyIsImNsYXp6IiwicHJvY2VlZCIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInZhbEhvb2tzIiwib3B0aW9uIiwib25lIiwibWF4Iiwib3B0aW9uU2V0IiwiblR5cGUiLCJhdHRySG9va3MiLCJwcm9wTmFtZSIsImF0dHJOYW1lcyIsImZvciIsImNsYXNzIiwibm90eG1sIiwicHJvcEhvb2tzIiwiaGFzQXR0cmlidXRlIiwiZ2V0dGVyIiwicmtleUV2ZW50Iiwicm1vdXNlRXZlbnQiLCJyZm9jdXNNb3JwaCIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJlcnIiLCJldmVudCIsImdsb2JhbCIsInR5cGVzIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJzcGVjaWFsIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJuYW1lc3BhY2UiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwiZXZlbnRQYXRoIiwiRXZlbnQiLCJpc1RyaWdnZXIiLCJuYW1lc3BhY2VfcmUiLCJub0J1YmJsZSIsInBhcmVudFdpbmRvdyIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwicHJldmVudERlZmF1bHQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJfZGVmYXVsdCIsImZpeCIsImhhbmRsZXJRdWV1ZSIsImRlbGVnYXRlVGFyZ2V0IiwicHJlRGlzcGF0Y2giLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJzZWwiLCJwcm9wcyIsImZpeEhvb2tzIiwia2V5SG9va3MiLCJvcmlnaW5hbCIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsImV2ZW50RG9jIiwicGFnZVgiLCJjbGllbnRYIiwic2Nyb2xsTGVmdCIsImNsaWVudExlZnQiLCJwYWdlWSIsImNsaWVudFkiLCJzY3JvbGxUb3AiLCJjbGllbnRUb3AiLCJvcmlnaW5hbEV2ZW50IiwiZml4SG9vayIsImxvYWQiLCJibHVyIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsInNpbXVsYXRlIiwiYnViYmxlIiwiaXNTaW11bGF0ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwiZ2V0UHJldmVudERlZmF1bHQiLCJ0aW1lU3RhbXAiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImF0dGFjaGVzIiwib24iLCJvcmlnRm4iLCJ0cmlnZ2VySGFuZGxlciIsImlzU2ltcGxlIiwicnBhcmVudHNwcmV2Iiwicm5lZWRzQ29udGV4dCIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwicHJldiIsInRhcmdldHMiLCJ3aW5ub3ciLCJpcyIsImNsb3Nlc3QiLCJwb3MiLCJwcmV2QWxsIiwiYWRkQmFjayIsInNpYmxpbmciLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwidW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJjb250ZW50RG9jdW1lbnQiLCJyZXZlcnNlIiwidHJ1bmNhdGUiLCJuIiwicXVhbGlmaWVyIiwicnhodG1sVGFnIiwicnRhZ05hbWUiLCJyaHRtbCIsInJub0lubmVyaHRtbCIsIm1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZSIsInJjaGVja2VkIiwicnNjcmlwdFR5cGUiLCJyc2NyaXB0VHlwZU1hc2tlZCIsInJjbGVhblNjcmlwdCIsIndyYXBNYXAiLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJvcHRncm91cCIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImFwcGVuZCIsImNyZWF0ZVRleHROb2RlIiwiZG9tTWFuaXAiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJwcmVwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJrZWVwRGF0YSIsImNsZWFuRGF0YSIsImdldEFsbCIsInNldEdsb2JhbEV2YWwiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJodG1sIiwicmVwbGFjZVdpdGgiLCJkZXRhY2giLCJhbGxvd0ludGVyc2VjdGlvbiIsImhhc1NjcmlwdHMiLCJpTm9DbG9uZSIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiX2V2YWxVcmwiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsImluc2VydCIsInNyY0VsZW1lbnRzIiwiZGVzdEVsZW1lbnRzIiwiaW5QYWdlIiwiZml4SW5wdXQiLCJjbG9uZUNvcHlFdmVudCIsInNlbGVjdGlvbiIsIndyYXAiLCJub2RlcyIsInVybCIsImFqYXgiLCJkYXRhVHlwZSIsImFzeW5jIiwidGhyb3dzIiwiY29udGVudCIsInJlZkVsZW1lbnRzIiwiZGVzdCIsInBkYXRhT2xkIiwicGRhdGFDdXIiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwidW53cmFwIiwiY3VyQ1NTIiwiaWZyYW1lIiwicmRpc3BsYXlzd2FwIiwicm1hcmdpbiIsInJudW1zcGxpdCIsInJudW1ub25weCIsInJyZWxOdW0iLCJlbGVtZGlzcGxheSIsIkJPRFkiLCJjc3NTaG93IiwicG9zaXRpb24iLCJ2aXNpYmlsaXR5IiwiZGlzcGxheSIsImNzc05vcm1hbFRyYW5zZm9ybSIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzRXhwYW5kIiwiY3NzUHJlZml4ZXMiLCJ2ZW5kb3JQcm9wTmFtZSIsImNhcE5hbWUiLCJvcmlnTmFtZSIsImlzSGlkZGVuIiwiZWwiLCJjc3MiLCJnZXRTdHlsZXMiLCJzaG93SGlkZSIsInNob3ciLCJoaWRkZW4iLCJjc3NfZGVmYXVsdERpc3BsYXkiLCJzdHlsZXMiLCJoaWRlIiwidG9nZ2xlIiwiY3NzSG9va3MiLCJvcGFjaXR5IiwiY29tcHV0ZWQiLCJjc3NOdW1iZXIiLCJjb2x1bW5Db3VudCIsImZpbGxPcGFjaXR5IiwibGluZUhlaWdodCIsIm9yZGVyIiwib3JwaGFucyIsIndpZG93cyIsInpJbmRleCIsImNzc1Byb3BzIiwiZmxvYXQiLCJleHRyYSIsIl9jb21wdXRlZCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJnZXRQcm9wZXJ0eVZhbHVlIiwic2V0UG9zaXRpdmVOdW1iZXIiLCJzdWJ0cmFjdCIsImF1Z21lbnRXaWR0aE9ySGVpZ2h0IiwiaXNCb3JkZXJCb3giLCJnZXRXaWR0aE9ySGVpZ2h0IiwidmFsdWVJc0JvcmRlckJveCIsIm9mZnNldEhlaWdodCIsImFjdHVhbERpc3BsYXkiLCJjb250ZW50V2luZG93Iiwid3JpdGUiLCJjbG9zZSIsInZpc2libGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kIiwiZXhwYW5kZWQiLCJwYXJ0cyIsInIyMCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJzZXJpYWxpemUiLCJwYXJhbSIsInNlcmlhbGl6ZUFycmF5IiwidHJhZGl0aW9uYWwiLCJzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYWpheFNldHRpbmdzIiwiYnVpbGRQYXJhbXMiLCJ2IiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsImJpbmQiLCJ1bmJpbmQiLCJkZWxlZ2F0ZSIsInVuZGVsZWdhdGUiLCJhamF4TG9jUGFydHMiLCJhamF4TG9jYXRpb24iLCJhamF4X25vbmNlIiwiYWpheF9ycXVlcnkiLCJyaGFzaCIsInJ0cyIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwicnVybCIsIl9sb2FkIiwicHJlZmlsdGVycyIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwib3JpZ2luYWxPcHRpb25zIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJwYXJhbXMiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsImNvbXBsZXRlIiwic3RhdHVzIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsImlzTG9jYWwiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiKiIsImpzb24iLCJyZXNwb25zZUZpZWxkcyIsImNvbnZlcnRlcnMiLCIqIHRleHQiLCJ0ZXh0IGh0bWwiLCJ0ZXh0IGpzb24iLCJ0ZXh0IHhtbCIsImFqYXhTZXR1cCIsInNldHRpbmdzIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJ0cmFuc3BvcnQiLCJjYWNoZVVSTCIsInJlc3BvbnNlSGVhZGVyc1N0cmluZyIsInJlc3BvbnNlSGVhZGVycyIsInRpbWVvdXRUaW1lciIsImZpcmVHbG9iYWxzIiwiY2FsbGJhY2tDb250ZXh0IiwiZ2xvYmFsRXZlbnRDb250ZXh0IiwiY29tcGxldGVEZWZlcnJlZCIsInN0YXR1c0NvZGUiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3RIZWFkZXJzTmFtZXMiLCJzdHJBYm9ydCIsImdldFJlc3BvbnNlSGVhZGVyIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImxuYW1lIiwib3ZlcnJpZGVNaW1lVHlwZSIsIm1pbWVUeXBlIiwiYWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwiaGFzQ29udGVudCIsImlmTW9kaWZpZWQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwicmVzcG9uc2VzIiwiaXNTdWNjZXNzIiwibW9kaWZpZWQiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwiYWpheENvbnZlcnQiLCJyZWplY3RXaXRoIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwiZGF0YUZpbHRlciIsInRleHQgc2NyaXB0IiwiY2hhcnNldCIsInNjcmlwdENoYXJzZXQiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHJTdXBwb3J0ZWQiLCJ4aHJTdWNjZXNzU3RhdHVzIiwxMjIzLCJ4aHJJZCIsInhockNhbGxiYWNrcyIsIkFjdGl2ZVhPYmplY3QiLCJjb3JzIiwib3BlbiIsInVzZXJuYW1lIiwieGhyRmllbGRzIiwib25sb2FkIiwib25lcnJvciIsImZ4Tm93IiwidGltZXJJZCIsInJmeHR5cGVzIiwicmZ4bnVtIiwicnJ1biIsImFuaW1hdGlvblByZWZpbHRlcnMiLCJkZWZhdWx0UHJlZmlsdGVyIiwidHdlZW5lcnMiLCJ0d2VlbiIsImNyZWF0ZVR3ZWVuIiwidW5pdCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImNyZWF0ZUZ4Tm93IiwiYW5pbWF0aW9uIiwiY29sbGVjdGlvbiIsIkFuaW1hdGlvbiIsInByb3BlcnRpZXMiLCJzdG9wcGVkIiwidGljayIsImN1cnJlbnRUaW1lIiwic3RhcnRUaW1lIiwiZHVyYXRpb24iLCJwZXJjZW50IiwidHdlZW5zIiwicnVuIiwib3B0cyIsInNwZWNpYWxFYXNpbmciLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJUd2VlbiIsImVhc2luZyIsImdvdG9FbmQiLCJwcm9wRmlsdGVyIiwidGltZXIiLCJhbmltIiwidHdlZW5lciIsInByZWZpbHRlciIsIm9sZGZpcmUiLCJkYXRhU2hvdyIsInVucXVldWVkIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJlYXNlZCIsInN0ZXAiLCJjc3NGbiIsInNwZWVkIiwiYW5pbWF0ZSIsImdlbkZ4IiwiZmFkZVRvIiwidG8iLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImluY2x1ZGVXaWR0aCIsImhlaWdodCIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwibGluZWFyIiwicCIsInN3aW5nIiwiY29zIiwiUEkiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiYW5pbWF0ZWQiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJ3aW4iLCJib3giLCJsZWZ0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0V2luZG93IiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsImN1clBvc2l0aW9uIiwiY3VyTGVmdCIsImN1ckNTU1RvcCIsImN1clRvcCIsImN1ck9mZnNldCIsImN1ckNTU0xlZnQiLCJjYWxjdWxhdGVQb3NpdGlvbiIsImN1ckVsZW0iLCJ1c2luZyIsIm9mZnNldFBhcmVudCIsInBhcmVudE9mZnNldCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsInNpemUiLCJhbmRTZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImRlZmluZSIsImFtZCJdLCJtYXBwaW5ncyI6Ijs7O0NBYUEsU0FBV0EsRUFBUUMsV0FPbkIsR0FFQ0MsR0FHQUMsRUFJQUMsUUFBMkJILFdBRzNCSSxFQUFXTCxFQUFPSyxTQUNsQkMsRUFBV04sRUFBT00sU0FDbEJDLEVBQVVELEVBQVNFLGdCQUduQkMsRUFBVVQsRUFBT1UsT0FHakJDLEVBQUtYLEVBQU9ZLEVBR1pDLEtBR0FDLEtBRUFDLEVBQWUsUUFHZkMsRUFBY0YsRUFBZ0JHLE9BQzlCQyxFQUFZSixFQUFnQkssS0FDNUJDLEVBQWFOLEVBQWdCTyxNQUM3QkMsRUFBZVIsRUFBZ0JTLFFBQy9CQyxFQUFnQlgsRUFBV1ksU0FDM0JDLEVBQWNiLEVBQVdjLGVBQ3pCQyxFQUFZYixFQUFhYyxLQUd6Qm5CLEVBQVMsU0FBVW9CLEVBQVVDLEdBRTVCLE1BQU8sSUFBSXJCLEdBQU9zQixHQUFHQyxLQUFNSCxFQUFVQyxFQUFTN0IsSUFJL0NnQyxFQUFZLHNDQUFzQ0MsT0FHbERDLEVBQWlCLE9BS2pCQyxFQUFhLHNDQUdiQyxFQUFhLDZCQUdiQyxFQUFZLFFBQ1pDLEVBQWEsZUFHYkMsRUFBYSxTQUFVQyxFQUFLQyxHQUMzQixNQUFPQSxHQUFPQyxlQUlmQyxFQUFZLFdBQ1h2QyxFQUFTd0Msb0JBQXFCLG1CQUFvQkQsR0FBVyxHQUM3RDdDLEVBQU84QyxvQkFBcUIsT0FBUUQsR0FBVyxHQUMvQ25DLEVBQU9xQyxRQUdUckMsR0FBT3NCLEdBQUt0QixFQUFPc0MsV0FFbEJDLE9BQVFsQyxFQUVSbUMsWUFBYXhDLEVBQ2J1QixLQUFNLFNBQVVILEVBQVVDLEVBQVM3QixHQUNsQyxHQUFJaUQsR0FBT0MsQ0FHWCxLQUFNdEIsRUFDTCxNQUFPdUIsS0FJUixJQUF5QixnQkFBYnZCLEdBQXdCLENBVW5DLEdBUENxQixFQUYyQixNQUF2QnJCLEVBQVN3QixPQUFPLElBQXlELE1BQTNDeEIsRUFBU3dCLE9BQVF4QixFQUFTeUIsT0FBUyxJQUFlekIsRUFBU3lCLFFBQVUsR0FFN0YsS0FBTXpCLEVBQVUsTUFHbEJPLEVBQVdtQixLQUFNMUIsSUFJckJxQixJQUFVQSxFQUFNLElBQU9wQixFQStDckIsT0FBTUEsR0FBV0EsRUFBUWtCLFFBQ3RCbEIsR0FBVzdCLEdBQWF1RCxLQUFNM0IsR0FLaEN1QixLQUFLSCxZQUFhbkIsR0FBVTBCLEtBQU0zQixFQWxEekMsSUFBS3FCLEVBQU0sR0FBSyxDQVdmLEdBVkFwQixFQUFVQSxZQUFtQnJCLEdBQVNxQixFQUFRLEdBQUtBLEVBR25EckIsRUFBT2dELE1BQU9MLEtBQU0zQyxFQUFPaUQsVUFDMUJSLEVBQU0sR0FDTnBCLEdBQVdBLEVBQVE2QixTQUFXN0IsRUFBUThCLGVBQWlCOUIsRUFBVXpCLEdBQ2pFLElBSUlnQyxFQUFXd0IsS0FBTVgsRUFBTSxLQUFRekMsRUFBT3FELGNBQWVoQyxHQUN6RCxJQUFNb0IsSUFBU3BCLEdBRVRyQixFQUFPc0QsV0FBWVgsS0FBTUYsSUFDN0JFLEtBQU1GLEdBQVNwQixFQUFTb0IsSUFJeEJFLEtBQUtZLEtBQU1kLEVBQU9wQixFQUFTb0IsR0FLOUIsT0FBT0UsTUFnQlAsTUFaQUQsR0FBTzlDLEVBQVM0RCxlQUFnQmYsRUFBTSxJQUlqQ0MsR0FBUUEsRUFBS2UsYUFFakJkLEtBQUtFLE9BQVMsRUFDZEYsS0FBSyxHQUFLRCxHQUdYQyxLQUFLdEIsUUFBVXpCLEVBQ2YrQyxLQUFLdkIsU0FBV0EsRUFDVHVCLEtBY0gsTUFBS3ZCLEdBQVM4QixVQUNwQlAsS0FBS3RCLFFBQVVzQixLQUFLLEdBQUt2QixFQUN6QnVCLEtBQUtFLE9BQVMsRUFDUEYsTUFJSTNDLEVBQU9zRCxXQUFZbEMsR0FDdkI1QixFQUFXNkMsTUFBT2pCLElBR3JCQSxFQUFTQSxXQUFhN0IsWUFDMUJvRCxLQUFLdkIsU0FBV0EsRUFBU0EsU0FDekJ1QixLQUFLdEIsUUFBVUQsRUFBU0MsU0FHbEJyQixFQUFPMEQsVUFBV3RDLEVBQVV1QixRQUlwQ3ZCLFNBQVUsR0FHVnlCLE9BQVEsRUFFUmMsUUFBUyxXQUNSLE1BQU9qRCxHQUFXa0QsS0FBTWpCLE9BS3pCa0IsSUFBSyxTQUFVQyxHQUNkLE1BQWMsT0FBUEEsRUFHTm5CLEtBQUtnQixVQUdHLEVBQU5HLEVBQVVuQixLQUFNQSxLQUFLRSxPQUFTaUIsR0FBUW5CLEtBQU1tQixJQUtoREMsVUFBVyxTQUFVQyxHQUdwQixHQUFJQyxHQUFNakUsRUFBT2dELE1BQU9MLEtBQUtILGNBQWV3QixFQU81QyxPQUpBQyxHQUFJQyxXQUFhdkIsS0FDakJzQixFQUFJNUMsUUFBVXNCLEtBQUt0QixRQUdaNEMsR0FNUkUsS0FBTSxTQUFVQyxFQUFVQyxHQUN6QixNQUFPckUsR0FBT21FLEtBQU14QixLQUFNeUIsRUFBVUMsSUFHckNoQyxNQUFPLFNBQVVmLEdBSWhCLE1BRkF0QixHQUFPcUMsTUFBTWlDLFVBQVVDLEtBQU1qRCxHQUV0QnFCLE1BR1JoQyxNQUFPLFdBQ04sTUFBT2dDLE1BQUtvQixVQUFXckQsRUFBVzhELE1BQU83QixLQUFNOEIsYUFHaERDLE1BQU8sV0FDTixNQUFPL0IsTUFBS2dDLEdBQUksSUFHakJDLEtBQU0sV0FDTCxNQUFPakMsTUFBS2dDLEdBQUksS0FHakJBLEdBQUksU0FBVUUsR0FDYixHQUFJQyxHQUFNbkMsS0FBS0UsT0FDZGtDLEdBQUtGLEdBQVUsRUFBSkEsRUFBUUMsRUFBTSxFQUMxQixPQUFPbkMsTUFBS29CLFVBQVdnQixHQUFLLEdBQVNELEVBQUpDLEdBQVlwQyxLQUFLb0MsU0FHbkRDLElBQUssU0FBVVosR0FDZCxNQUFPekIsTUFBS29CLFVBQVcvRCxFQUFPZ0YsSUFBSXJDLEtBQU0sU0FBVUQsRUFBTW1DLEdBQ3ZELE1BQU9ULEdBQVNSLEtBQU1sQixFQUFNbUMsRUFBR25DLE9BSWpDdUMsSUFBSyxXQUNKLE1BQU90QyxNQUFLdUIsWUFBY3ZCLEtBQUtILFlBQVksT0FLNUMvQixLQUFNRCxFQUNOMEUsUUFBU0EsS0FDVEMsVUFBV0EsUUFJWm5GLEVBQU9zQixHQUFHQyxLQUFLZSxVQUFZdEMsRUFBT3NCLEdBRWxDdEIsRUFBT29GLE9BQVNwRixFQUFPc0IsR0FBRzhELE9BQVMsV0FDbEMsR0FBSUMsR0FBU0MsRUFBTUMsRUFBS0MsRUFBTUMsRUFBYUMsRUFDMUNDLEVBQVNsQixVQUFVLE9BQ25CSSxFQUFJLEVBQ0poQyxFQUFTNEIsVUFBVTVCLE9BQ25CK0MsR0FBTyxDQXFCUixLQWxCdUIsaUJBQVhELEtBQ1hDLEVBQU9ELEVBQ1BBLEVBQVNsQixVQUFVLE9BRW5CSSxFQUFJLEdBSWtCLGdCQUFYYyxJQUF3QjNGLEVBQU9zRCxXQUFXcUMsS0FDckRBLE1BSUk5QyxJQUFXZ0MsSUFDZmMsRUFBU2hELE9BQ1BrQyxHQUdTaEMsRUFBSmdDLEVBQVlBLElBRW5CLEdBQW1DLE9BQTdCUSxFQUFVWixVQUFXSSxJQUUxQixJQUFNUyxJQUFRRCxHQUNiRSxFQUFNSSxFQUFRTCxHQUNkRSxFQUFPSCxFQUFTQyxHQUdYSyxJQUFXSCxJQUtYSSxHQUFRSixJQUFVeEYsRUFBT3FELGNBQWNtQyxLQUFVQyxFQUFjekYsRUFBTzZGLFFBQVFMLE1BQzdFQyxHQUNKQSxHQUFjLEVBQ2RDLEVBQVFILEdBQU92RixFQUFPNkYsUUFBUU4sR0FBT0EsTUFHckNHLEVBQVFILEdBQU92RixFQUFPcUQsY0FBY2tDLEdBQU9BLEtBSTVDSSxFQUFRTCxHQUFTdEYsRUFBT29GLE9BQVFRLEVBQU1GLEVBQU9GLElBR2xDQSxJQUFTakcsWUFDcEJvRyxFQUFRTCxHQUFTRSxHQU9yQixPQUFPRyxJQUdSM0YsRUFBT29GLFFBRU5VLFFBQVMsVUFBYXpGLEVBQWUwRixLQUFLQyxVQUFXQyxRQUFTLE1BQU8sSUFFckVDLFdBQVksU0FBVU4sR0FTckIsTUFSS3RHLEdBQU9ZLElBQU1GLElBQ2pCVixFQUFPWSxFQUFJRCxHQUdQMkYsR0FBUXRHLEVBQU9VLFNBQVdBLElBQzlCVixFQUFPVSxPQUFTRCxHQUdWQyxHQUlSbUcsU0FBUyxFQUlUQyxVQUFXLEVBR1hDLFVBQVcsU0FBVUMsR0FDZkEsRUFDSnRHLEVBQU9vRyxZQUVQcEcsRUFBT3FDLE9BQU8sSUFLaEJBLE1BQU8sU0FBVWtFLElBR1hBLEtBQVMsSUFBU3ZHLEVBQU9vRyxVQUFZcEcsRUFBT21HLFdBS2pEbkcsRUFBT21HLFNBQVUsRUFHWkksS0FBUyxLQUFVdkcsRUFBT29HLFVBQVksSUFLM0MzRyxFQUFVK0csWUFBYTVHLEdBQVlJLElBRzlCQSxFQUFPc0IsR0FBR21GLFNBQ2R6RyxFQUFRSixHQUFXNkcsUUFBUSxTQUFTQyxJQUFJLFlBTzFDcEQsV0FBWSxTQUFVcUQsR0FDckIsTUFBNEIsYUFBckIzRyxFQUFPNEcsS0FBS0QsSUFHcEJkLFFBQVNnQixNQUFNaEIsUUFFZmlCLFNBQVUsU0FBVUgsR0FDbkIsTUFBYyxPQUFQQSxHQUFlQSxJQUFRQSxFQUFJckgsUUFHbkN5SCxVQUFXLFNBQVVKLEdBQ3BCLE9BQVFLLE1BQU9DLFdBQVdOLEtBQVVPLFNBQVVQLElBRy9DQyxLQUFNLFNBQVVELEdBQ2YsTUFBWSxPQUFQQSxFQUNXQSxFQUFSUSxHQUdjLGdCQUFSUixJQUFtQyxrQkFBUkEsR0FDeEN4RyxFQUFZVyxFQUFjOEMsS0FBSytDLEtBQVUsZUFDbENBLElBR1R0RCxjQUFlLFNBQVVzRCxHQUt4QixHQUE0QixXQUF2QjNHLEVBQU80RyxLQUFNRCxJQUFzQkEsRUFBSXpELFVBQVlsRCxFQUFPOEcsU0FBVUgsR0FDeEUsT0FBTyxDQU9SLEtBQ0MsR0FBS0EsRUFBSW5FLGNBQ054QixFQUFZNEMsS0FBTStDLEVBQUluRSxZQUFZRixVQUFXLGlCQUMvQyxPQUFPLEVBRVAsTUFBUThFLEdBQ1QsT0FBTyxFQUtSLE9BQU8sR0FHUkMsY0FBZSxTQUFVVixHQUN4QixHQUFJckIsRUFDSixLQUFNQSxJQUFRcUIsR0FDYixPQUFPLENBRVIsUUFBTyxHQUdSVyxNQUFPLFNBQVVDLEdBQ2hCLEtBQVVDLE9BQU9ELElBTWxCdEUsVUFBVyxTQUFVd0UsRUFBTXBHLEVBQVNxRyxHQUNuQyxJQUFNRCxHQUF3QixnQkFBVEEsR0FDcEIsTUFBTyxLQUVnQixrQkFBWnBHLEtBQ1hxRyxFQUFjckcsRUFDZEEsR0FBVSxHQUVYQSxFQUFVQSxHQUFXekIsQ0FFckIsSUFBSStILEdBQVMvRixFQUFXa0IsS0FBTTJFLEdBQzdCRyxHQUFXRixLQUdaLE9BQUtDLElBQ0t0RyxFQUFRd0csY0FBZUYsRUFBTyxNQUd4Q0EsRUFBUzNILEVBQU84SCxlQUFpQkwsR0FBUXBHLEVBQVN1RyxHQUU3Q0EsR0FDSjVILEVBQVE0SCxHQUFVRyxTQUdaL0gsRUFBT2dELFNBQVcyRSxFQUFPSyxjQUdqQ0MsVUFBV0MsS0FBS0MsTUFHaEJDLFNBQVUsU0FBVVgsR0FDbkIsR0FBSVksR0FBS0MsQ0FDVCxLQUFNYixHQUF3QixnQkFBVEEsR0FDcEIsTUFBTyxLQUlSLEtBQ0NhLEVBQU0sR0FBSUMsV0FDVkYsRUFBTUMsRUFBSUUsZ0JBQWlCZixFQUFPLFlBQ2pDLE1BQVFMLEdBQ1RpQixFQUFNOUksVUFNUCxRQUhNOEksR0FBT0EsRUFBSUkscUJBQXNCLGVBQWdCNUYsU0FDdEQ3QyxFQUFPc0gsTUFBTyxnQkFBa0JHLEdBRTFCWSxHQUdSSyxLQUFNLGFBR05DLFdBQVksU0FBVUMsR0FDckIsR0FBSUMsR0FDRkMsRUFBV0MsSUFFYkgsR0FBTzVJLEVBQU9tQixLQUFNeUgsR0FFZkEsSUFJZ0MsSUFBL0JBLEVBQUsvSCxRQUFRLGVBQ2pCZ0ksRUFBU2pKLEVBQVNpSSxjQUFjLFVBQ2hDZ0IsRUFBT0csS0FBT0osRUFDZGhKLEVBQVNxSixLQUFLQyxZQUFhTCxHQUFTcEYsV0FBVzBGLFlBQWFOLElBSTVEQyxFQUFVRixLQU9iUSxVQUFXLFNBQVVDLEdBQ3BCLE1BQU9BLEdBQU9wRCxRQUFTcEUsRUFBVyxPQUFRb0UsUUFBU25FLEVBQVlDLElBR2hFdUgsU0FBVSxTQUFVNUcsRUFBTTRDLEdBQ3pCLE1BQU81QyxHQUFLNEcsVUFBWTVHLEVBQUs0RyxTQUFTQyxnQkFBa0JqRSxFQUFLaUUsZUFJOURwRixLQUFNLFNBQVV3QyxFQUFLdkMsRUFBVUMsR0FDOUIsR0FBSW1GLEdBQ0gzRSxFQUFJLEVBQ0poQyxFQUFTOEQsRUFBSTlELE9BQ2JnRCxFQUFVNEQsRUFBYTlDLEVBRXhCLElBQUt0QyxHQUNKLEdBQUt3QixHQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFHbkIsR0FGQTJFLEVBQVFwRixFQUFTSSxNQUFPbUMsRUFBSzlCLEdBQUtSLEdBRTdCbUYsS0FBVSxFQUNkLFVBSUYsS0FBTTNFLElBQUs4QixHQUdWLEdBRkE2QyxFQUFRcEYsRUFBU0ksTUFBT21DLEVBQUs5QixHQUFLUixHQUU3Qm1GLEtBQVUsRUFDZCxVQU9ILElBQUszRCxHQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFHbkIsR0FGQTJFLEVBQVFwRixFQUFTUixLQUFNK0MsRUFBSzlCLEdBQUtBLEVBQUc4QixFQUFLOUIsSUFFcEMyRSxLQUFVLEVBQ2QsVUFJRixLQUFNM0UsSUFBSzhCLEdBR1YsR0FGQTZDLEVBQVFwRixFQUFTUixLQUFNK0MsRUFBSzlCLEdBQUtBLEVBQUc4QixFQUFLOUIsSUFFcEMyRSxLQUFVLEVBQ2QsS0FNSixPQUFPN0MsSUFHUnhGLEtBQU0sU0FBVTZILEdBQ2YsTUFBZSxPQUFSQSxFQUFlLEdBQUs5SCxFQUFVMEMsS0FBTW9GLElBSTVDdEYsVUFBVyxTQUFVZ0csRUFBS0MsR0FDekIsR0FBSTFGLEdBQU0wRixLQWFWLE9BWFksT0FBUEQsSUFDQ0QsRUFBYUcsT0FBT0YsSUFDeEIxSixFQUFPZ0QsTUFBT2lCLEVBQ0UsZ0JBQVJ5RixJQUNMQSxHQUFRQSxHQUdYbEosRUFBVW9ELEtBQU1LLEVBQUt5RixJQUloQnpGLEdBR1I0RixRQUFTLFNBQVVuSCxFQUFNZ0gsRUFBSzdFLEdBQzdCLE1BQWMsT0FBUDZFLEVBQWMsR0FBSzlJLEVBQWFnRCxLQUFNOEYsRUFBS2hILEVBQU1tQyxJQUd6RDdCLE1BQU8sU0FBVTBCLEVBQU9vRixHQUN2QixHQUFJQyxHQUFJRCxFQUFPakgsT0FDZGdDLEVBQUlILEVBQU03QixPQUNWa0MsRUFBSSxDQUVMLElBQWtCLGdCQUFOZ0YsR0FDWCxLQUFZQSxFQUFKaEYsRUFBT0EsSUFDZEwsRUFBT0csS0FBUWlGLEVBQVEvRSxPQUd4QixPQUFRK0UsRUFBTy9FLEtBQU94RixVQUNyQm1GLEVBQU9HLEtBQVFpRixFQUFRL0UsSUFNekIsT0FGQUwsR0FBTTdCLE9BQVNnQyxFQUVSSCxHQUdSc0YsS0FBTSxTQUFVaEcsRUFBT0ksRUFBVTZGLEdBQ2hDLEdBQUlDLEdBQ0hqRyxLQUNBWSxFQUFJLEVBQ0poQyxFQUFTbUIsRUFBTW5CLE1BS2hCLEtBSkFvSCxJQUFRQSxFQUlJcEgsRUFBSmdDLEVBQVlBLElBQ25CcUYsSUFBVzlGLEVBQVVKLEVBQU9hLEdBQUtBLEdBQzVCb0YsSUFBUUMsR0FDWmpHLEVBQUl4RCxLQUFNdUQsRUFBT2EsR0FJbkIsT0FBT1osSUFJUmUsSUFBSyxTQUFVaEIsRUFBT0ksRUFBVStGLEdBQy9CLEdBQUlYLEdBQ0gzRSxFQUFJLEVBQ0poQyxFQUFTbUIsRUFBTW5CLE9BQ2ZnRCxFQUFVNEQsRUFBYXpGLEdBQ3ZCQyxJQUdELElBQUs0QixFQUNKLEtBQVloRCxFQUFKZ0MsRUFBWUEsSUFDbkIyRSxFQUFRcEYsRUFBVUosRUFBT2EsR0FBS0EsRUFBR3NGLEdBRW5CLE1BQVRYLElBQ0p2RixFQUFLQSxFQUFJcEIsUUFBVzJHLE9BTXRCLEtBQU0zRSxJQUFLYixHQUNWd0YsRUFBUXBGLEVBQVVKLEVBQU9hLEdBQUtBLEVBQUdzRixHQUVuQixNQUFUWCxJQUNKdkYsRUFBS0EsRUFBSXBCLFFBQVcyRyxFQU12QixPQUFPbEosR0FBWWtFLFNBQVdQLElBSS9CbUcsS0FBTSxFQUlOQyxNQUFPLFNBQVUvSSxFQUFJRCxHQUNwQixHQUFJaUgsR0FBS2pFLEVBQU1nRyxDQVVmLE9BUndCLGdCQUFaaEosS0FDWGlILEVBQU1oSCxFQUFJRCxHQUNWQSxFQUFVQyxFQUNWQSxFQUFLZ0gsR0FLQXRJLEVBQU9zRCxXQUFZaEMsSUFLekIrQyxFQUFPM0QsRUFBV2tELEtBQU1hLFVBQVcsR0FDbkM0RixFQUFRLFdBQ1AsTUFBTy9JLEdBQUdrRCxNQUFPbkQsR0FBV3NCLEtBQU0wQixFQUFLOUQsT0FBUUcsRUFBV2tELEtBQU1hLGNBSWpFNEYsRUFBTUQsS0FBTzlJLEVBQUc4SSxLQUFPOUksRUFBRzhJLE1BQVFwSyxFQUFPb0ssT0FFbENDLEdBWkM5SyxXQWlCVCtLLE9BQVEsU0FBVXRHLEVBQU8xQyxFQUFJaUosRUFBS2YsRUFBT2dCLEVBQVdDLEVBQVVDLEdBQzdELEdBQUk3RixHQUFJLEVBQ1BoQyxFQUFTbUIsRUFBTW5CLE9BQ2Y4SCxFQUFjLE1BQVBKLENBR1IsSUFBNEIsV0FBdkJ2SyxFQUFPNEcsS0FBTTJELEdBQXFCLENBQ3RDQyxHQUFZLENBQ1osS0FBTTNGLElBQUswRixHQUNWdkssRUFBT3NLLE9BQVF0RyxFQUFPMUMsRUFBSXVELEVBQUcwRixFQUFJMUYsSUFBSSxFQUFNNEYsRUFBVUMsT0FJaEQsSUFBS2xCLElBQVVqSyxZQUNyQmlMLEdBQVksRUFFTnhLLEVBQU9zRCxXQUFZa0csS0FDeEJrQixHQUFNLEdBR0ZDLElBRUNELEdBQ0pwSixFQUFHc0MsS0FBTUksRUFBT3dGLEdBQ2hCbEksRUFBSyxPQUlMcUosRUFBT3JKLEVBQ1BBLEVBQUssU0FBVW9CLEVBQU02SCxFQUFLZixHQUN6QixNQUFPbUIsR0FBSy9HLEtBQU01RCxFQUFRMEMsR0FBUThHLE1BS2hDbEksR0FDSixLQUFZdUIsRUFBSmdDLEVBQVlBLElBQ25CdkQsRUFBSTBDLEVBQU1hLEdBQUkwRixFQUFLRyxFQUFNbEIsRUFBUUEsRUFBTTVGLEtBQU1JLEVBQU1hLEdBQUlBLEVBQUd2RCxFQUFJMEMsRUFBTWEsR0FBSTBGLElBSzNFLE9BQU9DLEdBQ054RyxFQUdBMkcsRUFDQ3JKLEVBQUdzQyxLQUFNSSxHQUNUbkIsRUFBU3ZCLEVBQUkwQyxFQUFNLEdBQUl1RyxHQUFRRSxHQUdsQ0csSUFBS0MsS0FBS0QsSUFLVkUsS0FBTSxTQUFVcEksRUFBTTJDLEVBQVNqQixFQUFVQyxHQUN4QyxHQUFJSixHQUFLcUIsRUFDUnlGLElBR0QsS0FBTXpGLElBQVFELEdBQ2IwRixFQUFLekYsR0FBUzVDLEVBQUtzSSxNQUFPMUYsR0FDMUI1QyxFQUFLc0ksTUFBTzFGLEdBQVNELEVBQVNDLEVBRy9CckIsR0FBTUcsRUFBU0ksTUFBTzlCLEVBQU0yQixNQUc1QixLQUFNaUIsSUFBUUQsR0FDYjNDLEVBQUtzSSxNQUFPMUYsR0FBU3lGLEVBQUt6RixFQUczQixPQUFPckIsTUFJVGpFLEVBQU9xQyxNQUFNaUMsUUFBVSxTQUFVcUMsR0FxQmhDLE1BcEJNbEgsS0FFTEEsRUFBWU8sRUFBT2lMLFdBS1UsYUFBeEJyTCxFQUFTc0wsV0FFYkMsV0FBWW5MLEVBQU9xQyxRQUtuQnpDLEVBQVN3TCxpQkFBa0IsbUJBQW9CakosR0FBVyxHQUcxRDdDLEVBQU84TCxpQkFBa0IsT0FBUWpKLEdBQVcsS0FHdkMxQyxFQUFVNkUsUUFBU3FDLElBSTNCM0csRUFBT21FLEtBQUssZ0VBQWdFa0gsTUFBTSxLQUFNLFNBQVN4RyxFQUFHUyxHQUNuR25GLEVBQVksV0FBYW1GLEVBQU8sS0FBUUEsRUFBS2lFLGVBRzlDLFNBQVNFLEdBQWE5QyxHQUNyQixHQUFJOUQsR0FBUzhELEVBQUk5RCxPQUNoQitELEVBQU81RyxFQUFPNEcsS0FBTUQsRUFFckIsT0FBSzNHLEdBQU84RyxTQUFVSCxJQUNkLEVBR2MsSUFBakJBLEVBQUl6RCxVQUFrQkwsR0FDbkIsRUFHUSxVQUFUK0QsR0FBNkIsYUFBVEEsSUFDYixJQUFYL0QsR0FDZ0IsZ0JBQVhBLElBQXVCQSxFQUFTLEdBQU9BLEVBQVMsSUFBTzhELElBSWhFbkgsRUFBYVEsRUFBT0osR0FXcEIsU0FBV04sRUFBUUMsV0FFbkIsR0FBSXNGLEdBQ0h5RyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUdBQyxFQUNBbE0sRUFDQUMsRUFDQWtNLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBR0FyRyxFQUFVLFVBQVksR0FBSytFLE1BQzNCdUIsRUFBZTlNLEVBQU9NLFNBQ3RCeU0sRUFBVSxFQUNWOUgsRUFBTyxFQUNQK0gsRUFBYUMsS0FDYkMsRUFBYUQsS0FDYkUsRUFBZ0JGLEtBQ2hCRyxHQUFlLEVBQ2ZDLEVBQVksU0FBVUMsRUFBR0MsR0FDeEIsTUFBS0QsS0FBTUMsR0FDVkgsR0FBZSxFQUNSLEdBRUQsR0FJUkksUUFBc0J2TixXQUN0QndOLEVBQWUsR0FBSyxHQUdwQkMsS0FBYy9MLGVBQ2R5SSxLQUNBdUQsRUFBTXZELEVBQUl1RCxJQUNWQyxFQUFjeEQsRUFBSWpKLEtBQ2xCQSxFQUFPaUosRUFBSWpKLEtBQ1hFLEVBQVErSSxFQUFJL0ksTUFFWkUsRUFBVTZJLEVBQUk3SSxTQUFXLFNBQVU2QixHQUNsQyxHQUFJbUMsR0FBSSxFQUNQQyxFQUFNbkMsS0FBS0UsTUFDWixNQUFZaUMsRUFBSkQsRUFBU0EsSUFDaEIsR0FBS2xDLEtBQUtrQyxLQUFPbkMsRUFDaEIsTUFBT21DLEVBR1QsT0FBTyxJQUdSc0ksRUFBVyw2SEFLWEMsRUFBYSxzQkFFYkMsRUFBb0IsbUNBS3BCQyxFQUFhRCxFQUFrQnBILFFBQVMsSUFBSyxNQUc3Q3NILEVBQWEsTUFBUUgsRUFBYSxLQUFPQyxFQUFvQixJQUFNRCxFQUNsRSxtQkFBcUJBLEVBQWEsd0NBQTBDRSxFQUFhLFFBQVVGLEVBQWEsT0FRakhJLEVBQVUsS0FBT0gsRUFBb0IsbUVBQXFFRSxFQUFXdEgsUUFBUyxFQUFHLEdBQU0sZUFHdkl3SCxFQUFZQyxPQUFRLElBQU1OLEVBQWEsOEJBQWdDQSxFQUFhLEtBQU0sS0FFMUZPLEVBQWFELE9BQVEsSUFBTU4sRUFBYSxLQUFPQSxFQUFhLEtBQzVEUSxFQUFtQkYsT0FBUSxJQUFNTixFQUFhLFdBQWFBLEVBQWEsSUFBTUEsRUFBYSxLQUUzRlMsRUFBZUgsT0FBUU4sRUFBYSxTQUNwQ1UsRUFBdUJKLE9BQVEsSUFBTU4sRUFBYSxnQkFBa0JBLEVBQWEsT0FBUSxLQUV6RlcsRUFBY0wsT0FBUUYsR0FDdEJRLEVBQWtCTixPQUFRLElBQU1KLEVBQWEsS0FFN0NXLEdBQ0NDLEdBQVVSLE9BQVEsTUFBUUwsRUFBb0IsS0FDOUNjLE1BQWFULE9BQVEsUUFBVUwsRUFBb0IsS0FDbkRlLElBQVdWLE9BQVEsS0FBT0wsRUFBa0JwSCxRQUFTLElBQUssTUFBUyxLQUNuRW9JLEtBQVlYLE9BQVEsSUFBTUgsR0FDMUJlLE9BQWNaLE9BQVEsSUFBTUYsR0FDNUJlLE1BQWFiLE9BQVEseURBQTJETixFQUMvRSwrQkFBaUNBLEVBQWEsY0FBZ0JBLEVBQzlELGFBQWVBLEVBQWEsU0FBVSxLQUN2Q29CLEtBQVlkLE9BQVEsT0FBU1AsRUFBVyxLQUFNLEtBRzlDc0IsYUFBb0JmLE9BQVEsSUFBTU4sRUFBYSxtREFDOUNBLEVBQWEsbUJBQXFCQSxFQUFhLG1CQUFvQixNQUdyRXNCLEVBQVUseUJBR1YvTSxFQUFhLG1DQUViZ04sRUFBVSxzQ0FDVkMsR0FBVSxTQUVWQyxHQUFVLFFBR1ZDLEdBQWdCcEIsT0FBUSxxQkFBdUJOLEVBQWEsTUFBUUEsRUFBYSxPQUFRLE1BQ3pGMkIsR0FBWSxTQUFVQyxFQUFHQyxFQUFTQyxHQUNqQyxHQUFJQyxHQUFPLEtBQU9GLEVBQVUsS0FJNUIsT0FBT0UsS0FBU0EsR0FBUUQsRUFDdkJELEVBRU8sRUFBUEUsRUFDQ2hJLE9BQU9pSSxhQUFjRCxFQUFPLE9BRTVCaEksT0FBT2lJLGFBQTJCLE1BQWJELEdBQVEsR0FBNEIsTUFBUixLQUFQQSxHQUk5QyxLQUNDMU8sRUFBSytELE1BQ0hrRixFQUFNL0ksRUFBTWlELEtBQU13SSxFQUFhcEUsWUFDaENvRSxFQUFhcEUsWUFJZDBCLEVBQUswQyxFQUFhcEUsV0FBV25GLFFBQVNLLFNBQ3JDLE1BQVFrRSxJQUNUM0csR0FBUytELE1BQU9rRixFQUFJN0csT0FHbkIsU0FBVThDLEVBQVEwSixHQUNqQm5DLEVBQVkxSSxNQUFPbUIsRUFBUWhGLEVBQU1pRCxLQUFLeUwsS0FLdkMsU0FBVTFKLEVBQVEwSixHQUNqQixHQUFJdEssR0FBSVksRUFBTzlDLE9BQ2RnQyxFQUFJLENBRUwsT0FBU2MsRUFBT1osS0FBT3NLLEVBQUl4SyxNQUMzQmMsRUFBTzlDLE9BQVNrQyxFQUFJLElBS3ZCLFFBQVN1SyxJQUFRbE8sRUFBVUMsRUFBU3NJLEVBQVM0RixHQUM1QyxHQUFJOU0sR0FBT0MsRUFBTThNLEVBQUd0TSxFQUVuQjJCLEVBQUc0SyxFQUFRMUUsRUFBSzJFLEVBQUtDLEVBQVlDLENBU2xDLEtBUE92TyxFQUFVQSxFQUFROEIsZUFBaUI5QixFQUFVK0ssS0FBbUJ4TSxHQUN0RWtNLEVBQWF6SyxHQUdkQSxFQUFVQSxHQUFXekIsRUFDckIrSixFQUFVQSxPQUVKdkksR0FBZ0MsZ0JBQWJBLEdBQ3hCLE1BQU91SSxFQUdSLElBQXVDLEtBQWpDekcsRUFBVzdCLEVBQVE2QixXQUFnQyxJQUFiQSxFQUMzQyxRQUdELElBQUs2SSxJQUFtQndELEVBQU8sQ0FHOUIsR0FBTTlNLEVBQVFkLEVBQVdtQixLQUFNMUIsR0FFOUIsR0FBTW9PLEVBQUkvTSxFQUFNLElBQ2YsR0FBa0IsSUFBYlMsRUFBaUIsQ0FJckIsR0FIQVIsRUFBT3JCLEVBQVFtQyxlQUFnQmdNLElBRzFCOU0sSUFBUUEsRUFBS2UsV0FRakIsTUFBT2tHLEVBTFAsSUFBS2pILEVBQUttTixLQUFPTCxFQUVoQixNQURBN0YsR0FBUWxKLEtBQU1pQyxHQUNQaUgsTUFPVCxJQUFLdEksRUFBUThCLGdCQUFrQlQsRUFBT3JCLEVBQVE4QixjQUFjSyxlQUFnQmdNLEtBQzNFckQsRUFBVTlLLEVBQVNxQixJQUFVQSxFQUFLbU4sS0FBT0wsRUFFekMsTUFEQTdGLEdBQVFsSixLQUFNaUMsR0FDUGlILE1BS0gsQ0FBQSxHQUFLbEgsRUFBTSxHQUVqQixNQURBaEMsR0FBSytELE1BQU9tRixFQUFTdEksRUFBUW9ILHFCQUFzQnJILElBQzVDdUksQ0FHRCxLQUFNNkYsRUFBSS9NLEVBQU0sS0FBTzZJLEVBQVF3RSx3QkFBMEJ6TyxFQUFReU8sdUJBRXZFLE1BREFyUCxHQUFLK0QsTUFBT21GLEVBQVN0SSxFQUFReU8sdUJBQXdCTixJQUM5QzdGLEVBS1QsR0FBSzJCLEVBQVF5RSxPQUFTL0QsSUFBY0EsRUFBVTVJLEtBQU1oQyxJQUFjLENBU2pFLEdBUkFzTyxFQUFNM0UsRUFBTWpGLEVBQ1o2SixFQUFhdE8sRUFDYnVPLEVBQTJCLElBQWIxTSxHQUFrQjlCLEVBTWQsSUFBYjhCLEdBQXFELFdBQW5DN0IsRUFBUWlJLFNBQVNDLGNBQTZCLENBQ3BFa0csRUFBU08sR0FBVTVPLElBRWIySixFQUFNMUosRUFBUTRPLGFBQWEsT0FDaENQLEVBQU0zRSxFQUFJOUUsUUFBUzRJLEdBQVMsUUFFNUJ4TixFQUFRNk8sYUFBYyxLQUFNUixHQUU3QkEsRUFBTSxRQUFVQSxFQUFNLE1BRXRCN0ssRUFBSTRLLEVBQU81TSxNQUNYLE9BQVFnQyxJQUNQNEssRUFBTzVLLEdBQUs2SyxFQUFNUyxHQUFZVixFQUFPNUssR0FFdEM4SyxHQUFhOUIsRUFBU3pLLEtBQU1oQyxJQUFjQyxFQUFRb0MsWUFBY3BDLEVBQ2hFdU8sRUFBY0gsRUFBT1csS0FBSyxLQUczQixHQUFLUixFQUNKLElBSUMsTUFIQW5QLEdBQUsrRCxNQUFPbUYsRUFDWGdHLEVBQVdVLGlCQUFrQlQsSUFFdkJqRyxFQUNOLE1BQU0yRyxJQUNOLFFBQ0t2RixHQUNMMUosRUFBUWtQLGdCQUFnQixRQVE3QixNQUFPQyxJQUFRcFAsRUFBUzZFLFFBQVN3SCxFQUFPLE1BQVFwTSxFQUFTc0ksRUFBUzRGLEdBU25FLFFBQVNoRCxNQUNSLEdBQUlrRSxLQUVKLFNBQVNDLEdBQU9uRyxFQUFLZixHQU1wQixNQUpLaUgsR0FBS2hRLEtBQU04SixHQUFPLEtBQVFpQixFQUFLbUYsbUJBRTVCRCxHQUFPRCxFQUFLRyxTQUVaRixFQUFPbkcsR0FBUWYsRUFFeEIsTUFBT2tILEdBT1IsUUFBU0csSUFBY3ZQLEdBRXRCLE1BREFBLEdBQUl3RSxJQUFZLEVBQ1R4RSxFQU9SLFFBQVN3UCxJQUFReFAsR0FDaEIsR0FBSXlQLEdBQU1uUixFQUFTaUksY0FBYyxNQUVqQyxLQUNDLFFBQVN2RyxFQUFJeVAsR0FDWixNQUFPM0osR0FDUixPQUFPLEVBQ04sUUFFSTJKLEVBQUl0TixZQUNSc04sRUFBSXROLFdBQVcwRixZQUFhNEgsR0FHN0JBLEVBQU0sTUFTUixRQUFTQyxJQUFXQyxFQUFPQyxHQUMxQixHQUFJeEgsR0FBTXVILEVBQU01RixNQUFNLEtBQ3JCeEcsRUFBSW9NLEVBQU1wTyxNQUVYLE9BQVFnQyxJQUNQMkcsRUFBSzJGLFdBQVl6SCxFQUFJN0UsSUFBT3FNLEVBVTlCLFFBQVNFLElBQWN4RSxFQUFHQyxHQUN6QixHQUFJd0UsR0FBTXhFLEdBQUtELEVBQ2QwRSxFQUFPRCxHQUFzQixJQUFmekUsRUFBRTFKLFVBQWlDLElBQWYySixFQUFFM0osWUFDaEMySixFQUFFMEUsYUFBZXhFLEtBQ2pCSCxFQUFFMkUsYUFBZXhFLEVBR3RCLElBQUt1RSxFQUNKLE1BQU9BLEVBSVIsSUFBS0QsRUFDSixNQUFTQSxFQUFNQSxFQUFJRyxZQUNsQixHQUFLSCxJQUFReEUsRUFDWixNQUFPLEVBS1YsT0FBT0QsR0FBSSxFQUFJLEdBT2hCLFFBQVM2RSxJQUFtQjdLLEdBQzNCLE1BQU8sVUFBVWxFLEdBQ2hCLEdBQUk0QyxHQUFPNUMsRUFBSzRHLFNBQVNDLGFBQ3pCLE9BQWdCLFVBQVRqRSxHQUFvQjVDLEVBQUtrRSxPQUFTQSxHQVEzQyxRQUFTOEssSUFBb0I5SyxHQUM1QixNQUFPLFVBQVVsRSxHQUNoQixHQUFJNEMsR0FBTzVDLEVBQUs0RyxTQUFTQyxhQUN6QixRQUFpQixVQUFUakUsR0FBNkIsV0FBVEEsSUFBc0I1QyxFQUFLa0UsT0FBU0EsR0FRbEUsUUFBUytLLElBQXdCclEsR0FDaEMsTUFBT3VQLElBQWEsU0FBVWUsR0FFN0IsTUFEQUEsSUFBWUEsRUFDTGYsR0FBYSxTQUFVdEIsRUFBTXJELEdBQ25DLEdBQUluSCxHQUNIOE0sRUFBZXZRLEtBQVFpTyxFQUFLMU0sT0FBUStPLEdBQ3BDL00sRUFBSWdOLEVBQWFoUCxNQUdsQixPQUFRZ0MsSUFDRjBLLEVBQU94SyxFQUFJOE0sRUFBYWhOLE1BQzVCMEssRUFBS3hLLEtBQU9tSCxFQUFRbkgsR0FBS3dLLEVBQUt4SyxTQVduQzJHLEVBQVE0RCxHQUFPNUQsTUFBUSxTQUFVaEosR0FHaEMsR0FBSTVDLEdBQWtCNEMsSUFBU0EsRUFBS1MsZUFBaUJULEdBQU01QyxlQUMzRCxPQUFPQSxHQUErQyxTQUE3QkEsRUFBZ0J3SixVQUFzQixHQUloRWdDLEVBQVVnRSxHQUFPaEUsV0FPakJRLEVBQWN3RCxHQUFPeEQsWUFBYyxTQUFVZ0csR0FDNUMsR0FBSUMsR0FBTUQsRUFBT0EsRUFBSzNPLGVBQWlCMk8sRUFBTzFGLEVBQzdDNEYsRUFBU0QsRUFBSUUsV0FHZCxPQUFLRixLQUFRblMsR0FBNkIsSUFBakJtUyxFQUFJN08sVUFBbUI2TyxFQUFJalMsaUJBS3BERixFQUFXbVMsRUFDWGxTLEVBQVVrUyxFQUFJalMsZ0JBR2RpTSxHQUFrQkwsRUFBT3FHLEdBTXBCQyxHQUFVQSxFQUFPRSxhQUFlRixJQUFXQSxFQUFPRyxLQUN0REgsRUFBT0UsWUFBYSxpQkFBa0IsV0FDckNwRyxNQVNGUixFQUFRaUMsV0FBYXVELEdBQU8sU0FBVUMsR0FFckMsTUFEQUEsR0FBSXFCLFVBQVksS0FDUnJCLEVBQUlkLGFBQWEsZUFPMUIzRSxFQUFRN0MscUJBQXVCcUksR0FBTyxTQUFVQyxHQUUvQyxNQURBQSxHQUFJN0gsWUFBYTZJLEVBQUlNLGNBQWMsTUFDM0J0QixFQUFJdEkscUJBQXFCLEtBQUs1RixTQUl2Q3lJLEVBQVF3RSx1QkFBeUJnQixHQUFPLFNBQVVDLEdBUWpELE1BUEFBLEdBQUl1QixVQUFZLCtDQUloQnZCLEVBQUl3QixXQUFXSCxVQUFZLElBR3VCLElBQTNDckIsRUFBSWpCLHVCQUF1QixLQUFLak4sU0FPeEN5SSxFQUFRa0gsUUFBVTFCLEdBQU8sU0FBVUMsR0FFbEMsTUFEQWxSLEdBQVFxSixZQUFhNkgsR0FBTWxCLEdBQUsvSixHQUN4QmlNLEVBQUlVLG9CQUFzQlYsRUFBSVUsa0JBQW1CM00sR0FBVWpELFNBSS9EeUksRUFBUWtILFNBQ1poSCxFQUFLekksS0FBUyxHQUFJLFNBQVU4TSxFQUFJeE8sR0FDL0IsU0FBWUEsR0FBUW1DLGlCQUFtQnNKLEdBQWdCZixFQUFpQixDQUN2RSxHQUFJeUQsR0FBSW5PLEVBQVFtQyxlQUFnQnFNLEVBR2hDLE9BQU9MLElBQUtBLEVBQUUvTCxZQUFjK0wsUUFHOUJoRSxFQUFLa0gsT0FBVyxHQUFJLFNBQVU3QyxHQUM3QixHQUFJOEMsR0FBUzlDLEVBQUc1SixRQUFTNkksR0FBV0MsR0FDcEMsT0FBTyxVQUFVck0sR0FDaEIsTUFBT0EsR0FBS3VOLGFBQWEsUUFBVTBDLFlBTTlCbkgsR0FBS3pJLEtBQVMsR0FFckJ5SSxFQUFLa0gsT0FBVyxHQUFLLFNBQVU3QyxHQUM5QixHQUFJOEMsR0FBUzlDLEVBQUc1SixRQUFTNkksR0FBV0MsR0FDcEMsT0FBTyxVQUFVck0sR0FDaEIsR0FBSW9QLFNBQWNwUCxHQUFLa1EsbUJBQXFCOUYsR0FBZ0JwSyxFQUFLa1EsaUJBQWlCLEtBQ2xGLE9BQU9kLElBQVFBLEVBQUt0SSxRQUFVbUosS0FNakNuSCxFQUFLekksS0FBVSxJQUFJdUksRUFBUTdDLHFCQUMxQixTQUFVb0ssRUFBS3hSLEdBQ2QsYUFBWUEsR0FBUW9ILHVCQUF5QnFFLEVBQ3JDekwsRUFBUW9ILHFCQUFzQm9LLEdBRHRDLFdBSUQsU0FBVUEsRUFBS3hSLEdBQ2QsR0FBSXFCLEdBQ0g0RixLQUNBekQsRUFBSSxFQUNKOEUsRUFBVXRJLEVBQVFvSCxxQkFBc0JvSyxFQUd6QyxJQUFhLE1BQVJBLEVBQWMsQ0FDbEIsTUFBU25RLEVBQU9pSCxFQUFROUUsS0FDQSxJQUFsQm5DLEVBQUtRLFVBQ1RvRixFQUFJN0gsS0FBTWlDLEVBSVosT0FBTzRGLEdBRVIsTUFBT3FCLElBSVQ2QixFQUFLekksS0FBWSxNQUFJdUksRUFBUXdFLHdCQUEwQixTQUFVc0MsRUFBVy9RLEdBQzNFLGFBQVlBLEdBQVF5Tyx5QkFBMkJoRCxHQUFnQmYsRUFDdkQxSyxFQUFReU8sdUJBQXdCc0MsR0FEeEMsV0FXRG5HLEtBT0FELE1BRU1WLEVBQVF5RSxJQUFNckIsRUFBUXRMLEtBQU0yTyxFQUFJMUIscUJBR3JDUyxHQUFPLFNBQVVDLEdBTWhCQSxFQUFJdUIsVUFBWSxpREFJVnZCLEVBQUlWLGlCQUFpQixjQUFjeE4sUUFDeENtSixFQUFVdkwsS0FBTSxNQUFRMk0sRUFBYSxhQUFlRCxFQUFXLEtBTTFENEQsRUFBSVYsaUJBQWlCLFlBQVl4TixRQUN0Q21KLEVBQVV2TCxLQUFLLGNBSWpCcVEsR0FBTyxTQUFVQyxHQU9oQixHQUFJK0IsR0FBUWYsRUFBSWxLLGNBQWMsUUFDOUJpTCxHQUFNNUMsYUFBYyxPQUFRLFVBQzVCYSxFQUFJN0gsWUFBYTRKLEdBQVE1QyxhQUFjLElBQUssSUFFdkNhLEVBQUlWLGlCQUFpQixXQUFXeE4sUUFDcENtSixFQUFVdkwsS0FBTSxTQUFXMk0sRUFBYSxnQkFLbkMyRCxFQUFJVixpQkFBaUIsWUFBWXhOLFFBQ3RDbUosRUFBVXZMLEtBQU0sV0FBWSxhQUk3QnNRLEVBQUlWLGlCQUFpQixRQUNyQnJFLEVBQVV2TCxLQUFLLFlBSVg2SyxFQUFReUgsZ0JBQWtCckUsRUFBUXRMLEtBQU84SSxFQUFVck0sRUFBUW1ULHVCQUNoRW5ULEVBQVFvVCxvQkFDUnBULEVBQVFxVCxrQkFDUnJULEVBQVFzVCxxQkFFUnJDLEdBQU8sU0FBVUMsR0FHaEJ6RixFQUFROEgsa0JBQW9CbEgsRUFBUXRJLEtBQU1tTixFQUFLLE9BSS9DN0UsRUFBUXRJLEtBQU1tTixFQUFLLGFBQ25COUUsRUFBY3hMLEtBQU0sS0FBTStNLEtBSTVCeEIsRUFBWUEsRUFBVW5KLFFBQWM2SyxPQUFRMUIsRUFBVW9FLEtBQUssTUFDM0RuRSxFQUFnQkEsRUFBY3BKLFFBQWM2SyxPQUFRekIsRUFBY21FLEtBQUssTUFRdkVqRSxFQUFXdUMsRUFBUXRMLEtBQU12RCxFQUFRc00sV0FBY3RNLEVBQVF3VCx3QkFDdEQsU0FBVXpHLEVBQUdDLEdBQ1osR0FBSXlHLEdBQXVCLElBQWYxRyxFQUFFMUosU0FBaUIwSixFQUFFOU0sZ0JBQWtCOE0sRUFDbEQyRyxFQUFNMUcsR0FBS0EsRUFBRXBKLFVBQ2QsT0FBT21KLEtBQU0yRyxNQUFXQSxHQUF3QixJQUFqQkEsRUFBSXJRLFlBQ2xDb1EsRUFBTW5ILFNBQ0xtSCxFQUFNbkgsU0FBVW9ILEdBQ2hCM0csRUFBRXlHLHlCQUE4RCxHQUFuQ3pHLEVBQUV5Ryx3QkFBeUJFLE1BRzNELFNBQVUzRyxFQUFHQyxHQUNaLEdBQUtBLEVBQ0osTUFBU0EsRUFBSUEsRUFBRXBKLFdBQ2QsR0FBS29KLElBQU1ELEVBQ1YsT0FBTyxDQUlWLFFBQU8sR0FPVEQsRUFBWTlNLEVBQVF3VCx3QkFDcEIsU0FBVXpHLEVBQUdDLEdBR1osR0FBS0QsSUFBTUMsRUFFVixNQURBSCxJQUFlLEVBQ1IsQ0FHUixJQUFJOEcsR0FBVTNHLEVBQUV3Ryx5QkFBMkJ6RyxFQUFFeUcseUJBQTJCekcsRUFBRXlHLHdCQUF5QnhHLEVBRW5HLE9BQUsyRyxHQUVXLEVBQVZBLElBQ0ZsSSxFQUFRbUksY0FBZ0I1RyxFQUFFd0csd0JBQXlCekcsS0FBUTRHLEVBR3hENUcsSUFBTW1GLEdBQU81RixFQUFTQyxFQUFjUSxHQUNqQyxHQUVIQyxJQUFNa0YsR0FBTzVGLEVBQVNDLEVBQWNTLEdBQ2pDLEVBSURoQixFQUNKaEwsRUFBUStDLEtBQU1pSSxFQUFXZSxHQUFNL0wsRUFBUStDLEtBQU1pSSxFQUFXZ0IsR0FDMUQsRUFHZSxFQUFWMkcsRUFBYyxHQUFLLEVBSXBCNUcsRUFBRXlHLHdCQUEwQixHQUFLLEdBRXpDLFNBQVV6RyxFQUFHQyxHQUNaLEdBQUl3RSxHQUNIeE0sRUFBSSxFQUNKNk8sRUFBTTlHLEVBQUVuSixXQUNSOFAsRUFBTTFHLEVBQUVwSixXQUNSa1EsR0FBTy9HLEdBQ1BnSCxHQUFPL0csRUFHUixJQUFLRCxJQUFNQyxFQUVWLE1BREFILElBQWUsRUFDUixDQUdELEtBQU1nSCxJQUFRSCxFQUNwQixNQUFPM0csS0FBTW1GLEVBQU0sR0FDbEJsRixJQUFNa0YsRUFBTSxFQUNaMkIsRUFBTSxHQUNOSCxFQUFNLEVBQ04xSCxFQUNFaEwsRUFBUStDLEtBQU1pSSxFQUFXZSxHQUFNL0wsRUFBUStDLEtBQU1pSSxFQUFXZ0IsR0FDMUQsQ0FHSyxJQUFLNkcsSUFBUUgsRUFDbkIsTUFBT25DLElBQWN4RSxFQUFHQyxFQUl6QndFLEdBQU16RSxDQUNOLE9BQVN5RSxFQUFNQSxFQUFJNU4sV0FDbEJrUSxFQUFHRSxRQUFTeEMsRUFFYkEsR0FBTXhFLENBQ04sT0FBU3dFLEVBQU1BLEVBQUk1TixXQUNsQm1RLEVBQUdDLFFBQVN4QyxFQUliLE9BQVFzQyxFQUFHOU8sS0FBTytPLEVBQUcvTyxHQUNwQkEsR0FHRCxPQUFPQSxHQUVOdU0sR0FBY3VDLEVBQUc5TyxHQUFJK08sRUFBRy9PLElBR3hCOE8sRUFBRzlPLEtBQU91SCxFQUFlLEdBQ3pCd0gsRUFBRy9PLEtBQU91SCxFQUFlLEVBQ3pCLEdBR0syRixHQTFVQ25TLEdBNlVUMFAsR0FBT3BELFFBQVUsU0FBVTRILEVBQU1DLEdBQ2hDLE1BQU96RSxJQUFRd0UsRUFBTSxLQUFNLEtBQU1DLElBR2xDekUsR0FBT3lELGdCQUFrQixTQUFVclEsRUFBTW9SLEdBU3hDLElBUE9wUixFQUFLUyxlQUFpQlQsS0FBVzlDLEdBQ3ZDa00sRUFBYXBKLEdBSWRvUixFQUFPQSxFQUFLN04sUUFBUzZILEVBQWtCLGFBRWxDeEMsRUFBUXlILGtCQUFtQmhILEdBQzVCRSxHQUFrQkEsRUFBYzdJLEtBQU0wUSxJQUN0QzlILEdBQWtCQSxFQUFVNUksS0FBTTBRLElBRXJDLElBQ0MsR0FBSTdQLEdBQU1pSSxFQUFRdEksS0FBTWxCLEVBQU1vUixFQUc5QixJQUFLN1AsR0FBT3FILEVBQVE4SCxtQkFHbEIxUSxFQUFLOUMsVUFBdUMsS0FBM0I4QyxFQUFLOUMsU0FBU3NELFNBQ2hDLE1BQU9lLEdBRVAsTUFBTW1ELElBR1QsTUFBT2tJLElBQVF3RSxFQUFNbFUsRUFBVSxNQUFPOEMsSUFBUUcsT0FBUyxHQUd4RHlNLEdBQU9uRCxTQUFXLFNBQVU5SyxFQUFTcUIsR0FLcEMsT0FIT3JCLEVBQVE4QixlQUFpQjlCLEtBQWN6QixHQUM3Q2tNLEVBQWF6SyxHQUVQOEssRUFBVTlLLEVBQVNxQixJQUczQjRNLEdBQU8vTCxLQUFPLFNBQVViLEVBQU00QyxJQUV0QjVDLEVBQUtTLGVBQWlCVCxLQUFXOUMsR0FDdkNrTSxFQUFhcEosRUFHZCxJQUFJcEIsR0FBS2tLLEVBQUsyRixXQUFZN0wsRUFBS2lFLGVBRTlCeUssRUFBTTFTLEdBQU0wTCxFQUFPcEosS0FBTTRILEVBQUsyRixXQUFZN0wsRUFBS2lFLGVBQzlDakksRUFBSW9CLEVBQU00QyxHQUFPeUcsR0FDakJ4TSxTQUVGLE9BQU95VSxLQUFRelUsVUFDZCtMLEVBQVFpQyxhQUFleEIsRUFDdEJySixFQUFLdU4sYUFBYzNLLElBQ2xCME8sRUFBTXRSLEVBQUtrUSxpQkFBaUJ0TixLQUFVME8sRUFBSUMsVUFDMUNELEVBQUl4SyxNQUNKLEtBQ0Z3SyxHQUdGMUUsR0FBT2hJLE1BQVEsU0FBVUMsR0FDeEIsS0FBVUMsT0FBTywwQ0FBNENELElBTzlEK0gsR0FBTzRFLFdBQWEsU0FBVXZLLEdBQzdCLEdBQUlqSCxHQUNIeVIsS0FDQXBQLEVBQUksRUFDSkYsRUFBSSxDQU9MLElBSkE2SCxHQUFnQnBCLEVBQVE4SSxpQkFDeEJ2SSxHQUFhUCxFQUFRK0ksWUFBYzFLLEVBQVFoSixNQUFPLEdBQ2xEZ0osRUFBUXpFLEtBQU15SCxHQUVURCxFQUFlLENBQ25CLE1BQVNoSyxFQUFPaUgsRUFBUTlFLEtBQ2xCbkMsSUFBU2lILEVBQVM5RSxLQUN0QkUsRUFBSW9QLEVBQVcxVCxLQUFNb0UsR0FHdkIsT0FBUUUsSUFDUDRFLEVBQVF4RSxPQUFRZ1AsRUFBWXBQLEdBQUssR0FJbkMsTUFBTzRFLElBT1I4QixFQUFVNkQsR0FBTzdELFFBQVUsU0FBVS9JLEdBQ3BDLEdBQUlvUCxHQUNIN04sRUFBTSxHQUNOWSxFQUFJLEVBQ0ozQixFQUFXUixFQUFLUSxRQUVqQixJQUFNQSxHQU1DLEdBQWtCLElBQWJBLEdBQStCLElBQWJBLEdBQStCLEtBQWJBLEVBQWtCLENBR2pFLEdBQWlDLGdCQUFyQlIsR0FBSzRSLFlBQ2hCLE1BQU81UixHQUFLNFIsV0FHWixLQUFNNVIsRUFBT0EsRUFBSzZQLFdBQVk3UCxFQUFNQSxFQUFPQSxFQUFLOE8sWUFDL0N2TixHQUFPd0gsRUFBUy9JLE9BR1osSUFBa0IsSUFBYlEsR0FBK0IsSUFBYkEsRUFDN0IsTUFBT1IsR0FBSzZSLGNBaEJaLE1BQVN6QyxFQUFPcFAsRUFBS21DLEdBQUtBLElBRXpCWixHQUFPd0gsRUFBU3FHLEVBa0JsQixPQUFPN04sSUFHUnVILEVBQU84RCxHQUFPa0YsV0FHYjdELFlBQWEsR0FFYjhELGFBQWM1RCxHQUVkcE8sTUFBT3dMLEVBRVBrRCxjQUVBcE8sUUFFQTJSLFVBQ0NDLEtBQU9DLElBQUssYUFBY2xRLE9BQU8sR0FDakNtUSxLQUFPRCxJQUFLLGNBQ1pFLEtBQU9GLElBQUssa0JBQW1CbFEsT0FBTyxHQUN0Q3FRLEtBQU9ILElBQUssb0JBR2JJLFdBQ0MzRyxLQUFRLFNBQVU1TCxHQVVqQixNQVRBQSxHQUFNLEdBQUtBLEVBQU0sR0FBR3dELFFBQVM2SSxHQUFXQyxJQUd4Q3RNLEVBQU0sSUFBT0EsRUFBTSxJQUFNQSxFQUFNLElBQU0sSUFBS3dELFFBQVM2SSxHQUFXQyxJQUU1QyxPQUFidE0sRUFBTSxLQUNWQSxFQUFNLEdBQUssSUFBTUEsRUFBTSxHQUFLLEtBR3RCQSxFQUFNOUIsTUFBTyxFQUFHLElBR3hCNE4sTUFBUyxTQUFVOUwsR0E2QmxCLE1BbEJBQSxHQUFNLEdBQUtBLEVBQU0sR0FBRzhHLGNBRVksUUFBM0I5RyxFQUFNLEdBQUc5QixNQUFPLEVBQUcsSUFFakI4QixFQUFNLElBQ1g2TSxHQUFPaEksTUFBTzdFLEVBQU0sSUFLckJBLEVBQU0sS0FBUUEsRUFBTSxHQUFLQSxFQUFNLElBQU1BLEVBQU0sSUFBTSxHQUFLLEdBQW1CLFNBQWJBLEVBQU0sSUFBOEIsUUFBYkEsRUFBTSxLQUN6RkEsRUFBTSxLQUFVQSxFQUFNLEdBQUtBLEVBQU0sSUFBcUIsUUFBYkEsRUFBTSxLQUdwQ0EsRUFBTSxJQUNqQjZNLEdBQU9oSSxNQUFPN0UsRUFBTSxJQUdkQSxHQUdSNkwsT0FBVSxTQUFVN0wsR0FDbkIsR0FBSXdTLEdBQ0hDLEdBQVl6UyxFQUFNLElBQU1BLEVBQU0sRUFFL0IsT0FBS3dMLEdBQWlCLE1BQUU3SyxLQUFNWCxFQUFNLElBQzVCLE1BSUhBLEVBQU0sSUFBTUEsRUFBTSxLQUFPbEQsVUFDN0JrRCxFQUFNLEdBQUtBLEVBQU0sR0FHTnlTLEdBQVluSCxFQUFRM0ssS0FBTThSLEtBRXBDRCxFQUFTakYsR0FBVWtGLEdBQVUsTUFFN0JELEVBQVNDLEVBQVNyVSxRQUFTLElBQUtxVSxFQUFTclMsT0FBU29TLEdBQVdDLEVBQVNyUyxVQUd2RUosRUFBTSxHQUFLQSxFQUFNLEdBQUc5QixNQUFPLEVBQUdzVSxHQUM5QnhTLEVBQU0sR0FBS3lTLEVBQVN2VSxNQUFPLEVBQUdzVSxJQUl4QnhTLEVBQU05QixNQUFPLEVBQUcsTUFJekIrUixRQUVDdEUsSUFBTyxTQUFVK0csR0FDaEIsR0FBSTdMLEdBQVc2TCxFQUFpQmxQLFFBQVM2SSxHQUFXQyxJQUFZeEYsYUFDaEUsT0FBNEIsTUFBckI0TCxFQUNOLFdBQWEsT0FBTyxHQUNwQixTQUFVelMsR0FDVCxNQUFPQSxHQUFLNEcsVUFBWTVHLEVBQUs0RyxTQUFTQyxnQkFBa0JELElBSTNENkUsTUFBUyxTQUFVaUUsR0FDbEIsR0FBSWdELEdBQVU5SSxFQUFZOEYsRUFBWSxJQUV0QyxPQUFPZ0QsS0FDTEEsRUFBYzFILE9BQVEsTUFBUU4sRUFBYSxJQUFNZ0YsRUFBWSxJQUFNaEYsRUFBYSxTQUNqRmQsRUFBWThGLEVBQVcsU0FBVTFQLEdBQ2hDLE1BQU8wUyxHQUFRaFMsS0FBZ0MsZ0JBQW5CVixHQUFLMFAsV0FBMEIxUCxFQUFLMFAsaUJBQW9CMVAsR0FBS3VOLGVBQWlCbkQsR0FBZ0JwSyxFQUFLdU4sYUFBYSxVQUFZLE9BSTNKNUIsS0FBUSxTQUFVL0ksRUFBTStQLEVBQVVDLEdBQ2pDLE1BQU8sVUFBVTVTLEdBQ2hCLEdBQUk2UyxHQUFTakcsR0FBTy9MLEtBQU1iLEVBQU00QyxFQUVoQyxPQUFlLE9BQVZpUSxFQUNnQixPQUFiRixFQUVGQSxHQUlORSxHQUFVLEdBRVUsTUFBYkYsRUFBbUJFLElBQVdELEVBQ3ZCLE9BQWJELEVBQW9CRSxJQUFXRCxFQUNsQixPQUFiRCxFQUFvQkMsR0FBcUMsSUFBNUJDLEVBQU8xVSxRQUFTeVUsR0FDaEMsT0FBYkQsRUFBb0JDLEdBQVNDLEVBQU8xVSxRQUFTeVUsR0FBVSxHQUMxQyxPQUFiRCxFQUFvQkMsR0FBU0MsRUFBTzVVLE9BQVEyVSxFQUFNelMsVUFBYXlTLEVBQ2xELE9BQWJELEdBQXNCLElBQU1FLEVBQVMsS0FBTTFVLFFBQVN5VSxHQUFVLEdBQ2pELE9BQWJELEVBQW9CRSxJQUFXRCxHQUFTQyxFQUFPNVUsTUFBTyxFQUFHMlUsRUFBTXpTLE9BQVMsS0FBUXlTLEVBQVEsS0FDeEYsSUFaTyxJQWdCVi9HLE1BQVMsU0FBVTNILEVBQU00TyxFQUFNNUQsRUFBVWxOLEVBQU9FLEdBQy9DLEdBQUk2USxHQUFnQyxRQUF2QjdPLEVBQUtqRyxNQUFPLEVBQUcsR0FDM0IrVSxFQUErQixTQUFyQjlPLEVBQUtqRyxNQUFPLElBQ3RCZ1YsRUFBa0IsWUFBVEgsQ0FFVixPQUFpQixLQUFWOVEsR0FBd0IsSUFBVEUsRUFHckIsU0FBVWxDLEdBQ1QsUUFBU0EsRUFBS2UsWUFHZixTQUFVZixFQUFNckIsRUFBU2dILEdBQ3hCLEdBQUlxSSxHQUFPa0YsRUFBWTlELEVBQU1SLEVBQU11RSxFQUFXQyxFQUM3Q2xCLEVBQU1hLElBQVdDLEVBQVUsY0FBZ0Isa0JBQzNDMUQsRUFBU3RQLEVBQUtlLFdBQ2Q2QixFQUFPcVEsR0FBVWpULEVBQUs0RyxTQUFTQyxjQUMvQndNLEdBQVkxTixJQUFRc04sQ0FFckIsSUFBSzNELEVBQVMsQ0FHYixHQUFLeUQsRUFBUyxDQUNiLE1BQVFiLEVBQU0sQ0FDYjlDLEVBQU9wUCxDQUNQLE9BQVNvUCxFQUFPQSxFQUFNOEMsR0FDckIsR0FBS2UsRUFBUzdELEVBQUt4SSxTQUFTQyxnQkFBa0JqRSxFQUF5QixJQUFsQndNLEVBQUs1TyxTQUN6RCxPQUFPLENBSVQ0UyxHQUFRbEIsRUFBZSxTQUFUaE8sSUFBb0JrUCxHQUFTLGNBRTVDLE9BQU8sRUFNUixHQUhBQSxHQUFVSixFQUFVMUQsRUFBT08sV0FBYVAsRUFBT2dFLFdBRzFDTixHQUFXSyxFQUFXLENBRTFCSCxFQUFhNUQsRUFBUWxNLEtBQWNrTSxFQUFRbE0sT0FDM0M0SyxFQUFRa0YsRUFBWWhQLE9BQ3BCaVAsRUFBWW5GLEVBQU0sS0FBT3JFLEdBQVdxRSxFQUFNLEdBQzFDWSxFQUFPWixFQUFNLEtBQU9yRSxHQUFXcUUsRUFBTSxHQUNyQ29CLEVBQU8rRCxHQUFhN0QsRUFBT2hLLFdBQVk2TixFQUV2QyxPQUFTL0QsSUFBUytELEdBQWEvRCxHQUFRQSxFQUFNOEMsS0FHM0N0RCxFQUFPdUUsRUFBWSxJQUFNQyxFQUFNN0ksTUFHaEMsR0FBdUIsSUFBbEI2RSxFQUFLNU8sWUFBb0JvTyxHQUFRUSxJQUFTcFAsRUFBTyxDQUNyRGtULEVBQVloUCxJQUFXeUYsRUFBU3dKLEVBQVd2RSxFQUMzQyxZQUtJLElBQUt5RSxJQUFhckYsR0FBU2hPLEVBQU1vRCxLQUFjcEQsRUFBTW9ELFFBQWtCYyxLQUFXOEosRUFBTSxLQUFPckUsRUFDckdpRixFQUFPWixFQUFNLE9BS2IsT0FBU29CLElBQVMrRCxHQUFhL0QsR0FBUUEsRUFBTThDLEtBQzNDdEQsRUFBT3VFLEVBQVksSUFBTUMsRUFBTTdJLE1BRWhDLElBQU8wSSxFQUFTN0QsRUFBS3hJLFNBQVNDLGdCQUFrQmpFLEVBQXlCLElBQWxCd00sRUFBSzVPLGFBQXNCb08sSUFFNUV5RSxLQUNIakUsRUFBTWhNLEtBQWNnTSxFQUFNaE0sUUFBa0JjLElBQVd5RixFQUFTaUYsSUFHN0RRLElBQVNwUCxHQUNiLEtBUUosT0FEQTRPLElBQVExTSxFQUNEME0sSUFBUzVNLEdBQTRCLElBQWpCNE0sRUFBTzVNLEdBQWU0TSxFQUFPNU0sR0FBUyxLQUtyRTRKLE9BQVUsU0FBVTJILEVBQVFyRSxHQUszQixHQUFJdk4sR0FDSC9DLEVBQUtrSyxFQUFLZ0MsUUFBU3lJLElBQVl6SyxFQUFLMEssV0FBWUQsRUFBTzFNLGdCQUN0RCtGLEdBQU9oSSxNQUFPLHVCQUF5QjJPLEVBS3pDLE9BQUszVSxHQUFJd0UsR0FDRHhFLEVBQUlzUSxHQUlQdFEsRUFBR3VCLE9BQVMsR0FDaEJ3QixHQUFTNFIsRUFBUUEsRUFBUSxHQUFJckUsR0FDdEJwRyxFQUFLMEssV0FBV2pWLGVBQWdCZ1YsRUFBTzFNLGVBQzdDc0gsR0FBYSxTQUFVdEIsRUFBTXJELEdBQzVCLEdBQUlpSyxHQUNIQyxFQUFVOVUsRUFBSWlPLEVBQU1xQyxHQUNwQi9NLEVBQUl1UixFQUFRdlQsTUFDYixPQUFRZ0MsSUFDUHNSLEVBQU10VixFQUFRK0MsS0FBTTJMLEVBQU02RyxFQUFRdlIsSUFDbEMwSyxFQUFNNEcsS0FBV2pLLEVBQVNpSyxHQUFRQyxFQUFRdlIsTUFHNUMsU0FBVW5DLEdBQ1QsTUFBT3BCLEdBQUlvQixFQUFNLEVBQUcyQixLQUloQi9DLElBSVRrTSxTQUVDNkksSUFBT3hGLEdBQWEsU0FBVXpQLEdBSTdCLEdBQUkwUixNQUNIbkosS0FDQTJNLEVBQVUzSyxFQUFTdkssRUFBUzZFLFFBQVN3SCxFQUFPLE1BRTdDLE9BQU82SSxHQUFTeFEsR0FDZitLLEdBQWEsU0FBVXRCLEVBQU1yRCxFQUFTN0ssRUFBU2dILEdBQzlDLEdBQUkzRixHQUNINlQsRUFBWUQsRUFBUy9HLEVBQU0sS0FBTWxILE1BQ2pDeEQsRUFBSTBLLEVBQUsxTSxNQUdWLE9BQVFnQyxLQUNEbkMsRUFBTzZULEVBQVUxUixNQUN0QjBLLEVBQUsxSyxLQUFPcUgsRUFBUXJILEdBQUtuQyxNQUk1QixTQUFVQSxFQUFNckIsRUFBU2dILEdBR3hCLE1BRkF5SyxHQUFNLEdBQUtwUSxFQUNYNFQsRUFBU3hELEVBQU8sS0FBTXpLLEVBQUtzQixJQUNuQkEsRUFBUXNELFNBSW5CdUosSUFBTzNGLEdBQWEsU0FBVXpQLEdBQzdCLE1BQU8sVUFBVXNCLEdBQ2hCLE1BQU80TSxJQUFRbE8sRUFBVXNCLEdBQU9HLE9BQVMsS0FJM0NzSixTQUFZMEUsR0FBYSxTQUFVN0gsR0FDbEMsTUFBTyxVQUFVdEcsR0FDaEIsT0FBU0EsRUFBSzRSLGFBQWU1UixFQUFLK1QsV0FBYWhMLEVBQVMvSSxJQUFTN0IsUUFBU21JLEdBQVMsTUFXckYwTixLQUFRN0YsR0FBYyxTQUFVNkYsR0FNL0IsTUFKTTFJLEdBQVk1SyxLQUFLc1QsR0FBUSxLQUM5QnBILEdBQU9oSSxNQUFPLHFCQUF1Qm9QLEdBRXRDQSxFQUFPQSxFQUFLelEsUUFBUzZJLEdBQVdDLElBQVl4RixjQUNyQyxTQUFVN0csR0FDaEIsR0FBSWlVLEVBQ0osR0FDQyxJQUFNQSxFQUFXNUssRUFDaEJySixFQUFLZ1UsS0FDTGhVLEVBQUt1TixhQUFhLGFBQWV2TixFQUFLdU4sYUFBYSxRQUduRCxNQURBMEcsR0FBV0EsRUFBU3BOLGNBQ2JvTixJQUFhRCxHQUEyQyxJQUFuQ0MsRUFBUzlWLFFBQVM2VixFQUFPLFlBRTVDaFUsRUFBT0EsRUFBS2UsYUFBaUMsSUFBbEJmLEVBQUtRLFNBQzNDLFFBQU8sS0FLVHlDLE9BQVUsU0FBVWpELEdBQ25CLEdBQUlrVSxHQUFPdFgsRUFBT0ssVUFBWUwsRUFBT0ssU0FBU2lYLElBQzlDLE9BQU9BLElBQVFBLEVBQUtqVyxNQUFPLEtBQVErQixFQUFLbU4sSUFHekNnSCxLQUFRLFNBQVVuVSxHQUNqQixNQUFPQSxLQUFTN0MsR0FHakJpWCxNQUFTLFNBQVVwVSxHQUNsQixNQUFPQSxLQUFTOUMsRUFBU21YLGlCQUFtQm5YLEVBQVNvWCxVQUFZcFgsRUFBU29YLGdCQUFrQnRVLEVBQUtrRSxNQUFRbEUsRUFBS3VVLE9BQVN2VSxFQUFLd1UsV0FJN0hDLFFBQVcsU0FBVXpVLEdBQ3BCLE1BQU9BLEdBQUswVSxZQUFhLEdBRzFCQSxTQUFZLFNBQVUxVSxHQUNyQixNQUFPQSxHQUFLMFUsWUFBYSxHQUcxQkMsUUFBVyxTQUFVM1UsR0FHcEIsR0FBSTRHLEdBQVc1RyxFQUFLNEcsU0FBU0MsYUFDN0IsT0FBcUIsVUFBYkQsS0FBMEI1RyxFQUFLMlUsU0FBMEIsV0FBYi9OLEtBQTJCNUcsRUFBSzRVLFVBR3JGQSxTQUFZLFNBQVU1VSxHQU9yQixNQUpLQSxHQUFLZSxZQUNUZixFQUFLZSxXQUFXOFQsY0FHVjdVLEVBQUs0VSxZQUFhLEdBSTFCRSxNQUFTLFNBQVU5VSxHQU1sQixJQUFNQSxFQUFPQSxFQUFLNlAsV0FBWTdQLEVBQU1BLEVBQU9BLEVBQUs4TyxZQUMvQyxHQUFLOU8sRUFBSzRHLFNBQVcsS0FBeUIsSUFBbEI1RyxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsU0FDdkQsT0FBTyxDQUdULFFBQU8sR0FHUjhPLE9BQVUsU0FBVXRQLEdBQ25CLE9BQVE4SSxFQUFLZ0MsUUFBZSxNQUFHOUssSUFJaEMrVSxPQUFVLFNBQVUvVSxHQUNuQixNQUFPa00sSUFBUXhMLEtBQU1WLEVBQUs0RyxXQUczQndKLE1BQVMsU0FBVXBRLEdBQ2xCLE1BQU9pTSxHQUFRdkwsS0FBTVYsRUFBSzRHLFdBRzNCb08sT0FBVSxTQUFVaFYsR0FDbkIsR0FBSTRDLEdBQU81QyxFQUFLNEcsU0FBU0MsYUFDekIsT0FBZ0IsVUFBVGpFLEdBQWtDLFdBQWQ1QyxFQUFLa0UsTUFBOEIsV0FBVHRCLEdBR3REMEQsS0FBUSxTQUFVdEcsR0FDakIsR0FBSWEsRUFHSixPQUF1QyxVQUFoQ2IsRUFBSzRHLFNBQVNDLGVBQ04sU0FBZDdHLEVBQUtrRSxPQUNtQyxPQUFyQ3JELEVBQU9iLEVBQUt1TixhQUFhLFVBQW9CMU0sRUFBS2dHLGdCQUFrQjdHLEVBQUtrRSxPQUk5RWxDLE1BQVNpTixHQUF1QixXQUMvQixPQUFTLEtBR1YvTSxLQUFRK00sR0FBdUIsU0FBVUUsRUFBY2hQLEdBQ3RELE9BQVNBLEVBQVMsS0FHbkI4QixHQUFNZ04sR0FBdUIsU0FBVUUsRUFBY2hQLEVBQVErTyxHQUM1RCxPQUFvQixFQUFYQSxFQUFlQSxFQUFXL08sRUFBUytPLEtBRzdDK0YsS0FBUWhHLEdBQXVCLFNBQVVFLEVBQWNoUCxHQUN0RCxHQUFJZ0MsR0FBSSxDQUNSLE1BQVloQyxFQUFKZ0MsRUFBWUEsR0FBSyxFQUN4QmdOLEVBQWFwUixLQUFNb0UsRUFFcEIsT0FBT2dOLEtBR1IrRixJQUFPakcsR0FBdUIsU0FBVUUsRUFBY2hQLEdBQ3JELEdBQUlnQyxHQUFJLENBQ1IsTUFBWWhDLEVBQUpnQyxFQUFZQSxHQUFLLEVBQ3hCZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sS0FHUmdHLEdBQU1sRyxHQUF1QixTQUFVRSxFQUFjaFAsRUFBUStPLEdBQzVELEdBQUkvTSxHQUFlLEVBQVgrTSxFQUFlQSxFQUFXL08sRUFBUytPLENBQzNDLFFBQVUvTSxHQUFLLEdBQ2RnTixFQUFhcFIsS0FBTW9FLEVBRXBCLE9BQU9nTixLQUdSaUcsR0FBTW5HLEdBQXVCLFNBQVVFLEVBQWNoUCxFQUFRK08sR0FDNUQsR0FBSS9NLEdBQWUsRUFBWCtNLEVBQWVBLEVBQVcvTyxFQUFTK08sQ0FDM0MsTUFBYy9PLElBQUpnQyxHQUNUZ04sRUFBYXBSLEtBQU1vRSxFQUVwQixPQUFPZ04sT0FLVnJHLEVBQUtnQyxRQUFhLElBQUloQyxFQUFLZ0MsUUFBWSxFQUd2QyxLQUFNM0ksS0FBT2tULE9BQU8sRUFBTUMsVUFBVSxFQUFNQyxNQUFNLEVBQU1DLFVBQVUsRUFBTUMsT0FBTyxHQUM1RTNNLEVBQUtnQyxRQUFTM0ksR0FBTTRNLEdBQW1CNU0sRUFFeEMsS0FBTUEsS0FBT3VULFFBQVEsRUFBTUMsT0FBTyxHQUNqQzdNLEVBQUtnQyxRQUFTM0ksR0FBTTZNLEdBQW9CN00sRUFJekMsU0FBU3FSLE9BQ1RBLEdBQVc1VCxVQUFZa0osRUFBSzhNLFFBQVU5TSxFQUFLZ0MsUUFDM0NoQyxFQUFLMEssV0FBYSxHQUFJQSxHQUV0QixTQUFTbEcsSUFBVTVPLEVBQVVtWCxHQUM1QixHQUFJbkMsR0FBUzNULEVBQU8rVixFQUFRNVIsRUFDM0I2UixFQUFPaEosRUFBUWlKLEVBQ2ZDLEVBQVNuTSxFQUFZcEwsRUFBVyxJQUVqQyxJQUFLdVgsRUFDSixNQUFPSixHQUFZLEVBQUlJLEVBQU9oWSxNQUFPLEVBR3RDOFgsR0FBUXJYLEVBQ1JxTyxLQUNBaUosRUFBYWxOLEVBQUt3SixTQUVsQixPQUFReUQsRUFBUSxHQUdUckMsSUFBWTNULEVBQVFrTCxFQUFPN0ssS0FBTTJWLE9BQ2pDaFcsSUFFSmdXLEVBQVFBLEVBQU05WCxNQUFPOEIsRUFBTSxHQUFHSSxTQUFZNFYsR0FFM0NoSixFQUFPaFAsS0FBTStYLE9BR2RwQyxHQUFVLEdBR0ozVCxFQUFRbUwsRUFBYTlLLEtBQU0yVixNQUNoQ3JDLEVBQVUzVCxFQUFNbU8sUUFDaEI0SCxFQUFPL1gsTUFDTitJLE1BQU80TSxFQUVQeFAsS0FBTW5FLEVBQU0sR0FBR3dELFFBQVN3SCxFQUFPLE9BRWhDZ0wsRUFBUUEsRUFBTTlYLE1BQU95VixFQUFRdlQsUUFJOUIsS0FBTStELElBQVE0RSxHQUFLa0gsU0FDWmpRLEVBQVF3TCxFQUFXckgsR0FBTzlELEtBQU0yVixLQUFjQyxFQUFZOVIsTUFDOURuRSxFQUFRaVcsRUFBWTlSLEdBQVFuRSxNQUM3QjJULEVBQVUzVCxFQUFNbU8sUUFDaEI0SCxFQUFPL1gsTUFDTitJLE1BQU80TSxFQUNQeFAsS0FBTUEsRUFDTnNGLFFBQVN6SixJQUVWZ1csRUFBUUEsRUFBTTlYLE1BQU95VixFQUFRdlQsUUFJL0IsS0FBTXVULEVBQ0wsTUFPRixNQUFPbUMsR0FDTkUsRUFBTTVWLE9BQ040VixFQUNDbkosR0FBT2hJLE1BQU9sRyxHQUVkb0wsRUFBWXBMLEVBQVVxTyxHQUFTOU8sTUFBTyxHQUd6QyxRQUFTd1AsSUFBWXFJLEdBQ3BCLEdBQUkzVCxHQUFJLEVBQ1BDLEVBQU0wVCxFQUFPM1YsT0FDYnpCLEVBQVcsRUFDWixNQUFZMEQsRUFBSkQsRUFBU0EsSUFDaEJ6RCxHQUFZb1gsRUFBTzNULEdBQUcyRSxLQUV2QixPQUFPcEksR0FHUixRQUFTd1gsSUFBZXRDLEVBQVN1QyxFQUFZQyxHQUM1QyxHQUFJbEUsR0FBTWlFLEVBQVdqRSxJQUNwQm1FLEVBQW1CRCxHQUFnQixlQUFSbEUsRUFDM0JvRSxFQUFXelUsR0FFWixPQUFPc1UsR0FBV25VLE1BRWpCLFNBQVVoQyxFQUFNckIsRUFBU2dILEdBQ3hCLE1BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsR0FBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLEVBQzNCLE1BQU96QyxHQUFTNVQsRUFBTXJCLEVBQVNnSCxJQU1sQyxTQUFVM0YsRUFBTXJCLEVBQVNnSCxHQUN4QixHQUFJWixHQUFNaUosRUFBT2tGLEVBQ2hCcUQsRUFBUzVNLEVBQVUsSUFBTTJNLENBRzFCLElBQUszUSxHQUNKLE1BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsSUFBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLElBQ3RCekMsRUFBUzVULEVBQU1yQixFQUFTZ0gsR0FDNUIsT0FBTyxNQUtWLE9BQVMzRixFQUFPQSxFQUFNa1MsR0FDckIsR0FBdUIsSUFBbEJsUyxFQUFLUSxVQUFrQjZWLEVBRTNCLEdBREFuRCxFQUFhbFQsRUFBTW9ELEtBQWNwRCxFQUFNb0QsUUFDakM0SyxFQUFRa0YsRUFBWWhCLEtBQVVsRSxFQUFNLEtBQU91SSxHQUNoRCxJQUFNeFIsRUFBT2lKLEVBQU0sT0FBUSxHQUFRakosSUFBUzhELEVBQzNDLE1BQU85RCxNQUFTLE1BS2pCLElBRkFpSixFQUFRa0YsRUFBWWhCLElBQVVxRSxHQUM5QnZJLEVBQU0sR0FBSzRGLEVBQVM1VCxFQUFNckIsRUFBU2dILElBQVNrRCxFQUN2Q21GLEVBQU0sTUFBTyxFQUNqQixPQUFPLEdBU2YsUUFBU3dJLElBQWdCQyxHQUN4QixNQUFPQSxHQUFTdFcsT0FBUyxFQUN4QixTQUFVSCxFQUFNckIsRUFBU2dILEdBQ3hCLEdBQUl4RCxHQUFJc1UsRUFBU3RXLE1BQ2pCLE9BQVFnQyxJQUNQLElBQU1zVSxFQUFTdFUsR0FBSW5DLEVBQU1yQixFQUFTZ0gsR0FDakMsT0FBTyxDQUdULFFBQU8sR0FFUjhRLEVBQVMsR0FHWCxRQUFTQyxJQUFVN0MsRUFBV3ZSLEVBQUswTixFQUFRclIsRUFBU2dILEdBQ25ELEdBQUkzRixHQUNIMlcsS0FDQXhVLEVBQUksRUFDSkMsRUFBTXlSLEVBQVUxVCxPQUNoQnlXLEVBQWdCLE1BQVB0VSxDQUVWLE1BQVlGLEVBQUpELEVBQVNBLEtBQ1ZuQyxFQUFPNlQsRUFBVTFSLE9BQ2hCNk4sR0FBVUEsRUFBUWhRLEVBQU1yQixFQUFTZ0gsTUFDdENnUixFQUFhNVksS0FBTWlDLEdBQ2Q0VyxHQUNKdFUsRUFBSXZFLEtBQU1vRSxHQU1kLE9BQU93VSxHQUdSLFFBQVNFLElBQVl2RSxFQUFXNVQsRUFBVWtWLEVBQVNrRCxFQUFZQyxFQUFZQyxHQU8xRSxNQU5LRixLQUFlQSxFQUFZMVQsS0FDL0IwVCxFQUFhRCxHQUFZQyxJQUVyQkMsSUFBZUEsRUFBWTNULEtBQy9CMlQsRUFBYUYsR0FBWUUsRUFBWUMsSUFFL0I3SSxHQUFhLFNBQVV0QixFQUFNNUYsRUFBU3RJLEVBQVNnSCxHQUNyRCxHQUFJc1IsR0FBTTlVLEVBQUduQyxFQUNaa1gsS0FDQUMsS0FDQUMsRUFBY25RLEVBQVE5RyxPQUd0Qm1CLEVBQVF1TCxHQUFRd0ssR0FBa0IzWSxHQUFZLElBQUtDLEVBQVE2QixVQUFhN0IsR0FBWUEsTUFHcEYyWSxHQUFZaEYsSUFBZXpGLEdBQVNuTyxFQUVuQzRDLEVBREFvVixHQUFVcFYsRUFBTzRWLEVBQVE1RSxFQUFXM1QsRUFBU2dILEdBRzlDNFIsRUFBYTNELEVBRVptRCxJQUFnQmxLLEVBQU95RixFQUFZOEUsR0FBZU4sTUFNakQ3UCxFQUNEcVEsQ0FRRixJQUxLMUQsR0FDSkEsRUFBUzBELEVBQVdDLEVBQVk1WSxFQUFTZ0gsR0FJckNtUixFQUFhLENBQ2pCRyxFQUFPUCxHQUFVYSxFQUFZSixHQUM3QkwsRUFBWUcsS0FBVXRZLEVBQVNnSCxHQUcvQnhELEVBQUk4VSxFQUFLOVcsTUFDVCxPQUFRZ0MsS0FDRG5DLEVBQU9pWCxFQUFLOVUsTUFDakJvVixFQUFZSixFQUFRaFYsTUFBU21WLEVBQVdILEVBQVFoVixJQUFPbkMsSUFLMUQsR0FBSzZNLEdBQ0osR0FBS2tLLEdBQWN6RSxFQUFZLENBQzlCLEdBQUt5RSxFQUFhLENBRWpCRSxLQUNBOVUsRUFBSW9WLEVBQVdwWCxNQUNmLE9BQVFnQyxLQUNEbkMsRUFBT3VYLEVBQVdwVixLQUV2QjhVLEVBQUtsWixLQUFPdVosRUFBVW5WLEdBQUtuQyxFQUc3QitXLEdBQVksS0FBT1EsS0FBa0JOLEVBQU10UixHQUk1Q3hELEVBQUlvVixFQUFXcFgsTUFDZixPQUFRZ0MsS0FDRG5DLEVBQU91WCxFQUFXcFYsTUFDdEI4VSxFQUFPRixFQUFhNVksRUFBUStDLEtBQU0yTCxFQUFNN00sR0FBU2tYLEVBQU8vVSxJQUFNLEtBRS9EMEssRUFBS29LLEtBQVVoUSxFQUFRZ1EsR0FBUWpYLFNBT2xDdVgsR0FBYWIsR0FDWmEsSUFBZXRRLEVBQ2RzUSxFQUFXOVUsT0FBUTJVLEVBQWFHLEVBQVdwWCxRQUMzQ29YLEdBRUdSLEVBQ0pBLEVBQVksS0FBTTlQLEVBQVNzUSxFQUFZNVIsR0FFdkM1SCxFQUFLK0QsTUFBT21GLEVBQVNzUSxLQU16QixRQUFTQyxJQUFtQjFCLEdBQzNCLEdBQUkyQixHQUFjN0QsRUFBU3ZSLEVBQzFCRCxFQUFNMFQsRUFBTzNWLE9BQ2J1WCxFQUFrQjVPLEVBQUtrSixTQUFVOEQsRUFBTyxHQUFHNVIsTUFDM0N5VCxFQUFtQkQsR0FBbUI1TyxFQUFLa0osU0FBUyxLQUNwRDdQLEVBQUl1VixFQUFrQixFQUFJLEVBRzFCRSxFQUFlMUIsR0FBZSxTQUFVbFcsR0FDdkMsTUFBT0EsS0FBU3lYLEdBQ2RFLEdBQWtCLEdBQ3JCRSxFQUFrQjNCLEdBQWUsU0FBVWxXLEdBQzFDLE1BQU83QixHQUFRK0MsS0FBTXVXLEVBQWN6WCxHQUFTLElBQzFDMlgsR0FBa0IsR0FDckJsQixHQUFhLFNBQVV6VyxFQUFNckIsRUFBU2dILEdBQ3JDLE9BQVUrUixJQUFxQi9SLEdBQU9oSCxJQUFZdUssTUFDaER1TyxFQUFlOVksR0FBUzZCLFNBQ3hCb1gsRUFBYzVYLEVBQU1yQixFQUFTZ0gsR0FDN0JrUyxFQUFpQjdYLEVBQU1yQixFQUFTZ0gsS0FHcEMsTUFBWXZELEVBQUpELEVBQVNBLElBQ2hCLEdBQU15UixFQUFVOUssRUFBS2tKLFNBQVU4RCxFQUFPM1QsR0FBRytCLE1BQ3hDdVMsR0FBYVAsR0FBY00sR0FBZ0JDLEdBQVk3QyxRQUNqRCxDQUlOLEdBSEFBLEVBQVU5SyxFQUFLa0gsT0FBUThGLEVBQU8zVCxHQUFHK0IsTUFBT3BDLE1BQU8sS0FBTWdVLEVBQU8zVCxHQUFHcUgsU0FHMURvSyxFQUFTeFEsR0FBWSxDQUd6QixJQURBZixJQUFNRixFQUNNQyxFQUFKQyxFQUFTQSxJQUNoQixHQUFLeUcsRUFBS2tKLFNBQVU4RCxFQUFPelQsR0FBRzZCLE1BQzdCLEtBR0YsT0FBTzJTLElBQ04xVSxFQUFJLEdBQUtxVSxHQUFnQkMsR0FDekJ0VSxFQUFJLEdBQUtzTCxHQUVScUksRUFBTzdYLE1BQU8sRUFBR2tFLEVBQUksR0FBSXRFLFFBQVNpSixNQUFnQyxNQUF6QmdQLEVBQVEzVCxFQUFJLEdBQUkrQixLQUFlLElBQU0sTUFDN0VYLFFBQVN3SCxFQUFPLE1BQ2xCNkksRUFDSXZSLEVBQUpGLEdBQVNxVixHQUFtQjFCLEVBQU83WCxNQUFPa0UsRUFBR0UsSUFDekNELEVBQUpDLEdBQVdtVixHQUFvQjFCLEVBQVNBLEVBQU83WCxNQUFPb0UsSUFDbERELEVBQUpDLEdBQVdvTCxHQUFZcUksSUFHekJXLEVBQVMxWSxLQUFNNlYsR0FJakIsTUFBTzRDLElBQWdCQyxHQUd4QixRQUFTcUIsSUFBMEJDLEVBQWlCQyxHQUVuRCxHQUFJQyxHQUFvQixFQUN2QkMsRUFBUUYsRUFBWTdYLE9BQVMsRUFDN0JnWSxFQUFZSixFQUFnQjVYLE9BQVMsRUFDckNpWSxFQUFlLFNBQVV2TCxFQUFNbE8sRUFBU2dILEVBQUtzQixFQUFTb1IsR0FDckQsR0FBSXJZLEdBQU1xQyxFQUFHdVIsRUFDWjBFLEtBQ0FDLEVBQWUsRUFDZnBXLEVBQUksSUFDSjBSLEVBQVloSCxNQUNaMkwsRUFBNkIsTUFBakJILEVBQ1pJLEVBQWdCdlAsRUFFaEI1SCxFQUFRdUwsR0FBUXNMLEdBQWFyUCxFQUFLekksS0FBVSxJQUFHLElBQUtnWSxHQUFpQjFaLEVBQVFvQyxZQUFjcEMsR0FFM0YrWixFQUFpQi9PLEdBQTRCLE1BQWpCOE8sRUFBd0IsRUFBSXBWLEtBQUtDLFVBQVksRUFTMUUsS0FQS2tWLElBQ0p0UCxFQUFtQnZLLElBQVl6QixHQUFZeUIsRUFDM0NrSyxFQUFhb1AsR0FLZSxPQUFwQmpZLEVBQU9zQixFQUFNYSxJQUFhQSxJQUFNLENBQ3hDLEdBQUtnVyxHQUFhblksRUFBTyxDQUN4QnFDLEVBQUksQ0FDSixPQUFTdVIsRUFBVW1FLEVBQWdCMVYsS0FDbEMsR0FBS3VSLEVBQVM1VCxFQUFNckIsRUFBU2dILEdBQVEsQ0FDcENzQixFQUFRbEosS0FBTWlDLEVBQ2QsT0FHR3dZLElBQ0o3TyxFQUFVK08sRUFDVjdQLElBQWVvUCxHQUtaQyxLQUVFbFksR0FBUTRULEdBQVc1VCxJQUN4QnVZLElBSUkxTCxHQUNKZ0gsRUFBVTlWLEtBQU1pQyxJQU9uQixHQURBdVksR0FBZ0JwVyxFQUNYK1YsR0FBUy9WLElBQU1vVyxFQUFlLENBQ2xDbFcsRUFBSSxDQUNKLE9BQVN1UixFQUFVb0UsRUFBWTNWLEtBQzlCdVIsRUFBU0MsRUFBV3lFLEVBQVkzWixFQUFTZ0gsRUFHMUMsSUFBS2tILEVBQU8sQ0FFWCxHQUFLMEwsRUFBZSxFQUNuQixNQUFRcFcsSUFDQTBSLEVBQVUxUixJQUFNbVcsRUFBV25XLEtBQ2pDbVcsRUFBV25XLEdBQUtvSSxFQUFJckosS0FBTStGLEdBTTdCcVIsR0FBYTVCLEdBQVU0QixHQUl4QnZhLEVBQUsrRCxNQUFPbUYsRUFBU3FSLEdBR2hCRSxJQUFjM0wsR0FBUXlMLEVBQVduWSxPQUFTLEdBQzVDb1ksRUFBZVAsRUFBWTdYLE9BQVcsR0FFeEN5TSxHQUFPNEUsV0FBWXZLLEdBVXJCLE1BTEt1UixLQUNKN08sRUFBVStPLEVBQ1Z4UCxFQUFtQnVQLEdBR2I1RSxFQUdULE9BQU9xRSxHQUNOL0osR0FBY2lLLEdBQ2RBLEVBR0ZuUCxFQUFVMkQsR0FBTzNELFFBQVUsU0FBVXZLLEVBQVVpYSxHQUM5QyxHQUFJeFcsR0FDSDZWLEtBQ0FELEtBQ0E5QixFQUFTbE0sRUFBZXJMLEVBQVcsSUFFcEMsS0FBTXVYLEVBQVMsQ0FFUjBDLElBQ0xBLEVBQVFyTCxHQUFVNU8sSUFFbkJ5RCxFQUFJd1csRUFBTXhZLE1BQ1YsT0FBUWdDLElBQ1A4VCxFQUFTdUIsR0FBbUJtQixFQUFNeFcsSUFDN0I4VCxFQUFRN1MsR0FDWjRVLEVBQVlqYSxLQUFNa1ksR0FFbEI4QixFQUFnQmhhLEtBQU1rWSxFQUt4QkEsR0FBU2xNLEVBQWVyTCxFQUFVb1osR0FBMEJDLEVBQWlCQyxJQUU5RSxNQUFPL0IsR0FHUixTQUFTb0IsSUFBa0IzWSxFQUFVa2EsRUFBVTNSLEdBQzlDLEdBQUk5RSxHQUFJLEVBQ1BDLEVBQU13VyxFQUFTelksTUFDaEIsTUFBWWlDLEVBQUpELEVBQVNBLElBQ2hCeUssR0FBUWxPLEVBQVVrYSxFQUFTelcsR0FBSThFLEVBRWhDLE9BQU9BLEdBR1IsUUFBUzZHLElBQVFwUCxFQUFVQyxFQUFTc0ksRUFBUzRGLEdBQzVDLEdBQUkxSyxHQUFHMlQsRUFBUStDLEVBQU8zVSxFQUFNN0QsRUFDM0JOLEVBQVF1TixHQUFVNU8sRUFFbkIsS0FBTW1PLEdBRWlCLElBQWpCOU0sRUFBTUksT0FBZSxDQUl6QixHQURBMlYsRUFBUy9WLEVBQU0sR0FBS0EsRUFBTSxHQUFHOUIsTUFBTyxHQUMvQjZYLEVBQU8zVixPQUFTLEdBQWtDLFFBQTVCMFksRUFBUS9DLEVBQU8sSUFBSTVSLE1BQzVDMEUsRUFBUWtILFNBQWdDLElBQXJCblIsRUFBUTZCLFVBQWtCNkksR0FDN0NQLEVBQUtrSixTQUFVOEQsRUFBTyxHQUFHNVIsTUFBUyxDQUduQyxHQURBdkYsR0FBWW1LLEVBQUt6SSxLQUFTLEdBQUd3WSxFQUFNclAsUUFBUSxHQUFHakcsUUFBUTZJLEdBQVdDLElBQVkxTixRQUFrQixJQUN6RkEsRUFDTCxNQUFPc0ksRUFFUnZJLEdBQVdBLEVBQVNULE1BQU82WCxFQUFPNUgsUUFBUXBILE1BQU0zRyxRQUlqRGdDLEVBQUlvSixFQUF3QixhQUFFN0ssS0FBTWhDLEdBQWEsRUFBSW9YLEVBQU8zVixNQUM1RCxPQUFRZ0MsSUFBTSxDQUliLEdBSEEwVyxFQUFRL0MsRUFBTzNULEdBR1YyRyxFQUFLa0osU0FBVzlOLEVBQU8yVSxFQUFNM1UsTUFDakMsS0FFRCxLQUFNN0QsRUFBT3lJLEVBQUt6SSxLQUFNNkQsTUFFakIySSxFQUFPeE0sRUFDWndZLEVBQU1yUCxRQUFRLEdBQUdqRyxRQUFTNkksR0FBV0MsSUFDckNsQixFQUFTekssS0FBTW9WLEVBQU8sR0FBRzVSLE9BQVV2RixFQUFRb0MsWUFBY3BDLElBQ3JELENBS0osR0FGQW1YLEVBQU9yVCxPQUFRTixFQUFHLEdBQ2xCekQsRUFBV21PLEVBQUsxTSxRQUFVc04sR0FBWXFJLElBQ2hDcFgsRUFFTCxNQURBWCxHQUFLK0QsTUFBT21GLEVBQVM0RixHQUNkNUYsQ0FHUixTQWdCTCxNQVBBZ0MsR0FBU3ZLLEVBQVVxQixHQUNsQjhNLEVBQ0FsTyxHQUNDMEssRUFDRHBDLEVBQ0FrRSxFQUFTekssS0FBTWhDLElBRVR1SSxFQU1SMkIsRUFBUStJLFdBQWF2TyxFQUFRdUYsTUFBTSxJQUFJbkcsS0FBTXlILEdBQVl5RCxLQUFLLE1BQVF0SyxFQUl0RXdGLEVBQVE4SSxpQkFBbUIxSCxFQUczQlosSUFJQVIsRUFBUW1JLGFBQWUzQyxHQUFPLFNBQVUwSyxHQUV2QyxNQUF1RSxHQUFoRUEsRUFBS25JLHdCQUF5QnpULEVBQVNpSSxjQUFjLFVBTXZEaUosR0FBTyxTQUFVQyxHQUV0QixNQURBQSxHQUFJdUIsVUFBWSxtQkFDK0IsTUFBeEN2QixFQUFJd0IsV0FBV3RDLGFBQWEsV0FFbkNlLEdBQVcseUJBQTBCLFNBQVV0TyxFQUFNNEMsRUFBTW9HLEdBQzFELE1BQU1BLEdBQU4sVUFDUWhKLEVBQUt1TixhQUFjM0ssRUFBNkIsU0FBdkJBLEVBQUtpRSxjQUEyQixFQUFJLEtBT2pFK0IsRUFBUWlDLFlBQWV1RCxHQUFPLFNBQVVDLEdBRzdDLE1BRkFBLEdBQUl1QixVQUFZLFdBQ2hCdkIsRUFBSXdCLFdBQVdyQyxhQUFjLFFBQVMsSUFDWSxLQUEzQ2EsRUFBSXdCLFdBQVd0QyxhQUFjLFlBRXBDZSxHQUFXLFFBQVMsU0FBVXRPLEVBQU00QyxFQUFNb0csR0FDekMsTUFBTUEsSUFBeUMsVUFBaENoSixFQUFLNEcsU0FBU0MsY0FBN0IsVUFDUTdHLEVBQUsrWSxlQU9UM0ssR0FBTyxTQUFVQyxHQUN0QixNQUF1QyxPQUFoQ0EsRUFBSWQsYUFBYSxlQUV4QmUsR0FBVzdELEVBQVUsU0FBVXpLLEVBQU00QyxFQUFNb0csR0FDMUMsR0FBSXNJLEVBQ0osT0FBTXRJLEdBQU4sV0FDU3NJLEVBQU10UixFQUFLa1EsaUJBQWtCdE4sS0FBVzBPLEVBQUlDLFVBQ25ERCxFQUFJeEssTUFDSjlHLEVBQU00QyxNQUFXLEVBQU9BLEVBQUtpRSxjQUFnQixPQUtqRHZKLEVBQU8rQyxLQUFPdU0sR0FDZHRQLEVBQU84VCxLQUFPeEUsR0FBT2tGLFVBQ3JCeFUsRUFBTzhULEtBQUssS0FBTzlULEVBQU84VCxLQUFLdEcsUUFDL0J4TixFQUFPMGIsT0FBU3BNLEdBQU80RSxXQUN2QmxVLEVBQU9nSixLQUFPc0csR0FBTzdELFFBQ3JCekwsRUFBTzJiLFNBQVdyTSxHQUFPNUQsTUFDekIxTCxFQUFPbU0sU0FBV21ELEdBQU9uRCxVQUdyQjdNLEVBRUosSUFBSXNjLEtBR0osU0FBU0MsR0FBZXhXLEdBQ3ZCLEdBQUl5VyxHQUFTRixFQUFjdlcsS0FJM0IsT0FIQXJGLEdBQU9tRSxLQUFNa0IsRUFBUTVDLE1BQU9mLE9BQXdCLFNBQVVzTixFQUFHK00sR0FDaEVELEVBQVFDLElBQVMsSUFFWEQsRUF5QlI5YixFQUFPZ2MsVUFBWSxTQUFVM1csR0FJNUJBLEVBQTZCLGdCQUFaQSxHQUNkdVcsRUFBY3ZXLElBQWF3VyxFQUFleFcsR0FDNUNyRixFQUFPb0YsVUFBWUMsRUFFcEIsSUFDQzRXLEdBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEVBRUFDLEtBRUFDLEdBQVNuWCxFQUFRb1gsU0FFakJDLEVBQU8sU0FBVWpWLEdBT2hCLElBTkF3VSxFQUFTNVcsRUFBUTRXLFFBQVV4VSxFQUMzQnlVLEdBQVEsRUFDUkksRUFBY0YsR0FBZSxFQUM3QkEsRUFBYyxFQUNkQyxFQUFlRSxFQUFLMVosT0FDcEJzWixHQUFTLEVBQ0RJLEdBQXNCRixFQUFkQyxFQUE0QkEsSUFDM0MsR0FBS0MsRUFBTUQsR0FBYzlYLE1BQU9pRCxFQUFNLEdBQUtBLEVBQU0sT0FBVSxHQUFTcEMsRUFBUXNYLFlBQWMsQ0FDekZWLEdBQVMsQ0FDVCxPQUdGRSxHQUFTLEVBQ0pJLElBQ0NDLEVBQ0NBLEVBQU0zWixRQUNWNlosRUFBTUYsRUFBTTVMLFNBRUZxTCxFQUNYTSxLQUVBSyxFQUFLQyxZQUtSRCxHQUVDRSxJQUFLLFdBQ0osR0FBS1AsRUFBTyxDQUVYLEdBQUl6RyxHQUFReUcsRUFBSzFaLFFBQ2pCLFFBQVVpYSxHQUFLelksR0FDZHJFLEVBQU9tRSxLQUFNRSxFQUFNLFNBQVUySyxFQUFHN0UsR0FDL0IsR0FBSXZELEdBQU81RyxFQUFPNEcsS0FBTXVELEVBQ1YsY0FBVHZELEVBQ0V2QixFQUFRcVcsUUFBV2tCLEVBQUtwRyxJQUFLck0sSUFDbENvUyxFQUFLOWIsS0FBTTBKLEdBRURBLEdBQU9BLEVBQUl0SCxRQUFtQixXQUFUK0QsR0FFaENrVyxFQUFLM1MsT0FHSjFGLFdBR0MwWCxFQUNKRSxFQUFlRSxFQUFLMVosT0FHVG9aLElBQ1hHLEVBQWN0RyxFQUNkNEcsRUFBTVQsSUFHUixNQUFPdFosT0FHUm9GLE9BQVEsV0FrQlAsTUFqQkt3VSxJQUNKdmMsRUFBT21FLEtBQU1NLFVBQVcsU0FBVXVLLEVBQUc3RSxHQUNwQyxHQUFJNFMsRUFDSixRQUFTQSxFQUFRL2MsRUFBTzZKLFFBQVNNLEVBQUtvUyxFQUFNUSxJQUFZLEdBQ3ZEUixFQUFLcFgsT0FBUTRYLEVBQU8sR0FFZlosSUFDVUUsR0FBVFUsR0FDSlYsSUFFYUMsR0FBVFMsR0FDSlQsT0FNRTNaLE1BSVI2VCxJQUFLLFNBQVVsVixHQUNkLE1BQU9BLEdBQUt0QixFQUFPNkosUUFBU3ZJLEVBQUlpYixHQUFTLE1BQVNBLElBQVFBLEVBQUsxWixTQUdoRTJVLE1BQU8sV0FHTixNQUZBK0UsTUFDQUYsRUFBZSxFQUNSMVosTUFHUmthLFFBQVMsV0FFUixNQURBTixHQUFPQyxFQUFRUCxFQUFTMWMsVUFDakJvRCxNQUdSeVUsU0FBVSxXQUNULE9BQVFtRixHQUdUUyxLQUFNLFdBS0wsTUFKQVIsR0FBUWpkLFVBQ0YwYyxHQUNMVyxFQUFLQyxVQUVDbGEsTUFHUnNhLE9BQVEsV0FDUCxPQUFRVCxHQUdUVSxTQUFVLFNBQVU3YixFQUFTZ0QsR0FVNUIsT0FUS2tZLEdBQVdMLElBQVNNLElBQ3hCblksRUFBT0EsTUFDUEEsR0FBU2hELEVBQVNnRCxFQUFLMUQsTUFBUTBELEVBQUsxRCxRQUFVMEQsR0FDekM4WCxFQUNKSyxFQUFNL2IsS0FBTTRELEdBRVpxWSxFQUFNclksSUFHRDFCLE1BR1IrWixLQUFNLFdBRUwsTUFEQUUsR0FBS00sU0FBVXZhLEtBQU04QixXQUNkOUIsTUFHUnVaLE1BQU8sV0FDTixRQUFTQSxHQUlaLE9BQU9VLElBRVI1YyxFQUFPb0YsUUFFTjZGLFNBQVUsU0FBVWtTLEdBQ25CLEdBQUlDLEtBRUEsVUFBVyxPQUFRcGQsRUFBT2djLFVBQVUsZUFBZ0IsYUFDcEQsU0FBVSxPQUFRaGMsRUFBT2djLFVBQVUsZUFBZ0IsYUFDbkQsU0FBVSxXQUFZaGMsRUFBT2djLFVBQVUsWUFFMUNxQixFQUFRLFVBQ1IvWSxHQUNDK1ksTUFBTyxXQUNOLE1BQU9BLElBRVJDLE9BQVEsV0FFUCxNQURBQyxHQUFTaFosS0FBTUUsV0FBWStZLEtBQU0vWSxXQUMxQjlCLE1BRVI4YSxLQUFNLFdBQ0wsR0FBSUMsR0FBTWpaLFNBQ1YsT0FBT3pFLEdBQU9pTCxTQUFTLFNBQVUwUyxHQUNoQzNkLEVBQU9tRSxLQUFNaVosRUFBUSxTQUFVdlksRUFBRytZLEdBQ2pDLEdBQUlDLEdBQVNELEVBQU8sR0FDbkJ0YyxFQUFLdEIsRUFBT3NELFdBQVlvYSxFQUFLN1ksS0FBUzZZLEVBQUs3WSxFQUU1QzBZLEdBQVVLLEVBQU0sSUFBSyxXQUNwQixHQUFJRSxHQUFXeGMsR0FBTUEsRUFBR2tELE1BQU83QixLQUFNOEIsVUFDaENxWixJQUFZOWQsRUFBT3NELFdBQVl3YSxFQUFTeFosU0FDNUN3WixFQUFTeFosVUFDUEMsS0FBTW9aLEVBQVNJLFNBQ2ZQLEtBQU1HLEVBQVNLLFFBQ2ZDLFNBQVVOLEVBQVNPLFFBRXJCUCxFQUFVRSxFQUFTLFFBQVVsYixPQUFTMkIsRUFBVXFaLEVBQVNyWixVQUFZM0IsS0FBTXJCLEdBQU93YyxHQUFhclosZUFJbEdpWixFQUFNLE9BQ0pwWixXQUlKQSxRQUFTLFNBQVVxQyxHQUNsQixNQUFjLE9BQVBBLEVBQWMzRyxFQUFPb0YsT0FBUXVCLEVBQUtyQyxHQUFZQSxJQUd2RGlaLElBd0NELE9BckNBalosR0FBUTZaLEtBQU83WixFQUFRbVosS0FHdkJ6ZCxFQUFPbUUsS0FBTWlaLEVBQVEsU0FBVXZZLEVBQUcrWSxHQUNqQyxHQUFJckIsR0FBT3FCLEVBQU8sR0FDakJRLEVBQWNSLEVBQU8sRUFHdEJ0WixHQUFTc1osRUFBTSxJQUFPckIsRUFBS08sSUFHdEJzQixHQUNKN0IsRUFBS08sSUFBSSxXQUVSTyxFQUFRZSxHQUdOaEIsRUFBWSxFQUFKdlksR0FBUyxHQUFJZ1ksUUFBU08sRUFBUSxHQUFLLEdBQUlKLE1BSW5ETyxFQUFVSyxFQUFNLElBQU8sV0FFdEIsTUFEQUwsR0FBVUssRUFBTSxHQUFLLFFBQVVqYixPQUFTNGEsRUFBV2paLEVBQVUzQixLQUFNOEIsV0FDNUQ5QixNQUVSNGEsRUFBVUssRUFBTSxHQUFLLFFBQVdyQixFQUFLVyxXQUl0QzVZLEVBQVFBLFFBQVNpWixHQUdaSixHQUNKQSxFQUFLdlosS0FBTTJaLEVBQVVBLEdBSWZBLEdBSVJjLEtBQU0sU0FBVUMsR0FDZixHQUFJelosR0FBSSxFQUNQMFosRUFBZ0I3ZCxFQUFXa0QsS0FBTWEsV0FDakM1QixFQUFTMGIsRUFBYzFiLE9BR3ZCMmIsRUFBdUIsSUFBWDNiLEdBQWtCeWIsR0FBZXRlLEVBQU9zRCxXQUFZZ2IsRUFBWWhhLFNBQWN6QixFQUFTLEVBR25HMGEsRUFBeUIsSUFBZGlCLEVBQWtCRixFQUFjdGUsRUFBT2lMLFdBR2xEd1QsRUFBYSxTQUFVNVosRUFBR3lXLEVBQVVvRCxHQUNuQyxNQUFPLFVBQVVsVixHQUNoQjhSLEVBQVV6VyxHQUFNbEMsS0FDaEIrYixFQUFRN1osR0FBTUosVUFBVTVCLE9BQVMsRUFBSW5DLEVBQVdrRCxLQUFNYSxXQUFjK0UsRUFDaEVrVixJQUFXQyxFQUNkcEIsRUFBU3FCLFdBQVl0RCxFQUFVb0QsS0FDZkYsR0FDaEJqQixFQUFTL1csWUFBYThVLEVBQVVvRCxLQUtuQ0MsRUFBZ0JFLEVBQWtCQyxDQUduQyxJQUFLamMsRUFBUyxFQUliLElBSEE4YixFQUFxQjlYLE1BQU9oRSxHQUM1QmdjLEVBQXVCaFksTUFBT2hFLEdBQzlCaWMsRUFBc0JqWSxNQUFPaEUsR0FDakJBLEVBQUpnQyxFQUFZQSxJQUNkMFosRUFBZTFaLElBQU83RSxFQUFPc0QsV0FBWWliLEVBQWUxWixHQUFJUCxTQUNoRWlhLEVBQWUxWixHQUFJUCxVQUNqQkMsS0FBTWthLEVBQVk1WixFQUFHaWEsRUFBaUJQLElBQ3RDZixLQUFNRCxFQUFTUyxRQUNmQyxTQUFVUSxFQUFZNVosRUFBR2dhLEVBQWtCRixNQUUzQ0gsQ0FVTCxPQUpNQSxJQUNMakIsRUFBUy9XLFlBQWFzWSxFQUFpQlAsR0FHakNoQixFQUFTalosYUFHbEJ0RSxFQUFPc0wsUUFBVSxTQUFXQSxHQUMzQixHQUFJd0gsR0FBUWxULEVBQVNpSSxjQUFjLFNBQ2xDa1gsRUFBV25mLEVBQVNvZix5QkFDcEJqTyxFQUFNblIsRUFBU2lJLGNBQWMsT0FDN0IySSxFQUFTNVEsRUFBU2lJLGNBQWMsVUFDaENvWCxFQUFNek8sRUFBT3RILFlBQWF0SixFQUFTaUksY0FBYyxVQUdsRCxPQUFNaUwsR0FBTWxNLE1BSVprTSxFQUFNbE0sS0FBTyxXQUliMEUsRUFBUTRULFFBQTBCLEtBQWhCcE0sRUFBTXRKLE1BSXhCOEIsRUFBUTZULFlBQWNGLEVBQUkzSCxTQUcxQmhNLEVBQVE4VCxxQkFBc0IsRUFDOUI5VCxFQUFRK1QsbUJBQW9CLEVBQzVCL1QsRUFBUWdVLGVBQWdCLEVBSXhCeE0sRUFBTXVFLFNBQVUsRUFDaEIvTCxFQUFRaVUsZUFBaUJ6TSxFQUFNME0sV0FBVyxHQUFPbkksUUFJakQ3RyxFQUFPNEcsVUFBVyxFQUNsQjlMLEVBQVFtVSxhQUFlUixFQUFJN0gsU0FJM0J0RSxFQUFRbFQsRUFBU2lJLGNBQWMsU0FDL0JpTCxFQUFNdEosTUFBUSxJQUNkc0osRUFBTWxNLEtBQU8sUUFDYjBFLEVBQVFvVSxXQUE2QixNQUFoQjVNLEVBQU10SixNQUczQnNKLEVBQU01QyxhQUFjLFVBQVcsS0FDL0I0QyxFQUFNNUMsYUFBYyxPQUFRLEtBRTVCNk8sRUFBUzdWLFlBQWE0SixHQUl0QnhILEVBQVFxVSxXQUFhWixFQUFTUyxXQUFXLEdBQU9BLFdBQVcsR0FBT3hKLFVBQVVxQixRQUk1RS9MLEVBQVFzVSxlQUFpQixhQUFldGdCLEdBRXhDeVIsRUFBSS9GLE1BQU02VSxlQUFpQixjQUMzQjlPLEVBQUl5TyxXQUFXLEdBQU94VSxNQUFNNlUsZUFBaUIsR0FDN0N2VSxFQUFRd1UsZ0JBQStDLGdCQUE3Qi9PLEVBQUkvRixNQUFNNlUsZUFHcEM3ZixFQUFPLFdBQ04sR0FBSStmLEdBQVdDLEVBRWRDLEVBQVcsOEhBQ1hDLEVBQU90Z0IsRUFBUzZJLHFCQUFxQixRQUFTLEVBRXpDeVgsS0FLTkgsRUFBWW5nQixFQUFTaUksY0FBYyxPQUNuQ2tZLEVBQVUvVSxNQUFNbVYsUUFBVSxnRkFHMUJELEVBQUtoWCxZQUFhNlcsR0FBWTdXLFlBQWE2SCxHQUMzQ0EsRUFBSXVCLFVBQVksR0FFaEJ2QixFQUFJL0YsTUFBTW1WLFFBQVUsdUtBSXBCbmdCLEVBQU84SyxLQUFNb1YsRUFBeUIsTUFBbkJBLEVBQUtsVixNQUFNb1YsTUFBaUJBLEtBQU0sTUFBVSxXQUM5RDlVLEVBQVErVSxVQUFnQyxJQUFwQnRQLEVBQUl1UCxjQUlwQmhoQixFQUFPaWhCLG1CQUNYalYsRUFBUWdVLGNBQXVFLFFBQXJEaGdCLEVBQU9paEIsaUJBQWtCeFAsRUFBSyxXQUFlb0IsSUFDdkU3RyxFQUFRK1Qsa0JBQTJGLFNBQXJFL2YsRUFBT2loQixpQkFBa0J4UCxFQUFLLFFBQVl5UCxNQUFPLFFBQVVBLE1BTXpGUixFQUFZalAsRUFBSTdILFlBQWF0SixFQUFTaUksY0FBYyxRQUNwRG1ZLEVBQVVoVixNQUFNbVYsUUFBVXBQLEVBQUkvRixNQUFNbVYsUUFBVUYsRUFDOUNELEVBQVVoVixNQUFNeVYsWUFBY1QsRUFBVWhWLE1BQU13VixNQUFRLElBQ3REelAsRUFBSS9GLE1BQU13VixNQUFRLE1BRWxCbFYsRUFBUThULHFCQUNOblksWUFBYzNILEVBQU9paEIsaUJBQWtCUCxFQUFXLFdBQWVTLGNBR3BFUCxFQUFLL1csWUFBYTRXLE1BR1p6VSxHQXJHQ0EsTUFtSFQsSUFBSW9WLEdBQVdDLEVBQ2RDLEVBQVMsK0JBQ1RDLEVBQWEsVUFFZCxTQUFTQyxLQUlSbFgsT0FBT21YLGVBQWdCcGUsS0FBSytOLFNBQVksR0FDdkM3TSxJQUFLLFdBQ0osWUFJRmxCLEtBQUttRCxRQUFVOUYsRUFBTzhGLFFBQVVDLEtBQUtDLFNBR3RDOGEsRUFBS0UsSUFBTSxFQUVYRixFQUFLRyxRQUFVLFNBQVVDLEdBT3hCLE1BQU9BLEdBQU1oZSxTQUNPLElBQW5CZ2UsRUFBTWhlLFVBQXFDLElBQW5CZ2UsRUFBTWhlLFVBQWlCLEdBR2pENGQsRUFBS3hlLFdBQ0ppSSxJQUFLLFNBQVUyVyxHQUlkLElBQU1KLEVBQUtHLFFBQVNDLEdBQ25CLE1BQU8sRUFHUixJQUFJQyxNQUVIQyxFQUFTRixFQUFPdmUsS0FBS21ELFFBR3RCLEtBQU1zYixFQUFTLENBQ2RBLEVBQVNOLEVBQUtFLEtBR2QsS0FDQ0csRUFBWXhlLEtBQUttRCxVQUFjMEQsTUFBTzRYLEdBQ3RDeFgsT0FBT3lYLGlCQUFrQkgsRUFBT0MsR0FJL0IsTUFBUS9aLEdBQ1QrWixFQUFZeGUsS0FBS21ELFNBQVlzYixFQUM3QnBoQixFQUFPb0YsT0FBUThiLEVBQU9DLElBU3hCLE1BSk14ZSxNQUFLK04sTUFBTzBRLEtBQ2pCemUsS0FBSytOLE1BQU8wUSxPQUdOQSxHQUVSRSxJQUFLLFNBQVVKLEVBQU96WixFQUFNK0IsR0FDM0IsR0FBSStYLEdBSUhILEVBQVN6ZSxLQUFLNEgsSUFBSzJXLEdBQ25CeFEsRUFBUS9OLEtBQUsrTixNQUFPMFEsRUFHckIsSUFBcUIsZ0JBQVQzWixHQUNYaUosRUFBT2pKLEdBQVMrQixNQUtoQixJQUFLeEosRUFBT3FILGNBQWVxSixHQUMxQjFRLEVBQU9vRixPQUFRekMsS0FBSytOLE1BQU8wUSxHQUFVM1osT0FHckMsS0FBTThaLElBQVE5WixHQUNiaUosRUFBTzZRLEdBQVM5WixFQUFNOFosRUFJekIsT0FBTzdRLElBRVI3TSxJQUFLLFNBQVVxZCxFQUFPM1csR0FLckIsR0FBSW1HLEdBQVEvTixLQUFLK04sTUFBTy9OLEtBQUs0SCxJQUFLMlcsR0FFbEMsT0FBTzNXLEtBQVFoTCxVQUNkbVIsRUFBUUEsRUFBT25HLElBRWpCRCxPQUFRLFNBQVU0VyxFQUFPM1csRUFBS2YsR0FDN0IsR0FBSWdZLEVBWUosT0FBS2pYLEtBQVFoTCxXQUNUZ0wsR0FBc0IsZ0JBQVJBLElBQXFCZixJQUFVakssV0FFaERpaUIsRUFBUzdlLEtBQUtrQixJQUFLcWQsRUFBTzNXLEdBRW5CaVgsSUFBV2ppQixVQUNqQmlpQixFQUFTN2UsS0FBS2tCLElBQUtxZCxFQUFPbGhCLEVBQU9vSixVQUFVbUIsTUFTN0M1SCxLQUFLMmUsSUFBS0osRUFBTzNXLEVBQUtmLEdBSWZBLElBQVVqSyxVQUFZaUssRUFBUWUsSUFFdEN4QyxPQUFRLFNBQVVtWixFQUFPM1csR0FDeEIsR0FBSTFGLEdBQUdTLEVBQU1tYyxFQUNaTCxFQUFTemUsS0FBSzRILElBQUsyVyxHQUNuQnhRLEVBQVEvTixLQUFLK04sTUFBTzBRLEVBRXJCLElBQUs3VyxJQUFRaEwsVUFDWm9ELEtBQUsrTixNQUFPMFEsVUFFTixDQUVEcGhCLEVBQU82RixRQUFTMEUsR0FPcEJqRixFQUFPaUYsRUFBSWhLLE9BQVFnSyxFQUFJdkYsSUFBS2hGLEVBQU9vSixhQUVuQ3FZLEVBQVF6aEIsRUFBT29KLFVBQVdtQixHQUVyQkEsSUFBT21HLEdBQ1hwTCxHQUFTaUYsRUFBS2tYLElBSWRuYyxFQUFPbWMsRUFDUG5jLEVBQU9BLElBQVFvTCxJQUNacEwsR0FBV0EsRUFBSzdDLE1BQU9mLFNBSTVCbUQsRUFBSVMsRUFBS3pDLE1BQ1QsT0FBUWdDLFVBQ0E2TCxHQUFPcEwsRUFBTVQsTUFJdkI2YyxRQUFTLFNBQVVSLEdBQ2xCLE9BQVFsaEIsRUFBT3FILGNBQ2QxRSxLQUFLK04sTUFBT3dRLEVBQU92ZSxLQUFLbUQsZ0JBRzFCNmIsUUFBUyxTQUFVVCxHQUNiQSxFQUFPdmUsS0FBS21ELGdCQUNUbkQsTUFBSytOLE1BQU93USxFQUFPdmUsS0FBS21ELFlBTWxDNGEsRUFBWSxHQUFJSSxHQUNoQkgsRUFBWSxHQUFJRyxHQUdoQjlnQixFQUFPb0YsUUFDTndjLFdBQVlkLEVBQUtHLFFBRWpCUyxRQUFTLFNBQVVoZixHQUNsQixNQUFPZ2UsR0FBVWdCLFFBQVNoZixJQUFVaWUsRUFBVWUsUUFBU2hmLElBR3hEK0UsS0FBTSxTQUFVL0UsRUFBTTRDLEVBQU1tQyxHQUMzQixNQUFPaVosR0FBVXBXLE9BQVE1SCxFQUFNNEMsRUFBTW1DLElBR3RDb2EsV0FBWSxTQUFVbmYsRUFBTTRDLEdBQzNCb2IsRUFBVTNZLE9BQVFyRixFQUFNNEMsSUFLekJ3YyxNQUFPLFNBQVVwZixFQUFNNEMsRUFBTW1DLEdBQzVCLE1BQU9rWixHQUFVclcsT0FBUTVILEVBQU00QyxFQUFNbUMsSUFHdENzYSxZQUFhLFNBQVVyZixFQUFNNEMsR0FDNUJxYixFQUFVNVksT0FBUXJGLEVBQU00QyxNQUkxQnRGLEVBQU9zQixHQUFHOEQsUUFDVHFDLEtBQU0sU0FBVThDLEVBQUtmLEdBQ3BCLEdBQUl5SCxHQUFPM0wsRUFDVjVDLEVBQU9DLEtBQU0sR0FDYmtDLEVBQUksRUFDSjRDLEVBQU8sSUFHUixJQUFLOEMsSUFBUWhMLFVBQVksQ0FDeEIsR0FBS29ELEtBQUtFLFNBQ1Q0RSxFQUFPaVosRUFBVTdjLElBQUtuQixHQUVDLElBQWxCQSxFQUFLUSxXQUFtQnlkLEVBQVU5YyxJQUFLbkIsRUFBTSxpQkFBbUIsQ0FFcEUsSUFEQXVPLEVBQVF2TyxFQUFLNkssV0FDRDBELEVBQU1wTyxPQUFWZ0MsRUFBa0JBLElBQ3pCUyxFQUFPMkwsRUFBT3BNLEdBQUlTLEtBRWUsSUFBNUJBLEVBQUt6RSxRQUFTLFdBQ2xCeUUsRUFBT3RGLEVBQU9vSixVQUFXOUQsRUFBSzNFLE1BQU0sSUFDcENxaEIsRUFBVXRmLEVBQU00QyxFQUFNbUMsRUFBTW5DLElBRzlCcWIsR0FBVVcsSUFBSzVlLEVBQU0sZ0JBQWdCLEdBSXZDLE1BQU8rRSxHQUlSLE1BQW9CLGdCQUFSOEMsR0FDSjVILEtBQUt3QixLQUFLLFdBQ2hCdWMsRUFBVVksSUFBSzNlLEtBQU00SCxLQUloQnZLLEVBQU9zSyxPQUFRM0gsS0FBTSxTQUFVNkcsR0FDckMsR0FBSS9CLEdBQ0h3YSxFQUFXamlCLEVBQU9vSixVQUFXbUIsRUFPOUIsSUFBSzdILEdBQVE4RyxJQUFVakssVUFBdkIsQ0FJQyxHQURBa0ksRUFBT2laLEVBQVU3YyxJQUFLbkIsRUFBTTZILEdBQ3ZCOUMsSUFBU2xJLFVBQ2IsTUFBT2tJLEVBTVIsSUFEQUEsRUFBT2laLEVBQVU3YyxJQUFLbkIsRUFBTXVmLEdBQ3ZCeGEsSUFBU2xJLFVBQ2IsTUFBT2tJLEVBTVIsSUFEQUEsRUFBT3VhLEVBQVV0ZixFQUFNdWYsRUFBVTFpQixXQUM1QmtJLElBQVNsSSxVQUNiLE1BQU9rSSxPQVFUOUUsTUFBS3dCLEtBQUssV0FHVCxHQUFJc0QsR0FBT2laLEVBQVU3YyxJQUFLbEIsS0FBTXNmLEVBS2hDdkIsR0FBVVksSUFBSzNlLEtBQU1zZixFQUFVelksR0FLTCxLQUFyQmUsRUFBSTFKLFFBQVEsTUFBZTRHLElBQVNsSSxXQUN4Q21oQixFQUFVWSxJQUFLM2UsS0FBTTRILEVBQUtmLE1BRzFCLEtBQU1BLEVBQU8vRSxVQUFVNUIsT0FBUyxFQUFHLE1BQU0sSUFHN0NnZixXQUFZLFNBQVV0WCxHQUNyQixNQUFPNUgsTUFBS3dCLEtBQUssV0FDaEJ1YyxFQUFVM1ksT0FBUXBGLEtBQU00SCxPQUszQixTQUFTeVgsR0FBVXRmLEVBQU02SCxFQUFLOUMsR0FDN0IsR0FBSW5DLEVBSUosSUFBS21DLElBQVNsSSxXQUErQixJQUFsQm1ELEVBQUtRLFNBSS9CLEdBSEFvQyxFQUFPLFFBQVVpRixFQUFJdEUsUUFBUzRhLEVBQVksT0FBUXRYLGNBQ2xEOUIsRUFBTy9FLEVBQUt1TixhQUFjM0ssR0FFTCxnQkFBVG1DLEdBQW9CLENBQy9CLElBQ0NBLEVBQWdCLFNBQVRBLEdBQWtCLEVBQ2YsVUFBVEEsR0FBbUIsRUFDVixTQUFUQSxFQUFrQixNQUVqQkEsRUFBTyxLQUFPQSxHQUFRQSxFQUN2Qm1aLEVBQU94ZCxLQUFNcUUsR0FBU1MsS0FBS0MsTUFBT1YsR0FDbENBLEVBQ0EsTUFBT0wsSUFHVHNaLEVBQVVZLElBQUs1ZSxFQUFNNkgsRUFBSzlDLE9BRTFCQSxHQUFPbEksU0FHVCxPQUFPa0ksR0FFUnpILEVBQU9vRixRQUNOOGMsTUFBTyxTQUFVeGYsRUFBTWtFLEVBQU1hLEdBQzVCLEdBQUl5YSxFQUVKLE9BQUt4ZixJQUNKa0UsR0FBU0EsR0FBUSxNQUFTLFFBQzFCc2IsRUFBUXZCLEVBQVU5YyxJQUFLbkIsRUFBTWtFLEdBR3hCYSxLQUNFeWEsR0FBU2xpQixFQUFPNkYsUUFBUzRCLEdBQzlCeWEsRUFBUXZCLEVBQVVyVyxPQUFRNUgsRUFBTWtFLEVBQU01RyxFQUFPMEQsVUFBVStELElBRXZEeWEsRUFBTXpoQixLQUFNZ0gsSUFHUHlhLE9BWlIsV0FnQkRDLFFBQVMsU0FBVXpmLEVBQU1rRSxHQUN4QkEsRUFBT0EsR0FBUSxJQUVmLElBQUlzYixHQUFRbGlCLEVBQU9raUIsTUFBT3hmLEVBQU1rRSxHQUMvQndiLEVBQWNGLEVBQU1yZixPQUNwQnZCLEVBQUs0Z0IsRUFBTXRSLFFBQ1h5UixFQUFRcmlCLEVBQU9zaUIsWUFBYTVmLEVBQU1rRSxHQUNsQzJiLEVBQU8sV0FDTnZpQixFQUFPbWlCLFFBQVN6ZixFQUFNa0U7Q0FJWixnQkFBUHRGLElBQ0pBLEVBQUs0Z0IsRUFBTXRSLFFBQ1h3UixLQUdJOWdCLElBSVUsT0FBVHNGLEdBQ0pzYixFQUFNck8sUUFBUyxvQkFJVHdPLEdBQU1HLEtBQ2JsaEIsRUFBR3NDLEtBQU1sQixFQUFNNmYsRUFBTUYsS0FHaEJELEdBQWVDLEdBQ3BCQSxFQUFNN0ssTUFBTWtGLFFBS2Q0RixZQUFhLFNBQVU1ZixFQUFNa0UsR0FDNUIsR0FBSTJELEdBQU0zRCxFQUFPLFlBQ2pCLE9BQU8rWixHQUFVOWMsSUFBS25CLEVBQU02SCxJQUFTb1csRUFBVXJXLE9BQVE1SCxFQUFNNkgsR0FDNURpTixNQUFPeFgsRUFBT2djLFVBQVUsZUFBZWMsSUFBSSxXQUMxQzZELEVBQVU1WSxPQUFRckYsR0FBUWtFLEVBQU8sUUFBUzJELFdBTTlDdkssRUFBT3NCLEdBQUc4RCxRQUNUOGMsTUFBTyxTQUFVdGIsRUFBTWEsR0FDdEIsR0FBSWdiLEdBQVMsQ0FRYixPQU5xQixnQkFBVDdiLEtBQ1hhLEVBQU9iLEVBQ1BBLEVBQU8sS0FDUDZiLEtBR3VCQSxFQUFuQmhlLFVBQVU1QixPQUNQN0MsRUFBT2tpQixNQUFPdmYsS0FBSyxHQUFJaUUsR0FHeEJhLElBQVNsSSxVQUNmb0QsS0FDQUEsS0FBS3dCLEtBQUssV0FDVCxHQUFJK2QsR0FBUWxpQixFQUFPa2lCLE1BQU92ZixLQUFNaUUsRUFBTWEsRUFHdEN6SCxHQUFPc2lCLFlBQWEzZixLQUFNaUUsR0FFWixPQUFUQSxHQUE4QixlQUFic2IsRUFBTSxJQUMzQmxpQixFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFJMUJ1YixRQUFTLFNBQVV2YixHQUNsQixNQUFPakUsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFLeEI4YixNQUFPLFNBQVVDLEVBQU0vYixHQUl0QixNQUhBK2IsR0FBTzNpQixFQUFPNGlCLEdBQUs1aUIsRUFBTzRpQixHQUFHQyxPQUFRRixJQUFVQSxFQUFPQSxFQUN0RC9iLEVBQU9BLEdBQVEsS0FFUmpFLEtBQUt1ZixNQUFPdGIsRUFBTSxTQUFVMmIsRUFBTUYsR0FDeEMsR0FBSVMsR0FBVTNYLFdBQVlvWCxFQUFNSSxFQUNoQ04sR0FBTUcsS0FBTyxXQUNaTyxhQUFjRCxPQUlqQkUsV0FBWSxTQUFVcGMsR0FDckIsTUFBT2pFLE1BQUt1ZixNQUFPdGIsR0FBUSxVQUk1QnRDLFFBQVMsU0FBVXNDLEVBQU1ELEdBQ3hCLEdBQUkyQixHQUNIMmEsRUFBUSxFQUNSQyxFQUFRbGpCLEVBQU9pTCxXQUNmOEksRUFBV3BSLEtBQ1hrQyxFQUFJbEMsS0FBS0UsT0FDVGtiLEVBQVUsYUFDQ2tGLEdBQ1RDLEVBQU0xYyxZQUFhdU4sR0FBWUEsSUFJYixpQkFBVG5OLEtBQ1hELEVBQU1DLEVBQ05BLEVBQU9ySCxXQUVScUgsRUFBT0EsR0FBUSxJQUVmLE9BQU8vQixJQUNOeUQsRUFBTXFZLEVBQVU5YyxJQUFLa1EsRUFBVWxQLEdBQUsrQixFQUFPLGNBQ3RDMEIsR0FBT0EsRUFBSWtQLFFBQ2Z5TCxJQUNBM2EsRUFBSWtQLE1BQU1zRixJQUFLaUIsR0FJakIsT0FEQUEsS0FDT21GLEVBQU01ZSxRQUFTcUMsS0FHeEIsSUFBSXdjLEdBQVVDLEVBQ2JDLEVBQVMsY0FDVEMsRUFBVSxNQUNWQyxFQUFhLHFDQUVkdmpCLEdBQU9zQixHQUFHOEQsUUFDVDdCLEtBQU0sU0FBVStCLEVBQU1rRSxHQUNyQixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNM0MsRUFBT3VELEtBQU0rQixFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRzFFMmdCLFdBQVksU0FBVWxlLEdBQ3JCLE1BQU8zQyxNQUFLd0IsS0FBSyxXQUNoQm5FLEVBQU93akIsV0FBWTdnQixLQUFNMkMsTUFJM0JpYyxLQUFNLFNBQVVqYyxFQUFNa0UsR0FDckIsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTTNDLEVBQU91aEIsS0FBTWpjLEVBQU1rRSxFQUFPL0UsVUFBVTVCLE9BQVMsSUFHMUU0Z0IsV0FBWSxTQUFVbmUsR0FDckIsTUFBTzNDLE1BQUt3QixLQUFLLGlCQUNUeEIsTUFBTTNDLEVBQU8wakIsUUFBU3BlLElBQVVBLE1BSXpDcWUsU0FBVSxTQUFVbmEsR0FDbkIsR0FBSW9hLEdBQVNsaEIsRUFBTTJPLEVBQUt3UyxFQUFPOWUsRUFDOUJGLEVBQUksRUFDSkMsRUFBTW5DLEtBQUtFLE9BQ1hpaEIsRUFBMkIsZ0JBQVZ0YSxJQUFzQkEsQ0FFeEMsSUFBS3hKLEVBQU9zRCxXQUFZa0csR0FDdkIsTUFBTzdHLE1BQUt3QixLQUFLLFNBQVVZLEdBQzFCL0UsRUFBUTJDLE1BQU9naEIsU0FBVW5hLEVBQU01RixLQUFNakIsS0FBTW9DLEVBQUdwQyxLQUFLeVAsYUFJckQsSUFBSzBSLEVBSUosSUFGQUYsR0FBWXBhLEdBQVMsSUFBSy9HLE1BQU9mLE9BRXJCb0QsRUFBSkQsRUFBU0EsSUFPaEIsR0FOQW5DLEVBQU9DLEtBQU1rQyxHQUNid00sRUFBd0IsSUFBbEIzTyxFQUFLUSxXQUFvQlIsRUFBSzBQLFdBQ2pDLElBQU0xUCxFQUFLMFAsVUFBWSxLQUFNbk0sUUFBU29kLEVBQVEsS0FDaEQsS0FHVSxDQUNWdGUsRUFBSSxDQUNKLE9BQVM4ZSxFQUFRRCxFQUFRN2UsS0FDZ0IsRUFBbkNzTSxFQUFJeFEsUUFBUyxJQUFNZ2pCLEVBQVEsT0FDL0J4UyxHQUFPd1MsRUFBUSxJQUdqQm5oQixHQUFLMFAsVUFBWXBTLEVBQU9tQixLQUFNa1EsR0FNakMsTUFBTzFPLE9BR1JvaEIsWUFBYSxTQUFVdmEsR0FDdEIsR0FBSW9hLEdBQVNsaEIsRUFBTTJPLEVBQUt3UyxFQUFPOWUsRUFDOUJGLEVBQUksRUFDSkMsRUFBTW5DLEtBQUtFLE9BQ1hpaEIsRUFBK0IsSUFBckJyZixVQUFVNUIsUUFBaUMsZ0JBQVYyRyxJQUFzQkEsQ0FFbEUsSUFBS3hKLEVBQU9zRCxXQUFZa0csR0FDdkIsTUFBTzdHLE1BQUt3QixLQUFLLFNBQVVZLEdBQzFCL0UsRUFBUTJDLE1BQU9vaEIsWUFBYXZhLEVBQU01RixLQUFNakIsS0FBTW9DLEVBQUdwQyxLQUFLeVAsYUFHeEQsSUFBSzBSLEVBR0osSUFGQUYsR0FBWXBhLEdBQVMsSUFBSy9HLE1BQU9mLE9BRXJCb0QsRUFBSkQsRUFBU0EsSUFRaEIsR0FQQW5DLEVBQU9DLEtBQU1rQyxHQUVid00sRUFBd0IsSUFBbEIzTyxFQUFLUSxXQUFvQlIsRUFBSzBQLFdBQ2pDLElBQU0xUCxFQUFLMFAsVUFBWSxLQUFNbk0sUUFBU29kLEVBQVEsS0FDaEQsSUFHVSxDQUNWdGUsRUFBSSxDQUNKLE9BQVM4ZSxFQUFRRCxFQUFRN2UsS0FFeEIsTUFBUXNNLEVBQUl4USxRQUFTLElBQU1nakIsRUFBUSxNQUFTLEVBQzNDeFMsRUFBTUEsRUFBSXBMLFFBQVMsSUFBTTRkLEVBQVEsSUFBSyxJQUd4Q25oQixHQUFLMFAsVUFBWTVJLEVBQVF4SixFQUFPbUIsS0FBTWtRLEdBQVEsR0FLakQsTUFBTzFPLE9BR1JxaEIsWUFBYSxTQUFVeGEsRUFBT3lhLEdBQzdCLEdBQUlyZCxTQUFjNEMsRUFFbEIsT0FBeUIsaUJBQWJ5YSxJQUFtQyxXQUFUcmQsRUFDOUJxZCxFQUFXdGhCLEtBQUtnaEIsU0FBVW5hLEdBQVU3RyxLQUFLb2hCLFlBQWF2YSxHQUd6RHhKLEVBQU9zRCxXQUFZa0csR0FDaEI3RyxLQUFLd0IsS0FBSyxTQUFVVSxHQUMxQjdFLEVBQVEyQyxNQUFPcWhCLFlBQWF4YSxFQUFNNUYsS0FBS2pCLEtBQU1rQyxFQUFHbEMsS0FBS3lQLFVBQVc2UixHQUFXQSxLQUl0RXRoQixLQUFLd0IsS0FBSyxXQUNoQixHQUFjLFdBQVR5QyxFQUFvQixDQUV4QixHQUFJd0wsR0FDSHZOLEVBQUksRUFDSitYLEVBQU81YyxFQUFRMkMsTUFDZnVoQixFQUFhMWEsRUFBTS9HLE1BQU9mLE1BRTNCLE9BQVMwUSxFQUFZOFIsRUFBWXJmLEtBRTNCK1gsRUFBS3VILFNBQVUvUixHQUNuQndLLEVBQUttSCxZQUFhM1IsR0FFbEJ3SyxFQUFLK0csU0FBVXZSLFFBS054TCxJQUFTbEgsR0FBOEIsWUFBVGtILEtBQ3BDakUsS0FBS3lQLFdBRVR1TyxFQUFVVyxJQUFLM2UsS0FBTSxnQkFBaUJBLEtBQUt5UCxXQU81Q3pQLEtBQUt5UCxVQUFZelAsS0FBS3lQLFdBQWE1SSxLQUFVLEVBQVEsR0FBS21YLEVBQVU5YyxJQUFLbEIsS0FBTSxrQkFBcUIsT0FLdkd3aEIsU0FBVSxTQUFVL2lCLEdBQ25CLEdBQUlnUixHQUFZLElBQU1oUixFQUFXLElBQ2hDeUQsRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE1BQ1YsTUFBWWtILEVBQUpsRixFQUFPQSxJQUNkLEdBQTBCLElBQXJCbEMsS0FBS2tDLEdBQUczQixXQUFtQixJQUFNUCxLQUFLa0MsR0FBR3VOLFVBQVksS0FBS25NLFFBQVFvZCxFQUFRLEtBQUt4aUIsUUFBU3VSLElBQWUsRUFDM0csT0FBTyxDQUlULFFBQU8sR0FHUjRCLElBQUssU0FBVXhLLEdBQ2QsR0FBSTZZLEdBQU9wZSxFQUFLWCxFQUNmWixFQUFPQyxLQUFLLEVBRWIsRUFBQSxHQUFNOEIsVUFBVTVCLE9Bc0JoQixNQUZBUyxHQUFhdEQsRUFBT3NELFdBQVlrRyxHQUV6QjdHLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCLEdBQUltUCxFQUVtQixLQUFsQnJSLEtBQUtPLFdBS1Q4USxFQURJMVEsRUFDRWtHLEVBQU01RixLQUFNakIsS0FBTWtDLEVBQUc3RSxFQUFRMkMsTUFBT3FSLE9BRXBDeEssRUFJSyxNQUFQd0ssRUFDSkEsRUFBTSxHQUNvQixnQkFBUkEsR0FDbEJBLEdBQU8sR0FDSWhVLEVBQU82RixRQUFTbU8sS0FDM0JBLEVBQU1oVSxFQUFPZ0YsSUFBSWdQLEVBQUssU0FBV3hLLEdBQ2hDLE1BQWdCLE9BQVRBLEVBQWdCLEdBQUtBLEVBQVEsTUFJdEM2WSxFQUFRcmlCLEVBQU9va0IsU0FBVXpoQixLQUFLaUUsT0FBVTVHLEVBQU9va0IsU0FBVXpoQixLQUFLMkcsU0FBU0MsZUFHakU4WSxHQUFXLE9BQVNBLElBQVVBLEVBQU1mLElBQUszZSxLQUFNcVIsRUFBSyxXQUFjelUsWUFDdkVvRCxLQUFLNkcsTUFBUXdLLEtBakRkLElBQUt0UixFQUdKLE1BRkEyZixHQUFRcmlCLEVBQU9va0IsU0FBVTFoQixFQUFLa0UsT0FBVTVHLEVBQU9va0IsU0FBVTFoQixFQUFLNEcsU0FBU0MsZUFFbEU4WSxHQUFTLE9BQVNBLEtBQVVwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixFQUFNLFlBQWVuRCxVQUMvRDBFLEdBR1JBLEVBQU12QixFQUFLOEcsTUFFVyxnQkFBUnZGLEdBRWJBLEVBQUlnQyxRQUFRcWQsRUFBUyxJQUVkLE1BQVByZixFQUFjLEdBQUtBLE9BMEN4QmpFLEVBQU9vRixRQUNOZ2YsVUFDQ0MsUUFDQ3hnQixJQUFLLFNBQVVuQixHQUdkLEdBQUlzUixHQUFNdFIsRUFBSzZLLFdBQVcvRCxLQUMxQixRQUFRd0ssR0FBT0EsRUFBSUMsVUFBWXZSLEVBQUs4RyxNQUFROUcsRUFBS3NHLE9BR25Ed0gsUUFDQzNNLElBQUssU0FBVW5CLEdBQ2QsR0FBSThHLEdBQU82YSxFQUNWaGYsRUFBVTNDLEVBQUsyQyxRQUNmMFgsRUFBUXJhLEVBQUs2VSxjQUNiK00sRUFBb0IsZUFBZDVoQixFQUFLa0UsTUFBaUMsRUFBUm1XLEVBQ3BDMkIsRUFBUzRGLEVBQU0sUUFDZkMsRUFBTUQsRUFBTXZILEVBQVEsRUFBSTFYLEVBQVF4QyxPQUNoQ2dDLEVBQVksRUFBUmtZLEVBQ0h3SCxFQUNBRCxFQUFNdkgsRUFBUSxDQUdoQixNQUFZd0gsRUFBSjFmLEVBQVNBLElBSWhCLEdBSEF3ZixFQUFTaGYsRUFBU1IsTUFHWHdmLEVBQU8vTSxVQUFZelMsSUFBTWtZLElBRTVCL2MsRUFBT3NMLFFBQVFtVSxZQUFlNEUsRUFBT2pOLFNBQStDLE9BQXBDaU4sRUFBT3BVLGFBQWEsY0FDbkVvVSxFQUFPNWdCLFdBQVcyVCxVQUFhcFgsRUFBT3NKLFNBQVUrYSxFQUFPNWdCLFdBQVksYUFBaUIsQ0FNeEYsR0FIQStGLEVBQVF4SixFQUFRcWtCLEdBQVNyUSxNQUdwQnNRLEVBQ0osTUFBTzlhLEVBSVJrVixHQUFPamUsS0FBTStJLEdBSWYsTUFBT2tWLElBR1I0QyxJQUFLLFNBQVU1ZSxFQUFNOEcsR0FDcEIsR0FBSWdiLEdBQVdILEVBQ2RoZixFQUFVM0MsRUFBSzJDLFFBQ2ZxWixFQUFTMWUsRUFBTzBELFVBQVc4RixHQUMzQjNFLEVBQUlRLEVBQVF4QyxNQUViLE9BQVFnQyxJQUNQd2YsRUFBU2hmLEVBQVNSLElBQ1p3ZixFQUFPL00sU0FBV3RYLEVBQU82SixRQUFTN0osRUFBT3FrQixHQUFRclEsTUFBTzBLLElBQVksS0FDekU4RixHQUFZLEVBUWQsT0FITUEsS0FDTDloQixFQUFLNlUsY0FBZ0IsSUFFZm1ILEtBS1ZuYixLQUFNLFNBQVViLEVBQU00QyxFQUFNa0UsR0FDM0IsR0FBSTZZLEdBQU9wZSxFQUNWd2dCLEVBQVEvaEIsRUFBS1EsUUFHZCxJQUFNUixHQUFrQixJQUFWK2hCLEdBQXlCLElBQVZBLEdBQXlCLElBQVZBLEVBSzVDLGFBQVkvaEIsR0FBS3VOLGVBQWlCdlEsRUFDMUJNLEVBQU91aEIsS0FBTTdlLEVBQU00QyxFQUFNa0UsSUFLbEIsSUFBVmliLEdBQWdCemtCLEVBQU8yYixTQUFValosS0FDckM0QyxFQUFPQSxFQUFLaUUsY0FDWjhZLEVBQVFyaUIsRUFBTzBrQixVQUFXcGYsS0FDdkJ0RixFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLcEwsS0FBTWtDLEdBQVM4ZCxFQUFXRCxJQUdoRDNaLElBQVVqSyxVQWFIOGlCLEdBQVMsT0FBU0EsSUFBNkMsUUFBbkNwZSxFQUFNb2UsRUFBTXhlLElBQUtuQixFQUFNNEMsSUFDdkRyQixHQUdQQSxFQUFNakUsRUFBTytDLEtBQUtRLEtBQU1iLEVBQU00QyxHQUdoQixNQUFQckIsRUFDTjFFLFVBQ0EwRSxHQXBCYyxPQUFWdUYsRUFHTzZZLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU9sRSxNQUFZL0YsVUFDMUUwRSxHQUdQdkIsRUFBS3dOLGFBQWM1SyxFQUFNa0UsRUFBUSxJQUMxQkEsSUFQUHhKLEVBQU93akIsV0FBWTlnQixFQUFNNEMsR0FBekJ0RixhQXVCSHdqQixXQUFZLFNBQVU5Z0IsRUFBTThHLEdBQzNCLEdBQUlsRSxHQUFNcWYsRUFDVDlmLEVBQUksRUFDSitmLEVBQVlwYixHQUFTQSxFQUFNL0csTUFBT2YsRUFFbkMsSUFBS2tqQixHQUErQixJQUFsQmxpQixFQUFLUSxTQUN0QixNQUFTb0MsRUFBT3NmLEVBQVUvZixLQUN6QjhmLEVBQVcza0IsRUFBTzBqQixRQUFTcGUsSUFBVUEsRUFHaEN0RixFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLcEwsS0FBTWtDLEtBRWpDNUMsRUFBTWlpQixJQUFhLEdBR3BCamlCLEVBQUs2TixnQkFBaUJqTCxJQUt6Qm9mLFdBQ0M5ZCxNQUNDMGEsSUFBSyxTQUFVNWUsRUFBTThHLEdBQ3BCLElBQU14SixFQUFPc0wsUUFBUW9VLFlBQXdCLFVBQVZsVyxHQUFxQnhKLEVBQU9zSixTQUFTNUcsRUFBTSxTQUFXLENBR3hGLEdBQUlzUixHQUFNdFIsRUFBSzhHLEtBS2YsT0FKQTlHLEdBQUt3TixhQUFjLE9BQVExRyxHQUN0QndLLElBQ0p0UixFQUFLOEcsTUFBUXdLLEdBRVB4SyxNQU1Ya2EsU0FDQ21CLE1BQU8sVUFDUEMsUUFBUyxhQUdWdkQsS0FBTSxTQUFVN2UsRUFBTTRDLEVBQU1rRSxHQUMzQixHQUFJdkYsR0FBS29lLEVBQU8wQyxFQUNmTixFQUFRL2hCLEVBQUtRLFFBR2QsSUFBTVIsR0FBa0IsSUFBVitoQixHQUF5QixJQUFWQSxHQUF5QixJQUFWQSxFQVk1QyxNQVJBTSxHQUFtQixJQUFWTixJQUFnQnprQixFQUFPMmIsU0FBVWpaLEdBRXJDcWlCLElBRUp6ZixFQUFPdEYsRUFBTzBqQixRQUFTcGUsSUFBVUEsRUFDakMrYyxFQUFRcmlCLEVBQU9nbEIsVUFBVzFmLElBR3RCa0UsSUFBVWpLLFVBQ1A4aUIsR0FBUyxPQUFTQSxLQUFVcGUsRUFBTW9lLEVBQU1mLElBQUs1ZSxFQUFNOEcsRUFBT2xFLE1BQVkvRixVQUM1RTBFLEVBQ0V2QixFQUFNNEMsR0FBU2tFLEVBR1g2WSxHQUFTLE9BQVNBLElBQTZDLFFBQW5DcGUsRUFBTW9lLEVBQU14ZSxJQUFLbkIsRUFBTTRDLElBQ3pEckIsRUFDQXZCLEVBQU00QyxJQUlUMGYsV0FDQzlOLFVBQ0NyVCxJQUFLLFNBQVVuQixHQUNkLE1BQU9BLEdBQUt1aUIsYUFBYyxhQUFnQjFCLEVBQVduZ0IsS0FBTVYsRUFBSzRHLFdBQWM1RyxFQUFLdVUsS0FDbEZ2VSxFQUFLd1UsU0FDTCxRQU9Ma00sR0FDQzlCLElBQUssU0FBVTVlLEVBQU04RyxFQUFPbEUsR0FPM0IsTUFOS2tFLE1BQVUsRUFFZHhKLEVBQU93akIsV0FBWTlnQixFQUFNNEMsR0FFekI1QyxFQUFLd04sYUFBYzVLLEVBQU1BLEdBRW5CQSxJQUdUdEYsRUFBT21FLEtBQU1uRSxFQUFPOFQsS0FBS3JSLE1BQU0rTCxLQUFLL00sT0FBT2dCLE1BQU8sUUFBVSxTQUFVb0MsRUFBR1MsR0FDeEUsR0FBSTRmLEdBQVNsbEIsRUFBTzhULEtBQUszQyxXQUFZN0wsSUFBVXRGLEVBQU8rQyxLQUFLUSxJQUUzRHZELEdBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVMsU0FBVTVDLEVBQU00QyxFQUFNb0csR0FDdEQsR0FBSXBLLEdBQUt0QixFQUFPOFQsS0FBSzNDLFdBQVk3TCxHQUNoQ3JCLEVBQU15SCxFQUNMbk0sV0FHQ1MsRUFBTzhULEtBQUszQyxXQUFZN0wsR0FBUy9GLFlBQ2pDMmxCLEVBQVF4aUIsRUFBTTRDLEVBQU1vRyxHQUVwQnBHLEVBQUtpRSxjQUNMLElBS0gsT0FGQXZKLEdBQU84VCxLQUFLM0MsV0FBWTdMLEdBQVNoRSxFQUUxQjJDLEtBTUhqRSxFQUFPc0wsUUFBUTZULGNBQ3BCbmYsRUFBT2dsQixVQUFVMU4sVUFDaEJ6VCxJQUFLLFNBQVVuQixHQUNkLEdBQUlzUCxHQUFTdFAsRUFBS2UsVUFJbEIsT0FIS3VPLElBQVVBLEVBQU92TyxZQUNyQnVPLEVBQU92TyxXQUFXOFQsY0FFWixRQUtWdlgsRUFBT21FLE1BQ04sV0FDQSxXQUNBLFlBQ0EsY0FDQSxjQUNBLFVBQ0EsVUFDQSxTQUNBLGNBQ0EsbUJBQ0UsV0FDRm5FLEVBQU8wakIsUUFBUy9nQixLQUFLNEcsZUFBa0I1RyxPQUl4QzNDLEVBQU9tRSxNQUFPLFFBQVMsWUFBYyxXQUNwQ25FLEVBQU9va0IsU0FBVXpoQixPQUNoQjJlLElBQUssU0FBVTVlLEVBQU04RyxHQUNwQixNQUFLeEosR0FBTzZGLFFBQVMyRCxHQUNYOUcsRUFBSzJVLFFBQVVyWCxFQUFPNkosUUFBUzdKLEVBQU8wQyxHQUFNc1IsTUFBT3hLLElBQVcsRUFEeEUsWUFLSXhKLEVBQU9zTCxRQUFRNFQsVUFDcEJsZixFQUFPb2tCLFNBQVV6aEIsTUFBT2tCLElBQU0sU0FBVW5CLEdBR3ZDLE1BQXNDLFFBQS9CQSxFQUFLdU4sYUFBYSxTQUFvQixLQUFPdk4sRUFBSzhHLFNBSTVELElBQUkyYixHQUFZLE9BQ2ZDLEVBQWMsK0JBQ2RDLEVBQWMsa0NBQ2RDLEVBQWlCLHNCQUVsQixTQUFTQyxLQUNSLE9BQU8sRUFHUixRQUFTQyxLQUNSLE9BQU8sRUFHUixRQUFTQyxLQUNSLElBQ0MsTUFBTzdsQixHQUFTbVgsY0FDZixNQUFRMk8sS0FPWDFsQixFQUFPMmxCLE9BRU5DLFVBRUE5SSxJQUFLLFNBQVVwYSxFQUFNbWpCLEVBQU8zVSxFQUFTekosRUFBTXJHLEdBRTFDLEdBQUkwa0IsR0FBYUMsRUFBYXpkLEVBQzdCMGQsRUFBUUMsRUFBR0MsRUFDWEMsRUFBU0MsRUFBVXhmLEVBQU15ZixFQUFZQyxFQUNyQ0MsRUFBVzVGLEVBQVU5YyxJQUFLbkIsRUFHM0IsSUFBTTZqQixFQUFOLENBS0tyVixFQUFRQSxVQUNaNFUsRUFBYzVVLEVBQ2RBLEVBQVU0VSxFQUFZNVUsUUFDdEI5UCxFQUFXMGtCLEVBQVkxa0IsVUFJbEI4UCxFQUFROUcsT0FDYjhHLEVBQVE5RyxLQUFPcEssRUFBT29LLFNBSWhCNGIsRUFBU08sRUFBU1AsVUFDeEJBLEVBQVNPLEVBQVNQLFlBRVpELEVBQWNRLEVBQVNDLFVBQzdCVCxFQUFjUSxFQUFTQyxPQUFTLFNBQVVwZixHQUd6QyxhQUFjcEgsS0FBV04sR0FBdUIwSCxHQUFLcEgsRUFBTzJsQixNQUFNYyxZQUFjcmYsRUFBRVIsS0FFakZySCxVQURBUyxFQUFPMmxCLE1BQU1lLFNBQVNsaUIsTUFBT3VoQixFQUFZcmpCLEtBQU0rQixZQUlqRHNoQixFQUFZcmpCLEtBQU9BLEdBSXBCbWpCLEdBQVVBLEdBQVMsSUFBS3BqQixNQUFPZixLQUFxQixJQUNwRHVrQixFQUFJSixFQUFNaGpCLE1BQ1YsT0FBUW9qQixJQUNQM2QsRUFBTWdkLEVBQWV4aUIsS0FBTStpQixFQUFNSSxRQUNqQ3JmLEVBQU8wZixFQUFXaGUsRUFBSSxHQUN0QitkLEdBQWUvZCxFQUFJLElBQU0sSUFBSytDLE1BQU8sS0FBTW5HLE9BR3JDMEIsSUFLTnVmLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FHaENBLEdBQVN4RixFQUFXK2tCLEVBQVFRLGFBQWVSLEVBQVFTLFdBQWNoZ0IsRUFHakV1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU3ZmLE9BR2hDc2YsRUFBWWxtQixFQUFPb0YsUUFDbEJ3QixLQUFNQSxFQUNOMGYsU0FBVUEsRUFDVjdlLEtBQU1BLEVBQ055SixRQUFTQSxFQUNUOUcsS0FBTThHLEVBQVE5RyxLQUNkaEosU0FBVUEsRUFDVnFOLGFBQWNyTixHQUFZcEIsRUFBTzhULEtBQUtyUixNQUFNZ00sYUFBYXJMLEtBQU1oQyxHQUMvRHlsQixVQUFXUixFQUFXalcsS0FBSyxNQUN6QjBWLElBR0lNLEVBQVdKLEVBQVFwZixNQUN6QndmLEVBQVdKLEVBQVFwZixNQUNuQndmLEVBQVNVLGNBQWdCLEVBR25CWCxFQUFRWSxPQUFTWixFQUFRWSxNQUFNbmpCLEtBQU1sQixFQUFNK0UsRUFBTTRlLEVBQVlOLE1BQWtCLEdBQy9FcmpCLEVBQUswSSxrQkFDVDFJLEVBQUswSSxpQkFBa0J4RSxFQUFNbWYsR0FBYSxJQUt4Q0ksRUFBUXJKLE1BQ1pxSixFQUFRckosSUFBSWxaLEtBQU1sQixFQUFNd2pCLEdBRWxCQSxFQUFVaFYsUUFBUTlHLE9BQ3ZCOGIsRUFBVWhWLFFBQVE5RyxLQUFPOEcsRUFBUTlHLE9BSzlCaEosRUFDSmdsQixFQUFTamhCLE9BQVFpaEIsRUFBU1UsZ0JBQWlCLEVBQUdaLEdBRTlDRSxFQUFTM2xCLEtBQU15bEIsR0FJaEJsbUIsRUFBTzJsQixNQUFNQyxPQUFRaGYsSUFBUyxFQUkvQmxFLEdBQU8sT0FJUnFGLE9BQVEsU0FBVXJGLEVBQU1takIsRUFBTzNVLEVBQVM5UCxFQUFVNGxCLEdBRWpELEdBQUlqaUIsR0FBR2tpQixFQUFXM2UsRUFDakIwZCxFQUFRQyxFQUFHQyxFQUNYQyxFQUFTQyxFQUFVeGYsRUFBTXlmLEVBQVlDLEVBQ3JDQyxFQUFXNUYsRUFBVWUsUUFBU2hmLElBQVVpZSxFQUFVOWMsSUFBS25CLEVBRXhELElBQU02akIsSUFBY1AsRUFBU08sRUFBU1AsUUFBdEMsQ0FLQUgsR0FBVUEsR0FBUyxJQUFLcGpCLE1BQU9mLEtBQXFCLElBQ3BEdWtCLEVBQUlKLEVBQU1oakIsTUFDVixPQUFRb2pCLElBTVAsR0FMQTNkLEVBQU1nZCxFQUFleGlCLEtBQU0raUIsRUFBTUksUUFDakNyZixFQUFPMGYsRUFBV2hlLEVBQUksR0FDdEIrZCxHQUFlL2QsRUFBSSxJQUFNLElBQUsrQyxNQUFPLEtBQU1uRyxPQUdyQzBCLEVBQU4sQ0FPQXVmLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUFTdmYsT0FDaENBLEdBQVN4RixFQUFXK2tCLEVBQVFRLGFBQWVSLEVBQVFTLFdBQWNoZ0IsRUFDakV3ZixFQUFXSixFQUFRcGYsT0FDbkIwQixFQUFNQSxFQUFJLElBQVVvRixPQUFRLFVBQVkyWSxFQUFXalcsS0FBSyxpQkFBbUIsV0FHM0U2VyxFQUFZbGlCLEVBQUlxaEIsRUFBU3ZqQixNQUN6QixPQUFRa0MsSUFDUG1oQixFQUFZRSxFQUFVcmhCLElBRWZpaUIsR0FBZVYsSUFBYUosRUFBVUksVUFDekNwVixHQUFXQSxFQUFROUcsT0FBUzhiLEVBQVU5YixNQUN0QzlCLElBQU9BLEVBQUlsRixLQUFNOGlCLEVBQVVXLFlBQzNCemxCLEdBQVlBLElBQWE4a0IsRUFBVTlrQixXQUF5QixPQUFiQSxJQUFxQjhrQixFQUFVOWtCLFlBQ2pGZ2xCLEVBQVNqaEIsT0FBUUosRUFBRyxHQUVmbWhCLEVBQVU5a0IsVUFDZGdsQixFQUFTVSxnQkFFTFgsRUFBUXBlLFFBQ1pvZSxFQUFRcGUsT0FBT25FLEtBQU1sQixFQUFNd2pCLEdBT3pCZSxLQUFjYixFQUFTdmpCLFNBQ3JCc2pCLEVBQVFlLFVBQVlmLEVBQVFlLFNBQVN0akIsS0FBTWxCLEVBQU0yakIsRUFBWUUsRUFBU0MsV0FBYSxHQUN4RnhtQixFQUFPbW5CLFlBQWF6a0IsRUFBTWtFLEVBQU0yZixFQUFTQyxjQUduQ1IsR0FBUXBmLFFBdENmLEtBQU1BLElBQVFvZixHQUNiaG1CLEVBQU8ybEIsTUFBTTVkLE9BQVFyRixFQUFNa0UsRUFBT2lmLEVBQU9JLEdBQUsvVSxFQUFTOVAsR0FBVSxFQTBDL0RwQixHQUFPcUgsY0FBZTJlLFdBQ25CTyxHQUFTQyxPQUNoQjdGLEVBQVU1WSxPQUFRckYsRUFBTSxhQUkxQitELFFBQVMsU0FBVWtmLEVBQU9sZSxFQUFNL0UsRUFBTTBrQixHQUVyQyxHQUFJdmlCLEdBQUd3TSxFQUFLL0ksRUFBSytlLEVBQVlDLEVBQVFkLEVBQVFMLEVBQzVDb0IsR0FBYzdrQixHQUFROUMsR0FDdEJnSCxFQUFPNUYsRUFBWTRDLEtBQU0raEIsRUFBTyxRQUFXQSxFQUFNL2UsS0FBTytlLEVBQ3hEVSxFQUFhcmxCLEVBQVk0QyxLQUFNK2hCLEVBQU8sYUFBZ0JBLEVBQU1rQixVQUFVeGIsTUFBTSxPQUs3RSxJQUhBZ0csRUFBTS9JLEVBQU01RixFQUFPQSxHQUFROUMsRUFHSixJQUFsQjhDLEVBQUtRLFVBQW9DLElBQWxCUixFQUFLUSxXQUs1Qm1pQixFQUFZamlCLEtBQU13RCxFQUFPNUcsRUFBTzJsQixNQUFNYyxhQUl0QzdmLEVBQUsvRixRQUFRLE1BQVEsSUFFekJ3bEIsRUFBYXpmLEVBQUt5RSxNQUFNLEtBQ3hCekUsRUFBT3lmLEVBQVd6VixRQUNsQnlWLEVBQVduaEIsUUFFWm9pQixFQUE2QixFQUFwQjFnQixFQUFLL0YsUUFBUSxNQUFZLEtBQU8rRixFQUd6QytlLEVBQVFBLEVBQU8zbEIsRUFBTzhGLFNBQ3JCNmYsRUFDQSxHQUFJM2xCLEdBQU93bkIsTUFBTzVnQixFQUF1QixnQkFBVitlLElBQXNCQSxHQUd0REEsRUFBTThCLFVBQVlMLEVBQWUsRUFBSSxFQUNyQ3pCLEVBQU1rQixVQUFZUixFQUFXalcsS0FBSyxLQUNsQ3VWLEVBQU0rQixhQUFlL0IsRUFBTWtCLFVBQ3RCblosT0FBUSxVQUFZMlksRUFBV2pXLEtBQUssaUJBQW1CLFdBQzNELEtBR0R1VixFQUFNcFEsT0FBU2hXLFVBQ1RvbUIsRUFBTWhnQixTQUNYZ2dCLEVBQU1oZ0IsT0FBU2pELEdBSWhCK0UsRUFBZSxNQUFSQSxHQUNKa2UsR0FDRjNsQixFQUFPMEQsVUFBVytELEdBQVFrZSxJQUczQlEsRUFBVW5tQixFQUFPMmxCLE1BQU1RLFFBQVN2ZixPQUMxQndnQixJQUFnQmpCLEVBQVExZixTQUFXMGYsRUFBUTFmLFFBQVFqQyxNQUFPOUIsRUFBTStFLE1BQVcsR0FBakYsQ0FNQSxJQUFNMmYsSUFBaUJqQixFQUFRd0IsV0FBYTNuQixFQUFPOEcsU0FBVXBFLEdBQVMsQ0FNckUsSUFKQTJrQixFQUFhbEIsRUFBUVEsY0FBZ0IvZixFQUMvQnllLEVBQVlqaUIsS0FBTWlrQixFQUFhemdCLEtBQ3BDeUssRUFBTUEsRUFBSTVOLFlBRUg0TixFQUFLQSxFQUFNQSxFQUFJNU4sV0FDdEI4akIsRUFBVTltQixLQUFNNFEsR0FDaEIvSSxFQUFNK0ksQ0FJRi9JLE1BQVM1RixFQUFLUyxlQUFpQnZELElBQ25DMm5CLEVBQVU5bUIsS0FBTTZILEVBQUkySixhQUFlM0osRUFBSXNmLGNBQWdCdG9CLEdBS3pEdUYsRUFBSSxDQUNKLFFBQVN3TSxFQUFNa1csRUFBVTFpQixRQUFVOGdCLEVBQU1rQyx1QkFFeENsQyxFQUFNL2UsS0FBTy9CLEVBQUksRUFDaEJ3aUIsRUFDQWxCLEVBQVFTLFVBQVloZ0IsRUFHckI0ZixHQUFXN0YsRUFBVTljLElBQUt3TixFQUFLLGVBQW9Cc1UsRUFBTS9lLE9BQVUrWixFQUFVOWMsSUFBS3dOLEVBQUssVUFDbEZtVixHQUNKQSxFQUFPaGlCLE1BQU82TSxFQUFLNUosR0FJcEIrZSxFQUFTYyxHQUFValcsRUFBS2lXLEdBQ25CZCxHQUFVeG1CLEVBQU80aEIsV0FBWXZRLElBQVNtVixFQUFPaGlCLE9BQVNnaUIsRUFBT2hpQixNQUFPNk0sRUFBSzVKLE1BQVcsR0FDeEZrZSxFQUFNbUMsZ0JBa0NSLE9BL0JBbkMsR0FBTS9lLEtBQU9BLEVBR1B3Z0IsR0FBaUJ6QixFQUFNb0Msc0JBRXJCNUIsRUFBUTZCLFVBQVk3QixFQUFRNkIsU0FBU3hqQixNQUFPK2lCLEVBQVV0YSxNQUFPeEYsTUFBVyxJQUM5RXpILEVBQU80aEIsV0FBWWxmLElBSWQ0a0IsR0FBVXRuQixFQUFPc0QsV0FBWVosRUFBTWtFLE1BQWE1RyxFQUFPOEcsU0FBVXBFLEtBR3JFNEYsRUFBTTVGLEVBQU00a0IsR0FFUGhmLElBQ0o1RixFQUFNNGtCLEdBQVcsTUFJbEJ0bkIsRUFBTzJsQixNQUFNYyxVQUFZN2YsRUFDekJsRSxFQUFNa0UsS0FDTjVHLEVBQU8ybEIsTUFBTWMsVUFBWWxuQixVQUVwQitJLElBQ0o1RixFQUFNNGtCLEdBQVdoZixJQU1kcWQsRUFBTXBRLFNBR2RtUixTQUFVLFNBQVVmLEdBR25CQSxFQUFRM2xCLEVBQU8ybEIsTUFBTXNDLElBQUt0QyxFQUUxQixJQUFJOWdCLEdBQUdFLEVBQUdkLEVBQUttUyxFQUFTOFAsRUFDdkJnQyxLQUNBN2pCLEVBQU8zRCxFQUFXa0QsS0FBTWEsV0FDeEIyaEIsR0FBYXpGLEVBQVU5YyxJQUFLbEIsS0FBTSxlQUFvQmdqQixFQUFNL2UsVUFDNUR1ZixFQUFVbm1CLEVBQU8ybEIsTUFBTVEsUUFBU1IsRUFBTS9lLFNBT3ZDLElBSkF2QyxFQUFLLEdBQUtzaEIsRUFDVkEsRUFBTXdDLGVBQWlCeGxCLE1BR2xCd2pCLEVBQVFpQyxhQUFlakMsRUFBUWlDLFlBQVl4a0IsS0FBTWpCLEtBQU1nakIsTUFBWSxFQUF4RSxDQUtBdUMsRUFBZWxvQixFQUFPMmxCLE1BQU1TLFNBQVN4aUIsS0FBTWpCLEtBQU1nakIsRUFBT1MsR0FHeER2aEIsRUFBSSxDQUNKLFFBQVN1UixFQUFVOFIsRUFBY3JqQixRQUFXOGdCLEVBQU1rQyx1QkFBeUIsQ0FDMUVsQyxFQUFNMEMsY0FBZ0JqUyxFQUFRMVQsS0FFOUJxQyxFQUFJLENBQ0osUUFBU21oQixFQUFZOVAsRUFBUWdRLFNBQVVyaEIsUUFBVzRnQixFQUFNMkMsa0NBSWpEM0MsRUFBTStCLGNBQWdCL0IsRUFBTStCLGFBQWF0a0IsS0FBTThpQixFQUFVVyxjQUU5RGxCLEVBQU1PLFVBQVlBLEVBQ2xCUCxFQUFNbGUsS0FBT3llLEVBQVV6ZSxLQUV2QnhELElBQVNqRSxFQUFPMmxCLE1BQU1RLFFBQVNELEVBQVVJLGVBQWtCRSxRQUFVTixFQUFVaFYsU0FDNUUxTSxNQUFPNFIsRUFBUTFULEtBQU0yQixHQUVuQkosSUFBUTFFLFlBQ05vbUIsRUFBTXBRLE9BQVN0UixNQUFTLElBQzdCMGhCLEVBQU1tQyxpQkFDTm5DLEVBQU00QyxvQkFZWCxNQUpLcEMsR0FBUXFDLGNBQ1pyQyxFQUFRcUMsYUFBYTVrQixLQUFNakIsS0FBTWdqQixHQUczQkEsRUFBTXBRLFNBR2Q2USxTQUFVLFNBQVVULEVBQU9TLEdBQzFCLEdBQUl2aEIsR0FBR3FILEVBQVN1YyxFQUFLdkMsRUFDcEJnQyxLQUNBcEIsRUFBZ0JWLEVBQVNVLGNBQ3pCelYsRUFBTXNVLEVBQU1oZ0IsTUFLYixJQUFLbWhCLEdBQWlCelYsRUFBSW5PLFlBQWN5aUIsRUFBTWpPLFFBQXlCLFVBQWZpTyxFQUFNL2UsTUFFN0QsS0FBUXlLLElBQVExTyxLQUFNME8sRUFBTUEsRUFBSTVOLFlBQWNkLEtBRzdDLEdBQUswTyxFQUFJK0YsWUFBYSxHQUF1QixVQUFmdU8sRUFBTS9lLEtBQW1CLENBRXRELElBREFzRixLQUNNckgsRUFBSSxFQUFPaWlCLEVBQUpqaUIsRUFBbUJBLElBQy9CcWhCLEVBQVlFLEVBQVV2aEIsR0FHdEI0akIsRUFBTXZDLEVBQVU5a0IsU0FBVyxJQUV0QjhLLEVBQVN1YyxLQUFVbHBCLFlBQ3ZCMk0sRUFBU3VjLEdBQVF2QyxFQUFVelgsYUFDMUJ6TyxFQUFReW9CLEVBQUs5bEIsTUFBT29hLE1BQU8xTCxJQUFTLEVBQ3BDclIsRUFBTytDLEtBQU0wbEIsRUFBSzlsQixLQUFNLE1BQVEwTyxJQUFReE8sUUFFckNxSixFQUFTdWMsSUFDYnZjLEVBQVF6TCxLQUFNeWxCLEVBR1hoYSxHQUFRckosUUFDWnFsQixFQUFhem5CLE1BQU9pQyxLQUFNMk8sRUFBSytVLFNBQVVsYSxJQVc3QyxNQUpxQmthLEdBQVN2akIsT0FBekJpa0IsR0FDSm9CLEVBQWF6bkIsTUFBT2lDLEtBQU1DLEtBQU15akIsU0FBVUEsRUFBU3psQixNQUFPbW1CLEtBR3BEb0IsR0FJUlEsTUFBTyx3SEFBd0hyZCxNQUFNLEtBRXJJc2QsWUFFQUMsVUFDQ0YsTUFBTyw0QkFBNEJyZCxNQUFNLEtBQ3pDcUgsT0FBUSxTQUFVaVQsRUFBT2tELEdBT3hCLE1BSm9CLE9BQWZsRCxFQUFNbUQsUUFDVm5ELEVBQU1tRCxNQUE2QixNQUFyQkQsRUFBU0UsU0FBbUJGLEVBQVNFLFNBQVdGLEVBQVNHLFNBR2pFckQsSUFJVHNELFlBQ0NQLE1BQU8sdUZBQXVGcmQsTUFBTSxLQUNwR3FILE9BQVEsU0FBVWlULEVBQU9rRCxHQUN4QixHQUFJSyxHQUFVblgsRUFBS21PLEVBQ2xCeEksRUFBU21SLEVBQVNuUixNQWtCbkIsT0Fmb0IsT0FBZmlPLEVBQU13RCxPQUFxQyxNQUFwQk4sRUFBU08sVUFDcENGLEVBQVd2RCxFQUFNaGdCLE9BQU94QyxlQUFpQnZELEVBQ3pDbVMsRUFBTW1YLEVBQVNwcEIsZ0JBQ2ZvZ0IsRUFBT2dKLEVBQVNoSixLQUVoQnlGLEVBQU13RCxNQUFRTixFQUFTTyxTQUFZclgsR0FBT0EsRUFBSXNYLFlBQWNuSixHQUFRQSxFQUFLbUosWUFBYyxJQUFRdFgsR0FBT0EsRUFBSXVYLFlBQWNwSixHQUFRQSxFQUFLb0osWUFBYyxHQUNuSjNELEVBQU00RCxNQUFRVixFQUFTVyxTQUFZelgsR0FBT0EsRUFBSTBYLFdBQWN2SixHQUFRQSxFQUFLdUosV0FBYyxJQUFRMVgsR0FBT0EsRUFBSTJYLFdBQWN4SixHQUFRQSxFQUFLd0osV0FBYyxJQUs5SS9ELEVBQU1tRCxPQUFTcFIsSUFBV25ZLFlBQy9Cb21CLEVBQU1tRCxNQUFtQixFQUFUcFIsRUFBYSxFQUFlLEVBQVRBLEVBQWEsRUFBZSxFQUFUQSxFQUFhLEVBQUksR0FHakVpTyxJQUlUc0MsSUFBSyxTQUFVdEMsR0FDZCxHQUFLQSxFQUFPM2xCLEVBQU84RixTQUNsQixNQUFPNmYsRUFJUixJQUFJOWdCLEdBQUcwYyxFQUFNL2IsRUFDWm9CLEVBQU8rZSxFQUFNL2UsS0FDYitpQixFQUFnQmhFLEVBQ2hCaUUsRUFBVWpuQixLQUFLZ21CLFNBQVUvaEIsRUFFcEJnakIsS0FDTGpuQixLQUFLZ21CLFNBQVUvaEIsR0FBU2dqQixFQUN2QnhFLEVBQVloaUIsS0FBTXdELEdBQVNqRSxLQUFLc21CLFdBQ2hDOUQsRUFBVS9oQixLQUFNd0QsR0FBU2pFLEtBQUtpbUIsYUFHaENwakIsRUFBT29rQixFQUFRbEIsTUFBUS9sQixLQUFLK2xCLE1BQU1ub0IsT0FBUXFwQixFQUFRbEIsT0FBVS9sQixLQUFLK2xCLE1BRWpFL0MsRUFBUSxHQUFJM2xCLEdBQU93bkIsTUFBT21DLEdBRTFCOWtCLEVBQUlXLEVBQUszQyxNQUNULE9BQVFnQyxJQUNQMGMsRUFBTy9iLEVBQU1YLEdBQ2I4Z0IsRUFBT3BFLEdBQVNvSSxFQUFlcEksRUFlaEMsT0FWTW9FLEdBQU1oZ0IsU0FDWGdnQixFQUFNaGdCLE9BQVMvRixHQUtlLElBQTFCK2xCLEVBQU1oZ0IsT0FBT3pDLFdBQ2pCeWlCLEVBQU1oZ0IsT0FBU2dnQixFQUFNaGdCLE9BQU9sQyxZQUd0Qm1tQixFQUFRbFgsT0FBUWtYLEVBQVFsWCxPQUFRaVQsRUFBT2dFLEdBQWtCaEUsR0FHakVRLFNBQ0MwRCxNQUVDbEMsVUFBVSxHQUVYN1EsT0FFQ3JRLFFBQVMsV0FDUixNQUFLOUQsUUFBUzhpQixLQUF1QjlpQixLQUFLbVUsT0FDekNuVSxLQUFLbVUsU0FDRSxHQUZSLFdBS0Q2UCxhQUFjLFdBRWZtRCxNQUNDcmpCLFFBQVMsV0FDUixNQUFLOUQsUUFBUzhpQixLQUF1QjlpQixLQUFLbW5CLE1BQ3pDbm5CLEtBQUttbkIsUUFDRSxHQUZSLFdBS0RuRCxhQUFjLFlBRWZvRCxPQUVDdGpCLFFBQVMsV0FDUixNQUFtQixhQUFkOUQsS0FBS2lFLE1BQXVCakUsS0FBS29uQixPQUFTL3BCLEVBQU9zSixTQUFVM0csS0FBTSxVQUNyRUEsS0FBS29uQixTQUNFLEdBRlIsV0FPRC9CLFNBQVUsU0FBVXJDLEdBQ25CLE1BQU8zbEIsR0FBT3NKLFNBQVVxYyxFQUFNaGdCLE9BQVEsT0FJeENxa0IsY0FDQ3hCLGFBQWMsU0FBVTdDLEdBSWxCQSxFQUFNcFEsU0FBV2hXLFlBQ3JCb21CLEVBQU1nRSxjQUFjTSxZQUFjdEUsRUFBTXBRLFdBTTVDMlUsU0FBVSxTQUFVdGpCLEVBQU1sRSxFQUFNaWpCLEVBQU93RSxHQUl0QyxHQUFJL2lCLEdBQUlwSCxFQUFPb0YsT0FDZCxHQUFJcEYsR0FBT3duQixNQUNYN0IsR0FFQy9lLEtBQU1BLEVBQ053akIsYUFBYSxFQUNiVCxrQkFHR1EsR0FDSm5xQixFQUFPMmxCLE1BQU1sZixRQUFTVyxFQUFHLEtBQU0xRSxHQUUvQjFDLEVBQU8ybEIsTUFBTWUsU0FBUzlpQixLQUFNbEIsRUFBTTBFLEdBRTlCQSxFQUFFMmdCLHNCQUNOcEMsRUFBTW1DLG1CQUtUOW5CLEVBQU9tbkIsWUFBYyxTQUFVemtCLEVBQU1rRSxFQUFNNGYsR0FDckM5akIsRUFBS04scUJBQ1RNLEVBQUtOLG9CQUFxQndFLEVBQU00ZixHQUFRLElBSTFDeG1CLEVBQU93bkIsTUFBUSxTQUFVamlCLEVBQUttakIsR0FFN0IsTUFBTy9sQixnQkFBZ0IzQyxHQUFPd25CLE9BS3pCamlCLEdBQU9BLEVBQUlxQixNQUNmakUsS0FBS2duQixjQUFnQnBrQixFQUNyQjVDLEtBQUtpRSxLQUFPckIsRUFBSXFCLEtBSWhCakUsS0FBS29sQixtQkFBdUJ4aUIsRUFBSThrQixrQkFDL0I5a0IsRUFBSStrQixtQkFBcUIva0IsRUFBSStrQixvQkFBd0IvRSxFQUFhQyxHQUluRTdpQixLQUFLaUUsS0FBT3JCLEVBSVJtakIsR0FDSjFvQixFQUFPb0YsT0FBUXpDLEtBQU0rbEIsR0FJdEIvbEIsS0FBSzRuQixVQUFZaGxCLEdBQU9BLEVBQUlnbEIsV0FBYXZxQixFQUFPNEssTUFHaERqSSxLQUFNM0MsRUFBTzhGLFVBQVksRUF2QnpCLFdBSlEsR0FBSTlGLEdBQU93bkIsTUFBT2ppQixFQUFLbWpCLElBZ0NoQzFvQixFQUFPd25CLE1BQU1sbEIsV0FDWnlsQixtQkFBb0J2QyxFQUNwQnFDLHFCQUFzQnJDLEVBQ3RCOEMsOEJBQStCOUMsRUFFL0JzQyxlQUFnQixXQUNmLEdBQUkxZ0IsR0FBSXpFLEtBQUtnbkIsYUFFYmhuQixNQUFLb2xCLG1CQUFxQnhDLEVBRXJCbmUsR0FBS0EsRUFBRTBnQixnQkFDWDFnQixFQUFFMGdCLGtCQUdKUyxnQkFBaUIsV0FDaEIsR0FBSW5oQixHQUFJekUsS0FBS2duQixhQUViaG5CLE1BQUtrbEIscUJBQXVCdEMsRUFFdkJuZSxHQUFLQSxFQUFFbWhCLGlCQUNYbmhCLEVBQUVtaEIsbUJBR0ppQyx5QkFBMEIsV0FDekI3bkIsS0FBSzJsQiw4QkFBZ0MvQyxFQUNyQzVpQixLQUFLNGxCLG9CQU1Qdm9CLEVBQU9tRSxNQUNOc21CLFdBQVksWUFDWkMsV0FBWSxZQUNWLFNBQVVDLEVBQU0xQyxHQUNsQmpvQixFQUFPMmxCLE1BQU1RLFFBQVN3RSxJQUNyQmhFLGFBQWNzQixFQUNkckIsU0FBVXFCLEVBRVZ6QixPQUFRLFNBQVViLEdBQ2pCLEdBQUkxaEIsR0FDSDBCLEVBQVNoRCxLQUNUaW9CLEVBQVVqRixFQUFNa0YsY0FDaEIzRSxFQUFZUCxFQUFNTyxTQVNuQixTQUxNMEUsR0FBWUEsSUFBWWpsQixJQUFXM0YsRUFBT21NLFNBQVV4RyxFQUFRaWxCLE1BQ2pFakYsRUFBTS9lLEtBQU9zZixFQUFVSSxTQUN2QnJpQixFQUFNaWlCLEVBQVVoVixRQUFRMU0sTUFBTzdCLEtBQU04QixXQUNyQ2toQixFQUFNL2UsS0FBT3FoQixHQUVQaGtCLE1BT0pqRSxFQUFPc0wsUUFBUXNVLGdCQUNwQjVmLEVBQU9tRSxNQUFPMlMsTUFBTyxVQUFXZ1QsS0FBTSxZQUFjLFNBQVVhLEVBQU0xQyxHQUduRSxHQUFJNkMsR0FBVyxFQUNkNVosRUFBVSxTQUFVeVUsR0FDbkIzbEIsRUFBTzJsQixNQUFNdUUsU0FBVWpDLEVBQUt0QyxFQUFNaGdCLE9BQVEzRixFQUFPMmxCLE1BQU1zQyxJQUFLdEMsSUFBUyxHQUd2RTNsQixHQUFPMmxCLE1BQU1RLFFBQVM4QixJQUNyQmxCLE1BQU8sV0FDYyxJQUFmK0QsS0FDSmxyQixFQUFTd0wsaUJBQWtCdWYsRUFBTXpaLEdBQVMsSUFHNUNnVyxTQUFVLFdBQ1csTUFBYjRELEdBQ05sckIsRUFBU3dDLG9CQUFxQnVvQixFQUFNelosR0FBUyxPQU9sRGxSLEVBQU9zQixHQUFHOEQsUUFFVDJsQixHQUFJLFNBQVVsRixFQUFPemtCLEVBQVVxRyxFQUFNbkcsRUFBaUJnakIsR0FDckQsR0FBSTBHLEdBQVFwa0IsQ0FHWixJQUFzQixnQkFBVmlmLEdBQXFCLENBRVAsZ0JBQWJ6a0IsS0FFWHFHLEVBQU9BLEdBQVFyRyxFQUNmQSxFQUFXN0IsVUFFWixLQUFNcUgsSUFBUWlmLEdBQ2JsakIsS0FBS29vQixHQUFJbmtCLEVBQU14RixFQUFVcUcsRUFBTW9lLEVBQU9qZixHQUFRMGQsRUFFL0MsT0FBTzNoQixNQW1CUixHQWhCYSxNQUFSOEUsR0FBc0IsTUFBTm5HLEdBRXBCQSxFQUFLRixFQUNMcUcsRUFBT3JHLEVBQVc3QixXQUNELE1BQU4rQixJQUNjLGdCQUFiRixJQUVYRSxFQUFLbUcsRUFDTEEsRUFBT2xJLFlBR1ArQixFQUFLbUcsRUFDTEEsRUFBT3JHLEVBQ1BBLEVBQVc3QixZQUdSK0IsS0FBTyxFQUNYQSxFQUFLa2tCLE1BQ0MsS0FBTWxrQixFQUNaLE1BQU9xQixLQWFSLE9BVmEsS0FBUjJoQixJQUNKMEcsRUFBUzFwQixFQUNUQSxFQUFLLFNBQVVxa0IsR0FHZCxNQURBM2xCLEtBQVMwRyxJQUFLaWYsR0FDUHFGLEVBQU94bUIsTUFBTzdCLEtBQU04QixZQUc1Qm5ELEVBQUc4SSxLQUFPNGdCLEVBQU81Z0IsT0FBVTRnQixFQUFPNWdCLEtBQU9wSyxFQUFPb0ssU0FFMUN6SCxLQUFLd0IsS0FBTSxXQUNqQm5FLEVBQU8ybEIsTUFBTTdJLElBQUtuYSxLQUFNa2pCLEVBQU92a0IsRUFBSW1HLEVBQU1yRyxNQUczQ2tqQixJQUFLLFNBQVV1QixFQUFPemtCLEVBQVVxRyxFQUFNbkcsR0FDckMsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU96a0IsRUFBVXFHLEVBQU1uRyxFQUFJLElBRTVDb0YsSUFBSyxTQUFVbWYsRUFBT3prQixFQUFVRSxHQUMvQixHQUFJNGtCLEdBQVd0ZixDQUNmLElBQUtpZixHQUFTQSxFQUFNaUMsZ0JBQWtCakMsRUFBTUssVUFRM0MsTUFOQUEsR0FBWUwsRUFBTUssVUFDbEJsbUIsRUFBUTZsQixFQUFNc0MsZ0JBQWlCemhCLElBQzlCd2YsRUFBVVcsVUFBWVgsRUFBVUksU0FBVyxJQUFNSixFQUFVVyxVQUFZWCxFQUFVSSxTQUNqRkosRUFBVTlrQixTQUNWOGtCLEVBQVVoVixTQUVKdk8sSUFFUixJQUFzQixnQkFBVmtqQixHQUFxQixDQUVoQyxJQUFNamYsSUFBUWlmLEdBQ2JsakIsS0FBSytELElBQUtFLEVBQU14RixFQUFVeWtCLEVBQU9qZixHQUVsQyxPQUFPakUsTUFVUixPQVJLdkIsS0FBYSxHQUE2QixrQkFBYkEsTUFFakNFLEVBQUtGLEVBQ0xBLEVBQVc3QixXQUVQK0IsS0FBTyxJQUNYQSxFQUFLa2tCLEdBRUM3aUIsS0FBS3dCLEtBQUssV0FDaEJuRSxFQUFPMmxCLE1BQU01ZCxPQUFRcEYsS0FBTWtqQixFQUFPdmtCLEVBQUlGLE1BSXhDcUYsUUFBUyxTQUFVRyxFQUFNYSxHQUN4QixNQUFPOUUsTUFBS3dCLEtBQUssV0FDaEJuRSxFQUFPMmxCLE1BQU1sZixRQUFTRyxFQUFNYSxFQUFNOUUsU0FHcENzb0IsZUFBZ0IsU0FBVXJrQixFQUFNYSxHQUMvQixHQUFJL0UsR0FBT0MsS0FBSyxFQUNoQixPQUFLRCxHQUNHMUMsRUFBTzJsQixNQUFNbGYsUUFBU0csRUFBTWEsRUFBTS9FLEdBQU0sR0FEaEQsWUFLRixJQUFJd29CLEdBQVcsaUJBQ2RDLEVBQWUsaUNBQ2ZDLEVBQWdCcHJCLEVBQU84VCxLQUFLclIsTUFBTWdNLGFBRWxDNGMsR0FDQ0MsVUFBVSxFQUNWQyxVQUFVLEVBQ1ZoSixNQUFNLEVBQ05pSixNQUFNLEVBR1J4ckIsR0FBT3NCLEdBQUc4RCxRQUNUckMsS0FBTSxTQUFVM0IsR0FDZixHQUFJeUQsR0FDSFosS0FDQTJZLEVBQU9qYSxLQUNQbUMsRUFBTThYLEVBQUsvWixNQUVaLElBQXlCLGdCQUFiekIsR0FDWCxNQUFPdUIsTUFBS29CLFVBQVcvRCxFQUFRb0IsR0FBV3NSLE9BQU8sV0FDaEQsSUFBTTdOLEVBQUksRUFBT0MsRUFBSkQsRUFBU0EsSUFDckIsR0FBSzdFLEVBQU9tTSxTQUFVeVEsRUFBTS9YLEdBQUtsQyxNQUNoQyxPQUFPLElBTVgsS0FBTWtDLEVBQUksRUFBT0MsRUFBSkQsRUFBU0EsSUFDckI3RSxFQUFPK0MsS0FBTTNCLEVBQVV3YixFQUFNL1gsR0FBS1osRUFNbkMsT0FGQUEsR0FBTXRCLEtBQUtvQixVQUFXZSxFQUFNLEVBQUk5RSxFQUFPMGIsT0FBUXpYLEdBQVFBLEdBQ3ZEQSxFQUFJN0MsU0FBV3VCLEtBQUt2QixTQUFXdUIsS0FBS3ZCLFNBQVcsSUFBTUEsRUFBV0EsRUFDekQ2QyxHQUdSdVMsSUFBSyxTQUFVN1EsR0FDZCxHQUFJOGxCLEdBQVV6ckIsRUFBUTJGLEVBQVFoRCxNQUM3Qm9ILEVBQUkwaEIsRUFBUTVvQixNQUViLE9BQU9GLE1BQUsrUCxPQUFPLFdBQ2xCLEdBQUk3TixHQUFJLENBQ1IsTUFBWWtGLEVBQUpsRixFQUFPQSxJQUNkLEdBQUs3RSxFQUFPbU0sU0FBVXhKLEtBQU04b0IsRUFBUTVtQixJQUNuQyxPQUFPLEtBTVh3UixJQUFLLFNBQVVqVixHQUNkLE1BQU91QixNQUFLb0IsVUFBVzJuQixHQUFPL29CLEtBQU12QixPQUFnQixLQUdyRHNSLE9BQVEsU0FBVXRSLEdBQ2pCLE1BQU91QixNQUFLb0IsVUFBVzJuQixHQUFPL29CLEtBQU12QixPQUFnQixLQUdyRHVxQixHQUFJLFNBQVV2cUIsR0FDYixRQUFTc3FCLEdBQ1Ivb0IsS0FJb0IsZ0JBQWJ2QixJQUF5QmdxQixFQUFjaG9CLEtBQU1oQyxHQUNuRHBCLEVBQVFvQixHQUNSQSxPQUNELEdBQ0N5QixRQUdIK29CLFFBQVMsU0FBVXBYLEVBQVduVCxHQUM3QixHQUFJZ1EsR0FDSHhNLEVBQUksRUFDSmtGLEVBQUlwSCxLQUFLRSxPQUNUdVQsS0FDQXlWLEVBQVFULEVBQWNob0IsS0FBTW9SLElBQW9DLGdCQUFkQSxHQUNqRHhVLEVBQVF3VSxFQUFXblQsR0FBV3NCLEtBQUt0QixTQUNuQyxDQUVGLE1BQVkwSSxFQUFKbEYsRUFBT0EsSUFDZCxJQUFNd00sRUFBTTFPLEtBQUtrQyxHQUFJd00sR0FBT0EsSUFBUWhRLEVBQVNnUSxFQUFNQSxFQUFJNU4sV0FFdEQsR0FBb0IsR0FBZjROLEVBQUluTyxXQUFrQjJvQixFQUMxQkEsRUFBSTlPLE1BQU0xTCxHQUFPLEdBR0EsSUFBakJBLEVBQUluTyxVQUNIbEQsRUFBTytDLEtBQUtnUSxnQkFBZ0IxQixFQUFLbUQsSUFBYyxDQUVoRG5ELEVBQU0rRSxFQUFRM1YsS0FBTTRRLEVBQ3BCLE9BS0gsTUFBTzFPLE1BQUtvQixVQUFXcVMsRUFBUXZULE9BQVMsRUFBSTdDLEVBQU8wYixPQUFRdEYsR0FBWUEsSUFLeEUyRyxNQUFPLFNBQVVyYSxHQUdoQixNQUFNQSxHQUtlLGdCQUFUQSxHQUNKOUIsRUFBYWdELEtBQU01RCxFQUFRMEMsR0FBUUMsS0FBTSxJQUkxQy9CLEVBQWFnRCxLQUFNakIsS0FHekJELEVBQUtILE9BQVNHLEVBQU0sR0FBTUEsR0FaakJDLEtBQU0sSUFBT0EsS0FBTSxHQUFJYyxXQUFlZCxLQUFLK0IsUUFBUW9uQixVQUFVanBCLE9BQVMsSUFnQmpGaWEsSUFBSyxTQUFVMWIsRUFBVUMsR0FDeEIsR0FBSWlnQixHQUEwQixnQkFBYmxnQixHQUNmcEIsRUFBUW9CLEVBQVVDLEdBQ2xCckIsRUFBTzBELFVBQVd0QyxHQUFZQSxFQUFTOEIsVUFBYTlCLEdBQWFBLEdBQ2xFWSxFQUFNaEMsRUFBT2dELE1BQU9MLEtBQUtrQixNQUFPeWQsRUFFakMsT0FBTzNlLE1BQUtvQixVQUFXL0QsRUFBTzBiLE9BQU8xWixLQUd0QytwQixRQUFTLFNBQVUzcUIsR0FDbEIsTUFBT3VCLE1BQUttYSxJQUFpQixNQUFaMWIsRUFDaEJ1QixLQUFLdUIsV0FBYXZCLEtBQUt1QixXQUFXd08sT0FBT3RSLE1BSzVDLFNBQVM0cUIsR0FBUzNhLEVBQUt1RCxHQUN0QixPQUFTdkQsRUFBTUEsRUFBSXVELEtBQTBCLElBQWpCdkQsRUFBSW5PLFVBRWhDLE1BQU9tTyxHQUdSclIsRUFBT21FLE1BQ042TixPQUFRLFNBQVV0UCxHQUNqQixHQUFJc1AsR0FBU3RQLEVBQUtlLFVBQ2xCLE9BQU91TyxJQUE4QixLQUFwQkEsRUFBTzlPLFNBQWtCOE8sRUFBUyxNQUVwRGlhLFFBQVMsU0FBVXZwQixHQUNsQixNQUFPMUMsR0FBTzRVLElBQUtsUyxFQUFNLGVBRTFCd3BCLGFBQWMsU0FBVXhwQixFQUFNbUMsRUFBR3NuQixHQUNoQyxNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxhQUFjeXBCLElBRXhDNUosS0FBTSxTQUFVN2YsR0FDZixNQUFPc3BCLEdBQVN0cEIsRUFBTSxnQkFFdkI4b0IsS0FBTSxTQUFVOW9CLEdBQ2YsTUFBT3NwQixHQUFTdHBCLEVBQU0sb0JBRXZCMHBCLFFBQVMsU0FBVTFwQixHQUNsQixNQUFPMUMsR0FBTzRVLElBQUtsUyxFQUFNLGdCQUUxQm9wQixRQUFTLFNBQVVwcEIsR0FDbEIsTUFBTzFDLEdBQU80VSxJQUFLbFMsRUFBTSxvQkFFMUIycEIsVUFBVyxTQUFVM3BCLEVBQU1tQyxFQUFHc25CLEdBQzdCLE1BQU9uc0IsR0FBTzRVLElBQUtsUyxFQUFNLGNBQWV5cEIsSUFFekNHLFVBQVcsU0FBVTVwQixFQUFNbUMsRUFBR3NuQixHQUM3QixNQUFPbnNCLEdBQU80VSxJQUFLbFMsRUFBTSxrQkFBbUJ5cEIsSUFFN0NJLFNBQVUsU0FBVTdwQixHQUNuQixNQUFPMUMsR0FBT2dzQixTQUFXdHBCLEVBQUtlLGdCQUFtQjhPLFdBQVk3UCxJQUU5RDRvQixTQUFVLFNBQVU1b0IsR0FDbkIsTUFBTzFDLEdBQU9nc0IsUUFBU3RwQixFQUFLNlAsYUFFN0JnWixTQUFVLFNBQVU3b0IsR0FDbkIsTUFBT0EsR0FBSzhwQixpQkFBbUJ4c0IsRUFBT2dELFNBQVdOLEVBQUtzRixjQUVyRCxTQUFVMUMsRUFBTWhFLEdBQ2xCdEIsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVU2bUIsRUFBTy9xQixHQUNwQyxHQUFJZ1YsR0FBVXBXLEVBQU9nRixJQUFLckMsS0FBTXJCLEVBQUk2cUIsRUFzQnBDLE9BcEIwQixVQUFyQjdtQixFQUFLM0UsTUFBTyxNQUNoQlMsRUFBVytxQixHQUdQL3FCLEdBQWdDLGdCQUFiQSxLQUN2QmdWLEVBQVVwVyxFQUFPMFMsT0FBUXRSLEVBQVVnVixJQUcvQnpULEtBQUtFLE9BQVMsSUFFWndvQixFQUFrQi9sQixJQUN2QnRGLEVBQU8wYixPQUFRdEYsR0FJWCtVLEVBQWEvbkIsS0FBTWtDLElBQ3ZCOFEsRUFBUXFXLFdBSUg5cEIsS0FBS29CLFVBQVdxUyxNQUl6QnBXLEVBQU9vRixRQUNOc04sT0FBUSxTQUFVb0IsRUFBTTlQLEVBQU9xUyxHQUM5QixHQUFJM1QsR0FBT3NCLEVBQU8sRUFNbEIsT0FKS3FTLEtBQ0p2QyxFQUFPLFFBQVVBLEVBQU8sS0FHRCxJQUFqQjlQLEVBQU1uQixRQUFrQyxJQUFsQkgsRUFBS1EsU0FDakNsRCxFQUFPK0MsS0FBS2dRLGdCQUFpQnJRLEVBQU1vUixJQUFXcFIsTUFDOUMxQyxFQUFPK0MsS0FBS21KLFFBQVM0SCxFQUFNOVQsRUFBT2dLLEtBQU1oRyxFQUFPLFNBQVV0QixHQUN4RCxNQUF5QixLQUFsQkEsRUFBS1EsYUFJZjBSLElBQUssU0FBVWxTLEVBQU1rUyxFQUFLdVgsR0FDekIsR0FBSS9WLE1BQ0hzVyxFQUFXUCxJQUFVNXNCLFNBRXRCLFFBQVNtRCxFQUFPQSxFQUFNa1MsS0FBNEIsSUFBbEJsUyxFQUFLUSxTQUNwQyxHQUF1QixJQUFsQlIsRUFBS1EsU0FBaUIsQ0FDMUIsR0FBS3dwQixHQUFZMXNCLEVBQVEwQyxHQUFPaXBCLEdBQUlRLEdBQ25DLEtBRUQvVixHQUFRM1YsS0FBTWlDLEdBR2hCLE1BQU8wVCxJQUdSNFYsUUFBUyxTQUFVVyxFQUFHanFCLEdBQ3JCLEdBQUkwVCxLQUVKLE1BQVF1VyxFQUFHQSxFQUFJQSxFQUFFbmIsWUFDSSxJQUFmbWIsRUFBRXpwQixVQUFrQnlwQixJQUFNanFCLEdBQzlCMFQsRUFBUTNWLEtBQU1rc0IsRUFJaEIsT0FBT3ZXLEtBS1QsU0FBU3NWLElBQVEzWCxFQUFVNlksRUFBV3ZXLEdBQ3JDLEdBQUtyVyxFQUFPc0QsV0FBWXNwQixHQUN2QixNQUFPNXNCLEdBQU9nSyxLQUFNK0osRUFBVSxTQUFVclIsRUFBTW1DLEdBRTdDLFFBQVMrbkIsRUFBVWhwQixLQUFNbEIsRUFBTW1DLEVBQUduQyxLQUFXMlQsR0FLL0MsSUFBS3VXLEVBQVUxcEIsU0FDZCxNQUFPbEQsR0FBT2dLLEtBQU0rSixFQUFVLFNBQVVyUixHQUN2QyxNQUFTQSxLQUFTa3FCLElBQWdCdlcsR0FLcEMsSUFBMEIsZ0JBQWR1VyxHQUF5QixDQUNwQyxHQUFLMUIsRUFBUzluQixLQUFNd3BCLEdBQ25CLE1BQU81c0IsR0FBTzBTLE9BQVFrYSxFQUFXN1ksRUFBVXNDLEVBRzVDdVcsR0FBWTVzQixFQUFPMFMsT0FBUWthLEVBQVc3WSxHQUd2QyxNQUFPL1QsR0FBT2dLLEtBQU0rSixFQUFVLFNBQVVyUixHQUN2QyxNQUFTOUIsR0FBYWdELEtBQU1ncEIsRUFBV2xxQixJQUFVLElBQVEyVCxJQUczRCxHQUFJd1csSUFBWSwwRUFDZkMsR0FBVyxZQUNYQyxHQUFRLFlBQ1JDLEdBQWUsMEJBQ2ZDLEdBQThCLHdCQUU5QkMsR0FBVyxvQ0FDWEMsR0FBYyw0QkFDZEMsR0FBb0IsY0FDcEJDLEdBQWUsMkNBR2ZDLElBR0NqSixRQUFVLEVBQUcsK0JBQWdDLGFBRTdDa0osT0FBUyxFQUFHLFVBQVcsWUFDdkJDLEtBQU8sRUFBRyxvQkFBcUIsdUJBQy9CQyxJQUFNLEVBQUcsaUJBQWtCLG9CQUMzQkMsSUFBTSxFQUFHLHFCQUFzQix5QkFFL0IxRixVQUFZLEVBQUcsR0FBSSxJQUlyQnNGLElBQVFLLFNBQVdMLEdBQVFqSixPQUUzQmlKLEdBQVFNLE1BQVFOLEdBQVFPLE1BQVFQLEdBQVFRLFNBQVdSLEdBQVFTLFFBQVVULEdBQVFDLE1BQzdFRCxHQUFRVSxHQUFLVixHQUFRSSxHQUVyQjF0QixFQUFPc0IsR0FBRzhELFFBQ1Q0RCxLQUFNLFNBQVVRLEdBQ2YsTUFBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVNkcsR0FDckMsTUFBT0EsS0FBVWpLLFVBQ2hCUyxFQUFPZ0osS0FBTXJHLE1BQ2JBLEtBQUs2VSxRQUFReVcsUUFBVXRyQixLQUFNLElBQU9BLEtBQU0sR0FBSVEsZUFBaUJ2RCxHQUFXc3VCLGVBQWdCMWtCLEtBQ3pGLEtBQU1BLEVBQU8vRSxVQUFVNUIsU0FHM0JvckIsT0FBUSxXQUNQLE1BQU90ckIsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQzFDLEdBQXVCLElBQWxCQyxLQUFLTyxVQUFvQyxLQUFsQlAsS0FBS08sVUFBcUMsSUFBbEJQLEtBQUtPLFNBQWlCLENBQ3pFLEdBQUl5QyxHQUFTeW9CLEdBQW9CenJCLEtBQU1ELEVBQ3ZDaUQsR0FBT3VELFlBQWF4RyxPQUt2QjJyQixRQUFTLFdBQ1IsTUFBTzFyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDMUMsR0FBdUIsSUFBbEJDLEtBQUtPLFVBQW9DLEtBQWxCUCxLQUFLTyxVQUFxQyxJQUFsQlAsS0FBS08sU0FBaUIsQ0FDekUsR0FBSXlDLEdBQVN5b0IsR0FBb0J6ckIsS0FBTUQsRUFDdkNpRCxHQUFPMm9CLGFBQWM1ckIsRUFBTWlELEVBQU80TSxnQkFLckNnYyxPQUFRLFdBQ1AsTUFBTzVyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDckNDLEtBQUtjLFlBQ1RkLEtBQUtjLFdBQVc2cUIsYUFBYzVyQixFQUFNQyxTQUt2QzZyQixNQUFPLFdBQ04sTUFBTzdyQixNQUFLd3JCLFNBQVUxcEIsVUFBVyxTQUFVL0IsR0FDckNDLEtBQUtjLFlBQ1RkLEtBQUtjLFdBQVc2cUIsYUFBYzVyQixFQUFNQyxLQUFLNk8sZ0JBTTVDekosT0FBUSxTQUFVM0csRUFBVXF0QixHQUMzQixHQUFJL3JCLEdBQ0hzQixFQUFRNUMsRUFBV3BCLEVBQU8wUyxPQUFRdFIsRUFBVXVCLE1BQVNBLEtBQ3JEa0MsRUFBSSxDQUVMLE1BQTZCLE9BQXBCbkMsRUFBT3NCLEVBQU1hLElBQWFBLElBQzVCNHBCLEdBQThCLElBQWxCL3JCLEVBQUtRLFVBQ3RCbEQsRUFBTzB1QixVQUFXQyxHQUFRanNCLElBR3RCQSxFQUFLZSxhQUNKZ3JCLEdBQVl6dUIsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxJQUNyRGtzQixHQUFlRCxHQUFRanNCLEVBQU0sV0FFOUJBLEVBQUtlLFdBQVcwRixZQUFhekcsR0FJL0IsT0FBT0MsT0FHUjZVLE1BQU8sV0FDTixHQUFJOVUsR0FDSG1DLEVBQUksQ0FFTCxNQUE0QixPQUFuQm5DLEVBQU9DLEtBQUtrQyxJQUFhQSxJQUNWLElBQWxCbkMsRUFBS1EsV0FHVGxELEVBQU8wdUIsVUFBV0MsR0FBUWpzQixHQUFNLElBR2hDQSxFQUFLNFIsWUFBYyxHQUlyQixPQUFPM1IsT0FHUitDLE1BQU8sU0FBVW1wQixFQUFlQyxHQUkvQixNQUhBRCxHQUFpQyxNQUFqQkEsR0FBd0IsRUFBUUEsRUFDaERDLEVBQXlDLE1BQXJCQSxFQUE0QkQsRUFBZ0JDLEVBRXpEbnNCLEtBQUtxQyxJQUFLLFdBQ2hCLE1BQU9oRixHQUFPMEYsTUFBTy9DLEtBQU1rc0IsRUFBZUMsTUFJNUNDLEtBQU0sU0FBVXZsQixHQUNmLE1BQU94SixHQUFPc0ssT0FBUTNILEtBQU0sU0FBVTZHLEdBQ3JDLEdBQUk5RyxHQUFPQyxLQUFNLE9BQ2hCa0MsRUFBSSxFQUNKa0YsRUFBSXBILEtBQUtFLE1BRVYsSUFBSzJHLElBQVVqSyxXQUErQixJQUFsQm1ELEVBQUtRLFNBQ2hDLE1BQU9SLEdBQUs0UCxTQUliLElBQXNCLGdCQUFWOUksS0FBdUJ3akIsR0FBYTVwQixLQUFNb0csS0FDcEQ4akIsSUFBV1IsR0FBU2hxQixLQUFNMEcsS0FBYSxHQUFJLEtBQVEsR0FBSUQsZUFBa0IsQ0FFMUVDLEVBQVFBLEVBQU12RCxRQUFTNG1CLEdBQVcsWUFFbEMsS0FDQyxLQUFZOWlCLEVBQUpsRixFQUFPQSxJQUNkbkMsRUFBT0MsS0FBTWtDLE9BR1UsSUFBbEJuQyxFQUFLUSxXQUNUbEQsRUFBTzB1QixVQUFXQyxHQUFRanNCLEdBQU0sSUFDaENBLEVBQUs0UCxVQUFZOUksRUFJbkI5RyxHQUFPLEVBR04sTUFBTzBFLEtBR0wxRSxHQUNKQyxLQUFLNlUsUUFBUXlXLE9BQVF6a0IsSUFFcEIsS0FBTUEsRUFBTy9FLFVBQVU1QixTQUczQm1zQixZQUFhLFdBQ1osR0FFQzNxQixHQUFPckUsRUFBT2dGLElBQUtyQyxLQUFNLFNBQVVELEdBQ2xDLE9BQVNBLEVBQUs4TyxZQUFhOU8sRUFBS2UsY0FFakNvQixFQUFJLENBbUJMLE9BaEJBbEMsTUFBS3dyQixTQUFVMXBCLFVBQVcsU0FBVS9CLEdBQ25DLEdBQUk2ZixHQUFPbGUsRUFBTVEsS0FDaEJtTixFQUFTM04sRUFBTVEsSUFFWG1OLEtBRUN1USxHQUFRQSxFQUFLOWUsYUFBZXVPLElBQ2hDdVEsRUFBTzVmLEtBQUs2TyxhQUVieFIsRUFBUTJDLE1BQU9vRixTQUNmaUssRUFBT3NjLGFBQWM1ckIsRUFBTTZmLE1BRzFCLEdBR0kxZCxFQUFJbEMsS0FBT0EsS0FBS29GLFVBR3hCa25CLE9BQVEsU0FBVTd0QixHQUNqQixNQUFPdUIsTUFBS29GLE9BQVEzRyxHQUFVLElBRy9CK3NCLFNBQVUsU0FBVTlwQixFQUFNRCxFQUFVOHFCLEdBR25DN3FCLEVBQU8vRCxFQUFZa0UsU0FBV0gsRUFFOUIsSUFBSTBhLEdBQVVyYSxFQUFPa0QsRUFBU3VuQixFQUFZcmQsRUFBTUMsRUFDL0NsTixFQUFJLEVBQ0prRixFQUFJcEgsS0FBS0UsT0FDVHllLEVBQU0zZSxLQUNOeXNCLEVBQVdybEIsRUFBSSxFQUNmUCxFQUFRbkYsRUFBTSxHQUNkZixFQUFhdEQsRUFBT3NELFdBQVlrRyxFQUdqQyxJQUFLbEcsS0FBc0IsR0FBTHlHLEdBQTJCLGdCQUFWUCxJQUFzQnhKLEVBQU9zTCxRQUFRcVUsYUFBZXVOLEdBQVM5cEIsS0FBTW9HLEdBQ3pHLE1BQU83RyxNQUFLd0IsS0FBSyxTQUFVNFksR0FDMUIsR0FBSUgsR0FBTzBFLEVBQUkzYyxHQUFJb1ksRUFDZHpaLEtBQ0plLEVBQU0sR0FBTW1GLEVBQU01RixLQUFNakIsS0FBTW9hLEVBQU9ILEVBQUttUyxTQUUzQ25TLEVBQUt1UixTQUFVOXBCLEVBQU1ELEVBQVU4cUIsSUFJakMsSUFBS25sQixJQUNKZ1YsRUFBVy9lLEVBQU84SCxjQUFlekQsRUFBTTFCLEtBQU0sR0FBSVEsZUFBZSxHQUFRK3JCLEdBQXFCdnNCLE1BQzdGK0IsRUFBUXFhLEVBQVN4TSxXQUVtQixJQUEvQndNLEVBQVMvVyxXQUFXbkYsU0FDeEJrYyxFQUFXcmEsR0FHUEEsR0FBUSxDQU1aLElBTEFrRCxFQUFVNUgsRUFBT2dGLElBQUsycEIsR0FBUTVQLEVBQVUsVUFBWXNRLElBQ3BERixFQUFhdm5CLEVBQVEvRSxPQUlUa0gsRUFBSmxGLEVBQU9BLElBQ2RpTixFQUFPaU4sRUFFRmxhLElBQU11cUIsSUFDVnRkLEVBQU85UixFQUFPMEYsTUFBT29NLEdBQU0sR0FBTSxHQUc1QnFkLEdBR0pudkIsRUFBT2dELE1BQU80RSxFQUFTK21CLEdBQVE3YyxFQUFNLFlBSXZDMU4sRUFBU1IsS0FBTWpCLEtBQU1rQyxHQUFLaU4sRUFBTWpOLEVBR2pDLElBQUtzcUIsRUFPSixJQU5BcGQsRUFBTW5LLEVBQVNBLEVBQVEvRSxPQUFTLEdBQUlNLGNBR3BDbkQsRUFBT2dGLElBQUs0QyxFQUFTMG5CLElBR2Z6cUIsRUFBSSxFQUFPc3FCLEVBQUp0cUIsRUFBZ0JBLElBQzVCaU4sRUFBT2xLLEVBQVMvQyxHQUNYc29CLEdBQVkvcEIsS0FBTTBPLEVBQUtsTCxNQUFRLE1BQ2xDK1osRUFBVXJXLE9BQVF3SCxFQUFNLGVBQWtCOVIsRUFBT21NLFNBQVU0RixFQUFLRCxLQUU1REEsRUFBS3ZNLElBRVR2RixFQUFPdXZCLFNBQVV6ZCxFQUFLdk0sS0FFdEJ2RixFQUFPMkksV0FBWW1KLEVBQUt3QyxZQUFZck8sUUFBU29uQixHQUFjLE1BUWpFLE1BQU8xcUIsU0FJVDNDLEVBQU9tRSxNQUNOcXJCLFNBQVUsU0FDVkMsVUFBVyxVQUNYbkIsYUFBYyxTQUNkb0IsWUFBYSxRQUNiQyxXQUFZLGVBQ1YsU0FBVXJxQixFQUFNdWpCLEdBQ2xCN29CLEVBQU9zQixHQUFJZ0UsR0FBUyxTQUFVbEUsR0FDN0IsR0FBSTRDLEdBQ0hDLEtBQ0EyckIsRUFBUzV2QixFQUFRb0IsR0FDakJ3RCxFQUFPZ3JCLEVBQU8vc0IsT0FBUyxFQUN2QmdDLEVBQUksQ0FFTCxNQUFhRCxHQUFMQyxFQUFXQSxJQUNsQmIsRUFBUWEsSUFBTUQsRUFBT2pDLEtBQU9BLEtBQUsrQyxPQUFPLEdBQ3hDMUYsRUFBUTR2QixFQUFRL3FCLElBQU9na0IsR0FBWTdrQixHQUluQ3hELEVBQVVnRSxNQUFPUCxFQUFLRCxFQUFNSCxNQUc3QixPQUFPbEIsTUFBS29CLFVBQVdFLE1BSXpCakUsRUFBT29GLFFBQ05NLE1BQU8sU0FBVWhELEVBQU1tc0IsRUFBZUMsR0FDckMsR0FBSWpxQixHQUFHa0YsRUFBRzhsQixFQUFhQyxFQUN0QnBxQixFQUFRaEQsRUFBSzhjLFdBQVcsR0FDeEJ1USxFQUFTL3ZCLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsRUFJL0MsTUFBTTFDLEVBQU9zTCxRQUFRaVUsZ0JBQXNDLElBQWxCN2MsRUFBS1EsVUFBb0MsS0FBbEJSLEVBQUtRLFVBQXNCbEQsRUFBTzJiLFNBQVVqWixJQU0zRyxJQUhBb3RCLEVBQWVuQixHQUFRanBCLEdBQ3ZCbXFCLEVBQWNsQixHQUFRanNCLEdBRWhCbUMsRUFBSSxFQUFHa0YsRUFBSThsQixFQUFZaHRCLE9BQVlrSCxFQUFKbEYsRUFBT0EsSUFDM0NtckIsR0FBVUgsRUFBYWhyQixHQUFLaXJCLEVBQWNqckIsR0FLNUMsSUFBS2dxQixFQUNKLEdBQUtDLEVBSUosSUFIQWUsRUFBY0EsR0FBZWxCLEdBQVFqc0IsR0FDckNvdEIsRUFBZUEsR0FBZ0JuQixHQUFRanBCLEdBRWpDYixFQUFJLEVBQUdrRixFQUFJOGxCLEVBQVlodEIsT0FBWWtILEVBQUpsRixFQUFPQSxJQUMzQ29yQixHQUFnQkosRUFBYWhyQixHQUFLaXJCLEVBQWNqckIsUUFHakRvckIsSUFBZ0J2dEIsRUFBTWdELEVBV3hCLE9BTkFvcUIsR0FBZW5CLEdBQVFqcEIsRUFBTyxVQUN6Qm9xQixFQUFhanRCLE9BQVMsR0FDMUIrckIsR0FBZWtCLEdBQWVDLEdBQVVwQixHQUFRanNCLEVBQU0sV0FJaERnRCxHQUdSb0MsY0FBZSxTQUFVOUQsRUFBTzNDLEVBQVN1RyxFQUFTc29CLEdBQ2pELEdBQUl4dEIsR0FBTTRGLEVBQUt1SyxFQUFLc2QsRUFBTWhrQixFQUFVcEgsRUFDbkNGLEVBQUksRUFDSmtGLEVBQUkvRixFQUFNbkIsT0FDVmtjLEVBQVcxZCxFQUFRMmQseUJBQ25Cb1IsSUFFRCxNQUFZcm1CLEVBQUpsRixFQUFPQSxJQUdkLEdBRkFuQyxFQUFPc0IsRUFBT2EsR0FFVG5DLEdBQWlCLElBQVRBLEVBR1osR0FBNkIsV0FBeEIxQyxFQUFPNEcsS0FBTWxFLEdBR2pCMUMsRUFBT2dELE1BQU9vdEIsRUFBTzF0QixFQUFLUSxVQUFhUixHQUFTQSxPQUcxQyxJQUFNcXFCLEdBQU0zcEIsS0FBTVYsR0FJbEIsQ0FDTjRGLEVBQU1BLEdBQU95VyxFQUFTN1YsWUFBYTdILEVBQVF3RyxjQUFjLFFBR3pEZ0wsR0FBUWlhLEdBQVNocUIsS0FBTUosS0FBVyxHQUFJLEtBQU8sR0FBSTZHLGNBQ2pENG1CLEVBQU83QyxHQUFTemEsSUFBU3lhLEdBQVF0RixTQUNqQzFmLEVBQUlnSyxVQUFZNmQsRUFBTSxHQUFNenRCLEVBQUt1RCxRQUFTNG1CLEdBQVcsYUFBZ0JzRCxFQUFNLEdBRzNFcHJCLEVBQUlvckIsRUFBTSxFQUNWLE9BQVFwckIsSUFDUHVELEVBQU1BLEVBQUkwTixTQUtYaFcsR0FBT2dELE1BQU9vdEIsRUFBTzluQixFQUFJTixZQUd6Qk0sRUFBTXlXLEVBQVN4TSxXQUlmakssRUFBSWdNLFlBQWMsT0ExQmxCOGIsR0FBTTN2QixLQUFNWSxFQUFRNnNCLGVBQWdCeHJCLEdBZ0N2Q3FjLEdBQVN6SyxZQUFjLEdBRXZCelAsRUFBSSxDQUNKLE9BQVNuQyxFQUFPMHRCLEVBQU92ckIsS0FJdEIsS0FBS3FyQixHQUFtRCxLQUF0Q2x3QixFQUFPNkosUUFBU25ILEVBQU13dEIsTUFJeEMvakIsRUFBV25NLEVBQU9tTSxTQUFVekosRUFBS1MsY0FBZVQsR0FHaEQ0RixFQUFNcW1CLEdBQVE1UCxFQUFTN1YsWUFBYXhHLEdBQVEsVUFHdkN5SixHQUNKeWlCLEdBQWV0bUIsR0FJWFYsR0FBVSxDQUNkN0MsRUFBSSxDQUNKLE9BQVNyQyxFQUFPNEYsRUFBS3ZELEtBQ2Zvb0IsR0FBWS9wQixLQUFNVixFQUFLa0UsTUFBUSxLQUNuQ2dCLEVBQVFuSCxLQUFNaUMsR0FNbEIsTUFBT3FjLElBR1IyUCxVQUFXLFNBQVUxcUIsR0FDcEIsR0FBSXlELEdBQU0vRSxFQUFNc2pCLEVBQVFwZixFQUFNMkQsRUFBS3hGLEVBQ2xDb2hCLEVBQVVubUIsRUFBTzJsQixNQUFNUSxRQUN2QnRoQixFQUFJLENBRUwsT0FBU25DLEVBQU9zQixFQUFPYSxNQUFTdEYsVUFBV3NGLElBQU0sQ0FDaEQsR0FBS2ljLEVBQUtHLFFBQVN2ZSxLQUNsQjZILEVBQU03SCxFQUFNaWUsRUFBVTdhLFNBRWpCeUUsSUFBUTlDLEVBQU9rWixFQUFValEsTUFBT25HLEtBQVMsQ0FFN0MsR0FEQXliLEVBQVNwYyxPQUFPNkcsS0FBTWhKLEVBQUt1ZSxZQUN0QkEsRUFBT25qQixPQUNYLElBQU1rQyxFQUFJLEdBQUk2QixFQUFPb2YsRUFBT2poQixNQUFReEYsVUFBV3dGLElBQ3pDb2hCLEVBQVN2ZixHQUNiNUcsRUFBTzJsQixNQUFNNWQsT0FBUXJGLEVBQU1rRSxHQUkzQjVHLEVBQU9tbkIsWUFBYXprQixFQUFNa0UsRUFBTWEsRUFBSytlLE9BSW5DN0YsR0FBVWpRLE1BQU9uRyxVQUVkb1csR0FBVWpRLE1BQU9uRyxTQUtwQm1XLEdBQVVoUSxNQUFPaE8sRUFBTWdlLEVBQVU1YSxZQUkxQ3lwQixTQUFVLFNBQVVjLEdBQ25CLE1BQU9yd0IsR0FBT3N3QixNQUNiRCxJQUFLQSxFQUNMenBCLEtBQU0sTUFDTjJwQixTQUFVLFNBQ1ZDLE9BQU8sRUFDUDVLLFFBQVEsRUFDUjZLLFVBQVUsTUFPYixTQUFTckMsSUFBb0IxckIsRUFBTWd1QixHQUNsQyxNQUFPMXdCLEdBQU9zSixTQUFVNUcsRUFBTSxVQUM3QjFDLEVBQU9zSixTQUErQixJQUFyQm9uQixFQUFReHRCLFNBQWlCd3RCLEVBQVVBLEVBQVFuZSxXQUFZLE1BRXhFN1AsRUFBSytGLHFCQUFxQixTQUFTLElBQ2xDL0YsRUFBS3dHLFlBQWF4RyxFQUFLUyxjQUFjMEUsY0FBYyxVQUNwRG5GLEVBSUYsUUFBUzJzQixJQUFlM3NCLEdBRXZCLE1BREFBLEdBQUtrRSxNQUFzQyxPQUE5QmxFLEVBQUt1TixhQUFhLFNBQW9CLElBQU12TixFQUFLa0UsS0FDdkRsRSxFQUVSLFFBQVM0c0IsSUFBZTVzQixHQUN2QixHQUFJRCxHQUFRMnFCLEdBQWtCdHFCLEtBQU1KLEVBQUtrRSxLQVF6QyxPQU5LbkUsR0FDSkMsRUFBS2tFLEtBQU9uRSxFQUFPLEdBRW5CQyxFQUFLNk4sZ0JBQWdCLFFBR2Y3TixFQUlSLFFBQVNrc0IsSUFBZTVxQixFQUFPMnNCLEdBQzlCLEdBQUk1bUIsR0FBSS9GLEVBQU1uQixPQUNiZ0MsRUFBSSxDQUVMLE1BQVlrRixFQUFKbEYsRUFBT0EsSUFDZDhiLEVBQVVXLElBQ1R0ZCxFQUFPYSxHQUFLLGNBQWU4ckIsR0FBZWhRLEVBQVU5YyxJQUFLOHNCLEVBQWE5ckIsR0FBSyxlQUs5RSxRQUFTb3JCLElBQWdCMXFCLEVBQUtxckIsR0FDN0IsR0FBSS9yQixHQUFHa0YsRUFBR25ELEVBQU1pcUIsRUFBVUMsRUFBVUMsRUFBVUMsRUFBVWhMLENBRXhELElBQXVCLElBQWxCNEssRUFBSzF0QixTQUFWLENBS0EsR0FBS3lkLEVBQVVlLFFBQVNuYyxLQUN2QnNyQixFQUFXbFEsRUFBVXJXLE9BQVEvRSxHQUM3QnVyQixFQUFXblEsRUFBVVcsSUFBS3NQLEVBQU1DLEdBQ2hDN0ssRUFBUzZLLEVBQVM3SyxRQUVKLE9BQ044SyxHQUFTdEssT0FDaEJzSyxFQUFTOUssU0FFVCxLQUFNcGYsSUFBUW9mLEdBQ2IsSUFBTW5oQixFQUFJLEVBQUdrRixFQUFJaWMsRUFBUXBmLEdBQU8vRCxPQUFZa0gsRUFBSmxGLEVBQU9BLElBQzlDN0UsRUFBTzJsQixNQUFNN0ksSUFBSzhULEVBQU1ocUIsRUFBTW9mLEVBQVFwZixHQUFRL0IsSUFPN0M2YixFQUFVZ0IsUUFBU25jLEtBQ3ZCd3JCLEVBQVdyUSxFQUFVcFcsT0FBUS9FLEdBQzdCeXJCLEVBQVdoeEIsRUFBT29GLFVBQVkyckIsR0FFOUJyUSxFQUFVWSxJQUFLc1AsRUFBTUksS0FLdkIsUUFBU3JDLElBQVF0dEIsRUFBU3dSLEdBQ3pCLEdBQUk1TyxHQUFNNUMsRUFBUW9ILHFCQUF1QnBILEVBQVFvSCxxQkFBc0JvSyxHQUFPLEtBQzVFeFIsRUFBUWdQLGlCQUFtQmhQLEVBQVFnUCxpQkFBa0J3QyxHQUFPLE9BRzlELE9BQU9BLEtBQVF0VCxXQUFhc1QsR0FBTzdTLEVBQU9zSixTQUFVakksRUFBU3dSLEdBQzVEN1MsRUFBT2dELE9BQVMzQixHQUFXNEMsR0FDM0JBLEVBSUYsUUFBUytyQixJQUFVenFCLEVBQUtxckIsR0FDdkIsR0FBSXRuQixHQUFXc25CLEVBQUt0bkIsU0FBU0MsYUFHWCxXQUFiRCxHQUF3QjJqQixHQUE0QjdwQixLQUFNbUMsRUFBSXFCLE1BQ2xFZ3FCLEVBQUt2WixRQUFVOVIsRUFBSThSLFNBR0ssVUFBYi9OLEdBQXFDLGFBQWJBLEtBQ25Dc25CLEVBQUtuVixhQUFlbFcsRUFBSWtXLGNBRzFCemIsRUFBT3NCLEdBQUc4RCxRQUNUNnJCLFFBQVMsU0FBVWxDLEdBQ2xCLEdBQUlvQixFQUVKLE9BQUtud0IsR0FBT3NELFdBQVl5ckIsR0FDaEJwc0IsS0FBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3N1QixRQUFTbEMsRUFBS25yQixLQUFLakIsS0FBTWtDLE9BSXJDbEMsS0FBTSxLQUdWd3RCLEVBQU9ud0IsRUFBUSt1QixFQUFNcHNCLEtBQU0sR0FBSVEsZUFBZ0J3QixHQUFJLEdBQUllLE9BQU8sR0FFekQvQyxLQUFNLEdBQUljLFlBQ2Qwc0IsRUFBSzdCLGFBQWMzckIsS0FBTSxJQUcxQnd0QixFQUFLbnJCLElBQUksV0FDUixHQUFJdEMsR0FBT0MsSUFFWCxPQUFRRCxFQUFLd3VCLGtCQUNaeHVCLEVBQU9BLEVBQUt3dUIsaUJBR2IsT0FBT3h1QixLQUNMdXJCLE9BQVF0ckIsT0FHTEEsT0FHUnd1QixVQUFXLFNBQVVwQyxHQUNwQixNQUFLL3VCLEdBQU9zRCxXQUFZeXJCLEdBQ2hCcHNCLEtBQUt3QixLQUFLLFNBQVVVLEdBQzFCN0UsRUFBUTJDLE1BQU93dUIsVUFBV3BDLEVBQUtuckIsS0FBS2pCLEtBQU1rQyxNQUlyQ2xDLEtBQUt3QixLQUFLLFdBQ2hCLEdBQUl5WSxHQUFPNWMsRUFBUTJDLE1BQ2xCNG9CLEVBQVczTyxFQUFLMk8sVUFFWkEsR0FBUzFvQixPQUNiMG9CLEVBQVMwRixRQUFTbEMsR0FHbEJuUyxFQUFLcVIsT0FBUWMsTUFLaEJvQixLQUFNLFNBQVVwQixHQUNmLEdBQUl6ckIsR0FBYXRELEVBQU9zRCxXQUFZeXJCLEVBRXBDLE9BQU9wc0IsTUFBS3dCLEtBQUssU0FBVVUsR0FDMUI3RSxFQUFRMkMsTUFBT3N1QixRQUFTM3RCLEVBQWF5ckIsRUFBS25yQixLQUFLakIsS0FBTWtDLEdBQUtrcUIsTUFJNURxQyxPQUFRLFdBQ1AsTUFBT3p1QixNQUFLcVAsU0FBUzdOLEtBQUssV0FDbkJuRSxFQUFPc0osU0FBVTNHLEtBQU0sU0FDNUIzQyxFQUFRMkMsTUFBT3FzQixZQUFhcnNCLEtBQUtxRixjQUVoQy9DLFFBR0wsSUFBSW9zQixJQUFRQyxHQUdYQyxHQUFlLDRCQUNmQyxHQUFVLFVBQ1ZDLEdBQWdCL2pCLE9BQVEsS0FBT2xNLEVBQVksU0FBVSxLQUNyRGt3QixHQUFnQmhrQixPQUFRLEtBQU9sTSxFQUFZLGtCQUFtQixLQUM5RG13QixHQUFjamtCLE9BQVEsWUFBY2xNLEVBQVksSUFBSyxLQUNyRG93QixJQUFnQkMsS0FBTSxTQUV0QkMsSUFBWUMsU0FBVSxXQUFZQyxXQUFZLFNBQVVDLFFBQVMsU0FDakVDLElBQ0NDLGNBQWUsRUFDZkMsV0FBWSxLQUdiQyxJQUFjLE1BQU8sUUFBUyxTQUFVLFFBQ3hDQyxJQUFnQixTQUFVLElBQUssTUFBTyxLQUd2QyxTQUFTQyxJQUFnQnZuQixFQUFPMUYsR0FHL0IsR0FBS0EsSUFBUTBGLEdBQ1osTUFBTzFGLEVBSVIsSUFBSWt0QixHQUFVbHRCLEVBQUsxQyxPQUFPLEdBQUdWLGNBQWdCb0QsRUFBSzNFLE1BQU0sR0FDdkQ4eEIsRUFBV250QixFQUNYVCxFQUFJeXRCLEdBQVl6dkIsTUFFakIsT0FBUWdDLElBRVAsR0FEQVMsRUFBT2d0QixHQUFhenRCLEdBQU0ydEIsRUFDckJsdEIsSUFBUTBGLEdBQ1osTUFBTzFGLEVBSVQsT0FBT210QixHQUdSLFFBQVNDLElBQVVod0IsRUFBTWl3QixHQUl4QixNQURBandCLEdBQU9pd0IsR0FBTWp3QixFQUM0QixTQUFsQzFDLEVBQU80eUIsSUFBS2x3QixFQUFNLGFBQTJCMUMsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxHQUsxRixRQUFTbXdCLElBQVdud0IsR0FDbkIsTUFBT3BELEdBQU9paEIsaUJBQWtCN2QsRUFBTSxNQUd2QyxRQUFTb3dCLElBQVUvZSxFQUFVZ2YsR0FDNUIsR0FBSWQsR0FBU3Z2QixFQUFNc3dCLEVBQ2xCdFUsS0FDQTNCLEVBQVEsRUFDUmxhLEVBQVNrUixFQUFTbFIsTUFFbkIsTUFBZ0JBLEVBQVJrYSxFQUFnQkEsSUFDdkJyYSxFQUFPcVIsRUFBVWdKLEdBQ1hyYSxFQUFLc0ksUUFJWDBULEVBQVEzQixHQUFVNEQsRUFBVTljLElBQUtuQixFQUFNLGNBQ3ZDdXZCLEVBQVV2dkIsRUFBS3NJLE1BQU1pbkIsUUFDaEJjLEdBR0VyVSxFQUFRM0IsSUFBdUIsU0FBWmtWLElBQ3hCdnZCLEVBQUtzSSxNQUFNaW5CLFFBQVUsSUFNTSxLQUF2QnZ2QixFQUFLc0ksTUFBTWluQixTQUFrQlMsR0FBVWh3QixLQUMzQ2djLEVBQVEzQixHQUFVNEQsRUFBVXJXLE9BQVE1SCxFQUFNLGFBQWN1d0IsR0FBbUJ2d0IsRUFBSzRHLGFBSTNFb1YsRUFBUTNCLEtBQ2JpVyxFQUFTTixHQUFVaHdCLElBRWR1dkIsR0FBdUIsU0FBWkEsSUFBdUJlLElBQ3RDclMsRUFBVVcsSUFBSzVlLEVBQU0sYUFBY3N3QixFQUFTZixFQUFVanlCLEVBQU80eUIsSUFBSWx3QixFQUFNLGFBUTNFLEtBQU1xYSxFQUFRLEVBQVdsYSxFQUFSa2EsRUFBZ0JBLElBQ2hDcmEsRUFBT3FSLEVBQVVnSixHQUNYcmEsRUFBS3NJLFFBR0wrbkIsR0FBK0IsU0FBdkJyd0IsRUFBS3NJLE1BQU1pbkIsU0FBNkMsS0FBdkJ2dkIsRUFBS3NJLE1BQU1pbkIsVUFDekR2dkIsRUFBS3NJLE1BQU1pbkIsUUFBVWMsRUFBT3JVLEVBQVEzQixJQUFXLEdBQUssUUFJdEQsT0FBT2hKLEdBR1IvVCxFQUFPc0IsR0FBRzhELFFBQ1R3dEIsSUFBSyxTQUFVdHRCLEVBQU1rRSxHQUNwQixNQUFPeEosR0FBT3NLLE9BQVEzSCxLQUFNLFNBQVVELEVBQU00QyxFQUFNa0UsR0FDakQsR0FBSTBwQixHQUFRcHVCLEVBQ1hFLEtBQ0FILEVBQUksQ0FFTCxJQUFLN0UsRUFBTzZGLFFBQVNQLEdBQVMsQ0FJN0IsSUFIQTR0QixFQUFTTCxHQUFXbndCLEdBQ3BCb0MsRUFBTVEsRUFBS3pDLE9BRUNpQyxFQUFKRCxFQUFTQSxJQUNoQkcsRUFBS00sRUFBTVQsSUFBUTdFLEVBQU80eUIsSUFBS2x3QixFQUFNNEMsRUFBTVQsSUFBSyxFQUFPcXVCLEVBR3hELE9BQU9sdUIsR0FHUixNQUFPd0UsS0FBVWpLLFVBQ2hCUyxFQUFPZ0wsTUFBT3RJLEVBQU00QyxFQUFNa0UsR0FDMUJ4SixFQUFPNHlCLElBQUtsd0IsRUFBTTRDLElBQ2pCQSxFQUFNa0UsRUFBTy9FLFVBQVU1QixPQUFTLElBRXBDa3dCLEtBQU0sV0FDTCxNQUFPRCxJQUFVbndCLE1BQU0sSUFFeEJ3d0IsS0FBTSxXQUNMLE1BQU9MLElBQVVud0IsT0FFbEJ5d0IsT0FBUSxTQUFVL1YsR0FDakIsTUFBc0IsaUJBQVZBLEdBQ0pBLEVBQVExYSxLQUFLb3dCLE9BQVNwd0IsS0FBS3d3QixPQUc1Qnh3QixLQUFLd0IsS0FBSyxXQUNYdXVCLEdBQVUvdkIsTUFDZDNDLEVBQVEyQyxNQUFPb3dCLE9BRWYveUIsRUFBUTJDLE1BQU93d0IsWUFNbkJuekIsRUFBT29GLFFBR05pdUIsVUFDQ0MsU0FDQ3p2QixJQUFLLFNBQVVuQixFQUFNNndCLEdBQ3BCLEdBQUtBLEVBQVcsQ0FFZixHQUFJdHZCLEdBQU1vdEIsR0FBUTN1QixFQUFNLFVBQ3hCLE9BQWUsS0FBUnVCLEVBQWEsSUFBTUEsTUFPOUJ1dkIsV0FDQ0MsYUFBZSxFQUNmQyxhQUFlLEVBQ2Z0QixZQUFjLEVBQ2R1QixZQUFjLEVBQ2RMLFNBQVcsRUFDWE0sT0FBUyxFQUNUQyxTQUFXLEVBQ1hDLFFBQVUsRUFDVkMsUUFBVSxFQUNWM1QsTUFBUSxHQUtUNFQsVUFFQ0MsUUFBUyxZQUlWanBCLE1BQU8sU0FBVXRJLEVBQU00QyxFQUFNa0UsRUFBTzBxQixHQUVuQyxHQUFNeHhCLEdBQTBCLElBQWxCQSxFQUFLUSxVQUFvQyxJQUFsQlIsRUFBS1EsVUFBbUJSLEVBQUtzSSxNQUFsRSxDQUtBLEdBQUkvRyxHQUFLMkMsRUFBTXliLEVBQ2RvUSxFQUFXenlCLEVBQU9vSixVQUFXOUQsR0FDN0IwRixFQUFRdEksRUFBS3NJLEtBU2QsT0FQQTFGLEdBQU90RixFQUFPZzBCLFNBQVV2QixLQUFnQnp5QixFQUFPZzBCLFNBQVV2QixHQUFhRixHQUFnQnZuQixFQUFPeW5CLElBSTdGcFEsRUFBUXJpQixFQUFPcXpCLFNBQVUvdEIsSUFBVXRGLEVBQU9xekIsU0FBVVosR0FHL0NqcEIsSUFBVWpLLFVBaUNUOGlCLEdBQVMsT0FBU0EsS0FBVXBlLEVBQU1vZSxFQUFNeGUsSUFBS25CLEdBQU0sRUFBT3d4QixNQUFhMzBCLFVBQ3BFMEUsRUFJRCtHLEVBQU8xRixJQXJDZHNCLFFBQWM0QyxHQUdBLFdBQVQ1QyxJQUFzQjNDLEVBQU0wdEIsR0FBUTd1QixLQUFNMEcsTUFDOUNBLEdBQVV2RixFQUFJLEdBQUssR0FBTUEsRUFBSSxHQUFLZ0QsV0FBWWpILEVBQU80eUIsSUFBS2x3QixFQUFNNEMsSUFFaEVzQixFQUFPLFVBSU0sTUFBVDRDLEdBQTBCLFdBQVQ1QyxHQUFxQkksTUFBT3dDLEtBS3BDLFdBQVQ1QyxHQUFzQjVHLEVBQU93ekIsVUFBV2YsS0FDNUNqcEIsR0FBUyxNQUtKeEosRUFBT3NMLFFBQVF3VSxpQkFBNkIsS0FBVnRXLEdBQStDLElBQS9CbEUsRUFBS3pFLFFBQVEsZ0JBQ3BFbUssRUFBTzFGLEdBQVMsV0FJWCtjLEdBQVcsT0FBU0EsS0FBVzdZLEVBQVE2WSxFQUFNZixJQUFLNWUsRUFBTThHLEVBQU8wcUIsTUFBYTMwQixZQUNqRnlMLEVBQU8xRixHQUFTa0UsSUFqQmpCLGFBK0JGb3BCLElBQUssU0FBVWx3QixFQUFNNEMsRUFBTTR1QixFQUFPaEIsR0FDakMsR0FBSWxmLEdBQUtsUSxFQUFLdWUsRUFDYm9RLEVBQVd6eUIsRUFBT29KLFVBQVc5RCxFQXlCOUIsT0F0QkFBLEdBQU90RixFQUFPZzBCLFNBQVV2QixLQUFnQnp5QixFQUFPZzBCLFNBQVV2QixHQUFhRixHQUFnQjd2QixFQUFLc0ksTUFBT3luQixJQUlsR3BRLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLElBQVV0RixFQUFPcXpCLFNBQVVaLEdBRy9DcFEsR0FBUyxPQUFTQSxLQUN0QnJPLEVBQU1xTyxFQUFNeGUsSUFBS25CLEdBQU0sRUFBTXd4QixJQUl6QmxnQixJQUFRelUsWUFDWnlVLEVBQU1xZCxHQUFRM3VCLEVBQU00QyxFQUFNNHRCLElBSWQsV0FBUmxmLEdBQW9CMU8sSUFBUTRzQixNQUNoQ2xlLEVBQU1rZSxHQUFvQjVzQixJQUlaLEtBQVY0dUIsR0FBZ0JBLEdBQ3BCcHdCLEVBQU1tRCxXQUFZK00sR0FDWGtnQixLQUFVLEdBQVFsMEIsRUFBTytHLFVBQVdqRCxHQUFRQSxHQUFPLEVBQUlrUSxHQUV4REEsS0FJVHFkLEdBQVMsU0FBVTN1QixFQUFNNEMsRUFBTTZ1QixHQUM5QixHQUFJM1QsR0FBTzRULEVBQVVDLEVBQ3BCZCxFQUFXWSxHQUFhdEIsR0FBV253QixHQUluQ3VCLEVBQU1zdkIsRUFBV0EsRUFBU2UsaUJBQWtCaHZCLElBQVVpdUIsRUFBVWp1QixHQUFTL0YsVUFDekV5TCxFQUFRdEksRUFBS3NJLEtBOEJkLE9BNUJLdW9CLEtBRVMsS0FBUnR2QixHQUFlakUsRUFBT21NLFNBQVV6SixFQUFLUyxjQUFlVCxLQUN4RHVCLEVBQU1qRSxFQUFPZ0wsTUFBT3RJLEVBQU00QyxJQU90Qm9zQixHQUFVdHVCLEtBQU1hLElBQVN1dEIsR0FBUXB1QixLQUFNa0MsS0FHM0NrYixFQUFReFYsRUFBTXdWLE1BQ2Q0VCxFQUFXcHBCLEVBQU1vcEIsU0FDakJDLEVBQVdycEIsRUFBTXFwQixTQUdqQnJwQixFQUFNb3BCLFNBQVdwcEIsRUFBTXFwQixTQUFXcnBCLEVBQU13VixNQUFRdmMsRUFDaERBLEVBQU1zdkIsRUFBUy9TLE1BR2Z4VixFQUFNd1YsTUFBUUEsRUFDZHhWLEVBQU1vcEIsU0FBV0EsRUFDakJwcEIsRUFBTXFwQixTQUFXQSxJQUlacHdCLEVBSVIsU0FBU3N3QixJQUFtQjd4QixFQUFNOEcsRUFBT2dyQixHQUN4QyxHQUFJdG9CLEdBQVV1bEIsR0FBVTN1QixLQUFNMEcsRUFDOUIsT0FBTzBDLEdBRU5uRyxLQUFLd2UsSUFBSyxFQUFHclksRUFBUyxJQUFRc29CLEdBQVksS0FBVXRvQixFQUFTLElBQU8sTUFDcEUxQyxFQUdGLFFBQVNpckIsSUFBc0IveEIsRUFBTTRDLEVBQU00dUIsRUFBT1EsRUFBYXhCLEdBQzlELEdBQUlydUIsR0FBSXF2QixLQUFZUSxFQUFjLFNBQVcsV0FFNUMsRUFFUyxVQUFUcHZCLEVBQW1CLEVBQUksRUFFdkIwTyxFQUFNLENBRVAsTUFBWSxFQUFKblAsRUFBT0EsR0FBSyxFQUVKLFdBQVZxdkIsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU13eEIsRUFBUTdCLEdBQVd4dEIsSUFBSyxFQUFNcXVCLElBR25Ed0IsR0FFVyxZQUFWUixJQUNKbGdCLEdBQU9oVSxFQUFPNHlCLElBQUtsd0IsRUFBTSxVQUFZMnZCLEdBQVd4dEIsSUFBSyxFQUFNcXVCLElBSTdDLFdBQVZnQixJQUNKbGdCLEdBQU9oVSxFQUFPNHlCLElBQUtsd0IsRUFBTSxTQUFXMnZCLEdBQVd4dEIsR0FBTSxTQUFTLEVBQU1xdUIsTUFJckVsZixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sVUFBWTJ2QixHQUFXeHRCLElBQUssRUFBTXF1QixHQUc1QyxZQUFWZ0IsSUFDSmxnQixHQUFPaFUsRUFBTzR5QixJQUFLbHdCLEVBQU0sU0FBVzJ2QixHQUFXeHRCLEdBQU0sU0FBUyxFQUFNcXVCLElBS3ZFLE9BQU9sZixHQUdSLFFBQVMyZ0IsSUFBa0JqeUIsRUFBTTRDLEVBQU00dUIsR0FHdEMsR0FBSVUsSUFBbUIsRUFDdEI1Z0IsRUFBZSxVQUFUMU8sRUFBbUI1QyxFQUFLNGQsWUFBYzVkLEVBQUtteUIsYUFDakQzQixFQUFTTCxHQUFXbndCLEdBQ3BCZ3lCLEVBQWMxMEIsRUFBT3NMLFFBQVErVSxXQUFnRSxlQUFuRHJnQixFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEVBQU93d0IsRUFLakYsSUFBWSxHQUFQbGYsR0FBbUIsTUFBUEEsRUFBYyxDQVE5QixHQU5BQSxFQUFNcWQsR0FBUTN1QixFQUFNNEMsRUFBTTR0QixJQUNmLEVBQU5sZixHQUFrQixNQUFQQSxLQUNmQSxFQUFNdFIsRUFBS3NJLE1BQU8xRixJQUlkb3NCLEdBQVV0dUIsS0FBSzRRLEdBQ25CLE1BQU9BLEVBS1I0Z0IsR0FBbUJGLElBQWlCMTBCLEVBQU9zTCxRQUFRK1QsbUJBQXFCckwsSUFBUXRSLEVBQUtzSSxNQUFPMUYsSUFHNUYwTyxFQUFNL00sV0FBWStNLElBQVMsRUFJNUIsTUFBU0EsR0FDUnlnQixHQUNDL3hCLEVBQ0E0QyxFQUNBNHVCLElBQVdRLEVBQWMsU0FBVyxXQUNwQ0UsRUFDQTFCLEdBRUUsS0FJTCxRQUFTRCxJQUFvQjNwQixHQUM1QixHQUFJeUksR0FBTW5TLEVBQ1RxeUIsRUFBVUwsR0FBYXRvQixFQTBCeEIsT0F4Qk0yb0IsS0FDTEEsRUFBVTZDLEdBQWV4ckIsRUFBVXlJLEdBR2xCLFNBQVprZ0IsR0FBdUJBLElBRTNCWCxJQUFXQSxJQUNWdHhCLEVBQU8sa0RBQ040eUIsSUFBSyxVQUFXLDZCQUNoQnBELFNBQVV6ZCxFQUFJalMsaUJBR2hCaVMsR0FBUXVmLEdBQU8sR0FBR3lELGVBQWlCekQsR0FBTyxHQUFHOUUsaUJBQWtCNXNCLFNBQy9EbVMsRUFBSWlqQixNQUFNLCtCQUNWampCLEVBQUlrakIsUUFFSmhELEVBQVU2QyxHQUFleHJCLEVBQVV5SSxHQUNuQ3VmLEdBQU9yQyxVQUlSMkMsR0FBYXRvQixHQUFhMm9CLEdBR3BCQSxFQUlSLFFBQVM2QyxJQUFleHZCLEVBQU15TSxHQUM3QixHQUFJclAsR0FBTzFDLEVBQVErUixFQUFJbEssY0FBZXZDLElBQVNrcUIsU0FBVXpkLEVBQUltTyxNQUM1RCtSLEVBQVVqeUIsRUFBTzR5QixJQUFLbHdCLEVBQUssR0FBSSxVQUVoQyxPQURBQSxHQUFLcUYsU0FDRWtxQixFQUdSanlCLEVBQU9tRSxNQUFPLFNBQVUsU0FBVyxTQUFVVSxFQUFHUyxHQUMvQ3RGLEVBQU9xekIsU0FBVS90QixJQUNoQnpCLElBQUssU0FBVW5CLEVBQU02d0IsRUFBVVcsR0FDOUIsTUFBS1gsR0FHd0IsSUFBckI3d0IsRUFBSzRkLGFBQXFCaVIsR0FBYW51QixLQUFNcEQsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDckUxQyxFQUFPOEssS0FBTXBJLEVBQU1vdkIsR0FBUyxXQUMzQixNQUFPNkMsSUFBa0JqeUIsRUFBTTRDLEVBQU00dUIsS0FFdENTLEdBQWtCanlCLEVBQU00QyxFQUFNNHVCLEdBUGhDLFdBV0Q1UyxJQUFLLFNBQVU1ZSxFQUFNOEcsRUFBTzBxQixHQUMzQixHQUFJaEIsR0FBU2dCLEdBQVNyQixHQUFXbndCLEVBQ2pDLE9BQU82eEIsSUFBbUI3eEIsRUFBTThHLEVBQU8wcUIsRUFDdENPLEdBQ0MveEIsRUFDQTRDLEVBQ0E0dUIsRUFDQWwwQixFQUFPc0wsUUFBUStVLFdBQWdFLGVBQW5EcmdCLEVBQU80eUIsSUFBS2x3QixFQUFNLGFBQWEsRUFBT3d3QixHQUNsRUEsR0FDRyxPQVFSbHpCLEVBQU8sV0FFQUEsRUFBT3NMLFFBQVE4VCxzQkFDcEJwZixFQUFPcXpCLFNBQVM1UyxhQUNmNWMsSUFBSyxTQUFVbkIsRUFBTTZ3QixHQUNwQixNQUFLQSxHQUlHdnpCLEVBQU84SyxLQUFNcEksR0FBUXV2QixRQUFXLGdCQUN0Q1osSUFBVTN1QixFQUFNLGdCQUxsQixjQWNHMUMsRUFBT3NMLFFBQVFnVSxlQUFpQnRmLEVBQU9zQixHQUFHeXdCLFVBQy9DL3hCLEVBQU9tRSxNQUFRLE1BQU8sUUFBVSxTQUFVVSxFQUFHMGMsR0FDNUN2aEIsRUFBT3F6QixTQUFVOVIsSUFDaEIxZCxJQUFLLFNBQVVuQixFQUFNNndCLEdBQ3BCLE1BQUtBLElBQ0pBLEVBQVdsQyxHQUFRM3VCLEVBQU02ZSxHQUVsQm1RLEdBQVV0dUIsS0FBTW13QixHQUN0QnZ6QixFQUFRMEMsR0FBT3F2QixXQUFZeFEsR0FBUyxLQUNwQ2dTLEdBTEYsZ0JBY0F2ekIsRUFBTzhULE1BQVE5VCxFQUFPOFQsS0FBS3dFLFVBQy9CdFksRUFBTzhULEtBQUt3RSxRQUFRMGEsT0FBUyxTQUFVdHdCLEdBR3RDLE1BQTJCLElBQXBCQSxFQUFLNGQsYUFBeUMsR0FBckI1ZCxFQUFLbXlCLGNBR3RDNzBCLEVBQU84VCxLQUFLd0UsUUFBUTRjLFFBQVUsU0FBVXh5QixHQUN2QyxPQUFRMUMsRUFBTzhULEtBQUt3RSxRQUFRMGEsT0FBUXR3QixLQUt0QzFDLEVBQU9tRSxNQUNOZ3hCLE9BQVEsR0FDUkMsUUFBUyxHQUNUQyxPQUFRLFNBQ04sU0FBVUMsRUFBUUMsR0FDcEJ2MUIsRUFBT3F6QixTQUFVaUMsRUFBU0MsSUFDekJDLE9BQVEsU0FBVWhzQixHQUNqQixHQUFJM0UsR0FBSSxFQUNQNHdCLEtBR0FDLEVBQXlCLGdCQUFWbHNCLEdBQXFCQSxFQUFNNkIsTUFBTSxNQUFTN0IsRUFFMUQsTUFBWSxFQUFKM0UsRUFBT0EsSUFDZDR3QixFQUFVSCxFQUFTakQsR0FBV3h0QixHQUFNMHdCLEdBQ25DRyxFQUFPN3dCLElBQU82d0IsRUFBTzd3QixFQUFJLElBQU82d0IsRUFBTyxFQUd6QyxPQUFPRCxLQUlIakUsR0FBUXB1QixLQUFNa3lCLEtBQ25CdDFCLEVBQU9xekIsU0FBVWlDLEVBQVNDLEdBQVNqVSxJQUFNaVQsS0FHM0MsSUFBSW9CLElBQU0sT0FDVEMsR0FBVyxRQUNYQyxHQUFRLFNBQ1JDLEdBQWtCLHdDQUNsQkMsR0FBZSxvQ0FFaEIvMUIsR0FBT3NCLEdBQUc4RCxRQUNUNHdCLFVBQVcsV0FDVixNQUFPaDJCLEdBQU9pMkIsTUFBT3R6QixLQUFLdXpCLG1CQUUzQkEsZUFBZ0IsV0FDZixNQUFPdnpCLE1BQUtxQyxJQUFJLFdBRWYsR0FBSStPLEdBQVcvVCxFQUFPdWhCLEtBQU01ZSxLQUFNLFdBQ2xDLE9BQU9vUixHQUFXL1QsRUFBTzBELFVBQVdxUSxHQUFhcFIsT0FFakQrUCxPQUFPLFdBQ1AsR0FBSTlMLEdBQU9qRSxLQUFLaUUsSUFFaEIsT0FBT2pFLE1BQUsyQyxPQUFTdEYsRUFBUTJDLE1BQU9ncEIsR0FBSSxjQUN2Q29LLEdBQWEzeUIsS0FBTVQsS0FBSzJHLFlBQWV3c0IsR0FBZ0IxeUIsS0FBTXdELEtBQzNEakUsS0FBSzBVLFVBQVk0VixHQUE0QjdwQixLQUFNd0QsTUFFdEQ1QixJQUFJLFNBQVVILEVBQUduQyxHQUNqQixHQUFJc1IsR0FBTWhVLEVBQVEyQyxNQUFPcVIsS0FFekIsT0FBYyxPQUFQQSxFQUNOLEtBQ0FoVSxFQUFPNkYsUUFBU21PLEdBQ2ZoVSxFQUFPZ0YsSUFBS2dQLEVBQUssU0FBVUEsR0FDMUIsT0FBUzFPLEtBQU01QyxFQUFLNEMsS0FBTWtFLE1BQU93SyxFQUFJL04sUUFBUzR2QixHQUFPLFlBRXBEdndCLEtBQU01QyxFQUFLNEMsS0FBTWtFLE1BQU93SyxFQUFJL04sUUFBUzR2QixHQUFPLFdBQzlDaHlCLFNBTUw3RCxFQUFPaTJCLE1BQVEsU0FBVXJwQixFQUFHdXBCLEdBQzNCLEdBQUliLEdBQ0hjLEtBQ0F0WixFQUFNLFNBQVV2UyxFQUFLZixHQUVwQkEsRUFBUXhKLEVBQU9zRCxXQUFZa0csR0FBVUEsSUFBcUIsTUFBVEEsRUFBZ0IsR0FBS0EsRUFDdEU0c0IsRUFBR0EsRUFBRXZ6QixRQUFXd3pCLG1CQUFvQjlyQixHQUFRLElBQU04ckIsbUJBQW9CN3NCLEdBU3hFLElBTEsyc0IsSUFBZ0I1MkIsWUFDcEI0MkIsRUFBY24yQixFQUFPczJCLGNBQWdCdDJCLEVBQU9zMkIsYUFBYUgsYUFJckRuMkIsRUFBTzZGLFFBQVMrRyxJQUFTQSxFQUFFckssU0FBV3ZDLEVBQU9xRCxjQUFldUosR0FFaEU1TSxFQUFPbUUsS0FBTXlJLEVBQUcsV0FDZmtRLEVBQUtuYSxLQUFLMkMsS0FBTTNDLEtBQUs2RyxhQU10QixLQUFNOHJCLElBQVUxb0IsR0FDZjJwQixHQUFhakIsRUFBUTFvQixFQUFHMG9CLEdBQVVhLEVBQWFyWixFQUtqRCxPQUFPc1osR0FBRWhtQixLQUFNLEtBQU1uSyxRQUFTMHZCLEdBQUssS0FHcEMsU0FBU1ksSUFBYWpCLEVBQVEzdUIsRUFBS3d2QixFQUFhclosR0FDL0MsR0FBSXhYLEVBRUosSUFBS3RGLEVBQU82RixRQUFTYyxHQUVwQjNHLEVBQU9tRSxLQUFNd0MsRUFBSyxTQUFVOUIsRUFBRzJ4QixHQUN6QkwsR0FBZVAsR0FBU3h5QixLQUFNa3lCLEdBRWxDeFksRUFBS3dZLEVBQVFrQixHQUliRCxHQUFhakIsRUFBUyxLQUFxQixnQkFBTmtCLEdBQWlCM3hCLEVBQUksSUFBTyxJQUFLMnhCLEVBQUdMLEVBQWFyWixTQUlsRixJQUFNcVosR0FBc0MsV0FBdkJuMkIsRUFBTzRHLEtBQU1ELEdBUXhDbVcsRUFBS3dZLEVBQVEzdUIsT0FOYixLQUFNckIsSUFBUXFCLEdBQ2I0dkIsR0FBYWpCLEVBQVMsSUFBTWh3QixFQUFPLElBQUtxQixFQUFLckIsR0FBUTZ3QixFQUFhclosR0FRckU5YyxFQUFPbUUsS0FBTSwwTUFFcURrSCxNQUFNLEtBQU0sU0FBVXhHLEVBQUdTLEdBRzFGdEYsRUFBT3NCLEdBQUlnRSxHQUFTLFNBQVVtQyxFQUFNbkcsR0FDbkMsTUFBT21ELFdBQVU1QixPQUFTLEVBQ3pCRixLQUFLb29CLEdBQUl6bEIsRUFBTSxLQUFNbUMsRUFBTW5HLEdBQzNCcUIsS0FBSzhELFFBQVNuQixNQUlqQnRGLEVBQU9zQixHQUFHOEQsUUFDVHF4QixNQUFPLFNBQVVDLEVBQVFDLEdBQ3hCLE1BQU9oMEIsTUFBSzhuQixXQUFZaU0sR0FBU2hNLFdBQVlpTSxHQUFTRCxJQUd2REUsS0FBTSxTQUFVL1EsRUFBT3BlLEVBQU1uRyxHQUM1QixNQUFPcUIsTUFBS29vQixHQUFJbEYsRUFBTyxLQUFNcGUsRUFBTW5HLElBRXBDdTFCLE9BQVEsU0FBVWhSLEVBQU92a0IsR0FDeEIsTUFBT3FCLE1BQUsrRCxJQUFLbWYsRUFBTyxLQUFNdmtCO0VBRy9CdzFCLFNBQVUsU0FBVTExQixFQUFVeWtCLEVBQU9wZSxFQUFNbkcsR0FDMUMsTUFBT3FCLE1BQUtvb0IsR0FBSWxGLEVBQU96a0IsRUFBVXFHLEVBQU1uRyxJQUV4Q3kxQixXQUFZLFNBQVUzMUIsRUFBVXlrQixFQUFPdmtCLEdBRXRDLE1BQTRCLEtBQXJCbUQsVUFBVTVCLE9BQWVGLEtBQUsrRCxJQUFLdEYsRUFBVSxNQUFTdUIsS0FBSytELElBQUttZixFQUFPemtCLEdBQVksS0FBTUUsS0FHbEcsSUFFQzAxQixJQUNBQyxHQUVBQyxHQUFhbDNCLEVBQU80SyxNQUVwQnVzQixHQUFjLEtBQ2RDLEdBQVEsT0FDUkMsR0FBTSxnQkFDTkMsR0FBVyw2QkFFWEMsR0FBaUIsNERBQ2pCQyxHQUFhLGlCQUNiQyxHQUFZLFFBQ1pDLEdBQU8sOENBR1BDLEdBQVEzM0IsRUFBT3NCLEdBQUd1b0IsS0FXbEIrTixNQU9BQyxNQUdBQyxHQUFXLEtBQUt2M0IsT0FBTyxJQUl4QixLQUNDMDJCLEdBQWV0M0IsRUFBU3NYLEtBQ3ZCLE1BQU83UCxJQUdSNnZCLEdBQWVyM0IsRUFBU2lJLGNBQWUsS0FDdkNvdkIsR0FBYWhnQixLQUFPLEdBQ3BCZ2dCLEdBQWVBLEdBQWFoZ0IsS0FJN0IrZixHQUFlVSxHQUFLNTBCLEtBQU1tMEIsR0FBYTF0QixrQkFHdkMsU0FBU3d1QixJQUE2QkMsR0FHckMsTUFBTyxVQUFVQyxFQUFvQjlhLEdBRUQsZ0JBQXZCOGEsS0FDWDlhLEVBQU84YSxFQUNQQSxFQUFxQixJQUd0QixJQUFJMUgsR0FDSDFyQixFQUFJLEVBQ0pxekIsRUFBWUQsRUFBbUIxdUIsY0FBYzlHLE1BQU9mLE1BRXJELElBQUsxQixFQUFPc0QsV0FBWTZaLEdBRXZCLE1BQVNvVCxFQUFXMkgsRUFBVXJ6QixLQUVSLE1BQWhCMHJCLEVBQVMsSUFDYkEsRUFBV0EsRUFBUzV2QixNQUFPLElBQU8sS0FDakNxM0IsRUFBV3pILEdBQWF5SCxFQUFXekgsUUFBa0IxYyxRQUFTc0osS0FJOUQ2YSxFQUFXekgsR0FBYXlILEVBQVd6SCxRQUFrQjl2QixLQUFNMGMsSUFRakUsUUFBU2diLElBQStCSCxFQUFXM3lCLEVBQVMreUIsRUFBaUJDLEdBRTVFLEdBQUlDLE1BQ0hDLEVBQXFCUCxJQUFjSCxFQUVwQyxTQUFTVyxHQUFTakksR0FDakIsR0FBSWpaLEVBWUosT0FYQWdoQixHQUFXL0gsSUFBYSxFQUN4QnZ3QixFQUFPbUUsS0FBTTZ6QixFQUFXekgsT0FBa0IsU0FBVXZoQixFQUFHeXBCLEdBQ3RELEdBQUlDLEdBQXNCRCxFQUFvQnB6QixFQUFTK3lCLEVBQWlCQyxFQUN4RSxPQUFtQyxnQkFBeEJLLElBQXFDSCxHQUFxQkQsRUFBV0ksR0FJcEVILElBQ0RqaEIsRUFBV29oQixHQURmLFdBSE5yekIsRUFBUTZ5QixVQUFVcmtCLFFBQVM2a0IsR0FDM0JGLEVBQVNFLElBQ0YsS0FLRnBoQixFQUdSLE1BQU9raEIsR0FBU256QixFQUFRNnlCLFVBQVcsTUFBVUksRUFBVyxNQUFTRSxFQUFTLEtBTTNFLFFBQVNHLElBQVloekIsRUFBUUosR0FDNUIsR0FBSWdGLEdBQUszRSxFQUNSZ3pCLEVBQWM1NEIsRUFBT3MyQixhQUFhc0MsZUFFbkMsS0FBTXJ1QixJQUFPaEYsR0FDUEEsRUFBS2dGLEtBQVVoTCxhQUNqQnE1QixFQUFhcnVCLEdBQVE1RSxFQUFXQyxJQUFTQSxPQUFnQjJFLEdBQVFoRixFQUFLZ0YsR0FPMUUsT0FKSzNFLElBQ0o1RixFQUFPb0YsUUFBUSxFQUFNTyxFQUFRQyxHQUd2QkQsRUFHUjNGLEVBQU9zQixHQUFHdW9CLEtBQU8sU0FBVXdHLEVBQUt3SSxFQUFRejBCLEdBQ3ZDLEdBQW9CLGdCQUFSaXNCLElBQW9Cc0gsR0FDL0IsTUFBT0EsSUFBTW56QixNQUFPN0IsS0FBTThCLFVBRzNCLElBQUlyRCxHQUFVd0YsRUFBTWt5QixFQUNuQmxjLEVBQU9qYSxLQUNQK0QsRUFBTTJwQixFQUFJeHZCLFFBQVEsSUErQ25CLE9BN0NLNkYsSUFBTyxJQUNYdEYsRUFBV2l2QixFQUFJMXZCLE1BQU8rRixHQUN0QjJwQixFQUFNQSxFQUFJMXZCLE1BQU8sRUFBRytGLElBSWhCMUcsRUFBT3NELFdBQVl1MUIsSUFHdkJ6MEIsRUFBV3kwQixFQUNYQSxFQUFTdDVCLFdBR0VzNUIsR0FBNEIsZ0JBQVhBLEtBQzVCanlCLEVBQU8sUUFJSGdXLEVBQUsvWixPQUFTLEdBQ2xCN0MsRUFBT3N3QixNQUNORCxJQUFLQSxFQUdMenBCLEtBQU1BLEVBQ04ycEIsU0FBVSxPQUNWOW9CLEtBQU1veEIsSUFDSnQwQixLQUFLLFNBQVV3MEIsR0FHakJELEVBQVdyMEIsVUFFWG1ZLEVBQUttUyxLQUFNM3RCLEVBSVZwQixFQUFPLFNBQVNpdUIsT0FBUWp1QixFQUFPaUQsVUFBVzgxQixJQUFpQmgyQixLQUFNM0IsR0FHakUyM0IsS0FFQ0MsU0FBVTUwQixHQUFZLFNBQVVpMEIsRUFBT1ksR0FDekNyYyxFQUFLelksS0FBTUMsRUFBVTAwQixJQUFjVCxFQUFNVSxhQUFjRSxFQUFRWixNQUkxRDExQixNQUlSM0MsRUFBT21FLE1BQVEsWUFBYSxXQUFZLGVBQWdCLFlBQWEsY0FBZSxZQUFjLFNBQVVVLEVBQUcrQixHQUM5RzVHLEVBQU9zQixHQUFJc0YsR0FBUyxTQUFVdEYsR0FDN0IsTUFBT3FCLE1BQUtvb0IsR0FBSW5rQixFQUFNdEYsTUFJeEJ0QixFQUFPb0YsUUFHTjh6QixPQUFRLEVBR1JDLGdCQUNBQyxRQUVBOUMsY0FDQ2pHLElBQUs0RyxHQUNMcndCLEtBQU0sTUFDTnl5QixRQUFTOUIsR0FBZW4wQixLQUFNNHpCLEdBQWMsSUFDNUNwUixRQUFRLEVBQ1IwVCxhQUFhLEVBQ2I5SSxPQUFPLEVBQ1ArSSxZQUFhLG1EQWFidFksU0FDQ3VZLElBQUsxQixHQUNMOXVCLEtBQU0sYUFDTitsQixLQUFNLFlBQ04xbUIsSUFBSyw0QkFDTG94QixLQUFNLHFDQUdQbE8sVUFDQ2xqQixJQUFLLE1BQ0wwbUIsS0FBTSxPQUNOMEssS0FBTSxRQUdQQyxnQkFDQ3J4QixJQUFLLGNBQ0xXLEtBQU0sZUFDTnl3QixLQUFNLGdCQUtQRSxZQUdDQyxTQUFVenlCLE9BR1YweUIsYUFBYSxFQUdiQyxZQUFhOTVCLEVBQU9pSSxVQUdwQjh4QixXQUFZLzVCLEVBQU9vSSxVQU9wQnd3QixhQUNDdkksS0FBSyxFQUNMaHZCLFNBQVMsSUFPWDI0QixVQUFXLFNBQVVyMEIsRUFBUXMwQixHQUM1QixNQUFPQSxHQUdOdEIsR0FBWUEsR0FBWWh6QixFQUFRM0YsRUFBT3MyQixjQUFnQjJELEdBR3ZEdEIsR0FBWTM0QixFQUFPczJCLGFBQWMzd0IsSUFHbkN1MEIsY0FBZW5DLEdBQTZCSCxJQUM1Q3VDLGNBQWVwQyxHQUE2QkYsSUFHNUN2SCxLQUFNLFNBQVVELEVBQUtockIsR0FHQSxnQkFBUmdyQixLQUNYaHJCLEVBQVVnckIsRUFDVkEsRUFBTTl3QixXQUlQOEYsRUFBVUEsS0FFVixJQUFJKzBCLEdBRUhDLEVBRUFDLEVBQ0FDLEVBRUFDLEVBRUE5RSxFQUVBK0UsRUFFQTUxQixFQUVBdXhCLEVBQUlwMkIsRUFBT2c2QixhQUFlMzBCLEdBRTFCcTFCLEVBQWtCdEUsRUFBRS8wQixTQUFXKzBCLEVBRS9CdUUsRUFBcUJ2RSxFQUFFLzBCLFVBQWFxNUIsRUFBZ0J4M0IsVUFBWXczQixFQUFnQm40QixRQUMvRXZDLEVBQVEwNkIsR0FDUjE2QixFQUFPMmxCLE1BRVJwSSxFQUFXdmQsRUFBT2lMLFdBQ2xCMnZCLEVBQW1CNTZCLEVBQU9nYyxVQUFVLGVBRXBDNmUsRUFBYXpFLEVBQUV5RSxlQUVmQyxLQUNBQyxLQUVBMWQsRUFBUSxFQUVSMmQsRUFBVyxXQUVYM0MsR0FDQ250QixXQUFZLEVBR1ordkIsa0JBQW1CLFNBQVUxd0IsR0FDNUIsR0FBSTlILEVBQ0osSUFBZSxJQUFWNGEsRUFBYyxDQUNsQixJQUFNa2QsRUFBa0IsQ0FDdkJBLElBQ0EsT0FBUzkzQixFQUFRNjBCLEdBQVN4MEIsS0FBTXczQixHQUMvQkMsRUFBaUI5M0IsRUFBTSxHQUFHOEcsZUFBa0I5RyxFQUFPLEdBR3JEQSxFQUFRODNCLEVBQWlCaHdCLEVBQUloQixlQUU5QixNQUFnQixPQUFUOUcsRUFBZ0IsS0FBT0EsR0FJL0J5NEIsc0JBQXVCLFdBQ3RCLE1BQWlCLEtBQVY3ZCxFQUFjaWQsRUFBd0IsTUFJOUNhLGlCQUFrQixTQUFVNzFCLEVBQU1rRSxHQUNqQyxHQUFJNHhCLEdBQVE5MUIsRUFBS2lFLGFBS2pCLE9BSk04VCxLQUNML1gsRUFBT3kxQixFQUFxQkssR0FBVUwsRUFBcUJLLElBQVc5MUIsRUFDdEV3MUIsRUFBZ0J4MUIsR0FBU2tFLEdBRW5CN0csTUFJUjA0QixpQkFBa0IsU0FBVXowQixHQUkzQixNQUhNeVcsS0FDTCtZLEVBQUVrRixTQUFXMTBCLEdBRVBqRSxNQUlSazRCLFdBQVksU0FBVTcxQixHQUNyQixHQUFJNEQsRUFDSixJQUFLNUQsRUFDSixHQUFhLEVBQVJxWSxFQUNKLElBQU16VSxJQUFRNUQsR0FFYjYxQixFQUFZanlCLElBQVdpeUIsRUFBWWp5QixHQUFRNUQsRUFBSzRELFFBSWpEeXZCLEdBQU0vYSxPQUFRdFksRUFBS3F6QixFQUFNWSxRQUczQixPQUFPdDJCLE9BSVI0NEIsTUFBTyxTQUFVQyxHQUNoQixHQUFJQyxHQUFZRCxHQUFjUixDQUs5QixPQUpLWixJQUNKQSxFQUFVbUIsTUFBT0UsR0FFbEJsM0IsRUFBTSxFQUFHazNCLEdBQ0Y5NEIsTUF5Q1YsSUFwQ0E0YSxFQUFTalosUUFBUyt6QixHQUFRVyxTQUFXNEIsRUFBaUI5ZCxJQUN0RHViLEVBQU1xRCxRQUFVckQsRUFBTTl6QixLQUN0Qjh6QixFQUFNL3dCLE1BQVErd0IsRUFBTTdhLEtBTXBCNFksRUFBRS9GLE1BQVVBLEdBQU8rRixFQUFFL0YsS0FBTzRHLElBQWlCLElBQUtoeEIsUUFBU214QixHQUFPLElBQ2hFbnhCLFFBQVN3eEIsR0FBV1QsR0FBYyxHQUFNLE1BRzFDWixFQUFFeHZCLEtBQU92QixFQUFRczJCLFFBQVV0MkIsRUFBUXVCLE1BQVF3dkIsRUFBRXVGLFFBQVV2RixFQUFFeHZCLEtBR3pEd3ZCLEVBQUU4QixVQUFZbDRCLEVBQU9tQixLQUFNaTFCLEVBQUU3RixVQUFZLEtBQU1obkIsY0FBYzlHLE1BQU9mLEtBQXFCLElBR25FLE1BQWpCMDBCLEVBQUV3RixjQUNObEcsRUFBUWdDLEdBQUs1MEIsS0FBTXN6QixFQUFFL0YsSUFBSTltQixlQUN6QjZzQixFQUFFd0YsZUFBa0JsRyxHQUNqQkEsRUFBTyxLQUFRc0IsR0FBYyxJQUFPdEIsRUFBTyxLQUFRc0IsR0FBYyxLQUNoRXRCLEVBQU8sS0FBd0IsVUFBZkEsRUFBTyxHQUFrQixLQUFPLFdBQy9Dc0IsR0FBYyxLQUErQixVQUF0QkEsR0FBYyxHQUFrQixLQUFPLFVBSy9EWixFQUFFM3VCLE1BQVEydUIsRUFBRWtELGFBQWlDLGdCQUFYbEQsR0FBRTN1QixPQUN4QzJ1QixFQUFFM3VCLEtBQU96SCxFQUFPaTJCLE1BQU9HLEVBQUUzdUIsS0FBTTJ1QixFQUFFRCxjQUlsQ2dDLEdBQStCUCxHQUFZeEIsRUFBRy93QixFQUFTZ3pCLEdBR3hDLElBQVZoYixFQUNKLE1BQU9nYixFQUlSb0MsR0FBY3JFLEVBQUV4USxPQUdYNlUsR0FBbUMsSUFBcEJ6NkIsRUFBT2s1QixVQUMxQmw1QixFQUFPMmxCLE1BQU1sZixRQUFRLGFBSXRCMnZCLEVBQUV4dkIsS0FBT3d2QixFQUFFeHZCLEtBQUsxRSxjQUdoQmswQixFQUFFeUYsWUFBY3JFLEdBQVdwMEIsS0FBTWd6QixFQUFFeHZCLE1BSW5DeXpCLEVBQVdqRSxFQUFFL0YsSUFHUCtGLEVBQUV5RixhQUdGekYsRUFBRTN1QixPQUNONHlCLEVBQWFqRSxFQUFFL0YsTUFBUzhHLEdBQVkvekIsS0FBTWkzQixHQUFhLElBQU0sS0FBUWpFLEVBQUUzdUIsV0FFaEUydUIsR0FBRTN1QixNQUlMMnVCLEVBQUUxbEIsU0FBVSxJQUNoQjBsQixFQUFFL0YsSUFBTWdILEdBQUlqMEIsS0FBTWkzQixHQUdqQkEsRUFBU3AwQixRQUFTb3hCLEdBQUssT0FBU0gsTUFHaENtRCxHQUFhbEQsR0FBWS96QixLQUFNaTNCLEdBQWEsSUFBTSxLQUFRLEtBQU9uRCxPQUsvRGQsRUFBRTBGLGFBQ0Q5N0IsRUFBT201QixhQUFja0IsSUFDekJoQyxFQUFNOEMsaUJBQWtCLG9CQUFxQm43QixFQUFPbTVCLGFBQWNrQixJQUU5RHI2QixFQUFPbzVCLEtBQU1pQixJQUNqQmhDLEVBQU04QyxpQkFBa0IsZ0JBQWlCbjdCLEVBQU9vNUIsS0FBTWlCLE1BS25EakUsRUFBRTN1QixNQUFRMnVCLEVBQUV5RixZQUFjekYsRUFBRW1ELGVBQWdCLEdBQVNsMEIsRUFBUWswQixjQUNqRWxCLEVBQU04QyxpQkFBa0IsZUFBZ0IvRSxFQUFFbUQsYUFJM0NsQixFQUFNOEMsaUJBQ0wsU0FDQS9FLEVBQUU4QixVQUFXLElBQU85QixFQUFFblYsUUFBU21WLEVBQUU4QixVQUFVLElBQzFDOUIsRUFBRW5WLFFBQVNtVixFQUFFOEIsVUFBVSxLQUE4QixNQUFyQjlCLEVBQUU4QixVQUFXLEdBQWMsS0FBT0osR0FBVyxXQUFhLElBQzFGMUIsRUFBRW5WLFFBQVMsS0FJYixLQUFNcGMsSUFBS3V4QixHQUFFMkYsUUFDWjFELEVBQU04QyxpQkFBa0J0MkIsRUFBR3V4QixFQUFFMkYsUUFBU2wzQixHQUl2QyxJQUFLdXhCLEVBQUU0RixhQUFnQjVGLEVBQUU0RixXQUFXcDRCLEtBQU04MkIsRUFBaUJyQyxFQUFPakMsTUFBUSxHQUFtQixJQUFWL1ksR0FFbEYsTUFBT2diLEdBQU1rRCxPQUlkUCxHQUFXLE9BR1gsS0FBTW4yQixLQUFPNjJCLFFBQVMsRUFBR3AwQixNQUFPLEVBQUcweEIsU0FBVSxHQUM1Q1gsRUFBT3h6QixHQUFLdXhCLEVBQUd2eEIsR0FPaEIsSUFIQXUxQixFQUFZakMsR0FBK0JOLEdBQVl6QixFQUFHL3dCLEVBQVNnekIsR0FLNUQsQ0FDTkEsRUFBTW50QixXQUFhLEVBR2R1dkIsR0FDSkUsRUFBbUJsMEIsUUFBUyxZQUFjNHhCLEVBQU9qQyxJQUc3Q0EsRUFBRTVGLE9BQVM0RixFQUFFdFQsUUFBVSxJQUMzQjBYLEVBQWVydkIsV0FBVyxXQUN6Qmt0QixFQUFNa0QsTUFBTSxZQUNWbkYsRUFBRXRULFNBR04sS0FDQ3pGLEVBQVEsRUFDUitjLEVBQVU2QixLQUFNbkIsRUFBZ0J2MkIsR0FDL0IsTUFBUTZDLEdBRVQsS0FBYSxFQUFSaVcsR0FJSixLQUFNalcsRUFITjdDLEdBQU0sR0FBSTZDLFFBckJaN0MsR0FBTSxHQUFJLGVBOEJYLFNBQVNBLEdBQU0wMEIsRUFBUWlELEVBQWtCQyxFQUFXSixHQUNuRCxHQUFJSyxHQUFXVixFQUFTcDBCLEVBQU93eEIsRUFBVXVELEVBQ3hDYixFQUFhVSxDQUdDLEtBQVY3ZSxJQUtMQSxFQUFRLEVBR0htZCxHQUNKelgsYUFBY3lYLEdBS2ZKLEVBQVk3NkIsVUFHWis2QixFQUF3QnlCLEdBQVcsR0FHbkMxRCxFQUFNbnRCLFdBQWErdEIsRUFBUyxFQUFJLEVBQUksRUFHcENtRCxFQUFZbkQsR0FBVSxLQUFnQixJQUFUQSxHQUEyQixNQUFYQSxFQUd4Q2tELElBQ0pyRCxFQUFXd0QsR0FBcUJsRyxFQUFHaUMsRUFBTzhELElBSTNDckQsRUFBV3lELEdBQWFuRyxFQUFHMEMsRUFBVVQsRUFBTytELEdBR3ZDQSxHQUdDaEcsRUFBRTBGLGFBQ05PLEVBQVdoRSxFQUFNNEMsa0JBQWtCLGlCQUM5Qm9CLElBQ0pyOEIsRUFBT201QixhQUFja0IsR0FBYWdDLEdBRW5DQSxFQUFXaEUsRUFBTTRDLGtCQUFrQixRQUM5Qm9CLElBQ0pyOEIsRUFBT281QixLQUFNaUIsR0FBYWdDLElBS1osTUFBWHBELEdBQTZCLFNBQVg3QyxFQUFFeHZCLEtBQ3hCNDBCLEVBQWEsWUFHUyxNQUFYdkMsRUFDWHVDLEVBQWEsZUFJYkEsRUFBYTFDLEVBQVN6YixNQUN0QnFlLEVBQVU1QyxFQUFTcnhCLEtBQ25CSCxFQUFRd3hCLEVBQVN4eEIsTUFDakI4MEIsR0FBYTkwQixLQUtkQSxFQUFRazBCLEdBQ0h2QyxJQUFXdUMsS0FDZkEsRUFBYSxRQUNDLEVBQVR2QyxJQUNKQSxFQUFTLEtBTVpaLEVBQU1ZLE9BQVNBLEVBQ2ZaLEVBQU1tRCxZQUFlVSxHQUFvQlYsR0FBZSxHQUduRFksRUFDSjdlLEVBQVMvVyxZQUFhazBCLEdBQW1CZ0IsRUFBU0YsRUFBWW5ELElBRTlEOWEsRUFBU2lmLFdBQVk5QixHQUFtQnJDLEVBQU9tRCxFQUFZbDBCLElBSTVEK3dCLEVBQU13QyxXQUFZQSxHQUNsQkEsRUFBYXQ3QixVQUVSazdCLEdBQ0pFLEVBQW1CbDBCLFFBQVMyMUIsRUFBWSxjQUFnQixhQUNyRC9ELEVBQU9qQyxFQUFHZ0csRUFBWVYsRUFBVXAwQixJQUlwQ3N6QixFQUFpQjFkLFNBQVV3ZCxHQUFtQnJDLEVBQU9tRCxJQUVoRGYsSUFDSkUsRUFBbUJsMEIsUUFBUyxnQkFBa0I0eEIsRUFBT2pDLE1BRTNDcDJCLEVBQU9rNUIsUUFDaEJsNUIsRUFBTzJsQixNQUFNbGYsUUFBUSxjQUt4QixNQUFPNHhCLElBR1JvRSxRQUFTLFNBQVVwTSxFQUFLNW9CLEVBQU1yRCxHQUM3QixNQUFPcEUsR0FBTzZELElBQUt3c0IsRUFBSzVvQixFQUFNckQsRUFBVSxTQUd6Q3M0QixVQUFXLFNBQVVyTSxFQUFLanNCLEdBQ3pCLE1BQU9wRSxHQUFPNkQsSUFBS3dzQixFQUFLOXdCLFVBQVc2RSxFQUFVLGFBSS9DcEUsRUFBT21FLE1BQVEsTUFBTyxRQUFVLFNBQVVVLEVBQUc4MkIsR0FDNUMzN0IsRUFBUTI3QixHQUFXLFNBQVV0TCxFQUFLNW9CLEVBQU1yRCxFQUFVd0MsR0FRakQsTUFOSzVHLEdBQU9zRCxXQUFZbUUsS0FDdkJiLEVBQU9BLEdBQVF4QyxFQUNmQSxFQUFXcUQsRUFDWEEsRUFBT2xJLFdBR0RTLEVBQU9zd0IsTUFDYkQsSUFBS0EsRUFDTHpwQixLQUFNKzBCLEVBQ05wTCxTQUFVM3BCLEVBQ1ZhLEtBQU1BLEVBQ05pMEIsUUFBU3QzQixNQVNaLFNBQVNrNEIsSUFBcUJsRyxFQUFHaUMsRUFBTzhELEdBRXZDLEdBQUlRLEdBQUkvMUIsRUFBTWcyQixFQUFlQyxFQUM1QnRSLEVBQVc2SyxFQUFFN0ssU0FDYjJNLEVBQVk5QixFQUFFOEIsU0FHZixPQUEwQixNQUFuQkEsRUFBVyxHQUNqQkEsRUFBVXRuQixRQUNMK3JCLElBQU9wOUIsWUFDWG85QixFQUFLdkcsRUFBRWtGLFVBQVlqRCxFQUFNNEMsa0JBQWtCLGdCQUs3QyxJQUFLMEIsRUFDSixJQUFNLzFCLElBQVEya0IsR0FDYixHQUFLQSxFQUFVM2tCLElBQVUya0IsRUFBVTNrQixHQUFPeEQsS0FBTXU1QixHQUFPLENBQ3REekUsRUFBVXJrQixRQUFTak4sRUFDbkIsT0FNSCxHQUFLc3hCLEVBQVcsSUFBT2lFLEdBQ3RCUyxFQUFnQjFFLEVBQVcsT0FDckIsQ0FFTixJQUFNdHhCLElBQVF1MUIsR0FBWSxDQUN6QixJQUFNakUsRUFBVyxJQUFPOUIsRUFBRXVELFdBQVkveUIsRUFBTyxJQUFNc3hCLEVBQVUsSUFBTyxDQUNuRTBFLEVBQWdCaDJCLENBQ2hCLE9BRUtpMkIsSUFDTEEsRUFBZ0JqMkIsR0FJbEJnMkIsRUFBZ0JBLEdBQWlCQyxFQU1sQyxNQUFLRCxJQUNDQSxJQUFrQjFFLEVBQVcsSUFDakNBLEVBQVVya0IsUUFBUytvQixHQUViVCxFQUFXUyxJQUpuQixVQVdELFFBQVNMLElBQWFuRyxFQUFHMEMsRUFBVVQsRUFBTytELEdBQ3pDLEdBQUlVLEdBQU9DLEVBQVNDLEVBQU0xMEIsRUFBS2tqQixFQUM5Qm1PLEtBRUF6QixFQUFZOUIsRUFBRThCLFVBQVV2M0IsT0FHekIsSUFBS3UzQixFQUFXLEdBQ2YsSUFBTThFLElBQVE1RyxHQUFFdUQsV0FDZkEsRUFBWXFELEVBQUt6ekIsZUFBa0I2c0IsRUFBRXVELFdBQVlxRCxFQUluREQsR0FBVTdFLEVBQVV0bkIsT0FHcEIsT0FBUW1zQixFQWNQLEdBWkszRyxFQUFFc0QsZUFBZ0JxRCxLQUN0QjFFLEVBQU9qQyxFQUFFc0QsZUFBZ0JxRCxJQUFjakUsSUFJbEN0TixHQUFRNFEsR0FBYWhHLEVBQUU2RyxhQUM1Qm5FLEVBQVcxQyxFQUFFNkcsV0FBWW5FLEVBQVUxQyxFQUFFN0YsV0FHdEMvRSxFQUFPdVIsRUFDUEEsRUFBVTdFLEVBQVV0bkIsUUFLbkIsR0FBaUIsTUFBWm1zQixFQUVKQSxFQUFVdlIsTUFHSixJQUFjLE1BQVRBLEdBQWdCQSxJQUFTdVIsRUFBVSxDQU05QyxHQUhBQyxFQUFPckQsRUFBWW5PLEVBQU8sSUFBTXVSLElBQWFwRCxFQUFZLEtBQU9vRCxJQUcxREMsRUFDTCxJQUFNRixJQUFTbkQsR0FJZCxHQURBcnhCLEVBQU13MEIsRUFBTXp4QixNQUFPLEtBQ2QvQyxFQUFLLEtBQVF5MEIsSUFHakJDLEVBQU9yRCxFQUFZbk8sRUFBTyxJQUFNbGpCLEVBQUssS0FDcENxeEIsRUFBWSxLQUFPcnhCLEVBQUssS0FDYixDQUVOMDBCLEtBQVMsRUFDYkEsRUFBT3JELEVBQVltRCxHQUdSbkQsRUFBWW1ELE1BQVksSUFDbkNDLEVBQVV6MEIsRUFBSyxHQUNmNHZCLEVBQVVya0IsUUFBU3ZMLEVBQUssSUFFekIsT0FPSixHQUFLMDBCLEtBQVMsRUFHYixHQUFLQSxHQUFRNUcsRUFBRyxVQUNmMEMsRUFBV2tFLEVBQU1sRSxPQUVqQixLQUNDQSxFQUFXa0UsRUFBTWxFLEdBQ2hCLE1BQVExeEIsR0FDVCxPQUFTaVcsTUFBTyxjQUFlL1YsTUFBTzAxQixFQUFPNTFCLEVBQUksc0JBQXdCb2tCLEVBQU8sT0FBU3VSLElBUS9GLE9BQVMxZixNQUFPLFVBQVc1VixLQUFNcXhCLEdBR2xDOTRCLEVBQU9nNkIsV0FDTi9ZLFNBQ0NwWSxPQUFRLDZGQUVUMGlCLFVBQ0MxaUIsT0FBUSx1QkFFVDh3QixZQUNDdUQsY0FBZSxTQUFVbDBCLEdBRXhCLE1BREFoSixHQUFPMkksV0FBWUssR0FDWkEsTUFNVmhKLEVBQU9rNkIsY0FBZSxTQUFVLFNBQVU5RCxHQUNwQ0EsRUFBRTFsQixRQUFVblIsWUFDaEI2MkIsRUFBRTFsQixPQUFRLEdBRU4wbEIsRUFBRXdGLGNBQ054RixFQUFFeHZCLEtBQU8sU0FLWDVHLEVBQU9tNkIsY0FBZSxTQUFVLFNBQVUvRCxHQUV6QyxHQUFLQSxFQUFFd0YsWUFBYyxDQUNwQixHQUFJL3lCLEdBQVF6RSxDQUNaLFFBQ0M2M0IsS0FBTSxTQUFVanRCLEVBQUdncUIsR0FDbEJud0IsRUFBUzdJLEVBQU8sWUFBWXVoQixNQUMzQmlQLE9BQU8sRUFDUDJNLFFBQVMvRyxFQUFFZ0gsY0FDWDczQixJQUFLNndCLEVBQUUvRixNQUNMdEYsR0FDRixhQUNBM21CLEVBQVcsU0FBVWk1QixHQUNwQngwQixFQUFPZCxTQUNQM0QsRUFBVyxLQUNOaTVCLEdBQ0pyRSxFQUF1QixVQUFicUUsRUFBSXoyQixLQUFtQixJQUFNLElBQUt5MkIsRUFBSXoyQixRQUluRGhILEVBQVNxSixLQUFLQyxZQUFhTCxFQUFRLEtBRXBDMHlCLE1BQU8sV0FDRG4zQixHQUNKQSxRQU1MLElBQUlrNUIsT0FDSEMsR0FBUyxtQkFHVnY5QixHQUFPZzZCLFdBQ053RCxNQUFPLFdBQ1BDLGNBQWUsV0FDZCxHQUFJcjVCLEdBQVdrNUIsR0FBYXJ3QixPQUFXak4sRUFBTzhGLFFBQVUsSUFBUW94QixJQUVoRSxPQURBdjBCLE1BQU15QixJQUFhLEVBQ1pBLEtBS1RwRSxFQUFPazZCLGNBQWUsYUFBYyxTQUFVOUQsRUFBR3NILEVBQWtCckYsR0FFbEUsR0FBSXNGLEdBQWNDLEVBQWFDLEVBQzlCQyxFQUFXMUgsRUFBRW9ILFNBQVUsSUFBV0QsR0FBT242QixLQUFNZ3pCLEVBQUUvRixLQUNoRCxNQUNrQixnQkFBWCtGLEdBQUUzdUIsUUFBd0IydUIsRUFBRW1ELGFBQWUsSUFBSzE0QixRQUFRLHNDQUF3QzA4QixHQUFPbjZCLEtBQU1nekIsRUFBRTN1QixPQUFVLE9BSWxJLE9BQUtxMkIsSUFBaUMsVUFBckIxSCxFQUFFOEIsVUFBVyxJQUc3QnlGLEVBQWV2SCxFQUFFcUgsY0FBZ0J6OUIsRUFBT3NELFdBQVk4eUIsRUFBRXFILGVBQ3JEckgsRUFBRXFILGdCQUNGckgsRUFBRXFILGNBR0VLLEVBQ0oxSCxFQUFHMEgsR0FBYTFILEVBQUcwSCxHQUFXNzNCLFFBQVNzM0IsR0FBUSxLQUFPSSxHQUMzQ3ZILEVBQUVvSCxTQUFVLElBQ3ZCcEgsRUFBRS9GLE1BQVM4RyxHQUFZL3pCLEtBQU1nekIsRUFBRS9GLEtBQVEsSUFBTSxLQUFRK0YsRUFBRW9ILE1BQVEsSUFBTUcsR0FJdEV2SCxFQUFFdUQsV0FBVyxlQUFpQixXQUk3QixNQUhNa0UsSUFDTDc5QixFQUFPc0gsTUFBT3EyQixFQUFlLG1CQUV2QkUsRUFBbUIsSUFJM0J6SCxFQUFFOEIsVUFBVyxHQUFNLE9BR25CMEYsRUFBY3QrQixFQUFRcStCLEdBQ3RCcitCLEVBQVFxK0IsR0FBaUIsV0FDeEJFLEVBQW9CcDVCLFdBSXJCNHpCLEVBQU0vYSxPQUFPLFdBRVpoZSxFQUFRcStCLEdBQWlCQyxFQUdwQnhILEVBQUd1SCxLQUVQdkgsRUFBRXFILGNBQWdCQyxFQUFpQkQsY0FHbkNILEdBQWE3OEIsS0FBTWs5QixJQUlmRSxHQUFxQjc5QixFQUFPc0QsV0FBWXM2QixJQUM1Q0EsRUFBYUMsRUFBbUIsSUFHakNBLEVBQW9CRCxFQUFjcitCLFlBSTVCLFVBdERSLFlBeUREUyxFQUFPczJCLGFBQWF5SCxJQUFNLFdBQ3pCLElBQ0MsTUFBTyxJQUFJQyxnQkFDVixNQUFPNTJCLEtBR1YsSUFBSTYyQixJQUFlaitCLEVBQU9zMkIsYUFBYXlILE1BQ3RDRyxJQUVDLEVBQUcsSUFHSEMsS0FBTSxLQUtQQyxHQUFRLEVBQ1JDLEtBRUkvK0IsR0FBT2cvQixlQUNYdCtCLEVBQVFWLEdBQVN5ckIsR0FBSSxTQUFVLFdBQzlCLElBQUssR0FBSXhnQixLQUFPOHpCLElBQ2ZBLEdBQWM5ekIsSUFFZjh6QixJQUFlOStCLFlBSWpCUyxFQUFPc0wsUUFBUWl6QixPQUFTTixJQUFrQixtQkFBcUJBLElBQy9EaitCLEVBQU9zTCxRQUFRZ2xCLEtBQU8yTixLQUFpQkEsR0FFdkNqK0IsRUFBT202QixjQUFjLFNBQVU5MEIsR0FDOUIsR0FBSWpCLEVBRUosT0FBS3BFLEdBQU9zTCxRQUFRaXpCLE1BQVFOLEtBQWlCNTRCLEVBQVF1MkIsYUFFbkRLLEtBQU0sU0FBVUYsRUFBUy9DLEdBQ3hCLEdBQUluMEIsR0FBR2dMLEVBQ05rdUIsRUFBTTE0QixFQUFRMDRCLEtBR2YsSUFGQUEsRUFBSVMsS0FBTW41QixFQUFRdUIsS0FBTXZCLEVBQVFnckIsSUFBS2hyQixFQUFRbXJCLE1BQU9uckIsRUFBUW81QixTQUFVcDVCLEVBQVE2UyxVQUV6RTdTLEVBQVFxNUIsVUFDWixJQUFNNzVCLElBQUtRLEdBQVFxNUIsVUFDbEJYLEVBQUtsNUIsR0FBTVEsRUFBUXE1QixVQUFXNzVCLEVBSTNCUSxHQUFRaTJCLFVBQVl5QyxFQUFJMUMsa0JBQzVCMEMsRUFBSTFDLGlCQUFrQmgyQixFQUFRaTJCLFVBT3pCajJCLEVBQVF1MkIsYUFBZ0JHLEVBQVEsc0JBQ3JDQSxFQUFRLG9CQUFzQixpQkFHL0IsS0FBTWwzQixJQUFLazNCLEdBQ1ZnQyxFQUFJNUMsaUJBQWtCdDJCLEVBQUdrM0IsRUFBU2wzQixHQUduQ1QsR0FBVyxTQUFVd0MsR0FDcEIsTUFBTyxZQUNEeEMsVUFDR2k2QixJQUFjeHVCLEdBQ3JCekwsRUFBVzI1QixFQUFJWSxPQUFTWixFQUFJYSxRQUFVLEtBQ3hCLFVBQVRoNEIsRUFDSm0zQixFQUFJeEMsUUFDZ0IsVUFBVDMwQixFQUNYb3lCLEVBRUMrRSxFQUFJOUUsUUFBVSxJQUNkOEUsRUFBSXZDLFlBR0x4QyxFQUNDa0YsR0FBa0JILEVBQUk5RSxTQUFZOEUsRUFBSTlFLE9BQ3RDOEUsRUFBSXZDLFdBSXdCLGdCQUFyQnVDLEdBQUloRixjQUNWL3ZCLEtBQU0rMEIsRUFBSWhGLGNBQ1B4NUIsVUFDSncrQixFQUFJN0MsNEJBT1Q2QyxFQUFJWSxPQUFTdjZCLElBQ2IyNUIsRUFBSWEsUUFBVXg2QixFQUFTLFNBRXZCQSxFQUFXaTZCLEdBQWV4dUIsRUFBS3V1QixNQUFhaDZCLEVBQVMsU0FJckQyNUIsRUFBSTlCLEtBQU01MkIsRUFBUXcyQixZQUFjeDJCLEVBQVFvQyxNQUFRLE9BRWpEOHpCLE1BQU8sV0FDRG4zQixHQUNKQSxNQXRFSixXQTRFRCxJQUFJeTZCLElBQU9DLEdBQ1ZDLEdBQVcseUJBQ1hDLEdBQWF0eEIsT0FBUSxpQkFBbUJsTSxFQUFZLGNBQWUsS0FDbkV5OUIsR0FBTyxjQUNQQyxJQUF3QkMsSUFDeEJDLElBQ0M1RixLQUFNLFNBQVVqWSxFQUFNL1gsR0FDckIsR0FBSTYxQixHQUFRMThCLEtBQUsyOEIsWUFBYS9kLEVBQU0vWCxHQUNuQzdELEVBQVMwNUIsRUFBTWh1QixNQUNmcWtCLEVBQVFzSixHQUFPbDhCLEtBQU0wRyxHQUNyQisxQixFQUFPN0osR0FBU0EsRUFBTyxLQUFTMTFCLEVBQU93ekIsVUFBV2pTLEdBQVMsR0FBSyxNQUdoRXpMLEdBQVU5VixFQUFPd3pCLFVBQVdqUyxJQUFtQixPQUFUZ2UsSUFBa0I1NUIsSUFDdkRxNUIsR0FBT2w4QixLQUFNOUMsRUFBTzR5QixJQUFLeU0sRUFBTTM4QixLQUFNNmUsSUFDdENpZSxFQUFRLEVBQ1JDLEVBQWdCLEVBRWpCLElBQUszcEIsR0FBU0EsRUFBTyxLQUFReXBCLEVBQU8sQ0FFbkNBLEVBQU9BLEdBQVF6cEIsRUFBTyxHQUd0QjRmLEVBQVFBLE1BR1I1ZixHQUFTblEsR0FBVSxDQUVuQixHQUdDNjVCLEdBQVFBLEdBQVMsS0FHakIxcEIsR0FBZ0IwcEIsRUFDaEJ4L0IsRUFBT2dMLE1BQU9xMEIsRUFBTTM4QixLQUFNNmUsRUFBTXpMLEVBQVF5cEIsU0FJL0JDLEtBQVdBLEVBQVFILEVBQU1odUIsTUFBUTFMLElBQXFCLElBQVY2NUIsS0FBaUJDLEdBYXhFLE1BVEsvSixLQUNKNWYsRUFBUXVwQixFQUFNdnBCLE9BQVNBLElBQVVuUSxHQUFVLEVBQzNDMDVCLEVBQU1FLEtBQU9BLEVBRWJGLEVBQU1wNkIsSUFBTXl3QixFQUFPLEdBQ2xCNWYsR0FBVTRmLEVBQU8sR0FBTSxHQUFNQSxFQUFPLElBQ25DQSxFQUFPLElBR0gySixJQUtWLFNBQVNLLE1BSVIsTUFIQXYwQixZQUFXLFdBQ1YwekIsR0FBUXQvQixZQUVBcy9CLEdBQVE3K0IsRUFBTzRLLE1BR3pCLFFBQVMwMEIsSUFBYTkxQixFQUFPK1gsRUFBTW9lLEdBQ2xDLEdBQUlOLEdBQ0hPLEdBQWVSLEdBQVU3ZCxRQUFlaGhCLE9BQVE2K0IsR0FBVSxNQUMxRHJpQixFQUFRLEVBQ1JsYSxFQUFTKzhCLEVBQVcvOEIsTUFDckIsTUFBZ0JBLEVBQVJrYSxFQUFnQkEsSUFDdkIsR0FBTXNpQixFQUFRTyxFQUFZN2lCLEdBQVFuWixLQUFNKzdCLEVBQVdwZSxFQUFNL1gsR0FHeEQsTUFBTzYxQixHQUtWLFFBQVNRLElBQVduOUIsRUFBTW85QixFQUFZejZCLEdBQ3JDLEdBQUlrUSxHQUNId3FCLEVBQ0FoakIsRUFBUSxFQUNSbGEsRUFBU3E4QixHQUFvQnI4QixPQUM3QjBhLEVBQVd2ZCxFQUFPaUwsV0FBV3FTLE9BQVEsaUJBRTdCMGlCLEdBQUt0OUIsT0FFYnM5QixFQUFPLFdBQ04sR0FBS0QsRUFDSixPQUFPLENBRVIsSUFBSUUsR0FBY3BCLElBQVNhLEtBQzFCbGhCLEVBQVl6WSxLQUFLd2UsSUFBSyxFQUFHb2IsRUFBVU8sVUFBWVAsRUFBVVEsU0FBV0YsR0FFcEV0bUIsRUFBTzZFLEVBQVltaEIsRUFBVVEsVUFBWSxFQUN6Q0MsRUFBVSxFQUFJem1CLEVBQ2RvRCxFQUFRLEVBQ1JsYSxFQUFTODhCLEVBQVVVLE9BQU94OUIsTUFFM0IsTUFBZ0JBLEVBQVJrYSxFQUFpQkEsSUFDeEI0aUIsRUFBVVUsT0FBUXRqQixHQUFRdWpCLElBQUtGLEVBS2hDLE9BRkE3aUIsR0FBU3FCLFdBQVlsYyxHQUFRaTlCLEVBQVdTLEVBQVM1aEIsSUFFbEMsRUFBVjRoQixHQUFldjlCLEVBQ1oyYixHQUVQakIsRUFBUy9XLFlBQWE5RCxHQUFRaTlCLEtBQ3ZCLElBR1RBLEVBQVlwaUIsRUFBU2paLFNBQ3BCNUIsS0FBTUEsRUFDTmdtQixNQUFPMW9CLEVBQU9vRixVQUFZMDZCLEdBQzFCUyxLQUFNdmdDLEVBQU9vRixRQUFRLEdBQVFvN0Isa0JBQXFCbjdCLEdBQ2xEbzdCLG1CQUFvQlgsRUFDcEIxSCxnQkFBaUIveUIsRUFDakI2NkIsVUFBV3JCLElBQVNhLEtBQ3BCUyxTQUFVOTZCLEVBQVE4NkIsU0FDbEJFLFVBQ0FmLFlBQWEsU0FBVS9kLEVBQU10YyxHQUM1QixHQUFJbzZCLEdBQVFyL0IsRUFBTzBnQyxNQUFPaCtCLEVBQU1pOUIsRUFBVVksS0FBTWhmLEVBQU10YyxFQUNwRDA2QixFQUFVWSxLQUFLQyxjQUFlamYsSUFBVW9lLEVBQVVZLEtBQUtJLE9BRXpELE9BREFoQixHQUFVVSxPQUFPNS9CLEtBQU00K0IsR0FDaEJBLEdBRVI3YyxLQUFNLFNBQVVvZSxHQUNmLEdBQUk3akIsR0FBUSxFQUdYbGEsRUFBUys5QixFQUFVakIsRUFBVVUsT0FBT3g5QixPQUFTLENBQzlDLElBQUtrOUIsRUFDSixNQUFPcDlCLEtBR1IsS0FEQW85QixHQUFVLEVBQ01sOUIsRUFBUmthLEVBQWlCQSxJQUN4QjRpQixFQUFVVSxPQUFRdGpCLEdBQVF1akIsSUFBSyxFQVVoQyxPQUxLTSxHQUNKcmpCLEVBQVMvVyxZQUFhOUQsR0FBUWk5QixFQUFXaUIsSUFFekNyakIsRUFBU2lmLFdBQVk5NUIsR0FBUWk5QixFQUFXaUIsSUFFbENqK0IsUUFHVCtsQixFQUFRaVgsRUFBVWpYLEtBSW5CLEtBRkFtWSxHQUFZblksRUFBT2lYLEVBQVVZLEtBQUtDLGVBRWxCMzlCLEVBQVJrYSxFQUFpQkEsSUFFeEIsR0FEQXhILEVBQVMycEIsR0FBcUJuaUIsR0FBUW5aLEtBQU0rN0IsRUFBV2o5QixFQUFNZ21CLEVBQU9pWCxFQUFVWSxNQUU3RSxNQUFPaHJCLEVBbUJULE9BZkF2VixHQUFPZ0YsSUFBSzBqQixFQUFPNFcsR0FBYUssR0FFM0IzL0IsRUFBT3NELFdBQVlxOEIsRUFBVVksS0FBS3pxQixRQUN0QzZwQixFQUFVWSxLQUFLenFCLE1BQU1sUyxLQUFNbEIsRUFBTWk5QixHQUdsQzMvQixFQUFPNGlCLEdBQUdrZSxNQUNUOWdDLEVBQU9vRixPQUFRNDZCLEdBQ2R0OUIsS0FBTUEsRUFDTnErQixLQUFNcEIsRUFDTnpkLE1BQU95ZCxFQUFVWSxLQUFLcmUsU0FLakJ5ZCxFQUFVMWhCLFNBQVUwaEIsRUFBVVksS0FBS3RpQixVQUN4QzFaLEtBQU1vN0IsRUFBVVksS0FBS2g4QixLQUFNbzdCLEVBQVVZLEtBQUt2SCxVQUMxQ3hiLEtBQU1taUIsRUFBVVksS0FBSy9pQixNQUNyQkYsT0FBUXFpQixFQUFVWSxLQUFLampCLFFBRzFCLFFBQVN1akIsSUFBWW5ZLEVBQU84WCxHQUMzQixHQUFJempCLEdBQU96WCxFQUFNcTdCLEVBQVFuM0IsRUFBTzZZLENBR2hDLEtBQU10RixJQUFTMkwsR0FlZCxHQWRBcGpCLEVBQU90RixFQUFPb0osVUFBVzJULEdBQ3pCNGpCLEVBQVNILEVBQWVsN0IsR0FDeEJrRSxFQUFRa2YsRUFBTzNMLEdBQ1YvYyxFQUFPNkYsUUFBUzJELEtBQ3BCbTNCLEVBQVNuM0IsRUFBTyxHQUNoQkEsRUFBUWtmLEVBQU8zTCxHQUFVdlQsRUFBTyxJQUc1QnVULElBQVV6WCxJQUNkb2pCLEVBQU9wakIsR0FBU2tFLFFBQ1RrZixHQUFPM0wsSUFHZnNGLEVBQVFyaUIsRUFBT3F6QixTQUFVL3RCLEdBQ3BCK2MsR0FBUyxVQUFZQSxHQUFRLENBQ2pDN1ksRUFBUTZZLEVBQU1tVCxPQUFRaHNCLFNBQ2ZrZixHQUFPcGpCLEVBSWQsS0FBTXlYLElBQVN2VCxHQUNOdVQsSUFBUzJMLEtBQ2hCQSxFQUFPM0wsR0FBVXZULEVBQU91VCxHQUN4QnlqQixFQUFlempCLEdBQVU0akIsT0FJM0JILEdBQWVsN0IsR0FBU3E3QixFQUszQjNnQyxFQUFPNi9CLFVBQVk3L0IsRUFBT29GLE9BQVF5NkIsSUFFakNtQixRQUFTLFNBQVV0WSxFQUFPdGtCLEdBQ3BCcEUsRUFBT3NELFdBQVlvbEIsSUFDdkJ0a0IsRUFBV3NrQixFQUNYQSxHQUFVLE1BRVZBLEVBQVFBLEVBQU1yZCxNQUFNLElBR3JCLElBQUlrVyxHQUNIeEUsRUFBUSxFQUNSbGEsRUFBUzZsQixFQUFNN2xCLE1BRWhCLE1BQWdCQSxFQUFSa2EsRUFBaUJBLElBQ3hCd0UsRUFBT21ILEVBQU8zTCxHQUNkcWlCLEdBQVU3ZCxHQUFTNmQsR0FBVTdkLE9BQzdCNmQsR0FBVTdkLEdBQU8xTixRQUFTelAsSUFJNUI2OEIsVUFBVyxTQUFVNzhCLEVBQVVpcUIsR0FDekJBLEVBQ0o2USxHQUFvQnJyQixRQUFTelAsR0FFN0I4NkIsR0FBb0J6K0IsS0FBTTJELEtBSzdCLFNBQVMrNkIsSUFBa0J6OEIsRUFBTWdtQixFQUFPNlgsR0FFdkMsR0FBSWhmLEdBQU0vWCxFQUFPNHBCLEVBQVFpTSxFQUFPaGQsRUFBTzZlLEVBQ3RDSCxFQUFPcCtCLEtBQ1Bnb0IsS0FDQTNmLEVBQVF0SSxFQUFLc0ksTUFDYmdvQixFQUFTdHdCLEVBQUtRLFVBQVl3dkIsR0FBVWh3QixHQUNwQ3krQixFQUFXeGdCLEVBQVU5YyxJQUFLbkIsRUFBTSxTQUczQjY5QixHQUFLcmUsUUFDVkcsRUFBUXJpQixFQUFPc2lCLFlBQWE1ZixFQUFNLE1BQ1gsTUFBbEIyZixFQUFNK2UsV0FDVi9lLEVBQU0rZSxTQUFXLEVBQ2pCRixFQUFVN2UsRUFBTTdLLE1BQU1rRixLQUN0QjJGLEVBQU03SyxNQUFNa0YsS0FBTyxXQUNaMkYsRUFBTStlLFVBQ1hGLE1BSUg3ZSxFQUFNK2UsV0FFTkwsRUFBS3pqQixPQUFPLFdBR1h5akIsRUFBS3pqQixPQUFPLFdBQ1grRSxFQUFNK2UsV0FDQXBoQyxFQUFPa2lCLE1BQU94ZixFQUFNLE1BQU9HLFFBQ2hDd2YsRUFBTTdLLE1BQU1rRixZQU9PLElBQWxCaGEsRUFBS1EsV0FBb0IsVUFBWXdsQixJQUFTLFNBQVdBLE1BSzdENlgsRUFBS2MsVUFBYXIyQixFQUFNcTJCLFNBQVVyMkIsRUFBTXMyQixVQUFXdDJCLEVBQU11MkIsV0FJbEIsV0FBbEN2aEMsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDVyxTQUFoQzFDLEVBQU80eUIsSUFBS2x3QixFQUFNLFdBRW5Cc0ksRUFBTWluQixRQUFVLGlCQUlic08sRUFBS2MsV0FDVHIyQixFQUFNcTJCLFNBQVcsU0FDakJOLEVBQUt6akIsT0FBTyxXQUNYdFMsRUFBTXEyQixTQUFXZCxFQUFLYyxTQUFVLEdBQ2hDcjJCLEVBQU1zMkIsVUFBWWYsRUFBS2MsU0FBVSxHQUNqQ3IyQixFQUFNdTJCLFVBQVloQixFQUFLYyxTQUFVLEtBTW5DLEtBQU05ZixJQUFRbUgsR0FFYixHQURBbGYsRUFBUWtmLEVBQU9uSCxHQUNWd2QsR0FBU2o4QixLQUFNMEcsR0FBVSxDQUc3QixTQUZPa2YsR0FBT25ILEdBQ2Q2UixFQUFTQSxHQUFvQixXQUFWNXBCLEVBQ2RBLEtBQVl3cEIsRUFBUyxPQUFTLFFBQVcsQ0FHN0MsR0FBZSxTQUFWeHBCLElBQW9CMjNCLEdBQVlBLEVBQVU1ZixLQUFXaGlCLFVBR3pELFFBRkF5ekIsSUFBUyxFQUtYckksRUFBTXBKLEdBQVM0ZixHQUFZQSxFQUFVNWYsSUFBVXZoQixFQUFPZ0wsTUFBT3RJLEVBQU02ZSxHQUlyRSxJQUFNdmhCLEVBQU9xSCxjQUFlc2pCLEdBQVMsQ0FDL0J3VyxFQUNDLFVBQVlBLEtBQ2hCbk8sRUFBU21PLEVBQVNuTyxRQUduQm1PLEVBQVd4Z0IsRUFBVXJXLE9BQVE1SCxFQUFNLGFBSS9CMHdCLElBQ0orTixFQUFTbk8sUUFBVUEsR0FFZkEsRUFDSmh6QixFQUFRMEMsR0FBT3F3QixPQUVmZ08sRUFBS3g4QixLQUFLLFdBQ1R2RSxFQUFRMEMsR0FBT3l3QixTQUdqQjROLEVBQUt4OEIsS0FBSyxXQUNULEdBQUlnZCxFQUVKWixHQUFVNVksT0FBUXJGLEVBQU0sU0FDeEIsS0FBTTZlLElBQVFvSixHQUNiM3FCLEVBQU9nTCxNQUFPdEksRUFBTTZlLEVBQU1vSixFQUFNcEosS0FHbEMsS0FBTUEsSUFBUW9KLEdBQ2IwVSxFQUFRQyxHQUFhdE0sRUFBU21PLEVBQVU1ZixHQUFTLEVBQUdBLEVBQU13ZixHQUVsRHhmLElBQVE0ZixLQUNmQSxFQUFVNWYsR0FBUzhkLEVBQU12cEIsTUFDcEJrZCxJQUNKcU0sRUFBTXA2QixJQUFNbzZCLEVBQU12cEIsTUFDbEJ1cEIsRUFBTXZwQixNQUFpQixVQUFUeUwsR0FBNkIsV0FBVEEsRUFBb0IsRUFBSSxLQU8vRCxRQUFTbWYsSUFBT2grQixFQUFNMkMsRUFBU2tjLEVBQU10YyxFQUFLMDdCLEdBQ3pDLE1BQU8sSUFBSUQsSUFBTXArQixVQUFVZixLQUFNbUIsRUFBTTJDLEVBQVNrYyxFQUFNdGMsRUFBSzA3QixHQUU1RDNnQyxFQUFPMGdDLE1BQVFBLEdBRWZBLEdBQU1wK0IsV0FDTEUsWUFBYWsrQixHQUNibi9CLEtBQU0sU0FBVW1CLEVBQU0yQyxFQUFTa2MsRUFBTXRjLEVBQUswN0IsRUFBUXBCLEdBQ2pENThCLEtBQUtELEtBQU9BLEVBQ1pDLEtBQUs0ZSxLQUFPQSxFQUNaNWUsS0FBS2crQixPQUFTQSxHQUFVLFFBQ3hCaCtCLEtBQUswQyxRQUFVQSxFQUNmMUMsS0FBS21ULE1BQVFuVCxLQUFLaUksSUFBTWpJLEtBQUswTyxNQUM3QjFPLEtBQUtzQyxJQUFNQSxFQUNYdEMsS0FBSzQ4QixLQUFPQSxJQUFVdi9CLEVBQU93ekIsVUFBV2pTLEdBQVMsR0FBSyxPQUV2RGxRLElBQUssV0FDSixHQUFJZ1IsR0FBUXFlLEdBQU0xYixVQUFXcmlCLEtBQUs0ZSxLQUVsQyxPQUFPYyxJQUFTQSxFQUFNeGUsSUFDckJ3ZSxFQUFNeGUsSUFBS2xCLE1BQ1grOUIsR0FBTTFiLFVBQVVnRCxTQUFTbmtCLElBQUtsQixPQUVoQzI5QixJQUFLLFNBQVVGLEdBQ2QsR0FBSW9CLEdBQ0huZixFQUFRcWUsR0FBTTFiLFVBQVdyaUIsS0FBSzRlLEtBb0IvQixPQWpCQzVlLE1BQUtrcEIsSUFBTTJWLEVBRFA3K0IsS0FBSzBDLFFBQVE4NkIsU0FDRW5nQyxFQUFPMmdDLE9BQVFoK0IsS0FBS2crQixRQUN0Q1AsRUFBU3o5QixLQUFLMEMsUUFBUTg2QixTQUFXQyxFQUFTLEVBQUcsRUFBR3o5QixLQUFLMEMsUUFBUTg2QixVQUczQ0MsRUFFcEJ6OUIsS0FBS2lJLEtBQVFqSSxLQUFLc0MsSUFBTXRDLEtBQUttVCxPQUFVMHJCLEVBQVE3K0IsS0FBS21ULE1BRS9DblQsS0FBSzBDLFFBQVFvOEIsTUFDakI5K0IsS0FBSzBDLFFBQVFvOEIsS0FBSzc5QixLQUFNakIsS0FBS0QsS0FBTUMsS0FBS2lJLElBQUtqSSxNQUd6QzBmLEdBQVNBLEVBQU1mLElBQ25CZSxFQUFNZixJQUFLM2UsTUFFWCs5QixHQUFNMWIsVUFBVWdELFNBQVMxRyxJQUFLM2UsTUFFeEJBLE9BSVQrOUIsR0FBTXArQixVQUFVZixLQUFLZSxVQUFZbytCLEdBQU1wK0IsVUFFdkNvK0IsR0FBTTFiLFdBQ0xnRCxVQUNDbmtCLElBQUssU0FBVXc3QixHQUNkLEdBQUk5cEIsRUFFSixPQUFpQyxPQUE1QjhwQixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLE9BQ3BCOGQsRUFBTTM4QixLQUFLc0ksT0FBMkMsTUFBbENxMEIsRUFBTTM4QixLQUFLc0ksTUFBT3EwQixFQUFNOWQsT0FRL0NoTSxFQUFTdlYsRUFBTzR5QixJQUFLeU0sRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxLQUFNLElBRXJDaE0sR0FBcUIsU0FBWEEsRUFBd0JBLEVBQUosR0FUOUI4cEIsRUFBTTM4QixLQUFNMjhCLEVBQU05ZCxPQVczQkQsSUFBSyxTQUFVK2QsR0FHVHIvQixFQUFPNGlCLEdBQUc2ZSxLQUFNcEMsRUFBTTlkLE1BQzFCdmhCLEVBQU80aUIsR0FBRzZlLEtBQU1wQyxFQUFNOWQsTUFBUThkLEdBQ25CQSxFQUFNMzhCLEtBQUtzSSxRQUFnRSxNQUFyRHEwQixFQUFNMzhCLEtBQUtzSSxNQUFPaEwsRUFBT2cwQixTQUFVcUwsRUFBTTlkLFFBQW9CdmhCLEVBQU9xekIsU0FBVWdNLEVBQU05ZCxPQUNySHZoQixFQUFPZ0wsTUFBT3EwQixFQUFNMzhCLEtBQU0yOEIsRUFBTTlkLEtBQU04ZCxFQUFNejBCLElBQU15MEIsRUFBTUUsTUFFeERGLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsTUFBUzhkLEVBQU16MEIsT0FTckM4MUIsR0FBTTFiLFVBQVV5RSxVQUFZaVgsR0FBTTFiLFVBQVVxRSxZQUMzQy9ILElBQUssU0FBVStkLEdBQ1RBLEVBQU0zOEIsS0FBS1EsVUFBWW04QixFQUFNMzhCLEtBQUtlLGFBQ3RDNDdCLEVBQU0zOEIsS0FBTTI4QixFQUFNOWQsTUFBUzhkLEVBQU16MEIsT0FLcEM1SyxFQUFPbUUsTUFBTyxTQUFVLE9BQVEsUUFBVSxTQUFVVSxFQUFHUyxHQUN0RCxHQUFJbzhCLEdBQVExaEMsRUFBT3NCLEdBQUlnRSxFQUN2QnRGLEdBQU9zQixHQUFJZ0UsR0FBUyxTQUFVcThCLEVBQU9oQixFQUFRdjhCLEdBQzVDLE1BQWdCLE9BQVR1OUIsR0FBa0MsaUJBQVZBLEdBQzlCRCxFQUFNbDlCLE1BQU83QixLQUFNOEIsV0FDbkI5QixLQUFLaS9CLFFBQVNDLEdBQU92OEIsR0FBTSxHQUFRcThCLEVBQU9oQixFQUFRdjhCLE1BSXJEcEUsRUFBT3NCLEdBQUc4RCxRQUNUMDhCLE9BQVEsU0FBVUgsRUFBT0ksRUFBSXBCLEVBQVF2OEIsR0FHcEMsTUFBT3pCLE1BQUsrUCxPQUFRZ2dCLElBQVdFLElBQUssVUFBVyxHQUFJRyxPQUdqRDl0QixNQUFNMjhCLFNBQVV0TyxRQUFTeU8sR0FBTUosRUFBT2hCLEVBQVF2OEIsSUFFakR3OUIsUUFBUyxTQUFVcmdCLEVBQU1vZ0IsRUFBT2hCLEVBQVF2OEIsR0FDdkMsR0FBSW9ULEdBQVF4WCxFQUFPcUgsY0FBZWthLEdBQ2pDeWdCLEVBQVNoaUMsRUFBTzJoQyxNQUFPQSxFQUFPaEIsRUFBUXY4QixHQUN0QzY5QixFQUFjLFdBRWIsR0FBSWxCLEdBQU9sQixHQUFXbDlCLEtBQU0zQyxFQUFPb0YsVUFBWW1jLEdBQVF5Z0IsSUFHbER4cUIsR0FBU21KLEVBQVU5YyxJQUFLbEIsS0FBTSxZQUNsQ28rQixFQUFLdmUsTUFBTSxHQUtkLE9BRkN5ZixHQUFZQyxPQUFTRCxFQUVmenFCLEdBQVN3cUIsRUFBTzlmLFNBQVUsRUFDaEN2ZixLQUFLd0IsS0FBTTg5QixHQUNYdC9CLEtBQUt1ZixNQUFPOGYsRUFBTzlmLE1BQU8rZixJQUU1QnpmLEtBQU0sU0FBVTViLEVBQU1vYyxFQUFZNGQsR0FDakMsR0FBSXVCLEdBQVksU0FBVTlmLEdBQ3pCLEdBQUlHLEdBQU9ILEVBQU1HLFdBQ1ZILEdBQU1HLEtBQ2JBLEVBQU1vZSxHQVlQLE9BVHFCLGdCQUFUaDZCLEtBQ1hnNkIsRUFBVTVkLEVBQ1ZBLEVBQWFwYyxFQUNiQSxFQUFPckgsV0FFSHlqQixHQUFjcGMsS0FBUyxHQUMzQmpFLEtBQUt1ZixNQUFPdGIsR0FBUSxTQUdkakUsS0FBS3dCLEtBQUssV0FDaEIsR0FBSWdlLElBQVUsRUFDYnBGLEVBQWdCLE1BQVJuVyxHQUFnQkEsRUFBTyxhQUMvQnc3QixFQUFTcGlDLEVBQU9vaUMsT0FDaEIzNkIsRUFBT2taLEVBQVU5YyxJQUFLbEIsS0FFdkIsSUFBS29hLEVBQ0N0VixFQUFNc1YsSUFBV3RWLEVBQU1zVixHQUFReUYsTUFDbkMyZixFQUFXMTZCLEVBQU1zVixRQUdsQixLQUFNQSxJQUFTdFYsR0FDVEEsRUFBTXNWLElBQVd0VixFQUFNc1YsR0FBUXlGLE1BQVF5YyxHQUFLNzdCLEtBQU0yWixJQUN0RG9sQixFQUFXMTZCLEVBQU1zVixHQUtwQixLQUFNQSxFQUFRcWxCLEVBQU92L0IsT0FBUWthLEtBQ3ZCcWxCLEVBQVFybEIsR0FBUXJhLE9BQVNDLE1BQWlCLE1BQVJpRSxHQUFnQnc3QixFQUFRcmxCLEdBQVFtRixRQUFVdGIsSUFDaEZ3N0IsRUFBUXJsQixHQUFRZ2tCLEtBQUt2ZSxLQUFNb2UsR0FDM0J6ZSxHQUFVLEVBQ1ZpZ0IsRUFBT2o5QixPQUFRNFgsRUFBTyxLQU9uQm9GLElBQVl5ZSxJQUNoQjVnQyxFQUFPbWlCLFFBQVN4ZixLQUFNaUUsTUFJekJzN0IsT0FBUSxTQUFVdDdCLEdBSWpCLE1BSEtBLE1BQVMsSUFDYkEsRUFBT0EsR0FBUSxNQUVUakUsS0FBS3dCLEtBQUssV0FDaEIsR0FBSTRZLEdBQ0h0VixFQUFPa1osRUFBVTljLElBQUtsQixNQUN0QnVmLEVBQVF6YSxFQUFNYixFQUFPLFNBQ3JCeWIsRUFBUTVhLEVBQU1iLEVBQU8sY0FDckJ3N0IsRUFBU3BpQyxFQUFPb2lDLE9BQ2hCdi9CLEVBQVNxZixFQUFRQSxFQUFNcmYsT0FBUyxDQWFqQyxLQVZBNEUsRUFBS3k2QixRQUFTLEVBR2RsaUMsRUFBT2tpQixNQUFPdmYsS0FBTWlFLE1BRWZ5YixHQUFTQSxFQUFNRyxNQUNuQkgsRUFBTUcsS0FBSzVlLEtBQU1qQixNQUFNLEdBSWxCb2EsRUFBUXFsQixFQUFPdi9CLE9BQVFrYSxLQUN2QnFsQixFQUFRcmxCLEdBQVFyYSxPQUFTQyxNQUFReS9CLEVBQVFybEIsR0FBUW1GLFFBQVV0YixJQUMvRHc3QixFQUFRcmxCLEdBQVFna0IsS0FBS3ZlLE1BQU0sR0FDM0I0ZixFQUFPajlCLE9BQVE0WCxFQUFPLEdBS3hCLEtBQU1BLEVBQVEsRUFBV2xhLEVBQVJrYSxFQUFnQkEsSUFDM0JtRixFQUFPbkYsSUFBV21GLEVBQU9uRixHQUFRbWxCLFFBQ3JDaGdCLEVBQU9uRixHQUFRbWxCLE9BQU90K0IsS0FBTWpCLFlBS3ZCOEUsR0FBS3k2QixXQU1mLFNBQVNMLElBQU9qN0IsRUFBTXk3QixHQUNyQixHQUFJdlosR0FDSDdYLEdBQVVxeEIsT0FBUTE3QixHQUNsQi9CLEVBQUksQ0FLTCxLQURBdzlCLEVBQWVBLEVBQWMsRUFBSSxFQUN0QixFQUFKeDlCLEVBQVFBLEdBQUssRUFBSXc5QixFQUN2QnZaLEVBQVF1SixHQUFXeHRCLEdBQ25Cb00sRUFBTyxTQUFXNlgsR0FBVTdYLEVBQU8sVUFBWTZYLEdBQVVsaUIsQ0FPMUQsT0FKS3k3QixLQUNKcHhCLEVBQU1xaUIsUUFBVXJpQixFQUFNdVAsTUFBUTVaLEdBR3hCcUssRUFJUmpSLEVBQU9tRSxNQUNObytCLFVBQVdWLEdBQU0sUUFDakJXLFFBQVNYLEdBQU0sUUFDZlksWUFBYVosR0FBTSxVQUNuQmEsUUFBVXBQLFFBQVMsUUFDbkJxUCxTQUFXclAsUUFBUyxRQUNwQnNQLFlBQWN0UCxRQUFTLFdBQ3JCLFNBQVVodUIsRUFBTW9qQixHQUNsQjFvQixFQUFPc0IsR0FBSWdFLEdBQVMsU0FBVXE4QixFQUFPaEIsRUFBUXY4QixHQUM1QyxNQUFPekIsTUFBS2kvQixRQUFTbFosRUFBT2laLEVBQU9oQixFQUFRdjhCLE1BSTdDcEUsRUFBTzJoQyxNQUFRLFNBQVVBLEVBQU9oQixFQUFRci9CLEdBQ3ZDLEdBQUkyZCxHQUFNMGlCLEdBQTBCLGdCQUFWQSxHQUFxQjNoQyxFQUFPb0YsVUFBWXU4QixJQUNqRTNJLFNBQVUxM0IsSUFBT0EsR0FBTXEvQixHQUN0QjNnQyxFQUFPc0QsV0FBWXErQixJQUFXQSxFQUMvQnhCLFNBQVV3QixFQUNWaEIsT0FBUXIvQixHQUFNcS9CLEdBQVVBLElBQVczZ0MsRUFBT3NELFdBQVlxOUIsSUFBWUEsRUF3Qm5FLE9BckJBMWhCLEdBQUlraEIsU0FBV25nQyxFQUFPNGlCLEdBQUdsYyxJQUFNLEVBQTRCLGdCQUFqQnVZLEdBQUlraEIsU0FBd0JsaEIsRUFBSWtoQixTQUN6RWxoQixFQUFJa2hCLFdBQVluZ0MsR0FBTzRpQixHQUFHQyxPQUFTN2lCLEVBQU80aUIsR0FBR0MsT0FBUTVELEVBQUlraEIsVUFBYW5nQyxFQUFPNGlCLEdBQUdDLE9BQU9tRixVQUd0RSxNQUFiL0ksRUFBSWlELE9BQWlCakQsRUFBSWlELFNBQVUsS0FDdkNqRCxFQUFJaUQsTUFBUSxNQUliakQsRUFBSWxVLElBQU1rVSxFQUFJK1osU0FFZC9aLEVBQUkrWixTQUFXLFdBQ1RoNUIsRUFBT3NELFdBQVkyYixFQUFJbFUsTUFDM0JrVSxFQUFJbFUsSUFBSW5ILEtBQU1qQixNQUdWc2MsRUFBSWlELE9BQ1JsaUIsRUFBT21pQixRQUFTeGYsS0FBTXNjLEVBQUlpRCxRQUlyQmpELEdBR1JqZixFQUFPMmdDLFFBQ05rQyxPQUFRLFNBQVVDLEdBQ2pCLE1BQU9BLElBRVJDLE1BQU8sU0FBVUQsR0FDaEIsTUFBTyxHQUFNLzhCLEtBQUtpOUIsSUFBS0YsRUFBRS84QixLQUFLazlCLElBQU8sSUFJdkNqakMsRUFBT29pQyxVQUNQcGlDLEVBQU80aUIsR0FBSzhkLEdBQU1wK0IsVUFBVWYsS0FDNUJ2QixFQUFPNGlCLEdBQUdvZCxLQUFPLFdBQ2hCLEdBQUljLEdBQ0hzQixFQUFTcGlDLEVBQU9vaUMsT0FDaEJ2OUIsRUFBSSxDQUlMLEtBRkFnNkIsR0FBUTcrQixFQUFPNEssTUFFSHczQixFQUFPdi9CLE9BQVhnQyxFQUFtQkEsSUFDMUJpOEIsRUFBUXNCLEVBQVF2OUIsR0FFVmk4QixLQUFXc0IsRUFBUXY5QixLQUFRaThCLEdBQ2hDc0IsRUFBT2o5QixPQUFRTixJQUFLLEVBSWhCdTlCLEdBQU92L0IsUUFDWjdDLEVBQU80aUIsR0FBR0osT0FFWHFjLEdBQVF0L0IsV0FHVFMsRUFBTzRpQixHQUFHa2UsTUFBUSxTQUFVQSxHQUN0QkEsS0FBVzlnQyxFQUFPb2lDLE9BQU8zaEMsS0FBTXFnQyxJQUNuQzlnQyxFQUFPNGlCLEdBQUc5TSxTQUlaOVYsRUFBTzRpQixHQUFHc2dCLFNBQVcsR0FFckJsakMsRUFBTzRpQixHQUFHOU0sTUFBUSxXQUNYZ3BCLEtBQ0xBLEdBQVVxRSxZQUFhbmpDLEVBQU80aUIsR0FBR29kLEtBQU1oZ0MsRUFBTzRpQixHQUFHc2dCLFlBSW5EbGpDLEVBQU80aUIsR0FBR0osS0FBTyxXQUNoQjRnQixjQUFldEUsSUFDZkEsR0FBVSxNQUdYOStCLEVBQU80aUIsR0FBR0MsUUFDVHdnQixLQUFNLElBQ05DLEtBQU0sSUFFTnRiLFNBQVUsS0FJWGhvQixFQUFPNGlCLEdBQUc2ZSxRQUVMemhDLEVBQU84VCxNQUFROVQsRUFBTzhULEtBQUt3RSxVQUMvQnRZLEVBQU84VCxLQUFLd0UsUUFBUWlyQixTQUFXLFNBQVU3Z0MsR0FDeEMsTUFBTzFDLEdBQU9nSyxLQUFLaEssRUFBT29pQyxPQUFRLFNBQVU5Z0MsR0FDM0MsTUFBT29CLEtBQVNwQixFQUFHb0IsT0FDakJHLFNBR0w3QyxFQUFPc0IsR0FBR2tpQyxPQUFTLFNBQVVuK0IsR0FDNUIsR0FBS1osVUFBVTVCLE9BQ2QsTUFBT3dDLEtBQVk5RixVQUNsQm9ELEtBQ0FBLEtBQUt3QixLQUFLLFNBQVVVLEdBQ25CN0UsRUFBT3dqQyxPQUFPQyxVQUFXOWdDLEtBQU0wQyxFQUFTUixJQUkzQyxJQUFJaEYsR0FBUzZqQyxFQUNaaGhDLEVBQU9DLEtBQU0sR0FDYmdoQyxHQUFReHhCLElBQUssRUFBR3l4QixLQUFNLEdBQ3RCN3hCLEVBQU1yUCxHQUFRQSxFQUFLUyxhQUVwQixJQUFNNE8sRUFPTixNQUhBbFMsR0FBVWtTLEVBQUlqUyxnQkFHUkUsRUFBT21NLFNBQVV0TSxFQUFTNkMsVUFNcEJBLEdBQUttaEMsd0JBQTBCbmtDLElBQzFDaWtDLEVBQU1qaEMsRUFBS21oQyx5QkFFWkgsRUFBTUksR0FBVy94QixJQUVoQkksSUFBS3d4QixFQUFJeHhCLElBQU11eEIsRUFBSUssWUFBY2xrQyxFQUFRNnBCLFVBQ3pDa2EsS0FBTUQsRUFBSUMsS0FBT0YsRUFBSU0sWUFBY25rQyxFQUFReXBCLGFBWHBDcWEsR0FlVDNqQyxFQUFPd2pDLFFBRU5DLFVBQVcsU0FBVS9nQyxFQUFNMkMsRUFBU1IsR0FDbkMsR0FBSW8vQixHQUFhQyxFQUFTQyxFQUFXQyxFQUFRQyxFQUFXQyxFQUFZQyxFQUNuRXhTLEVBQVcveEIsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFDN0I4aEMsRUFBVXhrQyxFQUFRMEMsR0FDbEJnbUIsSUFHaUIsWUFBYnFKLElBQ0pydkIsRUFBS3NJLE1BQU0rbUIsU0FBVyxZQUd2QnNTLEVBQVlHLEVBQVFoQixTQUNwQlcsRUFBWW5rQyxFQUFPNHlCLElBQUtsd0IsRUFBTSxPQUM5QjRoQyxFQUFhdGtDLEVBQU80eUIsSUFBS2x3QixFQUFNLFFBQy9CNmhDLEdBQW1DLGFBQWJ4UyxHQUF3QyxVQUFiQSxLQUE0Qm9TLEVBQVlHLEdBQWF6akMsUUFBUSxRQUFVLEdBR25IMGpDLEdBQ0pOLEVBQWNPLEVBQVF6UyxXQUN0QnFTLEVBQVNILEVBQVk5eEIsSUFDckIreEIsRUFBVUQsRUFBWUwsT0FHdEJRLEVBQVNuOUIsV0FBWWs5QixJQUFlLEVBQ3BDRCxFQUFVajlCLFdBQVlxOUIsSUFBZ0IsR0FHbEN0a0MsRUFBT3NELFdBQVkrQixLQUN2QkEsRUFBVUEsRUFBUXpCLEtBQU1sQixFQUFNbUMsRUFBR3cvQixJQUdkLE1BQWZoL0IsRUFBUThNLE1BQ1p1VyxFQUFNdlcsSUFBUTlNLEVBQVE4TSxJQUFNa3lCLEVBQVVseUIsSUFBUWl5QixHQUUxQixNQUFoQi8rQixFQUFRdStCLE9BQ1psYixFQUFNa2IsS0FBU3YrQixFQUFRdStCLEtBQU9TLEVBQVVULEtBQVNNLEdBRzdDLFNBQVc3K0IsR0FDZkEsRUFBUW8vQixNQUFNN2dDLEtBQU1sQixFQUFNZ21CLEdBRzFCOGIsRUFBUTVSLElBQUtsSyxLQU1oQjFvQixFQUFPc0IsR0FBRzhELFFBRVQyc0IsU0FBVSxXQUNULEdBQU1wdkIsS0FBTSxHQUFaLENBSUEsR0FBSStoQyxHQUFjbEIsRUFDakI5Z0MsRUFBT0MsS0FBTSxHQUNiZ2lDLEdBQWlCeHlCLElBQUssRUFBR3l4QixLQUFNLEVBdUJoQyxPQXBCd0MsVUFBbkM1akMsRUFBTzR5QixJQUFLbHdCLEVBQU0sWUFFdEI4Z0MsRUFBUzlnQyxFQUFLbWhDLHlCQUlkYSxFQUFlL2hDLEtBQUsraEMsZUFHcEJsQixFQUFTN2dDLEtBQUs2Z0MsU0FDUnhqQyxFQUFPc0osU0FBVW83QixFQUFjLEdBQUssVUFDekNDLEVBQWVELEVBQWFsQixVQUk3Qm1CLEVBQWF4eUIsS0FBT25TLEVBQU80eUIsSUFBSzhSLEVBQWMsR0FBSyxrQkFBa0IsR0FDckVDLEVBQWFmLE1BQVE1akMsRUFBTzR5QixJQUFLOFIsRUFBYyxHQUFLLG1CQUFtQixLQUt2RXZ5QixJQUFLcXhCLEVBQU9yeEIsSUFBTXd5QixFQUFheHlCLElBQU1uUyxFQUFPNHlCLElBQUtsd0IsRUFBTSxhQUFhLEdBQ3BFa2hDLEtBQU1KLEVBQU9JLEtBQU9lLEVBQWFmLEtBQU81akMsRUFBTzR5QixJQUFLbHdCLEVBQU0sY0FBYyxNQUkxRWdpQyxhQUFjLFdBQ2IsTUFBTy9oQyxNQUFLcUMsSUFBSSxXQUNmLEdBQUkwL0IsR0FBZS9oQyxLQUFLK2hDLGNBQWdCN2tDLENBRXhDLE9BQVE2a0MsSUFBbUIxa0MsRUFBT3NKLFNBQVVvN0IsRUFBYyxTQUFzRCxXQUExQzFrQyxFQUFPNHlCLElBQUs4UixFQUFjLFlBQy9GQSxFQUFlQSxFQUFhQSxZQUc3QixPQUFPQSxJQUFnQjdrQyxPQU8xQkcsRUFBT21FLE1BQU9rbEIsV0FBWSxjQUFlSSxVQUFXLGVBQWdCLFNBQVVrUyxFQUFRcGEsR0FDckYsR0FBSXBQLEdBQU0sZ0JBQWtCb1AsQ0FFNUJ2aEIsR0FBT3NCLEdBQUlxNkIsR0FBVyxTQUFVM25CLEdBQy9CLE1BQU9oVSxHQUFPc0ssT0FBUTNILEtBQU0sU0FBVUQsRUFBTWk1QixFQUFRM25CLEdBQ25ELEdBQUkwdkIsR0FBTUksR0FBV3BoQyxFQUVyQixPQUFLc1IsS0FBUXpVLFVBQ0xta0MsRUFBTUEsRUFBS25pQixHQUFTN2UsRUFBTWk1QixJQUc3QitILEVBQ0pBLEVBQUlrQixTQUNGenlCLEVBQVk3UyxFQUFPMGtDLFlBQWJod0IsRUFDUDdCLEVBQU02QixFQUFNMVUsRUFBT3lrQyxhQUlwQnJoQyxFQUFNaTVCLEdBQVczbkIsRUFQbEIsWUFTRTJuQixFQUFRM25CLEVBQUt2UCxVQUFVNUIsT0FBUSxRQUlwQyxTQUFTaWhDLElBQVdwaEMsR0FDbkIsTUFBTzFDLEdBQU84RyxTQUFVcEUsR0FBU0EsRUFBeUIsSUFBbEJBLEVBQUtRLFVBQWtCUixFQUFLdVAsWUFHckVqUyxFQUFPbUUsTUFBUTBnQyxPQUFRLFNBQVVDLE1BQU8sU0FBVyxTQUFVeC9CLEVBQU1zQixHQUNsRTVHLEVBQU9tRSxNQUFRaXhCLFFBQVMsUUFBVTl2QixFQUFNb3JCLFFBQVM5cEIsRUFBTSxHQUFJLFFBQVV0QixHQUFRLFNBQVV5L0IsRUFBY0MsR0FFcEdobEMsRUFBT3NCLEdBQUkwakMsR0FBYSxTQUFVN1AsRUFBUTNyQixHQUN6QyxHQUFJZ0IsR0FBWS9GLFVBQVU1QixTQUFZa2lDLEdBQWtDLGlCQUFYNVAsSUFDNURqQixFQUFRNlEsSUFBa0I1UCxLQUFXLEdBQVEzckIsS0FBVSxFQUFPLFNBQVcsU0FFMUUsT0FBT3hKLEdBQU9zSyxPQUFRM0gsS0FBTSxTQUFVRCxFQUFNa0UsRUFBTTRDLEdBQ2pELEdBQUl1SSxFQUVKLE9BQUsvUixHQUFPOEcsU0FBVXBFLEdBSWRBLEVBQUs5QyxTQUFTRSxnQkFBaUIsU0FBV3dGLEdBSTNCLElBQWxCNUMsRUFBS1EsVUFDVDZPLEVBQU1yUCxFQUFLNUMsZ0JBSUppRyxLQUFLd2UsSUFDWDdoQixFQUFLd2QsS0FBTSxTQUFXNWEsR0FBUXlNLEVBQUssU0FBV3pNLEdBQzlDNUMsRUFBS3dkLEtBQU0sU0FBVzVhLEdBQVF5TSxFQUFLLFNBQVd6TSxHQUM5Q3lNLEVBQUssU0FBV3pNLEtBSVhrRSxJQUFVakssVUFFaEJTLEVBQU80eUIsSUFBS2x3QixFQUFNa0UsRUFBTXN0QixHQUd4QmwwQixFQUFPZ0wsTUFBT3RJLEVBQU1rRSxFQUFNNEMsRUFBTzBxQixJQUNoQ3R0QixFQUFNNEQsRUFBWTJxQixFQUFTNTFCLFVBQVdpTCxFQUFXLFdBUXZEeEssRUFBT3NCLEdBQUcyakMsS0FBTyxXQUNoQixNQUFPdGlDLE1BQUtFLFFBR2I3QyxFQUFPc0IsR0FBRzRqQyxRQUFVbGxDLEVBQU9zQixHQUFHeXFCLFFBR1AsZ0JBQVhvWixTQUF1QkEsUUFBb0MsZ0JBQW5CQSxRQUFPQyxRQUsxREQsT0FBT0MsUUFBVXBsQyxFQVNNLGtCQUFYcWxDLFNBQXlCQSxPQUFPQyxLQUMzQ0QsT0FBUSxZQUFjLFdBQWMsTUFBT3JsQyxLQU10QixnQkFBWFYsSUFBa0QsZ0JBQXBCQSxHQUFPTSxXQUNoRE4sRUFBT1UsT0FBU1YsRUFBT1ksRUFBSUYsS0FHeEJWIn0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTYzOTZiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzCkBAIC0wLDAgKzEsNyBAQAorLyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTE1CisqIGh0dHA6Ly9qcXVlcnl1aS5jb20KKyogSW5jbHVkZXM6IGNvcmUuanMsIGRhdGVwaWNrZXIuanMKKyogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCisKKyhmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJdLGUpOmUoalF1ZXJ5KX0pKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxzKXt2YXIgYSxuLHIsbz10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09bz8oYT10LnBhcmVudE5vZGUsbj1hLm5hbWUsdC5ocmVmJiZuJiYibWFwIj09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8ocj1lKCJpbWdbdXNlbWFwPScjIituKyInXSIpWzBdLCEhciYmaShyKSk6ITEpOigvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KG8pPyF0LmRpc2FibGVkOiJhIj09PW8/dC5ocmVmfHxzOnMpJiZpKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuZXhwci5maWx0ZXJzLnZpc2libGUodCkmJiFlKHQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImhpZGRlbiI9PT1lLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iil9KS5sZW5ndGh9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsaTtlLmxlbmd0aCYmZVswXSE9PWRvY3VtZW50Oyl7aWYodD1lLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PXR8fCJyZWxhdGl2ZSI9PT10fHwiZml4ZWQiPT09dCkmJihpPXBhcnNlSW50KGUuY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7ZT1lLnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIGEoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWwuZW49ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWxbImVuLVVTIl09ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1uKGUoIjxkaXYgaWQ9JyIrdGhpcy5fbWFpbkRpdklkKyInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpfWZ1bmN0aW9uIG4odCl7dmFyIGk9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIHQuZGVsZWdhdGUoaSwibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmRlbGVnYXRlKGksIm1vdXNlb3ZlciIscil9ZnVuY3Rpb24gcigpe2UuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoaC5pbmxpbmU/aC5kcERpdi5wYXJlbnQoKVswXTpoLmlucHV0WzBdKXx8KGUodGhpcykucGFyZW50cygiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKS5maW5kKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9ZnVuY3Rpb24gbyh0LGkpe2UuZXh0ZW5kKHQsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKHRbc109aVtzXSk7cmV0dXJuIHR9ZS51aT1lLnVpfHx7fSxlLmV4dGVuZChlLnVpLHt2ZXJzaW9uOiIxLjExLjQiLGtleUNvZGU6e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtzY3JvbGxQYXJlbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5jc3MoInBvc2l0aW9uIikscz0iYWJzb2x1dGUiPT09aSxhPXQ/LyhhdXRvfHNjcm9sbHxoaWRkZW4pLzovKGF1dG98c2Nyb2xsKS8sbj10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3JldHVybiBzJiYic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyExOmEudGVzdCh0LmNzcygib3ZlcmZsb3ciKSt0LmNzcygib3ZlcmZsb3cteSIpK3QuY3NzKCJvdmVyZmxvdy14IikpfSkuZXEoMCk7cmV0dXJuImZpeGVkIiE9PWkmJm4ubGVuZ3RoP246ZSh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KX0sdW5pcXVlSWQ6ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkfHwodGhpcy5pZD0idWktaWQtIisgKytlKX0pfX0oKSxyZW1vdmVVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsvXnVpLWlkLVxkKyQvLnRlc3QodGhpcy5pZCkmJmUodGhpcykucmVtb3ZlQXR0cigiaWQiKX0pfX0pLGUuZXh0ZW5kKGUuZXhwclsiOiJdLHtkYXRhOmUuZXhwci5jcmVhdGVQc2V1ZG8/ZS5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISFlLmRhdGEoaSx0KX19KTpmdW5jdGlvbih0LGkscyl7cmV0dXJuISFlLmRhdGEodCxzWzNdKX0sZm9jdXNhYmxlOmZ1bmN0aW9uKGkpe3JldHVybiB0KGksIWlzTmFOKGUuYXR0cihpLCJ0YWJpbmRleCIpKSl9LHRhYmJhYmxlOmZ1bmN0aW9uKGkpe3ZhciBzPWUuYXR0cihpLCJ0YWJpbmRleCIpLGE9aXNOYU4ocyk7cmV0dXJuKGF8fHM+PTApJiZ0KGksIWEpfX0pLGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5fHxlLmVhY2goWyJXaWR0aCIsIkhlaWdodCJdLGZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gcyh0LGkscyxuKXtyZXR1cm4gZS5lYWNoKGEsZnVuY3Rpb24oKXtpLT1wYXJzZUZsb2F0KGUuY3NzKHQsInBhZGRpbmciK3RoaXMpKXx8MCxzJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwKSxuJiYoaS09cGFyc2VGbG9hdChlLmNzcyh0LCJtYXJnaW4iK3RoaXMpKXx8MCl9KSxpfXZhciBhPSJXaWR0aCI9PT1pP1siTGVmdCIsIlJpZ2h0Il06WyJUb3AiLCJCb3R0b20iXSxuPWkudG9Mb3dlckNhc2UoKSxyPXtpbm5lcldpZHRoOmUuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDplLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6ZS5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmUuZm4ub3V0ZXJIZWlnaHR9O2UuZm5bImlubmVyIitpXT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9yWyJpbm5lciIraV0uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhuLHModGhpcyx0KSsicHgiKX0pfSxlLmZuWyJvdXRlciIraV09ZnVuY3Rpb24odCxhKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQ/clsib3V0ZXIiK2ldLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhuLHModGhpcyx0LCEwLGEpKyJweCIpfSl9fSksZS5mbi5hZGRCYWNrfHwoZS5mbi5hZGRCYWNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX0pLGUoIjxhPiIpLmRhdGEoImEtYiIsImEiKS5yZW1vdmVEYXRhKCJhLWIiKS5kYXRhKCJhLWIiKSYmKGUuZm4ucmVtb3ZlRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jYWxsKHRoaXMsZS5jYW1lbENhc2UoaSkpOnQuY2FsbCh0aGlzKX19KGUuZm4ucmVtb3ZlRGF0YSkpLGUudWkuaWU9ISEvbXNpZSBbXHcuXSsvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSxlLmZuLmV4dGVuZCh7Zm9jdXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2UodCkuZm9jdXMoKSxzJiZzLmNhbGwodCl9LGkpfSk6dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fShlLmZuLmZvY3VzKSxkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9Im9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik/InNlbGVjdHN0YXJ0IjoibW91c2Vkb3duIjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKGUrIi51aS1kaXNhYmxlU2VsZWN0aW9uIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KX19KCksZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCIudWktZGlzYWJsZVNlbGVjdGlvbiIpfSx6SW5kZXg6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsdCk7aWYodGhpcy5sZW5ndGgpZm9yKHZhciBpLHMsYT1lKHRoaXNbMF0pO2EubGVuZ3RoJiZhWzBdIT09ZG9jdW1lbnQ7KXtpZihpPWEuY3NzKCJwb3NpdGlvbiIpLCgiYWJzb2x1dGUiPT09aXx8InJlbGF0aXZlIj09PWl8fCJmaXhlZCI9PT1pKSYmKHM9cGFyc2VJbnQoYS5jc3MoInpJbmRleCIpLDEwKSwhaXNOYU4ocykmJjAhPT1zKSlyZXR1cm4gczthPWEucGFyZW50KCl9cmV0dXJuIDB9fSksZS51aS5wbHVnaW49e2FkZDpmdW5jdGlvbih0LGkscyl7dmFyIGEsbj1lLnVpW3RdLnByb3RvdHlwZTtmb3IoYSBpbiBzKW4ucGx1Z2luc1thXT1uLnBsdWdpbnNbYV18fFtdLG4ucGx1Z2luc1thXS5wdXNoKFtpLHNbYV1dKX0sY2FsbDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgYSxuPWUucGx1Z2luc1t0XTtpZihuJiYoc3x8ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUmJjExIT09ZS5lbGVtZW50WzBdLnBhcmVudE5vZGUubm9kZVR5cGUpKWZvcihhPTA7bi5sZW5ndGg+YTthKyspZS5vcHRpb25zW25bYV1bMF1dJiZuW2FdWzFdLmFwcGx5KGUuZWxlbWVudCxpKX19LGUuZXh0ZW5kKGUudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246IjEuMTEuNCJ9fSk7dmFyIGg7ZS5leHRlbmQoYS5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZToiaGFzRGF0ZXBpY2tlciIsbWF4Um93czo0LF93aWRnZXREYXRlcGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHBEaXZ9LHNldERlZmF1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMuX2RlZmF1bHRzLGV8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzLGEsbjtzPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJkaXYiPT09c3x8InNwYW4iPT09cyx0LmlkfHwodGhpcy51dWlkKz0xLHQuaWQ9ImRwIit0aGlzLnV1aWQpLG49dGhpcy5fbmV3SW5zdChlKHQpLGEpLG4uc2V0dGluZ3M9ZS5leHRlbmQoe30saXx8e30pLCJpbnB1dCI9PT1zP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHQsbik6YSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0LG4pfSxfbmV3SW5zdDpmdW5jdGlvbih0LGkpe3ZhciBzPXRbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1wtXSkvZywiXFxcXCQxIik7cmV0dXJue2lkOnMsaW5wdXQ6dCxzZWxlY3RlZERheTowLHNlbGVjdGVkTW9udGg6MCxzZWxlY3RlZFllYXI6MCxkcmF3TW9udGg6MCxkcmF3WWVhcjowLGlubGluZTppLGRwRGl2Omk/bihlKCI8ZGl2IGNsYXNzPSciK3RoaXMuX2lubGluZUNsYXNzKyIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtpLmFwcGVuZD1lKFtdKSxpLnRyaWdnZXI9ZShbXSkscy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhzLGkpLHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmtleWRvd24odGhpcy5fZG9LZXlEb3duKS5rZXlwcmVzcyh0aGlzLl9kb0tleVByZXNzKS5rZXl1cCh0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZShpKSxlLmRhdGEodCwiZGF0ZXBpY2tlciIsaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCkpfSxfYXR0YWNobWVudHM6ZnVuY3Rpb24odCxpKXt2YXIgcyxhLG4scj10aGlzLl9nZXQoaSwiYXBwZW5kVGV4dCIpLG89dGhpcy5fZ2V0KGksImlzUlRMIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLHImJihpLmFwcGVuZD1lKCI8c3BhbiBjbGFzcz0nIit0aGlzLl9hcHBlbmRDbGFzcysiJz4iK3IrIjwvc3Bhbj4iKSx0W28/ImJlZm9yZSI6ImFmdGVyIl0oaS5hcHBlbmQpKSx0LnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxzPXRoaXMuX2dldChpLCJzaG93T24iKSwoImZvY3VzIj09PXN8fCJib3RoIj09PXMpJiZ0LmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKSwoImJ1dHRvbiI9PT1zfHwiYm90aCI9PT1zKSYmKGE9dGhpcy5fZ2V0KGksImJ1dHRvblRleHQiKSxuPXRoaXMuX2dldChpLCJidXR0b25JbWFnZSIpLGkudHJpZ2dlcj1lKHRoaXMuX2dldChpLCJidXR0b25JbWFnZU9ubHkiKT9lKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpuLGFsdDphLHRpdGxlOmF9KTplKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG4/ZSgiPGltZy8+IikuYXR0cih7c3JjOm4sYWx0OmEsdGl0bGU6YX0pOmEpKSx0W28/ImJlZm9yZSI6ImFmdGVyIl0oaS50cmlnZ2VyKSxpLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT10WzBdP2UuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTplLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXRbMF0/KGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxlLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pKTplLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fZ2V0KGUsImF1dG9TaXplIikmJiFlLmlubGluZSl7dmFyIHQsaSxzLGEsbj1uZXcgRGF0ZSgyMDA5LDExLDIwKSxyPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iik7ci5tYXRjaCgvW0RNXS8pJiYodD1mdW5jdGlvbihlKXtmb3IoaT0wLHM9MCxhPTA7ZS5sZW5ndGg+YTthKyspZVthXS5sZW5ndGg+aSYmKGk9ZVthXS5sZW5ndGgscz1hKTtyZXR1cm4gc30sbi5zZXRNb250aCh0KHRoaXMuX2dldChlLHIubWF0Y2goL01NLyk/Im1vbnRoTmFtZXMiOiJtb250aE5hbWVzU2hvcnQiKSkpLG4uc2V0RGF0ZSh0KHRoaXMuX2dldChlLHIubWF0Y2goL0RELyk/ImRheU5hbWVzIjoiZGF5TmFtZXNTaG9ydCIpKSsyMC1uLmdldERheSgpKSksZS5pbnB1dC5hdHRyKCJzaXplIix0aGlzLl9mb3JtYXREYXRlKGUsbikubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0KTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSxlLmRhdGEodCwiZGF0ZXBpY2tlciIsaSksdGhpcy5fc2V0RGF0ZShpLHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCEwKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSxpLmRwRGl2LmNzcygiZGlzcGxheSIsImJsb2NrIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkscyxhLG4pe3ZhciByLGgsbCx1LGQsYz10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBjfHwodGhpcy51dWlkKz0xLHI9ImRwIit0aGlzLnV1aWQsdGhpcy5fZGlhbG9nSW5wdXQ9ZSgiPGlucHV0IHR5cGU9J3RleHQnIGlkPSciK3IrIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+IiksdGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlzLl9kb0tleURvd24pLGUoImJvZHkiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLGM9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSxjLnNldHRpbmdzPXt9LGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwiZGF0ZXBpY2tlciIsYykpLG8oYy5zZXR0aW5ncyxhfHx7fSksaT1pJiZpLmNvbnN0cnVjdG9yPT09RGF0ZT90aGlzLl9mb3JtYXREYXRlKGMsaSk6aSx0aGlzLl9kaWFsb2dJbnB1dC52YWwoaSksdGhpcy5fcG9zPW4/bi5sZW5ndGg/bjpbbi5wYWdlWCxuLnBhZ2VZXTpudWxsLHRoaXMuX3Bvc3x8KGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsZD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCx0aGlzLl9wb3M9W2gvMi0xMDArdSxsLzItMTUwK2RdKSx0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLGMuc2V0dGluZ3Mub25TZWxlY3Q9cyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksZS5ibG9ja1VJJiZlLmJsb2NrVUkodGhpcy5kcERpdiksZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLCJkYXRlcGlja2VyIixjKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscz1lKHQpLGE9ZS5kYXRhKHQsImRhdGVwaWNrZXIiKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGUucmVtb3ZlRGF0YSh0LCJkYXRlcGlja2VyIiksImlucHV0Ij09PWk/KGEuYXBwZW5kLnJlbW92ZSgpLGEudHJpZ2dlci5yZW1vdmUoKSxzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlcikudW5iaW5kKCJrZXlkb3duIix0aGlzLl9kb0tleURvd24pLnVuYmluZCgia2V5cHJlc3MiLHRoaXMuX2RvS2V5UHJlc3MpLnVuYmluZCgia2V5dXAiLHRoaXMuX2RvS2V5VXApKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmcy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKSxoPT09YSYmKGg9bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzLGE9ZSh0KSxuPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7YS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwiaW5wdXQiPT09aT8odC5kaXNhYmxlZD0hMSxuLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIxLjAiLGN1cnNvcjoiIn0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9YS5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCExKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pKX0sX2Rpc2FibGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHMsYT1lKHQpLG49ZS5kYXRhKHQsImRhdGVwaWNrZXIiKTthLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCJpbnB1dCI9PT1pPyh0LmRpc2FibGVkPSEwLG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjAuNSIsY3Vyc29yOiJkZWZhdWx0In0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9YS5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCEwKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9ZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P251bGw6ZX0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09dCl9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMTtmb3IodmFyIHQ9MDt0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg+dDt0KyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbdF09PT1lKXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGUuZGF0YSh0LCJkYXRlcGlja2VyIil9Y2F0Y2goaSl7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBhLG4scixoLGw9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgaT8iZGVmYXVsdHMiPT09aT9lLmV4dGVuZCh7fSxlLmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpsPyJhbGwiPT09aT9lLmV4dGVuZCh7fSxsLnNldHRpbmdzKTp0aGlzLl9nZXQobCxpKTpudWxsOihhPWl8fHt9LCJzdHJpbmciPT10eXBlb2YgaSYmKGE9e30sYVtpXT1zKSxsJiYodGhpcy5fY3VySW5zdD09PWwmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCksbj10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcih0LCEwKSxyPXRoaXMuX2dldE1pbk1heERhdGUobCwibWluIiksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGwsIm1heCIpLG8obC5zZXR0aW5ncyxhKSxudWxsIT09ciYmdm9pZCAwIT09YS5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1hLm1pbkRhdGUmJihsLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLHIpKSxudWxsIT09aCYmdm9pZCAwIT09YS5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1hLm1heERhdGUmJihsLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLGgpKSwiZGlzYWJsZWQiaW4gYSYmKGEuZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCk6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcih0KSksdGhpcy5fYXR0YWNobWVudHMoZSh0KSxsKSx0aGlzLl9hdXRvU2l6ZShsKSx0aGlzLl9zZXREYXRlKGwsbiksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGwpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobCkpLHZvaWQgMCl9LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKGUsdCxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSk7dCYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtpJiYodGhpcy5fc2V0RGF0ZShpLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksdCksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24odCl7dmFyIGkscyxhLG49ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQudGFyZ2V0KSxyPSEwLG89bi5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7aWYobi5fa2V5RXZlbnQ9ITAsZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLHI9ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gYT1lKCJ0ZC4iK2UuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iK2UuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIixuLmRwRGl2KSxhWzBdJiZlLmRhdGVwaWNrZXIuX3NlbGVjdERheSh0LnRhcmdldCxuLnNlbGVjdGVkTW9udGgsbi5zZWxlY3RlZFllYXIsYVswXSksaT1lLmRhdGVwaWNrZXIuX2dldChuLCJvblNlbGVjdCIpLGk/KHM9ZS5kYXRlcGlja2VyLl9mb3JtYXREYXRlKG4pLGkuYXBwbHkobi5pbnB1dD9uLmlucHV0WzBdOm51bGwsW3Msbl0pKTplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzplLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8rZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcEJpZ01vbnRocyIpOitlLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSxyPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsbz8xOi0xLCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChuLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LC03LCJEIikscj10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM5Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCxvPy0xOjEsIkQiKSxyPXQuY3RybEtleXx8dC5tZXRhS2V5LHQub3JpZ2luYWxFdmVudC5hbHRLZXkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KG4sInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQobiwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsNywiRCIpLHI9dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpyPSExfWVsc2UgMzY9PT10LmtleUNvZGUmJnQuY3RybEtleT9lLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOnI9ITE7ciYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24odCl7dmFyIGkscyxhPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KGEsImNvbnN0cmFpbklucHV0Iik/KGk9ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KGEsImRhdGVGb3JtYXQiKSkscz1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PXQuY2hhckNvZGU/dC5rZXlDb2RlOnQuY2hhckNvZGUpLHQuY3RybEtleXx8dC5tZXRhS2V5fHwiICI+c3x8IWl8fGkuaW5kZXhPZihzKT4tMSk6dm9pZCAwfSxfZG9LZXlVcDpmdW5jdGlvbih0KXt2YXIgaSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT1lLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHMsImRhdGVGb3JtYXQiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKGEpe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKHQ9dC50YXJnZXR8fHQsImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHQ9ZSgiaW5wdXQiLHQucGFyZW50Tm9kZSlbMF0pLCFlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKHQpJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXQpe3ZhciBpLGEsbixyLGgsbCx1O2k9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQpLGUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLGE9ZS5kYXRlcGlja2VyLl9nZXQoaSwiYmVmb3JlU2hvdyIpLG49YT9hLmFwcGx5KHQsW3QsaV0pOnt9LG4hPT0hMSYmKG8oaS5zZXR0aW5ncyxuKSxpLmxhc3RWYWw9bnVsbCxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD10LGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChpKSxlLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYodC52YWx1ZT0iIiksZS5kYXRlcGlja2VyLl9wb3N8fChlLmRhdGVwaWNrZXIuX3Bvcz1lLmRhdGVwaWNrZXIuX2ZpbmRQb3ModCksZS5kYXRlcGlja2VyLl9wb3NbMV0rPXQub2Zmc2V0SGVpZ2h0KSxyPSExLGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gcnw9ImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpLCFyfSksaD17bGVmdDplLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6ZS5kYXRlcGlja2VyLl9wb3NbMV19LGUuZGF0ZXBpY2tlci5fcG9zPW51bGwsaS5kcERpdi5lbXB0eSgpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLGg9ZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLGgsciksaS5kcERpdi5jc3Moe3Bvc2l0aW9uOmUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJmUuYmxvY2tVST8ic3RhdGljIjpyPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmgubGVmdCsicHgiLHRvcDpoLnRvcCsicHgifSksaS5pbmxpbmV8fChsPWUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dBbmltIiksdT1lLmRhdGVwaWNrZXIuX2dldChpLCJkdXJhdGlvbiIpLGkuZHBEaXYuY3NzKCJ6LWluZGV4IixzKGUodCkpKzEpLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsZS5lZmZlY3RzJiZlLmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLGUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksdSk6aS5kcERpdltsfHwic2hvdyJdKGw/dTpudWxsKSxlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSxlLmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dGhpcy5tYXhSb3dzPTQsaD10LHQuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKHQpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyh0KTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLGE9c1sxXSxuPTE3LG89dC5kcERpdi5maW5kKCIuIit0aGlzLl9kYXlPdmVyQ2xhc3MrIiBhIik7by5sZW5ndGg+MCYmci5hcHBseShvLmdldCgwKSksdC5kcERpdi5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTQiKS53aWR0aCgiIiksYT4xJiZ0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIrYSkuY3NzKCJ3aWR0aCIsbiphKyJlbSIpLHQuZHBEaXZbKDEhPT1zWzBdfHwxIT09c1sxXT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSx0LmRwRGl2Wyh0aGlzLl9nZXQodCwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksdD09PWUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KHQpJiZ0LmlucHV0LmZvY3VzKCksdC55ZWFyc2h0bWwmJihpPXQueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09dC55ZWFyc2h0bWwmJnQueWVhcnNodG1sJiZ0LmRwRGl2LmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLXllYXI6Zmlyc3QiKS5yZXBsYWNlV2l0aCh0LnllYXJzaHRtbCksaT10LnllYXJzaHRtbD1udWxsfSwwKSl9LF9zaG91bGRGb2N1c0lucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmlucHV0JiZlLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhZS5pbnB1dC5pcygiOmRpc2FibGVkIikmJiFlLmlucHV0LmlzKCI6Zm9jdXMiKX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgYT10LmRwRGl2Lm91dGVyV2lkdGgoKSxuPXQuZHBEaXYub3V0ZXJIZWlnaHQoKSxyPXQuaW5wdXQ/dC5pbnB1dC5vdXRlcldpZHRoKCk6MCxvPXQuaW5wdXQ/dC5pbnB1dC5vdXRlckhlaWdodCgpOjAsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKHM/MDplKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsocz8wOmUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gaS5sZWZ0LT10aGlzLl9nZXQodCwiaXNSVEwiKT9hLXI6MCxpLmxlZnQtPXMmJmkubGVmdD09PXQuaW5wdXQub2Zmc2V0KCkubGVmdD9lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk6MCxpLnRvcC09cyYmaS50b3A9PT10LmlucHV0Lm9mZnNldCgpLnRvcCtvP2UoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsaS5sZWZ0LT1NYXRoLm1pbihpLmxlZnQsaS5sZWZ0K2E+aCYmaD5hP01hdGguYWJzKGkubGVmdCthLWgpOjApLGkudG9wLT1NYXRoLm1pbihpLnRvcCxpLnRvcCtuPmwmJmw+bj9NYXRoLmFicyhuK28pOjApLGl9LF9maW5kUG9zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxzPXRoaXMuX2dldEluc3QodCksYT10aGlzLl9nZXQocywiaXNSVEwiKTt0JiYoImhpZGRlbiI9PT10LnR5cGV8fDEhPT10Lm5vZGVUeXBlfHxlLmV4cHIuZmlsdGVycy5oaWRkZW4odCkpOyl0PXRbYT8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTtyZXR1cm4gaT1lKHQpLm9mZnNldCgpLFtpLmxlZnQsaS50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxhLG4scj10aGlzLl9jdXJJbnN0OyFyfHx0JiZyIT09ZS5kYXRhKHQsImRhdGVwaWNrZXIiKXx8dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihpPXRoaXMuX2dldChyLCJzaG93QW5pbSIpLHM9dGhpcy5fZ2V0KHIsImR1cmF0aW9uIiksYT1mdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhyKX0sZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFtpXXx8ZS5lZmZlY3RzW2ldKT9yLmRwRGl2LmhpZGUoaSxlLmRhdGVwaWNrZXIuX2dldChyLCJzaG93T3B0aW9ucyIpLHMsYSk6ci5kcERpdlsic2xpZGVEb3duIj09PWk/InNsaWRlVXAiOiJmYWRlSW4iPT09aT8iZmFkZU91dCI6ImhpZGUiXShpP3M6bnVsbCxhKSxpfHxhKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsbj10aGlzLl9nZXQociwib25DbG9zZSIpLG4mJm4uYXBwbHkoci5pbnB1dD9yLmlucHV0WzBdOm51bGwsW3IuaW5wdXQ/ci5pbnB1dC52YWwoKToiIixyXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksZS5ibG9ja1VJJiYoZS51bmJsb2NrVUkoKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24odCl7aWYoZS5kYXRlcGlja2VyLl9jdXJJbnN0KXt2YXIgaT1lKHQudGFyZ2V0KSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsoaVswXS5pZCE9PWUuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiYwPT09aS5wYXJlbnRzKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiYhaS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmIWkuY2xvc2VzdCgiLiIrZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCFlLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhZS5ibG9ja1VJKXx8aS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09cykmJmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKHQsaSxzKXt2YXIgYT1lKHQpLG49dGhpcy5fZ2V0SW5zdChhWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihhWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKG4saSsoIk0iPT09cz90aGlzLl9nZXQobiwic2hvd0N1cnJlbnRBdFBvcyIpOjApLHMpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobikpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKHQpe3ZhciBpLHM9ZSh0KSxhPXRoaXMuX2dldEluc3Qoc1swXSk7dGhpcy5fZ2V0KGEsImdvdG9DdXJyZW50IikmJmEuY3VycmVudERheT8oYS5zZWxlY3RlZERheT1hLmN1cnJlbnREYXksYS5kcmF3TW9udGg9YS5zZWxlY3RlZE1vbnRoPWEuY3VycmVudE1vbnRoLGEuZHJhd1llYXI9YS5zZWxlY3RlZFllYXI9YS5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUsYS5zZWxlY3RlZERheT1pLmdldERhdGUoKSxhLmRyYXdNb250aD1hLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLGEuZHJhd1llYXI9YS5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UoYSksdGhpcy5fYWRqdXN0RGF0ZShzKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7blsic2VsZWN0ZWQiKygiTSI9PT1zPyJNb250aCI6IlllYXIiKV09blsiZHJhdyIrKCJNIj09PXM/Ik1vbnRoIjoiWWVhciIpXT1wYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUoYSl9LF9zZWxlY3REYXk6ZnVuY3Rpb24odCxpLHMsYSl7dmFyIG4scj1lKHQpO2UoYSkuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihyWzBdKXx8KG49dGhpcy5fZ2V0SW5zdChyWzBdKSxuLnNlbGVjdGVkRGF5PW4uY3VycmVudERheT1lKCJhIixhKS5odG1sKCksbi5zZWxlY3RlZE1vbnRoPW4uY3VycmVudE1vbnRoPWksbi5zZWxlY3RlZFllYXI9bi5jdXJyZW50WWVhcj1zLHRoaXMuX3NlbGVjdERhdGUodCx0aGlzLl9mb3JtYXREYXRlKG4sbi5jdXJyZW50RGF5LG4uY3VycmVudE1vbnRoLG4uY3VycmVudFllYXIpKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0KTt0aGlzLl9zZWxlY3REYXRlKGksIiIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbih0LGkpe3ZhciBzLGE9ZSh0KSxuPXRoaXMuX2dldEluc3QoYVswXSk7aT1udWxsIT1pP2k6dGhpcy5fZm9ybWF0RGF0ZShuKSxuLmlucHV0JiZuLmlucHV0LnZhbChpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobikscz10aGlzLl9nZXQobiwib25TZWxlY3QiKSxzP3MuYXBwbHkobi5pbnB1dD9uLmlucHV0WzBdOm51bGwsW2ksbl0pOm4uaW5wdXQmJm4uaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksbi5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihuKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9bi5pbnB1dFswXSwib2JqZWN0IiE9dHlwZW9mIG4uaW5wdXRbMF0mJm4uaW5wdXQuZm9jdXMoKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24odCl7dmFyIGkscyxhLG49dGhpcy5fZ2V0KHQsImFsdEZpZWxkIik7biYmKGk9dGhpcy5fZ2V0KHQsImFsdEZvcm1hdCIpfHx0aGlzLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHM9dGhpcy5fZ2V0RGF0ZSh0KSxhPXRoaXMuZm9ybWF0RGF0ZShpLHMsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKSxlKG4pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLnZhbChhKX0pKX0sbm9XZWVrZW5kczpmdW5jdGlvbihlKXt2YXIgdD1lLmdldERheSgpO3JldHVyblt0PjAmJjY+dCwiIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKGUpe3ZhciB0LGk9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCkrNC0oaS5nZXREYXkoKXx8NykpLHQ9aS5nZXRUaW1lKCksaS5zZXRNb250aCgwKSxpLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0LWkpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24odCxpLHMpe2lmKG51bGw9PXR8fG51bGw9PWkpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO2lmKGk9Im9iamVjdCI9PXR5cGVvZiBpPyIiK2k6aSsiIiwiIj09PWkpcmV0dXJuIG51bGw7dmFyIGEsbixyLG8saD0wLGw9KHM/cy5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZix1PSJzdHJpbmciIT10eXBlb2YgbD9sOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQobCwxMCksZD0ocz9zLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsYz0ocz9zLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxwPShzP3MubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsZj0ocz9zLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsbT0tMSxnPS0xLHY9LTEseT0tMSxiPSExLF89ZnVuY3Rpb24oZSl7dmFyIGk9dC5sZW5ndGg+YSsxJiZ0LmNoYXJBdChhKzEpPT09ZTtyZXR1cm4gaSYmYSsrLGl9LHg9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKSxzPSJAIj09PWU/MTQ6IiEiPT09ZT8yMDoieSI9PT1lJiZ0PzQ6Im8iPT09ZT8zOjIsYT0ieSI9PT1lP3M6MSxuPVJlZ0V4cCgiXlxcZHsiK2ErIiwiK3MrIn0iKSxyPWkuc3Vic3RyaW5nKGgpLm1hdGNoKG4pO2lmKCFyKXRocm93Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICIraDtyZXR1cm4gaCs9clswXS5sZW5ndGgscGFyc2VJbnQoclswXSwxMCl9LGs9ZnVuY3Rpb24odCxzLGEpe3ZhciBuPS0xLHI9ZS5tYXAoXyh0KT9hOnMsZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSk7aWYoZS5lYWNoKHIsZnVuY3Rpb24oZSx0KXt2YXIgcz10WzFdO3JldHVybiBpLnN1YnN0cihoLHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09cy50b0xvd2VyQ2FzZSgpPyhuPXRbMF0saCs9cy5sZW5ndGgsITEpOnZvaWQgMH0pLC0xIT09bilyZXR1cm4gbisxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2h9LHc9ZnVuY3Rpb24oKXtpZihpLmNoYXJBdChoKSE9PXQuY2hhckF0KGEpKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2g7aCsrfTtmb3IoYT0wO3QubGVuZ3RoPmE7YSsrKWlmKGIpIiciIT09dC5jaGFyQXQoYSl8fF8oIiciKT93KCk6Yj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChhKSl7Y2FzZSJkIjp2PXgoImQiKTticmVhaztjYXNlIkQiOmsoIkQiLGQsYyk7YnJlYWs7Y2FzZSJvIjp5PXgoIm8iKTticmVhaztjYXNlIm0iOmc9eCgibSIpO2JyZWFrO2Nhc2UiTSI6Zz1rKCJNIixwLGYpO2JyZWFrO2Nhc2UieSI6bT14KCJ5Iik7YnJlYWs7Y2FzZSJAIjpvPW5ldyBEYXRlKHgoIkAiKSksbT1vLmdldEZ1bGxZZWFyKCksZz1vLmdldE1vbnRoKCkrMSx2PW8uZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6bz1uZXcgRGF0ZSgoeCgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLG09by5nZXRGdWxsWWVhcigpLGc9by5nZXRNb250aCgpKzEsdj1vLmdldERhdGUoKTticmVhaztjYXNlIiciOl8oIiciKT93KCk6Yj0hMDticmVhaztkZWZhdWx0OncoKX1pZihpLmxlbmd0aD5oJiYocj1pLnN1YnN0cihoKSwhL15ccysvLnRlc3QocikpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIityO2lmKC0xPT09bT9tPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+bSYmKG0rPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyh1Pj1tPzA6LTEwMCkpLHk+LTEpZm9yKGc9MSx2PXk7Oyl7aWYobj10aGlzLl9nZXREYXlzSW5Nb250aChtLGctMSksbj49dilicmVhaztnKyssdi09bn1pZihvPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0sZy0xLHYpKSxvLmdldEZ1bGxZZWFyKCkhPT1tfHxvLmdldE1vbnRoKCkrMSE9PWd8fG8uZ2V0RGF0ZSgpIT09dil0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiBvfSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDoxZTcqNjAqNjAqMjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSxmb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpKXtpZighdClyZXR1cm4iIjt2YXIgcyxhPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxuPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHI9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxvPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKHQpe3ZhciBpPWUubGVuZ3RoPnMrMSYmZS5jaGFyQXQocysxKT09PXQ7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz0iIit0O2lmKGgoZSkpZm9yKDtpPnMubGVuZ3RoOylzPSIwIitzO3JldHVybiBzfSx1PWZ1bmN0aW9uKGUsdCxpLHMpe3JldHVybiBoKGUpP3NbdF06aVt0XX0sZD0iIixjPSExO2lmKHQpZm9yKHM9MDtlLmxlbmd0aD5zO3MrKylpZihjKSInIiE9PWUuY2hhckF0KHMpfHxoKCInIik/ZCs9ZS5jaGFyQXQocyk6Yz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChzKSl7Y2FzZSJkIjpkKz1sKCJkIix0LmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmQrPXUoIkQiLHQuZ2V0RGF5KCksYSxuKTticmVhaztjYXNlIm8iOmQrPWwoIm8iLE1hdGgucm91bmQoKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOmQrPWwoIm0iLHQuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6ZCs9dSgiTSIsdC5nZXRNb250aCgpLHIsbyk7YnJlYWs7Y2FzZSJ5IjpkKz1oKCJ5Iik/dC5nZXRGdWxsWWVhcigpOigxMD50LmdldFllYXIoKSUxMDA/IjAiOiIiKSt0LmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjpkKz10LmdldFRpbWUoKTticmVhaztjYXNlIiEiOmQrPTFlNCp0LmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOmgoIiciKT9kKz0iJyI6Yz0hMDticmVhaztkZWZhdWx0OmQrPWUuY2hhckF0KHMpfXJldHVybiBkfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdCxpPSIiLHM9ITEsYT1mdW5jdGlvbihpKXt2YXIgcz1lLmxlbmd0aD50KzEmJmUuY2hhckF0KHQrMSk9PT1pO3JldHVybiBzJiZ0Kyssc307Zm9yKHQ9MDtlLmxlbmd0aD50O3QrKylpZihzKSInIiE9PWUuY2hhckF0KHQpfHxhKCInIik/aSs9ZS5jaGFyQXQodCk6cz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdCh0KSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjppKz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6YSgiJyIpP2krPSInIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9ZS5jaGFyQXQodCl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09ZS5zZXR0aW5nc1t0XT9lLnNldHRpbmdzW3RdOnRoaXMuX2RlZmF1bHRzW3RdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbihlLHQpe2lmKGUuaW5wdXQudmFsKCkhPT1lLmxhc3RWYWwpe3ZhciBpPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscz1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsYT10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxuPWEscj10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e249dGhpcy5wYXJzZURhdGUoaSxzLHIpfHxhfWNhdGNoKG8pe3M9dD8iIjpzfWUuc2VsZWN0ZWREYXk9bi5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW4uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW4uZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cz9uLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXM/bi5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1zP24uZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGkscyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSx0fSxuPWZ1bmN0aW9uKGkpe3RyeXtyZXR1cm4gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IiksaSxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSl9Y2F0Y2gocyl7fWZvcih2YXIgYT0oaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pP2UuZGF0ZXBpY2tlci5fZ2V0RGF0ZSh0KTpudWxsKXx8bmV3IERhdGUsbj1hLmdldEZ1bGxZZWFyKCkscj1hLmdldE1vbnRoKCksbz1hLmdldERhdGUoKSxoPS8oWytcLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9aC5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6bys9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOm8rPTcqcGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOnIrPXBhcnNlSW50KGxbMV0sMTApLG89TWF0aC5taW4obyxlLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKG4scikpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjpuKz1wYXJzZUludChsWzFdLDEwKSxvPU1hdGgubWluKG8sZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLHIpKX1sPWguZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUobixyLG8pfSxyPW51bGw9PWl8fCIiPT09aT9zOiJzdHJpbmciPT10eXBlb2YgaT9uKGkpOiJudW1iZXIiPT10eXBlb2YgaT9pc05hTihpKT9zOmEoaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiByPXImJiJJbnZhbGlkIERhdGUiPT0iIityP3M6cixyJiYoci5zZXRIb3VycygwKSxyLnNldE1pbnV0ZXMoMCksci5zZXRTZWNvbmRzKDApLHIuc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChyKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPyhlLnNldEhvdXJzKGUuZ2V0SG91cnMoKT4xMj9lLmdldEhvdXJzKCkrMjowKSxlKTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM9IXQsYT1lLnNlbGVjdGVkTW9udGgsbj1lLnNlbGVjdGVkWWVhcixyPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHQsbmV3IERhdGUpKTtlLnNlbGVjdGVkRGF5PWUuY3VycmVudERheT1yLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9ZS5jdXJyZW50TW9udGg9ci5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9ZS5jdXJyZW50WWVhcj1yLmdldEZ1bGxZZWFyKCksYT09PWUuc2VsZWN0ZWRNb250aCYmbj09PWUuc2VsZWN0ZWRZZWFyfHxpfHx0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0SW5zdERhdGUoZSksZS5pbnB1dCYmZS5pbnB1dC52YWwocz8iIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJiIiPT09ZS5pbnB1dC52YWwoKT9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHR9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXQodCwic3RlcE1vbnRocyIpLHM9IiMiK3QuaWQucmVwbGFjZSgvXFxcXC9nLCJcXCIpO3QuZHBEaXYuZmluZCgiW2RhdGEtaGFuZGxlcl0iKS5tYXAoZnVuY3Rpb24oKXt2YXIgdD17cHJldjpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShzLC1pLCJNIil9LG5leHQ6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHMpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3REYXkocywrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIk0iKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIlkiKSwhMX19O2UodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLHRbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdCxpLHMsYSxuLHIsbyxoLGwsdSxkLGMscCxmLG0sZyx2LHksYixfLHgsayx3LFQsUyxELE4sTSxDLEEsUCxJLEgsRixqLHosRSxPLEwsVz1uZXcgRGF0ZSxSPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKFcuZ2V0RnVsbFllYXIoKSxXLmdldE1vbnRoKCksVy5nZXREYXRlKCkpKSxZPXRoaXMuX2dldChlLCJpc1JUTCIpLEo9dGhpcy5fZ2V0KGUsInNob3dCdXR0b25QYW5lbCIpLEI9dGhpcy5fZ2V0KGUsImhpZGVJZk5vUHJldk5leHQiKSxLPXRoaXMuX2dldChlLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0IiksVj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxxPXRoaXMuX2dldChlLCJzaG93Q3VycmVudEF0UG9zIiksUT10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLFU9MSE9PVZbMF18fDEhPT1WWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoZS5jdXJyZW50RGF5P25ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFg9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSwkPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksWj1lLmRyYXdNb250aC1xLGV0PWUuZHJhd1llYXI7aWYoMD5aJiYoWis9MTIsZXQtLSksJClmb3IodD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSgkLmdldEZ1bGxZZWFyKCksJC5nZXRNb250aCgpLVZbMF0qVlsxXSsxLCQuZ2V0RGF0ZSgpKSksdD1YJiZYPnQ/WDp0O3RoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMSkpPnQ7KVotLSwwPlomJihaPTExLGV0LS0pO2ZvcihlLmRyYXdNb250aD1aLGUuZHJhd1llYXI9ZXQsaT10aGlzLl9nZXQoZSwicHJldlRleHQiKSxpPUs/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWi1RLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmkscz10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLGV0LFopPyI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IjpCPyIiOiI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IixhPXRoaXMuX2dldChlLCJuZXh0VGV4dCIpLGE9Sz90aGlzLmZvcm1hdERhdGUoYSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaK1EsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6YSxuPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIithKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IithKyI8L3NwYW4+PC9hPiI6Qj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIithKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IithKyI8L3NwYW4+PC9hPiIscj10aGlzLl9nZXQoZSwiY3VycmVudFRleHQiKSxvPXRoaXMuX2dldChlLCJnb3RvQ3VycmVudCIpJiZlLmN1cnJlbnREYXk/RzpSLHI9Sz90aGlzLmZvcm1hdERhdGUocixvLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6cixoPWUuaW5saW5lPyIiOiI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPiIrdGhpcy5fZ2V0KGUsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLGw9Sj8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Jz4iKyhZP2g6IiIpKyh0aGlzLl9pc0luUmFuZ2UoZSxvKT8iPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSd0b2RheScgZGF0YS1ldmVudD0nY2xpY2snPiIrcisiPC9idXR0b24+IjoiIikrKFk/IiI6aCkrIjwvZGl2PiI6IiIsdT1wYXJzZUludCh0aGlzLl9nZXQoZSwiZmlyc3REYXkiKSwxMCksdT1pc05hTih1KT8wOnUsZD10aGlzLl9nZXQoZSwic2hvd1dlZWsiKSxjPXRoaXMuX2dldChlLCJkYXlOYW1lcyIpLHA9dGhpcy5fZ2V0KGUsImRheU5hbWVzTWluIiksZj10aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpLG09dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLGc9dGhpcy5fZ2V0KGUsImJlZm9yZVNob3dEYXkiKSx2PXRoaXMuX2dldChlLCJzaG93T3RoZXJNb250aHMiKSx5PXRoaXMuX2dldChlLCJzZWxlY3RPdGhlck1vbnRocyIpLGI9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksXz0iIixrPTA7VlswXT5rO2srKyl7Zm9yKHc9IiIsdGhpcy5tYXhSb3dzPTQsVD0wO1ZbMV0+VDtUKyspe2lmKFM9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWixlLnNlbGVjdGVkRGF5KSksRD0iIHVpLWNvcm5lci1hbGwiLE49IiIsVSl7aWYoTis9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXAiLFZbMV0+MSlzd2l0Y2goVCl7Y2FzZSAwOk4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsRD0iIHVpLWNvcm5lci0iKyhZPyJyaWdodCI6ImxlZnQiKTsKK2JyZWFrO2Nhc2UgVlsxXS0xOk4rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IixEPSIgdWktY29ybmVyLSIrKFk/ImxlZnQiOiJyaWdodCIpO2JyZWFrO2RlZmF1bHQ6Tis9IiB1aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSIsRD0iIn1OKz0iJz4ifWZvcihOKz0iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXgiK0QrIic+IisoL2FsbHxsZWZ0Ly50ZXN0KEQpJiYwPT09az9ZP246czoiIikrKC9hbGx8cmlnaHQvLnRlc3QoRCkmJjA9PT1rP1k/czpuOiIiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihlLFosZXQsWCwkLGs+MHx8VD4wLGYsbSkrIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPiIrIjx0cj4iLE09ZD8iPHRoIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iK3RoaXMuX2dldChlLCJ3ZWVrSGVhZGVyIikrIjwvdGg+IjoiIix4PTA7Nz54O3grKylDPSh4K3UpJTcsTSs9Ijx0aCBzY29wZT0nY29sJyIrKCh4K3UrNiklNz49NT8iIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstZW5kJyI6IiIpKyI+IisiPHNwYW4gdGl0bGU9JyIrY1tDXSsiJz4iK3BbQ10rIjwvc3Bhbj48L3RoPiI7Zm9yKE4rPU0rIjwvdHI+PC90aGVhZD48dGJvZHk+IixBPXRoaXMuX2dldERheXNJbk1vbnRoKGV0LFopLGV0PT09ZS5zZWxlY3RlZFllYXImJlo9PT1lLnNlbGVjdGVkTW9udGgmJihlLnNlbGVjdGVkRGF5PU1hdGgubWluKGUuc2VsZWN0ZWREYXksQSkpLFA9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChldCxaKS11KzcpJTcsST1NYXRoLmNlaWwoKFArQSkvNyksSD1VP3RoaXMubWF4Um93cz5JP3RoaXMubWF4Um93czpJOkksdGhpcy5tYXhSb3dzPUgsRj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLDEtUCkpLGo9MDtIPmo7aisrKXtmb3IoTis9Ijx0cj4iLHo9ZD8iPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz4iK3RoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIikoRikrIjwvdGQ+IjoiIix4PTA7Nz54O3grKylFPWc/Zy5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbRl0pOlshMCwiIl0sTz1GLmdldE1vbnRoKCkhPT1aLEw9TyYmIXl8fCFFWzBdfHxYJiZYPkZ8fCQmJkY+JCx6Kz0iPHRkIGNsYXNzPSciKygoeCt1KzYpJTc+PTU/IiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIjoiIikrKE8/IiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoIjoiIikrKEYuZ2V0VGltZSgpPT09Uy5nZXRUaW1lKCkmJlo9PT1lLnNlbGVjdGVkTW9udGgmJmUuX2tleUV2ZW50fHxiLmdldFRpbWUoKT09PUYuZ2V0VGltZSgpJiZiLmdldFRpbWUoKT09PVMuZ2V0VGltZSgpPyIgIit0aGlzLl9kYXlPdmVyQ2xhc3M6IiIpKyhMPyIgIit0aGlzLl91bnNlbGVjdGFibGVDbGFzcysiIHVpLXN0YXRlLWRpc2FibGVkIjoiIikrKE8mJiF2PyIiOiIgIitFWzFdKyhGLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpPyIgIit0aGlzLl9jdXJyZW50Q2xhc3M6IiIpKyhGLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktZGF0ZXBpY2tlci10b2RheSI6IiIpKSsiJyIrKE8mJiF2fHwhRVsyXT8iIjoiIHRpdGxlPSciK0VbMl0ucmVwbGFjZSgvJy9nLCImIzM5OyIpKyInIikrKEw/IiI6IiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9JyIrRi5nZXRNb250aCgpKyInIGRhdGEteWVhcj0nIitGLmdldEZ1bGxZZWFyKCkrIiciKSsiPiIrKE8mJiF2PyImI3hhMDsiOkw/IjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iK0YuZ2V0RGF0ZSgpKyI8L3NwYW4+IjoiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQiKyhGLmdldFRpbWUoKT09PVIuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKEYuZ2V0VGltZSgpPT09Ry5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1hY3RpdmUiOiIiKSsoTz8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyInIGhyZWY9JyMnPiIrRi5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLEYuc2V0RGF0ZShGLmdldERhdGUoKSsxKSxGPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEYpO04rPXorIjwvdHI+In1aKyssWj4xMSYmKFo9MCxldCsrKSxOKz0iPC90Ym9keT48L3RhYmxlPiIrKFU/IjwvZGl2PiIrKFZbMF0+MCYmVD09PVZbMV0tMT8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1yb3ctYnJlYWsnPjwvZGl2PiI6IiIpOiIiKSx3Kz1OfV8rPXd9cmV0dXJuIF8rPWwsZS5fa2V5RXZlbnQ9ITEsX30sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxpLHMsYSxuLHIsbyl7dmFyIGgsbCx1LGQsYyxwLGYsbSxnPXRoaXMuX2dldChlLCJjaGFuZ2VNb250aCIpLHY9dGhpcy5fZ2V0KGUsImNoYW5nZVllYXIiKSx5PXRoaXMuX2dldChlLCJzaG93TW9udGhBZnRlclllYXIiKSxiPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXRpdGxlJz4iLF89IiI7aWYobnx8IWcpXys9IjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz4iK3JbdF0rIjwvc3Bhbj4iO2Vsc2V7Zm9yKGg9cyYmcy5nZXRGdWxsWWVhcigpPT09aSxsPWEmJmEuZ2V0RnVsbFllYXIoKT09PWksXys9IjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+Iix1PTA7MTI+dTt1KyspKCFofHx1Pj1zLmdldE1vbnRoKCkpJiYoIWx8fGEuZ2V0TW9udGgoKT49dSkmJihfKz0iPG9wdGlvbiB2YWx1ZT0nIit1KyInIisodT09PXQ/IiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjoiIikrIj4iK29bdV0rIjwvb3B0aW9uPiIpO18rPSI8L3NlbGVjdD4ifWlmKHl8fChiKz1fKyghbiYmZyYmdj8iIjoiJiN4YTA7IikpLCFlLnllYXJzaHRtbClpZihlLnllYXJzaHRtbD0iIixufHwhdiliKz0iPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcic+IitpKyI8L3NwYW4+IjtlbHNle2ZvcihkPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLGM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvY1srXC1dLiovKT9pK3BhcnNlSW50KGUuc3Vic3RyaW5nKDEpLDEwKTplLm1hdGNoKC9bK1wtXS4qLyk/YytwYXJzZUludChlLDEwKTpwYXJzZUludChlLDEwKTtyZXR1cm4gaXNOYU4odCk/Yzp0fSxmPXAoZFswXSksbT1NYXRoLm1heChmLHAoZFsxXXx8IiIpKSxmPXM/TWF0aC5tYXgoZixzLmdldEZ1bGxZZWFyKCkpOmYsbT1hP01hdGgubWluKG0sYS5nZXRGdWxsWWVhcigpKTptLGUueWVhcnNodG1sKz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjttPj1mO2YrKyllLnllYXJzaHRtbCs9IjxvcHRpb24gdmFsdWU9JyIrZisiJyIrKGY9PT1pPyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IitmKyI8L29wdGlvbj4iO2UueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixiKz1lLnllYXJzaHRtbCxlLnllYXJzaHRtbD1udWxsfXJldHVybiBiKz10aGlzLl9nZXQoZSwieWVhclN1ZmZpeCIpLHkmJihiKz0oIW4mJmcmJnY/IiI6IiYjeGEwOyIpK18pLGIrPSI8L2Rpdj4ifSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPWUuZHJhd1llYXIrKCJZIj09PWk/dDowKSxhPWUuZHJhd01vbnRoKygiTSI9PT1pP3Q6MCksbj1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LHRoaXMuX2dldERheXNJbk1vbnRoKHMsYSkpKygiRCI9PT1pP3Q6MCkscj10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsYSxuKSkpO2Uuc2VsZWN0ZWREYXk9ci5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPXIuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPXIuZ2V0RnVsbFllYXIoKSwoIk0iPT09aXx8IlkiPT09aSkmJnRoaXMuX25vdGlmeUNoYW5nZShlKX0sX3Jlc3RyaWN0TWluTWF4OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxzPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksYT1pJiZpPnQ/aTp0O3JldHVybiBzJiZhPnM/czphfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJvbkNoYW5nZU1vbnRoWWVhciIpO3QmJnQuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW2Uuc2VsZWN0ZWRZZWFyLGUuc2VsZWN0ZWRNb250aCsxLGVdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJudW1iZXJPZk1vbnRocyIpO3JldHVybiBudWxsPT10P1sxLDFdOiJudW1iZXIiPT10eXBlb2YgdD9bMSx0XTp0fSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsdCsiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZSx0LDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBEYXRlKGUsdCwxKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGUsdCxpLHMpe3ZhciBhPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxzKygwPnQ/dDphWzBdKmFbMV0pLDEpKTtyZXR1cm4gMD50JiZuLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZShlLG4pfSxfaXNJblJhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxhPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIiksbj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLHI9bnVsbCxvPW51bGwsaD10aGlzLl9nZXQoZSwieWVhclJhbmdlIik7cmV0dXJuIGgmJihpPWguc3BsaXQoIjoiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxyPXBhcnNlSW50KGlbMF0sMTApLG89cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcLV0uKi8pJiYocis9cyksaVsxXS5tYXRjaCgvWytcLV0uKi8pJiYobys9cykpLCghYXx8dC5nZXRUaW1lKCk+PWEuZ2V0VGltZSgpKSYmKCFufHx0LmdldFRpbWUoKTw9bi5nZXRUaW1lKCkpJiYoIXJ8fHQuZ2V0RnVsbFllYXIoKT49cikmJighb3x8bz49dC5nZXRGdWxsWWVhcigpKX0sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwic2hvcnRZZWFyQ3V0b2ZmIik7cmV0dXJuIHQ9InN0cmluZyIhPXR5cGVvZiB0P3Q6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludCh0LDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOnQsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQoZSwiZGF5TmFtZXNTaG9ydCIpLGRheU5hbWVzOnRoaXMuX2dldChlLCJkYXlOYW1lcyIpLG1vbnRoTmFtZXNTaG9ydDp0aGlzLl9nZXQoZSwibW9udGhOYW1lc1Nob3J0IiksbW9udGhOYW1lczp0aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpfX0sX2Zvcm1hdERhdGU6ZnVuY3Rpb24oZSx0LGkscyl7dHx8KGUuY3VycmVudERheT1lLnNlbGVjdGVkRGF5LGUuY3VycmVudE1vbnRoPWUuc2VsZWN0ZWRNb250aCxlLmN1cnJlbnRZZWFyPWUuc2VsZWN0ZWRZZWFyKTt2YXIgYT10PyJvYmplY3QiPT10eXBlb2YgdD90OnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsaSx0KSk6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpKTtyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldChlLCJkYXRlRm9ybWF0IiksYSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpfX0pLGUuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbih0KXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7ZS5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwoZShkb2N1bWVudCkubW91c2Vkb3duKGUuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKSxlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApLDA9PT1lKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiZlKCJib2R5IikuYXBwZW5kKGUuZGF0ZXBpY2tlci5kcERpdik7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8ImlzRGlzYWJsZWQiIT09dCYmImdldERhdGUiIT09dCYmIndpZGdldCIhPT10PyJvcHRpb24iPT09dCYmMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJndW1lbnRzWzFdP2UuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXsic3RyaW5nIj09dHlwZW9mIHQ/ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoaSkpOmUuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLHQpfSk6ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpfSxlLmRhdGVwaWNrZXI9bmV3IGEsZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLGUuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGUuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjExLjQiLGUuZGF0ZXBpY2tlcn0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LmNvb2tpZS5qcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LmNvb2tpZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjcxOTAwCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkuY29va2llLmpzCkBAIC0wLDAgKzEsMTE3IEBACisvKiEKKyAqIGpRdWVyeSBDb29raWUgUGx1Z2luIHYxLjQuMAorICogaHR0cHM6Ly9naXRodWIuY29tL2NhcmhhcnRsL2pxdWVyeS1jb29raWUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMyBLbGF1cyBIYXJ0bAorICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKi8KKyhmdW5jdGlvbiAoZmFjdG9yeSkgeworCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKwkJLy8gQU1ELiBSZWdpc3RlciBhcyBhbm9ueW1vdXMgbW9kdWxlLgorCQlkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7CisJfSBlbHNlIHsKKwkJLy8gQnJvd3NlciBnbG9iYWxzLgorCQlmYWN0b3J5KGpRdWVyeSk7CisJfQorfShmdW5jdGlvbiAoJCkgeworCisJdmFyIHBsdXNlcyA9IC9cKy9nOworCisJZnVuY3Rpb24gZW5jb2RlKHMpIHsKKwkJcmV0dXJuIGNvbmZpZy5yYXcgPyBzIDogZW5jb2RlVVJJQ29tcG9uZW50KHMpOworCX0KKworCWZ1bmN0aW9uIGRlY29kZShzKSB7CisJCXJldHVybiBjb25maWcucmF3ID8gcyA6IGRlY29kZVVSSUNvbXBvbmVudChzKTsKKwl9CisKKwlmdW5jdGlvbiBzdHJpbmdpZnlDb29raWVWYWx1ZSh2YWx1ZSkgeworCQlyZXR1cm4gZW5jb2RlKGNvbmZpZy5qc29uID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKSk7CisJfQorCisJZnVuY3Rpb24gcGFyc2VDb29raWVWYWx1ZShzKSB7CisJCWlmIChzLmluZGV4T2YoJyInKSA9PT0gMCkgeworCQkJLy8gVGhpcyBpcyBhIHF1b3RlZCBjb29raWUgYXMgYWNjb3JkaW5nIHRvIFJGQzIwNjgsIHVuZXNjYXBlLi4uCisJCQlzID0gcy5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFwiL2csICciJykucmVwbGFjZSgvXFxcXC9nLCAnXFwnKTsKKwkJfQorCisJCXRyeSB7CisJCQkvLyBSZXBsYWNlIHNlcnZlci1zaWRlIHdyaXR0ZW4gcGx1c2VzIHdpdGggc3BhY2VzLgorCQkJLy8gSWYgd2UgY2FuJ3QgZGVjb2RlIHRoZSBjb29raWUsIGlnbm9yZSBpdCwgaXQncyB1bnVzYWJsZS4KKwkJCXMgPSBkZWNvZGVVUklDb21wb25lbnQocy5yZXBsYWNlKHBsdXNlcywgJyAnKSk7CisJCX0gY2F0Y2goZSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJdHJ5IHsKKwkJCS8vIElmIHdlIGNhbid0IHBhcnNlIHRoZSBjb29raWUsIGlnbm9yZSBpdCwgaXQncyB1bnVzYWJsZS4KKwkJCXJldHVybiBjb25maWcuanNvbiA/IEpTT04ucGFyc2UocykgOiBzOworCQl9IGNhdGNoKGUpIHt9CisJfQorCisJZnVuY3Rpb24gcmVhZChzLCBjb252ZXJ0ZXIpIHsKKwkJdmFyIHZhbHVlID0gY29uZmlnLnJhdyA/IHMgOiBwYXJzZUNvb2tpZVZhbHVlKHMpOworCQlyZXR1cm4gJC5pc0Z1bmN0aW9uKGNvbnZlcnRlcikgPyBjb252ZXJ0ZXIodmFsdWUpIDogdmFsdWU7CisJfQorCisJdmFyIGNvbmZpZyA9ICQuY29va2llID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG9wdGlvbnMpIHsKKworCQkvLyBXcml0ZQorCQlpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhJC5pc0Z1bmN0aW9uKHZhbHVlKSkgeworCQkJb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBjb25maWcuZGVmYXVsdHMsIG9wdGlvbnMpOworCisJCQlpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHsKKwkJCQl2YXIgZGF5cyA9IG9wdGlvbnMuZXhwaXJlcywgdCA9IG9wdGlvbnMuZXhwaXJlcyA9IG5ldyBEYXRlKCk7CisJCQkJdC5zZXREYXRlKHQuZ2V0RGF0ZSgpICsgZGF5cyk7CisJCQl9CisKKwkJCXJldHVybiAoZG9jdW1lbnQuY29va2llID0gWworCQkJCWVuY29kZShrZXkpLCAnPScsIHN0cmluZ2lmeUNvb2tpZVZhbHVlKHZhbHVlKSwKKwkJCQlvcHRpb25zLmV4cGlyZXMgPyAnOyBleHBpcmVzPScgKyBvcHRpb25zLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnLCAvLyB1c2UgZXhwaXJlcyBhdHRyaWJ1dGUsIG1heC1hZ2UgaXMgbm90IHN1cHBvcnRlZCBieSBJRQorCQkJCW9wdGlvbnMucGF0aCAgICA/ICc7IHBhdGg9JyArIG9wdGlvbnMucGF0aCA6ICcnLAorCQkJCW9wdGlvbnMuZG9tYWluICA/ICc7IGRvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gOiAnJywKKwkJCQlvcHRpb25zLnNlY3VyZSAgPyAnOyBzZWN1cmUnIDogJycKKwkJCV0uam9pbignJykpOworCQl9CisKKwkJLy8gUmVhZAorCisJCXZhciByZXN1bHQgPSBrZXkgPyB1bmRlZmluZWQgOiB7fTsKKworCQkvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5CisJCS8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLiBBbHNvIHByZXZlbnRzIG9kZCByZXN1bHQgd2hlbgorCQkvLyBjYWxsaW5nICQuY29va2llKCkuCisJCXZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llID8gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpIDogW107CisKKwkJZm9yICh2YXIgaSA9IDAsIGwgPSBjb29raWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworCQkJdmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpOworCQkJdmFyIG5hbWUgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7CisJCQl2YXIgY29va2llID0gcGFydHMuam9pbignPScpOworCisJCQlpZiAoa2V5ICYmIGtleSA9PT0gbmFtZSkgeworCQkJCS8vIElmIHNlY29uZCBhcmd1bWVudCAodmFsdWUpIGlzIGEgZnVuY3Rpb24gaXQncyBhIGNvbnZlcnRlci4uLgorCQkJCXJlc3VsdCA9IHJlYWQoY29va2llLCB2YWx1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vIFByZXZlbnQgc3RvcmluZyBhIGNvb2tpZSB0aGF0IHdlIGNvdWxkbid0IGRlY29kZS4KKwkJCWlmICgha2V5ICYmIChjb29raWUgPSByZWFkKGNvb2tpZSkpICE9PSB1bmRlZmluZWQpIHsKKwkJCQlyZXN1bHRbbmFtZV0gPSBjb29raWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmVzdWx0OworCX07CisKKwljb25maWcuZGVmYXVsdHMgPSB7fTsKKworCSQucmVtb3ZlQ29va2llID0gZnVuY3Rpb24gKGtleSwgb3B0aW9ucykgeworCQlpZiAoJC5jb29raWUoa2V5KSAhPT0gdW5kZWZpbmVkKSB7CisJCQkvLyBNdXN0IG5vdCBhbHRlciBvcHRpb25zLCB0aHVzIGV4dGVuZGluZyBhIGZyZXNoIG9iamVjdC4uLgorCQkJJC5jb29raWUoa2V5LCAnJywgJC5leHRlbmQoe30sIG9wdGlvbnMsIHsgZXhwaXJlczogLTEgfSkpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX07CisKK30pKTsKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LnRyZWV0YWJsZS5qcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvanF1ZXJ5LnRyZWV0YWJsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU3NDI3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9qcXVlcnkudHJlZXRhYmxlLmpzCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogalF1ZXJ5IHRyZWV0YWJsZSBQbHVnaW4gMy4xLjAKKyAqIGh0dHA6Ly9sdWRvLmN1YmljcGh1c2UubmwvanF1ZXJ5LXRyZWV0YWJsZQorICoKKyAqIENvcHlyaWdodCAyMDEzLCBMdWRvIHZhbiBkZW4gQm9vbQorICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCisgKi8KKyhmdW5jdGlvbigpIHsKKyAgdmFyICQsIE5vZGUsIFRyZWUsIG1ldGhvZHM7CisKKyAgJCA9IGpRdWVyeTsKKworICBOb2RlID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIE5vZGUocm93LCB0cmVlLCBzZXR0aW5ncykgeworICAgICAgdmFyIHBhcmVudElkOworCisgICAgICB0aGlzLnJvdyA9IHJvdzsKKyAgICAgIHRoaXMudHJlZSA9IHRyZWU7CisgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7CisKKyAgICAgIC8vIFRPRE8gRW5zdXJlIGlkL3BhcmVudElkIGlzIGFsd2F5cyBhIHN0cmluZyAobm90IGludCkKKyAgICAgIHRoaXMuaWQgPSB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3Mubm9kZUlkQXR0cik7CisKKyAgICAgIC8vIFRPRE8gTW92ZSB0aGlzIHRvIGEgc2V0UGFyZW50SWQgZnVuY3Rpb24/CisgICAgICBwYXJlbnRJZCA9IHRoaXMucm93LmRhdGEodGhpcy5zZXR0aW5ncy5wYXJlbnRJZEF0dHIpOworICAgICAgaWYgKHBhcmVudElkICE9IG51bGwgJiYgcGFyZW50SWQgIT09ICIiKSB7CisgICAgICAgIHRoaXMucGFyZW50SWQgPSBwYXJlbnRJZDsKKyAgICAgIH0KKworICAgICAgdGhpcy50cmVlQ2VsbCA9ICQodGhpcy5yb3cuY2hpbGRyZW4odGhpcy5zZXR0aW5ncy5jb2x1bW5FbFR5cGUpW3RoaXMuc2V0dGluZ3MuY29sdW1uXSk7CisgICAgICB0aGlzLmV4cGFuZGVyID0gJCh0aGlzLnNldHRpbmdzLmV4cGFuZGVyVGVtcGxhdGUpOworICAgICAgdGhpcy5pbmRlbnRlciA9ICQodGhpcy5zZXR0aW5ncy5pbmRlbnRlclRlbXBsYXRlKTsKKyAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgIHRoaXMudHJlZUNlbGwucHJlcGVuZCh0aGlzLmluZGVudGVyKTsKKyAgICB9CisKKyAgICBOb2RlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuYW5jZXN0b3JzID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgYW5jZXN0b3JzLCBub2RlOworICAgICAgbm9kZSA9IHRoaXM7CisgICAgICBhbmNlc3RvcnMgPSBbXTsKKyAgICAgIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgYW5jZXN0b3JzLnB1c2gobm9kZSk7CisgICAgICB9CisgICAgICByZXR1cm4gYW5jZXN0b3JzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5jb2xsYXBzZSA9IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKCkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9CisKKyAgICAgIHRoaXMucm93LnJlbW92ZUNsYXNzKCJleHBhbmRlZCIpLmFkZENsYXNzKCJjb2xsYXBzZWQiKTsKKworICAgICAgdGhpcy5faGlkZUNoaWxkcmVuKCk7CisgICAgICB0aGlzLmV4cGFuZGVyLmF0dHIoInRpdGxlIiwgdGhpcy5zZXR0aW5ncy5zdHJpbmdFeHBhbmQpOworCisgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB0aGlzLnNldHRpbmdzLm9uTm9kZUNvbGxhcHNlICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk5vZGVDb2xsYXBzZS5hcHBseSh0aGlzKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmNvbGxhcHNlZCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMucm93Lmhhc0NsYXNzKCJjb2xsYXBzZWQiKTsKKyAgICB9OworCisgICAgLy8gVE9ETyBkZXN0cm95OiByZW1vdmUgZXZlbnQgaGFuZGxlcnMsIGV4cGFuZGVyLCBpbmRlbnRlciwgZXRjLgorCisgICAgTm9kZS5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5leHBhbmRlZCgpKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfQorCisgICAgICB0aGlzLnJvdy5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYWRkQ2xhc3MoImV4cGFuZGVkIik7CisKKyAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkICYmIHRoaXMuc2V0dGluZ3Mub25Ob2RlRXhwYW5kICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy5zZXR0aW5ncy5vbk5vZGVFeHBhbmQuYXBwbHkodGhpcyk7CisgICAgICB9CisKKyAgICAgIGlmICgkKHRoaXMucm93KS5pcygiOnZpc2libGUiKSkgeworICAgICAgICB0aGlzLl9zaG93Q2hpbGRyZW4oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5leHBhbmRlci5hdHRyKCJ0aXRsZSIsIHRoaXMuc2V0dGluZ3Muc3RyaW5nQ29sbGFwc2UpOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuZXhwYW5kZWQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLnJvdy5oYXNDbGFzcygiZXhwYW5kZWQiKTsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy5faGlkZUNoaWxkcmVuKCk7CisgICAgICB0aGlzLnJvdy5oaWRlKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUuaXNCcmFuY2hOb2RlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZih0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgdGhpcy5yb3cuZGF0YSh0aGlzLnNldHRpbmdzLmJyYW5jaEF0dHIpID09PSB0cnVlKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MgPSBmdW5jdGlvbigpeworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoJ2JyYW5jaCcpOworICAgICAgdGhpcy5yb3cucmVtb3ZlQ2xhc3MoJ2xlYWYnKTsKKyAgICAgIHRoaXMucm93LmFkZENsYXNzKHRoaXMuaXNCcmFuY2hOb2RlKCkgPyAnYnJhbmNoJyA6ICdsZWFmJyk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLmxldmVsID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5hbmNlc3RvcnMoKS5sZW5ndGg7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnBhcmVudE5vZGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudHJlZVt0aGlzLnBhcmVudElkXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7CisgICAgICB2YXIgaSA9ICQuaW5BcnJheShjaGlsZCwgdGhpcy5jaGlsZHJlbik7CisgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zcGxpY2UoaSwgMSkKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgaGFuZGxlciwKKyAgICAgICAgICBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MsCisgICAgICAgICAgdGFyZ2V0OworCisgICAgICBpZiAoc2V0dGluZ3MuZXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiB0aGlzLmlzQnJhbmNoTm9kZSgpKSB7CisgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCJ0YWJsZSIpLnRyZWV0YWJsZSgibm9kZSIsICQodGhpcykucGFyZW50cygidHIiKS5kYXRhKHNldHRpbmdzLm5vZGVJZEF0dHIpKS50b2dnbGUoKTsKKyAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuaW5kZW50ZXIuaHRtbCh0aGlzLmV4cGFuZGVyKTsKKyAgICAgICAgdGFyZ2V0ID0gc2V0dGluZ3MuY2xpY2thYmxlTm9kZU5hbWVzID09PSB0cnVlID8gdGhpcy50cmVlQ2VsbCA6IHRoaXMuZXhwYW5kZXI7CisKKyAgICAgICAgdGFyZ2V0Lm9mZigiY2xpY2sudHJlZXRhYmxlIikub24oImNsaWNrLnRyZWV0YWJsZSIsIGhhbmRsZXIpOworICAgICAgICB0YXJnZXQub2ZmKCJrZXlkb3duLnRyZWV0YWJsZSIpLm9uKCJrZXlkb3duLnRyZWV0YWJsZSIsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIFtlXSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5pbmRlbnRlclswXS5zdHlsZS5wYWRkaW5nTGVmdCA9ICIiICsgKHRoaXMubGV2ZWwoKSAqIHNldHRpbmdzLmluZGVudCkgKyAicHgiOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgTm9kZS5wcm90b3R5cGUucmV2ZWFsID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy5wYXJlbnRJZCAhPSBudWxsKSB7CisgICAgICAgIHRoaXMucGFyZW50Tm9kZSgpLnJldmVhbCgpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kKCk7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIGlmICh0aGlzLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgdGhpcy50cmVlW3RoaXMucGFyZW50SWRdLnJlbW92ZUNoaWxkKHRoaXMpOworICAgICAgfQorICAgICAgdGhpcy5wYXJlbnRJZCA9IG5vZGUuaWQ7CisgICAgICB0aGlzLnJvdy5kYXRhKHRoaXMuc2V0dGluZ3MucGFyZW50SWRBdHRyLCBub2RlLmlkKTsKKyAgICAgIHJldHVybiBub2RlLmFkZENoaWxkKHRoaXMpOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZSgpOworICAgICAgfQorICAgICAgdGhpcy5yb3cuc2hvdygpOworICAgICAgaWYgKHRoaXMuZXhwYW5kZWQoKSkgeworICAgICAgICB0aGlzLl9zaG93Q2hpbGRyZW4oKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLmV4cGFuZGVkKCkpIHsKKyAgICAgICAgdGhpcy5jb2xsYXBzZSgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBOb2RlLnByb3RvdHlwZS5faGlkZUNoaWxkcmVuID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgY2hpbGQsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKKyAgICAgIF9yZWYgPSB0aGlzLmNoaWxkcmVuOworICAgICAgX3Jlc3VsdHMgPSBbXTsKKyAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgeworICAgICAgICBjaGlsZCA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKGNoaWxkLmhpZGUoKSk7CisgICAgICB9CisgICAgICByZXR1cm4gX3Jlc3VsdHM7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLl9pbml0aWFsaXplID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzOworCisgICAgICB0aGlzLnJlbmRlcigpOworCisgICAgICBpZiAoc2V0dGluZ3MuZXhwYW5kYWJsZSA9PT0gdHJ1ZSAmJiBzZXR0aW5ncy5pbml0aWFsU3RhdGUgPT09ICJjb2xsYXBzZWQiKSB7CisgICAgICAgIHRoaXMuY29sbGFwc2UoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICB9CisKKyAgICAgIGlmIChzZXR0aW5ncy5vbk5vZGVJbml0aWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgIHNldHRpbmdzLm9uTm9kZUluaXRpYWxpemVkLmFwcGx5KHRoaXMpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfTsKKworICAgIE5vZGUucHJvdG90eXBlLl9zaG93Q2hpbGRyZW4gPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBjaGlsZCwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMuY2hpbGRyZW47CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIGNoaWxkID0gX3JlZltfaV07CisgICAgICAgIF9yZXN1bHRzLnB1c2goY2hpbGQuc2hvdygpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfcmVzdWx0czsKKyAgICB9OworCisgICAgcmV0dXJuIE5vZGU7CisgIH0pKCk7CisKKyAgVHJlZSA9IChmdW5jdGlvbigpIHsKKyAgICBmdW5jdGlvbiBUcmVlKHRhYmxlLCBzZXR0aW5ncykgeworICAgICAgdGhpcy50YWJsZSA9IHRhYmxlOworICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOworICAgICAgdGhpcy50cmVlID0ge307CisKKyAgICAgIC8vIENhY2hlIHRoZSBub2RlcyBhbmQgcm9vdHMgaW4gc2ltcGxlIGFycmF5cyBmb3IgcXVpY2sgYWNjZXNzL2l0ZXJhdGlvbgorICAgICAgdGhpcy5ub2RlcyA9IFtdOworICAgICAgdGhpcy5yb290cyA9IFtdOworICAgIH0KKworICAgIFRyZWUucHJvdG90eXBlLmNvbGxhcHNlQWxsID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbm9kZSwgX2ksIF9sZW4sIF9yZWYsIF9yZXN1bHRzOworICAgICAgX3JlZiA9IHRoaXMubm9kZXM7CisgICAgICBfcmVzdWx0cyA9IFtdOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIG5vZGUgPSBfcmVmW19pXTsKKyAgICAgICAgX3Jlc3VsdHMucHVzaChub2RlLmNvbGxhcHNlKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5leHBhbmRBbGwgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBub2RlLCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CisgICAgICBfcmVmID0gdGhpcy5ub2RlczsKKyAgICAgIF9yZXN1bHRzID0gW107CisgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKKyAgICAgICAgbm9kZSA9IF9yZWZbX2ldOworICAgICAgICBfcmVzdWx0cy5wdXNoKG5vZGUuZXhwYW5kKCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9yZXN1bHRzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5maW5kTGFzdE5vZGUgPSBmdW5jdGlvbiAobm9kZSkgeworICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgeworICAgICAgICByZXR1cm4gdGhpcy5maW5kTGFzdE5vZGUobm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBub2RlOworICAgICAgfQorICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5sb2FkUm93cyA9IGZ1bmN0aW9uKHJvd3MpIHsKKyAgICAgIHZhciBub2RlLCByb3csIGk7CisKKyAgICAgIGlmIChyb3dzICE9IG51bGwpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICByb3cgPSAkKHJvd3NbaV0pOworCisgICAgICAgICAgaWYgKHJvdy5kYXRhKHRoaXMuc2V0dGluZ3Mubm9kZUlkQXR0cikgIT0gbnVsbCkgeworICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKHJvdywgdGhpcy50cmVlLCB0aGlzLnNldHRpbmdzKTsKKyAgICAgICAgICAgIHRoaXMubm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHRoaXMudHJlZVtub2RlLmlkXSA9IG5vZGU7CisKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgdGhpcy50cmVlW25vZGUucGFyZW50SWRdLmFkZENoaWxkKG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgdGhpcy5yb290cy5wdXNoKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykgeworICAgICAgICBub2RlID0gdGhpcy5ub2Rlc1tpXS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLm1vdmUgPSBmdW5jdGlvbihub2RlLCBkZXN0aW5hdGlvbikgeworICAgICAgLy8gQ29uZGl0aW9uczoKKyAgICAgIC8vIDE6ICtub2RlKyBzaG91bGQgbm90IGJlIGluc2VydGVkIGFzIGEgY2hpbGQgb2YgK25vZGUrIGl0c2VsZi4KKyAgICAgIC8vIDI6ICtkZXN0aW5hdGlvbisgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyArbm9kZSsncyBjdXJyZW50IHBhcmVudCAodGhpcworICAgICAgLy8gICAgcHJldmVudHMgK25vZGUrIGZyb20gYmVpbmcgbW92ZWQgdG8gdGhlIHNhbWUgbG9jYXRpb24gd2hlcmUgaXQgYWxyZWFkeQorICAgICAgLy8gICAgaXMpLgorICAgICAgLy8gMzogK25vZGUrIHNob3VsZCBub3QgYmUgaW5zZXJ0ZWQgaW4gYSBsb2NhdGlvbiBpbiBhIGJyYW5jaCBpZiB0aGlzIHdvdWxkCisgICAgICAvLyAgICByZXN1bHQgaW4gK25vZGUrIGJlaW5nIGFuIGFuY2VzdG9yIG9mIGl0c2VsZi4KKyAgICAgIHZhciBub2RlUGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgICBpZiAobm9kZSAhPT0gZGVzdGluYXRpb24gJiYgZGVzdGluYXRpb24uaWQgIT09IG5vZGUucGFyZW50SWQgJiYgJC5pbkFycmF5KG5vZGUsIGRlc3RpbmF0aW9uLmFuY2VzdG9ycygpKSA9PT0gLTEpIHsKKyAgICAgICAgbm9kZS5zZXRQYXJlbnQoZGVzdGluYXRpb24pOworICAgICAgICB0aGlzLl9tb3ZlUm93cyhub2RlLCBkZXN0aW5hdGlvbik7CisKKyAgICAgICAgLy8gUmUtcmVuZGVyIHBhcmVudE5vZGUgaWYgdGhpcyBpcyBpdHMgZmlyc3QgY2hpbGQgbm9kZSwgYW5kIHRoZXJlZm9yZQorICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdGhlIGV4cGFuZGVyIHlldC4KKyAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSgpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSgpLnJlbmRlcigpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmKG5vZGVQYXJlbnQpeworICAgICAgICBub2RlUGFyZW50LnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworICAgICAgfQorICAgICAgaWYobm9kZS5wYXJlbnROb2RlKCkpeworICAgICAgICBub2RlLnBhcmVudE5vZGUoKS51cGRhdGVCcmFuY2hMZWFmQ2xhc3MoKTsKKyAgICAgIH0KKyAgICAgIG5vZGUudXBkYXRlQnJhbmNoTGVhZkNsYXNzKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUucmVtb3ZlTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIC8vIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhbGwgZGVzY2VuZGFudHMgb2YgK25vZGUrCisgICAgICB0aGlzLnVubG9hZEJyYW5jaChub2RlKTsKKworICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBET00gKDx0cj4pCisgICAgICBub2RlLnJvdy5yZW1vdmUoKTsKKworICAgICAgLy8gQ2xlYW4gdXAgVHJlZSBvYmplY3QgKHNvIE5vZGUgb2JqZWN0cyBhcmUgR0MtZWQpCisgICAgICBkZWxldGUgdGhpcy50cmVlW25vZGUuaWRdOworICAgICAgdGhpcy5ub2Rlcy5zcGxpY2UoJC5pbkFycmF5KG5vZGUsIHRoaXMubm9kZXMpLCAxKTsKKyAgICB9CisKKyAgICBUcmVlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciByb290LCBfaSwgX2xlbiwgX3JlZjsKKyAgICAgIF9yZWYgPSB0aGlzLnJvb3RzOworICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CisgICAgICAgIHJvb3QgPSBfcmVmW19pXTsKKworICAgICAgICAvLyBOYW1pbmcgaXMgY29uZnVzaW5nIChzaG93L3JlbmRlcikuIEkgZG8gbm90IGNhbGwgcmVuZGVyIG9uIG5vZGUgZnJvbQorICAgICAgICAvLyBoZXJlLgorICAgICAgICByb290LnNob3coKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH07CisKKyAgICBUcmVlLnByb3RvdHlwZS5zb3J0QnJhbmNoID0gZnVuY3Rpb24obm9kZSwgc29ydEZ1bikgeworICAgICAgLy8gRmlyc3Qgc29ydCBpbnRlcm5hbCBhcnJheSBvZiBjaGlsZHJlbgorICAgICAgbm9kZS5jaGlsZHJlbi5zb3J0KHNvcnRGdW4pOworCisgICAgICAvLyBOZXh0IHJlbmRlciByb3dzIGluIGNvcnJlY3Qgb3JkZXIgb24gcGFnZQorICAgICAgdGhpcy5fc29ydENoaWxkUm93cyhub2RlKTsKKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKworICAgIFRyZWUucHJvdG90eXBlLnVubG9hZEJyYW5jaCA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIHZhciBjaGlsZHJlbiwgaTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhpcy5yZW1vdmVOb2RlKG5vZGUuY2hpbGRyZW5baV0pOworICAgICAgfQorCisgICAgICAvLyBSZXNldCBub2RlJ3MgY29sbGVjdGlvbiBvZiBjaGlsZHJlbgorICAgICAgbm9kZS5jaGlsZHJlbiA9IFtdOworCisgICAgICBub2RlLnVwZGF0ZUJyYW5jaExlYWZDbGFzcygpOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworCisgICAgVHJlZS5wcm90b3R5cGUuX21vdmVSb3dzID0gZnVuY3Rpb24obm9kZSwgZGVzdGluYXRpb24pIHsKKyAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sIGk7CisKKyAgICAgIG5vZGUucm93Lmluc2VydEFmdGVyKGRlc3RpbmF0aW9uLnJvdyk7CisgICAgICBub2RlLnJlbmRlcigpOworCisgICAgICAvLyBMb29wIGJhY2t3YXJkcyB0aHJvdWdoIGNoaWxkcmVuIHRvIGhhdmUgdGhlbSBlbmQgdXAgb24gVUkgaW4gY29ycmVjdAorICAgICAgLy8gb3JkZXIgKHNlZSAjMTEyKQorICAgICAgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdGhpcy5fbW92ZVJvd3MoY2hpbGRyZW5baV0sIG5vZGUpOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsIF9tb3ZlUm93cyBjYXNlLCBtb3ZlIGNoaWxkcmVuIHRvIGl0c2VsZiB0byBmb3JjZSBzb3J0aW5nCisgICAgVHJlZS5wcm90b3R5cGUuX3NvcnRDaGlsZFJvd3MgPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7CisgICAgICByZXR1cm4gdGhpcy5fbW92ZVJvd3MocGFyZW50Tm9kZSwgcGFyZW50Tm9kZSk7CisgICAgfTsKKworICAgIHJldHVybiBUcmVlOworICB9KSgpOworCisgIC8vIGpRdWVyeSBQbHVnaW4KKyAgbWV0aG9kcyA9IHsKKyAgICBpbml0OiBmdW5jdGlvbihvcHRpb25zLCBmb3JjZSkgeworICAgICAgdmFyIHNldHRpbmdzOworCisgICAgICBzZXR0aW5ncyA9ICQuZXh0ZW5kKHsKKyAgICAgICAgYnJhbmNoQXR0cjogInR0QnJhbmNoIiwKKyAgICAgICAgY2xpY2thYmxlTm9kZU5hbWVzOiBmYWxzZSwKKyAgICAgICAgY29sdW1uOiAwLAorICAgICAgICBjb2x1bW5FbFR5cGU6ICJ0ZCIsIC8vIGkuZS4gJ3RkJywgJ3RoJyBvciAndGQsdGgnCisgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLAorICAgICAgICBleHBhbmRlclRlbXBsYXRlOiAiPGEgaHJlZj0nIyc+Jm5ic3A7PC9hPiIsCisgICAgICAgIGluZGVudDogMTksCisgICAgICAgIGluZGVudGVyVGVtcGxhdGU6ICI8c3BhbiBjbGFzcz0naW5kZW50ZXInPjwvc3Bhbj4iLAorICAgICAgICBpbml0aWFsU3RhdGU6ICJjb2xsYXBzZWQiLAorICAgICAgICBub2RlSWRBdHRyOiAidHRJZCIsIC8vIG1hcHMgdG8gZGF0YS10dC1pZAorICAgICAgICBwYXJlbnRJZEF0dHI6ICJ0dFBhcmVudElkIiwgLy8gbWFwcyB0byBkYXRhLXR0LXBhcmVudC1pZAorICAgICAgICBzdHJpbmdFeHBhbmQ6ICJFeHBhbmQiLAorICAgICAgICBzdHJpbmdDb2xsYXBzZTogIkNvbGxhcHNlIiwKKworICAgICAgICAvLyBFdmVudHMKKyAgICAgICAgb25Jbml0aWFsaXplZDogbnVsbCwKKyAgICAgICAgb25Ob2RlQ29sbGFwc2U6IG51bGwsCisgICAgICAgIG9uTm9kZUV4cGFuZDogbnVsbCwKKyAgICAgICAgb25Ob2RlSW5pdGlhbGl6ZWQ6IG51bGwKKyAgICAgIH0sIG9wdGlvbnMpOworCisgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWwgPSAkKHRoaXMpLCB0cmVlOworCisgICAgICAgIGlmIChmb3JjZSB8fCBlbC5kYXRhKCJ0cmVldGFibGUiKSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgdHJlZSA9IG5ldyBUcmVlKHRoaXMsIHNldHRpbmdzKTsKKyAgICAgICAgICB0cmVlLmxvYWRSb3dzKHRoaXMucm93cykucmVuZGVyKCk7CisKKyAgICAgICAgICBlbC5hZGRDbGFzcygidHJlZXRhYmxlIikuZGF0YSgidHJlZXRhYmxlIiwgdHJlZSk7CisKKyAgICAgICAgICBpZiAoc2V0dGluZ3Mub25Jbml0aWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXR0aW5ncy5vbkluaXRpYWxpemVkLmFwcGx5KHRyZWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbDsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAkKHRoaXMpLnJlbW92ZURhdGEoInRyZWV0YWJsZSIpLnJlbW92ZUNsYXNzKCJ0cmVldGFibGUiKTsKKyAgICAgIH0pOworICAgIH0sCisKKyAgICBjb2xsYXBzZUFsbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmNvbGxhcHNlQWxsKCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgY29sbGFwc2VOb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICBub2RlLmNvbGxhcHNlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGV4cGFuZEFsbDogZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLmV4cGFuZEFsbCgpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGV4cGFuZE5vZGU6IGZ1bmN0aW9uKGlkKSB7CisgICAgICB2YXIgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtpZF07CisKKyAgICAgIGlmIChub2RlKSB7CisgICAgICAgIGlmICghbm9kZS5pbml0aWFsaXplZCkgeworICAgICAgICAgIG5vZGUuX2luaXRpYWxpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vZGUuZXhwYW5kKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGxvYWRCcmFuY2g6IGZ1bmN0aW9uKG5vZGUsIHJvd3MpIHsKKyAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuc2V0dGluZ3MsCisgICAgICAgICAgdHJlZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZTsKKworICAgICAgLy8gVE9ETyBTd2l0Y2ggdG8gJC5wYXJzZUhUTUwKKyAgICAgIHJvd3MgPSAkKHJvd3MpOworCisgICAgICBpZiAobm9kZSA9PSBudWxsKSB7IC8vIEluc2VydGluZyBuZXcgcm9vdCBub2RlcworICAgICAgICB0aGlzLmFwcGVuZChyb3dzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBsYXN0Tm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikuZmluZExhc3ROb2RlKG5vZGUpOworICAgICAgICByb3dzLmluc2VydEFmdGVyKGxhc3ROb2RlLnJvdyk7CisgICAgICB9CisKKyAgICAgIHRoaXMuZGF0YSgidHJlZXRhYmxlIikubG9hZFJvd3Mocm93cyk7CisKKyAgICAgIC8vIE1ha2Ugc3VyZSBub2RlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQKKyAgICAgIHJvd3MuZmlsdGVyKCJ0ciIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHRyZWVbJCh0aGlzKS5kYXRhKHNldHRpbmdzLm5vZGVJZEF0dHIpXS5zaG93KCk7CisgICAgICB9KTsKKworICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAvLyBSZS1yZW5kZXIgcGFyZW50IHRvIGVuc3VyZSBleHBhbmRlciBpY29uIGlzIHNob3duICgjNzkpCisgICAgICAgIG5vZGUucmVuZGVyKCkuZXhwYW5kKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBtb3ZlOiBmdW5jdGlvbihub2RlSWQsIGRlc3RpbmF0aW9uSWQpIHsKKyAgICAgIHZhciBkZXN0aW5hdGlvbiwgbm9kZTsKKworICAgICAgbm9kZSA9IHRoaXMuZGF0YSgidHJlZXRhYmxlIikudHJlZVtub2RlSWRdOworICAgICAgZGVzdGluYXRpb24gPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbZGVzdGluYXRpb25JZF07CisgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLm1vdmUobm9kZSwgZGVzdGluYXRpb24pOworCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgbm9kZTogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHJldHVybiB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworICAgIH0sCisKKyAgICByZW1vdmVOb2RlOiBmdW5jdGlvbihpZCkgeworICAgICAgdmFyIG5vZGUgPSB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnRyZWVbaWRdOworCisgICAgICBpZiAobm9kZSkgeworICAgICAgICB0aGlzLmRhdGEoInRyZWV0YWJsZSIpLnJlbW92ZU5vZGUobm9kZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbm9kZSAnIiArIGlkICsgIiciKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHJldmVhbDogZnVuY3Rpb24oaWQpIHsKKyAgICAgIHZhciBub2RlID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS50cmVlW2lkXTsKKworICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgbm9kZS5yZXZlYWwoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBub2RlICciICsgaWQgKyAiJyIpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgc29ydEJyYW5jaDogZnVuY3Rpb24obm9kZSwgY29sdW1uT3JGdW5jdGlvbikgeworICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5zZXR0aW5ncywKKyAgICAgICAgICBwcmVwVmFsdWUsCisgICAgICAgICAgc29ydEZ1bjsKKworICAgICAgY29sdW1uT3JGdW5jdGlvbiA9IGNvbHVtbk9yRnVuY3Rpb24gfHwgc2V0dGluZ3MuY29sdW1uOworICAgICAgc29ydEZ1biA9IGNvbHVtbk9yRnVuY3Rpb247CisKKyAgICAgIGlmICgkLmlzTnVtZXJpYyhjb2x1bW5PckZ1bmN0aW9uKSkgeworICAgICAgICBzb3J0RnVuID0gZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgIHZhciBleHRyYWN0VmFsdWUsIHZhbEEsIHZhbEI7CisKKyAgICAgICAgICBleHRyYWN0VmFsdWUgPSBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdmFsID0gbm9kZS5yb3cuZmluZCgidGQ6ZXEoIiArIGNvbHVtbk9yRnVuY3Rpb24gKyAiKSIpLnRleHQoKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSB0cmFpbGluZy9sZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHVzZSB1cHBlcmNhc2UgdmFsdWVzIGZvcgorICAgICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBvcmRlcmluZworICAgICAgICAgICAgcmV0dXJuICQudHJpbSh2YWwpLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFsQSA9IGV4dHJhY3RWYWx1ZShhKTsKKyAgICAgICAgICB2YWxCID0gZXh0cmFjdFZhbHVlKGIpOworCisgICAgICAgICAgaWYgKHZhbEEgPCB2YWxCKSByZXR1cm4gLTE7CisgICAgICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gMTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS5zb3J0QnJhbmNoKG5vZGUsIHNvcnRGdW4pOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHVubG9hZEJyYW5jaDogZnVuY3Rpb24obm9kZSkgeworICAgICAgdGhpcy5kYXRhKCJ0cmVldGFibGUiKS51bmxvYWRCcmFuY2gobm9kZSk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgIH07CisKKyAgJC5mbi50cmVldGFibGUgPSBmdW5jdGlvbihtZXRob2QpIHsKKyAgICBpZiAobWV0aG9kc1ttZXRob2RdKSB7CisgICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIG1ldGhvZCA9PT0gJ29iamVjdCcgfHwgIW1ldGhvZCkgeworICAgICAgcmV0dXJuIG1ldGhvZHMuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJC5lcnJvcigiTWV0aG9kICIgKyBtZXRob2QgKyAiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS50cmVldGFibGUiKTsKKyAgICB9CisgIH07CisKKyAgLy8gRXhwb3NlIGNsYXNzZXMgdG8gd29ybGQKKyAgdGhpcy5UcmVlVGFibGUgfHwgKHRoaXMuVHJlZVRhYmxlID0ge30pOworICB0aGlzLlRyZWVUYWJsZS5Ob2RlID0gTm9kZTsKKyAgdGhpcy5UcmVlVGFibGUuVHJlZSA9IFRyZWU7Cit9KS5jYWxsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllckJ0bi5qcyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJCdG4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1MDlmOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJCdG4uanMKQEAgLTAsMCArMSw3NyBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBsYXllckJ0bnNJbml0KGN0eCkgeworCisgIC8qIFJlbW92ZSBhbnkgY3VycmVudCBiaW5kaW5ncyB0byBhdm9pZCBkdXBsaWNhdGVkIGJpbmRzICovCisgICQoIi5sYXllcmJ0biIpLnVuYmluZCgnY2xpY2snKTsKKworICAkKCIubGF5ZXJidG4iKS5jbGljayhmdW5jdGlvbiAoKXsKKyAgICB2YXIgbGF5ZXJPYmogPSAkKHRoaXMpLmRhdGEoImxheWVyIik7CisgICAgdmFyIGFkZCA9ICgkKHRoaXMpLmRhdGEoJ2RpcmVjdGl2ZScpID09PSAiYWRkIik7CisgICAgdmFyIHRoaXNCdG4gPSAkKHRoaXMpOworCisgICAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyT2JqLCBhZGQsIGZ1bmN0aW9uIChsYXllckRlcHNMaXN0KXsKKyAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2cobGF5ZXJPYmosIGxheWVyRGVwc0xpc3QsIGFkZCkpOworCisgICAgICAvKiBJbi1jZWxsIG5vdGlmaWNhdGlvbiAqLworICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9ICQoJzxkaXYgaWQ9InRlbXAtaW5saW5lLW5vdGlmeSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGZvbnQtc2l6ZTogMTFweDsgbGluZS1oZWlnaHQ6IDEuMzsiIGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj4nKTsKKyAgICAgIHRoaXNCdG4ucGFyZW50KCkuYXBwZW5kKG5vdGlmaWNhdGlvbik7CisKKyAgICAgIGlmIChhZGQpeworICAgICAgICBpZiAobGF5ZXJEZXBzTGlzdC5sZW5ndGggPiAwKQorICAgICAgICAgIG5vdGlmaWNhdGlvbi50ZXh0KFN0cmluZyhsYXllckRlcHNMaXN0Lmxlbmd0aCArIDEpICsgIiBsYXllcnMgYWRkZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG5vdGlmaWNhdGlvbi50ZXh0KCIxIGxheWVyIGFkZGVkIik7CisKKyAgICAgICAgdmFyIGxheWVyQnRuc0ZhZGVPdXQgPSAkKCk7CisgICAgICAgIHZhciBsYXllckV4aXN0c0J0bkZhZGVJbiA9ICQoKTsKKworICAgICAgICBsYXllckJ0bnNGYWRlT3V0ID0gbGF5ZXJCdG5zRmFkZU91dC5hZGQoIi5sYXllci1hZGQtIiArIGxheWVyT2JqLmlkKTsKKyAgICAgICAgbGF5ZXJFeGlzdHNCdG5GYWRlSW4gPSBsYXllckV4aXN0c0J0bkZhZGVJbi5hZGQoIi5sYXllci1leGlzdHMtIiArIGxheWVyT2JqLmlkKTsKKworICAgICAgICBmb3IgKHZhciBpIGluIGxheWVyRGVwc0xpc3QpeworICAgICAgICAgIGxheWVyQnRuc0ZhZGVPdXQgPSBsYXllckJ0bnNGYWRlT3V0LmFkZCgiLmxheWVyLWFkZC0iICsgbGF5ZXJEZXBzTGlzdFtpXS5pZCk7CisgICAgICAgICAgbGF5ZXJFeGlzdHNCdG5GYWRlSW4gPSBsYXllckV4aXN0c0J0bkZhZGVJbi5hZGQoIi5sYXllci1leGlzdHMtIiArIGxheWVyRGVwc0xpc3RbaV0uaWQpOworICAgICAgICB9CisKKyAgICAgICAgbGF5ZXJCdG5zRmFkZU91dC5mYWRlT3V0KCkucHJvbWlzZSgpLmRvbmUoZnVuY3Rpb24oKXsKKyAgICAgICAgICBub3RpZmljYXRpb24uZmFkZUluKCkuZGVsYXkoNTAwKS5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAvKiBGYWRlIGluIHRoZSBidXR0b25zICovCisgICAgICAgICAgICBsYXllckV4aXN0c0J0bkZhZGVJbi5mYWRlSW4oKTsKKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5yZW1vdmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBub3RpZmljYXRpb24udGV4dCgiMSBsYXllciBkZWxldGVkIik7CisgICAgICAgIC8qIERlbGV0aW5nIGEgbGF5ZXIgd2Ugb25seSBoYW5sZGUgdGhlIG9uZSBidXR0b24gKi8KKyAgICAgICAgdGhpc0J0bi5mYWRlT3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgbm90aWZpY2F0aW9uLmZhZGVJbigpLmRlbGF5KDUwMCkuZmFkZU91dChmdW5jdGlvbigpeworICAgICAgICAgICAgJCgiLmxheWVyLWFkZC0iICsgbGF5ZXJPYmouaWQpLmZhZGVJbigpOworICAgICAgICAgICAgbm90aWZpY2F0aW9uLnJlbW92ZSgpOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0KKworICAgIH0pOworICB9KTsKKworICAkKCIuYnVpbGQtcmVjaXBlLWJ0biIpLnVuYmluZCgnY2xpY2snKTsKKyAgJCgiLmJ1aWxkLXJlY2lwZS1idG4iKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgdmFyIHJlY2lwZSA9ICQodGhpcykuZGF0YSgncmVjaXBlLW5hbWUnKTsKKworICAgIGxpYnRvYXN0ZXIuc3RhcnRBQnVpbGQobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCwKKyAgICAgIGxpYnRvYXN0ZXIuY3R4LnByb2plY3RJZCwgcmVjaXBlLAorICAgICAgZnVuY3Rpb24oKXsKKyAgICAgICAgLyogU3VjY2VzcyAqLworICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICAgIH0pOworICB9KTsKKworICAvKiBTZXR1cCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgYnV0dG9ucyAqLworCisgIGZvciAodmFyIGkgaW4gY3R4LnByb2plY3RMYXllcnMpeworICAgICAgJCgiLmxheWVyLWV4aXN0cy0iICsgY3R4LnByb2plY3RMYXllcnNbaV0pLnNob3coKTsKKyAgICAgICQoIi5sYXllci1hZGQtIiArIGN0eC5wcm9qZWN0TGF5ZXJzW2ldKS5oaWRlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJEZXBzTW9kYWwuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNWY5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xheWVyRGVwc01vZGFsLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBsYXllcjogT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGxheWVyIHsgaWQ6IC4uIG5hbWU6IC4uLiB1cmwgfQorICogZGVwZW5kZW5jaWVzOiBhcnJheSBvZiBkZXBlbmRlbmN5IGxheWVyIG9iamVjdHMgeyBpZDogLi4gbmFtZTogLi59CisgKiB0aXRsZTogb3B0aW9uYWwgb3ZlcnJpZGUgZm9yIHRpdGxlCisgKiBib2R5OiBvcHRpb25hbCBvdmVycmlkZSBmb3IgYm9keQorICogYWRkVG9Qcm9qZWN0OiBXaGV0aGVyIHRvIGFkZCBsYXllcnMgdG8gcHJvamVjdCBvbiBhY2NlcHQKKyAqIHN1Y2Nlc3NBZGQ6IGZ1bmN0aW9uIHRvIHJ1biBvbiBzdWNjZXNzCisgKi8KK2Z1bmN0aW9uIHNob3dMYXllckRlcHNNb2RhbChsYXllciwgZGVwZW5kZW5jaWVzLCB0aXRsZSwgYm9keSwgYWRkVG9Qcm9qZWN0LCBzdWNjZXNzQWRkKSB7CisKKyAgaWYgKCQoIiNkZXBlbmRlbmNpZXMtbW9kYWwiKS5sZW5ndGggPT09IDApIHsKKyAgICAkLmdldChsaWJ0b2FzdGVyLmN0eC5odG1sVXJsICsgIi9sYXllcl9kZXBzX21vZGFsLmh0bWwiLCBmdW5jdGlvbihodG1sKXsKKyAgICAgICQoImJvZHkiKS5hcHBlbmQoaHRtbCk7CisgICAgICBzZXR1cE1vZGFsKCk7CisgICAgfSk7CisgIH0gZWxzZSB7CisgICAgc2V0dXBNb2RhbCgpOworICB9CisKKyAgZnVuY3Rpb24gc2V0dXBNb2RhbCgpeworCisgICAgaWYgKHRpdGxlKSB7CisgICAgICAkKCcjZGVwZW5kZW5jaWVzLW1vZGFsICN0aXRsZScpLnRleHQodGl0bGUpOworICAgIH0gZWxzZSB7CisgICAgICAkKCcjZGVwZW5kZW5jaWVzLW1vZGFsICN0aXRsZScpLnRleHQobGF5ZXIubmFtZSk7CisgICAgfQorCisgICAgaWYgKGJvZHkpIHsKKyAgICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwgI2JvZHktdGV4dCIpLmh0bWwoYm9keSk7CisgICAgfSBlbHNlIHsKKyAgICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwgI2xheWVyLW5hbWUiKS50ZXh0KGxheWVyLm5hbWUpOworICAgIH0KKworICAgIHZhciBkZXBsaXN0SHRtbCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICBkZXBsaXN0SHRtbCArPSAiPGxpPjxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCI+PGlucHV0IG5hbWU9XCJkZXBlbmRlbmNpZXNcIiB2YWx1ZT1cIiI7CisgICAgICBkZXBsaXN0SHRtbCArPSBkZXBlbmRlbmNpZXNbaV0uaWQ7CisgICAgICBkZXBsaXN0SHRtbCArPSJcIiB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPVwiY2hlY2tlZFwiLz4iOworICAgICAgZGVwbGlzdEh0bWwgKz0gZGVwZW5kZW5jaWVzW2ldLm5hbWU7CisgICAgICBkZXBsaXN0SHRtbCArPSAiPC9sYWJlbD48L2xpPiI7CisgICAgfQorICAgICQoJyNkZXBlbmRlbmNpZXMtbGlzdCcpLmh0bWwoZGVwbGlzdEh0bWwpOworCisgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbCIpLmRhdGEoImRlcHMiLCBkZXBlbmRlbmNpZXMpOworCisgICAgJCgnI2RlcGVuZGVuY2llcy1tb2RhbCcpLm1vZGFsKCdzaG93Jyk7CisKKyAgICAvKiBEaXNjYXJkIHRoZSBvbGQgc3VibWlzc2lvbiBmdW5jdGlvbiAqLworICAgICQoIiNkZXBlbmRlbmNpZXMtbW9kYWwtZm9ybSIpLnVuYmluZCgnc3VibWl0Jyk7CisKKyAgICAkKCIjZGVwZW5kZW5jaWVzLW1vZGFsLWZvcm0iKS5zdWJtaXQoZnVuY3Rpb24gKGUpIHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIHZhciBzZWxlY3RlZExheWVySWRzID0gW107CisgICAgICB2YXIgc2VsZWN0ZWRMYXllcnMgPSBbXTsKKworICAgICAgJCgiaW5wdXRbbmFtZT0nZGVwZW5kZW5jaWVzJ106Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICBzZWxlY3RlZExheWVySWRzLnB1c2gocGFyc2VJbnQoJCh0aGlzKS52YWwoKSkpOworICAgICAgfSk7CisKKyAgICAgIC8qIC0xIGlzIGEgc3BlY2lhbCBkdW1teSBJZCB3aGljaCB3ZSB1c2Ugd2hlbiB0aGUgbGF5ZXIgaXNuJ3QgeWV0IGluIHRoZQorICAgICAgICogc3lzdGVtLCBub3JtYWxseSB3ZSB3b3VsZCBhZGQgdGhlIGN1cnJlbnQgbGF5ZXIgdG8gdGhlIHNlbGVjdGlvbi4KKyAgICAgICAqLworICAgICAgaWYgKGxheWVyLmlkICE9IC0xKQorICAgICAgICBzZWxlY3RlZExheWVySWRzLnB1c2gobGF5ZXIuaWQpOworCisgICAgICAvKiBGaW5kIHRoZSBzZWxlY3RlZCBsYXllciBvYmplY3RzIGZyb20gb3VyIG9yaWdpbmFsIGxpc3QgKi8KKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRMYXllcklkcy5sZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGorKykgeworICAgICAgICAgIGlmIChkZXBlbmRlbmNpZXNbal0uaWQgPT0gc2VsZWN0ZWRMYXllcklkc1tpXSkgeworICAgICAgICAgICAgc2VsZWN0ZWRMYXllcnMucHVzaChkZXBlbmRlbmNpZXNbal0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoYWRkVG9Qcm9qZWN0KSB7CisgICAgICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KHsgJ2xheWVyQWRkJzogc2VsZWN0ZWRMYXllcklkcy5qb2luKCIsIikgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGlmIChzdWNjZXNzQWRkKSB7CisgICAgICAgICAgICBzdWNjZXNzQWRkKHNlbGVjdGVkTGF5ZXJzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkFkZGluZyBsYXllcnMgdG8gcHJvamVjdCBmYWlsZWQiKTsKKyAgICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdWNjZXNzQWRkKHNlbGVjdGVkTGF5ZXJzKTsKKyAgICAgIH0KKworICAgICAgJCgnI2RlcGVuZGVuY2llcy1tb2RhbCcpLm1vZGFsKCdoaWRlJyk7CisgICAgfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9sYXllcmRldGFpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwZTgwMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvbGF5ZXJkZXRhaWxzLmpzCkBAIC0wLDAgKzEsMzkyIEBACisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGxheWVyRGV0YWlsc1BhZ2VJbml0IChjdHgpIHsKKworICB2YXIgbGF5ZXJEZXBJbnB1dCA9ICQoIiNsYXllci1kZXAtaW5wdXQiKTsKKyAgdmFyIGxheWVyRGVwQnRuID0gJCgiI2FkZC1sYXllci1kZXBlbmRlbmN5LWJ0biIpOworICB2YXIgbGF5ZXJEZXBzTGlzdCA9ICQoIiNsYXllci1kZXBzLWxpc3QiKTsKKyAgdmFyIGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbjsKKyAgdmFyIGFkZFJtTGF5ZXJCdG4gPSAkKCIjYWRkLXJlbW92ZS1sYXllci1idG4iKTsKKworICAvKiBzZXR1cCB0aGUgZGVwZW5kZW5jaWVzIHR5cGVhaGVhZCAqLworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobGF5ZXJEZXBJbnB1dCwgbGlidG9hc3Rlci5jdHgubGF5ZXJzVHlwZUFoZWFkVXJsLCB7IGluY2x1ZGVfYWRkZWQ6ICJ0cnVlIiB9LCBmdW5jdGlvbihpdGVtKXsKKyAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSBpdGVtOworCisgICAgbGF5ZXJEZXBCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgJCgiLmJyZWFkY3J1bWIgbGk6Zmlyc3QgYSIpLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAvKiBCeSBkZWZhdWx0IHRoaXMgbGluayBnb2VzIHRvIHRoZSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gcGFnZS4gSG93ZXZlcgorICAgICAqIGlmIHdlIGhhdmUgc29tZSBidWlsZHMgd2UgZ28gdGhlcmUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBocmVmCisgICAgICovCisgICAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgICBpZiAocHJqSW5mby5idWlsZHMgJiYgcHJqSW5mby5idWlsZHMubGVuZ3RoID4gMCkgeworICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGxpYnRvYXN0ZXIuY3R4LnByb2plY3RQYWdlVXJsKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gYWRkUmVtb3ZlRGVwKGRlcExheWVySWQsIGFkZCwgZG9uZUNiKSB7CisgICAgdmFyIGRhdGEgPSB7IGxheWVyX3ZlcnNpb25faWQgOiBjdHgubGF5ZXJWZXJzaW9uLmlkIH07CisgICAgaWYgKGFkZCkKKyAgICAgIGRhdGEuYWRkX2RlcCA9IGRlcExheWVySWQ7CisgICAgZWxzZQorICAgICAgZGF0YS5ybV9kZXAgPSBkZXBMYXllcklkOworCisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IGN0eC54aHJVcGRhdGVMYXllclVybCwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRvbmVDYigpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihkYXRhKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKyAgZnVuY3Rpb24gbGF5ZXJEZXBSZW1vdmVDbGljaygpIHsKKyAgICB2YXIgdG9SZW1vdmUgPSAkKHRoaXMpLnBhcmVudCgpLmRhdGEoJ2xheWVyLWlkJyk7CisgICAgdmFyIGxheWVyRGVwSXRlbSA9ICQodGhpcyk7CisKKyAgICBhZGRSZW1vdmVEZXAodG9SZW1vdmUsIGZhbHNlLCBmdW5jdGlvbigpeworICAgICAgbGF5ZXJEZXBJdGVtLnBhcmVudCgpLmZhZGVPdXQoZnVuY3Rpb24gKCl7CisgICAgICAgIGxheWVyRGVwSXRlbS5yZW1vdmUoKTsKKyAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgLyogQWRkIGRlcGVuZGVuY3kgbGF5ZXIgYnV0dG9uIGNsaWNrIGhhbmRsZXIgKi8KKyAgbGF5ZXJEZXBCdG4uY2xpY2soZnVuY3Rpb24oKXsKKyAgICBpZiAoY3VycmVudExheWVyRGVwU2VsZWN0aW9uID09PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBhZGRSZW1vdmVEZXAoY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkLCB0cnVlLCBmdW5jdGlvbigpeworICAgICAgLyogTWFrZSBhIGxpc3QgaXRlbSBmb3IgdGhlIG5ldyBsYXllciBkZXBlbmRlbmN5ICovCisgICAgICB2YXIgbmV3TGF5ZXJEZXAgPSAkKCI8bGk+PGE+PC9hPjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiRGVsZXRlXCI+PC9zcGFuPjwvbGk+Iik7CisKKyAgICAgIG5ld0xheWVyRGVwLmRhdGEoJ2xheWVyLWlkJywgY3VycmVudExheWVyRGVwU2VsZWN0aW9uLmlkKTsKKyAgICAgIG5ld0xheWVyRGVwLmNoaWxkcmVuKCJzcGFuIikudG9vbHRpcCgpOworCisgICAgICB2YXIgbGluayA9IG5ld0xheWVyRGVwLmNoaWxkcmVuKCJhIik7CisgICAgICBsaW5rLmF0dHIoImhyZWYiLCBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24ubGF5ZXJkZXRhaWx1cmwpOworICAgICAgbGluay50ZXh0KGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi5uYW1lKTsKKyAgICAgIGxpbmsudG9vbHRpcCh7dGl0bGU6IGN1cnJlbnRMYXllckRlcFNlbGVjdGlvbi50b29sdGlwLCBwbGFjZW1lbnQ6ICJyaWdodCJ9KTsKKworICAgICAgLyogQ29ubmVjdCB1cCB0aGUgdGFzaCBpY29uICovCisgICAgICB2YXIgdHJhc2hJdGVtID0gbmV3TGF5ZXJEZXAuY2hpbGRyZW4oInNwYW4iKTsKKyAgICAgIHRyYXNoSXRlbS5jbGljayhsYXllckRlcFJlbW92ZUNsaWNrKTsKKworICAgICAgbGF5ZXJEZXBzTGlzdC5hcHBlbmQobmV3TGF5ZXJEZXApOworICAgICAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICovCisgICAgICBsYXllckRlcElucHV0LnZhbCgiIik7CisgICAgICBjdXJyZW50TGF5ZXJEZXBTZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAgICBsYXllckRlcEJ0bi5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgfSk7CisgIH0pOworCisgICQoIi5pY29uLXBlbmNpbCIpLmNsaWNrKGZ1bmN0aW9uICgpeworICAgIHZhciBtUGFyZW50ID0gJCh0aGlzKS5wYXJlbnQoImRkIik7CisgICAgbVBhcmVudC5wcmV2KCkuY3NzKCJtYXJnaW4tdG9wIiwgIjEwcHgiKTsKKyAgICBtUGFyZW50LmNoaWxkcmVuKCJmb3JtIikuc2xpZGVEb3duKCk7CisgICAgdmFyIGN1cnJlbnRWYWwgPSBtUGFyZW50LmNoaWxkcmVuKCIuY3VycmVudC12YWx1ZSIpOworICAgIGN1cnJlbnRWYWwuaGlkZSgpOworICAgIC8qIFNldCB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgaW5wdXQgZmllbGQgKi8KKyAgICBtUGFyZW50LmZpbmQoInRleHRhcmVhLGlucHV0IikudmFsKGN1cnJlbnRWYWwudGV4dCgpKTsKKyAgICAvKiBIaWRlcyB0aGUgIk5vdCBzZXQiIHRleHQgKi8KKyAgICBtUGFyZW50LmNoaWxkcmVuKCIubXV0ZWQiKS5oaWRlKCk7CisgICAgLyogV2UncmUgZWRpdGluZyBzbyBoaWRlIHRoZSBkZWxldGUgaWNvbiAqLworICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLmhpZGUoKTsKKyAgICBtUGFyZW50LmZpbmQoIi5jYW5jZWwiKS5zaG93KCk7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgIH0pOworCisgICQoIi5kZWxldGUtY3VycmVudC12YWx1ZSIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudCgiZGQiKTsKKyAgICBtUGFyZW50LmZpbmQoImlucHV0IikudmFsKCIiKTsKKyAgICBtUGFyZW50LmZpbmQoInRleHRhcmVhIikudmFsKCIiKTsKKyAgICBtUGFyZW50LmZpbmQoIi5jaGFuZ2UtYnRuIikuY2xpY2soKTsKKyAgfSk7CisKKyAgJCgiLmNhbmNlbCIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIG1QYXJlbnQgPSAkKHRoaXMpLnBhcmVudHMoImRkIik7CisgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgbVBhcmVudC5jaGlsZHJlbigiZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKXsKKyAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5jdXJyZW50LXZhbHVlIikuc2hvdygpOworICAgICAgLyogU2hvdyB0aGUgIk5vdCBzZXQiIHRleHQgaWYgd2UgZW5kZWQgdXAgd2l0aCBubyB2YWx1ZSAqLworICAgICAgaWYgKCFtUGFyZW50LmNoaWxkcmVuKCIuY3VycmVudC12YWx1ZSIpLmh0bWwoKSl7CisgICAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5tdXRlZCIpLmZhZGVJbigpOworICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBtUGFyZW50LmNoaWxkcmVuKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5zaG93KCk7CisgICAgICB9CisKKyAgICAgIG1QYXJlbnQuY2hpbGRyZW4oIi5pY29uLXBlbmNpbCIpLnNob3coKTsKKyAgICAgIG1QYXJlbnQucHJldigpLmNzcygibWFyZ2luLXRvcCIsICIwcHgiKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gZGVmYXVsdEFkZEJ0blRleHQoKXsKKyAgICAgIHZhciB0ZXh0ID0gIiBBZGQgdGhlICIrY3R4LmxheWVyVmVyc2lvbi5uYW1lKyIgbGF5ZXIgdG8geW91ciBwcm9qZWN0IjsKKyAgICAgIGFkZFJtTGF5ZXJCdG4udGV4dCh0ZXh0KTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICBhZGRSbUxheWVyQnRuLnJlbW92ZUNsYXNzKCJidG4tZGFuZ2VyIik7CisgIH0KKworICAkKCIjZGV0YWlscy10YWIiKS5vbignc2hvdycsIGZ1bmN0aW9uKCl7CisgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaikKKyAgICAgIGRlZmF1bHRBZGRCdG5UZXh0KCk7CisKKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICJkZXRhaWxzIjsKKyAgfSk7CisKKyAgZnVuY3Rpb24gdGFyZ2V0c1RhYlNob3coKXsKKyAgICBpZiAoIWN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqKXsKKyAgICAgIGlmIChjdHgubnVtVGFyZ2V0cyA+IDApIHsKKyAgICAgICAgdmFyIHRleHQgPSAiIEFkZCB0aGUgIitjdHgubGF5ZXJWZXJzaW9uLm5hbWUrIiBsYXllciB0byB5b3VyIHByb2plY3QgIisKKyAgICAgICAgICAidG8gZW5hYmxlIHRoZXNlIHJlY2lwZXMiOworICAgICAgICBhZGRSbUxheWVyQnRuLnRleHQodGV4dCk7CisgICAgICAgIGFkZFJtTGF5ZXJCdG4ucHJlcGVuZCgiPHNwYW4gY2xhc3M9XCJpY29uLXBsdXNcIj48L3NwYW4+Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOworICAgICAgfQorICAgIH0KKworICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gInJlY2lwZXMiOworICB9CisKKyAgJCgiI3JlY2lwZXN0YWJsZSIpLm9uKCd0YWJsZS1kb25lJywgZnVuY3Rpb24oZSwgdG90YWwsIHRhYmxlUGFyYW1zKXsKKyAgICBjdHgubnVtVGFyZ2V0cyA9IHRvdGFsOworCisgICAgaWYgKHRvdGFsID09PSAwICYmICF0YWJsZVBhcmFtcy5zZWFyY2gpIHsKKyAgICAgICQoIiNuby1yZWNpcGVzLXlldCIpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgJCgiI25vLXJlY2lwZXMteWV0IikuaGlkZSgpOworICAgIH0KKworICAgICQoIiN0YXJnZXRzLXRhYiIpLnJlbW92ZUNsYXNzKCJtdXRlZCIpOworICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gIiNyZWNpcGVzIil7CisgICAgICAvKiByZSBydW4gdGhlIG1hY2hpbmVzVGFiU2hvdyB0byB1cGRhdGUgdGhlIHRleHQgKi8KKyAgICAgIHRhcmdldHNUYWJTaG93KCk7CisgICAgfQorICB9KTsKKworICAkKCIjbWFjaGluZXN0YWJsZSIpLm9uKCd0YWJsZS1kb25lJywgZnVuY3Rpb24oZSwgdG90YWwsIHRhYmxlUGFyYW1zKXsKKyAgICBjdHgubnVtTWFjaGluZXMgPSB0b3RhbDsKKworICAgIGlmICh0b3RhbCA9PT0gMCAmJiAhdGFibGVQYXJhbXMuc2VhcmNoKQorICAgICAgJCgiI25vLW1hY2hpbmVzLXlldCIpLnNob3coKTsKKyAgICBlbHNlCisgICAgICAkKCIjbm8tbWFjaGluZXMteWV0IikuaGlkZSgpOworCisgICAgJCgiI21hY2hpbmVzLXRhYiIpLnJlbW92ZUNsYXNzKCJtdXRlZCIpOworICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCA9PT0gIiNtYWNoaW5lcyIpeworICAgICAgLyogcmUgcnVuIHRoZSBtYWNoaW5lc1RhYlNob3cgdG8gdXBkYXRlIHRoZSB0ZXh0ICovCisgICAgICBtYWNoaW5lc1RhYlNob3coKTsKKyAgICB9CisKKyAgICAkKCIuc2VsZWN0LW1hY2hpbmUtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICBpZiAoJCh0aGlzKS5hdHRyKCJkaXNhYmxlZCIpID09PSAiZGlzYWJsZWQiKQorICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfSk7CisKKyAgfSk7CisKKyAgJCgiI3RhcmdldHMtdGFiIikub24oJ3Nob3cnLCB0YXJnZXRzVGFiU2hvdyk7CisKKyAgZnVuY3Rpb24gbWFjaGluZXNUYWJTaG93KCl7CisgICAgaWYgKCFjdHgubGF5ZXJWZXJzaW9uLmluQ3VycmVudFByaikgeworICAgICAgaWYgKGN0eC5udW1NYWNoaW5lcyA+IDApeworICAgICAgICB2YXIgdGV4dCA9ICIgQWRkIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIHRvIHlvdXIgcHJvamVjdCAiICsKKyAgICAgICAgICAidG8gZW5hYmxlIHRoZXNlIG1hY2hpbmVzIjsKKyAgICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KHRleHQpOworICAgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi1wbHVzXCI+PC9zcGFuPiIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmYXVsdEFkZEJ0blRleHQoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICJtYWNoaW5lcyI7CisgIH0KKworICAkKCIjbWFjaGluZXMtdGFiIikub24oJ3Nob3cnLCBtYWNoaW5lc1RhYlNob3cpOworCisgICQoIi5wYWdlc2l6ZSIpLmNoYW5nZShmdW5jdGlvbigpeworICAgIHZhciBzZWFyY2ggPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisgICAgc2VhcmNoLmxpbWl0ID0gdGhpcy52YWx1ZTsKKworICAgIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPSBsaWJ0b2FzdGVyLmR1bXBzVXJsUGFyYW1zKHNlYXJjaCk7CisgIH0pOworCisgIC8qIEVuYWJsZXMgdGhlIEJ1aWxkIHRhcmdldCBhbmQgU2VsZWN0IE1hY2hpbmUgYnV0dG9ucyBhbmQgc3dpdGNoZXMgdGhlCisgICAqIGFkZC9yZW1vdmUgYnV0dG9uCisgICAqLworICBmdW5jdGlvbiBzZXRMYXllckluQ3VycmVudFByaihhZGRlZCkgeworICAgIGN0eC5sYXllclZlcnNpb24uaW5DdXJyZW50UHJqID0gYWRkZWQ7CisKKyAgICBpZiAoYWRkZWQpeworICAgICAgLyogZW5hYmxlIGFuZCBzd2l0Y2ggYWxsIHRoZSBidXR0b24gc3RhdGVzICovCisgICAgICAkKCIuYnVpbGQtdGFyZ2V0LWJ0biIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAkKCIuc2VsZWN0LW1hY2hpbmUtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4uYWRkQ2xhc3MoImJ0bi1kYW5nZXIiKTsKKyAgICAgIGFkZFJtTGF5ZXJCdG4uZGF0YSgnZGlyZWN0aXZlJywgInJlbW92ZSIpOworICAgICAgYWRkUm1MYXllckJ0bi50ZXh0KCIgRGVsZXRlIHRoZSAiK2N0eC5sYXllclZlcnNpb24ubmFtZSsiIGxheWVyIGZyb20geW91ciBwcm9qZWN0Iik7CisgICAgICBhZGRSbUxheWVyQnRuLnByZXBlbmQoIjxzcGFuIGNsYXNzPVwiaWNvbi10cmFzaFwiPjwvc3Bhbj4iKTsKKworICAgIH0gZWxzZSB7CisgICAgICAvKiBkaXNhYmxlIGFuZCBzd2l0Y2ggYWxsIHRoZSBidXR0b24gc3RhdGVzICovCisgICAgICAkKCIuYnVpbGQtdGFyZ2V0LWJ0biIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICQoIi5zZWxlY3QtbWFjaGluZS1idG4iKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgYWRkUm1MYXllckJ0bi5yZW1vdmVDbGFzcygiYnRuLWRhbmdlciIpOworICAgICAgYWRkUm1MYXllckJ0bi5kYXRhKCdkaXJlY3RpdmUnLCAiYWRkIik7CisKKyAgICAgIC8qICJzcGVjaWFsIiBoYW5kbGVyIHNvIHRoYXQgd2UgZ2V0IHRoZSBjb3JyZWN0IGJ1dHRvbiB0ZXh0IHdoaWNoIGRlcGVuZHMKKyAgICAgICAqIG9uIHdoaWNoIHRhYiBpcyBjdXJyZW50bHkgdmlzaWJsZS4gVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCBqdXN0IGNhbGwKKyAgICAgICAqIHRhYignc2hvdycpIGFzIGlmIGl0J3MgYWxyZWFkeSB2aXNpYmxlIGl0IGRvZXNuJ3QgcnVuIHRoZSBldmVudC4KKyAgICAgICAqLworICAgICAgc3dpdGNoICgkKCIubmF2LXBpbGxzIC5hY3RpdmUgYSIpLnByb3AoJ2lkJykpeworICAgICAgICBjYXNlICdtYWNoaW5lcy10YWInOgorICAgICAgICAgIG1hY2hpbmVzVGFiU2hvdygpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0YXJnZXRzLXRhYic6CisgICAgICAgICAgdGFyZ2V0c1RhYlNob3coKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBkZWZhdWx0QWRkQnRuVGV4dCgpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorCisgICQoIiNkaXNtaXNzLWFsZXJ0IikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKHRoaXMpLnBhcmVudCgpLmZhZGVPdXQoKTsKKyAgfSk7CisKKyAgLyogQWRkIG9yIHJlbW92ZSB0aGlzIGxheWVyIGZyb20gdGhlIHByb2plY3QgKi8KKyAgYWRkUm1MYXllckJ0bi5jbGljayhmdW5jdGlvbigpIHsKKworICAgIHZhciBhZGQgPSAoJCh0aGlzKS5kYXRhKCdkaXJlY3RpdmUnKSA9PT0gImFkZCIpOworCisgICAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGN0eC5sYXllclZlcnNpb24sIGFkZCwgZnVuY3Rpb24gKGxheWVyc0xpc3QpeworICAgICAgdmFyIGFsZXJ0TXNnID0gJCgiI2FsZXJ0LW1zZyIpOworICAgICAgYWxlcnRNc2cuaHRtbChsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2coY3R4LmxheWVyVmVyc2lvbiwgbGF5ZXJzTGlzdCwgYWRkKSk7CisKKyAgICAgIHNldExheWVySW5DdXJyZW50UHJqKGFkZCk7CisKKyAgICAgICQoIiNhbGVydC1hcmVhIikuc2hvdygpOworICAgIH0pOworICB9KTsKKworICAvKiBIYW5kbGVyIGZvciBhbGwgb2YgdGhlIENoYW5nZSBidXR0b25zICovCisgICQoIi5jaGFuZ2UtYnRuIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICB2YXIgbVBhcmVudCA9ICQodGhpcykucGFyZW50KCk7CisgICAgdmFyIHByb3AgPSAkKHRoaXMpLmRhdGEoJ2xheWVyLXByb3AnKTsKKworICAgIC8qIFdlIGhhdmUgaW5wdXRzLCBzZWxlY3QgYW5kIHRleHRhcmVhcyB0byBwb3RlbnRpYWxseSBncmFiIHRoZSB2YWx1ZQorICAgICAqIGZyb20uCisgICAgICovCisgICAgdmFyIGVudHJ5RWxlbWVudCA9IG1QYXJlbnQuZmluZCgiaW5wdXQiKTsKKyAgICBpZiAoZW50cnlFbGVtZW50Lmxlbmd0aCA9PT0gMCkKKyAgICAgIGVudHJ5RWxlbWVudCA9IG1QYXJlbnQuZmluZCgidGV4dGFyZWEiKTsKKyAgICBpZiAoZW50cnlFbGVtZW50Lmxlbmd0aCA9PT0gMCkgeworICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBlbGVtZW50IHRvIGdldCBkYXRhIGZyb20gZm9yIHRoaXMgY2hhbmdlIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIGRhdGEgPSB7IGxheWVyX3ZlcnNpb25faWQ6IGN0eC5sYXllclZlcnNpb24uaWQgfTsKKyAgICBkYXRhW3Byb3BdID0gZW50cnlFbGVtZW50LnZhbCgpOworCisgICAgJC5hamF4KHsKKyAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICB1cmw6IGN0eC54aHJVcGRhdGVMYXllclVybCwKKyAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oZGF0YS5lcnJvcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIHN1Y2Nlc3MgbGF5ZXIgcHJvcGVydHkgY2hhbmdlZCAqLworICAgICAgICAgICAgdmFyIGlucHV0QXJlYSA9IG1QYXJlbnQucGFyZW50cygiZGQiKTsKKyAgICAgICAgICAgIHZhciB0ZXh0OworCisgICAgICAgICAgICB0ZXh0ID0gZW50cnlFbGVtZW50LnZhbCgpOworCisgICAgICAgICAgICAvKiBIaWRlIHRoZSAiTm90IHNldCIgdGV4dCBpZiBpdCdzIHZpc2libGUgKi8KKyAgICAgICAgICAgIGlucHV0QXJlYS5maW5kKCIubXV0ZWQiKS5oaWRlKCk7CisgICAgICAgICAgICBpbnB1dEFyZWEuZmluZCgiLmN1cnJlbnQtdmFsdWUiKS50ZXh0KHRleHQpOworICAgICAgICAgICAgLyogU2FtZSBiZWhhdmlvdXIgYXMgY2FuY2VsIGluIHRoYXQgd2UgaGlkZSB0aGUgZm9ybS9zaG93IGN1cnJlbnQKKyAgICAgICAgICAgICAqIHZhbHVlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpbnB1dEFyZWEuZmluZCgiLmNhbmNlbCIpLmNsaWNrKCk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS53YXJuKGRhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0pOworCisgIC8qIERpc2FibGUgdGhlIGNoYW5nZSBidXR0b24gd2hlbiB3ZSBoYXZlIG5vIGRhdGEgaW4gdGhlIGlucHV0ICovCisgICQoImRsIGlucHV0LCBkbCB0ZXh0YXJlYSIpLm9uKCJpbnB1dCIsZnVuY3Rpb24oKSB7CisgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID09PSAwKQorICAgICAgJCh0aGlzKS5wYXJlbnQoKS5jaGlsZHJlbigiLmNoYW5nZS1idG4iKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgIGVsc2UKKyAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oIi5jaGFuZ2UtYnRuIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgfSk7CisKKyAgLyogVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSBkdCdzIGRkIGhhcyBkYXRhIGluIGl0IG9yIGlmIHRoZSBjaGFuZ2UgZGF0YQorICAgKiBmb3JtIGlzIHZpc2libGUsIG90aGVyd2lzZSBoaWRlIGl0CisgICAqLworICAkKCJkbCIpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbiAoKXsKKyAgICBpZiAoJCh0aGlzKS5pcygiZHQiKSkgeworICAgICAgdmFyIGRkID0gJCh0aGlzKS5uZXh0KCJkZCIpOworICAgICAgaWYgKCFkZC5jaGlsZHJlbigiZm9ybTp2aXNpYmxlIil8fCAhZGQuZmluZCgiLmN1cnJlbnQtdmFsdWUiKS5odG1sKCkpeworICAgICAgICBpZiAoY3R4LmxheWVyVmVyc2lvbi5zb3VyY2VJZCA9PSAzKXsKKyAgICAgICAgLyogVGhlcmUncyBubyBjdXJyZW50IHZhbHVlIGFuZCB0aGUgbGF5ZXIgaXMgZWRpdGFibGUKKyAgICAgICAgICogc28gc2hvdyB0aGUgIk5vdCBzZXQiIGFuZCBoaWRlIHRoZSBkZWxldGUgaWNvbgorICAgICAgICAgKi8KKyAgICAgICAgZGQuZmluZCgiLm11dGVkIikuc2hvdygpOworICAgICAgICBkZC5maW5kKCIuZGVsZXRlLWN1cnJlbnQtdmFsdWUiKS5oaWRlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogV2UncmUgbm90IHZpZXdpbmcgYW4gZWRpdGFibGUgbGF5ZXIgc28gaGlkZSB0aGUgZW1wdHkgZGQvZGwgcGFpciAqLworICAgICAgICAgICQodGhpcykuaGlkZSgpOworICAgICAgICAgIGRkLmhpZGUoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSk7CisKKyAgLyogSGlkZSB0aGUgcmlnaHQgY29sdW1uIGlmIGl0IGNvbnRhaW5zIG5vIGluZm9ybWF0aW9uICovCisgIGlmICgkKCJkbC5pdGVtLWluZm8iKS5jaGlsZHJlbignOnZpc2libGUnKS5sZW5ndGggPT09IDApIHsKKyAgICAkKCJkbC5pdGVtLWluZm8iKS5wYXJlbnQoKS5oaWRlKCk7CisgIH0KKworICAvKiBDbGVhciB0aGUgY3VycmVudCBzZWFyY2ggc2VsZWN0aW9uIGFuZCByZWxvYWQgdGhlIHJlc3VsdHMgKi8KKyAgJCgiLnRhcmdldC1zZWFyY2gtY2xlYXIiKS5jbGljayhmdW5jdGlvbigpeworICAgICQoIiN0YXJnZXQtc2VhcmNoIikudmFsKCIiKTsKKyAgICAkKHRoaXMpLnBhcmVudHMoImZvcm0iKS5zdWJtaXQoKTsKKyAgfSk7CisKKyAgJCgiLm1hY2hpbmUtc2VhcmNoLWNsZWFyIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAkKCIjbWFjaGluZS1zZWFyY2giKS52YWwoIiIpOworICAgICQodGhpcykucGFyZW50cygiZm9ybSIpLnN1Ym1pdCgpOworICB9KTsKKworCisgIGxheWVyRGVwc0xpc3QuZmluZCgiLmljb24tdHJhc2giKS5jbGljayhsYXllckRlcFJlbW92ZUNsaWNrKTsKKyAgbGF5ZXJEZXBzTGlzdC5maW5kKCJhIikudG9vbHRpcCgpOworICAkKCIuaWNvbi10cmFzaCIpLnRvb2x0aXAoKTsKKyAgJCgiLmNvbW1pdCIpLnRvb2x0aXAoKTsKKworfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9saWJ0b2FzdGVyLmpzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9saWJ0b2FzdGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNGY3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL2xpYnRvYXN0ZXIuanMKQEAgLTAsMCArMSw1NzQgQEAKKyJ1c2Ugc3RyaWN0IjsKKy8qIEFsbCBzaGFyZWQgZnVuY3Rpb25hbGl0eSB0byBnbyBpbiBsaWJ0b2FzdGVyIG9iamVjdC4KKyAqIFRoaXMgb2JqZWN0IHJlYWxseSBqdXN0IGhlbHBzIHJlYWRhYmlsaXR5IHNpbmNlIHdlIGNhbiB0aGVuIGhhdmUKKyAqIGEgdHJhY2VhYmxlIG5hbWVzcGFjZS4KKyAqLwordmFyIGxpYnRvYXN0ZXIgPSAoZnVuY3Rpb24gKCl7CisKKyAgLyogbWFrZVR5cGVhaGVhZCBwYXJhbWV0ZXJzCisgICAqIGVsZW1lbnRTZWxlY3RvcjogSlF1ZXJ5IGVsZW1lbnRTZWxlY3RvciBzdHJpbmcKKyAgICogeGhyVXJsOiB0aGUgdXJsIHRvIGdldCB0aGUgSlNPTiBmcm9tIGV4cGVjdHMgSlNPTiBpbiB0aGUgZm9ybToKKyAgICogIHsgImxpc3QiOiBbIHsgIm5hbWUiOiAidGVzdCIsICJkZXRhaWwiIDogImEgdGVzdCB0aGluZyIgIH0sIC4uLi4gXSB9CisgICAqIHhoclBhcmFtczogdGhlIGRhdGEvcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBnZXRKU09OIHVybCBlLmcuCisgICAqICB7ICd0eXBlJyA6ICdwcm9qZWN0cycgfSB0aGUgdGV4dCB0eXBlZCB3aWxsIGJlIHBhc3NlZCBhcyAnc2VhcmNoJy4KKyAgICogIHNlbGVjdGVkQ0I6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBhbiBpdGVtIGhhcyBiZWVuIHNlbGVjdGVkIG9uZQorICAgKiAgYXJnIG9mIHRoZSBpdGVtLgorICAgKi8KKyAgZnVuY3Rpb24gX21ha2VUeXBlYWhlYWQgKGpRRWxlbWVudCwgeGhyVXJsLCB4aHJQYXJhbXMsIHNlbGVjdGVkQ0IpIHsKKyAgICBpZiAoIXhoclVybCB8fCB4aHJVcmwubGVuZ3RoID09PSAwKQorICAgICAgdGhyb3coIk5vIHVybCB0byB0eXBlYWhlYWQgc3VwcGxpZWQiKTsKKworICAgIHZhciB4aHJSZXE7CisKKyAgICBqUUVsZW1lbnQudHlwZWFoZWFkKHsKKyAgICAgICAgc291cmNlOiBmdW5jdGlvbihxdWVyeSwgcHJvY2Vzcyl7CisgICAgICAgICAgeGhyUGFyYW1zLnNlYXJjaCA9IHF1ZXJ5OworCisgICAgICAgICAgLyogSWYgd2UgaGF2ZSBhIHJlcXVlc3QgaW4gcHJvZ3Jlc3MgZG9uJ3QgZmlyZSBvZmYgYW5vdGhlciBvbmUqLworICAgICAgICAgIGlmICh4aHJSZXEpCisgICAgICAgICAgICB4aHJSZXEuYWJvcnQoKTsKKworICAgICAgICAgIHhoclJlcSA9ICQuZ2V0SlNPTih4aHJVcmwsIHRoaXMub3B0aW9ucy54aHJQYXJhbXMsIGZ1bmN0aW9uKGRhdGEpeworICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT09ICJvayIpIHsKKyAgICAgICAgICAgICAgY29uc29sZS5sb2coIkVycm9yIGdldHRpbmcgZGF0YSBmcm9tIHNlcnZlciAiK2RhdGEuZXJyb3IpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHhoclJlcSA9IG51bGw7CisKKyAgICAgICAgICAgIHJldHVybiBwcm9jZXNzKGRhdGEucmVzdWx0cyk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIHVwZGF0ZXI6IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAgICAgICB2YXIgaXRlbU9iaiA9IHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLmRhdGEoJ2l0ZW1PYmplY3QnKTsKKyAgICAgICAgICBzZWxlY3RlZENCKGl0ZW1PYmopOworICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICB9LAorICAgICAgICBtYXRjaGVyOiBmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgaWYgKCFpdGVtLmhhc093blByb3BlcnR5KCduYW1lJykpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYW1lIHByb3BlcnR5IG1pc3NpbmcgaW4gZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQudmFsKCkubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSwKKyAgICAgICAgaGlnaGxpZ2h0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAgLyogVXNlIGpxdWVyeSB0byBlc2NhcGUgdGhlIGl0ZW0gbmFtZSBhbmQgZGV0YWlsICovCisgICAgICAgICAgdmFyIGN1cnJlbnQgPSAkKCI8c3Bhbj48L3NwYW4+IikudGV4dChpdGVtLm5hbWUgKyAnICcraXRlbS5kZXRhaWwpOworICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lmh0bWwoKTsKKworICAgICAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywgJ1xcJCYnKQorICAgICAgICAgIHJldHVybiBjdXJyZW50LnJlcGxhY2UobmV3IFJlZ0V4cCgnKCcgKyBxdWVyeSArICcpJywgJ2lnJyksIGZ1bmN0aW9uICgkMSwgbWF0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiAnPHN0cm9uZz4nICsgbWF0Y2ggKyAnPC9zdHJvbmc+JworICAgICAgICAgIH0pCisgICAgICAgIH0sCisgICAgICAgIHNvcnRlcjogZnVuY3Rpb24gKGl0ZW1zKSB7IHJldHVybiBpdGVtczsgfSwKKyAgICAgICAgeGhyVXJsOiB4aHJVcmwsCisgICAgICAgIHhoclBhcmFtczogeGhyUGFyYW1zLAorICAgICAgICB4aHJSZXE6IHhoclJlcSwKKyAgICB9KTsKKworCisgICAgLyogQ29weSBvZiBib290c3RyYXAncyByZW5kZXIgZnVuYyBidXQgc2V0cyBzZWxlY3RlZE9iamVjdCB2YWx1ZSAqLworICAgIGZ1bmN0aW9uIGN1c3RvbVJlbmRlckZ1bmMgKGl0ZW1zKSB7CisgICAgICB2YXIgdGhhdCA9IHRoaXM7CisKKyAgICAgIGl0ZW1zID0gJChpdGVtcykubWFwKGZ1bmN0aW9uIChpLCBpdGVtKSB7CisgICAgICAgIGkgPSAkKHRoYXQub3B0aW9ucy5pdGVtKS5hdHRyKCdkYXRhLXZhbHVlJywgaXRlbS5uYW1lKS5kYXRhKCdpdGVtT2JqZWN0JywgaXRlbSk7CisgICAgICAgIGkuZmluZCgnYScpLmh0bWwodGhhdC5oaWdobGlnaHRlcihpdGVtKSk7CisgICAgICAgIHJldHVybiBpWzBdOworICAgICAgfSk7CisKKyAgICAgIGl0ZW1zLmZpcnN0KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpOworICAgICAgdGhpcy4kbWVudS5odG1sKGl0ZW1zKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIGpRRWxlbWVudC5kYXRhKCd0eXBlYWhlYWQnKS5yZW5kZXIgPSBjdXN0b21SZW5kZXJGdW5jOworICB9CisKKyAgLyoKKyAgICogdXJsIC0gdGhlIHVybCBvZiB0aGUgeGhyIGJ1aWxkICovCisgIGZ1bmN0aW9uIF9zdGFydEFCdWlsZCAodXJsLCBwcm9qZWN0X2lkLCB0YXJnZXRzLCBvbnN1Y2Nlc3MsIG9uZmFpbCkgeworCisgICAgdmFyIGRhdGEgPSB7CisgICAgICBwcm9qZWN0X2lkIDogcHJvamVjdF9pZCwKKyAgICAgIHRhcmdldHMgOiB0YXJnZXRzLAorICAgIH0KKworICAgICQuYWpheCggeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIHVybDogdXJsLAorICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoX2RhdGEpIHsKKyAgICAgICAgICAvKiBObyBwcm9wZXIgcmVwb25zZSBZT0NUTyAjNzk5NQorICAgICAgICAgIGlmIChfZGF0YS5lcnJvciAhPT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeyAqLworICAgICAgICAgICAgaWYgKG9uc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBvbnN1Y2Nlc3MoX2RhdGEpOworICAgICAgICAvLyAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKCJDYWxsIGZhaWxlZCIpOworICAgICAgICAgIGNvbnNvbGUud2FybihfZGF0YSk7CisgICAgICAgICAgaWYgKG9uZmFpbCkgb25mYWlsKGRhdGEpOworICAgIH0gfSk7CisgIH0KKworICAvKiBjYW5jZWxBQnVpbGQ6CisgICAqIHVybDogcHJvamVjdGJ1aWxkcworICAgKiBidWlsZHNfaWRzOiBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBidWlsZCByZXF1ZXN0IGlkcworICAgKiBvbnN1Y2Nlc3M6IGNhbGxiYWNrIGZvciBzdWNjZXNzZnVsIGV4ZWN1dGlvbgorICAgKiBvbmZhaWw6IGNhbGxiYWNrIGZvciBmYWlsZWQgZXhlY3V0aW9uCisgICAqLworICBmdW5jdGlvbiBfY2FuY2VsQUJ1aWxkKHVybCwgYnVpbGRfaWRzLCBvbnN1Y2Nlc3MsIG9uZmFpbCl7CisgICAgJC5hamF4KCB7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiB1cmwsCisgICAgICAgIGRhdGE6IHsgJ2J1aWxkQ2FuY2VsJzogYnVpbGRfaWRzIH0sCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGlmIChfZGF0YS5lcnJvciAhPT0gIm9rIikgeworICAgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhLmVycm9yKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9uc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSBvbnN1Y2Nlc3MoX2RhdGEpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChfZGF0YSkgeworICAgICAgICAgIGNvbnNvbGUud2FybigiQ2FsbCBmYWlsZWQiKTsKKyAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEpOworICAgICAgICAgIGlmIChvbmZhaWwpIG9uZmFpbChfZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIC8qIEdldCBhIHByb2plY3QncyBjb25maWd1cmF0aW9uIGluZm8gKi8KKyAgZnVuY3Rpb24gX2dldFByb2plY3RJbmZvKHVybCwgb25zdWNjZXNzLCBvbmZhaWwpeworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICBkYXRhIDogeyBmb3JtYXQ6ICJqc29uIiB9LAorICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nIDogJC5jb29raWUoJ2NzcmZ0b2tlbicpfSwKKyAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgaWYgKF9kYXRhLmVycm9yICE9PSAib2siKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oX2RhdGEuZXJyb3IpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob25zdWNjZXNzICE9PSB1bmRlZmluZWQpIG9uc3VjY2VzcyhfZGF0YSk7CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBlcnJvcjogZnVuY3Rpb24gKF9kYXRhKSB7CisgICAgICAgICAgY29uc29sZS53YXJuKF9kYXRhKTsKKyAgICAgICAgICBpZiAob25mYWlsKSBvbmZhaWwoX2RhdGEpOworICAgICAgICB9CisgICAgfSk7CisgIH0KKworICAvKiBQcm9wZXJ0aWVzIGZvciBkYXRhIGNhbiBiZToKKyAgICogbGF5ZXJEZWwgKGNzdikKKyAgICogbGF5ZXJBZGQgKGNzdikKKyAgICogcHJvamVjdE5hbWUKKyAgICogcHJvamVjdFZlcnNpb24KKyAgICogbWFjaGluZU5hbWUKKyAgICovCisgIGZ1bmN0aW9uIF9lZGl0Q3VycmVudFByb2plY3QoZGF0YSwgb25TdWNjZXNzLCBvbkZhaWwpeworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgdXJsOiBsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCArICI/Zm9ybWF0PWpzb24iLAorICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgIGlmIChkYXRhLmVycm9yICE9ICJvayIpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuZXJyb3IpOworICAgICAgICAgICAgaWYgKG9uRmFpbCAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICBvbkZhaWwoZGF0YSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgb25TdWNjZXNzKGRhdGEpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgY29uc29sZS5sb2coIkNhbGwgZmFpbGVkIik7CisgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIF9nZXRMYXllckRlcHNGb3JQcm9qZWN0KHVybCwgb25TdWNjZXNzLCBvbkZhaWwpeworICAgIC8qIENoZWNrIGZvciBkZXBlbmRlbmNpZXMgbm90IGluIHRoZSBjdXJyZW50IHByb2plY3QgKi8KKyAgICAkLmdldEpTT04odXJsLAorICAgICAgeyBmb3JtYXQ6ICdqc29uJyB9LAorICAgICAgZnVuY3Rpb24oZGF0YSkgeworICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5lcnJvcik7CisgICAgICAgICAgaWYgKG9uRmFpbCAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgb25GYWlsKGRhdGEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBkZXBzID0ge307CisgICAgICAgICAgLyogRmlsdGVyIG91dCBsYXllciBkZXAgaWRzIHdoaWNoIGFyZSBpbiB0aGUKKyAgICAgICAgICAgKiBwcm9qZWN0IGFscmVhZHkuCisgICAgICAgICAgICovCisgICAgICAgICAgZGVwcy5saXN0ID0gZGF0YS5sYXllcmRlcHMubGlzdC5maWx0ZXIoZnVuY3Rpb24obGF5ZXJPYmopeworICAgICAgICAgICAgcmV0dXJuIChkYXRhLnByb2plY3RsYXllcnMubGFzdEluZGV4T2YobGF5ZXJPYmouaWQpIDwgMCk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBvblN1Y2Nlc3MoZGVwcyk7CisgICAgICAgIH0KKyAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBjb25zb2xlLmxvZygiRTogRmFpbGVkIHRvIG1ha2UgcmVxdWVzdCIpOworICAgIH0pOworICB9CisKKyAgLyogcGFyc2VzIHRoZSBxdWVyeSBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgd2luZG93LmxvY2F0aW9uIHRvIGFuIG9iamVjdCAqLworICBmdW5jdGlvbiBfcGFyc2VVcmxQYXJhbXMoKSB7CisgICAgdmFyIHN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cigxKTsKKyAgICB2YXIgc3RyaW5nQXJyYXkgPSBzdHJpbmcuc3BsaXQgKCImIik7CisgICAgdmFyIG9iaiA9IHt9OworCisgICAgZm9yICh2YXIgaSBpbiBzdHJpbmdBcnJheSkgeworICAgICAgdmFyIGtleVZhbCA9IHN0cmluZ0FycmF5W2ldLnNwbGl0ICgiPSIpOworICAgICAgb2JqW2tleVZhbFswXV0gPSBrZXlWYWxbMV07CisgICAgfQorCisgICAgcmV0dXJuIG9iajsKKyAgfQorCisgIC8qIHRha2VzIGEgZmxhdCBvYmplY3QgYW5kIG91dHB1dHMgaXQgYXMgYSBxdWVyeSBzdHJpbmcKKyAgICogZS5nLiB0aGUgb3V0cHV0IG9mIGR1bXBzVXJsUGFyYW1zCisgICAqLworICBmdW5jdGlvbiBfZHVtcHNVcmxQYXJhbXMob2JqKSB7CisgICAgdmFyIHN0ciA9ICI/IjsKKworICAgIGZvciAodmFyIGtleSBpbiBvYmopeworICAgICAgaWYgKCFvYmpba2V5XSkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgIHN0ciArPSBrZXkrICI9IitvYmpba2V5XS50b1N0cmluZygpOworICAgICAgc3RyICs9ICImIjsKKyAgICB9CisKKyAgICAvKiBNYWludGFpbiB0aGUgY3VycmVudCBoYXNoICovCisgICAgc3RyICs9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworCisgICAgcmV0dXJuIHN0cjsKKyAgfQorCisgIGZ1bmN0aW9uIF9hZGRSbUxheWVyKGxheWVyT2JqLCBhZGQsIGRvbmVDYil7CisgICAgaWYgKGFkZCA9PT0gdHJ1ZSkgeworICAgICAgLyogSWYgYWRkaW5nIGdldCB0aGUgZGVwcyBmb3IgdGhpcyBsYXllciAqLworICAgICAgbGlidG9hc3Rlci5nZXRMYXllckRlcHNGb3JQcm9qZWN0KGxheWVyT2JqLmxheWVyZGV0YWlsdXJsLAorICAgICAgICBmdW5jdGlvbiAobGF5ZXJzKSB7CisKKyAgICAgICAgLyogZ290IHJlc3VsdCBmb3IgZGVwZW5kZW5jaWVzICovCisgICAgICAgIGlmIChsYXllcnMubGlzdC5sZW5ndGggPT09IDApeworICAgICAgICAgIHZhciBlZGl0RGF0YSA9IHsgbGF5ZXJBZGQgOiBsYXllck9iai5pZCB9OworICAgICAgICAgIGxpYnRvYXN0ZXIuZWRpdEN1cnJlbnRQcm9qZWN0KGVkaXREYXRhLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvbmVDYihbXSk7CisgICAgICAgICAgfSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXJPYmosIGxheWVycy5saXN0LCBudWxsLCBudWxsLCAgdHJ1ZSwgZG9uZUNiKTsKKyAgICAgICAgICB9ICBjYXRjaCAoZSkgeworICAgICAgICAgICAgJC5nZXRTY3JpcHQobGlidG9hc3Rlci5jdHguanNVcmwgKyAibGF5ZXJEZXBzTW9kYWwuanMiLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICBzaG93TGF5ZXJEZXBzTW9kYWwobGF5ZXJPYmosIGxheWVycy5saXN0LCBudWxsLCBudWxsLCAgdHJ1ZSwgZG9uZUNiKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgbGF5ZXJEZXBzTW9kYWwiKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwgbnVsbCk7CisgICAgfSBlbHNlIGlmIChhZGQgPT09IGZhbHNlKSB7CisgICAgICB2YXIgZWRpdERhdGEgPSB7IGxheWVyRGVsIDogbGF5ZXJPYmouaWQgfTsKKworICAgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoZWRpdERhdGEsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZG9uZUNiKFtdKTsKKyAgICAgIH0sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc29sZS53YXJuICgiUmVtb3ZpbmcgbGF5ZXIgZnJvbSBwcm9qZWN0IGZhaWxlZCIpOworICAgICAgICBkb25lQ2IobnVsbCk7CisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBfbWFrZUxheWVyQWRkUm1BbGVydE1zZyhsYXllciwgbGF5ZXJEZXBzTGlzdCwgYWRkKSB7CisgICAgdmFyIGFsZXJ0TXNnOworCisgICAgaWYgKGxheWVyRGVwc0xpc3QubGVuZ3RoID4gMCAmJiBhZGQgPT09IHRydWUpIHsKKyAgICAgIGFsZXJ0TXNnID0gJCgiPHNwYW4+WW91IGhhdmUgYWRkZWQgPHN0cm9uZz4iKyhsYXllckRlcHNMaXN0Lmxlbmd0aCsxKSsiPC9zdHJvbmc+IGxheWVycyB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT4gYW5kIGl0cyBkZXBlbmRlbmNpZXMgPC9zcGFuPiIpOworCisgICAgICAvKiBCdWlsZCB0aGUgbGF5ZXIgZGVwcyBsaXN0ICovCisgICAgICBsYXllckRlcHNMaXN0Lm1hcChmdW5jdGlvbihsYXllciwgaSl7CisgICAgICAgIHZhciBsaW5rID0gJCgiPGE+PC9hPiIpOworCisgICAgICAgIGxpbmsuYXR0cigiaHJlZiIsIGxheWVyLmxheWVyZGV0YWlsdXJsKTsKKyAgICAgICAgbGluay50ZXh0KGxheWVyLm5hbWUpOworICAgICAgICBsaW5rLnRvb2x0aXAoe3RpdGxlOiBsYXllci50b29sdGlwfSk7CisKKyAgICAgICAgaWYgKGkgIT09IDApCisgICAgICAgICAgYWxlcnRNc2cuYXBwZW5kKCIsICIpOworCisgICAgICAgIGFsZXJ0TXNnLmFwcGVuZChsaW5rKTsKKyAgICAgIH0pOworICAgIH0gZWxzZSBpZiAobGF5ZXJEZXBzTGlzdC5sZW5ndGggPT09IDAgJiYgYWRkID09PSB0cnVlKSB7CisgICAgICBhbGVydE1zZyA9ICQoIjxzcGFuPllvdSBoYXZlIGFkZGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciB0byB5b3VyIHByb2plY3Q6IDxhIGlkPVwibGF5ZXItYWZmZWN0ZWQtbmFtZVwiPjwvYT48L3NwYW4+PC9zcGFuPiIpOworICAgIH0gZWxzZSBpZiAoYWRkID09PSBmYWxzZSkgeworICAgICAgYWxlcnRNc2cgPSAkKCI8c3Bhbj5Zb3UgaGF2ZSBkZWxldGVkIDxzdHJvbmc+MTwvc3Ryb25nPiBsYXllciBmcm9tIHlvdXIgcHJvamVjdDogPGEgaWQ9XCJsYXllci1hZmZlY3RlZC1uYW1lXCI+PC9hPjwvc3Bhbj4iKTsKKyAgICB9CisKKyAgICBhbGVydE1zZy5jaGlsZHJlbigiI2xheWVyLWFmZmVjdGVkLW5hbWUiKS50ZXh0KGxheWVyLm5hbWUpOworICAgIGFsZXJ0TXNnLmNoaWxkcmVuKCIjbGF5ZXItYWZmZWN0ZWQtbmFtZSIpLmF0dHIoImhyZWYiLCBsYXllci5sYXllcmRldGFpbHVybCk7CisKKyAgICByZXR1cm4gYWxlcnRNc2cuaHRtbCgpOworICB9CisKKyAgZnVuY3Rpb24gX3Nob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSl7CisgICAgdmFyIGFsZXJ0TXNnID0gJCgiI2NoYW5nZS1ub3RpZmljYXRpb24tbXNnIik7CisKKyAgICBhbGVydE1zZy5odG1sKG1lc3NhZ2UpOworICAgICQoIiNjaGFuZ2Utbm90aWZpY2F0aW9uLCAjY2hhbmdlLW5vdGlmaWNhdGlvbiAqIikuZmFkZUluKCk7CisgIH0KKworCisgIHJldHVybiB7CisgICAgcmVsb2FkX3BhcmFtcyA6IHJlbG9hZF9wYXJhbXMsCisgICAgc3RhcnRBQnVpbGQgOiBfc3RhcnRBQnVpbGQsCisgICAgY2FuY2VsQUJ1aWxkIDogX2NhbmNlbEFCdWlsZCwKKyAgICBtYWtlVHlwZWFoZWFkIDogX21ha2VUeXBlYWhlYWQsCisgICAgZ2V0UHJvamVjdEluZm86IF9nZXRQcm9qZWN0SW5mbywKKyAgICBnZXRMYXllckRlcHNGb3JQcm9qZWN0IDogX2dldExheWVyRGVwc0ZvclByb2plY3QsCisgICAgZWRpdEN1cnJlbnRQcm9qZWN0IDogX2VkaXRDdXJyZW50UHJvamVjdCwKKyAgICBkZWJ1ZzogZmFsc2UsCisgICAgcGFyc2VVcmxQYXJhbXMgOiBfcGFyc2VVcmxQYXJhbXMsCisgICAgZHVtcHNVcmxQYXJhbXMgOiBfZHVtcHNVcmxQYXJhbXMsCisgICAgYWRkUm1MYXllciA6IF9hZGRSbUxheWVyLAorICAgIG1ha2VMYXllckFkZFJtQWxlcnRNc2cgOiBfbWFrZUxheWVyQWRkUm1BbGVydE1zZywKKyAgICBzaG93Q2hhbmdlTm90aWZpY2F0aW9uIDogX3Nob3dDaGFuZ2VOb3RpZmljYXRpb24sCisgIH07Cit9KSgpOworCisvKiBrZWVwIHRoaXMgaW4gdGhlIGdsb2JhbCBzY29wZSBmb3IgY29tcGF0YWJpbGl0eSAqLworZnVuY3Rpb24gcmVsb2FkX3BhcmFtcyhwYXJhbXMpIHsKKyAgICB2YXIgdXJpID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CisgICAgdmFyIHNwbGl0bGlzdCA9IHVyaS5zcGxpdCgiPyIpOworICAgIHZhciB1cmwgPSBzcGxpdGxpc3RbMF07CisgICAgdmFyIHBhcmFtZXRlcnMgPSBzcGxpdGxpc3RbMV07CisgICAgLy8gZGVzZXJpYWxpemUgdGhlIGNhbGwgcGFyYW1ldGVycworICAgIHZhciBjcGFyYW1zID0gW107CisgICAgaWYocGFyYW1ldGVycykKKyAgICAgIGNwYXJhbXMgPSBwYXJhbWV0ZXJzLnNwbGl0KCImIik7CisKKyAgICB2YXIgbnBhcmFtcyA9IHt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3BhcmFtcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgdGVtcCA9IGNwYXJhbXNbaV0uc3BsaXQoIj0iKTsKKyAgICAgICAgbnBhcmFtc1t0ZW1wWzBdXSA9IHRlbXBbMV07CisgICAgfQorICAgIC8vIHVwZGF0ZSBwYXJhbWV0ZXIgdmFsdWVzCisgICAgZm9yIChpIGluIHBhcmFtcykgeworICAgICAgICBucGFyYW1zW2VuY29kZVVSSUNvbXBvbmVudChpKV0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW2ldKTsKKyAgICB9CisgICAgLy8gc2VyaWFsaXplIHRoZSBzdHJ1Y3R1cmUKKyAgICB2YXIgY2FsbHBhcmFtcyA9IFtdOworICAgIGZvciAoaSBpbiBucGFyYW1zKSB7CisgICAgICAgIGNhbGxwYXJhbXMucHVzaChpKyI9IitucGFyYW1zW2ldKTsKKyAgICB9CisgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwrIj8iK2NhbGxwYXJhbXMuam9pbignJicpOworfQorCisKKy8qIFRoaW5ncyB0aGF0IGhhcHBlbiBmb3IgYWxsIHBhZ2VzICovCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKworICB2YXIgYWpheExvYWRpbmdUaW1lcjsKKworICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29uc29sZSBvYmplY3Qgd2hpY2ggbWlnaHQgYmUgdGhlIGNhc2UgaW4gc29tZQorICAgICAqIGJyb3dzZXJzLCBuby1vcCBpdCB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JzLgorICAgICAqLworICAgIGlmICghd2luZG93LmNvbnNvbGUpIHsKKyAgICAgIHdpbmRvdy5jb25zb2xlID0ge307CisgICAgICB3aW5kb3cuY29uc29sZS53YXJuID0gZnVuY3Rpb24oKSB7fTsKKyAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oKSB7fTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFByZXR0eVByaW50IHBsdWdpbi4KKyAgICAgKgorICAgICAqLworICAgIC8vIEluaXQKKyAgICBwcmV0dHlQcmludCgpOworCisgICAgLy8gUHJldmVudCBpbnZhbGlkIGxpbmtzIGZyb20ganVtcGluZyBwYWdlIHNjcm9sbAorICAgICQoJ2FbaHJlZj0jXScpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisKKworICAgIC8qIFNUQVJUIFRPRE8gRGVsZXRlIHRoaXMgc2VjdGlvbiBub3cgcmVkdW5kYW50ICovCisgICAgLyogQmVsZW4ncyBhZGRpdGlvbnMgKi8KKworICAgIC8vIHR1cm4gRWRpdCBjb2x1bW5zIGRyb3Bkb3duIGludG8gYSBtdWx0aXNlbGVjdCBtZW51CisgICAgJCgnLmRyb3Bkb3duLW1lbnUgaW5wdXQsIC5kcm9wZG93bi1tZW51IGxhYmVsJykuY2xpY2soZnVuY3Rpb24oZSkgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworCisgICAgLy8gZW5hYmxlIHBvcG92ZXJzIGluIGFueSB0YWJsZSBjZWxscyB0aGF0IGNvbnRhaW4gYW4gYW5jaG9yIHdpdGggdGhlCisgICAgLy8gLmJ0biBjbGFzcyBhcHBsaWVkLCBhbmQgbWFrZSBzdXJlIHBvcG92ZXJzIHdvcmsgb24gY2xpY2ssIGFyZSBtdXR1YWxseQorICAgIC8vIGV4Y2x1c2l2ZSBhbmQgdGhleSBjbG9zZSB3aGVuIHlvdXIgY2xpY2sgb3V0c2lkZSB0aGVpciBhcmVhCisKKyAgICAkKCdodG1sJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgJCgndGQgPiBhLmJ0bicpLnBvcG92ZXIoJ2hpZGUnKTsKKyAgICB9KTsKKworICAgICQoJ3RkID4gYS5idG4nKS5wb3BvdmVyKHsKKyAgICAgICAgaHRtbDp0cnVlLAorICAgICAgICBwbGFjZW1lbnQ6J2xlZnQnLAorICAgICAgICBjb250YWluZXI6J2JvZHknLAorICAgICAgICB0cmlnZ2VyOidtYW51YWwnCisgICAgfSkuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICAgICQoJ3RkID4gYS5idG4nKS5ub3QodGhpcykucG9wb3ZlcignaGlkZScpOworICAgICAgICAvLyBpZGVhbGx5IHdlIHdvdWxkIHVzZSAndG9nZ2xlJyBoZXJlCisgICAgICAgIC8vIGJ1dCBpdCBzZWVtcyBidWdneSBpbiBvdXIgQm9vdHN0cmFwIHZlcnNpb24KKyAgICAgICAgJCh0aGlzKS5wb3BvdmVyKCdzaG93Jyk7CisgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSk7CisKKyAgICAvLyBlbmFibGUgdG9vbHRpcHMgZm9yIGFwcGxpZWQgZmlsdGVycworICAgICQoJ3RoIGEuYnRuLXByaW1hcnknKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIHBsYWNlbWVudDonYm90dG9tJywgZGVsYXk6e2hpZGU6MTUwMH19KTsKKworICAgIC8vIGhpZGUgYXBwbGllZCBmaWx0ZXIgdG9vbHRpcCB3aGVuIHlvdSBjbGljayBvbiB0aGUgZmlsdGVyIGJ1dHRvbgorICAgICQoJ3RoIGEuYnRuLXByaW1hcnknKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICQoJy50b29sdGlwJykuaGlkZSgpOworICAgIH0pOworCisgICAgLy8gZW5hYmxlIGhlbHAgaW5mb3JtYXRpb24gdG9vbHRpcAorICAgICQoIi5nZXQtaGVscCIpLnRvb2x0aXAoe2NvbnRhaW5lcjonYm9keScsIGh0bWw6dHJ1ZSwgZGVsYXk6e3Nob3c6MzAwfX0pOworCisgICAgLy8gc2hvdyBoZWxwIGJ1YmJsZSBvbmx5IG9uIGhvdmVyIGluc2lkZSB0YWJsZXMKKyAgICAkKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpOworICAgICQoInRoLCB0ZCIpLmhvdmVyKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCh0aGlzKS5maW5kKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsInZpc2libGUiKTsKKyAgICB9KTsKKyAgICAkKCJ0aCwgdGQiKS5tb3VzZWxlYXZlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCh0aGlzKS5maW5kKCIuaG92ZXItaGVscCIpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpOworICAgIH0pOworCisgICAgLyogRU5EIFRPRE8gRGVsZXRlIHRoaXMgc2VjdGlvbiBub3cgcmVkdW5kYW50ICovCisKKyAgICAvLyBzaG93IHRhc2sgdHlwZSBhbmQgb3V0Y29tZSBpbiB0YXNrIGRldGFpbHMgcGFnZXMKKyAgICAkKCIudGFzay1pbmZvIikudG9vbHRpcCh7IGNvbnRhaW5lcjogJ2JvZHknLCBodG1sOiB0cnVlLCBkZWxheToge3Nob3c6IDIwMH0sIHBsYWNlbWVudDogJ3JpZ2h0JyB9KTsKKworICAgIC8vIGluaXRpYWxpc2UgdGhlIHRvb2x0aXBzIGZvciB0aGUgaWNvbi1wZW5jaWwgaWNvbnMKKyAgICAkKCIuaWNvbi1wZW5jaWwiKS50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJDaGFuZ2UiIH0pOworCisgICAgLy8gaW5pdGlhbGlzZSB0aGUgdG9vbHRpcHMgZm9yIHRoZSBkb3dubG9hZCBpY29ucworICAgICQoIi5pY29uLWRvd25sb2FkLWFsdCIpLnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHsgc2hvdzogMjAwIH0gfSk7CisKKyAgICAvLyBpbml0aWFsaXNlIHBvcG92ZXIgZm9yIGRlYnVnIGluZm9ybWF0aW9uCisgICAgJCgiLmljb24taW5mby1zaWduIikucG9wb3ZlciggeyBwbGFjZW1lbnQ6ICdib3R0b20nLCBodG1sOiB0cnVlLCBjb250YWluZXI6ICdib2R5JyB9KTsKKworICAgIC8vIGxpbmtpbmcgZGlyZWN0bHkgdG8gdGFicworICAgICQoZnVuY3Rpb24oKXsKKyAgICAgICAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICQoJ3VsLm5hdiBhW2hyZWY9IicgKyBoYXNoICsgJyJdJykudGFiKCdzaG93Jyk7CisKKyAgICAgICAgICAkKCcubmF2LXRhYnMgYScpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICQodGhpcykudGFiKCdzaG93Jyk7CisgICAgICAgICAgICAkKCdib2R5Jykuc2Nyb2xsVG9wKCk7CisgICAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvLyB0b2dnbGUgZm9yIGxvbmcgY29udGVudCAodmFyaWFibGVzLCBweXRob24gc3RhY2sgdHJhY2UsIGV0YykKKyAgICAkKCcuZnVsbCwgLmZ1bGwtaGlkZScpLmhpZGUoKTsKKyAgICAkKCcuZnVsbC1zaG93JykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgJCgnLmZ1bGwnKS5zbGlkZURvd24oZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICQoJy5mdWxsLWhpZGUnKS5zaG93KCk7CisgICAgICAgIH0pOworICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICB9KTsKKyAgICAkKCcuZnVsbC1oaWRlJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICAgICQoJy5mdWxsJykuc2xpZGVVcChmdW5jdGlvbigpeworICAgICAgICAgICAgJCgnLmZ1bGwtc2hvdycpLnNob3coKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvL3RvZ2dsZSB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBzZWN0aW9ucworICAgICQoJy5zaG93LWVycm9ycycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXJyb3JzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnRvZ2dsZS1lcnJvcnMnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLWVycm9ycycpLnRvZ2dsZUNsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy5zaG93LXdhcm5pbmdzJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyNjb2xsYXBzZS13YXJuaW5ncycpLmFkZENsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy50b2dnbGUtd2FybmluZ3MnKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykudG9nZ2xlQ2xhc3MoJ2luJyk7CisgICAgfSk7CisgICAgJCgnLnNob3ctZXhjZXB0aW9ucycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXhjZXB0aW9ucycpLmFkZENsYXNzKCdpbicpOworICAgIH0pOworICAgICQoJy50b2dnbGUtZXhjZXB0aW9ucycpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAkKCcjY29sbGFwc2UtZXhjZXB0aW9ucycpLnRvZ2dsZUNsYXNzKCdpbicpOworICAgIH0pOworCisKKyAgICAkKCIjaGlkZS1hbGVydCIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLmZhZGVPdXQoKTsKKyAgICB9KTsKKworICAgIC8vc2hvdyB3YXJuaW5ncyBzZWN0aW9uIHdoZW4gcmVxdWVzdGVkIGZyb20gdGhlIHByZXZpb3VzIHBhZ2UKKyAgICBpZiAobG9jYXRpb24uaHJlZi5zZWFyY2goJyN3YXJuaW5ncycpID4gLTEpIHsKKyAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgfQorCisgICAgLyogU2hvdyB0aGUgbG9hZGluZyBub3RpZmljYXRpb24gaWYgbm90aGluZyBoYXMgaGFwcGVuZCBhZnRlciAxLjUKKyAgICAgKiBzZWNvbmRzCisgICAgICovCisgICAgJChkb2N1bWVudCkuYmluZCgiYWpheFN0YXJ0IiwgZnVuY3Rpb24oKXsKKyAgICAgIGlmIChhamF4TG9hZGluZ1RpbWVyKQorICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGFqYXhMb2FkaW5nVGltZXIpOworCisgICAgICBhamF4TG9hZGluZ1RpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICQoIiNsb2FkaW5nLW5vdGlmaWNhdGlvbiIpLmZhZGVJbigpOworICAgICAgfSwgMTIwMCk7CisgICAgfSk7CisKKyAgICAkKGRvY3VtZW50KS5iaW5kKCJhamF4U3RvcCIsIGZ1bmN0aW9uKCl7CisgICAgICBpZiAoYWpheExvYWRpbmdUaW1lcikKKyAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChhamF4TG9hZGluZ1RpbWVyKTsKKworICAgICAgJCgiI2xvYWRpbmctbm90aWZpY2F0aW9uIikuZmFkZU91dCgpOworICAgIH0pOworCisgICAgJChkb2N1bWVudCkuYWpheEVycm9yKGZ1bmN0aW9uKGV2ZW50LCBqcXhociwgc2V0dGluZ3MsIGVyck1zZyl7CisgICAgICBpZiAoZXJyTXNnID09PSAnYWJvcnQnKQorICAgICAgICByZXR1cm47CisKKyAgICAgIGNvbnNvbGUud2FybigiUHJvYmxlbSB3aXRoIHhociBjYWxsIik7CisgICAgICBjb25zb2xlLndhcm4oZXJyTXNnKTsKKyAgICAgIGNvbnNvbGUud2FybihqcXhoci5yZXNwb25zZVRleHQpOworICAgIH0pOworCisgICAgZnVuY3Rpb24gY2hlY2tfZm9yX2R1cGxpY2F0ZV9pZHMgKCkgeworICAgICAgLyogd2FybiBhYm91dCBkdXBsaWNhdGUgZWxlbWVudCBpZHMgKi8KKyAgICAgIHZhciBpZHMgPSB7fTsKKyAgICAgICQoIltpZF0iKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5pZCAmJiBpZHNbdGhpcy5pZF0pIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oJ0R1cGxpY2F0ZSBlbGVtZW50IGlkICMnK3RoaXMuaWQpOworICAgICAgICB9CisgICAgICAgIGlkc1t0aGlzLmlkXSA9IHRydWU7CisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAobGlidG9hc3Rlci5kZWJ1ZykgeworICAgICAgY2hlY2tfZm9yX2R1cGxpY2F0ZV9pZHMoKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogRGVidWcgaXMgZmFsc2Ugc28gc3VwcmVzcyB3YXJuaW5ncyBieSBvdmVycmlkaW5nIHRoZSBmdW5jdGlvbnMgKi8KKyAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSBmdW5jdGlvbiAoKSB7fTsKKyAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24gKCkge307CisgICB9Cit9KTsKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvcHJldHRpZnkuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3ByZXR0aWZ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZjVhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3ByZXR0aWZ5LmpzCkBAIC0wLDAgKzEsMjggQEAKK3ZhciBxPW51bGw7d2luZG93LlBSX1NIT1VMRF9VU0VfQ09OVElOVUFUSU9OPSEwOworKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTChhKXtmdW5jdGlvbiBtKGEpe3ZhciBmPWEuY2hhckNvZGVBdCgwKTtpZihmIT09OTIpcmV0dXJuIGY7dmFyIGI9YS5jaGFyQXQoMSk7cmV0dXJuKGY9cltiXSk/ZjoiMCI8PWImJmI8PSI3Ij9wYXJzZUludChhLnN1YnN0cmluZygxKSw4KTpiPT09InUifHxiPT09IngiP3BhcnNlSW50KGEuc3Vic3RyaW5nKDIpLDE2KTphLmNoYXJDb2RlQXQoMSl9ZnVuY3Rpb24gZShhKXtpZihhPDMyKXJldHVybihhPDE2PyJcXHgwIjoiXFx4IikrYS50b1N0cmluZygxNik7YT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2lmKGE9PT0iXFwifHxhPT09Ii0ifHxhPT09IlsifHxhPT09Il0iKWE9IlxcIithO3JldHVybiBhfWZ1bmN0aW9uIGgoYSl7Zm9yKHZhciBmPWEuc3Vic3RyaW5nKDEsYS5sZW5ndGgtMSkubWF0Y2goL1xcdVtcZEEtRmEtZl17NH18XFx4W1xkQS1GYS1mXXsyfXxcXFswLTNdWzAtN117MCwyfXxcXFswLTddezEsMn18XFxbXFNcc118W15cXF0vZyksYT0KK1tdLGI9W10sbz1mWzBdPT09Il4iLGM9bz8xOjAsaT1mLmxlbmd0aDtjPGk7KytjKXt2YXIgaj1mW2NdO2lmKC9cXFtiZHN3XS9pLnRlc3QoaikpYS5wdXNoKGopO2Vsc2V7dmFyIGo9bShqKSxkO2MrMjxpJiYiLSI9PT1mW2MrMV0/KGQ9bShmW2MrMl0pLGMrPTIpOmQ9ajtiLnB1c2goW2osZF0pO2Q8NjV8fGo+MTIyfHwoZDw2NXx8aj45MHx8Yi5wdXNoKFtNYXRoLm1heCg2NSxqKXwzMixNYXRoLm1pbihkLDkwKXwzMl0pLGQ8OTd8fGo+MTIyfHxiLnB1c2goW01hdGgubWF4KDk3LGopJi0zMyxNYXRoLm1pbihkLDEyMikmLTMzXSkpfX1iLnNvcnQoZnVuY3Rpb24oYSxmKXtyZXR1cm4gYVswXS1mWzBdfHxmWzFdLWFbMV19KTtmPVtdO2o9W05hTixOYU5dO2ZvcihjPTA7YzxiLmxlbmd0aDsrK2MpaT1iW2NdLGlbMF08PWpbMV0rMT9qWzFdPU1hdGgubWF4KGpbMV0saVsxXSk6Zi5wdXNoKGo9aSk7Yj1bIlsiXTtvJiZiLnB1c2goIl4iKTtiLnB1c2guYXBwbHkoYixhKTtmb3IoYz0wO2M8CitmLmxlbmd0aDsrK2MpaT1mW2NdLGIucHVzaChlKGlbMF0pKSxpWzFdPmlbMF0mJihpWzFdKzE+aVswXSYmYi5wdXNoKCItIiksYi5wdXNoKGUoaVsxXSkpKTtiLnB1c2goIl0iKTtyZXR1cm4gYi5qb2luKCIiKX1mdW5jdGlvbiB5KGEpe2Zvcih2YXIgZj1hLnNvdXJjZS5tYXRjaCgvXFsoPzpbXlxcXF1dfFxcW1xTXHNdKSpdfFxcdVtcZEEtRmEtZl17NH18XFx4W1xkQS1GYS1mXXsyfXxcXFxkK3xcXFteXGR1eF18XChcP1shOj1dfFsoKV5dfFteKClbXFxeXSsvZyksYj1mLmxlbmd0aCxkPVtdLGM9MCxpPTA7YzxiOysrYyl7dmFyIGo9ZltjXTtqPT09IigiPysraToiXFwiPT09ai5jaGFyQXQoMCkmJihqPStqLnN1YnN0cmluZygxKSkmJmo8PWkmJihkW2pdPS0xKX1mb3IoYz0xO2M8ZC5sZW5ndGg7KytjKS0xPT09ZFtjXSYmKGRbY109Kyt0KTtmb3IoaT1jPTA7YzxiOysrYylqPWZbY10saj09PSIoIj8oKytpLGRbaV09PT12b2lkIDAmJihmW2NdPSIoPzoiKSk6IlxcIj09PWouY2hhckF0KDApJiYKKyhqPStqLnN1YnN0cmluZygxKSkmJmo8PWkmJihmW2NdPSJcXCIrZFtpXSk7Zm9yKGk9Yz0wO2M8YjsrK2MpIl4iPT09ZltjXSYmIl4iIT09ZltjKzFdJiYoZltjXT0iIik7aWYoYS5pZ25vcmVDYXNlJiZzKWZvcihjPTA7YzxiOysrYylqPWZbY10sYT1qLmNoYXJBdCgwKSxqLmxlbmd0aD49MiYmYT09PSJbIj9mW2NdPWgoaik6YSE9PSJcXCImJihmW2NdPWoucmVwbGFjZSgvW0EtWmEtel0vZyxmdW5jdGlvbihhKXthPWEuY2hhckNvZGVBdCgwKTtyZXR1cm4iWyIrU3RyaW5nLmZyb21DaGFyQ29kZShhJi0zMyxhfDMyKSsiXSJ9KSk7cmV0dXJuIGYuam9pbigiIil9Zm9yKHZhciB0PTAscz0hMSxsPSExLHA9MCxkPWEubGVuZ3RoO3A8ZDsrK3Ape3ZhciBnPWFbcF07aWYoZy5pZ25vcmVDYXNlKWw9ITA7ZWxzZSBpZigvW2Etel0vaS50ZXN0KGcuc291cmNlLnJlcGxhY2UoL1xcdVtcZGEtZl17NH18XFx4W1xkYS1mXXsyfXxcXFteVVh1eF0vZ2ksIiIpKSl7cz0hMDtsPSExO2JyZWFrfX1mb3IodmFyIHI9Cit7Yjo4LHQ6OSxuOjEwLHY6MTEsZjoxMixyOjEzfSxuPVtdLHA9MCxkPWEubGVuZ3RoO3A8ZDsrK3Ape2c9YVtwXTtpZihnLmdsb2JhbHx8Zy5tdWx0aWxpbmUpdGhyb3cgRXJyb3IoIiIrZyk7bi5wdXNoKCIoPzoiK3koZykrIikiKX1yZXR1cm4gUmVnRXhwKG4uam9pbigifCIpLGw/ImdpIjoiZyIpfWZ1bmN0aW9uIE0oYSl7ZnVuY3Rpb24gbShhKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOmlmKGUudGVzdChhLmNsYXNzTmFtZSkpYnJlYWs7Zm9yKHZhciBnPWEuZmlyc3RDaGlsZDtnO2c9Zy5uZXh0U2libGluZyltKGcpO2c9YS5ub2RlTmFtZTtpZigiQlIiPT09Z3x8IkxJIj09PWcpaFtzXT0iXG4iLHRbczw8MV09eSsrLHRbcysrPDwxfDFdPWE7YnJlYWs7Y2FzZSAzOmNhc2UgNDpnPWEubm9kZVZhbHVlLGcubGVuZ3RoJiYoZz1wP2cucmVwbGFjZSgvXHJcbj8vZywiXG4iKTpnLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLGhbc109Zyx0W3M8PDFdPXkseSs9Zy5sZW5ndGgsCit0W3MrKzw8MXwxXT1hKX19dmFyIGU9Lyg/Ol58XHMpbm9jb2RlKD86XHN8JCkvLGg9W10seT0wLHQ9W10scz0wLGw7YS5jdXJyZW50U3R5bGU/bD1hLmN1cnJlbnRTdHlsZS53aGl0ZVNwYWNlOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiYobD1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGEscSkuZ2V0UHJvcGVydHlWYWx1ZSgid2hpdGUtc3BhY2UiKSk7dmFyIHA9bCYmInByZSI9PT1sLnN1YnN0cmluZygwLDMpO20oYSk7cmV0dXJue2E6aC5qb2luKCIiKS5yZXBsYWNlKC9cbiQvLCIiKSxjOnR9fWZ1bmN0aW9uIEIoYSxtLGUsaCl7bSYmKGE9e2E6bSxkOmF9LGUoYSksaC5wdXNoLmFwcGx5KGgsYS5lKSl9ZnVuY3Rpb24geChhLG0pe2Z1bmN0aW9uIGUoYSl7Zm9yKHZhciBsPWEuZCxwPVtsLCJwbG4iXSxkPTAsZz1hLmEubWF0Y2goeSl8fFtdLHI9e30sbj0wLHo9Zy5sZW5ndGg7bjx6Oysrbil7dmFyIGY9Z1tuXSxiPXJbZl0sbz12b2lkIDAsYztpZih0eXBlb2YgYj09PQorInN0cmluZyIpYz0hMTtlbHNle3ZhciBpPWhbZi5jaGFyQXQoMCldO2lmKGkpbz1mLm1hdGNoKGlbMV0pLGI9aVswXTtlbHNle2ZvcihjPTA7Yzx0OysrYylpZihpPW1bY10sbz1mLm1hdGNoKGlbMV0pKXtiPWlbMF07YnJlYWt9b3x8KGI9InBsbiIpfWlmKChjPWIubGVuZ3RoPj01JiYibGFuZy0iPT09Yi5zdWJzdHJpbmcoMCw1KSkmJiEobyYmdHlwZW9mIG9bMV09PT0ic3RyaW5nIikpYz0hMSxiPSJzcmMiO2N8fChyW2ZdPWIpfWk9ZDtkKz1mLmxlbmd0aDtpZihjKXtjPW9bMV07dmFyIGo9Zi5pbmRleE9mKGMpLGs9aitjLmxlbmd0aDtvWzJdJiYoaz1mLmxlbmd0aC1vWzJdLmxlbmd0aCxqPWstYy5sZW5ndGgpO2I9Yi5zdWJzdHJpbmcoNSk7QihsK2ksZi5zdWJzdHJpbmcoMCxqKSxlLHApO0IobCtpK2osYyxDKGIsYykscCk7QihsK2krayxmLnN1YnN0cmluZyhrKSxlLHApfWVsc2UgcC5wdXNoKGwraSxiKX1hLmU9cH12YXIgaD17fSx5OyhmdW5jdGlvbigpe2Zvcih2YXIgZT1hLmNvbmNhdChtKSwKK2w9W10scD17fSxkPTAsZz1lLmxlbmd0aDtkPGc7KytkKXt2YXIgcj1lW2RdLG49clszXTtpZihuKWZvcih2YXIgaz1uLmxlbmd0aDstLWs+PTA7KWhbbi5jaGFyQXQoayldPXI7cj1yWzFdO249IiIrcjtwLmhhc093blByb3BlcnR5KG4pfHwobC5wdXNoKHIpLHBbbl09cSl9bC5wdXNoKC9bXFNcc10vKTt5PUwobCl9KSgpO3ZhciB0PW0ubGVuZ3RoO3JldHVybiBlfWZ1bmN0aW9uIHUoYSl7dmFyIG09W10sZT1bXTthLnRyaXBsZVF1b3RlZFN0cmluZ3M/bS5wdXNoKFsic3RyIiwvXig/OicnJyg/OlteJ1xcXXxcXFtcU1xzXXwnJz8oPz1bXiddKSkqKD86JycnfCQpfCIiIig/OlteIlxcXXxcXFtcU1xzXXwiIj8oPz1bXiJdKSkqKD86IiIifCQpfCcoPzpbXidcXF18XFxbXFNcc10pKig/Oid8JCl8Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKSkvLHEsIidcIiJdKTphLm11bHRpTGluZVN0cmluZ3M/bS5wdXNoKFsic3RyIiwvXig/OicoPzpbXidcXF18XFxbXFNcc10pKig/Oid8JCl8Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKXxgKD86W15cXGBdfFxcW1xTXHNdKSooPzpgfCQpKS8sCitxLCInXCJgIl0pOm0ucHVzaChbInN0ciIsL14oPzonKD86W15cblxyJ1xcXXxcXC4pKig/Oid8JCl8Iig/OlteXG5cciJcXF18XFwuKSooPzoifCQpKS8scSwiXCInIl0pO2EudmVyYmF0aW1TdHJpbmdzJiZlLnB1c2goWyJzdHIiLC9eQCIoPzpbXiJdfCIiKSooPzoifCQpLyxxXSk7dmFyIGg9YS5oYXNoQ29tbWVudHM7aCYmKGEuY1N0eWxlQ29tbWVudHM/KGg+MT9tLnB1c2goWyJjb20iLC9eIyg/OiMjKD86W14jXXwjKD8hIyMpKSooPzojIyN8JCl8LiopLyxxLCIjIl0pOm0ucHVzaChbImNvbSIsL14jKD86KD86ZGVmaW5lfGVsaWZ8ZWxzZXxlbmRpZnxlcnJvcnxpZmRlZnxpbmNsdWRlfGlmbmRlZnxsaW5lfHByYWdtYXx1bmRlZnx3YXJuaW5nKVxifFteXG5ccl0qKS8scSwiIyJdKSxlLnB1c2goWyJzdHIiLC9ePCg/Oig/Oig/OlwuXC5cLykqfFwvPykoPzpbXHctXSsoPzpcL1tcdy1dKykrKT9bXHctXStcLmh8W2Etel1cdyopPi8scV0pKTptLnB1c2goWyJjb20iLC9eI1teXG5ccl0qLywKK3EsIiMiXSkpO2EuY1N0eWxlQ29tbWVudHMmJihlLnB1c2goWyJjb20iLC9eXC9cL1teXG5ccl0qLyxxXSksZS5wdXNoKFsiY29tIiwvXlwvXCpbXFNcc10qPyg/OlwqXC98JCkvLHFdKSk7YS5yZWdleExpdGVyYWxzJiZlLnB1c2goWyJsYW5nLXJlZ2V4IiwvXig/Ol5eXC4/fFshKy1dfCE9fCE9PXwjfCV8JT18JnwmJnwmJj18Jj18XCh8XCp8XCo9fFwrPXwsfC09fC0+fFwvfFwvPXw6fDo6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18Wz9AW15dfFxePXxcXlxefFxeXF49fHt8XHx8XHw9fFx8XHx8XHxcfD18fnxicmVha3xjYXNlfGNvbnRpbnVlfGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZilccyooXC8oPz1bXiovXSkoPzpbXi9bXFxdfFxcW1xTXHNdfFxbKD86W15cXFxdXXxcXFtcU1xzXSkqKD86XXwkKSkrXC8pL10pOyhoPWEudHlwZXMpJiZlLnB1c2goWyJ0eXAiLGhdKTthPSgiIithLmtleXdvcmRzKS5yZXBsYWNlKC9eIHwgJC9nLAorIiIpO2EubGVuZ3RoJiZlLnB1c2goWyJrd2QiLFJlZ0V4cCgiXig/OiIrYS5yZXBsYWNlKC9bXHMsXSsvZywifCIpKyIpXFxiIikscV0pO20ucHVzaChbInBsbiIsL15ccysvLHEsIiBcclxuXHRceGEwIl0pO2UucHVzaChbImxpdCIsL15AWyRfYS16XVtcdyRAXSovaSxxXSxbInR5cCIsL14oPzpbQF9dP1tBLVpdK1thLXpdW1x3JEBdKnxcdytfdFxiKS8scV0sWyJwbG4iLC9eWyRfYS16XVtcdyRAXSovaSxxXSxbImxpdCIsL14oPzoweFtcZGEtZl0rfCg/OlxkKD86X1xkKykqXGQqKD86XC5cZCopP3xcLlxkXCspKD86ZVsrLV0/XGQrKT8pW2Etel0qL2kscSwiMDEyMzQ1Njc4OSJdLFsicGxuIiwvXlxcW1xTXHNdPy8scV0sWyJwdW4iLC9eLlteXHNcdyItJCcuL0BcXGBdKi8scV0pO3JldHVybiB4KG0sZSl9ZnVuY3Rpb24gRChhLG0pe2Z1bmN0aW9uIGUoYSl7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTppZihrLnRlc3QoYS5jbGFzc05hbWUpKWJyZWFrO2lmKCJCUiI9PT1hLm5vZGVOYW1lKWgoYSksCithLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKTtlbHNlIGZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyllKGEpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6aWYocCl7dmFyIGI9YS5ub2RlVmFsdWUsZD1iLm1hdGNoKHQpO2lmKGQpe3ZhciBjPWIuc3Vic3RyaW5nKDAsZC5pbmRleCk7YS5ub2RlVmFsdWU9YzsoYj1iLnN1YnN0cmluZyhkLmluZGV4K2RbMF0ubGVuZ3RoKSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocy5jcmVhdGVUZXh0Tm9kZShiKSxhLm5leHRTaWJsaW5nKTtoKGEpO2N8fGEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX19fX1mdW5jdGlvbiBoKGEpe2Z1bmN0aW9uIGIoYSxkKXt2YXIgZT1kP2EuY2xvbmVOb2RlKCExKTphLGY9YS5wYXJlbnROb2RlO2lmKGYpe3ZhciBmPWIoZiwxKSxnPWEubmV4dFNpYmxpbmc7Zi5hcHBlbmRDaGlsZChlKTtmb3IodmFyIGg9ZztoO2g9ZylnPWgubmV4dFNpYmxpbmcsZi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gZX0KK2Zvcig7IWEubmV4dFNpYmxpbmc7KWlmKGE9YS5wYXJlbnROb2RlLCFhKXJldHVybjtmb3IodmFyIGE9YihhLm5leHRTaWJsaW5nLDApLGU7KGU9YS5wYXJlbnROb2RlKSYmZS5ub2RlVHlwZT09PTE7KWE9ZTtkLnB1c2goYSl9dmFyIGs9Lyg/Ol58XHMpbm9jb2RlKD86XHN8JCkvLHQ9L1xyXG4/fFxuLyxzPWEub3duZXJEb2N1bWVudCxsO2EuY3VycmVudFN0eWxlP2w9YS5jdXJyZW50U3R5bGUud2hpdGVTcGFjZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9cy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGEscSkuZ2V0UHJvcGVydHlWYWx1ZSgid2hpdGUtc3BhY2UiKSk7dmFyIHA9bCYmInByZSI9PT1sLnN1YnN0cmluZygwLDMpO2ZvcihsPXMuY3JlYXRlRWxlbWVudCgiTEkiKTthLmZpcnN0Q2hpbGQ7KWwuYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxkKTtmb3IodmFyIGQ9W2xdLGc9MDtnPGQubGVuZ3RoOysrZyllKGRbZ10pO209PT0obXwwKSYmZFswXS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwKK20pO3ZhciByPXMuY3JlYXRlRWxlbWVudCgiT0wiKTtyLmNsYXNzTmFtZT0ibGluZW51bXMiO2Zvcih2YXIgbj1NYXRoLm1heCgwLG0tMXwwKXx8MCxnPTAsej1kLmxlbmd0aDtnPHo7KytnKWw9ZFtnXSxsLmNsYXNzTmFtZT0iTCIrKGcrbiklMTAsbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoIlx4YTAiKSksci5hcHBlbmRDaGlsZChsKTthLmFwcGVuZENoaWxkKHIpfWZ1bmN0aW9uIGsoYSxtKXtmb3IodmFyIGU9bS5sZW5ndGg7LS1lPj0wOyl7dmFyIGg9bVtlXTtBLmhhc093blByb3BlcnR5KGgpP3dpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4oImNhbm5vdCBvdmVycmlkZSBsYW5ndWFnZSBoYW5kbGVyICVzIixoKTpBW2hdPWF9fWZ1bmN0aW9uIEMoYSxtKXtpZighYXx8IUEuaGFzT3duUHJvcGVydHkoYSkpYT0vXlxzKjwvLnRlc3QobSk/ImRlZmF1bHQtbWFya3VwIjoiZGVmYXVsdC1jb2RlIjtyZXR1cm4gQVthXX1mdW5jdGlvbiBFKGEpe3ZhciBtPQorYS5nO3RyeXt2YXIgZT1NKGEuaCksaD1lLmE7YS5hPWg7YS5jPWUuYzthLmQ9MDtDKG0saCkoYSk7dmFyIGs9L1xiTVNJRVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLG09L1xuL2csdD1hLmEscz10Lmxlbmd0aCxlPTAsbD1hLmMscD1sLmxlbmd0aCxoPTAsZD1hLmUsZz1kLmxlbmd0aCxhPTA7ZFtnXT1zO3ZhciByLG47Zm9yKG49cj0wO248ZzspZFtuXSE9PWRbbisyXT8oZFtyKytdPWRbbisrXSxkW3IrK109ZFtuKytdKTpuKz0yO2c9cjtmb3Iobj1yPTA7bjxnOyl7Zm9yKHZhciB6PWRbbl0sZj1kW24rMV0sYj1uKzI7YisyPD1nJiZkW2IrMV09PT1mOyliKz0yO2RbcisrXT16O2RbcisrXT1mO249Yn1mb3IoZC5sZW5ndGg9cjtoPHA7KXt2YXIgbz1sW2grMl18fHMsYz1kW2ErMl18fHMsYj1NYXRoLm1pbihvLGMpLGk9bFtoKzFdLGo7aWYoaS5ub2RlVHlwZSE9PTEmJihqPXQuc3Vic3RyaW5nKGUsYikpKXtrJiYoaj1qLnJlcGxhY2UobSwiXHIiKSk7aS5ub2RlVmFsdWU9CitqO3ZhciB1PWkub3duZXJEb2N1bWVudCx2PXUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO3YuY2xhc3NOYW1lPWRbYSsxXTt2YXIgeD1pLnBhcmVudE5vZGU7eC5yZXBsYWNlQ2hpbGQodixpKTt2LmFwcGVuZENoaWxkKGkpO2U8byYmKGxbaCsxXT1pPXUuY3JlYXRlVGV4dE5vZGUodC5zdWJzdHJpbmcoYixvKSkseC5pbnNlcnRCZWZvcmUoaSx2Lm5leHRTaWJsaW5nKSl9ZT1iO2U+PW8mJihoKz0yKTtlPj1jJiYoYSs9Mil9fWNhdGNoKHcpeyJjb25zb2xlImluIHdpbmRvdyYmY29uc29sZS5sb2codyYmdy5zdGFjaz93LnN0YWNrOncpfX12YXIgdj1bImJyZWFrLGNvbnRpbnVlLGRvLGVsc2UsZm9yLGlmLHJldHVybix3aGlsZSJdLHc9W1t2LCJhdXRvLGNhc2UsY2hhcixjb25zdCxkZWZhdWx0LGRvdWJsZSxlbnVtLGV4dGVybixmbG9hdCxnb3RvLGludCxsb25nLHJlZ2lzdGVyLHNob3J0LHNpZ25lZCxzaXplb2Ysc3RhdGljLHN0cnVjdCxzd2l0Y2gsdHlwZWRlZix1bmlvbix1bnNpZ25lZCx2b2lkLHZvbGF0aWxlIl0sCisiY2F0Y2gsY2xhc3MsZGVsZXRlLGZhbHNlLGltcG9ydCxuZXcsb3BlcmF0b3IscHJpdmF0ZSxwcm90ZWN0ZWQscHVibGljLHRoaXMsdGhyb3csdHJ1ZSx0cnksdHlwZW9mIl0sRj1bdywiYWxpZ25vZixhbGlnbl91bmlvbixhc20sYXhpb20sYm9vbCxjb25jZXB0LGNvbmNlcHRfbWFwLGNvbnN0X2Nhc3QsY29uc3RleHByLGRlY2x0eXBlLGR5bmFtaWNfY2FzdCxleHBsaWNpdCxleHBvcnQsZnJpZW5kLGlubGluZSxsYXRlX2NoZWNrLG11dGFibGUsbmFtZXNwYWNlLG51bGxwdHIscmVpbnRlcnByZXRfY2FzdCxzdGF0aWNfYXNzZXJ0LHN0YXRpY19jYXN0LHRlbXBsYXRlLHR5cGVpZCx0eXBlbmFtZSx1c2luZyx2aXJ0dWFsLHdoZXJlIl0sRz1bdywiYWJzdHJhY3QsYm9vbGVhbixieXRlLGV4dGVuZHMsZmluYWwsZmluYWxseSxpbXBsZW1lbnRzLGltcG9ydCxpbnN0YW5jZW9mLG51bGwsbmF0aXZlLHBhY2thZ2Usc3RyaWN0ZnAsc3VwZXIsc3luY2hyb25pemVkLHRocm93cyx0cmFuc2llbnQiXSwKK0g9W0csImFzLGJhc2UsYnksY2hlY2tlZCxkZWNpbWFsLGRlbGVnYXRlLGRlc2NlbmRpbmcsZHluYW1pYyxldmVudCxmaXhlZCxmb3JlYWNoLGZyb20sZ3JvdXAsaW1wbGljaXQsaW4saW50ZXJmYWNlLGludGVybmFsLGludG8saXMsbG9jayxvYmplY3Qsb3V0LG92ZXJyaWRlLG9yZGVyYnkscGFyYW1zLHBhcnRpYWwscmVhZG9ubHkscmVmLHNieXRlLHNlYWxlZCxzdGFja2FsbG9jLHN0cmluZyxzZWxlY3QsdWludCx1bG9uZyx1bmNoZWNrZWQsdW5zYWZlLHVzaG9ydCx2YXIiXSx3PVt3LCJkZWJ1Z2dlcixldmFsLGV4cG9ydCxmdW5jdGlvbixnZXQsbnVsbCxzZXQsdW5kZWZpbmVkLHZhcix3aXRoLEluZmluaXR5LE5hTiJdLEk9W3YsImFuZCxhcyxhc3NlcnQsY2xhc3MsZGVmLGRlbCxlbGlmLGV4Y2VwdCxleGVjLGZpbmFsbHksZnJvbSxnbG9iYWwsaW1wb3J0LGluLGlzLGxhbWJkYSxub25sb2NhbCxub3Qsb3IscGFzcyxwcmludCxyYWlzZSx0cnksd2l0aCx5aWVsZCxGYWxzZSxUcnVlLE5vbmUiXSwKK0o9W3YsImFsaWFzLGFuZCxiZWdpbixjYXNlLGNsYXNzLGRlZixkZWZpbmVkLGVsc2lmLGVuZCxlbnN1cmUsZmFsc2UsaW4sbW9kdWxlLG5leHQsbmlsLG5vdCxvcixyZWRvLHJlc2N1ZSxyZXRyeSxzZWxmLHN1cGVyLHRoZW4sdHJ1ZSx1bmRlZix1bmxlc3MsdW50aWwsd2hlbix5aWVsZCxCRUdJTixFTkQiXSx2PVt2LCJjYXNlLGRvbmUsZWxpZixlc2FjLGV2YWwsZmksZnVuY3Rpb24saW4sbG9jYWwsc2V0LHRoZW4sdW50aWwiXSxLPS9eKERJUnxGSUxFfHZlY3RvcnwoZGV8cHJpb3JpdHlfKT9xdWV1ZXxsaXN0fHN0YWNrfChjb25zdF8pP2l0ZXJhdG9yfChtdWx0aSk/KHNldHxtYXApfGJpdHNldHx1PyhpbnR8ZmxvYXQpXGQqKS8sTj0vXFMvLE89dSh7a2V5d29yZHM6W0YsSCx3LCJjYWxsZXIsZGVsZXRlLGRpZSxkbyxkdW1wLGVsc2lmLGV2YWwsZXhpdCxmb3JlYWNoLGZvcixnb3RvLGlmLGltcG9ydCxsYXN0LGxvY2FsLG15LG5leHQsbm8sb3VyLHByaW50LHBhY2thZ2UscmVkbyxyZXF1aXJlLHN1Yix1bmRlZix1bmxlc3MsdW50aWwsdXNlLHdhbnRhcnJheSx3aGlsZSxCRUdJTixFTkQiKworSSxKLHZdLGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxBPXt9O2soTyxbImRlZmF1bHQtY29kZSJdKTtrKHgoW10sW1sicGxuIiwvXltePD9dKy9dLFsiZGVjIiwvXjwhXHdbXj5dKig/Oj58JCkvXSxbImNvbSIsL148XCEtLVtcU1xzXSo/KD86LS1cPnwkKS9dLFsibGFuZy0iLC9ePFw/KFtcU1xzXSs/KSg/Olw/PnwkKS9dLFsibGFuZy0iLC9ePCUoW1xTXHNdKz8pKD86JT58JCkvXSxbInB1biIsL14oPzo8WyU/XXxbJT9dPikvXSxbImxhbmctIiwvXjx4bXBcYltePl0qPihbXFNcc10rPyk8XC94bXBcYltePl0qPi9pXSxbImxhbmctanMiLC9ePHNjcmlwdFxiW14+XSo+KFtcU1xzXSo/KSg8XC9zY3JpcHRcYltePl0qPikvaV0sWyJsYW5nLWNzcyIsL148c3R5bGVcYltePl0qPihbXFNcc10qPykoPFwvc3R5bGVcYltePl0qPikvaV0sWyJsYW5nLWluLnRhZyIsL14oPFwvP1thLXpdW148Pl0qPikvaV1dKSwKK1siZGVmYXVsdC1tYXJrdXAiLCJodG0iLCJodG1sIiwibXhtbCIsInhodG1sIiwieG1sIiwieHNsIl0pO2soeChbWyJwbG4iLC9eXHMrLyxxLCIgXHRcclxuIl0sWyJhdHYiLC9eKD86IlteIl0qIj98J1teJ10qJz8pLyxxLCJcIiciXV0sW1sidGFnIiwvXl48XC8/W2Etel0oPzpbXHctLjpdKlx3KT98XC8/PiQvaV0sWyJhdG4iLC9eKD8hc3R5bGVbXHM9XXxvbilbYS16XSg/OltcdzotXSpcdyk/L2ldLFsibGFuZy11cS52YWwiLC9ePVxzKihbXlxzIic+XSooPzpbXlxzIicvPl18XC8oPz1ccykpKS9dLFsicHVuIiwvXlsvPC0+XSsvXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKihbXlxzIic+XSspL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1jc3MiLAorL15zdHlsZVxzKj1ccyooW15ccyInPl0rKS9pXV0pLFsiaW4udGFnIl0pO2soeChbXSxbWyJhdHYiLC9eW1xTXHNdKy9dXSksWyJ1cS52YWwiXSk7ayh1KHtrZXl3b3JkczpGLGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCx0eXBlczpLfSksWyJjIiwiY2MiLCJjcHAiLCJjeHgiLCJjeWMiLCJtIl0pO2sodSh7a2V5d29yZHM6Im51bGwsdHJ1ZSxmYWxzZSJ9KSxbImpzb24iXSk7ayh1KHtrZXl3b3JkczpILGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCx2ZXJiYXRpbVN0cmluZ3M6ITAsdHlwZXM6S30pLFsiY3MiXSk7ayh1KHtrZXl3b3JkczpHLGNTdHlsZUNvbW1lbnRzOiEwfSksWyJqYXZhIl0pO2sodSh7a2V5d29yZHM6dixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMH0pLFsiYnNoIiwiY3NoIiwic2giXSk7ayh1KHtrZXl3b3JkczpJLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHRyaXBsZVF1b3RlZFN0cmluZ3M6ITB9KSwKK1siY3YiLCJweSJdKTtrKHUoe2tleXdvcmRzOiJjYWxsZXIsZGVsZXRlLGRpZSxkbyxkdW1wLGVsc2lmLGV2YWwsZXhpdCxmb3JlYWNoLGZvcixnb3RvLGlmLGltcG9ydCxsYXN0LGxvY2FsLG15LG5leHQsbm8sb3VyLHByaW50LHBhY2thZ2UscmVkbyxyZXF1aXJlLHN1Yix1bmRlZix1bmxlc3MsdW50aWwsdXNlLHdhbnRhcnJheSx3aGlsZSxCRUdJTixFTkQiLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInBlcmwiLCJwbCIsInBtIl0pO2sodSh7a2V5d29yZHM6SixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJyYiJdKTtrKHUoe2tleXdvcmRzOncsY1N0eWxlQ29tbWVudHM6ITAscmVnZXhMaXRlcmFsczohMH0pLFsianMiXSk7ayh1KHtrZXl3b3JkczoiYWxsLGFuZCxieSxjYXRjaCxjbGFzcyxlbHNlLGV4dGVuZHMsZmFsc2UsZmluYWxseSxmb3IsaWYsaW4saXMsaXNudCxsb29wLG5ldyxubyxub3QsbnVsbCxvZixvZmYsb24sb3IscmV0dXJuLHN1cGVyLHRoZW4sdHJ1ZSx0cnksdW5sZXNzLHVudGlsLHdoZW4sd2hpbGUseWVzIiwKK2hhc2hDb21tZW50czozLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpbGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJjb2ZmZWUiXSk7ayh4KFtdLFtbInN0ciIsL15bXFNcc10rL11dKSxbInJlZ2V4Il0pO3dpbmRvdy5wcmV0dHlQcmludE9uZT1mdW5jdGlvbihhLG0sZSl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7aC5pbm5lckhUTUw9YTtlJiZEKGgsZSk7RSh7ZzptLGk6ZSxoOmh9KTtyZXR1cm4gaC5pbm5lckhUTUx9O3dpbmRvdy5wcmV0dHlQcmludD1mdW5jdGlvbihhKXtmdW5jdGlvbiBtKCl7Zm9yKHZhciBlPXdpbmRvdy5QUl9TSE9VTERfVVNFX0NPTlRJTlVBVElPTj9sLm5vdygpKzI1MDpJbmZpbml0eTtwPGgubGVuZ3RoJiZsLm5vdygpPGU7cCsrKXt2YXIgbj1oW3BdLGs9bi5jbGFzc05hbWU7aWYoay5pbmRleE9mKCJwcmV0dHlwcmludCIpPj0wKXt2YXIgaz1rLm1hdGNoKGcpLGYsYjtpZihiPQorIWspe2I9bjtmb3IodmFyIG89dm9pZCAwLGM9Yi5maXJzdENoaWxkO2M7Yz1jLm5leHRTaWJsaW5nKXZhciBpPWMubm9kZVR5cGUsbz1pPT09MT9vP2I6YzppPT09Mz9OLnRlc3QoYy5ub2RlVmFsdWUpP2I6bzpvO2I9KGY9bz09PWI/dm9pZCAwOm8pJiYiQ09ERSI9PT1mLnRhZ05hbWV9YiYmKGs9Zi5jbGFzc05hbWUubWF0Y2goZykpO2smJihrPWtbMV0pO2I9ITE7Zm9yKG89bi5wYXJlbnROb2RlO287bz1vLnBhcmVudE5vZGUpaWYoKG8udGFnTmFtZT09PSJwcmUifHxvLnRhZ05hbWU9PT0iY29kZSJ8fG8udGFnTmFtZT09PSJ4bXAiKSYmby5jbGFzc05hbWUmJm8uY2xhc3NOYW1lLmluZGV4T2YoInByZXR0eXByaW50Iik+PTApe2I9ITA7YnJlYWt9Ynx8KChiPShiPW4uY2xhc3NOYW1lLm1hdGNoKC9cYmxpbmVudW1zXGIoPzo6KFxkKykpPy8pKT9iWzFdJiZiWzFdLmxlbmd0aD8rYlsxXTohMDohMSkmJkQobixiKSxkPXtnOmssaDpuLGk6Yn0sRShkKSl9fXA8aC5sZW5ndGg/c2V0VGltZW91dChtLAorMjUwKTphJiZhKCl9Zm9yKHZhciBlPVtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIiksZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNvZGUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgieG1wIildLGg9W10saz0wO2s8ZS5sZW5ndGg7KytrKWZvcih2YXIgdD0wLHM9ZVtrXS5sZW5ndGg7dDxzOysrdCloLnB1c2goZVtrXVt0XSk7dmFyIGU9cSxsPURhdGU7bC5ub3d8fChsPXtub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSk7dmFyIHA9MCxkLGc9L1xibGFuZyg/OnVhZ2UpPy0oW1x3Ll0rKSg/IVxTKS87bSgpfTt3aW5kb3cuUFI9e2NyZWF0ZVNpbXBsZUxleGVyOngscmVnaXN0ZXJMYW5nSGFuZGxlcjprLHNvdXJjZURlY29yYXRvcjp1LFBSX0FUVFJJQl9OQU1FOiJhdG4iLFBSX0FUVFJJQl9WQUxVRToiYXR2IixQUl9DT01NRU5UOiJjb20iLFBSX0RFQ0xBUkFUSU9OOiJkZWMiLFBSX0tFWVdPUkQ6Imt3ZCIsUFJfTElURVJBTDoibGl0IiwKK1BSX05PQ09ERToibm9jb2RlIixQUl9QTEFJTjoicGxuIixQUl9QVU5DVFVBVElPTjoicHVuIixQUl9TT1VSQ0U6InNyYyIsUFJfU1RSSU5HOiJzdHIiLFBSX1RBRzoidGFnIixQUl9UWVBFOiJ0eXAifX0pKCk7CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Byb2plY3RwYWdlLmpzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzY3MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy9wcm9qZWN0cGFnZS5qcwpAQCAtMCwwICsxLDQyOCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBwcm9qZWN0UGFnZUluaXQoY3R4KSB7CisKKyAgdmFyIGxheWVyQWRkSW5wdXQgPSAkKCIjbGF5ZXItYWRkLWlucHV0Iik7CisgIHZhciBsYXllcnNJblByakxpc3QgPSAkKCIjbGF5ZXJzLWluLXByb2plY3QtbGlzdCIpOworICB2YXIgbGF5ZXJBZGRCdG4gPSAkKCIjYWRkLWxheWVyLWJ0biIpOworCisgIHZhciBtYWNoaW5lQ2hhbmdlSW5wdXQgPSAkKCIjbWFjaGluZS1jaGFuZ2UtaW5wdXQiKTsKKyAgdmFyIG1hY2hpbmVDaGFuZ2VCdG4gPSAkKCIjbWFjaGluZS1jaGFuZ2UtYnRuIik7CisgIHZhciBtYWNoaW5lRm9ybSA9ICQoIiNzZWxlY3QtbWFjaGluZS1mb3JtIik7CisgIHZhciBtYWNoaW5lQ2hhbmdlRm9ybVRvZ2dsZSA9ICQoIiNjaGFuZ2UtbWFjaGluZS10b2dnbGUiKTsKKyAgdmFyIG1hY2hpbmVOYW1lVGl0bGUgPSAkKCIjcHJvamVjdC1tYWNoaW5lLW5hbWUiKTsKKyAgdmFyIG1hY2hpbmVDaGFuZ2VDYW5jZWwgPSAkKCIjY2FuY2VsLW1hY2hpbmUtY2hhbmdlIik7CisKKyAgdmFyIGZyZXFCdWlsZEJ0biA9ICAkKCIjZnJlcS1idWlsZC1idG4iKTsKKyAgdmFyIGZyZXFCdWlsZExpc3QgPSAkKCIjZnJlcS1idWlsZC1saXN0Iik7CisKKyAgdmFyIHJlbGVhc2VDaGFuZ2VGb3JtVG9nZ2xlID0gJCgiI3JlbGVhc2UtY2hhbmdlLXRvZ2dsZSIpOworICB2YXIgcmVsZWFzZVRpdGxlID0gJCgiI3Byb2plY3QtcmVsZWFzZS10aXRsZSIpOworICB2YXIgcmVsZWFzZUZvcm0gPSAkKCIjY2hhbmdlLXJlbGVhc2UtZm9ybSIpOworICB2YXIgcmVsZWFzZU1vZGFsID0gJCgiI2NoYW5nZS1yZWxlYXNlLW1vZGFsIik7CisgIHZhciBjYW5jZWxSZWxlYXNlQ2hhbmdlID0gJCgiI2NhbmNlbC1yZWxlYXNlLWNoYW5nZSIpOworCisgIHZhciBjdXJyZW50TGF5ZXJBZGRTZWxlY3Rpb247CisgIHZhciBjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbiA9IHt9OworCisgIHZhciB1cmxQYXJhbXMgPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisKKyAgbGlidG9hc3Rlci5nZXRQcm9qZWN0SW5mbyhsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0UGFnZVVybCwgZnVuY3Rpb24ocHJqSW5mbyl7CisgICAgdXBkYXRlUHJvamVjdExheWVycyhwcmpJbmZvLmxheWVycyk7CisgICAgdXBkYXRlRnJlcUJ1aWxkUmVjaXBlcyhwcmpJbmZvLmZyZXF0YXJnZXRzKTsKKyAgICB1cGRhdGVQcm9qZWN0UmVsZWFzZShwcmpJbmZvLnJlbGVhc2UpOworICAgIHVwZGF0ZVByb2plY3RSZWxlYXNlcyhwcmpJbmZvLnJlbGVhc2VzLCBwcmpJbmZvLnJlbGVhc2UpOworCisgICAgLyogSWYgd2UncmUgcmVjZWl2aW5nIGEgbWFjaGluZSBzZXQgZnJvbSB0aGUgdXJsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tCisgICAgICogb3VyIGN1cnJlbnQgbWFjaGluZSB0aGVuIGFjdGl2YXRlIHNldCBtYWNoaW5lIHNlcXVlbmNlLgorICAgICAqLworICAgIGlmICh1cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3NldE1hY2hpbmUnKSAmJgorICAgICAgICB1cmxQYXJhbXMuc2V0TWFjaGluZSAhPT0gcHJqSW5mby5tYWNoaW5lLm5hbWUpeworICAgICAgICBjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lID0gdXJsUGFyYW1zLnNldE1hY2hpbmU7CisgICAgICAgIG1hY2hpbmVDaGFuZ2VCdG4uY2xpY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgdXBkYXRlTWFjaGluZU5hbWUocHJqSW5mby5tYWNoaW5lLm5hbWUpOworICAgIH0KKworICAgLyogTm93IHdlJ3JlIHJlYWxseSByZWFkeSBzaG93IHRoZSBwYWdlICovCisgICAgJCgiI3Byb2plY3QtcGFnZSIpLnNob3coKTsKKyAgfSk7CisKKyAgKGZ1bmN0aW9uIG5vdGlmaWNhdGlvblJlcXVlc3QoKXsKKworICAgIGlmICh1cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoJ25vdGlmeScpKXsKKyAgICAgIHN3aXRjaCAodXJsUGFyYW1zLm5vdGlmeSl7CisgICAgICAgIGNhc2UgJ25ldy1wcm9qZWN0JzoKKyAgICAgICAgICAkKCIjcHJvamVjdC1jcmVhdGVkLW5vdGlmaWNhdGlvbiIpLnNob3coKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbGF5ZXItaW1wb3J0ZWQnOgorICAgICAgICAgIGxheWVySW1wb3J0ZWROb3RpZmljYXRpb24oKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0pKCk7CisKKyAgLyogTGF5ZXIgaW1wb3J0ZWQgbm90aWZpY2F0aW9uICovCisgIGZ1bmN0aW9uIGxheWVySW1wb3J0ZWROb3RpZmljYXRpb24oKXsKKyAgICB2YXIgaW1wb3J0ZWQgPSAkLmNvb2tpZSgibGF5ZXItaW1wb3J0ZWQtYWxlcnQiKTsKKyAgICB2YXIgbWVzc2FnZSA9ICJMYXllciBpbXBvcnRlZCI7CisKKyAgICBpZiAoIWltcG9ydGVkKQorICAgICAgcmV0dXJuOworICAgIGVsc2UKKyAgICAgIGltcG9ydGVkID0gSlNPTi5wYXJzZShpbXBvcnRlZCk7CisKKyAgICBpZiAoaW1wb3J0ZWQuZGVwc19hZGRlZC5sZW5ndGggPT09IDApIHsKKyAgICAgIG1lc3NhZ2UgPSAiWW91IGhhdmUgaW1wb3J0ZWQgPHN0cm9uZz48YSBocmVmPVwiIitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5sYXllcmRldGFpbHVybCsiXCI+IitpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyI8L2E+PC9zdHJvbmc+IGFuZCBhZGRlZCBpdCB0byB5b3VyIHByb2plY3QuIjsKKyAgICB9IGVsc2UgeworCisgICAgICB2YXIgbGlua3MgPSAiPGEgaHJlZj1cIiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrIlwiPiIraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubmFtZSsiPC9hPiwgIjsKKworICAgICAgaW1wb3J0ZWQuZGVwc19hZGRlZC5tYXAgKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KXsKKyAgICAgICAgbGlua3MgKz0nPGEgaHJlZj0iJytpdGVtLmxheWVyZGV0YWlsdXJsKyciPicraXRlbS5uYW1lKyc8L2E+JzsKKyAgICAgICAgLypJZiB3ZSdyZSBhdCB0aGUgbGFzdCBlbGVtZW50IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIGNvbW1hICovCisgICAgICAgIGlmIChpbXBvcnRlZC5kZXBzX2FkZGVkW2luZGV4KzFdICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgbGlua3MgKz0gJywgJzsKKyAgICAgIH0pOworCisgICAgICAvKiBMZW5ndGggKyAxIGhlcmUgdG8gZG8gZGVwcyArIHRoZSBpbXBvcnRlZCBsYXllciAqLworICAgICAgbWVzc2FnZSA9ICdZb3UgaGF2ZSBpbXBvcnRlZCA8c3Ryb25nPjxhIGhyZWY9IicraW1wb3J0ZWQuaW1wb3J0ZWRfbGF5ZXIubGF5ZXJkZXRhaWx1cmwrJyI+JytpbXBvcnRlZC5pbXBvcnRlZF9sYXllci5uYW1lKyc8L2E+PC9zdHJvbmc+IGFuZCBhZGRlZCA8c3Ryb25nPicrKGltcG9ydGVkLmRlcHNfYWRkZWQubGVuZ3RoKzEpKyc8L3N0cm9uZz4gbGF5ZXJzIHRvIHlvdXIgcHJvamVjdDogPHN0cm9uZz4nK2xpbmtzKyc8L3N0cm9uZz4nOworICAgIH0KKworICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKworICAgICQucmVtb3ZlQ29va2llKCJsYXllci1pbXBvcnRlZC1hbGVydCIsIHsgcGF0aDogIi8ifSk7CisgIH0KKworICAvKiBBZGQvUm0gbGF5ZXIgZnVuY3Rpb25hbGl0eSAqLworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChsYXllckFkZElucHV0LCBsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsIHsgaW5jbHVkZV9hZGRlZDogImZhbHNlIiB9LCBmdW5jdGlvbihpdGVtKXsKKyAgICBjdXJyZW50TGF5ZXJBZGRTZWxlY3Rpb24gPSBpdGVtOworICAgIGxheWVyQWRkQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgIGxheWVyQWRkQnRuLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB2YXIgbGF5ZXJPYmogPSBjdXJyZW50TGF5ZXJBZGRTZWxlY3Rpb247CisKKyAgICBhZGRSbUxheWVyKGxheWVyT2JqLCB0cnVlKTsKKyAgICAvKiBSZXNldCB0aGUgdGV4dCBpbnB1dCAqLworICAgIGxheWVyQWRkSW5wdXQudmFsKCIiKTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gYWRkUm1MYXllcihsYXllck9iaiwgYWRkKXsKKworICAgIGxpYnRvYXN0ZXIuYWRkUm1MYXllcihsYXllck9iaiwgYWRkLCBmdW5jdGlvbihsYXllckRlcHNMaXN0KXsKKyAgICAgIGlmIChhZGQpeworICAgICAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKFtsYXllck9ial0pOworICAgICAgICB1cGRhdGVQcm9qZWN0TGF5ZXJzKGxheWVyRGVwc0xpc3QpOworICAgICAgfQorCisgICAgICAvKiBTaG93IHRoZSBhbGVydCBtZXNzYWdlICovCisgICAgICB2YXIgbWVzc2FnZSA9IGxpYnRvYXN0ZXIubWFrZUxheWVyQWRkUm1BbGVydE1zZyhsYXllck9iaiwgbGF5ZXJEZXBzTGlzdCwgYWRkKTsKKyAgICAgIGxpYnRvYXN0ZXIuc2hvd0NoYW5nZU5vdGlmaWNhdGlvbihtZXNzYWdlKTsKKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RMYXllcnMobGF5ZXJzKXsKKworICAgIC8qIE5vIGxheWVycyB0byBhZGQgKi8KKyAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCl7CisgICAgICB1cGRhdGVMYXllcnNDb3VudCgpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAodmFyIGkgaW4gbGF5ZXJzKXsKKyAgICAgIHZhciBsYXllck9iaiA9IGxheWVyc1tpXTsKKworICAgICAgdmFyIHByb2plY3RMYXllciA9ICQoIjxsaT48YT48L2E+PHNwYW4gY2xhc3M9XCJpY29uLXRyYXNoXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJEZWxldGVcIj48L3NwYW4+PC9saT4iKTsKKworICAgICAgcHJvamVjdExheWVyLmRhdGEoJ2xheWVyJywgbGF5ZXJPYmopOworICAgICAgcHJvamVjdExheWVyLmNoaWxkcmVuKCJzcGFuIikudG9vbHRpcCgpOworCisgICAgICB2YXIgbGluayA9IHByb2plY3RMYXllci5jaGlsZHJlbigiYSIpOworCisgICAgICBsaW5rLmF0dHIoImhyZWYiLCBsYXllck9iai5sYXllcmRldGFpbHVybCk7CisgICAgICBsaW5rLnRleHQobGF5ZXJPYmoubmFtZSk7CisgICAgICAvKiBZT0NUTyAjODAyNAorICAgICAgICBsaW5rLnRvb2x0aXAoe3RpdGxlOiBsYXllck9iai5naXR1cmwgKyAiIHwgIisgbGF5ZXJPYmouYnJhbmNoLm5hbWUsIHBsYWNlbWVudDogInJpZ2h0In0pOworICAgICAgICBicmFuY2ggbmFtZSBub3QgYWNjZXNzaWJsZSBzb21ldGltZXMgaXQgaXMgcmV2aXNpb24gaW5zdGVhZAorICAgICAgKi8KKworICAgICAgdmFyIHRyYXNoSXRlbSA9IHByb2plY3RMYXllci5jaGlsZHJlbigic3BhbiIpOworICAgICAgdHJhc2hJdGVtLmNsaWNrKGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdmFyIGxheWVyT2JqVG9SbSA9ICQodGhpcykucGFyZW50KCkuZGF0YSgnbGF5ZXInKTsKKworICAgICAgICBhZGRSbUxheWVyKGxheWVyT2JqVG9SbSwgZmFsc2UpOworCisgICAgICAgICQodGhpcykucGFyZW50KCkuZmFkZU91dChmdW5jdGlvbiAoKXsKKyAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOworICAgICAgICAgIHVwZGF0ZUxheWVyc0NvdW50KCk7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGxheWVyc0luUHJqTGlzdC5hcHBlbmQocHJvamVjdExheWVyKTsKKworICAgICAgdXBkYXRlTGF5ZXJzQ291bnQoKTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVMYXllcnNDb3VudCgpeworICAgIHZhciBjb3VudCA9ICQoIiNsYXllcnMtaW4tcHJvamVjdC1saXN0IikuY2hpbGRyZW4oKS5sZW5ndGg7CisKKyAgICBpZiAoY291bnQgPT09IDApCisgICAgICAkKCIjbm8tbGF5ZXJzLWluLXByb2plY3QiKS5mYWRlSW4oKTsKKyAgICBlbHNlCisgICAgICAkKCIjbm8tbGF5ZXJzLWluLXByb2plY3QiKS5oaWRlKCk7CisKKyAgICAkKCIjcHJvamVjdC1sYXllcnMtY291bnQiKS50ZXh0KGNvdW50KTsKKworICAgIHJldHVybiBjb3VudDsKKyAgfQorCisgIC8qIEZyZXF1ZW50IGJ1aWxkcyBmdW5jdGlvbmFsaXR5ICovCisgIGZ1bmN0aW9uIHVwZGF0ZUZyZXFCdWlsZFJlY2lwZXMocmVjaXBlcykgeworICAgIHZhciBub01vc3RCdWlsdCA9ICQoIiNuby1tb3N0LWJ1aWx0Iik7CisKKyAgICBpZiAocmVjaXBlcy5sZW5ndGggPT09IDApeworICAgICAgbm9Nb3N0QnVpbHQuc2hvdygpOworICAgICAgZnJlcUJ1aWxkQnRuLmhpZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgbm9Nb3N0QnVpbHQuaGlkZSgpOworICAgICAgZnJlcUJ1aWxkQnRuLnNob3coKTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpIGluIHJlY2lwZXMpeworICAgICAgdmFyIGZyZXFUYXJnZXRDaGVjayA9ICQoJzxsaT48bGFiZWwgY2xhc3M9ImNoZWNrYm94Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+PHNwYW4gY2xhc3M9ImZyZXEtdGFyZ2V0LW5hbWUiPjwvc3Bhbj48L2xhYmVsPjwvbGk+Jyk7CisgICAgICBmcmVxVGFyZ2V0Q2hlY2suZmluZCgiLmZyZXEtdGFyZ2V0LW5hbWUiKS50ZXh0KHJlY2lwZXNbaV0pOworICAgICAgZnJlcVRhcmdldENoZWNrLmZpbmQoImlucHV0IikudmFsKHJlY2lwZXNbaV0pOworICAgICAgZnJlcVRhcmdldENoZWNrLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgIGlmIChmcmVxQnVpbGRMaXN0LmZpbmQoIjpjaGVja2VkIikubGVuZ3RoID4gMCkKKyAgICAgICAgICBmcmVxQnVpbGRCdG4ucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZyZXFCdWlsZEJ0bi5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOworICAgICAgfSk7CisKKyAgICAgIGZyZXFCdWlsZExpc3QuYXBwZW5kKGZyZXFUYXJnZXRDaGVjayk7CisgICAgfQorICB9CisKKyAgZnJlcUJ1aWxkQnRuLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgIGUucHJldmVudERlZmF1bHQoKTsKKworICAgIHZhciB0b0J1aWxkID0gIiI7CisgICAgZnJlcUJ1aWxkTGlzdC5maW5kKCI6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgIHRvQnVpbGQgKz0gJCh0aGlzKS52YWwoKTsKKyAgICB9KTsKKworICAgIGxpYnRvYXN0ZXIuc3RhcnRBQnVpbGQobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCwgbGlidG9hc3Rlci5jdHgucHJvamVjdElkLCB0b0J1aWxkLCBmdW5jdGlvbigpeworICAgICAgLyogQnVpbGQgc3RhcnRlZCAqLworICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UobGlidG9hc3Rlci5jdHgucHJvamVjdEJ1aWxkc1VybCk7CisgICAgfSwKKyAgICBmdW5jdGlvbigpeworICAgICAgLyogQnVpbGQgc3RhcnQgZmFpbGVkICovCisgICAgICAvKiBbWU9DVE8gIzc5OTVdICovCisgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShsaWJ0b2FzdGVyLmN0eC5wcm9qZWN0QnVpbGRzVXJsKTsKKyAgICB9KTsKKyAgfSk7CisKKworICAvKiBDaGFuZ2UgbWFjaGluZSBmdW5jdGlvbmFsaXR5ICovCisKKyAgbWFjaGluZUNoYW5nZUZvcm1Ub2dnbGUuY2xpY2soZnVuY3Rpb24oKXsKKyAgICBtYWNoaW5lRm9ybS5zbGlkZURvd24oKTsKKyAgICBtYWNoaW5lTmFtZVRpdGxlLmhpZGUoKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgbWFjaGluZUNoYW5nZUNhbmNlbC5jbGljayhmdW5jdGlvbigpeworICAgIG1hY2hpbmVGb3JtLnNsaWRlVXAoZnVuY3Rpb24oKXsKKyAgICAgIG1hY2hpbmVOYW1lVGl0bGUuc2hvdygpOworICAgICAgbWFjaGluZUNoYW5nZUZvcm1Ub2dnbGUuc2hvdygpOworICAgIH0pOworICB9KTsKKworICBmdW5jdGlvbiB1cGRhdGVNYWNoaW5lTmFtZShtYWNoaW5lTmFtZSl7CisgICAgbWFjaGluZUNoYW5nZUlucHV0LnZhbChtYWNoaW5lTmFtZSk7CisgICAgbWFjaGluZU5hbWVUaXRsZS50ZXh0KG1hY2hpbmVOYW1lKTsKKyAgfQorCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChtYWNoaW5lQ2hhbmdlSW5wdXQsIGxpYnRvYXN0ZXIuY3R4Lm1hY2hpbmVzVHlwZUFoZWFkVXJsLCB7IH0sIGZ1bmN0aW9uKGl0ZW0peworICAgIGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uID0gaXRlbTsKKyAgICBtYWNoaW5lQ2hhbmdlQnRuLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgIH0pOworCisgIG1hY2hpbmVDaGFuZ2VCdG4uY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgIGlmIChjdXJyZW50TWFjaGluZUFkZFNlbGVjdGlvbi5uYW1lID09PSB1bmRlZmluZWQpCisgICAgICByZXR1cm47CisKKyAgICBsaWJ0b2FzdGVyLmVkaXRDdXJyZW50UHJvamVjdCh7IG1hY2hpbmVOYW1lIDogY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSB9LAorICAgICAgZnVuY3Rpb24oKXsKKyAgICAgICAgLyogU3VjY2VzcyBtYWNoaW5lIGNoYW5nZWQgKi8KKyAgICAgICAgdXBkYXRlTWFjaGluZU5hbWUoY3VycmVudE1hY2hpbmVBZGRTZWxlY3Rpb24ubmFtZSk7CisgICAgICAgIG1hY2hpbmVDaGFuZ2VDYW5jZWwuY2xpY2soKTsKKworICAgICAgICAvKiBTaG93IHRoZSBhbGVydCBtZXNzYWdlICovCisgICAgICAgIHZhciBtZXNzYWdlID0gJCgnPHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlIGNoYW5nZWQgdGhlIG1hY2hpbmUgdG86IDxzdHJvbmc+PHNwYW4gaWQ9Im5vdGlmeS1tYWNoaW5lLW5hbWUiPjwvc3Bhbj48L3N0cm9uZz48L3NwYW4+Jyk7CisgICAgICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1tYWNoaW5lLW5hbWUiKS50ZXh0KGN1cnJlbnRNYWNoaW5lQWRkU2VsZWN0aW9uLm5hbWUpOworICAgICAgICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obWVzc2FnZSk7CisgICAgfSwKKyAgICAgIGZ1bmN0aW9uKCl7CisgICAgICAgIC8qIEZhaWxlZCBtYWNoaW5lIGNoYW5nZWQgKi8KKyAgICAgICAgY29uc29sZS5sb2coImZhaWxlZCB0byBjaGFuZ2UgbWFjaGluZSIpOworICAgIH0pOworICB9KTsKKworCisgIC8qIENoYW5nZSByZWxlYXNlIGZ1bmN0aW9uYWxpdHkgKi8KKyAgZnVuY3Rpb24gdXBkYXRlUHJvamVjdFJlbGVhc2UocmVsZWFzZSl7CisgICAgcmVsZWFzZVRpdGxlLnRleHQocmVsZWFzZS5kZXNjcmlwdGlvbik7CisgIH0KKworICBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0UmVsZWFzZXMocmVsZWFzZXMsIGN1cnJlbnQpeworICAgIGZvciAodmFyIGkgaW4gcmVsZWFzZXMpeworICAgICAgdmFyIHJlbGVhc2VPcHRpb24gPSAkKCI8b3B0aW9uPjwvb3B0aW9uPiIpOworCisgICAgICByZWxlYXNlT3B0aW9uLnZhbChyZWxlYXNlc1tpXS5pZCk7CisgICAgICByZWxlYXNlT3B0aW9uLnRleHQocmVsZWFzZXNbaV0uZGVzY3JpcHRpb24pOworICAgICAgcmVsZWFzZU9wdGlvbi5kYXRhKCdyZWxlYXNlJywgcmVsZWFzZXNbaV0pOworCisgICAgICBpZiAocmVsZWFzZXNbaV0uaWQgPT0gY3VycmVudC5pZCkKKyAgICAgICAgcmVsZWFzZU9wdGlvbi5hdHRyKCJzZWxlY3RlZCIsICJzZWxlY3RlZCIpOworCisgICAgICByZWxlYXNlRm9ybS5jaGlsZHJlbigic2VsZWN0IikuYXBwZW5kKHJlbGVhc2VPcHRpb24pOworICAgIH0KKyAgfQorCisgIHJlbGVhc2VDaGFuZ2VGb3JtVG9nZ2xlLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgcmVsZWFzZUZvcm0uc2xpZGVEb3duKCk7CisgICAgcmVsZWFzZVRpdGxlLmhpZGUoKTsKKyAgICAkKHRoaXMpLmhpZGUoKTsKKyAgfSk7CisKKyAgY2FuY2VsUmVsZWFzZUNoYW5nZS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgcmVsZWFzZUZvcm0uc2xpZGVVcChmdW5jdGlvbigpeworICAgICAgcmVsZWFzZVRpdGxlLnNob3coKTsKKyAgICAgIHJlbGVhc2VDaGFuZ2VGb3JtVG9nZ2xlLnNob3coKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZnVuY3Rpb24gY2hhbmdlUHJvamVjdFJlbGVhc2UocmVsZWFzZSwgbGF5ZXJzVG9SbSl7CisgICAgbGlidG9hc3Rlci5lZGl0Q3VycmVudFByb2plY3QoeyBwcm9qZWN0VmVyc2lvbiA6IHJlbGVhc2UuaWQgfSwKKyAgICAgIGZ1bmN0aW9uKCl7CisgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgLyogVXBkYXRlIGxheWVycyBsaXN0IHdpdGggbmV3IGxheWVycyAqLworICAgICAgICBsYXllcnNJblByakxpc3QuYWRkQ2xhc3MoJ211dGVkJyk7CisgICAgICAgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsCisgICAgICAgICAgICBmdW5jdGlvbihwcmpJbmZvKXsKKyAgICAgICAgICAgICAgbGF5ZXJzSW5QcmpMaXN0LmNoaWxkcmVuKCkucmVtb3ZlKCk7CisgICAgICAgICAgICAgIHVwZGF0ZVByb2plY3RMYXllcnMocHJqSW5mby5sYXllcnMpOworICAgICAgICAgICAgICBsYXllcnNJblByakxpc3QucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgIHJlbGVhc2VDaGFuZ2VkTm90aWZpY2F0aW9uKHJlbGVhc2UsIHByakluZm8ubGF5ZXJzLCBsYXllcnNUb1JtKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVwZGF0ZVByb2plY3RSZWxlYXNlKHJlbGVhc2UpOworICAgICAgICBjYW5jZWxSZWxlYXNlQ2hhbmdlLmNsaWNrKCk7CisgICAgfSk7CisgIH0KKworICAvKiBDcmVhdGUgYSBub3RpZmljYXRpb24gdG8gc2hvdyB0aGUgY2hhbmdlcyB0byB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbgorICAgKiBjYXVzZWQgYnkgY2hhbmdpbmcgYSByZWxlYXNlLgorICAgKi8KKworICBmdW5jdGlvbiByZWxlYXNlQ2hhbmdlZE5vdGlmaWNhdGlvbihyZWxlYXNlLCBsYXllcnMsIGxheWVyc1RvUm0peworCisgICAgdmFyIG1lc3NhZ2U7CisKKyAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCAmJiBsYXllcnNUb1JtLmxlbmd0aCA9PT0gMCl7CisgICAgICBtZXNzYWdlID0gJCgnPHNwYW4+PHNwYW4gY2xhc3M9ImxlYWQiPllvdSBoYXZlIGNoYW5nZWQgdGhlIHByb2plY3QgcmVsZWFzZSB0bzogPHN0cm9uZz48c3BhbiBpZD0ibm90aWZ5LXJlbGVhc2UtbmFtZSI+PC9zcGFuPjwvc3Ryb25nPi4nKTsKKyAgICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1yZWxlYXNlLW5hbWUiKS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOworICAgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIENyZWF0ZSB0aGUgd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBsYXllcnMgcmVtb3ZlZCAqLworICAgIHZhciBsYXllcnNEZWxMaXN0ID0gIiI7CisKKyAgICBsYXllcnNUb1JtLm1hcChmdW5jdGlvbihsYXllciwgaSl7CisgICAgICBsYXllcnNEZWxMaXN0ICs9IGxheWVyLm5hbWU7CisgICAgICBpZiAobGF5ZXJzVG9SbVtpKzFdICE9PSB1bmRlZmluZWQpCisgICAgICAgIGxheWVyc0RlbExpc3QgKz0gJywgJzsKKyAgICB9KTsKKworICAgIG1lc3NhZ2UgPSAkKCc8c3Bhbj48c3BhbiBjbGFzcz0ibGVhZCI+WW91IGhhdmUgY2hhbmdlZCB0aGUgcHJvamVjdCByZWxlYXNlIHRvOiA8c3Ryb25nPjxzcGFuIGlkPSJub3RpZnktcmVsZWFzZS1uYW1lIj48L3NwYW4+PC9zdHJvbmc+LiBUaGlzIGhhcyBjYXVzZWQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGluIHlvdXIgcHJvamVjdCBsYXllcnM6PC9zcGFuPjx1bCBpZD0ibm90aWZ5LWxheWVycy1jaGFuZ2VkLWxpc3QiPjwvdWw+PC9zcGFuPicpOworCisgICAgdmFyIGNoYW5nZWRMaXN0ID0gbWVzc2FnZS5maW5kKCIjbm90aWZ5LWxheWVycy1jaGFuZ2VkLWxpc3QiKTsKKworICAgIG1lc3NhZ2UuZmluZCgiI25vdGlmeS1yZWxlYXNlLW5hbWUiKS50ZXh0KHJlbGVhc2UuZGVzY3JpcHRpb24pOworCisgICAgLyogTWFudWFsbHkgY29uc3RydWN0IHRoZSBsaXN0IGl0ZW0gZm9yIGNoYW5nZWQgbGF5ZXJzICovCisgICAgdmFyIGxpID0gJzxsaT48c3Ryb25nPicrbGF5ZXJzLmxlbmd0aCsnPC9zdHJvbmc+IGxheWVycyBjaGFuZ2VkIHRvIHRoZSA8c3Ryb25nPicrcmVsZWFzZS5uYW1lKyc8L3N0cm9uZz4gcmVsZWFzZTogJzsKKyAgICBmb3IgKHZhciBpIGluIGxheWVycyl7CisgICAgICBsaSArPSAnPGEgaHJlZj0nK2xheWVyc1tpXS5sYXllcmRldGFpbHVybCsnPicrbGF5ZXJzW2ldLm5hbWUrJzwvYT4nOworICAgICAgaWYgKGkgIT09IDApCisgICAgICAgIGxpICs9ICcsICc7CisgICAgfQorCisgICAgY2hhbmdlZExpc3QuYXBwZW5kKCQobGkpKTsKKworICAgIC8qIExheWVycyByZW1vdmVkICovCisgICAgaWYgKGxheWVyc1RvUm0gJiYgbGF5ZXJzVG9SbS5sZW5ndGggPiAwKXsKKyAgICAgIGlmIChsYXllcnNUb1JtLmxlbmd0aCA9PSAxKQorICAgICAgICBsaSA9ICc8bGk+PHN0cm9uZz4xPC9zdHJvbmc+IGxheWVyIGRlbGV0ZWQ6ICcrbGF5ZXJzVG9SbVswXS5uYW1lKyc8L2xpPic7CisgICAgICBlbHNlCisgICAgICAgIGxpID0gJzxsaT48c3Ryb25nPicrbGF5ZXJzVG9SbS5sZW5ndGgrJzwvc3Ryb25nPiBsYXllcnMgZGVsZXRlZDogJytsYXllcnNEZWxMaXN0Kyc8L2xpPic7CisKKyAgICAgIGNoYW5nZWRMaXN0LmFwcGVuZCgkKGxpKSk7CisgICAgfQorCisgICAgbGlidG9hc3Rlci5zaG93Q2hhbmdlTm90aWZpY2F0aW9uKG1lc3NhZ2UpOworICB9CisKKyAgLyogU2hvdyB0aGUgbW9kYWwgZGlhbG9nIHdoaWNoIGdpdmVzIHRoZSBvcHRpb24gdG8gcmVtb3ZlIGxheWVycyB3aGljaAorICAgKiBhcmVuJ3QgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm9wb3NlZCByZWxlYXNlCisgICAqLworICBmdW5jdGlvbiBzaG93UmVsZWFzZUxheWVyQ2hhbmdlTW9kYWwocmVsZWFzZSwgbGF5ZXJzKXsKKyAgICB2YXIgbGF5ZXJzVG9SbUxpc3QgPSByZWxlYXNlTW9kYWwuZmluZCgiI2xheWVycy10by1yZW1vdmUtbGlzdCIpOworICAgIGxheWVyc1RvUm1MaXN0LnRleHQoIiIpOworCisgICAgcmVsZWFzZU1vZGFsLmZpbmQoIi5wcm9wb3NlZC1yZWxlYXNlLWNoYW5nZS1uYW1lIikudGV4dChyZWxlYXNlLmRlc2NyaXB0aW9uKTsKKyAgICByZWxlYXNlTW9kYWwuZGF0YSgibGF5ZXJzIiwgbGF5ZXJzKTsKKyAgICByZWxlYXNlTW9kYWwuZGF0YSgicmVsZWFzZSIsIHJlbGVhc2UpOworCisgICAgZm9yICh2YXIgaSBpbiBsYXllcnMpeworICAgICAgbGF5ZXJzVG9SbUxpc3QuYXBwZW5kKCQoIjxsaT48L2xpPiIpLnRleHQobGF5ZXJzW2ldLm5hbWUpKTsKKyAgICB9CisgICAgcmVsZWFzZU1vZGFsLm1vZGFsKCdzaG93Jyk7CisgIH0KKworICAkKCIjY2hhbmdlLXJlbGVhc2UtYnRuIikuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdmFyIG5ld1JlbGVhc2UgPSByZWxlYXNlRm9ybS5maW5kKCJvcHRpb246c2VsZWN0ZWQiKS5kYXRhKCdyZWxlYXNlJyk7CisKKyAgICAkLmdldEpTT04oY3R4LnRlc3RSZWxlYXNlQ2hhbmdlVXJsLAorICAgICAgeyBuZXdfcmVsZWFzZV9pZDogbmV3UmVsZWFzZS5pZCB9LAorICAgICAgZnVuY3Rpb24obGF5ZXJzKSB7CisgICAgICAgIGlmIChsYXllcnMucm93cy5sZW5ndGggPT09IDApeworICAgICAgICAgIC8qIE5vIGxheWVycyB0byBjaGFuZ2UgZm9yIHRoaXMgcmVsZWFzZSAqLworICAgICAgICAgIGNoYW5nZVByb2plY3RSZWxlYXNlKG5ld1JlbGVhc2UsIFtdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzaG93UmVsZWFzZUxheWVyQ2hhbmdlTW9kYWwobmV3UmVsZWFzZSwgbGF5ZXJzLnJvd3MpOworICAgICAgICB9CisgICAgfSk7CisgIH0pOworCisgIC8qIFJlbGVhc2UgY2hhbmdlIG1vZGFsIGFjY2VwdCAqLworICAkKCIjY2hhbmdlLXJlbGVhc2UtYW5kLXJtLWxheWVycyIpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGxheWVycyA9IHJlbGVhc2VNb2RhbC5kYXRhKCJsYXllcnMiKTsKKyAgICB2YXIgcmVsZWFzZSA9ICByZWxlYXNlTW9kYWwuZGF0YSgicmVsZWFzZSIpOworCisgICAgY2hhbmdlUHJvamVjdFJlbGVhc2UocmVsZWFzZSwgbGF5ZXJzKTsKKyAgfSk7CisKK30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGFibGUuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3RhYmxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODAzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3RhYmxlLmpzCkBAIC0wLDAgKzEsNTU0IEBACisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIHRhYmxlSW5pdChjdHgpeworCisgIGlmIChjdHgudXJsLmxlbmd0aCA9PT0gMCkgeworICAgIHRocm93ICJObyB1cmwgc3VwcGxpZWQgZm9yIHJldHJlaXZpbmcgZGF0YSI7CisgIH0KKworICB2YXIgdGFibGVDaHJvbWVEb25lID0gZmFsc2U7CisgIHZhciB0YWJsZVRvdGFsID0gMDsKKworICB2YXIgdGFibGVQYXJhbXMgPSB7CisgICAgbGltaXQgOiAyNSwKKyAgICBwYWdlIDogMSwKKyAgICBvcmRlcmJ5IDogbnVsbCwKKyAgICBmaWx0ZXIgOiBudWxsLAorICAgIHNlYXJjaCA6IG51bGwsCisgIH07CisKKyAgdmFyIGRlZmF1bHRIaWRkZW5Db2xzID0gW107CisKKyAgdmFyIHRhYmxlID0gICQoIiMiICsgY3R4LnRhYmxlTmFtZSk7CisKKyAgLyogaWYgd2UncmUgbG9hZGluZyBjbGVhbiBmcm9tIGEgdXJsIHVzZSBpdCdzIHBhcmFtZXRlcnMgYXMgdGhlIGRlZmF1bHQgKi8KKyAgdmFyIHVybFBhcmFtcyA9IGxpYnRvYXN0ZXIucGFyc2VVcmxQYXJhbXMoKTsKKworICAvKiBNZXJnZSB0aGUgdGFibGVQYXJhbXMgYW5kIHVybFBhcmFtcyBvYmplY3QgcHJvcGVydGllcyAgKi8KKyAgdGFibGVQYXJhbXMgPSAkLmV4dGVuZCh0YWJsZVBhcmFtcywgdXJsUGFyYW1zKTsKKworICAvKiBOb3cgZml4IHRoZSB0eXBlcyB0aGF0IC5leHRlbmQgY2hhbmdlZCBmb3IgdXMgKi8KKyAgdGFibGVQYXJhbXMubGltaXQgPSBOdW1iZXIodGFibGVQYXJhbXMubGltaXQpOworICB0YWJsZVBhcmFtcy5wYWdlID0gTnVtYmVyKHRhYmxlUGFyYW1zLnBhZ2UpOworCisgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uKGV2ZW50KXsKKyAgICBpZiAoZXZlbnQuc3RhdGUpeworICAgICAgdGFibGVQYXJhbXMgPSBldmVudC5zdGF0ZS50YWJsZVBhcmFtczsKKyAgICAgIC8qIFdlIHNraXAgbG9hZERhdGEgYW5kIGp1c3QgdXBkYXRlIHRoZSB0YWJsZSAqLworICAgICAgdXBkYXRlVGFibGUoZXZlbnQuc3RhdGUudGFibGVEYXRhKTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gbG9hZERhdGEodGFibGVQYXJhbXMpeworICAgICQuYWpheCh7CisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICB1cmw6IGN0eC51cmwsCisgICAgICAgIGRhdGE6IHRhYmxlUGFyYW1zLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUNTUkZUb2tlbicgOiAkLmNvb2tpZSgnY3NyZnRva2VuJyl9LAorICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih0YWJsZURhdGEpIHsKKyAgICAgICAgICB1cGRhdGVUYWJsZSh0YWJsZURhdGEpOworICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7CisgICAgICAgICAgICAgIHRhYmxlRGF0YTogdGFibGVEYXRhLAorICAgICAgICAgICAgICB0YWJsZVBhcmFtczogdGFibGVQYXJhbXMKKyAgICAgICAgICB9LCBudWxsLCBsaWJ0b2FzdGVyLmR1bXBzVXJsUGFyYW1zKHRhYmxlUGFyYW1zKSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGZ1bmN0aW9uIHVwZGF0ZVRhYmxlKHRhYmxlRGF0YSkgeworICAgIHZhciB0YWJsZUJvZHkgPSB0YWJsZS5jaGlsZHJlbigidGJvZHkiKTsKKyAgICB2YXIgcGFnaW5hdGlvbiA9ICQoJyNwYWdpbmF0aW9uLScrY3R4LnRhYmxlTmFtZSk7CisgICAgdmFyIHBhZ2luYXRpb25CdG5zID0gcGFnaW5hdGlvbi5jaGlsZHJlbigndWwnKTsKKyAgICB2YXIgdGFibGVDb250YWluZXIgPSAkKCIjdGFibGUtY29udGFpbmVyLSIrY3R4LnRhYmxlTmFtZSk7CisKKyAgICB0YWJsZUNvbnRhaW5lci5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CisgICAgLyogVG8gYXZvaWQgcGFnZSByZS1sYXlvdXQgZmxpY2tlciB3aGVuIHBhZ2luZyBzZXQgZml4ZWQgaGVpZ2h0ICovCisgICAgdGFibGUuY3NzKCJwYWRkaW5nLWJvdHRvbSIsIHRhYmxlLmhlaWdodCgpKTsKKworICAgIC8qIFJlc2V0IHRhYmxlIGNvbXBvbmVudHMgKi8KKyAgICB0YWJsZUJvZHkuaHRtbCgiIik7CisgICAgcGFnaW5hdGlvbkJ0bnMuaHRtbCgiIik7CisKKyAgICBpZiAodGFibGVQYXJhbXMuc2VhcmNoKQorICAgICAgJCgnLnJlbW92ZS1zZWFyY2gtYnRuLScrY3R4LnRhYmxlTmFtZSkuc2hvdygpOworICAgIGVsc2UKKyAgICAgICQoJy5yZW1vdmUtc2VhcmNoLWJ0bi0nK2N0eC50YWJsZU5hbWUpLmhpZGUoKTsKKworICAgICQoJy50YWJsZS1jb3VudC0nICsgY3R4LnRhYmxlTmFtZSkudGV4dCh0YWJsZURhdGEudG90YWwpOworICAgIHRhYmxlVG90YWwgPSB0YWJsZURhdGEudG90YWw7CisKKyAgICBpZiAodGFibGVEYXRhLnRvdGFsID09PSAwKXsKKyAgICAgIHRhYmxlQ29udGFpbmVyLmhpZGUoKTsKKyAgICAgIC8qIElmIHdlIHdlcmUgc2VhcmNoaW5nIHNob3cgdGhlIG5ldyBzZWFyY2ggYmFyIGFuZCByZXR1cm4gKi8KKyAgICAgIGlmICh0YWJsZVBhcmFtcy5zZWFyY2gpeworICAgICAgICAkKCIjbmV3LXNlYXJjaC1pbnB1dC0iK2N0eC50YWJsZU5hbWUpLnZhbCh0YWJsZVBhcmFtcy5zZWFyY2gpOworICAgICAgICAkKCIjbm8tcmVzdWx0cy0iK2N0eC50YWJsZU5hbWUpLnNob3coKTsKKyAgICAgIH0KKyAgICAgIHRhYmxlLnRyaWdnZXIoInRhYmxlLWRvbmUiLCBbdGFibGVEYXRhLnRvdGFsLCB0YWJsZVBhcmFtc10pOworCisgICAgICByZXR1cm47CisKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGNsdXR0ZXIgdGhlIHBsYWNlIHdpdGggdGhlIHRhYmxlIGNocm9tZSBpZiB0aGVyZQorICAgICAqIGFyZSBvbmx5IGEgZmV3IHJlc3VsdHMgKi8KKyAgICB9IGVsc2UgaWYgKHRhYmxlRGF0YS50b3RhbCA8PSAxMCAmJgorICAgICAgICAgICAgICAgIXRhYmxlUGFyYW1zLmZpbHRlciAmJgorICAgICAgICAgICAgICAgIXRhYmxlUGFyYW1zLnNlYXJjaCl7CisgICAgICAkKCIjdGFibGUtY2hyb21lLSIrY3R4LnRhYmxlTmFtZSkuaGlkZSgpOworICAgICAgcGFnaW5hdGlvbi5oaWRlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRhYmxlQ29udGFpbmVyLnNob3coKTsKKyAgICAgICQoIiNuby1yZXN1bHRzLSIrY3R4LnRhYmxlTmFtZSkuaGlkZSgpOworICAgIH0KKworICAgIHNldHVwVGFibGVDaHJvbWUodGFibGVEYXRhKTsKKworICAgIC8qIEFkZCB0YWJsZSBkYXRhIHJvd3MgKi8KKyAgICB2YXIgY29sdW1uX2luZGV4OworICAgIGZvciAodmFyIGkgaW4gdGFibGVEYXRhLnJvd3MpeworICAgICAgLyogb25seSBkaXNwbGF5IGlmIHRoZSBjb2x1bW4gaXMgZGlzcGxheS1hYmxlICovCisgICAgICB2YXIgcm93ID0gJCgiPHRyPjwvdHI+Iik7CisgICAgICBjb2x1bW5faW5kZXggPSAtMTsKKyAgICAgIGZvciAodmFyIGtleV9qIGluIHRhYmxlRGF0YS5yb3dzW2ldKXsKKworICAgICAgICAvKiBpZiB3ZSBoYXZlIGEgc3RhdGljOiB2ZXJzaW9uIG9mIGEga2V5LCBwcmVmZXIgdGhlIHN0YXRpYzogdmVyc2lvbiBmb3IgcmVuZGVyaW5nICovCisgICAgICAgIHZhciBvcmlnX2tleV9qID0ga2V5X2o7CisKKyAgICAgICAgaWYgKGtleV9qLmluZGV4T2YoInN0YXRpYzoiKSA9PT0gMCkgeworICAgICAgICAgIGlmIChrZXlfai5zdWJzdHIoInN0YXRpYzoiLmxlbmd0aCkgaW4gdGFibGVEYXRhLnJvd3NbaV0pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBvcmlnX2tleV9qID0ga2V5X2ouc3Vic3RyKCJzdGF0aWM6Ii5sZW5ndGgpCisgICAgICAgIH0gZWxzZSBpZiAoKCJzdGF0aWM6IiArIGtleV9qKSBpbiB0YWJsZURhdGEucm93c1tpXSkgeworICAgICAgICAgIGtleV9qID0gInN0YXRpYzoiICsga2V5X2o7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBza2lwIG92ZXIgdW4tZGlzcGxheWFibGUgY29sdW1uIGVudHJpZXMgKi8KKyAgICAgICAgY29sdW1uX2luZGV4ICs9IDE7CisgICAgICAgIGlmICghIHRhYmxlRGF0YS5jb2x1bW5zW2NvbHVtbl9pbmRleF0uZGlzcGxheWFibGUpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZCA9ICQoIjx0ZD48L3RkPiIpOworICAgICAgICB0ZC5wcm9wKCJjbGFzcyIsIG9yaWdfa2V5X2opOworICAgICAgICBpZiAodGFibGVEYXRhLnJvd3NbaV1ba2V5X2pdKXsKKyAgICAgICAgICB0ZC5odG1sKHRhYmxlRGF0YS5yb3dzW2ldW2tleV9qXSk7CisgICAgICAgIH0KKyAgICAgICAgcm93LmFwcGVuZCh0ZCk7CisgICAgICB9CisgICAgICB0YWJsZUJvZHkuYXBwZW5kKHJvdyk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgbGF5ZXJidG5zIHRoZW4gaW5pdGlhbGlzZSB0aGVtICovCisgICAgICBsYXllckJ0bnNJbml0KGN0eCk7CisKKyAgICAgIC8qIElmIHdlIGhhdmUgcG9wb3ZlcnMgaW5pdGlhbGlzZSB0aGVtIG5vdyAqLworICAgICAgJCgndGQgPiBhLmJ0bicpLnBvcG92ZXIoeworICAgICAgICBodG1sOnRydWUsCisgICAgICAgIHBsYWNlbWVudDonbGVmdCcsCisgICAgICAgIGNvbnRhaW5lcjonYm9keScsCisgICAgICAgIHRyaWdnZXI6J21hbnVhbCcKKyAgICAgIH0pLmNsaWNrKGZ1bmN0aW9uKGUpeworICAgICAgICAkKCd0ZCA+IGEuYnRuJykubm90KHRoaXMpLnBvcG92ZXIoJ2hpZGUnKTsKKyAgICAgICAgLyogaWRlYWxseSB3ZSB3b3VsZCB1c2UgJ3RvZ2dsZScgaGVyZQorICAgICAgICAgKiBidXQgaXQgc2VlbXMgYnVnZ3kgaW4gb3VyIEJvb3RzdHJhcCB2ZXJzaW9uCisgICAgICAgICAqLworICAgICAgICAkKHRoaXMpLnBvcG92ZXIoJ3Nob3cnKTsKKyAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgIH0pOworCisgICAgICAvKiBlbmFibGUgaGVscCBpbmZvcm1hdGlvbiB0b29sdGlwICovCisgICAgICAkKCIuZ2V0LWhlbHAiKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIGRlbGF5OntzaG93OjMwMH19KTsKKyAgICB9CisKKyAgICAvKiBTZXR1cCB0aGUgcGFnaW5hdGlvbiBjb250cm9scyAqLworCisgICAgdmFyIHN0YXJ0ID0gdGFibGVQYXJhbXMucGFnZSAtIDI7CisgICAgdmFyIGVuZCA9IHRhYmxlUGFyYW1zLnBhZ2UgKyAyOworICAgIHZhciBudW1QYWdlcyA9IE1hdGguY2VpbCh0YWJsZURhdGEudG90YWwvdGFibGVQYXJhbXMubGltaXQpOworCisgICAgaWYgKG51bVBhZ2VzID4gIDEpeworICAgICAgaWYgKHRhYmxlUGFyYW1zLnBhZ2UgPCAzKQorICAgICAgICBlbmQgPSA1OworCisgICAgICBmb3IgKHZhciBwYWdlX2k9MTsgcGFnZV9pIDw9IG51bVBhZ2VzOyAgcGFnZV9pKyspeworICAgICAgICBpZiAocGFnZV9pID49IHN0YXJ0ICYmIHBhZ2VfaSA8PSBlbmQpeworICAgICAgICAgIHZhciBidG4gPSAkKCc8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBhZ2UiPicrcGFnZV9pKyc8L2E+PC9saT4nKTsKKworICAgICAgICAgIGlmIChwYWdlX2kgPT09IHRhYmxlUGFyYW1zLnBhZ2UpeworICAgICAgICAgICAgYnRuLmFkZENsYXNzKCJhY3RpdmUiKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBBZGQgdGhlIGNsaWNrIGhhbmRsZXIgKi8KKyAgICAgICAgICBidG4uY2xpY2socGFnZUJ1dHRvbkNsaWNrZWQpOworICAgICAgICAgIHBhZ2luYXRpb25CdG5zLmFwcGVuZChidG4pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgbG9hZENvbHVtbnNQcmVmZXJlbmNlKCk7CisKKyAgICB0YWJsZS5jc3MoInBhZGRpbmctYm90dG9tIiwgMCk7CisgICAgdGFibGVDb250YWluZXIuY3NzKCJ2aXNpYmlsaXR5IiwgInZpc2libGUiKTsKKworICAgIHRhYmxlLnRyaWdnZXIoInRhYmxlLWRvbmUiLCBbdGFibGVEYXRhLnRvdGFsLCB0YWJsZVBhcmFtc10pOworICB9CisKKyAgZnVuY3Rpb24gc2V0dXBUYWJsZUNocm9tZSh0YWJsZURhdGEpeworICAgIGlmICh0YWJsZUNocm9tZURvbmUgPT09IHRydWUpCisgICAgICByZXR1cm47CisKKyAgICB2YXIgdGFibGVIZWFkUm93ID0gdGFibGUuZmluZCgidGhlYWQiKTsKKyAgICB2YXIgZWRpdENvbE1lbnUgPSAkKCIjdGFibGUtY2hyb21lLSIrY3R4LnRhYmxlTmFtZSkuZmluZCgiLmVkaXRjb2wiKTsKKworICAgIHRhYmxlSGVhZFJvdy5odG1sKCIiKTsKKyAgICBlZGl0Q29sTWVudS5odG1sKCIiKTsKKworICAgIGlmICghdGFibGVQYXJhbXMub3JkZXJieSAmJiB0YWJsZURhdGEuZGVmYXVsdF9vcmRlcmJ5KXsKKyAgICAgIHRhYmxlUGFyYW1zLm9yZGVyYnkgPSB0YWJsZURhdGEuZGVmYXVsdF9vcmRlcmJ5OworICAgIH0KKworICAgIC8qIEFkZCB0YWJsZSBoZWFkZXIgYW5kIGNvbHVtbiB0b2dnbGUgbWVudSAqLworICAgIGZvciAodmFyIGkgaW4gdGFibGVEYXRhLmNvbHVtbnMpeworICAgICAgdmFyIGNvbCA9IHRhYmxlRGF0YS5jb2x1bW5zW2ldOworICAgICAgaWYgKGNvbC5kaXNwbGF5YWJsZSA9PT0gZmFsc2UpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICB2YXIgaGVhZGVyID0gJCgiPHRoPjwvdGg+Iik7CisgICAgICBoZWFkZXIucHJvcCgiY2xhc3MiLCBjb2wuZmllbGRfbmFtZSk7CisKKyAgICAgIC8qIFNldHVwIHRoZSBoZWxwIHRleHQgKi8KKyAgICAgIGlmIChjb2wuaGVscF90ZXh0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgdmFyIGhlbHBfdGV4dCA9ICQoJzxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiPiA8L2k+Jyk7CisgICAgICAgIGhlbHBfdGV4dC50b29sdGlwKHt0aXRsZTogY29sLmhlbHBfdGV4dH0pOworICAgICAgICBoZWFkZXIuYXBwZW5kKGhlbHBfdGV4dCk7CisgICAgICB9CisKKyAgICAgIC8qIFNldHVwIHRoZSBvcmRlcmFibGUgdGl0bGUgKi8KKyAgICAgIGlmIChjb2wub3JkZXJhYmxlKSB7CisgICAgICAgIHZhciB0aXRsZSA9ICQoJzxhIGhyZWY9XCIjXCIgPjwvYT4nKTsKKworICAgICAgICB0aXRsZS5kYXRhKCdmaWVsZC1uYW1lJywgY29sLmZpZWxkX25hbWUpOworICAgICAgICB0aXRsZS50ZXh0KGNvbC50aXRsZSk7CisgICAgICAgIHRpdGxlLmNsaWNrKHNvcnRDb2x1bW5DbGlja2VkKTsKKworICAgICAgICBoZWFkZXIuYXBwZW5kKHRpdGxlKTsKKworICAgICAgICBoZWFkZXIuYXBwZW5kKCcgPGkgY2xhc3M9Imljb24tY2FyZXQtZG93biIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pPicpOworICAgICAgICBoZWFkZXIuYXBwZW5kKCcgPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvaT4nKTsKKworICAgICAgICAvKiBJZiB3ZSdyZSBjdXJyZW50bHkgb3JkZXJlZCBzZXR1cCB0aGUgdmlzdWFsIGluZGljYXRvciAqLworICAgICAgICBpZiAoY29sLmZpZWxkX25hbWUgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkgfHwKKyAgICAgICAgICAnLScgKyBjb2wuZmllbGRfbmFtZSA9PT0gdGFibGVQYXJhbXMub3JkZXJieSl7CisgICAgICAgICAgaGVhZGVyLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInNvcnRlZCIpOworCisgICAgICAgICAgaWYgKHRhYmxlUGFyYW1zLm9yZGVyYnkuaW5kZXhPZigiLSIpID09PSAtMSl7CisgICAgICAgICAgICBoZWFkZXIuZmluZCgnLmljb24tY2FyZXQtZG93bicpLnNob3coKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGVhZGVyLmZpbmQoJy5pY29uLWNhcmV0LXVwJykuc2hvdygpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICB9IGVsc2UgeworICAgICAgICAvKiBOb3Qgb3JkZXJhYmxlICovCisgICAgICAgIGhlYWRlci5hZGRDbGFzcygibXV0ZWQiKTsKKyAgICAgICAgaGVhZGVyLmNzcygiZm9udC13ZWlnaHQiLCAibm9ybWFsIik7CisgICAgICAgIGhlYWRlci5hcHBlbmQoY29sLnRpdGxlKycgJyk7CisgICAgICB9CisKKyAgICAgIC8qIFNldHVwIHRoZSBmaWx0ZXIgYnV0dG9uICovCisgICAgICBpZiAoY29sLmZpbHRlcl9uYW1lKXsKKyAgICAgICAgdmFyIGZpbHRlckJ0biA9ICQoJzxhIGhyZWY9IiMiIHJvbGU9ImJ1dHRvbiIgY2xhc3M9InB1bGwtcmlnaHQgYnRuIGJ0bi1taW5pIiBkYXRhLXRvZ2dsZT0ibW9kYWwiPjxpIGNsYXNzPSJpY29uLWZpbHRlciBmaWx0ZXJlZCI+PC9pPjwvYT4nKTsKKworICAgICAgICBmaWx0ZXJCdG4uZGF0YSgnZmlsdGVyLW5hbWUnLCBjb2wuZmlsdGVyX25hbWUpOworICAgICAgICBmaWx0ZXJCdG4ucHJvcCgnaWQnLCBjb2wuZmlsdGVyX25hbWUpOworICAgICAgICBmaWx0ZXJCdG4uY2xpY2soZmlsdGVyT3BlbkNsaWNrZWQpOworCisgICAgICAgIC8qIElmIHdlJ3JlIGN1cnJlbnRseSBiZWluZyBmaWx0ZXJlZCBzZXR1cCB0aGUgdmlzaWFsIGluZGljYXRvciAqLworICAgICAgICBpZiAodGFibGVQYXJhbXMuZmlsdGVyICYmCisgICAgICAgICAgICB0YWJsZVBhcmFtcy5maWx0ZXIubWF0Y2goJ14nK2NvbC5maWx0ZXJfbmFtZSkpIHsKKworICAgICAgICAgICAgZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaGVhZGVyLmFwcGVuZChmaWx0ZXJCdG4pOworICAgICAgfQorCisgICAgICAvKiBEb25lIG1ha2luZyB0aGUgaGVhZGVyIG5vdyBhZGQgaXQgKi8KKyAgICAgIHRhYmxlSGVhZFJvdy5hcHBlbmQoaGVhZGVyKTsKKworICAgICAgLyogTm93IHNldHVwIHRoZSBjaGVja2JveCBzdGF0ZSBhbmQgY2xpY2sgaGFuZGxlciAqLworICAgICAgdmFyIHRvZ2dsZXIgPSAkKCc8bGk+PGxhYmVsIGNsYXNzPSJjaGVja2JveCI+Jytjb2wudGl0bGUrJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNoZWNrYm94LScrIGNvbC5maWVsZF9uYW1lICsnIiBjbGFzcz0iY29sLXRvZ2dsZSIgdmFsdWU9IicrY29sLmZpZWxkX25hbWUrJyIgLz48L2xhYmVsPjwvbGk+Jyk7CisKKyAgICAgIHZhciB0b2dnbGVySW5wdXQgPSB0b2dnbGVyLmZpbmQoImlucHV0Iik7CisKKyAgICAgIHRvZ2dsZXJJbnB1dC5hdHRyKCJjaGVja2VkIiwiY2hlY2tlZCIpOworCisgICAgICAvKiBJZiB3ZSBjYW4gaGlkZSB0aGUgY29sdW1uIGVuYWJsZSB0aGUgY2hlY2tib3ggYWN0aW9uICovCisgICAgICBpZiAoY29sLmhpZGVhYmxlKXsKKyAgICAgICAgdG9nZ2xlcklucHV0LmNsaWNrKGNvbFRvZ2dsZUNsaWNrZWQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdG9nZ2xlci5maW5kKCJsYWJlbCIpLmFkZENsYXNzKCJtdXRlZCIpOworICAgICAgICB0b2dnbGVySW5wdXQuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKKyAgICAgIH0KKworICAgICAgaWYgKGNvbC5oaWRkZW4pIHsKKyAgICAgICAgZGVmYXVsdEhpZGRlbkNvbHMucHVzaChjb2wuZmllbGRfbmFtZSk7CisgICAgICB9CisKKyAgICAgIGVkaXRDb2xNZW51LmFwcGVuZCh0b2dnbGVyKTsKKyAgICB9IC8qIEVuZCBmb3IgZWFjaCBjb2x1bW4gKi8KKworICAgIHRhYmxlQ2hyb21lRG9uZSA9IHRydWU7CisgIH0KKworICAvKiBUb2dnbGVzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGZpbHRlciBidXR0b24gKi8KKyAgZnVuY3Rpb24gZmlsdGVyQnRuQWN0aXZlKGZpbHRlckJ0biwgYWN0aXZlKXsKKyAgICBpZiAoYWN0aXZlKSB7CisgICAgICBmaWx0ZXJCdG4uYWRkQ2xhc3MoImJ0bi1wcmltYXJ5Iik7CisKKyAgICAgIGZpbHRlckJ0bi50b29sdGlwKHsKKyAgICAgICAgICBodG1sOiB0cnVlLAorICAgICAgICAgIHRpdGxlOiAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeSIgb25DbGljaz1cJyQoIiNjbGVhci1maWx0ZXItYnRuLScrIGN0eC50YWJsZU5hbWUgKyciKS5jbGljaygpO1wnPkNsZWFyIGZpbHRlcjwvYnV0dG9uPicsCisgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJywKKyAgICAgICAgICBkZWxheTogeworICAgICAgICAgICAgaGlkZTogMTUwMCwKKyAgICAgICAgICAgIHNob3c6IDQwMCwKKyAgICAgICAgICB9LAorICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpbHRlckJ0bi5yZW1vdmVDbGFzcygiYnRuLXByaW1hcnkiKTsKKyAgICAgIGZpbHRlckJ0bi50b29sdGlwKCdkZXN0cm95Jyk7CisgICAgfQorICB9CisKKyAgLyogRGlzcGxheSBvciBoaWRlIHRhYmxlIGNvbHVtbnMgYmFzZWQgb24gdGhlIGNvb2tpZSBwcmVmZXJlbmNlIG9yIGRlZmF1bHRzICovCisgIGZ1bmN0aW9uIGxvYWRDb2x1bW5zUHJlZmVyZW5jZSgpeworICAgIHZhciBjb29raWVfZGF0YSA9ICQuY29va2llKCJjb2xzIik7CisKKyAgICBpZiAoY29va2llX2RhdGEpIHsKKyAgICAgIHZhciBjb2xzX2hpZGRlbiA9IEpTT04ucGFyc2UoJC5jb29raWUoImNvbHMiKSk7CisKKyAgICAgIC8qIEZvciBlYWNoIG9mIHRoZSBjb2x1bW5zIGNoZWNrIGlmIHdlIHNob3VsZCBoaWRlIHRoZW0KKyAgICAgICAqIGFsc28gdXBkYXRlIHRoZSBjaGVja2VkIHN0YXR1cyBpbiB0aGUgRWRpdCBjb2x1bW5zIG1lbnUKKyAgICAgICAqLworICAgICAgJCgiIyIrY3R4LnRhYmxlTmFtZSsiIHRoIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICBmb3IgKHZhciBpIGluIGNvbHNfaGlkZGVuKXsKKyAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcyhjb2xzX2hpZGRlbltpXSkpeworICAgICAgICAgICAgJCgiLiIrY29sc19oaWRkZW5baV0pLmhpZGUoKTsKKyAgICAgICAgICAgICQoIiNjaGVja2JveC0iK2NvbHNfaGlkZGVuW2ldKS5yZW1vdmVBdHRyKCJjaGVja2VkIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qIERpc2FibGUgdGhlc2UgY29sdW1ucyBieSBkZWZhdWx0IHdoZW4gd2UgaGF2ZSBubyBjb2x1bW5zCisgICAgICAgICAqIHVzZXIgc2V0dGluZy4KKyAgICAgICAgICovCisgICAgICAgIGZvciAodmFyIGkgaW4gZGVmYXVsdEhpZGRlbkNvbHMpIHsKKyAgICAgICAgICAkKCIuIitkZWZhdWx0SGlkZGVuQ29sc1tpXSkuaGlkZSgpOworICAgICAgICAgICQoIiNjaGVja2JveC0iK2RlZmF1bHRIaWRkZW5Db2xzW2ldKS5yZW1vdmVBdHRyKCJjaGVja2VkIik7CisgICAgICAgIH0KKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBzb3J0Q29sdW1uQ2xpY2tlZCgpeworCisgICAgLyogV2Ugb25seSBoYXZlIG9uZSBzb3J0IGF0IGEgdGltZSBzbyByZW1vdmUgYW55IGV4aXN0aW5nIHNvcnQgaW5kaWNhdG9ycyAqLworICAgICQoIiMiK2N0eC50YWJsZU5hbWUrIiB0aCAuaWNvbi1jYXJldC1kb3duIikuaGlkZSgpOworICAgICQoIiMiK2N0eC50YWJsZU5hbWUrIiB0aCAuaWNvbi1jYXJldC11cCIpLmhpZGUoKTsKKyAgICAkKCIjIitjdHgudGFibGVOYW1lKyIgdGggYSIpLnJlbW92ZUNsYXNzKCJzb3J0ZWQiKTsKKworICAgIHZhciBmaWVsZE5hbWUgPSAkKHRoaXMpLmRhdGEoJ2ZpZWxkLW5hbWUnKTsKKworICAgIC8qIGlmIHdlJ3JlIGFscmVhZHkgc29ydGVkIHNvcnQgdGhlIG90aGVyIHdheSAqLworICAgIGlmICh0YWJsZVBhcmFtcy5vcmRlcmJ5ID09PSBmaWVsZE5hbWUgJiYKKyAgICAgICAgdGFibGVQYXJhbXMub3JkZXJieS5pbmRleE9mKCctJykgPT09IC0xKSB7CisgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gJy0nICsgJCh0aGlzKS5kYXRhKCdmaWVsZC1uYW1lJyk7CisgICAgICAkKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCcuaWNvbi1jYXJldC11cCcpLnNob3coKTsKKyAgICB9IGVsc2UgeworICAgICAgdGFibGVQYXJhbXMub3JkZXJieSA9ICQodGhpcykuZGF0YSgnZmllbGQtbmFtZScpOworICAgICAgJCh0aGlzKS5wYXJlbnQoKS5jaGlsZHJlbignLmljb24tY2FyZXQtZG93bicpLnNob3coKTsKKyAgICB9CisKKyAgICAkKHRoaXMpLmFkZENsYXNzKCJzb3J0ZWQiKTsKKworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKyAgfQorCisgIGZ1bmN0aW9uIHBhZ2VCdXR0b25DbGlja2VkKGUpIHsKKyAgICB0YWJsZVBhcmFtcy5wYWdlID0gTnVtYmVyKCQodGhpcykudGV4dCgpKTsKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgICAgLyogU3RvcCBwYWdlIGp1bXBzIHdoZW4gY2xpY2tpbmcgb24gIyBsaW5rcyAqLworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgfQorCisgIC8qIFRvZ2dsZSBhIHRhYmxlIGNvbHVtbiAqLworICBmdW5jdGlvbiBjb2xUb2dnbGVDbGlja2VkICgpeworICAgIHZhciBjb2wgPSAkKHRoaXMpLnZhbCgpOworICAgIHZhciBkaXNhYmxlZF9jb2xzID0gW107CisKKyAgICBpZiAoJCh0aGlzKS5wcm9wKCJjaGVja2VkIikpIHsKKyAgICAgICQoIi4iK2NvbCkuc2hvdygpOworICAgIH0gIGVsc2UgeworICAgICAgJCgiLiIrY29sKS5oaWRlKCk7CisgICAgICAvKiBJZiB3ZSdyZSBvcmRlcmVkIGJ5IHRoZSBjb2x1bW4gd2UncmUgaGlkaW5nIHJlbW92ZSB0aGUgb3JkZXIgYnkgKi8KKyAgICAgIGlmIChjb2wgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkgfHwKKyAgICAgICAgICAnLScgKyBjb2wgPT09IHRhYmxlUGFyYW1zLm9yZGVyYnkpeworICAgICAgICB0YWJsZVBhcmFtcy5vcmRlcmJ5ID0gbnVsbDsKKyAgICAgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVwZGF0ZSB0aGUgY29va2llIHdpdGggdGhlIHVuY2hlY2tlZCBjb2x1bW5zICovCisgICAgJCgiLmNvbC10b2dnbGUiKS5ub3QoIjpjaGVja2VkIikubWFwKGZ1bmN0aW9uKCl7CisgICAgICBkaXNhYmxlZF9jb2xzLnB1c2goJCh0aGlzKS52YWwoKSk7CisgICAgfSk7CisKKyAgICAkLmNvb2tpZSgiY29scyIsIEpTT04uc3RyaW5naWZ5KGRpc2FibGVkX2NvbHMpKTsKKyAgfQorCisgIGZ1bmN0aW9uIGZpbHRlck9wZW5DbGlja2VkKCl7CisgICAgdmFyIGZpbHRlck5hbWUgPSAkKHRoaXMpLmRhdGEoJ2ZpbHRlci1uYW1lJyk7CisKKyAgICAvKiBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIGN1cnJlbiBzZWFyY2ggc28gdGhhdCB0aGUgZmlsdGVyIGNvdW50cyB0YWtlCisgICAgICogaW50byBhY2NvdW50IHRoZSBjdXJyZW50IHNlYXJjaCBmaWx0ZXIKKyAgICAgKi8KKyAgICB2YXIgcGFyYW1zID0geworICAgICAgJ25hbWUnIDogZmlsdGVyTmFtZSwKKyAgICAgICdzZWFyY2gnOiB0YWJsZVBhcmFtcy5zZWFyY2gsCisgICAgICAnY21kJzogJ2ZpbHRlcmluZm8nLAorICAgIH07CisKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgdXJsOiBjdHgudXJsLAorICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAgICAgIGhlYWRlcnM6IHsgJ1gtQ1NSRlRva2VuJyA6ICQuY29va2llKCdjc3JmdG9rZW4nKX0sCisgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChmaWx0ZXJEYXRhKSB7CisgICAgICAgICAgdmFyIGZpbHRlckFjdGlvblJhZGlvcyA9ICQoJyNmaWx0ZXItYWN0aW9ucy0nK2N0eC50YWJsZU5hbWUpOworCisgICAgICAgICAgJCgnI2ZpbHRlci1tb2RhbC10aXRsZS0nK2N0eC50YWJsZU5hbWUpLnRleHQoZmlsdGVyRGF0YS50aXRsZSk7CisKKyAgICAgICAgICBmaWx0ZXJBY3Rpb25SYWRpb3MudGV4dCgiIik7CisKKyAgICAgICAgICBmb3IgKHZhciBpIGluIGZpbHRlckRhdGEuZmlsdGVyX2FjdGlvbnMpeworICAgICAgICAgICAgdmFyIGZpbHRlckFjdGlvbiA9IGZpbHRlckRhdGEuZmlsdGVyX2FjdGlvbnNbaV07CisKKyAgICAgICAgICAgIHZhciBhY3Rpb24gPSAkKCc8bGFiZWwgY2xhc3M9InJhZGlvIj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgdmFsdWU9IiI+PHNwYW4gY2xhc3M9ImZpbHRlci10aXRsZSI+PC9zcGFuPjwvbGFiZWw+Jyk7CisgICAgICAgICAgICB2YXIgYWN0aW9uVGl0bGUgPSBmaWx0ZXJBY3Rpb24udGl0bGUgKyAnICgnICsgZmlsdGVyQWN0aW9uLmNvdW50ICsgJyknOworCisgICAgICAgICAgICB2YXIgcmFkaW9JbnB1dCA9IGFjdGlvbi5jaGlsZHJlbigiaW5wdXQiKTsKKworICAgICAgICAgICAgaWYgKE51bWJlcihmaWx0ZXJBY3Rpb24uY291bnQpID09IDApeworICAgICAgICAgICAgICByYWRpb0lucHV0LmF0dHIoImRpc2FibGVkIiwgImRpc2FibGVkIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFjdGlvbi5jaGlsZHJlbigiLmZpbHRlci10aXRsZSIpLnRleHQoYWN0aW9uVGl0bGUpOworCisgICAgICAgICAgICByYWRpb0lucHV0LnZhbChmaWx0ZXJOYW1lICsgJzonICsgZmlsdGVyQWN0aW9uLm5hbWUpOworCisgICAgICAgICAgICAvKiBTZXR1cCB0aGUgY3VycmVudCBzZWxlY3RlZCBmaWx0ZXIsIGRlZmF1bHQgdG8gJ2FsbCcgaWYKKyAgICAgICAgICAgICAqIG5vIGN1cnJlbnQgZmlsdGVyIHNlbGVjdGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKHRhYmxlUGFyYW1zLmZpbHRlciAmJgorICAgICAgICAgICAgICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9PT0gcmFkaW9JbnB1dC52YWwoKSkgfHwKKyAgICAgICAgICAgICAgICBmaWx0ZXJBY3Rpb24ubmFtZSA9PSAnYWxsJykgeworICAgICAgICAgICAgICAgIHJhZGlvSW5wdXQuYXR0cigiY2hlY2tlZCIsICJjaGVja2VkIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbHRlckFjdGlvblJhZGlvcy5hcHBlbmQoYWN0aW9uKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAkKCcjZmlsdGVyLW1vZGFsLScrY3R4LnRhYmxlTmFtZSkubW9kYWwoJ3Nob3cnKTsKKyAgICAgICAgfQorICAgIH0pOworICB9CisKKworICAkKCIuZ2V0LWhlbHAiKS50b29sdGlwKHtjb250YWluZXI6J2JvZHknLCBodG1sOnRydWUsIGRlbGF5OntzaG93OjMwMH19KTsKKworICAvKiBLZWVwIHRoZSBFZGl0IGNvbHVtbnMgbWVudSBvcGVuIGFmdGVyIGNsaWNrIGJ5IGVhdGluZyB0aGUgZXZlbnQgKi8KKyAgJCgnLmRyb3Bkb3duLW1lbnUnKS5jbGljayhmdW5jdGlvbihlKSB7CisgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgfSk7CisKKyAgJCgiLnBhZ2VzaXplLSIrY3R4LnRhYmxlTmFtZSkudmFsKHRhYmxlUGFyYW1zLmxpbWl0KTsKKworICAvKiBwYWdlIHNpemUgc2VsZWN0b3IgICovCisgICQoIi5wYWdlc2l6ZS0iK2N0eC50YWJsZU5hbWUpLmNoYW5nZShmdW5jdGlvbihlKXsKKyAgICB0YWJsZVBhcmFtcy5saW1pdCA9IE51bWJlcih0aGlzLnZhbHVlKTsKKyAgICBpZiAoKHRhYmxlUGFyYW1zLnBhZ2UgKiB0YWJsZVBhcmFtcy5saW1pdCkgPiB0YWJsZVRvdGFsKQorICAgICAgdGFibGVQYXJhbXMucGFnZSA9IDE7CisKKyAgICBsb2FkRGF0YSh0YWJsZVBhcmFtcyk7CisgICAgLyogc3luYyB0aGUgb3RoZXIgc2VsZWN0b3JzIG9uIHRoZSBwYWdlICovCisgICAgJCgiLnBhZ2VzaXplLSIrY3R4LnRhYmxlTmFtZSkudmFsKHRoaXMudmFsdWUpOworICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgfSk7CisKKyAgJCgiI3NlYXJjaC1zdWJtaXQtIitjdHgudGFibGVOYW1lKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICB2YXIgc2VhcmNoVGVybSA9ICQoIiNzZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS52YWwoKTsKKworICAgIHRhYmxlUGFyYW1zLnBhZ2UgPSAxOworICAgIHRhYmxlUGFyYW1zLnNlYXJjaCA9IHNlYXJjaFRlcm07CisKKyAgICAvKiBJZiBhIGZpbHRlciB3YXMgYWN0aXZlIHdlIHJlbW92ZSBpdCAqLworICAgIGlmICh0YWJsZVBhcmFtcy5maWx0ZXIpIHsKKyAgICAgIHZhciBmaWx0ZXJCdG4gPSAkKCIjIiArIHRhYmxlUGFyYW1zLmZpbHRlci5zcGxpdCgiOiIpWzBdKTsKKyAgICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIGZhbHNlKTsKKyAgICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9IG51bGw7CisgICAgfQorCisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworCisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICB9KTsKKworICAkKCcucmVtb3ZlLXNlYXJjaC1idG4tJytjdHgudGFibGVOYW1lKS5jbGljayhmdW5jdGlvbihlKXsKKyAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICB0YWJsZVBhcmFtcy5wYWdlID0gMTsKKyAgICB0YWJsZVBhcmFtcy5zZWFyY2ggPSBudWxsOworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICAgICQoIiNzZWFyY2gtaW5wdXQtIitjdHgudGFibGVOYW1lKS52YWwoIiIpOworICAgICQodGhpcykuaGlkZSgpOworICB9KTsKKworICAkKCIjc2VhcmNoLWlucHV0LSIrY3R4LnRhYmxlTmFtZSkua2V5dXAoZnVuY3Rpb24oZSl7CisgICAgaWYgKGUud2hpY2ggPT09IDEzKQorICAgICAgJCgnI3NlYXJjaC1zdWJtaXQtJytjdHgudGFibGVOYW1lKS5jbGljaygpOworICB9KTsKKworICAvKiBTdG9wIHBhZ2UganVtcHMgd2hlbiBjbGlja2luZyBvbiAjIGxpbmtzICovCisgICQoJ2FbaHJlZj0iIyJdJykuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICB9KTsKKworICAkKCIjY2xlYXItZmlsdGVyLWJ0bi0iK2N0eC50YWJsZU5hbWUpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgdmFyIGZpbHRlckJ0biA9ICQoIiMiICsgdGFibGVQYXJhbXMuZmlsdGVyLnNwbGl0KCI6IilbMF0pOworICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIGZhbHNlKTsKKworICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9IG51bGw7CisgICAgbG9hZERhdGEodGFibGVQYXJhbXMpOworICB9KTsKKworICAkKCIjZmlsdGVyLW1vZGFsLWZvcm0tIitjdHgudGFibGVOYW1lKS5zdWJtaXQoZnVuY3Rpb24oZSl7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgdGFibGVQYXJhbXMuZmlsdGVyID0gJCh0aGlzKS5maW5kKCJpbnB1dFt0eXBlPSdyYWRpbyddOmNoZWNrZWQiKS52YWwoKTsKKworICAgIHZhciBmaWx0ZXJCdG4gPSAkKCIjIiArIHRhYmxlUGFyYW1zLmZpbHRlci5zcGxpdCgiOiIpWzBdKTsKKworICAgIC8qIEFsbCA9PT0gcmVtb3ZlIGZpbHRlciAqLworICAgIGlmICh0YWJsZVBhcmFtcy5maWx0ZXIubWF0Y2goIjphbGwkIikpIHsKKyAgICAgIHRhYmxlUGFyYW1zLmZpbHRlciA9IG51bGw7CisgICAgICBmaWx0ZXJCdG5BY3RpdmUoZmlsdGVyQnRuLCBmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpbHRlckJ0bkFjdGl2ZShmaWx0ZXJCdG4sIHRydWUpOworICAgIH0KKworICAgIGxvYWREYXRhKHRhYmxlUGFyYW1zKTsKKworICAgICQodGhpcykucGFyZW50KCkubW9kYWwoJ2hpZGUnKTsKKyAgfSk7Cit9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Rlc3RzL3Rlc3QuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3Rlc3RzL3Rlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxMDExMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS9zdGF0aWMvanMvdGVzdHMvdGVzdC5qcwpAQCAtMCwwICsxLDE3NSBAQAorInVzZSBzdHJpY3QiOworLyogVW5pdCB0ZXN0cyBmb3IgVG9hc3RlcidzIEpTICovCisKKy8qIGxpYnRvYXN0ZXIgdGVzdHMgKi8KKworUVVuaXQudGVzdCgiTGF5ZXIgYWxlcnQgbm90aWZpY2F0aW9uIiwgZnVuY3Rpb24oYXNzZXJ0KSB7CisgIHZhciBsYXllciA9IHsKKyAgICAibGF5ZXJkZXRhaWx1cmwiOiIvdG9hc3Rlcmd1aS9wcm9qZWN0LzEvbGF5ZXIvMjIiLAorICAgICJ2Y3NfdXJsIjoiZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQiLAorICAgICJkZXRhaWwiOiJbIGdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IHwgbWFzdGVyIF0iLAorICAgICJ2Y3NfcmVmZXJlbmNlIjoibWFzdGVyIiwKKyAgICAiaWQiOiAyMiwKKyAgICAibmFtZSI6Im1ldGEtZXhhbXBsZSIKKyAgfTsKKworICB2YXIgY29ycmVjdFJlc3BvbnNlID0gIllvdSBoYXZlIGFkZGVkIDxzdHJvbmc+Mzwvc3Ryb25nPiBsYXllcnMgdG8geW91ciBwcm9qZWN0OiA8YSBpZD1cImxheWVyLWFmZmVjdGVkLW5hbWVcIiBocmVmPVwiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzIyXCI+bWV0YS1leGFtcGxlPC9hPiBhbmQgaXRzIGRlcGVuZGVuY2llcyA8YSBocmVmPVwiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzlcIiBkYXRhLW9yaWdpbmFsLXRpdGxlPVwiXCIgdGl0bGU9XCJcIj5tZXRhLWV4YW1wbGUtdHdvPC9hPiwgPGEgaHJlZj1cIi90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci85XCIgZGF0YS1vcmlnaW5hbC10aXRsZT1cIlwiIHRpdGxlPVwiXCI+bWV0YS1leGFtcGxlLXRocmVlPC9hPiI7CisKKyAgdmFyIGxheWVyRGVwc0xpc3QgPSBbCisgICAgeworICAgICJsYXllcmRldGFpbHVybCI6Ii90b2FzdGVyZ3VpL3Byb2plY3QvMS9sYXllci85IiwKKyAgICAidmNzX3VybCI6ImdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IiwKKyAgICAiZGV0YWlsIjoiWyBnaXQ6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmdpdCB8IG1hc3RlciBdIiwKKyAgICAidmNzX3JlZmVyZW5jZSI6Im1hc3RlciIsCisgICAgImlkIjogOSwKKyAgICAibmFtZSI6Im1ldGEtZXhhbXBsZS10d28iCisgICAgfSwKKyAgICB7CisgICAgImxheWVyZGV0YWlsdXJsIjoiL3RvYXN0ZXJndWkvcHJvamVjdC8xL2xheWVyLzkiLAorICAgICJ2Y3NfdXJsIjoiZ2l0Oi8vZXhhbXBsZS5jb20vZXhhbXBsZS5naXQiLAorICAgICJkZXRhaWwiOiJbIGdpdDovL2V4YW1wbGUuY29tL2V4YW1wbGUuZ2l0IHwgbWFzdGVyIF0iLAorICAgICJ2Y3NfcmVmZXJlbmNlIjoibWFzdGVyIiwKKyAgICAiaWQiOiAxMCwKKyAgICAibmFtZSI6Im1ldGEtZXhhbXBsZS10aHJlZSIKKyAgICB9LAorICBdOworCisgIHZhciBtc2cgPSBsaWJ0b2FzdGVyLm1ha2VMYXllckFkZFJtQWxlcnRNc2cobGF5ZXIsIGxheWVyRGVwc0xpc3QsIHRydWUpOworICB2YXIgdGVzdCA9ICQoIjxkaXY+PC9kaXY+Iik7CisKKyAgdGVzdC5odG1sKG1zZyk7CisKKyAgYXNzZXJ0LmVxdWFsKHRlc3QuY2hpbGRyZW4oInN0cm9uZyIpLnRleHQoKSwgIjMiKTsKKyAgYXNzZXJ0LmVxdWFsKHRlc3QuY2hpbGRyZW4oImEiKS5sZW5ndGgsIDMpOworfSk7CisKK1FVbml0LnRlc3QoIlByb2plY3QgaW5mbyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7CisgIGxpYnRvYXN0ZXIuZ2V0UHJvamVjdEluZm8obGlidG9hc3Rlci5jdHgucHJvamVjdFBhZ2VVcmwsIGZ1bmN0aW9uKHByakluZm8peworICAgIGFzc2VydC5vayhwcmpJbmZvLm1hY2hpbmUubmFtZSk7CisgICAgYXNzZXJ0Lm9rKHByakluZm8ucmVsZWFzZXMubGVuZ3RoID4gMCk7CisgICAgYXNzZXJ0Lm9rKHByakluZm8ubGF5ZXJzLmxlbmd0aCA+IDApOworICAgIGFzc2VydC5vayhwcmpJbmZvLmZyZXF0YXJnZXRzKTsKKyAgICBhc3NlcnQub2socHJqSW5mby5yZWxlYXNlKTsKKyAgICBkb25lKCk7CisgIH0pOworfSk7CisKK1FVbml0LnRlc3QoIlNob3cgbm90aWZpY2F0aW9uIiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgdmFyIG1zZyA9ICJUZXN0aW5nIjsKKyAgdmFyIGVsZW1lbnQgPSAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbi1tc2ciKTsKKworICBsaWJ0b2FzdGVyLnNob3dDaGFuZ2VOb3RpZmljYXRpb24obXNnKTsKKworICBhc3NlcnQuZXF1YWwoZWxlbWVudC50ZXh0KCksIG1zZyk7CisgIGFzc2VydC5vayhlbGVtZW50LmlzKCI6dmlzaWJsZSIpKTsKKworICAkKCIjY2hhbmdlLW5vdGlmaWNhdGlvbiIpLmhpZGUoKTsKK30pOworCit2YXIgbGF5ZXIgPSB7CisgICJpZCI6IDkxLAorICAibmFtZSI6ICAibWV0YS1jcnlzdGFsZm9yZXN0IiwKKyAgImxheWVyZGV0YWlsdXJsIjogIi90b2FzdGVyZ3VpL3Byb2plY3QvNC9sYXllci85MSIKK307CisKK1FVbml0LnRlc3QoIkFkZCBsYXllciIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7CisKKyAgLyogV2FpdCBmb3IgdGhlIG1vZGFsIHRvIGJlIGFkZGVkIHRvIHRoZSBkb20gKi8KKyAgdmFyIGNoZWNrTW9kYWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpeworICAgIGlmICgkKCIjZGVwZW5kZW5jaWVzLW1vZGFsIikubGVuZ3RoID4gMCkgeworICAgICAgJCgiI2RlcGVuZGVuY2llcy1tb2RhbCAuYnRuLXByaW1hcnkiKS5jbGljaygpOworICAgICAgY2xlYXJJbnRlcnZhbChjaGVja01vZGFsKTsKKyAgICB9CisgIH0sIDIwMCk7CisKKyAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyLCB0cnVlLCBmdW5jdGlvbihkZXBzKXsKKyAgICBhc3NlcnQuZXF1YWwoZGVwcy5sZW5ndGgsIDEpOworICAgIGRvbmUoKTsKKyAgfSk7CisKK30pOworCitRVW5pdC50ZXN0KCJSbSBsYXllciIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBkb25lID0gYXNzZXJ0LmFzeW5jKCk7CisKKyAgbGlidG9hc3Rlci5hZGRSbUxheWVyKGxheWVyLCBmYWxzZSwgZnVuY3Rpb24oZGVwcyl7CisgICAgYXNzZXJ0LmVxdWFsKGRlcHMubGVuZ3RoLCAwKTsKKyAgICBkb25lKCk7CisgIH0pOworCit9KTsKKworUVVuaXQudGVzdCgiUGFyc2UgdXJsIHBhcmFtcyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBwYXJhbXMgPSBsaWJ0b2FzdGVyLnBhcnNlVXJsUGFyYW1zKCk7CisgIGFzc2VydC5vayhwYXJhbXMpOworfSk7CisKK1FVbml0LnRlc3QoIkR1bXAgdXJsIHBhcmFtcyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBwYXJhbXMgPSBsaWJ0b2FzdGVyLmR1bXBzVXJsUGFyYW1zKCk7CisgIGFzc2VydC5vayhwYXJhbXMpOworfSk7CisKK1FVbml0LnRlc3QoIk1ha2UgdHlwZWFoZWFkcyIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIHZhciBsYXllcnNUID0gJCgiI2xheWVycyIpOworICB2YXIgbWFjaGluZXNUID0gJCgiI21hY2hpbmVzIik7CisgIHZhciBwcm9qZWN0c1QgPSAkKCIjcHJvamVjdHMiKTsKKyAgdmFyIHJlY2lwZXNUID0gJCgiI3JlY2lwZXMiKTsKKworICBsaWJ0b2FzdGVyLm1ha2VUeXBlYWhlYWQobGF5ZXJzVCwKKyAgICBsaWJ0b2FzdGVyLmN0eC5sYXllcnNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChtYWNoaW5lc1QsCisgICAgbGlidG9hc3Rlci5jdHgubWFjaGluZXNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChwcm9qZWN0c1QsCisgICAgbGlidG9hc3Rlci5jdHgucHJvamVjdHNUeXBlQWhlYWRVcmwsIHt9LCBmdW5jdGlvbigpe30pOworCisgIGxpYnRvYXN0ZXIubWFrZVR5cGVhaGVhZChyZWNpcGVzVCwKKyAgICBsaWJ0b2FzdGVyLmN0eC5yZWNpcGVzVHlwZUFoZWFkVXJsLCB7fSwgZnVuY3Rpb24oKXt9KTsKKworICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHlwZWFoZWFkJykpOworICBhc3NlcnQub2sobGF5ZXJzVC5kYXRhKCd0eXBlYWhlYWQnKSk7CisgIGFzc2VydC5vayhwcm9qZWN0c1QuZGF0YSgndHlwZWFoZWFkJykpOworICBhc3NlcnQub2socmVjaXBlc1QuZGF0YSgndHlwZWFoZWFkJykpOworfSk7CisKKworCisvKiBQYWdlIGluaXQgZnVuY3Rpb25zICovCisKK1FVbml0LnRlc3QoIkltcG9ydCBsYXllciBwYWdlIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKGltcG9ydExheWVyUGFnZUluaXQoKSk7Cit9KTsKKworUVVuaXQudGVzdCgiUHJvamVjdCBwYWdlIGluaXQiLCBmdW5jdGlvbihhc3NlcnQpeworICBhc3NlcnQudGhyb3dzKHByb2plY3RQYWdlSW5pdCgpKTsKK30pOworCitRVW5pdC50ZXN0KCJMYXllciBkZXRhaWxzIHBhZ2UgaW5pdCIsIGZ1bmN0aW9uKGFzc2VydCl7CisgIGFzc2VydC50aHJvd3MobGF5ZXJEZXRhaWxzUGFnZUluaXQoKSk7Cit9KTsKKworUVVuaXQudGVzdCgiTGF5ZXIgYnRucyBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyhsYXllckJ0bnNJbml0KHsgcHJvamVjdExheWVycyA6IFtdIH0pKTsKK30pOworCitRVW5pdC50ZXN0KCJUYWJsZSBpbml0IiwgZnVuY3Rpb24oYXNzZXJ0KXsKKyAgYXNzZXJ0LnRocm93cyh0YWJsZUluaXQoeyB1cmwgOiB0YWJsZVVybCB9KSk7Cit9KTsKKworJChkb2N1bWVudCkuYWpheEVycm9yKGZ1bmN0aW9uKGV2ZW50LCBqcXhociwgc2V0dGluZ3MsIGVyck1zZyl7CisgIGlmIChlcnJNc2cgPT09ICdhYm9ydCcpCisgICAgcmV0dXJuOworCisgIFFVbml0LnRlc3QoIkFqYXggZXJyb3IiLCBmdW5jdGlvbihhc3NlcnQpeworICAgIGFzc2VydC5ub3RPayhqcXhoci5yZXNwb25zZVRleHQpOworICB9KTsKK30pOworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAuanMgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZhODYxCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAuanMKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIGFuZ3VsYXItdWktYm9vdHN0cmFwCisgKiBodHRwOi8vYW5ndWxhci11aS5naXRodWIuaW8vYm9vdHN0cmFwLworCisgKiBWZXJzaW9uOiAwLjExLjAgLSAyMDE0LTA1LTAxCisgKiBMaWNlbnNlOiBNSVQKKyAqLworYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcCIsWyJ1aS5ib290c3RyYXAudHBscyIsInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIiwidWkuYm9vdHN0cmFwLmNvbGxhcHNlIiwidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsInVpLmJvb3RzdHJhcC5hbGVydCIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCIsInVpLmJvb3RzdHJhcC5idXR0b25zIiwidWkuYm9vdHN0cmFwLmNhcm91c2VsIiwidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLCJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlciIsInVpLmJvb3RzdHJhcC5kcm9wZG93biIsInVpLmJvb3RzdHJhcC5tb2RhbCIsInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIiwidWkuYm9vdHN0cmFwLnRvb2x0aXAiLCJ1aS5ib290c3RyYXAucG9wb3ZlciIsInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsInVpLmJvb3RzdHJhcC5yYXRpbmciLCJ1aS5ib290c3RyYXAudGFicyIsInVpLmJvb3RzdHJhcC50aW1lcGlja2VyIiwidWkuYm9vdHN0cmFwLnR5cGVhaGVhZCJdKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRwbHMiLFsidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIiwidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIiwidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIl0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiIsW10pLmZhY3RvcnkoIiR0cmFuc2l0aW9uIixbIiRxIiwiJHRpbWVvdXQiLCIkcm9vdFNjb3BlIixmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtmb3IodmFyIGIgaW4gYSlpZih2b2lkIDAhPT1mLnN0eWxlW2JdKXJldHVybiBhW2JdfXZhciBlPWZ1bmN0aW9uKGQsZixnKXtnPWd8fHt9O3ZhciBoPWEuZGVmZXIoKSxpPWVbZy5hbmltYXRpb24/ImFuaW1hdGlvbkVuZEV2ZW50TmFtZSI6InRyYW5zaXRpb25FbmRFdmVudE5hbWUiXSxqPWZ1bmN0aW9uKCl7Yy4kYXBwbHkoZnVuY3Rpb24oKXtkLnVuYmluZChpLGopLGgucmVzb2x2ZShkKX0pfTtyZXR1cm4gaSYmZC5iaW5kKGksaiksYihmdW5jdGlvbigpe2FuZ3VsYXIuaXNTdHJpbmcoZik/ZC5hZGRDbGFzcyhmKTphbmd1bGFyLmlzRnVuY3Rpb24oZik/ZihkKTphbmd1bGFyLmlzT2JqZWN0KGYpJiZkLmNzcyhmKSxpfHxoLnJlc29sdmUoZCl9KSxoLnByb21pc2UuY2FuY2VsPWZ1bmN0aW9uKCl7aSYmZC51bmJpbmQoaSxqKSxoLnJlamVjdCgiVHJhbnNpdGlvbiBjYW5jZWxsZWQiKX0saC5wcm9taXNlfSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyYW5zIiksZz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn0saD17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0QW5pbWF0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJhbmltYXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvQW5pbWF0aW9uRW5kIix0cmFuc2l0aW9uOiJhbmltYXRpb25lbmQifTtyZXR1cm4gZS50cmFuc2l0aW9uRW5kRXZlbnROYW1lPWQoZyksZS5hbmltYXRpb25FbmRFdmVudE5hbWU9ZChoKSxlfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuY29sbGFwc2UiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZGlyZWN0aXZlKCJjb2xsYXBzZSIsWyIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSl7cmV0dXJue2xpbms6ZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGUoYil7ZnVuY3Rpb24gZCgpe2o9PT1lJiYoaj12b2lkIDApfXZhciBlPWEoYyxiKTtyZXR1cm4gaiYmai5jYW5jZWwoKSxqPWUsZS50aGVuKGQsZCksZX1mdW5jdGlvbiBmKCl7az8oaz0hMSxnKCkpOihjLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIiksZSh7aGVpZ2h0OmNbMF0uc2Nyb2xsSGVpZ2h0KyJweCJ9KS50aGVuKGcpKX1mdW5jdGlvbiBnKCl7Yy5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLGMuYWRkQ2xhc3MoImNvbGxhcHNlIGluIiksYy5jc3Moe2hlaWdodDoiYXV0byJ9KX1mdW5jdGlvbiBoKCl7aWYoaylrPSExLGkoKSxjLmNzcyh7aGVpZ2h0OjB9KTtlbHNle2MuY3NzKHtoZWlnaHQ6Y1swXS5zY3JvbGxIZWlnaHQrInB4In0pO3tjWzBdLm9mZnNldFdpZHRofWMucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKSxlKHtoZWlnaHQ6MH0pLnRoZW4oaSl9fWZ1bmN0aW9uIGkoKXtjLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIiksYy5hZGRDbGFzcygiY29sbGFwc2UiKX12YXIgaixrPSEwO2IuJHdhdGNoKGQuY29sbGFwc2UsZnVuY3Rpb24oYSl7YT9oKCk6ZigpfSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsWyJ1aS5ib290c3RyYXAuY29sbGFwc2UiXSkuY29uc3RhbnQoImFjY29yZGlvbkNvbmZpZyIse2Nsb3NlT3RoZXJzOiEwfSkuY29udHJvbGxlcigiQWNjb3JkaW9uQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJhY2NvcmRpb25Db25maWciLGZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcz1bXSx0aGlzLmNsb3NlT3RoZXJzPWZ1bmN0aW9uKGQpe3ZhciBlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuY2xvc2VPdGhlcnMpP2EuJGV2YWwoYi5jbG9zZU90aGVycyk6Yy5jbG9zZU90aGVycztlJiZhbmd1bGFyLmZvckVhY2godGhpcy5ncm91cHMsZnVuY3Rpb24oYSl7YSE9PWQmJihhLmlzT3Blbj0hMSl9KX0sdGhpcy5hZGRHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3RoaXMuZ3JvdXBzLnB1c2goYSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IucmVtb3ZlR3JvdXAoYSl9KX0sdGhpcy5yZW1vdmVHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdyb3Vwcy5pbmRleE9mKGEpOy0xIT09YiYmdGhpcy5ncm91cHMuc3BsaWNlKGIsMSl9fV0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFjY29yZGlvbkNvbnRyb2xsZXIiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIn19KS5kaXJlY3RpdmUoImFjY29yZGlvbkdyb3VwIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeYWNjb3JkaW9uIixyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIixzY29wZTp7aGVhZGluZzoiQCIsaXNPcGVuOiI9PyIsaXNEaXNhYmxlZDoiPT8ifSxjb250cm9sbGVyOmZ1bmN0aW9uKCl7dGhpcy5zZXRIZWFkaW5nPWZ1bmN0aW9uKGEpe3RoaXMuaGVhZGluZz1hfX0sbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEdyb3VwKGEpLGEuJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGIpe2ImJmQuY2xvc2VPdGhlcnMoYSl9KSxhLnRvZ2dsZU9wZW49ZnVuY3Rpb24oKXthLmlzRGlzYWJsZWR8fChhLmlzT3Blbj0hYS5pc09wZW4pfX19fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25IZWFkaW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGU6IiIscmVwbGFjZTohMCxyZXF1aXJlOiJeYWNjb3JkaW9uR3JvdXAiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCxlKXtkLnNldEhlYWRpbmcoZShhLGZ1bmN0aW9uKCl7fSkpfX19KS5kaXJlY3RpdmUoImFjY29yZGlvblRyYW5zY2x1ZGUiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5hY2NvcmRpb25Hcm91cCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXthLiR3YXRjaChmdW5jdGlvbigpe3JldHVybiBkW2MuYWNjb3JkaW9uVHJhbnNjbHVkZV19LGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFsZXJ0IixbXSkuY29udHJvbGxlcigiQWxlcnRDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsZnVuY3Rpb24oYSxiKXthLmNsb3NlYWJsZT0iY2xvc2UiaW4gYn1dKS5kaXJlY3RpdmUoImFsZXJ0IixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFsZXJ0Q29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxzY29wZTp7dHlwZToiQCIsY2xvc2U6IiYifX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmJpbmRIdG1sIixbXSkuZGlyZWN0aXZlKCJiaW5kSHRtbFVuc2FmZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYSxiLGMpe2IuYWRkQ2xhc3MoIm5nLWJpbmRpbmciKS5kYXRhKCIkYmluZGluZyIsYy5iaW5kSHRtbFVuc2FmZSksYS4kd2F0Y2goYy5iaW5kSHRtbFVuc2FmZSxmdW5jdGlvbihhKXtiLmh0bWwoYXx8IiIpfSl9fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5idXR0b25zIixbXSkuY29uc3RhbnQoImJ1dHRvbkNvbmZpZyIse2FjdGl2ZUNsYXNzOiJhY3RpdmUiLHRvZ2dsZUV2ZW50OiJjbGljayJ9KS5jb250cm9sbGVyKCJCdXR0b25zQ29udHJvbGxlciIsWyJidXR0b25Db25maWciLGZ1bmN0aW9uKGEpe3RoaXMuYWN0aXZlQ2xhc3M9YS5hY3RpdmVDbGFzc3x8ImFjdGl2ZSIsdGhpcy50b2dnbGVFdmVudD1hLnRvZ2dsZUV2ZW50fHwiY2xpY2sifV0pLmRpcmVjdGl2ZSgiYnRuUmFkaW8iLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6WyJidG5SYWRpbyIsIm5nTW9kZWwiXSxjb250cm9sbGVyOiJCdXR0b25zQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGUuYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoZi4kbW9kZWxWYWx1ZSxhLiRldmFsKGMuYnRuUmFkaW8pKSl9LGIuYmluZChlLnRvZ2dsZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIGQ9Yi5oYXNDbGFzcyhlLmFjdGl2ZUNsYXNzKTsoIWR8fGFuZ3VsYXIuaXNEZWZpbmVkKGMudW5jaGVja2FibGUpKSYmYS4kYXBwbHkoZnVuY3Rpb24oKXtmLiRzZXRWaWV3VmFsdWUoZD9udWxsOmEuJGV2YWwoYy5idG5SYWRpbykpLGYuJHJlbmRlcigpfSl9KX19fSkuZGlyZWN0aXZlKCJidG5DaGVja2JveCIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZTpbImJ0bkNoZWNrYm94IiwibmdNb2RlbCJdLGNvbnRyb2xsZXI6IkJ1dHRvbnNDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZyhjLmJ0bkNoZWNrYm94VHJ1ZSwhMCl9ZnVuY3Rpb24gZigpe3JldHVybiBnKGMuYnRuQ2hlY2tib3hGYWxzZSwhMSl9ZnVuY3Rpb24gZyhiLGMpe3ZhciBkPWEuJGV2YWwoYik7cmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKGQpP2Q6Y312YXIgaD1kWzBdLGk9ZFsxXTtpLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGguYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoaS4kbW9kZWxWYWx1ZSxlKCkpKX0sYi5iaW5kKGgudG9nZ2xlRXZlbnQsZnVuY3Rpb24oKXthLiRhcHBseShmdW5jdGlvbigpe2kuJHNldFZpZXdWYWx1ZShiLmhhc0NsYXNzKGguYWN0aXZlQ2xhc3MpP2YoKTplKCkpLGkuJHJlbmRlcigpfSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5jYXJvdXNlbCIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5jb250cm9sbGVyKCJDYXJvdXNlbENvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJHRpbWVvdXQiLCIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXtlKCk7dmFyIGM9K2EuaW50ZXJ2YWw7IWlzTmFOKGMpJiZjPj0wJiYoZz1iKGYsYykpfWZ1bmN0aW9uIGUoKXtnJiYoYi5jYW5jZWwoZyksZz1udWxsKX1mdW5jdGlvbiBmKCl7aD8oYS5uZXh0KCksZCgpKTphLnBhdXNlKCl9dmFyIGcsaCxpPXRoaXMsaj1pLnNsaWRlcz1hLnNsaWRlcz1bXSxrPS0xO2kuY3VycmVudFNsaWRlPW51bGw7dmFyIGw9ITE7aS5zZWxlY3Q9YS5zZWxlY3Q9ZnVuY3Rpb24oZSxmKXtmdW5jdGlvbiBnKCl7aWYoIWwpe2lmKGkuY3VycmVudFNsaWRlJiZhbmd1bGFyLmlzU3RyaW5nKGYpJiYhYS5ub1RyYW5zaXRpb24mJmUuJGVsZW1lbnQpe2UuJGVsZW1lbnQuYWRkQ2xhc3MoZik7e2UuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGh9YW5ndWxhci5mb3JFYWNoKGosZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoYSx7ZGlyZWN0aW9uOiIiLGVudGVyaW5nOiExLGxlYXZpbmc6ITEsYWN0aXZlOiExfSl9KSxhbmd1bGFyLmV4dGVuZChlLHtkaXJlY3Rpb246ZixhY3RpdmU6ITAsZW50ZXJpbmc6ITB9KSxhbmd1bGFyLmV4dGVuZChpLmN1cnJlbnRTbGlkZXx8e30se2RpcmVjdGlvbjpmLGxlYXZpbmc6ITB9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1jKGUuJGVsZW1lbnQse30pLGZ1bmN0aW9uKGIsYyl7YS4kY3VycmVudFRyYW5zaXRpb24udGhlbihmdW5jdGlvbigpe2goYixjKX0sZnVuY3Rpb24oKXtoKGIsYyl9KX0oZSxpLmN1cnJlbnRTbGlkZSl9ZWxzZSBoKGUsaS5jdXJyZW50U2xpZGUpO2kuY3VycmVudFNsaWRlPWUsaz1tLGQoKX19ZnVuY3Rpb24gaChiLGMpe2FuZ3VsYXIuZXh0ZW5kKGIse2RpcmVjdGlvbjoiIixhY3RpdmU6ITAsbGVhdmluZzohMSxlbnRlcmluZzohMX0pLGFuZ3VsYXIuZXh0ZW5kKGN8fHt9LHtkaXJlY3Rpb246IiIsYWN0aXZlOiExLGxlYXZpbmc6ITEsZW50ZXJpbmc6ITF9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1udWxsfXZhciBtPWouaW5kZXhPZihlKTt2b2lkIDA9PT1mJiYoZj1tPms/Im5leHQiOiJwcmV2IiksZSYmZSE9PWkuY3VycmVudFNsaWRlJiYoYS4kY3VycmVudFRyYW5zaXRpb24/KGEuJGN1cnJlbnRUcmFuc2l0aW9uLmNhbmNlbCgpLGIoZykpOmcoKSl9LGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtsPSEwfSksaS5pbmRleE9mU2xpZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGouaW5kZXhPZihhKX0sYS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGI9KGsrMSklai5sZW5ndGg7cmV0dXJuIGEuJGN1cnJlbnRUcmFuc2l0aW9uP3ZvaWQgMDppLnNlbGVjdChqW2JdLCJuZXh0Iil9LGEucHJldj1mdW5jdGlvbigpe3ZhciBiPTA+ay0xP2oubGVuZ3RoLTE6ay0xO3JldHVybiBhLiRjdXJyZW50VHJhbnNpdGlvbj92b2lkIDA6aS5zZWxlY3QoaltiXSwicHJldiIpfSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGEpe3JldHVybiBpLmN1cnJlbnRTbGlkZT09PWF9LGEuJHdhdGNoKCJpbnRlcnZhbCIsZCksYS4kb24oIiRkZXN0cm95IixlKSxhLnBsYXk9ZnVuY3Rpb24oKXtofHwoaD0hMCxkKCkpfSxhLnBhdXNlPWZ1bmN0aW9uKCl7YS5ub1BhdXNlfHwoaD0hMSxlKCkpfSxpLmFkZFNsaWRlPWZ1bmN0aW9uKGIsYyl7Yi4kZWxlbWVudD1jLGoucHVzaChiKSwxPT09ai5sZW5ndGh8fGIuYWN0aXZlPyhpLnNlbGVjdChqW2oubGVuZ3RoLTFdKSwxPT1qLmxlbmd0aCYmYS5wbGF5KCkpOmIuYWN0aXZlPSExfSxpLnJlbW92ZVNsaWRlPWZ1bmN0aW9uKGEpe3ZhciBiPWouaW5kZXhPZihhKTtqLnNwbGljZShiLDEpLGoubGVuZ3RoPjAmJmEuYWN0aXZlP2kuc2VsZWN0KGI+PWoubGVuZ3RoP2pbYi0xXTpqW2JdKTprPmImJmstLX19XSkuZGlyZWN0aXZlKCJjYXJvdXNlbCIsW2Z1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLGNvbnRyb2xsZXI6IkNhcm91c2VsQ29udHJvbGxlciIscmVxdWlyZToiY2Fyb3VzZWwiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIixzY29wZTp7aW50ZXJ2YWw6Ij0iLG5vVHJhbnNpdGlvbjoiPSIsbm9QYXVzZToiPSJ9fX1dKS5kaXJlY3RpdmUoInNsaWRlIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeY2Fyb3VzZWwiLHJlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIixzY29wZTp7YWN0aXZlOiI9PyJ9LGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRTbGlkZShhLGIpLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtkLnJlbW92ZVNsaWRlKGEpfSksYS4kd2F0Y2goImFjdGl2ZSIsZnVuY3Rpb24oYil7YiYmZC5zZWxlY3QoYSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIixbXSkuc2VydmljZSgiZGF0ZVBhcnNlciIsWyIkbG9jYWxlIiwib3JkZXJCeUZpbHRlciIsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gMT09PWImJmM+Mjg/Mjk9PT1jJiYoYSU0PT09MCYmYSUxMDAhPT0wfHxhJTQwMD09PTApOjM9PT1ifHw1PT09Ynx8OD09PWJ8fDEwPT09Yj8zMT5jOiEwfXRoaXMucGFyc2Vycz17fTt2YXIgZD17eXl5eTp7cmVnZXg6IlxcZHs0fSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthfX0seXk6e3JlZ2V4OiJcXGR7Mn0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYSsyZTN9fSx5OntyZWdleDoiXFxkezEsNH0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYX19LE1NTU06e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5NT05USC5qb2luKCJ8IiksYXBwbHk6ZnVuY3Rpb24oYil7dGhpcy5tb250aD1hLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguaW5kZXhPZihiKX19LE1NTTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguam9pbigifCIpLGFwcGx5OmZ1bmN0aW9uKGIpe3RoaXMubW9udGg9YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguaW5kZXhPZihiKX19LE1NOntyZWdleDoiMFsxLTldfDFbMC0yXSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5tb250aD1hLTF9fSxNOntyZWdleDoiWzEtOV18MVswLTJdIixhcHBseTpmdW5jdGlvbihhKXt0aGlzLm1vbnRoPWEtMX19LGRkOntyZWdleDoiWzAtMl1bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LGQ6e3JlZ2V4OiJbMS0yXT9bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LEVFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5EQVkuam9pbigifCIpfSxFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5TSE9SVERBWS5qb2luKCJ8Iil9fTt0aGlzLmNyZWF0ZVBhcnNlcj1mdW5jdGlvbihhKXt2YXIgYz1bXSxlPWEuc3BsaXQoIiIpO3JldHVybiBhbmd1bGFyLmZvckVhY2goZCxmdW5jdGlvbihiLGQpe3ZhciBmPWEuaW5kZXhPZihkKTtpZihmPi0xKXthPWEuc3BsaXQoIiIpLGVbZl09IigiK2IucmVnZXgrIikiLGFbZl09IiQiO2Zvcih2YXIgZz1mKzEsaD1mK2QubGVuZ3RoO2g+ZztnKyspZVtnXT0iIixhW2ddPSIkIjthPWEuam9pbigiIiksYy5wdXNoKHtpbmRleDpmLGFwcGx5OmIuYXBwbHl9KX19KSx7cmVnZXg6bmV3IFJlZ0V4cCgiXiIrZS5qb2luKCIiKSsiJCIpLG1hcDpiKGMsImluZGV4Iil9fSx0aGlzLnBhcnNlPWZ1bmN0aW9uKGIsZCl7aWYoIWFuZ3VsYXIuaXNTdHJpbmcoYikpcmV0dXJuIGI7ZD1hLkRBVEVUSU1FX0ZPUk1BVFNbZF18fGQsdGhpcy5wYXJzZXJzW2RdfHwodGhpcy5wYXJzZXJzW2RdPXRoaXMuY3JlYXRlUGFyc2VyKGQpKTt2YXIgZT10aGlzLnBhcnNlcnNbZF0sZj1lLnJlZ2V4LGc9ZS5tYXAsaD1iLm1hdGNoKGYpO2lmKGgmJmgubGVuZ3RoKXtmb3IodmFyIGksaj17eWVhcjoxOTAwLG1vbnRoOjAsZGF0ZToxLGhvdXJzOjB9LGs9MSxsPWgubGVuZ3RoO2w+aztrKyspe3ZhciBtPWdbay0xXTttLmFwcGx5JiZtLmFwcGx5LmNhbGwoaixoW2tdKX1yZXR1cm4gYyhqLnllYXIsai5tb250aCxqLmRhdGUpJiYoaT1uZXcgRGF0ZShqLnllYXIsai5tb250aCxqLmRhdGUsai5ob3VycykpLGl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBvc2l0aW9uIixbXSkuZmFjdG9yeSgiJHBvc2l0aW9uIixbIiRkb2N1bWVudCIsIiR3aW5kb3ciLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGMpe3JldHVybiBhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZVtjXTpiLmdldENvbXB1dGVkU3R5bGU/Yi5nZXRDb21wdXRlZFN0eWxlKGEpW2NdOmEuc3R5bGVbY119ZnVuY3Rpb24gZChhKXtyZXR1cm4ic3RhdGljIj09PShjKGEsInBvc2l0aW9uIil8fCJzdGF0aWMiKX12YXIgZT1mdW5jdGlvbihiKXtmb3IodmFyIGM9YVswXSxlPWIub2Zmc2V0UGFyZW50fHxjO2UmJmUhPT1jJiZkKGUpOyllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxjfTtyZXR1cm57cG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vZmZzZXQoYiksZD17dG9wOjAsbGVmdDowfSxmPWUoYlswXSk7ZiE9YVswXSYmKGQ9dGhpcy5vZmZzZXQoYW5ndWxhci5lbGVtZW50KGYpKSxkLnRvcCs9Zi5jbGllbnRUb3AtZi5zY3JvbGxUb3AsZC5sZWZ0Kz1mLmNsaWVudExlZnQtZi5zY3JvbGxMZWZ0KTt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt3aWR0aDpnLndpZHRofHxiLnByb3AoIm9mZnNldFdpZHRoIiksaGVpZ2h0OmcuaGVpZ2h0fHxiLnByb3AoIm9mZnNldEhlaWdodCIpLHRvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXQ6ZnVuY3Rpb24oYyl7dmFyIGQ9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZC53aWR0aHx8Yy5wcm9wKCJvZmZzZXRXaWR0aCIpLGhlaWdodDpkLmhlaWdodHx8Yy5wcm9wKCJvZmZzZXRIZWlnaHQiKSx0b3A6ZC50b3ArKGIucGFnZVlPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCksbGVmdDpkLmxlZnQrKGIucGFnZVhPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpfX0scG9zaXRpb25FbGVtZW50czpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpPWMuc3BsaXQoIi0iKSxqPWlbMF0saz1pWzFdfHwiY2VudGVyIjtlPWQ/dGhpcy5vZmZzZXQoYSk6dGhpcy5wb3NpdGlvbihhKSxmPWIucHJvcCgib2Zmc2V0V2lkdGgiKSxnPWIucHJvcCgib2Zmc2V0SGVpZ2h0Iik7dmFyIGw9e2NlbnRlcjpmdW5jdGlvbigpe3JldHVybiBlLmxlZnQrZS53aWR0aC8yLWYvMn0sbGVmdDpmdW5jdGlvbigpe3JldHVybiBlLmxlZnR9LHJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdCtlLndpZHRofX0sbT17Y2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wK2UuaGVpZ2h0LzItZy8yfSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3B9LGJvdHRvbTpmdW5jdGlvbigpe3JldHVybiBlLnRvcCtlLmhlaWdodH19O3N3aXRjaChqKXtjYXNlInJpZ2h0IjpoPXt0b3A6bVtrXSgpLGxlZnQ6bFtqXSgpfTticmVhaztjYXNlImxlZnQiOmg9e3RvcDptW2tdKCksbGVmdDplLmxlZnQtZn07YnJlYWs7Y2FzZSJib3R0b20iOmg9e3RvcDptW2pdKCksbGVmdDpsW2tdKCl9O2JyZWFrO2RlZmF1bHQ6aD17dG9wOmUudG9wLWcsbGVmdDpsW2tdKCl9fXJldHVybiBofX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGlja2VyIixbInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIiwidWkuYm9vdHN0cmFwLnBvc2l0aW9uIl0pLmNvbnN0YW50KCJkYXRlcGlja2VyQ29uZmlnIix7Zm9ybWF0RGF5OiJkZCIsZm9ybWF0TW9udGg6Ik1NTU0iLGZvcm1hdFllYXI6Inl5eXkiLGZvcm1hdERheUhlYWRlcjoiRUVFIixmb3JtYXREYXlUaXRsZToiTU1NTSB5eXl5Iixmb3JtYXRNb250aFRpdGxlOiJ5eXl5IixkYXRlcGlja2VyTW9kZToiZGF5IixtaW5Nb2RlOiJkYXkiLG1heE1vZGU6InllYXIiLHNob3dXZWVrczohMCxzdGFydGluZ0RheTowLHllYXJSYW5nZToyMCxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsfSkuY29udHJvbGxlcigiRGF0ZXBpY2tlckNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiJGludGVycG9sYXRlIiwiJHRpbWVvdXQiLCIkbG9nIiwiZGF0ZUZpbHRlciIsImRhdGVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH07dGhpcy5tb2Rlcz1bImRheSIsIm1vbnRoIiwieWVhciJdLGFuZ3VsYXIuZm9yRWFjaChbImZvcm1hdERheSIsImZvcm1hdE1vbnRoIiwiZm9ybWF0WWVhciIsImZvcm1hdERheUhlYWRlciIsImZvcm1hdERheVRpdGxlIiwiZm9ybWF0TW9udGhUaXRsZSIsIm1pbk1vZGUiLCJtYXhNb2RlIiwic2hvd1dlZWtzIiwic3RhcnRpbmdEYXkiLCJ5ZWFyUmFuZ2UiXSxmdW5jdGlvbihjLGUpe2lbY109YW5ndWxhci5pc0RlZmluZWQoYltjXSk/OD5lP2QoYltjXSkoYS4kcGFyZW50KTphLiRwYXJlbnQuJGV2YWwoYltjXSk6aFtjXX0pLGFuZ3VsYXIuZm9yRWFjaChbIm1pbkRhdGUiLCJtYXhEYXRlIl0sZnVuY3Rpb24oZCl7YltkXT9hLiRwYXJlbnQuJHdhdGNoKGMoYltkXSksZnVuY3Rpb24oYSl7aVtkXT1hP25ldyBEYXRlKGEpOm51bGwsaS5yZWZyZXNoVmlldygpfSk6aVtkXT1oW2RdP25ldyBEYXRlKGhbZF0pOm51bGx9KSxhLmRhdGVwaWNrZXJNb2RlPWEuZGF0ZXBpY2tlck1vZGV8fGguZGF0ZXBpY2tlck1vZGUsYS51bmlxdWVJZD0iZGF0ZXBpY2tlci0iK2EuJGlkKyItIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKSx0aGlzLmFjdGl2ZURhdGU9YW5ndWxhci5pc0RlZmluZWQoYi5pbml0RGF0ZSk/YS4kcGFyZW50LiRldmFsKGIuaW5pdERhdGUpOm5ldyBEYXRlLGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT1pLmNvbXBhcmUoYi5kYXRlLGkuYWN0aXZlRGF0ZSk/KGEuYWN0aXZlRGF0ZUlkPWIudWlkLCEwKTohMX0sdGhpcy5pbml0PWZ1bmN0aW9uKGEpe2o9YSxqLiRyZW5kZXI9ZnVuY3Rpb24oKXtpLnJlbmRlcigpfX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXtpZihqLiRtb2RlbFZhbHVlKXt2YXIgYT1uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKSxiPSFpc05hTihhKTtiP3RoaXMuYWN0aXZlRGF0ZT1hOmYuZXJyb3IoJ0RhdGVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSxqLiRzZXRWYWxpZGl0eSgiZGF0ZSIsYil9dGhpcy5yZWZyZXNoVmlldygpfSx0aGlzLnJlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtZW50KXt0aGlzLl9yZWZyZXNoVmlldygpO3ZhciBhPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bnVsbDtqLiRzZXRWYWxpZGl0eSgiZGF0ZS1kaXNhYmxlZCIsIWF8fHRoaXMuZWxlbWVudCYmIXRoaXMuaXNEaXNhYmxlZChhKSl9fSx0aGlzLmNyZWF0ZURhdGVPYmplY3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm51bGw7cmV0dXJue2RhdGU6YSxsYWJlbDpnKGEsYiksc2VsZWN0ZWQ6YyYmMD09PXRoaXMuY29tcGFyZShhLGMpLGRpc2FibGVkOnRoaXMuaXNEaXNhYmxlZChhKSxjdXJyZW50OjA9PT10aGlzLmNvbXBhcmUoYSxuZXcgRGF0ZSl9fSx0aGlzLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubWluRGF0ZSYmdGhpcy5jb21wYXJlKGMsdGhpcy5taW5EYXRlKTwwfHx0aGlzLm1heERhdGUmJnRoaXMuY29tcGFyZShjLHRoaXMubWF4RGF0ZSk+MHx8Yi5kYXRlRGlzYWJsZWQmJmEuZGF0ZURpc2FibGVkKHtkYXRlOmMsbW9kZTphLmRhdGVwaWNrZXJNb2RlfSl9LHRoaXMuc3BsaXQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YS5sZW5ndGg+MDspYy5wdXNoKGEuc3BsaWNlKDAsYikpO3JldHVybiBjfSxhLnNlbGVjdD1mdW5jdGlvbihiKXtpZihhLmRhdGVwaWNrZXJNb2RlPT09aS5taW5Nb2RlKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm5ldyBEYXRlKDAsMCwwLDAsMCwwLDApO2Muc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSksai4kc2V0Vmlld1ZhbHVlKGMpLGouJHJlbmRlcigpfWVsc2UgaS5hY3RpdmVEYXRlPWIsYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKS0xXX0sYS5tb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPWkuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpK2EqKGkuc3RlcC55ZWFyc3x8MCksYz1pLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSthKihpLnN0ZXAubW9udGhzfHwwKTtpLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYixjLDEpLGkucmVmcmVzaFZpZXcoKX0sYS50b2dnbGVNb2RlPWZ1bmN0aW9uKGIpe2I9Ynx8MSxhLmRhdGVwaWNrZXJNb2RlPT09aS5tYXhNb2RlJiYxPT09Ynx8YS5kYXRlcGlja2VyTW9kZT09PWkubWluTW9kZSYmLTE9PT1ifHwoYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKStiXSl9LGEua2V5cz17MTM6ImVudGVyIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24ifTt2YXIgaz1mdW5jdGlvbigpe2UoZnVuY3Rpb24oKXtpLmVsZW1lbnRbMF0uZm9jdXMoKX0sMCwhMSl9O2EuJG9uKCJkYXRlcGlja2VyLmZvY3VzIixrKSxhLmtleWRvd249ZnVuY3Rpb24oYil7dmFyIGM9YS5rZXlzW2Iud2hpY2hdO2lmKGMmJiFiLnNoaWZ0S2V5JiYhYi5hbHRLZXkpaWYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksImVudGVyIj09PWN8fCJzcGFjZSI9PT1jKXtpZihpLmlzRGlzYWJsZWQoaS5hY3RpdmVEYXRlKSlyZXR1cm47YS5zZWxlY3QoaS5hY3RpdmVEYXRlKSxrKCl9ZWxzZSFiLmN0cmxLZXl8fCJ1cCIhPT1jJiYiZG93biIhPT1jPyhpLmhhbmRsZUtleURvd24oYyxiKSxpLnJlZnJlc2hWaWV3KCkpOihhLnRvZ2dsZU1vZGUoInVwIj09PWM/MTotMSksaygpKX19XSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIixzY29wZTp7ZGF0ZXBpY2tlck1vZGU6Ij0/IixkYXRlRGlzYWJsZWQ6IiYifSxyZXF1aXJlOlsiZGF0ZXBpY2tlciIsIj9ebmdNb2RlbCJdLGNvbnRyb2xsZXI6IkRhdGVwaWNrZXJDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmKX19fSkuZGlyZWN0aXZlKCJkYXlwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7ZnVuY3Rpb24gZihhLGIpe3JldHVybiAxIT09Ynx8YSU0IT09MHx8YSUxMDA9PT0wJiZhJTQwMCE9PTA/aVtiXToyOX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9bmV3IEFycmF5KGIpLGQ9bmV3IERhdGUoYSksZT0wO2ZvcihkLnNldEhvdXJzKDEyKTtiPmU7KWNbZSsrXT1uZXcgRGF0ZShkKSxkLnNldERhdGUoZC5nZXREYXRlKCkrMSk7cmV0dXJuIGN9ZnVuY3Rpb24gaChhKXt2YXIgYj1uZXcgRGF0ZShhKTtiLnNldERhdGUoYi5nZXREYXRlKCkrNC0oYi5nZXREYXkoKXx8NykpO3ZhciBjPWIuZ2V0VGltZSgpO3JldHVybiBiLnNldE1vbnRoKDApLGIuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGMtYikvODY0ZTUpLzcpKzF9Yi5zaG93V2Vla3M9ZS5zaG93V2Vla3MsZS5zdGVwPXttb250aHM6MX0sZS5lbGVtZW50PWM7dmFyIGk9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtlLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGQ9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCksZj1uZXcgRGF0ZShjLGQsMSksaT1lLnN0YXJ0aW5nRGF5LWYuZ2V0RGF5KCksaj1pPjA/Ny1pOi1pLGs9bmV3IERhdGUoZik7aj4wJiZrLnNldERhdGUoLWorMSk7Zm9yKHZhciBsPWcoayw0MiksbT0wOzQyPm07bSsrKWxbbV09YW5ndWxhci5leHRlbmQoZS5jcmVhdGVEYXRlT2JqZWN0KGxbbV0sZS5mb3JtYXREYXkpLHtzZWNvbmRhcnk6bFttXS5nZXRNb250aCgpIT09ZCx1aWQ6Yi51bmlxdWVJZCsiLSIrbX0pO2IubGFiZWxzPW5ldyBBcnJheSg3KTtmb3IodmFyIG49MDs3Pm47bisrKWIubGFiZWxzW25dPXthYmJyOmEobFtuXS5kYXRlLGUuZm9ybWF0RGF5SGVhZGVyKSxmdWxsOmEobFtuXS5kYXRlLCJFRUVFIil9O2lmKGIudGl0bGU9YShlLmFjdGl2ZURhdGUsZS5mb3JtYXREYXlUaXRsZSksYi5yb3dzPWUuc3BsaXQobCw3KSxiLnNob3dXZWVrcyl7Yi53ZWVrTnVtYmVycz1bXTtmb3IodmFyIG89aChiLnJvd3NbMF1bMF0uZGF0ZSkscD1iLnJvd3MubGVuZ3RoO2Iud2Vla051bWJlcnMucHVzaChvKyspPHA7KTt9fSxlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSktbmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSl9LGUuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1lLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTc7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz03O2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0TW9udGgoYywxKSxiPU1hdGgubWluKGYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpLGIpfWVsc2UiaG9tZSI9PT1hP2I9MToiZW5kIj09PWEmJihiPWYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpKTtlLmFjdGl2ZURhdGUuc2V0RGF0ZShiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJtb250aHBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe2Uuc3RlcD17eWVhcnM6MX0sZS5lbGVtZW50PWMsZS5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtmb3IodmFyIGM9bmV3IEFycmF5KDEyKSxkPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGY9MDsxMj5mO2YrKyljW2ZdPWFuZ3VsYXIuZXh0ZW5kKGUuY3JlYXRlRGF0ZU9iamVjdChuZXcgRGF0ZShkLGYsMSksZS5mb3JtYXRNb250aCkse3VpZDpiLnVuaXF1ZUlkKyItIitmfSk7Yi50aXRsZT1hKGUuYWN0aXZlRGF0ZSxlLmZvcm1hdE1vbnRoVGl0bGUpLGIucm93cz1lLnNwbGl0KGMsMyl9LGUuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpKS1uZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTM7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz0zO2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYyl9ZWxzZSJob21lIj09PWE/Yj0wOiJlbmQiPT09YSYmKGI9MTEpO2UuYWN0aXZlRGF0ZS5zZXRNb250aChiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJ5ZWFycGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIHBhcnNlSW50KChhLTEpL2YsMTApKmYrMX12YXIgZj1kLnllYXJSYW5nZTtkLnN0ZXA9e3llYXJzOmZ9LGQuZWxlbWVudD1iLGQuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxjPTAsZz1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKTtmPmM7YysrKWJbY109YW5ndWxhci5leHRlbmQoZC5jcmVhdGVEYXRlT2JqZWN0KG5ldyBEYXRlKGcrYywwLDEpLGQuZm9ybWF0WWVhcikse3VpZDphLnVuaXF1ZUlkKyItIitjfSk7YS50aXRsZT1bYlswXS5sYWJlbCxiW2YtMV0ubGFiZWxdLmpvaW4oIiAtICIpLGEucm93cz1kLnNwbGl0KGIsNSl9LGQuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEZ1bGxZZWFyKCktYi5nZXRGdWxsWWVhcigpfSxkLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7ImxlZnQiPT09YT9iLT0xOiJ1cCI9PT1hP2ItPTU6InJpZ2h0Ij09PWE/Yis9MToiZG93biI9PT1hP2IrPTU6InBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YT9iKz0oInBhZ2V1cCI9PT1hPy0xOjEpKmQuc3RlcC55ZWFyczoiaG9tZSI9PT1hP2I9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk6ImVuZCI9PT1hJiYoYj1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKStmLTEpLGQuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihiKX0sZC5yZWZyZXNoVmlldygpfX19XSkuY29uc3RhbnQoImRhdGVwaWNrZXJQb3B1cENvbmZpZyIse2RhdGVwaWNrZXJQb3B1cDoieXl5eS1NTS1kZCIsY3VycmVudFRleHQ6IlRvZGF5IixjbGVhclRleHQ6IkNsZWFyIixjbG9zZVRleHQ6IkRvbmUiLGNsb3NlT25EYXRlU2VsZWN0aW9uOiEwLGFwcGVuZFRvQm9keTohMSxzaG93QnV0dG9uQmFyOiEwfSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyUG9wdXAiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCJkYXRlRmlsdGVyIiwiZGF0ZVBhcnNlciIsImRhdGVwaWNrZXJQb3B1cENvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZToibmdNb2RlbCIsc2NvcGU6e2lzT3BlbjoiPT8iLGN1cnJlbnRUZXh0OiJAIixjbGVhclRleHQ6IkAiLGNsb3NlVGV4dDoiQCIsZGF0ZURpc2FibGVkOiImIn0sbGluazpmdW5jdGlvbihoLGksaixrKXtmdW5jdGlvbiBsKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihhKXtyZXR1cm4iLSIrYS50b0xvd2VyQ2FzZSgpfSl9ZnVuY3Rpb24gbShhKXtpZihhKXtpZihhbmd1bGFyLmlzRGF0ZShhKSYmIWlzTmFOKGEpKXJldHVybiBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGE7aWYoYW5ndWxhci5pc1N0cmluZyhhKSl7dmFyIGI9Zi5wYXJzZShhLG4pfHxuZXcgRGF0ZShhKTtyZXR1cm4gaXNOYU4oYik/dm9pZCBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITEpOihrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGIpfXJldHVybiB2b2lkIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMSl9cmV0dXJuIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksbnVsbH12YXIgbixvPWFuZ3VsYXIuaXNEZWZpbmVkKGouY2xvc2VPbkRhdGVTZWxlY3Rpb24pP2guJHBhcmVudC4kZXZhbChqLmNsb3NlT25EYXRlU2VsZWN0aW9uKTpnLmNsb3NlT25EYXRlU2VsZWN0aW9uLHA9YW5ndWxhci5pc0RlZmluZWQoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KT9oLiRwYXJlbnQuJGV2YWwoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KTpnLmFwcGVuZFRvQm9keTtoLnNob3dCdXR0b25CYXI9YW5ndWxhci5pc0RlZmluZWQoai5zaG93QnV0dG9uQmFyKT9oLiRwYXJlbnQuJGV2YWwoai5zaG93QnV0dG9uQmFyKTpnLnNob3dCdXR0b25CYXIsaC5nZXRUZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBoW2ErIlRleHQiXXx8Z1thKyJUZXh0Il19LGouJG9ic2VydmUoImRhdGVwaWNrZXJQb3B1cCIsZnVuY3Rpb24oYSl7bj1hfHxnLmRhdGVwaWNrZXJQb3B1cCxrLiRyZW5kZXIoKX0pO3ZhciBxPWFuZ3VsYXIuZWxlbWVudCgiPGRpdiBkYXRlcGlja2VyLXBvcHVwLXdyYXA+PGRpdiBkYXRlcGlja2VyPjwvZGl2PjwvZGl2PiIpO3EuYXR0cih7Im5nLW1vZGVsIjoiZGF0ZSIsIm5nLWNoYW5nZSI6ImRhdGVTZWxlY3Rpb24oKSJ9KTt2YXIgcj1hbmd1bGFyLmVsZW1lbnQocS5jaGlsZHJlbigpWzBdKTtqLmRhdGVwaWNrZXJPcHRpb25zJiZhbmd1bGFyLmZvckVhY2goaC4kcGFyZW50LiRldmFsKGouZGF0ZXBpY2tlck9wdGlvbnMpLGZ1bmN0aW9uKGEsYil7ci5hdHRyKGwoYiksYSl9KSxhbmd1bGFyLmZvckVhY2goWyJtaW5EYXRlIiwibWF4RGF0ZSJdLGZ1bmN0aW9uKGEpe2pbYV0mJihoLiRwYXJlbnQuJHdhdGNoKGIoalthXSksZnVuY3Rpb24oYil7aFthXT1ifSksci5hdHRyKGwoYSksYSkpfSksai5kYXRlRGlzYWJsZWQmJnIuYXR0cigiZGF0ZS1kaXNhYmxlZCIsImRhdGVEaXNhYmxlZCh7IGRhdGU6IGRhdGUsIG1vZGU6IG1vZGUgfSkiKSxrLiRwYXJzZXJzLnVuc2hpZnQobSksaC5kYXRlU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuaXNEZWZpbmVkKGEpJiYoaC5kYXRlPWEpLGsuJHNldFZpZXdWYWx1ZShoLmRhdGUpLGsuJHJlbmRlcigpLG8mJihoLmlzT3Blbj0hMSxpWzBdLmZvY3VzKCkpfSxpLmJpbmQoImlucHV0IGNoYW5nZSBrZXl1cCIsZnVuY3Rpb24oKXtoLiRhcHBseShmdW5jdGlvbigpe2guZGF0ZT1rLiRtb2RlbFZhbHVlfSl9KSxrLiRyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1rLiR2aWV3VmFsdWU/ZShrLiR2aWV3VmFsdWUsbik6IiI7aS52YWwoYSksaC5kYXRlPW0oay4kbW9kZWxWYWx1ZSl9O3ZhciBzPWZ1bmN0aW9uKGEpe2guaXNPcGVuJiZhLnRhcmdldCE9PWlbMF0mJmguJGFwcGx5KGZ1bmN0aW9uKCl7aC5pc09wZW49ITF9KX0sdD1mdW5jdGlvbihhKXtoLmtleWRvd24oYSl9O2kuYmluZCgia2V5ZG93biIsdCksaC5rZXlkb3duPWZ1bmN0aW9uKGEpezI3PT09YS53aGljaD8oYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksaC5jbG9zZSgpKTo0MCE9PWEud2hpY2h8fGguaXNPcGVufHwoaC5pc09wZW49ITApfSxoLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihhKXthPyhoLiRicm9hZGNhc3QoImRhdGVwaWNrZXIuZm9jdXMiKSxoLnBvc2l0aW9uPXA/ZC5vZmZzZXQoaSk6ZC5wb3NpdGlvbihpKSxoLnBvc2l0aW9uLnRvcD1oLnBvc2l0aW9uLnRvcCtpLnByb3AoIm9mZnNldEhlaWdodCIpLGMuYmluZCgiY2xpY2siLHMpKTpjLnVuYmluZCgiY2xpY2siLHMpfSksaC5zZWxlY3Q9ZnVuY3Rpb24oYSl7aWYoInRvZGF5Ij09PWEpe3ZhciBiPW5ldyBEYXRlO2FuZ3VsYXIuaXNEYXRlKGsuJG1vZGVsVmFsdWUpPyhhPW5ldyBEYXRlKGsuJG1vZGVsVmFsdWUpLGEuc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSkpOmE9bmV3IERhdGUoYi5zZXRIb3VycygwLDAsMCwwKSl9aC5kYXRlU2VsZWN0aW9uKGEpfSxoLmNsb3NlPWZ1bmN0aW9uKCl7aC5pc09wZW49ITEsaVswXS5mb2N1cygpfTt2YXIgdT1hKHEpKGgpO3A/Yy5maW5kKCJib2R5IikuYXBwZW5kKHUpOmkuYWZ0ZXIodSksaC4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe3UucmVtb3ZlKCksaS51bmJpbmQoImtleWRvd24iLHQpLGMudW5iaW5kKCJjbGljayIscyl9KX19fV0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlclBvcHVwV3JhcCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsbGluazpmdW5jdGlvbihhLGIpe2IuYmluZCgiY2xpY2siLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZHJvcGRvd24iLFtdKS5jb25zdGFudCgiZHJvcGRvd25Db25maWciLHtvcGVuQ2xhc3M6Im9wZW4ifSkuc2VydmljZSgiZHJvcGRvd25TZXJ2aWNlIixbIiRkb2N1bWVudCIsZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDt0aGlzLm9wZW49ZnVuY3Rpb24oZSl7Ynx8KGEuYmluZCgiY2xpY2siLGMpLGEuYmluZCgia2V5ZG93biIsZCkpLGImJmIhPT1lJiYoYi5pc09wZW49ITEpLGI9ZX0sdGhpcy5jbG9zZT1mdW5jdGlvbihlKXtiPT09ZSYmKGI9bnVsbCxhLnVuYmluZCgiY2xpY2siLGMpLGEudW5iaW5kKCJrZXlkb3duIixkKSl9O3ZhciBjPWZ1bmN0aW9uKGEpe2EmJmEuaXNEZWZhdWx0UHJldmVudGVkKCl8fGIuJGFwcGx5KGZ1bmN0aW9uKCl7Yi5pc09wZW49ITF9KX0sZD1mdW5jdGlvbihhKXsyNz09PWEud2hpY2gmJihiLmZvY3VzVG9nZ2xlRWxlbWVudCgpLGMoKSl9fV0pLmNvbnRyb2xsZXIoIkRyb3Bkb3duQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCJkcm9wZG93bkNvbmZpZyIsImRyb3Bkb3duU2VydmljZSIsIiRhbmltYXRlIixmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD10aGlzLGk9YS4kbmV3KCksaj1kLm9wZW5DbGFzcyxrPWFuZ3VsYXIubm9vcCxsPWIub25Ub2dnbGU/YyhiLm9uVG9nZ2xlKTphbmd1bGFyLm5vb3A7dGhpcy5pbml0PWZ1bmN0aW9uKGQpe2guJGVsZW1lbnQ9ZCxiLmlzT3BlbiYmKGc9YyhiLmlzT3Blbiksaz1nLmFzc2lnbixhLiR3YXRjaChnLGZ1bmN0aW9uKGEpe2kuaXNPcGVuPSEhYX0pKX0sdGhpcy50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNPcGVuPWFyZ3VtZW50cy5sZW5ndGg/ISFhOiFpLmlzT3Blbn0sdGhpcy5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc09wZW59LGkuZm9jdXNUb2dnbGVFbGVtZW50PWZ1bmN0aW9uKCl7aC50b2dnbGVFbGVtZW50JiZoLnRvZ2dsZUVsZW1lbnRbMF0uZm9jdXMoKX0saS4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYixjKXtmW2I/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShoLiRlbGVtZW50LGopLGI/KGkuZm9jdXNUb2dnbGVFbGVtZW50KCksZS5vcGVuKGkpKTplLmNsb3NlKGkpLGsoYSxiKSxhbmd1bGFyLmlzRGVmaW5lZChiKSYmYiE9PWMmJmwoYSx7b3BlbjohIWJ9KX0pLGEuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2kuaXNPcGVuPSExfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2kuJGRlc3Ryb3koKX0pfV0pLmRpcmVjdGl2ZSgiZHJvcGRvd24iLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJDQSIsY29udHJvbGxlcjoiRHJvcGRvd25Db250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuaW5pdChiKX19fSkuZGlyZWN0aXZlKCJkcm9wZG93blRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkNBIixyZXF1aXJlOiI/XmRyb3Bkb3duIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGQpe2QudG9nZ2xlRWxlbWVudD1iO3ZhciBlPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxiLmhhc0NsYXNzKCJkaXNhYmxlZCIpfHxjLmRpc2FibGVkfHxhLiRhcHBseShmdW5jdGlvbigpe2QudG9nZ2xlKCl9KX07Yi5iaW5kKCJjbGljayIsZSksYi5hdHRyKHsiYXJpYS1oYXNwb3B1cCI6ITAsImFyaWEtZXhwYW5kZWQiOiExfSksYS4kd2F0Y2goZC5pc09wZW4sZnVuY3Rpb24oYSl7Yi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhIWEpfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IudW5iaW5kKCJjbGljayIsZSl9KX19fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAubW9kYWwiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZmFjdG9yeSgiJCRzdGFja2VkTWFwIixmdW5jdGlvbigpe3JldHVybntjcmVhdGVOZXc6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm57YWRkOmZ1bmN0aW9uKGIsYyl7YS5wdXNoKHtrZXk6Yix2YWx1ZTpjfSl9LGdldDpmdW5jdGlvbihiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihiPT1hW2NdLmtleSlyZXR1cm4gYVtjXX0sa2V5czpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10ua2V5KTtyZXR1cm4gYn0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGFbYS5sZW5ndGgtMV19LHJlbW92ZTpmdW5jdGlvbihiKXtmb3IodmFyIGM9LTEsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGI9PWFbZF0ua2V5KXtjPWQ7YnJlYWt9cmV0dXJuIGEuc3BsaWNlKGMsMSlbMF19LHJlbW92ZVRvcDpmdW5jdGlvbigpe3JldHVybiBhLnNwbGljZShhLmxlbmd0aC0xLDEpWzBdfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9fX19fSkuZGlyZWN0aXZlKCJtb2RhbEJhY2tkcm9wIixbIiR0aW1lb3V0IixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixsaW5rOmZ1bmN0aW9uKGIpe2IuYW5pbWF0ZT0hMSxhKGZ1bmN0aW9uKCl7Yi5hbmltYXRlPSEwfSl9fX1dKS5kaXJlY3RpdmUoIm1vZGFsV2luZG93IixbIiRtb2RhbFN0YWNrIiwiJHRpbWVvdXQiLGZ1bmN0aW9uKGEsYil7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e2luZGV4OiJAIixhbmltYXRlOiI9In0scmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHRlbXBsYXRlVXJsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudGVtcGxhdGVVcmx8fCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCJ9LGxpbms6ZnVuY3Rpb24oYyxkLGUpe2QuYWRkQ2xhc3MoZS53aW5kb3dDbGFzc3x8IiIpLGMuc2l6ZT1lLnNpemUsYihmdW5jdGlvbigpe2MuYW5pbWF0ZT0hMCxkWzBdLmZvY3VzKCl9KSxjLmNsb3NlPWZ1bmN0aW9uKGIpe3ZhciBjPWEuZ2V0VG9wKCk7YyYmYy52YWx1ZS5iYWNrZHJvcCYmInN0YXRpYyIhPWMudmFsdWUuYmFja2Ryb3AmJmIudGFyZ2V0PT09Yi5jdXJyZW50VGFyZ2V0JiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5kaXNtaXNzKGMua2V5LCJiYWNrZHJvcCBjbGljayIpKX19fX1dKS5mYWN0b3J5KCIkbW9kYWxTdGFjayIsWyIkdHJhbnNpdGlvbiIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJGNvbXBpbGUiLCIkcm9vdFNjb3BlIiwiJCRzdGFja2VkTWFwIixmdW5jdGlvbihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZygpe2Zvcih2YXIgYT0tMSxiPW4ua2V5cygpLGM9MDtjPGIubGVuZ3RoO2MrKyluLmdldChiW2NdKS52YWx1ZS5iYWNrZHJvcCYmKGE9Yyk7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXt2YXIgYj1jLmZpbmQoImJvZHkiKS5lcSgwKSxkPW4uZ2V0KGEpLnZhbHVlO24ucmVtb3ZlKGEpLGooZC5tb2RhbERvbUVsLGQubW9kYWxTY29wZSwzMDAsZnVuY3Rpb24oKXtkLm1vZGFsU2NvcGUuJGRlc3Ryb3koKSxiLnRvZ2dsZUNsYXNzKG0sbi5sZW5ndGgoKT4wKSxpKCl9KX1mdW5jdGlvbiBpKCl7aWYoayYmLTE9PWcoKSl7dmFyIGE9bDtqKGssbCwxNTAsZnVuY3Rpb24oKXthLiRkZXN0cm95KCksYT1udWxsfSksaz12b2lkIDAsbD12b2lkIDB9fWZ1bmN0aW9uIGooYyxkLGUsZil7ZnVuY3Rpb24gZygpe2cuZG9uZXx8KGcuZG9uZT0hMCxjLnJlbW92ZSgpLGYmJmYoKSl9ZC5hbmltYXRlPSExO3ZhciBoPWEudHJhbnNpdGlvbkVuZEV2ZW50TmFtZTtpZihoKXt2YXIgaT1iKGcsZSk7Yy5iaW5kKGgsZnVuY3Rpb24oKXtiLmNhbmNlbChpKSxnKCksZC4kYXBwbHkoKX0pfWVsc2UgYihnLDApfXZhciBrLGwsbT0ibW9kYWwtb3BlbiIsbj1mLmNyZWF0ZU5ldygpLG89e307cmV0dXJuIGUuJHdhdGNoKGcsZnVuY3Rpb24oYSl7bCYmKGwuaW5kZXg9YSl9KSxjLmJpbmQoImtleWRvd24iLGZ1bmN0aW9uKGEpe3ZhciBiOzI3PT09YS53aGljaCYmKGI9bi50b3AoKSxiJiZiLnZhbHVlLmtleWJvYXJkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGUuJGFwcGx5KGZ1bmN0aW9uKCl7by5kaXNtaXNzKGIua2V5LCJlc2NhcGUga2V5IHByZXNzIil9KSkpfSksby5vcGVuPWZ1bmN0aW9uKGEsYil7bi5hZGQoYSx7ZGVmZXJyZWQ6Yi5kZWZlcnJlZCxtb2RhbFNjb3BlOmIuc2NvcGUsYmFja2Ryb3A6Yi5iYWNrZHJvcCxrZXlib2FyZDpiLmtleWJvYXJkfSk7dmFyIGY9Yy5maW5kKCJib2R5IikuZXEoMCksaD1nKCk7aD49MCYmIWsmJihsPWUuJG5ldyghMCksbC5pbmRleD1oLGs9ZCgiPGRpdiBtb2RhbC1iYWNrZHJvcD48L2Rpdj4iKShsKSxmLmFwcGVuZChrKSk7dmFyIGk9YW5ndWxhci5lbGVtZW50KCI8ZGl2IG1vZGFsLXdpbmRvdz48L2Rpdj4iKTtpLmF0dHIoeyJ0ZW1wbGF0ZS11cmwiOmIud2luZG93VGVtcGxhdGVVcmwsIndpbmRvdy1jbGFzcyI6Yi53aW5kb3dDbGFzcyxzaXplOmIuc2l6ZSxpbmRleDpuLmxlbmd0aCgpLTEsYW5pbWF0ZToiYW5pbWF0ZSJ9KS5odG1sKGIuY29udGVudCk7dmFyIGo9ZChpKShiLnNjb3BlKTtuLnRvcCgpLnZhbHVlLm1vZGFsRG9tRWw9aixmLmFwcGVuZChqKSxmLmFkZENsYXNzKG0pfSxvLmNsb3NlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVzb2x2ZShiKSxoKGEpKX0sby5kaXNtaXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVqZWN0KGIpLGgoYSkpfSxvLmRpc21pc3NBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuZ2V0VG9wKCk7YjspdGhpcy5kaXNtaXNzKGIua2V5LGEpLGI9dGhpcy5nZXRUb3AoKX0sby5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gbi50b3AoKX0sb31dKS5wcm92aWRlcigiJG1vZGFsIixmdW5jdGlvbigpe3ZhciBhPXtvcHRpb25zOntiYWNrZHJvcDohMCxrZXlib2FyZDohMH0sJGdldDpbIiRpbmplY3RvciIsIiRyb290U2NvcGUiLCIkcSIsIiRodHRwIiwiJHRlbXBsYXRlQ2FjaGUiLCIkY29udHJvbGxlciIsIiRtb2RhbFN0YWNrIixmdW5jdGlvbihiLGMsZCxlLGYsZyxoKXtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnRlbXBsYXRlP2Qud2hlbihhLnRlbXBsYXRlKTplLmdldChhLnRlbXBsYXRlVXJsLHtjYWNoZTpmfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYS5kYXRhfSl9ZnVuY3Rpb24gaihhKXt2YXIgYz1bXTtyZXR1cm4gYW5ndWxhci5mb3JFYWNoKGEsZnVuY3Rpb24oYSl7KGFuZ3VsYXIuaXNGdW5jdGlvbihhKXx8YW5ndWxhci5pc0FycmF5KGEpKSYmYy5wdXNoKGQud2hlbihiLmludm9rZShhKSkpfSksY312YXIgaz17fTtyZXR1cm4gay5vcGVuPWZ1bmN0aW9uKGIpe3ZhciBlPWQuZGVmZXIoKSxmPWQuZGVmZXIoKSxrPXtyZXN1bHQ6ZS5wcm9taXNlLG9wZW5lZDpmLnByb21pc2UsY2xvc2U6ZnVuY3Rpb24oYSl7aC5jbG9zZShrLGEpfSxkaXNtaXNzOmZ1bmN0aW9uKGEpe2guZGlzbWlzcyhrLGEpfX07aWYoYj1hbmd1bGFyLmV4dGVuZCh7fSxhLm9wdGlvbnMsYiksYi5yZXNvbHZlPWIucmVzb2x2ZXx8e30sIWIudGVtcGxhdGUmJiFiLnRlbXBsYXRlVXJsKXRocm93IG5ldyBFcnJvcigiT25lIG9mIHRlbXBsYXRlIG9yIHRlbXBsYXRlVXJsIG9wdGlvbnMgaXMgcmVxdWlyZWQuIik7dmFyIGw9ZC5hbGwoW2koYildLmNvbmNhdChqKGIucmVzb2x2ZSkpKTtyZXR1cm4gbC50aGVuKGZ1bmN0aW9uKGEpe3ZhciBkPShiLnNjb3BlfHxjKS4kbmV3KCk7ZC4kY2xvc2U9ay5jbG9zZSxkLiRkaXNtaXNzPWsuZGlzbWlzczt2YXIgZixpPXt9LGo9MTtiLmNvbnRyb2xsZXImJihpLiRzY29wZT1kLGkuJG1vZGFsSW5zdGFuY2U9ayxhbmd1bGFyLmZvckVhY2goYi5yZXNvbHZlLGZ1bmN0aW9uKGIsYyl7aVtjXT1hW2orK119KSxmPWcoYi5jb250cm9sbGVyLGkpKSxoLm9wZW4oayx7c2NvcGU6ZCxkZWZlcnJlZDplLGNvbnRlbnQ6YVswXSxiYWNrZHJvcDpiLmJhY2tkcm9wLGtleWJvYXJkOmIua2V5Ym9hcmQsd2luZG93Q2xhc3M6Yi53aW5kb3dDbGFzcyx3aW5kb3dUZW1wbGF0ZVVybDpiLndpbmRvd1RlbXBsYXRlVXJsLHNpemU6Yi5zaXplfSl9LGZ1bmN0aW9uKGEpe2UucmVqZWN0KGEpfSksbC50aGVuKGZ1bmN0aW9uKCl7Zi5yZXNvbHZlKCEwKX0sZnVuY3Rpb24oKXtmLnJlamVjdCghMSl9KSxrfSxrfV19O3JldHVybiBhfSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIixbXSkuY29udHJvbGxlcigiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH0sZj1iLm51bVBhZ2VzP2MoYi5udW1QYWdlcykuYXNzaWduOmFuZ3VsYXIubm9vcDt0aGlzLmluaXQ9ZnVuY3Rpb24oZixnKXtlPWYsdGhpcy5jb25maWc9ZyxlLiRyZW5kZXI9ZnVuY3Rpb24oKXtkLnJlbmRlcigpfSxiLml0ZW1zUGVyUGFnZT9hLiRwYXJlbnQuJHdhdGNoKGMoYi5pdGVtc1BlclBhZ2UpLGZ1bmN0aW9uKGIpe2QuaXRlbXNQZXJQYWdlPXBhcnNlSW50KGIsMTApLGEudG90YWxQYWdlcz1kLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKX0pOnRoaXMuaXRlbXNQZXJQYWdlPWcuaXRlbXNQZXJQYWdlfSx0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLml0ZW1zUGVyUGFnZTwxPzE6TWF0aC5jZWlsKGEudG90YWxJdGVtcy90aGlzLml0ZW1zUGVyUGFnZSk7cmV0dXJuIE1hdGgubWF4KGJ8fDAsMSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS5wYWdlPXBhcnNlSW50KGUuJHZpZXdWYWx1ZSwxMCl8fDF9LGEuc2VsZWN0UGFnZT1mdW5jdGlvbihiKXthLnBhZ2UhPT1iJiZiPjAmJmI8PWEudG90YWxQYWdlcyYmKGUuJHNldFZpZXdWYWx1ZShiKSxlLiRyZW5kZXIoKSl9LGEuZ2V0VGV4dD1mdW5jdGlvbihiKXtyZXR1cm4gYVtiKyJUZXh0Il18fGQuY29uZmlnW2IrIlRleHQiXX0sYS5ub1ByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hLnBhZ2V9LGEubm9OZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGEucGFnZT09PWEudG90YWxQYWdlc30sYS4kd2F0Y2goInRvdGFsSXRlbXMiLGZ1bmN0aW9uKCl7YS50b3RhbFBhZ2VzPWQuY2FsY3VsYXRlVG90YWxQYWdlcygpfSksYS4kd2F0Y2goInRvdGFsUGFnZXMiLGZ1bmN0aW9uKGIpe2YoYS4kcGFyZW50LGIpLGEucGFnZT5iP2Euc2VsZWN0UGFnZShiKTplLiRyZW5kZXIoKX0pfV0pLmNvbnN0YW50KCJwYWdpbmF0aW9uQ29uZmlnIix7aXRlbXNQZXJQYWdlOjEwLGJvdW5kYXJ5TGlua3M6ITEsZGlyZWN0aW9uTGlua3M6ITAsZmlyc3RUZXh0OiJGaXJzdCIscHJldmlvdXNUZXh0OiJQcmV2aW91cyIsbmV4dFRleHQ6Ik5leHQiLGxhc3RUZXh0OiJMYXN0Iixyb3RhdGU6ITB9KS5kaXJlY3RpdmUoInBhZ2luYXRpb24iLFsiJHBhcnNlIiwicGFnaW5hdGlvbkNvbmZpZyIsZnVuY3Rpb24oYSxiKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIsZmlyc3RUZXh0OiJAIixwcmV2aW91c1RleHQ6IkAiLG5leHRUZXh0OiJAIixsYXN0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdpbmF0aW9uIiwiP25nTW9kZWwiXSxjb250cm9sbGVyOiJQYWdpbmF0aW9uQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyl7cmV0dXJue251bWJlcjphLHRleHQ6YixhY3RpdmU6Y319ZnVuY3Rpb24gaChhLGIpe3ZhciBjPVtdLGQ9MSxlPWIsZj1hbmd1bGFyLmlzRGVmaW5lZChrKSYmYj5rO2YmJihsPyhkPU1hdGgubWF4KGEtTWF0aC5mbG9vcihrLzIpLDEpLGU9ZCtrLTEsZT5iJiYoZT1iLGQ9ZS1rKzEpKTooZD0oTWF0aC5jZWlsKGEvayktMSkqaysxLGU9TWF0aC5taW4oZCtrLTEsYikpKTtmb3IodmFyIGg9ZDtlPj1oO2grKyl7dmFyIGk9ZyhoLGgsaD09PWEpO2MucHVzaChpKX1pZihmJiYhbCl7aWYoZD4xKXt2YXIgaj1nKGQtMSwiLi4uIiwhMSk7Yy51bnNoaWZ0KGopfWlmKGI+ZSl7dmFyIG09ZyhlKzEsIi4uLiIsITEpO2MucHVzaChtKX19cmV0dXJuIGN9dmFyIGk9ZlswXSxqPWZbMV07aWYoail7dmFyIGs9YW5ndWxhci5pc0RlZmluZWQoZS5tYXhTaXplKT9jLiRwYXJlbnQuJGV2YWwoZS5tYXhTaXplKTpiLm1heFNpemUsbD1hbmd1bGFyLmlzRGVmaW5lZChlLnJvdGF0ZSk/Yy4kcGFyZW50LiRldmFsKGUucm90YXRlKTpiLnJvdGF0ZTtjLmJvdW5kYXJ5TGlua3M9YW5ndWxhci5pc0RlZmluZWQoZS5ib3VuZGFyeUxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5ib3VuZGFyeUxpbmtzKTpiLmJvdW5kYXJ5TGlua3MsYy5kaXJlY3Rpb25MaW5rcz1hbmd1bGFyLmlzRGVmaW5lZChlLmRpcmVjdGlvbkxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5kaXJlY3Rpb25MaW5rcyk6Yi5kaXJlY3Rpb25MaW5rcyxpLmluaXQoaixiKSxlLm1heFNpemUmJmMuJHBhcmVudC4kd2F0Y2goYShlLm1heFNpemUpLGZ1bmN0aW9uKGEpe2s9cGFyc2VJbnQoYSwxMCksaS5yZW5kZXIoKX0pO3ZhciBtPWkucmVuZGVyO2kucmVuZGVyPWZ1bmN0aW9uKCl7bSgpLGMucGFnZT4wJiZjLnBhZ2U8PWMudG90YWxQYWdlcyYmKGMucGFnZXM9aChjLnBhZ2UsYy50b3RhbFBhZ2VzKSl9fX19fV0pLmNvbnN0YW50KCJwYWdlckNvbmZpZyIse2l0ZW1zUGVyUGFnZToxMCxwcmV2aW91c1RleHQ6IsKrIFByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCDCuyIsYWxpZ246ITB9KS5kaXJlY3RpdmUoInBhZ2VyIixbInBhZ2VyQ29uZmlnIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIscHJldmlvdXNUZXh0OiJAIixuZXh0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdlciIsIj9uZ01vZGVsIl0sY29udHJvbGxlcjoiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1lWzBdLGc9ZVsxXTtnJiYoYi5hbGlnbj1hbmd1bGFyLmlzRGVmaW5lZChkLmFsaWduKT9iLiRwYXJlbnQuJGV2YWwoZC5hbGlnbik6YS5hbGlnbixmLmluaXQoZyxhKSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRvb2x0aXAiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLnByb3ZpZGVyKCIkdG9vbHRpcCIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3ZhciBiPS9bQS1aXS9nLGM9Ii0iOworcmV0dXJuIGEucmVwbGFjZShiLGZ1bmN0aW9uKGEsYil7cmV0dXJuKGI/YzoiIikrYS50b0xvd2VyQ2FzZSgpfSl9dmFyIGI9e3BsYWNlbWVudDoidG9wIixhbmltYXRpb246ITAscG9wdXBEZWxheTowfSxjPXttb3VzZWVudGVyOiJtb3VzZWxlYXZlIixjbGljazoiY2xpY2siLGZvY3VzOiJibHVyIn0sZD17fTt0aGlzLm9wdGlvbnM9ZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoZCxhKX0sdGhpcy5zZXRUcmlnZ2Vycz1mdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChjLGEpfSx0aGlzLiRnZXQ9WyIkd2luZG93IiwiJGNvbXBpbGUiLCIkdGltZW91dCIsIiRwYXJzZSIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsIiRpbnRlcnBvbGF0ZSIsZnVuY3Rpb24oZSxmLGcsaCxpLGosayl7cmV0dXJuIGZ1bmN0aW9uKGUsbCxtKXtmdW5jdGlvbiBuKGEpe3ZhciBiPWF8fG8udHJpZ2dlcnx8bSxkPWNbYl18fGI7cmV0dXJue3Nob3c6YixoaWRlOmR9fXZhciBvPWFuZ3VsYXIuZXh0ZW5kKHt9LGIsZCkscD1hKGUpLHE9ay5zdGFydFN5bWJvbCgpLHI9ay5lbmRTeW1ib2woKSxzPSI8ZGl2ICIrcCsnLXBvcHVwIHRpdGxlPSInK3ErInR0X3RpdGxlIityKyciIGNvbnRlbnQ9IicrcSsidHRfY29udGVudCIrcisnIiBwbGFjZW1lbnQ9IicrcSsidHRfcGxhY2VtZW50IityKyciIGFuaW1hdGlvbj0idHRfYW5pbWF0aW9uIiBpcy1vcGVuPSJ0dF9pc09wZW4iPjwvZGl2Pic7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6ITAsY29tcGlsZTpmdW5jdGlvbigpe3ZhciBhPWYocyk7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBmKCl7Yi50dF9pc09wZW4/bSgpOmsoKX1mdW5jdGlvbiBrKCl7KCF5fHxiLiRldmFsKGRbbCsiRW5hYmxlIl0pKSYmKGIudHRfcG9wdXBEZWxheT92fHwodj1nKHAsYi50dF9wb3B1cERlbGF5LCExKSx2LnRoZW4oZnVuY3Rpb24oYSl7YSgpfSkpOnAoKSgpKX1mdW5jdGlvbiBtKCl7Yi4kYXBwbHkoZnVuY3Rpb24oKXtxKCl9KX1mdW5jdGlvbiBwKCl7cmV0dXJuIHY9bnVsbCx1JiYoZy5jYW5jZWwodSksdT1udWxsKSxiLnR0X2NvbnRlbnQ/KHIoKSx0LmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6ImJsb2NrIn0pLHc/aS5maW5kKCJib2R5IikuYXBwZW5kKHQpOmMuYWZ0ZXIodCkseigpLGIudHRfaXNPcGVuPSEwLGIuJGRpZ2VzdCgpLHopOmFuZ3VsYXIubm9vcH1mdW5jdGlvbiBxKCl7Yi50dF9pc09wZW49ITEsZy5jYW5jZWwodiksdj1udWxsLGIudHRfYW5pbWF0aW9uP3V8fCh1PWcocyw1MDApKTpzKCl9ZnVuY3Rpb24gcigpe3QmJnMoKSx0PWEoYixmdW5jdGlvbigpe30pLGIuJGRpZ2VzdCgpfWZ1bmN0aW9uIHMoKXt1PW51bGwsdCYmKHQucmVtb3ZlKCksdD1udWxsKX12YXIgdCx1LHYsdz1hbmd1bGFyLmlzRGVmaW5lZChvLmFwcGVuZFRvQm9keSk/by5hcHBlbmRUb0JvZHk6ITEseD1uKHZvaWQgMCkseT1hbmd1bGFyLmlzRGVmaW5lZChkW2wrIkVuYWJsZSJdKSx6PWZ1bmN0aW9uKCl7dmFyIGE9ai5wb3NpdGlvbkVsZW1lbnRzKGMsdCxiLnR0X3BsYWNlbWVudCx3KTthLnRvcCs9InB4IixhLmxlZnQrPSJweCIsdC5jc3MoYSl9O2IudHRfaXNPcGVuPSExLGQuJG9ic2VydmUoZSxmdW5jdGlvbihhKXtiLnR0X2NvbnRlbnQ9YSwhYSYmYi50dF9pc09wZW4mJnEoKX0pLGQuJG9ic2VydmUobCsiVGl0bGUiLGZ1bmN0aW9uKGEpe2IudHRfdGl0bGU9YX0pLGQuJG9ic2VydmUobCsiUGxhY2VtZW50IixmdW5jdGlvbihhKXtiLnR0X3BsYWNlbWVudD1hbmd1bGFyLmlzRGVmaW5lZChhKT9hOm8ucGxhY2VtZW50fSksZC4kb2JzZXJ2ZShsKyJQb3B1cERlbGF5IixmdW5jdGlvbihhKXt2YXIgYz1wYXJzZUludChhLDEwKTtiLnR0X3BvcHVwRGVsYXk9aXNOYU4oYyk/by5wb3B1cERlbGF5OmN9KTt2YXIgQT1mdW5jdGlvbigpe2MudW5iaW5kKHguc2hvdyxrKSxjLnVuYmluZCh4LmhpZGUsbSl9O2QuJG9ic2VydmUobCsiVHJpZ2dlciIsZnVuY3Rpb24oYSl7QSgpLHg9bihhKSx4LnNob3c9PT14LmhpZGU/Yy5iaW5kKHguc2hvdyxmKTooYy5iaW5kKHguc2hvdyxrKSxjLmJpbmQoeC5oaWRlLG0pKX0pO3ZhciBCPWIuJGV2YWwoZFtsKyJBbmltYXRpb24iXSk7Yi50dF9hbmltYXRpb249YW5ndWxhci5pc0RlZmluZWQoQik/ISFCOm8uYW5pbWF0aW9uLGQuJG9ic2VydmUobCsiQXBwZW5kVG9Cb2R5IixmdW5jdGlvbihhKXt3PWFuZ3VsYXIuaXNEZWZpbmVkKGEpP2goYSkoYik6d30pLHcmJmIuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2IudHRfaXNPcGVuJiZxKCl9KSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zy5jYW5jZWwodSksZy5jYW5jZWwodiksQSgpLHMoKX0pfX19fX1dfSkuZGlyZWN0aXZlKCJ0b29sdGlwUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7Y29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCJ9fSkuZGlyZWN0aXZlKCJ0b29sdGlwIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgidG9vbHRpcCIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSkuZGlyZWN0aXZlKCJ0b29sdGlwSHRtbFVuc2FmZVBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e2NvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwifX0pLmRpcmVjdGl2ZSgidG9vbHRpcEh0bWxVbnNhZmUiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJ0b29sdGlwSHRtbFVuc2FmZSIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wb3BvdmVyIixbInVpLmJvb3RzdHJhcC50b29sdGlwIl0pLmRpcmVjdGl2ZSgicG9wb3ZlclBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e3RpdGxlOiJAIixjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIn19KS5kaXJlY3RpdmUoInBvcG92ZXIiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJwb3BvdmVyIiwicG9wb3ZlciIsImNsaWNrIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsW10pLmNvbnN0YW50KCJwcm9ncmVzc0NvbmZpZyIse2FuaW1hdGU6ITAsbWF4OjEwMH0pLmNvbnRyb2xsZXIoIlByb2dyZXNzQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJwcm9ncmVzc0NvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1hbmd1bGFyLmlzRGVmaW5lZChiLmFuaW1hdGUpP2EuJHBhcmVudC4kZXZhbChiLmFuaW1hdGUpOmMuYW5pbWF0ZTt0aGlzLmJhcnM9W10sYS5tYXg9YW5ndWxhci5pc0RlZmluZWQoYi5tYXgpP2EuJHBhcmVudC4kZXZhbChiLm1heCk6Yy5tYXgsdGhpcy5hZGRCYXI9ZnVuY3Rpb24oYixjKXtlfHxjLmNzcyh7dHJhbnNpdGlvbjoibm9uZSJ9KSx0aGlzLmJhcnMucHVzaChiKSxiLiR3YXRjaCgidmFsdWUiLGZ1bmN0aW9uKGMpe2IucGVyY2VudD0rKDEwMCpjL2EubWF4KS50b0ZpeGVkKDIpfSksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2M9bnVsbCxkLnJlbW92ZUJhcihiKX0pfSx0aGlzLnJlbW92ZUJhcj1mdW5jdGlvbihhKXt0aGlzLmJhcnMuc3BsaWNlKHRoaXMuYmFycy5pbmRleE9mKGEpLDEpfX1dKS5kaXJlY3RpdmUoInByb2dyZXNzIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxjb250cm9sbGVyOiJQcm9ncmVzc0NvbnRyb2xsZXIiLHJlcXVpcmU6InByb2dyZXNzIixzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCJ9fSkuZGlyZWN0aXZlKCJiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHJlcXVpcmU6Il5wcm9ncmVzcyIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkQmFyKGEsYil9fX0pLmRpcmVjdGl2ZSgicHJvZ3Jlc3NiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLGNvbnRyb2xsZXI6IlByb2dyZXNzQ29udHJvbGxlciIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRCYXIoYSxhbmd1bGFyLmVsZW1lbnQoYi5jaGlsZHJlbigpWzBdKSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucmF0aW5nIixbXSkuY29uc3RhbnQoInJhdGluZ0NvbmZpZyIse21heDo1LHN0YXRlT246bnVsbCxzdGF0ZU9mZjpudWxsfSkuY29udHJvbGxlcigiUmF0aW5nQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJyYXRpbmdDb25maWciLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9O3RoaXMuaW5pdD1mdW5jdGlvbihlKXtkPWUsZC4kcmVuZGVyPXRoaXMucmVuZGVyLHRoaXMuc3RhdGVPbj1hbmd1bGFyLmlzRGVmaW5lZChiLnN0YXRlT24pP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT24pOmMuc3RhdGVPbix0aGlzLnN0YXRlT2ZmPWFuZ3VsYXIuaXNEZWZpbmVkKGIuc3RhdGVPZmYpP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT2ZmKTpjLnN0YXRlT2ZmO3ZhciBmPWFuZ3VsYXIuaXNEZWZpbmVkKGIucmF0aW5nU3RhdGVzKT9hLiRwYXJlbnQuJGV2YWwoYi5yYXRpbmdTdGF0ZXMpOm5ldyBBcnJheShhbmd1bGFyLmlzRGVmaW5lZChiLm1heCk/YS4kcGFyZW50LiRldmFsKGIubWF4KTpjLm1heCk7YS5yYW5nZT10aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzKGYpfSx0aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdPWFuZ3VsYXIuZXh0ZW5kKHtpbmRleDpifSx7c3RhdGVPbjp0aGlzLnN0YXRlT24sc3RhdGVPZmY6dGhpcy5zdGF0ZU9mZn0sYVtiXSk7cmV0dXJuIGF9LGEucmF0ZT1mdW5jdGlvbihiKXshYS5yZWFkb25seSYmYj49MCYmYjw9YS5yYW5nZS5sZW5ndGgmJihkLiRzZXRWaWV3VmFsdWUoYiksZC4kcmVuZGVyKCkpfSxhLmVudGVyPWZ1bmN0aW9uKGIpe2EucmVhZG9ubHl8fChhLnZhbHVlPWIpLGEub25Ib3Zlcih7dmFsdWU6Yn0pfSxhLnJlc2V0PWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWUsYS5vbkxlYXZlKCl9LGEub25LZXlkb3duPWZ1bmN0aW9uKGIpey8oMzd8Mzh8Mzl8NDApLy50ZXN0KGIud2hpY2gpJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5yYXRlKGEudmFsdWUrKDM4PT09Yi53aGljaHx8Mzk9PT1iLndoaWNoPzE6LTEpKSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWV9fV0pLmRpcmVjdGl2ZSgicmF0aW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6WyJyYXRpbmciLCJuZ01vZGVsIl0sc2NvcGU6e3JlYWRvbmx5OiI9PyIsb25Ib3ZlcjoiJiIsb25MZWF2ZToiJiJ9LGNvbnRyb2xsZXI6IlJhdGluZ0NvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZil9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudGFicyIsW10pLmNvbnRyb2xsZXIoIlRhYnNldENvbnRyb2xsZXIiLFsiJHNjb3BlIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi50YWJzPWEudGFicz1bXTtiLnNlbGVjdD1mdW5jdGlvbihhKXthbmd1bGFyLmZvckVhY2goYyxmdW5jdGlvbihiKXtiLmFjdGl2ZSYmYiE9PWEmJihiLmFjdGl2ZT0hMSxiLm9uRGVzZWxlY3QoKSl9KSxhLmFjdGl2ZT0hMCxhLm9uU2VsZWN0KCl9LGIuYWRkVGFiPWZ1bmN0aW9uKGEpe2MucHVzaChhKSwxPT09Yy5sZW5ndGg/YS5hY3RpdmU9ITA6YS5hY3RpdmUmJmIuc2VsZWN0KGEpfSxiLnJlbW92ZVRhYj1mdW5jdGlvbihhKXt2YXIgZD1jLmluZGV4T2YoYSk7aWYoYS5hY3RpdmUmJmMubGVuZ3RoPjEpe3ZhciBlPWQ9PWMubGVuZ3RoLTE/ZC0xOmQrMTtiLnNlbGVjdChjW2VdKX1jLnNwbGljZShkLDEpfX1dKS5kaXJlY3RpdmUoInRhYnNldCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsc2NvcGU6e3R5cGU6IkAifSxjb250cm9sbGVyOiJUYWJzZXRDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyl7YS52ZXJ0aWNhbD1hbmd1bGFyLmlzRGVmaW5lZChjLnZlcnRpY2FsKT9hLiRwYXJlbnQuJGV2YWwoYy52ZXJ0aWNhbCk6ITEsYS5qdXN0aWZpZWQ9YW5ndWxhci5pc0RlZmluZWQoYy5qdXN0aWZpZWQpP2EuJHBhcmVudC4kZXZhbChjLmp1c3RpZmllZCk6ITF9fX0pLmRpcmVjdGl2ZSgidGFiIixbIiRwYXJzZSIsZnVuY3Rpb24oYSl7cmV0dXJue3JlcXVpcmU6Il50YWJzZXQiLHJlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsdHJhbnNjbHVkZTohMCxzY29wZTp7YWN0aXZlOiI9PyIsaGVhZGluZzoiQCIsb25TZWxlY3Q6IiZzZWxlY3QiLG9uRGVzZWxlY3Q6IiZkZXNlbGVjdCJ9LGNvbnRyb2xsZXI6ZnVuY3Rpb24oKXt9LGNvbXBpbGU6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBmdW5jdGlvbihiLGMsZSxmKXtiLiR3YXRjaCgiYWN0aXZlIixmdW5jdGlvbihhKXthJiZmLnNlbGVjdChiKX0pLGIuZGlzYWJsZWQ9ITEsZS5kaXNhYmxlZCYmYi4kcGFyZW50LiR3YXRjaChhKGUuZGlzYWJsZWQpLGZ1bmN0aW9uKGEpe2IuZGlzYWJsZWQ9ISFhfSksYi5zZWxlY3Q9ZnVuY3Rpb24oKXtiLmRpc2FibGVkfHwoYi5hY3RpdmU9ITApfSxmLmFkZFRhYihiKSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVUYWIoYil9KSxiLiR0cmFuc2NsdWRlRm49ZH19fX1dKS5kaXJlY3RpdmUoInRhYkhlYWRpbmdUcmFuc2NsdWRlIixbZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkEiLHJlcXVpcmU6Il50YWIiLGxpbms6ZnVuY3Rpb24oYSxiKXthLiR3YXRjaCgiaGVhZGluZ0VsZW1lbnQiLGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19XSkuZGlyZWN0aXZlKCJ0YWJDb250ZW50VHJhbnNjbHVkZSIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnRhZ05hbWUmJihhLmhhc0F0dHJpYnV0ZSgidGFiLWhlYWRpbmciKXx8YS5oYXNBdHRyaWJ1dGUoImRhdGEtdGFiLWhlYWRpbmciKXx8InRhYi1oZWFkaW5nIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpfHwiZGF0YS10YWItaGVhZGluZyI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl9cmV0dXJue3Jlc3RyaWN0OiJBIixyZXF1aXJlOiJedGFic2V0IixsaW5rOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLiRldmFsKGQudGFiQ29udGVudFRyYW5zY2x1ZGUpO2UuJHRyYW5zY2x1ZGVGbihlLiRwYXJlbnQsZnVuY3Rpb24oYil7YW5ndWxhci5mb3JFYWNoKGIsZnVuY3Rpb24oYil7YShiKT9lLmhlYWRpbmdFbGVtZW50PWI6Yy5hcHBlbmQoYil9KX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRpbWVwaWNrZXIiLFtdKS5jb25zdGFudCgidGltZXBpY2tlckNvbmZpZyIse2hvdXJTdGVwOjEsbWludXRlU3RlcDoxLHNob3dNZXJpZGlhbjohMCxtZXJpZGlhbnM6bnVsbCxyZWFkb25seUlucHV0OiExLG1vdXNld2hlZWw6ITB9KS5jb250cm9sbGVyKCJUaW1lcGlja2VyQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCIkbG9nIiwiJGxvY2FsZSIsInRpbWVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKCl7dmFyIGI9cGFyc2VJbnQoYS5ob3VycywxMCksYz1hLnNob3dNZXJpZGlhbj9iPjAmJjEzPmI6Yj49MCYmMjQ+YjtyZXR1cm4gYz8oYS5zaG93TWVyaWRpYW4mJigxMj09PWImJihiPTApLGEubWVyaWRpYW49PT1wWzFdJiYoYis9MTIpKSxiKTp2b2lkIDB9ZnVuY3Rpb24gaCgpe3ZhciBiPXBhcnNlSW50KGEubWludXRlcywxMCk7cmV0dXJuIGI+PTAmJjYwPmI/Yjp2b2lkIDB9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoYSkmJmEudG9TdHJpbmcoKS5sZW5ndGg8Mj8iMCIrYTphfWZ1bmN0aW9uIGooYSl7aygpLG8uJHNldFZpZXdWYWx1ZShuZXcgRGF0ZShuKSksbChhKX1mdW5jdGlvbiBrKCl7by4kc2V0VmFsaWRpdHkoInRpbWUiLCEwKSxhLmludmFsaWRIb3Vycz0hMSxhLmludmFsaWRNaW51dGVzPSExfWZ1bmN0aW9uIGwoYil7dmFyIGM9bi5nZXRIb3VycygpLGQ9bi5nZXRNaW51dGVzKCk7YS5zaG93TWVyaWRpYW4mJihjPTA9PT1jfHwxMj09PWM/MTI6YyUxMiksYS5ob3Vycz0iaCI9PT1iP2M6aShjKSxhLm1pbnV0ZXM9Im0iPT09Yj9kOmkoZCksYS5tZXJpZGlhbj1uLmdldEhvdXJzKCk8MTI/cFswXTpwWzFdfWZ1bmN0aW9uIG0oYSl7dmFyIGI9bmV3IERhdGUobi5nZXRUaW1lKCkrNmU0KmEpO24uc2V0SG91cnMoYi5nZXRIb3VycygpLGIuZ2V0TWludXRlcygpKSxqKCl9dmFyIG49bmV3IERhdGUsbz17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9LHA9YW5ndWxhci5pc0RlZmluZWQoYi5tZXJpZGlhbnMpP2EuJHBhcmVudC4kZXZhbChiLm1lcmlkaWFucyk6Zi5tZXJpZGlhbnN8fGUuREFURVRJTUVfRk9STUFUUy5BTVBNUzt0aGlzLmluaXQ9ZnVuY3Rpb24oYyxkKXtvPWMsby4kcmVuZGVyPXRoaXMucmVuZGVyO3ZhciBlPWQuZXEoMCksZz1kLmVxKDEpLGg9YW5ndWxhci5pc0RlZmluZWQoYi5tb3VzZXdoZWVsKT9hLiRwYXJlbnQuJGV2YWwoYi5tb3VzZXdoZWVsKTpmLm1vdXNld2hlZWw7aCYmdGhpcy5zZXR1cE1vdXNld2hlZWxFdmVudHMoZSxnKSxhLnJlYWRvbmx5SW5wdXQ9YW5ndWxhci5pc0RlZmluZWQoYi5yZWFkb25seUlucHV0KT9hLiRwYXJlbnQuJGV2YWwoYi5yZWFkb25seUlucHV0KTpmLnJlYWRvbmx5SW5wdXQsdGhpcy5zZXR1cElucHV0RXZlbnRzKGUsZyl9O3ZhciBxPWYuaG91clN0ZXA7Yi5ob3VyU3RlcCYmYS4kcGFyZW50LiR3YXRjaChjKGIuaG91clN0ZXApLGZ1bmN0aW9uKGEpe3E9cGFyc2VJbnQoYSwxMCl9KTt2YXIgcj1mLm1pbnV0ZVN0ZXA7Yi5taW51dGVTdGVwJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5taW51dGVTdGVwKSxmdW5jdGlvbihhKXtyPXBhcnNlSW50KGEsMTApfSksYS5zaG93TWVyaWRpYW49Zi5zaG93TWVyaWRpYW4sYi5zaG93TWVyaWRpYW4mJmEuJHBhcmVudC4kd2F0Y2goYyhiLnNob3dNZXJpZGlhbiksZnVuY3Rpb24oYil7aWYoYS5zaG93TWVyaWRpYW49ISFiLG8uJGVycm9yLnRpbWUpe3ZhciBjPWcoKSxkPWgoKTthbmd1bGFyLmlzRGVmaW5lZChjKSYmYW5ndWxhci5pc0RlZmluZWQoZCkmJihuLnNldEhvdXJzKGMpLGooKSl9ZWxzZSBsKCl9KSx0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cz1mdW5jdGlvbihiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe2Eub3JpZ2luYWxFdmVudCYmKGE9YS5vcmlnaW5hbEV2ZW50KTt2YXIgYj1hLndoZWVsRGVsdGE/YS53aGVlbERlbHRhOi1hLmRlbHRhWTtyZXR1cm4gYS5kZXRhaWx8fGI+MH07Yi5iaW5kKCJtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihiKXthLiRhcHBseShkKGIpP2EuaW5jcmVtZW50SG91cnMoKTphLmRlY3JlbWVudEhvdXJzKCkpLGIucHJldmVudERlZmF1bHQoKX0pLGMuYmluZCgibW91c2V3aGVlbCB3aGVlbCIsZnVuY3Rpb24oYil7YS4kYXBwbHkoZChiKT9hLmluY3JlbWVudE1pbnV0ZXMoKTphLmRlY3JlbWVudE1pbnV0ZXMoKSksYi5wcmV2ZW50RGVmYXVsdCgpfSl9LHRoaXMuc2V0dXBJbnB1dEV2ZW50cz1mdW5jdGlvbihiLGMpe2lmKGEucmVhZG9ubHlJbnB1dClyZXR1cm4gYS51cGRhdGVIb3Vycz1hbmd1bGFyLm5vb3Asdm9pZChhLnVwZGF0ZU1pbnV0ZXM9YW5ndWxhci5ub29wKTt2YXIgZD1mdW5jdGlvbihiLGMpe28uJHNldFZpZXdWYWx1ZShudWxsKSxvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGFuZ3VsYXIuaXNEZWZpbmVkKGIpJiYoYS5pbnZhbGlkSG91cnM9YiksYW5ndWxhci5pc0RlZmluZWQoYykmJihhLmludmFsaWRNaW51dGVzPWMpfTthLnVwZGF0ZUhvdXJzPWZ1bmN0aW9uKCl7dmFyIGE9ZygpO2FuZ3VsYXIuaXNEZWZpbmVkKGEpPyhuLnNldEhvdXJzKGEpLGooImgiKSk6ZCghMCl9LGIuYmluZCgiYmx1ciIsZnVuY3Rpb24oKXshYS5pbnZhbGlkSG91cnMmJmEuaG91cnM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5ob3Vycz1pKGEuaG91cnMpfSl9KSxhLnVwZGF0ZU1pbnV0ZXM9ZnVuY3Rpb24oKXt2YXIgYT1oKCk7YW5ndWxhci5pc0RlZmluZWQoYSk/KG4uc2V0TWludXRlcyhhKSxqKCJtIikpOmQodm9pZCAwLCEwKX0sYy5iaW5kKCJibHVyIixmdW5jdGlvbigpeyFhLmludmFsaWRNaW51dGVzJiZhLm1pbnV0ZXM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5taW51dGVzPWkoYS5taW51dGVzKX0pfSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGE9by4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShvLiRtb2RlbFZhbHVlKTpudWxsO2lzTmFOKGEpPyhvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGQuZXJyb3IoJ1RpbWVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSk6KGEmJihuPWEpLGsoKSxsKCkpfSxhLmluY3JlbWVudEhvdXJzPWZ1bmN0aW9uKCl7bSg2MCpxKX0sYS5kZWNyZW1lbnRIb3Vycz1mdW5jdGlvbigpe20oNjAqLXEpfSxhLmluY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKHIpfSxhLmRlY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKC1yKX0sYS50b2dnbGVNZXJpZGlhbj1mdW5jdGlvbigpe20oNzIwKihuLmdldEhvdXJzKCk8MTI/MTotMSkpfX1dKS5kaXJlY3RpdmUoInRpbWVwaWNrZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZTpbInRpbWVwaWNrZXIiLCI/Xm5nTW9kZWwiXSxjb250cm9sbGVyOiJUaW1lcGlja2VyQ29udHJvbGxlciIscmVwbGFjZTohMCxzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYsYi5maW5kKCJpbnB1dCIpKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50eXBlYWhlYWQiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLmZhY3RvcnkoInR5cGVhaGVhZFBhcnNlciIsWyIkcGFyc2UiLGZ1bmN0aW9uKGEpe3ZhciBiPS9eXHMqKC4qPykoPzpccythc1xzKyguKj8pKT9ccytmb3JccysoPzooW1wkXHddW1wkXHdcZF0qKSlccytpblxzKyguKikkLztyZXR1cm57cGFyc2U6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5tYXRjaChiKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHR5cGVhaGVhZCBzcGVjaWZpY2F0aW9uIGluIGZvcm0gb2YgIl9tb2RlbFZhbHVlXyAoYXMgX2xhYmVsXyk/IGZvciBfaXRlbV8gaW4gX2NvbGxlY3Rpb25fIiBidXQgZ290ICInK2MrJyIuJyk7cmV0dXJue2l0ZW1OYW1lOmRbM10sc291cmNlOmEoZFs0XSksdmlld01hcHBlcjphKGRbMl18fGRbMV0pLG1vZGVsTWFwcGVyOmEoZFsxXSl9fX19XSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWQiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkcSIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwidHlwZWFoZWFkUGFyc2VyIixmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD1bOSwxMywyNywzOCw0MF07cmV0dXJue3JlcXVpcmU6Im5nTW9kZWwiLGxpbms6ZnVuY3Rpb24oaSxqLGssbCl7dmFyIG0sbj1pLiRldmFsKGsudHlwZWFoZWFkTWluTGVuZ3RoKXx8MSxvPWkuJGV2YWwoay50eXBlYWhlYWRXYWl0TXMpfHwwLHA9aS4kZXZhbChrLnR5cGVhaGVhZEVkaXRhYmxlKSE9PSExLHE9YihrLnR5cGVhaGVhZExvYWRpbmcpLmFzc2lnbnx8YW5ndWxhci5ub29wLHI9YihrLnR5cGVhaGVhZE9uU2VsZWN0KSxzPWsudHlwZWFoZWFkSW5wdXRGb3JtYXR0ZXI/YihrLnR5cGVhaGVhZElucHV0Rm9ybWF0dGVyKTp2b2lkIDAsdD1rLnR5cGVhaGVhZEFwcGVuZFRvQm9keT9pLiRldmFsKGsudHlwZWFoZWFkQXBwZW5kVG9Cb2R5KTohMSx1PWIoay5uZ01vZGVsKS5hc3NpZ24sdj1nLnBhcnNlKGsudHlwZWFoZWFkKSx3PWkuJG5ldygpO2kuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXt3LiRkZXN0cm95KCl9KTt2YXIgeD0idHlwZWFoZWFkLSIrdy4kaWQrIi0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpO2ouYXR0cih7ImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtZXhwYW5kZWQiOiExLCJhcmlhLW93bnMiOnh9KTt2YXIgeT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgdHlwZWFoZWFkLXBvcHVwPjwvZGl2PiIpO3kuYXR0cih7aWQ6eCxtYXRjaGVzOiJtYXRjaGVzIixhY3RpdmU6ImFjdGl2ZUlkeCIsc2VsZWN0OiJzZWxlY3QoYWN0aXZlSWR4KSIscXVlcnk6InF1ZXJ5Iixwb3NpdGlvbjoicG9zaXRpb24ifSksYW5ndWxhci5pc0RlZmluZWQoay50eXBlYWhlYWRUZW1wbGF0ZVVybCkmJnkuYXR0cigidGVtcGxhdGUtdXJsIixrLnR5cGVhaGVhZFRlbXBsYXRlVXJsKTt2YXIgej1mdW5jdGlvbigpe3cubWF0Y2hlcz1bXSx3LmFjdGl2ZUlkeD0tMSxqLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKX0sQT1mdW5jdGlvbihhKXtyZXR1cm4geCsiLW9wdGlvbi0iK2F9O3cuJHdhdGNoKCJhY3RpdmVJZHgiLGZ1bmN0aW9uKGEpezA+YT9qLnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpOmouYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixBKGEpKX0pO3ZhciBCPWZ1bmN0aW9uKGEpe3ZhciBiPXskdmlld1ZhbHVlOmF9O3EoaSwhMCksYy53aGVuKHYuc291cmNlKGksYikpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGQ9YT09PWwuJHZpZXdWYWx1ZTtpZihkJiZtKWlmKGMubGVuZ3RoPjApe3cuYWN0aXZlSWR4PTAsdy5tYXRjaGVzLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWJbdi5pdGVtTmFtZV09Y1tlXSx3Lm1hdGNoZXMucHVzaCh7aWQ6QShlKSxsYWJlbDp2LnZpZXdNYXBwZXIodyxiKSxtb2RlbDpjW2VdfSk7dy5xdWVyeT1hLHcucG9zaXRpb249dD9mLm9mZnNldChqKTpmLnBvc2l0aW9uKGopLHcucG9zaXRpb24udG9wPXcucG9zaXRpb24udG9wK2oucHJvcCgib2Zmc2V0SGVpZ2h0Iiksai5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCl9ZWxzZSB6KCk7ZCYmcShpLCExKX0sZnVuY3Rpb24oKXt6KCkscShpLCExKX0pfTt6KCksdy5xdWVyeT12b2lkIDA7dmFyIEM7bC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uKGEpe3JldHVybiBtPSEwLGEmJmEubGVuZ3RoPj1uP28+MD8oQyYmZC5jYW5jZWwoQyksQz1kKGZ1bmN0aW9uKCl7QihhKX0sbykpOkIoYSk6KHEoaSwhMSkseigpKSxwP2E6YT92b2lkIGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITEpOihsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCEwKSxhKX0pLGwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbihhKXt2YXIgYixjLGQ9e307cmV0dXJuIHM/KGQuJG1vZGVsPWEscyhpLGQpKTooZFt2Lml0ZW1OYW1lXT1hLGI9di52aWV3TWFwcGVyKGksZCksZFt2Lml0ZW1OYW1lXT12b2lkIDAsYz12LnZpZXdNYXBwZXIoaSxkKSxiIT09Yz9iOmEpfSksdy5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPXt9O2Vbdi5pdGVtTmFtZV09Yz13Lm1hdGNoZXNbYV0ubW9kZWwsYj12Lm1vZGVsTWFwcGVyKGksZSksdShpLGIpLGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITApLHIoaSx7JGl0ZW06YywkbW9kZWw6YiwkbGFiZWw6di52aWV3TWFwcGVyKGksZSl9KSx6KCksZChmdW5jdGlvbigpe2pbMF0uZm9jdXMoKX0sMCwhMSl9LGouYmluZCgia2V5ZG93biIsZnVuY3Rpb24oYSl7MCE9PXcubWF0Y2hlcy5sZW5ndGgmJi0xIT09aC5pbmRleE9mKGEud2hpY2gpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLDQwPT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4KzEpJXcubWF0Y2hlcy5sZW5ndGgsdy4kZGlnZXN0KCkpOjM4PT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4P3cuYWN0aXZlSWR4OncubWF0Y2hlcy5sZW5ndGgpLTEsdy4kZGlnZXN0KCkpOjEzPT09YS53aGljaHx8OT09PWEud2hpY2g/dy4kYXBwbHkoZnVuY3Rpb24oKXt3LnNlbGVjdCh3LmFjdGl2ZUlkeCl9KToyNz09PWEud2hpY2gmJihhLnN0b3BQcm9wYWdhdGlvbigpLHooKSx3LiRkaWdlc3QoKSkpfSksai5iaW5kKCJibHVyIixmdW5jdGlvbigpe209ITF9KTt2YXIgRD1mdW5jdGlvbihhKXtqWzBdIT09YS50YXJnZXQmJih6KCksdy4kZGlnZXN0KCkpfTtlLmJpbmQoImNsaWNrIixEKSxpLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZS51bmJpbmQoImNsaWNrIixEKX0pO3ZhciBFPWEoeSkodyk7dD9lLmZpbmQoImJvZHkiKS5hcHBlbmQoRSk6ai5hZnRlcihFKX19fV0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e21hdGNoZXM6Ij0iLHF1ZXJ5OiI9IixhY3RpdmU6Ij0iLHBvc2l0aW9uOiI9IixzZWxlY3Q6IiYifSxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMpe2EudGVtcGxhdGVVcmw9Yy50ZW1wbGF0ZVVybCxhLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiBhLm1hdGNoZXMubGVuZ3RoPjB9LGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIGEuYWN0aXZlPT1ifSxhLnNlbGVjdEFjdGl2ZT1mdW5jdGlvbihiKXthLmFjdGl2ZT1ifSxhLnNlbGVjdE1hdGNoPWZ1bmN0aW9uKGIpe2Euc2VsZWN0KHthY3RpdmVJZHg6Yn0pfX19fSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWRNYXRjaCIsWyIkaHR0cCIsIiR0ZW1wbGF0ZUNhY2hlIiwiJGNvbXBpbGUiLCIkcGFyc2UiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOntpbmRleDoiPSIsbWF0Y2g6Ij0iLHF1ZXJ5OiI9In0sbGluazpmdW5jdGlvbihlLGYsZyl7dmFyIGg9ZChnLnRlbXBsYXRlVXJsKShlLiRwYXJlbnQpfHwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIjthLmdldChoLHtjYWNoZTpifSkuc3VjY2VzcyhmdW5jdGlvbihhKXtmLnJlcGxhY2VXaXRoKGMoYS50cmltKCkpKGUpKX0pfX19XSkuZmlsdGVyKCJ0eXBlYWhlYWRIaWdobGlnaHQiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpfXJldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBjPygiIitiKS5yZXBsYWNlKG5ldyBSZWdFeHAoYShjKSwiZ2kiKSwiPHN0cm9uZz4kJjwvc3Ryb25nPiIpOmJ9fSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwnPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+XG4gIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPlxuICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPlxuICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiIG5nLWNsaWNrPSJ0b2dnbGVPcGVuKCkiIGFjY29yZGlvbi10cmFuc2NsdWRlPSJoZWFkaW5nIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1tdXRlZFwnOiBpc0Rpc2FibGVkfSI+e3toZWFkaW5nfX08L3NwYW4+PC9hPlxuICAgIDwvaDQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJwYW5lbC1jb2xsYXBzZSIgY29sbGFwc2U9IiFpc09wZW4iPlxuCSAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLCc8ZGl2IGNsYXNzPSJwYW5lbC1ncm91cCIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsJzxkaXYgY2xhc3M9ImFsZXJ0IiBuZy1jbGFzcz0ie1wnYWxlcnQte3t0eXBlIHx8IFwnd2FybmluZ1wnfX1cJzogdHJ1ZSwgXCdhbGVydC1kaXNtaXNzYWJsZVwnOiBjbG9zZWFibGV9IiByb2xlPSJhbGVydCI+XG4gICAgPGJ1dHRvbiBuZy1zaG93PSJjbG9zZWFibGUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBuZy1jbGljaz0iY2xvc2UoKSI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+Q2xvc2U8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsJzxkaXYgbmctbW91c2VlbnRlcj0icGF1c2UoKSIgbmctbW91c2VsZWF2ZT0icGxheSgpIiBjbGFzcz0iY2Fyb3VzZWwiIG5nLXN3aXBlLXJpZ2h0PSJwcmV2KCkiIG5nLXN3aXBlLWxlZnQ9Im5leHQoKSI+XG4gICAgPG9sIGNsYXNzPSJjYXJvdXNlbC1pbmRpY2F0b3JzIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+XG4gICAgICAgIDxsaSBuZy1yZXBlYXQ9InNsaWRlIGluIHNsaWRlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZShzbGlkZSl9IiBuZy1jbGljaz0ic2VsZWN0KHNsaWRlKSI+PC9saT5cbiAgICA8L29sPlxuICAgIDxkaXYgY2xhc3M9ImNhcm91c2VsLWlubmVyIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuICAgIDxhIGNsYXNzPSJsZWZ0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJwcmV2KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvc3Bhbj48L2E+XG4gICAgPGEgY2xhc3M9InJpZ2h0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJuZXh0KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L3NwYW4+PC9hPlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsIjxkaXYgbmctY2xhc3M9XCJ7XG4gICAgJ2FjdGl2ZSc6IGxlYXZpbmcgfHwgKGFjdGl2ZSAmJiAhZW50ZXJpbmcpLFxuICAgICdwcmV2JzogKG5leHQgfHwgYWN0aXZlKSAmJiBkaXJlY3Rpb249PSdwcmV2JyxcbiAgICAnbmV4dCc6IChuZXh0IHx8IGFjdGl2ZSkgJiYgZGlyZWN0aW9uPT0nbmV4dCcsXG4gICAgJ3JpZ2h0JzogZGlyZWN0aW9uPT0ncHJldicsXG4gICAgJ2xlZnQnOiBkaXJlY3Rpb249PSduZXh0J1xuICB9XCIgY2xhc3M9XCJpdGVtIHRleHQtY2VudGVyXCIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCc8ZGl2IG5nLXN3aXRjaD0iZGF0ZXBpY2tlck1vZGUiIHJvbGU9ImFwcGxpY2F0aW9uIiBuZy1rZXlkb3duPSJrZXlkb3duKCRldmVudCkiPlxuICA8ZGF5cGlja2VyIG5nLXN3aXRjaC13aGVuPSJkYXkiIHRhYmluZGV4PSIwIj48L2RheXBpY2tlcj5cbiAgPG1vbnRocGlja2VyIG5nLXN3aXRjaC13aGVuPSJtb250aCIgdGFiaW5kZXg9IjAiPjwvbW9udGhwaWNrZXI+XG4gIDx5ZWFycGlja2VyIG5nLXN3aXRjaC13aGVuPSJ5ZWFyIiB0YWJpbmRleD0iMCI+PC95ZWFycGlja2VyPlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0ie3s1ICsgc2hvd1dlZWtzfX0iPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICAgIDx0cj5cbiAgICAgIDx0aCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PC90aD5cbiAgICAgIDx0aCBuZy1yZXBlYXQ9ImxhYmVsIGluIGxhYmVscyB0cmFjayBieSAkaW5kZXgiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PHNtYWxsIGFyaWEtbGFiZWw9Int7bGFiZWwuZnVsbH19Ij57e2xhYmVsLmFiYnJ9fTwvc21hbGw+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciBoNiI+PGVtPnt7IHdlZWtOdW1iZXJzWyRpbmRleF0gfX08L2VtPjwvdGQ+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtbXV0ZWRcJzogZHQuc2Vjb25kYXJ5LCBcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwnPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiBuZy1zdHlsZT0ie2Rpc3BsYXk6IChpc09wZW4gJiYgXCdibG9ja1wnKSB8fCBcJ25vbmVcJywgdG9wOiBwb3NpdGlvbi50b3ArXCdweFwnLCBsZWZ0OiBwb3NpdGlvbi5sZWZ0K1wncHhcJ30iIG5nLWtleWRvd249ImtleWRvd24oJGV2ZW50KSI+XG4JPGxpIG5nLXRyYW5zY2x1ZGU+PC9saT5cbgk8bGkgbmctaWY9InNob3dCdXR0b25CYXIiIHN0eWxlPSJwYWRkaW5nOjEwcHggOXB4IDJweCI+XG4JCTxzcGFuIGNsYXNzPSJidG4tZ3JvdXAiPlxuCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1pbmZvIiBuZy1jbGljaz0ic2VsZWN0KFwndG9kYXlcJykiPnt7IGdldFRleHQoXCdjdXJyZW50XCcpIH19PC9idXR0b24+XG4JCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLWRhbmdlciIgbmctY2xpY2s9InNlbGVjdChudWxsKSI+e3sgZ2V0VGV4dChcJ2NsZWFyXCcpIH19PC9idXR0b24+XG4JCTwvc3Bhbj5cbgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJjbG9zZSgpIj57eyBnZXRUZXh0KFwnY2xvc2VcJykgfX08L2J1dHRvbj5cbgk8L2xpPlxuPC91bD5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0iMyI+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgZmFkZSJcbiAgICAgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iXG4gICAgIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNDAgKyAoaW5kZXggJiYgMSB8fCAwKSArIGluZGV4KjEwfSJcbj48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCc8ZGl2IHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBjbGFzcz0ibW9kYWwgZmFkZSIgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNTAgKyBpbmRleCoxMCwgZGlzcGxheTogXCdibG9ja1wnfSIgbmctY2xpY2s9ImNsb3NlKCRldmVudCkiPlxuICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgbmctY2xhc3M9IntcJ21vZGFsLXNtXCc6IHNpemUgPT0gXCdzbVwnLCBcJ21vZGFsLWxnXCc6IHNpemUgPT0gXCdsZ1wnfSI+PGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCIgbmctdHJhbnNjbHVkZT48L2Rpdj48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsJzx1bCBjbGFzcz0icGFnZXIiPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpLCBwcmV2aW91czogYWxpZ259Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgLSAxKSI+e3tnZXRUZXh0KFwncHJldmlvdXNcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCksIG5leHQ6IGFsaWdufSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlICsgMSkiPnt7Z2V0VGV4dChcJ25leHRcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIiwnPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKDEpIj57e2dldFRleHQoXCdmaXJzdFwnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iZGlyZWN0aW9uTGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSAtIDEpIj57e2dldFRleHQoXCdwcmV2aW91c1wnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1yZXBlYXQ9InBhZ2UgaW4gcGFnZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogcGFnZS5hY3RpdmV9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UubnVtYmVyKSI+e3twYWdlLnRleHR9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImRpcmVjdGlvbkxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSArIDEpIj57e2dldFRleHQoXCduZXh0XCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UodG90YWxQYWdlcykiPnt7Z2V0VGV4dChcJ2xhc3RcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwnPGRpdiBjbGFzcz0idG9vbHRpcCB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciIgYmluZC1odG1sLXVuc2FmZT0iY29udGVudCI+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCc8ZGl2IGNsYXNzPSJ0b29sdGlwIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIiBuZy1iaW5kPSJjb250ZW50Ij48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsJzxkaXYgY2xhc3M9InBvcG92ZXIge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPlxuICAgICAgPGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIiBuZy1iaW5kPSJ0aXRsZSIgbmctc2hvdz0idGl0bGUiPjwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiIG5nLWJpbmQ9ImNvbnRlbnQiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgbmctY2xhc3M9InR5cGUgJiYgXCdwcm9ncmVzcy1iYXItXCcgKyB0eXBlIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e21heH19IiBuZy1zdHlsZT0ie3dpZHRoOiBwZXJjZW50ICsgXCclXCd9IiBhcmlhLXZhbHVldGV4dD0ie3twZXJjZW50IHwgbnVtYmVyOjB9fSUiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcyIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzIj5cbiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBuZy1jbGFzcz0idHlwZSAmJiBcJ3Byb2dyZXNzLWJhci1cJyArIHR5cGUiIHJvbGU9InByb2dyZXNzYmFyIiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7bWF4fX0iIG5nLXN0eWxlPSJ7d2lkdGg6IHBlcmNlbnQgKyBcJyVcJ30iIGFyaWEtdmFsdWV0ZXh0PSJ7e3BlcmNlbnQgfCBudW1iZXI6MH19JSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsJzxzcGFuIG5nLW1vdXNlbGVhdmU9InJlc2V0KCkiIG5nLWtleWRvd249Im9uS2V5ZG93bigkZXZlbnQpIiB0YWJpbmRleD0iMCIgcm9sZT0ic2xpZGVyIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e3JhbmdlLmxlbmd0aH19IiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iPlxuICAgIDxpIG5nLXJlcGVhdD0iciBpbiByYW5nZSB0cmFjayBieSAkaW5kZXgiIG5nLW1vdXNlZW50ZXI9ImVudGVyKCRpbmRleCArIDEpIiBuZy1jbGljaz0icmF0ZSgkaW5kZXggKyAxKSIgY2xhc3M9ImdseXBoaWNvbiIgbmctY2xhc3M9IiRpbmRleCA8IHZhbHVlICYmIChyLnN0YXRlT24gfHwgXCdnbHlwaGljb24tc3RhclwnKSB8fCAoci5zdGF0ZU9mZiB8fCBcJ2dseXBoaWNvbi1zdGFyLWVtcHR5XCcpIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPih7eyAkaW5kZXggPCB2YWx1ZSA/IFwnKlwnIDogXCcgXCcgfX0pPC9zcGFuPlxuICAgIDwvaT5cbjwvc3Bhbj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsJzxsaSBuZy1jbGFzcz0ie2FjdGl2ZTogYWN0aXZlLCBkaXNhYmxlZDogZGlzYWJsZWR9Ij5cbiAgPGEgbmctY2xpY2s9InNlbGVjdCgpIiB0YWItaGVhZGluZy10cmFuc2NsdWRlPnt7aGVhZGluZ319PC9hPlxuPC9saT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC10aXRsZXMuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWJzZXQtdGl0bGVzLmh0bWwiLCI8dWwgY2xhc3M9XCJuYXYge3t0eXBlICYmICduYXYtJyArIHR5cGV9fVwiIG5nLWNsYXNzPVwieyduYXYtc3RhY2tlZCc6IHZlcnRpY2FsfVwiPlxuPC91bD5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIiwnXG48ZGl2PlxuICA8dWwgY2xhc3M9Im5hdiBuYXYte3t0eXBlIHx8IFwndGFic1wnfX0iIG5nLWNsYXNzPSJ7XCduYXYtc3RhY2tlZFwnOiB2ZXJ0aWNhbCwgXCduYXYtanVzdGlmaWVkXCc6IGp1c3RpZmllZH0iIG5nLXRyYW5zY2x1ZGU+PC91bD5cbiAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPlxuICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIiBcbiAgICAgICAgIG5nLXJlcGVhdD0idGFiIGluIHRhYnMiIFxuICAgICAgICAgbmctY2xhc3M9InthY3RpdmU6IHRhYi5hY3RpdmV9IlxuICAgICAgICAgdGFiLWNvbnRlbnQtdHJhbnNjbHVkZT0idGFiIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLCc8dGFibGU+XG4JPHRib2R5PlxuCQk8dHIgY2xhc3M9InRleHQtY2VudGVyIj5cbgkJCTx0ZD48YSBuZy1jbGljaz0iaW5jcmVtZW50SG91cnMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImluY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PC90ZD5cbgkJPC90cj5cbgkJPHRyPlxuCQkJPHRkIHN0eWxlPSJ3aWR0aDo1MHB4OyIgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWNsYXNzPSJ7XCdoYXMtZXJyb3JcJzogaW52YWxpZEhvdXJzfSI+XG4JCQkJPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJob3VycyIgbmctY2hhbmdlPSJ1cGRhdGVIb3VycygpIiBjbGFzcz0iZm9ybS1jb250cm9sIHRleHQtY2VudGVyIiBuZy1tb3VzZXdoZWVsPSJpbmNyZW1lbnRIb3VycygpIiBuZy1yZWFkb25seT0icmVhZG9ubHlJbnB1dCIgbWF4bGVuZ3RoPSIyIj5cbgkJCTwvdGQ+XG4JCQk8dGQ+OjwvdGQ+XG4JCQk8dGQgc3R5bGU9IndpZHRoOjUwcHg7IiBjbGFzcz0iZm9ybS1ncm91cCIgbmctY2xhc3M9IntcJ2hhcy1lcnJvclwnOiBpbnZhbGlkTWludXRlc30iPlxuCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibWludXRlcyIgbmctY2hhbmdlPSJ1cGRhdGVNaW51dGVzKCkiIGNsYXNzPSJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIiIG5nLXJlYWRvbmx5PSJyZWFkb25seUlucHV0IiBtYXhsZW5ndGg9IjIiPlxuCQkJPC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHRleHQtY2VudGVyIiBuZy1jbGljaz0idG9nZ2xlTWVyaWRpYW4oKSI+e3ttZXJpZGlhbn19PC9idXR0b24+PC90ZD5cbgkJPC90cj5cbgkJPHRyIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudEhvdXJzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93biI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48L3RkPlxuCQk8L3RyPlxuCTwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwnPGEgdGFiaW5kZXg9Ii0xIiBiaW5kLWh0bWwtdW5zYWZlPSJtYXRjaC5sYWJlbCB8IHR5cGVhaGVhZEhpZ2hsaWdodDpxdWVyeSI+PC9hPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSIgbmctaWY9ImlzT3BlbigpIiBuZy1zdHlsZT0ie3RvcDogcG9zaXRpb24udG9wK1wncHhcJywgbGVmdDogcG9zaXRpb24ubGVmdCtcJ3B4XCd9IiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IiByb2xlPSJsaXN0Ym94IiBhcmlhLWhpZGRlbj0ie3shaXNPcGVuKCl9fSI+XG4gICAgPGxpIG5nLXJlcGVhdD0ibWF0Y2ggaW4gbWF0Y2hlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZSgkaW5kZXgpIH0iIG5nLW1vdXNlZW50ZXI9InNlbGVjdEFjdGl2ZSgkaW5kZXgpIiBuZy1jbGljaz0ic2VsZWN0TWF0Y2goJGluZGV4KSIgcm9sZT0ib3B0aW9uIiBpZD0ie3ttYXRjaC5pZH19Ij5cbiAgICAgICAgPGRpdiB0eXBlYWhlYWQtbWF0Y2ggaW5kZXg9IiRpbmRleCIgbWF0Y2g9Im1hdGNoIiBxdWVyeT0icXVlcnkiIHRlbXBsYXRlLXVybD0idGVtcGxhdGVVcmwiPjwvZGl2PlxuICAgIDwvbGk+XG48L3VsPicpCit9XSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAubWluLmpzIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3N0YXRpYy9qcy91aS1ib290c3RyYXAtdHBscy0wLjExLjAubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmE4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvc3RhdGljL2pzL3VpLWJvb3RzdHJhcC10cGxzLTAuMTEuMC5taW4uanMKQEAgLTAsMCArMSwxMCBAQAorLyoKKyAqIGFuZ3VsYXItdWktYm9vdHN0cmFwCisgKiBodHRwOi8vYW5ndWxhci11aS5naXRodWIuaW8vYm9vdHN0cmFwLworCisgKiBWZXJzaW9uOiAwLjExLjAgLSAyMDE0LTA1LTAxCisgKiBMaWNlbnNlOiBNSVQKKyAqLworYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcCIsWyJ1aS5ib290c3RyYXAudHBscyIsInVpLmJvb3RzdHJhcC50cmFuc2l0aW9uIiwidWkuYm9vdHN0cmFwLmNvbGxhcHNlIiwidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsInVpLmJvb3RzdHJhcC5hbGVydCIsInVpLmJvb3RzdHJhcC5iaW5kSHRtbCIsInVpLmJvb3RzdHJhcC5idXR0b25zIiwidWkuYm9vdHN0cmFwLmNhcm91c2VsIiwidWkuYm9vdHN0cmFwLmRhdGVwYXJzZXIiLCJ1aS5ib290c3RyYXAucG9zaXRpb24iLCJ1aS5ib290c3RyYXAuZGF0ZXBpY2tlciIsInVpLmJvb3RzdHJhcC5kcm9wZG93biIsInVpLmJvb3RzdHJhcC5tb2RhbCIsInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIiwidWkuYm9vdHN0cmFwLnRvb2x0aXAiLCJ1aS5ib290c3RyYXAucG9wb3ZlciIsInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsInVpLmJvb3RzdHJhcC5yYXRpbmciLCJ1aS5ib290c3RyYXAudGFicyIsInVpLmJvb3RzdHJhcC50aW1lcGlja2VyIiwidWkuYm9vdHN0cmFwLnR5cGVhaGVhZCJdKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRwbHMiLFsidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIiwidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsInRlbXBsYXRlL2Nhcm91c2VsL2Nhcm91c2VsLmh0bWwiLCJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RheS5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9tb250aC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2luYXRpb24uaHRtbCIsInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIiwidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCIsInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLCJ0ZW1wbGF0ZS90YWJzL3RhYi5odG1sIiwidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsInRlbXBsYXRlL3RpbWVwaWNrZXIvdGltZXBpY2tlci5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1wb3B1cC5odG1sIl0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiIsW10pLmZhY3RvcnkoIiR0cmFuc2l0aW9uIixbIiRxIiwiJHRpbWVvdXQiLCIkcm9vdFNjb3BlIixmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtmb3IodmFyIGIgaW4gYSlpZih2b2lkIDAhPT1mLnN0eWxlW2JdKXJldHVybiBhW2JdfXZhciBlPWZ1bmN0aW9uKGQsZixnKXtnPWd8fHt9O3ZhciBoPWEuZGVmZXIoKSxpPWVbZy5hbmltYXRpb24/ImFuaW1hdGlvbkVuZEV2ZW50TmFtZSI6InRyYW5zaXRpb25FbmRFdmVudE5hbWUiXSxqPWZ1bmN0aW9uKCl7Yy4kYXBwbHkoZnVuY3Rpb24oKXtkLnVuYmluZChpLGopLGgucmVzb2x2ZShkKX0pfTtyZXR1cm4gaSYmZC5iaW5kKGksaiksYihmdW5jdGlvbigpe2FuZ3VsYXIuaXNTdHJpbmcoZik/ZC5hZGRDbGFzcyhmKTphbmd1bGFyLmlzRnVuY3Rpb24oZik/ZihkKTphbmd1bGFyLmlzT2JqZWN0KGYpJiZkLmNzcyhmKSxpfHxoLnJlc29sdmUoZCl9KSxoLnByb21pc2UuY2FuY2VsPWZ1bmN0aW9uKCl7aSYmZC51bmJpbmQoaSxqKSxoLnJlamVjdCgiVHJhbnNpdGlvbiBjYW5jZWxsZWQiKX0saC5wcm9taXNlfSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyYW5zIiksZz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn0saD17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0QW5pbWF0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJhbmltYXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvQW5pbWF0aW9uRW5kIix0cmFuc2l0aW9uOiJhbmltYXRpb25lbmQifTtyZXR1cm4gZS50cmFuc2l0aW9uRW5kRXZlbnROYW1lPWQoZyksZS5hbmltYXRpb25FbmRFdmVudE5hbWU9ZChoKSxlfV0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuY29sbGFwc2UiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZGlyZWN0aXZlKCJjb2xsYXBzZSIsWyIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSl7cmV0dXJue2xpbms6ZnVuY3Rpb24oYixjLGQpe2Z1bmN0aW9uIGUoYil7ZnVuY3Rpb24gZCgpe2o9PT1lJiYoaj12b2lkIDApfXZhciBlPWEoYyxiKTtyZXR1cm4gaiYmai5jYW5jZWwoKSxqPWUsZS50aGVuKGQsZCksZX1mdW5jdGlvbiBmKCl7az8oaz0hMSxnKCkpOihjLnJlbW92ZUNsYXNzKCJjb2xsYXBzZSIpLmFkZENsYXNzKCJjb2xsYXBzaW5nIiksZSh7aGVpZ2h0OmNbMF0uc2Nyb2xsSGVpZ2h0KyJweCJ9KS50aGVuKGcpKX1mdW5jdGlvbiBnKCl7Yy5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLGMuYWRkQ2xhc3MoImNvbGxhcHNlIGluIiksYy5jc3Moe2hlaWdodDoiYXV0byJ9KX1mdW5jdGlvbiBoKCl7aWYoaylrPSExLGkoKSxjLmNzcyh7aGVpZ2h0OjB9KTtlbHNle2MuY3NzKHtoZWlnaHQ6Y1swXS5zY3JvbGxIZWlnaHQrInB4In0pO3tjWzBdLm9mZnNldFdpZHRofWMucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKSxlKHtoZWlnaHQ6MH0pLnRoZW4oaSl9fWZ1bmN0aW9uIGkoKXtjLnJlbW92ZUNsYXNzKCJjb2xsYXBzaW5nIiksYy5hZGRDbGFzcygiY29sbGFwc2UiKX12YXIgaixrPSEwO2IuJHdhdGNoKGQuY29sbGFwc2UsZnVuY3Rpb24oYSl7YT9oKCk6ZigpfSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFjY29yZGlvbiIsWyJ1aS5ib290c3RyYXAuY29sbGFwc2UiXSkuY29uc3RhbnQoImFjY29yZGlvbkNvbmZpZyIse2Nsb3NlT3RoZXJzOiEwfSkuY29udHJvbGxlcigiQWNjb3JkaW9uQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJhY2NvcmRpb25Db25maWciLGZ1bmN0aW9uKGEsYixjKXt0aGlzLmdyb3Vwcz1bXSx0aGlzLmNsb3NlT3RoZXJzPWZ1bmN0aW9uKGQpe3ZhciBlPWFuZ3VsYXIuaXNEZWZpbmVkKGIuY2xvc2VPdGhlcnMpP2EuJGV2YWwoYi5jbG9zZU90aGVycyk6Yy5jbG9zZU90aGVycztlJiZhbmd1bGFyLmZvckVhY2godGhpcy5ncm91cHMsZnVuY3Rpb24oYSl7YSE9PWQmJihhLmlzT3Blbj0hMSl9KX0sdGhpcy5hZGRHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3RoaXMuZ3JvdXBzLnB1c2goYSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IucmVtb3ZlR3JvdXAoYSl9KX0sdGhpcy5yZW1vdmVHcm91cD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdyb3Vwcy5pbmRleE9mKGEpOy0xIT09YiYmdGhpcy5ncm91cHMuc3BsaWNlKGIsMSl9fV0pLmRpcmVjdGl2ZSgiYWNjb3JkaW9uIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFjY29yZGlvbkNvbnRyb2xsZXIiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIn19KS5kaXJlY3RpdmUoImFjY29yZGlvbkdyb3VwIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeYWNjb3JkaW9uIixyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIixzY29wZTp7aGVhZGluZzoiQCIsaXNPcGVuOiI9PyIsaXNEaXNhYmxlZDoiPT8ifSxjb250cm9sbGVyOmZ1bmN0aW9uKCl7dGhpcy5zZXRIZWFkaW5nPWZ1bmN0aW9uKGEpe3RoaXMuaGVhZGluZz1hfX0sbGluazpmdW5jdGlvbihhLGIsYyxkKXtkLmFkZEdyb3VwKGEpLGEuJHdhdGNoKCJpc09wZW4iLGZ1bmN0aW9uKGIpe2ImJmQuY2xvc2VPdGhlcnMoYSl9KSxhLnRvZ2dsZU9wZW49ZnVuY3Rpb24oKXthLmlzRGlzYWJsZWR8fChhLmlzT3Blbj0hYS5pc09wZW4pfX19fSkuZGlyZWN0aXZlKCJhY2NvcmRpb25IZWFkaW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGU6IiIscmVwbGFjZTohMCxyZXF1aXJlOiJeYWNjb3JkaW9uR3JvdXAiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCxlKXtkLnNldEhlYWRpbmcoZShhLGZ1bmN0aW9uKCl7fSkpfX19KS5kaXJlY3RpdmUoImFjY29yZGlvblRyYW5zY2x1ZGUiLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6Il5hY2NvcmRpb25Hcm91cCIsbGluazpmdW5jdGlvbihhLGIsYyxkKXthLiR3YXRjaChmdW5jdGlvbigpe3JldHVybiBkW2MuYWNjb3JkaW9uVHJhbnNjbHVkZV19LGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmFsZXJ0IixbXSkuY29udHJvbGxlcigiQWxlcnRDb250cm9sbGVyIixbIiRzY29wZSIsIiRhdHRycyIsZnVuY3Rpb24oYSxiKXthLmNsb3NlYWJsZT0iY2xvc2UiaW4gYn1dKS5kaXJlY3RpdmUoImFsZXJ0IixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLGNvbnRyb2xsZXI6IkFsZXJ0Q29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2FsZXJ0L2FsZXJ0Lmh0bWwiLHRyYW5zY2x1ZGU6ITAscmVwbGFjZTohMCxzY29wZTp7dHlwZToiQCIsY2xvc2U6IiYifX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLmJpbmRIdG1sIixbXSkuZGlyZWN0aXZlKCJiaW5kSHRtbFVuc2FmZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYSxiLGMpe2IuYWRkQ2xhc3MoIm5nLWJpbmRpbmciKS5kYXRhKCIkYmluZGluZyIsYy5iaW5kSHRtbFVuc2FmZSksYS4kd2F0Y2goYy5iaW5kSHRtbFVuc2FmZSxmdW5jdGlvbihhKXtiLmh0bWwoYXx8IiIpfSl9fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5idXR0b25zIixbXSkuY29uc3RhbnQoImJ1dHRvbkNvbmZpZyIse2FjdGl2ZUNsYXNzOiJhY3RpdmUiLHRvZ2dsZUV2ZW50OiJjbGljayJ9KS5jb250cm9sbGVyKCJCdXR0b25zQ29udHJvbGxlciIsWyJidXR0b25Db25maWciLGZ1bmN0aW9uKGEpe3RoaXMuYWN0aXZlQ2xhc3M9YS5hY3RpdmVDbGFzc3x8ImFjdGl2ZSIsdGhpcy50b2dnbGVFdmVudD1hLnRvZ2dsZUV2ZW50fHwiY2xpY2sifV0pLmRpcmVjdGl2ZSgiYnRuUmFkaW8iLGZ1bmN0aW9uKCl7cmV0dXJue3JlcXVpcmU6WyJidG5SYWRpbyIsIm5nTW9kZWwiXSxjb250cm9sbGVyOiJCdXR0b25zQ29udHJvbGxlciIsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGUuYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoZi4kbW9kZWxWYWx1ZSxhLiRldmFsKGMuYnRuUmFkaW8pKSl9LGIuYmluZChlLnRvZ2dsZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIGQ9Yi5oYXNDbGFzcyhlLmFjdGl2ZUNsYXNzKTsoIWR8fGFuZ3VsYXIuaXNEZWZpbmVkKGMudW5jaGVja2FibGUpKSYmYS4kYXBwbHkoZnVuY3Rpb24oKXtmLiRzZXRWaWV3VmFsdWUoZD9udWxsOmEuJGV2YWwoYy5idG5SYWRpbykpLGYuJHJlbmRlcigpfSl9KX19fSkuZGlyZWN0aXZlKCJidG5DaGVja2JveCIsZnVuY3Rpb24oKXtyZXR1cm57cmVxdWlyZTpbImJ0bkNoZWNrYm94IiwibmdNb2RlbCJdLGNvbnRyb2xsZXI6IkJ1dHRvbnNDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gZyhjLmJ0bkNoZWNrYm94VHJ1ZSwhMCl9ZnVuY3Rpb24gZigpe3JldHVybiBnKGMuYnRuQ2hlY2tib3hGYWxzZSwhMSl9ZnVuY3Rpb24gZyhiLGMpe3ZhciBkPWEuJGV2YWwoYik7cmV0dXJuIGFuZ3VsYXIuaXNEZWZpbmVkKGQpP2Q6Y312YXIgaD1kWzBdLGk9ZFsxXTtpLiRyZW5kZXI9ZnVuY3Rpb24oKXtiLnRvZ2dsZUNsYXNzKGguYWN0aXZlQ2xhc3MsYW5ndWxhci5lcXVhbHMoaS4kbW9kZWxWYWx1ZSxlKCkpKX0sYi5iaW5kKGgudG9nZ2xlRXZlbnQsZnVuY3Rpb24oKXthLiRhcHBseShmdW5jdGlvbigpe2kuJHNldFZpZXdWYWx1ZShiLmhhc0NsYXNzKGguYWN0aXZlQ2xhc3MpP2YoKTplKCkpLGkuJHJlbmRlcigpfSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5jYXJvdXNlbCIsWyJ1aS5ib290c3RyYXAudHJhbnNpdGlvbiJdKS5jb250cm9sbGVyKCJDYXJvdXNlbENvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJHRpbWVvdXQiLCIkdHJhbnNpdGlvbiIsZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXtlKCk7dmFyIGM9K2EuaW50ZXJ2YWw7IWlzTmFOKGMpJiZjPj0wJiYoZz1iKGYsYykpfWZ1bmN0aW9uIGUoKXtnJiYoYi5jYW5jZWwoZyksZz1udWxsKX1mdW5jdGlvbiBmKCl7aD8oYS5uZXh0KCksZCgpKTphLnBhdXNlKCl9dmFyIGcsaCxpPXRoaXMsaj1pLnNsaWRlcz1hLnNsaWRlcz1bXSxrPS0xO2kuY3VycmVudFNsaWRlPW51bGw7dmFyIGw9ITE7aS5zZWxlY3Q9YS5zZWxlY3Q9ZnVuY3Rpb24oZSxmKXtmdW5jdGlvbiBnKCl7aWYoIWwpe2lmKGkuY3VycmVudFNsaWRlJiZhbmd1bGFyLmlzU3RyaW5nKGYpJiYhYS5ub1RyYW5zaXRpb24mJmUuJGVsZW1lbnQpe2UuJGVsZW1lbnQuYWRkQ2xhc3MoZik7e2UuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGh9YW5ndWxhci5mb3JFYWNoKGosZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoYSx7ZGlyZWN0aW9uOiIiLGVudGVyaW5nOiExLGxlYXZpbmc6ITEsYWN0aXZlOiExfSl9KSxhbmd1bGFyLmV4dGVuZChlLHtkaXJlY3Rpb246ZixhY3RpdmU6ITAsZW50ZXJpbmc6ITB9KSxhbmd1bGFyLmV4dGVuZChpLmN1cnJlbnRTbGlkZXx8e30se2RpcmVjdGlvbjpmLGxlYXZpbmc6ITB9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1jKGUuJGVsZW1lbnQse30pLGZ1bmN0aW9uKGIsYyl7YS4kY3VycmVudFRyYW5zaXRpb24udGhlbihmdW5jdGlvbigpe2goYixjKX0sZnVuY3Rpb24oKXtoKGIsYyl9KX0oZSxpLmN1cnJlbnRTbGlkZSl9ZWxzZSBoKGUsaS5jdXJyZW50U2xpZGUpO2kuY3VycmVudFNsaWRlPWUsaz1tLGQoKX19ZnVuY3Rpb24gaChiLGMpe2FuZ3VsYXIuZXh0ZW5kKGIse2RpcmVjdGlvbjoiIixhY3RpdmU6ITAsbGVhdmluZzohMSxlbnRlcmluZzohMX0pLGFuZ3VsYXIuZXh0ZW5kKGN8fHt9LHtkaXJlY3Rpb246IiIsYWN0aXZlOiExLGxlYXZpbmc6ITEsZW50ZXJpbmc6ITF9KSxhLiRjdXJyZW50VHJhbnNpdGlvbj1udWxsfXZhciBtPWouaW5kZXhPZihlKTt2b2lkIDA9PT1mJiYoZj1tPms/Im5leHQiOiJwcmV2IiksZSYmZSE9PWkuY3VycmVudFNsaWRlJiYoYS4kY3VycmVudFRyYW5zaXRpb24/KGEuJGN1cnJlbnRUcmFuc2l0aW9uLmNhbmNlbCgpLGIoZykpOmcoKSl9LGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtsPSEwfSksaS5pbmRleE9mU2xpZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGouaW5kZXhPZihhKX0sYS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGI9KGsrMSklai5sZW5ndGg7cmV0dXJuIGEuJGN1cnJlbnRUcmFuc2l0aW9uP3ZvaWQgMDppLnNlbGVjdChqW2JdLCJuZXh0Iil9LGEucHJldj1mdW5jdGlvbigpe3ZhciBiPTA+ay0xP2oubGVuZ3RoLTE6ay0xO3JldHVybiBhLiRjdXJyZW50VHJhbnNpdGlvbj92b2lkIDA6aS5zZWxlY3QoaltiXSwicHJldiIpfSxhLmlzQWN0aXZlPWZ1bmN0aW9uKGEpe3JldHVybiBpLmN1cnJlbnRTbGlkZT09PWF9LGEuJHdhdGNoKCJpbnRlcnZhbCIsZCksYS4kb24oIiRkZXN0cm95IixlKSxhLnBsYXk9ZnVuY3Rpb24oKXtofHwoaD0hMCxkKCkpfSxhLnBhdXNlPWZ1bmN0aW9uKCl7YS5ub1BhdXNlfHwoaD0hMSxlKCkpfSxpLmFkZFNsaWRlPWZ1bmN0aW9uKGIsYyl7Yi4kZWxlbWVudD1jLGoucHVzaChiKSwxPT09ai5sZW5ndGh8fGIuYWN0aXZlPyhpLnNlbGVjdChqW2oubGVuZ3RoLTFdKSwxPT1qLmxlbmd0aCYmYS5wbGF5KCkpOmIuYWN0aXZlPSExfSxpLnJlbW92ZVNsaWRlPWZ1bmN0aW9uKGEpe3ZhciBiPWouaW5kZXhPZihhKTtqLnNwbGljZShiLDEpLGoubGVuZ3RoPjAmJmEuYWN0aXZlP2kuc2VsZWN0KGI+PWoubGVuZ3RoP2pbYi0xXTpqW2JdKTprPmImJmstLX19XSkuZGlyZWN0aXZlKCJjYXJvdXNlbCIsW2Z1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLGNvbnRyb2xsZXI6IkNhcm91c2VsQ29udHJvbGxlciIscmVxdWlyZToiY2Fyb3VzZWwiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9jYXJvdXNlbC5odG1sIixzY29wZTp7aW50ZXJ2YWw6Ij0iLG5vVHJhbnNpdGlvbjoiPSIsbm9QYXVzZToiPSJ9fX1dKS5kaXJlY3RpdmUoInNsaWRlIixmdW5jdGlvbigpe3JldHVybntyZXF1aXJlOiJeY2Fyb3VzZWwiLHJlc3RyaWN0OiJFQSIsdHJhbnNjbHVkZTohMCxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9jYXJvdXNlbC9zbGlkZS5odG1sIixzY29wZTp7YWN0aXZlOiI9PyJ9LGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRTbGlkZShhLGIpLGEuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXtkLnJlbW92ZVNsaWRlKGEpfSksYS4kd2F0Y2goImFjdGl2ZSIsZnVuY3Rpb24oYil7YiYmZC5zZWxlY3QoYSl9KX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIixbXSkuc2VydmljZSgiZGF0ZVBhcnNlciIsWyIkbG9jYWxlIiwib3JkZXJCeUZpbHRlciIsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYixjKXtyZXR1cm4gMT09PWImJmM+Mjg/Mjk9PT1jJiYoYSU0PT09MCYmYSUxMDAhPT0wfHxhJTQwMD09PTApOjM9PT1ifHw1PT09Ynx8OD09PWJ8fDEwPT09Yj8zMT5jOiEwfXRoaXMucGFyc2Vycz17fTt2YXIgZD17eXl5eTp7cmVnZXg6IlxcZHs0fSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy55ZWFyPSthfX0seXk6e3JlZ2V4OiJcXGR7Mn0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYSsyZTN9fSx5OntyZWdleDoiXFxkezEsNH0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMueWVhcj0rYX19LE1NTU06e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5NT05USC5qb2luKCJ8IiksYXBwbHk6ZnVuY3Rpb24oYil7dGhpcy5tb250aD1hLkRBVEVUSU1FX0ZPUk1BVFMuTU9OVEguaW5kZXhPZihiKX19LE1NTTp7cmVnZXg6YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguam9pbigifCIpLGFwcGx5OmZ1bmN0aW9uKGIpe3RoaXMubW9udGg9YS5EQVRFVElNRV9GT1JNQVRTLlNIT1JUTU9OVEguaW5kZXhPZihiKX19LE1NOntyZWdleDoiMFsxLTldfDFbMC0yXSIsYXBwbHk6ZnVuY3Rpb24oYSl7dGhpcy5tb250aD1hLTF9fSxNOntyZWdleDoiWzEtOV18MVswLTJdIixhcHBseTpmdW5jdGlvbihhKXt0aGlzLm1vbnRoPWEtMX19LGRkOntyZWdleDoiWzAtMl1bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LGQ6e3JlZ2V4OiJbMS0yXT9bMC05XXsxfXwzWzAtMV17MX0iLGFwcGx5OmZ1bmN0aW9uKGEpe3RoaXMuZGF0ZT0rYX19LEVFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5EQVkuam9pbigifCIpfSxFRUU6e3JlZ2V4OmEuREFURVRJTUVfRk9STUFUUy5TSE9SVERBWS5qb2luKCJ8Iil9fTt0aGlzLmNyZWF0ZVBhcnNlcj1mdW5jdGlvbihhKXt2YXIgYz1bXSxlPWEuc3BsaXQoIiIpO3JldHVybiBhbmd1bGFyLmZvckVhY2goZCxmdW5jdGlvbihiLGQpe3ZhciBmPWEuaW5kZXhPZihkKTtpZihmPi0xKXthPWEuc3BsaXQoIiIpLGVbZl09IigiK2IucmVnZXgrIikiLGFbZl09IiQiO2Zvcih2YXIgZz1mKzEsaD1mK2QubGVuZ3RoO2g+ZztnKyspZVtnXT0iIixhW2ddPSIkIjthPWEuam9pbigiIiksYy5wdXNoKHtpbmRleDpmLGFwcGx5OmIuYXBwbHl9KX19KSx7cmVnZXg6bmV3IFJlZ0V4cCgiXiIrZS5qb2luKCIiKSsiJCIpLG1hcDpiKGMsImluZGV4Iil9fSx0aGlzLnBhcnNlPWZ1bmN0aW9uKGIsZCl7aWYoIWFuZ3VsYXIuaXNTdHJpbmcoYikpcmV0dXJuIGI7ZD1hLkRBVEVUSU1FX0ZPUk1BVFNbZF18fGQsdGhpcy5wYXJzZXJzW2RdfHwodGhpcy5wYXJzZXJzW2RdPXRoaXMuY3JlYXRlUGFyc2VyKGQpKTt2YXIgZT10aGlzLnBhcnNlcnNbZF0sZj1lLnJlZ2V4LGc9ZS5tYXAsaD1iLm1hdGNoKGYpO2lmKGgmJmgubGVuZ3RoKXtmb3IodmFyIGksaj17eWVhcjoxOTAwLG1vbnRoOjAsZGF0ZToxLGhvdXJzOjB9LGs9MSxsPWgubGVuZ3RoO2w+aztrKyspe3ZhciBtPWdbay0xXTttLmFwcGx5JiZtLmFwcGx5LmNhbGwoaixoW2tdKX1yZXR1cm4gYyhqLnllYXIsai5tb250aCxqLmRhdGUpJiYoaT1uZXcgRGF0ZShqLnllYXIsai5tb250aCxqLmRhdGUsai5ob3VycykpLGl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnBvc2l0aW9uIixbXSkuZmFjdG9yeSgiJHBvc2l0aW9uIixbIiRkb2N1bWVudCIsIiR3aW5kb3ciLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGMpe3JldHVybiBhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZVtjXTpiLmdldENvbXB1dGVkU3R5bGU/Yi5nZXRDb21wdXRlZFN0eWxlKGEpW2NdOmEuc3R5bGVbY119ZnVuY3Rpb24gZChhKXtyZXR1cm4ic3RhdGljIj09PShjKGEsInBvc2l0aW9uIil8fCJzdGF0aWMiKX12YXIgZT1mdW5jdGlvbihiKXtmb3IodmFyIGM9YVswXSxlPWIub2Zmc2V0UGFyZW50fHxjO2UmJmUhPT1jJiZkKGUpOyllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxjfTtyZXR1cm57cG9zaXRpb246ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5vZmZzZXQoYiksZD17dG9wOjAsbGVmdDowfSxmPWUoYlswXSk7ZiE9YVswXSYmKGQ9dGhpcy5vZmZzZXQoYW5ndWxhci5lbGVtZW50KGYpKSxkLnRvcCs9Zi5jbGllbnRUb3AtZi5zY3JvbGxUb3AsZC5sZWZ0Kz1mLmNsaWVudExlZnQtZi5zY3JvbGxMZWZ0KTt2YXIgZz1iWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt3aWR0aDpnLndpZHRofHxiLnByb3AoIm9mZnNldFdpZHRoIiksaGVpZ2h0OmcuaGVpZ2h0fHxiLnByb3AoIm9mZnNldEhlaWdodCIpLHRvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXQ6ZnVuY3Rpb24oYyl7dmFyIGQ9Y1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57d2lkdGg6ZC53aWR0aHx8Yy5wcm9wKCJvZmZzZXRXaWR0aCIpLGhlaWdodDpkLmhlaWdodHx8Yy5wcm9wKCJvZmZzZXRIZWlnaHQiKSx0b3A6ZC50b3ArKGIucGFnZVlPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCksbGVmdDpkLmxlZnQrKGIucGFnZVhPZmZzZXR8fGFbMF0uZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpfX0scG9zaXRpb25FbGVtZW50czpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpPWMuc3BsaXQoIi0iKSxqPWlbMF0saz1pWzFdfHwiY2VudGVyIjtlPWQ/dGhpcy5vZmZzZXQoYSk6dGhpcy5wb3NpdGlvbihhKSxmPWIucHJvcCgib2Zmc2V0V2lkdGgiKSxnPWIucHJvcCgib2Zmc2V0SGVpZ2h0Iik7dmFyIGw9e2NlbnRlcjpmdW5jdGlvbigpe3JldHVybiBlLmxlZnQrZS53aWR0aC8yLWYvMn0sbGVmdDpmdW5jdGlvbigpe3JldHVybiBlLmxlZnR9LHJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVmdCtlLndpZHRofX0sbT17Y2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9wK2UuaGVpZ2h0LzItZy8yfSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZS50b3B9LGJvdHRvbTpmdW5jdGlvbigpe3JldHVybiBlLnRvcCtlLmhlaWdodH19O3N3aXRjaChqKXtjYXNlInJpZ2h0IjpoPXt0b3A6bVtrXSgpLGxlZnQ6bFtqXSgpfTticmVhaztjYXNlImxlZnQiOmg9e3RvcDptW2tdKCksbGVmdDplLmxlZnQtZn07YnJlYWs7Y2FzZSJib3R0b20iOmg9e3RvcDptW2pdKCksbGVmdDpsW2tdKCl9O2JyZWFrO2RlZmF1bHQ6aD17dG9wOmUudG9wLWcsbGVmdDpsW2tdKCl9fXJldHVybiBofX19XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5kYXRlcGlja2VyIixbInVpLmJvb3RzdHJhcC5kYXRlcGFyc2VyIiwidWkuYm9vdHN0cmFwLnBvc2l0aW9uIl0pLmNvbnN0YW50KCJkYXRlcGlja2VyQ29uZmlnIix7Zm9ybWF0RGF5OiJkZCIsZm9ybWF0TW9udGg6Ik1NTU0iLGZvcm1hdFllYXI6Inl5eXkiLGZvcm1hdERheUhlYWRlcjoiRUVFIixmb3JtYXREYXlUaXRsZToiTU1NTSB5eXl5Iixmb3JtYXRNb250aFRpdGxlOiJ5eXl5IixkYXRlcGlja2VyTW9kZToiZGF5IixtaW5Nb2RlOiJkYXkiLG1heE1vZGU6InllYXIiLHNob3dXZWVrczohMCxzdGFydGluZ0RheTowLHllYXJSYW5nZToyMCxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsfSkuY29udHJvbGxlcigiRGF0ZXBpY2tlckNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIiwiJGludGVycG9sYXRlIiwiJHRpbWVvdXQiLCIkbG9nIiwiZGF0ZUZpbHRlciIsImRhdGVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaCl7dmFyIGk9dGhpcyxqPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH07dGhpcy5tb2Rlcz1bImRheSIsIm1vbnRoIiwieWVhciJdLGFuZ3VsYXIuZm9yRWFjaChbImZvcm1hdERheSIsImZvcm1hdE1vbnRoIiwiZm9ybWF0WWVhciIsImZvcm1hdERheUhlYWRlciIsImZvcm1hdERheVRpdGxlIiwiZm9ybWF0TW9udGhUaXRsZSIsIm1pbk1vZGUiLCJtYXhNb2RlIiwic2hvd1dlZWtzIiwic3RhcnRpbmdEYXkiLCJ5ZWFyUmFuZ2UiXSxmdW5jdGlvbihjLGUpe2lbY109YW5ndWxhci5pc0RlZmluZWQoYltjXSk/OD5lP2QoYltjXSkoYS4kcGFyZW50KTphLiRwYXJlbnQuJGV2YWwoYltjXSk6aFtjXX0pLGFuZ3VsYXIuZm9yRWFjaChbIm1pbkRhdGUiLCJtYXhEYXRlIl0sZnVuY3Rpb24oZCl7YltkXT9hLiRwYXJlbnQuJHdhdGNoKGMoYltkXSksZnVuY3Rpb24oYSl7aVtkXT1hP25ldyBEYXRlKGEpOm51bGwsaS5yZWZyZXNoVmlldygpfSk6aVtkXT1oW2RdP25ldyBEYXRlKGhbZF0pOm51bGx9KSxhLmRhdGVwaWNrZXJNb2RlPWEuZGF0ZXBpY2tlck1vZGV8fGguZGF0ZXBpY2tlck1vZGUsYS51bmlxdWVJZD0iZGF0ZXBpY2tlci0iK2EuJGlkKyItIitNYXRoLmZsb29yKDFlNCpNYXRoLnJhbmRvbSgpKSx0aGlzLmFjdGl2ZURhdGU9YW5ndWxhci5pc0RlZmluZWQoYi5pbml0RGF0ZSk/YS4kcGFyZW50LiRldmFsKGIuaW5pdERhdGUpOm5ldyBEYXRlLGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT1pLmNvbXBhcmUoYi5kYXRlLGkuYWN0aXZlRGF0ZSk/KGEuYWN0aXZlRGF0ZUlkPWIudWlkLCEwKTohMX0sdGhpcy5pbml0PWZ1bmN0aW9uKGEpe2o9YSxqLiRyZW5kZXI9ZnVuY3Rpb24oKXtpLnJlbmRlcigpfX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXtpZihqLiRtb2RlbFZhbHVlKXt2YXIgYT1uZXcgRGF0ZShqLiRtb2RlbFZhbHVlKSxiPSFpc05hTihhKTtiP3RoaXMuYWN0aXZlRGF0ZT1hOmYuZXJyb3IoJ0RhdGVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSxqLiRzZXRWYWxpZGl0eSgiZGF0ZSIsYil9dGhpcy5yZWZyZXNoVmlldygpfSx0aGlzLnJlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtZW50KXt0aGlzLl9yZWZyZXNoVmlldygpO3ZhciBhPWouJG1vZGVsVmFsdWU/bmV3IERhdGUoai4kbW9kZWxWYWx1ZSk6bnVsbDtqLiRzZXRWYWxpZGl0eSgiZGF0ZS1kaXNhYmxlZCIsIWF8fHRoaXMuZWxlbWVudCYmIXRoaXMuaXNEaXNhYmxlZChhKSl9fSx0aGlzLmNyZWF0ZURhdGVPYmplY3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm51bGw7cmV0dXJue2RhdGU6YSxsYWJlbDpnKGEsYiksc2VsZWN0ZWQ6YyYmMD09PXRoaXMuY29tcGFyZShhLGMpLGRpc2FibGVkOnRoaXMuaXNEaXNhYmxlZChhKSxjdXJyZW50OjA9PT10aGlzLmNvbXBhcmUoYSxuZXcgRGF0ZSl9fSx0aGlzLmlzRGlzYWJsZWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMubWluRGF0ZSYmdGhpcy5jb21wYXJlKGMsdGhpcy5taW5EYXRlKTwwfHx0aGlzLm1heERhdGUmJnRoaXMuY29tcGFyZShjLHRoaXMubWF4RGF0ZSk+MHx8Yi5kYXRlRGlzYWJsZWQmJmEuZGF0ZURpc2FibGVkKHtkYXRlOmMsbW9kZTphLmRhdGVwaWNrZXJNb2RlfSl9LHRoaXMuc3BsaXQ9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YS5sZW5ndGg+MDspYy5wdXNoKGEuc3BsaWNlKDAsYikpO3JldHVybiBjfSxhLnNlbGVjdD1mdW5jdGlvbihiKXtpZihhLmRhdGVwaWNrZXJNb2RlPT09aS5taW5Nb2RlKXt2YXIgYz1qLiRtb2RlbFZhbHVlP25ldyBEYXRlKGouJG1vZGVsVmFsdWUpOm5ldyBEYXRlKDAsMCwwLDAsMCwwLDApO2Muc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSksai4kc2V0Vmlld1ZhbHVlKGMpLGouJHJlbmRlcigpfWVsc2UgaS5hY3RpdmVEYXRlPWIsYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKS0xXX0sYS5tb3ZlPWZ1bmN0aW9uKGEpe3ZhciBiPWkuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpK2EqKGkuc3RlcC55ZWFyc3x8MCksYz1pLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSthKihpLnN0ZXAubW9udGhzfHwwKTtpLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYixjLDEpLGkucmVmcmVzaFZpZXcoKX0sYS50b2dnbGVNb2RlPWZ1bmN0aW9uKGIpe2I9Ynx8MSxhLmRhdGVwaWNrZXJNb2RlPT09aS5tYXhNb2RlJiYxPT09Ynx8YS5kYXRlcGlja2VyTW9kZT09PWkubWluTW9kZSYmLTE9PT1ifHwoYS5kYXRlcGlja2VyTW9kZT1pLm1vZGVzW2kubW9kZXMuaW5kZXhPZihhLmRhdGVwaWNrZXJNb2RlKStiXSl9LGEua2V5cz17MTM6ImVudGVyIiwzMjoic3BhY2UiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDM3OiJsZWZ0IiwzODoidXAiLDM5OiJyaWdodCIsNDA6ImRvd24ifTt2YXIgaz1mdW5jdGlvbigpe2UoZnVuY3Rpb24oKXtpLmVsZW1lbnRbMF0uZm9jdXMoKX0sMCwhMSl9O2EuJG9uKCJkYXRlcGlja2VyLmZvY3VzIixrKSxhLmtleWRvd249ZnVuY3Rpb24oYil7dmFyIGM9YS5rZXlzW2Iud2hpY2hdO2lmKGMmJiFiLnNoaWZ0S2V5JiYhYi5hbHRLZXkpaWYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksImVudGVyIj09PWN8fCJzcGFjZSI9PT1jKXtpZihpLmlzRGlzYWJsZWQoaS5hY3RpdmVEYXRlKSlyZXR1cm47YS5zZWxlY3QoaS5hY3RpdmVEYXRlKSxrKCl9ZWxzZSFiLmN0cmxLZXl8fCJ1cCIhPT1jJiYiZG93biIhPT1jPyhpLmhhbmRsZUtleURvd24oYyxiKSxpLnJlZnJlc2hWaWV3KCkpOihhLnRvZ2dsZU1vZGUoInVwIj09PWM/MTotMSksaygpKX19XSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5odG1sIixzY29wZTp7ZGF0ZXBpY2tlck1vZGU6Ij0/IixkYXRlRGlzYWJsZWQ6IiYifSxyZXF1aXJlOlsiZGF0ZXBpY2tlciIsIj9ebmdNb2RlbCJdLGNvbnRyb2xsZXI6IkRhdGVwaWNrZXJDb250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWRbMF0sZj1kWzFdO2YmJmUuaW5pdChmKX19fSkuZGlyZWN0aXZlKCJkYXlwaWNrZXIiLFsiZGF0ZUZpbHRlciIsZnVuY3Rpb24oYSl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXkuaHRtbCIscmVxdWlyZToiXmRhdGVwaWNrZXIiLGxpbms6ZnVuY3Rpb24oYixjLGQsZSl7ZnVuY3Rpb24gZihhLGIpe3JldHVybiAxIT09Ynx8YSU0IT09MHx8YSUxMDA9PT0wJiZhJTQwMCE9PTA/aVtiXToyOX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9bmV3IEFycmF5KGIpLGQ9bmV3IERhdGUoYSksZT0wO2ZvcihkLnNldEhvdXJzKDEyKTtiPmU7KWNbZSsrXT1uZXcgRGF0ZShkKSxkLnNldERhdGUoZC5nZXREYXRlKCkrMSk7cmV0dXJuIGN9ZnVuY3Rpb24gaChhKXt2YXIgYj1uZXcgRGF0ZShhKTtiLnNldERhdGUoYi5nZXREYXRlKCkrNC0oYi5nZXREYXkoKXx8NykpO3ZhciBjPWIuZ2V0VGltZSgpO3JldHVybiBiLnNldE1vbnRoKDApLGIuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGMtYikvODY0ZTUpLzcpKzF9Yi5zaG93V2Vla3M9ZS5zaG93V2Vla3MsZS5zdGVwPXttb250aHM6MX0sZS5lbGVtZW50PWM7dmFyIGk9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtlLl9yZWZyZXNoVmlldz1mdW5jdGlvbigpe3ZhciBjPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGQ9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCksZj1uZXcgRGF0ZShjLGQsMSksaT1lLnN0YXJ0aW5nRGF5LWYuZ2V0RGF5KCksaj1pPjA/Ny1pOi1pLGs9bmV3IERhdGUoZik7aj4wJiZrLnNldERhdGUoLWorMSk7Zm9yKHZhciBsPWcoayw0MiksbT0wOzQyPm07bSsrKWxbbV09YW5ndWxhci5leHRlbmQoZS5jcmVhdGVEYXRlT2JqZWN0KGxbbV0sZS5mb3JtYXREYXkpLHtzZWNvbmRhcnk6bFttXS5nZXRNb250aCgpIT09ZCx1aWQ6Yi51bmlxdWVJZCsiLSIrbX0pO2IubGFiZWxzPW5ldyBBcnJheSg3KTtmb3IodmFyIG49MDs3Pm47bisrKWIubGFiZWxzW25dPXthYmJyOmEobFtuXS5kYXRlLGUuZm9ybWF0RGF5SGVhZGVyKSxmdWxsOmEobFtuXS5kYXRlLCJFRUVFIil9O2lmKGIudGl0bGU9YShlLmFjdGl2ZURhdGUsZS5mb3JtYXREYXlUaXRsZSksYi5yb3dzPWUuc3BsaXQobCw3KSxiLnNob3dXZWVrcyl7Yi53ZWVrTnVtYmVycz1bXTtmb3IodmFyIG89aChiLnJvd3NbMF1bMF0uZGF0ZSkscD1iLnJvd3MubGVuZ3RoO2Iud2Vla051bWJlcnMucHVzaChvKyspPHA7KTt9fSxlLmNvbXBhcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IERhdGUoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSktbmV3IERhdGUoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSl9LGUuaGFuZGxlS2V5RG93bj1mdW5jdGlvbihhKXt2YXIgYj1lLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTc7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz03O2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0TW9udGgoYywxKSxiPU1hdGgubWluKGYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpLGIpfWVsc2UiaG9tZSI9PT1hP2I9MToiZW5kIj09PWEmJihiPWYoZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksZS5hY3RpdmVEYXRlLmdldE1vbnRoKCkpKTtlLmFjdGl2ZURhdGUuc2V0RGF0ZShiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJtb250aHBpY2tlciIsWyJkYXRlRmlsdGVyIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGIsYyxkLGUpe2Uuc3RlcD17eWVhcnM6MX0sZS5lbGVtZW50PWMsZS5fcmVmcmVzaFZpZXc9ZnVuY3Rpb24oKXtmb3IodmFyIGM9bmV3IEFycmF5KDEyKSxkPWUuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLGY9MDsxMj5mO2YrKyljW2ZdPWFuZ3VsYXIuZXh0ZW5kKGUuY3JlYXRlRGF0ZU9iamVjdChuZXcgRGF0ZShkLGYsMSksZS5mb3JtYXRNb250aCkse3VpZDpiLnVuaXF1ZUlkKyItIitmfSk7Yi50aXRsZT1hKGUuYWN0aXZlRGF0ZSxlLmZvcm1hdE1vbnRoVGl0bGUpLGIucm93cz1lLnNwbGl0KGMsMyl9LGUuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRGF0ZShhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpKS1uZXcgRGF0ZShiLmdldEZ1bGxZZWFyKCksYi5nZXRNb250aCgpKX0sZS5oYW5kbGVLZXlEb3duPWZ1bmN0aW9uKGEpe3ZhciBiPWUuYWN0aXZlRGF0ZS5nZXRNb250aCgpO2lmKCJsZWZ0Ij09PWEpYi09MTtlbHNlIGlmKCJ1cCI9PT1hKWItPTM7ZWxzZSBpZigicmlnaHQiPT09YSliKz0xO2Vsc2UgaWYoImRvd24iPT09YSliKz0zO2Vsc2UgaWYoInBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YSl7dmFyIGM9ZS5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkrKCJwYWdldXAiPT09YT8tMToxKTtlLmFjdGl2ZURhdGUuc2V0RnVsbFllYXIoYyl9ZWxzZSJob21lIj09PWE/Yj0wOiJlbmQiPT09YSYmKGI9MTEpO2UuYWN0aXZlRGF0ZS5zZXRNb250aChiKX0sZS5yZWZyZXNoVmlldygpfX19XSkuZGlyZWN0aXZlKCJ5ZWFycGlja2VyIixbImRhdGVGaWx0ZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLHJlcXVpcmU6Il5kYXRlcGlja2VyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIHBhcnNlSW50KChhLTEpL2YsMTApKmYrMX12YXIgZj1kLnllYXJSYW5nZTtkLnN0ZXA9e3llYXJzOmZ9LGQuZWxlbWVudD1iLGQuX3JlZnJlc2hWaWV3PWZ1bmN0aW9uKCl7Zm9yKHZhciBiPW5ldyBBcnJheShmKSxjPTAsZz1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKTtmPmM7YysrKWJbY109YW5ndWxhci5leHRlbmQoZC5jcmVhdGVEYXRlT2JqZWN0KG5ldyBEYXRlKGcrYywwLDEpLGQuZm9ybWF0WWVhcikse3VpZDphLnVuaXF1ZUlkKyItIitjfSk7YS50aXRsZT1bYlswXS5sYWJlbCxiW2YtMV0ubGFiZWxdLmpvaW4oIiAtICIpLGEucm93cz1kLnNwbGl0KGIsNSl9LGQuY29tcGFyZT1mdW5jdGlvbihhLGIpe3JldHVybiBhLmdldEZ1bGxZZWFyKCktYi5nZXRGdWxsWWVhcigpfSxkLmhhbmRsZUtleURvd249ZnVuY3Rpb24oYSl7dmFyIGI9ZC5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCk7ImxlZnQiPT09YT9iLT0xOiJ1cCI9PT1hP2ItPTU6InJpZ2h0Ij09PWE/Yis9MToiZG93biI9PT1hP2IrPTU6InBhZ2V1cCI9PT1hfHwicGFnZWRvd24iPT09YT9iKz0oInBhZ2V1cCI9PT1hPy0xOjEpKmQuc3RlcC55ZWFyczoiaG9tZSI9PT1hP2I9ZShkLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSk6ImVuZCI9PT1hJiYoYj1lKGQuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKStmLTEpLGQuYWN0aXZlRGF0ZS5zZXRGdWxsWWVhcihiKX0sZC5yZWZyZXNoVmlldygpfX19XSkuY29uc3RhbnQoImRhdGVwaWNrZXJQb3B1cENvbmZpZyIse2RhdGVwaWNrZXJQb3B1cDoieXl5eS1NTS1kZCIsY3VycmVudFRleHQ6IlRvZGF5IixjbGVhclRleHQ6IkNsZWFyIixjbG9zZVRleHQ6IkRvbmUiLGNsb3NlT25EYXRlU2VsZWN0aW9uOiEwLGFwcGVuZFRvQm9keTohMSxzaG93QnV0dG9uQmFyOiEwfSkuZGlyZWN0aXZlKCJkYXRlcGlja2VyUG9wdXAiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkZG9jdW1lbnQiLCIkcG9zaXRpb24iLCJkYXRlRmlsdGVyIiwiZGF0ZVBhcnNlciIsImRhdGVwaWNrZXJQb3B1cENvbmZpZyIsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZToibmdNb2RlbCIsc2NvcGU6e2lzT3BlbjoiPT8iLGN1cnJlbnRUZXh0OiJAIixjbGVhclRleHQ6IkAiLGNsb3NlVGV4dDoiQCIsZGF0ZURpc2FibGVkOiImIn0sbGluazpmdW5jdGlvbihoLGksaixrKXtmdW5jdGlvbiBsKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihhKXtyZXR1cm4iLSIrYS50b0xvd2VyQ2FzZSgpfSl9ZnVuY3Rpb24gbShhKXtpZihhKXtpZihhbmd1bGFyLmlzRGF0ZShhKSYmIWlzTmFOKGEpKXJldHVybiBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGE7aWYoYW5ndWxhci5pc1N0cmluZyhhKSl7dmFyIGI9Zi5wYXJzZShhLG4pfHxuZXcgRGF0ZShhKTtyZXR1cm4gaXNOYU4oYik/dm9pZCBrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITEpOihrLiRzZXRWYWxpZGl0eSgiZGF0ZSIsITApLGIpfXJldHVybiB2b2lkIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMSl9cmV0dXJuIGsuJHNldFZhbGlkaXR5KCJkYXRlIiwhMCksbnVsbH12YXIgbixvPWFuZ3VsYXIuaXNEZWZpbmVkKGouY2xvc2VPbkRhdGVTZWxlY3Rpb24pP2guJHBhcmVudC4kZXZhbChqLmNsb3NlT25EYXRlU2VsZWN0aW9uKTpnLmNsb3NlT25EYXRlU2VsZWN0aW9uLHA9YW5ndWxhci5pc0RlZmluZWQoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KT9oLiRwYXJlbnQuJGV2YWwoai5kYXRlcGlja2VyQXBwZW5kVG9Cb2R5KTpnLmFwcGVuZFRvQm9keTtoLnNob3dCdXR0b25CYXI9YW5ndWxhci5pc0RlZmluZWQoai5zaG93QnV0dG9uQmFyKT9oLiRwYXJlbnQuJGV2YWwoai5zaG93QnV0dG9uQmFyKTpnLnNob3dCdXR0b25CYXIsaC5nZXRUZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBoW2ErIlRleHQiXXx8Z1thKyJUZXh0Il19LGouJG9ic2VydmUoImRhdGVwaWNrZXJQb3B1cCIsZnVuY3Rpb24oYSl7bj1hfHxnLmRhdGVwaWNrZXJQb3B1cCxrLiRyZW5kZXIoKX0pO3ZhciBxPWFuZ3VsYXIuZWxlbWVudCgiPGRpdiBkYXRlcGlja2VyLXBvcHVwLXdyYXA+PGRpdiBkYXRlcGlja2VyPjwvZGl2PjwvZGl2PiIpO3EuYXR0cih7Im5nLW1vZGVsIjoiZGF0ZSIsIm5nLWNoYW5nZSI6ImRhdGVTZWxlY3Rpb24oKSJ9KTt2YXIgcj1hbmd1bGFyLmVsZW1lbnQocS5jaGlsZHJlbigpWzBdKTtqLmRhdGVwaWNrZXJPcHRpb25zJiZhbmd1bGFyLmZvckVhY2goaC4kcGFyZW50LiRldmFsKGouZGF0ZXBpY2tlck9wdGlvbnMpLGZ1bmN0aW9uKGEsYil7ci5hdHRyKGwoYiksYSl9KSxhbmd1bGFyLmZvckVhY2goWyJtaW5EYXRlIiwibWF4RGF0ZSJdLGZ1bmN0aW9uKGEpe2pbYV0mJihoLiRwYXJlbnQuJHdhdGNoKGIoalthXSksZnVuY3Rpb24oYil7aFthXT1ifSksci5hdHRyKGwoYSksYSkpfSksai5kYXRlRGlzYWJsZWQmJnIuYXR0cigiZGF0ZS1kaXNhYmxlZCIsImRhdGVEaXNhYmxlZCh7IGRhdGU6IGRhdGUsIG1vZGU6IG1vZGUgfSkiKSxrLiRwYXJzZXJzLnVuc2hpZnQobSksaC5kYXRlU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe2FuZ3VsYXIuaXNEZWZpbmVkKGEpJiYoaC5kYXRlPWEpLGsuJHNldFZpZXdWYWx1ZShoLmRhdGUpLGsuJHJlbmRlcigpLG8mJihoLmlzT3Blbj0hMSxpWzBdLmZvY3VzKCkpfSxpLmJpbmQoImlucHV0IGNoYW5nZSBrZXl1cCIsZnVuY3Rpb24oKXtoLiRhcHBseShmdW5jdGlvbigpe2guZGF0ZT1rLiRtb2RlbFZhbHVlfSl9KSxrLiRyZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT1rLiR2aWV3VmFsdWU/ZShrLiR2aWV3VmFsdWUsbik6IiI7aS52YWwoYSksaC5kYXRlPW0oay4kbW9kZWxWYWx1ZSl9O3ZhciBzPWZ1bmN0aW9uKGEpe2guaXNPcGVuJiZhLnRhcmdldCE9PWlbMF0mJmguJGFwcGx5KGZ1bmN0aW9uKCl7aC5pc09wZW49ITF9KX0sdD1mdW5jdGlvbihhKXtoLmtleWRvd24oYSl9O2kuYmluZCgia2V5ZG93biIsdCksaC5rZXlkb3duPWZ1bmN0aW9uKGEpezI3PT09YS53aGljaD8oYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksaC5jbG9zZSgpKTo0MCE9PWEud2hpY2h8fGguaXNPcGVufHwoaC5pc09wZW49ITApfSxoLiR3YXRjaCgiaXNPcGVuIixmdW5jdGlvbihhKXthPyhoLiRicm9hZGNhc3QoImRhdGVwaWNrZXIuZm9jdXMiKSxoLnBvc2l0aW9uPXA/ZC5vZmZzZXQoaSk6ZC5wb3NpdGlvbihpKSxoLnBvc2l0aW9uLnRvcD1oLnBvc2l0aW9uLnRvcCtpLnByb3AoIm9mZnNldEhlaWdodCIpLGMuYmluZCgiY2xpY2siLHMpKTpjLnVuYmluZCgiY2xpY2siLHMpfSksaC5zZWxlY3Q9ZnVuY3Rpb24oYSl7aWYoInRvZGF5Ij09PWEpe3ZhciBiPW5ldyBEYXRlO2FuZ3VsYXIuaXNEYXRlKGsuJG1vZGVsVmFsdWUpPyhhPW5ldyBEYXRlKGsuJG1vZGVsVmFsdWUpLGEuc2V0RnVsbFllYXIoYi5nZXRGdWxsWWVhcigpLGIuZ2V0TW9udGgoKSxiLmdldERhdGUoKSkpOmE9bmV3IERhdGUoYi5zZXRIb3VycygwLDAsMCwwKSl9aC5kYXRlU2VsZWN0aW9uKGEpfSxoLmNsb3NlPWZ1bmN0aW9uKCl7aC5pc09wZW49ITEsaVswXS5mb2N1cygpfTt2YXIgdT1hKHEpKGgpO3A/Yy5maW5kKCJib2R5IikuYXBwZW5kKHUpOmkuYWZ0ZXIodSksaC4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe3UucmVtb3ZlKCksaS51bmJpbmQoImtleWRvd24iLHQpLGMudW5iaW5kKCJjbGljayIscyl9KX19fV0pLmRpcmVjdGl2ZSgiZGF0ZXBpY2tlclBvcHVwV3JhcCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRyYW5zY2x1ZGU6ITAsdGVtcGxhdGVVcmw6InRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsbGluazpmdW5jdGlvbihhLGIpe2IuYmluZCgiY2xpY2siLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAuZHJvcGRvd24iLFtdKS5jb25zdGFudCgiZHJvcGRvd25Db25maWciLHtvcGVuQ2xhc3M6Im9wZW4ifSkuc2VydmljZSgiZHJvcGRvd25TZXJ2aWNlIixbIiRkb2N1bWVudCIsZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDt0aGlzLm9wZW49ZnVuY3Rpb24oZSl7Ynx8KGEuYmluZCgiY2xpY2siLGMpLGEuYmluZCgia2V5ZG93biIsZCkpLGImJmIhPT1lJiYoYi5pc09wZW49ITEpLGI9ZX0sdGhpcy5jbG9zZT1mdW5jdGlvbihlKXtiPT09ZSYmKGI9bnVsbCxhLnVuYmluZCgiY2xpY2siLGMpLGEudW5iaW5kKCJrZXlkb3duIixkKSl9O3ZhciBjPWZ1bmN0aW9uKGEpe2EmJmEuaXNEZWZhdWx0UHJldmVudGVkKCl8fGIuJGFwcGx5KGZ1bmN0aW9uKCl7Yi5pc09wZW49ITF9KX0sZD1mdW5jdGlvbihhKXsyNz09PWEud2hpY2gmJihiLmZvY3VzVG9nZ2xlRWxlbWVudCgpLGMoKSl9fV0pLmNvbnRyb2xsZXIoIkRyb3Bkb3duQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCJkcm9wZG93bkNvbmZpZyIsImRyb3Bkb3duU2VydmljZSIsIiRhbmltYXRlIixmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD10aGlzLGk9YS4kbmV3KCksaj1kLm9wZW5DbGFzcyxrPWFuZ3VsYXIubm9vcCxsPWIub25Ub2dnbGU/YyhiLm9uVG9nZ2xlKTphbmd1bGFyLm5vb3A7dGhpcy5pbml0PWZ1bmN0aW9uKGQpe2guJGVsZW1lbnQ9ZCxiLmlzT3BlbiYmKGc9YyhiLmlzT3Blbiksaz1nLmFzc2lnbixhLiR3YXRjaChnLGZ1bmN0aW9uKGEpe2kuaXNPcGVuPSEhYX0pKX0sdGhpcy50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNPcGVuPWFyZ3VtZW50cy5sZW5ndGg/ISFhOiFpLmlzT3Blbn0sdGhpcy5pc09wZW49ZnVuY3Rpb24oKXtyZXR1cm4gaS5pc09wZW59LGkuZm9jdXNUb2dnbGVFbGVtZW50PWZ1bmN0aW9uKCl7aC50b2dnbGVFbGVtZW50JiZoLnRvZ2dsZUVsZW1lbnRbMF0uZm9jdXMoKX0saS4kd2F0Y2goImlzT3BlbiIsZnVuY3Rpb24oYixjKXtmW2I/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShoLiRlbGVtZW50LGopLGI/KGkuZm9jdXNUb2dnbGVFbGVtZW50KCksZS5vcGVuKGkpKTplLmNsb3NlKGkpLGsoYSxiKSxhbmd1bGFyLmlzRGVmaW5lZChiKSYmYiE9PWMmJmwoYSx7b3BlbjohIWJ9KX0pLGEuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2kuaXNPcGVuPSExfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2kuJGRlc3Ryb3koKX0pfV0pLmRpcmVjdGl2ZSgiZHJvcGRvd24iLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJDQSIsY29udHJvbGxlcjoiRHJvcGRvd25Db250cm9sbGVyIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuaW5pdChiKX19fSkuZGlyZWN0aXZlKCJkcm9wZG93blRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkNBIixyZXF1aXJlOiI/XmRyb3Bkb3duIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGQpe2QudG9nZ2xlRWxlbWVudD1iO3ZhciBlPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxiLmhhc0NsYXNzKCJkaXNhYmxlZCIpfHxjLmRpc2FibGVkfHxhLiRhcHBseShmdW5jdGlvbigpe2QudG9nZ2xlKCl9KX07Yi5iaW5kKCJjbGljayIsZSksYi5hdHRyKHsiYXJpYS1oYXNwb3B1cCI6ITAsImFyaWEtZXhwYW5kZWQiOiExfSksYS4kd2F0Y2goZC5pc09wZW4sZnVuY3Rpb24oYSl7Yi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhIWEpfSksYS4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2IudW5iaW5kKCJjbGljayIsZSl9KX19fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAubW9kYWwiLFsidWkuYm9vdHN0cmFwLnRyYW5zaXRpb24iXSkuZmFjdG9yeSgiJCRzdGFja2VkTWFwIixmdW5jdGlvbigpe3JldHVybntjcmVhdGVOZXc6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm57YWRkOmZ1bmN0aW9uKGIsYyl7YS5wdXNoKHtrZXk6Yix2YWx1ZTpjfSl9LGdldDpmdW5jdGlvbihiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihiPT1hW2NdLmtleSlyZXR1cm4gYVtjXX0sa2V5czpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10ua2V5KTtyZXR1cm4gYn0sdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGFbYS5sZW5ndGgtMV19LHJlbW92ZTpmdW5jdGlvbihiKXtmb3IodmFyIGM9LTEsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGI9PWFbZF0ua2V5KXtjPWQ7YnJlYWt9cmV0dXJuIGEuc3BsaWNlKGMsMSlbMF19LHJlbW92ZVRvcDpmdW5jdGlvbigpe3JldHVybiBhLnNwbGljZShhLmxlbmd0aC0xLDEpWzBdfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gYS5sZW5ndGh9fX19fSkuZGlyZWN0aXZlKCJtb2RhbEJhY2tkcm9wIixbIiR0aW1lb3V0IixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixsaW5rOmZ1bmN0aW9uKGIpe2IuYW5pbWF0ZT0hMSxhKGZ1bmN0aW9uKCl7Yi5hbmltYXRlPSEwfSl9fX1dKS5kaXJlY3RpdmUoIm1vZGFsV2luZG93IixbIiRtb2RhbFN0YWNrIiwiJHRpbWVvdXQiLGZ1bmN0aW9uKGEsYil7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e2luZGV4OiJAIixhbmltYXRlOiI9In0scmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHRlbXBsYXRlVXJsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudGVtcGxhdGVVcmx8fCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCJ9LGxpbms6ZnVuY3Rpb24oYyxkLGUpe2QuYWRkQ2xhc3MoZS53aW5kb3dDbGFzc3x8IiIpLGMuc2l6ZT1lLnNpemUsYihmdW5jdGlvbigpe2MuYW5pbWF0ZT0hMCxkWzBdLmZvY3VzKCl9KSxjLmNsb3NlPWZ1bmN0aW9uKGIpe3ZhciBjPWEuZ2V0VG9wKCk7YyYmYy52YWx1ZS5iYWNrZHJvcCYmInN0YXRpYyIhPWMudmFsdWUuYmFja2Ryb3AmJmIudGFyZ2V0PT09Yi5jdXJyZW50VGFyZ2V0JiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5kaXNtaXNzKGMua2V5LCJiYWNrZHJvcCBjbGljayIpKX19fX1dKS5mYWN0b3J5KCIkbW9kYWxTdGFjayIsWyIkdHJhbnNpdGlvbiIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJGNvbXBpbGUiLCIkcm9vdFNjb3BlIiwiJCRzdGFja2VkTWFwIixmdW5jdGlvbihhLGIsYyxkLGUsZil7ZnVuY3Rpb24gZygpe2Zvcih2YXIgYT0tMSxiPW4ua2V5cygpLGM9MDtjPGIubGVuZ3RoO2MrKyluLmdldChiW2NdKS52YWx1ZS5iYWNrZHJvcCYmKGE9Yyk7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXt2YXIgYj1jLmZpbmQoImJvZHkiKS5lcSgwKSxkPW4uZ2V0KGEpLnZhbHVlO24ucmVtb3ZlKGEpLGooZC5tb2RhbERvbUVsLGQubW9kYWxTY29wZSwzMDAsZnVuY3Rpb24oKXtkLm1vZGFsU2NvcGUuJGRlc3Ryb3koKSxiLnRvZ2dsZUNsYXNzKG0sbi5sZW5ndGgoKT4wKSxpKCl9KX1mdW5jdGlvbiBpKCl7aWYoayYmLTE9PWcoKSl7dmFyIGE9bDtqKGssbCwxNTAsZnVuY3Rpb24oKXthLiRkZXN0cm95KCksYT1udWxsfSksaz12b2lkIDAsbD12b2lkIDB9fWZ1bmN0aW9uIGooYyxkLGUsZil7ZnVuY3Rpb24gZygpe2cuZG9uZXx8KGcuZG9uZT0hMCxjLnJlbW92ZSgpLGYmJmYoKSl9ZC5hbmltYXRlPSExO3ZhciBoPWEudHJhbnNpdGlvbkVuZEV2ZW50TmFtZTtpZihoKXt2YXIgaT1iKGcsZSk7Yy5iaW5kKGgsZnVuY3Rpb24oKXtiLmNhbmNlbChpKSxnKCksZC4kYXBwbHkoKX0pfWVsc2UgYihnLDApfXZhciBrLGwsbT0ibW9kYWwtb3BlbiIsbj1mLmNyZWF0ZU5ldygpLG89e307cmV0dXJuIGUuJHdhdGNoKGcsZnVuY3Rpb24oYSl7bCYmKGwuaW5kZXg9YSl9KSxjLmJpbmQoImtleWRvd24iLGZ1bmN0aW9uKGEpe3ZhciBiOzI3PT09YS53aGljaCYmKGI9bi50b3AoKSxiJiZiLnZhbHVlLmtleWJvYXJkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGUuJGFwcGx5KGZ1bmN0aW9uKCl7by5kaXNtaXNzKGIua2V5LCJlc2NhcGUga2V5IHByZXNzIil9KSkpfSksby5vcGVuPWZ1bmN0aW9uKGEsYil7bi5hZGQoYSx7ZGVmZXJyZWQ6Yi5kZWZlcnJlZCxtb2RhbFNjb3BlOmIuc2NvcGUsYmFja2Ryb3A6Yi5iYWNrZHJvcCxrZXlib2FyZDpiLmtleWJvYXJkfSk7dmFyIGY9Yy5maW5kKCJib2R5IikuZXEoMCksaD1nKCk7aD49MCYmIWsmJihsPWUuJG5ldyghMCksbC5pbmRleD1oLGs9ZCgiPGRpdiBtb2RhbC1iYWNrZHJvcD48L2Rpdj4iKShsKSxmLmFwcGVuZChrKSk7dmFyIGk9YW5ndWxhci5lbGVtZW50KCI8ZGl2IG1vZGFsLXdpbmRvdz48L2Rpdj4iKTtpLmF0dHIoeyJ0ZW1wbGF0ZS11cmwiOmIud2luZG93VGVtcGxhdGVVcmwsIndpbmRvdy1jbGFzcyI6Yi53aW5kb3dDbGFzcyxzaXplOmIuc2l6ZSxpbmRleDpuLmxlbmd0aCgpLTEsYW5pbWF0ZToiYW5pbWF0ZSJ9KS5odG1sKGIuY29udGVudCk7dmFyIGo9ZChpKShiLnNjb3BlKTtuLnRvcCgpLnZhbHVlLm1vZGFsRG9tRWw9aixmLmFwcGVuZChqKSxmLmFkZENsYXNzKG0pfSxvLmNsb3NlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVzb2x2ZShiKSxoKGEpKX0sby5kaXNtaXNzPWZ1bmN0aW9uKGEsYil7dmFyIGM9bi5nZXQoYSkudmFsdWU7YyYmKGMuZGVmZXJyZWQucmVqZWN0KGIpLGgoYSkpfSxvLmRpc21pc3NBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuZ2V0VG9wKCk7YjspdGhpcy5kaXNtaXNzKGIua2V5LGEpLGI9dGhpcy5nZXRUb3AoKX0sby5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gbi50b3AoKX0sb31dKS5wcm92aWRlcigiJG1vZGFsIixmdW5jdGlvbigpe3ZhciBhPXtvcHRpb25zOntiYWNrZHJvcDohMCxrZXlib2FyZDohMH0sJGdldDpbIiRpbmplY3RvciIsIiRyb290U2NvcGUiLCIkcSIsIiRodHRwIiwiJHRlbXBsYXRlQ2FjaGUiLCIkY29udHJvbGxlciIsIiRtb2RhbFN0YWNrIixmdW5jdGlvbihiLGMsZCxlLGYsZyxoKXtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnRlbXBsYXRlP2Qud2hlbihhLnRlbXBsYXRlKTplLmdldChhLnRlbXBsYXRlVXJsLHtjYWNoZTpmfSkudGhlbihmdW5jdGlvbihhKXtyZXR1cm4gYS5kYXRhfSl9ZnVuY3Rpb24gaihhKXt2YXIgYz1bXTtyZXR1cm4gYW5ndWxhci5mb3JFYWNoKGEsZnVuY3Rpb24oYSl7KGFuZ3VsYXIuaXNGdW5jdGlvbihhKXx8YW5ndWxhci5pc0FycmF5KGEpKSYmYy5wdXNoKGQud2hlbihiLmludm9rZShhKSkpfSksY312YXIgaz17fTtyZXR1cm4gay5vcGVuPWZ1bmN0aW9uKGIpe3ZhciBlPWQuZGVmZXIoKSxmPWQuZGVmZXIoKSxrPXtyZXN1bHQ6ZS5wcm9taXNlLG9wZW5lZDpmLnByb21pc2UsY2xvc2U6ZnVuY3Rpb24oYSl7aC5jbG9zZShrLGEpfSxkaXNtaXNzOmZ1bmN0aW9uKGEpe2guZGlzbWlzcyhrLGEpfX07aWYoYj1hbmd1bGFyLmV4dGVuZCh7fSxhLm9wdGlvbnMsYiksYi5yZXNvbHZlPWIucmVzb2x2ZXx8e30sIWIudGVtcGxhdGUmJiFiLnRlbXBsYXRlVXJsKXRocm93IG5ldyBFcnJvcigiT25lIG9mIHRlbXBsYXRlIG9yIHRlbXBsYXRlVXJsIG9wdGlvbnMgaXMgcmVxdWlyZWQuIik7dmFyIGw9ZC5hbGwoW2koYildLmNvbmNhdChqKGIucmVzb2x2ZSkpKTtyZXR1cm4gbC50aGVuKGZ1bmN0aW9uKGEpe3ZhciBkPShiLnNjb3BlfHxjKS4kbmV3KCk7ZC4kY2xvc2U9ay5jbG9zZSxkLiRkaXNtaXNzPWsuZGlzbWlzczt2YXIgZixpPXt9LGo9MTtiLmNvbnRyb2xsZXImJihpLiRzY29wZT1kLGkuJG1vZGFsSW5zdGFuY2U9ayxhbmd1bGFyLmZvckVhY2goYi5yZXNvbHZlLGZ1bmN0aW9uKGIsYyl7aVtjXT1hW2orK119KSxmPWcoYi5jb250cm9sbGVyLGkpKSxoLm9wZW4oayx7c2NvcGU6ZCxkZWZlcnJlZDplLGNvbnRlbnQ6YVswXSxiYWNrZHJvcDpiLmJhY2tkcm9wLGtleWJvYXJkOmIua2V5Ym9hcmQsd2luZG93Q2xhc3M6Yi53aW5kb3dDbGFzcyx3aW5kb3dUZW1wbGF0ZVVybDpiLndpbmRvd1RlbXBsYXRlVXJsLHNpemU6Yi5zaXplfSl9LGZ1bmN0aW9uKGEpe2UucmVqZWN0KGEpfSksbC50aGVuKGZ1bmN0aW9uKCl7Zi5yZXNvbHZlKCEwKX0sZnVuY3Rpb24oKXtmLnJlamVjdCghMSl9KSxrfSxrfV19O3JldHVybiBhfSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wYWdpbmF0aW9uIixbXSkuY29udHJvbGxlcigiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLFsiJHNjb3BlIiwiJGF0dHJzIiwiJHBhcnNlIixmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPXskc2V0Vmlld1ZhbHVlOmFuZ3VsYXIubm9vcH0sZj1iLm51bVBhZ2VzP2MoYi5udW1QYWdlcykuYXNzaWduOmFuZ3VsYXIubm9vcDt0aGlzLmluaXQ9ZnVuY3Rpb24oZixnKXtlPWYsdGhpcy5jb25maWc9ZyxlLiRyZW5kZXI9ZnVuY3Rpb24oKXtkLnJlbmRlcigpfSxiLml0ZW1zUGVyUGFnZT9hLiRwYXJlbnQuJHdhdGNoKGMoYi5pdGVtc1BlclBhZ2UpLGZ1bmN0aW9uKGIpe2QuaXRlbXNQZXJQYWdlPXBhcnNlSW50KGIsMTApLGEudG90YWxQYWdlcz1kLmNhbGN1bGF0ZVRvdGFsUGFnZXMoKX0pOnRoaXMuaXRlbXNQZXJQYWdlPWcuaXRlbXNQZXJQYWdlfSx0aGlzLmNhbGN1bGF0ZVRvdGFsUGFnZXM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLml0ZW1zUGVyUGFnZTwxPzE6TWF0aC5jZWlsKGEudG90YWxJdGVtcy90aGlzLml0ZW1zUGVyUGFnZSk7cmV0dXJuIE1hdGgubWF4KGJ8fDAsMSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS5wYWdlPXBhcnNlSW50KGUuJHZpZXdWYWx1ZSwxMCl8fDF9LGEuc2VsZWN0UGFnZT1mdW5jdGlvbihiKXthLnBhZ2UhPT1iJiZiPjAmJmI8PWEudG90YWxQYWdlcyYmKGUuJHNldFZpZXdWYWx1ZShiKSxlLiRyZW5kZXIoKSl9LGEuZ2V0VGV4dD1mdW5jdGlvbihiKXtyZXR1cm4gYVtiKyJUZXh0Il18fGQuY29uZmlnW2IrIlRleHQiXX0sYS5ub1ByZXZpb3VzPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hLnBhZ2V9LGEubm9OZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGEucGFnZT09PWEudG90YWxQYWdlc30sYS4kd2F0Y2goInRvdGFsSXRlbXMiLGZ1bmN0aW9uKCl7YS50b3RhbFBhZ2VzPWQuY2FsY3VsYXRlVG90YWxQYWdlcygpfSksYS4kd2F0Y2goInRvdGFsUGFnZXMiLGZ1bmN0aW9uKGIpe2YoYS4kcGFyZW50LGIpLGEucGFnZT5iP2Euc2VsZWN0UGFnZShiKTplLiRyZW5kZXIoKX0pfV0pLmNvbnN0YW50KCJwYWdpbmF0aW9uQ29uZmlnIix7aXRlbXNQZXJQYWdlOjEwLGJvdW5kYXJ5TGlua3M6ITEsZGlyZWN0aW9uTGlua3M6ITAsZmlyc3RUZXh0OiJGaXJzdCIscHJldmlvdXNUZXh0OiJQcmV2aW91cyIsbmV4dFRleHQ6Ik5leHQiLGxhc3RUZXh0OiJMYXN0Iixyb3RhdGU6ITB9KS5kaXJlY3RpdmUoInBhZ2luYXRpb24iLFsiJHBhcnNlIiwicGFnaW5hdGlvbkNvbmZpZyIsZnVuY3Rpb24oYSxiKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIsZmlyc3RUZXh0OiJAIixwcmV2aW91c1RleHQ6IkAiLG5leHRUZXh0OiJAIixsYXN0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdpbmF0aW9uIiwiP25nTW9kZWwiXSxjb250cm9sbGVyOiJQYWdpbmF0aW9uQ29udHJvbGxlciIsdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIixyZXBsYWNlOiEwLGxpbms6ZnVuY3Rpb24oYyxkLGUsZil7ZnVuY3Rpb24gZyhhLGIsYyl7cmV0dXJue251bWJlcjphLHRleHQ6YixhY3RpdmU6Y319ZnVuY3Rpb24gaChhLGIpe3ZhciBjPVtdLGQ9MSxlPWIsZj1hbmd1bGFyLmlzRGVmaW5lZChrKSYmYj5rO2YmJihsPyhkPU1hdGgubWF4KGEtTWF0aC5mbG9vcihrLzIpLDEpLGU9ZCtrLTEsZT5iJiYoZT1iLGQ9ZS1rKzEpKTooZD0oTWF0aC5jZWlsKGEvayktMSkqaysxLGU9TWF0aC5taW4oZCtrLTEsYikpKTtmb3IodmFyIGg9ZDtlPj1oO2grKyl7dmFyIGk9ZyhoLGgsaD09PWEpO2MucHVzaChpKX1pZihmJiYhbCl7aWYoZD4xKXt2YXIgaj1nKGQtMSwiLi4uIiwhMSk7Yy51bnNoaWZ0KGopfWlmKGI+ZSl7dmFyIG09ZyhlKzEsIi4uLiIsITEpO2MucHVzaChtKX19cmV0dXJuIGN9dmFyIGk9ZlswXSxqPWZbMV07aWYoail7dmFyIGs9YW5ndWxhci5pc0RlZmluZWQoZS5tYXhTaXplKT9jLiRwYXJlbnQuJGV2YWwoZS5tYXhTaXplKTpiLm1heFNpemUsbD1hbmd1bGFyLmlzRGVmaW5lZChlLnJvdGF0ZSk/Yy4kcGFyZW50LiRldmFsKGUucm90YXRlKTpiLnJvdGF0ZTtjLmJvdW5kYXJ5TGlua3M9YW5ndWxhci5pc0RlZmluZWQoZS5ib3VuZGFyeUxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5ib3VuZGFyeUxpbmtzKTpiLmJvdW5kYXJ5TGlua3MsYy5kaXJlY3Rpb25MaW5rcz1hbmd1bGFyLmlzRGVmaW5lZChlLmRpcmVjdGlvbkxpbmtzKT9jLiRwYXJlbnQuJGV2YWwoZS5kaXJlY3Rpb25MaW5rcyk6Yi5kaXJlY3Rpb25MaW5rcyxpLmluaXQoaixiKSxlLm1heFNpemUmJmMuJHBhcmVudC4kd2F0Y2goYShlLm1heFNpemUpLGZ1bmN0aW9uKGEpe2s9cGFyc2VJbnQoYSwxMCksaS5yZW5kZXIoKX0pO3ZhciBtPWkucmVuZGVyO2kucmVuZGVyPWZ1bmN0aW9uKCl7bSgpLGMucGFnZT4wJiZjLnBhZ2U8PWMudG90YWxQYWdlcyYmKGMucGFnZXM9aChjLnBhZ2UsYy50b3RhbFBhZ2VzKSl9fX19fV0pLmNvbnN0YW50KCJwYWdlckNvbmZpZyIse2l0ZW1zUGVyUGFnZToxMCxwcmV2aW91c1RleHQ6IsKrIFByZXZpb3VzIixuZXh0VGV4dDoiTmV4dCDCuyIsYWxpZ246ITB9KS5kaXJlY3RpdmUoInBhZ2VyIixbInBhZ2VyQ29uZmlnIixmdW5jdGlvbihhKXtyZXR1cm57cmVzdHJpY3Q6IkVBIixzY29wZTp7dG90YWxJdGVtczoiPSIscHJldmlvdXNUZXh0OiJAIixuZXh0VGV4dDoiQCJ9LHJlcXVpcmU6WyJwYWdlciIsIj9uZ01vZGVsIl0sY29udHJvbGxlcjoiUGFnaW5hdGlvbkNvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZj1lWzBdLGc9ZVsxXTtnJiYoYi5hbGlnbj1hbmd1bGFyLmlzRGVmaW5lZChkLmFsaWduKT9iLiRwYXJlbnQuJGV2YWwoZC5hbGlnbik6YS5hbGlnbixmLmluaXQoZyxhKSl9fX1dKSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRvb2x0aXAiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLnByb3ZpZGVyKCIkdG9vbHRpcCIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3ZhciBiPS9bQS1aXS9nLGM9Ii0iOworcmV0dXJuIGEucmVwbGFjZShiLGZ1bmN0aW9uKGEsYil7cmV0dXJuKGI/YzoiIikrYS50b0xvd2VyQ2FzZSgpfSl9dmFyIGI9e3BsYWNlbWVudDoidG9wIixhbmltYXRpb246ITAscG9wdXBEZWxheTowfSxjPXttb3VzZWVudGVyOiJtb3VzZWxlYXZlIixjbGljazoiY2xpY2siLGZvY3VzOiJibHVyIn0sZD17fTt0aGlzLm9wdGlvbnM9ZnVuY3Rpb24oYSl7YW5ndWxhci5leHRlbmQoZCxhKX0sdGhpcy5zZXRUcmlnZ2Vycz1mdW5jdGlvbihhKXthbmd1bGFyLmV4dGVuZChjLGEpfSx0aGlzLiRnZXQ9WyIkd2luZG93IiwiJGNvbXBpbGUiLCIkdGltZW91dCIsIiRwYXJzZSIsIiRkb2N1bWVudCIsIiRwb3NpdGlvbiIsIiRpbnRlcnBvbGF0ZSIsZnVuY3Rpb24oZSxmLGcsaCxpLGosayl7cmV0dXJuIGZ1bmN0aW9uKGUsbCxtKXtmdW5jdGlvbiBuKGEpe3ZhciBiPWF8fG8udHJpZ2dlcnx8bSxkPWNbYl18fGI7cmV0dXJue3Nob3c6YixoaWRlOmR9fXZhciBvPWFuZ3VsYXIuZXh0ZW5kKHt9LGIsZCkscD1hKGUpLHE9ay5zdGFydFN5bWJvbCgpLHI9ay5lbmRTeW1ib2woKSxzPSI8ZGl2ICIrcCsnLXBvcHVwIHRpdGxlPSInK3ErInR0X3RpdGxlIityKyciIGNvbnRlbnQ9IicrcSsidHRfY29udGVudCIrcisnIiBwbGFjZW1lbnQ9IicrcSsidHRfcGxhY2VtZW50IityKyciIGFuaW1hdGlvbj0idHRfYW5pbWF0aW9uIiBpcy1vcGVuPSJ0dF9pc09wZW4iPjwvZGl2Pic7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6ITAsY29tcGlsZTpmdW5jdGlvbigpe3ZhciBhPWYocyk7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBmKCl7Yi50dF9pc09wZW4/bSgpOmsoKX1mdW5jdGlvbiBrKCl7KCF5fHxiLiRldmFsKGRbbCsiRW5hYmxlIl0pKSYmKGIudHRfcG9wdXBEZWxheT92fHwodj1nKHAsYi50dF9wb3B1cERlbGF5LCExKSx2LnRoZW4oZnVuY3Rpb24oYSl7YSgpfSkpOnAoKSgpKX1mdW5jdGlvbiBtKCl7Yi4kYXBwbHkoZnVuY3Rpb24oKXtxKCl9KX1mdW5jdGlvbiBwKCl7cmV0dXJuIHY9bnVsbCx1JiYoZy5jYW5jZWwodSksdT1udWxsKSxiLnR0X2NvbnRlbnQ/KHIoKSx0LmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6ImJsb2NrIn0pLHc/aS5maW5kKCJib2R5IikuYXBwZW5kKHQpOmMuYWZ0ZXIodCkseigpLGIudHRfaXNPcGVuPSEwLGIuJGRpZ2VzdCgpLHopOmFuZ3VsYXIubm9vcH1mdW5jdGlvbiBxKCl7Yi50dF9pc09wZW49ITEsZy5jYW5jZWwodiksdj1udWxsLGIudHRfYW5pbWF0aW9uP3V8fCh1PWcocyw1MDApKTpzKCl9ZnVuY3Rpb24gcigpe3QmJnMoKSx0PWEoYixmdW5jdGlvbigpe30pLGIuJGRpZ2VzdCgpfWZ1bmN0aW9uIHMoKXt1PW51bGwsdCYmKHQucmVtb3ZlKCksdD1udWxsKX12YXIgdCx1LHYsdz1hbmd1bGFyLmlzRGVmaW5lZChvLmFwcGVuZFRvQm9keSk/by5hcHBlbmRUb0JvZHk6ITEseD1uKHZvaWQgMCkseT1hbmd1bGFyLmlzRGVmaW5lZChkW2wrIkVuYWJsZSJdKSx6PWZ1bmN0aW9uKCl7dmFyIGE9ai5wb3NpdGlvbkVsZW1lbnRzKGMsdCxiLnR0X3BsYWNlbWVudCx3KTthLnRvcCs9InB4IixhLmxlZnQrPSJweCIsdC5jc3MoYSl9O2IudHRfaXNPcGVuPSExLGQuJG9ic2VydmUoZSxmdW5jdGlvbihhKXtiLnR0X2NvbnRlbnQ9YSwhYSYmYi50dF9pc09wZW4mJnEoKX0pLGQuJG9ic2VydmUobCsiVGl0bGUiLGZ1bmN0aW9uKGEpe2IudHRfdGl0bGU9YX0pLGQuJG9ic2VydmUobCsiUGxhY2VtZW50IixmdW5jdGlvbihhKXtiLnR0X3BsYWNlbWVudD1hbmd1bGFyLmlzRGVmaW5lZChhKT9hOm8ucGxhY2VtZW50fSksZC4kb2JzZXJ2ZShsKyJQb3B1cERlbGF5IixmdW5jdGlvbihhKXt2YXIgYz1wYXJzZUludChhLDEwKTtiLnR0X3BvcHVwRGVsYXk9aXNOYU4oYyk/by5wb3B1cERlbGF5OmN9KTt2YXIgQT1mdW5jdGlvbigpe2MudW5iaW5kKHguc2hvdyxrKSxjLnVuYmluZCh4LmhpZGUsbSl9O2QuJG9ic2VydmUobCsiVHJpZ2dlciIsZnVuY3Rpb24oYSl7QSgpLHg9bihhKSx4LnNob3c9PT14LmhpZGU/Yy5iaW5kKHguc2hvdyxmKTooYy5iaW5kKHguc2hvdyxrKSxjLmJpbmQoeC5oaWRlLG0pKX0pO3ZhciBCPWIuJGV2YWwoZFtsKyJBbmltYXRpb24iXSk7Yi50dF9hbmltYXRpb249YW5ndWxhci5pc0RlZmluZWQoQik/ISFCOm8uYW5pbWF0aW9uLGQuJG9ic2VydmUobCsiQXBwZW5kVG9Cb2R5IixmdW5jdGlvbihhKXt3PWFuZ3VsYXIuaXNEZWZpbmVkKGEpP2goYSkoYik6d30pLHcmJmIuJG9uKCIkbG9jYXRpb25DaGFuZ2VTdWNjZXNzIixmdW5jdGlvbigpe2IudHRfaXNPcGVuJiZxKCl9KSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zy5jYW5jZWwodSksZy5jYW5jZWwodiksQSgpLHMoKX0pfX19fX1dfSkuZGlyZWN0aXZlKCJ0b29sdGlwUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCxzY29wZTp7Y29udGVudDoiQCIscGxhY2VtZW50OiJAIixhbmltYXRpb246IiYiLGlzT3BlbjoiJiJ9LHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCJ9fSkuZGlyZWN0aXZlKCJ0b29sdGlwIixbIiR0b29sdGlwIixmdW5jdGlvbihhKXtyZXR1cm4gYSgidG9vbHRpcCIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSkuZGlyZWN0aXZlKCJ0b29sdGlwSHRtbFVuc2FmZVBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e2NvbnRlbnQ6IkAiLHBsYWNlbWVudDoiQCIsYW5pbWF0aW9uOiImIixpc09wZW46IiYifSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwifX0pLmRpcmVjdGl2ZSgidG9vbHRpcEh0bWxVbnNhZmUiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJ0b29sdGlwSHRtbFVuc2FmZSIsInRvb2x0aXAiLCJtb3VzZWVudGVyIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wb3BvdmVyIixbInVpLmJvb3RzdHJhcC50b29sdGlwIl0pLmRpcmVjdGl2ZSgicG9wb3ZlclBvcHVwIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsc2NvcGU6e3RpdGxlOiJAIixjb250ZW50OiJAIixwbGFjZW1lbnQ6IkAiLGFuaW1hdGlvbjoiJiIsaXNPcGVuOiImIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIn19KS5kaXJlY3RpdmUoInBvcG92ZXIiLFsiJHRvb2x0aXAiLGZ1bmN0aW9uKGEpe3JldHVybiBhKCJwb3BvdmVyIiwicG9wb3ZlciIsImNsaWNrIil9XSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC5wcm9ncmVzc2JhciIsW10pLmNvbnN0YW50KCJwcm9ncmVzc0NvbmZpZyIse2FuaW1hdGU6ITAsbWF4OjEwMH0pLmNvbnRyb2xsZXIoIlByb2dyZXNzQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJwcm9ncmVzc0NvbmZpZyIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1hbmd1bGFyLmlzRGVmaW5lZChiLmFuaW1hdGUpP2EuJHBhcmVudC4kZXZhbChiLmFuaW1hdGUpOmMuYW5pbWF0ZTt0aGlzLmJhcnM9W10sYS5tYXg9YW5ndWxhci5pc0RlZmluZWQoYi5tYXgpP2EuJHBhcmVudC4kZXZhbChiLm1heCk6Yy5tYXgsdGhpcy5hZGRCYXI9ZnVuY3Rpb24oYixjKXtlfHxjLmNzcyh7dHJhbnNpdGlvbjoibm9uZSJ9KSx0aGlzLmJhcnMucHVzaChiKSxiLiR3YXRjaCgidmFsdWUiLGZ1bmN0aW9uKGMpe2IucGVyY2VudD0rKDEwMCpjL2EubWF4KS50b0ZpeGVkKDIpfSksYi4kb24oIiRkZXN0cm95IixmdW5jdGlvbigpe2M9bnVsbCxkLnJlbW92ZUJhcihiKX0pfSx0aGlzLnJlbW92ZUJhcj1mdW5jdGlvbihhKXt0aGlzLmJhcnMuc3BsaWNlKHRoaXMuYmFycy5pbmRleE9mKGEpLDEpfX1dKS5kaXJlY3RpdmUoInByb2dyZXNzIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcGxhY2U6ITAsdHJhbnNjbHVkZTohMCxjb250cm9sbGVyOiJQcm9ncmVzc0NvbnRyb2xsZXIiLHJlcXVpcmU6InByb2dyZXNzIixzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3MuaHRtbCJ9fSkuZGlyZWN0aXZlKCJiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLHJlcXVpcmU6Il5wcm9ncmVzcyIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixsaW5rOmZ1bmN0aW9uKGEsYixjLGQpe2QuYWRkQmFyKGEsYil9fX0pLmRpcmVjdGl2ZSgicHJvZ3Jlc3NiYXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0cmFuc2NsdWRlOiEwLGNvbnRyb2xsZXI6IlByb2dyZXNzQ29udHJvbGxlciIsc2NvcGU6e3ZhbHVlOiI9Iix0eXBlOiJAIn0sdGVtcGxhdGVVcmw6InRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7ZC5hZGRCYXIoYSxhbmd1bGFyLmVsZW1lbnQoYi5jaGlsZHJlbigpWzBdKSl9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAucmF0aW5nIixbXSkuY29uc3RhbnQoInJhdGluZ0NvbmZpZyIse21heDo1LHN0YXRlT246bnVsbCxzdGF0ZU9mZjpudWxsfSkuY29udHJvbGxlcigiUmF0aW5nQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCJyYXRpbmdDb25maWciLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9O3RoaXMuaW5pdD1mdW5jdGlvbihlKXtkPWUsZC4kcmVuZGVyPXRoaXMucmVuZGVyLHRoaXMuc3RhdGVPbj1hbmd1bGFyLmlzRGVmaW5lZChiLnN0YXRlT24pP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT24pOmMuc3RhdGVPbix0aGlzLnN0YXRlT2ZmPWFuZ3VsYXIuaXNEZWZpbmVkKGIuc3RhdGVPZmYpP2EuJHBhcmVudC4kZXZhbChiLnN0YXRlT2ZmKTpjLnN0YXRlT2ZmO3ZhciBmPWFuZ3VsYXIuaXNEZWZpbmVkKGIucmF0aW5nU3RhdGVzKT9hLiRwYXJlbnQuJGV2YWwoYi5yYXRpbmdTdGF0ZXMpOm5ldyBBcnJheShhbmd1bGFyLmlzRGVmaW5lZChiLm1heCk/YS4kcGFyZW50LiRldmFsKGIubWF4KTpjLm1heCk7YS5yYW5nZT10aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzKGYpfSx0aGlzLmJ1aWxkVGVtcGxhdGVPYmplY3RzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKylhW2JdPWFuZ3VsYXIuZXh0ZW5kKHtpbmRleDpifSx7c3RhdGVPbjp0aGlzLnN0YXRlT24sc3RhdGVPZmY6dGhpcy5zdGF0ZU9mZn0sYVtiXSk7cmV0dXJuIGF9LGEucmF0ZT1mdW5jdGlvbihiKXshYS5yZWFkb25seSYmYj49MCYmYjw9YS5yYW5nZS5sZW5ndGgmJihkLiRzZXRWaWV3VmFsdWUoYiksZC4kcmVuZGVyKCkpfSxhLmVudGVyPWZ1bmN0aW9uKGIpe2EucmVhZG9ubHl8fChhLnZhbHVlPWIpLGEub25Ib3Zlcih7dmFsdWU6Yn0pfSxhLnJlc2V0PWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWUsYS5vbkxlYXZlKCl9LGEub25LZXlkb3duPWZ1bmN0aW9uKGIpey8oMzd8Mzh8Mzl8NDApLy50ZXN0KGIud2hpY2gpJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksYS5yYXRlKGEudmFsdWUrKDM4PT09Yi53aGljaHx8Mzk9PT1iLndoaWNoPzE6LTEpKSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7YS52YWx1ZT1kLiR2aWV3VmFsdWV9fV0pLmRpcmVjdGl2ZSgicmF0aW5nIixmdW5jdGlvbigpe3JldHVybntyZXN0cmljdDoiRUEiLHJlcXVpcmU6WyJyYXRpbmciLCJuZ01vZGVsIl0sc2NvcGU6e3JlYWRvbmx5OiI9PyIsb25Ib3ZlcjoiJiIsb25MZWF2ZToiJiJ9LGNvbnRyb2xsZXI6IlJhdGluZ0NvbnRyb2xsZXIiLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLHJlcGxhY2U6ITAsbGluazpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1kWzBdLGY9ZFsxXTtmJiZlLmluaXQoZil9fX0pLGFuZ3VsYXIubW9kdWxlKCJ1aS5ib290c3RyYXAudGFicyIsW10pLmNvbnRyb2xsZXIoIlRhYnNldENvbnRyb2xsZXIiLFsiJHNjb3BlIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi50YWJzPWEudGFicz1bXTtiLnNlbGVjdD1mdW5jdGlvbihhKXthbmd1bGFyLmZvckVhY2goYyxmdW5jdGlvbihiKXtiLmFjdGl2ZSYmYiE9PWEmJihiLmFjdGl2ZT0hMSxiLm9uRGVzZWxlY3QoKSl9KSxhLmFjdGl2ZT0hMCxhLm9uU2VsZWN0KCl9LGIuYWRkVGFiPWZ1bmN0aW9uKGEpe2MucHVzaChhKSwxPT09Yy5sZW5ndGg/YS5hY3RpdmU9ITA6YS5hY3RpdmUmJmIuc2VsZWN0KGEpfSxiLnJlbW92ZVRhYj1mdW5jdGlvbihhKXt2YXIgZD1jLmluZGV4T2YoYSk7aWYoYS5hY3RpdmUmJmMubGVuZ3RoPjEpe3ZhciBlPWQ9PWMubGVuZ3RoLTE/ZC0xOmQrMTtiLnNlbGVjdChjW2VdKX1jLnNwbGljZShkLDEpfX1dKS5kaXJlY3RpdmUoInRhYnNldCIsZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkVBIix0cmFuc2NsdWRlOiEwLHJlcGxhY2U6ITAsc2NvcGU6e3R5cGU6IkAifSxjb250cm9sbGVyOiJUYWJzZXRDb250cm9sbGVyIix0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWJzZXQuaHRtbCIsbGluazpmdW5jdGlvbihhLGIsYyl7YS52ZXJ0aWNhbD1hbmd1bGFyLmlzRGVmaW5lZChjLnZlcnRpY2FsKT9hLiRwYXJlbnQuJGV2YWwoYy52ZXJ0aWNhbCk6ITEsYS5qdXN0aWZpZWQ9YW5ndWxhci5pc0RlZmluZWQoYy5qdXN0aWZpZWQpP2EuJHBhcmVudC4kZXZhbChjLmp1c3RpZmllZCk6ITF9fX0pLmRpcmVjdGl2ZSgidGFiIixbIiRwYXJzZSIsZnVuY3Rpb24oYSl7cmV0dXJue3JlcXVpcmU6Il50YWJzZXQiLHJlc3RyaWN0OiJFQSIscmVwbGFjZTohMCx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsdHJhbnNjbHVkZTohMCxzY29wZTp7YWN0aXZlOiI9PyIsaGVhZGluZzoiQCIsb25TZWxlY3Q6IiZzZWxlY3QiLG9uRGVzZWxlY3Q6IiZkZXNlbGVjdCJ9LGNvbnRyb2xsZXI6ZnVuY3Rpb24oKXt9LGNvbXBpbGU6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBmdW5jdGlvbihiLGMsZSxmKXtiLiR3YXRjaCgiYWN0aXZlIixmdW5jdGlvbihhKXthJiZmLnNlbGVjdChiKX0pLGIuZGlzYWJsZWQ9ITEsZS5kaXNhYmxlZCYmYi4kcGFyZW50LiR3YXRjaChhKGUuZGlzYWJsZWQpLGZ1bmN0aW9uKGEpe2IuZGlzYWJsZWQ9ISFhfSksYi5zZWxlY3Q9ZnVuY3Rpb24oKXtiLmRpc2FibGVkfHwoYi5hY3RpdmU9ITApfSxmLmFkZFRhYihiKSxiLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVUYWIoYil9KSxiLiR0cmFuc2NsdWRlRm49ZH19fX1dKS5kaXJlY3RpdmUoInRhYkhlYWRpbmdUcmFuc2NsdWRlIixbZnVuY3Rpb24oKXtyZXR1cm57cmVzdHJpY3Q6IkEiLHJlcXVpcmU6Il50YWIiLGxpbms6ZnVuY3Rpb24oYSxiKXthLiR3YXRjaCgiaGVhZGluZ0VsZW1lbnQiLGZ1bmN0aW9uKGEpe2EmJihiLmh0bWwoIiIpLGIuYXBwZW5kKGEpKX0pfX19XSkuZGlyZWN0aXZlKCJ0YWJDb250ZW50VHJhbnNjbHVkZSIsZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiBhLnRhZ05hbWUmJihhLmhhc0F0dHJpYnV0ZSgidGFiLWhlYWRpbmciKXx8YS5oYXNBdHRyaWJ1dGUoImRhdGEtdGFiLWhlYWRpbmciKXx8InRhYi1oZWFkaW5nIj09PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpfHwiZGF0YS10YWItaGVhZGluZyI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl9cmV0dXJue3Jlc3RyaWN0OiJBIixyZXF1aXJlOiJedGFic2V0IixsaW5rOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLiRldmFsKGQudGFiQ29udGVudFRyYW5zY2x1ZGUpO2UuJHRyYW5zY2x1ZGVGbihlLiRwYXJlbnQsZnVuY3Rpb24oYil7YW5ndWxhci5mb3JFYWNoKGIsZnVuY3Rpb24oYil7YShiKT9lLmhlYWRpbmdFbGVtZW50PWI6Yy5hcHBlbmQoYil9KX0pfX19KSxhbmd1bGFyLm1vZHVsZSgidWkuYm9vdHN0cmFwLnRpbWVwaWNrZXIiLFtdKS5jb25zdGFudCgidGltZXBpY2tlckNvbmZpZyIse2hvdXJTdGVwOjEsbWludXRlU3RlcDoxLHNob3dNZXJpZGlhbjohMCxtZXJpZGlhbnM6bnVsbCxyZWFkb25seUlucHV0OiExLG1vdXNld2hlZWw6ITB9KS5jb250cm9sbGVyKCJUaW1lcGlja2VyQ29udHJvbGxlciIsWyIkc2NvcGUiLCIkYXR0cnMiLCIkcGFyc2UiLCIkbG9nIiwiJGxvY2FsZSIsInRpbWVwaWNrZXJDb25maWciLGZ1bmN0aW9uKGEsYixjLGQsZSxmKXtmdW5jdGlvbiBnKCl7dmFyIGI9cGFyc2VJbnQoYS5ob3VycywxMCksYz1hLnNob3dNZXJpZGlhbj9iPjAmJjEzPmI6Yj49MCYmMjQ+YjtyZXR1cm4gYz8oYS5zaG93TWVyaWRpYW4mJigxMj09PWImJihiPTApLGEubWVyaWRpYW49PT1wWzFdJiYoYis9MTIpKSxiKTp2b2lkIDB9ZnVuY3Rpb24gaCgpe3ZhciBiPXBhcnNlSW50KGEubWludXRlcywxMCk7cmV0dXJuIGI+PTAmJjYwPmI/Yjp2b2lkIDB9ZnVuY3Rpb24gaShhKXtyZXR1cm4gYW5ndWxhci5pc0RlZmluZWQoYSkmJmEudG9TdHJpbmcoKS5sZW5ndGg8Mj8iMCIrYTphfWZ1bmN0aW9uIGooYSl7aygpLG8uJHNldFZpZXdWYWx1ZShuZXcgRGF0ZShuKSksbChhKX1mdW5jdGlvbiBrKCl7by4kc2V0VmFsaWRpdHkoInRpbWUiLCEwKSxhLmludmFsaWRIb3Vycz0hMSxhLmludmFsaWRNaW51dGVzPSExfWZ1bmN0aW9uIGwoYil7dmFyIGM9bi5nZXRIb3VycygpLGQ9bi5nZXRNaW51dGVzKCk7YS5zaG93TWVyaWRpYW4mJihjPTA9PT1jfHwxMj09PWM/MTI6YyUxMiksYS5ob3Vycz0iaCI9PT1iP2M6aShjKSxhLm1pbnV0ZXM9Im0iPT09Yj9kOmkoZCksYS5tZXJpZGlhbj1uLmdldEhvdXJzKCk8MTI/cFswXTpwWzFdfWZ1bmN0aW9uIG0oYSl7dmFyIGI9bmV3IERhdGUobi5nZXRUaW1lKCkrNmU0KmEpO24uc2V0SG91cnMoYi5nZXRIb3VycygpLGIuZ2V0TWludXRlcygpKSxqKCl9dmFyIG49bmV3IERhdGUsbz17JHNldFZpZXdWYWx1ZTphbmd1bGFyLm5vb3B9LHA9YW5ndWxhci5pc0RlZmluZWQoYi5tZXJpZGlhbnMpP2EuJHBhcmVudC4kZXZhbChiLm1lcmlkaWFucyk6Zi5tZXJpZGlhbnN8fGUuREFURVRJTUVfRk9STUFUUy5BTVBNUzt0aGlzLmluaXQ9ZnVuY3Rpb24oYyxkKXtvPWMsby4kcmVuZGVyPXRoaXMucmVuZGVyO3ZhciBlPWQuZXEoMCksZz1kLmVxKDEpLGg9YW5ndWxhci5pc0RlZmluZWQoYi5tb3VzZXdoZWVsKT9hLiRwYXJlbnQuJGV2YWwoYi5tb3VzZXdoZWVsKTpmLm1vdXNld2hlZWw7aCYmdGhpcy5zZXR1cE1vdXNld2hlZWxFdmVudHMoZSxnKSxhLnJlYWRvbmx5SW5wdXQ9YW5ndWxhci5pc0RlZmluZWQoYi5yZWFkb25seUlucHV0KT9hLiRwYXJlbnQuJGV2YWwoYi5yZWFkb25seUlucHV0KTpmLnJlYWRvbmx5SW5wdXQsdGhpcy5zZXR1cElucHV0RXZlbnRzKGUsZyl9O3ZhciBxPWYuaG91clN0ZXA7Yi5ob3VyU3RlcCYmYS4kcGFyZW50LiR3YXRjaChjKGIuaG91clN0ZXApLGZ1bmN0aW9uKGEpe3E9cGFyc2VJbnQoYSwxMCl9KTt2YXIgcj1mLm1pbnV0ZVN0ZXA7Yi5taW51dGVTdGVwJiZhLiRwYXJlbnQuJHdhdGNoKGMoYi5taW51dGVTdGVwKSxmdW5jdGlvbihhKXtyPXBhcnNlSW50KGEsMTApfSksYS5zaG93TWVyaWRpYW49Zi5zaG93TWVyaWRpYW4sYi5zaG93TWVyaWRpYW4mJmEuJHBhcmVudC4kd2F0Y2goYyhiLnNob3dNZXJpZGlhbiksZnVuY3Rpb24oYil7aWYoYS5zaG93TWVyaWRpYW49ISFiLG8uJGVycm9yLnRpbWUpe3ZhciBjPWcoKSxkPWgoKTthbmd1bGFyLmlzRGVmaW5lZChjKSYmYW5ndWxhci5pc0RlZmluZWQoZCkmJihuLnNldEhvdXJzKGMpLGooKSl9ZWxzZSBsKCl9KSx0aGlzLnNldHVwTW91c2V3aGVlbEV2ZW50cz1mdW5jdGlvbihiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe2Eub3JpZ2luYWxFdmVudCYmKGE9YS5vcmlnaW5hbEV2ZW50KTt2YXIgYj1hLndoZWVsRGVsdGE/YS53aGVlbERlbHRhOi1hLmRlbHRhWTtyZXR1cm4gYS5kZXRhaWx8fGI+MH07Yi5iaW5kKCJtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihiKXthLiRhcHBseShkKGIpP2EuaW5jcmVtZW50SG91cnMoKTphLmRlY3JlbWVudEhvdXJzKCkpLGIucHJldmVudERlZmF1bHQoKX0pLGMuYmluZCgibW91c2V3aGVlbCB3aGVlbCIsZnVuY3Rpb24oYil7YS4kYXBwbHkoZChiKT9hLmluY3JlbWVudE1pbnV0ZXMoKTphLmRlY3JlbWVudE1pbnV0ZXMoKSksYi5wcmV2ZW50RGVmYXVsdCgpfSl9LHRoaXMuc2V0dXBJbnB1dEV2ZW50cz1mdW5jdGlvbihiLGMpe2lmKGEucmVhZG9ubHlJbnB1dClyZXR1cm4gYS51cGRhdGVIb3Vycz1hbmd1bGFyLm5vb3Asdm9pZChhLnVwZGF0ZU1pbnV0ZXM9YW5ndWxhci5ub29wKTt2YXIgZD1mdW5jdGlvbihiLGMpe28uJHNldFZpZXdWYWx1ZShudWxsKSxvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGFuZ3VsYXIuaXNEZWZpbmVkKGIpJiYoYS5pbnZhbGlkSG91cnM9YiksYW5ndWxhci5pc0RlZmluZWQoYykmJihhLmludmFsaWRNaW51dGVzPWMpfTthLnVwZGF0ZUhvdXJzPWZ1bmN0aW9uKCl7dmFyIGE9ZygpO2FuZ3VsYXIuaXNEZWZpbmVkKGEpPyhuLnNldEhvdXJzKGEpLGooImgiKSk6ZCghMCl9LGIuYmluZCgiYmx1ciIsZnVuY3Rpb24oKXshYS5pbnZhbGlkSG91cnMmJmEuaG91cnM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5ob3Vycz1pKGEuaG91cnMpfSl9KSxhLnVwZGF0ZU1pbnV0ZXM9ZnVuY3Rpb24oKXt2YXIgYT1oKCk7YW5ndWxhci5pc0RlZmluZWQoYSk/KG4uc2V0TWludXRlcyhhKSxqKCJtIikpOmQodm9pZCAwLCEwKX0sYy5iaW5kKCJibHVyIixmdW5jdGlvbigpeyFhLmludmFsaWRNaW51dGVzJiZhLm1pbnV0ZXM8MTAmJmEuJGFwcGx5KGZ1bmN0aW9uKCl7YS5taW51dGVzPWkoYS5taW51dGVzKX0pfSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGE9by4kbW9kZWxWYWx1ZT9uZXcgRGF0ZShvLiRtb2RlbFZhbHVlKTpudWxsO2lzTmFOKGEpPyhvLiRzZXRWYWxpZGl0eSgidGltZSIsITEpLGQuZXJyb3IoJ1RpbWVwaWNrZXIgZGlyZWN0aXZlOiAibmctbW9kZWwiIHZhbHVlIG11c3QgYmUgYSBEYXRlIG9iamVjdCwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDAxLjAxLjE5NzAgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIFJGQzI4MjIgb3IgSVNPIDg2MDEgZGF0ZS4nKSk6KGEmJihuPWEpLGsoKSxsKCkpfSxhLmluY3JlbWVudEhvdXJzPWZ1bmN0aW9uKCl7bSg2MCpxKX0sYS5kZWNyZW1lbnRIb3Vycz1mdW5jdGlvbigpe20oNjAqLXEpfSxhLmluY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKHIpfSxhLmRlY3JlbWVudE1pbnV0ZXM9ZnVuY3Rpb24oKXttKC1yKX0sYS50b2dnbGVNZXJpZGlhbj1mdW5jdGlvbigpe20oNzIwKihuLmdldEhvdXJzKCk8MTI/MTotMSkpfX1dKS5kaXJlY3RpdmUoInRpbWVwaWNrZXIiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIscmVxdWlyZTpbInRpbWVwaWNrZXIiLCI/Xm5nTW9kZWwiXSxjb250cm9sbGVyOiJUaW1lcGlja2VyQ29udHJvbGxlciIscmVwbGFjZTohMCxzY29wZTp7fSx0ZW1wbGF0ZVVybDoidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ZFswXSxmPWRbMV07ZiYmZS5pbml0KGYsYi5maW5kKCJpbnB1dCIpKX19fSksYW5ndWxhci5tb2R1bGUoInVpLmJvb3RzdHJhcC50eXBlYWhlYWQiLFsidWkuYm9vdHN0cmFwLnBvc2l0aW9uIiwidWkuYm9vdHN0cmFwLmJpbmRIdG1sIl0pLmZhY3RvcnkoInR5cGVhaGVhZFBhcnNlciIsWyIkcGFyc2UiLGZ1bmN0aW9uKGEpe3ZhciBiPS9eXHMqKC4qPykoPzpccythc1xzKyguKj8pKT9ccytmb3JccysoPzooW1wkXHddW1wkXHdcZF0qKSlccytpblxzKyguKikkLztyZXR1cm57cGFyc2U6ZnVuY3Rpb24oYyl7dmFyIGQ9Yy5tYXRjaChiKTtpZighZCl0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHR5cGVhaGVhZCBzcGVjaWZpY2F0aW9uIGluIGZvcm0gb2YgIl9tb2RlbFZhbHVlXyAoYXMgX2xhYmVsXyk/IGZvciBfaXRlbV8gaW4gX2NvbGxlY3Rpb25fIiBidXQgZ290ICInK2MrJyIuJyk7cmV0dXJue2l0ZW1OYW1lOmRbM10sc291cmNlOmEoZFs0XSksdmlld01hcHBlcjphKGRbMl18fGRbMV0pLG1vZGVsTWFwcGVyOmEoZFsxXSl9fX19XSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWQiLFsiJGNvbXBpbGUiLCIkcGFyc2UiLCIkcSIsIiR0aW1lb3V0IiwiJGRvY3VtZW50IiwiJHBvc2l0aW9uIiwidHlwZWFoZWFkUGFyc2VyIixmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD1bOSwxMywyNywzOCw0MF07cmV0dXJue3JlcXVpcmU6Im5nTW9kZWwiLGxpbms6ZnVuY3Rpb24oaSxqLGssbCl7dmFyIG0sbj1pLiRldmFsKGsudHlwZWFoZWFkTWluTGVuZ3RoKXx8MSxvPWkuJGV2YWwoay50eXBlYWhlYWRXYWl0TXMpfHwwLHA9aS4kZXZhbChrLnR5cGVhaGVhZEVkaXRhYmxlKSE9PSExLHE9YihrLnR5cGVhaGVhZExvYWRpbmcpLmFzc2lnbnx8YW5ndWxhci5ub29wLHI9YihrLnR5cGVhaGVhZE9uU2VsZWN0KSxzPWsudHlwZWFoZWFkSW5wdXRGb3JtYXR0ZXI/YihrLnR5cGVhaGVhZElucHV0Rm9ybWF0dGVyKTp2b2lkIDAsdD1rLnR5cGVhaGVhZEFwcGVuZFRvQm9keT9pLiRldmFsKGsudHlwZWFoZWFkQXBwZW5kVG9Cb2R5KTohMSx1PWIoay5uZ01vZGVsKS5hc3NpZ24sdj1nLnBhcnNlKGsudHlwZWFoZWFkKSx3PWkuJG5ldygpO2kuJG9uKCIkZGVzdHJveSIsZnVuY3Rpb24oKXt3LiRkZXN0cm95KCl9KTt2YXIgeD0idHlwZWFoZWFkLSIrdy4kaWQrIi0iK01hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpO2ouYXR0cih7ImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtZXhwYW5kZWQiOiExLCJhcmlhLW93bnMiOnh9KTt2YXIgeT1hbmd1bGFyLmVsZW1lbnQoIjxkaXYgdHlwZWFoZWFkLXBvcHVwPjwvZGl2PiIpO3kuYXR0cih7aWQ6eCxtYXRjaGVzOiJtYXRjaGVzIixhY3RpdmU6ImFjdGl2ZUlkeCIsc2VsZWN0OiJzZWxlY3QoYWN0aXZlSWR4KSIscXVlcnk6InF1ZXJ5Iixwb3NpdGlvbjoicG9zaXRpb24ifSksYW5ndWxhci5pc0RlZmluZWQoay50eXBlYWhlYWRUZW1wbGF0ZVVybCkmJnkuYXR0cigidGVtcGxhdGUtdXJsIixrLnR5cGVhaGVhZFRlbXBsYXRlVXJsKTt2YXIgej1mdW5jdGlvbigpe3cubWF0Y2hlcz1bXSx3LmFjdGl2ZUlkeD0tMSxqLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKX0sQT1mdW5jdGlvbihhKXtyZXR1cm4geCsiLW9wdGlvbi0iK2F9O3cuJHdhdGNoKCJhY3RpdmVJZHgiLGZ1bmN0aW9uKGEpezA+YT9qLnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpOmouYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixBKGEpKX0pO3ZhciBCPWZ1bmN0aW9uKGEpe3ZhciBiPXskdmlld1ZhbHVlOmF9O3EoaSwhMCksYy53aGVuKHYuc291cmNlKGksYikpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGQ9YT09PWwuJHZpZXdWYWx1ZTtpZihkJiZtKWlmKGMubGVuZ3RoPjApe3cuYWN0aXZlSWR4PTAsdy5tYXRjaGVzLmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWJbdi5pdGVtTmFtZV09Y1tlXSx3Lm1hdGNoZXMucHVzaCh7aWQ6QShlKSxsYWJlbDp2LnZpZXdNYXBwZXIodyxiKSxtb2RlbDpjW2VdfSk7dy5xdWVyeT1hLHcucG9zaXRpb249dD9mLm9mZnNldChqKTpmLnBvc2l0aW9uKGopLHcucG9zaXRpb24udG9wPXcucG9zaXRpb24udG9wK2oucHJvcCgib2Zmc2V0SGVpZ2h0Iiksai5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCl9ZWxzZSB6KCk7ZCYmcShpLCExKX0sZnVuY3Rpb24oKXt6KCkscShpLCExKX0pfTt6KCksdy5xdWVyeT12b2lkIDA7dmFyIEM7bC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uKGEpe3JldHVybiBtPSEwLGEmJmEubGVuZ3RoPj1uP28+MD8oQyYmZC5jYW5jZWwoQyksQz1kKGZ1bmN0aW9uKCl7QihhKX0sbykpOkIoYSk6KHEoaSwhMSkseigpKSxwP2E6YT92b2lkIGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITEpOihsLiRzZXRWYWxpZGl0eSgiZWRpdGFibGUiLCEwKSxhKX0pLGwuJGZvcm1hdHRlcnMucHVzaChmdW5jdGlvbihhKXt2YXIgYixjLGQ9e307cmV0dXJuIHM/KGQuJG1vZGVsPWEscyhpLGQpKTooZFt2Lml0ZW1OYW1lXT1hLGI9di52aWV3TWFwcGVyKGksZCksZFt2Lml0ZW1OYW1lXT12b2lkIDAsYz12LnZpZXdNYXBwZXIoaSxkKSxiIT09Yz9iOmEpfSksdy5zZWxlY3Q9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPXt9O2Vbdi5pdGVtTmFtZV09Yz13Lm1hdGNoZXNbYV0ubW9kZWwsYj12Lm1vZGVsTWFwcGVyKGksZSksdShpLGIpLGwuJHNldFZhbGlkaXR5KCJlZGl0YWJsZSIsITApLHIoaSx7JGl0ZW06YywkbW9kZWw6YiwkbGFiZWw6di52aWV3TWFwcGVyKGksZSl9KSx6KCksZChmdW5jdGlvbigpe2pbMF0uZm9jdXMoKX0sMCwhMSl9LGouYmluZCgia2V5ZG93biIsZnVuY3Rpb24oYSl7MCE9PXcubWF0Y2hlcy5sZW5ndGgmJi0xIT09aC5pbmRleE9mKGEud2hpY2gpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLDQwPT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4KzEpJXcubWF0Y2hlcy5sZW5ndGgsdy4kZGlnZXN0KCkpOjM4PT09YS53aGljaD8ody5hY3RpdmVJZHg9KHcuYWN0aXZlSWR4P3cuYWN0aXZlSWR4OncubWF0Y2hlcy5sZW5ndGgpLTEsdy4kZGlnZXN0KCkpOjEzPT09YS53aGljaHx8OT09PWEud2hpY2g/dy4kYXBwbHkoZnVuY3Rpb24oKXt3LnNlbGVjdCh3LmFjdGl2ZUlkeCl9KToyNz09PWEud2hpY2gmJihhLnN0b3BQcm9wYWdhdGlvbigpLHooKSx3LiRkaWdlc3QoKSkpfSksai5iaW5kKCJibHVyIixmdW5jdGlvbigpe209ITF9KTt2YXIgRD1mdW5jdGlvbihhKXtqWzBdIT09YS50YXJnZXQmJih6KCksdy4kZGlnZXN0KCkpfTtlLmJpbmQoImNsaWNrIixEKSxpLiRvbigiJGRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZS51bmJpbmQoImNsaWNrIixEKX0pO3ZhciBFPWEoeSkodyk7dD9lLmZpbmQoImJvZHkiKS5hcHBlbmQoRSk6ai5hZnRlcihFKX19fV0pLmRpcmVjdGl2ZSgidHlwZWFoZWFkUG9wdXAiLGZ1bmN0aW9uKCl7cmV0dXJue3Jlc3RyaWN0OiJFQSIsc2NvcGU6e21hdGNoZXM6Ij0iLHF1ZXJ5OiI9IixhY3RpdmU6Ij0iLHBvc2l0aW9uOiI9IixzZWxlY3Q6IiYifSxyZXBsYWNlOiEwLHRlbXBsYXRlVXJsOiJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLGxpbms6ZnVuY3Rpb24oYSxiLGMpe2EudGVtcGxhdGVVcmw9Yy50ZW1wbGF0ZVVybCxhLmlzT3Blbj1mdW5jdGlvbigpe3JldHVybiBhLm1hdGNoZXMubGVuZ3RoPjB9LGEuaXNBY3RpdmU9ZnVuY3Rpb24oYil7cmV0dXJuIGEuYWN0aXZlPT1ifSxhLnNlbGVjdEFjdGl2ZT1mdW5jdGlvbihiKXthLmFjdGl2ZT1ifSxhLnNlbGVjdE1hdGNoPWZ1bmN0aW9uKGIpe2Euc2VsZWN0KHthY3RpdmVJZHg6Yn0pfX19fSkuZGlyZWN0aXZlKCJ0eXBlYWhlYWRNYXRjaCIsWyIkaHR0cCIsIiR0ZW1wbGF0ZUNhY2hlIiwiJGNvbXBpbGUiLCIkcGFyc2UiLGZ1bmN0aW9uKGEsYixjLGQpe3JldHVybntyZXN0cmljdDoiRUEiLHNjb3BlOntpbmRleDoiPSIsbWF0Y2g6Ij0iLHF1ZXJ5OiI9In0sbGluazpmdW5jdGlvbihlLGYsZyl7dmFyIGg9ZChnLnRlbXBsYXRlVXJsKShlLiRwYXJlbnQpfHwidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIjthLmdldChoLHtjYWNoZTpifSkuc3VjY2VzcyhmdW5jdGlvbihhKXtmLnJlcGxhY2VXaXRoKGMoYS50cmltKCkpKGUpKX0pfX19XSkuZmlsdGVyKCJ0eXBlYWhlYWRIaWdobGlnaHQiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYS5yZXBsYWNlKC8oWy4/KiteJFtcXVxcKCl7fXwtXSkvZywiXFwkMSIpfXJldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBjPygiIitiKS5yZXBsYWNlKG5ldyBSZWdFeHAoYShjKSwiZ2kiKSwiPHN0cm9uZz4kJjwvc3Ryb25nPiIpOmJ9fSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2FjY29yZGlvbi9hY2NvcmRpb24tZ3JvdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi1ncm91cC5odG1sIiwnPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+XG4gIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPlxuICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPlxuICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiIG5nLWNsaWNrPSJ0b2dnbGVPcGVuKCkiIGFjY29yZGlvbi10cmFuc2NsdWRlPSJoZWFkaW5nIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1tdXRlZFwnOiBpc0Rpc2FibGVkfSI+e3toZWFkaW5nfX08L3NwYW4+PC9hPlxuICAgIDwvaDQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJwYW5lbC1jb2xsYXBzZSIgY29sbGFwc2U9IiFpc09wZW4iPlxuCSAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWNjb3JkaW9uL2FjY29yZGlvbi5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9hY2NvcmRpb24vYWNjb3JkaW9uLmh0bWwiLCc8ZGl2IGNsYXNzPSJwYW5lbC1ncm91cCIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvYWxlcnQvYWxlcnQuaHRtbCIsJzxkaXYgY2xhc3M9ImFsZXJ0IiBuZy1jbGFzcz0ie1wnYWxlcnQte3t0eXBlIHx8IFwnd2FybmluZ1wnfX1cJzogdHJ1ZSwgXCdhbGVydC1kaXNtaXNzYWJsZVwnOiBjbG9zZWFibGV9IiByb2xlPSJhbGVydCI+XG4gICAgPGJ1dHRvbiBuZy1zaG93PSJjbG9zZWFibGUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBuZy1jbGljaz0iY2xvc2UoKSI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+Q2xvc2U8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvY2Fyb3VzZWwuaHRtbCIsJzxkaXYgbmctbW91c2VlbnRlcj0icGF1c2UoKSIgbmctbW91c2VsZWF2ZT0icGxheSgpIiBjbGFzcz0iY2Fyb3VzZWwiIG5nLXN3aXBlLXJpZ2h0PSJwcmV2KCkiIG5nLXN3aXBlLWxlZnQ9Im5leHQoKSI+XG4gICAgPG9sIGNsYXNzPSJjYXJvdXNlbC1pbmRpY2F0b3JzIiBuZy1zaG93PSJzbGlkZXMubGVuZ3RoID4gMSI+XG4gICAgICAgIDxsaSBuZy1yZXBlYXQ9InNsaWRlIGluIHNsaWRlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZShzbGlkZSl9IiBuZy1jbGljaz0ic2VsZWN0KHNsaWRlKSI+PC9saT5cbiAgICA8L29sPlxuICAgIDxkaXYgY2xhc3M9ImNhcm91c2VsLWlubmVyIiBuZy10cmFuc2NsdWRlPjwvZGl2PlxuICAgIDxhIGNsYXNzPSJsZWZ0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJwcmV2KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLWxlZnQiPjwvc3Bhbj48L2E+XG4gICAgPGEgY2xhc3M9InJpZ2h0IGNhcm91c2VsLWNvbnRyb2wiIG5nLWNsaWNrPSJuZXh0KCkiIG5nLXNob3c9InNsaWRlcy5sZW5ndGggPiAxIj48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L3NwYW4+PC9hPlxuPC9kaXY+XG4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvY2Fyb3VzZWwvc2xpZGUuaHRtbCIsIjxkaXYgbmctY2xhc3M9XCJ7XG4gICAgJ2FjdGl2ZSc6IGxlYXZpbmcgfHwgKGFjdGl2ZSAmJiAhZW50ZXJpbmcpLFxuICAgICdwcmV2JzogKG5leHQgfHwgYWN0aXZlKSAmJiBkaXJlY3Rpb249PSdwcmV2JyxcbiAgICAnbmV4dCc6IChuZXh0IHx8IGFjdGl2ZSkgJiYgZGlyZWN0aW9uPT0nbmV4dCcsXG4gICAgJ3JpZ2h0JzogZGlyZWN0aW9uPT0ncHJldicsXG4gICAgJ2xlZnQnOiBkaXJlY3Rpb249PSduZXh0J1xuICB9XCIgY2xhc3M9XCJpdGVtIHRleHQtY2VudGVyXCIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL2RhdGVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmh0bWwiLCc8ZGl2IG5nLXN3aXRjaD0iZGF0ZXBpY2tlck1vZGUiIHJvbGU9ImFwcGxpY2F0aW9uIiBuZy1rZXlkb3duPSJrZXlkb3duKCRldmVudCkiPlxuICA8ZGF5cGlja2VyIG5nLXN3aXRjaC13aGVuPSJkYXkiIHRhYmluZGV4PSIwIj48L2RheXBpY2tlcj5cbiAgPG1vbnRocGlja2VyIG5nLXN3aXRjaC13aGVuPSJtb250aCIgdGFiaW5kZXg9IjAiPjwvbW9udGhwaWNrZXI+XG4gIDx5ZWFycGlja2VyIG5nLXN3aXRjaC13aGVuPSJ5ZWFyIiB0YWJpbmRleD0iMCI+PC95ZWFycGlja2VyPlxuPC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvZGF5Lmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0ie3s1ICsgc2hvd1dlZWtzfX0iPjxidXR0b24gaWQ9Int7dW5pcXVlSWR9fS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIiBuZy1jbGljaz0idG9nZ2xlTW9kZSgpIiB0YWJpbmRleD0iLTEiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+PHN0cm9uZz57e3RpdGxlfX08L3N0cm9uZz48L2J1dHRvbj48L3RoPlxuICAgICAgPHRoPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBwdWxsLXJpZ2h0IiBuZy1jbGljaz0ibW92ZSgxKSIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICA8L3RyPlxuICAgIDx0cj5cbiAgICAgIDx0aCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PC90aD5cbiAgICAgIDx0aCBuZy1yZXBlYXQ9ImxhYmVsIGluIGxhYmVscyB0cmFjayBieSAkaW5kZXgiIGNsYXNzPSJ0ZXh0LWNlbnRlciI+PHNtYWxsIGFyaWEtbGFiZWw9Int7bGFiZWwuZnVsbH19Ij57e2xhYmVsLmFiYnJ9fTwvc21hbGw+PC90aD5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHk+XG4gICAgPHRyIG5nLXJlcGVhdD0icm93IGluIHJvd3MgdHJhY2sgYnkgJGluZGV4Ij5cbiAgICAgIDx0ZCBuZy1zaG93PSJzaG93V2Vla3MiIGNsYXNzPSJ0ZXh0LWNlbnRlciBoNiI+PGVtPnt7IHdlZWtOdW1iZXJzWyRpbmRleF0gfX08L2VtPjwvdGQ+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtbXV0ZWRcJzogZHQuc2Vjb25kYXJ5LCBcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL21vbnRoLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL2RhdGVwaWNrZXIvbW9udGguaHRtbCIsJzx0YWJsZSByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9Int7dW5pcXVlSWR9fS10aXRsZSIgYXJpYS1hY3RpdmVkZXNjZW5kYW50PSJ7e2FjdGl2ZURhdGVJZH19Ij5cbiAgPHRoZWFkPlxuICAgIDx0cj5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1sZWZ0IiBuZy1jbGljaz0ibW92ZSgtMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1sZWZ0Ij48L2k+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIGlkPSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBhcmlhLWF0b21pYz0idHJ1ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSIgbmctY2xpY2s9InRvZ2dsZU1vZGUoKSIgdGFiaW5kZXg9Ii0xIiBzdHlsZT0id2lkdGg6MTAwJTsiPjxzdHJvbmc+e3t0aXRsZX19PC9zdHJvbmc+PC9idXR0b24+PC90aD5cbiAgICAgIDx0aD48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20gcHVsbC1yaWdodCIgbmctY2xpY2s9Im1vdmUoMSkiIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1yaWdodCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIDx0ciBuZy1yZXBlYXQ9InJvdyBpbiByb3dzIHRyYWNrIGJ5ICRpbmRleCI+XG4gICAgICA8dGQgbmctcmVwZWF0PSJkdCBpbiByb3cgdHJhY2sgYnkgZHQuZGF0ZSIgY2xhc3M9InRleHQtY2VudGVyIiByb2xlPSJncmlkY2VsbCIgaWQ9Int7ZHQudWlkfX0iIGFyaWEtZGlzYWJsZWQ9Int7ISFkdC5kaXNhYmxlZH19Ij5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIHN0eWxlPSJ3aWR0aDoxMDAlOyIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgbmctY2xhc3M9IntcJ2J0bi1pbmZvXCc6IGR0LnNlbGVjdGVkLCBhY3RpdmU6IGlzQWN0aXZlKGR0KX0iIG5nLWNsaWNrPSJzZWxlY3QoZHQuZGF0ZSkiIG5nLWRpc2FibGVkPSJkdC5kaXNhYmxlZCIgdGFiaW5kZXg9Ii0xIj48c3BhbiBuZy1jbGFzcz0ie1wndGV4dC1pbmZvXCc6IGR0LmN1cnJlbnR9Ij57e2R0LmxhYmVsfX08L3NwYW4+PC9idXR0b24+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL2RhdGVwaWNrZXIvcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci9wb3B1cC5odG1sIiwnPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiBuZy1zdHlsZT0ie2Rpc3BsYXk6IChpc09wZW4gJiYgXCdibG9ja1wnKSB8fCBcJ25vbmVcJywgdG9wOiBwb3NpdGlvbi50b3ArXCdweFwnLCBsZWZ0OiBwb3NpdGlvbi5sZWZ0K1wncHhcJ30iIG5nLWtleWRvd249ImtleWRvd24oJGV2ZW50KSI+XG4JPGxpIG5nLXRyYW5zY2x1ZGU+PC9saT5cbgk8bGkgbmctaWY9InNob3dCdXR0b25CYXIiIHN0eWxlPSJwYWRkaW5nOjEwcHggOXB4IDJweCI+XG4JCTxzcGFuIGNsYXNzPSJidG4tZ3JvdXAiPlxuCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1pbmZvIiBuZy1jbGljaz0ic2VsZWN0KFwndG9kYXlcJykiPnt7IGdldFRleHQoXCdjdXJyZW50XCcpIH19PC9idXR0b24+XG4JCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLWRhbmdlciIgbmctY2xpY2s9InNlbGVjdChudWxsKSI+e3sgZ2V0VGV4dChcJ2NsZWFyXCcpIH19PC9idXR0b24+XG4JCTwvc3Bhbj5cbgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJjbG9zZSgpIj57eyBnZXRUZXh0KFwnY2xvc2VcJykgfX08L2J1dHRvbj5cbgk8L2xpPlxuPC91bD5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9kYXRlcGlja2VyL3llYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvZGF0ZXBpY2tlci95ZWFyLmh0bWwiLCc8dGFibGUgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSJ7e3VuaXF1ZUlkfX0tdGl0bGUiIGFyaWEtYWN0aXZlZGVzY2VuZGFudD0ie3thY3RpdmVEYXRlSWR9fSI+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtbGVmdCIgbmctY2xpY2s9Im1vdmUoLTEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tbGVmdCI+PC9pPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGggY29sc3Bhbj0iMyI+PGJ1dHRvbiBpZD0ie3t1bmlxdWVJZH19LXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgYXJpYS1hdG9taWM9InRydWUiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBidG4tc20iIG5nLWNsaWNrPSJ0b2dnbGVNb2RlKCkiIHRhYmluZGV4PSItMSIgc3R5bGU9IndpZHRoOjEwMCU7Ij48c3Ryb25nPnt7dGl0bGV9fTwvc3Ryb25nPjwvYnV0dG9uPjwvdGg+XG4gICAgICA8dGg+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIHB1bGwtcmlnaHQiIG5nLWNsaWNrPSJtb3ZlKDEpIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQiPjwvaT48L2J1dHRvbj48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8dHIgbmctcmVwZWF0PSJyb3cgaW4gcm93cyB0cmFjayBieSAkaW5kZXgiPlxuICAgICAgPHRkIG5nLXJlcGVhdD0iZHQgaW4gcm93IHRyYWNrIGJ5IGR0LmRhdGUiIGNsYXNzPSJ0ZXh0LWNlbnRlciIgcm9sZT0iZ3JpZGNlbGwiIGlkPSJ7e2R0LnVpZH19IiBhcmlhLWRpc2FibGVkPSJ7eyEhZHQuZGlzYWJsZWR9fSI+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzdHlsZT0id2lkdGg6MTAwJTsiIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLWNsYXNzPSJ7XCdidG4taW5mb1wnOiBkdC5zZWxlY3RlZCwgYWN0aXZlOiBpc0FjdGl2ZShkdCl9IiBuZy1jbGljaz0ic2VsZWN0KGR0LmRhdGUpIiBuZy1kaXNhYmxlZD0iZHQuZGlzYWJsZWQiIHRhYmluZGV4PSItMSI+PHNwYW4gbmctY2xhc3M9IntcJ3RleHQtaW5mb1wnOiBkdC5jdXJyZW50fSI+e3tkdC5sYWJlbH19PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3Rib2R5PlxuPC90YWJsZT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9tb2RhbC9iYWNrZHJvcC5odG1sIiwnPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgZmFkZSJcbiAgICAgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iXG4gICAgIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNDAgKyAoaW5kZXggJiYgMSB8fCAwKSArIGluZGV4KjEwfSJcbj48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9tb2RhbC93aW5kb3cuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvbW9kYWwvd2luZG93Lmh0bWwiLCc8ZGl2IHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBjbGFzcz0ibW9kYWwgZmFkZSIgbmctY2xhc3M9IntpbjogYW5pbWF0ZX0iIG5nLXN0eWxlPSJ7XCd6LWluZGV4XCc6IDEwNTAgKyBpbmRleCoxMCwgZGlzcGxheTogXCdibG9ja1wnfSIgbmctY2xpY2s9ImNsb3NlKCRldmVudCkiPlxuICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgbmctY2xhc3M9IntcJ21vZGFsLXNtXCc6IHNpemUgPT0gXCdzbVwnLCBcJ21vZGFsLWxnXCc6IHNpemUgPT0gXCdsZ1wnfSI+PGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCIgbmctdHJhbnNjbHVkZT48L2Rpdj48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9wYWdpbmF0aW9uL3BhZ2VyLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnZXIuaHRtbCIsJzx1bCBjbGFzcz0icGFnZXIiPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9QcmV2aW91cygpLCBwcmV2aW91czogYWxpZ259Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UgLSAxKSI+e3tnZXRUZXh0KFwncHJldmlvdXNcJyl9fTwvYT48L2xpPlxuICA8bGkgbmctY2xhc3M9IntkaXNhYmxlZDogbm9OZXh0KCksIG5leHQ6IGFsaWdufSI+PGEgaHJlZiBuZy1jbGljaz0ic2VsZWN0UGFnZShwYWdlICsgMSkiPnt7Z2V0VGV4dChcJ25leHRcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5odG1sIiwnPHVsIGNsYXNzPSJwYWdpbmF0aW9uIj5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub1ByZXZpb3VzKCl9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKDEpIj57e2dldFRleHQoXCdmaXJzdFwnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1pZj0iZGlyZWN0aW9uTGlua3MiIG5nLWNsYXNzPSJ7ZGlzYWJsZWQ6IG5vUHJldmlvdXMoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSAtIDEpIj57e2dldFRleHQoXCdwcmV2aW91c1wnKX19PC9hPjwvbGk+XG4gIDxsaSBuZy1yZXBlYXQ9InBhZ2UgaW4gcGFnZXMgdHJhY2sgYnkgJGluZGV4IiBuZy1jbGFzcz0ie2FjdGl2ZTogcGFnZS5hY3RpdmV9Ij48YSBocmVmIG5nLWNsaWNrPSJzZWxlY3RQYWdlKHBhZ2UubnVtYmVyKSI+e3twYWdlLnRleHR9fTwvYT48L2xpPlxuICA8bGkgbmctaWY9ImRpcmVjdGlvbkxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UocGFnZSArIDEpIj57e2dldFRleHQoXCduZXh0XCcpfX08L2E+PC9saT5cbiAgPGxpIG5nLWlmPSJib3VuZGFyeUxpbmtzIiBuZy1jbGFzcz0ie2Rpc2FibGVkOiBub05leHQoKX0iPjxhIGhyZWYgbmctY2xpY2s9InNlbGVjdFBhZ2UodG90YWxQYWdlcykiPnt7Z2V0VGV4dChcJ2xhc3RcJyl9fTwvYT48L2xpPlxuPC91bD4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLWh0bWwtdW5zYWZlLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Rvb2x0aXAvdG9vbHRpcC1odG1sLXVuc2FmZS1wb3B1cC5odG1sIiwnPGRpdiBjbGFzcz0idG9vbHRpcCB7e3BsYWNlbWVudH19IiBuZy1jbGFzcz0ieyBpbjogaXNPcGVuKCksIGZhZGU6IGFuaW1hdGlvbigpIH0iPlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj5cbiAgPGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciIgYmluZC1odG1sLXVuc2FmZT0iY29udGVudCI+PC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90b29sdGlwL3Rvb2x0aXAtcG9wdXAuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdG9vbHRpcC90b29sdGlwLXBvcHVwLmh0bWwiLCc8ZGl2IGNsYXNzPSJ0b29sdGlwIHt7cGxhY2VtZW50fX0iIG5nLWNsYXNzPSJ7IGluOiBpc09wZW4oKSwgZmFkZTogYW5pbWF0aW9uKCkgfSI+XG4gIDxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIiBuZy1iaW5kPSJjb250ZW50Ij48L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3BvcG92ZXIvcG9wb3Zlci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wb3BvdmVyL3BvcG92ZXIuaHRtbCIsJzxkaXYgY2xhc3M9InBvcG92ZXIge3twbGFjZW1lbnR9fSIgbmctY2xhc3M9InsgaW46IGlzT3BlbigpLCBmYWRlOiBhbmltYXRpb24oKSB9Ij5cbiAgPGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPlxuICAgICAgPGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIiBuZy1iaW5kPSJ0aXRsZSIgbmctc2hvdz0idGl0bGUiPjwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiIG5nLWJpbmQ9ImNvbnRlbnQiPjwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL2Jhci5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS9wcm9ncmVzc2Jhci9iYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzLWJhciIgbmctY2xhc3M9InR5cGUgJiYgXCdwcm9ncmVzcy1iYXItXCcgKyB0eXBlIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW5vdz0ie3t2YWx1ZX19IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e21heH19IiBuZy1zdHlsZT0ie3dpZHRoOiBwZXJjZW50ICsgXCclXCd9IiBhcmlhLXZhbHVldGV4dD0ie3twZXJjZW50IHwgbnVtYmVyOjB9fSUiIG5nLXRyYW5zY2x1ZGU+PC9kaXY+Jyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3Byb2dyZXNzYmFyL3Byb2dyZXNzLmh0bWwiLCc8ZGl2IGNsYXNzPSJwcm9ncmVzcyIgbmctdHJhbnNjbHVkZT48L2Rpdj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuaHRtbCIsJzxkaXYgY2xhc3M9InByb2dyZXNzIj5cbiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBuZy1jbGFzcz0idHlwZSAmJiBcJ3Byb2dyZXNzLWJhci1cJyArIHR5cGUiIHJvbGU9InByb2dyZXNzYmFyIiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Int7bWF4fX0iIG5nLXN0eWxlPSJ7d2lkdGg6IHBlcmNlbnQgKyBcJyVcJ30iIGFyaWEtdmFsdWV0ZXh0PSJ7e3BlcmNlbnQgfCBudW1iZXI6MH19JSIgbmctdHJhbnNjbHVkZT48L2Rpdj5cbjwvZGl2PicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS9yYXRpbmcvcmF0aW5nLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3JhdGluZy9yYXRpbmcuaHRtbCIsJzxzcGFuIG5nLW1vdXNlbGVhdmU9InJlc2V0KCkiIG5nLWtleWRvd249Im9uS2V5ZG93bigkZXZlbnQpIiB0YWJpbmRleD0iMCIgcm9sZT0ic2xpZGVyIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSJ7e3JhbmdlLmxlbmd0aH19IiBhcmlhLXZhbHVlbm93PSJ7e3ZhbHVlfX0iPlxuICAgIDxpIG5nLXJlcGVhdD0iciBpbiByYW5nZSB0cmFjayBieSAkaW5kZXgiIG5nLW1vdXNlZW50ZXI9ImVudGVyKCRpbmRleCArIDEpIiBuZy1jbGljaz0icmF0ZSgkaW5kZXggKyAxKSIgY2xhc3M9ImdseXBoaWNvbiIgbmctY2xhc3M9IiRpbmRleCA8IHZhbHVlICYmIChyLnN0YXRlT24gfHwgXCdnbHlwaGljb24tc3RhclwnKSB8fCAoci5zdGF0ZU9mZiB8fCBcJ2dseXBoaWNvbi1zdGFyLWVtcHR5XCcpIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPih7eyAkaW5kZXggPCB2YWx1ZSA/IFwnKlwnIDogXCcgXCcgfX0pPC9zcGFuPlxuICAgIDwvaT5cbjwvc3Bhbj4nKX1dKSxhbmd1bGFyLm1vZHVsZSgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWIuaHRtbCIsJzxsaSBuZy1jbGFzcz0ie2FjdGl2ZTogYWN0aXZlLCBkaXNhYmxlZDogZGlzYWJsZWR9Ij5cbiAgPGEgbmctY2xpY2s9InNlbGVjdCgpIiB0YWItaGVhZGluZy10cmFuc2NsdWRlPnt7aGVhZGluZ319PC9hPlxuPC9saT5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC10aXRsZXMuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGFicy90YWJzZXQtdGl0bGVzLmh0bWwiLCI8dWwgY2xhc3M9XCJuYXYge3t0eXBlICYmICduYXYtJyArIHR5cGV9fVwiIG5nLWNsYXNzPVwieyduYXYtc3RhY2tlZCc6IHZlcnRpY2FsfVwiPlxuPC91bD5cbiIpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIixbXSkucnVuKFsiJHRlbXBsYXRlQ2FjaGUiLGZ1bmN0aW9uKGEpe2EucHV0KCJ0ZW1wbGF0ZS90YWJzL3RhYnNldC5odG1sIiwnXG48ZGl2PlxuICA8dWwgY2xhc3M9Im5hdiBuYXYte3t0eXBlIHx8IFwndGFic1wnfX0iIG5nLWNsYXNzPSJ7XCduYXYtc3RhY2tlZFwnOiB2ZXJ0aWNhbCwgXCduYXYtanVzdGlmaWVkXCc6IGp1c3RpZmllZH0iIG5nLXRyYW5zY2x1ZGU+PC91bD5cbiAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPlxuICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIiBcbiAgICAgICAgIG5nLXJlcGVhdD0idGFiIGluIHRhYnMiIFxuICAgICAgICAgbmctY2xhc3M9InthY3RpdmU6IHRhYi5hY3RpdmV9IlxuICAgICAgICAgdGFiLWNvbnRlbnQtdHJhbnNjbHVkZT0idGFiIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90aW1lcGlja2VyL3RpbWVwaWNrZXIuaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdGltZXBpY2tlci90aW1lcGlja2VyLmh0bWwiLCc8dGFibGU+XG4JPHRib2R5PlxuCQk8dHIgY2xhc3M9InRleHQtY2VudGVyIj5cbgkJCTx0ZD48YSBuZy1jbGljaz0iaW5jcmVtZW50SG91cnMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImluY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi11cCI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkIG5nLXNob3c9InNob3dNZXJpZGlhbiI+PC90ZD5cbgkJPC90cj5cbgkJPHRyPlxuCQkJPHRkIHN0eWxlPSJ3aWR0aDo1MHB4OyIgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWNsYXNzPSJ7XCdoYXMtZXJyb3JcJzogaW52YWxpZEhvdXJzfSI+XG4JCQkJPGlucHV0IHR5cGU9InRleHQiIG5nLW1vZGVsPSJob3VycyIgbmctY2hhbmdlPSJ1cGRhdGVIb3VycygpIiBjbGFzcz0iZm9ybS1jb250cm9sIHRleHQtY2VudGVyIiBuZy1tb3VzZXdoZWVsPSJpbmNyZW1lbnRIb3VycygpIiBuZy1yZWFkb25seT0icmVhZG9ubHlJbnB1dCIgbWF4bGVuZ3RoPSIyIj5cbgkJCTwvdGQ+XG4JCQk8dGQ+OjwvdGQ+XG4JCQk8dGQgc3R5bGU9IndpZHRoOjUwcHg7IiBjbGFzcz0iZm9ybS1ncm91cCIgbmctY2xhc3M9IntcJ2hhcy1lcnJvclwnOiBpbnZhbGlkTWludXRlc30iPlxuCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuZy1tb2RlbD0ibWludXRlcyIgbmctY2hhbmdlPSJ1cGRhdGVNaW51dGVzKCkiIGNsYXNzPSJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIiIG5nLXJlYWRvbmx5PSJyZWFkb25seUlucHV0IiBtYXhsZW5ndGg9IjIiPlxuCQkJPC90ZD5cbgkJCTx0ZCBuZy1zaG93PSJzaG93TWVyaWRpYW4iPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IHRleHQtY2VudGVyIiBuZy1jbGljaz0idG9nZ2xlTWVyaWRpYW4oKSI+e3ttZXJpZGlhbn19PC9idXR0b24+PC90ZD5cbgkJPC90cj5cbgkJPHRyIGNsYXNzPSJ0ZXh0LWNlbnRlciI+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudEhvdXJzKCkiIGNsYXNzPSJidG4gYnRuLWxpbmsiPjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNoZXZyb24tZG93biI+PC9zcGFuPjwvYT48L3RkPlxuCQkJPHRkPiZuYnNwOzwvdGQ+XG4JCQk8dGQ+PGEgbmctY2xpY2s9ImRlY3JlbWVudE1pbnV0ZXMoKSIgY2xhc3M9ImJ0biBidG4tbGluayI+PHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duIj48L3NwYW4+PC9hPjwvdGQ+XG4JCQk8dGQgbmctc2hvdz0ic2hvd01lcmlkaWFuIj48L3RkPlxuCQk8L3RyPlxuCTwvdGJvZHk+XG48L3RhYmxlPlxuJyl9XSksYW5ndWxhci5tb2R1bGUoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtbWF0Y2guaHRtbCIsW10pLnJ1bihbIiR0ZW1wbGF0ZUNhY2hlIixmdW5jdGlvbihhKXthLnB1dCgidGVtcGxhdGUvdHlwZWFoZWFkL3R5cGVhaGVhZC1tYXRjaC5odG1sIiwnPGEgdGFiaW5kZXg9Ii0xIiBiaW5kLWh0bWwtdW5zYWZlPSJtYXRjaC5sYWJlbCB8IHR5cGVhaGVhZEhpZ2hsaWdodDpxdWVyeSI+PC9hPicpfV0pLGFuZ3VsYXIubW9kdWxlKCJ0ZW1wbGF0ZS90eXBlYWhlYWQvdHlwZWFoZWFkLXBvcHVwLmh0bWwiLFtdKS5ydW4oWyIkdGVtcGxhdGVDYWNoZSIsZnVuY3Rpb24oYSl7YS5wdXQoInRlbXBsYXRlL3R5cGVhaGVhZC90eXBlYWhlYWQtcG9wdXAuaHRtbCIsJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSIgbmctaWY9ImlzT3BlbigpIiBuZy1zdHlsZT0ie3RvcDogcG9zaXRpb24udG9wK1wncHhcJywgbGVmdDogcG9zaXRpb24ubGVmdCtcJ3B4XCd9IiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IiByb2xlPSJsaXN0Ym94IiBhcmlhLWhpZGRlbj0ie3shaXNPcGVuKCl9fSI+XG4gICAgPGxpIG5nLXJlcGVhdD0ibWF0Y2ggaW4gbWF0Y2hlcyB0cmFjayBieSAkaW5kZXgiIG5nLWNsYXNzPSJ7YWN0aXZlOiBpc0FjdGl2ZSgkaW5kZXgpIH0iIG5nLW1vdXNlZW50ZXI9InNlbGVjdEFjdGl2ZSgkaW5kZXgpIiBuZy1jbGljaz0ic2VsZWN0TWF0Y2goJGluZGV4KSIgcm9sZT0ib3B0aW9uIiBpZD0ie3ttYXRjaC5pZH19Ij5cbiAgICAgICAgPGRpdiB0eXBlYWhlYWQtbWF0Y2ggaW5kZXg9IiRpbmRleCIgbWF0Y2g9Im1hdGNoIiBxdWVyeT0icXVlcnkiIHRlbXBsYXRlLXVybD0idGVtcGxhdGVVcmwiPjwvZGl2PlxuICAgIDwvbGk+XG48L3VsPicpCit9XSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RhYmxlcy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlM2I1YwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90YWJsZXMucHkKQEAgLTAsMCArMSw0NTMgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIHRvYXN0ZXJndWkud2lkZ2V0cyBpbXBvcnQgVG9hc3RlclRhYmxlCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFJlY2lwZSwgUHJvamVjdExheWVyLCBMYXllcl9WZXJzaW9uLCBNYWNoaW5lLCBQcm9qZWN0Citmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEsIE1heAorZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwKK2Zyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXZlcnNlCitmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBUZW1wbGF0ZVZpZXcKKworCitjbGFzcyBQcm9qZWN0RmlsdGVyc01peGluKG9iamVjdCk6CisgICAgIiIiQ29tbW9uIG1peGluIGZvciByZWNpcGUsIG1hY2hpbmUgaW4gcHJvamVjdCBmaWx0ZXJzIiIiCisKKyAgICBkZWYgZmlsdGVyX2luX3Byb2plY3Qoc2VsZiwgY291bnRfb25seT1GYWxzZSk6CisgICAgICAgIHF1ZXJ5ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9faW49c2VsZi5wcm9qZWN0X2xheWVycykKKyAgICAgICAgaWYgY291bnRfb25seToKKyAgICAgICAgICAgIHJldHVybiBxdWVyeS5jb3VudCgpCisKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHF1ZXJ5CisKKyAgICBkZWYgZmlsdGVyX25vdF9pbl9wcm9qZWN0KHNlbGYsIGNvdW50X29ubHk9RmFsc2UpOgorICAgICAgICBxdWVyeSA9IHNlbGYucXVlcnlzZXQuZXhjbHVkZShsYXllcl92ZXJzaW9uX19pbj1zZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICBpZiBjb3VudF9vbmx5OgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmNvdW50KCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcXVlcnkKKworY2xhc3MgTGF5ZXJzVGFibGUoVG9hc3RlclRhYmxlKToKKyAgICAiIiJUYWJsZSBvZiBsYXllcnMgaW4gVG9hc3RlciIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKExheWVyc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gImxheWVyX19uYW1lIgorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTGF5ZXJzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKworICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcm9qZWN0CisgICAgICAgIGNvbnRleHRbJ3Byb2plY3RsYXllcnMnXSA9IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1wcm9qZWN0KSkKKworICAgICAgICByZXR1cm4gY29udGV4dAorCisKKyAgICBkZWYgc2V0dXBfZmlsdGVycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnByb2plY3RfbGF5ZXJzID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJvamVjdCkKKworCisgICAgICAgIHNlbGYuYWRkX2ZpbHRlcih0aXRsZT0iRmlsdGVyIGJ5IHByb2plY3QgbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWN0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oImluX3Byb2plY3QiLCAiTGF5ZXJzIGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX2luX3Byb2plY3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJub3RfaW5fcHJvamVjdCIsICJMYXllcnMgbm90IGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX25vdF9pbl9wcm9qZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiBmaWx0ZXJfaW5fcHJvamVjdChzZWxmLCBjb3VudF9vbmx5PUZhbHNlKToKKyAgICAgICAgcXVlcnkgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihwcm9qZWN0bGF5ZXJfX2luPXNlbGYucHJvamVjdF9sYXllcnMpCisgICAgICAgIGlmIGNvdW50X29ubHk6CisgICAgICAgICAgICByZXR1cm4gcXVlcnkuY291bnQoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBxdWVyeQorCisgICAgZGVmIGZpbHRlcl9ub3RfaW5fcHJvamVjdChzZWxmLCBjb3VudF9vbmx5PUZhbHNlKToKKyAgICAgICAgcXVlcnkgPSBzZWxmLnF1ZXJ5c2V0LmV4Y2x1ZGUocHJvamVjdGxheWVyX19pbj1zZWxmLnByb2plY3RfbGF5ZXJzKQorICAgICAgICBpZiBjb3VudF9vbmx5OgorICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmNvdW50KCkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcXVlcnkKKworCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBrd2FyZ3NbJ3BpZCddKQorICAgICAgICBjb21wYXRpYmxlX2xheWVycyA9IHByai5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKQorCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBjb21wYXRpYmxlX2xheWVycy5vcmRlcl9ieShzZWxmLmRlZmF1bHRfb3JkZXJieSkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgbGF5ZXJfbGlua190ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgorICAgICAgICAgIHt7ZGF0YS5sYXllci5uYW1lfX0KKyAgICAgICAgPC9hPgorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl9fbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1sYXllcl9saW5rX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU3VtbWFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJsYXllcl9fc3VtbWFyeSIpCisKKyAgICAgICAgZ2l0X3VybF90ZW1wbGF0ZSA9ICcnJworICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEuaWQgJX0iPgorICAgICAgICAgIDxjb2RlPnt7ZGF0YS5sYXllci52Y3NfdXJsfX08L2NvZGU+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgaWYgZGF0YS5nZXRfdmNzX2xpbmtfdXJsICV9CisgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJ7eyBkYXRhLmdldF92Y3NfbGlua191cmwgfX0iPgorICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iR2l0IHJlcG9zaXRvcnkgVVJMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIEdpdCByZXBvc2l0b3J5IGZvciB0aGUgbGF5ZXIgc291cmNlIGNvZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl9fdmNzX3VybCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1naXRfdXJsX3RlbXBsYXRlKQorCisgICAgICAgIGdpdF9kaXJfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmlkICV9Ij4KKyAgICAgICAgIDxjb2RlPnt7ZGF0YS5kaXJwYXRofX08L2NvZGU+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgaWYgZGF0YS5kaXJwYXRoIGFuZCBkYXRhLmdldF92Y3NfZGlycGF0aF9saW5rX3VybCAlfQorICAgICAgICA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0ie3sgZGF0YS5nZXRfdmNzX2RpcnBhdGhfbGlua191cmwgfX0iPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0nJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlN1YmRpcmVjdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBsYXllciBkaXJlY3Rvcnkgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImdpdF9zdWJkaXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9Z2l0X2Rpcl90ZW1wbGF0ZSkKKworICAgICAgICByZXZpc2lvbl90ZW1wbGF0ZSA9ICAnJycKKyAgICAgICAgeyUgbG9hZCBwcm9qZWN0dGFncyAgJX0KKyAgICAgICAgeyUgd2l0aCB2Y3NfcmVmPWRhdGEuZ2V0X3Zjc19yZWZlcmVuY2UgJX0KKyAgICAgICAgeyUgaWYgdmNzX3JlZnxpc19zaGFpZCAlfQorICAgICAgICA8YSBjbGFzcz0iYnRuIiBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPiA8bGk+e3t2Y3NfcmVmfX08L2xpPiA8L3VsPiI+CisgICAgICAgIHt7dmNzX3JlZnx0cnVuY2F0ZWNoYXJzOjEwfX0KKyAgICAgICAgPC9hPgorICAgICAgICB7JSBlbHNlICV9CisgICAgICAgIHt7dmNzX3JlZn19CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZXZpc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBHaXQgYnJhbmNoLCB0YWcgb3IgY29tbWl0LiBGb3IgdGhlIGxheWVycyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlLCB0aGUgcmV2aXNpb24gaXMgYWx3YXlzIHRoZSBicmFuY2ggY29tcGF0aWJsZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHZlcnNpb24geW91IHNlbGVjdGVkIGZvciB0aGlzIHByb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0icmV2aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9cmV2aXNpb25fdGVtcGxhdGUpCisKKyAgICAgICAgZGVwc190ZW1wbGF0ZSA9ICcnJworICAgICAgICB7JSB3aXRoIG9kcz1kYXRhLmRlcGVuZGVuY2llcy5hbGwlfQorICAgICAgICB7JSBpZiBvZHMuY291bnQgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgImxheWVyZGV0YWlscyIgZXh0cmEucGlkIGRhdGEuaWQgJX0nPnt7ZGF0YS5sYXllci5uYW1lfX08L2E+IGRlcGVuZGVuY2llcyIKKyAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgeyUgZm9yIGkgaW4gb2RzJX0KKyAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAibGF5ZXJkZXRhaWxzIiBleHRyYS5waWQgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5sYXllci5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvdWw+Ij4KKyAgICAgICAge3tvZHMuY291bnR9fQorICAgICAgICA8L2E+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgJycnCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXBlbmRlbmNpZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJPdGhlciBsYXllcnMgYSBsYXllciBkZXBlbmRzIHVwb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iZGVwZW5kZW5jaWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWRlcHNfdGVtcGxhdGUpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJBZGQgfCBEZWxldGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJBZGQgb3IgZGVsZXRlIGxheWVycyB0byAvIGZyb20geW91ciBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgaW5jbHVkZSAibGF5ZXJfYnRuLmh0bWwiICV9JykKKworICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyRGV0YWlsc1VybCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZSA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJkZXRhaWx1cmwiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0YXRpb24gPSBsYW1iZGEgeDogcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJvamVjdC5pZCwgeC5pZCkpKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0ibmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZSA9IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRhdGlvbiA9IGxhbWJkYSB4OiB4LmxheWVyLm5hbWUpCisKKworY2xhc3MgTWFjaGluZXNUYWJsZShUb2FzdGVyVGFibGUsIFByb2plY3RGaWx0ZXJzTWl4aW4pOgorICAgICIiIlRhYmxlIG9mIE1hY2hpbmVzIGluIFRvYXN0ZXIiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihNYWNoaW5lc1RhYmxlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZW1wdHlfc3RhdGUgPSAiTm8gbWFjaGluZXMgbWF5YmUgeW91IG5lZWQgdG8gZG8gYSBidWlsZD8iCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIm5hbWUiCisKKyAgICBkZWYgZ2V0X2NvbnRleHRfZGF0YShzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGNvbnRleHQgPSBzdXBlcihNYWNoaW5lc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3RsYXllcnMnXSA9IG1hcChsYW1iZGEgcHJqbGF5ZXI6IHByamxheWVyLmxheWVyY29tbWl0LmlkLCBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIocHJvamVjdD1jb250ZXh0Wydwcm9qZWN0J10pKQorICAgICAgICByZXR1cm4gY29udGV4dAorCisgICAgZGVmIHNldHVwX2ZpbHRlcnMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5wcm9qZWN0X2xheWVycyA9IHByb2plY3QucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KCkKKworICAgICAgICBzZWxmLmFkZF9maWx0ZXIodGl0bGU9IkZpbHRlciBieSBwcm9qZWN0IG1hY2hpbmVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWN0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oImluX3Byb2plY3QiLCAiTWFjaGluZXMgcHJvdmlkZWQgYnkgbGF5ZXJzIGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX2luX3Byb2plY3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9maWx0ZXJfYWN0aW9uKCJub3RfaW5fcHJvamVjdCIsICJNYWNoaW5lcyBwcm92aWRlZCBieSBsYXllcnMgbm90IGFkZGVkIHRvIHRoaXMgcHJvamVjdCIsIHNlbGYuZmlsdGVyX25vdF9pbl9wcm9qZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHByai5nZXRfYWxsX2NvbXBhdGlibGVfbWFjaGluZXMoKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5vcmRlcl9ieShzZWxmLmRlZmF1bHRfb3JkZXJieSkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJNYWNoaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImRlc2NyaXB0aW9uIikKKworICAgICAgICBsYXllcl9saW5rX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxhIGhyZWY9InslIHVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5sYXllcl92ZXJzaW9uLmlkICV9Ij4KKyAgICAgICAge3tkYXRhLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC9hPgorICAgICAgICAnJycKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkxheWVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWxheWVyX2xpbmtfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJldmlzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iVGhlIEdpdCBicmFuY2gsIHRhZyBvciBjb21taXQuIEZvciB0aGUgbGF5ZXJzIGZyb20gdGhlIE9wZW5FbWJlZGRlZCBsYXllciBzb3VyY2UsIHRoZSByZXZpc2lvbiBpcyBhbHdheXMgdGhlIGJyYW5jaCBjb21wYXRpYmxlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgdmVyc2lvbiB5b3Ugc2VsZWN0ZWQgZm9yIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxheWVyX3ZlcnNpb25fX2dldF92Y3NfcmVmZXJlbmNlIikKKworICAgICAgICBtYWNoaW5lX2ZpbGVfdGVtcGxhdGUgPSAnJyc8Y29kZT5jb25mL21hY2hpbmUve3tkYXRhLm5hbWV9fS5jb25mPC9jb2RlPgorICAgICAgICA8YSBocmVmPSJ7e2RhdGEuZ2V0X3Zjc19tYWNoaW5lX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+PC9hPicnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTWFjaGluZSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0ibWFjaGluZWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9bWFjaGluZV9maWxlX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU2VsZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBfdGV4dD0iU2V0cyB0aGUgc2VsZWN0ZWQgbWFjaGluZSBhcyB0aGUgcHJvamVjdCBtYWNoaW5lLiBZb3UgY2FuIG9ubHkgaGF2ZSBvbmUgbWFjaGluZSBwZXIgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uYW1lPSJpbl9jdXJyZW50X3Byb2plY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9J3slIGluY2x1ZGUgIm1hY2hpbmVfYnRuLmh0bWwiICV9JykKKworCitjbGFzcyBMYXllck1hY2hpbmVzVGFibGUoTWFjaGluZXNUYWJsZSk6CisgICAgIiIiIFNtYWxsZXIgdmVyc2lvbiBvZiB0aGUgTWFjaGluZXMgdGFibGUgZm9yIHVzZSBpbiBsYXllciBkZXRhaWxzICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKExheWVyTWFjaGluZXNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTGF5ZXJNYWNoaW5lc1RhYmxlLCBzZWxmKS5nZXRfY29udGV4dF9kYXRhKCoqa3dhcmdzKQorICAgICAgICBjb250ZXh0WydsYXllcnZlcnNpb24nXSA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9a3dhcmdzWydsYXllcmlkJ10pCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBNYWNoaW5lc1RhYmxlLnNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9fcGs9aW50KGt3YXJnc1snbGF5ZXJpZCddKSkKKyAgICAgICAgc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYVsnaW5fcHJqJ10gPSBQcm9qZWN0TGF5ZXIub2JqZWN0cy5maWx0ZXIoUShwcm9qZWN0PWt3YXJnc1sncGlkJ10pICYgUShsYXllcmNvbW1pdD1rd2FyZ3NbJ2xheWVyaWQnXSkpLmNvdW50KCkKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTWFjaGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJkZXNjcmlwdGlvbiIpCisKKyAgICAgICAgc2VsZWN0X2J0bl90ZW1wbGF0ZSA9ICc8YSBocmVmPSJ7JSB1cmwgInByb2plY3QiIGV4dHJhLnBpZCAlfT9zZXRNYWNoaW5lPXt7ZGF0YS5uYW1lfX0iIGNsYXNzPSJidG4gYnRuLWJsb2NrIHNlbGVjdC1tYWNoaW5lLWJ0biIgeyUgaWYgZXh0cmEuaW5fcHJqID09IDAlfWRpc2FibGVkPSJkaXNhYmxlZCJ7JWVuZGlmJX0+U2VsZWN0IG1hY2hpbmU8L2E+JworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iU2VsZWN0IG1hY2hpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfbmFtZT0iYWRkLWRlbC1sYXllcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9c2VsZWN0X2J0bl90ZW1wbGF0ZSkKKworCitjbGFzcyBSZWNpcGVzVGFibGUoVG9hc3RlclRhYmxlLCBQcm9qZWN0RmlsdGVyc01peGluKToKKyAgICAiIiJUYWJsZSBvZiBSZWNpcGVzIGluIFRvYXN0ZXIiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihSZWNpcGVzVGFibGUsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJUb2FzdGVyIGhhcyBubyByZWNpcGUgaW5mb3JtYXRpb24uIFRvIGdlbmVyYXRlIHJlY2lwZSBpbmZvcm1hdGlvbiB5b3UgY2FuIGNvbmZpZ3VyZSBhIGxheWVyIHNvdXJjZSB0aGVuIHJ1biBhIGJ1aWxkLiIKKyAgICAgICAgc2VsZi5kZWZhdWx0X29yZGVyYnkgPSAibmFtZSIKKworICAgIGRlZiBnZXRfY29udGV4dF9kYXRhKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgY29udGV4dCA9IHN1cGVyKFJlY2lwZXNUYWJsZSwgc2VsZikuZ2V0X2NvbnRleHRfZGF0YSgqKmt3YXJncykKKworICAgICAgICBjb250ZXh0Wydwcm9qZWN0J10gPSBwcm9qZWN0CisKKyAgICAgICAgY29udGV4dFsncHJvamVjdGxheWVycyddID0gbWFwKGxhbWJkYSBwcmpsYXllcjogcHJqbGF5ZXIubGF5ZXJjb21taXQuaWQsIFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0PWNvbnRleHRbJ3Byb2plY3QnXSkpCisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworICAgIGRlZiBzZXR1cF9maWx0ZXJzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPWt3YXJnc1sncGlkJ10pCisgICAgICAgIHNlbGYucHJvamVjdF9sYXllcnMgPSBwcm9qZWN0LnByb2plY3RsYXllcl9lcXVpdmFsZW50X3NldCgpCisKKyAgICAgICAgc2VsZi5hZGRfZmlsdGVyKHRpdGxlPSJGaWx0ZXIgYnkgcHJvamVjdCByZWNpcGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWN0aW9ucz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oImluX3Byb2plY3QiLCAiUmVjaXBlcyBwcm92aWRlZCBieSBsYXllcnMgYWRkZWQgdG8gdGhpcyBwcm9qZWN0Iiwgc2VsZi5maWx0ZXJfaW5fcHJvamVjdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX2ZpbHRlcl9hY3Rpb24oIm5vdF9pbl9wcm9qZWN0IiwgIlJlY2lwZXMgcHJvdmlkZWQgYnkgbGF5ZXJzIG5vdCBhZGRlZCB0byB0aGlzIHByb2plY3QiLCBzZWxmLmZpbHRlcl9ub3RfaW5fcHJvamVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0ga3dhcmdzWydwaWQnXSkKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gcHJqLmdldF9hbGxfY29tcGF0aWJsZV9yZWNpcGVzKCkKKyAgICAgICAgc2VsZi5xdWVyeXNldCA9IHNlbGYucXVlcnlzZXQub3JkZXJfYnkoc2VsZi5kZWZhdWx0X29yZGVyYnkpCisKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHdoZXJlIHRvIGRvd25sb2FkIHRoZSBzb3VyY2UsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIHBhY2thZ2UgdGhlIGNvbXBpbGVkIG91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRlYWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibmFtZSIpCisKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJSZWNpcGUgVmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9InZlcnNpb24iKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iZ2V0X2Rlc2NyaXB0aW9uX29yX3N1bW1hcnkiKQorCisgICAgICAgIHJlY2lwZV9maWxlX3RlbXBsYXRlID0gJycnCisgICAgICAgIDxjb2RlPnt7ZGF0YS5maWxlX3BhdGh9fTwvY29kZT4KKyAgICAgICAgPGEgaHJlZj0ie3tkYXRhLmdldF92Y3NfcmVjaXBlX2ZpbGVfbGlua191cmx9fSIgdGFyZ2V0PSJfYmxhbmsiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmVjaXBlIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJQYXRoIHRvIHRoZSByZWNpcGUgLmJiIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJyZWNpcGUtZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1yZWNpcGVfZmlsZV90ZW1wbGF0ZSkKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlNlY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgc2VjdGlvbiBpbiB3aGljaCByZWNpcGVzIHNob3VsZCBiZSBjYXRlZ29yaXplZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9InNlY3Rpb24iKQorCisgICAgICAgIGxheWVyX2xpbmtfdGVtcGxhdGUgPSAnJycKKyAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdsYXllcmRldGFpbHMnIGV4dHJhLnBpZCBkYXRhLmxheWVyX3ZlcnNpb24uaWQgJX0iPgorICAgICAgICB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX08L2E+CisgICAgICAgICcnJworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT1sYXllcl9saW5rX3RlbXBsYXRlKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iTGljZW5zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IlRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHBpcGUgY2hhcmFjdGVyIGluZGljYXRlcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgYW1wZXJzYW5kIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmFibGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImxpY2Vuc2UiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iUmV2aXNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0ibGF5ZXJfdmVyc2lvbl9fZ2V0X3Zjc19yZWZlcmVuY2UiKQorCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQnVpbGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscF90ZXh0PSJBZGQgb3IgZGVsZXRlIHJlY2lwZXMgdG8gYW5kIGZyb20geW91ciBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25hbWU9ImluX2N1cnJlbnRfcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lPSJhZGQtZGVsLWxheWVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfZGF0YV90ZW1wbGF0ZT0neyUgaW5jbHVkZSAicmVjaXBlX2J0bi5odG1sIiAlfScpCisKKyAgICAgICAgcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJQcm9qZWN0IGNvbXBhdGlibGUgTGF5ZXIgSUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWFibGUgPSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAicHJvamVjdGNvbXBhdGlibGVfbGF5ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0YXRpb24gPSBsYW1iZGEgeDogKHgubGF5ZXJfdmVyc2lvbi5nZXRfZXF1aXZhbGVudHNfd3ByaW9yaXR5KHByb2plY3QpWzBdKSkKKworY2xhc3MgTGF5ZXJSZWNpcGVzVGFibGUoUmVjaXBlc1RhYmxlKToKKyAgICAiIiIgU21hbGxlciB2ZXJzaW9uIG9mIHRoZSBSZWNpcGVzIHRhYmxlIGZvciB1c2UgaW4gbGF5ZXIgZGV0YWlscyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihMYXllclJlY2lwZXNUYWJsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9jb250ZXh0X2RhdGEoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBjb250ZXh0ID0gc3VwZXIoTGF5ZXJSZWNpcGVzVGFibGUsIHNlbGYpLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisgICAgICAgIGNvbnRleHRbJ2xheWVydmVyc2lvbiddID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1rd2FyZ3NbJ2xheWVyaWQnXSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIFJlY2lwZXNUYWJsZS5zZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0LmZpbHRlcihsYXllcl92ZXJzaW9uX19waz1pbnQoa3dhcmdzWydsYXllcmlkJ10pKQorCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ2luX3ByaiddID0gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKFEocHJvamVjdD1rd2FyZ3NbJ3BpZCddKSAmIFEobGF5ZXJjb21taXQ9a3dhcmdzWydsYXllcmlkJ10pKS5jb3VudCgpCisKKyAgICBkZWYgc2V0dXBfY29sdW1ucyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IlJlY2lwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwX3RleHQ9IkluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mIHNvZnR3YXJlLCBpbmNsdWRpbmcgd2hlcmUgdG8gZG93bmxvYWQgdGhlIHNvdXJjZSwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBob3cgdG8gY29tcGlsZSB0aGUgc291cmNlIGZpbGVzIGFuZCBob3cgdG8gcGFja2FnZSB0aGUgY29tcGlsZWQgb3V0cHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVhYmxlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lPSJuYW1lIikKKworICAgICAgICBzZWxmLmFkZF9jb2x1bW4odGl0bGU9IkRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU9ImdldF9kZXNjcmlwdGlvbl9vcl9zdW1tYXJ5IikKKworCisgICAgICAgIGJ1aWxkX3JlY2lwZV90ZW1wbGF0ZSA9JzxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgYnVpbGQtcmVjaXBlLWJ0biIgZGF0YS1yZWNpcGUtbmFtZT0ie3tkYXRhLm5hbWV9fSIgeyVpZiBleHRyYS5pbl9wcmogPT0gMCAlfWRpc2FibGVkPSJkaXNhYmxlZCJ7JWVuZGlmJX0+QnVpbGQgcmVjaXBlPC9idXR0b24+JworCisgICAgICAgIHNlbGYuYWRkX2NvbHVtbih0aXRsZT0iQnVpbGQgcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX25hbWU9ImFkZC1kZWwtbGF5ZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlPWJ1aWxkX3JlY2lwZV90ZW1wbGF0ZSkKKworY2xhc3MgUHJvamVjdExheWVyc1JlY2lwZXNUYWJsZShSZWNpcGVzVGFibGUpOgorICAgICIiIiBUYWJsZSB0aGF0IGxpc3RzIG9ubHkgcmVjaXBlcyBhdmFpbGFibGUgZm9yIGxheWVycyBhZGRlZCB0byB0aGUgcHJvamVjdCAiIiIKKworICAgIGRlZiBzZXR1cF9xdWVyeXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihQcm9qZWN0TGF5ZXJzUmVjaXBlc1RhYmxlLCBzZWxmKS5zZXR1cF9xdWVyeXNldCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGsgPSBrd2FyZ3NbJ3BpZCddKQorICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIobGF5ZXJfdmVyc2lvbl9faW4gPSBwcmoucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KCkpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGJjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2UuaHRtbApAQCAtMCwwICsxLDE4MiBAQAorPCFET0NUWVBFIGh0bWw+Cit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorPGh0bWwgbGFuZz0iZW4iPgorICAgIDxoZWFkPgorICAgICAgICA8dGl0bGU+eyUgaWYgb2JqZWN0bmFtZSAlfSB7e29iamVjdG5hbWV8dGl0bGV9fSAtIHslIGVuZGlmICV9VG9hc3RlcjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyAlfSIgdHlwZT0idGV4dC9jc3MiLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUubWluLmNzcycgJX0iIHR5cGU9J3RleHQvY3NzJy8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvcHJldHRpZnkuY3NzJyAlfSIgdHlwZT0ndGV4dC9jc3MnLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvZGVmYXVsdC5jc3MnICV9IiB0eXBlPSd0ZXh0L2NzcycvPgorCisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgLz4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9qcXVlcnktMi4wLjMubWluLmpzJyAlfSI+CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvanF1ZXJ5LmNvb2tpZS5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2Jvb3RzdHJhcC5taW4uanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9wcmV0dGlmeS5qcycgJX0iPgorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xpYnRvYXN0ZXIuanMnICV9Ij4KKyAgICA8L3NjcmlwdD4KKyAgICB7JSBpZiBERUJVRyAlfQorICAgIDxzY3JpcHQ+CisgICAgICBsaWJ0b2FzdGVyLmRlYnVnID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKyAgICB7JSBlbmRpZiAlfQorICAgIDxzY3JpcHQ+CisgICAgICBsaWJ0b2FzdGVyLmN0eCA9IHsKKyAgICAgICAganNVcmwgOiAieyUgc3RhdGljICdqcy8nICV9IiwKKyAgICAgICAgaHRtbFVybCA6ICJ7JSBzdGF0aWMgJ2h0bWwvJyAlfSIsCisgICAgICAgIHByb2plY3RzVXJsIDogInslIHVybCAnYWxsLXByb2plY3RzJyAlfSIsCisgICAgICAgIHByb2plY3RzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9wcm9qZWN0c3R5cGVhaGVhZCcgYXMgcHJqdXJsJX17e3ByanVybHxqc29ufX0sCisgICAgICAgIHslIGlmIHByb2plY3QuaWQgJX0KKyAgICAgICAgcHJvamVjdElkIDoge3twcm9qZWN0LmlkfX0sCisgICAgICAgIHByb2plY3RQYWdlVXJsIDogeyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkIGFzIHB1cmwlfXt7cHVybHxqc29ufX0sCisgICAgICAgIHByb2plY3ROYW1lIDoge3twcm9qZWN0Lm5hbWV8anNvbn19LAorICAgICAgICByZWNpcGVzVHlwZUFoZWFkVXJsOiB7JSB1cmwgJ3hocl9yZWNpcGVzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAorICAgICAgICBsYXllcnNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX2xheWVyc3R5cGVhaGVhZCcgcHJvamVjdC5pZCBhcyBwYXR1cmwlfXt7cGF0dXJsfGpzb259fSwKKyAgICAgICAgbWFjaGluZXNUeXBlQWhlYWRVcmw6IHslIHVybCAneGhyX21hY2hpbmVzdHlwZWFoZWFkJyBwcm9qZWN0LmlkIGFzIHBhdHVybCV9e3twYXR1cmx8anNvbn19LAorCisgICAgICAgIHByb2plY3RCdWlsZHNVcmw6IHslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCBhcyBwYnVybCAlfXt7cGJ1cmx8anNvbn19LAorICAgICAgICBwcm9qZWN0SWQgOiB7e3Byb2plY3QuaWR9fSwKKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICBwcm9qZWN0SWQgOiB1bmRlZmluZWQsCisgICAgICAgIHByb2plY3RQYWdlVXJsIDogdW5kZWZpbmVkLAorICAgICAgICBwcm9qZWN0TmFtZSA6IHVuZGVmaW5lZCwKKyAgICAgICAgcHJvamVjdElkIDogdW5kZWZpbmVkLAorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgfTsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9iYXNlLmpzJyAlfSI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLyogVmFycyBuZWVkZWQgZm9yIGJhc2UuanMgKi8KKyAgICAgICAgdmFyIGN0eCA9IHt9OworICAgICAgICBjdHgubnVtUHJvamVjdHMgPSB7e3Byb2plY3RzfGxlbmd0aH19OworICAgICAgICBjdHguY3VycmVudFVybCA9ICJ7e3JlcXVlc3QucGF0aHxlc2NhcGVqc319IjsKKworICAgICAgICBiYXNlUGFnZUluaXQoY3R4KTsKKyAgICAgIH0pOworICAgIDwvc2NyaXB0PgorCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cit7JSBlbmRibG9jayAlfQorICAgIDwvaGVhZD4KKworPGJvZHkgc3R5bGU9ImhlaWdodDogMTAwJSI+CisKKyAgeyUgY3NyZl90b2tlbiAlfQorICA8ZGl2IGlkPSJsb2FkaW5nLW5vdGlmaWNhdGlvbiIgY2xhc3M9ImFsZXJ0IGxlYWQgdGV4dC1jZW50ZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgIExvYWRpbmcgPGkgY2xhc3M9ImZhLXB1bHNlIGljb24tc3Bpbm5lciI+PC9pPgorICA8L2Rpdj4KKworICA8ZGl2IGlkPSJjaGFuZ2Utbm90aWZpY2F0aW9uIiBjbGFzcz0iYWxlcnQgbGVhZCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBpZD0iaGlkZS1hbGVydCI+JnRpbWVzOzwvYnV0dG9uPgorICAgIDxzcGFuIGlkPSJjaGFuZ2Utbm90aWZpY2F0aW9uLW1zZyI+PC9zcGFuPgorICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgICAgICAgPGEgY2xhc3M9ImJyYW5kIGxvZ28iIGhyZWY9IiMiPjxpbWcgc3JjPSJ7JSBzdGF0aWMgJ2ltZy9sb2dvLnBuZycgJX0iIGNsYXNzPSIiIGFsdD0iWW9jdG8gbG9nbyBwcm9qZWN0Ii8+PC9hPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJicmFuZCI+CisgICAgICAgICAgICA8YSBocmVmPSIvIj5Ub2FzdGVyPC9hPgorICAgICAgICAgICAgeyUgaWYgREVCVUcgJX0KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWluZm8tc2lnbiIgdGl0bGU9IjxzdHJvbmc+VG9hc3RlciB2ZXJzaW9uIGluZm9ybWF0aW9uPC9zdHJvbmc+IiBkYXRhLWNvbnRlbnQ9IjxkbD48ZHQ+QnJhbmNoPC9kdD48ZGQ+e3tUT0FTVEVSX0JSQU5DSH19PC9kZD48ZHQ+UmV2aXNpb248L2R0PjxkZD57e1RPQVNURVJfUkVWSVNJT059fTwvZGQ+PC9kbD4iPjwvaT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgIT0gJ2xhbmRpbmcnIGFuZCByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lICE9ICduZXdwcm9qZWN0JyAlfQorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgIDxsaSAgeyUgaWYgcmVxdWVzdC5yZXNvbHZlcl9tYXRjaC51cmxfbmFtZSA9PSAnYWxsLWJ1aWxkcycgJX0KKyAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9PgorICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2FsbC1idWlsZHMnICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi10YXNrcyI+PC9pPgorICAgICAgICAgICAgICAgIEFsbCBidWlsZHMKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSB7JSBpZiByZXF1ZXN0LnJlc29sdmVyX21hdGNoLnVybF9uYW1lID09ICdhbGwtcHJvamVjdHMnICAlfQorICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYWxsLXByb2plY3RzJyAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZm9sZGVyLW9wZW4iPjwvaT4KKyAgICAgICAgICAgICAgICBBbGwgcHJvamVjdHMKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tYm9vayI+PC9pPgorICAgICAgICAgICAgICAgIE1hbnVhbAorICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQgZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCBwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGlkPSJuZXctcHJvamVjdC1idXR0b24iIGhyZWY9InslIHVybCAnbmV3cHJvamVjdCcgJX0iPk5ldyBwcm9qZWN0PC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwhLS0gTmV3IGJ1aWxkIHBvcG92ZXIgLS0+CisgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIHB1bGwtcmlnaHQiIGlkPSJuZXctYnVpbGQtYnV0dG9uIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+CisgICAgICAgICAgICAgIE5ldyBidWlsZAorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1jYXJldC1kb3duIj48L2k+CisgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSBuZXctYnVpbGQgbXVsdGktc2VsZWN0Ij4KKyAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxoMz5OZXcgYnVpbGQ8L2gzPgorICAgICAgICAgICAgICAgIDxoNj5Qcm9qZWN0OjwvaDY+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InByb2plY3QiPgorICAgICAgICAgICAgICAgICAgeyUgaWYgcHJvamVjdC5pZCAlfQorICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxlYWQiIGhyZWY9InslIHVybCAncHJvamVjdCcgcHJvamVjdC5pZCAlfSI+e3twcm9qZWN0Lm5hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsZWFkIiBocmVmPSIjIj48L2E+CisgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcHJvamVjdC1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LW1lZGl1bSIgaWQ9InByb2plY3QtbmFtZS1pbnB1dCIgcGxhY2Vob2xkZXI9IlR5cGUgYSBwcm9qZWN0IG5hbWUiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiLz4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0ic2F2ZS1wcm9qZWN0LWJ1dHRvbiIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJjYW5jZWwtY2hhbmdlLXByb2plY3QiIGNsYXNzPSJidG4gYnRuLWxpbmsiIHN0eWxlPSJkaXNwbGF5OiBub25lIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDxwPjxhIGlkPSJ2aWV3LWFsbC1wcm9qZWN0cyIgaHJlZj0ieyUgdXJsICdhbGwtcHJvamVjdHMnICV9Ij5WaWV3IGFsbCBwcm9qZWN0czwvYT48L3A+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgIDxwPlRoaXMgcHJvamVjdCBjb25maWd1cmF0aW9uIGlzIGluY29tcGxldGUsIHNvIHlvdSBjYW5ub3QgcnVuIGJ1aWxkcy48L3A+CisgICAgICAgICAgICAgICAgICA8cD48YSBocmVmPSJ7JSBpZiBwcm9qZWN0LmlkICV9eyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9eyUgZW5kaWYgJX0iPlZpZXcgcHJvamVjdCBjb25maWd1cmF0aW9uPC9hPjwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJ0YXJnZXRzLWZvcm0iPgorICAgICAgICAgICAgICAgIDxoNj5SZWNpcGUocyk6PC9oNj4KKyAgICAgICAgICAgICAgICA8Zm9ybT4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQteGxhcmdlIGJ1aWxkLXRhcmdldC1pbnB1dCIgcGxhY2Vob2xkZXI9IlR5cGUgYSByZWNpcGUgbmFtZSIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgZGlzYWJsZWQvPgorICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ1aWxkLWJ1dHRvbiIgZGlzYWJsZWQ+QnVpbGQ8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPC9kaXY+CisKKworICAgIDwvZGl2PgorIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCB0b3AtcGFkZGVkIj4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Cit7JSBibG9jayBwYWdlY29udGVudCAlfQoreyUgZW5kYmxvY2sgJX0KKzwvZGl2PgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjYTUwYwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sCkBAIC0wLDAgKzEsMjkgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCI+Cis8IS0tIEJyZWFkY3J1bWJzIC0tPgorICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiIGlkPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPnt7YnVpbGQucHJvamVjdC5uYW1lfX06PC9saT4KKyAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgJX0iPkJ1aWxkczwvYT48L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICdidWlsZGRhc2hib2FyZCcgYnVpbGQucGslfSI+e3tidWlsZC50YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9ICh7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0pPC9hPjwvbGk+CisgICAgICAgICAgICB7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX17JSBlbmRibG9jayAlfQorICAgICAgICA8L3VsPgorICAgICAgICA8c2NyaXB0PgorICAgICAgICAkKCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpJykuYXBwZW5kKCc8c3BhbiBjbGFzcz0iZGl2aWRlciI+JnJhcnI7PC9zcGFuPicpOworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0JykuYWRkQ2xhc3MoImFjdGl2ZSIpOworICAgICAgICAgICAgJCgnI2JyZWFkY3J1bWIgPiBsaTpsYXN0ID4gc3BhbiwgI2JyZWFkY3J1bWIgPiBsaTpmaXJzdCA+IHNwYW4nKS5yZW1vdmUoKTsKKyAgICAgICAgfSk7CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvZGl2PiA8IS0tc2VjdGlvbi0tPgorCisgICAgICAgIDwhLS0gQmVnaW4gY29udGFpbmVyIC0tPgorICAgICAgICB7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX17JSBlbmRibG9jayAlfQorICAgICAgICA8IS0tIEVuZCBjb250YWluZXIgLS0+CisKKzwvZGl2PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2VidWlsZHBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQxZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlYnVpbGRwYWdlLmh0bWwKQEAgLTAsMCArMSw4OCBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworCisgPGRpdiBjbGFzcz0iIj4KKzwhLS0gQnJlYWRjcnVtYnMgLS0+CisgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiIgaWQ9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJtdXRlZCI+e3tidWlsZC5wcm9qZWN0Lm5hbWV9fTo8L2xpPgorICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgYnVpbGQucHJvamVjdC5pZCAlfSI+QnVpbGRzPC9hPjwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICB7JSBibG9jayBwYXJlbnRicmVhZGNydW1iICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iPgorICAgICAgICAgICAgICAgIHt7YnVpbGQuZ2V0X3NvcnRlZF90YXJnZXRfbGlzdC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9ICh7e2J1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOiJkL20veSBIOmkifX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIHslIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfXslIGVuZGJsb2NrICV9CisgICAgICAgIDwvdWw+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICQoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICQoJyNicmVhZGNydW1iID4gbGknKS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJkaXZpZGVyIj4mcmFycjs8L3NwYW4+Jyk7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QnKS5hZGRDbGFzcygiYWN0aXZlIik7CisgICAgICAgICAgICAkKCcjYnJlYWRjcnVtYiA+IGxpOmxhc3QgPiBzcGFuLCAjYnJlYWRjcnVtYiA+IGxpOmZpcnN0ID4gc3BhbicpLnJlbW92ZSgpOworCSAgICBjb25zb2xlLmxvZygiZG9uZSIpOworICAgICAgICB9KTsKKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorCisgICAgICAgIDwhLS0gYmVnaW4gbGVmdCBzaWRlYmFyIGNvbnRhaW5lciAtLT4KKyAgICAgICAgPGRpdiBpZD0ibmF2IiBjbGFzcz0ic3BhbjIiPgorICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LWxpc3Qgd2VsbCI+CisgICAgICAgICAgICAgIDxsaQorICAgICAgICAgICAgICAgIHslIGlmIHJlcXVlc3QucmVzb2x2ZXJfbWF0Y2gudXJsX25hbWUgPT0gJ2J1aWxkZGFzaGJvYXJkJyAgJX0KKyAgICAgICAgICAgICAgICAgIGNsYXNzPSJhY3RpdmUiCisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0gPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJuYXYtcGFyZW50IiBocmVmPSJ7JSB1cmwgJ2J1aWxkZGFzaGJvYXJkJyBidWlsZC5wayAlfSI+QnVpbGQgc3VtbWFyeTwvYT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgeyUgaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuMC5pc19pbWFnZSBhbmQgYnVpbGQub3V0Y29tZSA9PSAwICV9CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5JbWFnZXM8L2xpPgorICAgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi10YXJnZXQgJX0KKyAgICAgICAgICAgICAgICAgIHslIGZvciB0IGluIGJ1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0LnBrICV9Ij57e3QudGFyZ2V0fX08L2E+PGxpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5CdWlsZDwvbGk+CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1jb25maWd1cmF0aW9uICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtdGFza3MgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Rhc2tzJyBidWlsZC5wayAlfSI+VGFza3M8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LXJlY2lwZXMgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+CisgICAgICAgICAgICAgIHslIGVuZGJsb2NrICV9CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1wYWNrYWdlcyAlfQorICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaGVhZGVyIj5QZXJmb3JtYW5jZTwvbGk+CisgICAgICAgICAgICAgIHslIGJsb2NrIG5hdi1idWlsZHRpbWUgJX0KKyAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPlRpbWU8L2E+PC9saT4KKyAgICAgICAgICAgICAgeyUgZW5kYmxvY2sgJX0KKyAgICAgICAgICAgICAgeyUgYmxvY2sgbmF2LWNwdXVzYWdlICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjcHV1c2FnZScgYnVpbGQucGsgJX0iPkNQVSB1c2FnZTwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgICB7JSBibG9jayBuYXYtZGlza2lvICV9CisgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdkaXNraW8nIGJ1aWxkLnBrICV9Ij5EaXNrIEkvTzwvYT48L2xpPgorICAgICAgICAgICAgICB7JSBlbmRibG9jayAlfQorICAgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDwhLS0gZW5kIGxlZnQgc2lkZWJhciBjb250YWluZXIgLS0+CisKKyAgICAgICAgPCEtLSBCZWdpbiByaWdodCBjb250YWluZXIgLS0+CisgICAgICAgIHslIGJsb2NrIGJ1aWxkaW5mb21haW4gJX17JSBlbmRibG9jayAlfQorICAgICAgICA8IS0tIEVuZCByaWdodCBjb250YWluZXIgLS0+CisKKworICAgIDwvZGl2PgorICA8L2Rpdj4KKworCit7JSBlbmRibG9jayAlfQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0YnVpbGRzcGFnZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjljZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbApAQCAtMCwwICsxLDE1IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCit7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CisKKzwhLS0gQmVnaW4gbWFpbiBwYWdlIGNvbnRhaW5lciAtLT4KKzxkaXY+CisgICAgeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KKzwvZGl2PgorPCEtLSBFbmQgbWFpbiBjb250YWluZXIgLS0+CisKK3slIGVuZGJsb2NrICV9CisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXByb2plY3RwYWdlLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0cGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OGUwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2Vwcm9qZWN0cGFnZS5odG1sCkBAIC0wLDAgKzEsNDAgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKK3slIGluY2x1ZGUgInByb2plY3R0b3BiYXIuaHRtbCIgJX0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKyAgICAgJCgiI2NvbmZpZy1uYXYgLm5hdiBsaSBhIikuZWFjaChmdW5jdGlvbigpeworICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPT09ICQodGhpcykuYXR0cignaHJlZicpKQorICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnYWN0aXZlJyk7CisgICAgICAgZWxzZQorICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CisgICAgIH0pOworCisgICAgICQoIiN0b3BiYXItY29uZmlndXJhdGlvbi10YWIiKS5hZGRDbGFzcygiYWN0aXZlIikKKyAgfSk7Cis8L3NjcmlwdD4KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgPCEtLSBvbmx5IG9uIGNvbmZpZyBwYWdlcyAtLT4KKyAgPGRpdiBpZD0iY29uZmlnLW5hdiIgY2xhc3M9InNwYW4yIj4KKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCB3ZWxsIj4KKyAgICAgIDxsaT48YSBjbGFzcz0ibmF2LXBhcmVudCIgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9Ij5Db25maWd1cmF0aW9uPC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkNvbXBhdGlibGUgbWV0YWRhdGE8L2xpPgorPCEtLSAgPGxpPjxhIGhyZWY9ImFsbC1pbWFnZS1yZWNpcGVzLmh0bWwiPkltYWdlIHJlY2lwZXM8L2E+PC9saT4gLS0+CisgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0dGFyZ2V0cycgcHJvamVjdC5pZCAlfSI+UmVjaXBlczwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9Ij5NYWNoaW5lczwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGxheWVycycgcHJvamVjdC5pZCAlfSI+TGF5ZXJzPC9hPjwvbGk+CisgICAgICA8bGkgY2xhc3M9Im5hdi1oZWFkZXIiPkV4dHJhIGNvbmZpZ3VyYXRpb248L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAncHJvamVjdGNvbmYnIHByb2plY3QuaWQgJX0iPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+CisgICAgPC91bD4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9InNwYW4xMCI+CisgICAgeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9eyUgZW5kYmxvY2sgJX0KKyAgPC9kaXY+Cis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfYm90dG9tLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Jhc2V0YWJsZV9ib3R0b20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAyM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfYm90dG9tLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKworPCEtLSBTaG93IHBhZ2luYXRpb24gY29udHJvbHMgLS0+Cis8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIHBhZ2luYXRpb24tY2VudGVyZWQiPgorICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgIFNob3dpbmcge3tvYmplY3RzLnN0YXJ0X2luZGV4fX0gdG8ge3tvYmplY3RzLmVuZF9pbmRleH19IG91dCBvZiB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gZW50cmllcy4KKyAgIDwvZGl2PgorCisgICA8dWwgY2xhc3M9InBhZ2luYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBibG9jay1pbmxpbmUiPgoreyVpZiBvYmplY3RzLmhhc19wcmV2aW91cyAlfQorICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tvYmplY3RzLnByZXZpb3VzX3BhZ2VfbnVtYmVyfX19KSI+JmxhcXVvOzwvYT48L2xpPgoreyVlbHNlJX0KKyAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JmxhcXVvOzwvYT48L2xpPgoreyVlbmRpZiV9Cit7JSBmb3IgaSBpbiBvYmplY3RzLnBhZ2VfcmFuZ2UgJX0KKyAgPGxpeyVpZiBpID09IG9iamVjdHMubnVtYmVyICV9IGNsYXNzPSJhY3RpdmUiIHslZW5kaWYlfT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e2l9fX0pIj57e2l9fTwvYT48L2xpPgoreyUgZW5kZm9yICV9Cit7JWlmIG9iamVjdHMuaGFzX25leHQlfQorICA8bGk+PGEgaHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6e3tvYmplY3RzLm5leHRfcGFnZV9udW1iZXJ9fX0pIj4mcmFxdW87PC9hPjwvbGk+Cit7JWVsc2UlfQorICA8bGkgY2xhc3M9ImRpc2FibGVkIj48YSBocmVmPSIjIj4mcmFxdW87PC9hPjwvbGk+Cit7JWVuZGlmJX0KKyAgPC91bD4KKyAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgeyUgZW5kd2l0aCAlfQorICAgIDwvc2VsZWN0PgorICAgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBVcGRhdGUgcGFnZSBkaXNwbGF5IHNldHRpbmdzIC0tPgorCis8c2NyaXB0PgorICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworCisgICAgLy8gd2UgbG9hZCBjb29raWVzIGZvciB0aGUgY29sdW1uIGRpc3BsYXkKKyAgICBzYXZlID0gJC5jb29raWUoJ19kaXNwbGF5Y29sc197e29iamVjdG5hbWV9fScpOworICAgIGlmIChzYXZlICE9IHVuZGVmaW5lZCkgeworICAgICAgICBzZXR0aW5nID0gc2F2ZS5zcGxpdCgnOycpOworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHNldHRpbmcubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzZXR0aW5nW2ldLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBzcGxpdGxpc3QgPSBzZXR0aW5nW2ldLnNwbGl0KCc6Jyk7CisgICAgICAgICAgICAgICAgaWQgPSBzcGxpdGxpc3RbMF0sIHYgPSBzcGxpdGxpc3RbMV07CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gJ3RydWUnKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5jaGJ4dG9nZ2xlIycraWQpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5jaGJ4dG9nZ2xlIycraWQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gbG9hZCBkYXRhIGZvciBudW1iZXIgb2YgZW50cmllcyB0byBiZSBkaXNwbGF5ZWQgb24gcGFnZQorICAgIGlmICh7e3JlcXVlc3QuR0VULmNvdW50fX0gIT0gIiIpIHsKKyAgICAgIHBhZ2VzaXplID0ge3tyZXF1ZXN0LkdFVC5jb3VudH19OworICAgIH0KKworICAgICQoJy5wYWdlc2l6ZSBvcHRpb24nKS5wcm9wKCdzZWxlY3RlZCcsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoJ1t2YWx1ZT0iJyArIHBhZ2VzaXplICsgJyJdJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignc2VsZWN0ZWQnLCB0cnVlKTsKKworICAgICQoJy5jaGJ4dG9nZ2xlJykuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHNob3doaWRlVGFibGVDb2x1bW4oJCh0aGlzKS5hdHRyKCdpZCcpLCAkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKQorICAgIH0pOworCisgICAgLy90dXJuIGVkaXQgY29sdW1ucyBkcm9wZG93biBpbnRvIGEgbXVsdGktc2VsZWN0IG1lbnUKKyAgICAgJCgnLmRyb3Bkb3duLW1lbnUgaW5wdXQsIC5kcm9wZG93bi1tZW51IGxhYmVsJykuY2xpY2soZnVuY3Rpb24oZSkgeworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0pOworCisgICAgLy9zaG93IHRvb2x0aXAgd2l0aCBhcHBsaWVkIGZpbHRlcgorICAgICQoJyNmaWx0ZXJlZCcpLnRvb2x0aXAoe2NvbnRhaW5lcjondGFibGUnLCBwbGFjZW1lbnQ6J2JvdHRvbScsIGRlbGF5OntoaWRlOjE1MDB9LCBodG1sOnRydWV9KTsKKworICAgIC8vcHJvZ3Jlc3MgYmFyIHRvb2x0aXAKKyAgICAkKCcucHJvZ3Jlc3MsIC5sZWFkIHNwYW4nKS50b29sdGlwKHtjb250YWluZXI6J3RhYmxlJywgcGxhY2VtZW50Oid0b3AnfSk7CisKKyAgICAkKCIucGFnZXNpemUiKS5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICAgICAgICByZWxvYWRfcGFyYW1zKHsiY291bnQiOiQodGhpcykudmFsKCl9KTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+CisKKzwhLS0gbW9kYWwgZmlsdGVyIGJveGVzIC0tPgorICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfXslIGlmIHRjLmZpbHRlciAlfXslIHdpdGggb2JqZWN0bmFtZT1vYmplY3RuYW1lIGY9dGMuZmlsdGVyICV9CisgICAgICAgIHslIGluY2x1ZGUgImZpbHRlcnNuaXBwZXQuaHRtbCIgJX0KKyAgIHslIGVuZHdpdGggJX17JSBlbmRpZiAlfSB7JSBlbmRmb3IgJX0KKzwhLS0gZW5kIG1vZGFscyAtLT4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcC5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlZGU2NgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcC5odG1sCkBAIC0wLDAgKzEsMjM5IEBACit7JSBsb2FkIHByb2plY3R0YWdzICV9Cis8IS0tIGNvbXBvbmVudCB0byBkaXNwbGF5IGEgZ2VuZXJpYyB0YWJsZSAtLT4KKyAgICA8c2NyaXB0PgorCisgICAgLy8KKyAgICAvLyBtb3N0IG9mIHRoZSBmb2xsb3dpbmcgamF2YXNjcmlwdCBpcyBmb3IgbWFuYWdpbmcgdGhlICdFZGl0IENvbHVtbnMnCisgICAgLy8gcG9wLXVwIGRpYWxvZyBhbmQgYWN0aW9ucy4gdGhlIGlkZWEgaXMgdGhhdCB0aGVyZSBhcmUgMiB0eXBlcworICAgIC8vIG9mIGFjdGlvbnM6IGltbWVkaWF0ZSAtIHBlcmZvcm1lZCB3aGlsZSB0aGUgZGlhbG9nIGlzIHN0aWxsCisgICAgLy8gdmlzaWJsZSAtIGhpZGUvc2hvdyBjb2x1bW5zLCBhbmQgZGVsYXllZCAtIHBlcmZvcm1lZCB3aGVuIHRoZQorICAgIC8vIGRpYWxvZyBiZWNvbWVzIGludmlzaWJsZSAtIGFueSByZXNvcnRpbmcgaWYgbmVjZXNzYXJ5LgorICAgIC8vCisgICAgLy8gV2hlbiB0aGUgZGlhbG9nIGlzIG9wZW4sIGFuIGludGVydmFsIHRpbWVyIGlzIHNldCB1cCB0bworICAgIC8vIGRldGVybWluZSBpZiB0aGUgZGlhbG9nIGlzIHN0aWxsIHZpc2libGUuIHdoZW4gdGhlIGRpYWxvZworICAgIC8vIGNsb3NlcyAtIGdvZXMgaW52aXNpYmxlLCB0aGUgZGVsYXllZCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQuCisgICAgLy8KKyAgICAvLyB0aGUgaW50ZXJ2YWwgdGltZXIgYW5kIGludGVycnVwdCBoYW5kbGVyIGlzIGEgd2F5IG9mIHNpbXVsYXRpbmcKKyAgICAvLyBhbiBvbmNsb3NlIGV2ZW50LiB0aGVyZSBpcyBwcm9iYWJseSBhIHNpbXBsZXIgd2F5IHRvIGRvIHRoaXMKKyAgICAvLyBob3dldmVyIHRoZSBwb3AtdXAgd2luZG93IGlkIHdhcyBlbHVzaXZlLgorICAgIC8vCisKKyAgICB2YXIgZWRpdENvbFRpbWVyOworICAgIHZhciBlZGl0Q29sQWN0aW9uOworCisgICAgLy8KKyAgICAvLyB0aGlzIGlzIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2YgdGhlIGludGVydmFsIHRpbWVvdXQuCisgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHRoZSBkaWFsb2cgaXMgdmlzaWJsZS4gaWYgdGhlIGRpYWxvZworICAgIC8vIGhhcyBnb25lIGludmlzaWJsZSBzaW5jZSB0aGUgbGFzdCBjaGVjaywgdGFrZSBhbnkgZGVsYXllZAorICAgIC8vIGFjdGlvbnMgaW5kaWNhdGVkIGluIHRoZSBhY3Rpb24gbGlzdCBhbmQgY2xlYXIgdGhlIHRpbWVyLgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBjaGVja1Zpc2libGUoICkgeworICAgICAgICBlZGl0Y29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdlZGl0Y29sJyApOworICAgICAgICBpZiAoIGVkaXRjb2wub2Zmc2V0V2lkdGggPD0gMCApIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoIGVkaXRDb2xUaW1lciApOworICAgICAgICAgICAgZWRpdENvbFRpbWVyID0gZmFsc2U7CisgICAgICAgICAgICBoaWRlc2hvd0NvbHVtbnMoICk7CisgICAgICAgICAgICBlZGl0Q29sQWN0aW9uID0gWyBdOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyVGFibGVSb3dzKHRlc3QpIHsKKyAgICAgICAgaWYgKHRlc3QubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgdmFyIHIgPSB0ZXN0LnNwbGl0KC9bICxdKy8pLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4gbmV3IFJlZ0V4cChlLCAnaScpIH0pOworICAgICAgICAgICAgJCgndHIuZGF0YScpLm1hcCggZnVuY3Rpb24gKGksIGVsKSB7CisgICAgICAgICAgICAgICAgKCEgci5tYXAoZnVuY3Rpb24gKGopIHsgcmV0dXJuIGoudGVzdCgkKGVsKS5odG1sKCkpfSkucmVkdWNlKGZ1bmN0aW9uIChjLCBwKSB7IHJldHVybiBjICYmIHA7fSApKSA/ICQoZWwpLmhpZGUoKSA6ICQoZWwpLnNob3coKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJCgndHIuZGF0YScpLnNob3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgaW5kaWNhdGVkIHVybCBhcmcuCisgICAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZXNvcnQKKyAgICAvLyBpcyBuZWNlc3NhcnkuIGl0IGxvb2tzIGxpa2UgYSBsb3Qgb2YgZ29ycCBzdHVmZgorICAgIC8vIGJ1dCBpdHMgYWN0dWFsbHkgcHJldHR5IHNpbXBsZS4KKyAgICAvLworCisgICAgZnVuY3Rpb24gZ2V0VVJMUGFyYW1ldGVyKCBuYW1lICkgeworICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KChuZXcgUmVnRXhwKCdbP3wmXScgKyBuYW1lICsgJz0nICsKKyAgICAgICAgICAnKFteJjtdKz8pKCZ8I3w7fCQpJykuZXhlYyhsb2NhdGlvbi5zZWFyY2gpfHxbLCIiXSlbMV0ucmVwbGFjZSgvXCsvZywKKyAgICAgICAgICAnJTIwJykpfHxudWxsCisgICAgfQorCisgICAgLy8KKyAgICAvLyB3aGVuIHRoZSBkaWFsb2cgYm94IGdvZXMgaW52aXNpYmxlCisgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW50ZXJwcmV0CisgICAgLy8gdGhlIGFjdGlvbiBsaXN0IGFuZCB0YWtlIGFueSBkZWxheWVkIGFjdGlvbnMgbmVjZXNzYXJ5LgorICAgIC8vIHRoZSBlZGl0Q29sQWN0aW9uIGxpc3QgaXMgYSBoYXNoIHRhYmxlIHdpdGgKKyAgICAvLyB0aGUgY29sdW1uIG5hbWUgYXMgdGhlIGhhc2gga2V5LCB0aGUgaGFzaCB2YWx1ZQorICAgIC8vIGlzIGEgMiBlbGVtZW50IGxpc3QuIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZmxhZworICAgIC8vIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29sdW1uIGlzIG9uIG9yIG9mZi4gdGhlCisgICAgLy8gMm5kIGVsZW1lbnQgaXMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciB0aGUgY29sdW1uLgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBoaWRlc2hvd0NvbHVtbnMoICkgeworICAgICAgICBmb3IoIHZhciBrIGluIGVkaXRDb2xBY3Rpb24gKSB7CisgICAgICAgICAgICBzaG93aGlkZURlbGF5ZWRUYWJsZUFjdGlvbiggaywgZWRpdENvbEFjdGlvblsgayBdWyAwIF0sIGVkaXRDb2xBY3Rpb25bIGsgXVsgMSBdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vCisgICAgLy8gdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBwZXJmb3JtcyB0aGUgZGVsYXllZCB0YWJsZSBhY3Rpb25zCisgICAgLy8gbmFtZWx5IGFueSByZXNvcnRpbmcgaWYgbmVjZXNzYXJ5CisgICAgLy8KKworICAgIGZ1bmN0aW9uIHNob3doaWRlRGVsYXllZFRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApIHsKKyAgICAgICAgaWYgKCAhc2ggKSB7CisgICAgICAgICAgICBwID0gZ2V0VVJMUGFyYW1ldGVyKCAib3JkZXJieSIgKS5zcGxpdCggIjoiIClbIDAgXTsKKyAgICAgICAgICAgIGlmICggcCA9PSBvcmRlcmtleSApIHsKKyAgICAgICAgICAgICAgICByZWxvYWRfcGFyYW1zKHsgJ29yZGVyYnknIDogJ3t7ZGVmYXVsdF9vcmRlcmJ5fX0nfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgcGVyZm9ybXMgdGhlIGltbWVkaWF0ZSB0YWJsZSBhY3Rpb25zCisgICAgLy8gbmFtZWx5IGFueSBjb2x1bXMgdGhhdCBuZWVkIHRvIGJlIGhpZGRlbi9zaG93bgorICAgIC8vCisKKyAgICBmdW5jdGlvbiBzaG93aGlkZUltbWVkaWF0ZVRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApIHsKKyAgICAgICAgaWYgKCBzaCApIHsKKyAgICAgICAgICAgICQoICcuJyArIGNsbmFtZSApLnNob3coIDEwMCApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJCggJy4nICsgY2xuYW1lICkuaGlkZSggMTAwICk7CisgICAgICAgIH0KKworCS8vIHNhdmUgY29va2llIGZvciBhbGwgY2hlY2tib3hlcworCXNhdmUgPSAnJzsKKwkkKCAnLmNoYnh0b2dnbGUnICkuZWFjaChmdW5jdGlvbiggKSB7CisgICAgICAgICAgICBpZiAoICQoIHRoaXMgKS5hdHRyKCAnaWQnICkgIT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHNhdmUgKz0gJzsnICsgJCggdGhpcyApLmF0dHIoICdpZCcgKSArJzonKyAkKCB0aGlzICkuaXMoICc6Y2hlY2tlZCcgKQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwkkLmNvb2tpZSggJ19kaXNwbGF5Y29sc197e29iamVjdG5hbWV9fScsIHNhdmUgKTsKKwlzYXZlID0gJyc7CisgICAgfQorCisgICAgLy8KKyAgICAvLyB0aGlzIGlzIHRoZSBvbmNsaWNrIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgY2hlY2sgYm94CisgICAgLy8gaXRlbXMgaW4gZWRpdCBjb2x1bW5zIGRpYWxvZworICAgIC8vCisKKyAgICBmdW5jdGlvbiBzaG93aGlkZVRhYmxlQ29sdW1uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApIHsKKyAgICAgICAgZWRpdGNvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnZWRpdGNvbCcgKTsKKyAgICAgICAgaWYgKCBlZGl0Y29sLm9mZnNldFdpZHRoIDw9IDAgKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB0aGlzIHBhdGggaXMgdGFrZW4gd2hlbiB0aGUgcGFnZSBpcyBmaXJzdAorICAgICAgICAgICAgLy8gZ2V0dGluZyBpbml0aWFsaXplZCAtIG5vIGRpYWxvZyB2aXNpYmxlLAorICAgICAgICAgICAgLy8gcGVyZm9ybSBib3RoIHRoZSBpbW1lZGlhdGUgYW5kIGRlbGF5ZWQgYWN0aW9ucworICAgICAgICAgICAgLy8KKworICAgICAgICAgICAgc2hvd2hpZGVJbW1lZGlhdGVUYWJsZUFjdGlvbiggY2xuYW1lLCBzaCwgb3JkZXJrZXkgKTsKKyAgICAgICAgICAgIHNob3doaWRlRGVsYXllZFRhYmxlQWN0aW9uKCBjbG5hbWUsIHNoLCBvcmRlcmtleSApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICggIWVkaXRDb2xUaW1lciApIHsKKworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYSB0aW1lciBhY3RpdmUgc28gc2V0IG9uZSB1cAorICAgICAgICAgICAgLy8gYW5kIGNsZWFyIHRoZSBhY3Rpb24gbGlzdAorICAgICAgICAgICAgLy8KKworICAgICAgICAgICAgZWRpdENvbFRpbWVyID0gc2V0SW50ZXJ2YWwoIGNoZWNrVmlzaWJsZSwgMjUwICk7CisgICAgICAgICAgICBlZGl0Q29sQWN0aW9uID0gWyBdOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gc2F2ZSB0aGUgYWN0aW9uIHRvIGJlIHRha2VuIHdoZW4gdGhlIGRpYWxvZyBjbG9zZXMKKyAgICAgICAgLy8KKworICAgICAgICBlZGl0Q29sQWN0aW9uWyBjbG5hbWUgXSA9IFsgc2gsIG9yZGVya2V5IF07CisgICAgICAgIHNob3doaWRlSW1tZWRpYXRlVGFibGVBY3Rpb24oIGNsbmFtZSwgc2gsIG9yZGVya2V5ICk7CisgICAgfQorCisgICAgPC9zY3JpcHQ+CisKKzwhLS0gY29udHJvbCBoZWFkZXIgLS0+Cis8ZGl2IGNsYXNzPSJuYXZiYXIiPgorICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiIGlkPSJzZWFyY2hmb3JtIj4KKyAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteHhsYXJnZSIgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHslaWYgb2JqZWN0X3NlYXJjaF9kaXNwbGF5ICV9e3tvYmplY3Rfc2VhcmNoX2Rpc3BsYXl9fXslZWxzZSV9e3tvYmplY3RuYW1lfX17JWVuZGlmJX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPnslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslZW5kaWYlfQorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3JkZXJieSIgdmFsdWU9Int7cmVxdWVzdC5HRVQub3JkZXJieX19Ij4KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSIxIj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNlYXJjaC1idXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+Cit7JSBpZiB0YWJsZWNvbHMgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iZWRpdC1jb2x1bW5zLWJ1dHRvbiIgY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RWRpdCBjb2x1bW5zCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXJldCI+PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorPCEtLQorCXt7dGFibGVjb2xzfHNvcnRjb2xzfX0KKy0tPgorICAgICAgICAgICAgICAgIDx1bCBpZD0nZWRpdGNvbCcgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gdGFibGVjb2xzfHNvcnRjb2xzICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCB7JSBpZiBub3QgaS5jbGNsYXNzICV9IGNsYXNzPSJjaGVja2JveCBtdXRlZCIgeyVlbHNlJX0gY2xhc3M9ImNoZWNrYm94IiB7JWVuZGlmJX0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iY2hieHRvZ2dsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgaS5jbGNsYXNzICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ie3tpLmNsY2xhc3N9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjdHt7aS5uYW1lfX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBub3QgaS5oaWRkZW4gJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPSJjaGVja2VkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJzaG93aGlkZVRhYmxlQ29sdW1uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIGkub3JkZXJpY29uICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t7aS5vcmRlcmtleX19JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgZGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0vPiAgIHt7aS5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kaXY+Cit7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyLXZlcnRpY2FsIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgICAgICAgICAgICAgICB7JSB3aXRoICIxMCAyNSA1MCAxMDAgMTUwIiBhcyBsaXN0JX0KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+IDwhLS0gbmF2YmFyLWlubmVyIC0tPgorPC9kaXY+CisKKzwhLS0gdGhlIGFjdHVhbCByb3dzIG9mIHRoZSB0YWJsZSAtLT4KKyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDwhLS0gVGFibGUgaGVhZGVyIHJvdzsgZ2VuZXJhdGVkIGZyb20gInRhYmxlY29scyIgZW50cnkgaW4gdGhlIGNvbnRleHQgZGljdCAtLT4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfTx0aCBjbGFzcz0ieyVpZiB0Yy5kY2xhc3MlfXt7dGMuZGNsYXNzfX17JWVuZGlmJX0geyUgaWYgdGMuY2xjbGFzcyAlfXt7dGMuY2xjbGFzc319eyUgZW5kaWYgJX0iPgorICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyZmllbGQlfTxhIHslaWYgdGMub3JkZXJpY29uJX0gY2xhc3M9InNvcnRlZCIgeyVlbmRpZiV9aHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6IDEsICdvcmRlcmJ5JyA6ICd7e3RjLm9yZGVyZmllbGR9fScgfSkiPnt7dGMubmFtZX19PC9hPnslZWxzZSV9PHNwYW4gY2xhc3M9Im11dGVkIj57e3RjLm5hbWV9fTwvc3Bhbj57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLmZpbHRlciV9PGRpdiBjbGFzcz0iYnRuLWdyb3VwIHB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZmlsdGVyX3t7dGMuZmlsdGVyLmNsYXNzfX0iIHJvbGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbWluaSB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciV9e3t0Yy5maWx0ZXIub3B0aW9uc3xmaWx0ZXJlZF9pY29uOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZW5kaWYlfSIgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIHRjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyICV9IHRpdGxlPSI8cD57e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX3Rvb2x0aXA6cmVxdWVzdC5HRVQuZmlsdGVyfX08L3A+PHA+PGEgY2xhc3M9J2J0biBidG4tc21hbGwgYnRuLXByaW1hcnknIGhyZWY9amF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsnZmlsdGVyJzonJ30pPlNob3cgYWxsIHslIGlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSAlfXt7ZmlsdGVyX3NlYXJjaF9kaXNwbGF5fX17JSBlbHNlICV9e3tvYmplY3RuYW1lfX17JSBlbmRpZiAlfTwvYT48L3A+IiB7JWVuZGlmJX0gZGF0YS10b2dnbGU9Im1vZGFsIj4gPGkgY2xhc3M9Imljb24tZmlsdGVyIGZpbHRlcmVkIj48L2k+IDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj57JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGg+eyUgZW5kZm9yICV9CisgICAgICAgIDwvdHI+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+CisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcF9sYXllcnMuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYmFzZXRhYmxlX3RvcF9sYXllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjIwOTFiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iYXNldGFibGVfdG9wX2xheWVycy5odG1sCkBAIC0wLDAgKzEsNSBAQAoreyUgZXh0ZW5kcyAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCit7JWJsb2NrIGN1c3RvbWJ1dHRvbnMgJX0KKyAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9IiBzdHlsZT0ibWFyZ2luLXJpZ2h0OjVweDsiPkltcG9ydCBsYXllcjwvYT4KK3slZW5kYmxvY2slfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iZmlsZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9iZmlsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JmaWxlLmh0bWwKQEAgLTAsMCArMSwyNCBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQorCit7JSBibG9jayBwYWdldGl0bGUgJX1GaWxlcyBmb3IgcGFja2FnZSB7e29iamVjdHMuMC5icGFja2FnZS5uYW1lfX0geyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIHBhZ2V0YWJsZSAlfQorICAgIHslIGlmIG5vdCBvYmplY3RzICV9CisgICAgICAgIDxwPk5vIGZpbGVzIHdlcmUgcmVjb3JkZWQgZm9yIHRoaXMgcGFja2FnZSE8L3A+CisgICAgeyUgZWxzZSAlfQorCisgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGg+TmFtZTwvdGg+CisgICAgICAgICAgICA8dGg+U2l6ZSAoQnl0ZXMpPC90aD4KKyAgICAgICAgICAgIDwvdHI+CisKKyAgICAgICAgICAgIHslIGZvciBmaWxlIGluIG9iamVjdHMgJX0KKworICAgICAgICAgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgICAgICAgIDx0ZD57e2ZpbGUucGF0aH19PC90ZD4KKyAgICAgICAgICAgIDx0ZD57e2ZpbGUuc2l6ZX19PC90ZD4KKworICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JSBlbmRpZiAlfQorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9icGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzVmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JwYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5QYWNrYWdlczwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBuYXYtcGFja2FnZXMgJX0KKyAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAncGFja2FnZXMnIGJ1aWxkLnBrICV9Ij5QYWNrYWdlczwvYT48L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPGRpdiBjbGFzcz0ic3BhbjEwIj4KKworeyUgaWYgbm90IHJlcXVlc3QuR0VULmZpbHRlciBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgbm90IG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICV9CisKKzwhLS0gRW1wdHkgLSBubyBkYXRhIGluIGRhdGFiYXNlIC0tPgorPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgIDxoMT4KKyAgICAgICAgUGFja2FnZXMKKyAgICA8L2gxPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiPgorICAgIDxzdHJvbmc+Tm8gcGFja2FnZXMgd2VyZSBidWlsdC48L3N0cm9uZz4gSG93IGRpZCB0aGlzIGhhcHBlbj8gV2VsbCwgQml0QmFrZSByZXVzZXMgYXMgbXVjaCBzdHVmZiBhcyBwb3NzaWJsZS4KKyAgICBJZiBhbGwgb2YgdGhlIHBhY2thZ2VzIG5lZWRlZCB3ZXJlIGFscmVhZHkgYnVpbHQgYW5kIGF2YWlsYWJsZSBpbiB5b3VyIGJ1aWxkIGluZnJhc3RydWN0dXJlLCBCaXRCYWtlCisgICAgd2lsbCBub3QgcmVidWlsZCBhbnkgb2YgdGhlbS4gVGhpcyBtaWdodCBiZSBzbGlnaHRseSBjb25mdXNpbmcsIGJ1dCBpdCBkb2VzIG1ha2UgZXZlcnl0aGluZyBmYXN0ZXIuCis8L2Rpdj4KKworeyUgZWxzZSAlfQorCis8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgIDxoMT4KKyAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgICV9CisgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gcGFja2FnZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgeyVlbGlmIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCV9CisgICAgICBObyBwYWNrYWdlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgUGFja2FnZXMKKyAgeyVlbmRpZiV9CisgIDwvaDE+Cis8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULnNlYXJjaH19Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCBwYWNrYWdlczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgeyUgZWxzZSAlfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisKKyAgICB7JSBmb3IgcGFja2FnZSBpbiBvYmplY3RzICV9CisKKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorCisgICAgICAgIDwhLS0gUGFja2FnZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX25hbWUiPjxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS5uYW1lfX08L2E+PC90ZD4KKyAgICAgICAgPCEtLSBQYWNrYWdlIFZlcnNpb24gLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV92ZXJzaW9uIj57JWlmIHBhY2thZ2UudmVyc2lvbiV9PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnZlcnNpb259fS17e3BhY2thZ2UucmV2aXNpb259fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgICA8IS0tIFBhY2thZ2UgU2l6ZSAtLT4KKyAgICAgICAgPHRkIGNsYXNzPSJzaXplIHNpemVjb2wiPnt7cGFja2FnZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICA8IS0tIExpY2Vuc2UgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGljZW5zZSI+e3twYWNrYWdlLmxpY2Vuc2V9fTwvdGQ+CisKKyAgICAgICAgeyVpZiBwYWNrYWdlLnJlY2lwZSV9CisgICAgICAgICAgICA8IS0tIFJlY2lwZSAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19uYW1lIj48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcGFja2FnZS5yZWNpcGUucGsgJX0iPnt7cGFja2FnZS5yZWNpcGUubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICA8IS0tIFJlY2lwZSBWZXJzaW9uIC0tPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX3ZlcnNpb24iPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayBwYWNrYWdlLnJlY2lwZS5wayAlfSI+e3twYWNrYWdlLnJlY2lwZS52ZXJzaW9ufX08L2E+PC90ZD4KKworICAgICAgICAgICAgPCEtLSBMYXllciAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSI+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWV9fTwvdGQ+CisgICAgICAgICAgICA8IS0tIExheWVyIGJyYW5jaCAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giPnt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2h9fTwvdGQ+CisgICAgICAgICAgICA8IS0tIExheWVyIGNvbW1pdCAtLT4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fY29tbWl0Ij4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgICAgIDxsaT57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2xpPgorICAgICAgICAgICAgICAgICAgICA8L3VsPiI+CisgICAgICAgICAgICAgICAgICAgIHt7cGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR8dHJ1bmNhdGVjaGFyczoxM319CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwhLS0gTGF5ZXIgZGlyZWN0b3J5IC0tPgorICAgICAgICB7JWVsc2UlfQorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfX25hbWUiPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fdmVyc2lvbiI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX19sYXllcl92ZXJzaW9uX19sb2NhbF9wYXRoIj48L3RkPgorICAgICAgICB7JWVuZGlmJX0KKworICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoreyUgZW5kaWYgJX0geyMgRW1wdHkgI30KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnJ0YXJnZXRzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JydGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYmQwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2JydGFyZ2V0cy5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzxzcGFuIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIgorICAgIHslIGlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSAlfQorICAgICAgICB0aXRsZT0iVGFyZ2V0czoKKyAgICAgICAgeyUgZm9yIHRhcmdldCBpbiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbCAlfQorICAgICAgICAgICAgeyUgaWYgdGFyZ2V0LnRhc2sgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fTp7e3RhcmdldC50YXNrfX0KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyVlbmRmb3IlfSIKKyAgICB7JWVuZGlmJX0+CisgICAgeyUgaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXNrICV9CisgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuMC50YXJnZXR9fTp7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLjAudGFza319CisgICAgeyUgZWxzZSAlfQorICAgICAgICAge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19CisgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBpZiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudCA+IDEgJX0KKyAgICAgICAgKCsge3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KQorICAgIHslIGVuZGlmICV9Cis8L3NwYW4+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkZGFzaGJvYXJkLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkZGFzaGJvYXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiOGUzOAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRkYXNoYm9hcmQuaHRtbApAQCAtMCwwICsxLDMwNyBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgbG9hZCBodW1hbml6ZSAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBwYXJlbnRicmVhZGNydW1iICV9Cit7e2J1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QuMC50YXJnZXR9fSB7JWlmIGJ1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9KCsge3tidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudHxhZGQ6Ii0xIn19KXslZW5kaWYlfSB7e2J1aWxkLm1hY2hpbmV9fSAoe3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19KQoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPCEtLSBwYWdlIHRpdGxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICA8aDE+e3tidWlsZC50YXJnZXRfc2V0LmFsbHxkaWN0c29ydDoidGFyZ2V0Inxqb2luOiIsICJ9fSB7e2J1aWxkLm1hY2hpbmV9fTwvaDE+CisgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBidWlsZCByZXN1bHQgYmFyIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KKyAgPGRpdiBjbGFzcz0iYWxlcnQgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9YWxlcnQtc3VjY2Vzc3slZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCV9YWxlcnQtZXJyb3J7JWVsc2UlfWFsZXJ0LWluZm97JWVuZGlmJX0iPgorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCBsZWFkIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLWxlZnQiPjxzdHJvbmc+CisgICAgICAgICAgICAgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9Q29tcGxldGVkeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1GYWlsZWR7JWVsc2UlfXslZW5kaWYlfQorICAgICAgICAgICAgICA8L3N0cm9uZz4gb24KKyAgICAgICAgICAgIHt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fQorPC9zcGFuPgoreyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50IG9yIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorJm5ic3A7d2l0aAoreyUgZW5kaWYgJX0KK3slaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KK3slIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICAgPHNwYW4gPiA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIHJlZCI+PC9pPjxzdHJvbmc+PGEgaHJlZj0iI2Vycm9ycyIgY2xhc3M9ImVycm9yIHNob3ctZXJyb3JzIj4ge3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPjwvc3Ryb25nPjwvc3Bhbj4KK3slIGVuZGlmICV9Cit7JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX0KK3slIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICBhbmQKK3slIGVuZGlmICV9CisgICAgPHNwYW4gPiA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24geWVsbG93Ij48L2k+PHN0cm9uZz48YSBocmVmPSIjd2FybmluZ3MiIGNsYXNzPSJ3YXJuaW5nIHNob3ctd2FybmluZ3MiPiB7e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+PC9zdHJvbmc+PC9zcGFuPgoreyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij5CdWlsZCB0aW1lOiA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPnt7IGJ1aWxkLnRpbWVzcGVudF9zZWNvbmRzfHNlY3RvaG1zIH19PC9hPgorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1idG4tc3VjY2Vzc3slZWxzZSV9YnRuLWRhbmdlcnslZW5kaWYlfSBwdWxsLXJpZ2h0IGxvZyIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgImNvb2tlcmxvZyIgYnVpbGQuaWQgJX0iPkRvd25sb2FkIGJ1aWxkIGxvZzwvYT4KKyAgICAgICAgICAgIDwvc3Bhbj4KKworeyVlbmRpZiV9CisgICAgPC9kaXY+CisgICAgeyUgaWYgYnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50ID4gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgIDxzbWFsbCBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iVG9hc3RlciBleGNlcHRpb25zIGRvIG5vdCBhZmZlY3QgeW91ciBidWlsZDogb25seSB0aGUgb3BlcmF0aW9uIG9mIFRvYXN0ZXIiPjwvaT4KKyAgICAgICAgPGEgY2xhc3M9InNob3ctZXhjZXB0aW9ucyIgaHJlZj0iI2V4Y2VwdGlvbnMiPlRvYXN0ZXIgdGhyZXcge3tidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnR9fSBleGNlcHRpb257e2J1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICA8L3NtYWxsPgorICAgIDwvZGl2PgorICAgIHslIGVuZGlmICV9CisgIDwvZGl2PgorPC9kaXY+CisKK3slIGlmIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorPGRpdiBjbGFzcz0iYWNjb3JkaW9uIHNwYW4xMCBwdWxsLXJpZ2h0IiBpZD0iZXJyb3JzIj4KKyAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+CisgICAgICAgICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSBlcnJvciB0b2dnbGUtZXJyb3JzIj4KKyAgICAgICAgIDxoMiBpZD0iZXJyb3ItdG9nZ2xlIj4KKyAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiI+PC9pPgorICAgICAgICAgICB7e2J1aWxkLmVycm9ycy5jb3VudH19IGVycm9ye3tidWlsZC5lcnJvcnMuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgIDwvaDI+CisgICAgICA8L2E+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWJvZHkgY29sbGFwc2UgaW4iIGlkPSJjb2xsYXBzZS1lcnJvcnMiPgorICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICB7JSBmb3IgZXJyb3IgaW4gbG9nbWVzc2FnZXMgJX17JSBpZiBlcnJvci5sZXZlbCA9PSAyICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciI+CisgICAgICAgICAgICAgIDxwcmU+e3tlcnJvci5tZXNzYWdlfX08L3ByZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+Cit7JSBlbmRpZiAlfQorCit7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX0KKzwhLS0gYnVpbHQgaW1hZ2VzIC0tPgoreyUgaWYgaGFzSW1hZ2VzICV9Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjEwIHB1bGwtcmlnaHQiPgorICAgIDxoMj5JbWFnZXM8L2gyPgorICAgIHslIGZvciB0YXJnZXQgaW4gdGFyZ2V0cyAlfQorICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0LmlzX2ltYWdlICV9CisgICAgPGRpdiBjbGFzcz0id2VsbCBkYXNoYm9hcmQtc2VjdGlvbiI+CisgICAgICAgIDxoMz48YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+e3t0YXJnZXQudGFyZ2V0fX08L2E+CisgICAgICAgICAgICAgICAgPC9oMz4KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD5QYWNrYWdlcyBpbmNsdWRlZDwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPnt7dGFyZ2V0Lm5wa2d9fTwvYT48L2RkPgorICAgICAgICAgICAgPGR0PlRvdGFsIHBhY2thZ2Ugc2l6ZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3t0YXJnZXQucGtnc3p8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvZGQ+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXJnZXQudGFyZ2V0SGFzTm9JbWFnZXMgJX0KKyAgICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gc3BhbjciPgorICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlRoaXMgYnVpbGQgZGlkIG5vdCBjcmVhdGUgYW55IGltYWdlIGZpbGVzPC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB2YWxpZCBpbWFnZSBhbmQgbGljZW5zZSBtYW5pZmVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgZnJvbSBhIHByZXZpb3VzIGJ1aWxkIGFscmVhZHkgZXhpc3QgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Li4uL3Bva3kvYnVpbGQvdG1wL2RlcGxveTwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4gWW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldHBrZycgYnVpbGQucGsgdGFyZ2V0LnRhcmdldC5wayAlfSI+dmlldyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBtYW5pZmVzdCBpbmZvcm1hdGlvbjwvYT4gaW4gVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb24gaW4gZGlzayBvZiB0aGUgbGljZW5zZSBtYW5pZmVzdCwgYSBkb2N1bWVudCBsaXN0aW5nIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhbmQgdGhlaXIgbGljZW5zZXMiPjwvaT4KKworICAgICAgICAgICAgICAgIExpY2Vuc2UgbWFuaWZlc3QKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICd0YXJnZXRwa2cnIGJ1aWxkLnBrIHRhcmdldC50YXJnZXQucGsgJX0iPlZpZXcgaW4gVG9hc3RlcjwvYT4gfAorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICdsaWNlbnNlbWFuaWZlc3QnIHRhcmdldC50YXJnZXQucGsgJX0iPkRvd25sb2FkPC9hPjwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkltYWdlIGZpbGVzIGFyZSBzdG9yZWQgaW4gPGNvZGU+L2J1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzLzwvY29kZT4iPjwvaT4KKyAgICAgICAgICAgICAgICBJbWFnZSBmaWxlcworICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gdGFyZ2V0LmltYWdlRmlsZXMgJX0KKyAgICAgICAgICAgIHslIGlmIGJ1aWxkLnByb2plY3QgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLnBrICdpbWFnZWZpbGUnIGkuaWQgJX0iPnt7aS5wYXRofX08L2E+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT57e2kucGF0aH19CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAoe3tpLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSk8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2RkPgorICAgICAgICA8L2RsPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBlbmRmb3IgJX0KKzwvZGl2PgoreyUgZW5kaWYgJX0KKworeyVlbHNlJX0KKzwhLS0gZXJyb3IgZHVtcCAtLT4KK3slZW5kaWYlfQorCis8IS0tIG90aGVyIGFydGlmYWN0cyAtLT4KK3slIGlmIGJ1aWxkLmJ1aWxkYXJ0aWZhY3Rfc2V0LmFsbC5jb3VudCA+IDAgJX0KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAgcHVsbC1yaWdodCI+Cis8aDI+T3RoZXIgYXJ0aWZhY3RzPC9oMj4KKworICAgIDxkaXYgY2xhc3M9IndlbGwgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZCBhcnRpZmFjdHMgZGlzY292ZXJlZCBpbiA8aT50bXAvZGVwbG95L2ltYWdlczwvaT4uIFVzdWFsbHkga2VybmVsIGltYWdlcyBhbmQga2VybmVsIG1vZHVsZXMuIj48L2k+CisgICAgICAgICAgICAgICAgT3RoZXIgYXJ0aWZhY3RzPC9kdD4KKyAgICAgICAgICAgIDxkZD48ZGl2PgorICAgICAgICAgICAgICB7JSBmb3IgYmEgaW4gYnVpbGQuYnVpbGRhcnRpZmFjdF9zZXQuYWxsfGRpY3Rzb3J0OiJmaWxlX25hbWUiICV9CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAnYnVpbGRhcnRpZmFjdCcgYmEuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICB7e2JhLmdldF9sb2NhbF9maWxlX25hbWV9fQorICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgICh7e2JhLmZpbGVfc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19KSA8YnIvPgorICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGQ+CisJPC9kbD4KKyAgICA8L2Rpdj4KKworPC9kaXY+Cit7JSBlbmRpZiAlfQorPCEtLSBidWlsZCBzdW1tYXJ5IC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCBwdWxsLXJpZ2h0Ij4KKzxoMj5CdWlsZCBzdW1tYXJ5PC9oMj4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+CisgICAgICAgIDxoND48YSBocmVmPSJ7JXVybCAnY29uZmlndXJhdGlvbicgYnVpbGQucGslfSI+Q29uZmlndXJhdGlvbjwvYT48L2g0PgorICAgICAgICAgICAgPGRsPgorICAgICAgICA8ZHQ+TWFjaGluZTwvZHQ+PGRkPnt7YnVpbGQubWFjaGluZX19PC9kZD4KKyAgICAgICAgPGR0PkRpc3RybzwvZHQ+PGRkPnt7YnVpbGQuZGlzdHJvfX08L2RkPgorICAgICAgICA8ZHQ+TGF5ZXJzPC9kdD57JSBmb3IgaSBpbiBidWlsZC5sYXllcl92ZXJzaW9uX2J1aWxkLmFsbHxkaWN0c29ydDoibGF5ZXIubmFtZSIgJX08ZGQ+e3tpLmxheWVyLm5hbWV9fTwvZGQ+eyVlbmRmb3IlfQorICAgICAgICAgICAgPC9kbD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ3ZWxsIHNwYW40IGRhc2hib2FyZC1zZWN0aW9uIj4KKyAgICAgICAgPGg0PjxhIGhyZWY9InsldXJsICd0YXNrcycgYnVpbGQucGslfSI+VGFza3M8L2E+PC9oND4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgICAgIHslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3V0Y29tZT00IG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX0KKyAgICAgICAgICAgIHslIGlmIGV4ZWN0YXNrLmNvdW50ID4gMCAlfQorICAgICAgICAgICAgICAgIDxkdD5GYWlsZWQgdGFza3M8L2R0PgorICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvciIgaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5pZCBleGVjdGFzay4wLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay1uYW1lIj57e2V4ZWN0YXNrLjAudGFza19uYW1lfX08L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiBleGVjdGFzay4wLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSIiIGRhdGEtb3JpZ2luYWwtdGl0bGU9IkRvd25sb2FkIHRhc2sgbG9nIGZpbGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgIHslIGVsaWYgZXhlY3Rhc2suY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImVycm9yIiBocmVmPSJ7JSB1cmwgInRhc2tzIiBidWlsZC5pZCAlfT9maWx0ZXI9b3V0Y29tZSUzQTQiPnt7ZXhlY3Rhc2suY291bnR9fTwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8ZHQ+VG90YWwgbnVtYmVyIG9mIHRhc2tzPC9kdD48ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0iPnslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3JkZXJfX2d0PTAgYXMgYWxsdGFza3MgJX17e2FsbHRhc2tzLmNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgVGFza3MgZXhlY3V0ZWQKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSInRXhlY3V0ZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCI+PC9pPgorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+PGEgaHJlZj0ieyUgdXJsICd0YXNrcycgYnVpbGQucGsgJX0/ZmlsdGVyPXRhc2tfZXhlY3V0ZWQlM0ExJmFtcDtjb3VudD0yNSZhbXA7c2VhcmNoPSZhbXA7cGFnZT0xJmFtcDtvcmRlcmJ5PW9yZGVyJTNBJTJCIj57JSBxdWVyeSBidWlsZC50YXNrX2J1aWxkIHRhc2tfZXhlY3V0ZWQ9MSBvcmRlcl9fZ3Q9MCBhcyBleGVjdGFzayV9e3tleGVjdGFzay5jb3VudH19PC9hPjwvZGQ+CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIFRhc2tzIG5vdCBleGVjdXRlZAorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IidOb3QgZXhlY3V0ZWQnIHRhc2tzIGRvbid0IG5lZWQgdG8gcnVuIGJlY2F1c2UgdGhlaXIgb3V0Y29tZSBpcyBwcm92aWRlZCBieSBhbm90aGVyIHRhc2siPjwvaT4KKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9P2ZpbHRlcj10YXNrX2V4ZWN1dGVkJTNBMCZhbXA7Y291bnQ9MjUmYW1wO3NlYXJjaD0mYW1wO3BhZ2U9MSZhbXA7b3JkZXJieT1vcmRlciUzQSUyQiI+eyUgcXVlcnkgYnVpbGQudGFza19idWlsZCB0YXNrX2V4ZWN1dGVkPTAgb3JkZXJfX2d0PTAgYXMgbm9leGVjdGFzayV9e3tub2V4ZWN0YXNrLmNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgUmV1c2UKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGVyY2VudGFnZSBvZiAnbm90IGV4ZWN1dGVkJyB0YXNrcyBvdmVyIHRoZSB0b3RhbCBudW1iZXIgb2YgdGFza3MsIHdoaWNoIGlzIGEgbWVhc3VyZSBvZiB0aGUgZWZmaWNpZW5jeSBvZiB5b3VyIGJ1aWxkIj48L2k+CisgICAgICAgIDwvZHQ+CisgICAgICAgIDxkZD4KK3slIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3JkZXJfX2d0PTAgYXMgdGV4ZWMgJX0KK3slIGlmIG5vZXhlY3Rhc2suY291bnR8bXVsdGlwbHk6MTAwfGRpdmlkZTp0ZXhlYy5jb3VudCA8IDAgJX0KKzAKK3slIGVsc2UgJX0KK3t7bm9leGVjdGFzay5jb3VudHxtdWx0aXBseToxMDB8ZGl2aWRlOnRleGVjLmNvdW50fX0KK3slIGVuZGlmICV9CislCisgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8L2RsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9IndlbGwgc3BhbjQgZGFzaGJvYXJkLXNlY3Rpb24iPgorICAgICAgICA8aDQ+PGEgaHJlZj0ieyUgdXJsICdyZWNpcGVzJyBidWlsZC5wayAlfSI+UmVjaXBlczwvYT4gJiA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VzJyBidWlsZC5wayAlfSI+UGFja2FnZXM8L2E+PC9oND4KKyAgICAgICAgICAgIDxkbD4KKyAgICAgICAgPGR0PlJlY2lwZXMgYnVpbHQ8L2R0PjxkZD48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij57e3JlY2lwZWNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgPGR0PlBhY2thZ2VzIGJ1aWx0PC9kdD48ZGQ+PGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlcycgYnVpbGQucGsgJX0iPnt7cGFja2FnZWNvdW50fX08L2E+PC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisgICAgPC9kaXY+Cis8L2Rpdj4KKworeyUgaWYgYnVpbGQud2FybmluZ3MuY291bnQgJX0KKzxkaXYgY2xhc3M9ImFjY29yZGlvbiBzcGFuMTAgcHVsbC1yaWdodCIgaWQ9Indhcm5pbmdzIj4KKyAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taGVhZGluZyI+CisgICAgICA8YSBjbGFzcz0iYWNjb3JkaW9uLXRvZ2dsZSB3YXJuaW5nIHRvZ2dsZS13YXJuaW5ncyI+CisgICAgICAgIDxoMiBpZD0id2FybmluZy10b2dnbGUiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXdhcm5pbmctc2lnbiI+PC9pPgorICAgICAgICAgIHt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fQorICAgICAgICA8L2gyPgorICAgICAgPC9hPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIiBpZD0iY29sbGFwc2Utd2FybmluZ3MiPgorICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICB7JSBmb3Igd2FybmluZyBpbiBsb2dtZXNzYWdlcyAlfXslIGlmIHdhcm5pbmcubGV2ZWwgPT0gMSAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+CisgICAgICAgICAgICAgIDxwcmU+e3t3YXJuaW5nLm1lc3NhZ2V9fTwvcHJlPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgeyUgZW5kaWYgJX17JSBlbmRmb3IgJX0KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KK3slIGVuZGlmICV9CisKKworeyUgaWYgYnVpbGQudG9hc3Rlcl9leGNlcHRpb25zLmNvdW50ID4gMCAlfQorPGRpdiBjbGFzcz0iYWNjb3JkaW9uIHNwYW4xMCBwdWxsLXJpZ2h0IiBpZD0iZXhjZXB0aW9ucyI+CisgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ncm91cCI+CisgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRpbmciPgorICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgZXhjZXB0aW9uIHRvZ2dsZS1leGNlcHRpb25zIj4KKyAgICAgICAgPGgyIGlkPSJleGNlcHRpb24tdG9nZ2xlIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi13YXJuaW5nLXNpZ24iPjwvaT4KKyAgICAgICAgICB7e2J1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucy5jb3VudH19IFRvYXN0ZXIgZXhjZXB0aW9ue3tidWlsZC50b2FzdGVyX2V4Y2VwdGlvbnMuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgPC9oMj4KKyAgICAgIDwvYT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tYm9keSBjb2xsYXBzZSIgaWQ9ImNvbGxhcHNlLWV4Y2VwdGlvbnMiPgorICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjEwIj4KKyAgICAgICAgICB7JSBmb3IgZXhjZXB0aW9uIGluIGJ1aWxkLnRvYXN0ZXJfZXhjZXB0aW9ucyAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXhjZXB0aW9uIj4KKyAgICAgICAgICAgICAgPHByZT57e2V4Y2VwdGlvbi5tZXNzYWdlfX08L3ByZT4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kaWYgJX0KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICAvL3Nob3cgd2FybmluZ3Mgc2VjdGlvbiB3aGVuIHJlcXVlc3RlZCBmcm9tIHRoZSBwcmV2aW91cyBwYWdlCisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnI3dhcm5pbmdzJykgPiAtMSkgeworICAgICAgICAgICAgJCgnI2NvbGxhcHNlLXdhcm5pbmdzJykuYWRkQ2xhc3MoJ2luJyk7CisgICAgICAgIH0KKyAgICB9KTsKKzwvc2NyaXB0PgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHJlcXVlc3RkZXRhaWxzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcmVxdWVzdGRldGFpbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhMWZiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHJlcXVlc3RkZXRhaWxzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKKworeyUgYmxvY2sgcHJvamVjdGluZm9tYWluICV9CisgICAgICA8IS0tIGJlZ2luIGNvbnRlbnQgLS0+CisKKyAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorCisgICAgICAgICAgICA8IS0tIGVuZCBsZWZ0IHNpZGViYXIgY29udGFpbmVyIC0tPgorICAgICAgICAgICAgPCEtLSBCZWdpbiByaWdodCBjb250YWluZXIgLS0+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgICAgICAgICAgPGgxPgorIDxzcGFuIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB7JWlmIGJ1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50ID4gMSV9dGl0bGU9IlRhcmdldHM6IHslZm9yIHRhcmdldCBpbiBidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbCV9e3t0YXJnZXQudGFyZ2V0fX0geyVlbmRmb3IlfSJ7JWVuZGlmJX0+e3tidWlsZHJlcXVlc3QuYnJ0YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19IHslaWYgYnVpbGRyZXF1ZXN0LmJydGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkcmVxdWVzdC5icnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9IHt7YnVpbGRyZXF1ZXN0LmdldF9tYWNoaW5lfX0gPC9zcGFuPgorCisgICAgICAgIDwvaDE+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciI+CisgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImxlYWQiPgorICAgICAgICAgICAgICAgICAgPHN0cm9uZz5GYWlsZWQ8L3N0cm9uZz4KKyAgICAgICAgICAgICAgICAgICAgb24ge3sgYnVpbGRyZXF1ZXN0LnVwZGF0ZWR8ZGF0ZTonZC9tL3kgSDppJyB9fQorICAgICAgICAgICAgd2l0aAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIiBzdHlsZT0ibWFyZ2luLWxlZnQ6NnB4OyI+PC9pPgorICAgICAgICAgICAgICAgICAgPHN0cm9uZz48YSBjbGFzcz0iZXJyb3IgYWNjb3JkaW9uLXRvZ2dsZSB0b2dnbGUtZXJyb3JzIiBocmVmPSIjZXJyb3JzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7YnVpbGRyZXF1ZXN0LmJyZXJyb3Jfc2V0LmFsbC5jb3VudH19IGVycm9ye3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fHBsdXJhbGl6ZX19CisgICAgICAgICAgICAgIDwvYT48L3N0cm9uZz4KKyAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij5CdWlsZCB0aW1lOiB7e2J1aWxkcmVxdWVzdC5nZXRfZHVyYXRpb258c2VjdG9obXN9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbiIgaWQ9ImVycm9ycyI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1oZWFkaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUgZXJyb3IgdG9nZ2xlLWVycm9ycyI+CisgICAgICAgICAgICAgICAgICAgICAgPGgyPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tbWludXMtc2lnbiI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAge3tidWlsZHJlcXVlc3QuYnJlcnJvcl9zZXQuYWxsLmNvdW50fX0gZXJyb3J7e2J1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwuY291bnR8cGx1cmFsaXplfX0KKyAgICAgICAgICAgICAgICAgICAgICA8L2gyPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1ib2R5IGNvbGxhcHNlIGluIiBpZD0iY29sbGFwc2UtZXJyb3JzIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMTAiPgorICAgICAgICAgICAgICAgeyUgZm9yIGVycm9yIGluIGJ1aWxkcmVxdWVzdC5icmVycm9yX3NldC5hbGwgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRVJST1I6IDxkaXYgY2xhc3M9ImFpciB3ZWxsIj48cHJlPnt7ZXJyb3IuZXJybXNnfX08L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+IDwhLS0gZW5kIG9mIHJvdy1mbHVpZCAtLT4KKworCit7JWVuZGJsb2NrJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvYnVpbGRzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDBjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkcy5odG1sCkBAIC0wLDAgKzEsMTA5IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLm1pbi5jc3MiIHR5cGU9J3RleHQvY3NzJz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL3N0YXRpYy9jc3MvanF1ZXJ5LXVpLnN0cnVjdHVyZS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS50aGVtZS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9qcXVlcnktdWkubWluLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvc3RhdGljL2pzL2ZpbHRlcnNuaXBwZXQuanMiPjwvc2NyaXB0PgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworeyUgaWYgbGFzdF9kYXRlX2Zyb20gYW5kIGxhc3RfZGF0ZV90byAlfQorPHNjcmlwdD4KKyAgICAvLyBpbml0aWFsaXplIHRoZSBkYXRlIHJhbmdlIGNvbnRyb2xzCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICBkYXRlX2luaXQoJ3N0YXJ0ZWRfb24nLCd7e2xhc3RfZGF0ZV9mcm9tfX0nLCd7e2xhc3RfZGF0ZV90b319Jywne3tkYXRlTWluX3N0YXJ0ZWRfb259fScsJ3t7ZGF0ZU1heF9zdGFydGVkX29ufX0nLCd7e2RhdGVyYW5nZV9zZWxlY3RlZH19Jyk7CisgICAgICAgIGRhdGVfaW5pdCgnY29tcGxldGVkX29uJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZU1heF9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICB9KTsKKzwvc2NyaXB0PgoreyVlbmRpZiV9IHsjIGxhc3RfZGF0ZV9mcm9tIGFuZCBsYXN0X2RhdGVfdG8gI30KKworPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKworICB7JSBpbmNsdWRlICJtcmJfc2VjdGlvbi5odG1sIiAlfQorCisKKyAgeyUgaWYgMSAlfQorICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgPGgxPgorICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gYnVpbGR7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICB7JWVsaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgICAgIE5vIGJ1aWxkcyBmb3VuZAorICAgICAgeyVlbHNlJX0KKyAgICAgICAgICBBbGwgYnVpbGRzCisgICAgICB7JWVuZGlmJX0KKyAgICAgPC9oMT4KKyAgPC9kaXY+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSIKKyAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgICAgICAgICAgIHt7cmVxdWVzdC5HRVQuc2VhcmNofX0KKyAgICAgICAgeyUgZW5kaWYgJX0iLz4KKyAgICAgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfTxhIGhyZWY9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSIgY2xhc3M9ImFkZC1vbiBidG4iIHRhYmluZGV4PSItMSI+PGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+PC9hPnslIGVuZGlmICV9CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsiIG9uY2xpY2s9ImphdmFzY3JpcHQ6JCgnI3NlYXJjaCcpLnZhbCgnJyk7c2VhcmNoZm9ybS5zdWJtaXQoKSI+U2hvdyBhbGwgYnVpbGRzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisKKyAgeyUgZWxzZSAlfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgICAgICAgIDwhLS0gVGFibGUgZGF0YSByb3dzOyB0aGUgb3JkZXIgbmVlZHMgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mICJ0YWJsZWNvbHMiIGRlZmluaXRpb25zOyBhbmQgdGhlIDx0ZCBjbGFzcyB2YWx1ZSBuZWVkcyB0byBtYXRjaCB0aGUgdGFibGVjb2xzIGNsY2xhc3MgdmFsdWUgZm9yIHNob3cvaGlkZSBidXR0b25zIHRvIHdvcmsgLS0+CisgICAgICAgIHslIGZvciBidWlsZCBpbiBvYmplY3RzICV9CisgICAgICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dGNvbWUiPgorICAgICAgICA8YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+eyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCV9PGkgY2xhc3M9Imljb24tb2stc2lnbiBzdWNjZXNzIj48L2k+eyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX08aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIGVycm9yIj48L2k+eyVlbHNlJX17JWVuZGlmJX08L2E+ICZuYnNwOworICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0YXJnZXQiPnslIGZvciB0IGluIGJ1aWxkLnRhcmdldF9zZXQuYWxsICV9IDxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij4ge3t0LnRhcmdldH19IDwvYT4gPGJyIC8+eyUgZW5kZm9yICV9PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ibWFjaGluZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQubWFjaGluZX19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InN0YXJ0ZWRfb24iPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57e2J1aWxkLnN0YXJ0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbXBsZXRlZF9vbiI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJmYWlsZWRfdGFza3MgZXJyb3IiPgorICAgICAgICAgICAgICAgIHslIHF1ZXJ5IGJ1aWxkLnRhc2tfYnVpbGQgb3V0Y29tZT00IG9yZGVyX19ndD0wIGFzIGV4ZWN0YXNrJX0KKyAgICAgICAgICAgICAgICAgICAgeyUgaWYgZXhlY3Rhc2suY291bnQgPT0gMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5pZCBleGVjdGFzay4wLmlkICV9Ij57e2V4ZWN0YXNrLjAucmVjaXBlLm5hbWV9fS57e2V4ZWN0YXNrLjAudGFza19uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5pZCAidGFza2xvZ2ZpbGUiIGV4ZWN0YXNrLjAuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICB7JSBlbGlmIGV4ZWN0YXNrLmNvdW50ID4gMSV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInRhc2tzIiBidWlsZC5pZCAlfT9maWx0ZXI9b3V0Y29tZSUzQTQiPnt7ZXhlY3Rhc2suY291bnR9fSB0YXNre3tleGVjdGFzay5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJlcnJvcnMuY291bnQgZXJyb3JzX25vIj4KKyAgICAgICAgICAgICAgICB7JSBpZiAgYnVpbGQuZXJyb3JzLmNvdW50ICV9CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJlcnJvcnMuY291bnQgZXJyb3IiIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9I2Vycm9ycyI+e3tidWlsZC5lcnJvcnMuY291bnR9fSBlcnJvcnt7YnVpbGQuZXJyb3JzLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZ3Nfbm8iPnslIGlmICBidWlsZC53YXJuaW5ncy5jb3VudCAlfTxhIGNsYXNzPSJ3YXJuaW5ncy5jb3VudCB3YXJuaW5nIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSN3YXJuaW5ncyI+e3tidWlsZC53YXJuaW5ncy5jb3VudH19IHdhcm5pbmd7e2J1aWxkLndhcm5pbmdzLmNvdW50fHBsdXJhbGl6ZX19PC9hPnslZW5kaWYlfTwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRpbWUiPjxhIGhyZWY9InslIHVybCAiYnVpbGR0aW1lIiBidWlsZC5pZCAlfSI+e3tidWlsZC50aW1lc3BlbnRfc2Vjb25kc3xzZWN0b2htc319PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dHB1dCI+CisgICAgICAgICAgICAgIHslIGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9CisgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQlfSNpbWFnZXMiPnt7ZnN0eXBlc3xnZXRfZGljdF92YWx1ZTpidWlsZC5pZH19PC9hPgorICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdCcgYnVpbGQucHJvamVjdC5pZCAlfSI+e3tidWlsZC5wcm9qZWN0Lm5hbWV9fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisKKyAgICAgICAgeyUgZW5kZm9yICV9CisKKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgIHslIGVuZGlmICV9IHsjIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ICN9Cit7JSBlbmRpZiAlfSB7IyBlbXB0eSAjfQorPC9kaXY+PCEtLSBlbmQgcm93LWZsdWlkLS0+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2J1aWxkdGltZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg0YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9idWlsZHRpbWUuaHRtbApAQCAtMCwwICsxLDQgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkJ1aWxkIFRpbWU8L2xpPgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbi5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd1cmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ODk5MQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsNzEgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+Q29uZmlndXJhdGlvbjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBuYXYtY29uZmlndXJhdGlvbiAlfQorICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPCEtLSBwYWdlIHRpdGxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICA8aDE+Q29uZmlndXJhdGlvbjwvaDE+CisgPC9kaXY+Cis8L2Rpdj4KKworPCEtLSBjb25maWd1cmF0aW9uIHRhYmxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHB1bGwtcmlnaHQgc3BhbjEwIiBpZD0ibmF2VGFiIj4KKzx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9IiMiPlN1bW1hcnk8L2E+PC9saT4KKyAgICA8bGkgY2xhc3M9IiI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd2YXJzJyBidWlsZC5pZCAlfSI+Qml0QmFrZSB2YXJpYWJsZXM8L2E+PC9saT4KKzwvdWw+CisKKyAgPCEtLSBzdW1tYXJ5IC0tPgorICA8ZGl2IGlkPSJzdW1tYXJ5IiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICA8aDM+QnVpbGQgY29uZmlndXJhdGlvbjwvaDM+CisgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgIHslaWYgQkJfVkVSU0lPTiAlfTxkdD5CaXRCYWtlIHZlcnNpb248L2R0PjxkZD57e0JCX1ZFUlNJT059fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIEJVSUxEX1NZUyAlfTxkdD5CdWlsZCBzeXN0ZW08L2R0PjxkZD57e0JVSUxEX1NZU319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgTkFUSVZFTFNCU1RSSU5HICV9PGR0Pkhvc3QgZGlzdHJpYnV0aW9uPC9kdD48ZGQ+e3tOQVRJVkVMU0JTVFJJTkd9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIFRBUkdFVF9TWVMgJX08ZHQ+VGFyZ2V0IHN5c3RlbTwvZHQ+PGRkPnt7VEFSR0VUX1NZU319PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgTUFDSElORSAlfTxkdD5NYWNoaW5lPC9kdD48ZGQ+e3tNQUNISU5FfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBESVNUUk8gJX08ZHQ+RGlzdHJvPC9kdD48ZGQ+e3tESVNUUk99fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIERJU1RST19WRVJTSU9OICV9PGR0PkRpc3RybyB2ZXJzaW9uPC9kdD48ZGQ+e3tESVNUUk9fVkVSU0lPTn19PC9kZD4geyUgZW5kaWYgJX0KKyAgICAgIHslaWYgVFVORV9GRUFUVVJFUyAlfTxkdD5UdW5lIGZlYXR1cmVzPC9kdD48ZGQ+e3tUVU5FX0ZFQVRVUkVTfX08L2RkPiB7JSBlbmRpZiAlfQorICAgICAgeyVpZiBUQVJHRVRfRlBVICV9PGR0PlRhcmdldCBGUFU8L2R0PjxkZD57e1RBUkdFVF9GUFV9fTwvZGQ+IHslIGVuZGlmICV9CisgICAgICB7JWlmIHRhcmdldHMuYWxsICV9PGR0PlRhcmdldChzKTwvZHQ+CisgICAgICAgICAgPGRkPiA8dWw+IHslIGZvciB0YXJnZXQgaW4gdGFyZ2V0cy5hbGwgJX0KKyAgICAgICAgICAgICAgIDxsaT57e3RhcmdldC50YXJnZXR9fXslaWYgZm9ybG9vcC5jb3VudGVyID4gMSAlfTxicj57JSBlbmRpZiAlfTwvbGk+CisgICAgICAgICAgeyUgZW5kZm9yICV9IDwvdWw+IDwvZGQ+IHslIGVuZGlmICV9CisgICAgPC9kbD4KKyAgICA8aDM+TGF5ZXJzPC9oMz4KKyAgICA8ZGl2IGNsYXNzPSJzcGFuOSIgc3R5bGU9Im1hcmdpbi1sZWZ0OjBweDsiPgorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgPHRoZWFkPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPkxheWVyPC90aD4KKyAgICAgICAgICA8dGg+TGF5ZXIgYnJhbmNoPC90aD4KKyAgICAgICAgICA8dGg+TGF5ZXIgY29tbWl0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+eyUgZm9yIGx2IGluIGJ1aWxkLmxheWVyX3ZlcnNpb25fYnVpbGQuYWxsfGRpY3Rzb3J0OiJsYXllci5uYW1lIiAlfQorICAgICAgICA8dHI+CisgICAgICAgICAgICA8dGQ+e3tsdi5sYXllci5uYW1lfX08L3RkPgorICAgICAgICAgICAgPHRkPnt7bHYuYnJhbmNofX08L3RkPgorICAgICAgICAgICAgPHRkPiA8YSBjbGFzcz0iYnRuIiBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgIDxsaT57e2x2LmNvbW1pdH19PC9saT4gPC91bD4iPgorICAgICAgICAgICAgICAgICAgICB7e2x2LmNvbW1pdHx0cnVuY2F0ZWNoYXJzOjEzfX0KKyAgICAgICAgICAgICAgICA8L2E+PC90ZD4KKyAgICAgICAgPC90cj57JSBlbmRmb3IgJX0KKyAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKworPC9kaXY+Cit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd2YXJzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NvbmZpZ3ZhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU3MmFlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jb25maWd2YXJzLmh0bWwKQEAgLTAsMCArMSwxMzIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+Q29uZmlndXJhdGlvbjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBuYXYtY29uZmlndXJhdGlvbiAlfQorICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICdjb25maWd1cmF0aW9uJyBidWlsZC5wayAlfSI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPCEtLSBwYWdlIHRpdGxlIC0tPgorPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW4xMCI+CisgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorIDxoMT4KKyAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSB2YXJpYWJsZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgeyVlbGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgICAgIE5vIHZhcmlhYmxlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgQ29uZmlndXJhdGlvbgorICB7JWVuZGlmJX0KKyA8L2gxPgorIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gY29uZmlndXJhdGlvbiB0YWJsZSAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBwdWxsLXJpZ2h0IHNwYW4xMCIgaWQ9Im5hdlRhYiI+CisgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgPGxpIGNsYXNzPSIiPjxhIGhyZWY9InslIHVybCAnY29uZmlndXJhdGlvbicgYnVpbGQuaWQgJX0iPlN1bW1hcnk8L2E+PC9saT4KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0iIyIgPkJpdEJha2UgdmFyaWFibGVzPC9hPjwvbGk+CisgIDwvdWw+CisKKyAgPCEtLSB2YXJpYWJsZXMgLS0+CisgIDxkaXYgaWQ9InZhcmlhYmxlcyIgY2xhc3M9InRhYi1wYW5lIj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyUgZW5kaWYgJX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHZhcmlhYmxlczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgeyUgZWxzZSAlfQorICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisKKyAgeyUgZm9yIHZhcmlhYmxlIGluIG9iamVjdHMgJX0KKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICA8dGQgY2xhc3M9InZhcmlhYmxlX25hbWUiPjxhIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaHJlZj0iI3ZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSI+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX08L2E+PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJ2YXJpYWJsZV92YWx1ZSI+PGEgZGF0YS10b2dnbGU9Im1vZGFsIiBocmVmPSIjdmFyaWFibGUte3t2YXJpYWJsZS5wa319Ij57e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfHRydW5jYXRlY2hhcnM6MTUzfX08L2E+PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJmaWxlIj48YSBkYXRhLXRvZ2dsZT0ibW9kYWwiIGhyZWY9IiN2YXJpYWJsZS17e3ZhcmlhYmxlLnBrfX0iPgorICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUudmhpc3RvcnkuYWxsICV9CisgICAgICAgICAgICAgICAgeyUgZm9yIHBhdGggaW4gdmFyaWFibGUudmhpc3RvcnkuYWxsfGZpbHRlcl9zZXRpbl9maWxlczpmaWxlX2ZpbHRlciAlfQorICAgICAgICAgICAgICAgICAgICB7e3BhdGh9fTxici8+CisgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L2E+PC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+CisgICAgICAgICAgICB7JSBpZiB2YXJpYWJsZS5kZXNjcmlwdGlvbiAlfQorICAgICAgICAgICAgICAgIHt7dmFyaWFibGUuZGVzY3JpcHRpb259fQorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2N1cnJlbnQvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLXt7dmFyaWFibGUudmFyaWFibGVfbmFtZXx2YXJpYWJsZV9wYXJlbnRfbmFtZX19IiB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iPjwvaT48L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICA8L3RkPgorICAgIDwvdHI+Cit7JSBlbmRmb3IgJX0KKworeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PiA8IS0tIGVuZHZhcmlhYmxlcyAtLT4KKworPCEtLSBmaWxlIGxpc3QgcG9wdXBzIC0tPgoreyUgZm9yIHZhcmlhYmxlIGluIG9iamVjdHMgJX0KKyAgICB7JSBpZiB2YXJpYWJsZS52aGlzdG9yeS5jb3VudCAlfQorICAgIDxkaXYgaWQ9InZhcmlhYmxlLXt7dmFyaWFibGUucGt9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgICAgIDxoMz5IaXN0b3J5IG9mIHt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19PC9oMz4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUudmFyaWFibGVfdmFsdWUgJX0KKyAgICAgICAgICAgICAgeyUgaWYgdmFyaWFibGUudmFyaWFibGVfdmFsdWV8bGVuZ3RoIDwgNTcwICV9CisgICAgICAgICAgICAgICAgPGg0Pnt7dmFyaWFibGUudmFyaWFibGVfbmFtZX19IHZhbHVlIGlzOjwvaDQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIHt7dmFyaWFibGUudmFyaWFibGVfdmFsdWV9fQorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgIDxoND57e3ZhcmlhYmxlLnZhcmlhYmxlX25hbWV9fSB2YWx1ZSBpczo8L2g0PgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfHN0cmluZ19zbGljZTonOjU3MCd9fQorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bGwiPiB7e3ZhcmlhYmxlLnZhcmlhYmxlX3ZhbHVlfHN0cmluZ19zbGljZTonNTcwOid9fQorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tbWluaSBmdWxsLXNob3ciPi4uLjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1taW5pIGZ1bGwtaGlkZSI+Q29sbGFwc2UgdmFyaWFibGUgdmFsdWUgPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiPjwvaT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+VGhlIHZhbHVlIG9mIDxzdHJvbmc+e3t2YXJpYWJsZS52YXJpYWJsZV9uYW1lfX08L3N0cm9uZz4gaXMgYW4gZW1wdHkgc3RyaW5nPC9kaXY+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGg0PlRoZSB2YWx1ZSB3YXMgc2V0IGluIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBmaWxlczo8L2g0PgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+T3JkZXI8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNvbmZpZ3VyYXRpb24gZmlsZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+T3BlcmF0aW9uPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5MaW5lIG51bWJlcjwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgIHslIGZvciB2aCBpbiB2YXJpYWJsZS52aGlzdG9yeS5hbGwgJX0KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7Zm9ybG9vcC5jb3VudGVyfX08L3RkPjx0ZD57e3ZoLmZpbGVfbmFtZX19PC90ZD48dGQ+e3t2aC5vcGVyYXRpb259fTwvdGQ+PHRkPnt7dmgubGluZV9udW1iZXJ9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslZW5kZm9yJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KK3slIGVuZGZvciAlfQorCis8L2Rpdj4gPCEtLSBidWlsZGluZm9tYWluIC0tPgorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jcHV1c2FnZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9jcHV1c2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjA3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2NwdXVzYWdlLmh0bWwKQEAgLTAsMCArMSw0IEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRwYWdlLmh0bWwiICV9Cit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5DcHUgVXNhZ2U8L2xpPgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3BhZ2luYXRpb25fYm90dG9tLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9wYWdpbmF0aW9uX2JvdHRvbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MGMyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9wYWdpbmF0aW9uX2JvdHRvbS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKK3slIGNvbW1lbnQgJX0KKyAgICBTaG93IHBhZ2luYXRpb24gY29udHJvbHMgYXMgcGVyIHNlYXJjaC9wYWdpbmF0aW9uIHRhYmxlIGRldGFpbCBzcGVjLgorICAgIElucHV0OiBvYmplY3RzLCBzZXR1cCBmb3IgcGFnaW5hdGlvbiB1c2luZyB0aGUgc3RhbmRhcmQgbWV0aG9kIGluIHZpZXdzLgorICAgICAgICAgICBvYmplY3RfY291bnQsIGNvdW50IGZvciBjb21wbGV0ZSBsaXN0IG9mIG9iamVjdHMsIChhbGwgcGFnZXMsIG5vIHBhdHRlcm4pCit7JSBlbmRjb21tZW50ICV9CisKK3sjIG9ubHkgcGFnaW5hdGUgaWYgMTAgb3IgbW9yZSByb3dzIHVuZmlsdGVyZWQsIGFsbCBwYWdlcyAjfQoreyUgaWYgb2JqZWN0X2NvdW50ID49IDEwICV9Cis8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIj4KKyAgPHVsPgoreyVpZiBvYmplY3RzLmhhc19wcmV2aW91cyAlfQorICAgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e29iamVjdHMucHJldmlvdXNfcGFnZV9udW1iZXJ9fX0pIj4mbGFxdW87PC9hPjwvbGk+Cit7JWVsc2UlfQorICAgIDxsaSBjbGFzcz0iZGlzYWJsZWQiPjxhIGhyZWY9IiMiPiZsYXF1bzs8L2E+PC9saT4KK3slZW5kaWYlfQoreyUgZm9yIGkgaW4gb2JqZWN0cy5wYWdlX3JhbmdlICV9CisgICAgPGxpeyVpZiBpID09IG9iamVjdHMubnVtYmVyICV9IGNsYXNzPSJhY3RpdmUiIHslZW5kaWYlfT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e2l9fX0pIj57e2l9fTwvYT48L2xpPgoreyUgZW5kZm9yICV9Cit7JWlmIG9iamVjdHMuaGFzX25leHQlfQorICAgIDxsaT48YSBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydwYWdlJzp7e29iamVjdHMubmV4dF9wYWdlX251bWJlcn19fSkiPiZyYXF1bzs8L2E+PC9saT4KK3slZWxzZSV9CisgICAgPGxpIGNsYXNzPSJkaXNhYmxlZCI+PGEgaHJlZj0iIyI+JnJhcXVvOzwvYT48L2xpPgoreyVlbmRpZiV9CisgIDwvdWw+CisKKyAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy1ib3R0b206MTBweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgPHNlbGVjdCBjbGFzcz0icGFnZXNpemUiPgorICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICB7JSBlbmR3aXRoICV9CisgICAgPC9zZWxlY3Q+CisgIDwvZGl2PgorPC9kaXY+CisKKzwhLS0gVXBkYXRlIHBhZ2UgZGlzcGxheSBzZXR0aW5ncyAtLT4KKzxzY3JpcHQ+CisgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgLy8gbG9hZCBkYXRhIGZvciBudW1iZXIgb2YgZW50cmllcyB0byBiZSBkaXNwbGF5ZWQgb24gcGFnZQorICAgIGlmICh7e3JlcXVlc3QuR0VULmNvdW50fX0gIT0gIiIpIHsKKyAgICAgIHBhZ2VzaXplID0ge3tyZXF1ZXN0LkdFVC5jb3VudH19OworICAgIH0KKyAgICAkKCcucGFnZXNpemUgb3B0aW9uJykucHJvcCgnc2VsZWN0ZWQnLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCdbdmFsdWU9IicgKyBwYWdlc2l6ZSArICciXScpCisgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NlbGVjdGVkJywgdHJ1ZSk7CisKKyAgICAkKCIucGFnZXNpemUiKS5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICAgICAgICByZWxvYWRfcGFyYW1zKHsiY291bnQiOiQodGhpcykudmFsKCl9KTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cit7JSBlbmRpZiAlfQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RldGFpbF9zZWFyY2hfaGVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlYTNmNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NlYXJjaF9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDY4IEBACit7JSBjb21tZW50ICV9CisgIFNob3cgYSBkZXRhaWwgdGFibGUgU2VhcmNoIGZpZWxkIGFuZCBSb3dzIHBlciBwYWdlLgorICBJbnB1dDoKKyAgICBvYmplY3RzLCBvdXIgYm9pbGVycGxhdGVkIHBhZ2luYXRlZCB3aXRoIHNlYXJjaCBmaWVsZHMgc2V0LgorICAgIG9iamVjdF9jb3VudCwgY291bnQgb2YgZnVsbCwgdW5maWx0ZXJlZCwgb2JqZWN0cyBsaXN0CisgICAgc2VhcmNoX3doYXQsIGZpbGxzIGluICJTZWFyY2ggX19fIgorICBPbmx5IHNob3cgdGhlIHNlYXJjaCBmb3JtIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEwIHJlc3VsdHMsCisgIG9yIGlmIHJldHVybiBmcm9tIGEgcHJldmlvdXMgc2VhcmNoLgoreyUgZW5kY29tbWVudCAlfQorCisKKzxzY3JpcHQ+CiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgLyogQ2xlYXIgdGhlIGN1cnJlbnQgc2VhcmNoIHNlbGVjdGlvbiBhbmQgcmVsb2FkIHRoZSByZXN1bHRzICovCisgICQoIi5zZWFyY2gtY2xlYXIiKS5jbGljayhmdW5jdGlvbigpeworICAgICQoIiNzZWFyY2giKS52YWwoIiIpOworICAgICQodGhpcykucGFyZW50cygiZm9ybSIpLnN1Ym1pdCgpOworICB9KTsKK30pOworPC9zY3JpcHQ+Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgoreyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAxMCBvciByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGgzPk5vIHt7c2VhcmNoX3doYXR9fSBmb3VuZDwvaDM+CisgICAgPGZvcm0gaWQ9InNlYXJjaGZvcm0iIGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICB7JSBlbHNlICV9CisgICAgPGZvcm0gaWQ9InNlYXJjaGZvcm0iIGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiPgorICB7JSBlbmRpZiAlfQorCisgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3NlYXJjaF93aGF0fX0iIG5hbWU9InNlYXJjaCIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSI+CisgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ibmFtZTorIiBuYW1lPSJvcmRlcmJ5Ij4KKyAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJsIiBuYW1lPSJwYWdlIj4KKyAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgICA8YSBjbGFzcz0iYWRkLW9uIGJ0biBzZWFyY2gtY2xlYXIiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KKyAgICAgIDwvYT4KKyAgeyUgZW5kaWYgJX0KKyAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIj5TZWFyY2g8L2J1dHRvbj4KKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWxpbmsgc2VhcmNoLWNsZWFyIj4KKyAgICAgICAgU2hvdyBhbGwge3tzZWFyY2hfd2hhdH19CisgICAgICA8L2J1dHRvbj4KKyAgeyUgZW5kaWYgJX0KKyAgICA8L2Zvcm0+Cit7JSBlbmRpZiAlfQorCit7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDwvZGl2PiB7IyBlbmQgYWxlcnQgI30KK3slIGVsc2UgJX0KKyAgeyUgaWYgb2JqZWN0X2NvdW50ID4gMTAgJX0KKyAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZSI+CisgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgIHslIGlmIHJlcXVlc3Quc2Vzc2lvbi5saW1pdCA9PSBpICV9CisgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSIgc2VsZWN0ZWQ+e3tpfX08L29wdGlvbj4KKyAgICAgICAgeyUgZWxzZSAlfQorICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICB7JSBlbmRmb3IgJX0KKyAgICB7JSBlbmR3aXRoICV9CisgICAgPC9zZWxlY3Q+CisgIDwvZGl2PgorICB7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PiB7IyByb3ctZmx1aWQgI30KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGV0YWlsX3NvcnRlZF9oZWFkZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2UyOTJlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kZXRhaWxfc29ydGVkX2hlYWRlci5odG1sCkBAIC0wLDAgKzEsMjUgQEAKK3slIGNvbW1lbnQgJX0KKyAgICBBZGRzIHNvcnRlZCBjb2x1bW5zIHRvIGEgZGV0YWlsIHRhYmxlLgorICAgIE11c3QgYmUgcHJlY2VkZWQgYnkgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+CisgICAgTXVzdCBiZSBmb2xsb3dlZCBieSA8dGJvZHk+Li4uPC90Ym9keT48L3RhYmxlPi4KKyAgICBSZXF1aXJlcyB0YWJsZWNvbHMgc2V0dXAgY29sdW1uIGZpZWxkcyBkY2xhc3MsIGNsY2xhc3MsIHFoZWxwLCBvcmRlcmZpZWxkLgoreyUgZW5kY29tbWVudCAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQoreyMgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciB0YWJsZXNvcnRlciIgaWQ9Im90YWJsZSI+ICN9CisgICAgPHRoZWFkPgorICAgICAgICA8IS0tIFRhYmxlIGhlYWRlciByb3c7IGdlbmVyYXRlZCBmcm9tICJ0YWJsZWNvbHMiIGVudHJ5IGluIHRoZSBjb250ZXh0IGRpY3QgLS0+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIHslIGZvciB0YyBpbiB0YWJsZWNvbHMgJX08dGggY2xhc3M9InslaWYgdGMuZGNsYXNzJX17e3RjLmRjbGFzc319eyUgZW5kaWYgJX0geyVpZiB0Yy5jbGFzcyAlfXt7dGMuY2xjbGFzc319eyUgZW5kaWYgJX0iPgorICAgICAgICAgICAgICAgIHslaWYgdGMucWhlbHAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJ7e3RjLnFoZWxwfX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyZmllbGQlfTxhIHslaWYgdGMub3JkZXJpY29uJX0gY2xhc3M9InNvcnRlZCIgeyVlbmRpZiV9aHJlZj0iamF2YXNjcmlwdDpyZWxvYWRfcGFyYW1zKHsncGFnZSc6IDEsICdvcmRlcmJ5JyA6ICd7e3RjLm9yZGVyZmllbGR9fScgfSkiPnt7dGMubmFtZX19PC9hPnslZWxzZSV9PHNwYW4gY2xhc3M9Im11dGVkIj57e3RjLm5hbWV9fTwvc3Bhbj57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIGZvcmxvb3AuZmlyc3QgJX0KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWluZm8iPnt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgIHslaWYgdGMuZmlsdGVyJX08ZGl2IGNsYXNzPSJidG4tZ3JvdXAgcHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNmaWx0ZXJfe3t0Yy5maWx0ZXIuY2xhc3N9fSIgcm9sZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1taW5pIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e3RjLmZpbHRlci5vcHRpb25zfGZpbHRlcmVkX2ljb246cmVxdWVzdC5HRVQuZmlsdGVyfX0geyVlbmRpZiV9IiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgdGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXIgJX0gdGl0bGU9IjxwPnt7dGMuZmlsdGVyLm9wdGlvbnN8ZmlsdGVyZWRfdG9vbHRpcDpyZXF1ZXN0LkdFVC5maWx0ZXJ9fTwvcD48cD48YSBjbGFzcz0nYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeScgaHJlZj1qYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydmaWx0ZXInOicnfSk+U2hvdyBhbGwgeyUgaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5ICV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl9fXslIGVsc2UgJX17e29iamVjdG5hbWV9fXslIGVuZGlmICV9PC9hPjwvcD4iIHslZW5kaWYlfSBkYXRhLXRvZ2dsZT0ibW9kYWwiPiA8aSBjbGFzcz0iaWNvbi1maWx0ZXIgZmlsdGVyZWQiPjwvaT4gPC9hPgorICAgICAgICAgICAgICAgIDwvZGl2PnslZW5kaWYlfQorICAgICAgICAgICAgPC90aD57JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RpcmluZm8uaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZGlyaW5mby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmM0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2RpcmluZm8uaHRtbApAQCAtMCwwICsxLDIzNiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgZXh0cmFoZWFkY29udGVudCAlfQoreyUgbG9hZCBzdGF0aWMgJX0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ieyUgc3RhdGljICdjc3MvanF1ZXJ5LnRyZWV0YWJsZS5jc3MnICV9IiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InslIHN0YXRpYyAnY3NzL2pxdWVyeS50cmVldGFibGUudGhlbWUudG9hc3Rlci5jc3MnICV9IiB0eXBlPSJ0ZXh0L2NzcyI+Cit7JSBlbmRibG9jayBleHRyYWhlYWRjb250ZW50ICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPnt7dGFyZ2V0LnRhcmdldH19PC9saT4KK3slIGVuZGJsb2NrIGxvY2FsYnJlYWRjcnVtYiV9CisKK3slIGJsb2NrIGJ1aWxkaW5mb21haW4gJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2pxdWVyeS50cmVldGFibGUuanMnICV9Ij4KKzwvc2NyaXB0PgoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CisgICAgZnVuY3Rpb24gc2V0dXBUcmVldGFibGUoKSB7CisgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSh7CisgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLAorICAgICAgICAgICAgYnJhbmNoQXR0cjogInR0QnJhbmNoIiwKKyAgICAgICAgICAgIGNsaWNrYWJsZU5vZGVOYW1lczogdHJ1ZSwKKyAgICAgICAgICAgIG9uTm9kZUNvbGxhcHNlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nLCBrZWVwIGNhY2hlZCAqLworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9uTm9kZUV4cGFuZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pZDsKKyAgICAgICAgICAgICAgICB2YXIgbiA9ICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSgibm9kZSIsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGFscmVhZHkgd2FzIGV4cGFuZGVkIG9uY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgJCgiI2RpcnRhYmxlIikudHJlZXRhYmxlKCJyZXZlYWwiLCBzdGFydCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gInslIHVybCAiZGlyaW5mb19hamF4IiBidWlsZC5pZCB0YXJnZXQuaWQgICV9IjsKKyAgICAgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgICAgOiAiR0VUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybCAgICAgOiB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgIDogInN0YXJ0PSIgKyBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvd3MobiwgcmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgICA6IGZ1bmN0aW9uKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biApIHthbGVydCh0ZXh0U3RhdHVzICsgIjoiICsgZXJyb3JUaHJvd24pfSwKKyAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9LAorICAgICAgIH0pOworICAgIH0KKyAgICBmdW5jdGlvbiB0ZChkYXRhKSB7CisgICAgICAgIGlmIChkYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEgPSAnJzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJzx0ZD4nICsgZGF0YSArICc8L3RkPicKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb3JtYXRSb3cobykgeworICAgICAgICAvKiBzZXR1cCB0ci13aWRlIGZvcm1hdHRpbmcgKi8KKyAgICAgICAgdmFyIHRyID0gJzx0ciBjbGFzcz0iJzsKKyAgICAgICAgaWYgKG8ubGlua190byAhPSBudWxsKSB7CisgICAgICAgICAgICB0ciArPSAnbXV0ZWQgJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoby5pc2RpciAmJiBvLmNoaWxkY291bnQpIHsKKyAgICAgICAgICAgIHRyICs9ICdicmFuY2giIGRhdGEtdHQtYnJhbmNoPSJ0cnVlIiAnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHIgKz0gJ2xlYWYiIGRhdGEtdHQtYnJhbmNoPSJmYWxzZSIgJzsKKyAgICAgICAgfQorICAgICAgICB0ciArPSAgICAnIGRhdGEtdHQtaWQ9IicgKyBvLmZ1bGxwYXRoICsnIiAnOworICAgICAgICBpZiAoby5wYXJlbnQgIT0gIi8iKSB7CisgICAgICAgICAgICB0ciArPSAgICAnIGRhdGEtdHQtcGFyZW50LWlkPSInICsgby5wYXJlbnQgKyciICc7CisgICAgICAgIH0KKyAgICAgICAgdHIgKz0gJz4nOworCisgICAgICAgIC8qIHNldHVwIHRkIHNwZWNpZmljIGZvcm1hdHRpbmcgKi8KKyAgICAgICAgdmFyIGxpbmtfdG8gPSB0ZChvLmxpbmtfdG8pOworICAgICAgICB2YXIgc2l6ZSA9ICc8dGQgY2xhc3MgPSAic2l6ZWNvbCI+JyArIG8uc2l6ZSArICc8L3RkPicKKyAgICAgICAgdmFyIHBlcm1pc3Npb24gPSB0ZChvLnBlcm1pc3Npb24pOworICAgICAgICB2YXIgb3duZXIgPSB0ZChvLm93bmVyKTsKKyAgICAgICAgdmFyIGdyb3VwID0gdGQoby5ncm91cCk7CisKKyAgICAgICAgLyogaGFuZGxlIHRoZSBuYW1lIGNvbHVtbiAqLworICAgICAgICB2YXIgbmFtZSA9IG51bGw7OworICAgICAgICB2YXIgbmFtZXNwYW49MTsKKyAgICAgICAgaWYgKG8uaXNkaXIpIHsKKyAgICAgICAgICAgIGlmIChvLmxpbmtfdG8gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG5hbWVzcGFuID0gMjsKKyAgICAgICAgICAgICAgICBpZiAoby5wYWNrYWdlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZXNwYW4gPSAzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjb2xzcGFuID0gJ2NvbHNwYW49IicgKyBuYW1lc3BhbiArICciJzsKKyAgICAgICAgICAgIG5hbWUgPSAnPHRkIGNsYXNzPSJjb250ZW50LWRpcmVjdG9yeSInICsgY29sc3BhbiArICc+JzsKKyAgICAgICAgICAgIGlmIChvLmNoaWxkY291bnQpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8YSBocmVmPSIiPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuYW1lICs9ICc8aSBjbGFzcz0iaWNvbi1mb2xkZXItY2xvc2UiPjwvaT4nOworICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7JyArIG8ubmFtZTsKKyAgICAgICAgICAgIGlmIChvLmNoaWxkY291bnQpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8L2E+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWUgKz0gJzwvdGQ+JzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUgPSAnPHRkPic7CisgICAgICAgICAgICBpZiAoby5saW5rX3RvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICc8aSBjbGFzcz0iaWNvbi1maWxlIj48L2k+JzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5hbWUgKz0gJzxpIGNsYXNzPSJpY29uLWhhbmQtcmlnaHQiPjwvaT4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7JyArIG8ubmFtZTsKKyAgICAgICAgICAgIG5hbWUgKz0gJzwvdGQ+JzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGhhbmRsZSB0aGUgcGFja2FnZSBjb2x1bW4gKi8KKyAgICAgICAgdmFyIHBhY2thZ2UgPSBudWxsOworICAgICAgICBpZiAoby5wYWNrYWdlICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8qIGFkZCBsaW5rIHRvIGluY2x1ZGVkIHBhY2thZ2UgcGFnZSAqLworICAgICAgICAgICAgYnVpbGRfaWQgPSB7eyBidWlsZC5pZCB9fTsKKyAgICAgICAgICAgIHRhcmdldF9pZCA9IHt7IHRhcmdldC5pZCB9fTsKKyAgICAgICAgICAgIC8qIENyZWF0ZSBhIHVybCBmb3IgYSBkdW1teSBwYWNrYWdlIGlkIG9mIDAgKi8KKyAgICAgICAgICAgIGR1bW15ID0gInslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCAwICV9IgorICAgICAgICAgICAgLyogZmlsbCBpbiB0aGUgcGFja2FnZSBpZCAqLworICAgICAgICAgICAgdXJsID0gZHVtbXkuc3Vic3RyKDAsIGR1bW15Lmxlbmd0aC0xKSArIG8ucGFja2FnZV9pZDsKKyAgICAgICAgICAgIHBhY2thZ2UgPSAnPGEgaHJlZj0nICsgdXJsICsgJz4nIDsKKyAgICAgICAgICAgIHBhY2thZ2UgKz0gby5wYWNrYWdlOworICAgICAgICAgICAgcGFja2FnZSArPSAnPC9hPic7CisgICAgICAgICAgICBpZiAoby5pbnN0YWxsZWRfcGFja2FnZSAhPSBvLnBhY2thZ2UpIHsKKyAgICAgICAgICAgICAgICAvKiBtYWtlIGNsYXNzIG11dGVkIGFuZCBhZGQgaG92ZXIgaGVscCAqLworICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJzxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzICcgKyBvLmluc3RhbGxlZF9wYWNrYWdlICsgJyA8L3NwYW4+JzsKKyAgICAgICAgICAgICAgICBwYWNrYWdlICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiICc7CisgICAgICAgICAgICAgICAgcGFja2FnZSArPSAndGl0bGU9IicgKyBvLnBhY2thZ2UgKyAnIHdhcyByZW5hbWVkIGF0IHBhY2thZ2luZyB0aW1lIGFuZCB3YXMgaW5zdGFsbGVkIGluIHlvdXIgaW1hZ2UgYXMgJyArIG8uaW5zdGFsbGVkX3BhY2thZ2UgKyAnIj4nOworICAgICAgICAgICAgICAgIHBhY2thZ2UgKz0gJzwvaT4nOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhY2thZ2UgPSB0ZChwYWNrYWdlKTsKKworICAgICAgICB2YXIgY29sczF0bzM7CisgICAgICAgIHN3aXRjaCAobmFtZXNwYW4pIHsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBjb2xzMXRvMyA9IG5hbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICAyOgorICAgICAgICAgICAgICAgIGNvbHMxdG8zID0gbmFtZSArIHBhY2thZ2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGNvbHMxdG8zID0gbmFtZSArIGxpbmtfdG8gKyBwYWNrYWdlOworICAgICAgICB9CisgICAgICAgIHIgPSB0ciArIGNvbHMxdG8zICsgc2l6ZSArIHBlcm1pc3Npb24gKyBvd25lciArIGdyb3VwICsgIjwvdHI+IgorICAgICAgICByZXR1cm4gcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRSb3dzKG4sIG9ianMpIHsKKyAgICAgICAgcm93cyA9ICIiOworICAgICAgICBmb3IgKGk9MDsgaTxvYmpzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICByb3dzICs9IGZvcm1hdFJvdyhvYmpzW2ldKTsKKyAgICAgICAgfQorICAgICAgICAkKCIjZGlydGFibGUiKS50cmVldGFibGUoImxvYWRCcmFuY2giLCBuLCByb3dzKTsKKyAgICB9CisKKyAgICAkLmZuLmlzT2ZmU2NyZWVuID0gZnVuY3Rpb24oKXsKKyAgICAgICAgdmFyIHdpbiA9ICQod2luZG93KTsKKyAgICAgICAgdmlld3BvcnRCb3R0b20gPSB3aW4uc2Nyb2xsVG9wKCkgKyB3aW4uaGVpZ2h0KCk7CisgICAgICAgIAorICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5vZmZzZXQoKTsKKyAgICAgICAgYm91bmRzLmJvdHRvbSA9IGJvdW5kcy50b3AgKyB0aGlzLm91dGVySGVpZ2h0KCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gKGJvdW5kcy5ib3R0b20gPiB2aWV3cG9ydEJvdHRvbSk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHNlbGVjdFJvdyhwYXRoKSB7CisgICAgICAgIHZhciByb3cgID0gJCgndHJbZGF0YS10dC1pZD0iJyArIHBhdGggKyAnIl0nKTsKKyAgICAgICAgcm93LmFkZENsYXNzKCIgaGlnaGxpZ2h0Iik7CisgICAgICAgIGlmIChyb3cuaXNPZmZTY3JlZW4oKSkgeworICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IHJvdy5vZmZzZXQoKS50b3AgLSAxNTB9LCAyMDAwKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgorCis8ZGl2IGNsYXNzPSJzcGFuMTAiPgorCisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+IHt7dGFyZ2V0LnRhcmdldH19IDwvaDE+CisgICAgPC9kaXY+CisKKyAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3RhcmdldCcgYnVpbGQuaWQgdGFyZ2V0LmlkICV9Ij4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJPZiBhbGwgdGhlIHBhY2thZ2VzIGJ1aWx0LCB0aGUgc3Vic2V0IGluc3RhbGxlZCBpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGlzIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgUGFja2FnZXMgaW5jbHVkZWQgKHt7dGFyZ2V0LnBhY2thZ2VfY291bnR9fSAtIHt7cGFja2FnZXNfc3VtfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnZGlyaW5mbycgYnVpbGQuaWQgdGFyZ2V0LmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGlzIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgRGlyZWN0b3J5IHN0cnVjdHVyZQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CisKKyAgICA8ZGl2IGlkPSJkaXJlY3Rvcnktc3RydWN0dXJlIiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICAgICAgPHRhYmxlIGlkPSJkaXJ0YWJsZSIgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRyZWV0YWJsZSI+CisgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGg+RGlyZWN0b3J5IC8gRmlsZTwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD5TeW1ib2xpYyBsaW5rIHRvPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlNvdXJjZSBwYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+UGVybWlzc2lvbnM8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+T3duZXI8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+R3JvdXA8L3RoPgorICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgorICAgICAgICAgICAgICAgIHNldHVwVHJlZXRhYmxlKCk7CisgICAgICAgICAgICAgICAgYWRkUm93cyhudWxsLCB7eyBvYmplY3RzfHNhZmUgfX0gKTsKKyAgICAgICAgICAgICAgICB7JSBpZiBmaWxlX3BhdGggJX0KKyAgICAgICAgICAgICAgICAgICAgeyUgY29tbWVudCAlfQorICAgICAgICAgICAgICAgICAgICAgICAgbGluayBmcm9tIHBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIHNwZWNpZmllcyBmaWxlIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgZGlyX2VsZW0gaW4gZGlyX2xpc3QgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNkaXJ0YWJsZSIpLnRyZWV0YWJsZSgiZXhwYW5kTm9kZSIsICJ7e2Rpcl9lbGVtfX0iKTsKKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvdygie3tmaWxlX3BhdGh9fSIpOworICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgIDwvdGFibGU+CisgICAgPC9kaXY+IDwhLS0gZGlyZWN0b3J5LXN0cnVjdHVyZSAtLT4KKzwvZGl2PiA8IS0tIHNwYW4xMCAtLT4KKworeyUgZW5kYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2Rpc2tpby5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXNraW8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWNlZjZmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9kaXNraW8uaHRtbApAQCAtMCwwICsxLDQgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPkRpc2sgSS9PPC9saT4KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvZmlsdGVyc25pcHBldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDFhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ZpbHRlcnNuaXBwZXQuaHRtbApAQCAtMCwwICsxLDU3IEBACit7JSBsb2FkIHByb2plY3R0YWdzICV9Cis8IS0tICd7e2YuY2xhc3N9fScgZmlsdGVyIC0tPgoreyUgd2l0aCBmLmNsYXNzIGFzICBrZXkgJX0KKzxmb3JtIGlkPSJmaWx0ZXJfe3tmLmNsYXNzfX0iIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNlYXJjaCIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslZW5kaWYlfSIvPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICAgICAgICAgIHslIGlmIHNlYXJjaF90ZXJtICV9CisgICAgICAgICAgICAgICAgIDxoMz5GaWx0ZXIge3t0b3RhbF9jb3VudH19IHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBtYXRjaGluZyAne3tzZWFyY2hfdGVybX19JyBieSAne3t0Yy5uYW1lfX0nPC9oMz4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8aDM+RmlsdGVyIHslaWYgZmlsdGVyX3NlYXJjaF9kaXNwbGF5JX17e2ZpbHRlcl9zZWFyY2hfZGlzcGxheXx0aXRsZX19eyVlbHNlJX17e29iamVjdG5hbWV8dGl0bGV9fXslZW5kaWYlfSBieSAne3t0Yy5uYW1lfX0nPC9oMz4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgICAgICAgIDxwPnt7Zi5sYWJlbH19PC9wPgorICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJmaWx0ZXIiIHslaWYgcmVxdWVzdC5HRVQuZmlsdGVyJX17e2Yub3B0aW9uc3xjaGVja19maWx0ZXJfc3RhdHVzOnJlcXVlc3QuR0VULmZpbHRlcn19IHslZWxzZSV9IGNoZWNrZWQgeyVlbmRpZiV9IHZhbHVlPSIiIGRhdGEta2V5PSJ7e2tleX19Ij4gIEFsbCB7JWlmIGZpbHRlcl9zZWFyY2hfZGlzcGxheSV9e3tmaWx0ZXJfc2VhcmNoX2Rpc3BsYXl8dGl0bGV9fXslZWxzZSV9e3tvYmplY3RuYW1lfHRpdGxlfX17JWVuZGlmJX0KKyAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICB7JSBmb3Igb3B0aW9uIGluIGYub3B0aW9ucyAlfQorICAgICAgICAgICAgICAgIHslIGlmIG9wdGlvbi4xID09ICdkYXRlcmFuZ2UnICV9CisgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWlubGluZSI+CisgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiBpZD0iZmlsdGVyX3ZhbHVlX3t7a2V5fX0iIHslaWYga2V5ID09IGRhdGVyYW5nZV9zZWxlY3RlZCAlfWNoZWNrZWR7JWVuZGlmJX0gdmFsdWU9Int7b3B0aW9uLjF9fSIgZGF0YS1rZXk9Int7a2V5fX0iPiB7e29wdGlvbi4wfX0KKyAgICAgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgICB7JSBpZiAxICV9CisgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZmlsdGVyIiB7JWlmIHJlcXVlc3QuR0VULmZpbHRlciA9PSBvcHRpb24uMSAlfWNoZWNrZWR7JWVuZGlmJX0gIHZhbHVlPSJ7e29wdGlvbi4xfX0iIGRhdGEta2V5PSJ7e2tleX19Ij4ge3tvcHRpb24uMH19CisgICAgICAgICAgICAgICAgICB7JSBjb21tZW50ICJkbyBub3QgZGlzYWJsZSByYWRpbyBzZWxlY3Rpb25zIGJ5IGNvdW50IGZvciBub3ciICV9eyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icmFkaW8gbXV0ZWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImZpbHRlciIgZGlzYWJsZWQgeyVpZiByZXF1ZXN0LkdFVC5maWx0ZXIgPT0gb3B0aW9uLjEgJX1jaGVja2VkeyVlbmRpZiV9ICB2YWx1ZT0ie3tvcHRpb24uMX19IiBkYXRhLWtleT0ie3trZXl9fSI+IHt7b3B0aW9uLjB9fQorICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfXslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICB7JSBpZiBvcHRpb24uMyAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIGRhdGEtcGxhY2VtZW50PSJyaWdodCIgdGl0bGU9Int7b3B0aW9uLjN9fSI+PC9pPnslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgIHslIGlmIG9wdGlvbi4xID09ICdkYXRlcmFuZ2UnICV9CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImRhdGVfZnJvbV97e2tleX19IiBuYW1lPSJkYXRlX2Zyb21fe3trZXl9fSIgZGlzYWJsZWQgY2xhc3M9ImlucHV0LXNtYWxsIiAvPjxsYWJlbCBjbGFzcz0iaGVscC1pbmxpbmUiPnRvPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZV90b197e2tleX19IiBuYW1lPSJkYXRlX3RvX3t7a2V5fX0iIGRpc2FibGVkIGNsYXNzPSJpbnB1dC1zbWFsbCIgIC8+CisgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImhlbHAtaW5saW5lIGdldC1oZWxwIiA+KGRkL21tL3l5eXkpPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPCEtLSBkYXRlcmFuZ2UgcGVyc2lzdGVuY2UgLS0+CisgICAgICAgIHslIGlmIGxhc3RfZGF0ZV9mcm9tIGFuZCBsYXN0X2RhdGVfdG8gJX0KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Imxhc3RfZGF0ZV9mcm9tX3t7a2V5fX0iIG5hbWU9Imxhc3RfZGF0ZV9mcm9tIiB2YWx1ZT0ie3tsYXN0X2RhdGVfZnJvbX19Ii8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJsYXN0X2RhdGVfdG9fe3trZXl9fSIgbmFtZT0ibGFzdF9kYXRlX3RvIiAgIHZhbHVlPSJ7e2xhc3RfZGF0ZV90b319Ii8+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEta2V5PSJ7e2tleX19Ij5BcHBseTwvYnV0dG9uPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyICV9CisgICAgICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuZmlsdGVyfHN0cmluZ19yZW1vdmVfcmVnZXg6JzouKicgIT0gZi5vcHRpb25zLjAuMXxzdHJpbmdfcmVtb3ZlX3JlZ2V4Oic6LionICV9CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIHB1bGwtbGVmdCI+WW91IGNhbiBvbmx5IGFwcGx5IG9uZSBmaWx0ZXIgdG8gdGhlIHRhYmxlLiBUaGlzIGZpbHRlciB3aWxsIG92ZXJyaWRlIHRoZSBjdXJyZW50IGZpbHRlci48L3NwYW4+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorPC9mb3JtPgoreyUgZW5kd2l0aCAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9nZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2dlbmVyaWMtdG9hc3RlcnRhYmxlLXBhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2FhOGNlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9nZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwKQEAgLTAsMCArMSwxNyBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RwYWdlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQorCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPGgyPnt7dGl0bGV9fSAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXt7dGFibGVfbmFtZX19Ij48L3NwYW4+KQorICB7JSBpZiBwcm9qZWN0LnJlbGVhc2UgJX0KKyAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJUaGlzIHBhZ2UgbGlzdHMge3t0aXRsZX19IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVsZWFzZSBzZWxlY3RlZCBmb3IgdGhpcyBwcm9qZWN0LCB3aGljaCBpcyB7e3Byb2plY3QucmVsZWFzZS5kZXNjcmlwdGlvbn19Ij48L2k+CisgIHslIGVuZGlmICV9Cis8L2gyPgorCit7JSB1cmwgdGFibGVfbmFtZSBwcm9qZWN0LmlkIGFzIHhocl90YWJsZV91cmwgJX0KK3slIGluY2x1ZGUgInRvYXN0ZXJ0YWJsZS5odG1sIiAlfQorCit7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9pbXBvcnRsYXllci5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9pbXBvcnRsYXllci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2Q3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2ltcG9ydGxheWVyLmh0bWwKQEAgLTAsMCArMSwxMzggQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCit7JSBpbmNsdWRlICJwcm9qZWN0dG9wYmFyLmh0bWwiICV9CisKKworICAgICAgICB7JSBpZiBwcm9qZWN0IGFuZCBwcm9qZWN0LnJlbGVhc2UgJX0KKyAgICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL2xheWVyRGVwc01vZGFsLmpzJyAlfSI+PC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9pbXBvcnRsYXllci5qcycgJX0iPjwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7CisgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhockltcG9ydExheWVyVXJsIDogInslIHVybCAneGhyX2ltcG9ydGxheWVyJyAlfSIsCisgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRMYXllclBhZ2VJbml0KGN0eCk7CisgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUoIlNvcnJ5LCBBbiBlcnJvciBoYXMgb2NjdXJyZWQgbG9hZGluZyB0aGlzIHBhZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0ic3BhbjExIj4KKyAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+CisgICAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD5MYXllciByZXBvc2l0b3J5IGluZm9ybWF0aW9uPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2siPlRoZSBsYXllciB5b3UgYXJlIGltcG9ydGluZyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCA8c3Ryb25nPnt7cHJvamVjdC5yZWxlYXNlLmRlc2NyaXB0aW9ufX08L3N0cm9uZz4sIHdoaWNoIGlzIHRoZSByZWxlYXNlIHlvdSBhcmUgdXNpbmcgaW4gdGhpcyBwcm9qZWN0Ljwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1lcnJvciIgaWQ9ImltcG9ydC1lcnJvciIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9ImFsZXJ0Ij4mdGltZXM7PC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Jm5ic3A7PC9oMz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bD48L3VsPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCIgaWQ9ImxheWVyLW5hbWUtY3RybCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwgYWlyIiBmb3I9ImltcG9ydC1sYXllci1uYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXllciBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNvbWV0aGluZyBsaWtlICdtZXRhLW15bGF5ZXInLiBZb3VyIGxheWVyIG5hbWUgbXVzdCBiZSB1bmlxdWUgYW5kIGNhbiBvbmx5IGluY2x1ZGUgbGV0dGVycywgbnVtYmVycyBhbmQgZGFzaGVzIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImltcG9ydC1sYXllci1uYW1lIiB0eXBlPSJ0ZXh0IiByZXF1aXJlZCBhdXRvZm9jdXMgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyIgaWQ9ImludmFsaWQtbGF5ZXItbmFtZS1oaW50Ij5BIHZhbGlkIGxheWVyIG5hbWUgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzIGFuZCBkYXNoZXM8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBpZD0iZHVwbGljYXRlZC1sYXllci1uYW1lLWhpbnQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iZHVwbGljYXRlLWxheWVyLWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgd2FybmluZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5BIGxheWVyIGNhbGxlZCA8YSBocmVmPSIiIGNsYXNzPSJkdXAtbGF5ZXItbGluayI+PHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+PC9hPiBhbHJlYWR5IGV4aXN0czwvaDM+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkxheWVyIG5hbWVzIG11c3QgYmUgdW5xaXVlLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IGxheWVyIG5hbWUuPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPHNwYW4gY2xhc3M9ImR1cC1sYXllci1uYW1lIj48L3NwYW4+IHJlcG9zaXRvcnkgdXJsIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZHVwLWxheWVyLXZjcy11cmwiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPiByZXZpc2lvbiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImR1cC1sYXllci1yZXZpc2lvbiI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHA+PGEgaHJlZj0iIiBjbGFzcz0iZHVwLWxheWVyLWxpbmsiPlZpZXcgdGhlIDxzcGFuIGNsYXNzPSJkdXAtbGF5ZXItbmFtZSI+PC9zcGFuPiBsYXllciBpbmZvcm1hdGlvbjwvYT48L3A+CisKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibGF5ZXItZ2l0LXJlcG8tdXJsIiBjbGFzcz0icHJvamVjdC1mb3JtIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBVUkwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRmV0Y2gvY2xvbmUgVVJMIG9mIHRoZSByZXBvc2l0b3J5LiBDdXJyZW50bHksIFRvYXN0ZXIgb25seSBzdXBwb3J0cyBHaXQgcmVwb3NpdG9yaWVzLiIgPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibGF5ZXItZ2l0LXJlcG8tdXJsIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgcmVxdWlyZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSIgZm9yPSJsYXllci1zdWJkaXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9zaXRvcnkgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4ob3B0aW9uYWwpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTdWJkaXJlY3Rvcnkgd2l0aGluIHRoZSByZXBvc2l0b3J5IHdoZXJlIHRoZSBsYXllciBpcyBsb2NhdGVkLCBpZiBub3QgaW4gdGhlIHJvb3QgKHVzdWFsbHkgb25seSB1c2VkIGlmIHRoZSByZXBvc2l0b3J5IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgbGF5ZXIpIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiICBpZD0ibGF5ZXItc3ViZGlyIj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIiBpZD0ibGF5ZXItcmV2aXNpb24tY3RybCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIHByb2plY3QtZm9ybSIgZm9yPSJsYXllci1naXQtcmVmIj5SZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IllvdSBjYW4gcHJvdmlkZSBhIEdpdCBicmFuY2gsIGEgdGFnIG9yIGEgY29tbWl0IFNIQSBhcyB0aGUgcmV2aXNpb24iPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ic3BhbjMiIGlkPSJsYXllci1naXQtcmVmIiByZXF1aXJlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0iZGlhcGx5Om5vbmU7IiBpZD0iaW52YWxpZC1sYXllci1yZXZpc2lvbi1oaW50Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkcy1hcGFydC1mcm9tLWxheWVyLW5hbWUiPgorICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImFpciI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWVyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+KG9wdGlvbmFsKTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9Ik90aGVyIGxheWVycyB0aGlzIGxheWVyIGRlcGVuZHMgdXBvbiI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9sZWdlbmQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIGNvbmZpZ3VyYXRpb24tbGlzdCIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIGRhdGEtbWluTGVuZ3RoPSIxIiBkYXRhLWF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCIgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBpZD0ibGF5ZXItZGVwZW5kZW5jeSIgY2xhc3M9ImlucHV0LXhsYXJnZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIgaWQ9ImFkZC1sYXllci1kZXBlbmRlbmN5LWJ0biI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIj5Zb3UgY2FuIG9ubHkgYWRkIGxheWVycyBUb2FzdGVyIGtub3dzIGFib3V0PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhaXIiIGlkPSJmb3JtLWFjdGlvbnMiPgorICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgaWQ9ImltcG9ydC1hbmQtYWRkLWJ0biIgZGF0YS10YXJnZXQ9IiNkZXBlbmRlbmNpZXMtbWVzc2FnZSIgZGlzYWJsZWQ+SW1wb3J0IGFuZCBhZGQgdG8gcHJvamVjdDwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBpZD0iaW1wb3J0LWFuZC1hZGQtaGludCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5UbyBpbXBvcnQgYSBsYXllciB5b3UgbmVlZCB0byBlbnRlciBhIGxheWVyIG5hbWUsIGEgR2l0IHJlcG9zaXRvcnkgVVJMIGFuZCBhIHJldmlzaW9uIChicmFuY2gsIHRhZyBvciBjb21taXQpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9mb3JtPgorCisgICAgICAgICAgeyUgZWxzZSAlfSB7I3Byb2plY3QgYW5kIHByb2plY3QgcmVsZWFzZSN9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICAgICAgICAgICAgICA8aDE+SW1wb3J0IGxheWVyPC9oMT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBpZD0iaW1wb3J0LWVycm9yIiA+CisgICAgICAgICAgICAgICAgICAgICAgICA8aDM+VW5zdXBwb3J0ZWQgcHJvamVjdCB0eXBlPC9oMz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgcHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0IGltcG9ydGluZyBsYXllcnMuPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvanMtdW5pdC10ZXN0cy5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9qcy11bml0LXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4ZmQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvanMtdW5pdC10ZXN0cy5odG1sCkBAIC0wLDAgKzEsMzkgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9Cit7JSBibG9jayBwYWdlY29udGVudCAlfQorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LTEuMTguMC5jc3MiIC8+CisKKzxzY3JpcHQgc3JjPSIvL2NvZGUuanF1ZXJ5LmNvbS9xdW5pdC9xdW5pdC0xLjE4LjAuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJvamVjdHBhZ2UuanMnICV9Ij48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvYm9vdHN0cmFwLm1pbi5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvZmlsdGVyc25pcHBldC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvaW1wb3J0bGF5ZXIuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3ByZXR0aWZ5LmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckJ0bi5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJEZXBzTW9kYWwuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3Byb2plY3RwYWdlLmpzJyAlfSI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllcmRldGFpbHMuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3RhYmxlLmpzJyAlfSI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgIHZhciB0YWJsZVVybCA9ICd7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QucGsgJX0nOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSJ7JSBzdGF0aWMgJ2pzL3Rlc3RzL3Rlc3QuanMnICV9Ij48L3NjcmlwdD4KKworPGRpdiBpZD0icXVuaXQiPjwvZGl2PgorCis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxheWVycyIgcGxhY2Vob2xkZXI9ImxheWVycyIgPjwvaW5wdXQ+Cis8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InJlY2lwZXMiIHBsYWNlaG9sZGVyPSJyZWNpcGVzIj48L2lucHV0PgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJwcm9qZWN0cyIgcGxhY2Vob2xkZXI9InByb2plY3RzIj48L2lucHV0PgorPGlucHV0IHR5cGU9InRleHQiIGlkPSJtYWNoaW5lcyIgcGxhY2Vob2xkZXI9Im1hY2hpbmVzIj48L2lucHV0PgorCit7JSBlbmRibG9jayAlfQorCisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYW5kaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVlOTUzMgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZy5odG1sCkBAIC0wLDAgKzEsNTggQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KKworeyUgbG9hZCBzdGF0aWMgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworeyUgYmxvY2sgcGFnZWNvbnRlbnQgJX0KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICA8IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KKyAgICA8ZGl2IGNsYXNzPSJoZXJvLXVuaXQgc3BhbjEyIHdlbGwtdHJhbnNwYXJlbnQiPgorICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgICAgIDxoMT4KKyAgICAgICAgVGhpcyBpcyBUb2FzdGVyCisgICAgICAgPC9oMT4KKyAgICAgICA8cD5BIHdlYiBpbnRlcmZhY2UgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnIj5PcGVuRW1iZWRkZWQ8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2JpdGJha2UiPkJpdEJha2U8L2E+LCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj5Zb2N0byBQcm9qZWN0PC9hPiBidWlsZCBzeXN0ZW0uPC9wPgorCisKKwkJeyUgaWYgbHZzX25vcyAlfQorCQkgICAgPHAgY2xhc3M9Imhlcm8tYWN0aW9ucyI+CisJCQkgICAgPGEgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidG4tbGFyZ2UiIGhyZWY9InslIHVybCAnbmV3cHJvamVjdCcgJX0iPgorCQkJCSAgICBUbyBzdGFydCBidWlsZGluZywgY3JlYXRlIHlvdXIgZmlyc3QgVG9hc3RlciBwcm9qZWN0CisJCQkgICAgPC9hPgorCQkgICAgPC9wPgorCQl7JSBlbHNlICV9CisJCSAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQgYWlyIj4KKwkJCSAgICBUb2FzdGVyIGhhcyBubyBsYXllciBpbmZvcm1hdGlvbi4gV2l0aG91dCBsYXllciBpbmZvcm1hdGlvbiwgeW91IGNhbm5vdCBydW4gYnVpbGRzLiBUbyBnZW5lcmF0ZSBsYXllciBpbmZvcm1hdGlvbiB5b3UgY2FuOgorCQkJICAgIDx1bD4KKwkJCSAgICAgICAgPGxpPgorCQkJICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvbGF0ZXN0L3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLmh0bWwjbGF5ZXItc291cmNlIj5Db25maWd1cmUgYSBsYXllciBzb3VyY2U8L2E+CisJCQkgICAgICAgIDwvbGk+CisJCQkgICAgICAgIDxsaT4KKwkJCSAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnbmV3cHJvamVjdCcgJX0iPkNyZWF0ZSBhIHByb2plY3Q8L2E+LCB0aGVuIGltcG9ydCBsYXllcnMKKwkJCSAgICAgICAgPC9saT4KKwkJCSAgICA8L3VsPgorCQkgICAgPC9kaXY+CisJICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzL2xhdGVzdC90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC5odG1sIj5SZWFkIHRoZSBUb2FzdGVyIG1hbnVhbDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Db250cmlidXRlX3RvX1RvYXN0ZXIiPkNvbnRyaWJ1dGUgdG8gVG9hc3RlcjwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisKKyAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgICAgICAgIDxpbWcgYWx0PSJZb2N0byBQcm9qZWN0IiBjbGFzcz0idGh1bWJuYWlsIiBzcmM9InslIHN0YXRpYyAnaW1nL3RvYXN0ZXJfYncucG5nJyAlfSIvPgorICAgICAgPC9kaXY+CisgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgPC9kaXY+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmdfbm90X21hbmFnZWQuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGFuZGluZ19ub3RfbWFuYWdlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzQzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xhbmRpbmdfbm90X21hbmFnZWQuaHRtbApAQCAtMCwwICsxLDMyIEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgPCEtLSBFbXB0eSAtIG5vIGJ1aWxkIG1vZHVsZSAtLT4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgPGgxPgorICAgICAgIFRoaXMgcGFnZSBvbmx5IHdvcmtzIHdpdGggVG9hc3RlciBpbiAnQnVpbGQnIG1vZGUKKyAgICAgPC9oMT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIGxlYWQiPgorICAgICA8cCI+CisgICAgIFRoZSAnQnVpbGQnIG1vZGUgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYW5kIHJ1biB5b3VyIFlvY3RvIFByb2plY3QgYnVpbGRzIGZyb20gVG9hc3Rlci4KKyAgICAgPHVsPgorICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9sYXRlc3QvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCNpbnRyby1tb2RlcyI+CisgICAgICAgUmVhZCBhYm91dCB0aGUgJ0J1aWxkJyBtb2RlCisgICAgICAgPC9hPjwvbGk+CisgICAgICAgPGxpPjxhIGhyZWY9Ii8iPgorICAgICAgIFZpZXcgeW91ciBidWlsZHMKKyAgICAgICA8L2E+PC9saT4KKyAgICAgPC91bD4KKyAgICAgPC9wPgorICAgIDwvZGl2PgorICAgPC9kaXY+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyX2J0bi5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU5MzkzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9sYXllcl9idG4uaHRtbApAQCAtMCwwICsxLDkgQEAKKzxidXR0b24gY2xhc3M9ImJ0biBidG4tZGFuZ2VyIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLnBrfX0gbGF5ZXJidG4iIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJyZW1vdmUiID4KKyAgPGkgY2xhc3M9Imljb24tdHJhc2giPjwvaT4KKyAgRGVsZXRlIGxheWVyCis8L2J1dHRvbj4KKzxidXR0b24gY2xhc3M9ImJ0biBidG4tYmxvY2sgbGF5ZXItYWRkLXt7ZGF0YS5wa319IGxheWVyYnRuIiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5wa319LCAibmFtZSI6ICAie3tkYXRhLmxheWVyLm5hbWV9fSIsICJsYXllcmRldGFpbHVybCI6ICJ7JXVybCAnbGF5ZXJkZXRhaWxzJyBleHRyYS5waWQgZGF0YS5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiPgorICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIEFkZCBsYXllcgorPC9idXR0b24+CisKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbGF5ZXJkZXRhaWxzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDNkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL2xheWVyZGV0YWlscy5odG1sCkBAIC0wLDAgKzEsMjc2IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9Cit7JSBsb2FkIHN0YXRpYyAlfQorCit7JSBibG9jayBwYWdlY29udGVudCAlfQorCis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKyAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICA8bGkgY2xhc3M9Im11dGVkIj57e3Byb2plY3QubmFtZX19OjwvbGk+CisgICAgPGxpPgorICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBwcm9qZWN0LmlkICV9Ij5Db25maWd1cmF0aW9uPC9hPgorICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KKyAgICA8L2xpPgorICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3RsYXllcnMnIHByb2plY3QuaWQgJX0iPkNvbXBhdGlibGUgbGF5ZXJzPC9hPgorICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXIiPiZyYXJyOzwvc3Bhbj4KKyAgICA8L2xpPgorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSAoe3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V8dHJ1bmNhdGVjaGFyczoxM319KQorICAgIDwvbGk+CisgIDwvdWw+Cis8L2Rpdj4KKworeyMgSWYgdGhpcyBpcyBub3QgYW4gaW1wb3J0ZWQgbGF5ZXIgdGhlbiBoaWRlIHRoZSBlZGl0IHVpICN9Cit7JSBpZiBub3QgbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZV9pZCBvciBsYXllcnZlcnNpb24ubGF5ZXJfc291cmNlLnNvdXJjZXR5cGUgIT0gbGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZS5UWVBFX0lNUE9SVEVEICV9Cis8c3R5bGUgc2NvcGVkPgorIC5pY29uLXBlbmNpbCB7CisgICBkaXNwbGF5Om5vbmU7CisgfQorLmRlbGV0ZS1jdXJyZW50LXZhbHVleworICBkaXNwbGF5OiBub25lOworfQorIGxpIC5pY29uLXRyYXNoIHsKKyAgIGRpc3BsYXk6bm9uZTsKKyB9CisgLmFkZC1kZXBzIHsKKyAgIGRpc3BsYXk6bm9uZTsKKyB9Cis8L3N0eWxlPgoreyUgZW5kaWYgJX0KKworCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllcmRldGFpbHMuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisKKyAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7CisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHByb2plY3RCdWlsZHNVcmwgOiAieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBwcm9qZWN0LmlkICV9IiwKKyAgICAgIHhoclVwZGF0ZUxheWVyVXJsIDogInslIHVybCAneGhyX3VwZGF0ZWxheWVyJyAlfSIsCisgICAgICBsYXllclZlcnNpb24gOiB7CisgICAgICAgIG5hbWUgOiAie3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IiwKKyAgICAgICAgaWQgOiB7e2xheWVydmVyc2lvbi5pZH19LAorICAgICAgICBjb21taXQ6ICJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZX19IiwKKyAgICAgIHslaWYgbGF5ZXJ2ZXJzaW9uLmlkIGluIHByb2plY3RsYXllcnMgJX0KKyAgICAgICAgaW5DdXJyZW50UHJqIDogdHJ1ZSwKKyAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgaW5DdXJyZW50UHJqIDogZmFsc2UsCisgICAgICB7JSBlbmRpZiAlfQorICAgICAgICBsYXllcmRldGFpbHVybCA6ICJ7JSB1cmwgJ2xheWVyZGV0YWlscycgcHJvamVjdC5pZCBsYXllcnZlcnNpb24uaWQgICV9IiwKKyAgICAgICAgc291cmNlSWQ6IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyX3NvdXJjZV9pZHxqc29ufX0sCisgICAgICB9CisgICAgfTsKKworICAgIHRyeSB7CisgICAgICBsYXllckRldGFpbHNQYWdlSW5pdChjdHgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGRvY3VtZW50LndyaXRlKCJTb3JyeSwgQW4gZXJyb3IgaGFzIG9jY3VycmVkIGxvYWRpbmcgdGhpcyBwYWdlIik7CisgICAgICBjb25zb2xlLndhcm4oZSk7CisgICAgfQorICB9KTsKKzwvc2NyaXB0PgorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgc3BhbjExIj4KKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgIDxoMT57e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPHNtYWxsIGNsYXNzPSJjb21taXQiCisgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfGxlbmd0aCA+IDEzICV9CisgICAgICAgIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fSIKKyAgICAgICAgeyUgZW5kaWYgJX0+CisgICAgICAgICh7e2xheWVydmVyc2lvbi5nZXRfdmNzX3JlZmVyZW5jZXx0cnVuY2F0ZWNoYXJzOjEzfX0pPC9zbWFsbD48L2gxPgorICA8L2Rpdj4KKzwvZGl2PgorCis8IS0tIGNvbnRhaW5lciBmb3IgdGFicyAtLT4KKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuNyB0YWJiYWJsZSI+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCIgaWQ9ImFsZXJ0LWFyZWEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGlkPSJkaXNtaXNzLWFsZXJ0Ij4mdGltZXM7PC9idXR0b24+CisgICAgPHNwYW4gaWQ9ImFsZXJ0LW1zZyI+PC9zcGFuPgorICA8L2Rpdj4KKyAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjaW5mb3JtYXRpb24iIGlkPSJkZXRhaWxzLXRhYiI+TGF5ZXIgZGV0YWlsczwvYT4KKyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0YWIiIGhyZWY9IiNyZWNpcGVzIiBjbGFzcz0ibXV0ZWQiIGlkPSJ0YXJnZXRzLXRhYiI+UmVjaXBlcyAoPHNwYW4gY2xhc3M9InRhYmxlLWNvdW50LXJlY2lwZXN0YWJsZSI+PC9zcGFuPik8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICA8YSBkYXRhLXRvZ2dsZT0idGFiIiBocmVmPSIjbWFjaGluZXMiIGNsYXNzPSJtdXRlZCIgaWQ9Im1hY2hpbmVzLXRhYiI+TWFjaGluZXMgKDxzcGFuIGNsYXNzPSJ0YWJsZS1jb3VudC1tYWNoaW5lc3RhYmxlIj48L3NwYW4+KTwvYT4KKyAgICA8L2xpPgorICA8L3VsPgorICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi1wbGFjZSI+CisgICAgICB7JSBpZiBsYXllcnZlcnNpb24uaWQgbm90IGluIHByb2plY3RsYXllcnMgJX0KKyAgICAgIDxidXR0b24gaWQ9ImFkZC1yZW1vdmUtbGF5ZXItYnRuIiBkYXRhLWRpcmVjdGl2ZT0iYWRkIiBjbGFzcz0iYnRuIGJ0bi1sYXJnZSBidG4tYmxvY2siPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1wbHVzIj48L3NwYW4+CisgICAgICAgIEFkZCB0aGUge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IGxheWVyIHRvIHlvdXIgcHJvamVjdAorICAgICAgPC9idXR0b24+CisgICAgICB7JSBlbHNlICV9CisgICAgICA8YnV0dG9uIGlkPSJhZGQtcmVtb3ZlLWxheWVyLWJ0biIgZGF0YS1kaXJlY3RpdmU9InJlbW92ZSIgY2xhc3M9ImJ0biBidG4tYmxvY2sgYnRuLWxhcmdlIGJ0bi1kYW5nZXIiPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCI+PC9zcGFuPgorICAgICAgICBEZWxldGUgdGhlIHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSBsYXllciBmcm9tIHlvdXIgcHJvamVjdAorICAgICAgPC9idXR0b24+CisgICAgICB7JSBlbmRpZiAlfQorICAgIDwvc3Bhbj4KKworICAgIDwhLS0gbGF5ZXIgZGV0YWlscyBwYW5lIC0tPgorICAgIDxkaXYgaWQ9ImluZm9ybWF0aW9uIiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIj4KKyAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgIDxkdCBjbGFzcz0iIj4KKyAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRmV0Y2gvY2xvbmUgVVJMIG9mIHRoZSByZXBvc2l0b3J5Ij48L2k+CisgICAgICAgICAgUmVwb3NpdG9yeSBVUkwKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci52Y3NfdXJsfX08L3NwYW4+CisgICAgICAgICAgeyUgaWYgbGF5ZXJ2ZXJzaW9uLmdldF92Y3NfbGlua191cmwgJX0KKyAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2xpbmtfdXJsfX0vIiBjbGFzcz0iaWNvbi1zaGFyZSBnZXQtaW5mbyIgdGFyZ2V0PSJfYmxhbmsiPjwvYT4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcmVwby1mb3JtIiBjbGFzcz0iY29udHJvbC1ncm91cCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmxheWVyLnZjc191cmx9fSI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWxheWVyLXByb3A9InZjc191cmwiIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiID48L2k+CisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZCwgaWYgbm90IGluIHRoZSByb290ICh1c3VhbGx5IG9ubHkgdXNlZCBpZiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBtb3JlIHRoYW4gb25lIGxheWVyKSI+PC9pPgorICAgICAgICAgICAgUmVwb3NpdG9yeSBzdWJkaXJlY3RvcnkKKyAgICAgICAgICA8L2R0PgorICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Tm90IHNldDwvc3Bhbj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5kaXJwYXRofX08L3NwYW4+CisgICAgICAgICAgICB7JSBpZiBsYXllcnZlcnNpb24uZ2V0X3Zjc19kaXJwYXRoX2xpbmtfdXJsICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7e2xheWVydmVyc2lvbi5nZXRfdmNzX2RpcnBhdGhfbGlua191cmx9fSIgY2xhc3M9Imljb24tc2hhcmUgZ2V0LWluZm8iIHRhcmdldD0iX2JsYW5rIj48L2E+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zdWJkaXItZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3tsYXllcnZlcnNpb24uZGlycGF0aH19Ij4KKyAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1sYXllci1wcm9wPSJkaXJwYXRoIiBjbGFzcz0iYnRuIGNoYW5nZS1idG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICA8aSBpZD0iY2hhbmdlLXN1YmRpciIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoLCB0YWcgb3IgY29tbWl0Ij48L2k+CisgICAgICAgICAgICAgIFJldmlzaW9uCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3VycmVudC12YWx1ZSI+e3tsYXllcnZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2V9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9Int7bGF5ZXJ2ZXJzaW9uLmdldF92Y3NfcmVmZXJlbmNlfX0iPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICBkYXRhLWxheWVyLXByb3A9ImNvbW1pdCIgY2xhc3M9ImJ0biBjaGFuZ2UtYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImJ0biBidG4tbGluayBjYW5jZWwiPkNhbmNlbDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT4KKyAgICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJPdGhlciBsYXllcnMgdGhpcyBsYXllciBkZXBlbmRzIHVwb24iPjwvaT4KKyAgICAgICAgICAgICAgICBMYXllciBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY3VycmVudC12YWx1ZSIgaWQ9ImxheWVyLWRlcHMtbGlzdCI+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgbGQgaW4gbGF5ZXJ2ZXJzaW9uLmRlcGVuZGVuY2llcy5hbGwgJX0KKyAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWxheWVyLWlkPSJ7e2xkLmRlcGVuZHNfb24uaWR9fSI+CisgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0ie3tsZC5kZXBlbmRzX29uLmxheWVyLnZjc191cmx9fSB8IHt7bGQuZGVwZW5kc19vbi5nZXRfdmNzX3JlZmVyZW5jZX19IiBocmVmPSJ7JSB1cmwgJ2xheWVyZGV0YWlscycgcHJvamVjdC5pZCBsZC5kZXBlbmRzX29uLmlkICV9Ij57e2xkLmRlcGVuZHNfb24ubGF5ZXIubmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCAiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iRGVsZXRlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQgYWRkLWRlcHMiPgorICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkYXRhLW1pbkxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgIHBsYWNlaG9sZGVyPSJUeXBlIGEgbGF5ZXIgbmFtZSIgaWQ9ImxheWVyLWRlcC1pbnB1dCI+CisgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iIGlkPSJhZGQtbGF5ZXItZGVwZW5kZW5jeS1idG4iID4KKyAgICAgICAgICAgICAgICAgICAgICBBZGQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBhZGQtZGVwcyI+WW91IGNhbiBvbmx5IGFkZCBsYXllcnMgVG9hc3RlciBrbm93cyBhYm91dDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICA8L2RsPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8IS0tIGVuZCBsYXllcmRldGFpbHMgdGFiIC0tPgorICAgICAgICAgICAgPCEtLSB0YXJnZXRzIHRhYiAtLT4KKyAgICAgICAgICAgIDxkaXYgaWQ9InJlY2lwZXMiIGNsYXNzPSJ0YWItcGFuZSI+CisgICAgICAgICAgICAgIDwhLS0gUmVjaXBlIHRhYmxlIC0tPgorICAgICAgICAgICAgICA8ZGl2IGlkPSJuby1yZWNpcGVzLXlldCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgZG9lcyBub3QgaGF2ZSByZWNpcGUgaW5mb3JtYXRpb24gZm9yIHRoZSA8c3Ryb25nPiB7e2xheWVydmVyc2lvbi5sYXllci5uYW1lfX0gPC9zdHJvbmc+IGxheWVyLjwvcD4KKyAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGxlYXJucyBhYm91dCBsYXllcnMgd2hlbiB5b3UgYnVpbGQgdGhlbS4gSWYgdGhpcyBsYXllciBwcm92aWRlcyBhbnkgcmVjaXBlcywgdGhleSB3aWxsIGJlIGxpc3RlZCBoZXJlIGFmdGVyIHlvdSBidWlsZCB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgIDwvZGl2PgorCisKKworICAgICAgICAgICAgICB7JSB1cmwgJ2xheWVycmVjaXBlc3RhYmxlJyBwcm9qZWN0LmlkIGxheWVydmVyc2lvbi5pZCAgYXMgeGhyX3RhYmxlX3VybCAlfQorICAgICAgICAgICAgICB7JSB3aXRoICJyZWNpcGVzdGFibGUiIGFzIHRhYmxlX25hbWUgJX0KKyAgICAgICAgICAgICAgeyUgd2l0aCAiUmVjaXBlcyIgYXMgdGl0bGUgJX0KKyAgICAgICAgICAgICAgeyUgaW5jbHVkZSAndG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sJyAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8ZGl2IGlkPSJtYWNoaW5lcyIgY2xhc3M9InRhYi1wYW5lIj4KKworICAgICAgICAgICAgICA8ZGl2IGlkPSJuby1tYWNoaW5lcy15ZXQiIGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICA8cD5Ub2FzdGVyIGRvZXMgbm90IGhhdmUgbWFjaGluZSBpbmZvcm1hdGlvbiBmb3IgdGhlIDxzdHJvbmc+IHt7bGF5ZXJ2ZXJzaW9uLmxheWVyLm5hbWV9fSA8L3N0cm9uZz4gbGF5ZXIuPC9wPgorICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgbGVhcm5zIGFib3V0IGxheWVycyB3aGVuIHlvdSBidWlsZCB0aGVtLiBJZiB0aGlzIGxheWVyIHByb3ZpZGVzIGFueSBtYWNoaW5lcywgdGhleSB3aWxsIGJlIGxpc3RlZCBoZXJlIGFmdGVyIHlvdSBidWlsZCB0aGUgPHN0cm9uZz4ge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19IDwvc3Ryb25nPiBsYXllci48L3A+CisgICAgICAgICAgICAgIDwvZGl2PgorCisKKyAgICAgICAgICAgICAgPCEtLSBNYWNoaW5lcyB0YWJsZSAtLT4KKyAgICAgICAgICAgICAgeyUgdXJsICdsYXllcm1hY2hpbmVzdGFibGUnIHByb2plY3QuaWQgbGF5ZXJ2ZXJzaW9uLmlkICBhcyB4aHJfdGFibGVfdXJsICV9CisgICAgICAgICAgICAgIHslIHdpdGggIm1hY2hpbmVzdGFibGUiIGFzIHRhYmxlX25hbWUgICV9CisgICAgICAgICAgICAgIHslIHdpdGggIk1hY2hpbmVzIiBhcyB0aXRsZSAgJX0KKyAgICAgICAgICAgICAgeyUgaW5jbHVkZSAndG9hc3RlcnRhYmxlLXNpbXBsZS5odG1sJyAlfQorICAgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWIgY29udGVudCAtLT4KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYmFibGUgLS0+CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIHNwYW40IHdlbGwiPiA8IS0tIGluZm8gc2lkZSBwYW5lbCAtLT4KKyAgICAgICAgICA8aDI+QWJvdXQge3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19PC9oMj4KKyAgICAgICAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisKKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgU3VtbWFyeQorICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iT25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIGxheWVyIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci5zdW1tYXJ5fGRlZmF1bHRfaWZfbm9uZTonJ319PC9zcGFuPgorICAgICAgICAgICAgICA8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tYm90dG9tOjIwcHgiPgorICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ic3BhbjEyIiByb3dzPSIyIj57JSBpZiBsYXllcnZlcnNpb24ubGF5ZXIuc3VtbWFyeSAlfXt7bGF5ZXJ2ZXJzaW9uLmxheWVyLnN1bW1hcnl9fXslIGVuZGlmICV9PC90ZXh0YXJlYT4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgZGF0YS1sYXllci1wcm9wPSJzdW1tYXJ5IiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGNhbmNlbCI+Q2FuY2VsPC9hPgorICAgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi10cmFzaCBkZWxldGUtY3VycmVudC12YWx1ZSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJEZWxldGUiPjwvc3Bhbj4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPk5vdCBzZXQ8L3NwYW4+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjdXJyZW50LXZhbHVlIj57e2xheWVydmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbnxkZWZhdWx0X2lmX25vbmU6Jyd9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPGZvcm0gc3R5bGU9ImRpc3BsYXk6bm9uZTsgbWFyZ2luLWJvdHRvbToyMHB4Ij4KKyAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InNwYW4xMiIgcm93cz0iNiI+eyUgaWYgbGF5ZXJ2ZXJzaW9uLmxheWVyLmRlc2NyaXB0aW9uICV9e3tsYXllcnZlcnNpb24ubGF5ZXIuZGVzY3JpcHRpb259fXslIGVuZGlmICV9PC90ZXh0YXJlYT4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gY2hhbmdlLWJ0biIgZGF0YS1sYXllci1wcm9wPSJkZXNjcmlwdGlvbiIgdHlwZT0iYnV0dG9uIiA+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJidG4gYnRuLWxpbmsgY2FuY2VsIj5DYW5jZWw8L2E+CisgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLXRyYXNoIGRlbGV0ZS1jdXJyZW50LXZhbHVlIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IkRlbGV0ZSI+PC9zcGFuPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGlmIGxheWVydmVyc2lvbi5sYXllci51cF9pZCAlfQorICAgICAgICAgICAgPGR0PkxheWVyIGluZGV4PC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYnJhbmNoL3t7bGF5ZXJ2ZXJzaW9uLnVwX2JyYW5jaC5uYW1lfX0vbGF5ZXIve3tsYXllcnZlcnNpb24ubGF5ZXIubmFtZX19Ij5sYXllciBpbmRleCBsaW5rPC9hPgorCisgICAgICAgICAgPC9kZD4KKyAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGw+CisgICAgICA8L2Rpdj4KKworICAgICAgeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbWFjaGluZV9idG4uaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvbWFjaGluZV9idG4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNiNTViCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tYWNoaW5lX2J0bi5odG1sCkBAIC0wLDAgKzEsOCBAQAorPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBleHRyYS5waWQgJX0/c2V0TWFjaGluZT17e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLmxheWVyX3ZlcnNpb24uaWR9fSIgc3R5bGU9Im1hcmdpbi10b3A6IDVweDsgZGlzcGxheTpub25lIj4KKyAgU2VsZWN0IG1hY2hpbmU8L2E+Cis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyYnRuIGxheWVyLWFkZC17e2RhdGEubGF5ZXJfdmVyc2lvbi5pZH19IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5sYXllcl92ZXJzaW9uLmlkfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5pZCAlfSJ9JyBkYXRhLWRpcmVjdGl2ZT0iYWRkIj4KKyAgPGkgY2xhc3M9Imljb24tcGx1cyI+PC9pPgorICBBZGQgbGF5ZXIKKyAgPGkgdGl0bGU9IiIgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iVG8gZW5hYmxlIHRoaXMgbWFjaGluZSwgeW91IG11c3QgZmlyc3QgYWRkIHRoZSB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0Ij48L2k+Cis8L2J1dHRvbj4KKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9tcmJfc2VjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NmZiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL21yYl9zZWN0aW9uLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKKworeyVpZiBtcnUuY291bnQgPiAwJX0KKworICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICA8aDE+CisgICAgICAgICAgTGF0ZXN0IGJ1aWxkcworICAgICAgIDwvaDE+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJsYXRlc3QtYnVpbGRzIj4KKyAgeyUgZm9yIGJ1aWxkIGluIG1ydSAlfQorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQlfWFsZXJ0LXN1Y2Nlc3N7JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfWFsZXJ0LWVycm9yeyVlbHNlJX1hbGVydC1pbmZveyVlbmRpZiV9IHByb2plY3QtbmFtZSAiPgorICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX1sYWJlbC1zdWNjZXNzeyVlbGlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEJX1sYWJlbC1pbXBvcnRhbnR7JWVsc2UlfWxhYmVsLWluZm97JWVuZGlmJX0iPgorICAgICAgICAgPGEgaHJlZj17JSB1cmwgJ3Byb2plY3QnIGJ1aWxkLnByb2plY3QucGsgJX0+CisgICAgICAgICAgIHt7YnVpbGQucHJvamVjdC5uYW1lfX0KKyAgICAgICAgIDwvYT4KKyAgICAgICA8L3NwYW4+CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4zIGxlYWQiPgorICAgIHslaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgb3IgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0iIGNsYXNzPSJ7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEICV9c3VjY2Vzc3slZWxzZSV9ZXJyb3J7JWVuZGlmJX0iPgorICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBpZiBidWlsZC50YXJnZXRfc2V0LmFsbC5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIKKyAgICAgICAgICAgICAgICAgIHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgdGl0bGU9IlRhcmdldHM6IHslZm9yIHRhcmdldCBpbiBidWlsZC50YXJnZXRfc2V0LmFsbCV9e3t0YXJnZXQudGFyZ2V0fX0geyVlbmRmb3IlfSIKKyAgICAgICAgICAgICAgICAgIHslZW5kaWYlfQorICAgICAgICAgICAgICAgID4KKworICAgICAgICAgICAgICAgICAge3tidWlsZC50YXJnZXRfc2V0LmFsbC4wLnRhcmdldH19IHslaWYgYnVpbGQudGFyZ2V0X3NldC5hbGwuY291bnQgPiAxJX0oKyB7e2J1aWxkLnRhcmdldF9zZXQuYWxsLmNvdW50fGFkZDoiLTEifX0peyVlbmRpZiV9CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgeyVpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCBvciBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQorICAgICAgICAgICAgICAgIDwvYT4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMiBsZWFkIj4KKyAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5jb21wbGV0ZWRfb258Zm9ybWF0X2J1aWxkX2RhdGUgICV9CisgICAgICAgICAgICAgICAgICAgIHt7IGJ1aWxkLmNvbXBsZXRlZF9vbnxkYXRlOidkL20veSBIOmknIH19CisgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICB7eyBidWlsZC5jb21wbGV0ZWRfb258ZGF0ZTonSDppJyB9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEIG9yIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuRkFJTEVEICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFuMiBsZWFkIj4KKyAgICAgIHslIGlmICBidWlsZC5lcnJvcnMuY291bnQgJX0KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1taW51cy1zaWduIHJlZCI+PC9pPiA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0jZXJyb3JzIiBjbGFzcz0iZXJyb3IiPnt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4yIGxlYWQiPgorICAgICAgeyUgaWYgIGJ1aWxkLndhcm5pbmdzLmNvdW50ICV9CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24td2FybmluZy1zaWduIHllbGxvdyI+PC9pPiA8YSBocmVmPSJ7JXVybCAnYnVpbGRkYXNoYm9hcmQnIGJ1aWxkLnBrJX0jd2FybmluZ3MiIGNsYXNzPSJ3YXJuaW5nIj57e2J1aWxkLndhcm5pbmdzLmNvdW50fX0gd2FybmluZ3t7YnVpbGQud2FybmluZ3MuY291bnR8cGx1cmFsaXplfX08L2E+CisgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWFkICI+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICBCdWlsZCB0aW1lOiA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkdGltZScgYnVpbGQucGsgJX0iPnt7IGJ1aWxkLnRpbWVzcGVudF9zZWNvbmRzfHNlY3RvaG1zIH19PC9hPgorICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bgorICAgICAgICAgICAgICAgICAgeyUgaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5TVUNDRUVERUQgJX0KKyAgICAgICAgICAgICAgICAgICAgICBidG4tc3VjY2VzcworICAgICAgICAgICAgICAgICAgeyUgZWxpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLkZBSUxFRCAlfQorICAgICAgICAgICAgICAgICAgICAgIGJ0bi1kYW5nZXIKKyAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICBidG4taW5mbworICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgICBwdWxsLXJpZ2h0IgorICAgICAgICAgICAgICAgICAgb25jbGljaz0nc2NoZWR1bGVCdWlsZCh7JSB1cmwgJ3Byb2plY3RidWlsZHMnIGJ1aWxkLnByb2plY3QuaWQgYXMgYnBpICV9e3ticGl8anNvbn19LAorICAgICAgICAgICAgICAgICAgICB7e2J1aWxkLnByb2plY3QubmFtZXxqc29ufX0sCisgICAgICAgICAgICAgICAgICAgIHslIHVybCAncHJvamVjdCcgYnVpbGQucHJvamVjdC5pZCBhcyBicHVybCAlfXt7YnB1cmx8anNvbn19LAorICAgICAgICAgICAgICAgICAgICB7e2J1aWxkLnRhcmdldF9zZXQuYWxsfGdldF90YXNrc3xqc29ufX0pJz4KKworICAgICAgICAgICAgICAgICAgICBSdW4gYWdhaW4KKyAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICB7JWVuZGlmJX0KKyAgICB7JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuSU5fUFJPR1JFU1MgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW40Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcyIgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSJ7e2J1aWxkLmNvbXBsZXRlcGVyfX0lIG9mIHRhc2tzIGNvbXBsZXRlIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IHt7YnVpbGQuY29tcGxldGVwZXJ9fSU7IiBjbGFzcz0iYmFyIj48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVhZCBwdWxsLXJpZ2h0Ij57e2J1aWxkLmNvbXBsZXRlcGVyfX0lIG9mIHRhc2tzIGNvbXBsZXRlPC9kaXY+CisgICAgeyVlbmRpZiV9CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgIHslIGVuZGZvciAlfQorICA8L2Rpdj4KKworPHNjcmlwdD4KKworZnVuY3Rpb24gc2NoZWR1bGVCdWlsZCh1cmwsIHByb2plY3ROYW1lLCBwcm9qZWN0VXJsLCBidWlsZGxpc3QpIHsKKyAgY29uc29sZS5sb2coInNjaGVkdWxlQnVpbGQiKTsKKyAgbGlidG9hc3Rlci5zdGFydEFCdWlsZCh1cmwsIG51bGwsIGJ1aWxkbGlzdC5qb2luKCIgIiksIGZ1bmN0aW9uKCl7CisgICAgY29uc29sZS5sb2coInJlbG9hZGluZyBwYWdlIik7CisgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOworICB9LCBudWxsKTsKK30KKworJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKKworICAkKCIuY2FuY2VsLWJ1aWxkLWJ0biIpLmNsaWNrKGZ1bmN0aW9uICgpeworICAgIHZhciB1cmwgPSAkKHRoaXMpLmRhdGEoJ3JlcXVlc3QtdXJsJyk7CisgICAgdmFyIGJ1aWxkSWRzID0gJCh0aGlzKS5kYXRhKCdidWlsZC1pZCcpOworICAgIHZhciBidG4gPSAkKHRoaXMpOworCisgICAgbGlidG9hc3Rlci5jYW5jZWxBQnVpbGQodXJsLCBidWlsZElkcywgZnVuY3Rpb24oKXsKKyAgICAgIGJ0bi5wYXJlbnRzKCIuYWxlcnQiKS5mYWRlT3V0KCk7CisgICAgfSwgbnVsbCk7CisgIH0pOworfSk7CisKKzwvc2NyaXB0PgorCit7JWVuZGlmJX0KKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdwcm9qZWN0Lmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL25ld3Byb2plY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTczOTBiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9uZXdwcm9qZWN0Lmh0bWwKQEAgLTAsMCArMSwxMzAgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9Cis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgICA8aDE+Q3JlYXRlIGEgbmV3IHByb2plY3Q8L2gxPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICB7JSBpZiBhbGVydCAlfQorICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3Igcm93LWZsdWlkIiByb2xlPSJhbGVydCI+e3thbGVydH19PC9kaXY+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgIDxkaXYgY2xhc3M9InNwYW42Ij4KKyAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIj57JSBjc3JmX3Rva2VuICV9CisKKyAgICAgICAgICAgIDxmaWVsZHNldD4KKyAgICAgICAgICAgICAgPGxhYmVsPlByb2plY3QgbmFtZSA8c3BhbiBjbGFzcz0ibXV0ZWQiPihyZXF1aXJlZCk8L3NwYW4+PC9sYWJlbD4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJpbnB1dC14bGFyZ2UiIHJlcXVpcmVkIGlkPSJuZXctcHJvamVjdC1uYW1lIiBuYW1lPSJwcm9qZWN0bmFtZSI+CisgICAgICAgICAgICA8L2ZpZWxkc2V0PgorPCEtLQorICAgICAgICAgICAgPGZpZWxkc2V0PgorICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0icHJvamVjdC1mb3JtIj5Qcm9qZWN0IHR5cGU8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InByb2plY3QtZm9ybSByYWRpbyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJwdHlwZSIgdmFsdWU9ImFuYWx5c2lzIiBjaGVja2VkLz4gQW5hbHlzaXMgUHJvamVjdDwvbGFiZWw+CisKKyAgICAgICAgICAgICAgICB7JSBpZiByZWxlYXNlcy5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0gcmFkaW8iPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icHR5cGUiIHZhbHVlPSJidWlsZCIgY2hlY2tlZCAvPiBCdWlsZCBQcm9qZWN0PC9sYWJlbD4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICA8L2ZpZWxkc2V0PiAtLT4KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icHR5cGUiIHZhbHVlPSJidWlsZCIgLz4KKworICAgICAgICB7JSBpZiByZWxlYXNlcy5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0icmVsZWFzZSI+CisgICAgICAgICAgICB7JSBpZiByZWxlYXNlcy5jb3VudCA+IDEgJX0KKyAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJwcm9qZWN0LWZvcm0iPgorICAgICAgICAgICAgICAgIFJlbGVhc2UKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbSB5b3Ugd2FudCB0byB1c2UiPjwvaT4KKyAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwcm9qZWN0dmVyc2lvbiIgaWQ9InByb2plY3R2ZXJzaW9uIj4KKyAgICAgICAgICAgICAgICB7JSBmb3IgcmVsZWFzZSBpbiByZWxlYXNlcyAlfQorICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e3JlbGVhc2UuaWR9fSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHslaWYgZGVmYXVsdGJyYW5jaCA9PSByZWxlYXNlLm5hbWUgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgeyVlbmRpZiV9CisgICAgICAgICAgICAgICAgICAgICA+e3tyZWxlYXNlLmRlc2NyaXB0aW9ufX08L29wdGlvbj4KKyAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgPC9zZWxlY3Q+CisgICAgICAgICAgICAgICAgeyUgZm9yIHJlbGVhc2UgaW4gcmVsZWFzZXMgJX0KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIGhlbHB0ZXh0IiBpZD0iZGVzY3JpcHRpb24te3tyZWxlYXNlLmlkfX0iIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBzcGFuNSI+e3tyZWxlYXNlLmhlbHB0ZXh0fHNhZmV9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByb2plY3R2ZXJzaW9uIiB2YWx1ZT0ie3tyZWxlYXNlcy4wLmlkfX0iLz4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2ZpZWxkc2V0PgorICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWFjdGlvbnMiPgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0iY3JlYXRlLXByb2plY3QtYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sYXJnZSIgdmFsdWU9IkNyZWF0ZSBwcm9qZWN0Ii8+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPlRvIGNyZWF0ZSBhIHByb2plY3QsIHlvdSBuZWVkIHRvIGVudGVyIGEgcHJvamVjdCBuYW1lPC9zcGFuPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZm9ybT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDwhLS0KKyAgICAgICAgPGRpdiBjbGFzcz0ic3BhbjUgd2VsbCI+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2siPgorICAgICAgICAgICAgICAgICA8aDQ+VG9hc3RlciBwcm9qZWN0IHR5cGVzPC9oND4KKyAgICAgICAgICAgICAgICAgPHA+V2l0aCBhIDxzdHJvbmc+YnVpbGQgcHJvamVjdDwvc3Ryb25nPiB5b3UgY29uZmlndXJlIGFuZCBydW4geW91ciBidWlsZHMgZnJvbSBUb2FzdGVyLjwvcD4KKyAgICAgICAgICAgICAgICAgPHA+V2l0aCBhbiA8c3Ryb25nPmFuYWx5c2lzIHByb2plY3Q8L3N0cm9uZz4sIHRoZSBidWlsZHMgYXJlIGNvbmZpZ3VyZWQgYW5kIHJ1biBieSBhbm90aGVyIHRvb2wKKyAgICAgICAgICAgICAgICAgKHNvbWV0aGluZyBsaWtlIEJ1aWxkYm90IG9yIEplbmtpbnMpLCBhbmQgdGhlIHByb2plY3Qgb25seSBjb2xsZWN0cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAgICAgICAgICAgIGJ1aWxkcyAocGFja2FnZXMsIHJlY2lwZXMsIGRlcGVuZGVuY2llcywgbG9ncywgZXRjKS4gPC9wPgorICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHJlYWQgbW9yZSBvbiA8YSBocmVmPSIjIj5ob3cgdG8gc2V0IHVwIGFuIGFuYWx5c2lzIHByb2plY3Q8L2E+CisgICAgICAgICAgICAgICAgIGluIHRoZSBUb2FzdGVyIG1hbnVhbC48L3A+CisgICAgICAgICAgICAgICAgIDxoND5SZWxlYXNlPC9oND4KKyAgICAgICAgICAgICAgICAgPHA+SWYgeW91IGNyZWF0ZSBhIDxzdHJvbmc+YnVpbGQgcHJvamVjdDwvc3Ryb25nPiwgeW91IHdpbGwgbmVlZCB0byBzZWxlY3QgYSA8c3Ryb25nPnJlbGVhc2U8L3N0cm9uZz4sCisgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBzeXN0ZW0geW91IHdhbnQgdG8gdXNlIHRvIHJ1biB5b3VyIGJ1aWxkcy48L3A+CisgICAgICAgICAgICAgPC9kaXY+IC0tPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gaGlkZSB0aGUgbmV3IHByb2plY3QgYnV0dG9uCisgICAgICAgICAgICAkKCIjbmV3LXByb2plY3QtYnV0dG9uIikuaGlkZSgpOworICAgICAgICAgICAgJCgnLmJ0bi1wcmltYXJ5JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKworICAgICAgICAgICAgLy8gZW5hYmxlIHN1Ym1pdCBidXR0b24gd2hlbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFyZSBwb3B1bGF0ZWQKKyAgICAgICAgICAgICQoImlucHV0I25ldy1wcm9qZWN0LW5hbWUiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoJCgiaW5wdXQjbmV3LXByb2plY3QtbmFtZSIpLnZhbCgpLmxlbmd0aCA+IDAgKXsKKyAgICAgICAgICAgICAgICAgICAgJCgnLmJ0bi1wcmltYXJ5JykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKKyAgICAgICAgICAgICAgICAgICAgJCgiLmhlbHAtaW5saW5lIikuY3NzKCd2aXNpYmlsaXR5JywnaGlkZGVuJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCcuYnRuLXByaW1hcnknKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgICAgICAgICAgICAgICAkKCIuaGVscC1pbmxpbmUiKS5jc3MoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHNob3cgcmVsZXZhbnQgaGVscCB0ZXh0IGZvciB0aGUgc2VsZWN0ZWQgcmVsZWFzZQorICAgICAgICAgICAgdmFyIHNlbGVjdGVkX3JlbGVhc2UgPSAkKCdzZWxlY3QnKS52YWwoKTsKKyAgICAgICAgICAgICQoIiNkZXNjcmlwdGlvbi0iICsgc2VsZWN0ZWRfcmVsZWFzZSkuc2hvdygpOworCisKKyAgICAgICAgICAgICQoJ3NlbGVjdCcpLmNoYW5nZShmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIHZhciBuZXdfcmVsZWFzZSA9ICQoJ3NlbGVjdCcpLnZhbCgpOworICAgICAgICAgICAgICAgICQoIi5oZWxwdGV4dCIpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCcjZGVzY3JpcHRpb24tJyArIG5ld19yZWxlYXNlKS5mYWRlSW4oKTsKKyAgICAgICAgICAgIH0pOworCisvKgkJCS8vIEhpZGUgdGhlIHByb2plY3QgcmVsZWFzZSB3aGVuIHlvdSBzZWxlY3QgYW4gYW5hbHlzaXMgcHJvamVjdAorCQkJZnVuY3Rpb24gcHJvamVjdFR5cGUoKSB7CisJCQkJaWYgKCQoImlucHV0W3R5cGU9J3JhZGlvJ106Y2hlY2tlZCIpLnZhbCgpID09ICdidWlsZCcpIHsKKwkJCQkJJCgnLnJlbGVhc2UnKS5mYWRlSW4oKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCSQoJy5yZWxlYXNlJykuZmFkZU91dCgpOworCQkJCX0KKwkJCX0KKwkJCXByb2plY3RUeXBlKCk7CisKKwkJCSQoJ2lucHV0OnJhZGlvJykuY2hhbmdlKGZ1bmN0aW9uKCl7CisJCQkJcHJvamVjdFR5cGUoKTsKKwkJCX0pOyAqLworICAgICAgICB9KTsKKyAgICA8L3NjcmlwdD4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYyMGMzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXRhaWwnIGJ1aWxkLmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU2hvd3MgdGhlIGZpbGVzIHByb2R1Y2VkIGJ5IHRoaXMgcGFja2FnZS4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIGZpbGVzICh7e3BhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50fX0pCisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJyBidWlsZC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNob3dzIHRoZSBydW50aW1lIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgcGFja2FnZS4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgUnVudGltZSBkZXBlbmRlbmNpZXMgKHt7ZGVwZW5kZW5jeV9jb3VudH19KQorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImRlcGVuZGVuY2llcyI+CisgICAgICAgICAgICB7JSBpZmVxdWFsIHJ1bnRpbWVfZGVwc3xsZW5ndGggMCAlfQorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBoYXMgbm8gcnVudGltZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGlzIDxzdHJvbmc+bm90IGluY2x1ZGVkPC9zdHJvbmc+IGluIGFueSBpbWFnZS4gVGhpcyBwYWdlIHNob3dzIHlvdSB0aGUgcHJvamVjdGVkIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGlmIHlvdSBpbmNsdWRlIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGluIGZ1dHVyZSBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0ic2l6ZWNvbCBzcGFuMiI+U2l6ZTwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CisJCQkJCQl7JSBmb3IgcnVudGltZV9kZXAgaW4gcnVudGltZV9kZXBzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3tydW50aW1lX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319ID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiBydW50aW1lX2RlcC5zaXplICE9IC0xICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfYnVpbHRfZGV0YWlsJyBidWlsZC5pZCBydW50aW1lX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnVudGltZV9kZXAubmFtZX19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cnVudGltZV9kZXAubmFtZXxmb3JtYXRfdnBhY2thZ2VfbmFtZWhlbHB9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tydW50aW1lX2RlcC52ZXJzaW9ufX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+e3tydW50aW1lX2RlcC5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX08L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZmVxdWFsICV9CisgICAgICAgICAgICB7JSBpZm5vdGVxdWFsIG90aGVyX2RlcHN8bGVuZ3RoIDAgJX0KKyAgICAgICAgICAgICAgICA8aDM+T3RoZXIgcnVudGltZSByZWxhdGlvbnNoaXBzPC9oMz4KKyAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VmVyc2lvbjwvdGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJzaXplY29sIHNwYW4yIj5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGaXZlIHJlbGF0aW9uc2hpcCB0eXBlcyBleGlzdDogcmVjb21tZW5kcywgc3VnZ2VzdHMsIHByb3ZpZGVzLCByZXBsYWNlcyBhbmQgY29uZmxpY3RzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hpcCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJCXslIGZvciBvdGhlcl9kZXAgaW4gb3RoZXJfZGVwcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7b3RoZXJfZGVwLnNpemV8Zm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzfX0gPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgb3RoZXJfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9idWlsdF9kZXRhaWwnIGJ1aWxkLmlkIG90aGVyX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3RoZXJfZGVwLm5hbWV8Zm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAudmVyc2lvbn19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InNpemVjb2wiPnt7b3RoZXJfZGVwLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3tvdGhlcl9kZXAuZGVwX3R5cGVfaGVscH19IiA+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisgICAgICAgICAgICA8L2Rpdj4gPCEtLSB0YWItcGFuZSAtLT4KKyAgICAgICAgPC9kaXY+IDwhLS0gdGFiLWNvbnRlbnQgLS0+Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGV0YWlsLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfYnVpbHRfZGV0YWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlOGNjYgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbApAQCAtMCwwICsxLDY1IEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICB7JSB3aXRoIHBhY2thZ2VGaWxlQ291bnQ9cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnQgJX0KKyAgICAgICAgPCEtLSBHZW5lcmF0ZWQgRmlsZXMgLS0+CisgICAgICAgIHslIGlmIHBhY2thZ2UuYnVpbGR0YXJnZXRsaXN0X3BhY2thZ2UuY291bnQgPT0gMCAlfQorICAgICAgICAgICAgeyMgTm90IGluY2x1ZGVkIGNhc2UgI30KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiPiA8YSBocmVmPSIjIj4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IkZpbGVzIGFkZGVkIHRvIGEgcm9vdCBmaWxlIHN5c3RlbSB3aGVuIHlvdSBpbmNsdWRlIHt7cGFja2FnZS5uYW1lfX0gaW4gYW4gaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIGZpbGVzICh7e3BhY2thZ2VGaWxlQ291bnR9fSkKKyAgICAgICAgICAgICAgICA8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+PGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcycgYnVpbGQuaWQgcGFja2FnZS5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJQcm9qZWN0ZWQgcnVudGltZSBkZXBlbmRlbmNpZXMgd2hlbiB5b3UgaW5jbHVkZSB7e3BhY2thZ2UubmFtZX19IGluIGFuIGltYWdlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWUgZGVwZW5kZW5jaWVzICh7e2RlcGVuZGVuY3lfY291bnR9fSkKKyAgICAgICAgICAgICAgICA8L2E+PC9saT4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJmaWxlcyI+CisgICAgICAgICAgICA8IS0tIFBhY2thZ2UgZmlsZSBsaXN0IG9yIGlmIGVtcHR5LCBhbGVydCBwYW5lIC0tPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZUZpbGVDb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gaXMgPHN0cm9uZz5ub3QgaW5jbHVkZWQ8L3N0cm9uZz4gaW4gYW55IGltYWdlLiBUaGlzIHBhZ2Ugc2hvd3MgeW91IHRoZSBmaWxlcyBhZGRlZCB0byBhbiBpbWFnZSByb290IGZpbGUgc3lzdGVtIGlmIHlvdSBpbmNsdWRlIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGluIGZ1dHVyZSBidWlsZHMuCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgeyUgaW5jbHVkZSAidGFibGVzb3J0Lmh0bWwiICV9CisgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJCXslIGZvciBmaWxlIGluIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icGF0aCI+e3tmaWxlLnBhdGh9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmlsZXNpemUgc2l6ZWNvbCI+e3tmaWxlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKwkJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgICAgIDwvdGFibGU+CisKKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L3N0cm9uZz4gZG9lcyBub3QgZ2VuZXJhdGUgYW55IGZpbGVzLgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLXBhbmUgYWN0aXZlIC0tPgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLWNvbnRlbnQgLS0+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIHsjIEluY2x1ZGVkIGNhc2UgI30KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWFkIHdlbGwiPgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIGluY2x1ZGVkIGluOgorICAgICAgICAgICAgICAgICAgICB7JSBmb3IgaXRhcmdldCBpbiBwYWNrYWdlLmJ1aWxkdGFyZ2V0bGlzdF9wYWNrYWdlLmFsbHxkaWN0c29ydDoidGFyZ2V0LnRhcmdldCIgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIGl0YXJnZXQudGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgZm9ybG9vcC5jb3VudGVyMCA+IDAgICV9CisgICAgICAgICAgICAgICAgICAgICAgICAsJm5ic3A7CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAge3tpdGFyZ2V0LnRhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLXBhbmUgYWN0aXZlIC0tPgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gdGFiLWNvbnRlbnQgLS0+CisgICAgICAgIHslIGVuZGlmICV9CisKKyAgICB7JSBlbmR3aXRoICV9Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9kZXRhaWxfYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNGJjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbApAQCAtMCwwICsxLDE0MiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIiAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9CisgICAgPCEtLSBmdW5jdGlvbnMgdG8gZm9ybWF0IHBhY2thZ2UgJ2luc3RhbGxlZF9wYWNrYWdlJyBhbGlhcyAtLT4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGZtdEFsaWFzSGVscChwYWNrYWdlX25hbWUsIGFsaWFzLCBob3ZlcikgeworICAgICAgICB2YXIgciA9IG51bGw7CisgICAgICAgIGlmIChhbGlhcyAhPSBudWxsICYmIGFsaWFzICE9ICcnKSB7CisgICAgICAgICAgICByID0gJzxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzICcgKyBhbGlhcyArICcmbmJzcCc7CisgICAgICAgICAgICByICs9ICc8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwJzsKKyAgICAgICAgICAgIGlmIChob3ZlcikgeworICAgICAgICAgICAgICAgIHIrPSAnIGhvdmVyLWhlbHAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcis9ICcgaGVhZGluZy1oZWxwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIgKz0gJyInOworICAgICAgICAgICAgdGl0bGUgPSBwYWNrYWdlX25hbWUgKyAnIHdhcyByZW5hbWVkIGF0IHBhY2thZ2luZyB0aW1lIGFuZCB3YXMgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFzICcgKyBhbGlhczsKKyAgICAgICAgICAgIHIgKz0gJyB0aXRsZT0iJyArIHRpdGxlICsgJyI+JzsKKyAgICAgICAgICAgIHIgKz0gJzwvaT4nOworICAgICAgICAgICAgciArPSAnPC9zcGFuPic7CisgICAgICAgICAgICBkb2N1bWVudC53cml0ZShyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICA8L3NjcmlwdD4KK3slIGVuZGJsb2NrIGV4dHJhaGVhZGNvbnRlbnQgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorICAgIHslIGlmIHRhcmdldCAlfQorICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICJ0YXJnZXQiIGJ1aWxkLmlkIHRhcmdldC5pZCAlfSI+e3t0YXJnZXQudGFyZ2V0fX08L2E+PC9saT4KKyAgICAgICAgPGxpPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fSB7JSBpZiBwYWNrYWdlLmFsaWFzICV9IGFzIHt7cGFja2FnZS5hbGlhc319eyUgZW5kaWYgJX08L2xpPgorICAgIHslIGVsc2UgJX0KKyAgICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAicGFja2FnZXMiIGJ1aWxkLmlkICV9Ij4gUGFja2FnZXMgPC9hPjwvbGk+CisgICAgICAgIDxsaT57e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX08L2xpPgorICAgIHslIGVuZGlmICV9Cit7JSBlbmRibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKworeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CisgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMSI+CisgICAgICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgICAgIHslIGJsb2NrIHRpdGxlICV9CisgICAgICAgICAgICA8aDE+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9oMT4KKyAgICAgICAgICAgIHslIGVuZGJsb2NrIHRpdGxlICV9CisgICAgICAgIDwvZGl2PiA8IS0tIHBhZ2UtaGVhZGVyIC0tPgorICAgIDwvZGl2PiA8IS0tIHJvdyBzcGFuMTEgcGFnZS1oZWFkZXIgLS0+CisKKyAgICB7JSBibG9jayB0d29jb2x1bW5zICV9CisgICAgPGRpdiBjbGFzcz0icm93IHNwYW43IHRhYmJhYmxlIj4KKyAgICAgICAgeyUgYmxvY2sgdGFiY29udGVudCAlfQorICAgICAgICB7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CisgICAgPC9kaXY+IDwhLS0gcm93IHNwYW43IC0tPgorCisgICAgPGRpdiBjbGFzcz0icm93IHNwYW40IHdlbGwiPgorICAgICAgICA8aDI+UGFja2FnZSBpbmZvcm1hdGlvbjwvaDI+CisKKyAgICAgICAgPCEtLSBpbmZvIHByZXNlbnRlZCBhcyBkZWZpbml0aW9uIGxpc3QgLS0+CisgICAgICAgIDxkbCBjbGFzcz0iaXRlbS1pbmZvIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBTaXplCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBzaXplIG9mIHRoZSBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmVjaXBlIGlzIGFic2VudCwgZmlsZXNpemUgaXMgbm90IDAKKyAgICAgICAgICAgICAgICB7JSBlbmRjb21tZW50ICV9CisgICAgICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGVfaWQgPiAwICV9CisgICAgICAgICAgICAgICAgICAgIHt7cGFja2FnZS5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0KKyAgICAgICAgICAgICAgICAgICAgeyUgaWYgdGFyZ2V0LmZpbGVfc2l6ZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgKHt7cGFja2FnZS5zaXplfG11bHRpcGx5OjEwMHxkaXZpZGU6dGFyZ2V0LmZpbGVfc2l6ZX19JSBvZiBpbmNsdWRlZCBwYWNrYWdlIHNpemUpCisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC9kZD4KKworICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIExpY2Vuc2UKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhpcyBwYWNrYWdlIGlzIGRpc3RyaWJ1dGVkIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPnt7cGFja2FnZS5saWNlbnNlfX08L2RkPgorCisgICAgICAgICAgICB7JSBjb21tZW50ICV9CisgICAgICAgICAgICAjIFJlbW92ZWQgcGVyIHJldmlldyBvbiAxLzE4LzIwMTQgdW50aWwgbGljZW5zZSBkYXRhIHBvcHVsYXRpb24KKyAgICAgICAgICAgICMgcHJvYmxlbXNlIGFyZSByZXNvbHZlZC4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMaWNlbnNlIGZpbGVzCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlBhdGggdG8gdGhlIGxpY2Vuc2UgZmlsZXMgdGhhdCBhcHBseSB0byB0aGUgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD48L2RkPgorICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgUmVjaXBlCisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhpcyBwYWNrYWdlIj48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPgorICAgICAgICAgICAgICAgIHslIGlmIHBhY2thZ2UucmVjaXBlX2lkID4gMCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPiB7e3BhY2thZ2UucmVjaXBlLm5hbWV9fSA8L2E+CisgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLm5hbWV9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2RkPgorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgUmVjaXBlIHZlcnNpb24KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGlzIHBhY2thZ2UiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3twYWNrYWdlLnJlY2lwZS52ZXJzaW9ufX08L2RkPgorCisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgTGF5ZXIKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD4KKyAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19CisgICAgICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfGZvcm1hdF9ub25lX2FuZF96ZXJvICE9ICIiICV9CisgICAgICAgICAgICAgICAgICAgIHslIGNvbW1lbnQgJX0KKyAgICAgICAgICAgICAgICAgICAgIyBSZW1vdmVkIHBlciB0ZWFtIG1lZXRpbmcgb2YgMS8yOS8yMDE0IHVudGlsCisgICAgICAgICAgICAgICAgICAgICMgZGVjaXNpb24gb24gaW5kZXggc2VhcmNoIGFsZ29yaXRobQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmciICB0YXJnZXQ9Il9ibGFuayI+CisgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXNoYXJlIGdldC1pbmZvIj48L2k+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kY29tbWVudCAlfQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5yZWNpcGUubGF5ZXJfdmVyc2lvbi5icmFuY2ggJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMYXllciBicmFuY2gKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBicmFuY2ggb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uYnJhbmNofX08L2RkPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICBMYXllciBjb21taXQKKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoaXMgcGFja2FnZSI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKworICAgICAgICAgICAgPGRkIGNsYXNzPSJpc2NvbW1pdCI+e3twYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmNvbW1pdH19PC9kZD4KKworICAgICAgICA8L2RsPgorICAgIDwvZGl2PiA8IS0tIHJvdzQgd2VsbCAtLT4KKyAgICB7JSBlbmRibG9jayB0d29jb2x1bW5zICV9Cit7JSBlbmRibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDJjYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sCkBAIC0wLDAgKzEsMTEwIEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRpdGxlICV9CisgICAgPGgxPgorICAgICAgICB7e3BhY2thZ2UuZnVsbHBhY2thZ2VzcGVjfX0KKyAgICAgICAgPHNjcmlwdD4gZm10QWxpYXNIZWxwKCJ7e3BhY2thZ2UubmFtZX19IiwgInt7cGFja2FnZS5hbGlhc319IiwgZmFsc2UpIDwvc2NyaXB0PgorICAgICAgICA8c21hbGw+KHt7dGFyZ2V0LnRhcmdldH19KTwvc21hbGw+CisgICAgPC9oMT4KK3slIGVuZGJsb2NrIHRpdGxlICV9CisKK3slIGJsb2NrIHRhYmNvbnRlbnQgJX0KKyAgICB7JSB3aXRoIHBhY2thZ2VGaWxlQ291bnQ9cGFja2FnZS5idWlsZGZpbGVsaXN0X3BhY2thZ2UuY291bnQgJX0KKyAgICB7JSBpbmNsdWRlICJwYWNrYWdlX2luY2x1ZGVkX3RhYnMuaHRtbCIgd2l0aCBhY3RpdmVfdGFiPSJkZXBlbmRlbmNpZXMiICV9CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgorICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImRlcGVuZGVuY2llcyI+CisgICAgICAgeyUgaWZub3RlcXVhbCBydW50aW1lX2RlcHN8bGVuZ3RoIDAgJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSdzaXplY29sIHNwYW4yJz5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIHJ1bnRpbWVfZGVwIGluIHJ1bnRpbWVfZGVwcyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHt7cnVudGltZV9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fSA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgcnVudGltZV9kZXAuc2l6ZSAhPSAtMSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJyBidWlsZC5pZCB0YXJnZXQuaWQgcnVudGltZV9kZXAuZGVwZW5kc19vbl9pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3J1bnRpbWVfZGVwLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+Zm10QWxpYXNIZWxwKCJ7e3J1bnRpbWVfZGVwLm5hbWV9fSIsICJ7e3J1bnRpbWVfZGVwLmFsaWFzfX0iLCB0cnVlKTwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tydW50aW1lX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3J1bnRpbWVfZGVwLnZlcnNpb259fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdzaXplY29sJz57e3J1bnRpbWVfZGVwLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGhhcyBubyBydW50aW1lIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisKKyAgICAgICAgeyUgaWZub3RlcXVhbCBvdGhlcl9kZXBzfGxlbmd0aCAwICV9CisgICAgICAgICAgICA8aDM+T3RoZXIgcnVudGltZSByZWxhdGlvbnNoaXBzPC9oMz4KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlBhY2thZ2U8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlZlcnNpb248L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSdzaXplY29sIHNwYW4yJz5TaXplPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iRml2ZSByZWxhdGlvbnNoaXAgdHlwZXMgZXhpc3Q6IHJlY29tbWVuZHMsIHN1Z2dlc3RzLCBwcm92aWRlcywgcmVwbGFjZXMgYW5kIGNvbmZsaWN0cyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hpcCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCQkJCQl7JSBmb3Igb3RoZXJfZGVwIGluIG90aGVyX2RlcHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIG90aGVyX2RlcC5pbnN0YWxsZWQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3tvdGhlcl9kZXAuc2l6ZXxmb3JtYXRfdnBhY2thZ2Vfcm93Y2xhc3N9fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWYgb3RoZXJfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIG90aGVyX2RlcC5kZXBlbmRzX29uX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdEFsaWFzSGVscCgie3tvdGhlcl9kZXAubmFtZX19Iiwie3tvdGhlcl9kZXAuYWxpYXN9fSIsIHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAudmVyc2lvbn19Jm5ic3A7PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdzaXplY29sJz57e290aGVyX2RlcC5zaXplfGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0fX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ibXV0ZWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdGhlcl9kZXAubmFtZX19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7b3RoZXJfZGVwLnZlcnNpb259fTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e290aGVyX2RlcC5kZXBfdHlwZV9kaXNwbGF5fX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7b3RoZXJfZGVwLmRlcF90eXBlX2hlbHB9fSIgPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKwkJCQkJeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVuZGlmbm90ZXF1YWwgJX0KKyAgICAgICAgPC9kaXY+IDwhLS0gZW5kIHRhYi1wYW5lIC0tPgorICAgIDwvZGl2PiA8IS0tIGVuZCB0YWIgY29udGVudCAtLT4KKyAgICB7JSBlbmR3aXRoICV9Cit7JSBlbmRibG9jayB0YWJjb250ZW50ICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhYTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9kZXRhaWwuaHRtbApAQCAtMCwwICsxLDQ0IEBACit7JSBleHRlbmRzICJwYWNrYWdlX2RldGFpbF9iYXNlLmh0bWwiICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9CisKK3slIGJsb2NrIHRpdGxlICV9CisgICAgICAgIDxoMT4KKyAgICAgICAgICAgIHt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fQorICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICBmbXRBbGlhc0hlbHAoInt7cGFja2FnZS5uYW1lfX0iLCAie3twYWNrYWdlLmFsaWFzfX0iLCBmYWxzZSkKKyAgICAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgPHNtYWxsPih7e3RhcmdldC50YXJnZXR9fSk8L3NtYWxsPgorICAgICAgICA8L2gxPgoreyUgZW5kYmxvY2sgdGl0bGUgJX0KKworeyUgYmxvY2sgdGFiY29udGVudCAlfQoreyUgd2l0aCBwYWNrYWdlRmlsZUNvdW50PXBhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50ICV9CisgICAgeyUgaW5jbHVkZSAicGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwiIHdpdGggYWN0aXZlX3RhYj0iZGV0YWlsIiAlfQorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgYWN0aXZlIiBpZD0iZmlsZXMiPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZUZpbGVDb3VudCA+IDAgJX0KKyAgICAgICAgICAgIHslIGluY2x1ZGUgInRhYmxlc29ydC5odG1sIiAlfQorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIGZpbGUgaW4gb2JqZWN0cyAlfQorICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icGF0aCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnZGlyaW5mb19maWxlcGF0aCcgYnVpbGQuaWQgdGFyZ2V0LmlkIGZpbGUucGF0aCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZpbGUucGF0aH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpbGVzaXplIHNpemVjb2wiID57e2ZpbGUuc2l6ZXxmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdH19PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisJCQkJCXslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgICA8L3RhYmxlPgorCisgICAgICAgICAgICB7JSBlbHNlICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7cGFja2FnZS5mdWxscGFja2FnZXNwZWN9fTwvc3Ryb25nPiBkb2VzIG5vdCBnZW5lcmF0ZSBhbnkgZmlsZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PiA8IS0tIGVuZCB0YWItcGFuZSAtLT4KKyAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiIGNvbnRlbnQgLS0+CisKK3slIGVuZHdpdGggJX0KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjOGI0NwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKK3slIGV4dGVuZHMgInBhY2thZ2VfZGV0YWlsX2Jhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgdGl0bGUgJX0KKyAgICAgICAgPGgxPgorICAgICAgICAgICAge3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319CisgICAgICAgICAgICA8c2NyaXB0PiBmbXRBbGlhc0hlbHAoInt7cGFja2FnZS5uYW1lfX0iLCAie3twYWNrYWdlLmFsaWFzfX0iLCBmYWxzZSkgPC9zY3JpcHQ+CisgICAgICAgICAgICA8c21hbGw+KHt7dGFyZ2V0LnRhcmdldH19KTwvc21hbGw+CisgICAgICAgIDwvaDE+Cit7JSBlbmRibG9jayB0aXRsZSAlfQorCit7JSBibG9jayB0YWJjb250ZW50ICV9CisgICAgeyUgd2l0aCBwYWNrYWdlRmlsZUNvdW50PXBhY2thZ2UuYnVpbGRmaWxlbGlzdF9wYWNrYWdlLmNvdW50ICV9CisgICAgeyUgaW5jbHVkZSAicGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwiIHdpdGggYWN0aXZlX3RhYj0icmV2ZXJzZSIgJX0KKyAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9ImJyb3VnaHQtaW4tYnkiPgorCisgICAgICAgIHslIGlmZXF1YWwgcmV2ZXJzZV9jb3VudCAwICV9CisgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3twYWNrYWdlLmZ1bGxwYWNrYWdlc3BlY319PC9zdHJvbmc+IGhhcyBubyByZXZlcnNlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIHslIGluY2x1ZGUgInRhYmxlc29ydC5odG1sIiAlfQorICAgICAgICAgICAgICAgIDx0Ym9keT4KKwkJCQkJeyUgZm9yIHJldmVyc2VfZGVwIGluIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ciB7JSBpZiByZXZlcnNlX2RlcC5zaXplICV9e3tyZXZlcnNlX2RlcC5zaXplfGZvcm1hdF92cGFja2FnZV9yb3djbGFzc319eyVlbmRpZiV9ID4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHJldmVyc2VfZGVwLnNpemUgIT0gLTEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCByZXZlcnNlX2RlcC5wYWNrYWdlX2lkICV9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmV2ZXJzZV9kZXAucGFja2FnZS5uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PmZtdEFsaWFzSGVscCgie3tyZXZlcnNlX2RlcC5wYWNrYWdlLm5hbWV9fSIsICJ7e3JldmVyc2VfZGVwLmFsaWFzfX0iLCB0cnVlKTwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXZlcnNlX2RlcC5uYW1lfGZvcm1hdF92cGFja2FnZV9uYW1laGVscH19CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmV2ZXJzZV9kZXAucGFja2FnZS52ZXJzaW9ufX0mbmJzcDs8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0nc2l6ZWNvbCc+e3tyZXZlcnNlX2RlcC5wYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSZuYnNwOzwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorCQkJCQl7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgeyUgZW5kaWZlcXVhbCAlfQorICAgICAgICA8L2Rpdj4gPCEtLSBlbmQgdGFiLXBhbmUgLS0+CisgICAgPC9kaXY+IDwhLS0gZW5kIHRhYiBjb250ZW50IC0tPgorICAgIHslIGVuZHdpdGggJX0KK3slIGVuZGJsb2NrIHRhYmNvbnRlbnQgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcGFja2FnZV9pbmNsdWRlZF90YWJzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGFhODgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3BhY2thZ2VfaW5jbHVkZWRfdGFicy5odG1sCkBAIC0wLDAgKzEsMzMgQEAKKworICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgeyUgaWYgYWN0aXZlX3RhYiA9PSAiZGV0YWlsIiAlfQorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGZpbGVzIHRoaXMgcGFja2FnZSBhZGRzIHRvIHRoZSBpbWFnZSByb290IGZpbGUgc3lzdGVtIj48L2k+CisgICAgICAgICAgICAgICAgRmlsZXMgaW4gcm9vdCBmaWxlIHN5c3RlbSAoe3twYWNrYWdlRmlsZUNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgeyUgaWYgYWN0aXZlX3RhYiA9PSAiZGVwZW5kZW5jaWVzIiAlfQorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGFja2FnZSBydW50aW1lIGRlcGVuZGVuY2llcyI+PC9pPgorICAgICAgICAgICAgICAgIFJ1bnRpbWUgZGVwZW5kZW5jaWVzICh7e2RlcGVuZGVuY3lfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICB7JSBpZiBhY3RpdmVfdGFiID09ICJyZXZlcnNlIiAlfQorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisgICAgeyUgZWxzZSAlfQorICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZSBydW50aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSBwYWNrYWdlcyBpbiB0aGlzIGltYWdlIHRoYXQgZGVwZW5kIG9uIHRoaXMgcGFja2FnZSkuIFJldmVyc2UgZGVwZW5kZW5jaWVzIHJlZmxlY3Qgb25seSB0aGUgJ2RlcGVuZHMnIGRlcGVuZGVuY3kgdHlwZSI+PC9pPgorICAgICAgICAgICAgICAgIFJldmVyc2UgcnVudGltZSBkZXBlbmRlbmNpZXMgKHt7cmV2ZXJzZV9jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzU0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3QuaHRtbApAQCAtMCwwICsxLDEzMCBAQAoreyUgZXh0ZW5kcyAiYmFzZXByb2plY3RwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy9sYXllckRlcHNNb2RhbC5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvcHJvamVjdHBhZ2UuanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpeworICAgIHZhciBjdHggPSB7CisgICAgICB0ZXN0UmVsZWFzZUNoYW5nZVVybDogInslIHVybCAneGhyX3Rlc3RyZWxlYXNlY2hhbmdlJyBwcm9qZWN0LmlkICV9IiwKKyAgICB9OworCisgICAgdHJ5IHsKKyAgICAgIHByb2plY3RQYWdlSW5pdChjdHgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGRvY3VtZW50LndyaXRlKCJTb3JyeSwgQW4gZXJyb3IgaGFzIG9jY3VycmVkIGxvYWRpbmcgdGhpcyBwYWdlIik7CisgICAgICBjb25zb2xlLndhcm4oZSk7CisgICAgfQorICB9KTsKKzwvc2NyaXB0PgorCis8ZGl2IGlkPSJjaGFuZ2UtcmVsZWFzZS1tb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSBpbiIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iY2hhbmdlLXJlbGVhc2UtbW9kYWwiIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPng8L2J1dHRvbj4KKyAgICA8aDM+Q2hhbmdpbmcgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRvIDxzcGFuIGNsYXNzPSJwcm9wb3NlZC1yZWxlYXNlLWNoYW5nZS1uYW1lIj48L3NwYW4+PC9oMz4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgIDxwPlRoZSBmb2xsb3dpbmcgYWRkZWQgbGF5ZXJzIGRvIG5vdCBleGlzdCBmb3IgPHNwYW4gY2xhc3M9InByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiPjwvc3Bhbj46IDwvcD4KKyAgICA8dWwgaWQ9ImxheWVycy10by1yZW1vdmUtbGlzdCI+CisgICAgPC91bD4KKyAgICA8cD5JZiB5b3UgY2hhbmdlIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdG8gPHNwYW4gY2xhc3M9InByb3Bvc2VkLXJlbGVhc2UtY2hhbmdlLW5hbWUiPjwvc3Bhbj4sIHRoZSBhYm92ZSBsYXllcnMgd2lsbCBiZSBkZWxldGVkIGZyb20geW91ciBhZGRlZCBsYXllcnMuPC9wPgorICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICA8YnV0dG9uIGlkPSJjaGFuZ2UtcmVsZWFzZS1hbmQtcm0tbGF5ZXJzIiBkYXRhLWRpc21pc3M9Im1vZGFsIiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkNoYW5nZSByZWxlYXNlIGFuZCBkZWxldGUgbGF5ZXJzPC9idXR0b24+CisgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+Q2FuY2VsPC9idXR0b24+CisgIDwvZGl2PgorPC9kaXY+CisKKworPGRpdiBjbGFzcz0icm93LWZsdWlkIiBpZD0icHJvamVjdC1wYWdlIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCIgaWQ9Im1hY2hpbmUtc2VjdGlvbiI+CisgICAgICA8aDM+TWFjaGluZTwvaDM+CisKKyAgICAgIDxwIGNsYXNzPSJsZWFkIj48c3BhbiBpZD0icHJvamVjdC1tYWNoaW5lLW5hbWUiPjwvc3Bhbj4gPGkgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiBpZD0iY2hhbmdlLW1hY2hpbmUtdG9nZ2xlIiBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT48L3A+CisKKyAgICAgIDxmb3JtIGlkPSJzZWxlY3QtbWFjaGluZS1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgIDxzdHJvbmc+TWFjaGluZSBjaGFuZ2VzIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGJ1aWxkIG91dGNvbWUuPC9zdHJvbmc+IFlvdSBjYW5ub3QgcmVhbGx5IGNvbXBhcmUgdGhlIGJ1aWxkcyBmb3IgdGhlIG5ldyBtYWNoaW5lIHdpdGggdGhlIHByZXZpb3VzIG9uZXMuCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgPGlucHV0IGlkPSJtYWNoaW5lLWNoYW5nZS1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIiIGRhdGEtcHJvdmlkZT0idHlwZWFoZWFkIiBkYXRhLW1pbmxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgdHlwZT0idGV4dCI+CisgICAgICAgICAgICA8YnV0dG9uIGlkPSJtYWNoaW5lLWNoYW5nZS1idG4iIGNsYXNzPSJidG4iIHR5cGU9ImJ1dHRvbiI+U2F2ZTwvYnV0dG9uPiA8YSBocmVmPSIjIiBpZD0iY2FuY2VsLW1hY2hpbmUtY2hhbmdlIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2E+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxwPjxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9IiBjbGFzcz0ibGluayI+VmlldyBjb21wYXRpYmxlIG1hY2hpbmVzPC9hPjwvcD4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CisgICAgICA8aDM+TW9zdCBidWlsdCByZWNpcGVzPC9oMz4KKworICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9Im5vLW1vc3QtYnVpbHQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGVhZCI+WW91IGhhdmVuJ3QgYnVpbHQgYW55IHJlY2lwZXMgeWV0PC9zcGFuPgorICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPjxhIGhyZWY9InslIHVybCAncHJvamVjdHRhcmdldHMnIHByb2plY3QuaWQgJX0iPkNob29zZSBhIHJlY2lwZSB0byBidWlsZDwvYT48L3A+CisgICAgICA8L2Rpdj4KKworICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCBjb25maWd1cmF0aW9uLWxpc3QiIGlkPSJmcmVxLWJ1aWxkLWxpc3QiPgorICAgICAgPC91bD4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgaWQ9ImZyZXEtYnVpbGQtYnRuIiBkaXNhYmxlZD0iZGlzYWJsZWQiPkJ1aWxkIHNlbGVjdGVkIHJlY2lwZXM8L2J1dHRvbj4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCI+CisgICAgICA8aDM+UHJvamVjdCByZWxlYXNlPC9oMz4KKworICAgICAgPHAgY2xhc3M9ImxlYWQiPjxzcGFuIGlkPSJwcm9qZWN0LXJlbGVhc2UtdGl0bGUiPjwvc3Bhbj4gPGkgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iIiBpZD0icmVsZWFzZS1jaGFuZ2UtdG9nZ2xlIiBjbGFzcz0iaWNvbi1wZW5jaWwiPjwvaT48L3A+CisKKyAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLWlubGluZSIgaWQ9ImNoYW5nZS1yZWxlYXNlLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgPHNlbGVjdD48L3NlbGVjdD4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0ibWFyZ2luLWxlZnQ6NXB4OyIgaWQ9ImNoYW5nZS1yZWxlYXNlLWJ0biI+Q2hhbmdlPC9idXR0b24+IDxhIGhyZWY9IiMiIGlkPSJjYW5jZWwtcmVsZWFzZS1jaGFuZ2UiIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYT4KKyAgICAgIDwvZm9ybT4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgPGRpdiBjbGFzcz0ic3BhbjYiPgorICAgIDxkaXYgY2xhc3M9IndlbGwgd2VsbC10cmFuc3BhcmVudCIgaWQ9ImxheWVyLWNvbnRhaW5lciI+CisgICAgICA8aDM+TGF5ZXJzIDxzcGFuIGNsYXNzPSJtdXRlZCBjb3VudGVyIj4oPHNwYW4gaWQ9InByb2plY3QtbGF5ZXJzLWNvdW50Ij48L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgPGkgZGF0YS1vcmlnaW5hbC10aXRsZT0iT3BlbkVtYmVkZGVkIG9yZ2FuaXNlcyBtZXRhZGF0YSBpbnRvIG1vZHVsZXMgY2FsbGVkICdsYXllcnMnLiBMYXllcnMgYWxsb3cgeW91IHRvIGlzb2xhdGUgZGlmZmVyZW50IHR5cGVzIG9mIGN1c3RvbWl6YXRpb25zIGZyb20gZWFjaCBvdGhlci4gPGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvY3VycmVudC9kZXYtbWFudWFsL2Rldi1tYW51YWwuaHRtbCN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnIHRhcmdldD0nX2JsYW5rJz5Nb3JlIG9uIGxheWVyczwvYT4iIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iIj48L2k+CisgICAgICA8L2gzPgorCisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBsZWFkIiBpZD0ibm8tbGF5ZXJzLWluLXByb2plY3QiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICBZb3UgbmVlZCB0byBhZGQgc29tZSBsYXllcnMuIEZvciB0aGF0IHlvdSBjYW46CisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9Ij5WaWV3IGFsbCBsYXllcnMgY29tcGF0aWJsZSB3aXRoIHRoaXMgcHJvamVjdDwvYT48L2xpPgorICAgICAgICAgIDxsaT48YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij5JbXBvcnQgYSBsYXllcjwvYT48L2xpPgorICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2Rldi1tYW51YWwvZGV2LW1hbnVhbC5odG1sI3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgYWJvdXQgbGF5ZXJzIGluIHRoZSBkb2N1bWVudGF0aW9uPC9hPjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxwPk9yIHR5cGUgYSBsYXllciBuYW1lIGJlbG93LjwvcD4KKyAgICAgIDwvZGl2PgorCisgICAgICA8Zm9ybSBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4Ij4KKyAgICAgICAgPCEtLWRpdiBjbGFzcz0iY29udHJvbC1ncm91cCBlcnJvciItLT4KKworICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1hcHBlbmQiPgorICAgICAgICAgIDxpbnB1dCBpZD0ibGF5ZXItYWRkLWlucHV0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlR5cGUgYSBsYXllciBuYW1lIiBkYXRhLW1pbmxlbmd0aD0iMSIgZGF0YS1hdXRvY29tcGxldGU9Im9mZiIgZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiIGRhdGEtc291cmNlPSIiIHR5cGU9InRleHQiPgorICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYWRkLWxheWVyLWJ0biIgY2xhc3M9ImJ0biIgZGlzYWJsZWQ+QWRkPC9idXR0b24+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImltcG9ydC1hbGVydCIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICBUb2FzdGVyIGRvZXMgbm90IGtub3cgYWJvdXQgdGhpcyBsYXllci4gUGxlYXNlIDxhIGhyZWY9IiMiPmltcG9ydCBpdDwvYT4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPHA+CisgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0bGF5ZXJzJyBwcm9qZWN0LmlkICV9IiBpZD0idmlldy1jb21wYXRpYmxlLWxheWVycyI+VmlldyBjb21wYXRpYmxlIGxheWVyczwvYT4KKyAgICAgICAgICA8aSBkYXRhLW9yaWdpbmFsLXRpdGxlPSJWaWV3IGFsbCB0aGUgbGF5ZXJzIHlvdSBjYW4gYnVpbGQgd2l0aCB0aGUgcmVsZWFzZSBzZWxlY3RlZCBmb3IgdGhpcyBwcm9qZWN0LCB3aGljaCBpcyBZb2N0byBQcm9qZWN0IG1hc3RlciIgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IiI+PC9pPgorICAgICAgICAgIHwgPGEgaHJlZj0ieyUgdXJsICdpbXBvcnRsYXllcicgcHJvamVjdC5pZCAlfSI+SW1wb3J0IGxheWVyPC9hPgorICAgICAgICA8L3A+CisgICAgICA8L2Zvcm0+CisKKyAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0ibGF5ZXJzLWluLXByb2plY3QtbGlzdCI+CisgICAgICA8L3VsPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0YnVpbGRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4MDlkZQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGJ1aWxkcy5odG1sCkBAIC0wLDAgKzEsMTAzIEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdGJ1aWxkc3BhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JSBibG9jayBleHRyYWhlYWRjb250ZW50ICV9Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS5taW4uY3NzIiB0eXBlPSd0ZXh0L2Nzcyc+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdGF0aWMvY3NzL2pxdWVyeS11aS5zdHJ1Y3R1cmUubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvc3RhdGljL2Nzcy9qcXVlcnktdWkudGhlbWUubWluLmNzcyIgdHlwZT0ndGV4dC9jc3MnPgorPHNjcmlwdCBzcmM9Ii9zdGF0aWMvanMvanF1ZXJ5LXVpLm1pbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3N0YXRpYy9qcy9maWx0ZXJzbmlwcGV0LmpzIj48L3NjcmlwdD4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIHByb2plY3RpbmZvbWFpbiAlfQorCis8c2NyaXB0PgorICAgIC8vIGluaXRpYWxpemUgdGhlIGRhdGUgcmFuZ2UgY29udHJvbHMKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgIGRhdGVfaW5pdCgnY3JlYXRlZCcsJ3t7bGFzdF9kYXRlX2Zyb219fScsJ3t7bGFzdF9kYXRlX3RvfX0nLCd7e2RhdGVNaW5fc3RhcnRlZF9vbn19Jywne3tkYXRlTWF4X3N0YXJ0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICAgICAgZGF0ZV9pbml0KCd1cGRhdGVkJywne3tsYXN0X2RhdGVfZnJvbX19Jywne3tsYXN0X2RhdGVfdG99fScsJ3t7ZGF0ZU1pbl9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZU1heF9jb21wbGV0ZWRfb259fScsJ3t7ZGF0ZXJhbmdlX3NlbGVjdGVkfX0nKTsKKyAgICB9KTsKKzwvc2NyaXB0PgorCisgICAgICA8aDI+CisgICAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gYnVpbGR7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICAgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgICBObyBidWlsZHMgZm91bmQKKyAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgIFByb2plY3QgYnVpbGRzCisgICAgICAgIHslZW5kaWYlfQorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhlYWRpbmctaGVscCIgdGl0bGU9IlRoaXMgcGFnZSBsaXN0cyBhbGwgdGhlIGJ1aWxkcyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdCI+PC9pPgorICAgICAgPC9oMj4KKworCisgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICB7JSBpZiByZXF1ZXN0LkdFVC5maWx0ZXIgb3IgcmVxdWVzdC5HRVQuc2VhcmNoICV9CisgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9Int7cmVxdWVzdC5HRVQuc2VhcmNofX0iLz57JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX08YSBocmVmPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiIGNsYXNzPSJhZGQtb24gYnRuIiB0YWJpbmRleD0iLTEiPjxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPjwvYT57JSBlbmRpZiAlfQorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2giPlNlYXJjaDwvYnV0dG9uPgorICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIGJ1aWxkczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgeyUgZWxzZSAlfQorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgPHAgY2xhc3M9ImxlYWQiPgorICAgICAgICBUaGlzIHByb2plY3QgaGFzIG5vIGJ1aWxkcy4KKyAgICAgIDwvcD4KKyAgICA8L2Rpdj4KKyAgeyUgZW5kaWYgJX0KKworIHslIGVsc2UgJX0KKworICB7JSBpbmNsdWRlICJiYXNldGFibGVfdG9wLmh0bWwiICV9CisgICAgICAgIDwhLS0gVGFibGUgZGF0YSByb3dzOyB0aGUgb3JkZXIgbmVlZHMgdG8gbWF0Y2ggdGhlIG9yZGVyIG9mICJ0YWJsZWNvbHMiIGRlZmluaXRpb25zOyBhbmQgdGhlIDx0ZCBjbGFzcyB2YWx1ZSBuZWVkcyB0byBtYXRjaCB0aGUgdGFibGVjb2xzIGNsY2xhc3MgdmFsdWUgZm9yIHNob3cvaGlkZSBidXR0b25zIHRvIHdvcmsgLS0+CisgICAgICAgIHslIGZvciBidWlsZCBpbiBvYmplY3RzICV9IHsjIGlmIHdlIGhhdmUgYSBidWlsZCwganVzdCBkaXNwbGF5IGl0ICN9CisgICAgICAgIDx0ciBjbGFzcz0iZGF0YSI+CisgICAgICAgICAgICA8dGQgY2xhc3M9Im91dGNvbWUiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkICV9Ij57JWlmIGJ1aWxkLm91dGNvbWUgPT0gYnVpbGQuU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgYnVpbGQub3V0Y29tZSA9PSBidWlsZC5GQUlMRUQlfTxpIGNsYXNzPSJpY29uLW1pbnVzLXNpZ24gZXJyb3IiPjwvaT57JWVsc2UlfXslZW5kaWYlfTwvYT4KKyAgICAgICAgICAgICAgICAgICB7JSBpZiBidWlsZC5wcm9qZWN0ICV9CisgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsgPGEgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgImNvb2tlcmxvZyIgYnVpbGQuaWQgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWRvd25sb2FkLWFsdCIgdGl0bGU9IiIgZGF0YS1vcmlnaW5hbC10aXRsZT0iRG93bmxvYWQgYnVpbGQgbG9nIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICA8dGQgY2xhc3M9InRhcmdldCI+eyUgZm9yIHQgaW4gYnVpbGQudGFyZ2V0X3NldC5hbGwgJX0gPGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPiB7e3QudGFyZ2V0fX0gPC9hPiA8YnIgLz57JSBlbmRmb3IgJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJtYWNoaW5lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5tYWNoaW5lfX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ic3RhcnRlZF9vbiI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0iPnt7YnVpbGQuc3RhcnRlZF9vbnxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29tcGxldGVkX29uIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSI+e3tidWlsZC5jb21wbGV0ZWRfb258ZGF0ZToiZC9tL3kgSDppIn19PC9hPjwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImZhaWxlZF90YXNrcyBlcnJvciI+CisgICAgICAgICAgICAgICAgeyUgcXVlcnkgYnVpbGQudGFza19idWlsZCBvdXRjb21lPTQgb3JkZXJfX2d0PTAgYXMgZXhlY3Rhc2slfQorICAgICAgICAgICAgICAgICAgICB7JSBpZiBleGVjdGFzay5jb3VudCA9PSAxICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLmlkIGV4ZWN0YXNrLjAuaWQgJX0iPnt7ZXhlY3Rhc2suMC5yZWNpcGUubmFtZX19Lnt7ZXhlY3Rhc2suMC50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgZXhlY3Rhc2suMC5pZCAlfSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIHslIGVsaWYgZXhlY3Rhc2suY291bnQgPiAxJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAidGFza3MiIGJ1aWxkLmlkICV9P2ZpbHRlcj1vdXRjb21lJTNBNCI+e3tleGVjdGFzay5jb3VudH19IHRhc2t7e2V4ZWN0YXNrLmNvdW50fHBsdXJhbGl6ZX19PC9hPgorICAgICAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImVycm9ycy5jb3VudCI+CisgICAgICAgICAgICAgICAgeyUgaWYgIGJ1aWxkLmVycm9ycy5jb3VudCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBidWlsZC5pZCAlfSNlcnJvcnMiPnt7YnVpbGQuZXJyb3JzLmNvdW50fX0gZXJyb3J7e2J1aWxkLmVycm9ycy5jb3VudHxwbHVyYWxpemV9fTwvYT4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9Indhcm5pbmdzLmNvdW50Ij57JSBpZiAgYnVpbGQud2FybmluZ3MuY291bnQgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgYnVpbGQuaWQgJX0jd2FybmluZ3MiPnt7YnVpbGQud2FybmluZ3MuY291bnR9fSB3YXJuaW5ne3tidWlsZC53YXJuaW5ncy5jb3VudHxwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aW1lIj48YSBocmVmPSJ7JSB1cmwgImJ1aWxkdGltZSIgYnVpbGQuaWQgJX0iPnt7YnVpbGQudGltZXNwZW50X3NlY29uZHN8c2VjdG9obXN9fTwvYT48L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvdXRwdXQiPgorICAgICAgICAgICAgICB7JSBpZiBidWlsZC5vdXRjb21lID09IGJ1aWxkLlNVQ0NFRURFRCAlfQorICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAiYnVpbGRkYXNoYm9hcmQiIGJ1aWxkLmlkJX0jaW1hZ2VzIj57e2ZzdHlwZXN8Z2V0X2RpY3RfdmFsdWU6YnVpbGQuaWR9fTwvYT4KKyAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIHslIGVuZGZvciAlfQorCisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGNvbmYuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdGNvbmYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzVhMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9wcm9qZWN0Y29uZi5odG1sCkBAIC0wLDAgKzEsODQ5IEBACit7JSBleHRlbmRzICJiYXNlcHJvamVjdHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KKworCit7JSBibG9jayBwcm9qZWN0aW5mb21haW4gJX0KKworPGgyPkJpdGJha2UgdmFyaWFibGVzPC9oMj4KKworICAgIDxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoxOXB4OyI+CisKKyAgICAgICAgPGRsIGNsYXNzPSJkbC12ZXJ0aWNhbCI+CisgICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUganMtY29uZmlnLXZhci1tYW5hZ2VkLW5hbWUiPkRJU1RSTzwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNob3J0IG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgdGhlIHZhcmlhYmxlIGlzIGJsYW5rLCBtZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIHdpbGwgYmUgdXNlZC4gPGJyIC8+PGEgaHJlZj0naHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURJU1RSTycgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImRpc3RybyI+e3tkaXN0cm99fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1wZW5jaWwiIGlkPSJjaGFuZ2UtZGlzdHJvLWljb24iPjwvaT4KKyAgICAgICAgICAgICAgICA8Zm9ybSBpZD0iY2hhbmdlLWRpc3Ryby1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgaWQ9ImVkaXQtZGlzdHJvLW5hbWUtZGl2IiBjbGFzcz0iY29udHJvbC1ncm91cCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJuZXctZGlzdHJvIiB2YWx1ZT0ie3tkaXN0cm99fSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iYXBwbHktY2hhbmdlLWRpc3RybyIgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIj5TYXZlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1kaXN0cm8iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1ibG9jayBlcnJvciIgaWQ9ImRpc3Ryby1lcnJvci1tZXNzYWdlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBmc3R5cGVzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ianMtY29uZmlnLXZhci1uYW1lIGpzLWNvbmZpZy12YXItbWFuYWdlZC1uYW1lIj5JTUFHRV9GU1RZUEVTPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJGb3JtYXRzIG9mIHJvb3QgZmlsZSBzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkIDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9GU1RZUEVTJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1hZ2VfZnN0eXBlcyI+e3tmc3R5cGVzfX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZmlsdGVyLWltYWdlX2ZzdHlwZXMiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2ggaW1hZ2UgdHlwZXMiIGNsYXNzPSJzcGFuNCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImFsbC1pbWFnZV9mc3R5cGVzIiBjbGFzcz0ic2Nyb2xsaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9mc3R5cGVzIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1pbWFnZV9mc3R5cGVzIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxpbmsiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+SU1BR0VfSU5TVEFMTF9hcHBlbmQ8L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSWYgeW91ciBidWlsZCBjcmVhdGVzIG1vcmUgdGhhbiBvbmUgaW1hZ2UsIHRoZSBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZCBpbiA8c3Ryb25nPmFsbCBvZiB0aGVtPC9zdHJvbmc+IDxiciAvPjxhIGhyZWY9J2h0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1JTUFHRV9JTlNUQUxMJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0iaW1hZ2VfaW5zdGFsbCJ7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZCAlfXslZWxzZSV9IGNsYXNzPSJtdXRlZCJ7JWVuZGlmJX0+eyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17e2ltYWdlX2luc3RhbGxfYXBwZW5kfX17JWVsc2UlfU5vdCBzZXR7JWVuZGlmJX08L3NwYW4+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBpZD0iY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbiI+PC9pPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXRyYXNoIiBpZD0iZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbiIgeyUgaWYgaW1hZ2VfaW5zdGFsbF9hcHBlbmQgJX17JWVsc2UlfXN0eWxlPSJkaXNwbGF5Om5vbmU7InslZW5kaWYlfT48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1pbWFnZV9pbnN0YWxsLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWJsb2NrIHNwYW40Ij5UbyBzZXQgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdG8gbW9yZSB0aGFuIG9uZSBwYWNrYWdlLCB0eXBlIHRoZSBwYWNrYWdlIG5hbWVzIHNlcGFyYXRlZCBieSBhIHNwYWNlLjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSIgaWQ9Im5ldy1pbWFnZV9pbnN0YWxsIiBwbGFjZWhvbGRlcj0iVHlwZSBvbmUgb3IgbW9yZSBwYWNrYWdlIG5hbWVzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2UtaW1hZ2VfaW5zdGFsbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgICAgIHslIGlmIHBhY2thZ2VfY2xhc3Nlc19kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+UEFDS0FHRV9DTEFTU0VTPC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJTcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YSA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItUEFDS0FHRV9DTEFTU0VTJyB0YXJnZXQ9J19ibGFuayc+UmVhZCBtb3JlIGluIHRoZSBtYW51YWw8L2E+Ij48L2k+CisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGFja2FnZV9jbGFzc2VzIj57e3BhY2thZ2VfY2xhc3Nlc319PC9zcGFuPgorICAgICAgICAgICAgICAgIDxpIGlkPSJjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24iIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9pPgorICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgUm9vdCBmaWxlIHN5c3RlbSBwYWNrYWdlIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlIGZvcm1hdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSByb290IGZpbGUgc3lzdGVtLiBPcHRpb25zIGFyZSA8Y29kZT5kZXY8L2NvZGU+LCA8Y29kZT5pcGs8L2NvZGU+IGFuZCA8Y29kZT5ycG08L2NvZGU+Ij48L2k+CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InBhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2RlYjwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX2lwazwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5wYWNrYWdlX3JwbTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBwYWNrYWdlIGZvcm1hdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJFeHRyYSBwYWNrYWdlIGZvcm1hdHMgdG8gYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfaXBrCisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biI+U2F2ZTwvYnV0dG9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsLWNoYW5nZS1wYWNrYWdlX2NsYXNzZXMiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tbGluayI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZm9ybT4KKyAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgICAgICB7JSBpZiBzZGtfbWFjaGluZV9kZWZpbmVkICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImpzLWNvbmZpZy12YXItbmFtZSBqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZSI+U0RLTUFDSElORTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcyA8YnIgLz48YSBocmVmPSdodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItU0RLTUFDSElORScgdGFyZ2V0PSdfYmxhbmsnPlJlYWQgbW9yZSBpbiB0aGUgbWFudWFsPC9hPiI+PC9pPgorICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgIDxkZCBjbGFzcz0ibGVhZCI+CisgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InNka21hY2hpbmUiPnt7c2RrX21hY2hpbmV9fTwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8aSBpZD0iY2hhbmdlLXNka21hY2hpbmUtaWNvbiIgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+CisgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImNoYW5nZS1zZGttYWNoaW5lLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNka21hY2hpbmUiIHZhbHVlPSJpNjg2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIGk2ODYKKyAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJyYWRpbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNka21hY2hpbmUiIHZhbHVlPSJ4ODZfNjQiPgorICAgICAgICAgICAgICAgICAgICAgICAgeDg2XzY0CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjEwcHg7Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFwcGx5LWNoYW5nZS1zZGttYWNoaW5lIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImNhbmNlbC1jaGFuZ2Utc2RrbWFjaGluZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKyAgICAgICAgPC9kbD4KKworICAgICAgICA8IS0tIDx1bCBjbGFzcz0idW5zdHlsZWQgY29uZmlndXJhdGlvbi1saXN0IiBpZD0iY29uZmlndmFyLWxpc3QiPiAtLT4KKyAgICAgICAgPGRsIGlkPSJjb25maWd2YXItbGlzdCI+CisgICAgICAgICAgICA8IS0tIHRoZSBhZGRlZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgaW5zZXJ0ZWQgaGVyZSAtLT4KKyAgICAgICAgPC9kbD4KKworICAgICAgICA8IS0tIHBhc3MgdGhlIGZzdHlwZXMgbGlzdCwgYmxhY2sgbGlzdCwgYW5kIGV4dGVybmFsbHkgbWFuYWdlZCB2YXJpYWJsZXMgaGVyZSAtLT4KKyAgICAgICAgeyUgZm9yIGZzdHlwZSBpbiB2YXJzX2ZzdHlwZXMgJX0KKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJqcy1jaGVja2JveC1mc3R5cGVzLWxpc3QiIHZhbHVlPSJ7e2ZzdHlwZX19Ij4KKyAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIHslIGZvciBiIGluIHZhcnNfYmxhY2tsaXN0ICV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLWJsYWNrbGlzdC1uYW1lIiB2YWx1ZT0ie3tifX0iPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZm9yIGIgaW4gdmFyc19tYW5hZ2VkICV9CisgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0ianMtY29uZmlnLW1hbmFnZWQtbmFtZSIgdmFsdWU9Int7Yn19Ij4KKyAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgICAgICA8Zm9ybSBpZD0idmFyaWFibGUtZm9ybSI+CisgICAgICAgICAgICA8ZmllbGRzZXQgc3R5bGU9InBhZGRpbmctbGVmdDowcHg7Ij4KKyAgICAgICAgICAgICAgICA8bGVnZW5kPkFkZCB2YXJpYWJsZTwvbGVnZW5kPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW4zIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MHB4OyI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuICBpZD0iYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1vcmlnaW5hbC10aXRsZT0iVmFyaWFibGUgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fubm90IGhhdmUgc3BhY2VzLCBhbmQgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRhc2hlcyI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJUeXBlIHZhcmlhYmxlIG5hbWUiIGlkPSJ2YXJpYWJsZSI+CisgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtYmxvY2sgZXJyb3IiIGlkPSJuZXctdmFyaWFibGUtZXJyb3ItbWVzc2FnZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5WYWx1ZTwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0idmFsdWUiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJUeXBlIHZhcmlhYmxlIHZhbHVlIj48cD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9ImFkZC1jb25maWd2YXItYnV0dG9uIiBjbGFzcz0iYnRuIHNhdmUiIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQ+QWRkIHZhcmlhYmxlPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYW41IGhlbHAtYmxvY2siPgorICAgICAgICAgICAgICAgICAgICA8aDU+U29tZSB2YXJpYWJsZXMgYXJlIHJlc2VydmVkIGZyb20gVG9hc3RlcjwvaDU+CisgICAgICAgICAgICAgICAgICAgIDxwPlRvYXN0ZXIgY2Fubm90IHNldCBhbnkgdmFyaWFibGVzIHRoYXQgaW1wYWN0IDEpIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBidWlsZCBzZXJ2ZXJzLAorICAgICAgICAgICAgICAgICAgICBvciAyKSB3aGVyZSBhcnRpZmFjdHMgcHJvZHVjZWQgYnkgdGhlIGJ1aWxkIGFyZSBzdG9yZWQuIFN1Y2ggdmFyaWFibGVzIGluY2x1ZGU6IDwvcD4KKyAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1CQl9ESVNLTU9OX0RJUlMiIHRhcmdldD0iX2JsYW5rIj5CQl9ESVNLTU9OX0RJUlM8L2E+PC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT48YSBocmVmPSJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy8xLjYuMS9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCN2YXItQkJfTlVNQkVSX1RIUkVBRFMiIHRhcmdldD0iX2JsYW5rIj5CQl9OVU1CRVJfVEhSRUFEUzwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPkNWU19QUk9YWV9IT1NUPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT5DVlNfUFJPWFlfUE9SVDwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLURMX0RJUiIgdGFyZ2V0PSJfYmxhbmsiPkRMX0RJUjwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1QQVJBTExFTF9NQUtFIiB0YXJnZXQ9Il9ibGFuayI+UEFSQUxMRUxfTUFLRTwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TU1RBVEVfRElSIiB0YXJnZXQ9Il9ibGFuayI+U1NUQVRFX0RJUjwvYT48L2NvZGU+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuNi4xL3JlZi1tYW51YWwvcmVmLW1hbnVhbC5odG1sI3Zhci1TU1RBVEVfTUlSUk9SUyIgdGFyZ2V0PSJfYmxhbmsiPlNTVEFURV9NSVJST1JTPC9hPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL2RvY3MvMS42LjEvcmVmLW1hbnVhbC9yZWYtbWFudWFsLmh0bWwjdmFyLVRNUERJUiIgdGFyZ2V0PSJfYmxhbmsiPlRNUERJUjwvYT48L2NvZGU+PC9wPgorICAgICAgICAgICAgICAgICAgICA8cD5QbHVzIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzOjwvcD4KKyAgICAgICAgICAgICAgICAgICAgPHA+PGNvZGU+aHR0cF9wcm94eTwvY29kZT4gPGNvZGU+ZnRwX3Byb3h5PC9jb2RlPiA8Y29kZT5odHRwc19wcm94eTwvY29kZT4gPGNvZGU+YWxsX3Byb3h5PC9jb2RlPjwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZmllbGRzZXQ+CisgICAgICAgICAgPC9mb3JtPgorICAgICAgICA8L2Rpdj4KKworICAgIDwvZGl2PgorCisgICAgPHNjcmlwdD4KKworICAgICAgICAvLyBnbG9iYWwgdmFyaWFibGVzCisgICAgICAgIHZhciBkb19yZWxvYWQ9ZmFsc2U7CisKKyAgICAgICAgLy8gdmFsaWRhdGUgbmV3IHZhcmlhYmxlIG5hbWUKKyAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVfbmV3X3ZhcmlhYmxlKCkgeworICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gJCgiaW5wdXQjdmFyaWFibGUiKS52YWwoKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CisKKyAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAgICAgICAgICAgJCgnI25ldy12YXJpYWJsZS1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisKKyAgICAgICAgICAgIHZhciBleGlzdGluZ19jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLXZhci1uYW1lJyk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZXhpc3RpbmdfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ19jb25maWd2YXJzW2ldLmlubmVySFRNTC50b1VwcGVyQ2FzZSgpID09IHZhcmlhYmxlLnRvVXBwZXJDYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIlRoaXMgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQgaW4gdGhpcyBwYWdlLCBlZGl0IGl0cyB2YWx1ZSBpbnN0ZWFkIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBibGFja2xpc3RfY29uZmlndmFycyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWNvbmZpZy1ibGFja2xpc3QtbmFtZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGJsYWNrbGlzdF9jb25maWd2YXJzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsYWNrbGlzdF9jb25maWd2YXJzW2ldLnZhbHVlLnRvVXBwZXJDYXNlKCkgPT0gdmFyaWFibGUudG9VcHBlckNhc2UoKSkgeworICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiWW91IGNhbm5vdCBlZGl0IHRoaXMgdmFyaWFibGUgaW4gVG9hc3RlciBiZWNhdXNlIGl0IGlzIHNldCBieSB0aGUgYnVpbGQgc2VydmVycyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgbWFuYWdlZF9jb25maWd2YXJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY29uZmlnLW1hbmFnZWQtbmFtZScpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG1hbmFnZWRfY29uZmlndmFycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VkX2NvbmZpZ3ZhcnNbaV0udmFsdWUudG9VcHBlckNhc2UoKSA9PSB2YXJpYWJsZS50b1VwcGVyQ2FzZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJZb3UgY2Fubm90IHNldCB0aGlzIHZhcmlhYmxlIGhlcmUuIFBsZWFzZSBzZXQgaXQgaW4gdGhlIDxhIGhyZWY9XCJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX1cIj5wcm9qZWN0IG1haW4gcGFnZTwvYT4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGJhZF9jaGFycyAgPSAvW15hLXpBLVowLTlcLV9dLy50ZXN0KHZhcmlhYmxlKTsKKyAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFyaWFibGUuaW5kZXhPZigiICIpKTsKKyAgICAgICAgICAgIHZhciBvbmx5X3NwYWNlcyA9ICgwIDwgdmFyaWFibGUubGVuZ3RoKSAmJiAoMCA9PSB2YXJpYWJsZS50cmltKCkubGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKG9ubHlfc3BhY2VzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmIChiYWRfY2hhcnMgJiYgaGFzX3NwYWNlcykgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJBIHZhbGlkIHZhcmlhYmxlIG5hbWUgY2FuIG9ubHkgaW5jbHVkZSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcywgZGFzaGVzLCBhbmQgY2Fubm90IGluY2x1ZGUgc3BhY2VzIjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFkX2NoYXJzKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIkEgdmFsaWQgdmFyaWFibGUgbmFtZSBjYW4gb25seSBpbmNsdWRlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgZGFzaGVzIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCIiICE9IGVycm9yX21zZykgeworICAgICAgICAgICAgICAgICQoJyNuZXctdmFyaWFibGUtZXJyb3ItbWVzc2FnZScpLmh0bWwoZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgKGFuZCBvbmx5IG9uZSkgZXJyb3IgY2xhc3MgYXBwZW5kCisgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZSArICIgZXJyb3IiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhcmlhYmxlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICQoIi5zYXZlIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkLWNvbmZpZ3Zhci1uYW1lLWRpdiIpOworICAgICAgICAgICAgZC5jbGFzc05hbWUgPSBkLmNsYXNzTmFtZS5yZXBsYWNlKCIgZXJyb3IiLCIiKTsKKworICAgICAgICAgICAgLy8gbm93IHNldCB0aGUgIlNhdmUiIGVuYWJsZW1lbnQgaWYgJ3ZhbHVlJyBhbHNvIHBhc3NlcworICAgICAgICAgICAgaWYgKHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkKCIuc2F2ZSIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyB2YWxpZGF0ZSBkaXN0cm8gbmFtZQorICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZV9kaXN0cm9fbmFtZSgpIHsKKyAgICAgICAgICAgICB2YXIgdmFsdWUgICAgPSAkKCJpbnB1dCNuZXctZGlzdHJvIikudmFsKCk7CisKKyAgICAgICAgICAgIC8vIHByZXN1bWVkIGlubm9jZW5jZQorICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0gIiI7CisKKyAgICAgICAgICAgIHZhciBoYXNfc3BhY2VzID0gKDAgPD0gdmFsdWUuaW5kZXhPZigiICIpKTsKKworICAgICAgICAgICAgaWYgKGhhc19zcGFjZXMpIHsKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiQSB2YWxpZCBkaXN0cm8gbmFtZSBjYW5ub3QgaW5jbHVkZSBzcGFjZXMiOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHZhbHVlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIgIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCIiICE9IGVycm9yX21zZykgeworICAgICAgICAgICAgICAgICQoJyNkaXN0cm8tZXJyb3ItbWVzc2FnZScpLnRleHQoZXJyb3JfbXNnKTsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRpc3RybyIpLmF0dHIoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKKworICAgICAgICAgICAgICAgIC8vIGFkZCBvbmUgKGFuZCBvbmx5IG9uZSkgZXJyb3IgY2xhc3MgYXBwZW5kCisgICAgICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgICAgICBkLmNsYXNzTmFtZSA9IGQuY2xhc3NOYW1lLnJlcGxhY2UoIiBlcnJvciIsIiIpOworICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUgKyAiIGVycm9yIjsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdC1kaXN0cm8tbmFtZS1kaXYiKTsKKyAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWRpc3RybyIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRlc3QgdG8gaW5zdXJlIGF0IGxlYXN0IG9uZSBGUyBUeXBlIGlzIGNoZWNrZWQKKyAgICAgICAgZnVuY3Rpb24gZW5hYmxlRnNUeXBlc1NhdmUoKSB7CisgICAgICAgICAgICB2YXIgYW55X2NoZWNrZWQgPSAwOworICAgICAgICAgICAgJCgiLmZzLWNoZWNrYm94LWZzdHlwZXM6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBhbnlfY2hlY2tlZCA9IDE7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICggMCA9PSBhbnlfY2hlY2tlZCApIHsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAkKCIjYXBwbHktY2hhbmdlLWltYWdlX2ZzdHlwZXMiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUHJlc2V0IG9yIHJlc2V0IHRoZSBQYWNrYWdlIENsYXNzIGNoZWNrYm94IGxhYmVscworICAgICAgICBmdW5jdGlvbiB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCkgeworICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMSwgI3BhY2thZ2VfY2xhc3NfMicpLmhpZGUoKTsKKyAgICAgICAgICAgIGlmICgkKCdzZWxlY3QnKS52YWwoKSA9PSAncGFja2FnZV9kZWInKSB7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMScpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMV9pbnB1dCI+IHBhY2thZ2VfaXBrJyk7CisgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NfMicpLmh0bWwoJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InBhY2thZ2VfY2xhc3NfMl9pbnB1dCI+IHBhY2thZ2VfcnBtJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJCgnc2VsZWN0JykudmFsKCkgPT0gJ3BhY2thZ2VfaXBrJykgeworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEnKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzFfaW5wdXQiPiBwYWNrYWdlX2RlYicpOworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzInKS5odG1sKCc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJwYWNrYWdlX2NsYXNzXzJfaW5wdXQiPiBwYWNrYWdlX3JwbScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCQoJ3NlbGVjdCcpLnZhbCgpID09ICdwYWNrYWdlX3JwbScpIHsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18xJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18xX2lucHV0Ij4gcGFja2FnZV9kZWInKTsKKyAgICAgICAgICAgICAgICAkKCcjcGFja2FnZV9jbGFzc18yJykuaHRtbCgnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0icGFja2FnZV9jbGFzc18yX2lucHV0Ij4gcGFja2FnZV9pcGsnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzXzEsICNwYWNrYWdlX2NsYXNzXzInKS5mYWRlSW4oMTUwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZS1hc3NlcnQgaGFuZGxlcnMgd2hlbiB0aGUgcGFnZSBpcyBzZXJ2ZWQgYW5kL29yIHJlZnJlc2hlZCB2aWEgQWpheAorICAgICAgICBmdW5jdGlvbiBzZXRFdmVudEhhbmRsZXJzRm9yRHluYW1pY0VsZW1lbnRzKCkgeworCisgICAgICAgICAgICAvLyBjaGFuZ2UgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyJykuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciBwayA9IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWU7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsID0gJCgic3BhbiNjb25maWdfdmFyX3ZhbHVlXyIrcGspLnRleHQoKTsKKyAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgICQoImlucHV0I25ldy1jb25maWdfdmFyXyIrcGspLnZhbChjdXJyZW50X3ZhbCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnLmpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhcicpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGsgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXyIrcGspLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy5qcy1pY29uLXBlbmNpbC1jb25maWdfdmFyLCAuanMtaWNvbi10cmFzaC1jb25maWdfdmFyLCAjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgiLmpzLW5ldy1jb25maWdfdmFyIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAkKCIuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkKCIuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXIiKS5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcuanMtYXBwbHktY2hhbmdlLWNvbmZpZ192YXInKS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgdmFyIHhkYXRhICAgID0gZXZ0LnRhcmdldC5hdHRyaWJ1dGVzWyJ4LWRhdGEiXS52YWx1ZS5zcGxpdCgiOiIpOworICAgICAgICAgICAgICAgIHZhciBwayAgICAgICA9IHhkYXRhWzBdOworICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9IHhkYXRhWzFdOworICAgICAgICAgICAgICAgIHZhciB2YWwgICAgICA9ICQoJyNuZXctY29uZmlnX3Zhcl8nK3BrKS52YWwoKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6IHZhcmlhYmxlKyc6Jyt2YWx9KTsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK3BrKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWNvbmZpZ192YXItZm9ybV8iK3BrKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcuanMtaWNvbi1wZW5jaWwtY29uZmlnX3ZhciwgLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciwgI2NvbmZpZ192YXJfdmFsdWVfJytwaykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIGRlbGV0ZSB2YXJpYWJsZQorICAgICAgICAgICAgJCgiLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIpLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgeGRhdGEgICAgPSBldnQudGFyZ2V0LmF0dHJpYnV0ZXNbIngtZGF0YSJdLnZhbHVlLnNwbGl0KCI6Iik7CisgICAgICAgICAgICAgICAgdmFyIHBrICAgICAgID0geGRhdGFbMF07CisKKyAgICAgICAgICAgICAgICAvLyBoaWRlIHRoZSBkYW5nbGluZyB0cmFzaCB0b29sdGlwCisgICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfdHJhc2hfJytwaykuaGlkZSgpOworCisgICAgICAgICAgICAgICAgLy8gZmFkZSBvdXQgdGhlIHZhcmlhYmxlK3ZhbHVlIGRpdiwgdGhlbiByZWZyZXNoIHRoZSB2YXJpYWJsZSBsaXN0CisgICAgICAgICAgICAgICAgJCgnI2NvbmZpZ192YXJfZW50cnlfJytwaykucGFyZW50KCkucGFyZW50KCkuZmFkZU91dCgxMDAwLCBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckRlbCI6IGV2dC50YXJnZXQuYXR0cmlidXRlc1sieC1kYXRhIl0udmFsdWV9KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSkgeworICAgICAgICAgICAgLy8gdXBkYXRlIHRhcmdldHMKKyAgICAgICAgICAgIHZhciBpOyB2YXIgb3JpZ2h0bWwgPSAiIjsKKworICAgICAgICAgICAgdmFyIGNvbmZpZ3ZhcnNfc29ydGVkID0gZGF0YS5jb25maWd2YXJzLnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIGFbMF0gPiBiWzBdfSk7CisKKyAgICAgICAgICAgIHZhciBtYW5hZ2VkX2NvbmZpZ3ZhcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1jb25maWctdmFyLW1hbmFnZWQtbmFtZScpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGhhcyBhIHNwZWNpYWwgY29udGV4dCAobm90IHVzZXIgZGVmaW5lZCkKKyAgICAgICAgICAgICAgICB2YXIgdmFyX2NvbnRleHQ9dW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsZW5ndGggPSBtYW5hZ2VkX2NvbmZpZ3ZhcnMubGVuZ3RoOyBqIDwgbGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtYW5hZ2VkX2NvbmZpZ3ZhcnNbal0uaW5uZXJIVE1MID09IGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKG1hbmFnZWRfY29uZmlndmFyc1tqXS52YWx1ZSAgICAgPT0gY29uZmlndmFyc19zb3J0ZWRbaV1bMF0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2NvbnRleHQ9J20nOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YXJfY29udGV4dCA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJzxkaXY+IDxkdD48c3BhbiBpZD0iY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciIGNsYXNzPSJqcy1jb25maWctdmFyLW5hbWUiPjwvc3Bhbj48aSBjbGFzcz0iaWNvbi10cmFzaCBqcy1pY29uLXRyYXNoLWNvbmZpZ192YXIiIGlkPSJjb25maWdfdmFyX3RyYXNoXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvaT4gPC9kdD4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8ZGQgY2xhc3M9ImxlYWQiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICA8c3BhbiBpZD0iY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPjwvc3Bhbj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIGpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnIj48L2k+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDxmb3JtIGlkPSJjaGFuZ2UtY29uZmlnX3Zhci1mb3JtXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICcgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBqcy1uZXctY29uZmlnX3ZhciIgaWQ9Im5ldy1jb25maWdfdmFyXycrY29uZmlndmFyc19zb3J0ZWRbaV1bMl0rJyIgdmFsdWU9IiI+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGpzLWFwcGx5LWNoYW5nZS1jb25maWdfdmFyIiB0eXBlPSJidXR0b24iIHgtZGF0YT0iJytjb25maWd2YXJzX3NvcnRlZFtpXVsyXSsnOicrY29uZmlndmFyc19zb3J0ZWRbaV1bMF0rJyIgZGlzYWJsZWQ+U2F2ZTwvYnV0dG9uPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1saW5rIGpzLWNhbmNlbC1jaGFuZ2UtY29uZmlnX3ZhciIgeC1kYXRhPSInK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKyciPkNhbmNlbDwvYnV0dG9uPicKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2h0bWwgKz0gJyAgICAgICAgPC9kaXY+JworICAgICAgICAgICAgICAgICAgICBvcmlnaHRtbCArPSAnICAgIDwvZm9ybT4nCisgICAgICAgICAgICAgICAgICAgIG9yaWdodG1sICs9ICc8L2RkPiA8L2Rpdj4nCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB1cGRhdGUgY29uZmlndmFycyBsaXN0IEhUTUwgZnJhbWV3b3JrCisgICAgICAgICAgICAkKCJkbCNjb25maWd2YXItbGlzdCIpLmh0bWwob3JpZ2h0bWwpOworCisgICAgICAgICAgICAvLyBpbnNlcnQgdGhlIG5hbWUvdmFsdWUgcGFpcnMgc2FmZWx5IGFzIG5vbi1IVE1MCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlndmFyc19zb3J0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl9lbnRyeV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzBdKTsKKyAgICAgICAgICAgICAgICAkKCcjY29uZmlnX3Zhcl92YWx1ZV8nK2NvbmZpZ3ZhcnNfc29ydGVkW2ldWzJdKS50ZXh0KGNvbmZpZ3ZhcnNfc29ydGVkW2ldWzFdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRoZSB0b29sdGlwcworICAgICAgICAgICAgJCgiLmpzLWljb24tdHJhc2gtY29uZmlnX3ZhciIpLmVhY2goIGZ1bmN0aW9uKCl7IHNldERlbGV0ZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworICAgICAgICAgICAgJCgiLmpzLWljb24tcGVuY2lsLWNvbmZpZ192YXIiKS5lYWNoKGZ1bmN0aW9uKCl7IHNldENoYW5nZVRvb2x0aXAoJCh0aGlzKSk7IH0pOworCisgICAgICAgICAgICAvLyByZS1hc3NlcnQgdGhlc2UgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIHNldEV2ZW50SGFuZGxlcnNGb3JEeW5hbWljRWxlbWVudHMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uRWRpdEFqYXhTdWNjZXNzKGRhdGEsIHRleHRzdGF0dXMpIHsKKyAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCJYSFIgcmV0dXJuZWQ6IiwgZGF0YSwgIigiICsgdGV4dHN0YXR1cyArICIpIik7CisgICAgICAgICAgICBpZiAoZGF0YS5lcnJvciAhPSAib2siKSB7CisgICAgICAgICAgICAgICAgYWxlcnQoImVycm9yIG9uIHJlcXVlc3Q6XG4iICsgZGF0YS5lcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBkZWxheWVkIHBhZ2UgcmVsb2FkPworICAgICAgICAgICAgaWYgKGRvX3JlbG9hZCkgeworICAgICAgICAgICAgICAgIGRvX3JlbG9hZD1mYWxzZTsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQodHJ1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVkaXRBamF4RXJyb3IoanFYSFIsIHRleHRzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICBhbGVydCgiWEhSIGVycm9yZWQ6XG4iICsgZXJyb3IgKyAiXG4oIiArIHRleHRzdGF0dXMgKyAiKSIpOworICAgICAgICAgICAgLy8gcmUtYXNzZXJ0IHRoZSBldmVudCBoYW5kbGVycworICAgICAgICB9CisKKyAgICAgICAgLyogZW5zdXJlIGNvb2tpZSBleGlzdHMgeyUgY3NyZl90b2tlbiAlfSAqLworICAgICAgICBmdW5jdGlvbiBwb3N0RWRpdEFqYXhSZXF1ZXN0KHJlcWRhdGEpIHsKKyAgICAgICAgICAgIHZhciBhamF4ID0gJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZToiUE9TVCIsCisgICAgICAgICAgICAgICAgICAgIGRhdGE6ICQucGFyYW0ocmVxZGF0YSksCisgICAgICAgICAgICAgICAgICAgIHVybDoieyUgdXJsICd4aHJfY29uZmlndmFyZWRpdCcgcHJvamVjdC5pZCV9IiwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnWC1DU1JGVG9rZW4nOiAkLmNvb2tpZSgiY3NyZnRva2VuIil9LAorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBvbkVkaXRBamF4U3VjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9uRWRpdEFqYXhFcnJvciwKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZXREZWxldGVUb29sdGlwKG9iamVjdCkgeworICAgICAgICAgICAgb2JqZWN0LnRvb2x0aXAoeyBjb250YWluZXI6ICdib2R5JywgaHRtbDogdHJ1ZSwgZGVsYXk6IHtzaG93OiA0MDB9LCB0aXRsZTogIkRlbGV0ZSIgfSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc2V0Q2hhbmdlVG9vbHRpcChvYmplY3QpIHsKKyAgICAgICAgICAgIG9iamVjdC50b29sdGlwKHsgY29udGFpbmVyOiAnYm9keScsIGh0bWw6IHRydWUsIGRlbGF5OiB7c2hvdzogNDAwfSwgdGl0bGU6ICJDaGFuZ2UiIH0pOworICAgICAgICB9CisKKyAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBSZWdpc3RlciBoYW5kbGVycyBmb3Igc3RhdGljIGVsZW1lbnRzCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICB7JSBpZiBkaXN0cm9fZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIGRpc3RybyB2YXJpYWJsZQorICAgICAgICAgICAgJCgnI2NoYW5nZS1kaXN0cm8taWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtZGlzdHJvLWljb24sICNkaXN0cm8nKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1kaXN0cm8tZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgICQoIiNuZXctZGlzdHJvIikudmFsKCAkKCcjZGlzdHJvJykudGV4dCgpICk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtZGlzdHJvJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3RybywgI2NoYW5nZS1kaXN0cm8taWNvbicpLnNob3coKTsKKworICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBhbnkgZGFuZ2xpbmcgZXJyb3Igc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgJCgnI2Rpc3Ryby1lcnJvci1tZXNzYWdlJykudGV4dCgiIik7CisgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQtZGlzdHJvLW5hbWUtZGl2Iik7CisgICAgICAgICAgICAgICAgICAgIGQuY2xhc3NOYW1lID0gZC5jbGFzc05hbWUucmVwbGFjZSgiIGVycm9yIiwiIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gdmFsaWRhdGUgbmV3IGRpc3RybyBuYW1lCisgICAgICAgICAgICAkKCJpbnB1dCNuZXctZGlzdHJvIikub24oJ2lucHV0JywgZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhbGlkYXRlX2Rpc3Ryb19uYW1lKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1kaXN0cm8nKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIC8vJCgnI3JlcG8nKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaGlnaGxpZ2h0LWdvJyk7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjbmV3LWRpc3RybycpLnZhbCgpOworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0RJU1RSTzonK25hbWV9KTsKKyAgICAgICAgICAgICAgICAkKCcjZGlzdHJvJykudGV4dChuYW1lKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWRpc3Ryby1mb3JtIikuc2xpZGVVcChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNkaXN0cm8sICNjaGFuZ2UtZGlzdHJvLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgZnN0eXBlc19kZWZpbmVkICV9CisgICAgICAgICAgICAvLyBjaGFuZ2UgSU1BR0VfRlNUWVBFUyB2YXJpYWJsZQorCisgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICQoJyNjaGFuZ2UtaW1hZ2VfZnN0eXBlcy1pY29uLCAjaW1hZ2VfZnN0eXBlcycpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgICAgIC8vIGF2b2lkIGZhbHNlIHN1YnN0cmluZyBtYXRjaGVzIGJ5IGluY2x1ZGluZyBzcGFjZSBzZXBhcmF0b3JzCisgICAgICAgICAgICAgICAgdmFyIGh0bWwgICAgICAgICA9ICIiOworICAgICAgICAgICAgICAgIHZhciBmc3R5cGVzICAgICAgPSAiICIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1hZ2VfZnN0eXBlcyIpLmlubmVySFRNTCArICIgIjsKKyAgICAgICAgICAgICAgICB2YXIgZnN0eXBlc19saXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtY2hlY2tib3gtZnN0eXBlcy1saXN0Jyk7CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBjaGVja2VkIGJveGVzIGZpcnN0CisgICAgICAgICAgICAgICAgaWYgKCIgICIgIT0gZnN0eXBlcykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZnN0eXBlc19saXN0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSBmc3R5cGVzLmluZGV4T2YoIiAiK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsiICIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIiBjaGVja2VkPSJjaGVja2VkIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD5cbic7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSB1bi1jaGVja2VkIGJveGVzIHNlY29uZAorICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBmc3R5cGVzX2xpc3QubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgID4gZnN0eXBlcy5pbmRleE9mKCIgIitmc3R5cGVzX2xpc3RbaV0udmFsdWUrIiAiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImZzLWNoZWNrYm94LWZzdHlwZXMiIHZhbHVlPSInK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnIj4nK2ZzdHlwZXNfbGlzdFtpXS52YWx1ZSsnPC9sYWJlbD5cbic7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsbC1pbWFnZV9mc3R5cGVzIikuaW5uZXJIVE1MID0gaHRtbDsKKworICAgICAgICAgICAgICAgIC8vIFdhdGNoIGVsZW1lbnRzIHRvIGRpc2FibGUgU2F2ZSB3aGVuIG5vbmUgYXJlIGNoZWNrZWQKKyAgICAgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlcyIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUZzVHlwZXNTYXZlKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIGZpbHRlciB2YWx1ZXMKKyAgICAgICAgICAgICAgICAkKCJpbnB1dCNmaWx0ZXItaW1hZ2VfZnN0eXBlcyIpLnZhbCgiIik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWZvcm0iKS5zbGlkZVVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfZnN0eXBlcywgI2NoYW5nZS1pbWFnZV9mc3R5cGVzLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2ZpbHRlci1pbWFnZV9mc3R5cGVzJykub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAgICB2YXIgdmFsVGhpcyA9ICQodGhpcykudmFsKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAkKCcjYWxsLWltYWdlX2ZzdHlwZXMgbGFiZWwnKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gJCh0aGlzKS50ZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5pbmRleE9mKHZhbFRoaXMpOworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtaW1hZ2VfZnN0eXBlcycpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgc2VsZWN0ZWQgZnN0eXBlcyBhbmQgc29ydCB0aGVtCisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXNfYXJyYXkgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ZzLWNoZWNrYm94LWZzdHlwZXMnKTsKKyAgICAgICAgICAgICAgICAkKCIuZnMtY2hlY2tib3gtZnN0eXBlczpjaGVja2VkIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgICAgICBmc3R5cGVzX2FycmF5LnB1c2goJCh0aGlzKS52YWwoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZnN0eXBlc19hcnJheS5zb3J0KCk7CisKKyAgICAgICAgICAgICAgICAvLyBub3cgbWFrZSBhIHN0cmluZyBvZiB0aGVtCisgICAgICAgICAgICAgICAgdmFyIGZzdHlwZXMgPSAnJzsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZnN0eXBlc19hcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmc3R5cGVzICs9IGZzdHlwZXNfYXJyYXlbaV0gKyAnICc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZzdHlwZXMgPSBmc3R5cGVzLnRyaW0oKTsKKworICAgICAgICAgICAgICAgIHBvc3RFZGl0QWpheFJlcXVlc3QoeyJjb25maWd2YXJDaGFuZ2UiIDogJ0lNQUdFX0ZTVFlQRVM6Jytmc3R5cGVzfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2ZzdHlwZXMnKS50ZXh0KGZzdHlwZXMpOworICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2ZzdHlwZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9mc3R5cGVzLCAjY2hhbmdlLWltYWdlX2ZzdHlwZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKworCisgICAgICAgICAgICB7JSBpZiBpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkICV9CisKKyAgICAgICAgICAgIC8vIGluaXQgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdHJhc2ggaWNvbgorICAgICAgICAgICAgc2V0RGVsZXRlVG9vbHRpcCgkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpKTsKKworICAgICAgICAgICAgLy8gY2hhbmdlIElNQUdFX0lOU1RBTExfYXBwZW5kIHZhcmlhYmxlCisgICAgICAgICAgICAkKCcjY2hhbmdlLWltYWdlX2luc3RhbGwtaWNvbicpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIHByZXNldCB0aGUgZWRpdCB2YWx1ZQorICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X3ZhbCA9ICQoInNwYW4jaW1hZ2VfaW5zdGFsbCIpLnRleHQoKS50cmltKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfdmFsID09ICJOb3Qgc2V0IikgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iIjsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGluc3VyZSB0aGVzZSBub24tZW1wdHkgdmFsdWVzIGhhdmUgc2luZ2xlIHNwYWNlIHByZWZpeAorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZhbD0iICIgKyBjdXJyZW50X3ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgJCgiaW5wdXQjbmV3LWltYWdlX2luc3RhbGwiKS52YWwoY3VycmVudF92YWwpOworCisgICAgICAgICAgICAgICAgJCgnI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24sICNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uLCAjaW1hZ2VfaW5zdGFsbCcpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLWltYWdlX2luc3RhbGwnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwsICNjaGFuZ2UtaW1hZ2VfaW5zdGFsbC1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgICAgICBpZiAoJCgic3BhbiNpbWFnZV9pbnN0YWxsIikudGV4dCgpICE9ICJOb3Qgc2V0IikgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgiI25ldy1pbWFnZV9pbnN0YWxsIikub24oJ2lucHV0JywgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS52YWwoKS50cmltKCkubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2FwcGx5LWNoYW5nZS1pbWFnZV9pbnN0YWxsJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAvLyBpbnN1cmUgdGhlc2Ugbm9uLWVtcHR5IHZhbHVlcyBoYXZlIHNpbmdsZSBzcGFjZSBwcmVmaXgKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAiICIgKyAkKCcjbmV3LWltYWdlX2luc3RhbGwnKS52YWwoKS50cmltKCk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnSU1BR0VfSU5TVEFMTF9hcHBlbmQ6Jyt2YWx1ZX0pOworICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5yZW1vdmVDbGFzcygnbXV0ZWQnKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLWltYWdlX2luc3RhbGwtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAkKCcjaW1hZ2VfaW5zdGFsbCwgI2NoYW5nZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2RlbGV0ZS1pbWFnZV9pbnN0YWxsLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWxldGVUb29sdGlwKCQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBkZWxldGUgSU1BR0VfSU5TVEFMTF9hcHBlbmQgdmFyaWFibGUgdmFsdWUKKyAgICAgICAgICAgICQoJyNkZWxldGUtaW1hZ2VfaW5zdGFsbC1pY29uJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKHRoaXMpLnRvb2x0aXAoJ2hpZGUnKTsKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdJTUFHRV9JTlNUQUxMX2FwcGVuZDonKycnfSk7CisgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5wYXJlbnQoKS5mYWRlT3V0KDEwMDAsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykuYWRkQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgICAgICAgICQoJyNpbWFnZV9pbnN0YWxsJykudGV4dCgnTm90IHNldCcpOworICAgICAgICAgICAgICAgICAgICAkKCcjZGVsZXRlLWltYWdlX2luc3RhbGwtaWNvbicpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgJCgnI2ltYWdlX2luc3RhbGwnKS5wYXJlbnQoKS5mYWRlSW4oMTAwMCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgcGFja2FnZV9jbGFzc2VzX2RlZmluZWQgJX0KKyAgICAgICAgICAgIC8vIGNoYW5nZSBQQUNLQUdFX0NMQVNTRVMgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKCcjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1pY29uLCAjcGFja2FnZV9jbGFzc2VzJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWZvcm0iKS5zbGlkZURvd24oKTsKKworICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIHB1bGxkb3duIGFuZCBjaGVja2JveGVzCisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gJCgiI3BhY2thZ2VfY2xhc3NlcyIpLnRleHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoInBhY2thZ2VfZGViIikgPT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKS5wcm9wKCdzZWxlY3RlZEluZGV4JywgMCk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBhY2thZ2VDbGFzc0NoZWNrYm94ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfaXBrIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX3JwbSIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzJfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigicGFja2FnZV9pcGsiKSA9PSAwICkgeworICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc2VzLXNlbGVjdCIpLnByb3AoJ3NlbGVjdGVkSW5kZXgnLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9kZWIiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18xX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJfcnBtIikgPiAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3BhY2thZ2VfY2xhc3NfMl9pbnB1dCIpLmF0dHIoImNoZWNrZWQiLHRydWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCJwYWNrYWdlX3JwbSIpID09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzZXMtc2VsZWN0IikucHJvcCgnc2VsZWN0ZWRJbmRleCcsIDIpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVQYWNrYWdlQ2xhc3NDaGVja2JveGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUuaW5kZXhPZigiX2RlYiIpID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQoIiNwYWNrYWdlX2NsYXNzXzFfaW5wdXQiKS5hdHRyKCJjaGVja2VkIix0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoIl9pcGsiKSA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcGFja2FnZV9jbGFzc18yX2lucHV0IikuYXR0cigiY2hlY2tlZCIsdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJCgnI2NhbmNlbC1jaGFuZ2UtcGFja2FnZV9jbGFzc2VzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXBhY2thZ2VfY2xhc3Nlcy1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3BhY2thZ2VfY2xhc3NlcywgI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtaWNvbicpLnNob3coKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCdzZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlUGFja2FnZUNsYXNzQ2hlY2tib3hlcygpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2UtcGFja2FnZV9jbGFzc2VzJykuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICB2YXIgZSAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3Nlcy1zZWxlY3QiKTsKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gZS5vcHRpb25zW2Uuc2VsZWN0ZWRJbmRleF0udGV4dDsKKworICAgICAgICAgICAgICAgIHBjMV9jaGVja2VkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhY2thZ2VfY2xhc3NfMV9pbnB1dCIpLmNoZWNrZWQ7CisgICAgICAgICAgICAgICAgcGMyX2NoZWNrZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFja2FnZV9jbGFzc18yX2lucHV0IikuY2hlY2tlZDsKKyAgICAgICAgICAgICAgICBpZiAodmFsID09ICJwYWNrYWdlX2RlYiIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMV9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfaXBrIjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjMl9jaGVja2VkKSB2YWwgPSB2YWwgKyAiIHBhY2thZ2VfcnBtIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAicGFja2FnZV9pcGsiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzFfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX2RlYiI7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYzJfY2hlY2tlZCkgdmFsID0gdmFsICsgIiBwYWNrYWdlX3JwbSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInBhY2thZ2VfcnBtIikgeworICAgICAgICAgICAgICAgICAgICBpZiAocGMxX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9kZWIiOworICAgICAgICAgICAgICAgICAgICBpZiAocGMyX2NoZWNrZWQpIHZhbCA9IHZhbCArICIgcGFja2FnZV9pcGsiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMnKS50ZXh0KHZhbCk7CisgICAgICAgICAgICAgICAgLy8kKCcjcGFja2FnZV9jbGFzc2VzJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ211dGVkJyk7CisgICAgICAgICAgICAgICAgcG9zdEVkaXRBamF4UmVxdWVzdCh7ImNvbmZpZ3ZhckNoYW5nZSIgOiAnUEFDS0FHRV9DTEFTU0VTOicrdmFsfSk7CisgICAgICAgICAgICAgICAgJCgiI2NoYW5nZS1wYWNrYWdlX2NsYXNzZXMtZm9ybSIpLnNsaWRlVXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNwYWNrYWdlX2NsYXNzZXMsICNjaGFuZ2UtcGFja2FnZV9jbGFzc2VzLWljb24nKS5zaG93KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgeyUgaWYgc2RrX21hY2hpbmVfZGVmaW5lZCAlfQorICAgICAgICAgICAgLy8gY2hhbmdlIFNES01BQ0hJTkUgdmFyaWFibGUKKyAgICAgICAgICAgICQoJyNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2RrbWFjaGluZSIpLmlubmVySFRNTDsKKyAgICAgICAgICAgICAgICB2YXIgcmFkaW9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJ3Nka21hY2hpbmUnKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmFkaW9zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJhZGlvc1tpXS5jaGVja2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYWRpb3NbaV0udmFsdWUgPT0gY3VycmVudF92YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9zW2ldLmNoZWNrZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICQoJyNjaGFuZ2Utc2RrbWFjaGluZS1pY29uLCAjc2RrbWFjaGluZScpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKCIjY2hhbmdlLXNka21hY2hpbmUtZm9ybSIpLnNsaWRlRG93bigpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNjYW5jZWwtY2hhbmdlLXNka21hY2hpbmUnKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3Nka21hY2hpbmUsICNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQoJyNhcHBseS1jaGFuZ2Utc2RrbWFjaGluZScpLmNsaWNrKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlPSIiOworICAgICAgICAgICAgICAgIHZhciByYWRpb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnc2RrbWFjaGluZScpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByYWRpb3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJhZGlvc1tpXS5jaGVja2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoZSBjaGVja2VkIHJhZGlvCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1yYWRpb3NbaV0udmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQ2hhbmdlIiA6ICdTREtNQUNISU5FOicrdmFsdWV9KTsKKyAgICAgICAgICAgICAgICAkKCcjc2RrbWFjaGluZScpLnRleHQodmFsdWUpOworICAgICAgICAgICAgICAgICQoIiNjaGFuZ2Utc2RrbWFjaGluZS1mb3JtIikuc2xpZGVVcChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3Nka21hY2hpbmUsICNjaGFuZ2Utc2RrbWFjaGluZS1pY29uJykuc2hvdygpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHslIGVuZGlmICV9CisKKworICAgICAgICAgICAgLy8gYWRkIG5ldyB2YXJpYWJsZQorICAgICAgICAgICAgJCgiYnV0dG9uI2FkZC1jb25maWd2YXItYnV0dG9uIikuY2xpY2soIGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFyaWFibGUgPSAkKCJpbnB1dCN2YXJpYWJsZSIpLnZhbCgpOworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSAgICA9ICQoImlucHV0I3ZhbHVlIikudmFsKCk7CisKKyAgICAgICAgICAgICAgICBwb3N0RWRpdEFqYXhSZXF1ZXN0KHsiY29uZmlndmFyQWRkIiA6IHZhcmlhYmxlKyc6Jyt2YWx1ZX0pOworCisgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHByZXZpb3VzIHZhbHVlcworICAgICAgICAgICAgICAgICQoImlucHV0I3ZhcmlhYmxlIikudmFsKCIiKTsKKyAgICAgICAgICAgICAgICAkKCJpbnB1dCN2YWx1ZSIpLnZhbCgiIik7CisgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBhZGQgYnV0dG9uCisgICAgICAgICAgICAgICAgJCgiLnNhdmUiKS5hdHRyKCJkaXNhYmxlZCIsImRpc2FibGVkIik7CisKKyAgICAgICAgICAgICAgICAvLyBSZWxvYWQgcGFnZSBpZiBhZG1pbi1yZW1vdmVkIGNvcmUgbWFuYWdlZCB2YWx1ZSBpcyBtYW51YWxseSBhZGRlZCBiYWNrIGluCisgICAgICAgICAgICAgICAgaWYgKDAgPD0gIiBESVNUUk8gSU1BR0VfRlNUWVBFUyBJTUFHRV9JTlNUQUxMX2FwcGVuZCBQQUNLQUdFX0NMQVNTRVMgU0RLTUFDSElORSAiLmluZGV4T2YoICIgIit2YXJpYWJsZSsiICIgKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBkZWxheWVkIHJlbG9hZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbiB3aXRoIHBvc3RFZGl0QWpheFJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgZG9fcmVsb2FkPXRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlIG5ldyB2YXJpYWJsZSBuYW1lIGFuZCB2YWx1ZQorICAgICAgICAgICAgJCgiI3ZhcmlhYmxlLCAjdmFsdWUiKS5vbignaW5wdXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZV9uZXdfdmFyaWFibGUoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gZHJhdyBhbmQgcmVnaXN0ZXIgdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kIGhhbmRsZXJzCisgICAgICAgICAgICAvLworCisgICAgICAgICAgICB2YXIgZGF0YSA9IHsKKyAgICAgICAgICAgICAgICBjb25maWd2YXJzIDogW10KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB7JSBmb3IgYyBpbiBjb25maWd2YXJzICV9CisgICAgICAgICAgICAgICAgZGF0YS5jb25maWd2YXJzLnB1c2goWyAie3tjLm5hbWV9fSIsInt7Yy52YWx1ZX19Iiwie3tjLnBrfX0iIF0pOworICAgICAgICAgICAgICAgIHslIGlmICcnICE9IHZhcnNfY29udGV4dHxnZXRfZGljdF92YWx1ZTpjLm5hbWUgJX0KKyAgICAgICAgICAgICAgICAgICAgZGF0YS52YXJzX2NvbnRleHRbICJ7e2MubmFtZX19IiBdID0gInt7dmFyc19jb250ZXh0fGdldF9kaWN0X3ZhbHVlOmMubmFtZSB9fSI7CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAvLyBkcmF3IHRoZXNlIGVsZW1lbnRzIGFuZCBhc3NlcnQgdGhlaXIgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIG9uRWRpdFBhZ2VVcGRhdGUoZGF0YSk7CisgICAgICAgIH0pOworCisgICAgPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNzdiNQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHMuaHRtbApAQCAtMCwwICsxLDc3IEBACit7JSBleHRlbmRzICJiYXNlLmh0bWwiICV9CisKK3slIGxvYWQgc3RhdGljICV9Cit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKworICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciB0b3AtYWlyIj4KKyAgICAgIDxoMT4KKyAgICAgIHslIGlmIHJlcXVlc3QuR0VULmZpbHRlciBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAwICV9CisgICAgICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHByb2plY3R7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgICAgICB7JWVsaWYgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgICAgICAgIE5vIHByb2plY3RzIGZvdW5kCisgICAgICB7JWVsc2UlfQorICAgICAgICAgIEFsbCBwcm9qZWN0cworICAgICAgeyVlbmRpZiV9CisgICAgICAgPC9oMT4KKyAgPC9kaXY+CisKKyAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSIKKyAgICAgICAgICAgICAgICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggJX0KKyAgICAgICAgICAgICAgICAgICAge3tyZXF1ZXN0LkdFVC5zZWFyY2h9fQorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCBwcm9qZWN0czwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICB7JSBlbHNlICV9IHsjIFdlIGhhdmUgYnVpbGRzIHRvIGRpc3BsYXkgI30KKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICB7JSBmb3IgbyBpbiBvYmplY3RzICV9CisgICAgPHRyIGNsYXNzPSJkYXRhIj4KKyAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0iPnt7by5uYW1lfX08L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0idXBkYXRlZCI+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0JyBvLmlkICV9Ij57e28udXBkYXRlZHxkYXRlOiJkL20veSBIOmkifX08L2E+PC90ZD4KKyAgICAgIDx0ZD4KKyAgICAgICAgeyUgaWYgby5yZWxlYXNlICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIG8uaWQgJX0jcHJvamVjdC1kZXRhaWxzIj57e28ucmVsZWFzZS5uYW1lfX08L2E+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIE5vIHJlbGVhc2UgYXZhaWxhYmxlCisgICAgICAgIHslIGVuZGlmICV9CisgICAgICA8L3RkPgorICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAncHJvamVjdCcgby5pZCAlfSNtYWNoaW5lLWRpc3RybyI+e3tvLmdldF9jdXJyZW50X21hY2hpbmVfbmFtZX19PC9hPjwvdGQ+CisgICAgICB7JSBpZiBvLmdldF9udW1iZXJfb2ZfYnVpbGRzID09IDAgJX0KKyAgICAgIDx0ZCBjbGFzcz0ibXV0ZWQiPnt7by5nZXRfbnVtYmVyX29mX2J1aWxkc319PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibG91dGNvbWUiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx0YXJnZXQiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9ImxlcnJvcnMiPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx3YXJuaW5ncyI+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGltYWdlZmlsZXMiPjwvdGQ+CisgICAgICB7JSBlbHNlICV9CisgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICdwcm9qZWN0YnVpbGRzJyBvLmlkICV9Ij57e28uZ2V0X251bWJlcl9vZl9idWlsZHN9fTwvYT48L3RkPgorICAgICAgPHRkIGNsYXNzPSJsb3V0Y29tZSI+PGEgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSI+eyVpZiBvLmdldF9sYXN0X291dGNvbWUgPT0gYnVpbGRfU1VDQ0VFREVEJX08aSBjbGFzcz0iaWNvbi1vay1zaWduIHN1Y2Nlc3MiPjwvaT57JWVsaWYgby5nZXRfbGFzdF9vdXRjb21lID09IGJ1aWxkX0ZBSUxFRCV9PGkgY2xhc3M9Imljb24tbWludXMtc2lnbiBlcnJvciI+PC9pPnslZWxzZSV9eyVlbmRpZiV9PC9hPjwvdGQ+CisgICAgICA8dGQgY2xhc3M9Imx0YXJnZXQiPjxhIGhyZWY9InslIHVybCAiYnVpbGRkYXNoYm9hcmQiIG8uZ2V0X2xhc3RfYnVpbGRfaWQgJX0iPnt7by5nZXRfbGFzdF90YXJnZXR9fSA8L2E+PC90ZD4KKyAgICAgIDx0ZCBjbGFzcz0ibGVycm9ycyI+eyUgaWYgby5nZXRfbGFzdF9lcnJvcnMgJX08YSBjbGFzcz0iZXJyb3JzLmNvdW50IGVycm9yIiBocmVmPSJ7JSB1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I2Vycm9ycyI+e3tvLmdldF9sYXN0X2Vycm9yc319IGVycm9ye3tvLmdldF9sYXN0X2Vycm9yc3xwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsd2FybmluZ3MiPnslIGlmIG8uZ2V0X2xhc3Rfd2FybmluZ3MgJX08YSBjbGFzcz0id2FybmluZ3MuY291bnQgd2FybmluZyIgaHJlZj0ieyUgdXJsICJidWlsZGRhc2hib2FyZCIgby5nZXRfbGFzdF9idWlsZF9pZCAlfSN3YXJuaW5ncyI+e3tvLmdldF9sYXN0X3dhcm5pbmdzfX0gd2FybmluZ3t7by5nZXRfbGFzdF93YXJuaW5nc3xwbHVyYWxpemV9fTwvYT57JWVuZGlmJX08L3RkPgorICAgICAgPHRkIGNsYXNzPSJsaW1hZ2VmaWxlcyI+CisgICAgICAgIHslIGlmIG8uZ2V0X2xhc3Rfb3V0Y29tZSA9PSBidWlsZF9TVUNDRUVERUQgJX0KKyAgICAgICAgPGEgaHJlZj0ieyV1cmwgImJ1aWxkZGFzaGJvYXJkIiBvLmdldF9sYXN0X2J1aWxkX2lkICV9I2ltYWdlcyI+e3tmc3R5cGVzfGdldF9kaWN0X3ZhbHVlOm8uaWR9fTwvYT4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgIDwvdGQ+CisKKyAgICAgIHslIGVuZGlmICV9CisgICAgPC90cj4KKyAgeyUgZW5kZm9yICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV9ib3R0b20uaHRtbCIgJX0KKyAgeyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKworeyUgZW5kYmxvY2sgJX0KKworCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcHJvamVjdHRvcGJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjc0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Byb2plY3R0b3BiYXIuaHRtbApAQCAtMCwwICsxLDQ3IEBACis8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIGxlYWQiIGlkPSJwcm9qZWN0LWNyZWF0ZWQtbm90aWZpY2F0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDoxNXB4OyBkaXNwbGF5Om5vbmUiPgorICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9ImFsZXJ0Ij7DlzwvYnV0dG9uPgorICBZb3VyIHByb2plY3QgPHN0cm9uZz57e3Byb2plY3QubmFtZX19PC9zdHJvbmc+IGhhcyBiZWVuIGNyZWF0ZWQuIFlvdSBjYW4gbm93IDxhIGhyZWY9InslIHVybCAncHJvamVjdG1hY2hpbmVzJyBwcm9qZWN0LmlkICV9Ij5zZWxlY3QgeW91ciB0YXJnZXQgbWFjaGluZTwvYT4gYW5kIDxhIGhyZWY9InslIHVybCAncHJvamVjdHRhcmdldHMnIHByb2plY3QuaWQgJX0iPmNob29zZSBpbWFnZSByZWNpcGVzPC9hPiB0byBidWlsZC4KKzwvZGl2PgorCis8IS0tIHByb2plY3QgbmFtZSAtLT4KKzxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPjxzcGFuIGlkPSJwcm9qZWN0LW5hbWUiPnt7cHJvamVjdC5uYW1lfX08L3NwYW4+CisgICAgPGkgY2xhc3M9Imljb24tcGVuY2lsIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSIiIGlkPSJwcm9qZWN0LWNoYW5nZS1mb3JtLXRvZ2dsZSIgdGl0bGU9IiI+PC9pPgorICA8L2gxPgorICA8Zm9ybSBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1mb3JtIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMHB4OyBkaXNwbGF5OiBub25lOyI+CisgICAgPGRpdiBjbGFzcz0iaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaHVnZSBpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1pbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSJ7e3Byb2plY3QubmFtZX19Ij4KKyAgICAgICAgPGJ1dHRvbiBpZD0icHJvamVjdC1uYW1lLWNoYW5nZS1idG4iIGNsYXNzPSJidG4gYnRuLWxhcmdlIiB0eXBlPSJidXR0b24iPlNhdmU8L2J1dHRvbj4KKyAgICAgICAgPGEgaHJlZj0iIyIgaWQ9InByb2plY3QtbmFtZS1jaGFuZ2UtY2FuY2VsIiBjbGFzcz0iYnRuIGJ0bi1sYXJnZSBidG4tbGluayI+Q2FuY2VsPC9hPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KKworPGRpdiBpZD0icHJvamVjdC10b3BiYXIiPgorICA8dWwgY2xhc3M9Im5hdiBuYXYtcGlsbHMiPgorICAgIDxsaT4KKyAgICAgIDxhIGhyZWY9InslIHVybCAncHJvamVjdGJ1aWxkcycgcHJvamVjdC5pZCAlfSI+CisgICAgICAgIEJ1aWxkcyAoPHNwYW4gY2xhc3M9InRvdGFsLWJ1aWxkcyI+MDwvc3Bhbj4pCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGkgaWQ9InRvcGJhci1jb25maWd1cmF0aW9uLXRhYiI+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3Byb2plY3QnIHByb2plY3QuaWQgJX0iPgorICAgICAgICBDb25maWd1cmF0aW9uCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGk+CisgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2ltcG9ydGxheWVyJyBwcm9qZWN0LmlkICV9Ij4KKyAgICAgICAgSW1wb3J0IGxheWVyCisgICAgICA8L2E+CisgICAgPC9saT4KKyAgICA8bGkgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPGZvcm0gY2xhc3M9ImZvcm0taW5saW5lIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTowcHg7Ij4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIGRhdGEtcGxhY2VtZW50PSJsZWZ0IiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUeXBlIHRoZSBuYW1lIG9mIG9uZSBvciBtb3JlIHJlY2lwZXMgeW91IHdhbnQgdG8gYnVpbGQsIHNlcGFyYXRlZCBieSBhIHNwYWNlLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRhc2sgYnkgYXBwZW5kaW5nIGEgc2VtaWNvbG9uIGFuZCBhIHRhc2sgbmFtZSB0byB0aGUgcmVjaXBlIG5hbWUsIGxpa2Ugc286IDxjb2RlPmJ1c3lib3g6Y2xlYW48L2NvZGU+Ij48L2k+CisgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWFwcGVuZCI+CisgICAgICAgICAgPGlucHV0IGlkPSJidWlsZC1pbnB1dCIgdHlwZT0idGV4dCIgY2xhc3M9ImlucHV0LXhsYXJnZSBpbnB1dC1sZyBidWlsZC10YXJnZXQtaW5wdXQiIHBsYWNlaG9sZGVyPSJUeXBlIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBkaXNhYmxlZD4KKyAgICAgICAgICA8YnV0dG9uIGlkPSJidWlsZC1idXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLWxhcmdlIGJ1aWxkLWJ1dHRvbiIgZGF0YS1wcm9qZWN0LWlkPSJ7e3Byb2plY3QuaWR9fSIgZGlzYWJsZWQ+QnVpbGQ8L2J1dHRvbj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Zvcm0+CisgICAgPC9saT4KKyAgPC91bD4KKzwvZGl2PgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGUuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlNDE5MgotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlLmh0bWwKQEAgLTAsMCArMSwyNDIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZGRldGFpbHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+Cis8bGk+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fSA8L2xpPgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgcGFnZWRldGFpbGluZm9tYWluICV9CisKKzwhLS0gQmVnaW4gY29udGFpbmVyIC0tPgorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjExIj4KKyAgICA8ZGl2IGNsYXNzPSJwYWdlLWhlYWRlciI+CisgICAgICAgIDxoMT57e29iamVjdC5uYW1lfX1fe3tvYmplY3QudmVyc2lvbn19PC9oMT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyb3cgc3BhbjcgdGFiYmFibGUiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjF9fSI+CisgICAgICAgICAgICA8YSBocmVmPSIjaW5mb3JtYXRpb24iIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscworICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGVfcGFja2FnZXMiIGJ1aWxkLnBrIG9iamVjdC5pZCAlfSI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwYWNrYWdlZCBvdXRwdXQgcmVzdWx0aW5nIGZyb20gYnVpbGRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgIFBhY2thZ2VzICh7e3BhY2thZ2VfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJ7e3RhYl9zdGF0ZXMuM319Ij4KKyAgICAgICAgICAgIDxhIGhyZWY9IiNkZXBlbmRlbmNpZXMiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgQnVpbGQgZGVwZW5kZW5jaWVzICh7e29iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0ie3t0YWJfc3RhdGVzLjR9fSI+CisgICAgICAgICAgICA8YSBocmVmPSIjYnJvdWdodC1pbi1ieSIgZGF0YS10b2dnbGU9InRhYiI+CisgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSByZWNpcGUgYnVpbGQtdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB0aGUgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiB0aGlzIHJlY2lwZSkiPjwvaT4KKyAgICAgICAgICAgICAgICBSZXZlcnNlIGJ1aWxkIGRlcGVuZGVuY2llcyAoe3tvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwuY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICA8L3VsPgorICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUge3t0YWJfc3RhdGVzLjF9fSIgaWQ9ImluZm9ybWF0aW9uIj4KKyAgICAgICAgICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyCisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+e3tsYXllci5uYW1lfX08L2RkPgorCisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iUGF0aCB0byB0aGUgcmVjaXBlIC5iYiBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIFJlY2lwZSBmaWxlCisgICAgICAgICAgICAgICAgPC9kdD4KKyAgICAgICAgICAgICAgICA8ZGQ+PGNvZGU+e3tvYmplY3QuZmlsZV9wYXRofX0geyUgaWYgb2JqZWN0LnBhdGhmbGFncyAlfTxpPih7e29iamVjdC5wYXRoZmxhZ3N9fSk8L2k+eyUgZW5kaWYgJX08L2NvZGU+PC9kZD4KKyAgICAgICAgICAgICAgICB7JSBpZiBsYXllcl92ZXJzaW9uLmJyYW5jaCAlfQorICAgICAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBHaXQgYnJhbmNoIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICBMYXllciBicmFuY2gKKyAgICAgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgICAgIDxkZD57e2xheWVyX3ZlcnNpb24uYnJhbmNofX08L2RkPgorICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIj48L2k+CisgICAgICAgICAgICAgICAgICAgIExheWVyIGNvbW1pdAorICAgICAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICAgICAgPGRkIGNsYXNzPSJpc2NvbW1pdCI+e3tsYXllcl92ZXJzaW9uLmNvbW1pdH19PC9kZD4KKyAgICAgICAgICAgIDwvZGw+CisKKyAgICAgICAgICAgIDxoMiBjbGFzcz0iZGV0YWlscyI+VGFza3M8L2gyPgorICAgICAgICAgICAgeyUgaWYgbm90IHRhc2tzICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L3N0cm9uZz4gZG9lcyBub3QgaGF2ZSBhbnkgdGFza3MgaW4gdGhpcyBidWlsZC4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorCQkgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgdGFzayI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgVGFzaworICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyB2YWx1ZSB0ZWxscyB5b3UgaWYgYSB0YXNrIGhhZCB0byBydW4gKGV4ZWN1dGVkKSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgdGFzayBvdXRwdXQsIG9yIGlmIHRoZSBvdXRwdXQgd2FzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayBhbmQgdGhlcmVmb3JlIHRoZSB0YXNrIGRpZG4ndCBuZWVkIHRvIHJ1biAobm90IGV4ZWN1dGVkKSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvciBmYWlsZWQuIFRoZSBjb2x1bW4gYWxzbyB0ZWxscyB5b3Ugd2h5ICdub3QgZXhlY3V0ZWQnIHRhc2tzIGRpZCBub3QgbmVlZCB0byBydW4iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE91dGNvbWUKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiBhIHRhc2sgdHJpZWQgdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycywgYW5kIHJlcG9ydHMgdGhlIHJlc3VsdDogU3VjY2VlZGVkLCBGYWlsZWQgb3IgRmlsZSBub3QgaW4gY2FjaGUiPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhY2hlIGF0dGVtcHQKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKwkJICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCisgICAgICAgICAgICAgICAgICAgIHslIGZvciB0YXNrIGluIHRhc2tzICV9CisKKyAgICAgICAgICAgICAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSA+CisKKyAgICAgICAgICAgICAgICAgICAgPHRkPjxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5vcmRlcn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay50YXNrX25hbWV9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2suZ2V0X2Rlc2NyaXB0aW9uICV9PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0iIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJ7e3Rhc2suZ2V0X2Rlc2NyaXB0aW9ufX0iPjwvaT4geyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+PGEge3sgdGFza3x0YXNrX2NvbG9yIH19IGhyZWY9InslIHVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayAlfSI+e3t0YXNrLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+PC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSB7eyB0YXNrfHRhc2tfY29sb3IgfX0gaHJlZj0ieyUgdXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrICV9Ij57e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19IDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHslIGlmIHRhc2sub3V0Y29tZSA9IHRhc2suT1VUQ09NRV9GQUlMRUQgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1kb3dubG9hZC1hbHQiIHRpdGxlPSJEb3dubG9hZCB0YXNrIGxvZyBmaWxlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgeyUgaWZub3RlcXVhbCB0YXNrLnNzdGF0ZV9yZXN1bHQgdGFzay5TU1RBVEVfTkEgJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIHt7IHRhc2t8dGFza19jb2xvciB9fSBocmVmPSJ7JSB1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGsgJX0iPnt7dGFzay5nZXRfc3N0YXRlX3Jlc3VsdF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRpZm5vdGVxdWFsICV9CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICAgICAgPC90cj4KKworICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuM319IiBpZD0iZGVwZW5kZW5jaWVzIj4KKworICAgICAgICAgICAgeyUgaWYgbm90IG9iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsICV9CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgICAgICA8c3Ryb25nPnt7b2JqZWN0Lm5hbWV9fV97e29iamVjdC52ZXJzaW9ufX08L3N0cm9uZz4gaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgeyUgZWxzZSAlfQorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlciI+CisgICAgICAgICAgICAgICAgPHRoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgICA8dGJvZHk+CisKKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIHJyIGluIG9iamVjdC5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsfGRpY3Rzb3J0OiJkZXBlbmRzX29uLm5hbWUiICV9CisgICAgICAgICAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcnIuZGVwZW5kc19vbi5wayAlfSI+e3tyci5kZXBlbmRzX29uLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByci5kZXBlbmRzX29uLnBrICV9Ij57e3JyLmRlcGVuZHNfb24udmVyc2lvbn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB7e3RhYl9zdGF0ZXMuNH19IiBpZD0iYnJvdWdodC1pbi1ieSI+CisKKyAgICAgICAgICAgIHslIGlmIG5vdCBvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGwgJX0KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPgorICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tvYmplY3QubmFtZX19X3t7b2JqZWN0LnZlcnNpb259fTwvc3Ryb25nPiBoYXMgbm8gcmV2ZXJzZSBidWlsZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiPgorICAgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgIDwvdGhlYWQ+CisgICAgICAgICAgICAgICAgPHRib2R5PgorCisgICAgICAgICAgICAgICAgICAgIHslIGZvciByciBpbiBvYmplY3Qucl9kZXBlbmRlbmNpZXNfZGVwZW5kcy5hbGx8ZGljdHNvcnQ6InJlY2lwZS5uYW1lIiAlfQorICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLnJlY2lwZS5wayAlfSI+e3tyci5yZWNpcGUubmFtZX19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJyLnJlY2lwZS5wayAlfSI+e3tyci5yZWNpcGUudmVyc2lvbn19PC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorCisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICB7JSBlbmRpZiAlfQorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICA8aDI+QWJvdXQge3tvYmplY3QubmFtZX19PC9oMj4KKyAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgIHslIGlmIG9iamVjdC5zdW1tYXJ5ICV9CisgICAgICAgICAgICA8ZHQ+U3VtbWFyeTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3Quc3VtbWFyeX19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICA8ZHQ+RGVzY3JpcHRpb248L2R0PgorICAgICAgICAgICAgPGRkPnt7b2JqZWN0LmRlc2NyaXB0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuaG9tZXBhZ2UgJX0KKyAgICAgICAgICAgIDxkdD5Ib21lcGFnZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tvYmplY3QuaG9tZXBhZ2V9fSI+e3tvYmplY3QuaG9tZXBhZ2V9fTwvYT48L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiBvYmplY3QuYnVndHJhY2tlciAlfQorICAgICAgICAgICAgPGR0PkJ1Z3RyYWNrZXI8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9Int7b2JqZWN0LmJ1Z3RyYWNrZXJ9fSI+e3tvYmplY3QuYnVndHJhY2tlcn19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIG9iamVjdC5zZWN0aW9uICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICBTZWN0aW9uCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tvYmplY3Quc2VjdGlvbn19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgb2JqZWN0LmxpY2Vuc2UgJX0KKyAgICAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgICAgIDxkZD57e29iamVjdC5saWNlbnNlfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+Cis8L2Rpdj4KKworeyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVfYnRuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjMWIyMwotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX2J0bi5odG1sCkBAIC0wLDAgKzEsOCBAQAorPGJ1dHRvbiBkYXRhLXJlY2lwZS1uYW1lPSJ7e2RhdGEubmFtZX19IiBjbGFzcz0iYnRuIGJ0bi1ibG9jayBsYXllci1leGlzdHMte3tkYXRhLmxheWVyX3ZlcnNpb24ucGt9fSBidWlsZC1yZWNpcGUtYnRuIiBzdHlsZT0iZGlzcGxheTpub25lOyBtYXJnaW4tdG9wOiA1cHg7IiA+CisgIEJ1aWxkIHJlY2lwZQorPC9idXR0b24+Cis8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWJsb2NrIGxheWVyYnRuIGxheWVyLWFkZC17e2RhdGEubGF5ZXJfdmVyc2lvbi5wa319IiBkYXRhLWxheWVyPSd7ICJpZCI6IHt7ZGF0YS5sYXllcl92ZXJzaW9uLnBrfX0sICJuYW1lIjogICJ7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0iLCAibGF5ZXJkZXRhaWx1cmwiOiAieyV1cmwgJ2xheWVyZGV0YWlscycgZXh0cmEucGlkIGRhdGEubGF5ZXJfdmVyc2lvbi5wayV9In0nIGRhdGEtZGlyZWN0aXZlPSJhZGQiPgorICA8aSBjbGFzcz0iaWNvbi1wbHVzIj48L2k+CisgIEFkZCBsYXllcgorICA8aSB0aXRsZT0iIiBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiBkYXRhLW9yaWdpbmFsLXRpdGxlPSJUbyBidWlsZCB0aGlzIHRhcmdldCwgeW91IG11c3QgZmlyc3QgYWRkIHRoZSB7e2RhdGEubGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lfX0gbGF5ZXIgdG8geW91ciBwcm9qZWN0Ij48L2k+Cis8L2J1dHRvbj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvcmVjaXBlX3BhY2thZ2VzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTg0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZV9wYWNrYWdlcy5odG1sCkBAIC0wLDAgKzEsMTIzIEBACit7JSBleHRlbmRzICJiYXNlYnVpbGRkZXRhaWxwYWdlLmh0bWwiICV9CisKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAncmVjaXBlcycgYnVpbGQucGsgJX0iPlJlY2lwZXM8L2E+PC9saT4KKzxsaT57e3JlY2lwZS5uYW1lfX1fe3tyZWNpcGUudmVyc2lvbn19IDwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPCEtLSBCZWdpbiBjb250YWluZXIgLS0+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTEiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPnt7cmVjaXBlLm5hbWV9fV97e3JlY2lwZS52ZXJzaW9ufX08L2gxPgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuNyB0YWJiYWJsZSI+CisgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXBpbGxzIj4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMSIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJCdWlsZC1yZWxhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBSZWNpcGUgZGV0YWlscworICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+CisJCQk8YSBocmVmPSIjcGFja2FnZXMtYnVpbHQiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIHRoZSByZWNpcGUiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyAoe3tvYmplY3RfY291bnR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5pZCAiMyIgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgcmVjaXBlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZXMpIj48L2k+CisgICAgICAgICAgICAgICAgQnVpbGQgZGVwZW5kZW5jaWVzICh7e3JlY2lwZS5yX2RlcGVuZGVuY2llc19yZWNpcGUuYWxsLmNvdW50fX0pCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUuaWQgIjQiICV9Ij4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHJlY2lwZSBidWlsZC10aW1lIHJldmVyc2UgZGVwZW5kZW5jaWVzIChpLmUuIHRoZSByZWNpcGVzIHRoYXQgZGVwZW5kIG9uIHRoaXMgcmVjaXBlKSI+PC9pPgorICAgICAgICAgICAgICAgIFJldmVyc2UgYnVpbGQgZGVwZW5kZW5jaWVzICh7e3JlY2lwZS5yX2RlcGVuZGVuY2llc19kZXBlbmRzLmFsbC5jb3VudH19KQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L2xpPgorICAgIDwvdWw+CisgICAgPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPgoreyMgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9InBhY2thZ2VzLWJ1aWx0IiBuYW1lPSJwYWNrYWdlcy1idWlsdCI+I30KKyAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJwYWNrYWdlcy1idWlsdCI+CisgICAgICAgICAgICB7JSBpZiBub3Qgb2JqZWN0cyBhbmQgbm90IHJlcXVlc3QuR0VULnNlYXJjaCAlfQorICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz57e3JlY2lwZS5uYW1lfX1fe3tyZWNpcGUudmVyc2lvbn19PC9zdHJvbmc+IGRvZXMgbm90IGJ1aWxkIGFueSBwYWNrYWdlcy4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICB7JSBlbGlmIG5vdCBvYmplY3RzICV9CisgICAgICAgICAgICAgICAgeyMgaGF2ZSBlbXB0eSBzZWFyY2ggcmVzdWx0cywgbm8gdGFibGUgbm9yIHBhZ2luYXRpb24gI30KKyAgICAgICAgICAgICAgICB7JSB3aXRoICJwYWNrYWdlcyIgYXMgc2VhcmNoX3doYXQgJX0KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIiAlfQorICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKworICAgICAgICAgICAgeyUgZWxzZSAlfQorCisKKyAgICAgICAgICAgICAgICB7JSB3aXRoICJwYWNrYWdlcyIgYXMgc2VhcmNoX3doYXQgJX0KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfc2VhcmNoX2hlYWRlci5odG1sIiAlfQorICAgICAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJvdGFibGUiPgorICAgICAgICAgICAgICAgIHslIGluY2x1ZGUgImRldGFpbF9zb3J0ZWRfaGVhZGVyLmh0bWwiICV9CisKKyAgICAgICAgICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKworICAgICAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLm5hbWV9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9InslIHVybCAicGFja2FnZV9idWlsdF9kZXRhaWwiIGJ1aWxkLnBrIHBhY2thZ2UucGsgJX0iPnt7cGFja2FnZS52ZXJzaW9ufX1fe3twYWNrYWdlLnJldmlzaW9ufX08L2E+PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZWNvbCI+PGEgaHJlZj0ieyUgdXJsICJwYWNrYWdlX2J1aWx0X2RldGFpbCIgYnVpbGQucGsgcGFja2FnZS5wayAlfSI+e3twYWNrYWdlLnNpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fTwvYT48L3RkPgorICAgICAgICAgICAgICAgICAgICA8L3RyPgorCisgICAgICAgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKworICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGlmIG9iamVjdHMgJX0KKyAgICAgICAgICAgICAgICA8L3Rib2R5PgorICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgICAgICB7JSBpbmNsdWRlICJkZXRhaWxfcGFnaW5hdGlvbl9ib3R0b20uaHRtbCIgJX0KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvZGl2PiB7IyB0YWItcGFuZSAjfQorICAgIDwvZGl2PiB7IyB0YWItY29udGVudCAjfQorPC9kaXY+IHsjIHNwYW43ICN9CisKKzxkaXYgY2xhc3M9InJvdyBzcGFuNCB3ZWxsIj4KKyAgICA8aDI+QWJvdXQge3tyZWNpcGUubmFtZX19PC9oMj4KKyAgICA8ZGwgY2xhc3M9Iml0ZW0taW5mbyI+CisgICAgICAgIHslIGlmIHJlY2lwZS5zdW1tYXJ5ICV9CisgICAgICAgICAgICA8ZHQ+U3VtbWFyeTwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuc3VtbWFyeX19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLmRlc2NyaXB0aW9uICV9CisgICAgICAgICAgICA8ZHQ+RGVzY3JpcHRpb248L2R0PgorICAgICAgICAgICAgPGRkPnt7cmVjaXBlLmRlc2NyaXB0aW9ufX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuaG9tZXBhZ2UgJX0KKyAgICAgICAgICAgIDxkdD5Ib21lcGFnZTwvZHQ+CisgICAgICAgICAgICA8ZGQ+PGEgaHJlZj0ie3tyZWNpcGUuaG9tZXBhZ2V9fSI+e3tyZWNpcGUuaG9tZXBhZ2V9fTwvYT48L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiByZWNpcGUuYnVndHJhY2tlciAlfQorICAgICAgICAgICAgPGR0PkJ1Z3RyYWNrZXI8L2R0PgorICAgICAgICAgICAgPGRkPjxhIGhyZWY9Int7cmVjaXBlLmJ1Z3RyYWNrZXJ9fSI+e3tyZWNpcGUuYnVndHJhY2tlcn19PC9hPjwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHJlY2lwZS5zZWN0aW9uICV9CisgICAgICAgICAgICA8ZHQ+CisgICAgICAgICAgICBTZWN0aW9uCisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQiPjwvaT4KKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+e3tyZWNpcGUuc2VjdGlvbn19PC9kZD4KKyAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgeyUgaWYgcmVjaXBlLmxpY2Vuc2UgJX0KKyAgICAgICAgICAgIDxkdD5MaWNlbnNlPC9kdD4KKyAgICAgICAgICAgIDxkZD57e3JlY2lwZS5saWNlbnNlfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+Cis8L2Rpdj4KK3slIGVuZGJsb2NrIHBhZ2VkZXRhaWxpbmZvbWFpbiAlfQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3JlY2lwZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2RhYzQzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy9yZWNpcGVzLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBsb2NhbGJyZWFkY3J1bWIgJX0KKzxsaT5SZWNpcGVzPC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi1yZWNpcGVzICV9CisgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZXMnIGJ1aWxkLnBrICV9Ij5SZWNpcGVzPC9hPjwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9Cis8ZGl2IGNsYXNzPSJzcGFuMTAiPgorPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorPGgxPgorICB7JSBpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID4gMCAgJX0KKyAgICAgIHt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR9fSByZWNpcGV7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAlfQorICAgICAgTm8gcmVjaXBlcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAgUmVjaXBlcworICB7JWVuZGlmJX0KKyA8L2gxPgorPC9kaXY+CisKK3slIGlmIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgJX0KKyAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIiBpZD0ic2VhcmNoZm9ybSI+CisgICAgICAgICAgICA8aW5wdXQgaWQ9InNlYXJjaCIgbmFtZT0ic2VhcmNoIiBjbGFzcz0iaW5wdXQteHhsYXJnZSIgdHlwZT0idGV4dCIgdmFsdWU9InslaWYgcmVxdWVzdC5HRVQuc2VhcmNoJX17e3JlcXVlc3QuR0VULnNlYXJjaH19eyVlbmRpZiV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCByZWNpcGVzPC9idXR0b24+CisgICAgICAgIDwvZm9ybT4KKyAgICAgIDwvZGl2PgorICA8L2Rpdj4KKworeyUgZWxzZSAlfQoreyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorCisgICAgeyUgZm9yIHJlY2lwZSBpbiBvYmplY3RzICV9CisKKyAgICA8dHIgY2xhc3M9ImRhdGEiPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9fbmFtZSI+CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgcmVjaXBlLnBrICV9Ij57e3JlY2lwZS5uYW1lfX08L2E+CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX192ZXJzaW9uIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0iPnt7cmVjaXBlLnZlcnNpb259fTwvYT4KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPCEtLSBEZXBlbmRzIC0tPgorICAgICAgICA8dGQgY2xhc3M9ImRlcGVuZHNfb24iPgorICAgICAgICAgICAgeyUgd2l0aCBkZXBzPXJlY2lwZV9kZXBzfGdldF9kaWN0X3ZhbHVlOnJlY2lwZS5wayAlfQorICAgICAgICAgICAgeyUgd2l0aCBjb3VudD1kZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgY291bnQgJX0KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgdGl0bGU9IjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayByZWNpcGUucGsgJX0jZGVwZW5kZW5jaWVzJz57e3JlY2lwZS5uYW1lfX08L2E+IGRlcGVuZGVuY2llcyIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gZGVwc3xkaWN0c29ydDoiZGVwZW5kc19vbi5uYW1lIiV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInJlY2lwZSIgYnVpbGQucGsgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDwhLS0gIEJyb3VnaHQgaW4gYnkgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0iZGVwZW5kc19ieSI+CisgICAgICAgICAgICB7JSB3aXRoIHJldnM9cmVjaXBlX3JldnN8Z2V0X2RpY3RfdmFsdWU6cmVjaXBlLnBrICV9CisgICAgICAgICAgICB7JSB3aXRoIGNvdW50PXJldnN8bGVuZ3RoICV9CisgICAgICAgICAgICB7JSBpZiBjb3VudCAlfQorICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICB0aXRsZT0iPGEgaHJlZj0neyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHJlY2lwZS5wayAlfSNicm91Z2h0LWluLWJ5Jz57e3JlY2lwZS5uYW1lfX08L2E+IHJldmVyc2UgZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiByZXZzfGRpY3Rzb3J0OiJyZWNpcGUubmFtZSIgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicmVjaXBlIiBidWlsZC5wayBpLnJlY2lwZS5wayAlfSc+e3tpLnJlY2lwZS5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2NvdW50fX0KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDwhLS0gUmVjaXBlIGZpbGUgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX2ZpbGUiPnt7cmVjaXBlLmZpbGVfcGF0aH19IHslIGlmIHJlY2lwZS5wYXRoZmxhZ3MgJX08aT4oe3tyZWNpcGUucGF0aGZsYWdzfX0pPC9pPnslIGVuZGlmICV9PC90ZD4KKyAgICAgICAgPCEtLSBTZWN0aW9uIC0tPgorICAgICAgICA8dGQgY2xhc3M9InJlY2lwZV9zZWN0aW9uIj57e3JlY2lwZS5zZWN0aW9ufX08L3RkPgorICAgICAgICA8IS0tIExpY2Vuc2UgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0icmVjaXBlX2xpY2Vuc2UiPnt7cmVjaXBlLmxpY2Vuc2V9fTwvdGQ+CisgICAgICAgIDwhLS0gTGF5ZXIgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiPnt7cmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZX19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciBicmFuY2ggLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fYnJhbmNoIj57e3JlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19PC90ZD4KKyAgICAgICAgPCEtLSBMYXllciBjb21taXQgLS0+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCI+CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICA8bGk+e3tyZWNpcGUubGF5ZXJfdmVyc2lvbi5jb21taXR9fTwvbGk+CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+CisKKyAgICB7JSBlbmRmb3IgJX0KKworeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQoreyUgZW5kaWYgJX0KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFibGVzb3J0Lmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhYmxlc29ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MjQ3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhYmxlc29ydC5odG1sCkBAIC0wLDAgKzEsMzggQEAKK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKzwhLS0gY29tcG9uZW50IHRvIGRpc3BsYXkgYSBnZW5lcmljIHRhYmxlIC0tPgorICAgIHslIGlmIGRpc2FibGVfc29ydCAlfQorICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIiIGlkPSJkZXRhaWxfdGFibGUiPgorICAgIDx0aGVhZD4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JWlmIHRjLmNsY2xhc3MlfXt7dGMuY2xjbGFzc319eyVlbmRpZiV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAge3t0Yy5uYW1lfX0KKyAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIHslIGVsc2UgJX0KKyAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ib3RhYmxlIj4KKyAgICA8dGhlYWQ+CisgICAgICAgIDwhLS0gVGFibGUgaGVhZGVyIHJvdzsgZ2VuZXJhdGVkIGZyb20gInRhYmxlY29scyIgZW50cnkgaW4gdGhlIGNvbnRleHQgZGljdCAtLT4KKyAgICAgICAgPHRyPgorICAgICAgICAgICAgeyUgZm9yIHRjIGluIHRhYmxlY29scyAlfQorICAgICAgICAgICAgPHRoIGNsYXNzPSJ7JWlmIHRjLmRjbGFzcyV9e3t0Yy5kY2xhc3N9fXslZW5kaWYlfSB7JWlmIHRjLmNsY2xhc3MlfXt7dGMuY2xjbGFzc319eyVlbmRpZiV9Ij4KKyAgICAgICAgICAgICAgICB7JWlmIHRjLnFoZWxwJX08aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0ie3t0Yy5xaGVscH19Ij48L2k+eyVlbmRpZiV9CisgICAgICAgICAgICAgICAgeyVpZiB0Yy5vcmRlcmZpZWxkJX0KKyAgICAgICAgICAgICAgICAgICAgPGEgeyVpZiB0Yy5vcmRlcmljb24lfSBjbGFzcz0ic29ydGVkIiB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9ImphdmFzY3JpcHQ6cmVsb2FkX3BhcmFtcyh7J3BhZ2UnOiAxLCAnb3JkZXJieScgOiAne3t0Yy5vcmRlcmZpZWxkfX0nIH0pIiA+CisgICAgICAgICAgICAgICAgICAgICAgICB7e3RjLm5hbWV9fQorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgeyVlbHNlJX0KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11dGVkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dGMubmFtZX19CisgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICB7JWVuZGlmJX0KKyAgICAgICAgICAgICAgICB7JWlmIHRjLm9yZGVyaWNvbiV9IDxpIGNsYXNzPSJpY29uLWNhcmV0LXt7dGMub3JkZXJpY29ufX0iPjwvaT57JWVuZGlmJX0KKyAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC90cj4KKyAgICA8L3RoZWFkPgorICAgIHslIGVuZGlmICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RhcmdldC5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU2YzRhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXJnZXQuaHRtbApAQCAtMCwwICsxLDE2MiBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkcGFnZS5odG1sIiAlfQoreyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0YXJnZXQudGFyZ2V0fX08L2xpPgoreyUgZW5kYmxvY2sgbG9jYWxicmVhZGNydW1iJX0KKworeyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCit7JSBibG9jayBuYXYtdGFyZ2V0ICV9CisgIHslIGZvciB0IGluIGJ1aWxkLmdldF9zb3J0ZWRfdGFyZ2V0X2xpc3QgJX0KKyAgICB7JSBpZmVxdWFsIHRhcmdldC5wayB0LnBrICV9CisgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+PGEgaHJlZj0ieyUgdXJsICd0YXJnZXQnIGJ1aWxkLnBrIHQucGsgJX0iPnt7dC50YXJnZXR9fTwvYT48bGk+CisgICAgeyUgZWxzZSAlfQorICAgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFyZ2V0JyBidWlsZC5wayB0LnBrICV9Ij57e3QudGFyZ2V0fX08L2E+PGxpPgorICAgIHslIGVuZGlmZXF1YWwgJX0KKyAgeyUgZW5kZm9yICV9Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBidWlsZGluZm9tYWluICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBzcGFuMTAiPgorICAgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgICAgICAgPGgxPgorICAgICAgICAgICAgeyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+IDAgJX0KKyAgICAgICAgICAgICAgICB7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fX0gcGFja2FnZXt7b2JqZWN0cy5wYWdpbmF0b3IuY291bnR8cGx1cmFsaXplfX0gZm91bmQKKyAgICAgICAgICAgIHslIGVsaWYgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICAgICAgICAgICAgTm8gcGFja2FnZXMgZm91bmQKKyAgICAgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgICAgICB7e3RhcmdldC50YXJnZXR9fQorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC9oMT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGNsYXNzPSJyb3ctZmx1aWQgcHVsbC1yaWdodCBzcGFuMTAiIGlkPSJuYXZUYWIiPgorICAgIDx1bCBjbGFzcz0ibmF2IG5hdi1waWxscyI+CisgICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj4KKyAgICAgICAgICAgIDxhIGhyZWY9IiN0YXJnZXQiPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik9mIGFsbCB0aGUgcGFja2FnZXMgYnVpbHQsIHRoZSBzdWJzZXQgaW5zdGFsbGVkIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlcyBpbmNsdWRlZCAoe3t0YXJnZXQucGFja2FnZV9jb3VudH19IC0ge3twYWNrYWdlc19zdW18ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fSkKKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdkaXJpbmZvJyBidWlsZC5pZCB0YXJnZXQuaWQgJX0iPgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoaXMgaW1hZ2UiPjwvaT4KKyAgICAgICAgICAgICAgICBEaXJlY3Rvcnkgc3RydWN0dXJlCisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvbGk+CisgICAgPC91bD4KKworICAgIDxkaXYgaWQ9ImltYWdlLXBhY2thZ2VzIiBjbGFzcz0idGFiLXBhbmUiPgorCisgICAgeyUgaWYgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPT0gMCAlfQorICAgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0Ij4KKyAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBuYW1lPSJzZWFyY2giIGNsYXNzPSJpbnB1dC14eGxhcmdlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCI+U2VhcmNoPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1saW5rIiBvbmNsaWNrPSJqYXZhc2NyaXB0OiQoJyNzZWFyY2gnKS52YWwoJycpO3NlYXJjaGZvcm0uc3VibWl0KCkiPlNob3cgYWxsIHBhY2thZ2VzPC9idXR0b24+CisgICAgICAgICAgICA8L2Zvcm0+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisKKyAgICB7JSBlbHNlICV9CisgICAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX3RvcC5odG1sIiAlfQorICAgIHslIGZvciBwYWNrYWdlIGluIG9iamVjdHMgJX0KKyAgICA8dHI+CisgICAgICB7IyBvcmRlciBvZiB0aGUgdGFibGUgZGF0YSBtdXN0IG1hdGNoIHRoZSBjb2x1bW5zIGRlZmluZWQgaW4gdGVtcGxhdGUncyBjb250ZXh0IHRhYmxlY29scyAgI30KKyAgICAgICAgPHRkIGNsYXNzPSJwYWNrYWdlX25hbWUiPgorICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcgYnVpbGQuaWQgdGFyZ2V0LmlkIHBhY2thZ2UuaWQgJX0iPgorICAgICAgICAgICAge3twYWNrYWdlLm5hbWV9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgaWYgcGFja2FnZS5pbnN0YWxsZWRfbmFtZSBhbmQgcGFja2FnZS5uYW1lICE9IHBhY2thZ2UuaW5zdGFsbGVkX25hbWUgJX0KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdXRlZCI+IGFzIHt7cGFja2FnZS5pbnN0YWxsZWRfbmFtZX19PC9zcGFuPgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ne3twYWNrYWdlLm5hbWV8YWRkOiIgd2FzIHJlbmFtZWQgYXQgcGFja2FnaW5nIHRpbWUgYW5kIHdhcyBpbnN0YWxsZWQgaW4geW91ciBpbWFnZSBhcyAifGFkZDpwYWNrYWdlLmluc3RhbGxlZF9uYW1lfX0nPjwvaT4KKyAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0icGFja2FnZV92ZXJzaW9uIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Ij4KKyAgICAgICAgICAgIHt7cGFja2FnZS52ZXJzaW9ufGZpbHRlcmVkX3BhY2thZ2V2ZXJzaW9uOnBhY2thZ2UucmV2aXNpb259fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxpY2Vuc2UiPgorICAgICAgICAgICAge3twYWNrYWdlLmxpY2Vuc2V9fQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9InNpemUgc2l6ZWNvbCI+CisgICAgICAgICAgICB7e3BhY2thZ2Uuc2l6ZXxmaWx0ZXJlZF9pbnN0YWxsZWRzaXplOnBhY2thZ2UuaW5zdGFsbGVkX3NpemV8ZmlsdGVyZWRfZmlsZXNpemVmb3JtYXR9fQorICAgICAgICA8L3RkPgorCisgICAgICAgIDx0ZCBjbGFzcz0ic2l6ZV9vdmVyX3RvdGFsIHNpemVjb2wiPgorICAgICAgICAgICAge3twYWNrYWdlfGZpbHRlcl9zaXplb3ZlcnRvdGFsOnBhY2thZ2VzX3N1bX19CisgICAgICAgIDwvdGQ+CisgICAgICAgPHRkIGNsYXNzPSJkZXBlbmRzIj4KKyAgICAgICAgICAgIHslIHdpdGggZGVwcz1wYWNrYWdlLnJ1bnRpbWVfZGVwZW5kZW5jaWVzICV9CisgICAgICAgICAgICB7JSB3aXRoIGRlcHNfY291bnQ9ZGVwc3xsZW5ndGggJX0KKyAgICAgICAgICAgIHslIGlmIGRlcHNfY291bnQgPiAwICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzIiBidWlsZC5pZCB0YXJnZXQuaWQgcGFja2FnZS5pZCAlfSc+e3twYWNrYWdlLm5hbWV9fTwvYT4gZGVwZW5kZW5jaWVzIgorICAgICAgICAgICAgICAgIGRhdGEtY29udGVudD0iPHVsIGNsYXNzPSd1bnN0eWxlZCc+CisgICAgICAgICAgICAgICAgICB7JSBmb3IgaSBpbiBkZXBzfGRpY3Rzb3J0OidkZXBlbmRzX29uLm5hbWUnICV9CisgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfZGV0YWlsIiBidWlsZC5wayB0YXJnZXQuaWQgaS5kZXBlbmRzX29uLnBrICV9Jz57e2kuZGVwZW5kc19vbi5uYW1lfX08L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e2RlcHNfY291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJicm91Z2h0X2luX2J5Ij4KKyAgICAgICAgICAgIHslIHdpdGggcmRlcHM9cGFja2FnZS5yZXZlcnNlX3J1bnRpbWVfZGVwZW5kZW5jaWVzICV9CisgICAgICAgICAgICB7JSB3aXRoIHJkZXBzX2NvdW50PXJkZXBzfGxlbmd0aCAlfQorICAgICAgICAgICAgeyUgaWYgcmRlcHNfY291bnQgPiAwICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgIHRpdGxlPSI8YSBocmVmPSd7JSB1cmwgInBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMiIGJ1aWxkLmlkIHRhcmdldC5pZCBwYWNrYWdlLmlkICV9Jz57e3BhY2thZ2UubmFtZX19PC9hPiByZXZlcnNlIGRlcGVuZGVuY2llcyIKKyAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQ9Ijx1bCBjbGFzcz0ndW5zdHlsZWQnPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIGkgaW4gcmRlcHN8ZGljdHNvcnQ6J3BhY2thZ2UubmFtZScgJX0KKyAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9J3slIHVybCAicGFja2FnZV9pbmNsdWRlZF9kZXRhaWwiIGJ1aWxkLmlkIHRhcmdldC5pZCBpLnBhY2thZ2UuaWQgJX0nPnt7aS5wYWNrYWdlLm5hbWV9fTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC91bD4iPgorICAgICAgICAgICAgICAgIHt7cmRlcHNfY291bnR9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUubmFtZSB9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+CisgICAgICAgICAgICB7JSBpZiBwYWNrYWdlLnJlY2lwZS52ZXJzaW9uICV9CisgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ3JlY2lwZScgYnVpbGQuaWQgcGFja2FnZS5yZWNpcGVfaWQgJX0iPgorICAgICAgICAgICAge3sgcGFja2FnZS5yZWNpcGUudmVyc2lvbiB9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgPC90ZD4KKyAgICAgICAgPHRkIGNsYXNzPSJsYXllcl9uYW1lIj4KKyAgICAgICAgICAgIHt7IHBhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSB9fQorICAgICAgICA8L3RkPgorICAgICAgICA8dGQgY2xhc3M9ImxheWVyX2JyYW5jaCI+CisgICAgICAgICAgICB7eyBwYWNrYWdlLnJlY2lwZS5sYXllcl92ZXJzaW9uLmJyYW5jaH19CisgICAgICAgIDwvdGQ+CisgICAgICAgIDx0ZCBjbGFzcz0ibGF5ZXJfY29tbWl0Ij4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJidG4iCisgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50PSI8dWwgY2xhc3M9J3Vuc3R5bGVkJz4KKyAgICAgICAgICAgICAgICAgIDxsaT57e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fX08L2xpPgorICAgICAgICAgICAgICAgIDwvdWw+Ij4KKyAgICAgICAgICAgICAgICB7e3BhY2thZ2UucmVjaXBlLmxheWVyX3ZlcnNpb24uY29tbWl0fHRydW5jYXRlY2hhcnM6MTN9fQorICAgICAgICAgICAgPC9hPgorICAgICAgICA8L3RkPgorICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JSBpbmNsdWRlICJiYXNldGFibGVfYm90dG9tLmh0bWwiICV9CisgICAgeyUgZW5kaWYgJX0KKyAgICA8L2Rpdj4gPCEtLSB0YWJwYW5lIC0tPgorPC9kaXY+IDwhLS1zcGFuIDEwLS0+Cit7JSBlbmRibG9jayBidWlsZGluZm9tYWluICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdGFzay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTA5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2suaHRtbApAQCAtMCwwICsxLDI2OSBAQAoreyUgZXh0ZW5kcyAiYmFzZWJ1aWxkZGV0YWlscGFnZS5odG1sIiAlfQorCit7JSBsb2FkIHByb2plY3R0YWdzICV9Cit7JSBsb2FkIGh1bWFuaXplICV9CisKK3slIGJsb2NrIGxvY2FsYnJlYWRjcnVtYiAlfQorPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorPGxpPnt7dGFzay5yZWNpcGUubmFtZX19X3t7dGFzay5yZWNpcGUudmVyc2lvbn19IHt7dGFzay50YXNrX25hbWV9fTwvbGk+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBwYWdlZGV0YWlsaW5mb21haW4gJX0KKworPGRpdiBjbGFzcz0icm93IHNwYW4xMSI+CisgICAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICAgICAgICA8aDE+PGEgaHJlZj0ieyV1cmwgJ3JlY2lwZScgYnVpbGQucGsgdGFzay5yZWNpcGUucGsgJX0iPnt7dGFzay5yZWNpcGUubmFtZX19X3t7dGFzay5yZWNpcGUudmVyc2lvbn19PC9hPiB7e3Rhc2sudGFza19uYW1lfX08L2gxPgorICAgIDwvZGl2PgorCit7IyBPdXRjb21lIHNlY3Rpb24gI30KKzxoMiB7eyB0YXNrfHRhc2tfY29sb3I6VHJ1ZSB9fT4KKyAgICB7e3Rhc2suZ2V0X291dGNvbWVfZGlzcGxheX19CisgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+Cis8L2gyPgoreyVpZiB0YXNrLnRhc2tfZXhlY3V0ZWQgJX0KKyAgICB7IyBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CisgICAgeyUgaWYgdGFzay5sb2dmaWxlICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0YXNrLnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICB7JSBlbmRpZiAlfQorICAgICAgICB7IyBzaG93IHN0YWNrIHRyYWNlIGZvciBmYWlsZWQgdGFzayAjfQorICAgICAgICB7JSBpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0ZBSUxFRCBhbmQgbG9nX2hlYWQgJX0KKyAgICAgICAgICAgIDxoMz5QeXRob24gc3RhY2sgdHJhY2U8L2gzPgorICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJtaW4taGVpZ2h0OjE2MHB4OyI+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7bG9nX2hlYWR9fTwvY29kZT48YSBpZD0iZnVsbC10cmFjZS1zaG93IiBkYXRhLXRhcmdldD0iI2Z1bGx0cmFjZSIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBjbGFzcz0iYnRuIGJ0bi1taW5pIj4uLi48L2E+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZ1bGx0cmFjZSIgY2xhc3M9ImNvbGxhcHNlIiBzdHlsZT0ibWFyZ2luLXRvcDogLTIwcHg7IGhlaWdodDogMHB4OyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57e2xvZ19ib2R5fX08L2NvZGU+PGJyPjxhIGlkPSJmdWxsLXRyYWNlLWhpZGUiIGNsYXNzPSJidG4gYnRuLW1pbmkgY29sbGFwc2VkIiBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUiIGRhdGEtdGFyZ2V0PSIjZnVsbHRyYWNlIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiPkNvbGxhcHNlIHN0YWNrIHRyYWNlPGkgY2xhc3M9Imljb24tY2FyZXQtdXAiPjwvaT48L2E+PC9kaXY+PC9wcmU+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgeyUgZW5kaWYgJX0KK3slIGVsc2UgJX0KK3sjIG5vdCBleGVjdXRlZCB0YXNrcyBvdXRjb21lICN9CisgICAgeyUgaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9QUkVCVUlMVCAlfQorICAgICAgICB7JSBpZiBub3Qgc2hvd2luZ19tYXRjaGVzICV9CisgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJqYXZhc2NyaXB0OnJlbG9hZF9wYXJhbXMoeydzaG93X21hdGNoZXMnIDogJ3RydWUnIH0pIj5NYXRjaCB0byB0YXNrcyBpbiBwcmV2aW91cyBidWlsZHMgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsiIHRpdGxlPSJUaGlzIHNob3dzIHlvdSBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT48L2E+CisgICAgICAgIHslIGVsaWYgbWF0Y2hpbmdfdGFza3MgJX0KKyAgICAgICAgICAgIDxoMyBjbGFzcz0iZGV0YWlscyI+UHJlYnVpbHQgdGFzayBjb3VsZCBiZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iVGhpcyB0YWJsZSBzaG93cyBhIGxpc3Qgb2YgdGFza3MgZnJvbSBwcmV2aW91cyBidWlsZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgaW5wdXRzIGFzIHVzZWQgaW4gdGhlIHByZWJ1aWx0IHRhc2suIEFueSBvZiB0aGVtIGNvdWxkIGJlIHRoZSB0YXNrIHRoYXQgZ2VuZXJhdGVkIHRoZSBvdXRwdXQgdGhpcyBwcmVidWlsdCB0YXNrIGlzIHJldXNpbmciPjwvaT4KKyAgICAgICAgICAgIDwvaDM+CisgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIj4KKyAgICAgICAgICAgICAgICA8dGhlYWQ+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICAgICAgPHRoPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBuYW1lIG9mIHRoZSB0YXNrIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrCisgICAgICAgICAgICAgICAgICAgIDwvdGg+CisgICAgICAgICAgICAgICAgICAgIDx0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGlzIHZhbHVlIHRlbGxzIHlvdSBpZiBhIHRhc2sgaGFkIHRvIHJ1biAoZXhlY3V0ZWQpIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQgdG8gcnVuIChub3QgZXhlY3V0ZWQpIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRlZAorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmICdleGVjdXRlZCcgdGFza3Mgc3VjY2VlZGVkIG9yIGZhaWxlZC4gVGhlIGNvbHVtbiBhbHNvIHRlbGxzIHlvdSB3aHkgJ25vdCBleGVjdXRlZCcgdGFza3MgZGlkIG5vdCBuZWVkIHRvIHJ1biI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgICAgT3V0Y29tZQorICAgICAgICAgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgICAgICAgICA8dGg+CisgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIGZpbmlzaGVkIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBjb21wbGV0ZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPC90aD4KKyAgICAgICAgICAgICAgICA8L3RoZWFkPgorICAgICAgICAgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgICAgICAgICAgeyUgZm9yIG1hdGNoIGluIG1hdGNoaW5nX3Rhc2tzICV9CisgICAgICAgICAgICAgICAgICAgICAgICA8dHIge3sgbWF0Y2h8dGFza19jb2xvciB9fT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLnJlY2lwZS5uYW1lfX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLnRhc2tfbmFtZX19PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JSBpZiB0YXNrLmdldF9kZXNjcmlwdGlvbiAlfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3t0YXNrLmdldF9kZXNjcmlwdGlvbn19Ij48L2k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmdldF9leGVjdXRlZF9kaXNwbGF5fX08L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBtYXRjaC5idWlsZC5wayBtYXRjaC5wayV9Ij57e21hdGNoLmdldF9vdXRjb21lX2Rpc3BsYXl9fSA8L2E+PGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIiB0aXRsZT0ie3ttYXRjaC5nZXRfb3V0Y29tZV9oZWxwfX0iPjwvaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIG1hdGNoLmJ1aWxkLnBrIG1hdGNoLnBrJX0iPnt7bWF0Y2guYnVpbGQuY29tcGxldGVkX29ufGRhdGU6ImQvbS95IEg6aSJ9fTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgIHslIGVsc2UgJX0KKyAgICAgICAgICAgIDxwIGNsYXNzPSJhbGVydCI+CisgICAgICAgICAgICAgICAgPHN0cm9uZz4gV2UgaGF2ZSBmb3VuZCBubyB0YXNrcyBtYXRjaGluZyB0aGlzIHByZWJ1aWx0IHRhc2s8L3N0cm9uZz48YnIvPgorICAgICAgICAgICAgICAgIFRoZSB0YXNrIHlvdSBhcmUgbG9va2luZyBmb3IgY291bGQgYmVsb25nIHRvIGEgYnVpbGQgZm9yIHdoaWNoIFRvYXN0ZXIgaGFzIG5vIGRhdGEuCisgICAgICAgICAgICA8L3A+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgeyUgZWxpZiB0YXNrLm91dGNvbWUgPT0gdGFzay5PVVRDT01FX0NPVkVSRUQgJX0KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxkdD4KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIHRhc2socykgcHJvdmlkaW5nIHRoZSBvdXRjb21lIG9mIHRoaXMgdGFzayI+PC9pPiBUYXNrIGNvdmVyZWQgYnkKKyAgICAgICAgICAgIDwvZHQ+CisgICAgICAgICAgICA8ZGQ+CisgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgeyUgZm9yIHQgaW4gY292ZXJlZF9ieSAlfQorICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgJ3Rhc2snIHQuYnVpbGQucGsgdC5wayV9IgorICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YXNrLWluZm8iCisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ie3t0LmdldF9leGVjdXRlZF9kaXNwbGF5fX0gfCB7e3QuZ2V0X291dGNvbWVfZGlzcGxheX19Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIHt7dC5yZWNpcGUubmFtZX19X3t7dC5yZWNpcGUudmVyc2lvbn19CisgICAgICAgICAgICAgICAgICAgICAgICB7e3QudGFza19uYW1lfX0KKyAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9kZD4KKyAgICAgICAgPC9kbD4KKyAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9DQUNIRUQlfQorICAgICAgICAgICAgeyUgZm9yIHQgaW4gdGFzay5nZXRfcmVsYXRlZF9zZXRzY2VuZSAlfQorICAgICAgICAgICAgICAgIHslIGlmIGZvcmxvb3AubGFzdCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1sYXJnZSIgaHJlZj0ieyUgdXJsICdidWlsZF9hcnRpZmFjdCcgYnVpbGQuaWQgInRhc2tsb2dmaWxlIiB0LnBrICV9IiBzdHlsZT0ibWFyZ2luOjE1cHg7Ij5Eb3dubG9hZCB0YXNrIGxvZzwvYT4KKyAgICAgICAgICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisKKyAgICB7JWVsaWYgdGFzay5vdXRjb21lID09IHRhc2suT1VUQ09NRV9FTVBUWSV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gZGV0YWlscyI+CisgICAgICAgICAgICBUaGlzIHRhc2sgaXMgZW1wdHkgYmVjYXVzZSBpdCBoYXMgdGhlIDxjb2RlPm5vZXhlYzwvY29kZT4gZmxhZyBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIG9yIHRoZSB0YXNrIGZ1bmN0aW9uIGlzIGVtcHR5CisgICAgICAgIDwvZGl2PgorICAgIHslIGVuZGlmICV9Cit7JSBlbmRpZiAlfQorCit7IyBFeGVjdXRpb24gc2VjdGlvbiAjfQorICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgIDxoMj4KKyAgICAgICAgRXhlY3V0ZWQKKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBoZWFkaW5nLWhlbHAiIHRpdGxlPSInRXhlY3V0ZWQnIHRhc2tzIGFyZSB0aG9zZSB0aGF0IG5lZWQgdG8gcnVuIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCI+PC9pPgorICAgIHslIGVsc2UgJX0KKyAgICA8aDIgY2xhc3M9Im11dGVkIj4KKyAgICAgICAgTm90IEV4ZWN1dGVkCisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaGVhZGluZy1oZWxwIiB0aXRsZT0iJ05vdCBleGVjdXRlZCcgdGFza3MgZG9uJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRjb21lIGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayI+PC9pPgorICAgIHslIGVuZGlmICV9CisgICAgPC9oMj4KKworPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICA8ZHQ+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUbyBtYWtlIGJ1aWxkcyBtb3JlIGVmZmljaWVudCwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGNoYW5nZXMgaW4gdGhlICdpbnB1dHMnIHRvIGEgZ2l2ZW4gdGFzayBieSBjcmVhdGluZyBhICd0YXNrIHNpZ25hdHVyZScuIElmIHRoZSBzaWduYXR1cmUgY2hhbmdlcywgdGhlIGJ1aWxkIHN5c3RlbSBhc3N1bWVzIHRoZSBpbnB1dHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFzayBuZWVkcyB0byBiZSByZXJ1biI+PC9pPgorICAgICAgICBUYXNrIGlucHV0cyBzaWduYXR1cmUKKyAgICA8L2R0PgorICAgIDxkZD4KKyAgICAgICAge3t0YXNrLnNzdGF0ZV9jaGVja3N1bX19CisgICAgPC9kZD4KKzwvZGw+CisgICAgeyUgaWYgdGFzay5zc3RhdGVfcmVzdWx0ICE9IHRhc2suU1NUQVRFX05BICV9CisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPkF0dGVtcHRpbmcgdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSBzc3RhdGUgY2FjaGUKKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgZ2V0LWhlbHAtYmx1ZSIgdGl0bGU9IlRoZSBidWlsZCBzeXN0ZW0gaXMgc2VhcmNoaW5nIGZvciB0aGUgdGFzayBvdXRwdXQgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycy4gSWYgdGhlIGJ1aWxkIHN5c3RlbSBmaW5kcyB0aGUgdGFzayBvdXRwdXQsIGl0IHdpbGwgcmV1c2UgaXQgaW5zdGVhZCBvZiBidWlsZGluZyBpdCBmcm9tIHNjcmF0Y2ggYnkgcnVubmluZyB0aGUgcmVhbCB0YXNrLiBSZXVzaW5nIHRoZSB0YXNrIG91dHB1dCBtYWtlcyB0aGUgYnVpbGQgZmFzdGVyIj48L2k+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbmFtZSBvZiB0aGUgZmlsZSBzZWFyY2hlZCBmb3IgaW4geW91ciA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBhbmQgbWlycm9ycyI+PC9pPgorICAgICAgICAgICAgICAgIEZpbGUgc2VhcmNoZWQgZm9yCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjxjb2RlPnt7dGFzay5wYXRoX3RvX3NzdGF0ZV9vYmp9fTwvY29kZT48L2RkPgorICAgICAgICAgICAgPGR0PgorICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJUaGUgbG9jYXRpb25zIHNlYXJjaGVkIGZvciB0aGUgYWJvdmUgZmlsZSAoaS5lLiB5b3VyIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IGFuZCBhbnkgbWlycm9ycyB5b3UgaGF2ZSBzZXQgdXApIj48L2k+CisgICAgICAgICAgICAgICAgVVJJKHMpIHNlYXJjaGVkCisgICAgICAgICAgICA8L2R0PgorICAgICAgICAgICAgPGRkPjx1bD57JSBmb3IgdXJpIGluIHVyaV9saXN0ICV9PGxpPjxjb2RlPnt7dXJpfX08L2NvZGU+PC9saT57JSBlbmRmb3IgJX08L3VsPjwvZGQ+CisgICAgICAgIDwvZGw+CisgICAgeyUgZW5kaWYgJX0KKyAgICB7JSBpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfTUlTUyAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIDxzdHJvbmc+RmlsZSBub3QgaW4gc3N0YXRlIGNhY2hlLjwvc3Ryb25nPiBSdW5uaW5nIHRoZSByZWFsIHRhc2sgaW5zdGVhZC4KKyAgICAgICAgPC9kaXY+CisgICAgeyUgZWxpZiB0YXNrLnNzdGF0ZV9yZXN1bHQgPT0gdGFzay5TU1RBVEVfRkFJTEVEJX0KKyAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQiPgorICAgICAgICAgICAgPHN0cm9uZz5GYWlsZWQ8L3N0cm9uZz4gdG8gcmVzdG9yZSBvdXRwdXQgZnJvbSBzc3RhdGUgY2FjaGUuIFRoZSBmaWxlIHdhcyBmb3VuZCBidXQgY291bGQgbm90IGJlIHVucGFja2VkLgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRsIGNsYXNzPSJkbC1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAnYnVpbGRfYXJ0aWZhY3QnIGJ1aWxkLmlkICJ0YXNrbG9nZmlsZSIgdGFzay5wayAlfSIgc3R5bGU9Im1hcmdpbjoxNXB4OyI+RG93bmxvYWQgbG9nPC9hPgorICAgICAgICA8L2RsPgorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhlIHJlYWwgdGFzayBpbnN0ZWFkLgorICAgICAgICA8L2Rpdj4KKyAgICB7JSBlbGlmIHRhc2suc3N0YXRlX3Jlc3VsdCA9PSB0YXNrLlNTVEFURV9SRVNUT1JFRCAlfQorICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4KKyAgICAgICAgICAgIE91dHB1dCA8c3Ryb25nPnN1Y2Nlc3NmdWxseSByZXN0b3JlZDwvc3Ryb25nPiBmcm9tIHNzdGF0ZSBjYWNoZS4KKyAgICAgICAgPC9kaXY+CisgICAgeyUgZW5kaWYgJX0KKyAgICA8ZGwgY2xhc3M9ImRsLWhvcml6b250YWwiPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQiPjwvaT4KKyAgICAgICAgVGFzayBvcmRlcgorICAgIDwvZHQ+CisgICAgPGRkPjxhIGhyZWY9InsldXJsICJ0YXNrc190YXNrIiBidWlsZC5wayB0YXNrLm9yZGVyICV9I3t7dGFzay5vcmRlcn19Ij57e3Rhc2sub3JkZXJ9fTwvYT48L2RkPgorICAgIHslIGlmIHRhc2sudGFza19leGVjdXRlZCAlfQorICAgICAgICA8ZHQ+CisgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iSW5kaWNhdGVzIGlmIHRoaXMgdGFzayBleGVjdXRlcyBhIFB5dGhvbiBvciBTaGVsbCBmdW5jdGlvbihzKSI+PC9pPgorICAgICAgICAgICAgVGFzayBzY3JpcHQgdHlwZQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmdldF9zY3JpcHRfdHlwZV9kaXNwbGF5fX08L2RkPgorICAgIHslIGVuZGlmICV9Cis8IS0tCisgICAgPGR0PgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIiB0aXRsZT0iVGhlIGNvZGUgZXhlY3V0ZWQgYnkgdGhlIHRhc2siPjwvaT4KKyAgICAgICAgVGFzayBleGVjdXRhYmxlIG91dHB1dAorICAgIDwvZHQ+CisgICAgPGRkPjxjb2RlPnt7dGFzay5zb3VyY2VfdXJsfX08L2NvZGU+PC9kZD4KKy0tPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2sgZGVwZW5kZW5jeSBjaGFpbiAoaS5lLiBvdGhlciB0YXNrcykiPjwvaT4KKyAgICAgICAgRGVwZW5kZW5jaWVzCisgICAgPC9kdD4KKyAgICA8ZGQ+CisgICAgICAgIDx1bD4KKyAgICAgICAgICAgIHslIGZvciBkZXAgaW4gZGVwcyAlfQorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJ7JXVybCAndGFzaycgZGVwLmJ1aWxkLnBrIGRlcC5wayV9IiBjbGFzcz0idGFzay1pbmZvIiB0aXRsZT0ie3tkZXAuZ2V0X2V4ZWN1dGVkX2Rpc3BsYXl9fSB8IHt7ZGVwLmdldF9vdXRjb21lX2Rpc3BsYXl9fSI+e3tkZXAucmVjaXBlLm5hbWV9fV97e2RlcC5yZWNpcGUudmVyc2lvbn19IDxzcGFuIGNsYXNzPSJ0YXNrLW5hbWUiPnt7ZGVwLnRhc2tfbmFtZX19PC9zcGFuPjwvYT48L2xpPgorICAgICAgICAgICAgeyUgZW1wdHkgJX0KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im11dGVkIj5UaGlzIHRhc2sgaGFzIG5vIGRlcGVuZGVuY2llczwvbGk+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgPC91bD4KKyAgICA8L2RkPgorICAgIDxkdD4KKyAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRhc2tzIHRoYXQgZGVwZW5kIG9uIHRoaXMgdGFzayI+PC9pPgorICAgICAgICBSZXZlcnNlIGRlcGVuZGVuY2llcworICAgIDwvZHQ+CisgICAgPGRkPgorICAgICAgICA8dWw+CisgICAgICAgICAgICB7JSBmb3IgZGVwIGluIHJkZXBzICV9CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InsldXJsICd0YXNrJyBkZXAuYnVpbGQucGsgZGVwLnBrJX0iIGNsYXNzPSJ0YXNrLWluZm8iIHRpdGxlPSJ7e2RlcC5nZXRfZXhlY3V0ZWRfZGlzcGxheX19IHwge3tkZXAuZ2V0X291dGNvbWVfZGlzcGxheX19Ij57e2RlcC5yZWNpcGUubmFtZX19X3t7ZGVwLnJlY2lwZS52ZXJzaW9ufX0gPHNwYW4gY2xhc3M9InRhc2stbmFtZSI+e3tkZXAudGFza19uYW1lfX08L3NwYW4+PC9hPjwvbGk+CisgICAgICAgICAgICB7JSBlbXB0eSAlfQorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibXV0ZWQiPlRoaXMgdGFzayBoYXMgbm8gcmV2ZXJzZSBkZXBlbmRlbmNpZXM8L2xpPgorICAgICAgICAgICAgeyUgZW5kZm9yICV9CisgICAgICAgIDwvdWw+Cis8L2RsPgorCit7IyBQZXJmb3JtYW5jZSBzZWN0aW9uIC0gc2hvd24gb25seSBmb3IgZXhlY3V0ZWQgdGFza3MgI30KK3slaWYgdGFzay5lbGFwc2VkX3RpbWUgb3IgdGFzay5jcHVfdXNhZ2Ugb3IgdGFzay5kaXNrX2lvICV9CisgICAgPGgyIGNsYXNzPSJkZXRhaWxzIj5QZXJmb3JtYW5jZTwvaDI+Cit7JSBlbmRpZiAlfQorICAgIDxkbCBjbGFzcz0iZGwtaG9yaXpvbnRhbCI+CisgICAgICAgIHslIGlmIHRhc2suZWxhcHNlZF90aW1lICV9CisgICAgICAgIDxkdD4KKyAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAiIHRpdGxlPSJIb3cgbG9uZyBpdCB0b29rIHRoZSB0YXNrIHRvIGZpbmlzaCBpbiBzZWNvbmRzIj48L2k+CisgICAgICAgICAgICBUaW1lIChzZWNzKQorICAgICAgICA8L2R0PgorICAgICAgICA8ZGQ+e3t0YXNrLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgICAgICB7JSBpZiB0YXNrLmNwdV91c2FnZSA+IDAgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9IlRoZSBwZXJjZW50YWdlIG9mIHRhc2sgQ1BVIHV0aWxpemF0aW9uIj48L2k+CisgICAgICAgICAgICBDUFUgdXNhZ2UKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPnt7dGFzay5jcHVfdXNhZ2V8Zm9ybWF0X25vbmVfYW5kX3plcm98ZmxvYXRmb3JtYXQ6Mn19JTwvZGQ+CisgICAgICAgIHslIGVuZGlmICV9CisgICAgICAgIHslIGlmIHRhc2suZGlza19pbyA+IDAgJX0KKyAgICAgICAgPGR0PgorICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCIgdGl0bGU9Ik51bWJlciBvZiBtaWxpc2Vjb25kcyB0aGUgdGFzayBzcGVudCBkb2luZyBkaXNrIGlucHV0IGFuZCBvdXRwdXQiPjwvaT4KKyAgICAgICAgICAgIERpc2sgSS9PIChtcykKKyAgICAgICAgPC9kdD4KKyAgICAgICAgPGRkPnt7dGFzay5kaXNrX2lvfGZvcm1hdF9ub25lX2FuZF96ZXJvfX08L2RkPgorICAgICAgICB7JSBlbmRpZiAlfQorICAgIDwvZGw+CisKKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrcy5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90YXNrcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGI1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3Rhc2tzLmh0bWwKQEAgLTAsMCArMSwxMzYgQEAKK3slIGV4dGVuZHMgImJhc2VidWlsZHBhZ2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KKworeyUgYmxvY2sgbG9jYWxicmVhZGNydW1iICV9Cis8bGk+e3t0aXRsZX19PC9saT4KK3slIGVuZGJsb2NrICV9CisKK3slIGJsb2NrIG5hdi10YXNrcyAlfQorICB7JSBpZiAnVGFza3MnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICB7JSBlbHNlICV9CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAndGFza3MnIGJ1aWxkLnBrICV9Ij5UYXNrczwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1idWlsZHRpbWUgJX0KKyAgeyUgaWYgJ1RpbWUnID09IHRpdGxlICV9CisgICAgPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICB7JSBlbHNlICV9CisgICAgPGxpPjxhIGhyZWY9InslIHVybCAnYnVpbGR0aW1lJyBidWlsZC5wayAlfSI+VGltZTwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1jcHV1c2FnZSAlfQorICB7JSBpZiAnQ1BVIHVzYWdlJyA9PSB0aXRsZSAlfQorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2NwdXVzYWdlJyBidWlsZC5wayAlfSI+Q1BVIHVzYWdlPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdjcHV1c2FnZScgYnVpbGQucGsgJX0iPkNQVSB1c2FnZTwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIG5hdi1kaXNraW8gJX0KKyAgeyUgaWYgJ0Rpc2sgSS9PJyA9PSB0aXRsZSAlfQorICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSJ7JSB1cmwgJ2Rpc2tpbycgYnVpbGQucGsgJX0iPkRpc2sgSS9PPC9hPjwvbGk+CisgIHslIGVsc2UgJX0KKyAgICA8bGk+PGEgaHJlZj0ieyUgdXJsICdkaXNraW8nIGJ1aWxkLnBrICV9Ij5EaXNrIEkvTzwvYT48L2xpPgorICB7JSBlbmRpZiAlfQoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sgYnVpbGRpbmZvbWFpbiAlfQorPGRpdiBjbGFzcz0ic3BhbjEwIj4KK3slIGlmIG5vdCByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG5vdCByZXF1ZXN0LkdFVC5zZWFyY2ggYW5kIG5vdCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAlfQorICA8IS0tIEVtcHR5IC0gbm8gZGF0YSBpbiBkYXRhYmFzZSAtLT4KKyAgPGRpdiBjbGFzcz0icGFnZS1oZWFkZXIiPgorICA8aDE+e3t0aXRsZX19PC9oMT4KKyAgPC9kaXY+CisgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gbGVhZCI+CisgIE5vIGRhdGEgd2FzIHJlY29yZGVkIGZvciB0aGlzIGJ1aWxkLgorICA8L2Rpdj4KKworeyUgZWxzZSAlfQorCisgIDxkaXYgY2xhc3M9InBhZ2UtaGVhZGVyIj4KKyAgPGgxPgorICB7JSBpZiAgcmVxdWVzdC5HRVQuZmlsdGVyIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA+ICAwIG9yIHJlcXVlc3QuR0VULnNlYXJjaCBhbmQgb2JqZWN0cy5wYWdpbmF0b3IuY291bnQgPiAgMCAlfQorICAgICAge3tvYmplY3RzLnBhZ2luYXRvci5jb3VudH19IHRhc2t7e29iamVjdHMucGFnaW5hdG9yLmNvdW50fHBsdXJhbGl6ZX19IGZvdW5kCisgIHslZWxpZiByZXF1ZXN0LkdFVC5maWx0ZXIgYW5kIG9iamVjdHMucGFnaW5hdG9yLmNvdW50ID09IDAgb3IgcmVxdWVzdC5HRVQuc2VhcmNoIGFuZCBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgICAgICBObyB0YXNrcyBmb3VuZAorICB7JWVsc2UlfQorICAgICAge3t0aXRsZX19CisgIHslZW5kaWYlfQorICA8L2gxPgorICA8L2Rpdj4KKworICB7JSBpZiBvYmplY3RzLnBhZ2luYXRvci5jb3VudCA9PSAwICV9CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCI+CisgICAgICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgICAgIDxmb3JtIGNsYXNzPSJuby1yZXN1bHRzIGlucHV0LWFwcGVuZCIgaWQ9InNlYXJjaGZvcm0iPgorICAgICAgICAgICAgPGlucHV0IGlkPSJzZWFyY2giIG5hbWU9InNlYXJjaCIgY2xhc3M9ImlucHV0LXh4bGFyZ2UiIHR5cGU9InRleHQiIHZhbHVlPSJ7e3JlcXVlc3QuR0VULnNlYXJjaH19Ii8+eyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9PGEgaHJlZj0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIiBjbGFzcz0iYWRkLW9uIGJ0biIgdGFiaW5kZXg9Ii0xIj48aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT48L2E+eyUgZW5kaWYgJX0KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj5TZWFyY2g8L2J1dHRvbj4KKyAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayIgb25jbGljaz0iamF2YXNjcmlwdDokKCcjc2VhcmNoJykudmFsKCcnKTtzZWFyY2hmb3JtLnN1Ym1pdCgpIj5TaG93IGFsbCB0YXNrczwvYnV0dG9uPgorICAgICAgICA8L2Zvcm0+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKworICB7JSBlbHNlICV9CisgIHslIGluY2x1ZGUgImJhc2V0YWJsZV90b3AuaHRtbCIgJX0KKworICAgIHslIGZvciB0YXNrIGluIG9iamVjdHMgJX0KKyAgICAgICAgPHRyIHt7IHRhc2t8dGFza19jb2xvciB9fSBpZD0ie3t0YXNrLm9yZGVyfX0iPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJvcmRlciI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLm9yZGVyfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfbmFtZSIgPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InslIHVybCAicmVjaXBlIiBidWlsZC5wayB0YXNrLnJlY2lwZS5wayAlfSI+e3t0YXNrLnJlY2lwZS5uYW1lfX08L2E+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJyZWNpcGVfdmVyc2lvbiI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyUgdXJsICJyZWNpcGUiIGJ1aWxkLnBrIHRhc2sucmVjaXBlLnBrICV9Ij57e3Rhc2sucmVjaXBlLnZlcnNpb259fTwvYT4KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9InRhc2tfbmFtZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLnRhc2tfbmFtZX19PC9hPiB7JSBpZiB0YXNrLmdldF9kZXNjcmlwdGlvbiAlfTxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gZ2V0LWhlbHAgaG92ZXItaGVscCIgdGl0bGU9Int7dGFzay5nZXRfZGVzY3JpcHRpb259fSI+PC9pPiB7JSBlbmRpZiAlfQorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0iZXhlY3V0ZWQiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9InsldXJsICJ0YXNrIiBidWlsZC5wayB0YXNrLnBrJX0iPnt7dGFzay5nZXRfZXhlY3V0ZWRfZGlzcGxheX19PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0ib3V0Y29tZSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0ieyV1cmwgInRhc2siIGJ1aWxkLnBrIHRhc2sucGslfSI+e3t0YXNrLmdldF9vdXRjb21lX2Rpc3BsYXl9fSA8L2E+CisgICAgICAgICAgICAgICAgeyUgaWYgdGFzay5vdXRjb21lID0gdGFzay5PVVRDT01FX0ZBSUxFRCAlfQorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JSB1cmwgJ2J1aWxkX2FydGlmYWN0JyBidWlsZC5wayAidGFza2xvZ2ZpbGUiIHRhc2sucGsgJX0iPgorICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9Imljb24tZG93bmxvYWQtYWx0IiB0aXRsZT0iRG93bmxvYWQgdGFzayBsb2cgZmlsZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgeyUgZW5kaWYgJX0KKyAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi1xdWVzdGlvbi1zaWduIGdldC1oZWxwIGhvdmVyLWhlbHAiIHRpdGxlPSJ7e3Rhc2suZ2V0X291dGNvbWVfaGVscH19Ij48L2k+CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJjYWNoZV9hdHRlbXB0Ij4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSJ7JXVybCAidGFzayIgYnVpbGQucGsgdGFzay5wayV9Ij57e3Rhc2suZ2V0X3NzdGF0ZV9yZXN1bHRfZGlzcGxheXxmb3JtYXRfbm9uZV9hbmRfemVyb319PC9hPgorICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDx0ZCBjbGFzcz0idGltZV90YWtlbiI+CisgICAgICAgICAgICAgICAge3t0YXNrLmVsYXBzZWRfdGltZXxmb3JtYXRfbm9uZV9hbmRfemVyb3xmbG9hdGZvcm1hdDoyfX0KKyAgICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgICA8dGQgY2xhc3M9ImNwdV91c2VkIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suY3B1X3VzYWdlfGZvcm1hdF9ub25lX2FuZF96ZXJvfGZsb2F0Zm9ybWF0OjJ9fXslIGlmIHRhc2suY3B1X3VzYWdlICV9JXslIGVuZGlmICV9CisgICAgICAgICAgICA8L3RkPgorICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNrX2lvIj4KKyAgICAgICAgICAgICAgICB7e3Rhc2suZGlza19pb3xmb3JtYXRfbm9uZV9hbmRfemVyb319CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgIDwvdHI+CisgICAgeyUgZW5kZm9yICV9CisKKyAgeyUgaW5jbHVkZSAiYmFzZXRhYmxlX2JvdHRvbS5odG1sIiAlfQorICB7JSBlbmRpZiAlfSB7IyBvYmplY3RzLnBhZ2luYXRvci5jb3VudCAjfQoreyUgZW5kaWYgJX0geyMgZW1wdHkgI30KKzwvZGl2PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gZW5hYmxlIGJsdWUgaGlnaHRsaWdodCBhbmltYXRpb24gZm9yIHRoZSBvcmRlciBsaW5rCisgICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnNlYXJjaCgnIycpID4gLTEpIHsKKyAgICAgICAgICAgIHZhciB0YXNrX29yZGVyID0gbG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzFdOworICAgICAgICAgICAgJCgiIyIgKyB0YXNrX29yZGVyKS5hZGRDbGFzcygiaGlnaGxpZ2h0Iik7CisgICAgICAgIH0KKyAgICB9KTsKKworPC9zY3JpcHQ+CisKK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdG9hc3RlcnRhYmxlLWZpbHRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOGRjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1maWx0ZXIuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IS0tIGZpbHRlciBtb2RhbCAtLT4KKzxkaXYgaWQ9ImZpbHRlci1tb2RhbC17e3RhYmxlX25hbWV9fSIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtaGlkZGVuPSJmYWxzZSI+CisgIDxmb3JtIGlkPSJmaWx0ZXItbW9kYWwtZm9ybS17e3RhYmxlX25hbWV9fSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBweCI+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj54PC9idXR0b24+CisgICAgICA8aDMgaWQ9ImZpbHRlci1tb2RhbC10aXRsZS17e3RhYmxlX25hbWV9fSI+Jm5ic3A7PC9oMz4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgIDxwPlNob3c6PC9wPgorICAgICAgPHNwYW4gaWQ9ImZpbHRlci1hY3Rpb25zLXt7dGFibGVfbmFtZX19Ij48L3NwYW4+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgdHlwZT0ic3VibWl0Ij5BcHBseTwvYnV0dG9uPgorICAgIDwvZGl2PgorICA8L2Zvcm0+Cis8L2Rpdj4KKzxidXR0b24gaWQ9ImNsZWFyLWZpbHRlci1idG4te3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvYnV0dG9uPgorPCEtLSBlbmQgZmlsdGVyIG1vZGFsIC0tPgpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS1zaW1wbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIzMThiCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUtc2ltcGxlLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIChmdW5jdGlvbigpeworCisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRhYmxlTmFtZSA6ICJ7e3RhYmxlX25hbWV9fSIsCisgICAgICB1cmwgOiAie3sgeGhyX3RhYmxlX3VybCB9fT9mb3JtYXQ9anNvbiIsCisgICAgICB0aXRsZSA6ICJ7e3RpdGxlfX0iLAorICAgICAgcHJvamVjdExheWVycyA6IHt7cHJvamVjdGxheWVyc3xqc29ufX0sCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICB0YWJsZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiUHJvYmxlbSBsb2FkaW5nIHRhYmxlIHdpZGdldDogIiArIGUpOworICAgIH0KKyAgICB9KSgpOworICB9KTsKKzwvc2NyaXB0PgorCit7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ibmV3LXNlYXJjaC1pbnB1dC17e3RhYmxlX25hbWV9fSIgbmFtZT0ic2VhcmNoIiB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIHt7dGl0bGV8bG93ZXJ9fSIgdmFsdWU9InslIGlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JSBlbmRpZiAlfSIvPgorICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgPC9hPgorICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tbGluayByZW1vdmUtc2VhcmNoLWJ0bi17e3RhYmxlX25hbWV9fSI+U2hvdyB7e3RpdGxlfGxvd2VyfX0KKyAgICAgIDwvYnV0dG9uPgorICAgIDwvZm9ybT4KKyAgPC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InRhYmxlLWNvbnRhaW5lci17e3RhYmxlX25hbWV9fSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+CisgIDwhLS0gY29udHJvbCBoZWFkZXIgLS0+CisgIDxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9InRhYmxlLWNocm9tZS17e3RhYmxlX25hbWV9fSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItc2VhcmNoIGlucHV0LWFwcGVuZCBwdWxsLWxlZnQiPgorCisgICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyUgaWYgcmVxdWVzdC5HRVQuc2VhcmNoICV9e3tyZXF1ZXN0LkdFVC5zZWFyY2h9fXslIGVuZGlmICV9Ii8+CisgICAgICAgIDxhIGhyZWY9IiMiIHN0eWxlPSJkaXNwbGF5Om5vbmUiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgorICAgICAgICAgIDxpIGNsYXNzPSJpY29uLXJlbW92ZSI+PC9pPgorICAgICAgICA8L2E+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNlYXJjaC1zdWJtaXQte3t0YWJsZV9uYW1lfX0iID5TZWFyY2g8L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKworICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZSI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvc3Bhbj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscC1pbmxpbmUiIHN0eWxlPSJwYWRkaW5nLXRvcDo1cHg7Ij5TaG93IHJvd3M6PC9zcGFuPgorICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICAgICAgeyUgZm9yIGkgaW4gbGlzdC5zcGxpdCAlfQorICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgICAgIHslIGVuZHdpdGggJX0KKyAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgPC9kaXY+CisKKyAgPCEtLSBUaGUgYWN0dWFsIHRhYmxlIC0tPgorICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyIiBpZD0ie3t0YWJsZV9uYW1lfX0iPgorICAgIDx0aGVhZD4KKyAgICAgIDx0cj48dGg+PC90aD48L3RyPgorICAgIDwvdGhlYWQ+CisgICAgPHRib2R5PjwvdGJvZHk+CisgIDwvdGFibGU+CisKKyAgPCEtLSBQYWdpbmF0aW9uIGNvbnRyb2xzIC0tPgorICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIHBhZ2luYXRpb24tY2VudGVyZWQiIGlkPSJwYWdpbmF0aW9uLXt7dGFibGVfbmFtZX19Ij4KKyAgICA8dWwgY2xhc3M9InBhZ2luYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBibG9jay1pbmxpbmUiPgorICAgIDwvdWw+CisKKyAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICA8c2VsZWN0IHN0eWxlPSJtYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjBweDsiIGNsYXNzPSJwYWdlc2l6ZS17e3RhYmxlX25hbWV9fSI+CisgICAgICAgIHslIHdpdGggIjEwIDI1IDUwIDEwMCAxNTAiIGFzIGxpc3QlfQorICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgIDxvcHRpb24gdmFsdWU9Int7aX19Ij57e2l9fTwvb3B0aW9uPgorICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgPC9zZWxlY3Q+CisgICAgPC9kaXY+CisgIDwvZGl2PgorPC9kaXY+CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGVzL3RvYXN0ZXJ0YWJsZS5odG1sIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY0YzZmCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy90b2FzdGVydGFibGUuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorCit7JSBsb2FkIHN0YXRpYyAlfQoreyUgbG9hZCBwcm9qZWN0dGFncyAlfQorCis8c2NyaXB0IHNyYz0ieyUgc3RhdGljICdqcy90YWJsZS5qcycgJX0iPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InslIHN0YXRpYyAnanMvbGF5ZXJCdG4uanMnICV9Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgIChmdW5jdGlvbigpeworCisgICAgdmFyIGN0eCA9IHsKKyAgICAgIHRhYmxlTmFtZSA6ICJ7e3RhYmxlX25hbWV9fSIsCisgICAgICB1cmwgOiAie3sgeGhyX3RhYmxlX3VybCB9fT9mb3JtYXQ9anNvbiIsCisgICAgICB0aXRsZSA6ICJ7e3RpdGxlfX0iLAorICAgICAgcHJvamVjdExheWVycyA6IHt7cHJvamVjdGxheWVyc3xqc29ufX0sCisgICAgfTsKKworICAgIHRyeSB7CisgICAgICB0YWJsZUluaXQoY3R4KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBkb2N1bWVudC53cml0ZSgiUHJvYmxlbSBsb2FkaW5nIHRhYmxlIHdpZGdldDogIiArIGUpOworICAgIH0KKyAgICB9KSgpOworICB9KTsKKzwvc2NyaXB0PgorCit7JSBpbmNsdWRlICd0b2FzdGVydGFibGUtZmlsdGVyLmh0bWwnICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCIgaWQ9Im5vLXJlc3VsdHMte3t0YWJsZV9uYW1lfX0iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICA8ZGl2IGNsYXNzPSJhbGVydCI+CisgICAgPGZvcm0gY2xhc3M9Im5vLXJlc3VsdHMgaW5wdXQtYXBwZW5kIj4KKyAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQteHhsYXJnZSIgaWQ9Im5ldy1zZWFyY2gtaW5wdXQte3t0YWJsZV9uYW1lfX0iIG5hbWU9InNlYXJjaCIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCB7e3RpdGxlfGxvd2VyfX0iIHZhbHVlPSJ7JWlmIHJlcXVlc3QuR0VULnNlYXJjaCAlfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJhZGQtb24gYnRuIHJlbW92ZS1zZWFyY2gtYnRuLXt7dGFibGVfbmFtZX19IiB0YWJpbmRleD0iLTEiPgorICAgICAgICA8aSBjbGFzcz0iaWNvbi1yZW1vdmUiPjwvaT4KKyAgICAgIDwvYT4KKyAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzZWFyY2gtc3VibWl0LXt7dGFibGVfbmFtZX19IiA+U2VhcmNoPC9idXR0b24+CisgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWxpbmsgcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iPlNob3cge3t0aXRsZXxsb3dlcn19CisgICAgICA8L2J1dHRvbj4KKyAgICA8L2Zvcm0+CisgIDwvZGl2PgorPC9kaXY+CisKKzxkaXYgaWQ9InRhYmxlLWNvbnRhaW5lci17e3RhYmxlX25hbWV9fSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbiI+CisgIDwhLS0gY29udHJvbCBoZWFkZXIgLS0+CisgIDxkaXYgY2xhc3M9Im5hdmJhciIgaWQ9InRhYmxlLWNocm9tZS17e3RhYmxlX25hbWV9fSI+CisgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1zZWFyY2ggaW5wdXQtYXBwZW5kIHB1bGwtbGVmdCI+CisKKyAgICAgICAgPGlucHV0IGNsYXNzPSJpbnB1dC14eGxhcmdlIiBpZD0ic2VhcmNoLWlucHV0LXt7dGFibGVfbmFtZX19IiBuYW1lPSJzZWFyY2giIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJTZWFyY2gge3t0aXRsZXxsb3dlcn19IiB2YWx1ZT0ieyVpZiByZXF1ZXN0LkdFVC5zZWFyY2glfXt7cmVxdWVzdC5HRVQuc2VhcmNofX17JWVuZGlmJX0iLz4KKyAgICAgICAgPGEgaHJlZj0iIyIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9ImFkZC1vbiBidG4gcmVtb3ZlLXNlYXJjaC1idG4te3t0YWJsZV9uYW1lfX0iIHRhYmluZGV4PSItMSI+CisgICAgICAgICAgPGkgY2xhc3M9Imljb24tcmVtb3ZlIj48L2k+CisgICAgICAgIDwvYT4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2VhcmNoLXN1Ym1pdC17e3RhYmxlX25hbWV9fSIgPlNlYXJjaDwvYnV0dG9uPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RWRpdCBjb2x1bW5zCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KKyAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZWRpdGNvbCI+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwLWlubGluZSIgc3R5bGU9InBhZGRpbmctdG9wOjVweDsiPlNob3cgcm93czo8L3NwYW4+CisgICAgICAgICAgPHNlbGVjdCBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowcHg7IiBjbGFzcz0icGFnZXNpemUte3t0YWJsZV9uYW1lfX0iPgorICAgICAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgICAgICB7JSBmb3IgaSBpbiBsaXN0LnNwbGl0ICV9CisgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7e2l9fSI+e3tpfX08L29wdGlvbj4KKyAgICAgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICAgICAgeyUgZW5kd2l0aCAlfQorICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKworICA8IS0tIFRoZSBhY3R1YWwgdGFibGUgLS0+CisgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXIiIGlkPSJ7e3RhYmxlX25hbWV9fSI+CisgICAgPHRoZWFkPgorICAgICAgPHRyPjx0aD48L3RoPjwvdHI+CisgICAgPC90aGVhZD4KKyAgICA8dGJvZHk+PC90Ym9keT4KKyAgPC90YWJsZT4KKworICA8IS0tIFBhZ2luYXRpb24gY29udHJvbHMgLS0+CisgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24gcGFnaW5hdGlvbi1jZW50ZXJlZCIgaWQ9InBhZ2luYXRpb24te3t0YWJsZV9uYW1lfX0iPgorICAgIDx1bCBjbGFzcz0icGFnaW5hdGlvbiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrLWlubGluZSI+CisgICAgPC91bD4KKworICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgPHNwYW4gY2xhc3M9ImhlbHAtaW5saW5lIiBzdHlsZT0icGFkZGluZy10b3A6NXB4OyI+U2hvdyByb3dzOjwvc3Bhbj4KKyAgICAgIDxzZWxlY3Qgc3R5bGU9Im1hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBhZ2VzaXplLXt7dGFibGVfbmFtZX19Ij4KKyAgICAgICAgeyUgd2l0aCAiMTAgMjUgNTAgMTAwIDE1MCIgYXMgbGlzdCV9CisgICAgICAgIHslIGZvciBpIGluIGxpc3Quc3BsaXQgJX0KKyAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3tpfX0iPnt7aX19PC9vcHRpb24+CisgICAgICAgIHslIGVuZGZvciAlfQorICAgICAgICB7JSBlbmR3aXRoICV9CisgICAgICA8L3NlbGVjdD4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbCBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXMvdW5hdmFpbGFibGVfYXJ0aWZhY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWY4ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRlcy91bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGxvYWQgcHJvamVjdHRhZ3MgJX0KK3slIGxvYWQgaHVtYW5pemUgJX0KK3slIGxvYWQgc3RhdGljICV9CisKK3slIGJsb2NrIHBhZ2Vjb250ZW50ICV9CisKKzxkaXYgY2xhc3M9InJvdy1mbHVpZCBhaXIiPgorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8gc3BhbjggbGVhZCI+CisgICAgICAgIDxwIj4gVGhlIGJ1aWxkIGFydGlmYWN0IHlvdSBhcmUgdHJ5aW5nIHRvIGRvd25sb2FkIG5vIGxvbmdlciBleGlzdHMuPC9wPgorICAgICAgICA8cD48YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5oaXN0b3J5LmJhY2soKSI+QmFjayB0byBwcmV2aW91cyBwYWdlPC9hPjwvcD4KKyAgICA8L2Rpdj4KKzwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKwpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3RlbXBsYXRldGFncy9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZW1wbGF0ZXRhZ3MvcHJvamVjdHRhZ3MucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL3Byb2plY3R0YWdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjIyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdGVtcGxhdGV0YWdzL3Byb2plY3R0YWdzLnB5CkBAIC0wLDAgKzEsMjk5IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQorZnJvbSBvcy5wYXRoIGltcG9ydCByZWxwYXRoCitpbXBvcnQgcmUKK2Zyb20gZGphbmdvIGltcG9ydCB0ZW1wbGF0ZQorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby50ZW1wbGF0ZS5kZWZhdWx0ZmlsdGVycyBpbXBvcnQgZmlsZXNpemVmb3JtYXQKK2ltcG9ydCBqc29uIGFzIEpzb25MaWIKK2Zyb20gZGphbmdvLnV0aWxzLnNhZmVzdHJpbmcgaW1wb3J0IG1hcmtfc2FmZQorCityZWdpc3RlciA9IHRlbXBsYXRlLkxpYnJhcnkoKQorCitAcmVnaXN0ZXIuc2ltcGxlX3RhZworZGVmIHRpbWVfZGlmZmVyZW5jZShzdGFydF90aW1lLCBlbmRfdGltZSk6CisgICAgcmV0dXJuIGVuZF90aW1lIC0gc3RhcnRfdGltZQorCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAnc2VjdG9obXMnKQorZGVmIHNlY3RvaG1zKHRpbWUpOgorICAgIHRyeToKKyAgICAgICAgdGRzZWMgPSBpbnQodGltZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgdGRzZWMgPSAwCisgICAgaG91cnMgPSBpbnQodGRzZWMgLyAzNjAwKQorICAgIHJldHVybiAiJTAyZDolMDJkOiUwMmQiICUgKGhvdXJzLCBpbnQoKHRkc2VjIC0gKGhvdXJzICogMzYwMCkpLyA2MCksIGludCh0ZHNlYykgJSA2MCkKKworCitAcmVnaXN0ZXIuZmlsdGVyKG5hbWUgPSAnZ2V0X3Rhc2tzJykKK2RlZiBnZXRfdGFza3MocXVlcnlzZXQpOgorICAgIHJldHVybiBsaXN0KHRhcmdldCArICc6JyArIHRhc2sgaWYgdGFzayBlbHNlIHRhcmdldCBcCisgICAgICAgICAgICAgICAgICAgIGZvciB0YXJnZXQsIHRhc2sgaW4gcXVlcnlzZXQudmFsdWVzX2xpc3QoJ3RhcmdldCcsICd0YXNrJykpCisKKworQHJlZ2lzdGVyLmZpbHRlcihuYW1lID0gImpzb24iKQorZGVmIGpzb24odmFsdWUsIGRlZmF1bHQgPSBOb25lKToKKyAgICAjIEpTT04gc3BlYyBzYXlzIHRoYXQgIlwvIiBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvICIvIiB0byBhbGxvdyBmb3IgSFRNTC10YWcgZW1iZWRkaW5nIGluIEpTT04gc3RyaW5ncworICAgICMgdW5mb3J0dW5hdGVseSwgSSBjYW4ndCBmaW5kIGFueSBvcHRpb24gaW4gdGhlIGpzb24gbW9kdWxlIHRvIHR1cm4gb24gZm9yd2FyZC1zbGFzaCBlc2NhcGluZywgc28gd2UgZG8KKyAgICAjIGl0IG1hbnVhbGx5IGhlcmUKKyAgICByZXR1cm4gbWFya19zYWZlKEpzb25MaWIuZHVtcHModmFsdWUsIGluZGVudD0yLCBkZWZhdWx0ID0gZGVmYXVsdCwgZW5zdXJlX2FzY2lpPUZhbHNlKS5yZXBsYWNlKCc8LycsICc8XFwvJykpCisKK0ByZWdpc3Rlci5hc3NpZ25tZW50X3RhZworZGVmIHF1ZXJ5KHFzLCAqKmt3YXJncyk6CisgICAgIiIiIHRlbXBsYXRlIHRhZyB3aGljaCBhbGxvd3MgcXVlcnlzZXQgZmlsdGVyaW5nLiBVc2FnZToKKyAgICAgICAgICB7JSBxdWVyeSBib29rcyBhdXRob3I9YXV0aG9yIGFzIG15Ym9va3MgJX0KKyAgICAgICAgICB7JSBmb3IgYm9vayBpbiBteWJvb2tzICV9CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICB7JSBlbmRmb3IgJX0KKyAgICAiIiIKKyAgICByZXR1cm4gcXMuZmlsdGVyKCoqa3dhcmdzKQorCisKK0ByZWdpc3Rlci5maWx0ZXIoIndoaXRlc3BhY2Vfc2xpY2UiKQorZGVmIHdoaXRlc3BhY2Vfc3BhY2VfZmlsdGVyKHZhbHVlLCBhcmcpOgorICAgIHRyeToKKyAgICAgICAgYml0cyA9IFtdCisgICAgICAgIGZvciB4IGluIGFyZy5zcGxpdCgiOiIpOgorICAgICAgICAgICAgaWYgbGVuKHgpID09IDA6CisgICAgICAgICAgICAgICAgYml0cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjb252ZXJ0IG51bWVyaWMgdmFsdWUgdG8gdGhlIGZpcnN0IHdoaXRlc3BhY2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICBmaXJzdF93aGl0ZXNwYWNlID0gdmFsdWUuZmluZCgiICIsIGludCh4KSkKKyAgICAgICAgICAgICAgICBpZiBmaXJzdF93aGl0ZXNwYWNlID09IC0xOgorICAgICAgICAgICAgICAgICAgICBiaXRzLmFwcGVuZChpbnQoeCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYml0cy5hcHBlbmQoZmlyc3Rfd2hpdGVzcGFjZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlW3NsaWNlKCpiaXRzKV0KKyAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgIHJhaXNlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBkaXZpZGUodmFsdWUsIGFyZyk6CisgICAgaWYgaW50KGFyZykgPT0gMDoKKyAgICAgICAgcmV0dXJuIC0xCisgICAgcmV0dXJuIGludCh2YWx1ZSkgLyBpbnQoYXJnKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgbXVsdGlwbHkodmFsdWUsIGFyZyk6CisgICAgcmV0dXJuIGludCh2YWx1ZSkgKiBpbnQoYXJnKQorCitAcmVnaXN0ZXIuYXNzaWdubWVudF90YWcKK2RlZiBkYXRlY29tcHV0ZShkZWx0YSwgc3RhcnQgPSB0aW1lem9uZS5ub3coKSk6CisgICAgcmV0dXJuIHN0YXJ0ICsgdGltZWRlbHRhKGRlbHRhKQorCisKK0ByZWdpc3Rlci5maWx0ZXIobmFtZSA9ICdzb3J0Y29scycpCitkZWYgc29ydGNvbHModGFibGVjb2xzKToKKyAgICByZXR1cm4gc29ydGVkKHRhYmxlY29scywga2V5ID0gbGFtYmRhIHQ6IHRbJ25hbWUnXSkKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIHRhc2tfY29sb3IodGFza19vYmplY3QsIHNob3dfZ3JlZW49RmFsc2UpOgorICAgICIiIiBSZXR1cm4gY3NzIGNsYXNzIGRlcGVuZGluZyBvbiBUYXNrIGV4ZWN1dGlvbiBzdGF0dXMgYW5kIGV4ZWN1dGlvbiBvdXRjb21lLgorICAgICAgICBCeSBkZWZhdWx0LCBncmVlbiBpcyBub3QgcmV0dXJuZWQgZm9yIGV4ZWN1dGVkIGFuZCBzdWNjZXNzZnVsIHRhc2tzOworICAgICAgICBzaG93X2dyZWVuIGFyZ3VtZW50IHNob3VsZCBiZSBUcnVlIHRvIGdldCBncmVlbiBjb2xvci4KKyAgICAiIiIKKyAgICBpZiBub3QgdGFza19vYmplY3QudGFza19leGVjdXRlZDoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1tdXRlZCcKKyAgICBlbGlmIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gdGFza19vYmplY3QuT1VUQ09NRV9GQUlMRUQ6CisgICAgICAgIHJldHVybiAnY2xhc3M9ZXJyb3InCisgICAgZWxpZiB0YXNrX29iamVjdC5vdXRjb21lID09IHRhc2tfb2JqZWN0Lk9VVENPTUVfU1VDQ0VTUyBhbmQgc2hvd19ncmVlbjoKKyAgICAgICAgcmV0dXJuICdjbGFzcz1ncmVlbicKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcmVkX2ljb24ob3B0aW9ucywgZmlsdGVyKToKKyAgICAiIiJSZXR1cm5zIGJ0bi1wcmltYXJ5IGlmIHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbmUgb2YgdGhlIGZpbHRlciBvcHRpb25zCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICJidG4tcHJpbWFyeSIKKyAgICAgICAgaWYgKCdkYXRlcmFuZ2UnID09IG9wdGlvblsxXSkgYW5kIGZpbHRlci5zdGFydHN3aXRoKG9wdGlvbls0XSk6CisgICAgICAgICAgICByZXR1cm4gImJ0bi1wcmltYXJ5IgorICAgIHJldHVybiAiIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfdG9vbHRpcChvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIlJldHVybnMgdG9vbHRpcCBmb3IgdGhlIGZpbHRlciBpY29uIGlmIHRoZSBmaWx0ZXIgbWF0Y2hlcyBvbmUgb2YgdGhlIGZpbHRlciBvcHRpb25zCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICJTaG93aW5nIG9ubHkgJXMiJW9wdGlvblswXQorICAgICAgICBpZiAoJ2RhdGVyYW5nZScgPT0gb3B0aW9uWzFdKSBhbmQgZmlsdGVyLnN0YXJ0c3dpdGgob3B0aW9uWzRdKToKKyAgICAgICAgICAgIHJldHVybiAiU2hvd2luZyBvbmx5ICVzIiVvcHRpb25bMF0KKyAgICByZXR1cm4gIiIKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZvcm1hdF9ub25lX2FuZF96ZXJvKHZhbHVlKToKKyAgICAiIiJSZXR1cm4gZW1wdHkgc3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyBOb25lLCB6ZXJvIG9yIE5vdCBBcHBsaWNhYmxlCisgICAgIiIiCisgICAgcmV0dXJuICIiIGlmIChub3QgdmFsdWUpIG9yICh2YWx1ZSA9PSAwKSBvciAodmFsdWUgPT0gIjAiKSBvciAodmFsdWUgPT0gJ05vdCBBcHBsaWNhYmxlJykgZWxzZSB2YWx1ZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfZmlsZXNpemVmb3JtYXQodmFsdWUpOgorICAgICIiIgorICAgIElmIHRoZSB2YWx1ZSBpcyAtMSByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiBPdGhlcndpc2UsCisgICAgY2hhbmdlIG91dHB1dCBmcm9tIGZpbGVmb3JtYXRzaXplIHRvIHN1cHByZXNzIHRyYWlsaW5nICcuMCcKKyAgICBhbmQgY2hhbmdlICdieXRlcycgdG8gJ0InLgorICAgICIiIgorICAgIGlmIHZhbHVlID09IC0xOgorICAgICAgICByZXR1cm4gJycKKworICAgIHJldHVybiBmaWxlc2l6ZWZvcm1hdCh2YWx1ZSkucmVwbGFjZSgiYnl0ZXMiLCAiQiIpCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBmaWx0ZXJlZF9wYWNrYWdlc3BlYyh2YWx1ZSk6CisgICAgIiIiU3RyaXAgb2ZmIGVtcHR5IHZlcnNpb24gYW5kIHJldmlzaW9uIiIiCisgICAgcmV0dXJuIHJlLnN1YihyJygtLSQpJywgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgY2hlY2tfZmlsdGVyX3N0YXR1cyhvcHRpb25zLCBmaWx0ZXIpOgorICAgICIiIkNoZWNrIGlmIHRoZSBhY3RpdmUgZmlsdGVyIGlzIGFtb25nIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgYW5kIHJldHVybiAnY2hlY2tlZCcKKyAgICAgICBpZiBmaWx0ZXIgaXMgbm90IGFjdGl2ZS4KKyAgICAgICBVc2VkIGluIEZpbHRlckRpYWxvZyB0byBzZWxlY3QgdGhlIGZpcnN0IHJhZGlvIGJ1dHRvbiBpZiB0aGUgZmlsdGVyIGlzIG5vdCBhY3RpdmUuCisgICAgIiIiCisgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgorICAgICAgICBpZiBmaWx0ZXIgPT0gb3B0aW9uWzFdOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICJjaGVja2VkIgorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgdmFyaWFibGVfcGFyZW50X25hbWUodmFsdWUpOgorICAgICIiIiBmaWx0ZXIgZXh0ZW5kZWQgdmFyaWFibGUgbmFtZXMgdG8gdGhlIHBhcmVudCBuYW1lCisgICAgIiIiCisgICAgdmFsdWU9cmUuc3ViKCdfXCQuKicsICcnLCB2YWx1ZSkKKyAgICByZXR1cm4gcmUuc3ViKCdfW2Etel0uKicsICcnLCB2YWx1ZSkKKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcl9zZXRpbl9maWxlcyhmaWxlX2xpc3QsIG1hdGNoc3RyKToKKyAgICAiIiJGaWx0ZXIvc2VhcmNoIHRoZSAnc2V0IGluJyBmaWxlIGxpc3RzLiIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgc2VhcmNoLCBmaWx0ZXIgPSBtYXRjaHN0ci5zcGxpdCgnOicpCisgICAgZm9yIHBhdHRlcm4gaW4gKHNlYXJjaCwgZmlsdGVyKToKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIGZvciBmb2JqIGluIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICBmbmFtZSA9IGZvYmouZmlsZV9uYW1lCisgICAgICAgICAgICAgICAgaWYgZm5hbWUgbm90IGluIHJlc3VsdCBhbmQgcmUuc2VhcmNoKHBhdHRlcm4sIGZuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmbmFtZSkKKworICAgICMgbm8gZmlsdGVyLCBzaG93IGxhc3QgZmlsZSAoaWYgYW55KQorICAgIGxhc3QgPSBsaXN0KGZpbGVfbGlzdClbLTFdLmZpbGVfbmFtZQorICAgIGlmIG5vdCBmaWx0ZXIgYW5kIGxhc3Qgbm90IGluIHJlc3VsdDoKKyAgICAgICAgcmVzdWx0LmFwcGVuZChsYXN0KQorCisgICAgcmV0dXJuIHJlc3VsdAorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgc3RyaW5nX3NsaWNlKHN0cnZhcixzbGljZXZhcik6CisgICAgIiIiIHNsaWNlIGEgc3RyaW5nIHdpdGggfHN0cmluZ19zbGljZTonW2ZpcnN0XTpbbGFzdF0nCisgICAgIiIiCisgICAgZmlyc3QsbGFzdD0gc2xpY2V2YXIucGFydGl0aW9uKCc6JylbOjoyXQorICAgIGlmIGZpcnN0PT0nJzoKKyAgICAgICAgcmV0dXJuIHN0cnZhcls6aW50KGxhc3QpXQorICAgIGVsaWYgbGFzdD09Jyc6CisgICAgICAgIHJldHVybiBzdHJ2YXJbaW50KGZpcnN0KTpdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHN0cnZhcltpbnQoZmlyc3QpOmludChsYXN0KV0KKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIHN0cmluZ19yZW1vdmVfcmVnZXgodmFsdWUsZXgpOgorICAgICIiIiByZW1vdmUgc3ViLXN0cmluZyBvZiBzdHJpbmcgdGhhdCBtYXRjaGVzIHJlZ2V4CisgICAgIiIiCisgICAgcmV0dXJuIHJlLnN1YihleCwgJycsIHZhbHVlKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfaW5zdGFsbGVkc2l6ZShzaXplLCBpbnN0YWxsZWRfc2l6ZSk6CisgICAgIiIiSWYgcGFja2FnZS5pbnN0YWxsZWRfc2l6ZSBub3QgbnVsbCBhbmQgbm90IGVtcHR5IHJldHVybiBpdCwKKyAgICAgICBlbHNlIHJldHVybiBwYWNrYWdlLnNpemUKKyAgICAiIiIKKyAgICByZXR1cm4gc2l6ZSBpZiAoaW5zdGFsbGVkX3NpemUgPT0gMCkgb3IgKGluc3RhbGxlZF9zaXplID09ICIiKSBvciAoaW5zdGFsbGVkX3NpemUgPT0gTm9uZSkgZWxzZSBpbnN0YWxsZWRfc2l6ZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZmlsdGVyZWRfcGFja2FnZXZlcnNpb24odmVyc2lvbiwgcmV2aXNpb24pOgorICAgICIiIiBFbWl0ICJ2ZXJzaW9uLXJldmlzaW9uIiBpZiB2ZXJzaW9uIGFuZCByZXZpc2lvbiBhcmUgbm90IG51bGwKKyAgICAgICAgZWxzZSAidmVyc2lvbiIgaWYgdmVyc2lvbiBpcyBub3QgbnVsbAorICAgICAgICBlbHNlICIiCisgICAgIiIiCisgICAgcmV0dXJuICIiIGlmIChub3QgdmVyc2lvbiBvciB2ZXJzaW9uID09ICIiKSBlbHNlIHZlcnNpb24gaWYgKG5vdCByZXZpc2lvbiBvciByZXZpc2lvbiA9PSAiIikgZWxzZSB2ZXJzaW9uICsgIi0iICsgcmV2aXNpb24KKworQHJlZ2lzdGVyLmZpbHRlcgorZGVmIGZpbHRlcl9zaXplb3ZlcnRvdGFsKHBhY2thZ2Vfb2JqZWN0LCB0b3RhbF9zaXplKToKKyAgICAiIiIgUmV0dXJuIHRoZSAlIHNpemUgb2YgdGhlIHBhY2thZ2Ugb3ZlciB0aGUgdG90YWwgc2l6ZSBhcmd1bWVudAorICAgICAgICBmb3JtYXR0ZWQgbmljZWx5LgorICAgICIiIgorICAgIHNpemUgPSBwYWNrYWdlX29iamVjdC5pbnN0YWxsZWRfc2l6ZQorICAgIGlmIHNpemUgPT0gTm9uZSBvciBzaXplID09ICcnOgorICAgICAgICBzaXplID0gcGFja2FnZV9vYmplY3Quc2l6ZQorCisgICAgcmV0dXJuICd7Oi4xJX0nLmZvcm1hdChmbG9hdChzaXplKS9mbG9hdCh0b3RhbF9zaXplKSkKKworZnJvbSBkamFuZ28udXRpbHMuc2FmZXN0cmluZyBpbXBvcnQgbWFya19zYWZlCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X3ZwYWNrYWdlX3Jvd2NsYXNzKHNpemUpOgorICAgIGlmIHNpemUgPT0gLTE6CisgICAgICAgIHJldHVybiBtYXJrX3NhZmUoJ2NsYXNzPSJtdXRlZCInKQorICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X3ZwYWNrYWdlX25hbWVoZWxwKG5hbWUpOgorICAgIHIgPSAgbmFtZSArICcmbmJzcDsnCisgICAgciArPSAnPGkgY2xhc3M9Imljb24tcXVlc3Rpb24tc2lnbiBnZXQtaGVscCBob3Zlci1oZWxwIicKKyAgICByICs9ICcgdGl0bGUgPSAiJyArIG5hbWUgKyAnIGhhcyBub3QgYmVlbiBidWlsdCI+JworICAgIHIgKz0gJzwvaT4nCisgICAgcmV0dXJuIG1hcmtfc2FmZShyKQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZ2V0X2RpY3RfdmFsdWUoZGljdGlvbmFyeSwga2V5KToKKyAgICAiIiIgcmV0dXJuIHRoZSB2YWx1ZSBvZiBhIGRpY3Rpb25hcnkga2V5CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZGljdGlvbmFyeVtrZXldCisgICAgZXhjZXB0IChLZXlFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgIHJldHVybiAnJworCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgZm9ybWF0X2J1aWxkX2RhdGUoY29tcGxldGVkX29uKToKKyAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgIGRlbHRhID0gbm93IC0gY29tcGxldGVkX29uCisKKyAgICBpZiBkZWx0YS5kYXlzID49IDE6CisgICAgICAgIHJldHVybiBUcnVlCisKK0ByZWdpc3Rlci5maWx0ZXIKK2RlZiBpc19zaGFpZCh0ZXh0KToKKyAgICAiIiIgcmV0dXJuIFRydWUgaWYgdGV4dCBsZW5ndGggaXMgNDAgY2hhcmFjdGVycyBhbmQgYWxsIGhleC1kaWdpdHMKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGludCh0ZXh0LCAxNikKKyAgICAgICAgaWYgbGVuKHRleHQpID09IDQwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCitAcmVnaXN0ZXIuZmlsdGVyCitkZWYgY3V0X3BhdGhfcHJlZml4KGZ1bGxwYXRoLCBwcmVmaXhlcyk6CisgICAgIiIiQ3V0IHBhdGggcHJlZml4IGZyb20gZnVsbHBhdGguIiIiCisgICAgZm9yIHByZWZpeCBpbiBwcmVmaXhlczoKKyAgICAgICAgaWYgZnVsbHBhdGguc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgcmV0dXJuIHJlbHBhdGgoZnVsbHBhdGgsIHByZWZpeCkKKyAgICByZXR1cm4gZnVsbHBhdGgKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZXN0cy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThiNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3Rlc3RzLnB5CkBAIC0wLDAgKzEsMjk0IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIlRlc3QgY2FzZXMgZm9yIFRvYXN0ZXIgR1VJIGFuZCBSZVNULiIiIgorCitmcm9tIGRqYW5nby50ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCB0aW1lem9uZQorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBQcm9qZWN0LCBSZWxlYXNlLCBCaXRiYWtlVmVyc2lvbiwgQnVpbGQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUmVsZWFzZUxheWVyU291cmNlUHJpb3JpdHksIExheWVyU291cmNlLCBMYXllcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBMYXllcl9WZXJzaW9uLCBSZWNpcGUsIE1hY2hpbmUsIFByb2plY3RMYXllcgoraW1wb3J0IGpzb24KKworUFJPSkVDVF9OQU1FID0gInRlc3QgcHJvamVjdCIKKworY2xhc3MgVmlld1Rlc3RzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0byB2ZXJpZnkgdmlldyBBUElzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBiYnYgPSBCaXRiYWtlVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShuYW1lPSJ0ZXN0IGJidiIsIGdpdHVybD0iL3RtcC8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2g9Im1hc3RlciIsIGRpcnBhdGg9IiIpCisgICAgICAgIHJlbGVhc2UgPSBSZWxlYXNlLm9iamVjdHMuY3JlYXRlKG5hbWU9InRlc3QgcmVsZWFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGJha2VfdmVyc2lvbj1iYnYpCisgICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdChuYW1lPVBST0pFQ1RfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2U9cmVsZWFzZSkKKworICAgICAgICBsYXllcnNyYyA9IExheWVyU291cmNlLm9iamVjdHMuY3JlYXRlKHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKKyAgICAgICAgc2VsZi5wcmlvcml0eSA9IFJlbGVhc2VMYXllclNvdXJjZVByaW9yaXR5Lm9iamVjdHMuY3JlYXRlKHJlbGVhc2U9cmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1sYXllcnNyYykKKyAgICAgICAgbGF5ZXIgPSBMYXllci5vYmplY3RzLmNyZWF0ZShuYW1lPSJiYXNlLWxheWVyIiwgbGF5ZXJfc291cmNlPWxheWVyc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjc191cmw9Ii90bXAvIikKKworICAgICAgICBsdmVyID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmNyZWF0ZShsYXllcj1sYXllciwgcHJvamVjdD1zZWxmLnByb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3NvdXJjZT1sYXllcnNyYywgY29tbWl0PSJtYXN0ZXIiKQorCisgICAgICAgIFJlY2lwZS5vYmplY3RzLmNyZWF0ZShsYXllcl9zb3VyY2U9bGF5ZXJzcmMsIG5hbWU9ImJhc2UtcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249IjEuMiIsIHN1bW1hcnk9Im9uZSByZWNpcGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249InJlY2lwZSIsIGxheWVyX3ZlcnNpb249bHZlcikKKworICAgICAgICBNYWNoaW5lLm9iamVjdHMuY3JlYXRlKGxheWVyX3ZlcnNpb249bHZlciwgbmFtZT0id2lzayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Indpc2tpbmcgbWFjaGluZSIpCisKKyAgICAgICAgUHJvamVjdExheWVyLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LCBsYXllcmNvbW1pdD1sdmVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsdmVyIGluIHNlbGYucHJvamVjdC5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMoKSkKKworICAgIGRlZiB0ZXN0X2dldF9iYXNlX2NhbGxfcmV0dXJuc19odG1sKHNlbGYpOgorICAgICAgICAiIiJCYXNpYyB0ZXN0IGZvciBhbGwtcHJvamVjdHMgdmlldyIiIgorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSwgZm9sbG93PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlWydDb250ZW50LVR5cGUnXS5zdGFydHN3aXRoKCd0ZXh0L2h0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUZW1wbGF0ZVVzZWQocmVzcG9uc2UsICJwcm9qZWN0cy5odG1sIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBST0pFQ1RfTkFNRSBpbiByZXNwb25zZS5jb250ZW50KQorCisgICAgZGVmIHRlc3RfZ2V0X2pzb25fY2FsbF9yZXR1cm5zX2pzb24oc2VsZik6CisgICAgICAgICIiIlRlc3QgZm9yIGFsbCBwcm9qZWN0cyBvdXRwdXQgaW4ganNvbiBmb3JtYXQiIiIKKyAgICAgICAgdXJsID0gcmV2ZXJzZSgnYWxsLXByb2plY3RzJykKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQodXJsLCB7ImZvcm1hdCI6ICJqc29uIn0sIGZvbGxvdz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZVsnQ29udGVudC1UeXBlJ10uc3RhcnRzd2l0aCgnYXBwbGljYXRpb24vanNvbicpKQorCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJlcnJvciIgaW4gZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInJvd3MiIGluIGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBST0pFQ1RfTkFNRSBpbiBbeFsibmFtZSJdIGZvciB4IGluIGRhdGFbInJvd3MiXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiaWQiIGluIGRhdGFbInJvd3MiXVswXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChkYXRhWyJyb3dzIl1bMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYml0YmFrZV92ZXJzaW9uX2lkJywgJ2NyZWF0ZWQnLCAnaWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfZGVmYXVsdCcsICdsYXllcnNUeXBlQWhlYWRVcmwnLCAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1fYnVpbGRzJywgJ3Byb2plY3RCdWlsZHNVcmwnLCAncHJvamVjdFBhZ2VVcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAncmVjaXBlc1R5cGVBaGVhZFVybCcsICdyZWxlYXNlX2lkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3J0X2Rlc2NyaXB0aW9uJywgJ3VwZGF0ZWQnLCAndXNlcl9pZCddKQorCisgICAgZGVmIHRlc3RfdHlwZWFoZWFkcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0eXBlYWhlYWQgUmVTVCBBUEkiIiIKKyAgICAgICAgbGF5ZXJzX3VybCA9IHJldmVyc2UoJ3hocl9sYXllcnN0eXBlYWhlYWQnLCBhcmdzPShzZWxmLnByb2plY3QuaWQsKSkKKyAgICAgICAgcHJqX3VybCA9IHJldmVyc2UoJ3hocl9wcm9qZWN0c3R5cGVhaGVhZCcpCisKKyAgICAgICAgdXJscyA9IFtsYXllcnNfdXJsLAorICAgICAgICAgICAgICAgIHByal91cmwsCisgICAgICAgICAgICAgICAgcmV2ZXJzZSgneGhyX3JlY2lwZXN0eXBlYWhlYWQnLCBhcmdzPShzZWxmLnByb2plY3QuaWQsKSksCisgICAgICAgICAgICAgICAgcmV2ZXJzZSgneGhyX21hY2hpbmVzdHlwZWFoZWFkJywgYXJncz0oc2VsZi5wcm9qZWN0LmlkLCkpLAorICAgICAgICAgICAgICAgXQorCisgICAgICAgIGRlZiBiYXNpY19yZXBvbnNlX2NoZWNrKHJlc3BvbnNlLCB1cmwpOgorICAgICAgICAgICAgIiIiQ2hlY2sgZGF0YSBzdHJ1Y3R1cmUgb2YgaHR0cCByZXNwb25zZS4iIiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZVsnQ29udGVudC1UeXBlJ10uc3RhcnRzd2l0aCgnYXBwbGljYXRpb24vanNvbicpKQorCisgICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5jb250ZW50KQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoImVycm9yIiBpbiBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJyZXN1bHRzIiBpbiBkYXRhKQorCisgICAgICAgICAgICAjIFdlIGdvdCBhIHJlc3VsdCBzbyBub3cgY2hlY2sgdGhlIGZpZWxkcworICAgICAgICAgICAgaWYgbGVuKGRhdGFbJ3Jlc3VsdHMnXSkgPiAwOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ3Jlc3VsdHMnXVswXQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ25hbWUnXSkgPiAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZGV0YWlsIiBpbiByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFsnaWQnXSA+IDApCisKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgY2hlY2sgZm9yIHRoZSBsYXllcnMgdHlwZWFoZWFkJ3MgZXh0cmEgZmllbGRzCisgICAgICAgICAgICAgICAgaWYgdXJsID09IGxheWVyc191cmw6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocmVzdWx0WydsYXllcmRldGFpbHVybCddKSA+IDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocmVzdWx0Wyd2Y3NfdXJsJ10pID4gMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ3Zjc19yZWZlcmVuY2UnXSkgPiAwKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBjaGVjayBmb3IgcHJvamVjdCB0eXBlYWhlYWQgZXh0cmEgZmllbGRzCisgICAgICAgICAgICAgICAgZWxpZiB1cmwgPT0gcHJqX3VybDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXN1bHRbJ3Byb2plY3RQYWdlVXJsJ10pID4gMCkKKworICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGltcG9ydCBzdHJpbmcKKworICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByZXN1bHRzID0gRmFsc2UKKworICAgICAgICAgICAgZm9yIHR5cGVpbmcgaW4gbGlzdChzdHJpbmcuYXNjaWlfbGV0dGVycyk6CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQodXJsLCB7J3NlYXJjaCc6IHR5cGVpbmd9KQorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBiYXNpY19yZXBvbnNlX2NoZWNrKHJlc3BvbnNlLCB1cmwpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBBZnRlciAidHlwZWluZyIgdGhlIGFscGFiZXQgd2Ugc2hvdWxkIGhhdmUgcmVzdWx0IHRydWUKKyAgICAgICAgICAgICMgZnJvbSBlYWNoIG9mIHRoZSB1cmxzCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0cykKKworICAgIGRlZiB0ZXN0X3hocl9pbXBvcnRfbGF5ZXIoc2VsZik6CisgICAgICAgICIiIlRlc3QgeGhyX2ltcG9ydGxheWVyIEFQSSIiIgorICAgICAgICAjVGVzdCBmb3IgaW1wb3J0aW5nIGFuIGFscmVhZHkgZXhpc3RpbmcgbGF5ZXIKKyAgICAgICAgYXJncyA9IHsndmNzX3VybCcgOiAiZ2l0Oi8vZ2l0LmV4YW1wbGUuY29tL3Rlc3QiLAorICAgICAgICAgICAgICAgICduYW1lJyA6ICJiYXNlLWxheWVyIiwKKyAgICAgICAgICAgICAgICAnZ2l0X3JlZic6ICJjMTJiOTU5NmFmZDIzNjExNmIyNWNlMjZkYmUwZDc5M2RlOWRjN2NlIiwKKyAgICAgICAgICAgICAgICAncHJvamVjdF9pZCc6IDEsICdkaXJfcGF0aCcgOiAiL3BhdGgvaW4vcmVwb3NpdG9yeSJ9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGFbImVycm9yIl0sICJvayIpCisKKyAgICAgICAgI1Rlc3QgdG8gdmVyaWZ5IGltcG9ydCBvZiBhIGxheWVyIHN1Y2Nlc3NmdWwKKyAgICAgICAgYXJnc1snbmFtZSddID0gIm1ldGEtb2UiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGFbImVycm9yIl0sICJvayIpCisKKyAgICAgICAgI1Rlc3QgZm9yIGh0bWwgdGFnIGluIHRoZSBkYXRhCisgICAgICAgIGFyZ3NbJzwnXSA9ICJ0ZXN0aW5nIGh0bWwgdGFnIgorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnBvc3QocmV2ZXJzZSgneGhyX2ltcG9ydGxheWVyJyksIGFyZ3MpCisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHJlc3BvbnNlLmNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YVsiZXJyb3IiXSwgIm9rIikKKworICAgICAgICAjRW1wdHkgZGF0YSBwYXNzZWQKKyAgICAgICAgYXJncyA9IHt9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQucG9zdChyZXZlcnNlKCd4aHJfaW1wb3J0bGF5ZXInKSwgYXJncykKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhWyJlcnJvciJdLCAib2siKQorCitjbGFzcyBMYW5kaW5nUGFnZVRlc3RzKFRlc3RDYXNlKToKKyAgICAiIiIgVGVzdHMgZm9yIHJlZGlyZWN0cyBvbiB0aGUgbGFuZGluZyBwYWdlICIiIgorICAgICMgZGlzYWJsZSBib2d1cyBweWxpbnQgbWVzc2FnZSBlcnJvcjoKKyAgICAjICJJbnN0YW5jZSBvZiAnV1NHSVJlcXVlc3QnIGhhcyBubyAndXJsJyBtZW1iZXIgKG5vLW1lbWJlcikiCisgICAgIyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5kc2NhcGVpby9weWxpbnQtZGphbmdvL2lzc3Vlcy80MikKKyAgICAjIHB5bGludDogZGlzYWJsZT1FMTEwMworCisgICAgTEFORElOR19QQUdFX1RJVExFID0gJ1RoaXMgaXMgVG9hc3RlcicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiIEFkZCBkZWZhdWx0IHByb2plY3QgbWFudWFsbHkgIiIiCisgICAgICAgIHNlbGYucHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgnZm9vJywgTm9uZSkKKyAgICAgICAgc2VsZi5wcm9qZWN0LmlzX2RlZmF1bHQgPSBUcnVlCisgICAgICAgIHNlbGYucHJvamVjdC5zYXZlKCkKKworICAgIGRlZiB0ZXN0X29ubHlfZGVmYXVsdF9wcm9qZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTm8gcHJvamVjdHMgZXhjZXB0IGRlZmF1bHQKKyAgICAgICAgPT4gZ2V0IHRoZSBsYW5kaW5nIHBhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2xhbmRpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuTEFORElOR19QQUdFX1RJVExFIGluIHJlc3BvbnNlLmNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3Byb2plY3RfaGFzX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVmYXVsdCBwcm9qZWN0IGhhcyBhIGJ1aWxkLCBubyBvdGhlciBwcm9qZWN0cworICAgICAgICA9PiBnZXQgdGhlIGJ1aWxkcyBwYWdlCisgICAgICAgICIiIgorICAgICAgICBub3cgPSB0aW1lem9uZS5ub3coKQorICAgICAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuY3JlYXRlKHByb2plY3Q9c2VsZi5wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3cpCisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2xhbmRpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMzAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNwb25zZSBzaG91bGQgYmUgYSByZWRpcmVjdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnL2J1aWxkcycgaW4gcmVzcG9uc2UudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCByZWRpcmVjdCB0byBidWlsZHMnKQorCisgICAgZGVmIHRlc3RfdXNlcl9wcm9qZWN0X2V4aXN0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZXIgaGFzIGFkZGVkIGEgcHJvamVjdCAod2l0aG91dCBidWlsZHMpCisgICAgICAgID0+IGdldCB0aGUgcHJvamVjdHMgcGFnZQorICAgICAgICAiIiIKKyAgICAgICAgdXNlcl9wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KCdmb28nLCBOb25lKQorICAgICAgICB1c2VyX3Byb2plY3Quc2F2ZSgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlIHNob3VsZCBiZSBhIHJlZGlyZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvcHJvamVjdHMnIGluIHJlc3BvbnNlLnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmVkaXJlY3QgdG8gcHJvamVjdHMnKQorCisgICAgZGVmIHRlc3RfdXNlcl9wcm9qZWN0X2hhc19idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFVzZXIgaGFzIGFkZGVkIGEgcHJvamVjdCAod2l0aCBidWlsZHMpCisgICAgICAgID0+IGdldCB0aGUgYnVpbGRzIHBhZ2UKKyAgICAgICAgIiIiCisgICAgICAgIHVzZXJfcHJvamVjdCA9IFByb2plY3Qub2JqZWN0cy5jcmVhdGVfcHJvamVjdCgnZm9vJywgTm9uZSkKKyAgICAgICAgdXNlcl9wcm9qZWN0LnNhdmUoKQorCisgICAgICAgIG5vdyA9IHRpbWV6b25lLm5vdygpCisgICAgICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5jcmVhdGUocHJvamVjdD11c2VyX3Byb2plY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9vbj1ub3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uPW5vdykKKyAgICAgICAgYnVpbGQuc2F2ZSgpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXQocmV2ZXJzZSgnbGFuZGluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3BvbnNlIHNob3VsZCBiZSBhIHJlZGlyZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvYnVpbGRzJyBpbiByZXNwb25zZS51cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHJlZGlyZWN0IHRvIGJ1aWxkcycpCisKK2NsYXNzIFByb2plY3RzUGFnZVRlc3RzKFRlc3RDYXNlKToKKyAgICAiIiIgVGVzdHMgZm9yIHByb2plY3RzIHBhZ2UgIiIiCisKKyAgICBQUk9KRUNUX05BTUUgPSAnY2xpIGJ1aWxkcycKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiIEFkZCBkZWZhdWx0IHByb2plY3QgbWFudWFsbHkgIiIiCisgICAgICAgIHByb2plY3QgPSBQcm9qZWN0Lm9iamVjdHMuY3JlYXRlX3Byb2plY3Qoc2VsZi5QUk9KRUNUX05BTUUsIE5vbmUpCisgICAgICAgIHNlbGYuZGVmYXVsdF9wcm9qZWN0ID0gcHJvamVjdAorICAgICAgICBzZWxmLmRlZmF1bHRfcHJvamVjdC5pc19kZWZhdWx0ID0gVHJ1ZQorICAgICAgICBzZWxmLmRlZmF1bHRfcHJvamVjdC5zYXZlKCkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvamVjdF9oaWRkZW4oc2VsZik6CisgICAgICAgICIiIiBUaGUgZGVmYXVsdCBwcm9qZWN0IHNob3VsZCBiZSBoaWRkZW4gaWYgaXQgaGFzIG5vIGJ1aWxkcyAiIiIKKyAgICAgICAgcGFyYW1zID0geyJjb3VudCI6IDEwLCAib3JkZXJieSI6ICJ1cGRhdGVkOi0iLCAicGFnZSI6IDF9CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0KHJldmVyc2UoJ2FsbC1wcm9qZWN0cycpLCBwYXJhbXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCgndHIgY2xhc3M9ImRhdGEiJyBpbiByZXNwb25zZS5jb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgbm8gcHJvamVjdCByb3dzIGluIHRoZSBwYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdChzZWxmLlBST0pFQ1RfTkFNRSBpbiByZXNwb25zZS5jb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0IHByb2plY3QgImNsaSBidWlsZHMiIHNob3VsZCBub3QgYmUgaW4gcGFnZScpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3Byb2plY3RfaGFzX2J1aWxkKHNlbGYpOgorICAgICAgICAiIiIgVGhlIGRlZmF1bHQgcHJvamVjdCBzaG91bGQgYmUgc2hvd24gaWYgaXQgaGFzIGJ1aWxkcyAiIiIKKyAgICAgICAgbm93ID0gdGltZXpvbmUubm93KCkKKyAgICAgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmNyZWF0ZShwcm9qZWN0PXNlbGYuZGVmYXVsdF9wcm9qZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb249bm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbj1ub3cpCisgICAgICAgIGJ1aWxkLnNhdmUoKQorCisgICAgICAgIHBhcmFtcyA9IHsiY291bnQiOiAxMCwgIm9yZGVyYnkiOiAidXBkYXRlZDotIiwgInBhZ2UiOiAxfQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSwgcGFyYW1zKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndHIgY2xhc3M9ImRhdGEiJyBpbiByZXNwb25zZS5jb250ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBhIHByb2plY3Qgcm93IGluIHRoZSBwYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuUFJPSkVDVF9OQU1FIGluIHJlc3BvbnNlLmNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdCBwcm9qZWN0ICJjbGkgYnVpbGRzIiBzaG91bGQgYmUgaW4gcGFnZScpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS90eXBlYWhlYWRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YmVjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvdHlwZWFoZWFkcy5weQpAQCAtMCwwICsxLDE0NSBAQAorIworIyBCaXRCYWtlIFRvYXN0ZXIgSW1wbGVtZW50YXRpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1ICAgICAgICBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSB0b2FzdGVyZ3VpLndpZGdldHMgaW1wb3J0IFRvYXN0ZXJUeXBlQWhlYWQKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgUHJvamVjdAorZnJvbSBkamFuZ28uY29yZS51cmxyZXNvbHZlcnMgaW1wb3J0IHJldmVyc2UKKworY2xhc3MgTGF5ZXJzVHlwZUFoZWFkKFRvYXN0ZXJUeXBlQWhlYWQpOgorICAgICIiIiBUeXBlYWhlYWQgZm9yIGxheWVycyBhdmFpbGFibGUgYW5kIG5vdCBhZGRlZCBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyAgICBjb25maWd1cmF0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgIHN1cGVyKExheWVyc1R5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KToKKyAgICAgICAgbGF5ZXJzID0gcHJqLmNvbXBhdGlibGVfbGF5ZXJ2ZXJzaW9ucygpCisgICAgICAgIGxheWVycyA9IGxheWVycy5vcmRlcl9ieSgnbGF5ZXJfX25hbWUnKQorCisgICAgICAgICMgVW5saWtlIHRoZSBvdGhlciB0eXBlYWhlYWRzIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBzaG93IHN1Z2dlc3Rpb25zCisgICAgICAgICMgZm9yIGxheWVycyBhbHJlYWR5IGluIHRoZSBwcm9qZWN0IHVubGVzcyByZXF1aXJlZCBzdWNoIGFzIHdoZW4gYWRkaW5nCisgICAgICAgICMgbGF5ZXJkZXBzIHRvIGEgbmV3IGxheWVyLgorICAgICAgICBpZiAoImluY2x1ZGVfYWRkZWQiIGluIHJlcXVlc3QuR0VUIGFuZAorICAgICAgICAgICAgICAgIHJlcXVlc3QuR0VUWydpbmNsdWRlX2FkZGVkJ10gIT0gInRydWUiKToKKyAgICAgICAgICAgIGxheWVycyA9IGxheWVycy5leGNsdWRlKHBrX19pbj1wcmoucHJvamVjdGxheWVyX2VxdWl2YWxlbnRfc2V0KQorCisgICAgICAgIHByaW1hcnlfcmVzdWx0cyA9IGxheWVycy5maWx0ZXIobGF5ZXJfX25hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IGxheWVycy5maWx0ZXIobGF5ZXJfX25hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGZvciBsYXllcl92ZXJzaW9uIGluIGxpc3QocHJpbWFyeV9yZXN1bHRzKSArIGxpc3Qoc2Vjb25kYXJ5X3Jlc3VsdHMpOgorICAgICAgICAgICAgdmNzX3JlZmVyZW5jZSA9IGxheWVyX3ZlcnNpb24uZ2V0X3Zjc19yZWZlcmVuY2UoKQorCisgICAgICAgICAgICBkZXRhaWwgPSAiWyAlcyB8ICVzIF0iICUgKGxheWVyX3ZlcnNpb24ubGF5ZXIudmNzX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNzX3JlZmVyZW5jZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IGxheWVyX3ZlcnNpb24ucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogbGF5ZXJfdmVyc2lvbi5sYXllci5uYW1lLAorICAgICAgICAgICAgICAgICdsYXllcmRldGFpbHVybCcgOiBsYXllcl92ZXJzaW9uLmdldF9kZXRhaWxzcGFnZV91cmwocHJqLnBrKSwKKyAgICAgICAgICAgICAgICAndmNzX3VybCcgOiBsYXllcl92ZXJzaW9uLmxheWVyLnZjc191cmwsCisgICAgICAgICAgICAgICAgJ3Zjc19yZWZlcmVuY2UnIDogdmNzX3JlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAnZGV0YWlsJyA6IGRldGFpbCwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobmVlZGVkX2ZpZWxkcykKKworICAgICAgICByZXR1cm4gcmVzdWx0cworCitjbGFzcyBNYWNoaW5lc1R5cGVBaGVhZChUb2FzdGVyVHlwZUFoZWFkKToKKyAgICAiIiIgVHlwZWFoZWFkIGZvciBhbGwgdGhlIG1hY2hpbmVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyAgICBjb25maWd1cmF0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoTWFjaGluZXNUeXBlQWhlYWQsIHNlbGYpLl9faW5pdF9fKCkKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaiwgcmVxdWVzdCk6CisgICAgICAgIG1hY2hpbmVzID0gcHJqLmdldF9hdmFpbGFibGVfbWFjaGluZXMoKQorICAgICAgICBtYWNoaW5lcyA9IG1hY2hpbmVzLm9yZGVyX2J5KCJuYW1lIikKKworICAgICAgICBwcmltYXJ5X3Jlc3VsdHMgPSBtYWNoaW5lcy5maWx0ZXIobmFtZV9faXN0YXJ0c3dpdGg9c2VhcmNoX3Rlcm0pCisgICAgICAgIHNlY29uZGFyeV9yZXN1bHRzID0gbWFjaGluZXMuZmlsdGVyKG5hbWVfX2ljb250YWlucz1zZWFyY2hfdGVybSkuZXhjbHVkZShwa19faW49cHJpbWFyeV9yZXN1bHRzKQorICAgICAgICB0ZXJ0aWFyeV9yZXN1bHRzID0gbWFjaGluZXMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykuZXhjbHVkZShwa19faW49c2Vjb25kYXJ5X3Jlc3VsdHMpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZm9yIG1hY2hpbmUgaW4gbGlzdChwcmltYXJ5X3Jlc3VsdHMpICsgbGlzdChzZWNvbmRhcnlfcmVzdWx0cykgKyBsaXN0KHRlcnRpYXJ5X3Jlc3VsdHMpOgorCisgICAgICAgICAgICBkZXRhaWwgPSAiWyAlcyBdIiAlIChtYWNoaW5lLmxheWVyX3ZlcnNpb24ubGF5ZXIubmFtZSkKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IG1hY2hpbmUucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogbWFjaGluZS5uYW1lLAorICAgICAgICAgICAgICAgICdkZXRhaWwnIDogZGV0YWlsLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChuZWVkZWRfZmllbGRzKQorCisgICAgICAgIHJldHVybiByZXN1bHRzCisKK2NsYXNzIFJlY2lwZXNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CisgICAgIiIiIFR5cGVhaGVhZCBmb3IgYWxsIHRoZSByZWNpcGVzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBwcm9qZWN0J3MKKyAgICBjb25maWd1cmF0aW9uICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoUmVjaXBlc1R5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGFwcGx5X3NlYXJjaChzZWxmLCBzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KToKKyAgICAgICAgcmVjaXBlcyA9IHByai5nZXRfYXZhaWxhYmxlX3JlY2lwZXMoKQorICAgICAgICByZWNpcGVzID0gcmVjaXBlcy5vcmRlcl9ieSgibmFtZSIpCisKKworICAgICAgICBwcmltYXJ5X3Jlc3VsdHMgPSByZWNpcGVzLmZpbHRlcihuYW1lX19pc3RhcnRzd2l0aD1zZWFyY2hfdGVybSkKKyAgICAgICAgc2Vjb25kYXJ5X3Jlc3VsdHMgPSByZWNpcGVzLmZpbHRlcihuYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykKKyAgICAgICAgdGVydGlhcnlfcmVzdWx0cyA9IHJlY2lwZXMuZmlsdGVyKGxheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykuZXhjbHVkZShwa19faW49c2Vjb25kYXJ5X3Jlc3VsdHMpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZm9yIHJlY2lwZSBpbiBsaXN0KHByaW1hcnlfcmVzdWx0cykgKyBsaXN0KHNlY29uZGFyeV9yZXN1bHRzKSArIGxpc3QodGVydGlhcnlfcmVzdWx0cyk6CisKKyAgICAgICAgICAgIGRldGFpbCA9ICJbICVzIF0iICUgKHJlY2lwZS5sYXllcl92ZXJzaW9uLmxheWVyLm5hbWUpCisgICAgICAgICAgICBuZWVkZWRfZmllbGRzID0geworICAgICAgICAgICAgICAgICdpZCcgOiByZWNpcGUucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogcmVjaXBlLm5hbWUsCisgICAgICAgICAgICAgICAgJ2RldGFpbCcgOiBkZXRhaWwsCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5lZWRlZF9maWVsZHMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworY2xhc3MgUHJvamVjdHNUeXBlQWhlYWQoVG9hc3RlclR5cGVBaGVhZCk6CisgICAgIiIiIFR5cGVhaGVhZCBmb3IgYWxsIHRoZSBwcm9qZWN0cyAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKFByb2plY3RzVHlwZUFoZWFkLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtLCBwcmosIHJlcXVlc3QpOgorICAgICAgICBwcm9qZWN0cyA9IFByb2plY3Qub2JqZWN0cy5hbGwoKS5vcmRlcl9ieSgibmFtZSIpCisKKyAgICAgICAgcHJpbWFyeV9yZXN1bHRzID0gcHJvamVjdHMuZmlsdGVyKG5hbWVfX2lzdGFydHN3aXRoPXNlYXJjaF90ZXJtKQorICAgICAgICBzZWNvbmRhcnlfcmVzdWx0cyA9IHByb2plY3RzLmZpbHRlcihuYW1lX19pY29udGFpbnM9c2VhcmNoX3Rlcm0pLmV4Y2x1ZGUocGtfX2luPXByaW1hcnlfcmVzdWx0cykKKworICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBmb3IgcHJvamVjdCBpbiBsaXN0KHByaW1hcnlfcmVzdWx0cykgKyBsaXN0KHNlY29uZGFyeV9yZXN1bHRzKToKKyAgICAgICAgICAgIG5lZWRlZF9maWVsZHMgPSB7CisgICAgICAgICAgICAgICAgJ2lkJyA6IHByb2plY3QucGssCisgICAgICAgICAgICAgICAgJ25hbWUnIDogcHJvamVjdC5uYW1lLAorICAgICAgICAgICAgICAgICdkZXRhaWwnIDogIiIsCisgICAgICAgICAgICAgICAgJ3Byb2plY3RQYWdlVXJsJyA6IHJldmVyc2UoJ3Byb2plY3QnLCBhcmdzPShwcm9qZWN0LnBrLCkpCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5lZWRlZF9maWVsZHMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3VybHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlNTc2MQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS91cmxzLnB5CkBAIC0wLDAgKzEsMTUzIEBACisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHBhdHRlcm5zLCBpbmNsdWRlLCB1cmwKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldywgVGVtcGxhdGVWaWV3CisKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZUJhZFJlcXVlc3QKK2Zyb20gdG9hc3Rlcmd1aSBpbXBvcnQgdGFibGVzCitmcm9tIHRvYXN0ZXJndWkgaW1wb3J0IHR5cGVhaGVhZHMKKwordXJscGF0dGVybnMgPSBwYXR0ZXJucygndG9hc3Rlcmd1aS52aWV3cycsCisgICAgICAgICMgbGFuZGluZyBwYWdlCisgICAgICAgIHVybChyJ15sYW5kaW5nLyQnLCAnbGFuZGluZycsIG5hbWU9J2xhbmRpbmcnKSwKKworICAgICAgICB1cmwocideYnVpbGRzLyQnLCAnYnVpbGRzJywgbmFtZT0nYWxsLWJ1aWxkcycpLAorICAgICAgICAjIGJ1aWxkIGluZm8gbmF2aWdhdGlvbgorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykkJywgJ2J1aWxkZGFzaGJvYXJkJywgbmFtZT0iYnVpbGRkYXNoYm9hcmQiKSwKKworICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFza3MvJCcsICd0YXNrcycsIG5hbWU9J3Rhc2tzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXNrcy8oP1A8dGFza19pZD5cZCspLyQnLCAndGFza3NfdGFzaycsIG5hbWU9J3Rhc2tzX3Rhc2snKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3Rhc2svKD9QPHRhc2tfaWQ+XGQrKSQnLCAndGFzaycsIG5hbWU9J3Rhc2snKSwKKworICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlcy8kJywgJ3JlY2lwZXMnLCBuYW1lPSdyZWNpcGVzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9yZWNpcGUvKD9QPHJlY2lwZV9pZD5cZCspL2FjdGl2ZV90YWIvKD9QPGFjdGl2ZV90YWI+XGR7MX0pJCcsICdyZWNpcGUnLCBuYW1lPSdyZWNpcGUnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3JlY2lwZS8oP1A8cmVjaXBlX2lkPlxkKykkJywgJ3JlY2lwZScsIG5hbWU9J3JlY2lwZScpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcmVjaXBlX3BhY2thZ2VzLyg/UDxyZWNpcGVfaWQ+XGQrKSQnLCAncmVjaXBlX3BhY2thZ2VzJywgbmFtZT0ncmVjaXBlX3BhY2thZ2VzJyksCisKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VzLyQnLCAnYnBhY2thZ2UnLCBuYW1lPSdwYWNrYWdlcycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZS8oP1A8cGFja2FnZV9pZD5cZCspJCcsICdwYWNrYWdlX2J1aWx0X2RldGFpbCcsCisgICAgICAgICAgICAgICAgbmFtZT0ncGFja2FnZV9idWlsdF9kZXRhaWwnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLyg/UDxwYWNrYWdlX2lkPlxkKykkJywKKyAgICAgICAgICAgICdwYWNrYWdlX2J1aWx0X2RlcGVuZGVuY2llcycsIG5hbWU9J3BhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9wYWNrYWdlX2luY2x1ZGVkX2RldGFpbC8oP1A8dGFyZ2V0X2lkPlxkKykvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ3BhY2thZ2VfaW5jbHVkZWRfZGV0YWlsJywgbmFtZT0ncGFja2FnZV9pbmNsdWRlZF9kZXRhaWwnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3BhY2thZ2VfaW5jbHVkZWRfZGVwZW5kZW5jaWVzLyg/UDx0YXJnZXRfaWQ+XGQrKS8oP1A8cGFja2FnZV9pZD5cZCspJCcsCisgICAgICAgICAgICAncGFja2FnZV9pbmNsdWRlZF9kZXBlbmRlbmNpZXMnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcycpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvcGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy8oP1A8dGFyZ2V0X2lkPlxkKykvKD9QPHBhY2thZ2VfaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ3BhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMnLCBuYW1lPSdwYWNrYWdlX2luY2x1ZGVkX3JldmVyc2VfZGVwZW5kZW5jaWVzJyksCisKKyAgICAgICAgIyBpbWFnZXMgYXJlIGtub3duIGFzIHRhcmdldHMgaW4gdGhlIGludGVybmFsIG1vZGVsCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspJCcsICd0YXJnZXQnLCBuYW1lPSd0YXJnZXQnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykvdGFyZ2V0cGtnJCcsICd0YXJnZXRwa2cnLCBuYW1lPSd0YXJnZXRwa2cnKSwKKyAgICAgICAgdXJsKHInXmRlbnRyaWVzL2J1aWxkLyg/UDxidWlsZF9pZD5cZCspL3RhcmdldC8oP1A8dGFyZ2V0X2lkPlxkKykkJywgJ3hocl9kaXJpbmZvJywgbmFtZT0nZGlyaW5mb19hamF4JyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL2RpcmluZm8kJywgJ2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS90YXJnZXQvKD9QPHRhcmdldF9pZD5cZCspL2RpcmluZm9fZmlsZXBhdGgvXyg/UDxmaWxlX3BhdGg+KD86L1teL1xuXSspKikkJywgJ2RpcmluZm8nLCBuYW1lPSdkaXJpbmZvX2ZpbGVwYXRoJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jb25maWd1cmF0aW9uJCcsICdjb25maWd1cmF0aW9uJywgbmFtZT0nY29uZmlndXJhdGlvbicpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvY29uZmlndmFycyQnLCAnY29uZmlndmFycycsIG5hbWU9J2NvbmZpZ3ZhcnMnKSwKKyAgICAgICAgdXJsKHInXmJ1aWxkLyg/UDxidWlsZF9pZD5cZCspL2J1aWxkdGltZSQnLCAnYnVpbGR0aW1lJywgbmFtZT0nYnVpbGR0aW1lJyksCisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9jcHV1c2FnZSQnLCAnY3B1dXNhZ2UnLCBuYW1lPSdjcHV1c2FnZScpLAorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvZGlza2lvJCcsICdkaXNraW8nLCBuYW1lPSdkaXNraW8nKSwKKworICAgICAgICAjIGltYWdlIGluZm9ybWF0aW9uIGRpcgorICAgICAgICB1cmwocideYnVpbGQvKD9QPGJ1aWxkX2lkPlxkKykvdGFyZ2V0Lyg/UDx0YXJnZXRfaWQ+XGQrKS9wYWNrYWdlZmlsZS8oP1A8cGFja2FnZWZpbGVfaWQ+XGQrKSQnLAorICAgICAgICAgICAgICdpbWFnZV9pbmZvcm1hdGlvbl9kaXInLCBuYW1lPSdpbWFnZV9pbmZvcm1hdGlvbl9kaXInKSwKKworICAgICAgICAjIGJ1aWxkIGRvd25sb2FkIGFydGlmYWN0CisgICAgICAgIHVybChyJ15idWlsZC8oP1A8YnVpbGRfaWQ+XGQrKS9hcnRpZmFjdC8oP1A8YXJ0aWZhY3RfdHlwZT5cdyspL2lkLyg/UDxhcnRpZmFjdF9pZD5cdyspJywgJ2J1aWxkX2FydGlmYWN0JywgbmFtZT0iYnVpbGRfYXJ0aWZhY3QiKSwKKworICAgICAgICAjIHByb2plY3QgVVJMcworICAgICAgICB1cmwocidebmV3cHJvamVjdC8kJywgJ25ld3Byb2plY3QnLCBuYW1lPSduZXdwcm9qZWN0JyksCisKKworICAgICAgICB1cmwocidecHJvamVjdHMvJCcsICdwcm9qZWN0cycsIG5hbWU9J2FsbC1wcm9qZWN0cycpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS8kJywgJ3Byb2plY3QnLCBuYW1lPSdwcm9qZWN0JyksCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9jb25maWd1cmF0aW9uJCcsICdwcm9qZWN0Y29uZicsIG5hbWU9J3Byb2plY3Rjb25mJyksCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9idWlsZHMvJCcsICdwcm9qZWN0YnVpbGRzJywgbmFtZT0ncHJvamVjdGJ1aWxkcycpLAorCisgICAgICAgICMgdGhlIGltcG9ydCBsYXllciBpcyBhIHByb2plY3Qtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eTsKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL2ltcG9ydGxheWVyJCcsICdpbXBvcnRsYXllcicsIG5hbWU9J2ltcG9ydGxheWVyJyksCisKKyAgICAgICAgIyB0aGUgdGFibGUgcGFnZXMgdGhhdCBoYXZlIGJlZW4gY29udmVydGVkIHRvIFRvYXN0ZXJUYWJsZSB3aWRnZXQKKyAgICAgICAgdXJsKHInXnByb2plY3QvKD9QPHBpZD5cZCspL21hY2hpbmVzLyQnLAorICAgICAgICAgICAgdGFibGVzLk1hY2hpbmVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTWFjaGluZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpLAorICAgICAgICAgICAgICAndGl0bGUnIDogJ0NvbXBhdGlibGUgbWFjaGluZXMnIH0sCisgICAgICAgICAgICBuYW1lPSJwcm9qZWN0bWFjaGluZXMiKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvcmVjaXBlcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5SZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuUmVjaXBlc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCksCisgICAgICAgICAgICAgICd0aXRsZScgOiAnQ29tcGF0aWJsZSByZWNpcGVzJyB9LAorICAgICAgICAgICAgbmFtZT0icHJvamVjdHRhcmdldHMiKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvYXZhaWxhYmxlcmVjaXBlcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5Qcm9qZWN0TGF5ZXJzUmVjaXBlc1RhYmxlLmFzX3ZpZXcodGVtcGxhdGVfbmFtZT0iZ2VuZXJpYy10b2FzdGVydGFibGUtcGFnZS5odG1sIiksCisgICAgICAgICAgICB7ICd0YWJsZV9uYW1lJzogdGFibGVzLlByb2plY3RMYXllcnNSZWNpcGVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdSZWNpcGVzIGF2YWlsYWJsZSBmb3IgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHByb2plY3QnIH0sCisgICAgICAgICAgICBuYW1lPSJwcm9qZWN0YXZhaWxhYmxldGFyZ2V0cyIpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllcnMvJCcsCisgICAgICAgICAgICB0YWJsZXMuTGF5ZXJzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTGF5ZXJzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdDb21wYXRpYmxlIGxheWVycycgfSwKKyAgICAgICAgICAgIG5hbWU9InByb2plY3RsYXllcnMiKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvbGF5ZXIvKD9QPGxheWVyaWQ+XGQrKSQnLAorICAgICAgICAgICAgJ2xheWVyZGV0YWlscycsIG5hbWU9J2xheWVyZGV0YWlscycpLAorCisgICAgICAgIHVybChyJ15wcm9qZWN0Lyg/UDxwaWQ+XGQrKS9sYXllci8oP1A8bGF5ZXJpZD5cZCspL3JlY2lwZXMvJCcsCisgICAgICAgICAgICB0YWJsZXMuTGF5ZXJSZWNpcGVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTGF5ZXJSZWNpcGVzVGFibGUuX19uYW1lX18ubG93ZXIoKSwKKyAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdBbGwgcmVjaXBlcyBpbiBsYXllcicgfSwKKyAgICAgICAgICAgICBuYW1lPXRhYmxlcy5MYXllclJlY2lwZXNUYWJsZS5fX25hbWVfXy5sb3dlcigpKSwKKworICAgICAgICB1cmwocidecHJvamVjdC8oP1A8cGlkPlxkKykvbGF5ZXIvKD9QPGxheWVyaWQ+XGQrKS9tYWNoaW5lcy8kJywKKyAgICAgICAgICAgIHRhYmxlcy5MYXllck1hY2hpbmVzVGFibGUuYXNfdmlldyh0ZW1wbGF0ZV9uYW1lPSJnZW5lcmljLXRvYXN0ZXJ0YWJsZS1wYWdlLmh0bWwiKSwKKyAgICAgICAgICAgIHsgJ3RhYmxlX25hbWUnOiB0YWJsZXMuTGF5ZXJNYWNoaW5lc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCksCisgICAgICAgICAgICAgICd0aXRsZScgOiAnQWxsIG1hY2hpbmVzIGluIGxheWVyJyB9LAorICAgICAgICAgICAgbmFtZT10YWJsZXMuTGF5ZXJNYWNoaW5lc1RhYmxlLl9fbmFtZV9fLmxvd2VyKCkpLAorCisKKyAgICAgICAgIyB0eXBlYWhlYWQgYXBpIGVuZCBwb2ludHMKKyAgICAgICAgdXJsKHInXnhocl90eXBlYWhlYWQvKD9QPHBpZD5cZCspL2xheWVycyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5MYXllcnNUeXBlQWhlYWQuYXNfdmlldygpLCBuYW1lPSd4aHJfbGF5ZXJzdHlwZWFoZWFkJyksCisgICAgICAgIHVybChyJ154aHJfdHlwZWFoZWFkLyg/UDxwaWQ+XGQrKS9tYWNoaW5lcyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5NYWNoaW5lc1R5cGVBaGVhZC5hc192aWV3KCksIG5hbWU9J3hocl9tYWNoaW5lc3R5cGVhaGVhZCcpLAorICAgICAgICB1cmwocideeGhyX3R5cGVhaGVhZC8oP1A8cGlkPlxkKykvcmVjaXBlcyQnLAorICAgICAgICAgICAgdHlwZWFoZWFkcy5SZWNpcGVzVHlwZUFoZWFkLmFzX3ZpZXcoKSwgbmFtZT0neGhyX3JlY2lwZXN0eXBlYWhlYWQnKSwKKyAgICAgICAgdXJsKHInXnhocl90eXBlYWhlYWQvcHJvamVjdHMkJywKKyAgICAgICAgICAgIHR5cGVhaGVhZHMuUHJvamVjdHNUeXBlQWhlYWQuYXNfdmlldygpLCBuYW1lPSd4aHJfcHJvamVjdHN0eXBlYWhlYWQnKSwKKworCisKKyAgICAgICAgdXJsKHInXnhocl90ZXN0cmVsZWFzZWNoYW5nZS8oP1A8cGlkPlxkKykkJywgJ3hocl90ZXN0cmVsZWFzZWNoYW5nZScsCisgICAgICAgICAgICBuYW1lPSd4aHJfdGVzdHJlbGVhc2VjaGFuZ2UnKSwKKyAgICAgICAgdXJsKHInXnhocl9jb25maWd2YXJlZGl0Lyg/UDxwaWQ+XGQrKSQnLCAneGhyX2NvbmZpZ3ZhcmVkaXQnLAorICAgICAgICAgICAgbmFtZT0neGhyX2NvbmZpZ3ZhcmVkaXQnKSwKKworICAgICAgICB1cmwocideeGhyX2ltcG9ydGxheWVyLyQnLCAneGhyX2ltcG9ydGxheWVyJywgbmFtZT0neGhyX2ltcG9ydGxheWVyJyksCisgICAgICAgIHVybChyJ154aHJfdXBkYXRlbGF5ZXIvJCcsICd4aHJfdXBkYXRlbGF5ZXInLCBuYW1lPSd4aHJfdXBkYXRlbGF5ZXInKSwKKworICAgICAgICAjIEpTIFVuaXQgdGVzdHMKKyAgICAgICAgdXJsKHInXmpzLXVuaXQtdGVzdHMvJCcsICdqc3VuaXR0ZXN0cycsIG5hbWU9J2pzLXVuaXQtdGVzdHMnKSwKKworICAgICAgICAjIGRlZmF1bHQgcmVkaXJlY3Rpb24KKyAgICAgICAgdXJsKHInXiQnLCBSZWRpcmVjdFZpZXcuYXNfdmlldyggdXJsPSAnbGFuZGluZycpKSwKKykKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcmd1aS92aWV3cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZThmNjllCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3ZpZXdzLnB5CkBAIC0wLDAgKzEsMjkxMiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgcHlsaW50OiBkaXNhYmxlPW1ldGhvZC1oaWRkZW4KKyMgR2l2ZXMgRTo4NDgsIDQ6IEFuIGF0dHJpYnV0ZSBkZWZpbmVkIGluIGpzb24uZW5jb2RlciBsaW5lIDE2MiBoaWRlcyB0aGlzIG1ldGhvZCAobWV0aG9kLWhpZGRlbikKKyMgd2hpY2ggaXMgYW4gaW52YWxpZCB3YXJuaW5nCisKK2ltcG9ydCBvcGVyYXRvcixyZQorCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IEYsIFEsIFN1bSwgQ291bnQsIE1heAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IEludGVncml0eUVycm9yCitmcm9tIGRqYW5nby5zaG9ydGN1dHMgaW1wb3J0IHJlbmRlciwgcmVkaXJlY3QKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQnVpbGQsIFRhcmdldCwgVGFzaywgTGF5ZXIsIExheWVyX1ZlcnNpb24sIFJlY2lwZSwgTG9nTWVzc2FnZSwgVmFyaWFibGUKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFza19EZXBlbmRlbmN5LCBSZWNpcGVfRGVwZW5kZW5jeSwgUGFja2FnZSwgUGFja2FnZV9GaWxlLCBQYWNrYWdlX0RlcGVuZGVuY3kKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgVGFyZ2V0X0luc3RhbGxlZF9QYWNrYWdlLCBUYXJnZXRfRmlsZSwgVGFyZ2V0X0ltYWdlX0ZpbGUsIEJ1aWxkQXJ0aWZhY3QKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgQml0YmFrZVZlcnNpb24KK2Zyb20gYmxkY29udHJvbCBpbXBvcnQgYmJjb250cm9sbGVyCitmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNhY2hlIGltcG9ydCBjYWNoZV9jb250cm9sCitmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZSwgcmVzb2x2ZQorZnJvbSBkamFuZ28uY29yZS5leGNlcHRpb25zIGltcG9ydCBNdWx0aXBsZU9iamVjdHNSZXR1cm5lZAorZnJvbSBkamFuZ28uY29yZS5wYWdpbmF0b3IgaW1wb3J0IFBhZ2luYXRvciwgRW1wdHlQYWdlLCBQYWdlTm90QW5JbnRlZ2VyCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0LCBIdHRwUmVzcG9uc2VOb3RGb3VuZAorZnJvbSBkamFuZ28udXRpbHMgaW1wb3J0IHRpbWV6b25lCitmcm9tIGRqYW5nby51dGlscy5odG1sIGltcG9ydCBlc2NhcGUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YSwgZGF0ZXRpbWUsIGRhdGUKK2Zyb20gZGphbmdvLnV0aWxzIGltcG9ydCBmb3JtYXRzCitmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBqc29uIGFzIGpzb25maWx0ZXIKK2ltcG9ydCBqc29uCitmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUKK2ltcG9ydCBpdGVydG9vbHMKKworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisjIGFsbCBuZXcgc2Vzc2lvbnMgc2hvdWxkIGNvbWUgdGhyb3VnaCB0aGUgbGFuZGluZyBwYWdlOworIyBkZXRlcm1pbmUgaW4gd2hpY2ggbW9kZSB3ZSBhcmUgcnVubmluZyBpbiwgYW5kIHJlZGlyZWN0IGFwcHJvcHJpYXRlbHkKK2RlZiBsYW5kaW5nKHJlcXVlc3QpOgorICAgICMgd2Ugb25seSByZWRpcmVjdCB0byBwcm9qZWN0cyBwYWdlIGlmIHRoZXJlIGlzIGEgdXNlci1nZW5lcmF0ZWQgcHJvamVjdAorICAgIHVzZXJfcHJvamVjdHMgPSBQcm9qZWN0Lm9iamVjdHMuZmlsdGVyKGlzX2RlZmF1bHQgPSBGYWxzZSkKKyAgICBoYXNfdXNlcl9wcm9qZWN0ID0gdXNlcl9wcm9qZWN0cy5jb3VudCgpID4gMAorCisgICAgaWYgQnVpbGQub2JqZWN0cy5jb3VudCgpID09IDAgYW5kIGhhc191c2VyX3Byb2plY3Q6CisgICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKCdhbGwtcHJvamVjdHMnKSwgcGVybWFuZW50ID0gRmFsc2UpCisKKyAgICBpZiBCdWlsZC5vYmplY3RzLmFsbCgpLmNvdW50KCkgPiAwOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QocmV2ZXJzZSgnYWxsLWJ1aWxkcycpLCBwZXJtYW5lbnQgPSBGYWxzZSkKKworICAgIGNvbnRleHQgPSB7J2x2c19ub3MnIDogTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmFsbCgpLmNvdW50KCl9CisKKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICdsYW5kaW5nLmh0bWwnLCBjb250ZXh0KQorCisKKworIyByZXR1cm5zIGEgbGlzdCBmb3IgbW9zdCByZWNlbnQgYnVpbGRzOworZGVmIF9nZXRfbGF0ZXN0X2J1aWxkcyhwcmo9Tm9uZSk6CisgICAgcXVlcnlzZXQgPSBCdWlsZC5vYmplY3RzLmFsbCgpCisKKyAgICBpZiBwcmogaXMgbm90IE5vbmU6CisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuZmlsdGVyKHByb2plY3QgPSBwcmopCisKKyAgICByZXR1cm4gbGlzdChpdGVydG9vbHMuY2hhaW4oCisgICAgICAgIHF1ZXJ5c2V0LmZpbHRlcihvdXRjb21lPUJ1aWxkLklOX1BST0dSRVNTKS5vcmRlcl9ieSgiLXBrIiksCisgICAgICAgIHF1ZXJ5c2V0LmZpbHRlcihvdXRjb21lX19sdD1CdWlsZC5JTl9QUk9HUkVTUykub3JkZXJfYnkoIi1wayIpWzozXSApKQorCisKKyMgYSBKU09OLWFibGUgZGljdCBvZiByZWNlbnQgYnVpbGRzOyBmb3IgdXNlIGluIHRoZSBQcm9qZWN0IHBhZ2UsIHhocl8gdXBkYXRlcywgIGFuZCBvdGhlciBwbGFjZXMsIGFzIG5lZWRlZAorZGVmIF9wcm9qZWN0X3JlY2VudF9idWlsZF9saXN0KHByaik6CisgICAgZGF0YSA9IFtdCisgICAgIyB0YWtlIHRoZSBtb3N0IHJlY2VudCAzIGNvbXBsZXRlZCBidWlsZHMsIHBsdXMgYW55IGJ1aWxkcyBpbiBwcm9ncmVzcworICAgIGZvciB4IGluIF9nZXRfbGF0ZXN0X2J1aWxkcyhwcmopOgorICAgICAgICBkID0geworICAgICAgICAgICAgImlkIjogIHgucGssCisgICAgICAgICAgICAidGFyZ2V0cyIgOiBtYXAobGFtYmRhIHk6IHsidGFyZ2V0IjogeS50YXJnZXQsICJ0YXNrIjogeS50YXNrIH0sIHgudGFyZ2V0X3NldC5hbGwoKSksICMgVE9ETzogY3JlYXRlIHRoZSB0YXNrIGVudHJ5IGluIHRoZSBUYXJnZXQgdGFibGUKKyAgICAgICAgICAgICJzdGF0dXMiOiB4LmdldF9jdXJyZW50X3N0YXR1cygpLAorICAgICAgICAgICAgImVycm9ycyI6IG1hcChsYW1iZGEgeTogeyJ0eXBlIjogeS5saW5lbm8sICJtc2ciOiB5Lm1lc3NhZ2UsICJ0YiI6IHkucGF0aG5hbWV9LCAoeC5sb2dtZXNzYWdlX3NldC5maWx0ZXIobGV2ZWxfX2d0ZT1Mb2dNZXNzYWdlLldBUk5JTkcpfHgubG9nbWVzc2FnZV9zZXQuZmlsdGVyKGxldmVsPUxvZ01lc3NhZ2UuRVhDRVBUSU9OKSkpLAorICAgICAgICAgICAgInVwZGF0ZWQiOiB4LmNvbXBsZXRlZF9vbi5zdHJmdGltZSgnJXMnKSsiMDAwIiwKKyAgICAgICAgICAgICJjb21tYW5kX3RpbWUiOiAoeC5jb21wbGV0ZWRfb24gLSB4LnN0YXJ0ZWRfb24pLnRvdGFsX3NlY29uZHMoKSwKKyAgICAgICAgICAgICJicl9wYWdlX3VybCI6IHJldmVyc2UoJ2J1aWxkZGFzaGJvYXJkJywgYXJncz0oeC5waywpICksCisgICAgICAgICAgICAiYnVpbGQiIDogbWFwKCBsYW1iZGEgeTogeyJpZCI6IHkucGssCisgICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogeS5nZXRfb3V0Y29tZV9kaXNwbGF5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxldGVkX29uIiA6IHkuY29tcGxldGVkX29uLnN0cmZ0aW1lKCclcycpKyIwMDAiLAorICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWxkX3RpbWUiIDogKHkuY29tcGxldGVkX29uIC0geS5zdGFydGVkX29uKS50b3RhbF9zZWNvbmRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbGRfcGFnZV91cmwiIDogcmV2ZXJzZSgnYnVpbGRkYXNoYm9hcmQnLCBhcmdzPSh5LnBrLCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkX3RpbWVfcGFnZV91cmwnOiByZXZlcnNlKCdidWlsZHRpbWUnLCBhcmdzPSh5LnBrLCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9ycyI6IHkuZXJyb3JzLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZ3MiOiB5Lndhcm5pbmdzLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxldGVwZXIiOiB5LmNvbXBsZXRlcGVyKCkgaWYgeS5vdXRjb21lID09IEJ1aWxkLklOX1BST0dSRVNTIGVsc2UgIjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgImV0YSI6IHkuZXRhKCkuc3RyZnRpbWUoJyVzJykrIjAwMCIgaWYgeS5vdXRjb21lID09IEJ1aWxkLklOX1BST0dSRVNTIGVsc2UgIjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgfSwgW3hdKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGF0YS5hcHBlbmQoZCkKKworICAgIHJldHVybiBkYXRhCisKKworCitkZWYgb2JqdG9qc29uKG9iaik6CisgICAgZnJvbSBkamFuZ28uZGIubW9kZWxzLnF1ZXJ5IGltcG9ydCBRdWVyeVNldAorICAgIGZyb20gZGphbmdvLmRiLm1vZGVscyBpbXBvcnQgTW9kZWwKKworICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBkYXRldGltZSk6CisgICAgICAgIHJldHVybiBvYmouaXNvZm9ybWF0KCkKKyAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCB0aW1lZGVsdGEpOgorICAgICAgICByZXR1cm4gb2JqLnRvdGFsX3NlY29uZHMoKQorICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIFF1ZXJ5U2V0KSBvciBpc2luc3RhbmNlKG9iaiwgc2V0KToKKyAgICAgICAgcmV0dXJuIGxpc3Qob2JqKQorICAgIGVsaWYgdHlwZShvYmopLl9fbmFtZV9fID09ICJSZWxhdGVkTWFuYWdlciI6CisgICAgICAgIHJldHVybiBbeC5wayBmb3IgeCBpbiBvYmouYWxsKCldCisgICAgZWxpZiBoYXNhdHRyKCBvYmosICdfX2RpY3RfXycpIGFuZCBpc2luc3RhbmNlKG9iaiwgTW9kZWwpOgorICAgICAgICBkID0gb2JqLl9fZGljdF9fCisgICAgICAgIG5kID0gZGljdChkKQorICAgICAgICBmb3IgZGkgaW4gZC5rZXlzKCk6CisgICAgICAgICAgICBpZiBkaS5zdGFydHN3aXRoKCJfIik6CisgICAgICAgICAgICAgICAgZGVsIG5kW2RpXQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRbZGldLCBNb2RlbCk6CisgICAgICAgICAgICAgICAgbmRbZGldID0gZFtkaV0ucGsKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkW2RpXSwgaW50KSBhbmQgaGFzYXR0cihvYmosICJnZXRfJXNfZGlzcGxheSIgJSBkaSk6CisgICAgICAgICAgICAgICAgbmRbZGldID0gZ2V0YXR0cihvYmosICJnZXRfJXNfZGlzcGxheSIgJSBkaSkoKQorICAgICAgICByZXR1cm4gbmQKKyAgICBlbGlmIGlzaW5zdGFuY2UoIG9iaiwgdHlwZShsYW1iZGEgeDp4KSk6CisgICAgICAgIGltcG9ydCBpbnNwZWN0CisgICAgICAgIHJldHVybiBpbnNwZWN0LmdldHNvdXJjZWxpbmVzKG9iailbMF0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIG9iamVjdCAlcyAoJXMpIG9mIHR5cGUgJXMiICUgKCBvYmosIGRpcihvYmopLCB0eXBlKG9iaikpKQorCisKK2RlZiBfdGVtcGxhdGVfcmVuZGVyZXIodGVtcGxhdGUpOgorICAgIGRlZiBmdW5jX3dyYXBwZXIodmlldyk6CisgICAgICAgIGRlZiByZXR1cm5lZF93cmFwcGVyKHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHZpZXcocmVxdWVzdCwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFJlZGlyZWN0RXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0X3JlZGlyZWN0X3Jlc3BvbnNlKCkKKworICAgICAgICAgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCdmb3JtYXQnLCBOb25lKSA9PSAnanNvbic6CisgICAgICAgICAgICAgICAgIyBvYmplY3RzIGlzIGEgc3BlY2lhbCBrZXl3b3JkIC0gaXQncyBhIFBhZ2UsIGJ1dCB3ZSBuZWVkIHRoZSBhY3R1YWwgb2JqZWN0cyBoZXJlCisgICAgICAgICAgICAgICAgIyBpbiBYSFIsIHRoZSBvYmplY3RzIGNvbWUgaW4gdGhlICJyb3dzIiBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGlmICJvYmplY3RzIiBpbiBjb250ZXh0OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyJyb3dzIl0gPSBjb250ZXh0WyJvYmplY3RzIl0ub2JqZWN0X2xpc3QKKyAgICAgICAgICAgICAgICAgICAgZGVsIGNvbnRleHRbIm9iamVjdHMiXQorCisgICAgICAgICAgICAgICAgIyB3ZSdyZSBhYm91dCB0byByZXR1cm47IHRvIGtlZXAgdXAgd2l0aCB0aGUgWEhSIEFQSSwgd2Ugc2V0IHRoZSBlcnJvciB0byBPSworICAgICAgICAgICAgICAgIGNvbnRleHRbImVycm9yIl0gPSAib2siCisKKyAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoY29udGV4dCwgZGVmYXVsdD1vYmp0b2pzb24gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgICAgIHJldHVybiByZXR1cm5lZF93cmFwcGVyCisgICAgcmV0dXJuIGZ1bmNfd3JhcHBlcgorCisKK2RlZiBfbHZfdG9fZGljdChwcmosIHggPSBOb25lKToKKyAgICBpZiB4IGlzIE5vbmU6CisgICAgICAgIGRlZiB3cmFwcGVyKHgpOgorICAgICAgICAgICAgcmV0dXJuIF9sdl90b19kaWN0KHByaiwgeCkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgIHJldHVybiB7ImlkIjogeC5waywKKyAgICAgICAgICAgICJuYW1lIjogeC5sYXllci5uYW1lLAorICAgICAgICAgICAgInRvb2x0aXAiOiAiJXMgfCAlcyIgJSAoeC5sYXllci52Y3NfdXJsLHguZ2V0X3Zjc19yZWZlcmVuY2UoKSksCisgICAgICAgICAgICAiZGV0YWlsIjogIiglcyIgJSB4LmxheWVyLnZjc191cmwgKyAoIikiIGlmIHgudXBfYnJhbmNoID09IE5vbmUgZWxzZSAiIHwgIit4LmdldF92Y3NfcmVmZXJlbmNlKCkrIikiKSwKKyAgICAgICAgICAgICJnaXR1cmwiOiB4LmxheWVyLnZjc191cmwsCisgICAgICAgICAgICAibGF5ZXJkZXRhaWx1cmwiIDogcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJqLmlkLHgucGspKSwKKyAgICAgICAgICAgICJyZXZpc2lvbiIgOiB4LmdldF92Y3NfcmVmZXJlbmNlKCksCisgICAgICAgICAgIH0KKworCitkZWYgX2J1aWxkX3BhZ2VfcmFuZ2UocGFnaW5hdG9yLCBpbmRleCA9IDEpOgorICAgIHRyeToKKyAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKGluZGV4KQorICAgIGV4Y2VwdCBQYWdlTm90QW5JbnRlZ2VyOgorICAgICAgICBwYWdlID0gcGFnaW5hdG9yLnBhZ2UoMSkKKyAgICBleGNlcHQgIEVtcHR5UGFnZToKKyAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKHBhZ2luYXRvci5udW1fcGFnZXMpCisKKworICAgIHBhZ2UucGFnZV9yYW5nZSA9IFtwYWdlLm51bWJlcl0KKyAgICBjcnRfcmFuZ2UgPSAwCisgICAgZm9yIGkgaW4gcmFuZ2UoMSw1KToKKyAgICAgICAgaWYgKHBhZ2UubnVtYmVyICsgaSkgPD0gcGFnaW5hdG9yLm51bV9wYWdlczoKKyAgICAgICAgICAgIHBhZ2UucGFnZV9yYW5nZSA9IHBhZ2UucGFnZV9yYW5nZSArIFsgcGFnZS5udW1iZXIgKyBpXQorICAgICAgICAgICAgY3J0X3JhbmdlICs9MQorICAgICAgICBpZiAocGFnZS5udW1iZXIgLSBpKSA+IDA6CisgICAgICAgICAgICBwYWdlLnBhZ2VfcmFuZ2UgPSAgW3BhZ2UubnVtYmVyIC1pXSArIHBhZ2UucGFnZV9yYW5nZQorICAgICAgICAgICAgY3J0X3JhbmdlICs9MQorICAgICAgICBpZiBjcnRfcmFuZ2UgPT0gNDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHBhZ2UKKworCitkZWYgX3ZlcmlmeV9wYXJhbWV0ZXJzKGcsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzKToKKyAgICBtaXNzID0gW10KKyAgICBmb3IgbXAgaW4gbWFuZGF0b3J5X3BhcmFtZXRlcnM6CisgICAgICAgIGlmIG5vdCBtcCBpbiBnOgorICAgICAgICAgICAgbWlzcy5hcHBlbmQobXApCisgICAgaWYgbGVuKG1pc3MpOgorICAgICAgICByZXR1cm4gbWlzcworICAgIHJldHVybiBOb25lCisKK2RlZiBfcmVkaXJlY3RfcGFyYW1ldGVycyh2aWV3LCBnLCBtYW5kYXRvcnlfcGFyYW1ldGVycywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBpbXBvcnQgdXJsbGliCisgICAgdXJsID0gcmV2ZXJzZSh2aWV3LCBrd2FyZ3M9a3dhcmdzKQorICAgIHBhcmFtcyA9IHt9CisgICAgZm9yIGkgaW4gZzoKKyAgICAgICAgcGFyYW1zW2ldID0gZ1tpXQorICAgIGZvciBpIGluIG1hbmRhdG9yeV9wYXJhbWV0ZXJzOgorICAgICAgICBpZiBub3QgaSBpbiBwYXJhbXM6CisgICAgICAgICAgICBwYXJhbXNbaV0gPSB1cmxsaWIudW5xdW90ZShzdHIobWFuZGF0b3J5X3BhcmFtZXRlcnNbaV0pKQorCisgICAgcmV0dXJuIHJlZGlyZWN0KHVybCArICI/JXMiICUgdXJsbGliLnVybGVuY29kZShwYXJhbXMpLCBwZXJtYW5lbnQgPSBGYWxzZSwgKiprd2FyZ3MpCisKK2NsYXNzIFJlZGlyZWN0RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZpZXcsIGcsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihSZWRpcmVjdEV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnZpZXcgPSB2aWV3CisgICAgICAgIHNlbGYuZyA9IGcKKyAgICAgICAgc2VsZi5tYW5kYXRvcnlfcGFyYW1ldGVycyA9IG1hbmRhdG9yeV9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYub2FyZ3MgID0gYXJncworICAgICAgICBzZWxmLm9rd2FyZ3MgPSBrd2FyZ3MKKworICAgIGRlZiBnZXRfcmVkaXJlY3RfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyhzZWxmLnZpZXcsIHNlbGYuZywgc2VsZi5tYW5kYXRvcnlfcGFyYW1ldGVycywgc2VsZi5vYXJncywgKipzZWxmLm9rd2FyZ3MpCisKK0ZJRUxEX1NFUEFSQVRPUiA9ICI6IgorQU5EX1ZBTFVFX1NFUEFSQVRPUiA9ICIhIgorT1JfVkFMVUVfU0VQQVJBVE9SID0gInwiCitERVNDRU5ESU5HID0gIi0iCisKK2RlZiBfX2dldF9xX2Zvcl92YWwobmFtZSwgdmFsdWUpOgorICAgIGlmICJPUiIgaW4gdmFsdWU6CisgICAgICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3Iub3JfLCBtYXAobGFtYmRhIHg6IF9fZ2V0X3FfZm9yX3ZhbChuYW1lLCB4KSwgWyB4IGZvciB4IGluIHZhbHVlLnNwbGl0KCJPUiIpIF0pKQorICAgIGlmICJBTkQiIGluIHZhbHVlOgorICAgICAgICByZXR1cm4gcmVkdWNlKG9wZXJhdG9yLmFuZF8sIG1hcChsYW1iZGEgeDogX19nZXRfcV9mb3JfdmFsKG5hbWUsIHgpLCBbIHggZm9yIHggaW4gdmFsdWUuc3BsaXQoIkFORCIpIF0pKQorICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIk5PVCIpOgorICAgICAgICB2YWx1ZSA9IHZhbHVlWzM6XQorICAgICAgICBpZiB2YWx1ZSA9PSAnTm9uZSc6CisgICAgICAgICAgICB2YWx1ZSA9IE5vbmUKKyAgICAgICAga3dhcmdzID0geyBuYW1lIDogdmFsdWUgfQorICAgICAgICByZXR1cm4gflEoKiprd2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOgorICAgICAgICAgICAgdmFsdWUgPSBOb25lCisgICAgICAgIGt3YXJncyA9IHsgbmFtZSA6IHZhbHVlIH0KKyAgICAgICAgcmV0dXJuIFEoKiprd2FyZ3MpCisKK2RlZiBfZ2V0X2ZpbHRlcmluZ19xdWVyeShmaWx0ZXJfc3RyaW5nKToKKworICAgIHNlYXJjaF90ZXJtcyA9IGZpbHRlcl9zdHJpbmcuc3BsaXQoRklFTERfU0VQQVJBVE9SKQorICAgIGFuZF9rZXlzID0gc2VhcmNoX3Rlcm1zWzBdLnNwbGl0KEFORF9WQUxVRV9TRVBBUkFUT1IpCisgICAgYW5kX3ZhbHVlcyA9IHNlYXJjaF90ZXJtc1sxXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKQorCisgICAgYW5kX3F1ZXJ5ID0gW10KKyAgICBmb3Iga3YgaW4gemlwKGFuZF9rZXlzLCBhbmRfdmFsdWVzKToKKyAgICAgICAgb3Jfa2V5cyA9IGt2WzBdLnNwbGl0KE9SX1ZBTFVFX1NFUEFSQVRPUikKKyAgICAgICAgb3JfdmFsdWVzID0ga3ZbMV0uc3BsaXQoT1JfVkFMVUVfU0VQQVJBVE9SKQorICAgICAgICBxdWVyeWRpY3QgPSBkaWN0KHppcChvcl9rZXlzLCBvcl92YWx1ZXMpKQorICAgICAgICBhbmRfcXVlcnkuYXBwZW5kKHJlZHVjZShvcGVyYXRvci5vcl8sIG1hcChsYW1iZGEgeDogX19nZXRfcV9mb3JfdmFsKHgsIHF1ZXJ5ZGljdFt4XSksIFtrIGZvciBrIGluIHF1ZXJ5ZGljdF0pKSkKKworICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3IuYW5kXywgW2sgZm9yIGsgaW4gYW5kX3F1ZXJ5XSkKKworZGVmIF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsIG9yZGVya2V5LCB0b2dnbGVfcmV2ZXJzZSA9IEZhbHNlKToKKyAgICBpZiB0b2dnbGVfcmV2ZXJzZToKKyAgICAgICAgcmV0dXJuICIlczorIiAlIG9yZGVya2V5IGlmIHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICIiKSA9PSAiJXM6LSIgJSBvcmRlcmtleSBlbHNlICIlczotIiAlIG9yZGVya2V5CisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICIlczotIiAlIG9yZGVya2V5IGlmIHJlcXVlc3QuR0VULmdldCgnb3JkZXJieScsICIiKSA9PSAiJXM6KyIgJSBvcmRlcmtleSBlbHNlICIlczorIiAlIG9yZGVya2V5CisKK2RlZiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsIG9yZGVya2V5KToKKyAgICBpZiByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAiIikgPT0gIiVzOisiJW9yZGVya2V5OgorICAgICAgICByZXR1cm4gImRvd24iCisgICAgZWxpZiByZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAiIikgPT0gIiVzOi0iJW9yZGVya2V5OgorICAgICAgICByZXR1cm4gInVwIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKyMgd2UgY2hlY2sgdGhhdCB0aGUgaW5wdXQgY29tZXMgaW4gYSB2YWxpZCBmb3JtIHRoYXQgd2UgY2FuIHJlY29nbml6ZQorZGVmIF92YWxpZGF0ZV9pbnB1dChmaWVsZF9pbnB1dCwgbW9kZWwpOgorCisgICAgaW52YWxpZCA9IE5vbmUKKworICAgIGlmIGZpZWxkX2lucHV0OgorICAgICAgICBmaWVsZF9pbnB1dF9saXN0ID0gZmllbGRfaW5wdXQuc3BsaXQoRklFTERfU0VQQVJBVE9SKQorCisgICAgICAgICMgQ2hlY2sgd2UgaGF2ZSBvbmx5IG9uZSBjb2xvbgorICAgICAgICBpZiBsZW4oZmllbGRfaW5wdXRfbGlzdCkgIT0gMjoKKyAgICAgICAgICAgIGludmFsaWQgPSAiV2UgaGF2ZSBhbiBpbnZhbGlkIG51bWJlciBvZiBzZXBhcmF0b3JzOiAiICsgZmllbGRfaW5wdXQgKyAiIC0+ICIgKyBzdHIoZmllbGRfaW5wdXRfbGlzdCkKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBpbnZhbGlkCisKKyAgICAgICAgIyBDaGVjayB3ZSBoYXZlIGFuIGVxdWFsIG51bWJlciBvZiB0ZXJtcyBib3RoIHNpZGVzIG9mIHRoZSBjb2xvbgorICAgICAgICBpZiBsZW4oZmllbGRfaW5wdXRfbGlzdFswXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKSkgIT0gbGVuKGZpZWxkX2lucHV0X2xpc3RbMV0uc3BsaXQoQU5EX1ZBTFVFX1NFUEFSQVRPUikpOgorICAgICAgICAgICAgaW52YWxpZCA9ICJOb3QgYWxsIGFyZyBuYW1lcyBnb3QgdmFsdWVzIgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIGludmFsaWQgKyBzdHIoZmllbGRfaW5wdXRfbGlzdCkKKworICAgICAgICAjIENoZWNrIHdlIGFyZSBsb29raW5nIGZvciBhIHZhbGlkIGZpZWxkCisgICAgICAgIHZhbGlkX2ZpZWxkcyA9IG1vZGVsLl9tZXRhLmdldF9hbGxfZmllbGRfbmFtZXMoKQorICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRfaW5wdXRfbGlzdFswXS5zcGxpdChBTkRfVkFMVUVfU0VQQVJBVE9SKToKKyAgICAgICAgICAgIGlmIG5vdCByZWR1Y2UobGFtYmRhIHgsIHk6IHggb3IgeSwgWyBmaWVsZC5zdGFydHN3aXRoKHgpIGZvciB4IGluIHZhbGlkX2ZpZWxkcyBdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgKGZpZWxkLCBbIHggZm9yIHggaW4gdmFsaWRfZmllbGRzIF0pCisKKyAgICByZXR1cm4gZmllbGRfaW5wdXQsIGludmFsaWQKKworIyB1c2VzIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyBpbiBvcm0vbW9kZWxzLnB5IHRvIGNyZWF0ZSBhIHNlYXJjaCBxdWVyeQorIyBmb3IgdGhlc2UgZmllbGRzIHdpdGggdGhlIHN1cHBsaWVkIGlucHV0IHRleHQKK2RlZiBfZ2V0X3NlYXJjaF9yZXN1bHRzKHNlYXJjaF90ZXJtLCBxdWVyeXNldCwgbW9kZWwpOgorICAgIHNlYXJjaF9vYmplY3RzID0gW10KKyAgICBmb3Igc3QgaW4gc2VhcmNoX3Rlcm0uc3BsaXQoIiAiKToKKyAgICAgICAgcV9tYXAgPSBtYXAobGFtYmRhIHg6IFEoKip7eCsnX19pY29udGFpbnMnOiBzdH0pLAorICAgICAgICAgICAgICAgIG1vZGVsLnNlYXJjaF9hbGxvd2VkX2ZpZWxkcykKKworICAgICAgICBzZWFyY2hfb2JqZWN0cy5hcHBlbmQocmVkdWNlKG9wZXJhdG9yLm9yXywgcV9tYXApKQorICAgIHNlYXJjaF9vYmplY3QgPSByZWR1Y2Uob3BlcmF0b3IuYW5kXywgc2VhcmNoX29iamVjdHMpCisgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoc2VhcmNoX29iamVjdCkKKworICAgIHJldHVybiBxdWVyeXNldAorCisKKyMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgc2VhcmNoL2ZpbHRlci9vcmRlcmluZyBwYXJhbWV0ZXJzIGZyb20gdGhlIHJlcXVlc3QKKyMgaXQgdXNlcyB0aGUgcmVxdWVzdCBhbmQgdGhlIG1vZGVsIHRvIHZhbGlkYXRlIGlucHV0IGZvciB0aGUgZmlsdGVyIGFuZCBvcmRlcmJ5IHZhbHVlcworZGVmIF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgbW9kZWwpOgorICAgIG9yZGVyaW5nX3N0cmluZywgaW52YWxpZCA9IF92YWxpZGF0ZV9pbnB1dChyZXF1ZXN0LkdFVC5nZXQoJ29yZGVyYnknLCAnJyksIG1vZGVsKQorICAgIGlmIGludmFsaWQ6CisgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oIkludmFsaWQgb3JkZXJpbmcgbW9kZWw6IiArIHN0cihtb2RlbCkgKyBzdHIoaW52YWxpZCkpCisKKyAgICBmaWx0ZXJfc3RyaW5nLCBpbnZhbGlkID0gX3ZhbGlkYXRlX2lucHV0KHJlcXVlc3QuR0VULmdldCgnZmlsdGVyJywgJycpLCBtb2RlbCkKKyAgICBpZiBpbnZhbGlkOgorICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKCJJbnZhbGlkIGZpbHRlciAiICsgc3RyKGludmFsaWQpKQorCisgICAgc2VhcmNoX3Rlcm0gPSByZXF1ZXN0LkdFVC5nZXQoJ3NlYXJjaCcsICcnKQorICAgIHJldHVybiAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykKKworCisjIHJldHVybnMgYSBsYXp5LWV2YWx1YXRlZCBxdWVyeXNldCBmb3IgYSBmaWx0ZXIvc2VhcmNoL29yZGVyIGNvbWJpbmF0aW9uCitkZWYgX2dldF9xdWVyeXNldChtb2RlbCwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsIG9yZGVyaW5nX3NlY29uZGFyeT0nJyk6CisgICAgaWYgZmlsdGVyX3N0cmluZzoKKyAgICAgICAgZmlsdGVyX3F1ZXJ5ID0gX2dldF9maWx0ZXJpbmdfcXVlcnkoZmlsdGVyX3N0cmluZykKKyAgICAgICAgcXVlcnlzZXQgPSBxdWVyeXNldC5maWx0ZXIoZmlsdGVyX3F1ZXJ5KQorICAgIGVsc2U6CisgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuYWxsKCkKKworICAgIGlmIHNlYXJjaF90ZXJtOgorICAgICAgICBxdWVyeXNldCA9IF9nZXRfc2VhcmNoX3Jlc3VsdHMoc2VhcmNoX3Rlcm0sIHF1ZXJ5c2V0LCBtb2RlbCkKKworICAgIGlmIG9yZGVyaW5nX3N0cmluZzoKKyAgICAgICAgY29sdW1uLCBvcmRlciA9IG9yZGVyaW5nX3N0cmluZy5zcGxpdCgnOicpCisgICAgICAgIGlmIGNvbHVtbiA9PSByZS5zdWIoJy0nLCcnLG9yZGVyaW5nX3NlY29uZGFyeSk6CisgICAgICAgICAgICBvcmRlcmluZ19zZWNvbmRhcnk9JycKKyAgICAgICAgaWYgb3JkZXIubG93ZXIoKSA9PSBERVNDRU5ESU5HOgorICAgICAgICAgICAgY29sdW1uID0gJy0nICsgY29sdW1uCisgICAgICAgIGlmIG9yZGVyaW5nX3NlY29uZGFyeToKKyAgICAgICAgICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQub3JkZXJfYnkoY29sdW1uLCBvcmRlcmluZ19zZWNvbmRhcnkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0Lm9yZGVyX2J5KGNvbHVtbikKKworICAgICMgaW5zdXJlIG9ubHkgZGlzdGluY3QgcmVjb3JkcyAoZS5nLiBmcm9tIG11bHRpcGxlIHNlYXJjaCBoaXRzKSBhcmUgcmV0dXJuZWQKKyAgICByZXR1cm4gcXVlcnlzZXQuZGlzdGluY3QoKQorCisjIHJldHVybnMgdGhlIHZhbHVlIG9mIGVudHJpZXMgcGVyIHBhZ2UgYW5kIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWVkIHNvcnRpbmcgZmllbGQuCisjIGlmIHRoZSB2YWx1ZSBpcyBnaXZlbiBleHBsaWNpdGx5IGFzIGEgR0VUIHBhcmFtZXRlciBpdCB3aWxsIGJlIHRoZSBmaXJzdCBzZWxlY3RlZCwKKyMgb3RoZXJ3aXNlIHRoZSBjb29raWUgdmFsdWUgd2lsbCBiZSB1c2VkLgorZGVmIF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgZGVmYXVsdF9jb3VudCwgZGVmYXVsdF9vcmRlcik6CisgICAgY3VycmVudF91cmwgPSByZXNvbHZlKHJlcXVlc3QucGF0aF9pbmZvKS51cmxfbmFtZQorICAgIHBhZ2VzaXplID0gcmVxdWVzdC5HRVQuZ2V0KCdjb3VudCcsIHJlcXVlc3Quc2Vzc2lvbi5nZXQoJyVzX2NvdW50JyAlIGN1cnJlbnRfdXJsLCBkZWZhdWx0X2NvdW50KSkKKyAgICBvcmRlcmJ5ID0gcmVxdWVzdC5HRVQuZ2V0KCdvcmRlcmJ5JywgcmVxdWVzdC5zZXNzaW9uLmdldCgnJXNfb3JkZXJieScgJSBjdXJyZW50X3VybCwgZGVmYXVsdF9vcmRlcikpCisgICAgcmV0dXJuIChwYWdlc2l6ZSwgb3JkZXJieSkKKworCisjIHNldCBjb29raWVzIGZvciBwYXJhbWV0ZXJzLiB0aGlzIGlzIHVzZWZ1bGwgaW4gY2FzZSBwYXJhbWV0ZXJzIGFyZSBzZXQKKyMgbWFudWFsbHkgZnJvbSB0aGUgR0VUIHZhbHVlcyBvZiB0aGUgbGluaworZGVmIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpOgorICAgIGZyb20gZGphbmdvLmNvcmUudXJscmVzb2x2ZXJzIGltcG9ydCByZXNvbHZlCisgICAgY3VycmVudF91cmwgPSByZXNvbHZlKHJlcXVlc3QucGF0aF9pbmZvKS51cmxfbmFtZQorICAgIHJlcXVlc3Quc2Vzc2lvblsnJXNfY291bnQnICUgY3VycmVudF91cmxdID0gcGFnZXNpemUKKyAgICByZXF1ZXN0LnNlc3Npb25bJyVzX29yZGVyYnknICUgY3VycmVudF91cmxdID1vcmRlcmJ5CisKKyMgZGF0ZSByYW5nZTogbm9ybWFsaXplIEdVSSdzIGRkL21tL3l5eXkgdG8gZGF0ZSBvYmplY3QKK2RlZiBfbm9ybWFsaXplX2lucHV0X2RhdGUoZGF0ZV9zdHIsZGVmYXVsdCk6CisgICAgZGF0ZV9zdHI9cmUuc3ViKCcvJywgJy0nLCBkYXRlX3N0cikKKyAgICAjIGFjY2VwdCBkZC9tbS95eXl5IHRvIGQvbS95eQorICAgIHRyeToKKyAgICAgICAgZGF0ZV9pbiA9IGRhdGV0aW1lLnN0cnB0aW1lKGRhdGVfc3RyLCAiJWQtJW0tJVkiKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAjIGNvdXJ0ZXN5IHRyeSB3aXRoIHR3byBkaWdpdCB5ZWFyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGVfaW4gPSBkYXRldGltZS5zdHJwdGltZShkYXRlX3N0ciwgIiVkLSVtLSV5IikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGRhdGVfaW4gPSBkYXRlX2luLnJlcGxhY2UodHppbmZvPWRlZmF1bHQudHppbmZvKQorICAgIHJldHVybiBkYXRlX2luCisKKyMgY29udmVydCBhbmQgbm9ybWFsaXplIGFueSByZWNlaXZlZCBkYXRlIHJhbmdlIGZpbHRlciwgZm9yIGV4YW1wbGU6CisjICJjb21wbGV0ZWRfb25fX2d0ZSFjb21wbGV0ZWRfb25fX2x0OjAxLzAzLzIwMTUhMDIvMDMvMjAxNV9kYXRlcmFuZ2UiIHRvCisjICJjb21wbGV0ZWRfb25fX2d0ZSFjb21wbGV0ZWRfb25fX2x0OjIwMTUtMDMtMDEhMjAxNS0wMy0wMiIKK2RlZiBfbW9kaWZ5X2RhdGVfcmFuZ2VfZmlsdGVyKGZpbHRlcl9zdHJpbmcpOgorICAgICMgd2FzIHRoZSBkYXRlIHJhbmdlIHJhZGlvIGJ1dHRvbiBzZWxlY3RlZD8KKyAgICBpZiAwID4gIGZpbHRlcl9zdHJpbmcuZmluZCgnX2RhdGVyYW5nZScpOgorICAgICAgICByZXR1cm4gZmlsdGVyX3N0cmluZywnJworICAgICMgbm9ybWFsaXplIEdVSSBkYXRlcyB0byBkYXRhYmFzZSBmb3JtYXQKKyAgICBmaWx0ZXJfc3RyaW5nID0gZmlsdGVyX3N0cmluZy5yZXBsYWNlKCdfZGF0ZXJhbmdlJywnJykucmVwbGFjZSgnOicsJyEnKTsKKyAgICBmaWx0ZXJfbGlzdCA9IGZpbHRlcl9zdHJpbmcuc3BsaXQoJyEnKTsKKyAgICBpZiA0ICE9IGxlbihmaWx0ZXJfbGlzdCk6CisgICAgICAgIHJldHVybiBmaWx0ZXJfc3RyaW5nCisgICAgdG9kYXkgPSB0aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgZGF0ZV9pZCA9IGZpbHRlcl9saXN0WzFdCisgICAgZGF0ZV9mcm9tID0gX25vcm1hbGl6ZV9pbnB1dF9kYXRlKGZpbHRlcl9saXN0WzJdLHRvZGF5KQorICAgIGRhdGVfdG8gPSBfbm9ybWFsaXplX2lucHV0X2RhdGUoZmlsdGVyX2xpc3RbM10sdG9kYXkpCisgICAgIyBzd2FwIGRhdGVzIGlmIG1hbnVhbGx5IHNldCBkYXRlcyBhcmUgb3V0IG9mIG9yZGVyCisgICAgaWYgIGRhdGVfdG8gPCBkYXRlX2Zyb206CisgICAgICAgIGRhdGVfdG8sZGF0ZV9mcm9tID0gZGF0ZV9mcm9tLGRhdGVfdG8KKyAgICAjIGNvbnZlcnQgdG8gc3RyaW5ncywgbWFrZSAnZGF0ZV90bycgaW5jbHVzaXZlIGJ5IG1vdmluZyB0byBiZWdpbmluZyBvZiBuZXh0IGRheQorICAgIGRhdGVfZnJvbV9zdHIgPSBkYXRlX2Zyb20uc3RyZnRpbWUoIiVZLSVtLSVkIikKKyAgICBkYXRlX3RvX3N0ciA9IChkYXRlX3RvK3RpbWVkZWx0YShkYXlzPTEpKS5zdHJmdGltZSgiJVktJW0tJWQiKQorICAgIGZpbHRlcl9zdHJpbmc9ZmlsdGVyX2xpc3RbMF0rJyEnK2ZpbHRlcl9saXN0WzFdKyc6JytkYXRlX2Zyb21fc3RyKychJytkYXRlX3RvX3N0cgorICAgIGRhdGVyYW5nZV9zZWxlY3RlZCA9IHJlLnN1YignX18uKicsJycsIGRhdGVfaWQpCisgICAgcmV0dXJuIGZpbHRlcl9zdHJpbmcsZGF0ZXJhbmdlX3NlbGVjdGVkCisKK2RlZiBfYWRkX2RhdGVyYW5nZV9jb250ZXh0KHF1ZXJ5c2V0X2FsbCwgcmVxdWVzdCwgZGF0ZXJhbmdlX2xpc3QpOgorICAgICMgY2FsY3VsYXRlIHRoZSBleGFjdCBiZWdpbmluZyBvZiBsb2NhbCB0b2RheSBhbmQgeWVzdGVyZGF5CisgICAgdG9kYXlfYmVnaW4gPSB0aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgdG9kYXlfYmVnaW4gPSBkYXRlKHRvZGF5X2JlZ2luLnllYXIsdG9kYXlfYmVnaW4ubW9udGgsdG9kYXlfYmVnaW4uZGF5KQorICAgIHllc3RlcmRheV9iZWdpbiA9IHRvZGF5X2JlZ2luLXRpbWVkZWx0YShkYXlzPTEpCisgICAgIyBhZGQgZGF0ZXJhbmdlIHBlcnNpc3RlbnQKKyAgICBjb250ZXh0X2RhdGUgPSB7fQorICAgIGNvbnRleHRfZGF0ZVsnbGFzdF9kYXRlX2Zyb20nXSA9IHJlcXVlc3QuR0VULmdldCgnbGFzdF9kYXRlX2Zyb20nLHRpbWV6b25lLmxvY2FsdGltZSh0aW1lem9uZS5ub3coKSkuc3RyZnRpbWUoIiVkLyVtLyVZIikpCisgICAgY29udGV4dF9kYXRlWydsYXN0X2RhdGVfdG8nICBdID0gcmVxdWVzdC5HRVQuZ2V0KCdsYXN0X2RhdGVfdG8nICAsY29udGV4dF9kYXRlWydsYXN0X2RhdGVfZnJvbSddKQorICAgICMgY2FsY3VsYXRlIHRoZSBkYXRlIHJhbmdlcywgYXZvaWQgc2Vjb25kIHNvcnQgZm9yICdjcmVhdGVkJworICAgICMgZmV0Y2ggdGhlIHJlc3BlY3RpdmUgbWF4IHJhbmdlIGZyb20gdGhlIGRhdGFiYXNlCisgICAgY29udGV4dF9kYXRlWydkYXRlcmFuZ2VfZmlsdGVyJ109JycKKyAgICBmb3Iga2V5IGluIGRhdGVyYW5nZV9saXN0OgorICAgICAgICBxdWVyeXNldF9rZXkgPSBxdWVyeXNldF9hbGwub3JkZXJfYnkoa2V5KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0X2RhdGVbJ2RhdGVNaW5fJytrZXldPXRpbWV6b25lLmxvY2FsdGltZShnZXRhdHRyKHF1ZXJ5c2V0X2tleS5maXJzdCgpLGtleSkpLnN0cmZ0aW1lKCIlZC8lbS8lWSIpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRleHRfZGF0ZVsnZGF0ZU1pbl8nK2tleV09dGltZXpvbmUubG9jYWx0aW1lKHRpbWV6b25lLm5vdygpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0X2RhdGVbJ2RhdGVNYXhfJytrZXldPXRpbWV6b25lLmxvY2FsdGltZShnZXRhdHRyKHF1ZXJ5c2V0X2tleS5sYXN0KCksa2V5KSkuc3RyZnRpbWUoIiVkLyVtLyVZIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY29udGV4dF9kYXRlWydkYXRlTWF4Xycra2V5XT10aW1lem9uZS5sb2NhbHRpbWUodGltZXpvbmUubm93KCkpCisgICAgcmV0dXJuIGNvbnRleHRfZGF0ZSx0b2RheV9iZWdpbix5ZXN0ZXJkYXlfYmVnaW4KKworCisjIworIyBidWlsZCBkYXNoYm9hcmQgZm9yIGEgc2luZ2xlIGJ1aWxkLCBjb21pbmcgaW4gYXMgYXJndW1lbnQKKyMgRWFjaCBidWlsZCBtYXkgY29udGFpbiBtdWx0aXBsZSB0YXJnZXRzIGFuZCBlYWNoIHRhcmdldAorIyBtYXkgZ2VuZXJhdGUgbXVsdGlwbGUgaW1hZ2UgZmlsZXMuIGRpc3BsYXkgdGhlbSBhbGwuCisjCitkZWYgYnVpbGRkYXNoYm9hcmQoIHJlcXVlc3QsIGJ1aWxkX2lkICk6CisgICAgdGVtcGxhdGUgPSAiYnVpbGRkYXNoYm9hcmQuaHRtbCIKKyAgICBpZiBCdWlsZC5vYmplY3RzLmZpbHRlciggcGs9YnVpbGRfaWQgKS5jb3VudCggKSA9PSAwIDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCBidWlsZHMgKQorICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQoIHBrID0gYnVpbGRfaWQgKTsKKyAgICBsYXllclZlcnNpb25JZCA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5maWx0ZXIoIGJ1aWxkID0gYnVpbGRfaWQgKTsKKyAgICByZWNpcGVDb3VudCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlciggbGF5ZXJfdmVyc2lvbl9faWRfX2luID0gbGF5ZXJWZXJzaW9uSWQgKS5jb3VudCggKTsKKyAgICB0Z3RzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IGJ1aWxkX2lkICkub3JkZXJfYnkoICd0YXJnZXQnICk7CisKKyAgICAjIworICAgICMgc2V0IHVwIGN1c3RvbSB0YXJnZXQgbGlzdCB3aXRoIGNvbXB1dGVkIHBhY2thZ2UgYW5kIGltYWdlIGRhdGEKKyAgICAjCisKKyAgICB0YXJnZXRzID0gWyBdCisgICAgbnRhcmdldHMgPSAwCisgICAgaGFzSW1hZ2VzID0gRmFsc2UKKyAgICB0YXJnZXRIYXNOb0ltYWdlcyA9IEZhbHNlCisgICAgZm9yIHQgaW4gdGd0czoKKyAgICAgICAgZWxlbSA9IHsgfQorICAgICAgICBlbGVtWyAndGFyZ2V0JyBdID0gdAorICAgICAgICBpZiAoIHQuaXNfaW1hZ2UgKToKKyAgICAgICAgICAgIGhhc0ltYWdlcyA9IFRydWUKKyAgICAgICAgbnBrZyA9IDAKKyAgICAgICAgcGtnc3ogPSAwCisgICAgICAgIHBhY2thZ2UgPSBOb25lCisgICAgICAgIGZvciBwYWNrYWdlIGluIFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWRfX2luID0gW3gucGFja2FnZV9pZCBmb3IgeCBpbiB0LnRhcmdldF9pbnN0YWxsZWRfcGFja2FnZV9zZXQuYWxsKCldKToKKyAgICAgICAgICAgIHBrZ3N6ID0gcGtnc3ogKyBwYWNrYWdlLnNpemUKKyAgICAgICAgICAgIGlmICggcGFja2FnZS5pbnN0YWxsZWRfbmFtZSApOgorICAgICAgICAgICAgICAgIG5wa2cgPSBucGtnICsgMQorICAgICAgICBlbGVtWyAnbnBrZycgXSA9IG5wa2cKKyAgICAgICAgZWxlbVsgJ3BrZ3N6JyBdID0gcGtnc3oKKyAgICAgICAgdGkgPSBUYXJnZXRfSW1hZ2VfRmlsZS5vYmplY3RzLmZpbHRlciggdGFyZ2V0X2lkID0gdC5pZCApCisgICAgICAgIGltYWdlRmlsZXMgPSBbIF0KKyAgICAgICAgZm9yIGkgaW4gdGk6CisgICAgICAgICAgICBuZHggPSBpLmZpbGVfbmFtZS5yZmluZCggJy8nICkKKyAgICAgICAgICAgIGlmICggbmR4IDwgMCApOgorICAgICAgICAgICAgICAgIG5keCA9IDA7CisgICAgICAgICAgICBmID0gaS5maWxlX25hbWVbIG5keCArIDE6IF0KKyAgICAgICAgICAgIGltYWdlRmlsZXMuYXBwZW5kKHsgJ2lkJzogaS5pZCwgJ3BhdGgnOiBmLCAnc2l6ZScgOiBpLmZpbGVfc2l6ZSB9KQorICAgICAgICBpZiAoIHQuaXNfaW1hZ2UgYW5kCisgICAgICAgICAgICAgKCggbGVuKCBpbWFnZUZpbGVzICkgPD0gMCApIG9yICggbGVuKCB0LmxpY2Vuc2VfbWFuaWZlc3RfcGF0aCApIDw9IDAgKSkpOgorICAgICAgICAgICAgdGFyZ2V0SGFzTm9JbWFnZXMgPSBUcnVlCisgICAgICAgIGVsZW1bICdpbWFnZUZpbGVzJyBdID0gaW1hZ2VGaWxlcworICAgICAgICBlbGVtWyAndGFyZ2V0SGFzTm9JbWFnZXMnIF0gPSB0YXJnZXRIYXNOb0ltYWdlcworICAgICAgICB0YXJnZXRzLmFwcGVuZCggZWxlbSApCisKKyAgICAjIworICAgICMgaG93IG1hbnkgcGFja2FnZXMgaW4gdGhpcyBidWlsZCAtIGlnbm9yZSBhbm9ueW1vdXMgb25lcworICAgICMKKworICAgIHBhY2thZ2VDb3VudCA9IDAKKyAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoIGJ1aWxkX2lkID0gYnVpbGRfaWQgKQorICAgIGZvciBwIGluIHBhY2thZ2VzOgorICAgICAgICBpZiAoIHAuaW5zdGFsbGVkX25hbWUgKToKKyAgICAgICAgICAgIHBhY2thZ2VDb3VudCA9IHBhY2thZ2VDb3VudCArIDEKKworICAgIGxvZ21lc3NhZ2VzID0gbGlzdChMb2dNZXNzYWdlLm9iamVjdHMuZmlsdGVyKCBidWlsZCA9IGJ1aWxkX2lkICkpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgOiBidWlsZCwKKyAgICAgICAgICAgICdoYXNJbWFnZXMnICAgICAgIDogaGFzSW1hZ2VzLAorICAgICAgICAgICAgJ250YXJnZXRzJyAgICAgICAgOiBudGFyZ2V0cywKKyAgICAgICAgICAgICd0YXJnZXRzJyAgICAgICAgIDogdGFyZ2V0cywKKyAgICAgICAgICAgICdyZWNpcGVjb3VudCcgICAgIDogcmVjaXBlQ291bnQsCisgICAgICAgICAgICAncGFja2FnZWNvdW50JyAgICA6IHBhY2thZ2VDb3VudCwKKyAgICAgICAgICAgICdsb2dtZXNzYWdlcycgICAgIDogbG9nbWVzc2FnZXMsCisgICAgfQorICAgIHJldHVybiByZW5kZXIoIHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0ICkKKworCisKK2RlZiBnZW5lcmF0ZUNvdmVyZWRMaXN0MiggcmV2bGlzdCA9IE5vbmUgKToKKyAgICBpZiBub3QgcmV2bGlzdDoKKyAgICAgICAgcmV2bGlzdCA9IFtdCisgICAgY292ZXJlZF9saXN0ID0gIFsgeCBmb3IgeCBpbiByZXZsaXN0IGlmIHgub3V0Y29tZSA9PSBUYXNrLk9VVENPTUVfQ09WRVJFRCBdCisgICAgd2hpbGUgbGVuKGNvdmVyZWRfbGlzdCk6CisgICAgICAgIHJldmxpc3QgPSAgWyB4IGZvciB4IGluIHJldmxpc3QgaWYgeC5vdXRjb21lICE9IFRhc2suT1VUQ09NRV9DT1ZFUkVEIF0KKyAgICAgICAgaWYgbGVuKHJldmxpc3QpID4gMDoKKyAgICAgICAgICAgIHJldHVybiByZXZsaXN0CisKKyAgICAgICAgbmV3bGlzdCA9IF9maW5kX3Rhc2tfcmV2ZGVwX2xpc3QoY292ZXJlZF9saXN0KQorCisgICAgICAgIHJldmxpc3QgPSBsaXN0KHNldChyZXZsaXN0ICsgbmV3bGlzdCkpCisgICAgICAgIGNvdmVyZWRfbGlzdCA9ICBbIHggZm9yIHggaW4gcmV2bGlzdCBpZiB4Lm91dGNvbWUgPT0gVGFzay5PVVRDT01FX0NPVkVSRUQgXQorICAgIHJldHVybiByZXZsaXN0CisKK2RlZiB0YXNrKCByZXF1ZXN0LCBidWlsZF9pZCwgdGFza19pZCApOgorICAgIHRlbXBsYXRlID0gInRhc2suaHRtbCIKKyAgICB0YXNrc19saXN0ID0gVGFzay5vYmplY3RzLmZpbHRlciggcGs9dGFza19pZCApCisgICAgaWYgdGFza3NfbGlzdC5jb3VudCggKSA9PSAwOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoIGJ1aWxkcyApCisgICAgdGFza19vYmplY3QgPSB0YXNrc19saXN0WyAwIF07CisgICAgZGVwZW5kZW5jaWVzID0gc29ydGVkKAorICAgICAgICBfZmluZF90YXNrX2RlcCggdGFza19vYmplY3QgKSwKKyAgICAgICAga2V5PWxhbWJkYSB0Oiclc18lcyAlcyclKHQucmVjaXBlLm5hbWUsIHQucmVjaXBlLnZlcnNpb24sIHQudGFza19uYW1lKSkKKyAgICByZXZlcnNlX2RlcGVuZGVuY2llcyA9IHNvcnRlZCgKKyAgICAgICAgX2ZpbmRfdGFza19yZXZkZXAoIHRhc2tfb2JqZWN0ICksCisgICAgICAgIGtleT1sYW1iZGEgdDonJXNfJXMgJXMnJSggdC5yZWNpcGUubmFtZSwgdC5yZWNpcGUudmVyc2lvbiwgdC50YXNrX25hbWUgKSkKKyAgICBjb3ZlcmVkQnkgPSAnJzsKKyAgICBpZiAoIHRhc2tfb2JqZWN0Lm91dGNvbWUgPT0gVGFzay5PVVRDT01FX0NPVkVSRUQgKToKKyMgICAgICAgIF9saXN0ID0gZ2VuZXJhdGVDb3ZlcmVkTGlzdCggdGFzayApCisgICAgICAgIGNvdmVyZWRCeSA9IHNvcnRlZChnZW5lcmF0ZUNvdmVyZWRMaXN0MiggX2ZpbmRfdGFza19yZXZkZXAoIHRhc2tfb2JqZWN0ICkgKSwga2V5ID0gbGFtYmRhIHg6IHgucmVjaXBlLm5hbWUpCisgICAgbG9nX2hlYWQgPSAnJworICAgIGxvZ19ib2R5ID0gJycKKyAgICBpZiB0YXNrX29iamVjdC5vdXRjb21lID09IHRhc2tfb2JqZWN0Lk9VVENPTUVfRkFJTEVEOgorICAgICAgICBwYXNzCisKKyAgICB1cmlfbGlzdD0gWyBdCisgICAgdmFyaWFibGVzID0gVmFyaWFibGUub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpCisgICAgdj12YXJpYWJsZXMuZmlsdGVyKHZhcmlhYmxlX25hbWU9J1NTVEFURV9ESVInKQorICAgIGlmIHYuY291bnQoKSA+IDA6CisgICAgICAgIHVyaV9saXN0LmFwcGVuZCh2WzBdLnZhcmlhYmxlX3ZhbHVlKQorICAgIHY9dmFyaWFibGVzLmZpbHRlcih2YXJpYWJsZV9uYW1lPSdTU1RBVEVfTUlSUk9SUycpCisgICAgaWYgKHYuY291bnQoKSA+IDApOgorICAgICAgICBmb3IgbWlycm9yIGluIHZbMF0udmFyaWFibGVfdmFsdWUuc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgcz1yZS5zdWIoJy4qICcsJycsbWlycm9yLnN0cmlwKCcgXHRcblxyJykpCisgICAgICAgICAgICBpZiBsZW4ocyk6CisgICAgICAgICAgICAgICAgdXJpX2xpc3QuYXBwZW5kKHMpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgOiBCdWlsZC5vYmplY3RzLmZpbHRlciggcGsgPSBidWlsZF9pZCApWyAwIF0sCisgICAgICAgICAgICAnb2JqZWN0JyAgICAgICAgICA6IHRhc2tfb2JqZWN0LAorICAgICAgICAgICAgJ3Rhc2snICAgICAgICAgICAgOiB0YXNrX29iamVjdCwKKyAgICAgICAgICAgICdjb3ZlcmVkX2J5JyAgICAgIDogY292ZXJlZEJ5LAorICAgICAgICAgICAgJ2RlcHMnICAgICAgICAgICAgOiBkZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAncmRlcHMnICAgICAgICAgICA6IHJldmVyc2VfZGVwZW5kZW5jaWVzLAorICAgICAgICAgICAgJ2xvZ19oZWFkJyAgICAgICAgOiBsb2dfaGVhZCwKKyAgICAgICAgICAgICdsb2dfYm9keScgICAgICAgIDogbG9nX2JvZHksCisgICAgICAgICAgICAnc2hvd2luZ19tYXRjaGVzJyA6IEZhbHNlLAorICAgICAgICAgICAgJ3VyaV9saXN0JyAgICAgICAgOiB1cmlfbGlzdCwKKyAgICB9CisgICAgaWYgcmVxdWVzdC5HRVQuZ2V0KCAnc2hvd19tYXRjaGVzJywgIiIgKToKKyAgICAgICAgY29udGV4dFsgJ3Nob3dpbmdfbWF0Y2hlcycgXSA9IFRydWUKKyAgICAgICAgY29udGV4dFsgJ21hdGNoaW5nX3Rhc2tzJyBdID0gVGFzay5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgIHNzdGF0ZV9jaGVja3N1bT10YXNrX29iamVjdC5zc3RhdGVfY2hlY2tzdW0gKS5maWx0ZXIoCisgICAgICAgICAgICBidWlsZF9fY29tcGxldGVkX29uX19sdD10YXNrX29iamVjdC5idWlsZC5jb21wbGV0ZWRfb24pLmV4Y2x1ZGUoCisgICAgICAgICAgICBvcmRlcl9faXNudWxsPVRydWUpLmV4Y2x1ZGUob3V0Y29tZT1UYXNrLk9VVENPTUVfTkEpLm9yZGVyX2J5KCctYnVpbGRfX2NvbXBsZXRlZF9vbicpCisKKyAgICByZXR1cm4gcmVuZGVyKCByZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCApCisKK2RlZiByZWNpcGUocmVxdWVzdCwgYnVpbGRfaWQsIHJlY2lwZV9pZCwgYWN0aXZlX3RhYj0iMSIpOgorICAgIHRlbXBsYXRlID0gInJlY2lwZS5odG1sIgorICAgIGlmIFJlY2lwZS5vYmplY3RzLmZpbHRlcihwaz1yZWNpcGVfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisKKyAgICByZWNpcGVfb2JqZWN0ID0gUmVjaXBlLm9iamVjdHMuZ2V0KHBrPXJlY2lwZV9pZCkKKyAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChwaz1yZWNpcGVfb2JqZWN0LmxheWVyX3ZlcnNpb25faWQpCisgICAgbGF5ZXIgID0gTGF5ZXIub2JqZWN0cy5nZXQocGs9bGF5ZXJfdmVyc2lvbi5sYXllcl9pZCkKKyAgICB0YXNrc19saXN0ICA9IFRhc2sub2JqZWN0cy5maWx0ZXIocmVjaXBlX2lkID0gcmVjaXBlX2lkLCBidWlsZF9pZCA9IGJ1aWxkX2lkKS5leGNsdWRlKG9yZGVyX19pc251bGw9VHJ1ZSkuZXhjbHVkZSh0YXNrX25hbWVfX2VuZHN3aXRoPSdfc2V0c2NlbmUnKS5leGNsdWRlKG91dGNvbWU9VGFzay5PVVRDT01FX05BKQorICAgIHBhY2thZ2VfY291bnQgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKHJlY2lwZV9pZCA9IHJlY2lwZV9pZCkuZmlsdGVyKGJ1aWxkX2lkID0gYnVpbGRfaWQpLmZpbHRlcihzaXplX19ndGU9MCkuY291bnQoKQorCisgICAgaWYgYWN0aXZlX3RhYiAhPSAnMScgYW5kIGFjdGl2ZV90YWIgIT0gJzMnIGFuZCBhY3RpdmVfdGFiICE9ICc0JyA6CisgICAgICAgIGFjdGl2ZV90YWIgPSAnMScKKyAgICB0YWJfc3RhdGVzID0geycxJzogJycsICczJzogJycsICc0JzogJyd9CisgICAgdGFiX3N0YXRlc1thY3RpdmVfdGFiXSA9ICdhY3RpdmUnCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyAgIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ29iamVjdCcgIDogcmVjaXBlX29iamVjdCwKKyAgICAgICAgICAgICdsYXllcl92ZXJzaW9uJyA6IGxheWVyX3ZlcnNpb24sCisgICAgICAgICAgICAnbGF5ZXInICAgOiBsYXllciwKKyAgICAgICAgICAgICd0YXNrcycgICA6IHRhc2tzX2xpc3QsCisgICAgICAgICAgICAncGFja2FnZV9jb3VudCcgOiBwYWNrYWdlX2NvdW50LAorICAgICAgICAgICAgJ3RhYl9zdGF0ZXMnIDogdGFiX3N0YXRlcywKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworZGVmIHJlY2lwZV9wYWNrYWdlcyhyZXF1ZXN0LCBidWlsZF9pZCwgcmVjaXBlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJyZWNpcGVfcGFja2FnZXMuaHRtbCIKKyAgICBpZiBSZWNpcGUub2JqZWN0cy5maWx0ZXIocGs9cmVjaXBlX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAsICduYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncmVjaXBlX3BhY2thZ2VzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkLCByZWNpcGVfaWQgPSByZWNpcGVfaWQpCisgICAgKGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcpID0gX3NlYXJjaF90dXBsZShyZXF1ZXN0LCBQYWNrYWdlKQorCisgICAgcmVjaXBlX29iamVjdCA9IFJlY2lwZS5vYmplY3RzLmdldChwaz1yZWNpcGVfaWQpCisgICAgcXVlcnlzZXQgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKHJlY2lwZV9pZCA9IHJlY2lwZV9pZCkuZmlsdGVyKGJ1aWxkX2lkID0gYnVpbGRfaWQpLmZpbHRlcihzaXplX19ndGU9MCkKKyAgICBwYWNrYWdlX2NvdW50ID0gcXVlcnlzZXQuY291bnQoKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChQYWNrYWdlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQorCisgICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSxyZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnICAgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAncmVjaXBlJyAgOiByZWNpcGVfb2JqZWN0LAorICAgICAgICAgICAgJ29iamVjdHMnICA6IHBhY2thZ2VzLAorICAgICAgICAgICAgJ29iamVjdF9jb3VudCcgOiBwYWNrYWdlX2NvdW50LAorICAgICAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidQYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsIm5hbWUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JzogIm5hbWUiLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1ZlcnNpb24nLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1NpemUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsInNpemUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwic2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknOiAnc2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc2l6ZWNvbCBzcGFuMicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgXQorICAgICAgIH0KKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgdGFyZ2V0X2NvbW1vbiggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgdmFyaWFudCApOgorICAgIHRlbXBsYXRlID0gInRhcmdldC5odG1sIgorICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnbmFtZTorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieSc6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycygKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBidWlsZF9pZCA9IGJ1aWxkX2lkLCB0YXJnZXRfaWQgPSB0YXJnZXRfaWQgKQorICAgICggZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZyApID0gX3NlYXJjaF90dXBsZSggcmVxdWVzdCwgUGFja2FnZSApCisKKyAgICAjIEZVVFVSRTogIGdldCByaWQgb2YgbmVzdGVkIHN1Yi1xdWVyaWVzIHJlcGxhY2luZyB3aXRoIE1hbnlUb01hbnkgZmllbGQKKyAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgIHNpemVfX2d0ZSA9IDAsCisgICAgICAgICAgICAgICAgICAgIGlkX19pbiA9IFRhcmdldF9JbnN0YWxsZWRfUGFja2FnZS5vYmplY3RzLmZpbHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9pZD10YXJnZXRfaWQgKS52YWx1ZXMoICdwYWNrYWdlX2lkJyApKQorICAgIHBhY2thZ2VzX3N1bSA9ICBxdWVyeXNldC5hZ2dyZWdhdGUoIFN1bSggJ2luc3RhbGxlZF9zaXplJyApKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldCgKKyAgICAgICAgICAgIFBhY2thZ2UsIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAnbmFtZScgKQorICAgIHF1ZXJ5c2V0ID0gcXVlcnlzZXQuc2VsZWN0X3JlbGF0ZWQoInJlY2lwZSIsICJyZWNpcGVfX2xheWVyX3ZlcnNpb24iLCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllciIpCisgICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZSggUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCggJ3BhZ2UnLCAxICkpCisKKworCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldCggcGsgPSBidWlsZF9pZCApCisKKyAgICAjIGJyaW5nIGluIHBhY2thZ2UgZGVwZW5kZW5jaWVzCisgICAgZm9yIHAgaW4gcGFja2FnZXMub2JqZWN0X2xpc3Q6CisgICAgICAgIHAucnVudGltZV9kZXBlbmRlbmNpZXMgPSBwLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5maWx0ZXIoCisgICAgICAgICAgICB0YXJnZXRfaWQgPSB0YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUyApLnNlbGVjdF9yZWxhdGVkKCJkZXBlbmRzX29uIikKKyAgICAgICAgcC5yZXZlcnNlX3J1bnRpbWVfZGVwZW5kZW5jaWVzID0gcC5wYWNrYWdlX2RlcGVuZGVuY2llc190YXJnZXQuZmlsdGVyKAorICAgICAgICAgICAgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkLCBkZXBfdHlwZT1QYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkRFUEVORFMgKS5zZWxlY3RfcmVsYXRlZCgicGFja2FnZSIpCisgICAgdGNfcGFja2FnZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1BhY2thZ2UnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnUGFja2FnZWQgb3V0cHV0IHJlc3VsdGluZyBmcm9tIGJ1aWxkaW5nIGEgcmVjaXBlIGluY2x1ZGVkIGluIHRoaXMgaW1hZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgIm5hbWUiICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJuYW1lIiApLAorICAgICAgICB9CisgICAgdGNfcGFja2FnZVZlcnNpb24gPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdQYWNrYWdlIHZlcnNpb24nLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIHBhY2thZ2UgdmVyc2lvbiBhbmQgcmV2aXNpb24nLAorICAgICAgICB9CisgICAgdGNfc2l6ZSA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ1NpemUnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIHNpemUgb2YgdGhlIHBhY2thZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInNpemUiLCBUcnVlICksCisgICAgICAgICdvcmRlcmljb24nICA6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24oIHJlcXVlc3QsICJzaXplIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAnc2l6ZScsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdzaXplJywKKyAgICAgICAgJ2RjbGFzcycgICAgIDogJ3NwYW4yJywKKyAgICAgICAgfQorICAgIGlmICggdmFyaWFudCA9PSAndGFyZ2V0JyApOgorICAgICAgICB0Y19zaXplWyAiaGlkZGVuIiBdID0gMAorICAgIGVsc2U6CisgICAgICAgIHRjX3NpemVbICJoaWRkZW4iIF0gPSAxCisgICAgdGNfc2l6ZVBlcmNlbnRhZ2UgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdTaXplIG92ZXIgdG90YWwgKCUpJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1Byb3BvcnRpb24gb2YgdGhlIG92ZXJhbGwgc2l6ZSByZXByZXNlbnRlZCBieSB0aGlzIHBhY2thZ2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnc2l6ZV9vdmVyX3RvdGFsJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorICAgIHRjX2xpY2Vuc2UgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdMaWNlbnNlJywKKyAgICAgICAgJ3FoZWxwJyAgICAgIDogJ1RoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSBwYWNrYWdlIGlzIGRpc3RyaWJ1dGVkLiBTZXBhcmF0ZSBsaWNlbnNlIG5hbWVzIHVcCitzaW5nIHwgKHBpcGUpIG1lYW5zIHRoZXJlIGlzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuIFNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdXNpbmcgJiAoYW1wZXJzYW5kKSBtXAorZWFucyBtdWx0aXBsZSBsaWNlbnNlcyBleGlzdCB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlJywKKyAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJsaWNlbnNlIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAibGljZW5zZSIgKSwKKyAgICAgICAgJ29yZGVya2V5JyAgIDogJ2xpY2Vuc2UnLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnbGljZW5zZScsCisgICAgICAgIH0KKyAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKKyAgICAgICAgdGNfbGljZW5zZVsgImhpZGRlbiIgXSA9IDEKKyAgICBlbHNlOgorICAgICAgICB0Y19saWNlbnNlWyAiaGlkZGVuIiBdID0gMAorICAgIHRjX2RlcGVuZGVuY2llcyA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0RlcGVuZGVuY2llcycsCisgICAgICAgICdxaGVscCcgICAgICA6ICJQYWNrYWdlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChvdGhlciBwYWNrYWdlcykiLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnZGVwZW5kcycsCisgICAgICAgIH0KKyAgICBpZiAoIHZhcmlhbnQgPT0gJ3RhcmdldCcgKToKKyAgICAgICAgdGNfZGVwZW5kZW5jaWVzWyAiaGlkZGVuIiBdID0gMAorICAgIGVsc2U6CisgICAgICAgIHRjX2RlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDEKKyAgICB0Y19yZGVwZW5kZW5jaWVzID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnUmV2ZXJzZSBkZXBlbmRlbmNpZXMnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnUGFja2FnZSBydW4tdGltZSByZXZlcnNlIGRlcGVuZGVuY2llcyAoaS5lLiB3aGljaCBvdGhlciBwYWNrYWdlcyBkZXBlbmQgb24gdGhpcyBwYWNrYWdlJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2Jyb3VnaHRfaW5fYnknLAorICAgICAgICB9CisgICAgaWYgKCB2YXJpYW50ID09ICd0YXJnZXQnICk6CisgICAgICAgIHRjX3JkZXBlbmRlbmNpZXNbICJoaWRkZW4iIF0gPSAwCisgICAgZWxzZToKKyAgICAgICAgdGNfcmRlcGVuZGVuY2llc1sgImhpZGRlbiIgXSA9IDEKKyAgICB0Y19yZWNpcGUgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdSZWNpcGUnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIG5hbWUgb2YgdGhlIHJlY2lwZSBidWlsZGluZyB0aGUgcGFja2FnZScsCisgICAgICAgICdvcmRlcmZpZWxkJyA6IF9nZXRfdG9nZ2xlX29yZGVyKCByZXF1ZXN0LCAicmVjaXBlX19uYW1lIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAicmVjaXBlX19uYW1lIiApLAorICAgICAgICAnb3JkZXJrZXknICAgOiAicmVjaXBlX19uYW1lIiwKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3JlY2lwZV9uYW1lJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMCwKKyAgICAgICAgfQorICAgIHRjX3JlY2lwZVZlcnNpb24gPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICdxaGVscCcgICAgICA6ICdWZXJzaW9uIGFuZCByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ3JlY2lwZV92ZXJzaW9uJywKKyAgICAgICAgJ2hpZGRlbicgICAgIDogMSwKKyAgICAgICAgfQorICAgIHRjX2xheWVyID0geworICAgICAgICAnbmFtZScgICAgICAgOiAnTGF5ZXInLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIG5hbWUgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ29yZGVyZmllbGQnIDogX2dldF90b2dnbGVfb3JkZXIoIHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIgKSwKKyAgICAgICAgJ29yZGVya2V5JyAgIDogInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiLAorICAgICAgICAnY2xjbGFzcycgICAgOiAnbGF5ZXJfbmFtZScsCisgICAgICAgICdoaWRkZW4nICAgICA6IDEsCisgICAgICAgIH0KKyAgICB0Y19sYXllckJyYW5jaCA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgIDogJ0xheWVyIGJyYW5jaCcsCisgICAgICAgICdxaGVscCcgICAgICA6ICdUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAnb3JkZXJmaWVsZCcgOiBfZ2V0X3RvZ2dsZV9vcmRlciggcmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiApLAorICAgICAgICAnb3JkZXJpY29uJyAgOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKCByZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giICksCisgICAgICAgICdvcmRlcmtleScgICA6ICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCIsCisgICAgICAgICdjbGNsYXNzJyAgICA6ICdsYXllcl9icmFuY2gnLAorICAgICAgICAnaGlkZGVuJyAgICAgOiAxLAorICAgICAgICB9CisgICAgdGNfbGF5ZXJDb21taXQgPSB7CisgICAgICAgICduYW1lJyAgICAgICA6ICdMYXllciBjb21taXQnLAorICAgICAgICAncWhlbHAnICAgICAgOiAnVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKKyAgICAgICAgJ2NsY2xhc3MnICAgIDogJ2xheWVyX2NvbW1pdCcsCisgICAgICAgICdoaWRkZW4nICAgICA6IDEsCisgICAgICAgIH0KKworICAgIGNvbnRleHQgPSB7CisgICAgICAgICdvYmplY3RuYW1lJzogdmFyaWFudCwKKyAgICAgICAgJ2J1aWxkJyAgICAgICAgICAgICAgICA6IGJ1aWxkLAorICAgICAgICAndGFyZ2V0JyAgICAgICAgICAgICAgIDogVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBwayA9IHRhcmdldF9pZCApWyAwIF0sCisgICAgICAgICdvYmplY3RzJyAgICAgICAgICAgICAgOiBwYWNrYWdlcywKKyAgICAgICAgJ3BhY2thZ2VzX3N1bScgICAgICAgICA6IHBhY2thZ2VzX3N1bVsgJ2luc3RhbGxlZF9zaXplX19zdW0nIF0sCisgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOiAicGFja2FnZXMgaW5jbHVkZWQiLAorICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyAgICAgIDogb3JkZXJieSwKKyAgICAgICAgJ3RhYmxlY29scycgICAgICAgICAgICA6IFsKKyAgICAgICAgICAgICAgICAgICAgdGNfcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfcGFja2FnZVZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgIHRjX2xpY2Vuc2UsCisgICAgICAgICAgICAgICAgICAgIHRjX3NpemUsCisgICAgICAgICAgICAgICAgICAgIHRjX3NpemVQZXJjZW50YWdlLAorICAgICAgICAgICAgICAgICAgICB0Y19kZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgIHRjX3JkZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgIHRjX3JlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfcmVjaXBlVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgdGNfbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgIHRjX2xheWVyQnJhbmNoLAorICAgICAgICAgICAgICAgICAgICB0Y19sYXllckNvbW1pdCwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIH0KKworCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIHRhcmdldCggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCApOgorICAgIHJldHVybiggdGFyZ2V0X2NvbW1vbiggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgInRhcmdldCIgKSkKKworZGVmIHRhcmdldHBrZyggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCApOgorICAgIHJldHVybiggdGFyZ2V0X2NvbW1vbiggcmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgInRhcmdldHBrZyIgKSkKKworZnJvbSBkamFuZ28uY29yZS5zZXJpYWxpemVycy5qc29uIGltcG9ydCBEamFuZ29KU09ORW5jb2RlcgorZnJvbSBkamFuZ28uaHR0cCBpbXBvcnQgSHR0cFJlc3BvbnNlCitkZWYgeGhyX2RpcmluZm8ocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCk6CisgICAgdG9wID0gcmVxdWVzdC5HRVQuZ2V0KCdzdGFydCcsICcvJykKKyAgICByZXR1cm4gSHR0cFJlc3BvbnNlKF9nZXRfZGlyX2VudHJpZXMoYnVpbGRfaWQsIHRhcmdldF9pZCwgdG9wKSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCitmcm9tIGRqYW5nby51dGlscy5mdW5jdGlvbmFsIGltcG9ydCBQcm9taXNlCitmcm9tIGRqYW5nby51dGlscy5lbmNvZGluZyBpbXBvcnQgZm9yY2VfdGV4dAorY2xhc3MgTGF6eUVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6CisgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFByb21pc2UpOgorICAgICAgICAgICAgcmV0dXJuIGZvcmNlX3RleHQob2JqKQorICAgICAgICByZXR1cm4gc3VwZXIoTGF6eUVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCitmcm9tIHRvYXN0ZXJndWkudGVtcGxhdGV0YWdzLnByb2plY3R0YWdzIGltcG9ydCBmaWx0ZXJlZF9maWxlc2l6ZWZvcm1hdAoraW1wb3J0IG9zCitkZWYgX2dldF9kaXJfZW50cmllcyhidWlsZF9pZCwgdGFyZ2V0X2lkLCBzdGFydCk6CisgICAgbm9kZV9zdHIgPSB7CisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX1JFR1VMQVIgICA6ICctJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZIDogJ2QnLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9TWU1MSU5LICAgOiAnbCcsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX1NPQ0tFVCAgICA6ICdzJywKKyAgICAgICAgVGFyZ2V0X0ZpbGUuSVRZUEVfRklGTyAgICAgIDogJ3AnLAorICAgICAgICBUYXJnZXRfRmlsZS5JVFlQRV9DSEFSQUNURVIgOiAnYycsCisgICAgICAgIFRhcmdldF9GaWxlLklUWVBFX0JMT0NLICAgICA6ICdiJywKKyAgICB9CisgICAgcmVzcG9uc2UgPSBbXQorICAgIG9iamVjdHMgID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5maWx0ZXIodGFyZ2V0X19leGFjdD10YXJnZXRfaWQsIGRpcmVjdG9yeV9fcGF0aD1zdGFydCkKKyAgICB0YXJnZXRfcGFja2FnZXMgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X19leGFjdD10YXJnZXRfaWQpLnZhbHVlc19saXN0KCdwYWNrYWdlX2lkJywgZmxhdD1UcnVlKQorICAgIGZvciBvIGluIG9iamVjdHM6CisgICAgICAgICMgZXhjbHVkZSByb290IGlub2RlICcvJworICAgICAgICBpZiBvLnBhdGggPT0gJy8nOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnkgPSB7fQorICAgICAgICAgICAgZW50cnlbJ3BhcmVudCddID0gc3RhcnQKKyAgICAgICAgICAgIGVudHJ5WyduYW1lJ10gPSBvcy5wYXRoLmJhc2VuYW1lKG8ucGF0aCkKKyAgICAgICAgICAgIGVudHJ5WydmdWxscGF0aCddID0gby5wYXRoCisKKyAgICAgICAgICAgICMgc2V0IGRlZmF1bHRzLCBub3QgYWxsIGRlbnRyaWVzIGhhdmUgcGFja2FnZXMKKyAgICAgICAgICAgIGVudHJ5WydpbnN0YWxsZWRfcGFja2FnZSddID0gTm9uZQorICAgICAgICAgICAgZW50cnlbJ3BhY2thZ2VfaWQnXSA9IE5vbmUKKyAgICAgICAgICAgIGVudHJ5WydwYWNrYWdlJ10gPSBOb25lCisgICAgICAgICAgICBlbnRyeVsnbGlua190byddID0gTm9uZQorICAgICAgICAgICAgaWYgby5pbm9kZXR5cGUgPT0gVGFyZ2V0X0ZpbGUuSVRZUEVfRElSRUNUT1JZOgorICAgICAgICAgICAgICAgIGVudHJ5Wydpc2RpciddID0gMQorICAgICAgICAgICAgICAgICMgaXMgdGhlcmUgY29udGVudCBpbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBlbnRyeVsnY2hpbGRjb3VudCddID0gVGFyZ2V0X0ZpbGUub2JqZWN0cy5maWx0ZXIodGFyZ2V0X19leGFjdD10YXJnZXRfaWQsIGRpcmVjdG9yeV9fcGF0aD1vLnBhdGgpLmFsbCgpLmNvdW50KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW50cnlbJ2lzZGlyJ10gPSAwCisKKyAgICAgICAgICAgICAgICAjIHJlc29sdmUgdGhlIGZpbGUgdG8gZ2V0IHRoZSBwYWNrYWdlIGZyb20gdGhlIHJlc29sdmVkIGZpbGUKKyAgICAgICAgICAgICAgICByZXNvbHZlZF9pZCA9IG8uc3ltX3RhcmdldF9pZAorICAgICAgICAgICAgICAgIHJlc29sdmVkX3BhdGggPSBvLnBhdGgKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXRfcGFja2FnZXMuY291bnQoKToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgcmVzb2x2ZWRfaWQgIT0gIiIgYW5kIHJlc29sdmVkX2lkICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZiA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHBrPXJlc29sdmVkX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRfcGF0aCA9IHRmLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkX2lkID0gdGYuc3ltX3RhcmdldF9pZAorCisgICAgICAgICAgICAgICAgICAgIHRoaXNmaWxlPVBhY2thZ2VfRmlsZS5vYmplY3RzLmFsbCgpLmZpbHRlcihwYXRoX19leGFjdD1yZXNvbHZlZF9wYXRoLCBwYWNrYWdlX2lkX19pbj10YXJnZXRfcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIHRoaXNmaWxlLmNvdW50KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwID0gUGFja2FnZS5vYmplY3RzLmdldChwaz10aGlzZmlsZVswXS5wYWNrYWdlX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlbJ2luc3RhbGxlZF9wYWNrYWdlJ10gPSBwLmluc3RhbGxlZF9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsncGFja2FnZV9pZCddID0gc3RyKHAuaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVsncGFja2FnZSddID0gcC5uYW1lCisgICAgICAgICAgICAgICAgIyBkb24ndCB1c2UgcmVzb2x2ZWQgcGF0aCBmcm9tIGFib3ZlLCBzaG93IGltbWVkaWF0ZSBsaW5rLXRvCisgICAgICAgICAgICAgICAgaWYgby5zeW1fdGFyZ2V0X2lkICE9ICIiIGFuZCBvLnN5bV90YXJnZXRfaWQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZW50cnlbJ2xpbmtfdG8nXSA9IFRhcmdldF9GaWxlLm9iamVjdHMuZ2V0KHBrPW8uc3ltX3RhcmdldF9pZCkucGF0aAorICAgICAgICAgICAgZW50cnlbJ3NpemUnXSA9IGZpbHRlcmVkX2ZpbGVzaXplZm9ybWF0KG8uc2l6ZSkKKyAgICAgICAgICAgIGlmIGVudHJ5WydsaW5rX3RvJ10gIT0gTm9uZToKKyAgICAgICAgICAgICAgICBlbnRyeVsncGVybWlzc2lvbiddID0gbm9kZV9zdHJbby5pbm9kZXR5cGVdICsgby5wZXJtaXNzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudHJ5WydwZXJtaXNzaW9uJ10gPSBub2RlX3N0cltvLmlub2RldHlwZV0gKyBvLnBlcm1pc3Npb24KKyAgICAgICAgICAgIGVudHJ5Wydvd25lciddID0gby5vd25lcgorICAgICAgICAgICAgZW50cnlbJ2dyb3VwJ10gPSBvLmdyb3VwCisgICAgICAgICAgICByZXNwb25zZS5hcHBlbmQoZW50cnkpCisKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnQgIkV4Y2VwdGlvbiAiLCBlCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGUpCisKKyAgICAjIHNvcnQgYnkgZGlyZWN0b3JpZXMgZmlyc3QsIHRoZW4gYnkgbmFtZQorICAgIHJzb3J0ZWQgPSBzb3J0ZWQocmVzcG9uc2UsIGtleT1sYW1iZGEgZW50cnkgOiAgZW50cnlbJ25hbWUnXSkKKyAgICByc29ydGVkID0gc29ydGVkKHJzb3J0ZWQsIGtleT1sYW1iZGEgZW50cnkgOiAgZW50cnlbJ2lzZGlyJ10sIHJldmVyc2U9VHJ1ZSkKKyAgICByZXR1cm4ganNvbi5kdW1wcyhyc29ydGVkLCBjbHM9TGF6eUVuY29kZXIpLnJlcGxhY2UoJzwvJywgJzxcXC8nKQorCitkZWYgZGlyaW5mbyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBmaWxlX3BhdGg9Tm9uZSk6CisgICAgdGVtcGxhdGUgPSAiZGlyaW5mby5odG1sIgorICAgIG9iamVjdHMgPSBfZ2V0X2Rpcl9lbnRyaWVzKGJ1aWxkX2lkLCB0YXJnZXRfaWQsICcvJykKKyAgICBwYWNrYWdlc19zdW0gPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKGlkX19pbj1UYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X2lkPXRhcmdldF9pZCkudmFsdWVzKCdwYWNrYWdlX2lkJykpLmFnZ3JlZ2F0ZShTdW0oJ2luc3RhbGxlZF9zaXplJykpCisgICAgZGlyX2xpc3QgPSBOb25lCisgICAgaWYgZmlsZV9wYXRoICE9IE5vbmU6CisgICAgICAgICIiIgorICAgICAgICBMaW5rIGZyb20gdGhlIGluY2x1ZGVkIHBhY2thZ2UgZGV0YWlsIGZpbGUgbGlzdCBwYWdlIGFuZCBpcworICAgICAgICByZXF1ZXN0aW5nIG9wZW5pbmcgdGhlIGRpciBpbmZvIHRvIGEgc3BlY2lmaWMgZmlsZSBwYXRoLgorICAgICAgICBQcm92aWRlIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGV4cGFuZCBhbmQgdGhlIGZ1bGwgcGF0aCB0bworICAgICAgICBoaWdobGlnaHQgaW4gdGhlIHBhZ2UuCisgICAgICAgICIiIgorICAgICAgICAjIEFhc3N1bWUgdGFyZ2V0J3MgcGF0aCBzZXBhcmF0b3IgbWF0Y2hlcyBob3N0J3MsIHRoYXQgaXMsIG9zLnNlcAorICAgICAgICBzZXAgPSBvcy5zZXAKKyAgICAgICAgZGlyX2xpc3QgPSBbXQorICAgICAgICBoZWFkID0gZmlsZV9wYXRoCisgICAgICAgIHdoaWxlIGhlYWQgIT0gc2VwOgorICAgICAgICAgICAgKGhlYWQsIHRhaWwpID0gb3MucGF0aC5zcGxpdChoZWFkKQorICAgICAgICAgICAgaWYgaGVhZCAhPSBzZXA6CisgICAgICAgICAgICAgICAgZGlyX2xpc3QuaW5zZXJ0KDAsIGhlYWQpCisKKyAgICBjb250ZXh0ID0geyAnYnVpbGQnOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAgICAgJ3RhcmdldCc6IFRhcmdldC5vYmplY3RzLmdldChwaz10YXJnZXRfaWQpLAorICAgICAgICAgICAgICAgICdwYWNrYWdlc19zdW0nOiBwYWNrYWdlc19zdW1bJ2luc3RhbGxlZF9zaXplX19zdW0nXSwKKyAgICAgICAgICAgICAgICAnb2JqZWN0cyc6IG9iamVjdHMsCisgICAgICAgICAgICAgICAgJ2Rpcl9saXN0JzogZGlyX2xpc3QsCisgICAgICAgICAgICAgICAgJ2ZpbGVfcGF0aCc6IGZpbGVfcGF0aCwKKyAgICAgICAgICAgICAgfQorICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKK2RlZiBfZmluZF90YXNrX2RlcCh0YXNrX29iamVjdCk6CisgICAgcmV0dXJuIG1hcChsYW1iZGEgeDogeC5kZXBlbmRzX29uLCBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIodGFzaz10YXNrX29iamVjdCkuZmlsdGVyKGRlcGVuZHNfb25fX29yZGVyX19ndCA9IDApLmV4Y2x1ZGUoZGVwZW5kc19vbl9fb3V0Y29tZSA9IFRhc2suT1VUQ09NRV9OQSkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iKSkKKworCitkZWYgX2ZpbmRfdGFza19yZXZkZXAodGFza19vYmplY3QpOgorICAgIHRwID0gW10KKyAgICB0cCA9IG1hcChsYW1iZGEgdDogdC50YXNrLCBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy5maWx0ZXIoZGVwZW5kc19vbj10YXNrX29iamVjdCkuZmlsdGVyKHRhc2tfX29yZGVyX19ndD0wKS5leGNsdWRlKHRhc2tfX291dGNvbWUgPSBUYXNrLk9VVENPTUVfTkEpLnNlbGVjdF9yZWxhdGVkKCJ0YXNrIiwgInRhc2tfX3JlY2lwZSIsICJ0YXNrX19idWlsZCIpKQorICAgIHJldHVybiB0cAorCitkZWYgX2ZpbmRfdGFza19yZXZkZXBfbGlzdCh0YXNrbGlzdCk6CisgICAgdHAgPSBbXQorICAgIHRwID0gbWFwKGxhbWJkYSB0OiB0LnRhc2ssIFRhc2tfRGVwZW5kZW5jeS5vYmplY3RzLmZpbHRlcihkZXBlbmRzX29uX19pbj10YXNrbGlzdCkuZmlsdGVyKHRhc2tfX29yZGVyX19ndD0wKS5leGNsdWRlKHRhc2tfX291dGNvbWUgPSBUYXNrLk9VVENPTUVfTkEpLnNlbGVjdF9yZWxhdGVkKCJ0YXNrIiwgInRhc2tfX3JlY2lwZSIsICJ0YXNrX19idWlsZCIpKQorICAgIHJldHVybiB0cAorCitkZWYgX2ZpbmRfdGFza19wcm92aWRlcih0YXNrX29iamVjdCk6CisgICAgdGFza19yZXZkZXBzID0gX2ZpbmRfdGFza19yZXZkZXAodGFza19vYmplY3QpCisgICAgZm9yIHRyIGluIHRhc2tfcmV2ZGVwczoKKyAgICAgICAgaWYgdHIub3V0Y29tZSAhPSBUYXNrLk9VVENPTUVfQ09WRVJFRDoKKyAgICAgICAgICAgIHJldHVybiB0cgorICAgIGZvciB0ciBpbiB0YXNrX3JldmRlcHM6CisgICAgICAgIHRyYyA9IF9maW5kX3Rhc2tfcHJvdmlkZXIodHIpCisgICAgICAgIGlmIHRyYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB0cmMKKyAgICByZXR1cm4gTm9uZQorCitkZWYgdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCB2YXJpYW50LCB0YXNrX2FuY2hvcik6CisjIFRoaXMgY2xhc3MgaXMgc2hhcmVkIGJldHdlZW4gdGhlc2UgcGFnZXMKKyMKKyMgQ29sdW1uICAgIHRhc2tzICBidWlsZHRpbWUgIGRpc2tpbyAgY3B1dXNhZ2UKKyMgLS0tLS0tLS0tIC0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tCisjIENhY2hlICAgICAgZGVmCisjIENQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluIC0KKyMgRGlzayAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gLQorIyBFeGVjdXRlZCAgIGRlZiAgICAgZGVmICAgICAgIGRlZiAgICAgIGRlZgorIyBMb2cKKyMgT3JkZXIgICAgICBkZWYgKworIyBPdXRjb21lICAgIGRlZiAgICAgZGVmICAgICAgIGRlZiAgICAgIGRlZgorIyBSZWNpcGUgICAgIG1pbiAgICAgbWluICAgICAgIG1pbiAgICAgIG1pbgorIyBWZXJzaW9uCisjIFRhc2sgICAgICAgbWluICAgICBtaW4gICAgICAgbWluICAgICAgbWluCisjIFRpbWUgICAgICAgICAgICAgICBtaW4gLQorIworIyAnbWluJzpvbiBhbHdheXMsICdkZWYnOm9uIGJ5IGRlZmF1bHQsIGVsc2UgaGlkZGVuCisjICcrJyBkZWZhdWx0IGNvbHVtbiBzb3J0IHVwLCAnLScgZGVmYXVsdCBjb2x1bW4gc29ydCBkb3duCisKKyAgICBhbmNob3IgPSByZXF1ZXN0LkdFVC5nZXQoJ2FuY2hvcicsICcnKQorICAgIGlmIG5vdCBhbmNob3I6CisgICAgICAgIGFuY2hvcj10YXNrX2FuY2hvcgorCisgICAgIyBkZWZhdWx0IG9yZGVyaW5nIGRlcGVuZHMgb24gdmFyaWFudAorICAgIGlmICAgJ2J1aWxkdGltZScgPT0gdmFyaWFudDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nVGltZScKKyAgICAgICAgb2JqZWN0X3NlYXJjaF9kaXNwbGF5PSJ0aW1lIGRhdGEiCisgICAgICAgIGZpbHRlcl9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnZWxhcHNlZF90aW1lOi0nKQorICAgIGVsaWYgJ2Rpc2tpbycgICAgPT0gdmFyaWFudDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nRGlzayBJL08nCisgICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheT0iZGlzayBJL08gZGF0YSIKKyAgICAgICAgZmlsdGVyX3NlYXJjaF9kaXNwbGF5PSJ0YXNrcyIKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdkaXNrX2lvOi0nKQorICAgIGVsaWYgJ2NwdXVzYWdlJyAgPT0gdmFyaWFudDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nQ1BVIHVzYWdlJworICAgICAgICBvYmplY3Rfc2VhcmNoX2Rpc3BsYXk9IkNQVSB1c2FnZSBkYXRhIgorICAgICAgICBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXk9InRhc2tzIgorICAgICAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAyNSwgJ2NwdV91c2FnZTotJykKKyAgICBlbHNlIDoKKyAgICAgICAgdGl0bGVfdmFyaWFudD0nVGFza3MnCisgICAgICAgIG9iamVjdF9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIGZpbHRlcl9zZWFyY2hfZGlzcGxheT0idGFza3MiCisgICAgICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAnb3JkZXI6KycpCisKKworICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisKKyAgICB0ZW1wbGF0ZSA9ICd0YXNrcy5odG1sJworICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGlmIHRhc2tfYW5jaG9yOgorICAgICAgICAgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnNbJ2FuY2hvciddPXRhc2tfYW5jaG9yCisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgVGFzaykKKyAgICBxdWVyeXNldF9hbGwgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkPWJ1aWxkX2lkKS5leGNsdWRlKG9yZGVyX19pc251bGw9VHJ1ZSkuZXhjbHVkZShvdXRjb21lPVRhc2suT1VUQ09NRV9OQSkKKyAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuc2VsZWN0X3JlbGF0ZWQoInJlY2lwZSIsICJidWlsZCIpCisKKyAgICBxdWVyeXNldF93aXRoX3NlYXJjaCA9IF9nZXRfcXVlcnlzZXQoVGFzaywgcXVlcnlzZXRfYWxsLCBOb25lICwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ29yZGVyJykKKworICAgIGlmIG9yZGVyaW5nX3N0cmluZy5zdGFydHN3aXRoKCdvdXRjb21lJyk6CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCAnb3JkZXI6KycsICdvcmRlcicpCisgICAgICAgIHF1ZXJ5c2V0ID0gc29ydGVkKHF1ZXJ5c2V0LCBrZXk9bGFtYmRhIHVyOiAodXIub3V0Y29tZV90ZXh0KSwgcmV2ZXJzZT1vcmRlcmluZ19zdHJpbmcuZW5kc3dpdGgoJy0nKSkKKyAgICBlbGlmIG9yZGVyaW5nX3N0cmluZy5zdGFydHN3aXRoKCdzc3RhdGVfcmVzdWx0Jyk6CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCAnb3JkZXI6KycsICdvcmRlcicpCisgICAgICAgIHF1ZXJ5c2V0ID0gc29ydGVkKHF1ZXJ5c2V0LCBrZXk9bGFtYmRhIHVyOiAodXIuc3N0YXRlX3RleHQpLCByZXZlcnNlPW9yZGVyaW5nX3N0cmluZy5lbmRzd2l0aCgnLScpKQorICAgIGVsc2U6CisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChUYXNrLCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICdvcmRlcicpCisKKworICAgICMgY29tcHV0ZSB0aGUgYW5jaG9yJ3MgcGFnZQorICAgIGlmIGFuY2hvcjoKKyAgICAgICAgcmVxdWVzdC5HRVQgPSByZXF1ZXN0LkdFVC5jb3B5KCkKKyAgICAgICAgZGVsIHJlcXVlc3QuR0VUWydhbmNob3InXQorICAgICAgICBpPTAKKyAgICAgICAgYT1pbnQoYW5jaG9yKQorICAgICAgICBjb3VudF9wZXJfcGFnZT1pbnQocGFnZXNpemUpCisgICAgICAgIGZvciB0YXNrX29iamVjdCBpbiBxdWVyeXNldC5pdGVyYXRvcigpOgorICAgICAgICAgICAgaWYgYSA9PSB0YXNrX29iamVjdC5vcmRlcjoKKyAgICAgICAgICAgICAgICBuZXdfcGFnZT0gKGkgLyBjb3VudF9wZXJfcGFnZSApICsgMQorICAgICAgICAgICAgICAgIHJlcXVlc3QuR0VULl9fc2V0aXRlbV9fKCdwYWdlJywgbmV3X3BhZ2UpCisgICAgICAgICAgICAgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnNbJ3BhZ2UnXT1uZXdfcGFnZQorICAgICAgICAgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggdmFyaWFudCwgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgICAgICAgICAgaSArPSAxCisKKyAgICB0YXNrX29iamVjdHMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSxyZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgICMgZGVmaW5lIChhbmQgbW9kaWZ5IGJ5IHZhcmlhbnRzKSB0aGUgJ3RhYmxlY29scycgbWVtYmVycworICAgIHRjX29yZGVyPXsKKyAgICAgICAgJ25hbWUnOidPcmRlcicsCisgICAgICAgICdxaGVscCc6J1RoZSBydW5uaW5nIHNlcXVlbmNlIG9mIGVhY2ggdGFzayBpbiB0aGUgYnVpbGQnLAorICAgICAgICAnY2xjbGFzcyc6ICdvcmRlcicsICdoaWRkZW4nIDogMSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdvcmRlcicsCisgICAgICAgICdvcmRlcmZpZWxkJzpfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAib3JkZXIiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAib3JkZXIiKX0KKyAgICBpZiAndGFza3MnID09IHZhcmlhbnQ6CisgICAgICAgIHRjX29yZGVyWydoaWRkZW4nXT0nMCcKKyAgICAgICAgZGVsIHRjX29yZGVyWydjbGNsYXNzJ10KKworICAgIHRjX3JlY2lwZT17CisgICAgICAgICduYW1lJzonUmVjaXBlJywKKyAgICAgICAgJ3FoZWxwJzonVGhlIG5hbWUgb2YgdGhlIHJlY2lwZSB0byB3aGljaCBlYWNoIHRhc2sgYXBwbGllcycsCisgICAgICAgICdvcmRlcmtleScgOiAncmVjaXBlX19uYW1lJywKKyAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVjaXBlX19uYW1lIiksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInJlY2lwZV9fbmFtZSIpLAorICAgIH0KKyAgICB0Y19yZWNpcGVfdmVyc2lvbj17CisgICAgICAgICduYW1lJzonUmVjaXBlIHZlcnNpb24nLAorICAgICAgICAncWhlbHAnOidUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIGVhY2ggdGFzayBhcHBsaWVzJywKKyAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX3ZlcnNpb24nLCAnaGlkZGVuJyA6IDEsCisgICAgfQorICAgIHRjX3Rhc2s9eworICAgICAgICAnbmFtZSc6J1Rhc2snLAorICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgdGFzaycsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInRhc2tfbmFtZSIpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ0YXNrX25hbWUiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICd0YXNrX25hbWUnLAorICAgIH0KKyAgICB0Y19leGVjdXRlZD17CisgICAgICAgICduYW1lJzonRXhlY3V0ZWQnLAorICAgICAgICAncWhlbHAnOiJUaGlzIHZhbHVlIHRlbGxzIHlvdSBpZiBhIHRhc2sgaGFkIHRvIHJ1biAoZXhlY3V0ZWQpIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSB0YXNrIG91dHB1dCwgb3IgaWYgdGhlIG91dHB1dCB3YXMgcHJvdmlkZWQgYnkgYW5vdGhlciB0YXNrIGFuZCB0aGVyZWZvcmUgdGhlIHRhc2sgZGlkbid0IG5lZWQgdG8gcnVuIChub3QgZXhlY3V0ZWQpIiwKKyAgICAgICAgJ2NsY2xhc3MnOiAnZXhlY3V0ZWQnLCAnaGlkZGVuJyA6IDAsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInRhc2tfZXhlY3V0ZWQiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidGFza19leGVjdXRlZCIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ3Rhc2tfZXhlY3V0ZWQnLAorICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2V4ZWN1dGVkJywKKyAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0V4ZWN1dGVkIFRhc2tzJywgJ3Rhc2tfZXhlY3V0ZWQ6MScsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih0YXNrX2V4ZWN1dGVkPTEpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTm90IEV4ZWN1dGVkIFRhc2tzJywgJ3Rhc2tfZXhlY3V0ZWQ6MCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih0YXNrX2V4ZWN1dGVkPTApLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICB9CisKKyAgICB9CisgICAgdGNfb3V0Y29tZT17CisgICAgICAgICduYW1lJzonT3V0Y29tZScsCisgICAgICAgICdxaGVscCc6IlRoaXMgY29sdW1uIHRlbGxzIHlvdSBpZiAnZXhlY3V0ZWQnIHRhc2tzIHN1Y2NlZWRlZCBvciBmYWlsZWQuIFRoZSBjb2x1bW4gYWxzbyB0ZWxscyB5b3Ugd2h5ICdub3QgZXhlY3V0ZWQnIHRhc2tzIGRpZCBub3QgbmVlZCB0byBydW4iLAorICAgICAgICAnY2xjbGFzcyc6ICdvdXRjb21lJywgJ2hpZGRlbicgOiAwLAorICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvdXRjb21lIiksCisgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm91dGNvbWUiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdvdXRjb21lJywKKyAgICAgICAgJ2ZpbHRlcicgOiB7CisgICAgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdvdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1N1Y2NlZWRlZCBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfU1VDQ0VTUywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9VGFzay5PVVRDT01FX1NVQ0NFU1MpLmNvdW50KCksICInU3VjY2VlZGVkJyB0YXNrcyBhcmUgdGhvc2UgdGhhdCByYW4gYW5kIGNvbXBsZXRlZCBkdXJpbmcgdGhlIGJ1aWxkIiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRmFpbGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9GQUlMRUQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9GQUlMRUQpLmNvdW50KCksICInRmFpbGVkJyB0YXNrcyBhcmUgdGhvc2UgdGhhdCByYW4gYnV0IGRpZCBub3QgY29tcGxldGUgZHVyaW5nIHRoZSBidWlsZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQ2FjaGVkIFRhc2tzJywgJ291dGNvbWU6JWQnJVRhc2suT1VUQ09NRV9DQUNIRUQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9DQUNIRUQpLmNvdW50KCksICdDYWNoZWQgdGFza3MgcmVzdG9yZSBvdXRwdXQgZnJvbSB0aGUgPGNvZGU+c3N0YXRlLWNhY2hlPC9jb2RlPiBkaXJlY3Rvcnkgb3IgbWlycm9ycycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnUHJlYnVpbHQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX1BSRUJVSUxULCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1UYXNrLk9VVENPTUVfUFJFQlVJTFQpLmNvdW50KCksJ1ByZWJ1aWx0IHRhc2tzIGRpZG5cJ3QgbmVlZCB0byBydW4gYmVjYXVzZSB0aGVpciBvdXRwdXQgd2FzIHJldXNlZCBmcm9tIGEgcHJldmlvdXMgYnVpbGQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0NvdmVyZWQgVGFza3MnLCAnb3V0Y29tZTolZCclVGFzay5PVVRDT01FX0NPVkVSRUQsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9DT1ZFUkVEKS5jb3VudCgpLCAnQ292ZXJlZCB0YXNrcyBkaWRuXCd0IG5lZWQgdG8gcnVuIGJlY2F1c2UgdGhlaXIgb3V0cHV0IGlzIHByb3ZpZGVkIGJ5IGFub3RoZXIgdGFzayBpbiB0aGlzIGJ1aWxkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdFbXB0eSBUYXNrcycsICdvdXRjb21lOiVkJyVUYXNrLk9VVENPTUVfRU1QVFksIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihvdXRjb21lPVRhc2suT1VUQ09NRV9FTVBUWSkuY291bnQoKSwgJ0VtcHR5IHRhc2tzIGhhdmUgbm8gZXhlY3V0YWJsZSBjb250ZW50JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgIH0KKworICAgIH0KKworICAgIHRjX2NhY2hlPXsKKyAgICAgICAgJ25hbWUnOidDYWNoZSBhdHRlbXB0JywKKyAgICAgICAgJ3FoZWxwJzonVGhpcyBjb2x1bW4gdGVsbHMgeW91IGlmIGEgdGFzayB0cmllZCB0byByZXN0b3JlIG91dHB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzLCBhbmQgcmVwb3J0cyB0aGUgcmVzdWx0OiBTdWNjZWVkZWQsIEZhaWxlZCBvciBGaWxlIG5vdCBpbiBjYWNoZScsCisgICAgICAgICdjbGNsYXNzJzogJ2NhY2hlX2F0dGVtcHQnLCAnaGlkZGVuJyA6IDAsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNzdGF0ZV9yZXN1bHQiKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic3N0YXRlX3Jlc3VsdCIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ3NzdGF0ZV9yZXN1bHQnLAorICAgICAgICAnZmlsdGVyJyA6IHsKKyAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2NhY2hlX2F0dGVtcHQnLAorICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnVGFza3Mgd2l0aCBjYWNoZSBhdHRlbXB0cycsICdzc3RhdGVfcmVzdWx0X19ndDolZCclVGFzay5TU1RBVEVfTkEsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihzc3RhdGVfcmVzdWx0X19ndD1UYXNrLlNTVEFURV9OQSkuY291bnQoKSwgJ1Nob3cgYWxsIHRhc2tzIHRoYXQgdHJpZWQgdG8gcmVzdG9yZSBvdXB1dCBmcm9tIHRoZSA8Y29kZT5zc3RhdGUtY2FjaGU8L2NvZGU+IGRpcmVjdG9yeSBvciBtaXJyb3JzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUYXNrcyB3aXRoICdGaWxlIG5vdCBpbiBjYWNoZScgYXR0ZW1wdHMiLCAnc3N0YXRlX3Jlc3VsdDolZCclVGFzay5TU1RBVEVfTUlTUywgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihzc3RhdGVfcmVzdWx0PVRhc2suU1NUQVRFX01JU1MpLmNvdW50KCksICdTaG93IHRhc2tzIHRoYXQgdHJpZWQgdG8gcmVzdG9yZSBvdXRwdXQsIGJ1dCBkaWQgbm90IGZpbmQgaXQgaW4gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlRhc2tzIHdpdGggJ0ZhaWxlZCcgY2FjaGUgYXR0ZW1wdHMiLCAnc3N0YXRlX3Jlc3VsdDolZCclVGFzay5TU1RBVEVfRkFJTEVELCAgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHNzdGF0ZV9yZXN1bHQ9VGFzay5TU1RBVEVfRkFJTEVEKS5jb3VudCgpLCAnU2hvdyB0YXNrcyB0aGF0IGZvdW5kIHRoZSByZXF1aXJlZCBvdXRwdXQgaW4gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMsIGJ1dCBjb3VsZCBub3QgcmVzdG9yZSBpdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVGFza3Mgd2l0aCAnU3VjY2VlZGVkJyBjYWNoZSBhdHRlbXB0cyIsICdzc3RhdGVfcmVzdWx0OiVkJyVUYXNrLlNTVEFURV9SRVNUT1JFRCwgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihzc3RhdGVfcmVzdWx0PVRhc2suU1NUQVRFX1JFU1RPUkVEKS5jb3VudCgpLCAnU2hvdyB0YXNrcyB0aGF0IHN1Y2Nlc3NmdWxseSByZXN0b3JlZCB0aGUgcmVxdWlyZWQgb3V0cHV0IGZyb20gdGhlIDxjb2RlPnNzdGF0ZS1jYWNoZTwvY29kZT4gZGlyZWN0b3J5IG9yIG1pcnJvcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgfQorCisgICAgfQorICAgICNpZiAgICd0YXNrcycgPT0gdmFyaWFudDogdGNfY2FjaGVbJ2hpZGRlbiddPScwJzsKKyAgICB0Y190aW1lPXsKKyAgICAgICAgJ25hbWUnOidUaW1lIChzZWNzKScsCisgICAgICAgICdxaGVscCc6J0hvdyBsb25nIGl0IHRvb2sgdGhlIHRhc2sgdG8gZmluaXNoIGluIHNlY29uZHMnLAorICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJlbGFwc2VkX3RpbWUiLCBUcnVlKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZWxhcHNlZF90aW1lIiksCisgICAgICAgICdvcmRlcmtleScgOiAnZWxhcHNlZF90aW1lJywKKyAgICAgICAgJ2NsY2xhc3MnOiAndGltZV90YWtlbicsICdoaWRkZW4nIDogMSwKKyAgICB9CisgICAgaWYgJ2J1aWxkdGltZScgPT0gdmFyaWFudDoKKyAgICAgICAgdGNfdGltZVsnaGlkZGVuJ109JzAnCisgICAgICAgIGRlbCB0Y190aW1lWydjbGNsYXNzJ10KKyAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJworCisgICAgdGNfY3B1PXsKKyAgICAgICAgJ25hbWUnOidDUFUgdXNhZ2UnLAorICAgICAgICAncWhlbHAnOidUaGUgcGVyY2VudGFnZSBvZiB0YXNrIENQVSB1dGlsaXphdGlvbicsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImNwdV91c2FnZSIsIFRydWUpLAorICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJjcHVfdXNhZ2UiKSwKKyAgICAgICAgJ29yZGVya2V5JyA6ICdjcHVfdXNhZ2UnLAorICAgICAgICAnY2xjbGFzcyc6ICdjcHVfdXNlZCcsICdoaWRkZW4nIDogMSwKKyAgICB9CisKKyAgICBpZiAgJ2NwdXVzYWdlJyA9PSB2YXJpYW50OgorICAgICAgICB0Y19jcHVbJ2hpZGRlbiddPScwJworICAgICAgICBkZWwgdGNfY3B1WydjbGNsYXNzJ10KKyAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJworCisgICAgdGNfZGlza2lvPXsKKyAgICAgICAgJ25hbWUnOidEaXNrIEkvTyAobXMpJywKKyAgICAgICAgJ3FoZWxwJzonTnVtYmVyIG9mIG1pbGlzZWNvbmRzIHRoZSB0YXNrIHNwZW50IGRvaW5nIGRpc2sgaW5wdXQgYW5kIG91dHB1dCcsCisgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImRpc2tfaW8iLCBUcnVlKSwKKyAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZGlza19pbyIpLAorICAgICAgICAnb3JkZXJrZXknIDogJ2Rpc2tfaW8nLAorICAgICAgICAnY2xjbGFzcyc6ICdkaXNrX2lvJywgJ2hpZGRlbicgOiAxLAorICAgIH0KKyAgICBpZiAnZGlza2lvJyA9PSB2YXJpYW50OgorICAgICAgICB0Y19kaXNraW9bJ2hpZGRlbiddPScwJworICAgICAgICBkZWwgdGNfZGlza2lvWydjbGNsYXNzJ10KKyAgICAgICAgdGNfY2FjaGVbJ2hpZGRlbiddPScxJworCisgICAgYnVpbGQgPSBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCkKKworICAgIGNvbnRleHQgPSB7ICdvYmplY3RuYW1lJzogdmFyaWFudCwKKyAgICAgICAgICAgICAgICAnb2JqZWN0X3NlYXJjaF9kaXNwbGF5Jzogb2JqZWN0X3NlYXJjaF9kaXNwbGF5LAorICAgICAgICAgICAgICAgICdmaWx0ZXJfc2VhcmNoX2Rpc3BsYXknOiBmaWx0ZXJfc2VhcmNoX2Rpc3BsYXksCisgICAgICAgICAgICAgICAgJ3RpdGxlJzogdGl0bGVfdmFyaWFudCwKKyAgICAgICAgICAgICAgICAnYnVpbGQnOiBidWlsZCwKKyAgICAgICAgICAgICAgICAnb2JqZWN0cyc6IHRhc2tfb2JqZWN0cywKKyAgICAgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6IG9yZGVyYnksCisgICAgICAgICAgICAgICAgJ3NlYXJjaF90ZXJtJzogc2VhcmNoX3Rlcm0sCisgICAgICAgICAgICAgICAgJ3RvdGFsX2NvdW50JzogcXVlcnlzZXRfd2l0aF9zZWFyY2guY291bnQoKSwKKyAgICAgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgICAgIHRjX29yZGVyLAorICAgICAgICAgICAgICAgICAgICB0Y19yZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIHRjX3JlY2lwZV92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICB0Y190YXNrLAorICAgICAgICAgICAgICAgICAgICB0Y19leGVjdXRlZCwKKyAgICAgICAgICAgICAgICAgICAgdGNfb3V0Y29tZSwKKyAgICAgICAgICAgICAgICAgICAgdGNfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgIHRjX3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRjX2NwdSwKKyAgICAgICAgICAgICAgICAgICAgdGNfZGlza2lvLAorICAgICAgICAgICAgICAgIF19CisKKworICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiB0YXNrcyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgcmV0dXJuIHRhc2tzX2NvbW1vbihyZXF1ZXN0LCBidWlsZF9pZCwgJ3Rhc2tzJywgJycpCisKK2RlZiB0YXNrc190YXNrKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXNrX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAndGFza3MnLCB0YXNrX2lkKQorCitkZWYgYnVpbGR0aW1lKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAnYnVpbGR0aW1lJywgJycpCisKK2RlZiBkaXNraW8ocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHJldHVybiB0YXNrc19jb21tb24ocmVxdWVzdCwgYnVpbGRfaWQsICdkaXNraW8nLCAnJykKKworZGVmIGNwdXVzYWdlKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICByZXR1cm4gdGFza3NfY29tbW9uKHJlcXVlc3QsIGJ1aWxkX2lkLCAnY3B1dXNhZ2UnLCAnJykKKworCitkZWYgcmVjaXBlcyhyZXF1ZXN0LCBidWlsZF9pZCk6CisgICAgdGVtcGxhdGUgPSAncmVjaXBlcy5odG1sJworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncmVjaXBlcycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFJlY2lwZSkKKyAgICBxdWVyeXNldCA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihsYXllcl92ZXJzaW9uX19pZF9faW49TGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCkpLnNlbGVjdF9yZWxhdGVkKCJsYXllcl92ZXJzaW9uIiwgImxheWVyX3ZlcnNpb25fX2xheWVyIikKKyAgICBxdWVyeXNldCA9IF9nZXRfcXVlcnlzZXQoUmVjaXBlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQorCisgICAgcmVjaXBlcyA9IF9idWlsZF9wYWdlX3JhbmdlKFBhZ2luYXRvcihxdWVyeXNldCwgcGFnZXNpemUpLHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgIyBwcmVmZXRjaCB0aGUgZm9yd2FyZCBhbmQgcmV2ZXJzZSByZWNpcGUgZGVwZW5kZW5jaWVzCisgICAgZGVwcyA9IHsgfQorICAgIHJldnMgPSB7IH0KKyAgICBxdWVyeXNldF9kZXBlbmRlbmN5PVJlY2lwZV9EZXBlbmRlbmN5Lm9iamVjdHMuZmlsdGVyKHJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnVpbGRfaWQgPSBidWlsZF9pZCkuc2VsZWN0X3JlbGF0ZWQoImRlcGVuZHNfb24iLCAicmVjaXBlIikKKyAgICBmb3IgcmVjaXBlIGluIHJlY2lwZXM6CisgICAgICAgIGRlcGxpc3QgPSBbIF0KKyAgICAgICAgZm9yIHJlY2lwZV9kZXAgaW4gW3ggZm9yIHggaW4gcXVlcnlzZXRfZGVwZW5kZW5jeSBpZiB4LnJlY2lwZV9pZCA9PSByZWNpcGUuaWRdOgorICAgICAgICAgICAgZGVwbGlzdC5hcHBlbmQocmVjaXBlX2RlcCkKKyAgICAgICAgZGVwc1tyZWNpcGUuaWRdID0gZGVwbGlzdAorICAgICAgICByZXZsaXN0ID0gWyBdCisgICAgICAgIGZvciByZWNpcGVfZGVwIGluIFt4IGZvciB4IGluIHF1ZXJ5c2V0X2RlcGVuZGVuY3kgaWYgeC5kZXBlbmRzX29uX2lkID09IHJlY2lwZS5pZF06CisgICAgICAgICAgICByZXZsaXN0LmFwcGVuZChyZWNpcGVfZGVwKQorICAgICAgICByZXZzW3JlY2lwZS5pZF0gPSByZXZsaXN0CisKKyAgICBidWlsZCA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgJ29iamVjdG5hbWUnOiAncmVjaXBlcycsCisgICAgICAgICdidWlsZCc6IGJ1aWxkLAorICAgICAgICAnb2JqZWN0cyc6IHJlY2lwZXMsCisgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogJ25hbWU6KycsCisgICAgICAgICdyZWNpcGVfZGVwcycgOiBkZXBzLAorICAgICAgICAncmVjaXBlX3JldnMnIDogcmV2cywKKyAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBwaWVjZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHdoZXJlIHRvIGRvd25sb2FkIHRoZSBzb3VyY2UsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIHBhY2thZ2UgdGhlIGNvbXBpbGVkIG91dHB1dCcsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm5hbWUiKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZWNpcGUgdmVyc2lvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHJlY2lwZSB2ZXJzaW9uIGFuZCByZXZpc2lvbicsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonRGVwZW5kZW5jaWVzJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidSZWNpcGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcmVjaXBlcyknLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2RlcGVuZHNfb24nLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidSZXZlcnNlIGRlcGVuZGVuY2llcycsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonUmVjaXBlIGJ1aWxkLXRpbWUgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgKGkuZS4gdGhlIHJlY2lwZXMgdGhhdCBkZXBlbmQgb24gdGhpcyByZWNpcGUpJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdkZXBlbmRzX2J5JywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlIGZpbGUnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1BhdGggdG8gdGhlIHJlY2lwZSAuYmIgZmlsZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAiZmlsZV9wYXRoIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAiZmlsZV9wYXRoIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdmaWxlX3BhdGgnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9maWxlJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonU2VjdGlvbicsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIHNlY3Rpb24gaW4gd2hpY2ggcmVjaXBlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNlY3Rpb24iKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzZWN0aW9uIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdzZWN0aW9uJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfc2VjdGlvbicsICdoaWRkZW4nOiAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIHBpcGUgY2hhcmFjdGVyIGluZGljYXRlcyBhIGNob2ljZSBiZXR3ZWVuIGxpY2Vuc2VzLiBNdWx0aXBsZSBsaWNlbnNlIG5hbWVzIHNlcGFyYXRlZCBieSB0aGUgYW1wZXJzYW5kIGNoYXJhY3RlciBpbmRpY2F0ZXMgbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QgdGhhdCBjb3ZlciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGljZW5zZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxpY2Vuc2UiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ2xpY2Vuc2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9saWNlbnNlJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXInLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBuYW1lIG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJsYXllcl92ZXJzaW9uX19sYXllcl9fbmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgYnJhbmNoJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImxheWVyX3ZlcnNpb25fX2JyYW5jaCIpLAorICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsYXllcl92ZXJzaW9uX19icmFuY2gnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidMYXllciBjb21taXQnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBHaXQgY29tbWl0IG9mIHRoZSBsYXllciBwcm92aWRpbmcgdGhlIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX2NvbW1pdCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIGNvbmZpZ3VyYXRpb24ocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHRlbXBsYXRlID0gJ2NvbmZpZ3VyYXRpb24uaHRtbCcKKworICAgIHZhcl9uYW1lcyA9ICgnQkJfVkVSU0lPTicsICdCVUlMRF9TWVMnLCAnTkFUSVZFTFNCU1RSSU5HJywgJ1RBUkdFVF9TWVMnLAorICAgICAgICAgICAgICAgICAnTUFDSElORScsICdESVNUUk8nLCAnRElTVFJPX1ZFUlNJT04nLCAnVFVORV9GRUFUVVJFUycsICdUQVJHRVRfRlBVJykKKyAgICBjb250ZXh0ID0gZGljdChWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCwgdmFyaWFibGVfbmFtZV9faW49dmFyX25hbWVzKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVzX2xpc3QoJ3ZhcmlhYmxlX25hbWUnLCAndmFyaWFibGVfdmFsdWUnKSkKKyAgICBjb250ZXh0LnVwZGF0ZSh7J29iamVjdG5hbWUnOiAnY29uZmlndXJhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOid2YXJpYWJsZXMnLAorICAgICAgICAgICAgICAgICAgICAnZmlsdGVyX3NlYXJjaF9kaXNwbGF5JzondmFyaWFibGVzJywKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkJzogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgICAgICAgICAndGFyZ2V0cyc6IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZD1idWlsZF9pZCl9KQorICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKKworZGVmIGNvbmZpZ3ZhcnMocmVxdWVzdCwgYnVpbGRfaWQpOgorICAgIHRlbXBsYXRlID0gJ2NvbmZpZ3ZhcnMuaHRtbCcKKyAgICAocGFnZXNpemUsIG9yZGVyYnkpID0gX2dldF9wYXJhbWV0ZXJzX3ZhbHVlcyhyZXF1ZXN0LCAxMDAsICd2YXJpYWJsZV9uYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnksICdmaWx0ZXInIDogJ2Rlc2NyaXB0aW9uX19yZWdleDouKycgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFZhcmlhYmxlKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgIyBpZiBuZXcgc2VhcmNoLCBjbGVhciB0aGUgZGVmYXVsdCBmaWx0ZXIKKyAgICAgICAgaWYgc2VhcmNoX3Rlcm0gYW5kIGxlbihzZWFyY2hfdGVybSk6CisgICAgICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVyc1snZmlsdGVyJ109JycKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAnY29uZmlndmFycycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCkKKworICAgIHF1ZXJ5c2V0ID0gVmFyaWFibGUub2JqZWN0cy5maWx0ZXIoYnVpbGQ9YnVpbGRfaWQpLmV4Y2x1ZGUodmFyaWFibGVfbmFtZV9faXN0YXJ0c3dpdGg9J0JfJykuZXhjbHVkZSh2YXJpYWJsZV9uYW1lX19pc3RhcnRzd2l0aD0nZG9fJykKKyAgICBxdWVyeXNldF93aXRoX3NlYXJjaCA9ICBfZ2V0X3F1ZXJ5c2V0KFZhcmlhYmxlLCBxdWVyeXNldCwgTm9uZSwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3ZhcmlhYmxlX25hbWUnKS5leGNsdWRlKHZhcmlhYmxlX3ZhbHVlPScnLHZoaXN0b3J5X19maWxlX25hbWVfX2lzbnVsbD1UcnVlKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChWYXJpYWJsZSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICd2YXJpYWJsZV9uYW1lJykKKyAgICAjIHJlbW92ZSByZWNvcmRzIHdoZXJlIHRoZSB2YWx1ZSBpcyBlbXB0eSBBTkQgdGhlcmUgYXJlIG5vIGhpc3RvcnkgZmlsZXMKKyAgICBxdWVyeXNldCA9IHF1ZXJ5c2V0LmV4Y2x1ZGUodmFyaWFibGVfdmFsdWU9Jycsdmhpc3RvcnlfX2ZpbGVfbmFtZV9faXNudWxsPVRydWUpCisKKyAgICB2YXJpYWJsZXMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSwgcmVxdWVzdC5HRVQuZ2V0KCdwYWdlJywgMSkpCisKKyAgICAjIHNob3cgYWxsIG1hdGNoaW5nIGZpbGVzIChub3QganVzdCB0aGUgbGFzdCBvbmUpCisgICAgZmlsZV9maWx0ZXI9IHNlYXJjaF90ZXJtICsgIjoiCisgICAgaWYgZmlsdGVyX3N0cmluZy5maW5kKCcvY29uZi8nKSA+IDA6CisgICAgICAgIGZpbGVfZmlsdGVyICs9ICdjb25mLyhsb2NhbHxiYmxheWVycykuY29uZicKKyAgICBpZiBmaWx0ZXJfc3RyaW5nLmZpbmQoJ2NvbmYvbWFjaGluZS8nKSA+IDA6CisgICAgICAgIGZpbGVfZmlsdGVyICs9ICdjb25mL21hY2hpbmUvJworICAgIGlmIGZpbHRlcl9zdHJpbmcuZmluZCgnY29uZi9kaXN0cm8vJykgPiAwOgorICAgICAgICBmaWxlX2ZpbHRlciArPSAnY29uZi9kaXN0cm8vJworICAgIGlmIGZpbHRlcl9zdHJpbmcuZmluZCgnL2JpdGJha2UuY29uZicpID4gMDoKKyAgICAgICAgZmlsZV9maWx0ZXIgKz0gJy9iaXRiYWtlLmNvbmYnCisgICAgYnVpbGRfZGlyPXJlLnN1YigiL3RtcC9sb2cvLioiLCIiLEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKS5jb29rZXJfbG9nX3BhdGgpCisKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdvYmplY3RuYW1lJzogJ2NvbmZpZ3ZhcnMnLAorICAgICAgICAgICAgICAgICdvYmplY3Rfc2VhcmNoX2Rpc3BsYXknOidCaXRCYWtlIHZhcmlhYmxlcycsCisgICAgICAgICAgICAgICAgJ2ZpbHRlcl9zZWFyY2hfZGlzcGxheSc6J3ZhcmlhYmxlcycsCisgICAgICAgICAgICAgICAgJ2ZpbGVfZmlsdGVyJzogZmlsZV9maWx0ZXIsCisgICAgICAgICAgICAgICAgJ2J1aWxkJzogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgICAgICdvYmplY3RzJyA6IHZhcmlhYmxlcywKKyAgICAgICAgICAgICAgICAndG90YWxfY291bnQnOnF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmNvdW50KCksCisgICAgICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAndmFyaWFibGVfbmFtZTorJywKKyAgICAgICAgICAgICAgICAnc2VhcmNoX3Rlcm0nOnNlYXJjaF90ZXJtLAorICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIGRpc3BsYXkgb2YgY29sdW1ucyBmb3IgdGhlIHRhYmxlLCBhcHBlYXJhbmNlIGluICJFZGl0IGNvbHVtbnMiIGJveCwgdG9nZ2xpbmcgZGVmYXVsdCBzaG93L2hpZGUsIGFuZCBzcGVjaWZ5aW5nIGZpbHRlcnMgZm9yIGNvbHVtbnMKKyAgICAgICAgICAgICAgICAndGFibGVjb2xzJyA6IFsKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnVmFyaWFibGUnLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiQml0QmFrZSBpcyBhIGdlbmVyaWMgdGFzayBleGVjdXRvciB0aGF0IGNvbnNpZGVycyBhIGxpc3Qgb2YgdGFza3Mgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGhhbmRsZXMgbWV0YWRhdGEgdGhhdCBjb25zaXN0cyBvZiB2YXJpYWJsZXMgaW4gYSBjZXJ0YWluIGZvcm1hdCB0aGF0IGdldCBwYXNzZWQgdG8gdGhlIHRhc2tzIiwKKyAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidmFyaWFibGVfbmFtZSIpLAorICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJ2YXJpYWJsZV9uYW1lIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnVmFsdWUnLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSB2YXJpYWJsZSIsCisgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAic3BhbjQiLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeyduYW1lJzogJ1NldCBpbiBmaWxlJywKKyAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBsYXN0IGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHRvdWNoZWQgdGhlIHZhcmlhYmxlIHZhbHVlIiwKKyAgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAnZmlsZScsICdoaWRkZW4nIDogMCwKKyAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICd2aGlzdG9yeV9fZmlsZV9uYW1lJywKKyAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7CisgICAgICAgICAgICAgICAgICAgICdjbGFzcycgOiAndmhpc3RvcnlfX2ZpbGVfbmFtZScsCisgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0xvY2FsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzJywgJ3ZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zOicrYnVpbGRfZGlyKycvY29uZi8nLHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWlucz1idWlsZF9kaXIrJy9jb25mLycpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIDxjb2RlPmxvY2FsLmNvbmY8L2NvZGU+IGFuZCA8Y29kZT5iYmxheWVycy5jb25mPC9jb2RlPiBjb25maWd1cmF0aW9uIGZpbGVzIGluc2lkZSB0aGUgPGNvZGU+L2J1aWxkL2NvbmYvPC9jb2RlPiBkaXJlY3RvcnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ01hY2hpbmUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6Y29uZi9tYWNoaW5lLycscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPSdjb25mL21hY2hpbmUnKS5jb3VudCgpLCAnU2VsZWN0IHRoaXMgZmlsdGVyIHRvIHNlZSB2YXJpYWJsZXMgc2V0IGJ5IHRoZSBjb25maWd1cmF0aW9uIGZpbGUocykgaW5zaWRlIHlvdXIgbGF5ZXJzIDxjb2RlPi9jb25mL21hY2hpbmUvPC9jb2RlPiBkaXJlY3RvcnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Rpc3RybyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcycsICd2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWluczpjb25mL2Rpc3Ryby8nLHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih2aGlzdG9yeV9fZmlsZV9uYW1lX19jb250YWlucz0nY29uZi9kaXN0cm8nKS5jb3VudCgpLCAnU2VsZWN0IHRoaXMgZmlsdGVyIHRvIHNlZSB2YXJpYWJsZXMgc2V0IGJ5IHRoZSBjb25maWd1cmF0aW9uIGZpbGUocykgaW5zaWRlIHlvdXIgbGF5ZXJzIDxjb2RlPi9jb25mL2Rpc3Ryby88L2NvZGU+IGRpcmVjdG9yeScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTGF5ZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6Y29uZi9sYXllci5jb25mJyxxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIodmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM9J2NvbmYvbGF5ZXIuY29uZicpLmNvdW50KCksICdTZWxlY3QgdGhpcyBmaWx0ZXIgdG8gc2VlIHZhcmlhYmxlcyBzZXQgYnkgdGhlIDxjb2RlPmxheWVyLmNvbmY8L2NvZGU+IGNvbmZpZ3VyYXRpb24gZmlsZSBpbnNpZGUgeW91ciBsYXllcnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JpdGJha2UuY29uZiB2YXJpYWJsZXMnLCAndmhpc3RvcnlfX2ZpbGVfbmFtZV9fY29udGFpbnM6L2JpdGJha2UuY29uZicscXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHZoaXN0b3J5X19maWxlX25hbWVfX2NvbnRhaW5zPScvYml0YmFrZS5jb25mJykuY291bnQoKSwgJ1NlbGVjdCB0aGlzIGZpbHRlciB0byBzZWUgdmFyaWFibGVzIHNldCBieSB0aGUgPGNvZGU+Yml0YmFrZS5jb25mPC9jb2RlPiBjb25maWd1cmF0aW9uIGZpbGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7J25hbWUnOiAnRGVzY3JpcHRpb24nLAorICAgICAgICAgICAgICAgICAncWhlbHAnOiAiQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgdmFyaWFibGUiLAorICAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdkZXNjcmlwdGlvbicsICdoaWRkZW4nIDogMCwKKyAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICJzcGFuNCIsCisgICAgICAgICAgICAgICAgICdmaWx0ZXInIDogeworICAgICAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnVmFyaWFibGVzIHdpdGggZGVzY3JpcHRpb24nLCAnZGVzY3JpcHRpb25fX3JlZ2V4Oi4rJywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKGRlc2NyaXB0aW9uX19yZWdleD0nLisnKS5jb3VudCgpLCAnV2UgcHJvdmlkZSBkZXNjcmlwdGlvbnMgZm9yIHRoZSBtb3N0IGNvbW1vbiBCaXRCYWtlIHZhcmlhYmxlcy4gVGhlIGxpc3Qgb2YgZGVzY3JpcHRpb25zIGxpdmVzIGluIDxjb2RlPm1ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmY8L2NvZGU+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgfQorCisgICAgcmVzcG9uc2UgPSByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICByZXR1cm4gcmVzcG9uc2UKKworZGVmIGJwYWNrYWdlKHJlcXVlc3QsIGJ1aWxkX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICdicGFja2FnZS5odG1sJworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDEwMCwgJ25hbWU6KycpCisgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCcgOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5JyA6IG9yZGVyYnkgfQorICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIHJldHVybiBfcmVkaXJlY3RfcGFyYW1ldGVycyggJ3BhY2thZ2VzJywgcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzLCBidWlsZF9pZCA9IGJ1aWxkX2lkKQorICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgUGFja2FnZSkKKyAgICBxdWVyeXNldCA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZF9pZCkuZmlsdGVyKHNpemVfX2d0ZT0wKQorICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChQYWNrYWdlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ25hbWUnKQorCisgICAgcGFja2FnZXMgPSBfYnVpbGRfcGFnZV9yYW5nZShQYWdpbmF0b3IocXVlcnlzZXQsIHBhZ2VzaXplKSxyZXF1ZXN0LkdFVC5nZXQoJ3BhZ2UnLCAxKSkKKworICAgIGJ1aWxkID0gQnVpbGQub2JqZWN0cy5nZXQoIHBrID0gYnVpbGRfaWQgKQorCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgJ29iamVjdG5hbWUnOiAncGFja2FnZXMgYnVpbHQnLAorICAgICAgICAnYnVpbGQnOiBidWlsZCwKKyAgICAgICAgJ29iamVjdHMnIDogcGFja2FnZXMsCisgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogJ25hbWU6KycsCisgICAgICAgICd0YWJsZWNvbHMnOlsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UnLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1BhY2thZ2VkIG91dHB1dCByZXN1bHRpbmcgZnJvbSBidWlsZGluZyBhIHJlY2lwZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm5hbWUiKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidQYWNrYWdlIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1RoZSBwYWNrYWdlIHZlcnNpb24gYW5kIHJldmlzaW9uJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgc2l6ZSBvZiB0aGUgcGFja2FnZScsCisgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInNpemUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3NpemUnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3NpemUnLCAnaGlkZGVuJzogMCwKKyAgICAgICAgICAgICAgICAnZGNsYXNzJyA6ICdzcGFuMicsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGljZW5zZScsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlIHBhY2thZ2UgaXMgZGlzdHJpYnV0ZWQuIE11bHRpcGxlIGxpY2Vuc2UgbmFtZXMgc2VwYXJhdGVkIGJ5IHRoZSBwaXBlIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjaG9pY2UgYmV0d2VlbiBsaWNlbnNlcy4gTXVsdGlwbGUgbGljZW5zZSBuYW1lcyBzZXBhcmF0ZWQgYnkgdGhlIGFtcGVyc2FuZCBjaGFyYWN0ZXIgaW5kaWNhdGVzIG11bHRpcGxlIGxpY2Vuc2VzIGV4aXN0IHRoYXQgY292ZXIgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzb3VyY2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgImxpY2Vuc2UiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJsaWNlbnNlIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdsaWNlbnNlJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdsaWNlbnNlJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIGJ1aWxkaW5nIHRoZSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWNpcGVfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3JlY2lwZV9fbmFtZScsCisgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAncmVjaXBlX19uYW1lJywgJ2hpZGRlbic6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonUmVjaXBlIHZlcnNpb24nLAorICAgICAgICAgICAgICAgICdxaGVscCc6J1ZlcnNpb24gYW5kIHJldmlzaW9uIG9mIHRoZSByZWNpcGUgYnVpbGRpbmcgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdjbGNsYXNzJzogJ3JlY2lwZV9fdmVyc2lvbicsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fbGF5ZXJfX25hbWUiKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lIiksCisgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19uYW1lJywgJ2hpZGRlbic6IDEsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICduYW1lJzonTGF5ZXIgYnJhbmNoJywKKyAgICAgICAgICAgICAgICAncWhlbHAnOidUaGUgR2l0IGJyYW5jaCBvZiB0aGUgbGF5ZXIgcHJvdmlkaW5nIHRoZSByZWNpcGUgdGhhdCBidWlsZHMgdGhlIHBhY2thZ2UnLAorICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInJlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoIiksCisgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAicmVjaXBlX19sYXllcl92ZXJzaW9uX19icmFuY2giKSwKKyAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3JlY2lwZV9fbGF5ZXJfdmVyc2lvbl9fYnJhbmNoJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2JyYW5jaCcsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6J0xheWVyIGNvbW1pdCcsCisgICAgICAgICAgICAgICAgJ3FoZWxwJzonVGhlIEdpdCBjb21taXQgb2YgdGhlIGxheWVyIHByb3ZpZGluZyB0aGUgcmVjaXBlIHRoYXQgYnVpbGRzIHRoZSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAnY2xjbGFzcyc6ICdyZWNpcGVfX2xheWVyX3ZlcnNpb25fX2xheWVyX19jb21taXQnLCAnaGlkZGVuJzogMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdCisgICAgICAgIH0KKworICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBiZmlsZShyZXF1ZXN0LCBidWlsZF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAnYmZpbGUuaHRtbCcKKyAgICBmaWxlcyA9IFBhY2thZ2VfRmlsZS5vYmplY3RzLmZpbHRlcihwYWNrYWdlID0gcGFja2FnZV9pZCkKKyAgICBjb250ZXh0ID0geydidWlsZCc6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwgJ29iamVjdHMnIDogZmlsZXN9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworCisjIEEgc2V0IG9mIGRlcGVuZGVuY3kgdHlwZXMgdmFsaWQgZm9yIGJvdGggaW5jbHVkZWQgYW5kIGJ1aWx0IHBhY2thZ2Ugdmlld3MKK09USEVSX0RFUEVORFNfQkFTRSA9IFsKKyAgICBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SU1VHR0VTVFMsCisgICAgUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUlBST1ZJREVTLAorICAgIFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRVBMQUNFUywKKyAgICBQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9SQ09ORkxJQ1RTLAorICAgIF0KKworIyB2YWx1ZSBmb3IgaW52YWxpZCByb3cgaWQKK0lOVkFMSURfS0VZID0gLTEKKworIiIiCitHaXZlbiBhIHBhY2thZ2UgaWQsIHRhcmdldF9pZCByZXRyaWV2ZXMgdHdvIHNldHMgb2YgdGhpcyBpbWFnZSBhbmQgcGFja2FnZSdzCitkZXBlbmRlbmNpZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgZGljdGlvbmFyeSBjb25zaXN0aW5nIG9mIHR3byBvdGhlcgorbGlzdHM6IGEgbGlzdCBvZiAncnVudGltZScgZGVwZW5kZW5jaWVzLCB0aGF0IGlzLCBoYXZpbmcgUkRFUEVORFMKK3ZhbHVlcyBpbiBzb3VyY2UgcGFja2FnZSdzIHJlY2lwZSwgYW5kIGEgbGlzdCBvZiBvdGhlciBkZXBlbmRlbmNpZXMsIHRoYXQgaXMKK3RoZSBsaXN0IG9mIHBvc3NpYmxlIHJlY2lwZSB2YXJpYWJsZXMgYXMgZm91bmQgaW4gT1RIRVJfREVQRU5EU19CQVNFIHBsdXMKK3RoZSBSUkVDT01NRU5EUyBvciBUUkVDT01NRU5EUyB2YWx1ZS4KK1RoZSBsaXN0cyBhcmUgYnVpbHQgaW4gdGhlIHNvcnQgb3JkZXIgc3BlY2lmaWVkIGZvciB0aGUgcGFja2FnZSBydW50aW1lCitkZXBlbmRlbmN5IHZpZXdzLgorIiIiCitkZWYgX2dldF9wYWNrYWdlX2RlcGVuZGVuY2llcyhwYWNrYWdlX2lkLCB0YXJnZXRfaWQgPSBJTlZBTElEX0tFWSk6CisgICAgcnVudGltZV9kZXBzID0gW10KKyAgICBvdGhlcl9kZXBzID0gW10KKyAgICBvdGhlcl9kZXBlbmRzX3R5cGVzID0gT1RIRVJfREVQRU5EU19CQVNFCisKKyAgICBpZiB0YXJnZXRfaWQgIT0gSU5WQUxJRF9LRVkgOgorICAgICAgICByZGVwZW5kc190eXBlID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTCisgICAgICAgIG90aGVyX2RlcGVuZHNfdHlwZXMgKz0gIFtQYWNrYWdlX0RlcGVuZGVuY3kuVFlQRV9UUkVDT01NRU5EU10KKyAgICBlbHNlIDoKKyAgICAgICAgcmRlcGVuZHNfdHlwZSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JERVBFTkRTCisgICAgICAgIG90aGVyX2RlcGVuZHNfdHlwZXMgKz0gW1BhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1JSRUNPTU1FTkRTXQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBpZiB0YXJnZXRfaWQgIT0gSU5WQUxJRF9LRVkgOgorICAgICAgICBhbGxkZXBzID0gcGFja2FnZS5wYWNrYWdlX2RlcGVuZGVuY2llc19zb3VyY2UuZmlsdGVyKHRhcmdldF9pZF9fZXhhY3QgPSB0YXJnZXRfaWQpCisgICAgZWxzZSA6CisgICAgICAgIGFsbGRlcHMgPSBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5hbGwoKQorICAgIGZvciBpZGVwIGluIGFsbGRlcHM6CisgICAgICAgIGRlcF9wYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1pZGVwLmRlcGVuZHNfb25faWQpCisgICAgICAgIGRlcF9lbnRyeSA9IFBhY2thZ2VfRGVwZW5kZW5jeS5ERVBFTkRTX0RJQ1RbaWRlcC5kZXBfdHlwZV0KKyAgICAgICAgaWYgZGVwX3BhY2thZ2UudmVyc2lvbiA9PSAnJyA6CisgICAgICAgICAgICB2ZXJzaW9uID0gJycKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICB2ZXJzaW9uID0gZGVwX3BhY2thZ2UudmVyc2lvbiArICItIiArIGRlcF9wYWNrYWdlLnJldmlzaW9uCisgICAgICAgIGluc3RhbGxlZCA9IEZhbHNlCisgICAgICAgIGlmIHRhcmdldF9pZCAhPSBJTlZBTElEX0tFWSA6CisgICAgICAgICAgICBpZiBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy5maWx0ZXIodGFyZ2V0X2lkX19leGFjdCA9IHRhcmdldF9pZCwgcGFja2FnZV9pZF9fZXhhY3QgPSBkZXBfcGFja2FnZS5pZCkuY291bnQoKSA+IDA6CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICBkZXAgPSAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZScgOiBkZXBfcGFja2FnZS5uYW1lLAorICAgICAgICAgICAgICAgICd2ZXJzaW9uJyA6IHZlcnNpb24sCisgICAgICAgICAgICAgICAgJ3NpemUnIDogZGVwX3BhY2thZ2Uuc2l6ZSwKKyAgICAgICAgICAgICAgICAnZGVwX3R5cGUnIDogaWRlcC5kZXBfdHlwZSwKKyAgICAgICAgICAgICAgICAnZGVwX3R5cGVfZGlzcGxheScgOiBkZXBfZW50cnlbMF0uY2FwaXRhbGl6ZSgpLAorICAgICAgICAgICAgICAgICdkZXBfdHlwZV9oZWxwJyA6IGRlcF9lbnRyeVsxXSAlIChkZXBfcGFja2FnZS5uYW1lLCBwYWNrYWdlLm5hbWUpLAorICAgICAgICAgICAgICAgICdkZXBlbmRzX29uX2lkJyA6IGRlcF9wYWNrYWdlLmlkLAorICAgICAgICAgICAgICAgICdpbnN0YWxsZWQnIDogaW5zdGFsbGVkLAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICBpZiB0YXJnZXRfaWQgIT0gSU5WQUxJRF9LRVk6CisgICAgICAgICAgICAgICAgZGVwWydhbGlhcyddID0gX2dldF9wYWNrYWdlX2FsaWFzKGRlcF9wYWNrYWdlKQorCisgICAgICAgIGlmIGlkZXAuZGVwX3R5cGUgPT0gcmRlcGVuZHNfdHlwZSA6CisgICAgICAgICAgICBydW50aW1lX2RlcHMuYXBwZW5kKGRlcCkKKyAgICAgICAgZWxpZiBpZGVwLmRlcF90eXBlIGluIG90aGVyX2RlcGVuZHNfdHlwZXMgOgorICAgICAgICAgICAgb3RoZXJfZGVwcy5hcHBlbmQoZGVwKQorCisgICAgcmRlcF9zb3J0ZWQgPSBzb3J0ZWQocnVudGltZV9kZXBzLCBrZXk9bGFtYmRhIGs6IGtbJ25hbWUnXSkKKyAgICBvZGVwX3NvcnRlZCA9IHNvcnRlZCgKKyAgICAgICAgICAgIHNvcnRlZChvdGhlcl9kZXBzLCBrZXk9bGFtYmRhIGs6IGtbJ25hbWUnXSksCisgICAgICAgICAgICBrZXk9bGFtYmRhIGs6IGtbJ2RlcF90eXBlJ10pCisgICAgcmV0dmFsdWVzID0geydydW50aW1lX2RlcHMnIDogcmRlcF9zb3J0ZWQsICdvdGhlcl9kZXBzJyA6IG9kZXBfc29ydGVkfQorICAgIHJldHVybiByZXR2YWx1ZXMKKworIyBSZXR1cm4gdGhlIGNvdW50IG9mIHBhY2thZ2VzIGRlcGVuZGVudCBvbiBwYWNrYWdlIGZvciB0aGlzIHRhcmdldF9pZCBpbWFnZQorZGVmIF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpOgorICAgIHJldHVybiBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3RhcmdldC5maWx0ZXIodGFyZ2V0X2lkX19leGFjdD10YXJnZXRfaWQsIGRlcF90eXBlX19leGFjdCA9IFBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUykuY291bnQoKQorCisjIFJldHVybiB0aGUgY291bnQgb2YgdGhlIHBhY2thZ2VzIHRoYXQgdGhpcyBwYWNrYWdlX2lkIGlzIGRlcGVuZGVudCBvbi4KKyMgVXNlIG9uZSBvZiB0aGUgdHdvIFJERVBFTkRTIHR5cGVzLCBlaXRoZXIgVFJERVBFTkRTIGlmIHRoZSBwYWNrYWdlIHdhcworIyBpbnN0YWxsZWQsIG9yIGVsc2UgUkRFUEVORFMgaWYgb25seSBidWlsdC4KK2RlZiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQsIGlzX2luc3RhbGxlZCk6CisgICAgaWYgaXNfaW5zdGFsbGVkIDoKKyAgICAgICAgcmV0dXJuIHBhY2thZ2UucGFja2FnZV9kZXBlbmRlbmNpZXNfc291cmNlLmZpbHRlcih0YXJnZXRfaWRfX2V4YWN0ID0gdGFyZ2V0X2lkLAorICAgICAgICAgICAgZGVwX3R5cGVfX2V4YWN0ID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfVFJERVBFTkRTKS5jb3VudCgpCisgICAgZWxzZSA6CisgICAgICAgIHJldHVybiBwYWNrYWdlLnBhY2thZ2VfZGVwZW5kZW5jaWVzX3NvdXJjZS5maWx0ZXIoZGVwX3R5cGVfX2V4YWN0ID0gUGFja2FnZV9EZXBlbmRlbmN5LlRZUEVfUkRFUEVORFMpLmNvdW50KCkKKworZGVmIF9nZXRfcGFja2FnZV9hbGlhcyhwYWNrYWdlKToKKyAgICBhbGlhcyA9IHBhY2thZ2UuaW5zdGFsbGVkX25hbWUKKyAgICBpZiBhbGlhcyAhPSBOb25lIGFuZCBhbGlhcyAhPSAnJyBhbmQgYWxpYXMgIT0gcGFja2FnZS5uYW1lOgorICAgICAgICByZXR1cm4gYWxpYXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJycKKworZGVmIF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpOgorICAgIHIgPSBwYWNrYWdlLm5hbWUKKyAgICB2ZXJzaW9uX2dvb2QgPSBwYWNrYWdlLnZlcnNpb24gIT0gTm9uZSBhbmQgIHBhY2thZ2UudmVyc2lvbiAhPSAnJworICAgIHJldmlzaW9uX2dvb2QgPSBwYWNrYWdlLnJldmlzaW9uICE9IE5vbmUgYW5kIHBhY2thZ2UucmV2aXNpb24gIT0gJycKKyAgICBpZiB2ZXJzaW9uX2dvb2Qgb3IgcmV2aXNpb25fZ29vZDoKKyAgICAgICAgciArPSAnXycKKyAgICAgICAgaWYgdmVyc2lvbl9nb29kOgorICAgICAgICAgICAgciArPSBwYWNrYWdlLnZlcnNpb24KKyAgICAgICAgICAgIGlmIHJldmlzaW9uX2dvb2Q6CisgICAgICAgICAgICAgICAgciArPSAnLScKKyAgICAgICAgaWYgcmV2aXNpb25fZ29vZDoKKyAgICAgICAgICAgIHIgKz0gcGFja2FnZS5yZXZpc2lvbgorICAgIHJldHVybiByCisKK2RlZiBwYWNrYWdlX2J1aWx0X2RldGFpbChyZXF1ZXN0LCBidWlsZF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAicGFja2FnZV9idWlsdF9kZXRhaWwuaHRtbCIKKyAgICBpZiBCdWlsZC5vYmplY3RzLmZpbHRlcihwaz1idWlsZF9pZCkuY291bnQoKSA9PSAwIDoKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0KGJ1aWxkcykKKworICAgICMgZm9sbG93IGNvbnZlbnRpb24gZm9yIHBhZ2luYXRpb24gdy8gc2VhcmNoIGFsdGhvdWdoIG5vdCB1c2VkIGZvciB0aGlzIHZpZXcKKyAgICBxdWVyeXNldCA9IFBhY2thZ2VfRmlsZS5vYmplY3RzLmZpbHRlcihwYWNrYWdlX2lkX19leGFjdD1wYWNrYWdlX2lkKQorICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAncGF0aDorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdwYWNrYWdlX2J1aWx0X2RldGFpbCcsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCwgcGFja2FnZV9pZCA9IHBhY2thZ2VfaWQpCisKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2VfRmlsZSkKKyAgICBwYXRocyA9IF9nZXRfcXVlcnlzZXQoUGFja2FnZV9GaWxlLCBxdWVyeXNldCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJ3BhdGgnKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdidWlsZCcgOiBCdWlsZC5vYmplY3RzLmdldChwaz1idWlsZF9pZCksCisgICAgICAgICAgICAncGFja2FnZScgOiBwYWNrYWdlLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgLTEsIEZhbHNlKSwKKyAgICAgICAgICAgICdvYmplY3RzJyA6IHBhdGhzLAorICAgICAgICAgICAgJ3RhYmxlY29scyc6WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidGaWxlJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicGF0aCIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJwYXRoIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInNpemUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic2l6ZSIpLAorICAgICAgICAgICAgICAgICAgICAnZGNsYXNzJzogJ3NpemVjb2wgc3BhbjInLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICBdCisgICAgfQorICAgIGlmIHBhdGhzLmFsbCgpLmNvdW50KCkgPCAyOgorICAgICAgICBjb250ZXh0WydkaXNhYmxlX3NvcnQnXSA9IFRydWU7CisKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgcGFja2FnZV9idWlsdF9kZXBlbmRlbmNpZXMocmVxdWVzdCwgYnVpbGRfaWQsIHBhY2thZ2VfaWQpOgorICAgIHRlbXBsYXRlID0gInBhY2thZ2VfYnVpbHRfZGVwZW5kZW5jaWVzLmh0bWwiCisgICAgaWYgQnVpbGQub2JqZWN0cy5maWx0ZXIocGs9YnVpbGRfaWQpLmNvdW50KCkgPT0gMCA6CisgICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgZGVwZW5kZW5jaWVzID0gX2dldF9wYWNrYWdlX2RlcGVuZGVuY2llcyhwYWNrYWdlX2lkKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICdydW50aW1lX2RlcHMnIDogZGVwZW5kZW5jaWVzWydydW50aW1lX2RlcHMnXSwKKyAgICAgICAgICAgICdvdGhlcl9kZXBzJyA6ICAgZGVwZW5kZW5jaWVzWydvdGhlcl9kZXBzJ10sCisgICAgICAgICAgICAnZGVwZW5kZW5jeV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jeV9jb3VudChwYWNrYWdlLCAtMSwgIEZhbHNlKQorICAgIH0KKyAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorCisKK2RlZiBwYWNrYWdlX2luY2x1ZGVkX2RldGFpbChyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX2RldGFpbC5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgIyBmb2xsb3cgY29udmVudGlvbiBmb3IgcGFnaW5hdGlvbiB3LyBzZWFyY2ggYWx0aG91Z2ggbm90IHVzZWQgZm9yIHRoaXMgdmlldworICAgIChwYWdlc2l6ZSwgb3JkZXJieSkgPSBfZ2V0X3BhcmFtZXRlcnNfdmFsdWVzKHJlcXVlc3QsIDI1LCAncGF0aDorJykKKyAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICByZXR2YWwgPSBfdmVyaWZ5X3BhcmFtZXRlcnMoIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisgICAgaWYgcmV0dmFsOgorICAgICAgICByZXR1cm4gX3JlZGlyZWN0X3BhcmFtZXRlcnMoICdwYWNrYWdlX2luY2x1ZGVkX2RldGFpbCcsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCwgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkLCBwYWNrYWdlX2lkID0gcGFja2FnZV9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2VfRmlsZSkKKworICAgIHF1ZXJ5c2V0ID0gUGFja2FnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHBhY2thZ2VfaWRfX2V4YWN0PXBhY2thZ2VfaWQpCisgICAgcGF0aHMgPSBfZ2V0X3F1ZXJ5c2V0KFBhY2thZ2VfRmlsZSwgcXVlcnlzZXQsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICdwYXRoJykKKworICAgIHBhY2thZ2UgPSBQYWNrYWdlLm9iamVjdHMuZ2V0KHBrPXBhY2thZ2VfaWQpCisgICAgcGFja2FnZS5mdWxscGFja2FnZXNwZWMgPSBfZ2V0X2Z1bGxwYWNrYWdlc3BlYyhwYWNrYWdlKQorICAgIHBhY2thZ2UuYWxpYXMgPSBfZ2V0X3BhY2thZ2VfYWxpYXMocGFja2FnZSkKKyAgICB0YXJnZXQgPSBUYXJnZXQub2JqZWN0cy5nZXQocGs9dGFyZ2V0X2lkKQorICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGs9YnVpbGRfaWQpLAorICAgICAgICAgICAgJ3RhcmdldCcgIDogdGFyZ2V0LAorICAgICAgICAgICAgJ3BhY2thZ2UnIDogcGFja2FnZSwKKyAgICAgICAgICAgICdyZXZlcnNlX2NvdW50JyA6IF9nZXRfcGFja2FnZV9yZXZlcnNlX2RlcF9jb3VudChwYWNrYWdlLCB0YXJnZXRfaWQpLAorICAgICAgICAgICAgJ2RlcGVuZGVuY3lfY291bnQnIDogX2dldF9wYWNrYWdlX2RlcGVuZGVuY3lfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkLCBUcnVlKSwKKyAgICAgICAgICAgICdvYmplY3RzJzogcGF0aHMsCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J0ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJwYXRoIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhdGgiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOidTaXplJywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic2l6ZSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJzaXplIiksCisgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc2l6ZWNvbCBzcGFuMicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF0KKyAgICB9CisgICAgaWYgcGF0aHMuYWxsKCkuY291bnQoKSA8IDI6CisgICAgICAgIGNvbnRleHRbJ2Rpc2FibGVfc29ydCddID0gVHJ1ZQorICAgIHJlc3BvbnNlID0gcmVuZGVyKHJlcXVlc3QsIHRlbXBsYXRlLCBjb250ZXh0KQorICAgIF9zZXRfcGFyYW1ldGVyc192YWx1ZXMocGFnZXNpemUsIG9yZGVyYnksIHJlcXVlc3QpCisgICAgcmV0dXJuIHJlc3BvbnNlCisKK2RlZiBwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcyhyZXF1ZXN0LCBidWlsZF9pZCwgdGFyZ2V0X2lkLCBwYWNrYWdlX2lkKToKKyAgICB0ZW1wbGF0ZSA9ICJwYWNrYWdlX2luY2x1ZGVkX2RlcGVuZGVuY2llcy5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5nZXQocGs9cGFja2FnZV9pZCkKKyAgICBwYWNrYWdlLmZ1bGxwYWNrYWdlc3BlYyA9IF9nZXRfZnVsbHBhY2thZ2VzcGVjKHBhY2thZ2UpCisgICAgcGFja2FnZS5hbGlhcyA9IF9nZXRfcGFja2FnZV9hbGlhcyhwYWNrYWdlKQorICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmdldChwaz10YXJnZXRfaWQpCisKKyAgICBkZXBlbmRlbmNpZXMgPSBfZ2V0X3BhY2thZ2VfZGVwZW5kZW5jaWVzKHBhY2thZ2VfaWQsIHRhcmdldF9pZCkKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdwYWNrYWdlJyA6IHBhY2thZ2UsCisgICAgICAgICAgICAndGFyZ2V0JyA6IHRhcmdldCwKKyAgICAgICAgICAgICdydW50aW1lX2RlcHMnIDogZGVwZW5kZW5jaWVzWydydW50aW1lX2RlcHMnXSwKKyAgICAgICAgICAgICdvdGhlcl9kZXBzJyA6ICAgZGVwZW5kZW5jaWVzWydvdGhlcl9kZXBzJ10sCisgICAgICAgICAgICAncmV2ZXJzZV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfcmV2ZXJzZV9kZXBfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkKSwKKyAgICAgICAgICAgICdkZXBlbmRlbmN5X2NvdW50JyA6IF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCwgVHJ1ZSkKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworZGVmIHBhY2thZ2VfaW5jbHVkZWRfcmV2ZXJzZV9kZXBlbmRlbmNpZXMocmVxdWVzdCwgYnVpbGRfaWQsIHRhcmdldF9pZCwgcGFja2FnZV9pZCk6CisgICAgdGVtcGxhdGUgPSAicGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcy5odG1sIgorICAgIGlmIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHBrPWJ1aWxkX2lkKS5jb3VudCgpID09IDAgOgorICAgICAgICByZXR1cm4gcmVkaXJlY3QoYnVpbGRzKQorCisgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMjUsICdwYWNrYWdlX19uYW1lOisnKQorICAgIG1hbmRhdG9yeV9wYXJhbWV0ZXJzID0geyAnY291bnQnOiBwYWdlc2l6ZSwgICdwYWdlJyA6IDEsICdvcmRlcmJ5Jzogb3JkZXJieSB9CisgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgcmV0dXJuIF9yZWRpcmVjdF9wYXJhbWV0ZXJzKCAncGFja2FnZV9pbmNsdWRlZF9yZXZlcnNlX2RlcGVuZGVuY2llcycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycywgYnVpbGRfaWQgPSBidWlsZF9pZCwgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkLCBwYWNrYWdlX2lkID0gcGFja2FnZV9pZCkKKyAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFBhY2thZ2VfRmlsZSkKKworICAgIHF1ZXJ5c2V0ID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMuc2VsZWN0X3JlbGF0ZWQoJ2RlcGVuZHNfb25fX25hbWUnLCAnZGVwZW5kc19vbl9fc2l6ZScpLmZpbHRlcihkZXBlbmRzX29uPXBhY2thZ2VfaWQsIHRhcmdldF9pZD10YXJnZXRfaWQsIGRlcF90eXBlPVBhY2thZ2VfRGVwZW5kZW5jeS5UWVBFX1RSREVQRU5EUykKKyAgICBvYmplY3RzID0gX2dldF9xdWVyeXNldChQYWNrYWdlX0RlcGVuZGVuY3ksIHF1ZXJ5c2V0LCBmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nLCAncGFja2FnZV9fbmFtZScpCisKKyAgICBwYWNrYWdlID0gUGFja2FnZS5vYmplY3RzLmdldChwaz1wYWNrYWdlX2lkKQorICAgIHBhY2thZ2UuZnVsbHBhY2thZ2VzcGVjID0gX2dldF9mdWxscGFja2FnZXNwZWMocGFja2FnZSkKKyAgICBwYWNrYWdlLmFsaWFzID0gX2dldF9wYWNrYWdlX2FsaWFzKHBhY2thZ2UpCisgICAgdGFyZ2V0ID0gVGFyZ2V0Lm9iamVjdHMuZ2V0KHBrPXRhcmdldF9pZCkKKyAgICBmb3IgbyBpbiBvYmplY3RzOgorICAgICAgICBpZiBvLnBhY2thZ2UudmVyc2lvbiAhPSAnJzoKKyAgICAgICAgICAgIG8ucGFja2FnZS52ZXJzaW9uICs9ICctJyArIG8ucGFja2FnZS5yZXZpc2lvbgorICAgICAgICBvLmFsaWFzID0gX2dldF9wYWNrYWdlX2FsaWFzKG8ucGFja2FnZSkKKyAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKSwKKyAgICAgICAgICAgICdwYWNrYWdlJyA6IHBhY2thZ2UsCisgICAgICAgICAgICAndGFyZ2V0JyA6IHRhcmdldCwKKyAgICAgICAgICAgICdvYmplY3RzJyA6IG9iamVjdHMsCisgICAgICAgICAgICAncmV2ZXJzZV9jb3VudCcgOiBfZ2V0X3BhY2thZ2VfcmV2ZXJzZV9kZXBfY291bnQocGFja2FnZSwgdGFyZ2V0X2lkKSwKKyAgICAgICAgICAgICdkZXBlbmRlbmN5X2NvdW50JyA6IF9nZXRfcGFja2FnZV9kZXBlbmRlbmN5X2NvdW50KHBhY2thZ2UsIHRhcmdldF9pZCwgVHJ1ZSksCisgICAgICAgICAgICAndGFibGVjb2xzJzpbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6J1BhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJwYWNrYWdlX19uYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOiBfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJwYWNrYWdlX19uYW1lIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonVmVyc2lvbicsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICduYW1lJzonU2l6ZScsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInBhY2thZ2VfX3NpemUiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6IF9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInBhY2thZ2VfX3NpemUiKSwKKyAgICAgICAgICAgICAgICAgICAgJ2RjbGFzcyc6ICdzaXplY29sIHNwYW4yJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgXQorICAgIH0KKyAgICBpZiBvYmplY3RzLmFsbCgpLmNvdW50KCkgPCAyOgorICAgICAgICBjb250ZXh0WydkaXNhYmxlX3NvcnQnXSA9IFRydWUKKyAgICByZXNwb25zZSA9IHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKyAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgIHJldHVybiByZXNwb25zZQorCitkZWYgaW1hZ2VfaW5mb3JtYXRpb25fZGlyKHJlcXVlc3QsIGJ1aWxkX2lkLCB0YXJnZXRfaWQsIHBhY2thZ2VmaWxlX2lkKToKKyAgICAjIHN0dWJiZWQgZm9yIG5vdworICAgIHJldHVybiByZWRpcmVjdChidWlsZHMpCisgICAgIyB0aGUgY29udGV4dCBwcm9jZXNzb3IgdGhhdCBzdXBwbGllcyBkYXRhIHVzZWQgYWNyb3NzIGFsbCB0aGUgcGFnZXMKKworCitkZWYgbWFuYWdlZGNvbnRleHRwcm9jZXNzb3IocmVxdWVzdCk6CisgICAgcmV0ID0geworICAgICAgICAicHJvamVjdHMiOiBQcm9qZWN0Lm9iamVjdHMuYWxsKCksCisgICAgICAgICJERUJVRyIgOiB0b2FzdGVybWFpbi5zZXR0aW5ncy5ERUJVRywKKyAgICAgICAgIlRPQVNURVJfQlJBTkNIIjogdG9hc3Rlcm1haW4uc2V0dGluZ3MuVE9BU1RFUl9CUkFOQ0gsCisgICAgICAgICJUT0FTVEVSX1JFVklTSU9OIiA6IHRvYXN0ZXJtYWluLnNldHRpbmdzLlRPQVNURVJfUkVWSVNJT04sCisgICAgfQorICAgIHJldHVybiByZXQKKworCisKK2ltcG9ydCB0b2FzdGVybWFpbi5zZXR0aW5ncworCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFByb2plY3RMYXllciwgUHJvamVjdFRhcmdldCwgUHJvamVjdFZhcmlhYmxlCisKKyMgd2UgaGF2ZSBhIHNldCBvZiBmdW5jdGlvbnMgaWYgd2UncmUgaW4gbWFuYWdlZCBtb2RlLCBvcgorIyBhIGRlZmF1bHQgInBhZ2Ugbm90IGF2YWlsYWJsZSIgc2ltcGxlIGZ1bmN0aW9ucyBmb3IgaW50ZXJhY3RpdmUgbW9kZQorCitpZiBUcnVlOgorICAgIGZyb20gZGphbmdvLmNvbnRyaWIuYXV0aC5tb2RlbHMgaW1wb3J0IFVzZXIKKyAgICBmcm9tIGRqYW5nby5jb250cmliLmF1dGggaW1wb3J0IGF1dGhlbnRpY2F0ZSwgbG9naW4KKyAgICBmcm9tIGRqYW5nby5jb250cmliLmF1dGguZGVjb3JhdG9ycyBpbXBvcnQgbG9naW5fcmVxdWlyZWQKKworICAgIGZyb20gb3JtLm1vZGVscyBpbXBvcnQgQnJhbmNoLCBMYXllclNvdXJjZSwgVG9hc3RlclNldHRpbmcsIFJlbGVhc2UsIE1hY2hpbmUsIExheWVyVmVyc2lvbkRlcGVuZGVuY3kKKyAgICBmcm9tIGJsZGNvbnRyb2wubW9kZWxzIGltcG9ydCBCdWlsZFJlcXVlc3QKKworICAgIGltcG9ydCB0cmFjZWJhY2sKKworICAgIGNsYXNzIEJhZFBhcmFtZXRlckV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAnJycgVGhlIGV4Y2VwdGlvbiByYWlzZWQgb24gaW52YWxpZCBQT1NUIHJlcXVlc3RzICcnJworICAgICAgICBwYXNzCisKKyAgICAjIHNob3dzIHRoZSAiYWxsIGJ1aWxkcyIgcGFnZSBmb3IgbWFuYWdlZCBtb2RlOyBpdCBkaXNwbGF5cyBidWlsZCByZXF1ZXN0cyAoYXQgbGVhc3Qgc3RhcnRlZCEpIGluc3RlYWQgb2YgYWN0dWFsIGJ1aWxkcworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoImJ1aWxkcy5odG1sIikKKyAgICBkZWYgYnVpbGRzKHJlcXVlc3QpOgorICAgICAgICAjIGRlZmluZSBoZXJlIHdoYXQgcGFyYW1ldGVycyB0aGUgdmlldyBuZWVkcyBpbiB0aGUgR0VUIHBvcnRpb24gaW4gb3JkZXIgdG8KKyAgICAgICAgIyBiZSBhYmxlIHRvIGRpc3BsYXkgc29tZXRoaW5nLiAgJ2NvdW50JyBhbmQgJ3BhZ2UnIGFyZSBtYW5kYXRvcnkgZm9yIGFsbCB2aWV3cworICAgICAgICAjIHRoYXQgdXNlIHBhZ2luYXRvcnMuCisKKyAgICAgICAgcXVlcnlzZXQgPSBCdWlsZC5vYmplY3RzLmV4Y2x1ZGUob3V0Y29tZSA9IEJ1aWxkLklOX1BST0dSRVNTKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHQsIHBhZ2VzaXplLCBvcmRlcmJ5ID0gX2J1aWxkX2xpc3RfaGVscGVyKHJlcXVlc3QsIHF1ZXJ5c2V0KQorICAgICAgICAgICAgIyBhbGwgYnVpbGRzIHBhZ2UgYXMgYSBQcm9qZWN0IGNvbHVtbgorICAgICAgICAgICAgY29udGV4dFsndGFibGVjb2xzJ10uYXBwZW5kKHsnbmFtZSc6ICdQcm9qZWN0JywgJ2NsY2Fsc3MnOiAncHJvamVjdF9jb2x1bW4nLCB9KQorICAgICAgICBleGNlcHQgUmVkaXJlY3RFeGNlcHRpb24gYXMgcmU6CisgICAgICAgICAgICAjIHJld3JpdGUgdGhlIFJlZGlyZWN0RXhjZXB0aW9uCisgICAgICAgICAgICByZS52aWV3ID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKyAgICAgICAgICAgIHJhaXNlIHJlCisKKyAgICAgICAgX3NldF9wYXJhbWV0ZXJzX3ZhbHVlcyhwYWdlc2l6ZSwgb3JkZXJieSwgcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgIyBoZWxwZXIgZnVuY3Rpb24sIHRvIGJlIHVzZWQgb24gImFsbCBidWlsZHMiIGFuZCAicHJvamVjdCBidWlsZHMiIHBhZ2VzCisgICAgZGVmIF9idWlsZF9saXN0X2hlbHBlcihyZXF1ZXN0LCBxdWVyeXNldF9hbGwpOgorCisgICAgICAgIGRlZmF1bHRfb3JkZXJieSA9ICdjb21wbGV0ZWRfb246LScKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAsIGRlZmF1bHRfb3JkZXJieSkKKyAgICAgICAgbWFuZGF0b3J5X3BhcmFtZXRlcnMgPSB7ICdjb3VudCc6IHBhZ2VzaXplLCAgJ3BhZ2UnIDogMSwgJ29yZGVyYnknIDogb3JkZXJieSB9CisgICAgICAgIHJldHZhbCA9IF92ZXJpZnlfcGFyYW1ldGVycyggcmVxdWVzdC5HRVQsIG1hbmRhdG9yeV9wYXJhbWV0ZXJzICkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgcmFpc2UgUmVkaXJlY3RFeGNlcHRpb24oIE5vbmUsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycykKKworICAgICAgICAjIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCB0YWtlcyBhIHJlcXVlc3QgZm9yIGFuIG9iamVjdCB0eXBlIGFuZCByZXR1cm5zIGEgcXVlcnlzZXQKKyAgICAgICAgIyBmb3IgdGhhdCBvYmplY3QgdHlwZS4gY29weXBhc3RhIGZvciBhbGwgbmVlZGVkIHRhYmxlIHNlYXJjaGVzCisgICAgICAgIChmaWx0ZXJfc3RyaW5nLCBzZWFyY2hfdGVybSwgb3JkZXJpbmdfc3RyaW5nKSA9IF9zZWFyY2hfdHVwbGUocmVxdWVzdCwgQnVpbGQpCisgICAgICAgICMgcG9zdC1wcm9jZXNzIGFueSBkYXRlIHJhbmdlIGZpbHRlcnMKKyAgICAgICAgZmlsdGVyX3N0cmluZyxkYXRlcmFuZ2Vfc2VsZWN0ZWQgPSBfbW9kaWZ5X2RhdGVfcmFuZ2VfZmlsdGVyKGZpbHRlcl9zdHJpbmcpCisgICAgICAgIHF1ZXJ5c2V0X2FsbCA9IHF1ZXJ5c2V0X2FsbC5zZWxlY3RfcmVsYXRlZCgicHJvamVjdCIpLmFubm90YXRlKGVycm9yc19ubyA9IENvdW50KCdsb2dtZXNzYWdlJywgb25seT1RKGxvZ21lc3NhZ2VfX2xldmVsPUxvZ01lc3NhZ2UuRVJST1IpfFEobG9nbWVzc2FnZV9fbGV2ZWw9TG9nTWVzc2FnZS5FWENFUFRJT04pKSkuYW5ub3RhdGUod2FybmluZ3Nfbm8gPSBDb3VudCgnbG9nbWVzc2FnZScsIG9ubHk9UShsb2dtZXNzYWdlX19sZXZlbD1Mb2dNZXNzYWdlLldBUk5JTkcpKSkuZXh0cmEoc2VsZWN0PXsndGltZXNwZW50JzonY29tcGxldGVkX29uIC0gc3RhcnRlZF9vbid9KQorICAgICAgICBxdWVyeXNldF93aXRoX3NlYXJjaCA9IF9nZXRfcXVlcnlzZXQoQnVpbGQsIHF1ZXJ5c2V0X2FsbCwgTm9uZSwgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy1jb21wbGV0ZWRfb24nKQorICAgICAgICBxdWVyeXNldCA9IF9nZXRfcXVlcnlzZXQoQnVpbGQsIHF1ZXJ5c2V0X2FsbCwgZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZywgJy1jb21wbGV0ZWRfb24nKQorCisgICAgICAgICMgcmV0cmlldmUgdGhlIG9iamVjdHMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGU7IGJ1aWxkcyBhIHBhZ2luYXRvciBhbmQgZ2V0cyBhIHBhZ2UgcmFuZ2UgdG8gZGlzcGxheQorICAgICAgICBidWlsZF9pbmZvID0gX2J1aWxkX3BhZ2VfcmFuZ2UoUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgICAgICMgYnVpbGQgdmlldy1zcGVjaWZpYyBpbmZvcm1hdGlvbjsgdGhpcyBpcyByZW5kZXJlZCBzcGVjaWZpY2FsbHkgaW4gdGhlIGJ1aWxkcyBwYWdlLCBhdCB0aGUgdG9wIG9mIHRoZSBwYWdlIChpLmUuIFJlY2VudCBidWlsZHMpCisgICAgICAgIGJ1aWxkX21ydSA9IEJ1aWxkLm9iamVjdHMub3JkZXJfYnkoIi1zdGFydGVkX29uIilbOjNdCisKKyAgICAgICAgIyBjYWxjdWxhdGUgdGhlIGV4YWN0IGJlZ2luaW5nIG9mIGxvY2FsIHRvZGF5IGFuZCB5ZXN0ZXJkYXksIGFwcGVuZCBjb250ZXh0CisgICAgICAgIGNvbnRleHRfZGF0ZSx0b2RheV9iZWdpbix5ZXN0ZXJkYXlfYmVnaW4gPSBfYWRkX2RhdGVyYW5nZV9jb250ZXh0KHF1ZXJ5c2V0X2FsbCwgcmVxdWVzdCwgeydzdGFydGVkX29uJywnY29tcGxldGVkX29uJ30pCisKKyAgICAgICAgIyBzZXQgdXAgbGlzdCBvZiBmc3R5cGVzIGZvciBlYWNoIGJ1aWxkCisgICAgICAgIGZzdHlwZXNfbWFwID0ge307CisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZF9pbmZvOgorICAgICAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlciggYnVpbGRfaWQgPSBidWlsZC5pZCApCisgICAgICAgICAgICBjb21tYSA9ICIiOworICAgICAgICAgICAgZXh0ZW5zaW9ucyA9ICIiOworICAgICAgICAgICAgZm9yIHQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgICAgICBpZiAoIG5vdCB0LmlzX2ltYWdlICk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdGlmID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoIHRhcmdldF9pZCA9IHQuaWQgKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHRpZjoKKyAgICAgICAgICAgICAgICAgICAgcz1yZS5zdWIoJy4qdGFyLmJ6MicsICd0YXIuYnoyJywgaS5maWxlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHMgPT0gaS5maWxlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLipcLicsICcnLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgTm9uZSA9PSByZS5zZWFyY2gocyxleHRlbnNpb25zKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgKz0gY29tbWEgKyBzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYSA9ICIsICIKKyAgICAgICAgICAgIGZzdHlwZXNfbWFwW2J1aWxkLmlkXT1leHRlbnNpb25zCisKKyAgICAgICAgIyBzZW5kIHRoZSBkYXRhIHRvIHRoZSB0ZW1wbGF0ZQorICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgaW5mbyBmb3IKKyAgICAgICAgICAgICAgICAgICAgJ21ydScgOiBidWlsZF9tcnUsCisgICAgICAgICAgICAgICAgIyBUT0RPOiBjb21tb24gb2JqZWN0cyBmb3IgYWxsIHRhYmxlIHZpZXdzLCBhZGFwdCBhcyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgJ29iamVjdHMnIDogYnVpbGRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgJ29iamVjdG5hbWUnIDogImJ1aWxkcyIsCisgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0X29yZGVyYnknIDogZGVmYXVsdF9vcmRlcmJ5LAorICAgICAgICAgICAgICAgICAgICAnZnN0eXBlcycgOiBmc3R5cGVzX21hcCwKKyAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF90ZXJtJyA6IHNlYXJjaF90ZXJtLAorICAgICAgICAgICAgICAgICAgICAndG90YWxfY291bnQnIDogcXVlcnlzZXRfd2l0aF9zZWFyY2guY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgJ2RhdGVyYW5nZV9zZWxlY3RlZCcgOiBkYXRlcmFuZ2Vfc2VsZWN0ZWQsCisgICAgICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIGRpc3BsYXkgb2YgY29sdW1ucyBmb3IgdGhlIHRhYmxlLCBhcHBlYXJhbmNlIGluICJFZGl0IGNvbHVtbnMiIGJveCwgdG9nZ2xpbmcgZGVmYXVsdCBzaG93L2hpZGUsIGFuZCBzcGVjaWZ5aW5nIGZpbHRlcnMgZm9yIGNvbHVtbnMKKyAgICAgICAgICAgICAgICAgICAgJ3RhYmxlY29scycgOiBbCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdPdXRjb21lJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbHVtbiB3aXRoIGEgc2luZ2xlIGZpbHRlcgorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJyA6ICJUaGUgb3V0Y29tZSB0ZWxscyB5b3UgaWYgYSBidWlsZCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIG9yIGZhaWxlZCIsICAgICAjIHRoZSBoZWxwIGJ1dHRvbiBjb250ZW50CisgICAgICAgICAgICAgICAgICAgICAnZGNsYXNzJyA6ICJzcGFuMiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRpY2F0aW9uIGFib3V0IGNvbHVtbiB3aWR0aDsgY29tZXMgZnJvbSB0aGUgZGVzaWduCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJvdXRjb21lIiksICAgICAgICAgICAgICAgIyBhZGRzIG9yZGVyaW5nIGJ5IHRoZSBmaWVsZCB2YWx1ZTsgZGVmYXVsdCBhc2NlbmRpbmcgdW5sZXNzIGNsaWNrZWQgZnJvbSBhc2NlbmRpbmcgaW50byBkZXNjZW5kaW5nCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJvdXRjb21lIiksCisgICAgICAgICAgICAgICAgICAgICAgIyBmaWx0ZXIgZmllbGQgd2lsbCBzZXQgYSBmaWx0ZXIgb24gdGhhdCBjb2x1bW4gd2l0aCB0aGUgc3BlY3MgaW4gdGhlIGZpbHRlciBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGNsYXNzIGZpZWxkIGluIHRoZSBmaWx0ZXIgaGFzIG5vIHJlbGF0aW9uIHdpdGggY2xjbGFzczsgdGhlIGNvbnRyb2wgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIFVJCisgICAgICAgICAgICAgICAgICAgICAgIyBzdGlsbCwgaXQgaXMgcmVjb21tZW5kZWQgZm9yIHRoZSB2YWx1ZXMgdG8gYmUgaWRlbnRpY2FsIGZvciBlYXN5IHRyYWNraW5nIGluIHRoZSBnZW5lcmF0ZWQgSFRNTAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdvdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYWJlbCc6ICdTaG93OicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1N1Y2Nlc3NmdWwgYnVpbGRzJywgJ291dGNvbWU6JyArIHN0cihCdWlsZC5TVUNDRUVERUQpLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIob3V0Y29tZT1zdHIoQnVpbGQuU1VDQ0VFREVEKSkuY291bnQoKSksICAjIHRoaXMgaXMgdGhlIGZpZWxkIHNlYXJjaCBleHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0ZhaWxlZCBidWlsZHMnLCAnb3V0Y29tZTonKyBzdHIoQnVpbGQuRkFJTEVEKSwgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKG91dGNvbWU9c3RyKEJ1aWxkLkZBSUxFRCkpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdSZWNpcGUnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgY29sdW1uLCBkaXNhYmxlZCBib3gsIHdpdGgganVzdCB0aGUgbmFtZSBpbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIldoYXQgeW91IGJ1aWx0IChpLmUuIG9uZSBvciBtb3JlIHJlY2lwZXMgb3IgaW1hZ2UgcmVjaXBlcykiLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAidGFyZ2V0X190YXJnZXQiKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRhcmdldF9fdGFyZ2V0IiksCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdNYWNoaW5lJywKKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgbWFjaGluZSBpcyB0aGUgaGFyZHdhcmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgYSByZWNpcGUgb3IgaW1hZ2UgcmVjaXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgIm1hY2hpbmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgIm1hY2hpbmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICdkY2xhc3MnOiAnc3BhbjMnCisgICAgICAgICAgICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhIHNsaWdodGx5IHdpZGVyIGNvbHVtbgorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnU3RhcnRlZCBvbicsICdjbGNsYXNzJzogJ3N0YXJ0ZWRfb24nLCAnaGlkZGVuJyA6IDEsICAgICAgIyB0aGlzIGlzIGFuIHVuY2hlY2tlZCBib3gsIHdoaWNoIGhpZGVzIHRoZSBjb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJUaGUgZGF0ZSBhbmQgdGltZSB5b3Ugc3RhcnRlZCB0aGUgYnVpbGQiLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAic3RhcnRlZF9vbiIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAic3RhcnRlZF9vbiIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICJzdGFydGVkX29uIiwKKyAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInIDogeydjbGFzcycgOiAnc3RhcnRlZF9vbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJUb2RheSdzIGJ1aWxkcyIgLCAnc3RhcnRlZF9vbl9fZ3RlOicrdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoc3RhcnRlZF9vbl9fZ3RlPXRvZGF5X2JlZ2luKS5jb3VudCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiWWVzdGVyZGF5J3MgYnVpbGRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRlZF9vbl9fZ3RlIXN0YXJ0ZWRfb25fX2x0OicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3llc3RlcmRheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSsnIScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3RvZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb25fX2d0ZT15ZXN0ZXJkYXlfYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfb25fX2x0PXRvZGF5X2JlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkJ1aWxkIGRhdGUgcmFuZ2UiLCAnZGF0ZXJhbmdlJywgMSwgJycsICdzdGFydGVkX29uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdDb21wbGV0ZWQgb24nLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBkYXRlIGFuZCB0aW1lIHRoZSBidWlsZCBmaW5pc2hlZCIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJjb21wbGV0ZWRfb24iLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImNvbXBsZXRlZF9vbiIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdjb21wbGV0ZWRfb24nLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdjb21wbGV0ZWRfb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVG9kYXkncyBidWlsZHMiICwgJ2NvbXBsZXRlZF9vbl9fZ3RlOicrdG9kYXlfYmVnaW4uc3RyZnRpbWUoIiVZLSVtLSVkIiksIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoY29tcGxldGVkX29uX19ndGU9dG9kYXlfYmVnaW4pLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJZZXN0ZXJkYXkncyBidWlsZHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV0ZWRfb25fX2d0ZSFjb21wbGV0ZWRfb25fX2x0OicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3llc3RlcmRheV9iZWdpbi5zdHJmdGltZSgiJVktJW0tJWQiKSsnIScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3RvZGF5X2JlZ2luLnN0cmZ0aW1lKCIlWS0lbS0lZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5c2V0X2FsbC5maWx0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9vbl9fZ3RlPXllc3RlcmRheV9iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX29uX19sdD10b2RheV9iZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJCdWlsZCBkYXRlIHJhbmdlIiwgJ2RhdGVyYW5nZScsIDEsICcnLCAnY29tcGxldGVkX29uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0ZhaWxlZCB0YXNrcycsICdjbGNsYXNzJzogJ2ZhaWxlZF90YXNrcycsICAgICAgICAgICAgICAgICMgc3BlY2lmaW5nIGEgY2xjbGFzcyB3aWxsIGVuYWJsZSB0aGUgY2hlY2tib3gKKyAgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJIb3cgbWFueSB0YXNrcyBmYWlsZWQgZHVyaW5nIHRoZSBidWlsZCIsCisgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJyA6IHsnY2xhc3MnIDogJ2ZhaWxlZF90YXNrcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aCBmYWlsZWQgdGFza3MnLCAndGFza19idWlsZF9fb3V0Y29tZTo0JywgcXVlcnlzZXRfd2l0aF9zZWFyY2guZmlsdGVyKHRhc2tfYnVpbGRfX291dGNvbWU9NCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRob3V0IGZhaWxlZCB0YXNrcycsICd0YXNrX2J1aWxkX19vdXRjb21lOk5PVDQnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoflEodGFza19idWlsZF9fb3V0Y29tZT00KSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0Vycm9ycycsICdjbGNsYXNzJzogJ2Vycm9yc19ubycsCisgICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgZXJyb3JzIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBidWlsZCAoaWYgYW55KSIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJlcnJvcnNfbm8iLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgImVycm9yc19ubyIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICdlcnJvcnNfbm8nLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICdlcnJvcnNfbm8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogJ1Nob3c6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQnVpbGRzIHdpdGggZXJyb3JzJywgJ2Vycm9yc19ub19fZ3RlOjEnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIoZXJyb3JzX25vX19ndGU9MSkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0J1aWxkcyB3aXRob3V0IGVycm9ycycsICdlcnJvcnNfbm86MCcsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcihlcnJvcnNfbm89MCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1dhcm5pbmdzJywgJ2NsY2xhc3MnOiAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IHdhcm5pbmdzIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBidWlsZCAoaWYgYW55KSIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ3YXJuaW5nc19ubyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAid2FybmluZ3Nfbm8iKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnd2FybmluZ3Nfbm8nLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcicgOiB7J2NsYXNzJyA6ICd3YXJuaW5nc19ubycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiAnU2hvdzonLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnIDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aCB3YXJuaW5ncycsJ3dhcm5pbmdzX25vX19ndGU6MScsIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoLmZpbHRlcih3YXJuaW5nc19ub19fZ3RlPTEpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdCdWlsZHMgd2l0aG91dCB3YXJuaW5ncycsJ3dhcm5pbmdzX25vOjAnLCBxdWVyeXNldF93aXRoX3NlYXJjaC5maWx0ZXIod2FybmluZ3Nfbm89MCkuY291bnQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1RpbWUnLCAnY2xjbGFzcyc6ICd0aW1lJywgJ2hpZGRlbicgOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBsb25nIGl0IHRvb2sgdGhlIGJ1aWxkIHRvIGZpbmlzaCIsCisgICAgICAgICAgICAgICAgICAgICAnb3JkZXJmaWVsZCc6IF9nZXRfdG9nZ2xlX29yZGVyKHJlcXVlc3QsICJ0aW1lc3BlbnQiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICdvcmRlcmljb24nOl9nZXRfdG9nZ2xlX29yZGVyX2ljb24ocmVxdWVzdCwgInRpbWVzcGVudCIpLAorICAgICAgICAgICAgICAgICAgICAgJ29yZGVya2V5JyA6ICd0aW1lc3BlbnQnLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnSW1hZ2UgZmlsZXMnLCAnY2xjbGFzcyc6ICdvdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSByb290IGZpbGUgc3lzdGVtIHR5cGVzIHByb2R1Y2VkIGJ5IHRoZSBidWlsZC4gWW91IGNhbiBmaW5kIHRoZW0gaW4geW91ciA8Y29kZT4vYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvPC9jb2RlPiBkaXJlY3RvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPOiBjb21wdXRlIGltYWdlIGZzdHlwZXMgZnJvbSBUYXJnZXRfSW1hZ2VfRmlsZQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgIyBtZXJnZSBkYXRlcmFuZ2UgdmFsdWVzCisgICAgICAgIGNvbnRleHQudXBkYXRlKGNvbnRleHRfZGF0ZSkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQsIHBhZ2VzaXplLCBvcmRlcmJ5CisKKworCisgICAgIyBuZXcgcHJvamVjdAorICAgIGRlZiBuZXdwcm9qZWN0KHJlcXVlc3QpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJuZXdwcm9qZWN0Lmh0bWwiCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAnZW1haWwnOiByZXF1ZXN0LnVzZXIuZW1haWwgaWYgcmVxdWVzdC51c2VyLmlzX2F1dGhlbnRpY2F0ZWQoKSBlbHNlICcnLAorICAgICAgICAgICAgJ3VzZXJuYW1lJzogcmVxdWVzdC51c2VyLnVzZXJuYW1lIGlmIHJlcXVlc3QudXNlci5pc19hdXRoZW50aWNhdGVkKCkgZWxzZSAnJywKKyAgICAgICAgICAgICdyZWxlYXNlcyc6IFJlbGVhc2Uub2JqZWN0cy5vcmRlcl9ieSgiZGVzY3JpcHRpb24iKSwKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ2RlZmF1bHRicmFuY2gnXSA9IFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0KG5hbWUgPSAiREVGQVVMVF9SRUxFQVNFIikudmFsdWUKKyAgICAgICAgZXhjZXB0IFRvYXN0ZXJTZXR0aW5nLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiByZXF1ZXN0Lm1ldGhvZCA9PSAiR0VUIjoKKyAgICAgICAgICAgICMgcmVuZGVyIG5ldyBwcm9qZWN0IHBhZ2UKKyAgICAgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisgICAgICAgIGVsaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAgICAgICAgICAgbWFuZGF0b3J5X2ZpZWxkcyA9IFsncHJvamVjdG5hbWUnLCAncHR5cGUnXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHB0eXBlID0gcmVxdWVzdC5QT1NULmdldCgncHR5cGUnKQorICAgICAgICAgICAgICAgIGlmIHB0eXBlID09ICJidWlsZCI6CisgICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeV9maWVsZHMuYXBwZW5kKCdwcm9qZWN0dmVyc2lvbicpCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UgaGF2ZSB2YWx1ZXMgZm9yIGFsbCBtYW5kYXRvcnlfZmllbGRzCisgICAgICAgICAgICAgICAgaWYgcmVkdWNlKCBsYW1iZGEgeCwgeTogeCBvciB5LCBtYXAobGFtYmRhIHg6IGxlbihyZXF1ZXN0LlBPU1QuZ2V0KHgsICcnKSkgPT0gMCwgbWFuZGF0b3J5X2ZpZWxkcykpOgorICAgICAgICAgICAgICAgICMgc2V0IGFsZXJ0IGZvciBtaXNzaW5nIGZpZWxkcworICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRQYXJhbWV0ZXJFeGNlcHRpb24oIkZpZWxkcyBtaXNzaW5nOiAiICsKKyAgICAgICAgICAgICIsICIuam9pbihbeCBmb3IgeCBpbiBtYW5kYXRvcnlfZmllbGRzIGlmIGxlbihyZXF1ZXN0LlBPU1QuZ2V0KHgsICcnKSkgPT0gMCBdKSkKKworICAgICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0LnVzZXIuaXNfYXV0aGVudGljYXRlZCgpOgorICAgICAgICAgICAgICAgICAgICB1c2VyID0gYXV0aGVudGljYXRlKHVzZXJuYW1lID0gcmVxdWVzdC5QT1NULmdldCgndXNlcm5hbWUnLCAnX2Fub251c2VyJyksIHBhc3N3b3JkID0gJ25vcGFzcycpCisgICAgICAgICAgICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBVc2VyLm9iamVjdHMuY3JlYXRlX3VzZXIodXNlcm5hbWUgPSByZXF1ZXN0LlBPU1QuZ2V0KCd1c2VybmFtZScsICdfYW5vbnVzZXInKSwgZW1haWwgPSByZXF1ZXN0LlBPU1QuZ2V0KCdlbWFpbCcsICcnKSwgcGFzc3dvcmQgPSAibm9wYXNzIikKKworICAgICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhlbnRpY2F0ZSh1c2VybmFtZSA9IHVzZXIudXNlcm5hbWUsIHBhc3N3b3JkID0gJ25vcGFzcycpCisgICAgICAgICAgICAgICAgICAgIGxvZ2luKHJlcXVlc3QsIHVzZXIpCisKKyAgICAgICAgICAgICAgICAjICBzYXZlIHRoZSBwcm9qZWN0CisgICAgICAgICAgICAgICAgaWYgcHR5cGUgPT0gImFuYWx5c2lzIjoKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmdldChwayA9IHJlcXVlc3QuUE9TVC5nZXQoJ3Byb2plY3R2ZXJzaW9uJywgTm9uZSApKQorCisgICAgICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWUgPSByZXF1ZXN0LlBPU1RbJ3Byb2plY3RuYW1lJ10sIHJlbGVhc2UgPSByZWxlYXNlKQorICAgICAgICAgICAgICAgIHByai51c2VyX2lkID0gcmVxdWVzdC51c2VyLnBrCisgICAgICAgICAgICAgICAgcHJqLnNhdmUoKQorICAgICAgICAgICAgICAgIHJldHVybiByZWRpcmVjdChyZXZlcnNlKHByb2plY3QsIGFyZ3M9KHByai5waywpKSArICI/bm90aWZ5PW5ldy1wcm9qZWN0IikKKworICAgICAgICAgICAgZXhjZXB0IChJbnRlZ3JpdHlFcnJvciwgQmFkUGFyYW1ldGVyRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICAgICAgICAgICMgZmlsbCBpbiBwYWdlIHdpdGggcHJldmlvdXNseSBzdWJtaXR0ZWQgdmFsdWVzCisgICAgICAgICAgICAgICAgbWFwKGxhbWJkYSB4OiBjb250ZXh0Ll9fc2V0aXRlbV9fKHgsIHJlcXVlc3QuUE9TVC5nZXQoeCwgIi0tIG1pc3NpbmciKSksIG1hbmRhdG9yeV9maWVsZHMpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlLCBJbnRlZ3JpdHlFcnJvcikgYW5kICJ1c2VybmFtZSIgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WydhbGVydCddID0gIllvdXIgY2hvc2VuIHVzZXJuYW1lIGlzIGFscmVhZHkgdXNlZCIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WydhbGVydCddID0gc3RyKGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihyZXF1ZXN0LCB0ZW1wbGF0ZSwgY29udGV4dCkKKworICAgICAgICByYWlzZSBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBtZXRob2QgZm9yIHRoaXMgcGFnZSIpCisKKworCisgICAgIyBTaG93cyB0aGUgZWRpdCBwcm9qZWN0IHBhZ2UKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdwcm9qZWN0Lmh0bWwnKQorICAgIGRlZiBwcm9qZWN0KHJlcXVlc3QsIHBpZCk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQoaWQgPSBwaWQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHVzZXIgPSBVc2VyLm9iamVjdHMuZ2V0KGlkID0gcHJqLnVzZXJfaWQpCisgICAgICAgIGV4Y2VwdCBVc2VyLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHB1c2VyID0gTm9uZQorCisgICAgICAgICMgZXhlY3V0ZSBQT1NUIHJlcXVlc3RzCisgICAgICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJQT1NUIjoKKyAgICAgICAgICAgICMgYWRkIGxheWVycworICAgICAgICAgICAgaWYgJ2xheWVyQWRkJyBpbiByZXF1ZXN0LlBPU1QgYW5kIGxlbihyZXF1ZXN0LlBPU1RbJ2xheWVyQWRkJ10pID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgbGMgaW4gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmZpbHRlcihwa19faW49W2kgZm9yIGkgaW4gcmVxdWVzdC5QT1NUWydsYXllckFkZCddLnNwbGl0KCIsIikgaWYgbGVuKGkpID4gMF0pOgorICAgICAgICAgICAgICAgICAgICBQcm9qZWN0TGF5ZXIub2JqZWN0cy5nZXRfb3JfY3JlYXRlKHByb2plY3QgPSBwcmosIGxheWVyY29tbWl0ID0gbGMpCisKKyAgICAgICAgICAgICMgcmVtb3ZlIGxheWVycworICAgICAgICAgICAgaWYgJ2xheWVyRGVsJyBpbiByZXF1ZXN0LlBPU1QgYW5kIGxlbihyZXF1ZXN0LlBPU1RbJ2xheWVyRGVsJ10pID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiByZXF1ZXN0LlBPU1RbJ2xheWVyRGVsJ10uc3RyaXAoKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICBwdCA9IFByb2plY3RMYXllci5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqLCBsYXllcmNvbW1pdF9pZCA9IGludCh0KSkuZGVsZXRlKCkKKworICAgICAgICAgICAgaWYgJ3Byb2plY3ROYW1lJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgcHJqLm5hbWUgPSByZXF1ZXN0LlBPU1RbJ3Byb2plY3ROYW1lJ10KKyAgICAgICAgICAgICAgICBwcmouc2F2ZSgpOworCisgICAgICAgICAgICBpZiAncHJvamVjdFZlcnNpb24nIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICAjIElmIHRoZSByZWxlYXNlIGlzIHRoZSBjdXJyZW50IHByb2plY3QgdGhlbiByZXR1cm4gbm93CisgICAgICAgICAgICAgICAgaWYgcHJqLnJlbGVhc2UucGsgPT0gaW50KHJlcXVlc3QuUE9TVC5nZXQoJ3Byb2plY3RWZXJzaW9uJywtMSkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ge30KKworICAgICAgICAgICAgICAgIHByai5yZWxlYXNlID0gUmVsZWFzZS5vYmplY3RzLmdldChwayA9IHJlcXVlc3QuUE9TVFsncHJvamVjdFZlcnNpb24nXSkKKyAgICAgICAgICAgICAgICAjIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBiaXRiYWtlIHZlcnNpb24KKyAgICAgICAgICAgICAgICBwcmouYml0YmFrZV92ZXJzaW9uID0gcHJqLnJlbGVhc2UuYml0YmFrZV92ZXJzaW9uCisgICAgICAgICAgICAgICAgcHJqLnNhdmUoKQorICAgICAgICAgICAgICAgICMgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGxheWVycworICAgICAgICAgICAgICAgIGZvciBpIGluIHByai5wcm9qZWN0bGF5ZXJfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgICAgICAjIGZpbmQgYW5kIGFkZCBhIHNpbWlsYXJseS1uYW1lZCBsYXllciBvbiB0aGUgbmV3IGJyYW5jaAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsdiA9IHByai5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMobGF5ZXJfbmFtZSA9IGkubGF5ZXJjb21taXQubGF5ZXIubmFtZSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbGF5ZXJjb21taXQgPSBsdikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCByaWQgb2YgdGhlIG9sZCBlbnRyeQorICAgICAgICAgICAgICAgICAgICAgICAgaS5kZWxldGUoKQorCisgICAgICAgICAgICBpZiAnbWFjaGluZU5hbWUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBtYWNoaW5ldmFyID0gcHJqLnByb2plY3R2YXJpYWJsZV9zZXQuZ2V0KG5hbWU9Ik1BQ0hJTkUiKQorICAgICAgICAgICAgICAgIG1hY2hpbmV2YXIudmFsdWU9cmVxdWVzdC5QT1NUWydtYWNoaW5lTmFtZSddCisgICAgICAgICAgICAgICAgbWFjaGluZXZhci5zYXZlKCkKKworCisgICAgICAgICMgd2UgdXNlIGltcGxpY2l0IGtub3dsZWRnZSBvZiB0aGUgY3VycmVudCB1c2VyJ3MgcHJvamVjdCB0byBmaWx0ZXIgbGF5ZXIgaW5mb3JtYXRpb24sIGUuZy4KKyAgICAgICAgcGlkID0gcHJqLmlkCisKKyAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgorICAgICAgICBmcmVxdGFyZ2V0cyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyZXF0YXJnZXRzICs9IG1hcChsYW1iZGEgeDogeC50YXJnZXQsIHJlZHVjZShsYW1iZGEgeCwgeTogeCArIHksICAgbWFwKGxhbWJkYSB4OiBsaXN0KHgudGFyZ2V0X3NldC5hbGwoKSksIEJ1aWxkLm9iamVjdHMuZmlsdGVyKHByb2plY3QgPSBwcmosIG91dGNvbWVfX2x0ID0gQnVpbGQuSU5fUFJPR1JFU1MpKSkpCisgICAgICAgICAgICBmcmVxdGFyZ2V0cyArPSBtYXAobGFtYmRhIHg6IHgudGFyZ2V0LCByZWR1Y2UobGFtYmRhIHgsIHk6IHggKyB5LCAgIG1hcChsYW1iZGEgeDogbGlzdCh4LmJydGFyZ2V0X3NldC5hbGwoKSksIEJ1aWxkUmVxdWVzdC5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqLCBzdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfRkFJTEVEKSkpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmcmVxdGFyZ2V0cyA9IENvdW50ZXIoZnJlcXRhcmdldHMpCisgICAgICAgIGZyZXF0YXJnZXRzID0gc29ydGVkKGZyZXF0YXJnZXRzLCBrZXkgPSBsYW1iZGEgeDogZnJlcXRhcmdldHNbeF0sIHJldmVyc2U9VHJ1ZSkKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgInByb2plY3QiIDogcHJqLAorICAgICAgICAgICAgImx2c19ub3MiIDogTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmFsbCgpLmNvdW50KCksCisgICAgICAgICAgICAiY29tcGxldGVkYnVpbGRzIjogQnVpbGQub2JqZWN0cy5maWx0ZXIocHJvamVjdF9pZCA9IHBpZCkuZmlsdGVyKG91dGNvbWVfX2x0ZSA9IEJ1aWxkLklOX1BST0dSRVNTKSwKKyAgICAgICAgICAgICJwcmoiIDogeyJuYW1lIjogcHJqLm5hbWUsIH0sCisgICAgICAgICAgICAiYnVpbGRyZXF1ZXN0cyIgOiBwcmouYnVpbGRfc2V0LmZpbHRlcihvdXRjb21lPUJ1aWxkLklOX1BST0dSRVNTKSwKKyAgICAgICAgICAgICJidWlsZHMiIDogX3Byb2plY3RfcmVjZW50X2J1aWxkX2xpc3QocHJqKSwKKyAgICAgICAgICAgICJsYXllcnMiIDogIG1hcChsYW1iZGEgeDogeworICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogeC5sYXllcmNvbW1pdC5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICJvcmRlcmlkIjogeC5waywKKyAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6IHgubGF5ZXJjb21taXQubGF5ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogeC5sYXllcmNvbW1pdC5sYXllci52Y3NfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgInZjc19yZWZlcmVuY2UiIDogeC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgInVybCI6IHgubGF5ZXJjb21taXQubGF5ZXIubGF5ZXJfaW5kZXhfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgImxheWVyZGV0YWlsdXJsIjogeC5sYXllcmNvbW1pdC5nZXRfZGV0YWlsc3BhZ2VfdXJsKHByai5wayksCisgICAgICAgICAgICAgICAgIyBUaGlzIGJyYW5jaCBuYW1lIGlzIGFjdHVhbGx5IHRoZSByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAiYnJhbmNoIiA6IHsgIm5hbWUiIDogeC5sYXllcmNvbW1pdC5nZXRfdmNzX3JlZmVyZW5jZSgpLCAibGF5ZXJzb3VyY2UiIDogeC5sYXllcmNvbW1pdC51cF9icmFuY2gubGF5ZXJfc291cmNlLm5hbWUgaWYgeC5sYXllcmNvbW1pdC51cF9icmFuY2ggIT0gTm9uZSBlbHNlIE5vbmV9fSwKKyAgICAgICAgICAgICAgICAgICAgcHJqLnByb2plY3RsYXllcl9zZXQuYWxsKCkub3JkZXJfYnkoImlkIikpLAorICAgICAgICAgICAgInRhcmdldHMiIDogbWFwKGxhbWJkYSB4OiB7InRhcmdldCIgOiB4LnRhcmdldCwgInRhc2siIDogeC50YXNrLCAicGsiOiB4LnBrfSwgcHJqLnByb2plY3R0YXJnZXRfc2V0LmFsbCgpKSwKKyAgICAgICAgICAgICJ2YXJpYWJsZXMiOiBtYXAobGFtYmRhIHg6ICh4Lm5hbWUsIHgudmFsdWUpLCBwcmoucHJvamVjdHZhcmlhYmxlX3NldC5hbGwoKSksCisgICAgICAgICAgICAiZnJlcXRhcmdldHMiOiBmcmVxdGFyZ2V0c1s6NV0sCisgICAgICAgICAgICAicmVsZWFzZXMiOiBtYXAobGFtYmRhIHg6IHsiaWQiOiB4LnBrLCAibmFtZSI6IHgubmFtZSwgImRlc2NyaXB0aW9uIjp4LmRlc2NyaXB0aW9ufSwgUmVsZWFzZS5vYmplY3RzLmFsbCgpKSwKKyAgICAgICAgICAgICJwcm9qZWN0X2h0bWwiOiAxLAorICAgICAgICAgICAgInJlY2lwZXNUeXBlQWhlYWRVcmwiOiByZXZlcnNlKCd4aHJfcmVjaXBlc3R5cGVhaGVhZCcsIGFyZ3M9KHByai5waywpKSwKKyAgICAgICAgICAgICJwcm9qZWN0QnVpbGRzVXJsIjogcmV2ZXJzZSgncHJvamVjdGJ1aWxkcycsIGFyZ3M9KHByai5waywpKSwKKyAgICAgICAgfQorCisgICAgICAgIGlmIHByai5yZWxlYXNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29udGV4dFsncmVsZWFzZSddID0geyAiaWQiOiBwcmoucmVsZWFzZS5waywgIm5hbWUiOiBwcmoucmVsZWFzZS5uYW1lLCAiZGVzY3JpcHRpb24iOiBwcmoucmVsZWFzZS5kZXNjcmlwdGlvbn0KKworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbIm1hY2hpbmUiXSA9IHsibmFtZSI6IHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJNQUNISU5FIikudmFsdWV9CisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgY29udGV4dFsibWFjaGluZSJdID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WyJkaXN0cm8iXSA9IHByai5wcm9qZWN0dmFyaWFibGVfc2V0LmdldChuYW1lPSJESVNUUk8iKS52YWx1ZQorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIGNvbnRleHRbImRpc3RybyJdID0gIi0tIG5vdCBzZXQgeWV0IgorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBkZWYganN1bml0dGVzdHMocmVxdWVzdCk6CisgICAgICAiIiIgUHJvdmlkZXMgYSBwYWdlIGZvciB0aGUganMgdW5pdCB0ZXN0cyAiIiIKKyAgICAgIGJidiA9IEJpdGJha2VWZXJzaW9uLm9iamVjdHMuZmlsdGVyKGJyYW5jaD0ibWFzdGVyIikuZmlyc3QoKQorICAgICAgcmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5maWx0ZXIoYml0YmFrZV92ZXJzaW9uPWJidikuZmlyc3QoKQorCisgICAgICBuYW1lID0gIl9qc191bml0X3Rlc3RfcHJqXyIKKworICAgICAgIyBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBwcm9qZWN0IGJ5IHRoaXMgbmFtZSBkZWxldGUgaXQuIFdlIGRvbid0IHdhbnQKKyAgICAgICMgTG90cyBvZiBkdXBsaWNhdGVzIGNsdXR0ZXJpbmcgdXAgdGhlIHByb2plY3RzLgorICAgICAgUHJvamVjdC5vYmplY3RzLmZpbHRlcihuYW1lPW5hbWUpLmRlbGV0ZSgpCisKKyAgICAgIG5ld19wcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmNyZWF0ZV9wcm9qZWN0KG5hbWU9bmFtZSwgcmVsZWFzZT1yZWxlYXNlKQorCisgICAgICBjb250ZXh0ID0geyAncHJvamVjdCcgOiBuZXdfcHJvamVjdCB9CisgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJqcy11bml0LXRlc3RzLmh0bWwiLCBjb250ZXh0KQorCisgICAgZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jc3JmIGltcG9ydCBjc3JmX2V4ZW1wdAorICAgIEBjc3JmX2V4ZW1wdAorICAgIGRlZiB4aHJfdGVzdHJlbGVhc2VjaGFuZ2UocmVxdWVzdCwgcGlkKToKKyAgICAgICAgZGVmIHJlc3BvbnNlKGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgICIiIiByZXR1cm5zIGxheWVyIHZlcnNpb25zIHRoYXQgd291bGQgYmUgZGVsZXRlZCBvbiB0aGUgbmV3CisgICAgICAgIHJlbGVhc2VfX3BrICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrID0gcGlkKQorICAgICAgICAgICAgbmV3X3JlbGVhc2VfaWQgPSByZXF1ZXN0LkdFVFsnbmV3X3JlbGVhc2VfaWQnXQorCisgICAgICAgICAgICAjIElmIHdlJ3JlIGFscmVhZHkgb24gdGhpcyBwcm9qZWN0IGRvIG5vdGhpbmcKKyAgICAgICAgICAgIGlmIHByai5yZWxlYXNlLnBrID09IGludChuZXdfcmVsZWFzZV9pZCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcG9uc2UoeyJlcnJvciI6ICJvayIsICJyb3dzIjogW119KQorCisgICAgICAgICAgICByZXR2YWwgPSBbXQorCisgICAgICAgICAgICBmb3IgaSBpbiBwcmoucHJvamVjdGxheWVyX3NldC5hbGwoKToKKyAgICAgICAgICAgICAgICBsdiA9IHByai5jb21wYXRpYmxlX2xheWVydmVyc2lvbnMocmVsZWFzZSA9IFJlbGVhc2Uub2JqZWN0cy5nZXQocGs9bmV3X3JlbGVhc2VfaWQpKS5maWx0ZXIobGF5ZXJfX25hbWUgPSBpLmxheWVyY29tbWl0LmxheWVyLm5hbWUpCisgICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBubyBsYXllcl92ZXJzaW9uIHdpdGggdGhlIG5ldyByZWxlYXNlIGlkLAorICAgICAgICAgICAgICAgICMgYW5kIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICAgICAgICBpZiBsdi5jb3VudCgpIDwgMToKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsLmFwcGVuZChpKQorCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoeyJlcnJvciI6Im9rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvd3MiIDogbWFwKCBfbHZfdG9fZGljdChwcmopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGxhbWJkYSB4OiB4LmxheWVyY29tbWl0LCByZXR2YWwgKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZSh7ImVycm9yIjogc3RyKGUpIH0pCisKKyAgICBkZWYgeGhyX2NvbmZpZ3ZhcmVkaXQocmVxdWVzdCwgcGlkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJqID0gUHJvamVjdC5vYmplY3RzLmdldChpZCA9IHBpZCkKKyAgICAgICAgICAgICMgYWRkIGNvbmYgdmFyaWFibGVzCisgICAgICAgICAgICBpZiAnY29uZmlndmFyQWRkJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgdD1yZXF1ZXN0LlBPU1RbJ2NvbmZpZ3ZhckFkZCddLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiAiOiIgaW4gdDoKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHZhbHVlID0gdC5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiIKKworICAgICAgICAgICAgICAgIHB0LCBjcmVhdGVkID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShwcm9qZWN0ID0gcHJqLCBuYW1lID0gdmFyaWFibGUsIHZhbHVlID0gdmFsdWUpCisgICAgICAgICAgICAjIGNoYW5nZSBjb25mIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgJ2NvbmZpZ3ZhckNoYW5nZScgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIHQ9cmVxdWVzdC5QT1NUWydjb25maWd2YXJDaGFuZ2UnXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgIjoiIGluIHQ6CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB2YWx1ZSA9IHQuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gdAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiCisKKyAgICAgICAgICAgICAgICBwdCwgY3JlYXRlZCA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldF9vcl9jcmVhdGUocHJvamVjdCA9IHByaiwgbmFtZSA9IHZhcmlhYmxlKQorICAgICAgICAgICAgICAgIHB0LnZhbHVlPXZhbHVlCisgICAgICAgICAgICAgICAgcHQuc2F2ZSgpCisgICAgICAgICAgICAjIHJlbW92ZSBjb25mIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgJ2NvbmZpZ3ZhckRlbCcgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIHQ9cmVxdWVzdC5QT1NUWydjb25maWd2YXJEZWwnXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcHQgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocGsgPSBpbnQodCkpLmRlbGV0ZSgpCisKKyAgICAgICAgICAgICMgcmV0dXJuIGFsbCBwcm9qZWN0IHNldHRpbmdzLCBmaWx0ZXIgb3V0IGJsYWNrbGlzdCBhbmQgZWxzZXdoZXJlLW1hbmFnZWQgdmFyaWFibGVzCisgICAgICAgICAgICB2YXJzX21hbmFnZWQsdmFyc19mc3R5cGVzLHZhcnNfYmxhY2tsaXN0ID0gZ2V0X3Byb2plY3RfY29uZmlndmFyc19jb250ZXh0KCkKKyAgICAgICAgICAgIGNvbmZpZ3ZhcnNfcXVlcnkgPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5maWx0ZXIocHJvamVjdF9pZCA9IHBpZCkuYWxsKCkKKyAgICAgICAgICAgIGZvciB2YXIgaW4gdmFyc19tYW5hZ2VkOgorICAgICAgICAgICAgICAgIGNvbmZpZ3ZhcnNfcXVlcnkgPSBjb25maWd2YXJzX3F1ZXJ5LmV4Y2x1ZGUobmFtZSA9IHZhcikKKyAgICAgICAgICAgIGZvciB2YXIgaW4gdmFyc19ibGFja2xpc3Q6CisgICAgICAgICAgICAgICAgY29uZmlndmFyc19xdWVyeSA9IGNvbmZpZ3ZhcnNfcXVlcnkuZXhjbHVkZShuYW1lID0gdmFyKQorCisgICAgICAgICAgICByZXR1cm5fZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAiZXJyb3IiOiAib2siLAorICAgICAgICAgICAgICAgICdjb25maWd2YXJzJyAgIDogbWFwKGxhbWJkYSB4OiAoeC5uYW1lLCB4LnZhbHVlLCB4LnBrKSwgY29uZmlndmFyc19xdWVyeSksCisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ2Rpc3RybyddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiRElTVFJPIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ2ZzdHlwZXMnXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIklNQUdFX0ZTVFlQRVMiKS52YWx1ZSwKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm5fZGF0YVsnaW1hZ2VfaW5zdGFsbF9hcHBlbmQnXSA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIklNQUdFX0lOU1RBTExfYXBwZW5kIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ3BhY2thZ2VfY2xhc3NlcyddID0gUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiUEFDS0FHRV9DTEFTU0VTIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuX2RhdGFbJ3Nka19tYWNoaW5lJ10gPSBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJTREtNQUNISU5FIikudmFsdWUsCisgICAgICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyggcmV0dXJuX2RhdGEgKSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbi5kdW1wcyh7ImVycm9yIjpzdHIoZSkgKyAiXG4iICsgdHJhY2ViYWNrLmZvcm1hdF9leGMoKX0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKworICAgIGRlZiB4aHJfaW1wb3J0bGF5ZXIocmVxdWVzdCk6CisgICAgICAgIGlmIChub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ3Zjc191cmwnKSBvcgorICAgICAgICAgICAgbm90IHJlcXVlc3QuUE9TVC5oYXNfa2V5KCduYW1lJykgb3IKKyAgICAgICAgICAgIG5vdCByZXF1ZXN0LlBPU1QuaGFzX2tleSgnZ2l0X3JlZicpIG9yCisgICAgICAgICAgICBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoJ3Byb2plY3RfaWQnKSk6CisgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiTWlzc2luZyBwYXJhbWV0ZXJzOyByZXF1aXJlcyB2Y3NfdXJsLCBuYW1lLCBnaXRfcmVmIGFuZCBwcm9qZWN0X2lkIn0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgbGF5ZXJzX2FkZGVkID0gW107CisKKyAgICAgICAgIyBSdWRpbWVudGFyeSBjaGVjayBmb3IgYW55IHBvc3NpYmxlIGh0bWwgdGFncworICAgICAgICBpZiAiPCIgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoanNvbmZpbHRlcih7ImVycm9yIjogIkludmFsaWQgY2hhcmFjdGVyIDwifSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KHBrPXJlcXVlc3QuUE9TVFsncHJvamVjdF9pZCddKQorCisgICAgICAgICMgU3RyaXAgdHJhaWxpbmcvbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHZhbHVlcworICAgICAgICAjIHB1dCBpbnRvIGEgbmV3IGRpY3QgYmVjYXVzZSBQT1NUIG9uZSBpcyBpbW11dGFibGUKKyAgICAgICAgcG9zdF9kYXRhID0gZGljdCgpCisgICAgICAgIGZvciBrZXksdmFsIGluIHJlcXVlc3QuUE9TVC5pdGVyaXRlbXMoKToKKyAgICAgICAgICBwb3N0X2RhdGFba2V5XSA9IHZhbC5zdHJpcCgpCisKKworICAgICAgICAjIFdlIG5lZWQgdG8ga25vdyB3aGF0IHJlbGVhc2UgdGhlIGN1cnJlbnQgcHJvamVjdCBpcyBzbyB0aGF0IHdlCisgICAgICAgICMgY2FuIHNldCB0aGUgaW1wb3J0ZWQgbGF5ZXIncyB1cF9icmFuY2hfaWQKKyAgICAgICAgcHJqX2JyYW5jaF9uYW1lID0gUmVsZWFzZS5vYmplY3RzLmdldChwaz1wcmoucmVsZWFzZV9pZCkuYnJhbmNoX25hbWUKKyAgICAgICAgdXBfYnJhbmNoLCBicmFuY2hfY3JlYXRlZCA9IEJyYW5jaC5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1wcmpfYnJhbmNoX25hbWUsIGxheWVyX3NvdXJjZV9pZD1MYXllclNvdXJjZS5UWVBFX0lNUE9SVEVEKQorCisgICAgICAgIGxheWVyX3NvdXJjZSA9IExheWVyU291cmNlLm9iamVjdHMuZ2V0KHNvdXJjZXR5cGU9TGF5ZXJTb3VyY2UuVFlQRV9JTVBPUlRFRCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGF5ZXIsIGxheWVyX2NyZWF0ZWQgPSBMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobmFtZT1wb3N0X2RhdGFbJ25hbWUnXSkKKyAgICAgICAgZXhjZXB0IE11bHRpcGxlT2JqZWN0c1JldHVybmVkOgorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiaGludC1sYXllci1leGlzdHMifSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBpZiBsYXllcjoKKyAgICAgICAgICAgIGlmIGxheWVyX2NyZWF0ZWQ6CisgICAgICAgICAgICAgICAgbGF5ZXIubGF5ZXJfc291cmNlID0gbGF5ZXJfc291cmNlCisgICAgICAgICAgICAgICAgbGF5ZXIudmNzX3VybCA9IHBvc3RfZGF0YVsndmNzX3VybCddCisgICAgICAgICAgICAgICAgbGF5ZXIudXBfZGF0ZSA9IHRpbWV6b25lLm5vdygpCisgICAgICAgICAgICAgICAgbGF5ZXIuc2F2ZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhbiBleGlzdGluZyBsYXllciBieSB0aGlzIG5hbWUsIGxldCdzIHNlZSBpZiB0aGUgZ2l0CisgICAgICAgICAgICAgICAgIyB1cmwgaXMgdGhlIHNhbWUsIGlmIGl0IGlzIHRoZW4gd2UgY2FuIGp1c3QgY3JlYXRlIGEgbmV3IGxheWVyCisgICAgICAgICAgICAgICAgIyB2ZXJzaW9uIGZvciB0aGlzIGxheWVyLiBPdGhlcndpc2Ugd2UgbmVlZCB0byBiYWlsIG91dC4KKyAgICAgICAgICAgICAgICBpZiBsYXllci52Y3NfdXJsICE9IHBvc3RfZGF0YVsndmNzX3VybCddOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJoaW50LWxheWVyLWV4aXN0cy13aXRoLWRpZmZlcmVudC11cmwiICwgImN1cnJlbnRfdXJsIiA6IGxheWVyLnZjc191cmwsICJjdXJyZW50X2lkIjogbGF5ZXIuaWQgfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLCB2ZXJzaW9uX2NyZWF0ZWQgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0X29yX2NyZWF0ZShsYXllcl9zb3VyY2U9bGF5ZXJfc291cmNlLCBsYXllcj1sYXllciwgcHJvamVjdD1wcmosIHVwX2JyYW5jaF9pZD11cF9icmFuY2guaWQsYnJhbmNoPXBvc3RfZGF0YVsnZ2l0X3JlZiddLCAgY29tbWl0PXBvc3RfZGF0YVsnZ2l0X3JlZiddLCBkaXJwYXRoPXBvc3RfZGF0YVsnZGlyX3BhdGgnXSkKKworICAgICAgICAgICAgaWYgbGF5ZXJfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbl9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJoaW50LWxheWVyLXZlcnNpb24tZXhpc3RzIiwgImV4aXN0aW5nX2xheWVyX3ZlcnNpb24iOiBsYXllcl92ZXJzaW9uLmlkIH0pLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICAgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnVwX2RhdGUgPSB0aW1lem9uZS5ub3coKQorICAgICAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uc2F2ZSgpCisKKyAgICAgICAgICAgICAgICAjIEFkZCB0aGUgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBmb3IgdGhpcyBuZXcgbGF5ZXIKKyAgICAgICAgICAgICAgICBpZiAocG9zdF9kYXRhLmhhc19rZXkoImxheWVyX2RlcHMiKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbl9jcmVhdGVkIGFuZAorICAgICAgICAgICAgICAgICAgICBsZW4ocG9zdF9kYXRhWyJsYXllcl9kZXBzIl0pID4gMCk6CisgICAgICAgICAgICAgICAgICAgIGZvciBsYXllcl9kZXBfaWQgaW4gcG9zdF9kYXRhWyJsYXllcl9kZXBzIl0uc3BsaXQoIiwiKToKKworICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJfZGVwX29iaiA9IExheWVyX1ZlcnNpb24ub2JqZWN0cy5nZXQocGs9bGF5ZXJfZGVwX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgTGF5ZXJWZXJzaW9uRGVwZW5kZW5jeS5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJfdmVyc2lvbj1sYXllcl92ZXJzaW9uLCBkZXBlbmRzX29uPWxheWVyX2RlcF9vYmopCisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdyBhZGQgdGhlbSB0byB0aGUgcHJvamVjdCwgd2UgY291bGQgZ2V0IGFuIGV4ZWNwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgcHJvamVjdCBub3cgY29udGFpbnMgdGhlIGV4YWN0CisgICAgICAgICAgICAgICAgICAgICAgICAjIGRlcGVuZGVuY3kgYWxyZWFkeSAobGlrZSBtb2RpZmllZCBvbiBhbm90aGVyIHBhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJqX2xheWVyLCBwcmpfbGF5ZXJfY3JlYXRlZCA9IFByb2plY3RMYXllci5vYmplY3RzLmdldF9vcl9jcmVhdGUobGF5ZXJjb21taXQ9bGF5ZXJfZGVwX29iaiwgcHJvamVjdD1wcmopCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW50ZWdyaXR5RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiSW50ZWdyaXR5IGVycm9yIHdoaWxlIHNhdmluZyBQcm9qZWN0IExheWVyczogJXMgKG9yaWdpbmFsICVzKSIgJSAoZSwgZS5fX2NhdXNlX18pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByal9sYXllcl9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyZGVwZGV0YWlsdXJsID0gcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJqLmlkLCBsYXllcl9kZXBfb2JqLnBrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnNfYWRkZWQuYXBwZW5kKHsnaWQnOiBsYXllcl9kZXBfb2JqLmlkLCAnbmFtZSc6IExheWVyLm9iamVjdHMuZ2V0KGlkPWxheWVyX2RlcF9vYmoubGF5ZXJfaWQpLm5hbWUsICdsYXllcmRldGFpbHVybCc6IGxheWVyZGVwZGV0YWlsdXJsIH0pCisKKworICAgICAgICAgICAgICAgICMgSWYgYW4gb2xkIGxheWVyIHZlcnNpb24gZXhpc3RzIGluIG91ciBwcm9qZWN0IHRoZW4gcmVtb3ZlIGl0CisgICAgICAgICAgICAgICAgZm9yIHByal9sYXllcnMgaW4gUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJqKToKKyAgICAgICAgICAgICAgICAgICAgZHVwX2xheWVyX3YgPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZmlsdGVyKGlkPXByal9sYXllcnMubGF5ZXJjb21taXRfaWQsIGxheWVyX2lkPWxheWVyLmlkKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZHVwX2xheWVyX3YpID4wIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByal9sYXllcnMuZGVsZXRlKCkKKworICAgICAgICAgICAgICAgICMgZmluYWxseSBhZGQgdGhlIGltcG9ydGVkIGxheWVyICh2ZXJzaW9uIGlkKSB0byB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgIFByb2plY3RMYXllci5vYmplY3RzLmNyZWF0ZShsYXllcmNvbW1pdD1sYXllcl92ZXJzaW9uLCBwcm9qZWN0PXByaixvcHRpb25hbD0xKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGNyZWF0ZSBhIGxheWVyIHZlcnNpb24gc28gYmFjayBvdXQgbm93IGFuZCBjbGVhbiB1cC4KKyAgICAgICAgICAgICAgICBpZiBsYXllcl9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICBsYXllci5kZWxldGUoKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKHsiZXJyb3IiOiAiVW5jYXVnaHQgZXJyb3I6IENvdWxkIG5vdCBjcmVhdGUgbGF5ZXIgdmVyc2lvbiJ9KSwgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGxheWVyZGV0YWlsdXJsID0gcmV2ZXJzZSgnbGF5ZXJkZXRhaWxzJywgYXJncz0ocHJqLmlkLCBsYXllcl92ZXJzaW9uLnBrKSkKKworICAgICAgICBqc29uX3Jlc3BvbnNlID0geyJlcnJvciI6ICJvayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydGVkX2xheWVyIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiA6IGxheWVyLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiBsYXllcl92ZXJzaW9uLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImxheWVyZGV0YWlsdXJsIjogbGF5ZXJkZXRhaWx1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwc19hZGRlZCI6IGxheWVyc19hZGRlZCB9CisKKyAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShqc29uZmlsdGVyKGpzb25fcmVzcG9uc2UpLCBjb250ZW50X3R5cGUgPSAiYXBwbGljYXRpb24vanNvbiIpCisKKyAgICBkZWYgeGhyX3VwZGF0ZWxheWVyKHJlcXVlc3QpOgorCisgICAgICAgIGRlZiBlcnJvcl9yZXNwb25zZShlcnJvcik6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6IGVycm9yfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworICAgICAgICBpZiBub3QgcmVxdWVzdC5QT1NULmhhc19rZXkoImxheWVyX3ZlcnNpb25faWQiKToKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9yZXNwb25zZSgiUGxlYXNlIHNwZWNpZnkgYSBsYXllciB2ZXJzaW9uIGlkIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbl9pZCA9IHJlcXVlc3QuUE9TVFsibGF5ZXJfdmVyc2lvbl9pZCJdCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uID0gTGF5ZXJfVmVyc2lvbi5vYmplY3RzLmdldChpZD1sYXllcl92ZXJzaW9uX2lkKQorICAgICAgICBleGNlcHQgTGF5ZXJfVmVyc2lvbi5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIkNhbm5vdCBmaW5kIGxheWVyIHRvIHVwZGF0ZSIpCisKKworICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgidmNzX3VybCIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci52Y3NfdXJsID0gcmVxdWVzdC5QT1NUWyJ2Y3NfdXJsIl0KKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoImRpcnBhdGgiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uZGlycGF0aCA9IHJlcXVlc3QuUE9TVFsiZGlycGF0aCJdCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJjb21taXQiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24uY29tbWl0ID0gcmVxdWVzdC5QT1NUWyJjb21taXQiXQorICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgidXBfYnJhbmNoIik6CisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnVwX2JyYW5jaF9pZCA9IGludChyZXF1ZXN0LlBPU1RbInVwX2JyYW5jaCJdKQorCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJhZGRfZGVwIik6CisgICAgICAgICAgICBsdmQgPSBMYXllclZlcnNpb25EZXBlbmRlbmN5KGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwgZGVwZW5kc19vbl9pZD1yZXF1ZXN0LlBPU1RbImFkZF9kZXAiXSkKKyAgICAgICAgICAgIGx2ZC5zYXZlKCkKKworICAgICAgICBpZiByZXF1ZXN0LlBPU1QuaGFzX2tleSgicm1fZGVwIik6CisgICAgICAgICAgICBybV9kZXAgPSBMYXllclZlcnNpb25EZXBlbmRlbmN5Lm9iamVjdHMuZ2V0KGxheWVyX3ZlcnNpb249bGF5ZXJfdmVyc2lvbiwgZGVwZW5kc19vbl9pZD1yZXF1ZXN0LlBPU1RbInJtX2RlcCJdKQorICAgICAgICAgICAgcm1fZGVwLmRlbGV0ZSgpCisKKyAgICAgICAgaWYgcmVxdWVzdC5QT1NULmhhc19rZXkoInN1bW1hcnkiKToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIuc3VtbWFyeSA9IHJlcXVlc3QuUE9TVFsic3VtbWFyeSJdCisgICAgICAgIGlmIHJlcXVlc3QuUE9TVC5oYXNfa2V5KCJkZXNjcmlwdGlvbiIpOgorICAgICAgICAgICAgbGF5ZXJfdmVyc2lvbi5sYXllci5kZXNjcmlwdGlvbiA9IHJlcXVlc3QuUE9TVFsiZGVzY3JpcHRpb24iXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxheWVyX3ZlcnNpb24ubGF5ZXIuc2F2ZSgpCisgICAgICAgICAgICBsYXllcl92ZXJzaW9uLnNhdmUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfcmVzcG9uc2UoIkNvdWxkIG5vdCB1cGRhdGUgbGF5ZXIgdmVyc2lvbiBlbnRyeTogJXMiICUgZSkKKworICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoeyJlcnJvciI6ICJvayIsfSksIGNvbnRlbnRfdHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIikKKworCisKKyAgICBkZWYgaW1wb3J0bGF5ZXIocmVxdWVzdCwgcGlkKToKKyAgICAgICAgdGVtcGxhdGUgPSAiaW1wb3J0bGF5ZXIuaHRtbCIKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICdwcm9qZWN0JzogUHJvamVjdC5vYmplY3RzLmdldChpZD1waWQpLAorICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVzdCwgdGVtcGxhdGUsIGNvbnRleHQpCisKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdsYXllcmRldGFpbHMuaHRtbCcpCisgICAgZGVmIGxheWVyZGV0YWlscyhyZXF1ZXN0LCBwaWQsIGxheWVyaWQpOgorICAgICAgICBwcm9qZWN0ID0gUHJvamVjdC5vYmplY3RzLmdldChwaz1waWQpCisgICAgICAgIGxheWVyX3ZlcnNpb24gPSBMYXllcl9WZXJzaW9uLm9iamVjdHMuZ2V0KHBrPWxheWVyaWQpCisKKyAgICAgICAgY29udGV4dCA9IHsgJ3Byb2plY3QnIDogcHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAnbGF5ZXJ2ZXJzaW9uJyA6IGxheWVyX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgJ2xheWVyZGVwcycgOiB7ICJsaXN0IjogWworICAgICAgICAgICAgICAgICAgICAgW3siaWQiOiB5LmlkLCAibmFtZSI6IHkubGF5ZXIubmFtZX0gZm9yIHkgaW4geC5kZXBlbmRzX29uLmdldF9lcXVpdmFsZW50c193cHJpb3JpdHkocHJvamVjdCldWzBdIGZvciB4IGluIGxheWVyX3ZlcnNpb24uZGVwZW5kZW5jaWVzLmFsbCgpXX0sCisgICAgICAgICAgICAgICAgICAgJ3Byb2plY3RsYXllcnMnOiBtYXAobGFtYmRhIHByamxheWVyOiBwcmpsYXllci5sYXllcmNvbW1pdC5pZCwgUHJvamVjdExheWVyLm9iamVjdHMuZmlsdGVyKHByb2plY3Q9cHJvamVjdCkpCisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvbnRleHQKKworCisgICAgZGVmIGdldF9wcm9qZWN0X2NvbmZpZ3ZhcnNfY29udGV4dCgpOgorICAgICAgICAjIFZhcnMgbWFuYWdlZCBvdXRzaWRlIG9mIHRoaXMgdmlldworICAgICAgICB2YXJzX21hbmFnZWQgPSB7CisgICAgICAgICAgICAnTUFDSElORScsICdCQkxBWUVSUycKKyAgICAgICAgfQorCisgICAgICAgIHZhcnNfYmxhY2tsaXN0ICA9IHsKKyAgICAgICAgICAgICdETF9EUicsJ1BBUkFMTEVMX01BS0UnLCdCQl9OVU1CRVJfVEhSRUFEUycsJ1NTVEFURV9ESVInLAorICAgICAgICAgICAgJ0JCX0RJU0tNT05fRElSUycsJ0JCX05VTUJFUl9USFJFQURTJywnQ1ZTX1BST1hZX0hPU1QnLCdDVlNfUFJPWFlfUE9SVCcsCisgICAgICAgICAgICAnRExfRElSJywnUEFSQUxMRUxfTUFLRScsJ1NTVEFURV9ESVInLCdTU1RBVEVfRElSJywnU1NUQVRFX01JUlJPUlMnLCdUTVBESVInLAorICAgICAgICAgICAgJ2FsbF9wcm94eScsJ2Z0cF9wcm94eScsJ2h0dHBfcHJveHkgJywnaHR0cHNfcHJveHknCisgICAgICAgICAgICB9CisKKyAgICAgICAgdmFyc19mc3R5cGVzICA9IHsKKyAgICAgICAgICAgICdidHJmcycsJ2NwaW8nLCdjcGlvLmd6JywnY3Bpby5sejQnLCdjcGlvLmx6bWEnLCdjcGlvLnh6JywnY3JhbWZzJywKKyAgICAgICAgICAgICdlbGYnLCdleHQyJywnZXh0Mi5iejInLCdleHQyLmd6JywnZXh0Mi5sem1hJywgJ2V4dDQnLCAnZXh0NC5neicsICdleHQzJywnZXh0My5neicsJ2hkZGltZycsCisgICAgICAgICAgICAnaXNvJywnamZmczInLCdqZmZzMi5zdW0nLCdzcXVhc2hmcycsJ3NxdWFzaGZzLWx6bycsJ3NxdWFzaGZzLXh6JywndGFyLmJ6MicsCisgICAgICAgICAgICAndGFyLmx6NCcsJ3Rhci54eicsJ3RhcnRhci5neicsJ3ViaScsJ3ViaWZzJywndm1kaycKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybih2YXJzX21hbmFnZWQsc29ydGVkKHZhcnNfZnN0eXBlcyksdmFyc19ibGFja2xpc3QpCisKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCJwcm9qZWN0Y29uZi5odG1sIikKKyAgICBkZWYgcHJvamVjdGNvbmYocmVxdWVzdCwgcGlkKToKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmogPSBQcm9qZWN0Lm9iamVjdHMuZ2V0KGlkID0gcGlkKQorICAgICAgICBleGNlcHQgUHJvamVjdC5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlTm90Rm91bmQoIjxoMT5Qcm9qZWN0IGlkICIgKyBwaWQgKyAiIGlzIHVuYXZhaWxhYmxlPC9oMT4iKQorCisgICAgICAgICMgcmVtb3ZlIGJsYWNrbGlzdCBhbmQgZXh0ZXJuYWxseSBtYW5hZ2VkIHZhcmFpYmxlcyBmcm9tIHRoaXMgbGlzdAorICAgICAgICB2YXJzX21hbmFnZWQsdmFyc19mc3R5cGVzLHZhcnNfYmxhY2tsaXN0ID0gZ2V0X3Byb2plY3RfY29uZmlndmFyc19jb250ZXh0KCkKKyAgICAgICAgY29uZmlndmFycyA9IFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmZpbHRlcihwcm9qZWN0X2lkID0gcGlkKS5hbGwoKQorICAgICAgICBmb3IgdmFyIGluIHZhcnNfbWFuYWdlZDoKKyAgICAgICAgICAgIGNvbmZpZ3ZhcnMgPSBjb25maWd2YXJzLmV4Y2x1ZGUobmFtZSA9IHZhcikKKyAgICAgICAgZm9yIHZhciBpbiB2YXJzX2JsYWNrbGlzdDoKKyAgICAgICAgICAgIGNvbmZpZ3ZhcnMgPSBjb25maWd2YXJzLmV4Y2x1ZGUobmFtZSA9IHZhcikKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgJ3Byb2plY3QnOiAgICAgICAgICBwcmosCisgICAgICAgICAgICAnY29uZmlndmFycyc6ICAgICAgIGNvbmZpZ3ZhcnMsCisgICAgICAgICAgICAndmFyc19tYW5hZ2VkJzogICAgIHZhcnNfbWFuYWdlZCwKKyAgICAgICAgICAgICd2YXJzX2ZzdHlwZXMnOiAgICAgdmFyc19mc3R5cGVzLAorICAgICAgICAgICAgJ3ZhcnNfYmxhY2tsaXN0JzogICB2YXJzX2JsYWNrbGlzdCwKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ2Rpc3RybyddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIkRJU1RSTyIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydkaXN0cm9fZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0Wydmc3R5cGVzJ10gPSAgUHJvamVjdFZhcmlhYmxlLm9iamVjdHMuZ2V0KHByb2plY3QgPSBwcmosIG5hbWUgPSAiSU1BR0VfRlNUWVBFUyIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0Wydmc3R5cGVzX2RlZmluZWQnXSA9ICIxIgorICAgICAgICBleGNlcHQgUHJvamVjdFZhcmlhYmxlLkRvZXNOb3RFeGlzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGV4dFsnaW1hZ2VfaW5zdGFsbF9hcHBlbmQnXSA9ICBQcm9qZWN0VmFyaWFibGUub2JqZWN0cy5nZXQocHJvamVjdCA9IHByaiwgbmFtZSA9ICJJTUFHRV9JTlNUQUxMX2FwcGVuZCIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydpbWFnZV9pbnN0YWxsX2FwcGVuZF9kZWZpbmVkJ10gPSAiMSIKKyAgICAgICAgZXhjZXB0IFByb2plY3RWYXJpYWJsZS5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHRbJ3BhY2thZ2VfY2xhc3NlcyddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIlBBQ0tBR0VfQ0xBU1NFUyIpLnZhbHVlCisgICAgICAgICAgICBjb250ZXh0WydwYWNrYWdlX2NsYXNzZXNfZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb250ZXh0WydzZGtfbWFjaGluZSddID0gIFByb2plY3RWYXJpYWJsZS5vYmplY3RzLmdldChwcm9qZWN0ID0gcHJqLCBuYW1lID0gIlNES01BQ0hJTkUiKS52YWx1ZQorICAgICAgICAgICAgY29udGV4dFsnc2RrX21hY2hpbmVfZGVmaW5lZCddID0gIjEiCisgICAgICAgIGV4Y2VwdCBQcm9qZWN0VmFyaWFibGUuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKyAgICBAX3RlbXBsYXRlX3JlbmRlcmVyKCdwcm9qZWN0YnVpbGRzLmh0bWwnKQorICAgIGRlZiBwcm9qZWN0YnVpbGRzKHJlcXVlc3QsIHBpZCk6CisgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQoaWQgPSBwaWQpCisKKyAgICAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIlBPU1QiOgorICAgICAgICAgICAgIyBwcm9jZXNzIGFueSBidWlsZCByZXF1ZXN0CisKKyAgICAgICAgICAgIGlmICdidWlsZENhbmNlbCcgaW4gcmVxdWVzdC5QT1NUOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJlcXVlc3QuUE9TVFsnYnVpbGRDYW5jZWwnXS5zdHJpcCgpLnNwbGl0KCIgIik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyID0gQnVpbGRSZXF1ZXN0Lm9iamVjdHMuc2VsZWN0X2Zvcl91cGRhdGUoKS5nZXQocHJvamVjdCA9IHByaiwgcGsgPSBpLCBzdGF0ZV9fbHRlID0gQnVpbGRSZXF1ZXN0LlJFUV9RVUVVRUQpCisgICAgICAgICAgICAgICAgICAgICAgICBici5zdGF0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfREVMRVRFRAorICAgICAgICAgICAgICAgICAgICAgICAgYnIuc2F2ZSgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCdWlsZFJlcXVlc3QuRG9lc05vdEV4aXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiAnYnVpbGREZWxldGUnIGluIHJlcXVlc3QuUE9TVDoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXF1ZXN0LlBPU1RbJ2J1aWxkRGVsZXRlJ10uc3RyaXAoKS5zcGxpdCgiICIpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiciA9IEJ1aWxkUmVxdWVzdC5vYmplY3RzLnNlbGVjdF9mb3JfdXBkYXRlKCkuZ2V0KHByb2plY3QgPSBwcmosIHBrID0gaSwgc3RhdGVfX2x0ZSA9IEJ1aWxkUmVxdWVzdC5SRVFfREVMRVRFRCkuZGVsZXRlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEJ1aWxkUmVxdWVzdC5Eb2VzTm90RXhpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGlmICd0YXJnZXRzJyBpbiByZXF1ZXN0LlBPU1Q6CisgICAgICAgICAgICAgICAgUHJvamVjdFRhcmdldC5vYmplY3RzLmZpbHRlcihwcm9qZWN0ID0gcHJqKS5kZWxldGUoKQorICAgICAgICAgICAgICAgIHMgPSBzdHIocmVxdWVzdC5QT1NUWyd0YXJnZXRzJ10pCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gcy50cmFuc2xhdGUoTm9uZSwgIjslfFwiIikuc3BsaXQoIiAiKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIjoiIGluIHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHRhc2sgPSB0LnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSAiIgorICAgICAgICAgICAgICAgICAgICBQcm9qZWN0VGFyZ2V0Lm9iamVjdHMuY3JlYXRlKHByb2plY3QgPSBwcmosIHRhcmdldCA9IHRhcmdldCwgdGFzayA9IHRhc2spCisKKyAgICAgICAgICAgICAgICBiciA9IHByai5zY2hlZHVsZV9idWlsZCgpCisKKworICAgICAgICBxdWVyeXNldCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKG91dGNvbWVfX2x0ZSA9IEJ1aWxkLklOX1BST0dSRVNTKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRleHQsIHBhZ2VzaXplLCBvcmRlcmJ5ID0gX2J1aWxkX2xpc3RfaGVscGVyKHJlcXVlc3QsIHF1ZXJ5c2V0KQorICAgICAgICBleGNlcHQgUmVkaXJlY3RFeGNlcHRpb24gYXMgcmU6CisgICAgICAgICAgICAjIHJld3JpdGUgdGhlIFJlZGlyZWN0RXhjZXB0aW9uIHdpdGggb3VyIGN1cnJlbnQgdXJsIGluZm9ybWF0aW9uCisgICAgICAgICAgICByZS52aWV3ID0gcmVzb2x2ZShyZXF1ZXN0LnBhdGhfaW5mbykudXJsX25hbWUKKyAgICAgICAgICAgIHJlLm9rd2FyZ3MgPSB7InBpZCIgOiBwaWR9CisgICAgICAgICAgICByYWlzZSByZQorCisgICAgICAgIGNvbnRleHRbJ3Byb2plY3QnXSA9IHByagorICAgICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorCisgICAgICAgIHJldHVybiBjb250ZXh0CisKKworICAgIGRlZiBfZmlsZV9uYW1lX2Zvcl9hcnRpZmFjdChiLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCk6CisgICAgICAgIGZpbGVfbmFtZSA9IE5vbmUKKyAgICAgICAgIyBUYXJnZXRfSW1hZ2VfRmlsZSBmaWxlX25hbWUKKyAgICAgICAgaWYgYXJ0aWZhY3RfdHlwZSA9PSAiaW1hZ2VmaWxlIjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZ2V0KHRhcmdldF9fYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5maWxlX25hbWUKKworICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gImJ1aWxkYXJ0aWZhY3QiOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gQnVpbGRBcnRpZmFjdC5vYmplY3RzLmdldChidWlsZCA9IGIsIHBrID0gYXJ0aWZhY3RfaWQpLmZpbGVfbmFtZQorCisgICAgICAgIGVsaWYgYXJ0aWZhY3RfdHlwZSA9PSAgImxpY2Vuc2VtYW5pZmVzdCI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBUYXJnZXQub2JqZWN0cy5nZXQoYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5saWNlbnNlX21hbmlmZXN0X3BhdGgKKworICAgICAgICBlbGlmIGFydGlmYWN0X3R5cGUgPT0gInRhc2tsb2dmaWxlIjoKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IFRhc2sub2JqZWN0cy5nZXQoYnVpbGQgPSBiLCBwayA9IGFydGlmYWN0X2lkKS5sb2dmaWxlCisKKyAgICAgICAgZWxpZiBhcnRpZmFjdF90eXBlID09ICJsb2dtZXNzYWdlZmlsZSI6CisgICAgICAgICAgICBmaWxlX25hbWUgPSBMb2dNZXNzYWdlLm9iamVjdHMuZ2V0KGJ1aWxkID0gYiwgcGsgPSBhcnRpZmFjdF9pZCkucGF0aG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRklYTUU6IGFydGlmYWN0IHR5cGUgJXMgbm90IGltcGxlbWVudGVkIiAlIChhcnRpZmFjdF90eXBlKSkKKworICAgICAgICByZXR1cm4gZmlsZV9uYW1lCisKKworICAgIGRlZiBidWlsZF9hcnRpZmFjdChyZXF1ZXN0LCBidWlsZF9pZCwgYXJ0aWZhY3RfdHlwZSwgYXJ0aWZhY3RfaWQpOgorICAgICAgICBpZiBhcnRpZmFjdF90eXBlIGluIFsiY29va2VybG9nIl06CisgICAgICAgICAgICAjIHRoZXNlIGFydGlmYWN0cyBhcmUgc2F2ZWQgYWZ0ZXIgYnVpbGRpbmcsIHNvIHRoZXkgYXJlIG9uIHRoZSBzZXJ2ZXIgaXRzZWxmCisgICAgICAgICAgICBkZWYgX21pbWV0eXBlX2Zvcl9hcnRpZmFjdChwYXRoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBtYWdpYworCisgICAgICAgICAgICAgICAgICAgICMgZmFpciB3YXJuaW5nOiB0aGlzIGlzIGEgbWVzczsgdGhlcmUgYXJlIG11bHRpcGxlIGNvbXBldGluZyBhbmQgaW5jb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgICMgbWFnaWMgbW9kdWxlcyBmbG9hdGluZyBhcm91bmQsIHNvIHdlIHRyeSBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiBjb21iaW5hdGlvbnMKKworICAgICAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHVidW50dSdzIHB5dGhvbi1tYWdpYyA1LjQKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5vcGVuKG1hZ2ljLk1BR0lDX01JTUVfVFlQRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0ubG9hZCgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICB0cnk6ICAgICMgd2UgdHJ5IHB5dGhvbi1tYWdpYyAwLjQuNgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG1hZ2ljLk1hZ2ljKG1hZ2ljLk1BR0lDX01JTUUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5mcm9tX2ZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIHRyeTogICAgIyB3ZSB0cnkgcGlwIGZpbGVtYWdpYyAxLjYKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtYWdpYy5NYWdpYyhmbGFncz1tYWdpYy5NQUdJQ19NSU1FX1RZUEUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbS5pZF9maWxlbmFtZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJiaW5hcnkvb2N0ZXQtc3RyZWFtIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgbWF0Y2ggY29kZSB3aXRoIHJ1bmJ1aWxkcy5Db21tYW5kLmFyY2hpdmUoKQorICAgICAgICAgICAgICAgIGJ1aWxkX2FydGlmYWN0X3N0b3JhZ2VfZGlyID0gb3MucGF0aC5qb2luKFRvYXN0ZXJTZXR0aW5nLm9iamVjdHMuZ2V0KG5hbWU9IkFSVElGQUNUU19TVE9SQUdFX0RJUiIpLnZhbHVlLCAiJWQiICUgaW50KGJ1aWxkX2lkKSkKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oYnVpbGRfYXJ0aWZhY3Rfc3RvcmFnZV9kaXIsICJjb29rZXJfbG9nLnR4dCIpCisKKyAgICAgICAgICAgICAgICBmc29jayA9IG9wZW4oZmlsZV9uYW1lLCAiciIpCisgICAgICAgICAgICAgICAgY29udGVudF90eXBlPV9taW1ldHlwZV9mb3JfYXJ0aWZhY3QoZmlsZV9uYW1lKQorCisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBIdHRwUmVzcG9uc2UoZnNvY2ssIGNvbnRlbnRfdHlwZSA9IGNvbnRlbnRfdHlwZSkKKworICAgICAgICAgICAgICAgIHJlc3BvbnNlWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9JyArIG9zLnBhdGguYmFzZW5hbWUoZmlsZV9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkJyA6IEJ1aWxkLm9iamVjdHMuZ2V0KHBrID0gYnVpbGRfaWQpLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJ1bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIiwgY29udGV4dCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyByZXRyaWV2ZSB0aGUgYXJ0aWZhY3QgZGlyZWN0bHkgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHJldHVybiBfZ2V0X2JlX2FydGlmYWN0KHJlcXVlc3QsIGJ1aWxkX2lkLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCkKKworCisgICAgZGVmIF9nZXRfYmVfYXJ0aWZhY3QocmVxdWVzdCwgYnVpbGRfaWQsIGFydGlmYWN0X3R5cGUsIGFydGlmYWN0X2lkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYiA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrPWJ1aWxkX2lkKQorICAgICAgICAgICAgaWYgYi5idWlsZHJlcXVlc3QgaXMgTm9uZSBvciBiLmJ1aWxkcmVxdWVzdC5lbnZpcm9ubWVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQXJ0aWZhY3Qgbm90IGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgKG1pc3NpbmcgYnVpbGQgcmVxdWVzdCBvciBidWlsZCBlbnZpcm9ubWVudCkiKQorCisgICAgICAgICAgICBmaWxlX25hbWUgPSBfZmlsZV9uYW1lX2Zvcl9hcnRpZmFjdChiLCBhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCkKKyAgICAgICAgICAgIGZzb2NrID0gTm9uZQorICAgICAgICAgICAgY29udGVudF90eXBlPSdhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcKKworICAgICAgICAgICAgaWYgZmlsZV9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgaGFuZGxlIGFydGlmYWN0ICVzIGlkICVzIiAlIChhcnRpZmFjdF90eXBlLCBhcnRpZmFjdF9pZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGIuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50LmdldF9hcnRpZmFjdF90eXBlKGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICBmc29jayA9IGIuYnVpbGRyZXF1ZXN0LmVudmlyb25tZW50LmdldF9hcnRpZmFjdChmaWxlX25hbWUpCisgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlX25hbWUpICMgd2UgYXNzdW1lIHRoYXQgdGhlIGJ1aWxkIGVudmlyb25tZW50IHN5c3RlbSBoYXMgdGhlIHNhbWUgcGF0aCBjb252ZW50aW9ucyBhcyBob3N0CisKKyAgICAgICAgICAgIHJlc3BvbnNlID0gSHR0cFJlc3BvbnNlKGZzb2NrLCBjb250ZW50X3R5cGUgPSBjb250ZW50X3R5cGUpCisKKyAgICAgICAgICAgICMgcmV0dXJucyBhIGZpbGUgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIHJlc3BvbnNlWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnYXR0YWNobWVudDsgZmlsZW5hbWU9JyArIGZpbGVfbmFtZQorICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAnYnVpbGQnIDogQnVpbGQub2JqZWN0cy5nZXQocGsgPSBidWlsZF9pZCksCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyKHJlcXVlc3QsICJ1bmF2YWlsYWJsZV9hcnRpZmFjdC5odG1sIiwgY29udGV4dCkKKworCisKKworICAgIEBfdGVtcGxhdGVfcmVuZGVyZXIoInByb2plY3RzLmh0bWwiKQorICAgIGRlZiBwcm9qZWN0cyhyZXF1ZXN0KToKKyAgICAgICAgKHBhZ2VzaXplLCBvcmRlcmJ5KSA9IF9nZXRfcGFyYW1ldGVyc192YWx1ZXMocmVxdWVzdCwgMTAsICd1cGRhdGVkOi0nKQorICAgICAgICBtYW5kYXRvcnlfcGFyYW1ldGVycyA9IHsgJ2NvdW50JzogcGFnZXNpemUsICAncGFnZScgOiAxLCAnb3JkZXJieScgOiBvcmRlcmJ5IH0KKyAgICAgICAgcmV0dmFsID0gX3ZlcmlmeV9wYXJhbWV0ZXJzKCByZXF1ZXN0LkdFVCwgbWFuZGF0b3J5X3BhcmFtZXRlcnMgKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICByYWlzZSBSZWRpcmVjdEV4Y2VwdGlvbiggJ2FsbC1wcm9qZWN0cycsIHJlcXVlc3QuR0VULCBtYW5kYXRvcnlfcGFyYW1ldGVycyApCisKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gUHJvamVjdC5vYmplY3RzLmFsbCgpCisKKyAgICAgICAgIyBhbm5vdGF0ZSBlYWNoIHByb2plY3Qgd2l0aCBpdHMgbnVtYmVyIG9mIGJ1aWxkcworICAgICAgICBxdWVyeXNldF9hbGwgPSBxdWVyeXNldF9hbGwuYW5ub3RhdGUobnVtX2J1aWxkcz1Db3VudCgnYnVpbGQnKSkKKworICAgICAgICAjIGV4Y2x1ZGUgdGhlIGNvbW1hbmQgbGluZSBidWlsZHMgcHJvamVjdCBpZiBpdCBoYXMgbm8gYnVpbGRzCisgICAgICAgIHFfZGVmYXVsdF93aXRoX2J1aWxkcyA9IFEoaXNfZGVmYXVsdD1UcnVlKSAmIFEobnVtX2J1aWxkc19fZ3Q9MCkKKyAgICAgICAgcXVlcnlzZXRfYWxsID0gcXVlcnlzZXRfYWxsLmZpbHRlcihRKGlzX2RlZmF1bHQ9RmFsc2UpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2RlZmF1bHRfd2l0aF9idWlsZHMpCisKKyAgICAgICAgIyBib2lsZXJwbGF0ZSBjb2RlIHRoYXQgdGFrZXMgYSByZXF1ZXN0IGZvciBhbiBvYmplY3QgdHlwZSBhbmQgcmV0dXJucyBhIHF1ZXJ5c2V0CisgICAgICAgICMgZm9yIHRoYXQgb2JqZWN0IHR5cGUuIGNvcHlwYXN0YSBmb3IgYWxsIG5lZWRlZCB0YWJsZSBzZWFyY2hlcworICAgICAgICAoZmlsdGVyX3N0cmluZywgc2VhcmNoX3Rlcm0sIG9yZGVyaW5nX3N0cmluZykgPSBfc2VhcmNoX3R1cGxlKHJlcXVlc3QsIFByb2plY3QpCisgICAgICAgIHF1ZXJ5c2V0X3dpdGhfc2VhcmNoID0gX2dldF9xdWVyeXNldChQcm9qZWN0LCBxdWVyeXNldF9hbGwsIE5vbmUsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICctdXBkYXRlZCcpCisgICAgICAgIHF1ZXJ5c2V0ID0gX2dldF9xdWVyeXNldChQcm9qZWN0LCBxdWVyeXNldF9hbGwsIGZpbHRlcl9zdHJpbmcsIHNlYXJjaF90ZXJtLCBvcmRlcmluZ19zdHJpbmcsICctdXBkYXRlZCcpCisKKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgb2JqZWN0cyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZTsgcHJvamVjdHMgYSBwYWdpbmF0b3IgYW5kIGdldHMgYSBwYWdlIHJhbmdlIHRvIGRpc3BsYXkKKyAgICAgICAgcHJvamVjdF9pbmZvID0gX2J1aWxkX3BhZ2VfcmFuZ2UoUGFnaW5hdG9yKHF1ZXJ5c2V0LCBwYWdlc2l6ZSksIHJlcXVlc3QuR0VULmdldCgncGFnZScsIDEpKQorCisgICAgICAgICMgYWRkIGZpZWxkcyBuZWVkZWQgaW4gSlNPTiBkdW1wcyBmb3IgQVBJIGNhbGwgc3VwcG9ydAorICAgICAgICBmb3IgcCBpbiBwcm9qZWN0X2luZm8ub2JqZWN0X2xpc3Q6CisgICAgICAgICAgICBwLmlkID0gcC5waworICAgICAgICAgICAgcC5wcm9qZWN0UGFnZVVybCA9IHJldmVyc2UoJ3Byb2plY3QnLCBhcmdzPShwLmlkLCkpCisgICAgICAgICAgICBwLmxheWVyc1R5cGVBaGVhZFVybCA9IHJldmVyc2UoJ3hocl9sYXllcnN0eXBlYWhlYWQnLCBhcmdzPShwLmlkLCkpCisgICAgICAgICAgICBwLnJlY2lwZXNUeXBlQWhlYWRVcmwgPSByZXZlcnNlKCd4aHJfcmVjaXBlc3R5cGVhaGVhZCcsIGFyZ3M9KHAuaWQsKSkKKyAgICAgICAgICAgIHAucHJvamVjdEJ1aWxkc1VybCA9IHJldmVyc2UoJ3Byb2plY3RidWlsZHMnLCBhcmdzPShwLmlkLCkpCisKKyAgICAgICAgIyBidWlsZCB2aWV3LXNwZWNpZmljIGluZm9ybWF0aW9uOyB0aGlzIGlzIHJlbmRlcmVkIHNwZWNpZmljYWxseSBpbiB0aGUgYnVpbGRzIHBhZ2UsIGF0IHRoZSB0b3Agb2YgdGhlIHBhZ2UgKGkuZS4gUmVjZW50IGJ1aWxkcykKKyAgICAgICAgYnVpbGRfbXJ1ID0gX2dldF9sYXRlc3RfYnVpbGRzKCkKKworICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgcHJvamVjdCdzIGJ1aWxkIHRhcmdldCBzdHJpbmdzCisgICAgICAgIGZzdHlwZXNfbWFwID0ge307CisgICAgICAgIGZvciBwcm9qZWN0IGluIHByb2plY3RfaW5mbzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJnZXRzID0gVGFyZ2V0Lm9iamVjdHMuZmlsdGVyKCBidWlsZF9pZCA9IHByb2plY3QuZ2V0X2xhc3RfYnVpbGRfaWQoKSApCisgICAgICAgICAgICAgICAgY29tbWEgPSAiIjsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zID0gIiI7CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3QgdC5pc19pbWFnZSApOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdGlmID0gVGFyZ2V0X0ltYWdlX0ZpbGUub2JqZWN0cy5maWx0ZXIoIHRhcmdldF9pZCA9IHQuaWQgKQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB0aWY6CisgICAgICAgICAgICAgICAgICAgICAgICBzPXJlLnN1YignLip0YXIuYnoyJywgJ3Rhci5iejInLCBpLmZpbGVfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMgPT0gaS5maWxlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcz1yZS5zdWIoJy4qXC4nLCAnJywgaS5maWxlX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBOb25lID09IHJlLnNlYXJjaChzLGV4dGVuc2lvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMgKz0gY29tbWEgKyBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWEgPSAiLCAiCisgICAgICAgICAgICAgICAgZnN0eXBlc19tYXBbcHJvamVjdC5pZF09ZXh0ZW5zaW9ucworICAgICAgICAgICAgZXhjZXB0IChUYXJnZXQuRG9lc05vdEV4aXN0LEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgIGZzdHlwZXNfbWFwW3Byb2plY3QuaWRdPXByb2plY3QuZ2V0X2xhc3RfaW1nZmlsZXMKKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdtcnUnIDogYnVpbGRfbXJ1LAorCisgICAgICAgICAgICAgICAgJ29iamVjdHMnIDogcHJvamVjdF9pbmZvLAorICAgICAgICAgICAgICAgICdvYmplY3RuYW1lJyA6ICJwcm9qZWN0cyIsCisgICAgICAgICAgICAgICAgJ2RlZmF1bHRfb3JkZXJieScgOiAnaWQ6LScsCisgICAgICAgICAgICAgICAgJ3NlYXJjaF90ZXJtJyA6IHNlYXJjaF90ZXJtLAorICAgICAgICAgICAgICAgICd0b3RhbF9jb3VudCcgOiBxdWVyeXNldF93aXRoX3NlYXJjaC5jb3VudCgpLAorICAgICAgICAgICAgICAgICdmc3R5cGVzJyA6IGZzdHlwZXNfbWFwLAorICAgICAgICAgICAgICAgICdidWlsZF9GQUlMRUQnIDogQnVpbGQuRkFJTEVELAorICAgICAgICAgICAgICAgICdidWlsZF9TVUNDRUVERUQnIDogQnVpbGQuU1VDQ0VFREVELAorICAgICAgICAgICAgICAgICd0YWJsZWNvbHMnOiBbCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdQcm9qZWN0JywKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAibmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJuYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAnbmFtZScsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdMYXN0IGFjdGl2aXR5IG9uJywKKyAgICAgICAgICAgICAgICAgICAgJ2NsY2xhc3MnOiAndXBkYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCc6ICJTaG93cyB0aGUgc3RhcnRpbmcgZGF0ZSBhbmQgdGltZSBvZiB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkLiBJZiB0aGUgcHJvamVjdCBoYXMgbm8gYnVpbGRzLCBpdCBzaG93cyB0aGUgZGF0ZSB0aGUgcHJvamVjdCB3YXMgY3JlYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmZpZWxkJzogX2dldF90b2dnbGVfb3JkZXIocmVxdWVzdCwgInVwZGF0ZWQiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyaWNvbic6X2dldF90b2dnbGVfb3JkZXJfaWNvbihyZXF1ZXN0LCAidXBkYXRlZCIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJrZXknIDogJ3VwZGF0ZWQnLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnUmVsZWFzZScsCisgICAgICAgICAgICAgICAgICAgICdxaGVscCcgOiAiVGhlIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyZmllbGQnOiBfZ2V0X3RvZ2dsZV9vcmRlcihyZXF1ZXN0LCAicmVsZWFzZV9fbmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAnb3JkZXJpY29uJzpfZ2V0X3RvZ2dsZV9vcmRlcl9pY29uKHJlcXVlc3QsICJyZWxlYXNlX19uYW1lIiksCisgICAgICAgICAgICAgICAgICAgICdvcmRlcmtleScgOiAncmVsZWFzZV9fbmFtZScsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdNYWNoaW5lJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRoZSBoYXJkd2FyZSBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHRoZSBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ051bWJlciBvZiBidWlsZHMnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiSG93IG1hbnkgYnVpbGRzIGhhdmUgYmVlbiBydW4gZm9yIHRoZSBwcm9qZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ0xhc3QgYnVpbGQgb3V0Y29tZScsICdjbGNsYXNzJzogJ2xvdXRjb21lJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIlRlbGxzIHlvdSBpZiB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3IgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1JlY2lwZScsICdjbGNsYXNzJzogJ2x0YXJnZXQnLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIGxhc3QgcmVjaXBlIHRoYXQgd2FzIGJ1aWx0IGluIHRoaXMgcHJvamVjdCIsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6ICdFcnJvcnMnLCAnY2xjbGFzcyc6ICdsZXJyb3JzJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IGVycm9ycyB3ZXJlIGVuY291bnRlcmVkIGR1cmluZyB0aGUgbGFzdCBwcm9qZWN0IGJ1aWxkIChpZiBhbnkpIiwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyduYW1lJzogJ1dhcm5pbmdzJywgJ2NsY2xhc3MnOiAnbHdhcm5pbmdzJywKKyAgICAgICAgICAgICAgICAgICAgJ3FoZWxwJzogIkhvdyBtYW55IHdhcm5pZ25zIHdlcmUgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBsYXN0IHByb2plY3QgYnVpbGQgKGlmIGFueSkiLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7J25hbWUnOiAnSW1hZ2UgZmlsZXMnLCAnY2xjbGFzcyc6ICdsaW1hZ2VmaWxlcycsICdoaWRkZW4nOiAxLAorICAgICAgICAgICAgICAgICAgICAncWhlbHAnOiAiVGhlIHJvb3QgZmlsZSBzeXN0ZW0gdHlwZXMgcHJvZHVjZWQgYnkgdGhlIGxhc3QgcHJvamVjdCBidWlsZCIsCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKworICAgICAgICBfc2V0X3BhcmFtZXRlcnNfdmFsdWVzKHBhZ2VzaXplLCBvcmRlcmJ5LCByZXF1ZXN0KQorICAgICAgICByZXR1cm4gY29udGV4dApkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3dpZGdldHMucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJndWkvd2lkZ2V0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVyZ3VpL3dpZGdldHMucHkKQEAgLTAsMCArMSw0MTEgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby52aWV3cy5nZW5lcmljIGltcG9ydCBWaWV3LCBUZW1wbGF0ZVZpZXcKK2Zyb20gZGphbmdvLnNob3J0Y3V0cyBpbXBvcnQgSHR0cFJlc3BvbnNlCitmcm9tIGRqYW5nby5odHRwIGltcG9ydCBIdHRwUmVzcG9uc2VCYWRSZXF1ZXN0Citmcm9tIGRqYW5nby5jb3JlIGltcG9ydCBzZXJpYWxpemVycworZnJvbSBkamFuZ28uY29yZS5jYWNoZSBpbXBvcnQgY2FjaGUKK2Zyb20gZGphbmdvLmNvcmUucGFnaW5hdG9yIGltcG9ydCBQYWdpbmF0b3IsIEVtcHR5UGFnZQorZnJvbSBkamFuZ28uZGIubW9kZWxzIGltcG9ydCBRCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IFByb2plY3QsIFByb2plY3RMYXllciwgTGF5ZXJfVmVyc2lvbgorZnJvbSBkamFuZ28udGVtcGxhdGUgaW1wb3J0IENvbnRleHQsIFRlbXBsYXRlCitmcm9tIGRqYW5nby5jb3JlLnNlcmlhbGl6ZXJzLmpzb24gaW1wb3J0IERqYW5nb0pTT05FbmNvZGVyCitmcm9tIGRqYW5nby5jb3JlLmV4Y2VwdGlvbnMgaW1wb3J0IEZpZWxkRXJyb3IKK2Zyb20gZGphbmdvLmNvbmYudXJscyBpbXBvcnQgdXJsLCBwYXR0ZXJucworCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBqc29uCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHJlCisKK2Zyb20gdG9hc3Rlcmd1aS52aWV3cyBpbXBvcnQgb2JqdG9qc29uCisKK2NsYXNzIFRvYXN0ZXJUYWJsZShUZW1wbGF0ZVZpZXcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUb2FzdGVyVGFibGUsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgaWYgJ3RlbXBsYXRlX25hbWUnIGluIGt3YXJnczoKKyAgICAgICAgICAgIHNlbGYudGVtcGxhdGVfbmFtZSA9IGt3YXJnc1sndGVtcGxhdGVfbmFtZSddCisgICAgICAgIHNlbGYudGl0bGUgPSBOb25lCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBOb25lCisgICAgICAgIHNlbGYuY29sdW1ucyA9IFtdCisgICAgICAgIHNlbGYuZmlsdGVycyA9IHt9CisgICAgICAgIHNlbGYudG90YWxfY291bnQgPSAwCisgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmEgPSB7fQorICAgICAgICBzZWxmLmZpbHRlcl9hY3Rpb25zID0ge30KKyAgICAgICAgc2VsZi5lbXB0eV9zdGF0ZSA9ICJTb3JyeSAtIG5vIGRhdGEgZm91bmQiCisgICAgICAgIHNlbGYuZGVmYXVsdF9vcmRlcmJ5ID0gIiIKKworICAgICAgICAjIGFkZCB0aGUgImlkIiBjb2x1bW4sIHVuZGlzcGxheWFibGUsIGJ5IGRlZmF1bHQKKyAgICAgICAgc2VsZi5hZGRfY29sdW1uKHRpdGxlPSJJZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iaWQiKQorCisKKyAgICBkZWYgZ2V0KHNlbGYsIHJlcXVlc3QsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHJlcXVlc3QuR0VULmdldCgnZm9ybWF0JywgTm9uZSkgPT0gJ2pzb24nOgorCisgICAgICAgICAgICBzZWxmLnNldHVwX3F1ZXJ5c2V0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgICMgUHV0IHRoZSBwcm9qZWN0IGlkIGludG8gdGhlIGNvbnRleHQgZm9yIHRoZSBzdGF0aWNfZGF0YV90ZW1wbGF0ZQorICAgICAgICAgICAgaWYgJ3BpZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGljX2NvbnRleHRfZXh0cmFbJ3BpZCddID0ga3dhcmdzWydwaWQnXQorCisgICAgICAgICAgICBjbWQgPSByZXF1ZXN0LkdFVC5nZXQoJ2NtZCcsIE5vbmUpCisgICAgICAgICAgICBpZiBjbWQgYW5kICdmaWx0ZXJpbmZvJyBpbiBjbWQ6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2ZpbHRlcl9pbmZvKHJlcXVlc3QsICoqa3dhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIG5vIGNtZCBpcyBzcGVjaWZpZWQgd2UgZ2l2ZSB5b3UgdGhlIHRhYmxlIGRhdGEKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShyZXF1ZXN0LCAqKmt3YXJncykKKworICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShkYXRhLCBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIHJldHVybiBzdXBlcihUb2FzdGVyVGFibGUsIHNlbGYpLmdldChyZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZ2V0X2ZpbHRlcl9pbmZvKHNlbGYsIHJlcXVlc3QsICoqa3dhcmdzKToKKyAgICAgICAgZGF0YSA9IE5vbmUKKworICAgICAgICBzZWxmLnNldHVwX2ZpbHRlcnMoKiprd2FyZ3MpCisKKyAgICAgICAgc2VhcmNoID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQorICAgICAgICBpZiBzZWFyY2g6CisgICAgICAgICAgICBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2gpCisKKyAgICAgICAgbmFtZSA9IHJlcXVlc3QuR0VULmdldCgibmFtZSIsIE5vbmUpCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKHNlbGYuZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudD0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPURqYW5nb0pTT05FbmNvZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGFjdGlvbnMgaW4gc2VsZi5maWx0ZXJzW25hbWVdWydmaWx0ZXJfYWN0aW9ucyddOgorICAgICAgICAgICAgICAgIGFjdGlvbnNbJ2NvdW50J10gPSBzZWxmLmZpbHRlcl9hY3Rpb25zW2FjdGlvbnNbJ25hbWUnXV0oY291bnRfb25seT1UcnVlKQorCisgICAgICAgICAgICAjIEFkZCB0aGUgIkFsbCIgaXRlbXMgZmlsdGVyIGFjdGlvbgorICAgICAgICAgICAgc2VsZi5maWx0ZXJzW25hbWVdWydmaWx0ZXJfYWN0aW9ucyddLmluc2VydCgwLCB7CisgICAgICAgICAgICAgICAgJ25hbWUnIDogJ2FsbCcsCisgICAgICAgICAgICAgICAgJ3RpdGxlJyA6ICdBbGwnLAorICAgICAgICAgICAgICAgICdjb3VudCcgOiBzZWxmLnF1ZXJ5c2V0LmNvdW50KCksCisgICAgICAgICAgICB9KQorCisgICAgICAgICAgICBkYXRhID0ganNvbi5kdW1wcyhzZWxmLmZpbHRlcnNbbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1EamFuZ29KU09ORW5jb2RlcikKKworICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzZXR1cF9jb2x1bW5zKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIGNvbHVtbnMgIiIiCisgICAgICAgIHBhc3MKKyAgICBkZWYgc2V0dXBfZmlsdGVycyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiIgZnVuY3Rpb24gdG8gaW1wbGVtZW50IGluIHRoZSBzdWJjbGFzcyB3aGljaCBzZXRzIHVwIHRoZSBmaWx0ZXJzICIiIgorICAgICAgICBwYXNzCisgICAgZGVmIHNldHVwX3F1ZXJ5c2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgaW4gdGhlIHN1YmNsYXNzIHdoaWNoIHNldHMgdXAgdGhlIHF1ZXJ5c2V0IiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfZmlsdGVyKHNlbGYsIG5hbWUsIHRpdGxlLCBmaWx0ZXJfYWN0aW9ucyk6CisgICAgICAgICIiIkFkZCBhIGZpbHRlciB0byB0aGUgdGFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG5hbWUgKHN0cik6IFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmaWx0ZXIuCisgICAgICAgICAgICB0aXRsZSAoc3RyKTogVGl0bGUgb2YgdGhlIGZpbHRlci4KKyAgICAgICAgICAgIGZpbHRlcl9hY3Rpb25zOiBBY3Rpb25zIGZvciBhbGwgdGhlIGZpbHRlcnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmZpbHRlcnNbbmFtZV0gPSB7CisgICAgICAgICAgJ3RpdGxlJyA6IHRpdGxlLAorICAgICAgICAgICdmaWx0ZXJfYWN0aW9ucycgOiBmaWx0ZXJfYWN0aW9ucywKKyAgICAgICAgfQorCisgICAgZGVmIG1ha2VfZmlsdGVyX2FjdGlvbihzZWxmLCBuYW1lLCB0aXRsZSwgYWN0aW9uX2Z1bmN0aW9uKToKKyAgICAgICAgIiIiIFV0aWxpdHkgdG8gbWFrZSBhIGZpbHRlcl9hY3Rpb24gIiIiCisKKyAgICAgICAgYWN0aW9uID0geworICAgICAgICAgICd0aXRsZScgOiB0aXRsZSwKKyAgICAgICAgICAnbmFtZScgOiBuYW1lLAorICAgICAgICB9CisKKyAgICAgICAgc2VsZi5maWx0ZXJfYWN0aW9uc1tuYW1lXSA9IGFjdGlvbl9mdW5jdGlvbgorCisgICAgICAgIHJldHVybiBhY3Rpb24KKworICAgIGRlZiBhZGRfY29sdW1uKHNlbGYsIHRpdGxlPSIiLCBoZWxwX3RleHQ9IiIsCisgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlPUZhbHNlLCBoaWRlYWJsZT1UcnVlLCBoaWRkZW49RmFsc2UsCisgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZT0iIiwgZmlsdGVyX25hbWU9Tm9uZSwgc3RhdGljX2RhdGFfbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlPVRydWUsIGNvbXB1dGF0aW9uPU5vbmUsCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2RhdGFfdGVtcGxhdGU9Tm9uZSk6CisgICAgICAgICIiIkFkZCBhIGNvbHVtbiB0byB0aGUgdGFibGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRpdGxlIChzdHIpOiBUaXRsZSBmb3IgdGhlIHRhYmxlIGhlYWRlcgorICAgICAgICAgICAgaGVscF90ZXh0IChzdHIpOiBPcHRpb25hbCBoZWxwIHRleHQgdG8gZGVzY3JpYmUgdGhlIGNvbHVtbgorICAgICAgICAgICAgb3JkZXJhYmxlIChib29sKTogV2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSBvcmRlcmVkLgorICAgICAgICAgICAgICAgIFdlIG9yZGVyIG9uIHRoZSBmaWVsZF9uYW1lLgorICAgICAgICAgICAgaGlkZWFibGUgKGJvb2wpOiBXaGV0aGVyIHRoZSB1c2VyIGNhbiBoaWRlIHRoZSBjb2x1bW4KKyAgICAgICAgICAgIGhpZGRlbiAoYm9vbCk6IFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBkZWZhdWx0IGhpZGRlbgorICAgICAgICAgICAgZmllbGRfbmFtZSAoc3RyIG9yIGxpc3QpOiBmaWVsZChzKSByZXF1aXJlZCBmb3IgdGhpcyBjb2x1bW4ncyBkYXRhCisgICAgICAgICAgICBzdGF0aWNfZGF0YV9uYW1lIChzdHIsIG9wdGlvbmFsKTogVGhlIGNvbHVtbidzIG1haW4gaWRlbnRpZmllcgorICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgcmVwbGFjZSB0aGUgZmllbGRfbmFtZS4KKyAgICAgICAgICAgIHN0YXRpY19kYXRhX3RlbXBsYXRlKHN0ciwgb3B0aW9uYWwpOiBUaGUgdGVtcGxhdGUgdG8gYmUgcmVuZGVyZWQKKyAgICAgICAgICAgICAgICBhcyBkYXRhCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuY29sdW1ucy5hcHBlbmQoeyd0aXRsZScgOiB0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlbHBfdGV4dCcgOiBoZWxwX3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlcmFibGUnIDogb3JkZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlkZWFibGUnIDogaGlkZWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaWRkZW4nIDogaGlkZGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmllbGRfbmFtZScgOiBmaWVsZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyX25hbWUnIDogZmlsdGVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0aWNfZGF0YV9uYW1lJzogc3RhdGljX2RhdGFfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRpY19kYXRhX3RlbXBsYXRlJzogc3RhdGljX2RhdGFfdGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5YWJsZSc6IGRpc3BsYXlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcHV0YXRpb24nOiBjb21wdXRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQorCisgICAgZGVmIHJlbmRlcl9zdGF0aWNfZGF0YShzZWxmLCB0ZW1wbGF0ZSwgcm93KToKKyAgICAgICAgIiIiVXRpbGl0eSBmdW5jdGlvbiB0byByZW5kZXIgdGhlIHN0YXRpYyBkYXRhIHRlbXBsYXRlIiIiCisKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAnZXh0cmEnIDogc2VsZi5zdGF0aWNfY29udGV4dF9leHRyYSwKKyAgICAgICAgICAnZGF0YScgOiByb3csCisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0ID0gQ29udGV4dChjb250ZXh0KQorICAgICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlKHRlbXBsYXRlKQorCisgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5yZW5kZXIoY29udGV4dCkKKworICAgIGRlZiBhcHBseV9maWx0ZXIoc2VsZiwgZmlsdGVycywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnNldHVwX2ZpbHRlcnMoKiprd2FyZ3MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsdGVyX25hbWUsIGZpbHRlcl9hY3Rpb24gPSBmaWx0ZXJzLnNwbGl0KCc6JykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiAiYWxsIiBpbiBmaWx0ZXJfYWN0aW9uOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5maWx0ZXJfYWN0aW9uc1tmaWx0ZXJfYWN0aW9uXSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICMgcGFzcyBpdCB0byB0aGUgdXNlciAtIHByb2dyYW1taW5nIGVycm9yIGhlcmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgYXBwbHlfb3JkZXJieShzZWxmLCBvcmRlcmJ5KToKKyAgICAgICAgIyBOb3RlIHRoYXQgZGphbmdvIHdpbGwgZXhlY3V0ZSB0aGlzIHdoZW4gd2UgdHJ5IHRvIHJldHJpZXZlIHRoZSBkYXRhCisgICAgICAgIHNlbGYucXVlcnlzZXQgPSBzZWxmLnF1ZXJ5c2V0Lm9yZGVyX2J5KG9yZGVyYnkpCisKKyAgICBkZWYgYXBwbHlfc2VhcmNoKHNlbGYsIHNlYXJjaF90ZXJtKToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIHF1ZXJ5IGJhc2VkIG9uIHRoZSBtb2RlbCdzIHNlYXJjaF9hbGxvd2VkX2ZpZWxkcyIiIgorCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYucXVlcnlzZXQubW9kZWwsICdzZWFyY2hfYWxsb3dlZF9maWVsZHMnKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyIFNlYXJjaCBmaWVsZHMgYXJlbid0IGRlZmluZWQgaW4gdGhlIG1vZGVsIikKKworICAgICAgICBzZWFyY2hfcXVlcmllcyA9IFtdCisgICAgICAgIGZvciBzdCBpbiBzZWFyY2hfdGVybS5zcGxpdCgiICIpOgorICAgICAgICAgICAgcV9tYXAgPSBbUSgqKntmaWVsZCArICdfX2ljb250YWlucyc6IHN0fSkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBmaWVsZCBpbiBzZWxmLnF1ZXJ5c2V0Lm1vZGVsLnNlYXJjaF9hbGxvd2VkX2ZpZWxkc10KKworICAgICAgICAgICAgc2VhcmNoX3F1ZXJpZXMuYXBwZW5kKHJlZHVjZShvcGVyYXRvci5vcl8sIHFfbWFwKSkKKworICAgICAgICBzZWFyY2hfcXVlcmllcyA9IHJlZHVjZShvcGVyYXRvci5hbmRfLCBzZWFyY2hfcXVlcmllcykKKworICAgICAgICBzZWxmLnF1ZXJ5c2V0ID0gc2VsZi5xdWVyeXNldC5maWx0ZXIoc2VhcmNoX3F1ZXJpZXMpCisKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCByZXF1ZXN0LCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGRhdGEgZm9yIHRoZSBwYWdlIHJlcXVlc3RlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgcGFyYW1ldGVycyBhcHBsaWVkIiIiCisKKyAgICAgICAgcGFnZV9udW0gPSByZXF1ZXN0LkdFVC5nZXQoInBhZ2UiLCAxKQorICAgICAgICBsaW1pdCA9IHJlcXVlc3QuR0VULmdldCgibGltaXQiLCAxMCkKKyAgICAgICAgc2VhcmNoID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQorICAgICAgICBmaWx0ZXJzID0gcmVxdWVzdC5HRVQuZ2V0KCJmaWx0ZXIiLCBOb25lKQorICAgICAgICBvcmRlcmJ5ID0gcmVxdWVzdC5HRVQuZ2V0KCJvcmRlcmJ5IiwgTm9uZSkKKworICAgICAgICAjIE1ha2UgYSB1bmlxdWUgY2FjaGUgbmFtZQorICAgICAgICBjYWNoZV9uYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBmb3Iga2V5LCB2YWwgaW4gcmVxdWVzdC5HRVQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBjYWNoZV9uYW1lID0gY2FjaGVfbmFtZSArIHN0cihrZXkpICsgc3RyKHZhbCkKKworICAgICAgICBmb3Iga2V5LCB2YWwgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgY2FjaGVfbmFtZSA9IGNhY2hlX25hbWUgKyBzdHIoa2V5KSArIHN0cih2YWwpCisKKyAgICAgICAgIyBObyBzcGVjaWFsIGNoYXJzIGFsbG93ZWQgaW4gdGhlIGNhY2hlIG5hbWUgYXBhcnQgZnJvbSBkYXNoCisgICAgICAgIGNhY2hlX25hbWUgPSByZS5zdWIocidbXkEtWmEtejAtOS1dJywgIiIsIGNhY2hlX25hbWUpCisgICAgICAgIGRhdGEgPSBjYWNoZS5nZXQoY2FjaGVfbmFtZSkKKworICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICBzZWxmLnNldHVwX2NvbHVtbnMoKiprd2FyZ3MpCisKKyAgICAgICAgaWYgc2VhcmNoOgorICAgICAgICAgICAgc2VsZi5hcHBseV9zZWFyY2goc2VhcmNoKQorICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgc2VsZi5hcHBseV9maWx0ZXIoZmlsdGVycywgKiprd2FyZ3MpCisgICAgICAgIGlmIG9yZGVyYnk6CisgICAgICAgICAgICBzZWxmLmFwcGx5X29yZGVyYnkob3JkZXJieSkKKworICAgICAgICBwYWdpbmF0b3IgPSBQYWdpbmF0b3Ioc2VsZi5xdWVyeXNldCwgbGltaXQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKHBhZ2VfbnVtKQorICAgICAgICBleGNlcHQgRW1wdHlQYWdlOgorICAgICAgICAgICAgcGFnZSA9IHBhZ2luYXRvci5wYWdlKDEpCisKKyAgICAgICAgZGF0YSA9IHsKKyAgICAgICAgICAgICd0b3RhbCcgOiBzZWxmLnF1ZXJ5c2V0LmNvdW50KCksCisgICAgICAgICAgICAnZGVmYXVsdF9vcmRlcmJ5JyA6IHNlbGYuZGVmYXVsdF9vcmRlcmJ5LAorICAgICAgICAgICAgJ2NvbHVtbnMnIDogc2VsZi5jb2x1bW5zLAorICAgICAgICAgICAgJ3Jvd3MnIDogW10sCisgICAgICAgICAgICAnZXJyb3InIDogIm9rIiwKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciByb3cgaW4gcGFnZS5vYmplY3RfbGlzdDoKKyAgICAgICAgICAgICAgICAjVXNlIGNvbGxlY3Rpb24gdG8gbWFpbnRhaW4gdGhlIG9yZGVyCisgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YSA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKworICAgICAgICAgICAgICAgIGZvciBjb2wgaW4gc2VsZi5jb2x1bW5zOgorICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGNvbFsnZmllbGRfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaWVsZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gY29sWydzdGF0aWNfZGF0YV9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IHN1cHBseSBhIGZpZWxkX25hbWUgb3Igc3RhdGljX2RhdGFfbmFtZSBmb3IgY29sdW1uICVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyxjb2wpKQorICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHdlIG5lZWQgdG8gcHJvY2VzcyBzb21lIHN0YXRpYyBkYXRhCisgICAgICAgICAgICAgICAgICAgIGlmICJzdGF0aWNfZGF0YV9uYW1lIiBpbiBjb2wgYW5kIGNvbFsnc3RhdGljX2RhdGFfbmFtZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfZGF0YVsic3RhdGljOiVzIiAlIGNvbFsnc3RhdGljX2RhdGFfbmFtZSddXSA9IHNlbGYucmVuZGVyX3N0YXRpY19kYXRhKGNvbFsnc3RhdGljX2RhdGFfdGVtcGxhdGUnXSwgcm93KQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIE92ZXJ3cml0ZSB0aGUgZmllbGRfbmFtZSB3aXRoIHN0YXRpY19kYXRhX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc28gdGhhdCB0aGlzIGNhbiBiZSB1c2VkIGFzIHRoZSBodG1sIGNsYXNzIG5hbWUKKworICAgICAgICAgICAgICAgICAgICAgICAgY29sWydmaWVsZF9uYW1lJ10gPSBjb2xbJ3N0YXRpY19kYXRhX25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICMgY29tcHV0ZSB0aGUgY29tcHV0YXRpb24gb24gdGhlIHJhdyBkYXRhIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gcm93CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbFsnY29tcHV0YXRpb24nXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2RhdGEgPSBjb2xbJ2NvbXB1dGF0aW9uJ10ocm93KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUcmF2ZXJzZSB0byBhbnkgZm9yaWVnbiBrZXkgaW4gdGhlIG9iamVjdCBoaWVyYWNoeQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmZpZWxkIGluIGZpZWxkLnNwbGl0KCJfXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIobW9kZWxfZGF0YSwgc3ViZmllbGQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9kYXRhID0gZ2V0YXR0cihtb2RlbF9kYXRhLCBzdWJmaWVsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIGZpZWxkIGNvdWxkIGJlIGEgZnVuY3Rpb24gb24gdGhlIG1vZGVsIHNvIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAjIElmIGl0IGlzIHRoZW4gY2FsbCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2RlbF9kYXRhLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfZGF0YSA9IG1vZGVsX2RhdGEoKQorCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkX2RhdGFbY29sWydmaWVsZF9uYW1lJ11dID0gbW9kZWxfZGF0YQorCisgICAgICAgICAgICAgICAgZGF0YVsncm93cyddLmFwcGVuZChyZXF1aXJlZF9kYXRhKQorCisgICAgICAgIGV4Y2VwdCBGaWVsZEVycm9yOgorICAgICAgICAgICAgIyBwYXNzICBpdCB0byB0aGUgdXNlciAtIHByb2dyYW1taW5nLWVycm9yIGhlcmUKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGRhdGEgPSBqc29uLmR1bXBzKGRhdGEsIGluZGVudD0yLCBkZWZhdWx0PW9ianRvanNvbikKKyAgICAgICAgY2FjaGUuc2V0KGNhY2hlX25hbWUsIGRhdGEsIDYwKjMwKQorCisgICAgICAgIHJldHVybiBkYXRhCisKKworY2xhc3MgVG9hc3RlclRlbXBsYXRlVmlldyhUZW1wbGF0ZVZpZXcpOgorICAgICMgcmVuZGVycyBhIGluc3RhbmNlIGluIGEgdGVtcGxhdGUsIG9yIHJldHVybnMgdGhlIGNvbnRleHQgYXMganNvbgorICAgICMgdGhlIGNsYXNzLWVxdWl2YWxlbnQgb2YgdGhlIF90ZW1wbGF0ZV9yZW5kZXJlciBkZWNvcmF0b3IgZm9yIHZpZXdzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoVG9hc3RlclRlbXBsYXRlVmlldywgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNvbnRleHRfZW50cmllcyA9IFtdCisKKyAgICBkZWYgZ2V0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHNlbGYucmVxdWVzdC5HRVQuZ2V0KCdmb3JtYXQnLCBOb25lKSA9PSAnanNvbic6CisgICAgICAgICAgICBmcm9tIGRqYW5nby5jb3JlLnVybHJlc29sdmVycyBpbXBvcnQgcmV2ZXJzZQorICAgICAgICAgICAgZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBIdHRwUmVzcG9uc2UKKyAgICAgICAgICAgIGZyb20gdmlld3MgaW1wb3J0IG9ianRvanNvbgorICAgICAgICAgICAgZnJvbSB0b2FzdGVyZ3VpLnRlbXBsYXRldGFncy5wcm9qZWN0dGFncyBpbXBvcnQganNvbiBhcyBqc29uZmlsdGVyCisKKyAgICAgICAgICAgIGNvbnRleHQgPSBzZWxmLmdldF9jb250ZXh0X2RhdGEoKiprd2FyZ3MpCisKKyAgICAgICAgICAgIGZvciB4IGluIGNvbnRleHQua2V5cygpOgorICAgICAgICAgICAgICAgIGlmIHggbm90IGluIHNlbGYuY29udGV4dF9lbnRyaWVzOgorICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFt4XQorCisgICAgICAgICAgICBjb250ZXh0WyJlcnJvciJdID0gIm9rIgorCisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb25maWx0ZXIoY29udGV4dCwgIGRlZmF1bHQ9b2JqdG9qc29uICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiKQorCisgICAgICAgIHJldHVybiBzdXBlcihUb2FzdGVyVGVtcGxhdGVWaWV3LCBzZWxmKS5nZXQoKmFyZ3MsICoqa3dhcmdzKQorCitjbGFzcyBUb2FzdGVyVHlwZUFoZWFkKFZpZXcpOgorICAgICIiIiBBIHR5cGVhaGVhZCBtZWNoYW5pc20gdG8gc3VwcG9ydCB0aGUgZnJvbnQgZW5kIHR5cGVhaGVhZCB3aWRnZXRzICIiIgorICAgIE1BWF9SRVNVTFRTID0gNgorCisgICAgY2xhc3MgTWlzc2luZ0ZpZWxkc0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoVG9hc3RlclR5cGVBaGVhZCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGdldChzZWxmLCByZXF1ZXN0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBkZWYgcmVzcG9uc2UoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKGpzb24uZHVtcHMoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9RGphbmdvSlNPTkVuY29kZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iKQorCisgICAgICAgIGVycm9yID0gIm9rIgorCisgICAgICAgIHNlYXJjaF90ZXJtID0gcmVxdWVzdC5HRVQuZ2V0KCJzZWFyY2giLCBOb25lKQorICAgICAgICBpZiBzZWFyY2hfdGVybSA9PSBOb25lOgorICAgICAgICAgICAgIyBXZSBnb3Qgbm8gc2VhcmNoIHZhbHVlIHNvIHJldHVybiBlbXB0eSByZXBvbnNlCisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoeydlcnJvcicgOiBlcnJvciAsICdyZXN1bHRzJzogW119KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaiA9IFByb2plY3Qub2JqZWN0cy5nZXQocGs9a3dhcmdzWydwaWQnXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJqID0gTm9uZQorCisgICAgICAgIHJlc3VsdHMgPSBzZWxmLmFwcGx5X3NlYXJjaChzZWFyY2hfdGVybSwgcHJqLCByZXF1ZXN0KVs6VG9hc3RlclR5cGVBaGVhZC5NQVhfUkVTVUxUU10KKworICAgICAgICBpZiBsZW4ocmVzdWx0cykgPiAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfZmllbGRzKHJlc3VsdHNbMF0pCisgICAgICAgICAgICBleGNlcHQgTWlzc2luZ0ZpZWxkc0V4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGVycm9yID0gZQorCisgICAgICAgIGRhdGEgPSB7ICdyZXN1bHRzJyA6IHJlc3VsdHMsCisgICAgICAgICAgICAgICAgJ2Vycm9yJyA6IGVycm9yLAorICAgICAgICAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXNwb25zZShkYXRhKQorCisgICAgZGVmIHZhbGlkYXRlX2ZpZWxkcyhzZWxmLCByZXN1bHQpOgorICAgICAgICBpZiAnbmFtZScgaW4gcmVzdWx0ID09IEZhbHNlIG9yICdkZXRhaWwnIGluIHJlc3VsdCA9PSBGYWxzZToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdGaWVsZHNFeGNlcHRpb24oIm5hbWUgYW5kIGRldGFpbCBhcmUgcmVxdWlyZWQgZmllbGRzIikKKworICAgIGRlZiBhcHBseV9zZWFyY2goc2VsZiwgc2VhcmNoX3Rlcm0sIHByaik6CisgICAgICAgICIiIiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBzZWFyY2guIFJldHVybiBhbiBhcnJheSBvZgorICAgICAgICBkaWN0aW9uYXJpZXMgd2l0aCBhIG1pbml1bSBvZiBhIG5hbWUgYW5kIGRldGFpbCBmaWVsZCIiIgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L19faW5pdF9fLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRkZWxldGUucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRkZWxldGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzZDMxMQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZGRlbGV0ZS5weQpAQCAtMCwwICsxLDQ5IEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgQmFzZUNvbW1hbmQsIENvbW1hbmRFcnJvcgorZnJvbSBvcm0ubW9kZWxzIGltcG9ydCBCdWlsZAorZnJvbSBkamFuZ28uZGIgaW1wb3J0IE9wZXJhdGlvbmFsRXJyb3IKK2ltcG9ydCBvcworCisKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgYXJncyAgICA9ICJidWlsZElkIgorICAgIGhlbHAgICAgPSAiRGVsZXRlcyBzZWxlY3RlZCBidWlsZChzKSIKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgYnVpbGRJZCwgKmFyZ3MsICoqb3B0aW9ucyk6CisgICAgICAgIGZvciBiaWQgaW4gYnVpbGRJZC5zcGxpdCgiLCIpOgorICAgICAgICAgICAgYiA9IEJ1aWxkLm9iamVjdHMuZ2V0KHBrID0gYmlkKQorICAgICAgICAgICAgIyB0aGVvcmV0aWNhbGx5LCBqdXN0IGIuZGVsZXRlKCkgd291bGQgc3VmZmljZQorICAgICAgICAgICAgIyBob3dldmVyIFNRTGl0ZSBydW5zIGludG8gcHJvYmxlbXMgd2hlbiB5b3UgdHJ5IHRvCisgICAgICAgICAgICAjIGRlbGV0ZSB0b28gbWFueSByb3dzIGF0IG9uY2UsIHNvIHdlIGRlbGV0ZSBzb21lIGRpcmVjdAorICAgICAgICAgICAgIyByZWxhdGlvbnNoaXBzIGZyb20gQnVpbGQgbWFudWFsbHkuCisgICAgICAgICAgICBmb3IgdCBpbiBiLnRhcmdldF9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgdC5kZWxldGUoKQorICAgICAgICAgICAgZm9yIHQgaW4gYi50YXNrX2J1aWxkLmFsbCgpOgorICAgICAgICAgICAgICAgIHQuZGVsZXRlKCkKKyAgICAgICAgICAgIGZvciBwIGluIGIucGFja2FnZV9zZXQuYWxsKCk6CisgICAgICAgICAgICAgICAgcC5kZWxldGUoKQorICAgICAgICAgICAgZm9yIGx2IGluIGIubGF5ZXJfdmVyc2lvbl9idWlsZC5hbGwoKToKKyAgICAgICAgICAgICAgICBsdi5kZWxldGUoKQorICAgICAgICAgICAgZm9yIHYgaW4gYi52YXJpYWJsZV9idWlsZC5hbGwoKToKKyAgICAgICAgICAgICAgICB2LmRlbGV0ZSgpCisgICAgICAgICAgICBmb3IgbCBpbiBiLmxvZ21lc3NhZ2Vfc2V0LmFsbCgpOgorICAgICAgICAgICAgICAgIGwuZGVsZXRlKCkKKworICAgICAgICAgICAgIyBkZWxldGUgdGhlIGJ1aWxkOyBzb21lIGRhdGFiYXNlcyBtaWdodCBoYXZlIGhhZCBwcm9ibGVtIHdpdGggbWlncmF0aW9uIG9mIHRoZSBibGRjb250cm9sIGFwcAorICAgICAgICAgICAgcmV0cnlfY291bnQgPSAwCisgICAgICAgICAgICBuZWVkX2JsZGNvbnRyb2xfbWlncmF0aW9uID0gRmFsc2UKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgaWYgcmV0cnlfY291bnQgPj0gNToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZXRyeV9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgaWYgbmVlZF9ibGRjb250cm9sX21pZ3JhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBkamFuZ28uY29yZSBpbXBvcnQgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50LmNhbGxfY29tbWFuZCgnbWlncmF0ZScsICdibGRjb250cm9sJywgaW50ZXJhY3RpdmU9RmFsc2UpCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGIuZGVsZXRlKCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgT3BlcmF0aW9uYWxFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAjIGV4ZWN1dGUgbWlncmF0aW9ucworICAgICAgICAgICAgICAgICAgICBuZWVkX2JsZGNvbnRyb2xfbWlncmF0aW9uID0gVHJ1ZQorCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9idWlsZHNsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDk4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL21hbmFnZW1lbnQvY29tbWFuZHMvYnVpbGRzbGlzdC5weQpAQCAtMCwwICsxLDEzIEBACitmcm9tIGRqYW5nby5jb3JlLm1hbmFnZW1lbnQuYmFzZSBpbXBvcnQgTm9BcmdzQ29tbWFuZCwgQ29tbWFuZEVycm9yCitmcm9tIG9ybS5tb2RlbHMgaW1wb3J0IEJ1aWxkCitpbXBvcnQgb3MKKworCisKK2NsYXNzIENvbW1hbmQoTm9BcmdzQ29tbWFuZCk6CisgICAgYXJncyAgICA9ICIiCisgICAgaGVscCAgICA9ICJMaXN0cyBjdXJyZW50IGJ1aWxkcyIKKworICAgIGRlZiBoYW5kbGVfbm9hcmdzKHNlbGYsKipvcHRpb25zKToKKyAgICAgICAgZm9yIGIgaW4gQnVpbGQub2JqZWN0cy5hbGwoKToKKyAgICAgICAgICAgIHByaW50ICIlZDogJXMgJXMgJXMiICUgKGIucGssIGIubWFjaGluZSwgYi5kaXN0cm8sICIsIi5qb2luKFt4LnRhcmdldCBmb3IgeCBpbiBiLnRhcmdldF9zZXQuYWxsKCldKSkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9wZXJmLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9tYW5hZ2VtZW50L2NvbW1hbmRzL3BlcmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhNDhlOQotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vbWFuYWdlbWVudC9jb21tYW5kcy9wZXJmLnB5CkBAIC0wLDAgKzEsNTggQEAKK2Zyb20gZGphbmdvLmNvcmUubWFuYWdlbWVudC5iYXNlIGltcG9ydCBCYXNlQ29tbWFuZAorZnJvbSBkamFuZ28udGVzdC5jbGllbnQgaW1wb3J0IENsaWVudAoraW1wb3J0IG9zLCBzeXMsIHJlCitpbXBvcnQgcmVxdWVzdHMKK2Zyb20gZGphbmdvLmNvbmYgaW1wb3J0IHNldHRpbmdzCisKKyMgcHlsaW50OiBkaXNhYmxlPUUxMTAzCisjIEluc3RhbmNlIG9mICdXU0dJUmVxdWVzdCcgaGFzIG5vICdzdGF0dXNfY29kZScgbWVtYmVyCisjIChidXQgc29tZSB0eXBlcyBjb3VsZCBub3QgYmUgaW5mZXJyZWQpIChtYXliZS1uby1tZW1iZXIpCisKKworY2xhc3MgQ29tbWFuZChCYXNlQ29tbWFuZCk6CisgICAgaGVscCAgICA9ICJUZXN0IHRoZSByZXNwb25zZSB0aW1lIGZvciBhbGwgdG9hc3RlciB1cmxzIgorCisgICAgZGVmIGhhbmRsZShzZWxmLCAqYXJncywgKipvcHRpb25zKToKKwlyb290X3VybGNvbmYgPSBfX2ltcG9ydF9fKHNldHRpbmdzLlJPT1RfVVJMQ09ORikKKwlwYXR0ZXJucyA9IHJvb3RfdXJsY29uZi51cmxzLnVybHBhdHRlcm5zCisJZ2xvYmFsIGZ1bGxfdXJsCisJZm9yIHBhdCBpbiBwYXR0ZXJuczoKKwkgICAgaWYgcGF0Ll9fY2xhc3NfXy5fX25hbWVfXyA9PSAnUmVnZXhVUkxSZXNvbHZlcic6CisJCXVybF9yb290X3JlcyA9IHN0cihwYXQpLnNwbGl0KCdeJylbMV0ucmVwbGFjZSgnPicsICcnKQorCQlpZiAnZ3VpJyBpbiB1cmxfcm9vdF9yZXM6CisJCSAgICBmb3IgdXJsX3BhdHQgaW4gcGF0LnVybF9wYXR0ZXJuczoKKwkJCWZ1bGxfdXJsID0gc2VsZi5nZXRfZnVsbF91cmwodXJsX3BhdHQsIHVybF9yb290X3JlcykKKwkJCWluZm8gPSBzZWxmLnVybF9pbmZvKGZ1bGxfdXJsKQorCQkJc3RhdHVzX2NvZGUgPSBpbmZvWzBdCisJCQlsb2FkX3RpbWUgPSBpbmZvWzFdCisJCQlwcmludCAnVHJ5aW5nIFwnJyArIGZ1bGxfdXJsICsgJ1wnLCAnICsgc3RyKHN0YXR1c19jb2RlKSArICcsICcgKyBzdHIobG9hZF90aW1lKQorCisgICAgZGVmIGdldF9mdWxsX3VybChzZWxmLCB1cmxfcGF0dCwgdXJsX3Jvb3RfcmVzKToKKwlmdWxsX3VybCA9IHN0cih1cmxfcGF0dCkuc3BsaXQoJ14nKVsxXS5yZXBsYWNlKCckPicsICcnKS5yZXBsYWNlKCcoP1A8ZmlsZV9wYXRoPig/Oi9bJywgJy9iaW4vYnVzeWJveCcpLnJlcGxhY2UoJy4qJywgJycpCisJZnVsbF91cmwgPSBzdHIodXJsX3Jvb3RfcmVzICsgZnVsbF91cmwpCisJZnVsbF91cmwgPSByZS5zdWIoJ1woXD9QPC4qPz5cXFxkXCtcKScsICcxJywgZnVsbF91cmwpCisJZnVsbF91cmwgPSAnaHR0cDovL2xvY2FsaG9zdDo4MDAwLycgKyBmdWxsX3VybAorCXJldHVybiBmdWxsX3VybAorCisgICAgZGVmIHVybF9pbmZvKHNlbGYsIGZ1bGxfdXJsKToKKwljbGllbnQgPSBDbGllbnQoKQorCWluZm8gPSBbXQorCXRyeToKKwkgICAgcmVzcCA9IGNsaWVudC5nZXQoZnVsbF91cmwsIGZvbGxvdyA9IFRydWUpCisJZXhjZXB0IEV4Y2VwdGlvbiBhcyBlX3N0YXR1c19jb2RlOgorICAgICAgICAgICAgc2VsZi5lcnJvcignVXJsOiAlcywgZXJyb3I6ICVzJyAlIChmdWxsX3VybCwgZV9zdGF0dXNfY29kZSkpCisgICAgICAgICAgICByZXNwID0gdHlwZSgnb2JqZWN0JywgKCksIHsnc3RhdHVzX2NvZGUnOjAsICdjb250ZW50Jzogc3RyKGVfc3RhdHVzX2NvZGUpfSkKKwlzdGF0dXNfY29kZSA9IHJlc3Auc3RhdHVzX2NvZGUKKwlpbmZvLmFwcGVuZChzdGF0dXNfY29kZSkKKwl0cnk6CisJICAgIHJlcSA9IHJlcXVlc3RzLmdldChmdWxsX3VybCkKKwlleGNlcHQgRXhjZXB0aW9uIGFzIGVfbG9hZF90aW1lOgorICAgICAgICAgICAgc2VsZi5lcnJvcignVXJsOiAlcywgZXJyb3I6ICVzJyAlIChmdWxsX3VybCwgZV9sb2FkX3RpbWUpKQorCWxvYWRfdGltZSA9IHJlcS5lbGFwc2VkCisJaW5mby5hcHBlbmQobG9hZF90aW1lKQorCXJldHVybiBpbmZvCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgKmFyZ3MpOgorCWZvciBhcmcgaW4gYXJnczoKKwkgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBhcmcsCisJcHJpbnQgPj5zeXMuc3RkZXJyCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5IGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ5YTVlCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi9zZXR0aW5ncy5weQpAQCAtMCwwICsxLDQxMCBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQml0QmFrZSBUb2FzdGVyIEltcGxlbWVudGF0aW9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAgICAgICAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyMgRGphbmdvIHNldHRpbmdzIGZvciBUb2FzdGVyIHByb2plY3QuCisKK2ltcG9ydCBvcywgcmUKKworREVCVUcgPSBUcnVlCitURU1QTEFURV9ERUJVRyA9IERFQlVHCisKKyMgU2V0IHRvIFRydWUgdG8gc2VlIHRoZSBTUUwgcXVlcmllcyBpbiBjb25zb2xlCitTUUxfREVCVUcgPSBGYWxzZQoraWYgb3MuZW52aXJvbi5nZXQoIlRPQVNURVJfU1FMREVCVUciLCBOb25lKSBpcyBub3QgTm9uZToKKyAgICBTUUxfREVCVUcgPSBUcnVlCisKKworQURNSU5TID0gKAorICAgICMgKCdZb3VyIE5hbWUnLCAneW91cl9lbWFpbEBleGFtcGxlLmNvbScpLAorKQorCitNQU5BR0VSUyA9IEFETUlOUworCitEQVRBQkFTRVMgPSB7CisgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLnNxbGl0ZTMnLCAjIEFkZCAncG9zdGdyZXNxbF9wc3ljb3BnMicsICdteXNxbCcsICdzcWxpdGUzJyBvciAnb3JhY2xlJy4KKyAgICAgICAgJ05BTUUnOiAndG9hc3Rlci5zcWxpdGUnLCAgICAgICAgICAgICAgICAgICAgICAjIE9yIHBhdGggdG8gZGF0YWJhc2UgZmlsZSBpZiB1c2luZyBzcWxpdGUzLgorICAgICAgICAnVVNFUic6ICcnLAorICAgICAgICAnUEFTU1dPUkQnOiAnJywKKyAgICAgICAgJ0hPU1QnOiAnMTI3LjAuMC4xJywgICAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBmb3IgbG9jYWxob3N0IHRocm91Z2ggZG9tYWluIHNvY2tldHMgb3IgJzEyNy4wLjAuMScgZm9yIGxvY2FsaG9zdCB0aHJvdWdoIFRDUC4KKyAgICAgICAgJ1BPUlQnOiAnMzMwNicsICAgICAgICAgICAgICAgICAgICAgICMgU2V0IHRvIGVtcHR5IHN0cmluZyBmb3IgZGVmYXVsdC4KKyAgICB9Cit9CisKKyMgTmVlZGVkIHdoZW4gVXNpbmcgc3FsaXRlIGVzcGVjaWFsbHkgdG8gYWRkIGEgbG9uZ2VyIHRpbWVvdXQgZm9yIHdhaXRpbmcKKyMgZm9yIHRoZSBkYXRhYmFzZSBsb2NrIHRvIGJlICByZWxlYXNlZAorIyBodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS42L3JlZi9kYXRhYmFzZXMvI2RhdGFiYXNlLWlzLWxvY2tlZC1lcnJvcnMKK2lmICdzcWxpdGUnIGluIERBVEFCQVNFU1snZGVmYXVsdCddWydFTkdJTkUnXToKKyAgICBEQVRBQkFTRVNbJ2RlZmF1bHQnXVsnT1BUSU9OUyddID0geyAndGltZW91dCc6IDIwIH0KKworIyBSZWludGVycHJldCBkYXRhYmFzZSBzZXR0aW5ncyBpZiB3ZSBoYXZlIERBVEFCQVNFX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZWZpbmVkCisKK2lmICdEQVRBQkFTRV9VUkwnIGluIG9zLmVudmlyb246CisgICAgZGJ1cmwgPSBvcy5lbnZpcm9uWydEQVRBQkFTRV9VUkwnXQorICAgIGlmIGRidXJsLnN0YXJ0c3dpdGgoJ3NxbGl0ZTM6Ly8nKToKKyAgICAgICAgcmVzdWx0ID0gcmUubWF0Y2goJ3NxbGl0ZTM6Ly8oLiopJywgZGJ1cmwpCisgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFUlJPUjogQ291bGQgbm90IHJlYWQgc3FsaXRlIGRhdGFiYXNlIHVybDogJXMiICUgZGJ1cmwpCisgICAgICAgIERBVEFCQVNFU1snZGVmYXVsdCddID0geworICAgICAgICAgICAgJ0VOR0lORSc6ICdkamFuZ28uZGIuYmFja2VuZHMuc3FsaXRlMycsCisgICAgICAgICAgICAnTkFNRSc6IHJlc3VsdC5ncm91cCgxKSwKKyAgICAgICAgICAgICdVU0VSJzogJycsCisgICAgICAgICAgICAnUEFTU1dPUkQnOiAnJywKKyAgICAgICAgICAgICdIT1NUJzogJycsCisgICAgICAgICAgICAnUE9SVCc6ICcnLAorICAgICAgICB9CisgICAgZWxpZiBkYnVybC5zdGFydHN3aXRoKCdteXNxbDovLycpOgorICAgICAgICAjIFVSTCBtdXN0IGJlIGluIHRoaXMgZm9ybTogbXlzcWw6Ly91c2VyOnBhc3NAaG9zdDpwb3J0L25hbWUKKyAgICAgICAgcmVzdWx0ID0gcmUubWF0Y2gociJteXNxbDovLyhbXjpdKik6KFteQF0qKUAoW146XSopOihcZCspLyhbXi9dKikiLCBkYnVybCkKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVSUk9SOiBDb3VsZCBub3QgcmVhZCBteXNxbCBkYXRhYmFzZSB1cmw6ICVzIiAlIGRidXJsKQorICAgICAgICBEQVRBQkFTRVNbJ2RlZmF1bHQnXSA9IHsKKyAgICAgICAgICAgICdFTkdJTkUnOiAnZGphbmdvLmRiLmJhY2tlbmRzLm15c3FsJywKKyAgICAgICAgICAgICdOQU1FJzogcmVzdWx0Lmdyb3VwKDUpLAorICAgICAgICAgICAgJ1VTRVInOiByZXN1bHQuZ3JvdXAoMSksCisgICAgICAgICAgICAnUEFTU1dPUkQnOiByZXN1bHQuZ3JvdXAoMiksCisgICAgICAgICAgICAnSE9TVCc6IHJlc3VsdC5ncm91cCgzKSwKKyAgICAgICAgICAgICdQT1JUJzogcmVzdWx0Lmdyb3VwKDQpLAorICAgICAgICB9CisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogUGxlYXNlIGltcGxlbWVudCBtaXNzaW5nIGRhdGFiYXNlIHVybCBzY2hlbWEgZm9yIHVybDogJXMiICUgZGJ1cmwpCisKKworaWYgJ1RPQVNURVJfTUFOQUdFRCcgaW4gb3MuZW52aXJvbiBhbmQgb3MuZW52aXJvblsnVE9BU1RFUl9NQU5BR0VEJ10gPT0gIjEiOgorICAgIE1BTkFHRUQgPSBUcnVlCitlbHNlOgorICAgIE1BTkFHRUQgPSBGYWxzZQorCisjIEFsbG93cyBjdXJyZW50IGRhdGFiYXNlIHNldHRpbmdzIHRvIGJlIGV4cG9ydGVkIGFzIGEgREFUQUJBU0VfVVJMIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlCisKK2RlZiBnZXREQVRBQkFTRV9VUkwoKToKKyAgICBkID0gREFUQUJBU0VTWydkZWZhdWx0J10KKyAgICBpZiBkWydFTkdJTkUnXSA9PSAnZGphbmdvLmRiLmJhY2tlbmRzLnNxbGl0ZTMnOgorICAgICAgICBpZiBkWydOQU1FJ10gPT0gJzptZW1vcnk6JzoKKyAgICAgICAgICAgIHJldHVybiAnc3FsaXRlMzovLzptZW1vcnk6JworICAgICAgICBlbGlmIGRbJ05BTUUnXS5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICByZXR1cm4gJ3NxbGl0ZTM6Ly8nICsgZFsnTkFNRSddCisgICAgICAgIHJldHVybiAic3FsaXRlMzovLyIgKyBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGRbJ05BTUUnXSkKKworICAgIGVsaWYgZFsnRU5HSU5FJ10gPT0gJ2RqYW5nby5kYi5iYWNrZW5kcy5teXNxbCc6CisgICAgICAgIHJldHVybiAibXlzcWw6Ly8iICsgZFsnVVNFUiddICsgIjoiICsgZFsnUEFTU1dPUkQnXSArICJAIiArIGRbJ0hPU1QnXSArICI6IiArIGRbJ1BPUlQnXSArICIvIiArIGRbJ05BTUUnXQorCisgICAgcmFpc2UgRXhjZXB0aW9uKCJGSVhNRTogUGxlYXNlIGltcGxlbWVudCBtaXNzaW5nIGRhdGFiYXNlIHVybCBzY2hlbWEgZm9yIGVuZ2luZTogJXMiICUgZFsnRU5HSU5FJ10pCisKKworCisjIEhvc3RzL2RvbWFpbiBuYW1lcyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhpcyBzaXRlOyByZXF1aXJlZCBpZiBERUJVRyBpcyBGYWxzZQorIyBTZWUgaHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNS9yZWYvc2V0dGluZ3MvI2FsbG93ZWQtaG9zdHMKK0FMTE9XRURfSE9TVFMgPSBbXQorCisjIExvY2FsIHRpbWUgem9uZSBmb3IgdGhpcyBpbnN0YWxsYXRpb24uIENob2ljZXMgY2FuIGJlIGZvdW5kIGhlcmU6CisjIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl90el96b25lc19ieV9uYW1lCisjIGFsdGhvdWdoIG5vdCBhbGwgY2hvaWNlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcy4KKyMgSW4gYSBXaW5kb3dzIGVudmlyb25tZW50IHRoaXMgbXVzdCBiZSBzZXQgdG8geW91ciBzeXN0ZW0gdGltZSB6b25lLgorCisjIEFsd2F5cyB1c2UgbG9jYWwgY29tcHV0ZXIncyB0aW1lIHpvbmUsIGZpbmQKK2ltcG9ydCBoYXNobGliCitpZiAnVFonIGluIG9zLmVudmlyb246CisgICAgVElNRV9aT05FID0gb3MuZW52aXJvblsnVFonXQorZWxzZToKKyAgICAjIG5lZWQgdG8gcmVhZCB0aGUgL2V0Yy9sb2NhbHRpbWUgZmlsZSB3aGljaCBpcyB0aGUgbGliYyBzdGFuZGFyZAorICAgICMgYW5kIGRvIGEgcmV2ZXJzZS1tYXBwaW5nIHRvIC91c3Ivc2hhcmUvem9uZWluZm8vOworICAgICMgc2luY2UgdGhlIHRpbWV6b25lIG1heSBtYXRjaCBhbnkgbnVtYmVyIG9mIGlkZW50aWNhbCB0aW1lem9uZSBkZWZpbml0aW9ucywKKworICAgIHpvbmVmaWxlbGlzdCA9IHt9CisgICAgWk9ORUlORk9QQVRIID0gJy91c3Ivc2hhcmUvem9uZWluZm8vJworICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoWk9ORUlORk9QQVRIKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgem9uZW5hbWUgPSBmaWxlcGF0aC5sc3RyaXAoWk9ORUlORk9QQVRIKS5zdHJpcCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHB5dHoKKyAgICAgICAgICAgICAgICBmcm9tIHB5dHouZXhjZXB0aW9ucyBpbXBvcnQgVW5rbm93blRpbWVab25lRXJyb3IKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBweXR6LnRpbWV6b25lKHpvbmVuYW1lKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVmaWxlbGlzdFtoYXNobGliLm1kNShvcGVuKGZpbGVwYXRoKS5yZWFkKCkpLmhleGRpZ2VzdCgpXSA9IHpvbmVuYW1lCisgICAgICAgICAgICAgICAgZXhjZXB0IFVua25vd25UaW1lWm9uZUVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0aW1lem9uZSBmYWlsdXJlcyBoZXJlLCBqdXN0IG1vdmUgb3ZlcgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0W2hhc2hsaWIubWQ1KG9wZW4oZmlsZXBhdGgpLnJlYWQoKSkuaGV4ZGlnZXN0KCldID0gem9uZW5hbWUKKworICAgIFRJTUVfWk9ORSA9IHpvbmVmaWxlbGlzdFtoYXNobGliLm1kNShvcGVuKCcvZXRjL2xvY2FsdGltZScpLnJlYWQoKSkuaGV4ZGlnZXN0KCldCisKKyMgTGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBpbnN0YWxsYXRpb24uIEFsbCBjaG9pY2VzIGNhbiBiZSBmb3VuZCBoZXJlOgorIyBodHRwOi8vd3d3LmkxOG5ndXkuY29tL3VuaWNvZGUvbGFuZ3VhZ2UtaWRlbnRpZmllcnMuaHRtbAorTEFOR1VBR0VfQ09ERSA9ICdlbi11cycKKworU0lURV9JRCA9IDEKKworIyBJZiB5b3Ugc2V0IHRoaXMgdG8gRmFsc2UsIERqYW5nbyB3aWxsIG1ha2Ugc29tZSBvcHRpbWl6YXRpb25zIHNvIGFzIG5vdAorIyB0byBsb2FkIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBtYWNoaW5lcnkuCitVU0VfSTE4TiA9IFRydWUKKworIyBJZiB5b3Ugc2V0IHRoaXMgdG8gRmFsc2UsIERqYW5nbyB3aWxsIG5vdCBmb3JtYXQgZGF0ZXMsIG51bWJlcnMgYW5kCisjIGNhbGVuZGFycyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLgorVVNFX0wxME4gPSBUcnVlCisKKyMgSWYgeW91IHNldCB0aGlzIHRvIEZhbHNlLCBEamFuZ28gd2lsbCBub3QgdXNlIHRpbWV6b25lLWF3YXJlIGRhdGV0aW1lcy4KK1VTRV9UWiA9IFRydWUKKworIyBBYnNvbHV0ZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdpbGwgaG9sZCB1c2VyLXVwbG9hZGVkIGZpbGVzLgorIyBFeGFtcGxlOiAiL3Zhci93d3cvZXhhbXBsZS5jb20vbWVkaWEvIgorTUVESUFfUk9PVCA9ICcnCisKKyMgVVJMIHRoYXQgaGFuZGxlcyB0aGUgbWVkaWEgc2VydmVkIGZyb20gTUVESUFfUk9PVC4gTWFrZSBzdXJlIHRvIHVzZSBhCisjIHRyYWlsaW5nIHNsYXNoLgorIyBFeGFtcGxlczogImh0dHA6Ly9leGFtcGxlLmNvbS9tZWRpYS8iLCAiaHR0cDovL21lZGlhLmV4YW1wbGUuY29tLyIKK01FRElBX1VSTCA9ICcnCisKKyMgQWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHN0YXRpYyBmaWxlcyBzaG91bGQgYmUgY29sbGVjdGVkIHRvLgorIyBEb24ndCBwdXQgYW55dGhpbmcgaW4gdGhpcyBkaXJlY3RvcnkgeW91cnNlbGY7IHN0b3JlIHlvdXIgc3RhdGljIGZpbGVzCisjIGluIGFwcHMnICJzdGF0aWMvIiBzdWJkaXJlY3RvcmllcyBhbmQgaW4gU1RBVElDRklMRVNfRElSUy4KKyMgRXhhbXBsZTogIi92YXIvd3d3L2V4YW1wbGUuY29tL3N0YXRpYy8iCitTVEFUSUNfUk9PVCA9ICcnCisKKyMgVVJMIHByZWZpeCBmb3Igc3RhdGljIGZpbGVzLgorIyBFeGFtcGxlOiAiaHR0cDovL2V4YW1wbGUuY29tL3N0YXRpYy8iLCAiaHR0cDovL3N0YXRpYy5leGFtcGxlLmNvbS8iCitTVEFUSUNfVVJMID0gJy9zdGF0aWMvJworCisjIEFkZGl0aW9uYWwgbG9jYXRpb25zIG9mIHN0YXRpYyBmaWxlcworU1RBVElDRklMRVNfRElSUyA9ICgKKyAgICAjIFB1dCBzdHJpbmdzIGhlcmUsIGxpa2UgIi9ob21lL2h0bWwvc3RhdGljIiBvciAiQzovd3d3L2RqYW5nby9zdGF0aWMiLgorICAgICMgQWx3YXlzIHVzZSBmb3J3YXJkIHNsYXNoZXMsIGV2ZW4gb24gV2luZG93cy4KKyAgICAjIERvbid0IGZvcmdldCB0byB1c2UgYWJzb2x1dGUgcGF0aHMsIG5vdCByZWxhdGl2ZSBwYXRocy4KKykKKworIyBMaXN0IG9mIGZpbmRlciBjbGFzc2VzIHRoYXQga25vdyBob3cgdG8gZmluZCBzdGF0aWMgZmlsZXMgaW4KKyMgdmFyaW91cyBsb2NhdGlvbnMuCitTVEFUSUNGSUxFU19GSU5ERVJTID0gKAorICAgICdkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcy5maW5kZXJzLkZpbGVTeXN0ZW1GaW5kZXInLAorICAgICdkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcy5maW5kZXJzLkFwcERpcmVjdG9yaWVzRmluZGVyJywKKyMgICAgJ2RqYW5nby5jb250cmliLnN0YXRpY2ZpbGVzLmZpbmRlcnMuRGVmYXVsdFN0b3JhZ2VGaW5kZXInLAorKQorCisjIE1ha2UgdGhpcyB1bmlxdWUsIGFuZCBkb24ndCBzaGFyZSBpdCB3aXRoIGFueWJvZHkuCitTRUNSRVRfS0VZID0gJ05PVF9TVUlUQUJMRV9GT1JfSE9TVEVEX0RFUExPWU1FTlQnCisKKyMgTGlzdCBvZiBjYWxsYWJsZXMgdGhhdCBrbm93IGhvdyB0byBpbXBvcnQgdGVtcGxhdGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLgorVEVNUExBVEVfTE9BREVSUyA9ICgKKyAgICAnZGphbmdvLnRlbXBsYXRlLmxvYWRlcnMuZmlsZXN5c3RlbS5Mb2FkZXInLAorICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5hcHBfZGlyZWN0b3JpZXMuTG9hZGVyJywKKyMgICAgICdkamFuZ28udGVtcGxhdGUubG9hZGVycy5lZ2dzLkxvYWRlcicsCispCisKK01JRERMRVdBUkVfQ0xBU1NFUyA9ICgKKyAgICAnZGphbmdvLm1pZGRsZXdhcmUuY29tbW9uLkNvbW1vbk1pZGRsZXdhcmUnLAorICAgICdkamFuZ28uY29udHJpYi5zZXNzaW9ucy5taWRkbGV3YXJlLlNlc3Npb25NaWRkbGV3YXJlJywKKyAgICAnZGphbmdvLm1pZGRsZXdhcmUuY3NyZi5Dc3JmVmlld01pZGRsZXdhcmUnLAorICAgICdkamFuZ28uY29udHJpYi5hdXRoLm1pZGRsZXdhcmUuQXV0aGVudGljYXRpb25NaWRkbGV3YXJlJywKKyAgICAnZGphbmdvLmNvbnRyaWIubWVzc2FnZXMubWlkZGxld2FyZS5NZXNzYWdlTWlkZGxld2FyZScsCisgICAgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSBmb3Igc2ltcGxlIGNsaWNramFja2luZyBwcm90ZWN0aW9uOgorICAgICMgJ2RqYW5nby5taWRkbGV3YXJlLmNsaWNramFja2luZy5YRnJhbWVPcHRpb25zTWlkZGxld2FyZScsCispCisKK0NBQ0hFUyA9IHsKKyAgICAjICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAjICAgICAgICAgICAgJ0JBQ0tFTkQnOiAnZGphbmdvLmNvcmUuY2FjaGUuYmFja2VuZHMubWVtY2FjaGVkLk1lbWNhY2hlZENhY2hlJywKKyAgICAjICAgICAgICAgICAgJ0xPQ0FUSU9OJzogJzEyNy4wLjAuMToxMTIxMScsCisgICAgIyAgICAgICAgfSwKKyAgICAgICAgICAgJ2RlZmF1bHQnOiB7CisgICAgICAgICAgICAgICAnQkFDS0VORCc6ICdkamFuZ28uY29yZS5jYWNoZS5iYWNrZW5kcy5maWxlYmFzZWQuRmlsZUJhc2VkQ2FjaGUnLAorICAgICAgICAgICAgICAgJ0xPQ0FUSU9OJzogJy90bXAvZGphbmdvLWRlZmF1bHQtY2FjaGUnLAorICAgICAgICAgICAgICAgJ1RJTUVPVVQnOiAxLAorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworCitmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUgYXMgRE4KK1NJVEVfUk9PVD1ETihETihvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKKworaW1wb3J0IHN1YnByb2Nlc3MKK1RPQVNURVJfQlJBTkNIID0gc3VicHJvY2Vzcy5Qb3BlbignZ2l0IGJyYW5jaCB8IGdyZXAgIl4qICIgfCB0ciAtZCAiKiAiJywgY3dkID0gU0lURV9ST09ULCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCitUT0FTVEVSX1JFVklTSU9OID0gc3VicHJvY2Vzcy5Qb3BlbignZ2l0IHJldi1wYXJzZSBIRUFEICcsIGN3ZCA9IFNJVEVfUk9PVCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorCitST09UX1VSTENPTkYgPSAndG9hc3Rlcm1haW4udXJscycKKworIyBQeXRob24gZG90dGVkIHBhdGggdG8gdGhlIFdTR0kgYXBwbGljYXRpb24gdXNlZCBieSBEamFuZ28ncyBydW5zZXJ2ZXIuCitXU0dJX0FQUExJQ0FUSU9OID0gJ3RvYXN0ZXJtYWluLndzZ2kuYXBwbGljYXRpb24nCisKK1RFTVBMQVRFX0RJUlMgPSAoCisgICAgIyBQdXQgc3RyaW5ncyBoZXJlLCBsaWtlICIvaG9tZS9odG1sL2RqYW5nb190ZW1wbGF0ZXMiIG9yICJDOi93d3cvZGphbmdvL3RlbXBsYXRlcyIuCisgICAgIyBBbHdheXMgdXNlIGZvcndhcmQgc2xhc2hlcywgZXZlbiBvbiBXaW5kb3dzLgorICAgICMgRG9uJ3QgZm9yZ2V0IHRvIHVzZSBhYnNvbHV0ZSBwYXRocywgbm90IHJlbGF0aXZlIHBhdGhzLgorKQorCitURU1QTEFURV9DT05URVhUX1BST0NFU1NPUlMgPSAoJ2RqYW5nby5jb250cmliLmF1dGguY29udGV4dF9wcm9jZXNzb3JzLmF1dGgnLAorICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMuZGVidWcnLAorICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMuaTE4bicsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5tZWRpYScsCisgJ2RqYW5nby5jb3JlLmNvbnRleHRfcHJvY2Vzc29ycy5zdGF0aWMnLAorICdkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMudHonLAorICdkamFuZ28uY29udHJpYi5tZXNzYWdlcy5jb250ZXh0X3Byb2Nlc3NvcnMubWVzc2FnZXMnLAorICJkamFuZ28uY29yZS5jb250ZXh0X3Byb2Nlc3NvcnMucmVxdWVzdCIsCisgJ3RvYXN0ZXJndWkudmlld3MubWFuYWdlZGNvbnRleHRwcm9jZXNzb3InLAorICkKKworSU5TVEFMTEVEX0FQUFMgPSAoCisgICAgJ2RqYW5nby5jb250cmliLmF1dGgnLAorICAgICdkamFuZ28uY29udHJpYi5jb250ZW50dHlwZXMnLAorICAgICdkamFuZ28uY29udHJpYi5tZXNzYWdlcycsCisgICAgJ2RqYW5nby5jb250cmliLnNlc3Npb25zJywKKyAgICAnZGphbmdvLmNvbnRyaWIuYWRtaW4nLAorICAgICdkamFuZ28uY29udHJpYi5zdGF0aWNmaWxlcycsCisKKyAgICAjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBhZG1pbiBkb2N1bWVudGF0aW9uOgorICAgICMgJ2RqYW5nby5jb250cmliLmFkbWluZG9jcycsCisgICAgJ2RqYW5nby5jb250cmliLmh1bWFuaXplJywKKyAgICAnYmxkY29sbGVjdG9yJywKKyAgICAndG9hc3Rlcm1haW4nLAorICAgICdzb3V0aCcsCispCisKKworSU5URVJOQUxfSVBTID0gWycxMjcuMC4wLjEnLCAnMTkyLjE2OC4yLjI4J10KKworIyBMb2FkIGRqYW5nby1mcmVzaCBpcyBUT0FTVEVSX0RFVkVMIGlzIHNldCwgYW5kIHRoZSBtb2R1bGUgaXMgYXZhaWxhYmxlCitGUkVTSF9FTkFCTEVEID0gRmFsc2UKK2lmIG9zLmVudmlyb24uZ2V0KCdUT0FTVEVSX0RFVkVMJywgTm9uZSkgaXMgbm90IE5vbmU6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgZnJlc2gKKyAgICAgICAgTUlERExFV0FSRV9DTEFTU0VTID0gKCJmcmVzaC5taWRkbGV3YXJlLkZyZXNoTWlkZGxld2FyZSIsKSArIE1JRERMRVdBUkVfQ0xBU1NFUworICAgICAgICBJTlNUQUxMRURfQVBQUyA9IElOU1RBTExFRF9BUFBTICsgKCdmcmVzaCcsKQorICAgICAgICBGUkVTSF9FTkFCTEVEID0gVHJ1ZQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCitERUJVR19QQU5FTF9FTkFCTEVEID0gRmFsc2UKK2lmIG9zLmVudmlyb24uZ2V0KCdUT0FTVEVSX0RFVkVMJywgTm9uZSkgaXMgbm90IE5vbmU6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgZGVidWdfdG9vbGJhciwgZGVidWdfcGFuZWwKKyAgICAgICAgTUlERExFV0FSRV9DTEFTU0VTID0gKCdkZWJ1Z19wYW5lbC5taWRkbGV3YXJlLkRlYnVnUGFuZWxNaWRkbGV3YXJlJywpICsgTUlERExFV0FSRV9DTEFTU0VTCisgICAgICAgICNNSURETEVXQVJFX0NMQVNTRVMgPSBNSURETEVXQVJFX0NMQVNTRVMgKyAoJ2RlYnVnX3Rvb2xiYXIubWlkZGxld2FyZS5EZWJ1Z1Rvb2xiYXJNaWRkbGV3YXJlJywpCisgICAgICAgIElOU1RBTExFRF9BUFBTID0gSU5TVEFMTEVEX0FQUFMgKyAoJ2RlYnVnX3Rvb2xiYXInLCdkZWJ1Z19wYW5lbCcsKQorICAgICAgICBERUJVR19QQU5FTF9FTkFCTEVEID0gVHJ1ZQorCisgICAgICAgICMgdGhpcyBjYWNoZSBiYWNrZW5kIHdpbGwgYmUgdXNlZCBieSBkamFuZ28tZGVidWctcGFuZWwKKyAgICAgICAgQ0FDSEVTWydkZWJ1Zy1wYW5lbCddID0geworICAgICAgICAgICAgICAgICdCQUNLRU5EJzogJ2RqYW5nby5jb3JlLmNhY2hlLmJhY2tlbmRzLmZpbGViYXNlZC5GaWxlQmFzZWRDYWNoZScsCisgICAgICAgICAgICAgICAgJ0xPQ0FUSU9OJzogJy92YXIvdG1wL2RlYnVnLXBhbmVsLWNhY2hlJywKKyAgICAgICAgICAgICAgICAnVElNRU9VVCc6IDMwMCwKKyAgICAgICAgICAgICAgICAnT1BUSU9OUyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ01BWF9FTlRSSUVTJzogMjAwCisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworCitTT1VUSF9URVNUU19NSUdSQVRFID0gRmFsc2UKKworCisjIFdlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFuZCBpbnN0YWxsIGFwcGxpY2F0aW9ucyBoZXJlIGlmCisjIHRoZXkgaGF2ZSBhICdtb2RlbHMucHknIG9yICd2aWV3cy5weScgZmlsZQoraW1wb3J0IG9zCitjdXJyZW50ZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorZm9yIHQgaW4gb3Mud2Fsayhvcy5wYXRoLmRpcm5hbWUoY3VycmVudGRpcikpOgorICAgIG1vZHVsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHRbMF0pCisgICAgI2lmIHdlIGhhdmUgYSB2aXJ0dWFsZW52IHNraXAgaXQgdG8gYXZvaWQgaW5jb3JyZWN0IGltcG9ydHMKKyAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ1ZJUlRVQUxfRU5WJykgYW5kIG9zLmVudmlyb25bJ1ZJUlRVQUxfRU5WJ10gaW4gdFswXToKKyAgICAgICAgY29udGludWUKKworICAgIGlmICgidmlld3MucHkiIGluIHRbMl0gb3IgIm1vZGVscy5weSIgaW4gdFsyXSkgYW5kIG5vdCBtb2R1bGVuYW1lIGluIElOU1RBTExFRF9BUFBTOgorICAgICAgICBJTlNUQUxMRURfQVBQUyA9IElOU1RBTExFRF9BUFBTICsgKG1vZHVsZW5hbWUsKQorCisjIEEgc2FtcGxlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4gVGhlIG9ubHkgdGFuZ2libGUgbG9nZ2luZworIyBwZXJmb3JtZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uIGlzIHRvIHNlbmQgYW4gZW1haWwgdG8KKyMgdGhlIHNpdGUgYWRtaW5zIG9uIGV2ZXJ5IEhUVFAgNTAwIGVycm9yIHdoZW4gREVCVUc9RmFsc2UuCisjIFNlZSBodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi9kZXYvdG9waWNzL2xvZ2dpbmcgZm9yCisjIG1vcmUgZGV0YWlscyBvbiBob3cgdG8gY3VzdG9taXplIHlvdXIgbG9nZ2luZyBjb25maWd1cmF0aW9uLgorTE9HR0lORyA9IHsKKyAgICAndmVyc2lvbic6IDEsCisgICAgJ2Rpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycyc6IEZhbHNlLAorICAgICdmaWx0ZXJzJzogeworICAgICAgICAncmVxdWlyZV9kZWJ1Z19mYWxzZSc6IHsKKyAgICAgICAgICAgICcoKSc6ICdkamFuZ28udXRpbHMubG9nLlJlcXVpcmVEZWJ1Z0ZhbHNlJworICAgICAgICB9CisgICAgfSwKKyAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgJ2RhdGV0aW1lJzogeworICAgICAgICAgICAgJ2Zvcm1hdCc6ICclKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJworICAgICAgICB9CisgICAgfSwKKyAgICAnaGFuZGxlcnMnOiB7CisgICAgICAgICdtYWlsX2FkbWlucyc6IHsKKyAgICAgICAgICAgICdsZXZlbCc6ICdFUlJPUicsCisgICAgICAgICAgICAnZmlsdGVycyc6IFsncmVxdWlyZV9kZWJ1Z19mYWxzZSddLAorICAgICAgICAgICAgJ2NsYXNzJzogJ2RqYW5nby51dGlscy5sb2cuQWRtaW5FbWFpbEhhbmRsZXInCisgICAgICAgIH0sCisgICAgICAgICdjb25zb2xlJzogeworICAgICAgICAgICAgJ2xldmVsJzogJ0RFQlVHJywKKyAgICAgICAgICAgICdjbGFzcyc6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgJ2Zvcm1hdHRlcic6ICdkYXRldGltZScsCisgICAgICAgIH0KKyAgICB9LAorICAgICdsb2dnZXJzJzogeworICAgICAgICAndG9hc3RlcicgOiB7CisgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ2NvbnNvbGUnXSwKKyAgICAgICAgICAgICdsZXZlbCc6ICdERUJVRycsCisgICAgICAgIH0sCisgICAgICAgICdkamFuZ28ucmVxdWVzdCc6IHsKKyAgICAgICAgICAgICdoYW5kbGVycyc6IFsnY29uc29sZSddLAorICAgICAgICAgICAgJ2xldmVsJzogJ1dBUk4nLAorICAgICAgICAgICAgJ3Byb3BhZ2F0ZSc6IFRydWUsCisgICAgICAgIH0sCisgICAgfQorfQorCitpZiBERUJVRyBhbmQgU1FMX0RFQlVHOgorICAgIExPR0dJTkdbJ2xvZ2dlcnMnXVsnZGphbmdvLmRiLmJhY2tlbmRzJ10gPSB7CisgICAgICAgICAgICAnbGV2ZWwnOiAnREVCVUcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydjb25zb2xlJ10sCisgICAgICAgIH0KKworCisjIElmIHdlJ3JlIHVzaW5nIHNxbGl0ZSwgd2UgbmVlZCB0byB0d2VhayB0aGUgcGVyZm9ybWFuY2UgYSBiaXQKK2Zyb20gZGphbmdvLmRiLmJhY2tlbmRzLnNpZ25hbHMgaW1wb3J0IGNvbm5lY3Rpb25fY3JlYXRlZAorZGVmIGFjdGl2YXRlX3N5bmNocm9ub3VzX29mZihzZW5kZXIsIGNvbm5lY3Rpb24sICoqa3dhcmdzKToKKyAgICBpZiBjb25uZWN0aW9uLnZlbmRvciA9PSAnc3FsaXRlJzoKKyAgICAgICAgY3Vyc29yID0gY29ubmVjdGlvbi5jdXJzb3IoKQorICAgICAgICBjdXJzb3IuZXhlY3V0ZSgnUFJBR01BIHN5bmNocm9ub3VzID0gMDsnKQorY29ubmVjdGlvbl9jcmVhdGVkLmNvbm5lY3QoYWN0aXZhdGVfc3luY2hyb25vdXNfb2ZmKQorIworCisKK2NsYXNzIEludmFsaWRTdHJpbmcoc3RyKToKKyAgICBkZWYgX19tb2RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGZyb20gZGphbmdvLnRlbXBsYXRlLmJhc2UgaW1wb3J0IFRlbXBsYXRlU3ludGF4RXJyb3IKKyAgICAgICAgcmFpc2UgVGVtcGxhdGVTeW50YXhFcnJvcigKKyAgICAgICAgICAgICJVbmRlZmluZWQgdmFyaWFibGUgb3IgdW5rbm93biB2YWx1ZSBmb3I6IFwiJXNcIiIgJSBvdGhlcikKKworVEVNUExBVEVfU1RSSU5HX0lGX0lOVkFMSUQgPSBJbnZhbGlkU3RyaW5nKCIlcyIpCisKK2ltcG9ydCBzeXMKK3N5cy5wYXRoLmFwcGVuZCgKKyAgICBvcy5wYXRoLmpvaW4oCisgICAgb3MucGF0aC5qb2luKAorICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSwKKyAgICAgICAgICAgICJjb250cmliIiksCisgICAgICAgICAgICAiZGphbmdvLWFnZ3JlZ2F0ZS1pZi1tYXN0ZXIiKQorICAgICkKZGlmZiAtLWdpdCBhL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weSBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vdXJscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjE1ODhhCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi91cmxzLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIEJpdEJha2UgVG9hc3RlciBJbXBsZW1lbnRhdGlvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgICAgICAgIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHBhdHRlcm5zLCBpbmNsdWRlLCB1cmwKK2Zyb20gZGphbmdvLnZpZXdzLmdlbmVyaWMgaW1wb3J0IFJlZGlyZWN0VmlldworZnJvbSBkamFuZ28udmlld3MuZGVjb3JhdG9ycy5jYWNoZSBpbXBvcnQgbmV2ZXJfY2FjaGUKKworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRvYXN0ZXIiKQorCisjIFVuY29tbWVudCB0aGUgbmV4dCB0d28gbGluZXMgdG8gZW5hYmxlIHRoZSBhZG1pbjoKK2Zyb20gZGphbmdvLmNvbnRyaWIgaW1wb3J0IGFkbWluCithZG1pbi5hdXRvZGlzY292ZXIoKQorCit1cmxwYXR0ZXJucyA9IHBhdHRlcm5zKCcnLAorCisgICAgIyBFeGFtcGxlczoKKyAgICAjIHVybChyJ150b2FzdGVyLycsIGluY2x1ZGUoJ3RvYXN0ZXIuZm9vLnVybHMnKSksCisKKyAgICAjIFVuY29tbWVudCB0aGUgYWRtaW4vZG9jIGxpbmUgYmVsb3cgdG8gZW5hYmxlIGFkbWluIGRvY3VtZW50YXRpb246CisgICAgIyB1cmwocideYWRtaW4vZG9jLycsIGluY2x1ZGUoJ2RqYW5nby5jb250cmliLmFkbWluZG9jcy51cmxzJykpLAorCisKKyAgICAjIFRoaXMgaXMgaGVyZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB3aWxsIGJlIGRlcHJlY2F0ZWQKKyAgICAjIGluIHRoZSBmdXR1cmUuCisgICAgdXJsKHInXm9ybS9ldmVudGZpbGUkJywgJ2JsZGNvbGxlY3Rvci52aWV3cy5ldmVudGZpbGUnKSwKKworICAgICMgaWYgbm8gYXBwbGljYXRpb24gaXMgc2VsZWN0ZWQsIHdlIGhhdmUgdGhlIG1hZ2ljIHRvYXN0ZXJndWkgYXBwIGhlcmUKKyAgICB1cmwocideJCcsIG5ldmVyX2NhY2hlKFJlZGlyZWN0Vmlldy5hc192aWV3KHVybD0nL3RvYXN0ZXJndWkvJykpKSwKKykKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCisKK2lmIHRvYXN0ZXJtYWluLnNldHRpbmdzLkZSRVNIX0VOQUJMRUQ6CisgICAgdXJscGF0dGVybnMuaW5zZXJ0KDEsIHVybChyJycsIGluY2x1ZGUoJ2ZyZXNoLnVybHMnKSkpCisgICAgI2xvZ2dlci5pbmZvKCJFbmFibGVkIGRqYW5nby1mcmVzaCBleHRlbnNpb24iKQorCitpZiB0b2FzdGVybWFpbi5zZXR0aW5ncy5ERUJVR19QQU5FTF9FTkFCTEVEOgorICAgIGltcG9ydCBkZWJ1Z190b29sYmFyCisgICAgdXJscGF0dGVybnMuaW5zZXJ0KDEsIHVybChyJycsIGluY2x1ZGUoZGVidWdfdG9vbGJhci51cmxzKSkpCisgICAgI2xvZ2dlci5pbmZvKCJFbmFibGVkIGRqYW5nb190b29sYmFyIGV4dGVuc2lvbiIpCisKKworaWYgdG9hc3Rlcm1haW4uc2V0dGluZ3MuTUFOQUdFRDoKKyAgICB1cmxwYXR0ZXJucyA9IFsKKyAgICAgICAgIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgdGhlIGFkbWluOgorICAgICAgICB1cmwocideYWRtaW4vJywgaW5jbHVkZShhZG1pbi5zaXRlLnVybHMpKSwKKyAgICBdICsgdXJscGF0dGVybnMKKyMgQXV0b21hdGljYWxseSBkaXNjb3ZlciB1cmxzLnB5IGluIHZhcmlvdXMgYXBwcywgYmVzaWRlIG91ciBvd24KKyMgYW5kIG1hcCBtb2R1bGUgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdHRlcm5zCisKK2ltcG9ydCBvcworY3VycmVudGRpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK2ZvciB0IGluIG9zLndhbGsob3MucGF0aC5kaXJuYW1lKGN1cnJlbnRkaXIpKToKKyAgICAjaWYgd2UgaGF2ZSBhIHZpcnR1YWxlbnYgc2tpcCBpdCB0byBhdm9pZCBpbmNvcnJlY3QgaW1wb3J0cworICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgnVklSVFVBTF9FTlYnKSBhbmQgb3MuZW52aXJvblsnVklSVFVBTF9FTlYnXSBpbiB0WzBdOgorICAgICAgICBjb250aW51ZQorCisgICAgaWYgInVybHMucHkiIGluIHRbMl0gYW5kIHRbMF0gIT0gY3VycmVudGRpcjoKKyAgICAgICAgbW9kdWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodFswXSkKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSB0aGlzIG1vZHVsZSBuYW1lIGluCisgICAgICAgIGNvbmZsaWN0ID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gdXJscGF0dGVybnM6CisgICAgICAgICAgICBpZiBwLnJlZ2V4LnBhdHRlcm4gPT0gJ14nICsgbW9kdWxlbmFtZSArICcvJzoKKyAgICAgICAgICAgICAgICBjb25mbGljdCA9IFRydWUKKyAgICAgICAgaWYgbm90IGNvbmZsaWN0OgorICAgICAgICAgICAgdXJscGF0dGVybnMuaW5zZXJ0KDAsIHVybChyJ14nICsgbW9kdWxlbmFtZSArICcvJywgaW5jbHVkZSAoIG1vZHVsZW5hbWUgKyAnLnVybHMnKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIud2FybigiTW9kdWxlIFwnJXNcJyBoYXMgYSByZWdleHAgY29uZmxpY3QsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHVybHBhdHRlcm5zIiAlIG1vZHVsZW5hbWUpCisKK2Zyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CisjbG9nZ2VyLmRlYnVnKCJ1cmxwYXR0ZXJucyBsaXN0ICVzIiwgcGZvcm1hdCh1cmxwYXR0ZXJucykpCmRpZmYgLS1naXQgYS9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkgYi9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYjMxNAotLS0gL2Rldi9udWxsCisrKyBiL2JpdGJha2UvbGliL3RvYXN0ZXIvdG9hc3Rlcm1haW4vd3NnaS5weQpAQCAtMCwwICsxLDM1IEBACisiIiIKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCitXU0dJIGNvbmZpZyBmb3IgVG9hc3RlciBwcm9qZWN0LgorCitUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgV1NHSSBhcHBsaWNhdGlvbiB1c2VkIGJ5IERqYW5nbydzIGRldmVsb3BtZW50IHNlcnZlcgorYW5kIGFueSBwcm9kdWN0aW9uIFdTR0kgZGVwbG95bWVudHMuIEl0IHNob3VsZCBleHBvc2UgYSBtb2R1bGUtbGV2ZWwgdmFyaWFibGUKK25hbWVkIGBgYXBwbGljYXRpb25gYC4gRGphbmdvJ3MgYGBydW5zZXJ2ZXJgYCBhbmQgYGBydW5mY2dpYGAgY29tbWFuZHMgZGlzY292ZXIKK3RoaXMgYXBwbGljYXRpb24gdmlhIHRoZSBgYFdTR0lfQVBQTElDQVRJT05gYCBzZXR0aW5nLgorCitVc3VhbGx5IHlvdSB3aWxsIGhhdmUgdGhlIHN0YW5kYXJkIERqYW5nbyBXU0dJIGFwcGxpY2F0aW9uIGhlcmUsIGJ1dCBpdCBhbHNvCittaWdodCBtYWtlIHNlbnNlIHRvIHJlcGxhY2UgdGhlIHdob2xlIERqYW5nbyBXU0dJIGFwcGxpY2F0aW9uIHdpdGggYSBjdXN0b20gb25lCit0aGF0IGxhdGVyIGRlbGVnYXRlcyB0byB0aGUgRGphbmdvIG9uZS4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBpbnRyb2R1Y2UgV1NHSQorbWlkZGxld2FyZSBoZXJlLCBvciBjb21iaW5lIGEgRGphbmdvIGFwcGxpY2F0aW9uIHdpdGggYW4gYXBwbGljYXRpb24gb2YgYW5vdGhlcgorZnJhbWV3b3JrLgorCisiIiIKK2ltcG9ydCBvcworCisjIFdlIGRlZmVyIHRvIGEgREpBTkdPX1NFVFRJTkdTX01PRFVMRSBhbHJlYWR5IGluIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBicmVha3MKKyMgaWYgcnVubmluZyBtdWx0aXBsZSBzaXRlcyBpbiB0aGUgc2FtZSBtb2Rfd3NnaSBwcm9jZXNzLiBUbyBmaXggdGhpcywgdXNlCisjIG1vZF93c2dpIGRhZW1vbiBtb2RlIHdpdGggZWFjaCBzaXRlIGluIGl0cyBvd24gZGFlbW9uIHByb2Nlc3MsIG9yIHVzZQorIyBvcy5lbnZpcm9uWyJESkFOR09fU0VUVElOR1NfTU9EVUxFIl0gPSAiVG9hc3Rlci5zZXR0aW5ncyIKK29zLmVudmlyb24uc2V0ZGVmYXVsdCgiREpBTkdPX1NFVFRJTkdTX01PRFVMRSIsICJ0b2FzdGVybWFpbi5zZXR0aW5ncyIpCisKKyMgVGhpcyBhcHBsaWNhdGlvbiBvYmplY3QgaXMgdXNlZCBieSBhbnkgV1NHSSBzZXJ2ZXIgY29uZmlndXJlZCB0byB1c2UgdGhpcworIyBmaWxlLiBUaGlzIGluY2x1ZGVzIERqYW5nbydzIGRldmVsb3BtZW50IHNlcnZlciwgaWYgdGhlIFdTR0lfQVBQTElDQVRJT04KKyMgc2V0dGluZyBwb2ludHMgaGVyZS4KK2Zyb20gZGphbmdvLmNvcmUud3NnaSBpbXBvcnQgZ2V0X3dzZ2lfYXBwbGljYXRpb24KK2FwcGxpY2F0aW9uID0gZ2V0X3dzZ2lfYXBwbGljYXRpb24oKQorCisjIEFwcGx5IFdTR0kgbWlkZGxld2FyZSBoZXJlLgorIyBmcm9tIGhlbGxvd29ybGQud3NnaSBpbXBvcnQgSGVsbG9Xb3JsZEFwcGxpY2F0aW9uCisjIGFwcGxpY2F0aW9uID0gSGVsbG9Xb3JsZEFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uKQpkaWZmIC0tZ2l0IGEvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQgYi9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI1MjkzCi0tLSAvZGV2L251bGwKKysrIGIvYml0YmFrZS90b2FzdGVyLXJlcXVpcmVtZW50cy50eHQKQEAgLTAsMCArMSw0IEBACitEamFuZ289PTEuNgorU291dGg9PTAuOC40CithcmdwYXJzZT09MS4yLjEKK3dzZ2lyZWY9PTAuMS4yCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTk3YTQwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtMCwwICsxLDQ1OCBAQAorIyBUaGlzIGlzIGEgc2luZ2xlIE1ha2VmaWxlIHRvIGhhbmRsZSBhbGwgZ2VuZXJhdGVkIFlvY3RvIFByb2plY3QgZG9jdW1lbnRzLAorIyB3aGljaCBpbmNsdWRlcyB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbCBhbmQgdGhlIFRvYXN0ZXIgVXNlciBNYW51YWwuCisjIFRoZSBNYWtlZmlsZSBuZWVkcyB0byBsaXZlIGluIHRoZSBkb2N1bWVudHMgZGlyZWN0b3J5IGFuZCBhbGwgZmlndXJlcyB1c2VkCisjIGluIGFueSBtYW51YWxzIG11c3QgYmUgLlBORyBmaWxlcyBhbmQgbGl2ZSBpbiB0aGUgaW5kaXZpZHVhbCBib29rJ3MgZmlndXJlcworIyBkaXJlY3RvcnkgYXMgd2VsbCBhcyBpbiB0aGUgZmlndXJlcyBkaXJlY3RvcnkgZm9yIHRoZSBtZWdhLW1hbnVhbC4KKyMKKyMgU29tZSBtYW51YWxzIGFyZSBhdmFpbGFibGUgYXMgbGlua2VkIGhlbHAgdGhyb3VnaCB0aGUgRWNsaXBzZSBkZXZlbG9wbWVudAorIyBzeXN0ZW0uICBUaGVzZSBtYW51YWxzIGFsc28gaW5jbHVkZSBhbiAiZWNsaXBzZSIgc3ViLWRpcmVjdG9yeSBhcyBwYXJ0IG9mCisjIHRoZSBtYWtlIHByb2Nlc3MuCisjCisjIE5vdGUgdGhhdCB0aGUgZmlndXJlcyBmb3IgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsCisjIGRpZmZlciBkZXBlbmRpbmcgb24gdGhlIEJSQU5DSCBiZWluZyBidWlsdC4KKyMKKyMgVGhlIE1ha2VmaWxlIGhhcyB0aGVzZSB0YXJnZXRzOgorIyAgICBhbGw6ICAgICAgIElmIHlvdSBsZWF2ZSBvZmYgdGhlIHRhcmdldCB0aGVuICJhbGwiIGlzIGltcGxpZWQuCisjICAgICAgICAgICAgICAgWW91IHdpbGwgZ2VuZXJhdGUgSFRNTCwgZWNsaXBzZSBoZWxwIChpZiBhcHBsaWNhYmxlKSwKKyMgICAgICAgICAgICAgICBhbmQgYSB0YXJiYWxsIG9mIGZpbGVzLgorIworIyAgICBwZGY6CWdlbmVyYXRlcyBhIFBERiB2ZXJzaW9uIG9mIGEgbWFudWFsLiAgTm90IHZhbGlkIGZvciB0aGUKKyMJCVF1aWNrIFN0YXJ0IG9yIHRoZSBtZWdhLW1hbnVhbCAoc2luZ2xlLCBsYXJnZSBIVE1MIGZpbGUKKyMJCWNvbXByaXNlZCBvZiBhbGwgWW9jdG8gUHJvamVjdCBtYW51YWxzKS4KKyMgICAgaHRtbDoJZ2VuZXJhdGVzIGFuIEhUTUwgdmVyc2lvbiBvZiBhIG1hbnVhbC4KKyMgICAgZWNsaXBzZToJZ2VuZXJhdGVzIGFuIEhUTUwgdmVyc2lvbiBvZiBhIG1hbnVhbCB0aGF0IGNhbiBiZSB1c2VkIGFzCisjCQllY2xpcHNlIGhlbHAgKGluY2x1ZGluZyBuZWNlc3NhcnkgbWV0YWRhdGEgZmlsZXMpLgorIyAgICB0YXJiYWxsOgljcmVhdGVzIGEgdGFyYmFsbCBmb3IgdGhlIGRvYyBmaWxlcy4KKyMgICAgdmFsaWRhdGU6CXZhbGlkYXRlcworIyAgICBwdWJsaXNoOglwdXNoZXMgZ2VuZXJhdGVkIGZpbGVzIHRvIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUKKyMgICAgY2xlYW46CXJlbW92ZXMgZmlsZXMKKyMKKyMgVGhlIE1ha2VmaWxlIGNhbiBnZW5lcmF0ZSBhbiBIVE1MIGFuZCBQREYgdmVyc2lvbiBvZiBldmVyeSBkb2N1bWVudCBleGNlcHQgdGhlCisjIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgYW5kIHRoZSBzaW5nbGUsIEhUTUwgbWVnYS1tYW51YWwsIHdoaWNoIGlzIGNvbXByaXNlZAorIyBvZiBhbGwgdGhlIGluZGl2aWR1YWwgWW9jdG8gUHJvamVjdCBtYW51YWxzLiAgWW91IGNhbiBnZW5lcmF0ZSB0aGVzZSB0d28gbWFudWFscworIyBpbiBIVE1MIGZvcm0gb25seS4gIFRoZSB2YXJpYWJsZSBET0MgaW5kaWNhdGVzIHRoZSBmb2xkZXIgbmFtZSBmb3IgYSBnaXZlbiBtYW51YWwuCisjIFRoZSB2YXJpYWJsZSBWRVIgcmVwcmVzZW50cyB0aGUgZGlzdHJvIHZlcnNpb24gb2YgdGhlIFlvY3RvIFJlbGVhc2UgZm9yIHdoaWNoIHRoZQorIyBtYW51YWxzIGFyZSBiZWluZyBnZW5lcmF0ZWQuICBUaGUgdmFyaWFibGUgQlJBTkNIIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlCisjIGJyYW5jaCAoZWRpc29uIG9yIGRlbnppbCkgYW5kIGlzIHVzZWQgb25seSB3aGVuIERPQz1kZXYtbWFudWFsIG9yCisjIERPQz1tZWdhLW1hbnVhbC4gIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEJSQU5DSCwgdGhlIGRlZmF1bHQgYnJhbmNoIHVzZWQKKyMgd2lsbCBiZSBmb3IgdGhlIGxhdGVzdCBZb2N0byBQcm9qZWN0IHJlbGVhc2UuICBJZiB5b3UgYnVpbGQgZm9yIGVpdGhlcgorIyBlZGlzb24gb3IgZGVuemlsLCB5b3UgbXVzdCB1c2UgQlJBTkNILiBZb3UgZG8gbm90IG5lZWQgdG8gdXNlIEJSQU5DSCBmb3IKKyMgYW55IHJlbGVhc2UgYmV5b25kIGRlbnppbC4KKyMKKyMgVG8gYnVpbGQgYSBtYW51YWwsIHlvdSBtdXN0IGludm9rZSBNYWtlZmlsZSB3aXRoIHRoZSBET0MgYXJndW1lbnQuICBJZiB5b3UKKyMgYXJlIGdvaW5nIHRvIHB1Ymxpc2ggdGhlIG1hbnVhbCwgdGhlbiB5b3UgbXVzdCBpbnZva2UgTWFrZWZpbGUgd2l0aCBib3RoIHRoZQorIyBET0MgYW5kIHRoZSBWRVIgYXJndW1lbnQuICBGdXJ0aGVybW9yZSwgaWYgeW91IGFyZSBidWlsZGluZyBvciBwdWJsaXNoaW5nCisjIHRoZSBlZGlzb24gb3IgZGVuemlsIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBvcgorIyB0aGUgbWVnYS1tYW51YWwsIHlvdSBtdXN0IGFsc28gdXNlIHRoZSBCUkFOQ0ggYXJndW1lbnQuCisjCisjIEV4YW1wbGVzOgorIworIyAgICAgbWFrZSBET0M9YnNwLWd1aWRlCisjICAgICBtYWtlIGh0bWwgRE9DPXlvY3RvLXByb2plY3QtcXMKKyMgICAgIG1ha2UgcGRmIERPQz1yZWYtbWFudWFsCisjICAgICBtYWtlIERPQz1kZXYtbWFudWFsIEJSQU5DSD1lZGlzb24KKyMgICAgIG1ha2UgRE9DPW1lZ2EtbWFudWFsIEJSQU5DSD1kZW56aWwKKyMKKyMgVGhlIGZpcnN0IGV4YW1wbGUgZ2VuZXJhdGVzIHRoZSBIVE1MIGFuZCBFY2xpcHNlIGhlbHAgdmVyc2lvbnMgb2YgdGhlIEJTUCBHdWlkZS4KKyMgVGhlIHNlY29uZCBleGFtcGxlIGdlbmVyYXRlcyB0aGUgSFRNTCB2ZXJzaW9uIG9ubHkgb2YgdGhlIFF1aWNrIFN0YXJ0LiAgTm90ZQorIyB0aGF0IHRoZSBRdWljayBTdGFydCBvbmx5IGhhcyBhbiBIVE1MIHZlcnNpb24gYXZhaWxhYmxlLiAgU28sIHRoZQorIyAnbWFrZSBET0M9eW9jdG8tcHJvamVjdC1xcycgY29tbWFuZCB3b3VsZCBiZSBlcXVpdmFsZW50LiBUaGUgdGhpcmQgZXhhbXBsZQorIyBnZW5lcmF0ZXMganVzdCB0aGUgUERGIHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyMgVGhlIGZvdXJ0aCBleGFtcGxlIGdlbmVyYXRlcyB0aGUgSFRNTCAnZWRpc29uJyB2ZXJzaW9uIGFuZCAoaWYgYXZhaWxhYmxlKQorIyB0aGUgRWNsaXBzZSBoZWxwIHZlcnNpb24gb2YgdGhlIFlQIERldmVsb3BtZW50IE1hbnVhbC4gIFRoZSBsYXN0IGV4YW1wbGUKKyMgZ2VuZXJhdGVzIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIG1lZ2EtbWFudWFsIGFuZCB1c2VzIHRoZSAnZGVuemlsJworIyBicmFuY2ggd2hlbiBjaG9vc2luZyBmaWd1cmVzIGZvciB0aGUgdGFyYmFsbCBvZiBmaWd1cmVzLiAgQW55IGV4YW1wbGUgdGhhdCBkb2VzCisjIG5vdCB1c2UgdGhlIEJSQU5DSCBhcmd1bWVudCBidWlsZHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbWFudWFsIHNldC4KKyMKKyMgVGhlIHB1Ymxpc2ggdGFyZ2V0IHB1c2hlcyB0aGUgZ2VuZXJhdGVkIG1hbnVhbHMgdG8gdGhlIFlvY3RvIFByb2plY3QKKyMgd2Vic2l0ZS4gIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9uIHRoZSBZUCB0ZWFtLCB5b3Ugd2lsbCBub3Qgc3VjY2VlZCBpbgorIyBwdXNoaW5nIG1hbnVhbHMgdG8gdGhpcyBzZXJ2ZXIuICBBbGwgZmlsZXMgbmVlZGVkIGZvciB0aGUgbWFudWFsJ3MgSFRNTCBmb3JtIGFyZQorIyBwdXNoZWQgYXMgd2VsbCBhcyBhcHBsaWNhYmxlIEVjbGlwc2UgdmVyc2lvbnMuCisjCisjIEV4YW1wbGVzOgorIworIyAgICBtYWtlIHB1Ymxpc2ggRE9DPWJzcC1ndWlkZSBWRVI9MS43CisjICAgIG1ha2UgcHVibGlzaCBET0M9YWR0LW1hbnVhbCBWRVI9MS42CisjICAgIG1ha2UgcHVibGlzaCBET0M9ZGV2LW1hbnVhbCBWRVI9MS4xLjEgQlJBTkNIPWVkaXNvbgorIyAgICBtYWtlIHB1Ymxpc2ggRE9DPWRldi1tYW51YWwgVkVSPTEuMiBCUkFOQ0g9ZGVuemlsCisjCisjIFRoZSBmaXJzdCBleGFtcGxlIHB1Ymxpc2hlcyB0aGUgMS43IHZlcnNpb24gb2YgYm90aCB0aGUgUERGIGFuZCBIVE1MIHZlcnNpb25zIG9mCisjIHRoZSBCU1AgR3VpZGUuICBUaGUgc2Vjb25kIGV4YW1wbGUgcHVibGlzaGVzIHRoZSAxLjYgdmVyc2lvbiBvZiBib3RoIHRoZSBQREYgYW5kCisjIEhUTUwgdmVyc2lvbnMgb2YgdGhlIEFEVCBNYW51YWwuIFRoZSB0aGlyZCBleGFtcGxlIHB1Ymxpc2hlcyB0aGUgMS4xLjEgdmVyc2lvbiBvZgorIyB0aGUgUERGIGFuZCBIVE1MIFlQIERldmVsb3BtZW50IE1hbnVhbCBmb3IgdGhlICdlZGlzb24nIGJyYW5jaC4gIFRoZSBmb3VydGggZXhhbXBsZQorIyBwdWJsaXNoZXMgdGhlIDEuMiB2ZXJzaW9uIG9mIHRoZSBQREYgYW5kIEhUTUwgWVAgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciB0aGUKKyMgJ2RlbnppbCcgYnJhbmNoLgorIworCitpZmVxICgkKERPQyksYnNwLWd1aWRlKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gYnNwLXN0eWxlLmNzcyBic3AtZ3VpZGUuaHRtbCBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorICAgICAgICAgICBlY2xpcHNlCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCitpZmVxICgkKERPQyksZGV2LW1hbnVhbCkKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCisjCisjIE5vdGUgdGhhdCB0aGUgdGFyZmlsZSBtaWdodCBwcm9kdWNlIHRoZSAiQ2Fubm90IHN0YXQ6IE5vIHN1Y2ggZmlsZSBvcgorIyBkaXJlY3RvcnkiIGVycm9yIG1lc3NhZ2UgZm9yIC5QTkcgZmlsZXMgdGhhdCBhcmUgbm90IHByZXNlbnQgd2hlbiBidWlsZGluZworIyBhIHBhcnRpY3VsYXIgYnJhbmNoLiAgVGhlIGxpc3Qgb2YgZmlsZXMgaXMgYWxsLWluY2x1c2l2ZSBmb3IgYWxsIGJyYW5jaGVzLgorIyBOb3RlLCBpZiB5b3UgZG9uJ3QgcHJvdmlkZSBhIEJSQU5DSCBvcHRpb24sIGl0IGRlZmF1bHRzIHRvIHRoZSBsYXRlc3Qgc3R1ZmYuCisjIFRoaXMgd291bGQgYmUgYXBwcm9wcmlhdGUgZm9yICJtYXN0ZXIiIGJyYW5jaC4KKyMKKworCWlmZXEgKCQoQlJBTkNIKSxlZGlzb24pCitUQVJGSUxFUyA9IGRldi1zdHlsZS5jc3MgZGV2LW1hbnVhbC5odG1sIFwKKyAgICAgICAgICAgZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZXhhbXBsZS1yZXBvcy1lZGlzb24ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0zLWVkaXNvbi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3dpcC5wbmcKKwllbHNlIGlmZXEgKCQoQlJBTkNIKSxkZW56aWwpCitUQVJGSUxFUyA9IGRldi1zdHlsZS5jc3MgZGV2LW1hbnVhbC5odG1sIFwKKyAgICAgICAgICAgZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtZXhhbXBsZS1yZXBvcy1kZW56aWwucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0zLWRlbnppbC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3dpcC5wbmcKKyAgICAgICAgZWxzZQorVEFSRklMRVMgPSBkZXYtc3R5bGUuY3NzIGRldi1tYW51YWwuaHRtbCBcCisgICAgICAgICAgIGZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2Rldi10aXRsZS5wbmcgZmlndXJlcy9naXQtd29ya2Zsb3cucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIGZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKKwllbmRpZgorCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCitpZmVxICgkKERPQykseW9jdG8tcHJvamVjdC1xcykKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCitUQVJGSUxFUyA9IHlvY3RvLXByb2plY3QtcXMuaHRtbCBxcy1zdHlsZS5jc3MgZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCitpZmVxICgkKERPQyksbWVnYS1tYW51YWwpCitYU0xUT1BUUyA9IC0tc3RyaW5ncGFyYW0gaHRtbC5zdHlsZXNoZWV0IG1lZ2Etc3R5bGUuY3NzIFwKKyAgICAgICAgICAgLS1zdHJpbmdwYXJhbSAgY2hhcHRlci5hdXRvbGFiZWwgMSBcCisgICAgICAgICAgIC0tc3RyaW5ncGFyYW0gIHNlY3Rpb24uYXV0b2xhYmVsIDEgXAorICAgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCAxIFwKKyAgICAgICAgICAgLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgdGFyYmFsbAorCisJaWZlcSAoJChCUkFOQ0gpLGVkaXNvbikKK1RBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCisJZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorCWZpZ3VyZXMvcG9reS10aXRsZS5wbmcgXAorCWZpZ3VyZXMvYWR0LXRpdGxlLnBuZyBmaWd1cmVzL2JzcC10aXRsZS5wbmcgXAorCWZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKwlmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIGZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBmaWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgXAorCWZpZ3VyZXMva2VybmVsLWV4YW1wbGUtcmVwb3MtZWRpc29uLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmcgZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTMtZWRpc29uLnBuZyBcCisJZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nIGZpZ3VyZXMveXAtZG93bmxvYWQucG5nIFwKKwlmaWd1cmVzL3dpcC5wbmcKKwllbHNlIGlmZXEgKCQoQlJBTkNIKSxkZW56aWwpCitUQVJGSUxFUyA9IG1lZ2EtbWFudWFsLmh0bWwgbWVnYS1zdHlsZS5jc3MgZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgXAorICAgICAgICBmaWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZyAgXAorCWZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIFwKKwlmaWd1cmVzL3Bva3ktdGl0bGUucG5nIFwKKwlmaWd1cmVzL2FkdC10aXRsZS5wbmcgZmlndXJlcy9ic3AtdGl0bGUucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC10aXRsZS5wbmcgZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyBcCisJZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nIGZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgXAorICAgICAgICBmaWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1leGFtcGxlLXJlcG9zLWRlbnppbC5wbmcgXAorCWZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTIucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0zLWRlbnppbC5wbmcgXAorCWZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBmaWd1cmVzL3lwLWRvd25sb2FkLnBuZyBcCisJZmlndXJlcy93aXAucG5nCisgICAgICAgIGVsc2UKK1RBUkZJTEVTID0gbWVnYS1tYW51YWwuaHRtbCBtZWdhLXN0eWxlLmNzcyBmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyBcCisgICAgICAgIGZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nICBcCisJZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorCWZpZ3VyZXMvcG9reS10aXRsZS5wbmcgZmlndXJlcy9idWlsZGhpc3RvcnkucG5nIFwKKyAgICAgICAgZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZyBcCisJZmlndXJlcy9hZHQtdGl0bGUucG5nIGZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBcCisJZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZyBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKwlmaWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nIFwKKyAgICAgICAgZmlndXJlcy9kZXYtdGl0bGUucG5nIFwKKwlmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIFwKKyAgICAgICAgZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIFwKKwlmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBmaWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nIFwKKwlmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgZmlndXJlcy95cC1kb3dubG9hZC5wbmcgXAorICAgICAgICBmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBcCisgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgXAorICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcgXAorICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyBmaWd1cmVzL2x0dG5nbWFpbjAucG5nIFwKKyAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZyBmaWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nIFwKKyAgICAgICAgZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcgXAorICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIFwKKyAgICAgICAgZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcgZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nIFwKKyAgICAgICAgZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZyBmaWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcgXAorCWZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcgXAorICAgICAgICBmaWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcgZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGZpZ3VyZXMvaW1hZ2VzLnBuZyBmaWd1cmVzL3Nkay5wbmcgXAorCWZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBmaWd1cmVzL3BhdGNoaW5nLnBuZyBcCisgICAgICAgIGZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIFwKKwlmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcgXAorICAgICAgICBmaWd1cmVzL2ltYWdlLWdlbmVyYXRpb24ucG5nIFwKKwlmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyBmaWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgXAorCWZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcgZmlndXJlcy9tZWdhLXRpdGxlLnBuZyBcCisJZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyBmaWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZyBcCisJZmlndXJlcy9zaW1wbGUtY29uZmlndXJhdGlvbi5wbmcKKwllbmRpZgorCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworCitlbmRpZgorCitpZmVxICgkKERPQykscmVmLW1hbnVhbCkKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCitUQVJGSUxFUyA9IHJlZi1tYW51YWwuaHRtbCByZWYtc3R5bGUuY3NzIGZpZ3VyZXMvcG9reS10aXRsZS5wbmcgXAorCWZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZyBmaWd1cmVzL2J1aWxkaGlzdG9yeS13ZWIucG5nIGVjbGlwc2UgXAorICAgICAgICBmaWd1cmVzL2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMucG5nIGZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIFwKKwlmaWd1cmVzL3BhY2thZ2UtZmVlZHMucG5nIGZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBcCisJZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nIGZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBcCisJZmlndXJlcy9pbWFnZXMucG5nIGZpZ3VyZXMvc2RrLnBuZyBmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcgXAorCWZpZ3VyZXMvcGF0Y2hpbmcucG5nIGZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIFwKKwlmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcgZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyBcCisJZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcgZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCisKK2lmZXEgKCQoRE9DKSxhZHQtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gYWR0LW1hbnVhbC5odG1sIGFkdC1zdHlsZS5jc3MgZmlndXJlcy9hZHQtdGl0bGUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy91c2luZy1hLXByZS1idWlsdC1pbWFnZS5wbmcgXAorICAgICAgICAgICBlY2xpcHNlCitNQU5VQUxTID0gJChET0MpLyQoRE9DKS5odG1sICQoRE9DKS9lY2xpcHNlCitGSUdVUkVTID0gZmlndXJlcworU1RZTEVTSEVFVCA9ICQoRE9DKS8qLmNzcworZW5kaWYKKworaWZlcSAoJChET0MpLHByb2ZpbGUtbWFudWFsKQorWFNMVE9QVFMgPSAtLXhpbmNsdWRlCitBTExQUkVRID0gaHRtbCBlY2xpcHNlIHRhcmJhbGwKK1RBUkZJTEVTID0gcHJvZmlsZS1tYW51YWwuaHRtbCBwcm9maWxlLW1hbnVhbC1zdHlsZS5jc3MgXAorICAgICAgICAgICBmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIGZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyBmaWd1cmVzL2x0dG5nbWFpbjAucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIGZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZyBmaWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcgZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZyBcCisgICAgICAgICAgIGZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcgZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nIFwKKyAgICAgICAgICAgZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZyBmaWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZyBcCisgICAgICAgICAgIGVjbGlwc2UKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpL2VjbGlwc2UKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCitpZmVxICgkKERPQyksa2VybmVsLWRldikKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgZWNsaXBzZSB0YXJiYWxsCitUQVJGSUxFUyA9IGtlcm5lbC1kZXYuaHRtbCBrZXJuZWwtZGV2LXN0eWxlLmNzcyBcCisgICAgICAgICAgIGZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgXAorICAgICAgICAgICBmaWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIFwKKyAgICAgICAgICAgZWNsaXBzZQorTUFOVUFMUyA9ICQoRE9DKS8kKERPQykuaHRtbCAkKERPQykvZWNsaXBzZQorRklHVVJFUyA9IGZpZ3VyZXMKK1NUWUxFU0hFRVQgPSAkKERPQykvKi5jc3MKK2VuZGlmCisKK2lmZXEgKCQoRE9DKSx0b2FzdGVyLW1hbnVhbCkKK1hTTFRPUFRTID0gLS14aW5jbHVkZQorQUxMUFJFUSA9IGh0bWwgdGFyYmFsbAorVEFSRklMRVMgPSB0b2FzdGVyLW1hbnVhbC5odG1sIHRvYXN0ZXItbWFudWFsLXN0eWxlLmNzcyBcCisJICAgZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZyBmaWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZyBcCisJICAgZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmcKK01BTlVBTFMgPSAkKERPQykvJChET0MpLmh0bWwgJChET0MpLyQoRE9DKS5wZGYKK0ZJR1VSRVMgPSBmaWd1cmVzCitTVFlMRVNIRUVUID0gJChET0MpLyouY3NzCitlbmRpZgorCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbGx5IGluc3RhbGxlZCBYU0wgc3R5bGVzaGVldHMuCitYU0xfQkFTRV9VUkkgID0gaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMQorWFNMX1hIVE1MX1VSSSA9ICQoWFNMX0JBU0VfVVJJKS94aHRtbC9kb2Nib29rLnhzbAorCithbGw6ICQoQUxMUFJFUSkKKworcGRmOgoraWZlcSAoJChET0MpLHlvY3RvLXByb2plY3QtcXMpCisJQGVjaG8gIiAiCisJQGVjaG8gIkVSUk9SOiBZb3UgY2Fubm90IGdlbmVyYXRlIGEgeW9jdG8tcHJvamVjdC1xcyBQREYgZmlsZS4iCisJQGVjaG8gIiAiCisKK2Vsc2UgaWZlcSAoJChET0MpLG1lZ2EtbWFudWFsKQorCUBlY2hvICIgIgorCUBlY2hvICJFUlJPUjogWW91IGNhbm5vdCBnZW5lcmF0ZSBhIG1lZ2EtbWFudWFsIFBERiBmaWxlLiIKKwlAZWNobyAiICIKKworZWxzZQorCisJY2QgJChET0MpOyAuLi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmICQoRE9DKS54bWwgLi4vdGVtcGxhdGU7IGNkIC4uCitlbmRpZgorCitodG1sOgoraWZlcSAoJChET0MpLG1lZ2EtbWFudWFsKQorIyAgICAgICBTZWUgaHR0cDovL3d3dy5zYWdlaGlsbC5uZXQvZG9jYm9va3hzbC9IdG1sT3V0cHV0Lmh0bWwKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQnVpbGRpbmcgIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJChET0MpLmh0bWwgJChET0MpLWN1c3RvbWl6YXRpb24ueHNsICQoRE9DKS54bWw7IGNkIC4uCisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIFVzaW5nIG1lZ2EtbWFudWFsLnNlZCB0byBwcm9jZXNzIGV4dGVybmFsIGxpbmtzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgc2VkIC1mIC4uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZCA8IG1lZ2EtbWFudWFsLmh0bWwgPiBtZWdhLW91dHB1dC5odG1sOyBjZCAuLgorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDbGVhbmluZyB1cCB0cmFuc2llbnQgZmlsZSBtZWdhLW91dHB1dC5odG1sIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgcm0gbWVnYS1tYW51YWwuaHRtbDsgbXYgbWVnYS1vdXRwdXQuaHRtbCBtZWdhLW1hbnVhbC5odG1sOyBjZCAuLgorZWxzZQorIyAgICAgICBTZWUgaHR0cDovL3d3dy5zYWdlaGlsbC5uZXQvZG9jYm9va3hzbC9IdG1sT3V0cHV0Lmh0bWwKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQnVpbGRpbmcgIiQoRE9DKQorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJChET0MpLmh0bWwgJChET0MpLWN1c3RvbWl6YXRpb24ueHNsICQoRE9DKS54bWw7IGNkIC4uCitlbmRpZgorCisKK2VjbGlwc2U6IEJBU0VfRElSID0gaHRtbC8kKERPQykvCisKK2VjbGlwc2U6IGVjbGlwc2UtZ2VuZXJhdGUgZWNsaXBzZS1yZXNvbHZlLWxpbmtzCisKKy5QSE9OWSA6IGVjbGlwc2UtZ2VuZXJhdGUgZWNsaXBzZS1yZXNvbHZlLWxpbmtzCisKK2VjbGlwc2UtZ2VuZXJhdGU6CitpZmVxICgkKGZpbHRlciAkKERPQyksIGFkdC1tYW51YWwgYnNwLWd1aWRlIGRldi1tYW51YWwga2VybmVsLWRldiBwcm9maWxlLW1hbnVhbCByZWYtbWFudWFsIHlvY3RvLXByb2plY3QtcXMpLCkKKwlAZWNobyAiICIKKwlAZWNobyAiRVJST1I6IFlvdSBjYW4gb25seSBjcmVhdGUgZWNsaXBzZSBkb2N1bWVudGF0aW9uIgorCUBlY2hvICIgICAgICAgb2YgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIHBhcnRzOiIKKwlAZWNobyAiICAgICAgIC0gYWR0LW1hbnVhbCIKKwlAZWNobyAiICAgICAgIC0gYnNwLWd1aWRlIgorCUBlY2hvICIgICAgICAgLSBkZXYtbWFudWFsIgorCUBlY2hvICIgICAgICAgLSBrZXJuZWwtZGV2IgorCUBlY2hvICIgICAgICAgLSBwcm9maWxlLW1hbnVhbCIKKwlAZWNobyAiICAgICAgIC0gcmVmLW1hbnVhbCIKKwlAZWNobyAiICAgICAgIC0geW9jdG8tcHJvamVjdC1xcyIKKwlAZWNobyAiICIKK2Vsc2UKKwlAZWNobyAiICIKKwlAZWNobyAiKioqKioqKiogQnVpbGRpbmcgZWNsaXBzZSBoZWxwIG9mICIkKERPQykKKwlAZWNobyAiICIKKwljZCAkKERPQykgJiYgXAorCQl4c2x0cHJvYyAkKFhTTFRPUFRTKSBcCisJCQkJLS1zdHJpbmdwYXJhbSBiYXNlLmRpciAnJChCQVNFX0RJUiknIFwKKwkJCQktbyBlY2xpcHNlLyQoRE9DKS5odG1sIFwKKwkJCQkkKERPQyktZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCAkKERPQykueG1sICYmIFwKKwkJbXYgZWNsaXBzZS90b2MueG1sIGVjbGlwc2UvJChET0MpLXRvYy54bWwgJiYgXAorCQljcCAtcmYgJChGSUdVUkVTKSBlY2xpcHNlLyQoQkFTRV9ESVIpICYmIFwKKwkJY2QgLi47CisKKwkkKGNhbGwgbW9kaWZ5LWVjbGlwc2UpCitlbmRpZgorCitlY2xpcHNlLXJlc29sdmUtbGlua3M6CisJQGVjaG8gIiAiCisJQGVjaG8gIioqKioqKioqIFVzaW5nIGVjbGlwc2UtaGVscC5zZWQgdG8gcHJvY2VzcyBleHRlcm5hbCBsaW5rcyIKKwlAZWNobyAiICIKKwkkKGZvcmVhY2ggRklMRSwgXAorCQkkKHdpbGRjYXJkICQoRE9DKS9lY2xpcHNlL2h0bWwvJChET0MpLyouaHRtbCksIFwKKwkJJChzaGVsbCBzZWQgLWkgLWYgdG9vbHMvZWNsaXBzZS1oZWxwLnNlZCAkKEZJTEUpKSkKKwordGFyYmFsbDogaHRtbAorCUBlY2hvICIgIgorCUBlY2hvICIqKioqKioqKiBDcmVhdGluZyBUYXJiYWxsIG9mIGRvY3VtZW50IGZpbGVzIgorCUBlY2hvICIgIgorCWNkICQoRE9DKTsgdGFyIC1jdnpmICQoRE9DKS50Z3ogJChUQVJGSUxFUyk7IGNkIC4uCisKK3ZhbGlkYXRlOgorCWNkICQoRE9DKTsgeG1sbGludCAtLXBvc3R2YWxpZCAtLXhpbmNsdWRlIC0tbm9vdXQgJChET0MpLnhtbDsgY2QgLi4KKworCitwdWJsaXNoOgorCUBpZiB0ZXN0IC1mICQoRE9DKS8kKERPQykuaHRtbDsgXAorCSAgdGhlbiBcCisgICAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgICAgZWNobyAiKioqKioqKiogUHVibGlzaGluZyAiJChET0MpIi5odG1sIjsgXAorICAgICAgICAgICAgZWNobyAiICI7IFwKKyAgICAgICAgICAgIHNjcCAtciAkKE1BTlVBTFMpICQoU1RZTEVTSEVFVCkgZG9jcy55cDovdmFyL3d3dy93d3cueW9jdG9wcm9qZWN0Lm9yZy1kb2NzLyQoVkVSKS8kKERPQyk7IFwKKyAgICAgICAgICAgIGNkICQoRE9DKTsgc2NwIC1yICQoRklHVVJFUykgZG9jcy55cDovdmFyL3d3dy93d3cueW9jdG9wcm9qZWN0Lm9yZy1kb2NzLyQoVkVSKS8kKERPQyk7IFwKKwllbHNlIFwKKyAgICAgICAgICBlY2hvICIgIjsgXAorICAgICAgICAgIGVjaG8gJChET0MpIi5odG1sIG1pc3NpbmcuICBHZW5lcmF0ZSB0aGUgZmlsZSBmaXJzdCB0aGVuIHRyeSBhZ2Fpbi4iOyBcCisgICAgICAgICAgZWNobyAiICI7IFwKKwlmaQorCitjbGVhbjoKKwlybSAtcmYgJChNQU5VQUxTKTsgcm0gJChET0MpLyQoRE9DKS50Z3o7CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL1JFQURNRSBiL2RvY3VtZW50YXRpb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTY3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL1JFQURNRQpAQCAtMCwwICsxLDkxIEBACitkb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24uICBUaGUgWW9jdG8KK1Byb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcyBhdCBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC5jZ2kgaGF2ZSB0d28KK2luc3RhbmNlcyBvZiB0aGUgImRvY3VtZW50YXRpb24iIGRpcmVjdG9yeS4gIFlvdSBzaG91bGQgdW5kZXJzdGFuZCBlYWNoIG9mCit0aGVzZSBpbnN0YW5jZXMuCisKKyAgcG9reS9kb2N1bWVudGF0aW9uIC0gVGhlIGRpcmVjdG9yeSB3aXRoaW4gdGhlIHBva3kgR2l0IHJlcG9zaXRvcnkgY29udGFpbmluZworICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2V0IG9mIFlvY3RvIFByb2plY3QgbWFudWFscy4gIFdoZW4geW91IGNsb25lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBwb2t5IEdpdCByZXBvc2l0b3J5LCB0aGUgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIG1hbnVhbHMuICBUaGUgc3RhdGUgb2YgdGhlIG1hbnVhbHMgaW4gdGhpcworICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgZ3VhcmFudGVlZCB0byByZWZsZWN0IHRoZSBsYXRlc3QgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCByZWxlYXNlLiAgVGhlIG1hbnVhbHMgYXQgdGhlIHRpcCBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB3aWxsIGFsc28gbGlrZWx5IGNvbnRhaW4gbW9zdCBtYW51YWwKKyAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgY2hhbmdlcy4KKworICB5b2N0by1kb2NzL2RvY3VtZW50YXRpb24gLSBUaGUgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBZb2N0byBQcm9qZWN0IG1hbnVhbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVwb3NpdG9yeSBpcyB3aGVyZSBtYW51YWwgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJzLiAgSWYgeW91IHBsYW4gb24gY29udHJpYnV0aW5nIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiwgeW91IHNob3VsZCBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aGlzIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgYXMgZm9sbG93czoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1kb2NzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyBhbmQgcGF0Y2hlcyBhcmUgZmlyc3QgcHVzaGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b2N0by1kb2NzIEdpdCByZXBvc2l0b3J5LiAgTGF0ZXIsIHRoZXkgbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBwb2t5IEdpdCByZXBvc2l0b3J5IGZvdW5kIGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kuCisKK01hbnVhbCBPcmdhbml6YXRpb24KKz09PT09PT09PT09PT09PT09PT0KKworRm9sZGVycyBleGlzdCBmb3IgaW5kaXZpZHVhbCBtYW51YWxzIGFzIGZvbGxvd3M6CisKKyogYWR0LW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorKiBic3AtZ3VpZGUgICAgICAgIC0gVGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlCisqIGRldi1tYW51YWwgICAgICAgLSBUaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyoga2VybmVsLWRldiAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwKKyogcmVmLW1hbnVhbCAgICAgICAtIFRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwKKyogeW9jdG8tcHJvamVjdC1xcyAtIFRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0CisqIG1lZ2EtbWFudWFsICAgICAgLSBBbiBhZ2dyZWdhdGVkIG1hbnVhbCBjb21wcmlzZWQgb2YgYWxsIFlQIG1hbnVhbHMgYW5kIGd1aWRlcworKiBwcm9maWxlLW1hbnVhbCAgIC0gVGhlIFlvY3RvIFByb2plY3QgUHJvZmlsZSBhbmQgVHJhY2luZyBNYW51YWwKKworRWFjaCBmb2xkZXIgaXMgc2VsZi1jb250YWluZWQgcmVnYXJkaW5nIGNvbnRlbnQgYW5kIGZpZ3VyZXMuICBOb3RlIHRoYXQgdGhlcmUKK2lzIGEgc2VkIGZpbGUgbmVlZGVkIHRvIHByb2Nlc3MgdGhlIGxpbmtzIG9mIHRoZSBtZWdhLW1hbnVhbC4gIFRoZSBzZWQgZmlsZQoraXMgbG9jYXRlZCBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LiAgQWxzbyBub3RlIHRoYXQgdGhlIGZpZ3VyZXMgZm9sZGVyIGluIHRoZQorbWVnYS1tYW51YWwgZGlyZWN0b3J5IGNvbnRhaW5zIGR1cGxpY2F0ZXMgb2YgYWxsIHRoZSBmaWd1cmVzIGluIHRoZSBZUCBmb2xkZXJzCitkaXJlY3RvcmllcyBmb3IgYWxsIFlQIG1hbnVhbHMgYW5kIGd1aWRlcy4KKworSWYgeW91IHdhbnQgdG8gZmluZCBIVE1MIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0IG1hbnVhbHMgb24gdGhlIHdlYiwKK2dvIHRvIGh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyBhbmQgY2xpY2sgb24gdGhlICJEb2N1bWVudGF0aW9uIiB0YWIuICBGcm9tCit0aGVyZSB5b3UgaGF2ZSBhY2Nlc3MgdG8gYXJjaGl2ZWQgZG9jdW1lbnRhdGlvbiBmcm9tIHByZXZpb3VzIHJlbGVhc2VzLCBjdXJyZW50Citkb2N1bWVudGF0aW9uIGZvciB0aGUgbGF0ZXN0IHJlbGVhc2UsIGFuZCAiRG9jcyBpbiBQcm9ncmVzcyIgZm9yIHRoZSByZWxlYXNlCitjdXJyZW50bHkgYmVpbmcgZGV2ZWxvcGVkLgorCitJbiBnZW5lcmFsLCB0aGUgWW9jdG8gUHJvamVjdCBzaXRlIChodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcpIGlzIGEgZ3JlYXQKK3JlZmVyZW5jZSBmb3IgYm90aCBpbmZvcm1hdGlvbiBhbmQgZG93bmxvYWRzLgorCitNYWtlZmlsZQorPT09PT09PT0KKworVGhlIE1ha2VmaWxlIHByb2Nlc3NlcyBtYW51YWwgZGlyZWN0b3JpZXMgdG8gY3JlYXRlIEhUTUwsIFBERiwKK3RhcmJhbGxzLCBldGMuICBEZXRhaWxzIG9uIGhvdyB0aGUgTWFrZWZpbGUgd29yayBhcmUgZG9jdW1lbnRlZAoraW5zaWRlIHRoZSBNYWtlZmlsZS4gIFNlZSB0aGF0IGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RvIGJ1aWxkIGEgbWFudWFsLCB5b3UgcnVuIHRoZSBtYWtlIGNvbW1hbmQgYW5kIHBhc3MgaXQgdGhlIG5hbWUKK29mIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgbWFudWFsJ3MgY29udGVudHMuCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHJ1biBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeQorY3JlYXRlcyBhbiBIVE1MIGFuZCBhIFBERiB2ZXJzaW9uIG9mIHRoZSBBRFQgbWFudWFsLgorVGhlIERPQyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIG1hbnVhbCB5b3UgYXJlIG1ha2luZzoKKworICAgICAkIG1ha2UgRE9DPWFkdC1tYW51YWwKKworcG9reS5lbnQKKz09PT09PT09CisKK1RoaXMgZmlsZSBkZWZpbmVzIHZhcmlhYmxlcyB1c2VkIGZvciBkb2N1bWVudGF0aW9uIHByb2R1Y3Rpb24uICBUaGUgdmFyaWFibGVzCithcmUgdXNlZCB0byBkZWZpbmUgcmVsZWFzZSBwYXRobmFtZXMsIFVSTHMgZm9yIHRoZSBwdWJsaXNoZWQgbWFudWFscywgZXRjLgorCit0ZW1wbGF0ZQorPT09PT09PT0KK0NvbnRhaW5zIHZhcmlvdXMgdGVtcGxhdGVzLCBmb250cywgYW5kIHNvbWUgb2xkIFBORyBmaWxlcy4KKwordG9vbHMKKz09PT09CitDb250YWlucyBhIHRvb2wgdG8gY29udmVydCB0aGUgRG9jQm9vayBmaWxlcyB0byBQREYgZm9ybWF0LiAgVGhpcyBmb2xkZXIgYWxzbworY29udGFpbnMgdGhlIG1lZ2EtbWFudWFsLnNlZCBmaWxlLCB3aGljaCBpcyB1c2VkIGJ5IE1ha2VmaWxlIHRvIHByb2Nlc3MKK2Nyb3NzLXJlZmVyZW5jZXMgZnJvbSB3aXRoaW4gdGhlIG1hbnVhbCB0aGF0IG5vcm1hbGx5IGdvIHRvIGFuIGV4dGVybmFsCittYW51YWwuCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWNvbW1hbmQueG1sIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhkMThhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1jb21tYW5kLnhtbApAQCAtMCwwICsxLDI2NSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3VzaW5nLXRoZS1jb21tYW5kLWxpbmUnPgorPHRpdGxlPlVzaW5nIHRoZSBDb21tYW5kIExpbmU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFJlY2FsbCB0aGF0IGVhcmxpZXIgdGhlIG1hbnVhbCBkaXNjdXNzZWQgaG93IHRvIHVzZSBhbiBleGlzdGluZyB0b29sY2hhaW4KKyAgICAgICAgdGFyYmFsbCB0aGF0IGhhZCBiZWVuIGluc3RhbGxlZCBpbnRvIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbgorICAgICAgICBkaXJlY3RvcnksIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAoc2VlIHRoZSBzZWN0aW9uICI8bGluayBsaW5rZW5kPSd1c2luZy1hbi1leGlzdGluZy10b29sY2hhaW4tdGFyYmFsbCc+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbCk8L2xpbms+Ii4KKyAgICAgICAgQW5kLCB0aGF0IHNvdXJjaW5nIHlvdXIgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICBpbml0aWFsaXplcyBhIHN1aXRhYmxlIGNyb3NzLXRvb2xjaGFpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRHVyaW5nIHRoaXMgc2V0dXAsIGxvY2F0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLCBRRU1VIHNjcmlwdHMsIFFFTVUgYmluYXJ5LAorICAgICAgICBhIHNwZWNpYWwgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+cGtnY29uZmlnPC9maWxlbmFtZT4gYW5kIG90aGVyIHVzZWZ1bAorICAgICAgICB1dGlsaXRpZXMgYXJlIGFkZGVkIHRvIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICBBbHNvLCB2YXJpYWJsZXMgdG8gYXNzaXN0CisgICAgICAgIDxmaWxlbmFtZT5wa2djb25maWc8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+CisgICAgICAgIGFyZSBhbHNvIGRlZmluZWQgc28gdGhhdCwgZm9yIGV4YW1wbGUsIDxmaWxlbmFtZT5jb25maWd1cmUuc2g8L2ZpbGVuYW1lPgorICAgICAgICBjYW4gZmluZCBwcmUtZ2VuZXJhdGVkIHRlc3QgcmVzdWx0cyBmb3IgdGVzdHMgdGhhdCBuZWVkIHRhcmdldCBoYXJkd2FyZQorICAgICAgICBvbiB3aGljaCB0byBydW4uCisgICAgICAgIFlvdSBjYW4gc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2V0dGluZy11cC10aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPlNldHRpbmcgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbiBmb3IgdGhlIGxpc3Qgb2YgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICBlc3RhYmxpc2hlZCBieSB0aGUgc2NyaXB0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBDb2xsZWN0aXZlbHksIHRoZXNlIGNvbmRpdGlvbnMgYWxsb3cgeW91IHRvIGVhc2lseSB1c2UgdGhlIHRvb2xjaGFpbgorICAgICAgICBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQgb24gYm90aCBBdXRvdG9vbHMtYmFzZWQKKyAgICAgICAgcHJvamVjdHMgYW5kIE1ha2VmaWxlLWJhc2VkIHByb2plY3RzLgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGJvdGggdGhlc2UgdHlwZXMgb2YgcHJvamVjdHMuCisgICAgPC9wYXJhPgorCisKKzxzZWN0aW9uIGlkPSdhdXRvdG9vbHMtYmFzZWQtcHJvamVjdHMnPgorPHRpdGxlPkF1dG90b29scy1CYXNlZCBQcm9qZWN0czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT25jZSB5b3UgaGF2ZSBhIHN1aXRhYmxlIGNyb3NzLXRvb2xjaGFpbiBpbnN0YWxsZWQsIGl0IGlzIHZlcnkgZWFzeSB0bworICAgICAgICBkZXZlbG9wIGEgcHJvamVjdCBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgYSBzaW1wbGUgIkhlbGxvd29ybGQiIGV4YW1wbGUgdGhhdCBzaG93cyBob3cKKyAgICAgICAgdG8gc2V0IHVwLCBjb21waWxlLCBhbmQgcnVuIHRoZSBwcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hbmQtcnVubmluZy1hLXByb2plY3QtYmFzZWQtb24tZ251LWF1dG90b29scyc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUnVubmluZyBhIFByb2plY3QgQmFzZWQgb24gR05VIEF1dG90b29sczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgc2ltcGxlIEF1dG90b29scy1iYXNlZCBwcm9qZWN0OgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHlvdXIgZGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBhIGNsZWFuIGRpcmVjdG9yeSBmb3IgeW91ciBwcm9qZWN0IGFuZCB0aGVuIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkaXJlY3RvcnkgeW91ciB3b3JraW5nIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWtkaXIgJEhPTUUvaGVsbG93b3JsZAorICAgICAkIGNkICRIT01FL2hlbGxvd29ybGQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG9wdWxhdGUgdGhlIGRpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgPGZpbGVuYW1lPmhlbGxvLmM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Y29uZmlndXJlLmluPC9maWxlbmFtZT4gZmlsZXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgPGZpbGVuYW1lPmhlbGxvLmM8L2ZpbGVuYW1lPiwgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisKKyAgICAgbWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgcHJpbnRmKCJIZWxsbyBXb3JsZCFcbiIpOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+TWFrZWZpbGUuYW08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZXNlIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYmluX1BST0dSQU1TID0gaGVsbG8KKyAgICAgaGVsbG9fU09VUkNFUyA9IGhlbGxvLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5jb25maWd1cmUuaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZXNlIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUNfSU5JVChoZWxsby5jKQorICAgICBBTV9JTklUX0FVVE9NQUtFKGhlbGxvLDAuMSkKKyAgICAgQUNfUFJPR19DQworICAgICBBQ19QUk9HX0lOU1RBTEwKKyAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgdGhlIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxhdGlvbiBvZiB0aGUgY3Jvc3MtdG9vbGNoYWluIGNyZWF0ZXMgYSBjcm9zcy10b29sY2hhaW4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGluIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgQURUCisgICAgICAgICAgICAgICAgICAgIHdhcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgdG9vbHMgdG8gZGV2ZWxvcCB5b3VyIHByb2plY3QsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB0aGlzIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nICJlbnZpcm9ubWVudC1zZXR1cCIgYW5kIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgZm9sbG93ZWQgYnkgdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAicG9reS1saW51eCIuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNvdXJjZXMgYSBzY3JpcHQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBBRFQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBJbnRlbCB4ODYgQXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgJkRJU1RST19OQU1FOyBZb2N0byBQcm9qZWN0IHJlbGVhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgL29wdC9wb2t5LyZESVNUUk87L2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgbG9jYWwgYWNsb2NhbC5tNAorICAgICAgICAgICAgICAgICAgICBmaWxlcyBhbmQgY3JlYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgR05VIEF1dG90b29scyBnZW5lcmF0ZSB0aGUgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFjbG9jYWwubTQ8L2ZpbGVuYW1lPiBmaWxlcyBhbmQgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYWNsb2NhbAorICAgICAkIGF1dG9jb25mCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIGZpbGVzIG5lZWRlZCBieSBHTlUKKyAgICAgICAgICAgICAgICAgICAgY29kaW5nIHN0YW5kYXJkczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBHTlUgY29kaW5nIHN0YW5kYXJkcyByZXF1aXJlIGNlcnRhaW4gZmlsZXMgaW4gb3JkZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0IHRvIGJlIGNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgdGhvc2UgZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB0b3VjaCBORVdTIFJFQURNRSBBVVRIT1JTIENoYW5nZUxvZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgY29uZmlndXJlCisgICAgICAgICAgICAgICAgICAgIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGdlbmVyYXRlcyB0aGUgPGZpbGVuYW1lPmNvbmZpZ3VyZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXV0b21ha2UgLWEKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3Jvc3MtY29tcGlsZSB0aGUgcHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY29tcGlsZXMgdGhlIHByb2plY3QgdXNpbmcgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR1VSRV9GTEFHUyc+PGZpbGVuYW1lPkNPTkZJR1VSRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgcHJvdmlkZXMgdGhlIG1pbmltYWwgYXJndW1lbnRzIGZvcgorICAgICAgICAgICAgICAgICAgICBHTlUgY29uZmlndXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9jb25maWd1cmUgJHtDT05GSUdVUkVfRkxBR1N9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYW5kIGluc3RhbGwgdGhlIHByb2plY3Q6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdHdvIGNvbW1hbmRzIGdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwcm9qZWN0IGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG1ha2UKKyAgICAgJCBtYWtlIGluc3RhbGwgREVTVERJUj0uL3RtcAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WZXJpZnkgdGhlIGluc3RhbGxhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgaXMgYSBzaW1wbGUgd2F5IHRvIHZlcmlmeSB0aGUgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgUnVubmluZyB0aGUgY29tbWFuZCBwcmludHMgdGhlIGFyY2hpdGVjdHVyZSBvbiB3aGljaAorICAgICAgICAgICAgICAgICAgICB0aGUgYmluYXJ5IGZpbGUgY2FuIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsZWQgY3Jvc3MtdG9vbGNoYWluIHN1cHBvcnRzLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZmlsZSAuL3RtcC91c3IvbG9jYWwvYmluL2hlbGxvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4ZWN1dGUgeW91ciBwcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRvIGV4ZWN1dGUgdGhlIHByb2plY3QgaW4gdGhlIHNoZWxsLCBzaW1wbHkgZW50ZXIgdGhlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBhbHNvIGNvcHkgdGhlIGJpbmFyeSB0byB0aGUgYWN0dWFsIHRhcmdldCBoYXJkd2FyZQorICAgICAgICAgICAgICAgICAgICBhbmQgcnVuIHRoZSBwcm9qZWN0IHRoZXJlIGFzIHdlbGw6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCAuL2hlbGxvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQXMgZXhwZWN0ZWQsIHRoZSBwcm9qZWN0IGRpc3BsYXlzIHRoZSAiSGVsbG8gV29ybGQhIiBtZXNzYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncGFzc2luZy1ob3N0LW9wdGlvbnMnPgorICAgICAgICA8dGl0bGU+UGFzc2luZyBIb3N0IE9wdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0LCB5b3UgY2FuIHVzZSB0aGUgY3Jvc3MtdG9vbGNoYWluIGJ5IGp1c3QKKyAgICAgICAgICAgIHBhc3NpbmcgdGhlIGFwcHJvcHJpYXRlIGhvc3Qgb3B0aW9uIHRvIDxmaWxlbmFtZT5jb25maWd1cmUuc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBob3N0IG9wdGlvbiB5b3UgdXNlIGlzIGRlcml2ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAgICAgICAgIHNjcmlwdCBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIGNyb3NzLXRvb2xjaGFpbi4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgaG9zdCBvcHRpb24gZm9yIGFuIEFSTS1iYXNlZCB0YXJnZXQgdGhhdCB1c2VzIHRoZSBHTlUgRUFCSQorICAgICAgICAgICAgaXMgPGZpbGVuYW1lPmFybXY1dGUtcG9reS1saW51eC1nbnVlYWJpPC9maWxlbmFtZT4uCisgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgbmFtZSBvZiB0aGUgc2NyaXB0IGlzCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZW52aXJvbm1lbnQtc2V0dXAtYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3b3JrcyB0byB1cGRhdGUgeW91ciBwcm9qZWN0IGFuZAorICAgICAgICAgICAgcmVidWlsZCBpdCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgY3Jvc3MtdG9vbGNoYWluIHRvb2xzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC4vY29uZmlndXJlIC0taG9zdD1hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaSBcCisgICAgICAgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9PHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gc2NyaXB0IHJlc3VsdHMgaW4gcHJvYmxlbXMgcmVjb2duaXppbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9PC9maWxlbmFtZT48cmVwbGFjZWFibGU+c3lzcm9vdC1kaXI8L3JlcGxhY2VhYmxlPiBvcHRpb24sCisgICAgICAgICAgICAgICAgcmVnZW5lcmF0ZSB0aGUgc2NyaXB0IHRvIGVuYWJsZSB0aGUgc3VwcG9ydCBieSBkb2luZyB0aGUgZm9sbG93aW5nIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgcnVuIHRoZSBzY3JpcHQgYWdhaW46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxpYnRvb2xpemUgLS1hdXRvbWFrZQorICAgICAkIGFjbG9jYWwgLUkgJHtPRUNPUkVfTkFUSVZFX1NZU1JPT1R9L3Vzci9zaGFyZS9hY2xvY2FsIFwKKyAgICAgICAgWy1JIDxyZXBsYWNlYWJsZT5kaXJfY29udGFpbmluZ195b3VyX3Byb2plY3Qtc3BlY2lmaWNfbTRfbWFjcm9zPC9yZXBsYWNlYWJsZT5dCisgICAgICQgYXV0b2NvbmYKKyAgICAgJCBhdXRvaGVhZGVyCisgICAgICQgYXV0b21ha2UgLWEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtYWtlZmlsZS1iYXNlZC1wcm9qZWN0cyc+Cis8dGl0bGU+TWFrZWZpbGUtQmFzZWQgUHJvamVjdHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cywgdGhlIGNyb3NzLXRvb2xjaGFpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgZXN0YWJsaXNoZWQgYnkgcnVubmluZyB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICBhcmUgc3ViamVjdCB0byBnZW5lcmFsIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcnVsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIGlsbHVzdHJhdGUgdGhpcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBmb3VyIGNyb3NzLXRvb2xjaGFpbgorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz5DQzwvdWxpbms+PWk1ODYtcG9reS1saW51eC1nY2MgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L29wdC9wb2t5LzEuOC9zeXNyb290cy9pNTg2LXBva3ktbGludXgKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxEJz5MRDwvdWxpbms+PWk1ODYtcG9reS1saW51eC1sZCAtLXN5c3Jvb3Q9L29wdC9wb2t5LzEuOC9zeXNyb290cy9pNTg2LXBva3ktbGludXgKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNGTEFHUyc+Q0ZMQUdTPC91bGluaz49LU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYRkxBR1MnPkNYWEZMQUdTPC91bGluaz49LU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIE5vdywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0aHJlZSBjYXNlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAxIC0gTm8gVmFyaWFibGVzIFNldCBpbiB0aGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IHNwZWNpZmljYWxseSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4sIHRoZSB2YXJpYWJsZXMgcmV0YWluIHRoZWlyCisgICAgICAgICAgICAgICAgdmFsdWVzIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2FzZSAyIC0gVmFyaWFibGVzIFNldCBpbiB0aGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTcGVjaWZpY2FsbHkgc2V0dGluZyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gZHVyaW5nIHRoZSBidWlsZCByZXN1bHRzIGluIHRoZQorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHRpbmdzIG9mIHRoZSB2YXJpYWJsZXMgYmVpbmcgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNhc2UgMyAtIFZhcmlhYmxlcyBTZXQgd2hlbiB0aGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gaXMgRXhlY3V0ZWQgZnJvbSB0aGUgQ29tbWFuZCBMaW5lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRXhlY3V0aW5nIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBmcm9tIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgbGluZSByZXN1bHRzIGluIHRoZSB2YXJpYWJsZXMgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aAorICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBjb250ZW50IHJlZ2FyZGxlc3Mgb2Ygd2hhdCBpcyBiZWluZyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBjb25zaWRlcmVkIHVubGVzcworICAgICAgICAgICAgICAgIHlvdSB1c2UgdGhlICItZSIgZmxhZyBkdXJpbmcgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIC1lIDxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIGZsYWcsIHRoZW4gdGhlIGVudmlyb25tZW50IHZhbHVlcyBvZiB0aGUKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgb3ZlcnJpZGUgYW55IHZhcmlhYmxlcyBzcGVjaWZpY2FsbHkgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NYWtlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgdGhlIGxpc3Qgb2YgdmFyaWFibGVzIHNldCB1cCBieSB0aGUgY3Jvc3MtdG9vbGNoYWluIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1pbnRyby54bWwgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTdjNzEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1pbnRyby54bWwKQEAgLTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdhZHQtaW50cm8nPgorICAgIDx0aXRsZT5UaGUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUGFydCBvZiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBzb2x1dGlvbiBpcyBhbiBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudAorICAgICAgICBUb29sa2l0IChBRFQpLgorICAgICAgICBUaGUgQURUIHByb3ZpZGVzIHlvdSB3aXRoIGEgY3VzdG9tLWJ1aWx0LCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICBwbGF0Zm9ybSBzdWl0ZWQgZm9yIGRldmVsb3BpbmcgYSB1c2VyLXRhcmdldGVkIHByb2R1Y3QgYXBwbGljYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZ1bmRhbWVudGFsbHksIHRoZSBBRFQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY3Jvc3MtdG9vbGNoYWluIGFuZCBtYXRjaGluZworICAgICAgICAgICAgICAgIHN5c3Jvb3QgYm90aCBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYW5kIHN5c3Jvb3QgYXJlIGJhc2VkIG9uIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGV4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBjcm9zcy1kZXZlbG9wIG9uIHRoZSBob3N0IG1hY2hpbmUgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEVjbGlwc2UgSURFIFlvY3RvIFBsdWctaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKSwgd2hpY2ggbGV0cyB5b3Ugc2ltdWxhdGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlZhcmlvdXMgdXNlci1zcGFjZSB0b29scyB0aGF0IGdyZWF0bHkgZW5oYW5jZSB5b3VyIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4nPgorICAgICAgICA8dGl0bGU+VGhlIENyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC91bGluaz4KKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIGEgY3Jvc3MtY29tcGlsZXIsIGNyb3NzLWxpbmtlciwgYW5kIGNyb3NzLWRlYnVnZ2VyCisgICAgICAgICAgICB0aGF0IGFyZSB1c2VkIHRvIGRldmVsb3AgdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgZm9yIHRhcmdldGVkCisgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgIFRoaXMgdG9vbGNoYWluIGlzIGNyZWF0ZWQgZWl0aGVyIGJ5IHJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIKKyAgICAgICAgICAgIHNjcmlwdCwgYSB0b29sY2hhaW4gaW5zdGFsbGVyIHNjcmlwdCwgb3IgdGhyb3VnaCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICB0aGF0IGlzIGJhc2VkIG9uIHlvdXIgTWV0YWRhdGEgY29uZmlndXJhdGlvbiBvciBleHRlbnNpb24gZm9yCisgICAgICAgICAgICB5b3VyIHRhcmdldGVkIGRldmljZS4KKyAgICAgICAgICAgIFRoZSBjcm9zcy10b29sY2hhaW4gd29ya3Mgd2l0aCBhIG1hdGNoaW5nIHRhcmdldCBzeXNyb290LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Jvb3QnPgorICAgICAgICA8dGl0bGU+U3lzcm9vdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWF0Y2hpbmcgdGFyZ2V0IHN5c3Jvb3QgY29udGFpbnMgbmVlZGVkIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgZ2VuZXJhdGluZworICAgICAgICAgICAgYmluYXJpZXMgdGhhdCBydW4gb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICBUaGUgc3lzcm9vdCBpcyBiYXNlZCBvbiB0aGUgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbSBpbWFnZSB0aGF0IGlzIGJ1aWx0IGJ5CisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbmQgdXNlcyB0aGUgc2FtZSBNZXRhZGF0YSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoZSBjcm9zcy10b29sY2hhaW4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZWNsaXBzZS1vdmVydmlldyc+CisgICAgICAgIDx0aXRsZT5FY2xpcHNlIFlvY3RvIFBsdWctaW48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIEVjbGlwc2UgSURFIGlzIGEgcG9wdWxhciBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBhbmQgaXQgZnVsbHkgc3VwcG9ydHMKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgV2hlbiB5b3UgaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBFY2xpcHNlIFlvY3RvIFByb2plY3QgUGx1Zy1pbiBpbnRvCisgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUsIHlvdSBtYXhpbWl6ZSB5b3VyIFlvY3RvIFByb2plY3QgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgIEluc3RhbGxpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBQbHVnLWluIHJlc3VsdHMgaW4gYW4gZW52aXJvbm1lbnQgdGhhdAorICAgICAgICAgICAgaGFzIGV4dGVuc2lvbnMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGxldCB5b3UgbW9yZSBlYXNpbHkgZGV2ZWxvcCBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQgZXhlY3V0aW9uIG9mCisgICAgICAgICAgICB5b3VyIG91dHB1dCBpbnRvIGEgUUVNVSBlbXVsYXRpb24gc2Vzc2lvbi4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwZXJmb3JtIGNyb3NzLWRlYnVnZ2luZyBhbmQgcHJvZmlsaW5nLgorICAgICAgICAgICAgVGhlIGVudmlyb25tZW50IGFsc28gc3VwcG9ydHMgYSBzdWl0ZSBvZiB0b29scyB0aGF0IGFsbG93cyB5b3UgdG8gcGVyZm9ybQorICAgICAgICAgICAgcmVtb3RlIHByb2ZpbGluZywgdHJhY2luZywgY29sbGVjdGlvbiBvZiBwb3dlciBkYXRhLCBjb2xsZWN0aW9uIG9mCisgICAgICAgICAgICBsYXRlbmN5IGRhdGEsIGFuZCBjb2xsZWN0aW9uIG9mIHBlcmZvcm1hbmNlIGRhdGEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgd29ya2Zsb3cgdGhhdCB1c2VzIHRoZSBFY2xpcHNlCisgICAgICAgICAgICBJREUgYW5kIGZvciBhIGRldGFpbGVkIGV4YW1wbGUgb2YgaG93IHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgRWNsaXBzZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBQbHVnLWluLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYWR0LWVjbGlwc2UnPldvcmtpbmcgV2l0aGluIEVjbGlwc2U8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RoZS1xZW11LWVtdWxhdG9yJz4KKyAgICAgICAgPHRpdGxlPlRoZSBRRU1VIEVtdWxhdG9yPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBRRU1VIGVtdWxhdG9yIGFsbG93cyB5b3UgdG8gc2ltdWxhdGUgeW91ciBoYXJkd2FyZSB3aGlsZSBydW5uaW5nIHlvdXIKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uIG9yIGltYWdlLgorICAgICAgICAgICAgUUVNVSBpcyBtYWRlIGF2YWlsYWJsZSBhIG51bWJlciBvZiB3YXlzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0IHRvIGluc3RhbGwgQURULCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgd2hldGhlciBvciBub3QgdG8gaW5zdGFsbCBRRU1VLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGNsb25lZCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0byBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBoYXZlIHNvdXJjZWQgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgUUVNVSBpcworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYW5kIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGRvd25sb2FkZWQgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UgYW5kIHVucGFja2VkCisgICAgICAgICAgICAgICAgICAgIGl0IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGhhdmUgc291cmNlZCB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCBRRU1VIGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBhbmQgYXV0b21hdGljYWxseSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBjcm9zcy10b29sY2hhaW4gdGFyYmFsbCBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgIGhhdmUgc291cmNlZCB0aGUgdG9vbGNoYWluJ3Mgc2V0dXAgZW52aXJvbm1lbnQgc2NyaXB0LCBRRU1VCisgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaW5zdGFsbGVkIGFuZCBhdXRvbWF0aWNhbGx5IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2VyLXNwYWNlLXRvb2xzJz4KKyAgICAgICAgPHRpdGxlPlVzZXItU3BhY2UgVG9vbHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlci1zcGFjZSB0b29scyBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIFlvdSB3aWxsIGZpbmQgdGhlc2UgdG9vbHMgaGVscGZ1bCBkdXJpbmcgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBUaGUgdG9vbHMgaW5jbHVkZSBMYXRlbmN5VE9QLCBQb3dlclRPUCwgT1Byb2ZpbGUsIFBlcmYsIFN5c3RlbVRhcCwgYW5kIEx0dG5nLXVzdC4KKyAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSBjb21tb24gZGV2ZWxvcG1lbnQgdG9vbHMgZm9yIHRoZSBMaW51eCBwbGF0Zm9ybS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXRlbmN5VE9QOjwvZW1waGFzaXM+IExhdGVuY3lUT1AgZm9jdXNlcyBvbiBsYXRlbmN5CisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VzIHNraXBzIGluIGF1ZGlvLAorICAgICAgICAgICAgICAgICAgICBzdHV0dGVycyBpbiB5b3VyIGRlc2t0b3AgZXhwZXJpZW5jZSwgb3Igc2l0dWF0aW9ucyB0aGF0IG92ZXJsb2FkIHlvdXIgc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGV2ZW4gd2hlbiB5b3UgaGF2ZSBwbGVudHkgb2YgQ1BVIHBvd2VyIGxlZnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG93ZXJUT1A6PC9lbXBoYXNpcz4gSGVscHMgeW91IGRldGVybWluZSB3aGF0CisgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGlzIHVzaW5nIHRoZSBtb3N0IHBvd2VyLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgUG93ZXJUT1AgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly8wMS5vcmcvcG93ZXJ0b3AvJz48L3VsaW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9Qcm9maWxlOjwvZW1waGFzaXM+IEEgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZm9yIExpbnV4CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbXMgdGhhdCBpcyBjYXBhYmxlIG9mIHByb2ZpbGluZyBhbGwgcnVubmluZyBjb2RlIGF0IGxvdyBvdmVyaGVhZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IE9Qcm9maWxlIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvYWJvdXQvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBzZXR1cCBhbmQgdXNlIHRoaXMgdG9vbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz5PUHJvZmlsZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGVyZjo8L2VtcGhhc2lzPiBQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggdXNlZAorICAgICAgICAgICAgICAgICAgICB0byBrZWVwIHRyYWNrIG9mIGNlcnRhaW4gdHlwZXMgb2YgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGV2ZW50cy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgdHlwZXMgb2YgY291bnRlcnMgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vcGVyZi53aWtpLmtlcm5lbC5vcmcvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byBzZXR1cCBhbmQgdXNlIHRoaXMgdG9vbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLXBlcmYnPnBlcmY8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN5c3RlbVRhcDo8L2VtcGhhc2lzPiBBIGZyZWUgc29mdHdhcmUgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaW1wbGlmaWVzIGluZm9ybWF0aW9uIGdhdGhlcmluZyBhYm91dCBhIHJ1bm5pbmcgTGludXggc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGluZm9ybWF0aW9uIGhlbHBzIHlvdSBkaWFnbm9zZSBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIHByb2JsZW1zLgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UYXAgaXMgbm90IGF2YWlsYWJsZSBhcyBhIHVzZXItc3BhY2UgdG9vbCB0aHJvdWdoIHRoZSBFY2xpcHNlIElERSBZb2N0byBQbHVnLWluLgorICAgICAgICAgICAgICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcCc+PC91bGluaz4gZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb24gU3lzdGVtVGFwLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHNldHVwIGFuZCB1c2UgdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtc3lzdGVtdGFwJz5TeXN0ZW1UYXA8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+THR0bmctdXN0OjwvZW1waGFzaXM+IEEgVXNlci1zcGFjZSBUcmFjZXIgZGVzaWduZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB1c2VyLXNwYWNlIGFjdGl2aXR5LgorICAgICAgICAgICAgICAgICAgICBTZWUgPHVsaW5rIHVybD0naHR0cDovL2x0dG5nLm9yZy91c3QnPjwvdWxpbms+IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEx0dG5nLXVzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbCBiL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NmJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidhZHQtc3R5bGUuY3NzJyIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSJBIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JhNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL2FkdC1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1pbnRyby54bWwgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LW1hbnVhbC1pbnRyby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZmRmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYWR0LW1hbnVhbC1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXZWxjb21lIHRvIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBUaGlzIG1hbnVhbCBwcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IGxldHMgeW91IGJlZ2luIGRldmVsb3BpbmcgYXBwbGljYXRpb25zCisgICAgICAgIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBhbiBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBiYXNlZCBvbgorICAgICAgICBhbiBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIHN0YW5kLWFsb25lCisgICAgICAgIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYW5kIG90aGVyIHRvb2xzLgorICAgICAgICBUaGlzIG1hbnVhbCBkZXNjcmliZXMgdGhlIEFEVCBhbmQgaG93IHlvdSBjYW4gY29uZmlndXJlIGFuZCBpbnN0YWxsIGl0LAorICAgICAgICBob3cgdG8gYWNjZXNzIGFuZCB1c2UgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMsIGhvdyB0bworICAgICAgICBjdXN0b21pemUgdGhlIGRldmVsb3BtZW50IHBhY2thZ2VzIGluc3RhbGxhdGlvbiwKKyAgICAgICAgaG93IHRvIHVzZSBjb21tYW5kLWxpbmUgZGV2ZWxvcG1lbnQgZm9yIGJvdGggQXV0b3Rvb2xzLWJhc2VkIGFuZAorICAgICAgICBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cywgYW5kIGFuIGludHJvZHVjdGlvbiB0byB0aGUKKyAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFIFlvY3RvIFBsdWctaW4uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhlIEFEVCBpcyBkaXN0cmlidXRpb24tbmV1dHJhbCBhbmQgZG9lcyBub3QgcmVxdWlyZSB0aGUgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbiwgd2hpY2ggaXMgY2FsbGVkIFBva3kuCisgICAgICAgICAgICBUaGlzIG1hbnVhbCwgaG93ZXZlciwgdXNlcyBleGFtcGxlcyB0aGF0IHVzZSB0aGUgUG9reSBkaXN0cmlidXRpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLnhtbCBiL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U2MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1tYW51YWwueG1sCkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0nYWR0LW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9hZHQtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPkplc3NpY2E8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+Wmhhbmc8L3N1cm5hbWU+CisgICAgICAgICAgICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3JnbmFtZT5JbnRlbCBDb3Jwb3JhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5qZXNzaWNhLnpoYW5nQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgQXByaWwgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT4yMyBNYXkgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IE9jdG9iZXIgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjU8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisKKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1tYW51YWwtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJhZHQtaW50cm8ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJhZHQtcHJlcGFyZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImFkdC1wYWNrYWdlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iYWR0LWNvbW1hbmQueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXBhY2thZ2UueG1sIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZmYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2FkdC1wYWNrYWdlLnhtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2FkdC1wYWNrYWdlJz4KKzx0aXRsZT5PcHRpb25hbGx5IEN1c3RvbWl6aW5nIHRoZSBEZXZlbG9wbWVudCBQYWNrYWdlcyBJbnN0YWxsYXRpb248L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2UgdGhlIFlvY3RvIFByb2plY3QgaXMgc3VpdGVkIGZvciBlbWJlZGRlZCBMaW51eCBkZXZlbG9wbWVudCwgaXQgaXMKKyAgICAgICAgbGlrZWx5IHRoYXQgeW91IHdpbGwgbmVlZCB0byBjdXN0b21pemUgeW91ciBkZXZlbG9wbWVudCBwYWNrYWdlcyBpbnN0YWxsYXRpb24uCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGRldmVsb3BpbmcgYSBtaW5pbWFsIGltYWdlLCB0aGVuIHlvdSBtaWdodCBub3QgbmVlZAorICAgICAgICBjZXJ0YWluIHBhY2thZ2VzIChlLmcuIGdyYXBoaWNzIHN1cHBvcnQgcGFja2FnZXMpLgorICAgICAgICBUaHVzLCB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHJlbW92ZSB0aG9zZSBwYWNrYWdlcyBmcm9tIHlvdXIgdGFyZ2V0IHN5c3Jvb3QuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ncGFja2FnZS1tYW5hZ2VtZW50LXN5c3RlbXMnPgorICAgIDx0aXRsZT5QYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgdGhlIGdlbmVyYXRpb24gb2Ygc3lzcm9vdCBmaWxlcyB1c2luZworICAgICAgICB0aHJlZSBkaWZmZXJlbnQgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbXMgKFBNUyk6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9QS0c6PC9lbXBoYXNpcz4gQSBsZXNzIHdlbGwga25vd24gUE1TIHdob3NlIHVzZQorICAgICAgICAgICAgICAgIG9yaWdpbmF0ZWQgaW4gdGhlIE9wZW5FbWJlZGRlZCBhbmQgT3BlbldydCBlbWJlZGRlZCBMaW51eCBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICBUaGlzIFBNUyB3b3JrcyB3aXRoIGZpbGVzIHBhY2thZ2VkIGluIGFuIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gZm9ybWF0LgorICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wa2cnPjwvdWxpbms+IGZvciBtb3JlCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgT1BLRy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UlBNOjwvZW1waGFzaXM+IEEgbW9yZSB3aWRlbHkga25vd24gUE1TIGludGVuZGVkIGZvciBHTlUvTGludXgKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25zLgorICAgICAgICAgICAgICAgIFRoaXMgUE1TIHdvcmtzIHdpdGggZmlsZXMgcGFja2FnZWQgaW4gYW4gPGZpbGVuYW1lPi5ybXM8L2ZpbGVuYW1lPiBmb3JtYXQuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBjdXJyZW50bHkgaW5zdGFsbHMgdGhyb3VnaCB0aGlzIFBNUyBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JQTV9QYWNrYWdlX01hbmFnZXInPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUlBNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZWJpYW46PC9lbXBoYXNpcz4gVGhlIFBNUyBmb3IgRGViaWFuLWJhc2VkIHN5c3RlbXMKKyAgICAgICAgICAgICAgICBpcyBidWlsdCBvbiBtYW55IFBNUyB0b29scy4KKyAgICAgICAgICAgICAgICBUaGUgbG93ZXItbGV2ZWwgUE1TIHRvb2wgPGZpbGVuYW1lPmRwa2c8L2ZpbGVuYW1lPiBmb3JtcyB0aGUgYmFzZSBvZiB0aGUgRGViaWFuIFBNUy4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gZHBrZyBzZWUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Rwa2cnPjwvdWxpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtcG1zJz4KKyAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFBNUzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpY2hldmVyIFBNUyB5b3UgYXJlIHVzaW5nLCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZSBpcyBzZXQgdG8gcmVmbGVjdCB0aGF0IHN5c3RlbS4KKyAgICAgICAgVGhlIGZpcnN0IHZhbHVlIHlvdSBjaG9vc2UgZm9yIHRoZSB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgZmlsZSBmb3JtYXQgZm9yIHRoZSByb290CisgICAgICAgIGZpbGVzeXN0ZW0gYXQgc3lzcm9vdC4KKyAgICAgICAgQWRkaXRpb25hbCB2YWx1ZXMgc3BlY2lmeSBhZGRpdGlvbmFsIGZvcm1hdHMgZm9yIGNvbnZlbmllbmNlIG9yIHRlc3RpbmcuCisgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IKKyAgICAgICAgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgRm9yIGJ1aWxkIHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIFBNUywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICA8L25vdGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgYSBzY2VuYXJpbyB3aGVyZSB5b3UgYXJlIHVzaW5nIE9QS0cgYW5kIHlvdSB3YW50IHRvIGFkZAorICAgICAgICB0aGUgPGZpbGVuYW1lPmxpYmdsYWRlPC9maWxlbmFtZT4gcGFja2FnZSB0byB0aGUgdGFyZ2V0IHN5c3Jvb3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZpcnN0LCB5b3Ugc2hvdWxkIGdlbmVyYXRlIHRoZSBJUEsgZmlsZSBmb3IgdGhlCisgICAgICAgIDxmaWxlbmFtZT5saWJnbGFkZTwvZmlsZW5hbWU+IHBhY2thZ2UgYW5kIGFkZCBpdAorICAgICAgICBpbnRvIGEgd29ya2luZyA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHJlcG9zaXRvcnkuCisgICAgICAgIFVzZSB0aGVzZSBjb21tYW5kczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGliZ2xhZGUKKyAgICAgJCBiaXRiYWtlIHBhY2thZ2UtaW5kZXgKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBOZXh0LCBzb3VyY2UgdGhlIGNyb3NzLXRvb2xjaGFpbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgZm91bmQgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgRm9sbG93IHRoYXQgYnkgc2V0dGluZyB1cCB0aGUgaW5zdGFsbGF0aW9uIGRlc3RpbmF0aW9uIHRvIHBvaW50IHRvIHlvdXIKKyAgICAgICAgc3lzcm9vdCBhcyA8cmVwbGFjZWFibGU+c3lzcm9vdF9kaXI8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgRmluYWxseSwgaGF2ZSBhbiBPUEtHIGNvbmZpZ3VyYXRpb24gZmlsZSA8cmVwbGFjZWFibGU+Y29uZl9maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IHlvdSBoYXZlIGp1c3QgY3JlYXRlZC4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm1zIHNob3VsZCBub3cgd29yazoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIG9wa2ctY2wg4oCTZiA8cmVwbGFjZWFibGU+Y29uZl9maWxlPC9yZXBsYWNlYWJsZT4gLW8gPHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4gdXBkYXRlCisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jY29uZl9maWxlPC9yZXBsYWNlYWJsZT4gLW8gPHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4gXAorICAgICAgICAtLWZvcmNlLW92ZXJ3cml0ZSBpbnN0YWxsIGxpYmdsYWRlCisgICAgICQgb3BrZy1jbCDigJNmIDxyZXBsYWNlYWJsZT5jY29uZl9maWxlPC9yZXBsYWNlYWJsZT4gLW8gPHJlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyPC9yZXBsYWNlYWJsZT4gXAorICAgICAgICAtLWZvcmNlLW92ZXJ3cml0ZSBpbnN0YWxsIGxpYmdsYWRlLWRiZworICAgICAkIG9wa2ctY2wg4oCTZiA8cmVwbGFjZWFibGU+Y29uZl9maWxlJmd0OyAtbyA8L3JlcGxhY2VhYmxlPnN5c3Jvb3RfZGlyJmd0OyBcCisgICAgICAgIC0tZm9yY2Utb3ZlcndyaXRlIGluc3RhbGwgbGliZ2xhZGUtZGV2CisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtcHJlcGFyZS54bWwgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZjU2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXByZXBhcmUueG1sCkBAIC0wLDAgKzEsOTg0IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nYWR0LXByZXBhcmUnPgorCis8dGl0bGU+UHJlcGFyaW5nIGZvciBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudDwvdGl0bGU+CisKKzxwYXJhPgorICAgIEluIG9yZGVyIHRvIGRldmVsb3AgYXBwbGljYXRpb25zLCB5b3UgbmVlZCBzZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICBTZXZlcmFsIHdheXMgZXhpc3QgdGhhdCBhbGxvdyB5b3UgdG8gaW5zdGFsbCBjcm9zcy1kZXZlbG9wbWVudCB0b29scywgUUVNVSwgdGhlCisgICAgRWNsaXBzZSBZb2N0byBQbHVnLWluLCBhbmQgb3RoZXIgdG9vbHMuCisgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBob3cgdG8gcHJlcGFyZSBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQuCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLXRoZS1hZHQnPgorICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBBRFQgYW5kIFRvb2xjaGFpbnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgaW5zdGFsbGF0aW9uIG1ldGhvZHMgdGhhdCBzZXQgdXAgdmFyeWluZworICAgICAgICBkZWdyZWVzIG9mIHRvb2wgYXZhaWxhYmlsaXR5IG9uIHlvdXIgc3lzdGVtLgorICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBpbnN0YWxsYXRpb24gbWV0aG9kIHlvdSBjaG9vc2UsCisgICAgICAgIHlvdSBtdXN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCwgd2hpY2ggZXN0YWJsaXNoZXMgc2V2ZXJhbCBrZXkKKyAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBiZWZvcmUgeW91IHVzZSBhIHRvb2xjaGFpbi4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2V0dGluZy11cC10aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQnPlNldHRpbmcgVXAgdGhlIENyb3NzLURldmVsb3BtZW50IEVudmlyb25tZW50PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdm9pZCBtaXhpbmcgaW5zdGFsbGF0aW9uIG1ldGhvZHMgd2hlbiBpbnN0YWxsaW5nIHRvb2xjaGFpbnMgZm9yCisgICAgICAgICAgICBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBhdm9pZCB1c2luZyB0aGUgQURUIEluc3RhbGxlciB0byBpbnN0YWxsIHNvbWUKKyAgICAgICAgICAgIHRvb2xjaGFpbnMgYW5kIHRoZW4gaGFuZC1pbnN0YWxsaW5nIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgIGJ5IHJ1bm5pbmcgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgTWl4aW5nIGluc3RhbGxhdGlvbiBtZXRob2RzIGNhbiByZXN1bHQgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUKKyAgICAgICAgICAgIEFEVCBJbnN0YWxsZXIgYmVjb21lcyB1bnJlbGlhYmxlIGFuZCBtaWdodCBub3QgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgIHRvb2xjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IG11c3QgbWl4IGluc3RhbGxhdGlvbiBtZXRob2RzLCB5b3UgbWlnaHQgYXZvaWQgcHJvYmxlbXMgYnkKKyAgICAgICAgICAgIGRlbGV0aW5nIDxmaWxlbmFtZT4vdmFyL2xpYi9vcGtnPC9maWxlbmFtZT4sIHRodXMgcHVyZ2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gcGFja2FnZSBtZXRhZGF0YS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgdGhlIEFEVCBpbnN0YWxsZXIgc2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBpbnN0YWxsIHRoZSBBRFQgYmVjYXVzZSBpdAorICAgICAgICAgICAgICAgIGF1dG9tYXRlcyBtdWNoIG9mIHRoZSBwcm9jZXNzIGZvciB5b3UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29uZmlndXJlIHRoZSBpbnN0YWxsYXRpb24gdG8gaW5zdGFsbCB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgIGFuZCB0aGUgdXNlci1zcGFjZSBORlMsIHNwZWNpZnkgd2hpY2ggcm9vdCBmaWxlc3lzdGVtIHByb2ZpbGVzIHRvIGRvd25sb2FkLAorICAgICAgICAgICAgICAgIGFuZCBkZWZpbmUgdGhlIHRhcmdldCBzeXNyb290IGxvY2F0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgYW4gZXhpc3RpbmcgdG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBtZXRob2QsIHlvdSBzZWxlY3QgYW5kIGRvd25sb2FkIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBpbnN0YWxsZXIgYW5kIHRoZW4gcnVuIHRoZSBzY3JpcHQgdG8gaGFuZC1pbnN0YWxsIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGlzIG1ldGhvZCwgeW91IGp1c3QgZ2V0IHRoZSBjcm9zcy10b29sY2hhaW4gYW5kIFFFTVUgLSB5b3UgZG8gbm90CisgICAgICAgICAgICAgICAgZ2V0IGFueSBvZiB0aGUgb3RoZXIgbWVudGlvbmVkIGJlbmVmaXRzIGhhZCB5b3UgcnVuIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIHRoZSB0b29sY2hhaW4gZnJvbSB3aXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIElmIHlvdSBhbHJlYWR5IGhhdmUgYQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgeW91IGNhbiBidWlsZCB0aGUgY3Jvc3MtdG9vbGNoYWluIHdpdGhpbiB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGxpa2UgdGhlIHByZXZpb3VzIG1ldGhvZCBtZW50aW9uZWQsIHlvdSBvbmx5IGdldCB0aGUgY3Jvc3MtdG9vbGNoYWluIGFuZCBRRU1VIC0geW91CisgICAgICAgICAgICAgICAgZG8gbm90IGdldCBhbnkgb2YgdGhlIG90aGVyIGJlbmVmaXRzIHdpdGhvdXQgdGFraW5nIHNlcGFyYXRlIHN0ZXBzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLWFkdC1pbnN0YWxsZXInPgorICAgICAgICA8dGl0bGU+VXNpbmcgdGhlIEFEVCBJbnN0YWxsZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcnVuIHRoZSBBRFQgSW5zdGFsbGVyLCB5b3UgbmVlZCB0byBnZXQgdGhlIEFEVCBJbnN0YWxsZXIgdGFyYmFsbCwgYmUgc3VyZQorICAgICAgICAgICAgeW91IGhhdmUgdGhlIG5lY2Vzc2FyeSBob3N0IGRldmVsb3BtZW50IHBhY2thZ2VzIHRoYXQgc3VwcG9ydCB0aGUgQURUIEluc3RhbGxlciwKKyAgICAgICAgICAgIGFuZCB0aGVuIHJ1biB0aGUgQURUIEluc3RhbGxlciBTY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGhvc3QgcGFja2FnZXMgbmVlZGVkIHRvIHN1cHBvcnQgQURUIGluc3RhbGxhdGlvbiBhbmQgdXNlLCBzZWUgdGhlCisgICAgICAgICAgICAiQURUIEluc3RhbGxlciBFeHRyYXMiIGxpc3RzIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLXBhY2thZ2VzLWZvci10aGUtaG9zdC1kZXZlbG9wbWVudC1zeXN0ZW0nPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnZXR0aW5nLXRoZS1hZHQtaW5zdGFsbGVyLXRhcmJhbGwnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgdGhlIEFEVCBJbnN0YWxsZXIgVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBBRFQgSW5zdGFsbGVyIGlzIGNvbnRhaW5lZCBpbiB0aGUgQURUIEluc3RhbGxlciB0YXJiYWxsLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IHRoZSB0YXJiYWxsIHVzaW5nIGVpdGhlciBvZiB0aGVzZSBtZXRob2RzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RG93bmxvYWQgdGhlIFRhcmJhbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG93bmxvYWQgdGhlIHRhcmJhbGwgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0FEVElOU1RBTExFUl9ETF9VUkw7Jz48L3VsaW5rPiBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIHRoZSBUYXJiYWxsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSB0YXJiYWxsIGluc2lkZSBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2UgQml0QmFrZSB0byBnZW5lcmF0ZSB0aGUgQURUIEluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyYmFsbCwgeW91IG11c3QgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGJlZm9yZSBydW5uaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRoYXQgY3JlYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmJhbGwuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIGNvbW1hbmRzIGVzdGFibGlzaAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayBvdXQgdGhlIGN1cnJlbnQgcmVsZWFzZSBicmFuY2gsIHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IHdoaWxlIGFsc28gY3JlYXRpbmcgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSwgYW5kIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB0aGF0IHJlc3VsdHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC90bXAvZGVwbG95L3Nkay9hZHRfaW5zdGFsbGVyLnRhci5iejI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSB1c2luZyBCaXRCYWtlIHRvIGJ1aWxkIHRoZSBBRFQgdGFyYmFsbCwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJlIHRvIG1ha2Ugc3VyZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIHByb3Blcmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzZXItY29uZmlndXJhdGlvbic+VXNlciBDb25maWd1cmF0aW9uPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRTsgb3JpZ2luLyZESVNUUk9fTkFNRTsKKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsKKyAgICAgJCBiaXRiYWtlIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy1hbmQtcnVubmluZy10aGUtYWR0LWluc3RhbGxlci1zY3JpcHQnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIGFuZCBSdW5uaW5nIHRoZSBBRFQgSW5zdGFsbGVyIFNjcmlwdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSBydW5uaW5nIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCwgeW91IG5lZWQgdG8gdW5wYWNrIHRoZSB0YXJiYWxsLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdW5wYWNrIHRoZSB0YXJiYWxsIGluIGFueSBkaXJlY3RvcnkgeW91IHdpc2guCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgY29tbWFuZCBjb3BpZXMgdGhlIEFEVCBJbnN0YWxsZXIgdGFyYmFsbCBmcm9tIHdoZXJlCisgICAgICAgICAgICAgICAgaXQgd2FzIGJ1aWx0IGludG8gdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCB0aGVuIHVucGFja3MgdGhlIHRhcmJhbGwgaW50bworICAgICAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgY3AgcG9reS9idWlsZC90bXAvZGVwbG95L3Nkay9hZHRfaW5zdGFsbGVyLnRhci5iejIgJEhPTUUKKyAgICAgJCB0YXIgLXhqZiBhZHRfaW5zdGFsbGVyLnRhci5iejIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVW5wYWNraW5nIGl0IGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIGNvbnRhaW5zIHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCAoPGZpbGVuYW1lPmFkdF9pbnN0YWxsZXI8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gZmlsZSAoPGZpbGVuYW1lPmFkdF9pbnN0YWxsZXIuY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBydW4gdGhlIHNjcmlwdCwgaG93ZXZlciwgeW91IHNob3VsZCBleGFtaW5lIHRoZSBBRFQgSW5zdGFsbGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGFuZCBiZSBzdXJlIHlvdSBhcmUgZ29pbmcgdG8gZ2V0IHdoYXQgeW91IHdhbnQuCisgICAgICAgICAgICAgICAgWW91ciBjb25maWd1cmF0aW9ucyBkZXRlcm1pbmUgd2hpY2gga2VybmVsIGFuZCBmaWxlc3lzdGVtIGltYWdlIGFyZSBkb3dubG9hZGVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9ucyB5b3UgY2FuIGRlZmluZSBmb3IgdGhlIEFEVCBJbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgRm9yIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFuZCByZXN0cmljdGlvbnMsIHNlZSB0aGUgY29tbWVudHMgaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmFkdC1pbnN0YWxsZXIuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1JFUE88L2ZpbGVuYW1lPjogVGhpcyBhcmVhCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgSVBLRy1iYXNlZCBwYWNrYWdlcyBhbmQgdGhlIHJvb3QgZmlsZXN5c3RlbSB1cG9uIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGF0aW9uIGlzIGJhc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2V0IHVwIHlvdXIgb3duIElQS0cgcmVwb3NpdG9yeSBwb2ludGVkIHRvIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WU9DVE9BRFRfUkVQTzwvZmlsZW5hbWU+LCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvbGxvd3MgdGhlIHNhbWUgbGF5b3V0IGFzIHRoZSByZWZlcmVuY2UgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdXAgYXQgPHVsaW5rIHVybD0naHR0cDovL2FkdHJlcG8ueW9jdG9wcm9qZWN0Lm9yZyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCB5b3VyIHJlcG9zaXRvcnkgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSB0aHJvdWdoIEhUVFAuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfVEFSR0VUUzwvZmlsZW5hbWU+OiBUaGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZXMgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNldCB1cCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX1FFTVU8L2ZpbGVuYW1lPjogSW5kaWNhdGVzIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5vdCB0byBpbnN0YWxsIHRoZSBlbXVsYXRvciBRRU1VLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPllPQ1RPQURUX05GU19VVElMPC9maWxlbmFtZT46IEluZGljYXRlcyB3aGV0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBvciBub3QgdG8gaW5zdGFsbCB1c2VyLW1vZGUgTkZTLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBFY2xpcHNlIElERSBZb2N0byBwbHVnLWluIGFnYWluc3QgUUVNVSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBzaG91bGQgaW5zdGFsbCBORlMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5UbyBib290IFFFTVUgaW1hZ2VzIHVzaW5nIG91ciB1c2Vyc3BhY2UgTkZTIHNlcnZlciwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBydW5uaW5nIDxmaWxlbmFtZT5wb3J0bWFwPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHJ1bm5pbmcgPGZpbGVuYW1lPnJwY2JpbmQ8L2ZpbGVuYW1lPiwgeW91IHdpbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWk8L2ZpbGVuYW1lPiBvcHRpb24gd2hlbiA8ZmlsZW5hbWU+cnBjYmluZDwvZmlsZW5hbWU+IHN0YXJ0cyB1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgZG9pbmcgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgYWxzbyBoYXZlIHRvIG1vZGlmeSB5b3VyIGZpcmV3YWxsIHNldHRpbmdzIHRvIGFsbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZTIGJvb3RpbmcgdG8gd29yay48L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+WU9DVE9BRFRfUk9PVEZTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPjogVGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaW1hZ2VzIHlvdSB3YW50IHRvIGRvd25sb2FkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WU9DVE9BRFRfSVBLR19SRVBPPC9maWxlbmFtZT4gcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT46IFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciByb290IGZpbGVzeXN0ZW0gdXNlZCB0byBleHRyYWN0IGFuZCBjcmVhdGUgdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgbXVzdCBoYXZlIGJlZW4gc3BlY2lmaWVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkb3dubG9hZGVkIGJvdGggPGZpbGVuYW1lPm1pbmltYWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zYXRvLXNkazwvZmlsZW5hbWU+IGltYWdlcyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WU9DVE9BRFRfUk9PVEZTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gIm1pbmltYWwgc2F0by1zZGsiLCB0aGVuIDxmaWxlbmFtZT5ZT0NUT0FEVF9ST09URlNfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNldCB0byBlaXRoZXIgIm1pbmltYWwiIG9yICJzYXRvLXNkayIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+OiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIG9uIHRoZSBkZXZlbG9wbWVudCBob3N0IHdoZXJlIHRoZSB0YXJnZXQgc3lzcm9vdCBpcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIGNvbmZpZ3VyZWQgdGhlIDxmaWxlbmFtZT5hZHRfaW5zdGFsbGVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIHJ1biB0aGUgaW5zdGFsbGVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgYWR0LWluc3RhbGxlcgorICAgICAkIC4vYWR0X2luc3RhbGxlcgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBpbnN0YWxsZXIgYmVnaW5zIHRvIHJ1biwgeW91IGFyZSBhc2tlZCB0byBlbnRlciB0aGUKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgY3Jvc3MtdG9vbGNoYWluIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBsb2NhdGlvbiBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvPC9maWxlbmFtZT48cmVwbGFjZWFibGU+cmVsZWFzZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIEFmdGVyIGVpdGhlciBhY2NlcHRpbmcgdGhlIGRlZmF1bHQgbG9jYXRpb24gb3Igc2VsZWN0aW5nIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gbG9jYXRpb24sIHlvdSBhcmUgcHJvbXB0ZWQgdG8gcnVuIHRoZSBpbnN0YWxsYXRpb24gc2NyaXB0CisgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVseSBvciBpbiBzaWxlbnQgbW9kZS4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBjbG9zZWx5IG1vbml0b3IgdGhlIGluc3RhbGxhdGlvbiwKKyAgICAgICAgICAgICAgICBjaG9vc2Ug4oCcSeKAnSBmb3IgaW50ZXJhY3RpdmUgbW9kZSByYXRoZXIgdGhhbiDigJxT4oCdIGZvciBzaWxlbnQgbW9kZS4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlIHByb21wdHMgZnJvbSB0aGUgc2NyaXB0IHRvIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGluc3RhbGxhdGlvbiBjb21wbGV0ZXMsIHRoZSBBRFQsIHdoaWNoIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbiwgaXMgaW5zdGFsbGVkIGluIHRoZSBzZWxlY3RlZCBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIGVudmlyb25tZW50IHNldHVwIGZpbGVzIGZvciB0aGUgY3Jvc3MtdG9vbGNoYWluCisgICAgICAgICAgICAgICAgaW4gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIGFuZCBpbWFnZSB0YXJiYWxscyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWR0LWluc3RhbGxlcjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8geW91cgorICAgICAgICAgICAgICAgIGluc3RhbGxlciBjb25maWd1cmF0aW9ucywgYW5kIHRoZSB0YXJnZXQgc3lzcm9vdCBsb2NhdGVkCisgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgYWxzbyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPgorICAgICAgICA8dGl0bGU+VXNpbmcgYSBDcm9zcy1Ub29sY2hhaW4gVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzaW1wbHkgaW5zdGFsbCBhIGNyb3NzLXRvb2xjaGFpbiBieSBoYW5kLCB5b3UgY2FuCisgICAgICAgICAgICBkbyBzbyBieSBydW5uaW5nIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyLgorICAgICAgICAgICAgVGhlIGluc3RhbGxlciBpbmNsdWRlcyB0aGUgcHJlLWJ1aWx0IGNyb3NzLXRvb2xjaGFpbiwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IHNjcmlwdCwgYW5kIHN1cHBvcnQgZmlsZXMuCisgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kIHRvIGluc3RhbGwgdGhlIGNyb3NzLXRvb2xjaGFpbiwgeW91CisgICAgICAgICAgICBtaWdodCBzdGlsbCBuZWVkIHRvIGluc3RhbGwgdGhlIHRhcmdldCBzeXNyb290IGJ5IGluc3RhbGxpbmcgYW5kCisgICAgICAgICAgICBleHRyYWN0aW5nIGl0IHNlcGFyYXRlbHkuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIHN5c3Jvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwczoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdldCB5b3VyIHRvb2xjaGFpbiBpbnN0YWxsZXIgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdvIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaW5kIHRoZSBmb2xkZXIgdGhhdCBtYXRjaGVzIHlvdXIgaG9zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHN5c3RlbSAoaS5lLiA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIDMyLWJpdCBtYWNoaW5lcyBvciA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgNjQtYml0IG1hY2hpbmVzKS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+R28gaW50byB0aGF0IGZvbGRlciBhbmQgZG93bmxvYWQgdGhlIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlciB3aG9zZSBuYW1lIGluY2x1ZGVzIHRoZSBhcHByb3ByaWF0ZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbnMgcHJvdmlkZWQgYnkgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYmFzZWQgb2ZmIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIGxpYnJhcmllcyBhcHByb3ByaWF0ZSBmb3IgZGV2ZWxvcGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQtYml0IHg4NiBzeXN0ZW0gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBjcm9zcy10b29sY2hhaW4gZm9yIGEgMzItYml0IHg4NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgZ28gaW50byB0aGUgPGZpbGVuYW1lPng4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyIGFuZCBkb3dubG9hZCB0aGUgZm9sbG93aW5nIGluc3RhbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWlsZCB5b3VyIG93biB0b29sY2hhaW4gaW5zdGFsbGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBjYXNlcyB3aGVyZSB5b3UgY2Fubm90IHVzZSBhbiBpbnN0YWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBkb3dubG9hZCBhcmVhLCB5b3UgY2FuIGJ1aWxkIHlvdXIgb3duIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+T3B0aW9uYWxseSBCdWlsZGluZyBhIFRvb2xjaGFpbiBJbnN0YWxsZXI8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T25jZSB5b3UgaGF2ZSB0aGUgaW5zdGFsbGVyLCBydW4gaXQgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZXIgc2NyaXB0IHNvIHRoYXQgaXQgaXMgZXhlY3V0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIGhvdyB0byBydW4gdGhlIGluc3RhbGxlcgorICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIHRvb2xjaGFpbiB0YXJiYWxsIGZvciBhIDY0LWJpdCB4ODYgZGV2ZWxvcG1lbnQgaG9zdAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYW5kIGEgMzItYml0IHg4NiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBhc3N1bWVzIHRoZSB0b29sY2hhaW4gaW5zdGFsbGVyIGlzIGxvY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPn4vRG93bmxvYWRzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9Eb3dubG9hZHMvcG9reS1nbGliYy14ODZfNjQtY29yZS1pbWFnZS1zYXRvLWk1ODYtdG9vbGNoYWluLSZESVNUUk87LnNoCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHRoZSBpbnN0YWxsZXIgcHJvbXB0cyB5b3UgZm9yIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW50byB3aGljaCB5b3Ugd2FudCB0byBpbnN0YWxsIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSB1c2VkIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGludG8gd2hpY2ggeW91IGFyZSBpbnN0YWxsaW5nIHRoZSB0b29sY2hhaW4sIHRoZQorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gaW5zdGFsbGVyIG5vdGlmaWVzIHlvdSBhbmQgZXhpdHMuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgaW4gdGhlIGRpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICAgICAgcnVuIHRoZSBpbnN0YWxsZXIgYWdhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHRoZSBzY3JpcHQgZmluaXNoZXMsIHRoZSBjcm9zcy10b29sY2hhaW4gaXMKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgZW52aXJvbm1lbnQgc2V0dXAgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4gaW4gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtdG9vbGNoYWluLWZyb20td2l0aGluLXRoZS1idWlsZC10cmVlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIEJpdEJha2UgYW5kIHRoZSBCdWlsZCBEaXJlY3Rvcnk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBmaW5hbCB3YXkgb2YgbWFraW5nIHRoZSBjcm9zcy10b29sY2hhaW4gYXZhaWxhYmxlIGlzIHRvIHVzZSBCaXRCYWtlCisgICAgICAgICAgICB0byBnZW5lcmF0ZSB0aGUgdG9vbGNoYWluIHdpdGhpbiBhbiBleGlzdGluZworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGluc3RhbGwgdGhlIHRvb2xjaGFpbiBpbnRvIHRoZSBkZWZhdWx0CisgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEFzIHdpdGggdGhlIHByZXZpb3VzIG1ldGhvZCwgaWYgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgdGFyZ2V0IHN5c3Jvb3QsIHlvdSBtdXN0CisgICAgICAgICAgICBkbyB0aGF0IHNlcGFyYXRlbHkgYXMgd2VsbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGdlbmVyYXRlIHRoZSB0b29sY2hhaW4gaW50byB0aGUgQnVpbGQgRGlyZWN0b3J5OgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHRoZSBCdWlsZCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTb3VyY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cAorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hlY2sgeW91ciBMb2NhbCBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IHNob3VsZCBiZSBzdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIEJ1aWxkIERpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBDb21tZW50cyB3aXRoaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBsaXN0IHRoZSB2YWx1ZXMgeW91IGNhbiB1c2UgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcG9wdWxhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWlucyBmb3IgbW9yZSB0aGFuIGEgc2luZ2xlIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBqdXN0IG5lZWQgdG8gZWRpdCB0aGUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlLXJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgQ3Jvc3MtVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJ1biA8ZmlsZW5hbWU+Yml0YmFrZSBtZXRhLWlkZS1zdXBwb3J0PC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgdGhlIGNyb3NzLXRvb2xjaGFpbiBnZW5lcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgZmluaXNoZXMsCisgICAgICAgICAgICAgICAgICAgIHRoZSBjcm9zcy10b29sY2hhaW4gaXMKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGFuZCBwb3B1bGF0ZWQgd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIG5vdGljZSBlbnZpcm9ubWVudCBzZXR1cCBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2xjaGFpbiB0aGF0IGNvbnRhaW4gdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmVudmlyb25tZW50LXNldHVwPC9maWxlbmFtZT4iIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkncyA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gZm9sZGVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmUgYXdhcmUgdGhhdCB3aGVuIHlvdSB1c2UgdGhpcyBtZXRob2QgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB5b3Ugc3RpbGwgbmVlZCB0byBzZXBhcmF0ZWx5IGV4dHJhY3QgYW5kIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyB0aGlzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPkV4dHJhY3RpbmcgdGhlIFJvb3QgRmlsZXN5c3RlbTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtdGhlLWNyb3NzLWRldmVsb3BtZW50LWVudmlyb25tZW50Jz4KKyAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlZm9yZSB5b3UgY2FuIGRldmVsb3AgdXNpbmcgdGhlIGNyb3NzLXRvb2xjaGFpbiwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZQorICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudCBieSBzb3VyY2luZyB0aGUgdG9vbGNoYWluJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICBJZiB5b3UgdXNlZCB0aGUgQURUIEluc3RhbGxlciBvciBoYW5kLWluc3RhbGxlZCBjcm9zcy10b29sY2hhaW4sCisgICAgICAgIHRoZW4geW91IGNhbiBmaW5kIHRoaXMgc2NyaXB0IGluIHRoZSBkaXJlY3RvcnkgeW91IGNob3NlIGZvciBpbnN0YWxsYXRpb24uCisgICAgICAgIEZvciB0aGlzIHJlbGVhc2UsIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgaXMKKyAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19BRFRQQVRIX0RJUjs8L2ZpbGVuYW1lPi4KKyAgICAgICAgSWYgeW91IGluc3RhbGxlZCB0aGUgdG9vbGNoYWluIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICB5b3UgY2FuIGZpbmQgdGhlIGVudmlyb25tZW50IHNldHVwCisgICAgICAgIHNjcmlwdCBmb3IgdGhlIHRvb2xjaGFpbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5J3MgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmUgc3VyZSB0byBydW4gdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0aGF0IG1hdGNoZXMgdGhlCisgICAgICAgIGFyY2hpdGVjdHVyZSBmb3Igd2hpY2ggeW91IGFyZSBkZXZlbG9waW5nLgorICAgICAgICBFbnZpcm9ubWVudCBzZXR1cCBzY3JpcHRzIGJlZ2luIHdpdGggdGhlIHN0cmluZworICAgICAgICAiPGZpbGVuYW1lPmVudmlyb25tZW50LXNldHVwPC9maWxlbmFtZT4iIGFuZCBpbmNsdWRlIGFzIHBhcnQgb2YgdGhlaXIKKyAgICAgICAgbmFtZSB0aGUgYXJjaGl0ZWN0dXJlLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHRvb2xjaGFpbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgZm9yIGEgNjQtYml0CisgICAgICAgIElBLWJhc2VkIGFyY2hpdGVjdHVyZSBpbnN0YWxsZWQgaW4gdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeQorICAgICAgICB3b3VsZCBiZSB0aGUgZm9sbG93aW5nOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZZT0NUT19BRFRQQVRIX0RJUjsvZW52aXJvbm1lbnQtc2V0dXAteDg2XzY0LXBva3ktbGludXgKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBXaGVuIHlvdSBydW4gdGhlIHNldHVwIHNjcmlwdCwgbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCisgICAgICAgIGRlZmluZWQ6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNES1RBUkdFVFNZU1JPT1QnPjxmaWxlbmFtZT5TREtUQVJHRVRTWVNST09UPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QS0dfQ09ORklHX1BBVEgnPjxmaWxlbmFtZT5QS0dfQ09ORklHX1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHBhdGggdG8gdGhlIHRhcmdldCBwa2ctY29uZmlnIGZpbGVzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DT05GSUdfU0lURSc+PGZpbGVuYW1lPkNPTkZJR19TSVRFPC9maWxlbmFtZT48L3VsaW5rPiAtIEEgR05VIGF1dG9jb25mIHNpdGUgZmlsZSBwcmVjb25maWd1cmVkIGZvciB0aGUgdGFyZ2V0CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DQyc+PGZpbGVuYW1lPkNDPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gdGhlIEMgY29tcGlsZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNYWCc+PGZpbGVuYW1lPkNYWDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDKysgY29tcGlsZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNQUCc+PGZpbGVuYW1lPkNQUDwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQVMnPjxmaWxlbmFtZT5BUzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBhc3NlbWJsZXIKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxEJz48ZmlsZW5hbWU+TEQ8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgbGlua2VyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1HREInPjxmaWxlbmFtZT5HREI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVFJJUCc+PGZpbGVuYW1lPlNUUklQPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ3N0cmlwJywgd2hpY2ggc3RyaXBzIHN5bWJvbHMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJBTkxJQic+PGZpbGVuYW1lPlJBTkxJQjwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdyYW5saWInCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1PQkpDT1BZJz48ZmlsZW5hbWU+T0JKQ09QWTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdvYmpjb3B5JworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItT0JKRFVNUCc+PGZpbGVuYW1lPk9CSkRVTVA8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnb2JqZHVtcCcKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUFSJz48ZmlsZW5hbWU+QVI8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnYXInCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1OTSc+PGZpbGVuYW1lPk5NPC9maWxlbmFtZT48L3VsaW5rPiAtIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ25tJworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEFSR0VUX1BSRUZJWCc+PGZpbGVuYW1lPlRBUkdFVF9QUkVGSVg8L2ZpbGVuYW1lPjwvdWxpbms+IC0gVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IGZvciB0aGUgdGFyZ2V0IHRvb2xzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUk9TU19DT01QSUxFJz48ZmlsZW5hbWU+Q1JPU1NfQ09NUElMRTwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggZm9yIHRoZSB0YXJnZXQgdG9vbHMKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTkZJR1VSRV9GTEFHUyc+PGZpbGVuYW1lPkNPTkZJR1VSRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBUaGUgbWluaW1hbCBhcmd1bWVudHMgZm9yIEdOVSBjb25maWd1cmUKKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgQyBmbGFncworICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgQysrIGZsYWdzCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC91bGluaz4gLSBTdWdnZXN0ZWQgbGlua2VyIGZsYWdzIHdoZW4geW91IHVzZSBDQyB0byBsaW5rCisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L3VsaW5rPiAtIFN1Z2dlc3RlZCBwcmVwcm9jZXNzb3IgZmxhZ3MKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3NlY3VyaW5nLWtlcm5lbC1hbmQtZmlsZXN5c3RlbS1pbWFnZXMnPgorICAgIDx0aXRsZT5TZWN1cmluZyBLZXJuZWwgYW5kIEZpbGVzeXN0ZW0gSW1hZ2VzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3Ugd2lsbCBuZWVkIHRvIGhhdmUgYSBrZXJuZWwgYW5kIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gYm9vdCB1c2luZyB5b3VyCisgICAgICAgIGhhcmR3YXJlIG9yIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICBGdXJ0aGVybW9yZSwgaWYgeW91IHBsYW4gb24gYm9vdGluZyB5b3VyIGltYWdlIHVzaW5nIE5GUyBvciB5b3Ugd2FudCB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICBhcyB0aGUgdGFyZ2V0IHN5c3Jvb3QsIHlvdSBuZWVkIHRvIGV4dHJhY3QgdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy10aGUtaW1hZ2VzJz4KKyAgICAgICAgPHRpdGxlPkdldHRpbmcgdGhlIEltYWdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBnZXQgdGhlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBpbWFnZXMsIHlvdSBlaXRoZXIgaGF2ZSB0byBidWlsZCB0aGVtIG9yIGRvd25sb2FkCisgICAgICAgICAgICBwcmUtYnVpbHQgdmVyc2lvbnMuCisgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gYnVpbGQgdGhlc2UgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlkaW5nLWltYWdlcyc+QnVpZGluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBkb3dubG9hZGluZyBwcmUtYnVpbGQgdmVyc2lvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1wcmUtYnVpbHQnPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHNoaXBzIGJhc2ljIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBpbWFnZXMgZm9yIHNldmVyYWwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKDxmaWxlbmFtZT54ODY8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPng4Ni02NDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPm1pcHM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnBvd2VycGM8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5hcm08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIHRoYXQgeW91IGNhbiB1c2UgdW5hbHRlcmVkIGluIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgVGhlc2Uga2VybmVsIGltYWdlcyByZXNpZGUgaW4gdGhlIHJlbGVhc2UKKyAgICAgICAgICAgIGFyZWEgLSA8dWxpbmsgdXJsPScmWU9DVE9fTUFDSElORVNfRExfVVJMOyc+PC91bGluaz4KKyAgICAgICAgICAgIGFuZCBhcmUgaWRlYWwgZm9yIGV4cGVyaW1lbnRhdGlvbiB1c2luZyBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBpbWFnZSB0eXBlcyB5b3UgY2FuIGJ1aWxkIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLAorICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGRldmVsb3BpbmcgYWdhaW5zdCB5b3VyIGltYWdlIGFuZCB5b3UgYXJlIG5vdAorICAgICAgICAgICAgYnVpbGRpbmcgb3IgdXNpbmcgb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGltYWdlcworICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmNvcmUtaW1hZ2UtKi1kZXY8L2ZpbGVuYW1lPiksIHlvdSBtdXN0IGJlIHN1cmUgdG8KKyAgICAgICAgICAgIGluY2x1ZGUgdGhlIGRldmVsb3BtZW50IHBhY2thZ2VzIGFzIHBhcnQgb2YgeW91ciBpbWFnZSByZWNpcGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBwbGFuIG9uIHJlbW90ZWx5IGRlcGxveWluZyBhbmQgZGVidWdnaW5nIHlvdXIKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IG11c3QgaGF2ZSBhbiBpbWFnZQorICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgWW9jdG8gVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIChUQ0YpIGFnZW50CisgICAgICAgICAgICAoPGZpbGVuYW1lPnRjZi1hZ2VudDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGltYWdlIGZlYXR1cmUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1mZWF0dXJlcy1pbWFnZSc+SW1hZ2UgRmVhdHVyZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgaW1hZ2UgZmVhdHVyZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICBUbyBpbmNsdWRlIHRoZSA8ZmlsZW5hbWU+ZWNsaXBzZS1kZWJ1ZzwvZmlsZW5hbWU+IGltYWdlIGZlYXR1cmUsCisgICAgICAgICAgICBtb2RpZnkgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBzbyB0aGF0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBpbmNsdWRlcyB0aGUgImVjbGlwc2UtZGVidWciIGZlYXR1cmUuCisgICAgICAgICAgICBBZnRlciBtb2RpZnlpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91IGNhbiByZWJ1aWxkIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIE9uY2UgdGhlIGltYWdlIGlzIHJlYnVpbHQsIHRoZSA8ZmlsZW5hbWU+dGNmLWFnZW50PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGltYWdlIGFuZCBpcyBsYXVuY2hlZCBhdXRvbWF0aWNhbGx5IGFmdGVyCisgICAgICAgICAgICB0aGUgYm9vdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdleHRyYWN0aW5nLXRoZS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICA8dGl0bGU+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBpbnN0YWxsIHlvdXIgdG9vbGNoYWluIGJ5IGhhbmQgb3IgYnVpbGQgaXQgdXNpbmcgQml0QmFrZSBhbmQKKyAgICAgICAgICAgIHlvdSBuZWVkIGEgcm9vdCBmaWxlc3lzdGVtLCB5b3UgbmVlZCB0byBleHRyYWN0IGl0IHNlcGFyYXRlbHkuCisgICAgICAgICAgICBJZiB5b3UgdXNlIHRoZSBBRFQgSW5zdGFsbGVyIHRvIGluc3RhbGwgdGhlIEFEVCwgdGhlIHJvb3QKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgYW5kIGluc3RhbGxlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB5b3UgbmVlZCB0byBleHRyYWN0IHRoZSByb290IGZpbGVzeXN0ZW06CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byBib290IHRoZSBpbWFnZSB1c2luZyBORlMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byB1c2UgdGhlIHJvb3QgZmlsZXN5c3RlbSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgRWNsaXBzZSBJREUgZW52aXJvbm1lbnQgd2l0aCB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQbHVnLWluIGluc3RhbGxlZCBhbGxvd3MgeW91IHRvIHVzZSBRRU1VIHRvIGJvb3QKKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgTkZTLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3Ugd2FudCB0byBkZXZlbG9wIHlvdXIgdGFyZ2V0IGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gYXMgdGhlIHRhcmdldCBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBleHRyYWN0IHRoZSByb290IGZpbGVzeXN0ZW0sIGZpcnN0IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGhlIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50IHNldHVwIHNjcmlwdCB0byBlc3RhYmxpc2gKKyAgICAgICAgICAgIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgICAgICAgICAgICBJZiB5b3UgYnVpbHQgdGhlIHRvb2xjaGFpbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LCB5b3Ugd2lsbCBmaW5kCisgICAgICAgICAgICB0aGUgdG9vbGNoYWluIGVudmlyb25tZW50IHNjcmlwdCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBJZiB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4gYnkgaGFuZCwgdGhlIGVudmlyb25tZW50IHNldHVwCisgICAgICAgICAgICBzY3JpcHQgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFmdGVyIHNvdXJjaW5nIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQsIHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgcHJvdmlkZSB0aGUKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgorICAgICAgICAgICAgVGhlIHNlY29uZCBjb21tYW5kIHNldHMgdXAgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgc2V0dXAgc2NyaXB0IGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+L29wdC9wb2t5LyZESVNUUk87PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIHRoaXJkIGNvbW1hbmQgZXh0cmFjdHMgdGhlIHJvb3QgZmlsZXN5c3RlbSBmcm9tIGEgcHJldmlvdXNseQorICAgICAgICAgICAgYnVpbHQgZmlsZXN5c3RlbSB0aGF0IGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+fi9Eb3dubG9hZHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhpcyBjb21tYW5kIGV4dHJhY3RzIHRoZSByb290IGZpbGVzeXN0ZW0gaW50byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXNhdG88L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIHNvdXJjZSAvb3B0L3Bva3kvJkRJU1RSTzsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICQgcnVucWVtdS1leHRyYWN0LXNkayBcCisgICAgICAgIH4vRG93bmxvYWRzL2NvcmUtaW1hZ2Utc2F0by1zZGstcWVtdXg4Ni0yMDExMDkxNDExODMxLnJvb3Rmcy50YXIuYnoyIFwKKyAgICAgICAgJEhPTUUvcWVtdXg4Ni1zYXRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY291bGQgbm93IHBvaW50IHRvIHRoZSB0YXJnZXQgc3lzcm9vdCBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtc2F0bzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPgorICAgIDx0aXRsZT5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQXMgYW4gYWx0ZXJuYXRpdmUgdG8gbG9jYXRpbmcgYW5kIGRvd25sb2FkaW5nIGEgdG9vbGNoYWluIGluc3RhbGxlciwKKyAgICAgICAgeW91IGNhbiBidWlsZCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBpZiB5b3UgaGF2ZSBhCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQWx0aG91Z2ggbm90IHRoZSBwcmVmZXJyZWQgbWV0aG9kLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgbWV0YS10b29sY2hhaW48L2ZpbGVuYW1lPiB0byBidWlsZCB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICBpbnN0YWxsZXIuCisgICAgICAgICAgICBJZiB5b3UgZG8gdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBzZXBhcmF0ZWx5IGluc3RhbGwgYW5kIGV4dHJhY3QKKyAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzcm9vdC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgc3lzcm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2V4dHJhY3RpbmctdGhlLXJvb3QtZmlsZXN5c3RlbSc+RXh0cmFjdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gYnVpbGQgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgYW5kIHBvcHVsYXRlIHRoZSBTREsgaW1hZ2UsIHVzZSB0aGUKKyAgICAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+IC1jIHBvcHVsYXRlX3NkaworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFRoZSBjb21tYW5kIHJlc3VsdHMgaW4gYSB0b29sY2hhaW4gaW5zdGFsbGVyIHRoYXQgY29udGFpbnMgdGhlIHN5c3Jvb3QKKyAgICAgICAgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBwb3dlcmZ1bCBmZWF0dXJlIGlzIHRoYXQgdGhlIHRvb2xjaGFpbiBpcyBjb21wbGV0ZWx5CisgICAgICAgIHNlbGYtY29udGFpbmVkLgorICAgICAgICBUaGUgYmluYXJpZXMgYXJlIGxpbmtlZCBhZ2FpbnN0IHRoZWlyIG93biBjb3B5IG9mCisgICAgICAgIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4sIHdoaWNoIHJlc3VsdHMgaW4gbm8gZGVwZW5kZW5jaWVzCisgICAgICAgIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICBUbyBhY2hpZXZlIHRoaXMsIHRoZSBwb2ludGVyIHRvIHRoZSBkeW5hbWljIGxvYWRlciBpcworICAgICAgICBjb25maWd1cmVkIGF0IGluc3RhbGwgdGltZSBzaW5jZSB0aGF0IHBhdGggY2Fubm90IGJlIGR5bmFtaWNhbGx5CisgICAgICAgIGFsdGVyZWQuCisgICAgICAgIFRoaXMgaXMgdGhlIHJlYXNvbiBmb3IgYSB3cmFwcGVyIGFyb3VuZCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3NkazwvZmlsZW5hbWU+IGFyY2hpdmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgZmVhdHVyZSBpcyB0aGF0IG9ubHkgb25lIHNldCBvZiBjcm9zcy1jYW5hZGlhbiB0b29sY2hhaW4KKyAgICAgICAgYmluYXJpZXMgYXJlIHByb2R1Y2VkIHBlciBhcmNoaXRlY3R1cmUuCisgICAgICAgIFRoaXMgZmVhdHVyZSB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgdGFyZ2V0IGhhcmR3YXJlIGNhbgorICAgICAgICBiZSBwYXNzZWQgdG8gPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGFzIGEgc2V0IG9mIGNvbXBpbGVyIG9wdGlvbnMuCisgICAgICAgIFRob3NlIG9wdGlvbnMgYXJlIHNldCB1cCBieSB0aGUgZW52aXJvbm1lbnQgc2NyaXB0IGFuZCBjb250YWluZWQgaW4KKyAgICAgICAgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNDJz48ZmlsZW5hbWU+Q0M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIGFuZAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEQnPjxmaWxlbmFtZT5MRDwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgIFRoaXMgcmVkdWNlcyB0aGUgc3BhY2UgbmVlZGVkIGZvciB0aGUgdG9vbHMuCisgICAgICAgIFVuZGVyc3RhbmQsIGhvd2V2ZXIsIHRoYXQgYSBzeXNyb290IGlzIHN0aWxsIG5lZWRlZCBmb3IgZXZlcnkgdGFyZ2V0CisgICAgICAgIHNpbmNlIHRob3NlIGJpbmFyaWVzIGFyZSB0YXJnZXQtc3BlY2lmaWMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgICBSZW1lbWJlciwgYmVmb3JlIHVzaW5nIGFueSBCaXRCYWtlIGNvbW1hbmQsIHlvdQorICAgICAgICAgbXVzdCBzb3VyY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgKGkuZS4KKyAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgb3IKKyAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KQorICAgICAgICAgbG9jYXRlZCBpbiB0aGUgU291cmNlIERpcmVjdG9yeSBhbmQgeW91IG11c3QgbWFrZSBzdXJlIHlvdXIKKyAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiB2YXJpYWJsZXMgYXJlIGNvcnJlY3QuCisgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB5b3UgbmVlZCB0byBiZSBzdXJlIHRoZQorICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgdmFyaWFibGUgbWF0Y2hlcyB0aGUgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIGFuZCB0aGF0CisgICAgICAgICB0aGUKKyAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgIHZhcmlhYmxlIGlzIGNvcnJlY3RseSBzZXQgaWYgeW91IGFyZSBidWlsZGluZyBhIHRvb2xjaGFpbiBkZXNpZ25lZCB0bworICAgICAgICAgcnVuIG9uIGFuIGFyY2hpdGVjdHVyZSB0aGF0IGRpZmZlcnMgZnJvbSB5b3VyIGN1cnJlbnQgZGV2ZWxvcG1lbnQgaG9zdAorICAgICAgICAgbWFjaGluZSAoaS5lLiB0aGUgYnVpbGQgbWFjaGluZSkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCBjb21wbGV0ZXMsIHRoZSB0b29sY2hhaW4KKyAgICAgICAgaW5zdGFsbGVyIHdpbGwgYmUgaW4KKyAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvc2RrPC9maWxlbmFtZT4gaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHRvb2xjaGFpbiBkb2VzIG5vdCBidWlsZCBzdGF0aWMgYmluYXJpZXMuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIHRvb2xjaGFpbiB0byBidWlsZCB0aGVzZSB0eXBlcyBvZiBsaWJyYXJpZXMsCisgICAgICAgICAgICB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdXIgaW1hZ2UgaGFzIHRoZSBhcHByb3ByaWF0ZSBzdGF0aWMKKyAgICAgICAgICAgIGRldmVsb3BtZW50IGxpYnJhcmllcy4KKyAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIGluc2lkZSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgaW5zdGFsbCB0aGUgYXBwcm9wcmlhdGUgbGlicmFyeSBwYWNrYWdlcy4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHVzaW5nIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IHN0YXRpYworICAgICAgICAgICAgZGV2ZWxvcG1lbnQgbGlicmFyaWVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgZ2xpYmMtc3RhdGljZGV2IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nb3B0aW9uYWxseS11c2luZy1hbi1leHRlcm5hbC10b29sY2hhaW4nPgorICAgIDx0aXRsZT5PcHRpb25hbGx5IFVzaW5nIGFuIEV4dGVybmFsIFRvb2xjaGFpbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gdXNlIGFuIGV4dGVybmFsIHRvb2xjaGFpbiBhcyBwYXJ0IG9mIHlvdXIKKyAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBmdW5kYW1lbnRhbCBzdGVwcyB5b3UgbmVlZCB0byBhY2NvbXBsaXNoCisgICAgICAgIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFVuZGVyc3RhbmQgd2hlcmUgdGhlIGluc3RhbGxlZCB0b29sY2hhaW4gcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBGb3IgY2FzZXMgd2hlcmUgeW91IG5lZWQgdG8gYnVpbGQgdGhlIGV4dGVybmFsIHRvb2xjaGFpbiwgeW91CisgICAgICAgICAgICAgICAgd291bGQgbmVlZCB0byB0YWtlIHNlcGFyYXRlIHN0ZXBzIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBNYWtlIHN1cmUgeW91IGFkZCB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdG9vbGNoYWluIHRvCisgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBTZXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVSTkFMX1RPT0xDSEFJTic+PGZpbGVuYW1lPkVYVEVSTkFMX1RPT0xDSEFJTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHRvIHRoZSBsb2NhdGlvbiBpbiB3aGljaCB5b3UgaW5zdGFsbGVkIHRoZSB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBBIGdvb2QgZXhhbXBsZSBvZiBhbiBleHRlcm5hbCB0b29sY2hhaW4gdXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIGlzIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPk1lbnRvciBHcmFwaGljczwvdHJhZGVtYXJrPgorICAgICAgICBTb3VyY2VyeSBHKysgVG9vbGNoYWluLgorICAgICAgICBZb3UgY2FuIHNlZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoYXQgcGFydGljdWxhciBsYXllciBpbiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYXQKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20vTWVudG9yRW1iZWRkZWQvbWV0YS1zb3VyY2VyeS8nPjwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGZpbmQgZnVydGhlciBpbmZvcm1hdGlvbiBieSByZWFkaW5nIGFib3V0IHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVENNT0RFJz48ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsJ3MgdmFyaWFibGUgZ2xvc3NhcnkuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXByZS1idWlsdCc+CisgICAgICAgIDx0aXRsZT5FeGFtcGxlIFVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiBoYXJkd2FyZSwgbGlicmFyaWVzIGFuZCBzZXJ2aWNlcyBhcmUgc3RhYmxlLCB5b3UgY2FuIGdldCBzdGFydGVkIGJ5IHVzaW5nIGEgcHJlLWJ1aWx0IGJpbmFyeQorICAgICAgICAgICAgb2YgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UsIGtlcm5lbCwgYW5kIHRvb2xjaGFpbiBhbmQgcnVuIGl0IHVzaW5nIHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgVGhpcyBzY2VuYXJpbyBpcyB1c2VmdWwgZm9yIGRldmVsb3BpbmcgYXBwbGljYXRpb24gc29mdHdhcmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIiBmb3JtYXQ9IlBORyIgYWxpZ249J2NlbnRlcicgc2NhbGVmaXQ9JzEnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgICAgICA8Y2FwdGlvbj4KKyAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyBhIFByZS1CdWlsdCBJbWFnZTwvcGFyYT4KKyAgICAgICAgICAgIDwvY2FwdGlvbj4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgbmVlZCB0byBkbyBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5zdGFsbCB0aGUgYXBwcm9wcmlhdGUgc3RhbmQtYWxvbmUgdG9vbGNoYWluIHRhcmJhbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG93bmxvYWQgdGhlIHByZS1idWlsdCBpbWFnZSB0aGF0IHdpbGwgYm9vdCB3aXRoIFFFTVUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSB0byBnZXQgdGhlIFFFTVUgaW1hZ2UgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IG1hY2hpbmXigJlzCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIChlLmcuIHg4NiwgQVJNLCBldGMuKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3dubG9hZCB0aGUgZmlsZXN5c3RlbSBpbWFnZSBmb3IgeW91ciB0YXJnZXQgbWFjaGluZSdzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgdGhlIGVudmlyb25tZW50IHRvIGVtdWxhdGUgdGhlIGhhcmR3YXJlIGFuZCB0aGVuIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy10aGUtdG9vbGNoYWluJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBUb29sY2hhaW48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIGEgdGFyYmFsbCBpbnN0YWxsZXIsIHdoaWNoIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgICAgIHByZS1idWlsdCB0b29sY2hhaW4sIHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0LCBhbmQgc3VwcG9ydCBmaWxlcyBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgdW5kZXIKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRvb2xjaGFpbnMgYXJlIGF2YWlsYWJsZSBmb3IgMzItYml0IGFuZCA2NC1iaXQgeDg2IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgc3lzdGVtcyBmcm9tIHRoZSA8ZmlsZW5hbWU+aTY4NjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT54ODZfNjQ8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcywgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW5zIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFyZSBiYXNlZCBvZmYgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlIGFuZCBjb250YWluCisgICAgICAgICAgICAgICAgbGlicmFyaWVzIGFwcHJvcHJpYXRlIGZvciBkZXZlbG9waW5nIGFnYWluc3QgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICBFYWNoIHR5cGUgb2YgZGV2ZWxvcG1lbnQgc3lzdGVtIHN1cHBvcnRzIGZpdmUgb3IgbW9yZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbmFtZXMgb2YgdGhlIHRhcmJhbGwgaW5zdGFsbGVyIHNjcmlwdHMgYXJlIHN1Y2ggdGhhdCBhCisgICAgICAgICAgICAgICAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaG9zdCBzeXN0ZW0gYXBwZWFycyBmaXJzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSBhbmQgdGhlbiBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHN0cmluZworICAgICAgICAgICAgICAgIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5LWdsaWJjLTxyZXBsYWNlYWJsZT5ob3N0X3N5c3RlbTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5pbWFnZV90eXBlPC9yZXBsYWNlYWJsZT4tPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPi10b29sY2hhaW4tPHJlcGxhY2VhYmxlPnJlbGVhc2VfdmVyc2lvbjwvcmVwbGFjZWFibGU+LnNoCisKKyAgICAgV2hlcmU6CisgICAgICAgICA8cmVwbGFjZWFibGU+aG9zdF9zeXN0ZW08L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW06CisKKyAgICAgICAgICAgICAgICAgICAgaTY4NiBvciB4ODZfNjQuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5pbWFnZV90eXBlPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBpbWFnZSB5b3Ugd2lzaCB0bworICAgICAgICAgICAgICAgIGRldmVsb3AgYSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBUb29sa2l0IChTREspIGZvciB1c2UgYWdhaW5zdC4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBidWlsZHMgdG9vbGNoYWluIGluc3RhbGxlcnMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZDoKKworICAgICAgICAgICAgICAgICAgICBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyBwb3B1bGF0ZV9zZGsKKworICAgICAgICAgPHJlcGxhY2VhYmxlPmFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHR1bmVkIHRhcmdldCBhcmNoaXRlY3R1cmU6CisKKyAgICAgICAgICAgICAgICAgICAgaTU4NiwgeDg2XzY0LCBwb3dlcnBjLCBtaXBzLCBhcm12N2Egb3IgYXJtdjV0ZQorCisgICAgICAgICA8cmVwbGFjZWFibGU+cmVsZWFzZV92ZXJzaW9uPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByZWxlYXNlIG51bWJlciBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0OgorCisgICAgICAgICAgICAgICAgICAgICZESVNUUk87LCAmRElTVFJPOytzbmFwc2hvdAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0b29sY2hhaW4gaW5zdGFsbGVyIGlzIGZvciBhIDY0LWJpdAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGFuZCBhIGk1ODYtdHVuZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgIGJhc2VkIG9mZiB0aGUgU0RLIGZvciA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5LWdsaWJjLXg4Nl82NC1jb3JlLWltYWdlLXNhdG8taTU4Ni10b29sY2hhaW4tJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvb2xjaGFpbnMgYXJlIHNlbGYtY29udGFpbmVkIGFuZCBieSBkZWZhdWx0IGFyZSBpbnN0YWxsZWQgaW50bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHlvdSBydW4gdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIsIHlvdSBjYW4gY2hvb3NlIGFuCisgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHNob3dzIGhvdyB0byBydW4gdGhlIGluc3RhbGxlciBnaXZlbiBhIHRvb2xjaGFpbiB0YXJiYWxsCisgICAgICAgICAgICAgICAgZm9yIGEgNjQtYml0IHg4NiBkZXZlbG9wbWVudCBob3N0IHN5c3RlbSBhbmQgYSAzMi1iaXQgeDg2IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgaW5zdGFsbGVyIHNjcmlwdCBzbyB0aGF0IGl0IGlzIGV4ZWN1dGFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGFzc3VtZXMgdGhlIHRvb2xjaGFpbiBpbnN0YWxsZXIgaXMgbG9jYXRlZCBpbiA8ZmlsZW5hbWU+fi9Eb3dubG9hZHMvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHlvdSBhcmUgaW5zdGFsbGluZworICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbGNoYWluLCB0aGUgdG9vbGNoYWluIGluc3RhbGxlciBub3RpZmllcyB5b3UgYW5kIGV4aXRzLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIGluIHRoZSBkaXJlY3RvcnkgYW5kIHJ1biB0aGUgaW5zdGFsbGVyIGFnYWluLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIH4vRG93bmxvYWRzL3Bva3ktZ2xpYmMteDg2XzY0LWNvcmUtaW1hZ2Utc2F0by1pNTg2LXRvb2xjaGFpbi0mRElTVFJPOy5zaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGFyYmFsbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIgYW5kCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS10b29sY2hhaW4tZnJvbS13aXRoaW4tdGhlLWJ1aWxkLXRyZWUnPlVzaW5nIEJpdEJha2UgYW5kIHRoZSBCdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiIgc2VjdGlvbnMgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZG93bmxvYWRpbmctdGhlLXByZS1idWlsdC1saW51eC1rZXJuZWwnPgorICAgICAgICAgICAgPHRpdGxlPkRvd25sb2FkaW5nIHRoZSBQcmUtQnVpbHQgTGludXggS2VybmVsPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCB0aGUgcHJlLWJ1aWx0IExpbnV4IGtlcm5lbCBzdWl0YWJsZSBmb3IgcnVubmluZyBpbiB0aGUgUUVNVSBlbXVsYXRvciBmcm9tCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1FFTVVfRExfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB1c2UgdGhlIGtlcm5lbCB0aGF0IG1hdGNoZXMgdGhlIGFyY2hpdGVjdHVyZSB5b3Ugd2FudCB0byBzaW11bGF0ZS4KKyAgICAgICAgICAgICAgICBEb3dubG9hZCBhcmVhcyBleGlzdCBmb3IgdGhlIGZpdmUgc3VwcG9ydGVkIG1hY2hpbmUgYXJjaGl0ZWN0dXJlczoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cWVtdW1pcHM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnFlbXVwcGM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBrZXJuZWwgZmlsZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICp6SW1hZ2UtcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uYmluCisgICAgIHZtbGludXgtcWVtdTxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4uYmluCisKKyAgICAgV2hlcmU6CisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICB4ODYsIHg4Ni02NCwgcHBjLCBtaXBzLCBvciBhcm0uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgZG93bmxvYWRpbmcgYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IgorICAgICAgICAgICAgICAgIGJ1bGxldGVkIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rvd25sb2FkaW5nLXRoZS1maWxlc3lzdGVtJz4KKyAgICAgICAgICAgIDx0aXRsZT5Eb3dubG9hZGluZyB0aGUgRmlsZXN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBkb3dubG9hZCB0aGUgZmlsZXN5c3RlbSBpbWFnZSBzdWl0YWJsZSBmb3IgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZyb20KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUUVNVV9ETF9VUkw7Jz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgYmUgc3VyZSB0byB1c2UgdGhlIGZpbGVzeXN0ZW0gdGhhdCBtYXRjaGVzIHRoZSBhcmNoaXRlY3R1cmUgeW91IHdhbnQKKyAgICAgICAgICAgICAgICB0byBzaW11bGF0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzeXN0ZW0gaW1hZ2UgaGFzIHR3byB0YXJiYWxsIGZvcm1zOiA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4gZm9ybSB3aGVuIGJvb3RpbmcgYW4gaW1hZ2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnRhcjwvZmlsZW5hbWU+IGZvcm0gY2FuIGJlIGZsYXR0ZW5lZCBvdXQgaW4geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCB1c2VkIGZvciBidWlsZCBwdXJwb3NlcyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY29yZS1pbWFnZS08cmVwbGFjZWFibGU+cHJvZmlsZTwvcmVwbGFjZWFibGU+LXFlbXU8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LmV4dDMKKyAgICAgY29yZS1pbWFnZS08cmVwbGFjZWFibGU+cHJvZmlsZTwvcmVwbGFjZWFibGU+LXFlbXU8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LnRhci5iejIKKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5wcm9maWxlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UncyBwcm9maWxlOgorICAgICAgICAgICAgICAgICAgIGxzYiwgbHNiLWRldiwgbHNiLXNkaywgbHNiLXF0MywgbWluaW1hbCwgbWluaW1hbC1kZXYsIHNhdG8sCisgICAgICAgICAgICAgICAgICAgc2F0by1kZXYsIG9yIHNhdG8tc2RrLiBGb3IgaW5mb3JtYXRpb24gb24gdGhlc2UgdHlwZXMgb2YgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICBwcm9maWxlcywgc2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWltYWdlcyc+SW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZToKKyAgICAgICAgICAgICAgICB4ODYsIHg4Ni02NCwgcHBjLCBtaXBzLCBvciBhcm0uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtdGhlLWVudmlyb25tZW50LWFuZC1zdGFydGluZy10aGUtcWVtdS1lbXVsYXRvcic+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCB0aGUgRW52aXJvbm1lbnQgYW5kIFN0YXJ0aW5nIHRoZSBRRU1VIEVtdWxhdG9yPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBzdGFydCB0aGUgUUVNVSBlbXVsYXRvciwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm0gc2V0cyB1cCB0aGUgZW11bGF0aW9uIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJllPQ1RPX0FEVFBBVEhfRElSOy9lbnZpcm9ubWVudC1zZXR1cC08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LXBva3ktbGludXgtPHJlcGxhY2VhYmxlPmlmPC9yZXBsYWNlYWJsZT4KKworICAgICBXaGVyZToKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlOgorICAgICAgICAgICAgICAgIGk1ODYsIHg4Nl82NCwgcHBjNjAzZSwgbWlwcywgb3IgYXJtdjV0ZS4KKworICAgICAgICAgPHJlcGxhY2VhYmxlPmlmPC9yZXBsYWNlYWJsZT4gaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIGVtYmVkZGVkIGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisgICAgICAgICAgICAgIE5vdCBhbGwgc2V0dXAgc2NyaXB0cyBpbmNsdWRlIHRoaXMgc3RyaW5nLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgdGhpcyBjb21tYW5kIGZvcm0gaW52b2tlcyB0aGUgUUVNVSBlbXVsYXRvcgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBydW5xZW11IDxyZXBsYWNlYWJsZT5xZW11YXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5rZXJuZWwtaW1hZ2U8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+ZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+CisKKyAgICAgV2hlcmU6CisgICAgICAgICA8cmVwbGFjZWFibGU+cWVtdWFyY2g8L3JlcGxhY2VhYmxlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU6IHFlbXV4ODYsIHFlbXV4ODYtNjQsCisgICAgICAgICAgICAgICAgICAgIHFlbXVwcGMsIHFlbXVtaXBzLCBvciBxZW11YXJtLgorCisgICAgICAgICA8cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBrZXJuZWwgaW1hZ2UuCisKKyAgICAgICAgIDxyZXBsYWNlYWJsZT5maWxlc3lzdGVtLWltYWdlPC9yZXBsYWNlYWJsZT4gaXMgdGhlIC5leHQzIGZpbGVzeXN0ZW0gaW1hZ2UuCisKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgc2V0dXAgdGhlIGVtdWxhdGlvbgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGFuZCBsYXVuY2ggUUVNVS4KKyAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB0aGUgcm9vdCBmaWxlc3lzdGVtICg8ZmlsZW5hbWU+LmV4dDM8L2ZpbGVuYW1lPiBmaWxlKSBhbmQKKyAgICAgICAgICAgICAgICB0aGUgcHJlLWJ1aWx0IGtlcm5lbCBpbWFnZSBmaWxlIGJvdGggcmVzaWRlIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIGtlcm5lbCBhbmQgZmlsZXN5c3RlbSBhcmUgZm9yIGEgMzItYml0IHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkICRIT01FCisgICAgICQgc291cmNlICZZT0NUT19BRFRQQVRIX0RJUjsvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICQgcnVucWVtdSBxZW11eDg2IGJ6SW1hZ2UtcWVtdXg4Ni5iaW4gXAorICAgICBjb3JlLWltYWdlLXNhdG8tcWVtdXg4Ni5leHQzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUUVNVSBsYXVuY2hlcyB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBmaWxlc3lzdGVtIGltYWdlIGFuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugc291cmNlIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIEFSTSB0YXJnZXQKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIHRoZW4gYm9vdCB0aGUgbWluaW1hbCBRRU1VIGltYWdlLCB0aGUgZW11bGF0b3IgY29tZXMgdXAgaW4gYSBuZXcKKyAgICAgICAgICAgICAgICBzaGVsbCBpbiBjb21tYW5kLWxpbmUgbW9kZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYm9vdCB0aGUgU0RLIGltYWdlLCBRRU1VIGNvbWVzIHVwIHdpdGggYSBHVUkuCisgICAgICAgICAgICAgICAgPG5vdGU+Qm9vdGluZyB0aGUgUFBDIGltYWdlIHJlc3VsdHMgaW4gUUVNVSBsYXVuY2hpbmcgaW4gdGhlIHNhbWUgc2hlbGwgaW4KKyAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgbW9kZS48L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXN0eWxlLmNzcyBiL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9hZHQtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjJhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvYWR0LXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9hZHQtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL2FkdC10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2FkdC1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZyBiL2RvY3VtZW50YXRpb24vYWR0LW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxMzBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9hZHQtbWFudWFsL2ZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1jdXN0b21pemF0aW9uLnhzbCBiL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTY3NGEwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2JzcC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzNDZlZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvYnNwLWd1aWRlLyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJy4uL2Jvb2suY3NzJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImVjbGlwc2UubWFuaWZlc3QiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzdXBwcmVzcy5uYXZpZ2F0aW9uIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS5pbmRleCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9ic3AtZ3VpZGUvYnNwLWd1aWRlLnhtbCBiL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3N2NhOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1ndWlkZS54bWwKQEAgLTAsMCArMSwxMzggQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxib29rIGlkPSdic3AtZ3VpZGUnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdjZW50ZXInIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSBEZXZlbG9wZXIncyBHdWlkZQorICAgICAgICA8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5Ub208L2ZpcnN0bmFtZT4gPHN1cm5hbWU+WmFudXNzaTwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPnRvbS56YW51c3NpQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5SaWNoYXJkPC9maXJzdG5hbWU+IDxzdXJuYW1lPlB1cmRpZTwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkxpbnV4IEZvdW5kYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZzwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjAuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjI0IE5vdmVtYmVyIDIwMTA8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5UaGUgaW5pdGlhbCBkb2N1bWVudCBkcmFmdCByZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDAuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPjYgQXByaWwgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4wLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT4yMyBNYXkgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4wLjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IE9jdG9iZXIgMjAxMTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4yPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4yIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4zPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEyPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjQ8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjQgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjU8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+SmFudWFyeSAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS44PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS45PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjkgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1Ob24tQ29tbWVyY2lhbC1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxub3RlPgorICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPgorICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgIDwvbm90ZT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImJzcC54bWwiLz4KKworPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KKyAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPC9pbmRleD4KKy0tPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC1zdHlsZS5jc3MgYi9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3Atc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2JzcC10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2JzcC54bWwgYi9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzllYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9ic3AueG1sCkBAIC0wLDAgKzEsMTU1OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2JzcCc+CisKKyAgICAgICAgPHRpdGxlPkJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUCkgLSBEZXZlbG9wZXIncyBHdWlkZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBpcyBhIGNvbGxlY3Rpb24gb2YgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgZGVmaW5lcyBob3cgdG8gc3VwcG9ydCBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgZGV2aWNlLCBzZXQgb2YgZGV2aWNlcywgb3IKKyAgICAgICAgICAgIGhhcmR3YXJlIHBsYXRmb3JtLgorICAgICAgICAgICAgVGhlIEJTUCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgZmVhdHVyZXMKKyAgICAgICAgICAgIHByZXNlbnQgb24gdGhlIGRldmljZSBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWxvbmcgd2l0aCBhbnkKKyAgICAgICAgICAgIGFkZGl0aW9uYWwgaGFyZHdhcmUgZHJpdmVycyByZXF1aXJlZC4KKyAgICAgICAgICAgIFRoZSBCU1AgYWxzbyBsaXN0cyBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZQorICAgICAgICAgICAgY29tcG9uZW50cyByZXF1aXJlZCBpbiBhZGRpdGlvbiB0byBhIGdlbmVyaWMgTGludXggc29mdHdhcmUgc3RhY2sgZm9yIGJvdGgKKyAgICAgICAgICAgIGVzc2VudGlhbCBhbmQgb3B0aW9uYWwgcGxhdGZvcm0gZmVhdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZ3VpZGUgcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgQlNQIExheWVycywgZGVmaW5lcyBhIHN0cnVjdHVyZSBmb3IgY29tcG9uZW50cworICAgICAgICAgICAgc28gdGhhdCBCU1BzIGZvbGxvdyBhIGNvbW1vbmx5IHVuZGVyc3Rvb2QgbGF5b3V0LCBkaXNjdXNzZXMgaG93IHRvIGN1c3RvbWl6ZQorICAgICAgICAgICAgYSByZWNpcGUgZm9yIGEgQlNQLCBhZGRyZXNzZXMgQlNQIGxpY2Vuc2luZywgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgICAgIHNob3dzIHlvdSBob3cgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyPC9saW5rPiB1c2luZyB0d28gWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+QlNQIFRvb2xzPC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdic3AtbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5CU1AgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBCU1AgY29uc2lzdHMgb2YgYSBmaWxlIHN0cnVjdHVyZSBpbnNpZGUgYSBiYXNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHlvdSBjYW4gdGhpbmsgb2YgdGhlIGJhc2UgZGlyZWN0b3J5LCBpdHMgZmlsZSBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjb250ZW50cyBhcyBhIEJTUCBMYXllci4KKyAgICAgICAgICAgICAgICBBbHRob3VnaCBub3QgYSBzdHJpY3QgcmVxdWlyZW1lbnQsIGxheWVycyBpbiB0aGUgWW9jdG8gUHJvamVjdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHdlbGwtZXN0YWJsaXNoZWQgbmFtaW5nIGNvbnZlbnRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBzdHJpbmcgIm1ldGEtIiBpcyBwcmVwZW5kZWQgdG8gdGhlIG1hY2hpbmUgb3IgcGxhdGZvcm0gbmFtZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPiBpbiB0aGUgYWJvdmUgZm9ybS4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+VGlwPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgQlNQIGxheWVyIG5hbWluZyBjb252ZW50aW9uIGlzIHdlbGwtZXN0YWJsaXNoZWQsCisgICAgICAgICAgICAgICAgICAgIGl0IGlzIGFkdmlzYWJsZSB0byBmb2xsb3cgaXQgd2hlbiBjcmVhdGluZyBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRlY2huaWNhbGx5IHNwZWFraW5nLCBhIEJTUCBsYXllciBuYW1lIGRvZXMgbm90IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgd2l0aCA8ZmlsZW5hbWU+bWV0YS08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IG1pZ2h0IHJ1biBpbnRvIHNpdHVhdGlvbnMgd2hlcmUgb2JzY3VyZQorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIGFzc3VtZSB0aGlzIGNvbnZlbnRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoZWxwIHVuZGVyc3RhbmQgdGhlIEJTUCBsYXllciBjb25jZXB0LCBjb25zaWRlciB0aGUgQlNQcyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgYW5kIHByb3ZpZGVzIHdpdGggZWFjaCByZWxlYXNlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBsYXllcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjeW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgdGhyb3VnaCBhIHdlYiBpbnRlcmZhY2UgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IGdvIHRvIHRoYXQgaW50ZXJmYWNlLCB5b3Ugd2lsbCBmaW5kIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHVuZGVyICJZb2N0byBNZXRhZGF0YSBMYXllcnMiIHNldmVyYWwgQlNQIGxheWVycyBhbGwgb2Ygd2hpY2ggYXJlCisgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IChlLmcuIDxmaWxlbmFtZT5tZXRhLW1pbm5vdzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXJhc3BiZXJyeXBpPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgbGF5ZXJzIGlzIGEgcmVwb3NpdG9yeSB1bnRvIGl0c2VsZiBhbmQgY2xpY2tpbmcgb24gYQorICAgICAgICAgICAgICAgIGxheWVyIHJldmVhbHMgaW5mb3JtYXRpb24gdGhhdCBpbmNsdWRlcyB0d28gbGlua3MgZnJvbSB3aGljaCB5b3UgY2FuIGNob29zZQorICAgICAgICAgICAgICAgIHRvIHNldCB1cCBhIGNsb25lIG9mIHRoZSBsYXllcidzIHJlcG9zaXRvcnkgb24geW91ciBsb2NhbCBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjbG9uZXMgdGhlIE1pbm5vd0JvYXJkIEJTUCBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtbWlubm93CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQlNQIGRldmVsb3BtZW50IHdvcmtmbG93LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RldmVsb3BpbmctYS1ib2FyZC1zdXBwb3J0LXBhY2thZ2UtYnNwJz5EZXZlbG9waW5nIGEgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhIGxvY2FsIGNvcHkgb2Ygc291cmNlIGZpbGVzCisgICAgICAgICAgICAgICAgZnJvbSBhIEdpdCByZXBvc2l0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBhbHNvIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGxheWVyJ3MgYmFzZSBkaXJlY3RvcnkgKDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4pIGlzIHRoZSByb290CisgICAgICAgICAgICAgICAgb2YgdGhlIEJTUCBMYXllci4KKyAgICAgICAgICAgICAgICBUaGlzIHJvb3QgaXMgd2hhdCB5b3UgYWRkIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+PGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgIHdoaWNoIGlzIGVzdGFibGlzaGVkIGFmdGVyIHlvdSBydW4gb25lIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHRzIChpLmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgcm9vdCBhbGxvd3MgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcmVjb2duaXplIHRoZSBCU1AKKyAgICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBmcm9tIGl0IGJ1aWxkIGFuIGltYWdlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID89ICIgXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8gXAorICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLW15bGF5ZXIgXAorICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWUgQlNQcyByZXF1aXJlIGFkZGl0aW9uYWwgbGF5ZXJzIG9uCisgICAgICAgICAgICAgICAgdG9wIG9mIHRoZSBCU1AncyByb290IGxheWVyIGluIG9yZGVyIHRvIGJlIGZ1bmN0aW9uYWwuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgYWxzbyBuZWVkIHRvIGFkZCB0aG9zZSBsYXllcnMgdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCTEFZRVJTPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gb3JkZXIgdG8gYnVpbGQgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHNwZWNpZnkgaW4gdGhlICJEZXBlbmRlbmNpZXMiIHNlY3Rpb24gb2YgdGhlIEJTUCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgYW55IHJlcXVpcmVtZW50cyBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIGxheWVycyBhbmQsIHByZWZlcmFibHksIGFueQorICAgICAgICAgICAgICAgIGJ1aWxkIGluc3RydWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNvbnRhaW5lZCBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWUgbGF5ZXJzIGZ1bmN0aW9uIGFzIGEgbGF5ZXIgdG8gaG9sZCBvdGhlciBCU1AgbGF5ZXJzLgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgdGhpcyB0eXBlIG9mIGxheWVyIGlzIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyLAorICAgICAgICAgICAgICAgIHdoaWNoIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGluZGl2aWR1YWwgQlNQIHN1Yi1sYXllcnMsIGFzIHdlbGwgYXMgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBuYW1lZCA8ZmlsZW5hbWU+Y29tbW9uLzwvZmlsZW5hbWU+IGZ1bGwgb2YgY29tbW9uIGNvbnRlbnQgYWNyb3NzIHRob3NlIGxheWVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworCisgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dCI+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZSBGaWxlc3lzdGVtIExheW91dDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlZmluaW5nIGEgY29tbW9uIEJTUCBkaXJlY3Rvcnkgc3RydWN0dXJlIGFsbG93cyBlbmQtdXNlcnMgdG8gdW5kZXJzdGFuZCBhbmQKKyAgICAgICAgICAgICAgICBiZWNvbWUgZmFtaWxpYXIgd2l0aCB0aGF0IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBBIGNvbW1vbiBmb3JtYXQgYWxzbyBlbmNvdXJhZ2VzIHN0YW5kYXJkaXphdGlvbiBvZiBzb2Z0d2FyZSBzdXBwb3J0IG9mIGhhcmR3YXJlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvcG9zZWQgZm9ybSBkb2VzIGhhdmUgZWxlbWVudHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbnRlbmRlZCB0aGF0IHRoaXMgaW5mb3JtYXRpb24gY2FuIGJlCisgICAgICAgICAgICAgICAgdXNlZCBieSBvdGhlciBidWlsZCBzeXN0ZW1zIGJlc2lkZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgdGhhdCBpdCB3aWxsIGJlIHNpbXBsZQorICAgICAgICAgICAgICAgIHRvIGV4dHJhY3QgaW5mb3JtYXRpb24gYW5kIGNvbnZlcnQgaXQgdG8gb3RoZXIgZm9ybWF0cyBpZiByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgdGhyb3VnaCBpdHMgc3RhbmRhcmQgbGF5ZXJzIG1lY2hhbmlzbSwgY2FuIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgYWNjZXB0IHRoZSBmb3JtYXQgZGVzY3JpYmVkIGFzIGEgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIEJTUCBjYXB0dXJlcyBhbGwKKyAgICAgICAgICAgICAgICB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZGV0YWlscyBpbiBvbmUgcGxhY2UgaW4gYSBzdGFuZGFyZCBmb3JtYXQsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgdXNlZnVsIGZvciBhbnkgcGVyc29uIHdpc2hpbmcgdG8gdXNlIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSB0aGV5IGFyZSB1c2luZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSBidWlsZCBzeXN0ZW0gb3Igb3RoZXIgdG9vbHMgLQorICAgICAgICAgICAgICAgIGl0IGlzIGNvbmNlcm5lZCB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb21wb25lbnRzIG9ubHkuCisgICAgICAgICAgICAgICAgQXQgdGhlIGVuZC1kaXN0cmlidXRpb24gcG9pbnQsIHlvdSBjYW4gc2hpcCB0aGUgQlNQIGNvbWJpbmVkIHdpdGggYSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgb3RoZXIgdG9vbHMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIHRoZSBkaXN0aW5jdGlvbiB0aGF0IHRoZXNlCisgICAgICAgICAgICAgICAgYXJlIHNlcGFyYXRlIGNvbXBvbmVudHMgdGhhdCBoYXBwZW4gdG8gYmUgY29tYmluZWQgaW4gY2VydGFpbiBlbmQgcHJvZHVjdHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSBsb29raW5nIGF0IHRoZSBjb21tb24gZm9ybSBmb3IgdGhlIGZpbGUgc3RydWN0dXJlIGluc2lkZSBhIEJTUCBMYXllciwKKyAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgc29tZSByZXF1aXJlbWVudHMgZG8gZXhpc3QgaW4gb3JkZXIgZm9yIGEgQlNQIHRvCisgICAgICAgICAgICAgICAgYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBGb3IgdGhhdCBsaXN0IG9mIHJlcXVpcmVtZW50cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWxlYXNlZC1ic3AtcmVxdWlyZW1lbnRzJz5SZWxlYXNlZCBCU1AgUmVxdWlyZW1lbnRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWxvdyBpcyB0aGUgY29tbW9uIGZvcm0gZm9yIHRoZSBmaWxlIHN0cnVjdHVyZSBpbnNpZGUgYSBCU1AgTGF5ZXIuCisgICAgICAgICAgICAgICAgV2hpbGUgeW91IGNhbiB1c2UgdGhpcyBiYXNpYyBmb3JtIGZvciB0aGUgc3RhbmRhcmQsIHJlYWxpemUgdGhhdCB0aGUgYWN0dWFsIHN0cnVjdHVyZXMKKyAgICAgICAgICAgICAgICBmb3Igc3BlY2lmaWMgQlNQcyBjb3VsZCBkaWZmZXIuCisKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmJzcF9saWNlbnNlX2ZpbGU8L3JlcGxhY2VhYmxlPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L1JFQURNRQorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L1JFQURNRS5zb3VyY2VzCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vYmluYXJ5LzxyZXBsYWNlYWJsZT5ib290YWJsZV9pbWFnZXM8L3JlcGxhY2VhYmxlPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbGF5ZXIuY29uZgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbWFjaGluZS8qLmNvbmYKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWJzcC8qCisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1jb3JlLyoKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWdyYXBoaWNzLyoKKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b188cmVwbGFjZWFibGU+a2VybmVsX3JldjwvcmVwbGFjZWFibGU+LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIHRoZSBlTWVubG93IEJTUDoKKworICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1lbWVubG93L0NPUFlJTkcuTUlUCisgICAgIG1ldGEtZW1lbmxvdy9SRUFETUUKKyAgICAgbWV0YS1lbWVubG93L1JFQURNRS5zb3VyY2VzCisgICAgIG1ldGEtZW1lbmxvdy9iaW5hcnkvCisgICAgIG1ldGEtZW1lbmxvdy9jb25mLworICAgICBtZXRhLWVtZW5sb3cvY29uZi9sYXllci5jb25mCisgICAgIG1ldGEtZW1lbmxvdy9jb25mL21hY2hpbmUvCisgICAgIG1ldGEtZW1lbmxvdy9jb25mL21hY2hpbmUvZW1lbmxvdy1ub2VtZ2QuY29uZgorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2VtZW5sb3ctbm9lbWdkLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2VtZW5sb3ctbm9lbWdkL21hY2hjb25maWcKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlcgorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZW1lbmxvdy1ub2VtZ2QKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZW1lbmxvdy1ub2VtZ2QveG9yZy5jb25maWcKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMta2VybmVsLworICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvCisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKKyAgICAgbWV0YS1lbWVubG93L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgZWFjaCBwYXJ0IG9mIHRoZSBwcm9wb3NlZCBCU1AgZm9ybWF0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0iYnNwLWZpbGVsYXlvdXQtbGljZW5zZSI+CisgICAgICAgICAgICA8dGl0bGU+TGljZW5zZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX2xpY2Vuc2VfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25hbCBmaWxlcyBzYXRpc2Z5IGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgVGhlIHR5cGUgb3IgdHlwZXMgb2YgZmlsZXMgaGVyZSBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSBlTWVubG93IEJTUCBhbGwgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1BZSU5HLk1JVDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIExpY2Vuc2luZyBmaWxlcyBjYW4gYmUgTUlULCBCU0QsIEdQTHYqLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXJlIHJlY29tbWVuZGVkIGZvciB0aGUgQlNQIGJ1dCBhcmUgb3B0aW9uYWwgYW5kIHRvdGFsbHkgdXAgdG8gdGhlIEJTUCBkZXZlbG9wZXIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1yZWFkbWUiPgorICAgICAgICAgICAgPHRpdGxlPlJFQURNRSBGaWxlPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGZpbGUgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIGJvb3QgdGhlIGxpdmUgaW1hZ2VzIHRoYXQgYXJlIG9wdGlvbmFsbHkKKyAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgPGZpbGVuYW1lPmJpbmFyeS88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGFsc28gcHJvdmlkZXMgc3BlY2lhbCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yCisgICAgICAgICAgICAgICAgYnVpbGRpbmcgdGhlIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCBhIG1pbmltdW0sIHRoZSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBtdXN0CisgICAgICAgICAgICAgICAgY29udGFpbiBhIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLCBzdWNoIGFzIHRoZSBuYW1lcyBvZgorICAgICAgICAgICAgICAgIGFueSBvdGhlciBsYXllcnMgb24gd2hpY2ggdGhlIEJTUCBkZXBlbmRzIGFuZCB0aGUgbmFtZSBvZgorICAgICAgICAgICAgICAgIHRoZSBCU1AgbWFpbnRhaW5lciB3aXRoIGhpcyBvciBoZXIgY29udGFjdCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1maWxlbGF5b3V0LXJlYWRtZS1zb3VyY2VzIj4KKyAgICAgICAgICAgIDx0aXRsZT5SRUFETUUuc291cmNlcyBGaWxlPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGlzIGZpbGUgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vUkVBRE1FLnNvdXJjZXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBsb2NhdGUgdGhlIEJTUAorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZXMgKGlmIGFueSkgdGhhdCByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9iaW5hcnk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJbWFnZXMgaW4gdGhlIDxmaWxlbmFtZT5iaW5hcnk8L2ZpbGVuYW1lPiB3b3VsZCBiZSBpbWFnZXMKKyAgICAgICAgICAgICAgICByZWxlYXNlZCB3aXRoIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGluZm9ybWF0aW9uIGluIHRoZSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgYWxzbyBoZWxwcyB5b3UgZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGltYWdlcyB0aGF0IHNoaXAgd2l0aCB0aGUgQlNQLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgQlNQJ3MgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9yIHRoZSBkaXJlY3RvcnkgaGFzIG5vIGltYWdlcywgYW4gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRS5zb3VyY2VzPC9maWxlbmFtZT4gZmlsZSBpcworICAgICAgICAgICAgICAgICAgICBtZWFuaW5nbGVzcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1iaW5hcnkiPgorICAgICAgICAgICAgPHRpdGxlPlByZS1idWlsdCBVc2VyIEJpbmFyaWVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9iaW5hcnkvPHJlcGxhY2VhYmxlPmJvb3RhYmxlX2ltYWdlczwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIGFyZWEgY29udGFpbnMgdXNlZnVsIHByZS1idWlsdCBrZXJuZWxzIGFuZAorICAgICAgICAgICAgICAgIHVzZXItc3BhY2UgZmlsZXN5c3RlbSBpbWFnZXMgcmVsZWFzZWQgd2l0aCB0aGUgQlNQIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgdG8gdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgdHlwaWNhbGx5IGNvbnRhaW5zIGdyYXBoaWNhbCAoZS5nLiBTYXRvKSBhbmQKKyAgICAgICAgICAgICAgICBtaW5pbWFsIGxpdmUgaW1hZ2VzIHdoZW4gdGhlIEJTUCB0YXJiYWxsIGhhcyBiZWVuIGNyZWF0ZWQgYW5kCisgICAgICAgICAgICAgICAgbWFkZSBhdmFpbGFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdDwvdWxpbms+IHdlYnNpdGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2Uga2VybmVscyBhbmQgaW1hZ2VzIHRvIGdldCBhIHN5c3RlbSBydW5uaW5nCisgICAgICAgICAgICAgICAgYW5kIHF1aWNrbHkgZ2V0IHN0YXJ0ZWQgb24gZGV2ZWxvcG1lbnQgdGFza3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleGFjdCB0eXBlcyBvZiBiaW5hcmllcyBwcmVzZW50IGFyZSBoaWdobHkKKyAgICAgICAgICAgICAgICBoYXJkd2FyZS1kZXBlbmRlbnQuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgICAgIEJTUCBMYXllciBhbmQgaXQgd2lsbCBleHBsYWluIGhvdyB0byB1c2UgdGhlIGltYWdlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXNlbnQgdG8gbG9jYXRlIHRoZSBzb3VyY2VzIHVzZWQgdG8gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBwcm92aWRlIGluZm9ybWF0aW9uIG9uIHRoZSBNZXRhZGF0YS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LWxheWVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5MYXllciBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgZmlsZSBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9jb25mL2xheWVyLmNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBpZGVudGlmaWVzIHRoZSBmaWxlIHN0cnVjdHVyZSBhcyBhCisgICAgICAgICAgICAgICAgbGF5ZXIsIGlkZW50aWZpZXMgdGhlCisgICAgICAgICAgICAgICAgY29udGVudHMgb2YgdGhlIGxheWVyLCBhbmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSBzaG91bGQgdXNlIGl0LgorICAgICAgICAgICAgICAgIEdlbmVyYWxseSwgYSBzdGFuZGFyZCBib2lsZXJwbGF0ZSBmaWxlIHN1Y2ggYXMgdGhlIGZvbGxvd2luZyB3b3Jrcy4KKyAgICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHlvdSB3b3VsZCByZXBsYWNlICI8cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4iIGFuZAorICAgICAgICAgICAgICAgICI8cmVwbGFjZWFibGU+X2JzcDwvcmVwbGFjZWFibGU+IiB3aXRoIHRoZSBhY3R1YWwgbmFtZQorICAgICAgICAgICAgICAgIG9mIHRoZSBCU1AgKGkuZS4gPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4gZnJvbSB0aGUgZXhhbXBsZSB0ZW1wbGF0ZSkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAgJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIjxyZXBsYWNlYWJsZT5ic3A8L3JlcGxhY2VhYmxlPiIKKyAgICAgQkJGSUxFX1BBVFRFUk5fPHJlcGxhY2VhYmxlPmJzcDwvcmVwbGFjZWFibGU+ID0gIl4ke0xBWUVSRElSfS8iCisgICAgIEJCRklMRV9QUklPUklUWV88cmVwbGFjZWFibGU+YnNwPC9yZXBsYWNlYWJsZT4gPSAiNiIKKworICAgICBMQVlFUkRFUEVORFNfPHJlcGxhY2VhYmxlPmJzcDwvcmVwbGFjZWFibGU+ID0gImludGVsIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSB0aGUgc3RyaW5nIHN1YnN0aXR1dGlvbnMsIGhlcmUgYXJlIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlbWVudHMKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBlRW1lbmxvdyA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKKyAgICAgQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyAgICAgIyBXZSBoYXZlIHJlY2lwZXMtKiBkaXJlY3RvcmllcywgYWRkIHRvIEJCRklMRVMKKyAgICAgQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisJICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAiZW1lbmxvdyIKKyAgICAgQkJGSUxFX1BBVFRFUk5fZW1lbmxvdyA6PSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX2VtZW5sb3cgPSAiNiIKKworICAgICBMQVlFUkRFUEVORFNfZW1lbmxvdyA9ICJpbnRlbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBzaW1wbHkgbWFrZXMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF3YXJlIG9mIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIG11c3QgZXhpc3Qgc28gdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gcmVjb2duaXplIHRoZSBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJic3AtZmlsZWxheW91dC1tYWNoaW5lIj4KKyAgICAgICAgICAgIDx0aXRsZT5IYXJkd2FyZSBDb25maWd1cmF0aW9uIE9wdGlvbnM8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzIGluIHRoZSBCU1AgTGF5ZXIgYXQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+L2NvbmYvbWFjaGluZS8qLmNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBtYWNoaW5lIGZpbGVzIGJpbmQgdG9nZXRoZXIgYWxsIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgZWxzZXdoZXJlCisgICAgICAgICAgICAgICAgaW4gdGhlIEJTUCBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gdW5kZXJzdGFuZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgQlNQIHN1cHBvcnRzIG11bHRpcGxlIG1hY2hpbmVzLCBtdWx0aXBsZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgICAgICAgICAgICAgICBjYW4gYmUgcHJlc2VudC4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlbmFtZXMgY29ycmVzcG9uZCB0byB0aGUgdmFsdWVzIHRvIHdoaWNoIHVzZXJzIGhhdmUgc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGRlZmluZSB0aGluZ3Mgc3VjaCBhcyB0aGUga2VybmVsIHBhY2thZ2UgdG8gdXNlCisgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUkVGRVJSRURfUFJPVklERVInPjxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb2YgdmlydHVhbC9rZXJuZWwpLCB0aGUgaGFyZHdhcmUgZHJpdmVycyB0bworICAgICAgICAgICAgICAgIGluY2x1ZGUgaW4gZGlmZmVyZW50IHR5cGVzIG9mIGltYWdlcywgYW55IHNwZWNpYWwgc29mdHdhcmUgY29tcG9uZW50cworICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5lZWRlZCwgYW55IGJvb3Rsb2FkZXIgaW5mb3JtYXRpb24sIGFuZCBhbHNvIGFueSBzcGVjaWFsIGltYWdlCisgICAgICAgICAgICAgICAgZm9ybWF0IHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRWFjaCBCU1AgTGF5ZXIgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1hY2hpbmUgZmlsZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIHN1cHBseSBtb3JlIHRoYW4gb25lIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGNvdWxkIGFsc28gaW5jbHVkZSBhIGhhcmR3YXJlICJ0dW5pbmciCisgICAgICAgICAgICAgICAgZmlsZSB0aGF0IGlzIGNvbW1vbmx5IHVzZWQgdG8gZGVmaW5lIHRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgIGFuZCBzcGVjaWZ5IG9wdGltaXphdGlvbiBmbGFncywgd2hpY2ggYXJlIGNhcmVmdWxseSBjaG9zZW4KKyAgICAgICAgICAgICAgICB0byBnaXZlIGJlc3QgcGVyZm9ybWFuY2Ugb24gYSBnaXZlbiBwcm9jZXNzb3IuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFR1bmluZyBmaWxlcyBhcmUgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5pYTMyLWJhc2UuaW5jPC9maWxlbmFtZT4gZmlsZSByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgYW4gaW5jbHVkZSBmaWxlLCB5b3Ugc2ltcGx5IGluY2x1ZGUgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGVFbWVubG93IEJTUAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbWVubG93LW5vZW1nZC5jb25mPC9maWxlbmFtZT4gY29udGFpbnMgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIHN0YXRlbWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2ludGVsLWNvcmUyLTMyLWNvbW1vbi5pbmMKKyAgICAgcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9pbnRlbC1jb21tb24tcGtnYXJjaC5pbmMKKyAgICAgcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9tZXRhLWludGVsLmluYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWJzcC8qCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIGRpcmVjdG9yeSBjb250YWlucyBtaXNjZWxsYW5lb3VzIHJlY2lwZSBmaWxlcyBmb3IKKyAgICAgICAgICAgICAgICB0aGUgQlNQLgorICAgICAgICAgICAgICAgIE1vc3Qgbm90YWJseSB3b3VsZCBiZSB0aGUgZm9ybWZhY3RvciBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlIGVNZW5sb3cgQlNQIHRoZXJlIGlzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGFuCisgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUgdXNlZCB0byBhdWdtZW50IHRoZSByZWNpcGUgdGhhdCBzdGFydHMgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCB0aGVyZSBhcmUgbWFjaGluZS1zcGVjaWZpYyBzZXR0aW5ncyB1c2VkIGR1cmluZworICAgICAgICAgICAgICAgIHRoZSBidWlsZCB0aGF0IGFyZSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmdXJ0aGVyIGRvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEluIHRoZSBlTWVubG93IGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bWFjaGNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBzdXBwb3J0cyB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzIEFzc29jaWF0aW9uCisgICAgICAgICAgICAgICAgKFZFU0EpIGdyYXBoaWNzIGRyaXZlcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgQXNzdW1lIGEgVVNCIG1vdXNlIGFuZCBrZXlib2FyZCBhcmUgY29ubmVjdGVkCisgICAgIEhBVkVfVE9VQ0hTQ1JFRU49MAorICAgICBIQVZFX0tFWUJPQVJEPTEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPjxwYXJhPgorICAgICAgICAgICAgICAgIElmIGEgQlNQIGRvZXMgbm90IGhhdmUgYSBmb3JtZmFjdG9yIGVudHJ5LCBkZWZhdWx0cyBhcmUgZXN0YWJsaXNoZWQgYWNjb3JkaW5nIHRvCisgICAgICAgICAgICAgICAgdGhlIGZvcm1mYWN0b3IgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgaW5zdGFsbGVkIGJ5IHRoZSBtYWluCisgICAgICAgICAgICAgICAgZm9ybWZhY3RvciByZWNpcGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPjwvbm90ZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2JzcC1maWxlbGF5b3V0LXJlY2lwZXMtZ3JhcGhpY3MnPgorICAgICAgICAgICAgPHRpdGxlPkRpc3BsYXkgU3VwcG9ydCBGaWxlczwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2UgZmlsZXMgaW4gdGhlIEJTUCBMYXllciBhdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1ncmFwaGljcy8qCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIGRpcmVjdG9yeSBjb250YWlucyByZWNpcGVzIGZvciB0aGUgQlNQIGlmIGl0IGhhcworICAgICAgICAgICAgICAgIHNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciBncmFwaGljcyBzdXBwb3J0LgorICAgICAgICAgICAgICAgIEFsbCBmaWxlcyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRoZSBCU1AgdG8gc3VwcG9ydCBhIGRpc3BsYXkgYXJlCisgICAgICAgICAgICAgICAga2VwdCBoZXJlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPm1ldGEtZW1lbmxvdzwvZmlsZW5hbWU+IGxheWVyLAorICAgICAgICAgICAgICAgIHdoaWNoIHN1cHBvcnRzIHRoZSBlTWVubG93IHBsYXRmb3JtIGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSd0cmFkZSc+QXRvbTwvdHJhZGVtYXJrPgorICAgICAgICAgICAgICAgIFo1eHggcHJvY2Vzc29yIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPHRyYWRlbWFyayBjbGFzcz0ncmVnaXN0ZXJlZCc+SW50ZWw8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICBTeXN0ZW0gQ29udHJvbGxlciBIdWIgVVMxNVcsIHVzZXMgdGhlc2UgZmlsZXMgZm9yIHN1cHBvcnRpbmcKKyAgICAgICAgICAgICAgICB0aGUgVmlkZW8gRWxlY3Ryb25pY3MgU3RhbmRhcmRzIEFzc29jaWF0aW9uIChWRVNBKSBncmFwaGljczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtZW1lbmxvdy9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZAorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9lbWVubG93LW5vZW1nZC94b3JnLmNvbmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdic3AtZmlsZWxheW91dC1rZXJuZWwnPgorICAgICAgICAgICAgPHRpdGxlPkxpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGVzZSBmaWxlcyBpbiB0aGUgQlNQIExheWVyIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0byouYmJhcHBlbmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFwcGVuZCB5b3VyIHNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIG1haW4ga2VybmVsIHJlY2lwZSB5b3UgYXJlIHVzaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIHlvdXIgQlNQLCB5b3UgdHlwaWNhbGx5IHdhbnQgdG8gdXNlIGFuIGV4aXN0aW5nIFlvY3RvIFByb2plY3Qga2VybmVsIHJlY2lwZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYXBwZW5kIHlvdXIgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUga2VybmVsIHJlY2lwZSBieSB1c2luZyBhCisgICAgICAgICAgICAgICAgc2ltaWxhcmx5IG5hbWVkIGFwcGVuZCBmaWxlLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZSBCU1AgTGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4vcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkpLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU3VwcG9zZSB5b3UgYXJlIHVzaW5nIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG9fMy4xNC5iYjwvZmlsZW5hbWU+IHJlY2lwZSB0byBidWlsZAorICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHlvdSBoYXZlIHNlbGVjdGVkIHRoZSBrZXJuZWwgaW4geW91cgorICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSBieSBhZGRpbmcgdGhlc2UgdHlwZXMKKyAgICAgICAgICAgICAgICBvZiBzdGF0ZW1lbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTQlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgcHJlZmVycmVkIHByb3ZpZGVyIGlzIGFzc3VtZWQgYnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfUFJPVklERVI8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgZG9lcyBub3QgYXBwZWFyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFlvdSB3b3VsZCB1c2UgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjE0LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSB0byBhcHBlbmQKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBCU1Agc2V0dGluZ3MgdG8gdGhlIGtlcm5lbCwgdGh1cyBjb25maWd1cmluZyB0aGUga2VybmVsIGZvciB5b3VyIHBhcnRpY3VsYXIgQlNQLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgbG9vayBhdCB0aGUgZXhpc3RpbmcgZU1lbmxvdyBCU1AuCisgICAgICAgICAgICAgICAgVGhlIGFwcGVuZCBmaWxlIHVzZWQgaXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLWVtZW5sb3cvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Rpbmcgc2hvd3MgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCB0aGUgYWN0dWFsIGNvbW1pdCBJRCBzdHJpbmdzIGluIHRoaXMgZXhhbXBsZSBsaXN0aW5nIG1pZ2h0IGJlIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHRoYW4gdGhlIGFjdHVhbCBzdHJpbmdzIGluIHRoZSBmaWxlIGZyb20gdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBHaXQgc291cmNlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FX2VtZW5sb3ctbm9lbWdkID0gImVtZW5sb3ctbm9lbWdkIgorICAgICBLTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93IgorICAgICBLQlJBTkNIX2VtZW5sb3ctbm9lbWdkID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfZW1lbmxvdy1ub2VtZ2QgPSAiIGZlYXR1cmVzL2RybS1nbWE1MDAvZHJtLWdtYTUwMC5zY2MiCisKKyAgICAgTElOVVhfVkVSU0lPTl9lbWVubG93LW5vZW1nZCA9ICIzLjE0LjE5IgorICAgICBTUkNSRVZfbWFjaGluZV9lbWVubG93LW5vZW1nZCA9ICI5MDJmMzRkMzYxMDJhNGIyMDA4Yjc3NmVjYWU2ODZmODBkMzA3ZTEyIgorICAgICBTUkNSRVZfbWV0YV9lbWVubG93LW5vZW1nZCA9ICIyOGUzOTc0MWI4YjMwMTgzMzQwMjFkOTgxMzY5ZDNmZDYxZjE4ZjViIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGFwcGVuZCBmaWxlIGNvbnRhaW5zIHN0YXRlbWVudHMgdXNlZCB0byBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgIGVNZW5sb3cgQlNQLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGRlZmluZXMgbWFjaGluZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTVBBVElCTEVfTUFDSElORSc+PGZpbGVuYW1lPkNPTVBBVElCTEVfTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBlbnN1cmUgdGhlIG1hY2hpbmUgbmFtZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gbWFwcyB0byB0aGUgbWFjaGluZSBuYW1lIHVzZWQgYnkgdGhlIExpbnV4IFlvY3RvCisgICAgICAgICAgICAgICAga2VybmVsLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGFsc28gdXNlcyB0aGUgb3B0aW9uYWwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0JSQU5DSCc+PGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZW5zdXJlIHRoZSBidWlsZCBwcm9jZXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2VtZW5sb3c8L2ZpbGVuYW1lPiBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LRVJORUxfRkVBVFVSRVMnPjxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgZW5hYmxlcyBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgKGUuZy4gSW50ZWwgR01BLTUwMCBEUk0gRHJpdmVyIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgVGhlIGFwcGVuZCBmaWxlIHBvaW50cyB0byBzcGVjaWZpYyBjb21taXRzIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IGFuZCB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgIGJyYW5jaGVzIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBrZXJuZWwgbmVlZGVkIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgIGVNZW5sb3cgQlNQLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmUgdGhpbmcgbWlzc2luZyBpbiB0aGlzIHBhcnRpY3VsYXIgQlNQLCB3aGljaCB5b3Ugd2lsbCB0eXBpY2FsbHkgbmVlZCB3aGVuCisgICAgICAgICAgICAgICAgZGV2ZWxvcGluZyBhIEJTUCwgaXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgKDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4pIGZvciB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICBXaGVuIGRldmVsb3BpbmcgYSBCU1AsIHlvdSBwcm9iYWJseSBoYXZlIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBvciBhIHNldCBvZiBrZXJuZWwKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQsIHdoZW4gdGFrZW4gdG9nZXRoZXIsIGRlZmluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgQlNQLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNjb21wbGlzaCB0aGlzIGRlZmluaXRpb24gYnkgcHV0dGluZyB0aGUgY29uZmlndXJhdGlvbnMgaW4gYSBmaWxlIG9yIGEgc2V0IG9mIGZpbGVzCisgICAgICAgICAgICAgICAgaW5zaWRlIGEgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgeW91ciBrZXJuZWwncyBhcHBlbmQgZmlsZSBhbmQgaGF2aW5nIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgbmFtZSBhcyB0aGUga2VybmVsJ3MgbWFpbiByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBXaXRoIGFsbCB0aGVzZSBjb25kaXRpb25zIG1ldCwgc2ltcGx5IHJlZmVyZW5jZSB0aG9zZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHRoZSBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBhIGZpbGUgY2FsbGVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5ldHdvcmtfY29uZmlncy5jZmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBsYWNlIHRoYXQgZmlsZSBpbnNpZGUgYSBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmxpbnV4LXlvY3RvPC9maWxlbmFtZT4gYW5kIHRoZW4gYWRkCisgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBzdWNoIGFzIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIHRoZSBrZXJuZWwsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlCisgICAgICAgICAgICAgICAgcGlja2VkIHVwIGFuZCBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL25ldHdvcmtfY29uZmlncy5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBncm91cCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGludG8gbXVsdGlwbGUgZmlsZXMsIHlvdSBwZXJmb3JtIGEgc2ltaWxhciBwcm9jZWR1cmUuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgZ3JvdXBzIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljYWxseSBmb3IgRXRoZXJuZXQgYW5kIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgaW50byB0aGVpciBvd24gZmlsZXMgYW5kIGFkZHMgdGhlIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICAgICAgYnkgdXNpbmcgYSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBsaWtlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBhcHBlbmQgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2V0aC5jZmcgXAorICAgICAgICAgICAgZmlsZTovL2dmeC5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBpbiBib2lsZXJwbGF0ZSBmb3JtIGluIHRoZQorICAgICAgICAgICAgICAgIHByZXZpb3VzIGV4YW1wbGUgaW4gb3JkZXIgdG8gbWFrZSBpdCBlYXN5IHRvIGRvIHRoYXQuCisgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBtdXN0IGJlIGluIHlvdXIgbGF5ZXIgb3IgQml0QmFrZSB3aWxsIG5vdCBmaW5kIHRoZSBwYXRjaGVzIG9yCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgZXZlbiBpZiB5b3UgaGF2ZSB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGVuYWJsZXMgdGhlIGJ1aWxkIHByb2Nlc3MgdG8KKyAgICAgICAgICAgICAgICBmaW5kIHRob3NlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPdGhlciBtZXRob2RzIGV4aXN0IHRvIGFjY29tcGxpc2ggZ3JvdXBpbmcgYW5kIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgd29ya2luZyB3aXRoIGEgbG9jYWwgY2xvbmUgb2YgdGhlIGtlcm5lbCByZXBvc2l0b3J5LAorICAgICAgICAgICAgICAgICAgICB5b3UgY291bGQgY2hlY2tvdXQgdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCBtYWtlIHlvdXIgY2hhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gcHVzaCB0aGUgY2hhbmdlcyB0byB0aGUgbG9jYWwgYmFyZSBjbG9uZSBvZiB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgeW91IGRpcmVjdGx5IGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoIGZvciB5b3VyIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGxpa2VseSBlbmQgdXAgaW4gdGhhdCBsb2NhdGlvbiBhbnl3YXkgaWYgdGhlIEJTUCBnZXRzCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBob3dldmVyLCB0aGUgWW9jdG8gUHJvamVjdCBtYWludGFpbmVycyB0YWtlIGNhcmUgb2YgbW92aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LXNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBOb3Qgb25seSBpcyBpdCBlYXNpZXIgZm9yIEJTUCBkZXZlbG9wZXJzIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHB1dHRpbmcgdGhvc2UKKyAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgYnJhbmNoLCBidXQgaGF2aW5nIHRoZSBtYWludGFpbmVycyBkbyBpdCBhbGxvd3MgdGhlbSB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsJyBrbm93bGVkZ2UgYWJvdXQgdGhlIGtpbmRzIG9mIGNvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgbXVsdGlwbGUgQlNQcyBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgdHJlZSBhcmUgdHlwaWNhbGx5IHVzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFsbG93cyBmb3IgcHJvbW90aW9uIG9mIGNvbW1vbiBjb25maWd1cmF0aW9ucyBpbnRvIGNvbW1vbiBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZW1lbnRzLWFuZC1yZWNvbW1lbmRhdGlvbnMtZm9yLXJlbGVhc2VkLWJzcHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlcXVpcmVtZW50cyBhbmQgUmVjb21tZW5kYXRpb25zIGZvciBSZWxlYXNlZCBCU1BzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ2VydGFpbiByZXF1aXJlbWVudHMgZXhpc3QgZm9yIGEgcmVsZWFzZWQgQlNQIHRvIGJlIGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHJlY29tbWVuZGF0aW9ucyBhbHNvIGV4aXN0LgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHJlcXVpcmVtZW50cyBhbmQgcmVjb21tZW5kYXRpb25zIGZvcgorICAgICAgICAgICAgICAgIHJlbGVhc2VkIEJTUHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyZWxlYXNlZC1ic3AtcmVxdWlyZW1lbnRzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UmVsZWFzZWQgQlNQIFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIGxvb2tpbmcgYXQgQlNQIHJlcXVpcmVtZW50cywgeW91IHNob3VsZCBjb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgaGVyZSBhc3N1bWUgdGhlIEJTUCBsYXllciBpcyBhIHdlbGwtZm9ybWVkLCAibGVnYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGd1aWRlbGluZXMgb24gY3JlYXRpbmcgYSBsYXllciB0aGF0IG1lZXRzIHRoZXNlIGJhc2UgcmVxdWlyZW1lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L2xpbms+IiBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDcmVhdGluZyBMYXllcnMiPC91bGluaz4gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSByZXF1aXJlbWVudHMgaW4gdGhpcyBzZWN0aW9uIGFwcGx5IHJlZ2FyZGxlc3Mgb2YgaG93IHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsdGltYXRlbHkgcGFja2FnZSBhIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGNvbnN1bHQgdGhlIHBhY2thZ2luZyBhbmQgZGlzdHJpYnV0aW9uIGd1aWRlbGluZXMgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyByZWxlYXNlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgcGFja2FnaW5nIGFuZCBkaXN0cmlidXRpb24gcmVxdWlyZW1lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvVGhpcmRfUGFydHlfQlNQX1JlbGVhc2VfUHJvY2Vzcyc+VGhpcmQgUGFydHkgQlNQIFJlbGVhc2UgUHJvY2VzczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpa2kgcGFnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgQlNQIGFzIGl0IGlzIG1hZGUgYXZhaWxhYmxlIHRvIGEgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIHJlbGVhc2VkIGZvcm0gb2YgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEJTUCBNZXRhZGF0YSBjYW4gYmUgY29udGFpbmVkIHdpdGhpbiBhIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvdWxkIGhhdmUgYSBkaXJlY3Rvcnkgc3RydWN0dXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gd2hhdCBhcHBlYXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG9mZmljaWFsbHkgcmVsZWFzZWQgQlNQIGxheWVyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IHNwZWNpZmljIHBhY2thZ2VzIG9yIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zIGV4aXN0IGluIHRoZSBCU1AgbGF5ZXIsIGJleW9uZCB0aGUgcmVxdWlyZW1lbnRzIGZvciBnZW5lcmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBubyByZXF1aXJlbWVudCBleGlzdHMgZGljdGF0aW5nIHRoYXQgYSBzcGVjaWZpYyBrZXJuZWwgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdmVyc2lvbiBiZSB1c2VkIGluIGEgZ2l2ZW4gQlNQLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgcmVxdWlyZW1lbnRzIGZvciBhIHJlbGVhc2VkIEJTUCB0aGF0IGNvbmZvcm1zIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXllciBOYW1lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEJTUCBtdXN0IGhhdmUgYSBsYXllciBuYW1lIHRoYXQgZm9sbG93cyB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IHN0YW5kYXJkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gQlNQIGxheWVyIG5hbWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GaWxlIFN5c3RlbSBMYXlvdXQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHBvc3NpYmxlLCB1c2UgdGhlIHNhbWUgZGlyZWN0b3J5IG5hbWVzIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1AgbGF5ZXIgYXMgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+cmVjaXBlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBzaG91bGQgcGxhY2UgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMpIGFuZCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMpIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4gc3ViZGlyZWN0b3JpZXMgYnkgZnVuY3Rpb25hbCBhcmVhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgb3V0bGluZWQgaW4gPGZpbGVuYW1lPnJlY2lwZXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCBmaW5kIGEgY2F0ZWdvcnkgaW4gPGZpbGVuYW1lPnJlY2lwZXMudHh0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBmaXQgYSBwYXJ0aWN1bGFyIHJlY2lwZSwgeW91IGNhbiBtYWtlIHVwIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgPGZpbGVuYW1lPnJlY2lwZXMudHh0PC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikgZm91bmQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvdHJlZS9tZXRhJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIGFueSBwYXJ0aWN1bGFyIDxmaWxlbmFtZT5yZWNpcGVzLSo8L2ZpbGVuYW1lPiBjYXRlZ29yeSwgdGhlIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBtYXRjaCB3aGF0IGlzIGZvdW5kIGluIHRoZSBPcGVuRW1iZWRkZWQgQ29yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5ICg8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgU291cmNlIERpcmVjdG9yeSAoPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIG1ha2Ugc3VyZSB5b3UgcGxhY2UgcmVsYXRlZCBmaWxlcyBpbiBhcHByb3ByaWF0ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4gc3ViZGlyZWN0b3JpZXMgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlJ3MgZnVuY3Rpb24sIG9yIHdpdGhpbiBhIHN1YmRpcmVjdG9yeSBjb250YWluaW5nIGEgc2V0IG9mIGNsb3NlbHktcmVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZXMgdGhlbXNlbHZlcyBzaG91bGQgZm9sbG93IHRoZSBnZW5lcmFsIGd1aWRlbGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcmVjaXBlcyB1c2VkIGluIHRoZSBZb2N0byBQcm9qZWN0IGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwOi8vb3BlbmVtYmVkZGVkLm9yZy93aWtpL1N0eWxlZ3VpZGUnPk9wZW5FbWJlZGRlZCBTdHlsZSBHdWlkZTwvdWxpbms+Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGljZW5zZSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIGxpY2Vuc2UgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGxpY2Vuc2UgY292ZXJzIHRoZSBCU1AgTWV0YWRhdGEgYXMgYSB3aG9sZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzcGVjaWZ5IHdoaWNoIGxpY2Vuc2UgdG8gdXNlIHNpbmNlIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBsaWNlbnNlIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL21ldGEtZnJpMi9DT1BZSU5HLk1JVCc+PGZpbGVuYW1lPkNPUFlJTkcuTUlUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIHRoZSBGaXNoIFJpdmVyIElzbGFuZCAyIEJTUCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZnJpMjwvZmlsZW5hbWU+IEJTUCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGFuIGV4YW1wbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJFQURNRSBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvbWV0YS1pbnRlbC90cmVlL21ldGEtZnJpMi9SRUFETUUnPjxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgdGhlIEZpc2ggUml2ZXIgSXNsYW5kIDIgQlNQIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1mcmkyPC9maWxlbmFtZT4gQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYW4gZXhhbXBsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXQgYSBtaW5pbXVtLCB0aGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGJyaWVmIGRlc2NyaXB0aW9uIGFib3V0IHRoZSBoYXJkd2FyZSB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBsaXN0IG9mIGFsbCB0aGUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGljaCBhIEJTUCBsYXllciBkZXBlbmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSB0eXBpY2FsbHkgYSBsaXN0IG9mIHJlcXVpcmVkIGxheWVycyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIHRoZSBCU1AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgZGVwZW5kZW5jaWVzIHNob3VsZCBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoZSBCU1AgbWlnaHQgaGF2ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFueSByZXF1aXJlZCBzcGVjaWFsIGxpY2Vuc2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGluZm9ybWF0aW9uIGluY2x1ZGVzIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsIHZhcmlhYmxlcyBuZWVkZWQgdG8gc2F0aXNmeSBhIEVVTEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbnN0cnVjdGlvbnMgb24gaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIG9yIGRpc3RyaWJ1dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyaWVzIGJ1aWx0IGZyb20gdGhlIEJTUCBNZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllciBtYWludGFpbmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgcGVyc29uIHRvIHdob20gcGF0Y2hlcyBhbmQgcXVlc3Rpb25zIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgc2VudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmluZCB0aGUgcmlnaHQgcGVyc29uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYnVpbGQgdGhlIEJTUCB1c2luZyB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RydWN0aW9ucyBvbiBob3cgdG8gYm9vdCB0aGUgQlNQIGJ1aWxkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCU1AgbGF5ZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0cnVjdGlvbnMgb24gaG93IHRvIGJvb3QgdGhlIGJpbmFyeSBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByZXNlbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiBvbiBhbnkga25vd24gYnVncyBvciBpc3N1ZXMgdGhhdCB1c2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGtub3cgYWJvdXQgd2hlbiBlaXRoZXIgYnVpbGRpbmcgb3IgYm9vdGluZyB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UkVBRE1FLnNvdXJjZXMgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGluY2x1ZGUgYSA8ZmlsZW5hbWU+UkVBRE1FLnNvdXJjZXM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgc3BlY2lmaWVzIGV4YWN0bHkgd2hlcmUgeW91IGNhbiBmaW5kIHRoZSBzb3VyY2VzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSB0aGUgYmluYXJ5IGltYWdlcyBjb250YWluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbmFyeTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgaWYgcHJlc2VudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL21ldGEtaW50ZWwvdHJlZS9tZXRhLWZyaTIvUkVBRE1FLnNvdXJjZXMnPjxmaWxlbmFtZT5SRUFETUUuc291cmNlczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB0aGUgRmlzaCBSaXZlciBJc2xhbmQgMiBCU1AgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWZyaTI8L2ZpbGVuYW1lPiBCU1AgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXllciBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpZGVudGlmaWVzIHRoZSA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVyIGFzIGEgbGF5ZXIgdG8gdGhlIGJ1aWxkIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFjaGluZSBDb25maWd1cmF0aW9uIEZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29uZmlndXJhdGlvbiBmaWxlcyBkZWZpbmUgbWFjaGluZSB0YXJnZXRzIHRoYXQgY2FuIGJlIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIEJTUCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMgZGVmaW5lIHZhcmlhdGlvbnMgb2YgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGEgQlNQIHN1cHBvcnRzIG11bHRpcGxlIG1hY2hpbmUgdmFyaWF0aW9ucywgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGVxdWF0ZWx5IGRlc2NyaWJlIGVhY2ggdmFyaWF0aW9uIGluIHRoZSBCU1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIG11bHRpcGxlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBkZXNjcmliZSBkaXNwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gaGF2ZSB2ZXJ5IGRpZmZlcmVudCB0YXJnZXRzLCB5b3Ugc2hvdWxkIGNyZWF0ZSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBsYXllcnMgZm9yIGVhY2ggdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPkl0IGlzIGNvbXBsZXRlbHkgcG9zc2libGUgZm9yIGEgZGV2ZWxvcGVyIHRvIHN0cnVjdHVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIHJlcG9zaXRvcnkgYXMgYSBjb25nbG9tZXJhdGlvbiBvZiB1bnJlbGF0ZWQgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMsIGFuZCB0byBwb3NzaWJseSBnZW5lcmF0ZSBCU1BzIHRhcmdldGVkIGZvciByZWxlYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGF0IGRpcmVjdG9yeSB1c2luZyBzY3JpcHRzIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwPC9maWxlbmFtZT4gbGF5ZXIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2ggY29uc2lkZXJhdGlvbnMgYXJlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdyZWxlYXNlZC1ic3AtcmVjb21tZW5kYXRpb25zJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UmVsZWFzZWQgQlNQIFJlY29tbWVuZGF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSByZWNvbW1lbmRhdGlvbnMgZm9yIGEgcmVsZWFzZWQgQlNQIHRoYXQgY29uZm9ybXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJvb3RhYmxlIEltYWdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCByZWxlYXNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBjb250YWluIG9uZSBvciBtb3JlIGJvb3RhYmxlIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgYm9vdGFibGUgaW1hZ2VzIGFsbG93cyB1c2VycyB0byBlYXNpbHkgdHJ5IG91dCB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlaXIgb3duIGhhcmR3YXJlLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBzb21lIGNhc2VzLCBpdCBtaWdodCBub3QgYmUgY29udmVuaWVudCB0byBpbmNsdWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290YWJsZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBtaWdodCB3YW50IHRvIG1ha2UgdHdvIHZlcnNpb25zIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUCBhdmFpbGFibGU6IG9uZSB0aGF0IGNvbnRhaW5zIGJpbmFyeSBpbWFnZXMsIGFuZCBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvZXMgbm90LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIHRoYXQgZG9lcyBub3QgY29udGFpbiBib290YWJsZSBpbWFnZXMgYXZvaWRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5uZWNlc3NhcnkgZG93bmxvYWQgdGltZXMgZm9yIHVzZXJzIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBuZWVkIHRvIGRpc3RyaWJ1dGUgYSBCU1AgYW5kIGluY2x1ZGUgYm9vdGFibGUgaW1hZ2VzIG9yIGJ1aWxkIGtlcm5lbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtcyBtZWFudCB0byBhbGxvdyB1c2VycyB0byBib290IHRoZSBCU1AgZm9yIGV2YWx1YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlcywgeW91IHNob3VsZCBwdXQgdGhlIGltYWdlcyBhbmQgYXJ0aWZhY3RzIHdpdGhpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpbmFyeS88L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS08cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgZG8gaW5jbHVkZSBhIGJvb3RhYmxlIGltYWdlIGFzIHBhcnQgb2YgdGhlIEJTUCBhbmQgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGJ1aWx0IGJ5IHNvZnR3YXJlIGNvdmVyZWQgYnkgdGhlIEdQTCBvciBvdGhlciBvcGVuIHNvdXJjZSBsaWNlbnNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHVuZGVyc3RhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWVldCBhbGwgbGljZW5zaW5nIHJlcXVpcmVtZW50cywgd2hpY2ggY291bGQgaW5jbHVkZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzb3VyY2UgZmlsZXMuPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgYSBZb2N0byBMaW51eCBLZXJuZWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwgcmVjaXBlcyBpbiB0aGUgQlNQIHNob3VsZCBiZSBiYXNlZCBvbiBhIFlvY3RvIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpbmcgeW91ciByZWNpcGVzIG9uIHRoZXNlIGtlcm5lbHMgcmVkdWNlcyB0aGUgY29zdHMgZm9yIG1haW50YWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJTUCBhbmQgaW5jcmVhc2VzIGl0cyBzY2FsYWJpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5Zb2N0byBMaW51eCBLZXJuZWw8L2ZpbGVuYW1lPiBjYXRlZ29yeSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGVzZSBrZXJuZWxzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3VzdG9taXppbmctYS1yZWNpcGUtZm9yLWEtYnNwJz4KKyAgICAgICAgICAgIDx0aXRsZT5DdXN0b21pemluZyBhIFJlY2lwZSBmb3IgYSBCU1A8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIElmIHlvdSBwbGFuIG9uIGN1c3RvbWl6aW5nIGEgcmVjaXBlIGZvciBhIHBhcnRpY3VsYXIgQlNQLCB5b3UgbmVlZCB0byBkbyB0aGUKKyAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGZvciB0aGUgbW9kaWZpZWQgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgYXBwZW5kIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB5b3VyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW4gdGhlIEJTUCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHN1cHBvcnRzIHlvdXIgbWFjaGluZSBpcyBzdWNoIHRoYXQgaXQgY2FuIGJlIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZXhhbXBsZSBsYXRlciBpbiB0aGlzIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgUHV0IHRoZSBhcHBlbmQgZmlsZSBpbiBhIGRpcmVjdG9yeSB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUncyBuYW1lIGFuZCBpcyBsb2NhdGVkIGluIGFuIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgICAgIHN1Yi1kaXJlY3RvcnkgaW5zaWRlIHRoZSBCU1AgbGF5ZXIgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMtYnNwPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5yZWNpcGVzLWdyYXBoaWNzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlBsYWNlIHRoZSBCU1Atc3BlY2lmaWMgZmlsZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgIEhvdyBleHBhbnNpdmUgdGhlIGxheWVyIGlzIGFmZmVjdHMgd2hlcmUgeW91IG11c3QgcGxhY2UgdGhlc2UgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3VyIGxheWVyIHN1cHBvcnRzIHNldmVyYWwgZGlmZmVyZW50IG1hY2hpbmUgdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGJlIHN1cmUgeW91ciBsYXllcidzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW5jbHVkZXMgaGllcmFyY2h5CisgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2VwYXJhdGVzIHRoZSBmaWxlcyBvdXQgYWNjb3JkaW5nIHRvIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBtYWNoaW5lcywgdGhlIGxheWVyIHdvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICAgICBoYXZlIHRoYXQgYWRkaXRpb25hbCBoaWVyYXJjaHkgYW5kIHRoZSBmaWxlcyB3b3VsZCBvYnZpb3VzbHkgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gcmVzaWRlIGluIGEgbWFjaGluZS1zcGVjaWZpYyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIHNwZWNpZmljIGV4YW1wbGUgdG8gaGVscCB5b3UgYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHByb2Nlc3MuCisgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHRoYXQgY3VzdG9taXplcyBhIHJlY2lwZSBieSBhZGRpbmcKKyAgICAgICAgICAgICAgIGEgQlNQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lZCA8ZmlsZW5hbWU+aW50ZXJmYWNlczwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQtaWZ1cGRvd25fMS4wLmJiPC9maWxlbmFtZT4gcmVjaXBlIGZvciBtYWNoaW5lICJ4eXoiIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgQlNQIGxheWVyIGFsc28gc3VwcG9ydHMgc2V2ZXJhbCBvdGhlciBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgIERvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVkaXQgdGhlIDxmaWxlbmFtZT5pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgc28gdGhhdCBpdAorICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwZW5kIGZpbGUgbmVlZHMgdG8gYmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXh5ei9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhbmQgcGxhY2UgdGhlIG5ldyA8ZmlsZW5hbWU+aW50ZXJmYWNlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgQlNQJ3MgbGF5ZXIgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLXh5ei9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9maWxlcy94eXotbWFjaGluZS1vbmUvaW50ZXJmYWNlcworICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIDxmaWxlbmFtZT5tZXRhLXh5ejwvZmlsZW5hbWU+IGxheWVyIGRpZCBub3Qgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbWFjaGluZXMsIHlvdSB3b3VsZCBwbGFjZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnRlcmZhY2VzPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaGVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS14eXovcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vZmlsZXMvaW50ZXJmYWNlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgYXBwZW5kIGZpbGVzIGV4dGVuZHMgdGhlIHNlYXJjaCBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byBmaW5kIGZpbGVzIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgZm9yIHRoaXMgZXhhbXBsZSB5b3UgbmVlZCB0byBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlIHNhbWUgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgYXMgeW91ciBhcHBlbmQgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWxpY2Vuc2luZy1jb25zaWRlcmF0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+QlNQIExpY2Vuc2luZyBDb25zaWRlcmF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHNvbWUgY2FzZXMsIGEgQlNQIGNvbnRhaW5zIHNlcGFyYXRlbHkgbGljZW5zZWQgSW50ZWxsZWN0dWFsIFByb3BlcnR5IChJUCkKKyAgICAgICAgICAgICAgICBmb3IgYSBjb21wb25lbnQgb3IgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHlvdSBhcmUgcmVxdWlyZWQgdG8gYWNjZXB0IHRoZSB0ZXJtcyBvZiBhIGNvbW1lcmNpYWwgb3Igb3RoZXIKKyAgICAgICAgICAgICAgICB0eXBlIG9mIGxpY2Vuc2UgdGhhdCByZXF1aXJlcyBzb21lIGtpbmQgb2YgZXhwbGljaXQgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgKEVVTEEpLgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIGxpY2Vuc2UgaXMgYWNjZXB0ZWQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiB0aGVuIGJ1aWxkIGFuZAorICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgY29tcG9uZW50IGluIHRoZSBmaW5hbCBCU1AgaW1hZ2UuCisgICAgICAgICAgICAgICAgSWYgdGhlIEJTUCBpcyBhdmFpbGFibGUgYXMgYSBwcmUtYnVpbHQgaW1hZ2UsIHlvdSBjYW4gZG93bmxvYWQgdGhlIGltYWdlIGFmdGVyCisgICAgICAgICAgICAgICAgYWdyZWVpbmcgdG8gdGhlIGxpY2Vuc2Ugb3IgRVVMQS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNvdWxkIGZpbmQgdGhhdCBzb21lIHNlcGFyYXRlbHkgbGljZW5zZWQgY29tcG9uZW50cyB0aGF0IGFyZSBlc3NlbnRpYWwKKyAgICAgICAgICAgICAgICBmb3Igbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgc3lzdGVtIG1pZ2h0IG5vdCBoYXZlIGFuIHVuZW5jdW1iZXJlZCAob3IgZnJlZSkKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRlLgorICAgICAgICAgICAgICAgIFdpdGhvdXQgdGhlc2UgZXNzZW50aWFsIGNvbXBvbmVudHMsIHRoZSBzeXN0ZW0gd291bGQgYmUgbm9uLWZ1bmN0aW9uYWwuCisgICAgICAgICAgICAgICAgVGhlbiBhZ2FpbiwgeW91IG1pZ2h0IGZpbmQgdGhhdCBvdGhlciBsaWNlbnNlZCBjb21wb25lbnRzIHRoYXQgYXJlIHNpbXBseQorICAgICAgICAgICAgICAgICdnb29kLXRvLWhhdmUnIG9yIHB1cmVseSBlbGVjdGl2ZSBkbyBoYXZlIGFuIHVuZW5jdW1iZXJlZCwgZnJlZSByZXBsYWNlbWVudAorICAgICAgICAgICAgICAgIGNvbXBvbmVudCB0aGF0IHlvdSBjYW4gdXNlIHJhdGhlciB0aGFuIGFncmVlaW5nIHRvIHRoZSBzZXBhcmF0ZWx5IGxpY2Vuc2VkIGNvbXBvbmVudC4KKyAgICAgICAgICAgICAgICBFdmVuIGZvciBjb21wb25lbnRzIGVzc2VudGlhbCB0byB0aGUgc3lzdGVtLCB5b3UgbWlnaHQgZmluZCBhbiB1bmVuY3VtYmVyZWQgY29tcG9uZW50CisgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgaWRlbnRpY2FsIGJ1dCB3aWxsIHdvcmsgYXMgYSBsZXNzLWNhcGFibGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBsaWNlbnNlZCB2ZXJzaW9uIGluIHRoZSBCU1AgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgY2FzZXMgd2hlcmUgeW91IGNhbiBzdWJzdGl0dXRlIGEgZnJlZSBjb21wb25lbnQgYW5kIHN0aWxsCisgICAgICAgICAgICAgICAgbWFpbnRhaW4gdGhlIHN5c3RlbSdzIGZ1bmN0aW9uYWxpdHksIHRoZSAiRG93bmxvYWRzIiBwYWdlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCB3ZWJzaXRlJ3M8L3VsaW5rPgorICAgICAgICAgICAgICAgIG1ha2VzIGF2YWlsYWJsZSBkZS1mZWF0dXJlZCBCU1BzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgY29tcGxldGVseSBmcmVlIG9mIGFueSBJUCBlbmN1bWJyYW5jZXMuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgY2FuIHVzZSB0aGUgc3Vic3RpdHV0aW9uIGRpcmVjdGx5IGFuZAorICAgICAgICAgICAgICAgIHdpdGhvdXQgYW55IGZ1cnRoZXIgbGljZW5zaW5nIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgICAgICBJZiBwcmVzZW50LCB0aGVzZSBmdWxseSBkZS1mZWF0dXJlZCBCU1BzIGFyZSBuYW1lZCBhcHByb3ByaWF0ZWx5CisgICAgICAgICAgICAgICAgZGlmZmVyZW50IGFzIGNvbXBhcmVkIHRvIHRoZSBuYW1lcyBvZiB0aGUgcmVzcGVjdGl2ZQorICAgICAgICAgICAgICAgIGVuY3VtYmVyZWQgQlNQcy4KKyAgICAgICAgICAgICAgICBJZiBhdmFpbGFibGUsIHRoZXNlIHN1YnN0aXR1dGlvbnMgYXJlIHlvdXIKKyAgICAgICAgICAgICAgICBzaW1wbGVzdCBhbmQgbW9zdCBwcmVmZXJyZWQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBVc2Ugb2YgdGhlc2Ugc3Vic3RpdHV0aW9ucyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uYWxpdHkgbWVldHMKKyAgICAgICAgICAgICAgICBzeXN0ZW0gcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiBob3dldmVyLCBhIG5vbi1lbmN1bWJlcmVkIHZlcnNpb24gaXMgdW5hdmFpbGFibGUgb3IKKyAgICAgICAgICAgICAgICBpdCBwcm92aWRlcyB1bnN1aXRhYmxlIGZ1bmN0aW9uYWxpdHkgb3IgcXVhbGl0eSwgeW91IGNhbiB1c2UgYW4gZW5jdW1iZXJlZAorICAgICAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgY291cGxlIGRpZmZlcmVudCBtZXRob2RzIGV4aXN0IHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0bworICAgICAgICAgICAgICAgIHNhdGlzZnkgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIGFuIGVuY3VtYmVyZWQgQlNQLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlbSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlOgorCSAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNFTlNFX0ZMQUdTJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgcmVjaXBlcyB0aGF0IGhhdmUgY29tbWVyY2lhbCBvciBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgb2Ygc3BlY2lhbGx5LWxpY2Vuc2VkIHBhY2thZ2VzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZWFjaCBvZiB0aG9zZSByZWNpcGVzLCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGEgbWF0Y2hpbmcgbGljZW5zZSBzdHJpbmcgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiB2YXJpYWJsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeWluZyB0aGUgbWF0Y2hpbmcgbGljZW5zZSBzdHJpbmcgc2lnbmlmaWVzIHRoYXQgeW91IGFncmVlIHRvIHRoZSBsaWNlbnNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGJ1aWxkIHN5c3RlbSBjYW4gYnVpbGQgdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGFuZCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tcG9uZW50IGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyc+RW5hYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lcmNpYWxseSBMaWNlbnNlZCBSZWNpcGVzPC91bGluaz4iIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwgZm9yIGRldGFpbHMgb24gaG93IHRvIHVzZSB0aGVzZSB2YXJpYWJsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IGJ1aWxkIGFzIHlvdSBub3JtYWxseSB3b3VsZCwgd2l0aG91dAorCQkgICAgICAgIHNwZWNpZnlpbmcgYW55IHJlY2lwZXMgaW4gdGhlCisJCSAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4sIHRoZSBidWlsZCBzdG9wcyBhbmQKKwkJICAgICAgICBwcm92aWRlcyB5b3Ugd2l0aCB0aGUgbGlzdCBvZiByZWNpcGVzIHRoYXQgeW91IGhhdmUKKwkJICAgICAgICB0cmllZCB0byBpbmNsdWRlIGluIHRoZSBpbWFnZSB0aGF0IG5lZWQgZW50cmllcyBpbgorCQkgICAgICAgIHRoZSA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPi4KKwkJICAgICAgICBPbmNlIHlvdSBlbnRlciB0aGUgYXBwcm9wcmlhdGUgbGljZW5zZSBmbGFncyBpbnRvIHRoZSB3aGl0ZWxpc3QsCisJCSAgICAgICAgcmVzdGFydCB0aGUgYnVpbGQgdG8gY29udGludWUgd2hlcmUgaXQgbGVmdCBvZmYuCisJCSAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgdGhlIHByb21wdCB3aWxsIG5vdCBhcHBlYXIgYWdhaW4KKwkJICAgICAgICBzaW5jZSB5b3UgaGF2ZSBzYXRpc2ZpZWQgdGhlIHJlcXVpcmVtZW50LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uY2UgdGhlIGFwcHJvcHJpYXRlIGxpY2Vuc2UgZmxhZ3MgYXJlIG9uIHRoZSB3aGl0ZSBsaXN0CisJCSAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+IHZhcmlhYmxlLCB5b3UKKwkJICAgICAgICBjYW4gYnVpbGQgdGhlIGVuY3VtYmVyZWQgaW1hZ2Ugd2l0aCBubyBjaGFuZ2UgYXQgYWxsCisJCSAgICAgICAgdG8gdGhlIG5vcm1hbCBidWlsZCBwcm9jZXNzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdldCBhIHByZS1idWlsdCB2ZXJzaW9uIG9mIHRoZSBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IHRoaXMgdHlwZSBvZiBCU1AgYnkgdmlzaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiRG93bmxvYWRzIiBwYWdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRvd25sb2FkIEJTUCB0YXJiYWxscyB0aGF0IGNvbnRhaW4gcHJvcHJpZXRhcnkgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWdyZWVpbmcgdG8gdGhlIGxpY2Vuc2luZworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIG9mIGVhY2ggb2YgdGhlIGluZGl2aWR1YWxseSBlbmN1bWJlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhcyBwYXJ0IG9mIHRoZSBkb3dubG9hZCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgT2J0YWluaW5nIHRoZSBCU1AgdGhpcyB3YXkgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW4gZW5jdW1iZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIgYWdyZWVpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjbGljay10aHJvdWdoIGxpY2Vuc2UgYWdyZWVtZW50cyBwcmVzZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91cnNlbGYgdXNpbmcgdGhlIHJlY2lwZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJiYWxsLCB5b3Ugd2lsbCBzdGlsbCBuZWVkIHRvIGNyZWF0ZSBhbgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4gdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBlbmN1bWJlcmVkIHJlY2lwZXMgaW4gdGhlIEJTUC48L3BhcmE+PC9saXN0aXRlbT4KKwkgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFByZS1jb21waWxlZCBpbWFnZXMgYXJlIGJ1bmRsZWQgd2l0aAorICAgICAgICAgICAgICAgIGEgdGltZS1saW1pdGVkIGtlcm5lbCB0aGF0IHJ1bnMgZm9yIGEKKyAgICAgICAgICAgICAgICBwcmVkZXRlcm1pbmVkIGFtb3VudCBvZiB0aW1lICgxMCBkYXlzKSBiZWZvcmUgaXQgZm9yY2VzCisgICAgICAgICAgICAgICAgdGhlIHN5c3RlbSB0byByZWJvb3QuCisgICAgICAgICAgICAgICAgVGhpcyBsaW1pdGF0aW9uIGlzIG1lYW50IHRvIGRpc2NvdXJhZ2UgZGlyZWN0IHJlZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFlvdSBtdXN0IGV2ZW50dWFsbHkgcmVidWlsZCB0aGUgaW1hZ2UgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgcmVzdHJpY3Rpb24uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QncyBCU1AgVG9vbHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpbmNsdWRlcyBhIGNvdXBsZSBvZiB0b29scyB0aGF0IGVuYWJsZQorICAgICAgICAgICAgICAgIHlvdSB0byBjcmVhdGUgYSA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgbGF5ZXI8L2xpbms+CisgICAgICAgICAgICAgICAgZnJvbSBzY3JhdGNoIGFuZCBkbyBiYXNpYyBjb25maWd1cmF0aW9uIGFuZCBtYWludGVuYW5jZQorICAgICAgICAgICAgICAgIG9mIHRoZSBrZXJuZWwgd2l0aG91dCBldmVyIGxvb2tpbmcgYXQgYSBNZXRhZGF0YSBmaWxlLgorICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xzIGFyZSA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICByZXNwZWN0aXZlbHkuCisJICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgY29tbW9uIGxvY2F0aW9uIGFuZCBoZWxwIGZlYXR1cmVzIGFzIHdlbGwKKyAgICAgICAgICAgICAgICBhcyBwcm92aWRlIGRldGFpbHMgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbDwvZmlsZW5hbWU+IHRvb2xzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29tbW9uLWZlYXR1cmVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29tbW9uIEZlYXR1cmVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXNpZ25lZCB0byBoYXZlIGEgIGNvbW1hbmQgaW50ZXJmYWNlIHNvbWV3aGF0IGxpa2UKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiwgZWFjaAorICAgICAgICAgICAgICAgICAgICB0b29sIGlzIHN0cnVjdHVyZWQgYXMgYSBzZXQgb2Ygc3ViLWNvbW1hbmRzIHVuZGVyIGEKKyAgICAgICAgICAgICAgICAgICAgdG9wLWxldmVsIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgY29tbWFuZCAoPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPikgaXRzZWxmIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90aGluZyBidXQgaW52b2tlIG9yIHByb3ZpZGUgaGVscCBvbiB0aGUgc3ViLWNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIGl0IHN1cHBvcnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCb3RoIHRvb2xzIHJlc2lkZSBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHMvPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdG8gdXNlIHRoZSBzY3JpcHRzLCB5b3UgbXVzdCA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGp1c3QgYXMgeW91IHdvdWxkIHdoZW4gaW52b2tpbmcgYSBidWlsZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiA8cmVwbGFjZWFibGU+YnVpbGRfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbW9zdCBpbW1lZGlhdGVseSB1c2VmdWwgZnVuY3Rpb24gaXMgdG8gZ2V0IGhlbHAgb24gYm90aCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWx0LWluIGhlbHAgc3lzdGVtIG1ha2VzIGl0IGVhc3kgdG8gZHJpbGwgZG93biBhdAorICAgICAgICAgICAgICAgICAgICBhbnkgdGltZSBhbmQgdmlldyB0aGUgc3ludGF4IHJlcXVpcmVkIGZvciBhbnkgc3BlY2lmaWMgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgU2ltcGx5IGVudGVyIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHdpdGggdGhlIDxmaWxlbmFtZT5oZWxwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGhlbHAKKyAgICAgVXNhZ2U6CisKKyAgICAgIENyZWF0ZSBhIGN1c3RvbWl6ZWQgWW9jdG8gQlNQIGxheWVyLgorCisgICAgICB1c2FnZTogeW9jdG8tYnNwIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyAgICAgIEN1cnJlbnQgJ3lvY3RvLWJzcCcgY29tbWFuZHMgYXJlOgorICAgICAgICAgY3JlYXRlICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IFlvY3RvIEJTUAorICAgICAgICAgbGlzdCAgICAgICAgICAgICAgTGlzdCBhdmFpbGFibGUgdmFsdWVzIGZvciBvcHRpb25zIGFuZCBCU1AgcHJvcGVydGllcworCisgICAgICBTZWUgJ3lvY3RvLWJzcCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKworCisgICAgIE9wdGlvbnM6CisgICAgICAgLS12ZXJzaW9uICAgIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtRCwgLS1kZWJ1ZyAgb3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2ltaWxhcmx5LCBlbnRlcmluZyBqdXN0IHRoZSBuYW1lIG9mIGEgc3ViLWNvbW1hbmQgc2hvd3MgdGhlIGRldGFpbGVkIHVzYWdlCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGF0IHN1Yi1jb21tYW5kOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tYnNwIGNyZWF0ZQorCisgICAgIFVzYWdlOgorCisgICAgICBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisKKyAgICAgIHVzYWdlOiB5b2N0by1ic3AgY3JlYXRlICZsdDtic3AtbmFtZSZndDsgJmx0O2thcmNoJmd0OyBbLW8gJmx0O0RJUk5BTUUmZ3Q7IHwgLS1vdXRkaXIgJmx0O0RJUk5BTUUmZ3Q7XQorICAgICAgICAgICAgIFstaSAmbHQ7SlNPTiBQUk9QRVJUWSBGSUxFJmd0OyB8IC0taW5maWxlICZsdDtKU09OIFBST1BFUlRZX0ZJTEUmZ3Q7XQorCisgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIFlvY3RvIEJTUCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuCisgICAgICBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQgYnkgZGVmYXVsdCB3aXRoaW4KKyAgICAgIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcyAnbWV0YS1ic3AtbmFtZScuICBUaGUgLW8gb3B0aW9uCisgICAgICBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyIGluIGEgZGlyZWN0b3J5IHdpdGggYSBkaWZmZXJlbnQKKyAgICAgIG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW55IHN1Yi1jb21tYW5kLCB5b3UgY2FuIHVzZSB0aGUgd29yZCAiaGVscCIgb3B0aW9uIGp1c3QgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICBzdWItY29tbWFuZCB0byBnZXQgbW9yZSBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWJzcCBoZWxwIGNyZWF0ZQorCisgICAgIE5BTUUKKyAgICAgICAgIHlvY3RvLWJzcCBjcmVhdGUgLSBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisKKyAgICAgU1lOT1BTSVMKKyAgICAgICAgIHlvY3RvLWJzcCBjcmVhdGUgJmx0O2JzcC1uYW1lJmd0OyAmbHQ7a2FyY2gmZ3Q7IFstbyAmbHQ7RElSTkFNRSZndDsgfCAtLW91dGRpciAmbHQ7RElSTkFNRSZndDtdCisgICAgICAgICAgICAgWy1pICZsdDtKU09OIFBST1BFUlRZIEZJTEUmZ3Q7IHwgLS1pbmZpbGUgJmx0O0pTT04gUFJPUEVSVFlfRklMRSZndDtdCisKKyAgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgWW9jdG8gQlNQIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgIHBhcmFtZXRlcnMuICBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQKKyAgICAgICAgIGJ5IGRlZmF1bHQgd2l0aGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcworICAgICAgICAgJ21ldGEtYnNwLW5hbWUnLiAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgQlNQIGxheWVyCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgICAgICBUaGUgdmFsdWUgb2YgdGhlICdrYXJjaCcgcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNldCBvZiBmaWxlcworICAgICAgICAgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlIEJTUCwgYWxvbmcgd2l0aCB0aGUgc3BlY2lmaWMgc2V0IG9mCisgICAgICAgICAncHJvcGVydGllcycgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsbCBvdXQgdGhlIEJTUC1zcGVjaWZpYworICAgICAgICAgcG9ydGlvbnMgb2YgdGhlIEJTUC4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSAna2FyY2gnIHBhcmFtZXRlcgorICAgICAgICAgY2FuIGJlIGxpc3RlZCB2aWEgJ3lvY3RvLWJzcCBsaXN0IGthcmNoJy4KKworICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTm93IHRoYXQgeW91IGtub3cgd2hlcmUgdGhlc2UgdHdvIGNvbW1hbmRzIHJlc2lkZSBhbmQgaG93IHRvIGFjY2VzcyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBvbiB0aGVtLCB5b3Ugc2hvdWxkIGZpbmQgaXQgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgdG8gZGlzY292ZXIgdGhlIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBCU1AgYW5kIHBlcmZvcm0gYmFzaWMga2VybmVsIG1haW50ZW5hbmNlIG9uIHRoYXQgQlNQIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiB0b29sIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYSAiZ2VuZXJpYyIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhpcyB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEd1aWRlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuZXh0IHNlY3Rpb25zIHByb3ZpZGUgYSBjb25jcmV0ZSBzdGFydGluZyBwb2ludCB0byBleHBhbmQgb24gYSBmZXcgcG9pbnRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IG9idmlvdXMgb3IgdGhhdCBjb3VsZCB1c2UgZnVydGhlciBleHBsYW5hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgbmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBzY3JpcHQgY3JlYXRlcyBhIG5ldworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdic3AtbGF5ZXJzJz5CU1AgbGF5ZXI8L2xpbms+IGZvciBhbnkgYXJjaGl0ZWN0dXJlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICBieSB0aGUgWW9jdG8gUHJvamVjdCwgYXMgd2VsbCBhcyBRRU1VIHZlcnNpb25zIG9mIHRoZSBzYW1lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBtb2RlIG9mIHRoZSBzY3JpcHQncyBvcGVyYXRpb24gaXMgdG8gcHJvbXB0IHlvdSBmb3IgaW5mb3JtYXRpb24gbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIHRoZSBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgY3VycmVudCBzZXQgb2YgQlNQcywgdGhlIHNjcmlwdCBwcm9tcHRzIHlvdSBmb3IgdmFyaW91cyBpbXBvcnRhbnQKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBzdWNoIGFzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBrZXJuZWwgdG8gdXNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJyYW5jaCBvZiB0aGF0IGtlcm5lbCB0byB1c2UgKG9yIHJlLXVzZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byB1c2UgWCwgYW5kIGlmIHNvLCB3aGljaCBkcml2ZXJzIHRvIHVzZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZXRoZXIgdG8gdHVybiBvbiBTTVA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBCU1AgaGFzIGEga2V5Ym9hcmQ8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIHRoZSBCU1AgaGFzIGEgdG91Y2hzY3JlZW48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZW1haW5pbmcgY29uZmlndXJhYmxlIGl0ZW1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgQlNQPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwIGNyZWF0ZTwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBhIG5ldyBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXF1aXJlcyB5b3UgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIga2VybmVsIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmthcmNoPC9maWxlbmFtZT4pIG9uIHdoaWNoIHRvIGJhc2UgdGhlIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgeW91IGhhdmUgc291cmNlZCB0aGUgZW52aXJvbm1lbnQsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwIGxpc3Qga2FyY2g8L2ZpbGVuYW1lPiBzdWItY29tbWFuZCB0byBsaXN0IHRoZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzIGF2YWlsYWJsZSBmb3IgQlNQIGNyZWF0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1ic3AgbGlzdCBrYXJjaAorICAgICBBcmNoaXRlY3R1cmVzIGF2YWlsYWJsZToKKyAgICAgICAgIHFlbXUKKyAgICAgICAgIG1pcHM2NAorICAgICAgICAgcG93ZXJwYworICAgICAgICAgeDg2XzY0CisgICAgICAgICBhcm0KKyAgICAgICAgIG1pcHMKKyAgICAgICAgIGkzODYKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBwcmVzZW50cyBhbiBleGFtcGxlIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlhcm08L2ZpbGVuYW1lPiBhcyB0aGUgbWFjaGluZSBuYW1lIGFuZCA8ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBtYWNoaW5lIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgT2YgdGhlIGF2YWlsYWJsZSBhcmNoaXRlY3R1cmVzLCA8ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+IGlzIHRoZSBvbmx5IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlcyB0aGUgc2NyaXB0IHRvIHByb21wdCB5b3UgZnVydGhlciBmb3IgYW4gYWN0dWFsIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gZXZlcnkgb3RoZXIgd2F5LCB0aGlzIGFyY2hpdGVjdHVyZSBpcyByZXByZXNlbnRhdGl2ZSBvZiBob3cgY3JlYXRpbmcgYSBCU1AgZm9yCisgICAgICAgICAgICAgICAgICAgIGFuIGFjdHVhbCBtYWNoaW5lIHdvdWxkIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWFzb24gdGhlIGV4YW1wbGUgdXNlcyB0aGlzIGFyY2hpdGVjdHVyZSBpcyBiZWNhdXNlIGl0IGlzIGFuIGVtdWxhdGVkIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICBhbmQgY2FuIGVhc2lseSBiZSBmb2xsb3dlZCB3aXRob3V0IHJlcXVpcmluZyBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIHRoZSA8ZmlsZW5hbWU+eW9jdG8tYnNwIGNyZWF0ZTwvZmlsZW5hbWU+IGNvbW1hbmQgcnVucywgZGVmYXVsdCB2YWx1ZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9tcHRzIGFwcGVhciBpbiBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgUHJlc3NpbmcgZW50ZXIgd2l0aG91dCBzdXBwbHlpbmcgYW55dGhpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBvciBwcmVzc2luZyBlbnRlcgorICAgICAgICAgICAgICAgICAgICB3aXRoIGFuIGludmFsaWQgcmVzcG9uc2UgY2F1c2VzIHRoZSBzY3JpcHQgdG8gYWNjZXB0IHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBzY3JpcHQgY29tcGxldGVzLCB0aGUgbmV3IDxmaWxlbmFtZT5tZXRhLW15YXJtPC9maWxlbmFtZT4gQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBoYXZlIHNvdXJjZWQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgY29tcGxldGUgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWJzcCBjcmVhdGUgbXlhcm0gcWVtdQorICAgICBDaGVja2luZyBiYXNpYyBnaXQgY29ubmVjdGl2aXR5Li4uCisgICAgIERvbmUuCisgICAgIFdoaWNoIHFlbXUgYXJjaGl0ZWN0dXJlIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8gW2RlZmF1bHQ6IGkzODZdCisgICAgICAgICAxKSBpMzg2ICAgICgzMi1iaXQpCisgICAgICAgICAyKSB4ODZfNjQgICg2NC1iaXQpCisgICAgICAgICAzKSBBUk0gICAgICgzMi1iaXQpCisgICAgICAgICA0KSBQb3dlclBDICgzMi1iaXQpCisgICAgICAgICA1KSBNSVBTICAgICgzMi1iaXQpCisgICAgICAgICA2KSBNSVBTNjQgICg2NC1iaXQpCisgICAgIDMKKyAgICAgV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIFtkZWZhdWx0OiB5XSB5CisgICAgIERvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSBbZGVmYXVsdDogeV0KKyAgICAgR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkuZ2l0Li4uCisgICAgIFBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHlvdXIgbmV3IEJTUCBicmFuY2ggb246IFtkZWZhdWx0OiBzdGFuZGFyZC9iYXNlXQorICAgICAgICAgMSkgc3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMKKyAgICAgICAgIDIpIHN0YW5kYXJkL2Jhc2UKKyAgICAgICAgIDMpIHN0YW5kYXJkL2JlYWdsZWJvYXJkCisgICAgICAgICA0KSBzdGFuZGFyZC9iZWFnbGVib25lCisgICAgICAgICA1KSBzdGFuZGFyZC9jaworICAgICAgICAgNikgc3RhbmRhcmQvY29tbW9uLXBjCisgICAgICAgICA3KSBzdGFuZGFyZC9jcm93bmJheQorICAgICAgICAgOCkgc3RhbmRhcmQvZWRnZXJvdXRlcgorICAgICAgICAgOSkgc3RhbmRhcmQvZnNsLW1wYzgzMTVlLXJkYgorICAgICAgICAgMTApIHN0YW5kYXJkL210aS1tYWx0YTMyCisgICAgICAgICAxMSkgc3RhbmRhcmQvbXRpLW1hbHRhNjQKKyAgICAgICAgIDEyKSBzdGFuZGFyZC9xZW11YXJtNjQKKyAgICAgICAgIDEzKSBzdGFuZGFyZC9xZW11cHBjCisgICAgIDEKKyAgICAgV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIFtkZWZhdWx0OiB5XQorICAgICBEb2VzIHlvdXIgQlNQIGhhdmUgYSB0b3VjaHNjcmVlbj8gKHkvbikgW2RlZmF1bHQ6IG5dCisgICAgIERvZXMgeW91ciBCU1AgaGF2ZSBhIGtleWJvYXJkPyAoeS9uKSBbZGVmYXVsdDogeV0KKyAgICAgTmV3IHFlbXUgQlNQIGNyZWF0ZWQgaW4gbWV0YS1teWFybQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZXhhbXBsZSBub3c6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGhlIFFFTVUgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzY3JpcHQgZmlyc3QgcHJvbXB0cyB5b3UgZm9yIHdoaWNoIGVtdWxhdGVkIGFyY2hpdGVjdHVyZSB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHdlIHVzZSB0aGUgQVJNIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IHRoZW4gcHJvbXB0cyB5b3UgZm9yIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgMy4xOSBrZXJuZWwgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbywgdGhlIGV4YW1wbGUgYWNjZXB0cyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW50ZXIgJ24nLCB0aGUgc2NyaXB0IHByb21wdHMgeW91IHRvIGZ1cnRoZXIgZW50ZXIgdGhlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBkbyB3YW50IHRvIHVzZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5OZXh0LCB0aGUgc2NyaXB0IGFza3Mgd2hldGhlciB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGEgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGNyZWF0ZWQgZXNwZWNpYWxseSBmb3IgeW91ciBCU1AgaW4gdGhlIGxvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5MaW51eCBZb2N0byBLZXJuZWw8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5IC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QsIHRoZW4gdGhlIHNjcmlwdCByZS11c2VzIGFuIGV4aXN0aW5nIGJyYW5jaC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SW4gdGhpcyBleGFtcGxlLCB0aGUgZGVmYXVsdCAob3IgInllcyIpIGlzIGFjY2VwdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIGZvciB0aGUgQlNQIHJhdGhlciB0aGFuIHVzaW5nIGEgY29tbW9uLCBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5ldyBicmFuY2ggaXMgdGhlIGJyYW5jaCBjb21taXR0ZWQgdG8gZm9yIGFueSBwYXRjaGVzIHlvdSBtaWdodCBsYXRlciBhZGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBhIG5ldyBicmFuY2ggaXMgdGhlIGRlZmF1bHQgaXMgdGhhdCB0eXBpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQlNQcyBkbyByZXF1aXJlIEJTUC1zcGVjaWZpYyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sIHRodXMgYXNzdW1lcyB0aGF0IG1vc3Qgb2YgdGltZSBhIG5ldyBicmFuY2ggaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVnYXJkbGVzcyBvZiB3aGljaCBjaG9pY2UgeW91IG1ha2UgaW4gdGhlIHByZXZpb3VzIHN0ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBub3cgZ2l2ZW4gdGhlIG9wcG9ydHVuaXR5IHRvIHNlbGVjdCBhIHBhcnRpY3VsYXIgbWFjaGluZSBicmFuY2ggb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0byBiYXNlIHlvdXIgbmV3IEJTUC1zcGVjaWZpYyBtYWNoaW5lIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB0byByZS11c2UgaWYgeW91IGhhZCBlbGVjdGVkIHRvIG5vdCBjcmVhdGUgYSBuZXcgYnJhbmNoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoaXMgZXhhbXBsZSBpcyBnZW5lcmF0aW5nIGFuIEFSTS1iYXNlZCBCU1AsIHRoZSBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyA8ZmlsZW5hbWU+IzE8L2ZpbGVuYW1lPiBhdCB0aGUgcHJvbXB0LCB3aGljaCBzZWxlY3RzIHRoZSBBUk0tdmVyc2F0aWxlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgcmVtYWluZGVyIG9mIHRoZSBwcm9tcHRzIGFyZSByb3V0aW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIGFyZSBhY2NlcHRlZCBmb3IgZWFjaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CeSBkZWZhdWx0LCB0aGUgc2NyaXB0IGNyZWF0ZXMgdGhlIG5ldyBCU1AgTGF5ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIEJTUCBMYXllciBpcyBjcmVhdGVkLCB5b3UgbXVzdCBhZGQgaXQgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA9ID8gIiBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0by1ic3AgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLW15YXJtIFwKKyAgICAgICAgIgorCisgICAgIEJCTEFZRVJTX05PTl9SRU1PVkFCTEUgPz0gIiBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhLXlvY3RvIFwKKyAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgbGF5ZXIgdG8gdGhpcyBmaWxlIGFsbG93cyB0aGUgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSBCU1AgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gdG9vbCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxheWVyIGFuZAorICAgICAgICAgICAgICAgICAgICBvdGhlciBNZXRhZGF0YSBpdCBuZWVkcyBvbiB3aGljaCB0byBvcGVyYXRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J21hbmFnaW5nLWtlcm5lbC1wYXRjaGVzLWFuZC1jb25maWctaXRlbXMtd2l0aC15b2N0by1rZXJuZWwnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5NYW5hZ2luZyBLZXJuZWwgUGF0Y2hlcyBhbmQgQ29uZmlnIEl0ZW1zIHdpdGggeW9jdG8ta2VybmVsPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBjcmVhdGVkIGEgPGxpbmsgbGlua2VuZD0nYnNwLWxheWVycyc+QlNQIExheWVyPC9saW5rPiB1c2luZworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT48L2xpbms+IGFuZCB5b3UgYWRkZWQgaXQgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwgeW91IGNhbiBub3cgdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IHRvIGFkZCBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGl0ZW1zIHRvIHRoZSBCU1AncyBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IGFsbG93cyB5b3UgdG8gYWRkLCByZW1vdmUsIGFuZCBsaXN0IHBhdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGtlcm5lbCBjb25maWcgc2V0dGluZ3MgdG8gYSBCU1AncyBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCB0byBkbyBpcyB1c2UgdGhlIGFwcHJvcHJpYXRlIHN1Yi1jb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBSZWNhbGwgdGhhdCB0aGUgZWFzaWVzdCB3YXkgdG8gc2VlIGV4YWN0bHkgd2hhdCBzdWItY29tbWFuZHMgYXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBidWlsdC1pbiBoZWxwIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgLS1oZWxwCisgICAgIFVzYWdlOgorICAgICAgTW9kaWZ5IGFuZCBsaXN0IFlvY3RvIEJTUCBrZXJuZWwgY29uZmlnIGl0ZW1zIGFuZCBwYXRjaGVzLgorICAgICAgdXNhZ2U6IHlvY3RvLWtlcm5lbCBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXQorICAgICAgQ3VycmVudCAneW9jdG8ta2VybmVsJyBjb21tYW5kcyBhcmU6CisgICAgICAgIGNvbmZpZyBsaXN0ICAgICAgIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgICAgICBjb25maWcgYWRkICAgICAgICBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgICAgICBjb25maWcgcm0gICAgICAgICBSZW1vdmUgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZnJvbSBhIEJTUAorICAgICAgICBwYXRjaCBsaXN0ICAgICAgICBMaXN0IHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCBhIEJTUAorICAgICAgICBwYXRjaCBhZGQgICAgICAgICBQYXRjaCB0aGUgWW9jdG8ga2VybmVsIGZvciBhIEJTUAorICAgICAgICBwYXRjaCBybSAgICAgICAgICBSZW1vdmUgcGF0Y2hlcyBmcm9tIGEgQlNQCisgICAgICAgIGZlYXR1cmUgbGlzdCAgICAgIExpc3QgdGhlIGZlYXR1cmVzIHVzZWQgYnkgYSBCU1AKKyAgICAgICAgZmVhdHVyZSBhZGQgICAgICAgSGF2ZSBhIEJTUCB1c2UgYSBmZWF0dXJlCisgICAgICAgIGZlYXR1cmUgcm0gICAgICAgIEhhdmUgYSBCU1Agc3RvcCB1c2luZyBhIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZXMgbGlzdCAgICAgTGlzdCB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIEJTUHMKKyAgICAgICAgZmVhdHVyZSBkZXNjcmliZSAgRGVzY3JpYmUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUKKyAgICAgICAgZmVhdHVyZSBjcmVhdGUgICAgQ3JlYXRlIGEgbmV3IEJTUC1sb2NhbCBmZWF0dXJlCisgICAgICAgIGZlYXR1cmUgZGVzdHJveSAgIFJlbW92ZSBhIEJTUC1sb2NhbCBmZWF0dXJlCisgICAgICBTZWUgJ3lvY3RvLWtlcm5lbCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKyAgICAgT3B0aW9uczoKKyAgICAgICAtLXZlcnNpb24gICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC1ELCAtLWRlYnVnICBvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbCBwYXRjaCBhZGQ8L2ZpbGVuYW1lPiBzdWItY29tbWFuZCBhbGxvd3MgeW91IHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgIHBhdGNoIHRvIGEgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgYWRkcyB0d28gcGF0Y2hlcyB0byB0aGUgPGZpbGVuYW1lPm15YXJtPC9maWxlbmFtZT4gQlNQOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIGFkZCBteWFybSB+L3Rlc3QucGF0Y2gKKyAgICAgQWRkZWQgcGF0Y2hlczoKKyAgICAgICB0ZXN0LnBhdGNoCisKKyAgICAgJCB5b2N0by1rZXJuZWwgcGF0Y2ggYWRkIG15YXJtIH4veW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICBBZGRlZCBwYXRjaGVzOgorICAgICAgIHlvY3RvLXRlc3Rtb2QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5BbHRob3VnaCB0aGUgcHJldmlvdXMgZXhhbXBsZSBhZGRzIHBhdGNoZXMgb25lIGF0IGEgdGltZSwgaXQgaXMgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgdG8gYWRkIG11bHRpcGxlIHBhdGNoZXMgYXQgdGhlIHNhbWUgdGltZS48L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdmVyaWZ5IHBhdGNoZXMgaGF2ZSBiZWVuIGFkZGVkIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIGxpc3Q8L2ZpbGVuYW1lPiBzdWItY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8ta2VybmVsIHBhdGNoIGxpc3QgbXlhcm0KKyAgICAgVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGF0Y2hlcyBmb3IgbXlhcm0gaXM6CisgICAgICAgMSkgdGVzdC5wYXRjaAorICAgICAgIDIpIHlvY3RvLXRlc3Rtb2QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0IHRvCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSBhIHBhdGNoIHVzaW5nIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIHJtPC9maWxlbmFtZT4gc3ViLWNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBwYXRjaCBybSBteWFybQorICAgICBTcGVjaWZ5IHRoZSBwYXRjaGVzIHRvIHJlbW92ZToKKyAgICAgICAxKSB0ZXN0LnBhdGNoCisgICAgICAgMikgeW9jdG8tdGVzdG1vZC5wYXRjaAorICAgICAxCisgICAgIFJlbW92ZWQgcGF0Y2hlczoKKyAgICAgICB0ZXN0LnBhdGNoCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWdhaW4sIHVzaW5nIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIGxpc3Q8L2ZpbGVuYW1lPiBzdWItY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggd2FzIGluIGZhY3QgcmVtb3ZlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBwYXRjaCBsaXN0IG15YXJtCisgICAgIFRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhdGNoZXMgZm9yIG15YXJtIGlzOgorICAgICAgIDEpIHlvY3RvLXRlc3Rtb2QucGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBhIGNvbXBsZXRlbHkgc2ltaWxhciB3YXksIHlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIGNvbmZpZyBhZGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWItY29tbWFuZCB0byBhZGQgb25lIG9yIG1vcmUga2VybmVsIGNvbmZpZyBpdGVtIHNldHRpbmdzIHRvIGEgQlNQLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFkZCBhIGNvdXBsZSBvZiBjb25maWcgaXRlbXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWFybTwvZmlsZW5hbWU+IEJTUDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHlvY3RvLWtlcm5lbCBjb25maWcgYWRkIG15YXJtIENPTkZJR19NSVNDX0RFVklDRVM9eQorICAgICBBZGRlZCBpdGVtOgorICAgICAgIENPTkZJR19NSVNDX0RFVklDRVM9eQorCisgICAgICQgeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgbXlhcm0gQ09ORklHX1lPQ1RPX1RFU1RNT0Q9eQorICAgICBBZGRlZCBpdGVtOgorICAgICAgIENPTkZJR19ZT0NUT19URVNUTU9EPXkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBwcmV2aW91cyBleGFtcGxlIGFkZHMgY29uZmlnIGl0ZW1zIG9uZSBhdCBhIHRpbWUsIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgbXVsdGlwbGUgY29uZmlnIGl0ZW1zIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBsaXN0IHRoZSBjb25maWcgaXRlbXMgbm93IGFzc29jaWF0ZWQgd2l0aCB0aGUgQlNQLgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBzaG93cyB5b3UgdGhlIGNvbmZpZyBpdGVtcyB5b3UgYWRkZWQgYXMgd2VsbCBhcyBvdGhlcnMgYXNzb2NpYXRlZAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBCU1A6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1rZXJuZWwgY29uZmlnIGxpc3QgbXlhcm0KKyAgICAgVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZyBpdGVtcyBmb3IgbXlhcm0gaXM6CisgICAgICAgICAgICAgMSkgQ09ORklHX01JU0NfREVWSUNFUz15CisgICAgICAgICAgICAgMikgQ09ORklHX1lPQ1RPX1RFU1RNT0Q9eQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZpbmFsbHksIHlvdSBjYW4gcmVtb3ZlIG9uZSBvciBtb3JlIGNvbmZpZyBpdGVtcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnlvY3RvLWtlcm5lbCBjb25maWcgcm08L2ZpbGVuYW1lPiBzdWItY29tbWFuZCBpbiBhIG1hbm5lcgorICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGFuYWxvZ291cyB0byA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsIHBhdGNoIHJtPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9maWd1cmVzL2JzcC10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL2JzcC1ndWlkZS9maWd1cmVzL2JzcC10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyNGRkNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vYnNwLWd1aWRlL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI3YTg5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY29tbW9uLXRhc2tzLnhtbApAQCAtMCwwICsxLDEwMDQ5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZXh0ZW5kcG9reSc+CisKKzx0aXRsZT5Db21tb24gVGFza3M8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGZ1bmRhbWVudGFsIHByb2NlZHVyZXMgc3VjaCBhcyBjcmVhdGluZyBsYXllcnMsCisgICAgICAgIGFkZGluZyBuZXcgc29mdHdhcmUgcGFja2FnZXMsIGV4dGVuZGluZyBvciBjdXN0b21pemluZyBpbWFnZXMsCisgICAgICAgIHBvcnRpbmcgd29yayB0byBuZXcgaGFyZHdhcmUgKGFkZGluZyBhIG5ldyBtYWNoaW5lKSwgYW5kIHNvIGZvcnRoLgorICAgICAgICBZb3Ugd2lsbCBmaW5kIHRoYXQgdGhlIHByb2NlZHVyZXMgZG9jdW1lbnRlZCBoZXJlIG9jY3VyIG9mdGVuIGluIHRoZQorICAgICAgICBkZXZlbG9wbWVudCBjeWNsZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0idW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzIj4KKyAgICAgICAgPHRpdGxlPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzdXBwb3J0cyBvcmdhbml6aW5nCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGludG8gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgTGF5ZXJzIGFsbG93IHlvdSB0byBpc29sYXRlIGRpZmZlcmVudCB0eXBlcyBvZiBjdXN0b21pemF0aW9ucyBmcm9tCisgICAgICAgICAgICBlYWNoIG90aGVyLgorICAgICAgICAgICAgWW91IG1pZ2h0IGZpbmQgaXQgdGVtcHRpbmcgdG8ga2VlcCBldmVyeXRoaW5nIGluIG9uZSBsYXllciB3aGVuCisgICAgICAgICAgICB3b3JraW5nIG9uIGEgc2luZ2xlIHByb2plY3QuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgbW9yZSBtb2R1bGFyIHlvdXIgTWV0YWRhdGEsIHRoZSBlYXNpZXIKKyAgICAgICAgICAgIGl0IGlzIHRvIGNvcGUgd2l0aCBmdXR1cmUgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaWxsdXN0cmF0ZSBob3cgbGF5ZXJzIGFyZSB1c2VkIHRvIGtlZXAgdGhpbmdzIG1vZHVsYXIsIGNvbnNpZGVyCisgICAgICAgICAgICBtYWNoaW5lIGN1c3RvbWl6YXRpb25zLgorICAgICAgICAgICAgVGhlc2UgdHlwZXMgb2YgY3VzdG9taXphdGlvbnMgdHlwaWNhbGx5IHJlc2lkZSBpbiBhIHNwZWNpYWwgbGF5ZXIsCisgICAgICAgICAgICByYXRoZXIgdGhhbiBhIGdlbmVyYWwgbGF5ZXIsIGNhbGxlZCBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgTGF5ZXIuCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIG1hY2hpbmUgY3VzdG9taXphdGlvbnMgc2hvdWxkIGJlIGlzb2xhdGVkIGZyb20KKyAgICAgICAgICAgIHJlY2lwZXMgYW5kIE1ldGFkYXRhIHRoYXQgc3VwcG9ydCBhIG5ldyBHVUkgZW52aXJvbm1lbnQsCisgICAgICAgICAgICBmb3IgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGdpdmVzIHlvdSBhIGNvdXBsZSBvZiBsYXllcnM6IG9uZSBmb3IgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLCBhbmQgb25lIGZvciB0aGUgR1VJIGVudmlyb25tZW50LgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJTUCBsYXllciBjYW4KKyAgICAgICAgICAgIHN0aWxsIG1ha2UgbWFjaGluZS1zcGVjaWZpYyBhZGRpdGlvbnMgdG8gcmVjaXBlcyB3aXRoaW4gdGhlIEdVSQorICAgICAgICAgICAgZW52aXJvbm1lbnQgbGF5ZXIgd2l0aG91dCBwb2xsdXRpbmcgdGhlIEdVSSBsYXllciBpdHNlbGYKKyAgICAgICAgICAgIHdpdGggdGhvc2UgbWFjaGluZS1zcGVjaWZpYyBjaGFuZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCBhIHJlY2lwZSB0aGF0IGlzIGEgQml0QmFrZSBhcHBlbmQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGZpbGUsIHdoaWNoIGlzIGRlc2NyaWJlZCBsYXRlcgorICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0neW9jdG8tcHJvamVjdC1sYXllcnMnPgorICAgICAgICAgICAgPHRpdGxlPkxheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIGJvdGggZ2VuZXJhbCBsYXllcnMgYW5kIEJTUAorICAgICAgICAgICAgICAgIGxheWVycyByaWdodCBvdXQgb2YgdGhlIGJveC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBpZGVudGlmeSBsYXllcnMgdGhhdCBzaGlwIHdpdGggYQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSBpbiB0aGUgU291cmNlIERpcmVjdG9yeSBieSB0aGVpcgorICAgICAgICAgICAgICAgIGZvbGRlciBuYW1lcy4KKyAgICAgICAgICAgICAgICBGb2xkZXJzIHRoYXQgcmVwcmVzZW50IGxheWVycyB0eXBpY2FsbHkgaGF2ZSBuYW1lcyB0aGF0IGJlZ2luIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgc3RyaW5nIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSByZXF1aXJlbWVudCB0aGF0IGEgbGF5ZXIgbmFtZSBiZWdpbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBwcmVmaXggPGZpbGVuYW1lPm1ldGEtPC9maWxlbmFtZT4sIGJ1dCBpdCBpcyBhIGNvbW1vbmx5CisgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHN0YW5kYXJkIGluIHRoZSBZb2N0byBQcm9qZWN0IGNvbW11bml0eS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4geW91IHNldCB1cCB0aGUgU291cmNlIERpcmVjdG9yeSBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgeW91IHdpbGwgc2VlIHNldmVyYWwgbGF5ZXJzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b248L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1zZWxmdGVzdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgZm9sZGVycyByZXByZXNlbnRzIGEgZGlzdGluY3QgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFub3RoZXIgZXhhbXBsZSwgaWYgeW91IHNldCB1cCBhIGxvY2FsIGNvcHkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgIGFuZCB0aGVuIGV4cGxvcmUgdGhlIGZvbGRlciBvZiB0aGF0IGdlbmVyYWwgbGF5ZXIsCisgICAgICAgICAgICAgICAgeW91IHdpbGwgZGlzY292ZXIgbWFueSBJbnRlbC1zcGVjaWZpYyBCU1AgbGF5ZXJzIGluc2lkZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBCU1AgbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXlvdXItb3duLWxheWVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBZb3VyIE93biBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHZlcnkgZWFzeSB0byBjcmVhdGUgeW91ciBvd24gbGF5ZXJzIHRvIHVzZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hpcHMgd2l0aCBzY3JpcHRzIHRoYXQgc3BlZWQgdXAgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICBnZW5lcmFsIGxheWVycyBhbmQgQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzdGVwcyB5b3UgcGVyZm9ybSBieSBoYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgIGEgbGF5ZXIgc28gdGhhdCB5b3UgY2FuIGJldHRlciB1bmRlcnN0YW5kIHRoZW0uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXllci1jcmVhdGlvbiBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKKyAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWEtZ2VuZXJhbC1sYXllci11c2luZy10aGUteW9jdG8tbGF5ZXItc2NyaXB0Jz5DcmVhdGluZyBhIEdlbmVyYWwgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWxheWVyIFNjcmlwdDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmdXJ0aGVyIGRvd24gaW4gdGhpcyBtYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBnZW5lcmFsIHN0ZXBzIHRvIGNyZWF0ZSB5b3VyIGxheWVyOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayBFeGlzdGluZyBMYXllcnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBjcmVhdGluZyBhIG5ldyBsYXllciwgeW91IHNob3VsZCBiZSBzdXJlIHNvbWVvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBub3QgYWxyZWFkeSBjcmVhdGVkIGEgbGF5ZXIgY29udGFpbmluZyB0aGUgTWV0YWRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9sYXllcnMvJz48ZmlsZW5hbWU+T3BlbkVtYmVkZGVkIE1ldGFkYXRhIEluZGV4PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGlzdCBvZiBsYXllcnMgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBub3Qgc3RyaWN0bHkgcmVxdWlyZWQsIHByZXBlbmQgdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIgd2l0aCB0aGUgc3RyaW5nIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtbXlsYXllcgorICAgICBtZXRhLUdVSV94eXoKKyAgICAgbWV0YS1teW1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSBhIExheWVyIENvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICBJbnNpZGUgeW91ciBuZXcgbGF5ZXIgZm9sZGVyLCB5b3UgbmVlZCB0byBjcmVhdGUgYQorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgZWFzaWVzdCB0byB0YWtlIGFuIGV4aXN0aW5nIGxheWVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgY29weSB0aGF0IHRvIHlvdXIgbGF5ZXIncworICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgdGhlbiBtb2RpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgYXMgbmVlZGVkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgIGRlbW9uc3RyYXRlcyB0aGUgcmVxdWlyZWQgc3ludGF4OgorICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICisgICAgIEJCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisgICAgICMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCisgICAgIEJCRklMRV9DT0xMRUNUSU9OUyArPSAieW9jdG9ic3AiCisgICAgIEJCRklMRV9QQVRURVJOX3lvY3RvYnNwID0gIl4ke0xBWUVSRElSfS8iCisgICAgIEJCRklMRV9QUklPUklUWV95b2N0b2JzcCA9ICI1IgorICAgICBMQVlFUlZFUlNJT05feW9jdG9ic3AgPSAiMyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGNvbmZpZ3VyYXRpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgZGlyZWN0b3J5IGlzIGFwcGVuZGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBub24tZGlzdHJvIGxheWVycywgd2hpY2ggaW5jbHVkZSBhbGwgQlNQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnMsIGFyZSBleHBlY3RlZCB0byBhcHBlbmQgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgZGlzdHJvIGxheWVycywgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgY2FuIGNob29zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5mb3JjZSB0aGVpciBvd24gcHJlY2VkZW5jZSBvdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiB0aGF0IHN5bnRheCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHJlY2lwZXMgZm9yIHRoZSBsYXllcnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFUyc+QkJGSUxFUzwvdWxpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPkJCRklMRV9DT0xMRUNUSU9OUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgdGhlbiBhcHBlbmRlZCB3aXRoIHRoZSBsYXllciBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFX1BBVFRFUk4nPkJCRklMRV9QQVRURVJOPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpcyBzZXQgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gbWF0Y2ggZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGludG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEFZRVJESVInPkxBWUVSRElSPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIG1ha2UgPGZpbGVuYW1lPkJCRklMRV9QQVRURVJOPC9maWxlbmFtZT4gbWF0Y2ggd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcidzIHBhdGguPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCRklMRV9QUklPUklUWSc+QkJGSUxFX1BSSU9SSVRZPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0aGVuIGFzc2lnbnMgYSBwcmlvcml0eSB0byB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5aW5nIHByaW9yaXRpZXMgaXMgdXNlZnVsIGluIHNpdHVhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIHNhbWUgcmVjaXBlIG1pZ2h0IGFwcGVhciBpbiBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnMgYW5kIGFsbG93cyB5b3UgdG8gY2hvb3NlIHRoZSBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRha2VzIHByZWNlZGVuY2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxBWUVSVkVSU0lPTic+TEFZRVJWRVJTSU9OPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBvcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk5vdGUgdGhlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTEFZRVJESVInPkxBWUVSRElSPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGV4cGFuZHMgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhyb3VnaCB0aGUgdXNlIG9mIHRoZSA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBCaXRCYWtlIGxvY2F0ZXMgY2xhc3MgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4gc3RhdGVtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgQml0QmFrZSB1c2VzIHRoZSBmaXJzdCBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdGhlIG5hbWUgZm91bmQgaW4gPGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB3YXkgdGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHVzZWQgZm9yIGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQsIHRoZXJlZm9yZSwgdGhhdCB5b3UgdXNlIHVuaXF1ZQorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcyBpbiB5b3VyIGN1c3RvbSBsYXllci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BZGQgQ29udGVudDo8L2VtcGhhc2lzPiBEZXBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB0eXBlIG9mIGxheWVyLCBhZGQgdGhlIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGF5ZXIgYWRkcyBzdXBwb3J0IGZvciBhIG1hY2hpbmUsIGFkZCB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBpbiBhIDxmaWxlbmFtZT5jb25mL21hY2hpbmUvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aGluIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsYXllciBhZGRzIGRpc3RybyBwb2xpY3ksIGFkZCB0aGUgZGlzdHJvCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluIGEgPGZpbGVuYW1lPmNvbmYvZGlzdHJvLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHdpdGhpbiB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbGF5ZXIgaW50cm9kdWNlcyBuZXcgcmVjaXBlcywgcHV0IHRoZSByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgbmVlZCBpbiA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIHdpdGhpbiB0aGUgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5JbiBvcmRlciB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGxheWVyIG11c3QgY29udGFpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWZpbGVsYXlvdXQtcmVhZG1lJz5SRUFETUUgZmlsZS48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXRvLWZvbGxvdy13aGVuLWNyZWF0aW5nLWxheWVycyc+CisgICAgICAgICAgICA8dGl0bGU+QmVzdCBQcmFjdGljZXMgdG8gRm9sbG93IFdoZW4gQ3JlYXRpbmcgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGxheWVycyB0aGF0IGFyZSBlYXNpZXIgdG8gbWFpbnRhaW4gYW5kIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgIG5vdCBpbXBhY3QgYnVpbGRzIGZvciBvdGhlciBtYWNoaW5lcywgeW91IHNob3VsZCBjb25zaWRlciB0aGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYXZvaWQtb3ZlcmxheWluZy1lbnRpcmUtcmVjaXBlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkF2b2lkICJPdmVybGF5aW5nIiBFbnRpcmUgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXZvaWQgIm92ZXJsYXlpbmciIGVudGlyZSByZWNpcGVzIGZyb20gb3RoZXIgbGF5ZXJzIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGRvIG5vdCBjb3B5IGFuIGVudGlyZSByZWNpcGUgaW50byB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGFuZCB0aGVuIG1vZGlmeSBpdC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB1c2UgYW4gYXBwZW5kIGZpbGUgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdG8gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgb25seSB0aG9zZSBwYXJ0cyBvZiB0aGUgb3JpZ2luYWwgcmVjaXBlIHlvdSBuZWVkIHRvIG1vZGlmeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhdm9pZC1kdXBsaWNhdGluZy1pbmNsdWRlLWZpbGVzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QXZvaWQgRHVwbGljYXRpbmcgSW5jbHVkZSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXZvaWQgZHVwbGljYXRpbmcgaW5jbHVkZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB1c2VzIGFuIGluY2x1ZGUgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgT3IsIGlmIHlvdSBhcmUgaW50cm9kdWNpbmcgYSBuZXcgcmVjaXBlIHRoYXQgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGluY2x1ZGVkIGZpbGUsIHVzZSB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgZGlyZWN0b3J5IHRvIHJlZmVyIHRvIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlIHJlY2lwZXMtY29yZS88L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiA8ZmlsZW5hbWU+cmVxdWlyZSA8L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UncmUgZmluZGluZyB5b3UgaGF2ZSB0byBvdmVybGF5IHRoZSBpbmNsdWRlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIGl0IGNvdWxkIGluZGljYXRlIGEgZGVmaWNpZW5jeSBpbiB0aGUgaW5jbHVkZSBmaWxlIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXllciB0byB3aGljaCBpdCBvcmlnaW5hbGx5IGJlbG9uZ3MuCisgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBzaG91bGQgdHJ5IHRvIGFkZHJlc3MgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZWZpY2llbmN5IGluc3RlYWQgb2Ygb3ZlcmxheWluZyB0aGUgaW5jbHVkZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFkZHJlc3MgdGhpcyBieSBnZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWludGFpbmVyIG9mIHRoZSBpbmNsdWRlIGZpbGUgdG8gYWRkIGEgdmFyaWFibGUgb3IKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIG1ha2UgaXQgZWFzeSB0byBvdmVycmlkZSB0aGUgcGFydHMgbmVlZGluZworICAgICAgICAgICAgICAgICAgICB0byBiZSBvdmVycmlkZGVuLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS15b3VyLWxheWVycyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlN0cnVjdHVyZSBZb3VyIExheWVyczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUHJvcGVyIHVzZSBvZiBvdmVycmlkZXMgd2l0aGluIGFwcGVuZCBmaWxlcyBhbmQgcGxhY2VtZW50CisgICAgICAgICAgICAgICAgICAgIG9mIG1hY2hpbmUtc3BlY2lmaWMgZmlsZXMgd2l0aGluIHlvdXIgbGF5ZXIgY2FuIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGEgYnVpbGQgaXMgbm90IHVzaW5nIHRoZSB3cm9uZyBNZXRhZGF0YSBhbmQgbmVnYXRpdmVseQorICAgICAgICAgICAgICAgICAgICBpbXBhY3RpbmcgYSBidWlsZCBmb3IgYSBkaWZmZXJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Nb2RpZnlpbmcgVmFyaWFibGVzIHRvIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIERpZmZlcmVudCBNYWNoaW5lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9zZSB5b3UgaGF2ZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb25lPC9maWxlbmFtZT4gdGhhdCBhZGRzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYnVpbGRpbmcgbWFjaGluZSAib25lIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyBzbywgeW91IHVzZSBhbiBhcHBlbmQgZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiYXBwZW5kPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgZGVwZW5kZW5jeSBvbiAiZm9vIiBieSBhbHRlcmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImZvbyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgaXMgY3JlYXRlZCBkdXJpbmcgYW55IGJ1aWxkIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcyB0aGUgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgbm90IHdhbnQgdGhpcyBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgInR3byIgYnV0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZTwvZmlsZW5hbWU+IGxheWVyIGluY2x1ZGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzPC9maWxlbmFtZT4gZm9yIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdvIiB3aWxsIGFsc28gaGF2ZSB0aGUgZGVwZW5kZW5jeSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gbWFrZSBzdXJlIHlvdXIgY2hhbmdlcyBhcHBseSBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBtYWNoaW5lICJvbmUiLCB1c2UgYSBtYWNoaW5lIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTX29uZSA9ICJmb28iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHN0cmF0ZWd5IHdoZW4gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTX2FwcGVuZF9vbmUgPSAiIGZvbyIKKyAgICAgREVQRU5EU19wcmVwZW5kX29uZSA9ICJmb28gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBhY3R1YWwgZXhhbXBsZSwgaGVyZSdzIGEgbGluZSBmcm9tIHRoZSByZWNpcGUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE9Qcm9maWxlIHByb2ZpbGVyLCB3aGljaCBsaXN0cyBhbiBleHRyYSBidWlsZC10aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSB3aGVuIGJ1aWxkaW5nIHNwZWNpZmljYWxseSBmb3IgNjQtYml0IFBvd2VyUEM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIGxpYnBmbTQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdm9pZGluZyAiKz0iIGFuZCAiPSsiIGFuZCB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+IG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVjb21tZW5kZWQgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBsYWNlIE1hY2hpbmUtU3BlY2lmaWMgRmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNYWNoaW5lLVNwZWNpZmljIExvY2F0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGhhdmUgYSBiYXNlIHJlY2lwZSwgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNlLWZpbGVzLmJiPC9maWxlbmFtZT4sIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCB0byBhIGZpbGUsIHlvdSBjYW4gdXNlIGFuIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY2F1c2UgdGhlIGJ1aWxkIHRvIHVzZSB5b3VyIG93biB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFuIGFwcGVuZCBmaWxlIGluIHlvdXIgbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgZXh0ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7QlBOfToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBmb3IgbWFjaGluZSAib25lIiB3aWxsIHBpY2sgdXAgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgZmlsZSBhcyBsb25nIGFzIHlvdSBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1vbmUvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGZvciBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS1vbmU8L2ZpbGVuYW1lPiBsYXllciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgeW91ciBtYWNoaW5lLXNwZWNpZmljIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3QgbG9jYXRpb24gd2hlcmUgdGhhdCBmaWxlIGlzIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgZm9yIGFsbCBtYWNoaW5lcyB3aWxsIGFsc28gdXNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZpbGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gbWFrZSBzdXJlIHRoYXQgYSBtYWNoaW5lLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpcyB1c2VkIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBieSBwdXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGUgaW4gYSBzdWJkaXJlY3Rvcnkgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmF0aGVyIHRoYW4gcGxhY2luZyB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgc2hvd24gYWJvdmUsIHB1dCBpdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9uZS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL29uZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3Qgb25seSBkb2VzIHRoaXMgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gYnVpbGRpbmcgZm9yIG1hY2hpbmUgIm9uZSIsIGJ1dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBwcm9jZXNzIGxvY2F0ZXMgdGhlIGZpbGUgbW9yZSBxdWlja2x5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JbiBzdW1tYXJ5LCB5b3UgbmVlZCB0byBwbGFjZSBhbGwgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIGZyb20gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgbWFjaGluZS1zcGVjaWZpYyBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIGluIG9yZGVyIHRvIHJlc3RyaWN0IHRob3NlIGZpbGVzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J290aGVyLXJlY29tbWVuZGF0aW9ucyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk90aGVyIFJlY29tbWVuZGF0aW9uczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2UgYWxzbyByZWNvbW1lbmQgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdG9yZSBjdXN0b20gbGF5ZXJzIGluIGEgR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtPHJlcGxhY2VhYmxlPmxheWVyX25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+IGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbG9uZSB0aGUgcmVwb3NpdG9yeSBhbG9uZ3NpZGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlc2UgcmVjb21tZW5kYXRpb25zIGtlZXBzIHlvdXIgU291cmNlIERpcmVjdG9yeSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGl0cyBjb25maWd1cmF0aW9uIGVudGlyZWx5IGluc2lkZSB0aGUgWW9jdG8gUHJvamVjdCdzIGNvcmUKKyAgICAgICAgICAgICAgICAgICAgIGJhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLXlvdXItbGF5ZXInPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIHVzZSB5b3VyIG5ldyBsYXllciwKKyAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBlbmFibGUgaXQuCisgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHlvdXIgbGF5ZXIsIHNpbXBseSBhZGQgeW91ciBsYXllcidzIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CQkxBWUVSUyc+QkJMQVlFUlM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBlbmFibGUgYSBsYXllciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExDT05GX1ZFUlNJT04gPSAiNiIKKworICAgICBCQlBBVEggPSAiJHtUT1BESVJ9IgorICAgICBCQkZJTEVTID89ICIiCisKKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEteW9jdG8gXAorICAgICAgICRIT01FL3Bva3kvbWV0YS15b2N0by1ic3AgXAorICAgICAgICRIT01FL3Bva3kvbWV0YS1teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBlYWNoIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgYXMgc3BlY2lmaWVkIGluIHRoZSA8ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIGVhY2gKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSwgQml0QmFrZSBhZGRzIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZXMsIGNsYXNzZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGNvbnRhaW5lZCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgcGFydGljdWxhciBsYXllciB0byB0aGUgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVjaXBlcyB1c2VkIHRvIGFwcGVuZCBNZXRhZGF0YSB0byBvdGhlciByZWNpcGVzIGFyZSBjYWxsZWQKKyAgICAgICAgICAgICAgICBCaXRCYWtlIGFwcGVuZCBmaWxlcy4KKyAgICAgICAgICAgICAgICBCaXRCYWtlIGFwcGVuZCBmaWxlcyB1c2UgdGhlIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdHlwZSBzdWZmaXgsIHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nIHJlY2lwZXMgdG8gd2hpY2ggTWV0YWRhdGEKKyAgICAgICAgICAgICAgICBpcyBiZWluZyBhcHBlbmRlZCB1c2UgdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIHR5cGUKKyAgICAgICAgICAgICAgICBzdWZmaXguCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYWxsb3dzIHlvdXIgbGF5ZXIgdG8gbWFrZQorICAgICAgICAgICAgICAgIGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIHRoZSBjb250ZW50IG9mIGFub3RoZXIgbGF5ZXIncyByZWNpcGUKKyAgICAgICAgICAgICAgICB3aXRob3V0IGhhdmluZyB0byBjb3B5IHRoZSBvdGhlciByZWNpcGUgaW50byB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgIFlvdXIgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgcmVzaWRlcyBpbiB5b3VyIGxheWVyLAorICAgICAgICAgICAgICAgIHdoaWxlIHRoZSBtYWluIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZSB0bworICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBhcmUgYXBwZW5kaW5nIE1ldGFkYXRhIHJlc2lkZXMgaW4gYSBkaWZmZXJlbnQgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBtdXN0IGhhdmUgdGhlIHNhbWUgcm9vdCBuYW1lcyBhcyB0aGVpciBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGFwcGVuZCBmaWxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvbWVhcHBfJkRJU1RSTzsuYmJhcHBlbmQ8L2ZpbGVuYW1lPiBtdXN0IGFwcGx5IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNvbWVhcHBfJkRJU1RSTzsuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoZSBvcmlnaW5hbCByZWNpcGUgYW5kIGFwcGVuZCBmaWxlIG5hbWVzIGFyZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgbnVtYmVyLXNwZWNpZmljLgorICAgICAgICAgICAgICAgIElmIHRoZSBjb3JyZXNwb25kaW5nIHJlY2lwZSBpcyByZW5hbWVkIHRvIHVwZGF0ZSB0byBhIG5ld2VyCisgICAgICAgICAgICAgICAgdmVyc2lvbiwgdGhlIGNvcnJlc3BvbmRpbmcgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgbXVzdAorICAgICAgICAgICAgICAgIGJlIHJlbmFtZWQgKGFuZCBwb3NzaWJseSB1cGRhdGVkKSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywgQml0QmFrZSBkaXNwbGF5cyBhbiBlcnJvciBvbiBzdGFydGluZworICAgICAgICAgICAgICAgIGlmIGl0IGRldGVjdHMgYSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSB0aGF0IGRvZXMKKyAgICAgICAgICAgICAgICBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcmVjaXBlIHdpdGggYSBtYXRjaGluZyBuYW1lLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZJz48ZmlsZW5hbWU+QkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGFuZGxlIHRoaXMgZXJyb3IuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gYXBwZW5kIGluZm9ybWF0aW9uIHRvIGFuIGV4aXN0aW5nIHJlY2lwZSBub3Qgb25seQorICAgICAgICAgICAgICAgIGF2b2lkcyBkdXBsaWNhdGlvbiwgYnV0IGFsc28gYXV0b21hdGljYWxseSBhcHBsaWVzIHJlY2lwZQorICAgICAgICAgICAgICAgIGNoYW5nZXMgaW4gYSBkaWZmZXJlbnQgbGF5ZXIgdG8geW91ciBsYXllci4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2VyZSBjb3B5aW5nIHJlY2lwZXMsIHlvdSB3b3VsZCBoYXZlIHRvIG1hbnVhbGx5IG1lcmdlCisgICAgICAgICAgICAgICAgY2hhbmdlcyBhcyB0aGV5IG9jY3VyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGUgbWFpbiBmb3JtZmFjdG9yIHJlY2lwZSBhbmQgYQorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgZm9ybWZhY3RvciBhcHBlbmQgZmlsZSBib3RoIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgbWFpbiBmb3JtZmFjdG9yIHJlY2lwZSwgd2hpY2ggaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmI8L2ZpbGVuYW1lPiBhbmQgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAibWV0YSIgbGF5ZXIgYXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTVU1NQVJZID0gIkRldmljZSBmb3JtZmFjdG9yIGluZm9ybWF0aW9uIgorICAgICBTRUNUSU9OID0gImJhc2UiCisgICAgIExJQ0VOU0UgPSAiTUlUIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKyAgICAgUFIgPSAicjQ1IgorCisgICAgIFNSQ19VUkkgPSAiZmlsZTovL2NvbmZpZyBmaWxlOi8vbWFjaGNvbmZpZyIKKyAgICAgUyA9ICIke1dPUktESVJ9IgorCisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisgICAgIElOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyAgICAgZG9faW5zdGFsbCgpIHsKKwkgICAgICMgSW5zdGFsbCBmaWxlIG9ubHkgaWYgaXQgaGFzIGNvbnRlbnRzCisgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworICAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2NvbmZpZyAke0R9JHtzeXNjb25mZGlyfS9mb3JtZmFjdG9yLworCSAgICAgaWYgWyAtcyAiJHtTfS9tYWNoY29uZmlnIiBdOyB0aGVuCisJICAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L21hY2hjb25maWcgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKwkgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gdGhlIG1haW4gcmVjaXBlLCBub3RlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggdGVsbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlcmUgdG8KKyAgICAgICAgICAgICAgICBmaW5kIGZpbGVzIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyB0aGUgYXBwZW5kIGZpbGUsIHdoaWNoIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcm1mYWN0b3JfMC4wLmJiYXBwZW5kPC9maWxlbmFtZT4gYW5kIGlzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgRW1lbmxvdyBCU1AgTGF5ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC9tZXRhLWVtZW5sb3c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZSBpcyBpbiA8ZmlsZW5hbWU+cmVjaXBlcy1ic3AvZm9ybWZhY3RvcjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gbG9jYXRlIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoaXMgYXBwZW5kIGZpbGUgZXh0ZW5kcyB0aGUgbG9jYXRpb25zIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgaXMgdGhlIG1vc3QgcmVsaWFibGUgYW5kIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgYWRkaW5nCisgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gdGhlIHNlYXJjaCBwYXRoIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIHRvIGZpbmQgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgaW4gdGhpcyBleGFtcGxlIGV4dGVuZHMgdGhlIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1USElTRElSJz48ZmlsZW5hbWU+VEhJU0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS8kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB3aGljaCByZXNvbHZlcyB0byBhIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yPC9maWxlbmFtZT4gaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgaW4gd2hpY2ggdGhlIGFwcGVuZCBmaWxlIHJlc2lkZXMgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbC9tZXRhLWVtZW5sb3cvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBpbXBsaWVzIHRoYXQgeW91IG11c3QgaGF2ZSB0aGUgc3VwcG9ydGluZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgc2V0IHVwIHRoYXQgd2lsbCBjb250YWluIGFueSBmaWxlcyBvciBwYXRjaGVzIHlvdQorICAgICAgICAgICAgICAgIHdpbGwgYmUgaW5jbHVkaW5nIGZyb20gdGhlIGxheWVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGUgaW1tZWRpYXRlIGV4cGFuc2lvbiBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjo9PC9maWxlbmFtZT4gaXMgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlIHJlZmVyZW5jZSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHRyYWlsaW5nIGNvbG9uIGNoYXJhY3RlciBpcyBpbXBvcnRhbnQgYXMgaXQgZW5zdXJlcyB0aGF0CisgICAgICAgICAgICAgICAgaXRlbXMgaW4gdGhlIGxpc3QgcmVtYWluIGNvbG9uLXNlcGFyYXRlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgZGVmaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5ldmVyIHNldCB0aGlzIHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgIl9wcmVwZW5kIiBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+IGVuc3VyZXMgeW91ciBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHNlYXJjaGVkIHByaW9yIHRvIG90aGVyIHBhdGhzIGluIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgbm90IGFsbCBhcHBlbmQgZmlsZXMgYWRkIGV4dHJhIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFueSBhcHBlbmQgZmlsZXMgc2ltcGx5IGV4aXN0IHRvIGFkZCBidWlsZCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgeW91ciBhcHBlbmQgZmlsZSB3b3VsZCBub3QgZXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4gc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3ByaW9yaXRpemluZy15b3VyLWxheWVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcmlvcml0aXppbmcgWW91ciBMYXllcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEVhY2ggbGF5ZXIgaXMgYXNzaWduZWQgYSBwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBQcmlvcml0eSB2YWx1ZXMgY29udHJvbCB3aGljaCBsYXllciB0YWtlcyBwcmVjZWRlbmNlIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgYXJlIHJlY2lwZSBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gbXVsdGlwbGUgbGF5ZXJzLgorICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcywgdGhlIHJlY2lwZSBmaWxlIGZyb20gdGhlIGxheWVyIHdpdGggYSBoaWdoZXIKKyAgICAgICAgICAgICAgICBwcmlvcml0eSBudW1iZXIgdGFrZXMgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICBQcmlvcml0eSB2YWx1ZXMgYWxzbyBhZmZlY3QgdGhlIG9yZGVyIGluIHdoaWNoIG11bHRpcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIGZvciB0aGUgc2FtZSByZWNpcGUgYXJlCisgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciBzcGVjaWZ5IHRoZSBwcmlvcml0eSBtYW51YWxseSwgb3IgYWxsb3cgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGNhbGN1bGF0ZSBpdCBiYXNlZCBvbiB0aGUgbGF5ZXIncyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgdGhlIGxheWVyJ3MgcHJpb3JpdHkgbWFudWFsbHksIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFX1BSSU9SSVRZJz48ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJGSUxFX1BSSU9SSVRZX215bGF5ZXIgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPkl0IGlzIHBvc3NpYmxlIGZvciBhIHJlY2lwZSB3aXRoIGEgbG93ZXIgdmVyc2lvbiBudW1iZXIKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBpbiBhIGxheWVyIHRoYXQgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHRvIHRha2UgcHJlY2VkZW5jZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+QWxzbywgdGhlIGxheWVyIHByaW9yaXR5IGRvZXMgbm90IGN1cnJlbnRseSBhZmZlY3QgdGhlCisgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSBvcmRlciBvZiA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIG1pZ2h0IGFkZHJlc3MgdGhpcy48L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWFuYWdpbmctbGF5ZXJzJz4KKyAgICAgICAgICAgIDx0aXRsZT5NYW5hZ2luZyBMYXllcnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgQml0QmFrZSBsYXllciBtYW5hZ2VtZW50IHRvb2wgdG8gcHJvdmlkZSBhIHZpZXcKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBzdHJ1Y3R1cmUgb2YgcmVjaXBlcyBhY3Jvc3MgYSBtdWx0aS1sYXllciBwcm9qZWN0LgorICAgICAgICAgICAgICAgIEJlaW5nIGFibGUgdG8gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgcmVwb3J0cyBvbiBjb25maWd1cmVkIGxheWVycworICAgICAgICAgICAgICAgIHdpdGggdGhlaXIgcGF0aHMgYW5kIHByaW9yaXRpZXMgYW5kIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzIGFuZCB0aGVpciBhcHBsaWNhYmxlCisgICAgICAgICAgICAgICAgcmVjaXBlcyBjYW4gaGVscCB0byByZXZlYWwgcG90ZW50aWFsIHByb2JsZW1zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBmb3JtIHdoZW4gcnVubmluZyB0aGUgbGF5ZXIgbWFuYWdlbWVudCB0b29sLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlLWxheWVycyA8cmVwbGFjZWFibGU+Y29tbWFuZDwvcmVwbGFjZWFibGU+IFs8cmVwbGFjZWFibGU+YXJndW1lbnRzPC9yZXBsYWNlYWJsZT5dCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIGF2YWlsYWJsZSBjb21tYW5kczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5oZWxwOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlzIGdlbmVyYWwgaGVscCBvciBoZWxwIG9uIGEgc3BlY2lmaWVkIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1sYXllcnM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgdGhlIGN1cnJlbnQgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1yZWNpcGVzOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIGF2YWlsYWJsZSByZWNpcGVzIGFuZCB0aGUgbGF5ZXJzIHRoYXQgcHJvdmlkZSB0aGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPnNob3ctb3ZlcmxheWVkOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIG92ZXJsYXllZCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgQSByZWNpcGUgaXMgb3ZlcmxheWVkIHdoZW4gYSByZWNpcGUgd2l0aCB0aGUgc2FtZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdHMgaW4gYW5vdGhlciBsYXllciB0aGF0IGhhcyBhIGhpZ2hlciBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48ZW1waGFzaXM+c2hvdy1hcHBlbmRzOjwvZW1waGFzaXM+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgZmlsZXMgdG8gd2hpY2ggdGhleSBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5zaG93LWNyb3NzLWRlcGVuZHM6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdHMgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4gcmVjaXBlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcyBsYXllciBib3VuZGFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPmFkZC1sYXllcjo8L2VtcGhhc2lzPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBZGRzIGEgbGF5ZXIgdG8gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxlbXBoYXNpcz5yZW1vdmUtbGF5ZXI6PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyBhIGxheWVyIGZyb20gPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGVtcGhhc2lzPmZsYXR0ZW46PC9lbXBoYXNpcz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgRmxhdHRlbnMgdGhlIGxheWVyIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgRmxhdHRlbmluZyB5b3VyIGxheWVyIGNvbmZpZ3VyYXRpb24gYnVpbGRzIGEgImZsYXR0ZW5lZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBhbGwgbGF5ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbnkgb3ZlcmxheWVkIHJlY2lwZXMgcmVtb3ZlZCBhbmQgYW55CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZXMgYXBwZW5kZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgaGF2ZSB0byBwZXJmb3JtIHNvbWUgbWFudWFsIGNsZWFudXAgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQgbGF5ZXIgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk5vbi1yZWNpcGUgZmlsZXMgKHN1Y2ggYXMgcGF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG92ZXJ3cml0dGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmxhdHRlbiBjb21tYW5kIHNob3dzIGEgd2FybmluZyBmb3IgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Bbnl0aGluZyBiZXlvbmQgdGhlIG5vcm1hbCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBoYXMgYmVlbiBhZGRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHRoZSBsb3dlc3QgcHJpb3JpdHkgbGF5ZXIncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGlzIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PdmVycmlkZGVuIGFuZCBhcHBlbmRlZCBpdGVtcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcyBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuZWQgdXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBlbmQgdXAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZCByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSBhcHBlbmRlZCBvciBjaGFuZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHZhbHVlcywgeW91IG5lZWQgdG8gdGlkeSB0aGVzZSB1cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Vyc2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlLCB0aGUgPGZpbGVuYW1lPmJpdGJha2UtbGF5ZXJzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBhZGRzIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jIyMjIGJiYXBwZW5kZWQgLi4uPC9maWxlbmFtZT4gc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3Uga25vdyB3aGVyZSB0aGUgZm9sbG93aW5nIGxpbmVzIG9yaWdpbmF0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAuLi4KKyAgICAgREVTQ1JJUFRJT04gPSAiQSB1c2VmdWwgdXRpbGl0eSIKKyAgICAgLi4uCisgICAgIEVYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zb21ldGhpbmciCisgICAgIC4uLgorCisgICAgICMjIyMgYmJhcHBlbmRlZCBmcm9tIG1ldGEtYW5vdGhlcmxheWVyICMjIyMKKworICAgICBERVNDUklQVElPTiA9ICJDdXN0b21pemVkIHV0aWxpdHkiCisgICAgIEVYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtc29tZXRoaW5nZWxzZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZGVhbGx5LCB5b3Ugd291bGQgdGlkeSB1cCB0aGVzZSB1dGlsaXRpZXMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAuLi4KKyAgICAgREVTQ1JJUFRJT04gPSAiQ3VzdG9taXplZCB1dGlsaXR5IgorICAgICAuLi4KKyAgICAgRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNvbWV0aGluZyAtLWVuYWJsZS1zb21ldGhpbmdlbHNlIgorICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1sYXllcjwvZmlsZW5hbWU+IHNjcmlwdCBzaW1wbGlmaWVzCisgICAgICAgICAgICAgICAgY3JlYXRpbmcgYSBuZXcgZ2VuZXJhbCBsYXllci4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTcGVjaWZpYyAoQlNQKQorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbW9kZSBvZiB0aGUgc2NyaXB0J3Mgb3BlcmF0aW9uIGlzIHRvIHByb21wdCB5b3UgZm9yCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGdlbmVyYXRlIHRoZSBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGxheWVyIHByaW9yaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBzYW1wbGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGV0aGVyIG9yIG5vdCB0byBjcmVhdGUgYSBzYW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPnlvY3RvLWxheWVyIGNyZWF0ZTwvZmlsZW5hbWU+IHN1Yi1jb21tYW5kCisgICAgICAgICAgICAgICAgdG8gY3JlYXRlIGEgbmV3IGdlbmVyYWwgbGF5ZXIuCisgICAgICAgICAgICAgICAgSW4gaXRzIHNpbXBsZXN0IGZvcm0sIHlvdSBjYW4gY3JlYXRlIGEgbGF5ZXIgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgeW9jdG8tbGF5ZXIgY3JlYXRlIG15bGF5ZXIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgY3JlYXRlcyBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbXlsYXllcjwvZmlsZW5hbWU+IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgdGhlIDxmaWxlbmFtZT55b2N0by1sYXllciBjcmVhdGU8L2ZpbGVuYW1lPiBjb21tYW5kIHJ1bnMsCisgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwcm9tcHRzIGFwcGVhciBpbiBicmFja2V0cy4KKyAgICAgICAgICAgICAgICBQcmVzc2luZyBlbnRlciB3aXRob3V0IHN1cHBseWluZyBhbnl0aGluZyBmb3IgdGhlIHByb21wdHMKKyAgICAgICAgICAgICAgICBvciBwcmVzc2luZyBlbnRlciBhbmQgcHJvdmlkaW5nIGFuIGludmFsaWQgcmVzcG9uc2UgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgIHNjcmlwdCB0byBhY2NlcHQgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgT25jZSB0aGUgc2NyaXB0IGNvbXBsZXRlcywgdGhlIG5ldyBsYXllcgorICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIHNjcmlwdCBuYW1lcyB0aGUgbGF5ZXIgYnkgcHJlcGVuZGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLTwvZmlsZW5hbWU+IHRvIHRoZSBuYW1lIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNaW5pbWFsbHksIHRoZSBzY3JpcHQgY3JlYXRlcyB0aGUgZm9sbG93aW5nIHdpdGhpbiB0aGUgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbGF5ZXIncyBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcm9vdCBuYW1lIGZvciB0aGUgZmlsZSBpcyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHByb3ZpZGVkIGZvciB0aGUgbGF5ZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi5jb25mPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q09QWUlORy5NSVQ8L2ZpbGVuYW1lPiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29weXJpZ2h0IGFuZCB1c2Ugbm90aWNlIGZvciB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGZpbGUgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2YgeW91ciBuZXcgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGNob29zZSB0byBnZW5lcmF0ZSBhIHNhbXBsZSByZWNpcGUgZmlsZSwgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgIHByb21wdHMgeW91IGZvciB0aGUgbmFtZSBmb3IgdGhlIHJlY2lwZSBhbmQgdGhlbiBjcmVhdGVzIGl0CisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgY3JlYXRlcyBhIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGFuZCBhCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyBhIHNhbXBsZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsb3dvcmxkLmM8L2ZpbGVuYW1lPiBzb3VyY2UgZmlsZSwgYWxvbmcgd2l0aAorICAgICAgICAgICAgICAgIGEgc2FtcGxlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgcmVjaXBlIG5hbWUsIHRoZSBzY3JpcHQgdXNlcworICAgICAgICAgICAgICAgICJleGFtcGxlIi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGNob29zZSB0byBnZW5lcmF0ZSBhIHNhbXBsZSBhcHBlbmQgZmlsZSwgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgIHByb21wdHMgeW91IGZvciB0aGUgbmFtZSBmb3IgdGhlIGZpbGUgYW5kIHRoZW4gY3JlYXRlcyBpdAorICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT48cmVwbGFjZWFibGU+bGF5ZXI8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgc2NyaXB0IGNyZWF0ZXMgYSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhbmQgYQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggY29udGFpbnMgYSBzYW1wbGUgcGF0Y2ggZmlsZS4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHByb3ZpZGUgYSByZWNpcGUgbmFtZSwgdGhlIHNjcmlwdCB1c2VzCisgICAgICAgICAgICAgICAgImV4YW1wbGUiLgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgYWxzbyBwcm9tcHRzIHlvdSBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSB2ZXJzaW9uIHNob3VsZCBtYXRjaCB0aGUgcmVjaXBlIHRvIHdoaWNoIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIGlzIGFzc29jaWF0ZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBlYXNpZXN0IHdheSB0byBzZWUgaG93IHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHNjcmlwdCB3b3JrcyBpcyB0byBleHBlcmltZW50IHdpdGggdGhlIHNjcmlwdC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gcmVhZCB0aGUgdXNhZ2UgaW5mb3JtYXRpb24gYnkgZW50ZXJpbmcgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB5b2N0by1sYXllciBoZWxwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjcmVhdGUgeW91ciBnZW5lcmFsIGxheWVyLCB5b3UgbXVzdCBhZGQgaXQgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUgYSBsYXllciBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBpcyBhZGRlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID0gPyIgXAorICAgICAgICAvdXNyL2xvY2FsL3NyYy95b2N0by9tZXRhIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS15b2N0byBcCisgICAgICAgIC91c3IvbG9jYWwvc3JjL3lvY3RvL21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAgL3Vzci9sb2NhbC9zcmMveW9jdG8vbWV0YS1teWxheWVyIFwKKyAgICAgICAgIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGxheWVyIHRvIHRoaXMgZmlsZSBlbmFibGVzIHRoZSBidWlsZCBzeXN0ZW0gdG8KKyAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGxheWVyIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UnPgorICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gY3VzdG9taXplIGltYWdlcyB0byBzYXRpc2Z5IHBhcnRpY3VsYXIgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzZXZlcmFsIG1ldGhvZHMgYW5kIHByb3ZpZGVzIGd1aWRlbGluZXMgZm9yIGVhY2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1sb2NhbGNvbmYnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvYmFibHkgdGhlIGVhc2llc3Qgd2F5IHRvIGN1c3RvbWl6ZSBhbiBpbWFnZSBpcyB0byBhZGQgYQorICAgICAgICAgICAgICAgIHBhY2thZ2UgYnkgd2F5IG9mIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgaXQgaXMgbGltaXRlZCB0byBsb2NhbCB1c2UsIHRoaXMgbWV0aG9kIGdlbmVyYWxseSBvbmx5CisgICAgICAgICAgICAgICAgYWxsb3dzIHlvdSB0byBhZGQgcGFja2FnZXMgYW5kIGlzIG5vdCBhcyBmbGV4aWJsZSBhcyBjcmVhdGluZworICAgICAgICAgICAgICAgIHlvdXIgb3duIGN1c3RvbWl6ZWQgaW1hZ2UuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgYWRkIHBhY2thZ2VzIHVzaW5nIGxvY2FsIHZhcmlhYmxlcyB0aGlzIHdheSwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byByZWFsaXplIHRoYXQgdGhlc2UgdmFyaWFibGUgY2hhbmdlcyBhcmUgaW4gZWZmZWN0IGZvciBldmVyeQorICAgICAgICAgICAgICAgIGJ1aWxkIGFuZCBjb25zZXF1ZW50bHkgYWZmZWN0IGFsbCBpbWFnZXMsIHdoaWNoIG1pZ2h0IG5vdAorICAgICAgICAgICAgICAgIGJlIHdoYXQgeW91IHJlcXVpcmUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UgdG8geW91ciBpbWFnZSB1c2luZyB0aGUgbG9jYWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPklNQUdFX0lOU1RBTEw8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgd2l0aCB0aGUgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBzdHJhY2UiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFVzZSBvZiB0aGUgc3ludGF4IGlzIGltcG9ydGFudCAtIHNwZWNpZmljYWxseSwgdGhlIHNwYWNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICB0aGUgcXVvdGUgYW5kIHRoZSBwYWNrYWdlIG5hbWUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IGluIHRoaXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHNwYWNlIGlzIHJlcXVpcmVkIHNpbmNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3BlcmF0b3IgZG9lcyBub3QgYWRkIHRoZSBzcGFjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHlvdSBtdXN0IHVzZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGluc3RlYWQKKyAgICAgICAgICAgICAgICBvZiB0aGUgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0b3IgaWYgeW91IHdhbnQgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICBvcmRlcmluZyBpc3N1ZXMuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBiZWNhdXNlIGRvaW5nIHNvIHVuY29uZGl0aW9uYWxseSBhcHBlbmRzCisgICAgICAgICAgICAgICAgdG8gdGhlIHZhcmlhYmxlIGFuZCBhdm9pZHMgb3JkZXJpbmcgcHJvYmxlbXMgZHVlIHRvIHRoZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJlaW5nIHNldCBpbiBpbWFnZSByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIHdpdGggb3BlcmF0b3JzIGxpa2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IGVuc3VyZXMgdGhlIG9wZXJhdGlvbiB0YWtlcworICAgICAgICAgICAgICAgIGFmZmVjdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgc2hvd24gaW4gaXRzIHNpbXBsZXN0IHVzZSwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTF9hcHBlbmQ8L2ZpbGVuYW1lPiBhZmZlY3RzIGFsbCBpbWFnZXMuCisgICAgICAgICAgICAgICAgSXQgaXMgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBzeW50YXggc28gdGhhdCB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICBhcHBsaWVzIHRvIGEgc3BlY2lmaWMgaW1hZ2Ugb25seS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMX2FwcGVuZF9wbi1jb3JlLWltYWdlLW1pbmltYWwgPSAiIHN0cmFjZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGFkZHMgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSBvbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFkZCBwYWNrYWdlcyB1c2luZyBhIHNpbWlsYXIgYXBwcm9hY2ggdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCc+Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyB2YXJpYWJsZSwgb25seQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLSo8L2ZpbGVuYW1lPiBpbWFnZXMgYXJlIGFmZmVjdGVkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2VmZWF0dXJlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgbWV0aG9kIGZvciBjdXN0b21pemluZyB5b3VyIGltYWdlIGlzIHRvIGVuYWJsZSBvcgorICAgICAgICAgICAgICAgIGRpc2FibGUgaGlnaC1sZXZlbCBpbWFnZSBmZWF0dXJlcyBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBmdW5jdGlvbnMgZm9yIGJvdGggdmFyaWFibGVzIGFyZSBuZWFybHkgZXF1aXZhbGVudCwKKyAgICAgICAgICAgICAgICBiZXN0IHByYWN0aWNlcyBkaWN0YXRlIHVzaW5nIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4gYSByZWNpcGUgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gZnJvbSB3aXRoaW4KKyAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmZWF0dXJlcyB3b3JrLCB0aGUgYmVzdCByZWZlcmVuY2UgaXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgbGlzdHMgb3V0IHRoZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvZiB3aGljaCBtb3N0IG1hcCB0byBwYWNrYWdlIGdyb3VwcyB3aGlsZSBzb21lLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlYnVnLXR3ZWFrczwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWFkLW9ubHktcm9vdGZzPC9maWxlbmFtZT4sIHJlc29sdmUgYXMgZ2VuZXJhbAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHN1bW1hcnksIHRoZSBmaWxlIGxvb2tzIGF0IHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbmQgdGhlbiBtYXBzCisgICAgICAgICAgICAgICAgb3IgY29uZmlndXJlcyB0aGUgZmVhdHVyZSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgICAgICBCYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBhZGRzIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlcyBvciBjb25maWd1cmF0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRWZmZWN0aXZlbHksIHlvdSBhcmUgZW5hYmxpbmcgZXh0cmEgZmVhdHVyZXMgYnkgZXh0ZW5kaW5nIHRoZQorICAgICAgICAgICAgICAgIGNsYXNzIG9yIGNyZWF0aW5nIGEgY3VzdG9tIGNsYXNzIGZvciB1c2Ugd2l0aCBzcGVjaWFsaXplZCBpbWFnZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIFVzaW5nIGEgc2VwYXJhdGUgYXJlYSBmcm9tIHdoaWNoIHRvIGVuYWJsZSBmZWF0dXJlcyB3aXRoCisgICAgICAgICAgICAgICAgdGhpcyB2YXJpYWJsZSBoZWxwcyB5b3UgYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGZlYXR1cmVzIGluIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIHJlY2lwZSB0aGF0IGFyZSBlbmFibGVkIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gaXMgYWRkZWQKKyAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB3aXRoaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIHVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gbW9kaWZ5IHlvdXIKKyAgICAgICAgICAgICAgICBpbWFnZSwgY29uc2lkZXIgYW4gZXhhbXBsZSB0aGF0IHNlbGVjdHMgdGhlIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc2hpcHMgd2l0aCB0d28gU1NIIHNlcnZlcnMgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICB3aXRoIHlvdXIgaW1hZ2VzOiBEcm9wYmVhciBhbmQgT3BlblNTSC4KKyAgICAgICAgICAgICAgICBEcm9wYmVhciBpcyBhIG1pbmltYWwgU1NIIHNlcnZlciBhcHByb3ByaWF0ZSBmb3IKKyAgICAgICAgICAgICAgICByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMsIHdoaWxlIE9wZW5TU0ggaXMgYQorICAgICAgICAgICAgICAgIHdlbGwta25vd24gc3RhbmRhcmQgU1NIIHNlcnZlciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlCisgICAgICAgICAgICAgICAgaXMgY29uZmlndXJlZCB0byB1c2UgRHJvcGJlYXIuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYjwvZmlsZW5hbWU+IGltYWdlcyBib3RoCisgICAgICAgICAgICAgICAgaW5jbHVkZSBPcGVuU1NILgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgZG9lcyBub3QKKyAgICAgICAgICAgICAgICBjb250YWluIGFuIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3VzdG9taXplIHlvdXIgaW1hZ2UgYW5kIGNoYW5nZSB0aGVzZSBkZWZhdWx0cy4KKyAgICAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIG9yIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHNvIHRoYXQgaXQgY29uZmlndXJlcyB0aGUKKyAgICAgICAgICAgICAgICBpbWFnZSB5b3UgYXJlIHdvcmtpbmcgd2l0aCB0byBpbmNsdWRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNzaC1zZXJ2ZXItZHJvcGJlYXI8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2gtc2VydmVyLW9wZW5zc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICBsaXN0IG9mIGltYWdlIGZlYXR1cmVzIHRoYXQgc2hpcCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tYmInPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gLmJiIEZpbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGN1c3RvbWl6ZSBhbiBpbWFnZSBieSBjcmVhdGluZyBhIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICAgICB0aGF0IGRlZmluZXMgYWRkaXRpb25hbCBzb2Z0d2FyZSBhcyBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIGZvcm0gZm9yIHRoZSB0d28gbGluZXMgeW91IG5lZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIHBhY2thZ2UxIHBhY2thZ2UyIgorCisgICAgIGluaGVyaXQgY29yZS1pbWFnZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVmaW5pbmcgdGhlIHNvZnR3YXJlIHVzaW5nIGEgY3VzdG9tIHJlY2lwZSBnaXZlcyB5b3UgdG90YWwKKyAgICAgICAgICAgICAgICBjb250cm9sIG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBjb3JyZWN0IG5hbWVzIG9mIHBhY2thZ2VzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+SU1BR0VfSU5TVEFMTDwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIE9wZW5FbWJlZGRlZCBub3RhdGlvbiBhbmQgbm90IHRoZSBEZWJpYW4gbm90YXRpb24gZm9yIHRoZSBuYW1lcworICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5nbGliYy1kZXY8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5saWJjNi1kZXY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBvdGhlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgY3VzdG9tIGltYWdlIGlzIHRvIGJhc2UgaXQgb24gYW4gZXhpc3RpbmcgaW1hZ2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbWFnZSBiYXNlZCBvbiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBidXQgYWRkIHRoZSBhZGRpdGlvbmFsIHBhY2thZ2UgPGZpbGVuYW1lPnN0cmFjZTwvZmlsZW5hbWU+IHRvIHRoZSBpbWFnZSwKKyAgICAgICAgICAgICAgICBjb3B5IHRoZSA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYjwvZmlsZW5hbWU+IHRvIGEKKyAgICAgICAgICAgICAgICBuZXcgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGFuZCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBlbmQgb2YgdGhlIGNvcHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9JTlNUQUxMICs9ICJzdHJhY2UiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tdGFza3MnPgorICAgICAgICAgICAgPHRpdGxlPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gUGFja2FnZSBHcm91cHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgY29tcGxleCBjdXN0b20gaW1hZ2VzLCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgY3VzdG9taXppbmcKKyAgICAgICAgICAgICAgICBhbiBpbWFnZSBpcyB0byBjcmVhdGUgYSBjdXN0b20gcGFja2FnZSBncm91cCByZWNpcGUgdGhhdCBpcworICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlIG9yIGltYWdlcy4KKyAgICAgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBvZiBhIHBhY2thZ2UgZ3JvdXAgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGV4YW1pbmUgdGhhdCByZWNpcGUsIHlvdSBzZWUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBsaXN0cyB0aGUgcGFja2FnZSBncm91cCBwYWNrYWdlcyB0byBwcm9kdWNlLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW5oZXJpdCBwYWNrYWdlZ3JvdXA8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBzZXRzIGFwcHJvcHJpYXRlIGRlZmF1bHQgdmFsdWVzIGFuZCBhdXRvbWF0aWNhbGx5IGFkZHMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXB0ZXN0PC9maWxlbmFtZT4gY29tcGxlbWVudGFyeSBwYWNrYWdlcyBmb3IgZWFjaAorICAgICAgICAgICAgICAgIHBhY2thZ2Ugc3BlY2lmaWVkIGluIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5pbmhlcml0IHBhY2thZ2VzPC9maWxlbmFtZT4gc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgbmVhciB0aGUgdG9wIG9mIHRoZSByZWNpcGUsIGNlcnRhaW5seSBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBlYWNoIHBhY2thZ2UgeW91IHNwZWNpZnkgaW4gPGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz5SREVQRU5EUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz5SUkVDT01NRU5EUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBlbnRyaWVzIHRvIHByb3ZpZGUgYSBsaXN0IG9mIHBhY2thZ2VzIHRoZSBwYXJlbnQgdGFzayBwYWNrYWdlCisgICAgICAgICAgICAgICAgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgZXhhbXBsZXMgb2YgdGhlc2UgZnVydGhlciBkb3duIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZS5iYjwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhIHNob3J0LCBmYWJyaWNhdGVkIGV4YW1wbGUgc2hvd2luZyB0aGUgc2FtZSBiYXNpYworICAgICAgICAgICAgICAgIHBpZWNlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFU0NSSVBUSU9OID0gIk15IEN1c3RvbSBQYWNrYWdlIEdyb3VwcyIKKworICAgICBpbmhlcml0IHBhY2thZ2Vncm91cAorCisgICAgIFBBQ0tBR0VTID0gIlwKKyAgICAgICAgIHBhY2thZ2Vncm91cC1jdXN0b20tYXBwcyBcCisgICAgICAgICBwYWNrYWdlZ3JvdXAtY3VzdG9tLXRvb2xzIFwKKyAgICAgICAgICIKKworICAgICBSREVQRU5EU19wYWNrYWdlZ3JvdXAtY3VzdG9tLWFwcHMgPSAiXAorICAgICAgICAgZHJvcGJlYXIgXAorICAgICAgICAgcG9ydG1hcCBcCisgICAgICAgICBwc3BsYXNoIgorCisgICAgIFJERVBFTkRTX3BhY2thZ2Vncm91cC1jdXN0b20tdG9vbHMgPSAiXAorICAgICAgICAgb3Byb2ZpbGUgXAorICAgICAgICAgb3Byb2ZpbGV1aS1zZXJ2ZXIgXAorICAgICAgICAgbHR0bmctdG9vbHMiCisKKyAgICAgUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWN1c3RvbS10b29scyA9ICJcCisgICAgICAgICBrZXJuZWwtbW9kdWxlLW9wcm9maWxlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHR3byBwYWNrYWdlIGdyb3VwIHBhY2thZ2VzIGFyZSBjcmVhdGVkIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCB0aGVpcgorICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGxpc3RlZDogPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jdXN0b20tYXBwczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWN1c3RvbS10b29sczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nIHRoZXNlIHBhY2thZ2UgZ3JvdXAgcGFja2FnZXMsIHlvdSBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY3VzdG9tLWFwcHM8L2ZpbGVuYW1lPiBhbmQvb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWN1c3RvbS10b29sczwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9JTlNUQUxMJz5JTUFHRV9JTlNUQUxMPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3Igb3RoZXIgZm9ybXMgb2YgaW1hZ2UgZGVwZW5kZW5jaWVzIHNlZSB0aGUgb3RoZXIgYXJlYXMgb2YgdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2UtbmFtZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3VzdG9taXppbmcgYW4gSW1hZ2UgSG9zdG5hbWU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgY29uZmlndXJlZCBob3N0bmFtZSAoaS5lLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2hvc3RuYW1lPC9maWxlbmFtZT4pIGluIGFuIGltYWdlIGlzIHRoZQorICAgICAgICAgICAgICAgIHNhbWUgYXMgdGhlIG1hY2hpbmUgbmFtZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgZXF1YWxzICJxZW11eDg2IiwgdGhlIGNvbmZpZ3VyZWQgaG9zdG5hbWUgd3JpdHRlbiB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2hvc3RuYW1lPC9maWxlbmFtZT4gaXMgInFlbXV4ODYiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIG5hbWUgYnkgYWx0ZXJpbmcgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICJob3N0bmFtZSIgdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXM8L2ZpbGVuYW1lPiByZWNpcGUgdXNpbmcgZWl0aGVyCisgICAgICAgICAgICAgICAgYW4gYXBwZW5kIGZpbGUgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgaW4gYW4gYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBob3N0bmFtZT0ibXlob3N0bmFtZSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIm15aG9zdG5hbWUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDaGFuZ2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgImhvc3RuYW1lIiBjYW4gYmUKKyAgICAgICAgICAgICAgICB1c2VmdWwgaW4gY2VydGFpbiBzaXR1YXRpb25zLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIHRvIGRvIGV4dGVuc2l2ZSB0ZXN0aW5nIG9uIGFuCisgICAgICAgICAgICAgICAgaW1hZ2UgYW5kIHlvdSB3b3VsZCBsaWtlIHRvIGVhc2lseSBpZGVudGlmeSB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICB1bmRlciB0ZXN0IGZyb20gZXhpc3RpbmcgaW1hZ2VzIHdpdGggdHlwaWNhbCBkZWZhdWx0CisgICAgICAgICAgICAgICAgaG9zdG5hbWVzLgorICAgICAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCB5b3UgY291bGQgY2hhbmdlIHRoZSBkZWZhdWx0IGhvc3RuYW1lIHRvCisgICAgICAgICAgICAgICAgInRlc3RtZSIsIHdoaWNoIHJlc3VsdHMgaW4gYWxsIHRoZSBpbWFnZXMgdXNpbmcgdGhlIG5hbWUKKyAgICAgICAgICAgICAgICAidGVzdG1lIi4KKyAgICAgICAgICAgICAgICBPbmNlIHRlc3RpbmcgaXMgY29tcGxldGUgYW5kIHlvdSBkbyBub3QgbmVlZCB0byByZWJ1aWxkIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIGZvciB0ZXN0IGFueSBsb25nZXIsIHlvdSBjYW4gZWFzaWx5IHJlc2V0IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgaG9zdG5hbWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgcG9pbnQgb2YgaW50ZXJlc3QgaXMgdGhhdCBpZiB5b3UgdW5zZXQgdGhlIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgIHRoZSBpbWFnZSB3aWxsIGhhdmUgbm8gZGVmYXVsdCBob3N0bmFtZSBpbiB0aGUgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1bnNldHMgdGhlIHZhcmlhYmxlIGluIGEKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSGF2aW5nIG5vIGRlZmF1bHQgaG9zdG5hbWUgaW4gdGhlIGZpbGVzeXN0ZW0gaXMgc3VpdGFibGUgZm9yCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzIHRoYXQgdXNlIGR5bmFtaWMgaG9zdG5hbWVzIHN1Y2ggYXMgdmlydHVhbAorICAgICAgICAgICAgICAgIG1hY2hpbmVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtd3JpdGluZy1hLW5ldy1yZWNpcGUnPgorICAgICAgICA8dGl0bGU+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVjaXBlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzKSBhcmUgZnVuZGFtZW50YWwgY29tcG9uZW50cworICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBFYWNoIHNvZnR3YXJlIGNvbXBvbmVudCBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgcmVxdWlyZXMgYSByZWNpcGUgdG8gZGVmaW5lIHRoZSBjb21wb25lbnQuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUsIHdyaXRlLCBhbmQgdGVzdCBhIG5ldworICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlcyB0aGF0IGFyZSB1c2VmdWwgZm9yIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIGFib3V0IHJlY2lwZSBuYW1pbmcgaXNzdWVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtcmVxdWlyZWQnPlJlcXVpcmVkPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtb3ZlcnZpZXcnPgorICAgICAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIGJhc2ljIHByb2Nlc3MgZm9yIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICBuZXcgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIHNlY3Rpb24gcHJvdmlkZXMgZGV0YWlscyBmb3IgdGhlIHN0ZXBzLgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWxvY2F0ZS1vci1hdXRvbWF0aWNhbGx5LWNyZWF0ZS1hLWJhc2UtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhdGUgb3IgQXV0b21hdGljYWxseSBDcmVhdGUgYSBCYXNlIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWx3YXlzIHdyaXRlIGEgcmVjaXBlIGZyb20gc2NyYXRjaC4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB0d28gY2hvaWNlcyBleGlzdCB0aGF0IGNhbiBoZWxwIHlvdSBxdWlja2x5IGdldCBhCisgICAgICAgICAgICAgICAgc3RhcnQgb24gYSBuZXcgcmVjaXBlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQSB0b29sIHByb3ZpZGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IHRoYXQgYXV0b21hdGVzCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiBhIGJhc2UgcmVjaXBlIGJhc2VkIG9uIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXhpc3RpbmcgUmVjaXBlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiBhbiBleGlzdGluZyByZWNpcGUgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgc2ltaWxhciBpbiBmdW5jdGlvbiB0byB0aGUgcmVjaXBlIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNyZWF0aW5nLXRoZS1iYXNlLXJlY2lwZS11c2luZy1yZWNpcGV0b29sJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIEJhc2UgUmVjaXBlIFVzaW5nIDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT4gYXV0b21hdGVzIGNyZWF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIGEgYmFzZSByZWNpcGUgZ2l2ZW4gYSBzZXQgb2Ygc291cmNlIGNvZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEFzIGxvbmcgYXMgeW91IGNhbiBleHRyYWN0IG9yIHBvaW50IHRvIHRoZSBzb3VyY2UgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHRoZSB0b29sIHdpbGwgY29uc3RydWN0IGEgcmVjaXBlIGFuZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBhbGwgcHJlLWJ1aWxkIGluZm9ybWF0aW9uIGludG8gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgQXV0b3Rvb2xzLgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyB0aGUgYmFzZSByZWNpcGUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiByZXN1bHRzIGluIGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgaGFzIHRoZSBwcmUtYnVpbGQgZGVwZW5kZW5jaWVzLCBsaWNlbnNlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNoZWNrc3VtcyBjb25maWd1cmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBydW4gdGhlIHRvb2wsIHlvdSBqdXN0IG5lZWQgdG8gYmUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGhhdmUgc291cmNlZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGJhc2ljIDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT4gc3ludGF4OgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPnJlY2lwZXRvb2wgLWg8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2wgY3JlYXRlIC1oPC9maWxlbmFtZT4gcHJvZHVjZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24tZ2VuZXJhdGVkIGhlbHAsIHdoaWNoIHByZXNlbnRlZCBkaWZmZXJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiB3aGF0IGZvbGxvd3MgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZXRvb2wgLWgKKyAgICAgcmVjaXBldG9vbCBjcmVhdGUgWy1oXQorICAgICByZWNpcGV0b29sIFstZF0gWy1xXSBbLS1jb2xvciBhdXRvIHwgYWx3YXlzIHwgbmV2ZXIgXSBjcmVhdGUgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiBbLW1dIFsteCA8cmVwbGFjZWFibGU+RVhURVJOQUxTUkM8L3JlcGxhY2VhYmxlPl0gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisKKyAgICAgICAgICAtZCAgICAgICBFbmFibGVzIGRlYnVnIG91dHB1dC4KKyAgICAgICAgICAtcSAgICAgICBPdXRwdXRzIG9ubHkgZXJyb3JzIChxdWlldCBtb2RlKS4KKyAgICAgICAgICAtLWNvbG9yICBDb2xvcml6ZXMgdGhlIG91dHB1dCBhdXRvbWF0aWNhbGx5LCBhbHdheXMsIG9yIG5ldmVyLgorICAgICAgICAgIC1oICAgICAgIERpc3BsYXlzIFB5dGhvbiBnZW5lcmF0ZWQgc3ludGF4IGZvciByZWNpcGV0b29sLgorICAgICAgICAgIGNyZWF0ZSAgIENhdXNlcyByZWNpcGV0b29sIHRvIGNyZWF0ZSBhIGJhc2UgcmVjaXBlLiAgVGhlIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgaXMgZnVydGhlciBkZWZpbmVkIHdpdGggdGhlc2Ugb3B0aW9uczoKKworICAgICAgICAgICAgICAgICAgIC1vIDxyZXBsYWNlYWJsZT5PVVRGSUxFPC9yZXBsYWNlYWJsZT4gICAgICBTcGVjaWZpZXMgdGhlIGZ1bGwgcGF0aCBhbmQgZmlsZW5hbWUgZm9yIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgIC1tICAgICAgICAgICAgICBDYXVzZXMgdGhlIHJlY2lwZSB0byBiZSBtYWNoaW5lLXNwZWNpZmljIHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyAoZGVmYXVsdCkuCisgICAgICAgICAgICAgICAgICAgLXggPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4gIEZldGNoZXMgYW5kIGV4dHJhY3RzIHNvdXJjZSBmaWxlcyBmcm9tIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGxhY2VzIHRoZW0gaW4gPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIGEgVVJMLgorICAgICAgICAgICAgICAgICAgIC1oICAgICAgICAgICAgICBEaXNwbGF5cyBQeXRob24tZ2VuZXJhdGVkIHN5bnRheCBmb3IgY3JlYXRlLgorICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPiAgICAgICAgICBTcGVjaWZpZXMgdGhlIHNvdXJjZSBjb2RlIG9uIHdoaWNoIHRvIGJhc2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5yZWNpcGV0b29sIGNyZWF0ZSAtbzwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBiYXNlIHJlY2lwZSBhbmQgbG9jYXRlcyBpdCBwcm9wZXJseSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgdGhhdCBjb250YWlucyB5b3VyIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIHN5bnRheCBleGFtcGxlczoKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgc3ludGF4IHRvIGdlbmVyYXRlIGEgcmVjaXBlIGJhc2VkIG9uIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgT25jZSBnZW5lcmF0ZWQsIHRoZSByZWNpcGUgcmVzaWRlcyBpbiB0aGUgZXhpc3Rpbmcgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgbGF5ZXI6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVjaXBldG9vbCBjcmVhdGUgLW8gPHJlcGxhY2VhYmxlPk9VVEZJTEU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHN5bnRheCB0byBnZW5lcmF0ZSBhIHJlY2lwZSB1c2luZyBjb2RlIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY3QgZnJvbSA8cmVwbGFjZWFibGU+c291cmNlPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBleHRyYWN0ZWQgY29kZSBpcyBwbGFjZWQgaW4gaXRzIG93biBsYXllciBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGJ5IDxyZXBsYWNlYWJsZT5FWFRFUk5BTFNSQzwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlY2lwZXRvb2wgY3JlYXRlIC1vIDxyZXBsYWNlYWJsZT5PVVRGSUxFPC9yZXBsYWNlYWJsZT4gLXggPHJlcGxhY2VhYmxlPkVYVEVSTkFMU1JDPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgc3ludGF4IHRvIGdlbmVyYXRlIGEgcmVjaXBlIGJhc2VkIG9uIDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9wdGlvbnMgZGlyZWN0IDxmaWxlbmFtZT5yZWNpcGV0b29sPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgcnVuIGluICJxdWlldCBtb2RlIiBhbmQgdG8gZ2VuZXJhdGUgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBPbmNlIGdlbmVyYXRlZCwgdGhlIHJlY2lwZSByZXNpZGVzIGluIHRoZSBleGlzdGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSBsYXllcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZWNpcGV0b29sIGNyZWF0ZSAtbyA8cmVwbGFjZWFibGU+T1VURklMRTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5zb3VyY2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1sb2NhdGluZy1hbmQtdXNpbmctYS1zaW1pbGFyLXJlY2lwZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkxvY2F0aW5nIGFuZCBVc2luZyBhIFNpbWlsYXIgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgd3JpdGluZyBhIHJlY2lwZSBmcm9tIHNjcmF0Y2gsIGl0IGlzIG9mdGVuIHVzZWZ1bCB0bworICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlciB3aGV0aGVyIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSB3cml0dGVuIG9uZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIG1lZXRzIChvciBjb21lcyBjbG9zZSB0byBtZWV0aW5nKSB5b3VyIG5lZWRzLgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBhbmQgT3BlbkVtYmVkZGVkIGNvbW11bml0aWVzIG1haW50YWluIG1hbnkKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIHdoYXQgeW91IGFyZSBkb2luZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgZ29vZCBjZW50cmFsIGluZGV4IG9mIHRoZXNlIHJlY2lwZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyc+T3BlbkVtYmVkZGVkIG1ldGFkYXRhIGluZGV4PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdvcmtpbmcgZnJvbSBhbiBleGlzdGluZyByZWNpcGUgb3IgYSBza2VsZXRvbiByZWNpcGUgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGJlc3Qgd2F5IHRvIGdldCBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIHBvaW50cyBvbiBib3RoIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxvY2F0ZSBhbmQgbW9kaWZ5IGEgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBjbG9zZSB0byB3aGF0IHlvdSB3YW50IHRvIGRvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2Qgd29ya3Mgd2hlbiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCByZWNpcGUgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGhvZCBkb2VzIG5vdCB3b3JrIHNvIHdlbGwgZm9yIHRob3NlIG5ldyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG9yIHdyaXRpbmcgcmVjaXBlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+U29tZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZXRob2QgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSByZWNpcGUgdGhhdCBoYXMgYXJlYXMgdG90YWxseSB1bnJlbGF0ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2l0aCB5b3VyIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcmVjb2duaXppbmcgYXJlYXMgb2YgdGhlIHJlY2lwZSB0aGF0IHlvdSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgdG8gYWRkIGZyb20gc2NyYXRjaCwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCB0aGVzZSByaXNrcyBzdGVtIGZyb20gdW5mYW1pbGlhcml0eSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIHJlY2lwZSBzcGFjZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIGFuZCBtb2RpZnkgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZWxldG9uIHJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZvciBzb21lIHJlYXNvbiB5b3UgZG8gbm90IHdhbnQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXRvb2w8L2ZpbGVuYW1lPiBhbmQgeW91IGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmQgYW4gZXhpc3RpbmcgcmVjaXBlIHRoYXQgaXMgY2xvc2UgdG8gbWVldGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbmVlZHMsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSB0aGUgZnVuZGFtZW50YWwgYXJlYXMgb2YgYSBuZXcgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVTQ1JJUFRJT04gPSAiIgorICAgICBIT01FUEFHRSA9ICIiCisgICAgIExJQ0VOU0UgPSAiIgorICAgICBTRUNUSU9OID0gIiIKKyAgICAgREVQRU5EUyA9ICIiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiIgorCisgICAgIFNSQ19VUkkgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtc3RvcmluZy1hbmQtbmFtaW5nLXRoZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPlN0b3JpbmcgYW5kIE5hbWluZyB0aGUgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB5b3VyIGJhc2UgcmVjaXBlLCB5b3Ugc2hvdWxkIHB1dCBpdCBpbiB5b3VyCisgICAgICAgICAgICAgICAgb3duIGxheWVyIGFuZCBuYW1lIGl0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgTG9jYXRpbmcgaXQgY29ycmVjdGx5IGVuc3VyZXMgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIGNhbiBmaW5kIGl0IHdoZW4geW91IHVzZSBCaXRCYWtlIHRvIHByb2Nlc3MgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RvcmluZyBZb3VyIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBsb2NhdGVzIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGxheWVyJ3MgPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJGSUxFUyc+PGZpbGVuYW1lPkJCRklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNldHMgdXAgYSBwYXRoIGZyb20gd2hpY2ggdGhlIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIHR5cGljYWwgdXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMtKi8qLyouYmIgXAorICAgICAgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG5lZWQgdG8gYmUgc3VyZSB5b3UgbG9jYXRlIHlvdXIgbmV3IHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBpbnNpZGUgeW91ciBsYXllciBzdWNoIHRoYXQgaXQgY2FuIGJlIGZvdW5kLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGxheWVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VuZGVyc3RhbmRpbmctYW5kLWNyZWF0aW5nLWxheWVycyc+VW5kZXJzdGFuZGluZyBhbmQgQ3JlYXRpbmcgTGF5ZXJzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5hbWluZyBZb3VyIFJlY2lwZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBuYW1lIHlvdXIgcmVjaXBlLCB5b3UgbmVlZCB0byBmb2xsb3cgdGhpcyBuYW1pbmcKKyAgICAgICAgICAgICAgICAgICAgY29udmVudGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+YmFzZW5hbWU8L3JlcGxhY2VhYmxlPl88cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+LmJiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVXNlIGxvd2VyLWNhc2VkIGNoYXJhY3RlcnMgYW5kIGRvIG5vdCBpbmNsdWRlIHRoZSByZXNlcnZlZAorICAgICAgICAgICAgICAgICAgICBzdWZmaXhlcyA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWNyb3NzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4taW5pdGlhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IGNhc3VhbGx5IChpLmUuIGRvIG5vdCB1c2UgdGhlbQorICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHlvdXIgcmVjaXBlIG5hbWUgdW5sZXNzIHRoZSBzdHJpbmcgYXBwbGllcykuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY3Vwc18xLjcuMC5iYgorICAgICBnYXdrXzQuMC4yLmJiCisgICAgIGlyc3NpXzAuOC4xNi1yYzEuYmIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndW5kZXJzdGFuZGluZy1yZWNpcGUtc3ludGF4Jz4KKyAgICAgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kaW5nIFJlY2lwZSBTeW50YXg8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHJlY2lwZSBmaWxlIHN5bnRheCBpcyBpbXBvcnRhbnQgZm9yCisgICAgICAgICAgICAgICAgd3JpdGluZyByZWNpcGVzLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBvdmVydmlld3MgdGhlIGJhc2ljIGl0ZW1zIHRoYXQgbWFrZSB1cCBhCisgICAgICAgICAgICAgICAgQml0QmFrZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBjb21wbGV0ZSBCaXRCYWtlIHN5bnRheCBkZXNjcmlwdGlvbnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsLW1ldGFkYXRhJz5TeW50YXggYW5kIE9wZXJhdG9yczwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WYXJpYWJsZSBBc3NpZ25tZW50cyBhbmQgTWFuaXB1bGF0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgYXNzaWdubWVudHMgYWxsb3cgYSB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBhCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhc3NpZ25tZW50IGNhbiBiZSBzdGF0aWMgdGV4dCBvciBtaWdodCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29udGVudHMgb2Ygb3RoZXIgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIGFzc2lnbm1lbnQsIGFwcGVuZGluZyBhbmQgcHJlcGVuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHNvbWUgb2YgdGhlIHdheXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHZhcmlhYmxlcyBpbiByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTID0gIiR7V09SS0RJUn0vcG9zdGZpeC0ke1BWfSIKKyAgICAgQ0ZMQUdTICs9ICItRE5PX0FTTSIKKyAgICAgU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9maXh1cC5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZ1bmN0aW9uczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHByb3ZpZGUgYSBzZXJpZXMgb2YgYWN0aW9ucyB0byBiZSBwZXJmb3JtZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgdXN1YWxseSB1c2UgZnVuY3Rpb25zIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBhIHRhc2sgZnVuY3Rpb24gb3IgdG8gY29tcGxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYSBkZWZhdWx0IGZ1bmN0aW9uIChpLmUuIGFwcGVuZCBvciBwcmVwZW5kIHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBmdW5jdGlvbikuCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCBmdW5jdGlvbnMgdXNlIDxmaWxlbmFtZT5zaDwvZmlsZW5hbWU+IHNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXgsIGFsdGhvdWdoIGFjY2VzcyB0byBPcGVuRW1iZWRkZWQgdmFyaWFibGVzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgbWV0aG9kcyBhcmUgYWxzbyBhdmFpbGFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZ1bmN0aW9uIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4gcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19pbnN0YWxsICgpIHsKKyAgICAgICAgIGF1dG90b29sc19kb19pbnN0YWxsCisgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorICAgICAgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KKyAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbmV3IGZ1bmN0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY2FsbGVkIGJldHdlZW4gZXhpc3RpbmcgdGFza3MgYXMgbG9uZyBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBmdW5jdGlvbnMgYXJlIG5vdCByZXBsYWNpbmcgb3IgY29tcGxlbWVudGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbXBsZW1lbnQgZnVuY3Rpb25zIGluIFB5dGhvbgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBzaGVsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvdGggb2YgdGhlc2Ugb3B0aW9ucyBhcmUgbm90IHNlZW4gaW4gdGhlIG1ham9yaXR5IG9mCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPktleXdvcmRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHJlY2lwZXMgdXNlIG9ubHkgYSBmZXcga2V5d29yZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgdXNlIGtleXdvcmRzIHRvIGluY2x1ZGUgY29tbW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMgKDxmaWxlbmFtZT5pbmhlcml0PC9maWxlbmFtZT4pLCBsb2FkIHBhcnRzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBhIHJlY2lwZSBmcm9tIG90aGVyIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZXF1aXJlPC9maWxlbmFtZT4pIGFuZCBleHBvcnQgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZW52aXJvbm1lbnQgKDxmaWxlbmFtZT5leHBvcnQ8L2ZpbGVuYW1lPikuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSB1c2Ugb2Ygc29tZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2Uga2V5d29yZHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBQT1NUQ09ORiA9ICIke1NUQUdJTkdfQklORElSfS9wb3N0Y29uZiIKKyAgICAgaW5oZXJpdCBhdXRvY29uZgorICAgICByZXF1aXJlIG90aGVyZmlsZS5pbmMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbW1lbnRzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBbnkgbGluZXMgdGhhdCBiZWdpbiB3aXRoIHRoZSBoYXNoIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4jPC9maWxlbmFtZT4pIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnQgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhcmUgaWdub3JlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBUaGlzIGlzIGEgY29tbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBsaXN0IHN1bW1hcml6ZXMgdGhlIG1vc3QgaW1wb3J0YW50IGFuZCBtb3N0IGNvbW1vbmx5CisgICAgICAgICAgICAgICAgdXNlZCBwYXJ0cyBvZiB0aGUgcmVjaXBlIHN5bnRheC4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSBwYXJ0cyBvZiB0aGUgc3ludGF4LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbC1tZXRhZGF0YSc+U3ludGF4IGFuZCBPcGVyYXRvcnM8L3VsaW5rPgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MaW5lIENvbnRpbnVhdGlvbjogPGZpbGVuYW1lPlw8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgYmFja3dhcmQgc2xhc2ggKDxmaWxlbmFtZT5cPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgdG8gc3BsaXQgYSBzdGF0ZW1lbnQgb3ZlciBtdWx0aXBsZSBsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBsYWNlIHRoZSBzbGFzaCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSBjb250aW51ZWQgb24gdGhlIG5leHQgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSID0gIkEgcmVhbGx5IGxvbmcgXAorICAgICAgICAgICAgbGluZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgaGF2ZSBhbnkgY2hhcmFjdGVycyBpbmNsdWRpbmcgc3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGFicyBhZnRlciB0aGUgc2xhc2ggY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgVmFyaWFibGVzOiA8ZmlsZW5hbWU+JHsuLi59PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4kezxyZXBsYWNlYWJsZT52YXJuYW1lPC9yZXBsYWNlYWJsZT59PC9maWxlbmFtZT4gc3ludGF4IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnBuZy96bGliLSR7UFZ9LnRhci5neiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlF1b3RlIEFsbCBBc3NpZ25tZW50czogPGZpbGVuYW1lPiI8cmVwbGFjZWFibGU+dmFsdWU8L3JlcGxhY2VhYmxlPiI8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBkb3VibGUgcXVvdGVzIGFyb3VuZCB0aGUgdmFsdWUgaW4gYWxsIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA9ICIke09USEVSVkFSfSIKKyAgICAgVkFSMiA9ICJUaGUgdmVyc2lvbiBpcyAke1BWfSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmRpdGlvbmFsIEFzc2lnbm1lbnQ6IDxmaWxlbmFtZT4/PTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uYWwgYXNzaWdubWVudCBpcyB1c2VkIHRvIGFzc2lnbiBhIHZhbHVlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhIHZhcmlhYmxlLCBidXQgb25seSB3aGVuIHRoZSB2YXJpYWJsZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBxdWVzdGlvbiBtYXJrIGZvbGxvd2VkIGJ5IHRoZSBlcXVhbCBzaWduCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj89PC9maWxlbmFtZT4pIHRvIG1ha2UgYSAic29mdCIgYXNzaWdubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgY29uZGl0aW9uYWwgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgInNvZnQiIGFzc2lnbm1lbnRzIGFyZSB1c2VkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvciB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGFsbG93ZWQgdG8gY29tZSB0aHJvdWdoIGZyb20gdGhlIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlZBUjE8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gIk5ldyB2YWx1ZSIgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGlzIGN1cnJlbnRseSBlbXB0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIDxmaWxlbmFtZT5WQVIxPC9maWxlbmFtZT4gaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0LCBpdCByZW1haW5zIHVuY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBuZXh0IGV4YW1wbGUsIDxmaWxlbmFtZT5WQVIxPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxlZnQgd2l0aCB0aGUgdmFsdWUgIk9yaWdpbmFsIHZhbHVlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVkFSMSA9ICJPcmlnaW5hbCB2YWx1ZSIKKyAgICAgVkFSMSA/PSAiTmV3IHZhbHVlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kaW5nOiA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcGx1cyBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGVxdWFscyBzaWduCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPis9PC9maWxlbmFtZT4pIHRvIGFwcGVuZCB2YWx1ZXMgdG8gZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgYWRkcyBhIHNwYWNlIGJldHdlZW4gdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgdmFyaWFibGUgYW5kIHRoZSBuZXcgY29udGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwZW5kaW5nOiA8ZmlsZW5hbWU+PSs8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgZXF1YWxzIHNpZ24gZm9sbG93ZWQgYnkgdGhlIHBsdXMgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4pIHRvIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGFkZHMgYSBzcGFjZSBiZXR3ZWVuIHRoZSBuZXcgY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZXhpc3RpbmcgY29udGVudCBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWQVIgPSsgIlN0YXJ0cyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFwcGVuZGluZzogPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9hcHBlbmQ8L2ZpbGVuYW1lPiBvcGVyYXRvciB0bworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kIHZhbHVlcyB0byBleGlzdGluZyB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wZXJhdG9yIGRvZXMgbm90IGFkZCBhbnkgYWRkaXRpb25hbCBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHRoZSBvcGVyYXRvciBpcyBhcHBsaWVkIGFmdGVyIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT49KzwvZmlsZW5hbWU+IG9wZXJhdG9ycyBoYXZlIGJlZW4gYXBwbGllZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGFsbCA8ZmlsZW5hbWU+PTwvZmlsZW5hbWU+IGFzc2lnbm1lbnRzIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9jY3VycmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBzcGFjZSBiZWluZworICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSBhZGRlZCB0byB0aGUgc3RhcnQgdG8gZW5zdXJlIHRoZSBhcHBlbmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaXMgbm90IG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSV9hcHBlbmQgPSAiIGZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJX2FwcGVuZF9zaDQgPSAiIGZpbGU6Ly9maXgtbWFrZWZpbGUucGF0Y2giCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwZW5kaW5nOiA8ZmlsZW5hbWU+X3ByZXBlbmQ8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPl9wcmVwZW5kPC9maWxlbmFtZT4gb3BlcmF0b3IgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQgdmFsdWVzIHRvIGV4aXN0aW5nIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3BlcmF0b3IgZG9lcyBub3QgYWRkIGFueSBhZGRpdGlvbmFsIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgdGhlIG9wZXJhdG9yIGlzIGFwcGxpZWQgYWZ0ZXIgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPj0rPC9maWxlbmFtZT4gb3BlcmF0b3JzIGhhdmUgYmVlbiBhcHBsaWVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYWxsIDxmaWxlbmFtZT49PC9maWxlbmFtZT4gYXNzaWdubWVudHMgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhlIHNwYWNlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdGx5IGFkZGVkIHRvIHRoZSBlbmQgdG8gZW5zdXJlIHRoZSBwcmVwZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIG5vdCBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENGTEFHU19wcmVwZW5kID0gIi1JJHtTfS9teWluY2x1ZGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciB3aXRoIG92ZXJyaWRlcywgd2hpY2ggcmVzdWx0cyBpbiB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgb25seSBiZWluZyBwZXJmb3JtZWQgZm9yIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG9yCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfcHJlcGVuZF9zaDQgPSAiLUkke1N9L215aW5jbHVkZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcnJpZGVzOjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIG92ZXJyaWRlcyB0byBzZXQgYSB2YWx1ZSBjb25kaXRpb25hbGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwaWNhbGx5IGJhc2VkIG9uIGhvdyB0aGUgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlJ3MgdmFsdWUgdG8gInN0YW5kYXJkL2Jhc2UiIGZvciBhbnkgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGZvciBxZW11YXJtIHdoZXJlIGl0IHNob3VsZCBiZSBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIsIHlvdSB3b3VsZCBkbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLQlJBTkNIX3FlbXVhcm0gID0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVzIGFyZSBhbHNvIHVzZWQgdG8gc2VwYXJhdGUgYWx0ZXJuYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSB2YXJpYWJsZSBpbiBvdGhlciBzaXR1YXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gc2V0dGluZyB2YXJpYWJsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgc3BlY2lmaWMgdG8gaW5kaXZpZHVhbCBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSBhbiBvdmVycmlkZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbmRlbnRhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHNwYWNlcyBmb3IgaW5kZW50YXRpb24gcmF0aGVyIHRoYW4gdGhhbiB0YWJzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHNoZWxsIGZ1bmN0aW9ucywgYm90aCBjdXJyZW50bHkgd29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGEgcG9saWN5IGRlY2lzaW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0byB1c2UgdGFicyBpbiBzaGVsbCBmdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgc29tZSBsYXllcnMgaGF2ZSBhIHBvbGljeSB0byB1c2Ugc3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGluZGVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNpbmcgUHl0aG9uIGZvciBDb21wbGV4IE9wZXJhdGlvbnM6IDxmaWxlbmFtZT4ke0A8cmVwbGFjZWFibGU+cHl0aG9uX2NvZGU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGFkdmFuY2VkIHByb2Nlc3NpbmcsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGNvZGUgZHVyaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2ggYW5kIHJlcGxhY2VtZW50IG9uIGEgdmFyaWFibGUpLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBpbmRpY2F0ZSBQeXRob24gY29kZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0A8cmVwbGFjZWFibGU+cHl0aG9uX2NvZGU8L3JlcGxhY2VhYmxlPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IGZvciB0aGUgdmFyaWFibGUgYXNzaWdubWVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy96aXAke0BkLmdldFZhcignUFYnLDEpLnJlcGxhY2UoJy4nLCAnJyl9LnRnegorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hlbGwgRnVuY3Rpb24gU3ludGF4OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBzaGVsbCBmdW5jdGlvbnMgYXMgaWYgeW91IHdlcmUgd3JpdGluZyBhIHNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgd2hlbiB5b3UgZGVzY3JpYmUgYSBsaXN0IG9mIGFjdGlvbnMgdG8gdGFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgZW5zdXJlIHRoYXQgeW91ciBzY3JpcHQgd29ya3Mgd2l0aCBhIGdlbmVyaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaDwvZmlsZW5hbWU+IGFuZCB0aGF0IGl0IGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFueSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IG9yIG90aGVyIHNoZWxsLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXBwbHkgdG8gdmFyaW91cyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdGllcyAoZS5nLiA8ZmlsZW5hbWU+c2VkPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z3JlcDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YXdrPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpIHRoYXQgeW91IG1pZ2h0IHdpc2ggdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgaW4gZG91YnQsIHlvdSBzaG91bGQgY2hlY2sgd2l0aCBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIC0gaW5jbHVkaW5nIHRob3NlIGZyb20gQnVzeUJveC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcnVubmluZy1hLWJ1aWxkLW9uLXRoZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgYSBCdWlsZCBvbiB0aGUgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ3JlYXRpbmcgYSBuZXcgcmVjaXBlIGlzIHVzdWFsbHkgYW4gaXRlcmF0aXZlIHByb2Nlc3MgdGhhdAorICAgICAgICAgICAgICAgIHJlcXVpcmVzIHVzaW5nIEJpdEJha2UgdG8gcHJvY2VzcyB0aGUgcmVjaXBlIG11bHRpcGxlIHRpbWVzIGluCisgICAgICAgICAgICAgICAgb3JkZXIgdG8gcHJvZ3Jlc3NpdmVseSBkaXNjb3ZlciBhbmQgYWRkIGluZm9ybWF0aW9uIHRvIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBc3N1bWluZyB5b3UgaGF2ZSBzb3VyY2VkIGEgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICBhbmQgeW91IGFyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgdXNlIEJpdEJha2UgdG8gcHJvY2VzcyB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBBbGwgeW91IG5lZWQgdG8gcHJvdmlkZSBpcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmJhc2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBvZiB0aGUgcmVjaXBlIGFzIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT5iYXNlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyB0aGUgYnVpbGQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYQorICAgICAgICAgICAgICAgIHRlbXBvcmFyeSB3b3JrIGRpcmVjdG9yeSBmb3IgZWFjaCByZWNpcGUKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICB3aGVyZSBpdCBrZWVwcyBleHRyYWN0ZWQgc291cmNlIGZpbGVzLCBsb2cgZmlsZXMsIGludGVybWVkaWF0ZQorICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIGFuZCBwYWNrYWdpbmcgZmlsZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHBlci1yZWNpcGUgdGVtcG9yYXJ5IHdvcmsgZGlyZWN0b3J5IGlzIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3MgYW5kCisgICAgICAgICAgICAgICAgZGVwZW5kcyBvbiBzZXZlcmFsIGZhY3RvcnM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQVNFX1dPUktESVIgPz0gIiR7VE1QRElSfS93b3JrIgorICAgICBXT1JLRElSID0gIiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBhc3N1bWUgYSBTb3VyY2UgRGlyZWN0b3J5IHRvcC1sZXZlbCBmb2xkZXIgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LCBhIGRlZmF1bHQgQnVpbGQgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni1wb2t5LWxpbnV4PC9maWxlbmFtZT4gbWFjaGluZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgIEZ1cnRoZXJtb3JlLCBzdXBwb3NlIHlvdXIgcmVjaXBlIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHdvcmsgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0bworICAgICAgICAgICAgICAgIGJ1aWxkIHRoZSBwYWNrYWdlIHdvdWxkIGJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW5zaWRlIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gZmluZCBzdWItZGlyZWN0b3JpZXMgc3VjaCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cGFja2FnZXMtc3BsaXQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnRlbXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGUgYnVpbGQsIHlvdSBjYW4gZXhhbWluZSB0aGVzZSB0byBkZXRlcm1pbmUgaG93IHdlbGwKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgd2VudC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGxvZyBmaWxlcyBmb3IgZWFjaCB0YXNrIGluIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwL3RlbXA8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIExvZyBmaWxlcyBhcmUgbmFtZWQgPGZpbGVuYW1lPmxvZy48cmVwbGFjZWFibGU+dGFza25hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5sb2cuZG9fY29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2cuZG9fZmV0Y2g8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2cuZG9fY29tcGlsZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZCBwcm9jZXNzIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNjbG9zZXItbG9vayc+QSBDbG9zZXIgTG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgb2YgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyBnbG9zc2FyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGJ1aWxkIG91dHB1dCBkaXJlY3Rvcnk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIG5hbWU8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUVYVEVORFBFJz48ZmlsZW5hbWU+RVhURU5EUEU8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIC0gKGlmCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMsIHRoZW4gPGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT4gaXMgYmxhbmspPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgdmVyc2lvbjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHJldmlzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWZldGNoaW5nLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPkZldGNoaW5nIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgeW91ciByZWNpcGUgbXVzdCBkbyBpcyBzcGVjaWZ5IGhvdyB0byBmZXRjaAorICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgRmV0Y2hpbmcgaXMgY29udHJvbGxlZCBtYWlubHkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgWW91ciByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIHRoYXQgcG9pbnRzIHRvIHdoZXJlIHRoZSBzb3VyY2UgaXMgbG9jYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgYSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2Ygc291cmNlIGxvY2F0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzb3VyY2VzLWRldi1lbnZpcm9ubWVudCc+U291cmNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayB1c2VzIHRoZSBwcmVmaXggb2YgZWFjaCBlbnRyeSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIHZhbHVlIHRvIGRldGVybWluZSB3aGljaAorICAgICAgICAgICAgICAgIGZldGNoZXIgdG8gdXNlIHRvIGdldCB5b3VyIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBJdCBpcyB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0aGF0IHRyaWdnZXJzCisgICAgICAgICAgICAgICAgdGhlIGZldGNoZXIuCisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayB1c2VzIHRoZSB2YXJpYWJsZSBhZnRlciBzb3VyY2UgaXMgZmV0Y2hlZCB0byBhcHBseQorICAgICAgICAgICAgICAgIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU09WRVJSSURFUyc+PGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciBzY2FubmluZyBkaXJlY3RvcnkgbG9jYXRpb25zIGZvciBsb2NhbCBmaWxlcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlIG11c3QKKyAgICAgICAgICAgICAgICBkZWZpbmUgZWFjaCB1bmlxdWUgbG9jYXRpb24gZm9yIHlvdXIgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gbm90IGhhcmQtY29kZSBwYXRobmFtZXMgaW4gYW4gVVJMIHVzZWQKKyAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFJhdGhlciB0aGFuIGhhcmQtY29kZSB0aGVzZSBwYXRocywgdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIHdoaWNoIGNhdXNlcyB0aGUgZmV0Y2ggcHJvY2VzcyB0byB1c2UgdGhlIHZlcnNpb24gc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZSB2ZXJzaW9uIGluIHRoaXMgbWFubmVyIG1lYW5zIHRoYXQgdXBncmFkaW5nIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSB0byBhIGZ1dHVyZSB2ZXJzaW9uIGlzIGFzIHNpbXBsZSBhcyByZW5hbWluZyB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgdG8gbWF0Y2ggdGhlIG5ldyB2ZXJzaW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTIwLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICByZWNpcGUgd2hlcmUgdGhlIHNvdXJjZSBjb21lcyBmcm9tIGEgc2luZ2xlIHRhcmJhbGwuCisgICAgICAgICAgICAgICAgTm90aWNlIHRoZSB1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImZ0cDovL2Z0cC5iZXJsaW9zLmRlL3B1Yi9jZHJlY29yZC9hbHBoYS9jZHJ0b29scy0ke1BWfS50YXIuYnoyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmlsZXMgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gd2hvc2UgbmFtZXMgZW5kCisgICAgICAgICAgICAgICAgaW4gYSB0eXBpY2FsIGFyY2hpdmUgZXh0ZW5zaW9uIChlLmcuIDxmaWxlbmFtZT4udGFyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi50YXIuZ3o8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi50YXIuYnoyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi56aXA8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSwgYXJlIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICBleHRyYWN0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIHRoYXQgc3BlY2lmaWVzIHRoZXNlIHR5cGVzIG9mIGZpbGVzLCBzZWUKKyAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1hdXRvdG9vbGVkLXBhY2thZ2UnPkF1dG90b29sZWQgUGFja2FnZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciB3YXkgb2Ygc3BlY2lmeWluZyBzb3VyY2UgaXMgZnJvbSBhbiBTQ00uCisgICAgICAgICAgICAgICAgRm9yIEdpdCByZXBvc2l0b3JpZXMsIHlvdSBtdXN0IHNwZWNpZnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZCB5b3Ugc2hvdWxkIHNwZWNpZnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0byBpbmNsdWRlIHRoZSByZXZpc2lvbiB3aXRoCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ1BWJz48ZmlsZW5hbWU+U1JDUFY8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFViA9ICJkNjkxOGM4ODMyNzkzYjQyMDVlZDNiZmVkZTc4YzJmOTE1YzIzMzg1IgorCisgICAgIFBSID0gInI2IgorICAgICBQViA9ICIxLjAuNStnaXQke1NSQ1BWfSIKKworICAgICBTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdXIgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICBVUkxzIHBvaW50aW5nIHRvIGluZGl2aWR1YWwgZmlsZXMgZmV0Y2hlZCBmcm9tIGEgcmVtb3RlIHNlcnZlcgorICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gYSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLCBCaXRCYWtlIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgdmVyaWZ5IHRoZSBmaWxlcyBhZ2FpbnN0IGNoZWNrc3VtcyBkZWZpbmVkIGluIHlvdXIgcmVjaXBlIHRvCisgICAgICAgICAgICAgICAgZW5zdXJlIHRoZXkgaGF2ZSBub3QgYmVlbiB0YW1wZXJlZCB3aXRoIG9yIG90aGVyd2lzZSBtb2RpZmllZAorICAgICAgICAgICAgICAgIHNpbmNlIHRoZSByZWNpcGUgd2FzIHdyaXR0ZW4uCisgICAgICAgICAgICAgICAgVHdvIGNoZWNrc3VtcyBhcmUgdXNlZDoKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSVttZDVzdW1dPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUklbc2hhMjU2c3VtXTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgbW9yZSB0aGFuIGEgc2luZ2xlIFVSTCAoZXhjbHVkaW5nIFNDTSBVUkxzKSwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIHRoZSA8ZmlsZW5hbWU+bWQ1PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNoYTI1NjwvZmlsZW5hbWU+IGNoZWNrc3VtcyBmb3IgZWFjaCBVUkwuCisgICAgICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgcHJvdmlkZSBhIG5hbWUgZm9yIGVhY2ggVVJMIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgdGhlbiByZWZlcmVuY2UgdGhhdCBuYW1lCisgICAgICAgICAgICAgICAgaW4gdGhlIHN1YnNlcXVlbnQgY2hlY2tzdW0gc3RhdGVtZW50cy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAgICAgICR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8ke1BWfS5kaWZmLmd6O25hbWU9cGF0Y2gKKworICAgICBTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKKyAgICAgU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiN2Y3ZDlmNjBiNzc2NmI4NTI4ODFkNDBiOGZmOTFkOGUzOWZjY2IwZDFkOTEzMTAyYTVjNzVhMmRiYjUyMzMyZCIKKworICAgICBTUkNfVVJJW3BhdGNoLm1kNXN1bV0gPSAiNTdlMWI2ODkyNjRlYTgwZjc4MzUzNTE5ZWVjZTBjOTIiCisgICAgIFNSQ19VUklbcGF0Y2guc2hhMjU2c3VtXSA9ICI3OTA1ZmY5NmJlOTNkNzI1NTQ0ZDAwNDBlNDI1YzQyZjljMDU1ODBkYjNjMjcyZjExY2ZmNzViOWFhODlkNDMwIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvcGVyIHZhbHVlcyBmb3IgPGZpbGVuYW1lPm1kNTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGEyNTY8L2ZpbGVuYW1lPiBjaGVja3N1bXMgbWlnaHQgYmUgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgd2l0aCBvdGhlciBzaWduYXR1cmVzIG9uIHRoZSBkb3dubG9hZCBwYWdlIGZvciB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICBzb3VyY2UgKGUuZy4gPGZpbGVuYW1lPm1kNTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGExPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5zaGEyNTY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1BHPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBvbmx5IGRlYWxzIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2hhMjU2c3VtPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZDVzdW08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB5b3Ugc2hvdWxkIHZlcmlmeSBhbGwgdGhlIHNpZ25hdHVyZXMgeW91IGZpbmQgYnkgaGFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgbm8gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBjaGVja3N1bXMgYXJlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHdoZW4geW91IGF0dGVtcHQgdG8gYnVpbGQgdGhlIHJlY2lwZSwgb3IgeW91IHByb3ZpZGUgYW4KKyAgICAgICAgICAgICAgICBpbmNvcnJlY3QgY2hlY2tzdW0sIHRoZSBidWlsZCB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICBtaXNzaW5nIG9yIGluY29ycmVjdCBjaGVja3N1bS4KKyAgICAgICAgICAgICAgICBBcyBwYXJ0IG9mIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgYnVpbGQgc3lzdGVtIHByb3ZpZGVzCisgICAgICAgICAgICAgICAgdGhlIGNoZWNrc3VtIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmZXRjaGVkIGZpbGUuCisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBjaGVja3N1bXMsIHlvdSBjYW4gY29weSBhbmQgcGFzdGUKKyAgICAgICAgICAgICAgICB0aGVtIGludG8geW91ciByZWNpcGUgYW5kIHRoZW4gcnVuIHRoZSBidWlsZCBhZ2FpbiB0byBjb250aW51ZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCBpZiB0aGUgdXBzdHJlYW0gc291cmNlIHByb3ZpZGVzIHNpZ25hdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHZlcmlmeWluZyB0aGUgZG93bmxvYWRlZCBzb3VyY2UgY29kZSwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICB2ZXJpZnkgdGhvc2UgbWFudWFsbHkgYmVmb3JlIHNldHRpbmcgdGhlIGNoZWNrc3VtIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFuZCBjb250aW51aW5nIHdpdGggdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBmaW5hbCBleGFtcGxlIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgYW5kIGlzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMC5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlJ3MgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgaWRlbnRpZmllcworICAgICAgICAgICAgICAgIG11bHRpcGxlIGZpbGVzIGFzIHRoZSBzb3VyY2UgZmlsZXMgZm9yIHRoZSByZWNpcGU6IGEgdGFyYmFsbCwgYQorICAgICAgICAgICAgICAgIHBhdGNoIGZpbGUsIGEgZGVza3RvcCBmaWxlLCBhbmQgYW4gaWNvbi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiaHR0cDovL2Rpc3Quc2NobW9ycC5kZS9yeHZ0LXVuaWNvZGUvQXR0aWMvcnh2dC11bmljb2RlLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAgICAgIGZpbGU6Ly94d2MucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9yeHZ0LmRlc2t0b3AgXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9yeHZ0LnBuZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IHNwZWNpZnkgbG9jYWwgZmlsZXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkkgcHJvdG9jb2wsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBmZXRjaGVzIGZpbGVzIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgVGhlIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgc2VhcmNoZXMgc3BlY2lmaWMgZGlyZWN0b3JpZXMgaW4gYSBjZXJ0YWluIG9yZGVyOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQJz48ZmlsZW5hbWU+QlA8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yaWVzIGFyZSBhc3N1bWVkIHRvIGJlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIHJlc2lkZXMuCisgICAgICAgICAgICAgICAgRm9yIGFub3RoZXIgZXhhbXBsZSB0aGF0IHNwZWNpZmllcyB0aGVzZSB0eXBlcyBvZiBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLXNpbmdsZS1jLWZpbGUtcGFja2FnZS1oZWxsby13b3JsZCc+U2luZ2xlIC5jIEZpbGUgUGFja2FnZSAoSGVsbG8gV29ybGQhKTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgYWxzbyBzcGVjaWZpZXMgYSBwYXRjaCBmaWxlLgorICAgICAgICAgICAgICAgIFBhdGNoIGZpbGVzIGFyZSBmaWxlcyB3aG9zZSBuYW1lcyB1c3VhbGx5IGVuZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LmRpZmY8L2ZpbGVuYW1lPiBidXQKKyAgICAgICAgICAgICAgICBjYW4gZW5kIHdpdGggY29tcHJlc3NlZCBzdWZmaXhlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpZmYuZ3o8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGF0Y2guYnoyPC9maWxlbmFtZT4sIGZvciBleGFtcGxlLgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBhcHBsaWVzIHBhdGNoZXMgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtcGF0Y2hpbmctY29kZSc+UGF0Y2hpbmcgQ29kZTwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS11bnBhY2tpbmctY29kZSc+CisgICAgICAgICAgICA8dGl0bGU+VW5wYWNraW5nIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2sgdW5wYWNrcyB0aGUgc291cmNlIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcG9pbnRpbmcgdG8gd2hlcmUgaXQgaXMgdW5wYWNrZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZmV0Y2hpbmcgeW91ciBzb3VyY2UgZmlsZXMgZnJvbSBhbiB1cHN0cmVhbSBzb3VyY2UKKyAgICAgICAgICAgICAgICBhcmNoaXZlZCB0YXJiYWxsIGFuZCB0aGUgdGFyYmFsbCdzIGludGVybmFsIHN0cnVjdHVyZSBtYXRjaGVzCisgICAgICAgICAgICAgICAgdGhlIGNvbW1vbiBjb252ZW50aW9uIG9mIGEgdG9wLWxldmVsIHN1YmRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJQTic+PGZpbGVuYW1lPkJQTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS0kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB0aGVuIHlvdSBkbyBub3QgbmVlZCB0byBzZXQgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHNwZWNpZmllcyB0byBmZXRjaAorICAgICAgICAgICAgICAgIHNvdXJjZSBmcm9tIGFuIGFyY2hpdmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhpcyBjb252ZW50aW9uLAorICAgICAgICAgICAgICAgIG9yIGZyb20gYW4gU0NNIGxpa2UgR2l0IG9yIFN1YnZlcnNpb24sIHlvdXIgcmVjaXBlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgZGVmaW5lIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHByb2Nlc3NpbmcgeW91ciByZWNpcGUgdXNpbmcgQml0QmFrZSBzdWNjZXNzZnVsbHkgdW5wYWNrcworICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMsIHlvdSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgcG9pbnRlZCB0byBieSA8ZmlsZW5hbWU+JHtTfTwvZmlsZW5hbWU+IG1hdGNoZXMgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIG9mIHRoZSBzb3VyY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1wYXRjaGluZy1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5QYXRjaGluZyBDb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBwYXRjaCBjb2RlIGFmdGVyIGl0IGhhcyBiZWVuCisgICAgICAgICAgICAgICAgZmV0Y2hlZC4KKyAgICAgICAgICAgICAgICBBbnkgZmlsZXMgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gd2hvc2UKKyAgICAgICAgICAgICAgICBuYW1lcyBlbmQgaW4gPGZpbGVuYW1lPi5wYXRjaDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5kaWZmPC9maWxlbmFtZT4gb3IgY29tcHJlc3NlZCB2ZXJzaW9ucyBvZiB0aGVzZQorICAgICAgICAgICAgICAgIHN1ZmZpeGVzIChlLmcuIDxmaWxlbmFtZT5kaWZmLmd6PC9maWxlbmFtZT4gYXJlIHRyZWF0ZWQgYXMKKyAgICAgICAgICAgICAgICBwYXRjaGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRhc2sgYXV0b21hdGljYWxseSBhcHBsaWVzIHRoZXNlIHBhdGNoZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc2hvdWxkIGJlIGFibGUgdG8gYXBwbHkgcGF0Y2hlcyB3aXRoIHRoZSAiLXAxIgorICAgICAgICAgICAgICAgIG9wdGlvbiAoaS5lLiBvbmUgZGlyZWN0b3J5IGxldmVsIGluIHRoZSBwYXRoIHdpbGwgYmUgc3RyaXBwZWQKKyAgICAgICAgICAgICAgICBvZmYpLgorICAgICAgICAgICAgICAgIElmIHlvdXIgcGF0Y2ggbmVlZHMgdG8gaGF2ZSBtb3JlIGRpcmVjdG9yeSBsZXZlbHMgc3RyaXBwZWQgb2ZmLAorICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIG51bWJlciBvZiBsZXZlbHMgdXNpbmcgdGhlICJzdHJpcGxldmVsIiBvcHRpb24gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBlbnRyeSBmb3IgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIGlmIHlvdXIgcGF0Y2ggbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBhIHNwZWNpZmljCisgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IHRoYXQgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgcGF0Y2ggZmlsZSwgdXNlIHRoZQorICAgICAgICAgICAgICAgICJwYXRjaGRpciIgb3B0aW9uIGluIHRoZSBlbnRyeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgbG9jYWwgZmlsZXMgcmVmZXJlbmNlZCBpbgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+LCB5b3Ugc2hvdWxkIHBsYWNlCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbmV4dCB0byB0aGUgcmVjaXBlIGVpdGhlcgorICAgICAgICAgICAgICAgIG5hbWVkIHRoZSBzYW1lIGFzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlAnPjxmaWxlbmFtZT5CUDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQlBOJz48ZmlsZW5hbWU+QlBOPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgICAgICBvciAiZmlsZXMiLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtbGljZW5zaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3VyIHJlY2lwZSBuZWVkcyB0byBoYXZlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbGljZW5zZSBmb3IgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBrbm93IHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZSBzb2Z0d2FyZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBidWlsZGluZyBpcyBkaXN0cmlidXRlZCwgeW91IHNob3VsZCBnbyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIGFuZCBsb29rIGZvciB0aGF0IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbCBmaWxlcyBjb250YWluaW5nIHRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIGFsc28gZmluZCB0aGUgaW5mb3JtYXRpb24gbmVhciB0aGUgdG9wIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBhIHNvdXJjZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgcGllY2Ugb2Ygc29mdHdhcmUgbGljZW5zZWQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIHlvdSB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJHUEx2MiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgbGljZW5zZXMgeW91IHNwZWNpZnkgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+IGNhbiBoYXZlIGFueSBuYW1lIGFzIGxvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzIHlvdSBkbyBub3QgdXNlIHNwYWNlcywgc2luY2Ugc3BhY2VzIGFyZSB1c2VkIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JzIGJldHdlZW4gbGljZW5zZSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzdGFuZGFyZCBsaWNlbnNlcywgdXNlIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIDxmaWxlbmFtZT5TUERYTElDRU5TRU1BUDwvZmlsZW5hbWU+IGZsYWcgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPm1ldGEvY29uZi9saWNlbnNlcy5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoaXMgdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSB0aGUgbGljZW5zZSB0ZXh0IGhhcyBub3QgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGl0IGhhcywgdGhlIGJ1aWxkIHByb2R1Y2VzIGFuIGVycm9yIGFuZCBpdCBhZmZvcmRzCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgdGhlIGNoYW5jZSB0byBmaWd1cmUgaXQgb3V0IGFuZCBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+WW91IG5lZWQgdG8gc3BlY2lmeSBhbGwgYXBwbGljYWJsZSBsaWNlbnNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGZvciB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0ZXAsIHRoZSBidWlsZCBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGNvbXBhcmUgdGhlIGNoZWNrc3VtcyBvZiB0aGUgZmlsZXMgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRleHQgaGFzIG5vdCBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgQW55IGRpZmZlcmVuY2VzIHJlc3VsdCBpbiBhbiBlcnJvciB3aXRoIHRoZSBtZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSBjdXJyZW50IGNoZWNrc3VtLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZXhwbGFuYXRpb24gYW5kIGV4YW1wbGVzIG9mIGhvdyB0byBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5LWNvbmZpZ3VyaW5nLUxJQ19GSUxFU19DSEtTVU0nPlRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvIGRldGVybWluZSB0aGUgY29ycmVjdCBjaGVja3N1bSBzdHJpbmcsIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGxpc3QgdGhlIGFwcHJvcHJpYXRlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvcnJlY3QgbWQ1IHN0cmluZ3MsIGF0dGVtcHQgdG8gYnVpbGQgdGhlIHNvZnR3YXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gbm90ZSB0aGUgcmVzdWx0aW5nIGVycm9yIG1lc3NhZ2VzIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSBjb3JyZWN0IG1kNSBzdHJpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J25ldy1yZWNpcGUtZmV0Y2hpbmctY29kZSc+RmV0Y2hpbmcgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhc3N1bWVzIHRoZSBzb2Z0d2FyZSBoYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT14eHgiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB0cnkgdG8gYnVpbGQgdGhlIHNvZnR3YXJlLCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYW5kIGdpdmUgeW91IHRoZSBjb3JyZWN0IHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgY2FuIHN1YnN0aXR1dGUgaW50byB0aGUgcmVjaXBlIGZpbGUgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworPCEtLQorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdHJ5aW5nIHRoaXMgb3V0IEkgY3JlYXRlZCBhIG5ldyByZWNpcGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHRvcF8xLjAuMi5iYjwvZmlsZW5hbWU+IGFuZCBwdXQgaXQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaHRvcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZXJlIGFyZSB0d28gbGljZW5zZSB0eXBlIHN0YXRlbWVudHMgaW4gbXkgdmVyeSBzaW1wbGUKKyAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIiIKKworICAgICBMSUNfRklMRVNfQ0hLU1VNID0gIiIKKworICAgICBTUkNfVVJJW21kNXN1bV0gPSAiIgorICAgICBTUkNfVVJJW3NoYTI1NnN1bV0gPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFdmlkZW50bHksIHlvdSBuZWVkIHRvIHJ1biBhIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuYWxsIGh0b3A8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBOZXh0LCB5b3UgZGVsZXRlIG9yIGNvbW1lbnQgb3V0IHRoZSB0d28gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGxpbmVzIGF0IHRoZSBlbmQgYW5kIHRoZW4gYXR0ZW1wdCB0byBidWlsZCB0aGUgc29mdHdhcmUgd2l0aAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIGh0b3A8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBjYXVzZXMgQml0QmFrZSB0byByZXBvcnQgc29tZSBlcnJvcnMgYW5kIGFuZCBnaXZlCisgICAgICAgICAgICAgICAgeW91IHRoZSBhY3R1YWwgc3RyaW5ncyB5b3UgbmVlZCBmb3IgdGhlIGxhc3QgdHdvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBsaW5lcy4KKyAgICAgICAgICAgICAgICBQcmlvciB0byB0aGlzLCB5b3UgaGF2ZSB0byBkaWcgYXJvdW5kIGluIHRoZSBob21lIHBhZ2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGZvciA8ZmlsZW5hbWU+aHRvcDwvZmlsZW5hbWU+IGFuZCBkZXRlcm1pbmUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBHUEx2Mi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgdGhhdCBpbiB0aGUgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBOb3cgeW91IGVkaXQgeW91ciByZWNpcGUgdG8gaGF2ZSB0aG9zZSB0d28gc3RyaW5ncyBmb3IKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJHUEx2MiIKKworICAgICBMSUNfRklMRVNfQ0hLU1VNID0gIiIKKworICAgICBTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9odG9wL2h0b3AtJHtQVn0udGFyLmd6IgorICAgICBTUkNfVVJJW21kNXN1bV0gPSAiMGQwMWNjYThkZjMzNDljNzQ1NjljZWZlYmJkOTkxOWUiCisgICAgIFNSQ19VUklbc2hhMjU2c3VtXSA9ICJlZTYwNjU3YjA0NGVjZTBkZjA5NmMwNTMwNjBkZjdhYmYzY2NlM2E1NjhhYjM0ZDI2MDA0OWU2YTM3Y2NkOGExIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgY2FuIGJ1aWxkIHRoZSBzb2Z0d2FyZSBhZ2FpbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBodG9wPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBqdXN0IGEgc2V0IG9mIGVycm9ycyBub3cgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGVtcHR5IDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUgbm93LgorICAgICAgICAgICAgPC9wYXJhPgorLS0+CisKKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWNvbmZpZ3VyaW5nLXRoZS1yZWNpcGUnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBSZWNpcGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb3N0IHNvZnR3YXJlIHByb3ZpZGVzIHNvbWUgbWVhbnMgb2Ygc2V0dGluZyBidWlsZC10aW1lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHNldHRpbmcgdGhlc2Ugb3B0aW9ucyBpcyBhY2NvbXBsaXNoZWQgYnkgcnVubmluZyBhCisgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdCB3aXRoIHNvbWUgb3B0aW9ucywgb3IgYnkgbW9kaWZ5aW5nIGEgYnVpbGQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgbWFqb3IgcGFydCBvZiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gaXMgYWJvdXQgY2hlY2tpbmcgZm9yCisgICAgICAgICAgICAgICAgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmx5IGVuYWJsaW5nIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBhcyBhIHJlc3VsdC4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzcGVjaWZ5IGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgc29mdHdhcmUgeW91IGFyZSBidWlsZGluZyBpbiB5b3VyIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhbHVlLCBpbiB0ZXJtcyBvZiBvdGhlciByZWNpcGVzIHRoYXQgc2F0aXNmeSB0aG9zZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG9mdGVuIGZpbmQgYnVpbGQtdGltZSBvciBydW50aW1lCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGRlc2NyaWJlZCBpbiB0aGUgc29mdHdhcmUncyBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgcHJvdmlkZXMgY29uZmlndXJhdGlvbiBpdGVtcyBvZiBub3RlIGJhc2VkCisgICAgICAgICAgICAgICAgb24gaG93IHlvdXIgc29mdHdhcmUgaXMgYnVpbHQ6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BdXRvdG9vbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc291cmNlIGZpbGVzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmZpZ3VyZS5hYzwvZmlsZW5hbWU+IGZpbGUsIHRoZW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgaXMgYnVpbHQgdXNpbmcgQXV0b3Rvb2xzLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgeW91IGp1c3QgbmVlZCB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPldoZW4gdXNpbmcgQXV0b3Rvb2xzLCB5b3VyIHJlY2lwZSBuZWVkcyB0byBpbmhlcml0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB5b3VyIHJlY2lwZSBkb2VzIG5vdCBoYXZlIHRvIGNvbnRhaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbWlnaHQgc3RpbGwgd2FudCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwYXNzIGFueSBuZWVkZWQgY29uZmlndXJlIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWNpcGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q01ha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc291cmNlIGZpbGVzIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNNYWtlTGlzdHMudHh0PC9maWxlbmFtZT4gZmlsZSwgdGhlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyBidWlsdCB1c2luZyBDTWFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBqdXN0IG5lZWQgdG8gd29ycnkgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSB1c2UgQ01ha2UsIHlvdXIgcmVjaXBlIG5lZWRzIHRvIGluaGVyaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtY21ha2UnPjxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB5b3VyIHJlY2lwZSBkb2VzIG5vdCBoYXZlIHRvIGNvbnRhaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1ha2Ugc29tZSBhZGp1c3RtZW50cyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfT0VDTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FQ01BS0U8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwYXNzIGFueSBuZWVkZWQgY29uZmlndXJlIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSByZWNpcGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3RoZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgc291cmNlIGZpbGVzIGRvIG5vdCBoYXZlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25maWd1cmUuYWM8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNNYWtlTGlzdHMudHh0PC9maWxlbmFtZT4gZmlsZSwgdGhlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpcyBidWlsdCB1c2luZyBzb21lIG1ldGhvZCBvdGhlciB0aGFuIEF1dG90b29scworICAgICAgICAgICAgICAgICAgICAgICAgb3IgQ01ha2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCB5b3Ugbm9ybWFsbHkgbmVlZCB0byBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MsIG9mIGNvdXJzZSwgdGhlcmUgaXMgbm90aGluZyB0byBjb25maWd1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5FdmVuIGlmIHlvdXIgc29mdHdhcmUgaXMgbm90IGJlaW5nIGJ1aWx0IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBBdXRvdG9vbHMgb3IgQ01ha2UsIHlvdSBzdGlsbCBtaWdodCBub3QgbmVlZCB0byBkZWFsCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBjb25maWd1cmF0aW9uIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRldGVybWluZSBpZiBjb25maWd1cmF0aW9uIGlzIGV2ZW4gYSByZXF1aXJlZCBzdGVwLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IG5lZWQgdG8gbW9kaWZ5IGEgTWFrZWZpbGUgb3Igc29tZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIHRoZSBidWlsZCB0byBzcGVjaWZ5IG5lY2Vzc2FyeSBidWlsZCBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgT3IsIHBlcmhhcHMgeW91IG1pZ2h0IG5lZWQgdG8gcnVuIGEgcHJvdmlkZWQsIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciB0aGUgY2FzZSBpbnZvbHZpbmcgYSBjdXN0b20gY29uZmlndXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQsIHlvdSB3b3VsZCBydW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZSAtLWhlbHA8L2ZpbGVuYW1lPiBhbmQgbG9vayBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvcHRpb25zIHlvdSBuZWVkIHRvIHNldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBjb25maWd1cmF0aW9uIHN1Y2NlZWRzLCBpdCBpcyBhbHdheXMgZ29vZCBwcmFjdGljZSB0bworICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhlIDxmaWxlbmFtZT5sb2cuZG9fY29uZmlndXJlPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgICAgIGVuc3VyZSB0aGF0IHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGhhdmUgYmVlbiBlbmFibGVkIGFuZCBubworICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjb25maWd1cmUgc2NyaXB0IHJlcG9ydHMgdGhhdCBpdCBmb3VuZAorICAgICAgICAgICAgICAgIHNvbWV0aGluZyBub3QgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgdGhhdCBpdCBkaWQgbm90IGZpbmQgc29tZXRoaW5nIHRoYXQgaXQgbmVlZGVkIGZvciBzb21lCisgICAgICAgICAgICAgICAgZGVzaXJlZCBvcHRpb25hbCBmdW5jdGlvbmFsaXR5LCB0aGVuIHlvdSB3b3VsZCBuZWVkIHRvIGFkZAorICAgICAgICAgICAgICAgIHRob3NlIHRvIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgbG9nIG1pZ2h0IGFsc28gcmV2ZWFsIGl0ZW1zIGJlaW5nIGNoZWNrZWQgZm9yLAorICAgICAgICAgICAgICAgIGVuYWJsZWQsIG9yIGJvdGggdGhhdCB5b3UgZG8gbm90IHdhbnQsIG9yIGl0ZW1zIG5vdCBiZWluZyBmb3VuZAorICAgICAgICAgICAgICAgIHRoYXQgYXJlIGluIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4sIGluIHdoaWNoIGNhc2UKKyAgICAgICAgICAgICAgICB5b3Ugd291bGQgbmVlZCB0byBsb29rIGF0IHBhc3NpbmcgZXh0cmEgb3B0aW9ucyB0byB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0IGFzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmljIHRvIHRoZQorICAgICAgICAgICAgICAgIHNvZnR3YXJlIHlvdSBhcmUgYnVpbGRpbmcsIHlvdSBjYW4gY29uc3VsdCB0aGUgb3V0cHV0IG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kIHdpdGhpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gb3IgY29uc3VsdCB0aGUgc29mdHdhcmUncyB1cHN0cmVhbQorICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1jb21waWxhdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+Q29tcGlsYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgYSBidWlsZCwgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFzaworICAgICAgICAgICAgICAgIGhhcHBlbnMgYWZ0ZXIgc291cmNlIGlzIGZldGNoZWQsIHVucGFja2VkLCBhbmQgY29uZmlndXJlZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgcmVjaXBlIHBhc3NlcyB0aHJvdWdoIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHksIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9uZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIGNvbXBpbGUgc3RlcCBmYWlscywgeW91IG5lZWQgdG8gZGlhZ25vc2UgdGhlCisgICAgICAgICAgICAgICAgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGNvbW1vbiBpc3N1ZXMgdGhhdCBjYXVzZSBmYWlsdXJlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhcmFsbGVsIGJ1aWxkIGZhaWx1cmVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBmYWlsdXJlcyBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGludGVybWl0dGVudAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCBvciBlcnJvcnMgcmVwb3J0aW5nIHRoYXQgYSBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBieSBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBmYWlsdXJlIGNhbiBvY2N1ciBldmVuIGlmLCB1cG9uIGluc3BlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZSBvciBkaXJlY3RvcnkgZG9lcyBleGlzdCBhZnRlciB0aGUgYnVpbGQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQsIGJlY2F1c2UgdGhhdCBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGhhcHBlbmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgd3Jvbmcgb3JkZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZml4IHRoZSBwcm9ibGVtLCB5b3UgbmVlZCB0byBlaXRoZXIgc2F0aXNmeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1pc3NpbmcgZGVwZW5kZW5jeSBpbiB0aGUgTWFrZWZpbGUgb3Igd2hhdGV2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBwcm9kdWNlZCB0aGUgTWFrZWZpbGUsIG9yIChhcyBhIHdvcmthcm91bmQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFuIGVtcHR5IHN0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFSQUxMRUxfTUFLRSA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHBhcmFsbGVsIE1ha2VmaWxlIGlzc3Vlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+RGVidWdnaW5nIFBhcmFsbGVsIE1ha2UgUmFjZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW1wcm9wZXIgaG9zdCBwYXRoIHVzYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZhaWx1cmUgYXBwbGllcyB0byByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gb25seS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYWlsdXJlIG9jY3VycyB3aGVuIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvcGVyIGhlYWRlcnMsIGxpYnJhcmllcywgb3Igb3RoZXIgZmlsZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Qgc3lzdGVtIHdoZW4gY3Jvc3MtY29tcGlsaW5nIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZml4IHRoZSBwcm9ibGVtLCBleGFtaW5lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvZy5kb19jb21waWxlPC9maWxlbmFtZT4gZmlsZSB0byBpZGVudGlmeQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGhvc3QgcGF0aHMgYmVpbmcgdXNlZCAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvaW5jbHVkZTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciBhZGQgY29uZmlndXJlIG9wdGlvbnMsIGFwcGx5IGEgcGF0Y2gsIG9yIGRvIGJvdGguCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GYWlsdXJlIHRvIGZpbmQgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcy9oZWFkZXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeSBpcyBtaXNzaW5nIGJlY2F1c2UgaXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBkZWNsYXJlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGJlY2F1c2UgdGhlIGRlcGVuZGVuY3kgZXhpc3RzIGJ1dCB0aGUgcGF0aCB1c2VkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2VzcyB0byBmaW5kIHRoZSBmaWxlIGlzIGluY29ycmVjdCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc3RlcCBkaWQgbm90IGRldGVjdCBpdCwgdGhlIGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzIGNvdWxkIGZhaWwuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZWl0aGVyIG9mIHRoZXNlIGZhaWx1cmVzLCB0aGUgY29tcGlsYXRpb24gcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXMgdGhhdCBmaWxlcyBjb3VsZCBub3QgYmUgZm91bmQuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGVzZSBjYXNlcywgeW91IG5lZWQgdG8gZ28gYmFjayBhbmQgYWRkIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXMgd2VsbCBhcyBwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGFkZGl0aW9uYWwgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+T2NjYXNpb25hbGx5LCBpdCBpcyBuZWNlc3NhcnkgdG8gYXBwbHkgYSBwYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSB0byBlbnN1cmUgdGhlIGNvcnJlY3QgcGF0aHMgYXJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHBhdGhzIHRvIGZpbmQgZmlsZXMgc3RhZ2VkCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBzeXNyb290IGZyb20gb3RoZXIgcmVjaXBlcywgdXNlIHRoZSB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1RBR0lOR19CSU5ESVI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0lOQ0RJUjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNUQUdJTkdfREFUQURJUjwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorPCEtLQorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0JJTkRJUic+PGZpbGVuYW1lPlNUQUdJTkdfQklORElSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0lOQ0RJUic+PGZpbGVuYW1lPlNUQUdJTkdfSU5DRElSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0RBVEFESVInPjxmaWxlbmFtZT5TVEFHSU5HX0RBVEFESVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKy0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1pbnN0YWxsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRHVyaW5nIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4sIHRoZSB0YXNrIGNvcGllcyB0aGUKKyAgICAgICAgICAgICAgICBidWlsdCBmaWxlcyBhbG9uZyB3aXRoIHRoZWlyIGhpZXJhcmNoeSB0byBsb2NhdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgIHdvdWxkIG1pcnJvciB0aGVpciBsb2NhdGlvbnMgb24gdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgVGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIGNvcGllcyBmaWxlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHN0cnVjdHVyZSBhcyBpdCBzaG91bGQgYXBwZWFyIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhvdyB5b3VyIHNvZnR3YXJlIGlzIGJ1aWx0IGFmZmVjdHMgd2hhdCB5b3UgbXVzdCBkbyB0byBiZQorICAgICAgICAgICAgICAgIHN1cmUgeW91ciBzb2Z0d2FyZSBpcyBpbnN0YWxsZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgd2hhdCB5b3UgbXVzdCBkbyBmb3IgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZQorICAgICAgICAgICAgICAgIGJlaW5nIGJ1aWx0OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXV0b3Rvb2xzIGFuZCBDTWFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIHlvdXIgcmVjaXBlIGlzIGJ1aWxkaW5nIHVzZXMgQXV0b3Rvb2xzCisgICAgICAgICAgICAgICAgICAgICAgICBvciBDTWFrZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHVuZGVyc3RhbmRzIGhvdyB0byBpbnN0YWxsIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IGRvIG5vdCBoYXZlIHRvIGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGFzIHBhcnQgb2YgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGluc3RhbGwgcG9ydGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGNvbXBsZXRlcyB3aXRoIG5vIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSB3aXNoIHRvIGluc3RhbGwgYWRkaXRpb25hbCBmaWxlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgYmVpbmcgaW5zdGFsbGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4sIHlvdSBzaG91bGQgZG8gdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgYSA8ZmlsZW5hbWU+ZG9faW5zdGFsbF9hcHBlbmQ8L2ZpbGVuYW1lPiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGluc3RhbGwgY29tbWFuZCBhcyBkZXNjcmliZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiTWFudWFsIiBidWxsZXRlZCBpdGVtIGxhdGVyIGluIHRoaXMgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk90aGVyICh1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+KTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZGVmaW5lIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gZnVuY3Rpb24gaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VfcnVubWFrZSBpbnN0YWxsPC9maWxlbmFtZT4gYW5kIHdpbGwgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIHBhc3MgaW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93IHlvdSBwYXNzIHRoYXQgcGF0aCBpcyBkZXBlbmRlbnQgb24gaG93IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gYmVpbmcgcnVuIGlzIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5ERVNURElSPSR7RH08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGSVg9JHtEfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOU1RBTExST09UPSR7RH08L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBhbiBleGFtcGxlIHJlY2lwZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1tYWtlZmlsZS1iYXNlZC1wYWNrYWdlJz5NYWtlZmlsZS1CYXNlZCBQYWNrYWdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFudWFsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBkZWZpbmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBmdW5jdGlvbiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gbXVzdCBmaXJzdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnN0YWxsIC1kPC9maWxlbmFtZT4gdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBkaXJlY3RvcmllcyBleGlzdCwgeW91ciBmdW5jdGlvbiBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5zdGFsbDwvZmlsZW5hbWU+IHRvIG1hbnVhbGx5IGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdCBzb2Z0d2FyZSBpbnRvIHRoZSBkaXJlY3Rvcmllcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluc3RhbGw8L2ZpbGVuYW1lPiBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy9tYW51YWwvaHRtbF9ub2RlL2luc3RhbGwtaW52b2NhdGlvbi5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIHNjZW5hcmlvcyB0aGF0IGRvIG5vdCB1c2UgQXV0b3Rvb2xzIG9yCisgICAgICAgICAgICAgICAgQ01ha2UsIHlvdSBuZWVkIHRvIHRyYWNrIHRoZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICBhbmQgZGlhZ25vc2UgYW5kIGZpeCBhbnkgaXNzdWVzIHVudGlsIGV2ZXJ5dGhpbmcgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gbG9vayBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4sIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7V09SS0RJUn0vaW1hZ2U8L2ZpbGVuYW1lPiwgdG8gYmUgc3VyZSB5b3VyCisgICAgICAgICAgICAgICAgZmlsZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcywgeW91IG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeSBzb21lIG9mIHRoZSBpbnN0YWxsZWQgZmlsZXMgdG8gc3VpdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IG5lZWQgdG8gcmVwbGFjZSBoYXJkLWNvZGVkIHBhdGhzCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBhbiBpbml0c2NyaXB0IHdpdGggdmFsdWVzIG9mIHZhcmlhYmxlcyBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSwgc3VjaCBhcyByZXBsYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2Jpbi88L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gcGVyZm9ybSBzdWNoIG1vZGlmaWNhdGlvbnMgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+LCBiZSBzdXJlIHRvIG1vZGlmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGZpbGUgYWZ0ZXIgY29weWluZyByYXRoZXIgdGhhbiBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZnlpbmcgYWZ0ZXIgY29weWluZyBlbnN1cmVzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuIHJlLWV4ZWN1dGUgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiBpZgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZV9ydW5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiwgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBydW4gZGlyZWN0bHkgb3IgY2FuIGJlIHJ1biBpbmRpcmVjdGx5IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1jbWFrZSc+PGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NlcywgcnVucyA8ZmlsZW5hbWU+bWFrZSBpbnN0YWxsPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsLgorICAgICAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzLCBhIE1ha2VmaWxlIGNhbiBoYXZlIG1pc3NpbmcgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIHRhcmdldHMgdGhhdCBjYW4gcmVzdWx0IGluIHJhY2UgY29uZGl0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBleHBlcmllbmNlIGludGVybWl0dGVudCBmYWlsdXJlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4sIHlvdSBtaWdodCBiZSBhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrIGFyb3VuZCB0aGVtIGJ5IGRpc2FibGluZyBwYXJhbGxlbCBNYWtlZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbHMgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFSQUxMRUxfTUFLRUlOU1QnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFSU5TVDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1lbmFibGluZy1zeXN0ZW0tc2VydmljZXMnPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFN5c3RlbSBTZXJ2aWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzZXJ2aWNlLCB3aGljaCBpcyBhIHByb2Nlc3MgdGhhdAorICAgICAgICAgICAgICAgIHVzdWFsbHkgc3RhcnRzIG9uIGJvb3QgYW5kIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQsIHRoZW4KKyAgICAgICAgICAgICAgICB5b3UgbXVzdCBpbmNsdWRlIHNvbWUgYWRkaXRpb25hbCBkZWZpbml0aW9ucyBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhZGRpbmcgc2VydmljZXMgYW5kIHRoZSBzZXJ2aWNlIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICAgICAgc2NyaXB0IG9yIHRoZSBzZXJ2aWNlIGZpbGUgaXRzZWxmIGlzIG5vdCBpbnN0YWxsZWQsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgcHJvdmlkZSBmb3IgdGhhdCBpbnN0YWxsYXRpb24gaW4geW91ciByZWNpcGUgdXNpbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIElmIHlvdXIgcmVjaXBlIGFscmVhZHkgaGFzIGEgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCB1cGRhdGUgdGhlIGZ1bmN0aW9uIG5lYXIgaXRzIGVuZCByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgIGFkZGluZyBhbiBhZGRpdGlvbmFsIDxmaWxlbmFtZT5kb19pbnN0YWxsX2FwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnVuY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSB0aGUgaW5zdGFsbGF0aW9uIGZvciB5b3VyIHNlcnZpY2VzLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGFjY29tcGxpc2ggd2hhdCBpcyBub3JtYWxseSBkb25lIGJ5CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBtYWtlIHN1cmUgeW91ciBpbnN0YWxsYXRpb24gYXJyYW5nZXMgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgIHNpbWlsYXIgdG8gaG93IGl0IGlzIGFycmFuZ2VkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBzdXBwb3J0IGZvciBzdGFydGluZworICAgICAgICAgICAgICAgIHNlcnZpY2VzIHR3byBkaWZmZXJlbnQgd2F5czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN5c1Zpbml0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTeXNWaW5pdCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXMgdGhlIGluaXQgc3lzdGVtIHVzZWQgdG8gY29udHJvbCB0aGUgdmVyeSBiYXNpYworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zIG9mIHlvdXIgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluaXQgcHJvZ3JhbSBpcyB0aGUgZmlyc3QgcHJvZ3JhbQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBieSB0aGUgTGludXgga2VybmVsIHdoZW4gdGhlIHN5c3RlbSBib290cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluaXQgdGhlbiBjb250cm9scyB0aGUgc3RhcnR1cCwgcnVubmluZyBhbmQgc2h1dGRvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIGFsbCBvdGhlciBwcm9ncmFtcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UbyBlbmFibGUgYSBzZXJ2aWNlIHVzaW5nIFN5c1Zpbml0LCB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz48ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjbGFzcyBoZWxwcyBmYWNpbGl0YXRlIHNhZmVseSBpbnN0YWxsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBvbiB0aGUgdGFyZ2V0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOSVRTQ1JJUFRfUEFDS0FHRVMnPjxmaWxlbmFtZT5JTklUU0NSSVBUX1BBQ0tBR0VTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTklUU0NSSVBUX05BTUUnPjxmaWxlbmFtZT5JTklUU0NSSVBUX05BTUU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU5JVFNDUklQVF9QQVJBTVMnPjxmaWxlbmFtZT5JTklUU0NSSVBUX1BBUkFNUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3aXRoaW4geW91ciByZWNpcGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3lzdGVtZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtIE1hbmFnZW1lbnQgRGFlbW9uIChzeXN0ZW1kKSB3YXMgZGVzaWduZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgU3lzVmluaXQgYW5kIHRvIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuaGFuY2VkIG1hbmFnZW1lbnQgb2Ygc2VydmljZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzeXN0ZW1kLCBzZWUgdGhlIHN5c3RlbWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVwYWdlIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZC8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG8gZW5hYmxlIGEgc2VydmljZSB1c2luZyBzeXN0ZW1kLCB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLXN5c3RlbWQnPjxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5zeXN0ZW1kLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1yZWNpcGUtcGFja2FnaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTdWNjZXNzZnVsIHBhY2thZ2luZyBpcyBhIGNvbWJpbmF0aW9uIG9mIGF1dG9tYXRlZCBwcm9jZXNzZXMKKyAgICAgICAgICAgICAgICBwZXJmb3JtZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYW5kIHNvbWUKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBzdGVwcyB5b3UgbmVlZCB0byB0YWtlLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgdGhlIHByb2Nlc3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGxpdHRpbmcgRmlsZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+IHRhc2sgc3BsaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgcHJvZHVjZWQgYnkgdGhlIHJlY2lwZSBpbnRvIGxvZ2ljYWwgY29tcG9uZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW4gc29mdHdhcmUgdGhhdCBwcm9kdWNlcyBhIHNpbmdsZSBiaW5hcnkgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGhhdmUgZGVidWcgc3ltYm9scywgZG9jdW1lbnRhdGlvbiwgYW5kIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgc3BsaXQgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzayBlbnN1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGZpbGVzIGFyZSBzcGxpdCB1cCBhbmQgcGFja2FnZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UnVubmluZyBRQSBDaGVja3M8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYWRkcyBhIHN0ZXAgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBzbyB0aGF0IG91dHB1dCBxdWFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICBhc3N1cmFuY2UgY2hlY2tzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzdGVwIHBlcmZvcm1zIGEgcmFuZ2Ugb2YgY2hlY2tzIHRvIGJlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCdzIG91dHB1dCBpcyBmcmVlIG9mIGNvbW1vbiBwcm9ibGVtcyB0aGF0IHNob3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwIGR1cmluZyBydW50aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIGNoZWNrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1xYS1jaGVja3MnPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5IYW5kLUNoZWNraW5nIFlvdXIgUGFja2FnZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBidWlsZCB5b3VyIHNvZnR3YXJlLCB5b3UgbmVlZCB0byBiZSBzdXJlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHBhY2thZ2VzIGFyZSBjb3JyZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgRXhhbWluZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59L3BhY2thZ2VzLXNwbGl0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgbWFrZSBzdXJlIGZpbGVzIGFyZSB3aGVyZSB5b3UgZXhwZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVtIHRvIGJlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpc2NvdmVyIHByb2JsZW1zLCB5b3UgY2FuIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGwoX2FwcGVuZCk8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGxpdHRpbmcgYW4gQXBwbGljYXRpb24gaW50byBNdWx0aXBsZSBQYWNrYWdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gc3BsaXQgYW4gYXBwbGljYXRpb24gaW50byBzZXZlcmFsCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NwbGl0dGluZy1hbi1hcHBsaWNhdGlvbi1pbnRvLW11bHRpcGxlLXBhY2thZ2VzJz5TcGxpdHRpbmcgYW4gQXBwbGljYXRpb24gaW50byBNdWx0aXBsZSBQYWNrYWdlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbGluZyBhIFBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gaW5zdGFsbCBhCisgICAgICAgICAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSduZXctcmVjaXBlLXBvc3QtaW5zdGFsbGF0aW9uLXNjcmlwdHMnPlBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hcmtpbmcgUGFja2FnZSBBcmNoaXRlY3R1cmU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB3aGF0IHlvdXIgcmVjaXBlIGlzIGJ1aWxkaW5nIGFuZCBob3cgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvbmZpZ3VyZWQsIGl0IG1pZ2h0IGJlIGltcG9ydGFudCB0byBtYXJrIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgcHJvZHVjZWQgYXMgYmVpbmcgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCBvciB0byBtYXJrIHRoZW0gYXMgbm90IGJlaW5nIHNwZWNpZmljIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBhcmNoaXRlY3R1cmUgYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgcGFja2FnZXMgcHJvZHVjZWQgZm9yIHRoZSB0YXJnZXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZWQgYXMgYmVpbmcgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lIGJlY2F1c2UgdGhhdCBpcyB1c3VhbGx5IHRoZSBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB0aGUgcmVjaXBlIGNvbmZpZ3VyZXMgdGhlIHNvZnR3YXJlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdCBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IG1hY2hpbmUgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyBwYXNzZWQgaW50byB0aGUgY29uZmlndXJlIHNjcmlwdCBvciBhIHBhdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBhcHBsaWVkIG9ubHkgZm9yIGEgcGFydGljdWxhciBtYWNoaW5lKSwgdGhlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBtYXJrIHRoZSBwYWNrYWdlcyBwcm9kdWNlZCBhcyBiZWluZworICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIHByb2R1Y2VzIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGRvIG5vdCBjb250YWluIGFueXRoaW5nIHNwZWNpZmljIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgb3IgYXJjaGl0ZWN0dXJlIGF0IGFsbCAoZS5nLiByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNpbXBseSBwYWNrYWdlIHNjcmlwdCBmaWxlcyBvciBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyksIHlvdSBzaG91bGQgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYWxsYXJjaCc+PGZpbGVuYW1lPmFsbGFyY2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyB0byBkbyB0aGlzIGZvciB5b3UgYnkgYWRkaW5nIHRoaXMgdG8geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGFsbGFyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyaW5nIHRoYXQgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGlzIGNvcnJlY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjcml0aWNhbCB3aGlsZSB5b3UgYXJlIGRvaW5nIHRoZSBmaXJzdCBmZXcgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICBvZiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGltcG9ydGFudCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5zdXJlIHRoYXQgeW91ciByZWNpcGUgcmVidWlsZHMgKG9yIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICByZWJ1aWxkKSBhcHByb3ByaWF0ZWx5IGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGFuZCB0byBlbnN1cmUgdGhhdCB5b3UgZ2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgcGFja2FnZXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXJseSBpZiB5b3UgcnVuIHNlcGFyYXRlIGJ1aWxkcyBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm9wZXJseS12ZXJzaW9uaW5nLXByZS1yZWxlYXNlLXJlY2lwZXMnPgorICAgICAgICAgICAgPHRpdGxlPlByb3Blcmx5IFZlcnNpb25pbmcgUHJlLVJlbGVhc2UgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgbmFtZSBvZiBhIHJlY2lwZSBjYW4gbGVhZCB0byB2ZXJzaW9uaW5nCisgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2hlbiB0aGUgcmVjaXBlIGlzIHVwZ3JhZGVkIHRvIGEgZmluYWwgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmlyc3NpXzAuOC4xNi1yYzEuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZmlsZSBpbgorICAgICAgICAgICAgICAgIHRoZSBsaXN0IG9mIGV4YW1wbGUgcmVjaXBlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbmV3LXJlY2lwZS1zdG9yaW5nLWFuZC1uYW1pbmctdGhlLXJlY2lwZSc+U3RvcmluZyBhbmQgTmFtaW5nIHRoZSBSZWNpcGU8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgYXQgYSByZWxlYXNlIGNhbmRpZGF0ZSBzdGFnZSAoaS5lLgorICAgICAgICAgICAgICAgICJyYzEiKS4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSByZWNpcGUgaXMgcmVsZWFzZWQsIHRoZSByZWNpcGUgZmlsZW5hbWUgYmVjb21lcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pcnNzaV8wLjguMTYuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBjaGFuZ2UgZnJvbSA8ZmlsZW5hbWU+MC44LjE2LXJjMTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPjAuOC4xNjwvZmlsZW5hbWU+IGlzIHNlZW4gYXMgYSBkZWNyZWFzZSBieSB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYW5kIHBhY2thZ2UgbWFuYWdlcnMsIHNvIHRoZSByZXN1bHRpbmcgcGFja2FnZXMKKyAgICAgICAgICAgICAgICB3aWxsIG5vdCBjb3JyZWN0bHkgdHJpZ2dlciBhbiB1cGdyYWRlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBlbnN1cmUgdGhlIHZlcnNpb25zIGNvbXBhcmUgcHJvcGVybHksIHRoZQorICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkIGNvbnZlbnRpb24gaXMgdG8gc2V0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICAiPHJlcGxhY2VhYmxlPnByZXZpb3VzX3ZlcnNpb248L3JlcGxhY2VhYmxlPis8cmVwbGFjZWFibGU+Y3VycmVudF92ZXJzaW9uPC9yZXBsYWNlYWJsZT4iLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFuIGFkZGl0aW9uYWwgdmFyaWFibGUgc28gdGhhdCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IHZlcnNpb24gZWxzZXdoZXJlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJFQUxQViA9ICIwLjguMTYtcmMxIgorICAgICBQViA9ICIwLjguMTUrJHtSRUFMUFZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXBvc3QtaW5zdGFsbGF0aW9uLXNjcmlwdHMnPgorICAgICAgICAgICAgPHRpdGxlPlBvc3QtSW5zdGFsbGF0aW9uIFNjcmlwdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIHJ1biBpbW1lZGlhdGVseSBhZnRlciBpbnN0YWxsaW5nCisgICAgICAgICAgICAgICAgYSBwYWNrYWdlIG9uIHRoZSB0YXJnZXQgb3IgZHVyaW5nIGltYWdlIGNyZWF0aW9uIHdoZW4gYQorICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgaW5jbHVkZWQgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgVG8gYWRkIGEgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0IHRvIGEgcGFja2FnZSwgYWRkIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0X1BBQ0tBR0VOQU1FKCk8L2ZpbGVuYW1lPiBmdW5jdGlvbiB0bworICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBhbmQgcmVwbGFjZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFTkFNRTwvZmlsZW5hbWU+IHdpdGggdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBhdHRhY2ggdG8gdGhlIDxmaWxlbmFtZT5wb3N0aW5zdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0LgorICAgICAgICAgICAgICAgIFRvIGFwcGx5IHRoZSBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHQgdG8gdGhlIG1haW4gcGFja2FnZQorICAgICAgICAgICAgICAgIGZvciB0aGUgcmVjaXBlLCB3aGljaCBpcyB1c3VhbGx5IHdoYXQgaXMgcmVxdWlyZWQsIHNwZWNpZnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiBwbGFjZSBvZiA8ZmlsZW5hbWU+UEFDS0FHRU5BTUU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBwb3N0LWluc3RhbGxhdGlvbiBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwa2dfcG9zdGluc3RfUEFDS0FHRU5BTUUoKSB7CisgICAgICMgQ29tbWFuZHMgdG8gY2Fycnkgb3V0CisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgZGVmaW5lZCBpbiB0aGUgcG9zdC1pbnN0YWxsYXRpb24gZnVuY3Rpb24gaXMKKyAgICAgICAgICAgICAgICBjYWxsZWQgd2hlbiB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgSWYgdGhlIHNjcmlwdCBzdWNjZWVkcywgdGhlIHBhY2thZ2UgaXMgbWFya2VkIGFzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICBJZiB0aGUgc2NyaXB0IGZhaWxzLCB0aGUgcGFja2FnZSBpcyBtYXJrZWQgYXMgdW5wYWNrZWQgYW5kCisgICAgICAgICAgICAgICAgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCB3aGVuIHRoZSBpbWFnZSBib290cyBhZ2Fpbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGV4ZWN1dGlvbiBvZiBhCisgICAgICAgICAgICAgICAgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0IHRvIGJlIGRlbGF5ZWQgdW50aWwgdGhlIGZpcnN0IGJvb3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgbWlnaHQgbmVlZCB0byBiZSBleGVjdXRlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICBkZXZpY2UgaXRzZWxmLgorICAgICAgICAgICAgICAgIFRvIGRlbGF5IHNjcmlwdCBleGVjdXRpb24gdW50aWwgYm9vdCB0aW1lLCB1c2UgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBpbiB0aGUgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGtnX3Bvc3RpbnN0X1BBQ0tBR0VOQU1FKCkgeworICAgICBpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKyAgICAgICAgICAjIEFjdGlvbnMgdG8gY2Fycnkgb3V0IG9uIHRoZSBkZXZpY2UgZ28gaGVyZQorICAgICBlbHNlCisgICAgICAgICAgZXhpdCAxCisgICAgIGZpCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGRlbGF5cyBleGVjdXRpb24gdW50aWwgdGhlIGltYWdlIGJvb3RzCisgICAgICAgICAgICAgICAgYWdhaW4gYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGltYWdlIHdoZW4KKyAgICAgICAgICAgICAgICB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQgYXQgYnVpbGQgdGltZSBidXQgaXMgdW5zZXQKKyAgICAgICAgICAgICAgICB3aGVuIGV4ZWN1dGVkIG9uIHRoZSBmaXJzdCBib290LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBFcXVpdmFsZW50IHN1cHBvcnQgZm9yIHByZS1pbnN0YWxsLCBwcmUtdW5pbnN0YWxsLCBhbmQKKyAgICAgICAgICAgICAgICBwb3N0LXVuaW5zdGFsbCBzY3JpcHRzIGV4aXN0IGJ5IHdheSBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlaW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlcm08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0cm08L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwcyB3b3JrIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGRvZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4gd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhleQorICAgICAgICAgICAgICAgIHJ1biBhdCBkaWZmZXJlbnQgdGltZXMuCisgICAgICAgICAgICAgICAgQWxzbywgYmVjYXVzZSBvZiB3aGVuIHRoZXkgcnVuLCB0aGV5IGFyZSBub3QgYXBwbGljYWJsZSB0bworICAgICAgICAgICAgICAgIGJlaW5nIHJ1biBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lIGxpa2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS10ZXN0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5UZXN0aW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0ZXAgZm9yIGNvbXBsZXRpbmcgeW91ciByZWNpcGUgaXMgdG8gYmUgc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIHlvdSBidWlsdCBydW5zIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICBUbyBhY2NvbXBsaXNoIHJ1bnRpbWUgdGVzdGluZywgYWRkIHRoZSBidWlsZCdzIG91dHB1dAorICAgICAgICAgICAgICAgIHBhY2thZ2VzIHRvIHlvdXIgaW1hZ2UgYW5kIHRlc3QgdGhlbSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGJ5IGFkZGluZworICAgICAgICAgICAgICAgIHNwZWNpZmljIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UnPkN1c3RvbWl6aW5nIEltYWdlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLXRlc3RpbmctZXhhbXBsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaGVscCBzdW1tYXJpemUgaG93IHRvIHdyaXRlIGEgcmVjaXBlLCB0aGlzIHNlY3Rpb24gcHJvdmlkZXMKKyAgICAgICAgICAgICAgICBzb21lIGV4YW1wbGVzIGdpdmVuIHZhcmlvdXMgc2NlbmFyaW9zOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWNpcGVzIHRoYXQgdXNlIGxvY2FsIGZpbGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2luZyBhbiBBdXRvdG9vbGVkIHBhY2thZ2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzaW5nIGEgTWFrZWZpbGUtYmFzZWQgcGFja2FnZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3BsaXR0aW5nIGFuIGFwcGxpY2F0aW9uIGludG8gbXVsdGlwbGUgcGFja2FnZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZGluZyBiaW5hcmllcyB0byBhbiBpbWFnZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbmV3LXJlY2lwZS1zaW5nbGUtYy1maWxlLXBhY2thZ2UtaGVsbG8td29ybGQnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TaW5nbGUgLmMgRmlsZSBQYWNrYWdlIChIZWxsbyBXb3JsZCEpPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBhbiBhcHBsaWNhdGlvbiBmcm9tIGEgc2luZ2xlIGZpbGUgdGhhdCBpcyBzdG9yZWQKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxseSAoZS5nLiB1bmRlciA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPikgcmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUgdGhhdCBoYXMgdGhlIGZpbGUgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBuZWVkIHRvIG1hbnVhbGx5IHdyaXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc291cmNlIGNvZGUsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSAtIHRoZSBkaXJlY3RvcnkgQml0QmFrZSB1c2VzIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1VNTUFSWSA9ICJTaW1wbGUgaGVsbG93b3JsZCBhcHBsaWNhdGlvbiIKKyAgICAgU0VDVElPTiA9ICJleGFtcGxlcyIKKyAgICAgTElDRU5TRSA9ICJNSVQiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCisgICAgIFNSQ19VUkkgPSAiZmlsZTovL2hlbGxvd29ybGQuYyIKKworICAgICBTID0gIiR7V09SS0RJUn0iCisKKyAgICAgZG9fY29tcGlsZSgpIHsKKyAgICAgCSR7Q0N9IGhlbGxvd29ybGQuYyAtbyBoZWxsb3dvcmxkCisgICAgIH0KKworICAgICBkb19pbnN0YWxsKCkgeworICAgICAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgIAlpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9CisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmhlbGxvd29ybGQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmhlbGxvd29ybGQtZGJnPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGVsbG93b3JsZC1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcyBhcmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3VzdG9taXplIHRoZSBwYWNrYWdpbmcgcHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3BsaXR0aW5nLWFuLWFwcGxpY2F0aW9uLWludG8tbXVsdGlwbGUtcGFja2FnZXMnPlNwbGl0dGluZyBhbiBBcHBsaWNhdGlvbiBpbnRvIE11bHRpcGxlIFBhY2thZ2VzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkF1dG90b29sZWQgUGFja2FnZTwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9ucyB0aGF0IHVzZSBBdXRvdG9vbHMgc3VjaCBhcyA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlPC9maWxlbmFtZT4gcmVxdWlyZSBhIHJlY2lwZSB0aGF0IGhhcyBhIHNvdXJjZSBhcmNoaXZlIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPlNSQ19VUkk8L3VsaW5rPjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICBhbHNvIGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHdoaWNoIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiBhbGwgdGhlIHN0ZXBzCisgICAgICAgICAgICAgICAgICAgIG5lZWRlZCB0byBidWlsZCBhbiBBdXRvdG9vbC1iYXNlZCBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgYnVpbGQgaXMgYXV0b21hdGljYWxseSBwYWNrYWdlZC4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCBpZiB0aGUgYXBwbGljYXRpb24gdXNlcyBOTFMgZm9yIGxvY2FsaXphdGlvbiwgcGFja2FnZXMgd2l0aCBsb2NhbCBpbmZvcm1hdGlvbiBhcmUKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIChvbmUgcGFja2FnZSBwZXIgbGFuZ3VhZ2UpLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgb25lIGV4YW1wbGU6ICg8ZmlsZW5hbWU+aGVsbG9fMi4zLmJiPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1VNTUFSWSA9ICJHTlUgSGVsbG93b3JsZCBhcHBsaWNhdGlvbiIKKyAgICAgU0VDVElPTiA9ICJleGFtcGxlcyIKKyAgICAgTElDRU5TRSA9ICJHUEx2MisiCisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCisgICAgIFNSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9oZWxsby9oZWxsby0ke1BWfS50YXIuZ3oiCisKKyAgICAgaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNfRklMRVNfQ0hLU1VNJz5MSUNfRklMRVNfQ0hLU1VNPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIHRyYWNrIHNvdXJjZSBsaWNlbnNlIGNoYW5nZXMgYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdXNpbmdwb2t5LWNvbmZpZ3VyaW5nLUxJQ19GSUxFU19DSEtTVU0nPlRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvdWxpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHF1aWNrbHkgY3JlYXRlIEF1dG90b29sLWJhc2VkIHJlY2lwZXMgaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSduZXctcmVjaXBlLW1ha2VmaWxlLWJhc2VkLXBhY2thZ2UnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5NYWtlZmlsZS1CYXNlZCBQYWNrYWdlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbnMgdGhhdCB1c2UgR05VIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gYWxzbyByZXF1aXJlIGEgcmVjaXBlIHRoYXQgaGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgYXJjaGl2ZSBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz5TUkNfVVJJPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIGFkZCBhIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gc3RlcCBzaW5jZSBieSBkZWZhdWx0IEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRzIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gY29tcGlsZSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIGFkZGl0aW9uYWwgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBvcHRpb25zLCB5b3Ugc2hvdWxkIHN0b3JlIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfT0VNQUtFJz5FWFRSQV9PRU1BS0U8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHBhc3NlcyB0aGVzZSBvcHRpb25zIGludG8gdGhlIEdOVSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGludm9jYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBhIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpcyBzdGlsbCByZXF1aXJlZC4KKyAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBCaXRCYWtlIHJ1bnMgYW4gZW1wdHkgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBhcHBsaWNhdGlvbnMgbWlnaHQgcmVxdWlyZSBleHRyYSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgYXBwbGljYXRpb24gbWlnaHQgbmVlZCBhbiBhZGRpdGlvbmFsIGhlYWRlciBwYXRoLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBhZGRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ0ZMQUdTJz5DRkxBR1M8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgdGhpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfcHJlcGVuZCA9ICItSSAke1N9L2luY2x1ZGUgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCA8ZmlsZW5hbWU+bXRkLXV0aWxzPC9maWxlbmFtZT4gaXMgYSBtYWtlZmlsZS1iYXNlZCBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIG1lbW9yeSB0ZWNobm9sb2d5IGRldmljZXMiCisgICAgIFNFQ1RJT04gPSAiYmFzZSIKKyAgICAgREVQRU5EUyA9ICJ6bGliIGx6byBlMmZzcHJvZ3MgdXRpbC1saW51eCIKKyAgICAgSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8iCisgICAgIExJQ0VOU0UgPSAiR1BMdjIrIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKKyAgICAgIyBVc2UgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0IDI2IE9jdCwgMjAxMworICAgICBTUkNSRVYgPSAiOWYxMDcxMzJhNmEwNzNjY2UzNzQzNGNhOWNkYTY5MTdkZDhkODY2YiIKKyAgICAgU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IFwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2ggXAorICAgICAiCisKKyAgICAgUFYgPSAiMS41LjErZ2l0JHtTUkNQVn0iCisKKyAgICAgUyA9ICIke1dPUktESVJ9L2dpdC8iCisKKyAgICAgRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgJ1JBTkxJQj0ke1JBTkxJQn0nICdBUj0ke0FSfScgJ0NGTEFHUz0ke0NGTEFHU30gLUkke1N9L2luY2x1ZGUgLURXSVRIT1VUX1hBVFRSJyAnQlVJTERESVI9JHtTfSciCisKKyAgICAgZG9faW5zdGFsbCAoKSB7CisgICAgICAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KKyAgICAgfQorCisgICAgIFBBQ0tBR0VTID0rICJtdGQtdXRpbHMtamZmczIgbXRkLXV0aWxzLXViaWZzIG10ZC11dGlscy1taXNjIgorCisgICAgIEZJTEVTX210ZC11dGlscy1qZmZzMiA9ICIke3NiaW5kaXJ9L21rZnMuamZmczIgJHtzYmluZGlyfS9qZmZzMmR1bXAgJHtzYmluZGlyfS9qZmZzMnJlYWRlciAke3NiaW5kaXJ9L3N1bXRvb2wiCisgICAgIEZJTEVTX210ZC11dGlscy11YmlmcyA9ICIke3NiaW5kaXJ9L21rZnMudWJpZnMgJHtzYmluZGlyfS91YmkqIgorICAgICBGSUxFU19tdGQtdXRpbHMtbWlzYyA9ICIke3NiaW5kaXJ9L25mdGwqICR7c2JpbmRpcn0vZnRsKiAke3NiaW5kaXJ9L3JmZCogJHtzYmluZGlyfS9kb2MqICR7c2JpbmRpcn0vc2VydmVfaW1hZ2UgJHtzYmluZGlyfS9yZWN2X2ltYWdlIgorCisgICAgIFBBUkFMTEVMX01BS0UgPSAiIgorCisgICAgIEJCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc3BsaXR0aW5nLWFuLWFwcGxpY2F0aW9uLWludG8tbXVsdGlwbGUtcGFja2FnZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TcGxpdHRpbmcgYW4gQXBwbGljYXRpb24gaW50byBNdWx0aXBsZSBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz5QQUNLQUdFUzwvdWxpbms+PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVMnPkZJTEVTPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBzcGxpdCBhbiBhcHBsaWNhdGlvbiBpbnRvIG11bHRpcGxlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHVzZXMgdGhlIDxmaWxlbmFtZT5saWJ4cG08L2ZpbGVuYW1lPiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgcmVjaXBlIGdlbmVyYXRlcyBhIHNpbmdsZSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIGxpYnJhcnkgYWxvbmcKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGZldyBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBtb2RpZnkgdGhlIHJlY2lwZSB0byBzcGxpdCB0aGUgYmluYXJpZXMgaW50byBzZXBhcmF0ZSBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworICAgICBTVU1NQVJZID0gIlhwbTogWCBQaXhtYXAgZXh0ZW5zaW9uIGxpYnJhcnkiCisgICAgIExJQ0VOU0UgPSAiQlNEIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01MWY0MjcwYjAxMmVjZDRhYjFhMTY0ZjVmNGVkNmNmNyIKKyAgICAgREVQRU5EUyArPSAibGlieGV4dCBsaWJzbSBsaWJ4dCIKKyAgICAgUEUgPSAiMSIKKworICAgICBYT1JHX1BOID0gImxpYlhwbSIKKworICAgICBQQUNLQUdFUyA9KyAic3hwbSBjeHBtIgorICAgICBGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorICAgICBGSUxFU19zeHBtID0gIiR7YmluZGlyfS9zeHBtIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSB3YW50IHRvIHNoaXAgdGhlIDxmaWxlbmFtZT5zeHBtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5jeHBtPC9maWxlbmFtZT4gYmluYXJpZXMgaW4gc2VwYXJhdGUgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5iaW5kaXI8L2ZpbGVuYW1lPiB3b3VsZCBiZSBwYWNrYWdlZCBpbnRvIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPlBOPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGJ5IGRlZmF1bHQsIHdlIHByZXBlbmQgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNvIGFkZGl0aW9uYWwgcGFja2FnZSBuYW1lcyBhcmUgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVzdWx0cyBpbiB0aGUgZXh0cmEgPGZpbGVuYW1lPkZJTEVTXyo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdGhlbiBjb250YWluaW5nIGluZm9ybWF0aW9uIHRoYXQgZGVmaW5lIHdoaWNoIGZpbGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBnbyBpbnRvIHdoaWNoIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBGaWxlcyBpbmNsdWRlZCBieSBlYXJsaWVyIHBhY2thZ2VzIGFyZSBza2lwcGVkIGJ5IGxhdHRlciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIG1haW4gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBpbmNsdWRlIHRoZSBhYm92ZSBsaXN0ZWQgZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnaW5nLWV4dGVybmFsbHktcHJvZHVjZWQtYmluYXJpZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdpbmcgRXh0ZXJuYWxseSBQcm9kdWNlZCBCaW5hcmllczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzLCB5b3UgbmVlZCB0byBhZGQgcHJlLWNvbXBpbGVkIGJpbmFyaWVzIHRvIGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IGJpbmFyaWVzIGZvciBwcm9wcmlldGFyeSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGV4aXN0LCB3aGljaCBhcmUgY3JlYXRlZCBieSBhIHBhcnRpY3VsYXIgZGl2aXNpb24gb2YgYQorICAgICAgICAgICAgICAgICAgICBjb21wYW55LgorICAgICAgICAgICAgICAgICAgICBZb3VyIHBhcnQgb2YgdGhlIGNvbXBhbnkgbmVlZHMgdG8gdXNlIHRob3NlIGJpbmFyaWVzIGFzCisgICAgICAgICAgICAgICAgICAgIHBhcnQgb2YgYW4gaW1hZ2UgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBTaW5jZSB5b3Ugb25seSBoYXZlIHRoZSBiaW5hcmllcyBhbmQgbm90IHRoZSBzb3VyY2UgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbm5vdCB1c2UgYSB0eXBpY2FsIHJlY2lwZSB0aGF0IGV4cGVjdHMgdG8gZmV0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBjb21waWxlIGl0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmUgbWV0aG9kIGlzIHRvIHBhY2thZ2UgdGhlIGJpbmFyaWVzIGFuZCB0aGVuIGluc3RhbGwgdGhlbQorICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhbGx5LCBpdCBpcyBub3QgYSBnb29kIGlkZWEgdG8gcGFja2FnZSBiaW5hcmllcworICAgICAgICAgICAgICAgICAgICBzaW5jZSwgYW1vbmcgb3RoZXIgdGhpbmdzLCBpdCBjYW4gaGluZGVyIHRoZSBhYmlsaXR5IHRvCisgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjZSBidWlsZHMgYW5kIGNvdWxkIGxlYWQgdG8gY29tcGF0aWJpbGl0eSBwcm9ibGVtcworICAgICAgICAgICAgICAgICAgICB3aXRoIEFCSSBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBzb21ldGltZXMgeW91IGhhdmUgbm8gY2hvaWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCBzb2x1dGlvbiBpcyB0byBjcmVhdGUgYSByZWNpcGUgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1iaW4tcGFja2FnZSc+PGZpbGVuYW1lPmJpbl9wYWNrYWdlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgdG8gYmUgc3VyZSB0aGF0IHlvdSBhcmUgdXNpbmcgZGVmYXVsdCBsb2NhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICAgICAgSW4gbW9zdCBjYXNlcywgdGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgInNraXBwaW5nIiB0aGUgY29uZmlndXJlIGFuZCBjb21waWxlIHN0ZXBzIGFzIHdlbGwKKyAgICAgICAgICAgICAgICAgICAgYXMgc2V0cyB0aGluZ3MgdXAgdG8gZ3JhYiBwYWNrYWdlcyBmcm9tIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBhcmVhLgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGNsYXNzIHNldHMgPGZpbGVuYW1lPm5vZXhlYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9uIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2tzLCBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+IHRvICIvIiBzbyB0aGF0IGl0IHBpY2tzCisgICAgICAgICAgICAgICAgICAgIHVwIGFsbCBmaWxlcywgYW5kIHNldHMgdXAgYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2ssIHdoaWNoIGVmZmVjdGl2ZWx5IGNvcGllcyBhbGwgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTfTwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmluX3BhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcyB3b3JrcyB3ZWxsIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzIGV4dHJhY3RlZCBpbnRvIDxmaWxlbmFtZT4ke1N9PC9maWxlbmFtZT4gYXJlCisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgbGFpZCBvdXQgaW4gdGhlIHdheSB0aGV5IHNob3VsZCBiZSBsYWlkIG91dAorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZSB2YXJpYWJsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsJ3MgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZ2xvc3NhcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjYW4ndCB1c2UgdGhlIDxmaWxlbmFtZT5iaW5fcGFja2FnZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB5b3UgbmVlZCB0byBiZSBzdXJlIHlvdSBhcmUgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSByZWNpcGUgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4gdGFza3MgZG8gbm90aGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisgICAgIGRvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIG1ha2UgdGhlc2UgdGFza3MgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBpbnN0YWxscyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcmllcyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGF0IHlvdSBzZXQgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiAodXN1YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfTwvZmlsZW5hbWU+KSB0byBwb2ludCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyB5b3UgaGF2ZSBpbnN0YWxsZWQsIHdoaWNoIG9mIGNvdXJzZSBkZXBlbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gd2hlcmUgeW91IGhhdmUgaW5zdGFsbGVkIHRoZW0gYW5kIHdoZXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9zZSBmaWxlcyBhcmUgaW4gZGlmZmVyZW50IGxvY2F0aW9ucyB0aGFuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lIj4KKyAgICAgICAgPHRpdGxlPkFkZGluZyBhIE5ldyBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFkZGluZyBhIG5ldyBtYWNoaW5lIHRvIHRoZSBZb2N0byBQcm9qZWN0IGlzIGEgc3RyYWlnaHRmb3J3YXJkCisgICAgICAgICAgICBwcm9jZXNzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gYWRkIG1hY2hpbmVzIHRoYXQgYXJlIHNpbWlsYXIKKyAgICAgICAgICAgIHRvIHRob3NlIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgYWxyZWFkeSBzdXBwb3J0cy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFsdGhvdWdoIHdlbGwgd2l0aGluIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICAgICAgYWRkaW5nIGEgdG90YWxseSBuZXcgYXJjaGl0ZWN0dXJlIG1pZ2h0IHJlcXVpcmUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIDxmaWxlbmFtZT5nY2MvZ2xpYmM8L2ZpbGVuYW1lPiBhbmQgdG8gdGhlIHNpdGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGEgY29tcGxldGUgZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBhZGQgYSBuZXcgbWFjaGluZSwKKyAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPkNyZWF0aW5nIGEgTmV3IEJTUCBMYXllciBVc2luZyB0aGUgeW9jdG8tYnNwIFNjcmlwdDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lLWNvbmZmaWxlIj4KKyAgICAgICAgICAgIDx0aXRsZT5BZGRpbmcgdGhlIE1hY2hpbmUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gYWRkIGEgbmV3IG1hY2hpbmUsIHlvdSBuZWVkIHRvIGFkZCBhIG5ldyBtYWNoaW5lCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRvIHRoZSBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm92aWRlcyBkZXRhaWxzIGFib3V0IHRoZSBkZXZpY2UKKyAgICAgICAgICAgICAgICB5b3UgYXJlIGFkZGluZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgcm9vdCBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlIHRvIHJlZmVyZW5jZSB0aGUgbmV3IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3Jvd25iYXkuY29uZjwvZmlsZW5hbWU+LCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcmVjb2duaXplcyB0aGUgbWFjaGluZSBhcyAiY3Jvd25iYXkiLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgbW9zdCBpbXBvcnRhbnQgdmFyaWFibGVzIHlvdSBtdXN0IHNldCBpbiB5b3VyIG1hY2hpbmUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgb3IgaW5jbHVkZSBmcm9tIGEgbG93ZXItbGV2ZWwgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEFSR0VUX0FSQ0gnPlRBUkdFVF9BUkNIPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gImFybSIpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSRUZFUlJFRF9QUk9WSURFUic+UFJFRkVSUkVEX1BST1ZJREVSPC91bGluaz5fdmlydHVhbC9rZXJuZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiYXBtIHNjcmVlbiB3aWZpIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGFsc28gbmVlZCB0aGVzZSB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0VSSUFMX0NPTlNPTEVTJz5TRVJJQUxfQ09OU09MRVM8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9JTUFHRVRZUEUnPktFUk5FTF9JTUFHRVRZUEU8L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiekltYWdlIik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRlNUWVBFUyc+SU1BR0VfRlNUWVBFUzwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJ0YXIuZ3ogamZmczIiKTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgZnVsbCBkZXRhaWxzIG9uIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGxldmVyYWdlIGV4aXN0aW5nIG1hY2hpbmUgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlcyBmcm9tIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lLWtlcm5lbCI+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgS2VybmVsIGZvciB0aGUgTWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG5lZWRzIHRvIGJlIGFibGUgdG8gYnVpbGQgYSBrZXJuZWwKKyAgICAgICAgICAgICAgICBmb3IgdGhlIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gZWl0aGVyIGNyZWF0ZSBhIG5ldyBrZXJuZWwgcmVjaXBlIGZvciB0aGlzIG1hY2hpbmUsCisgICAgICAgICAgICAgICAgb3IgZXh0ZW5kIGFuIGV4aXN0aW5nIGtlcm5lbCByZWNpcGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHNldmVyYWwga2VybmVsIHJlY2lwZSBleGFtcGxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5IGF0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRoYXQgeW91IGNhbiB1c2UgYXMgcmVmZXJlbmNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBjcmVhdGluZyBhIG5ldyBrZXJuZWwgcmVjaXBlLCBub3JtYWwgcmVjaXBlLXdyaXRpbmcKKyAgICAgICAgICAgICAgICBydWxlcyBhcHBseSBmb3Igc2V0dGluZyB1cCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz5TUkNfVVJJPC91bGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGFueSBuZWNlc3NhcnkgcGF0Y2hlcyBhbmQgc2V0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz5TPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRvIHBvaW50IGF0IHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjcmVhdGUgYSA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4gdGFzayB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJlcyB0aGUgdW5wYWNrZWQga2VybmVsIHdpdGggYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSB1c2luZyBhIDxmaWxlbmFtZT5tYWtlIGRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tbWFuZCBvciwgbW9yZSBjb21tb25seSwgYnkgY29weWluZyBpbiBhIHN1aXRhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4gcnVubmluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlIG9sZGNvbmZpZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEJ5IG1ha2luZyB1c2Ugb2YgPGZpbGVuYW1lPmluaGVyaXQga2VybmVsPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgcG90ZW50aWFsbHkgc29tZSBvZiB0aGUgPGZpbGVuYW1lPmxpbnV4LSouaW5jPC9maWxlbmFtZT4gZmlsZXMsCisgICAgICAgICAgICAgICAgbW9zdCBvdGhlciBmdW5jdGlvbmFsaXR5IGlzIGNlbnRyYWxpemVkIGFuZCB0aGUgZGVmYXVsdHMgb2YgdGhlCisgICAgICAgICAgICAgICAgY2xhc3Mgbm9ybWFsbHkgd29yayB3ZWxsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGV4dGVuZGluZyBhbiBleGlzdGluZyBrZXJuZWwgcmVjaXBlLCBpdCBpcyB1c3VhbGx5CisgICAgICAgICAgICAgICAgYSBtYXR0ZXIgb2YgYWRkaW5nIGEgc3VpdGFibGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlsZSBuZWVkcyB0byBiZSBhZGRlZCBpbnRvIGEgbG9jYXRpb24gc2ltaWxhciB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcyB1c2VkIGZvciBvdGhlciBtYWNoaW5lcworICAgICAgICAgICAgICAgIGluIGEgZ2l2ZW4ga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBBIHBvc3NpYmxlIHdheSB0byBkbyB0aGlzIGlzIGJ5IGxpc3RpbmcgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBhbmQgYWRkaW5nIHRoZSBtYWNoaW5lIHRvIHRoZQorICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTVBBVElCTEVfTUFDSElORSc+Q09NUEFUSUJMRV9NQUNISU5FPC91bGluaz48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTVBBVElCTEVfTUFDSElORSA9ICcocWVtdXg4NnxxZW11bWlwcyknCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywKKyAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1uZXdtYWNoaW5lLWZvcm1mYWN0b3IiPgorICAgICAgICAgICAgPHRpdGxlPkFkZGluZyBhIEZvcm1mYWN0b3IgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBmb3JtZmFjdG9yIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgaGFyZHdhcmUgZm9yIHdoaWNoIHRoZSBpbWFnZSBpcyBiZWluZyBidWlsdCBhbmQgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0gY2Fubm90IG9idGFpbiBmcm9tIG90aGVyIHNvdXJjZXMgc3VjaCBhcyB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgIFNvbWUgZXhhbXBsZXMgb2YgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGEgZm9ybWZhY3RvciBjb25maWd1cmF0aW9uIGZpbGUgaW5jbHVkZQorICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyIG9yaWVudGF0aW9uLCB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzdGVtIGhhcyBhIGtleWJvYXJkLAorICAgICAgICAgICAgICAgIHRoZSBwb3NpdGlvbmluZyBvZiB0aGUga2V5Ym9hcmQgaW4gcmVsYXRpb24gdG8gdGhlIHNjcmVlbiwgYW5kCisgICAgICAgICAgICAgICAgdGhlIHNjcmVlbiByZXNvbHV0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgcmVhc29uYWJsZSBkZWZhdWx0cyBpbiBtb3N0IGNhc2VzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGN1c3RvbWl6YXRpb24gaXMKKyAgICAgICAgICAgICAgICBuZWNlc3NhcnksIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIDxmaWxlbmFtZT5tYWNoY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZGlyZWN0b3JpZXMgZm9yIHNwZWNpZmljIG1hY2hpbmVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdWFybTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2V0dGluZ3MgYXZhaWxhYmxlIGFuZCB0aGUgZGVmYXVsdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL2NvbmZpZzwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgc2FtZSBhcmVhLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmb3IgInFlbXVhcm0iIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIQVZFX1RPVUNIU0NSRUVOPTEKKyAgICAgSEFWRV9LRVlCT0FSRD0xCisKKyAgICAgRElTUExBWV9DQU5fUk9UQVRFPTAKKyAgICAgRElTUExBWV9PUklFTlRBVElPTj0wCisgICAgICNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyAgICAgI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyAgICAgI0RJU1BMQVlfQlBQPTE2CisgICAgIERJU1BMQVlfRFBJPTE1MAorICAgICBESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi13b3JraW5nLXdpdGgtbGlicmFyaWVzIj4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgV2l0aCBMaWJyYXJpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTGlicmFyaWVzIGFyZSBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHlvdXIgc3lzdGVtLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzb21lIGNvbW1vbiBwcmFjdGljZXMgeW91IG1pZ2h0IGZpbmQKKyAgICAgICAgICAgIGhlbHBmdWwgd2hlbiB3b3JraW5nIHdpdGggbGlicmFyaWVzIHRvIGJ1aWxkIHlvdXIgc3lzdGVtOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0naW5jbHVkaW5nLXN0YXRpYy1saWJyYXJ5LWZpbGVzJz5Ib3cgdG8gaW5jbHVkZSBzdGF0aWMgbGlicmFyeSBmaWxlczwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5Ib3cgdG8gdXNlIHRoZSBNdWx0aWxpYiBmZWF0dXJlIHRvIGNvbWJpbmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgbGlicmFyeSBmaWxlcyBpbnRvIGEgc2luZ2xlIGltYWdlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0naW5zdGFsbGluZy1tdWx0aXBsZS12ZXJzaW9ucy1vZi10aGUtc2FtZS1saWJyYXJ5Jz5Ib3cgdG8gaW5zdGFsbCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IGluIHBhcmFsbGVsIG9uIHRoZSBzYW1lIHN5c3RlbTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbmNsdWRpbmctc3RhdGljLWxpYnJhcnktZmlsZXMnPgorICAgICAgICAgICAgPHRpdGxlPkluY2x1ZGluZyBTdGF0aWMgTGlicmFyeSBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgYnVpbGRpbmcgYSBsaWJyYXJ5IGFuZCB0aGUgbGlicmFyeSBvZmZlcnMgc3RhdGljIGxpbmtpbmcsIHlvdSBjYW4gY29udHJvbAorICAgICAgICAgICAgICAgIHdoaWNoIHN0YXRpYyBsaWJyYXJ5IGZpbGVzICg8ZmlsZW5hbWU+Ki5hPC9maWxlbmFtZT4gZmlsZXMpIGdldCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBidWlsdCBsaWJyYXJ5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTXyo8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGVzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGRlZmluZSBob3cgZmlsZXMgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYnkgdGhlIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayBhcmUgcGFja2FnZWQuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGluY2x1ZGVzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LXN0YXRpY2RldjwvZmlsZW5hbWU+LCB3aGljaCByZXByZXNlbnRzIGFsbCBzdGF0aWMgbGlicmFyeSBmaWxlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBwcmV2aW91c2x5IHJlbGVhc2VkIHZlcnNpb25zIG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgdGhlIHN0YXRpYyBsaWJyYXJ5IGZpbGVzIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59LWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgcGFydCBvZiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUsIHdoZXJlCisgICAgICAgICAgICAgICAgeW91IGNhbiBzZWUgaG93IHRoZSBzdGF0aWMgbGlicmFyeSBmaWxlcyBhcmUgZGVmaW5lZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQkVGT1JFX1BOID89ICIiCisgICAgIFBBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0iCisgICAgIFBBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LWxvY2FsZS0uKiIKKyAgICAgRklMRVMgPSAiIgorCisgICAgIEZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiAke2xpYmV4ZWNkaXJ9LyogJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8qICR7YmFzZV9zYmluZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgICR7YmFzZV9wcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgJHtwcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmRpcn0vJHtCUE59LyogXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2lkbCAke2RhdGFkaXJ9L29tZiAke2RhdGFkaXJ9L3NvdW5kcyBcCisgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ib25vYm8vc2VydmVycyIKKworICAgICBGSUxFU18ke1BOfS1iaW4gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorCisgICAgIEZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHttYW5kaXJ9ICR7aW5mb2Rpcn0gJHtkYXRhZGlyfS9ndGstZG9jIFwKKyAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbm9tZS9oZWxwIgorICAgICBTRUNUSU9OXyR7UE59LWRvYyA9ICJkb2MiCisKKyAgICAgRklMRVNfU09MSUJTREVWID89ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorICAgICBGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke0ZJTEVTX1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYWNsb2NhbCAke2Jhc2VfbGliZGlyfS8qLm8gXAorICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyR7QlBOfS8qLmxhICR7YmFzZV9saWJkaXJ9LyoubGEiCisgICAgIFNFQ1RJT05fJHtQTn0tZGV2ID0gImRldmVsIgorICAgICBBTExPV19FTVBUWV8ke1BOfS1kZXYgPSAiMSIKKyAgICAgUkRFUEVORFNfJHtQTn0tZGV2ID0gIiR7UE59ICg9ICR7RVhURU5EUEtHVn0pIgorCisgICAgIEZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSAke2xpYmRpcn0vJHtCUE59LyouYSIKKyAgICAgU0VDVElPTl8ke1BOfS1zdGF0aWNkZXYgPSAiZGV2ZWwiCisgICAgIFJERVBFTkRTXyR7UE59LXN0YXRpY2RldiA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImNvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlIj4KKyAgICAgICAgICAgIDx0aXRsZT5Db21iaW5pbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgTGlicmFyeSBGaWxlcyBpbnRvIE9uZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIGxpYnJhcmllcyB3aXRoIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHRhcmdldCBvcHRpbWl6YXRpb25zIG9yIGFyY2hpdGVjdHVyZSBmb3JtYXRzIGFuZCBjb21iaW5lIHRoZXNlIHRvZ2V0aGVyCisgICAgICAgICAgICAgICAgaW50byBvbmUgc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbGluayBkaWZmZXJlbnQgYmluYXJpZXMgaW4gdGhlIGltYWdlCisgICAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgZGlmZmVyZW50IGxpYnJhcmllcyBhcyBuZWVkZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy4KKyAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgaXMgY2FsbGVkICJNdWx0aWxpYi4iCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgd291bGQgYmUgd2hlcmUgeW91IGhhdmUgbW9zdCBvZiBhIHN5c3RlbSBjb21waWxlZCBpbiAzMi1iaXQKKyAgICAgICAgICAgICAgICBtb2RlIHVzaW5nIDMyLWJpdCBsaWJyYXJpZXMsIGJ1dCB5b3UgaGF2ZSBzb21ldGhpbmcgbGFyZ2UsIGxpa2UgYSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIGVuZ2luZSwgdGhhdCBuZWVkcyB0byBiZSBhIDY0LWJpdCBhcHBsaWNhdGlvbiBhbmQgdXNlcyA2NC1iaXQgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgIE11bHRpbGliIGFsbG93cyB5b3UgdG8gZ2V0IHRoZSBiZXN0IG9mIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbGlicmFyaWVzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgTXVsdGlsaWIgZmVhdHVyZSBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgZm9yIDMyIGFuZCA2NC1iaXQgZGlmZmVyZW5jZXMsCisgICAgICAgICAgICAgICAgdGhlIGFwcHJvYWNoIHRoZSBidWlsZCBzeXN0ZW0gdXNlcyBmYWNpbGl0YXRlcyBkaWZmZXJlbnQgdGFyZ2V0IG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgWW91IGNvdWxkIGNvbXBpbGUgc29tZSBiaW5hcmllcyB0byB1c2Ugb25lIHNldCBvZiBsaWJyYXJpZXMgYW5kIG90aGVyIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgdG8gdXNlIGEgZGlmZmVyZW50IHNldCBvZiBsaWJyYXJpZXMuCisgICAgICAgICAgICAgICAgVGhlIGxpYnJhcmllcyBjb3VsZCBkaWZmZXIgaW4gYXJjaGl0ZWN0dXJlLCBjb21waWxlciBvcHRpb25zLCBvciBvdGhlcgorICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdmVydmlld3MgdGhlIE11bHRpbGliIHByb2Nlc3Mgb25seS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byBpbXBsZW1lbnQgTXVsdGlsaWIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvTXVsdGlsaWInPk11bHRpbGliPC91bGluaz4gd2lraQorICAgICAgICAgICAgICAgIHBhZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gdGhpcyB3aWtpIHBhZ2UsIHNldmVyYWwgZXhhbXBsZXMgZXhpc3QgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b248L2ZpbGVuYW1lPiBsYXllciBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29uZi9tdWx0aWxpYi1leGFtcGxlLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnJlY2lwZXMtbXVsdGlsaWIvaW1hZ2VzL2NvcmUtaW1hZ2UtbXVsdGlsaWItZXhhbXBsZS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGU8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3ByZXBhcmluZy10by11c2UtbXVsdGlsaWInPgorICAgICAgICAgICAgICAgIDx0aXRsZT5QcmVwYXJpbmcgdG8gVXNlIE11bHRpbGliPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2VyLXNwZWNpZmljIHJlcXVpcmVtZW50cyBkcml2ZSB0aGUgTXVsdGlsaWIgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGVyZSBpcyBubyBvbmUgIm91dC1vZi10aGUtYm94IiBjb25maWd1cmF0aW9uIHRoYXQgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgIGV4aXN0cyB0byBtZWV0IHlvdXIgbmVlZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGVuYWJsZSBNdWx0aWxpYiwgeW91IGZpcnN0IG5lZWQgdG8gZW5zdXJlIHlvdXIgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICBNYW55IHN0YW5kYXJkIHJlY2lwZXMgYXJlIGFscmVhZHkgZXh0ZW5kZWQgYW5kIHN1cHBvcnQgbXVsdGlwbGUgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNoZWNrIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL211bHRpbGliLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IHRvIHNlZSBob3cgdGhpcyBpcworICAgICAgICAgICAgICAgICAgICBkb25lIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJDTEFTU0VYVEVORCc+PGZpbGVuYW1lPkJCQ0xBU1NFWFRFTkQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBFdmVudHVhbGx5LCBhbGwgcmVjaXBlcyB3aWxsIGJlIGNvdmVyZWQgYW5kIHRoaXMgbGlzdCB3aWxsCisgICAgICAgICAgICAgICAgICAgIG5vdCBiZSBuZWVkZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgTXVsdGlsaWIgY2xhc3MgZXh0ZW5zaW9uIHdvcmtzIGF1dG9tYXRpY2FsbHkgdG8KKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kIHRoZSBwYWNrYWdlIG5hbWUgZnJvbSA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtNTFBSRUZJWH0ke1BOfTwvZmlsZW5hbWU+LCB3aGVyZSA8ZmlsZW5hbWU+TUxQUkVGSVg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcGFydGljdWxhciBtdWx0aWxpYiAoZS5nLiAibGliMzItIiBvciAibGliNjQtIikuCisgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIHZhcmlhYmxlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvdWxpbms+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VTX0RZTkFNSUMnPjxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcmUgYXV0b21hdGljYWxseSBleHRlbmRlZCBieSB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGV4dGVuZGluZyBhbnkgbWFudWFsIGNvZGUgaW4gdGhlIHJlY2lwZSwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01MUFJFRklYfTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGVuc3VyZSB0aG9zZSBuYW1lcyBhcmUgZXh0ZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGF1dG9tYXRpYyBleHRlbnNpb24gY29kZSByZXNpZGVzIGluIDxmaWxlbmFtZT5tdWx0aWxpYi5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctbXVsdGlsaWInPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBNdWx0aWxpYjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgc2V0IHVwIHRoZSByZWNpcGVzLCB5b3UgbmVlZCB0byBkZWZpbmUgdGhlIGFjdHVhbAorICAgICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbiBvZiBtdWx0aXBsZSBsaWJyYXJpZXMgeW91IHdhbnQgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBhY2NvbXBsaXNoIHRoaXMgdGhyb3VnaCB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiB3b3VsZCBiZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkUgPSAicWVtdXg4Ni02NCIKKyAgICAgcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKKyAgICAgTVVMVElMSUJTID0gIm11bHRpbGliOmxpYjMyIgorICAgICBERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGliMzIgPSAieDg2IgorICAgICBJTUFHRV9JTlNUQUxMID0gImxpYjMyLWNvbm5tYW4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGVuYWJsZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBsaWJyYXJ5IG5hbWVkIDxmaWxlbmFtZT5saWIzMjwvZmlsZW5hbWU+IGFsb25nc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsIHRhcmdldCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBjb21iaW5pbmcgdGhlc2UgImxpYjMyIiBhbHRlcm5hdGl2ZXMsIHRoZSBleGFtcGxlIHVzZXMgIng4NiIgZm9yIHR1bmluZy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoaXMgcGFydGljdWxhciB0dW5pbmcsIHNlZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9pYTMyL2FyY2gtaWEzMi5pbmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgdGhlbiBpbmNsdWRlcyA8ZmlsZW5hbWU+bGliMzItY29ubm1hbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIGFsbCB0aGUgaW1hZ2VzLCB3aGljaCBpbGx1c3RyYXRlcyBvbmUgbWV0aG9kIG9mIGluY2x1ZGluZyBhCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIGxpYnJhcnkgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYSBub3JtYWwgaW1hZ2UgYnVpbGQgdG8gaW5jbHVkZSB0aGlzIGRlcGVuZGVuY3ksCisgICAgICAgICAgICAgICAgICAgIGZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gYnVpbGQgTXVsdGlsaWIgcGFja2FnZXMgc3BlY2lmaWNhbGx5IHdpdGggYSBjb21tYW5kIGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGliMzItY29ubm1hbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nYWRkaXRpb25hbC1pbXBsZW1lbnRhdGlvbi1kZXRhaWxzJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+QWRkaXRpb25hbCBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaWZmZXJlbnQgcGFja2FnaW5nIHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIG5hdGl2ZSBNdWx0aWxpYgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtLCB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB1bmlxdWUgYXJjaGl0ZWN0dXJlIGlzIGRlZmluZWQgZm9yIHRoZSBNdWx0aWxpYiBwYWNrYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZyB3aXRoIGNyZWF0aW5nIGEgdW5pcXVlIGRlcGxveSBmb2xkZXIgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9ycG08L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIDxmaWxlbmFtZT5saWIzMjwvZmlsZW5hbWU+IGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb3NzaWJsZSBhcmNoaXRlY3R1cmVzIGluIHRoZSBzeXN0ZW0gYXJlICJhbGwiLCAicWVtdXg4Nl82NCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYjMyX3FlbXV4ODZfNjQiLCBhbmQgImxpYjMyX3g4NiIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT4ke01MUFJFRklYfTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHN0cmlwcGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkdXJpbmcgUlBNIHBhY2thZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtaW5nIGZvciBhIG5vcm1hbCBSUE0gcGFja2FnZSBhbmQgYSBNdWx0aWxpYiBSUE0gcGFja2FnZSBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtNjQ8L2ZpbGVuYW1lPiBzeXN0ZW0gcmVzb2x2ZXMgdG8gc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjEtcjIueDg2XzY0LnJwbTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoLTQuMS5yMi5saWIzMl94ODYucnBtPC9maWxlbmFtZT4sIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIGluc3RhbGxpbmcgYSBNdWx0aWxpYiBpbWFnZSwgdGhlIFJQTSBiYWNrZW5kIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbHMgdGhlIGJhc2UgaW1hZ2UgYW5kIHRoZW4gaW5zdGFsbHMgdGhlIE11bHRpbGliIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgYnVpbGQgc3lzdGVtIHJlbGllcyBvbiBSUE0gdG8gcmVzb2x2ZSB0aGUgaWRlbnRpY2FsIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byAob3IgbW9yZSkgTXVsdGlsaWIgcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIElQSyBQYWNrYWdlIE1hbmFnZW1lbnQgU3lzdGVtLCB0aGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT4ke01MUFJFRklYfTwvZmlsZW5hbWU+IGlzIG5vdCBzdHJpcHBlZCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZHVyaW5nIElQSyBwYWNrYWdpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWluZyBmb3IgYSBub3JtYWwgUlBNIHBhY2thZ2UgYW5kIGEgTXVsdGlsaWIgSVBLIHBhY2thZ2UgaW4gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LTY0PC9maWxlbmFtZT4gc3lzdGVtIHJlc29sdmVzIHRvIHNvbWV0aGluZyBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2hfNC4xLXIyLng4Nl82NC5pcGs8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliMzItYmFzaF80LjEtcndfeDg2LmlwazwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIElQSyBkZXBsb3kgZm9sZGVyIGlzIG5vdCBtb2RpZmllZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUxQUkVGSVh9PC9maWxlbmFtZT4gYmVjYXVzZSBwYWNrYWdlcyB3aXRoIGFuZCB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIE11bHRpbGliIGZlYXR1cmUgY2FuIGV4aXN0IGluIHRoZSBzYW1lIGZvbGRlciBkdWUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlmZmVyZW5jZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SVBLIGRlZmluZXMgYSBzYW5pdHkgY2hlY2sgZm9yIE11bHRpbGliIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGNlcnRhaW4gcnVsZXMgZm9yIGZpbGUgY29tcGFyaXNvbiwgb3ZlcnJpZGRlbiwgZXRjLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy1tdWx0aXBsZS12ZXJzaW9ucy1vZi10aGUtc2FtZS1saWJyYXJ5Jz4KKyAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIE11bHRpcGxlIFZlcnNpb25zIG9mIHRoZSBTYW1lIExpYnJhcnk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaXR1YXRpb25zIGNhbiBleGlzdCB3aGVyZSB5b3UgbmVlZCB0byBpbnN0YWxsIGFuZCB1c2UKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IG9uIHRoZSBzYW1lIHN5c3RlbQorICAgICAgICAgICAgICAgIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICAgICAgICAgVGhlc2Ugc2l0dWF0aW9ucyBhbG1vc3QgYWx3YXlzIGV4aXN0IHdoZW4gYSBsaWJyYXJ5IEFQSQorICAgICAgICAgICAgICAgIGNoYW5nZXMgYW5kIHlvdSBoYXZlIG11bHRpcGxlIHBpZWNlcyBvZiBzb2Z0d2FyZSB0aGF0CisgICAgICAgICAgICAgICAgZGVwZW5kIG9uIHRoZSBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgICAgICBUbyBhY2NvbW1vZGF0ZSB0aGVzZSBzaXR1YXRpb25zLCB5b3UgY2FuIGluc3RhbGwgbXVsdGlwbGUKKyAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsaWJyYXJ5IGluIHBhcmFsbGVsIG9uIHRoZSBzYW1lIHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHByb2Nlc3MgaXMgc3RyYWlnaHRmb3J3YXJkIGFzIGxvbmcgYXMgdGhlIGxpYnJhcmllcyB1c2UKKyAgICAgICAgICAgICAgICBwcm9wZXIgdmVyc2lvbmluZy4KKyAgICAgICAgICAgICAgICBXaXRoIHByb3Blcmx5IHZlcnNpb25lZCBsaWJyYXJpZXMsIGFsbCB5b3UgbmVlZCB0byBkbyB0bworICAgICAgICAgICAgICAgIGluZGl2aWR1YWxseSBzcGVjaWZ5IHRoZSBsaWJyYXJpZXMgaXMgY3JlYXRlIHNlcGFyYXRlLAorICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkgbmFtZWQgcmVjaXBlcyB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz4gcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIGluY2x1ZGVzIGEgcG9ydGlvbiB0aGF0IGRpZmZlcmVudGlhdGVzIGVhY2ggbGlicmFyeSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgKGUuZy50aGUgbWFqb3IgcGFydCBvZiB0aGUgdmVyc2lvbiBudW1iZXIpLgorICAgICAgICAgICAgICAgIFRodXMsIGluc3RlYWQgb2YgaGF2aW5nIGEgc2luZ2xlIHJlY2lwZSB0aGF0IGxvYWRzIG9uZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgb2YgYSBsaWJyYXJ5IChlLmcuIDxmaWxlbmFtZT5jbHV0dGVyPC9maWxlbmFtZT4pLCB5b3UgcHJvdmlkZQorICAgICAgICAgICAgICAgIG11bHRpcGxlIHJlY2lwZXMgdGhhdCByZXN1bHQgaW4gZGlmZmVyZW50IHZlcnNpb25zCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcmllcyB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byByZWNpcGVzIHdvdWxkIGFsbG93IHRoZQorICAgICAgICAgICAgICAgIHR3byBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiB0aGUgPGZpbGVuYW1lPmNsdXR0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGxpYnJhcnkgdG8gY28tZXhpc3Qgb24gdGhlIHNhbWUgc3lzdGVtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgY2x1dHRlci0xLjZfMS42LjIwLmJiCisgICAgIGNsdXR0ZXItMS44XzEuOC40LmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaWYgeW91IGhhdmUgb3RoZXIgcmVjaXBlcyB0aGF0IGRlcGVuZCBvbiBhIGdpdmVuCisgICAgICAgICAgICAgICAgbGlicmFyeSwgeW91IG5lZWQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBjcmVhdGUgdGhlIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBzYW1lIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGhhdmUgYSByZWNpcGUKKyAgICAgICAgICAgICAgICBkZXBlbmQgb24gdGhlIDEuOCB2ZXJzaW9uIG9mIHRoZSA8ZmlsZW5hbWU+Y2x1dHRlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgbGlicmFyeSwgdXNlIHRoZSBmb2xsb3dpbmcgaW4geW91ciByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImNsdXR0ZXItMS44IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1wYXJ0aXRpb25lZC1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgUGFydGl0aW9uZWQgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0aW5nIGFuIGltYWdlIGZvciBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgdGFyZ2V0IHVzaW5nIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHlvdSBjYW4gYm9vdAorICAgICAgICAgICAgdGhhdCBpbWFnZSBhcyBpcyBvbiB5b3VyIGRldmljZS4KKyAgICAgICAgICAgIFBoeXNpY2FsIGRldmljZXMgYWNjZXB0IGFuZCBib290IGltYWdlcyBpbiB2YXJpb3VzIHdheXMgZGVwZW5kaW5nCisgICAgICAgICAgICBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkZXZpY2UuCisgICAgICAgICAgICBVc3VhbGx5LCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgY2FuIHRlbGwgeW91IHdoYXQgaW1hZ2UKKyAgICAgICAgICAgIGZvcm1hdCB0aGUgZGV2aWNlIHJlcXVpcmVzLgorICAgICAgICAgICAgU2hvdWxkIHlvdXIgZGV2aWNlIHJlcXVpcmUgbXVsdGlwbGUgcGFydGl0aW9ucyBvbiBhbiBTRCBjYXJkLCBmbGFzaCwKKyAgICAgICAgICAgIG9yIGFuIEhERCwgeW91IGNhbiB1c2UgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBDcmVhdG9yLAorCSAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCB0byBjcmVhdGUgdGhlIHByb3Blcmx5IHBhcnRpdGlvbmVkIGltYWdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNvbW1hbmQgZ2VuZXJhdGVzIHBhcnRpdGlvbmVkIGltYWdlcworICAgICAgICAgICAgZnJvbSBleGlzdGluZyBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3RzLgorICAgICAgICAgICAgSW1hZ2UgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkgcGFydGl0aW9uaW5nIGNvbW1hbmRzIGNvbnRhaW5lZAorICAgICAgICAgICAgaW4gYW4gT3BlbmVtYmVkZGVkIGtpY2tzdGFydCBmaWxlICg8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+KQorICAgICAgICAgICAgc3BlY2lmaWVkIGVpdGhlciBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGFzIG9uZSBvZiBhCisgICAgICAgICAgICBzZWxlY3Rpb24gb2YgY2FubmVkIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZXMgYXMgc2hvd24KKyAgICAgICAgICAgIHdpdGggdGhlIDxmaWxlbmFtZT53aWMgbGlzdCBpbWFnZXM8L2ZpbGVuYW1lPiBjb21tYW5kIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcHJvdmlkZWQta2lja3N0YXJ0X2ZpbGUnPlVzaW5nIGFuIEV4aXN0aW5nIEtpY2tzdGFydCBGaWxlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICBXaGVuIGFwcGxpZWQgdG8gYSBnaXZlbiBzZXQgb2YgYnVpbGQgYXJ0aWZhY3RzLCB0aGUgcmVzdWx0IGlzIGFuCisgICAgICAgICAgICBpbWFnZSBvciBzZXQgb2YgaW1hZ2VzIHRoYXQgY2FuIGJlIGRpcmVjdGx5IHdyaXR0ZW4gb250byBtZWRpYSBhbmQKKyAgICAgICAgICAgIHVzZWQgb24gYSBwYXJ0aWN1bGFyIHN5c3RlbS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCSAgICAgICAgVGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCB0aGUgaW5mcmFzdHJ1Y3R1cmUKKwkgICAgICAgIGl0IGlzIGJhc2VkIG9uIGlzIGJ5IGRlZmluaXRpb24gaW5jb21wbGV0ZS4KKyAgICAgICAgICAgIEl0cyBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBnZW5lcmF0aW9uIG9mIGN1c3RvbWl6ZWQgaW1hZ2VzLAorICAgICAgICAgICAgYW5kIGFzIHN1Y2ggd2FzIGRlc2lnbmVkIHRvIGJlIGNvbXBsZXRlbHkgZXh0ZW5zaWJsZSB0aHJvdWdoIGEKKyAgICAgICAgICAgIHBsdWdpbiBpbnRlcmZhY2UuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC1wbHVnaW5zJz5QbHVnaW5zPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHBsdWdpbnMuCisJICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiwgZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gaGF2ZSBpbgorICAgICAgICAgICAgcGxhY2UgdG8gcnVuIHRoZSB0b29sLCBwcm92aWRlcyBpbnN0cnVjdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4sIGFuZCBwcm92aWRlcyBzZXZlcmFsIGV4YW1wbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1iYWNrZ3JvdW5kJz4KKyAgICAgICAgICAgIDx0aXRsZT5CYWNrZ3JvdW5kPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eS4KKyAgICAgICAgICAgICAgICBXaGlsZSBub25lIG9mIHRoaXMgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQgdG8gdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCB5b3UgbWlnaHQgZmluZCBpdCBpbnRlcmVzdGluZy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSAid2ljIiBpcyBkZXJpdmVkIGZyb20gT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSBDcmVhdG9yIChvZWljKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAib2UiIGRpcGh0aG9uZyBpbiAib2VpYyIgd2FzIHByb21vdGVkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbGV0dGVyICJ3IiwgYmVjYXVzZSAib2VpYyIgaXMgYm90aCBkaWZmaWN1bHQgdG8gcmVtZW1iZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9ub3VuY2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpcyBsb29zZWx5IGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgTWVlZ28gSW1hZ2UgQ3JlYXRvciAoPGZpbGVuYW1lPm1pYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgaGVhdmlseSBtb2RpZmllZCB0byBtYWtlIGRpcmVjdCB1c2Ugb2YgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhcnRpZmFjdHMgaW5zdGVhZCBvZiBwYWNrYWdlIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSBhbHJlYWR5IGluY29ycG9yYXRlZCB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYXJ0aWZhY3RzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaXMgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFsb25lIHV0aWxpdHkgdGhhdCBpbml0aWFsbHkgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhc2llci10by11c2UgYW5kIG1vcmUgZmxleGlibGUgcmVwbGFjZW1lbnRzIGZvciBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb3VwbGUgYml0cyBvZiBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluIE9FIENvcmUncworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3QtZGlyZWN0ZGlzay5iYmNsYXNzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWtlZmlkaXNrLnNoPC9maWxlbmFtZT4gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBhbmQgdGhvc2UgZXhhbXBsZXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2l0aCA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRob3NlIHNjcmlwdHMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnRpdGlvbmluZyBsYW5ndWFnZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIFJlZGhhdCBraWNrc3RhcnQgc3ludGF4LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1yZXF1aXJlbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPlJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSB0aGUgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IHV0aWxpdHkKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgQnVpbGQgc3lzdGVtLCB5b3VyIHN5c3RlbSBuZWVkcworICAgICAgICAgICAgICAgIHRvIG1lZXQgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBMaW51eCBkaXN0cmlidXRpb24gb24geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaG9zdCBtdXN0IHN1cHBvcnQgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qgb2YgZGlzdHJpYnV0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHN0YW5kYXJkIHN5c3RlbSB1dGlsaXRpZXMsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcDwvZmlsZW5hbWU+LCBtdXN0IGJlIGluc3RhbGxlZCBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBoYXZlIHRoZSBidWlsZCBhcnRpZmFjdHMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlLCB3aGljaCB0eXBpY2FsbHkgbWVhbnMgdGhhdCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgYW4gaW1hZ2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuZW1iZWRkZWQgYnVpbGQgc3lzdGVtIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgaXQgbWlnaHQgc2VlbSByZWR1bmRhbnQgdG8gZ2VuZXJhdGUgYW4gaW1hZ2UgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIGNyZWF0ZSBhbiBpbWFnZSB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gcmVxdWlyZXMgdGhlIGFydGlmYWN0cworICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0gZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgYnVpbGQgc2V2ZXJhbCBuYXRpdmUgdG9vbHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBwYXJ0ZWQtbmF0aXZlIGRvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIHNvdXJjZWQgb25lIG9mIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXAgc2NyaXB0cyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy1nZXR0aW5nLWhlbHAnPgorICAgICAgICAgICAgPHRpdGxlPkdldHRpbmcgSGVscDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IGdlbmVyYWwgaGVscCBmb3IgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGJ5IGVudGVyaW5nIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY29tbWFuZCBieSBpdHNlbGYKKyAgICAgICAgICAgICAgICBvciBieSBlbnRlcmluZyB0aGUgY29tbWFuZCB3aXRoIGEgaGVscCBhcmd1bWVudCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgLWgKKyAgICAgJCB3aWMgLS1oZWxwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBzdXBwb3J0cyB0d28gY29tbWFuZHM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNyZWF0ZTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bGlzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IGhlbHAgZm9yIHRoZXNlIGNvbW1hbmRzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBoZWxwIDxyZXBsYWNlYWJsZT5jb21tYW5kPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBnZXQgZGV0YWlsZWQgaGVscCBvbiBhIG51bWJlciBvZiB0b3BpY3MKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBoZWxwIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IG9mIDxmaWxlbmFtZT53aWMgLS1oZWxwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXNwbGF5cyBhIGxpc3Qgb2YgYXZhaWxhYmxlIGhlbHAKKyAgICAgICAgICAgICAgICB0b3BpY3MgdW5kZXIgYSAiSGVscCB0b3BpY3MiIGhlYWRpbmcuCisgICAgICAgICAgICAgICAgWW91IGNhbiBoYXZlIHRoZSBoZWxwIHN5c3RlbSBkaXNwbGF5IHRoZSBoZWxwIHRleHQgZm9yCisgICAgICAgICAgICAgICAgYSBnaXZlbiB0b3BpYyBieSBwcmVmYWNpbmcgdGhlIHRvcGljIHdpdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljIGhlbHA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGhlbHAgPHJlcGxhY2VhYmxlPmhlbHBfdG9waWM8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBpbWFnZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY3JlYXRlcyB1c2luZyB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICBraWNrc3RhcnQgZmlsZXMgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm0gb2YgdGhlIGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBsaXN0IDxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+IGhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgd2hlcmUgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4gaXMgZWl0aGVyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ta2VmaWRpc2s8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVyYXRpb25hbC1tb2Rlcyc+CisgICAgICAgICAgICA8dGl0bGU+T3BlcmF0aW9uYWwgTW9kZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBZb3UgY2FuIHVzZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW4gdHdvIGRpZmZlcmVudAorCSAgICAgICAgICAgIG1vZGVzLCBkZXBlbmRpbmcgb24gaG93IG11Y2ggY29udHJvbCB5b3UgbmVlZCBmb3IKKwkgICAgICAgICAgICBzcGVjaWZ5aW5nIHRoZSBPcGVuZW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3RzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGltYWdlOiBSYXcgYW5kIENvb2tlZDoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJhdyBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgZXhwbGljaXRseSBzcGVjaWZ5IGJ1aWxkIGFydGlmYWN0cyB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvb2tlZCBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZyBhbmQgaW1hZ2UgbmFtZSBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGxvY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByb3ZpZGUgdGhlIGJ1aWxkIGFydGlmYWN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgbW9kZSB5b3UgdXNlLCB5b3UgbmVlZCB0byBoYXZlIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIGFydGlmYWN0cyByZWFkeSBhbmQgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIGVudmlyb25tZW50IG11c3QgYmUgc2V0IHVwIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzY3JpcHQgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncmF3LW1vZGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5SYXcgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgJ3dpYycgY29tbWFuZCBpbiByYXcgbW9kZSBpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgPHJlcGxhY2VhYmxlPmltYWdlX25hbWU8L3JlcGxhY2VhYmxlPi53a3MgWzxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT5dIFsuLi5dCisKKyAgICAgICAgIFdoZXJlOgorCisgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmltYWdlX25hbWU8L3JlcGxhY2VhYmxlPi53a3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBPcGVuRW1iZWRkZWQga2lja3N0YXJ0IGZpbGUuICBZb3UgY2FuIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIG93biBjdXN0b20gZmlsZSBvciB1c2UgYSBmaWxlIGZyb20gYSBzZXQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyBmaWxlcyBhcyBkZXNjcmliZWQgYnkgZnVydGhlciBvcHRpb25zLgorCisgICAgICAgICAgICAgLW8gPHJlcGxhY2VhYmxlPk9VVERJUjwvcmVwbGFjZWFibGU+LCAtLW91dGRpcj08cmVwbGFjZWFibGU+T1VURElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiBhIGRpcmVjdG9yeSBpbiB3aGljaCB0byBjcmVhdGUgaW1hZ2UuCisKKyAgICAgICAgICAgICAtaSA8cmVwbGFjZWFibGU+UFJPUEVSVElFU19GSUxFPC9yZXBsYWNlYWJsZT4sIC0taW5maWxlPTxyZXBsYWNlYWJsZT5QUk9QRVJUSUVTX0ZJTEU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyBhcyBhIEpTT04gZmlsZS4KKworICAgICAgICAgICAgIC1lIDxyZXBsYWNlYWJsZT5JTUFHRV9OQU1FPC9yZXBsYWNlYWJsZT4sIC0taW1hZ2UtbmFtZT08cmVwbGFjZWFibGU+SU1BR0VfTkFNRTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGltYWdlIGZyb20gd2hpY2ggdG8gdXNlIHRoZSBhcnRpZmFjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4pLgorCisgICAgICAgICAgICAgLXIgPHJlcGxhY2VhYmxlPlJPT1RGU19ESVI8L3JlcGxhY2VhYmxlPiwgLS1yb290ZnMtZGlyPTxyZXBsYWNlYWJsZT5ST09URlNfRElSPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9yb290ZnM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgdG8gdXNlIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gcm9vdGZzIHNvdXJjZS4KKworICAgICAgICAgICAgIC1iIDxyZXBsYWNlYWJsZT5CT09USU1HX0RJUjwvcmVwbGFjZWFibGU+LCAtLWJvb3RpbWctZGlyPTxyZXBsYWNlYWJsZT5CT09USU1HX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBib290IGFydGlmYWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT4vRUZJPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi9zeXNsaW51eDwvZmlsZW5hbWU+KSB0byB1c2UgYXMgdGhlIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gYm9vdGltZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS4KKworICAgICAgICAgICAgIC1rIDxyZXBsYWNlYWJsZT5LRVJORUxfRElSPC9yZXBsYWNlYWJsZT4sIC0ta2VybmVsLWRpcj08cmVwbGFjZWFibGU+S0VSTkVMX0RJUjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBrZXJuZWwgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gYm9vdCBpbWFnZS4KKworICAgICAgICAgICAgIC1uIDxyZXBsYWNlYWJsZT5OQVRJVkVfU1lTUk9PVDwvcmVwbGFjZWFibGU+LCAtLW5hdGl2ZS1zeXNyb290PTxyZXBsYWNlYWJsZT5OQVRJVkVfU1lTUk9PVDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIG5hdGl2ZSBzeXNyb290IGNvbnRhaW5pbmcgdGhlIHRvb2xzIHRvIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ1aWxkIHRoZSBpbWFnZS4KKworICAgICAgICAgICAgIC1zLCAtLXNraXAtYnVpbGQtY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa2lwcyB0aGUgYnVpbGQgY2hlY2suCisKKyAgICAgICAgICAgICAtRCwgLS1kZWJ1ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCByb290IHByaXZpbGVnZXMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBmYWN0LCB5b3Ugc2hvdWxkIG5vdCBydW4gYXMgcm9vdCB3aGVuIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2Nvb2tlZC1tb2RlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29va2VkIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBnZW5lcmFsIGZvcm0gb2YgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIENvb2tlZCBNb2RlIGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSA8cmVwbGFjZWFibGU+a2lja3N0YXJ0X2ZpbGU8L3JlcGxhY2VhYmxlPiAtZSA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+CisKKyAgICAgICAgIFdoZXJlOgorCisgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPmtpY2tzdGFydF9maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbiBPcGVuRW1iZWRkZWQga2lja3N0YXJ0IGZpbGUuIFlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBmaWxlIG9yIHN1cHBsaWVkIGZpbGUuCisKKyAgICAgICAgICAgICA8cmVwbGFjZWFibGU+aW1hZ2VfbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBpbWFnZSBidWlsdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZm9ybSBpcyB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgdXNlci1mcmllbmRseSwgYXMgaXQKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBzcGVjaWZ5aW5nIGFsbCBpbmRpdmlkdWFsIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgIEFsbCB5b3UgbmVlZCB0byBwcm92aWRlIGlzIHlvdXIgb3duCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ud2tzPC9maWxlbmFtZT4gZmlsZSBvciBvbmUgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnRfZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gRXhpc3RpbmcgS2lja3N0YXJ0IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBmaWxlLCB5b3UgY2FuIHVzZSBhbiBleGlzdGluZworICAgICAgICAgICAgICAgIGZpbGUgcHJvdmlkZWQgYnkgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBsaXN0IHRoZSBhdmFpbGFibGUgZmlsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBsaXN0IGltYWdlcworICAgICBkaXJlY3RkaXNrIENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisgICAgIG1rZWZpZGlzayBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgYW4gZXhpc3RpbmcgZmlsZSwgeW91IGRvIG5vdCBoYXZlIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBpbiBSYXcgTW9kZSB0aGF0IHVzZXMgdGhlCisgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kaXJlY3RkaXNrPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgZGlyZWN0ZGlzayAtciA8cmVwbGFjZWFibGU+cm9vdGZzX2RpcjwvcmVwbGFjZWFibGU+IC1iIDxyZXBsYWNlYWJsZT5ib290aW1nX2RpcjwvcmVwbGFjZWFibGU+IFwKKyAgICAgICAgICAgLWsgPHJlcGxhY2VhYmxlPmtlcm5lbF9kaXI8L3JlcGxhY2VhYmxlPiAtbiA8cmVwbGFjZWFibGU+bmF0aXZlX3N5c3Jvb3Q8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGFjdHVhbCBwYXJ0aXRpb24gbGFuZ3VhZ2UgY29tbWFuZHMKKyAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+bWtlZmlkaXNrLndrczwvZmlsZW5hbWU+IGZpbGUgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICBhbiBpbWFnZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAjIGxvbmctZGVzY3JpcHRpb246IENyZWF0ZXMgYSBwYXJ0aXRpb25lZCBFRkkgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisgICAgICMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLW9uZGlzayBzZGEgLS1sYWJlbCBtc2RvcyAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKworICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQzIC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKKyAgICAgcGFydCBzd2FwIC0tb25kaXNrIHNkYSAtLXNpemUgNDQgLS1sYWJlbCBzd2FwMSAtLWZzdHlwZT1zd2FwCisKKyAgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQzIGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3dpYy11c2FnZS1leGFtcGxlcyc+CisgICAgICAgICAgICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc2V2ZXJhbCBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdXRpbGl0eS4KKyAgICAgICAgICAgICAgICBBbGwgdGhlIGV4YW1wbGVzIGFzc3VtZSB0aGUgbGlzdCBvZiByZXF1aXJlbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3dpYy1yZXF1aXJlbWVudHMnPlJlcXVpcmVtZW50czwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBoYXZlIGJlZW4gbWV0LgorICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlcyBhc3N1bWUgdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGltYWdlIGlzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGUtYW4taW1hZ2UtdXNpbmctYS1wcm92aWRlZC1raWNrc3RhcnQtZmlsZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkdlbmVyYXRlIGFuIEltYWdlIHVzaW5nIGFuIEV4aXN0aW5nIEtpY2tzdGFydCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgcnVucyBpbiBDb29rZWQgTW9kZSBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1rZWZpZGlzazwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSBta2VmaWRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgIERvbmUuCisKKyAgICAgQ3JlYXRpbmcgaW1hZ2UocykuLi4KKworICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL21rZWZpZGlzay0yMDEzMTAyMzA5NDYtc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorICAgICAgUk9PVEZTX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL21pbm5vdy1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgICBCT09USU1HX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC93b3JrL21pbm5vdy1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvY29yZS1pbWFnZS1taW5pbWFsLTEuMC9oZGRpbWcKKyAgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbWlubm93L3Vzci9zcmMva2VybmVsCisgICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgKKworCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNob3dzIHRoZSBlYXNpZXN0IHdheSB0byBjcmVhdGUgYW4gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgYnkgcnVubmluZyBpbiBDb29rZWQgTW9kZSBhbmQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZTwvZmlsZW5hbWU+IG9wdGlvbiB3aXRoIGFuIGV4aXN0aW5nIGtpY2tzdGFydAorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBBbGwgdGhhdCBpcyBuZWNlc3NhcnkgaXMgdG8gc3BlY2lmeSB0aGUgaW1hZ2UgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZSB0aGUgYXJ0aWZhY3RzLgorICAgICAgICAgICAgICAgICAgICBZb3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gbmVlZHMgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzZXQgdG8gdGhlIG1hY2hpbmUgeW91IGFyZSB1c2luZywgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgIm1pbm5vdyIgaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IHNwZWNpZmllcyB0aGUgZXhhY3QgY3JlYXRlZCBhcyB3ZWxsIGFzIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGl0IHdhcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGFsc28gbmFtZXMgdGhlIGFydGlmYWN0cyB1c2VkIGFuZCB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53a3M8L2ZpbGVuYW1lPiBzY3JpcHQgdGhhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHdheXMgdmVyaWZ5IHRoZSBkZXRhaWxzIHByb3ZpZGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbWFnZSB3YXMgaW5kZWVkIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0bHkgYXMgZXhwZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29udGludWluZyB3aXRoIHRoZSBleGFtcGxlLCB5b3UgY2FuIG5vdyBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPiB0aGUgaW1hZ2UgdG8gYSBVU0Igc3RpY2ssIG9yCisgICAgICAgICAgICAgICAgICAgIHdoYXRldmVyIG1lZGlhIGZvciB3aGljaCB5b3UgYnVpbHQgeW91ciBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gZGQgaWY9L3Zhci90bXAvd2ljL2J1aWxkL21rZWZpZGlzay0yMDEzMTAyMzA5NDYtc2RhLmRpcmVjdCBvZj0vZGV2L3NkYgorICAgICBbc3Vkb10gcGFzc3dvcmQgZm9yIHRyejoKKyAgICAgMTgyMjc0KzAgcmVjb3JkcyBpbgorICAgICAxODIyNzQrMCByZWNvcmRzIG91dAorICAgICA5MzMyNDI4OCBieXRlcyAoOTMgTUIpIGNvcGllZCwgMTQuNDc3NyBzLCA2LjQgTUIvcworICAgICBbdHJ6QGVtcGFuYWRhIH5dJCBzdWRvIGVqZWN0IC9kZXYvc2RiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1hLW1vZGlmaWVkLWtpY2tzdGFydC1maWxlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYSBNb2RpZmllZCBLaWNrc3RhcnQgRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW1hZ2UgY3JlYXRpb24gaXMgZHJpdmVuCisgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBraWNrc3RhcnQgZmlsZSwgaXQgaXMgZWFzeSB0byBhZmZlY3QgaW1hZ2UgY3JlYXRpb24KKyAgICAgICAgICAgICAgICAgICAgYnkgY2hhbmdpbmcgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGF0IHRocm91Z2ggbW9kaWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgeW91IGNhbiB1c2UgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYyBsaXN0IGltYWdlczwvZmlsZW5hbWU+IHRvIHNob3cgdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgb2YgZXhpc3Rpbmcga2lja3N0YXJ0IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZXNlIGZpbGVzIHJlc2lkZSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgYXZhaWxhYmxlIGZpbGVzIHJlc2lkZSBpbiB0aGlzIGRpcmVjdG9yeSwgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiBjcmVhdGUgYW5kIGFkZCB5b3VyIG93biBjdXN0b20gZmlsZXMgdG8gdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB1c2Ugb2YgdGhlIDxmaWxlbmFtZT53aWMgbGlzdCBpbWFnZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHdvdWxkIHRoZW4gaW5jbHVkZSB5b3VyIGtpY2tzdGFydCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBmaWxlIGFscmVhZHkgZG9lcyBtb3N0CisgICAgICAgICAgICAgICAgICAgIG9mIHdoYXQgaXMgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBmb3IgdGhlIGhhcmR3YXJlIGluIHRoaXMgZXhhbXBsZSwgdGhlIGltYWdlIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBib290IGZyb20gPGZpbGVuYW1lPnNkYjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNkYTwvZmlsZW5hbWU+LCB3aGljaCBpcyB3aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGtpY2tzdGFydCBmaWxlIHVzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFtcGxlIGJlZ2lucyBieSBtYWtpbmcgYSBjb3B5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzay53a3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgdGhlbiBjaGFuZ2luZyB0aGUgbGluZXMgdGhhdCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGlzayBmcm9tIHdoaWNoIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcCAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcyBcCisgICAgICAgICAgL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL3NjcmlwdHMvbGliL2ltYWdlL2Nhbm5lZC13a3MvZGlyZWN0ZGlza3NkYi53a3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBOZXh0LCB0aGUgZXhhbXBsZSBtb2RpZmllcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2tzZGIud2tzPC9maWxlbmFtZT4gZmlsZSBhbmQgY2hhbmdlcyBhbGwKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzIG9mICI8ZmlsZW5hbWU+LS1vbmRpc2sgc2RhPC9maWxlbmFtZT4iCisgICAgICAgICAgICAgICAgICAgIHRvICI8ZmlsZW5hbWU+LS1vbmRpc2sgc2RiPC9maWxlbmFtZT4iLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBjaGFuZ2VzIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFuZCBsZWF2ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBsaW5lcyB1bnRvdWNoZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGIgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorICAgICBwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYiAtLWZzdHlwZT1leHQzIC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgbGluZXMgYXJlIGNoYW5nZWQsIHRoZSBleGFtcGxlIGdlbmVyYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpcmVjdGRpc2tzZGI8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgcG9pbnRzIHRoZSBwcm9jZXNzIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYXJ0aWZhY3RzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgTmV4dCBVbml0IG9mIENvbXB1dGluZyAobnVjKQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrc2RiIC1lIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICBDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLgorICAgICBEb25lLgorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrc2RiLTIwMTMxMDIzMTEzMS1zZGIuZGlyZWN0CisKKyAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisgICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvbnVjLXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgIEJPT1RJTUdfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL251Yy91c3Ivc2hhcmUKKyAgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvbnVjL3Vzci9zcmMva2VybmVsCisgICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgKKworCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrc2RiLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZSwgeW91IGNhbiBub3cgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRkPC9maWxlbmFtZT4gdGhlIGltYWdlIHRvIGEgVVNCIHN0aWNrLCBvcgorICAgICAgICAgICAgICAgICAgICB3aGF0ZXZlciBtZWRpYSBmb3Igd2hpY2ggeW91IGJ1aWx0IHlvdXIgaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgIGFuZCBib290IHRoZSByZXN1bHRpbmcgbWVkaWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGRkIGlmPS92YXIvdG1wL3dpYy9idWlsZC9kaXJlY3RkaXNrc2RiLTIwMTMxMDIzMTEzMS1zZGIuZGlyZWN0IG9mPS9kZXYvc2RiCisgICAgIDg2MDE4KzAgcmVjb3JkcyBpbgorICAgICA4NjAxOCswIHJlY29yZHMgb3V0CisgICAgIDQ0MDQxMjE2IGJ5dGVzICg0NCBNQikgY29waWVkLCAxMy4wNzM0IHMsIDMuNCBNQi9zCisgICAgIFt0cnpAZW1wYW5hZGEgdG1wXSQgc3VkbyBlamVjdCAvZGV2L3NkYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYW4taW1hZ2UtYmFzZWQtb24tY29yZS1pbWFnZS1taW5pbWFsLWFuZC1jcm93bmJheS1ub2VtZ2QnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbiBJbWFnZSBCYXNlZCBvbiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5jcm93bmJheS1ub2VtZ2Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYW4gaW1hZ2UgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGFuZCBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm93bmJheS1ub2VtZ2Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgd29ya3MgcmlnaHQgb3V0IG9mIHRoZSBib3guCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisKKyAgICAgQ2hlY2tpbmcgYmFzaWMgYnVpbGQgZW52aXJvbm1lbnQuLi4KKyAgICAgRG9uZS4KKworICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgIEluZm86IFRoZSBuZXcgaW1hZ2UocykgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAvdmFyL3RtcC93aWMvYnVpbGQvZGlyZWN0ZGlzay0yMDEzMDkyNTIzNTAtc2RhLmRpcmVjdAorCisgICAgIFRoZSBmb2xsb3dpbmcgYnVpbGQgYXJ0aWZhY3RzIHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlIGltYWdlKHMpOgorCisgICAgIFJPT1RGU19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9jcm93bmJheV9ub2VtZ2QtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcworICAgICBCT09USU1HX0RJUjogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NoYXJlCisgICAgIEtFUk5FTF9ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zcmMva2VybmVsCisgICAgIE5BVElWRV9TWVNST09UOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAorCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2Uvc2NyaXB0cy9saWIvaW1hZ2UvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYS1tb2RpZmllZC1raWNrc3RhcnQtZmlsZS1hbmQtcnVubmluZy1pbi1yYXctbW9kZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIGEgTW9kaWZpZWQgS2lja3N0YXJ0IEZpbGUgYW5kIFJ1bm5pbmcgaW4gUmF3IE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hbnVhbGx5IHNwZWNpZmllcyBlYWNoIGJ1aWxkIGFydGlmYWN0CisgICAgICAgICAgICAgICAgICAgIChydW5zIGluIFJhdyBNb2RlKSBhbmQgdXNlcyBhIG1vZGlmaWVkIGtpY2tzdGFydCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZSBhbHNvIHVzZXMgdGhlIDxmaWxlbmFtZT4tbzwvZmlsZW5hbWU+IG9wdGlvbgorICAgICAgICAgICAgICAgICAgICB0byBjYXVzZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gdG8gY3JlYXRlIHRoZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi92YXIvdG1wL3dpYzwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdpYyBjcmVhdGUgfi90ZXN0LndrcyAtbyAvaG9tZS90cnovdGVzdHdpYyAtLXJvb3Rmcy1kaXIgXAorICAgICAgICAgIC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvd29yay9jcm93bmJheV9ub2VtZ2QtcG9reS1saW51eC9jb3JlLWltYWdlLW1pbmltYWwvMS4wLXIwL3Jvb3RmcyBcCisgICAgICAgICAgLS1ib290aW1nLWRpciAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc2hhcmUgXAorICAgICAgICAgIC0ta2VybmVsLWRpciAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbCBcCisgICAgICAgICAgLS1uYXRpdmUtc3lzcm9vdCAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgIC9ob21lL3Ryei90ZXN0d2ljL2J1aWxkL3Rlc3QtMjAxMzA5MjYwMDMyLXNkYS5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKworICAgICBST09URlNfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3dvcmsvY3Jvd25iYXlfbm9lbWdkLXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgQk9PVElNR19ESVI6IC9ob21lL3Ryei95b2N0by95b2N0by1pbWFnZS9idWlsZC90bXAvc3lzcm9vdHMvY3Jvd25iYXktbm9lbWdkL3Vzci9zaGFyZQorICAgICBLRVJORUxfRElSOiAvaG9tZS90cnoveW9jdG8veW9jdG8taW1hZ2UvYnVpbGQvdG1wL3N5c3Jvb3RzL2Nyb3duYmF5LW5vZW1nZC91c3Ivc3JjL2tlcm5lbAorICAgICBOQVRJVkVfU1lTUk9PVDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWltYWdlL2J1aWxkL3RtcC9zeXNyb290cy9jcm93bmJheS1ub2VtZ2QvdXNyL3NyYy9rZXJuZWwKKworICAgICBUaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOgorICAgICAgL2hvbWUvdHJ6L3Rlc3Qud2tzCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBkaWQgbm90IGhhdmUgdG8gYmUgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgc2luY2UgdGhlIGFydGlmYWN0IGlzCisgICAgICAgICAgICAgICAgICAgIG1hbnVhbGx5IHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nb3BlbmVtYmVkZGVkLWtpY2tzdGFydC1wbHVnaW5zJz4KKyAgICAgICAgICAgIDx0aXRsZT5QbHVnaW5zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgUGx1Z2lucyBhbGxvdyA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gZnVuY3Rpb25hbGl0eSB0bworCSAgICAgICAgICAgIGJlIGV4dGVuZGVkIGFuZCBzcGVjaWFsaXplZCBieSB1c2Vycy4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBwbHVnaW4gaW50ZXJmYWNlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGN1cnJlbnRseSByZXN0cmljdGVkIHRvIHNvdXJjZSBwbHVnaW5zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBTb3VyY2UgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZQorCSAgICAgICAgICAgIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGluCisJICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LCBtYWlubHkgdGhlIGNvbnRlbnRzIG9mCisJICAgICAgICAgICAgcGFydGl0aW9ucy4KKwkgICAgICAgICAgICBUaGUgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHZhbHVlcworCSAgICAgICAgICAgIHNwZWNpZmllZCBpbiA8ZmlsZW5hbWU+LndrczwvZmlsZW5hbWU+IGZpbGVzIHVzaW5nIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IGtleXdvcmQgdG8gYQorICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgcGx1Z2luIGltcGxlbWVudGF0aW9uIHRoYXQgcG9wdWxhdGVzIGEKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHBhcnRpdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisJICAgICAgICAgICAgQSBzb3VyY2UgcGx1Z2luIGlzIGNyZWF0ZWQgYXMgYSBzdWJjbGFzcyBvZgorCSAgICAgICAgICAgIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgcGx1Z2luIGZpbGUgY29udGFpbmluZyBpdCBpcyBhZGRlZCB0bworCSAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2xpYi9taWMvcGx1Z2lucy9zb3VyY2UvPC9maWxlbmFtZT4gdG8KKwkgICAgICAgICAgICBtYWtlIHRoZSBwbHVnaW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZQorCSAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisJICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL21pYy9wbHVnaW5iYXNlLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFNvdXJjZSBwbHVnaW5zIGNhbiBhbHNvIGJlIGltcGxlbWVudGVkIGFuZCBhZGRlZCBieQorCSAgICAgICAgICAgIGV4dGVybmFsIGxheWVycy4KKyAgICAgICAgICAgICAgICBBcyBzdWNoLCBhbnkgcGx1Z2lucyBmb3VuZCBpbiBhCisJICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvbGliL21pYy9wbHVnaW5zL3NvdXJjZS88L2ZpbGVuYW1lPgorCSAgICAgICAgICAgIGRpcmVjdG9yeSBpbiBhbiBleHRlcm5hbCBsYXllciBhcmUgYWxzbyBtYWRlCisJICAgICAgICAgICAgYXZhaWxhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBXaGVuIHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gbmVlZHMKKwkgICAgICAgICAgICB0byBpbnZva2UgYSBwYXJ0aXRpb24tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGl0IGxvb2tzCisJICAgICAgICAgICAgZm9yIHRoZSBwbHVnaW4gdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPiBwYXJhbWV0ZXIgZ2l2ZW4gdG8KKyAgICAgICAgICAgICAgICB0aGF0IHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhcnRpdGlvbiBpcyBzZXQgdXAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgICAuLi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisJICAgICAgICAgICAgVGhlIG1ldGhvZHMgZGVmaW5lZCBhcyBjbGFzcyBtZW1iZXJzIG9mIHRoZSBwbHVnaW4KKwkgICAgICAgICAgICBoYXZpbmcgdGhlIG1hdGNoaW5nIDxmaWxlbmFtZT5ib290aW1nLXBjYmlvcy5uYW1lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjbGFzcyBtZW1iZXIgYXJlIHVzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCSAgICAgICAgICAgIFRvIGJlIG1vcmUgY29uY3JldGUsIGhlcmUgaXMgdGhlIHBsdWdpbiBkZWZpbml0aW9uIHRoYXQKKwkgICAgICAgICAgICBtYXRjaGVzIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2UgYm9vdGltZy1wY2Jpb3M8L2ZpbGVuYW1lPiB1c2FnZSwKKyAgICAgICAgICAgICAgICBhbG9uZyB3aXRoIGFuIGV4YW1wbGUKKwkgICAgICAgICAgICBtZXRob2QgY2FsbGVkIGJ5IHRoZSA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICB3aGVuIGl0IG5lZWRzIHRvIGludm9rZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworCSAgICAgICAgICAgIHBhcnRpdGlvbi1wcmVwYXJhdGlvbiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgY2xhc3MgQm9vdGltZ1BjYmlvc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICAgICBuYW1lID0gJ2Jvb3RpbWctcGNiaW9zJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihzZWxmLCBwYXJ0LCAuLi4pCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCSAgICAgICAgICAgIElmIHRoZSBzdWJjbGFzcyBpdHNlbGYgZG9lcyBub3QgaW1wbGVtZW50IGEgZnVuY3Rpb24sIGEKKwkgICAgICAgICAgICBkZWZhdWx0IHZlcnNpb24gaW4gYSBzdXBlcmNsYXNzIGlzIGxvY2F0ZWQgYW5kCisJICAgICAgICAgICAgdXNlZCwgd2hpY2ggaXMgd2h5IGFsbCBwbHVnaW5zIG11c3QgYmUgZGVyaXZlZCBmcm9tCisJICAgICAgICAgICAgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKwkgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNvdXJjZVBsdWdpbjwvZmlsZW5hbWU+IGNsYXNzIGRlZmluZXMgdGhlCisJICAgICAgICAgICAgZm9sbG93aW5nIG1ldGhvZHMsIHdoaWNoIGlzIHRoZSBjdXJyZW50IHNldCBvZiBtZXRob2RzCisJICAgICAgICAgICAgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQgb3Igb3ZlcnJpZGRlbiBieQorCSAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZTwvZmlsZW5hbWU+IHBsdWdpbnMuCisgICAgICAgICAgICAgICAgQW55IG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gc3ViY2xhc3MgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgcHJlc2VudCBpbiB0aGUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKwkgICAgICAgICAgICA8ZmlsZW5hbWU+U291cmNlUGx1Z2luPC9maWxlbmFtZT4gc291cmNlIGZvciBkZXRhaWxzOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBtZXRob2QgcHJlcGFyZXMgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gaW1hZ2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2sgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wcmVwYXJlX3BhcnRpdGlvbigpPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjcmVhdGUgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhIHBhcnRpdGlvbiAoZS5nLiBzeXNsaW51eCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgZ3J1YiBjb25maWd1cmF0aW9uIGZpbGVzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsX2Rpc2soKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVkIGludG8gYSBkaXNrIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBob29rIHRvIGFsbG93IGZpbmFsaXphdGlvbiBvZiBhCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNrIGltYWdlLCAoZS5nLiB3cml0aW5nIGFuIE1CUikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZG9fc3RhZ2VfcGFydGl0aW9uKCk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lhbCBjb250ZW50LXN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcHJlcGFyZV9wYXJ0aXRpb24oKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgbm9ybWFsbHkgZW1wdHkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VHlwaWNhbGx5LCBhIHBhcnRpdGlvbiBqdXN0IHVzZXMgdGhlIHBhc3NlZC1pbgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyAoZS5nLiB0aGUgdW5tb2RpZmllZCB2YWx1ZSBvZgorCQkgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3RpbWdfZGlyPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcyB0aGluZ3MgbWlnaHQgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSB0YWlsb3JlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNlcnRhaW4gZmlsZXMgbWlnaHQgYWRkaXRpb25hbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIHRha2VuIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290aW1nX2RpciArIC9ib290PC9maWxlbmFtZT4uCisJCSAgICAgICAgICAgICAgICBUaGlzIGhvb2sgYWxsb3dzIHRob3NlIGZpbGVzIHRvIGJlIHN0YWdlZCBpbiBhCisJCSAgICAgICAgICAgICAgICBjdXN0b21pemVkIGZhc2hpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2V0X2JpdGJha2VfdmFyKCk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgdG8gYWNjZXNzIG5vbi1zdGFuZGFyZCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHVzZSBmb3IgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNjaGVtZSBpcyBleHRlbnNpYmxlLgorICAgICAgICAgICAgICAgIEFkZGluZyBtb3JlIGhvb2tzIGlzIGEgc2ltcGxlIG1hdHRlciBvZiBhZGRpbmcgbW9yZQorICAgICAgICAgICAgICAgIHBsdWdpbiBtZXRob2RzIHRvIDxmaWxlbmFtZT5Tb3VyY2VQbHVnaW48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICBkZXJpdmVkIGNsYXNzZXMuCisgICAgICAgICAgICAgICAgVGhlIGNvZGUgdGhhdCB0aGVuIG5lZWRzIHRvIGNhbGwgdGhlIHBsdWdpbiBtZXRob2RzIHVzZXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGx1Z2luLmdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoKTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdG8gZmluZCB0aGUgbWV0aG9kIG9yIG1ldGhvZHMgbmVlZGVkIGJ5IHRoZSBjYWxsLgorICAgICAgICAgICAgICAgIFJldHJpZXZhbCBvZiB0aG9zZSBtZXRob2RzIGlzIGFjY29tcGxpc2hlZAorICAgICAgICAgICAgICAgIGJ5IGZpbGxpbmcgdXAgYSBkaWN0IHdpdGgga2V5cworICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG1ldGhvZCBuYW1lcyBvZiBpbnRlcmVzdC4KKyAgICAgICAgICAgICAgICBPbiBzdWNjZXNzLCB0aGVzZSB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHRoZSBhY3R1YWwKKyAgICAgICAgICAgICAgICBtZXRob2RzLgorICAgICAgICAgICAgICAgIFBsZWFzZSBzZWUgdGhlIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBleGFtcGxlcyBhbmQgZGV0YWlscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdvcGVuZW1iZWRkZWQta2lja3N0YXJ0LXdrcy1yZWZlcmVuY2UnPgorICAgICAgICAgICAgPHRpdGxlPk9wZW5FbWJlZGRlZCBLaWNrc3RhcnQgKC53a3MpIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjdXJyZW50IDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cworICAgICAgICAgICAgICAgIG9ubHkgdGhlIGJhc2ljIGtpY2tzdGFydCBwYXJ0aXRpb25pbmcgY29tbWFuZHM6CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhcnRpdGlvbjwvZmlsZW5hbWU+IChvciA8ZmlsZW5hbWU+cGFydDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZm9yIHNob3J0KSBhbmQgPGZpbGVuYW1lPmJvb3Rsb2FkZXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRnV0dXJlIHVwZGF0ZXMgd2lsbCBpbXBsZW1lbnQgbW9yZSBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLCByZXN1bHRzIGNhbiBiZSB1bnByZWRpY3RhYmxlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmRzLCB0aGVpciBzeW50YXgsCisgICAgICAgICAgICAgICAgYW5kIG1lYW5pbmdzLgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kcyBhcmUgYmFzZWQgb24gdGhlIEZlZG9yYQorICAgICAgICAgICAgICAgIGtpY2tzdGFydCB2ZXJzaW9ucyBidXQgd2l0aCBtb2RpZmljYXRpb25zIHRvCisgICAgICAgICAgICAgICAgcmVmbGVjdCA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY2FwYWJpbGl0aWVzLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSBjb21tYW5kcworICAgICAgICAgICAgICAgIGF0IHRoZSBmb2xsb3dpbmcgbGlua3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I3BhcnRfb3JfcGFydGl0aW9uJz5odHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjcGFydF9vcl9wYXJ0aXRpb248L3VsaW5rPgorCQkJICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0FuYWNvbmRhL0tpY2tzdGFydCNib290bG9hZGVyJz5odHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjYm9vdGxvYWRlcjwvdWxpbms+CisJCQkgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbW1hbmQtcGFydC1vci1wYXJ0aXRpb24nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tYW5kOiBwYXJ0IG9yIHBhcnRpdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIHBhcnRpdGlvbiBvbiB0aGUgc3lzdGVtIGFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZyBzeW50YXg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcGFydCA8cmVwbGFjZWFibGU+bW50cG9pbnQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1udHBvaW50PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uIHdpbGwgYmUgbW91bnRlZCBhbmQgbXVzdCBiZSBvZiBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBmb3JtczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+LzxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgPGZpbGVuYW1lPi88L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zd2FwPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhcnRpdGlvbiB3aWxsIGJlIHVzZWQgYXMgc3dhcCBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1zaXplPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW11bSBwYXJ0aXRpb24gc2l6ZSBpbiBNQnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSBhbiBpbnRlZ2VyIHZhbHVlIHN1Y2ggYXMgNTAwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBhcHBlbmQgdGhlIG51bWJlciB3aXRoICJNQiIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRoaXMgb3B0aW9uIGlmIHlvdSB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tc291cmNlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LXNwZWNpZmljIG9wdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0IHBvcHVsYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vc3QgY29tbW9uIHZhbHVlIGZvciB0aGlzIG9wdGlvbiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb290ZnMiLCBidXQgeW91IGNhbiB1c2UgYW55IHZhbHVlIHRoYXQgbWFwcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgdmFsaWQgc291cmNlIHBsdWdpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHNvdXJjZSBwbHVnaW5zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J29wZW5lbWJlZGRlZC1raWNrc3RhcnQtcGx1Z2lucyc+UGx1Z2luczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLXNvdXJjZSByb290ZnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2ljPC9maWxlbmFtZT4gY3JlYXRlcyBhIHBhcnRpdGlvbiBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlIGFzIG5lZWRlZCBhbmQgdG8gZmlsbCBpdCB3aXRoIHRoZSBjb250ZW50cyBvZgorCQkJICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gcG9pbnRlZCB0byBieSB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LXI8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uCisJCQkgICAgICAgICAgICAgICAgb3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKwkJCSAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzeXN0ZW0gdHlwZSB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gaXMgZHJpdmVuIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1mc3R5cGU8L2ZpbGVuYW1lPiBvcHRpb24KKwkJCSAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZm9yIHRoZSBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBlbnRyeSBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tLWZzdHlwZTwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCQkJICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tc291cmNlIDxyZXBsYWNlYWJsZT5wbHVnaW4tbmFtZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+IGNyZWF0ZXMgYSBwYXJ0aXRpb24gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZSBhcyBuZWVkZWQgYW5kIGZpbGxzIGl0IHdpdGggdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbiB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGx1Z2luIG5hbWUgdXNpbmcgdGhlIGRhdGEgcG9pbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJ5IHRoZSA8ZmlsZW5hbWU+LXI8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb3IgdGhlIGVxdWl2YWxlbnQgcm9vdGZzIGRlcml2ZWQgZnJvbSB0aGUKKwkJCSAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKwkJCSAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhY3RseSB3aGF0IHRob3NlIGNvbnRlbnRzIGFuZAorCQkJICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gdHlwZSBlbmQgdXAgYmVpbmcgYXJlIGRlcGVuZGVudAorCQkJICAgICAgICAgICAgICAgIG9uIHRoZSBnaXZlbiBwbHVnaW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4tLW9uZGlzazwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4tLW9uZHJpdmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlcyB0aGUgcGFydGl0aW9uIHRvIGJlIGNyZWF0ZWQgb24gYSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tZnN0eXBlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSBmaWxlIHN5c3RlbSB0eXBlIGZvciB0aGUgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkIHZhbHVlcyBhcmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5leHQ0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idHJmczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNxdWFzaGZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c3dhcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+LS1mc29wdGlvbnM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGZyZWUtZm9ybSBzdHJpbmcgb2Ygb3B0aW9ucyB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgd2hlbiBtb3VudGluZyB0aGUgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0cmluZyB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4gZmlsZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgc3lzdGVtIGFuZCBzaG91bGQgYmUgZW5jbG9zZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgImRlZmF1bHRzIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tbGFiZWwgbGFiZWw8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGFiZWwgdG8gZ2l2ZSB0byB0aGUgZmlsZXN5c3RlbSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIG1hZGUgb24gdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgZ2l2ZW4gbGFiZWwgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0sIGEgbmV3IGxhYmVsIGlzIGNyZWF0ZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tYWN0aXZlPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrcyB0aGUgcGFydGl0aW9uIGFzIGFjdGl2ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tYWxpZ24gKGluIEtCeXRlcyk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIGlzIGEgPGZpbGVuYW1lPndpYzwvZmlsZW5hbWU+LXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIHRoYXQgc2F5cyB0byBzdGFydCBhIHBhcnRpdGlvbiBvbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggS0J5dGVzIGJvdW5kYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb21tYW5kLWJvb3Rsb2FkZXInPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db21tYW5kOiBib290bG9hZGVyPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgc3BlY2lmaWVzIGhvdyB0aGUgYm9vdCBsb2FkZXIgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgYW5kIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBCb290bG9hZGVyIGZ1bmN0aW9uYWxpdHkgYW5kIGJvb3QgcGFydGl0aW9ucyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkIGJ5IHRoZSB2YXJpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS1zb3VyY2U8L2ZpbGVuYW1lPgorCQkJICAgICAgICAgICAgcGx1Z2lucyB0aGF0IGltcGxlbWVudCBib290bG9hZGVyIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYm9vdGxvYWRlciBjb21tYW5kIGVzc2VudGlhbGx5IHByb3ZpZGVzIGEgbWVhbnMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeWluZyBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tdGltZW91dDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlciB0aW1lcyBvdXQgYW5kIGJvb3RzIHRoZSBkZWZhdWx0IG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPi0tYXBwZW5kPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMga2VybmVsIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgcGFyYW1ldGVycyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzeXNsaW51eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncnViPC9maWxlbmFtZT4ga2VybmVsIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIEtlcm5lbDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25maWd1cmluZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgY29uc2lzdHMgb2YgbWFraW5nIHN1cmUgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgaGFzIGFsbCB0aGUgcmlnaHQgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGluIGl0IGZvciB0aGUgaW1hZ2UgeW91IGFyZSBidWlsZGluZy4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvb2wgYW5kCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZyYWdtZW50cyB0byBtYWtlIHN1cmUgeW91cgorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIGp1c3QgaG93IHlvdSBuZWVkIGl0LgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNhdmUga25vd24gY29uZmlndXJhdGlvbnMgaW4gYQorICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGNhbiB1c2UKKyAgICAgICAgICAgIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gdXNlIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sCisgICAgICAgICAgICBjcmVhdGUgYW5kIHVzZSBjb25maWd1cmF0aW9uIGZyYWdtZW50cywgYW5kIGhvdyB0byBpbnRlcmFjdGl2ZWx5CisgICAgICAgICAgICBtb2RpZnkgeW91ciA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgbGVhbmVzdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIHBvc3NpYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1tZW51Y29uZmlnJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyZuYnNwOyZuYnNwOzxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZGVmaW5lIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpcyB0byBzZXQgdGhlbSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgcHJvdmlkZXMgYW4gaW50ZXJhY3RpdmUgbWV0aG9kIHdpdGggd2hpY2gKKyAgICAgICAgICAgICAgICB0byBzZXQga2VybmVsIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVudWNvbmZpZyc+PC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHlvdSBtdXN0IGxhdW5jaCBpdCB1c2luZyBCaXRCYWtlLgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBlbnZpcm9ubWVudCBtdXN0IGJlIHNldCB1cCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc2NyaXB0IGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIGJlIHN1cmUgb2YgdGhlIHN0YXRlIG9mIHlvdXIgYnVpbGQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBydW4gPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFzc3VtaW5nIHRoZSBTb3VyY2UgRGlyZWN0b3J5J3MgdG9wLWxldmVsIGZvbGRlciBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5+L3Bva3k8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgcG9reQorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBjb21lcyB1cCwgaXRzIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGFsbG93cyB5b3UgdG8gaW50ZXJhY3RpdmVseSBleGFtaW5lIGFuZCBjb25maWd1cmUKKyAgICAgICAgICAgICAgICBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgQWZ0ZXIgbWFraW5nIHlvdXIgY2hhbmdlcywgc2ltcGx5IGV4aXQgdGhlIHRvb2wgYW5kIHNhdmUgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8gY3JlYXRlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSB0aGF0IGNvbmZpZ3VyZXMgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmVjb2duaXplcyB0aGlzIGtlcm5lbCBhcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgZnJvbSB0aGUgc2hlbGwgaW4gd2hpY2ggeW91IHByZXZpb3VzbHkgc291cmNlZCB0aGUKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBpbml0aWFsaXphdGlvbiBzY3JpcHQgY2xlYW5zIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIHRoZW4gcnVucyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIG1lbnVjb25maWcKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiBsYXVuY2hlcywgdXNlIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBzZWxlY3Rpb25zIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4KKyAgICAgICAgICAgICAgICB3aGljaCB5b3UgYXJlIGludGVyZXN0ZWQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSA8ZmlsZW5hbWU+Q09ORklHX1NNUDwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaXQgYXQgPGZpbGVuYW1lPlByb2Nlc3NvciBUeXBlIGFuZCBGZWF0dXJlczwvZmlsZW5hbWU+IHVuZGVyCisgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gc2VsZWN0aW9uIDxmaWxlbmFtZT5TeW1tZXRyaWMgTXVsdGktcHJvY2Vzc2luZyBTdXBwb3J0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQWZ0ZXIgaGlnaGxpZ2h0aW5nIHRoZSBzZWxlY3Rpb24sIHVzZSB0aGUgYXJyb3cga2V5cyB0byBzZWxlY3Qgb3IgZGVzZWxlY3QKKyAgICAgICAgICAgICAgICB0aGUgc2V0dGluZy4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCBhbGwgeW91ciBzZWxlY3Rpb25zLCBleGl0IG91dCBhbmQgc2F2ZSB0aGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTYXZpbmcgdGhlIHNlbGVjdGlvbnMgdXBkYXRlcyB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZmlsZSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhbmQgZXhhbWluZSB0aGlzIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvd29yay88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgYWN0dWFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gaXMgbG9jYXRlZCBpbiB0aGUgYXJlYSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBrZXJuZWwgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3ZXJlIGJ1aWxkaW5nIGEgTGludXggWW9jdG8ga2VybmVsIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIExpbnV4IDMuMTQga2VybmVsIGFuZCB5b3Ugd2VyZSBidWlsZGluZyBhIFFFTVUgaW1hZ2UgdGFyZ2V0ZWQgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPng4NjwvZmlsZW5hbWU+IGFyY2hpdGVjdHVyZSwgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHdvdWxkIGJlIGxvY2F0ZWQgaGVyZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLTMuMTQuMTErZ2l0MSs4NGYuLi4KKyAgICAgICAgLi4uNjU2ZWQzMC1yMS9saW51eC1xZW11eDg2LXN0YW5kYXJkLWJ1aWxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgZXhhbXBsZSBkaXJlY3RvcnkgaXMgYXJ0aWZpY2lhbGx5IHNwbGl0IGFuZCBtYW55IG9mIHRoZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBhY3R1YWwgZmlsZW5hbWUgYXJlIG9taXR0ZWQgaW4gb3JkZXIgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlLgorICAgICAgICAgICAgICAgICAgICBBbHNvLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB5b3UgYXJlIHVzaW5nLCB0aGUgZXhhY3QgcGF0aG5hbWUKKyAgICAgICAgICAgICAgICAgICAgZm9yIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0Li4uPC9maWxlbmFtZT4gbWlnaHQgZGlmZmVyLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2l0aGluIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHlvdSBjYW4gc2VlIHRoZSBrZXJuZWwgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZW50cnkgc2hvd3MgdGhhdCBzeW1tZXRyaWMgbXVsdGktcHJvY2Vzc29yIHN1cHBvcnQKKyAgICAgICAgICAgICAgICBpcyBub3Qgc2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgdG8gaXNvbGF0ZSBjaGFuZ2VkIGNvbmZpZ3VyYXRpb25zIGlzIHRvIHVzZSBhIGNvbWJpbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbCBhbmQgc2ltcGxlIHNoZWxsIGNvbW1hbmRzLgorICAgICAgICAgICAgICAgIEJlZm9yZSBjaGFuZ2luZyBjb25maWd1cmF0aW9ucyB3aXRoIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4sIGNvcHkgdGhlCisgICAgICAgICAgICAgICAgZXhpc3RpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBhbmQgcmVuYW1lIGl0IHRvIHNvbWV0aGluZyBlbHNlLAorICAgICAgICAgICAgICAgIHVzZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHRvIG1ha2UKKyAgICAgICAgICAgICAgICBhcyBtYW55IGNoYW5nZXMgYXMgeW91IHdhbnQgYW5kIHNhdmUgdGhlbSwgdGhlbiBjb21wYXJlIHRoZSByZW5hbWVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGFnYWluc3QgdGhlIG5ld2x5IGNyZWF0ZWQgZmlsZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgcmVzdWx0aW5nIGRpZmZlcmVuY2VzIGFzIHlvdXIgYmFzZSB0byBjcmVhdGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICB0byBwZXJtYW5lbnRseSBzYXZlIGluIHlvdXIga2VybmVsIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGFuZCBkb24ndCBqdXN0CisgICAgICAgICAgICAgICAgICAgIHJlbmFtZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyBhbiBleGlzdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdG8gd29yay4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1kZWZjb25maWctZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSZuYnNwOyZuYnNwOzxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBpcyBzaW1wbHkgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gcmVuYW1lZCB0byAiZGVmY29uZmlnIi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgdG8gcmV0YWluIGEga25vd24gc2V0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9ucyBmcm9tIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGRyYXcgdG8gY3JlYXRlIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgT3V0LW9mLXRoZS1ib3gsIHRoZSBZb2N0byBQcm9qZWN0IG5ldmVyIHNoaXBzIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIHVzZWQgdG8gY29uZmlndXJlIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4sIHN0YXJ0IHdpdGggYQorICAgICAgICAgICAgICAgIGNvbXBsZXRlLCB3b3JraW5nIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICBDb3B5IHRoYXQgZmlsZSB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBhbmQgcmVuYW1lCisgICAgICAgICAgICAgICAgdGhlIGNvcGllZCBmaWxlIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIGhvdyB0byBzZWFyY2ggZm9yIHRoZSBmaWxlLCB3aGlsZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGV4dGVuZHMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSAoc2VhcmNoIGRpcmVjdG9yaWVzKSB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1BOfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSB5b3UgY3JlYXRlZCB0byBob2xkIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZSBjb25maWd1cmF0aW9ucyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnQgY29uZmlndXJhdGlvbiBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgYW5kIGFueSBjb25maWd1cmF0aW9uIGZyYWdtZW50cyB5b3UgcHJvdmlkZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IGlmIHlvdSBoYXZlIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgYXBwbHlpbmcgdGhlIGV4aXN0aW5nIGRlZmNvbmZpZyBmaWxlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNjaGFuZ2luZy10aGUtY29uZmlndXJhdGlvbic+Q2hhbmdpbmcgdGhlIENvbmZpZ3VyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbnMsIGJvdGggaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50CisgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0aW5nIENvbmZpZ3VyYXRpb24gRnJhZ21lbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBmcmFnbWVudHMgYXJlIHNpbXBseSBrZXJuZWwgb3B0aW9ucyB0aGF0IGFwcGVhciBpbiBhIGZpbGUKKyAgICAgICAgICAgICAgICBwbGFjZWQgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGZpbmQgYW5kIGFwcGx5IHRoZW0uCisgICAgICAgICAgICAgICAgU3ludGFjdGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGVtZW50IGlzIGlkZW50aWNhbCB0byB3aGF0IHdvdWxkIGFwcGVhcgorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRtcC93b3JrLzxyZXBsYWNlYWJsZT5hcmNoPC9yZXBsYWNlYWJsZT4tcG9reS1saW51eC9saW51eC15b2N0by08cmVwbGFjZWFibGU+cmVsZWFzZV9zcGVjaWZpY19zdHJpbmc8L3JlcGxhY2VhYmxlPi9saW51eC08cmVwbGFjZWFibGU+YXJjaDwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5idWlsZF90eXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0IGlzIHNpbXBsZSB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpc3N1aW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgc2hlbGwgY3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKKyAgICAgICAgICAgICAgICBmaWxlIG5hbWVkIDxmaWxlbmFtZT5teV9zbXAuY2ZnPC9maWxlbmFtZT4gdGhhdCBlbmFibGVzIG11bHRpLXByb2Nlc3NvciBzdXBwb3J0CisgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBrZXJuZWw6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGVjaG8gIkNPTkZJR19TTVA9eSIgPj4gbXlfc21wLmNmZworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQWxsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZXMgbXVzdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGluIG9yZGVyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byByZWNvZ25pemUgdGhlbSBhcyBhCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVyZSBkbyB5b3UgcHV0IHlvdXIgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcz8KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBsYWNlIHRoZXNlIGZpbGVzIGluIHRoZSBzYW1lIGFyZWEgcG9pbnRlZCB0byBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGlja3MgdXAgdGhlIGNvbmZpZ3VyYXRpb24gYW5kCisgICAgICAgICAgICAgICAgYWRkcyBpdCB0byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGFkIGEgc2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICAgICAgICAgIGluIGEgZmlsZSBjYWxsZWQgPGZpbGVuYW1lPm15Y29uZmlnLmNmZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIElmIHlvdSBwdXQgdGhhdCBmaWxlIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0bzwvZmlsZW5hbWU+IHRoYXQgcmVzaWRlcyBpbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBhcyB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUgYW5kIHRoZW4gYWRkIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHN0YXRlbWVudCBzdWNoIGFzIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsJ3MgYXBwZW5kIGZpbGUsIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICAgICAgICAgIHdpbGwgYmUgcGlja2VkIHVwIGFuZCBhcHBsaWVkIHdoZW4gdGhlIGtlcm5lbCBpcyBidWlsdC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9teWNvbmZpZy5jZmciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgeW91IGNhbiBncm91cCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGludG8gbXVsdGlwbGUgZmlsZXMgYW5kCisgICAgICAgICAgICAgICAgbmFtZSB0aGVtIGFsbCBpbiB0aGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGdyb3VwIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb25zIHNwZWNpZmljYWxseSBmb3IgRXRoZXJuZXQgYW5kIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgaW50byB0aGVpciBvd24gZmlsZXMgYW5kIGFkZCB0aG9zZSBieSB1c2luZyBhIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IGxpa2UgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGluIHlvdXIgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vbXljb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ldGguY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nZnguY2ZnIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdmaW5lLXR1bmluZy10aGUta2VybmVsLWNvbmZpZ3VyYXRpb24tZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+RmluZS1UdW5pbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG1ha2Ugc3VyZSB0aGUgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzIGFzIGxlYW4gb3IgZWZmaWNpZW50IGFzCisgICAgICAgICAgICAgICAgcG9zc2libGUgYnkgcmVhZGluZyB0aGUgb3V0cHV0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudCBhdWRpdCwKKyAgICAgICAgICAgICAgICBub3RpbmcgYW55IGlzc3VlcywgbWFraW5nIGNoYW5nZXMgdG8gY29ycmVjdCB0aGUgaXNzdWVzLCBhbmQgdGhlbiByZXBlYXRpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHBhcnQgb2YgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzayBydW5zLgorICAgICAgICAgICAgICAgIFRoaXMgdGFzayB2YWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGJ5IGNoZWNraW5nIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhZ2FpbnN0IHRoZSBpbnB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGNoZWNrLCB0aGUgdGFzayBwcm9kdWNlcyB3YXJuaW5nIG1lc3NhZ2VzIGZvciB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaXNzdWVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXF1ZXN0ZWQgb3B0aW9ucyB0aGF0IGRpZCBub3QgbWFrZSB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyYXRpb24gaXRlbXMgdGhhdCBhcHBlYXIgdHdpY2UgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmF0aW9uIGl0ZW1zIHRhZ2dlZCBhcyAicmVxdWlyZWQiIHRoYXQgd2VyZSBvdmVycmlkZGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGJvYXJkIG92ZXJyaWRlcyBhIG5vbi1ib2FyZCBzcGVjaWZpYyBvcHRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MaXN0ZWQgb3B0aW9ucyBub3QgdmFsaWQgZm9yIHRoZSBrZXJuZWwgYmVpbmcgcHJvY2Vzc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBvcHRpb24gZG9lcyBub3QgYXBwZWFyIGFueXdoZXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2sgY2FuCisgICAgICAgICAgICAgICAgICAgIGFsc28gb3B0aW9uYWxseSByZXBvcnQgaWYgYW4gb3B0aW9uIGlzIG92ZXJyaWRkZW4gZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZWFjaCBvdXRwdXQgd2FybmluZywgYSBtZXNzYWdlIHBvaW50cyB0byB0aGUgZmlsZQorICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBvcHRpb25zIGFuZCBhIHBvaW50ZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudCB0aGF0IGRlZmluZXMgdGhlbS4KKyAgICAgICAgICAgICAgICBDb2xsZWN0aXZlbHksIHRoZSBmaWxlcyBhcmUgdGhlIGtleSB0byBzdHJlYW1saW5pbmcgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc3RyZWFtbGluZSB0aGUgY29uZmlndXJhdGlvbiwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB3aXRoIGEgZnVsbCBjb25maWd1cmF0aW9uIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBrbm93IHdvcmtzIC0gaXQgYnVpbGRzIGFuZCBib290cyBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGJlIHlvdXIgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlcGFyYXRlbHkgcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NvbmZpZ21lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRha2UgdGhlIHJlc3VsdGluZyBsaXN0IG9mIGZpbGVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fa2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gdGFzaworICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgYW5kIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJvcCB2YWx1ZXMgdGhhdCBhcmUgcmVkZWZpbmVkIGluIHRoZSBmcmFnbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgZG8gbm90IGNoYW5nZSB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emUgYW5kIHBvdGVudGlhbGx5IGRyb3AgdmFsdWVzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB0aGF0IG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5emUgYW5kIHBvdGVudGlhbGx5IHJlbW92ZSBub24tYm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgcmVwZWF0ZWQgYW5kIGludmFsaWQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgd29ya2VkIHRocm91Z2ggdGhlIG91dHB1dCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGF1ZGl0LCB5b3UgY2FuIHJlLXJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb25maWdtZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2tlcm5lbF9jb25maWdjaGVjazwvZmlsZW5hbWU+IHRhc2tzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbW9yZSBpc3N1ZXMsIHlvdSBjYW4gZGVhbCB3aXRoIHRoZW0gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0ZXJhdGl2ZWx5IHdvcmtpbmcgdGhyb3VnaCBzdGVwcyB0d28gdGhyb3VnaCBmb3VyIGV2ZW50dWFsbHkgeWllbGRzCisgICAgICAgICAgICAgICAgYSBtaW5pbWFsLCBzdHJlYW1saW5lZCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgYmVzdCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+LCB5b3UgY2FuIGJ1aWxkIHRoZSBMaW51eAorICAgICAgICAgICAgICAgIFlvY3RvIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwYXRjaGluZy10aGUta2VybmVsIj4KKyAgICAgICAgPHRpdGxlPlBhdGNoaW5nIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGF0Y2hpbmcgdGhlIGtlcm5lbCBpbnZvbHZlcyBjaGFuZ2luZyBvciBhZGRpbmcgY29uZmlndXJhdGlvbnMgdG8gYW4gZXhpc3Rpbmcga2VybmVsLAorICAgICAgICAgICAgY2hhbmdpbmcgb3IgYWRkaW5nIHJlY2lwZXMgdG8gdGhlIGtlcm5lbCB0aGF0IGFyZSBuZWVkZWQgdG8gc3VwcG9ydCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcywKKyAgICAgICAgICAgIG9yIGV2ZW4gYWx0ZXJpbmcgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8ta2VybmVsPC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiB0byBtYW5hZ2Uga2VybmVsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjbWFuYWdpbmcta2VybmVsLXBhdGNoZXMtYW5kLWNvbmZpZy1pdGVtcy13aXRoLXlvY3RvLWtlcm5lbCc+TWFuYWdpbmcga2VybmVsIFBhdGNoZXMgYW5kIENvbmZpZyBJdGVtcyB3aXRoIHlvY3RvLWtlcm5lbDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZSBmb3IKKyAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLjwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBzaW1wbGUgcGF0Y2ggYnkgYWRkaW5nIHNvbWUgUUVNVSBlbXVsYXRvciBjb25zb2xlCisgICAgICAgICAgICBvdXRwdXQgYXQgYm9vdCB0aW1lIHRocm91Z2ggPGZpbGVuYW1lPnByaW50azwvZmlsZW5hbWU+IHN0YXRlbWVudHMgaW4gdGhlIGtlcm5lbCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBzb3VyY2UgY29kZSBmaWxlLgorICAgICAgICAgICAgQXBwbHlpbmcgdGhlIHBhdGNoIGFuZCBib290aW5nIHRoZSBtb2RpZmllZCBpbWFnZSBjYXVzZXMgdGhlIGFkZGVkCisgICAgICAgICAgICBtZXNzYWdlcyB0byBhcHBlYXIgb24gdGhlIGVtdWxhdG9yJ3MgY29uc29sZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4YW1wbGUgYXNzdW1lcyBhIGNsZWFuIGJ1aWxkIGV4aXN0cyBmb3IgdGhlIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4KKyAgICAgICAgICAgIG1hY2hpbmUgaW4gYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiBpcworICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gYW5kIGlzIGxvY2F0ZWQgaW4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIHRoZSBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuNCBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFsc28sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhdGNoaW5nIHRoZSBrZXJuZWwsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjYXBwbHlpbmctcGF0Y2hlcyc+QXBwbHlpbmcgUGF0Y2hlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0ZS1hLWxheWVyLWZvci15b3VyLWNoYW5nZXMnPgorICAgICAgICAgICAgPHRpdGxlPkNyZWF0ZSBhIExheWVyIGZvciB5b3VyIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3Qgc3RlcCBpcyB0byBjcmVhdGUgYSBsYXllciBzbyB5b3UgY2FuIGlzb2xhdGUgeW91cgorICAgICAgICAgICAgICAgIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgUmF0aGVyIHRoYW4gdXNlIHRoZSA8ZmlsZW5hbWU+eW9jdG8tbGF5ZXI8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIGxheWVyLCB0aGlzIGV4YW1wbGUgc3RlcHMgdGhyb3VnaCB0aGUgcHJvY2VzcworICAgICAgICAgICAgICAgIGJ5IGhhbmQuCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgaW5mb3JtYXRpb24gb24gdGhlIHNjcmlwdCB0aGF0IGNyZWF0ZXMgYSBnZW5lcmFsCisgICAgICAgICAgICAgICAgbGF5ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmctYS1nZW5lcmFsLWxheWVyLXVzaW5nLXRoZS15b2N0by1sYXllci1zY3JpcHQnPkNyZWF0aW5nIGEgR2VuZXJhbCBMYXllciBVc2luZyB0aGUgeW9jdG8tbGF5ZXIgU2NyaXB0PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSB0d28gY29tbWFuZHMgY3JlYXRlIGEgZGlyZWN0b3J5IHlvdSBjYW4gdXNlIGZvciB5b3VyCisgICAgICAgICAgICAgICAgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIG1rZGlyIG1ldGEtbXlsYXllcgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBDcmVhdGluZyBhIGRpcmVjdG9yeSB0aGF0IGZvbGxvd3MgdGhlIFlvY3RvIFByb2plY3QgbGF5ZXIgbmFtaW5nCisgICAgICAgICAgICAgICAgY29udmVudGlvbnMgc2V0cyB1cCB0aGUgbGF5ZXIgZm9yIHlvdXIgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBUaGUgbGF5ZXIgaXMgd2hlcmUgeW91IHBsYWNlIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcywgYXBwZW5kCisgICAgICAgICAgICAgICAgZmlsZXMsIGFuZCBwYXRjaCBmaWxlcy4KKyAgICAgICAgICAgICAgICBUbyBsZWFybiBtb3JlIGFib3V0IGNyZWF0aW5nIGEgbGF5ZXIgYW5kIGZpbGxpbmcgaXQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBmaWxlcyB5b3UgbmVlZCwgc2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nCisgICAgICAgICAgICAgICAgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmluZGluZy10aGUta2VybmVsLXNvdXJjZS1jb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5GaW5kaW5nIHRoZSBLZXJuZWwgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIHRpbWUgeW91IGJ1aWxkIGEga2VybmVsIGltYWdlLCB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQKKyAgICAgICAgICAgICAgICBhbmQgdW5wYWNrZWQgaW50byB0aGUgZm9sbG93aW5nIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7U30vbGludXgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz5GaW5kaW5nIFRlbXBvcmFyeSBTb3VyY2UgQ29kZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBhbmQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHNvdXJjZSBpcyBrZXB0IGR1cmluZyBhIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCB3ZSBhcmUgZ29pbmcgdG8gcGF0Y2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXQvY2FsaWJyYXRlLmM8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgYnkgYWRkaW5nIHNvbWUgc2ltcGxlIGNvbnNvbGUgPGZpbGVuYW1lPnByaW50azwvZmlsZW5hbWU+IHN0YXRlbWVudHMgdGhhdCB3ZSBjYW4KKyAgICAgICAgICAgICAgICBzZWUgd2hlbiB3ZSBib290IHRoZSBpbWFnZSB1c2luZyBRRU1VLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1wYXRjaCc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIFBhdGNoPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHdvIG1ldGhvZHMgZXhpc3QgYnkgd2hpY2ggeW91IGNhbiBjcmVhdGUgdGhlIHBhdGNoOgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3VzaW5nLWRldnRvb2wtaW4teW91ci13b3JrZmxvdyc+PGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+UXVpbHQ8L2xpbms+LgorICAgICAgICAgICAgICAgIEZvciBrZXJuZWwgcGF0Y2hlcywgdGhlIEdpdCB3b3JrZmxvdyBpcyBtb3JlIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBhc3N1bWVzIHRoZSBHaXQgd29ya2Zsb3cgYW5kIHNob3dzIHRoZSBzdGVwcyBzcGVjaWZpYyB0bworICAgICAgICAgICAgICAgIHRoaXMgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIHRvIHdoZXJlIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVmb3JlIG1ha2luZworICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBlZGl0cyB0byB0aGUgPGZpbGVuYW1lPmNhbGlicmF0ZS5jPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLSR7UFZ9LSR7UFJ9L2xpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBhcmUgd29ya2luZyBpbiBhbiBlc3RhYmxpc2hlZCBHaXQgcmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBtdXN0IGJlIGluIHRoaXMgZGlyZWN0b3J5IGluIG9yZGVyIHRvIGNvbW1pdCB5b3VyIGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjcmVhdGUgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT5UaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnQgdGhlIHZlcnNpb24gYW5kIHJldmlzaW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IHZhcmlhYmxlIGluY2x1ZGVzIHRoZSBHaXQgbWV0YSBhbmQgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hlcywgd2hpY2ggbWFrZSB0aGUgZGlyZWN0b3J5IG5hbWUgbG9uZ2VyIHRoYW4geW91IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVkaXQgdGhlIHNvdXJjZSBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBFZGl0IHRoZSA8ZmlsZW5hbWU+aW5pdC9jYWxpYnJhdGUuYzwvZmlsZW5hbWU+IGZpbGUgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB2b2lkIGNhbGlicmF0ZV9kZWxheSh2b2lkKQorICAgICB7CisgICAgICAgICB1bnNpZ25lZCBsb25nIGxwajsKKyAgICAgICAgIHN0YXRpYyBib29sIHByaW50ZWQ7CisgICAgICAgICBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKyAgICAgICAgIHByaW50aygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgICBwcmludGsoIiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiIpOworICAgICAgICAgcHJpbnRrKCIqICAgICAgICBIRUxMTyBZT0NUTyBLRVJORUwgICAgICAgICAqXG4iKTsKKyAgICAgICAgIHByaW50aygiKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuIik7CisgICAgICAgICBwcmludGsoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCisgICAgIAlpZiAocGVyX2NwdShjcHVfbG9vcHNfcGVyX2ppZmZ5LCB0aGlzX2NwdSkpIHsKKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFnZSBhbmQgY29tbWl0IHlvdXIgY2hhbmdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgR2l0IGNvbW1hbmRzIGRpc3BsYXkgdGhlIG1vZGlmaWVkIGZpbGUsIHN0YWdlIGl0LCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0IHRoZSBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgJCBnaXQgYWRkIGluaXQvY2FsaWJyYXRlLmMKKyAgICAgJCBnaXQgY29tbWl0IC1tICJjYWxpYnJhdGU6IEFkZCBwcmludGsgZXhhbXBsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZW5lcmF0ZSB0aGUgcGF0Y2ggZmlsZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBHaXQgY29tbWFuZCBjcmVhdGVzIHRoZSBhIHBhdGNoIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4wMDAxLWNhbGlicmF0ZS1BZGQtcHJpbnRrLWV4YW1wbGUucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPlRoZXNlIHN0ZXBzIGdldCB5b3VyIGxheWVyIHNldCB1cCBmb3IgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYWRkaXRpb25hbCBzdHJ1Y3R1cmU8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSB0aGUgYWRkaXRpb25hbCBsYXllciBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5L21ldGEtbXlsYXllcgorICAgICAkIG1rZGlyIGNvbmYKKyAgICAgJCBta2RpciByZWNpcGVzLWtlcm5lbAorICAgICAkIG1rZGlyIHJlY2lwZXMta2VybmVsL2xpbnV4CisgICAgICQgbWtkaXIgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhvbGRzIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhvbGRzIHlvdXIgYXBwZW5kIGZpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBwYXRjaCBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgbGF5ZXIgY29uZmlndXJhdGlvbiBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorICAgICBCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKworICAgICAjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKyAgICAgICAgICAgICAgICAgJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYmFwcGVuZCIKKworICAgICBCQkZJTEVfQ09MTEVDVElPTlMgKz0gIm15bGF5ZXIiCisgICAgIEJCRklMRV9QQVRURVJOX215bGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BSSU9SSVRZX215bGF5ZXIgPSAiNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWNlIDxmaWxlbmFtZT5teWxheWVyPC9maWxlbmFtZT4gYXMgcGFydCBvZiB0aGUgbGFzdCB0aHJlZQorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIHRoZSBrZXJuZWwgcmVjaXBlIGFwcGVuZCBmaWxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5IGFuZCBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG9fMy40LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgZW5hYmxlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGZpbmQgdGhlIHBhdGNoIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBhcHBlbmQgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QdXQgdGhlIHBhdGNoIGZpbGUgaW4geW91ciBsYXllcjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTW92ZSB0aGUgPGZpbGVuYW1lPjAwMDEtY2FsaWJyYXRlLUFkZC1wcmludGstZXhhbXBsZS5wYXRjaDwvZmlsZW5hbWU+IGZpbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS1teWxheWVyL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldC11cC1mb3ItdGhlLWJ1aWxkJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXQgVXAgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvIHRoZSBmb2xsb3dpbmcgdG8gbWFrZSBzdXJlIHRoZSBidWlsZCBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgZm9yIHRoZSBleGFtcGxlLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IHNldCB1cCB0aGVzZSBidWlsZCBwYXJhbWV0ZXJzLCB0aGV5IGRvIG5vdCBoYXZlIHRvIGNoYW5nZSB1bmxlc3MgeW91CisgICAgICAgICAgICAgICAgY2hhbmdlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtYWNoaW5lIHlvdSBhcmUgYnVpbGRpbmc6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBmb3IgdGhlIGNvcnJlY3QgdGFyZ2V0IGFyY2hpdGVjdHVyZTo8L2VtcGhhc2lzPiBZb3VyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiwgd2hpY2ggc3BlY2lmaWVzIGEgMzItYml0CisgICAgICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPiBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lIHN1aXRhYmxlIGZvciB0aGUgUUVNVSBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JZGVudGlmeSB5b3VyIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXI6PC9lbXBoYXNpcz4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQvY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBuZWVkcyB0byBoYXZlIHRoZSBwYXRoIHRvIHlvdXIgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW15bGF5ZXI8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJMQVlFUlM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBjb250YWlucyBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIHBhdGggdG8geW91ciA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTEFZRVJTID89ICIgXAorICAgICAgICRIT01FL3Bva3kvbWV0YSBcCisgICAgICAgJEhPTUUvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAkSE9NRS9wb2t5L21ldGEtbXlsYXllciBcCisgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXRoZS1tb2RpZmllZC1xZW11LWtlcm5lbC1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgdGhlIE1vZGlmaWVkIFFFTVUgS2VybmVsIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBidWlsZCB5b3VyIG1vZGlmaWVkIGtlcm5lbCBpbWFnZToKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IGlzIGluaXRpYWxpemVkPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGVudmlyb25tZW50IHNob3VsZCBiZSBzZXQgdXAgc2luY2UgeW91IHByZXZpb3VzbHkgc291cmNlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIGl0IGlzIG5vdCwgc291cmNlIHRoZSBzY3JpcHQgYWdhaW4gZnJvbSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4vcG9reQorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2xlYW4gdXA8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gY2xlYW4gdGhlIHNoYXJlZCBzdGF0ZSBvdXQgYnkgdXNpbmcgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIGZyb20gd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXZlciByZW1vdmUgYW55IGZpbGVzIGJ5IGhhbmQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx3YXlzIHVzZSB0aGUgdmFyaW91cyBCaXRCYWtlIGNsZWFuIHRhc2tzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgb3V0IHByZXZpb3VzIGJ1aWxkIGFydGlmYWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIGNsZWFuIHRhc2tzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbic+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmRvX2NsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucyBhbGwgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBOZXh0LCBidWlsZCB0aGUga2VybmVsIGltYWdlIHVzaW5nIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1rIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdib290LXRoZS1pbWFnZS1hbmQtdmVyaWZ5LXlvdXItY2hhbmdlcyc+CisgICAgICAgICAgICA8dGl0bGU+Qm9vdCB0aGUgSW1hZ2UgYW5kIFZlcmlmeSBZb3VyIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVzZSBzdGVwcyBib290IHRoZSBpbWFnZSBhbmQgYWxsb3cgeW91IHRvIHNlZSB0aGUgY2hhbmdlcworICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb290IHRoZSBpbWFnZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgQm9vdCB0aGUgbW9kaWZpZWQgaW1hZ2UgaW4gdGhlIFFFTVUgZW11bGF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBydW5xZW11IHFlbXV4ODYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WZXJpZnkgdGhlIGNoYW5nZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZyBpbnRvIHRoZSBtYWNoaW5lIHVzaW5nIDxmaWxlbmFtZT5yb290PC9maWxlbmFtZT4gd2l0aCBubyBwYXNzd29yZCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSBmb2xsb3dpbmcgc2hlbGwgY29tbWFuZCB0byBzY3JvbGwgdGhyb3VnaCB0aGUgY29uc29sZSdzIGJvb3Qgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIGRtZXNnIHwgbGVzcworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIHJlc3VsdHMgb2YgeW91ciA8ZmlsZW5hbWU+cHJpbnRrPC9maWxlbmFtZT4gc3RhdGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgb3V0cHV0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWFraW5nLWltYWdlcy1tb3JlLXNlY3VyZSc+CisgICAgICAgIDx0aXRsZT5NYWtpbmcgSW1hZ2VzIE1vcmUgU2VjdXJlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlY3VyaXR5IGlzIG9mIGluY3JlYXNpbmcgY29uY2VybiBmb3IgZW1iZWRkZWQgZGV2aWNlcy4KKyAgICAgICAgICAgIENvbnNpZGVyIHRoZSBpc3N1ZXMgYW5kIHByb2JsZW1zIGRpc2N1c3NlZCBpbiBqdXN0IHRoaXMKKyAgICAgICAgICAgIHNhbXBsaW5nIG9mIHdvcmsgZm91bmQgYWNyb3NzIHRoZSBJbnRlcm5ldDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnNjaG5laWVyLmNvbS9ibG9nL2FyY2hpdmVzLzIwMTQvMDEvc2VjdXJpdHlfcmlza3NfOS5odG1sJz5TZWN1cml0eSBSaXNrcyBvZiBFbWJlZGRlZCBTeXN0ZW1zPC91bGluaz4iPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgYnkgQnJ1Y2UgU2NobmVpZXIKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9pbnRlcm5ldGNlbnN1czIwMTIuYml0YnVja2V0Lm9yZy9wYXBlci5odG1sJz5JbnRlcm5ldCBDZW5zdXMgMjAxMjwvdWxpbms+IjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIGJ5IENhcm5hIEJvdG5ldDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwOi8vZWxpbnV4Lm9yZy9pbWFnZXMvNi82Zi9TZWN1cml0eS1pc3N1ZXMucGRmJz5TZWN1cml0eSBJc3N1ZXMgZm9yIEVtYmVkZGVkIERldmljZXM8L3VsaW5rPiI8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBieSBKYWtlIEVkZ2UKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd3d3Lm5jY2dyb3VwLmNvbS9tZWRpYS8xODQ3NS9leHBsb2l0aW5nX3NlY3VyaXR5X2dhdGV3YXlzX3ZpYV90aGVpcl93ZWJfaW50ZXJmYWNlcy5wZGYnPlRoZXkgb3VnaHQgdG8ga25vdyBiZXR0ZXI6IEV4cGxvaXRpbmcgU2VjdXJpdHkgR2F0ZXdheXMgdmlhIHRoZWlyIFdlYiBJbnRlcmZhY2VzPC91bGluaz4iPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgYnkgQmVuIFdpbGxpYW1zCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gc2VjdXJpbmcgeW91ciBpbWFnZSBpcyBvZiBjb25jZXJuLCB0aGVyZSBhcmUgc3RlcHMsIHRvb2xzLAorICAgICAgICAgICAgYW5kIHZhcmlhYmxlcyB0aGF0IHlvdSBjYW4gY29uc2lkZXIgdG8gaGVscCB5b3UgcmVhY2ggdGhlCisgICAgICAgICAgICBzZWN1cml0eSBnb2FscyB5b3UgbmVlZCBmb3IgeW91ciBwYXJ0aWN1bGFyIGRldmljZS4KKyAgICAgICAgICAgIE5vdCBhbGwgc2l0dWF0aW9ucyBhcmUgaWRlbnRpY2FsIHdoZW4gaXQgY29tZXMgdG8gbWFraW5nIGFuCisgICAgICAgICAgICBpbWFnZSBzZWN1cmUuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIGd1aWRhbmNlIGFuZCBzdWdnZXN0aW9ucworICAgICAgICAgICAgZm9yIGNvbnNpZGVyYXRpb24gd2hlbiB5b3Ugd2FudCB0byBtYWtlIHlvdXIgaW1hZ2UgbW9yZSBzZWN1cmUuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBzZWN1cml0eSByZXF1aXJlbWVudHMgYW5kIHJpc2tzIGFyZQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBmb3IgZXZlcnkgdHlwZSBvZiBkZXZpY2UsIHRoaXMgc2VjdGlvbiBjYW5ub3QKKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgY29tcGxldGUgcmVmZXJlbmNlIG9uIHNlY3VyaW5nIHlvdXIgY3VzdG9tIE9TLgorICAgICAgICAgICAgICAgIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsc28gY29uc3VsdCBvdGhlciBzb3VyY2VzCisgICAgICAgICAgICAgICAgb2YgaW5mb3JtYXRpb24gb24gZW1iZWRkZWQgTGludXggc3lzdGVtIGhhcmRlbmluZyBhbmQgb24KKyAgICAgICAgICAgICAgICBzZWN1cml0eS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnZW5lcmFsLWNvbnNpZGVyYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZW5lcmFsIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2VuZXJhbCBjb25zaWRlcmF0aW9ucyBleGlzdCB0aGF0IGhlbHAgeW91IGNyZWF0ZSBtb3JlCisgICAgICAgICAgICAgICAgc2VjdXJlIGltYWdlcy4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc3VnZ2VzdGlvbnMgdG8gaGVscAorICAgICAgICAgICAgICAgIG1ha2UgeW91ciBkZXZpY2UgbW9yZSBzZWN1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgU2NhbiBhZGRpdGlvbmFsIGNvZGUgeW91IGFyZSBhZGRpbmcgdG8gdGhlIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gYXBwbGljYXRpb24gY29kZSkgYnkgdXNpbmcgc3RhdGljIGFuYWx5c2lzCisgICAgICAgICAgICAgICAgICAgICAgICB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGJ1ZmZlciBvdmVyZmxvd3MgYW5kIG90aGVyIHBvdGVudGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHkgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBQYXkgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIHNlY3VyaXR5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgYW55IHdlYi1iYXNlZCBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5XZWIgaW50ZXJmYWNlcyB0eXBpY2FsbHkgbmVlZCB0byBwZXJmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbmlzdHJhdGl2ZSBmdW5jdGlvbnMgYW5kIHRlbmQgdG8gbmVlZCB0byBydW4gd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgZWxldmF0ZWQgcHJpdmlsZWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIHRoZSBjb25zZXF1ZW5jZXMgcmVzdWx0aW5nIGZyb20gdGhlIGludGVyZmFjZSdzCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eSBiZWNvbWluZyBjb21wcm9taXNlZCBjYW4gYmUgc2VyaW91cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGNvbW1vbiB3ZWIgdnVsbmVyYWJpbGl0aWVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXNpdGUtc2NyaXB0aW5nIChYU1MpLCB1bnZhbGlkYXRlZCBpbnB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QXMgd2l0aCBzeXN0ZW0gcGFzc3dvcmRzLCB0aGUgZGVmYXVsdCBjcmVkZW50aWFscworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFjY2Vzc2luZyBhIHdlYi1iYXNlZCBpbnRlcmZhY2Ugc2hvdWxkIG5vdCBiZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgYWNyb3NzIGFsbCBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBpZiB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgYXMgaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCBtYW55IGVuZC11c2VycworICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBub3QgY2hhbmdlIHRoZSBjcmVkZW50aWFscy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB5b3UgY2FuIHVwZGF0ZSB0aGUgc29mdHdhcmUgb24gdGhlIGRldmljZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgbWl0aWdhdGUgdnVsbmVyYWJpbGl0aWVzIGRpc2NvdmVyZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uc2lkZXJhdGlvbiBlc3BlY2lhbGx5IGFwcGxpZXMgd2hlbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgaXMgbmV0d29yay1lbmFibGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRW5zdXJlIHlvdSByZW1vdmUgb3IgZGlzYWJsZSBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlIHByb2R1Y2luZyB0aGUgZmluYWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIHRoaXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjb25zaWRlcmF0aW9ucy1zcGVjaWZpYy10by10aGUtb3BlbmVtYmVkZGVkLWJ1aWxkLXN5c3RlbSc+Q29uc2lkZXJhdGlvbnMgU3BlY2lmaWMgdG8gdGhlIE9wZW5FbWJlZGRlZCBCdWlsZCBTeXN0ZW08L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBFbnN1cmUgeW91IGhhdmUgbm8gbmV0d29yayBzZXJ2aWNlcyBsaXN0ZW5pbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgYW55IHNvZnR3YXJlIGZyb20gdGhlIGltYWdlIHRoYXQgaXMgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBzZWN1cmUgYm9vdCBmdW5jdGlvbmFsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdXIgZGV2aWNlIHN1cHBvcnRzIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2VjdXJpdHktZmxhZ3MnPgorICAgICAgICAgICAgPHRpdGxlPlNlY3VyaXR5IEZsYWdzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaGFzIHNlY3VyaXR5IGZsYWdzIHRoYXQgeW91IGNhbiBlbmFibGUgdGhhdAorICAgICAgICAgICAgICAgIGhlbHAgbWFrZSB5b3VyIGJ1aWxkIG91dHB1dCBtb3JlIHNlY3VyZS4KKyAgICAgICAgICAgICAgICBUaGUgc2VjdXJpdHkgZmxhZ3MgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHJlY2lwZSwgY2VydGFpbiBzZWN1cml0eSBmbGFncyBhcmUgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorPCEtLQorICAgICAgICAgICAgICAgIFRoZSBHQ0MvTEQgZmxhZ3MgaW4gPGZpbGVuYW1lPnNlY3VyaXR5X2ZsYWdzLmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZW5hYmxlIG1vcmUgc2VjdXJlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBCeSBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5zZWN1cml0eV9mbGFncy5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUsIHlvdSBlbmFibGUgZmxhZ3MgdG8gdGhlIGNvbXBpbGVyIGFuZCBsaW5rZXIgdGhhdCBjYXVzZQorICAgICAgICAgICAgICAgIHRoZW0gdG8gZ2VuZXJhdGUgbW9yZSBzZWN1cmUgY29kZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEdDQy9MRCBmbGFncyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS1sc2I8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorLS0+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIGluIHlvdXIgY3VzdG9tCisgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBlbmFibGUgdGhlIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyBmb3IgeW91ciBidWlsZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY29uc2lkZXJhdGlvbnMtc3BlY2lmaWMtdG8tdGhlLW9wZW5lbWJlZGRlZC1idWlsZC1zeXN0ZW0nPgorICAgICAgICAgICAgPHRpdGxlPkNvbnNpZGVyYXRpb25zIFNwZWNpZmljIHRvIHRoZSBPcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0YWtlIHNvbWUgc3RlcHMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBtYWtlIHlvdXIgaW1hZ2VzIG1vcmUgc2VjdXJlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSAiZGVidWctdHdlYWtzIiBpcyBub3Qgb25lIG9mIHlvdXIgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBuZXcgcHJvamVjdCwgdGhlIGRlZmF1bHQgaXMgdG8gcHJvdmlkZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYW4gaW5pdGlhbCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyB0aGlzIGZlYXR1cmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUgd2l0aCB0aGUgbGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBkaXNhYmxlIHRoYXQgZmVhdHVyZSwgc2ltcGx5IGNvbW1lbnQgb3V0IHRoYXQgbGluZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlIHN1cmUgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gZG9lcyBub3QgY29udGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgImRlYnVnLXR3ZWFrcyIgYmVmb3JlIHByb2R1Y2luZyB5b3VyIGZpbmFsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCBsZWF2aW5nIHRoaXMgaW4gcGxhY2Ugc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QgcGFzc3dvcmQgYXMgYmxhbmssIHdoaWNoIG1ha2VzIGxvZ2dpbmcgaW4gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcgb3IgaW5zcGVjdGlvbiBlYXN5IGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgYnV0IGFsc28gbWVhbnMgYW55b25lIGNhbiBlYXNpbHkgbG9nIGluCisgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgcHJvZHVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBzZXQgYSByb290IHBhc3N3b3JkIGZvciB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbHNvIHRvIHNldCBwYXNzd29yZHMgZm9yIGFueSBleHRyYSB1c2VycyB5b3UgbWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCAoZS5nLiBhZG1pbmlzdHJhdGl2ZSBvciBzZXJ2aWNlIHR5cGUgdXNlcnMpLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHVwIHBhc3N3b3JkcyBmb3IgbXVsdGlwbGUgaW1hZ2VzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VycywgeW91IHNob3VsZCBub3QgZHVwbGljYXRlIHBhc3N3b3Jkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc2V0IHVwIHBhc3N3b3JkcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0cmF1c2Vycyc+PGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcywgd2hpY2ggaXMgdGhlIHByZWZlcnJlZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gc2V0IHVwIGJvdGggcm9vdCBhbmQgdXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0cmF1c2Vycyc+PGZpbGVuYW1lPmV4dHJhdXNlcnMuYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBhZGRpbmcgZXh0cmEgdXNlciBhY2NvdW50cyBvciBzZXR0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290IHBhc3N3b3JkLCBiZSBjYXV0aW91cyBhYm91dCBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgcGFzc3dvcmQgb24gZXZlcnkgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyB0aGlzLCBhbmQgdGhlIHBhc3N3b3JkIHlvdSBoYXZlIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGV4cG9zZWQsIHRoZW4gZXZlcnkgZGV2aWNlIGlzIG5vdyBwb3RlbnRpYWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByb21pc2VkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRoaXMgYWNjZXNzIGJ1dCB3YW50IHRvIGVuc3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5LCBjb25zaWRlciBzZXR0aW5nIGEgZGlmZmVyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSBwYXNzd29yZCBmb3IgZWFjaCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgZG8gdGhpcyBhcyBhIHNlcGFyYXRlIHN0ZXAgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgZGVwbG95IHRoZSBpbWFnZSBvbnRvIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgZW5hYmxpbmcgYSBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgKE1BQykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29yayBzdWNoIGFzIFNNQUNLIG9yIFNFTGludXggYW5kIHR1bmluZyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBkZXZpY2UncyB1c2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbWV0YS1zZWxpbnV4Lyc+PGZpbGVuYW1lPm1ldGEtc2VsaW51eDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Rvb2xzLWZvci1oYXJkZW5pbmcteW91ci1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VG9vbHMgZm9yIEhhcmRlbmluZyBZb3VyIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdG9vbHMgZm9yIG1ha2luZyB5b3VyIGltYWdlCisgICAgICAgICAgICAgICAgbW9yZSBzZWN1cmUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIHRvb2xzIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXNlY3VyaXR5PC9maWxlbmFtZT4gbGF5ZXIgb2YgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBZb3VyIE93biBEaXN0cmlidXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgYW5kCisgICAgICAgICAgICBkbyBub3QgYWx0ZXIgYW55IGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbWV0YWRhdGEnPk1ldGFkYXRhPC9saW5rPiwgeW91IGFyZSBjcmVhdGluZyBhCisgICAgICAgICAgICBQb2t5IGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIGdhaW4gbW9yZSBjb250cm9sIG92ZXIgcGFja2FnZSBhbHRlcm5hdGl2ZQorICAgICAgICAgICAgc2VsZWN0aW9ucywgY29tcGlsZS10aW1lIG9wdGlvbnMsIGFuZCBvdGhlciBsb3ctbGV2ZWwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLCB5b3UgY2FuIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGNyZWF0ZSB5b3VyIG93biBkaXN0cmlidXRpb24sIHRoZSBiYXNpYyBzdGVwcyBjb25zaXN0IG9mCisgICAgICAgICAgICBjcmVhdGluZyB5b3VyIG93biBkaXN0cmlidXRpb24gbGF5ZXIsIGNyZWF0aW5nIHlvdXIgb3duCisgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgdGhlbiBhZGRpbmcgYW55IG5lZWRlZAorICAgICAgICAgICAgY29kZSBhbmQgTWV0YWRhdGEgdG8gdGhlIGxheWVyLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGVwcyBwcm92aWRlIHNvbWUgbW9yZSBkZXRhaWw6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgbGF5ZXIgZm9yIHlvdXIgbmV3IGRpc3Rybzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGUgeW91ciBkaXN0cmlidXRpb24gbGF5ZXIgc28gdGhhdCB5b3UgY2FuIGtlZXAgeW91cgorICAgICAgICAgICAgICAgICAgICBNZXRhZGF0YSBhbmQgY29kZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBzZXBhcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIGFuZCB1c2UgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgZm9yIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHlvdXIgb3duIGxheWVyIGFzIGNvbXBhcmVkIHRvIGp1c3QgcGxhY2luZworICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiBhIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIG1ha2VzIGl0IGVhc2llciB0byByZXByb2R1Y2UgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgY29uZmlndXJhdGlvbiB3aGVuIHVzaW5nIG11bHRpcGxlIGJ1aWxkIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy1hLWdlbmVyYWwtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWxheWVyLXNjcmlwdCc+Q3JlYXRpbmcgYSBHZW5lcmFsIExheWVyIFVzaW5nIHRoZSB5b2N0by1sYXllciBTY3JpcHQ8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcXVpY2tseSBzZXQgdXAgYSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUgbmVlZHMgdG8gYmUgY3JlYXRlZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvbmYvZGlzdHJvPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIG5hbWUgaXQgdXNpbmcgeW91ciBkaXN0cmlidXRpb24gbmFtZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+bXlkaXN0cm8uY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZGV0ZXJtaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgb2YgeW91ciBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gc3BsaXQgb3V0IHBhcnRzIG9mIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGludG8gaW5jbHVkZSBmaWxlcyBhbmQgdGhlbiAicmVxdWlyZSIgdGhlbSBmcm9tIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcGxhY2UgdGhlIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9pbmNsdWRlPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIEEgY29tbW9uIGV4YW1wbGUgdXNhZ2Ugb2YgaW5jbHVkZSBmaWxlcyB3b3VsZCBiZSB0bworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBvdXQgdGhlIHNlbGVjdGlvbiBvZiBkZXNpcmVkIHZlcnNpb24gYW5kIHJldmlzaW9ucworICAgICAgICAgICAgICAgICAgICBmb3IgaW5kaXZpZHVhbCByZWNpcGVzLgorPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBuZWVkcyB0byBzZXQgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19OQU1FJz48ZmlsZW5hbWU+RElTVFJPX05BTUU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fVkVSU0lPTic+PGZpbGVuYW1lPkRJU1RST19WRVJTSU9OPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIG9wdGlvbmFsIGFuZCB5b3UgdHlwaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHNldCB0aGVtIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPkRJU1RST19FWFRSQV9SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPkRJU1RST19FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRDTElCQyc+PGZpbGVuYW1lPlRDTElCQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8dGlwPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gYmFzZSB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSB2ZXJ5IGJhc2ljIGNvbmZpZ3VyYXRpb24gZnJvbSBPRS1Db3JlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgICAgICBhIHJlZmVyZW5jZSBhbmQganVzdCBpbmNsdWRlIHZhcmlhYmxlcyB0aGF0IGRpZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gPGZpbGVuYW1lPmRlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNyZWF0ZSBhIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gc2NyYXRjaCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMgZnJvbSBvdGhlciBkaXN0cmlidXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIFBva3kgb3IgQW5nc3Ryb20gYXMgcmVmZXJlbmNlcy4KKyAgICAgICAgICAgICAgICAgICAgPC90aXA+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qcm92aWRlIG1pc2NlbGxhbmVvdXMgdmFyaWFibGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gZGVmaW5lIGFueSBvdGhlciB2YXJpYWJsZXMgZm9yIHdoaWNoIHlvdSB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIGRlZmF1bHQgb3IgZW5mb3JjZSBhcyBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbmNsdWRlIG5lYXJseSBhbnkgdmFyaWFibGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGVzIHlvdSB1c2UgYXJlIG5vdCBsaW1pdGVkIHRvIHRoZSBsaXN0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBidWxsZXRlZCBpdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UG9pbnQgdG8gWW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHNldCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHlvdXIgZGlzdHJpYnV0aW9uJ3MgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uIGZpbGUgaXMKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm15ZGlzdHJvLmNvbmY8L2ZpbGVuYW1lPiwgdGhlbiB5b3UgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgdG8gaXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk8gPSAibXlkaXN0cm8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZCBtb3JlIHRvIHRoZSBsYXllciBpZiBuZWNlc3Nhcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHlvdXIgbGF5ZXIgdG8gaG9sZCBvdGhlciBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIHJlY2lwZXMgZm9yIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGluc3RhbGxlZCBieSBhbm90aGVyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBkaXN0cm8tc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGFuIGV4aXN0aW5nIHJlY2lwZSwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBhbiBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aG9zZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgcmVjb21tZW5kYXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaG93IHRvIGFkZCByZWNpcGVzIHRvIHlvdXIgbGF5ZXIsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3JlYXRpbmcteW91ci1vd24tbGF5ZXInPkNyZWF0aW5nIFlvdXIgT3duIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYmVzdC1wcmFjdGljZXMtdG8tZm9sbG93LXdoZW4tY3JlYXRpbmctbGF5ZXJzJz5CZXN0IFByYWN0aWNlcyB0byBGb2xsb3cgV2hlbiBDcmVhdGluZyBMYXllcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBhbnkgaW1hZ2UgcmVjaXBlcyB0aGF0IGFyZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHlvdXIgZGlzdHJpYnV0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBhIDxmaWxlbmFtZT5wc3BsYXNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSBmb3IgYSBicmFuZGVkIHNwbGFzaCBzY3JlZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFwcGVuZCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFkZCBhbnkgb3RoZXIgYXBwZW5kIGZpbGVzIHRvIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b20gY2hhbmdlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEN1c3RvbSBUZW1wbGF0ZSBDb25maWd1cmF0aW9uIERpcmVjdG9yeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHByb2R1Y2luZyB5b3VyIG93biBjdXN0b21pemVkIHZlcnNpb24KKyAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHVzZSBieSBvdGhlciB1c2VycywgeW91IG1pZ2h0CisgICAgICAgICAgICB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgbWVzc2FnZSBzaG93biBieSB0aGUgc2V0dXAgc2NyaXB0IG9yCisgICAgICAgICAgICB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKGkuZS4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+KSB0aGF0IGFyZSBjcmVhdGVkIGluCisgICAgICAgICAgICBhIG5ldyBidWlsZCBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdG8gbG9jYXRlIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZyb20gd2hpY2ggaXQgZ2F0aGVycyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRoYXQgdWx0aW1hdGVseQorICAgICAgICAgICAgZW5kcyB1cCBpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5J3M8L2xpbms+CisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBpcyBzZXQgYXMKKyAgICAgICAgICAgIGZvbGxvd3MgaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVNUExBVEVDT05GPSR7VEVNUExBVEVDT05GOi1tZXRhLXlvY3RvL2NvbmZ9CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGlzIHRoZSBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGZpbmQgdGVtcGxhdGVzCisgICAgICAgICAgICBmcm9tIHdoaWNoIHRvIGJ1aWxkIHNvbWUga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBJZiB5b3UgbG9vayBhdCB0aGlzIGRpcmVjdG9yeSwgeW91IHdpbGwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0aGVzZSBmaWxlcyB0byBmb3JtIHRoZSByZXNwZWN0aXZlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIGFuZCBkaXNwbGF5IHRoZSBsaXN0IG9mCisgICAgICAgICAgICBCaXRCYWtlIHRhcmdldHMgd2hlbiBydW5uaW5nIHRoZSBzZXR1cCBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyB3aXRoCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucyB5b3Ugd2FudCB1c2VkIHdpdGhpbiBldmVyeSBuZXcKKyAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSwgc2ltcGx5IHNldCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5URU1QTEFURUNPTkY8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byB5b3VyIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi50ZW1wbGF0ZWNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBpbiB0aGUKKyAgICAgICAgICAgIHRvcC1sZXZlbAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIGZvbGRlciAoZS5nLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIEVkaXQgdGhlIDxmaWxlbmFtZT4udGVtcGxhdGVjb25mPC9maWxlbmFtZT4gc28gdGhhdCBpdCBjYW4gbG9jYXRlCisgICAgICAgICAgICB5b3VyIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBzaG91bGQga2VlcCB5b3VyCisgICAgICAgICAgICB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBpbiB5b3VyIGN1c3RvbSBkaXN0cmlidXRpb24gbGF5ZXIuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIGxheWVyIG5hbWVkCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1teWxheWVyPC9maWxlbmFtZT4gbG9jYXRlZCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5CisgICAgICAgICAgICBhbmQgeW91IHdhbnQgeW91ciB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPm15Y29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgQ2hhbmdpbmcgdGhlIDxmaWxlbmFtZT4udGVtcGxhdGVjb25mPC9maWxlbmFtZT4gYXMgZm9sbG93cworICAgICAgICAgICAgY2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGxvb2sgaW4geW91ciBkaXJlY3RvcnkKKyAgICAgICAgICAgIGFuZCBiYXNlIGl0cyBjb25maWd1cmF0aW9uIGZpbGVzIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiouc2FtcGxlPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcyBpdCBmaW5kcy4KKyAgICAgICAgICAgIFRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGZpbGVzIChpLmUuCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiB1bHRpbWF0ZWx5IHN0aWxsIGVuZCB1cCBpbgorICAgICAgICAgICAgeW91ciBCdWlsZCBEaXJlY3RvcnksIGJ1dCB0aGV5IGFyZSBiYXNlZCBvbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVNUExBVEVDT05GPSR7VEVNUExBVEVDT05GOi1tZXRhLW15bGF5ZXIvbXljb25mfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBc2lkZSBmcm9tIHRoZSA8ZmlsZW5hbWU+Ki5zYW1wbGU8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzLAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGFsc28gcmVzaWRlcyBpbiB0aGUKKyAgICAgICAgICAgIGRlZmF1bHQgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBzY3JpcHRzIHRoYXQgc2V0IHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgKGkuZS4KKyAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8dWxpbmsgdXJsPSImWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgIHVzZSB0aGlzIGZpbGUgdG8gZGlzcGxheSBCaXRCYWtlIHRhcmdldHMgYXMgcGFydCBvZiB0aGUgc2NyaXB0CisgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICBDdXN0b21pemluZyB0aGlzIDxmaWxlbmFtZT5jb25mLW5vdGVzLnR4dDwvZmlsZW5hbWU+IGZpbGUgaXMgYQorICAgICAgICAgICAgZ29vZCB3YXkgdG8gbWFrZSBzdXJlIHlvdXIgbGlzdCBvZiBjdXN0b20gdGFyZ2V0cyBhcHBlYXJzCisgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBzY3JpcHQncyBvdXRwdXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgbGlzdCBvZiB0YXJnZXRzIGRpc3BsYXllZCBhcyBhIHJlc3VsdCBvZgorICAgICAgICAgICAgcnVubmluZyBlaXRoZXIgb2YgdGhlIHNldHVwIHNjcmlwdHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFlvdSBjYW4gbm93IHJ1biAnYml0YmFrZSAmbHQ7dGFyZ2V0Jmd0OycKKworICAgICBDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgICAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgbWV0YS10b29sY2hhaW4KKyAgICAgICAgIGFkdC1pbnN0YWxsZXIKKyAgICAgICAgIG1ldGEtaWRlLXN1cHBvcnQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hhbmdpbmcgdGhlIGxpc3RlZCBjb21tb24gdGFyZ2V0cyBpcyBhcyBlYXN5IGFzIGVkaXRpbmcgeW91cgorICAgICAgICAgICAgdmVyc2lvbiBvZiA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBpbiB5b3VyCisgICAgICAgICAgICBjdXN0b20gdGVtcGxhdGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgYW5kIG1ha2luZyBzdXJlIHlvdQorICAgICAgICAgICAgaGF2ZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gc2V0IHRvIHlvdXIgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWEtdGlueS1zeXN0ZW0nPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgYSBUaW55IFN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWZXJ5IHNtYWxsIGRpc3RyaWJ1dGlvbnMgaGF2ZSBzb21lIHNpZ25pZmljYW50IGFkdmFudGFnZXMgc3VjaAorICAgICAgICAgICAgYXMgcmVxdWlyaW5nIGxlc3Mgb24tZGllIG9yIGluLXBhY2thZ2UgbWVtb3J5IChjaGVhcGVyKSwgYmV0dGVyCisgICAgICAgICAgICBwZXJmb3JtYW5jZSB0aHJvdWdoIGVmZmljaWVudCBjYWNoZSB1c2FnZSwgbG93ZXIgcG93ZXIgcmVxdWlyZW1lbnRzCisgICAgICAgICAgICBkdWUgdG8gbGVzcyBtZW1vcnksIGZhc3RlciBib290IHRpbWVzLCBhbmQgcmVkdWNlZCBkZXZlbG9wbWVudAorICAgICAgICAgICAgb3ZlcmhlYWQuCisgICAgICAgICAgICBTb21lIHJlYWwtd29ybGQgZXhhbXBsZXMgd2hlcmUgYSB2ZXJ5IHNtYWxsIGRpc3RyaWJ1dGlvbiBnaXZlcworICAgICAgICAgICAgeW91IGRpc3RpbmN0IGFkdmFudGFnZXMgYXJlIGRpZ2l0YWwgY2FtZXJhcywgbWVkaWNhbCBkZXZpY2VzLAorICAgICAgICAgICAgYW5kIHNtYWxsIGhlYWRsZXNzIHN5c3RlbXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiB0aGF0IHNob3dzIHlvdSBob3cgeW91IGNhbgorICAgICAgICAgICAgdHJpbSB5b3VyIGRpc3RyaWJ1dGlvbiB0byBldmVuIHNtYWxsZXIgc2l6ZXMgdGhhbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24sIHdoaWNoIGlzIGFyb3VuZAorICAgICAgICAgICAgNSBNYnl0ZXMsIHRoYXQgY2FuIGJlIGJ1aWx0IG91dC1vZi10aGUtYm94IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Rpbnktc3lzdGVtLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBwcmVzZW50cyB0aGUgb3ZlcmFsbCBzdGVwcyB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIGNvbnNpZGVyIGFuZCBwZXJmb3JtIHRvIGNyZWF0ZSBkaXN0cmlidXRpb25zIHdpdGggc21hbGxlcgorICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbXMsIGFjaGlldmUgZmFzdGVyIGJvb3QgdGltZXMsIG1haW50YWluIHlvdXIgY3JpdGljYWwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYXZvaWQgaW5pdGlhbCBSQU0gZGlza3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ29hbHMtYW5kLWd1aWRpbmctcHJpbmNpcGxlcyc+RGV0ZXJtaW5lIHlvdXIgZ29hbHMgYW5kIGd1aWRpbmcgcHJpbmNpcGxlcy48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZC13aGF0LWdpdmVzLXlvdXItaW1hZ2Utc2l6ZSc+VW5kZXJzdGFuZCB3aGF0IGNvbnRyaWJ1dGVzIHRvIHlvdXIgaW1hZ2Ugc2l6ZS48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndHJpbS10aGUtcm9vdC1maWxlc3lzdGVtJz5SZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbS48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndHJpbS10aGUta2VybmVsJz5SZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbC48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVtb3ZlLXBhY2thZ2UtbWFuYWdlbWVudC1yZXF1aXJlbWVudHMnPkVsaW1pbmF0ZSBwYWNrYWdpbmcgcmVxdWlyZW1lbnRzLjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdsb29rLWZvci1vdGhlci13YXlzLXRvLW1pbmltaXplLXNpemUnPkxvb2sgZm9yIG90aGVyIHdheXMgdG8gbWluaW1pemUgc2l6ZS48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naXRlcmF0ZS1vbi10aGUtcHJvY2Vzcyc+SXRlcmF0ZSBvbiB0aGUgcHJvY2Vzcy48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdnb2Fscy1hbmQtZ3VpZGluZy1wcmluY2lwbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Hb2FscyBhbmQgR3VpZGluZyBQcmluY2lwbGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVmb3JlIHlvdSBjYW4gcmVhY2ggeW91ciBkZXN0aW5hdGlvbiwgeW91IG5lZWQgdG8ga25vdworICAgICAgICAgICAgICAgIHdoZXJlIHlvdSBhcmUgZ29pbmcuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGxpc3QgdGhhdCB5b3UgY2FuIHVzZSBhcyBhIGd1aWRlIHdoZW4KKyAgICAgICAgICAgICAgICBjcmVhdGluZyB2ZXJ5IHNtYWxsIGRpc3RyaWJ1dGlvbnM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRldGVybWluZSBob3cgbXVjaCBzcGFjZSB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gYSBrZXJuZWwgdGhhdCBpcyAxIE1ieXRlIG9yIGxlc3MgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhIHJvb3QgZmlsZXN5c3RlbSB0aGF0IGlzIDMgTWJ5dGVzIG9yIGxlc3MpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GaW5kIHRoZSBhcmVhcyB0aGF0IGFyZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRha2luZyA5MCUgb2YgdGhlIHNwYWNlIGFuZCBjb25jZW50cmF0ZSBvbiByZWR1Y2luZworICAgICAgICAgICAgICAgICAgICAgICAgdGhvc2UgYXJlYXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCBjcmVhdGUgYW55IGRpZmZpY3VsdCAiaGFja3MiCisgICAgICAgICAgICAgICAgICAgICAgICB0byBhY2hpZXZlIHlvdXIgZ29hbHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MZXZlcmFnZSB0aGUgZGV2aWNlLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V29yayBpbiBhIHNlcGFyYXRlIGxheWVyIHNvIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBrZWVwIGNoYW5nZXMgaXNvbGF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBsYXllcnMsIHNlZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1bmRlcnN0YW5kLXdoYXQtZ2l2ZXMteW91ci1pbWFnZS1zaXplJz4KKyAgICAgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kIFdoYXQgQ29udHJpYnV0ZXMgdG8gWW91ciBJbWFnZSBTaXplPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgZWFzaWVzdCB0byBoYXZlIHNvbWV0aGluZyB0byBzdGFydCB3aXRoIHdoZW4gY3JlYXRpbmcKKyAgICAgICAgICAgICAgICB5b3VyIG93biBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIFlvY3RvIFByb2plY3Qgb3V0LW9mLXRoZS1ib3ggdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnk8L2ZpbGVuYW1lPiBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgVWx0aW1hdGVseSwgeW91IHdpbGwgd2FudCB0byBtYWtlIGNoYW5nZXMgaW4geW91ciBvd24KKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gdGhhdCBhcmUgbGlrZWx5IG1vZGVsZWQgYWZ0ZXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS10aW55PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSA8ZmlsZW5hbWU+cG9reS10aW55PC9maWxlbmFtZT4gaW4geW91ciBidWlsZCwKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0byAicG9reS10aW55IgorICAgICAgICAgICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy15b3VyLW93bi1kaXN0cmlidXRpb24nPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHNvbWUgbWVtb3J5IGNvbmNlcHRzIHdpbGwgaGVscCB5b3UgcmVkdWNlIHRoZQorICAgICAgICAgICAgICAgIHN5c3RlbSBzaXplLgorICAgICAgICAgICAgICAgIE1lbW9yeSBjb25zaXN0cyBvZiBzdGF0aWMsIGR5bmFtaWMsIGFuZCB0ZW1wb3JhcnkgbWVtb3J5LgorICAgICAgICAgICAgICAgIFN0YXRpYyBtZW1vcnkgaXMgdGhlIFRFWFQgKGNvZGUpLCBEQVRBIChpbml0aWFsaXplZCBkYXRhCisgICAgICAgICAgICAgICAgaW4gdGhlIGNvZGUpLCBhbmQgQlNTICh1bmluaXRpYWxpemVkIGRhdGEpIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIER5bmFtaWMgbWVtb3J5IHJlcHJlc2VudHMgbWVtb3J5IHRoYXQgaXMgYWxsb2NhdGVkIGF0IHJ1bnRpbWU6CisgICAgICAgICAgICAgICAgc3RhY2tzLCBoYXNoIHRhYmxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBtZW1vcnkgaXMgcmVjb3ZlcmVkIGFmdGVyIHRoZSBib290IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgVGhpcyBtZW1vcnkgY29uc2lzdHMgb2YgbWVtb3J5IHVzZWQgZm9yIGRlY29tcHJlc3NpbmcKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIGFuZCBmb3IgdGhlIDxmaWxlbmFtZT5fX2luaXRfXzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoZWxwIHlvdSBzZWUgd2hlcmUgeW91IGN1cnJlbnRseSBhcmUgd2l0aCBrZXJuZWwgYW5kIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHNpemVzLCB5b3UgY2FuIHVzZSB0d28gdG9vbHMgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnNjcmlwdHMvdGlueS88L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5rc2l6ZS5weTwvZmlsZW5hbWU+OiBSZXBvcnRzCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgc2l6ZXMgZm9yIHRoZSBrZXJuZWwgYnVpbGQgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRpcnNpemUucHk8L2ZpbGVuYW1lPjogUmVwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50IHNpemVzIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIFRoaXMgbmV4dCB0b29sIGFuZCBjb21tYW5kIGhlbHAgeW91IG9yZ2FuaXplIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmcmFnbWVudHMgYW5kIHZpZXcgZmlsZSBkZXBlbmRlbmNpZXMgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bWVyZ2VfY29uZmlnLnNoPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBIZWxwcyB5b3UgbWFuYWdlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGZyYWdtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgdG9vbCwgeW91IGNhbiBtZXJnZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyB0b2dldGhlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sIGFsbG93cyB5b3UgdG8gbWFrZSBvdmVycmlkZXMgYW5kIHdhcm5zIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYW55IG1pc3NpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgaXMgaWRlYWwgZm9yIGFsbG93aW5nIHlvdSB0byBpdGVyYXRlIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucywgY3JlYXRlIG1pbmltYWwgY29uZmlndXJhdGlvbnMsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGRpZmZlcmVudCBtYWNoaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8gZHVwbGljYXRlIHlvdXIgcHJvY2Vzcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPm1lcmdlX2NvbmZpZy5zaDwvZmlsZW5hbWU+IHNjcmlwdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgTGludXggWW9jdG8ga2VybmVsIEdpdCByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xMDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuODwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpCisgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL2tjb25maWc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsIGFuZCB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPkNyZWF0aW5nIENvbmZpZ3VyYXRpb24gRnJhZ21lbnRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGlzIGluIHRoaXMgbWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpdGJha2UgLXUgZGVwZXhwIC1nIDxyZXBsYWNlYWJsZT5iaXRiYWtlX3RhcmdldDwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUgQml0QmFrZSBjb21tYW5kIHdpdGggdGhlc2Ugb3B0aW9ucyBicmluZ3MgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgRGVwZW5kZW5jeSBFeHBsb3JlciBmcm9tIHdoaWNoIHlvdSBjYW4gdmlldyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBhbGxvd3MgeW91IHRvIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWVkIGRlY2lzaW9ucyB3aGVuIGN1dHRpbmcgb3V0IHZhcmlvdXMgcGllY2VzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGFuZCByb290IGZpbGVzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndHJpbS10aGUtcm9vdC1maWxlc3lzdGVtJz4KKyAgICAgICAgICAgIDx0aXRsZT5UcmltIHRoZSBSb290IEZpbGVzeXN0ZW08L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcm9vdCBmaWxlc3lzdGVtIGlzIG1hZGUgdXAgb2YgcGFja2FnZXMgZm9yIGJvb3RpbmcsCisgICAgICAgICAgICAgICAgbGlicmFyaWVzLCBhbmQgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgICAgIFRvIGNoYW5nZSB0aGluZ3MsIHlvdSBjYW4gY29uZmlndXJlIGhvdyB0aGUgcGFja2FnaW5nIGhhcHBlbnMsCisgICAgICAgICAgICAgICAgd2hpY2ggY2hhbmdlcyB0aGUgd2F5IHlvdSBidWlsZCB0aGVtLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBtb2RpZnkgdGhlIGZpbGVzeXN0ZW0gaXRzZWxmIG9yIHNlbGVjdCBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmaW5kIG91dCB3aGF0IGlzIGhvZ2dpbmcgeW91ciByb290IGZpbGVzeXN0ZW0gYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyc2l6ZS5weTwvZmlsZW5hbWU+IHNjcmlwdCBmcm9tIHlvdXIgcm9vdCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT5yb290LWRpcmVjdG9yeS1vZi1pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICQgZGlyc2l6ZS5weSAxMDAwMDAgPiBkaXJzaXplLTEwMGsubG9nCisgICAgICQgY2F0IGRpcnNpemUtMTAway5sb2cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhcHBseSBhIGZpbHRlciB0byB0aGUgc2NyaXB0IHRvIGlnbm9yZSBmaWxlcyB1bmRlcgorICAgICAgICAgICAgICAgIGEgY2VydGFpbiBzaXplLgorICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBleGFtcGxlIGZpbHRlcnMgb3V0IGFueSBmaWxlcyBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgIFRoZSBzaXplcyByZXBvcnRlZCBieSB0aGUgdG9vbCBhcmUgdW5jb21wcmVzc2VkLCBhbmQgdGh1cworICAgICAgICAgICAgICAgIHdpbGwgYmUgc21hbGxlciBieSBhIHJlbGF0aXZlbHkgY29uc3RhbnQgZmFjdG9yIGluIGEKKyAgICAgICAgICAgICAgICBjb21wcmVzc2VkIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBleGFtaW5lIHlvdXIgbG9nIGZpbGUsIHlvdSBjYW4gZm9jdXMgb24gYXJlYXMgb2YgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgdGFrZSB1cCBsYXJnZSBhbW91bnRzIG9mIG1lbW9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSB0aGF0IHdoYXQgeW91IGVsaW1pbmF0ZSBkb2VzIG5vdCBjcmlwcGxlCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uYWxpdHkgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgT25lIHdheSB0byBzZWUgaG93IHBhY2thZ2VzIHJlbGF0ZSB0byBlYWNoIG90aGVyIGlzIGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIERlcGVuZGVuY3kgRXhwbG9yZXIgVUkgd2l0aCB0aGUgQml0QmFrZSBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCA8cmVwbGFjZWFibGU+aW1hZ2UtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgJCBiaXRiYWtlIC11IGRlcGV4cCAtZyA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2UgdGhlIGludGVyZmFjZSB0byBzZWxlY3QgcG90ZW50aWFsIHBhY2thZ2VzIHlvdSB3aXNoIHRvCisgICAgICAgICAgICAgICAgZWxpbWluYXRlIGFuZCBzZWUgdGhlaXIgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGRlY2lkaW5nIGhvdyB0byByZWR1Y2UgdGhlIHNpemUsIGdldCByaWQgb2YgcGFja2FnZXMgdGhhdAorICAgICAgICAgICAgICAgIHJlc3VsdCBpbiBtaW5pbWFsIGltcGFjdCBvbiB0aGUgZmVhdHVyZSBzZXQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBub3QgbmVlZCBhIFZHQSBkaXNwbGF5LgorICAgICAgICAgICAgICAgIE9yLCB5b3UgbWlnaHQgYmUgYWJsZSB0byBnZXQgYnkgd2l0aCA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bWRldjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVc2UgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gbWFrZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBlbGltaW5hdGUgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYjwvZmlsZW5hbWU+LCBzZXQgdGhlIGZvbGxvd2luZyBpbiB0aGUKKyAgICAgICAgICAgICAgICBsb2NhbCBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBWSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXIgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgeW91IHNob3VsZCBjb25zaWRlciBleGFjdGx5IHRoZSB0eXBlIG9mIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIHlvdSBuZWVkIHRvIG1lZXQgeW91ciBuZWVkcyB3aGlsZSBhbHNvIHJlZHVjaW5nCisgICAgICAgICAgICAgICAgaXRzIHNpemUuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIDxmaWxlbmFtZT5jcmFtZnM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3F1YXNoZnM8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnViaWZzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPiwgb3IgYW4gPGZpbGVuYW1lPmluaXRyYW1mczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdXNpbmcgPGZpbGVuYW1lPmluaXRyYW1mczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEJlIGF3YXJlIHRoYXQgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPiByZXF1aXJlcyBhIDEgTWJ5dGUKKyAgICAgICAgICAgICAgICBqb3VybmFsLgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgb2theSB3aXRoIHJ1bm5pbmcgcmVhZC1vbmx5LCB5b3UgZG8gbm90IG5lZWQgdGhpcworICAgICAgICAgICAgICAgIGpvdXJuYWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEFmdGVyIGVhY2ggcm91bmQgb2YgZWxpbWluYXRpb24sIHlvdSBuZWVkIHRvIHJlYnVpbGQgeW91cgorICAgICAgICAgICAgICAgIHN5c3RlbSBhbmQgdGhlbiB1c2UgdGhlIHRvb2xzIHRvIHNlZSB0aGUgZWZmZWN0cyBvZiB5b3VyCisgICAgICAgICAgICAgICAgcmVkdWN0aW9ucy4KKyAgICAgICAgICAgIDwvbm90ZT4KKworCisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndHJpbS10aGUta2VybmVsJz4KKyAgICAgICAgICAgIDx0aXRsZT5UcmltIHRoZSBLZXJuZWw8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIGlzIGJ1aWx0IGJ5IGluY2x1ZGluZyBwb2xpY2llcyBmb3IgaGFyZHdhcmUtaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICBhc3BlY3RzLgorICAgICAgICAgICAgICAgIFdoYXQgc3Vic3lzdGVtcyBkbyB5b3UgZW5hYmxlPworICAgICAgICAgICAgICAgIEZvciB3aGF0IGFyY2hpdGVjdHVyZSBhcmUgeW91IGJ1aWxkaW5nPworICAgICAgICAgICAgICAgIFdoaWNoIGRyaXZlcnMgZG8geW91IGJ1aWxkIGJ5IGRlZmF1bHQ/CisgICAgICAgICAgICAgICAgPG5vdGU+WW91IGNhbiBtb2RpZnkgdGhlIGtlcm5lbCBzb3VyY2UgaWYgeW91IHdhbnQgdG8gaGVscAorICAgICAgICAgICAgICAgICAgICB3aXRoIGJvb3QgdGltZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJ1biB0aGUgPGZpbGVuYW1lPmtzaXplLnB5PC9maWxlbmFtZT4gc2NyaXB0IGZyb20gdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIExpbnV4IGJ1aWxkIGRpcmVjdG9yeSB0byBnZXQgYW4gaWRlYSBvZiB3aGF0IGlzIG1ha2luZyB1cAorICAgICAgICAgICAgICAgIHRoZSBrZXJuZWw6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIDxyZXBsYWNlYWJsZT50b3AtbGV2ZWwtbGludXgtYnVpbGQtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4KKyAgICAgJCBrc2l6ZS5weSA+IGtzaXplLmxvZworICAgICAkIGNhdCBrc2l6ZS5sb2cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhhbWluZSB0aGUgbG9nLCB5b3Ugd2lsbCBzZWUgaG93IG11Y2ggc3BhY2UgaXMKKyAgICAgICAgICAgICAgICB0YWtlbiB1cCB3aXRoIHRoZSBidWlsdC1pbiA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPiBmaWxlcyBmb3IKKyAgICAgICAgICAgICAgICBkcml2ZXJzLCBuZXR3b3JraW5nLCBjb3JlIGtlcm5lbCBmaWxlcywgZmlsZXN5c3RlbSwgc291bmQsCisgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIFRoZSBzaXplcyByZXBvcnRlZCBieSB0aGUgdG9vbCBhcmUgdW5jb21wcmVzc2VkLCBhbmQgdGh1cworICAgICAgICAgICAgICAgIHdpbGwgYmUgc21hbGxlciBieSBhIHJlbGF0aXZlbHkgY29uc3RhbnQgZmFjdG9yIGluIGEgY29tcHJlc3NlZAorICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBMb29rIHRvIHJlZHVjZSB0aGUgYXJlYXMgdGhhdCBhcmUgbGFyZ2UgYW5kIHRha2luZyB1cCBhcm91bmQKKyAgICAgICAgICAgICAgICB0aGUgIjkwJSBydWxlLiIKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZXhhbWluZSwgb3IgZHJpbGwgZG93biwgaW50byBhbnkgcGFydGljdWxhciBhcmVhLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kPC9maWxlbmFtZT4gb3B0aW9uIHdpdGggdGhlIHNjcmlwdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQga3NpemUucHkgLWQgPiBrc2l6ZS5sb2cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24gYnJlYWtzIG91dCB0aGUgaW5kaXZpZHVhbCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgZm9yIGVhY2ggYXJlYSBvZiB0aGUga2VybmVsIChlLmcuIGRyaXZlcnMsIG5ldHdvcmtpbmcsIGFuZAorICAgICAgICAgICAgICAgIHNvIGZvcnRoKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHlvdXIgbG9nIGZpbGUgdG8gc2VlIHdoYXQgeW91IGNhbiBlbGltaW5hdGUgZnJvbSB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgYmFzZWQgb24gZmVhdHVyZXMgeW91IGNhbiBsZXQgZ28uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgbm90IGdvaW5nIHRvIG5lZWQgc291bmQsIHlvdSBkbyBub3QKKyAgICAgICAgICAgICAgICBuZWVkIGFueSBkcml2ZXJzIHRoYXQgc3VwcG9ydCBzb3VuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgZmlndXJpbmcgb3V0IHdoYXQgdG8gZWxpbWluYXRlLCB5b3UgbmVlZCB0byByZWNvbmZpZ3VyZQorICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgdG8gcmVmbGVjdCB0aG9zZSBjaGFuZ2VzIGR1cmluZyB0aGUgbmV4dCBidWlsZC4KKyAgICAgICAgICAgICAgICBZb3UgY291bGQgcnVuIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gYW5kIG1ha2UgYWxsIHlvdXIKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhhdCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gc2VlIHRoZSBlZmZlY3RzIG9mIHlvdXIKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIGVsaW1pbmF0aW9ucyBhbmQgYWxzbyBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gcmVwbGljYXRlCisgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgZm9yIHBlcmhhcHMgYW5vdGhlciB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIEEgYmV0dGVyIG1ldGhvZCBpcyB0byBzdGFydCB3aXRoIG5vIGNvbmZpZ3VyYXRpb25zIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbG5vY29uZmlnPC9maWxlbmFtZT4sIGNyZWF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGZvciBpbmRpdmlkdWFsIGNoYW5nZXMsIGFuZCB0aGVuIG1hbmFnZSB0aGUKKyAgICAgICAgICAgICAgICBmcmFnbWVudHMgaW50byBhIHNpbmdsZSBjb25maWd1cmF0aW9uIGZpbGUgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVyZ2VfY29uZmlnLnNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHRvb2wgbWFrZXMgaXQgZWFzeSBmb3IgeW91IHRvIGl0ZXJhdGUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBjaGFuZ2UgYW5kIGJ1aWxkIGN5Y2xlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFYWNoIHRpbWUgeW91IG1ha2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCB5b3UgbmVlZCB0byByZWJ1aWxkCisgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCBhbmQgY2hlY2sgdG8gc2VlIHdoYXQgaW1wYWN0IHlvdXIgY2hhbmdlcyBoYWQgb24KKyAgICAgICAgICAgICAgICB0aGUgb3ZlcmFsbCBzaXplLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlbW92ZS1wYWNrYWdlLW1hbmFnZW1lbnQtcmVxdWlyZW1lbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZW1vdmUgUGFja2FnZSBNYW5hZ2VtZW50IFJlcXVpcmVtZW50czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFBhY2thZ2luZyByZXF1aXJlbWVudHMgYWRkIHNpemUgdG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIE9uZSB3YXkgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpcyB0byByZW1vdmUgYWxsIHRoZQorICAgICAgICAgICAgICAgIHBhY2thZ2luZyByZXF1aXJlbWVudHMgZnJvbSB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhpcyByZWR1Y3Rpb24gaW5jbHVkZXMgYm90aCByZW1vdmluZyB0aGUgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzIGFzIHdlbGwgYXMgcmVtb3ZpbmcgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IGRhdGEgaXRzZWxmLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBlbGltaW5hdGUgYWxsIHRoZSBwYWNrYWdpbmcgcmVxdWlyZW1lbnRzIGZvciBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICBiZSBzdXJlIHRoYXQgInBhY2thZ2UtbWFuYWdlbWVudCIgaXMgbm90IHBhcnQgb2YgeW91cgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudCBmb3IgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFdoZW4geW91IHJlbW92ZSB0aGlzIGZlYXR1cmUsIHlvdSBhcmUgcmVtb3ZpbmcgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtYW5hZ2VyIGFzIHdlbGwgYXMgaXRzIGRlcGVuZGVuY2llcyBmcm9tIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9vay1mb3Itb3RoZXItd2F5cy10by1taW5pbWl6ZS1zaXplJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb29rIGZvciBPdGhlciBXYXlzIHRvIE1pbmltaXplIFNpemU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24geW91ciBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZXMsIG90aGVyIGFyZWFzIHRoYXQgeW91CisgICAgICAgICAgICAgICAgY2FuIHRyaW0gbGlrZWx5IGV4aXN0LgorICAgICAgICAgICAgICAgIFRoZSBrZXkgdG8gZmluZGluZyB0aGVzZSBhcmVhcyBpcyB0aHJvdWdoIHRvb2xzIGFuZCBtZXRob2RzCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGhlcmUgY29tYmluZWQgd2l0aCBleHBlcmltZW50YXRpb24gYW5kIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBhIGNvdXBsZSBvZiBhcmVhcyB0byBleHBlcmltZW50IHdpdGg6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgZm9sbG93IHRoaXMgcHJvY2VzczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgdGhpbmsgeW91IGRvIG5vdCBuZWVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CdWlsZCB5b3VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHRoZSBidWlsZCBmYWlscyBkdWUgdG8gbWlzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzIGluIGEgcGFja2FnZSwgZGV0ZXJtaW5lIGlmIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb25maWd1cmUgdGhlIHBhY2thZ2UgdG8gbm90IG5lZWQgdGhvc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gdG8gbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgd2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCBhcyBpcyBkb25lIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmN1cnNlczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciwgaWYgc3VwcG9ydCBmb3IgdGhvc2UgY2hhcmFjdGVycyBpcyBuZWVkZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSB3aGF0IDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHByb3ZpZGUgdGhlIHN1cHBvcnQgYW5kIHJlc3RvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWJ1aWxkIGFuZCByZXBlYXQgdGhlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQnVzeUJveCwgdXNlIGEgcHJvY2VzcyBzaW1pbGFyIGFzIGRlc2NyaWJlZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQSBkaWZmZXJlbmNlIGlzIHlvdSB3aWxsIG5lZWQgdG8gYm9vdCB0aGUgcmVzdWx0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gc2VlIGlmIHlvdSBhcmUgYWJsZSB0byBkbyBldmVyeXRoaW5nIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0IGZyb20gdGhlIHJ1bm5pbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgc3VyZSB0byBpbnRlZ3JhdGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGludG8gQnVzeWJveCBiZWNhdXNlIEJ1c3lCb3ggaGFuZGxlcyBpdHMgb3duIGNvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIGFuZCB0aGVuIGFsbG93cyB5b3UgdG8gYWRkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50cyBvbiB0b3AuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpdGVyYXRlLW9uLXRoZS1wcm9jZXNzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JdGVyYXRlIG9uIHRoZSBQcm9jZXNzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbm90IHJlYWNoZWQgeW91ciBnb2FscyBvbiBzeXN0ZW0gc2l6ZSwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byBpdGVyYXRlIG9uIHRoZSBwcm9jZXNzLgorICAgICAgICAgICAgICAgIFRoZSBwcm9jZXNzIGlzIHRoZSBzYW1lLgorICAgICAgICAgICAgICAgIFVzZSB0aGUgdG9vbHMgYW5kIHNlZSBqdXN0IHdoYXQgaXMgdGFraW5nIHVwIDkwJSBvZiB0aGUgcm9vdAorICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gYW5kIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgRGVjaWRlIHdoYXQgeW91IGNhbiBlbGltaW5hdGUgd2l0aG91dCBsaW1pdGluZyB5b3VyIGRldmljZQorICAgICAgICAgICAgICAgIGJleW9uZCB3aGF0IHlvdSBuZWVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24geW91ciBzeXN0ZW0sIGEgZ29vZCBwbGFjZSB0byBsb29rIG1pZ2h0IGJlCisgICAgICAgICAgICAgICAgQnVzeWJveCwgd2hpY2ggcHJvdmlkZXMgYSBzdHJpcHBlZCBkb3duCisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBVbml4IHRvb2xzIGluIGEgc2luZ2xlLCBleGVjdXRhYmxlIGZpbGUuCisgICAgICAgICAgICAgICAgWW91IG1pZ2h0IGJlIGFibGUgdG8gZHJvcCB2aXJ0dWFsIHRlcm1pbmFsIHNlcnZpY2VzIG9yIHBlcmhhcHMKKyAgICAgICAgICAgICAgICBpcHY2LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWltYWdlcy1mb3ItbW9yZS10aGFuLW9uZS1tYWNoaW5lJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIEltYWdlcyBmb3IgTW9yZSB0aGFuIE9uZSBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgY29tbW9uIHNjZW5hcmlvIGRldmVsb3BlcnMgZmFjZSBpcyBjcmVhdGluZyBpbWFnZXMgZm9yIHNldmVyYWwKKyAgICAgICAgICAgIGRpZmZlcmVudCBtYWNoaW5lcyB0aGF0IHVzZSB0aGUgc2FtZSBzb2Z0d2FyZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEluIHRoaXMgc2l0dWF0aW9uLCBpdCBpcyB0ZW1wdGluZyB0byBzZXQgdGhlCisgICAgICAgICAgICB0dW5pbmdzIGFuZCBvcHRpbWl6YXRpb24gZmxhZ3MgZm9yIGVhY2ggYnVpbGQgc3BlY2lmaWNhbGx5IGZvcgorICAgICAgICAgICAgdGhlIHRhcmdldGVkIGhhcmR3YXJlIChpLmUuICJtYXhpbmcgb3V0IiB0aGUgdHVuaW5ncykuCisgICAgICAgICAgICBEb2luZyBzbyBjYW4gY29uc2lkZXJhYmx5IGFkZCB0byBidWlsZCB0aW1lcyBhbmQgcGFja2FnZSBmZWVkCisgICAgICAgICAgICBtYWludGVuYW5jZSBjb2xsZWN0aXZlbHkgZm9yIHRoZSBtYWNoaW5lcy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWxlY3RpbmcgdHVuZXMgdGhhdCBhcmUgZXh0cmVtZWx5IHNwZWNpZmljIHRvIGEKKyAgICAgICAgICAgIENQVSBjb3JlIHVzZWQgaW4gYSBzeXN0ZW0gbWlnaHQgZW5hYmxlIHNvbWUgbWljcm8gb3B0aW1pemF0aW9ucworICAgICAgICAgICAgaW4gR0NDIGZvciB0aGF0IHBhcnRpY3VsYXIgc3lzdGVtIGJ1dCB3b3VsZCBvdGhlcndpc2Ugbm90IGdhaW4KKyAgICAgICAgICAgIHlvdSBtdWNoIG9mIGEgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBhY3Jvc3MgdGhlIG90aGVyIHN5c3RlbXMKKyAgICAgICAgICAgIGFzIGNvbXBhcmVkIHRvIHVzaW5nIGEgbW9yZSBnZW5lcmFsIHR1bmluZyBhY3Jvc3MgYWxsIHRoZSBidWlsZHMKKyAgICAgICAgICAgIChlLmcuIHNldHRpbmcKKyAgICAgICAgICAgIDx1bGluayB1cmw9J3Zhci1ERUZBVUxUVFVORSc+PGZpbGVuYW1lPkRFRkFVTFRUVU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgc3BlY2lmaWNhbGx5IGZvciBlYWNoIG1hY2hpbmUncyBidWlsZCkuCisgICAgICAgICAgICBSYXRoZXIgdGhhbiAibWF4IG91dCIgZWFjaCBidWlsZCdzIHR1bmluZ3MsIHlvdSBjYW4gdGFrZSBzdGVwcyB0aGF0CisgICAgICAgICAgICBjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byByZXVzZSBzb2Z0d2FyZSBhY3Jvc3MgdGhlCisgICAgICAgICAgICB2YXJpb3VzIG1hY2hpbmVzIHdoZXJlIGl0IG1ha2VzIHNlbnNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgYnVpbGQgc3BlZWQgYW5kIHBhY2thZ2UgZmVlZCBtYWludGVuYW5jZSBhcmUgY29uc2lkZXJhdGlvbnMsCisgICAgICAgICAgICB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBwb2ludHMgaW4gdGhpcyBzZWN0aW9uIHRoYXQgY2FuIGhlbHAgeW91CisgICAgICAgICAgICBvcHRpbWl6ZSB5b3VyIHR1bmluZ3MgdG8gYmVzdCBjb25zaWRlciBidWlsZCB0aW1lcyBhbmQgcGFja2FnZQorICAgICAgICAgICAgZmVlZCBtYWludGVuYW5jZS4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TaGFyZSB0aGUgQnVpbGQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIGF0IGFsbCBwb3NzaWJsZSwgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFjcm9zcyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHN3aXRjaGluZyBiZXR3ZWVuIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBpbiB0aGUgc2FtZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2UgaXMgd2VsbCBzdXBwb3J0ZWQgYW5kIHJlZ3VsYXJseSB1c2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlcnMgd2hlbiBidWlsZGluZyBmb3IgbXVsdGlwbGUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHVzZSB0aGUgc2FtZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gZm9yCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIG1hY2hpbmUgYnVpbGRzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4KKyAgICAgICAgICAgICAgICAgICAgcmV1c2UgdGhlIGV4aXN0aW5nIG5hdGl2ZSBhbmQgb2Z0ZW4gY3Jvc3MtcmVjaXBlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGJ1aWxkIHRpbWUgZGVjcmVhc2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MgY2hhbmdlIG9yIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZpbGVzeXN0ZW0gbGF5b3V0LCB5b3UgbmVlZCB0byB3b3JrIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY2xlYW4gPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmluZyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gdW5kZXIgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNpcmN1bXN0YW5jZXMgbWlnaHQgd29yayBidXQgc2luY2UgaXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICBndWFyYW50ZWVkLCB5b3Ugc2hvdWxkIHVzZSBhIGNsZWFuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbmFibGUgdGhlIEFwcHJvcHJpYXRlIFBhY2thZ2UgQXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGVuYWJsZXMgdGhyZWUKKyAgICAgICAgICAgICAgICAgICAgbGV2ZWxzIG9mIHBhY2thZ2UgYXJjaGl0ZWN0dXJlczogImFsbCIsICJ0dW5lIiBvciAicGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgIGFuZCAibWFjaGluZSIuCisgICAgICAgICAgICAgICAgICAgIEFueSBnaXZlbiByZWNpcGUgdXN1YWxseSBzZWxlY3RzIG9uZSBvZiB0aGVzZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKHR5cGVzKSBmb3IgaXRzIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIGZvciB3aGF0IGEgZ2l2ZW4gcmVjaXBlIGNyZWF0ZXMgcGFja2FnZXMsIG1ha2luZworICAgICAgICAgICAgICAgICAgICBzdXJlIHlvdSBlbmFibGUgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIGNhbgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSBpbXBhY3QgdGhlIGJ1aWxkIHRpbWUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5BIHJlY2lwZSB0aGF0IGp1c3QgZ2VuZXJhdGVzIHNjcmlwdHMgY2FuIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAiYWxsIiBhcmNoaXRlY3R1cmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gYmluYXJpZXMgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZmljYWxseSBlbmFibGUgImFsbCIgYXJjaGl0ZWN0dXJlLCBiZSBzdXJlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1hbGxhcmNoJz48ZmlsZW5hbWU+YWxsYXJjaDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGZvciAiYWxsIiBhcmNoaXRlY3R1cmVzIGJlY2F1c2UgaXQKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlcyBtYW55IHZhcmlhYmxlcyBzbyBwYWNrYWdlcyBjYW4gYmUgdXNlZCBhY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdXIgcmVjaXBlIG5lZWRzIHRvIGdlbmVyYXRlIHBhY2thZ2VzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgb3Igd2hlbiBvbmUgb2YgdGhlIGJ1aWxkIG9yIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIGlzIGFscmVhZHkgbWFjaGluZS1hcmNoaXRlY3R1cmUgZGVwZW5kZW50LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBtYWtlcyB5b3VyIHJlY2lwZSBhbHNvIG1hY2hpbmUtYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCwKKyAgICAgICAgICAgICAgICAgICAgbWFrZSBzdXJlIHlvdXIgcmVjaXBlIGVuYWJsZXMgdGhlICJtYWNoaW5lIiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9BUkNIJz48ZmlsZW5hbWU+TUFDSElORV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGRvIG5vdCBzcGVjaWZpY2FsbHkgZW5hYmxlIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRlZmF1bHRzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzZXR0aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSCA9ICIke1RVTkVfUEtHQVJDSH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaG9vc2UgYSBHZW5lcmljIFR1bmluZyBGaWxlIGlmIFBvc3NpYmxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvbWUgdHVuZXMgYXJlIG1vcmUgZ2VuZXJpYyBhbmQgY2FuIHJ1biBvbiBtdWx0aXBsZSB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIGFuIDxmaWxlbmFtZT5hcm12NTwvZmlsZW5hbWU+IHNldCBvZiBwYWNrYWdlcyBjb3VsZAorICAgICAgICAgICAgICAgICAgICBydW4gb24gPGZpbGVuYW1lPmFybXY2PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcm12NzwvZmlsZW5hbWU+IHByb2Nlc3NvcnMgaW4gbW9zdCBjYXNlcykuCisgICAgICAgICAgICAgICAgICAgIFNpbWlsYXJseSwgPGZpbGVuYW1lPmk0ODY8L2ZpbGVuYW1lPiBiaW5hcmllcyBjb3VsZCB3b3JrCisgICAgICAgICAgICAgICAgICAgIG9uIDxmaWxlbmFtZT5pNTg2PC9maWxlbmFtZT4gYW5kIGhpZ2hlciBwcm9jZXNzb3JzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYWR2YW5jZXMgb24gbmV3ZXIKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yIHZlcnNpb25zIHdvdWxkIG5vdCBiZSB1c2VkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgeW91IHNlbGVjdCB0aGUgc2FtZSB0dW5lIGZvciBzZXZlcmFsIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcmV1c2VzIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgYnVpbHQsIHRodXMgc3BlZWRpbmcgdXAgdGhlIG92ZXJhbGwgYnVpbGQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgUmVhbGl6ZSB0aGF0IGV2ZW4gdGhvdWdoIGEgbmV3IHN5c3Jvb3QgZm9yIGVhY2ggbWFjaGluZSBpcworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQsIHRoZSBzb2Z0d2FyZSBpcyBub3QgcmVjb21waWxlZCBhbmQgb25seSBvbmUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBmZWVkIGV4aXN0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW5hZ2UgR3JhbnVsYXIgTGV2ZWwgUGFja2FnaW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBjYXNlcyBleGlzdCB3aGVyZSBpbmplY3RpbmcgYW5vdGhlciBsZXZlbAorICAgICAgICAgICAgICAgICAgICBvZiBwYWNrYWdlIGFyY2hpdGVjdHVyZSBiZXlvbmQgdGhlIHRocmVlIGhpZ2hlciBsZXZlbHMKKyAgICAgICAgICAgICAgICAgICAgbm90ZWQgZWFybGllciBjYW4gYmUgdXNlZnVsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIDxmaWxlbmFtZT5lbWdkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3Mgc3RhY2sgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgbGF5ZXIsIGEgc3Vic2V0IG9mIHNvZnR3YXJlIGV4aXN0cyB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkIGFnYWluc3Qgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBnZW5lcmljIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGV4YW1pbmUgdGhlIGtleSBjb2RlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaSc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICJkYWlzeSIgYnJhbmNoIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2VtZ2QtZ2wuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBzcGVjaWZpYyBzZXQgb2YgcGFja2FnZXMsIHRoZSBjb2RlIHJlZGVmaW5lcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfRVhUUkFfQVJDSFMnPjxmaWxlbmFtZT5QQUNLQUdFX0VYVFJBX0FSQ0hTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGVuIGFwcGVuZGVkIHdpdGggdGhpcyBleHRyYSB0dW5lIG5hbWUgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWwtZW1nZC5pbmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4gc2VhcmNoaW5nIGZvciBwYWNrYWdlcywgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB1c2VzIGEgZm91ci1sZXZlbCBzZWFyY2ggYW5kIHRoZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIG5ldyBsZXZlbCBhcmUgcHJlZmVycmVkIGFzIGNvbXBhcmVkIHRvIHRoZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgICAgICB0dW5lLgorICAgICAgICAgICAgICAgICAgICBUaGUgb3ZlcmFsbCByZXN1bHQgaXMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIHJldXNlcyBtb3N0CisgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGZyb20gdGhlIGNvbW1vbiB0dW5lIGV4Y2VwdCBmb3Igc3BlY2lmaWMgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgYXMgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBUb29scyB0byBEZWJ1ZyBJc3N1ZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBjYW4gcnVuIGludG8gc2l0dWF0aW9ucyB3aGVyZSBzb2Z0d2FyZSBpcworICAgICAgICAgICAgICAgICAgICBiZWluZyByZWJ1aWx0IHdoZW4geW91IHRoaW5rIGl0IHNob3VsZCBub3QgYmUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtaWdodCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgc2hhcmVkIHN0YXRlIGJldHdlZW4gbWFjaGluZXMgd2hlbiB5b3UgdGhpbmsgaXQKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB0eXBlcyBvZiBzaXR1YXRpb25zIGFyZSB1c3VhbGx5IGR1ZSB0byByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgICAgIHRvIG1hY2hpbmUtc3BlY2lmaWMgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNFUklBTF9DT05TT0xFJz48ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItWFNFUlZFUic+PGZpbGVuYW1lPlhTRVJWRVI8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9GRUFUVVJFUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGggaW4gY29kZSB0aGF0IGlzIHN1cHBvc2VkIHRvIG9ubHkgYmUKKyAgICAgICAgICAgICAgICAgICAgdHVuZS1zcGVjaWZpYyBvciB3aGVuIHRoZSByZWNpcGUgZGVwZW5kcworICAgICAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SU1VHR0VTVFMnPjxmaWxlbmFtZT5SU1VHR0VTVFM8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGgpIG9uIHNvbWUgb3RoZXIgcmVjaXBlIHRoYXQgYWxyZWFkeSBoYXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyAiJHtNQUNISU5FX0FSQ0h9Ii4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVzIHRvIGZpeCBhbnkgaXNzdWVzIGlkZW50aWZpZWQgYXJlIG1vc3Qgd2VsY29tZQorICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlc2UgaXNzdWVzIG9jY2FzaW9uYWxseSBkbyBvY2N1ci4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIHN1Y2ggY2FzZXMsIHlvdSBjYW4gdXNlIHNvbWUgdG9vbHMgdG8gaGVscCB5b3UKKyAgICAgICAgICAgICAgICAgICAgc29ydCBvdXQgdGhlIHNpdHVhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyB0b29sIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBSZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBjb21tZW50cyBpbiB0aGUgc2NyaXB0IGZvciBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdyB0byB1c2UgdGhlIHRvb2wuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJpdEJha2UncyAiLVMgcHJpbnRkaWZmIiBPcHRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBjYXVzZXMgQml0QmFrZSB0byB0cnkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RhYmxpc2ggdGhlIGNsb3Nlc3Qgc2lnbmF0dXJlIG1hdGNoIGl0IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIGluIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUpIGFuZCB0aGVuIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gb3ZlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzIHRvIGRldGVybWluZSB0aGUgc3RhbXBzIGFuZCBkZWx0YSB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIHR3byBzdGFtcCB0cmVlcyBkaXZlcmdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JraW5nLXdpdGgtcGFja2FnZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgYSBmZXcgdGFza3MgdGhhdCBpbnZvbHZlIHBhY2thZ2VzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2V4Y2x1ZGluZy1wYWNrYWdlcy1mcm9tLWFuLWltYWdlJz5FeGNsdWRpbmcgcGFja2FnZXMgZnJvbSBhbiBpbWFnZTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbmNyZW1lbnRpbmctYS1wYWNrYWdlLXJldmlzaW9uLW51bWJlcic+SW5jcmVtZW50aW5nIGEgcGFja2FnZSByZXZpc2lvbiBudW1iZXI8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0naGFuZGxpbmctb3B0aW9uYWwtbW9kdWxlLXBhY2thZ2luZyc+SGFuZGxpbmcgb3B0aW9uYWwgbW9kdWxlIHBhY2thZ2luZzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZy1ydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudCc+VXNpbmcgUnVudGltZSBQYWNrYWdlIE1hbmFnZW1lbnQ8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5TZXR0aW5nIHVwIGFuZCBydW5uaW5nIHBhY2thZ2UgdGVzdCAocHRlc3QpPC9saW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2V4Y2x1ZGluZy1wYWNrYWdlcy1mcm9tLWFuLWltYWdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5FeGNsdWRpbmcgUGFja2FnZXMgZnJvbSBhbiBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBtaWdodCBmaW5kIGl0IG5lY2Vzc2FyeSB0byBwcmV2ZW50IHNwZWNpZmljIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgZnJvbSBiZWluZyBpbnN0YWxsZWQgaW50byBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICBJZiBzbywgeW91IGNhbiB1c2Ugc2V2ZXJhbCB2YXJpYWJsZXMgdG8gZGlyZWN0IHRoZSBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB0byBlc3NlbnRpYWxseSBpZ25vcmUgaW5zdGFsbGluZyByZWNvbW1lbmRlZCBwYWNrYWdlcworICAgICAgICAgICAgICAgIG9yIHRvIG5vdCBpbnN0YWxsIGEgcGFja2FnZSBhdCBhbGwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBpbnRyb2R1Y2VzIHZhcmlhYmxlcyB5b3UgY2FuIHVzZSB0bworICAgICAgICAgICAgICAgIHByZXZlbnQgcGFja2FnZXMgZnJvbSBiZWluZyBpbnN0YWxsZWQgaW50byB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgdmFyaWFibGVzIG9ubHkgd29ya3Mgd2l0aCBJUEsgYW5kIFJQTQorICAgICAgICAgICAgICAgIHBhY2thZ2UgdHlwZXMuCisgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgRGViaWFuIHBhY2thZ2VzIGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgIEFsc28sIHlvdSBjYW4gdXNlIHRoZXNlIHZhcmlhYmxlcyBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgYXR0YWNoIHRoZW0gdG8gYQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGltYWdlIHJlY2lwZSBieSB1c2luZyBhIHJlY2lwZSBuYW1lIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbCBvbiB0aGUgdmFyaWFibGVzLCBzZWUgdGhlIGRlc2NyaXB0aW9ucyBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwncyBnbG9zc2FyeSBjaGFwdGVyLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgdG8gc3BlY2lmeSAicmVjb21tZW5kZWQtb25seSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU5PX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPk5PX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyB2YXJpYWJsZSB0byBwcmV2ZW50IGFsbCAicmVjb21tZW5kZWQtb25seSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZyb20gYmVpbmcgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9FWENMVURFJz48ZmlsZW5hbWU+UEFDS0FHRV9FWENMVURFPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGlzIHZhcmlhYmxlIHRvIHByZXZlbnQgc3BlY2lmaWMgcGFja2FnZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgaW5zdGFsbGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgInJlY29tbWVuZGVkLW9ubHkiIG9yIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCB0aGUgYnVpbGQgcHJvY2VzcyBjb3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCB3aXRoIGFuIGVycm9yIHdoZW4geW91CisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50IHRoZSBpbnN0YWxsYXRpb24gb2YgYSBwYWNrYWdlIHdob3NlIHByZXNlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByZXF1aXJlZCBieSBhbiBpbnN0YWxsZWQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2luY3JlbWVudGluZy1hLXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmNyZW1lbnRpbmcgYSBQYWNrYWdlIFJldmlzaW9uIE51bWJlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGEgY29tbWl0dGVkIGNoYW5nZSByZXN1bHRzIGluIGNoYW5naW5nIHRoZSBwYWNrYWdlIG91dHB1dCwKKyAgICAgICAgICAgICAgICB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBuZWVkcyB0byBiZSBpbmNyZWFzZWQgKG9yICJidW1wZWQiKS4KKyAgICAgICAgICAgICAgICBJbmNyZWFzaW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IG9jY3VycyBvbmUgb2YgdHdvIHdheXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkF1dG9tYXRpY2FsbHkgdXNpbmcgYSBQYWNrYWdlIFJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlIChQUiBTZXJ2aWNlKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1hbnVhbGx5IGluY3JlbWVudGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBHaXZlbiB0aGF0IG9uZSBvZiB0aGUgY2hhbGxlbmdlcyBhbnkgYnVpbGQgc3lzdGVtIGFuZCBpdHMKKyAgICAgICAgICAgICAgICB1c2VycyBmYWNlIGlzIGhvdyB0byBtYWludGFpbiBhIHBhY2thZ2UgZmVlZCB0aGF0IGlzIGNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICB3aXRoIGV4aXN0aW5nIHBhY2thZ2UgbWFuYWdlciBhcHBsaWNhdGlvbnMgc3VjaCBhcworICAgICAgICAgICAgICAgIFJQTSwgQVBULCBhbmQgT1BLRywgdXNpbmcgYW4gYXV0b21hdGVkIHN5c3RlbSBpcyBtdWNoCisgICAgICAgICAgICAgICAgcHJlZmVycmVkIG92ZXIgYSBtYW51YWwgc3lzdGVtLgorICAgICAgICAgICAgICAgIEluIGVpdGhlciBzeXN0ZW0sIHRoZSBtYWluIHJlcXVpcmVtZW50IGlzIHRoYXQgdmVyc2lvbgorICAgICAgICAgICAgICAgIG51bWJlcmluZyBpbmNyZWFzZXMgaW4gYSBsaW5lYXIgZmFzaGlvbiBhbmQgdGhhdCBhIG51bWJlciBvZgorICAgICAgICAgICAgICAgIHZlcnNpb24gY29tcG9uZW50cyBleGlzdCB0aGF0IHN1cHBvcnQgdGhhdCBsaW5lYXIgcHJvZ3Jlc3Npb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdHdvIHNlY3Rpb25zIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gdGhlIFBSIFNlcnZpY2UKKyAgICAgICAgICAgICAgICBhbmQgb24gbWFudWFsIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGJ1bXBpbmcuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSd3b3JraW5nLXdpdGgtYS1wci1zZXJ2aWNlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIGEgUFIgU2VydmljZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCBhdHRlbXB0aW5nIHRvIG1haW50YWluIHJldmlzaW9uIG51bWJlcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIGVycm9yIHByb25lLCBpbmFjY3VyYXRlLCBhbmQgY2F1c2VzIHByb2JsZW1zIGZvciBwZW9wbGUKKyAgICAgICAgICAgICAgICAgICAgc3VibWl0dGluZyByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBDb252ZXJzZWx5LCB0aGUgUFIgU2VydmljZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcworICAgICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nIG51bWJlcnMsIHBhcnRpY3VsYXJseSB0aGUgcmV2aXNpb24gZmllbGQsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHJlbW92ZXMgdGhlIGh1bWFuIGVsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdXNpbmcgYSBQUiBTZXJ2aWNlLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvUFJfU2VydmljZSc+UFIgU2VydmljZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB3aWtpIHBhZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdXNlcyB2YXJpYWJsZXMgaW4gb3JkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgZGVjcmVhc2luZyBwcmlvcml0eSB0byBmYWNpbGl0YXRlIHJldmlzaW9uIG51bWJlcmluZyAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L3VsaW5rPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgZXBvY2gsIHZlcnNpb24sIGFuZCByZXZpc2lvbiwgcmVzcGVjdGl2ZWx5KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBhcmUgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgcG9saWNpZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHByb2NlZHVyZXMgb2YgYSBnaXZlbiBkaXN0cmlidXRpb24gYW5kIHBhY2thZ2UgZmVlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNjaGVja3N1bXMnPnNpZ25hdHVyZXM8L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSB1bmlxdWUgdG8gYSBnaXZlbiBidWlsZCwgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBrbm93cyB3aGVuIHRvIHJlYnVpbGQgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEFsbCB0aGUgaW5wdXRzIGludG8gYSBnaXZlbiB0YXNrIGFyZSByZXByZXNlbnRlZCBieSBhCisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgd2hpY2ggY2FuIHRyaWdnZXIgYSByZWJ1aWxkIHdoZW4gZGlmZmVyZW50LgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiBkb2VzIG5vdCByZWx5IG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBudW1iZXJzIHRvIHRyaWdnZXIgYSByZWJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlcywgaG93ZXZlciwgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgUFIgU2VydmljZSB3b3JrcyB3aXRoIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9FQmFzaWM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9FQmFzaWNIYXNoPC9maWxlbmFtZT4gZ2VuZXJhdG9ycy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGJ1bXBzIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtIGNoYW5nZXMgYW5kIHRoZSBkaWZmZXJlbnQgZ2VuZXJhdG9yIG1lY2hhbmlzbXMKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlIHNpZ25hdHVyZXMgdW5kZXIgZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGltcGxlbWVudGVkLCB0aGUgYnVpbGQgc3lzdGVtIGluY2x1ZGVzIHZhbHVlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIHRoZSBQUiBTZXJ2aWNlIGludG8gdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IGZpZWxkIGFzCisgICAgICAgICAgICAgICAgICAgIGFuIGFkZGl0aW9uIHVzaW5nIHRoZSBmb3JtICI8ZmlsZW5hbWU+Lng8L2ZpbGVuYW1lPiIgc28KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnIwPC9maWxlbmFtZT4gYmVjb21lcyA8ZmlsZW5hbWU+cjAuMTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cjAuMjwvZmlsZW5hbWU+IGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzY2hlbWUgYWxsb3dzIGV4aXN0aW5nIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlcworICAgICAgICAgICAgICAgICAgICB0byBiZSB1c2VkIGZvciB3aGF0ZXZlciByZWFzb25zLCB3aGljaCBpbmNsdWRlIG1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBidW1wcywgc2hvdWxkIGl0IGJlIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIFBSIFNlcnZpY2UgaXMgbm90IGVuYWJsZWQgb3IgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIHBhY2thZ2VzIGdlbmVyYXRlZCBhcmUganVzdCAic2VsZiBjb25zaXN0ZW50Ii4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhZGRzIGFuZCByZW1vdmVzIHBhY2thZ2VzIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBhYm91dCB1cGdyYWRlIHBhdGhzIGJ1dCBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBjb25zaXN0ZW50IGFuZCBjb3JyZWN0IHdpdGggdGhlIGxhdGVzdCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2ltcGxlc3QgZm9ybSBmb3IgYSBQUiBTZXJ2aWNlIGlzIGZvciBpdCB0byBleGlzdAorICAgICAgICAgICAgICAgICAgICBmb3IgYSBzaW5nbGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gdGhhdCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZmVlZCAoYnVpbGRpbmcgc3lzdGVtKS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgc2NlbmFyaW8sIHlvdSBjYW4gZW5hYmxlIGEgbG9jYWwgUFIgU2VydmljZSBieQorICAgICAgICAgICAgICAgICAgICBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUlNFUlZfSE9TVCc+PGZpbGVuYW1lPlBSU0VSVl9IT1NUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUlNFUlZfSE9TVCA9ICJsb2NhbGhvc3Q6MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBzZXJ2aWNlIGlzIHN0YXJ0ZWQsIHBhY2thZ2VzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBnZXQgaW5jcmVhc2luZyA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiB2YWx1ZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgbW9yZSBjb21wbGV4IHNldHVwIHdoZXJlIG11bHRpcGxlIGhvc3QKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgc3lzdGVtcyB3b3JrIGFnYWluc3QgYSBjb21tb24sIHNoYXJlZCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGZlZWQsIHlvdSBoYXZlIGEgc2luZ2xlIFBSIFNlcnZpY2UgcnVubmluZyBhbmQgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkIHRvIGVhY2ggYnVpbGRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBzY2VuYXJpbywgeW91IG5lZWQgdG8gc3RhcnQgdGhlIFBSIFNlcnZpY2UgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5iaXRiYWtlLXByc2VydjwvZmlsZW5hbWU+IGNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYml0YmFrZS1wcnNlcnYgLS1ob3N0IDxyZXBsYWNlYWJsZT5pcDwvcmVwbGFjZWFibGU+IC0tcG9ydCA8cmVwbGFjZWFibGU+cG9ydDwvcmVwbGFjZWFibGU+IC0tc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBoYW5kLXN0YXJ0aW5nIHRoZSBzZXJ2aWNlLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvZiBlYWNoCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHN5c3RlbSBhcyBkZXNjcmliZWQgZWFybGllciBzbyBlYWNoIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHNlcnZlciBhbmQgcG9ydC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB5b3UgdXNlIGJ1aWxkIGhpc3RvcnksIHdoaWNoIGFkZHMKKyAgICAgICAgICAgICAgICAgICAgc29tZSBzYW5pdHkgY2hlY2tzIHRvIHBhY2thZ2UgdmVyc2lvbnMsIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgdGhlIFBSIFNlcnZpY2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBidWlsZCBoaXN0b3J5LCBhZGQgdGhlIGZvbGxvd2luZyB0byBlYWNoIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSdzIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFjdGl2YXRlICJidWlsZGhpc3RvcnkiIGZvciB0ZXN0aW5nIHRoZSBQUiBzZXJ2aWNlCisgICAgIElOSEVSSVQgKz0gImJ1aWxkaGlzdG9yeSIKKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBidWlsZCBoaXN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBtYWludGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPiBpbmZvcm1hdGlvbiBhcyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBtYWludGFpbiBhbiBzc3RhdGUgZmVlZCwgaXRzIGV4cGVjdGVkIHRoYXQgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGFsbCB5b3VyIGJ1aWxkaW5nIHN5c3RlbXMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBzc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgZmVlZCB1c2UgYSBzaGFyZWQgUFIgU2VydmljZSwgb3IgeW91IGRvIG5vdCBydW4gYSBQUgorICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlIG9uIGFueSBvZiB5b3VyIGJ1aWxkaW5nIHN5c3RlbXMuCisgICAgICAgICAgICAgICAgICAgIEhhdmluZyBzb21lIHN5c3RlbXMgdXNlIGEgUFIgU2VydmljZSB3aGlsZSBvdGhlcnMgZG8KKyAgICAgICAgICAgICAgICAgICAgbm90IGxlYWRzIHRvIG9idmlvdXMgcHJvYmxlbXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzaGFyZWQgc3RhdGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NoYXJlZC1zdGF0ZS1jYWNoZSc+U2hhcmVkIFN0YXRlIENhY2hlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC48L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nbWFudWFsbHktYnVtcGluZy1wcic+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1hbnVhbGx5IEJ1bXBpbmcgUFI8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBhbHRlcm5hdGl2ZSB0byBzZXR0aW5nIHVwIGEgUFIgU2VydmljZSBpcyB0byBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICBidW1wIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIGEgY29tbWl0dGVkIGNoYW5nZSByZXN1bHRzIGluIGNoYW5naW5nIHRoZSBwYWNrYWdlIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgdmFsdWUgb2YgdGhlIFBSIHZhcmlhYmxlIG5lZWRzIHRvIGJlIGluY3JlYXNlZAorICAgICAgICAgICAgICAgICAgICAob3IgImJ1bXBlZCIpIGFzIHBhcnQgb2YgdGhhdCBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEZvciBuZXcgcmVjaXBlcyB5b3Ugc2hvdWxkIGFkZCB0aGUgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHNldCBpdHMgaW5pdGlhbCB2YWx1ZSBlcXVhbCB0byAicjAiLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgRXZlbiB0aG91Z2ggdGhlIGRlZmF1bHQgdmFsdWUgaXMgInIwIiwgdGhlIHByYWN0aWNlIG9mIGFkZGluZyBpdCB0byBhIG5ldyByZWNpcGUgbWFrZXMKKyAgICAgICAgICAgICAgICAgICAgaXQgaGFyZGVyIHRvIGZvcmdldCB0byBidW1wIHRoZSB2YXJpYWJsZSB3aGVuIHlvdSBtYWtlIGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHJlY2lwZSBpbiBmdXR1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc2hhcmluZyBhIGNvbW1vbiA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgd2l0aCBtdWx0aXBsZSByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlOQ19QUic+SU5DX1BSPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlcyBzaGFyaW5nIHRoZSA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgYXJlIHJlYnVpbHQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiBmaWxlIGl0c2VsZiBpcyBjaGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiBmaWxlIG11c3Qgc2V0IDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbGx5IHRvICJyMCIpLCBhbmQgYWxsIHJlY2lwZXMgcmVmZXJyaW5nIHRvIGl0IHNob3VsZCBzZXQgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIiQoSU5DX1BSKS4wIiBpbml0aWFsbHksIGluY3JlbWVudGluZyB0aGUgbGFzdCBudW1iZXIgd2hlbiB0aGUgcmVjaXBlIGlzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+IGZpbGUgaXMgY2hhbmdlZCB0aGVuIGl0cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5DX1BSPC9maWxlbmFtZT4gc2hvdWxkIGJlIGluY3JlbWVudGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVwZ3JhZGluZyB0aGUgdmVyc2lvbiBvZiBhIHBhY2thZ2UsIGFzc3VtaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz5QVjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICByZXNldCB0byAicjAiIChvciAiJChJTkNfUFIpLjAiIGlmIHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXN1YWxseSwgdmVyc2lvbiBpbmNyZWFzZXMgb2NjdXIgb25seSB0byBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgZm9yIHNvbWUgcmVhc29uIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGNoYW5nZXMgYnV0IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGluY3JlYXNlLCB5b3UgY2FuIGluY3JlYXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBFJz5QRTwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgKFBhY2thZ2UgRXBvY2gpLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlBFPC9maWxlbmFtZT4gdmFyaWFibGUgZGVmYXVsdHMgdG8gIjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIG51bWJlcmluZyBzdHJpdmVzIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5kZWJpYW4ub3JnL2RvYy9kZWJpYW4tcG9saWN5L2NoLWNvbnRyb2xmaWVsZHMuaHRtbCc+CisgICAgICAgICAgICAgICAgICAgIERlYmlhbiBWZXJzaW9uIEZpZWxkIFBvbGljeSBHdWlkZWxpbmVzPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGd1aWRlbGluZXMgZGVmaW5lIGhvdyB2ZXJzaW9ucyBhcmUgY29tcGFyZWQgYW5kIHdoYXQgImluY3JlYXNpbmciIGEgdmVyc2lvbiBtZWFucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naGFuZGxpbmctb3B0aW9uYWwtbW9kdWxlLXBhY2thZ2luZyc+CisgICAgICAgICAgICA8dGl0bGU+SGFuZGxpbmcgT3B0aW9uYWwgTW9kdWxlIFBhY2thZ2luZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1hbnkgcGllY2VzIG9mIHNvZnR3YXJlIHNwbGl0IGZ1bmN0aW9uYWxpdHkgaW50byBvcHRpb25hbAorICAgICAgICAgICAgICAgIG1vZHVsZXMgKG9yIHBsdWctaW5zKSBhbmQgdGhlIHBsdWctaW5zIHRoYXQgYXJlIGJ1aWx0CisgICAgICAgICAgICAgICAgbWlnaHQgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICBUbyBhdm9pZCBoYXZpbmcgdG8gZHVwbGljYXRlIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hhdAorICAgICAgICAgICAgICAgIG1vZHVsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIHJlY2lwZSBvciB0byBhdm9pZCBoYXZpbmcKKyAgICAgICAgICAgICAgICB0byBwYWNrYWdlIGVhY2ggbW9kdWxlIGJ5IGhhbmQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBoYW5kbGUgbW9kdWxlIHBhY2thZ2luZyBkeW5hbWljYWxseS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaGFuZGxlIG9wdGlvbmFsIG1vZHVsZSBwYWNrYWdpbmcsIHlvdSBuZWVkIHRvIGRvIHR3byB0aGluZ3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGUgbW9kdWxlIHBhY2thZ2luZyBpcyBhY3R1YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuc3VyZSB0aGF0IGFueSBkZXBlbmRlbmNpZXMgb24gb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgZnJvbSBvdGhlciByZWNpcGVzIGFyZSBzYXRpc2ZpZWQgYnkgeW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J21ha2luZy1zdXJlLXRoZS1wYWNrYWdpbmctaXMtZG9uZSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPk1ha2luZyBTdXJlIHRoZSBQYWNrYWdpbmcgaXMgRG9uZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gZW5zdXJlIHRoZSBtb2R1bGUgcGFja2FnaW5nIGFjdHVhbGx5IGdldHMgZG9uZSwgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gZnVuY3Rpb24gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfcGFja2FnZXM8L2ZpbGVuYW1lPiBQeXRob24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBzZWFyY2hlcyBmb3IgYSBwYXR0ZXJuIG9mIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHVuZGVyIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHBhdGggYW5kIGNyZWF0ZXMgYSBwYWNrYWdlIGZvciBlYWNoIG9uZSBpdCBmaW5kcworICAgICAgICAgICAgICAgICAgICBieSBhcHBlbmRpbmcgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfcGFja2FnZW5hbWU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTX3BhY2thZ2VuYW1lPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVNDUklQVElPTl9wYWNrYWdlbmFtZTwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+bGlnaHR0cGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgICAgICAgbGlnaHR0cGRfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnKQorICAgICB9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgc3BlY2lmaWVzIGEgbnVtYmVyIG9mIHRoaW5ncyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY2FsbCB0byA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGZpbGVzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHlvdXIgcmVjaXBlIHRocm91Z2ggPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIHRvIHNlYXJjaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIG1hdGNoIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBleGFtcGxlLCBub3RlIHRoZSBwYXJlbnRoZXNlcyAoKSB0aGF0IG1hcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFydCBvZiB0aGUgZXhwcmVzc2lvbiBmcm9tIHdoaWNoIHRoZSBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHNob3VsZCBiZSBkZXJpdmVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgcGF0dGVybiB0byB1c2UgZm9yIHRoZSBwYWNrYWdlIG5hbWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZGVzY3JpcHRpb24gZm9yIGVhY2ggcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbiBlbXB0eSBzdHJpbmcgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dHJhX2RlcGVuZHM8L2ZpbGVuYW1lPiwgd2hpY2ggZGlzYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBkZXBlbmRlbmN5IG9uIHRoZSBtYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpZ2h0dHBkPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHVzLCBpZiBhIGZpbGUgaW4gPGZpbGVuYW1lPiR7bGliZGlyfTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIDxmaWxlbmFtZT5tb2RfYWxpYXMuc288L2ZpbGVuYW1lPiBpcyBmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBhY2thZ2UgY2FsbGVkIDxmaWxlbmFtZT5saWdodHRwZC1tb2R1bGUtYWxpYXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgZm9yIGl0IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gIkxpZ2h0dHBkIG1vZHVsZSBmb3IgYWxpYXMiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT2Z0ZW4sIHBhY2thZ2luZyBtb2R1bGVzIGlzIGFzIHNpbXBsZSBhcyB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgZXhhbXBsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbW9yZSBhZHZhbmNlZCBvcHRpb25zIGV4aXN0IHRoYXQgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+IHRvIG1vZGlmeSBpdHMKKyAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgaWYgeW91IG5lZWQgdG8sIHlvdSBjYW4gYWRkIG1vcmUgbG9naWMgYnkgc3BlY2lmeWluZworICAgICAgICAgICAgICAgICAgICBhIGhvb2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGVhY2ggcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwZXJmZWN0bHkgYWNjZXB0YWJsZSB0byBjYWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19zcGxpdF9wYWNrYWdlczwvZmlsZW5hbWU+IG11bHRpcGxlIHRpbWVzIGlmCisgICAgICAgICAgICAgICAgICAgIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgc2V0IG9mIG1vZHVsZXMgdG8gcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbm5tYW4uaW5jPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi88L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb2YgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPnNvdXJjZSByZXBvc2l0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgZXhhbXBsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYSByZWZlcmVuY2UgdGhhdCBzaG93cworICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4gbWFuZGF0b3J5IGFuZAorICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNYW5kYXRvcnkgYXJndW1lbnRzCisKKyAgICAgcm9vdAorICAgICAgICBUaGUgcGF0aCBpbiB3aGljaCB0byBzZWFyY2gKKyAgICAgZmlsZV9yZWdleAorICAgICAgICBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggc2VhcmNoZWQgZmlsZXMuCisgICAgICAgIFVzZSBwYXJlbnRoZXNlcyAoKSB0byBtYXJrIHRoZSBwYXJ0IG9mIHRoaXMKKyAgICAgICAgZXhwcmVzc2lvbiB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRlcml2ZSB0aGUKKyAgICAgICAgbW9kdWxlIG5hbWUgKHRvIGJlIHN1YnN0aXR1dGVkIHdoZXJlICVzIGlzCisgICAgICAgIHVzZWQgaW4gb3RoZXIgZnVuY3Rpb24gYXJndW1lbnRzIGFzIG5vdGVkIGJlbG93KQorICAgICBvdXRwdXRfcGF0dGVybgorICAgICAgICBQYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuIE11c3QKKyAgICAgICAgaW5jbHVkZSAlcy4KKyAgICAgZGVzY3JpcHRpb24KKyAgICAgICAgRGVzY3JpcHRpb24gdG8gc2V0IGZvciBlYWNoIHBhY2thZ2UuIE11c3QKKyAgICAgICAgaW5jbHVkZSAlcy4KKworICAgICBPcHRpb25hbCBhcmd1bWVudHMKKworICAgICBwb3N0aW5zdAorICAgICAgICBQb3N0aW5zdGFsbCBzY3JpcHQgdG8gdXNlIGZvciBhbGwgcGFja2FnZXMKKyAgICAgICAgKGFzIGEgc3RyaW5nKQorICAgICByZWN1cnNpdmUKKyAgICAgICAgVHJ1ZSB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIHNlYXJjaCAtIGRlZmF1bHQKKyAgICAgICAgRmFsc2UKKyAgICAgaG9vaworICAgICAgICBBIGhvb2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBldmVyeSBtYXRjaC4KKyAgICAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICBhcmd1bWVudHMgKGluIHRoZSBvcmRlciBsaXN0ZWQpOgorCisgICAgICAgIGYKKyAgICAgICAgICAgRnVsbCBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBtYXRjaAorICAgICAgICBwa2cKKyAgICAgICAgICAgVGhlIHBhY2thZ2UgbmFtZQorICAgICAgICBmaWxlX3JlZ2V4CisgICAgICAgICAgIEFzIGFib3ZlCisgICAgICAgIG91dHB1dF9wYXR0ZXJuCisgICAgICAgICAgIEFzIGFib3ZlCisgICAgICAgIG1vZHVsZW5hbWUKKyAgICAgICAgICAgVGhlIG1vZHVsZSBuYW1lIGRlcml2ZWQgdXNpbmcgZmlsZV9yZWdleAorCisgICAgIGV4dHJhX2RlcGVuZHMKKyAgICAgICAgRXh0cmEgcnVudGltZSBkZXBlbmRlbmNpZXMgKFJERVBFTkRTKSB0byBiZQorICAgICAgICBzZXQgZm9yIGFsbCBwYWNrYWdlcy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgTm9uZQorICAgICAgICBjYXVzZXMgYSBkZXBlbmRlbmN5IG9uIHRoZSBtYWluIHBhY2thZ2UKKyAgICAgICAgKCR7UE59KSAtIGlmIHlvdSBkbyBub3Qgd2FudCB0aGlzLCBwYXNzIGVtcHR5CisgICAgICAgIHN0cmluZyAnJyBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgICAgIGF1eF9maWxlc19wYXR0ZXJuCisgICAgICAgIEV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yIGVhY2gKKyAgICAgICAgcGFja2FnZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdAorICAgICAgICBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdCBpbmNsdWRlICVzLgorICAgICBwb3N0cm0KKyAgICAgICAgcG9zdHJtIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYQorICAgICAgICBzdHJpbmcpCisgICAgIGFsbG93X2RpcnMKKyAgICAgICAgVHJ1ZSB0byBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBtYXRjaGVkIC0KKyAgICAgICAgZGVmYXVsdCBGYWxzZQorICAgICBwcmVwZW5kCisgICAgICAgIElmIFRydWUsIHByZXBlbmQgY3JlYXRlZCBwYWNrYWdlcyB0byBQQUNLQUdFUworICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IEZhbHNlIHdoaWNoIGFwcGVuZHMgdGhlbQorICAgICBtYXRjaF9wYXRoCisgICAgICAgIG1hdGNoIGZpbGVfcmVnZXggb24gdGhlIHdob2xlIHJlbGF0aXZlIHBhdGggdG8KKyAgICAgICAgdGhlIHJvb3QgcmF0aGVyIHRoYW4ganVzdCB0aGUgZmlsZSBuYW1lCisgICAgIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltCisgICAgICAgIEV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yIGVhY2gKKyAgICAgICAgcGFja2FnZSwgdXNpbmcgdGhlIGFjdHVhbCBkZXJpdmVkIG1vZHVsZSBuYW1lCisgICAgICAgIHJhdGhlciB0aGFuIGNvbnZlcnRpbmcgaXQgdG8gc29tZXRoaW5nIGxlZ2FsCisgICAgICAgIGZvciBhIHBhY2thZ2UgbmFtZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtCisgICAgICAgIG9yIGEgbGlzdCBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdAorICAgICAgICBpbmNsdWRlICVzLgorICAgICBhbGxvd19saW5rcworICAgICAgICBUcnVlIHRvIGFsbG93IHN5bWxpbmtzIHRvIGJlIG1hdGNoZWQgLSBkZWZhdWx0CisgICAgICAgIEZhbHNlCisgICAgIHN1bW1hcnkKKyAgICAgICAgU3VtbWFyeSB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdCBpbmNsdWRlICVzOworICAgICAgICBkZWZhdWx0cyB0byBkZXNjcmlwdGlvbiBpZiBub3Qgc2V0LgorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzYXRpc2Z5aW5nLWRlcGVuZGVuY2llcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlNhdGlzZnlpbmcgRGVwZW5kZW5jaWVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIHBhcnQgZm9yIGhhbmRsaW5nIG9wdGlvbmFsIG1vZHVsZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gZW5zdXJlIHRoYXQgYW55IGRlcGVuZGVuY2llcyBvbiBvcHRpb25hbCBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgIGZyb20gb3RoZXIgcmVjaXBlcyBhcmUgc2F0aXNmaWVkIGJ5IHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGJlIHN1cmUgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFU19EWU5BTUlDJz48ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+PC91bGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbnRpbnVlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlnaHR0cGQ8L2ZpbGVuYW1lPiByZWNpcGUgc2hvd24gZWFybGllcjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFU19EWU5BTUlDID0gImxpZ2h0dHBkLW1vZHVsZS0uKiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBzcGVjaWZpZWQgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gb2YKKyAgICAgICAgICAgICAgICAgICAgY291cnNlIGJlIGFueXRoaW5nLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGl0IGlzIDxmaWxlbmFtZT5saWdodHRwZC1tb2R1bGUtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGlzIHNwZWNpZmllZCBhcyB0aGUgcHJlZml4IHRvIGVuc3VyZSB0aGF0IGFueQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvbiBhIHBhY2thZ2UgbmFtZSBzdGFydGluZyB3aXRoIHRoZSBwcmVmaXggYXJlIHNhdGlzZmllZAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYnVpbGQgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyA8ZmlsZW5hbWU+ZG9fc3BsaXRfcGFja2FnZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHRoZSB2YWx1ZSB5b3UgcHV0IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4gc2hvdWxkIGNvcnJlc3BvbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgcGF0dGVybiBzcGVjaWZpZWQgaW4gdGhlIGNhbGwgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3NwbGl0X3BhY2thZ2VzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXJ1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBSdW50aW1lIFBhY2thZ2UgTWFuYWdlbWVudDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIER1cmluZyBhIGJ1aWxkLCBCaXRCYWtlIGFsd2F5cyB0cmFuc2Zvcm1zIGEgcmVjaXBlIGludG8gb25lIG9yCisgICAgICAgICAgICAgICAgbW9yZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgQml0QmFrZSB0YWtlcyB0aGUgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiByZWNpcGUKKyAgICAgICAgICAgICAgICBhbmQgY3VycmVudGx5IHByb2R1Y2VzIHRoZSA8ZmlsZW5hbWU+YmFzaC1kYmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC1zdGF0aWNkZXY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC1kZXY8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJhc2gtZG9jPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2gtbG9jYWxlPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgTm90IGFsbCBnZW5lcmF0ZWQgcGFja2FnZXMgYXJlIGluY2x1ZGVkIGluIGFuIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBzZXZlcmFsIHNpdHVhdGlvbnMsIHlvdSBtaWdodCBuZWVkIHRvIHVwZGF0ZSwgYWRkLCByZW1vdmUsCisgICAgICAgICAgICAgICAgb3IgcXVlcnkgdGhlIHBhY2thZ2VzIG9uIGEgdGFyZ2V0IGRldmljZSBhdCBydW50aW1lCisgICAgICAgICAgICAgICAgKGkuZS4gd2l0aG91dCBoYXZpbmcgdG8gZ2VuZXJhdGUgYSBuZXcgaW1hZ2UpLgorICAgICAgICAgICAgICAgIEV4YW1wbGVzIG9mIHN1Y2ggc2l0dWF0aW9ucyBpbmNsdWRlOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3YW50IHRvIHByb3ZpZGUgaW4tdGhlLWZpZWxkIHVwZGF0ZXMgdG8gZGVwbG95ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXMgKGUuZy4gc2VjdXJpdHkgdXBkYXRlcykuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdhbnQgdG8gaGF2ZSBhIGZhc3QgdHVybi1hcm91bmQgZGV2ZWxvcG1lbnQgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvbmUgb3IgbW9yZSBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24geW91ciBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgaW5zdGFsbCB0aGUgImRlYnVnIiBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgb2YgdmFyaW91cyBhcHBsaWNhdGlvbnMgb24geW91ciBkZXZpY2Ugc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGNhbiBiZSBncmVhdGx5IGltcHJvdmVkIGJ5IGFsbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gc3ltYm9scyBhbmQgc291cmNlIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3Ugd2FudCB0byBkZXBsb3kgYSBtb3JlIG1pbmltYWwgcGFja2FnZSBzZWxlY3Rpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZGV2aWNlIGJ1dCBhbGxvdyBpbi10aGUtZmllbGQgdXBkYXRlcyB0byBhZGQgYQorICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VyIHNlbGVjdGlvbiBmb3IgY3VzdG9taXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBhbGwgdGhlc2Ugc2l0dWF0aW9ucywgeW91IGhhdmUgc29tZXRoaW5nIHNpbWlsYXIgdG8gYSBtb3JlCisgICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwgTGludXggZGlzdHJpYnV0aW9uIGluIHRoYXQgaW4tZmllbGQgZGV2aWNlcworICAgICAgICAgICAgICAgIGFyZSBhYmxlIHRvIHJlY2VpdmUgcHJlLWNvbXBpbGVkIHBhY2thZ2VzIGZyb20gYSBzZXJ2ZXIgZm9yCisgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIG9yIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBCZWluZyBhYmxlIHRvIGluc3RhbGwgdGhlc2UgcGFja2FnZXMgb24gYSBydW5uaW5nLAorICAgICAgICAgICAgICAgIGluLWZpZWxkIGRldmljZSBpcyB3aGF0IGlzIHRlcm1lZCAicnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgbWFuYWdlbWVudCIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHVzZSBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCwgeW91CisgICAgICAgICAgICAgICAgbmVlZCBhIGhvc3Qvc2VydmVyIG1hY2hpbmUgdGhhdCBzZXJ2ZXMgdXAgdGhlIHByZS1jb21waWxlZAorICAgICAgICAgICAgICAgIHBhY2thZ2VzIHBsdXMgdGhlIHJlcXVpcmVkIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgcGFja2FnZSBtYW5pcHVsYXRpb24gdG9vbHMgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgbWFjaGluZSBpcyBhIGxpa2VseSBjYW5kaWRhdGUgdG8gYWN0IGFzIHRoZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhhdCBtYWNoaW5lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gYmUgdGhlCisgICAgICAgICAgICAgICAgcGFja2FnZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIG1hY2hpbmUgY291bGQgcHVzaCBpdHMgYXJ0aWZhY3RzIHRvIGFub3RoZXIgbWFjaGluZQorICAgICAgICAgICAgICAgIHRoYXQgYWN0cyBhcyB0aGUgc2VydmVyIChlLmcuIEludGVybmV0LWZhY2luZykuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgc2ltcGxlIGJ1aWxkIHRoYXQgdGFyZ2V0cyBqdXN0IG9uZSBkZXZpY2UgcHJvZHVjZXMKKyAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIHBhY2thZ2UgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBwYWNrYWdlcyBwcm9kdWNlZCBieSBhIGJ1aWxkIGFyZSBzZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICBvdXQgaW50byBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgcGFja2FnZSBncm91cGluZ3MgYmFzZWQgb24KKyAgICAgICAgICAgICAgICBjcml0ZXJpYSBzdWNoIGFzIHRoZSB0YXJnZXQncyBDUFUgYXJjaGl0ZWN0dXJlLCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgYm9hcmQsIG9yIHRoZSBDIGxpYnJhcnkgdXNlZCBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGJ1aWxkIHRhcmdldGluZyB0aGUgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRldmljZSBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIHRocmVlIHBhY2thZ2UgZGF0YWJhc2VzOgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGw8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmFybXY1dGU8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudGVkIHlvdXIgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiBkZXZpY2UgdG8gYmUKKyAgICAgICAgICAgICAgICBhd2FyZSBvZiBhbGwgdGhlIHBhY2thZ2VzIHRoYXQgd2VyZSBhdmFpbGFibGUgdG8gaXQsCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIG5lZWQgdG8gcG9pbnQgaXQgdG8gZWFjaCBvZiB0aGVzZSBkYXRhYmFzZXMKKyAgICAgICAgICAgICAgICBpbmRpdmlkdWFsbHkuCisgICAgICAgICAgICAgICAgSW4gYSBzaW1pbGFyIHdheSwgYSB0cmFkaXRpb25hbCBMaW51eCBkaXN0cmlidXRpb24gdXN1YWxseSBpcworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgdG8gYmUgYXdhcmUgb2YgYSBudW1iZXIgb2Ygc29mdHdhcmUgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICAgICAgZnJvbSB3aGljaCBpdCByZXRyaWV2ZXMgcGFja2FnZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwgYW5kCisgICAgICAgICAgICAgICAgbm90IHJlcXVpcmVkIGZvciBhIHN1Y2Nlc3NmdWwgYnVpbGQgb3IgZGVwbG95bWVudCBpbiBhbnkKKyAgICAgICAgICAgICAgICB3YXkuCisgICAgICAgICAgICAgICAgQnV0IGlmIHlvdSB3YW50IHRvIG1ha2UgdXNlIG9mIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50LAorICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGRvIGEgY291cGxlIHRoaW5ncyBhYm92ZSBhbmQgYmV5b25kIHRoZSBiYXNpY3MuCisgICAgICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC1idWlsZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGJ1aWxkIGNvbnNpZGVyYXRpb25zIHRoYXQgeW91IG5lZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgYXdhcmUgb2YgaW4gb3JkZXIgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBydW50aW1lCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlbWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBCaXRCYWtlIGdlbmVyYXRlcyBwYWNrYWdlcyBpdCBuZWVkcyB0byBrbm93CisgICAgICAgICAgICAgICAgICAgIHdoYXQgZm9ybWF0IG9yIGZvcm1hdHMgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICBJbiB5b3VyIGNvbmZpZ3VyYXRpb24sIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgdGhlIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNob29zZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgZm9ybWF0IGJ1dCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBhdCBsZWFzdCBvbmUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdvdWxkIGxpa2UgeW91ciBpbWFnZSB0byBzdGFydCBvZmYgd2l0aCBhIGJhc2ljCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgZGF0YWJhc2Ugb2YgdGhlIHBhY2thZ2VzIGluIHlvdXIgY3VycmVudCBidWlsZAorICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGhhdmUgdGhlIHJlbGV2YW50IHRvb2xzIGF2YWlsYWJsZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGZvciBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCwgeW91IGNhbiBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlLW1hbmFnZW1lbnQiIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGluZyAicGFja2FnZS1tYW5hZ2VtZW50IiBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZW5zdXJlcyB0aGF0IHdoZW4gdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGFzc2VtYmxlZCBmb3IgeW91ciB0YXJnZXQsIHRoZSBpbWFnZSBpbmNsdWRlcworICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudGx5LWtub3duIHBhY2thZ2UgZGF0YWJhc2VzIGFzIHdlbGwgYXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldC1zcGVjaWZpYyB0b29scyByZXF1aXJlZCBmb3IgcnVudGltZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZW1lbnQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIHN0YXJ0IHlvdXIgaW1hZ2Ugb2ZmIHdpdGhvdXQgYW55IGRhdGFiYXNlcworICAgICAgICAgICAgICAgICAgICBidXQgb25seSBpbmNsdWRlIHRoZSByZXF1aXJlZCBvbi10YXJnZXQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0b29sKHMpLgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCB5b3UgY291bGQgaW5jbHVkZSAib3BrZyIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIElQSyBwYWNrYWdlIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIGluaXRpYWxpemUgeW91ciB0YXJnZXQncyBwYWNrYWdlIGRhdGFiYXNlKHMpCisgICAgICAgICAgICAgICAgICAgIGxhdGVyIG9uY2UgeW91ciBpbWFnZSBpcyB1cCBhbmQgcnVubmluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbmV2ZXIgeW91IHBlcmZvcm0gYW55IHNvcnQgb2YgYnVpbGQgc3RlcCB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxseSBnZW5lcmF0ZSBhIHBhY2thZ2Ugb3IgbW9kaWZ5IGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIGl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byByZS1nZW5lcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBpbmRleCB3aXRoOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgJCBiaXRiYWtlIHBhY2thZ2UtaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgaXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gc2ltcGx5IGRvIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnNvbWUtcGFja2FnZTwvcmVwbGFjZWFibGU+IHBhY2thZ2UtaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGJlY2F1c2UgQml0QmFrZSBkb2VzIG5vdCBwcm9wZXJseSBzY2hlZHVsZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UtaW5kZXg8L2ZpbGVuYW1lPiB0YXJnZXQgZnVsbHkgYWZ0ZXIgYW55CisgICAgICAgICAgICAgICAgICAgIG90aGVyIHRhcmdldCBoYXMgY29tcGxldGVkLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBiZSBzdXJlIHRvIHJ1biB0aGUgcGFja2FnZSB1cGRhdGUgc3RlcCBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBkZXNjcmliZWQgYmVsb3cgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtaXBrJz5Vc2luZyBJUEs8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCBpZiB5b3UgYXJlIHVzaW5nIElQSyBhcyB5b3VyIHBhY2thZ2UgZm9ybWF0LCB5b3UKKyAgICAgICAgICAgICAgICAgICAgY2FuIG1ha2UgdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHJvLWZlZWQtY29uZmlnczwvZmlsZW5hbWU+IHJlY2lwZSBwcm92aWRlZAorICAgICAgICAgICAgICAgICAgICBieSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGluIG9yZGVyIHRvIGNvbmZpZ3VyZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCB0byB1c2UgeW91ciBJUEsgZGF0YWJhc2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgYnVpbGQgaXMgY29tcGxldGUsIHlvdXIgcGFja2FnZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveS88cmVwbGFjZWFibGU+cGFja2FnZS1mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIDxmaWxlbmFtZT4ke1RNUERJUn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gYW5kIHlvdXIgc2VsZWN0ZWQgcGFja2FnZSB0eXBlCisgICAgICAgICAgICAgICAgICAgIGlzIElQSywgdGhlbiB5b3VyIElQSyBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvZGVwbG95L2lwazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXNlcnZlcic+CisgICAgICAgICAgICAgICAgPHRpdGxlPkhvc3Qgb3IgU2VydmVyIE1hY2hpbmUgU2V0dXA8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgcGFja2FnZXMgYXJlIHNlcnZlZCBmcm9tIGEgc2VydmVyIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIEhUVFAuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHByb3RvY29scyBhcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBIVFRQLCB0aGVuIHNldHVwIGFuZCBjb25maWd1cmUgYQorICAgICAgICAgICAgICAgICAgICB3ZWIgc2VydmVyLCBzdWNoIGFzIEFwYWNoZSAyIG9yIGxpZ2h0dHBkLCBvbiB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBzZXJ2aW5nIHRoZSBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIHRoZSBidWlsZCBtYWNoaW5lIGNhbiBhY3QgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugc2VydmVyLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHRoYXQgZGVzY3JpYmUgc2VydmVyIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgc2V0dXBzLCB0aGUgYnVpbGQgbWFjaGluZSBpcyBhc3N1bWVkIHRvIGFsc28gYmUgdGhlIHNlcnZlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zZXJ2ZXItYXBhY2hlJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlcnZpbmcgUGFja2FnZXMgdmlhIEFwYWNoZSAyPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBhcmUgdXNpbmcgdGhlIEFwYWNoZSAyCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdGhlIGRpcmVjdG9yeSB0byB5b3VyIEFwYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB3aGljaCB5b3UgY2FuIGZpbmQgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaHR0cGQvY29uZi9odHRwZC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBjb21tYW5kcyBzaW1pbGFyIHRvIHRoZXNlIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGUgY29tbWFuZHMgYXNzdW1lIGEgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gaW4geW91ciBob21lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgYWxzbyBhc3N1bWVzIGFuIFJQTSBwYWNrYWdlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgcGFja2FnZSB0eXBlLCBzdWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIElQSywgdXNlICJpcGsiIGluIHRoZSBwYXRobmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJmx0O1ZpcnR1YWxIb3N0ICo6ODAmZ3Q7CisgICAgICAgLi4uLgorICAgICAgICAgQWxpYXMgL3JwbSB+L3Bva3kvYnVpbGQvdG1wL2RlcGxveS9ycG0KKyAgICAgICAgICZsdDtEaXJlY3RvcnkgIn4vcG9reS9idWlsZC90bXAvZGVwbG95L3JwbSImZ3Q7CisgICAgICAgICAgIE9wdGlvbnMgK0luZGV4ZXMKKyAgICAgICAgICZsdDsvRGlyZWN0b3J5Jmd0OworICAgICAmbHQ7L1ZpcnR1YWxIb3N0Jmd0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxvYWQgdGhlIEFwYWNoZSBjb25maWd1cmF0aW9uIGFzIGRlc2NyaWJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhbGwgY29tbWFuZHMsIGJlIHN1cmUgeW91IGhhdmUgcm9vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2aWxlZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIHVzaW5nIEZlZG9yYSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc2VydmljZSBodHRwZCByZWxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgVWJ1bnR1IGFuZCBEZWJpYW4sIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgL2V0Yy9pbml0LmQvYXBhY2hlMiByZWxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgT3BlblNVU0UsIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgL2V0Yy9pbml0LmQvYXBhY2hlMiByZWxvYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1c2luZyBTZWN1cml0eS1FbmhhbmNlZCBMaW51eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VMaW51eCksIHlvdSBuZWVkIHRvIGxhYmVsIHRoZSBmaWxlcyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBhY2Nlc3NpYmxlIHRocm91Z2ggQXBhY2hlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZyb20gdGhlIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIFJQTSBwYWNrYWdlIHR5cGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgY2hjb24gLVIgLWggLXQgaHR0cGRfc3lzX2NvbnRlbnRfdCB0bXAvZGVwbG95L3JwbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3BhY2thZ2Utc2VydmVyLWxpZ2h0dHBkJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlNlcnZpbmcgUGFja2FnZXMgdmlhIGxpZ2h0dHBkPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgbGlnaHR0cGQsIGFsbCB5b3UgbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZG8gaXMgdG8gcHJvdmlkZSBhIGxpbmsgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L2RlcGxveS88cmVwbGFjZWFibGU+cGFja2FnZS1mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdG8gbGlnaHR0cGQncyBkb2N1bWVudC1yb290LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZXRlcm1pbmUgdGhlIHNwZWNpZmljcyBvZiB5b3VyIGxpZ2h0dHBkCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gYnkgbG9va2luZyB0aHJvdWdoIGl0cyBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyB1c3VhbGx5IGZvdW5kIGF0OgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbGlnaHR0cGQvbGlnaHR0cGQuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBJUEssIGxpZ2h0dHBkJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LXJvb3QgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Zhci93d3cvbGlnaHR0cGQ8L2ZpbGVuYW1lPiwgYW5kIHlvdSBoYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGZvciBhIHRhcmdldCBuYW1lZCAiQk9BUkQiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB5b3UgbWlnaHQgY3JlYXRlIGEgbGluayBmcm9tIHlvdXIgYnVpbGQgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxpZ2h0dHBkJ3MgZG9jdW1lbnQtcm9vdCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICMgbG4gLXMgJChQV0QpL3RtcC9kZXBsb3kvaXBrIC92YXIvd3d3L2xpZ2h0dHBkL0JPQVJELWRpcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgbmVlZCB0byBzdGFydCB0aGUgbGlnaHR0cGQgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1ldGhvZCB1c2VkIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgdmFyaWVzIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBvbmUgYmFzaWMgbWV0aG9kIHRoYXQgc3RhcnRzIGl0IGJ5IGhhbmQgaXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIyBsaWdodHRwZCAtZiAvZXRjL2xpZ2h0dHBkL2xpZ2h0dHBkLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bnRpbWUtcGFja2FnZS1tYW5hZ2VtZW50LXRhcmdldCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlRhcmdldCBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB1cCB0aGUgdGFyZ2V0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIFJQTSBhbmQgSVBLLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtcnBtJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIFJQTTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gZm9yIHBlcmZvcm1pbmcgcnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIFJQTSBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IGlzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtYXJ0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSB0YXJnZXQgbWFjaGluZSwgeW91IG5lZWQgdG8gaW5mb3JtCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21hcnQ8L2ZpbGVuYW1lPiBvZiBldmVyeSBwYWNrYWdlIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHlvdXIgdGFyZ2V0IGRldmljZSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRocmVlIHBhY2thZ2UgZGF0YWJhc2VzIGZyb20gYSBzZXJ2ZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXJ2ZXIubmFtZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsbDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aTU4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBHaXZlbiB0aGlzIGV4YW1wbGUsIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc21hcnQgY2hhbm5lbCAtLWFkZCBhbGwgdHlwZT1ycG0tbWQgYmFzZXVybD1odHRwOi8vc2VydmVyLm5hbWUvcnBtL2FsbAorICAgICAjIHNtYXJ0IGNoYW5uZWwgLS1hZGQgaTU4NSB0eXBlPXJwbS1tZCBiYXNldXJsPWh0dHA6Ly9zZXJ2ZXIubmFtZS9ycG0vaTU4NgorICAgICAjIHNtYXJ0IGNoYW5uZWwgLS1hZGQgcWVtdXg4NiB0eXBlPXJwbS1tZCBiYXNldXJsPWh0dHA6Ly9zZXJ2ZXIubmFtZS9ycG0vcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQWxzbyBmcm9tIHRoZSB0YXJnZXQgbWFjaGluZSwgZmV0Y2ggdGhlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHVzaW5nIHRoaXMgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBzbWFydCB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHVzZSB0aGUgPGZpbGVuYW1lPnNtYXJ0IHF1ZXJ5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+c21hcnQgaW5zdGFsbDwvZmlsZW5hbWU+IGNvbW1hbmRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kIGFuZCBpbnN0YWxsIHBhY2thZ2VzIGZyb20gdGhlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudC10YXJnZXQtaXBrJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPlVzaW5nIElQSzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gZm9yIHBlcmZvcm1pbmcgcnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IG9mIElQSyBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IGlzIGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wa2c8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gaW5mb3JtIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGRhdGFiYXNlcyB5b3Ugd2FudCB0byB1c2UsIHNpbXBseSBjcmVhdGUgb25lCisgICAgICAgICAgICAgICAgICAgICAgICBvciBtb3JlIDxmaWxlbmFtZT4qLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL29wa2c8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IGFwcGxpY2F0aW9uIHVzZXMgdGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZmluZCBpdHMgYXZhaWxhYmxlIHBhY2thZ2UgZGF0YWJhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgY29uZmlndXJlZCB5b3VyIEhUVFAgc2VydmVyCisgICAgICAgICAgICAgICAgICAgICAgICBvbiB5b3VyIG1hY2hpbmUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53d3cubXlzaXRlLmNvbTwvZmlsZW5hbWU+IHRvIHNlcnZlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGEgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgaXRzIGRvY3VtZW50LXJvb3QuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBtaWdodCBjcmVhdGUgYSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG9uIHRoZSB0YXJnZXQgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9vcGtnL2Jhc2UtZmVlZHMuY29uZjwvZmlsZW5hbWU+IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzcmMvZ3ogYWxsIGh0dHA6Ly93d3cubXlzaXRlLmNvbS9CT0FSRC1kaXIvYWxsCisgICAgIHNyYy9neiBhcm12N2EgaHR0cDovL3d3dy5teXNpdGUuY29tL0JPQVJELWRpci9hcm12N2EKKyAgICAgc3JjL2d6IGJlYWdsZWJvbmUgaHR0cDovL3d3dy5teXNpdGUuY29tL0JPQVJELWRpci9iZWFnbGVib25lCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFzIGEgd2F5IG9mIG1ha2luZyBpdCBlYXNpZXIgdG8gZ2VuZXJhdGUgYW5kIG1ha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIElQSyBjb25maWd1cmF0aW9uIGZpbGVzIGF2YWlsYWJsZSBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHNpbXBseSBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GRUVEX0RFUExPWURJUl9CQVNFX1VSSSc+PGZpbGVuYW1lPkZFRURfREVQTE9ZRElSX0JBU0VfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gcG9pbnQgdG8geW91ciBzZXJ2ZXIgYW5kIHRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC1yb290IHdoaWNoIGNvbnRhaW5zIHRoZSBkYXRhYmFzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZTogaWYgeW91IGFyZSBzZXJ2aW5nIHlvdXIgcGFja2FnZXMgb3ZlcgorICAgICAgICAgICAgICAgICAgICAgICAgSFRUUCwgeW91ciBzZXJ2ZXIncyBJUCBhZGRyZXNzIGlzIDE5Mi4xNjguNy4xLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgZGF0YWJhc2VzIGFyZSBsb2NhdGVkIGluIGEgZGlyZWN0b3J5IGNhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+IHVuZGVybmVhdGggeW91ciBIVFRQCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIncyBkb2N1bWVudC1yb290LCB5b3UgbmVlZCB0byBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUVEX0RFUExPWURJUl9CQVNFX1VSSTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aHR0cDovLzE5Mi4xNjguNy4xL0JPQVJELWRpcjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWxlcyB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIHRhcmdldCB0byB3b3JrIHdpdGggdGhpcyBmZWVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IG1hY2hpbmUsIGZldGNoIChvciByZWZyZXNoKSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gdXNpbmcgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIG9wa2cgdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyB1c2UgdGhlIDxmaWxlbmFtZT5vcGtnIGxpc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGtnIGluc3RhbGw8L2ZpbGVuYW1lPiBjb21tYW5kcyB0byBmaW5kIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCBwYWNrYWdlcyBmcm9tIHRoZSByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5UZXN0aW5nIFBhY2thZ2VzIFdpdGggcHRlc3Q8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIFBhY2thZ2UgVGVzdCAocHRlc3QpIHJ1bnMgdGVzdHMgYWdhaW5zdCBwYWNrYWdlcyBidWlsdAorICAgICAgICAgICAgICAgIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICBBIHB0ZXN0IGNvbnRhaW5zIGF0IGxlYXN0IHR3byBpdGVtczogdGhlIGFjdHVhbCB0ZXN0LCBhbmQKKyAgICAgICAgICAgICAgICBhIHNoZWxsIHNjcmlwdCAoPGZpbGVuYW1lPnJ1bi1wdGVzdDwvZmlsZW5hbWU+KSB0aGF0IHN0YXJ0cworICAgICAgICAgICAgICAgIHRoZSB0ZXN0LgorICAgICAgICAgICAgICAgIFRoZSBzaGVsbCBzY3JpcHQgdGhhdCBzdGFydHMgdGhlIHRlc3QgbXVzdCBub3QgY29udGFpbgorICAgICAgICAgICAgICAgIHRoZSBhY3R1YWwgdGVzdCAtIHRoZSBzY3JpcHQgb25seSBzdGFydHMgdGhlIHRlc3QuCisgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSB0ZXN0IGNhbiBiZSBhbnl0aGluZyBmcm9tIGEgc2ltcGxlCisgICAgICAgICAgICAgICAgc2hlbGwgc2NyaXB0IHRoYXQgcnVucyBhIGJpbmFyeSBhbmQgY2hlY2tzIHRoZSBvdXRwdXQgdG8KKyAgICAgICAgICAgICAgICBhbiBlbGFib3JhdGUgc3lzdGVtIG9mIHRlc3QgYmluYXJpZXMgYW5kIGRhdGEgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGdlbmVyYXRlcyBvdXRwdXQgaW4gdGhlIGZvcm1hdCB1c2VkIGJ5CisgICAgICAgICAgICAgICAgQXV0b21ha2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+cmVzdWx0PC9yZXBsYWNlYWJsZT46IDxyZXBsYWNlYWJsZT50ZXN0bmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIHdoZXJlIHRoZSByZXN1bHQgY2FuIGJlIDxmaWxlbmFtZT5QQVNTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZBSUw8L2ZpbGVuYW1lPiwgb3IgPGZpbGVuYW1lPlNLSVA8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgdGhlIHRlc3RuYW1lIGNhbiBiZSBhbnkgaWRlbnRpZnlpbmcgc3RyaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIFlvY3RvIFByb2plY3QgcmVjaXBlcyB0aGF0IGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgZW5hYmxlZCB3aXRoIHB0ZXN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9QdGVzdCc+UHRlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWNpcGUgaXMgInB0ZXN0LWVuYWJsZWQiIGlmIGl0IGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wdGVzdCc+PGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdhZGRpbmctcHRlc3QtdG8teW91ci1idWlsZCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkFkZGluZyBwdGVzdCB0byBZb3VyIEJ1aWxkPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBhZGQgcGFja2FnZSB0ZXN0aW5nIHRvIHlvdXIgYnVpbGQsIGFkZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9ICIgcHRlc3QiCisgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTICs9ICJwdGVzdC1wa2dzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBidWlsZCBpcyBjb21wbGV0ZSwgdGhlIHB0ZXN0IGZpbGVzIGFyZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliLzxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4vcHRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0aGluIHRoZSBpbWFnZSwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdydW5uaW5nLXB0ZXN0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBwdGVzdDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wdGVzdC1ydW5uZXI8L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxzIGEKKyAgICAgICAgICAgICAgICAgICAgc2hlbGwgc2NyaXB0IHRoYXQgbG9vcHMgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIHB0ZXN0IHRlc3QKKyAgICAgICAgICAgICAgICAgICAgc3VpdGVzIGFuZCBydW5zIHRoZW0gaW4gc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG1pZ2h0IHdhbnQgdG8gYWRkIHRoaXMgcGFja2FnZSB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2dldHRpbmcteW91ci1wYWNrYWdlLXJlYWR5Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBZb3VyIFBhY2thZ2UgUmVhZHk8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIGVuYWJsZSBhIHJlY2lwZSB0byBydW4gaW5zdGFsbGVkIHB0ZXN0cworICAgICAgICAgICAgICAgICAgICBvbiB0YXJnZXQgaGFyZHdhcmUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHByZXBhcmUgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCB0aGUgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB3aGF0IHlvdSBoYXZlIHRvIGRvIGZvciBlYWNoIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcHRlc3QnPjxmaWxlbmFtZT5wdGVzdDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgdGhlIGZvbGxvd2luZyBsaW5lIGluIGVhY2ggcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaW5oZXJpdCBwdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIDxmaWxlbmFtZT5ydW4tcHRlc3Q8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2NyaXB0IHN0YXJ0cyB5b3VyIHRlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRlIHRoZSBzY3JpcHQgd2hlcmUgeW91IHdpbGwgcmVmZXIgdG8gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc3RhcnRzIGEgdGVzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyEvYmluL3NoCisgICAgIGNkIHRlc3QKKyAgICAgbWFrZSAtayBydW50ZXN0LVRFU1RTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbnN1cmUgZGVwZW5kZW5jaWVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSB0ZXN0IGFkZHMgYnVpbGQgb3IgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG5vcm1hbGx5IGRvIG5vdCBleGlzdCBmb3IgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VjaCBhcyByZXF1aXJpbmcgIm1ha2UiIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgaW4geW91ciByZWNpcGUgaW4gb3JkZXIgZm9yIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbWVldCB0aGUgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGVyZSB0aGUgcGFja2FnZSBoYXMgYSBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiAibWFrZSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZCBhIGZ1bmN0aW9uIHRvIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qgc3VpdGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgbWFueSBwYWNrYWdlcyBzdXBwb3J0IGNyb3NzLWNvbXBpbGF0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgdGVzdCBzdWl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgdXN1YWxseSBuZWVkIHRvIGFkZCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsYXRpb24gZnVuY3Rpb24gdG8gdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPk1hbnkgcGFja2FnZXMgYmFzZWQgb24gQXV0b21ha2UgY29tcGlsZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4gdGhlIHRlc3Qgc3VpdGUgYnkgdXNpbmcgYSBzaW5nbGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgPGZpbGVuYW1lPm1ha2UgY2hlY2s8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgbmF0aXZlIDxmaWxlbmFtZT5tYWtlIGNoZWNrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMgYW5kIHJ1bnMgb24gdGhlIHNhbWUgY29tcHV0ZXIsIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsaW5nIHJlcXVpcmVzIHRoYXQgdGhlIHBhY2thZ2UgaXMgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgaG9zdCBidXQgZXhlY3V0ZWQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbHQgdmVyc2lvbiBvZiBBdXRvbWFrZSB0aGF0IHNoaXBzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpbmNsdWRlcyBhIHBhdGNoIHRoYXQgc2VwYXJhdGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgYW5kIGV4ZWN1dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSB1bmFsdGVyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hlZCB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5tYWtlIGNoZWNrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNyb3NzLWNvbXBpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5SZWdhcmRsZXNzLCB5b3Ugc3RpbGwgbXVzdCBhZGQgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19jb21waWxlX3B0ZXN0PC9maWxlbmFtZT4gZnVuY3Rpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCB0aGUgdGVzdCBzdWl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgYSBmdW5jdGlvbiBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgYnVpbGR0ZXN0LVRFU1RTCisgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RW5zdXJlIHNwZWNpYWwgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgc2V0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHBhY2thZ2UgcmVxdWlyZXMgc3BlY2lhbCBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yIHRvIGNvbXBpbGluZyB0aGUgdGVzdCBjb2RlLCB5b3UgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCBhIDxmaWxlbmFtZT5kb19jb25maWd1cmVfcHRlc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludG8gdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnB0ZXN0PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGNvcGllcyB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW4tcHRlc3Q8L2ZpbGVuYW1lPiB0byB0aGUgdGFyZ2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gcnVucyBtYWtlIDxmaWxlbmFtZT5pbnN0YWxsLXB0ZXN0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIHRlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgbm90IGVub3VnaCwgeW91IG5lZWQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbF9wdGVzdDwvZmlsZW5hbWU+IGZ1bmN0aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2Ugc3VyZSBpdCBnZXRzIGNhbGxlZCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFrZSBpbnN0YWxsLXB0ZXN0IiBjb21wbGV0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JraW5nLXdpdGgtc291cmNlLWZpbGVzJz4KKyAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCBTb3VyY2UgRmlsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd29ya3Mgd2l0aCBzb3VyY2UgZmlsZXMgbG9jYXRlZAorICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgc29tZXRoaW5nIHVzaW5nIEJpdEJha2UsIGEgYmlnIHBhcnQgb2YgdGhlIG9wZXJhdGlvbgorICAgICAgICAgICAgaXMgbG9jYXRpbmcgYW5kIGRvd25sb2FkaW5nIGFsbCB0aGUgc291cmNlIHRhcmJhbGxzLgorICAgICAgICAgICAgRm9yIGltYWdlcywgZG93bmxvYWRpbmcgYWxsIHRoZSBzb3VyY2UgZm9yIHZhcmlvdXMgcGFja2FnZXMgY2FuCisgICAgICAgICAgICB0YWtlIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBpbmZvcm1hdGlvbiBmb3Igd29ya2luZyB3aXRoIHNvdXJjZQorICAgICAgICAgICAgZmlsZXMgdGhhdCBjYW4gbGVhZCB0byBtb3JlIGVmZmljaWVudCB1c2Ugb2YgcmVzb3VyY2VzIGFuZAorICAgICAgICAgICAgdGltZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWVmZmVjdGl2ZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIHVwIEVmZmVjdGl2ZSBNaXJyb3JzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkLCBhIGdvb2QgZGVhbCB0aGF0IGdvZXMgaW50byBhIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBidWlsZCBpcyBzaW1wbHkgZG93bmxvYWRpbmcgYWxsIG9mIHRoZSBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgTWF5YmUgeW91IGhhdmUgYmVlbiB3b3JraW5nIHdpdGggYW5vdGhlciBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAoT3BlbkVtYmVkZGVkIG9yIEFuZ3N0cm9tKSBmb3Igd2hpY2ggeW91IGhhdmUgYnVpbHQgdXAgYQorICAgICAgICAgICAgICAgIHNpemFibGUgZGlyZWN0b3J5IG9mIHNvdXJjZSB0YXJiYWxscy4KKyAgICAgICAgICAgICAgICBPciwgcGVyaGFwcyBzb21lb25lIGVsc2UgaGFzIHN1Y2ggYSBkaXJlY3RvcnkgZm9yIHdoaWNoIHlvdQorICAgICAgICAgICAgICAgIGhhdmUgcmVhZCBhY2Nlc3MuCisgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gc2F2ZSB0aW1lIGJ5IGFkZGluZyBzdGF0ZW1lbnRzIHRvIHlvdXIKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgc28gdGhhdCB0aGUgYnVpbGQgcHJvY2VzcyBjaGVja3MgbG9jYWwKKyAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBmaXJzdCBmb3IgZXhpc3RpbmcgdGFyYmFsbHMgYmVmb3JlIGNoZWNraW5nIHRoZQorICAgICAgICAgICAgICAgIEludGVybmV0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGVmZmljaWVudCB3YXkgdG8gc2V0IGl0IHVwIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTT1VSQ0VfTUlSUk9SX1VSTCA/PSAiZmlsZTovLy9ob21lL3lvdS95b3VyLWRvd25sb2FkLWRpci8iCisgICAgIElOSEVSSVQgKz0gIm93bi1taXJyb3JzIgorICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPSAiMSIKKyAgICAgIyBCQl9OT19ORVRXT1JLID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBjYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBEdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucywgZ2VuZXJhdGluZyBhbmQgc3RvcmluZyB0aGVzZQorICAgICAgICAgICAgICAgIHRhcmJhbGxzIGlzIG5vdCB0aGUgYnVpbGQgc3lzdGVtJ3MgZGVmYXVsdCBiZWhhdmlvci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFJFTUlSUk9SUyc+PGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUsIHNlZSB0aGUgdmFyaWFibGUncyBnbG9zc2FyeSBlbnRyeSBpbiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2V0dGluZy1zb3VyY2UtZmlsZXMtYW5kLXN1cHByZXNzaW5nLXRoZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+R2V0dGluZyBTb3VyY2UgRmlsZXMgYW5kIFN1cHByZXNzaW5nIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgdGVjaG5pcXVlIHlvdSBjYW4gdXNlIHRvIHJlYWR5IHlvdXJzZWxmIGZvciBhCisgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZSBzdHJpbmcgb2YgYnVpbGQgb3BlcmF0aW9ucywgaXMgdG8gcHJlLWZldGNoCisgICAgICAgICAgICAgICAgYWxsIHRoZSBzb3VyY2UgZmlsZXMgd2l0aG91dCBhY3R1YWxseSBzdGFydGluZyBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGxldHMgeW91IHdvcmsgdGhyb3VnaCBhbnkgZG93bmxvYWQgaXNzdWVzCisgICAgICAgICAgICAgICAgYW5kIHVsdGltYXRlbHkgZ2F0aGVycyBhbGwgdGhlIHNvdXJjZSBmaWxlcyBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBkb3dubG9hZCBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtYnVpbGQtZG93bmxvYWRzJz48ZmlsZW5hbWU+YnVpbGQvZG93bmxvYWRzPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBsb2NhdGVkIHdpdGgKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kIGZvcm0gdG8gZmV0Y2ggYWxsIHRoZQorICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBzb3VyY2VzIHdpdGhvdXQgc3RhcnRpbmcgdGhlIGJ1aWxkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGZldGNoYWxsIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhdGlvbiBvZiB0aGUgQml0QmFrZSBjb21tYW5kIGd1YXJhbnRlZXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIGFsbCB0aGUgc291cmNlcyBmb3IgdGhhdCBCaXRCYWtlIHRhcmdldCBzaG91bGQgeW91CisgICAgICAgICAgICAgICAgZGlzY29ubmVjdCBmcm9tIHRoZSBJbnRlcm5ldCBhbmQgd2FudCB0byBkbyB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICBsYXRlciBvZmZsaW5lLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlIj4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4gd2hlbgorICAgICAgICAgICAgYnVpbGRpbmcgc291cmNlIGNvZGUuCisgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBpbnZvbHZlcyBmZXRjaGluZyB0aGUgc291cmNlIGZpbGVzLCB1bnBhY2tpbmcKKyAgICAgICAgICAgIHRoZW0sIGFuZCB0aGVuIHBhdGNoaW5nIHRoZW0gaWYgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgYnVpbGQgdGFrZXMKKyAgICAgICAgICAgIHBsYWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTaXR1YXRpb25zIGV4aXN0IHdoZXJlIHlvdSBtaWdodCB3YW50IHRvIGJ1aWxkIHNvZnR3YXJlIGZyb20gc291cmNlCisgICAgICAgICAgICBmaWxlcyB0aGF0IGFyZSBleHRlcm5hbCB0byBhbmQgdGh1cyBvdXRzaWRlIG9mIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYXZlIGEgcHJvamVjdCB0aGF0IGluY2x1ZGVzIGEgbmV3IEJTUCB3aXRoCisgICAgICAgICAgICBhIGhlYXZpbHkgY3VzdG9taXplZCBrZXJuZWwuCisgICAgICAgICAgICBBbmQsIHlvdSB3YW50IHRvIG1pbmltaXplIGV4cG9zaW5nIHRoZSBidWlsZCBzeXN0ZW0gdG8gdGhlCisgICAgICAgICAgICBkZXZlbG9wbWVudCB0ZWFtIHNvIHRoYXQgdGhleSBjYW4gZm9jdXMgb24gdGhlaXIgcHJvamVjdCBhbmQKKyAgICAgICAgICAgIG1haW50YWluIGV2ZXJ5b25lJ3Mgd29ya2Zsb3cgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdhbnQgYSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeSBvbiB0aGUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgd2hlcmUgdGhlIGRldmVsb3BtZW50IG9jY3Vycy4KKyAgICAgICAgICAgIFlvdSB3YW50IHRoZSByZWNpcGUncworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGV4dGVybmFsIGRpcmVjdG9yeSBhbmQgdXNlIGl0IGFzIGlzLCBub3QKKyAgICAgICAgICAgIGNvcHkgaXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGJ1aWxkIGZyb20gc29mdHdhcmUgdGhhdCBjb21lcyBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZSwgYWxsIHlvdQorICAgICAgICAgICAgbmVlZCB0byBkbyBpcyBpbmhlcml0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIGNsYXNzIGFuZCB0aGVuIHNldCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFUk5BTFNSQyc+PGZpbGVuYW1lPkVYVEVSTkFMU1JDPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8geW91ciBleHRlcm5hbCBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBzdGF0ZW1lbnRzIHRvIHB1dCBpbiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImV4dGVybmFsc3JjIgorICAgICBFWFRFUk5BTFNSQ19wbi08cmVwbGFjZWFibGU+bXlyZWNpcGU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+cGF0aC10by15b3VyLXNvdXJjZS10cmVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIHNob3dzIGhvdyB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nIGJ5IHNldHRpbmcKKyAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRFUk5BTFNSQzwvZmlsZW5hbWU+IGluIHRoZSByZWNpcGUgaXRzZWxmIG9yIGluIHRoZQorICAgICAgICAgICAgcmVjaXBlJ3MgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVEVSTkFMU1JDID0gIjxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iCisgICAgIEVYVEVSTkFMU1JDX0JVSUxEID0gIjxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgdGhlc2Ugc2V0dGluZ3MgdG8gdGFrZSBlZmZlY3QsIHlvdSBtdXN0IGdsb2JhbGx5CisgICAgICAgICAgICAgICAgb3IgbG9jYWxseSBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5leHRlcm5hbHNyYy5iYmNsYXNzPC9maWxlbmFtZT4gYnVpbGRzCisgICAgICAgICAgICB0aGUgc291cmNlIGNvZGUgaW4gYSBkaXJlY3Rvcnkgc2VwYXJhdGUgZnJvbSB0aGUgZXh0ZXJuYWwgc291cmNlCisgICAgICAgICAgICBkaXJlY3RvcnkgYXMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURVJOQUxTUkMnPjxmaWxlbmFtZT5FWFRFUk5BTFNSQzwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBoYXZlIHRoZSBzb3VyY2UgYnVpbHQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluCisgICAgICAgICAgICB3aGljaCBpdCByZXNpZGVzLCBvciBzb21lIG90aGVyIG5vbWluYXRlZCBkaXJlY3RvcnksIHlvdSBjYW4gc2V0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRVhURVJOQUxTUkNfQlVJTEQnPjxmaWxlbmFtZT5FWFRFUk5BTFNSQ19CVUlMRDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIHRvIHBvaW50IHRvIHRoYXQgZGlyZWN0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFWFRFUk5BTFNSQ19CVUlMRF9wbi08cmVwbGFjZWFibGU+bXlyZWNpcGU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+cGF0aC10by15b3VyLXNvdXJjZS10cmVlPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic2VsZWN0aW5nLWFuLWluaXRpYWxpemF0aW9uLW1hbmFnZXIiPgorICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIGFuIEluaXRpYWxpemF0aW9uIE1hbmFnZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBTeXNWaW5pdCBhcyB0aGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgICAgIG1hbmFnZXIuCisgICAgICAgICAgICBIb3dldmVyLCBzdXBwb3J0IGFsc28gZXhpc3RzIGZvciBzeXN0ZW1kLAorICAgICAgICAgICAgd2hpY2ggaXMgYSBmdWxsIHJlcGxhY2VtZW50IGZvciBpbml0IHdpdGgKKyAgICAgICAgICAgIHBhcmFsbGVsIHN0YXJ0aW5nIG9mIHNlcnZpY2VzLCByZWR1Y2VkIHNoZWxsIG92ZXJoZWFkIGFuZCBvdGhlcgorICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgdXNlZCBieSBtYW55IGRpc3RyaWJ1dGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSBTeXNWaW5pdCwgeW91IGRvCisgICAgICAgICAgICBub3QgaGF2ZSB0byBkbyBhbnl0aGluZy4KKyAgICAgICAgICAgIEJ1dCwgaWYgeW91IHdhbnQgdG8gdXNlIHN5c3RlbWQsIHlvdSBtdXN0CisgICAgICAgICAgICB0YWtlIHNvbWUgc3RlcHMgYXMgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctc3lzdGVtZC1leGNsdXNpdmVseSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgc3lzdGVtZCBFeGNsdXNpdmVseTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNldCB0aGUgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBzeXN0ZW1kIgorICAgICBWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID0gInN5c3RlbWQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwcmV2ZW50IHRoZSBTeXNWaW5pdAorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBmZWF0dXJlIGZyb20KKyAgICAgICAgICAgICAgICBiZWluZyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEID0gInN5c3Zpbml0IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyByZW1vdmVzIGFueSByZWR1bmRhbnQgU3lzVmluaXQgc2NyaXB0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gcmVtb3ZlICBpbml0c2NyaXB0cyBmcm9tIHlvdXIgaW1hZ2UgYWx0b2dldGhlciwKKyAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YXJpYWJsZSBhbHNvOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzID0gIiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYmFja2ZpbGwgdmFyaWFibGUsIHNlZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1zeXN0ZW1kLWZvci10aGUtbWFpbi1pbWFnZS1hbmQtdXNpbmctc3lzdmluaXQtZm9yLXRoZS1yZXNjdWUtaW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIHN5c3RlbWQgZm9yIHRoZSBNYWluIEltYWdlIGFuZCBVc2luZyBTeXNWaW5pdCBmb3IgdGhlIFJlc2N1ZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNldCB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RST19GRUFUVVJFU19hcHBlbmQgPSAiIHN5c3RlbWQiCisgICAgIFZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPSAic3lzdGVtZCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRG9pbmcgc28gY2F1c2VzIHlvdXIgbWFpbiBpbWFnZSB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmI8L2ZpbGVuYW1lPiByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgc3lzdGVtZC4KKyAgICAgICAgICAgICAgICBUaGUgcmVzY3VlL21pbmltYWwgaW1hZ2UgY2Fubm90IHVzZSB0aGlzIHBhY2thZ2UgZ3JvdXAuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgY2FuIGluc3RhbGwgU3lzVmluaXQKKyAgICAgICAgICAgICAgICBhbmQgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIHdpbGwgaGF2ZSBzdXBwb3J0IGZvciBib3RoCisgICAgICAgICAgICAgICAgc3lzdGVtZCBhbmQgU3lzVmluaXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ic2VsZWN0aW5nLWRldi1tYW5hZ2VyIj4KKyAgICAgICAgPHRpdGxlPlNlbGVjdGluZyBhIERldmljZSBNYW5hZ2VyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIG11bHRpcGxlIHdheXMgdG8gbWFuYWdlIHRoZSBkZXZpY2UKKyAgICAgICAgICAgIG1hbmFnZXIgKDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4pOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBlcnNpc3RlbnQgYW5kIFByZS1Qb3B1bGF0ZWQ8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHRoZSA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpcyBwZXJzaXN0ZW50IGFuZCB0aGUgcmVxdWlyZWQgZGV2aWNlIG5vZGVzIGFyZSBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IHdpdGggYSBEZXZpY2UgTWFuYWdlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCB0aGUgPGZpbGVuYW1lPi9kZXY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbCBhcyBhbiBpbi1tZW1vcnkgZmlsZSBzeXN0ZW0gYW5kCisgICAgICAgICAgICAgICAgICAgIGlzIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGVkIGJ5IHRoZSBrZXJuZWwgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9mIGRldmljZSBub2RlcyBpcyBkb25lIGluIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgc3BhY2UgYnkgYSBkZXZpY2UgbWFuYWdlciBsaWtlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3gtbWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InN0YXRpYy1kZXYtbWFuYWdlbWVudCI+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgUGVyc2lzdGVudCBhbmQgUHJlLVBvcHVsYXRlZDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgdGhlIHN0YXRpYyBtZXRob2QgZm9yIGRldmljZSBwb3B1bGF0aW9uLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHNldCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVVNFX0RFVkZTJz48ZmlsZW5hbWU+VVNFX0RFVkZTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIwIiBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFX0RFVkZTID0gIjAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgY29udGVudCBvZiB0aGUgcmVzdWx0aW5nIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaXMgZGVmaW5lZCBpbiBhIERldmljZSBUYWJsZSBmaWxlLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1JTUFHRV9ERVZJQ0VfVEFCTEVTJz48ZmlsZW5hbWU+SU1BR0VfREVWSUNFX1RBQkxFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBEZXZpY2UgVGFibGUgdG8gdXNlIGFuZCBzaG91bGQgYmUgc2V0CisgICAgICAgICAgICAgICAgaW4gdGhlIG1hY2hpbmUgb3IgZGlzdHJvIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0RFVklDRV9UQUJMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0PC9maWxlbmFtZT4gaXMgdXNlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0RFVklDRV9UQUJMRVMgPSAiZGV2aWNlX3RhYmxlLW15bWFjaGluZS50eHQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcG9wdWxhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSA8ZmlsZW5hbWU+bWFrZWRldnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHV0aWxpdHkgZHVyaW5nIGltYWdlIGNyZWF0aW9uOgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImRldnRtcGZzLWRldi1tYW5hZ2VtZW50Ij4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG1wZnM8L2ZpbGVuYW1lPiBhbmQgYSBEZXZpY2UgTWFuYWdlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgZHluYW1pYyBtZXRob2QgZm9yIGRldmljZSBwb3B1bGF0aW9uLCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIHVzZSAob3IgYmUgc3VyZSB0byBzZXQpIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1VU0VfREVWRlMnPjxmaWxlbmFtZT5VU0VfREVWRlM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiLCB3aGljaCBpcyB0aGUgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRV9ERVZGUyA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXaXRoIHRoaXMgc2V0dGluZywgdGhlIHJlc3VsdGluZyA8ZmlsZW5hbWU+L2RldjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGlzIHBvcHVsYXRlZCBieSB0aGUga2VybmVsIHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRtcGZzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTkZJR19ERVZUTVBGUzwvZmlsZW5hbWU+IGlzIHNldCB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgeW91IGJ1aWxkIGEgTGludXgga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbGwgZGV2aWNlcyBjcmVhdGVkIGJ5IDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IHdpbGwgYmUKKyAgICAgICAgICAgICAgICBvd25lZCBieSA8ZmlsZW5hbWU+cm9vdDwvZmlsZW5hbWU+IGFuZCBoYXZlIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjA2MDA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgZGV2aWNlIG5vZGVzLCB5b3UgY2FuIHVzZSBhCisgICAgICAgICAgICAgICAgZGV2aWNlIG1hbmFnZXIgbGlrZSA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3gtbWRldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFlvdSBjaG9vc2UgdGhlIGRldmljZSBtYW5hZ2VyIGJ5IGRlZmluaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5WSVJUVUFMLVJVTlRJTUVfZGV2X21hbmFnZXI8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGluIHlvdXIgbWFjaGluZSBvciBkaXN0cm8gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gInVkZXYiCisKKyAgICAgIyBTb21lIGFsdGVybmF0aXZlIHZhbHVlcworICAgICAjIFZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA9ICJidXN5Ym94LW1kZXYiCisgICAgICMgVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gInN5c3RlbWQiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtYXBwZGV2LXNyY3JldiI+CisgICAgICAgIDx0aXRsZT5Vc2luZyBhbiBFeHRlcm5hbCBTQ008L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91J3JlIHdvcmtpbmcgb24gYSByZWNpcGUgdGhhdCBwdWxscyBmcm9tIGFuIGV4dGVybmFsIFNvdXJjZQorICAgICAgICAgICAgQ29kZSBNYW5hZ2VyIChTQ00pLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgIHN5c3RlbSBub3RpY2UgbmV3IHJlY2lwZSBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBTQ00gYW5kIHRoZW4gYnVpbGQKKyAgICAgICAgICAgIHRoZSByZXN1bHRpbmcgcGFja2FnZXMgdGhhdCBkZXBlbmQgb24gdGhlIG5ldyByZWNpcGVzIGJ5IHVzaW5nCisgICAgICAgICAgICB0aGUgbGF0ZXN0IHZlcnNpb25zLgorICAgICAgICAgICAgVGhpcyBvbmx5IHdvcmtzIGZvciBTQ01zIGZyb20gd2hpY2ggaXQgaXMgcG9zc2libGUgdG8gZ2V0IGEKKyAgICAgICAgICAgIHNlbnNpYmxlIHJldmlzaW9uIG51bWJlciBmb3IgY2hhbmdlcy4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgeW91IGNhbiBkbyB0aGlzIHdpdGggQXBhY2hlIFN1YnZlcnNpb24gKFNWTiksIEdpdCwgYW5kCisgICAgICAgICAgICBCYXphYXIgKEJaUikgcmVwb3NpdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBlbmFibGUgdGhpcyBiZWhhdmlvciwgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgbmVlZHMgdG8gcmVmZXJlbmNlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUFYnPjxmaWxlbmFtZT5TUkNQVjwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gIjEuMi4zK2dpdCR7U1JDUFZ9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlbiwgeW91IGNhbiBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNSRVZfcG4tPHJlcGxhY2VhYmxlPlBOPC9yZXBsYWNlYWJsZT4gPSAiJHtBVVRPUkVWfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIHJlY2lwZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZW5hYmxlIGF1dG9tYXRpYyBzb3VyY2UKKyAgICAgICAgICAgIHJldmlzaW9uIHVwZGF0aW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gdXBkYXRlIHlvdXIgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlLCB5b3UgY2FuCisgICAgICAgICAgICBhZGQgdGhlIGZvbGxvd2luZyBkaXJlY3RseSB0byB0aGUgcmVjaXBlIHRvIGZpbmlzaCBlbmFibGluZworICAgICAgICAgICAgdGhlIGZlYXR1cmU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1JFViA9ICIke0FVVE9SRVZ9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBwcm92aWRlcyBhIGRpc3RyaWJ1dGlvbiBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3ktYmxlZWRpbmc8L2ZpbGVuYW1lPiwgd2hvc2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZSBjb250YWlucyB0aGUgbGluZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBsaW5lIHB1bGxzIGluIHRoZSBsaXN0ZWQgaW5jbHVkZSBmaWxlIHRoYXQgY29udGFpbnMKKyAgICAgICAgICAgIG51bWVyb3VzIGxpbmVzIG9mIGV4YWN0bHkgdGhhdCBmb3JtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNSRVZfcG4tZ2NvbmYtZGJ1cyA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LWNvbW1vbiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LWNvbmZpZy1ndGsgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC1kZXNrdG9wID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC1wYW5lbCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsLTIgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC10aGVtZXMtZXh0cmEgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1tYXRjaGJveC10ZXJtaW5hbCA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLW1hdGNoYm94LXdtID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tbWF0Y2hib3gtd20tMiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLXNldHRpbmdzLWRhZW1vbiA/PSAiJHtBVVRPUkVWfSIKKyAgICAgU1JDUkVWX3BuLXNjcmVlbnNob3QgPz0gIiR7QVVUT1JFVn0iCisgICAgIFNSQ1JFVl9wbi1saWJmYWtla2V5ID89ICIke0FVVE9SRVZ9IgorICAgICBTUkNSRVZfcG4tb3Byb2ZpbGV1aSA/PSAiJHtBVVRPUkVWfSIKKyAgICAgICAgICAuCisgICAgICAgICAgLgorICAgICAgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZXNlIGxpbmVzIGFsbG93IHlvdSB0byBleHBlcmltZW50IHdpdGggYnVpbGRpbmcgYQorICAgICAgICAgICAgZGlzdHJpYnV0aW9uIHRoYXQgdHJhY2tzIHRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlCisgICAgICAgICAgICBmb3IgbnVtZXJvdXMgcGFja2FnZXMuCisgICAgICAgICAgICA8bm90ZT48dGl0bGU+Q2F1dGlvbjwvdGl0bGU+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wb2t5LWJsZWVkaW5nPC9maWxlbmFtZT4gZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgaXMgbm90IHRlc3RlZCBvbiBhIHJlZ3VsYXIgYmFzaXMuCisgICAgICAgICAgICAgICAgS2VlcCB0aGlzIGluIG1pbmQgaWYgeW91IHVzZSBpdC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPgorICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBSZWFkLU9ubHkgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN1cHBvc2UsIGZvciBzZWN1cml0eSByZWFzb25zLCB5b3UgbmVlZCB0byBkaXNhYmxlCisgICAgICAgICAgICB5b3VyIHRhcmdldCBkZXZpY2UncyByb290IGZpbGVzeXN0ZW0ncyB3cml0ZSBwZXJtaXNzaW9ucworICAgICAgICAgICAgKGkuZS4geW91IG5lZWQgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtKS4KKyAgICAgICAgICAgIE9yLCBwZXJoYXBzIHlvdSBhcmUgcnVubmluZyB0aGUgZGV2aWNlJ3Mgb3BlcmF0aW5nIHN5c3RlbQorICAgICAgICAgICAgZnJvbSBhIHJlYWQtb25seSBzdG9yYWdlIGRldmljZS4KKyAgICAgICAgICAgIEZvciBlaXRoZXIgY2FzZSwgeW91IGNhbiBjdXN0b21pemUgeW91ciBpbWFnZSBmb3IKKyAgICAgICAgICAgIHRoYXQgYmVoYXZpb3IuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFN1cHBvcnRpbmcgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtIHJlcXVpcmVzIHRoYXQgdGhlIHN5c3RlbSBhbmQKKyAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBkbyBub3QgdHJ5IHRvIHdyaXRlIHRvIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICBZb3UgbXVzdCBjb25maWd1cmUgYWxsIHBhcnRzIG9mIHRoZSB0YXJnZXQgc3lzdGVtIHRvIHdyaXRlCisgICAgICAgICAgICBlbHNld2hlcmUsIG9yIHRvIGdyYWNlZnVsbHkgZmFpbCBpbiB0aGUgZXZlbnQgb2YgYXR0ZW1wdGluZyB0bworICAgICAgICAgICAgd3JpdGUgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjcmVhdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUm9vdCBGaWxlc3lzdGVtPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIHRoZSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtLCBzaW1wbHkgYWRkIHRoZQorICAgICAgICAgICAgICAgICJyZWFkLW9ubHktcm9vdGZzIiBmZWF0dXJlIHRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgVXNpbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyBpbiB5b3VyCisgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIG9yIGZyb20gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSByZWFkLW9ubHkgcm9vdCBmaWxlc3lzdGVtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfRkVBVFVSRVMgPSAicmVhZC1vbmx5LXJvb3RmcyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTICs9ICJyZWFkLW9ubHktcm9vdGZzIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSB2YXJpYWJsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmdwb2t5LWV4dGVuZC1jdXN0b21pbWFnZS1pbWFnZWZlYXR1cmVzJz5DdXN0b21pemluZyBJbWFnZXMgVXNpbmcgQ3VzdG9tIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlhYmxlcywgc2VlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRSQV9JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwb3N0LWluc3RhbGxhdGlvbi1zY3JpcHRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Qb3N0LUluc3RhbGxhdGlvbiBTY3JpcHRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB5b3UgbWFrZSBzdXJlIGFsbAorICAgICAgICAgICAgICAgIHBvc3QtSW5zdGFsbGF0aW9uICg8ZmlsZW5hbWU+cGtnX3Bvc3RpbnN0PC9maWxlbmFtZT4pIHNjcmlwdHMKKyAgICAgICAgICAgICAgICBmb3IgcGFja2FnZXMgdGhhdCBhcmUgaW5zdGFsbGVkIGludG8gdGhlIGltYWdlIGNhbiBiZSBydW4KKyAgICAgICAgICAgICAgICBhdCB0aGUgdGltZSB3aGVuIHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgb24gdGhlIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIHNjcmlwdHMgY2Fubm90IGF0dGVtcHQgdG8gcnVuIGR1cmluZyBmaXJzdC1ib290IG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgV2l0aCB0aGUgInJlYWQtb25seS1yb290ZnMiIGZlYXR1cmUgZW5hYmxlZCwKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtIGNoZWNrcyBkdXJpbmcgcm9vdCBmaWxlc3lzdGVtIGNyZWF0aW9uIHRvIG1ha2UKKyAgICAgICAgICAgICAgICBzdXJlIGFsbCBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIHN1Y2NlZWQuCisgICAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZXNlIHNjcmlwdHMgc3RpbGwgbmVlZCB0byBiZSBydW4gYWZ0ZXIgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGlzIGNyZWF0ZWQsIHRoZSBidWlsZCBpbW1lZGlhdGVseSBmYWlscy4KKyAgICAgICAgICAgICAgICBUaGVzZSBidWlsZC10aW1lIGNoZWNrcyBlbnN1cmUgdGhhdCB0aGUgYnVpbGQgZmFpbHMKKyAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiB0aGUgdGFyZ2V0IGRldmljZSBmYWlscyBsYXRlciBkdXJpbmcgaXRzCisgICAgICAgICAgICAgICAgaW5pdGlhbCBib290IG9wZXJhdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBvZiB0aGUgY29tbW9uIHBvc3QtaW5zdGFsbGF0aW9uIHNjcmlwdHMgZ2VuZXJhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBmb3IgdGhlIG91dC1vZi10aGUtYm94IFlvY3RvIFByb2plY3QgYXJlIGVuZ2luZWVyZWQKKyAgICAgICAgICAgICAgICBzbyB0aGF0IHRoZXkgY2FuIHJ1biBkdXJpbmcgcm9vdCBmaWxlc3lzdGVtIGNyZWF0aW9uCisgICAgICAgICAgICAgICAgKGUuZy4gcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cyBmb3IgY2FjaGluZyBmb250cykuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGNyZWF0ZSBhbmQgYWRkIGN1c3RvbSBzY3JpcHRzLCB5b3UgbmVlZAorICAgICAgICAgICAgICAgIHRvIGJlIHN1cmUgdGhleSBjYW4gYmUgcnVuIGR1cmluZyB0aGlzIGZpbGUgc3lzdGVtIGNyZWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGNvbW1vbiBwcm9ibGVtcyB0aGF0IHByZXZlbnQKKyAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBzY3JpcHRzIGZyb20gcnVubmluZyBkdXJpbmcgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgY3JlYXRpb246CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPk5vdCB1c2luZyAkRCBpbiBmcm9udCBvZiBhYnNvbHV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gZGVmaW5lcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiQ8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIDxmaWxlbmFtZT4kRDwvZmlsZW5hbWU+IGlzIGJsYW5rIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgaXMgcnVuIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpbXBsaWVzIHR3byBwdXJwb3NlcyBmb3IgPGZpbGVuYW1lPiREPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmluZyBwYXRocyBhcmUgdmFsaWQgaW4gYm90aCB0aGUgaG9zdCBhbmQgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMsIGFuZCBjaGVja2luZyB0byBkZXRlcm1pbmUgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGlzIGJlaW5nIHVzZWQgYXMgYSBtZXRob2QgZm9yIHRha2luZworICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgYWN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW1waGFzaXM+QXR0ZW1wdGluZyB0byBydW4gcHJvY2Vzc2VzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyB0byBvciBkZXBlbmRlbnQgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHdvcmsgYXJvdW5kIHRoZXNlIGF0dGVtcHRzIGJ5IHVzaW5nIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0YXNrcywgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGFsdGVybmF0aXZlbHkgcnVubmluZyB0aGUgcHJvY2Vzc2VzIHVuZGVyIFFFTVUsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBoYXMgdGhlIDxmaWxlbmFtZT5xZW11X3J1bl9iaW5hcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcWVtdSc+PGZpbGVuYW1lPnFlbXU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcmVhcy13aXRoLXdyaXRlLWFjY2Vzcyc+CisgICAgICAgICAgICA8dGl0bGU+QXJlYXMgV2l0aCBXcml0ZSBBY2Nlc3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoIHRoZSAicmVhZC1vbmx5LXJvb3RmcyIgZmVhdHVyZSBlbmFibGVkLAorICAgICAgICAgICAgICAgIGFueSBhdHRlbXB0IGJ5IHRoZSB0YXJnZXQgdG8gd3JpdGUgdG8gdGhlIHJvb3QgZmlsZXN5c3RlbSBhdAorICAgICAgICAgICAgICAgIHJ1bnRpbWUgZmFpbHMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB5b3UgY29uZmlndXJlIHByb2Nlc3NlcworICAgICAgICAgICAgICAgIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBhdHRlbXB0IHRoZXNlIHR5cGVzIG9mIHdyaXRlcyBkbyBzbworICAgICAgICAgICAgICAgIHRvIGRpcmVjdG9yaWVzIHdpdGggd3JpdGUgYWNjZXNzIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi90bXA8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+L3Zhci9ydW48L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nIj4KKyAgICAgICAgPHRpdGxlPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBhdmFpbGFibGUgYSBzZXJpZXMgb2YgYXV0b21hdGVkCisgICAgICAgICAgICB0ZXN0cyBmb3IgaW1hZ2VzIHRvIHZlcmlmeSBydW50aW1lIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICBZb3UgY2FuIHJ1biB0aGVzZSB0ZXN0cyBvbiBlaXRoZXIgUUVNVSBvciBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgVGVzdHMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uIG1ha2luZyB1c2Ugb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBtb2R1bGUsIGFuZCB0aGUgbWFqb3JpdHkgb2YgdGhlbQorICAgICAgICAgICAgcnVuIGNvbW1hbmRzIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG92ZXIgU1NILgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgeW91IHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gdXNlIHRoZXNlCisgICAgICAgICAgICB0ZXN0cywgcnVuIGF2YWlsYWJsZSB0ZXN0cywgYW5kIHdyaXRlIGFuZCBhZGQgeW91ciBvd24gdGVzdHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmctdGVzdHMnPgorICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFRlc3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGFyZSBwbGFubmluZyB0byBydW4gdGVzdHMgdXNpbmcKKyAgICAgICAgICAgICAgICBRRU1VIG9yIG9uIHRoZSBoYXJkd2FyZSwgeW91IGhhdmUgdG8gdGFrZQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBzdGVwcyB0byBlbmFibGUgdGhlIHRlc3RzLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8KKyAgICAgICAgICAgICAgICBlbmFibGUgYm90aCB0eXBlcyBvZiB0ZXN0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3FlbXUtaW1hZ2UtZW5hYmxpbmctdGVzdHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5FbmFibGluZyBSdW50aW1lIFRlc3RzIG9uIFFFTVU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIHRvIHJ1biB0ZXN0cywgeW91IG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIHRvIGF2b2lkIGludGVyYWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+c3VkbzwvZmlsZW5hbWU+IGZvciBuZXR3b3JraW5nOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5OT1BBU1NXRDwvZmlsZW5hbWU+IGZvciB5b3VyIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT4vZXRjL3N1ZG9lcnM8L2ZpbGVuYW1lPiBlaXRoZXIgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgY29tbWFuZHMgb3IganVzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWlmdXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlIGlmIHlvdSBhcmUgdXNpbmcgbXVsdGlwbGUgY2xvbmVzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBzb21lIGRpc3RyaWJ1dGlvbnMsIHlvdSBhbHNvIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50IG91dCAiRGVmYXVsdHMgcmVxdWlyZXR0eSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9zdWRvZXJzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYW51YWxseSBjb25maWd1cmUgYSB0YXAgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeW91ciBzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gYXMgcm9vdCB0aGUgc2NyaXB0IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBzaG91bGQgZ2VuZXJhdGUgYSBsaXN0IG9mIHRhcCBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgb3B0aW9uIHR5cGljYWxseSBjaG9zZW4gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvYnVpbGRlci10eXBlIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1BMQVk8L2ZpbGVuYW1lPiB2YXJpYWJsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlIHNvIHRoYXQgeW91IGhhdmUgYW4gWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciBhdmFpbGFibGUgKGUuZy4gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dm5jc2VydmVyPC9maWxlbmFtZT4gZm9yIGEgaGVhZGxlc3MgbWFjaGluZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJlIHN1cmUgeW91ciBob3N0J3MgZmlyZXdhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRzIGluY29taW5nIGNvbm5lY3Rpb25zIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTIuMTY4LjcuMC8yNDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgb2YgdGhlIHRlc3RzIChpbiBwYXJ0aWN1bGFyIHNtYXJ0IHRlc3RzKSBzdGFydCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAgc2VydmVyIG9uIGEgcmFuZG9tIGhpZ2ggbnVtYmVyIHBvcnQsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBzZXJ2ZSBmaWxlcyB0byB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzbWFydCBtb2R1bGUgc2VydmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vcnBtPC9maWxlbmFtZT4gc28gaXQgY2FuIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXJ0IGNoYW5uZWwgY29tbWFuZHMuIFRoYXQgbWVhbnMgeW91ciBob3N0J3MgZmlyZXdhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGFjY2VwdCBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIDE5Mi4xNjguNy4wLzI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0IElQIHJhbmdlIHVzZWQgZm9yIHRhcCBkZXZpY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RzLCB0aGUgZm9sbG93aW5nIGhhcHBlbnM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIGNvcHkgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyB3cml0dGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiR7V09SS0RJUn0vdGVzdGltYWdlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGltYWdlIGlzIGJvb3RlZCB1bmRlciBRRU1VIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgZGVmYXVsdCB0aW1lb3V0IG9mIDUwMCBzZWNvbmRzIG9jY3VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFsbG93IGZvciB0aGUgYm9vdCBwcm9jZXNzIHRvIHJlYWNoIHRoZSBsb2dpbiBwcm9tcHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlIHRpbWVvdXQgcGVyaW9kIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9RRU1VQk9PVF9USU1FT1VUJz48ZmlsZW5hbWU+VEVTVF9RRU1VQk9PVF9USU1FT1VUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+T25jZSB0aGUgYm9vdCBwcm9jZXNzIGlzIHJlYWNoZWQgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2luIHByb21wdCBhcHBlYXJzLCB0aGUgdGVzdHMgcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmdWxsIGJvb3QgbG9nIGlzIHdyaXR0ZW4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZXN0aW1hZ2UvcWVtdV9ib290X2xvZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVhY2ggdGVzdCBtb2R1bGUgbG9hZHMgaW4gdGhlIG9yZGVyIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmdWxsIG91dHB1dCBvZiB0aGUgY29tbWFuZHMgcnVuIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0ggaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZXN0aW1nYWdlL3NzaF90YXJnZXRfbG9nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgbm8gZmFpbHVyZXMgb2NjdXIsIHRoZSB0YXNrIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgZW5kcyBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBpbiB0aGUgdGFzayBsb2cgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtXT1JLRElSfS90ZW1wL2xvZy5kb190ZXN0aW1hZ2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdoYXJkd2FyZS1pbWFnZS1lbmFibGluZy10ZXN0cyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gSGFyZHdhcmU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbiBydW4gdGVzdHMgb24gcmVhbAorICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSwgYW5kIGZvciBjZXJ0YWluIGRldmljZXMgaXQgY2FuIGFsc28gZGVwbG95CisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSB0byBiZSB0ZXN0ZWQgb250byB0aGUgZGV2aWNlIGJlZm9yZWhhbmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgZGVwbG95bWVudCwgYSAibWFzdGVyIGltYWdlIiBpcyBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgb250byB0aGUgaGFyZHdhcmUgb25jZSBhcyBwYXJ0IG9mIHNldHVwLgorICAgICAgICAgICAgICAgICAgICBUaGVuLCBlYWNoIHRpbWUgdGVzdHMgYXJlIHRvIGJlIHJ1biwgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBvY2N1cnM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgbWFzdGVyIGltYWdlIGlzIGJvb3RlZCBpbnRvIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gd3JpdGUgdGhlIGltYWdlIHRvIGJlIHRlc3RlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2Vjb25kIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgZGV2aWNlIGlzIHRoZW4gcmVib290ZWQgdXNpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbCBzY3JpcHQgdGhhdCB5b3UgbmVlZCB0byBwcm92aWRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBkZXZpY2UgYm9vdHMgaW50byB0aGUgaW1hZ2UgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyB0ZXN0cyAoaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gZGVwbG95ZWQgYXV0b21hdGljYWxseSBvciBub3QpLCB0aGUgZGV2aWNlIGlzCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBhIG5ldHdvcmsgb24gYQorICAgICAgICAgICAgICAgICAgICBwcmUtZGV0ZXJtaW5lZCBJUCBhZGRyZXNzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciB1c2Ugc3RhdGljIElQIGFkZHJlc3NlcyB3cml0dGVuIGludG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlLCBvciBzZXQgdGhlIGltYWdlIHRvIHVzZSBESENQIGFuZCBoYXZlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgREhDUCBzZXJ2ZXIgb24gdGhlIHRlc3QgbmV0d29yayBhc3NpZ24gYSBrbm93biBJUCBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBydW4gdGVzdHMgb24gaGFyZHdhcmUsIHlvdSBuZWVkIHRvIHNldAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPiB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIFFFTVUsIHlvdSBkbyBub3QgaGF2ZSB0byBjaGFuZ2UgYW55dGhpbmcsIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzICJRZW11VGFyZ2V0Ii4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHJ1bm5pbmcgdGVzdHMgb24gaGFyZHdhcmUsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBleGlzdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IlNpbXBsZVJlbW90ZVRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIlNpbXBsZVJlbW90ZVRhcmdldCIgaWYgeW91IGFyZSBnb2luZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biB0ZXN0cyBvbiBhIHRhcmdldCBzeXN0ZW0gdGhhdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgbmV0d29yay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSAiU2ltcGxlUmVtb3RlVGFyZ2V0IiBpbiBjb25qdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggZWl0aGVyIHJlYWwgaGFyZHdhcmUgb3IgYW4gaW1hZ2UgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIHNlcGFyYXRlbHkgc3RhcnRlZCBRRU1VIG9yIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHZpcnR1YWwgbWFjaGluZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iR3VtbWlib290VGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAiR3VtbWlib290VGFyZ2V0IiBpZiB5b3VyIGhhcmR3YXJlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gRUZJLWJhc2VkIG1hY2hpbmUgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPiBhcyBib290bG9hZGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBzb21ldGhpbmcgc2ltaWxhcikgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIHlvdXIgaGFyZHdhcmUgdW5kZXIgdGVzdCBtdXN0IGJlIGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBESENQLWVuYWJsZWQgbmV0d29yayB0aGF0IGdpdmVzIGl0IHRoZSBzYW1lIElQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBmb3IgZWFjaCByZWJvb3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBjaG9vc2UgIkd1bW1pYm9vdFRhcmdldCIsIHRoZXJlIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIGFuZCBjb25zaWRlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NlbGVjdGluZy1ndW1taWJvb3R0YXJnZXQnPlNlbGVjdGluZyBHdW1taWJvb3RUYXJnZXQ8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIHdoaWNoIGZvbGxvd3MsIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iQmVhZ2xlQm9uZVRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIkJlYWdsZUJvbmVUYXJnZXQiIGlmIHlvdSBhcmUgZGVwbG95aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSBCZWFnbGVCb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJsYWNrIiBvciBvcmlnaW5hbCAiV2hpdGUiIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgQmVhZ2xlQm9uZVRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4iRWRnZVJvdXRlclRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgIkVkZ2VSb3V0ZXJUYXJnZXQiIGlzIHlvdSBhcmUgZGVwbG95aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIGFuZCBydW5uaW5nIHRlc3RzIG9uIHRoZSBVYmlxdWl0aSBOZXR3b3JrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2VSb3V0ZXIgTGl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSB0ZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIEVkZ2VSb3V0ZXJUYXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZWRnZXJvdXRlcnRhcmdldC5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IkdydWJUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIHRoZSAic3VwcG9ydHMgZGVwbG95aW5nIGltYWdlcyBhbmQgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzIG9uIGFueSBnZW5lcmljIFBDIHRoYXQgYm9vdHMgdXNpbmcgR1JVQi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSB0ZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIEdydWJUYXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZ3J1YnRhcmdldC5weTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+IjxyZXBsYWNlYWJsZT55b3VyLXRhcmdldDwvcmVwbGFjZWFibGU+Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSB5b3VyIG93biBjdXN0b20gdGFyZ2V0IGlmIHlvdSB3YW50IHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzIHdoZW4geW91IGFyZSBkZXBsb3lpbmcgaW1hZ2VzIGFuZCBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgb24gYSBjdXN0b20gbWFjaGluZSB3aXRoaW4geW91ciBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gZG8gdGhpcywgeW91IG5lZWQgdG8gYWRkIGEgUHl0aG9uIHVuaXQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHRhcmdldCBjbGFzcyB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWIvb2VxYS9jb250cm9sbGVycy88L2ZpbGVuYW1lPiB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGxheWVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGFsc28gcHJvdmlkZSBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fX2luaXRfXy5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlcywgc2VlIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzZWxlY3RpbmctZ3VtbWlib290dGFyZ2V0Jz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2VsZWN0aW5nIEd1bW1pYm9vdFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRpZCBub3Qgc2V0IDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICJHdW1taWJvb3RUYXJnZXQiLCB0aGVuIHlvdSBkbyBub3QgbmVlZCBhbnkgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNraXAgZG93biB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3FlbXUtaW1hZ2UtcnVubmluZy10ZXN0cyc+UnVubmluZyBUZXN0czwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkaWQgc2V0IDxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICJHdW1taWJvb3RUYXJnZXQiLCB5b3UgYWxzbyBuZWVkIHRvIHBlcmZvcm0gYSBvbmUtdGltZQorICAgICAgICAgICAgICAgICAgICBzZXR1cCBvZiB5b3VyIG1hc3RlciBpbWFnZSBieSBkb2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCA8ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgPGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCB0aGUgbWFzdGVyIGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLXRlc3RtYXN0ZXI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGltYWdlIGFuZCB5b3UgY2FuIGN1c3RvbWl6ZSB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgYXMgeW91IHdvdWxkIGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkhlcmUgYXJlIHRoZSBpbWFnZSByZWNpcGUgcmVxdWlyZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Jbmhlcml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gdGhhdCBrZXJuZWwgbW9kdWxlcyBhcmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnN0YWxscyBub3JtYWwgbGludXggdXRpbGl0aWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYnVzeWJveCBvbmVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmV1dGlsczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRhcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd6aXA8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a21vZDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlcyBhIGN1c3RvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCBSQU0gRGlzayAoaW5pdHJhbWZzKSBpbWFnZSB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbSBpbnN0YWxsZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIG5vcm1hbCBpbWFnZSB0aGF0IHlvdSBjYW4gaW5zdGFsbCB1c3VhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVzIGEgc2luZ2xlIHJvb3RmcyBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHVzZXMgYW5vdGhlciBpbnN0YWxsZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHNwZWNpZmljIHBhcnRpdGlvbiBsYXlvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYWxsIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gdXNlIGFuIGluc3RhbGxlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBzdWNoIGNhc2VzLCB5b3UgbmVlZCB0byBtYW51YWxseSBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgcGFydGl0aW9uIGxheW91dCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpcnN0IHBhcnRpdGlvbiBtb3VudGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT4vYm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkICJib290Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBtYWluIHJvb3RmcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gd2hlcmUgdGhpcyBpbWFnZSBnZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgd2hpY2ggaXMgbW91bnRlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW5vdGhlciBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxlZCAidGVzdHJvb3RmcyIgd2hlcmUgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMgZ2V0IGRlcGxveWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgaW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIHRoZSBpbWFnZSB0aGF0IHlvdSBqdXN0IGJ1aWx0IG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCB0aGluZyB5b3UgbmVlZCB0byBkbyB3aGVuIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT4gdG8gIkd1bW1pYm9vdFRhcmdldCIgaXMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2V0IHVwIHRoZSB0ZXN0IGltYWdlOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXRlbWVudHMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0ZTVFlQRVMgKz0gInRhci5neiIKKyAgICAgSU5IRVJJVCArPSAidGVzdGltYWdlIgorICAgICBURVNUX1RBUkdFVCA9ICJHdW1taWJvb3RUYXJnZXQiCisgICAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguMi4zIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgeW91ciB0ZXN0IGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIEJpdEJha2UgdG8gYnVpbGQgdGhlIGltYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwb3dlci1jb250cm9sJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+UG93ZXIgQ29udHJvbDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vc3QgaGFyZHdhcmUgdGFyZ2V0cyBvdGhlciB0aGFuIFNpbXBsZVJlbW90ZVRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBjb250cm9sIHBvd2VyOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZXRoZXIgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbW1hbmQgdGhhdCBydW5zIG9uIHRoZSBob3N0IGFuZCBkb2VzIHBvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb2RlIHBhc3NlcyBvbmUgYXJndW1lbnQgdG8gdGhhdCBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZiwgb24gb3IgY3ljbGUgKG9mZiB0aGVuIG9uKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjb3VsZCBhcHBlYXIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICJwb3dlcmNvbnRyb2wuZXhwIHRlc3QgMTAuMTEuMTIuMSBudWMxIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBleHBlY3Qgc2NyaXB0IGRvZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3NoIHRlc3RAMTAuMTEuMTIuMSAicHljdGwgbnVjMSA8cmVwbGFjZWFibGU+YXJnPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHRoZW4gcnVucyBhIFB5dGhvbiBzY3JpcHQgdGhhdCBjb250cm9scyBwb3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGxhYmVsIGNhbGxlZCA8ZmlsZW5hbWU+bnVjMTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBjdXN0b21pemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIG93biBzZXR1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9uZSByZXF1aXJlbWVudCBpcyB0aGF0IGl0IGFjY2VwdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIiwgIm9mZiIsIGFuZCAiY3ljbGUiIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIG5vIGNvbW1hbmQgaXMgZGVmaW5lZCwgaXQgY29ubmVjdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG92ZXIgU1NIIGFuZCB1c2VzIHRoZSBjbGFzc2ljIHJlYm9vdCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcmVib290IHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NpYyByZWJvb3QgaXMgZmluZSBhcyBsb25nIGFzIHRoZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsbHkgcmVib290cyAoaS5lLiB0aGUgU1NIIHRlc3QgaGFzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXNlZnVsIGZvciBzY2VuYXJpb3Mgd2hlcmUgeW91IGhhdmUgYSBzaW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCwgdHlwaWNhbGx5IHdpdGggYSBzaW5nbGUgYm9hcmQsIGFuZCB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgbWFudWFsIGludGVyYWN0aW9uIGlzIG9rYXkgZnJvbSB0aW1lIHRvIHRpbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBubyBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IHBlcmZvcm0gcG93ZXIKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbCBidXQgc3RpbGwgd2lzaCB0byBleHBlcmltZW50IHdpdGggYXV0b21hdGVkCisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHRlc3RpbmcsIHlvdSBjYW4gdXNlIHRoZSBkaWFsb2ctcG93ZXItY29udHJvbAorICAgICAgICAgICAgICAgICAgICBzY3JpcHQgdGhhdCBzaG93cyBhIGRpYWxvZyBwcm9tcHRpbmcgeW91IHRvIHBlcmZvcm0gdGhlCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIHBvd2VyIGFjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgZWl0aGVyIEtEaWFsb2cgb3IgWmVuaXR5IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoaXMgc2NyaXB0LCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1BPV0VSQ09OVFJPTF9DTUQnPjxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9DTUQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9QT1dFUkNPTlRST0xfQ01EID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9kaWFsb2ctcG93ZXItY29udHJvbCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3NlcmlhbC1jb25zb2xlLWNvbm5lY3Rpb24nPgorICAgICAgICAgICAgICAgIDx0aXRsZT5TZXJpYWwgQ29uc29sZSBDb25uZWN0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGVzdCB0YXJnZXQgY2xhc3NlcyByZXF1aXJpbmcgYSBzZXJpYWwgY29uc29sZQorICAgICAgICAgICAgICAgICAgICB0byBpbnRlcmFjdCB3aXRoIHRoZSBib290bG9hZGVyIChlLmcuIEJlYWdsZUJvbmVUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgIEVkZ2VSb3V0ZXJUYXJnZXQsIGFuZCBHcnViVGFyZ2V0KSwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhIGNvbW1hbmQgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcmlhbCBjb25zb2xlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0YXJnZXQgbWFjaGluZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9DTUQnPjxmaWxlbmFtZT5URVNUX1NFUklBTENPTlRST0xfQ01EPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgb3B0aW9uYWxseSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTJz48ZmlsZW5hbWU+VEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1M8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjYXNlcyBjb3VsZCBiZSBhIHNlcmlhbCB0ZXJtaW5hbCBwcm9ncmFtIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIGlzIGNvbm5lY3RlZCB0byBhIGxvY2FsIHNlcmlhbCBwb3J0LCBvciBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZWxuZXQ8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4gY29tbWFuZCBjb25uZWN0aW5nIHRvIGEgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICBSZWdhcmRsZXNzIG9mIHRoZSBjYXNlLCB0aGUgY29tbWFuZCBzaW1wbHkgbmVlZHMgdG8KKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgYW5kIGZvcndhcmQgdGhhdCBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgYXMgYW55IG5vcm1hbCB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtIGRvZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byB1c2UgdGhlIHBpY29jb20gdGVybWluYWwgcHJvZ3JhbSBvbgorICAgICAgICAgICAgICAgICAgICBzZXJpYWwgZGV2aWNlIDxmaWxlbmFtZT4vZGV2L3R0eVVTQjA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhdCAxMTUyMDBicHMsIHlvdSB3b3VsZCBzZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TRVJJQUxDT05UUk9MX0NNRCA9ICJwaWNvY29tIC9kZXYvdHR5VVNCMCAtYiAxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGxvY2FsIGRldmljZXMgd2hlcmUgdGhlIHNlcmlhbCBwb3J0IGRldmljZSBkaXNhcHBlYXJzCisgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIGRldmljZSByZWJvb3RzLCBhbiBhZGRpdGlvbmFsICJzZXJkZXZ0cnkiIHdyYXBwZXIKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0IGlzIHByb3ZpZGVkLgorICAgICAgICAgICAgICAgICAgICBUbyB1c2UgdGhpcyB3cmFwcGVyLCBzaW1wbHkgcHJlZml4IHRoZSB0ZXJtaW5hbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnk8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkgcGljb2NvbSAtYgorMTE1MjAwIC9kZXYvdHR5VVNCMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJxZW11LWltYWdlLXJ1bm5pbmctdGVzdHMiPgorICAgICAgICAgICAgPHRpdGxlPlJ1bm5pbmcgVGVzdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHN0YXJ0IHRoZSB0ZXN0cyBhdXRvbWF0aWNhbGx5IG9yIG1hbnVhbGx5OgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXV0b21hdGljYWxseSBydW5uaW5nIHRlc3RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBydW4gdGhlIHRlc3RzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1Y2Nlc3NmdWxseSBjcmVhdGVzIGFuIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRFU1RfSU1BR0UnPjxmaWxlbmFtZT5URVNUX0lNQUdFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfSU1BR0UgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHQsIGJ1aWxkIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgaW1hZ2Ugc3VjY2Vzc2Z1bGx5IGJ1aWxkcywgdGhlIHRlc3RzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYW51YWxseSBydW5uaW5nIHRlc3RzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBtYW51YWxseSBydW4gdGhlIHRlc3RzLCBmaXJzdCBnbG9iYWxseSBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtdGVzdGltYWdlJz48ZmlsZW5hbWU+dGVzdGltYWdlPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgYnkgZWRpdGluZyB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgSU5IRVJJVCArPSAidGVzdGltYWdlIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgTmV4dCwgdXNlIEJpdEJha2UgdG8gcnVuIHRoZSB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgYml0YmFrZSAtYyB0ZXN0aW1hZ2UgPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxsIHRlc3QgZmlsZXMgcmVzaWRlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvcnVudGltZTwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIEEgdGVzdCBuYW1lIG1hcHMgZGlyZWN0bHkgdG8gYSBQeXRob24gbW9kdWxlLgorICAgICAgICAgICAgICAgIEVhY2ggdGVzdCBtb2R1bGUgbWF5IGNvbnRhaW4gYSBudW1iZXIgb2YgaW5kaXZpZHVhbCB0ZXN0cy4KKyAgICAgICAgICAgICAgICBUZXN0cyBhcmUgdXN1YWxseSBncm91cGVkIHRvZ2V0aGVyIGJ5IHRoZSBhcmVhCisgICAgICAgICAgICAgICAgdGVzdGVkIChlLmcgdGVzdHMgZm9yIHN5c3RlbWQgcmVzaWRlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFkZCB0ZXN0cyB0byBhbnkgbGF5ZXIgcHJvdmlkZWQgeW91IHBsYWNlIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgcHJvcGVyIGFyZWEgYW5kIHlvdSBleHRlbmQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYXMgbm9ybWFsLgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdGhhdCB0ZXN0cyByZXNpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vbGliL29lcWEvcnVudGltZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgbW9kdWxlIG5hbWVzIGRvIG5vdCBjb2xsaWRlIHdpdGggbW9kdWxlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIGRlZmF1bHQgc2V0IG9mIHRlc3QgbW9kdWxlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9saWIvb2VxYS9ydW50aW1lPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNoYW5nZSB0aGUgc2V0IG9mIHRlc3RzIHJ1biBieSBhcHBlbmRpbmcgb3Igb3ZlcnJpZGluZworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1URVNUX1NVSVRFUyc+PGZpbGVuYW1lPlRFU1RfU1VJVEVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRWFjaCBuYW1lIGluIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+IHJlcHJlc2VudHMgYQorICAgICAgICAgICAgICAgIHJlcXVpcmVkIHRlc3QgZm9yIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUZXN0IG1vZHVsZXMgbmFtZWQgd2l0aGluIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY2Fubm90IGJlIHNraXBwZWQgZXZlbiBpZiBhIHRlc3QgaXMgbm90IHN1aXRhYmxlIGZvciBhbiBpbWFnZQorICAgICAgICAgICAgICAgIChlLmcuIHJ1bm5pbmcgdGhlIFJQTSB0ZXN0cyBvbiBhbiBpbWFnZSB3aXRob3V0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJwbTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBBcHBlbmRpbmcgImF1dG8iIHRvIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+IGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdG8gdHJ5IHRvIHJ1biBhbGwgdGVzdHMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIHRoZQorICAgICAgICAgICAgICAgIGltYWdlIChpLmUuIGVhY2ggdGVzdCBtb2R1bGUgbWF5IGVsZWN0IHRvIHNraXAgaXRzZWxmKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIG9yZGVyIHlvdSBsaXN0IHRlc3RzIGluIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaXMgaW1wb3J0YW50IGFuZCBpbmZsdWVuY2VzIHRlc3QgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGVzdHMgdGhhdCBkZXBlbmQgb24gb3RoZXIgdGVzdHMgc2hvdWxkIGJlIGFkZGVkCisgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIHRlc3Qgb24gd2hpY2ggdGhleSBkZXBlbmQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHNpbmNlIHRoZSA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4gdGVzdAorICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBpbmc8L2ZpbGVuYW1lPiB0ZXN0LCAic3NoIiBuZWVkcyB0byBjb21lIGFmdGVyCisgICAgICAgICAgICAgICAgInBpbmciIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNsYXNzIHByb3ZpZGVzIG5vIHJlLW9yZGVyaW5nIG9yIGRlcGVuZGVuY3kgaGFuZGxpbmcuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEVhY2ggbW9kdWxlIGNhbiBoYXZlIG11bHRpcGxlIGNsYXNzZXMgd2l0aCBtdWx0aXBsZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgUHl0aG9uIDxmaWxlbmFtZT51bml0dGVzdDwvZmlsZW5hbWU+IHJ1bGVzIGFwcGx5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSB0aGluZ3MgdG8ga2VlcCBpbiBtaW5kIHdoZW4gcnVubmluZyB0ZXN0czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlZmF1bHQgdGVzdHMgZm9yIHRoZSBpbWFnZSBhcmUgZGVmaW5lZAorICAgICAgICAgICAgICAgICAgICAgICAgYXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFRkFVTFRfVEVTVF9TVUlURVNfcG4tPHJlcGxhY2VhYmxlPmltYWdlPC9yZXBsYWNlYWJsZT4gPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgcnBtIHNtYXJ0IGRtZXNnIgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIHlvdXIgb3duIHRlc3QgdG8gdGhlIGxpc3Qgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBieSB1c2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NVSVRFU19hcHBlbmQgPSAiIG15dGVzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biBhIHNwZWNpZmljIGxpc3Qgb2YgdGVzdHMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TVUlURVMgPSAidGVzdDEgdGVzdDIgdGVzdDMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBSZW1lbWJlciwgb3JkZXIgaXMgaW1wb3J0YW50LgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwbGFjZSBhIHRlc3QgdGhhdCBpcyBkZXBlbmRlbnQgb24gYW5vdGhlciB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICBsYXRlciBpbiB0aGUgb3JkZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0iZXhwb3J0aW5nLXRlc3RzIj4KKyAgICAgICAgICAgIDx0aXRsZT5FeHBvcnRpbmcgVGVzdHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGV4cG9ydCB0ZXN0cyBzbyB0aGF0IHRoZXkgY2FuIHJ1biBpbmRlcGVuZGVudGx5IG9mCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICBFeHBvcnRpbmcgdGVzdHMgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBoYW5kCisgICAgICAgICAgICAgICAgdGhlIHRlc3QgZXhlY3V0aW9uIG9mZiB0byBhIHNjaGVkdWxlci4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgZXhwb3J0IHRlc3RzIHRoYXQgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItVEVTVF9TVUlURVMnPjxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdXIgaW1hZ2UgaXMgYWxyZWFkeSBidWlsdCwgbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgYXJlIHNldAorICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gcHJvdmlkZSB0aGUgSVAgYWRkcmVzcyB5b3UgbmVlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfRVhQT1JUX09OTFkgPSAiMSIKKyAgICAgVEVTVF9UQVJHRVQgPSAic2ltcGxlcmVtb3RlIgorICAgICBURVNUX1RBUkdFVF9JUCA9ICIxOTIuMTY4LjcuMiIKKyAgICAgVEVTVF9TRVJWRVJfSVAgPSAiMTkyLjE2OC43LjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhlbiBleHBvcnQgdGhlIHRlc3RzIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8gLWMgdGVzdGltYWdlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV4cG9ydGluZyB0aGUgdGVzdHMgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC90ZXN0aW1hZ2UvY29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgaXMgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9FWFBPUlRfRElSPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHJ1biB0aGUgdGVzdHMgb3V0c2lkZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHRtcC90ZXN0aW1hZ2UvY29yZS1pbWFnZS1zYXRvCisgICAgICQgLi9ydW5leHBvcnRlZC5weSB0ZXN0ZGF0YS5qc29uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzICJleHBvcnQiIGZlYXR1cmUgZG9lcyBub3QgZGVwbG95IG9yIGJvb3QgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgWW91ciB0YXJnZXQgKGJlIGl0IGEgUWVtdSBvciBoYXJkd2FyZSBvbmUpCisgICAgICAgICAgICAgICAgICAgIGhhcyB0byBhbHJlYWR5IGJlIHVwIGFuZCBydW5uaW5nIHdoZW4geW91IGNhbGwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bmV4cG9ydGVkLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBleHBvcnRlZCBkYXRhIChpLmUuIDxmaWxlbmFtZT50ZXN0ZGF0YS5qc29uPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgY29udGFpbnMgcGF0aHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjYW4gYmUgbW92ZWQKKyAgICAgICAgICAgICAgICB0byBhbm90aGVyIG1hY2hpbmUgYXMgbG9uZyBhcyB5b3UgdXBkYXRlIHNvbWUgcGF0aHMgaW4gdGhlCisgICAgICAgICAgICAgICAgSlNPTi4KKyAgICAgICAgICAgICAgICBVc3VhbGx5LCB5b3Ugb25seSBjYXJlIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0RFUExPWV9ESVJ9L3JwbTwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIChhc3N1bWluZyB0aGUgUlBNIGFuZCBTbWFydCB0ZXN0cyBhcmUgZW5hYmxlZCkuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBydW5uaW5nIHRoZSB0ZXN0cyBvbiBvdGhlciBtYWNoaW5lCisgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgaGF2ZSB0byBtb3ZlIHRoZSBjb250ZW50cyBhbmQgY2FsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5leHBvcnRlZC5weTwvZmlsZW5hbWU+IHdpdGgKKyAgICAgICAgICAgICAgICAiLS1kZXBsb3ktZGlyIDxyZXBsYWNlYWJsZT5wYXRoPC9yZXBsYWNlYWJsZT4iIGFzCisgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC4vcnVuZXhwb3J0ZWQucHkgLS1kZXBsb3ktZGlyIC9uZXcvcGF0aC9vbi90aGlzL21hY2hpbmUgdGVzdGRhdGEuanNvbgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuZXhwb3J0ZWQucHk8L2ZpbGVuYW1lPiBhY2NlcHRzIG90aGVyIGFyZ3VtZW50cworICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgZGVzY3JpYmVkIHVzaW5nIDxmaWxlbmFtZT4tLWhlbHA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJxZW11LWltYWdlLXdyaXRpbmctbmV3LXRlc3RzIj4KKyAgICAgICAgICAgIDx0aXRsZT5Xcml0aW5nIE5ldyBUZXN0czwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIG1lbnRpb25lZCBwcmV2aW91c2x5LCBhbGwgbmV3IHRlc3QgZmlsZXMgbmVlZCB0byBiZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9wZXIgcGxhY2UgZm9yIHRoZSBidWlsZCBzeXN0ZW0gdG8gZmluZCB0aGVtLgorICAgICAgICAgICAgICAgIE5ldyB0ZXN0cyBmb3IgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IG91dHNpZGUgb2YgdGhlIGNvcmUKKyAgICAgICAgICAgICAgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxheWVyIHRoYXQgYWRkcyB0aGUgZnVuY3Rpb25hbGl0eSwgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmxheWVyPC9yZXBsYWNlYWJsZT4vbGliL29lcWEvcnVudGltZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgKGFzIGxvbmcgYXMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGlzIGV4dGVuZGVkIGluIHRoZSBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFzIG5vcm1hbCkuCisgICAgICAgICAgICAgICAgSnVzdCByZW1lbWJlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GaWxlbmFtZXMgbmVlZCB0byBtYXAgZGlyZWN0bHkgdG8gdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgKG1vZHVsZSkgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCB1c2UgbW9kdWxlIG5hbWVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpZGUgd2l0aCBleGlzdGluZyBjb3JlIHRlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NaW5pbWFsbHksIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X19pbml0X18ucHk8L2ZpbGVuYW1lPiBmaWxlIG11c3QgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBydW50aW1lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSBuZXcgdGVzdCwgc3RhcnQgYnkgY29weWluZyBhbiBleGlzdGluZyBtb2R1bGUKKyAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+c3lzbG9nLnB5PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLnB5PC9maWxlbmFtZT4gYXJlIGdvb2Qgb25lcyB0byB1c2UpLgorICAgICAgICAgICAgICAgIFRlc3QgbW9kdWxlcyBjYW4gdXNlIGNvZGUgZnJvbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3V0aWxzPC9maWxlbmFtZT4sIHdoaWNoIGFyZSBoZWxwZXIKKyAgICAgICAgICAgICAgICBjbGFzc2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgc2hlbGwgY29tbWFuZHMgc3VjaCB0aGF0IHlvdSByZWx5IG9uIHRoZW0gYW5kIHRoZXkKKyAgICAgICAgICAgICAgICByZXR1cm4gYSBzaW5nbGUgY29kZSBmb3Igc3VjY2Vzcy4KKyAgICAgICAgICAgICAgICBCZSBhd2FyZSB0aGF0IHNvbWV0aW1lcyB5b3Ugd2lsbCBuZWVkIHRvIHBhcnNlIHRoZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgU2VlIHRoZSA8ZmlsZW5hbWU+ZGYucHk8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGF0ZS5weTwvZmlsZW5hbWU+IG1vZHVsZXMgZm9yIGV4YW1wbGVzLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3Ugd2lsbCBub3RpY2UgdGhhdCBhbGwgdGVzdCBjbGFzc2VzIGluaGVyaXQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VSdW50aW1lVGVzdDwvZmlsZW5hbWU+LCB3aGljaCBpcyBmb3VuZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXRlc3QucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGJhc2UgY2xhc3Mgb2ZmZXJzIHNvbWUgaGVscGVyIGF0dHJpYnV0ZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncWVtdS1pbWFnZS13cml0aW5nLXRlc3RzLWNsYXNzLW1ldGhvZHMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DbGFzcyBNZXRob2RzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDbGFzcyBtZXRob2RzIGFyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aGFzUGFja2FnZShwa2cpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zICJUcnVlIiBpZiA8ZmlsZW5hbWU+cGtnPC9maWxlbmFtZT4gaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2UgbGlzdCBvZiB0aGUgaW1hZ2UsIHdoaWNoIGlzIGJhc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIG1hbmlmZXN0IGZpbGUgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aGFzRmVhdHVyZShmZWF0dXJlKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyAiVHJ1ZSIgaWYgdGhlIGZlYXR1cmUgaXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdxZW11LWltYWdlLXdyaXRpbmctdGVzdHMtY2xhc3MtYXR0cmlidXRlcyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkNsYXNzIEF0dHJpYnV0ZXM8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENsYXNzIGF0dHJpYnV0ZXMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wc2NtZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXF1YWxzICJwcyAtZWYiIGlmIDxmaWxlbmFtZT5wcm9jcHM8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCA8ZmlsZW5hbWU+cHNjbWQ8L2ZpbGVuYW1lPiBlcXVhbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHMiIChidXN5Ym94KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRjPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGVkIHRlc3QgY29udGV4dCwgd2hpY2ggZ2l2ZXMgYWNjZXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgZGF0YXN0b3JlLCB3aGljaCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Ugc3R1ZmYgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiKTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnRlc3RzbGlzdDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+dGVzdHNyZXF1aXJlZDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIGludGVybmFsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdHMgZG8gbm90IG5lZWQgdGhlc2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZXNkaXI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFic29sdXRlIHBhdGggdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGNvbnRhaW5zIGhlbHBlciBmaWxlcyBmb3IgdGVzdHMgbWVhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb3B5aW5nIG9uIHRoZSB0YXJnZXQgc3VjaCBhcyBzbWFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgd3JpdHRlbiBpbiBDIGZvciBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBjb250cm9sbGVyIG9iamVjdCB1c2VkIHRvIGRlcGxveQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXJ0IGFuIGltYWdlIG9uIGEgcGFydGljdWxhciB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIFFlbXVUYXJnZXQsIFNpbXBsZVJlbW90ZSwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdW1taWJvb3RUYXJnZXQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdHMgdXN1YWxseSB1c2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aXA8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0J3MgSVAgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2VydmVyX2lwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGhvc3QncyBJUCBhZGRyZXNzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c3VhbGx5IHVzZWQgYnkgdGhlICJzbWFydCIgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cnVuKGNtZCwgdGltZW91dD1Ob25lKTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzaW5nbGUsIG1vc3QgdXNlZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyBhIHdyYXBwZXIgZm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoIHJvb3RAaG9zdCAiY21kIjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCByZXR1cm5zIGEgdHVwbGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCksIHdoaWNoIGFyZSB3aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIG5hbWVzIGltcGx5IC0gdGhlIHJldHVybiBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mICJjbWQiIGFuZCB3aGF0ZXZlciBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgcHJvZHVjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25hbCB0aW1lb3V0IGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0IHNob3VsZCB3YWl0IGZvciAiY21kIiB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyAiTm9uZSIsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0IHVzZXMgdGhlIGRlZmF1bHQgaW5zdGFuY2UncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IHBlcmlvZCwgd2hpY2ggaXMgMzAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyAiMCIsIHRoZSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnMgdW50aWwgdGhlIGNvbW1hbmQgcmV0dXJucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y29weV90byhsb2NhbHBhdGgsIHJlbW90ZXBhdGgpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcCBsb2NhbHBhdGggcm9vdEBpcDpyZW1vdGVwYXRoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcCByb290QGhvc3Q6cmVtb3RlcGF0aCBsb2NhbHBhdGg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ncWVtdS1pbWFnZS13cml0aW5nLXRlc3RzLWluc3RhbmNlLWF0dHJpYnV0ZXMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YW5jZSBBdHRyaWJ1dGVzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZXhpc3RzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGFyZ2V0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGFyZ2V0PC9maWxlbmFtZT4gaW5zdGFuY2UgYXR0cmlidXRlIGlzCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUgY2xhc3MgYXR0cmlidXRlIG9mIHRoZSBzYW1lIG5hbWUsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhdHRyaWJ1dGUgZXhpc3RzIGFzIGJvdGggYW4gaW5zdGFuY2UgYW5kIGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBzbyB0ZXN0cyBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZWxmLnRhcmdldC5ydW4oY21kKTwvZmlsZW5hbWU+IGluIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKGNtZCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1nZGItcmVtb3RlZGVidWciPgorICAgICAgICA8dGl0bGU+RGVidWdnaW5nIFdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpIFJlbW90ZWx5PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdEQiBhbGxvd3MgeW91IHRvIGV4YW1pbmUgcnVubmluZyBwcm9ncmFtcywgd2hpY2ggaW4gdHVybiBoZWxwcyB5b3UgdG8gdW5kZXJzdGFuZCBhbmQgZml4IHByb2JsZW1zLgorICAgICAgICAgICAgSXQgYWxzbyBhbGxvd3MgeW91IHRvIHBlcmZvcm0gcG9zdC1tb3J0ZW0gc3R5bGUgYW5hbHlzaXMgb2YgcHJvZ3JhbSBjcmFzaGVzLgorICAgICAgICAgICAgR0RCIGlzIGF2YWlsYWJsZSBhcyBhIHBhY2thZ2Ugd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBpcworICAgICAgICAgICAgaW5zdGFsbGVkIGluIFNESyBpbWFnZXMgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IiBjaGFwdGVyCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGltYWdlcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBHREIgYXQgPHVsaW5rIHVybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi8iLz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8dGlwPgorICAgICAgICAgICAgRm9yIGJlc3QgcmVzdWx0cywgaW5zdGFsbCBkZWJ1ZyAoPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPikgcGFja2FnZXMKKyAgICAgICAgICAgIGZvciB0aGUgYXBwbGljYXRpb25zIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcuCisgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBleHRyYSBkZWJ1ZyBzeW1ib2xzIGF2YWlsYWJsZSB0aGF0IGdpdmUgeW91IG1vcmUKKyAgICAgICAgICAgIG1lYW5pbmdmdWwgb3V0cHV0LgorICAgICAgICA8L3RpcD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWV0aW1lcywgZHVlIHRvIG1lbW9yeSBvciBkaXNrIHNwYWNlIGNvbnN0cmFpbnRzLCBpdCBpcyBub3QgcG9zc2libGUKKyAgICAgICAgICAgIHRvIHVzZSBHREIgZGlyZWN0bHkgb24gdGhlIHJlbW90ZSB0YXJnZXQgdG8gZGVidWcgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgVGhlc2UgY29uc3RyYWludHMgYXJpc2UgYmVjYXVzZSBHREIgbmVlZHMgdG8gbG9hZCB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgIGJpbmFyaWVzIG9mIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLgorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBHREIgbmVlZHMgdG8gcGVyZm9ybSBtYW55IGNvbXB1dGF0aW9ucyB0byBsb2NhdGUgaW5mb3JtYXRpb24gc3VjaCBhcyBmdW5jdGlvbgorICAgICAgICAgICAgbmFtZXMsIHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMsIHN0YWNrIHRyYWNlcyBhbmQgc28gZm9ydGggLSBldmVuIGJlZm9yZSBzdGFydGluZyB0aGUKKyAgICAgICAgICAgIGRlYnVnZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgVGhlc2UgZXh0cmEgY29tcHV0YXRpb25zIHBsYWNlIG1vcmUgbG9hZCBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBhbmQgY2FuIGFsdGVyIHRoZQorICAgICAgICAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBoZWxwIGdldCBwYXN0IHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBjb25zdHJhaW50cywgeW91IGNhbiB1c2UgR2Ric2VydmVyLgorICAgICAgICAgICAgR2Ric2VydmVyIHJ1bnMgb24gdGhlIHJlbW90ZSB0YXJnZXQgYW5kIGRvZXMgbm90IGxvYWQgYW55IGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgZnJvbSB0aGUgZGVidWdnZWQgcHJvY2Vzcy4KKyAgICAgICAgICAgIEluc3RlYWQsIGEgR0RCIGluc3RhbmNlIHByb2Nlc3NlcyB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRoYXQgaXMgcnVuIG9uIGEKKyAgICAgICAgICAgIHJlbW90ZSBjb21wdXRlciAtIHRoZSBob3N0IEdEQi4KKyAgICAgICAgICAgIFRoZSBob3N0IEdEQiB0aGVuIHNlbmRzIGNvbnRyb2wgY29tbWFuZHMgdG8gR2Ric2VydmVyIHRvIG1ha2UgaXQgc3RvcCBvciBzdGFydCB0aGUgZGVidWdnZWQKKyAgICAgICAgICAgIHByb2dyYW0sIGFzIHdlbGwgYXMgcmVhZCBvciB3cml0ZSBtZW1vcnkgcmVnaW9ucyBvZiB0aGF0IGRlYnVnZ2VkIHByb2dyYW0uCisgICAgICAgICAgICBBbGwgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBsb2FkZWQgYW5kIHByb2Nlc3NlZCBhcyB3ZWxsCisgICAgICAgICAgICBhcyBhbGwgdGhlIGhlYXZ5IGRlYnVnZ2luZyBpcyBkb25lIGJ5IHRoZSBob3N0IEdEQi4KKyAgICAgICAgICAgIE9mZmxvYWRpbmcgdGhlc2UgcHJvY2Vzc2VzIGdpdmVzIHRoZSBHZGJzZXJ2ZXIgcnVubmluZyBvbiB0aGUgdGFyZ2V0IGEgY2hhbmNlIHRvIHJlbWFpbgorICAgICAgICAgICAgc21hbGwgYW5kIGZhc3QuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBzb3VyY2UgZmlsZXMgYXJlIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiotZGJnPC9maWxlbmFtZT4gcGFja2FnZXMgaW4gb3JkZXIgdG8gZW5hYmxlIEdEQgorICAgICAgICAgICAgICAgIHRvIHNob3cgc291cmNlIGxpbmVzIGluIGl0cyBvdXRwdXQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzYXZlIGZ1cnRoZXIgc3BhY2Ugb24gdGhlIHRhcmdldCBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJz48ZmlsZW5hbWU+UEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAiZGVidWctd2l0aG91dC1zcmMiIHNvIHRoYXQgdGhlc2UgcGFja2FnZXMgZG8gbm90CisgICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWNhdXNlIHRoZSBob3N0IEdEQiBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZAorICAgICAgICAgICAgZm9yIGRvaW5nIHRoZSBuZWNlc3NhcnkgcHJvY2Vzc2luZyB0byBtYWtlIGFjdHVhbCBkZWJ1Z2dpbmcgaGFwcGVuLAorICAgICAgICAgICAgeW91IGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBob3N0IGNhbiBhY2Nlc3MgdGhlIHVuc3RyaXBwZWQgYmluYXJpZXMgY29tcGxldGUKKyAgICAgICAgICAgIHdpdGggdGhlaXIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBhbHNvIGJlIHN1cmUgdGhlIHRhcmdldCBpcyBjb21waWxlZCB3aXRoIG5vIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICBUaGUgaG9zdCBHREIgbXVzdCBhbHNvIGhhdmUgbG9jYWwgYWNjZXNzIHRvIGFsbCB0aGUgbGlicmFyaWVzIHVzZWQgYnkgdGhlCisgICAgICAgICAgICBkZWJ1Z2dlZCBwcm9ncmFtLgorICAgICAgICAgICAgQmVjYXVzZSBHZGJzZXJ2ZXIgZG9lcyBub3QgbmVlZCBhbnkgbG9jYWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLCB0aGUgYmluYXJpZXMgb24KKyAgICAgICAgICAgIHRoZSByZW1vdGUgdGFyZ2V0IGNhbiByZW1haW4gc3RyaXBwZWQuCisgICAgICAgICAgICBIb3dldmVyLCB0aGUgYmluYXJpZXMgbXVzdCBhbHNvIGJlIGNvbXBpbGVkIHdpdGhvdXQgb3B0aW1pemF0aW9uCisgICAgICAgICAgICBzbyB0aGV5IG1hdGNoIHRoZSBob3N0J3MgYmluYXJpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGggR0RCIGRvY3VtZW50YXRpb24gYW5kIHRlcm1pbm9sb2d5LCB0aGUgYmluYXJ5IGJlaW5nIGRlYnVnZ2VkCisgICAgICAgICAgICBvbiB0aGUgcmVtb3RlIHRhcmdldCBtYWNoaW5lIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiaW5mZXJpb3IiIGJpbmFyeS4KKyAgICAgICAgICAgIEZvciBkb2N1bWVudGF0aW9uIG9uIEdEQiBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2RvY3VtZW50YXRpb24vIj5HREIgc2l0ZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHN0ZXBzIHlvdSBuZWVkIHRvIHRha2UKKyAgICAgICAgICAgIHRvIGRlYnVnIHVzaW5nIHRoZSBHTlUgcHJvamVjdCBkZWJ1Z2dlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1zZXR1cCc+CisgICAgICAgICAgICA8dGl0bGU+U2V0IFVwIHRoZSBDcm9zcy1EZXZlbG9wbWVudCBEZWJ1Z2dpbmcgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGNhbiBpbml0aWF0ZSBhIHJlbW90ZSBkZWJ1Z2dpbmcgc2Vzc2lvbiwgeW91IG5lZWQKKyAgICAgICAgICAgICAgICB0byBiZSBzdXJlIHlvdSBoYXZlIHNldCB1cCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsCisgICAgICAgICAgICAgICAgdG9vbGNoYWluLCBhbmQgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICBUaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2FkdC1wcmVwYXJlJz5QcmVwYXJpbmcgZm9yIEFwcGxpY2F0aW9uIERldmVsb3BtZW50PC91bGluaz4iCisgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZQorICAgICAgICAgICAgICAgIGRlc2NyaWJlcyB0aGlzIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgaGF2ZSByZWFkIHRoYXQgY2hhcHRlciBhbmQgaGF2ZSBzZXQgdXAKKyAgICAgICAgICAgICAgICB5b3VyIGVudmlyb25tZW50LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGJzZXJ2ZXIiPgorICAgICAgICAgICAgPHRpdGxlPkxhdW5jaCBHZGJzZXJ2ZXIgb24gdGhlIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE1ha2Ugc3VyZSBHZGJzZXJ2ZXIgaXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgSWYgaXQgaXMgbm90LCBpbnN0YWxsIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkYnNlcnZlcjwvZmlsZW5hbWU+LCB3aGljaCBuZWVkcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidGhyZWFkLWRiMTwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSwgdGhhdCB3aGVuIGVudGVyZWQgZnJvbSB0aGUgaG9zdCwKKyAgICAgICAgICAgICAgICBjb25uZWN0cyB0byB0aGUgdGFyZ2V0IGFuZCBsYXVuY2hlcyBHZGJzZXJ2ZXIgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAiZGVidWciIGEgYmluYXJ5IG5hbWVkIDxmaWxlbmFtZT5oZWxsb3dvcmxkPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdkYnNlcnZlciBsb2NhbGhvc3Q6MjM0NSAvdXNyL2Jpbi9oZWxsb3dvcmxkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEdkYnNlcnZlciBzaG91bGQgbm93IGJlIGxpc3RlbmluZyBvbiBwb3J0IDIzNDUgZm9yIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIGNvbW1hbmRzIGNvbWluZyBmcm9tIGEgcmVtb3RlIEdEQiBwcm9jZXNzIHRoYXQgaXMgcnVubmluZyBvbgorICAgICAgICAgICAgICAgIHRoZSBob3N0IGNvbXB1dGVyLgorICAgICAgICAgICAgICAgIENvbW11bmljYXRpb24gYmV0d2VlbiBHZGJzZXJ2ZXIgYW5kIHRoZSBob3N0IEdEQiBhcmUgZG9uZQorICAgICAgICAgICAgICAgIHVzaW5nIFRDUC4KKyAgICAgICAgICAgICAgICBUbyB1c2Ugb3RoZXIgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMsIHBsZWFzZSByZWZlciB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RiLyc+R2Ric2VydmVyIGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiIj4KKyAgICAgICAgICAgIDx0aXRsZT5MYXVuY2ggR0RCIG9uIHRoZSBIb3N0IENvbXB1dGVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVubmluZyBHREIgb24gdGhlIGhvc3QgY29tcHV0ZXIgdGFrZXMgYSBudW1iZXIgb2Ygc3RhZ2VzLCB3aGljaAorICAgICAgICAgICAgICAgIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLWJ1aWxkY3Jvc3MiPgorICAgICAgICAgICAgICAgIDx0aXRsZT5CdWlsZCB0aGUgQ3Jvc3MtR0RCIFBhY2thZ2U8L3RpdGxlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHN1aXRhYmxlIEdEQiBjcm9zcy1iaW5hcnkgaXMgcmVxdWlyZWQgdGhhdCBydW5zIG9uIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBjb21wdXRlciBidXQgYWxzbyBrbm93cyBhYm91dCB0aGUgdGhlIEFCSSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBnZXQgdGhpcyBiaW5hcnkgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2hlcmUgdGhlIHRvb2xjaGFpbiBoYXMgYmVlbiBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRlZmF1bHQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L3Bva3kvJkRJU1RSTzs8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAvb3B0L3Bva3kvJkRJU1RSTzsvc3lzcm9vdHMvaTY4Ni1wb2t5c2RrLWxpbnV4L3Vzci9iaW4vYXJtdjdhLXZmcC1uZW9uLXBva3ktbGludXgtZ251ZWFiaS9hcm0tcG9reS1saW51eC1nbnVlYWJpLWdkYgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIHdoZXJlIDxmaWxlbmFtZT5hcm08L2ZpbGVuYW1lPiBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmxpbnV4LWdudWVhYmk8L2ZpbGVuYW1lPiBpcyB0aGUgdGFyZ2V0IEFCSS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgQml0QmFrZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdkYi1jcm9zczwvZmlsZW5hbWU+IGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBnZGItY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBiaW5hcnkgaXMgYnVpbHQsIHlvdSBjYW4gZmluZCBpdCBoZXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRtcC9zeXNyb290cy88cmVwbGFjZWFibGU+aG9zdC1hcmNoPC9yZXBsYWNlYWJsZT4vdXNyL2Jpbi88cmVwbGFjZWFibGU+dGFyZ2V0LXBsYXRmb3JtPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnRhcmdldC1hYmk8L3JlcGxhY2VhYmxlPi1nZGIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0ZS10aGUtZ2RiLWluaXRpYWxpemF0aW9uLWZpbGUnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5DcmVhdGUgdGhlIEdEQiBJbml0aWFsaXphdGlvbiBGaWxlIGFuZCBQb2ludCB0byBZb3VyIFJvb3QgRmlsZXN5c3RlbTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgR0RCIGNyb3NzLWJpbmFyeSwgeW91IGFsc28gbmVlZCBhIEdEQgorICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbiBmaWxlIGluIHRoZSBzYW1lIHRvcCBkaXJlY3RvcnkgaW4gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgeW91ciBiaW5hcnkgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc3RhcnQgR0RCIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0sIEdEQgorICAgICAgICAgICAgICAgICAgICBmaW5kcyB0aGlzIGluaXRpYWxpemF0aW9uIGZpbGUgYW5kIGV4ZWN1dGVzIGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMgd2l0aGluLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT4uZ2RiaW5pdDwvZmlsZW5hbWU+LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvb25saW5lZG9jcy9nZGIvJz5EZWJ1Z2dpbmcgd2l0aCBHREI8L3VsaW5rPiIsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG1haW50YWluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5zb3VyY2V3YXJlLm9yZyc+c291cmNld2FyZS5vcmc8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYWRkIGEgc3RhdGVtZW50IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi8uZ2RiaW5pdDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBwb2ludHMgdG8geW91cgorICAgICAgICAgICAgICAgICAgICByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHBvaW50cyB0byB0aGUgcm9vdCBmaWxlc3lzdGVtIGZvcgorICAgICAgICAgICAgICAgICAgICBhbiBBUk0tYmFzZWQgdGFyZ2V0IGRldmljZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzZXQgc3lzcm9vdCB+L3N5c3Jvb3RfYXJtCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiLWxhdW5jaGhvc3QiPgorICAgICAgICAgICAgICAgIDx0aXRsZT5MYXVuY2ggdGhlIEhvc3QgR0RCPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgbGF1bmNoaW5nIHRoZSBob3N0IEdEQiwgeW91IG5lZWQgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBjcm9zcy1kZWJ1Z2dpbmcgZW52aXJvbm1lbnQgc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpZiB5b3UgaW5zdGFsbGVkIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gaXMgYXQgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCBiZWdpbnMgd2l0aCB0aGUgc3RyaW5nICJlbnZpcm9ubWVudC1zZXR1cCIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNzZXR0aW5nLXVwLXRoZS1jcm9zcy1kZXZlbG9wbWVudC1lbnZpcm9ubWVudCc+U2V0dGluZyBVcCB0aGUgQ3Jvc3MtRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICBHdWlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgc3dpdGNoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJpbmFyeSByZXNpZGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gdGhlIDxmaWxlbmFtZT5jcm9zcy1nZGI8L2ZpbGVuYW1lPiBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgdGhlIGJpbmFyeSBmaWxlIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY29udGludWVzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgdXNlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBieSBsb2FkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+aGVsbG93b3JsZDwvZmlsZW5hbWU+IGJpbmFyeSBhcyB3ZWxsIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBhcm0tcG9reS1saW51eC1nbnVhYmktZ2RiIGhlbGxvd29ybGQKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZHMgaW4geW91ciA8ZmlsZW5hbWU+LmdkYmluaXQ8L2ZpbGVuYW1lPiBleGVjdXRlCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgR0RCIHByb21wdCBhcHBlYXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwbGF0ZGV2LWdkYi1jb25uZWN0LXRvLXRoZS1yZW1vdGUtZ2RiLXNlcnZlcic+CisgICAgICAgICAgICA8dGl0bGU+Q29ubmVjdCB0byB0aGUgUmVtb3RlIEdEQiBTZXJ2ZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSB0YXJnZXQsIHlvdSBuZWVkIHRvIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBHREIKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgdGhhdCBpcyBydW5uaW5nIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIHJlbW90ZSBob3N0IGFuZCBwb3J0LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGNvbW1hbmQgY29udGludWluZyB3aXRoIHRoZSBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdGFyZ2V0IHJlbW90ZSAxOTIuMTY4LjcuMjoyMzQ1CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtZ2RiLXJlbW90ZWRlYnVnLWxhdW5jaC1nZGItdXNpbmciPgorICAgICAgICAgICAgPHRpdGxlPlVzZSB0aGUgRGVidWdnZXI8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyBwcm9jZWVkIHdpdGggZGVidWdnaW5nIGFzIG5vcm1hbCAtIGFzIGlmIHlvdSB3ZXJlIGRlYnVnZ2luZworICAgICAgICAgICAgICAgIG9uIHRoZSBsb2NhbCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0byBpbnN0cnVjdCBHREIgdG8gYnJlYWsgaW4gdGhlICJtYWluIiBmdW5jdGlvbiBhbmQgdGhlbgorICAgICAgICAgICAgICAgIGNvbnRpbnVlIHdpdGggZXhlY3V0aW9uIG9mIHRoZSBpbmZlcmlvciBiaW5hcnkgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMKKyAgICAgICAgICAgICAgICBmcm9tIHdpdGhpbiBHREI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAoZ2RiKSBicmVhayBtYWluCisgICAgIChnZGIpIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBHREIsIHNlZSB0aGUgcHJvamVjdCdzIG9ubGluZSBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9kb3dubG9hZC9vbmxpbmVkb2NzLyIvPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZWJ1Z2dpbmctcGFyYWxsZWwtbWFrZS1yYWNlcyc+CisgICAgICAgIDx0aXRsZT5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIHBhcmFsbGVsIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gcmFjZSBvY2N1cnMgd2hlbiB0aGUgYnVpbGQKKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIHNldmVyYWwgcGFydHMgdGhhdCBhcmUgcnVuIHNpbXVsdGFuZW91c2x5IGFuZAorICAgICAgICAgICAgYSBzaXR1YXRpb24gb2NjdXJzIHdoZW4gdGhlIG91dHB1dCBvciByZXN1bHQgb2Ygb25lCisgICAgICAgICAgICBwYXJ0IGlzIG5vdCByZWFkeSBmb3IgdXNlIHdpdGggYSBkaWZmZXJlbnQgcGFydCBvZiB0aGUgYnVpbGQgdGhhdAorICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGF0IG91dHB1dC4KKyAgICAgICAgICAgIFBhcmFsbGVsIG1ha2UgcmFjZXMgYXJlIGFubm95aW5nIGFuZCBjYW4gc29tZXRpbWVzIGJlIGRpZmZpY3VsdAorICAgICAgICAgICAgdG8gcmVwcm9kdWNlIGFuZCBmaXguCisgICAgICAgICAgICBIb3dldmVyLCBzb21lIHNpbXBsZSB0aXBzIGFuZCB0cmlja3MgZXhpc3QgdGhhdCBjYW4gaGVscAorICAgICAgICAgICAgeW91IGRlYnVnIGFuZCBmaXggdGhlbS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBhIHJlYWwtd29ybGQgZXhhbXBsZSBvZiBhbiBlcnJvciBlbmNvdW50ZXJlZAorICAgICAgICAgICAgb24gdGhlIFlvY3RvIFByb2plY3QgYXV0b2J1aWxkZXIgYW5kIHRoZSBwcm9jZXNzIHVzZWQgdG8gZml4IGl0LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgeW91IGNhbm5vdCBwcm9wZXJseSBmaXggYSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHJhY2UKKyAgICAgICAgICAgICAgICBjb25kaXRpb24sIHlvdSBjYW4gd29yayBhcm91bmQgaXQgYnkgY2xlYXJpbmcgZWl0aGVyIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0aGUtZmFpbHVyZSc+CisgICAgICAgICAgICA8dGl0bGU+VGhlIEZhaWx1cmU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgdGhpcyBleGFtcGxlLCBhc3N1bWUgdGhhdCB5b3UgYXJlIGJ1aWxkaW5nIGFuIGltYWdlIHRoYXQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSAibmVhcmQiIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgQW5kLCBkdXJpbmcgdGhlIGJ1aWxkLCBCaXRCYWtlIHJ1bnMgaW50byBwcm9ibGVtcyBhbmQKKyAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgbG9nIGZpbGUgaGFzIGxvbmdlciBsaW5lcyBhcnRpZmljaWFsbHkKKyAgICAgICAgICAgICAgICAgICAgYnJva2VuIHRvIG1ha2UgdGhlIGxpc3RpbmcgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIElmIHlvdSBleGFtaW5lIHRoZSBvdXRwdXQgb3IgdGhlIGxvZyBmaWxlLCB5b3Ugc2VlIHRoZQorICAgICAgICAgICAgICAgIGZhaWx1cmUgZHVyaW5nIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICB8IERFQlVHOiBTSVRFIGZpbGVzIFsnZW5kaWFuLWxpdHRsZScsICdiaXQtMzInLCAnaXg4Ni1jb21tb24nLCAnY29tbW9uLWxpbnV4JywgJ2NvbW1vbi1nbGliYycsICdpNTg2LWxpbnV4JywgJ2NvbW1vbiddCisgICAgIHwgREVCVUc6IEV4ZWN1dGluZyBzaGVsbCBmdW5jdGlvbiBkb19jb21waWxlCisgICAgIHwgTk9URTogbWFrZSAtaiAxNgorICAgICB8IG1ha2UgLS1uby1wcmludC1kaXJlY3RvcnkgYWxsLWFtCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS90eXBlcy5oIGluY2x1ZGUvbmVhci90eXBlcy5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9sb2cuaCBpbmNsdWRlL25lYXIvbG9nLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL3BsdWdpbi5oIGluY2x1ZGUvbmVhci9wbHVnaW4uaAorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvdGFnLmggaW5jbHVkZS9uZWFyL3RhZy5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL2FkYXB0ZXIuaCBpbmNsdWRlL25lYXIvYWRhcHRlci5oCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL25kZWYuaCBpbmNsdWRlL25lYXIvbmRlZi5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS90bHYuaCBpbmNsdWRlL25lYXIvdGx2LmgKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9zZXR0aW5nLmggaW5jbHVkZS9uZWFyL3NldHRpbmcuaAorICAgICB8IC9iaW4vbWtkaXIgLXAgaW5jbHVkZS9uZWFyCisgICAgIHwgL2Jpbi9ta2RpciAtcCBpbmNsdWRlL25lYXIKKyAgICAgfCAvYmluL21rZGlyIC1wIGluY2x1ZGUvbmVhcgorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvZGV2aWNlLmggaW5jbHVkZS9uZWFyL2RldmljZS5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9uZmNfY29weS5oIGluY2x1ZGUvbmVhci9uZmNfY29weS5oCisgICAgIHwgbG4gLXMgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9uZWFyZC8KKyAgICAgICAwLjE0LXIwL25lYXJkLTAuMTQvaW5jbHVkZS9zbmVwLmggaW5jbHVkZS9uZWFyL3NuZXAuaAorICAgICB8IGxuIC1zIC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvbmVhcmQvCisgICAgICAgMC4xNC1yMC9uZWFyZC0wLjE0L2luY2x1ZGUvdmVyc2lvbi5oIGluY2x1ZGUvbmVhci92ZXJzaW9uLmgKKyAgICAgfCBsbiAtcyAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L25lYXJkLworICAgICAgIDAuMTQtcjAvbmVhcmQtMC4xNC9pbmNsdWRlL2RidXMuaCBpbmNsdWRlL25lYXIvZGJ1cy5oCisgICAgIHwgLi9zcmMvZ2VuYnVpbHRpbiBuZmN0eXBlMSBuZmN0eXBlMiBuZmN0eXBlMyBuZmN0eXBlNCBwMnAgPiBzcmMvYnVpbHRpbi5oCisgICAgIHwgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2LworICAgICAgIGJ1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2IC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuL2luY2x1ZGUgLUkuL3NyYyAtSS4vZ2RidXMgIC1JL2hvbWUvcG9reWJ1aWxkLworICAgICAgIHlvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2dsaWItMi4wCisgICAgICAgLUkvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8tc2xhdmUvbmlnaHRseS14ODYvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYvdXNyLworICAgICAgIGxpYi9nbGliLTIuMC9pbmNsdWRlICAtSS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS9uaWdodGx5LXg4Ni9idWlsZC9idWlsZC8KKyAgICAgICB0bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9kYnVzLTEuMCAtSS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by1zbGF2ZS8KKyAgICAgICBuaWdodGx5LXg4Ni9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvbGliL2RidXMtMS4wL2luY2x1ZGUgIC1JL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLworICAgICAgIHlvY3RvLXNsYXZlL25pZ2h0bHkteDg2L2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL2xpYm5sMworICAgICAgIC1ETkVBUl9QTFVHSU5fQlVJTFRJTiAtRFBMVUdJTkRJUj1cIiIvdXNyL2xpYi9uZWFyL3BsdWdpbnMiXCIKKyAgICAgICAtRENPTkZJR0RJUj1cIiIvZXRjL25lYXJkXCIiIC1PMiAtcGlwZSAtZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLWMKKyAgICAgICAtbyB0b29scy9zbmVwLXNlbmQubyB0b29scy9zbmVwLXNlbmQuYworICAgICB8IEluIGZpbGUgaW5jbHVkZWQgZnJvbSB0b29scy9zbmVwLXNlbmQuYzoxNjowOgorICAgICB8IHRvb2xzLy4uL3NyYy9uZWFyLmg6NDE6MjM6IGZhdGFsIGVycm9yOiBuZWFyL2RidXMuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICAgICB8ICAjaW5jbHVkZSAmbHQ7bmVhci9kYnVzLmgmZ3Q7CisgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgIHwgY29tcGlsYXRpb24gdGVybWluYXRlZC4KKyAgICAgfCBtYWtlWzFdOiAqKiogW3Rvb2xzL3NuZXAtc2VuZC5vXSBFcnJvciAxCisgICAgIHwgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KKyAgICAgfCBtYWtlOiAqKiogW2FsbF0gRXJyb3IgMgorICAgICB8IEVSUk9SOiBvZV9ydW5tYWtlIGZhaWxlZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZXByb2R1Y2luZy10aGUtZXJyb3InPgorICAgICAgICAgICAgPHRpdGxlPlJlcHJvZHVjaW5nIHRoZSBFcnJvcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgcmFjZSBjb25kaXRpb25zIGFyZSBpbnRlcm1pdHRlbnQsIHRoZXkgZG8gbm90CisgICAgICAgICAgICAgICAgbWFuaWZlc3QgdGhlbXNlbHZlcyBldmVyeSB0aW1lIHlvdSBkbyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgSW4gZmFjdCwgbW9zdCB0aW1lcyB0aGUgYnVpbGQgd2lsbCBjb21wbGV0ZSB3aXRob3V0IHByb2JsZW1zCisgICAgICAgICAgICAgICAgZXZlbiB0aG91Z2ggdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBleGlzdHMuCisgICAgICAgICAgICAgICAgVGh1cywgb25jZSB0aGUgZXJyb3Igc3VyZmFjZXMsIHlvdSBuZWVkIGEgd2F5IHRvIHJlcHJvZHVjZSBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCBjb21waWxpbmcgdGhlICJuZWFyZCIgcGFja2FnZSBpcyBjYXVzaW5nIHRoZQorICAgICAgICAgICAgICAgIHByb2JsZW0uCisgICAgICAgICAgICAgICAgU28gdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIGJ1aWxkICJuZWFyZCIgbG9jYWxseS4KKyAgICAgICAgICAgICAgICBCZWZvcmUgeW91IHN0YXJ0IHRoZSBidWlsZCwgc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0bworICAgICAgICAgICAgICAgIGEgaGlnaCBudW1iZXIgKGUuZy4gIi1qIDIwIikuCisgICAgICAgICAgICAgICAgVXNpbmcgYSBoaWdoIHZhbHVlIGZvciA8ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW5jcmVhc2VzIHRoZSBjaGFuY2VzIG9mIHRoZSByYWNlIGNvbmRpdGlvbiBzaG93aW5nIHVwOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG5lYXJkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHRoZSBsb2NhbCBidWlsZCBmb3IgIm5lYXJkIiBjb21wbGV0ZXMsIHN0YXJ0IGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBidWlsZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBuZWFyZCAtYyBkZXZzaGVsbAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGxhdGRldi1hcHBkZXYtZGV2c2hlbGwnPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgbWFrZSBjbGVhbgorICAgICAkIG1ha2UgdG9vbHMvc25lcC1zZW5kLm8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGNvbW1hbmRzIGNhdXNlIHRoZSBmYWlsdXJlCisgICAgICAgICAgICAgICAgdG8gY2xlYXJseSBiZSB2aXNpYmxlLgorICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYSBtaXNzaW5nIGRlcGVuZGVuY3kgZXhpc3RzIGZvciB0aGUgIm5lYXJkIgorICAgICAgICAgICAgICAgIE1ha2VmaWxlIHRhcmdldC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHNvbWUgYWJicmV2aWF0ZWQsIHNhbXBsZSBvdXRwdXQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBtaXNzaW5nIGRlcGVuZGVuY3kgY2xlYXJseSB2aXNpYmxlIGF0IHRoZSBlbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS9zY290dC1sZW5vdm8vLi4uLi4uCisgICAgICAgIC4KKyAgICAgICAgLgorICAgICAgICAuCisgICAgIHRvb2xzL3NuZXAtc2VuZC5jCisgICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSB0b29scy9zbmVwLXNlbmQuYzoxNjowOgorICAgICB0b29scy8uLi9zcmMvbmVhci5oOjQxOjIzOiBmYXRhbCBlcnJvcjogbmVhci9kYnVzLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgICAgICNpbmNsdWRlICZsdDtuZWFyL2RidXMuaCZndDsKKyAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorICAgICBtYWtlOiAqKiogW3Rvb2xzL3NuZXAtc2VuZC5vXSBFcnJvciAxCisgICAgICQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY3JlYXRpbmctYS1wYXRjaC1mb3ItdGhlLWZpeCc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgYSBQYXRjaCBmb3IgdGhlIEZpeDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlcmUgaXMgYSBtaXNzaW5nIGRlcGVuZGVuY3kgZm9yIHRoZSBNYWtlZmlsZQorICAgICAgICAgICAgICAgIHRhcmdldCwgeW91IG5lZWQgdG8gcGF0Y2ggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+TWFrZWZpbGUuaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBRdWlsdCB0byBjcmVhdGUgdGhlIHBhdGNoOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBxdWlsdCBuZXcgcGFyYWxsZWxtYWtlLnBhdGNoCisgICAgIFBhdGNoIHBhdGNoZXMvcGFyYWxsZWxtYWtlLnBhdGNoIGlzIG5vdyBvbiB0b3AKKyAgICAgJCBxdWlsdCBhZGQgTWFrZWZpbGUuYW0KKyAgICAgRmlsZSBNYWtlZmlsZS5hbSBhZGRlZCB0byBwYXRjaCBwYXRjaGVzL3BhcmFsbGVsbWFrZS5wYXRjaAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBRdWlsdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50IHlvdSBuZWVkIHRvIG1ha2UgdGhlIGVkaXRzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLmFtPC9maWxlbmFtZT4gdG8gYWRkIHRoZSBtaXNzaW5nCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICBGb3Igb3VyIGV4YW1wbGUsIHlvdSBoYXZlIHRvIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUKKyAgICAgICAgICAgICAgICB0byB0aGUgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRvb2xzL3NuZXAtc2VuZC4kKE9CSkVYVCk6IGluY2x1ZGUvbmVhci9kYnVzLmgKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgZWRpdGVkIHRoZSBmaWxlLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlZnJlc2g8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgcGF0Y2g6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IHJlZnJlc2gKKyAgICAgUmVmcmVzaGVkIHBhdGNoIHBhdGNoZXMvcGFyYWxsZWxtYWtlLnBhdGNoCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2UgdGhlIHBhdGNoIGZpbGUgZXhpc3RzLCB5b3UgbmVlZCB0byBhZGQgaXQgYmFjayB0byB0aGUKKyAgICAgICAgICAgICAgICBvcmlnaW5hdGluZyByZWNpcGUgZm9sZGVyLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhc3N1bWluZyBhIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY3AgcGF0Y2hlcy9wYXJhbGxlbG1ha2UucGF0Y2ggcG9reS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCB0aGluZyB5b3UgbmVlZCB0byBkbyB0byBpbXBsZW1lbnQgdGhlIGZpeCBpbiB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBpcyB0byB1cGRhdGUgdGhlICJuZWFyZCIgcmVjaXBlIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5lYXJkLTAuMTQuYmI8L2ZpbGVuYW1lPikgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluY2x1ZGVzIHRoZSBwYXRjaCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgZmlsZSBpcyBpbiB0aGUgZm9sZGVyIGFib3ZlIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIHdoYXQgdGhlIGVkaXRlZCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IHdvdWxkIGxvb2sgbGlrZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9uZXR3b3JrL25mYy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vbmVhcmQuaW4gXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWxtYWtlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGggdGhlIHBhdGNoIGNvbXBsZXRlIGFuZCBtb3ZlZCB0byB0aGUgY29ycmVjdCBmb2xkZXIgYW5kCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gc3RhdGVtZW50IHVwZGF0ZWQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICBleGl0IHRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZXhpdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0ZXN0aW5nLXRoZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+VGVzdGluZyB0aGUgQnVpbGQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoIGV2ZXJ5dGhpbmcgaW4gcGxhY2UsIHlvdSBjYW4gZ2V0IGJhY2sgdG8gdHJ5aW5nIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluIGxvY2FsbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbmVhcmQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBidWlsZCBzaG91bGQgc3VjY2VlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm93IHlvdSBjYW4gb3BlbiB1cCBhIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IGFnYWluCisgICAgICAgICAgICAgICAgYW5kIHJlcGVhdCB0aGUgY2xlYW4gYW5kIG1ha2Ugb3BlcmF0aW9ucyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG5lYXJkIC1jIGRldnNoZWxsCisgICAgICQgbWFrZSBjbGVhbgorICAgICAkIG1ha2UgdG9vbHMvc25lcC1zZW5kLm8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHNob3VsZCB3b3JrIHdpdGhvdXQgaXNzdWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHdpdGggYWxsIHNvbHZlZCBwcm9ibGVtcywgaWYgdGhleSBvcmlnaW5hdGVkIHVwc3RyZWFtLCB5b3UKKyAgICAgICAgICAgICAgICBuZWVkIHRvIHN1Ym1pdCB0aGUgZml4IGZvciB0aGUgcmVjaXBlIGluIE9FLUNvcmUgYW5kIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgc28gdGhhdCB0aGUgcHJvYmxlbSBpcyB0YWtlbiBjYXJlIG9mIGF0IGl0cyBzb3VyY2UuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUiPgorICAgICAgICA8dGl0bGU+UHJvZmlsaW5nIHdpdGggT1Byb2ZpbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC8iPk9Qcm9maWxlPC91bGluaz4gaXMgYQorICAgICAgICAgICAgc3RhdGlzdGljYWwgcHJvZmlsZXIgd2VsbCBzdWl0ZWQgZm9yIGZpbmRpbmcgcGVyZm9ybWFuY2UKKyAgICAgICAgICAgIGJvdHRsZW5lY2tzIGluIGJvdGggdXNlci1zcGFjZSBzb2Z0d2FyZSBhbmQgaW4gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIFRoaXMgcHJvZmlsZXIgcHJvdmlkZXMgYW5zd2VycyB0byBxdWVzdGlvbnMgbGlrZSAiV2hpY2ggZnVuY3Rpb25zIGRvZXMgbXkgYXBwbGljYXRpb24gc3BlbmQKKyAgICAgICAgICAgIHRoZSBtb3N0IHRpbWUgaW4gd2hlbiBkb2luZyBYPyIKKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgd2VsbCBpbnRlZ3JhdGVkIHdpdGggT1Byb2ZpbGUsIGl0IG1ha2VzIHByb2ZpbGluZworICAgICAgICAgICAgYXBwbGljYXRpb25zIG9uIHRhcmdldCBoYXJkd2FyZSBzdHJhaWdodCBmb3J3YXJkLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCBhbmQgcnVuIE9Qcm9maWxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyNwcm9maWxlLW1hbnVhbC1vcHJvZmlsZSc+b3Byb2ZpbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHVzZSBPUHJvZmlsZSwgeW91IG5lZWQgYW4gaW1hZ2UgdGhhdCBoYXMgT1Byb2ZpbGUgaW5zdGFsbGVkLgorICAgICAgICAgICAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAidG9vbHMtcHJvZmlsZSIgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0ZFQVRVUkVTJz5JTUFHRV9GRUFUVVJFUzwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBZb3UgYWxzbyBuZWVkIGRlYnVnZ2luZyBzeW1ib2xzIHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtIHdoZXJlIHRoZSBhbmFseXNpcworICAgICAgICAgICAgdGFrZXMgcGxhY2UuCisgICAgICAgICAgICBZb3UgY2FuIGdhaW4gYWNjZXNzIHRvIHRoZSBzeW1ib2xzIGJ5IHVzaW5nICJkYmctcGtncyIgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBvciBieQorICAgICAgICAgICAgaW5zdGFsbGluZyB0aGUgYXBwcm9wcmlhdGUgZGVidWcgKDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4pCisgICAgICAgICAgICBwYWNrYWdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHN1Y2Nlc3NmdWwgY2FsbCBncmFwaCBhbmFseXNpcywgdGhlIGJpbmFyaWVzIG11c3QgcHJlc2VydmUgdGhlIGZyYW1lCisgICAgICAgICAgICBwb2ludGVyIHJlZ2lzdGVyIGFuZCBzaG91bGQgYWxzbyBiZSBjb21waWxlZCB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi1mbm8tb21pdC1mcmFtZXBvaW50ZXI8L2ZpbGVuYW1lPiBmbGFnLgorICAgICAgICAgICAgWW91IGNhbiBhY2hpZXZlIHRoaXMgYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU0VMRUNURURfT1BUSU1JWkFUSU9OJz5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L3VsaW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucworICAgICAtZm5vLW9taXQtZnJhbWVwb2ludGVyCisgICAgIC1mcmVuYW1lLXJlZ2lzdGVycworICAgICAtTzIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBhY2hpZXZlIGl0IGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURFQlVHX0JVSUxEJz5ERUJVR19CVUlMRDwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICBJZiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+REVCVUdfQlVJTEQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSwKKyAgICAgICAgICAgIHlvdSBhbHNvIGFkZCBleHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCBjYW4gbWFrZSB0aGUgZGVidWcKKyAgICAgICAgICAgIHBhY2thZ2VzIGxhcmdlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtdGFyZ2V0Ij4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm9maWxpbmcgb24gdGhlIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIE9Qcm9maWxlLCB5b3UgY2FuIHBlcmZvcm0gYWxsIHRoZSBwcm9maWxpbmcgd29yayBvbiB0aGUgdGFyZ2V0IGRldmljZS4KKyAgICAgICAgICAgICAgICBBIHNpbXBsZSBPUHJvZmlsZSBzZXNzaW9uIG1pZ2h0IGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgb3Bjb250cm9sIC0tcmVzZXQKKyAgICAgIyBvcGNvbnRyb2wgLS1zdGFydCAtLXNlcGFyYXRlPWxpYiAtLW5vLXZtbGludXggLWMgNQorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgICAgW2RvIHdoYXRldmVyIGlzIGJlaW5nIHByb2ZpbGVkXQorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgIyBvcGNvbnRyb2wgLS1zdG9wCisgICAgICQgb3ByZXBvcnQgLWNsCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+cmVzZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNsZWFycyBhbnkgcHJldmlvdXNseSBwcm9maWxlZCBkYXRhLgorICAgICAgICAgICAgICAgIFRoZSBuZXh0IGNvbW1hbmQgc3RhcnRzIE9Qcm9maWxlLgorICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHVzZWQgd2hlbiBzdGFydGluZyB0aGUgcHJvZmlsZXIgc2VwYXJhdGUgZHluYW1pYyBsaWJyYXJ5IGRhdGEKKyAgICAgICAgICAgICAgICB3aXRoaW4gYXBwbGljYXRpb25zLCBkaXNhYmxlIGtlcm5lbCBwcm9maWxpbmcsIGFuZCBlbmFibGUgY2FsbGdyYXBoaW5nIHVwIHRvCisgICAgICAgICAgICAgICAgZml2ZSBsZXZlbHMgZGVlcC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gcHJvZmlsZSB0aGUga2VybmVsLCB5b3Ugd291bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tdm1saW51eD0vcGF0aC90by92bWxpbnV4PC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPiBmaWxlIGlzIHVzdWFsbHkgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYm9vdC88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kIG11c3QgbWF0Y2ggdGhlIHJ1bm5pbmcga2VybmVsLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWZ0ZXIgeW91IHBlcmZvcm0geW91ciBwcm9maWxpbmcgdGFza3MsIHRoZSBuZXh0IGNvbW1hbmQgc3RvcHMgdGhlIHByb2ZpbGVyLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoYXQsIHlvdSBjYW4gdmlldyByZXN1bHRzIHdpdGggdGhlIDxmaWxlbmFtZT5vcHJlcG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQgd2l0aCBvcHRpb25zCisgICAgICAgICAgICAgICAgdG8gc2VlIHRoZSBzZXBhcmF0ZSBsaWJyYXJ5IHN5bWJvbHMgYW5kIGNhbGxncmFwaCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQ2FsbGdyYXBoaW5nIGxvZ3MgaW5mb3JtYXRpb24gYWJvdXQgdGltZSBzcGVudCBpbiBmdW5jdGlvbnMgYW5kIGFib3V0IGEgZnVuY3Rpb24ncworICAgICAgICAgICAgICAgIGNhbGxpbmcgZnVuY3Rpb24gKHBhcmVudCkgYW5kIGNhbGxlZCBmdW5jdGlvbnMgKGNoaWxkcmVuKS4KKyAgICAgICAgICAgICAgICBUaGUgaGlnaGVyIHRoZSBjYWxsZ3JhcGhpbmcgZGVwdGgsIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSByZXN1bHRzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGhpZ2hlciBkZXB0aHMgYWxzbyBpbmNyZWFzZSB0aGUgbG9nZ2luZyBvdmVyaGVhZC4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgdGFrZSBjYXJlIHdoZW4gc2V0dGluZyB0aGUgY2FsbGdyYXBoaW5nIGRlcHRoLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBPbiBBUk0sIGJpbmFyaWVzIG5lZWQgdG8gaGF2ZSB0aGUgZnJhbWUgcG9pbnRlciBlbmFibGVkIGZvciBjYWxsZ3JhcGhpbmcgdG8gd29yay4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzIHVzZSB0aGUgPGZpbGVuYW1lPi1mbm8tb21pdC1mcmFtZXBvaW50ZXI8L2ZpbGVuYW1lPiBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgd2l0aCA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBPUHJvZmlsZSwgc2VlIHRoZSBPUHJvZmlsZQorICAgICAgICAgICAgICAgIG9ubGluZSBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iaHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9kb2NzLyIvPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJwbGF0ZGV2LW9wcm9maWxlLW9wcm9maWxldWkiPgorICAgICAgICAgICAgPHRpdGxlPlVzaW5nIE9Qcm9maWxlVUk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgT1Byb2ZpbGUgaXMgYWxzbyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBkb3dubG9hZCBhbmQgYnVpbGQgdGhpcyBpbnRlcmZhY2UgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9vcHJvZmlsZXVpLyI+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSWYgdGhlICJ0b29scy1wcm9maWxlIiBpbWFnZSBmZWF0dXJlIGlzIHNlbGVjdGVkLCBhbGwgbmVjZXNzYXJ5IGJpbmFyaWVzCisgICAgICAgICAgICAgICAgYXJlIGluc3RhbGxlZCBvbnRvIHRoZSB0YXJnZXQgZGV2aWNlIGZvciBPUHJvZmlsZVVJIGludGVyYWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgaW1hZ2UgZmVhdHVyZXMgdGhhdCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtZmVhdHVyZXMtaW1hZ2UnPkltYWdlIEZlYXR1cmVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgc291cmNlIGRpcmVjdG9yeSB1c3VhbGx5IGluY2x1ZGVzIGFsbCBuZWVkZWQgcGF0Y2hlcyBvbiB0aGUgdGFyZ2V0IGRldmljZSwgeW91CisgICAgICAgICAgICAgICAgbWlnaHQgZmluZCB5b3UgbmVlZCBvdGhlciBPUHJvZmlsZSBwYXRjaGVzIGZvciByZWNlbnQgT1Byb2ZpbGVVSSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICBJZiBzbywgc2VlIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvb3Byb2ZpbGV1aS90cmVlL1JFQURNRSc+CisgICAgICAgICAgICAgICAgT1Byb2ZpbGVVSSBSRUFETUU8L3VsaW5rPiBmb3IgdGhlIG1vc3QgcmVjZW50IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0icGxhdGRldi1vcHJvZmlsZS1vcHJvZmlsZXVpLW9ubGluZSI+CisgICAgICAgICAgICAgICAgPHRpdGxlPk9ubGluZSBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2luZyBPUHJvZmlsZSBpbiBvbmxpbmUgbW9kZSBhc3N1bWVzIGEgd29ya2luZyBuZXR3b3JrIGNvbm5lY3Rpb24gd2l0aCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoaXMgY29ubmVjdGlvbiwgeW91IGp1c3QgbmVlZCB0byBydW4gIm9wcm9maWxlLXNlcnZlciIgb24gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgT1Byb2ZpbGUgbGlzdGVucyBvbiBwb3J0IDQyMjQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlIHBvcnQgdXNpbmcgdGhlIDxmaWxlbmFtZT4tLXBvcnQ8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2xpZW50IHByb2dyYW0gaXMgY2FsbGVkIDxmaWxlbmFtZT5vcHJvZmlsZS12aWV3ZXI8L2ZpbGVuYW1lPiBhbmQgaXRzIFVJIGlzIHJlbGF0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgc3RyYWlnaHQgZm9yd2FyZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGFjY2VzcyBrZXkgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHRoZSBidXR0b25zIG9uIHRoZSB0b29sYmFyLCB3aGljaAorICAgICAgICAgICAgICAgICAgICBhcmUgZHVwbGljYXRlZCBpbiB0aGUgbWVudXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBidXR0b25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25uZWN0OjwvZW1waGFzaXM+IENvbm5lY3RzIHRvIHRoZSByZW1vdGUgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gc3VwcGx5IHRoZSBJUCBhZGRyZXNzIG9yIGhvc3RuYW1lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EaXNjb25uZWN0OjwvZW1waGFzaXM+IERpc2Nvbm5lY3RzIGZyb20gdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQ6PC9lbXBoYXNpcz4gU3RhcnRzIHByb2ZpbGluZyBvbiB0aGUgZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdG9wOjwvZW1waGFzaXM+IFN0b3BzIHByb2ZpbGluZyBvbiB0aGUgZGV2aWNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkcyB0aGUgZGF0YSB0byB0aGUgbG9jYWwgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9wcGluZyB0aGUgcHJvZmlsZXIgZ2VuZXJhdGVzIHRoZSBwcm9maWxlIGFuZCBkaXNwbGF5cyBpdCBpbiB0aGUgdmlld2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZDo8L2VtcGhhc2lzPiBEb3dubG9hZHMgdGhlIGRhdGEgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYW5kIGdlbmVyYXRlcyB0aGUgcHJvZmlsZSwgd2hpY2ggYXBwZWFycyBpbiB0aGUgdmlld2VyLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZXNldDo8L2VtcGhhc2lzPiBSZXNldHMgdGhlIHNhbXBsZSBkYXRhIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXR0aW5nIHRoZSBkYXRhIHJlbW92ZXMgc2FtcGxlIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBmcm9tIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmcgcnVucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdSByZXNldCB0aGUgZGF0YSBpZiB5b3UgZG8gbm90IHdhbnQgdG8gaW5jbHVkZSBvbGQgc2FtcGxlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TYXZlOjwvZW1waGFzaXM+IFNhdmVzIHRoZSBkYXRhIGRvd25sb2FkZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdG8gYW5vdGhlciBkaXJlY3RvcnkgZm9yIGxhdGVyIGV4YW1pbmF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5PcGVuOjwvZW1waGFzaXM+IExvYWRzIHByZXZpb3VzbHkgc2F2ZWQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjbGllbnQgZG93bmxvYWRzIHRoZSBjb21wbGV0ZSBwcm9maWxlIGFyY2hpdmUgZnJvbQorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHRvIHRoZSBob3N0IGZvciBwcm9jZXNzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyY2hpdmUgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc2FtcGxlIGRhdGEsIHRoZSBvYmplY3QgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yIHRoZSBvYmplY3QgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXZlIGlzIHRoZW4gY29udmVydGVkIHVzaW5nIHRoZSA8ZmlsZW5hbWU+b3BhcmNoY29udjwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgdXNlcyA8ZmlsZW5hbWU+b3BpbXBvcnQ8L2ZpbGVuYW1lPiB0byBjb252ZXJ0IHRoZSBhcmNoaXZlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCB0byBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEb3dubG9hZGVkIGFyY2hpdmVzIHJlc2lkZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPiBhbmQgYXJlIGNsZWFyZWQgdXAgd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgaW4gdXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBwZXJmb3JtIGtlcm5lbCBwcm9maWxpbmcsIHlvdSBuZWVkIHRvIGJlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+dm1saW51eDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBtYXRjaGVzIHRoZSBydW5uaW5nIGtlcm5lbCBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCB0aGF0IGZpbGUgaXMgdXN1YWxseSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYm9vdC92bWxpbnV4LTxyZXBsYWNlYWJsZT5rZXJuZWx2ZXJzaW9uPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiwgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5rZXJuZWx2ZXJzaW9uPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgc2VwYXJhdGUgPGZpbGVuYW1lPnZtbGludXg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBmb3IgZWFjaCBrZXJuZWwgaXQgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCBpdCBzaG91bGQganVzdCBiZSBhIHF1ZXN0aW9uIG9mIG1ha2luZyBzdXJlIGEgbWF0Y2hpbmcgcGFja2FnZSBpcworICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgKGUuZy4gPGZpbGVuYW1lPm9wa2cgaW5zdGFsbCBrZXJuZWwtdm1saW51eDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBpbnRvIGRldmVsb3BtZW50IGFuZCBwcm9maWxpbmcgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGFsb25nc2lkZSBPUHJvZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQSBjb25maWd1cmF0aW9uIG9wdGlvbiBleGlzdHMgd2l0aGluIHRoZSBPUHJvZmlsZVVJIHNldHRpbmdzIHBhZ2UgdGhhdCB5b3UgY2FuIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBlbnRlciB0aGUgbG9jYXRpb24gb2YgdGhlIDxmaWxlbmFtZT52bWxpbnV4PC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2FpdGluZyBmb3IgZGVidWcgc3ltYm9scyB0byB0cmFuc2ZlciBmcm9tIHRoZSBkZXZpY2UgY2FuIGJlIHNsb3csIGFuZCBpdAorICAgICAgICAgICAgICAgICAgICBpcyBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSBoYXZlIHRoZW0gb24gdGhlIGRldmljZSBmb3IgT1Byb2ZpbGUgdXNlLgorICAgICAgICAgICAgICAgICAgICBBbGwgdGhhdCBpcyBuZWVkZWQgaXMgYSBjb3B5IG9mIHRoZSBmaWxlc3lzdGVtIHdpdGggdGhlIGRlYnVnIHN5bWJvbHMgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgdmlld2VyIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlICI8bGluayBsaW5rZW5kPSdwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zy1sYXVuY2gtZ2RiJz5MYXVuY2ggR0RCIG9uIHRoZSBIb3N0IENvbXB1dGVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBjb3ZlcnMgaG93IHRvIGNyZWF0ZSBzdWNoIGEgZGlyZWN0b3J5IHdpdGhpbgorICAgICAgICAgICAgICAgICAgICB0aGUgc291cmNlIGRpcmVjdG9yeSBhbmQgaG93IHRvIHVzZSB0aGUgT1Byb2ZpbGVVSSBTZXR0aW5ncworICAgICAgICAgICAgICAgICAgICBEaWFsb2cgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IHRoZSBkaXJlY3RvcnksIGl0IHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBmaWxlIGNoZWNrc3VtcworICAgICAgICAgICAgICAgICAgICBtYXRjaCB0aG9zZSBvbiB0aGUgc3lzdGVtIHlvdSBhcmUgcHJvZmlsaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9InBsYXRkZXYtb3Byb2ZpbGUtb3Byb2ZpbGV1aS1vZmZsaW5lIj4KKyAgICAgICAgICAgICAgICA8dGl0bGU+T2ZmbGluZSBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBuZXR3b3JrIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGlzIHVuYXZhaWxhYmxlLCB5b3UgY2FuIGdlbmVyYXRlCisgICAgICAgICAgICAgICAgICAgIGFuIGFyY2hpdmUgZm9yIHByb2Nlc3NpbmcgaW4gPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBvcGNvbnRyb2wgLS1yZXNldAorICAgICAjIG9wY29udHJvbCAtLXN0YXJ0IC0tc2VwYXJhdGU9bGliIC0tbm8tdm1saW51eCAtYyA1CisgICAgICAgICAgICAuCisgICAgICAgICAgICAuCisgICAgIFtkbyB3aGF0ZXZlciBpcyBiZWluZyBwcm9maWxlZF0KKyAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4KKyAgICAgIyBvcGNvbnRyb2wgLS1zdG9wCisgICAgICMgb3BhcmNoaXZlIC1vIG15X2FyY2hpdmUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPm15X2FyY2hpdmU8L2ZpbGVuYW1lPiBpcyB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdvdWxkIGxpa2UgdGhlIHByb2ZpbGUgYXJjaGl2ZSB0byBiZSBrZXB0LgorICAgICAgICAgICAgICAgICAgICBBZnRlciB0aGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdSBjYW4gY29weSBpdCB0byBhbm90aGVyIGhvc3QgYW5kIGxvYWQgaXQKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IG9wZW4gZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgSWYgbmVjZXNzYXJ5LCB0aGUgYXJjaGl2ZSBpcyBjb252ZXJ0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPgorICAgICAgICA8dGl0bGU+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25lIG9mIHRoZSBjb25jZXJucyBmb3IgYSBkZXZlbG9wbWVudCBvcmdhbml6YXRpb24gdXNpbmcgb3BlbiBzb3VyY2UKKyAgICAgICAgICAgIHNvZnR3YXJlIGlzIGhvdyB0byBtYWludGFpbiBjb21wbGlhbmNlIHdpdGggdmFyaW91cyBvcGVuIHNvdXJjZQorICAgICAgICAgICAgbGljZW5zaW5nIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBwcm9kdWN0LgorICAgICAgICAgICAgV2hpbGUgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHByb3ZpZGUgbGVnYWwgYWR2aWNlIG9yCisgICAgICAgICAgICBjb21wcmVoZW5zaXZlbHkgY292ZXIgYWxsIHNjZW5hcmlvcywgaXQgZG9lcworICAgICAgICAgICAgcHJlc2VudCBtZXRob2RzIHRoYXQgeW91IGNhbiB1c2UgdG8KKyAgICAgICAgICAgIGFzc2lzdCB5b3UgaW4gbWVldGluZyB0aGUgY29tcGxpYW5jZSByZXF1aXJlbWVudHMgZHVyaW5nIGEgc29mdHdhcmUKKyAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdpdGggaHVuZHJlZHMgb2YgZGlmZmVyZW50IG9wZW4gc291cmNlIGxpY2Vuc2VzIHRoYXQgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IHRyYWNrcywgaXQgaXMgZGlmZmljdWx0IHRvIGtub3cgdGhlIHJlcXVpcmVtZW50cyBvZiBlYWNoCisgICAgICAgICAgICBhbmQgZXZlcnkgbGljZW5zZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIG1ham9yIEZMT1NTIGxpY2Vuc2VzIGNhbiBiZWdpbgorICAgICAgICAgICAgdG8gYmUgY292ZXJlZCBieQorICAgICAgICAgICAgYXNzdW1pbmcgdGhhdCB0aHJlZSBtYWluIGFyZWFzIG9mIGNvbmNlcm4gZXhpc3Q6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Tb3VyY2UgY29kZSBtdXN0IGJlIHByb3ZpZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5MaWNlbnNlIHRleHQgZm9yIHRoZSBzb2Z0d2FyZSBtdXN0IGJlCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21waWxhdGlvbiBzY3JpcHRzIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgY29kZSBtdXN0IGJlIHByb3ZpZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgVGhlcmUgYXJlIG90aGVyIHJlcXVpcmVtZW50cyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoZXNlCisgICAgICAgICAgICB0aHJlZSBhbmQgdGhlIG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbgorICAgICAgICAgICAgKGUuZy4gdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkKS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZGlmZmVyZW50IG9yZ2FuaXphdGlvbnMgaGF2ZSBkaWZmZXJlbnQgbWV0aG9kcyBvZiBjb21wbHlpbmcgd2l0aAorICAgICAgICAgICAgb3BlbiBzb3VyY2UgbGljZW5zaW5nLCB0aGlzIHNlY3Rpb24gaXMgbm90IG1lYW50IHRvIGltcGx5IHRoYXQKKyAgICAgICAgICAgIHRoZXJlIGlzIG9ubHkgb25lIHNpbmdsZSB3YXkgdG8gbWVldCB5b3VyIGNvbXBsaWFuY2Ugb2JsaWdhdGlvbnMsCisgICAgICAgICAgICBidXQgcmF0aGVyIHRvIGRlc2NyaWJlIG9uZSBtZXRob2Qgb2YgYWNoaWV2aW5nIGNvbXBsaWFuY2UuCisgICAgICAgICAgICBUaGUgcmVtYWluZGVyIG9mIHRoaXMgc2VjdGlvbiBkZXNjcmliZXMgbWV0aG9kcyBzdXBwb3J0ZWQgdG8gbWVldCB0aGUKKyAgICAgICAgICAgIHByZXZpb3VzbHkgbWVudGlvbmVkIHRocmVlIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIE9uY2UgeW91IHRha2Ugc3RlcHMgdG8gbWVldCB0aGVzZSByZXF1aXJlbWVudHMsCisgICAgICAgICAgICBhbmQgcHJpb3IgdG8gcmVsZWFzaW5nIGltYWdlcywgc291cmNlcywgYW5kIHRoZSBidWlsZCBzeXN0ZW0sCisgICAgICAgICAgICB5b3Ugc2hvdWxkIGF1ZGl0IGFsbCBhcnRpZmFjdHMgdG8gZW5zdXJlIGNvbXBsZXRlbmVzcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGdlbmVyYXRlcyBhIGxpY2Vuc2UgbWFuaWZlc3QgZHVyaW5nCisgICAgICAgICAgICAgICAgaW1hZ2UgY3JlYXRpb24gdGhhdCBpcyBsb2NhdGVkCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vbGljZW5zZXMvPHJlcGxhY2VhYmxlPmltYWdlX25hbWUtZGF0ZXN0YW1wPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHRvIGFzc2lzdCB3aXRoIGFueSBhdWRpdHMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncHJvdmlkaW5nLXRoZS1zb3VyY2UtY29kZSc+CisgICAgICAgICAgICA8dGl0bGU+UHJvdmlkaW5nIHRoZSBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbXBsaWFuY2UgYWN0aXZpdGllcyBzaG91bGQgYmVnaW4gYmVmb3JlIHlvdSBnZW5lcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgeW91IHNob3VsZCBsb29rIGF0IGlzIHRoZSByZXF1aXJlbWVudCB0aGF0CisgICAgICAgICAgICAgICAgdG9wcyB0aGUgbGlzdCBmb3IgbW9zdCBjb21wbGlhbmNlIGdyb3VwcyAtIHByb3ZpZGluZworICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaGFzIGEgZmV3IHdheXMgb2YgbWVldGluZyB0aGlzCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSBvZiB0aGUgZWFzaWVzdCB3YXlzIHRvIG1lZXQgdGhpcyByZXF1aXJlbWVudCBpcworICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgdGhlIGVudGlyZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdXNlZCBieSB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QsIGhvd2V2ZXIsIGhhcyBhIGZldyBpc3N1ZXMuCisgICAgICAgICAgICAgICAgVGhlIG1vc3Qgb2J2aW91cyBpcyB0aGUgc2l6ZSBvZiB0aGUgZGlyZWN0b3J5IHNpbmNlIGl0IGluY2x1ZGVzCisgICAgICAgICAgICAgICAgYWxsIHNvdXJjZXMgdXNlZCBpbiB0aGUgYnVpbGQgYW5kIG5vdCBqdXN0IHRoZSBzb3VyY2UgdXNlZCBpbgorICAgICAgICAgICAgICAgIHRoZSByZWxlYXNlZCBpbWFnZS4KKyAgICAgICAgICAgICAgICBJdCB3aWxsIGluY2x1ZGUgdG9vbGNoYWluIHNvdXJjZSwgYW5kIG90aGVyIGFydGlmYWN0cywgd2hpY2gKKyAgICAgICAgICAgICAgICB5b3Ugd291bGQgbm90IGdlbmVyYWxseSByZWxlYXNlLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBtb3JlIHNlcmlvdXMgaXNzdWUgZm9yIG1vc3QgY29tcGFuaWVzIGlzIGFjY2lkZW50YWwKKyAgICAgICAgICAgICAgICByZWxlYXNlIG9mIHByb3ByaWV0YXJ5IHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcyB0byBoZWxwIGF2b2lkIHNvbWUgb2YgdGhlc2UgY29uY2VybnMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlZm9yZSB5b3UgZW1wbG95IDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBvciB0aGUKKyAgICAgICAgICAgICAgICBhcmNoaXZlciBjbGFzcywgeW91IG5lZWQgdG8gZGVjaWRlIGhvdyB5b3UgY2hvb3NlIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBzb3VyY2UuCisgICAgICAgICAgICAgICAgVGhlIHNvdXJjZSBhcmNoaXZlciBjbGFzcyBjYW4gZ2VuZXJhdGUgdGFyYmFsbHMgYW5kIFNSUE1zCisgICAgICAgICAgICAgICAgYW5kIGNhbiBjcmVhdGUgdGhlbSB3aXRoIHZhcmlvdXMgbGV2ZWxzIG9mIGNvbXBsaWFuY2UgaW4gbWluZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHdheSBvZiBkb2luZyB0aGlzIChidXQgY2VydGFpbmx5IG5vdCB0aGUgb25seSB3YXkpIGlzIHRvCisgICAgICAgICAgICAgICAgcmVsZWFzZSBqdXN0IHRoZSBzb3VyY2UgYXMgYSB0YXJiYWxsLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gdGhpcyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAiYXJjaGl2ZXIiCisgICAgIEFSQ0hJVkVSX01PREVbc3JjXSA9ICJvcmlnaW5hbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBjcmVhdGlvbiBvZiB5b3VyIGltYWdlLCB0aGUgc291cmNlIGZyb20gYWxsCisgICAgICAgICAgICAgICAgcmVjaXBlcyB0aGF0IGRlcGxveSBwYWNrYWdlcyB0byB0aGUgaW1hZ2UgaXMgcGxhY2VkIHdpdGhpbgorICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVIvc291cmNlczwvZmlsZW5hbWU+IGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSUNFTlNFJz48ZmlsZW5hbWU+TElDRU5TRTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3IgZWFjaCByZWNpcGUuCisgICAgICAgICAgICAgICAgUmVsZWFzaW5nIHRoZSBlbnRpcmUgZGlyZWN0b3J5IGVuYWJsZXMgeW91IHRvIGNvbXBseSB3aXRoCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIGNvbmNlcm5pbmcgcHJvdmlkaW5nIHRoZSB1bm1vZGlmaWVkIHNvdXJjZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBzaXplIG9mIHRoZSBkaXJlY3RvcnkgY2FuCisgICAgICAgICAgICAgICAgZ2V0IGxhcmdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIHdheSB0byBoZWxwIG1pdGlnYXRlIHRoZSBzaXplIGlzc3VlIGlzIHRvIG9ubHkgcmVsZWFzZQorICAgICAgICAgICAgICAgIHRhcmJhbGxzIGZvciBsaWNlbnNlcyB0aGF0IHJlcXVpcmUgdGhlIHJlbGVhc2Ugb2YKKyAgICAgICAgICAgICAgICBzb3VyY2UuCisgICAgICAgICAgICAgICAgTGV0IHVzIGFzc3VtZSB5b3UgYXJlIG9ubHkgY29uY2VybmVkIHdpdGggR1BMIGNvZGUgYXMKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVkIHdpdGggdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgcG9reS9idWlsZC90bXAvZGVwbG95L3NvdXJjZXMKKyAgICAgJCBta2RpciB+L2dwbF9zb3VyY2VfcmVsZWFzZQorICAgICAkIGZvciBkaXIgaW4gKi8qR1BMKjsgZG8gY3AgLXIgJGRpciB+L2dwbF9zb3VyY2VfcmVsZWFzZTsgZG9uZQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB5b3UgY291bGQgY3JlYXRlIGEgdGFyYmFsbCBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncGxfc291cmNlX3JlbGVhc2U8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYW5kCisgICAgICAgICAgICAgICAgcHJvdmlkZSB0aGF0IHRvIHRoZSBlbmQgdXNlci4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3VsZCBiZSBhIHN0ZXAgdG93YXJkIGFjaGlldmluZyBjb21wbGlhbmNlCisgICAgICAgICAgICAgICAgd2l0aCBzZWN0aW9uIDNhIG9mIEdQTHYyIGFuZCB3aXRoIHNlY3Rpb24gNiBvZiBHUEx2My4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctbGljZW5zZS10ZXh0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Qcm92aWRpbmcgTGljZW5zZSBUZXh0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHJlcXVpcmVtZW50IHRoYXQgaXMgb2Z0ZW4gb3Zlcmxvb2tlZCBpcyBpbmNsdXNpb24KKyAgICAgICAgICAgICAgICBvZiBsaWNlbnNlIHRleHQuCisgICAgICAgICAgICAgICAgVGhpcyByZXF1aXJlbWVudCBhbHNvIG5lZWRzIHRvIGJlIGRlYWx0IHdpdGggcHJpb3IgdG8KKyAgICAgICAgICAgICAgICBnZW5lcmF0aW5nIHRoZSBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBTb21lIGxpY2Vuc2VzIHJlcXVpcmUgdGhlIGxpY2Vuc2UgdGV4dCB0byBhY2NvbXBhbnkKKyAgICAgICAgICAgICAgICB0aGUgYmluYXJ5LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT1BZX0xJQ19NQU5JRkVTVCA9ICIxIgorICAgICBDT1BZX0xJQ19ESVJTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyB0aGVzZSBzdGF0ZW1lbnRzIHRvIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZW5zdXJlcworICAgICAgICAgICAgICAgIHRoYXQgdGhlIGxpY2Vuc2VzIGNvbGxlY3RlZCBkdXJpbmcgcGFja2FnZSBnZW5lcmF0aW9uCisgICAgICAgICAgICAgICAgYXJlIGluY2x1ZGVkIG9uIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgQXMgdGhlIHNvdXJjZSBhcmNoaXZlciBoYXMgYWxyZWFkeSBhcmNoaXZlZCB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB1bm1vZGlmaWVkIHNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSBsaWNlbnNlIGZpbGVzLAorICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBoYXZlIGFscmVhZHkgbWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIGluY2x1c2lvbgorICAgICAgICAgICAgICAgIG9mIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIHdpdGggc291cmNlIGFzIGRlZmluZWQgYnkgdGhlIEdQTAorICAgICAgICAgICAgICAgIGFuZCBvdGhlciBvcGVuIHNvdXJjZSBsaWNlbnNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwcm92aWRpbmctY29tcGlsYXRpb24tc2NyaXB0cy1hbmQtc291cmNlLWNvZGUtbW9kaWZpY2F0aW9ucyc+CisgICAgICAgICAgICA8dGl0bGU+UHJvdmlkaW5nIENvbXBpbGF0aW9uIFNjcmlwdHMgYW5kIFNvdXJjZSBDb2RlIE1vZGlmaWNhdGlvbnM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFkZHJlc3NlZCBhbGwgd2UgbmVlZCB0byBhZGRyZXNzCisgICAgICAgICAgICAgICAgcHJpb3IgdG8gZ2VuZXJhdGluZyB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhlIG5leHQgdHdvIHJlcXVpcmVtZW50cyBhcmUgYWRkcmVzc2VkIGR1cmluZyB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgb2YgdGhlIHJlbGVhc2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IHJlbGVhc2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGFuZCB0aGUgbGF5ZXJzIHVzZWQgZHVyaW5nIHRoZSBidWlsZCwgeW91IHdpbGwgYmUgcHJvdmlkaW5nIGJvdGgKKyAgICAgICAgICAgICAgICBjb21waWxhdGlvbiBzY3JpcHRzIGFuZCB0aGUgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9ucyBpbiBvbmUKKyAgICAgICAgICAgICAgICBzdGVwLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB0aGUgZGVwbG95bWVudCB0ZWFtIGhhcyBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIGxheWVyPC91bGluaz4KKyAgICAgICAgICAgICAgICBhbmQgYSBkaXN0cm8gbGF5ZXIsIGFuZCB0aG9zZSB0aG9zZSBsYXllcnMgYXJlIHVzZWQgdG8gcGF0Y2gsCisgICAgICAgICAgICAgICAgY29tcGlsZSwgcGFja2FnZSwgb3IgbW9kaWZ5IChpbiBhbnkgd2F5KSBhbnkgb3BlbiBzb3VyY2UKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSBpbmNsdWRlZCBpbiB5b3VyIHJlbGVhc2VkIGltYWdlcywgeW91CisgICAgICAgICAgICAgICAgbWlnaHQgYmUgcmVxdWlyZWQgdG8gdG8gcmVsZWFzZSB0aG9zZSBsYXllcnMgdW5kZXIgc2VjdGlvbiAzIG9mCisgICAgICAgICAgICAgICAgR1BMdjIgb3Igc2VjdGlvbiAxIG9mIEdQTHYzLgorICAgICAgICAgICAgICAgIE9uZSB3YXkgb2YgZG9pbmcgdGhhdCBpcyB3aXRoIGEgY2xlYW4KKyAgICAgICAgICAgICAgICBjaGVja291dCBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBhbmQgbGF5ZXJzIHVzZWQKKyAgICAgICAgICAgICAgICBkdXJpbmcgeW91ciBidWlsZC4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFdlIGJ1aWx0IHVzaW5nIHRoZSAmRElTVFJPX05BTUU7IGJyYW5jaCBvZiB0aGUgcG9reSByZXBvCisgICAgICQgZ2l0IGNsb25lIC1iICZESVNUUk9fTkFNRTsgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgIyBXZSBidWlsdCB1c2luZyB0aGUgcmVsZWFzZV9icmFuY2ggZm9yIG91ciBsYXllcnMKKyAgICAgJCBnaXQgY2xvbmUgLWIgcmVsZWFzZV9icmFuY2ggZ2l0Oi8vZ2l0Lm15Y29tcGFueS5jb20vbWV0YS1teS1ic3AtbGF5ZXIKKyAgICAgJCBnaXQgY2xvbmUgLWIgcmVsZWFzZV9icmFuY2ggZ2l0Oi8vZ2l0Lm15Y29tcGFueS5jb20vbWV0YS1teS1zb2Z0d2FyZS1sYXllcgorICAgICAjIGNsZWFuIHVwIHRoZSAuZ2l0IHJlcG9zCisgICAgICQgZmluZCAuIC1uYW1lICIuZ2l0IiAtdHlwZSBkIC1leGVjIHJtIC1yZiB7fSBcOworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbmUgdGhpbmcgYSBkZXZlbG9wbWVudCBvcmdhbml6YXRpb24gbWlnaHQgd2FudCB0byBjb25zaWRlcgorICAgICAgICAgICAgICAgIGZvciBlbmQtdXNlciBjb252ZW5pZW5jZSBpcyB0byBtb2RpZnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2JibGF5ZXJzLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICBlbnN1cmUgdGhhdCB3aGVuIHRoZSBlbmQgdXNlciB1dGlsaXplcyB0aGUgcmVsZWFzZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gYnVpbGQgYW4gaW1hZ2UsIHRoZSBkZXZlbG9wbWVudCBvcmdhbml6YXRpb24ncworICAgICAgICAgICAgICAgIGxheWVycyBhcmUgaW5jbHVkZWQgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIGF1dG9tYXRpY2FsbHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIExBWUVSX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorICAgICAjIGNoYW5nZXMgaW5jb21wYXRpYmx5CisgICAgIExDT05GX1ZFUlNJT04gPSAiNiIKKworICAgICBCQlBBVEggPSAiJHtUT1BESVJ9IgorICAgICBCQkZJTEVTID89ICIiCisKKyAgICAgQkJMQVlFUlMgPz0gIiBcCisgICAgICAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgICAgICAjI09FUk9PVCMjL21ldGEteW9jdG8gXAorICAgICAgICMjT0VST09UIyMvbWV0YS15b2N0by1ic3AgXAorICAgICAgICMjT0VST09UIyMvbWV0YS1teWxheWVyIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENyZWF0aW5nIGFuZCBwcm92aWRpbmcgYW4gYXJjaGl2ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+IGxheWVycworICAgICAgICAgICAgICAgIChyZWNpcGVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgc28gZm9ydGgpCisgICAgICAgICAgICAgICAgZW5hYmxlcyB5b3UgdG8gbWVldCB5b3VyCisgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnRzIHRvIGluY2x1ZGUgdGhlIHNjcmlwdHMgdG8gY29udHJvbCBjb21waWxhdGlvbgorICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtZXJyb3ItcmVwb3J0aW5nLXRvb2wnPgorICAgICAgICA8dGl0bGU+VXNpbmcgdGhlIEVycm9yIFJlcG9ydGluZyBUb29sPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBlcnJvciByZXBvcnRpbmcgdG9vbCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICBzdWJtaXQgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyBidWlsZHMgdG8gYSBjZW50cmFsIGRhdGFiYXNlLgorICAgICAgICAgICAgT3V0c2lkZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIHlvdSBjYW4gdXNlIGEgd2ViIGludGVyZmFjZSB0bworICAgICAgICAgICAgYnJvd3NlIGVycm9ycywgdmlldyBzdGF0aXN0aWNzLCBhbmQgcXVlcnkgZm9yIGVycm9ycy4KKyAgICAgICAgICAgIFRoZSB0b29sIHdvcmtzIHVzaW5nIGEgY2xpZW50LXNlcnZlciBzeXN0ZW0gd2hlcmUgdGhlIGNsaWVudAorICAgICAgICAgICAgcG9ydGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGluc3RhbGxlZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGUgc2VydmVyIHJlY2VpdmVzIHRoZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgYW5kIHNhdmVzIGl0IGluIGEKKyAgICAgICAgICAgIGRhdGFiYXNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGxpdmUgaW5zdGFuY2Ugb2YgdGhlIGVycm9yIHJlcG9ydGluZyBzZXJ2ZXIgZXhpc3RzIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgVGhpcyBzZXJ2ZXIgZXhpc3RzIHNvIHRoYXQgd2hlbiB5b3Ugd2FudCB0byBnZXQgaGVscCB3aXRoCisgICAgICAgICAgICBidWlsZCBmYWlsdXJlcywgeW91IGNhbiBzdWJtaXQgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgIGZhaWx1cmUgZWFzaWx5IGFuZCB0aGVuIHBvaW50IHRvIHRoZSBVUkwgaW4geW91ciBidWcgcmVwb3J0CisgICAgICAgICAgICBvciBzZW5kIGFuIGVtYWlsIHRvIHRoZSBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugc2VuZCBlcnJvciByZXBvcnRzIHRvIHRoaXMgc2VydmVyLCB0aGUgcmVwb3J0cyBiZWNvbWUKKyAgICAgICAgICAgICAgICBwdWJsaWNseSB2aXNpYmxlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2VuYWJsaW5nLWFuZC11c2luZy10aGUtdG9vbCc+CisgICAgICAgICAgICA8dGl0bGU+RW5hYmxpbmcgYW5kIFVzaW5nIHRoZSBUb29sPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sIGlzIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZW5hYmxlIGl0IGJ5IGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtcmVwb3J0LWVycm9yJz48ZmlsZW5hbWU+cmVwb3J0LWVycm9yPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mCisgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gInJlcG9ydC1lcnJvciIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBlcnJvciByZXBvcnRpbmcgZmVhdHVyZSBzdG9yZXMgaW5mb3JtYXRpb24gaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MT0dfRElSJz48ZmlsZW5hbWU+TE9HX0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fS9lcnJvci1yZXBvcnQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYSBkaXJlY3RvcnkgdG8gdXNlIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBFUlJfUkVQT1JUX0RJUiA9ICJwYXRoIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFbmFibGluZyBlcnJvciByZXBvcnRpbmcgY2F1c2VzIHRoZSBidWlsZCBwcm9jZXNzIHRvIGNvbGxlY3QKKyAgICAgICAgICAgICAgICB0aGUgZXJyb3JzIGFuZCBzdG9yZSB0aGVtIGluIGEgZmlsZSBhcyBwcmV2aW91c2x5IGRlc2NyaWJlZC4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBidWlsZCBzeXN0ZW0gZW5jb3VudGVycyBhbiBlcnJvciwgaXQgaW5jbHVkZXMgYQorICAgICAgICAgICAgICAgIGNvbW1hbmQgYXMgcGFydCBvZiB0aGUgY29uc29sZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlIGNvbW1hbmQgdG8gc2VuZCB0aGUgZXJyb3IgZmlsZSB0byB0aGUgc2VydmVyLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgc2VuZHMgdGhlIGVycm9ycyB0byBhbgorICAgICAgICAgICAgICAgIHVwc3RyZWFtIHNlcnZlcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2VuZC1lcnJvci1yZXBvcnQgL2hvbWUvYnJhbmR1c2EvcHJvamVjdC9wb2t5L2J1aWxkL3RtcC9sb2cvZXJyb3ItcmVwb3J0L2Vycm9yX3JlcG9ydF8yMDE0MDMxNDE2MTcudHh0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgZXJyb3JzIGFyZSBzZW50IHRvIGEgcHVibGljCisgICAgICAgICAgICAgICAgZGF0YWJhc2UgYXZhaWxhYmxlIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2Vycm9ycy55b2N0b3Byb2plY3Qub3JnJz48L3VsaW5rPiwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBlbnRpcmUgY29tbXVuaXR5LgorICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGEgcGFydGljdWxhciBzZXJ2ZXIsIHlvdSBjYW4gc2VuZCB0aGUgZXJyb3JzCisgICAgICAgICAgICAgICAgdG8gYSBkaWZmZXJlbnQgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBvcHRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzZW5kLWVycm9yLXJlcG9ydCAtLWhlbHAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gc2VuZGluZyB0aGUgZXJyb3IgZmlsZSwgeW91IGFyZSBwcm9tcHRlZCB0byByZXZpZXcgdGhlCisgICAgICAgICAgICAgICAgZGF0YSBiZWluZyBzZW50IGFzIHdlbGwgYXMgdG8gcHJvdmlkZSBhIG5hbWUgYW5kIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgZW1haWwgYWRkcmVzcy4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBzYXRpc2Z5IHRoZXNlIHByb21wdHMsIHRoZSBjb21tYW5kIHJldHVybnMgYSBsaW5rCisgICAgICAgICAgICAgICAgZnJvbSB0aGUgc2VydmVyIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBlbnRyeSBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGhlcmUgaXMgYSB0eXBpY2FsIGxpbms6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vZXJyb3JzLnlvY3RvcHJvamVjdC5vcmcvRXJyb3JzL0RldGFpbHMvOTUyMi8KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIHRoZSBsaW5rIHRha2VzIHlvdSB0byBhIHdlYiBpbnRlcmZhY2Ugd2hlcmUgeW91IGNhbgorICAgICAgICAgICAgICAgIGJyb3dzZSwgcXVlcnkgdGhlIGVycm9ycywgYW5kIHZpZXcgc3RhdGlzdGljcy4KKyAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGlzYWJsaW5nLXRoZS10b29sJz4KKyAgICAgICAgICAgIDx0aXRsZT5EaXNhYmxpbmcgdGhlIFRvb2w8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkaXNhYmxlIHRoZSBlcnJvciByZXBvcnRpbmcgZmVhdHVyZSwgc2ltcGx5IHJlbW92ZSBvciBjb21tZW50CisgICAgICAgICAgICAgICAgb3V0IHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGZyb20gdGhlIGVuZCBvZiB5b3VyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJyZXBvcnQtZXJyb3IiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAteW91ci1vd24tZXJyb3ItcmVwb3J0aW5nLXNlcnZlcic+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBZb3VyIE93biBFcnJvciBSZXBvcnRpbmcgU2VydmVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc2V0IHVwIHlvdXIgb3duIGVycm9yIHJlcG9ydGluZyBzZXJ2ZXIsIHlvdQorICAgICAgICAgICAgICAgIGNhbiBvYnRhaW4gdGhlIGNvZGUgZnJvbSB0aGUgR2l0IHJlcG9zaXRvcnkgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9lcnJvci1yZXBvcnQtd2ViLyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzZXQgaXQgdXAgYXJlIGluIHRoZSBSRUFETUUgZG9jdW1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorCis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzZWEzYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ2Rldi1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2I1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvZGV2LW1hbnVhbC8nIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IicuLi9ib29rLmNzcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJlY2xpcHNlLm1hbmlmZXN0IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaW5kZXgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbCBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzUwODgyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtaW50cm8ueG1sCkBAIC0wLDAgKzEsMjQ2IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZGV2LW1hbnVhbC1pbnRybyc+CisKKzx0aXRsZT5UaGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWw8L3RpdGxlPgorICAgIDxzZWN0aW9uIGlkPSdkZXYtaW50cm8nPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdlbGNvbWUgdG8gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIQorICAgICAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0bworICAgICAgICAgICAgZGV2ZWxvcCBlbWJlZGRlZCBMaW51eCBpbWFnZXMgYW5kIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIHRoYXQKKyAgICAgICAgICAgIHJ1biBvbiB0YXJnZXRlZCBkZXZpY2VzLgorICAgICAgICAgICAgVGhlIG1hbnVhbCBwcm92aWRlcyBhbiBvdmVydmlldyBvZiBpbWFnZSwga2VybmVsLCBhbmQKKyAgICAgICAgICAgIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBCZWNhdXNlIG11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgbWFudWFsIGlzIGdlbmVyYWwsIGl0CisgICAgICAgICAgICBjb250YWlucyBtYW55IHJlZmVyZW5jZXMgdG8gb3RoZXIgc291cmNlcyB3aGVyZSB5b3UgY2FuIGZpbmQgbW9yZQorICAgICAgICAgICAgZGV0YWlsLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZmluZCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBHaXQsIHJlcG9zaXRvcmllcywKKyAgICAgICAgICAgIGFuZCBvcGVuIHNvdXJjZSBpbiBnZW5lcmFsIGluIG1hbnkgcGxhY2VzIG9uIHRoZSBJbnRlcm5ldC4KKyAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdCBpcyBob3cgdG8gcXVpY2tseQorICAgICAgICAgICAgc2V0IHVwIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gYW5kIGJ1aWxkIGFuIGltYWdlLCB3aGljaCB5b3UKKyAgICAgICAgICAgIGZpbmQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBkb2VzLCBob3dldmVyLCBwcm92aWRlCisgICAgICAgICAgICBndWlkYW5jZSBhbmQgZXhhbXBsZXMgb24gaG93IHRvIGNoYW5nZSB0aGUga2VybmVsIHNvdXJjZSBjb2RlLAorICAgICAgICAgICAgcmVjb25maWd1cmUgdGhlIGtlcm5lbCwgYW5kIGRldmVsb3AgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlCisgICAgICAgICAgICBwb3B1bGFyIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgY3JlYXRlcyBhIFBva3kgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBjcmVhdGUgeW91ciBvd24gZGlzdHJpYnV0aW9uIGJ5IHByb3ZpZGluZyBrZXkKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4uCisgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBpcyBBbmdzdHJvbSwgd2hpY2ggaGFzIGhhZCBhIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgYmFzZWQgb24gdGhlIFlvY3RvIFByb2plY3Qgc2luY2UgaXRzIGluY2VwdGlvbi4KKyAgICAgICAgICAgIE90aGVyIGV4YW1wbGVzIGluY2x1ZGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb25zIGxpa2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvb3JnYW5pemF0aW9uL3dpbmQtcml2ZXItc3lzdGVtcyc+V2luZCBSaXZlciBMaW51eDwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9vcmdhbml6YXRpb24vbWVudG9yLWdyYXBoaWNzJz5NZW50b3IgRW1iZWRkZWQgTGludXg8L3VsaW5rPiwKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvb3JnYW5pemF0aW9uL2VuZWEtYWInPkVORUEgTGludXg8L3VsaW5rPgorICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZWNvc3lzdGVtL21lbWJlci1vcmdhbml6YXRpb25zJz5vdGhlcnM8L3VsaW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLXlvdXItb3duLWRpc3RyaWJ1dGlvbic+Q3JlYXRpbmcgWW91ciBPd24gRGlzdHJpYnV0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd2hhdC10aGlzLW1hbnVhbC1wcm92aWRlcyc+CisgICAgICAgIDx0aXRsZT5XaGF0IFRoaXMgTWFudWFsIFByb3ZpZGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBkZXNjcmliZXMgd2hhdCB5b3UgY2FuIGdldCBmcm9tIHRoaXMgbWFudWFsOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5mb3JtYXRpb24gdGhhdCBsZXRzIHlvdSBnZXQgc2V0CisgICAgICAgICAgICAgICAgICAgIHVwIHRvIGRldmVsb3AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIHRvIGhlbHAgZGV2ZWxvcGVycyB3aG8gYXJlIG5ldyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQgYW5kIHRvIHRoZSBkaXN0cmlidXRlZCByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBjb250cm9sIHN5c3RlbSBHaXQsIHdoaWNoIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbiB1bmRlcnN0YW5kaW5nIG9mIGNvbW1vbiBlbmQtdG8tZW5kCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IG1vZGVscyBhbmQgdGFza3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluZm9ybWF0aW9uIGFib3V0IGNvbW1vbiBkZXZlbG9wbWVudCB0YXNrcworICAgICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgdXNlZCBkdXJpbmcgaW1hZ2UgZGV2ZWxvcG1lbnQgZm9yCisgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvbiBvZiB0aGUgUXVpY2tFTVVsYXRvciAoUUVNVSksIHdoaWNoIGxldHMgeW91CisgICAgICAgICAgICAgICAgICAgIHNpbXVsYXRlIHJ1bm5pbmcgb24gaGFyZHdhcmUgYW4gaW1hZ2UgeW91IGhhdmUgYnVpbHQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYW55IHJlZmVyZW5jZXMgdG8gb3RoZXIgc291cmNlcyBvZiByZWxhdGVkCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd2hhdC10aGlzLW1hbnVhbC1kb2VzLW5vdC1wcm92aWRlJz4KKyAgICAgICAgPHRpdGxlPldoYXQgdGhpcyBNYW51YWwgRG9lcyBOb3QgUHJvdmlkZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIG1hbnVhbCB3aWxsIG5vdCBnaXZlIHlvdSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0ZXAtYnktc3RlcCBpbnN0cnVjdGlvbnMgd2hlbiB0aG9zZSBpbnN0cnVjdGlvbnMgZXhpc3QgaW4gb3RoZXIgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBkb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZSBjb250YWlucyBkZXRhaWxlZAorICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjaW5zdGFsbGluZy10aGUtYWR0Jz5BRFQgSW5zdGFsbGVyPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHVzZWQgdG8gc2V0IHVwIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWZlcmVuY2UgbWF0ZXJpYWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIG1hdGVyaWFsIHJlc2lkZXMgaW4gYW4gYXBwcm9wcmlhdGUgcmVmZXJlbmNlIG1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN5c3RlbSB2YXJpYWJsZXMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRldGFpbGVkIHB1YmxpYyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBzcGVjaWZpYyB0byB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZXhoYXVzdGl2ZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIEdpdCBpcyBjb3ZlcmVkIGJldHRlciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICBJbnRlcm5ldCB0aGFuIGluIHRoaXMgbWFudWFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb3RoZXItaW5mb3JtYXRpb24nPgorICAgICAgICA8dGl0bGU+T3RoZXIgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSB0aGlzIG1hbnVhbCBwcmVzZW50cyBvdmVydmlldyBpbmZvcm1hdGlvbiBmb3IgbWFueSBkaWZmZXJlbnQKKyAgICAgICAgICAgIHRvcGljcywgc3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGlzIHJlY29tbWVuZGVkIGZvciBmdWxsCisgICAgICAgICAgICBjb21wcmVoZW5zaW9uLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByZXNlbnRzIG90aGVyIHNvdXJjZXMgb2YgaW5mb3JtYXRpb24geW91IG1pZ2h0IGZpbmQgaGVscGZ1bDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4gVGhlIGhvbWUgcGFnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgbG90cyBvZiBpbmZvcm1hdGlvbiBvbiB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGxpbmtzIHRvIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7Jz5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzaG9ydCBkb2N1bWVudCBsZXRzIHlvdSBnZXQgc3RhcnRlZAorICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBxdWlja2x5IGJlZ2luIGJ1aWxkaW5nIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyc+WW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtYW51YWwgaXMgYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZ3VpZGUgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIGlzIGJhc2VkIG9uIEJpdEJha2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzICJQb2t5Ii4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGd1aWRlIHByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQgbGV0cyB5b3UgZ2V0IGdvaW5nIHdpdGggdGhlIEFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgYW5kIHN0YW5kLWFsb25lIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcCBwcm9qZWN0cyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBndWlkZSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIEJTUCBjb21wb25lbnRzLgorICAgICAgICAgICAgICAgICAgICBIYXZpbmcgYSBjb21tb25seSB1bmRlcnN0b29kIHN0cnVjdHVyZSBlbmNvdXJhZ2VzIHN0YW5kYXJkaXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvIHdvcmsgd2l0aCBMaW51eCBZb2N0byBrZXJuZWxzIGFzIHdlbGwgYXMgcHJvdmlkZXMgYSBiaXQKKyAgICAgICAgICAgICAgICAgICAgb2YgY29uY2VwdHVhbCBpbmZvcm1hdGlvbiBvbiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBMaW51eCBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBwcmVzZW50cyBhIHNldCBvZiBjb21tb24gYW5kIGdlbmVyYWxseSB1c2VmdWwgdHJhY2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsaW5nIHNjaGVtZXMgYWxvbmcgd2l0aCB0aGVpciBhcHBsaWNhdGlvbnMgKGFzIGFwcHJvcHJpYXRlKSB0byBlYWNoIHRvb2wuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsnPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1hbnVhbCBpbnRyb2R1Y2VzIGFuZCBkZXNjcmliZXMgaG93IHRvIHNldCB1cCBhbmQgdXNlCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIsIHdoaWNoIGlzIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgQnVpbGQgU3lzdGVtPC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PTNabE91LWdMc2gwJz4KKyAgICAgICAgICAgICAgICAgICAgRWNsaXBzZSBJREUgWW9jdG8gUGx1Zy1pbjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgc3RlcC1ieS1zdGVwIGluc3RydWN0aW9uYWwgdmlkZW8gdGhhdAorICAgICAgICAgICAgICAgICAgICBkZW1vbnN0cmF0ZXMgaG93IGFuIGFwcGxpY2F0aW9uIGRldmVsb3BlciB1c2VzIFlvY3RvIFBsdWctaW4gZmVhdHVyZXMgd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0ZBUSc+RkFRPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGNvbW1vbmx5IGFza2VkIHF1ZXN0aW9ucyBhbmQgdGhlaXIgYW5zd2Vycy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZXMsIHVwZGF0ZXMgYW5kIGtub3duIGlzc3VlcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgSG9iJ3MgcHJpbWFyeSBnb2FsIGlzIHRvIGVuYWJsZSBhIHVzZXIgdG8gcGVyZm9ybSBjb21tb24gdGFza3MgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL3RvYXN0ZXInPlRvYXN0ZXI8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBbiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKEFQSSkgYW5kIHdlYi1iYXNlZAorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0sIHdoaWNoIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgdGhhdCByZXBvcnRzIGJ1aWxkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9idWlsZC1hcHBsaWFuY2UnPkJ1aWxkIEFwcGxpYW5jZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEEgdmlydHVhbCBtYWNoaW5lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyB5b3UgdG8gYnVpbGQgYW5kIGJvb3QgYSBjdXN0b20gZW1iZWRkZWQgTGludXggaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhIG5vbi1MaW51eCBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19CVUdaSUxMQV9VUkw7Jz5CdWd6aWxsYTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBidWcgdHJhY2tpbmcgYXBwbGljYXRpb24gdGhlIFlvY3RvIFByb2plY3QgdXNlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgcHJvYmxlbXMgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwgeW91IHNob3VsZCByZXBvcnQgdGhlbSB1c2luZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgTWFpbGluZyBMaXN0czo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUbyBzdWJzY3JpYmUgdG8gdGhlIFlvY3RvIFByb2plY3QgbWFpbGluZworICAgICAgICAgICAgICAgICAgICBsaXN0cywgY2xpY2sgb24gdGhlIGZvbGxvd2luZyBVUkxzIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby95b2N0byc+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBZb2N0byBQcm9qZWN0IERpc2N1c3Npb25zIG1haWxpbmcgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby9wb2t5Jz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIFlvY3RvIFByb2plY3QgRGlzY3Vzc2lvbnMgbWFpbGluZyBsaXN0IGFib3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gKFBva3kpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvLWFubm91bmNlJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIG1haWxpbmcgbGlzdCB0byByZWNlaXZlIG9mZmljaWFsIFlvY3RvIFByb2plY3QgYW5ub3VuY2VtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgWW9jdG8gUHJvamVjdCBtaWxlc3RvbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGxpc3Rpbmcgb2YgYWxsIHB1YmxpYyBtYWlsaW5nIGxpc3RzIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpc3RzLnlvY3RvcHJvamVjdC5vcmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnRlcm5ldCBSZWxheSBDaGF0IChJUkMpOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFR3byBJUkMgY2hhbm5lbHMgb24gZnJlZW5vZGUgYXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICBmb3IgWW9jdG8gUHJvamVjdCBhbmQgUG9reSBkaXNjdXNzaW9uczogPGZpbGVuYW1lPiN5b2N0bzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+I3Bva3k8L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfSE9NRV9VUkw7Jz5PcGVuRW1iZWRkZWQ8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZWQgYnkgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvamVjdCBpcyB0aGUgdXBzdHJlYW0sIGdlbmVyaWMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBmcm9tIHdoaWNoIHRoZSBZb2N0byBQcm9qZWN0IGRlcml2ZXMgaXRzIGJ1aWxkIHN5c3RlbSAoUG9reSkKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRvIHdoaWNoIGl0IGNvbnRyaWJ1dGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvd2lraS9CaXRCYWtlJz5CaXRCYWtlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2wgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB0byBwcm9jZXNzIHByb2plY3QgbWV0YWRhdGEuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsnPkJpdEJha2UgVXNlciBNYW51YWw6PC91bGluaz48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBIGNvbXByZWhlbnNpdmUgZ3VpZGUgdG8gdGhlIEJpdEJha2UgdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoaXMgbWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd2lraS5xZW11Lm9yZy9JbmRleC5odG1sJz5RdWljayBFTVVsYXRvciAoUUVNVSk8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBBbiBvcGVuLXNvdXJjZSBtYWNoaW5lIGVtdWxhdG9yIGFuZCB2aXJ0dWFsaXplci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGRlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1tb2RlbC54bWwKQEAgLTAsMCArMSwyNjI0IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZGV2LW1hbnVhbC1tb2RlbCc+CisKKzx0aXRsZT5Db21tb24gRGV2ZWxvcG1lbnQgTW9kZWxzPC90aXRsZT4KKworPHBhcmE+CisgICAgTWFueSBkZXZlbG9wbWVudCBtb2RlbHMgZXhpc3QgZm9yIHdoaWNoIHlvdSBjYW4gdXNlIHRoZSBZb2N0byBQcm9qZWN0LgorICAgIFRoaXMgY2hhcHRlciBvdmVydmlld3Mgc2ltcGxlIG1ldGhvZHMgdGhhdCB1c2UgdG9vbHMgcHJvdmlkZWQgYnkgdGhlCisgICAgWW9jdG8gUHJvamVjdDoKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN5c3RlbSBEZXZlbG9wbWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIFN5c3RlbSBEZXZlbG9wbWVudCBjb3ZlcnMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGRldmVsb3BtZW50CisgICAgICAgICAgICAgYW5kIGtlcm5lbCBtb2RpZmljYXRpb24gb3IgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gY3JlYXRlIGEgQlNQLCBzZWUgdGhlCisgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkKKyAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gd29yayB3aXRoIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZXIgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBVc2VyIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IGNvdmVycyBkZXZlbG9wbWVudCBvZiBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgICB0aGF0IHlvdSBpbnRlbmQgdG8gcnVuIG9uIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGZvcgorICAgICAgICAgICAgIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyc+WW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgIEZvciBhIHNpbXBsZSBleGFtcGxlIG9mIHVzZXItc3BhY2UgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgdXNpbmcKKyAgICAgICAgICAgICB0aGUgPHRyYWRlbWFyayBjbGFzcz0ndHJhZGUnPkVjbGlwc2U8L3RyYWRlbWFyaz4gSURFLCBzZWUgdGhlCisgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXdvcmtmbG93Jz5BcHBsaWNhdGlvbgorICAgICAgICAgICAgIERldmVsb3BtZW50IFdvcmtmbG93PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGVtcG9yYXJ5IFNvdXJjZSBDb2RlIE1vZGlmaWNhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgIERpcmVjdCBtb2RpZmljYXRpb24gb2YgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIGlzIGEgY29udmVuaWVudAorICAgICAgICAgICAgIGRldmVsb3BtZW50IG1vZGVsIHRvIHF1aWNrbHkgaXRlcmF0ZSBhbmQgZGV2ZWxvcCB0b3dhcmRzIGEKKyAgICAgICAgICAgICBzb2x1dGlvbi4KKyAgICAgICAgICAgICBPbmNlIHlvdSBpbXBsZW1lbnQgdGhlIHNvbHV0aW9uLCB5b3Ugc2hvdWxkIG9mIGNvdXJzZSB0YWtlCisgICAgICAgICAgICAgc3RlcHMgdG8gZ2V0IHRoZSBjaGFuZ2VzIHVwc3RyZWFtIGFuZCBhcHBsaWVkIGluIHRoZSBhZmZlY3RlZAorICAgICAgICAgICAgIHJlY2lwZXMuCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIERldmVsb3BtZW50IHVzaW5nIFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBZb3UgY2FuIHVzZSA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L1Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy90b2FzdGVyJz5Ub2FzdGVyPC91bGluaz4KKyAgICAgICAgICAgICB0byBidWlsZCBjdXN0b20gb3BlcmF0aW5nIHN5c3RlbSBpbWFnZXMgd2l0aGluIHRoZSBidWlsZAorICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgIFRvYXN0ZXIgcHJvdmlkZXMgYW4gZWZmaWNpZW50IGludGVyZmFjZSB0byB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgdGhhdCBhbGxvd3MgeW91IHRvIHN0YXJ0IGJ1aWxkcyBhbmQgZXhhbWluZSBidWlsZCBzdGF0aXN0aWNzLgorICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbWFnZSBEZXZlbG9wbWVudCB1c2luZyBIb2I6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPgorICAgICAgICAgICAgIHRvIGJ1aWxkIGN1c3RvbSBvcGVyYXRpbmcgc3lzdGVtIGltYWdlcyB3aXRoaW4gdGhlIGJ1aWxkCisgICAgICAgICAgICAgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgSG9iIHByb3ZpZGVzIGFuIGVmZmljaWVudCBpbnRlcmZhY2UgdG8gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzaW5nIGEgRGV2ZWxvcG1lbnQgU2hlbGw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICBZb3UgY2FuIHVzZSBhIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+IHRvIGVmZmljaWVudGx5IGRlYnVnCisgICAgICAgICAgICAgY29tbWFuZHMgb3Igc2ltcGx5IGVkaXQgcGFja2FnZXMuCisgICAgICAgICAgICAgV29ya2luZyBpbnNpZGUgYSBkZXZlbG9wbWVudCBzaGVsbCBpcyBhIHF1aWNrIHdheSB0byBzZXQgdXAgdGhlCisgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50IHRvIHdvcmsgb24gcGFydHMgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICA8L2l0ZW1pemVkbGlzdD4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3N5c3RlbS1kZXZlbG9wbWVudC1tb2RlbCc+CisgICAgPHRpdGxlPlN5c3RlbSBEZXZlbG9wbWVudCBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU3lzdGVtIGRldmVsb3BtZW50IGludm9sdmVzIG1vZGlmaWNhdGlvbiBvciBjcmVhdGlvbiBvZiBhbiBpbWFnZSB0aGF0IHlvdSB3YW50IHRvIHJ1biBvbgorICAgICAgICBhIHNwZWNpZmljIGhhcmR3YXJlIHRhcmdldC4KKyAgICAgICAgVXN1YWxseSwgd2hlbiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIGVtYmVkZGVkIGhhcmR3YXJlLCB0aGUgaW1hZ2UgZG9lcworICAgICAgICBub3QgcmVxdWlyZSB0aGUgc2FtZSBudW1iZXIgb2YgZmVhdHVyZXMgdGhhdCBhIGZ1bGwtZmxlZGdlZCBMaW51eCBkaXN0cmlidXRpb24gcHJvdmlkZXMuCisgICAgICAgIFRodXMsIHlvdSBjYW4gY3JlYXRlIGEgbXVjaCBzbWFsbGVyIGltYWdlIHRoYXQgaXMgZGVzaWduZWQgdG8gdXNlIG9ubHkgdGhlCisgICAgICAgIGZlYXR1cmVzIGZvciB5b3VyIHBhcnRpY3VsYXIgaGFyZHdhcmUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IHN5c3RlbSBkZXZlbG9wbWVudCB3b3JrcyBpbiB0aGUgWW9jdG8gUHJvamVjdCwgdGhpcyBzZWN0aW9uCisgICAgICAgIGNvdmVycyB0d28gdHlwZXMgb2YgaW1hZ2UgZGV2ZWxvcG1lbnQ6ICBCU1AgY3JlYXRpb24gYW5kIGtlcm5lbCBtb2RpZmljYXRpb24gb3IKKyAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcGluZy1hLWJvYXJkLXN1cHBvcnQtcGFja2FnZS1ic3AnPgorICAgICAgICA8dGl0bGU+RGV2ZWxvcGluZyBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIEJTUCBpcyBhIGNvbGxlY3Rpb24gb2YgcmVjaXBlcyB0aGF0LCB3aGVuIGFwcGxpZWQgZHVyaW5nIGEgYnVpbGQsIHJlc3VsdHMgaW4KKyAgICAgICAgICAgIGFuIGltYWdlIHRoYXQgeW91IGNhbiBydW4gb24gYSBwYXJ0aWN1bGFyIGJvYXJkLgorICAgICAgICAgICAgVGh1cywgdGhlIHBhY2thZ2Ugd2hlbiBjb21waWxlZCBpbnRvIHRoZSBuZXcgaW1hZ2UsIHN1cHBvcnRzIHRoZSBvcGVyYXRpb24gb2YgdGhlIGJvYXJkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBGb3IgYSBicmllZiBsaXN0IG9mIHRlcm1zIHVzZWQgd2hlbiBkZXNjcmliaW5nIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGluIHRoZSBZb2N0byBQcm9qZWN0LAorICAgICAgICAgICAgc2VlIHRoZSAiPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC10ZXJtcyc+WW9jdG8gUHJvamVjdCBUZXJtczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgIDwvbm90ZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByZXNlbnRzIHRoZSBiYXNpYworICAgICAgICAgICAgc3RlcHMgdXNlZCB0byBjcmVhdGUgYSBCU1AgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+QlNQIFRvb2xzPC91bGluaz4uCisgICAgICAgICAgICBBbHRob3VnaCBub3QgcmVxdWlyZWQgZm9yIEJTUCBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IHJlcG9zaXRvcnksIHdoaWNoIGNvbnRhaW5zCisgICAgICAgICAgICBtYW55IEJTUHMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBpcyBwYXJ0IG9mIHRoZSBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjcmVhdGUgYSBuZXcgbGF5ZXIgdXNpbmcgdGhlIHRvb2xzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRpb24gYW5kIGxpc3Qgc3VtbWFyaXplIHRoZSBCU1AgY3JlYXRpb24gZ2VuZXJhbCB3b3JrZmxvdy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2JzcC1kZXYtZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgdXAgeW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSB0byBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz46ICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3RoZS1saW51eC1kaXN0cm8nPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbnMgYm90aAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgcmVxdWlyZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXN0YWJsaXNoIGEgbG9jYWwgY29weSBvZiB0aGUgcHJvamVjdCBmaWxlcyBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbTwvZW1waGFzaXM+OiAgWW91IG5lZWQgdGhpcyA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5PC9saW5rPiBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSGF2aW5nIHRoZXNlIGZpbGVzIG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYW5kIHRvIHRoZSB0b29scyB5b3UgbmVlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IG9uIHlvdXIgc3lzdGVtPC9lbXBoYXNpcz46ICBIYXZpbmcgbG9jYWwgY29waWVzCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZXNlIHN1cHBvcnRlZCBCU1AgbGF5ZXJzIG9uIHlvdXIgc3lzdGVtIGdpdmVzIHlvdQorICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gbGF5ZXJzIHlvdSBtaWdodCBiZSBhYmxlIHRvIGJ1aWxkIG9uIG9yIG1vZGlmeQorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IHRoZXNlIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvbGluaz4iIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgeW91ciBvd24gQlNQIGxheWVyIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNjcmVhdGluZy1hLW5ldy1ic3AtbGF5ZXItdXNpbmctdGhlLXlvY3RvLWJzcC1zY3JpcHQnPjxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjwvdWxpbms+IHNjcmlwdDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBMYXllcnMgYXJlIGlkZWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpc29sYXRpbmcgYW5kIHN0b3Jpbmcgd29yayBmb3IgYSBnaXZlbiBwaWVjZSBvZiBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgQSBsYXllciBpcyByZWFsbHkganVzdCBhIGxvY2F0aW9uIG9yIGFyZWEgaW4gd2hpY2ggeW91IHBsYWNlCisgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9ucyBmb3IgeW91ciBCU1AuCisgICAgICAgICAgICAgICAgICAgIEluIGZhY3QsIGEgQlNQIGlzLCBpbiBpdHNlbGYsIGEgc3BlY2lhbCB0eXBlIG9mIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIG5ldyBCU1AgbGF5ZXIgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIE5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IChCU1ApIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGV4YW1wbGUgdGhhdCBpbGx1c3RyYXRlcyBhIGxheWVyIGlzIGFuIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3NlIHlvdSBhcmUgY3JlYXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBoYXMgbGlicmFyeSBvciBvdGhlciBkZXBlbmRlbmNpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgb3JkZXIgZm9yIGl0IHRvIGNvbXBpbGUgYW5kIHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVyLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGJlIHdoZXJlIGFsbCB0aGUgcmVjaXBlcyB0aGF0IGRlZmluZSB0aG9zZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIGtlcHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXkgcG9pbnQgZm9yIGEgbGF5ZXIgaXMgdGhhdCBpdCBpcyBhbiBpc29sYXRlZCBhcmVhIHRoYXQgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHByb2plY3QgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBrbm93cyBhYm91dC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBsYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIgc2VjdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5GaXZlIEJTUHMgZXhpc3QgdGhhdCBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlOiA8ZmlsZW5hbWU+Z2VuZXJpY3g4NjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Z2VuZXJpY3g4Ni02NDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmVhZ2xlYm9uZTwvZmlsZW5hbWU+IChBUk0pLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXBjODMxNWU8L2ZpbGVuYW1lPiAoUG93ZXJQQyksCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+ZWRnZXJvdXRlcjwvZmlsZW5hbWU+IChNSVBTKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciB0aGVzZSBmaXZlIEJTUHMgYXJlIGxvY2F0ZWQgYW5kIGRpc3BlcnNlZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgQlNQIGxheWVycyBmb3IgbWFueSBzdXBwb3J0ZWQgQlNQcyAoZS5nLgorICAgICAgICAgICAgICAgICAgICBDcnlzdGFsIEZvcmVzdCwgRW1lbmxvdywgRmlzaCBSaXZlciBJc2xhbmQgMiwgSGFzd2VsbCwKKyAgICAgICAgICAgICAgICAgICAgSmFzcGVyIEZvcmVzdCwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgQlNQcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBsYXllciwgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcmllczwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gYWRkaXRpb25hbCBCU1AgbGF5ZXJzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtbWlubm93PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXJhc3BiZXJyeXBpPC9maWxlbmFtZT4uPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5XaGVuIHlvdSBzZXQgdXAgYSBsYXllciBmb3IgYSBuZXcgQlNQLCB5b3Ugc2hvdWxkIGZvbGxvdyBhIHN0YW5kYXJkIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsYXlvdXQgaXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWZpbGVsYXlvdXQnPkV4YW1wbGUgRmlsZXN5c3RlbSBMYXlvdXQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BtZW50IEd1aWRlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgc3RhbmRhcmQgbGF5b3V0LCB5b3Ugd2lsbCBub3RpY2UgYSBzdWdnZXN0ZWQgc3RydWN0dXJlIGZvciByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgc3RhbmRhcmQgbGF5b3V0IGZvciBhIEJTUCBieSBleGFtaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgYW55IHN1cHBvcnRlZCBCU1AgZm91bmQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIgaW5zaWRlCisgICAgICAgICAgICAgICAgICAgIHRoZSBTb3VyY2UgRGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8geW91ciBuZXcgQlNQCisgICAgICAgICAgICAgICAgICAgIGxheWVyPC9lbXBoYXNpcz46ICBUaGUgc3RhbmRhcmQgQlNQIGxheWVyIHN0cnVjdHVyZSBvcmdhbml6ZXMgdGhlIGZpbGVzIHlvdSBuZWVkCisgICAgICAgICAgICAgICAgICAgIHRvIGVkaXQgaW4gPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBhbmQgc2V2ZXJhbCA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBCU1AgbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpZGVudGlmeSB3aGVyZSB5b3VyIG5ldyBsYXllciBpcyBvbiB0aGUgbG9jYWwgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGFuZCBpZGVudGlmeSB3aGljaCBrZXJuZWwgeW91IGFyZSBnb2luZyB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgPGZpbGVuYW1lPnlvY3RvLWJzcDwvZmlsZW5hbWU+IHNjcmlwdCwgeW91IGFyZSBhYmxlIHRvIGludGVyYWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIG1hbnkgdGhpbmdzIGZvciB0aGUgQlNQIChlLmcuIGtleWJvYXJkLCB0b3VjaHNjcmVlbiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NYWtlIHJlY2lwZSBjaGFuZ2VzIHRvIHlvdXIgbmV3IEJTUCBsYXllcjwvZW1waGFzaXM+OiAgUmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgaW5jbHVkZSBhbHRlcmluZyByZWNpcGVzICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMpLCByZW1vdmluZworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIHlvdSBkbyBub3QgdXNlLCBhbmQgYWRkaW5nIG5ldyByZWNpcGVzIG9yIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSB0aGF0IHlvdSBuZWVkIHRvIHN1cHBvcnQgeW91ciBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIGZvciB0aGUgYnVpbGQ8L2VtcGhhc2lzPjogIE9uY2UgeW91IGhhdmUgbWFkZSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMgdG8geW91ciBCU1AgbGF5ZXIsIHRoZXJlIHJlbWFpbnMgYSBmZXcgdGhpbmdzCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGRvIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbiBvcmRlciBmb3IgaXQgdG8gY3JlYXRlIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGdldCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgcmVhZHkgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSBuZWVkIHRvIGJlIHN1cmUgdHdvIGtleSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHk6CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgbWFrZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhd2FyZSBvZiB5b3VyIG5ldyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZW5hYmxpbmcteW91ci1sYXllcic+RW5hYmxpbmcgWW91ciBMYXllcjwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBsZXQgdGhlIGJ1aWxkIHN5c3RlbSBrbm93IGFib3V0IHlvdXIgbmV3IGxheWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGVudGlyZSBwcm9jZXNzIGZvciBidWlsZGluZyBhbiBpbWFnZSBpcyBvdmVydmlld2VkIGluIHRoZSBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIHJlZmVyZW5jZSB0aGlzIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlPC9lbXBoYXNpcz46ICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHRoZSBCaXRCYWtlIHRvb2wgdG8gYnVpbGQgaW1hZ2VzIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSB3YW50IHRvIGNyZWF0ZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQml0QmFrZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBidWlsZCBwcm9jZXNzIHN1cHBvcnRzIHNldmVyYWwgdHlwZXMgb2YgaW1hZ2VzIHRvIHNhdGlzZnkgZGlmZmVyZW50IG5lZWRzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIgY2hhcHRlcgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgaW1hZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB2aWV3IGEgdmlkZW8gcHJlc2VudGF0aW9uIG9uICJCdWlsZGluZyBDdXN0b20gRW1iZWRkZWQgSW1hZ2VzIHdpdGggWW9jdG8iCisgICAgICAgICAgICBhdCA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZS1lbGVjdHJvbnMuY29tL2Jsb2cvZWxjLTIwMTEtdmlkZW9zJz5GcmVlIEVsZWN0cm9uczwvdWxpbms+LgorICAgICAgICAgICAgQWZ0ZXIgZ29pbmcgdG8gdGhlIHBhZ2UsIGp1c3Qgc2VhcmNoIGZvciAiRW1iZWRkZWQiLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgc3VwcGxlbWVudGFsIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsnPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgIEZpbmFsbHksIHRoZXJlIGlzIGhlbHBmdWwgbWF0ZXJpYWwgYW5kIGxpbmtzIG9uIHRoaXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXInPndpa2kgcGFnZTwvdWxpbms+LgorICAgICAgICAgICAgQWx0aG91Z2ggYSBiaXQgZGF0ZWQsIHlvdSBtaWdodCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgd2lraQorICAgICAgICAgICAgaGVscGZ1bC4KKyAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21vZGlmeWluZy10aGUta2VybmVsJz4KKyAgICAgICAgPHRpdGxlPjxhbmNob3IgaWQ9J2tlcm5lbC1zcG90JyAvPk1vZGlmeWluZyB0aGUgS2VybmVsPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEtlcm5lbCBtb2RpZmljYXRpb24gaW52b2x2ZXMgY2hhbmdpbmcgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsLCB3aGljaCBjb3VsZCBpbnZvbHZlIGNoYW5naW5nCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXMgd2VsbCBhcyBhZGRpbmcgbmV3IGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjaGFuZ2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZm9ybSBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cywgd2hpbGUgcmVjaXBlCisgICAgICAgICAgICBtb2RpZmljYXRpb24gY29tZXMgdGhyb3VnaCB0aGUga2VybmVsJ3MgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsPC9maWxlbmFtZT4gYXJlYQorICAgICAgICAgICAgaW4gYSBrZXJuZWwgbGF5ZXIgeW91IGNyZWF0ZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBrZXJuZWwgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgc3RlcHMgdG8gbW9kaWZ5IHRoZSBrZXJuZWwuCisgICAgICAgICAgICBZb3UgY2FuIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC9saW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUgdGhhdCBjaGFuZ2VzIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUga2VybmVsLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyaW5nLXRoZS1rZXJuZWwnPkNvbmZpZ3VyaW5nIHRoZSBLZXJuZWw8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGtlcm5lbCBhbmQgb24gbW9kaWZ5aW5nIHRoZSBrZXJuZWwsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0na2VybmVsLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXJuZWwgT3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUcmFkaXRpb25hbGx5LCB3aGVuIG9uZSB0aGlua3Mgb2YgYSBwYXRjaGVkIGtlcm5lbCwgdGhleSB0aGluayBvZiBhIGJhc2Uga2VybmVsCisgICAgICAgICAgICAgICAgc291cmNlIHRyZWUgYW5kIGEgZml4ZWQgc3RydWN0dXJlIHRoYXQgY29udGFpbnMga2VybmVsIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QsIGhvd2V2ZXIsIGVtcGxveXMgbWVjaGFuaXNtcyB0aGF0LCBpbiBhIHNlbnNlLCByZXN1bHQgaW4gYSBrZXJuZWwgc291cmNlCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLgorICAgICAgICAgICAgICAgIEJ5IHRoZSBlbmQgb2YgdGhpcyBzZWN0aW9uLCB0aGlzIGFuYWxvZ3kgd2lsbCBiZWNvbWUgY2xlYXJlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IGxvb2sgYXQgdGhlIGludGVyZmFjZSwgeW91IHdpbGwgc2VlIHRvIHRoZSBsZWZ0IGEgZ3JvdXBpbmcgb2YKKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yaWVzIHRpdGxlZCAiWW9jdG8gTGludXggS2VybmVsLiIKKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhpcyBncm91cCwgeW91IHdpbGwgZmluZCBzZXZlcmFsIGtlcm5lbHMgc3VwcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Q6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjg8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFibGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdG8gdXNlIHdpdGggdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UgMS40LiBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIExpbnV4IDMuOCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjEwPC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIEFuCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsLCB1bnN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCB1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IFJlbGVhc2UgMS41LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTAgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xNDwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZXMgMS42IGFuZCAxLjcuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNCByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE3PC9maWxlbmFtZT48L2VtcGhhc2lzPiAtIEFuCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsLCB1bnN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCB1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IFJlbGVhc2UgMS43LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgaXMgYmFzZWQgb24gdGhlIExpbnV4IDMuMTcgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+PC9lbXBoYXNpcz4gLSBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWJsZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0byB1c2Ugd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgUmVsZWFzZSAxLjguCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGtlcm5lbCBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xOSByZWxlYXNlZCBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1kZXY8L2ZpbGVuYW1lPjwvZW1waGFzaXM+IC0gQQorICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQga2VybmVsIGJhc2VkIG9uIHRoZSBsYXRlc3QgdXBzdHJlYW0gcmVsZWFzZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVscyBhcmUgbWFpbnRhaW5lZCB1c2luZyB0aGUgR2l0IHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtCisgICAgICAgICAgICAgICAgdGhhdCBzdHJ1Y3R1cmVzIHRoZW0gdXNpbmcgdGhlIGZhbWlsaWFyICJ0cmVlIiwgImJyYW5jaCIsIGFuZCAibGVhZiIgc2NoZW1lLgorICAgICAgICAgICAgICAgIEJyYW5jaGVzIHJlcHJlc2VudCBkaXZlcnNpb25zIGZyb20gZ2VuZXJhbCBjb2RlIHRvIG1vcmUgc3BlY2lmaWMgY29kZSwgd2hpbGUgbGVhdmVzCisgICAgICAgICAgICAgICAgcmVwcmVzZW50IHRoZSBlbmQtcG9pbnRzIGZvciBhIGNvbXBsZXRlIGFuZCB1bmlxdWUga2VybmVsIHdob3NlIHNvdXJjZSBmaWxlcywKKyAgICAgICAgICAgICAgICB3aGVuIGdhdGhlcmVkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdG8gdGhlIGxlYWYsIGFjY3VtdWxhdGUgdG8gY3JlYXRlIHRoZSBmaWxlcworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3IgYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBhbmQgaXRzIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIGRpc3BsYXlzIHRoaXMgY29uY2VwdDoKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMS5wbmciCisgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdpdGhpbiB0aGUgZmlndXJlLCB0aGUgIktlcm5lbC5vcmcgQnJhbmNoIFBvaW50IiByZXByZXNlbnRzIHRoZSBwb2ludCBpbiB0aGUgdHJlZQorICAgICAgICAgICAgICAgIHdoZXJlIGEgc3VwcG9ydGVkIGJhc2Uga2VybmVsIGlzIG1vZGlmaWVkIGZyb20gdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBjb3VsZCBiZSB0aGUgYnJhbmNoIHBvaW50IGZvciB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBUaHVzLCBldmVyeXRoaW5nIGZ1cnRoZXIgdG8gdGhlIHJpZ2h0IGluIHRoZSBzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgQnJhbmNoIHBvaW50cyB0byB0aGUgcmlnaHQgaW4gdGhlIGZpZ3VyZSByZXByZXNlbnQgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTk8L2ZpbGVuYW1lPiBrZXJuZWwgaXMgbW9kaWZpZWQgZm9yIHNwZWNpZmljIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgb3IgdHlwZXMgb2Yga2VybmVscywgc3VjaCBhcyByZWFsLXRpbWUga2VybmVscy4KKyAgICAgICAgICAgICAgICBFYWNoIGxlYWYgdGh1cyByZXByZXNlbnRzIHRoZSBlbmQtcG9pbnQgZm9yIGEga2VybmVsIGRlc2lnbmVkIHRvIHJ1biBvbiBhIHNwZWNpZmljCisgICAgICAgICAgICAgICAgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3ZlcmFsbCByZXN1bHQgaXMgYSBHaXQtbWFpbnRhaW5lZCByZXBvc2l0b3J5IGZyb20gd2hpY2ggYWxsIHRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICBrZXJuZWwgdHlwZXMgY2FuIGJlIGRlcml2ZWQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIGRldmljZXMuCisgICAgICAgICAgICAgICAgQSBiaWcgYWR2YW50YWdlIHRvIHRoaXMgc2NoZW1lIGlzIHRoZSBzaGFyaW5nIG9mIGNvbW1vbiBmZWF0dXJlcyBieSBrZWVwaW5nIHRoZW0gaW4KKyAgICAgICAgICAgICAgICAibGFyZ2VyIiBicmFuY2hlcyB3aXRoaW4gdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgVGhpcyBwcmFjdGljZSBlbGltaW5hdGVzIHJlZHVuZGFudCBzdG9yYWdlIG9mIHNpbWlsYXIgZmVhdHVyZXMgc2hhcmVkIGFtb25nIGtlcm5lbHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEtlZXAgaW4gbWluZCB0aGUgZmlndXJlIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGFsbCB0aGUgc3VwcG9ydGVkIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBrZXJuZWwgdHlwZXMsIGJ1dCByYXRoZXIgc2hvd3MgYSBzaW5nbGUgZ2VuZXJpYyBrZXJuZWwganVzdCBmb3IgY29uY2VwdHVhbCBwdXJwb3Nlcy4KKyAgICAgICAgICAgICAgICBBbHNvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIFlvY3RvIFByb2plY3Qgc291cmNlIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgIHRoYXQgYXJlIGVpdGhlciBwdWxsZWQgZnJvbSBkdXJpbmcgdGhlIGJ1aWxkIG9yIGVzdGFibGlzaGVkIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbQorICAgICAgICAgICAgICAgIHByaW9yIHRvIHRoZSBidWlsZCBieSBlaXRoZXIgY2xvbmluZyBhIHBhcnRpY3VsYXIga2VybmVsJ3MgR2l0IHJlcG9zaXRvcnkgb3IgYnkKKyAgICAgICAgICAgICAgICBkb3dubG9hZGluZyBhbmQgdW5wYWNraW5nIGEgdGFyYmFsbC4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXBzdHJlYW0gc3RvcmFnZSBvZiBhbGwgdGhlIGF2YWlsYWJsZSBrZXJuZWwgc291cmNlIGNvZGUgaXMgb25lIHRoaW5nLCB3aGlsZQorICAgICAgICAgICAgICAgIHJlcHJlc2VudGluZyBhbmQgdXNpbmcgdGhlIGNvZGUgb24geW91ciBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBpcyBhbm90aGVyLgorICAgICAgICAgICAgICAgIENvbmNlcHR1YWxseSwgeW91IGNhbiB0aGluayBvZiB0aGUga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMgYXMgYWxsIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBuZWNlc3NhcnkgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgQXMgYSBkZXZlbG9wZXIsIHlvdSBhcmUganVzdCBpbnRlcmVzdGVkIGluIHRoZSBzb3VyY2UgZmlsZXMgZm9yIHRoZSBrZXJuZWwgb24KKyAgICAgICAgICAgICAgICB3aGljaCB5b3UgYXJlIHdvcmtpbmcuCisgICAgICAgICAgICAgICAgQW5kLCBmdXJ0aGVybW9yZSwgeW91IG5lZWQgdGhlbSBhdmFpbGFibGUgb24geW91ciBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgS2VybmVsIHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSBvbiB5b3VyIGhvc3Qgc3lzdGVtIGEgY291cGxlIG9mIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHdheXMuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB3b3JraW5nIGluIHRoZSBrZXJuZWwgYWxsIHRoZSB0aW1lLCB5b3UgcHJvYmFibHkgd291bGQgd2FudAorICAgICAgICAgICAgICAgIHRvIHNldCB1cCB5b3VyIG93biBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUga2VybmVsIHRyZWUuCisgICAgICAgICAgICAgICAgSWYgeW91IGp1c3QgbmVlZCB0byBtYWtlIHNvbWUgcGF0Y2hlcyB0byB0aGUga2VybmVsLCB5b3UgY2FuIGFjY2VzcworICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBrZXJuZWwgc291cmNlIGZpbGVzIHRoYXQgd2VyZSBleHRyYWN0ZWQgYW5kIHVzZWQKKyAgICAgICAgICAgICAgICBkdXJpbmcgYSBidWlsZC4KKyAgICAgICAgICAgICAgICBXZSB3aWxsIGp1c3QgdGFsayBhYm91dCB3b3JraW5nIHdpdGggdGhlIHRlbXBvcmFyeSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZ2V0IGtlcm5lbCBzb3VyY2UgY29kZSBvbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBob3N0IHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdsb2NhbC1rZXJuZWwtZmlsZXMnPllvY3RvIFByb2plY3QgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICBidWxsZXRlZCBpdGVtIGVhcmxpZXIgaW4gdGhlIG1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgYnVpbGQ/CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgYnVpbGQgdGhlIGtlcm5lbCBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSwgYWxsIGZpbGVzIG5lZWRlZCBmb3IgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgYXJlIHRha2VuIGZyb20gdGhlIHNvdXJjZSByZXBvc2l0b3JpZXMgcG9pbnRlZCB0byBieSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgYW5kIGdhdGhlcmVkIGluIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYQorICAgICAgICAgICAgICAgIHdoZXJlIHRoZXkgYXJlIHN1YnNlcXVlbnRseSB1c2VkIHRvIGNyZWF0ZSB0aGUgdW5pcXVlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICBUaHVzLCBpbiBhIHNlbnNlLCB0aGUgcHJvY2VzcyBjb25zdHJ1Y3RzIGEgbG9jYWwgc291cmNlIHRyZWUgc3BlY2lmaWMgdG8geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCB0byBnZW5lcmF0ZSB0aGUgbmV3IGtlcm5lbCBpbWFnZSAtIGEgc291cmNlIGdlbmVyYXRvciBpZiB5b3Ugd2lsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGVtcG9yYXJ5IGZpbGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgY3JlYXRlZCBvbiB5b3VyIGhvc3Qgc3lzdGVtIHdoZW4gdGhlIGJ1aWxkIG9jY3Vycy4KKyAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+IGNvbnRhaW5zIGFsbCB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmciCisgICAgICAgICAgICAgICAgICAgIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlPSIxMDAiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwncworICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGJyYW5jaGluZyBzdHJhdGVneSwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGF0Y2hpbmctdGhlLWtlcm5lbCc+UGF0Y2hpbmcgdGhlIEtlcm5lbDwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgYSBkZXRhaWxlZCBleGFtcGxlIHRoYXQgbW9kaWZpZXMgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtbW9kaWZpY2F0aW9uLXdvcmtmbG93Jz4KKyAgICAgICAgICAgIDx0aXRsZT5LZXJuZWwgTW9kaWZpY2F0aW9uIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBpbGx1c3RyYXRpb24gYW5kIHRoZSBmb2xsb3dpbmcgbGlzdCBzdW1tYXJpemVzIHRoZSBrZXJuZWwgbW9kaWZpY2F0aW9uIGdlbmVyYWwgd29ya2Zsb3cuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nIgorICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iNWluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCB1cCB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9lbXBoYXNpcz46ICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3RoZS1saW51eC1kaXN0cm8nPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3VsaW5rPiIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNwYWNrYWdlcyc+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3VsaW5rPiIgc2VjdGlvbnMgYm90aAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIHJlcXVpcmVtZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3RhYmxpc2ggYSBsb2NhbCBjb3B5IG9mIHByb2plY3QgZmlsZXMgb24geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtPC9lbXBoYXNpcz46ICBIYXZpbmcgdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5PC9saW5rPiBvbiB5b3VyIHN5c3RlbSBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0b29scworICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGdldCB0aGVzZSBmaWxlcywgc2VlIHRoZSBidWxsZXRlZCBpdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbG9jYWwteXAtcmVsZWFzZSc+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC9saW5rPiIgZWFybGllciBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzdGFibGlzaCB0aGUgdGVtcG9yYXJ5IGtlcm5lbCBzb3VyY2UgZmlsZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBvcmFyeSBrZXJuZWwgc291cmNlIGZpbGVzIGFyZSBrZXB0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIHlvdSBydW4gQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG5ldmVyIGJ1aWx0IHRoZSBrZXJuZWwgaW4gd2hpY2ggeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RlZCwgeW91IG5lZWQgdG8gcnVuIGFuIGluaXRpYWwgYnVpbGQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaCBsb2NhbCBrZXJuZWwgc291cmNlIGZpbGVzLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgYnVpbGRpbmcgYW4gaW1hZ2UgZm9yIHRoZSBmaXJzdCB0aW1lLCB5b3UgbmVlZCB0byBnZXQgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCByZWFkeSBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudjwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFsc28gbmVlZCB0byBiZSBzdXJlIHR3byBrZXkgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBlbnRpcmUgcHJvY2VzcyBmb3IgYnVpbGRpbmcgYW4gaW1hZ2UgaXMgb3ZlcnZpZXdlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gcmVmZXJlbmNlIHRoaXMgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJ1aWxkIHByb2Nlc3Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZiBpbWFnZXMgdG8gc2F0aXNmeSBkaWZmZXJlbnQgbmVlZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIgY2hhcHRlciBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgY2hhbmdlcyB0byB0aGUga2VybmVsIHNvdXJjZSBjb2RlIGlmCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlPC9lbXBoYXNpcz46ICBNb2RpZnlpbmcgdGhlIGtlcm5lbCBkb2VzIG5vdCBhbHdheXMgbWVhbiBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGhhdmUgdG8gZG8gdGhpcywgeW91IG1ha2UgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBpZiBhcHBsaWNhYmxlPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIHNpdHVhdGlvbiBjYWxscyBmb3IgY2hhbmdpbmcgdGhlIGtlcm5lbCdzCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+PGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBpbnRlcmFjdGl2ZWx5IGRldmVsb3AgYW5kIHRlc3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMgeW91IGFyZSBtYWtpbmcgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNhdmluZyBjaGFuZ2VzIHlvdSBtYWtlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdXBkYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtlcm5lbCdzIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5XYXJuaW5nPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnkgdG8gcmVzaXN0IHRoZSB0ZW1wdGF0aW9uIHRvIGRpcmVjdGx5IGVkaXQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50bXAvc3lzcm9vdHMvPHJlcGxhY2VhYmxlPm1hY2hpbmUtbmFtZTwvcmVwbGFjZWFibGU+L2tlcm5lbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvaW5nIHNvLCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHJlZ2VuZXJhdGVzIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyBtYWRlIHVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB5b3UgaGF2ZSBzYXZlZCB0aGVtLCB5b3UgY2FuIGRpcmVjdGx5IGNvbXBhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFnYWluc3QgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIG9yaWdpbmFsIGFuZCBnYXRoZXIgdGhvc2UgY2hhbmdlcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWNvbmZpZy1mcmFnbWVudHMnPmNvbmZpZ3VyYXRpb24gZnJhZ21lbnQgZmlsZTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIHJlZmVyZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCdzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkFkZGl0aW9uYWxseSwgaWYgeW91IGFyZSB3b3JraW5nIGluIGEgQlNQIGxheWVyCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVlZCB0byBtb2RpZnkgdGhlIEJTUCdzIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I21hbmFnaW5nLWtlcm5lbC1wYXRjaGVzLWFuZC1jb25maWctaXRlbXMtd2l0aC15b2N0by1rZXJuZWwnPjxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgYXMgd2VsbCBhcyA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1rZXJuZWw8L2ZpbGVuYW1lPiBzY3JpcHQgbGV0cworICAgICAgICAgICAgICAgICAgICAgICAgeW91IGludGVyYWN0aXZlbHkgc2V0IHVwIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlYnVpbGQgdGhlIGtlcm5lbCBpbWFnZSB3aXRoIHlvdXIgY2hhbmdlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgUmVidWlsZGluZyB0aGUga2VybmVsIGltYWdlIGFwcGxpZXMgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXdvcmtmbG93Jz4KKyAgICA8dGl0bGU+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgV29ya2Zsb3c8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGludm9sdmVzIGNyZWF0aW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQKKyAgICAgICAgdG8gcnVuIG9uIHlvdXIgdGFyZ2V0IGhhcmR3YXJlLCB3aGljaCBpcyBydW5uaW5nIGEga2VybmVsIGltYWdlIGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGFuCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2FkdC1pbnRybyc+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKTwvdWxpbms+CisgICAgICAgIGFuZCBzdGFuZC1hbG9uZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN0aGUtY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluJz5jcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zPC91bGluaz4KKyAgICAgICAgdGhhdCBmYWNpbGl0YXRlIHF1aWNrIGRldmVsb3BtZW50IGFuZCBpbnRlZ3JhdGlvbiBvZiB5b3VyIGFwcGxpY2F0aW9uIGludG8gaXRzIHJ1bnRpbWUgZW52aXJvbm1lbnQuCisgICAgICAgIFVzaW5nIHRoZSBBRFQgYW5kIHRvb2xjaGFpbnMsIHlvdSBjYW4gY29tcGlsZSBhbmQgbGluayB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICBZb3UgY2FuIHRoZW4gZGVwbG95IHlvdXIgYXBwbGljYXRpb24gdG8gdGhlIGFjdHVhbCBoYXJkd2FyZSBvciB0byB0aGUgUUVNVSBlbXVsYXRvciBmb3IgdGVzdGluZy4KKyAgICAgICAgSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoZSBwb3B1bGFyIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERSwKKyAgICAgICAgeW91IGNhbiB1c2UgYW4gRWNsaXBzZSBZb2N0byBQbHVnLWluIHRvCisgICAgICAgIGFsbG93IHlvdSB0byBkZXZlbG9wLCBkZXBsb3ksIGFuZCB0ZXN0IHlvdXIgYXBwbGljYXRpb24gYWxsIGZyb20gd2l0aGluIEVjbGlwc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIHdlIHN0cm9uZ2x5IHN1Z2dlc3QgdXNpbmcgdGhlIEFEVCB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24sIHRoaXMgb3B0aW9uIG1pZ2h0IG5vdAorICAgICAgICBiZSBiZXN0IGZvciB5b3UuCisgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIHlvdSBjYW4gc3RpbGwgdXNlIHBpZWNlcyBvZiB0aGUgWW9jdG8gUHJvamVjdCBmb3IgeW91ciBkZXZlbG9wbWVudCBwcm9jZXNzLgorICAgICAgICBIb3dldmVyLCBiZWNhdXNlIHRoZSBwcm9jZXNzIGNhbiB2YXJ5IGdyZWF0bHksIHRoaXMgbWFudWFsIGRvZXMgbm90IHByb3ZpZGUgZGV0YWlsIG9uIHRoZSBwcm9jZXNzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd3b3JrZmxvdy11c2luZy10aGUtYWR0LWFuZC1lY2xpcHNlJz4KKyAgICAgICAgPHRpdGxlPldvcmtmbG93IFVzaW5nIHRoZSBBRFQgYW5kIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIGhlbHAgeW91IHVuZGVyc3RhbmQgaG93IGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IHdvcmtzIHVzaW5nIHRoZSBBRFQsIHRoaXMgc2VjdGlvbgorICAgICAgICAgICAgcHJvdmlkZXMgYW4gb3ZlcnZpZXcgb2YgdGhlIGdlbmVyYWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyBhbmQgYSBkZXRhaWxlZCBleGFtcGxlIG9mIHRoZSBwcm9jZXNzCisgICAgICAgICAgICBhcyBpdCBpcyB1c2VkIGZyb20gd2l0aGluIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpbGx1c3RyYXRpb24gYW5kIGxpc3Qgc3VtbWFyaXplIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBnZW5lcmFsIHdvcmtmbG93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyIKKyAgICAgICAgICAgICAgICB3aWR0aD0iN2luIiBkZXB0aD0iOGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZT0iMTAwIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHRoZSBob3N0IHN5c3RlbSBmb3IgdGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNkZXRhaWxlZC1zdXBwb3J0ZWQtZGlzdHJvcyc+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iIHNlY3Rpb25zIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBmb3IgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBiZSBzdXJlIHlvdXIgaG9zdCBzeXN0ZW0gaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHRlcm08L2ZpbGVuYW1lPiBwYWNrYWdlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWN1cmUgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHRhcmdldCBpbWFnZTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBoYXZlIGEgdGFyZ2V0IGtlcm5lbCBpbWFnZSB0aGF0IGhhcyBiZWVuIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+RGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFlvY3RvIFByb2plY3QgaGFzIGEgcHJlLWJ1aWx0IGltYWdlIHRoYXQgbWF0Y2hlcyB5b3VyIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIHdoZXJlIHlvdSBhcmUgZ29pbmcgdG8gcnVuIHRoZSBpbWFnZSB3aGlsZSB5b3UgZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIChRRU1VIG9yIHJlYWwgaGFyZHdhcmUpLCB0aGUgYXJlYSBmcm9tIHdoaWNoIHlvdSBnZXQgdGhlIGltYWdlIGRpZmZlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3dubG9hZCB0aGUgaW1hZ2UgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTUFDSElORVNfRExfVVJMOyc+PGZpbGVuYW1lPm1hY2hpbmVzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgc3VwcG9ydGVkIGFuZCB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRlc3QgeW91ciBhcHBsaWNhdGlvbiBvbiBhY3R1YWwgaGFyZHdhcmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvd25sb2FkIHRoZSBpbWFnZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFjaGluZXMvcWVtdTwvZmlsZW5hbWU+PC91bGluaz4gaWYgeW91ciB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgeW91IGFyZSBnb2luZyB0byBkZXZlbG9wIGFuZCB0ZXN0IHlvdXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW11bGF0b3IuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHlvdXIgaW1hZ2UgaWYgeW91IGNhbm5vdCBmaW5kIGEgcHJlLWJ1aWx0IGltYWdlIHRoYXQgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzaW1pbGFyIHRvIGEgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnkgdGhlIGtlcm5lbCBpbWFnZSBiZWZvcmUgeW91IGJ1aWxkIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgYW4gZXhhbXBsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIHByZS1idWlsdCBrZXJuZWwgaW1hZ2UgbmFtaW5nIHNjaGVtZXMgZm9yIGltYWdlcworICAgICAgICAgICAgICAgICAgICB0aGF0IGNhbiBydW4gb24gdGhlIFFFTVUgZW11bGF0b3IsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjZG93bmxvYWRpbmctdGhlLXByZS1idWlsdC1saW51eC1rZXJuZWwnPkRvd25sb2FkaW5nIHRoZSBQcmUtQnVpbHQgTGludXggS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbnN0YWxsIHRoZSBBRFQ8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIEFEVCBwcm92aWRlcyBhIHRhcmdldC1zcGVjaWZpYyBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4sIHRoZSByb290IGZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yLCBhbmQgb3RoZXIgdG9vbHMgdGhhdCBjYW4gaGVscCB5b3UgZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBwb3NzaWJsZSB0byBnZXQgdGhlc2UgcGllY2VzIHNlcGFyYXRlbHksIHRoZSBBRFQgSW5zdGFsbGVyIHByb3ZpZGVzIGFuCisgICAgICAgICAgICAgICAgICAgIGVhc3ksIGluY2x1c2l2ZSBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZ2V0IHRoZXNlIHBpZWNlcyBieSBydW5uaW5nIGFuIEFEVCBpbnN0YWxsZXIgc2NyaXB0LCB3aGljaCBpcyBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgQURULCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+VXNpbmcgdGhlIEFEVCBJbnN0YWxsZXI8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPklmIGFwcGxpY2FibGUsIHNlY3VyZSB0aGUgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIENyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgY2hvb3NlIG5vdCB0byBpbnN0YWxsIHRoZSBBRFQgdXNpbmcgdGhlIEFEVCBJbnN0YWxsZXIsCisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIGZpbmQgYW5kIGRvd25sb2FkIHRoZSBhcHByb3ByaWF0ZSByb290IGZpbGVzeXN0ZW0gYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIHRhcmJhbGxzIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGluIHRoZSBzYW1lIGFyZWEgdXNlZAorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGltYWdlIHlvdSBhcmUgcnVubmluZywgdGhlIHJvb3QgZmlsZXN5c3RlbSB5b3UgbmVlZCBkaWZmZXJzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBkZXZlbG9waW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgcnVucyBvbiBhbiBpbWFnZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIFNhdG8sIHlvdSBuZWVkIHRvIGdldCBhIHJvb3QgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIFNhdG8uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgY2FuIGZpbmQgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1RPT0xDSEFJTl9ETF9VUkw7Jz48ZmlsZW5hbWU+dG9vbGNoYWluczwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gZ2V0IHRoZSBjb3JyZWN0IHRvb2xjaGFpbiBmb3IgeW91ciBkZXZlbG9wbWVudCBob3N0IGFuZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLWFuLWV4aXN0aW5nLXRvb2xjaGFpbi10YXJiYWxsJz5Vc2luZyBhIENyb3NzLVRvb2xjaGFpbiBUYXJiYWxsPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjaW5zdGFsbGluZy10aGUtdG9vbGNoYWluJz5JbnN0YWxsaW5nIHRoZSBUb29sY2hhaW48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uIG9uIGZpbmRpbmcgYW5kIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3QgdG9vbGNoYWluIGJhc2VkIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0gYW5kIHlvdXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYW5kIGJ1aWxkIHlvdXIgYXBwbGljYXRpb248L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgQXQgdGhpcyBwb2ludCwgeW91IG5lZWQgdG8gaGF2ZSBzb3VyY2UgZmlsZXMgZm9yIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZpbGVzLCB5b3UgY2FuIHVzZSB0aGUgRWNsaXBzZSBJREUgdG8gaW1wb3J0IHRoZW0gYW5kIGJ1aWxkIHRoZQorICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBFY2xpcHNlLCB5b3UgbmVlZCB0byB1c2UgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCB0byBjcmVhdGUgdGhlIGltYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGVwbG95IHRoZSBpbWFnZSB3aXRoIHRoZSBhcHBsaWNhdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiBkZXBsb3kgeW91ciBpbWFnZSB0byB0aGUgaGFyZHdhcmUgb3IgdG8KKyAgICAgICAgICAgICAgICAgICAgUUVNVSB0aHJvdWdoIHRoZSBwcm9qZWN0J3MgcHJlZmVyZW5jZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBFY2xpcHNlIElERSwgdGhlbiB5b3UgbmVlZCB0byBkZXBsb3kgdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBoYXJkd2FyZSB1c2luZyBvdGhlciBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICBPciwgaWYgeW91IGFyZSB1c2luZyBRRU1VLCB5b3UgbmVlZCB0byB1c2UgdGhhdCB0b29sIGFuZAorICAgICAgICAgICAgICAgICAgICBsb2FkIHlvdXIgaW1hZ2UgaW4gZm9yIHRlc3RpbmcuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgZm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGVzdCBhbmQgZGVidWcgdGhlIGFwcGxpY2F0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91ciBhcHBsaWNhdGlvbiBpcyBkZXBsb3llZCwgeW91IG5lZWQgdG8gdGVzdCBpdC4KKyAgICAgICAgICAgICAgICAgICAgV2l0aGluIHRoZSBFY2xpcHNlIElERSwgeW91IGNhbiB1c2UgdGhlIGRlYnVnZ2luZyBlbnZpcm9ubWVudCBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBzZXQgb2YgdXNlci1zcGFjZSB0b29scyBpbnN0YWxsZWQgYWxvbmcgd2l0aCB0aGUgQURUIHRvIGRlYnVnIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIE9mIGNvdXJzZSwgdGhlIHNhbWUgdXNlci1zcGFjZSB0b29scyBhcmUgYXZhaWxhYmxlIHNlcGFyYXRlbHkgaWYgeW91IGNob29zZQorICAgICAgICAgICAgICAgICAgICBub3QgdG8gdXNlIHRoZSBFY2xpcHNlIElERS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdhZHQtZWNsaXBzZSc+CisgICAgICAgIDx0aXRsZT5Xb3JraW5nIFdpdGhpbiBFY2xpcHNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBFY2xpcHNlIElERSBpcyBhIHBvcHVsYXIgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgYW5kIGl0IGZ1bGx5CisgICAgICAgICAgICBzdXBwb3J0cyBkZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0cyBib3RoIHRoZSBMdW5hCisgICAgICAgICAgICAgICAgYW5kIEtlcGxlciB2ZXJzaW9ucyBvZiB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgVGh1cywgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBwcm92aWRlcyBzZXR1cCBpbmZvcm1hdGlvbiBmb3IKKyAgICAgICAgICAgICAgICBib3RoIHZlcnNpb25zLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUHJvamVjdCBQbHVnLWluCisgICAgICAgICAgICBpbnRvIHRoZSBFY2xpcHNlIElERSwgeW91IG1heGltaXplIHlvdXIgWW9jdG8gUHJvamVjdCBleHBlcmllbmNlLgorICAgICAgICAgICAgSW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIFBsdWctaW4gcmVzdWx0cyBpbiBhbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgdGhhdCBoYXMgZXh0ZW5zaW9ucyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gbGV0IHlvdSBtb3JlIGVhc2lseQorICAgICAgICAgICAgZGV2ZWxvcCBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoZXNlIGV4dGVuc2lvbnMgYWxsb3cgZm9yIGNyb3NzLWNvbXBpbGF0aW9uLCBkZXBsb3ltZW50LCBhbmQKKyAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiB5b3VyIG91dHB1dCBpbnRvIGEgUUVNVSBlbXVsYXRpb24gc2Vzc2lvbiBhcyB3ZWxsIGFzCisgICAgICAgICAgICBhY3R1YWwgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgWW91IGNhbiBhbHNvIHBlcmZvcm0gY3Jvc3MtZGVidWdnaW5nIGFuZCBwcm9maWxpbmcuCisgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgYWxzbyBzdXBwb3J0cyBhIHN1aXRlIG9mIHRvb2xzIHRoYXQgYWxsb3dzIHlvdQorICAgICAgICAgICAgdG8gcGVyZm9ybSByZW1vdGUgcHJvZmlsaW5nLCB0cmFjaW5nLCBjb2xsZWN0aW9uIG9mIHBvd2VyIGRhdGEsCisgICAgICAgICAgICBjb2xsZWN0aW9uIG9mIGxhdGVuY3kgZGF0YSwgYW5kIGNvbGxlY3Rpb24gb2YgcGVyZm9ybWFuY2UgZGF0YS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBFY2xpcHNlIElERQorICAgICAgICAgICAgWW9jdG8gUGx1Zy1pbiBhbmQgaG93IHRvIHVzZSBpdCB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC10aGUtZWNsaXBzZS1pZGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZGV2ZWxvcCB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGwgdGhlIG9wdGltYWwgdmVyc2lvbiBvZiB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmUgdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmUgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgRWNsaXBzZSBmcm9tIHlvdXIgZGlzdHJpYnV0aW9uJ3MgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluc3RhbGwgRWNsaXBzZSBmcm9tIHRoZSBvZmZpY2lhbCBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIHNpdGUgYXMgZGlyZWN0ZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdpbnN0YWxsaW5nLWVjbGlwc2UtaWRlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyB0aGUgRWNsaXBzZSBJREU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGhhdmUgdGhlIEx1bmEgU1IyICg0LjQuMikKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgRWNsaXBzZSBJREUgaW5zdGFsbGVkIG9uIHlvdXIgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgY3VycmVudGx5IGhhdmUgdGhlIEtlcGxlciA0LjMuMiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBhbmQgeW91IGRvIG5vdCB3YW50IHRvIHVwZ3JhZGUgdGhlIElERSwgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgS2VwbGVyIHRvIHdvcmsgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIHRoZSBMdW5hIFNSMiAoNC40LjIpIEVjbGlwc2UgSURFCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgeW91IGNhbiBmaW5kIHRoZSB0YXJiYWxsIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZFQ0xJUFNFX01BSU5fVVJMOyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEZyb20gdGhhdCBzaXRlLCBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIGRvd25sb2FkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICJFY2xpcHNlIElERSBmb3IgQy9DKysgRGV2ZWxvcGVycyIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgRWNsaXBzZSBQbGF0Zm9ybSwgdGhlIEphdmEKKyAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcG1lbnQgVG9vbHMgKEpEVCksIGFuZCB0aGUgUGx1Zy1pbiBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBkb3dubG9hZGVkIHRoZSB0YXJiYWxsLCBleHRyYWN0IGl0IGludG8gYQorICAgICAgICAgICAgICAgICAgICBjbGVhbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHVucGFjayBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCBFY2xpcHNlIElERSB0YXJiYWxsIGludG8gYSBjbGVhbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGRlZmF1bHQgbmFtZSA8ZmlsZW5hbWU+ZWNsaXBzZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgfgorICAgICAkIHRhciAteHp2ZiB+L0Rvd25sb2Fkcy9lY2xpcHNlLWNwcC1sdW5hLVNSMi1saW51eC1ndGsteDg2XzY0LnRhci5negorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UtaWRlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgSURFPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIHN0ZXBzIG5lZWRlZCB0byBjb25maWd1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgaW5zdGFsbGluZyBhbmQgY29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBFY2xpcHNlIElERS4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB0aGUgRWNsaXBzZSBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSBzdXJlIHlvdSBhcmUgaW4geW91ciBXb3JrYmVuY2ggYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICJJbnN0YWxsIE5ldyBTb2Z0d2FyZSIgZnJvbSB0aGUgIkhlbHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC1kb3duIG1lbnUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkx1bmEgLSAmRUNMSVBTRV9MVU5BX1VSTDs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlICJXb3JrIHdpdGg6IiBwdWxsLWRvd24gbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEtlcGxlciwgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LZXBsZXIgLSAmRUNMSVBTRV9LRVBMRVJfVVJMOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cGFuZCB0aGUgYm94IG5leHQgdG8gIkxpbnV4IFRvb2xzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxpbnV4IFRvb2xzIExUVG5nIFRyYWNlciBDb250cm9sPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxpbnV4IFRvb2xzIExUVG5nIFVzZXJzcGFjZSBBbmFseXNpczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MVFRuZyBLZXJuZWwgQW5hbHlzaXM8L2ZpbGVuYW1lPiBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGVzZSBzZWxlY3Rpb25zIGRvIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtZWFucyB0aGUgaXRlbXMgYXJlIGFscmVhZHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgS2VwbGVyLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxUVG5nIC0gTGludXggVHJhY2luZyBUb29sa2l0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgdGhlIGJveCBuZXh0IHRvICJNb2JpbGUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlIERldmVsb3BtZW50IiBhbmQgc2VsZWN0IHRoZSBmb2xsb3dpbmcgYm94ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdhaW4sIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGl0ZW1zIGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiwgdGhhdCBtZWFucyB0aGUgaXRlbXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBpbnN0YWxsZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5DL0MrKyBSZW1vdGUgTGF1bmNoIChSZXF1aXJlcyBSU0UgUmVtb3RlIFN5c3RlbSBFeHBsb3Jlcik8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlJlbW90ZSBTeXN0ZW0gRXhwbG9yZXIgRW5kLXVzZXIgUnVudGltZTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+UmVtb3RlIFN5c3RlbSBFeHBsb3JlciBVc2VyIEFjdGlvbnM8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlRhcmdldCBNYW5hZ2VtZW50IFRlcm1pbmFsIChDb3JlIFNESyk8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPlRDRiBSZW1vdGUgU3lzdGVtIEV4cGxvcmVyIGFkZC1pbjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+VENGIFRhcmdldCBFeHBsb3JlcjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwYW5kIHRoZSBib3ggbmV4dCB0byAiUHJvZ3JhbW1pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZXMiIGFuZCBzZWxlY3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkMvQysrIEF1dG90b29scyBTdXBwb3J0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkMvQysrIERldmVsb3BtZW50IFRvb2xzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgTHVuYSwgdGhlc2UgaXRlbXMgZG8gbm90IGFwcGVhciBvbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZXkgYXJlIGFscmVhZHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gYW5kIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBJREUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0naW5zdGFsbGluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyBvciBBY2Nlc3NpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBpbnN0YWxsIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW4gaW50byB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBJREUgb25lIG9mIHR3byB3YXlzOiAgdXNlIHRoZSBZb2N0byBQcm9qZWN0J3MgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICBVcGRhdGUgc2l0ZSB0byBpbnN0YWxsIHRoZSBwcmUtYnVpbHQgcGx1Zy1pbiBvciBidWlsZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCB0aGUgcGx1Zy1pbiBmcm9tIHRoZSBsYXRlc3Qgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J25ldy1zb2Z0d2FyZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5JbnN0YWxsaW5nIHRoZSBQcmUtYnVpbHQgUGx1Zy1pbiBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IEVjbGlwc2UgVXBkYXRlIFNpdGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCB0aGUgRWNsaXBzZSBZb2N0byBQbHVnLWluIGZyb20gdGhlIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZSwgZm9sbG93IHRoZXNlIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFydCB1cCB0aGUgRWNsaXBzZSBJREUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiBFY2xpcHNlLCBzZWxlY3QgIkluc3RhbGwgTmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIiBmcm9tIHRoZSAiSGVscCIgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJBZGQuLi4iIGluIHRoZSAiV29yayB3aXRoOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlYS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkVDTElQU0VfRExfUExVR0lOX1VSTDsvbHVuYTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQgYW5kIHByb3ZpZGUgYSBtZWFuaW5nZnVsIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlICJOYW1lIiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIEtlcGxlciwgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JkVDTElQU0VfRExfUExVR0lOX1VSTDsva2VwbGVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBVUkwgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk9LIiB0byBoYXZlIHRoZSBlbnRyeSBhZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IHRoZSBlbnRyeSBmb3IgdGhlIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgIldvcmsgd2l0aDoiIGRyb3AtZG93biBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hlY2sgdGhlIGJveGVzIG5leHQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIFBsdWctaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQml0YmFrZSBDb21tYW5kZXIgUGx1Zy1pbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgRG9jdW1lbnRhdGlvbiBwbHVnLWluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21wbGV0ZSB0aGUgcmVtYWluaW5nIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBzdGVwcyBhbmQgdGhlbiByZXN0YXJ0IHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElERSB0byBmaW5pc2ggdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNsaWNrICJPSyIgd2hlbiBwcm9tcHRlZCBhYm91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyBzb2Z0d2FyZSB0aGF0IGNvbnRhaW5zIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3ppcC1maWxlLW1ldGhvZCc+CisgICAgICAgICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgdGhlIFBsdWctaW4gVXNpbmcgdGhlIExhdGVzdCBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGluc3RhbGwgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBmcm9tIHRoZSBsYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IHVzaW5nIE9wZW5KREsgdG8gYnVpbGQgdGhlIHBsdWctaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgT3JhY2xlIEpESy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGF0LCBnbyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2phdmFzZS9kb3dubG9hZHMvamRrNy1kb3dubG9hZHMtMTg4MDI2MC5odG1sJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkb3dubG9hZCB0aGUgbGF0ZXN0IGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2YSBTRSBEZXZlbG9wbWVudCBLaXQgdGFyYmFsbCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0IGl0IGludG8geW91ciBob21lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgc2hlbGwgeW91IGFyZSBnb2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRvIHlvdXIgd29yaywgZXhwb3J0IHRoZSBsb2NhdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBPcmFjbGUgSmF2YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgc3RlcCBjcmVhdGVzIGEgbmV3IGZvbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgZXh0cmFjdGVkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cG9ydDwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcHJvdmlkZSB0aGUgc3BlY2lmaWMgbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgUEFUSD1+LzxyZXBsYWNlYWJsZT5leHRyYWN0ZWRfamRrX2xvY2F0aW9uPC9yZXBsYWNlYWJsZT4vYmluOiRQQVRICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgc2hlbGwsIGNyZWF0ZSBhIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHdpdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2VjbGlwc2UtcG9reQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGNoZWNrb3V0IHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgTHVuYSwgZG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCBsdW5hL3lvY3RvLTEuOAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcHV0cyB5b3UgaW4gYSBkZXRhY2hlZCBIRUFEIHN0YXRlLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmaW5lIHNpbmNlIHlvdSBhcmUgb25seSBnb2luZyB0byBiZSBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGRldmVsb3BpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBidWlsZGluZyBrZXBsZXIsIGNoZWNrb3V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcGxlci95b2N0by0xLjg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaGFuZ2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHdpdGhpbiB0aGUgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCBzY3JpcHRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNldCB1cCB0aGUgbG9jYWwgYnVpbGQgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgcnVubmluZyB0aGUgc2V0dXAgc2NyaXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgLi9zZXR1cC5zaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XaGVuIHRoZSBzY3JpcHQgZmluaXNoZXMgZXhlY3V0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBwcm9tcHRzIHlvdSB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+YnVpbGQuc2g8L2ZpbGVuYW1lPiBzY3JpcHQsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsc28gaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9mIHRoZSBHaXQgcmVwb3NpdG9yeSBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SdW4gdGhlIDxmaWxlbmFtZT5idWlsZC5zaDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCBhcyBkaXJlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBwcm92aWRlIHRoZSB0YWcgbmFtZSwgZG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gsIGFuZCBhIHJlbGVhc2UgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmx1bmEveW9jdG8tMS44PC9maWxlbmFtZT4gdGFnLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+IGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRTs8L2ZpbGVuYW1lPiBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEVDTElQU0VfSE9NRT0vaG9tZS9zY290dHJpZi9lY2xpcHNlLXBva3kvc2NyaXB0cy9lY2xpcHNlIC4vYnVpbGQuc2ggbHVuYS95b2N0by0xLjggbWFzdGVyICZESVNUUk9fTkFNRTsgMj4mYW1wOzEgfCB0ZWUgLWEgYnVpbGQubG9nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgcnVubmluZyB0aGUgc2NyaXB0LCB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3JnLnlvY3RvLnNkay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5yZWxlYXNlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmRhdGU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4tYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiBuZWNlc3NhcnksIHN0YXJ0IHRoZSBFY2xpcHNlIElERQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYmUgc3VyZSB5b3UgYXJlIGluIHRoZSBXb3JrYmVuY2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIkluc3RhbGwgTmV3IFNvZnR3YXJlIiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAiSGVscCIgcHVsbC1kb3duIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiQWRkIi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhbnl0aGluZyB5b3Ugd2FudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWUiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIkFyY2hpdmUiIGFuZCBicm93c2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpJUCBmaWxlIHlvdSBidWlsdCBpbiBzdGVwIGVpZ2h0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIFpJUCBmaWxlIHNob3VsZCBub3QgYmUgInVuemlwcGVkIiwgYW5kIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdGhlIDxmaWxlbmFtZT4qYXJjaGl2ZS56aXA8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkLnNoPC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgdGhlICJPSyIgYnV0dG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hlY2sgdGhlIGJveGVzIHRoYXQgYXBwZWFyIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YWxsYXRpb24gd2luZG93IHRvIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IEFEVCBQbHVnLWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Zb2N0byBQcm9qZWN0IEJpdGJha2UgQ29tbWFuZGVyIFBsdWctaW48L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WW9jdG8gUHJvamVjdCBEb2N1bWVudGF0aW9uIHBsdWctaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpbmlzaCB0aGUgaW5zdGFsbGF0aW9uIGJ5IGNsaWNraW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGFwcHJvcHJpYXRlIGJ1dHRvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2xpY2sgIk9LIiB3aGVuIHByb21wdGVkIGFib3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxpbmcgc29mdHdhcmUgdGhhdCBjb250YWlucyB1bnNpZ25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdGFydCB0aGUgRWNsaXBzZSBJREUgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEF0IHRoaXMgcG9pbnQgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbmZpZ3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtZWNsaXBzZS15b2N0by1wbHVnLWluJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbiBpbnZvbHZlcyBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBDcm9zcyBDb21waWxlciBvcHRpb25zIGFuZCB0aGUgVGFyZ2V0IG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9ucyB5b3UgY2hvb3NlIGJlY29tZSB0aGUgZGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIHByb2plY3RzLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gaGF2ZSBvcHBvcnR1bml0aWVzIHRvIGNoYW5nZSB0aGVtIGxhdGVyIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgeW91IGNvbmZpZ3VyZSB0aGUgcHJvamVjdCAoc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHN0YXJ0LCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIGZyb20gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIElERToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DaG9vc2UgIlByZWZlcmVuY2VzIiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5kb3ciIG1lbnUgdG8gZGlzcGxheSB0aGUgUHJlZmVyZW5jZXMgRGlhbG9nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJZb2N0byBQcm9qZWN0IEFEVCIgdG8gZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIHNjcmVlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRoZS1jcm9zcy1jb21waWxlci1vcHRpb25zJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Db21waWxlciBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNvbmZpZ3VyZSB0aGUgQ3Jvc3MgQ29tcGlsZXIgT3B0aW9ucywgeW91IG11c3Qgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZSBvZiB0b29sY2hhaW4sIHBvaW50IHRvIHRoZSB0b29sY2hhaW4sIHNwZWNpZnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeXNyb290IGxvY2F0aW9uLCBhbmQgc2VsZWN0IHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3RpbmcgdGhlIFRvb2xjaGFpbiBUeXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TdGFuZGFsb25lIHByZS1idWlsdCB0b29sY2hhaW48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBDcm9zcyBDb21waWxlciBPcHRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBQcmUtYnVpbHQgVG9vbGNoYWluOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgbW9kZSB3aGVuIHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdGFuZC1hbG9uZSBjcm9zcy10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyIGFuZCBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBidWlsZCBhIHRhcmdldCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgeW91IGp1c3Qgd2FudCB0byB1c2UgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHRvb2xjaGFpbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGlzdGluZyBrZXJuZWwgYW5kIHRhcmdldCByb290CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QnVpbGQgU3lzdGVtIERlcml2ZWQgVG9vbGNoYWluOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgbW9kZSBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluIGhhcyBiZWVuIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYnVpbHQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgYXJlIHVzaW5nIHRoZSB0b29sY2hhaW4gYnVuZGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIEJ1aWxkIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Qb2ludCB0byB0aGUgVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgdXNpbmcgYSBzdGFuZC1hbG9uZSBwcmUtYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB5b3Ugc2hvdWxkIGJlIHBvaW50aW5nIHRvIHdoZXJlIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZWQgdGhlIEFEVCBJbnN0YWxsZXIgc2NyaXB0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZCB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIHdpbGwgYmUgaW5zdGFsbGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX0FEVFBBVEhfRElSOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdGlvbnMgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2NvbmZpZ3VyaW5nLWFuZC1ydW5uaW5nLXRoZS1hZHQtaW5zdGFsbGVyLXNjcmlwdCc+Q29uZmlndXJpbmcgYW5kIFJ1bm5pbmcgdGhlIEFEVCBJbnN0YWxsZXIgU2NyaXB0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3VpZGUgZGVzY3JpYmUgaG93IHRvIGluc3RhbGwgYSBzdGFuZC1hbG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcm9zcy10b29sY2hhaW4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIHVzaW5nIGEgc3lzdGVtLWRlcml2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluLCB0aGUgcGF0aCB5b3UgcHJvdmlkZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Ub29sY2hhaW4gUm9vdCBMb2NhdGlvbjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS10b29sY2hhaW4tZnJvbS13aXRoaW4tdGhlLWJ1aWxkLXRyZWUnPlVzaW5nIEJpdEJha2UgYW5kIHRoZSBCdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXIncyBHdWlkZSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgdGhlIHRvb2xjaGFpbiBpbnRvIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGVjaWZ5IHRoZSBTeXNyb290IExvY2F0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbG9jYXRpb24gaXMgd2hlcmUgdGhlIHJvb3QgZmlsZXN5c3RlbSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBoYXJkd2FyZSByZXNpZGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlZCB0aGUgQURUIEluc3RhbGxlciBzY3JpcHQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdGhlIGxvY2F0aW9uIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBmb2xkZXIgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3QteW9jdG8vPC9maWxlbmFtZT48cmVwbGFjZWFibGU+dGFyZ2V0X2FyY2g8L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB3aGVuIHlvdSB1c2UgdGhlIEFEVCBJbnN0YWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQvcG9reS8mRElTVFJPOy9zeXNyb290czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIGlzIHVzZWQgZm9yIHRoZSBRRU1VCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRoZSBORlMgYm9vdCBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB1c2VkIGVpdGhlciBvZiB0aGUgb3RoZXIgdHdvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluIG9yIGRpZCBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0IHRoZSBBRFQgSW5zdGFsbGVyIHNjcmlwdCdzIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgdGhlbiB0aGUgbG9jYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN5c3Jvb3QgZmlsZXN5c3RlbSBkZXBlbmRzIG9uIHdoZXJlIHlvdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGV4dHJhY3RlZCBhbmQgaW5zdGFsbGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gYW5kIG9uIGhvdyB0byBleHRyYWN0IGFuZCBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNyb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2VsZWN0IHRoZSBUYXJnZXQgQXJjaGl0ZWN0dXJlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIHRoZSB0eXBlIG9mIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgZ29pbmcgdG8gdXNlIG9yIGVtdWxhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgcHVsbC1kb3duCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UYXJnZXQgQXJjaGl0ZWN0dXJlPC9maWxlbmFtZT4gbWVudQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBtYWtlIHlvdXIgc2VsZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHVsbC1kb3duIG1lbnUgc2hvdWxkIGhhdmUgdGhlIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgYXJjaGl0ZWN0dXJlIHlvdSBuZWVkIGlzIG5vdCBsaXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbnUsIHlvdSB3aWxsIG5lZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdjb25maWd1cmluZy10aGUtdGFyZ2V0LW9wdGlvbnMnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgdGhlIFRhcmdldCBPcHRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY2hvb3NlIHRvIGVtdWxhdGUgaGFyZHdhcmUgdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtdWxhdG9yLCBvciB5b3UgY2FuIGNob29zZSB0byBydW4geW91ciBpbWFnZSBvbiBhY3R1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1VIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBlbXVsYXRvciwgeW91IGFsc28gbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGtlcm5lbCBhbmQgc3BlY2lmeSBhbnkgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3Ugc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkIHN5c3RlbSBkZXJpdmVkIHRvb2xjaGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IGtlcm5lbCB5b3UgYnVpbHQgd2lsbCBiZSBsb2NhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBCdWlsZCBEaXJlY3RvcnkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3RhbmRhbG9uZSBwcmUtYnVpbHQgdG9vbGNoYWluPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcmUtYnVpbHQgaW1hZ2UgeW91IGRvd25sb2FkZWQgaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZGlyZWN0b3J5IHlvdSBzcGVjaWZpZWQgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZCB0aGUgaW1hZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Nb3N0IGN1c3RvbSBvcHRpb25zIGFyZSBmb3IgYWR2YW5jZWQgUUVNVQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VycyB0byBmdXJ0aGVyIGN1c3RvbWl6ZSB0aGVpciBRRU1VIGluc3RhbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVzZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYmV0d2VlbiBwYWlyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVkIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2tldHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXJpYWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5vZ3JhcGhpYzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmt2bTwvZmlsZW5hbWU+IG11c3QgYWxsIGJlIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNrZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5tYW4gcWVtdTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IGhlbHAgb24gYWxsIHRoZSBvcHRpb25zIGFuZCB0aGVpciB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgc2VyaWFsIOKAmCZsdDstbSAyNTYgLWZ1bGwtc2NyZWVuJmd0O+KAmQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgbW9kZSwgU3lzcm9vdCBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgQ3Jvc3MtQ29tcGlsZXIgT3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3lzcm9vdCBMb2NhdGlvbjo8L2ZpbGVuYW1lPiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHRlcm5hbCBIVzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdpbGwgYmUgdXNpbmcgYWN0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrIHRoZSAiT0siIHRvIHNhdmUgeW91ciBwbHVnLWluIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgUHJvamVjdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHR3byB0eXBlcyBvZiBwcm9qZWN0czogIEF1dG90b29scy1iYXNlZCwgb3IKKyAgICAgICAgICAgICAgICBNYWtlZmlsZS1iYXNlZC4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byBjcmVhdGUgQXV0b3Rvb2xzLWJhc2VkIHByb2plY3RzCisgICAgICAgICAgICAgICAgZnJvbSB3aXRoaW4gdGhlIEVjbGlwc2UgSURFLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBjcmVhdGluZyBNYWtlZmlsZS1iYXNlZCBwcm9qZWN0cyBpbiBhCisgICAgICAgICAgICAgICAgdGVybWluYWwgd2luZG93LCBzZWUgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctdGhlLWNvbW1hbmQtbGluZSc+VXNpbmcgdGhlIENvbW1hbmQgTGluZTwvdWxpbms+IgorICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBwcm9qZWN0IG5hbWVzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHNwYWNlcywgdW5kZXJzY29yZXMsIGV0Yy4pLiAgRG9pbmcgc28gY2FuCisgICAgICAgICAgICAgICAgICAgIGNhdXNlIGNvbmZpZ3VyYXRpb24gdG8gZmFpbC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGNyZWF0ZSBhIHByb2plY3QgYmFzZWQgb24gYSBZb2N0byB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5CisgICAgICAgICAgICAgICAgdGhlIHNvdXJjZSBjb2RlLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJQcm9qZWN0IiBmcm9tIHRoZSAiRmlsZSAtPiBOZXciIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvdWJsZSBjbGljayA8ZmlsZW5hbWU+Q0MrKzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Eb3VibGUgY2xpY2sgPGZpbGVuYW1lPkMgUHJvamVjdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIHByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBhbmQgPGZpbGVuYW1lPllvY3RvIFByb2plY3QgQURUIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCA8ZmlsZW5hbWU+SGVsbG8gV29ybGQgQU5TSSBDIEF1dG90b29scyBQcm9qZWN0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFuIEF1dG90b29scy1iYXNlZCBwcm9qZWN0IGJhc2VkIG9uIGEgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHV0IGEgbmFtZSBpbiB0aGUgPGZpbGVuYW1lPlByb2plY3QgbmFtZTo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIGh5cGhlbnMgYXMgcGFydCBvZiB0aGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgIk5leHQiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkF1dGhvcjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNvcHlyaWdodCBub3RpY2U8L2ZpbGVuYW1lPiBmaWVsZHMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlIHN1cmUgdGhlIDxmaWxlbmFtZT5MaWNlbnNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIGlzIGNvcnJlY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRmluaXNoIi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHRoZSAib3BlbiBwZXJzcGVjdGl2ZSIgcHJvbXB0IGFwcGVhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGljayAiWWVzIiBzbyB0aGF0IHlvdSBpbiB0aGUgQy9DKysgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBsZWZ0LWhhbmQgbmF2aWdhdGlvbiBwYW5lIHNob3dzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGRpc3BsYXkgeW91ciBzb3VyY2UgYnkgZG91YmxlIGNsaWNraW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIHNvdXJjZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctdGhlLWNyb3NzLXRvb2xjaGFpbnMnPgorICAgICAgICAgICAgPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBDcm9zcy1Ub29sY2hhaW5zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGVhcmxpZXIgc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY29uZmlndXJpbmctdGhlLWVjbGlwc2UteW9jdG8tcGx1Zy1pbic+Q29uZmlndXJpbmcgdGhlIEVjbGlwc2UgWW9jdG8gUGx1Zy1pbjwvbGluaz4iLAorICAgICAgICAgICAgICAgIHNldHMgdXAgdGhlIGRlZmF1bHQgcHJvamVjdCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzIGZvciBhIGdpdmVuIHByb2plY3QgYnkgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJDaGFuZ2UgWW9jdG8gUHJvamVjdCBTZXR0aW5ncyIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJQcm9qZWN0IiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gYnJpbmdzIHVwIHRoZSBZb2N0byBQcm9qZWN0IFNldHRpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cgYW5kIGFsbG93cyB5b3UgdG8gbWFrZSBjaGFuZ2VzIHNwZWNpZmljIHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpdmlkdWFsIHByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QnkgZGVmYXVsdCwgdGhlIENyb3NzIENvbXBpbGVyIE9wdGlvbnMgYW5kIFRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9ucyBmb3IgYSBwcm9qZWN0IGFyZSBpbmhlcml0ZWQgZnJvbSBzZXR0aW5ncyB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIHVzaW5nIHRoZSBQcmVmZXJlbmNlcyBEaWFsb2cgYXMgZGVzY3JpYmVkCisgICAgICAgICAgICAgICAgICAgICAgICBlYXJsaWVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NvbmZpZ3VyaW5nLXRoZS1lY2xpcHNlLXlvY3RvLXBsdWctaW4nPkNvbmZpZ3VyaW5nIHRoZSBFY2xpcHNlIFlvY3RvIFBsdWctaW48L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgU2V0dGluZ3MgRGlhbG9nIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRob3NlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSB5b3VyIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNsaWNrICJPSyIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0LWNsaWNrIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgIlJlY29uZmlndXJlIFByb2plY3QiIGZyb20gdGhlIHBvcC11cCBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWxlY3Rpb24gcmVjb25maWd1cmVzIHRoZSBwcm9qZWN0IGJ5IHJ1bm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZ2VuLnNoPC9maWxlbmFtZT4gaW4gdGhlIHdvcmtzcGFjZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgYWxzbyBydW5zIDxmaWxlbmFtZT5saWJ0b29saXplPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YWNsb2NhbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2hlYWRlcjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG9tYWtlIC0tYTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uL2NvbmZpZ3VyZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgb24gdGhlICJDb25zb2xlIiB0YWIgYmVuZWF0aCB5b3VyIHNvdXJjZSBjb2RlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIHJlc3VsdHMgb2YgcmVjb25maWd1cmluZyB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLXRoZS1wcm9qZWN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyB0aGUgUHJvamVjdDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGJ1aWxkIHRoZSBwcm9qZWN0IHNlbGVjdCAiQnVpbGQgUHJvamVjdCIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAiUHJvamVjdCIgbWVudS4KKyAgICAgICAgICAgICAgICBUaGUgY29uc29sZSBzaG91bGQgdXBkYXRlIGFuZCB5b3UgY2FuIG5vdGUgdGhlIGNyb3NzLWNvbXBpbGVyCisgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzdGFydGluZy1xZW11LWluLXVzZXItc3BhY2UtbmZzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlN0YXJ0aW5nIFFFTVUgaW4gVXNlci1TcGFjZSBORlMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHN0YXJ0IHRoZSBRRU1VIGVtdWxhdG9yIGZyb20gd2l0aGluIEVjbGlwc2UsIGZvbGxvdyB0aGVzZQorICAgICAgICAgICAgICAgIHN0ZXBzOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4cG9zZSBhbmQgc2VsZWN0ICJFeHRlcm5hbCBUb29scyIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICJSdW4iIG1lbnUuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGltYWdlIHNob3VsZCBhcHBlYXIgYXMgYSBzZWxlY3RhYmxlIG1lbnUgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IHlvdXIgaW1hZ2UgZnJvbSB0aGUgbWVudSB0byBsYXVuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbXVsYXRvciBpbiBhIG5ldyB3aW5kb3cuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIG5lZWRlZCwgZW50ZXIgeW91ciBob3N0IHJvb3QgcGFzc3dvcmQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaGVsbCB3aW5kb3cgYXQgdGhlIHByb21wdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2V0cyB1cCBhIDxmaWxlbmFtZT5UYXAgMDwvZmlsZW5hbWU+IGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCBmb3IgcnVubmluZyBpbiB1c2VyLXNwYWNlIE5GUyBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5XYWl0IGZvciBRRU1VIHRvIGxhdW5jaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgUUVNVSBsYXVuY2hlcywgeW91IGNhbiBiZWdpbiBvcGVyYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGF0IGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgT25lIHVzZWZ1bCB0YXNrIGF0IHRoaXMgcG9pbnQgd291bGQgYmUgdG8gZGV0ZXJtaW5lIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgSVAgQWRkcmVzcyBmb3IgdGhlIHVzZXItc3BhY2UgTkZTIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlcGxveWluZy1hbmQtZGVidWdnaW5nLXRoZS1hcHBsaWNhdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+RGVwbG95aW5nIGFuZCBEZWJ1Z2dpbmcgdGhlIEFwcGxpY2F0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGUgUUVNVSBlbXVsYXRvciBpcyBydW5uaW5nIHRoZSBpbWFnZSwgeW91IGNhbiBkZXBsb3kKKyAgICAgICAgICAgICAgICB5b3VyIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBFY2xpcHNlIElERSBhbmQgdGhlbiB1c2UKKyAgICAgICAgICAgICAgICB0aGUgZW11bGF0b3IgdG8gcGVyZm9ybSBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0ICJEZWJ1ZyBDb25maWd1cmF0aW9ucy4uLiIgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJSdW4iIG1lbnUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgbGVmdCBhcmVhLCBleHBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DL0MrK1JlbW90ZSBBcHBsaWNhdGlvbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Mb2NhdGUgeW91ciBwcm9qZWN0IGFuZCBzZWxlY3QgaXQgdG8gYnJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwIGEgbmV3IHRhYmJlZCB2aWV3IGluIHRoZSBEZWJ1ZyBDb25maWd1cmF0aW9ucyBEaWFsb2cuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVudGVyIHRoZSBhYnNvbHV0ZSBwYXRoIGludG8gd2hpY2ggeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGRlcGxveSB0aGUgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlICJSZW1vdGUgQWJzb2x1dGUgRmlsZSBQYXRoIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgQy9DKytBcHBsaWNhdGlvbjoiIGZpZWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW4vPHJlcGxhY2VhYmxlPnByb2dyYW1uYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2xpY2sgb24gdGhlICJEZWJ1Z2dlciIgdGFiIHRvIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLXRvb2wgZGVidWdnZXIgeW91IGFyZSB1c2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrIG9uIHRoZSAiTWFpbiIgdGFiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gdG8gdGhlIFFFTVUgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGNsaWNraW5nIG9uICJuZXciLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VsZWN0IDxmaWxlbmFtZT5UQ0Y8L2ZpbGVuYW1lPiwgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJOZXh0Ii48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsZWFyIG91dCB0aGUgImhvc3QgbmFtZSIgZmllbGQgYW5kIGVudGVyCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSVAgQWRkcmVzcyBkZXRlcm1pbmVkIGVhcmxpZXIuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DbGljayAiRmluaXNoIiB0byBjbG9zZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE5ldyBDb25uZWN0aW9ucyBEaWFsb2cuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGRyb3AtZG93biBtZW51IG5vdyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIiBmaWVsZCBhbmQgcGljayB0aGUgSVAgQWRkcmVzcyB5b3UgZW50ZXJlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJEZWJ1ZyIgdG8gYnJpbmcgdXAgYSBsb2dpbiBzY3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsb2dpbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFjY2VwdCB0aGUgZGVidWcgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctdXNlci1zcGFjZS10b29scyc+CisgICAgICAgICAgICA8dGl0bGU+UnVubmluZyBVc2VyLVNwYWNlIFRvb2xzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIgaW4gdGhlIG1hbnVhbCwgc2V2ZXJhbCB0b29scyBleGlzdCB0aGF0CisgICAgICAgICAgICAgICAgZW5oYW5jZSB5b3VyIGRldmVsb3BtZW50IGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgVGhlc2UgdG9vbHMgYXJlIGFpZHMgaW4gZGV2ZWxvcGluZyBhbmQgZGVidWdnaW5nIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgICAgIGFuZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlc2UgdXNlci1zcGFjZSB0b29scyBmcm9tIHdpdGhpbiB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgIElERSB0aHJvdWdoIHRoZSAiWW9jdG9Qcm9qZWN0VG9vbHMiIG1lbnUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgeW91IHBpY2sgYSB0b29sLCB5b3UgbmVlZCB0byBjb25maWd1cmUgaXQgZm9yIHRoZSByZW1vdGUKKyAgICAgICAgICAgICAgICB0YXJnZXQuCisgICAgICAgICAgICAgICAgRXZlcnkgdG9vbCBuZWVkcyB0byBoYXZlIHRoZSBjb25uZWN0aW9uIGNvbmZpZ3VyZWQuCisgICAgICAgICAgICAgICAgWW91IG11c3Qgc2VsZWN0IGFuIGV4aXN0aW5nIFRDRi1iYXNlZCBSU0UgY29ubmVjdGlvbiB0byB0aGUKKyAgICAgICAgICAgICAgICByZW1vdGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIElmIG9uZSBkb2VzIG5vdCBleGlzdCwgY2xpY2sgIk5ldyIgdG8gY3JlYXRlIG9uZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBzcGVjaWZpY3MgYWJvdXQgdGhlIHJlbW90ZSB0b29sczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5PUHJvZmlsZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgdGhpcyB0b29sIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZS1zZXJ2ZXI8L2ZpbGVuYW1lPiBvbiB0aGUgcmVtb3RlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdG8gbGF1bmNoIG9uIHRoZSBsb2NhbCBob3N0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9wcm9maWxlLXZpZXdlcjwvZmlsZW5hbWU+IG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBvbiB0aGUgbG9jYWwgaG9zdCBtYWNoaW5lIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZS1zZXJ2ZXI8L2ZpbGVuYW1lPiBtdXN0IGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHJlbW90ZSB0YXJnZXQsIHJlc3BlY3RpdmVseSwgaW4gb3JkZXIgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY29tcGlsZSBhbmQgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcHJvZmlsZS12aWV3ZXI8L2ZpbGVuYW1lPiBmcm9tIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgb24geW91ciBsb2NhbCBob3N0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgaW4gb3JkZXIgdG8gY29udmVydCB0aGUgdGFyZ2V0J3Mgc2FtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgZGF0YSBpbnRvIGEgZm9ybSB0aGF0IHRoZSBob3N0IGNhbiB1c2UsIHlvdSBtdXN0CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIE9Qcm9maWxlIHZlcnNpb24gMC45LjQgb3IgZ3JlYXRlciBpbnN0YWxsZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gbG9jYXRlIGJvdGggdGhlIHZpZXdlciBhbmQgc2VydmVyIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL29wcm9maWxldWkvJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgdG9vbCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjcHJvZmlsZS1tYW51YWwtb3Byb2ZpbGUnPm9wcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZworICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+VGhlIDxmaWxlbmFtZT5vcHJvZmlsZS1zZXJ2ZXI8L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvLXNkazwvZmlsZW5hbWU+IGltYWdlLjwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MdHRuZzIuMCB0cmFjZSBpbXBvcnQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW5nIHRoaXMgdG9vbCB0cmFuc2ZlcnMgdGhlIHJlbW90ZSB0YXJnZXQncworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkx0dG5nPC9maWxlbmFtZT4gdHJhY2luZyBkYXRhIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCBob3N0IG1hY2hpbmUgYW5kIHVzZXMgdGhlIEx0dG5nIEVjbGlwc2UgcGx1Zy1pbgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ3JhcGhpY2FsbHkgZGlzcGxheSB0aGUgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgTHR0bmcgdG8gdHJhY2UgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VlIDx1bGluayB1cmw9J2h0dHA6Ly9sdHRuZy5vcmcvZG9jdW1lbnRhdGlvbic+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsjbHR0bmctbGludXgtdHJhY2UtdG9vbGtpdC1uZXh0LWdlbmVyYXRpb24nPkxUVG5nIChMaW51eCBUcmFjZSBUb29sa2l0LCBuZXh0IGdlbmVyYXRpb24pPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCB3aGljaCBpcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBUcmFjaW5nIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPkRvIG5vdCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THR0bmctdXNlciBzcGFjZSAobGVnYWN5KTwvZmlsZW5hbWU+IHRvb2wuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0b29sIG5vIGxvbmdlciBoYXMgYW55IHVwc3RyZWFtIHN1cHBvcnQuPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QmVmb3JlIHlvdSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+THR0bmcyLjAgdHJhY2UgaW1wb3J0PC9maWxlbmFtZT4gdG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIHRvIHNldHVwIHRoZSBMdHRuZyBFY2xpcHNlIHBsdWctaW4gYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBUcmFjaW5nIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBEbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgIk9wZW4gUGVyc3BlY3RpdmUiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5kb3ciIG1lbnUgYW5kIHRoZW4gc2VsZWN0ICJPdGhlci4uLiIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpbmcgdXAgYSBtZW51IG9mIG90aGVyIHBlcnNwZWN0aXZlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICJUcmFjaW5nIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJPSyIgdG8gY2hhbmdlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNwZWN0aXZlIGludG8gdGhlIFRyYWNpbmcgcGVyc3BlY3RpdmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgYSBuZXcgVHJhY2luZyBwcm9qZWN0IGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGluZyAiUHJvamVjdCIgZnJvbSB0aGUgIkZpbGUgLT4gTmV3IiBtZW51LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2hvb3NlICJUcmFjaW5nIFByb2plY3QiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFjaW5nIiBtZW51IGFuZCBjbGljayAiTmV4dCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgbmFtZSBmb3IgeW91ciB0cmFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QgYW5kIGNsaWNrICJGaW5pc2giLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2VuZXJhdGUgeW91ciB0cmFjaW5nIGRhdGEgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSB0YXJnZXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCAiTHR0bmcyLjAgdHJhY2UgaW1wb3J0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSAiWW9jdG8gUHJvamVjdCBUb29scyIgbWVudSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCB0aGUgZGF0YSBpbXBvcnQgcHJvY2Vzcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3BlY2lmeSB5b3VyIHJlbW90ZSBjb25uZWN0aW9uIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGhlIFVzdCBkaXJlY3RvcnkgcGF0aCwgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgeW91ciByZW1vdGUgdHJhY2luZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlIHN1cmUgdGhlIGxvY2F0aW9uIGVuZHMgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXN0PC9maWxlbmFtZT4gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbXlzZXNzaW9uL3VzdDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNsaWNrICJPSyIgdG8gY29tcGxldGUgdGhlIGltcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGF0YSBpcyBub3cgaW4gdGhlIGxvY2FsIHRyYWNpbmcgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY3JlYXRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmlnaHQgY2xpY2sgb24gdGhlIGRhdGEgYW5kIHRoZW4gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW51IHRvIFNlbGVjdCAiR2VuZXJpYyBDVEYgVHJhY2UiIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFjZSBUeXBlLi4uIC0+IENvbW1vbiBUcmFjZSBGb3JtYXQiIG1lbnUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwIHRoZSB0cmFjaW5nIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJpZ2h0IGNsaWNrIHRoZSBtb3VzZSBhbmQgc2VsZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuIiB0byBicmluZyB1cCB0aGUgRWNsaXBzZSBMdHRuZyBUcmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3ZXIgc28geW91IHZpZXcgdGhlIHRyYWNpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5Qb3dlclRPUDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RpbmcgdGhpcyB0b29sIHJ1bnMgUG93ZXJUT1Agb24gdGhlIHJlbW90ZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgYW5kIGRpc3BsYXlzIHRoZSByZXN1bHRzIGluIGEgbmV3IHZpZXcgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclRPUC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgIlRpbWUgdG8gZ2F0aGVyIGRhdGEoc2VjKToiIGZpZWxkIGlzIHRoZSB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gc2Vjb25kcyBiZWZvcmUgZGF0YSBpcyBnYXRoZXJlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHRhcmdldCBmb3IgYW5hbHlzaXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlICJzaG93IHBpZHMgaW4gd2FrZXVwcyBsaXN0OiIgZmllbGQgY29ycmVzcG9uZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+LXA8L2ZpbGVuYW1lPiBhcmd1bWVudCBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5Qb3dlclRPUDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5MYXRlbmN5VE9QIGFuZCBQZXJmPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIExhdGVuY3lUT1AgaWRlbnRpZmllcyBzeXN0ZW0gbGF0ZW5jeSwgd2hpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmYgbW9uaXRvcnMgdGhlIHN5c3RlbSdzIHBlcmZvcm1hbmNlIGNvdW50ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGluZyBlaXRoZXIgb2YgdGhlc2UgdG9vbHMgY2F1c2VzIGFuIFJTRSB0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgdmlldyB0byBhcHBlYXIgZnJvbSB3aGljaCB5b3UgY2FuIHJ1biB0aGUgdG9vbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBCb3RoIHRvb2xzIHJlZnJlc2ggdGhlIGVudGlyZSBzY3JlZW4gdG8gZGlzcGxheSByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSB0aGV5IHJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7I3Byb2ZpbGUtbWFudWFsLXBlcmYnPnBlcmY8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U3lzdGVtVGFwPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbXRhcCBpcyBhIHRvb2wgdGhhdCBsZXRzIHlvdSBjcmVhdGUgYW5kIHJldXNlCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIHRvIGV4YW1pbmUgdGhlIGFjdGl2aXRpZXMgb2YgYSBsaXZlIExpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVhc2lseSBleHRyYWN0LCBmaWx0ZXIsIGFuZCBzdW1tYXJpemUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBoZWxwcyB5b3UgZGlhZ25vc2UgY29tcGxleCBwZXJmb3JtYW5jZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbCBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYW5kIHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U3lzdGVtVGFwPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwL2RvY3VtZW50YXRpb24uaHRtbCc+U3lzdGVtVGFwIERvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT55b2N0by1ic3A8L2ZpbGVuYW1lPiB0b29sIGxldHMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBxdWlja2x5IHNldCB1cCBhIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sIHJlcXVpcmVzIGEgTWV0YWRhdGEgbG9jYXRpb24sIGJ1aWxkIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgQlNQIG5hbWUsIEJTUCBvdXRwdXQgbG9jYXRpb24sIGFuZCBhIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG8tYnNwPC9maWxlbmFtZT4gdG9vbCBvdXRzaWRlIG9mIEVjbGlwc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjY3JlYXRpbmctYS1uZXctYnNwLWxheWVyLXVzaW5nLXRoZS15b2N0by1ic3Atc2NyaXB0Jz5DcmVhdGluZyBhIG5ldyBCU1AgTGF5ZXIgVXNpbmcgdGhlIHlvY3RvLWJzcCBTY3JpcHQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3dvcmtmbG93LXVzaW5nLXN0YW5kLWFsb25lLWNyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbnMnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgVXNpbmcgU3RhbmQtQWxvbmUgQ3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBkZXZlbG9wIGFuIGFwcGxpY2F0aW9uIHdpdGhvdXQgcHJpb3IgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICBvZiB0aGUgQURULCB5b3Ugc3RpbGwgY2FuIGVtcGxveSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Q3Jvc3MgRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yLCBhbmQgYSBudW1iZXIgb2Ygc3VwcG9ydGVkICB0YXJnZXQgaW1hZ2UgZmlsZXMuCisgICAgICAgICAgICBZb3UganVzdCBuZWVkIHRvIGZvbGxvdyB0aGVzZSBnZW5lcmFsIHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluIGZvciB5b3VyIHRhcmdldCBoYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjdXNpbmctYW4tZXhpc3RpbmctdG9vbGNoYWluLXRhcmJhbGwnPlVzaW5nIGEgQ3Jvc3MtVG9vbGNoYWluIFRhcmJhbGw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICBHdWlkZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvd25sb2FkIHRoZSBUYXJnZXQgSW1hZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgc2V2ZXJhbCB0YXJnZXQgYXJjaGl0ZWN0dXJlcworICAgICAgICAgICAgICAgICAgICBhbmQgaGFzIG1hbnkgcHJlLWJ1aWx0IGtlcm5lbCBpbWFnZXMgYW5kIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICBpbWFnZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB5b3UgYXJlIGdvaW5nIHRvIGRldmVsb3AgeW91ciBhcHBsaWNhdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSwgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19NQUNISU5FU19ETF9VUkw7Jz48ZmlsZW5hbWU+bWFjaGluZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkIGFyZWEgYW5kIGNob29zZSBhIHRhcmdldCBtYWNoaW5lIGFyZWEKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB0byBkb3dubG9hZCB0aGUga2VybmVsIGltYWdlIGFuZCByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZG93bmxvYWQgYXJlYSBjb3VsZCBoYXZlIHNldmVyYWwgZmlsZXMgaW4gaXQgdGhhdAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGRldmVsb3BtZW50IHVzaW5nIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBhcmVhIG1pZ2h0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5oZGRpbWc8L2ZpbGVuYW1lPiBmaWxlcyB0aGF0IGNvbWJpbmUgdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZSB3aXRoIHRoZSBmaWxlc3lzdGVtLCBib290IGxvYWRlcnMsIGFuZAorICAgICAgICAgICAgICAgICAgICBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBnZXQgdGhlIGZpbGVzIHlvdSBuZWVkIGZvciB5b3VyIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgcHJvY2Vzcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgZ29pbmcgdG8gZGV2ZWxvcCB5b3VyIGFwcGxpY2F0aW9uIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGVuIHJ1biBhbmQgdGVzdCBpdCB1c2luZyB0aGUgUUVNVSBlbXVsYXRvciwgZ28gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19RRU1VX0RMX1VSTDsnPjxmaWxlbmFtZT5tYWNoaW5lcy9xZW11PC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBGcm9tIHRoaXMgYXJlYSwgZ28gZG93biBpbnRvIHRoZSBkaXJlY3RvcnkgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoZS5nLiA8ZmlsZW5hbWU+cWVtdXg4Nl82NDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbiA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPi1iYXNlZAorICAgICAgICAgICAgICAgICAgICA2NC1iaXQgYXJjaGl0ZWN0dXJlKS4KKyAgICAgICAgICAgICAgICAgICAgRG93bmxvYWQga2VybmVsLCByb290IGZpbGVzeXN0ZW0sIGFuZCBhbnkgb3RoZXIgZmlsZXMgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgZm9yIHlvdXIgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+SW4gb3JkZXIgdG8gdXNlIHRoZSByb290IGZpbGVzeXN0ZW0gaW4gUUVNVSwgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gZXh0cmFjdCBpdC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjZXh0cmFjdGluZy10aGUtcm9vdC1maWxlc3lzdGVtJz5FeHRyYWN0aW5nIHRoZSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGV4dHJhY3QgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS48L25vdGU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXZlbG9wIGFuZCBUZXN0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb246PC9lbXBoYXNpcz4gIEF0IHRoaXMgcG9pbnQsIHlvdSBoYXZlIHRoZSB0b29scworICAgICAgICAgICAgICAgICAgICB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHNlcGFyYXRlbHkgaW5zdGFsbCBhbmQgdXNlIHRoZSBRRU1VCisgICAgICAgICAgICAgICAgICAgIGVtdWxhdG9yLCB5b3UgY2FuIGdvIHRvCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL01haW5fUGFnZSc+UUVNVSBIb21lIFBhZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0byBkb3dubG9hZCBhbmQgbGVhcm4gYWJvdXQgdGhlIGVtdWxhdG9yLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Rldi1tYW51YWwtcWVtdSc+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgZm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIFFFTVUgd2l0aGluIHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9ImRldi1tb2RpZnlpbmctc291cmNlLWNvZGUiPgorICAgIDx0aXRsZT5Nb2RpZnlpbmcgU291cmNlIENvZGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgY29tbW9uIGRldmVsb3BtZW50IHdvcmtmbG93IGNvbnNpc3RzIG9mIG1vZGlmeWluZyBwcm9qZWN0IHNvdXJjZQorICAgICAgICBmaWxlcyB0aGF0IGFyZSBleHRlcm5hbCB0byB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlbiBpbnRlZ3JhdGluZworICAgICAgICB0aGF0IHByb2plY3QncyBidWlsZCBvdXRwdXQgaW50byBhbiBpbWFnZSBidWlsdCB1c2luZyB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgR2l2ZW4gdGhpcyBzY2VuYXJpbywgZGV2ZWxvcG1lbnQgZW5naW5lZXJzIHR5cGljYWxseSB3YW50IHRvIHN0aWNrCisgICAgICAgIHRvIHRoZWlyIGZhbWlsaWFyIHByb2plY3QgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIG1ldGhvZHMsIHdoaWNoIGFsbG93cworICAgICAgICB0aGVtIHRvIGp1c3QgZm9jdXMgb24gdGhlIHByb2plY3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNldmVyYWwgd29ya2Zsb3dzIGV4aXN0IHRoYXQgYWxsb3cgeW91IHRvIGRldmVsb3AsIGJ1aWxkLCBhbmQgdGVzdAorICAgICAgICBjb2RlIHRoYXQgaXMgZ29pbmcgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGFuIGltYWdlIGJ1aWx0IHVzaW5nIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHR3bzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgc2V0IG9mIHRvb2xzIHRvIGFpZCBpbiB3b3JraW5nIG9uIHRoZSBzb3VyY2UgY29kZSBidWlsdCBieQorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFNlY3Rpb24KKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIGRlc2NyaWJlcyB0aGlzIHdvcmtmbG93LgorICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IG1vcmUgaW5mb3JtYXRpb24gdGhhdCBzaG93Y2FzZXMgdGhlIHdvcmtmbG93LCBjbGljaworICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9hL2xpbmFyby5vcmcvZmlsZS9kLzBCM0tHelk1Zlc3bGFURFZ4VVhvM1VEUnZkMnMvdmlldyc+aGVyZTwvdWxpbms+CisgICAgICAgICAgICAgICAgZm9yIGFuIGV4Y2VsbGVudCBwcmVzZW50YXRpb24gYnkgVHJldm9yIFdvZXJuZXIgdGhhdAorICAgICAgICAgICAgICAgIHByb3ZpZGVzIGRldGFpbGVkIGJhY2tncm91bmQgaW5mb3JtYXRpb24gYW5kIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICB3b3JraW5nIHR1dG9yaWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48dWxpbmsgdXJsPSdodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9xdWlsdCc+UXVpbHQ8L3VsaW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgcG93ZXJmdWwgdG9vbCB0aGF0IGFsbG93cyB5b3UgdG8gY2FwdHVyZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBjb2RlIGNoYW5nZXMgd2l0aG91dCBoYXZpbmcgYSBjbGVhbiBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICBXaGlsZSBRdWlsdCBpcyBub3QgdGhlIHByZWZlcnJlZCB3b3JrZmxvdyBvZiB0aGUgdHdvLCB0aGlzCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbmNsdWRlcyBpdCBmb3IgdXNlcnMgdGhhdCBhcmUgY29tbWl0dGVkIHRvIHVzaW5nCisgICAgICAgICAgICAgICAgdGhlIHRvb2wuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1hLXF1aWx0LXdvcmtmbG93Jz5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gaW4gWW91ciBXb3JrZmxvdzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBoZWxwcworICAgICAgICAgICAgeW91IGVhc2lseSBkZXZlbG9wIHByb2plY3RzIHdob3NlIGJ1aWxkIG91dHB1dCBtdXN0IGJlIHBhcnQgb2YKKyAgICAgICAgICAgIGFuIGltYWdlIGJ1aWx0IHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgdGhlIHdvcmtmbG93IHlvdSB3b3VsZAorICAgICAgICAgICAgdXNlIHRoYXQgaW5jbHVkZXMgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxmb290bm90ZT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgS3Vkb3MgYW5kIHRoYW5rcyB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdtYWlsdG86dHdvZXJuZXJAZ21haWwuY29tJz5UcmV2b3IgV29lcm5lcjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdob3NlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPSdodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZmlsZS9kLzBCM0tHelk1Zlc3bGFURFZ4VVhvM1VEUnZkMnMvdmlldyc+WW9jdG8gUHJvamVjdCBEZXZlbG9wZXIgV29ya2Zsb3cgVHV0b3JpYWw8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgcGFwZXIgY29udHJpYnV0ZWQgbmljZWx5IHRvd2FyZHMgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc3RlcHMgaW4gdGhpcyBzZWN0aW9uIGFzc3VtZSB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgYnVpbHQKKyAgICAgICAgICAgIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBlaXRoZXIgcnVubmluZyBpbiBRRU1VIG9yIHJ1bm5pbmcgb24gYWN0dWFsCisgICAgICAgICAgICBoYXJkd2FyZS4KKyAgICAgICAgICAgIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhhdCBmb3IgZGVwbG95bWVudCBvZiB0aGUgaW1hZ2UgdG8gdGhlCisgICAgICAgICAgICB0YXJnZXQsIFNTSCBpcyBpbnN0YWxsZWQgaW4gdGhlIGltYWdlIGFuZCBpZiB0aGUgaW1hZ2UgaXMgcnVubmluZworICAgICAgICAgICAgb24gcmVhbCBoYXJkd2FyZSB0aGF0IHlvdSBoYXZlIG5ldHdvcmsgYWNjZXNzIHRvIGFuZCBmcm9tIHlvdXIKKyAgICAgICAgICAgIGRldmVsb3BtZW50IG1hY2hpbmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXBkYXRlLXlvdXItZXh0ZXJuYWwtc291cmNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5VcGRhdGUgWW91ciBFeHRlcm5hbCBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYXJ0IG9mIHRoZSBkZXZlbG9wbWVudCBmbG93IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2w8L2ZpbGVuYW1lPiBvZiBjb3Vyc2UgaW52b2x2ZXMgdXBkYXRpbmcKKyAgICAgICAgICAgICAgICB5b3VyIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBTZXZlcmFsIG9wcG9ydHVuaXRpZXMgZXhpc3QgaW4gdGhlIHdvcmtmbG93IHRvIGV4dHJhY3QgYW5kCisgICAgICAgICAgICAgICAgd29yayBvbiB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgRm9yIG5vdywganVzdCByZWFsaXplIHRoYXQgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBoYXZlCisgICAgICAgICAgICAgICAgYWNjZXNzIHRvIGFuZCBlZGl0IGZpbGVzLgorICAgICAgICAgICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGlzIHRvIGluaXRpYWxseSBleHRyYWN0IHRoZSBjb2RlIGludG8gYW4KKyAgICAgICAgICAgICAgICBpc29sYXRlZCBhcmVhIGluIHByZXBhcmF0aW9uIGZvciBtb2RpZmljYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgYSAid29ya3NwYWNlIiBsYXllciB3aGVyZSBtdWNoIG9mCisgICAgICAgICAgICAgICAgdGhlIHRyYW5zaXRpb25hbCB3b3JrIG9jY3Vycywgd2hpY2ggaXMgbmVlZGVkIGZvciBzZXR0aW5nIHVwCisgICAgICAgICAgICAgICAgTWV0YWRhdGEgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0aGF0IGxldHMgeW91CisgICAgICAgICAgICAgICAgYnVpbGQgeW91ciBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICBPcHRpb25zIChpLmUuICIteCIpIGV4aXN0IHVzaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB0aGF0IGVuYWJsZSB5b3UgdG8gdXNlIHRoZSB0b29sIHRvIGV4dHJhY3Qgc291cmNlIGNvZGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNlLWRldnRvb2wtdG8taW50ZWdyYXRlLXlvdXItY29kZS13aXRoLXRoZS1pbWFnZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IHRvIEludGVncmF0ZSBZb3VyIENvZGUgd2l0aCB0aGUgSW1hZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVzIHRoZSBuZWVkZWQgTWV0YWRhdGEgdGhhdCBhbGxvd3MgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBidWlsZCB5b3VyIGNvZGUgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBvciBwYWNrYWdlcyBwcm9kdWNlZCBieSB0aGUgcmVjaXBlIG9uIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHlvdSBhcmUgd29ya2luZyBhcmUgbm90IGFscmVhZHkgaW4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGltYWdlLCB5b3UgbXVzdCBhZGQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXZ0b29sIGFkZDwvZmlsZW5hbWU+IGNvbW1hbmQgZG9lcyBub3QKKyAgICAgICAgICAgICAgICAgICAgYWRkIHRoZW0gZm9yIHlvdS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGFkZCA8cmVwbGFjZWFibGU+eW91ci1wcm9qZWN0LW5hbWU8L3JlcGxhY2VhYmxlPiZuYnNwOzxyZXBsYWNlYWJsZT5wYXRoLXRvLXNvdXJjZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZm9yIHRoZSBmaXJzdCB0aW1lCisgICAgICAgICAgICAgICAgY3JlYXRlcyBhIHdvcmtzcGFjZSBsYXllciB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgaXMgYmFzZWQgb24geW91ciBwcm9qZWN0J3MgbG9jYXRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+cGF0aC10by1zb3VyY2U8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnVpbGQtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPndvcmtzcGFjZS1sYXllcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgaXMgIndvcmtzcGFjZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzIG9uIHRoZSB3b3Jrc3BhY2UgbGF5ZXIgY3JlYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+YnVpbGQtZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4sCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+QWRkaW5nIGEgTmV3IFJlY2lwZSB0byB0aGUgV29ya3NwYWNlIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCis8IS0tCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIGVhY2ggbGF5ZXIgbXVzdCBoYXZlIGEKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGFsc28gY3JlYXRlcyB0aGlzIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgd29ya3NwYWNlL2NvbmYvbGF5ZXIuY29uZgorICAgICAjICMjIyB3b3Jrc3BhY2UgbGF5ZXIgYXV0b8KtZ2VuZXJhdGVkIGJ5IGRldnRvb2wgIyMjCisgICAgIEJCUEFUSCA9LiAiJHtMQVlFUkRJUn06IgorICAgICBCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLyovKi5iYiBcCisgICAgICAgICAgICAgICAgICR7TEFZRVJESVJ9L2FwcGVuZHMvKi5iYmFwcGVuZCIKKyAgICAgQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ3b3Jrc3BhY2VsYXllciIKKyAgICAgQkJGSUxFX1BBVFRFUk5fd29ya3NwYWNlbGF5ZXIgPSAiXiR7TEFZRVJESVJ9LyIKKyAgICAgQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZX3dvcmtzcGFjZWxheWVyID0gIjEiCisgICAgIEJCRklMRV9QUklPUklUWV93b3Jrc3BhY2VsYXllciA9ICI5OSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CistLT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUnVubmluZyA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVzIHlvdXIgcmVjaXBlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgd29ya3NwYWNlL3JlY2lwZXMvPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4uYmIKKyAgICAgIyBSZWNpcGUgY3JlYXRlZCBieSByZWNpcGV0b29sCisgICAgICMgVGhpcyBpcyB0aGUgYmFzaXMgb2YgYSByZWNpcGUgYW5kIG1heSBuZWVkIGZ1cnRoZXIgZWRpdGluZyBpbiBvcmRlciB0byBiZSBmdWxseSBmdW5jdGlvbmFsLgorICAgICAjIChGZWVsIGZyZWUgdG8gcmVtb3ZlIHRoZXNlIGNvbW1lbnRzIHdoZW4gZWRpdGluZy4pCisgICAgICMKKyAgICAgIyBVbmFibGUgdG8gZmluZCBhbnkgZmlsZXMgdGhhdCBsb29rZWQgbGlrZSBsaWNlbnNlIHN0YXRlbWVudHMuIENoZWNrIHRoZSBhY2NvbXBhbnlpbmcKKyAgICAgIyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgaGVhZGVycyBhbmQgc2V0IExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gYWNjb3JkaW5nbHkuCisgICAgIExJQ0VOU0UgPSAiQ0xPU0VEIgorICAgICBMSUNfRklMRVNfQ0hLU1VNID0gIiIKKworICAgICAjIE5vIGluZm9ybWF0aW9uIGZvciBTUkNfVVJJIHlldCAob25seSBhbiBleHRlcm5hbCBzb3VyY2UgdHJlZSB3YXMKKyAgICAgIyBzcGVjaWZpZWQpCisgICAgIFNSQ19VUkkgPSAiIgorCisgICAgIERFUEVORFMgPSAibGlieDExIgorICAgICAjIE5PVEU6IGlmIHRoaXMgc29mdHdhcmUgaXMgbm90IGNhcGFibGUgb2YgYmVpbmcgYnVpbHQgaW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgIyBmcm9tIHRoZSBzb3VyY2UsIHlvdSBzaG91bGQgcmVwbGFjZSBhdXRvdG9vbHMgd2l0aCBhdXRvdG9vbHPCrS1icm9rZW5zZXAgaW4gdGhlCisgICAgICMgaW5oZXJpdCBsaW5lCisgICAgIGluaGVyaXQgYXV0b3Rvb2xzCisKKyAgICAgIyBTcGVjaWZ5IGFueSBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdXNpbmcgRVhUUkFfT0VDT05GOgorICAgICBFWFRSQV9PRUNPTkYgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGFzdGx5LCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gY29tbWFuZCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgd29ya3NwYWNlL2FwcGVuZHMvPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4uYmJhcHBlbmQKKyAgICAgaW5oZXJpdCBleHRlcm5hbHNyYworICAgICBFWFRFUk5BTFNSQyA9ICIvPHJlcGxhY2VhYmxlPnBhdGgtdG8tc291cmNlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4iCisKKyAgICAgIyBpbml0aWFsX3JldjogPHJlcGxhY2VhYmxlPmNvbW1pdC1JRDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXlvdXItcHJvamVjdCc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgWW91ciBQcm9qZWN0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgQml0QmFrZSBvciA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgYnVpbGQgeW91ciBtb2RpZmllZCBwcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgQml0QmFrZSwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnlvdXItcHJvamVjdC1uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBidWlsZDwvZmlsZW5hbWU+LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgcG9wdWxhdGVfc3lzcm9vdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT55b3VyLXByb2plY3QtbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKzwhLS0KKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rldi1idWlsZC10aGUtaW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkIHRoZSBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGVwIGJlZm9yZSB0ZXN0aW5nIGlzIHRvIHJlYnVpbGQgdGhlIGJhc2UgaW1hZ2UKKyAgICAgICAgICAgICAgICB3aXRoIHlvdXIgcHJvamVjdCBjaGFuZ2VzIGFzIHBhcnQgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgIFNpbXBseSBydW4gQml0QmFrZSBhZ2FpbiBvbiB5b3VyIGltYWdlLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXYtdGVzdGluZy10aGUtaW1hZ2UnPgorICAgICAgICAgICAgPHRpdGxlPlRlc3RpbmcgdGhlIEltYWdlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB0aGUgaW1hZ2UsIHlvdSBjYW4gdGVzdCBpdCB1c2luZyBRRU1VLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhc3N1bWluZyAicWVtdXg4NiI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NiA8cmVwbGFjZWFibGU+aW1hZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHRlc3QgYW4gaW1hZ2UgdXNpbmcgUUVNVSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdkZXYtbWFudWFsLXFlbXUnPlVzaW5nIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSk8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKy0tPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXF1aWNrLXJlZmVyZW5jZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IFF1aWNrIFJlZmVyZW5jZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGhhcyBtb3JlIGZ1bmN0aW9uYWxpdHkgdGhhbiBzaW1wbHkKKyAgICAgICAgICAgIGFkZGluZyBhIG5ldyByZWNpcGUgYW5kIHRoZSBzdXBwb3J0aW5nIE1ldGFkYXRhIHRvIGEgdGVtcG9yYXJ5CisgICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzaG9ydCByZWZlcmVuY2Ugb24KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sPC9maWxlbmFtZT4gZm9yIG1vc3Qgb2YgdGhlIGNvbW1hbmRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtZ2V0dGluZy1oZWxwJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZXR0aW5nIEhlbHA8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IGhlbHAgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNvbW1hbmQgaXMgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0taGVscDwvZmlsZW5hbWU+IG9wdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCAtLWhlbHAKKyAgICAgdXNhZ2U6IGRldnRvb2wgWy1oXSBbLS1iYXNlcGF0aCBCQVNFUEFUSF0gWy1kXSBbLXFdIFstLWNvbG9yIENPTE9SXQorICAgICAgICAgICAgICAgJmx0O3N1YmNvbW1hbmQmZ3Q7IC4uLgorCisgICAgIE9wZW5FbWJlZGRlZCBkZXZlbG9wbWVudCB0b29sCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAtLWJhc2VwYXRoIEJBU0VQQVRIICBCYXNlIGRpcmVjdG9yeSBvZiBTREsgLyBidWlsZCBkaXJlY3RvcnkKKyAgICAgICAtZCwgLS1kZWJ1ZyAgICAgICAgICBFbmFibGUgZGVidWcgb3V0cHV0CisgICAgICAgLXEsIC0tcXVpZXQgICAgICAgICAgUHJpbnQgb25seSBlcnJvcnMKKyAgICAgICAtLWNvbG9yIENPTE9SICAgICAgICBDb2xvcml6ZSBvdXRwdXQgKHdoZXJlIENPTE9SIGlzIGF1dG8sIGFsd2F5cywgbmV2ZXIpCisKKyAgICAgc3ViY29tbWFuZHM6CisgICAgICAgJmx0O3N1YmNvbW1hbmQmZ3Q7CisgICAgICAgICBjcmVhdGUtd29ya3NwYWNlICAgU2V0IHVwIGEgd29ya3NwYWNlCisgICAgICAgICBkZXBsb3ktdGFyZ2V0ICAgICAgRGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgdG8gbGl2ZSB0YXJnZXQgbWFjaGluZQorICAgICAgICAgdW5kZXBsb3ktdGFyZ2V0ICAgIFVuZGVwbG95IHJlY2lwZSBvdXRwdXQgZmlsZXMgaW4gbGl2ZSB0YXJnZXQgbWFjaGluZQorICAgICAgICAgYWRkICAgICAgICAgICAgICAgIEFkZCBhIG5ldyByZWNpcGUKKyAgICAgICAgIG1vZGlmeSAgICAgICAgICAgICBNb2RpZnkgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlCisgICAgICAgICBleHRyYWN0ICAgICAgICAgICAgRXh0cmFjdCB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUKKyAgICAgICAgIHVwZGF0ZS1yZWNpcGUgICAgICBBcHBseSBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgc291cmNlIHRyZWUgdG8gcmVjaXBlCisgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgU2hvdyB3b3Jrc3BhY2Ugc3RhdHVzCisgICAgICAgICBidWlsZCAgICAgICAgICAgICAgQnVpbGQgYSByZWNpcGUKKyAgICAgICAgIHJlc2V0ICAgICAgICAgICAgICBSZW1vdmUgYSByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZQorCisgICAgIFVzZSBkZXZ0b29sICZsdDtzdWJjb21tYW5kJmd0OyAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBkaXJlY3RlZCBpbiB0aGUgZ2VuZXJhbCBoZWxwIG91dHB1dCwgeW91IGNhbiBnZXQgbW9yZQorICAgICAgICAgICAgICAgIHN5bnRheCBvbiBhIHNwZWNpZmljIGNvbW1hbmQgYnkgcHJvdmlkaW5nIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgbmFtZSBhbmQgdXNpbmcgPGZpbGVuYW1lPi0taGVscDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGFkZCAtLWhlbHAKKyAgICAgdXNhZ2U6IGRldnRvb2wgYWRkIFstaF0gWy0tc2FtZS1kaXJdIFstLWZldGNoIFVSSV0gWy0tdmVyc2lvbiBWRVJTSU9OXQorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlbmFtZSBzcmN0cmVlCisKKyAgICAgQWRkcyBhIG5ldyByZWNpcGUKKworICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICByZWNpcGVuYW1lICAgICAgICAgICAgTmFtZSBmb3IgbmV3IHJlY2lwZSB0byBhZGQKKyAgICAgICBzcmN0cmVlICAgICAgICAgICAgICAgUGF0aCB0byBleHRlcm5hbCBzb3VyY2UgdHJlZQorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tc2FtZS1kaXIsIC1zICAgICAgICBCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UKKyAgICAgICAtLWZldGNoIFVSSSwgLWYgVVJJICAgRmV0Y2ggdGhlIHNwZWNpZmllZCBVUkkgYW5kIGV4dHJhY3QgaXQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgdHJlZQorICAgICAgIC0tdmVyc2lvbiBWRVJTSU9OLCAtViBWRVJTSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gdG8gdXNlIHdpdGhpbiByZWNpcGUgKFBWKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWFkZGluZy1hLW5ldy1yZWNpcGUtdG8tdGhlLXdvcmtzcGFjZSc+CisgICAgICAgICAgICA8dGl0bGU+QWRkaW5nIGEgTmV3IFJlY2lwZSB0byB0aGUgV29ya3NwYWNlIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGFkZCBhIG5ldyByZWNpcGUKKyAgICAgICAgICAgICAgICB0byB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgeW91IGFkZCBzaG91bGQgbm90IGV4aXN0IC0KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGNyZWF0ZXMgaXQgZm9yIHlvdS4KKyAgICAgICAgICAgICAgICBUaGUgc291cmNlIGZpbGVzIHRoZSByZWNpcGUgdXNlcyBzaG91bGQgZXhpc3QgaW4gYW4gZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICBhcmVhLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhbmQgYWRkcyBhIG5ldyByZWNpcGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+amFja3NvbjwvZmlsZW5hbWU+IHRvIHRoZSB3b3Jrc3BhY2UgbGF5ZXIuCisgICAgICAgICAgICAgICAgVGhlIHNvdXJjZSBjb2RlIGJ1aWx0IGJ5IHRoZSByZWNpcGVzIHJlc2lkZXMgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgYWRkIGphY2tzb24gL2hvbWUvc2NvdHRyaWYvc291cmNlcy9qYWNrc29uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIGFkZCAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhIHJlY2lwZSBhbmQgdGhlIHdvcmtzcGFjZSBsYXllciBkb2VzIG5vdCBleGlzdCwKKyAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBjcmVhdGVzIHRoZSBsYXllciBhbmQgcG9wdWxhdGVzIGl0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZyIKKyAgICAgICAgICAgICAgICAgICAgd2lkdGg9IjZpbiIgZGVwdGg9IjRpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSRUFETUUgLSBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB3aGF0IGlzIGluIHdvcmtzcGFjZSBsYXllciBhbmQgaG93IHRvCisgICAgICAgICAgICAgIG1hbmFnZSBpdC4KKworICAgICBhcHBlbmRzIC0gQSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyAqLmJiYXBwZW5kIGZpbGVzLCB3aGljaCBwb2ludCB0bworICAgICAgICAgICAgICAgZXh0ZXJuYWwgc291cmNlLgorCisgICAgIGNvbmYgLSBBIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGxheWVyLmNvbmYgZmlsZS4KKworICAgICByZWNpcGVzIC0gQSBkaXJlY3RvcnkgY29udGFpbmluZyByZWNpcGVzLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYQorICAgICAgICAgICAgICAgZm9sZGVyIGZvciBlYWNoIGRpcmVjdG9yeSBhZGRlZCB3aG9zZSBuYW1lIG1hdGNoZXMgdGhhdCBvZiB0aGUKKyAgICAgICAgICAgICAgIGFkZGVkIHJlY2lwZS4gIGRldnRvb2wgcGxhY2VzIHRoZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4uYmIgZmlsZQorICAgICAgICAgICAgICAgd2l0aGluIHRoYXQgc3ViLWRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFJ1bm5pbmcgPGZpbGVuYW1lPmRldnRvb2wgYWRkPC9maWxlbmFtZT4gd2hlbiB0aGUKKyAgICAgICAgICAgICAgICB3b3Jrc3BhY2UgbGF5ZXIgZXhpc3RzIGNhdXNlcyB0aGUgdG9vbCB0byBhZGQgdGhlIHJlY2lwZQorICAgICAgICAgICAgICAgIGFuZCBhcHBlbmQgZmlsZXMgaW50byB0aGUgZXhpc3Rpbmcgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcyBjcmVhdGVkIHRvIHBvaW50CisgICAgICAgICAgICAgICAgdG8gdGhlIGV4dGVybmFsIHNvdXJjZSB0cmVlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtbW9kaWZ5aW5nLWEtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGJlZ2luCisgICAgICAgICAgICAgICAgbW9kaWZ5aW5nIHRoZSBzb3VyY2Ugb2YgYW4gZXhpc3RpbmcgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1hZGRpbmctYS1uZXctcmVjaXBlLXRvLXRoZS13b3Jrc3BhY2UnPjxmaWxlbmFtZT5hZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IHBoeXNpY2FsbHkgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSBpbiB0aGUgd29ya3NwYWNlIGxheWVyIGJlY2F1c2UgdGhlIHJlY2lwZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgZXhpc3RzIGluIGFuIGFub3RoZXIgbGF5ZXIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPiBjb21tYW5kIGV4dHJhY3RzIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmb3IgYSByZWNpcGUsIHNldHMgaXQgdXAgYXMgYSBHaXQgcmVwb3NpdG9yeSBpZiB0aGUKKyAgICAgICAgICAgICAgICBzb3VyY2UgaGFkIG5vdCBhbHJlYWR5IGJlZW4gZmV0Y2hlZCBmcm9tIEdpdCwgY2hlY2tzIG91dCBhCisgICAgICAgICAgICAgICAgYnJhbmNoIGZvciBkZXZlbG9wbWVudCwgYW5kIGFwcGxpZXMgYW55IHBhdGNoZXMgZnJvbSB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgYXMgY29tbWl0cyBvbiB0b3AuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGNoZWNrb3V0IHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBmaWxlczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBtb2RpZnkgLXggPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnBhdGgtdG8tc291cmNlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGFib3ZlIGNvbW1hbmQgZm9ybSwgdGhlIGRlZmF1bHQgZGV2ZWxvcG1lbnQgYnJhbmNoCisgICAgICAgICAgICAgICAgd291bGQgYmUgImRldnRvb2wiLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIG1vZGlmeSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXVwZGF0aW5nLWEtcmVjaXBlJz4KKyAgICAgICAgICAgIDx0aXRsZT5VcGRhdGluZyBhIFJlY2lwZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICB1cGRhdGUgeW91ciByZWNpcGUgd2l0aCBwYXRjaGVzIHRoYXQgcmVmbGVjdCBjaGFuZ2VzIHlvdSBtYWtlCisgICAgICAgICAgICAgICAgdG8gdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGtub3cgeW91IGFyZSBnb2luZyB0byB3b3JrIG9uIHNvbWUKKyAgICAgICAgICAgICAgICBjb2RlLCB5b3UgY291bGQgZmlyc3QgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2RldnRvb2wtbW9kaWZ5aW5nLWEtcmVjaXBlJz48ZmlsZW5hbWU+ZGV2dG9vbCBtb2RpZnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGV4dHJhY3QgdGhlIGNvZGUgYW5kIHNldCB1cCB0aGUgd29ya3NwYWNlLgorICAgICAgICAgICAgICAgIEFmdGVyIHdoaWNoLCB5b3UgY291bGQgbW9kaWZ5LCBjb21waWxlLCBhbmQgdGVzdCB0aGUgY29kZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSByZXN1bHRzIGFuZCB5b3UgaGF2ZSBjb21taXR0ZWQKKyAgICAgICAgICAgICAgICB5b3VyIGNoYW5nZXMgdG8gdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIHRoZW4KKyAgICAgICAgICAgICAgICBydW4gdGhlIDxmaWxlbmFtZT5kZXZ0b29sIHVwZGF0ZS1yZWNpcGU8L2ZpbGVuYW1lPiB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgcGF0Y2hlcyBhbmQgdXBkYXRlIHRoZSByZWNpcGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGRldnRvb2wgdXBkYXRlLXJlY2lwZSA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IHJ1biB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgd2l0aG91dCBjb21taXR0aW5nIHlvdXIgY2hhbmdlcywgdGhlIGNvbW1hbmQgaWdub3JlcyB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLgorICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICBPZnRlbiwgeW91IG1pZ2h0IHdhbnQgdG8gYXBwbHkgY3VzdG9taXphdGlvbnMgbWFkZSB0byB5b3VyCisgICAgICAgICAgICAgICAgIHNvZnR3YXJlIGluIHlvdXIgb3duIGxheWVyIHJhdGhlciB0aGFuIGFwcGx5IHRoZW0gdG8gdGhlCisgICAgICAgICAgICAgICAgIG9yaWdpbmFsIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWE8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+LS1hcHBlbmQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICBvcHRpb24gd2l0aCB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgIFRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvIHNwZWNpZnkgdGhlIGxheWVyIGludG8gd2hpY2ggdG8KKyAgICAgICAgICAgICAgICAgd3JpdGUgYW4gYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+IC1hIDxyZXBsYWNlYWJsZT5iYXNlLWxheWVyLWRpcmVjdG9yeTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4qLmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcyBjcmVhdGVkIGF0IHRoZQorICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZSBwYXRoIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGxheWVyIGRpcmVjdG9yeSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgbWF5IG9yIG1heSBub3QgYmUgaW4geW91ciA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgIElmIGFuIGFwcGVuZCBmaWxlIGFscmVhZHkgZXhpc3RzLCB0aGUgY29tbWFuZCB1cGRhdGVzIGl0CisgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgdXBkYXRlLXJlY2lwZSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLXJlc2V0dGluZy1hLXJlY2lwZSc+CisgICAgICAgICAgICA8dGl0bGU+UmVzZXR0aW5nIGEgUmVjaXBlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVtb3ZlIGEKKyAgICAgICAgICAgICAgICByZWNpcGUgYW5kIGl0cyBjb25maWd1cmF0aW9uIChlLmcuIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUpIGZyb20gdGhlIHdvcmtzcGFjZSBsYXllci4KKyAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgdGhpcyBjb21tYW5kIGRlbGV0ZXMgdGhlIHJlY2lwZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgZG9lcyBub3QgcGh5c2ljYWxseSBtb3ZlIHRoZW0gZm9yIHlvdS4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBtdXN0IGJlIHN1cmUgdG8gcGh5c2ljYWxseSByZWxvY2F0ZSB5b3VyCisgICAgICAgICAgICAgICAgdXBkYXRlZCByZWNpcGUgYW5kIHRoZSBhcHBlbmQgZmlsZSBvdXRzaWRlIG9mIHRoZSB3b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICBsYXllciBiZWZvcmUgcnVubmluZyB0aGUgPGZpbGVuYW1lPmRldnRvb2wgcmVzZXQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCByZXNldDwvZmlsZW5hbWU+IGNvbW1hbmQgZGV0ZWN0cyB0aGF0CisgICAgICAgICAgICAgICAgdGhlIHJlY2lwZSBvciB0aGUgYXBwZW5kIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCwgdGhlCisgICAgICAgICAgICAgICAgY29tbWFuZCBwcmVzZXJ2ZXMgdGhlIG1vZGlmaWVkIGZpbGVzIGluIGEgc2VwYXJhdGUgImF0dGljIgorICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSB1bmRlciB0aGUgd29ya3NwYWNlIGxheWVyLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXZ0b29sIHJlc2V0IC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtYnVpbGRpbmcteW91ci1zb2Z0d2FyZSc+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGRpbmcgWW91ciBTb2Z0d2FyZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNhdXNlIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgeW91ciBzb2Z0d2FyZSBiYXNlZAorICAgICAgICAgICAgICAgIG9uIHRoZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGJ1aWxkIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC0taGVscDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEJ1aWxkaW5nIHlvdXIgc29mdHdhcmUgdXNpbmcgPGZpbGVuYW1lPmRldnRvb2wgYnVpbGQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGlzIGlkZW50aWNhbCB0byB1c2luZyBCaXRCYWtlIHRvIGJ1aWxkIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdkZXZ0b29sLWRlcGxveWluZy15b3VyLXNvZnR3YXJlLW9uLXRoZS10YXJnZXQtbWFjaGluZSc+CisgICAgICAgICAgICA8dGl0bGU+RGVwbG95aW5nIFlvdXIgU29mdHdhcmUgb24gdGhlIFRhcmdldCBNYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGRlcGxveSB0aGUgcmVjaXBlJ3MgYnVpbGQgb3V0cHV0IHRvIHRoZSBsaXZlIHRhcmdldCBtYWNoaW5lOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGRlcGxveS10YXJnZXQgPHJlcGxhY2VhYmxlPnJlY2lwZTwvcmVwbGFjZWFibGU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0IG1hY2hpbmUsIHdoaWNoIG11c3QgYmUgcnVubmluZyBhbiBTU0ggc2VydmVyIChpLmUuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJAaG9zdG5hbWVbOmRlc3RkaXJdPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZGVwbG95cyBhbGwgZmlsZXMgaW5zdGFsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgeW91IGRvIG5vdCBuZWVkIHRvIGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGVuYWJsZWQKKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgIElmIHlvdSBkbywgdGhlIHBhY2thZ2UgbWFuYWdlciBpcyBieXBhc3NlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95LXRhcmdldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGlzIGZvciBkZXZlbG9wbWVudCBvbmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBuZXZlciB1c2UgaXQgdG8gdXBkYXRlIGFuIGltYWdlIHRoYXQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiBwcm9kdWN0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgY29tcGxldGUgc3ludGF4LCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC0taGVscDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RldnRvb2wtcmVtb3ZpbmcteW91ci1zb2Z0d2FyZS1mcm9tLXRoZS10YXJnZXQtbWFjaGluZSc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZpbmcgWW91ciBTb2Z0d2FyZSBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmRldnRvb2wgdW5kZXBsb3ktdGFyZ2V0PC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIHJlbW92ZSBkZXBsb3llZCBidWlsZCBvdXRwdXQgZnJvbSB0aGUgdGFyZ2V0IG1hY2hpbmUuCisgICAgICAgICAgICAgICAgRm9yIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPiBjb21tYW5kIHRvCisgICAgICAgICAgICAgICAgd29yaywgeW91IG11c3QgaGF2ZSBwcmV2aW91c2x5IHVzZWQgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZGV2dG9vbC1kZXBsb3lpbmcteW91ci1zb2Z0d2FyZS1vbi10aGUtdGFyZ2V0LW1hY2hpbmUnPjxmaWxlbmFtZT5kZXZ0b29sIGRlcGxveS10YXJnZXQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIHVuZGVwbG95LXRhcmdldCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4mbmJzcDs8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZSwgd2hpY2ggbXVzdCBiZSBydW5uaW5nIGFuIFNTSCBzZXJ2ZXIgKGkuZS4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNlckBob3N0bmFtZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGNvbXBsZXRlIHN5bnRheCwgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2dG9vbCB1bmRlcGxveS10YXJnZXQgLS1oZWxwPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2dG9vbC1jcmVhdGluZy10aGUtd29ya3NwYWNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyB0aGUgV29ya3NwYWNlIExheWVyIGluIGFuIEFsdGVybmF0aXZlIExvY2F0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+ZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlPC9maWxlbmFtZT4gY29tbWFuZCB0bworICAgICAgICAgICAgICAgIGNyZWF0ZSBhIG5ldyB3b3Jrc3BhY2UgbGF5ZXIgaW4geW91cgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBuZXcgd29ya3NwYWNlIGxheWVyLCBpdCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb25seS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheWVyIGluIHlvdXIKKyAgICAgICAgICAgICAgICBjdXJyZW50IHdvcmtpbmcgYW5kIGJ5IGRlZmF1bHQgbmFtZXMgdGhlIHdvcmtzcGFjZSBsYXllcgorICAgICAgICAgICAgICAgICJ3b3Jrc3BhY2UiOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBkZXZ0b29sIGNyZWF0ZS13b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXgsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAtLWhlbHA8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBjcmVhdGUgYSB3b3Jrc3BhY2UgbGF5ZXIgYW55d2hlcmUgYnkgc3VwcGx5aW5nCisgICAgICAgICAgICAgICAgYSBwYXRobmFtZSB3aXRoIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBjcmVhdGVzIGEgbmV3IHdvcmtzcGFjZSBsYXllciBuYW1lZAorICAgICAgICAgICAgICAgICJuZXctd29ya3NwYWNlIjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlIC9ob21lL3Njb3R0cmlmL25ldy13b3Jrc3BhY2UKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNpbmctYS1xdWlsdC13b3JrZmxvdyI+CisgICAgICAgIDx0aXRsZT5Vc2luZyBRdWlsdCBpbiBZb3VyIFdvcmtmbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0Jz5RdWlsdDwvdWxpbms+CisgICAgICAgICAgICBpcyBhIHBvd2VyZnVsIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGNhcHR1cmUgc291cmNlIGNvZGUgY2hhbmdlcworICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgYSBjbGVhbiBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdXRsaW5lcyB0aGUgdHlwaWNhbCB3b3JrZmxvdyB5b3UgY2FuIHVzZSB0byBtb2RpZnkKKyAgICAgICAgICAgIHNvdXJjZSBjb2RlLCB0ZXN0IGNoYW5nZXMsIGFuZCB0aGVuIHByZXNlcnZlIHRoZSBjaGFuZ2VzIGluIHRoZQorICAgICAgICAgICAgZm9ybSBvZiBhIHBhdGNoIGFsbCB1c2luZyBRdWlsdC4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIFdpdGggcmVnYXJkIHRvIHByZXNlcnZpbmcgY2hhbmdlcyB0byBzb3VyY2UgZmlsZXMgaWYgeW91CisgICAgICAgICAgICAgICAgY2xlYW4gYSByZWNpcGUgb3IgaGF2ZSA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+IGVuYWJsZWQsCisgICAgICAgICAgICAgICAgdGhlIHdvcmtmbG93IGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctZGV2dG9vbC1pbi15b3VyLXdvcmtmbG93Jz5Vc2luZyA8ZmlsZW5hbWU+ZGV2dG9vbDwvZmlsZW5hbWU+IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaXMgYSBzYWZlciBkZXZlbG9wbWVudCBmbG93IHRoYW4gdGhhbiB0aGUgZmxvdyB0aGF0CisgICAgICAgICAgICAgICAgdXNlcyBRdWlsdC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93IHRoZXNlIGdlbmVyYWwgc3RlcHM6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5GaW5kIHRoZSBTb3VyY2UgQ29kZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUZW1wb3Jhcnkgc291cmNlIGNvZGUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBpcyBrZXB0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ZpbmRpbmctdGhlLXRlbXBvcmFyeS1zb3VyY2UtY29kZSc+RmluZGluZyBUZW1wb3JhcnkgU291cmNlIENvZGU8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIHRvIGxlYXJuIGhvdyB0byBsb2NhdGUgdGhlIGRpcmVjdG9yeSB0aGF0IGhhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlIGZvciBhIHBhcnRpY3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGFuZ2UgWW91ciBXb3JraW5nIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSB0ZW1wb3Jhcnkgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFRoYXQgZGlyZWN0b3J5IGlzIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBOZXcgUGF0Y2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgY29kZSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgbmV3IHBhdGNoLgorICAgICAgICAgICAgICAgICAgICBUbyBjcmVhdGUgYSBuZXcgcGF0Y2ggZmlsZSwgdXNlIDxmaWxlbmFtZT5xdWlsdCBuZXc8L2ZpbGVuYW1lPiBhcyBiZWxvdzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IG5ldyBteV9jaGFuZ2VzLnBhdGNoCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk5vdGlmeSBRdWlsdCBhbmQgQWRkIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGNyZWF0aW5nIHRoZSBwYXRjaCwgeW91IG5lZWQgdG8gbm90aWZ5IFF1aWx0IGFib3V0IHRoZSBmaWxlcworICAgICAgICAgICAgICAgICAgICB5b3UgcGxhbiB0byBlZGl0LgorICAgICAgICAgICAgICAgICAgICBZb3Ugbm90aWZ5IFF1aWx0IGJ5IGFkZGluZyB0aGUgZmlsZXMgdG8gdGhlIHBhdGNoIHlvdSBqdXN0IGNyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBxdWlsdCBhZGQgZmlsZTEuYyBmaWxlMi5jIGZpbGUzLmMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVkaXQgdGhlIEZpbGVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE1ha2UgeW91ciBjaGFuZ2VzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgZmlsZXMgeW91IGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UZXN0IFlvdXIgQ2hhbmdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZSwgdGhlIGVhc2llc3Qgd2F5IHRvCisgICAgICAgICAgICAgICAgICAgIHlvdXIgY2hhbmdlcyBpcyBieSBjYWxsaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2sgYXMgc2hvd24gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjb21waWxlIC1mIDxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi0tZm9yY2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvcHRpb24gZm9yY2VzIHRoZSBzcGVjaWZpZWQgdGFzayB0byBleGVjdXRlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZmluZCBwcm9ibGVtcyB3aXRoIHlvdXIgY29kZSwgeW91IGNhbiBqdXN0IGtlZXAgZWRpdGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgcmUtdGVzdGluZyBpdGVyYXRpdmVseSB1bnRpbCB0aGluZ3Mgd29yayBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+QWxsIHRoZSBtb2RpZmljYXRpb25zIHlvdSBtYWtlIHRvIHRoZSB0ZW1wb3Jhcnkgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgZGlzYXBwZWFyIG9uY2UgeW91IHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmRvX2NsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrcyB1c2luZyBCaXRCYWtlIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIGNsZWFuIDxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW5hbGwgPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgTW9kaWZpY2F0aW9ucyB3aWxsIGFsc28gZGlzYXBwZWFyIGlmIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5ybV93b3JrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdlbmVyYXRlIHRoZSBQYXRjaDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdXIgY2hhbmdlcyB3b3JrIGFzIGV4cGVjdGVkLCB5b3UgbmVlZCB0byB1c2UgUXVpbHQgdG8gZ2VuZXJhdGUgdGhlIGZpbmFsIHBhdGNoIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYWxsIHlvdXIgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHF1aWx0IHJlZnJlc2gKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBBdCB0aGlzIHBvaW50LCB0aGUgPGZpbGVuYW1lPm15X2NoYW5nZXMucGF0Y2g8L2ZpbGVuYW1lPiBmaWxlIGhhcyBhbGwgeW91ciBlZGl0cyBtYWRlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZmlsZTEuYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZmlsZTIuYzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGUzLmM8L2ZpbGVuYW1lPiBmaWxlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUgaW4gdGhlIDxmaWxlbmFtZT5wYXRjaGVzLzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlICg8ZmlsZW5hbWU+UzwvZmlsZW5hbWU+KSBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db3B5IHRoZSBQYXRjaCBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEZvciBzaW1wbGljaXR5LCBjb3B5IHRoZSBwYXRjaCBmaWxlIGludG8gYSBkaXJlY3RvcnkgbmFtZWQgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHlvdSBjYW4gY3JlYXRlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0aGF0IGhvbGRzIHRoZSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgZmlsZSBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFBsYWNpbmcgdGhlIHBhdGNoIGhlcmUgZ3VhcmFudGVlcyB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdpbGwgZmluZAorICAgICAgICAgICAgICAgICAgICB0aGUgcGF0Y2guCisgICAgICAgICAgICAgICAgICAgIE5leHQsIGFkZCB0aGUgcGF0Y2ggaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz5TUkNfVVJJPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL215X2NoYW5nZXMucGF0Y2giCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZmluZGluZy10aGUtdGVtcG9yYXJ5LXNvdXJjZS1jb2RlJz4KKyAgICAgICAgPHRpdGxlPkZpbmRpbmcgVGVtcG9yYXJ5IFNvdXJjZSBDb2RlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBtaWdodCBmaW5kIGl0IGhlbHBmdWwgZHVyaW5nIGRldmVsb3BtZW50IHRvIG1vZGlmeSB0aGUKKyAgICAgICAgICAgIHRlbXBvcmFyeSBzb3VyY2UgY29kZSB1c2VkIGJ5IHJlY2lwZXMgdG8gYnVpbGQgcGFja2FnZXMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGRldmVsb3BpbmcgYSBwYXRjaCBhbmQgeW91IG5lZWQgdG8KKyAgICAgICAgICAgIGV4cGVyaW1lbnQgYSBiaXQgdG8gZmlndXJlIG91dCB5b3VyIHNvbHV0aW9uLgorICAgICAgICAgICAgQWZ0ZXIgeW91IGhhdmUgaW5pdGlhbGx5IGJ1aWx0IHRoZSBwYWNrYWdlLCB5b3UgY2FuIGl0ZXJhdGl2ZWx5CisgICAgICAgICAgICB0d2VhayB0aGUgc291cmNlIGNvZGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sIGFuZCB0aGVuCisgICAgICAgICAgICB5b3UgY2FuIGZvcmNlIGEgcmUtY29tcGlsZSBhbmQgcXVpY2tseSB0ZXN0IHlvdXIgYWx0ZXJlZCBjb2RlLgorICAgICAgICAgICAgT25jZSB5b3Ugc2V0dGxlIG9uIGEgc29sdXRpb24sIHlvdSBjYW4gdGhlbiBwcmVzZXJ2ZSB5b3VyIGNoYW5nZXMKKyAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHBhdGNoZXMuCisgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIFF1aWx0IGZvciBkZXZlbG9wbWVudCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIGEgYnVpbGQsIHRoZSB1bnBhY2tlZCB0ZW1wb3Jhcnkgc291cmNlIGNvZGUgdXNlZCBieSByZWNpcGVzCisgICAgICAgICAgICB0byBidWlsZCBwYWNrYWdlcyBpcyBhdmFpbGFibGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBhcworICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUyc+UzwvdWxpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBCZWxvdyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFMgPSAiJHtXT1JLRElSfS8ke0JQfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBtYW55IHJlY2lwZXMgb3ZlcnJpZGUgdGhlIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgcmVjaXBlcyB0aGF0IGZldGNoIHRoZWlyIHNvdXJjZSBmcm9tIEdpdCB1c3VhbGx5IHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPiB0byA8ZmlsZW5hbWU+JHtXT1JLRElSfS9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1CUCc+PGZpbGVuYW1lPkJQPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgdGhlIGJhc2UgcmVjaXBlIG5hbWUsIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBuYW1lIGFuZCB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlAgPSAiJHtCUE59LSR7UFZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBhdGggdG8gdGhlIHdvcmsgZGlyZWN0b3J5IGZvciB0aGUgcmVjaXBlCisgICAgICAgICAgICAoPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPikKKyAgICAgICAgICAgIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtUTVBESVJ9L3dvcmsvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFjdHVhbCBkaXJlY3RvcnkgZGVwZW5kcyBvbiBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsIGJ1aWxkIG91dHB1dCBkaXJlY3Rvcnk8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTVVMVElNQUNIX1RBUkdFVF9TWVMnPjxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgc3lzdGVtIGlkZW50aWZpZXI8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgbmFtZTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1FWFRFTkRQRSc+PGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIC0gKGlmCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc3BlY2lmaWVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBjYXNlIGZvciBtb3N0CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMsIHRoZW4gPGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT4gaXMgYmxhbmspPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHZlcnNpb248L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgcmV2aXNpb248L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlcgorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiwgYSBkZWZhdWx0IEJ1aWxkIERpcmVjdG9yeSBhdAorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2LXBva3ktbGludXg8L2ZpbGVuYW1lPiBtYWNoaW5lIHRhcmdldAorICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5mb29fMS4zLjAuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHdvcmsgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0bworICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcG9reS9idWlsZC90bXAvd29yay9xZW11eDg2LXBva3ktbGludXgvZm9vLzEuMy4wLXIwCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBrbm93IHdoZXJlIHRvIGxvY2F0ZSB0aGUgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZQorICAgICAgICAgICAgdGVtcG9yYXJ5IHNvdXJjZSBjb2RlLCB5b3UgY2FuIHVzZSBhIFF1aWx0IGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9uCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYS1xdWlsdC13b3JrZmxvdyc+VXNpbmcgUXVpbHQgaW4gWW91ciBXb3JrZmxvdzwvbGluaz4iCisgICAgICAgICAgICB0byBtYWtlIHlvdXIgZWRpdHMsIHRlc3QgdGhlIGNoYW5nZXMsIGFuZCBwcmVzZXJ2ZSB0aGUgY2hhbmdlcyBpbgorICAgICAgICAgICAgdGhlIGZvcm0gb2YgcGF0Y2hlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ltYWdlLWRldmVsb3BtZW50LXVzaW5nLXRvYXN0ZXInPgorICAgIDx0aXRsZT5JbWFnZSBEZXZlbG9wbWVudCBVc2luZyBUb2FzdGVyPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUb2FzdGVyIGlzIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCdzIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICBzeXN0ZW0uCisgICAgICAgIFlvdSBjYW4gaW5pdGlhdGUgYnVpbGRzIHVzaW5nIFRvYXN0ZXIgYXMgd2VsbCBhcyBleGFtaW5lIHRoZSByZXN1bHRzCisgICAgICAgIGFuZCBzdGF0aXN0aWNzIG9mIGJ1aWxkcy4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7I3RvYXN0ZXItbWFudWFsLWludHJvJz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4KKyAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzZXQgdXAgYW5kIHVzZSBUb2FzdGVyIHRvIGJ1aWxkIGltYWdlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbWFnZS1kZXZlbG9wbWVudC11c2luZy1ob2InPgorICAgIDx0aXRsZT5JbWFnZSBEZXZlbG9wbWVudCBVc2luZyBIb2I8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPkhvYjwvdWxpbms+IGlzIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciB0aGUKKyAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2ggaXMgYmFzZWQgb24gQml0QmFrZS4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIEhvYiB0byBidWlsZCBjdXN0b20gb3BlcmF0aW5nIHN5c3RlbSBpbWFnZXMgd2l0aGluIHRoZSBZb2N0byBQcm9qZWN0IGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICBIb2Igc2ltcGx5IHByb3ZpZGVzIGEgZnJpZW5kbHkgaW50ZXJmYWNlIG92ZXIgdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC4KKyAgICAgICAgSW4gb3RoZXIgd29yZHMsIGJ1aWxkaW5nIGltYWdlcyB3aXRoIHRoZSBIb2IgbGV0cyB5b3UgdGFrZSBjYXJlIG9mIGNvbW1vbiBidWlsZCB0YXNrcyBtb3JlIGVhc2lseS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgSG9iLCBzZWUgdGhlIHByb2plY3QgcGFnZSBhdAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9ob2InPjwvdWxpbms+CisgICAgICAgIG9uIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICAgIElmIHlvdSBmb2xsb3cgdGhlICJEb2N1bWVudGF0aW9uIiBsaW5rIGZyb20gdGhlIEhvYiBwYWdlLCB5b3Ugd2lsbAorICAgICAgICBmaW5kIGEgc2hvcnQgaW50cm9kdWN0b3J5IHRyYWluaW5nIHZpZGVvIG9uIEhvYi4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0cyBzb21lIGZlYXR1cmVzIG9mIEhvYjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIHNldHVwIGFuZCBydW4gSG9iIHVzaW5nIHRoZXNlIGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorICAgICAkIGhvYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc2V0IHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBmb3Igd2hpY2ggeW91IGFyZSBidWlsZGluZyB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBtb2RpZnkgdmFyaW91cyBwb2xpY3kgc2V0dGluZ3Mgc3VjaCBhcyB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGZvcm1hdCB3aXRoIHdoaWNoIHRvIGJ1aWxkLAorICAgICAgICAgICAgICAgIHRoZSBwYXJhbGxlbGlzbSBCaXRCYWtlIHVzZXMsIHdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIGFuCisgICAgICAgICAgICAgICAgZXh0ZXJuYWwgdG9vbGNoYWluLCBhbmQgd2hpY2ggaG9zdCB0byBidWlsZCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gbWFuYWdlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5sYXllcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc2VsZWN0IGEgYmFzZSBpbWFnZSBhbmQgdGhlbiBhZGQgZXh0cmEgcGFja2FnZXMgZm9yIHlvdXIgY3VzdG9tIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gbGF1bmNoIGFuZCBtb25pdG9yIHRoZSBidWlsZCBmcm9tIHdpdGhpbiBIb2IuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9InBsYXRkZXYtYXBwZGV2LWRldnNoZWxsIj4KKyAgICA8dGl0bGU+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBkZWJ1Z2dpbmcgY2VydGFpbiBjb21tYW5kcyBvciBldmVuIHdoZW4ganVzdCBlZGl0aW5nIHBhY2thZ2VzLAorICAgICAgICA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBjYW4gYmUgYSB1c2VmdWwgdG9vbC4KKyAgICAgICAgV2hlbiB5b3UgaW52b2tlIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LCBzb3VyY2UgZmlsZXMgYXJlCisgICAgICAgIGV4dHJhY3RlZCBpbnRvIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgYW5kIHBhdGNoZXMgYXJlIGFwcGxpZWQuCisgICAgICAgIFRoZW4sIGEgbmV3IHRlcm1pbmFsIGlzIG9wZW5lZCBhbmQgeW91IGFyZSBwbGFjZWQgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICBJbiB0aGUgbmV3IHRlcm1pbmFsLCBhbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZC1yZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgc3RpbGwgZGVmaW5lZCBzbyB5b3UgY2FuIHVzZSBjb21tYW5kcyBzdWNoIGFzIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlIGNvbW1hbmRzIGV4ZWN1dGUganVzdCBhcyBpZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3ZXJlIGV4ZWN1dGluZyB0aGVtLgorICAgICAgICBDb25zZXF1ZW50bHksIHdvcmtpbmcgdGhpcyB3YXkgY2FuIGJlIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgYSBidWlsZCBvciBwcmVwYXJpbmcKKyAgICAgICAgc29mdHdhcmUgdG8gYmUgdXNlZCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSB0aGF0IHVzZXMgPGZpbGVuYW1lPmRldnNoZWxsPC9maWxlbmFtZT4gb24gYSB0YXJnZXQgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3A8L2ZpbGVuYW1lPjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBkZXZzaGVsbAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY29tbWFuZCBzcGF3bnMgYSB0ZXJtaW5hbCB3aXRoIGEgc2hlbGwgcHJvbXB0IHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU9FX1RFUk1JTkFMJz48ZmlsZW5hbWU+T0VfVEVSTUlOQUw8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgIHZhcmlhYmxlIGNvbnRyb2xzIHdoYXQgdHlwZSBvZiBzaGVsbCBpcyBvcGVuZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBzcGF3bmVkIHRlcm1pbmFscywgdGhlIGZvbGxvd2luZyBvY2N1cnM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgaW5jbHVkZXMgdGhlCisgICAgICAgICAgICAgICAgY3Jvc3MtdG9vbGNoYWluLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8ZmlsZW5hbWU+cGtnY29uZmlnPC9maWxlbmFtZT4gdmFyaWFibGVzIGZpbmQgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gY29tbWFuZCBmaW5kcyB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHNpdGUgZmlsZXMgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmVjZXNzYXJ5IGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2l0aGluIHRoaXMgZW52aXJvbm1lbnQsIHlvdSBjYW4gcnVuIGNvbmZpZ3VyZSBvciBjb21waWxlCisgICAgICAgIGNvbW1hbmRzIGFzIGlmIHRoZXkgd2VyZSBiZWluZyBydW4gYnkKKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXRzZWxmLgorICAgICAgICBBcyBub3RlZCBlYXJsaWVyLCB0aGUgd29ya2luZyBkaXJlY3RvcnkgYWxzbyBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgdG8gdGhlCisgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQsIHlvdSBqdXN0IGV4aXQgdGhlIHNoZWxsIG9yIGNsb3NlIHRoZSB0ZXJtaW5hbCB3aW5kb3cuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgd29ydGggcmVtZW1iZXJpbmcgdGhhdCB3aGVuIHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICB5b3UgbmVlZCB0byB1c2UgdGhlIGZ1bGwgY29tcGlsZXIgbmFtZSBzdWNoIGFzIDxmaWxlbmFtZT5hcm0tcG9reS1saW51eC1nbnVlYWJpLWdjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNhbWUgYXBwbGllcyB0byBvdGhlciBhcHBsaWNhdGlvbnMgc3VjaCBhcyA8ZmlsZW5hbWU+YmludXRpbHM8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saWJ0b29sPC9maWxlbmFtZT4gYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgQml0QmFrZSBzZXRzIHVwIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIDxmaWxlbmFtZT5DQzwvZmlsZW5hbWU+CisgICAgICAgICAgICB0byBhc3Npc3QgYXBwbGljYXRpb25zLCBzdWNoIGFzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gdG8gZmluZCB0aGUgY29ycmVjdCB0b29scy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBzdGlsbCB3b3JrcyBvdmVyCisgICAgICAgICAgICBYMTEgZm9yd2FyZGluZyBhbmQgc2ltaWxhciBzaXR1YXRpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1uZXdiaWUueG1sIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGZhOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbApAQCAtMCwwICsxLDE3MTYgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLW5ld2JpZSc+CisKKzx0aXRsZT5UaGUgWW9jdG8gUHJvamVjdCBPcGVuIFNvdXJjZSBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBoZWxwcyB5b3UgdW5kZXJzdGFuZCB0aGUgWW9jdG8gUHJvamVjdCBhcyBhbiBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBwcm9qZWN0LgorICAgIEluIGdlbmVyYWwsIHdvcmtpbmcgaW4gYW4gb3BlbiBzb3VyY2UgZW52aXJvbm1lbnQgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSB3b3JraW5nIGluIGEKKyAgICBjbG9zZWQsIHByb3ByaWV0YXJ5IGVudmlyb25tZW50LgorICAgIEFkZGl0aW9uYWxseSwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBzcGVjaWZpYyB0b29scyBhbmQgY29uc3RydWN0cyBhcyBwYXJ0IG9mIGl0cyBkZXZlbG9wbWVudAorICAgIGVudmlyb25tZW50LgorICAgIFRoaXMgY2hhcHRlciBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIG9wZW4gc291cmNlIHBoaWxvc29waHksIHVzaW5nIHRoZQorICAgIFlvY3RvIFByb2plY3QgaW4gYSB0ZWFtIGVudmlyb25tZW50LCBzb3VyY2UgcmVwb3NpdG9yaWVzLCBZb2N0byBQcm9qZWN0CisgICAgdGVybXMsIGxpY2Vuc2luZywgdGhlIG9wZW4gc291cmNlIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gR2l0LAorICAgIHdvcmtmbG93cywgYnVnIHRyYWNraW5nLCBhbmQgaG93IHRvIHN1Ym1pdCBjaGFuZ2VzLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nb3Blbi1zb3VyY2UtcGhpbG9zb3BoeSc+CisgICAgPHRpdGxlPk9wZW4gU291cmNlIFBoaWxvc29waHk8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIE9wZW4gc291cmNlIHBoaWxvc29waHkgaXMgY2hhcmFjdGVyaXplZCBieSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBkaXJlY3RlZCBieSBwZWVyIHByb2R1Y3Rpb24KKyAgICAgICAgYW5kIGNvbGxhYm9yYXRpb24gdGhyb3VnaCBhbiBhY3RpdmUgY29tbXVuaXR5IG9mIGRldmVsb3BlcnMuCisgICAgICAgIENvbnRyYXN0IHRoaXMgdG8gdGhlIG1vcmUgc3RhbmRhcmQgY2VudHJhbGl6ZWQgZGV2ZWxvcG1lbnQgbW9kZWxzIHVzZWQgYnkgY29tbWVyY2lhbCBzb2Z0d2FyZQorICAgICAgICBjb21wYW5pZXMgd2hlcmUgYSBmaW5pdGUgc2V0IG9mIGRldmVsb3BlcnMgcHJvZHVjZXMgYSBwcm9kdWN0IGZvciBzYWxlIHVzaW5nIGEgZGVmaW5lZCBzZXQKKyAgICAgICAgb2YgcHJvY2VkdXJlcyB0aGF0IHVsdGltYXRlbHkgcmVzdWx0IGluIGFuIGVuZCBwcm9kdWN0IHdob3NlIGFyY2hpdGVjdHVyZSBhbmQgc291cmNlIG1hdGVyaWFsCisgICAgICAgIGFyZSBjbG9zZWQgdG8gdGhlIHB1YmxpYy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3BlbiBzb3VyY2UgcHJvamVjdHMgY29uY2VwdHVhbGx5IGhhdmUgZGlmZmVyaW5nIGNvbmN1cnJlbnQgYWdlbmRhcywgYXBwcm9hY2hlcywgYW5kIHByb2R1Y3Rpb24uCisgICAgICAgIFRoZXNlIGZhY2V0cyBvZiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBjYW4gY29tZSBmcm9tIGFueW9uZSBpbiB0aGUgcHVibGljIChjb21tdW5pdHkpIHRoYXQgaGFzIGEKKyAgICAgICAgc3Rha2UgaW4gdGhlIHNvZnR3YXJlIHByb2plY3QuCisgICAgICAgIFRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCBjb250YWlucyBuZXcgY29weXJpZ2h0LCBsaWNlbnNpbmcsIGRvbWFpbiwgYW5kIGNvbnN1bWVyIGlzc3VlcworICAgICAgICB0aGF0IGRpZmZlciBmcm9tIHRoZSBtb3JlIHRyYWRpdGlvbmFsIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorICAgICAgICBJbiBhbiBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwgdGhlIGVuZCBwcm9kdWN0LCBzb3VyY2UgbWF0ZXJpYWwsIGFuZCBkb2N1bWVudGF0aW9uIGFyZQorICAgICAgICBhbGwgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYXQgbm8gY29zdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBiZW5jaG1hcmsgZXhhbXBsZSBvZiBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0IGlzIHRoZSBMaW51eCBrZXJuZWwsIHdoaWNoIHdhcyBpbml0aWFsbHkgY29uY2VpdmVkCisgICAgICAgIGFuZCBjcmVhdGVkIGJ5IEZpbm5pc2ggY29tcHV0ZXIgc2NpZW5jZSBzdHVkZW50IExpbnVzIFRvcnZhbGRzIGluIDE5OTEuCisgICAgICAgIENvbnZlcnNlbHksIGEgZ29vZCBleGFtcGxlIG9mIGEgbm9uLW9wZW4gc291cmNlIHByb2plY3QgaXMgdGhlCisgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPldpbmRvd3M8L3RyYWRlbWFyaz4gZmFtaWx5IG9mIG9wZXJhdGluZworICAgICAgICBzeXN0ZW1zIGRldmVsb3BlZCBieSA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5NaWNyb3NvZnQ8L3RyYWRlbWFyaz4gQ29ycG9yYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdpa2lwZWRpYSBoYXMgYSBnb29kIGhpc3RvcmljYWwgZGVzY3JpcHRpb24gb2YgdGhlIE9wZW4gU291cmNlIFBoaWxvc29waHkKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVuX3NvdXJjZSc+aGVyZTwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBoZWxwZnVsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTGludXggQ29tbXVuaXR5CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sZG4ubGludXhmb3VuZGF0aW9uLm9yZy9ib29rL2hvdy1wYXJ0aWNpcGF0ZS1saW51eC1jb21tdW5pdHknPmhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktY2hhbmdlcy1jb2xsYWJvcmF0ZSI+CisgICAgPHRpdGxlPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGluIGEgVGVhbSBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGNsZWFyIGhvdyB5b3UgY2FuIHVzZSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBpbiBhIHRlYW0gZW52aXJvbm1lbnQsIG9yIHNjYWxlIGl0IGZvciBhIGxhcmdlIHRlYW0gb2YKKyAgICAgICAgZGV2ZWxvcGVycy4KKyAgICAgICAgT25lIG9mIHRoZSBzdHJlbmd0aHMgb2YgdGhlIFlvY3RvIFByb2plY3QgaXMgdGhhdCBpdCBpcyBleHRyZW1lbHkKKyAgICAgICAgZmxleGlibGUuCisgICAgICAgIFRodXMsIHlvdSBjYW4gYWRhcHQgaXQgdG8gbWFueSBkaWZmZXJlbnQgdXNlIGNhc2VzIGFuZCBzY2VuYXJpb3MuCisgICAgICAgIEhvd2V2ZXIsIHRoZXNlIGNoYXJhY3RlcmlzdGljcyBjYW4gY2F1c2UgYSBzdHJ1Z2dsZSBpZiB5b3UgYXJlIHRyeWluZworICAgICAgICB0byBjcmVhdGUgYSB3b3JraW5nIHNldHVwIHRoYXQgc2NhbGVzIGFjcm9zcyBhIGxhcmdlIHRlYW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIGhlbHAgd2l0aCB0aGVzZSB0eXBlcyBvZiBzaXR1YXRpb25zLCB0aGlzIHNlY3Rpb24gcHJlc2VudHMKKyAgICAgICAgc29tZSBvZiB0aGUgcHJvamVjdCdzIG1vc3Qgc3VjY2Vzc2Z1bCBleHBlcmllbmNlcywKKyAgICAgICAgcHJhY3RpY2VzLCBzb2x1dGlvbnMsIGFuZCBhdmFpbGFibGUgdGVjaG5vbG9naWVzIHRoYXQgd29yayB3ZWxsLgorICAgICAgICBLZWVwIGluIG1pbmQsIHRoZSBpbmZvcm1hdGlvbiBoZXJlIGlzIGEgc3RhcnRpbmcgcG9pbnQuCisgICAgICAgIFlvdSBjYW4gYnVpbGQgb2ZmIGl0IGFuZCBjdXN0b21pemUgaXQgdG8gZml0IGFueQorICAgICAgICBwYXJ0aWN1bGFyIHdvcmtpbmcgZW52aXJvbm1lbnQgYW5kIHNldCBvZiBwcmFjdGljZXMuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXN5c3RlbS1jb25maWd1cmF0aW9ucyc+CisgICAgICAgIDx0aXRsZT5TeXN0ZW0gQ29uZmlndXJhdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3lzdGVtcyBhY3Jvc3MgYSBsYXJnZSB0ZWFtIHNob3VsZCBtZWV0IHRoZSBuZWVkcyBvZgorICAgICAgICAgICAgdHdvIHR5cGVzIG9mIGRldmVsb3BlcnM6IHRob3NlIHdvcmtpbmcgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBpbWFnZSBpdHNlbGYgYW5kIHRob3NlIGRldmVsb3BpbmcgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBkZXZlbG9wZXIsIHRoZWlyIHdvcmtzdGF0aW9ucyBtdXN0CisgICAgICAgICAgICBiZSBib3RoIHJlYXNvbmFibHkgcG93ZXJmdWwgYW5kIHJ1biBMaW51eC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1hcHBsaWNhdGlvbi1kZXZlbG9wbWVudCc+CisgICAgICAgICAgICA8dGl0bGU+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZGV2ZWxvcGVycyB3aG8gbWFpbmx5IGRvIGFwcGxpY2F0aW9uIGxldmVsIHdvcmsKKyAgICAgICAgICAgICAgICBvbiB0b3Agb2YgYW4gZXhpc3Rpbmcgc29mdHdhcmUgc3RhY2ssCisgICAgICAgICAgICAgICAgaGVyZSBhcmUgc29tZSBwcmFjdGljZXMgdGhhdCB3b3JrIGJlc3Q6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBhIHByZS1idWlsdCB0b29sY2hhaW4gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIHNvZnR3YXJlIHN0YWNrIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZW4sIGRldmVsb3AgdGhlIGFwcGxpY2F0aW9uIGNvZGUgb24gdG9wIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCB3b3JrcyB3ZWxsIGZvciBzbWFsbCBudW1iZXJzIG9mIHJlbGF0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzb2xhdGVkIGFwcGxpY2F0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW4gcG9zc2libGUsIHVzZSB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Zy1pbiBmb3IgdGhlIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+IElERQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHBpZWNlcyBvZiBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgVGVjaG5vbG9neSAoQURUKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbGljYXRpb24tZGV2ZWxvcG1lbnQtd29ya2Zsb3cnPkFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBXb3JrZmxvdzwvbGluaz4iIHNlY3Rpb24gYXMgd2VsbCBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPktlZXAgeW91ciBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIHRocm91Z2ggcHJvdmlzaW9uaW5nIGVpdGhlciBhcyBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbiBkb3dubG9hZHMgb3IgYXMgdXBkYXRlcyB0aHJvdWdoIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlIG1lY2hhbmlzbSB1c2luZyA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIHVwZGF0ZXMgdG8gYW4gZXhpc3RpbmcgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGV4YWN0IG1lY2hhbmljcyBvZiBob3cgYW5kIHdoZW4gdG8gZG8gdGhpcyBhcmUgYQorICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24gZm9yIGxvY2FsIHBvbGljeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBtdWx0aXBsZSB0b29sY2hhaW5zIGluc3RhbGxlZCBsb2NhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGRpZmZlcmVudCBsb2NhdGlvbnMgdG8gYWxsb3cgZGV2ZWxvcG1lbnQgYWNyb3NzCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1jb3JlLXN5c3RlbS1kZXZlbG9wbWVudCc+CisgICAgICAgICAgICA8dGl0bGU+Q29yZSBTeXN0ZW0gRGV2ZWxvcG1lbnQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgY29yZSBzeXN0ZW0gZGV2ZWxvcG1lbnQsIGl0IGlzIG9mdGVuIGJlc3QgdG8gaGF2ZSB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaXRzZWxmIGF2YWlsYWJsZSBvbiB0aGUgZGV2ZWxvcGVyIHdvcmtzdGF0aW9ucworICAgICAgICAgICAgICAgIHNvIGRldmVsb3BlcnMgY2FuIHJ1biB0aGVpciBvd24gYnVpbGRzIGFuZCBkaXJlY3RseQorICAgICAgICAgICAgICAgIHJlYnVpbGQgdGhlIHNvZnR3YXJlIHN0YWNrLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQga2VlcCB0aGUgY29yZSBzeXN0ZW0gdW5jaGFuZ2VkIGFzIG11Y2ggYXMKKyAgICAgICAgICAgICAgICBwb3NzaWJsZSBhbmQgZG8geW91ciB3b3JrIGluIGxheWVycyBvbiB0b3Agb2YgdGhlIGNvcmUgc3lzdGVtLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGdpdmVzIHlvdSBhIGdyZWF0ZXIgbGV2ZWwgb2YgcG9ydGFiaWxpdHkgd2hlbgorICAgICAgICAgICAgICAgIHVwZ3JhZGluZyB0byBuZXcgdmVyc2lvbnMgb2YgdGhlIGNvcmUgc3lzdGVtIG9yIEJvYXJkCisgICAgICAgICAgICAgICAgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzaGFyZSBsYXllcnMgYW1vbmdzdCB0aGUgZGV2ZWxvcGVycyBvZiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICBwcm9qZWN0IGFuZCBjb250YWluIHRoZSBwb2xpY3kgY29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMKKyAgICAgICAgICAgICAgICB0aGUgcHJvamVjdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXNpZGUgZnJvbSB0aGUgcHJldmlvdXMgYmVzdCBwcmFjdGljZXMsIHRoZXJlIGV4aXN0cyBhIG51bWJlcgorICAgICAgICAgICAgICAgIG9mIHRpcHMgYW5kIHRyaWNrcyB0aGF0IGNhbiBoZWxwIHNwZWVkIHVwIGNvcmUgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBwcm9qZWN0czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VXNlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3NoYXJlZC1zdGF0ZS1jYWNoZSc+U2hhcmVkIFN0YXRlIENhY2hlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIChzc3RhdGUpIGFtb25nIGdyb3VwcyBvZiBkZXZlbG9wZXJzIHdobyBhcmUgb24gYQorICAgICAgICAgICAgICAgICAgICAgICAgZmFzdCBuZXR3b3JrLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJlc3Qgd2F5IHRvIHNoYXJlIHNzdGF0ZSBpcyB0aHJvdWdoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgc2hhcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgdXNlciB0byBidWlsZCBhIGdpdmVuIGNvbXBvbmVudCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCB0aW1lIGNvbnRyaWJ1dGVzIHRoYXQgb2JqZWN0IHRvIHRoZSBzc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBzdWJzZXF1ZW50IGJ1aWxkcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2UgdGhlIG9iamVjdCByYXRoZXIgdGhhbiByZWJ1aWxkIGl0IHRoZW1zZWx2ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byB1c2Ugb3RoZXIgcHJvdG9jb2xzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzdGF0ZSBzdWNoIGFzIEhUVFAgYW5kIEZUUCwgeW91IHNob3VsZCBhdm9pZCB0aGVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIEhUVFAgbGltaXRzIHRoZSBzc3RhdGUgdG8gcmVhZC1vbmx5IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgRlRQIHByb3ZpZGVzIHBvb3IgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhhdmUgYXV0b2J1aWxkZXJzIGNvbnRyaWJ1dGUgdG8gdGhlIHNzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCBzaW1pbGFybHkgdG8gaG93IHRoZSBkZXZlbG9wZXIgd29ya3N0YXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYmVzdC1wcmFjdGljZXMtYXV0b2J1aWxkZXJzJz5BdXRvYnVpbGRlcnM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJ1aWxkIHN0YW5kLWFsb25lIHRhcmJhbGxzIHRoYXQgY29udGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgIm1pc3NpbmciIHN5c3RlbSByZXF1aXJlbWVudHMgaWYgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXIgd29ya3N0YXRpb25zIGRvIG5vdCBtZWV0IG1pbmltdW0gc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMgc3VjaCBhcyBsYXRlc3QgUHl0aG9uIHZlcnNpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNocnBhdGg8L2ZpbGVuYW1lPiwgb3Igb3RoZXIgdG9vbHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGluc3RhbGwgYW5kIHJlbG9jYXRlIHRoZSB0YXJiYWxsIGV4YWN0bHkgYXMgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB3b3VsZCB0aGUgdXN1YWwgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBkZXZlbG9wZXJzIGNhbiBtZWV0IG1pbmltdW0gdmVyc2lvbiByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIG1vc3QgZGlzdHJpYnV0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSBhIHNtYWxsIG51bWJlciBvZiBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBoaWdoIHBlcmZvcm1hbmNlIHN5c3RlbXMgZm9yIHRlc3RpbmcgcHVycG9zZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuIGR1YWwsIHNpeC1jb3JlIFhlb25zIHdpdGggMjQgR2J5dGVzIG9mIFJBTQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBsZW50eSBvZiBkaXNrIHNwYWNlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcnMgY2FuIHVzZSB0aGVzZSBzeXN0ZW1zIGZvciB3aWRlciwgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaXZlIHRlc3Rpbmcgd2hpbGUgdGhleSBjb250aW51ZSB0byBkZXZlbG9wCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGx5IHVzaW5nIHRoZWlyIHByaW1hcnkgZGV2ZWxvcG1lbnQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmFibGUgdGhlIFBSIFNlcnZpY2Ugd2hlbiBwYWNrYWdlIGZlZWRzCisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGluY3JlbWVudGFsIHdpdGggY29udGludWFsbHkgaW5jcmVhc2luZworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz5QUjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoaXMgc2l0dWF0aW9uIG9jY3VycyB3aGVuIHlvdSB1c2Ugb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2ggcGFja2FnZSBmZWVkcyBhbmQgdXNlIGEgc2hhcmVkIHN0YXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBlbmFibGUgdGhlIFBSIFNlcnZpY2UgZm9yIGFsbCB1c2VycyB3aG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgc2hhcmVkIHN0YXRlIHBvb2wuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUFIgU2VydmljZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPldvcmtpbmcgV2l0aCBhIFBSIFNlcnZpY2U8L2xpbms+Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXNvdXJjZS1jb250cm9sLW1hbmFnZW1lbnQnPgorICAgICAgICA8dGl0bGU+U291cmNlIENvbnRyb2wgTWFuYWdlbWVudCAoU0NNKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZWVwaW5nIHlvdXIKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICBhbmQgYW55IHNvZnR3YXJlIHlvdSBhcmUgZGV2ZWxvcGluZyB1bmRlciB0aGUKKyAgICAgICAgICAgIGNvbnRyb2wgb2YgYW4gU0NNIHN5c3RlbSB0aGF0IGlzIGNvbXBhdGlibGUKKyAgICAgICAgICAgIHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYWR2aXNhYmxlLgorICAgICAgICAgICAgT2YgdGhlIFNDTXMgQml0QmFrZSBzdXBwb3J0cywgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRlYW0gc3Ryb25nbHkgcmVjb21tZW5kcyB1c2luZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+LgorICAgICAgICAgICAgR2l0IGlzIGEgZGlzdHJpYnV0ZWQgc3lzdGVtIHRoYXQgaXMgZWFzeSB0byBiYWNrdXAsCisgICAgICAgICAgICBhbGxvd3MgeW91IHRvIHdvcmsgcmVtb3RlbHksIGFuZCB0aGVuIGNvbm5lY3RzIGJhY2sgdG8gdGhlCisgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJdCBpcyByZWxhdGl2ZWx5IGVhc3kgdG8gc2V0IHVwIEdpdCBzZXJ2aWNlcyBhbmQgY3JlYXRlCisgICAgICAgICAgICBpbmZyYXN0cnVjdHVyZSBsaWtlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsnPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZzwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggaXMgYmFzZWQgb24gc2VydmVyIHNvZnR3YXJlIGNhbGxlZAorICAgICAgICAgICAgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gd2l0aCA8ZmlsZW5hbWU+Y2dpdDwvZmlsZW5hbWU+CisgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGdlbmVyYXRlIHRoZSB3ZWIgaW50ZXJmYWNlIHRoYXQgbGV0cyB5b3UgdmlldyB0aGUKKyAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBzb2Z0d2FyZSBpZGVudGlmaWVzIHVzZXJzCisgICAgICAgICAgICB1c2luZyBTU0gga2V5cyBhbmQgYWxsb3dzIGJyYW5jaC1iYXNlZAorICAgICAgICAgICAgYWNjZXNzIGNvbnRyb2xzIHRvIHJlcG9zaXRvcmllcyB0aGF0IHlvdSBjYW4gY29udHJvbCBhcyBsaXR0bGUKKyAgICAgICAgICAgIG9yIGFzIG11Y2ggYXMgbmVjZXNzYXJ5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgc2V0dXAgb2YgdGhlc2Ugc2VydmljZXMgaXMgYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIG1hbnVhbC4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHNpdGVzIHN1Y2ggYXMgdGhlc2UgZXhpc3QgdGhhdCBkZXNjcmliZSBob3cgdG8gcGVyZm9ybQorICAgICAgICAgICAgc2V0dXA6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vZ2l0LXNjbS5jb20vYm9vay9jaDQtOC5odG1sJz5HaXQgZG9jdW1lbnRhdGlvbjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICBEZXNjcmliZXMgaG93IHRvIGluc3RhbGwgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIHNlcnZlci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL3NpdGFyYW1jLmdpdGh1Yi5jb20vZ2l0b2xpdGUvbWFzdGVyLXRvYy5odG1sJz5UaGUgPGZpbGVuYW1lPmdpdG9saXRlPC9maWxlbmFtZT4gbWFzdGVyIGluZGV4PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgIEFsbCB0b3BpY3MgZm9yIDxmaWxlbmFtZT5naXRvbGl0ZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cHM6Ly9naXQud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9JbnRlcmZhY2VzLF9mcm9udGVuZHMsX2FuZF90b29scyc+SW50ZXJmYWNlcywgZnJvbnRlbmRzLCBhbmQgdG9vbHM8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gY3JlYXRlIGludGVyZmFjZXMgYW5kIGZyb250ZW5kcworICAgICAgICAgICAgICAgICAgICBmb3IgR2l0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmVzdC1wcmFjdGljZXMtYXV0b2J1aWxkZXJzJz4KKyAgICAgICAgPHRpdGxlPkF1dG9idWlsZGVyczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBdXRvYnVpbGRlcnMgYXJlIG9mdGVuIHRoZSBjb3JlIG9mIGEgZGV2ZWxvcG1lbnQgcHJvamVjdC4KKyAgICAgICAgICAgIEl0IGlzIGhlcmUgdGhhdCBjaGFuZ2VzIGZyb20gaW5kaXZpZHVhbCBkZXZlbG9wZXJzIGFyZSBicm91Z2h0CisgICAgICAgICAgICB0b2dldGhlciBhbmQgY2VudHJhbGx5IHRlc3RlZCBhbmQgc3Vic2VxdWVudCBkZWNpc2lvbnMgYWJvdXQKKyAgICAgICAgICAgIHJlbGVhc2VzIGNhbiBiZSBtYWRlLgorICAgICAgICAgICAgQXV0b2J1aWxkZXJzIGFsc28gYWxsb3cgZm9yICJjb250aW51b3VzIGludGVncmF0aW9uIiBzdHlsZQorICAgICAgICAgICAgdGVzdGluZyBvZiBzb2Z0d2FyZSBjb21wb25lbnRzIGFuZCByZWdyZXNzaW9uIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICBhbmQgdHJhY2tpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNlZSAiPHVsaW5rIHVybD0naHR0cDovL2F1dG9idWlsZGVyLnlvY3RvcHJvamVjdC5vcmcnPllvY3RvIFByb2plY3QgQXV0b2J1aWxkZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBsaW5rcyB0byBidWlsZGJvdC4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gaGFzIGZvdW5kIHRoaXMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgIHdvcmtzIHdlbGwgaW4gdGhpcyByb2xlLgorICAgICAgICAgICAgQSBwdWJsaWMgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBBdXRvYnVpbGRlcnMsIHdoaWNoIHdlIHVzZSB0byB0ZXN0IHRoZSBvdmVyYWxsIGhlYWx0aCBvZiB0aGUKKyAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmZWF0dXJlcyBvZiB0aGlzIHN5c3RlbSBhcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5IaWdobGlnaHRzIHdoZW4gY29tbWl0cyBicmVhayB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qb3B1bGF0ZXMgYW4gc3N0YXRlIGNhY2hlIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcGVycyBjYW4gcHVsbCByYXRoZXIgdGhhbiByZXF1aXJpbmcgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGxvd3MgY29tbWl0IGhvb2sgdHJpZ2dlcnMsCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRyaWdnZXIgYnVpbGRzIHdoZW4gY29tbWl0cyBhcmUgbWFkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG93cyB0cmlnZ2VyaW5nIG9mIGF1dG9tYXRlZCBpbWFnZSBib290aW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCB0ZXN0aW5nIHVuZGVyIHRoZSBRdWlja0VNVWxhdG9yIChRRU1VKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN1cHBvcnRzIGluY3JlbWVudGFsIGJ1aWxkIHRlc3RpbmcgYW5kCisgICAgICAgICAgICAgICAgICAgIGZyb20tc2NyYXRjaCBidWlsZHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNoYXJlcyBvdXRwdXQgdGhhdCBhbGxvd3MgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgICAgIHRlc3RpbmcgYW5kIGhpc3RvcmljYWwgcmVncmVzc2lvbiBpbnZlc3RpZ2F0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlcyBvdXRwdXQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BbGxvd3Mgc2NoZWR1bGluZyBvZiBidWlsZHMgc28gdGhhdCByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgZWZmaWNpZW50bHkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiZXN0LXByYWN0aWNlcy1wb2xpY2llcy1hbmQtY2hhbmdlLWZsb3cnPgorICAgICAgICA8dGl0bGU+UG9saWNpZXMgYW5kIENoYW5nZSBGbG93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGl0c2VsZiB1c2VzIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSBhbmQgYQorICAgICAgICAgICAgcHVsbCBtb2RlbC4KKyAgICAgICAgICAgIFNjcmlwdHMgZXhpc3QgdG8gY3JlYXRlIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMKKyAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGlzIG1vZGVsIGlzIGluIGxpbmUgd2l0aCBvdGhlciBvcGVuIHNvdXJjZSBwcm9qZWN0cyB3aGVyZQorICAgICAgICAgICAgbWFpbnRhaW5lcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBzcGVjaWZpYyBhcmVhcyBvZiB0aGUgcHJvamVjdAorICAgICAgICAgICAgYW5kIGEgc2luZ2xlIG1haW50YWluZXIgaGFuZGxlcyB0aGUgZmluYWwgInRvcC1vZi10cmVlIiBtZXJnZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgYSBtb3JlIGNvbGxlY3RpdmUgcHVzaCBtb2RlbC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0b2xpdGU8L2ZpbGVuYW1lPiBzb2Z0d2FyZSBzdXBwb3J0cyBib3RoIHRoZQorICAgICAgICAgICAgcHVzaCBhbmQgcHVsbCBtb2RlbHMgcXVpdGUgZWFzaWx5LgorICAgICAgICA8L25vdGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIGFueSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgaXQgaXMgaW1wb3J0YW50CisgICAgICAgICAgICB0byBkb2N1bWVudCB0aGUgcG9saWN5IHVzZWQgYXMgd2VsbCBhcyBhbnkgbWFpbiBwcm9qZWN0CisgICAgICAgICAgICBndWlkZWxpbmVzIHNvIHRoZXkgYXJlIHVuZGVyc3Rvb2QgYnkgZXZlcnlvbmUuCisgICAgICAgICAgICBJdCBpcyBhbHNvIGEgZ29vZCBpZGVhIHRvIGhhdmUgd2VsbCBzdHJ1Y3R1cmVkCisgICAgICAgICAgICBjb21taXQgbWVzc2FnZXMsIHdoaWNoIGFyZSB1c3VhbGx5IGEgcGFydCBvZiBhIHByb2plY3QncworICAgICAgICAgICAgZ3VpZGVsaW5lcy4KKyAgICAgICAgICAgIEdvb2QgY29tbWl0IG1lc3NhZ2VzIGFyZSBlc3NlbnRpYWwgd2hlbiBsb29raW5nIGJhY2sgaW4gdGltZSBhbmQKKyAgICAgICAgICAgIHRyeWluZyB0byB1bmRlcnN0YW5kIHdoeSBjaGFuZ2VzIHdlcmUgbWFkZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRpc2NvdmVyIHRoYXQgY2hhbmdlcyBhcmUgbmVlZGVkIHRvIHRoZSBjb3JlIGxheWVyIG9mIHRoZQorICAgICAgICAgICAgcHJvamVjdCwgaXQgaXMgd29ydGggc2hhcmluZyB0aG9zZSB3aXRoIHRoZSBjb21tdW5pdHkgYXMgc29vbgorICAgICAgICAgICAgYXMgcG9zc2libGUuCisgICAgICAgICAgICBDaGFuY2VzIGFyZSBpZiB5b3UgaGF2ZSBkaXNjb3ZlcmVkIHRoZSBuZWVkIGZvciBjaGFuZ2VzLCBzb21lb25lCisgICAgICAgICAgICBlbHNlIGluIHRoZSBjb21tdW5pdHkgbmVlZHMgdGhlbSBhbHNvLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jlc3QtcHJhY3RpY2VzLXN1bW1hcnknPgorICAgICAgICA8dGl0bGU+U3VtbWFyeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gc3VtbWFyaXplcyB0aGUga2V5IHJlY29tbWVuZGF0aW9ucyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICBwcmV2aW91cyBzZWN0aW9uczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHNvdXJjZSBjb250cm9sIHN5c3RlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFpbnRhaW4geW91ciBNZXRhZGF0YSBpbiBsYXllcnMgdGhhdCBtYWtlIHNlbnNlCisgICAgICAgICAgICAgICAgICAgIGZvciB5b3VyIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ndW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBDcmVhdGluZyBMYXllcnM8L2xpbms+IiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIGxheWVycy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlIHRoZSBwcm9qZWN0J3MgTWV0YWRhdGEgYW5kIGNvZGUgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGUgR2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0neW9jdG8tcHJvamVjdC1yZXBvc2l0b3JpZXMnPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2V0dGluZy1zZXR1cCc+R2V0dGluZyBTZXQgVXA8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc2V0IHVwIGxvY2FsIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMgZm9yIHJlbGF0ZWQgdXBzdHJlYW0gWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgKDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC91bGluaz4pCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIGl0IG1ha2VzIHNlbnNlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHVwIHRoZSBzc3RhdGUgY2FjaGUgb24gYSBzeXN0ZW0gdXNlZAorICAgICAgICAgICAgICAgICAgICBieSBkZXZlbG9wZXJzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbiBhbmQgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgc291cmNlIGRpcmVjdG9yaWVzIG9uIHRoZWlyIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIGFuIEF1dG9idWlsZGVyIGFuZCBoYXZlIGl0IHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzc3RhdGUgY2FjaGUgYW5kIHNvdXJjZSBkaXJlY3Rvcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgY29tbXVuaXR5IGVuY291cmFnZXMgeW91CisgICAgICAgICAgICAgICAgICAgIHRvIHNlbmQgcGF0Y2hlcyB0byB0aGUgcHJvamVjdCB0byBmaXggYnVncyBvciBhZGQgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBzdWJtaXQgcGF0Y2hlcywgZm9sbG93IHRoZSBwcm9qZWN0IGNvbW1pdAorICAgICAgICAgICAgICAgICAgICBndWlkZWxpbmVzIGZvciB3cml0aW5nIGdvb2QgY29tbWl0IG1lc3NhZ2VzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VuZCBjaGFuZ2VzIHRvIHRoZSBjb3JlIHNvb25lciB0aGFuIGxhdGVyCisgICAgICAgICAgICAgICAgICAgIGFzIG90aGVycyBhcmUgbGlrZWx5IHRvIHJ1biBpbnRvIHRoZSBzYW1lIGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHNvbWUgZ3VpZGFuY2Ugb24gbWFpbGluZyBsaXN0cyB0byB1c2UsIHNlZSB0aGUgbGlzdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Jlc291cmNlcy1tYWlsaW5nbGlzdCc+TWFpbGluZyBMaXN0czwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+CisgICAgPHRpdGxlPllvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBtYWludGFpbnMgY29tcGxldGUgc291cmNlIHJlcG9zaXRvcmllcyBmb3IgYWxsCisgICAgICAgIFlvY3RvIFByb2plY3QgZmlsZXMgYXQKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICBUaGlzIHdlYi1iYXNlZCBzb3VyY2UgY29kZSBicm93c2VyIGlzIG9yZ2FuaXplZCBpbnRvIGNhdGVnb3JpZXMgYnkKKyAgICAgICAgZnVuY3Rpb24gc3VjaCBhcyBJREUgUGx1Z2lucywgTWF0Y2hib3gsIFBva3ksIFlvY3RvIExpbnV4IEtlcm5lbCwgYW5kCisgICAgICAgIHNvIGZvcnRoLgorICAgICAgICBGcm9tIHRoZSBpbnRlcmZhY2UsIHlvdSBjYW4gY2xpY2sgb24gYW55IHBhcnRpY3VsYXIgaXRlbSBpbiB0aGUgIk5hbWUiCisgICAgICAgIGNvbHVtbiBhbmQgc2VlIHRoZSBVUkwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGF0IHlvdSBuZWVkIHRvIGNsb25lCisgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgZm9yIHRoYXQgcGFydGljdWxhciBpdGVtLgorICAgICAgICBIYXZpbmcgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4sIHdoaWNoIGlzCisgICAgICAgIHVzdWFsbHkgbmFtZWQgInBva3kiLCBhbGxvd3MKKyAgICAgICAgeW91IHRvIG1ha2UgY2hhbmdlcywgY29udHJpYnV0ZSB0byB0aGUgaGlzdG9yeSwgYW5kIHVsdGltYXRlbHkgZW5oYW5jZQorICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCdzIHRvb2xzLCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzLCBhbmQgc28gZm9ydGguCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBhbnkgc3VwcG9ydGVkIHJlbGVhc2Ugb2YgWW9jdG8gUHJvamVjdCwgeW91IGNhbiBhbHNvIGdvIHRvIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPiBhbmQKKyAgICAgICAgc2VsZWN0IHRoZSAiRG93bmxvYWRzIiB0YWIgYW5kIGdldCBhIHJlbGVhc2VkIHRhcmJhbGwgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBvciBhbnkgc3VwcG9ydGVkIEJTUCB0YXJiYWxscy4KKyAgICAgICAgVW5wYWNraW5nIHRoZXNlIHRhcmJhbGxzIGdpdmVzIHlvdSBhIHNuYXBzaG90IG9mIHRoZSByZWxlYXNlZAorICAgICAgICBmaWxlcy4KKyAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBzZXR0aW5nIHVwIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZmlsZXMgZm9yIHN1cHBvcnRlZCBCU1BzCisgICAgICAgICAgICAgICAgICAgIChlLmcuLCA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+KSBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+IHRvIGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGFsd2F5cyB3b3JrIGluIG1hdGNoaW5nIGJyYW5jaGVzIGZvciBib3RoCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZWxlY3RlZCBCU1AgcmVwb3NpdG9yeSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBjaGVja2VkIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBvZiA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIHN1bW1hcnksIGhlcmUgaXMgd2hlcmUgeW91IGNhbiBnZXQgdGhlIHByb2plY3QgZmlsZXMgbmVlZGVkIGZvciBkZXZlbG9wbWVudDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nc291cmNlLXJlcG9zaXRvcmllcyc+PGVtcGhhc2lzPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpJz5Tb3VyY2UgUmVwb3NpdG9yaWVzOjwvdWxpbms+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY29udGFpbnMgSURFIFBsdWdpbnMsIE1hdGNoYm94LCBQb2t5LCBQb2t5IFN1cHBvcnQsIFRvb2xzLCBZb2N0byBMaW51eCBLZXJuZWwsIGFuZCBZb2N0bworICAgICAgICAgICAgICAgIE1ldGFkYXRhIExheWVycy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBsb2NhbCBjb3BpZXMgb2YgR2l0IHJlcG9zaXRvcmllcyBmb3IgZWFjaCBvZiB0aGVzZSBhcmVhcy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1yZXBvcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGFuY2hvciBpZD0naW5kZXgtZG93bmxvYWRzJyAvPjxlbXBoYXNpcz48dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcy8nPkluZGV4IG9mIC9yZWxlYXNlczo8L3VsaW5rPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhpcyBpcyBhbiBpbmRleCBvZiByZWxlYXNlcyBzdWNoIGFzCisgICAgICAgICAgICAgICAgdGhlIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgWW9jdG8gUGx1Zy1pbiwgbWlzY2VsbGFuZW91cyBzdXBwb3J0LCBQb2t5LCBQc2V1ZG8sIGluc3RhbGxlcnMgZm9yIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMsCisgICAgICAgICAgICAgICAgYW5kIGFsbCByZWxlYXNlZCB2ZXJzaW9ucyBvZiBZb2N0byBQcm9qZWN0IGluIHRoZSBmb3JtIG9mIGltYWdlcyBvciB0YXJiYWxscy4KKyAgICAgICAgICAgICAgICBEb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyB0aGVzZSBmaWxlcyBkb2VzIG5vdCBwcm9kdWNlIGEgbG9jYWwgY29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBidXQgcmF0aGVyIGEgc25hcHNob3Qgb2YgYSBwYXJ0aWN1bGFyIHJlbGVhc2Ugb3IgaW1hZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iMy41aW4iIC8+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJEb3dubG9hZHMiIHBhZ2UgZm9yIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsnPllvY3RvIFByb2plY3QgV2Vic2l0ZTwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQWNjZXNzIHRoaXMgcGFnZSBieSBnb2luZyB0byB0aGUgd2Vic2l0ZSBhbmQgdGhlbiBzZWxlY3RpbmcKKyAgICAgICAgICAgICAgICB0aGUgIkRvd25sb2FkcyIgdGFiLgorICAgICAgICAgICAgICAgIFRoaXMgcGFnZSBhbGxvd3MgeW91IHRvIGRvd25sb2FkIGFueSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZSBvciBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgaW4gdGFyYmFsbCBmb3JtLgorICAgICAgICAgICAgICAgIFRoZSB0YXJiYWxscyBhcmUgc2ltaWxhciB0byB0aG9zZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcy8nPkluZGV4IG9mIC9yZWxlYXNlczo8L3VsaW5rPiBhcmVhLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMveXAtZG93bmxvYWQucG5nIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiAvPgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3lvY3RvLXByb2plY3QtdGVybXMnPgorICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IFRlcm1zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBGb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRlcm1zIGFuZCBkZWZpbml0aW9ucyB1c2VycyBuZXcgdG8gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgZW52aXJvbm1lbnQgbWlnaHQgZmluZCBoZWxwZnVsLgorICAgICAgICBXaGlsZSBzb21lIG9mIHRoZXNlIHRlcm1zIGFyZSB1bml2ZXJzYWwsIHRoZSBsaXN0IGluY2x1ZGVzIHRoZW0ganVzdCBpbiBjYXNlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BcHBlbmQgRmlsZXM6PC9lbXBoYXNpcz4gRmlsZXMgdGhhdCBhcHBlbmQgYnVpbGQgaW5mb3JtYXRpb24gdG8KKyAgICAgICAgICAgICAgICBhIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEFwcGVuZCBmaWxlcyBhcmUga25vd24gYXMgQml0QmFrZSBhcHBlbmQgZmlsZXMgYW5kIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBleHBlY3RzIGV2ZXJ5IGFwcGVuZCBmaWxlIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGUuCisgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBhcHBlbmQgZmlsZSBhbmQgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZQorICAgICAgICAgICAgICAgIG11c3QgdXNlIHRoZSBzYW1lIHJvb3QgZmlsZW5hbWUuCisgICAgICAgICAgICAgICAgVGhlIGZpbGVuYW1lcyBjYW4gZGlmZmVyIG9ubHkgaW4gdGhlIGZpbGUgdHlwZSBzdWZmaXggdXNlZCAoZS5nLgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mb3JtZmFjdG9yXzAuMC5iYjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Zm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkluZm9ybWF0aW9uIGluIGFwcGVuZCBmaWxlcyBleHRlbmRzIG9yIG92ZXJyaWRlcyB0aGUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpbiB0aGUgc2ltaWxhcmx5LW5hbWVkIHJlY2lwZSBmaWxlLgorICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIG9mIGFuIGFwcGVuZCBmaWxlIGluIHVzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd1c2luZy1iYmFwcGVuZC1maWxlcyc+VXNpbmcgLmJiYXBwZW5kIEZpbGVzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQXBwZW5kIGZpbGVzIGNhbiBhbHNvIHVzZSB3aWxkY2FyZCBwYXR0ZXJucyBpbiB0aGVpciB2ZXJzaW9uIG51bWJlcnMKKyAgICAgICAgICAgICAgICAgICAgc28gdGhleSBjYW4gYmUgYXBwbGllZCB0byBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdiaXRiYWtlLXRlcm0nPjxlbXBoYXNpcz5CaXRCYWtlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIHRhc2sgZXhlY3V0b3IgYW5kIHNjaGVkdWxlciB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gYnVpbGQgaW1hZ2VzLgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7Jz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J2J1aWxkLWRpcmVjdG9yeSc+PGVtcGhhc2lzPkJ1aWxkIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgdGVybSByZWZlcnMgdG8gdGhlIGFyZWEgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIGZvciBidWlsZHMuCisgICAgICAgICAgICAgICAgVGhlIGFyZWEgaXMgY3JlYXRlZCB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlCisgICAgICAgICAgICAgICAgc2V0dXAgZW52aXJvbm1lbnQgc2NyaXB0IHRoYXQgaXMgZm91bmQgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAoaS5lLiA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRPUERJUic+PGZpbGVuYW1lPlRPUERJUjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIEJ1aWxkIERpcmVjdG9yeS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGhhdmUgYSBsb3Qgb2YgZmxleGliaWxpdHkgd2hlbiBjcmVhdGluZyB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGFzc3VtZSB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+IGlzCisgICAgICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgYW5kIGxldCB0aGUgbmFtZSBvZiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgZGVmYXVsdCB0byA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgJEhPTUUvcG9reQorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgdGhlIEJ1aWxkIERpcmVjdG9yeSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbWUgZGlyZWN0b3J5IGFuZCBzcGVjaWZpY2FsbHkgbmFtZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0LWJ1aWxkczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCAkSE9NRQorICAgICAkIHNvdXJjZSBwb2t5LyZPRV9JTklUX0ZJTEU7IHRlc3QtYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYSBkaXJlY3RvcnkgcGF0aCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgbmFtZSB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBpbnRlcm1lZGlhdGUgZm9sZGVycyBpbiB0aGUgcGF0aG5hbWUgbXVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WVAtJlBPS1lWRVJTSU9OOzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciBob21lIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJGNkICRIT01FCisgICAgICQgc291cmNlICRIT01FL3Bva3kvJk9FX0lOSVRfRklMRTsgJEhPTUUvbXlidWlsZHMvWVAtJlBPS1lWRVJTSU9OOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBjb250YWlucworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgaXRzIHdvcmsuCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gY2Fubm90IGJlIHVuZGVyIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRodXMsIGJ5IGRlZmF1bHQsIHRoZSBCdWlsZCBEaXJlY3RvcnkgY2Fubm90IGJlIHVuZGVyIE5GUy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRoZSBCdWlsZCBEaXJlY3RvcnkgdG8gYmUgdW5kZXIgTkZTLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBzZXQgdGhpcyB1cCBieSBzZXR0aW5nIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhIGxvY2FsIGRyaXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgRG9pbmcgc28gZWZmZWN0aXZlbHkgc2VwYXJhdGVzIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGFzc2VzOjwvZW1waGFzaXM+IEZpbGVzIHRoYXQgcHJvdmlkZSBmb3IgbG9naWMgZW5jYXBzdWxhdGlvbgorICAgICAgICAgICAgICAgIGFuZCBpbmhlcml0YW5jZSBzbyB0aGF0IGNvbW1vbmx5IHVzZWQgcGF0dGVybnMgY2FuIGJlIGRlZmluZWQgb25jZSBhbmQgdGhlbiBlYXNpbHkgdXNlZAorICAgICAgICAgICAgICAgIGluIG11bHRpcGxlIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCBjbGFzc2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1jbGFzc2VzJz5DbGFzc2VzPC91bGluaz4iIGNoYXB0ZXIgb2YgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzIGVuZCB3aXRoIHRoZSA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlbmFtZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaW4gdmFyaW91cyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGVzIHByb3ZpZGVzIGdsb2JhbCBkZWZpbml0aW9ucyBvZiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGUgaW4KKyAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBjb250YWlucyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IGV2ZXJ5IGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBkZWZpbmVzIFlvY3RvICJkaXN0cm8iIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdXNlZCBvbmx5IHdoZW4gYnVpbGRpbmcgd2l0aCB0aGlzIHBvbGljeS4KKyAgICAgICAgICAgICAgICBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHdoaWNoCisgICAgICAgICAgICAgICAgYXJlIGxvY2F0ZWQgdGhyb3VnaG91dCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiwgZGVmaW5lCisgICAgICAgICAgICAgICAgdmFyaWFibGVzIGZvciBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYXJlIG9ubHkgdXNlZCB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgZm9yIHRoYXQgdGFyZ2V0IChlLmcuIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWNoaW5lL2JlYWdsZWJvbmUuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdmFyaWFibGVzIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgQVJNIENvcnRleC1BOAorICAgICAgICAgICAgICAgIGRldmVsb3BtZW50IGJvYXJkKS4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGZpbGVzIGVuZCB3aXRoIGEgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlbmFtZSBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCBhIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpcyBhIGNvbGxlY3Rpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgc29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHMgYW5kIHV0aWxpdGllcyB0aGF0IHJ1biBvbiBvbmUKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlIGFuZCBhbGxvdyB5b3UgdG8gZGV2ZWxvcCBzb2Z0d2FyZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQsIG9yIHRhcmdldGVkLCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHRvb2xjaGFpbnMgY29udGFpbiBjcm9zcy1jb21waWxlcnMsIGxpbmtlcnMsIGFuZAorICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlcnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgdHdvIGRpZmZlcmVudCBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW5zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgdG9vbGNoYWluIG9ubHkgdXNlZCBieSBhbmQgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlIGZvciBhIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIHJlbG9jYXRhYmxlIHRvb2xjaGFpbiB1c2VkIG91dHNpZGUgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGJ5IGRldmVsb3BlcnMgd2hlbiBkZXZlbG9waW5nIGFwcGxpY2F0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2lsbCBydW4gb24gYSB0YXJnZXRlZCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoaXMgcmVsb2NhdGFibGUgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gaXMgcmVmZXJyZWQgdG8gYXMgdGhlIG1ldGEtdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRpb24gb2YgdGhlc2UgdG9vbGNoYWlucyBpcyBzaW1wbGUgYW5kIGF1dG9tYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRvb2xjaGFpbiBjb25jZXB0cyBhcyB0aGV5IGFwcGx5IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICByZWxvY2F0YWJsZSB0b29sY2hhaW4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7Jz5Zb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQW4gaW1hZ2UgaXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIEJpdEJha2UgYnVpbGQgcHJvY2VzcyBnaXZlbgorICAgICAgICAgICAgICAgIGEgY29sbGVjdGlvbiBvZiByZWNpcGVzIGFuZCByZWxhdGVkIE1ldGFkYXRhLgorICAgICAgICAgICAgICAgIEltYWdlcyBhcmUgdGhlIGJpbmFyeSBvdXRwdXQgdGhhdCBydW4gb24gc3BlY2lmaWMgaGFyZHdhcmUgb3IKKyAgICAgICAgICAgICAgICBRRU1VIGFuZCBhcmUgdXNlZCBmb3Igc3BlY2lmaWMgdXNlLWNhc2VzLgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyB0aGF0IHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nbGF5ZXInPjxlbXBoYXNpcz5MYXllcjo8L2VtcGhhc2lzPiBBIGNvbGxlY3Rpb24gb2YgcmVjaXBlcyByZXByZXNlbnRpbmcgdGhlIGNvcmUsCisgICAgICAgICAgICAgICAgYSBCU1AsIG9yIGFuIGFwcGxpY2F0aW9uIHN0YWNrLgorICAgICAgICAgICAgICAgIEZvciBhIGRpc2N1c3Npb24gc3BlY2lmaWNhbGx5IG9uIEJTUCBMYXllcnMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjYnNwLWxheWVycyc+QlNQIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdtZXRhLXRvb2xjaGFpbic+PGVtcGhhc2lzPk1ldGEtVG9vbGNoYWluOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSB0ZXJtIHNvbWV0aW1lcyB1c2VkIGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluPC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nbWV0YWRhdGEnPjxlbXBoYXNpcz5NZXRhZGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBmaWxlcyB0aGF0IEJpdEJha2UgcGFyc2VzIHdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgTWV0YWRhdGEgaW5jbHVkZXMgcmVjaXBlcywgY2xhc3NlcywgYW5kCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICBJbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsICgia2VybmVsIE1ldGFkYXRhIiksCisgICAgICAgICAgICAgICAgaXQgcmVmZXJzIHRvIE1ldGFkYXRhIGluIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgb2YgdGhlIGtlcm5lbCBzb3VyY2UgR2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nb2UtY29yZSc+PGVtcGhhc2lzPk9FLUNvcmU6PC9lbXBoYXNpcz4gQSBjb3JlIHNldCBvZiBNZXRhZGF0YSBvcmlnaW5hdGluZworICAgICAgICAgICAgICAgIHdpdGggT3BlbkVtYmVkZGVkIChPRSkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBPRSBhbmQgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgVGhpcyBNZXRhZGF0YSBpcyBmb3VuZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmEgaWQ9J2J1aWxkLXN5c3RlbS10ZXJtJz48ZW1waGFzaXM+T3BlbkVtYmVkZGVkIEJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gc3BlY2lmaWMgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQgb24gYW5vdGhlciBwcm9qZWN0IGtub3duCisgICAgICAgICAgICAgICAgYXMgIlBva3kiLCB3aGljaCB1c2VzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nYml0YmFrZS10ZXJtJz5CaXRCYWtlPC9saW5rPiBhcyB0aGUgdGFzaworICAgICAgICAgICAgICAgIGV4ZWN1dG9yLgorICAgICAgICAgICAgICAgIFRocm91Z2hvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQsIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIHNpbXBseQorICAgICAgICAgICAgICAgIGFzICJ0aGUgYnVpbGQgc3lzdGVtIi4KKyAgICAgICAgICAgICAgICBJZiBvdGhlciBidWlsZCBzeXN0ZW1zLCBzdWNoIGFzIGEgaG9zdCBvciB0YXJnZXQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYXJlIHJlZmVyZW5jZWQsIHRoZSBkb2N1bWVudGF0aW9uIGNsZWFybHkgc3RhdGVzIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBzb21lIGhpc3RvcmljYWwgaW5mb3JtYXRpb24gYWJvdXQgUG9reSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdwb2t5Jz5Qb2t5PC9saW5rPiB0ZXJtLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIHRoZSBZb2N0byBQcm9qZWN0LCB0aGlzIHRlcm0gcmVmZXJzIHRvIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBwYWNrYWdlZCBvdXRwdXQgcHJvZHVjZWQgYnkgQml0QmFrZSAoaS5lLiBhCisgICAgICAgICAgICAgICAgImJha2VkIHJlY2lwZSIpLgorICAgICAgICAgICAgICAgIEEgcGFja2FnZSBpcyBnZW5lcmFsbHkgdGhlIGNvbXBpbGVkIGJpbmFyaWVzIHByb2R1Y2VkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlJ3Mgc291cmNlcy4KKyAgICAgICAgICAgICAgICBZb3UgImJha2UiIHNvbWV0aGluZyBieSBydW5uaW5nIGl0IHRocm91Z2ggQml0QmFrZS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhlIHRlcm0gInBhY2thZ2UiIGNhbiwgaW4gZ2VuZXJhbCwgaGF2ZSBzdWJ0bGUKKyAgICAgICAgICAgICAgICBtZWFuaW5ncy4gIEZvciBleGFtcGxlLCB0aGUgcGFja2FnZXMgcmVmZXJyZWQgdG8gaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjcGFja2FnZXMnPlRoZSBCdWlsZCBIb3N0IFBhY2thZ2VzPC91bGluaz4iIHNlY3Rpb24gYXJlCisgICAgICAgICAgICAgICAgY29tcGlsZWQgYmluYXJpZXMgdGhhdCwgd2hlbiBpbnN0YWxsZWQsIGFkZCBmdW5jdGlvbmFsaXR5IHRvIHlvdXIgTGludXgKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkFub3RoZXIgcG9pbnQgd29ydGggbm90aW5nIGlzIHRoYXQgaGlzdG9yaWNhbGx5IHdpdGhpbiB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgICAgICByZWNpcGVzIHdlcmUgcmVmZXJyZWQgdG8gYXMgcGFja2FnZXMgLSB0aHVzLCB0aGUgZXhpc3RlbmNlIG9mIHNldmVyYWwgQml0QmFrZQorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSBzZWVtaW5nbHkgbWlzLW5hbWVkLAorICAgICAgICAgICAgICAgIChlLmcuIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4sIGFuZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QRSc+PGZpbGVuYW1lPlBFPC9maWxlbmFtZT48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2UgR3JvdXBzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQXJiaXRyYXJ5IGdyb3VwcyBvZiBzb2Z0d2FyZSBSZWNpcGVzLgorICAgICAgICAgICAgICAgIFlvdSB1c2UgcGFja2FnZSBncm91cHMgdG8gaG9sZCByZWNpcGVzIHRoYXQsIHdoZW4gYnVpbHQsCisgICAgICAgICAgICAgICAgdXN1YWxseSBhY2NvbXBsaXNoIGEgc2luZ2xlIHRhc2suCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgcGFja2FnZSBncm91cCBjb3VsZCBjb250YWluIHRoZSByZWNpcGVzIGZvciBhCisgICAgICAgICAgICAgICAgY29tcGFueeKAmXMgcHJvcHJpZXRhcnkgb3IgdmFsdWUtYWRkIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIE9yLCB0aGUgcGFja2FnZSBncm91cCBjb3VsZCBjb250YWluIHRoZSByZWNpcGVzIHRoYXQgZW5hYmxlCisgICAgICAgICAgICAgICAgZ3JhcGhpY3MuCisgICAgICAgICAgICAgICAgQSBwYWNrYWdlIGdyb3VwIGlzIHJlYWxseSBqdXN0IGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgcGFja2FnZSBncm91cCBmaWxlcyBhcmUgcmVjaXBlcywgdGhleSBlbmQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZW5hbWUgZXh0ZW5zaW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdwb2t5Jz48ZW1waGFzaXM+UG9reTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSB0ZXJtICJwb2t5IiBjYW4gbWVhbiBzZXZlcmFsIHRoaW5ncy4KKyAgICAgICAgICAgICAgICBJbiBpdHMgbW9zdCBnZW5lcmFsIHNlbnNlLCBpdCBpcyBhbiBvcGVuLXNvdXJjZQorICAgICAgICAgICAgICAgIHByb2plY3QgdGhhdCB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBPcGVuZWRIYW5kLgorICAgICAgICAgICAgICAgIFdpdGggT3BlbmVkSGFuZCwgcG9reSB3YXMgZGV2ZWxvcGVkIG9mZiBvZiB0aGUgZXhpc3RpbmcKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJlY29taW5nIGEgY29tbWVyY2lhbGx5CisgICAgICAgICAgICAgICAgc3VwcG9ydGFibGUgYnVpbGQgc3lzdGVtIGZvciBlbWJlZGRlZCBMaW51eC4KKyAgICAgICAgICAgICAgICBBZnRlciBJbnRlbCBDb3Jwb3JhdGlvbiBhY3F1aXJlZCBPcGVuZWRIYW5kLCB0aGUKKyAgICAgICAgICAgICAgICBwcm9qZWN0IHBva3kgYmVjYW1lIHRoZSBiYXNpcyBmb3IgdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+V2l0aGluIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBleGlzdHMgYXMgYSBzZXBhcmF0ZSBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHlvdSBjYW4gY2xvbmUgdG8geWllbGQgYSBsb2NhbCBjb3B5IG9uIHlvdXIKKyAgICAgICAgICAgICAgICBob3N0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICBUaHVzLCAicG9reSIgY2FuIHJlZmVyIHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBTb3VyY2UKKyAgICAgICAgICAgICAgICBEaXJlY3RvcnkgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgd2l0aGluIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZpbmFsbHksICJwb2t5IiBjYW4gcmVmZXIgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIChpLmUuIGRpc3RyaWJ1dGlvbikgY3JlYXRlZCB3aGVuIHlvdSB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSB0byBidWlsZCBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVjaXBlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBBIHJlY2lwZSBkZXNjcmliZXMgd2hlcmUgeW91IGdldCBzb3VyY2UgY29kZSwgd2hpY2ggcGF0Y2hlcworICAgICAgICAgICAgICAgIHRvIGFwcGx5LCBob3cgdG8gY29uZmlndXJlIHRoZSBzb3VyY2UsIGhvdyB0byBjb21waWxlIGl0IGFuZCBzbyBvbi4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIGFsc28gZGVzY3JpYmUgZGVwZW5kZW5jaWVzIGZvciBsaWJyYXJpZXMgb3IgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBSZWNpcGVzIHJlcHJlc2VudCB0aGUgbG9naWNhbCB1bml0IG9mIGV4ZWN1dGlvbiwgdGhlIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgdG8gYnVpbGQsIHRoZSBpbWFnZXMgdG8gYnVpbGQsIGFuZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUgZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdzb3VyY2UtZGlyZWN0b3J5Jz48ZW1waGFzaXM+U291cmNlIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoaXMgdGVybSByZWZlcnMgdG8gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgY3JlYXRlZCBhcyBhIHJlc3VsdAorICAgICAgICAgICAgICAgIG9mIGNyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IDxmaWxlbmFtZT5naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvciBleHBhbmRpbmcgYSByZWxlYXNlZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHRhcmJhbGwuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIGEgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeSBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBzZXR0aW5nIHVwCisgICAgICAgICAgICAgICAgICAgIHlvdXIgU291cmNlIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgU29tZXRpbWVzIHlvdSBtaWdodCBoZWFyIHRoZSB0ZXJtICJwb2t5IGRpcmVjdG9yeSIgdXNlZCB0byByZWZlcgorICAgICAgICAgICAgICAgIHRvIHRoaXMgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG9yCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lcyB0aGF0IGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRoYXQgdGhlIFNvdXJjZSBEaXJlY3RvcnkgeW91IHVzZSBkb2VzIG5vdCBjb250YWluCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHR5cGVzIG9mIG5hbWVzLgorICAgICAgICAgICAgICAgIDwvbm90ZT48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgU291cmNlIERpcmVjdG9yeSBjb250YWlucyBCaXRCYWtlLCBEb2N1bWVudGF0aW9uLAorICAgICAgICAgICAgICAgIE1ldGFkYXRhIGFuZCBvdGhlciBmaWxlcyB0aGF0IGFsbCBzdXBwb3J0IHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG11c3QgaGF2ZSB0aGUgU291cmNlIERpcmVjdG9yeSBpbiBwbGFjZSBvbgorICAgICAgICAgICAgICAgIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGluIG9yZGVyIHRvIGRvIGFueSBkZXZlbG9wbWVudCB1c2luZworICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPldoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UKKyAgICAgICAgICAgICAgICBjYW4gbmFtZSB0aGUgcmVwb3NpdG9yeSBhbnl0aGluZyB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBUaHJvdWdob3V0IG11Y2ggb2YgdGhlIGRvY3VtZW50YXRpb24sICJwb2t5IgorICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBmb2xkZXIgb2YgdGhlIGxvY2FsIGNvcHkgb2YKKyAgICAgICAgICAgICAgICB0aGUgcG9reSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBTbywgZm9yIGV4YW1wbGUsIGNsb25pbmcgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSByZXN1bHRzIGluIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgd2hvc2UgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgZm9sZGVyIGlzIGFsc28gbmFtZWQgInBva3kiLjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPldoaWxlIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGFyYmFsbCBleHBhbnNpb24KKyAgICAgICAgICAgICAgICB0byBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnksIGlmIHlvdSBkbywgdGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGlzIGRlcml2ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fUE9LWV9UQVJCQUxMOzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gYQorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3Rvcnkgd2hvc2Ugcm9vdCBmb2xkZXIgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JllPQ1RPX1BPS1k7PC9maWxlbmFtZT4uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCisgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBjcmVhdGVkIGJ5IHVucGFja2luZyBhIHJlbGVhc2VkIHRhcmJhbGwgYXMKKyAgICAgICAgICAgICAgICBjb21wYXJlZCB0byBjbG9uaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3k8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1bnBhY2sgYSB0YXJiYWxsLCB5b3UgaGF2ZSBhbiBleGFjdCBjb3B5IG9mIHRoZSBmaWxlcworICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSB0aW1lIG9mIHJlbGVhc2UgLSBhIGZpeGVkIHJlbGVhc2UgcG9pbnQuCisgICAgICAgICAgICAgICAgQW55IGNoYW5nZXMgeW91IG1ha2UgdG8geW91ciBsb2NhbCBmaWxlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeQorICAgICAgICAgICAgICAgIGFyZSBvbiB0b3Agb2YgdGhlIHJlbGVhc2UgYW5kIHdpbGwgcmVtYWluIGxvY2FsIG9ubHkuCisgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIHdoZW4geW91IGNsb25lIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnksIHlvdSBoYXZlIGFuIGFjdGl2ZSBkZXZlbG9wbWVudCByZXBvc2l0b3J5IHdpdGgKKyAgICAgICAgICAgICAgICBhY2Nlc3MgdG8gdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkncyBicmFuY2hlcyBhbmQgdGFncy4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIGFueSBsb2NhbCBjaGFuZ2VzIHlvdSBtYWtlIHRvIHRoZSBsb2NhbAorICAgICAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgY2FuIGJlIGxhdGVyIGFwcGxpZWQgdG8gYWN0aXZlIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgYnJhbmNoZXMgb2YgdGhlIHVwc3RyZWFtIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gR2l0CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb25jZXB0cyByZWxhdGVkIHRvIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgYnJhbmNoZXMsIGFuZCB0YWdzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlcG9zaXRvcmllcy10YWdzLWFuZC1icmFuY2hlcyc+UmVwb3NpdG9yaWVzLCBUYWdzLCBhbmQgQnJhbmNoZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhc2s6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBBIHVuaXQgb2YgZXhlY3V0aW9uIGZvciBCaXRCYWtlIChlLmcuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLXBhdGNoJz48ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVwc3RyZWFtOjwvZW1waGFzaXM+IEEgcmVmZXJlbmNlIHRvIHNvdXJjZSBjb2RlIG9yIHJlcG9zaXRvcmllcworICAgICAgICAgICAgICAgIHRoYXQgYXJlIG5vdCBsb2NhbCB0byB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtIGJ1dCBsb2NhdGVkIGluIGEgbWFzdGVyIGFyZWEgdGhhdCBpcyBjb250cm9sbGVkCisgICAgICAgICAgICAgICAgYnkgdGhlIG1haW50YWluZXIgb2YgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcmRlciBmb3IgYSBkZXZlbG9wZXIgdG8gd29yayBvbiBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZSwgdGhleSBuZWVkIHRvCisgICAgICAgICAgICAgICAgZmlyc3QgZ2V0IGEgY29weSBvZiBpdCBmcm9tIGFuICJ1cHN0cmVhbSIgc291cmNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsaWNlbnNpbmcnPgorICAgIDx0aXRsZT5MaWNlbnNpbmc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2Ugb3BlbiBzb3VyY2UgcHJvamVjdHMgYXJlIG9wZW4gdG8gdGhlIHB1YmxpYywgdGhleSBoYXZlIGRpZmZlcmVudCBsaWNlbnNpbmcgc3RydWN0dXJlcyBpbiBwbGFjZS4KKyAgICAgICAgTGljZW5zZSBldm9sdXRpb24gZm9yIGJvdGggT3BlbiBTb3VyY2UgYW5kIEZyZWUgU29mdHdhcmUgaGFzIGFuIGludGVyZXN0aW5nIGhpc3RvcnkuCisgICAgICAgIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIGhpc3RvcnksIHlvdSBjYW4gZmluZCBiYXNpYyBpbmZvcm1hdGlvbiBoZXJlOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZW4tc291cmNlX2xpY2Vuc2UnPk9wZW4gc291cmNlIGxpY2Vuc2UgaGlzdG9yeTwvdWxpbms+CisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnJlZV9zb2Z0d2FyZV9saWNlbnNlJz5GcmVlIHNvZnR3YXJlIGxpY2Vuc2UKKyAgICAgICAgICAgIGhpc3Rvcnk8L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBnZW5lcmFsLCB0aGUgWW9jdG8gUHJvamVjdCBpcyBicm9hZGx5IGxpY2Vuc2VkIHVuZGVyIHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisgICAgICAgIChNSVQpIExpY2Vuc2UuCisgICAgICAgIE1JVCBsaWNlbnNpbmcgcGVybWl0cyB0aGUgcmV1c2Ugb2Ygc29mdHdhcmUgd2l0aGluIHByb3ByaWV0YXJ5IHNvZnR3YXJlIGFzIGxvbmcgYXMgdGhlCisgICAgICAgIGxpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGF0IHNvZnR3YXJlLgorICAgICAgICBNSVQgaXMgYWxzbyBjb21wYXRpYmxlIHdpdGggdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLgorICAgICAgICBQYXRjaGVzIHRvIHRoZSBZb2N0byBQcm9qZWN0IGZvbGxvdyB0aGUgdXBzdHJlYW0gbGljZW5zaW5nIHNjaGVtZS4KKyAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIHRoZSBNSVQgbGljZW5zZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCc+aGVyZTwvdWxpbms+LgorICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gdGhlIEdOVSBHUEwgPHVsaW5rIHVybD0naHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9MR1BMLTMuMCc+CisgICAgICAgIGhlcmU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgYnVpbGQgYW4gaW1hZ2UgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHRoZSBidWlsZCBwcm9jZXNzIHVzZXMgYQorICAgICAgICBrbm93biBsaXN0IG9mIGxpY2Vuc2VzIHRvIGVuc3VyZSBjb21wbGlhbmNlLgorICAgICAgICBZb3UgY2FuIGZpbmQgdGhpcyBsaXN0IGluIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPiBhdAorICAgICAgICA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXM8L2ZpbGVuYW1lPi4KKyAgICAgICAgT25jZSB0aGUgYnVpbGQgY29tcGxldGVzLCB0aGUgbGlzdCBvZiBhbGwgbGljZW5zZXMgZm91bmQgYW5kIHVzZWQgZHVyaW5nIHRoYXQgYnVpbGQgYXJlCisgICAgICAgIGtlcHQgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiBhdAorICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9saWNlbnNlczwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiBhIG1vZHVsZSByZXF1aXJlcyBhIGxpY2Vuc2UgdGhhdCBpcyBub3QgaW4gdGhlIGJhc2UgbGlzdCwgdGhlIGJ1aWxkIHByb2Nlc3MKKyAgICAgICAgZ2VuZXJhdGVzIGEgd2FybmluZyBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICBUaGVzZSB0b29scyBtYWtlIGl0IGVhc2llciBmb3IgYSBkZXZlbG9wZXIgdG8gYmUgY2VydGFpbiBvZiB0aGUgbGljZW5zZXMgd2l0aCB3aGljaAorICAgICAgICB0aGVpciBzaGlwcGVkIHByb2R1Y3RzIG11c3QgY29tcGx5LgorICAgICAgICBIb3dldmVyLCBldmVuIHdpdGggdGhlc2UgdG9vbHMgaXQgaXMgc3RpbGwgdXAgdG8gdGhlIGRldmVsb3BlciB0byByZXNvbHZlIHBvdGVudGlhbCBsaWNlbnNpbmcgaXNzdWVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYmFzZSBsaXN0IG9mIGxpY2Vuc2VzIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgU29mdHdhcmUgUGFja2FnZQorICAgICAgICBEYXRhIEV4Y2hhbmdlIChTUERYKSBsaXN0IGFuZCB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBwcm9qZWN0cy4KKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NwZHgub3JnJz5TUERYIEdyb3VwPC91bGluaz4gaXMgYSB3b3JraW5nIGdyb3VwIG9mIHRoZSBMaW51eCBGb3VuZGF0aW9uCisgICAgICAgIHRoYXQgbWFpbnRhaW5zIGEgc3BlY2lmaWNhdGlvbgorICAgICAgICBmb3IgYSBzdGFuZGFyZCBmb3JtYXQgZm9yIGNvbW11bmljYXRpbmcgdGhlIGNvbXBvbmVudHMsIGxpY2Vuc2VzLCBhbmQgY29weXJpZ2h0cworICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBzb2Z0d2FyZSBwYWNrYWdlLgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vb3BlbnNvdXJjZS5vcmcnPk9TSTwvdWxpbms+IGlzIGEgY29ycG9yYXRpb24gZGVkaWNhdGVkIHRvIHRoZSBPcGVuIFNvdXJjZQorICAgICAgICBEZWZpbml0aW9uIGFuZCB0aGUgZWZmb3J0IGZvciByZXZpZXdpbmcgYW5kIGFwcHJvdmluZyBsaWNlbnNlcyB0aGF0CisgICAgICAgIGNvbmZvcm0gdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKE9TRCkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlIGNvbWJpbmVkIFNQRFggYW5kIE9TSSBsaWNlbnNlcyB0aGF0IHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IHVzZXMgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB5b3VyCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gdGhhdCBjYW4gaGVscCB5b3UgbWFpbnRhaW4gY29tcGxpYW5jZSB3aXRoIHZhcmlvdXMKKyAgICAgICAgb3BlbiBzb3VyY2UgbGljZW5zaW5nIGR1cmluZyB0aGUgbGlmZWN5Y2xlIG9mIGEgcHJvZHVjdCBjcmVhdGVkIHVzaW5nCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nZ2l0Jz4KKyAgICA8dGl0bGU+R2l0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBtYWtlcyBleHRlbnNpdmUgdXNlIG9mIEdpdCwKKyAgICAgICAgd2hpY2ggaXMgYSBmcmVlLCBvcGVuIHNvdXJjZSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorICAgICAgICBHaXQgc3VwcG9ydHMgZGlzdHJpYnV0ZWQgZGV2ZWxvcG1lbnQsIG5vbi1saW5lYXIgZGV2ZWxvcG1lbnQsIGFuZCBjYW4gaGFuZGxlIGxhcmdlIHByb2plY3RzLgorICAgICAgICBJdCBpcyBiZXN0IHRoYXQgeW91IGhhdmUgc29tZSBmdW5kYW1lbnRhbCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBHaXQgdHJhY2tzIHByb2plY3RzIGFuZAorICAgICAgICBob3cgdG8gd29yayB3aXRoIEdpdCBpZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBmb3IgZGV2ZWxvcG1lbnQuCisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyBHaXQgd29ya3MgYW5kIHByb3ZpZGVzIHlvdSB3aXRoIGEgc3VtbWFyeQorICAgICAgICBvZiBzb21lIGVzc2VudGlhbCBHaXQgY29tbWFuZHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEdpdCwgc2VlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgSWYgeW91IG5lZWQgdG8gZG93bmxvYWQgR2l0LCBnbyB0byA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LXNjbS5jb20vZG93bmxvYWQnPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdyZXBvc2l0b3JpZXMtdGFncy1hbmQtYnJhbmNoZXMnPgorICAgICAgICA8dGl0bGU+UmVwb3NpdG9yaWVzLCBUYWdzLCBhbmQgQnJhbmNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgbWVudGlvbmVkIGVhcmxpZXIgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd5b2N0by1wcm9qZWN0LXJlcG9zaXRvcmllcyc+WW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzPC9saW5rPiIsCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBtYWludGFpbnMgc291cmNlIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgIElmIHlvdSBsb29rIGF0IHRoaXMgd2ViLWludGVyZmFjZSBvZiB0aGUgcmVwb3NpdG9yaWVzLCBlYWNoIGl0ZW0gaXMgYSBzZXBhcmF0ZQorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgdXNlIGJyYW5jaGluZyB0ZWNobmlxdWVzIHRoYXQgdHJhY2sgY29udGVudCBjaGFuZ2UgKG5vdCBmaWxlcykKKyAgICAgICAgICAgIHdpdGhpbiBhIHByb2plY3QgKGUuZy4gYSBuZXcgZmVhdHVyZSBvciB1cGRhdGVkIGRvY3VtZW50YXRpb24pLgorICAgICAgICAgICAgQ3JlYXRpbmcgYSB0cmVlLWxpa2Ugc3RydWN0dXJlIGJhc2VkIG9uIHByb2plY3QgZGl2ZXJnZW5jZSBhbGxvd3MgZm9yIGV4Y2VsbGVudCBoaXN0b3JpY2FsCisgICAgICAgICAgICBpbmZvcm1hdGlvbiBvdmVyIHRoZSBsaWZlIG9mIGEgcHJvamVjdC4KKyAgICAgICAgICAgIFRoaXMgbWV0aG9kb2xvZ3kgYWxzbyBhbGxvd3MgZm9yIGFuIGVudmlyb25tZW50IGZyb20gd2hpY2ggeW91IGNhbiBkbyBsb3RzIG9mCisgICAgICAgICAgICBsb2NhbCBleHBlcmltZW50YXRpb24gb24gcHJvamVjdHMgYXMgeW91IGRldmVsb3AgY2hhbmdlcyBvciBuZXcgZmVhdHVyZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgR2l0IHJlcG9zaXRvcnkgcmVwcmVzZW50cyBhbGwgZGV2ZWxvcG1lbnQgZWZmb3J0cyBmb3IgYSBnaXZlbiBwcm9qZWN0LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBHaXQgcmVwb3NpdG9yeSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGNvbnRhaW5zIGFsbCBjaGFuZ2VzCisgICAgICAgICAgICBhbmQgZGV2ZWxvcG1lbnRzIGZvciBQb2t5IG92ZXIgdGhlIGNvdXJzZSBvZiBpdHMgZW50aXJlIGxpZmUuCisgICAgICAgICAgICBUaGF0IG1lYW5zIHRoYXQgYWxsIGNoYW5nZXMgdGhhdCBtYWtlIHVwIGFsbCByZWxlYXNlcyBhcmUgY2FwdHVyZWQuCisgICAgICAgICAgICBUaGUgcmVwb3NpdG9yeSBtYWludGFpbnMgYSBjb21wbGV0ZSBoaXN0b3J5IG9mIGNoYW5nZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIGEgbG9jYWwgY29weSBvZiBhbnkgcmVwb3NpdG9yeSBieSAiY2xvbmluZyIgaXQgd2l0aCB0aGUgR2l0CisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgV2hlbiB5b3UgY2xvbmUgYSBHaXQgcmVwb3NpdG9yeSwgeW91IGVuZCB1cCB3aXRoIGFuIGlkZW50aWNhbCBjb3B5IG9mIHRoZQorICAgICAgICAgICAgcmVwb3NpdG9yeSBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbS4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYSBsb2NhbCBjb3B5IG9mIGEgcmVwb3NpdG9yeSwgeW91IGNhbiB0YWtlIHN0ZXBzIHRvIGRldmVsb3AgbG9jYWxseS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlcyBvbiBob3cgdG8gY2xvbmUgR2l0IHJlcG9zaXRvcmllcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCBHaXQgdHJhY2tzIGNvbnRlbnQgY2hhbmdlIGFuZAorICAgICAgICAgICAgbm90IGZpbGVzLgorICAgICAgICAgICAgR2l0IHVzZXMgImJyYW5jaGVzIiB0byBvcmdhbml6ZSBkaWZmZXJlbnQgZGV2ZWxvcG1lbnQgZWZmb3J0cy4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGhhcworICAgICAgICAgICAgc2V2ZXJhbCBicmFuY2hlcyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUU7PC9maWxlbmFtZT4gYnJhbmNoLCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBicmFuY2gsIGFuZCBtYW55IGJyYW5jaGVzIGZvciBwYXN0CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgYWxsIHRoZSBicmFuY2hlcyBieSBnb2luZyB0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvJz48L3VsaW5rPiBhbmQKKyAgICAgICAgICAgIGNsaWNraW5nIG9uIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5L3JlZnMvaGVhZHMnPlsuLi5dPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluayBiZW5lYXRoIHRoZSAiQnJhbmNoIiBoZWFkaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIG9mIHRoZXNlIGJyYW5jaGVzIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBhcmVhIG9mIGRldmVsb3BtZW50LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tYXN0ZXI8L2ZpbGVuYW1lPiBicmFuY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBvciBtb3N0IHJlY2VudAorICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBBbGwgb3RoZXIgYnJhbmNoZXMgcmVwcmVzZW50IG9mZnNob290cyBvZiB0aGUgPGZpbGVuYW1lPm1hc3RlcjwvZmlsZW5hbWU+CisgICAgICAgICAgICBicmFuY2guCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGNyZWF0ZSBhIGxvY2FsIGNvcHkgb2YgYSBHaXQgcmVwb3NpdG9yeSwgdGhlIGNvcHkgaGFzIHRoZSBzYW1lIHNldAorICAgICAgICAgICAgb2YgYnJhbmNoZXMgYXMgdGhlIG9yaWdpbmFsLgorICAgICAgICAgICAgVGhpcyBtZWFucyB5b3UgY2FuIHVzZSBHaXQgdG8gY3JlYXRlIGEgbG9jYWwgd29ya2luZyBhcmVhIChhbHNvIGNhbGxlZCBhIGJyYW5jaCkKKyAgICAgICAgICAgIHRoYXQgdHJhY2tzIGEgc3BlY2lmaWMgZGV2ZWxvcG1lbnQgYnJhbmNoIGZyb20gdGhlIHNvdXJjZSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIGluIG90aGVyIHdvcmRzLCB5b3UgY2FuIGRlZmluZSB5b3VyIGxvY2FsIEdpdCBlbnZpcm9ubWVudCB0byB3b3JrIG9uIGFueSBkZXZlbG9wbWVudAorICAgICAgICAgICAgYnJhbmNoIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVG8gaGVscCBpbGx1c3RyYXRlLCBoZXJlIGlzIGEgc2V0IG9mIGNvbW1hbmRzIHRoYXQgY3JlYXRlcyBhIGxvY2FsIGNvcHkgb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5IGFuZCB0aGVuIGNyZWF0ZXMgYW5kIGNoZWNrcyBvdXQgYSBsb2NhbAorICAgICAgICAgICAgR2l0IGJyYW5jaCB0aGF0IHRyYWNrcyB0aGUgWW9jdG8gUHJvamVjdCAmRElTVFJPOyBSZWxlYXNlICgmRElTVFJPX05BTUU7KSBkZXZlbG9wbWVudDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgJCBjZCBwb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRTsgb3JpZ2luLyZESVNUUk9fTkFNRTsKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgeW91ciBsb2NhbAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgIGlzICJwb2t5IiBhbmQgdGhlIG5hbWUgb2YgdGhhdCBsb2NhbCB3b3JraW5nIGFyZWEgKGxvY2FsIGJyYW5jaCkKKyAgICAgICAgICAgIHlvdSBqdXN0IGNyZWF0ZWQgYW5kIGNoZWNrZWQgb3V0IGlzICImRElTVFJPX05BTUU7Ii4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkgbm93IHJlZmxlY3QgdGhlIHNhbWUgZmlsZXMgdGhhdAorICAgICAgICAgICAgYXJlIGluIHRoZSAiJkRJU1RST19OQU1FOyIgZGV2ZWxvcG1lbnQgYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCdzICJwb2t5IiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB3aGVuIHlvdSBjcmVhdGUgYW5kIGNoZWNrb3V0IGEKKyAgICAgICAgICAgIGxvY2FsIHdvcmtpbmcgYnJhbmNoIGJhc2VkIG9uIGEgYnJhbmNoIG5hbWUsCisgICAgICAgICAgICB5b3VyIGxvY2FsIGVudmlyb25tZW50IG1hdGNoZXMgdGhlICJ0aXAiIG9mIHRoYXQgZGV2ZWxvcG1lbnQgYnJhbmNoCisgICAgICAgICAgICBhdCB0aGUgdGltZSB5b3UgY3JlYXRlZCB5b3VyIGxvY2FsIGJyYW5jaCwgd2hpY2ggY291bGQgYmUKKyAgICAgICAgICAgIGRpZmZlcmVudCBmcm9tIHRoZSBmaWxlcyBhdCB0aGUgdGltZSBvZiBhIHNpbWlsYXJseSBuYW1lZCByZWxlYXNlLgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGNyZWF0aW5nIGFuZCBjaGVja2luZyBvdXQgYSBsb2NhbCBicmFuY2ggYmFzZWQgb24KKyAgICAgICAgICAgIHRoZSAiJkRJU1RST19OQU1FOyIgYnJhbmNoIG5hbWUgaXMgbm90IHRoZSBzYW1lIGFzCisgICAgICAgICAgICBjbG9uaW5nIGFuZCBjaGVja2luZyBvdXQgdGhlICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgICAgIEtlZXAgcmVhZGluZyB0byBzZWUgaG93IHlvdSBjcmVhdGUgYSBsb2NhbCBzbmFwc2hvdCBvZiBhIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IFJlbGVhc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCB1c2VzICJ0YWdzIiB0byBtYXJrIHNwZWNpZmljIGNoYW5nZXMgaW4gYSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVHlwaWNhbGx5LCBhIHRhZyBpcyB1c2VkIHRvIG1hcmsgYSBzcGVjaWFsIHBvaW50IHN1Y2ggYXMgdGhlIGZpbmFsCisgICAgICAgICAgICBjaGFuZ2UgYmVmb3JlIGEgcHJvamVjdCBpcyByZWxlYXNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSB0YWdzIHVzZWQgd2l0aCB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgIHJlcG9zaXRvcnkgYnkgZ29pbmcgdG8KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaS9wb2t5Lyc+PC91bGluaz4gYW5kCisgICAgICAgICAgICBjbGlja2luZyBvbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2kvcG9reS9yZWZzL3RhZ3MnPlsuLi5dPC91bGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluayBiZW5lYXRoIHRoZSAiVGFnIiBoZWFkaW5nLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21lIGtleSB0YWdzIGFyZSA8ZmlsZW5hbWU+ZHlsYW4tOS4wLjQ8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb3JhLTEwLjAuNDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZGFpc3ktMTEuMC4yPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZGl6enktMTIuMC4wPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPiZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlc2UgdGFncyByZXByZXNlbnQgWW9jdG8gUHJvamVjdCByZWxlYXNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBhbHNvIGhhdmUgYWNjZXNzIHRvIGFsbCB0aGUKKyAgICAgICAgICAgIHRhZ3MuCisgICAgICAgICAgICBTaW1pbGFyIHRvIGJyYW5jaGVzLCB5b3UgY2FuIGNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBsb2NhbCB3b3JraW5nIEdpdCBicmFuY2ggYmFzZWQKKyAgICAgICAgICAgIG9uIGEgdGFnIG5hbWUuCisgICAgICAgICAgICBXaGVuIHlvdSBkbyB0aGlzLCB5b3UgZ2V0IGEgc25hcHNob3Qgb2YgdGhlIEdpdCByZXBvc2l0b3J5IHRoYXQgcmVmbGVjdHMKKyAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXMgd2hlbiB0aGUgY2hhbmdlIHdhcyBtYWRlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHRhZy4KKyAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2UgaXMgdG8gY2hlY2tvdXQgYSB3b3JraW5nIGJyYW5jaCB0aGF0IG1hdGNoZXMgYSBzcGVjaWZpYworICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIH4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbXktJkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047ICZESVNUUk9fTkFNRTstJlBPS1lWRVJTSU9OOworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB5b3VyIGxvY2FsIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIEZpbGVzIEdpdCByZXBvc2l0b3J5IGlzIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBBbmQsIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCBicmFuY2ggeW91IGhhdmUgY3JlYXRlZCBhbmQgY2hlY2tlZCBvdXQgaXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5teS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbiB5b3VyIHJlcG9zaXRvcnkgbm93IGV4YWN0bHkgbWF0Y2ggdGhlIFlvY3RvIFByb2plY3QgJkRJU1RSTzsKKyAgICAgICAgICAgIFJlbGVhc2UgdGFnICg8ZmlsZW5hbWU+JkRJU1RST19OQU1FOy0mUE9LWVZFUlNJT047PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCB3aGVuIHlvdSBjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbG9jYWwKKyAgICAgICAgICAgIHdvcmtpbmcgYnJhbmNoIGJhc2VkIG9uIGEgdGFnLCB5b3VyIGVudmlyb25tZW50IG1hdGNoZXMgYSBzcGVjaWZpYyBwb2ludAorICAgICAgICAgICAgaW4gdGltZSBhbmQgbm90IHRoZSBlbnRpcmUgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jhc2ljLWNvbW1hbmRzJz4KKyAgICAgICAgPHRpdGxlPkJhc2ljIENvbW1hbmRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEdpdCBoYXMgYW4gZXh0ZW5zaXZlIHNldCBvZiBjb21tYW5kcyB0aGF0IGxldHMgeW91IG1hbmFnZSBjaGFuZ2VzIGFuZCBwZXJmb3JtCisgICAgICAgICAgICBjb2xsYWJvcmF0aW9uIG92ZXIgdGhlIGxpZmUgb2YgYSBwcm9qZWN0LgorICAgICAgICAgICAgQ29udmVuaWVudGx5IHRob3VnaCwgeW91IGNhbiBtYW5hZ2Ugd2l0aCBhIHNtYWxsIHNldCBvZiBiYXNpYyBvcGVyYXRpb25zIGFuZCB3b3JrZmxvd3MKKyAgICAgICAgICAgIG9uY2UgeW91IHVuZGVyc3RhbmQgdGhlIGJhc2ljIHBoaWxvc29waHkgYmVoaW5kIEdpdC4KKyAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhbiBleHBlcnQgaW4gR2l0IHRvIGJlIGZ1bmN0aW9uYWwuCisgICAgICAgICAgICBBIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgaW5zdHJ1Y3Rpb24gb24gYSBtaW5pbWFsIHNldCBvZiBHaXQgY29tbWFuZHMgaXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz5oZXJlPC91bGluaz4uCisgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBkb3dubG9hZCBHaXQsIHlvdSBjYW4gZG8gc28KKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb3dubG9hZCc+aGVyZTwvdWxpbms+LCBhbHRob3VnaAorICAgICAgICAgICAgYW55IHJlYXNvbmFibHkgY3VycmVudCBMaW51eCBkaXN0cmlidXRpb24gc2hvdWxkIGFscmVhZHkgaGF2ZSBhbgorICAgICAgICAgICAgaW5zdGFsbGFibGUgcGFja2FnZSBmb3IgR2l0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGtub3cgbXVjaCBhYm91dCBHaXQsIHlvdSBzaG91bGQgZWR1Y2F0ZQorICAgICAgICAgICAgeW91cnNlbGYgYnkgdmlzaXRpbmcgdGhlIGxpbmtzIHByZXZpb3VzbHkgbWVudGlvbmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3QgYnJpZWZseSBkZXNjcmliZXMgc29tZSBiYXNpYyBHaXQgb3BlcmF0aW9ucyBhcyBhIHdheSB0byBnZXQgc3RhcnRlZC4KKyAgICAgICAgICAgIEFzIHdpdGggYW55IHNldCBvZiBjb21tYW5kcywgdGhpcyBsaXN0IChpbiBtb3N0IGNhc2VzKSBzaW1wbHkgc2hvd3MgdGhlIGJhc2UgY29tbWFuZCBhbmQKKyAgICAgICAgICAgIG9taXRzIHRoZSBtYW55IGFyZ3VtZW50cyB0aGV5IHN1cHBvcnQuCisgICAgICAgICAgICBTZWUgdGhlIEdpdCBkb2N1bWVudGF0aW9uIGZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnMgYW5kIHN0cmF0ZWdpZXMgb24gaG93IHRvIHVzZSB0aGVzZSBjb21tYW5kczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGluaXQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBJbml0aWFsaXplcyBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCB1c2UgR2l0IGNvbW1hbmRzIHVubGVzcyB5b3UgaGF2ZSBhIDxmaWxlbmFtZT4uZ2l0PC9maWxlbmFtZT4gcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIGEgbG9jYWwgY2xvbmUgb2YgYSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGNvbGxhYm9yYXRpb24sIHRoaXMgY29tbWFuZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgICAgIGxvY2FsIEdpdCByZXBvc2l0b3J5IHRoYXQgaXMgb24gZXF1YWwgZm9vdGluZyB3aXRoIGEgZmVsbG93CisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BlcuKAmXMgR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBhZGQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBTdGFnZXMgdXBkYXRlZCBmaWxlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBpbmRleCB0aGF0CisgICAgICAgICAgICAgICAgICAgIEdpdCB1c2VzIHRvIHRyYWNrIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHN0YWdlIGFsbCBmaWxlcyB0aGF0IGhhdmUgY2hhbmdlZCBiZWZvcmUgeW91IGNhbiBjb21taXQgdGhlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY29tbWl0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ3JlYXRlcyBhICJjb21taXQiIHRoYXQgZG9jdW1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRoZSBjaGFuZ2VzIHlvdSBtYWRlLgorICAgICAgICAgICAgICAgICAgICBDb21taXRzIGFyZSB1c2VkIGZvciBoaXN0b3JpY2FsIHB1cnBvc2VzLCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBtYWludGFpbmVyIG9mIGEgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICB3aWxsIGFsbG93IHRoZSBjaGFuZ2UsIGFuZCBmb3IgdWx0aW1hdGVseSBwdXNoaW5nIHRoZSBjaGFuZ2UgZnJvbSB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHByb2plY3TigJlzIHVwc3RyZWFtIChvciBtYXN0ZXIpIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IHN0YXR1czwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJlcG9ydHMgYW55IG1vZGlmaWVkIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libHkgbmVlZCB0byBiZSBzdGFnZWQgYW5kIGNvbW1pdHRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgY2hlY2tvdXQgJmx0O2JyYW5jaC1uYW1lJmd0OzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IENoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgeW91ciB3b3JraW5nIGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGFuYWxvZ291cyB0byAiY2QiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBjaGVja291dCDigJNiICZsdDt3b3JraW5nLWJyYW5jaCZndDs8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDcmVhdGVzCisgICAgICAgICAgICAgICAgICAgIGEgd29ya2luZyBicmFuY2ggb24geW91ciBsb2NhbCBtYWNoaW5lIHdoZXJlIHlvdSBjYW4gaXNvbGF0ZSB3b3JrLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2UgbG9jYWwgYnJhbmNoZXMgd2hlbiBhZGRpbmcgc3BlY2lmaWMgZmVhdHVyZXMgb3IgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB3YXkgaWYgeW91IGRvIG5vdCBsaWtlIHdoYXQgeW91IGhhdmUgZG9uZSB5b3UgY2FuIGVhc2lseSBnZXQgcmlkIG9mIHRoZSB3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBicmFuY2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBSZXBvcnRzCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGxvY2FsIGJyYW5jaGVzIGFuZAorICAgICAgICAgICAgICAgICAgICB0ZWxscyB5b3UgdGhlIGJyYW5jaCBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSB3b3JraW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBicmFuY2ggLUQgJmx0O2JyYW5jaC1uYW1lJmd0OzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERlbGV0ZXMgYW4gZXhpc3RpbmcgbG9jYWwgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBiZSBpbiBhIGxvY2FsIGJyYW5jaCBvdGhlciB0aGFuIHRoZSBvbmUgeW91IGFyZSBkZWxldGluZworICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBkZWxldGUgPGZpbGVuYW1lPiZsdDticmFuY2gtbmFtZSZndDs8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgcHVsbDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+IFJldHJpZXZlcyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICBmcm9tIGFuIHVwc3RyZWFtIEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGFuZCBwbGFjZXMgaXQgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHVzZSB0aGlzIGNvbW1hbmQgdG8gbWFrZSBzdXJlIHlvdSBhcmUgc3luY2hyb25pemVkIHdpdGggdGhlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB3aGljaCB5b3UgYXJlIGJhc2luZyBjaGFuZ2VzICguZS5nLiB0aGUgbWFzdGVyIGJyYW5jaCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IHB1c2g8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTZW5kcyBhbGwgeW91ciBjb21taXR0ZWQgbG9jYWwgY2hhbmdlcyB0byBhbiB1cHN0cmVhbSBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSAoZS5nLiBhIGNvbnRyaWJ1dGlvbiByZXBvc2l0b3J5KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgZHJhd3MgZnJvbSB0aGVzZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBhZGRpbmcgY2hhbmdlcyB0byB0aGUgcHJvamVjdOKAmXMgbWFzdGVyIHJlcG9zaXRvcnkgb3IKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPiBDb21iaW5lcyBvciBhZGRzIGNoYW5nZXMgZnJvbSBvbmUKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgYnJhbmNoIG9mIHlvdXIgcmVwb3NpdG9yeSB3aXRoIGFub3RoZXIgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSwgdGhlIGRlZmF1bHQgYnJhbmNoIGlzIG5hbWVkICJtYXN0ZXIiLgorICAgICAgICAgICAgICAgICAgICBBIHR5cGljYWwgd29ya2Zsb3cgaXMgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGJyYW5jaCBmb3IgaXNvbGF0ZWQgd29yaywgbWFrZSBhbmQgY29tbWl0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgc3dpdGNoIHRvIHlvdXIgbG9jYWwgbWFzdGVyIGJyYW5jaCwgbWVyZ2UgdGhlIGNoYW5nZXMgZnJvbSB0aGUgdGVtcG9yYXJ5IGJyYW5jaCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBhbmQgdGhlbiBkZWxldGUgdGhlIHRlbXBvcmFyeSBicmFuY2guPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2l0IGNoZXJyeS1waWNrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gQ2hvb3NlIGFuZCBhcHBseSBzcGVjaWZpYworICAgICAgICAgICAgICAgICAgICBjb21taXRzIGZyb20gb25lIGJyYW5jaCBpbnRvIGFub3RoZXIgYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBUaGVyZSBhcmUgdGltZXMgd2hlbiB5b3UgbWlnaHQgbm90IGJlIGFibGUgdG8gbWVyZ2UgYWxsIHRoZSBjaGFuZ2VzIGluIG9uZSBicmFuY2ggd2l0aAorICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGJ1dCBuZWVkIHRvIHBpY2sgb3V0IGNlcnRhaW4gb25lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXRrPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUHJvdmlkZXMgYSBHVUkgdmlldyBvZiB0aGUgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGEgZ29vZCB3YXkgdG8gZ3JhcGhpY2FsbHkgc2VlIHdoZXJlIHRoaW5ncyBoYXZlIGRpdmVyZ2VkIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5naXQgbG9nPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gUmVwb3J0cyBhIGhpc3Rvcnkgb2YgeW91ciBjaGFuZ2VzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT46PC9lbXBoYXNpcz4gRGlzcGxheXMgbGluZS1ieS1saW5lIGRpZmZlcmVuY2VzCisgICAgICAgICAgICAgICAgICAgIGJldHdlZW4geW91ciBsb2NhbCB3b3JraW5nIGZpbGVzIGFuZCB0aGUgc2FtZSBmaWxlcyBpbiB0aGUgdXBzdHJlYW0gR2l0IHJlcG9zaXRvcnkgdGhhdCB5b3VyCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCBjdXJyZW50bHkgdHJhY2tzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd3b3JrZmxvd3MnPgorICAgIDx0aXRsZT5Xb3JrZmxvd3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBzb21lIG92ZXJ2aWV3IG9uIHdvcmtmbG93cyB1c2luZyBHaXQuCisgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBpbmZvcm1hdGlvbiBjb3ZlcnMgYmFzaWMgcHJhY3RpY2VzIHRoYXQgZGVzY3JpYmUgcm9sZXMgYW5kIGFjdGlvbnMgaW4gYQorICAgICAgICBjb2xsYWJvcmF0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50LgorICAgICAgICBBZ2FpbiwgaWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoaXMgdHlwZSBvZiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgeW91IG1pZ2h0IHdhbnQgdG8ganVzdAorICAgICAgICBza2lwIHRoaXMgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgZmlsZXMgYXJlIG1haW50YWluZWQgdXNpbmcgR2l0IGluIGEgIm1hc3RlciIgYnJhbmNoIHdob3NlIEdpdCBoaXN0b3J5CisgICAgICAgIHRyYWNrcyBldmVyeSBjaGFuZ2UgYW5kIHdob3NlIHN0cnVjdHVyZSBwcm92aWRlcyBicmFuY2hlcyBmb3IgYWxsIGRpdmVyZ2luZyBmdW5jdGlvbmFsaXR5LgorICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSBHaXQsIG1hbnkgb3BlbiBzb3VyY2UgcHJvamVjdHMgZG8gc28uCisgICAgICAgIEZvciB0aGUgWW9jdG8gUHJvamVjdCwgYSBrZXkgaW5kaXZpZHVhbCBjYWxsZWQgdGhlICJtYWludGFpbmVyIiBpcyByZXNwb25zaWJsZSBmb3IgdGhlICJtYXN0ZXIiCisgICAgICAgIGJyYW5jaCBvZiBhIGdpdmVuIEdpdCByZXBvc2l0b3J5LgorICAgICAgICBUaGUgIm1hc3RlciIgYnJhbmNoIGlzIHRoZSDigJx1cHN0cmVhbeKAnSByZXBvc2l0b3J5IHdoZXJlIHRoZSBmaW5hbCBidWlsZHMgb2YgdGhlIHByb2plY3Qgb2NjdXIuCisgICAgICAgIFRoZSBtYWludGFpbmVyIGlzIHJlc3BvbnNpYmxlIGZvciBhY2NlcHRpbmcgY2hhbmdlcyBmcm9tIG90aGVyIGRldmVsb3BlcnMgYW5kIGZvcgorICAgICAgICBvcmdhbml6aW5nIHRoZSB1bmRlcmx5aW5nIGJyYW5jaCBzdHJ1Y3R1cmUgdG8gcmVmbGVjdCByZWxlYXNlIHN0cmF0ZWdpZXMgYW5kIHNvIGZvcnRoLgorICAgICAgICA8bm90ZT5Gb3IgaW5mb3JtYXRpb24gb24gZmluZGluZyBvdXQgd2hvIGlzIHJlc3BvbnNpYmxlIGZvciAobWFpbnRhaW5zKQorICAgICAgICAgICAgYSBwYXJ0aWN1bGFyIGFyZWEgb2YgY29kZSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcHJvamVjdCBhbHNvIGhhcyBhbiB1cHN0cmVhbSBjb250cmlidXRpb24gR2l0IHJlcG9zaXRvcnkgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPnBva3ktY29udHJpYjwvZmlsZW5hbWU+LgorICAgICAgICBZb3UgY2FuIHNlZSBhbGwgdGhlIGJyYW5jaGVzIGluIHRoaXMgcmVwb3NpdG9yeSB1c2luZyB0aGUgd2ViIGludGVyZmFjZQorICAgICAgICBvZiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gb3JnYW5pemVkCisgICAgICAgIHdpdGhpbiB0aGUgIlBva3kgU3VwcG9ydCIgYXJlYS4KKyAgICAgICAgVGhlc2UgYnJhbmNoZXMgdGVtcG9yYXJpbHkgaG9sZCBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IHRoYXQgaGF2ZSBiZWVuCisgICAgICAgIHN1Ym1pdHRlZCBvciBjb21taXR0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbSBhbmQgYnkKKyAgICAgICAgY29tbXVuaXR5IG1lbWJlcnMgd2hvIGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QuCisgICAgICAgIFRoZSBtYWludGFpbmVyIGRldGVybWluZXMgaWYgdGhlIGNoYW5nZXMgYXJlIHF1YWxpZmllZCB0byBiZSBtb3ZlZAorICAgICAgICBmcm9tIHRoZSAiY29udHJpYiIgYnJhbmNoZXMgaW50byB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQKKyAgICAgICAgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRGV2ZWxvcGVycyAoaW5jbHVkaW5nIGNvbnRyaWJ1dGluZyBjb21tdW5pdHkgbWVtYmVycykgY3JlYXRlIGFuZCBtYWludGFpbiBjbG9uZWQgcmVwb3NpdG9yaWVzCisgICAgICAgIG9mIHRoZSB1cHN0cmVhbSAibWFzdGVyIiBicmFuY2guCisgICAgICAgIFRoZXNlIHJlcG9zaXRvcmllcyBhcmUgbG9jYWwgdG8gdGhlaXIgZGV2ZWxvcG1lbnQgcGxhdGZvcm1zIGFuZCBhcmUgdXNlZCB0byBkZXZlbG9wIGNoYW5nZXMuCisgICAgICAgIFdoZW4gYSBkZXZlbG9wZXIgaXMgc2F0aXNmaWVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgY2hhbmdlLCB0aGV5ICJwdXNoIiB0aGUgY2hhbmdlcworICAgICAgICB0byB0aGUgYXBwcm9wcmlhdGUgImNvbnRyaWIiIHJlcG9zaXRvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIERldmVsb3BlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRoZWlyIGxvY2FsIHJlcG9zaXRvcnkgdXAtdG8tZGF0ZSB3aXRoICJtYXN0ZXIiLgorICAgICAgICBUaGV5IGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBzdHJhaWdodGVuaW5nIG91dCBhbnkgY29uZmxpY3RzIHRoYXQgbWlnaHQgYXJpc2Ugd2l0aGluIGZpbGVzCisgICAgICAgIHRoYXQgYXJlIGJlaW5nIHdvcmtlZCBvbiBzaW11bHRhbmVvdXNseSBieSBtb3JlIHRoYW4gb25lIHBlcnNvbi4KKyAgICAgICAgQWxsIHRoaXMgd29yayBpcyBkb25lIGxvY2FsbHkgb24gdGhlIGRldmVsb3BlcuKAmXMgbWFjaGluZXMgYmVmb3JlIGFueXRoaW5nIGlzIHB1c2hlZCB0byBhCisgICAgICAgICJjb250cmliIiBhcmVhIGFuZCBleGFtaW5lZCBhdCB0aGUgbWFpbnRhaW5lcuKAmXMgbGV2ZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgc29tZXdoYXQgZm9ybWFsIG1ldGhvZCBleGlzdHMgYnkgd2hpY2ggZGV2ZWxvcGVycyBjb21taXQgY2hhbmdlcyBhbmQgcHVzaCB0aGVtIGludG8gdGhlCisgICAgICAgICJjb250cmliIiBhcmVhIGFuZCBzdWJzZXF1ZW50bHkgcmVxdWVzdCB0aGF0IHRoZSBtYWludGFpbmVyIGluY2x1ZGUgdGhlbSBpbnRvICJtYXN0ZXIiCisgICAgICAgIFRoaXMgcHJvY2VzcyBpcyBjYWxsZWQg4oCcc3VibWl0dGluZyBhIHBhdGNo4oCdIG9yICJzdWJtaXR0aW5nIGEgY2hhbmdlLiIKKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHN1Ym1pdHRpbmcgcGF0Y2hlcyBhbmQgY2hhbmdlcywgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iIHNlY3Rpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHN1bW1hcml6ZSB0aGUgZW52aXJvbm1lbnQ6ICBhIHNpbmdsZSBwb2ludCBvZiBlbnRyeSBleGlzdHMgZm9yCisgICAgICAgIGNoYW5nZXMgaW50byB0aGUgcHJvamVjdOKAmXMgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwKKyAgICAgICAgd2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUgcHJvamVjdOKAmXMgbWFpbnRhaW5lci4KKyAgICAgICAgQW5kLCBhIHNldCBvZiBkZXZlbG9wZXJzIGV4aXN0IHdobyBpbmRlcGVuZGVudGx5IGRldmVsb3AsIHRlc3QsIGFuZAorICAgICAgICBzdWJtaXQgY2hhbmdlcyB0byAiY29udHJpYiIgYXJlYXMgZm9yIHRoZSBtYWludGFpbmVyIHRvIGV4YW1pbmUuCisgICAgICAgIFRoZSBtYWludGFpbmVyIHRoZW4gY2hvb3NlcyB3aGljaCBjaGFuZ2VzIGFyZSBnb2luZyB0byBiZWNvbWUgYQorICAgICAgICBwZXJtYW5lbnQgcGFydCBvZiB0aGUgcHJvamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2dpdC13b3JrZmxvdy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSIzaW4iIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgZWFjaCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBpcyB1bmlxdWUsIHRoZXJlIGFyZSBzb21lIGJlc3QgcHJhY3RpY2VzIG9yIG1ldGhvZHMKKyAgICAgICAgdGhhdCBoZWxwIGRldmVsb3BtZW50IHJ1biBzbW9vdGhseS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyBzb21lIG9mIHRoZXNlIHByYWN0aWNlcy4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgR2l0IHdvcmtmbG93cywgc2VlIHRoZSB3b3JrZmxvdyB0b3BpY3MgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9ib29rLmdpdC1zY20uY29tJz5HaXQgQ29tbXVuaXR5IEJvb2s8L3VsaW5rPi4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBTbWFsbCBDaGFuZ2VzOjwvZW1waGFzaXM+IEl0IGlzIGJlc3QgdG8ga2VlcCB0aGUgY2hhbmdlcyB5b3UgY29tbWl0CisgICAgICAgICAgICAgICAgc21hbGwgYXMgY29tcGFyZWQgdG8gYnVuZGxpbmcgbWFueSBkaXNwYXJhdGUgY2hhbmdlcyBpbnRvIGEgc2luZ2xlIGNvbW1pdC4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIG5vdCBvbmx5IGtlZXBzIHRoaW5ncyBtYW5hZ2VhYmxlIGJ1dCBhbHNvIGFsbG93cyB0aGUgbWFpbnRhaW5lcgorICAgICAgICAgICAgICAgIHRvIG1vcmUgZWFzaWx5IGluY2x1ZGUgb3IgcmVmdXNlIGNoYW5nZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkl0IGlzIGFsc28gZ29vZCBwcmFjdGljZSB0byBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiBhIHN0YXRlIHRoYXQgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgIHN0aWxsIHN1Y2Nlc3NmdWxseSBidWlsZCB5b3VyIHByb2plY3QuICBJbiBvdGhlciB3b3JkcywgZG8gbm90IGNvbW1pdCBoYWxmIG9mIGEgZmVhdHVyZSwKKyAgICAgICAgICAgICAgICB0aGVuIGFkZCB0aGUgb3RoZXIgaGFsZiBhcyBhIHNlcGFyYXRlLCBsYXRlciBjb21taXQuCisgICAgICAgICAgICAgICAgRWFjaCBjb21taXQgc2hvdWxkIHRha2UgeW91IGZyb20gb25lIGJ1aWxkYWJsZSBwcm9qZWN0IHN0YXRlIHRvIGFub3RoZXIKKyAgICAgICAgICAgICAgICBidWlsZGFibGUgc3RhdGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVzZSBCcmFuY2hlcyBMaWJlcmFsbHk6PC9lbXBoYXNpcz4gSXQgaXMgdmVyeSBlYXN5IHRvIGNyZWF0ZSwgdXNlLCBhbmQKKyAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWwgYnJhbmNoZXMgaW4geW91ciB3b3JraW5nIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbmFtZSB0aGVzZSBicmFuY2hlcyBhbnl0aGluZyB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBoZWxwZnVsIHRvIGdpdmUgdGhlbSBuYW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBjaGFuZ2UKKyAgICAgICAgICAgICAgICBvbiB3aGljaCB5b3UgYXJlIHdvcmtpbmcuCisgICAgICAgICAgICAgICAgT25jZSB5b3UgYXJlIGRvbmUgd2l0aCBhIGZlYXR1cmUgb3IgY2hhbmdlIGFuZCBoYXZlIG1lcmdlZCBpdAorICAgICAgICAgICAgICAgIGludG8geW91ciBsb2NhbCBtYXN0ZXIgYnJhbmNoLCBzaW1wbHkgZGlzY2FyZCB0aGUgdGVtcG9yYXJ5CisgICAgICAgICAgICAgICAgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5NZXJnZSBDaGFuZ2VzOjwvZW1waGFzaXM+IFRoZSA8ZmlsZW5hbWU+Z2l0IG1lcmdlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIGFsbG93cyB5b3UgdG8gdGFrZSB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGZyb20gb25lIGJyYW5jaCBhbmQgZm9sZCB0aGVtIGludG8gYW5vdGhlciBicmFuY2guCisgICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIGVzcGVjaWFsbHkgaGVscGZ1bCB3aGVuIG1vcmUgdGhhbiBhIHNpbmdsZSBkZXZlbG9wZXIgbWlnaHQgYmUgd29ya2luZworICAgICAgICAgICAgICAgIG9uIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc2FtZSBmZWF0dXJlLgorICAgICAgICAgICAgICAgIE1lcmdpbmcgY2hhbmdlcyBhbHNvIGF1dG9tYXRpY2FsbHkgaWRlbnRpZmllcyBhbnkgY29sbGlzaW9ucyBvciAiY29uZmxpY3RzIgorICAgICAgICAgICAgICAgIHRoYXQgbWlnaHQgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIHRoZSBzYW1lIGxpbmVzIG9mIGNvZGUgYmVpbmcgYWx0ZXJlZCBieSB0d28gZGlmZmVyZW50CisgICAgICAgICAgICAgICAgZGV2ZWxvcGVycy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFuYWdlIEJyYW5jaGVzOjwvZW1waGFzaXM+IEJlY2F1c2UgYnJhbmNoZXMgYXJlIGVhc3kgdG8gdXNlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgdXNlIGEgc3lzdGVtIHdoZXJlIGJyYW5jaGVzIGluZGljYXRlIHZhcnlpbmcgbGV2ZWxzIG9mIGNvZGUgcmVhZGluZXNzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGhhdmUgYSAid29yayIgYnJhbmNoIHRvIGRldmVsb3AgaW4sIGEgInRlc3QiIGJyYW5jaCB3aGVyZSB0aGUgY29kZSBvcgorICAgICAgICAgICAgICAgIGNoYW5nZSBpcyB0ZXN0ZWQsIGEgInN0YWdlIiBicmFuY2ggd2hlcmUgY2hhbmdlcyBhcmUgcmVhZHkgdG8gYmUgY29tbWl0dGVkLCBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgQXMgeW91ciBwcm9qZWN0IGRldmVsb3BzLCB5b3UgY2FuIG1lcmdlIGNvZGUgYWNyb3NzIHRoZSBicmFuY2hlcyB0byByZWZsZWN0IGV2ZXItaW5jcmVhc2luZworICAgICAgICAgICAgICAgIHN0YWJsZSBzdGF0ZXMgb2YgdGhlIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Vc2UgUHVzaCBhbmQgUHVsbDo8L2VtcGhhc2lzPiBUaGUgcHVzaC1wdWxsIHdvcmtmbG93IGlzIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIGNvbmNlcHQgb2YgZGV2ZWxvcGVycyAicHVzaGluZyIgbG9jYWwgY29tbWl0cyB0byBhIHJlbW90ZSByZXBvc2l0b3J5LCB3aGljaCBpcworICAgICAgICAgICAgICAgIHVzdWFsbHkgYSBjb250cmlidXRpb24gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBUaGlzIHdvcmtmbG93IGlzIGFsc28gYmFzZWQgb24gZGV2ZWxvcGVycyAicHVsbGluZyIga25vd24gc3RhdGVzIG9mIHRoZSBwcm9qZWN0IGRvd24gaW50byB0aGVpcgorICAgICAgICAgICAgICAgIGxvY2FsIGRldmVsb3BtZW50IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBUaGUgd29ya2Zsb3cgZWFzaWx5IGFsbG93cyB5b3UgdG8gcHVsbCBjaGFuZ2VzIHN1Ym1pdHRlZCBieSBvdGhlciBkZXZlbG9wZXJzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gcmVwb3NpdG9yeSBpbnRvIHlvdXIgd29yayBhcmVhIGVuc3VyaW5nIHRoYXQgeW91IGhhdmUgdGhlIG1vc3QgcmVjZW50IHNvZnR3YXJlCisgICAgICAgICAgICAgICAgb24gd2hpY2ggdG8gZGV2ZWxvcC4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgdHdvIHNjcmlwdHMgbmFtZWQgPGZpbGVuYW1lPmNyZWF0ZS1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiB0aGF0IHNoaXAgd2l0aCB0aGUgcmVsZWFzZSB0byBmYWNpbGl0YXRlIHRoaXMKKyAgICAgICAgICAgICAgICB3b3JrZmxvdy4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlc2Ugc2NyaXB0cyBpbiB0aGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZvbGRlciBvZiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZSBVcHN0cmVhbSBhbmQgUmVxdWVzdCBhIFB1bGw8L2xpbms+IiBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYXRjaCBXb3JrZmxvdzo8L2VtcGhhc2lzPiBUaGlzIHdvcmtmbG93IGFsbG93cyB5b3UgdG8gbm90aWZ5IHRoZQorICAgICAgICAgICAgICAgIG1haW50YWluZXIgdGhyb3VnaCBhbiBlbWFpbCB0aGF0IHlvdSBoYXZlIGEgY2hhbmdlIChvciBwYXRjaCkgeW91IHdvdWxkIGxpa2UgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgIGZvciB0aGUgIm1hc3RlciIgYnJhbmNoIG9mIHRoZSBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBUbyBzZW5kIHRoaXMgdHlwZSBvZiBjaGFuZ2UsIHlvdSBmb3JtYXQgdGhlIHBhdGNoIGFuZCB0aGVuIHNlbmQgdGhlIGVtYWlsIHVzaW5nIHRoZSBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2hvdy10by1zdWJtaXQtYS1jaGFuZ2UnPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3RyYWNraW5nLWJ1Z3MnPgorICAgIDx0aXRsZT5UcmFja2luZyBCdWdzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB1c2VzIGl0cyBvd24gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5idWd6aWxsYS5vcmcvYWJvdXQvJz5CdWd6aWxsYTwvdWxpbms+IHRvIHRyYWNrIGJ1Z3MuCisgICAgICAgIEltcGxlbWVudGF0aW9ucyBvZiBCdWd6aWxsYSB3b3JrIHdlbGwgZm9yIGdyb3VwIGRldmVsb3BtZW50IGJlY2F1c2UgdGhleSB0cmFjayBidWdzIGFuZCBjb2RlCisgICAgICAgIGNoYW5nZXMsIGNhbiBiZSB1c2VkIHRvIGNvbW11bmljYXRlIGNoYW5nZXMgYW5kIHByb2JsZW1zIHdpdGggZGV2ZWxvcGVycywgY2FuIGJlIHVzZWQgdG8KKyAgICAgICAgc3VibWl0IGFuZCByZXZpZXcgcGF0Y2hlcywgYW5kIGNhbiBiZSB1c2VkIHRvIG1hbmFnZSBxdWFsaXR5IGFzc3VyYW5jZS4KKyAgICAgICAgVGhlIGhvbWUgcGFnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YgQnVnemlsbGEgaXMKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0JVR1pJTExBX1VSTDsnPiZZT0NUT19CVUdaSUxMQV9VUkw7PC91bGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvbWV0aW1lcyBpdCBpcyBoZWxwZnVsIHRvIHN1Ym1pdCwgaW52ZXN0aWdhdGUsIG9yIHRyYWNrIGEgYnVnIGFnYWluc3QgdGhlIFlvY3RvIFByb2plY3QgaXRzZWxmCisgICAgICAgIHN1Y2ggYXMgd2hlbiBkaXNjb3ZlcmluZyBhbiBpc3N1ZSB3aXRoIHNvbWUgY29tcG9uZW50IG9mIHRoZSBidWlsZCBzeXN0ZW0gdGhhdCBhY3RzIGNvbnRyYXJ5CisgICAgICAgIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9yIHlvdXIgZXhwZWN0YXRpb25zLgorICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIGdlbmVyYWwgcHJvY2VkdXJlIGZvciBzdWJtaXR0aW5nIGEgbmV3IGJ1ZyB1c2luZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBCdWd6aWxsYS4KKyAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gZGVmZWN0IG1hbmFnZW1lbnQsIGJ1ZyB0cmFja2luZywgYW5kIGZlYXR1cmUgcmVxdWVzdAorICAgICAgICBwcm9jZXNzZXMgYWxsIGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhIG9uIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVnemlsbGFfQ29uZmlndXJhdGlvbl9hbmRfQnVnX1RyYWNraW5nJz53aWtpIHBhZ2U8L3VsaW5rPi4KKyAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsd2F5cyB1c2UgdGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50YXRpb24gb2YgQnVnemlsbGEgdG8gc3VibWl0CisgICAgICAgICAgICAgICAgYSBidWcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBzdWJtaXR0aW5nIGEgbmV3IGJ1ZywgYmUgc3VyZSB0byBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgQ2xhc3NpZmljYXRpb24sIFByb2R1Y3QsIGFuZCBDb21wb25lbnQgZm9yIHdoaWNoIHRoZSBpc3N1ZSB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgRGVmZWN0cyBmb3IgdGhlIFlvY3RvIFByb2plY3QgZmFsbCBpbnRvIG9uZSBvZiBzZXZlbiBjbGFzc2lmaWNhdGlvbnM6CisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBDb21wb25lbnRzLCBJbmZyYXN0cnVjdHVyZSwgQnVpbGQgU3lzdGVtICZhbXA7IE1ldGFkYXRhLAorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24sIFFBL1Rlc3RpbmcsIFJ1bnRpbWUgYW5kIEhhcmR3YXJlLgorICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlc2UgQ2xhc3NpZmljYXRpb25zIGJyZWFrIGRvd24gaW50byBtdWx0aXBsZSBQcm9kdWN0cyBhbmQsIGluIHNvbWUKKyAgICAgICAgICAgICAgICBjYXNlcywgbXVsdGlwbGUgQ29tcG9uZW50cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGJ1ZyBmb3JtIHRvIGNob29zZSB0aGUgY29ycmVjdCBIYXJkd2FyZSBhbmQgQXJjaGl0ZWN0dXJlCisgICAgICAgICAgICAgICAgZm9yIHdoaWNoIHRoZSBidWcgYXBwbGllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbmRpY2F0ZSB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIHlvdSB3ZXJlIHVzaW5nIHdoZW4gdGhlIGlzc3VlCisgICAgICAgICAgICAgICAgb2NjdXJyZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmUgc3VyZSB0byBpbmRpY2F0ZSB0aGUgU2V2ZXJpdHkgb2YgdGhlIGJ1Zy4KKyAgICAgICAgICAgICAgICBTZXZlcml0eSBjb21tdW5pY2F0ZXMgaG93IHRoZSBidWcgaW1wYWN0ZWQgeW91ciB3b3JrLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgIkRvY3VtZW50YXRpb24gY2hhbmdlIiBpdGVtCisgICAgICAgICAgICAgICAgZm9yIHRoZSBidWcuCisgICAgICAgICAgICAgICAgRml4aW5nIGEgYnVnIG1heSBvciBtYXkgbm90IGFmZmVjdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGlzc3VlLgorICAgICAgICAgICAgICAgIFRyeSB0byBsaW1pdCB5b3VyIHN1bW1hcnkgdG8ganVzdCBhIGxpbmUgb3IgdHdvIGFuZCBiZSBzdXJlIHRvIGNhcHR1cmUgdGhlCisgICAgICAgICAgICAgICAgZXNzZW5jZSBvZiB0aGUgaXNzdWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBpc3N1ZS4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBhYm91dCB0aGUgY29udGV4dCwgYmVoYXZpb3IsIG91dHB1dCwKKyAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGggdGhhdCBzdXJyb3VuZHMgdGhlIGlzc3VlLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXZlbiBhdHRhY2ggc3VwcG9ydGluZyBmaWxlcyBmb3Igb3V0cHV0IGZyb20gbG9ncyBieQorICAgICAgICAgICAgICAgIHVzaW5nIHRoZSAiQWRkIGFuIGF0dGFjaG1lbnQiIGJ1dHRvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CZSBzdXJlIHRvIGNvcHkgdGhlIGFwcHJvcHJpYXRlIHBlb3BsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAiQ0MgTGlzdCIgZm9yIHRoZSBidWcuCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgZmluZGluZyBvdXQgd2hvIGlzIHJlc3BvbnNpYmxlCisgICAgICAgICAgICAgICAgZm9yIGNvZGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VibWl0IHRoZSBidWcgYnkgY2xpY2tpbmcgdGhlICJTdWJtaXQgQnVnIiBidXR0b24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+CisgICAgPHRpdGxlPkhvdyB0byBTdWJtaXQgYSBDaGFuZ2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFlvY3RvIFByb2plY3QgYW5kIE9wZW5FbWJlZGRlZCBhcmUgdmVyeSB3ZWxjb21lLgorICAgICAgICBCZWNhdXNlIHRoZSBzeXN0ZW0gaXMgZXh0cmVtZWx5IGNvbmZpZ3VyYWJsZSBhbmQgZmxleGlibGUsIHdlIHJlY29nbml6ZSB0aGF0IGRldmVsb3BlcnMKKyAgICAgICAgd2lsbCB3YW50IHRvIGV4dGVuZCwgY29uZmlndXJlIG9yIG9wdGltaXplIGl0IGZvciB0aGVpciBzcGVjaWZpYyB1c2VzLgorICAgICAgICBZb3Ugc2hvdWxkIHNlbmQgcGF0Y2hlcyB0byB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0IHNvIHRoYXQgdGhleQorICAgICAgICBjYW4gYmUgcmV2aWV3ZWQgYW5kIG1lcmdlZCBieSB0aGUgYXBwcm9wcmlhdGUgbWFpbnRhaW5lci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIHN1Ym1pdHRpbmcgYW55IGNoYW5nZSwgYmUgc3VyZSB0byBmaW5kIG91dCB3aG8geW91IHNob3VsZCBiZQorICAgICAgICBub3RpZnlpbmcuCisgICAgICAgIFNldmVyYWwgbWV0aG9kcyBleGlzdCB0aHJvdWdoIHdoaWNoIHlvdSBmaW5kIG91dCB3aG8geW91IHNob3VsZCBiZSBjb3B5aW5nCisgICAgICAgIG9yIG5vdGlmeWluZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFpbnRlbmFuY2UgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEV4YW1pbmUgdGhlIDxmaWxlbmFtZT5tYWludGFpbmVycy5pbmM8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgICAgIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4KKyAgICAgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlPC9maWxlbmFtZT4sIHRvCisgICAgICAgICAgICAgICAgc2VlIHdobyBpcyByZXNwb25zaWJsZSBmb3IgY29kZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIFJFQURNRSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEZvciBCU1AgbWFpbnRhaW5lcnMgb2Ygc3VwcG9ydGVkIEJTUHMsIHlvdSBjYW4gZXhhbWluZQorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgQlNQIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwgc29tZSBsYXllcnMgKHN1Y2ggYXMgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gbGF5ZXIpLAorICAgICAgICAgICAgICAgIGluY2x1ZGUgYSA8ZmlsZW5hbWU+TUFJTlRBSU5FUlM8L2ZpbGVuYW1lPiBmaWxlIHdoaWNoIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgYSBsaXN0IG9mIGFsbCBzdXBwb3J0ZWQgQlNQIG1haW50YWluZXJzIGZvciB0aGF0IGxheWVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWFyY2ggYnkgRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVzaW5nIDxsaW5rIGxpbmtlbmQ9J2dpdCc+R2l0PC9saW5rPiwgeW91IGNhbiBlbnRlciB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZCB0byBicmluZyB1cCBhIHNob3J0IGxpc3Qgb2YgYWxsIGNvbW1pdHMKKyAgICAgICAgICAgICAgICBhZ2FpbnN0IGEgc3BlY2lmaWMgZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdpdCBzaG9ydGxvZyAtLSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBKdXN0IHByb3ZpZGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgZm9yIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgaXMgbm90IG9yZGVyZWQgYnkgaGlzdG9yeSBidXQgZG9lcworICAgICAgICAgICAgICAgIGluY2x1ZGUgYSBsaXN0IG9mIGFsbCBjb21taXR0ZXJzIGdyb3VwZWQgYnkgbmFtZS4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBsaXN0LCB5b3UgY2FuIHNlZSB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBidWxrIG9mCisgICAgICAgICAgICAgICAgdGhlIGNoYW5nZXMgYWdhaW5zdCB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIFlvY3RvIFByb2plY3QgYW5kIHJlbGF0ZWQgbWFpbGluZyBsaXN0cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5NYWlsaW5nIGxpc3RzPC91bGluaz4iIHNlY3Rpb24gaW4KKyAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBpcyBzb21lIGd1aWRhbmNlIG9uIHdoaWNoIG1haWxpbmcgbGlzdCB0byB1c2UgZm9yIHdoYXQgdHlwZSBvZiBjaGFuZ2U6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIGNoYW5nZXMgdG8gdGhlIGNvcmUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdtZXRhZGF0YSc+TWV0YWRhdGE8L2xpbms+LCBzZW5kIHlvdXIgcGF0Y2ggdG8gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vb3BlbmVtYmVkZGVkLWNvcmUnPm9wZW5lbWJlZGRlZC1jb3JlPC91bGluaz4gbWFpbGluZyBsaXN0LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhIGNoYW5nZSB0byBhbnl0aGluZyB1bmRlciB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2VudCB0byB0aGlzIG1haWxpbmcgbGlzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgY2hhbmdlcyB0byBCaXRCYWtlIChhbnl0aGluZyB1bmRlciB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSksIHNlbmQgeW91ciBwYXRjaCB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9iaXRiYWtlLWRldmVsJz5iaXRiYWtlLWRldmVsPC91bGluaz4gbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBjaGFuZ2VzIHRvIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4sIHNlbmQgeW91ciBwYXRjaCB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTElTVFNfVVJMOy9saXN0aW5mby9wb2t5Jz5wb2t5PC91bGluaz4gbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBjaGFuZ2VzIHRvIG90aGVyIGxheWVycyBob3N0ZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eW9jdG9wcm9qZWN0Lm9yZzwvZmlsZW5hbWU+ICh1bmxlc3MgdGhlCisgICAgICAgICAgICAgICAgbGF5ZXIncyBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyBvdGhlcndpc2UpLCB0b29scywgYW5kIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8nPnlvY3RvPC91bGluaz4gbWFpbGluZyBsaXN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciBhZGRpdGlvbmFsIHJlY2lwZXMgdGhhdCBkbyBub3QgZml0IGludG8gdGhlIGNvcmUgTWV0YWRhdGEsCisgICAgICAgICAgICAgICAgeW91IHNob3VsZCBkZXRlcm1pbmUgd2hpY2ggbGF5ZXIgdGhlIHJlY2lwZSBzaG91bGQgZ28gaW50byBhbmQgc3VibWl0IHRoZQorICAgICAgICAgICAgICAgIGNoYW5nZSBpbiB0aGUgbWFubmVyIHJlY29tbWVuZGVkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIChlLmcuIFJFQURNRSkgc3VwcGxpZWQKKyAgICAgICAgICAgICAgICB3aXRoIHRoZSBsYXllci4gSWYgaW4gZG91YnQsIHBsZWFzZSBhc2sgb24gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8veW9jdG8nPnlvY3RvPC91bGluaz4gb3IKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9vcGVuZW1iZWRkZWQtZGV2ZWwnPm9wZW5lbWJlZGRlZC1kZXZlbDwvdWxpbms+CisgICAgICAgICAgICAgICAgbWFpbGluZyBsaXN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoZW4geW91IHNlbmQgYSBwYXRjaCwgYmUgc3VyZSB0byBpbmNsdWRlIGEgIlNpZ25lZC1vZmYtYnk6IgorICAgICAgICBsaW5lIGluIHRoZSBzYW1lIHN0eWxlIGFzIHJlcXVpcmVkIGJ5IHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgIEFkZGluZyB0aGlzIGxpbmUgc2lnbmlmaWVzIHRoYXQgeW91LCB0aGUgc3VibWl0dGVyLCBoYXZlIGFncmVlZCB0byB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luIDEuMQorICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKKworICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworICAgICAoYSkgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICAgICAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgICAgICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworICAgICAoYikgVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgICAgICAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgICAgICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgICAgICAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgICAgICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICAgICAgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgICAgICAgIGluIHRoZSBmaWxlOyBvcgorCisgICAgIChjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgICAgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgICAgICAgIGl0LgorCisgICAgIChkKSBJIHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgdGhpcyBwcm9qZWN0IGFuZCB0aGUgY29udHJpYnV0aW9uCisgICAgICAgICBhcmUgcHVibGljIGFuZCB0aGF0IGEgcmVjb3JkIG9mIHRoZSBjb250cmlidXRpb24gKGluY2x1ZGluZyBhbGwKKyAgICAgICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uIEkgc3VibWl0IHdpdGggaXQsIGluY2x1ZGluZyBteSBzaWduLW9mZikgaXMKKyAgICAgICAgIG1haW50YWluZWQgaW5kZWZpbml0ZWx5IGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgIHRoaXMgcHJvamVjdCBvciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZShzKSBpbnZvbHZlZC4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBhIGNvbGxhYm9yYXRpdmUgZW52aXJvbm1lbnQsIGl0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIHNvbWUgc29ydCBvZiBzdGFuZGFyZAorICAgICAgICBvciBtZXRob2QgdGhyb3VnaCB3aGljaCB5b3Ugc3VibWl0IGNoYW5nZXMuCisgICAgICAgIE90aGVyd2lzZSwgdGhpbmdzIGNvdWxkIGdldCBxdWl0ZSBjaGFvdGljLgorICAgICAgICBPbmUgZ2VuZXJhbCBwcmFjdGljZSB0byBmb2xsb3cgaXMgdG8gbWFrZSBzbWFsbCwgY29udHJvbGxlZCBjaGFuZ2VzLgorICAgICAgICBLZWVwaW5nIGNoYW5nZXMgc21hbGwgYW5kIGlzb2xhdGVkIGFpZHMgcmV2aWV3LCBtYWtlcyBtZXJnaW5nL3JlYmFzaW5nIGVhc2llcgorICAgICAgICBhbmQga2VlcHMgdGhlIGNoYW5nZSBoaXN0b3J5IGNsZWFuIHdoZW4gYW55b25lIG5lZWRzIHRvIHJlZmVyIHRvIGl0IGluIGZ1dHVyZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB5b3UgbWFrZSBhIGNvbW1pdCwgeW91IG11c3QgZm9sbG93IGNlcnRhaW4gc3RhbmRhcmRzIGVzdGFibGlzaGVkIGJ5IHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYW5kIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgdGVhbXMuCisgICAgICAgIEZvciBlYWNoIGNvbW1pdCwgeW91IG11c3QgcHJvdmlkZSBhIHNpbmdsZS1saW5lIHN1bW1hcnkgb2YgdGhlIGNoYW5nZSBhbmQgeW91CisgICAgICAgIHNob3VsZCBhbG1vc3QgYWx3YXlzIHByb3ZpZGUgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHdoYXQgeW91IGRpZCAoaS5lLgorICAgICAgICB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UpLgorICAgICAgICBUaGUgb25seSBleGNlcHRpb25zIGZvciBub3QgcHJvdmlkaW5nIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gd291bGQgYmUgaWYgeW91cgorICAgICAgICBjaGFuZ2UgaXMgYSBzaW1wbGUsIHNlbGYtZXhwbGFuYXRvcnkgY2hhbmdlIHRoYXQgbmVlZHMgbm8gZnVydGhlciBkZXNjcmlwdGlvbgorICAgICAgICBiZXlvbmQgdGhlIHN1bW1hcnkuCisgICAgICAgIEhlcmUgYXJlIHRoZSBndWlkZWxpbmVzIGZvciBjb21wb3NpbmcgYSBjb21taXQgbWVzc2FnZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm92aWRlIGEgc2luZ2xlLWxpbmUsIHNob3J0IHN1bW1hcnkgb2YgdGhlIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBUaGlzIHN1bW1hcnkgaXMgdHlwaWNhbGx5IHZpZXdhYmxlIGluIHRoZSAic2hvcnRsaXN0IiBvZiBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRodXMsIHByb3ZpZGluZyBzb21ldGhpbmcgc2hvcnQgYW5kIGRlc2NyaXB0aXZlIHRoYXQgZ2l2ZXMgdGhlIHJlYWRlcgorICAgICAgICAgICAgICAgIGEgc3VtbWFyeSBvZiB0aGUgY2hhbmdlIGlzIHVzZWZ1bCB3aGVuIHZpZXdpbmcgYSBsaXN0IG9mIG1hbnkgY29tbWl0cy4KKyAgICAgICAgICAgICAgICBUaGlzIHNob3J0IGRlc2NyaXB0aW9uIHNob3VsZCBiZSBwcmVmaXhlZCBieSB0aGUgcmVjaXBlIG5hbWUgKGlmIGNoYW5naW5nIGEgcmVjaXBlKSwgb3IKKyAgICAgICAgICAgICAgICBlbHNlIHRoZSBzaG9ydCBmb3JtIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3IgdGhlIGJvZHkgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLCBwcm92aWRlIGRldGFpbGVkIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgdGhhdCBkZXNjcmliZXMgd2hhdCB5b3UgY2hhbmdlZCwgd2h5IHlvdSBtYWRlIHRoZSBjaGFuZ2UsIGFuZCB0aGUgYXBwcm9hY2gKKyAgICAgICAgICAgICAgICB5b3UgdXNlZC4gSXQgbWF5IGFsc28gYmUgaGVscGZ1bCBpZiB5b3UgbWVudGlvbiBob3cgeW91IHRlc3RlZCB0aGUgY2hhbmdlLgorICAgICAgICAgICAgICAgIFByb3ZpZGUgYXMgbXVjaCBkZXRhaWwgYXMgeW91IGNhbiBpbiB0aGUgYm9keSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIGNoYW5nZSBhZGRyZXNzZXMgYSBzcGVjaWZpYyBidWcgb3IgaXNzdWUgdGhhdCBpcworICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIGJ1Zy10cmFja2luZyBJRCwgaW5jbHVkZSBhIHJlZmVyZW5jZSB0byB0aGF0CisgICAgICAgICAgICAgICAgSUQgaW4geW91ciBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIFlvY3RvIFByb2plY3QgdXNlcyBhIHNwZWNpZmljIGNvbnZlbnRpb24gZm9yCisgICAgICAgICAgICAgICAgYnVnIHJlZmVyZW5jZXMgLSBhbnkgY29tbWl0IHRoYXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgYnVnIHNob3VsZAorICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZpeGVzIFtZT0NUTyAjPHJlcGxhY2VhYmxlPmJ1Zy1pZDwvcmVwbGFjZWFibGU+XQorCisgICAgIDxyZXBsYWNlYWJsZT5kZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBjaGFuZ2U8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICBXaGVyZSA8cmVwbGFjZWFibGU+YnVnLWlkPC9yZXBsYWNlYWJsZT4gaXMgcmVwbGFjZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBidWcgSUQgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCBCdWd6aWxsYSBpbnN0YW5jZS4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGd1aWRhbmNlIG9uIGNyZWF0aW5nIHdlbGwtZm9ybWVkIGNvbW1pdCBtZXNzYWdlcyBhdCB0aGlzIE9wZW5FbWJlZGRlZAorICAgICAgICB3aWtpIHBhZ2U6CisgICAgICAgIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsvd2lraS9Db21taXRfUGF0Y2hfTWVzc2FnZV9HdWlkZWxpbmVzJz48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIG5leHQgdHdvIHNlY3Rpb25zIGRlc2NyaWJlIGdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGZvciBib3RoIHB1c2hpbmcKKyAgICAgICAgY2hhbmdlcyB1cHN0cmVhbSBhbmQgZm9yIHN1Ym1pdHRpbmcgY2hhbmdlcyBhcyBwYXRjaGVzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdwdXNoaW5nLWEtY2hhbmdlLXVwc3RyZWFtJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZSBVcHN0cmVhbSBhbmQgUmVxdWVzdCBhIFB1bGw8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJhc2ljIGZsb3cgZm9yIHB1c2hpbmcgYSBjaGFuZ2UgdG8gYW4gdXBzdHJlYW0gImNvbnRyaWIiIEdpdCByZXBvc2l0b3J5IGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHlvdXIgY2hhbmdlcyBpbiB5b3VyIGxvY2FsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdGFnZSB5b3VyIGNoYW5nZXMgYnkgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgYWRkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBvbiBlYWNoIGZpbGUgeW91IGNoYW5nZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb21taXQgdGhlIGNoYW5nZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjb21taXQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHByb3ZpZGUgYSBjb21taXQgbWVzc2FnZSB0aGF0IGZvbGxvd3MgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2plY3TigJlzIGNvbW1pdCBtZXNzYWdlIHN0YW5kYXJkcyBhcyBkZXNjcmliZWQgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBQdXNoIHRoZSBjaGFuZ2UgdG8gdGhlIHVwc3RyZWFtICJjb250cmliIiByZXBvc2l0b3J5IGJ5CisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IHB1c2g8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Tm90aWZ5IHRoZSBtYWludGFpbmVyIHRoYXQgeW91IGhhdmUgcHVzaGVkIGEgY2hhbmdlIGJ5IG1ha2luZyBhIHB1bGwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdHdvIHNjcmlwdHMgdGhhdCBjb252ZW5pZW50bHkgbGV0IHlvdSBnZW5lcmF0ZSBhbmQgc2VuZAorICAgICAgICAgICAgICAgICAgICBwdWxsIHJlcXVlc3RzIHRvIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBzY3JpcHRzIGFyZSA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZXNlIHNjcmlwdHMgaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgPGxpbmsgbGlua2VuZD0nc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvbGluaz4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Vc2luZyB0aGVzZSBzY3JpcHRzIGNvcnJlY3RseSBmb3JtYXRzIHRoZSByZXF1ZXN0cyB3aXRob3V0IGludHJvZHVjaW5nIGFueQorICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlIG9yIEhUTUwgZm9ybWF0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1haW50YWluZXIgdGhhdCByZWNlaXZlcyB5b3VyIHBhdGNoZXMgbmVlZHMgdG8gYmUgYWJsZSB0byBzYXZlIGFuZCBhcHBseSB0aGVtCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGZyb20geW91ciBlbWFpbHMuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZXNlIHNjcmlwdHMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIHNlbmRpbmcgcGF0Y2hlcy48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBoZWxwIG9uIHVzaW5nIHRoZXNlIHNjcmlwdHMsIHNpbXBseSBwcm92aWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWg8L2ZpbGVuYW1lPiBhcmd1bWVudCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcG9reS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QgLWgKKyAgICAgJCBwb2t5L3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QgLWgKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBnZW5lcmFsIEdpdCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcHVzaCBhIGNoYW5nZSB1cHN0cmVhbSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9ib29rL2VuL3YyL0Rpc3RyaWJ1dGVkLUdpdC1EaXN0cmlidXRlZC1Xb3JrZmxvd3MnPkdpdCBDb21tdW5pdHkgQm9vazwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N1Ym1pdHRpbmctYS1wYXRjaCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyBFbWFpbCB0byBTdWJtaXQgYSBQYXRjaDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHN1Ym1pdCBwYXRjaGVzIHdpdGhvdXQgdXNpbmcgdGhlIDxmaWxlbmFtZT5jcmVhdGUtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+c2VuZC1wdWxsLXJlcXVlc3Q8L2ZpbGVuYW1lPiBzY3JpcHRzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIGtlZXAgaW4gbWluZCwgdGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gdXNlIHRoZSBzY3JpcHRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGNvbXBvbmVudHMgY2hhbmdlZCwgeW91IG5lZWQgdG8gc3VibWl0IHRoZSBlbWFpbCB0byBhIHNwZWNpZmljCisgICAgICAgICAgICBtYWlsaW5nIGxpc3QuCisgICAgICAgICAgICBGb3Igc29tZSBndWlkYW5jZSBvbiB3aGljaCBtYWlsaW5nIGxpc3QgdG8gdXNlLCBzZWUgdGhlIGxpc3QgaW4gdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhIENoYW5nZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZSBtYWlsaW5nIGxpc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVzb3VyY2VzLW1haWxpbmdsaXN0Jz5NYWlsaW5nIExpc3RzPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgcHJvY2VkdXJlIG9uIGhvdyB0byBzdWJtaXQgYSBwYXRjaCB0aHJvdWdoIGVtYWlsIHdpdGhvdXQgdXNpbmcgdGhlCisgICAgICAgICAgICBzY3JpcHRzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWFrZSB5b3VyIGNoYW5nZXMgaW4geW91ciBsb2NhbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3RhZ2UgeW91ciBjaGFuZ2VzIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IGFkZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb24gZWFjaCBmaWxlIHlvdSBjaGFuZ2VkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db21taXQgdGhlIGNoYW5nZSBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBjb21taXQgLS1zaWdub2ZmPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIDxmaWxlbmFtZT4tLXNpZ25vZmY8L2ZpbGVuYW1lPiBvcHRpb24gaWRlbnRpZmllcyB5b3UgYXMgdGhlIHBlcnNvbgorICAgICAgICAgICAgICAgICAgICBtYWtpbmcgdGhlIGNoYW5nZSBhbmQgYWxzbyBzYXRpc2ZpZXMgdGhlIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mCisgICAgICAgICAgICAgICAgICAgIE9yaWdpbiAoRENPKSBzaG93biBlYXJsaWVyLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiB5b3UgZm9ybSBhIGNvbW1pdCwgeW91IG11c3QgZm9sbG93IGNlcnRhaW4gc3RhbmRhcmRzIGVzdGFibGlzaGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IHRlYW0uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgZWFybGllciBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgZm9yIFlvY3RvIFByb2plY3QgY29tbWl0IG1lc3NhZ2Ugc3RhbmRhcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3JtYXQgdGhlIGNvbW1pdCBpbnRvIGFuIGVtYWlsIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIFRvIGZvcm1hdCBjb21taXRzLCB1c2UgdGhlIDxmaWxlbmFtZT5naXQgZm9ybWF0LXBhdGNoPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcHJvdmlkZSB0aGUgY29tbWFuZCwgeW91IG11c3QgaW5jbHVkZSBhIHJldmlzaW9uIGxpc3Qgb3IgYSBudW1iZXIgb2YgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZWl0aGVyIG9mIHRoZXNlIHR3byBjb21tYW5kcyB0YWtlcyB5b3VyIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgcmVjZW50IHNpbmdsZSBjb21taXQgYW5kIGZvcm1hdHMgaXQgYXMgYW4gZW1haWwgbWVzc2FnZSBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC0xCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggSEVBRH4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWZ0ZXIgdGhlIGNvbW1hbmQgaXMgcnVuLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFpbnMgYQorICAgICAgICAgICAgICAgICAgICBudW1iZXJlZCA8ZmlsZW5hbWU+LnBhdGNoPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIGNvbW1pdC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBwcm92aWRlIHNldmVyYWwgY29tbWl0cyBhcyBwYXJ0IG9mIHRoZSBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIHByb2R1Y2VzIGEKKyAgICAgICAgICAgICAgICAgICAgc2VyaWVzIG9mIG51bWJlcmVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSDigJMgb25lIGZvciBlYWNoIGNvbW1pdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBwYXRjaCwgeW91IHNob3VsZCBhbHNvIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi0tY292ZXI8L2ZpbGVuYW1lPiBvcHRpb24gd2l0aCB0aGUgY29tbWFuZCwgd2hpY2ggZ2VuZXJhdGVzIGEKKyAgICAgICAgICAgICAgICAgICAgY292ZXIgbGV0dGVyIGFzIHRoZSBmaXJzdCAicGF0Y2giIGluIHRoZSBzZXJpZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhlbiBlZGl0IHRoZSBjb3ZlciBsZXR0ZXIgdG8gcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgc2VyaWVzIG9mIHBhdGNoZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgPGZpbGVuYW1lPmdpdCBmb3JtYXQtcGF0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPkdJVF9GT1JNQVRfUEFUQ0goMSk8L2ZpbGVuYW1lPiBkaXNwbGF5ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW4gZ2l0LWZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgYXJlIG9yIHdpbGwgYmUgYSBmcmVxdWVudCBjb250cmlidXRvciB0byB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBvciB0byBPcGVuRW1iZWRkZWQsIHlvdSBtaWdodCBjb25zaWRlciByZXF1ZXN0aW5nIGEgY29udHJpYiBhcmVhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGFzc29jaWF0ZWQgcmlnaHRzLjwvbm90ZT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbXBvcnQgdGhlIGZpbGVzIGludG8geW91ciBtYWlsIGNsaWVudCBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBzZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+SW4gb3JkZXIgdG8gdXNlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+LCB5b3UgbXVzdCBoYXZlIHRoZQorICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVyIEdpdCBwYWNrYWdlcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIEZvciBVYnVudHUsIERlYmlhbiwgYW5kIEZlZG9yYSB0aGUgcGFja2FnZSBpcyA8ZmlsZW5hbWU+Z2l0LWVtYWlsPC9maWxlbmFtZT4uPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGNvbW1hbmQgc2VuZHMgZW1haWwgYnkgdXNpbmcgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICBvciByZW1vdGUgTWFpbCBUcmFuc3BvcnQgQWdlbnQgKE1UQSkgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXNtdHA8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnNlbmRtYWlsPC9maWxlbmFtZT4sIG9yIHRocm91Z2ggYSBkaXJlY3QKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNtdHA8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGluIHlvdXIgR2l0IDxmaWxlbmFtZT5jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHN1Ym1pdHRpbmcgcGF0Y2hlcyB0aHJvdWdoIGVtYWlsIG9ubHksIGl0IGlzIHZlcnkgaW1wb3J0YW50CisgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IHN1Ym1pdCB0aGVtIHdpdGhvdXQgYW55IHdoaXRlc3BhY2Ugb3IgSFRNTCBmb3JtYXR0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHlvdSBvciB5b3VyIG1haWxlciBpbnRyb2R1Y2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbWFpbnRhaW5lciB0aGF0IHJlY2VpdmVzIHlvdXIgcGF0Y2hlcyBuZWVkcyB0byBiZSBhYmxlIHRvIHNhdmUgYW5kCisgICAgICAgICAgICAgICAgICAgIGFwcGx5IHRoZW0gZGlyZWN0bHkgZnJvbSB5b3VyIGVtYWlscy4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIHdheSB0byB2ZXJpZnkgdGhhdCB3aGF0IHlvdSBhcmUgc2VuZGluZyB3aWxsIGJlIGFwcGxpY2FibGUgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgaXMgdG8gZG8gYSBkcnkgcnVuIGFuZCBzZW5kIHRoZW0gdG8geW91cnNlbGYgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgc2F2ZSBhbmQgYXBwbHkgdGhlbSBhcyB0aGUgbWFpbnRhaW5lciB3b3VsZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIGZvciBzZW5kaW5nIHlvdXIgcGF0Y2hlcyBzaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIGNvbXByb21pc2luZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB5b3UgdXNlIHlvdXIgb3duIG1haWwgY2xpZW50LgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBhbHNvIGhhcyBzZXZlcmFsIG9wdGlvbnMgdGhhdCBsZXQgeW91CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgcmVjaXBpZW50cyBhbmQgcGVyZm9ybSBmdXJ0aGVyIGVkaXRpbmcgb2YgdGhlIGVtYWlsIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IHNlbmQtZW1haWw8L2ZpbGVuYW1lPiBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICBzZWUgPGZpbGVuYW1lPkdJVC1TRU5ELUVNQUlMKDEpPC9maWxlbmFtZT4gZGlzcGxheWVkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWFuIGdpdC1zZW5kLWVtYWlsPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtcWVtdS54bWwgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M5MTVmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtcWVtdS54bWwKQEAgLTAsMCArMSw0MjIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLXFlbXUnPgorCis8dGl0bGU+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdGl0bGU+CisKKzxwYXJhPgorICAgIFF1aWNrIEVNVWxhdG9yIChRRU1VKSBpcyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IHRoZSBZb2N0byBQcm9qZWN0IHVzZXMKKyAgICBhcyBwYXJ0IG9mIGl0cyBkZXZlbG9wbWVudCAidG9vbCBzZXQiLgorICAgIEFzIHN1Y2gsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGNoYXB0ZXIgaXMgbGltaXRlZCB0byB0aGUKKyAgICBZb2N0byBQcm9qZWN0IGludGVncmF0aW9uIG9mIFFFTVUgYW5kIG5vdCBRRU1VIGluIGdlbmVyYWwuCisgICAgRm9yIG9mZmljaWFsIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudGF0aW9uIG9uIFFFTVUsIHNlZSB0aGUKKyAgICBmb2xsb3dpbmcgcmVmZXJlbmNlczoKKyAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjx1bGluayB1cmw9J2h0dHA6Ly93aWtpLnFlbXUub3JnL01haW5fUGFnZSc+UUVNVSBXZWJzaXRlPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgIFRoZSBvZmZpY2lhbCB3ZWJzaXRlIGZvciB0aGUgUUVNVSBPcGVuIFNvdXJjZSBwcm9qZWN0LgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PHVsaW5rIHVybD0naHR0cDovL3dpa2kucWVtdS5vcmcvTWFudWFsJz5Eb2N1bWVudGF0aW9uPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgIFRoZSBRRU1VIHVzZXIgbWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgWW9jdG8gUHJvamVjdCdzIGludGVncmF0aW9uIG9mCisgICAgUUVNVSwgYSBkZXNjcmlwdGlvbiBvZiBob3cgeW91IHVzZSBRRU1VIGFuZCBpdHMgdmFyaW91cyBvcHRpb25zLCBydW5uaW5nCisgICAgdW5kZXIgYSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIHNlcnZlciwgYW5kIGEgZmV3IHRpcHMgYW5kIHRyaWNrcyB5b3UKKyAgICBtaWdodCBmaW5kIGhlbHBmdWwgd2hlbiB1c2luZyBRRU1VLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ncWVtdS1vdmVydmlldyc+CisgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QsIFFFTVUgaXMgYW4KKyAgICAgICAgZW11bGF0b3IgYW5kIHZpcnR1YWxpemF0aW9uIG1hY2hpbmUgdGhhdCBhbGxvd3MgeW91IHRvIHJ1biBhIGNvbXBsZXRlCisgICAgICAgIGltYWdlIHlvdSBoYXZlIGJ1aWx0IHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0IGFzIGp1c3QgYW5vdGhlciB0YXNrCisgICAgICAgIG9uIHlvdXIgYnVpbGQgc3lzdGVtLgorICAgICAgICBRRU1VIGlzIHVzZWZ1bCBmb3IgcnVubmluZyBhbmQgdGVzdGluZyBpbWFnZXMgYW5kIGFwcGxpY2F0aW9ucyBvbgorICAgICAgICBzdXBwb3J0ZWQgWW9jdG8gUHJvamVjdCBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgaGF2aW5nIGFjdHVhbCBoYXJkd2FyZS4KKyAgICAgICAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIFFFTVUgdG8gcnVuIGF1dG9tYXRlZAorICAgICAgICBRdWFsaXR5IEFzc3VyYW5jZSAoUUEpIHRlc3RzIG9uIGZpbmFsIGltYWdlcyBzaGlwcGVkIHdpdGggZWFjaAorICAgICAgICByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBRRU1VIGlzIG1hZGUgYXZhaWxhYmxlIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYSBudW1iZXIgb2Ygd2F5cy4KKyAgICAgICAgVGhlIGVhc2llc3QgYW5kIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgZ2V0dGluZyBRRU1VIGlzIHRvIHJ1biB0aGUKKyAgICAgICAgQURUIGluc3RhbGxlci4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBtYWtlIHN1cmUgeW91IGhhdmUKKyAgICAgICAgUUVNVSBhdmFpbGFibGUsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3RoZS1xZW11LWVtdWxhdG9yJz5UaGUgUUVNVSBFbXVsYXRvcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FlbXUtcnVubmluZy1xZW11Jz4KKyAgICA8dGl0bGU+UnVubmluZyBRRU1VPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBSdW5uaW5nIFFFTVUgaW52b2x2ZXMgaGF2aW5nIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc2V0IHVwLCBoYXZpbmcgdGhlCisgICAgICAgIHJpZ2h0IGFydGlmYWN0cyBhdmFpbGFibGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0byB1c2UgdGhlIG1hbnkKKyAgICAgICAgb3B0aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8geW91IHdoZW4geW91IHN0YXJ0IFFFTVUgdXNpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncWVtdS1zZXR0aW5nLXVwLXRoZS1lbnZpcm9ubWVudCc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBFbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgcnVuIFFFTVUgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQgZnJvbSB3aGljaCB5b3UgcnVuIEJpdEJha2UuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHlvdSBuZWVkIHRvIHNvdXJjZSBhIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtdXNpbmctdGhlLXJ1bnFlbXUtY29tbWFuZCc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB0aGUgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBDb21tYW5kPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBiYXNpYyA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGNvbW1hbmQgc3ludGF4IGlzIGFzCisgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgWzxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPiBdICBbLi4uXQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQmFzZWQgb24gd2hhdCB5b3UgcHJvdmlkZSBvbiB0aGUgY29tbWFuZCBsaW5lLAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBkb2VzIGEgZ29vZCBqb2Igb2YgZmlndXJpbmcgb3V0IHdoYXQKKyAgICAgICAgICAgIHlvdSBhcmUgdHJ5aW5nIHRvIGRvLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQsIFFFTVUgbG9va3MgZm9yIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0CisgICAgICAgICAgICBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCB3aGVuIGl0IG5lZWRzIHRvIGxvb2sgZm9yIGFuCisgICAgICAgICAgICBpbWFnZS4KKyAgICAgICAgICAgIE1pbmltYWxseSwgdGhyb3VnaCB0aGUgdXNlIG9mIG9wdGlvbnMsIHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyCisgICAgICAgICAgICBhIG1hY2hpbmUgbmFtZSwgYSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki52bWRrPC9maWxlbmFtZT4pLCBvciBhIGtlcm5lbCBpbWFnZQorICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmJpbjwvZmlsZW5hbWU+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgb3B0aW9ucyB5b3UgY2FuIHByb3ZpZGUgb24gdGhlIGNvbW1hbmQgbGluZToKKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBwcm92aWRlIHNvbWUgImlsbGVnYWwiIG9wdGlvbiBjb21iaW5hdGlvbiBvciBwZXJoYXBzCisgICAgICAgICAgICAgICAgeW91IGRvIG5vdCBwcm92aWRlIGVub3VnaCBpbiB0aGUgd2F5IG9mIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBwcm92aWRlcyBhcHByb3ByaWF0ZSBlcnJvcgorICAgICAgICAgICAgICAgIG1lc3NhZ2luZyB0byBoZWxwIHlvdSBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHJlcGxhY2VhYmxlPlFFTVVBUkNIPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBRRU1VIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLCB3aGljaCBtdXN0IGJlICJxZW11eDg2IiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODZfNjQiLCAicWVtdWFybSIsICJxZW11bWlwcyIsICJxZW11bWlwc2VsIiwKKyAgICAgICAgICAgICAgICAgICAg4oCccWVtdW1pcHM2NCIsICJxZW11c2g0IiwgInFlbXVwcGMiLCAicWVtdW1pY3JvYmxhemUiLAorICAgICAgICAgICAgICAgICAgICBvciAicWVtdXp5bnEiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5WTTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2UsIHdoaWNoIG11c3QgYmUgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBvcHRpb24gd2hlbiB5b3Ugd2FudCB0byBib290IGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBmaWxlbmFtZSB5b3UgcHJvdmlkZSBtdXN0IGNvbnRhaW4gb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgc3RyaW5nczogInFlbXV4ODYtNjQiLCAicWVtdXg4NiIsICJxZW11YXJtIiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXVtaXBzNjQiLCAicWVtdW1pcHMiLCAicWVtdXBwYyIsIG9yICJxZW11c2g0Ii4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5ST09URlM8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgQSByb290IGZpbGVzeXN0ZW0gdGhhdCBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGUgZXh0ZW5zaW9uczogImV4dDIiLCAiZXh0MyIsICJleHQ0IiwgImpmZnMyIiwKKyAgICAgICAgICAgICAgICAgICAgIm5mcyIsIG9yICJidHJmcyIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlbmFtZSB5b3UgcHJvdmlkZSBmb3IgdGhpcyBvcHRpb24gdXNlcyDigJxuZnPigJ0sIGl0CisgICAgICAgICAgICAgICAgICAgIG11c3QgcHJvdmlkZSBhbiBleHBsaWNpdCByb290IGZpbGVzeXN0ZW0gcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxyZXBsYWNlYWJsZT5LRVJORUw8L3JlcGxhY2VhYmxlPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgaW1hZ2UsIHdoaWNoIGlzIGEgPGZpbGVuYW1lPi5iaW48L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBwcm92aWRlIGEgPGZpbGVuYW1lPi5iaW48L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+IGRldGVjdHMgaXQgYW5kIGFzc3VtZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgYSBrZXJuZWwgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBRRU1VIG1hY2hpbmUsIHdoaWNoIG11c3QgYmUgb25lCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmc6ICJxZW11eDg2IiwKKyAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYtNjQiLCAicWVtdWFybSIsICJxZW11bWlwcyIsICJxZW11bWlwc2VsIiwKKyAgICAgICAgICAgICAgICAgICAg4oCccWVtdW1pcHM2NCIsICJxZW11c2g0IiwgInFlbXVwcGMiLCAicWVtdW1pY3JvYmxhemUiLAorICAgICAgICAgICAgICAgICAgICBvciAicWVtdXp5bnEiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlFFTVVBUkNIPC9yZXBsYWNlYWJsZT4gb3B0aW9ucyBhcmUgYmFzaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgPHJlcGxhY2VhYmxlPk1BQ0hJTkU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICBvcHRpb24sIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gdHJpZXMgdG8gZGV0ZXJtaW5lCisgICAgICAgICAgICAgICAgICAgIGl0IGJhc2VkIG9uIG90aGVyIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHlvdSBhcmUgYm9vdGluZyBhbiBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgIGltYWdlLCB3aGljaCBtZWFucyB0aGUgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcGlvLmd6PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aXNvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB5b3UgYXJlIGJvb3RpbmcgYW4gSVNPIGltYWdlLCB3aGljaCBtZWFucyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uaXNvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+bm9ncmFwaGljPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIERpc2FibGVzIHRoZSB2aWRlbyBjb25zb2xlLCB3aGljaCBzZXRzIHRoZSBjb25zb2xlIHRvCisgICAgICAgICAgICAgICAgICAgICJ0dHlzMCIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c2VyaWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgYSBzZXJpYWwgY29uc29sZSBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi90dHlTMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpb3NkaXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRXN0YWJsaXNoZXMgYSBjdXN0b20gZGlyZWN0b3J5IGZvciBCSU9TLCBWR0EgQklPUyBhbmQKKyAgICAgICAgICAgICAgICAgICAga2V5bWFwcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW9zZmlsZW5hbWU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRXN0YWJsaXNoZXMgYSBjdXN0b20gQklPUyBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnFlbXVwYXJhbXM9XCI8cmVwbGFjZWFibGU+eHl6PC9yZXBsYWNlYWJsZT5cIjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgY3VzdG9tIFFFTVUgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgb3B0aW9uIHRvIHBhc3Mgb3B0aW9ucyBvdGhlciB0aGFuIHRoZSBzaW1wbGUKKyAgICAgICAgICAgICAgICAgICAgImt2bSIgYW5kICJzZXJpYWwiIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Ym9vdHBhcmFtcz1cIjxyZXBsYWNlYWJsZT54eXo8L3JlcGxhY2VhYmxlPlwiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBjdXN0b20gYm9vdCBwYXJhbWV0ZXJzIGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmF1ZGlvPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEVuYWJsZXMgYXVkaW8gaW4gUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gb3B0aW9uIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyICJxZW11eDg2IiBvciAicWVtdXg4Ni02NCIgaW4gb3JkZXIgZm9yIGF1ZGlvIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIDxmaWxlbmFtZT5zbmRfaW50ZWw4eDA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+c25kX2VuczEzNzA8L2ZpbGVuYW1lPiBkcml2ZXIgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gbGludXggZ3Vlc3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+c2xpcnA8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyAic2xpcnAiIG5ldHdvcmtpbmcsIHdoaWNoIGlzIGEgZGlmZmVyZW50IHdheQorICAgICAgICAgICAgICAgICAgICBvZiBuZXR3b3JraW5nIHRoYXQgZG9lcyBub3QgbmVlZCByb290IGFjY2VzcworICAgICAgICAgICAgICAgICAgICBidXQgYWxzbyBpcyBub3QgYXMgZWFzeSB0byB1c2Ugb3IgY29tcHJlaGVuc2l2ZQorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5rdm08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBLVk0gd2hlbiBydW5uaW5nICJxZW11eDg2IiBvciAicWVtdXg4Ni02NCIKKyAgICAgICAgICAgICAgICAgICAgUUVNVSBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgS1ZNIHRvIHdvcmssIGFsbCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91ciA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+IG11c3QgYmUgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInFlbXV4ODYiIG9yICJxZW11eDg2LTY0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdGhlIEtWTSBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLCB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Rldi9rdm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGJ1aWxkIGhvc3QgaGFzIHRvIGhhdmUgdmlydGlvIG5ldCBkZXZpY2UsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4vZGV2L3Zob3N0LW5ldDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAgYnVpbGQgaG9zdCA8ZmlsZW5hbWU+L2Rldi9rdm08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBoYXMgdG8gYmUgYm90aCB3cml0YWJsZSBhbmQgcmVhZGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhvc3QgPGZpbGVuYW1lPi9kZXYvdmhvc3QtbmV0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGFzIHRvIGJlIGVpdGhlciByZWFkYWJsZSBvciB3cml0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCDigJxzbGlycC1lbmFibGVk4oCdLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wdWJsaWN2bmM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBhIFZOQyBzZXJ2ZXIgb3BlbiB0byBhbGwgaG9zdHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBmdXJ0aGVyIHVuZGVyc3RhbmRpbmcgcmVnYXJkaW5nIG9wdGlvbiB1c2Ugd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiwgY29uc2lkZXIgc29tZSBleGFtcGxlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHN0YXJ0cyBRRU1VIHdpdGgKKyAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5NQUNISU5FPC9yZXBsYWNlYWJsZT4gc2V0IHRvICJxZW11eDg2Ii4KKyAgICAgICAgICAgIEFzc3VtaW5nIGEgc3RhbmRhcmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC9saW5rPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gYXV0b21hdGljYWxseSBmaW5kcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iekltYWdlLXFlbXV4ODYuYmluPC9maWxlbmFtZT4gaW1hZ2UgZmlsZSBhbmQKKyAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LTIwMTQwNzA3MDc0NjExLnJvb3Rmcy5leHQzPC9maWxlbmFtZT4KKyAgICAgICAgICAgIChhc3N1bWluZyB0aGUgY3VycmVudCBidWlsZCBjcmVhdGVkIGEKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSkuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBXaGVuIG1vcmUgdGhhbiBvbmUgaW1hZ2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGV4aXN0cywgUUVNVSBmaW5kcworICAgICAgICAgICAgICAgIGFuZCB1c2VzIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGltYWdlIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXAuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgJCBydW5xZW11IHFlbXV4ODYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBwcm9kdWNlcyB0aGUgZXhhY3Qgc2FtZSByZXN1bHRzIGFzIHRoZQorICAgICAgICAgICAgcHJldmlvdXMgZXhhbXBsZS4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCwgaG93ZXZlciwgc3BlY2lmaWNhbGx5IHByb3ZpZGVzIHRoZSBpbWFnZQorICAgICAgICAgICAgYW5kIHJvb3QgZmlsZXN5c3RlbSB0eXBlLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NiBjb3JlLWltYWdlLW1pbmltYWwgZXh0MworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNwZWNpZmllcyB0byBib290IGFuIGluaXRpYWwgUkFNIGRpc2sgaW1hZ2UKKyAgICAgICAgICAgIGFuZCB0byBlbmFibGUgYXVkaW8gaW4gUUVNVS4KKyAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2V0IHRoZQorICAgICAgICAgICAgaW50ZXJuYWwgdmFyaWFibGUgPGZpbGVuYW1lPkZTVFlQRTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAiY3Bpby5neiIuCisgICAgICAgICAgICBBbHNvLCBmb3IgYXVkaW8gdG8gYmUgZW5hYmxlZCwgYW4gYXBwcm9wcmlhdGUgZHJpdmVyIG11c3QKKyAgICAgICAgICAgIGJlIGluc3RhbGxlZCAoc2VlIHRoZSBwcmV2aW91cyBkZXNjcmlwdGlvbiBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YXVkaW88L2ZpbGVuYW1lPiBvcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgcWVtdXg4NiByYW1mcyBhdWRpbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGZvcgorICAgICAgICAgICAgUUVNVSB0byBsYXVuY2guCisgICAgICAgICAgICBXaGlsZSB0aGUgY29tbWFuZCBkb2VzIHByb3ZpZGUgYSByb290IGZpbGVzeXN0ZW0gdHlwZSwgaXQKKyAgICAgICAgICAgIG11c3QgYWxzbyBtaW5pbWFsbHkgcHJvdmlkZSBhCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+LAorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPktFUk5FTDwvcmVwbGFjZWFibGU+LCBvcgorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPlZNPC9yZXBsYWNlYWJsZT4gb3B0aW9uLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgZXh0MworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIHNwZWNpZmllcyB0byBib290IGEgdmlydHVhbCBtYWNoaW5lIGltYWdlCisgICAgICAgICAgICAoPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gZmlsZSkuCisgICAgICAgICAgICBGcm9tIHRoZSA8ZmlsZW5hbWU+LnZtZGs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gZGV0ZXJtaW5lcyB0aGUgUUVNVQorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlICg8cmVwbGFjZWFibGU+TUFDSElORTwvcmVwbGFjZWFibGU+KSB0byBiZQorICAgICAgICAgICAgInFlbXV4ODYiIGFuZCB0aGUgcm9vdCBmaWxlc3lzdGVtIHR5cGUgdG8gYmUgInZtZGsiLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHJ1bnFlbXUgL2hvbWUvc2NvdHQtbGVub3ZvL3ZtL2NvcmUtaW1hZ2UtbWluaW1hbC1xZW11eDg2LnZtZGsKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FlbXUtcnVubmluZy11bmRlci1hLW5ldHdvcmstZmlsZS1zeXN0ZW0tbmZzLXNlcnZlcic+CisgICAgPHRpdGxlPlJ1bm5pbmcgVW5kZXIgYSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIFNlcnZlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT25lIG1ldGhvZCBmb3IgcnVubmluZyBRRU1VIGlzIHRvIHJ1biBpdCBvbiBhbiBORlMgc2VydmVyLgorICAgICAgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSBmaWxlIHN5c3RlbSBmcm9tIGJvdGgKKyAgICAgICAgdGhlIGJ1aWxkIGFuZCB0aGUgZW11bGF0ZWQgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIEl0IGlzIGFsc28gd29ydGggbm90aW5nIHRoYXQgdGhlIHN5c3RlbSBkb2VzIG5vdCBuZWVkIHJvb3QgcHJpdmlsZWdlcworICAgICAgICB0byBydW4uCisgICAgICAgIEl0IHVzZXMgYSB1c2VyIHNwYWNlIE5GUyBzZXJ2ZXIgdG8gYXZvaWQgdGhhdC4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2V0IHVwIGZvciBydW5uaW5nIFFFTVUgdXNpbmcgYW4gTkZTCisgICAgICAgIHNlcnZlciBhbmQgdGhlbiBob3cgeW91IGNhbiBzdGFydCBhbmQgc3RvcCB0aGUgc2VydmVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdxZW11LXNldHRpbmctdXAtdG8tdXNlLW5mcyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRvIFVzZSBORlM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgYXJlIGFibGUgdG8gcnVuIFFFTVUgaW4geW91ciBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVucWVtdS1leHRyYWN0LXNkazwvZmlsZW5hbWU+IHNjcmlwdCwgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGFsb25nIHdpdGgKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0LgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gdGFrZXMgYSByb290CisgICAgICAgICAgICBmaWxlIHN5c3RlbSB0YXJiYWxsIGFuZCBleHRyYWN0cyBpdCBpbnRvIGEgbG9jYXRpb24gdGhhdCB5b3UKKyAgICAgICAgICAgIHNwZWNpZnkuCisgICAgICAgICAgICBUaGVuLCB3aGVuIHlvdSBydW4gPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5CisgICAgICAgICAgICB0aGUgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGZpbGUgc3lzdGVtIHRvIHBhc3MgaXQgdG8gUUVNVS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRha2VzIGEgZmlsZSBzeXN0ZW0gYW5kIGV4dHJhY3RzIGl0IHRvCisgICAgICAgICAgICBhIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+dGVzdC1uZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVucWVtdS1leHRyYWN0LXNkayAuL3RtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYvY29yZS1pbWFnZS1zYXRvLXFlbXV4ODYudGFyLmJ6MiB0ZXN0LW5mcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBleHRyYWN0ZWQgdGhlIGZpbGUgc3lzdGVtLCB5b3UgY2FuIHJ1bgorICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnFlbXU8L2ZpbGVuYW1lPiBub3JtYWxseSB3aXRoIHRoZSBhZGRpdGlvbmFsCisgICAgICAgICAgICBsb2NhdGlvbiBvZiB0aGUgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICBZb3UgY2FuIHRoZW4gYWxzbyBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdpdGhpbgorICAgICAgICAgICAgPGZpbGVuYW1lPi4vdGVzdC1uZnM8L2ZpbGVuYW1lPiBhbmQgc2VlIHRob3NlIGNoYW5nZXMgYXBwZWFyIGluIHRoZQorICAgICAgICAgICAgaW1hZ2UgaW4gcmVhbCB0aW1lLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11IHFlbXV4ODYgLi90ZXN0LW5mcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3FlbXUtc3RhcnRpbmctYW5kLXN0b3BwaW5nLW5mcyc+CisgICAgICAgIDx0aXRsZT5TdGFydGluZyBhbmQgU3RvcHBpbmcgTkZTPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gbWFudWFsbHkgc3RhcnQgYW5kIHN0b3AgdGhlIE5GUyBzaGFyZSB1c2luZyB0aGVzZQorICAgICAgICAgICAgY29tbWFuZHM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN0YXJ0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU3RhcnRzIHRoZSBORlMgc2hhcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHN0YXJ0IDxyZXBsYWNlYWJsZT5maWxlLXN5c3RlbS1sb2NhdGlvbjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3RvcDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFN0b3BzIHRoZSBORlMgc2hhcmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgPHJlcGxhY2VhYmxlPmZpbGUtc3lzdGVtLWxvY2F0aW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXN0YXJ0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVzdGFydHMgdGhlIE5GUyBzaGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgcmVzdGFydCA8cmVwbGFjZWFibGU+ZmlsZS1zeXN0ZW0tbG9jYXRpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdxZW11LXRpcHMtYW5kLXRyaWNrcyc+CisgICAgPHRpdGxlPlRpcHMgYW5kIFRyaWNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGluZ3MgeW91IGNhbiBkbyB0byBtYWtlIHJ1bm5pbmcgUUVNVQorICAgICAgICBpbiB0aGUgY29udGV4dCBvZiB0aGUgWW9jdG8gUHJvamVjdCBhIGJldHRlciBleHBlcmllbmNlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Td2l0Y2hpbmcgQmV0d2VlbiBDb25zb2xlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFdoZW4gYm9vdGluZyBvciBydW5uaW5nIFFFTVUsIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4KKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgY29uc29sZXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICBDdHJsK0FsdCs8cmVwbGFjZWFibGU+bnVtYmVyPC9yZXBsYWNlYWJsZT4uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEN0cmwrQWx0KzMgc3dpdGNoZXMgeW91IHRvIHRoZSBzZXJpYWwgY29uc29sZSBhcworICAgICAgICAgICAgICAgIGxvbmcgYXMgdGhhdCBjb25zb2xlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgQmVpbmcgYWJsZSB0byBzd2l0Y2ggY29uc29sZXMgaXMgaGVscGZ1bCwgZm9yIGV4YW1wbGUsIGlmIHRoZQorICAgICAgICAgICAgICAgIG1haW4gUUVNVSBjb25zb2xlIGJyZWFrcyBmb3Igc29tZSByZWFzb24uCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFVzdWFsbHksICIyIiBnZXRzIHlvdSB0byB0aGUgbWFpbiBjb25zb2xlIGFuZCAiMyIgZ2V0cyB5b3UKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHNlcmlhbCBjb25zb2xlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UmVtb3ZpbmcgdGhlIFNwbGFzaCBTY3JlZW46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHJlbW92ZSB0aGUgc3BsYXNoIHNjcmVlbiB3aGVuIFFFTVUgaXMgYm9vdGluZyBieQorICAgICAgICAgICAgICAgIHVzaW5nIEFsdCtsZWZ0LgorICAgICAgICAgICAgICAgIFJlbW92aW5nIHRoZSBzcGxhc2ggc2NyZWVuIGFsbG93cyB5b3UgdG8gc2VlIHdoYXQgaXMgaGFwcGVuaW5nCisgICAgICAgICAgICAgICAgaW4gdGhlIGJhY2tncm91bmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpc2FibGluZyB0aGUgQ3Vyc29yIEdyYWI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBRRU1VIGludGVncmF0aW9uIGNhcHR1cmVzIHRoZSBjdXJzb3Igd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIG1haW4gd2luZG93LgorICAgICAgICAgICAgICAgIEl0IGRvZXMgdGhpcyBzaW5jZSBzdGFuZGFyZCBtb3VzZSBkZXZpY2VzIG9ubHkgcHJvdmlkZSByZWxhdGl2ZQorICAgICAgICAgICAgICAgIGlucHV0IGFuZCBub3QgYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgWW91IHRoZW4gaGF2ZSB0byBicmVhayBvdXQgb2YgdGhlIGdyYWIgdXNpbmcgdGhlICJDdHJsK0FsdCIga2V5CisgICAgICAgICAgICAgICAgY29tYmluYXRpb24uCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIFlvY3RvIFByb2plY3QncyBpbnRlZ3JhdGlvbiBvZiBRRU1VIGVuYWJsZXMgdGhlCisgICAgICAgICAgICAgICAgd2Fjb20gVVNCIHRvdWNoIHBhZCBkcml2ZXIgYnkgZGVmYXVsdCB0byBhbGxvdyBpbnB1dCBvZiBhYnNvbHV0ZQorICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCBtZWFucyB0aGF0IHRoZSBtb3VzZSBjYW4gZW50ZXIgYW5kIGxlYXZlIHRoZQorICAgICAgICAgICAgICAgIG1haW4gd2luZG93IHdpdGhvdXQgdGhlIGdyYWIgdGFraW5nIGVmZmVjdCBsZWFkaW5nIHRvIGEgYmV0dGVyCisgICAgICAgICAgICAgICAgdXNlciBleHBlcmllbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2Rldi1tYW51YWwtc3RhcnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTg5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1zdGFydC54bWwKQEAgLTAsMCArMSw0MzMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdkZXYtbWFudWFsLXN0YXJ0Jz4KKworPHRpdGxlPkdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGludHJvZHVjZXMgdGhlIFlvY3RvIFByb2plY3QgYW5kIGdpdmVzIHlvdSBhbiBpZGVhIG9mIHdoYXQgeW91IG5lZWQgdG8gZ2V0IHN0YXJ0ZWQuCisgICAgWW91IGNhbiBmaW5kIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZXQgdXAgeW91ciBkZXZlbG9wbWVudCBob3N0IGFuZCBidWlsZCBvciB1c2UgaW1hZ2VzIGZvcgorICAgIGhhcmR3YXJlIHN1cHBvcnRlZCBieSB0aGUgWW9jdG8gUHJvamVjdCBieSByZWFkaW5nIHRoZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgc3VtbWFyaXplcyB3aGF0IGlzIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGFuZCBwcm92aWRlcworICAgIHNvbWUgaGlnaGVyLWxldmVsIGNvbmNlcHRzIHlvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0naW50cm9kdWNpbmctdGhlLXlvY3RvLXByb2plY3QnPgorICAgIDx0aXRsZT5JbnRyb2R1Y2luZyB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IGZvY3VzZWQgb24gZW1iZWRkZWQgTGludXggZGV2ZWxvcG1lbnQuCisgICAgICAgIFRoZSBwcm9qZWN0IGN1cnJlbnRseSBwcm92aWRlcyBhIGJ1aWxkIHN5c3RlbSB0aGF0IGlzCisgICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1zeXN0ZW0tdGVybSc+T3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbTwvbGluaz4KKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdmFyaW91cyBhbmNpbGxhcnkgdG9vbHMgZm9yIHRoZSBlbWJlZGRlZCBkZXZlbG9wZXIKKyAgICAgICAgYW5kIGFsc28gZmVhdHVyZXMgdGhlIFNhdG8gcmVmZXJlbmNlIFVzZXIgSW50ZXJmYWNlLCB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yCisgICAgICAgIHN0eWx1cy1kcml2ZW4sIGxvdy1yZXNvbHV0aW9uIHNjcmVlbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaCB1c2VzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2JpdGJha2UtdGVybSc+Qml0QmFrZTwvbGluaz4sIHRvIGRldmVsb3AgY29tcGxldGUgTGludXgKKyAgICAgICAgaW1hZ2VzIGFuZCBhc3NvY2lhdGVkIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGZvciBhcmNoaXRlY3R1cmVzIGJhc2VkCisgICAgICAgIG9uIEFSTSwgTUlQUywgUG93ZXJQQywgeDg2IGFuZCB4ODYtNjQuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdXNpbmcgdGhlIFlvY3RvIFByb2plY3QgY3JlYXRlcyBhIFBva3kgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBjcmVhdGUgeW91ciBvd24gZGlzdHJpYnV0aW9uIGJ5IHByb3ZpZGluZyBrZXkKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21ldGFkYXRhJz5NZXRhZGF0YTwvbGluaz4uCisgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdjcmVhdGluZy15b3VyLW93bi1kaXN0cmlidXRpb24nPkNyZWF0aW5nIFlvdXIgT3duIERpc3RyaWJ1dGlvbjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgICAgIFdoaWxlIHRoZSBZb2N0byBQcm9qZWN0IGRvZXMgbm90IHByb3ZpZGUgYSBzdHJpY3QgdGVzdGluZyBmcmFtZXdvcmssCisgICAgICAgIGl0IGRvZXMgcHJvdmlkZSBvciBnZW5lcmF0ZSBmb3IgeW91IGFydGlmYWN0cyB0aGF0IGxldCB5b3UgcGVyZm9ybSB0YXJnZXQtbGV2ZWwgYW5kCisgICAgICAgIGVtdWxhdGVkIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBpZiB5b3UgYXJlIGFuIDx0cmFkZW1hcmsgY2xhc3M9J3RyYWRlJz5FY2xpcHNlPC90cmFkZW1hcms+CisgICAgICAgIElERSB1c2VyLCB5b3UgY2FuIGluc3RhbGwgYW4gRWNsaXBzZSBZb2N0byBQbHVnLWluIHRvIGFsbG93IHlvdSB0bworICAgICAgICBkZXZlbG9wIHdpdGhpbiB0aGF0IGZhbWlsaWFyIGVudmlyb25tZW50LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2dldHRpbmctc2V0dXAnPgorICAgIDx0aXRsZT5HZXR0aW5nIFNldCBVcDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSGVyZSBpcyB3aGF0IHlvdSBuZWVkIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SG9zdCBTeXN0ZW06PC9lbXBoYXNpcz4gIFlvdSBzaG91bGQgaGF2ZSBhIHJlYXNvbmFibHkgY3VycmVudAorICAgICAgICAgICAgICAgIExpbnV4LWJhc2VkIGhvc3Qgc3lzdGVtLgorICAgICAgICAgICAgICAgIFlvdSB3aWxsIGhhdmUgdGhlIGJlc3QgcmVzdWx0cyB3aXRoIGEgcmVjZW50IHJlbGVhc2Ugb2YgRmVkb3JhLAorICAgICAgICAgICAgICAgIG9wZW5TVVNFLCBEZWJpYW4sIFVidW50dSwgb3IgQ2VudE9TIGFzIHRoZXNlIHJlbGVhc2VzIGFyZSBmcmVxdWVudGx5IHRlc3RlZCBhZ2FpbnN0IHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgYW5kIG9mZmljaWFsbHkgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgdGhlIGRpc3RyaWJ1dGlvbnMgdW5kZXIgdmFsaWRhdGlvbiBhbmQgdGhlaXIgc3RhdHVzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2RldGFpbGVkLXN1cHBvcnRlZC1kaXN0cm9zJz5TdXBwb3J0ZWQgTGludXggRGlzdHJpYnV0aW9uczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBhbmQgdGhlIHdpa2kgcGFnZSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9EaXN0cmlidXRpb25fU3VwcG9ydCc+RGlzdHJpYnV0aW9uIFN1cHBvcnQ8L3VsaW5rPi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhbHNvIGhhdmUgYWJvdXQgNTAgR2J5dGVzIG9mIGZyZWUgZGlzayBzcGFjZSBmb3IgYnVpbGRpbmcgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QYWNrYWdlczo8L2VtcGhhc2lzPiAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICByZXF1aXJlcyB0aGF0IGNlcnRhaW4gcGFja2FnZXMgZXhpc3Qgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gKGUuZy4gUHl0aG9uIDIuNykuCisgICAgICAgICAgICAgICAgU2VlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3BhY2thZ2VzJz5UaGUgQnVpbGQgSG9zdCBQYWNrYWdlczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgYW5kIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICBwYWNrYWdlIHJlcXVpcmVtZW50cyBhbmQgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kcyB0byBpbnN0YWxsCisgICAgICAgICAgICAgICAgdGhlbSBmb3IgdGhlIHN1cHBvcnRlZCBkaXN0cmlidXRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtIGlkPSdsb2NhbC15cC1yZWxlYXNlJz48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBSZWxlYXNlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgYSByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IGxvY2FsbHkgaW5zdGFsbGVkIG9uCisgICAgICAgICAgICAgICAgeW91ciBkZXZlbG9wbWVudCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gcmVmZXJzIHRvIHRoaXMgc2V0IG9mIGxvY2FsbHkgaW5zdGFsbGVkIGZpbGVzCisgICAgICAgICAgICAgICAgYXMgdGhlIDxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L2xpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjcmVhdGUgeW91ciBTb3VyY2UgRGlyZWN0b3J5IGJ5IHVzaW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2l0Jz5HaXQ8L2xpbms+IHRvIGNsb25lIGEgbG9jYWwgY29weQorICAgICAgICAgICAgICAgIG9mIHRoZSB1cHN0cmVhbSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnksCisgICAgICAgICAgICAgICAgb3IgYnkgZG93bmxvYWRpbmcgYW5kIHVucGFja2luZyBhIHRhcmJhbGwgb2YgYW4gb2ZmaWNpYWwKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgVGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPldvcmtpbmcgZnJvbSBhIGNvcHkgb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgYWxsb3dzIHlvdQorICAgICAgICAgICAgICAgIHRvIGNvbnRyaWJ1dGUgYmFjayBpbnRvIHRoZSBZb2N0byBQcm9qZWN0IG9yIHNpbXBseSB3b3JrIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgbGF0ZXN0IHNvZnR3YXJlIG9uIGEgZGV2ZWxvcG1lbnQgYnJhbmNoLgorICAgICAgICAgICAgICAgIEJlY2F1c2UgR2l0IG1haW50YWlucyBhbmQgY3JlYXRlcyBhbiB1cHN0cmVhbSByZXBvc2l0b3J5IHdpdGgKKyAgICAgICAgICAgICAgICBhIGNvbXBsZXRlIGhpc3Rvcnkgb2YgY2hhbmdlcyBhbmQgeW91IGFyZSB3b3JraW5nIHdpdGggYSBsb2NhbAorICAgICAgICAgICAgICAgIGNsb25lIG9mIHRoYXQgcmVwb3NpdG9yeSwgeW91IGhhdmUgYWNjZXNzIHRvIGFsbCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGRldmVsb3BtZW50IGJyYW5jaGVzIGFuZCB0YWcgbmFtZXMgdXNlZCBpbiB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5LjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8bm90ZT5Zb3UgY2FuIHZpZXcgdGhlIFlvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgdHJhbnNjcmlwdCBzaG93cyBob3cgdG8gY2xvbmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBpbnRvIHRoZSBjdXJyZW50CisgICAgICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgY3JlYXRlcyB0aGUgbG9jYWwgcmVwb3NpdG9yeSBpbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdpdCB1c2VkIHdpdGhpbiB0aGUgWW9jdG8gUHJvamVjdCwgc2VlCisgICAgICAgICAgICAgICAgdGhlICI8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5CisgICAgIENsb25pbmcgaW50byAncG9reScuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiAyMjY3OTAsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoNTc0NjUvNTc0NjUpLCBkb25lLgorICAgICByZW1vdGU6IFRvdGFsIDIyNjc5MCAoZGVsdGEgMTY1MjEyKSwgcmV1c2VkIDIyNTg4NyAoZGVsdGEgMTY0MzI3KQorICAgICBSZWNlaXZpbmcgb2JqZWN0czogMTAwJSAoMjI2NzkwLzIyNjc5MCksIDEwMC45OCBNaUIgfCAyNjMgS2lCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDE2NTIxMi8xNjUyMTIpLCBkb25lLgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGFub3RoZXIgZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwIHlvdXIgb3duIGxvY2FsIEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcywgc2VlIHRoaXMKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfZnJvbV9naXRfY2hlY2tvdXRfdG9fbWV0YS1pbnRlbF9CU1AnPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZTwvdWxpbms+LCB3aGljaCBkZXNjcmliZXMgaG93IHRvIGNyZWF0ZSBsb2NhbAorICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgZm9yIGJvdGgKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IEZpbGVzIGJ5IGRvd25sb2FkaW5nCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19IT01FX1VSTDsiPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIEZyb20gdGhlIHdlYnNpdGUsIHlvdSBqdXN0IGNsaWNrICJEb3dubG9hZHMiIGluIHRoZSBuYXZpZ2F0aW9uCisgICAgICAgICAgICAgICAgcGFuZSB0byB0aGUgbGVmdCB0byBkaXNwbGF5IGFsbCBZb2N0byBQcm9qZWN0IGRvd25sb2Fkcy4KKyAgICAgICAgICAgICAgICBDdXJyZW50IGFuZCBhcmNoaXZlZCByZWxlYXNlcyBhcmUgYXZhaWxhYmxlIGZvciBkb3dubG9hZC4KKyAgICAgICAgICAgICAgICBOaWdodGx5IGFuZCBkZXZlbG9wbWVudGFsIGJ1aWxkcyBhcmUgYWxzbyBtYWludGFpbmVkIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0FCX05JR0hUTFlfVVJMOyI+PC91bGluaz4uCisgICAgICAgICAgICAgICAgT25lIGZpbmFsIHNpdGUgeW91IGNhbiB2aXNpdCBmb3IgaW5mb3JtYXRpb24gb24gWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2VzIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9SZWxlYXNlcyc+UmVsZWFzZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J2xvY2FsLWtlcm5lbC1maWxlcyc+PHBhcmE+PGVtcGhhc2lzPllvY3RvIFByb2plY3QgS2VybmVsOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBhIHN1cHBvcnRlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCwgeW91CisgICAgICAgICAgICAgICAgbmVlZCB0byBlc3RhYmxpc2ggbG9jYWwgY29waWVzIG9mIHRoZSBzb3VyY2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIEdpdCByZXBvc2l0b3JpZXMgb2Ygc3VwcG9ydGVkIFlvY3RvIFByb2plY3Qga2VybmVscyBvcmdhbml6ZWQgdW5kZXIKKyAgICAgICAgICAgICAgICAiWW9jdG8gTGludXggS2VybmVsIiBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpJz48L3VsaW5rPi48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhpcyBzZXR1cCBjYW4gaW52b2x2ZSBjcmVhdGluZyBhIGJhcmUgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgY29weWluZyB0aGF0IGNsb25lZCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSBiYXJlIGNsb25lIGFuZCB0aGUgY29weSBvZiB0aGUgYmFyZSBjbG9uZSBhbnl3aGVyZSB5b3UgbGlrZS4KKyAgICAgICAgICAgICAgICBGb3Igc2ltcGxpY2l0eSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY3JlYXRlIHRoZXNlIHN0cnVjdHVyZXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyB1c3VhbGx5IG5hbWVkIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkFzIGFuIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHJhbnNjcmlwdCBzaG93cyBob3cgdG8gY3JlYXRlIHRoZSBiYXJlIGNsb25lCisgICAgICAgICAgICAgICAgb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsIGFuZCB0aGVuIGNyZWF0ZSBhIGNvcHkgb2YKKyAgICAgICAgICAgICAgICB0aGF0IGNsb25lLgorICAgICAgICAgICAgICAgIDxub3RlPldoZW4geW91IGhhdmUgYSBsb2NhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbgorICAgICAgICAgICAgICAgIHJlZmVyZW5jZSB0aGF0IHJlcG9zaXRvcnkgcmF0aGVyIHRoYW4gdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5IGFzCisgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgPGZpbGVuYW1lPmNsb25lPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBEb2luZyBzbyBjYW4gc3BlZWQgdXAgdGhlIHByb2Nlc3MuPC9ub3RlPjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5JbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBiYXJlIGNsb25lIGlzIG5hbWVkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTkuZ2l0PC9maWxlbmFtZT4sIHdoaWxlIHRoZQorICAgICAgICAgICAgICAgIGNvcHkgaXMgbmFtZWQgPGZpbGVuYW1lPm15LWxpbnV4LXlvY3RvLTMuMTktd29yazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgLS1iYXJlIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkgbGludXgteW9jdG8tMy4xOS5naXQKKyAgICAgQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnbGludXgteW9jdG8tMy4xOS5naXQnLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMzk4MzI1NiwgZG9uZS4KKyAgICAgcmVtb3RlOiBDb21wcmVzc2luZyBvYmplY3RzOiAxMDAlICg2MDUwMDYvNjA1MDA2KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAzOTgzMjU2IChkZWx0YSAzMzUyODMyKSwgcmV1c2VkIDM5NzQ1MDMgKGRlbHRhIDMzNDQwNzkpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICgzOTgzMjU2LzM5ODMyNTYpLCA4NDMuNjYgTWlCIHwgMS4wNyBNaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMzM1MjgzMi8zMzUyODMyKSwgZG9uZS4KKyAgICAgQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5Ob3cgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGJhcmUgY2xvbmUganVzdCBjcmVhdGVkOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgbGludXgteW9jdG8tMy4xOS5naXQgbXktbGludXgteW9jdG8tMy4xOS13b3JrCisgICAgIENsb25pbmcgaW50byAnbXktbGludXgteW9jdG8tMy4xOS13b3JrJy4uLgorICAgICBkb25lLgorICAgICBDaGVja2luZyBvdXQgZmlsZXM6IDEwMCUgKDQ4NDQwLzQ4NDQwKSwgZG9uZS4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0gaWQ9J21ldGEteW9jdG8ta2VybmVsLWV4dHJhcy1yZXBvJz48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWtlcm5lbC1leHRyYXM8L2ZpbGVuYW1lPiBHaXQgUmVwb3NpdG9yeTwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1rZXJuZWwtZXh0cmFzPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkgY29udGFpbnMgTWV0YWRhdGEgbmVlZGVkCisgICAgICAgICAgICAgICAgb25seSBpZiB5b3UgYXJlIG1vZGlmeWluZyBhbmQgYnVpbGRpbmcgdGhlIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCBpdCBjb250YWlucyB0aGUga2VybmVsIEJpdEJha2UgYXBwZW5kICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgZmlsZXMgdGhhdCB5b3UKKyAgICAgICAgICAgICAgICBlZGl0IHRvIHBvaW50IHRvIHlvdXIgbG9jYWxseSBtb2RpZmllZCBrZXJuZWwgc291cmNlIGZpbGVzIGFuZCB0byBidWlsZCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgUG9pbnRpbmcgdG8gdGhlc2UgbG9jYWwgZmlsZXMgaXMgbXVjaCBtb3JlIGVmZmljaWVudCB0aGFuIHJlcXVpcmluZyBhIGRvd25sb2FkIG9mIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCdzIHNvdXJjZSBmaWxlcyBmcm9tIHVwc3RyZWFtIGVhY2ggdGltZSB5b3UgbWFrZSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gZmluZCB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdCBSZXBvc2l0b3J5IGluIHRoZQorICAgICAgICAgICAgICAgICJZb2N0byBNZXRhZGF0YSBMYXllcnMiIGFyZWEgb2YgdGhlIFlvY3RvIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgSXQgaXMgZ29vZCBwcmFjdGljZSB0byBjcmVhdGUgdGhpcyBHaXQgcmVwb3NpdG9yeSBpbnNpZGUgdGhlIFNvdXJjZSBEaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgY3JlYXRlcyB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8ta2VybmVsLWV4dHJhczwvZmlsZW5hbWU+IEdpdAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW5zaWRlIHRoZSBTb3VyY2UgRGlyZWN0b3J5LCB3aGljaCBpcyBuYW1lZCA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgaW4gdGhpcyBjYXNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kKKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS15b2N0by1rZXJuZWwtZXh0cmFzIG1ldGEteW9jdG8ta2VybmVsLWV4dHJhcworICAgICBDbG9uaW5nIGludG8gJ21ldGEteW9jdG8ta2VybmVsLWV4dHJhcycuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiA3MjcsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoNDUyLzQ1MiksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgNzI3IChkZWx0YSAyNjApLCByZXVzZWQgNzE5IChkZWx0YSAyNTIpCisgICAgIFJlY2VpdmluZyBvYmplY3RzOiAxMDAlICg3MjcvNzI3KSwgNTM2LjM2IEtpQiB8IDI0MCBLaUIvcywgZG9uZS4KKyAgICAgUmVzb2x2aW5nIGRlbHRhczogMTAwJSAoMjYwLzI2MCksIGRvbmUuCisgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYSBpZD0nc3VwcG9ydGVkLWJvYXJkLXN1cHBvcnQtcGFja2FnZXMtKGJzcHMpJz48ZW1waGFzaXM+U3VwcG9ydGVkIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgbWFueSBCU1BzLCB3aGljaCBhcmUgbWFpbnRhaW5lZCBpbgorICAgICAgICAgICAgICAgIHRoZWlyIG93biBsYXllcnMgb3IgaW4gbGF5ZXJzIGRlc2lnbmVkIHRvIGNvbnRhaW4gc2V2ZXJhbAorICAgICAgICAgICAgICAgIEJTUHMuCisgICAgICAgICAgICAgICAgVG8gZ2V0IGFuIGlkZWEgb2YgbWFjaGluZSBzdXBwb3J0IHRocm91Z2ggQlNQIGxheWVycywgeW91IGNhbgorICAgICAgICAgICAgICAgIGxvb2sgYXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfRExfVVJMOy9tYWNoaW5lcyc+aW5kZXggb2YgbWFjaGluZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgIGZvciB0aGUgcmVsZWFzZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgWW9jdG8gUHJvamVjdCB1c2VzIHRoZSBmb2xsb3dpbmcgQlNQIGxheWVyIG5hbWluZworICAgICAgICAgICAgICAgIHNjaGVtZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPmJzcF9uYW1lPC9yZXBsYWNlYWJsZT4gaXMgdGhlIHJlY29nbml6ZWQKKyAgICAgICAgICAgICAgICBCU1AgbmFtZS4KKyAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWV0YS1jcm93bmJheQorICAgICBtZXRhLWVtZW5sb3cKKyAgICAgbWV0YS1yYXNwYmVycnlwaQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKQorICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUCBMYXllcnMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+QSB1c2VmdWwgR2l0IHJlcG9zaXRvcnkgcmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0IGlzIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIHdoaWNoIGlzIGEKKyAgICAgICAgICAgICAgICBwYXJlbnQgbGF5ZXIgdGhhdCBjb250YWlucyBtYW55IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1sYXllcnMnPkJTUCBMYXllcnM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGxvY2F0ZSB0aGUgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGluIHRoZSAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzIiBhcmVhIG9mIHRoZSBZb2N0bworICAgICAgICAgICAgICAgIFByb2plY3QgU291cmNlIFJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4uPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VXNpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnaXQnPkdpdDwvbGluaz4gdG8gY3JlYXRlIGEgbG9jYWwgY2xvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgdXBzdHJlYW0gcmVwb3NpdG9yeSBjYW4gYmUgaGVscGZ1bCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aAorICAgICAgICAgICAgICAgIEJTUHMuCisgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugc2V0IHVwIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgaW5zaWRlIHRoZSBTb3VyY2UgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRyYW5zY3JpcHQgc2hvd3MgdGhlIHN0ZXBzIHRvIGNsb25lCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byB3b3JrIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCB0aGF0IG1hdGNoZXMgeW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+KSBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBjaGVja2VkIG91dCB0aGUgIm1hc3RlciIgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gYW5kIHlvdSBhcmUgZ29pbmcgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4sIGJlIHN1cmUgdG8gY2hlY2tvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiIGJyYW5jaCBvZiA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21ldGEtaW50ZWwuZ2l0CisgICAgIENsb25pbmcgaW50byAnbWV0YS1pbnRlbCcuLi4KKyAgICAgcmVtb3RlOiBDb3VudGluZyBvYmplY3RzOiA4ODQ0LCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDI4NjQvMjg2NCksIGRvbmUuCisgICAgIHJlbW90ZTogVG90YWwgODg0NCAoZGVsdGEgNDkzMSksIHJldXNlZCA4NzgwIChkZWx0YSA0ODY3KQorICAgICBSZWNlaXZpbmcgb2JqZWN0czogMTAwJSAoODg0NC84ODQ0KSwgMi40OCBNaUIgfCAyNjQgS2lCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDQ5MzEvNDkzMSksIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBzYW1lCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL1RyYW5zY3JpcHQ6X2Zyb21fZ2l0X2NoZWNrb3V0X3RvX21ldGEtaW50ZWxfQlNQJz53aWtpIHBhZ2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQgZWFybGllciBjb3ZlcnMgaG93IHRvIHNldCB1cCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FY2xpcHNlIFlvY3RvIFBsdWctaW46PC9lbXBoYXNpcz4gIElmIHlvdSBhcmUgZGV2ZWxvcGluZworICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgRWNsaXBzZSBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IChJREUpLAorICAgICAgICAgICAgICAgIHlvdSB3aWxsIG5lZWQgdGhpcyBwbHVnLWluLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2V0dGluZy11cC10aGUtZWNsaXBzZS1pZGUnPlNldHRpbmcgdXAgdGhlIEVjbGlwc2UgSURFPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdidWlsZGluZy1pbWFnZXMnPgorICAgIDx0aXRsZT5CdWlsZGluZyBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGNyZWF0ZXMgYW4gZW50aXJlIExpbnV4IGRpc3RyaWJ1dGlvbiwgaW5jbHVkaW5nIHRoZSB0b29sY2hhaW4sIGZyb20gc291cmNlLgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcmV2aW91cyBzZWN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluaXRpYWxpemUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGJ5IHNvdXJjaW5nIGEgYnVpbGQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcHRpb25hbGx5IGVuc3VyZSB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSwKKyAgICAgICAgICAgICAgICB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvbGluaz4sCisgICAgICAgICAgICAgICAgaXMgc2V0IHVwIGhvdyB5b3Ugd2FudCBpdC4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgZGVmaW5lcyBtYW55IGFzcGVjdHMgb2YgdGhlIGJ1aWxkIGVudmlyb25tZW50IGluY2x1ZGluZworICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgbWFjaGluZSBhcmNoaXRlY3R1cmUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L3VsaW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdpbmcgZm9ybWF0IHVzZWQgZHVyaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICg8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L3VsaW5rPiksCisgICAgICAgICAgICAgICAgYW5kIGEgY2VudHJhbGl6ZWQgdGFyYmFsbCBkb3dubG9hZCBkaXJlY3RvcnkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLURMX0RJUic+RExfRElSPC91bGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBCdWlsZCB0aGUgaW1hZ2UgdXNpbmcgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBpbmZvcm1hdGlvbiBvbiBCaXRCYWtlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGUgaW1hZ2UgZWl0aGVyIG9uIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgdXNpbmcgdGhlIFFFTVUKKyAgICAgICAgICAgICAgICBlbXVsYXRvci48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZy1wcmUtYnVpbHQtYmluYXJpZXMtYW5kLXFlbXUnPgorICAgIDx0aXRsZT5Vc2luZyBQcmUtQnVpbHQgQmluYXJpZXMgYW5kIFFFTVU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEFub3RoZXIgb3B0aW9uIHlvdSBoYXZlIHRvIGdldCBzdGFydGVkIGlzIHRvIHVzZSBwcmUtYnVpbHQgYmluYXJpZXMuCisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIG1hbnkgdHlwZXMgb2YgYmluYXJpZXMgd2l0aCBlYWNoIHJlbGVhc2UuCisgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi1pbWFnZXMnPkltYWdlczwvdWxpbms+IgorICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwKKyAgICAgICAgZm9yIGRlc2NyaXB0aW9ucyBvZiB0aGUgdHlwZXMgb2YgYmluYXJpZXMgdGhhdCBzaGlwIHdpdGggYSBZb2N0byBQcm9qZWN0CisgICAgICAgIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFVzaW5nIGEgcHJlLWJ1aWx0IGJpbmFyeSBpcyBpZGVhbCBmb3IgZGV2ZWxvcGluZyBzb2Z0d2FyZSBhcHBsaWNhdGlvbnMgdG8gcnVuIG9uIHlvdXIKKyAgICAgICAgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgYXBwcm9wcmlhdGUgY3Jvc3MtdG9vbGNoYWluIHRhcmJhbGwgZm9yCisgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUgb24gd2hpY2ggeW91IGFyZSBkZXZlbG9waW5nLgorICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGFuIFNESyB0eXBlIGltYWdlLCB0aGUgaW1hZ2Ugc2hpcHMgd2l0aCB0aGUgY29tcGxldGUgdG9vbGNoYWluIG5hdGl2ZSB0bworICAgICAgICB0aGUgYXJjaGl0ZWN0dXJlLgorICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhbiBTREsgdHlwZSBpbWFnZSwgeW91IG5lZWQgdG8gc2VwYXJhdGVseSBkb3dubG9hZCBhbmQKKyAgICAgICAgaW5zdGFsbCB0aGUgc3RhbmQtYWxvbmUgWW9jdG8gUHJvamVjdCBjcm9zcy10b29sY2hhaW4gdGFyYmFsbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBpbWFnZSB5b3UgYXJlIHVzaW5nLCB5b3UgbmVlZCB0byBkb3dubG9hZCB0aGUgcHJlLWJ1aWx0IGtlcm5lbAorICAgICAgICB0aGF0IHlvdSB3aWxsIGJvb3QgaW4gdGhlIFFFTVUgZW11bGF0b3IgYW5kIHRoZW4gZG93bmxvYWQgYW5kIGV4dHJhY3QgdGhlIHRhcmdldCByb290CisgICAgICAgIGZpbGVzeXN0ZW0gZm9yIHlvdXIgdGFyZ2V0IG1hY2hpbmXigJlzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgWW91IGNhbiBnZXQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJpbmFyaWVzIGFuZCBmaWxlIHN5c3RlbXMgZnJvbQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fTUFDSElORVNfRExfVVJMOyc+bWFjaGluZXM8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBnZXQgaW5zdGFsbGF0aW9uIHNjcmlwdHMgZm9yIHN0YW5kLWFsb25lIHRvb2xjaGFpbnMgZnJvbQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fVE9PTENIQUlOX0RMX1VSTDsnPnRvb2xjaGFpbnM8L3VsaW5rPi4KKyAgICAgICAgT25jZSB5b3UgaGF2ZSBhbGwgeW91ciBmaWxlcywgeW91IHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdG8gZW11bGF0ZSB0aGUgaGFyZHdhcmUKKyAgICAgICAgYnkgc291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICBGaW5hbGx5LCB5b3Ugc3RhcnQgdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgIFlvdSBjYW4gZmluZCBkZXRhaWxzIG9uIGFsbCB0aGVzZSBzdGVwcyBpbiB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjdXNpbmctcHJlLWJ1aWx0Jz5FeGFtcGxlIFVzaW5nIFByZS1CdWlsdCBCaW5hcmllcyBhbmQgUUVNVTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgUUVNVSB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGluIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nZGV2LW1hbnVhbC1xZW11Jz5Vc2luZyB0aGUgUXVpY2sgRU1VbGF0b3IgKFFFTVUpPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVXNpbmcgUUVNVSB0byBlbXVsYXRlIHlvdXIgaGFyZHdhcmUgY2FuIHJlc3VsdCBpbiBzcGVlZCBpc3N1ZXMKKyAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgYW5kIGhvc3QgYXJjaGl0ZWN0dXJlIG1peC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IGltYWdlIGluIHRoZSBlbXVsYXRvcgorICAgICAgICBvbiBhbiBJbnRlbC1iYXNlZCAzMi1iaXQgKHg4NikgaG9zdCBtYWNoaW5lIGlzIGZhc3QgYmVjYXVzZSB0aGUgdGFyZ2V0IGFuZAorICAgICAgICBob3N0IGFyY2hpdGVjdHVyZXMgbWF0Y2guCisgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCB1c2luZyB0aGUgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiBpbWFnZSBvbiB0aGUgc2FtZSBJbnRlbC1iYXNlZAorICAgICAgICBob3N0IGNhbiBiZSBzbG93ZXIuCisgICAgICAgIEJ1dCwgeW91IHN0aWxsIGFjaGlldmUgZmFpdGhmdWwgZW11bGF0aW9uIG9mIEFSTS1zcGVjaWZpYyBpc3N1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHNwZWVkIHRoaW5ncyB1cCwgdGhlIFFFTVUgaW1hZ2VzIHN1cHBvcnQgdXNpbmcgPGZpbGVuYW1lPmRpc3RjYzwvZmlsZW5hbWU+CisgICAgICAgIHRvIGNhbGwgYSBjcm9zcy1jb21waWxlciBvdXRzaWRlIHRoZSBlbXVsYXRlZCBzeXN0ZW0uCisgICAgICAgIElmIHlvdSB1c2VkIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gdG8gc3RhcnQgUUVNVSwgYW5kIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZGlzdGNjZDwvZmlsZW5hbWU+IGFwcGxpY2F0aW9uIGlzIHByZXNlbnQgb24gdGhlIGhvc3Qgc3lzdGVtLCBhbnkKKyAgICAgICAgQml0QmFrZSBjcm9zcy1jb21waWxpbmcgdG9vbGNoYWluIGF2YWlsYWJsZSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0gaXMgYXV0b21hdGljYWxseQorICAgICAgICB1c2VkIGZyb20gd2l0aGluIFFFTVUgc2ltcGx5IGJ5IGNhbGxpbmcgPGZpbGVuYW1lPmRpc3RjYzwvZmlsZW5hbWU+LgorICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBkZWZpbmluZyB0aGUgY3Jvc3MtY29tcGlsZXIgdmFyaWFibGUKKyAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmV4cG9ydCBDQz0iZGlzdGNjIjwvZmlsZW5hbWU+KS4KKyAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IGFyZSB1c2luZyBhIHN1aXRhYmxlIFNESyBpbWFnZSBvciB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgc3RhbmQtYWxvbmUgdG9vbGNoYWluIGlzIHByZXNlbnQsCisgICAgICAgIHRoZSB0b29sY2hhaW4gaXMgYWxzbyBhdXRvbWF0aWNhbGx5IHVzZWQuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIFNldmVyYWwgbWVjaGFuaXNtcyBleGlzdCB0aGF0IGxldCB5b3UgY29ubmVjdCB0byB0aGUgc3lzdGVtIHJ1bm5pbmcgb24gdGhlCisgICAgICAgIFFFTVUgZW11bGF0b3I6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UUVNVSBwcm92aWRlcyBhIGZyYW1lYnVmZmVyIGludGVyZmFjZSB0aGF0IG1ha2VzIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgY29uc29sZXMgYXZhaWxhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdlbmVyYWxseSwgaGVhZGxlc3MgZW1iZWRkZWQgZGV2aWNlcyBoYXZlIGEgc2VyaWFsIHBvcnQuCisgICAgICAgICAgICAgICAgSWYgc28sIHlvdSBjYW4gY29uZmlndXJlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9mIHRoZSBydW5uaW5nIGltYWdlCisgICAgICAgICAgICAgICAgdG8gdXNlIHRoYXQgcG9ydCB0byBydW4gYSBjb25zb2xlLgorICAgICAgICAgICAgICAgIFRoZSBjb25uZWN0aW9uIHVzZXMgc3RhbmRhcmQgSVAgbmV0d29ya2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBTU0ggc2VydmVycyBleGlzdCBpbiBzb21lIFFFTVUgaW1hZ2VzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gUUVNVSBpbWFnZSBoYXMgYQorICAgICAgICAgICAgICAgIERyb3BiZWFyIHNlY3VyZSBzaGVsbCAoU1NIKSBzZXJ2ZXIgdGhhdCBydW5zIHdpdGggdGhlIHJvb3QKKyAgICAgICAgICAgICAgICBwYXNzd29yZCBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gUUVNVSBpbWFnZXMKKyAgICAgICAgICAgICAgICBoYXZlIE9wZW5TU0ggaW5zdGVhZCBvZiBEcm9wYmVhci4KKyAgICAgICAgICAgICAgICBJbmNsdWRpbmcgdGhlc2UgU1NIIHNlcnZlcnMgYWxsb3cgeW91IHRvIHVzZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnNjcDwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gUUVNVSBpbWFnZSwKKyAgICAgICAgICAgICAgICBob3dldmVyLCBjb250YWlucyBubyBTU0ggc2VydmVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gdXNlIGEgcHJvdmlkZWQsIHVzZXItc3BhY2UgTkZTIHNlcnZlciB0byBib290IHRoZSBRRU1VIHNlc3Npb24KKyAgICAgICAgICAgICAgICB1c2luZyBhIGxvY2FsIGNvcHkgb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byBtYWtlIHRoaXMgY29ubmVjdGlvbiwgeW91IG11c3QgZXh0cmFjdCBhIHJvb3QgZmlsZXN5c3RlbSB0YXJiYWxsIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ydW5xZW11LWV4dHJhY3Qtc2RrPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICBBZnRlciBydW5uaW5nIHRoZSBjb21tYW5kLCB5b3UgbXVzdCB0aGVuIHBvaW50IHRoZSA8ZmlsZW5hbWU+cnVucWVtdTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgc2NyaXB0IHRvIHRoZSBleHRyYWN0ZWQgZGlyZWN0b3J5IGluc3RlYWQgb2YgYSByb290IGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9ub3RlPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4ZDNhOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtbWFudWFsLnhtbApAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J2Rldi1tYW51YWwnIGxhbmc9J2VuJworICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiCisgICAgICB4bWxucz0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgICAgICA+CisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDxpbWFnZW9iamVjdD4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9J2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwKKyAgICAgICAgPC90aXRsZT4KKworICAgICAgICA8YXV0aG9yZ3JvdXA+CisgICAgICAgICAgICA8YXV0aG9yPgorICAgICAgICAgICAgICAgIDxmaXJzdG5hbWU+U2NvdHQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UmlmZW5iYXJrPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+c2NvdHQubS5yaWZlbmJhcmtAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBPY3RvYmVyIDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5UaGUgaW5pdGlhbCBkb2N1bWVudCByZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPgorICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7Jz5Zb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iZGV2LW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtc3RhcnQueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLW5ld2JpZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtbW9kZWwueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJkZXYtbWFudWFsLWNvbW1vbi10YXNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImRldi1tYW51YWwtcWVtdS54bWwiLz4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LXN0eWxlLmNzcyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9kZXYtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MDBmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZGV2LXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9kZXYtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2FwcC1kZXYtZmxvdy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTMzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2JzcC1kZXYtZmxvdy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2MWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2J1aWxkLXdvcmtzcGFjZS1kaXJlY3RvcnkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2Rldi10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2FjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2dpdC13b3JrZmxvdy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDEzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2luZGV4LWRvd25sb2Fkcy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjUxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1kZXYtZmxvdy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTEwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZjMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5NzBlYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0yLWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL3JlY2lwZS13b3JrZmxvdy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTk2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL3NvdXJjZS1yZXBvcy5wbmcgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzVmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Rldi1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZyBiL2RvY3VtZW50YXRpb24vZGV2LW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcwYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9kZXYtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmFhZDE3MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1hcmNoaXRlY3R1cmUtb3ZlcnZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ZGQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9maWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWFkdmFuY2VkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmRiODUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtYWR2YW5jZWQueG1sCkBAIC0wLDAgKzEsMTA4OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1kZXYtYWR2YW5jZWQnPgorPHRpdGxlPldvcmtpbmcgd2l0aCBBZHZhbmNlZCBNZXRhZGF0YTwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LWFkdmFuY2VkLW92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMsIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IGtlcm5lbCB0b29scyBhbHNvIHN1cHBvcnQgcmljaAorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB0aGF0IHlvdSBjYW4KKyAgICAgICAgdXNlIHRvIGRlZmluZSBjb21wbGV4IHBvbGljaWVzIGFuZCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgc3VwcG9ydC4KKyAgICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIE1ldGFkYXRhIGFuZCB0aGUgdG9vbHMgdGhhdCBtYW5hZ2UgaXQsIGtub3duIGFzCisgICAgICAgIHRoZSBrZXJuLXRvb2xzICg8ZmlsZW5hbWU+a2Vybi10b29scy1uYXRpdmVfZ2l0LmJiPC9maWxlbmFtZT4pLCBpcworICAgICAgICB0byBoZWxwIHlvdSBtYW5hZ2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHNvdXJjZXMKKyAgICAgICAgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIEJTUHMgYW5kIExpbnV4IGtlcm5lbCB0eXBlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZy1rZXJuZWwtbWV0YWRhdGEtaW4tYS1yZWNpcGUnPgorICAgIDx0aXRsZT5Vc2luZyBLZXJuZWwgTWV0YWRhdGEgaW4gYSBSZWNpcGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXJuZWwgc291cmNlcyBpbiB0aGUgWW9jdG8gUHJvamVjdCBjb250YWluIGtlcm5lbCBNZXRhZGF0YSwgd2hpY2gKKyAgICAgICAgaXMgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2hlcyBvZiB0aGUga2VybmVsCisgICAgICAgIHNvdXJjZSBHaXQgcmVwb3NpdG9yaWVzLgorICAgICAgICBUaGlzIE1ldGFkYXRhIGRlZmluZXMgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykgdGhhdAorICAgICAgICBjb3JyZXNwb25kIHRvIGRlZmluaXRpb25zIGluIGxpbnV4LXlvY3RvIHJlY2lwZXMgZm9yIHRoZSBzYW1lIEJTUHMuCisgICAgICAgIEEgQlNQIGNvbnNpc3RzIG9mIGFuIGFnZ3JlZ2F0aW9uIG9mIGtlcm5lbCBwb2xpY3kgYW5kIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgIGZlYXR1cmUgZW5hYmxlbWVudHMuCisgICAgICAgIFRoZSBCU1AgY2FuIGJlIGluZmx1ZW5jZWQgZnJvbSB3aXRoaW4gdGhlIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBMaW51eCBrZXJuZWwgc291cmNlIHRoYXQgY29udGFpbnMga2VybmVsIE1ldGFkYXRhIGlzIHNhaWQgdG8gYmUKKyAgICAgICAgICAgICJsaW51eC15b2N0byBzdHlsZSIga2VybmVsIHNvdXJjZS4KKyAgICAgICAgICAgIEEgTGludXgga2VybmVsIHJlY2lwZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8uaW5jPC9maWxlbmFtZT4gaW5jbHVkZSBmaWxlIGlzIHNhaWQgdG8gYmUgYQorICAgICAgICAgICAgImxpbnV4LXlvY3RvIHN0eWxlIiByZWNpcGUuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRXZlcnkgbGludXgteW9jdG8gc3R5bGUgcmVjaXBlIG11c3QgZGVmaW5lIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPjxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdHlwaWNhbGx5IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgdXNlZCBieQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPi4KKyAgICAgICAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgdGhlIHZhcmlhYmxlIG1pZ2h0IGluc3RlYWQgcmVmZXIgdG8gdGhlCisgICAgICAgIHVuZGVybHlpbmcgcGxhdGZvcm0gb2YgdGhlIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE11bHRpcGxlIEJTUHMgY2FuIHJldXNlIHRoZSBzYW1lIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgIG5hbWUgaWYgdGhleSBhcmUgYnVpbHQgdXNpbmcgdGhlIHNhbWUgQlNQIGRlc2NyaXB0aW9uLgorICAgICAgICBUaGUgImVwMTA4LXp5bnFtcCIgYW5kICJxZW11enlucW1wIiBCU1AgY29tYmluYXRpb24KKyAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLXhpbGlueDwvZmlsZW5hbWU+CisgICAgICAgIGxheWVyIGlzIGEgZ29vZCBleGFtcGxlIG9mIHR3byBCU1BzIHVzaW5nIHRoZSBzYW1lCisgICAgICAgIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IHZhbHVlIChpLmUuICJ6eW5xbXAiKS4KKyAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC9saW5rPiBzZWN0aW9uCisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBFdmVyeSBsaW51eC15b2N0byBzdHlsZSByZWNpcGUgbXVzdCBhbHNvIGluZGljYXRlIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgYnJhbmNoIHVzZWQgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgVGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIGJyYW5jaC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPktCUkFOQ0g8L2ZpbGVuYW1lPiB2YWx1ZSB0byBkZWZpbmUgYW4KKyAgICAgICAgICAgIGFsdGVybmF0ZSBicmFuY2ggdHlwaWNhbGx5IHdpdGggYSBtYWNoaW5lIG92ZXJyaWRlIGFzIHNob3duIGhlcmUKKyAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5tZXRhLWVtZW5sb3c8L2ZpbGVuYW1lPiBsYXllcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSF9lbWVubG93LW5vZW1nZCA9ICJzdGFuZGFyZC9iYXNlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBsaW51eC15b2N0byBzdHlsZSByZWNpcGVzIGNhbiBvcHRpb25hbGx5IGRlZmluZSB0aGUgZm9sbG93aW5nCisgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz5LRVJORUxfRkVBVFVSRVM8L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTElOVVhfS0VSTkVMX1RZUEUnPkxJTlVYX0tFUk5FTF9UWVBFPC91bGluaz4KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiBkZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZQorICAgICAgICB1c2VkIGluIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LAorICAgICAgICBpdCBkZWZhdWx0cyB0byAic3RhbmRhcmQiLgorICAgICAgICBUb2dldGhlciB3aXRoCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LTUFDSElORSc+PGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gZGVmaW5lcyB0aGUgc2VhcmNoCisgICAgICAgIGFyZ3VtZW50cyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG9vbHMgdG8gZmluZCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgZGVzY3JpcHRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgd2l0aCB3aGljaCB0bworICAgICAgICBidWlsZCBvdXQgdGhlIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb24uCisgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsIGFuZCAicHJlZW1wdC1ydCIKKyAgICAgICAga2VybmVsIHR5cGVzLgorICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdrZXJuZWwtdHlwZXMnPktlcm5lbCBUeXBlczwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24ga2VybmVsIHR5cGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkLCB0aGUga2Vybi10b29scyBzZWFyY2ggZm9yIHRoZSBCU1AgZGVzY3JpcHRpb24KKyAgICAgICAgZmlsZSB0aGF0IG1vc3QgY2xvc2VseSBtYXRjaGVzIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4gdmFyaWFibGVzIHBhc3NlZCBpbiBmcm9tIHRoZQorICAgICAgICByZWNpcGUuCisgICAgICAgIFRoZSB0b29scyB1c2UgdGhlIGZpcnN0IEJTUCBkZXNjcmlwdGlvbiBpdCBmaW5kcyB0aGF0IG1hdGNoCisgICAgICAgIGJvdGggdmFyaWFibGVzLgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBtYXRjaCwgdGhleSBpc3N1ZSBhIHdhcm5pbmcgc3VjaCBhcworICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdBUk5JTkc6IENhbid0IGZpbmQgYW55IEJTUCBoYXJkd2FyZSBvciByZXF1aXJlZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgV0FSTklORzogTG9va2VkIGF0IG1ldGEvY2ZnL2Jyb2tlbi9lbWVubG93LWJyb2tlbi9oZHdfZnJhZ3MudHh0IGFuZAorICAgICAgICAgICAgICBtZXRhL2NmZy9icm9rZW4vZW1lbmxvdy1icm9rZW4vcmVxdWlyZWRfZnJhZ3MudHh0IGluIGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgbWV0YS9jZmcvYnJva2VuL2VtZW5sb3ctYnJva2VuCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiB3YXMgc2V0IHRvICJlbWVubG93LWJyb2tlbiIKKyAgICAgICAgYW5kIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHdhcyBzZXQgdG8gImJyb2tlbiIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSB0b29scyBmaXJzdCBzZWFyY2ggZm9yIHRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgdGhlbiBmb3IgdGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+LgorICAgICAgICBJZiB0aGUgdG9vbHMgY2Fubm90IGZpbmQgYSBwYXJ0aWFsIG1hdGNoLCB0aGV5IHdpbGwgdXNlIHRoZQorICAgICAgICBzb3VyY2VzIGZyb20gdGhlIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gYW5kIGFueSBjb25maWd1cmF0aW9uCisgICAgICAgIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5LRVJORUxfRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICB0byBpbmNsdWRlIGZlYXR1cmVzIChjb25maWd1cmF0aW9uIGZyYWdtZW50cywgcGF0Y2hlcywgb3IgYm90aCkgdGhhdAorICAgICAgICBhcmUgbm90IGFscmVhZHkgaW5jbHVkZWQgYnkgdGhlIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBjb21iaW5hdGlvbi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBmZWF0dXJlIHNwZWNpZmllZCBhcworICAgICAgICAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiLAorICAgICAgICBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFUyArPSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgVG8gaW5jbHVkZSBhIGZlYXR1cmUgY2FsbGVkICJjZmcvc291bmQuc2NjIiBqdXN0IGZvciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPiBtYWNoaW5lLCBzcGVjaWZ5OgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4NiA9ICIgY2ZnL3NvdW5kLnNjYyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGVudHJpZXMgaW4gPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+CisgICAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlaXIgbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwgTWV0YWRhdGEgaXRzZWxmLgorICAgICAgICBUaGUgZXhhbXBsZXMgaGVyZSBhcmUgdGFrZW4gZnJvbSB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPgorICAgICAgICBicmFuY2ggb2YgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gcmVwb3NpdG9yeS4KKyAgICAgICAgV2l0aGluIHRoYXQgYnJhbmNoLCAiZmVhdHVyZXMiIGFuZCAiY2ZnIiBhcmUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdrZXJuZWwtbWV0YWRhdGEtc3ludGF4Jz5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgdGhlc2UgdmFyaWFibGVzIGhhcyBldm9sdmVkIHNvbWUgYmV0d2VlbiB0aGUKKwkgICAgICAgIDAuOSBhbmQgMS4zIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBhc3NvY2lhdGVkCisJICAgICAgICBrZXJuLXRvb2xzIHNvdXJjZXMuCisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb25zIGluIHRoaXMgc2VjdGlvbiBhcmUgYWNjdXJhdGUgZm9yIDEuMyBhbmQgbGF0ZXIKKwkgICAgICAgIHJlbGVhc2VzIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0na2VybmVsLW1ldGFkYXRhLWxvY2F0aW9uJz4KKyAgICA8dGl0bGU+S2VybmVsIE1ldGFkYXRhIExvY2F0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBLZXJuZWwgTWV0YWRhdGEgY2FuIGJlIGRlZmluZWQgaW4gZWl0aGVyIHRoZSBrZXJuZWwgcmVjaXBlCisgICAgICAgIChyZWNpcGUtc3BhY2UpIG9yIGluIHRoZSBrZXJuZWwgdHJlZSAoaW4tdHJlZSkuCisgICAgICAgIFdoZXJlIHlvdSBjaG9vc2UgdG8gZGVmaW5lIHRoZSBNZXRhZGF0YSBkZXBlbmRzIG9uIHdoYXQgeW91IHdhbnQKKyAgICAgICAgdG8gZG8gYW5kIGhvdyB5b3UgaW50ZW5kIHRvIHdvcmsuCisgICAgICAgIFJlZ2FyZGxlc3Mgb2Ygd2hlcmUgeW91IGRlZmluZSB0aGUga2VybmVsIE1ldGFkYXRhLCB0aGUgc3ludGF4IHVzZWQKKyAgICAgICAgYXBwbGllcyBlcXVhbGx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgYXJlIHVuZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBvbmx5IHdpc2gKKyAgICAgICAgdG8gYXBwbHkgYSBjb25maWd1cmF0aW9uIGFuZCBwb3NzaWJseSBhIGNvdXBsZSBvZiBwYXRjaGVzIHByb3ZpZGVkIHRvCisgICAgICAgIHlvdSBieSBvdGhlcnMsIHRoZSByZWNpcGUtc3BhY2UgbWV0aG9kIGlzIHJlY29tbWVuZGVkLgorICAgICAgICBUaGlzIG1ldGhvZCBpcyBhbHNvIGEgZ29vZCBhcHByb2FjaCBpZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBMaW51eCBrZXJuZWwKKyAgICAgICAgc291cmNlcyB5b3UgZG8gbm90IGNvbnRyb2wgb3IgaWYgeW91IGp1c3QgZG8gbm90IHdhbnQgdG8gbWFpbnRhaW4gYQorICAgICAgICBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb24geW91ciBvd24uCisgICAgICAgIEZvciBwYXJ0aWFsIGluZm9ybWF0aW9uIG9uIGhvdyB5b3UgY2FuIGRlZmluZSBrZXJuZWwgTWV0YWRhdGEgaW4KKyAgICAgICAgdGhlIHJlY2lwZS1zcGFjZSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIENvbnZlcnNlbHksIGlmIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhIGtlcm5lbCBhbmQgYXJlIGFscmVhZHkKKyAgICAgICAgbWFpbnRhaW5pbmcgYSBMaW51eCBrZXJuZWwgR2l0IHJlcG9zaXRvcnkgb2YgeW91ciBvd24sIHlvdSBtaWdodCBmaW5kCisgICAgICAgIGl0IG1vcmUgY29udmVuaWVudCB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBNZXRhZGF0YSBpbiB0aGUgc2FtZQorICAgICAgICByZXBvc2l0b3J5IGFzIHRoZSBMaW51eCBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2FuIG1ha2UgaXRlcmF0aXZlIGRldmVsb3BtZW50IG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgbW9yZSBlZmZpY2llbnQgb3V0c2lkZSBvZiB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLXNwYWNlLW1ldGFkYXRhJz4KKyAgICAgICAgPHRpdGxlPlJlY2lwZS1TcGFjZSBNZXRhZGF0YTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHN0b3JlZCBpbiByZWNpcGUtc3BhY2UsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIGEKKyAgICAgICAgICAgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYmVsb3cKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgICAgICAgICAgRm9yIGEgbGludXgteW9jdG8gcmVjaXBlIG9yIGZvciBhIExpbnV4IGtlcm5lbCByZWNpcGUgZGVyaXZlZAorICAgICAgICAgICAgYnkgY29weWluZyBhbmQgbW9kaWZ5aW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtY29yZS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICB0byBhIHJlY2lwZSBpbiB5b3VyIGxheWVyLCA8ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHR5cGljYWxseSBzZXQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIHRyaXZpYWwgdHJlZSBvZiBrZXJuZWwgTWV0YWRhdGEKKyAgICAgICAgICAgIHN0b3JlZCBpbiByZWNpcGUtc3BhY2Ugd2l0aGluIGEgQlNQIGxheWVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLTxyZXBsYWNlYWJsZT5teV9ic3BfbGF5ZXI8L3JlcGxhY2VhYmxlPi8KKyAgICAgYC0tIHJlY2lwZXMta2VybmVsCisgICAgICAgICBgLS0gbGludXgKKyAgICAgICAgICAgICBgLS0gbGludXgteW9jdG8KKyAgICAgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICAgICAgfC0tIGJzcC5jZmcKKyAgICAgICAgICAgICAgICAgYC0tIHN0YW5kYXJkLmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHRoZSBNZXRhZGF0YSBpcyBzdG9yZWQgaW4gcmVjaXBlLXNwYWNlLCB5b3UgbXVzdCB0YWtlCisgICAgICAgICAgICBzdGVwcyB0byBlbnN1cmUgQml0QmFrZSBoYXMgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBkZWNpZGUKKyAgICAgICAgICAgIHdoYXQgZmlsZXMgdG8gZmV0Y2ggYW5kIHdoZW4gdGhleSBuZWVkIHRvIGJlIGZldGNoZWQgYWdhaW4uCisgICAgICAgICAgICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcyBvbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyB0aGVtIGFuZCBmZXRjaGVzIGFueSBmaWxlcyByZWZlcmVuY2VkIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyBieSB0aGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kcy4KKyAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGJ1bXAgdGhlIHJlY2lwZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YWx1ZSB3aGVuIGNoYW5naW5nIHRoZSBjb250ZW50IG9mIGZpbGVzIG5vdCBleHBsaWNpdGx5IGxpc3RlZAorICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0naW4tdHJlZS1tZXRhZGF0YSc+CisgICAgICAgIDx0aXRsZT5Jbi1UcmVlIE1ldGFkYXRhPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gc3RvcmVkIGluLXRyZWUsIHRoZSBrZXJuZWwgTWV0YWRhdGEgZmlsZXMgcmVzaWRlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNhbiBiZSBwcmVzZW50IGluIHRoZQorICAgICAgICAgICAgc2FtZSByZXBvc2l0b3J5IGJyYW5jaCBhcyB0aGUgc291cmNlcywKKyAgICAgICAgICAgIHN1Y2ggYXMgIm1hc3RlciIsIG9yIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gY2FuIGJlIGl0cyBvd24KKyAgICAgICAgICAgIG9ycGhhbiBicmFuY2guCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBbiBvcnBoYW4gYnJhbmNoIGluIEdpdCBpcyBhIGJyYW5jaCB3aXRoIHVuaXF1ZSBoaXN0b3J5IGFuZAorICAgICAgICAgICAgICAgIGNvbnRlbnQgdG8gdGhlIG90aGVyIGJyYW5jaGVzIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIE9ycGhhbiBicmFuY2hlcyBhcmUgdXNlZnVsIHRvIHRyYWNrIE1ldGFkYXRhIGNoYW5nZXMKKyAgICAgICAgICAgICAgICBpbmRlcGVuZGVudGx5IGZyb20gdGhlIHNvdXJjZXMgb2YgdGhlIExpbnV4IGtlcm5lbCwgd2hpbGUKKyAgICAgICAgICAgICAgICBzdGlsbCBrZWVwaW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkb2N1bWVudCwgd2Ugd2lsbCBkaXNjdXNzIGFsbAorICAgICAgICAgICAgaW4tdHJlZSBNZXRhZGF0YSBhcyByZXNpZGluZyBiZWxvdyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IGEgdHJpdmlhbCB0cmVlIG9mIE1ldGFkYXRhCisgICAgICAgICAgICBpcyBzdG9yZWQgaW4gYSBjdXN0b20gTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtZXRhLworICAgICBgLS0gY2ZnCisgICAgICAgICBgLS0ga2VybmVsLWNhY2hlCisgICAgICAgICAgICAgfC0tIGJzcC1zdGFuZGFyZC5zY2MKKyAgICAgICAgICAgICB8LS0gYnNwLmNmZworICAgICAgICAgICAgIGAtLSBzdGFuZGFyZC5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gdXNlIGEgYnJhbmNoIGRpZmZlcmVudCBmcm9tIHdoZXJlIHRoZSBzb3VyY2VzIHJlc2lkZSwKKyAgICAgICAgICAgIHNwZWNpZnkgdGhlIGJyYW5jaCBpbiB0aGUgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgIGluIHlvdXIgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS01FVEEgPSAibWV0YSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHVzZSB0aGUgc2FtZSBicmFuY2ggYXMgdGhlIHNvdXJjZXMsIHNldAorICAgICAgICAgICAgPGZpbGVuYW1lPktNRVRBPC9maWxlbmFtZT4gdG8gYW4gZW1wdHkgc3RyaW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLTUVUQSA9ICIiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCB5b3VyIG93biBzb3VyY2VzIGFuZCB3YW50IHRvIGNyZWF0ZSBhbgorICAgICAgICAgICAgb3JwaGFuIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB1c2UgdGhlc2UgY29tbWFuZHMKKyAgICAgICAgICAgIGZyb20gd2l0aGluIHlvdXIgTGludXgga2VybmVsIEdpdCByZXBvc2l0b3J5OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCAtLW9ycGhhbiBtZXRhCisgICAgICQgZ2l0IHJtIC1yZiAuCisgICAgICQgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJDcmVhdGUgb3JwaGFuIG1ldGEgYnJhbmNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgbW9kaWZ5IHRoZSBNZXRhZGF0YSBpbiB0aGUgbGludXgteW9jdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLCB5b3UgbXVzdCBub3QgZm9yZ2V0IHRvIHVwZGF0ZQorICAgICAgICAgICAgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgc3RhdGVtZW50cyBpbiB0aGUga2VybmVsJ3MgcmVjaXBlLgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91IG5lZWQgdG8gdXBkYXRlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVl9tZXRhPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gbWF0Y2ggdGhlIGNvbW1pdCBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5LTUVUQTwvZmlsZW5hbWU+IGJyYW5jaCB5b3Ugd2lzaCB0byB1c2UuCisgICAgICAgICAgICBDaGFuZ2luZyB0aGUgZGF0YSBpbiB0aGVzZSBicmFuY2hlcyBhbmQgbm90IHVwZGF0aW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+IHN0YXRlbWVudHMgdG8gbWF0Y2ggd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgICAgIGJ1aWxkIHRvIGZldGNoIGFuIG9sZGVyIGNvbW1pdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2tlcm5lbC1tZXRhZGF0YS1zeW50YXgnPgorICAgIDx0aXRsZT5LZXJuZWwgTWV0YWRhdGEgU3ludGF4PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUga2VybmVsIE1ldGFkYXRhIGNvbnNpc3RzIG9mIHRocmVlIHByaW1hcnkgdHlwZXMgb2YgZmlsZXM6CisgICAgICAgIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPgorICAgICAgICA8Zm9vdG5vdGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NjPC9maWxlbmFtZT4gc3RhbmRzIGZvciBTZXJpZXMgQ29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIENvbnRyb2wsIGJ1dCB0aGUgbmFtaW5nIGhhcyBsZXNzIHNpZ25pZmljYW5jZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSB0b29saW5nIHRoYW4gaXQgaGFkIGluIHRoZQorICAgICAgICAgICAgICAgIHBhc3QuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIHRvIGJlIGRlc2NyaXB0aW9uIGZpbGVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Zvb3Rub3RlPgorICAgICAgICBkZXNjcmlwdGlvbiBmaWxlcywgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIGFuZCBwYXRjaGVzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+IGZpbGVzIGRlZmluZSB2YXJpYWJsZXMgYW5kIGluY2x1ZGUgb3IKKyAgICAgICAgb3RoZXJ3aXNlIHJlZmVyZW5jZSBhbnkgb2YgdGhlIHRocmVlIGZpbGUgdHlwZXMuCisgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBhZ2dyZWdhdGUgYWxsIHR5cGVzIG9mIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBpbnRvCisgICAgICAgIHdoYXQgdWx0aW1hdGVseSBkZXNjcmliZXMgdGhlIHNvdXJjZXMgYW5kIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkCisgICAgICAgIHRvIGJ1aWxkIGEgTGludXgga2VybmVsIHRhaWxvcmVkIHRvIGEgc3BlY2lmaWMgbWFjaGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgdXNlZCB0byBkZWZpbmUgdHdvCisgICAgICAgIGZ1bmRhbWVudGFsIHR5cGVzIG9mIGtlcm5lbCBNZXRhZGF0YToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWF0dXJlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGZWF0dXJlcyBhZ2dyZWdhdGUgc291cmNlcyBpbiB0aGUgZm9ybSBvZiBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgIGZyYWdtZW50cyBpbnRvIGEgbW9kdWxhciByZXVzYWJsZSB1bml0LgorICAgICAgICBZb3UgY2FuIHVzZSBmZWF0dXJlcyB0byBpbXBsZW1lbnQgY29uY2VwdHVhbGx5IHNlcGFyYXRlIGtlcm5lbAorICAgICAgICBNZXRhZGF0YSBkZXNjcmlwdGlvbnMgc3VjaCBhcyBwdXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLAorICAgICAgICBzaW1wbGUgcGF0Y2hlcywgY29tcGxleCBmZWF0dXJlcywgYW5kIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgdHlwZXM8L2xpbms+IGRlZmluZSBnZW5lcmFsCisgICAgICAgIGtlcm5lbCBmZWF0dXJlcyBhbmQgcG9saWN5IHRvIGJlIHJldXNlZCBpbiB0aGUgQlNQcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQlNQcyBkZWZpbmUgaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIHdpdGgga2VybmVsCisgICAgICAgIHR5cGVzIHRvIGZvcm0gdGhlIGZpbmFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2lsbCBiZSBhc3NlbWJsZWQgYW5kIGJ1aWx0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGlsZSB0aGUga2VybmVsIE1ldGFkYXRhIHN5bnRheCBkb2VzIG5vdCBlbmZvcmNlIGFueSBsb2dpY2FsCisgICAgICAgIHNlcGFyYXRpb24gb2YgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGZlYXR1cmVzIG9yIGtlcm5lbAorICAgICAgICB0eXBlcywgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSBhIGxvZ2ljYWwgc2VwYXJhdGlvbiBvZiB0aGVzZSB0eXBlcworICAgICAgICBvZiBNZXRhZGF0YS4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBNZXRhZGF0YSBmaWxlIGhpZXJhcmNoeSBpcyByZWNvbW1lbmRlZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+YmFzZTwvcmVwbGFjZWFibGU+LworICAgICAgICBic3AvCisgICAgICAgIGNmZy8KKyAgICAgICAgZmVhdHVyZXMvCisgICAgICAgIGt0eXBlcy8KKyAgICAgICAgcGF0Y2hlcy8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJzcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIGRlc2NyaXB0aW9uczwvbGluaz4uCisgICAgICAgIFRoZSByZW1haW5pbmcgZGlyZWN0b3JpZXMgYWxsIGNvbnRhaW4gImZlYXR1cmVzIi4KKyAgICAgICAgU2VwYXJhdGluZyA8ZmlsZW5hbWU+YnNwPC9maWxlbmFtZT4gZnJvbSB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlCisgICAgICAgIGFpZHMgY29uY2VwdHVhbGl6aW5nIGludGVuZGVkIHVzYWdlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlc2UgZ3VpZGVsaW5lcyB0byBoZWxwIHBsYWNlIHlvdXIgPGZpbGVuYW1lPnNjYzwvZmlsZW5hbWU+CisgICAgICAgIGRlc2NyaXB0aW9uIGZpbGVzIHdpdGhpbiB0aGUgc3RydWN0dXJlOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdXIgZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgIG9ubHkgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBsYWNlIHRoZSBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgb25seSBzb3VyY2UtY29kZSBmaXhlcywgcGxhY2UgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhdGNoZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgeW91ciBmaWxlIGVuY2Fwc3VsYXRlcworICAgICAgICAgICAgICAgIGEgbWFqb3IgZmVhdHVyZSwgb2Z0ZW4gY29tYmluaW5nIHNvdXJjZXMgYW5kIGNvbmZpZ3VyYXRpb25zLAorICAgICAgICAgICAgICAgIHBsYWNlIHRoZSBmaWxlIGluIDxmaWxlbmFtZT5mZWF0dXJlczwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JZiB5b3VyIGZpbGUgYWdncmVnYXRlcworICAgICAgICAgICAgICAgIG5vbi1oYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBwYXRjaGVzIGluIG9yZGVyIHRvIGRlZmluZSBhCisgICAgICAgICAgICAgICAgYmFzZSBrZXJuZWwgcG9saWN5IG9yIG1ham9yIGtlcm5lbCB0eXBlIHRvIGJlIHJldXNlZCBhY3Jvc3MKKyAgICAgICAgICAgICAgICBtdWx0aXBsZSBCU1BzLCBwbGFjZSB0aGUgZmlsZSBpbiA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGVzZSBkaXN0aW5jdGlvbnMgY2FuIGVhc2lseSBiZWNvbWUgYmx1cnJlZCAtIGVzcGVjaWFsbHkgYXMKKyAgICAgICAgb3V0LW9mLXRyZWUgZmVhdHVyZXMgc2xvd2x5IG1lcmdlIHVwc3RyZWFtIG92ZXIgdGltZS4KKyAgICAgICAgQWxzbywgcmVtZW1iZXIgdGhhdCBob3cgdGhlIGRlc2NyaXB0aW9uIGZpbGVzIGFyZSBwbGFjZWQgaXMKKyAgICAgICAgYSBwdXJlbHkgbG9naWNhbCBvcmdhbml6YXRpb24gYW5kIGhhcyBubyBpbXBhY3Qgb24gdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgb2YgdGhlIGtlcm5lbCBNZXRhZGF0YS4KKyAgICAgICAgVGhlcmUgaXMgbm8gaW1wYWN0IGJlY2F1c2UgYWxsIG9mIDxmaWxlbmFtZT5jZmc8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPmZlYXR1cmVzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5wYXRjaGVzPC9maWxlbmFtZT4sIGFuZAorICAgICAgICA8ZmlsZW5hbWU+a3R5cGVzPC9maWxlbmFtZT4sIGNvbnRhaW4gImZlYXR1cmVzIiBhcyBmYXIgYXMgdGhlIGtlcm5lbAorICAgICAgICB0b29scyBhcmUgY29uY2VybmVkLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBQYXRocyB1c2VkIGluIGtlcm5lbCBNZXRhZGF0YSBmaWxlcyBhcmUgcmVsYXRpdmUgdG8KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtiYXNlJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyBlaXRoZXIKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgaWYgeW91IGFyZSBjcmVhdGluZyBNZXRhZGF0YSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWNpcGUtc3BhY2UtbWV0YWRhdGEnPnJlY2lwZS1zcGFjZTwvbGluaz4sCisgICAgICAgIG9yIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGUvPC9maWxlbmFtZT4gaWYgeW91IGFyZSBjcmVhdGluZworICAgICAgICBNZXRhZGF0YSA8bGluayBsaW5rZW5kPSdpbi10cmVlLW1ldGFkYXRhJz5pbi10cmVlPC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nY29uZmlndXJhdGlvbic+CisgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzaW1wbGVzdCB1bml0IG9mIGtlcm5lbCBNZXRhZGF0YSBpcyB0aGUgY29uZmlndXJhdGlvbi1vbmx5CisgICAgICAgICAgICBmZWF0dXJlLgorICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBwYXJhbWV0ZXJzIGluIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlCisgICAgICAgICAgICAoPGZpbGVuYW1lPi5jZmc8L2ZpbGVuYW1lPikgYW5kIGEgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICB0aGF0IGRlc2NyaWJlcyB0aGUgZnJhZ21lbnQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeW1tZXRyaWMgTXVsdGktUHJvY2Vzc2luZyAoU01QKSBmcmFnbWVudCBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkKKyAgICAgICAgICAgIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjZmcvc21wLnNjYzoKKyAgICAgICAgZGVmaW5lIEtGRUFUVVJFX0RFU0NSSVBUSU9OICJFbmFibGUgU01QIgorICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSBhbGwKKworICAgICAgICBrY29uZiBoYXJkd2FyZSBzbXAuY2ZnCisKKyAgICAgY2ZnL3NtcC5jZmc6CisgICAgICAgIENPTkZJR19TTVA9eQorICAgICAgICBDT05GSUdfU0NIRURfU01UPXkKKyAgICAgICAgIyBJbmNyZWFzZSBkZWZhdWx0IE5SX0NQVVMgZnJvbSA4IHRvIDY0IHNvIHRoYXQgcGxhdGZvcm0gd2l0aAorICAgICAgICAjIG1vcmUgdGhhbiA4IHByb2Nlc3NvcnMgY2FuIGJlIGFsbCBhY3RpdmF0ZWQgYXQgYm9vdCB0aW1lCisgICAgICAgIENPTkZJR19OUl9DUFVTPTY0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgaW5mb3JtYXRpb24gb24gY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1jb25maWctZnJhZ21lbnRzJz5DcmVhdGluZyBDb25maWd1cmF0aW9uIEZyYWdtZW50czwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgYW5kIGluCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGlzIG1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtGRUFUVVJFX0RFU0NSSVBUSU9OJz48ZmlsZW5hbWU+S0ZFQVRVUkVfREVTQ1JJUFRJT048L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICBwcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIEhpZ2hlciBsZXZlbCBrZXJuZWwgdG9vbHMgdXNlIHRoaXMgZGVzY3JpcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2NvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGlzIHVzZWQgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIGFjdHVhbCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGluIGFuIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUsIGFuZCB0aGUgImhhcmR3YXJlIiBrZXl3b3JkIGlkZW50aWZpZXMgdGhlIGZyYWdtZW50IGFzCisgICAgICAgICAgICBiZWluZyBoYXJkd2FyZSBlbmFibGluZywgYXMgb3Bwb3NlZCB0byBnZW5lcmFsIHBvbGljeSwKKyAgICAgICAgICAgIHdoaWNoIHdvdWxkIHVzZSB0aGUgIm5vbi1oYXJkd2FyZSIga2V5d29yZC4KKyAgICAgICAgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyBtYWRlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgdmFsaWRhdGlvbiB0b29scywgd2hpY2ggd2FybiB5b3UgaWYgYSBoYXJkd2FyZSBmcmFnbWVudAorICAgICAgICAgICAgb3ZlcnJpZGVzIGEgcG9saWN5IHNldCBieSBhIG5vbi1oYXJkd2FyZSBmcmFnbWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBkZXNjcmlwdGlvbiBmaWxlIGNhbiBpbmNsdWRlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gc3RhdGVtZW50cywgb25lIHBlciBmcmFnbWVudC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2dlbmVyYXRpbmctY29uZmlndXJhdGlvbi1maWxlcyc+R2VuZXJhdGluZyBDb25maWd1cmF0aW9uIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24sIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgQml0QmFrZSBjb21tYW5kIHRvIGF1ZGl0IHlvdXIKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdwYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPlBhdGNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGF0Y2ggZGVzY3JpcHRpb25zIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgZGVzY3JpcHRpb25zLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorICAgICAgICAgICAgSG93ZXZlciwgaW5zdGVhZCBvZiBhIDxmaWxlbmFtZT4uY2ZnPC9maWxlbmFtZT4gZmlsZSwgdGhlc2UKKyAgICAgICAgICAgIGRlc2NyaXB0aW9ucyB3b3JrIHdpdGggc291cmNlIHBhdGNoZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgdHlwaWNhbCBwYXRjaCBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIGZpbGUgYW5kIHRoZSBwYXRjaCBpdHNlbGY6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBhdGNoZXMvbXlwYXRjaC5zY2M6CisgICAgICAgIHBhdGNoIG15cGF0Y2gucGF0Y2gKKworICAgICBwYXRjaGVzL215cGF0Y2gucGF0Y2g6CisgICAgICAgIDxyZXBsYWNlYWJsZT50eXBpY2FsLXBhdGNoPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSB0eXBpY2FsIDxmaWxlbmFtZT4ucGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB1c2luZyA8ZmlsZW5hbWU+ZGlmZiAtTnVycDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZGVzY3JpcHRpb24gZmlsZSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBwYXRjaCBzdGF0ZW1lbnRzLAorICAgICAgICAgICAgb25lIHBlciBwYXRjaC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdmZWF0dXJlcyc+CisgICAgICAgIDx0aXRsZT5GZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZWF0dXJlcyBhcmUgY29tcGxleCBrZXJuZWwgTWV0YWRhdGEgdHlwZXMgdGhhdCBjb25zaXN0CisgICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyAoPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4pLCBwYXRjaGVzCisgICAgICAgICAgICAoPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4pLCBhbmQgcG9zc2libHkgb3RoZXIgZmVhdHVyZQorICAgICAgICAgICAgZGVzY3JpcHRpb24gZmlsZXMgKDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBhIGZlYXR1cmUgZGVzY3JpcHRpb24gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmVhdHVyZXMvbXlmZWF0dXJlLnNjYworICAgICAgICBkZWZpbmUgS0ZFQVRVUkVfREVTQ1JJUFRJT04gIkVuYWJsZSBteWZlYXR1cmUiCisKKyAgICAgICAgcGF0Y2ggMDAwMS1teWZlYXR1cmUtY29yZS5wYXRjaAorICAgICAgICBwYXRjaCAwMDAyLW15ZmVhdHVyZS1pbnRlcmZhY2UucGF0Y2gKKworICAgICAgICBpbmNsdWRlIGNmZy9teWZlYXR1cmVfZGVwZW5kZW5jeS5zY2MKKyAgICAgICAga2NvbmYgbm9uLWhhcmR3YXJlIG15ZmVhdHVyZS5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgdGhlIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmtjb25mPC9maWxlbmFtZT4gY29tbWFuZHMgYXJlIHVzZWQgYXMgd2VsbCBhcworICAgICAgICAgICAgaG93IGFuIGFkZGl0aW9uYWwgZmVhdHVyZSBkZXNjcmlwdGlvbiBmaWxlIGlzIGluY2x1ZGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUeXBpY2FsbHksIGZlYXR1cmVzIGFyZSBsZXNzIGdyYW51bGFyIHRoYW4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZnJhZ21lbnRzIGFuZCBhcmUgbW9yZSBsaWtlbHkgdGhhbiBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgYW5kIHBhdGNoZXMgdG8gYmUgdGhlIHR5cGVzIG9mIHRoaW5ncyB5b3Ugd2FudCB0byBzcGVjaWZ5CisgICAgICAgICAgICBpbiB0aGUgPGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG9mIHRoZQorICAgICAgICAgICAgTGludXgga2VybmVsIHJlY2lwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZWFybGllciBpbiB0aGUgbWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC10eXBlcyc+CisgICAgICAgIDx0aXRsZT5LZXJuZWwgVHlwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBrZXJuZWwgdHlwZSBkZWZpbmVzIGEgaGlnaC1sZXZlbCBrZXJuZWwgcG9saWN5IGJ5CisgICAgICAgICAgICBhZ2dyZWdhdGluZyBub24taGFyZHdhcmUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgd2l0aAorICAgICAgICAgICAgcGF0Y2hlcyB5b3Ugd2FudCB0byB1c2Ugd2hlbiBidWlsZGluZyBhIExpbnV4IGtlcm5lbHMgb2YgYQorICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgICAgIFN5bnRhY3RpY2FsbHksIGtlcm5lbCB0eXBlcyBhcmUgbm8gZGlmZmVyZW50IHRoYW4gZmVhdHVyZXMKKyAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgIjxsaW5rIGxpbmtlbmQ9J2ZlYXR1cmVzJz5GZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHRoZSBrZXJuZWwKKyAgICAgICAgICAgIHJlY2lwZSBzZWxlY3RzIHRoZSBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWtlcm5lbC1tZXRhZGF0YS1pbi1hLXJlY2lwZSc+VXNpbmcgS2VybmVsIE1ldGFkYXRhIGluIGEgUmVjaXBlPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICB0cmVlIGRlZmluZXMgdGhyZWUga2VybmVsIHR5cGVzOiAic3RhbmRhcmQiLAorICAgICAgICAgICAgInRpbnkiLCBhbmQgInByZWVtcHQtcnQiOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InN0YW5kYXJkIjoKKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZXMgdGhlIGdlbmVyaWMgTGludXgga2VybmVsIHBvbGljeSBvZiB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCBsaW51eC15b2N0byBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwb2xpY3kgaW5jbHVkZXMsIGFtb25nIG90aGVyIHRoaW5ncywgd2hpY2ggZmlsZQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLCBuZXR3b3JraW5nIG9wdGlvbnMsIGNvcmUga2VybmVsIGZlYXR1cmVzLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIGFuZCB0cmFjaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiJwcmVlbXB0LXJ0IjoKKyAgICAgICAgICAgICAgICAgICAgQXBwbGllcyB0aGUgPGZpbGVuYW1lPlBSRUVNUFRfUlQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwYXRjaGVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGEgcmVhbC10aW1lIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBrZXJuZWwgdHlwZSBpbmhlcml0cyBmcm9tIHRoZSAic3RhbmRhcmQiIGtlcm5lbCB0eXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+InRpbnkiOgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgYmFyZSBtaW5pbXVtIGNvbmZpZ3VyYXRpb24gbWVhbnQgdG8gc2VydmUgYXMgYQorICAgICAgICAgICAgICAgICAgICBiYXNlIGZvciB2ZXJ5IHNtYWxsIExpbnV4IGtlcm5lbHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSAidGlueSIga2VybmVsIHR5cGUgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgInRpbnkiIGtlcm5lbCB0eXBlIGRvZXMgbm90IGN1cnJlbnRseSBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIGFueSBzb3VyY2UgY2hhbmdlcywgaXQgbWlnaHQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIga2VybmVsIHR5cGUgaXMgZGVmaW5lZCBieQorICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEluY2x1ZGUgdGhpcyBrZXJuZWwgdHlwZSBmcmFnbWVudCB0byBnZXQgdGhlIHN0YW5kYXJkIGZlYXR1cmVzIGFuZAorICAgICAjIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgorCisgICAgICMgSW5jbHVkZSBhbGwgc3RhbmRhcmQgZmVhdHVyZXMKKyAgICAgaW5jbHVkZSBzdGFuZGFyZC1ub2NmZy5zY2MKKworICAgICBrY29uZiBub24taGFyZHdhcmUgc3RhbmRhcmQuY2ZnCisKKyAgICAgIyBpbmRpdmlkdWFsIGNmZyBibG9jayBzZWN0aW9uCisgICAgIGluY2x1ZGUgY2ZnL2ZzL2RldnRtcGZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9kZWJ1Z2ZzLnNjYworICAgICBpbmNsdWRlIGNmZy9mcy9idHJmcy5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0Mi5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0My5zY2MKKyAgICAgaW5jbHVkZSBjZmcvZnMvZXh0NC5zY2MKKworICAgICBpbmNsdWRlIGNmZy9uZXQvaXB2Ni5zY2MKKyAgICAgaW5jbHVkZSBjZmcvbmV0L2lwX25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvaXA2X25mLnNjYworICAgICBpbmNsdWRlIGNmZy9uZXQvYnJpZGdlLnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB3aXRoIGFueSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIGEKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlIGRlZmluaXRpb24gY2FuIGFnZ3JlZ2F0ZSBvdGhlcgorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcyB3aXRoCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGNvbW1hbmRzLgorICAgICAgICAgICAgVGhlc2UgZGVmaW5pdGlvbnMgY2FuIGFsc28gZGlyZWN0bHkgcHVsbCBpbgorICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYW5kIHBhdGNoZXMgd2l0aCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5rY29uZjwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZHMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgSXQgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBrZXJuZWwgdHlwZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBmaWxlIGNhbiBpbXBsaWNpdGx5IGRlZmluZQorICAgICAgICAgICAgdGhlIGtlcm5lbCB0eXBlIHVzaW5nIGEgPGZpbGVuYW1lPmRlZmluZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz5LVFlQRTwvdWxpbms+IG15a3R5cGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgbGluZS4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdic3AtZGVzY3JpcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPkJTUCBEZXNjcmlwdGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQlNQIGRlc2NyaXB0aW9ucyBjb21iaW5lIGtlcm5lbCB0eXBlcyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljCisgICAgICAgICAgICBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBoYXJkd2FyZS1zcGVjaWZpYyBwb3J0aW9uIGlzIHR5cGljYWxseSBkZWZpbmVkCisgICAgICAgICAgICBpbmRlcGVuZGVudGx5LCBhbmQgdGhlbiBhZ2dyZWdhdGVkIHdpdGggZWFjaCBzdXBwb3J0ZWQga2VybmVsCisgICAgICAgICAgICB0eXBlLgorICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgQlNQIGRlc2NyaXB0aW9uIHRoYXQgc3VwcG9ydHMgdGhlCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPiBtYWNoaW5lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPgorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBrY29uZiA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5jZmcKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEV2ZXJ5IEJTUCBkZXNjcmlwdGlvbiBzaG91bGQgZGVmaW5lIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtUWVBFJz48ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+LAorICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LQVJDSCc+PGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGFsbG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGlkZW50aWZ5CisgICAgICAgICAgICB0aGUgZGVzY3JpcHRpb24gYXMgbWVldGluZyB0aGUgY3JpdGVyaWEgc2V0IGJ5IHRoZSByZWNpcGUgYmVpbmcKKyAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgVGhpcyBzaW1wbGUgZXhhbXBsZSBzdXBwb3J0cyB0aGUgIm15YnNwIiBtYWNoaW5lIGZvciB0aGUgInN0YW5kYXJkIgorICAgICAgICAgICAga2VybmVsIGFuZCB0aGUgImkzODYiIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCBhIGhhcmQgbGluayBiZXR3ZWVuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgYW5kIGEga2VybmVsIHR5cGUKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uIGZpbGUgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICBUaHVzLCBpZiB5b3UgZG8gbm90IGhhdmUga2VybmVsIHR5cGVzIGRlZmluZWQgaW4geW91ciBrZXJuZWwKKyAgICAgICAgICAgIE1ldGFkYXRhLCB5b3Ugb25seSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+PGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRoZSA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgIEJTUCBkZXNjcmlwdGlvbiBmaWxlIG1hdGNoLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRnV0dXJlIHZlcnNpb25zIG9mIHRoZSB0b29saW5nIG1ha2UgdGhlIHNwZWNpZmljYXRpb24gb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S1RZUEU8L2ZpbGVuYW1lPiBpbiB0aGUgQlNQIG9wdGlvbmFsLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZGlkIHdhbnQgdG8gc2VwYXJhdGUgeW91ciBrZXJuZWwgcG9saWN5IGZyb20geW91cgorICAgICAgICAgICAgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgeW91IGNvdWxkIGRvIHNvIGJ5IHNwZWNpZnlpbmcgYSBrZXJuZWwKKyAgICAgICAgICAgIHR5cGUsIHN1Y2ggYXMgInN0YW5kYXJkIiBhbmQgaW5jbHVkaW5nIHRoYXQgZGVzY3JpcHRpb24gZmlsZQorICAgICAgICAgICAgaW4gdGhlIEJTUCBkZXNjcmlwdGlvbiBmaWxlLgorICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0na2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG1pZ2h0IGFsc28gaGF2ZSBtdWx0aXBsZSBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IHlvdQorICAgICAgICAgICAgYWdncmVnYXRlIGludG8gYSBzaW5nbGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gZmlsZSB0aGF0IHlvdQorICAgICAgICAgICAgY291bGQgaW5jbHVkZSBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uIGZpbGUsIHJhdGhlciB0aGFuIHJlZmVyZW5jaW5nCisgICAgICAgICAgICBhIHNpbmdsZSA8ZmlsZW5hbWU+LmNmZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPi5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIHN0YW5kYXJkLnNjYworICAgICAgICBpbmNsdWRlIDxyZXBsYWNlYWJsZT5teWJzcDwvcmVwbGFjZWFibGU+LWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGZpbGVuYW1lPnN0YW5kYXJkLnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBhZ2dyZWdhdGVzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmcmFnbWVudHMsIHBhdGNoZXMsIGFuZAorICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBtYWtlIHVwIHlvdXIgc3RhbmRhcmQga2VybmVsIHBvbGljeSB3aGVyZWFzCisgICAgICAgICAgICA8cmVwbGFjZWFibGU+bXlic3A8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4taHcuc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZXMgYWxsIHRob3NlIG5lY2Vzc2FyeQorICAgICAgICAgICAgdG8gc3VwcG9ydCB0aGUgaGFyZHdhcmUgYXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAgICAgPHJlcGxhY2VhYmxlPm15YnNwPC9yZXBsYWNlYWJsZT4gbWFjaGluZS4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnJlYWsgYSBjb21wbGV0ZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGludG8gdGhlIHZhcmlvdXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTWFueSByZWFsLXdvcmxkIGV4YW1wbGVzIGFyZSBtb3JlIGNvbXBsZXguCisgICAgICAgICAgICBMaWtlIGFueSBvdGhlciA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUsIEJTUAorICAgICAgICAgICAgZGVzY3JpcHRpb25zIGNhbiBhZ2dyZWdhdGUgZmVhdHVyZXMuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgTWlubm93IEJTUCBkZWZpbml0aW9uIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICBHaXQgcmVwb3NpdG9yeToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LnNjYzoKKyAgICAgICAgaW5jbHVkZSBjZmcveDg2LnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL2VnMjB0L2VnMjB0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy9kbWFlbmdpbmUuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcG93ZXIvaW50ZWwuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvZWhjaS1oY2Quc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvdXNiL29oY2ktaGNkLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3VzYi91c2ItZ2FkZ2V0cy5zY2MKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy91c2IvdG91Y2hzY3JlZW4tY29tcG9zaXRlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ocGV0LnNjYworICAgICAgICBpbmNsdWRlIGNmZy90aW1lci9ydGMuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbGVkcy9sZWRzLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NwaS9zcGlkZXYuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvaTJjL2kyY2Rldi5zY2MKKworICAgICAgICAjIEVhcmx5cHJpbnRrIGFuZCBwb3J0IGRlYnVnIHJlcXVpcmVzIDgyNTAKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgY2ZnLzgyNTAuY2ZnCisKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LmNmZworICAgICAgICBrY29uZiBoYXJkd2FyZSBtaW5ub3ctZGV2LmNmZworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiBmaWxlIGluY2x1ZGVzCisgICAgICAgICAgICBhIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bWlubm93LmNmZzwvZmlsZW5hbWU+KSBzcGVjaWZpYyB0byB0aGUgTWlubm93CisgICAgICAgICAgICBCU1AgYXMgd2VsbCBhcyBzZXZlcmFsIG1vcmUgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGVuYWJsaW5nIGhhcmR3YXJlIGZvdW5kIG9uIHRoZQorICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgIFRoaXMgZGVzY3JpcHRpb24gZmlsZSBpcyB0aGVuIGluY2x1ZGVkIGluIGVhY2ggb2YgdGhlIHRocmVlCisgICAgICAgICAgICAibWlubm93IiBkZXNjcmlwdGlvbiBmaWxlcyBmb3IgdGhlIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMKKyAgICAgICAgICAgIChpLmUuICJzdGFuZGFyZCIsICJwcmVlbXB0LXJ0IiwgYW5kICJ0aW55IikuCisgICAgICAgICAgICBDb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAic3RhbmRhcmQiIGtlcm5lbAorICAgICAgICAgICAgdHlwZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbWlubm93LXN0YW5kYXJkLnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKworICAgICAgICBpbmNsdWRlIGt0eXBlcy9zdGFuZGFyZAorCisgICAgICAgIGluY2x1ZGUgbWlubm93LnNjYworCisgICAgICAgICMgRXh0cmEgbWlubm93IGNvbmZpZ3MgYWJvdmUgdGhlIG1pbmltYWwgZGVmaW5lZCBpbiBtaW5ub3cuc2NjCisgICAgICAgIGluY2x1ZGUgY2ZnL2VmaS1leHQuc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvbWVkaWEvbWVkaWEtYWxsLnNjYworICAgICAgICBpbmNsdWRlIGZlYXR1cmVzL3NvdW5kL3NuZF9oZGFfaW50ZWwuc2NjCisKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHNob3VsZCByZWFsbHkgYmUgaW4gc3RhbmRhcmQuc2NjCisgICAgICAgICMgVVNCIGxpdmUtaW1hZ2Ugc3VwcG9ydAorICAgICAgICBpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworICAgICAgICBpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCisKKyAgICAgICAgIyBCYXNpYyBwcm9maWxpbmcKKyAgICAgICAgaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCisgICAgICAgIGluY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKKworICAgICAgICAjIFJlcXVlc3RlZCBkcml2ZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBzY2MKKyAgICAgICAga2NvbmYgaGFyZHdhcmUgbWlubm93LWRyaXZlcnMtZXh0cmEuY2ZnCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBjb21tYW5kIG1pZHdheSB0aHJvdWdoIHRoZSBmaWxlCisgICAgICAgICAgICBpbmNsdWRlcyB0aGUgPGZpbGVuYW1lPm1pbm5vdy5zY2M8L2ZpbGVuYW1lPiBkZXNjcmlwdGlvbiB0aGF0CisgICAgICAgICAgICBkZWZpbmVzIGFsbCBoYXJkd2FyZSBlbmFibGVtZW50cyBmb3IgdGhlIEJTUCB0aGF0IGlzIGNvbW1vbiB0byBhbGwKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgIFVzaW5nIHRoaXMgY29tbWFuZCBzaWduaWZpY2FudGx5IHJlZHVjZXMgZHVwbGljYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyBjb25zaWRlciB0aGUgIm1pbm5vdyIgZGVzY3JpcHRpb24gZm9yIHRoZSAidGlueSIga2VybmVsIHR5cGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1pbm5vdy10aW55LnNjYzoKKyAgICAgICAgZGVmaW5lIEtNQUNISU5FIG1pbm5vdworICAgICAgICBkZWZpbmUgS1RZUEUgdGlueQorICAgICAgICBkZWZpbmUgS0FSQ0ggaTM4NgorCisgICAgICAgIGluY2x1ZGUga3R5cGVzL3RpbnkKKworICAgICAgICBpbmNsdWRlIG1pbm5vdy5zY2MKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEFzIHlvdSBtaWdodCBleHBlY3QsIHRoZSAidGlueSIgZGVzY3JpcHRpb24gaW5jbHVkZXMgcXVpdGUgYQorICAgICAgICAgICAgYml0IGxlc3MuCisgICAgICAgICAgICBJbiBmYWN0LCBpdCBpbmNsdWRlcyBvbmx5IHRoZSBtaW5pbWFsIHBvbGljeSBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgInRpbnkiIGtlcm5lbCB0eXBlIGFuZCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlZAorICAgICAgICAgICAgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUgYWxvbmcgd2l0aCB0aGUgbW9zdCBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mCisgICAgICAgICAgICB0aGUgc3lzdGVtIGFzIGRlZmluZWQgaW4gdGhlIGJhc2UgIm1pbm5vdyIgZGVzY3JpcHRpb24gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm90aWNlIGFnYWluIHRoZSB0aHJlZSBjcml0aWNhbCB2YXJpYWJsZXM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktBUkNIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBPZiB0aGVzZSB2YXJpYWJsZXMsIG9ubHkgdGhlIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+IGhhcyBjaGFuZ2VkLgorICAgICAgICAgICAgSXQgaXMgbm93IHNldCB0byAidGlueSIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdvcmdhbml6aW5nLXlvdXItc291cmNlJz4KKyAgICA8dGl0bGU+T3JnYW5pemluZyBZb3VyIFNvdXJjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgTWFueSByZWNpcGVzIGJhc2VkIG9uIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgcmVjaXBlIHVzZSBMaW51eCBrZXJuZWwgc291cmNlcyB0aGF0IGhhdmUgb25seSBhIHNpbmdsZQorICAgICAgICBicmFuY2ggLSAibWFzdGVyIi4KKyAgICAgICAgVGhpcyB0eXBlIG9mIHJlcG9zaXRvcnkgc3RydWN0dXJlIGlzIGZpbmUgZm9yIGxpbmVhciBkZXZlbG9wbWVudAorICAgICAgICBzdXBwb3J0aW5nIGEgc2luZ2xlIG1hY2hpbmUgYW5kIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgSG93ZXZlciwgaWYgeW91IHdvcmsgd2l0aCBtdWx0aXBsZSBib2FyZHMgYW5kIGFyY2hpdGVjdHVyZXMsCisgICAgICAgIGEga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5IHdpdGggbXVsdGlwbGUgYnJhbmNoZXMgaXMgbW9yZQorICAgICAgICBlZmZpY2llbnQuCisgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBuZWVkIGEgc2VyaWVzIG9mIHBhdGNoZXMgZm9yIG9uZSBib2FyZCB0byBib290LgorICAgICAgICBTb21ldGltZXMsIHRoZXNlIHBhdGNoZXMgYXJlIHdvcmtzLWluLXByb2dyZXNzIG9yIGZ1bmRhbWVudGFsbHkgd3JvbmcsCisgICAgICAgIHlldCB0aGV5IGFyZSBzdGlsbCBuZWNlc3NhcnkgZm9yIHNwZWNpZmljIGJvYXJkcy4KKyAgICAgICAgSW4gdGhlc2Ugc2l0dWF0aW9ucywgeW91IG1vc3QgbGlrZWx5IGRvIG5vdCB3YW50IHRvIGluY2x1ZGUgdGhlc2UKKyAgICAgICAgcGF0Y2hlcyBpbiBldmVyeSBrZXJuZWwgeW91IGJ1aWxkIChpLmUuIGhhdmUgdGhlIHBhdGNoZXMgYXMgcGFydCBvZgorICAgICAgICB0aGUgbG9uZSAibWFzdGVyIiBicmFuY2gpLgorICAgICAgICBJdCBpcyBzaXR1YXRpb25zIGxpa2UgdGhlc2UgdGhhdCBnaXZlIHJpc2UgdG8gbXVsdGlwbGUgYnJhbmNoZXMgdXNlZAorICAgICAgICB3aXRoaW4gYSBMaW51eCBrZXJuZWwgc291cmNlcyBHaXQgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgUmVwb3NpdG9yeSBvcmdhbml6YXRpb24gc3RyYXRlZ2llcyBleGlzdCB0aGF0IG1heGltaXplIHNvdXJjZSByZXVzZSwKKyAgICAgICAgcmVtb3ZlIHJlZHVuZGFuY3ksIGFuZCBsb2dpY2FsbHkgb3JkZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJlc2VudHMgc3RyYXRlZ2llcyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmNhcHN1bGF0aW5nIHBhdGNoZXMgaW4gYSBmZWF0dXJlIGRlc2NyaXB0aW9uCisgICAgICAgICAgICAgICAgYW5kIG9ubHkgaW5jbHVkaW5nIHRoZSBwYXRjaGVzIGluIHRoZSBCU1AgZGVzY3JpcHRpb25zIG9mCisgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2FibGUgYm9hcmRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgbWFjaGluZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgYXBwbHlpbmcgdGhlIHBhdGNoZXMgb24gdGhhdAorICAgICAgICAgICAgICAgIGJyYW5jaCBvbmx5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIGEgZmVhdHVyZSBicmFuY2ggaW4geW91cgorICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeSBhbmQgbWVyZ2luZyB0aGF0IGJyYW5jaCBpbnRvIHlvdXIKKyAgICAgICAgICAgICAgICBCU1Agd2hlbiBuZWVkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgYXBwcm9hY2ggeW91IHRha2UgaXMgZW50aXJlbHkgdXAgdG8geW91CisgICAgICAgIGFuZCBkZXBlbmRzIG9uIHdoYXQgd29ya3MgYmVzdCBmb3IgeW91ciBkZXZlbG9wbWVudCBtb2RlbC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZW5jYXBzdWxhdGluZy1wYXRjaGVzJz4KKyAgICAgICAgPHRpdGxlPkVuY2Fwc3VsYXRpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBpZiB5b3UgYXJlIHJldXNpbmcgcGF0Y2hlcyBmcm9tIGFuIGV4dGVybmFsIHRyZWUgYW5kIGFyZSBub3QKKyAgICAgICAgICAgIHdvcmtpbmcgb24gdGhlIHBhdGNoZXMsIHlvdSBtaWdodCBmaW5kIHRoZSBlbmNhcHN1bGF0ZWQgZmVhdHVyZQorICAgICAgICAgICAgdG8gYmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBHaXZlbiB0aGlzIHNjZW5hcmlvLCB5b3UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGFueSBicmFuY2hlcyBpbiB0aGUKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgUmF0aGVyLCB5b3UganVzdCB0YWtlIHRoZSBzdGF0aWMgcGF0Y2hlcyB5b3UgbmVlZCBhbmQgZW5jYXBzdWxhdGUKKyAgICAgICAgICAgIHRoZW0gd2l0aGluIGEgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24sIHlvdSBzaW1wbHkgaW5jbHVkZSB0aGF0IGludG8KKyAgICAgICAgICAgIHRoZSBCU1AgZGVzY3JpcHRpb24gYXMgZGVzY3JpYmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgcGF0Y2hlcyBhbmQgQlNQCisgICAgICAgICAgICBkZXNjcmlwdGlvbnMgaW4gdGhlICI8bGluayBsaW5rZW5kPSdwYXRjaGVzJz5QYXRjaGVzPC9saW5rPiIgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtYWNoaW5lLWJyYW5jaGVzJz4KKyAgICAgICAgPHRpdGxlPk1hY2hpbmUgQnJhbmNoZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBtYWNoaW5lcyBhbmQgYXJjaGl0ZWN0dXJlcyB0byBzdXBwb3J0LAorICAgICAgICAgICAgb3IgeW91IGFyZSBhY3RpdmVseSB3b3JraW5nIG9uIGJvYXJkIHN1cHBvcnQsIGl0IGlzIG1vcmUKKyAgICAgICAgICAgIGVmZmljaWVudCB0byBjcmVhdGUgYnJhbmNoZXMgaW4gdGhlIHJlcG9zaXRvcnkgYmFzZWQgb24KKyAgICAgICAgICAgIGluZGl2aWR1YWwgbWFjaGluZXMuCisgICAgICAgICAgICBIYXZpbmcgbWFjaGluZSBicmFuY2hlcyBhbGxvd3MgY29tbW9uIHNvdXJjZSB0byByZW1haW4gaW4gdGhlCisgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggd2l0aCBhbnkgZmVhdHVyZXMgc3BlY2lmaWMgdG8gYSBtYWNoaW5lIHN0b3JlZAorICAgICAgICAgICAgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUgYnJhbmNoLgorICAgICAgICAgICAgVGhpcyBvcmdhbml6YXRpb24gbWV0aG9kIGZyZWVzIHlvdSBmcm9tIGNvbnRpbnVhbGx5IHJlaW50ZWdyYXRpbmcKKyAgICAgICAgICAgIHlvdXIgcGF0Y2hlcyBpbnRvIGEgZmVhdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBhIG5ldyBicmFuY2gsIHlvdSBjYW4gc2V0IHVwIHlvdXIga2VybmVsIE1ldGFkYXRhCisgICAgICAgICAgICB0byB1c2UgdGhlIGJyYW5jaCBhIGNvdXBsZSBkaWZmZXJlbnQgd2F5cy4KKyAgICAgICAgICAgIEluIHRoZSByZWNpcGUsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbmV3IGJyYW5jaCBhcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5LQlJBTkNIPC9maWxlbmFtZT4gdG8gdXNlIGZvciB0aGUgYm9hcmQgYXMKKyAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCUkFOQ0ggPSAibXluZXdicmFuY2giCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBbm90aGVyIG1ldGhvZCBpcyB0byB1c2UgdGhlIDxmaWxlbmFtZT5icmFuY2g8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBpbiB0aGUgQlNQIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKworICAgICAgICBpbmNsdWRlIG15YnNwLWh3LnNjYworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZmluZAorICAgICAgICAgICAgeW91cnNlbGYgd2l0aCBudW1lcm91cyBicmFuY2hlcywgeW91IG1pZ2h0IGNvbnNpZGVyIHVzaW5nIGEKKyAgICAgICAgICAgIGhpZXJhcmNoaWNhbCBicmFuY2hpbmcgc3lzdGVtIHNpbWlsYXIgdG8gd2hhdCB0aGUgbGludXgteW9jdG8gTGludXgKKyAgICAgICAgICAgIGtlcm5lbCByZXBvc2l0b3JpZXMgdXNlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4vPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGFkIHR3byBrZXJuZWwgdHlwZXMsICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgZm9yCisgICAgICAgICAgICBpbnN0YW5jZSwgdGhyZWUgbWFjaGluZXMsIGFuZCA8cmVwbGFjZWFibGU+Y29tbW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5teWRpcjwvZmlsZW5hbWU+LCB0aGUgYnJhbmNoZXMgaW4geW91cgorICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnkgbWlnaHQgbG9vayBsaWtlIHRoaXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG15ZGlyL2Jhc2UKKyAgICAgbXlkaXIvc3RhbmRhcmQvYmFzZQorICAgICBteWRpci9zdGFuZGFyZC9tYWNoaW5lX2EKKyAgICAgbXlkaXIvc3RhbmRhcmQvbWFjaGluZV9iCisgICAgIG15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYworICAgICBteWRpci9zbWFsbC9iYXNlCisgICAgIG15ZGlyL3NtYWxsL21hY2hpbmVfYQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIG9yZ2FuaXphdGlvbiBjYW4gaGVscCBjbGFyaWZ5IHRoZSBicmFuY2ggcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPm15ZGlyL3N0YW5kYXJkL21hY2hpbmVfYTwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbmNsdWRlcyBldmVyeXRoaW5nIGluIDxmaWxlbmFtZT5teWRpci9iYXNlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+bXlkaXIvc3RhbmRhcmQvYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlICJzdGFuZGFyZCIgYW5kICJzbWFsbCIgYnJhbmNoZXMgYWRkIHNvdXJjZXMgc3BlY2lmaWMgdG8gdGhvc2UKKyAgICAgICAgICAgIGtlcm5lbCB0eXBlcyB0aGF0IGZvciB3aGF0ZXZlciByZWFzb24gYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgICAgICAgICAgICBvdGhlciBicmFuY2hlcy4KKyAgICAgICAgICAgIDxub3RlPlRoZSAiYmFzZSIgYnJhbmNoZXMgYXJlIGFuIGFydGlmYWN0IG9mIHRoZSB3YXkgR2l0IG1hbmFnZXMKKyAgICAgICAgICAgICAgICBpdHMgZGF0YSBpbnRlcm5hbGx5IG9uIHRoZSBmaWxlc3lzdGVtOiBHaXQgd2lsbCBub3QgYWxsb3cgeW91CisgICAgICAgICAgICAgICAgdG8gdXNlIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teWRpci9zdGFuZGFyZC9tYWNoaW5lX2E8L2ZpbGVuYW1lPiBiZWNhdXNlIGl0CisgICAgICAgICAgICAgICAgd291bGQgaGF2ZSB0byBjcmVhdGUgYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBuYW1lZCAic3RhbmRhcmQiLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ZlYXR1cmUtYnJhbmNoZXMnPgorICAgICAgICA8dGl0bGU+RmVhdHVyZSBCcmFuY2hlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBuZXcgZmVhdHVyZXMsIGl0IGNhbiBiZSBtb3JlCisgICAgICAgICAgICBlZmZpY2llbnQgdG8gd29yayB3aXRoIHRoYXQgZmVhdHVyZSBhcyBhIGJyYW5jaCwgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgIGFzIGEgc2V0IG9mIHBhdGNoZXMgdGhhdCBoYXZlIHRvIGJlIHJlZ3VsYXJseSB1cGRhdGVkLgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIHByb3ZpZGUgZm9yIHRoaXMgd2l0aAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBtZXJnZSBhIGZlYXR1cmUgYnJhbmNoIGludG8gYSBCU1AsIGluc2VydCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgbWVyZ2U8L2ZpbGVuYW1lPiBjb21tYW5kIGFmdGVyIGFueQorICAgICAgICAgICAgPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+IGNvbW1hbmRzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBteWJzcC5zY2M6CisgICAgICAgIGRlZmluZSBLTUFDSElORSBteWJzcAorICAgICAgICBkZWZpbmUgS1RZUEUgc3RhbmRhcmQKKyAgICAgICAgZGVmaW5lIEtBUkNIIGkzODYKKyAgICAgICAgaW5jbHVkZSBzdGFuZGFyZC5zY2MKKworICAgICAgICBicmFuY2ggbXluZXdicmFuY2gKKyAgICAgICAgZ2l0IG1lcmdlIG15ZmVhdHVyZQorCisgICAgICAgIGluY2x1ZGUgbXlic3AtaHcuc2NjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzY2MtcmVmZXJlbmNlJz4KKyAgICA8dGl0bGU+U0NDIERlc2NyaXB0aW9uIEZpbGUgUmVmZXJlbmNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBicmllZiByZWZlcmVuY2UgZm9yIHRoZSBjb21tYW5kcyB5b3UgY2FuIHVzZQorICAgICAgICB3aXRoaW4gYW4gU0NDIGRlc2NyaXB0aW9uIGZpbGUgKDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4pOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5icmFuY2ggW3JlZl08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IGJyYW5jaCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBicmFuY2gKKyAgICAgICAgICAgICAgICAodHlwaWNhbGx5IDxmaWxlbmFtZT4ke0tUWVBFfTwvZmlsZW5hbWU+KSB1c2luZworICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoLCBvciAicmVmIiBpZiBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRlZmluZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIERlZmluZXMgdmFyaWFibGVzLCBzdWNoIGFzIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LVFlQRTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPktGRUFUVVJFX0RFU0NSSVBUSU9OPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluY2x1ZGUgU0NDX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBJbmNsdWRlcyBhbiBTQ0MgZmlsZSBpbiB0aGUgY3VycmVudCBmaWxlLgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIGlzIHBhcnNlZCBhcyBpZiB5b3UgaGFkIGluc2VydGVkIGl0IGlubGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+a2NvbmYgW2hhcmR3YXJlfG5vbi1oYXJkd2FyZV0gQ0ZHX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBRdWV1ZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZvciBtZXJnaW5nIGludG8gdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgTGludXggPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5naXQgbWVyZ2UgR0lUX0JSQU5DSDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIE1lcmdlcyB0aGUgZmVhdHVyZSBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBhdGNoIFBBVENIX0ZJTEU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBcHBsaWVzIHRoZSBwYXRjaCB0byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29tbW9uLnhtbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjODJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwKQEAgLTAsMCArMSwxMDMzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1jb21tb24nPgorCis8dGl0bGU+Q29tbW9uIFRhc2tzPC90aXRsZT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIHByZXNlbnRzIHNldmVyYWwgY29tbW9uIHRhc2tzIHlvdSBwZXJmb3JtIHdoZW4geW91CisgICAgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IExpbnV4IGtlcm5lbC4KKyAgICBUaGVzZSB0YXNrcyBpbmNsdWRlIHByZXBhcmluZyBhIGxheWVyLCBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgcmVjaXBlLAorICAgIGl0ZXJhdGl2ZSBkZXZlbG9wbWVudCwgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMsIGFuZCBpbmNvcnBvcmF0aW5nCisgICAgb3V0LW9mLXRyZWUgbW9kdWxlcy4KKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIGV4YW1wbGVzIHByZXNlbnRlZCBpbiB0aGlzIGNoYXB0ZXIgd29yayB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIDEuMi4yIFJlbGVhc2UgYW5kIGZvcndhcmQuCisgICAgPC9ub3RlPgorPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+CisgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhbmQgUHJlcGFyaW5nIGEgTGF5ZXI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGFyZSBnb2luZyB0byBiZSBtb2RpZnlpbmcga2VybmVsIHJlY2lwZXMsIGl0IGlzIHJlY29tbWVuZGVkCisgICAgICAgICAgICB0aGF0IHlvdSBjcmVhdGUgYW5kIHByZXBhcmUgeW91ciBvd24gbGF5ZXIgaW4gd2hpY2ggdG8gZG8geW91cgorICAgICAgICAgICAgd29yay4KKyAgICAgICAgICAgIFlvdXIgbGF5ZXIgY29udGFpbnMgaXRzIG93bgorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIGFwcGVuZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPikgYW5kIHByb3ZpZGVzIGEgY29udmVuaWVudAorICAgICAgICAgICAgbWVjaGFuaXNtIHRvIGNyZWF0ZSB5b3VyIG93biByZWNpcGUgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gaG93IHRvIGNyZWF0ZSBhbmQgd29yayB3aXRoIGxheWVycywgc2VlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiBsYXllcnMgYW5kIGhvdyB0byBjcmVhdGUgbGF5ZXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4iPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc2V0LXVwLXlvdXItbGF5ZXItZm9yLXRoZS1idWlsZCc+U2V0IFVwIFlvdXIgTGF5ZXIgZm9yIHRoZSBCdWlsZDwvdWxpbms+IiBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uIHNldHRpbmcgdXAgYSBsYXllciBmb3Iga2VybmVsCisgICAgICAgICAgICAgICAgICAgIGRldmVsb3BtZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+CisgICAgICAgIDx0aXRsZT5Nb2RpZnlpbmcgYW4gRXhpc3RpbmcgUmVjaXBlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG1hbnkgY2FzZXMsIHlvdSBjYW4gY3VzdG9taXplIGFuIGV4aXN0aW5nIGxpbnV4LXlvY3RvIHJlY2lwZSB0bworICAgICAgICAgICAgbWVldCB0aGUgbmVlZHMgb2YgeW91ciBwcm9qZWN0LgorICAgICAgICAgICAgRWFjaCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEgZmV3IExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVjaXBlcyBmcm9tIHdoaWNoIHlvdSBjYW4gY2hvb3NlLgorICAgICAgICAgICAgVGhlc2UgYXJlIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUgY2FuIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0aW5nIHRoZSBhcHBlbmQgZmlsZTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcHBseWluZyBwYXRjaGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIG1vZGlmeWluZyBhbiBleGlzdGluZyByZWNpcGUsIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkCisgICAgICAgICAgICBhIG1pbmltYWwsIGN1c3RvbSBsYXllciBmcm9tIHdoaWNoIHlvdSBjYW4gd29yay4KKyAgICAgICAgICAgIFNlZSB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NyZWF0aW5nLWFuZC1wcmVwYXJpbmctYS1sYXllcic+Q3JlYXRpbmcgYW5kIFByZXBhcmluZyBhIExheWVyPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIHNvbWUgZ2VuZXJhbCByZXNvdXJjZXMuCisgICAgICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NldC11cC15b3VyLWxheWVyLWZvci10aGUtYnVpbGQnPlNldCBVcCBZb3VyIExheWVyIGZvciB0aGUgQnVpbGQ8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBhIGRldGFpbGVkCisgICAgICAgICAgICBleGFtcGxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NyZWF0aW5nLXRoZS1hcHBlbmQtZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgdGhlIEFwcGVuZCBGaWxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNyZWF0ZSB0aGlzIGZpbGUgaW4geW91ciBjdXN0b20gbGF5ZXIuCisgICAgICAgICAgICAgICAgWW91IGFsc28gbmFtZSBpdCBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgbGludXgteW9jdG8gcmVjaXBlCisgICAgICAgICAgICAgICAgeW91IGFyZSB1c2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBtb2RpZnlpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlLCB0aGUgYXBwZW5kIGZpbGUgd2lsbCB0eXBpY2FsbHkgYmUgbG9jYXRlZCBhcyBmb2xsb3dzCisgICAgICAgICAgICAgICAgd2l0aGluIHlvdXIgY3VzdG9tIGxheWVyOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnlvdXItbGF5ZXI8L3JlcGxhY2VhYmxlPi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBhcHBlbmQgZmlsZSBzaG91bGQgaW5pdGlhbGx5IGV4dGVuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHNlYXJjaCBwYXRoIGJ5IHByZXBlbmRpbmcgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHlvdXIKKyAgICAgICAgICAgICAgICBmaWxlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBwYXRoIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LyR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZXhwYW5kcyB0byAibGludXgteW9jdG8iIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhpcworICAgICAgICAgICAgICAgIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhbnkgbmV3IGZpbGVzIHRoYXQgbW9kaWZ5IHRoZSBrZXJuZWwgcmVjaXBlIGFuZCB5b3UKKyAgICAgICAgICAgICAgICBoYXZlIGV4dGVuZGVkIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgcGxhY2UgdGhlIGZpbGVzIGluIHlvdXIgbGF5ZXIgaW4gdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGFyZWE6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+eW91ci1sYXllcjwvcmVwbGFjZWFibGU+L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT5JZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBuZXcgbWFjaGluZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKEJTUCksIGJlIHN1cmUgdG8gcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdhcHBseWluZy1wYXRjaGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5BcHBseWluZyBQYXRjaGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSBzaW5nbGUgcGF0Y2ggb3IgYSBzbWFsbCBzZXJpZXMgb2YgcGF0Y2hlcworICAgICAgICAgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UsIHlvdQorICAgICAgICAgICAgICAgIGNhbiBkbyBzbyBqdXN0IGFzIHlvdSB3b3VsZCB3aXRoIGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgWW91IGZpcnN0IGNvcHkgdGhlIHBhdGNoZXMgdG8gdGhlIHBhdGggYWRkZWQgdG8KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIGluIHlvdXIgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYXMgZGVzY3JpYmVkIGluCisgICAgICAgICAgICAgICAgdGhlIHByZXZpb3VzIHNlY3Rpb24sIGFuZCB0aGVuIHJlZmVyZW5jZSB0aGVtIGluCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHN0YXRlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFwcGx5IGEgdGhyZWUtcGF0Y2ggc2VyaWVzIGJ5IGFkZGluZyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgbGluZXMgdG8geW91ciBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1maXJzdC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLXNlY29uZC1jaGFuZ2UucGF0Y2giCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAzLXRoaXJkLWNoYW5nZS5wYXRjaCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIG5leHQgdGltZSB5b3UgcnVuIEJpdEJha2UgdG8gYnVpbGQgdGhlIExpbnV4IGtlcm5lbCwKKyAgICAgICAgICAgICAgICBCaXRCYWtlIGRldGVjdHMgdGhlIGNoYW5nZSBpbiB0aGUgcmVjaXBlIGFuZCBmZXRjaGVzIGFuZAorICAgICAgICAgICAgICAgIGFwcGxpZXMgdGhlIHBhdGNoZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gcGF0Y2ggdGhlIGtlcm5lbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwYXRjaGluZy10aGUta2VybmVsJz5QYXRjaGluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBtYWtlIHdob2xlc2FsZSBvciBpbmNyZW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSB1c2VkIGZvciB0aGUgZXZlbnR1YWwKKyAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBieSBpbmNsdWRpbmcgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIGFuZCBieSBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHRvIGJlIGFwcGxpZWQgdG8gdGhhdCBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBhIGNvbXBsZXRlLCB3b3JraW5nIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlIHlvdSB3YW50IHRvIHVzZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIGFzIGJlZm9yZSwgY29weQorICAgICAgICAgICAgICAgIHRoYXQgZmlsZSB0byB0aGUgYXBwcm9wcmlhdGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaW4geW91ciBsYXllcidzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGFuZCByZW5hbWUgdGhlIGNvcGllZCBmaWxlIHRvICJkZWZjb25maWciLgorICAgICAgICAgICAgICAgIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZSBsaW51eC15b2N0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmJhcHBlbmQ8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgbGF5ZXI6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly9kZWZjb25maWciCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gaG93IHRvCisgICAgICAgICAgICAgICAgc2VhcmNoIGZvciB0aGUgZmlsZSwgd2hpbGUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBleHRlbmRzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgKHNlYXJjaCBkaXJlY3RvcmllcykgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiBkaXJlY3RvcnkgeW91IGNyZWF0ZWQgdG8gaG9sZCB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0aGUgY29uZmlndXJhdGlvbnMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBiZWZvcmUgYXBwbHlpbmcgYW55CisgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBjb25maWd1cmF0aW9uIGZyYWdtZW50cy4KKyAgICAgICAgICAgICAgICBUaGUgZmluYWwga2VybmVsIGNvbmZpZ3VyYXRpb24gaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyBpbiB0aGUgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgYW5kCisgICAgICAgICAgICAgICAgYW55IGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIHlvdSBwcm92aWRlLgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgaGF2ZSBhbnkgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGZyYWdtZW50cywgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRoZXNlIG9uIHRvcCBvZiBhbmQKKyAgICAgICAgICAgICAgICBhZnRlciBhcHBseWluZyB0aGUgZXhpc3RpbmcgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgcHJlZmVycmVkIGFwcHJvYWNoIGlzIHRvIGRldGVybWluZSB0aGUKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbCBjaGFuZ2UgeW91IHdhbnQgdG8gbWFrZSBhbmQgYWRkIHRoYXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBhIGJhc2ljIHNlcmlhbAorICAgICAgICAgICAgICAgIGNvbnNvbGUsIGNyZWF0ZSBhIGZpbGUgbmFtZWQgPGZpbGVuYW1lPjgyNTAuY2ZnPC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIGNvbnRlbnQgKHdpdGhvdXQgaW5kZW50YXRpb24pOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09ORklHX1NFUklBTF84MjUwPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorICAgICBDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKKyAgICAgQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorICAgICBDT05GSUdfU0VSSUFMX0NPUkU9eQorICAgICBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5leHQsIGluY2x1ZGUgdGhpcyBjb25maWd1cmF0aW9uIGZyYWdtZW50IGFuZCBleHRlbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKyAgICAgU1JDX1VSSSArPSAiZmlsZTovLzgyNTAuY2ZnIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgbmV4dCB0aW1lIHlvdSBydW4gQml0QmFrZSB0byBidWlsZCB0aGUgTGludXgga2VybmVsLCBCaXRCYWtlCisgICAgICAgICAgICAgICAgZGV0ZWN0cyB0aGUgY2hhbmdlIGluIHRoZSByZWNpcGUgYW5kIGZldGNoZXMgYW5kIGFwcGxpZXMgdGhlCisgICAgICAgICAgICAgICAgbmV3IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBhIGRldGFpbGVkIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjb25maWd1cmluZy10aGUta2VybmVsJz5Db25maWd1cmluZyB0aGUgS2VybmVsPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYW4gIkluLVRyZWUiJm5ic3A7Jm5ic3A7PGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gaGF2ZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudAorICAgICAgICAgICAgICAgIHN1cHBvcnQgdGhyb3VnaCBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlIHRoYXQKKyAgICAgICAgICAgICAgICBpcyBwdWxsZWQgZnJvbSB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGUgY29uZmlndXJlZAorICAgICAgICAgICAgICAgIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gbG9va3MgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBsYXllciB1c2VkIGZvcgorICAgICAgICAgICAgICAgIE1ldGFkYXRhLCB3aGljaCBpcyAib3V0LW9mLXRyZWUiLCBhbmQgdGhlbiBjb25maWd1cmVzIHRoZW0KKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDX1VSSSArPSAiZmlsZTovL2RlZmNvbmZpZyIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRvIG1haW50YWluIGNvcGllcyBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcyBpbiB5b3VyIGxheWVyIGJ1dCB3b3VsZAorICAgICAgICAgICAgICAgIHJhdGhlciBhbGxvdyB1c2VycyB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgIGtlcm5lbCB0cmVlIGFuZCBzdGlsbCBiZSBhYmxlIHRvIGFkZCBjb25maWd1cmF0aW9uIGZyYWdtZW50cworICAgICAgICAgICAgICAgIHRvIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB0aHJvdWdoLCBmb3IgZXhhbXBsZSwgYXBwZW5kIGZpbGVzLCB5b3UgY2FuIGRpcmVjdCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpcyAiaW4tdHJlZSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgYW4gImluLXRyZWUiIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlLAorICAgICAgICAgICAgICAgIGVkaXQgdGhlIHJlY2lwZSB0aGF0IGJ1aWxkcyB5b3VyIGtlcm5lbCBzbyB0aGF0IGl0IGhhcyB0aGUKKyAgICAgICAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZCBmb3JtOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JVSUxEX0RFRkNPTkZJR188dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS01BQ0hJTkUnPktNQUNISU5FPC91bGluaz4gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYXBwZW5kIHRoZSB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPktNQUNISU5FPC9maWxlbmFtZT4gYW5kIHRoZW4gc3VwcGx5IHRoZSBwYXRoIHRvCisgICAgICAgICAgICAgICAgeW91ciAiaW4tdHJlZSIgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gbW9kaWZ5aW5nIHlvdXIga2VybmVsIHJlY2lwZSBhbmQgcHJvdmlkaW5nIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIHlvdSBuZWVkIHRvIGJlIHN1cmUgbm8KKyAgICAgICAgICAgICAgICBmaWxlcyBvciBzdGF0ZW1lbnRzIHNldCA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IHRvIHVzZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IG90aGVyIHRoYW4geW91ciAiaW4tdHJlZSIKKyAgICAgICAgICAgICAgICBmaWxlIChlLmcuIGEga2VybmVsJ3MgPGZpbGVuYW1lPmxpbnV4LTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjxmaWxlbmFtZT4uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmaWxlKS4KKyAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGEgc3RhdGVtZW50CisgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIGFuICJvdXQtb2YtdHJlZSIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgdGhhdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICB3aWxsIG92ZXJyaWRlIHlvdXIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtCVUlMRF9ERUZDT05GSUcnPjxmaWxlbmFtZT5LQlVJTERfREVGQ09ORklHPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRlc2NyaXB0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIGFuIEl0ZXJhdGl2ZSBEZXZlbG9wbWVudCBQcm9jZXNzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBkbyBub3QgaGF2ZSBleGlzdGluZyBwYXRjaGVzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMsCisgICAgICAgICAgICB5b3UgY2FuIGl0ZXJhdGl2ZWx5IGdlbmVyYXRlIHRoZW0gZnJvbSB3aXRoaW4gdGhlIEJpdEJha2UgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGFzIGRlc2NyaWJlZCB3aXRoaW4gdGhpcyBzZWN0aW9uLgorICAgICAgICAgICAgRHVyaW5nIGFuIGl0ZXJhdGl2ZSB3b3JrZmxvdywgcnVubmluZyBhIHByZXZpb3VzbHkgY29tcGxldGVkIEJpdEJha2UKKyAgICAgICAgICAgIHRhc2sgY2F1c2VzIEJpdEJha2UgdG8gaW52YWxpZGF0ZSB0aGUgdGFza3MgdGhhdCBmb2xsb3cgdGhlCisgICAgICAgICAgICBjb21wbGV0ZWQgdGFzayBpbiB0aGUgYnVpbGQgc2VxdWVuY2UuCisgICAgICAgICAgICBJbnZhbGlkYXRlZCB0YXNrcyByZWJ1aWxkIHRoZSBuZXh0IHRpbWUgeW91IHJ1biB0aGUgYnVpbGQgdXNpbmcKKyAgICAgICAgICAgIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIHlvdSByZWFkIHRoaXMgc2VjdGlvbiwgYmUgc3VyZSB0byBzdWJzdGl0dXRlIHRoZSBuYW1lCisgICAgICAgICAgICBvZiB5b3VyIExpbnV4IGtlcm5lbCByZWNpcGUgZm9yIHRoZSB0ZXJtCisgICAgICAgICAgICAibGludXgteW9jdG8iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKzwhLS0KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5BUiAtIERhcnJlbiBIYXJ0OjwvZW1waGFzaXM+ICBUaGlzIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBvcmlnaW5hdGVkIGZyb20gdGhlIG9sZCBZb2N0byBQcm9qZWN0IEtlcm5lbCBBcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBhbmQgVXNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICBJdCB3YXMgZGVjaWRlZCB3ZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGlzIHNlY3Rpb24gaGVyZS4KKyAgICAgICAgICAgICAgICBEYXJyZW4gbmVlZHMgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSB3YW50IGl0IGFuZCB3aGF0IHBhcnQKKyAgICAgICAgICAgICAgICBvZiBpdCB3ZSB3YW50IChhbGwsIHJldmlzaW9uPz8/KQorICAgICAgICAgICAgPC9wYXJhPgorLS0+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlCisgICAgICAgICAgICAgICAgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgcmVtb3ZlZCwgb3IgYWRkZWQgZmlsZXMuCisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBjb21taXQgdGhvc2UgY2hhbmdlcyB0byB0aGUgdHJlZSByZWdhcmRsZXNzIG9mCisgICAgICAgICAgICAgICAgd2hldGhlciB0aGV5IHdpbGwgYmUgc2F2ZWQsIGV4cG9ydGVkLCBvciB1c2VkLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGNvbW1pdCB0aGUgY2hhbmdlcywgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBmb3JjZSBhIHBpY2t1cCBhbmQgY29tbWl0IG9mIGFsbCBzdWNoIHBlbmRpbmcgY2hhbmdlcywKKyAgICAgICAgICAgICAgICBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgYWRkIC4KKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hIC1tICJnZXR0aW5nIHJpZCBvZiAtZGlydHkiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOZXh0LCByZWJ1aWxkIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG1hbmlwdWxhdGUgdGhlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgYSBsaW51eC15b2N0byByZWNpcGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBtZW51Y29uZmlnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzdGFydHMgdGhlIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2wsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBwcmVwYXJlIGEgbmV3CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGZvciB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgZXhpdCB0aGUgdG9vbCwgYmUgc3VyZSB0byBzYXZlIHlvdXIgY2hhbmdlcworICAgICAgICAgICAgICAgIGF0IHRoZSBwcm9tcHQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlIGlzCisgICAgICAgICAgICAgICAgbG9jYXRlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4gdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LSR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L3VsaW5rPjxmaWxlbmFtZT59LSR7PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPjwvdWxpbms+fS1idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZW50aXJlIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgYmV0dGVyIG1ldGhvZCBpcyB0byBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIGNvbmZpZ3VyYXRpb24gZmlsZXM6IG9uZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgY3JlYXRlZCBhbmQgc2F2ZWQsIGFuZCBvbmUgZnJlc2hseSBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCB1c2luZyB0aGlzIG1ldGhvZCwgZm9sbG93CisgICAgICAgICAgICAgICAgdGhlc2Ugc3RlcHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tcGxldGUgYSBidWlsZCBhdCBsZWFzdCB0aHJvdWdoIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdGFzayBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMga2VybmVsX2NvbmZpZ21lIC1mCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHN0ZXAgZW5zdXJlcyB0aGF0IHlvdSB3aWxsIGJlIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBmcm9tIGEga25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHNpdHVhdGlvbnMgZXhpc3Qgd2hlcmUgeW91ciBidWlsZCBzdGF0ZSBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lIHVua25vd24sIGl0IGlzIGJlc3QgdG8gcnVuIHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBwcmlvciB0byBzdGFydGluZyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgbWVudWNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UnVuIHRoZSA8ZmlsZW5hbWU+ZGlmZmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHRvIHByZXBhcmUgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdGluZyBmaWxlIDxmaWxlbmFtZT5mcmFnbWVudC5jZmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBwbGFjZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC91bGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGxpbnV4LXlvY3RvIC1jIGRpZmZjb25maWcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRpZmZjb25maWc8L2ZpbGVuYW1lPiBjb21tYW5kIGNyZWF0ZXMgYSBmaWxlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgIGxpc3Qgb2YgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfPC9maWxlbmFtZT4gYXNzaWdubWVudHMuCisgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nY2hhbmdpbmctdGhlLWNvbmZpZ3VyYXRpb24nPkNoYW5naW5nIHRoZSBDb25maWd1cmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBvdXRwdXQgYXMgYQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRzIGZvciBhIEJTUC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nYnNwLWRlc2NyaXB0aW9ucyc+QlNQIERlc2NyaXB0aW9uczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUga2VybmVsIHRvb2xzIGFsc28gcHJvdmlkZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2UgdG9vbHMgdG8gcHJvZHVjZSB3YXJuaW5ncyBmb3Igd2hlbiBhCisgICAgICAgICAgICAgICAgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgYXBwZWFyIGluIHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSBvciB3aGVuIHlvdSBvdmVycmlkZSBhCisgICAgICAgICAgICAgICAgcG9saWN5IGNvbmZpZ3VyYXRpb24gaW4gYSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZyYWdtZW50LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB3aXRoIHNvbWUgc2FtcGxlIG91dHB1dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgICAgICAgIHRoYXQgcnVucyB0aGVzZSB0b29sczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnY2hlY2sgLWYKKworICAgICAuLi4KKworICAgICBOT1RFOiB2YWxpZGF0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uCisgICAgIFRoaXMgQlNQIHNldHMgMyBpbnZhbGlkL29ic29sZXRlIGtlcm5lbCBvcHRpb25zLgorICAgICBUaGVzZSBjb25maWcgb3B0aW9ucyBhcmUgbm90IG9mZmVyZWQgYW55d2hlcmUgd2l0aGluIHRoaXMga2VybmVsLgorICAgICBUaGUgZnVsbCBsaXN0IGNhbiBiZSBmb3VuZCBpbiB5b3VyIGtlcm5lbCBzcmMgZGlyIGF0OgorICAgICBtZXRhL2NmZy9zdGFuZGFyZC9teWJzcC9pbnZhbGlkLmNmZworCisgICAgIFRoaXMgQlNQIHNldHMgMjEga2VybmVsIG9wdGlvbnMgdGhhdCBhcmUgcG9zc2libHkgbm9uLWhhcmR3YXJlIHJlbGF0ZWQuCisgICAgIFRoZSBmdWxsIGxpc3QgY2FuIGJlIGZvdW5kIGluIHlvdXIga2VybmVsIHNyYyBkaXIgYXQ6CisgICAgIG1ldGEvY2ZnL3N0YW5kYXJkL215YnNwL3NwZWNpZmllZF9ub25faGR3LmNmZworCisgICAgIFdBUk5JTkc6IFRoZXJlIHdlcmUgMiBoYXJkd2FyZSBvcHRpb25zIHJlcXVlc3RlZCB0aGF0IGRvIG5vdAorICAgICAgICAgICAgICBoYXZlIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBwcmVzZW50IGluIHRoZSBmaW5hbCAiLmNvbmZpZyIgZmlsZS4KKyAgICAgICAgICAgICAgVGhpcyBwcm9iYWJseSBtZWFucyB5b3UgYXJlIG5vdCBnZXR0aW5nIHRoZSBjb25maWcgeW91IHdhbnRlZC4KKyAgICAgICAgICAgICAgVGhlIGZ1bGwgbGlzdCBjYW4gYmUgZm91bmQgaW4geW91ciBrZXJuZWwgc3JjIGRpciBhdDoKKyAgICAgICAgICAgICAgbWV0YS9jZmcvc3RhbmRhcmQvbXlic3AvbWlzbWF0Y2guY2ZnCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgb3V0cHV0IGRlc2NyaWJlcyB0aGUgdmFyaW91cyBwcm9ibGVtcyB0aGF0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICBlbmNvdW50ZXIgYWxvbmcgd2l0aCB3aGVyZSB0byBmaW5kIHRoZSBvZmZlbmRpbmcgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGl0ZW1zLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9ncyB0byBhZGp1c3QgeW91cgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZW4gcmVwZWF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsX2NvbmZpZ2NoZWNrPC9maWxlbmFtZT4gY29tbWFuZHMgdW50aWwKKyAgICAgICAgICAgICAgICB0aGV5IHByb2R1Y2Ugbm8gd2FybmluZ3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1lbnVjb25maWc8L2ZpbGVuYW1lPiB0b29sLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLW1lbnVjb25maWcnPlVzaW5nIDxmaWxlbmFtZT5tZW51Y29uZmlnPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtb2RpZnlpbmctc291cmNlLWNvZGUnPgorICAgICAgICAgICAgPHRpdGxlPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZXJpbWVudCB3aXRoIHNvdXJjZSBjb2RlIGNoYW5nZXMgYW5kIGNyZWF0ZSBhCisgICAgICAgICAgICAgICAgc2ltcGxlIHBhdGNoIHdpdGhvdXQgbGVhdmluZyB0aGUgQml0QmFrZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgYmUgc3VyZSB0byBjb21wbGV0ZSBhIGJ1aWxkIGF0CisgICAgICAgICAgICAgICAgbGVhc3QgdGhyb3VnaCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdGFzazoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBsaW51eC15b2N0byAtYyBrZXJuZWxfY29uZmlnbWUgLWYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGFraW5nIHRoaXMgc3RlcCBlbnN1cmVzIHlvdSBoYXZlIHRoZSBzb3VyY2VzIHByZXBhcmVkCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbXBsZXRlZC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgdGhlIHNvdXJjZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvdWxpbms+PGZpbGVuYW1lPn0vbGludXg8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZWRpdCB0aGUgc291cmNlcyBhcyB5b3Ugd291bGQgYW55IG90aGVyIExpbnV4IHNvdXJjZQorICAgICAgICAgICAgICAgIHRyZWUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwga2VlcCBpbiBtaW5kIHRoYXQgeW91IHdpbGwgbG9zZSBjaGFuZ2VzIGlmIHlvdQorICAgICAgICAgICAgICAgIHRyaWdnZXIgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdGFzayBmb3IgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGF2b2lkIHRyaWdnZXJpbmcgdGhpcyB0YXNrIGJ5IG5vdCB1c2luZyBCaXRCYWtlIHRvCisgICAgICAgICAgICAgICAgcnVuIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlZi10YXNrcy1jbGVhbmFsbCc+PGZpbGVuYW1lPmNsZWFuYWxsPC9maWxlbmFtZT48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY2xlYW5zc3RhdGUnPjxmaWxlbmFtZT5jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+PC91bGluaz4sCisgICAgICAgICAgICAgICAgb3IgZm9yY2VkCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgQWxzbywgZG8gbm90IG1vZGlmeSB0aGUgcmVjaXBlIGl0c2VsZiB3aGlsZSB3b3JraW5nCisgICAgICAgICAgICAgICAgd2l0aCB0ZW1wb3JhcnkgY2hhbmdlcyBvciBCaXRCYWtlIG1pZ2h0IHJ1biB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmV0Y2g8L2ZpbGVuYW1lPiBjb21tYW5kIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHRlc3QgeW91ciB0ZW1wb3JhcnkgY2hhbmdlcywgaW5zdHJ1Y3QgQml0QmFrZSB0byBydW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPiBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi1mPC9maWxlbmFtZT4gb3B0aW9uIGZvcmNlcyB0aGUgY29tbWFuZCB0byBydW4KKyAgICAgICAgICAgICAgICBldmVuIHRob3VnaCBCaXRCYWtlIG1pZ2h0IHRoaW5rIGl0IGhhcyBhbHJlYWR5IGRvbmUgc286CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgbGludXgteW9jdG8gLWMgY29tcGlsZSAtZgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgY29tcGlsZSBmYWlscywgeW91IGNhbiB1cGRhdGUgdGhlIHNvdXJjZXMgYW5kIHJlcGVhdAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Y29tcGlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgeW91IGNhbiBpbnNwZWN0IGFuZCB0ZXN0CisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdGluZyBidWlsZCAoaS5lLiBrZXJuZWwsIG1vZHVsZXMsIGFuZCBzbyBmb3J0aCkgZnJvbQorICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgYnVpbGQgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gcGxhY2UgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveS9pbWFnZXM8L2ZpbGVuYW1lPiBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorCSQgYml0YmFrZSBsaW51eC15b2N0byAtYyBkZXBsb3kKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kLCBvZiBjb3Vyc2UsIHlvdSBjYW4gcGVyZm9ybSB0aGUgcmVtYWluaW5nIGluc3RhbGxhdGlvbiBhbmQKKyAgICAgICAgICAgICAgICBwYWNrYWdpbmcgc3RlcHMgYnkgaXNzdWluZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisJJCBiaXRiYWtlIGxpbnV4LXlvY3RvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgcmFwaWQgaXRlcmF0aXZlIGRldmVsb3BtZW50LCB0aGUgZWRpdC1jb21waWxlLXJlcGVhdCBsb29wCisgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiBpcyBwcmVmZXJhYmxlIHRvIHJlYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgZW50aXJlIHJlY2lwZSBiZWNhdXNlIHRoZSBpbnN0YWxsYXRpb24gYW5kIHBhY2thZ2luZyB0YXNrcworICAgICAgICAgICAgICAgIGFyZSB2ZXJ5IHRpbWUgY29uc3VtaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBzb3VyY2UgY29kZSBtb2RpZmljYXRpb25zLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gbWFrZSB0aGVtIHBlcm1hbmVudCBieSBnZW5lcmF0aW5nIHBhdGNoZXMgYW5kCisgICAgICAgICAgICAgICAgYXBwbHlpbmcgdGhlbSB0byB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nYXBwbHlpbmctcGF0Y2hlcyc+QXBwbHlpbmcgUGF0Y2hlczwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBmYW1pbGlhciB3aXRoIGdlbmVyYXRpbmcgcGF0Y2hlcywgcmVmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLXRoZS1wYXRjaCc+Q3JlYXRpbmcgdGhlIFBhdGNoPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLXlvdXItb3duLXNvdXJjZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGNhbm5vdCB3b3JrIHdpdGggb25lIG9mIHRoZSBMaW51eCBrZXJuZWwKKyAgICAgICAgICAgIHZlcnNpb25zIHN1cHBvcnRlZCBieSBleGlzdGluZyBsaW51eC15b2N0byByZWNpcGVzLCB5b3UgY2FuCisgICAgICAgICAgICBzdGlsbCBtYWtlIHVzZSBvZiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdG9vbGluZyBieQorICAgICAgICAgICAgd29ya2luZyB3aXRoIHlvdXIgb3duIHNvdXJjZXMuCisgICAgICAgICAgICBXaGVuIHlvdSB1c2UgeW91ciBvd24gc291cmNlcywgeW91IHdpbGwgbm90IGJlIGFibGUgdG8KKyAgICAgICAgICAgIGxldmVyYWdlIHRoZSBleGlzdGluZyBrZXJuZWwKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+IGFuZAorICAgICAgICAgICAgc3RhYmlsaXphdGlvbiB3b3JrIG9mIHRoZSBsaW51eC15b2N0byBzb3VyY2VzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IHdpbGwgYmUgYWJsZSB0byBtYW5hZ2UgeW91ciBvd24gTWV0YWRhdGEgaW4gdGhlIHNhbWUKKyAgICAgICAgICAgIGZvcm1hdCBhcyB0aGUgbGludXgteW9jdG8gc291cmNlcy4KKyAgICAgICAgICAgIE1haW50YWluaW5nIGZvcm1hdCBjb21wYXRpYmlsaXR5IGZhY2lsaXRhdGVzIGNvbnZlcmdpbmcgd2l0aAorICAgICAgICAgICAgbGludXgteW9jdG8gb24gYSBmdXR1cmUsIG11dHVhbGx5LXN1cHBvcnRlZCBrZXJuZWwgdmVyc2lvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gaGVscCB5b3UgdXNlIHlvdXIgb3duIHNvdXJjZXMsIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIGEKKyAgICAgICAgICAgIGxpbnV4LXlvY3RvIGN1c3RvbSByZWNpcGUKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4pIHRoYXQgdXNlcworICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBzb3VyY2VzCisgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgTGludXgga2VybmVsIHRvb2xzIGZvciBtYW5hZ2luZworICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgcmVjaXBlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhdDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGJhc2ljIHN0ZXBzIHlvdSBjYW4gdXNlIHRvIHdvcmsgd2l0aCB5b3VyIG93biBzb3VyY2VzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Db3B5IHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHlvdXIgbGF5ZXIgYW5kIGdpdmUgaXQgYSBtZWFuaW5nZnVsIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIHNob3VsZCBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgeW91CisgICAgICAgICAgICAgICAgICAgIGFyZSB1c2luZyAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgteW9jdG8tbXlwcm9qZWN0XzMuMTkuYmI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgIjMuMTkiIGlzIHRoZSBiYXNlIHZlcnNpb24gb2YgdGhlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHlvdSB3b3VsZCBiZSB3b3JraW5nKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SW4gdGhlIHNhbWUgZGlyZWN0b3J5IGluc2lkZSB5b3VyIGxheWVyLAorICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBtYXRjaGluZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdG8gc3RvcmUgeW91ciBwYXRjaGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by1teXByb2plY3Q8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYWtlIHN1cmUgeW91IGhhdmUgZWl0aGVyIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUgb3IgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG8tY3VzdG9tLmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBoYXZlIGEgPGZpbGVuYW1lPmRlZmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBtYWtlIGRlZmNvbmZpZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlIGNvbW1hbmQsIGNvcHkgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYXMgImRlZmNvbmZpZyIgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZW4gYWRkIGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSByZWNpcGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5SdW5uaW5nIHRoZSA8ZmlsZW5hbWU+bWFrZSBkZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIHJlc3VsdHMgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYXMgZGVmaW5lZCBieSB5b3VyIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgbm8gZ3VhcmFudGVlIGV4aXN0cyB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiBpcworICAgICAgICAgICAgICAgICAgICB2YWxpZCBmb3IgeW91ciB1c2UgY2FzZSwgb3IgdGhhdCB5b3VyIGJvYXJkIHdpbGwgZXZlbiBib290LgorICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIGZvciBub24teDg2IGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSBub24teDg2IDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBmaWxlcywgeW91CisgICAgICAgICAgICAgICAgICAgIG5lZWQgdG8gYmUgbW9yZSBzcGVjaWZpYyBhbmQgZmluZCBvbmUgdGhhdCBtYXRjaGVzIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgYm9hcmQgKGkuZS4gZm9yIGFybSwgeW91IGxvb2sgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyY2gvYXJtL2NvbmZpZ3M8L2ZpbGVuYW1lPiBhbmQgdXNlIHRoZSBvbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCBmb3IgeW91ciBib2FyZCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FZGl0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluIHlvdXIgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHByb2plY3Q6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgR2l0IHJlcG9zaXRvcnkgdGhhdCB1c2VzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEdpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoZXIgcHJvdG9jb2xzIChpLmUuIDxmaWxlbmFtZT5maWxlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+aHR0cDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gdmFyaWFibGUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBzcGVjaWZ5IGVpdGhlciBhIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgb3Igc29tZSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBza2VsZXRvbiByZWNpcGUgcHJvdmlkZXMgYW4gZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4gYXMgYSBzeW50YXggcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OJz48ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIExpbnV4IGtlcm5lbCB2ZXJzaW9uIHlvdSBhcmUgdXNpbmcgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMy4xOSIpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTic+PGZpbGVuYW1lPkxJTlVYX1ZFUlNJT05fRVhURU5TSU9OPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgTGludXgga2VybmVsIDxmaWxlbmFtZT5DT05GSUdfTE9DQUxWRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGNvbXBpbGVkIGludG8gdGhlIHJlc3VsdGluZyBrZXJuZWwgYW5kIHZpc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNSRVYnPjxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21taXQgSUQgZnJvbSB3aGljaCB5b3Ugd2FudCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC91bGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJlYXQgdGhpcyB2YXJpYWJsZSB0aGUgc2FtZSBhcyB5b3Ugd291bGQgaW4gYW55IG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudCB0aGUgdmFyaWFibGUgdG8gaW5kaWNhdGUgdG8gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0aGF0IHRoZSByZWNpcGUgaGFzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGFzc2lnbm1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpY2FsbHkgYWRlcXVhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgY29tYmluZXMgdGhlIDxmaWxlbmFtZT5MSU5VWF9WRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb21iaW5lZCByZXN1bHRzIGFyZSBhIHN0cmluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgMy4xOS4xMStnaXQxKzY4YTYzNWJmOGRmYjY0YjAyMjYzYzFhYzgwYzk0ODY0N2NjNzZkNWZfMSsyMThiZDhkMjAyMmI5ODUyYzYwZDMyZjBkNzcwOTMxZTNjZjM0M2UyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoaWxlIGxlbmd0aHksIHRoZSBleHRyYSB2ZXJib3NpdHkgaW4gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwcyBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgZXhhY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGZyb20gd2hpY2ggeW91IGludGVuZCB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItQ09NUEFUSUJMRV9NQUNISU5FJz48ZmlsZW5hbWU+Q09NUEFUSUJMRV9NQUNISU5FPC9maWxlbmFtZT48L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIG1hY2hpbmVzIHN1cHBvcnRlZCBieSB5b3VyIG5ldyByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpbiB0aGUgZXhhbXBsZSByZWNpcGUgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZSBlbXB0eSBzdHJpbmcsICIoXiQpIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlZmF1bHQgc2V0dGluZyB0cmlnZ2VycyBhbiBleHBsaWNpdCBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2hhbmdlIGl0IHRvIG1hdGNoIGEgbGlzdCBvZiB0aGUgbWFjaGluZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHlvdXIgbmV3IHJlY2lwZSBzdXBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCB0aGUgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+cWVtdXg4Ni02NDwvZmlsZW5hbWU+IG1hY2hpbmVzLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdXg4NnxxZW11eDg2LTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgZnVydGhlciBjdXN0b21pemF0aW9ucyB0byB5b3VyIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBhcyBuZWVkZWQganVzdCBhcyB5b3Ugd291bGQgY3VzdG9taXplIGFuIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgICAgIGxpbnV4LXlvY3RvIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0nbW9kaWZ5aW5nLWFuLWV4aXN0aW5nLXJlY2lwZSc+TW9kaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgIGFuIEV4aXN0aW5nIFJlY2lwZTwvbGluaz4iIHNlY3Rpb24gZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2luZy13aXRoLW91dC1vZi10cmVlLW1vZHVsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2luZyB3aXRoIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzdGVwcyB0byBidWlsZCBvdXQtb2YtdHJlZSBtb2R1bGVzIG9uCisgICAgICAgICAgICB5b3VyIHRhcmdldCBhbmQgZGVzY3JpYmVzIGhvdyB0byBpbmNvcnBvcmF0ZSBvdXQtb2YtdHJlZSBtb2R1bGVzCisgICAgICAgICAgICBpbiB0aGUgYnVpbGQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcy1vbi10aGUtdGFyZ2V0Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CdWlsZGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzIG9uIHRoZSBUYXJnZXQ8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSB0aGUgdHJhZGl0aW9uYWwgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBtb2RlbCB3b3VsZCBiZQorICAgICAgICAgICAgICAgIHRvIGluY2x1ZGUga2VybmVsIG1vZHVsZXMgYXMgcGFydCBvZiB0aGUgbm9ybWFsIGJ1aWxkCisgICAgICAgICAgICAgICAgcHJvY2VzcywgeW91IG1pZ2h0IGZpbmQgaXQgdXNlZnVsIHRvIGJ1aWxkIG1vZHVsZXMgb24gdGhlCisgICAgICAgICAgICAgICAgdGFyZ2V0LgorICAgICAgICAgICAgICAgIFRoaXMgY291bGQgYmUgdGhlIGNhc2UgaWYgeW91ciB0YXJnZXQgc3lzdGVtIGlzIGNhcGFibGUKKyAgICAgICAgICAgICAgICBhbmQgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgbmVjZXNzYXJ5IGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgIEJlZm9yZSBkZWNpZGluZyB0byBidWlsZCBvbiB5b3VyIHRhcmdldCwgaG93ZXZlciwgeW91IHNob3VsZAorICAgICAgICAgICAgICAgIGNvbnNpZGVyIHRoZSBiZW5lZml0cyBvZiB1c2luZyBhIHByb3BlciBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50IGZyb20geW91ciBidWlsZCBob3N0LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMgb24KKyAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LCB0aGVyZSBhcmUgc29tZSBzdGVwcyB5b3UgbmVlZCB0byB0YWtlCisgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCB0aGF0IGlzIHJ1bm5pbmcgeW91ciBTREsgaW1hZ2UuCisgICAgICAgICAgICAgICAgQnJpZWZseSwgdGhlIDxmaWxlbmFtZT5rZXJuZWwtZGV2PC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcyBhbmQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmtlcm5lbC1kZXZzcmM8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzIGluc3RhbGxlZAorICAgICAgICAgICAgICAgIG9uIG1hbnkgb2YgdGhlIDxmaWxlbmFtZT4qLnNkazwvZmlsZW5hbWU+IGltYWdlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBzY3JpcHRzIHByaW9yIHRvCisgICAgICAgICAgICAgICAgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgb3V0LW9mLXRyZWUgbW9kdWxlcyBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgdGhhdCBpcyBydW5uaW5nIHRoYXQgaW1hZ2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFByaW9yIHRvIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIG91dC1vZi10cmVlIG1vZHVsZXMsCisgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYmUgb24gdGhlIHRhcmdldCBhcyByb290IGFuZCB5b3UgbmVlZCB0bworICAgICAgICAgICAgICAgIGNoYW5nZSB0byB0aGUgPGZpbGVuYW1lPi91c3Ivc3JjL2tlcm5lbDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBOZXh0LCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHRoZSBzY3JpcHRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBjZCAvdXNyL3NyYy9rZXJuZWwKKyAgICAgIyBtYWtlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBhbGwgU0RLIGltYWdlIHJlY2lwZXMgaW5jbHVkZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXYtcGtnczwvZmlsZW5hbWU+LCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiB0aGUgU0RLIGltYWdlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLWRldnNyYzwvZmlsZW5hbWU+IHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgYXMgcGFydCBvZiBhcHBsaWNhYmxlIFNESyBpbWFnZXMuCisgICAgICAgICAgICAgICAgVGhlIFNESyB1c2VzIHRoZSBzY3JpcHRzIHdoZW4gYnVpbGRpbmcgb3V0LW9mLXRyZWUKKyAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgc3dpdGNoZWQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kIGNyZWF0ZWQgdGhlCisgICAgICAgICAgICAgICAgc2NyaXB0cywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGJ1aWxkIHlvdXIgb3V0LW9mLXRyZWUgbW9kdWxlcworICAgICAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0naW5jb3Jwb3JhdGluZy1vdXQtb2YtdHJlZS1tb2R1bGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5JbmNvcnBvcmF0aW5nIE91dC1vZi1UcmVlIE1vZHVsZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBhbHdheXMgcHJlZmVyYWJsZSB0byB3b3JrIHdpdGggc291cmNlcyBpbnRlZ3JhdGVkCisgICAgICAgICAgICAgICAgaW50byB0aGUgTGludXgga2VybmVsIHNvdXJjZXMsIGlmIHlvdSBuZWVkIGFuIGV4dGVybmFsIGtlcm5lbAorICAgICAgICAgICAgICAgIG1vZHVsZSwgdGhlIDxmaWxlbmFtZT5oZWxsby1tb2QuYmI8L2ZpbGVuYW1lPiByZWNpcGUgaXMKKyAgICAgICAgICAgICAgICBhdmFpbGFibGUgYXMgYSB0ZW1wbGF0ZSBmcm9tIHdoaWNoIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgICAgICAgICAgICAgICBvd24gb3V0LW9mLXRyZWUgTGludXgga2VybmVsIG1vZHVsZSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdGVtcGxhdGUgcmVjaXBlIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOyc+U291cmNlIFJlcG9zaXRvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgIGF0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgcG9reS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZXQgc3RhcnRlZCwgY29weSB0aGlzIHJlY2lwZSB0byB5b3VyIGxheWVyIGFuZCBnaXZlIGl0IGEKKyAgICAgICAgICAgICAgICBtZWFuaW5nZnVsIG5hbWUgKGUuZy4gPGZpbGVuYW1lPm15bW9kdWxlXzEuMC5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2FtZSBkaXJlY3RvcnksIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiB3aGVyZSB5b3UgY2FuIHN0b3JlIGFueSBzb3VyY2UgZmlsZXMsCisgICAgICAgICAgICAgICAgcGF0Y2hlcywgb3Igb3RoZXIgZmlsZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZworICAgICAgICAgICAgICAgIHRoZSBtb2R1bGUgdGhhdCBkbyBub3QgY29tZSB3aXRoIHRoZSBzb3VyY2VzLgorICAgICAgICAgICAgICAgIEZpbmFsbHksIHVwZGF0ZSB0aGUgcmVjaXBlIGFzIG5lZWRlZCBmb3IgdGhlIG1vZHVsZS4KKyAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHlvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFKjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBtb2R1bGUgc291cmNlcywKKyAgICAgICAgICAgICAgICB5b3UgbWlnaHQgbmVlZCB0byBtYWtlIHNvbWUgYWRqdXN0bWVudHMuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgdHlwaWNhbCBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBsb29rcyBtdWNoIGxpa2UgdGhlIG9uZSBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5oZWxsby1tb2Q8L2ZpbGVuYW1lPiB0ZW1wbGF0ZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG9iai1tIDo9IGhlbGxvLm8KKworICAgICBTUkMgOj0gJChzaGVsbCBwd2QpCisKKyAgICAgYWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpCisKKyAgICAgbW9kdWxlc19pbnN0YWxsOgorICAgICAgICAgJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpIG1vZHVsZXNfaW5zdGFsbAorICAgICAuLi4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBpbXBvcnRhbnQgcG9pbnQgdG8gbm90ZSBoZXJlIGlzIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1LRVJORUxfU1JDJz48ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX1BBVEgnPjxmaWxlbmFtZT5LRVJORUxfUEFUSDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TVEFHSU5HX0tFUk5FTF9ESVInPjxmaWxlbmFtZT5TVEFHSU5HX0tFUk5FTF9ESVI8L2ZpbGVuYW1lPjwvdWxpbms+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgd2l0aCB0aGUgbmVjZXNzYXJ5IExpbnV4IGtlcm5lbCBidWlsZCBpbmZvcm1hdGlvbiB0byBidWlsZAorICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgSWYgeW91ciBtb2R1bGUgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gdXNlcyBhIGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB5b3UgbWlnaHQgd2FudCB0byBvdmVycmlkZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGUoKTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICBzdGVwLCBvciBjcmVhdGUgYSBwYXRjaCB0bworICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiB0byB3b3JrIHdpdGggdGhlIG1vcmUgdHlwaWNhbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfU1JDPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIHByZXBhcmVkIHlvdXIgcmVjaXBlLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0bworICAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIG1vZHVsZSBpbiB5b3VyIGltYWdlcy4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbCBhbmQgc2V0IG9uZSBvZiB0aGVtCisgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgeW91ciBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz48ZmlsZW5hbWU+TUFDSElORV9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBNb2R1bGVzIGFyZSBvZnRlbiBub3QgcmVxdWlyZWQgZm9yIGJvb3QgYW5kIGNhbiBiZSBleGNsdWRlZCBmcm9tCisgICAgICAgICAgICAgICAgY2VydGFpbiBidWlsZCBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGFsbG93cyBmb3IgdGhlIG1vc3QgZmxleGliaWxpdHk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTICs9ICJrZXJuZWwtbW9kdWxlLW15bW9kdWxlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgZGVyaXZlZCBieSBhcHBlbmRpbmcgdGhlIG1vZHVsZSBmaWxlbmFtZSB3aXRob3V0CisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT4ua288L2ZpbGVuYW1lPiBleHRlbnNpb24gdG8gdGhlIHN0cmluZworICAgICAgICAgICAgICAgICJrZXJuZWwtbW9kdWxlLSIuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHZhcmlhYmxlIGlzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIG5vdCBhCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBidWlsZCB3aWxsIG5vdCBmYWlsIGlmIHRoaXMgbW9kdWxlIGlzIG5vdAorICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworCisgICAgPHNlY3Rpb24gaWQ9J2luc3BlY3RpbmctY2hhbmdlcy1hbmQtY29tbWl0cyc+CisgICAgICAgIDx0aXRsZT5JbnNwZWN0aW5nIENoYW5nZXMgYW5kIENvbW1pdHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAiV2hhdCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgdHJlZT8iCisgICAgICAgICAgICBSYXRoZXIgdGhhbiB1c2luZyAiZ3JlcCIgYWNyb3NzIGRpcmVjdG9yaWVzIHRvIHNlZSB3aGF0IGhhcworICAgICAgICAgICAgY2hhbmdlZCwgeW91IGNhbiB1c2UgR2l0IHRvIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIHNlZSB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZSB0cmVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3doYXQtY2hhbmdlZC1pbi1hLWtlcm5lbCc+CisgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgYSBmZXcgZXhhbXBsZXMgdGhhdCBzaG93IGhvdyB0byB1c2UgR2l0CisgICAgICAgICAgICAgICAgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIFRoZXNlIGV4YW1wbGVzIGFyZSBieSBubyBtZWFucyB0aGUgb25seSB3YXkgdG8gc2VlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICByYW5nZSwgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBoaXN0b3J5IGlzIGJsZW5kZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBZb2N0byBQcm9qZWN0IGtlcm5lbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdHJlZSBhcyB0aGUgdXBwZXIgYW5kIGxvd2VyIGNvbW1pdCBtYXJrZXJzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGJyYW5jaCBuYW1lcyB0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQgd2hhdGNoYW5nZWQ8L2ZpbGVuYW1lPiBjb21tYW5kIGFuZCBzcGVjaWZ5IGEKKyAgICAgICAgICAgICAgICBjb21taXQgcmFuZ2UgZm9yIHRoZSBicmFuY2gKKyAgICAgICAgICAgICAgICAoPHJlcGxhY2VhYmxlPmNvbW1pdDwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi4uPC9maWxlbmFtZT48cmVwbGFjZWFibGU+Y29tbWl0PC9yZXBsYWNlYWJsZT4pLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBsb29rcyBhdCB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5lbWVubG93PC9maWxlbmFtZT4gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjE5PC9maWxlbmFtZT4ga2VybmVsLgorICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0YW5kYXJkL2Jhc2U8L2ZpbGVuYW1lPiBicmFuY2gsIHdoaWxlCisgICAgICAgICAgICAgICAgdGhlIHVwcGVyIGNvbW1pdCByYW5nZSBpcyB0aGUgY29tbWl0IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IHdoYXRjaGFuZ2VkIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIHNob3J0LCBvbmUgbGluZSBzdW1tYXJpZXMgb2YgY2hhbmdlcyB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBsb2c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgbG9nIC0tb25lbGluZSBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIGNvZGUgZGlmZmVyZW5jZXMgZm9yIHRoZSBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZGlmZiBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc2VlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICB0ZXh0IGRpZmZlcmVuY2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzZSB0aGlzIGNvbW1hbmQgdG8gY3JlYXRlIGluZGl2aWR1YWwgcGF0Y2hlcyBmb3IKKyAgICAgICAgICAgICAgICBlYWNoIGNoYW5nZS4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB0aGF0IGNyZWF0ZXMgcGF0Y2ggZmlsZXMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICBjb21taXQgYW5kIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICRIT01FL0RvY3VtZW50cyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2hvd2luZy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TaG93aW5nIGEgUGFydGljdWxhciBGZWF0dXJlIG9yIEJyYW5jaCBDaGFuZ2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUYWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIGRpdmlkZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGZlYXR1cmVzIG9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiZuYnNwOzxyZXBsYWNlYWJsZT50YWc8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIGNvbW1hbmQgc2hvd3MgY2hhbmdlcyBiYXNlZCBvbiBhIHRhZy4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjaGFuZ2VzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBicmFuY2ggLS1jb250YWluczwvZmlsZW5hbWU+Jm5ic3A7PHJlcGxhY2VhYmxlPnRhZzwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgY29tbWFuZCB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNob3dzIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbXRhcDwvZmlsZW5hbWU+IGZlYXR1cmU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5MTc0OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbmNlcHRzLWFwcHgueG1sCkBAIC0wLDAgKzEsMjUzIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXBwZW5kaXggaWQ9J2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweCc+Cis8dGl0bGU+QWR2YW5jZWQgS2VybmVsIENvbmNlcHRzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYmlnLXBpY3R1cmUnPgorICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBLZXJuZWwgRGV2ZWxvcG1lbnQgYW5kIE1haW50ZW5hbmNlPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBLZXJuZWxzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBZb2N0byBQcm9qZWN0LCBsaWtlIG90aGVyIGtlcm5lbHMsIGFyZSBiYXNlZCBvZmYgdGhlIExpbnV4CisgICAgICAgICAgICBrZXJuZWwgcmVsZWFzZXMgZnJvbSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lmtlcm5lbC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgQXQgdGhlIGJlZ2lubmluZyBvZiBhIG1ham9yIGRldmVsb3BtZW50IGN5Y2xlLCB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtCisgICAgICAgICAgICBjaG9vc2VzIGl0cyBrZXJuZWwgYmFzZWQgb24gZmFjdG9ycyBzdWNoIGFzIHJlbGVhc2UgdGltaW5nLCB0aGUgYW50aWNpcGF0ZWQgcmVsZWFzZQorICAgICAgICAgICAgdGltaW5nIG9mIGZpbmFsIHVwc3RyZWFtIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbnMsIGFuZCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBmZWF0dXJlIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIFR5cGljYWxseSwgdGhlIGtlcm5lbCBjaG9zZW4gaXMgaW4gdGhlCisgICAgICAgICAgICBmaW5hbCBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQgYnkgdGhlIGNvbW11bml0eS4KKyAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUga2VybmVsIGlzIGluIHRoZSByZWxlYXNlCisgICAgICAgICAgICBjYW5kaWRhdGUgb3IgInJjIiBwaGFzZSBhbmQgbm90IHlldCBhIGZpbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBCdXQsIGJ5IGJlaW5nIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgZXh0ZXJuYWwgZGV2ZWxvcG1lbnQsIHRoZSB0ZWFtIGtub3dzIHRoYXQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+IGZpbmFsIHJlbGVhc2Ugd2lsbCBjbGVhcmx5IGJlIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB3aW5kb3cuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGJhbGFuY2UgYWxsb3dzIHRoZSB0ZWFtIHRvIGRlbGl2ZXIgdGhlIG1vc3QgdXAtdG8tZGF0ZSBrZXJuZWwKKyAgICAgICAgICAgIHBvc3NpYmxlLCB3aGlsZSBzdGlsbCBlbnN1cmluZyB0aGF0IHRoZSB0ZWFtIGhhcyBhIHN0YWJsZSBvZmZpY2lhbCByZWxlYXNlIGZvcgorICAgICAgICAgICAgdGhlIGJhc2VsaW5lIExpbnV4IGtlcm5lbCB2ZXJzaW9uLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHVsdGltYXRlIHNvdXJjZSBmb3Iga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgWW9jdG8gUHJvamVjdCBhcmUgcmVsZWFzZWQga2VybmVscworICAgICAgICAgICAgZnJvbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gYSBmb3VuZGF0aW9uYWwga2VybmVsIGZyb20gPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICBrZXJuZWxzIGF2YWlsYWJsZSBjb250YWluIGEgbWl4IG9mIGltcG9ydGFudCBuZXcgbWFpbmxpbmUKKyAgICAgICAgICAgIGRldmVsb3BtZW50cywgbm9uLW1haW5saW5lIGRldmVsb3BtZW50cyAod2hlbiB0aGVyZSBpcyBubyBhbHRlcm5hdGl2ZSksCisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgZGV2ZWxvcG1lbnRzLAorICAgICAgICAgICAgYW5kIGN1c3RvbSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIGFkZGl0aW9ucyByZXN1bHQgaW4gYSBjb21tZXJjaWFsbHkgcmVsZWFzZWQgWW9jdG8gUHJvamVjdCBMaW51eCBrZXJuZWwgdGhhdCBjYXRlcnMKKyAgICAgICAgICAgIHRvIHNwZWNpZmljIGVtYmVkZGVkIGRlc2lnbmVyIG5lZWRzIGZvciB0YXJnZXRlZCBoYXJkd2FyZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgYSBrZXJuZWwgaXMgb2ZmaWNpYWxseSByZWxlYXNlZCwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSBnb2VzIGludG8KKyAgICAgICAgICAgIHRoZWlyIG5leHQgZGV2ZWxvcG1lbnQgY3ljbGUsIG9yIHVwd2FyZCByZXZpc2lvbiAodXByZXYpIGN5Y2xlLCB3aGlsZSBzdGlsbAorICAgICAgICAgICAgY29udGludWluZyBtYWludGVuYW5jZSBvbiB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgbW9zdCBzdXN0YWluYWJsZSBhbmQgc3RhYmxlIHdheQorICAgICAgICAgICAgdG8gaW5jbHVkZSBmZWF0dXJlIGRldmVsb3BtZW50IHVwc3RyZWFtIGlzIHRocm91Z2ggYSBrZXJuZWwgdXByZXYgcHJvY2Vzcy4KKyAgICAgICAgICAgIEJhY2stcG9ydGluZyBodW5kcmVkcyBvZiBpbmRpdmlkdWFsIGZpeGVzIGFuZCBtaW5vciBmZWF0dXJlcyBmcm9tIHZhcmlvdXMKKyAgICAgICAgICAgIGtlcm5lbCB2ZXJzaW9ucyBpcyBub3Qgc3VzdGFpbmFibGUgYW5kIGNhbiBlYXNpbHkgY29tcHJvbWlzZSBxdWFsaXR5LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRHVyaW5nIHRoZSB1cHJldiBjeWNsZSwgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB1c2VzIGFuIG9uZ29pbmcgYW5hbHlzaXMgb2YKKyAgICAgICAgICAgIGtlcm5lbCBkZXZlbG9wbWVudCwgQlNQIHN1cHBvcnQsIGFuZCByZWxlYXNlIHRpbWluZyB0byBzZWxlY3QgdGhlIGJlc3QKKyAgICAgICAgICAgIHBvc3NpYmxlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdmVyc2lvbi4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNvbnRpbnVhbGx5IG1vbml0b3JzIGNvbW11bml0eSBrZXJuZWwKKyAgICAgICAgICAgIGRldmVsb3BtZW50IHRvIGxvb2sgZm9yIHNpZ25pZmljYW50IGZlYXR1cmVzIG9mIGludGVyZXN0LgorICAgICAgICAgICAgVGhlIHRlYW0gZG9lcyBjb25zaWRlciBiYWNrLXBvcnRpbmcgbGFyZ2UgZmVhdHVyZXMgaWYgdGhleSBoYXZlIGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlLgorICAgICAgICAgICAgVXNlciBvciBjb21tdW5pdHkgZGVtYW5kIGNhbiBhbHNvIHRyaWdnZXIgYSBiYWNrLXBvcnQgb3IgY3JlYXRpb24gb2YgbmV3CisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGluIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCBkdXJpbmcgdGhlIHVwcmV2IGN5Y2xlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCBldmVyeSBuZXcga2VybmVsIGJvdGggYWRkcyBmZWF0dXJlcyBhbmQgaW50cm9kdWNlcyBuZXcgYnVncy4KKyAgICAgICAgICAgIFRoZXNlIGNvbnNlcXVlbmNlcyBhcmUgdGhlIGJhc2ljIHByb3BlcnRpZXMgb2YgdXBzdHJlYW0ga2VybmVsIGRldmVsb3BtZW50IGFuZCBhcmUKKyAgICAgICAgICAgIG1hbmFnZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSdzIGtlcm5lbCBzdHJhdGVneS4KKyAgICAgICAgICAgIEl0IGlzIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0ncyBwb2xpY3kgdG8gbm90IGJhY2stcG9ydCBtaW5vciBmZWF0dXJlcyB0byB0aGUgcmVsZWFzZWQga2VybmVsLgorICAgICAgICAgICAgVGhleSBvbmx5IGNvbnNpZGVyIGJhY2stcG9ydGluZyBzaWduaWZpY2FudCB0ZWNobm9sb2dpY2FsIGp1bXBzIC0gYW5kLCB0aGF0IGlzIGRvbmUKKyAgICAgICAgICAgIGFmdGVyIGEgY29tcGxldGUgZ2FwIGFuYWx5c2lzLgorICAgICAgICAgICAgVGhlIHJlYXNvbiBmb3IgdGhpcyBwb2xpY3kgaXMgdGhhdCBiYWNrLXBvcnRpbmcgYW55IHNtYWxsIHRvIG1lZGl1bSBzaXplZCBjaGFuZ2UKKyAgICAgICAgICAgIGZyb20gYW4gZXZvbHZpbmcga2VybmVsIGNhbiBlYXNpbHkgY3JlYXRlIG1pc21hdGNoZXMsIGluY29tcGF0aWJpbGl0aWVzIGFuZCB2ZXJ5CisgICAgICAgICAgICBzdWJ0bGUgZXJyb3JzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2UgcG9saWNpZXMgcmVzdWx0IGluIGJvdGggYSBzdGFibGUgYW5kIGEgY3V0dGluZworICAgICAgICAgICAgZWRnZSBrZXJuZWwgdGhhdCBtaXhlcyBmb3J3YXJkIHBvcnRzIG9mIGV4aXN0aW5nIGZlYXR1cmVzIGFuZCBzaWduaWZpY2FudCBhbmQgY3JpdGljYWwKKyAgICAgICAgICAgIG5ldyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgRm9yd2FyZCBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFlvY3RvIFByb2plY3Qga2VybmVsCisgICAgICAgICAgICBjYW4gYmUgdGhvdWdodCBvZiBhcyBhICJtaWNybyB1cHJldi4iCisgICAgICAgICAgICBUaGUgbWFueSDigJxtaWNybyB1cHJldnPigJ0gcHJvZHVjZSBhIGtlcm5lbCB2ZXJzaW9uIHdpdGggYSBtaXggb2YKKyAgICAgICAgICAgIGltcG9ydGFudCBuZXcgbWFpbmxpbmUsIG5vbi1tYWlubGluZSwgQlNQIGRldmVsb3BtZW50cyBhbmQgZmVhdHVyZSBpbnRlZ3JhdGlvbnMuCisgICAgICAgICAgICBUaGlzIGtlcm5lbCBnaXZlcyBpbnNpZ2h0IGludG8gbmV3IGZlYXR1cmVzIGFuZCBhbGxvd3MgZm9jdXNlZAorICAgICAgICAgICAgYW1vdW50cyBvZiB0ZXN0aW5nIHRvIGJlIGRvbmUgb24gdGhlIGtlcm5lbCwgd2hpY2ggcHJldmVudHMKKyAgICAgICAgICAgIHN1cnByaXNlcyB3aGVuIHNlbGVjdGluZyB0aGUgbmV4dCBtYWpvciB1cHJldi4KKyAgICAgICAgICAgIFRoZSBxdWFsaXR5IG9mIHRoZXNlIGN1dHRpbmcgZWRnZSBrZXJuZWxzIGlzIGV2b2x2aW5nIGFuZCB0aGUga2VybmVscyBhcmUgdXNlZCBpbiBsZWFkaW5nIGVkZ2UKKyAgICAgICAgICAgIGZlYXR1cmUgYW5kIEJTUCBkZXZlbG9wbWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtYXJjaGl0ZWN0dXJlJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUga2VybmVscyBhdmFpbGFibGUgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3QgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uCisgICAgICAgICAgICBvbiB0aGUgbWVjaGFuaXNtcyB1c2VkIHRvIGFjaGlldmUgdGhhdCBhcmNoaXRlY3R1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3Jz4KKyAgICAgICAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgYSBrZXkgZ29hbCBvZiB0aGUgWW9jdG8gUHJvamVjdCBpcyB0byBwcmVzZW50IHRoZQorICAgICAgICAgICAgICAgIGRldmVsb3BlciB3aXRoCisgICAgICAgICAgICAgICAgYSBrZXJuZWwgdGhhdCBoYXMgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5IHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgdXNlci4KKyAgICAgICAgICAgICAgICBUaGUgYXJjaGl0ZWN0dXJlIGFuZCBtZWNoYW5pc21zIHVzZWQgYWNoaWV2ZSB0aGF0IGdvYWwgaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICB1cHN0cmVhbSA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiBhIFlvY3RvIFByb2plY3Qga2VybmVsIGFzIGNvbnNpc3Rpbmcgb2YgYSBiYXNlbGluZSBMaW51eCBrZXJuZWwgd2l0aAorICAgICAgICAgICAgICAgIGFkZGVkIGZlYXR1cmVzIGxvZ2ljYWxseSBzdHJ1Y3R1cmVkIG9uIHRvcCBvZiB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSB0YWdnZWQgYW5kIG9yZ2FuaXplZCBieSB3YXkgb2YgYSBicmFuY2hpbmcgc3RyYXRlZ3kgaW1wbGVtZW50ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgc291cmNlIGNvZGUgbWFuYWdlciAoU0NNKSBHaXQuCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdpdCBhcyBhcHBsaWVkIHRvIHRoZSBZb2N0byBQcm9qZWN0LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNlZSB0aGUgYWRkZWQgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICAgICAgdGhlIGNvbW1pdHMgdGhhdCBtYWtlIHVwIHRob3NlIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uIHRvIGJlaW5nIGFibGUgdG8gc2VlIGFkZGVkIGZlYXR1cmVzLCB0aGUgdXNlciBjYW4gYWxzbyB2aWV3IHRoZSBoaXN0b3J5IG9mIHdoYXQKKyAgICAgICAgICAgICAgICBtYWRlIHVwIHRoZSBiYXNlbGluZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlsbHVzdHJhdGlvbiBzaG93cyB0aGUgY29uY2VwdHVhbCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGU9IjEwMCIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBpbGx1c3RyYXRpb24sIHRoZSAiS2VybmVsLm9yZyBCcmFuY2ggUG9pbnQiCisgICAgICAgICAgICAgICAgbWFya3MgdGhlIHNwZWNpZmljIHNwb3QgKG9yIHJlbGVhc2UpIGZyb20KKyAgICAgICAgICAgICAgICB3aGljaCB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBGcm9tIHRoaXMgcG9pbnQgInVwIiBpbiB0aGUgdHJlZSwgZmVhdHVyZXMgYW5kIGRpZmZlcmVuY2VzIGFyZSBvcmdhbml6ZWQgYW5kIHRhZ2dlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSAiWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwiIGNvbnRhaW5zIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gdG8gZXZlcnkga2VybmVsCisgICAgICAgICAgICAgICAgdHlwZSBhbmQgQlNQIHRoYXQgaXMgb3JnYW5pemVkIGZ1cnRoZXIgdXAgdGhlIHRyZWUuCisgICAgICAgICAgICAgICAgUGxhY2luZyB0aGVzZSBjb21tb24gZmVhdHVyZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJlZSB0aGlzIHdheSBtZWFucyBmZWF0dXJlcyBkbyBub3QgaGF2ZSB0byBiZSBkdXBsaWNhdGVkIGFsb25nIGluZGl2aWR1YWwgYnJhbmNoZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRnJvbSB0aGUgWW9jdG8gUHJvamVjdCBCYXNlbGluZSBLZXJuZWwsIGJyYW5jaCBwb2ludHMgcmVwcmVzZW50IHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgICAgICAgICBmb3IgaW5kaXZpZHVhbCBCU1BzIGFzIHdlbGwgYXMgcmVhbC10aW1lIGtlcm5lbHMuCisgICAgICAgICAgICAgICAgVGhlIGlsbHVzdHJhdGlvbiByZXByZXNlbnRzIHRoaXMgdGhyb3VnaCB0aHJlZSBCU1Atc3BlY2lmaWMgYnJhbmNoZXMgYW5kIGEgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCByZXByZXNlbnRzIHNvbWUgdW5pcXVlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBCU1Agb3IgYSByZWFsLXRpbWUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIHN0cnVjdHVyZSwgdGhlIHJlYWwtdGltZSBrZXJuZWwgYnJhbmNoIGhhcyBjb21tb24gZmVhdHVyZXMgZm9yIGFsbAorICAgICAgICAgICAgICAgIHJlYWwtdGltZSBrZXJuZWxzIGFuZCBjb250YWlucworICAgICAgICAgICAgICAgIG1vcmUgYnJhbmNoZXMgZm9yIGluZGl2aWR1YWwgQlNQLXNwZWNpZmljIHJlYWwtdGltZSBrZXJuZWxzLgorICAgICAgICAgICAgICAgIFRoZSBpbGx1c3RyYXRpb24gc2hvd3MgdGhyZWUgYnJhbmNoZXMgYXMgYW4gZXhhbXBsZS4KKyAgICAgICAgICAgICAgICBFYWNoIGJyYW5jaCBwb2ludHMgdGhlIHdheSB0byBzcGVjaWZpYywgdW5pcXVlIGZlYXR1cmVzIGZvciBhIHJlc3BlY3RpdmUgcmVhbC10aW1lCisgICAgICAgICAgICAgICAga2VybmVsIGFzIHRoZXkgYXBwbHkgdG8gYSBnaXZlbiBCU1AuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIHByZXNlbnRzIGEgY2xlYXIgcGF0aCBvZiBtYXJrZXJzIChvciBicmFuY2hlcykgdG8gdGhlCisgICAgICAgICAgICAgICAgZGV2ZWxvcGVyIHRoYXQsIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLCBpcyB0aGUga2VybmVsIG5lZWRlZCBmb3IgYW55IGdpdmVuIHNldAorICAgICAgICAgICAgICAgIG9mIHJlcXVpcmVtZW50cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdicmFuY2hpbmctYW5kLXdvcmtmbG93Jz4KKyAgICAgICAgICAgIDx0aXRsZT5CcmFuY2hpbmcgU3RyYXRlZ3kgYW5kIFdvcmtmbG93PC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRlYW0gY3JlYXRlcyBrZXJuZWwgYnJhbmNoZXMgYXQgcG9pbnRzIHdoZXJlIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgICAgICAgICAgICBubyBsb25nZXIgc2hhcmVkIGFuZCB0aHVzLCBuZWVkcyB0byBiZSBpc29sYXRlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYm9hcmQtc3BlY2lmaWMgaW5jb21wYXRpYmlsaXRpZXMgd291bGQgcmVxdWlyZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgIGFuZCB3b3VsZCByZXF1aXJlIGEgYnJhbmNoIHRvIHNlcGFyYXRlIHRoZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICBMaWtld2lzZSwgZm9yIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcywgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGlzIHVzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGJyYW5jaGluZyBzdHJhdGVneSByZXN1bHRzIGluIGEgdHJlZSB0aGF0IGhhcyBmZWF0dXJlcyBvcmdhbml6ZWQgdG8gYmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICBmb3IgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5LCBzaW5nbGUga2VybmVsIHR5cGVzLCBvciBhIHN1YnNldCBvZiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzdHJhdGVneSBhbHNvIHJlc3VsdHMgaW4gbm90IGhhdmluZyB0byBzdG9yZSB0aGUgc2FtZSBmZWF0dXJlIHR3aWNlCisgICAgICAgICAgICAgICAgaW50ZXJuYWxseSBpbiB0aGUgdHJlZS4KKyAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSBrZXJuZWwgdGVhbSBzdG9yZXMgdGhlIHVuaXF1ZSBkaWZmZXJlbmNlcyByZXF1aXJlZCB0byBhcHBseSB0aGUKKyAgICAgICAgICAgICAgICBmZWF0dXJlIG9udG8gdGhlIGtlcm5lbCB0eXBlIGluIHF1ZXN0aW9uLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHN0cml2ZXMgdG8gcGxhY2UgZmVhdHVyZXMgaW4gdGhlIHRyZWUgc3VjaCB0aGF0IHRoZXkgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBieSBhbGwgYm9hcmRzIGFuZCBrZXJuZWwgdHlwZXMgd2hlcmUgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGR1cmluZyBkZXZlbG9wbWVudCBjeWNsZXMgb3Igd2hlbiBsYXJnZSBmZWF0dXJlcyBhcmUgbWVyZ2VkLAorICAgICAgICAgICAgICAgICAgICB0aGUgdGVhbSBjYW5ub3QgYWx3YXlzIGZvbGxvdyB0aGlzIHByYWN0aWNlLgorICAgICAgICAgICAgICAgICAgICBJbiB0aG9zZSBjYXNlcywgdGhlIHRlYW0gdXNlcyBpc29sYXRlZCBicmFuY2hlcyB0byBtZXJnZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCU1Atc3BlY2lmaWMgY29kZSBhZGRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBrZXJuZWwtc3BlY2lmaWMgYWRkaXRpb25zLgorICAgICAgICAgICAgICAgIFNvbWUgQlNQcyBvbmx5IG1ha2Ugc2Vuc2UgZ2l2ZW4gY2VydGFpbiBrZXJuZWwgdHlwZXMuCisgICAgICAgICAgICAgICAgU28sIGZvciB0aGVzZSB0eXBlcywgdGhlIHRlYW0gY3JlYXRlcyBicmFuY2hlcyBvZmYgdGhlIGVuZCBvZiB0aGF0IGtlcm5lbCB0eXBlIGZvciBhbGwKKyAgICAgICAgICAgICAgICBvZiB0aGUgQlNQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gdGhhdCBrZXJuZWwgdHlwZS4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgdG9vbHMgdGhhdCBjcmVhdGUgdGhlIEJTUCBicmFuY2gsIHRoZSBCU1AgaXMgcmVhbGx5IG5vCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IHRoYW4gYSBmZWF0dXJlLgorICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNhbWUgYnJhbmNoaW5nIHN0cmF0ZWd5IGFwcGxpZXMgdG8gQlNQcyBhcyBpdCBkb2VzIHRvIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIFNvIGFnYWluLCByYXRoZXIgdGhhbiBzdG9yZSB0aGUgQlNQIHR3aWNlLCB0aGUgdGVhbSBvbmx5IHN0b3JlcyB0aGUgdW5pcXVlCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMgZm9yIHRoZSBCU1AgYWNyb3NzIHRoZSBzdXBwb3J0ZWQgbXVsdGlwbGUga2VybmVscy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoaWxlIHRoaXMgc3RyYXRlZ3kgY2FuIHJlc3VsdCBpbiBhIHRyZWUgd2l0aCBhIHNpZ25pZmljYW50IG51bWJlciBvZiBicmFuY2hlcywgaXQgaXMKKyAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGZyb20gdGhlIGRldmVsb3BlcidzIHBvaW50IG9mIHZpZXcsIHRoZXJlIGlzIGEgbGluZWFyCisgICAgICAgICAgICAgICAgcGF0aCB0aGF0IHRyYXZlbHMgZnJvbSB0aGUgYmFzZWxpbmUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiwgdGhyb3VnaCBhIHNlbGVjdAorICAgICAgICAgICAgICAgIGdyb3VwIG9mIGZlYXR1cmVzIGFuZCBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuCisgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBkaXZpc2lvbnMgb2YgdGhlIGtlcm5lbCBhcmUgdHJhbnNwYXJlbnQgYW5kIGFyZSBub3QgcmVsZXZhbnQKKyAgICAgICAgICAgICAgICB0byB0aGUgZGV2ZWxvcGVyIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KKyAgICAgICAgICAgICAgICBGcm9tIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRoIGlzIHRoZSAibWFzdGVyIiBicmFuY2guCisgICAgICAgICAgICAgICAgVGhlIGRldmVsb3BlciBkb2VzIG5vdCBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBleGlzdGVuY2Ugb2YgYW55IG90aGVyIGJyYW5jaGVzIGF0IGFsbC4KKyAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHRoZXJlIGlzIHZhbHVlIGluIHRoZSBleGlzdGVuY2Ugb2YgdGhlc2UgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgdHJlZSwgc2hvdWxkIGEgcGVyc29uIGRlY2lkZSB0byBleHBsb3JlIHRoZW0uCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byBCU1BzIGF0IGVpdGhlciB0aGUgY29tbWl0IGxldmVsIG9yIGF0IHRoZSBsaW5lLWJ5LWxpbmUKKyAgICAgICAgICAgICAgICBjb2RlIDxmaWxlbmFtZT5kaWZmPC9maWxlbmFtZT4gbGV2ZWwgaXMgbm93IGEgdHJpdmlhbCBvcGVyYXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXb3JraW5nIHdpdGggdGhlIGtlcm5lbCBhcyBhIHN0cnVjdHVyZWQgdHJlZSBmb2xsb3dzIHJlY29nbml6ZWQgY29tbXVuaXR5IGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoZSBrZXJuZWwgYXMgc2hpcHBlZCB3aXRoIHRoZSBwcm9kdWN0LCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGFuICJ1cHN0cmVhbSBzb3VyY2UiIGFuZCB2aWV3ZWQgYXMgYSBzZXJpZXMgb2YKKyAgICAgICAgICAgICAgICBoaXN0b3JpY2FsIGFuZCBkb2N1bWVudGVkIG1vZGlmaWNhdGlvbnMgKGNvbW1pdHMpLgorICAgICAgICAgICAgICAgIFRoZXNlIG1vZGlmaWNhdGlvbnMgcmVwcmVzZW50IHRoZSBkZXZlbG9wbWVudCBhbmQgc3RhYmlsaXphdGlvbiBkb25lCisgICAgICAgICAgICAgICAgYnkgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGRldmVsb3BtZW50IHRlYW0uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGNvbW1pdHMgb25seSBjaGFuZ2UgYXQgc2lnbmlmaWNhbnQgcmVsZWFzZSBwb2ludHMgaW4gdGhlIHByb2R1Y3QgbGlmZSBjeWNsZSwKKyAgICAgICAgICAgICAgICBkZXZlbG9wZXJzIGNhbiB3b3JrIG9uIGEgYnJhbmNoIGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBsYXN0IHJlbGV2YW50IGNvbW1pdCBpbiB0aGUgc2hpcHBlZCBZb2N0byBQcm9qZWN0IGtlcm5lbC4KKyAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwgdGhlIHN0cnVjdHVyZSBpcyB0cmFuc3BhcmVudCB0byB0aGUgZGV2ZWxvcGVyCisgICAgICAgICAgICAgICAgYmVjYXVzZSB0aGUga2VybmVsIHRyZWUgaXMgbGVmdCBpbiB0aGlzIHN0YXRlIGFmdGVyIGNsb25pbmcgYW5kIGJ1aWxkaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc291cmNlLWNvZGUtbWFuYWdlci1naXQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb2RlIE1hbmFnZXIgLSBHaXQ8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkgaXMgR2l0LgorICAgICAgICAgICAgICAgIFRoaXMgU0NNIGlzIHRoZSBvYnZpb3VzIG1lY2hhbmlzbSBmb3IgbWVldGluZyB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgZ29hbHMuCisgICAgICAgICAgICAgICAgTm90IG9ubHkgaXMgaXQgdGhlIFNDTSBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiBidXQsCisgICAgICAgICAgICAgICAgR2l0IGNvbnRpbnVlcyB0byBncm93IGluIHBvcHVsYXJpdHkgYW5kIHN1cHBvcnRzIG1hbnkgZGlmZmVyZW50IHdvcmsgZmxvd3MsCisgICAgICAgICAgICAgICAgZnJvbnQtZW5kcyBhbmQgbWFuYWdlbWVudCB0ZWNobmlxdWVzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGRvY3VtZW50YXRpb24gb24gR2l0IGF0IDx1bGluayB1cmw9J2h0dHA6Ly9naXQtc2NtLmNvbS9kb2N1bWVudGF0aW9uJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IGFuIGludHJvZHVjdGlvbiB0byBHaXQgYXMgaXQgYXBwbGllcyB0byB0aGUgWW9jdG8gUHJvamVjdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZ2l0Jz5HaXQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICBUaGVzZSByZWZlcmVuY2VkIHNlY3Rpb25zIG92ZXJ2aWV3IEdpdCBhbmQgZGVzY3JpYmUgYSBtaW5pbWFsIHNldCBvZgorICAgICAgICAgICAgICAgIGNvbW1hbmRzIHRoYXQgYWxsb3dzIHlvdSB0byBiZSBmdW5jdGlvbmFsIHVzaW5nIEdpdC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgYXMgbXVjaCwgb3IgYXMgbGl0dGxlLCBvZiB3aGF0IEdpdCBoYXMgdG8gb2ZmZXIgdG8gYWNjb21wbGlzaCB3aGF0CisgICAgICAgICAgICAgICAgICAgIHlvdSBuZWVkIGZvciB5b3VyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBiZSBhICJHaXQgTWFzdGVyIiBpbiBvcmRlciB0byB1c2UgaXQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L2FwcGVuZGl4PgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNWI3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidrZXJuZWwtZGV2LXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU2YTVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldAorCXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorCXhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiCisJdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQKKwkgIGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEvZWNsaXBzZS9lY2xpcHNlMy54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBzZWxlY3Q9Iid5ZXMnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsucXVpZXRseSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuZmlyc3Quc2VjdGlvbnMiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMTAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL2tlcm5lbC1kZXYvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1leGFtcGxlcy54bWwgYi9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1leGFtcGxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5YWVmNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDkxOCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J2tlcm5lbC1ob3ctdG8nPgorCis8dGl0bGU+V29ya2luZyB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IEtlcm5lbDwvdGl0bGU+CisKKworPHNlY3Rpb24gaWQ9J2FjdGlvbnMtb3JnJz4KKyAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBob3cgdG8gYWNjb21wbGlzaCB0YXNrcyBpbnZvbHZpbmcgYSBrZXJuZWwncyB0cmVlIHN0cnVjdHVyZS4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGlzIGRlc2lnbmVkIHRvIGhlbHAgdGhlIGRldmVsb3BlciB0aGF0IHdhbnRzIHRvIG1vZGlmeSB0aGUgWW9jdG8KKyAgICAgICAgUHJvamVjdCBrZXJuZWwgYW5kIGNvbnRyaWJ1dGUgY2hhbmdlcyB1cHN0cmVhbSB0byB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgVGhlIGluZm9ybWF0aW9uIGNvdmVycyB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRyZWUgY29uc3RydWN0aW9uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVpbGQgc3RyYXRlZ2llczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldvcmtmbG93IGV4YW1wbGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0cmVlLWNvbnN0cnVjdGlvbic+CisgICAgICAgIDx0aXRsZT5UcmVlIENvbnN0cnVjdGlvbjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBjb25zdHJ1Y3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGFzIGFjY29tcGxpc2hlZCBieSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHRvIGNyZWF0ZSBrZXJuZWwgcmVwb3NpdG9yaWVzLgorICAgICAgICAgICAgVGhlc2Uga2VybmVsIHJlcG9zaXRvcmllcyBhcmUgZm91bmQgdW5kZXIgdGhlIGhlYWRpbmcgIllvY3RvIExpbnV4IEtlcm5lbCIgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+JllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgIGFuZCBjYW4gYmUgc2hpcHBlZCBhcyBwYXJ0IG9mIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgVGhlIHRlYW0gY3JlYXRlcyB0aGVzZSByZXBvc2l0b3JpZXMgYnkKKyAgICAgICAgICAgIGNvbXBpbGluZyBhbmQgZXhlY3V0aW5nIHRoZSBzZXQgb2YgZmVhdHVyZSBkZXNjcmlwdGlvbnMgZm9yIGV2ZXJ5IEJTUC9mZWF0dXJlCisgICAgICAgICAgICBpbiB0aGUgcHJvZHVjdC4KKyAgICAgICAgICAgIFRob3NlIGZlYXR1cmUgZGVzY3JpcHRpb25zIGxpc3QgYWxsIG5lY2Vzc2FyeSBwYXRjaGVzLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgYnJhbmNoaW5nLCB0YWdnaW5nIGFuZCBmZWF0dXJlIGRpdmlzaW9ucyBmb3VuZCBpbiBhIGtlcm5lbC4KKyAgICAgICAgICAgIFRodXMsIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3J5IChvciB0cmVlKSBpcyBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBleGlzdGVuY2Ugb2YgdGhpcyB0cmVlIGFsbG93cyB5b3UgdG8gYWNjZXNzIGFuZCBjbG9uZSBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCB0byBidWlsZCBpbWFnZXMgYmFzZWQgb24gdGhlaXIgY29uZmlndXJhdGlvbnMKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgZmlsZXMgdXNlZCB0byBkZXNjcmliZSBhbGwgdGhlIHZhbGlkIGZlYXR1cmVzIGFuZCBCU1BzCisgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgaW4gYW55IGNsb25lIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yeQorICAgICAgICAgICAgR2l0IHRyZWUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNsb25lcyB0aGUgWW9jdG8gUHJvamVjdCBiYXNlbGluZSBrZXJuZWwgdGhhdAorICAgICAgICAgICAgYnJhbmNoZWQgb2ZmIG9mIDxmaWxlbmFtZT5saW51eC5vcmc8L2ZpbGVuYW1lPiB2ZXJzaW9uIDMuNDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy40CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlIG9mIGhvdyB0byBzZXQgdXAgYSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBvZiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAga2VybmVsIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbG9jYWwta2VybmVsLWZpbGVzJz5Zb2N0byBQcm9qZWN0IEtlcm5lbDwvdWxpbms+IiBidWxsZXRlZAorICAgICAgICAgICAgaXRlbSBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNsb25lZCB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5IG9uIHlvdXIgbG9jYWwgbWFjaGluZSwgeW91IGNhbgorICAgICAgICAgICAgc3dpdGNoIHRvIHRoZSA8ZmlsZW5hbWU+bWV0YTwvZmlsZW5hbWU+IGJyYW5jaCB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhc3N1bWVzIHRoZSBsb2NhbCBHaXQgcmVwb3NpdG9yeSBmb3IgdGhlIGtlcm5lbCBpcyBpbgorICAgICAgICAgICAgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L2xpbnV4LXlvY3RvLTMuNAorICAgICAkIGdpdCBjaGVja291dCAtYiBtZXRhIG9yaWdpbi9tZXRhCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIGNoZWNrZWQgb3V0IGFuZCBzd2l0Y2hlZCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2gsCisgICAgICAgICAgICB5b3UgY2FuIHNlZSBhIHNuYXBzaG90IG9mIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGZlYXR1cmUgZGVzY3JpcHRpb25zIHRoYXQgYXJlCisgICAgICAgICAgICB1c2VkIHRvIGJ1aWxkIHRoYXQgcGFydGljdWxhciBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZXNlIGRlc2NyaXB0aW9ucyBhcmUgaW4gdGhlIGZvcm0gb2YgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCBicm93c2luZyB5b3VyIGxvY2FsIGtlcm5lbCByZXBvc2l0b3J5CisgICAgICAgICAgICBmb3IgZmVhdHVyZSBkZXNjcmlwdGlvbnMgYW5kIHBhdGNoZXMgaXMgbm90IGFuIGVmZmVjdGl2ZSB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgaW4gYQorICAgICAgICAgICAgcGFydGljdWxhciBrZXJuZWwgYnJhbmNoLgorICAgICAgICAgICAgSW5zdGVhZCwgeW91IHNob3VsZCB1c2UgR2l0IGRpcmVjdGx5IHRvIGRpc2NvdmVyIHRoZSBjaGFuZ2VzIGluIGEgYnJhbmNoLgorICAgICAgICAgICAgVXNpbmcgR2l0IGlzIGFuIGVmZmljaWVudCBhbmQgZmxleGlibGUgd2F5IHRvIGluc3BlY3QgY2hhbmdlcyB0byB0aGUga2VybmVsLgorICAgICAgICAgICAgRm9yIGV4YW1wbGVzIHNob3dpbmcgaG93IHRvIHVzZSBHaXQgdG8gaW5zcGVjdCBrZXJuZWwgY29tbWl0cywgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMKKyAgICAgICAgICAgIGluIHRoaXMgY2hhcHRlci4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtic3BfbmFtZSZndDstJmx0O2tlcm5lbF90eXBlJmd0Oy5zY2MKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5PbmNlIGxvY2F0ZWQsIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uIGlzIGVpdGhlciBjb21waWxlZCBpbnRvIGEgc2ltcGxlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICBvZiBhY3Rpb25zLCBvciBpbnRvIGFuIGV4aXN0aW5nIGVxdWl2YWxlbnQgc2NyaXB0IHRoYXQgaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzaGlwcGVkIGtlcm5lbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgZmVhdHVyZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgZmVhdHVyZXMgY2FuIGNvbWUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUtFUk5FTF9GRUFUVVJFUyc+PGZpbGVuYW1lPktFUk5FTF9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gcmVjaXBlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RWFjaCBleHRyYSBmZWF0dXJlIGlzIGxvY2F0ZWQsIGNvbXBpbGVkIGFuZCBhcHBlbmRlZCB0byB0aGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGFzIGRlc2NyaWJlZCBpbiBzdGVwIHRocmVlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGlzIGV4ZWN1dGVkIHRvIHByb2R1Y2UgYSBzZXJpZXMgb2YgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBkaXJlY3RvcmllcyBhcmUgZGVzY3JpcHRpb25zIG9mIGFsbCB0aGUgYnJhbmNoZXMsIHRhZ3MsIHBhdGNoZXMgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBiYXNlIEdpdCByZXBvc2l0b3J5IHRvIGNvbXBsZXRlbHkgY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKGJ1aWxkKSBicmFuY2ggZm9yIHRoZSBuZXcgQlNQIG9yIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBiYXNlIHJlcG9zaXRvcnkgaXMgY2xvbmVkLCBhbmQgdGhlIGFjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYXJlIGFwcGxpZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHRyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBHaXQgcmVwb3NpdG9yeSBpcyBsZWZ0IHdpdGggdGhlIGRlc2lyZWQgYnJhbmNoIGNoZWNrZWQgb3V0IGFuZCBhbnkKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQgYnJhbmNoaW5nLCBwYXRjaGluZyBhbmQgdGFnZ2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGtlcm5lbCB0cmVlIGlzIG5vdyByZWFkeSBmb3IgZGV2ZWxvcGVyIGNvbnN1bXB0aW9uIHRvIGJlIGxvY2FsbHkgY2xvbmVkLAorICAgICAgICAgICAgY29uZmlndXJlZCwgYW5kIGJ1aWx0IGludG8gYSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzcGVjaWZpYyB0byBzb21lIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgICAgIDxub3RlPjxwYXJhPlRoZSBnZW5lcmF0ZWQgPGZpbGVuYW1lPm1ldGEtKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGFkZCB0byB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgYXMgc2hpcHBlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgQW55IGFkZC1vbnMgYW5kIGNvbmZpZ3VyYXRpb24gZGF0YSBhcmUgYXBwbGllZCB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBUaGUgZnVsbCByZXBvc2l0b3J5IGdlbmVyYXRpb24gdGhhdCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICBvZmZpY2lhbCBZb2N0byBQcm9qZWN0IGtlcm5lbCByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPmh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgYm9hcmRzIGFuZCBjb25maWd1cmF0aW9ucy48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIHRlY2huaXF1ZSB0aGUgWW9jdG8gUHJvamVjdCB0ZWFtIHVzZXMgaXMgZmxleGlibGUgYW5kIGFsbG93cyBmb3Igc2VhbWxlc3MKKyAgICAgICAgICAgICAgICBibGVuZGluZyBvZiBhbiBpbW11dGFibGUgaGlzdG9yeSB3aXRoIGFkZGl0aW9uYWwgcGF0Y2hlcyBzcGVjaWZpYyB0byBhCisgICAgICAgICAgICAgICAgZGVwbG95bWVudC4KKyAgICAgICAgICAgICAgICBBbnkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiB0aGUgYnJhbmNoZXMuPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLXN0cmF0ZWd5Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIFN0cmF0ZWd5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGV4aXN0cyBvbiBhIGRldmVsb3BtZW50IHN5c3RlbSwKKyAgICAgICAgICAgIHlvdSBjYW4gY29uc2lkZXIgdGhlIGNvbXBpbGF0aW9uIHBoYXNlIG9mIGtlcm5lbCBkZXZlbG9wbWVudCAtIGJ1aWxkaW5nIGEga2VybmVsIGltYWdlLgorICAgICAgICAgICAgU29tZSBwcmVyZXF1aXNpdGVzIGV4aXN0IHRoYXQgYXJlIHZhbGlkYXRlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyBiZWZvcmUgY29tcGlsYXRpb24KKyAgICAgICAgICAgIHN0YXJ0czoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L3VsaW5rPiBwb2ludHMKKyAgICAgICAgICAgICAgICB0byB0aGUga2VybmVsIEdpdCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkEgQlNQIGJ1aWxkIGJyYW5jaCBleGlzdHMuCisgICAgICAgICAgICAgICAgVGhpcyBicmFuY2ggaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtrZXJuZWxfdHlwZSZndDsvJmx0O2JzcF9uYW1lJmd0OworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUCwgc2VlCisgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3dvcmtmbG93LWV4YW1wbGVzJz5Xb3JrZmxvdyBFeGFtcGxlczwvbGluaz4iLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZWZvcmUgYnVpbGRpbmcgYSBrZXJuZWwsIHRoZSBidWlsZCBwcm9jZXNzIHZlcmlmaWVzIHRoZSB0cmVlCisgICAgICAgICAgICBhbmQgY29uZmlndXJlcyB0aGUga2VybmVsIGJ5IHByb2Nlc3NpbmcgYWxsIG9mIHRoZQorICAgICAgICAgICAgY29uZmlndXJhdGlvbiAiZnJhZ21lbnRzIiBzcGVjaWZpZWQgYnkgZmVhdHVyZSBkZXNjcmlwdGlvbnMgaW4gdGhlIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgQXMgdGhlIGZlYXR1cmVzIGFyZSBjb21waWxlZCwgYXNzb2NpYXRlZCBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgYXJlIG5vdGVkCisgICAgICAgICAgICBhbmQgcmVjb3JkZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBzZXJpZXMgb2YgZGlyZWN0b3JpZXMgaW4gdGhlaXIgY29tcGlsYXRpb24gb3JkZXIuCisgICAgICAgICAgICBUaGUgZnJhZ21lbnRzIGFyZSBtaWdyYXRlZCwgcHJlLXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBMaW51eCBLZXJuZWwKKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gc3Vic3lzdGVtICg8ZmlsZW5hbWU+bGtjPC9maWxlbmFtZT4pIGFzIHJhdyBpbnB1dCBpbiB0aGUgZm9ybQorICAgICAgICAgICAgb2YgYSA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+IHVzZXMgaXRzIG93biBpbnRlcm5hbCBkZXBlbmRlbmN5IGNvbnN0cmFpbnRzIHRvIGRvIHRoZSBmaW5hbAorICAgICAgICAgICAgcHJvY2Vzc2luZyBvZiB0aGF0IGluZm9ybWF0aW9uIGFuZCBnZW5lcmF0ZXMgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgdGhhdCBpcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNpbmcgdGhlIGJvYXJkJ3MgYXJjaGl0ZWN0dXJlIGFuZCBvdGhlciByZWxldmFudCB2YWx1ZXMgZnJvbSB0aGUgYm9hcmQncyB0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiBpcyBzdGFydGVkIGFuZCBhIGtlcm5lbCBpbWFnZSBpcyBwcm9kdWNlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG90aGVyIHRoaW5nIHRoYXQgeW91IG5vdGljZSBvbmNlIHlvdSBjb25maWd1cmUgYSBrZXJuZWwgaXMgdGhhdAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgYnVpbGQgdHJlZSB0aGF0IGlzIHNlcGFyYXRlIGZyb20geW91ciBrZXJuZWwncyBsb2NhbCBHaXQKKyAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5IHRyZWUuCisgICAgICAgICAgICBUaGlzIGJ1aWxkIHRyZWUgaGFzIGEgbmFtZSB0aGF0IHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtLCB3aGVyZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7TUFDSElORX08L2ZpbGVuYW1lPiBpcyB0aGUgbWV0YWRhdGEgbmFtZSBvZiB0aGUgbWFjaGluZSAoQlNQKSBhbmQgImtlcm5lbF90eXBlIiBpcyBvbmUKKyAgICAgICAgICAgIG9mIHRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMgKGUuZy4gInN0YW5kYXJkIik6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgbGludXgtJHtNQUNISU5FfS0mbHQ7a2VybmVsX3R5cGUmZ3Q7LWJ1aWxkCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0aW5nIHN1cHBvcnQgaW4gdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdHJlZSBhY2hpZXZlcyB0aGlzCisgICAgICAgICAgICBkZWZhdWx0IGZ1bmN0aW9uYWxpdHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgbWVhbnMgdGhhdCBhbGwgdGhlIGdlbmVyYXRlZCBmaWxlcyBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUgb3IgQlNQIGFyZSBub3cgaW4KKyAgICAgICAgICAgIHRoZSBidWlsZCB0cmVlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBpbmNsdWRlIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUsIGFsbCB0aGUgPGZpbGVuYW1lPi5vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGVzLCB0aGUgPGZpbGVuYW1lPi5hPC9maWxlbmFtZT4gZmlsZXMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIFNpbmNlIGVhY2ggbWFjaGluZSBvciBCU1AgaGFzIGl0cyBvd24gc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGluIGl0cyBvd24gc2VwYXJhdGUgYnJhbmNoCisgICAgICAgICAgICBvZiB0aGUgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZWFzaWx5IHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBidWlsZHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nd29ya2Zsb3ctZXhhbXBsZXMnPgorICAgICAgICA8dGl0bGU+V29ya2Zsb3cgRXhhbXBsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgcHJldmlvdXNseSBub3RlZCwgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIGhhcyBidWlsdC1pbiBHaXQgaW50ZWdyYXRpb24uCisgICAgICAgICAgICBIb3dldmVyLCB0aGVzZSB1dGlsaXRpZXMgYXJlIG5vdCB0aGUgb25seSB3YXkgdG8gd29yayB3aXRoIHRoZSBrZXJuZWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGhhcyBub3QgbWFkZSBjaGFuZ2VzIHRvIEdpdCBvciB0byBvdGhlciB0b29scyB0aGF0CisgICAgICAgICAgICB3b3VsZCBpbnZhbGlkYXRlIGFsdGVybmF0ZSB3b3JrZmxvd3MuCisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSB3YXkgdGhlIGtlcm5lbCByZXBvc2l0b3J5IGlzIGNvbnN0cnVjdGVkIHJlc3VsdHMgaW4gdXNpbmcKKyAgICAgICAgICAgIG9ubHkgY29yZSBHaXQgZnVuY3Rpb25hbGl0eSwgdGh1cyBhbGxvd2luZyBhbnkgbnVtYmVyIG9mIHRvb2xzIG9yIGZyb250IGVuZHMgdG8gdXNlIHRoZQorICAgICAgICAgICAgcmVzdWx0aW5nIHRyZWUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyBzZXZlcmFsIHdvcmtmbG93IGV4YW1wbGVzLgorICAgICAgICAgICAgTWFueSBvZiB0aGUgZXhhbXBsZXMgdXNlIEdpdCBjb21tYW5kcy4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBHaXQgZG9jdW1lbnRhdGlvbiBhdAorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC1zY20uY29tL2RvY3VtZW50YXRpb24nPjwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgc2ltcGxlIG92ZXJ2aWV3IG9mIHVzaW5nIEdpdCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjaGFuZ2UtaW5zcGVjdGlvbi1rZXJuZWwtY2hhbmdlcy1jb21taXRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5DaGFuZ2UgSW5zcGVjdGlvbjogQ2hhbmdlcy9Db21taXRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBjb21tb24gcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgaXM6CisgICAgICAgICAgICAgICAgIldoYXQgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIHRyZWU/IgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBwcm9qZWN0cyB0aGF0IGhhdmUgYSBjb2xsZWN0aW9uIG9mIGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjb250YWluIHBhdGNoZXMgdG8gdGhlIGtlcm5lbCwgaXQgaXMgcG9zc2libGUgdG8gaW5zcGVjdCBvciAiZ3JlcCIgdGhlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgb2YgdGhlIGRpcmVjdG9yaWVzIHRvIGdldCBhIGdlbmVyYWwgZmVlbCBmb3IgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgVGhpcyBzb3J0IG9mIHBhdGNoIGluc3BlY3Rpb24gaXMgbm90IGFuIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICBkb25lIHRvIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgVGhlIHJlYXNvbiBpdCBpcyBpbmVmZmljaWVudCBpcyBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IG9wdGlvbmFsIHBhdGNoZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICBzZWxlY3RlZCBiYXNlZCBvbiB0aGUga2VybmVsIHR5cGUgYW5kIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgcGF0Y2hlcyBjb3VsZCBleGlzdCBpbiBkaXJlY3RvcmllcyB0aGF0IGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZGV0ZXJtaW5lIHdoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIGJyYW5jaCBpcyB0byB1c2UKKyAgICAgICAgICAgICAgICBHaXQgYW5kIGluc3BlY3Qgb3Igc2VhcmNoIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBnaXZlcyB5b3UgYSBmdWxsIHZpZXcgb2Ygbm90IG9ubHkgdGhlIHNvdXJjZSBjb2RlIG1vZGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgYnV0IGFsc28gcHJvdmlkZXMgdGhlIHJlYXNvbnMgZm9yIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nd2hhdC1jaGFuZ2VkLWluLWEta2VybmVsJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+V2hhdCBDaGFuZ2VkIGluIGEgS2VybmVsPzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBhIGZldyBleGFtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZSBHaXQgY29tbWFuZHMgdG8gZXhhbWluZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIEdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFlvY3RvIFByb2plY3QgZG8gbm90IGJyZWFrIGV4aXN0aW5nIEdpdAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5LCBhbmQgYmVjYXVzZSB0aGVyZSBleGlzdHMgbWFueSBwZXJtdXRhdGlvbnMgb2YgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICAgICAgICAgICAgR2l0IGNvbW1hbmRzLCBtYW55IG1ldGhvZHMgZXhpc3QgYnkgd2hpY2ggeW91IGNhbiBkaXNjb3ZlciBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMsIHVubGVzcyB5b3UgcHJvdmlkZSBhIGNvbW1pdCByYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gaGlzdG9yeSBpcyBibGVuZGVkIHdpdGggWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGZvcm0gcmFuZ2VzIGJ5IHVzaW5nIGJyYW5jaCBuYW1lcyBmcm9tIHRoZSBrZXJuZWwgdHJlZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyIGFuZCBsb3dlciBjb21taXQgbWFya2VycyB3aXRoIHRoZSBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlZSB0aGUgYnJhbmNoIG5hbWVzIHRocm91Z2ggdGhlIHdlYiBpbnRlcmZhY2UgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHNvdXJjZSByZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGJyYW5jaCBuYW1lcyBmb3IgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIHJlcG9zaXRvcnkgY2FuIGJlIHNlZW4gYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0LmNnaS9saW51eC15b2N0by0zLjQvcmVmcy9oZWFkcyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gc2VlIGEgZnVsbCByYW5nZSBvZiB0aGUgY2hhbmdlcywgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gY29tbWFuZCBhbmQgc3BlY2lmeSBhIGNvbW1pdCByYW5nZQorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJyYW5jaCAoPGZpbGVuYW1lPiZsdDtjb21taXQmZ3Q7Li4mbHQ7Y29tbWl0Jmd0OzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgbG9va3MgYXQgd2hhdCBoYXMgY2hhbmdlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmVtZW5sb3c8L2ZpbGVuYW1lPiBicmFuY2ggb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQ8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsb3dlciBjb21taXQgcmFuZ2UgaXMgdGhlIGNvbW1pdCBhc3NvY2lhdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFuZGFyZC9iYXNlPC9maWxlbmFtZT4gYnJhbmNoLCB3aGlsZQorICAgICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgY29tbWl0IHJhbmdlIGlzIHRoZSBjb21taXQgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RhbmRhcmQvZW1lbmxvdzwvZmlsZW5hbWU+IGJyYW5jaC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCB3aGF0Y2hhbmdlZCBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBzZWUgYSBzdW1tYXJ5IG9mIGNoYW5nZXMgdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB1c2luZyB0aGUgc2FtZSBicmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBsb2cgLS1vbmVsaW5lIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2l0IGxvZzwvZmlsZW5hbWU+IG91dHB1dCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0aGFuCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Z2l0IHdoYXRjaGFuZ2VkPC9maWxlbmFtZT4gYXMgeW91IGdldAorICAgICAgICAgICAgICAgICAgICBhIHNob3J0LCBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggY2hhbmdlIGFuZCBub3QgdGhlIGVudGlyZSBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSBjb2RlIGRpZmZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIGNoYW5nZXMsIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdpdCBkaWZmPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGRpZmYgb3JpZ2luL3N0YW5kYXJkL2Jhc2UuLm9yaWdpbi9zdGFuZGFyZC9lbWVubG93CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZXMgYW5kIHRoZSB0ZXh0IGRpZmZlcmVuY2VzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IHNob3c8L2ZpbGVuYW1lPiBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgc2hvdyBvcmlnaW4vc3RhbmRhcmQvYmFzZS4ub3JpZ2luL3N0YW5kYXJkL2VtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBpbmRpdmlkdWFsIHBhdGNoZXMgZm9yIGVhY2ggY2hhbmdlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0IGZvcm1hdC1wYXRjaDwvZmlsZW5hbWU+IGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHRoYXQgY3JlYXRlcyBwYXRjaCBmaWxlcyBmb3IgZWFjaCBjb21taXQgYW5kCisgICAgICAgICAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHlvdXIgPGZpbGVuYW1lPkRvY3VtZW50czwvZmlsZW5hbWU+IGRpcmVjdG9yeToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJEhPTUUvRG9jdW1lbnRzIG9yaWdpbi9zdGFuZGFyZC9iYXNlLi5vcmlnaW4vc3RhbmRhcmQvZW1lbmxvdworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nc2hvdy1hLXBhcnRpY3VsYXItZmVhdHVyZS1vci1icmFuY2gtY2hhbmdlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+U2hvdyBhIFBhcnRpY3VsYXIgRmVhdHVyZSBvciBCcmFuY2ggQ2hhbmdlPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZXZlbG9wZXJzIHVzZSB0YWdzIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCB0cmVlIHRvIGRpdmlkZSBjaGFuZ2VzIGZvciBzaWduaWZpY2FudAorICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBvciBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3Uga25vdyBhIHBhcnRpY3VsYXIgdGFnLCB5b3UgY2FuIHVzZSBHaXQgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgdG8gc2hvdyBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnIGFuZCBmaW5kIHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBCU1AgYnJhbmNoLCA8ZmlsZW5hbWU+a2VybmVsLm9yZzwvZmlsZW5hbWU+LCBhbmQgZmVhdHVyZSB0YWdzIGFyZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQsIHRoZXJlIGNvdWxkIGJlIG1hbnkgdGFncy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmdpdCBzaG93ICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZCBzaG93cyBjaGFuZ2VzIHRoYXQgYXJlIHRhZ2dlZCBieQorICAgICAgICAgICAgICAgICAgICBhIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGNoYW5nZXMgdGFnZ2VkIGJ5IHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzaG93IHN5c3RlbXRhcAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+Z2l0IGJyYW5jaCAtLWNvbnRhaW5zICZsdDt0YWcmZ3Q7PC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBzaG93IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gYSBwYXJ0aWN1bGFyIGZlYXR1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBzaG93cyB0aGUgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSA8ZmlsZW5hbWU+c3lzdGVtdGFwPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBicmFuY2ggLS1jb250YWlucyBzeXN0ZW10YXAKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSBtYW55IG90aGVyIGNvbXBhcmlzb25zIHRvIGlzb2xhdGUgQlNQIGFuZCBrZXJuZWwgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29tcGFyZSBhZ2FpbnN0IDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gdGFncworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIHRoZSA8ZmlsZW5hbWU+djMuNDwvZmlsZW5hbWU+IHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcG1lbnQtc2F2aW5nLWtlcm5lbC1tb2RpZmljYXRpb25zJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXZlbG9wbWVudDogU2F2aW5nIEtlcm5lbCBNb2RpZmljYXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBjb21tb24gb3BlcmF0aW9uIGlzIHRvIGJ1aWxkIGEgQlNQIHN1cHBsaWVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0LCBtYWtlIHNvbWUKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLCByZWJ1aWxkLCBhbmQgdGhlbiB0ZXN0LgorICAgICAgICAgICAgICAgIFRob3NlIGxvY2FsIGNoYW5nZXMgb2Z0ZW4gbmVlZCB0byBiZSBleHBvcnRlZCwgc2hhcmVkIG9yIG90aGVyd2lzZSBtYWludGFpbmVkLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBTaW5jZSB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgc291cmNlIHRyZWUgaXMgYmFja2VkIGJ5IEdpdCwgdGhpcyBhY3Rpdml0eSBpcworICAgICAgICAgICAgICAgIG11Y2ggZWFzaWVyIGFzIGNvbXBhcmVkIHRvIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBHaXQgdHJhY2tzIGZpbGUgbW9kaWZpY2F0aW9ucywgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMsIGl0IGlzIGVhc3kKKyAgICAgICAgICAgICAgICB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIGxhdGVyIHJlYWxpemUgdGhhdCB5b3UgbmVlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEl0IGlzIGFsc28gZWFzeSB0byBkZXRlcm1pbmUgd2hhdCBoYXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbHNvIHByb3ZpZGVzIG1hbnkgdG9vbHMgdG8gY29tbWl0LCB1bmRvIGFuZCBleHBvcnQgdGhvc2UgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGFuZCBpdHMgc3ViLXNlY3Rpb25zLCBkZXNjcmliZSBnZW5lcmFsIGFwcGxpY2F0aW9uIG9mIEdpdCdzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBjb21tYW5kcywgd2hpY2ggYXJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICBnZXQgeW91ciBjaGFuZ2VzIHVwc3RyZWFtIG9yIHNvdXJjZSB5b3VyIGNvZGUgZnJvbSBhbiB1cHN0cmVhbSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzIHNjcmlwdHMgdGhhdCBoZWxwIHlvdSB3b3JrIGluIGEgY29sbGFib3JhdGl2ZSBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzY3JpcHRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3B1c2hpbmctYS1jaGFuZ2UtdXBzdHJlYW0nPlVzaW5nIFNjcmlwdHMgdG8gUHVzaCBhIENoYW5nZQorICAgICAgICAgICAgICAgIFVwc3RyZWFtIGFuZCBSZXF1ZXN0IGEgUHVsbDwvdWxpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc3VibWl0dGluZy1hLXBhdGNoJz5Vc2luZyBFbWFpbCB0byBTdWJtaXQgYSBQYXRjaDwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIG1hbnkgd2F5cyB0byBzYXZlIGtlcm5lbCBtb2RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgIFRoZSB0ZWNobmlxdWUgZW1wbG95ZWQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBhdGNoZXM6CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QnVsayBzdG9yYWdlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbnRlcm5hbCBzaGFyaW5nIGVpdGhlciB0aHJvdWdoIHBhdGNoZXMgb3IgYnkgdXNpbmcgR2l0PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlcm5hbCBzdWJtaXNzaW9uczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXhwb3J0aW5nIGZvciBpbnRlZ3JhdGlvbiBpbnRvIGFub3RoZXIgU291cmNlIENvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZXIgKFNDTSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGxpc3Qgb2YgaXNzdWVzLCB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHBhdGNoZXMgYWxzbyBpbmZsdWVuY2VzCisgICAgICAgICAgICAgICAgdGhlIG1ldGhvZCBmb3IgZ2F0aGVyaW5nIHRoZW06CisKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmlzZWN0YWJpbGl0eTwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q29tbWl0IGhlYWRlcnM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRpdmlzaW9uIG9mIHN1YnN5c3RlbXMgZm9yIHNlcGFyYXRlIHN1Ym1pc3Npb24gb3IgcmV2aWV3PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdidWxrLWV4cG9ydCc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkJ1bGsgRXhwb3J0PC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuICJidWxrIiBleHBvcnQgY2hhbmdlcyB0aGF0IGhhdmUgbm90CisgICAgICAgICAgICAgICAgICAgIGJlZW4gc2VwYXJhdGVkIG9yIGRpdmlkZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIHdvcmtzIHdlbGwgd2hlbiB5b3UgYXJlIHNpbXBseSBzdG9yaW5nIHBhdGNoZXMgb3V0c2lkZSBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSByZXBvc2l0b3J5LCBlaXRoZXIgcGVybWFuZW50bHkgb3IgdGVtcG9yYXJpbHksIGFuZCB5b3UgYXJlIG5vdCBjb21taXR0aW5nCisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGFsIGNoYW5nZXMgZHVyaW5nIGRldmVsb3BtZW50LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGVjaG5pcXVlIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgZnVsbCBpbnRlZ3JhdGlvbiBvZiB1cHN0cmVhbSBzdWJtaXNzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGNoYW5nZXMgYXJlIG5vdCBwcm9wZXJseSBkaXZpZGVkIGFuZCBkbyBub3QgcHJvdmlkZSBhbiBhdmVudWUgZm9yIHBlci1jaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBleGFtcGxlIGFzc3VtZXMgdGhhdCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gY29tbWl0dGVkIGluY3JlbWVudGFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgdGhhdCB5b3Ugc2ltcGx5IG11c3QgZ2F0aGVyIGFuZCBleHBvcnQgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgYnVsayBleHBvcnQgb2YgQUxMIG1vZGlmaWNhdGlvbnMgd2l0aG91dCBzZXBhcmF0aW9uIG9yIGRpdmlzaW9uCisgICAgICMgb2YgdGhlIGNoYW5nZXMKKworICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gJmx0O21zZyZndDsKKyAgICAgICAgb3IKKyAgICAgJCBnaXQgY29tbWl0IC1zIC1hICMgYW5kIGludGVyYWN0IHdpdGggJEVESVRPUgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91cyBvcGVyYXRpb25zIGNhcHR1cmUgYWxsIHRoZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSBwcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgICAgICB0cmVlIGluIGEgc2luZ2xlIEdpdCBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFuZCwgdGhhdCBjb21taXQgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIHByb2plY3QncyBzb3VyY2UgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBhcmUgZXhwb3J0ZWQsIHlvdSBjYW4gcmVzdG9yZSB0aGVtIG1hbnVhbGx5IHVzaW5nIGEgdGVtcGxhdGUKKyAgICAgICAgICAgICAgICAgICAgb3IgdGhyb3VnaCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSA8ZmlsZW5hbWU+ZGVmYXVsdF9rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2luY3JlbWVudGFsLXBsYW5uZWQtc2hhcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkluY3JlbWVudGFsL1BsYW5uZWQgU2hhcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gc2F2ZSBtb2RpZmljYXRpb25zIHdoZW4geW91IGFyZSBtYWtpbmcgaW5jcmVtZW50YWwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cyBvciBwcmFjdGljaW5nIHBsYW5uZWQgc2hhcmluZy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4YW1wbGVzIGluIHRoaXMgc2VjdGlvbiBhc3N1bWUgdGhhdCB5b3UgaGF2ZSBpbmNyZW1lbnRhbGx5IGNvbW1pdHRlZAorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSB0cmVlIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgbm93IG5lZWQgdG8gZXhwb3J0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9ucyB0aGF0IGZvbGxvdworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZSBob3cgeW91IGNhbiBleHBvcnQgeW91ciBjaGFuZ2VzIGludGVybmFsbHkgdGhyb3VnaCBlaXRoZXIgcGF0Y2hlcyBvciBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyBHaXQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIER1cmluZyBkZXZlbG9wbWVudCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgb2YgaW50ZXJlc3QuCisgICAgICAgICAgICAgICAgICAgIEZvciBmdWxsIEdpdCBkb2N1bWVudGF0aW9uLCByZWZlciB0byB0aGUgR2l0IGRvY3VtZW50YXRpb24gYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdGh1Yi5jb20nPjwvdWxpbms+LgorCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBlZGl0IGEgZmlsZQorICAgICAkIHZpICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgc3RhZ2UgdGhlIGNoYW5nZQorICAgICAkIGdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgIyBjb21taXQgdGhlIGNoYW5nZQorICAgICAkIGdpdCBjb21taXQgLXMKKyAgICAgIyByZW1vdmUgYSBmaWxlCisgICAgICQgZ2l0IHJtICZsdDtwYXRoJmd0Oy9maWxlCisgICAgICMgY29tbWl0IHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgY29tbWl0IC1zCisKKyAgICAgLi4uIGV0Yy4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEaXN0cmlidXRlZCBkZXZlbG9wbWVudCB3aXRoIEdpdCBpcyBwb3NzaWJsZSB3aGVuIHlvdSB1c2UgYSB1bml2ZXJzYWxseQorICAgICAgICAgICAgICAgICAgICBhZ3JlZWQtdXBvbiB1bmlxdWUgY29tbWl0IGlkZW50aWZpZXIgKHNldCBieSB0aGUgY3JlYXRvciBvZiB0aGUgY29tbWl0KSB0aGF0IG1hcHMgdG8gYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBjaGFuZ2Ugc2V0IHdpdGggYSBzcGVjaWZpYyBwYXJlbnQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaWRlbnRpZmllciBpcyBjcmVhdGVkIGZvciB5b3Ugd2hlbgorICAgICAgICAgICAgICAgICAgICB5b3UgY3JlYXRlIGEgY29tbWl0LCBhbmQgaXMgcmUtY3JlYXRlZCB3aGVuIHlvdSBhbWVuZCwgYWx0ZXIgb3IgcmUtYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgYSBjb21taXQuCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGluZGl2aWR1YWwgaW4gaXNvbGF0aW9uLCB0aGlzIGlzIG9mIG5vIGludGVyZXN0LgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgaW50ZW5kIHRvIHNoYXJlIHlvdXIgdHJlZSB3aXRoIG5vcm1hbCBHaXQgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnB1bGw8L2ZpbGVuYW1lPiBvcGVyYXRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlZCBkZXZlbG9wbWVudCwgeW91IHNob3VsZCBjb25zaWRlciB0aGUgcmFtaWZpY2F0aW9ucyBvZiBjaGFuZ2luZyBhCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdCB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2hhcmVkIHdpdGggb3RoZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBc3N1bWluZyB0aGF0IHRoZSBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gcHVzaGVkIHVwc3RyZWFtLCBvciBwdWxsZWQgaW50bworICAgICAgICAgICAgICAgICAgICBhbm90aGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdXBkYXRlIGJvdGggdGhlIGNvbW1pdCBjb250ZW50IGFuZCBjb21taXQgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGRldmVsb3BtZW50IGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEdpdCBhZGQgJmx0O3BhdGgmZ3Q7L2ZpbGUKKyAgICAgJCBHaXQgY29tbWl0IC0tYW1lbmQKKyAgICAgJCBHaXQgcmViYXNlIG9yIEdpdCByZWJhc2UgLWkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZ2FpbiwgYXNzdW1pbmcgdGhhdCB0aGUgY2hhbmdlcyBoYXZlIG5vdCBiZWVuIHB1c2hlZCB1cHN0cmVhbSwgYW5kIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbm8gcGVuZGluZyB3b3Jrcy1pbi1wcm9ncmVzcyBleGlzdCAodXNlIDxmaWxlbmFtZT5naXQgc3RhdHVzPC9maWxlbmFtZT4gdG8gY2hlY2spLCB0aGVuCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcmV2ZXJ0ICh1bmRvKSBjb21taXRzIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIHJlbW92ZSB0aGUgY29tbWl0LCB1cGRhdGUgd29ya2luZyB0cmVlIGFuZCByZW1vdmUgYWxsCisgICAgICMgdHJhY2VzIG9mIHRoZSBjaGFuZ2UKKyAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGJ1dCBsZWF2ZSB0aGUgZmlsZXMgY2hhbmdlZCBhbmQgc3RhZ2VkIGZvciByZS1jb21taXQKKyAgICAgJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisgICAgICMgcmVtb3ZlIHRoZSBjb21taXQsIGxlYXZlIGZpbGUgY2hhbmdlLCBidXQgbm90IHN0YWdlZCBmb3IgY29tbWl0CisgICAgICQgZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRF4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGNyZWF0ZSBicmFuY2hlcywgImNoZXJyeS1waWNrIiBjaGFuZ2VzLCBvciBwZXJmb3JtIGFueSBudW1iZXIgb2YgR2l0CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMgdW50aWwgdGhlIGNvbW1pdHMgYXJlIGluIGdvb2Qgb3JkZXIgZm9yIHB1c2hpbmcgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgb3IgZm9yIHB1bGwgcmVxdWVzdHMuCisgICAgICAgICAgICAgICAgICAgIEFmdGVyIGEgPGZpbGVuYW1lPnB1c2g8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+cHVsbDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHMgYXJlIG5vcm1hbGx5IGNvbnNpZGVyZWQKKyAgICAgICAgICAgICAgICAgICAgInBlcm1hbmVudCIgYW5kIHlvdSBzaG91bGQgbm90IG1vZGlmeSB0aGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29tbWl0cyBuZWVkIHRvIGJlIGNoYW5nZWQsIHlvdSBjYW4gaW5jcmVtZW50YWxseSBkbyBzbyB3aXRoIG5ldyBjb21taXRzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBwcmFjdGljZXMgZm9sbG93IHN0YW5kYXJkIEdpdCB3b3JrZmxvdyBhbmQgdGhlIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4gYmVzdAorICAgICAgICAgICAgICAgICAgICBwcmFjdGljZXMsIHdoaWNoIGlzIHJlY29tbWVuZGVkLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHRhZyBvciBicmFuY2ggYmVmb3JlIGFkZGluZyBjaGFuZ2VzIHRvIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgQlNQIG9yIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIHJlY29tbWVuZGF0aW9uIGlzIGJlY2F1c2UgdGhlIGJyYW5jaCBvciB0YWcgcHJvdmlkZXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIHBvaW50IHRvIGZhY2lsaXRhdGUgbG9jYXRpbmcgYW5kIGV4cG9ydGluZyBsb2NhbCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1pbnRlcm5hbGx5LXZpYS1wYXRjaGVzJz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgUGF0Y2hlczwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB5b3UgY2FuIGV4dHJhY3QgY29tbWl0dGVkIGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBleHBvcnRpbmcgdGhlbSBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgY2hhbmdlcyBoYXZlIGJlZW4gZXh0cmFjdGVkLCB5b3UgY2FuIHVzZSB0aGUgcGF0Y2hlcyBmb3IgdXBzdHJlYW0gc3VibWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlIHRoZW0gaW4gYSBZb2N0byBQcm9qZWN0IHRlbXBsYXRlIGZvciBhdXRvbWF0aWMga2VybmVsIHBhdGNoaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXBwbHkgdGhlbSBpbiBtYW55IG90aGVyIGNvbW1vbiB1c2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoIHNlcXVlbnRpYWxseSBudW1iZXJlZCBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSB0aGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIHlvdSBjYW4gYXBwbHkgaXQgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpdCBhbTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gcmVwcm9kdWNlIHRoZSBvcmlnaW5hbCBjb21taXQgYW5kIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlbGF0ZWQgaW5mb3JtYXRpb24gc3VjaCBhcyBhdXRob3IsIGRhdGUsIGNvbW1pdCBsb2csIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuZXcgY29tbWl0IGlkZW50aWZpZXJzIChJRCkgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiByZS1hcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFjdGlvbiByZWZsZWN0cyB0aGF0IHRoZSBjb21taXQgaXMgbm93IGFwcGxpZWQgdG8gYW4gdW5kZXJseWluZyBjb21taXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgZGlmZmVyZW50IElELgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjICZsdDtmaXJzdC1jb21taXQmZ3Q7IGNhbiBiZSBhIHRhZyBpZiBvbmUgd2FzIGNyZWF0ZWQgYmVmb3JlIGRldmVsb3BtZW50CisgICAgICMgYmVnYW4uIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXJlbnQgYnJhbmNoIGlmIGEgYnJhbmNoIHdhcyBjcmVhdGVkCisgICAgICMgYmVmb3JlIGRldmVsb3BtZW50IGJlZ2FuLgorCisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7ZGlyJmd0OyAmbHQ7Zmlyc3QgY29tbWl0Jmd0Oy4uJmx0O2xhc3QgY29tbWl0Jmd0OworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBJZGVudGlmeSBjb21taXRzIG9mIGludGVyZXN0LgorCisgICAgICMgSWYgdGhlIHRyZWUgd2FzIHRhZ2dlZCBiZWZvcmUgZGV2ZWxvcG1lbnQKKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIC1vICZsdDtzYXZlIGRpciZndDsgJmx0O3RhZyZndDsKKworICAgICAjIElmIG5vIHRhZ3MgYXJlIGF2YWlsYWJsZQorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXiAgIyBsYXN0IGNvbW1pdAorICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLW8gJmx0O3NhdmUgZGlyJmd0OyBIRUFEXl4gIyBsYXN0IDIgY29tbWl0cworICAgICAkIGdpdCB3aGF0Y2hhbmdlZCAjIGlkZW50aWZ5IGxhc3QgY29tbWl0CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtjb21taXQgaWQmZ3Q7CisgICAgICQgZ2l0IGZvcm1hdC1wYXRjaCAtbyAmbHQ7c2F2ZSBkaXImZ3Q7ICZsdDtyZXYtbGlzdCZndDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdleHBvcnQtaW50ZXJuYWxseS12aWEtZ2l0Jz4KKyAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4cG9ydGluZyBDaGFuZ2VzIEludGVybmFsbHkgYnkgVXNpbmcgR2l0PC90aXRsZT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHlvdSBjYW4gZXhwb3J0IGNoYW5nZXMgZnJvbSBhIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBieSBwdXNoaW5nIHRoZSBjaGFuZ2VzIGludG8gYSBtYXN0ZXIgcmVwb3NpdG9yeSBvciBieSBtYWtpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBoYXZlIHB1c2hlZCB0aGUgY2hhbmdlcyB0byB0aGUgbWFzdGVyIHJlcG9zaXRvcnksIHlvdSBjYW4gdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcHVsbCB0aG9zZSBzYW1lIGNoYW5nZXMgaW50byBhIG5ldyBrZXJuZWwgYnVpbGQgYXQgYSBsYXRlciB0aW1lLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kIGZvcm0gdG8gcHVzaCB0aGUgY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgcHVzaCBzc2g6Ly8mbHQ7bWFzdGVyX3NlcnZlciZndDsvJmx0O3BhdGhfdG9fcmVwbyZndDsKKyAgICAgICAgJmx0O2xvY2FsX2JyYW5jaCZndDs6Jmx0O3JlbW90ZV9icmFuY2gmZ3Q7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgcHVzaGVzIHRoZSBjaGFuZ2VzIGZyb20geW91ciBsb2NhbCBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+IHRvIHRoZSByZW1vdGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1hc3RlciByZXBvc2l0b3J5IDxmaWxlbmFtZT4vL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBwdXNoIHNzaDovL2dpdC5teWNvbXBhbnkuY29tL3B1Yi9naXQva2VybmVsLTMuNCBcCisgICAgICAgIHlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlOnlvY3RvL3N0YW5kYXJkL2NvbW1vbi1wYy9iYXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgcHVsbCByZXF1ZXN0IGVudGFpbHMgdXNpbmcgdGhlIDxmaWxlbmFtZT5naXQgcmVxdWVzdC1wdWxsPC9maWxlbmFtZT4gY29tbWFuZCB0byBjb21wb3NlCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBlbWFpbCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1haW50YWluZXIgcmVxdWVzdGluZyB0aGF0IGEgYnJhbmNoIGJlIHB1bGxlZCBpbnRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9ndWlkZXMvcHVsbC1yZXF1ZXN0cyc+PC91bGluaz4gZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciBjb21tYW5kcyBzdWNoIGFzIDxmaWxlbmFtZT5naXQgc3Rhc2g8L2ZpbGVuYW1lPiBvciBicmFuY2hpbmcgY2FuIGFsc28gYmUgdXNlZCB0byBzYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcywgYnV0IGFyZSBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0LWZvci1leHRlcm5hbC11cHN0cmVhbS1zdWJtaXNzaW9uJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEV4dGVybmFsIChVcHN0cmVhbSkgU3VibWlzc2lvbjwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gZXhwb3J0IGNoYW5nZXMgZm9yIGV4dGVybmFsIHVwc3RyZWFtIHN1Ym1pc3Npb24uCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBwYXRjaCBzZXJpZXMgaXMgbGFyZ2Ugb3IgdGhlIG1haW50YWluZXIgcHJlZmVycyB0byBwdWxsCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMsIHlvdSBjYW4gc3VibWl0IHRoZXNlIGNoYW5nZXMgYnkgdXNpbmcgYSBwdWxsIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGl0IGlzIGNvbW1vbiB0byBzZW5kIHBhdGNoZXMgYXMgYW4gZW1haWwgc2VyaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBhbGxvd3MgZWFzeSByZXZpZXcgYW5kIGludGVncmF0aW9uIG9mIHRoZSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBzZW5kaW5nIHBhdGNoZXMgZm9yIHJldmlldyBiZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbXVuaXR5IHN0YW5kYXJkcyBmb3Igc3VibWl0dGluZyBhbmQgZG9jdW1lbnRpbmcgY2hhbmdlcyBhbmQgZm9sbG93IHRoZWlyIGJlc3QgcHJhY3RpY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGtlcm5lbCBwYXRjaGVzIHNob3VsZCBmb2xsb3cgc3RhbmRhcmRzIHN1Y2ggYXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbCc+PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyAoaW4gYW55IGxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBzb3VyY2UgdHJlZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlcyB1c2VkIHRvIGNvbW1pdCBjaGFuZ2VzIGFyZSBhIGxhcmdlIHBhcnQgb2YgdGhlc2Ugc3RhbmRhcmRzLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGJlIHN1cmUgdGhhdCB0aGUgaGVhZGVycyBmb3IgZWFjaCBjb21taXQgaGF2ZSB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZm9sbG93IHRoZSBZb2N0byBQcm9qZWN0IGNvbW1pdCBtZXNzYWdlIHN0YW5kYXJkcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaG93LXRvLXN1Ym1pdC1hLWNoYW5nZSc+SG93IHRvIFN1Ym1pdCBhCisgICAgICAgICAgICAgICAgICAgIENoYW5nZTwvdWxpbms+IiBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGluaXRpYWwgY29tbWl0cyB3ZXJlIG5vdCBwcm9wZXJseSBkb2N1bWVudGVkIG9yIGRvIG5vdCBtZWV0IHRob3NlIHN0YW5kYXJkcywKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiByZS1iYXNlIGJ5IHVzaW5nIHRoZSA8ZmlsZW5hbWU+Z2l0IHJlYmFzZSAtaTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZSB0aGUgY29tbWl0cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZ2V0IHRoZW0gaW50byB0aGUgcmVxdWlyZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZWNobmlxdWVzIHN1Y2ggYXMgYnJhbmNoaW5nIGFuZCBjaGVycnktcGlja2luZyBjb21taXRzIGFyZSBhbHNvIHZpYWJsZSBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21wbGV0ZSB0aGUgY29tbWl0cywgeW91IGNhbiBnZW5lcmF0ZSB0aGUgZW1haWwgdGhhdCBzZW5kcyB0aGUgcGF0Y2hlcworICAgICAgICAgICAgICAgICAgICB0byB0aGUgbWFpbnRhaW5lcihzKSBvciBsaXN0cyB0aGF0IHJldmlldyBhbmQgaW50ZWdyYXRlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIDxmaWxlbmFtZT5naXQgc2VuZC1lbWFpbDwvZmlsZW5hbWU+IGlzIGNvbW1vbmx5IHVzZWQgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgcGF0Y2hlcyBhcmUgcHJvcGVybHkKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIGZvciBlYXN5IGFwcGxpY2F0aW9uIGFuZCBhdm9pZCBtYWlsZXItaW5kdWNlZCBwYXRjaCBkYW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBkdW1waW5nIHBhdGNoZXMgZm9yIGV4dGVybmFsIHN1Ym1pc3Npb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBkdW1wIHRoZSBsYXN0IDQgY29tbWl0cworICAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggLS10aHJlYWQgLW4gLW8gfi9yci8gSEVBRF5eXl4KKyAgICAgJCBnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UgLS1zdWJqZWN0ICdbUkZDIDAvTl0gJmx0O3BhdGNoIHNlcmllcyBzdW1tYXJ5Jmd0OycgXAorICAgICAgLS10byBmb29AeW9jdG9wcm9qZWN0Lm9yZyAtLXRvIGJhckB5b2N0b3Byb2plY3Qub3JnIFwKKyAgICAgIC0tY2MgbGlzdEB5b2N0b3Byb2plY3Qub3JnICB+L3JyCisgICAgICMgdGhlIGVkaXRvciBpcyBpbnZva2VkIGZvciB0aGUgMC9OIHBhdGNoLCBhbmQgd2hlbiBjb21wbGV0ZSB0aGUgZW50aXJlCisgICAgICMgc2VyaWVzIGlzIHNlbnQgdmlhIGVtYWlsIGZvciByZXZpZXcKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2V4cG9ydC1mb3ItaW1wb3J0LWludG8tb3RoZXItc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIENoYW5nZXMgZm9yIEltcG9ydCBpbnRvIEFub3RoZXIgU0NNPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB3YW50IHRvIGV4cG9ydCBjaGFuZ2VzIGZvciBpbXBvcnQgaW50byBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSksIHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgcHJldmlvdXNseSBkaXNjdXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdGVjaG5pcXVlcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHBhdGNoZXMgYXJlIG1hbnVhbGx5IGFwcGxpZWQgdG8gYSBzZWNvbmRhcnkgdHJlZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICB0aGF0IHRyZWUgaXMgY2hlY2tlZCBpbnRvIHRoZSBTQ00sIHlvdSBjYW4gbG9zZSBjaGFuZ2UgaW5mb3JtYXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgICAgICBjb21taXQgbG9ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIG5vdCByZWNvbW1lbmRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTWFueSBTQ01zIGNhbiBkaXJlY3RseSBpbXBvcnQgR2l0IGNvbW1pdHMsIG9yIGNhbiB0cmFuc2xhdGUgR2l0IHBhdGNoZXMgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBpcyBub3QgbG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhvc2UgZmFjaWxpdGllcyBhcmUgU0NNLWRlcGVuZGVudCBhbmQgeW91IHNob3VsZCB1c2UgdGhlbSB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2NtLXdvcmtpbmctd2l0aC10aGUteW9jdG8tcHJvamVjdC1rZXJuZWwtaW4tYW5vdGhlci1zY20nPgorICAgICAgICAgICAgPHRpdGxlPldvcmtpbmcgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBLZXJuZWwgaW4gQW5vdGhlciBTQ008L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGtlcm5lbCBkZXZlbG9wbWVudCBpbiBhbiBTQ00gb3RoZXIgdGhhbiBHaXQsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIGV4cG9ydGluZyBjaGFuZ2VzIHRvIGFub3RoZXIgU0NNIGRlc2NyaWJlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIEZvciB0aGlzIHNjZW5hcmlvLCB5b3UgdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgZGV2ZWxvcCB0aGUga2VybmVsIGluIGEgZGlmZmVyZW50IFNDTS4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZSBmb3IgeW91IHRvIGFjY29tcGxpc2ggdGhpczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGRlbGl2ZXJlZCBZb2N0byBQcm9qZWN0IGtlcm5lbCBtdXN0IGJlIGV4cG9ydGVkIGludG8gdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgU0NNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGV2ZWxvcG1lbnQgbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRoYXQgc2Vjb25kYXJ5IFNDTSBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0nZXhwb3J0aW5nLWRlbGl2ZXJlZC1rZXJuZWwtdG8tc2NtJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+RXhwb3J0aW5nIHRoZSBEZWxpdmVyZWQgS2VybmVsIHRvIHRoZSBTQ008L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgU0NNLCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBleHBvcnQgdGhlIGVudGlyZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgYnJhbmNoZXMgYW5kIGFsbCwgaW50byBhIG5ldyBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgcHJlZmVycmVkIGJlY2F1c2UgaXQgaGFzIHRoZSBtb3N0IGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdG8gbWFpbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggZWFjaCBjb21taXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gYSBkaXJlY3QgaW1wb3J0IG1lY2hhbmlzbSBpcyBub3QgYXZhaWxhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICAgICAgICAgICAgICAgICAgICBleHBvcnQgYSBicmFuY2ggKG9yIHNlcmllcyBvZiBicmFuY2hlcykgYW5kIGNoZWNrIHRoZW0gaW50byBhIG5ldyByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGlsbHVzdHJhdGUgc29tZSBvZiB0aGUgc3RlcHMgeW91IGNvdWxkIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdGhlIDxmaWxlbmFtZT55b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbnRvIGEgc2Vjb25kYXJ5IFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGNkIC4uIDsgZWNobyBsaW51eC8uZ2l0ICZndDsgLmN2c2lnbm9yZQorICAgICAkIGN2cyBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBsaW51eCBNWV9DT01QQU5ZIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNvdWxkIG5vdyByZWxvY2F0ZSB0aGUgQ1ZTIHJlcG9zaXRvcnkgYW5kIHVzZSBpdCBpbiBhIGNlbnRyYWxpemVkIG1hbm5lci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBpbGx1c3RyYXRlIGhvdyB5b3UgY2FuIGNvbmRlbnNlIGFuZCBtZXJnZSB0d28gQlNQcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kIFNDTToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjaGVja291dCB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMvYmFzZQorICAgICAkIGdpdCBtZXJnZSB5b2N0by9zdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZQorICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cyBhbmQgY29tbWl0IHRoZW0KKyAgICAgJCBjZCAuLiA7IGVjaG8gbGludXgvLmdpdCAmZ3Q7IC5jdnNpZ25vcmUKKyAgICAgJCBjdnMgaW1wb3J0IC1tICJpbml0aWFsIGltcG9ydCIgbGludXggTVlfQ09NUEFOWSBzdGFydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICA8c2VjdGlvbiBpZD0naW1wb3J0aW5nLWNoYW5nZXMtZm9yLWJ1aWxkJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+SW1wb3J0aW5nIENoYW5nZXMgZm9yIHRoZSBCdWlsZDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT25jZSBkZXZlbG9wbWVudCBoYXMgcmVhY2hlZCBhIHN1aXRhYmxlIHBvaW50IGluIHRoZSBzZWNvbmQgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvIGV4cG9ydCB0aGUgY2hhbmdlcyBhcyBwYXRjaGVzLgorICAgICAgICAgICAgICAgICAgICBUbyBleHBvcnQgdGhlbSwgcGxhY2UgdGhlIGNoYW5nZXMgaW4gYSByZWNpcGUgYW5kCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYXBwbHkgdGhlbSB0byB0aGUga2VybmVsIGR1cmluZyBwYXRjaGluZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnNwLWNyZWF0aW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5DcmVhdGluZyBhIEJTUCBCYXNlZCBvbiBhbiBFeGlzdGluZyBTaW1pbGFyIEJTUDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvdmVydmlld3MgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBCU1AgYmFzZWQgb24gYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBzaW1pbGFyIEJTUC4KKyAgICAgICAgICAgICAgICBUaGUgaW5mb3JtYXRpb24gaXMgaW50cm9kdWN0b3J5IGluIG5hdHVyZSBhbmQgZG9lcyBub3QgcHJvdmlkZSBzdGVwLWJ5LXN0ZXAgZXhhbXBsZXMuCisgICAgICAgICAgICAgICAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgYSBuZXcgQlNQLCBzZWUKKyAgICAgICAgICAgICAgICB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2NyZWF0aW5nLWEtbmV3LWJzcC1sYXllci11c2luZy10aGUteW9jdG8tYnNwLXNjcmlwdCc+Q3JlYXRpbmcgYSBOZXcgQlNQIExheWVyIFVzaW5nIHRoZSB5b2N0by1ic3AgU2NyaXB0PC91bGluaz4iIHNlY3Rpb24gaW4gdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGUsIG9yIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvVHJhbnNjcmlwdDpfY3JlYXRpbmdfb25lX2dlbmVyaWNfQXRvbV9CU1BfZnJvbV9hbm90aGVyJz5UcmFuc2NyaXB0Ol9jcmVhdGluZ19vbmVfZ2VuZXJpY19BdG9tX0JTUF9mcm9tX2Fub3RoZXI8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdpa2kgcGFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJhc2ljIHN0ZXBzIHlvdSBuZWVkIHRvIGZvbGxvdyBhcmU6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgdXAgYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjcmVhdGUgYSBsb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBieSBlaXRoZXIgY3JlYXRpbmcgYSBHaXQgcmVwb3NpdG9yeSAocmVjb21tZW5kZWQpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0aW5nIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlIHRhcmJhbGwuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q2hvb3NlIGFuIGV4aXN0aW5nIEJTUCBhdmFpbGFibGUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVHJ5IHRvIG1hcCB5b3VyIGJvYXJkIGZlYXR1cmVzIGFzIGNsb3NlbHkgdG8gdGhlIGZlYXR1cmVzIG9mIGEgQlNQIHRoYXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgc3VwcG9ydGVkIGFuZCBleGlzdHMgaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGluZyB3aXRoIHNvbWV0aGluZyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB5b3VyIGJvYXJkIG1ha2VzIGRldmVsb3BpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgQlNQIGVhc2llci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhbGwgdGhlIEJTUHMgdGhhdCBhcmUgc3VwcG9ydGVkIGFuZCBzaGlwIHdpdGggdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBZb2N0byBQcm9qZWN0J3MgRG93bmxvYWQgcGFnZSBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb3dubG9hZCc+PC91bGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgc3VyZSB5b3UgaGF2ZSB0aGUgQmFzZSBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGVpdGhlciBoYXZlIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIGJhc2UgQlNQIHNldCB1cCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQgdGhlIGZpbGVzIGZyb20gYSByZWxlYXNlIEJTUCB0YXJiYWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIG1ldGhvZCBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZSBCU1Agc291cmNlIGZpbGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1ha2UgYSBjb3B5IG9mIHRoZSBleGlzdGluZyBCU1AsIHRodXMgaXNvbGF0aW5nIHlvdXIgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBCU1Agd29yazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgQ29weWluZyB0aGUgZXhpc3RpbmcgQlNQIGZpbGUgc3RydWN0dXJlIGdpdmVzIHlvdSBhIG5ldyBhcmVhIGluIHdoaWNoIHRvIHdvcmsuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWFrZSBjb25maWd1cmF0aW9uIGFuZCByZWNpcGUgY2hhbmdlcyB0byB5b3VyIG5ldyBCU1A6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY2hhbmdlcyBpbnZvbHZlIHRoZSBmaWxlcyBpbiB0aGUgQlNQJ3MgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGNyZWF0aW5nIGEgbWFjaGluZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGVkaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGlkZW50aWZ5IHRoZSBrZXJuZWwgeW91IHdpbGwgYmUgdXNpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGUgY2hhbmdlcyBpbmNsdWRlIHJlbW92aW5nLCBtb2RpZnlpbmcsIG9yIGFkZGluZyBuZXcgcmVjaXBlIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIG9uIHdoYXQgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHJlcGFyZSBmb3IgdGhlIGJ1aWxkOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgeW91IGFjdHVhbGx5IGluaXRpYXRlIHRoZSBidWlsZCwgeW91IG5lZWQgdG8gc2V0IHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgc291cmNpbmcgdGhlIGVudmlyb25tZW50IGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB5b3UgbmVlZCB0byBtYWtlIHNvbWUgYnVpbGQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB0byB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgdGhlIGltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gY3JlYXRlIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRlY2lkZSBvbiB0aGUgdHlwZSBvZiBpbWFnZSB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIChlLmcuIG1pbmltYWwsIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLCBzYXRvLCBhbmQgc28gZm9ydGgpIGFuZCB0aGVuIHN0YXJ0IHRoZSBidWlsZCB1c2luZyB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RpcC1kaXJ0eS1zdHJpbmcnPgorICAgICAgICAgICAgPHRpdGxlPiItZGlydHkiIFN0cmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIGtlcm5lbCBpbWFnZXMgYXJlIGJlaW5nIGJ1aWx0IHdpdGggIi1kaXJ0eSIgb24gdGhlIGVuZCBvZiB0aGUgdmVyc2lvbgorICAgICAgICAgICAgICAgIHN0cmluZywgdGhpcyBzaW1wbHkgbWVhbnMgdGhhdCBtb2RpZmljYXRpb25zIGluIHRoZSBzb3VyY2UKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgaGF2ZSBub3QgYmVlbiBjb21taXR0ZWQuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBzdGF0dXMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBhYm92ZSBHaXQgY29tbWFuZCB0byByZXBvcnQgbW9kaWZpZWQsIHJlbW92ZWQsIG9yIGFkZGVkIGZpbGVzLgorICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgY29tbWl0IHRob3NlIGNoYW5nZXMgdG8gdGhlIHRyZWUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgd2lsbCBiZSBzYXZlZCwKKyAgICAgICAgICAgICAgICBleHBvcnRlZCwgb3IgdXNlZC4KKyAgICAgICAgICAgICAgICBPbmNlIHlvdSBjb21taXQgdGhlIGNoYW5nZXMgeW91IG5lZWQgdG8gcmVidWlsZCB0aGUga2VybmVsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBicnV0ZSBmb3JjZSBwaWNrdXAgYW5kIGNvbW1pdCBhbGwgc3VjaCBwZW5kaW5nIGNoYW5nZXMsIGVudGVyIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBhZGQgLgorICAgICAkIGdpdCBjb21taXQgLXMgLWEgLW0gImdldHRpbmcgcmlkIG9mIC1kaXJ0eSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5leHQsIHJlYnVpbGQgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtZmFxLnhtbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWZhcS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5OWFkMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWZhcS54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxhcHBlbmRpeCBpZD0na2VybmVsLWRldi1mYXEnPgorPHRpdGxlPktlcm5lbCBEZXZlbG9wbWVudCBGQVE8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0na2VybmVsLWRldi1mYXEtc2VjdGlvbic+CisgICAgPHRpdGxlPkNvbW1vbiBRdWVzdGlvbnMgYW5kIFNvbHV0aW9uczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0cyBzb21lIHNvbHV0aW9ucyBmb3IgY29tbW9uIHF1ZXN0aW9ucy4KKworCisgICAgICAgIDxxYW5kYXNldD4KKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgbXkgb3duIExpbnV4IGtlcm5lbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZlciB0byB0aGUgIjxsaW5rIGxpbmtlbmQ9J2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uJz5DaGFuZ2luZyB0aGUgQ29uZmlndXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorCisgICAgICAgICAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyIHRvIHRoZSAiPGxpbmsgbGlua2VuZD0nZ2VuZXJhdGluZy1jb25maWd1cmF0aW9uLWZpbGVzJz5HZW5lcmF0aW5nIENvbmZpZ3VyYXRpb24gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIHVzZSBteSBvd24gTGludXgga2VybmVsIHNvdXJjZXM/CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICAgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gdGhlICI8bGluayBsaW5rZW5kPSd3b3JraW5nLXdpdGgteW91ci1vd24tc291cmNlcyc+V29ya2luZyBXaXRoIFlvdXIgT3duIFNvdXJjZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGluc3RhbGwvbm90LWluc3RhbGwgdGhlIGtlcm5lbCBpbWFnZSBvbiB0aGUgcm9vdGZzPworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgaW1hZ2UgKGUuZy4gPGZpbGVuYW1lPnZtbGludXo8L2ZpbGVuYW1lPikgaXMgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSA8ZmlsZW5hbWU+a2VybmVsLWltYWdlPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIHJlY2lwZXMgZGVwZW5kIG9uIDxmaWxlbmFtZT5rZXJuZWwtYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpcyBpbnN0YWxsZWQgaW4gdGhlIGdlbmVyYXRlZCByb290IGZpbGVzeXN0ZW0sIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFNfa2VybmVsLWJhc2U8L2ZpbGVuYW1lPiB0byBpbmNsdWRlIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSAia2VybmVsLWltYWdlIi48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGFuIGFwcGVuZCBmaWxlIHRvIG92ZXJyaWRlIG1ldGFkYXRhLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9hbnN3ZXI+CisgICAgICAgICAgICA8L3FhbmRhZW50cnk+CisKKyAgICAgICAgICAgIDxxYW5kYWVudHJ5PgorICAgICAgICAgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBIb3cgZG8gSSBpbnN0YWxsIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZT8KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgICAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBrZXJuZWwgbW9kdWxlcyBhcmUgcGFja2FnZWQgaW5kaXZpZHVhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5zdXJlIGEgc3BlY2lmaWMga2VybmVsIG1vZHVsZSBpcyBpbmNsdWRlZCBpbiBhbiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhlc2Ugb3RoZXIgdmFyaWFibGVzIGFyZSB1c2VmdWwgZm9yIGluc3RhbGxpbmcgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPjxmaWxlbmFtZT5NQUNISU5FX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+PGZpbGVuYW1lPk1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0IHRoZSBmb2xsb3dpbmcgaW4gdGhlIDxmaWxlbmFtZT5xZW11eDg2LmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSB0byBpbmNsdWRlIHRoZSA8ZmlsZW5hbWU+YWIxMjM8L2ZpbGVuYW1lPiBrZXJuZWwgbW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBpbWFnZXMgYnVpbHQgZm9yIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+IG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGUtYWIxMjMiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L2Fuc3dlcj4KKyAgICAgICAgICAgIDwvcWFuZGFlbnRyeT4KKworICAgICAgICAgICAgPHFhbmRhZW50cnk+CisgICAgICAgICAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhvdyBkbyBJIGNoYW5nZSB0aGUgTGludXgga2VybmVsIGNvbW1hbmQgbGluZT8KKyAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBrZXJuZWwgY29tbWFuZCBsaW5lIGlzIHR5cGljYWxseSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGNvbmZpZyB1c2luZyB0aGUgPGZpbGVuYW1lPkFQUEVORDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCBzb21lIGhlbHBmdWwgZGVidWcgaW5mb3JtYXRpb24gZG9pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFQUEVORCArPSAicHJpbnRrLnRpbWU9eSBpbml0Y2FsbF9kZWJ1ZyBkZWJ1ZyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvYW5zd2VyPgorICAgICAgICAgICAgPC9xYW5kYWVudHJ5PgorICAgICAgICA8L3FhbmRhc2V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWludHJvLnhtbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjNlNTAwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtaW50cm8ueG1sCkBAIC0wLDAgKzEsMTQ5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0na2VybmVsLWRldi1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworPCEtLQorPHBhcmE+CisgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNlZSBpZiB0aGUgY29uY2VwdHMgaW4gdGhlc2UKKyAgICB0aHJlZSBidWxsZXRzIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgaW4gc29tZXdoZXJlIGluIHRoaXMgbWFudWFsOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCBvdXIga2VybmVsIEdpdCByZXBvc2l0b3JpZXMKKyAgICAgICAgICAgIGhhdmUgYSBjbGVhciBhbmQgY29udGludW91cyBoaXN0b3J5LCBzaW1pbGFyIHRvIHRoZSB3YXkgdGhlCisgICAgICAgICAgICBrZXJuZWwgR2l0IHJlcG9zaXRvcmllcyBmb3IgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZG8uCisgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvZXMgdGhlIG1hbnVhbCBub3RlIHRoYXQgWW9jdG8gUHJvamVjdCBkZWxpdmVycworICAgICAgICAgICAgYSBrZXkgc2V0IG9mIHN1cHBvcnRlZCBrZXJuZWwgdHlwZXMsIHdoZXJlCisgICAgICAgICAgICBlYWNoIHR5cGUgaXMgdGFpbG9yZWQgdG8gbWVldCBhIHNwZWNpZmljIHVzZSAoZS5nLiBuZXR3b3JraW5nLAorICAgICAgICAgICAgY29uc3VtZXIsIGRldmljZXMsIGFuZCBzbyBmb3J0aCkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EbyB3ZSBjb252ZXkgdGhhdCB0aGUgWW9jdG8gUHJvamVjdCB1c2VzIGEKKyAgICAgICAgICAgIEdpdCBicmFuY2hpbmcgc3RyYXRlZ3kgdGhhdCwgZnJvbSBhCisgICAgICAgICAgICBkZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3LCByZXN1bHRzIGluIGEgbGluZWFyIHBhdGggZnJvbSB0aGUKKyAgICAgICAgICAgIGJhc2VsaW5lIGtlcm5lbC5vcmcsIHRocm91Z2ggYSBzZWxlY3QgZ3JvdXAgb2YgZmVhdHVyZXMgYW5kCisgICAgICAgICAgICBlbmRzIHdpdGggdGhlaXIgQlNQLXNwZWNpZmljIGNvbW1pdHMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXplZGxpc3Q+Cis8L3BhcmE+CistLT4KKworICAgIDxzZWN0aW9uIGlkPSdrZXJuZWwtZGV2LW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBpbnRlbmQgdG8gbWFrZSB1c2Ugb2YgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICBjaGFuY2VzIGFyZSB5b3Ugd2lsbCB3b3JrIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIFRoaXMgbWFudWFsIHByb3ZpZGVzIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gdGhlIFlvY3RvIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICBkZXNjcmliZXMgY29tbW9uIHRhc2tzIHlvdSBjYW4gcGVyZm9ybSB1c2luZyB0aGUga2VybmVsIHRvb2xzLAorICAgICAgICAgICAgYW5kIHNob3dzIHlvdSBob3cgdG8gdXNlIHRoZSBrZXJuZWwgTWV0YWRhdGEgbmVlZGVkIHRvIHdvcmsgd2l0aAorICAgICAgICAgICAgdGhlIGtlcm5lbCBpbnNpZGUgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFYWNoIFlvY3RvIFByb2plY3QgcmVsZWFzZSBoYXMgYSBzZXQgb2YgbGludXgteW9jdG8gcmVjaXBlcywgd2hvc2UKKyAgICAgICAgICAgIEdpdCByZXBvc2l0b3JpZXMgeW91IGNhbiB2aWV3IGluIHRoZSBZb2N0bworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4gdW5kZXIKKyAgICAgICAgICAgIHRoZSAiWW9jdG8gTGludXggS2VybmVsIiBoZWFkaW5nLgorICAgICAgICAgICAgTmV3IHJlY2lwZXMgZm9yIHRoZSByZWxlYXNlIHRyYWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZGV2ZWxvcG1lbnRzCisgICAgICAgICAgICBhbmQgaW50cm9kdWNlIG5ld2x5LXN1cHBvcnRlZCBwbGF0Zm9ybXMuCisgICAgICAgICAgICBQcmV2aW91cyByZWNpcGVzIGluIHRoZSByZWxlYXNlIGFyZSByZWZyZXNoZWQgYW5kIHN1cHBvcnRlZCBmb3IgYXQKKyAgICAgICAgICAgIGxlYXN0IG9uZSBhZGRpdGlvbmFsIHJlbGVhc2UuCisgICAgICAgICAgICBBcyB0aGV5IGFsaWduLCB0aGVzZSBwcmV2aW91cyByZWxlYXNlcyBhcmUgdXBkYXRlZCB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgbGF0ZXN0IGZyb20gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L29yZ2FuaXphdGlvbi9sb25nLXRlcm0tc3VwcG9ydC1pbml0aWF0aXZlLWx0c2knPkxvbmcgVGVybSBTdXBwb3J0IEluaXRpYXRpdmU8L3VsaW5rPgorICAgICAgICAgICAgKExUU0kpIHByb2plY3QuCisgICAgICAgICAgICBBbHNvIGluY2x1ZGVkIGlzIGEgbGludXgteW9jdG8gZGV2ZWxvcG1lbnQgcmVjaXBlCisgICAgICAgICAgICAoPGZpbGVuYW1lPmxpbnV4LXlvY3RvLWRldi5iYjwvZmlsZW5hbWU+KSBzaG91bGQgeW91IHdhbnQgdG8gd29yaworICAgICAgICAgICAgd2l0aCB0aGUgdmVyeSBsYXRlc3QgaW4gdXBzdHJlYW0gTGludXgga2VybmVsIGRldmVsb3BtZW50IGFuZAorICAgICAgICAgICAga2VybmVsIE1ldGFkYXRhIGRldmVsb3BtZW50LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBhbHNvIHByb3ZpZGVzIGEgcG93ZXJmdWwgc2V0IG9mIGtlcm5lbAorICAgICAgICAgICAgdG9vbHMgZm9yIG1hbmFnaW5nIExpbnV4IGtlcm5lbCBzb3VyY2VzIGFuZCBjb25maWd1cmF0aW9uIGRhdGEuCisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSB0b29scyB0byBtYWtlIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gY2hhbmdlLAorICAgICAgICAgICAgYXBwbHkgbXVsdGlwbGUgcGF0Y2hlcywgb3Igd29yayB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUga2VybmVsIHRvb2xzIGFsbG93IHlvdSB0byBnZW5lcmF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmcmFnbWVudHMgdGhhdCBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbXVzdCwgYW5kIG5vdGhpbmcgbW9yZS4KKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIG9ubHkgbmVlZCB0byBjb250YWluIHRoZSBoaWdoZXN0IGxldmVsCisgICAgICAgICAgICB2aXNpYmxlIDxmaWxlbmFtZT5DT05GSUc8L2ZpbGVuYW1lPiBvcHRpb25zIGFzIHByZXNlbnRlZCBieSB0aGUgTGludXgKKyAgICAgICAgICAgIGtlcm5lbCA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+IHN5c3RlbS4KKyAgICAgICAgICAgIENvbnRyYXN0IHRoaXMgYWdhaW5zdCBhIGNvbXBsZXRlIExpbnV4IGtlcm5lbAorICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiwgd2hpY2ggaW5jbHVkZXMgYWxsIHRoZSBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICBzZWxlY3RlZCA8ZmlsZW5hbWU+Q09ORklHPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgIFRoaXMgZWZmaWNpZW5jeSByZWR1Y2VzIHlvdXIgbWFpbnRlbmFuY2UgZWZmb3J0IGFuZCBhbGxvd3MgeW91CisgICAgICAgICAgICB0byBmdXJ0aGVyIHNlcGFyYXRlIHlvdXIgY29uZmlndXJhdGlvbiBpbiB3YXlzIHRoYXQgbWFrZSBzZW5zZSBmb3IKKyAgICAgICAgICAgIHlvdXIgcHJvamVjdC4KKyAgICAgICAgICAgIEEgY29tbW9uIHNwbGl0IHNlcGFyYXRlcyBwb2xpY3kgYW5kIGhhcmR3YXJlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGFsbCB5b3VyIGtlcm5lbHMgbWlnaHQgc3VwcG9ydAorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5wcm9jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5zeXM8L2ZpbGVuYW1lPiBmaWxlc3lzdGVtcywKKyAgICAgICAgICAgIGJ1dCBvbmx5IHNwZWNpZmljIGJvYXJkcyByZXF1aXJlIHNvdW5kLCBVU0IsIG9yIHNwZWNpZmljIGRyaXZlcnMuCisgICAgICAgICAgICBTcGVjaWZ5aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluZGl2aWR1YWxseSBhbGxvd3MgeW91IHRvIGFnZ3JlZ2F0ZQorICAgICAgICAgICAgdGhlbSB0b2dldGhlciBhcyBuZWVkZWQsIGJ1dCBtYWludGFpbnMgdGhlbSBpbiBvbmx5IG9uZSBwbGFjZS4KKyAgICAgICAgICAgIFNpbWlsYXIgbG9naWMgYXBwbGllcyB0byBzZXBhcmF0aW5nIHNvdXJjZSBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IG1haW50YWluIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzIGFuZCBuZWVkIHRvIG1ha2UKKyAgICAgICAgICAgIG9ubHkgbWluaW1hbCBjaGFuZ2VzIHRvIHRoZSBzb3VyY2VzLCB0aGUgcmVsZWFzZWQgcmVjaXBlcyBwcm92aWRlIGEKKyAgICAgICAgICAgIHZldHRlZCBiYXNlIHVwb24gd2hpY2ggdG8gbGF5ZXIgeW91ciBjaGFuZ2VzLgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBiZW5lZml0IGZyb20gdGhlIGNvbnRpbnVhbCBrZXJuZWwKKyAgICAgICAgICAgIGludGVncmF0aW9uIGFuZCB0ZXN0aW5nIHBlcmZvcm1lZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYSB2ZXJ5IHNwZWNpZmljIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZQorICAgICAgICAgICAgYW5kIGFyZSB1bmFibGUgdG8gYWxpZ24gd2l0aCBvbmUgb2YgdGhlIG9mZmljaWFsIGxpbnV4LXlvY3RvCisgICAgICAgICAgICByZWNpcGVzLCBhbiBhbHRlcm5hdGl2ZSBleGlzdHMgYnkgd2hpY2ggeW91IGNhbiB1c2UgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IExpbnV4IGtlcm5lbCB0b29scyB3aXRoIHlvdXIgb3duIGtlcm5lbCBzb3VyY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2tlcm5lbC1kZXYtb3RoZXItcmVzb3VyY2VzJz4KKyAgICAgICAgPHRpdGxlPk90aGVyIFJlc291cmNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc2VjdGlvbnMgdGhhdCBmb2xsb3cgcHJvdmlkZSBpbnN0cnVjdGlvbnMgZm9yIGNvbXBsZXRpbmcKKyAgICAgICAgICAgIHNwZWNpZmljIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCB0YXNrcy4KKyAgICAgICAgICAgIFRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgeW91IGFyZSBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9vcGVuZW1iZWRkZWQub3JnL3dpa2kvQml0YmFrZSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICByZWNpcGVzIGFuZCBiYXNpYyBvcGVuLXNvdXJjZSBkZXZlbG9wbWVudCB0b29scy4KKyAgICAgICAgICAgIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29uY2VwdHMgd2lsbCBmYWNpbGl0YXRlIHRoZSBwcm9jZXNzIG9mIHdvcmtpbmcKKyAgICAgICAgICAgIHdpdGggdGhlIGtlcm5lbCByZWNpcGVzLgorICAgICAgICAgICAgSWYgeW91IGZpbmQgeW91IG5lZWQgc29tZSBhZGRpdGlvbmFsIGJhY2tncm91bmQsIHBsZWFzZSBiZSBzdXJlIHRvCisgICAgICAgICAgICByZXZpZXcgYW5kIHVuZGVyc3RhbmQgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyc+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tb2RpZnlpbmctc291cmNlLWNvZGUnPk1vZGlmeWluZyBTb3VyY2UgQ29kZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21vZGlmeWluZy10aGUta2VybmVsJz5Nb2RpZnlpbmcgdGhlIEtlcm5lbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGaW5hbGx5LCB3aGlsZSB0aGlzIGRvY3VtZW50IGZvY3VzZXMgb24gdGhlIG1hbnVhbCBjcmVhdGlvbiBvZgorICAgICAgICAgICAgcmVjaXBlcywgcGF0Y2hlcywgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgdG9vbHMgYXJlIGF2YWlsYWJsZSB0byBhdXRvbWF0ZQorICAgICAgICAgICAgdGhpcyBwcm9jZXNzIHdpdGggZXhpc3RpbmcgY29udGVudCBhbmQgd29yayB3ZWxsIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgIGluaXRpYWwgZnJhbWV3b3JrIGFuZCBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhlc2UgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyN1c2luZy10aGUteW9jdG8tcHJvamVjdHMtYnNwLXRvb2xzJz5Vc2luZyB0aGUgWW9jdG8gUHJvamVjdCdzIEJTUCBUb29sczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MKKyAgICAgICAgICAgIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjBjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2tlcm5lbC1kZXYva2VybmVsLWRldi1tYWludC1hcHB4LnhtbApAQCAtMCwwICsxLDIyMCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGFwcGVuZGl4IGlkPSdrZXJuZWwtZGV2LW1haW50LWFwcHgnPgorPHRpdGxlPktlcm5lbCBNYWludGVuYW5jZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ndHJlZS1jb25zdHJ1Y3Rpb24nPgorICAgICAgICA8dGl0bGU+VHJlZSBDb25zdHJ1Y3Rpb248L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgY29uc3RydWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBzb3VyY2UgcmVwb3NpdG9yaWVzCisgICAgICAgICAgICBhcyBhY2NvbXBsaXNoZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgdGVhbSB0byBjcmVhdGUga2VybmVsIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgIFRoZXNlIGtlcm5lbCByZXBvc2l0b3JpZXMgYXJlIGZvdW5kIHVuZGVyIHRoZSBoZWFkaW5nICJZb2N0byBMaW51eCBLZXJuZWwiIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPiZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaTwvdWxpbms+CisgICAgICAgICAgICBhbmQgY2FuIGJlIHNoaXBwZWQgYXMgcGFydCBvZiBhIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgIFRoZSB0ZWFtIGNyZWF0ZXMgdGhlc2UgcmVwb3NpdG9yaWVzIGJ5CisgICAgICAgICAgICBjb21waWxpbmcgYW5kIGV4ZWN1dGluZyB0aGUgc2V0IG9mIGZlYXR1cmUgZGVzY3JpcHRpb25zIGZvciBldmVyeSBCU1AKKyAgICAgICAgICAgIGFuZCBmZWF0dXJlIGluIHRoZSBwcm9kdWN0LgorICAgICAgICAgICAgVGhvc2UgZmVhdHVyZSBkZXNjcmlwdGlvbnMgbGlzdCBhbGwgbmVjZXNzYXJ5IHBhdGNoZXMsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBicmFuY2hpbmcsIHRhZ2dpbmcgYW5kIGZlYXR1cmUgZGl2aXNpb25zIGZvdW5kIGluIGEga2VybmVsLgorICAgICAgICAgICAgVGh1cywgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcnkgKG9yIHRyZWUpIGlzIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHRyZWUgYWxsb3dzIHlvdSB0byBhY2Nlc3MgYW5kIGNsb25lIGEgcGFydGljdWxhcgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBrZXJuZWwgcmVwb3NpdG9yeSBhbmQgdXNlIGl0IHRvIGJ1aWxkIGltYWdlcyBiYXNlZCBvbiB0aGVpciBjb25maWd1cmF0aW9ucworICAgICAgICAgICAgYW5kIGZlYXR1cmVzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBmaWxlcyB1c2VkIHRvIGRlc2NyaWJlIGFsbCB0aGUgdmFsaWQgZmVhdHVyZXMgYW5kIEJTUHMKKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBpbiBhbnkgY2xvbmUgb2YgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5CisgICAgICAgICAgICBHaXQgdHJlZS4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2xvbmVzIHRoZSBZb2N0byBQcm9qZWN0IGJhc2VsaW5lIGtlcm5lbCB0aGF0CisgICAgICAgICAgICBicmFuY2hlZCBvZmYgb2YgPGZpbGVuYW1lPmxpbnV4Lm9yZzwvZmlsZW5hbWU+IHZlcnNpb24gMy4xOToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBob3cgdG8gc2V0IHVwIGEgbG9jYWwgR2l0IHJlcG9zaXRvcnkgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIGtlcm5lbCBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLWtlcm5lbC1maWxlcyc+WW9jdG8gUHJvamVjdCBLZXJuZWw8L3VsaW5rPiIgYnVsbGV0ZWQKKyAgICAgICAgICAgIGl0ZW0gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjbG9uZWQgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHlvdSBjYW4KKyAgICAgICAgICAgIHN3aXRjaCB0byB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2ggd2l0aGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkgZm9yIHRoZSBrZXJuZWwgaXMgaW4KKyAgICAgICAgICAgIGEgdG9wLWxldmVsIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+bGludXgteW9jdG8tMy4xOTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIGxpbnV4LXlvY3RvLTMuMTkKKyAgICAgJCBnaXQgY2hlY2tvdXQgLWIgbWV0YSBvcmlnaW4vbWV0YQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSBjaGVja2VkIG91dCBhbmQgc3dpdGNoZWQgdG8gdGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYnJhbmNoLAorICAgICAgICAgICAgeW91IGNhbiBzZWUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmZWF0dXJlIGRlc2NyaXB0aW9ucyB0aGF0IGFyZQorICAgICAgICAgICAgdXNlZCB0byBidWlsZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsIHJlcG9zaXRvcnkuCisgICAgICAgICAgICBUaGVzZSBkZXNjcmlwdGlvbnMgYXJlIGluIHRoZSBmb3JtIG9mIDxmaWxlbmFtZT4uc2NjPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlYWxpemUsIGhvd2V2ZXIsIHRoYXQgYnJvd3NpbmcgeW91ciBsb2NhbCBrZXJuZWwgcmVwb3NpdG9yeQorICAgICAgICAgICAgZm9yIGZlYXR1cmUgZGVzY3JpcHRpb25zIGFuZCBwYXRjaGVzIGlzIG5vdCBhbiBlZmZlY3RpdmUgd2F5IHRvIGRldGVybWluZSB3aGF0IGlzIGluIGEKKyAgICAgICAgICAgIHBhcnRpY3VsYXIga2VybmVsIGJyYW5jaC4KKyAgICAgICAgICAgIEluc3RlYWQsIHlvdSBzaG91bGQgdXNlIEdpdCBkaXJlY3RseSB0byBkaXNjb3ZlciB0aGUgY2hhbmdlcyBpbiBhIGJyYW5jaC4KKyAgICAgICAgICAgIFVzaW5nIEdpdCBpcyBhbiBlZmZpY2llbnQgYW5kIGZsZXhpYmxlIHdheSB0byBpbnNwZWN0IGNoYW5nZXMgdG8gdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEdyb3VuZCB1cCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgY29tcGxldGUga2VybmVsIHRyZWUgaXMgYW4gYWN0aW9uIG9ubHkgdGFrZW4gYnkgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCB0ZWFtIGR1cmluZyBhbiBhY3RpdmUgZGV2ZWxvcG1lbnQgY3ljbGUuCisgICAgICAgICAgICAgICAgV2hlbiB5b3UgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeSwgeW91IGFyZSBzaW1wbHkgbWFraW5nIGl0CisgICAgICAgICAgICAgICAgZWZmaWNpZW50bHkgYXZhaWxhYmxlIGZvciBidWlsZGluZyBhbmQgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBZb2N0byBQcm9qZWN0IFRlYW0gY29uc3RydWN0cworICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIHNvdXJjZSBHaXQgcmVwb3NpdG9yeSAob3IgdHJlZSkgZm91bmQgYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+PC91bGluaz4gZ2l2ZW4gdGhlCisgICAgICAgICAgICBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgdG9wLWxldmVsIGtlcm5lbCBmZWF0dXJlIG9yIEJTUC4KKyAgICAgICAgICAgIFRoZXNlIGFyZSB0aGUgYWN0aW9ucyB0aGF0IGVmZmVjdGl2ZWx5IGNyZWF0ZSB0aGUgdHJlZQorICAgICAgICAgICAgdGhhdCBpbmNsdWRlcyB0aGUgbmV3IGZlYXR1cmUsIHBhdGNoIG9yIEJTUDoKKyAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSB0b3AtbGV2ZWwga2VybmVsIGZlYXR1cmUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc3Vic3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBmZWF0dXJlIGlzIGEgQlNQIGZvciBhIHBhcnRpY3VsYXIga2VybmVsIHR5cGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZSB0b3AtbGV2ZWwgZmVhdHVyZSBpcyBsb2NhdGVkIGJ5IHNlYXJjaGluZworICAgICAgICAgICAgICAgICAgICB0aGVzZSBzeXN0ZW0gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGluLXRyZWUga2VybmVsLWNhY2hlIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NmZy9rZXJuZWwtY2FjaGU8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFyZWFzIHBvaW50ZWQgdG8gYnkgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gcmVjaXBlczwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgdHlwaWNhbCBidWlsZCwgdGhlIHRhcmdldCBvZiB0aGUgc2VhcmNoIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSBkZXNjcmlwdGlvbiBpbiBhbiA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBmb2xsb3dzIHRoaXMgZm9ybWF0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5ic3BfbmFtZTwvcmVwbGFjZWFibGU+LTxyZXBsYWNlYWJsZT5rZXJuZWxfdHlwZTwvcmVwbGFjZWFibGU+LnNjYworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk9uY2UgbG9jYXRlZCwgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb24gaXMgZWl0aGVyIGNvbXBpbGVkIGludG8gYSBzaW1wbGUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIG9mIGFjdGlvbnMsIG9yIGludG8gYW4gZXhpc3RpbmcgZXF1aXZhbGVudCBzY3JpcHQgdGhhdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNoaXBwZWQga2VybmVsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBmZWF0dXJlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHRvcC1sZXZlbCBmZWF0dXJlIGRlc2NyaXB0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmZWF0dXJlcyBjYW4gY29tZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItS0VSTkVMX0ZFQVRVUkVTJz48ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiByZWNpcGVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FYWNoIGV4dHJhIGZlYXR1cmUgaXMgbG9jYXRlZCwgY29tcGlsZWQgYW5kIGFwcGVuZGVkIHRvIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgYXMgZGVzY3JpYmVkIGluIHN0ZXAgdGhyZWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgdG8gcHJvZHVjZSBhIHNlcmllcyBvZiA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSBkZXNjcmlwdGlvbnMgb2YgYWxsIHRoZSBicmFuY2hlcywgdGFncywgcGF0Y2hlcyBhbmQgY29uZmlndXJhdGlvbnMgdGhhdAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGJhc2UgR2l0IHJlcG9zaXRvcnkgdG8gY29tcGxldGVseSBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSAoYnVpbGQpIGJyYW5jaCBmb3IgdGhlIG5ldyBCU1Agb3IgZmVhdHVyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIGJhc2UgcmVwb3NpdG9yeSBpcyBjbG9uZWQsIGFuZCB0aGUgYWN0aW9ucworICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLSo8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyBhcmUgYXBwbGllZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgdHJlZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIEdpdCByZXBvc2l0b3J5IGlzIGxlZnQgd2l0aCB0aGUgZGVzaXJlZCBicmFuY2ggY2hlY2tlZCBvdXQgYW5kIGFueQorICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBicmFuY2hpbmcsIHBhdGNoaW5nIGFuZCB0YWdnaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUga2VybmVsIHRyZWUgaXMgbm93IHJlYWR5IGZvciBkZXZlbG9wZXIgY29uc3VtcHRpb24gdG8gYmUgbG9jYWxseSBjbG9uZWQsCisgICAgICAgICAgICBjb25maWd1cmVkLCBhbmQgYnVpbHQgaW50byBhIFlvY3RvIFByb2plY3Qga2VybmVsIHNwZWNpZmljIHRvIHNvbWUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgPG5vdGU+PHBhcmE+VGhlIGdlbmVyYXRlZCA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYWRkIHRvIHRoZSBrZXJuZWwKKyAgICAgICAgICAgICAgICBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBBbnkgYWRkLW9ucyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIGFyZSBhcHBsaWVkIHRvIHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgYnJhbmNoLgorICAgICAgICAgICAgICAgIFRoZSBmdWxsIHJlcG9zaXRvcnkgZ2VuZXJhdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIG9mZmljaWFsIFlvY3RvIFByb2plY3Qga2VybmVsIHJlcG9zaXRvcmllcyBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0LmNnaSc+aHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpPC91bGluaz4KKyAgICAgICAgICAgICAgICBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHN1cHBvcnRlZCBib2FyZHMgYW5kIGNvbmZpZ3VyYXRpb25zLjwvcGFyYT4KKyAgICAgICAgICAgICAgICA8cGFyYT5UaGUgdGVjaG5pcXVlIHRoZSBZb2N0byBQcm9qZWN0IHRlYW0gdXNlcyBpcyBmbGV4aWJsZSBhbmQgYWxsb3dzIGZvciBzZWFtbGVzcworICAgICAgICAgICAgICAgIGJsZW5kaW5nIG9mIGFuIGltbXV0YWJsZSBoaXN0b3J5IHdpdGggYWRkaXRpb25hbCBwYXRjaGVzIHNwZWNpZmljIHRvIGEKKyAgICAgICAgICAgICAgICBkZXBsb3ltZW50LgorICAgICAgICAgICAgICAgIEFueSBhZGRpdGlvbnMgdG8gdGhlIGtlcm5lbCBiZWNvbWUgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBicmFuY2hlcy48L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYnVpbGQtc3RyYXRlZ3knPgorICAgICAgICA8dGl0bGU+QnVpbGQgU3RyYXRlZ3k8L3RpdGxlPgorCis8IS0tCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGVtcGhhc2lzPkFSIC0gRGFycmVuIEhhcnQ6PC9lbXBoYXNpcz4gIFNvbWUgcGFydHMgb2YgdGhpcyBzZWN0aW9uCisgICAgICAgICAgICBuZWVkIHRvIGJlIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLWFuLWl0ZXJhdGl2ZS1kZXZlbG9wbWVudC1wcm9jZXNzJz5Vc2luZyBhbiBJdGVyYXRpdmUgRGV2ZWxvcG1lbnQgUHJvY2VzczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgRGFycmVuIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcGFydHMgYW5kIGlkZW50aWZ5IHRoZW0uCisgICAgICAgIDwvcGFyYT4KKy0tPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBhIGxvY2FsIEdpdCByZXBvc2l0b3J5IG9mIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBleGlzdHMgb24gYSBkZXZlbG9wbWVudCBzeXN0ZW0sCisgICAgICAgICAgICB5b3UgY2FuIGNvbnNpZGVyIHRoZSBjb21waWxhdGlvbiBwaGFzZSBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQgLSBidWlsZGluZyBhIGtlcm5lbCBpbWFnZS4KKyAgICAgICAgICAgIFNvbWUgcHJlcmVxdWlzaXRlcyBleGlzdCB0aGF0IGFyZSB2YWxpZGF0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgYmVmb3JlIGNvbXBpbGF0aW9uCisgICAgICAgICAgICBzdGFydHM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC91bGluaz4gcG9pbnRzCisgICAgICAgICAgICAgICAgdG8gdGhlIGtlcm5lbCBHaXQgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BIEJTUCBidWlsZCBicmFuY2ggZXhpc3RzLgorICAgICAgICAgICAgICAgIFRoaXMgYnJhbmNoIGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA8cmVwbGFjZWFibGU+a2VybmVsX3R5cGU8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+YnNwX25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBtYWtlcyBzdXJlIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgY29tcGlsYXRpb24uCisgICAgICAgICAgICBPdGhlciBtZWFucywgaG93ZXZlciwgZG8gZXhpc3QsIHN1Y2ggYXMgYXMgYm9vdHN0cmFwcGluZyBhIEJTUC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVmb3JlIGJ1aWxkaW5nIGEga2VybmVsLCB0aGUgYnVpbGQgcHJvY2VzcyB2ZXJpZmllcyB0aGUgdHJlZQorICAgICAgICAgICAgYW5kIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCBieSBwcm9jZXNzaW5nIGFsbCBvZiB0aGUKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gImZyYWdtZW50cyIgc3BlY2lmaWVkIGJ5IGZlYXR1cmUgZGVzY3JpcHRpb25zIGluIHRoZSA8ZmlsZW5hbWU+LnNjYzwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIEFzIHRoZSBmZWF0dXJlcyBhcmUgY29tcGlsZWQsIGFzc29jaWF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzIGFyZSBub3RlZAorICAgICAgICAgICAgYW5kIHJlY29yZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS0qPC9maWxlbmFtZT4gc2VyaWVzIG9mIGRpcmVjdG9yaWVzIGluIHRoZWlyIGNvbXBpbGF0aW9uIG9yZGVyLgorICAgICAgICAgICAgVGhlIGZyYWdtZW50cyBhcmUgbWlncmF0ZWQsIHByZS1wcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgTGludXggS2VybmVsCisgICAgICAgICAgICBDb25maWd1cmF0aW9uIHN1YnN5c3RlbSAoPGZpbGVuYW1lPmxrYzwvZmlsZW5hbWU+KSBhcyByYXcgaW5wdXQgaW4gdGhlIGZvcm0KKyAgICAgICAgICAgIG9mIGEgPGZpbGVuYW1lPi5jb25maWc8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sa2M8L2ZpbGVuYW1lPiB1c2VzIGl0cyBvd24gaW50ZXJuYWwgZGVwZW5kZW5jeSBjb25zdHJhaW50cyB0byBkbyB0aGUgZmluYWwKKyAgICAgICAgICAgIHByb2Nlc3Npbmcgb2YgdGhhdCBpbmZvcm1hdGlvbiBhbmQgZ2VuZXJhdGVzIHRoZSBmaW5hbCA8ZmlsZW5hbWU+LmNvbmZpZzwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIHRoYXQgaXMgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFVzaW5nIHRoZSBib2FyZCdzIGFyY2hpdGVjdHVyZSBhbmQgb3RoZXIgcmVsZXZhbnQgdmFsdWVzIGZyb20gdGhlIGJvYXJkJ3MgdGVtcGxhdGUsCisgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb24gaXMgc3RhcnRlZCBhbmQgYSBrZXJuZWwgaW1hZ2UgaXMgcHJvZHVjZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvdGhlciB0aGluZyB0aGF0IHlvdSBub3RpY2Ugb25jZSB5b3UgY29uZmlndXJlIGEga2VybmVsIGlzIHRoYXQKKyAgICAgICAgICAgIHRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBhIGJ1aWxkIHRyZWUgdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHlvdXIga2VybmVsJ3MgbG9jYWwgR2l0CisgICAgICAgICAgICBzb3VyY2UgcmVwb3NpdG9yeSB0cmVlLgorICAgICAgICAgICAgVGhpcyBidWlsZCB0cmVlIGhhcyBhIG5hbWUgdGhhdCB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybSwgd2hlcmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gaXMgdGhlIG1ldGFkYXRhIG5hbWUgb2YgdGhlIG1hY2hpbmUgKEJTUCkgYW5kICJrZXJuZWxfdHlwZSIgaXMgb25lCisgICAgICAgICAgICBvZiB0aGUgWW9jdG8gUHJvamVjdCBzdXBwb3J0ZWQga2VybmVsIHR5cGVzIChlLmcuICJzdGFuZGFyZCIpOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGxpbnV4LSR7TUFDSElORX0tPHJlcGxhY2VhYmxlPmtlcm5lbF90eXBlPC9yZXBsYWNlYWJsZT4tYnVpbGQKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZXhpc3Rpbmcgc3VwcG9ydCBpbiB0aGUgPGZpbGVuYW1lPmtlcm5lbC5vcmc8L2ZpbGVuYW1lPiB0cmVlIGFjaGlldmVzIHRoaXMKKyAgICAgICAgICAgIGRlZmF1bHQgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBiZWhhdmlvciBtZWFucyB0aGF0IGFsbCB0aGUgZ2VuZXJhdGVkIGZpbGVzIGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZSBvciBCU1AgYXJlIG5vdyBpbgorICAgICAgICAgICAgdGhlIGJ1aWxkIHRyZWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGZpbGVzIGluY2x1ZGUgdGhlIGZpbmFsIDxmaWxlbmFtZT4uY29uZmlnPC9maWxlbmFtZT4gZmlsZSwgYWxsIHRoZSA8ZmlsZW5hbWU+Lm88L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZXMsIHRoZSA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgU2luY2UgZWFjaCBtYWNoaW5lIG9yIEJTUCBoYXMgaXRzIG93biBzZXBhcmF0ZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgaW4gaXRzIG93biBzZXBhcmF0ZSBicmFuY2gKKyAgICAgICAgICAgIG9mIHRoZSBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiBlYXNpbHkgc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGJ1aWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvYXBwZW5kaXg+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LXN0eWxlLmNzcyBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTBjMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtc3R5bGUuY3NzCkBAIC0wLDAgKzEsOTg0IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL2tlcm5lbC1kZXYtdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LnhtbCBiL2RvY3VtZW50YXRpb24va2VybmVsLWRldi9rZXJuZWwtZGV2LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RmMmNjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYueG1sCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0na2VybmVsLWRldicgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorCQkgIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbAorCQk8L3RpdGxlPgorCisgICAgICAgIDxhdXRob3Jncm91cD4KKyAgICAgICAgICAgIDxhdXRob3I+CisgICAgICAgICAgICAgICAgPGZpcnN0bmFtZT5EYXJyZW48L2ZpcnN0bmFtZT4gPHN1cm5hbWU+SGFydDwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPmRhcnJlbi5oYXJ0QGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNDwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTM8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuNTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41LjE8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5KYW51YXJ5IDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNS4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS42PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS42IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS43PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjg8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE1PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjk8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgPC9yZXZoaXN0b3J5PgorCisgICAgPGNvcHlyaWdodD4KKyAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICA8L2NvcHlyaWdodD4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgPC9wYXJhPgorICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyc+WW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb21tb24ueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJrZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1jb25jZXB0cy1hcHB4LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1tYWludC1hcHB4LnhtbCIvPgorCis8IS0tCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1leGFtcGxlcy54bWwiLz4KKy0tPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0ia2VybmVsLWRldi1mYXEueG1sIi8+CisKKzwhLS0gICAgPGluZGV4IGlkPSdpbmRleCc+CisgICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgorICAgIDwvaW5kZXg+CistLT4KKworPC9ib29rPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hZHQtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYWR0LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hbmFseXNpcy1mb3ItcGFja2FnZS1zcGxpdHRpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZjI3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9hcHAtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjdiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYXBwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9ic3AtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjRkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnNwLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGQtd29ya3NwYWNlLWRpcmVjdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2MWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZC13b3Jrc3BhY2UtZGlyZWN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkYjg2YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9idWlsZGhpc3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNWY4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmJlYTVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2J1aWxkaW5nLWFuLWltYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc0NjRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2NvbmZpZ3VyYXRpb24tY29tcGlsZS1hdXRvcmVjb25mLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NjcwYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIyNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9kZXYtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2FjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZGV2LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9naXQtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MDEzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvZ2l0LXdvcmtmbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWZlYTdiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5NjI1OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbWFnZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWVhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9pbmRleC1kb3dubG9hZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDc5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvaW5kZXgtZG93bmxvYWRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWFyY2hpdGVjdHVyZS1vdmVydmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmFhZDE3MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtYXJjaGl0ZWN0dXJlLW92ZXJ2aWV3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LWZsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTEwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi1mbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ZGQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtZGV2LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTEucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZjMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbC1vdmVydmlldy0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLW92ZXJ2aWV3LTItZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5NzBlYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtb3ZlcnZpZXctMi1nZW5lcmljLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWwtdGl0bGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZDg2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjQwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstYWxsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstY2hvb3NlLWV2ZW50cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZDYyYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGVkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstaTkxNS1kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJkMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2xheWVyLWlucHV0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTRmMmU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL2xheWVyLWlucHV0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbHR0bmdtYWluMC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2MDExMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvbWVnYS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlMGI4OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9tZWdhLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Mjc1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1idXN5Ym94LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWI2NDcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1kb3dubG9hZGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTU0NzAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktcHJvY2Vzc2VzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjOWMzMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWNkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BhdGNoaW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTEwNzBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjNmFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyODY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyY2UyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMzRlYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtdWRoY3BjLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODFlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtYW5ub3RhdGUtdWRoY3BjLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTdiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxM2M4NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTk2MmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQyZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGYzOTVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1mbGF0LXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktZnJvbS11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5OWFmNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTgwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLXVucmVzb2x2ZWQtaGlkZGVuLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjMwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS10by11c2VyLWV4cGFuZGVkLXN0cmlwcGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5M2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wb2t5LXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHJvZmlsZS10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YzY4MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZiZmRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Ym9vdGNoYXJ0Z3VpLWxpbnV4LXlvY3RvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0tbm9zdHJpcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0Njc1YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS1ub3N0cmlwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWUzNTM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9yZWNpcGUtd29ya2Zsb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTk2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvcmVjaXBlLXdvcmtmbG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1ODExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NjaGVkLXdha2V1cC1wcm9maWxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzdlMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zZGsucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzljYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZjZTJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtZmV0Y2hpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YWVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTE1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zb3VyY2UtcmVwb3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzVmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc291cmNlLXJlcG9zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jYWxsZXJzLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jYWxsZXJzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LWZyb20tdXNlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTViYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS10by11c2VyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYTM5YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy91c2VyLWNvbmZpZ3VyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMvdXNpbmctYS1wcmUtYnVpbHQtaW1hZ2UucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMxMzBkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3VzaW5nLWEtcHJlLWJ1aWx0LWltYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC1yZWYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGM2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI3YTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveW9jdG8tcHJvamVjdC10cmFuc3AucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMWQyYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL2ZpZ3VyZXMveXAtZG93bmxvYWQucG5nIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcwYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9maWd1cmVzL3lwLWRvd25sb2FkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJiNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUudG9jIj4KKyAgIGFwcGVuZGl4ICB0b2MKKyAgIGNoYXB0ZXIgICB0b2MKKyAgIGFydGljbGUgICBub3AKKyAgIGJvb2sgICAgICBub3AKKyAgIHBhcnQgICAgICBub3AKKyAgIHByZWZhY2UgICBub3AKKyAgIHFhbmRhZGl2ICBub3AKKyAgIHFhbmRhc2V0ICBub3AKKyAgIHJlZmVyZW5jZSBub3AKKyAgIHNlY3Rpb24gICBub3AKKyAgIHNldCAgICAgICBub3AKKyAgPC94c2w6cGFyYW0+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9nbG9zcy1wZXJtYWxpbmtzLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidtZWdhLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiPkE8L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwgYi9kb2N1bWVudGF0aW9uL21lZ2EtbWFudWFsL21lZ2EtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzVlYmYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLW1hbnVhbC54bWwKQEAgLTAsMCArMSwyMzEgQEAKKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKworPGJvb2sgaWQ9J21lZ2EtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorCisgICAgPGJvb2tpbmZvPgorCisgICAgICAgIDxhYnN0cmFjdD4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsIGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgcHVibGlzaGVkCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IEhUTUwgbWFudWFscyBmb3IgdGhlIGdpdmVuIHJlbGVhc2UuCisgICAgICAgICAgICBUaGUgbWFudWFsIGV4aXN0cyB0byBoZWxwIHVzZXJzIGVmZmljaWVudGx5IHNlYXJjaCBmb3Igc3RyaW5ncworICAgICAgICAgICAgYWNyb3NzIHRoZSBlbnRpcmUgWW9jdG8gUHJvamVjdCBkb2N1bWVudGF0aW9uIHNldC4KKyAgICAgICAgPC9hYnN0cmFjdD4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL21lZ2EtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPnNjb3R0Lm0ucmlmZW5iYXJrQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxub3RlPgorICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19NTV9VUkw7Jz5Zb2N0byBQcm9qZWN0IE1lZ2EtTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisKKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworPCEtLSBJbmNsdWRlcyB5b2N0by1wcm9qZWN0LXFzIC0tPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy54bWwiLz4KKworPCEtLSBJbmNsdWRlcyBkZXYtbWFudWFsIHRpdGxlIGltYWdlIGFuZCB0aGVuIGRldi1tYW51YWwgY2hhcHRlcnMgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2Rldi10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vZGV2LW1hbnVhbC9kZXYtbWFudWFsLXN0YXJ0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbmV3YmllLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9kZXYtbWFudWFsL2Rldi1tYW51YWwtbW9kZWwueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1jb21tb24tdGFza3MueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2Rldi1tYW51YWwvZGV2LW1hbnVhbC1xZW11LnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGFkdC1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gYWR0LW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYWR0LXRpdGxlLnBuZyIgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBzY2FsZWZpdD0iMSIgLz4KKyAgICA8L3BhcmE+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtbWFudWFsLWludHJvLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9hZHQtbWFudWFsL2FkdC1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtcHJlcGFyZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtcGFja2FnZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vYWR0LW1hbnVhbC9hZHQtY29tbWFuZC54bWwiLz4KKworPCEtLSBJbmNsdWRlcyBic3AtZ3VpZGUgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gYnNwLWd1aWRlIGNoYXB0ZXJzIC0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9ic3AtdGl0bGUucG5nIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9ic3AtZ3VpZGUvYnNwLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIGtlcm5lbC1kZXYgdGl0bGUgaW1hZ2UgYW5kIHRoZW4ga2VybmVsLWRldiBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMva2VybmVsLWRldi10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL2tlcm5lbC1kZXYva2VybmVsLWRldi1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LWNvbW1vbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LWFkdmFuY2VkLnhtbCIvPgorICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9rZXJuZWwtZGV2L2tlcm5lbC1kZXYtY29uY2VwdHMtYXBweC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4va2VybmVsLWRldi9rZXJuZWwtZGV2LW1haW50LWFwcHgueG1sIi8+CisKKzwhLS0gSW5jbHVkZXMgcHJvZmlsZS1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gcHJvZmlsZS1tYW51YWwgY2hhcHRlcnMgLS0+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nIiB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIHNjYWxlZml0PSIxIiAvPgorICAgIDwvcGFyYT4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1pbnRyby54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtYXJjaC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCIvPgorCis8IS0tIEluY2x1ZGVzIHJlZi1tYW51YWwgdGl0bGUgaW1hZ2UgYW5kIHRoZW4gcmVmLW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcG9reS10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvaW50cm9kdWN0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvY2xvc2VyLWxvb2sueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC90ZWNobmljYWwtZGV0YWlscy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtY2xhc3Nlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3JlZi12YXJsb2NhbGl0eS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL2ZhcS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlCisgICAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIiBocmVmPSIuLi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwiLz4KKworPCEtLSBJbmNsdWRlcyB0b2FzdGVyLW1hbnVhbCB0aXRsZSBpbWFnZSBhbmQgdGhlbiB0b2FzdGVyLW1hbnVhbCBjaGFwdGVycyAtLT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmciIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgc2NhbGVmaXQ9IjEiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUKKyAgICAgICAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIGhyZWY9Ii4uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZQorICAgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgaHJlZj0iLi4vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCIvPgorCis8L2Jvb2s+CisKKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9tZWdhLW1hbnVhbC9tZWdhLXN0eWxlLmNzcyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MWEyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vbWVnYS1tYW51YWwvbWVnYS1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvbWVnYS10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9wb2t5LmVudCBiL2RvY3VtZW50YXRpb24vcG9reS5lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNGY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcG9reS5lbnQKQEAgLTAsMCArMSw3MCBAQAorPCFFTlRJVFkgRElTVFJPICIxLjkiPgorPCFFTlRJVFkgRElTVFJPX0NPTVBSRVNTRUQgIjE5Ij4KKzwhRU5USVRZIERJU1RST19OQU1FICJ0YmQiPgorPCFFTlRJVFkgWU9DVE9fRE9DX1ZFUlNJT04gIjEuOSI+Cis8IUVOVElUWSBQT0tZVkVSU0lPTiAiMTQuMC4wIj4KKzwhRU5USVRZIFBPS1lWRVJTSU9OX0NPTVBSRVNTRUQgIjE0MDAiPgorPCFFTlRJVFkgWU9DVE9fUE9LWSAicG9reS0mRElTVFJPX05BTUU7LSZQT0tZVkVSU0lPTjsiPgorPCFFTlRJVFkgQ09QWVJJR0hUX1lFQVIgIjIwMTAtMjAxNSI+Cis8IUVOVElUWSBZT0NUT19ETF9VUkwgImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19IT01FX1VSTCAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnIj4KKzwhRU5USVRZIFlPQ1RPX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQlVHWklMTEFfVVJMICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19XSUtJX1VSTCAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQUJfVVJMICJodHRwOi8vYXV0b2J1aWxkZXIueW9jdG9wcm9qZWN0Lm9yZyI+Cis8IUVOVElUWSBZT0NUT19HSVRfVVJMICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fQURUUkVQT19VUkwgImh0dHA6Ly9hZHRyZXBvLnlvY3RvcHJvamVjdC5vcmciPgorPCFFTlRJVFkgWU9DVE9fUkVMRUFTRV9OT1RFUyAiJllPQ1RPX0hPTUVfVVJMOy9kb3dubG9hZHMvY29yZS8mRElTVFJPX05BTUU7JkRJU1RST19DT01QUkVTU0VEOyI+Cis8IUVOVElUWSBPRV9IT01FX1VSTCAiaHR0cDovL3d3dy5vcGVuZW1iZWRkZWQub3JnIj4KKzwhRU5USVRZIE9FX0xJU1RTX1VSTCAiaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvbWFpbG1hbiI+Cis8IUVOVElUWSBPRV9ET0NTX1VSTCAiaHR0cDovL2RvY3Mub3BlbmVtYmVkZGVkLm9yZyI+Cis8IUVOVElUWSBPSF9IT01FX1VSTCAiaHR0cDovL28taGFuZC5jb20iPgorPCFFTlRJVFkgQklUQkFLRV9IT01FX1VSTCAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2JpdGJha2UvIj4KKzwhRU5USVRZIEVDTElQU0VfTUFJTl9VUkwgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzIj4KKzwhRU5USVRZIEVDTElQU0VfRExfVVJMICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmciPgorPCFFTlRJVFkgRUNMSVBTRV9ETF9QTFVHSU5fVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9lY2xpcHNlLXBsdWdpbi8mRElTVFJPOyI+Cis8IUVOVElUWSBFQ0xJUFNFX1VQREFURVNfVVJMICImRUNMSVBTRV9ETF9VUkw7L3RtL3VwZGF0ZXMvMy4zIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9pbmRpZ28iPgorPCFFTlRJVFkgRUNMSVBTRV9KVU5PX1VSTCAiJkVDTElQU0VfRExfVVJMOy9yZWxlYXNlcy9qdW5vIj4KKzwhRU5USVRZIEVDTElQU0VfTFVOQV9VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvcmVsZWFzZXMvbHVuYSI+Cis8IUVOVElUWSBFQ0xJUFNFX0tFUExFUl9VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvcmVsZWFzZXMva2VwbGVyIj4KKzwhRU5USVRZIEVDTElQU0VfSU5ESUdPX0NEVF9VUkwgIiZFQ0xJUFNFX0RMX1VSTDsvdG9vbHMvY2R0L3JlbGVhc2VzL2luZGlnbyI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1VSTCAiJllPQ1RPX0hPTUVfVVJMOy9kb2NzIj4KKzwhRU5USVRZIFlPQ1RPX1NPVVJDRVNfVVJMICImWU9DVE9fSE9NRV9VUkw7L3NvdXJjZXMvIj4KKzwhRU5USVRZIFlPQ1RPX0FCX1BPUlRfVVJMICImWU9DVE9fQUJfVVJMOzo4MDEwIj4KKzwhRU5USVRZIFlPQ1RPX0FCX05JR0hUTFlfVVJMICImWU9DVE9fQUJfVVJMOy9wdWIvbmlnaHRseS8iPgorPCFFTlRJVFkgWU9DVE9fUE9LWV9VUkwgIiZZT0NUT19ETF9VUkw7L3JlbGVhc2VzL3Bva3kvIj4KKzwhRU5USVRZIFlPQ1RPX1JFTEVBU0VfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy95b2N0by95b2N0by0mRElTVFJPOyI+Cis8IUVOVElUWSBZT0NUT19UT09MQ0hBSU5fRExfVVJMICImWU9DVE9fUkVMRUFTRV9ETF9VUkw7L3Rvb2xjaGFpbi8iPgorPCFFTlRJVFkgWU9DVE9fRUNMSVBTRV9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvZWNsaXBzZS1wbHVnaW4vIj4KKzwhRU5USVRZIFlPQ1RPX0FEVElOU1RBTExFUl9ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvYWR0LWluc3RhbGxlciI+Cis8IUVOVElUWSBZT0NUT19QT0tZX0RMX1VSTCAiJllPQ1RPX1JFTEVBU0VfRExfVVJMOy8mWU9DVE9fUE9LWTsudGFyLmJ6MiI+Cis8IUVOVElUWSBZT0NUT19NQUNISU5FU19ETF9VUkwgIiZZT0NUT19SRUxFQVNFX0RMX1VSTDsvbWFjaGluZXMiPgorPCFFTlRJVFkgWU9DVE9fUUVNVV9ETF9VUkwgIiZZT0NUT19NQUNISU5FU19ETF9VUkw7L3FlbXUiPgorPCFFTlRJVFkgWU9DVE9fUFlUSE9OLWk2ODZfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9taXNjc3VwcG9ydC9weXRob24tbmF0aXZlc2RrLXN0YW5kYWxvbmUtaTY4Ni50YXIuYnoyIj4KKzwhRU5USVRZIFlPQ1RPX1BZVEhPTi14ODZfNjRfRExfVVJMICImWU9DVE9fRExfVVJMOy9yZWxlYXNlcy9taXNjc3VwcG9ydC9weXRob24tbmF0aXZlc2RrLXN0YW5kYWxvbmUteDg2XzY0LnRhci5iejIiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19RU19VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0FEVF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9hZHQtbWFudWFsL2FkdC1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX1JFRl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9yZWYtbWFudWFsL3JlZi1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0JTUF9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9ic3AtZ3VpZGUvYnNwLWd1aWRlLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19ERVZfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvZGV2LW1hbnVhbC9kZXYtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19LRVJORUxfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsva2VybmVsLW1hbnVhbC9rZXJuZWwtbWFudWFsLmh0bWwiPgorPCFFTlRJVFkgWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2tlcm5lbC1kZXYva2VybmVsLWRldi5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfUFJPRl9VUkwgIiZZT0NUT19ET0NTX1VSTDsvJllPQ1RPX0RPQ19WRVJTSU9OOy9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfTU1fVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvbWVnYS1tYW51YWwvbWVnYS1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19ET0NTX0JCX1VSTCAiJllPQ1RPX0RPQ1NfVVJMOy8mWU9DVE9fRE9DX1ZFUlNJT047L2JpdGJha2UtdXNlci1tYW51YWwvYml0YmFrZS11c2VyLW1hbnVhbC5odG1sIj4KKzwhRU5USVRZIFlPQ1RPX0RPQ1NfVE9BU1RfVVJMICImWU9DVE9fRE9DU19VUkw7LyZZT0NUT19ET0NfVkVSU0lPTjsvdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwuaHRtbCI+Cis8IUVOVElUWSBZT0NUT19BRFRQQVRIX0RJUiAiL29wdC9wb2t5LyZESVNUUk87Ij4KKzwhRU5USVRZIFlPQ1RPX1BPS1lfVEFSQkFMTCAiJllPQ1RPX1BPS1k7LnRhci5iejIiPgorPCFFTlRJVFkgT0VfSU5JVF9QQVRIICImWU9DVE9fUE9LWTsvb2UtaW5pdC1idWlsZC1lbnYiPgorPCFFTlRJVFkgT0VfSU5JVF9GSUxFICJvZS1pbml0LWJ1aWxkLWVudiI+Cis8IUVOVElUWSBVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgd2dldCBnaXQtY29yZSBkaWZmc3RhdCB1bnppcCB0ZXhpbmZvIGdjYy1tdWx0aWxpYiBcCisgICAgIGJ1aWxkLWVzc2VudGlhbCBjaHJwYXRoIHNvY2F0Ij4KKzwhRU5USVRZIEZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAiZ2F3ayBtYWtlIHdnZXQgdGFyIGJ6aXAyIGd6aXAgcHl0aG9uIHVuemlwIHBlcmwgcGF0Y2ggXAorICAgICBkaWZmdXRpbHMgZGlmZnN0YXQgZ2l0IGNwcCBnY2MgZ2NjLWMrKyBnbGliYy1kZXZlbCB0ZXhpbmZvIGNocnBhdGggXAorICAgICBjY2FjaGUgcGVybC1EYXRhLUR1bXBlciBwZXJsLVRleHQtUGFyc2VXb3JkcyBwZXJsLVRocmVhZC1RdWV1ZSBzb2NhdCBcCisgICAgIGZpbmR1dGlscyB3aGljaCI+Cis8IUVOVElUWSBPUEVOU1VTRV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTCAicHl0aG9uIGdjYyBnY2MtYysrIGdpdCBjaHJwYXRoIG1ha2Ugd2dldCBweXRob24teG1sIFwKKyAgICAgZGlmZnN0YXQgbWFrZWluZm8gcHl0aG9uLWN1cnNlcyBwYXRjaCBzb2NhdCI+Cis8IUVOVElUWSBDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUwgImdhd2sgbWFrZSB3Z2V0IHRhciBiemlwMiBnemlwIHB5dGhvbiB1bnppcCBwZXJsIHBhdGNoIFwKKyAgICAgZGlmZnV0aWxzIGRpZmZzdGF0IGdpdCBjcHAgZ2NjIGdjYy1jKysgZ2xpYmMtZGV2ZWwgdGV4aW5mbyBjaHJwYXRoIHNvY2F0Ij4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWFsbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNDBiYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGRkNjJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWNob29zZS1ldmVudHMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2tlcm5lbHNoYXJrLWk5MTUtZGlzcGxheS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwZWRmYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9rZXJuZWxzaGFyay1vdXRwdXQtZGlzcGxheS5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmQwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMva2VybmVsc2hhcmstb3V0cHV0LWRpc3BsYXkucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9sdHRuZ21haW4wLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjYwMTEzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL2x0dG5nbWFpbjAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktYnVzeWJveC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNzVjNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWNvcHktdG8tdXNlci5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjY0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLWRvd25sb2FkaW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzc0MmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9vcHJvZmlsZXVpLXByb2Nlc3Nlcy5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTQ3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXByb2JlLWRvX2ZvcmstcHJvZmlsZS5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTA3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1wcm9iZS1kb19mb3JrLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXJlcG9ydC1jeWNsZXMtdS5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWM2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1yZXBvcnQtY3ljbGVzLXUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUtbGliYy5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzI4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLWxpYmMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtc3lzdGVtd2lkZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjZTI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXN5c3RlbXdpZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWIzNGVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWFubm90YXRlLXVkaGNwYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4MWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRlYnVnaW5mby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxN2I0OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTEzYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWRzby16b29tLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTYyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NDJkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZmxhdC1zdHJpcHBlZC5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjM5NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2M3NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcGVyZi13Z2V0LWctY29weS1mcm9tLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtZGVidWdpbmZvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzk5YWY1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC11bnJlc29sdmVkLWhpZGRlbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxODA4YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQtdW5yZXNvbHZlZC1oaWRkZW4ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMzAyZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVjNjgyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9weWJvb3RjaGFydGd1aS1saW51eC15b2N0by5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNmJmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHlib290Y2hhcnRndWktbGludXgteW9jdG8ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS1ub3N0cmlwLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS1ub3N0cmlwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQ2NzVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3B5Y2hhcnQtbGludXgteW9jdG8tcnBtLW5vc3RyaXAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9weWNoYXJ0LWxpbnV4LXlvY3RvLXJwbS5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTM1MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvcHljaGFydC1saW51eC15b2N0by1ycG0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc2NoZWQtd2FrZXVwLXByb2ZpbGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwYzhkOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNhbGxlcnMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktZnJvbS11c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDMxNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9maWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmcgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNWJhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL2ZpZ3VyZXMvc3lzcHJvZi1jb3B5LXRvLXVzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtYXJjaC54bWwgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWFyY2gueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDExNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWFyY2gueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC1hcmNoJz4KKworPHRpdGxlPk92ZXJhbGwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBUcmFjaW5nIGFuZCBQcm9maWxpbmcgVG9vbHM8L3RpdGxlPgorCis8c2VjdGlvbiBpZD0nYXJjaGl0ZWN0dXJlLW9mLXRoZS10cmFjaW5nLWFuZC1wcm9maWxpbmctdG9vbHMnPgorICAgIDx0aXRsZT5BcmNoaXRlY3R1cmUgb2YgdGhlIFRyYWNpbmcgYW5kIFByb2ZpbGluZyBUb29sczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQgbWF5IHNlZW0gc3VycHJpc2luZyB0byBzZWUgYSBzZWN0aW9uIGNvdmVyaW5nIGFuICdvdmVyYWxsIGFyY2hpdGVjdHVyZScKKyAgICAgICAgZm9yIHdoYXQgc2VlbXMgdG8gYmUgYSByYW5kb20gY29sbGVjdGlvbiBvZiB0cmFjaW5nIHRvb2xzIHRoYXQgdG9nZXRoZXIKKyAgICAgICAgbWFrZSB1cCB0aGUgTGludXggdHJhY2luZyBhbmQgcHJvZmlsaW5nIHNwYWNlLgorICAgICAgICBUaGUgZmFjdCBpcywgaG93ZXZlciwgdGhhdCBpbiByZWNlbnQgeWVhcnMgdGhpcyBzZWVtaW5nbHkgZGlzcGFyYXRlCisgICAgICAgIHNldCBvZiB0b29scyBoYXMgc3RhcnRlZCB0byBjb252ZXJnZSBvbiBhICdjb3JlJyBzZXQgb2YgdW5kZXJseWluZworICAgICAgICBtZWNoYW5pc21zOgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPnN0YXRpYyB0cmFjZXBvaW50czwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPmtwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPnVwcm9iZXM8L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+dGhlIHBlcmZfZXZlbnRzIHN1YnN5c3RlbTwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+ZGVidWdmczwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBSYXRoZXIgdGhhbiBlbnVtZXJhdGluZyBoZXJlIGhvdyBlYWNoIHRvb2wgbWFrZXMgdXNlIG9mCisgICAgICAgIHRoZXNlIGNvbW1vbiBtZWNoYW5pc21zLCB0ZXh0Ym94ZXMgbGlrZSB0aGlzIHdpbGwgbWFrZSBub3RlIG9mIHRoZQorICAgICAgICBzcGVjaWZpYyB1c2FnZXMgaW4gZWFjaCB0b29sIGFzIHRoZXkgY29tZSB1cCBpbiB0aGUgY291cnNlCisgICAgICAgIG9mIHRoZSB0ZXh0LgorICAgIDwvaW5mb3JtYWxleGFtcGxlPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWE1N2VmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iidwcm9maWxlLW1hbnVhbC1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbCBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZWNsaXBzZS1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODk4MjgxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9wcm9maWxlLW1hbnVhbC9wcm9maWxlLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvcHJvZmlsZS1tYW51YWwvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaGFwdGVyLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImFwcGVuZGl4LmF1dG9sYWJlbCI+QTwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24uYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5sYWJlbC5pbmNsdWRlcy5jb21wb25lbnQubGFiZWwiIHNlbGVjdD0iMSIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtZXhhbXBsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzBjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncHJvZmlsZS1tYW51YWwtZXhhbXBsZXMnPgorCis8dGl0bGU+UmVhbC1Xb3JsZCBFeGFtcGxlczwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRoaXMgY2hhcHRlciBjb250YWlucyByZWFsLXdvcmxkIGV4YW1wbGVzLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nc2xvdy13cml0ZS1zcGVlZC1vbi1saXZlLWltYWdlcyc+CisgICAgPHRpdGxlPlNsb3cgV3JpdGUgU3BlZWQgb24gTGl2ZSBJbWFnZXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEluIG9uZSBvZiBvdXIgcHJldmlvdXMgcmVsZWFzZXMgKGRlbnppbCksIHVzZXJzIG5vdGljZWQgdGhhdCBib290aW5nCisgICAgICAgIG9mZiBvZiBhIGxpdmUgaW1hZ2UgYW5kIHdyaXRpbmcgdG8gZGlzayB3YXMgbm90aWNlYWJseSBzbG93ZXIuCisgICAgICAgIFRoaXMgaW5jbHVkZWQgdGhlIGJvb3QgaXRzZWxmLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBvbmUsIHNpbmNlIGZpcnN0CisgICAgICAgIGJvb3RzIHRlbmQgdG8gZG8gYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygd3JpdGluZyBkdWUgdG8gY2VydGFpbgorICAgICAgICBwb3N0LWluc3RhbGwgc2NyaXB0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHByb2JsZW0gKGFuZCBzb2x1dGlvbikgd2FzIGRpc2NvdmVyZWQgYnkgdXNpbmcgdGhlIFlvY3RvIHRyYWNpbmcKKyAgICAgICAgdG9vbHMsIGluIHRoaXMgY2FzZSAncGVyZiBzdGF0JywgJ3BlcmYgc2NyaXB0JywgJ3BlcmYgcmVjb3JkJworICAgICAgICBhbmQgJ3BlcmYgcmVwb3J0Jy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU2VlIGFsbCB0aGUgdW52YXJuaXNoZWQgZGV0YWlscyBvZiBob3cgdGhpcyBidWcgd2FzIGRpYWdub3NlZCBhbmQKKyAgICAgICAgc29sdmVkIGhlcmU6IFlvY3RvIEJ1ZyAjMzA0OQorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbCBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtaW50cm8ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDdmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLWludHJvLnhtbApAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3Byb2ZpbGUtbWFudWFsLWludHJvJz4KKworPHRpdGxlPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdGl0bGU+CisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtaW50cm8nPgorICAgICAgICA8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGJ1bmRsZXMgYSBudW1iZXIgb2YgdHJhY2luZyBhbmQgcHJvZmlsaW5nIHRvb2xzIC0gdGhpcyAnSE9XVE8nCisgICAgICAgICAgICBkZXNjcmliZXMgdGhlaXIgYmFzaWMgdXNhZ2UgYW5kIHNob3dzIGJ5IGV4YW1wbGUgaG93IHRvIG1ha2UgdXNlCisgICAgICAgICAgICBvZiB0aGVtIHRvIGV4YW1pbmUgYXBwbGljYXRpb24gYW5kIHN5c3RlbSBiZWhhdmlvci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2xzIHByZXNlbnRlZCBhcmUgZm9yIHRoZSBtb3N0IHBhcnQgY29tcGxldGVseSBvcGVuLWVuZGVkIGFuZAorICAgICAgICAgICAgaGF2ZSBxdWl0ZSBnb29kIGFuZC9vciBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBvZiB0aGVpciBvd24gd2hpY2gKKyAgICAgICAgICAgIGNhbiBiZSB1c2VkIHRvIHNvbHZlIGp1c3QgYWJvdXQgYW55IHByb2JsZW0geW91IG1pZ2h0IGNvbWUgYWNyb3NzCisgICAgICAgICAgICBpbiBMaW51eC4KKyAgICAgICAgICAgIEVhY2ggc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHBhcnRpY3VsYXIgdG9vbCBoYXMgbGlua3MgdG8gdGhhdAorICAgICAgICAgICAgdG9vbCdzIGRvY3VtZW50YXRpb24gYW5kIHdlYnNpdGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgJ0hPV1RPJyBpcyB0byBwcmVzZW50IGEgc2V0IG9mIGNvbW1vbiBhbmQKKyAgICAgICAgICAgIGdlbmVyYWxseSB1c2VmdWwgdHJhY2luZyBhbmQgcHJvZmlsaW5nIGlkaW9tcyBhbG9uZyB3aXRoIHRoZWlyCisgICAgICAgICAgICBhcHBsaWNhdGlvbiAoYXMgYXBwcm9wcmlhdGUpIHRvIGVhY2ggdG9vbCwgaW4gdGhlIGNvbnRleHQgb2YgYQorICAgICAgICAgICAgZ2VuZXJhbC1wdXJwb3NlICdkcmlsbC1kb3duJyBtZXRob2RvbG9neSB0aGF0IGNhbiBiZSBhcHBsaWVkCisgICAgICAgICAgICB0byBzb2x2aW5nIGEgbGFyZ2UgbnVtYmVyICg5MCU/KSBvZiBwcm9ibGVtcy4KKyAgICAgICAgICAgIEZvciBoZWxwIHdpdGggbW9yZSBhZHZhbmNlZCB1c2FnZXMgYW5kIHByb2JsZW1zLCBwbGVhc2Ugc2VlCisgICAgICAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igd2Vic2l0ZXMgbGlzdGVkIGZvciBlYWNoIHRvb2wuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmaW5hbCBzZWN0aW9uIG9mIHRoaXMgJ0hPV1RPJyBpcyBhIGNvbGxlY3Rpb24gb2YgcmVhbC13b3JsZAorICAgICAgICAgICAgZXhhbXBsZXMgd2hpY2ggd2UnbGwgYmUgY29udGludWFsbHkgYWRkaW5nIHRvIGFzIHdlIHNvbHZlIG1vcmUKKyAgICAgICAgICAgIHByb2JsZW1zIHVzaW5nIHRoZSB0b29scyAtIGZlZWwgZnJlZSB0byBhZGQgeW91ciBvd24gZXhhbXBsZXMKKyAgICAgICAgICAgIHRvIHRoZSBsaXN0IQorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPgorICAgICAgICA8dGl0bGU+R2VuZXJhbCBTZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBNb3N0IG9mIHRoZSB0b29scyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gJ3NkaycgaW1hZ2VzIG9yIGluIGltYWdlcworICAgICAgICAgICAgYnVpbHQgYWZ0ZXIgYWRkaW5nICd0b29scy1wcm9maWxlJyB0byB5b3VyIGxvY2FsLmNvbmYuCisgICAgICAgICAgICBTbywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYWxsIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaGVyZSwKKyAgICAgICAgICAgIHBsZWFzZSBmaXJzdCBidWlsZCBhbmQgYm9vdCBhbiAnc2RrJyBpbWFnZSBlLmcuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8tc2RrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBvciBhbHRlcm5hdGl2ZWx5IGJ5IGFkZGluZyAndG9vbHMtcHJvZmlsZScgdG8gdGhlCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBsaW5lIGluIHlvdXIgbG9jYWwuY29uZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIEVYVFJBX0lNQUdFX0ZFQVRVUkVTID0gImRlYnVnLXR3ZWFrcyB0b29scy1wcm9maWxlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgJ3Rvb2xzLXByb2ZpbGUnIG1ldGhvZCwgeW91IGRvbid0IG5lZWQgdG8gYnVpbGQgYW4KKyAgICAgICAgICAgIHNkayBpbWFnZSAtIHRoZSB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbHMgd2lsbCBiZSBpbmNsdWRlZCBpbgorICAgICAgICAgICAgbm9uLXNkayBpbWFnZXMgYXMgd2VsbCBlLmcuOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8bm90ZT48cGFyYT4KKyAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgWW9jdG8gYnVpbGQgc3lzdGVtIHN0cmlwcyBzeW1ib2xzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgYmluYXJpZXMgaXQgcGFja2FnZXMsIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byB1c2Ugc29tZQorICAgICAgICAgICAgICAgIG9mIHRoZSB0b29scy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PHBhcmE+WW91IGNhbiBwcmV2ZW50IHRoYXQgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaW4geW91ciBsb2NhbC5jb25mIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIHNldHRpbmcgd2lsbCBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHlvdXIgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSd2ZSBhbHJlYWR5IGJ1aWx0IGEgc3RyaXBwZWQgaW1hZ2UsIHlvdSBjYW4gZ2VuZXJhdGUKKyAgICAgICAgICAgIGRlYnVnIHBhY2thZ2VzICh4eHgtZGJnKSB3aGljaCB5b3UgY2FuIG1hbnVhbGx5IGluc3RhbGwgYXMKKyAgICAgICAgICAgIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2VuZXJhdGUgZGVidWcgaW5mbyBmb3IgcGFja2FnZXMsIHlvdSBjYW4gYWRkIGRiZy1wa2dzIHRvCisgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFUyBpbiBsb2NhbC5jb25mLiBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSByaWdodCB0eXBlIG9mCisgICAgICAgICAgICBkZWJ1Z2luZm8sIHdlIGFsc28gbmVlZCB0byBhZGQgdGhlIGZvbGxvd2luZyB0byBsb2NhbC5jb25mOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFID0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcyBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtc3R5bGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2NhODUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4NCBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wcm9maWxlLXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDc0MHB4OworfQorCitoMy5hdXRob3IgeworICBtYXJnaW46IDBlbSAwbWUgMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGNvbG9yOiAjMzMzOworICBjbGVhcjogYm90aDsKK30KKworLmF1dGhvciB0dC5lbWFpbCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCisudGl0bGVwYWdlIGhyIHsKKyAgd2lkdGg6IDBlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5yZXZoaXN0b3J5IHsKKyAgcGFkZGluZy10b3A6IDJlbTsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy50b2MsCisubGlzdC1vZi10YWJsZXMsCisubGlzdC1vZi1leGFtcGxlcywKKy5saXN0LW9mLWZpZ3VyZXMgeworICBwYWRkaW5nOiAxLjMzZW0gMGVtIDIuNWVtIDBlbTsKKyAgY29sb3I6ICMwMDU1N0Q7Cit9CisKKy50b2MgcCwKKy5saXN0LW9mLXRhYmxlcyBwLAorLmxpc3Qtb2YtZmlndXJlcyBwLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwLjNlbTsKKyAgbWFyZ2luOiAxLjVlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBwIGIsCisubGlzdC1vZi10YWJsZXMgcCBiLAorLmxpc3Qtb2YtZmlndXJlcyBwIGIsCisubGlzdC1vZi1leGFtcGxlcyBwIGJ7CisgIGZvbnQtc2l6ZTogMTAwLjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLnRvYyBkbCwKKy5saXN0LW9mLXRhYmxlcyBkbCwKKy5saXN0LW9mLWZpZ3VyZXMgZGwsCisubGlzdC1vZi1leGFtcGxlcyBkbCB7CisgIG1hcmdpbjogMGVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkdCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZGQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDIuNmVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5nbG9zc2FyeSBkbCwKK2Rpdi52YXJpYWJsZWxpc3QgZGwgeworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBmb250LXdlaWdodDogbm9ybWFsOworICB3aWR0aDogMjBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAyNS41ZW07Cit9CisKKy5nbG9zc2FyeSBkZCBwLAorLnZhcmlhYmxlbGlzdCBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2LmNhbGxvdXRsaXN0IHRhYmxlIHRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworZGl2IHAuY29weXJpZ2h0IHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworZGl2LmxlZ2Fsbm90aWNlIHAubGVnYWxub3RpY2UtdGl0bGUgeworICBtYXJnaW4tYm90dG9tOiAwZW07Cit9CisKK3AgeworICBsaW5lLWhlaWdodDogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKworfQorCitkbCB7CisgIHBhZGRpbmctdG9wOiAwZW07Cit9CisKK2hyIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKKworLm1lZGlhb2JqZWN0LAorLm1lZGlhb2JqZWN0Y28geworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKK2ltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKwordWwgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAxLjVlbTsKK30KKwordWwgbGkgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK3VsIGxpIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCit0YWJsZSB7CisgIHdpZHRoIDoxMDAlOworfQorCit0aCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKwordGQgeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3AgYVtpZF0geworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworICBkaXNwbGF5OiBpbmxpbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7Cit9CisKK2EgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK3ByZSB7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgLypmb250LXdlaWdodDogYm9sZDsqLworfQorCisvKiBUaGlzIHN0eWxlIGRlZmluZXMgaG93IHRoZSBwZXJtYWxpbmsgY2hhcmFjdGVyCisgICBhcHBlYXJzIGJ5IGl0c2VsZiBhbmQgd2hlbiBob3ZlcmVkIG92ZXIgd2l0aAorICAgdGhlIG1vdXNlLiAqLworCitbYWx0PSdQZXJtYWxpbmsnXSB7IGNvbG9yOiAjZWVlOyB9CitbYWx0PSdQZXJtYWxpbmsnXTpob3ZlciB7IGNvbG9yOiBibGFjazsgfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSB7CisgIG1hcmdpbjogMWVtIDBlbTsKKyAgcGFkZGluZzogMWVtOworICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7Cit9CisKKworZGl2LmluZm9ybWFsZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsdGFibGUgcC50aXRsZSBiLAorZGl2LmZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYudGFibGUgcC50aXRsZSBieworICAgIHBhZGRpbmctdG9wOiAwZW07CisgICAgbWFyZ2luLXRvcDogMGVtOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisubWVkaWFvYmplY3QgLmNhcHRpb24sCisubWVkaWFvYmplY3QgLmNhcHRpb24gcCAgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nLXRvcDogMC41ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKK30KKworLmVwaWdyYXBoIHsKKyAgcGFkZGluZy1sZWZ0OiA1NSU7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworLmVwaWdyYXBoIHAgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuZXBpZ3JhcGggLnF1b3RlIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorLmVwaWdyYXBoIC5hdHRyaWJ1dGlvbiB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK3NwYW4uYXBwbGljYXRpb24geworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogODAlOworICB3aGl0ZS1zcGFjZTogcHJlOworICBtYXJnaW46IDEuMzNlbSAwZW07CisgIHBhZGRpbmc6IDEuMzNlbTsKK30KKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworCit9CisKKy8qIGZvcmNlIGZ1bGwgd2lkdGggb2YgdGFibGUgd2l0aGluIGRpdiAqLworLnRpcCB0YWJsZSwKKy53YXJuaW5nIHRhYmxlLAorLmNhdXRpb24gdGFibGUsCisubm90ZSB0YWJsZSB7CisgIGJvcmRlcjogbm9uZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIHBhZGRpbmc6IDAuOGVtIDAuMGVtIDAuMGVtIDAuMGVtOworICBtYXJnaW4gOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50aXAgcCwKKy53YXJuaW5nIHAsCisuY2F1dGlvbiBwLAorLm5vdGUgcCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgcGFkZGluZy1yaWdodDogMWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisuYWNyb255bSB7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIHBhZGRpbmc6IDAuMDllbSAwLjNlbTsKKyAgbWFyZ2luOiAwZW07Cit9CisKKy5pdGVtaXplZGxpc3QgbGkgeworICBjbGVhcjogbm9uZTsKK30KKworLmZpbGVuYW1lIHsKKyAgZm9udC1zaXplOiBtZWRpdW07CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMGVtOworICB0b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZGY7CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgcG9zaXRpb246IGZpeGVkOworICBsZWZ0OiAwZW07CisgIGJvdHRvbTogMGVtOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICB3aWR0aDogMTAwJTsKK30KKworCitkaXYubmF2aGVhZGVyIHRkLAorZGl2Lm5hdmZvb3RlciB0ZCB7CisgIGZvbnQtc2l6ZTogNjYlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRoIHsKKyAgLypmb250LWZhbWlseTogR2VvcmdpYSwgVGltZXMsIHNlcmlmOyovCisgIC8qZm9udC1zaXplOiB4LWxhcmdlOyovCisgIGZvbnQtc2l6ZTogODAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci10b3A6IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhIHsKKyAgY29sb3I6ICM3Nzc7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLyogbm9ybWFsIHRleHQgaW4gdGhlIGZvb3RlciAqLworZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCB7CisgIGNvbG9yOiBibGFjazsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOnZpc2l0ZWQsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6dmlzaXRlZCB7CisgIGNvbG9yOiAjNDQ0OworfQorCisKKy8qIGxpbmtzIGluIGhlYWRlciBhbmQgZm9vdGVyICovCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6aG92ZXIsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGNvbG9yOiAjMzNhOworfQorCitkaXYubmF2aGVhZGVyIGhyLAorZGl2Lm5hdmZvb3RlciBociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworLnFhbmRhc2V0IHRyLnF1ZXN0aW9uIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisucWFuZGFzZXQgdHIuYW5zd2VyIHRkIHAgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorLmFuc3dlciB0ZCB7CisgIHBhZGRpbmctYm90dG9tOiAxLjVlbTsKK30KKworLmVtcGhhc2lzIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKworICAvKioqKioqKioqKioqKiAvCisgLyBkZWNvcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqLworCisudGl0bGVwYWdlIHsKK30KKworLnBhcnQgLnRpdGxlIHsKK30KKworLnN1YnRpdGxlIHsKKyAgICBib3JkZXI6IG5vbmU7Cit9CisKKy8qCitoMSB7CisgIGJvcmRlcjogbm9uZTsKK30KKworaDIgeworICBib3JkZXItdG9wOiBzb2xpZCAwLjJlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoMyB7CisgIGJvcmRlci10b3A6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNCB7CisgIGJvcmRlcjogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g1IHsKKyAgYm9yZGVyOiAwZW07Cit9CisqLworCisucHJvZ3JhbWxpc3RpbmcgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKy5xdWVzdGlvbiB0ZCB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsKK30KKworLmFuc3dlciB7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmhlYWRlciwgZGl2LmhlYWRpbmd7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkOworfQorCisgIC8qKioqKioqKiogLworIC8gIGNvbG9ycyAgLworLyAqKioqKioqKiovCisKK2JvZHkgeworICBjb2xvcjogIzMzMzsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisKK2EgeworICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworYTpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNkZWRlZGU7Cit9CisKKworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDcsCitoOCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQorCitociB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworCisudGlwLCAud2FybmluZywgLmNhdXRpb24sIC5ub3RlIHsKKyAgYm9yZGVyLWNvbG9yOiAjZmZmOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOworfQorCisKKy53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisudGlwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLm5vdGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuZ2xvc3NhcnkgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCBzcGFuLnRlcm0geworICBjb2xvcjogIzA0NDsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCitwcmUucHJvZ3JhbWxpc3RpbmcgeworICBjb2xvcjogYmxhY2s7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKKyAgYm9yZGVyLXdpZHRoOiAycHg7Cit9CisKKy5ndWltZW51LAorLmd1aWxhYmVsLAorLmd1aW1lbnVpdGVtIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBib3JkZXItY29sb3I6ICM5OTk7Cit9CisKKworZGl2Lm5hdmhlYWRlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlci1jb2xvcjogYmxhY2s7Cit9CisKKworICAvKioqKioqKioqKiogLworIC8gIGdyYXBoaWNzICAvCisvICoqKioqKioqKioqLworCisvKgorYm9keSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2JvZHlfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5uYXZoZWFkZXIsCisubm90ZSwKKy50aXAgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ub3RlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisud2FybmluZywKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvd2FybmluZ19iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLmZpZ3VyZSwKKy5pbmZvcm1hbGZpZ3VyZSwKKy5leGFtcGxlLAorLmluZm9ybWFsZXhhbXBsZSwKKy50YWJsZSwKKy5pbmZvcm1hbHRhYmxlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvZmlndXJlX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisqLworaDEsCitoMiwKK2gzLAoraDQsCitoNSwKK2g2LAoraDd7Cit9CisKKy8qCitFeGFtcGxlIG9mIGhvdyB0byBzdGljayBhbiBpbWFnZSBhcyBwYXJ0IG9mIHRoZSB0aXRsZS4KKworZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3doaXRlLW9uLWJsYWNrLnBuZyIpOworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKyovCisKK2Rpdi5wcmVmYWNlIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmNvbG9waG9uIC50aXRsZSwKK2Rpdi5jaGFwdGVyIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LmFydGljbGUgLnRpdGxlcGFnZSAudGl0bGUKK3sKK30KKworZGl2LnNlY3Rpb24gZGl2LnNlY3Rpb24gLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuc2VjdDIgLnRpdGxlcGFnZSAudGl0bGUgeworICAgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKworaDEudGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgaGVpZ2h0OiAyNTZweDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKK30KKworaDIuc3VidGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgdGV4dC1pbmRlbnQ6IC05MDAwcHg7CisgIG92ZXJmbG93OmhpZGRlbjsKKyAgd2lkdGg6IDBweDsKKyAgZGlzcGxheTogbm9uZTsKK30KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvICBwaXBwaW4uZ2ltcC5vcmcgc3BlY2lmaWMgYWx0ZXJhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICBjb2xvcjogIzc3NzsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogMDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDBweDsKKyAgbGVmdDogMHB4OworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiA1MHB4OworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvaGVhZGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworICBib3JkZXI6IG5vbmU7Cit9CisKK2Rpdi5oZWFkaW5nIGEgeworICBjb2xvcjogIzQ0NDsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjZGRkOworICBmb250LXNpemU6IDgwJTsKKyAgdGV4dC1hbGlnbjpyaWdodDsKKworICB3aWR0aDogMTAwJTsKKyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAwcHg7CisgIGxlZnQ6IDBweDsKKworICBiYWNrZ3JvdW5kOiB1cmwoJy9nZngvZm9vdGluZ19iZy5wbmcnKSB0cmFuc3BhcmVudDsKK30KKyovCisKKworCisgIC8qKioqKioqKioqKioqKioqKiogLworIC8gIG5hc3R5IGllIHR3ZWFrcyAgLworLyAqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIHdpZHRoOmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCArICJweCIpOworICBtYXJnaW4tbGVmdDpleHByZXNzaW9uKCItNWVtIik7Cit9Citib2R5IHsKKyAgcGFkZGluZzpleHByZXNzaW9uKCI0ZW0gNWVtIDBlbSA1ZW0iKTsKK30KKyovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gbW96aWxsYSB2ZW5kb3Igc3BlY2lmaWMgY3NzIGV4dGVuc2lvbnMgIC8KKy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitkaXYubmF2Zm9vdGVyLCBkaXYuZm9vdGluZ3sKKyAgLW1vei1vcGFjaXR5OiAwLjhlbTsKK30KKworZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5leGFtcGxlLAorLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC41ZW07Cit9CisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMC4zZW07Cit9CisqLworCit0YWJsZSB0ciB0ZCB0YWJsZSB0ciB0ZCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKworaHIgeworICBkaXNwbGF5OiBub25lOworfQorCit0YWJsZSB7CisgIGJvcmRlcjogMGVtOworfQorCisgLnBob3RvIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogICAxLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMS41ZW07CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWF4LXdpZHRoOiAgICAgIDE3ZW07CisgIGJvcmRlcjogICAgIDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiAgICAzcHg7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorIC5zZXBlcmF0b3IgeworICAgcGFkZGluZy10b3A6IDJlbTsKKyAgIGNsZWFyOiBib3RoOworICB9CisKKyAgI3ZhbGlkYXRvcnMgeworICAgICAgbWFyZ2luLXRvcDogNWVtOworICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICBjb2xvcjogIzc3NzsKKyAgfQorICBAbWVkaWEgcHJpbnQgeworICAgICAgYm9keSB7CisgICAgICAgICAgZm9udC1zaXplOiA4cHQ7CisgICAgICB9CisgICAgICAubm9wcmludCB7CisgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgIH0KKyAgfQorCisKKy50aXAsCisubm90ZSB7CisgICBiYWNrZ3JvdW5kOiAjZjBmMGYyOworICAgY29sb3I6ICMzMzM7CisgICBwYWRkaW5nOiAyMHB4OworICAgbWFyZ2luOiAyMHB4OworfQorCisudGlwIGgzLAorLm5vdGUgaDMgeworICAgcGFkZGluZzogMGVtOworICAgbWFyZ2luOiAwZW07CisgICBmb250LXNpemU6IDJlbTsKKyAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgY29sb3I6ICMzMzM7Cit9CisKKy50aXAgYSwKKy5ub3RlIGEgeworICAgY29sb3I6ICMzMzM7CisgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmZvb3Rub3RlIHsKKyAgIGZvbnQtc2l6ZTogc21hbGw7CisgICBjb2xvcjogIzMzMzsKK30KKworLyogQ2hhbmdlcyB0aGUgYW5ub3VuY2VtZW50IHRleHQgKi8KKy50aXAgaDMsCisud2FybmluZyBoMywKKy5jYXV0aW9uIGgzLAorLm5vdGUgaDMgeworICAgZm9udC1zaXplOmxhcmdlOworICAgY29sb3I6ICMwMDU1N0Q7Cit9CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbCBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwtdXNhZ2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YWQ3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLXVzYWdlLnhtbApAQCAtMCwwICsxLDM2OTUgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdwcm9maWxlLW1hbnVhbC11c2FnZSc+CisKKzx0aXRsZT5CYXNpYyBVc2FnZSAod2l0aCBleGFtcGxlcykgZm9yIGVhY2ggb2YgdGhlIFlvY3RvIFRyYWNpbmcgVG9vbHM8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgcHJlc2VudHMgYmFzaWMgdXNhZ2UgZXhhbXBsZXMgZm9yIGVhY2ggb2YgdGhlIHRyYWNpbmcKKyAgICB0b29scy4KKzwvcGFyYT4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXBlcmYnPgorICAgIDx0aXRsZT5wZXJmPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgJ3BlcmYnIHRvb2wgaXMgdGhlIHByb2ZpbGluZyBhbmQgdHJhY2luZyB0b29sIHRoYXQgY29tZXMKKyAgICAgICAgYnVuZGxlZCB3aXRoIHRoZSBMaW51eCBrZXJuZWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIERvbid0IGxldCB0aGUgZmFjdCB0aGF0IGl0J3MgcGFydCBvZiB0aGUga2VybmVsIGZvb2wgeW91IGludG8gdGhpbmtpbmcKKyAgICAgICAgdGhhdCBpdCdzIG9ubHkgZm9yIHRyYWNpbmcgYW5kIHByb2ZpbGluZyB0aGUga2VybmVsIC0geW91IGNhbiBpbmRlZWQKKyAgICAgICAgdXNlIGl0IHRvIHRyYWNlIGFuZCBwcm9maWxlIGp1c3QgdGhlIGtlcm5lbCwgYnV0IHlvdSBjYW4gYWxzbyB1c2UgaXQKKyAgICAgICAgdG8gcHJvZmlsZSBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgc2VwYXJhdGVseSAod2l0aCBvciB3aXRob3V0IGtlcm5lbAorICAgICAgICBjb250ZXh0KSwgYW5kIHlvdSBjYW4gYWxzbyB1c2UgaXQgdG8gdHJhY2UgYW5kIHByb2ZpbGUgdGhlIGtlcm5lbAorICAgICAgICBhbmQgYWxsIGFwcGxpY2F0aW9ucyBvbiB0aGUgc3lzdGVtIHNpbXVsdGFuZW91c2x5IHRvIGdhaW4gYSBzeXN0ZW0td2lkZQorICAgICAgICB2aWV3IG9mIHdoYXQncyBnb2luZyBvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gbWFueSB3YXlzLCBwZXJmIGFpbXMgdG8gYmUgYSBzdXBlcnNldCBvZiBhbGwgdGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZworICAgICAgICB0b29scyBhdmFpbGFibGUgaW4gTGludXggdG9kYXksIGluY2x1ZGluZyBhbGwgdGhlIG90aGVyIHRvb2xzIGNvdmVyZWQKKyAgICAgICAgaW4gdGhpcyBIT1dUTy4gVGhlIHBhc3QgY291cGxlIG9mIHllYXJzIGhhdmUgc2VlbiBwZXJmIHN1YnN1bWUgYSBsb3QKKyAgICAgICAgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2Ugb3RoZXIgdG9vbHMgYW5kLCBhdCB0aGUgc2FtZSB0aW1lLCB0aG9zZQorICAgICAgICBvdGhlciB0b29scyBoYXZlIHJlbW92ZWQgbGFyZ2UgcG9ydGlvbnMgb2YgdGhlaXIgcHJldmlvdXMgZnVuY3Rpb25hbGl0eQorICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBjYWxscyB0byB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IG5vdworICAgICAgICBpbXBsZW1lbnRlZCBieSB0aGUgcGVyZiBzdWJzeXN0ZW0uIEV4dHJhcG9sYXRpb24gc3VnZ2VzdHMgdGhhdCBhdAorICAgICAgICBzb21lIHBvaW50IHRob3NlIG90aGVyIHRvb2xzIHdpbGwgc2ltcGx5IGJlY29tZSBjb21wbGV0ZWx5IHJlZHVuZGFudAorICAgICAgICBhbmQgZ28gYXdheTsgdW50aWwgdGhlbiwgd2UnbGwgY292ZXIgdGhvc2Ugb3RoZXIgdG9vbHMgaW4gdGhlc2UgcGFnZXMKKyAgICAgICAgYW5kIGluIG1hbnkgY2FzZXMgc2hvdyBob3cgdGhlIHNhbWUgdGhpbmdzIGNhbiBiZSBhY2NvbXBsaXNoZWQgaW4KKyAgICAgICAgcGVyZiBhbmQgdGhlIG90aGVyIHRvb2xzIHdoZW4gaXQgc2VlbXMgdXNlZnVsIHRvIGRvIHNvLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY292ZXJhZ2UgYmVsb3cgZGV0YWlscyBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiB3YXlzIHlvdSdsbCBsaWtlbHkKKyAgICAgICAgd2FudCB0byBhcHBseSB0aGUgdG9vbDsgZnVsbCBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBlaXRoZXIgd2l0aGluCisgICAgICAgIHRoZSB0b29sIGl0c2VsZiBvciBpbiB0aGUgbWFuIHBhZ2VzIGF0CisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYnPnBlcmYoMSk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncGVyZi1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBiYXNpYworICAgICAgICAgICAgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgeW91J2xsIGdldCB0aGUgbW9zdCBtaWxlYWdlIG91dCBvZiBwZXJmIGlmIHlvdQorICAgICAgICAgICAgcHJvZmlsZSBhbiBpbWFnZSBidWlsdCB3aXRoIElOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIiBpbiB5b3VyCisgICAgICAgICAgICBsb2NhbC5jb25mLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBwZXJmIHJ1bnMgb24gdGhlIHRhcmdldCBzeXN0ZW0gZm9yIHRoZSBtb3N0IHBhcnQuIFlvdSBjYW4gYXJjaGl2ZQorICAgICAgICAgICAgcHJvZmlsZSBkYXRhIGFuZCBjb3B5IGl0IHRvIHRoZSBob3N0IGZvciBhbmFseXNpcywgYnV0IGZvciB0aGUKKyAgICAgICAgICAgIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQKKyAgICAgICAgICAgIHdpbGwgYmUgcnVubmluZyB0aGUgcGVyZiBjb21tYW5kcyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHBlcmYgdG9vbCBpcyBwcmV0dHkgbXVjaCBzZWxmLWRvY3VtZW50aW5nLiBUbyByZW1pbmQgeW91cnNlbGYKKyAgICAgICAgICAgIG9mIHRoZSBhdmFpbGFibGUgY29tbWFuZHMsIHNpbXBseSB0eXBlICdwZXJmJywgd2hpY2ggd2lsbCBzaG93IHlvdQorICAgICAgICAgICAgYmFzaWMgdXNhZ2UgYWxvbmcgd2l0aCB0aGUgYXZhaWxhYmxlIHBlcmYgc3ViY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZgorCisgICAgIHVzYWdlOiBwZXJmIFstLXZlcnNpb25dIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdCisKKyAgICAgVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBwZXJmIGNvbW1hbmRzIGFyZToKKyAgICAgICBhbm5vdGF0ZSAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IGFubm90YXRlZCBjb2RlCisgICAgICAgYXJjaGl2ZSAgICAgICAgIENyZWF0ZSBhcmNoaXZlIHdpdGggb2JqZWN0IGZpbGVzIHdpdGggYnVpbGQtaWRzIGZvdW5kIGluIHBlcmYuZGF0YSBmaWxlCisgICAgICAgYmVuY2ggICAgICAgICAgIEdlbmVyYWwgZnJhbWV3b3JrIGZvciBiZW5jaG1hcmsgc3VpdGVzCisgICAgICAgYnVpbGRpZC1jYWNoZSAgIE1hbmFnZSBidWlsZC1pZCBjYWNoZS4KKyAgICAgICBidWlsZGlkLWxpc3QgICAgTGlzdCB0aGUgYnVpbGRpZHMgaW4gYSBwZXJmLmRhdGEgZmlsZQorICAgICAgIGRpZmYgICAgICAgICAgICBSZWFkIHR3byBwZXJmLmRhdGEgZmlsZXMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVudGlhbCBwcm9maWxlCisgICAgICAgZXZsaXN0ICAgICAgICAgIExpc3QgdGhlIGV2ZW50IG5hbWVzIGluIGEgcGVyZi5kYXRhIGZpbGUKKyAgICAgICBpbmplY3QgICAgICAgICAgRmlsdGVyIHRvIGF1Z21lbnQgdGhlIGV2ZW50cyBzdHJlYW0gd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgICAga21lbSAgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBrZXJuZWwgbWVtb3J5KHNsYWIpIHByb3BlcnRpZXMKKyAgICAgICBrdm0gICAgICAgICAgICAgVG9vbCB0byB0cmFjZS9tZWFzdXJlIGt2bSBndWVzdCBvcworICAgICAgIGxpc3QgICAgICAgICAgICBMaXN0IGFsbCBzeW1ib2xpYyBldmVudCB0eXBlcworICAgICAgIGxvY2sgICAgICAgICAgICBBbmFseXplIGxvY2sgZXZlbnRzCisgICAgICAgcHJvYmUgICAgICAgICAgIERlZmluZSBuZXcgZHluYW1pYyB0cmFjZXBvaW50cworICAgICAgIHJlY29yZCAgICAgICAgICBSdW4gYSBjb21tYW5kIGFuZCByZWNvcmQgaXRzIHByb2ZpbGUgaW50byBwZXJmLmRhdGEKKyAgICAgICByZXBvcnQgICAgICAgICAgUmVhZCBwZXJmLmRhdGEgKGNyZWF0ZWQgYnkgcGVyZiByZWNvcmQpIGFuZCBkaXNwbGF5IHRoZSBwcm9maWxlCisgICAgICAgc2NoZWQgICAgICAgICAgIFRvb2wgdG8gdHJhY2UvbWVhc3VyZSBzY2hlZHVsZXIgcHJvcGVydGllcyAobGF0ZW5jaWVzKQorICAgICAgIHNjcmlwdCAgICAgICAgICBSZWFkIHBlcmYuZGF0YSAoY3JlYXRlZCBieSBwZXJmIHJlY29yZCkgYW5kIGRpc3BsYXkgdHJhY2Ugb3V0cHV0CisgICAgICAgc3RhdCAgICAgICAgICAgIFJ1biBhIGNvbW1hbmQgYW5kIGdhdGhlciBwZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRpc3RpY3MKKyAgICAgICB0ZXN0ICAgICAgICAgICAgUnVucyBzYW5pdHkgdGVzdHMuCisgICAgICAgdGltZWNoYXJ0ICAgICAgIFRvb2wgdG8gdmlzdWFsaXplIHRvdGFsIHN5c3RlbSBiZWhhdmlvciBkdXJpbmcgYSB3b3JrbG9hZAorICAgICAgIHRvcCAgICAgICAgICAgICBTeXN0ZW0gcHJvZmlsaW5nIHRvb2wuCisKKyAgICAgU2VlICdwZXJmIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBwZXJmIHRvIGRvIEJhc2ljIFByb2ZpbGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgc2ltcGxlIHRlc3QgY2FzZSwgd2UnbGwgcHJvZmlsZSB0aGUgJ3dnZXQnIG9mIGEgZmFpcmx5IGxhcmdlCisgICAgICAgICAgICAgICAgZmlsZSwgd2hpY2ggaXMgYSBtaW5pbWFsbHkgaW50ZXJlc3RpbmcgY2FzZSBiZWNhdXNlIGl0IGhhcyBib3RoCisgICAgICAgICAgICAgICAgZmlsZSBhbmQgbmV0d29yayBJL08gYXNwZWN0cywgYW5kIGF0IGxlYXN0IGluIHRoZSBjYXNlIG9mIHN0YW5kYXJkCisgICAgICAgICAgICAgICAgWW9jdG8gaW1hZ2VzLCBpdCdzIGltcGxlbWVudGVkIGFzIHBhcnQgb2YgYnVzeWJveCwgc28gdGhlIG1ldGhvZHMKKyAgICAgICAgICAgICAgICB3ZSB1c2UgdG8gYW5hbHl6ZSBpdCBjYW4gYmUgdXNlZCBpbiBhIHZlcnkgc2ltaWxhciB3YXkgdG8gdGhlIHdob2xlCisgICAgICAgICAgICAgICAgaG9zdCBvZiBzdXBwb3J0ZWQgYnVzeWJveCBhcHBsZXRzIGluIFlvY3RvLgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyBcCisgICAgIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIHF1aWNrZXN0IGFuZCBlYXNpZXN0IHdheSB0byBnZXQgc29tZSBiYXNpYyBvdmVyYWxsIGRhdGEgYWJvdXQKKyAgICAgICAgICAgICAgICB3aGF0J3MgZ29pbmcgb24gZm9yIGEgcGFydGljdWxhciB3b3JrbG9hZCBpcyB0byBwcm9maWxlIGl0IHVzaW5nCisgICAgICAgICAgICAgICAgJ3BlcmYgc3RhdCcuICdwZXJmIHN0YXQnIGJhc2ljYWxseSBwcm9maWxlcyB1c2luZyBhIGZldyBkZWZhdWx0CisgICAgICAgICAgICAgICAgY291bnRlcnMgYW5kIGRpc3BsYXlzIHRoZSBzdW1tZWQgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzdGF0IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorCisgICAgIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICd3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+JzoKKworICAgICAgICAgICA0NTk3LjIyMzkwMiB0YXNrLWNsb2NrICAgICAgICAgICAgICAgICMgICAgMC4wNzcgQ1BVcyB1dGlsaXplZAorICAgICAgICAgICAgICAgICAyMzU2OCBjb250ZXh0LXN3aXRjaGVzICAgICAgICAgICMgICAgMC4wMDUgTS9zZWMKKyAgICAgICAgICAgICAgICAgICAgNjggQ1BVLW1pZ3JhdGlvbnMgICAgICAgICAgICAjICAgIDAuMDE1IEsvc2VjCisgICAgICAgICAgICAgICAgICAgMjQxIHBhZ2UtZmF1bHRzICAgICAgICAgICAgICAgIyAgICAwLjA1MiBLL3NlYworICAgICAgICAgICAgMzA0NTgxNzI5MyBjeWNsZXMgICAgICAgICAgICAgICAgICAgICMgICAgMC42NjMgR0h6CisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kCisgICAgICAgJmx0O25vdCBzdXBwb3J0ZWQmZ3Q7IHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQKKyAgICAgICAgICAgICA4NTg5MDkxNjcgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAjICAgIDAuMjggIGluc25zIHBlciBjeWNsZQorICAgICAgICAgICAgIDE2NTQ0MTE2NSBicmFuY2hlcyAgICAgICAgICAgICAgICAgICMgICAzNS45ODcgTS9zZWMKKyAgICAgICAgICAgICAgMTk1NTAzMjkgYnJhbmNoLW1pc3NlcyAgICAgICAgICAgICAjICAgMTEuODIlIG9mIGFsbCBicmFuY2hlcworCisgICAgICAgICAgNTkuODM2NjI3NjIwIHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE1hbnkgdGltZXMgc3VjaCBhIHNpbXBsZS1taW5kZWQgdGVzdCBkb2Vzbid0IHlpZWxkIG11Y2ggb2YKKyAgICAgICAgICAgICAgICBpbnRlcmVzdCwgYnV0IHNvbWV0aW1lcyBpdCBkb2VzIChzZWUgUmVhbC13b3JsZCBZb2N0byBidWcKKyAgICAgICAgICAgICAgICAoc2xvdyBsb29wLW1vdW50ZWQgd3JpdGUgc3BlZWQpKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxzbywgbm90ZSB0aGF0ICdwZXJmIHN0YXQnIGlzbid0IHJlc3RyaWN0ZWQgdG8gYSBmaXhlZCBzZXQgb2YKKyAgICAgICAgICAgICAgICBjb3VudGVycyAtIGJhc2ljYWxseSBhbnkgZXZlbnQgbGlzdGVkIGluIHRoZSBvdXRwdXQgb2YgJ3BlcmYgbGlzdCcKKyAgICAgICAgICAgICAgICBjYW4gYmUgdGFsbGllZCBieSAncGVyZiBzdGF0Jy4gRm9yIGV4YW1wbGUsIHN1cHBvc2Ugd2Ugd2FudGVkIHRvCisgICAgICAgICAgICAgICAgc2VlIGEgc3VtbWFyeSBvZiBhbGwgdGhlIGV2ZW50cyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uL2ZyZWVpbmcgYWxvbmcgd2l0aCBjYWNoZSBoaXRzIGFuZCBtaXNzZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBrbWVtOiogLWUgY2FjaGUtcmVmZXJlbmNlcyAtZSBjYWNoZS1taXNzZXMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisKKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgICA1NTY2IGttZW06a21hbGxvYworICAgICAgICAgICAgICAgIDEyNTUxNyBrbWVtOmttZW1fY2FjaGVfYWxsb2MKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWFsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTprbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgICAgICAgICAgICAgMzQ0MDEga21lbTprZnJlZQorICAgICAgICAgICAgICAgICA2OTkyMCBrbWVtOmttZW1fY2FjaGVfZnJlZQorICAgICAgICAgICAgICAgICAgIDEzMyBrbWVtOm1tX3BhZ2VfZnJlZQorICAgICAgICAgICAgICAgICAgICA0MSBrbWVtOm1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgICAgICAgICAgICAgIDExNTAyIGttZW06bW1fcGFnZV9hbGxvYworICAgICAgICAgICAgICAgICAxMTM3NSBrbWVtOm1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX3BjcHVfZHJhaW4KKyAgICAgICAgICAgICAgICAgICAgIDAga21lbTptbV9wYWdlX2FsbG9jX2V4dGZyYWcKKyAgICAgICAgICAgICAgNjY4NDg2MDIgY2FjaGUtcmVmZXJlbmNlcworICAgICAgICAgICAgICAgMjkxNzc0MCBjYWNoZS1taXNzZXMgICAgICAgICAgICAgICMgICAgNC4zNjUgJSBvZiBhbGwgY2FjaGUgcmVmcworCisgICAgICAgICAgNDQuODMxMDIzNDE1IHNlY29uZHMgdGltZSBlbGFwc2VkCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFNvICdwZXJmIHN0YXQnIGdpdmVzIHVzIGEgbmljZSBlYXN5IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZgorICAgICAgICAgICAgICAgIHdoYXQgbWlnaHQgYmUgaGFwcGVuaW5nIGZvciBhIHNldCBvZiBldmVudHMsIGJ1dCBub3JtYWxseSB3ZSdkCisgICAgICAgICAgICAgICAgbmVlZCBhIGxpdHRsZSBtb3JlIGRldGFpbCBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbgorICAgICAgICAgICAgICAgIGluIGEgd2F5IHRoYXQgd2UgY2FuIGFjdCBvbiBpbiBhIHVzZWZ1bCB3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGRpdmUgZG93biBpbnRvIGEgbmV4dCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiB1c2UgJ3BlcmYKKyAgICAgICAgICAgICAgICByZWNvcmQnLydwZXJmIHJlcG9ydCcgd2hpY2ggd2lsbCBjb2xsZWN0IHByb2ZpbGluZyBkYXRhIGFuZAorICAgICAgICAgICAgICAgIHByZXNlbnQgaXQgdG8gdXNlIHVzaW5nIGFuIGludGVyYWN0aXZlIHRleHQtYmFzZWQgVUkgKG9yCisgICAgICAgICAgICAgICAgc2ltcGx5IGFzIHRleHQgaWYgd2Ugc3BlY2lmeSAtLXN0ZGlvIHRvICdwZXJmIHJlcG9ydCcpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBvdXIgZmlyc3QgYXR0ZW1wdCBhdCBwcm9maWxpbmcgdGhpcyB3b3JrbG9hZCwgd2UnbGwgc2ltcGx5CisgICAgICAgICAgICAgICAgcnVuICdwZXJmIHJlY29yZCcsIGhhbmRpbmcgaXQgdGhlIHdvcmtsb2FkIHdlIHdhbnQgdG8gcHJvZmlsZQorICAgICAgICAgICAgICAgIChldmVyeXRoaW5nIGFmdGVyICdwZXJmIHJlY29yZCcgYW5kIGFueSBwZXJmIG9wdGlvbnMgd2UgaGFuZAorICAgICAgICAgICAgICAgIGl0IC0gaGVyZSBub25lIC0gd2lsbCBiZSBleGVjdXRlZCBpbiBhIG5ldyBzaGVsbCkuIHBlcmYgY29sbGVjdHMKKyAgICAgICAgICAgICAgICBzYW1wbGVzIHVudGlsIHRoZSBwcm9jZXNzIGV4aXRzIGFuZCByZWNvcmRzIHRoZW0gaW4gYSBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgJ3BlcmYuZGF0YScgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgIFsgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDEgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAwLjE3NiBNQiBwZXJmLmRhdGEgKH43NzAwIHNhbXBsZXMpIF0KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHNlZSB0aGUgcmVzdWx0cyBpbiBhICd0ZXh0LWJhc2VkIFVJJyAodHVpKSwgc2ltcGx5IHJ1bgorICAgICAgICAgICAgJ3BlcmYgcmVwb3J0Jywgd2hpY2ggd2lsbCByZWFkIHRoZSBwZXJmLmRhdGEgZmlsZSBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgd29ya2luZyBkaXJlY3RvcnkgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdHMgaW4gYW4gaW50ZXJhY3RpdmUgVUk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVwb3J0CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWZsYXQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGFib3ZlIHNjcmVlbnNob3QgZGlzcGxheXMgYSAnZmxhdCcgcHJvZmlsZSwgb25lIGVudHJ5IGZvcgorICAgICAgICAgICAgICAgIGVhY2ggJ2J1Y2tldCcgY29ycmVzcG9uZGluZyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBwcm9maWxlZAorICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgcHJvZmlsaW5nIHJ1biwgb3JkZXJlZCBmcm9tIHRoZSBtb3N0IHBvcHVsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgbGVhc3QgKHBlcmYgaGFzIG9wdGlvbnMgdG8gc29ydCBpbiB2YXJpb3VzIG9yZGVycyBhbmQga2V5cyBhcworICAgICAgICAgICAgICAgIHdlbGwgYXMgZGlzcGxheSBlbnRyaWVzIG9ubHkgYWJvdmUgYSBjZXJ0YWluIHRocmVzaG9sZCBhbmQgc28KKyAgICAgICAgICAgICAgICBvbiAtIHNlZSB0aGUgcGVyZiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICBpbmNsdWRlcyBib3RoIHVzZXJzcGFjZSBmdW5jdGlvbnMgKGVudHJpZXMgY29udGFpbmluZyBhIFsuXSkgYW5kCisgICAgICAgICAgICAgICAga2VybmVsIGZ1bmN0aW9ucyBhY2NvdW50ZWQgdG8gdGhlIHByb2Nlc3MgKGVudHJpZXMgY29udGFpbmluZworICAgICAgICAgICAgICAgIGEgW2tdKS4gKHBlcmYgaGFzIGNvbW1hbmQtbGluZSBtb2RpZmllcnMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHJlc3RyaWN0IHRoZSBwcm9maWxpbmcgdG8ga2VybmVsIG9yIHVzZXJzcGFjZSwgYW1vbmcgb3RoZXJzKS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIGFsc28gdGhhdCB0aGUgYWJvdmUgcmVwb3J0IHNob3dzIGFuIGVudHJ5IGZvciAnYnVzeWJveCcsCisgICAgICAgICAgICAgICAgd2hpY2ggaXMgdGhlIGV4ZWN1dGFibGUgdGhhdCBpbXBsZW1lbnRzICd3Z2V0JyBpbiBZb2N0bywgYnV0IHRoYXQKKyAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIGEgdXNlZnVsIGZ1bmN0aW9uIG5hbWUgaW4gdGhhdCBlbnRyeSwgaXQgZGlzcGxheXMKKyAgICAgICAgICAgICAgICBhIG5vdC1zby1mcmllbmRseSBoZXggdmFsdWUgaW5zdGVhZC4gVGhlIHN0ZXBzIGJlbG93IHdpbGwgc2hvdworICAgICAgICAgICAgICAgIGhvdyB0byBmaXggdGhhdCBwcm9ibGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgd2UgZG8gdGhhdCwgaG93ZXZlciwgbGV0J3MgdHJ5IHJ1bm5pbmcgYSBkaWZmZXJlbnQgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICBvbmUgd2hpY2ggc2hvd3Mgc29tZXRoaW5nIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcuIFRoZSBvbmx5CisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBuZXcgcHJvZmlsZSBhbmQgdGhlIHByZXZpb3VzIG9uZSBpcyB0aGF0CisgICAgICAgICAgICAgICAgd2UnbGwgYWRkIHRoZSAtZyBvcHRpb24sIHdoaWNoIHdpbGwgcmVjb3JkIG5vdCBqdXN0IHRoZSBhZGRyZXNzCisgICAgICAgICAgICAgICAgb2YgYSBzYW1wbGVkIGZ1bmN0aW9uLCBidXQgdGhlIGVudGlyZSBjYWxsY2hhaW4gdG8gdGhlIHNhbXBsZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcyB3ZWxsOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMyB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuNjUyIE1CIHBlcmYuZGF0YSAofjI4NDc2IHNhbXBsZXMpIF0KKworCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZXBvcnQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LXRvLXVzZXItZXhwYW5kZWQtc3RyaXBwZWQucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVXNpbmcgdGhlIGNhbGxncmFwaCB2aWV3LCB3ZSBjYW4gYWN0dWFsbHkgc2VlIG5vdCBvbmx5IHdoaWNoCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zIHRvb2sgdGhlIG1vc3QgdGltZSwgYnV0IHdlIGNhbiBhbHNvIHNlZSBhIHN1bW1hcnkgb2YKKyAgICAgICAgICAgICAgICBob3cgdGhvc2UgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGFuZCBsZWFybiBzb21ldGhpbmcgYWJvdXQgaG93IHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgZWFjaCBlbnRyeSBpbiB0aGUgYWJvdmUgc2NyZWVuc2hvdCBub3cgY29udGFpbnMgYSAnKycKKyAgICAgICAgICAgICAgICBvbiB0aGUgbGVmdC1oYW5kIHNpZGUuIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gZXhwYW5kIHRoZSBlbnRyeSBhbmQKKyAgICAgICAgICAgICAgICBkcmlsbCBkb3duIGludG8gdGhlIGNhbGxjaGFpbnMgdGhhdCBmZWVkIGludG8gdGhhdCBlbnRyeS4KKyAgICAgICAgICAgICAgICBQcmVzc2luZyAnZW50ZXInIG9uIGFueSBvbmUgb2YgdGhlbSB3aWxsIGV4cGFuZCB0aGUgY2FsbGNoYWluCisgICAgICAgICAgICAgICAgKHlvdSBjYW4gYWxzbyBwcmVzcyAnRScgdG8gZXhwYW5kIHRoZW0gYWxsIGF0IHRoZSBzYW1lIHRpbWUgb3IgJ0MnCisgICAgICAgICAgICAgICAgdG8gY29sbGFwc2UgdGhlbSBhbGwpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UndmUgdG9nZ2xlZCB0aGUgX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgICAgIGVudHJ5IGFuZCBzZXZlcmFsIHN1Ym5vZGVzIGFsbCB0aGUgd2F5IGRvd24uIFRoaXMgbGV0cyB1cyBzZWUKKyAgICAgICAgICAgICAgICB3aGljaCBjYWxsY2hhaW5zIGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9maWxlZCBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2hpY2ggY29udHJpYnV0ZWQgMS43NyUgdG8gdGhlIHRvdGFsIHByb2ZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGEgYml0IG9mIGJhY2tncm91bmQgZXhwbGFuYXRpb24gZm9yIHRoZXNlIGNhbGxjaGFpbnMsIHRoaW5rCisgICAgICAgICAgICAgICAgYWJvdXQgd2hhdCBoYXBwZW5zIGF0IGEgaGlnaCBsZXZlbCB3aGVuIHlvdSBydW4gd2dldCB0byBnZXQgYSBmaWxlCisgICAgICAgICAgICAgICAgb3V0IG9uIHRoZSBuZXR3b3JrLiBCYXNpY2FsbHkgd2hhdCBoYXBwZW5zIGlzIHRoYXQgdGhlIGRhdGEgY29tZXMKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBrZXJuZWwgdmlhIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gKHNvY2tldCkgYW5kIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgIHRvIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSAnd2dldCcgKHdoaWNoIGlzIGFjdHVhbGx5IGEgcGFydCBvZgorICAgICAgICAgICAgICAgIGJ1c3lib3gsIGJ1dCB0aGF0J3Mgbm90IGltcG9ydGFudCBmb3Igbm93KSwgd2hpY2ggdGFrZXMgdGhlIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICB0aGUga2VybmVsIHBhc3NlcyB0byBpdCBhbmQgd3JpdGVzIGl0IHRvIGEgZGlzayBmaWxlIHRvIHNhdmUgaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBwYXJ0IG9mIHRoaXMgcHJvY2VzcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgaW4gdGhlIGFib3ZlIGNhbGwKKyAgICAgICAgICAgICAgICBzdGFja3MgaXMgdGhlIHBhcnQgd2hlcmUgdGhlIGtlcm5lbCBwYXNzZXMgdGhlIGRhdGEgaXQncyByZWFkIGZyb20KKyAgICAgICAgICAgICAgICB0aGUgc29ja2V0IGRvd24gdG8gd2dldCBpLmUuIGEgY29weS10by11c2VyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RpY2UgYWxzbyB0aGF0IGhlcmUgdGhlcmUncyBhbHNvIGEgY2FzZSB3aGVyZSB0aGUgaGV4IHZhbHVlCisgICAgICAgICAgICAgICAgaXMgZGlzcGxheWVkIGluIHRoZSBjYWxsc3RhY2ssIGhlcmUgaW4gdGhlIGV4cGFuZGVkCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBmdW5jdGlvbi4gTGF0ZXIgd2UnbGwgc2VlIGl0IHJlc29sdmUgdG8gYQorICAgICAgICAgICAgICAgIHVzZXJzcGFjZSBmdW5jdGlvbiBjYWxsIGluIGJ1c3lib3guCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtZy1jb3B5LWZyb20tdXNlci1leHBhbmRlZC1zdHJpcHBlZC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYWJvdmUgc2NyZWVuc2hvdCBzaG93cyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgam91cm5leSBmb3IgdGhlCisgICAgICAgICAgICAgICAgZGF0YSAtIGZyb20gdGhlIHdnZXQgcHJvZ3JhbSdzIHVzZXJzcGFjZSBidWZmZXJzIHRvIGRpc2suIFRvIGdldAorICAgICAgICAgICAgICAgIHRoZSBidWZmZXJzIHRvIGRpc2ssIHRoZSB3Z2V0IHByb2dyYW0gaXNzdWVzIGEgd3JpdGUoMiksIHdoaWNoCisgICAgICAgICAgICAgICAgZG9lcyBhIGNvcHktZnJvbS11c2VyIHRvIHRoZSBrZXJuZWwsIHdoaWNoIHRoZW4gdGFrZXMgY2FyZSB2aWEKKyAgICAgICAgICAgICAgICBzb21lIGNpcmN1aXRvdXMgcGF0aCAocHJvYmFibHkgYWxzbyBwcmVzZW50IHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICBwcm9maWxlIGRhdGEpLCB0byBnZXQgaXQgc2FmZWx5IHRvIGRpc2suCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdyB0aGF0IHdlJ3ZlIHNlZW4gdGhlIGJhc2ljIGxheW91dCBvZiB0aGUgcHJvZmlsZSBkYXRhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBiYXNpY3Mgb2YgaG93IHRvIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uIG91dCBvZiBpdCwgbGV0J3MgZ2V0CisgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgdGFzayBhdCBoYW5kIGFuZCBzZWUgaWYgd2UgY2FuIGdldCBzb21lIGJhc2ljIGlkZWEKKyAgICAgICAgICAgICAgICBhYm91dCB3aGVyZSB0aGUgdGltZSBpcyBzcGVudCBpbiB0aGUgcHJvZ3JhbSB3ZSdyZSBwcm9maWxpbmcsCisgICAgICAgICAgICAgICAgd2dldC4gUmVtZW1iZXIgdGhhdCB3Z2V0IGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGFzIGFuIGFwcGxldAorICAgICAgICAgICAgICAgIGluIGJ1c3lib3gsIHNvIHdoaWxlIHRoZSBwcm9jZXNzIG5hbWUgaXMgJ3dnZXQnLCB0aGUgZXhlY3V0YWJsZQorICAgICAgICAgICAgICAgIHdlJ3JlIGFjdHVhbGx5IGludGVyZXN0ZWQgaW4gaXMgYnVzeWJveC4gU28gbGV0J3MgZXhwYW5kIHRoZQorICAgICAgICAgICAgICAgIGZpcnN0IGVudHJ5IGNvbnRhaW5pbmcgYnVzeWJveDoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1idXN5Ym94LWV4cGFuZGVkLXN0cmlwcGVkLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFnYWluLCBiZWZvcmUgd2UgZXhwYW5kZWQgd2Ugc2F3IHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyBsYWJlbGVkCisgICAgICAgICAgICAgICAgd2l0aCBhIGhleCB2YWx1ZSBpbnN0ZWFkIG9mIGEgc3ltYm9sIGFzIHdpdGggbW9zdCBvZiB0aGUga2VybmVsCisgICAgICAgICAgICAgICAgZW50cmllcy4gRXhwYW5kaW5nIHRoZSBidXN5Ym94IGVudHJ5IGRvZXNuJ3QgbWFrZSBpdCBhbnkgYmV0dGVyLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHBlcmYgY2FuJ3QgZmluZCB0aGUgc3ltYm9sIGluZm9ybWF0aW9uIGZvciB0aGUKKyAgICAgICAgICAgICAgICBidXN5Ym94IGJpbmFyeSwgd2hpY2ggaXMgYWN0dWFsbHkgc3RyaXBwZWQgb3V0IGJ5IHRoZSBZb2N0byBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25lIHdheSBhcm91bmQgdGhhdCBpcyB0byBwdXQgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGxvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICB3aGVuIHlvdSBidWlsZCB0aGUgaW1hZ2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSG93ZXZlciwgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlIHdpdGggdGhlIGJpbmFyaWVzIHN0cmlwcGVkLAorICAgICAgICAgICAgICAgIHNvIHdoYXQgY2FuIHdlIGRvIHRvIGdldCBwZXJmIHRvIHJlc29sdmUgdGhlIHN5bWJvbHM/IEJhc2ljYWxseQorICAgICAgICAgICAgICAgIHdlIG5lZWQgdG8gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciB0aGUgYnVzeWJveCBwYWNrYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBnZW5lcmF0ZSB0aGUgZGVidWcgaW5mbyBmb3IgdGhlIHBhY2thZ2VzIGluIHRoZSBpbWFnZSwgd2UgY2FuCisgICAgICAgICAgICAgICAgYWRkIGRiZy1wa2dzIHRvIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIGluIGxvY2FsLmNvbmYuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIHRvb2xzLXByb2ZpbGUgZGJnLXBrZ3MiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIHR5cGUgb2YgZGVidWdpbmZvIHRoYXQKKyAgICAgICAgICAgICAgICBwZXJmIHVuZGVyc3RhbmRzLCB3ZSBhbHNvIG5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gbG9jYWwuY29uZjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnZGVidWctZmlsZS1kaXJlY3RvcnknCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uY2Ugd2UndmUgZG9uZSB0aGF0LCB3ZSBjYW4gaW5zdGFsbCB0aGUgZGVidWdpbmZvIGZvciBidXN5Ym94LgorICAgICAgICAgICAgICAgIFRoZSBkZWJ1ZyBwYWNrYWdlcyBvbmNlIGJ1aWx0IGNhbiBiZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgIGJ1aWxkL3RtcC9kZXBsb3kvcnBtLyogb24gdGhlIGhvc3Qgc3lzdGVtLiBGaW5kIHRoZQorICAgICAgICAgICAgICAgIGJ1c3lib3gtZGJnLS4uLnJwbSBmaWxlIGFuZCBjb3B5IGl0IHRvIHRoZSB0YXJnZXQuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBjb3JlMl0kIHNjcCAvaG9tZS90cnoveW9jdG8vY3Jvd25iYXktdHJhY2luZy1kYmcvYnVpbGQvdG1wL2RlcGxveS9ycG0vY29yZTJfMzIvYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSByb290QDE5Mi4xNjguMS4zMToKKyAgICAgcm9vdEAxOTIuMTY4LjEuMzEncyBwYXNzd29yZDoKKyAgICAgYnVzeWJveC1kYmctMS4yMC4yLXIyLmNvcmUyXzMyLnJwbSAgICAgICAgICAgICAgICAgICAgIDEwMCUgMTgyNktCICAgMS44TUIvcyAgIDAwOjAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdyBpbnN0YWxsIHRoZSBkZWJ1ZyBycG0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcnBtIC1pIGJ1c3lib3gtZGJnLTEuMjAuMi1yMi5jb3JlMl8zMi5ycG0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTm93IHRoYXQgdGhlIGRlYnVnaW5mbyBpcyBpbnN0YWxsZWQsIHdlIHNlZSB0aGF0IHRoZSBidXN5Ym94CisgICAgICAgICAgICAgICAgZW50cmllcyBub3cgZGlzcGxheSB0aGVpciBmdW5jdGlvbnMgc3ltYm9saWNhbGx5OgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZGVidWdpbmZvLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHdlIGV4cGFuZCBvbmUgb2YgdGhlIGVudHJpZXMgYW5kIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUsCisgICAgICAgICAgICAgICAgd2UncmUgcHJlc2VudGVkIHdpdGggYSBtZW51IG9mIGFjdGlvbnMgd2UgY2FuIHRha2UgdG8gZ2V0IG1vcmUKKyAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoYXQgZW50cnk6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1kc28tem9vbS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uZSBvZiB0aGVzZSBhY3Rpb25zIGFsbG93cyB1cyB0byBzaG93IGEgdmlldyB0aGF0IGRpc3BsYXlzIGEKKyAgICAgICAgICAgICAgICBidXN5Ym94LWNlbnRyaWMgdmlldyBvZiB0aGUgcHJvZmlsZWQgZnVuY3Rpb25zIChpbiB0aGlzIGNhc2Ugd2UndmUKKyAgICAgICAgICAgICAgICBhbHNvIGV4cGFuZGVkIGFsbCB0aGUgbm9kZXMgdXNpbmcgdGhlICdFJyBrZXkpOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi13Z2V0LWJ1c3lib3gtZHNvLXpvb20ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHNlZSB0aGF0IG5vdyB0aGF0IHRoZSBidXN5Ym94IGRlYnVnaW5mbyBpcworICAgICAgICAgICAgICAgIGluc3RhbGxlZCwgdGhlIHByZXZpb3VzbHkgdW5yZXNvbHZlZCBzeW1ib2wgaW4gdGhlCisgICAgICAgICAgICAgICAgc3lzX2Nsb2NrX2dldHRpbWUoKSBlbnRyeSBtZW50aW9uZWQgcHJldmlvdXNseSBpcyBub3cgcmVzb2x2ZWQsCisgICAgICAgICAgICAgICAgYW5kIHNob3dzIHRoYXQgdGhlIHN5c19jbG9ja19nZXR0aW1lIHN5c3RlbSBjYWxsIHRoYXQgd2FzIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBvZiA2Ljc1JSBvZiB0aGUgY29weS10by11c2VyIG92ZXJoZWFkIHdhcyBpbml0aWF0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgaGFuZGxlX2lucHV0KCkgYnVzeWJveCBmdW5jdGlvbjoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtd2dldC1nLWNvcHktdG8tdXNlci1leHBhbmRlZC1kZWJ1Z2luZm8ucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXQgdGhlIGxvd2VzdCBsZXZlbCBvZiBkZXRhaWwsIHdlIGNhbiBkaXZlIGRvd24gdG8gdGhlIGFzc2VtYmx5CisgICAgICAgICAgICAgICAgbGV2ZWwgYW5kIHNlZSB3aGljaCBpbnN0cnVjdGlvbnMgY2F1c2VkIHRoZSBtb3N0IG92ZXJoZWFkIGluIGEKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi4gUHJlc3NpbmcgJ2VudGVyJyBvbiB0aGUgJ3VkaGNwY19tYWluJyBmdW5jdGlvbiwgd2UncmUKKyAgICAgICAgICAgICAgICBhZ2FpbiBwcmVzZW50ZWQgd2l0aCBhIG1lbnU6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS1tZW51LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjJpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNlbGVjdGluZyAnQW5ub3RhdGUgdWRoY3BjX21haW4nLCB3ZSBnZXQgYSBkZXRhaWxlZCBsaXN0aW5nIG9mCisgICAgICAgICAgICAgICAgcGVyY2VudGFnZXMgYnkgaW5zdHJ1Y3Rpb24gZm9yIHRoZSB1ZGhjcGNfbWFpbiBmdW5jdGlvbi4gRnJvbSB0aGUKKyAgICAgICAgICAgICAgICBkaXNwbGF5LCB3ZSBjYW4gc2VlIHRoYXQgb3ZlciA1MCUgb2YgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzIHRha2VuIHVwIGJ5IGEgY291cGxlIHRlc3RzIGFuZCB0aGUgbW92ZSBvZiBhCisgICAgICAgICAgICAgICAgY29uc3RhbnQgKDEpIHRvIGEgcmVnaXN0ZXI6CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wZXJmLXdnZXQtYnVzeWJveC1hbm5vdGF0ZS11ZGhjcGMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzZWd1ZSBpbnRvIHRyYWNpbmcsIGxldCdzIHRyeSBhbm90aGVyIHByb2ZpbGUgdXNpbmcgYQorICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjb3VudGVyLCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAnY3ljbGVzJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBpbmZyYXN0cnVjdHVyZSBpbiBMaW51eCBoYXMgYmVjb21lCisgICAgICAgICAgICAgICAgdW5pZmllZCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgdG9vbCB3aXRoIGEKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZXQgb2YgY291bnRlcnMsIG5vdCBqdXN0IHRoZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHRoYXQgdHJhZGl0aW9uYWwgdG9vbHMgaGF2ZSBoYWQgdG8gcmVzdHJpY3QKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzIHRvIChvZiBjb3Vyc2UgdGhlIHRyYWRpdGlvbmFsIHRvb2xzIGNhbiBhbHNvIG1ha2UgdXNlCisgICAgICAgICAgICAgICAgb2YgdGhlIGV4cGFuZGVkIHBvc3NpYmlsaXRpZXMgbm93IGF2YWlsYWJsZSB0byB0aGVtLCBhbmQgaW4gc29tZQorICAgICAgICAgICAgICAgIGNhc2VzIGhhdmUsIGFzIG1lbnRpb25lZCBwcmV2aW91c2x5KS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2UgY2FuIGdldCBhIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBldmVudHMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIHByb2ZpbGUgYSB3b3JrbG9hZCB2aWEgJ3BlcmYgbGlzdCc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgbGlzdAorCisgICAgIExpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKToKKyAgICAgIGNwdS1jeWNsZXMgT1IgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kIE9SIGlkbGUtY3ljbGVzLWZyb250ZW5kICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQgT1IgaWRsZS1jeWNsZXMtYmFja2VuZCAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLXJlZmVyZW5jZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGNhY2hlLW1pc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1pbnN0cnVjdGlvbnMgT1IgYnJhbmNoZXMgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJyYW5jaC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIGJ1cy1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKyAgICAgIHJlZi1jeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtIYXJkd2FyZSBldmVudF0KKworICAgICAgY3B1LWNsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgdGFzay1jbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgcGFnZS1mYXVsdHMgT1IgZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWlub3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgbWFqb3ItZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY29udGV4dC1zd2l0Y2hlcyBPUiBjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgY3B1LW1pZ3JhdGlvbnMgT1IgbWlncmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgYWxpZ25tZW50LWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorICAgICAgZW11bGF0aW9uLWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NvZnR3YXJlIGV2ZW50XQorCisgICAgICBMMS1kY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1kY2FjaGUtcHJlZmV0Y2gtbWlzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICBMMS1pY2FjaGUtbG9hZC1taXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbSGFyZHdhcmUgY2FjaGUgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICAuCisgICAgICByTk5OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICBjcHUvdDE9djFbLHQyPXYyLHQzIC4uLl0vbW9kaWZpZXIgICAgICAgICAgICAgICAgICBbUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3JdCisgICAgICAgKHNlZSAncGVyZiBsaXN0IC0taGVscCcgb24gaG93IHRvIGVuY29kZSBpdCkKKworICAgICAgbWVtOiZsdDthZGRyJmd0O1s6YWNjZXNzXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0hhcmR3YXJlIGJyZWFrcG9pbnRdCisKKyAgICAgIHN1bnJwYzpycGNfY2FsbF9zdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc3VucnBjOnJwY19iaW5kX3N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzdW5ycGM6cnBjX2Nvbm5lY3Rfc3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN1bnJwYzpycGNfdGFza19iZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2tiOmtmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBza2I6Y29uc3VtZV9za2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldF9kZXZfeG1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuZXQ6bmV0X2Rldl9xdWV1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG5ldDpuZXRpZl9yZWNlaXZlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbmV0Om5ldGlmX3J4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBuYXBpOm5hcGlfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNvY2s6c29ja19yY3ZxdWV1ZV9mdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc29jazpzb2NrX2V4Y2VlZF9idWZfbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB1ZHA6dWRwX2ZhaWxfcXVldWVfcmN2X3NrYiAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGhkYTpoZGFfc2VuZF9jbWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaGRhOmhkYV9nZXRfcmVzcG9uc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBoZGE6aGRhX2J1c19yZXNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjc2k6c2NzaV9kaXNwYXRjaF9jbWRfc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NzaTpzY3NpX2Rpc3BhdGNoX2NtZF9lcnJvciAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY3NpOnNjc2lfZWhfd2FrZXVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGRybTpkcm1fdmJsYW5rX2V2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZHJtOmRybV92YmxhbmtfZXZlbnRfcXVldWVkICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBkcm06ZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhbmRvbTptaXhfcG9vbF9ieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmFuZG9tOm1peF9wb29sX2J5dGVzX25vbG9jayAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByYW5kb206Y3JlZGl0X2VudHJvcHlfYml0cyAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGdwaW86Z3Bpb19kaXJlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgZ3BpbzpncGlvX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19ycV9hYm9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX3JxX3JlcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfcnFfaXNzdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBibG9jazpibG9ja19iaW9fYm91bmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGJsb2NrOmJsb2NrX2Jpb19jb21wbGV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgYmxvY2s6YmxvY2tfYmlvX2JhY2ttZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3dha2VfdGhyZWFkICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfd2FrZV9mb3JrZXJfdGhyZWFkICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd3JpdGViYWNrOndyaXRlYmFja19iZGlfcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICB3cml0ZWJhY2s6d3JpdGViYWNrX3NpbmdsZV9pbm9kZV9yZXF1ZXVlICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdyaXRlYmFjazp3cml0ZWJhY2tfc2luZ2xlX2lub2RlICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTprbWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOmttZW1fY2FjaGVfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAga21lbTptbV9wYWdlX2FsbG9jX3pvbmVfbG9ja2VkICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBrbWVtOm1tX3BhZ2VfcGNwdV9kcmFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGttZW06bW1fcGFnZV9hbGxvY19leHRmcmFnICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB2bXNjYW46bW1fdm1zY2FuX2tzd2FwZF93YWtlICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHZtc2NhbjptbV92bXNjYW5fd2FrZXVwX2tzd2FwZCAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdm1zY2FuOm1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAuCisgICAgICAuCisgICAgICBtb2R1bGU6bW9kdWxlX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIG1vZHVsZTptb2R1bGVfcHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgbW9kdWxlOm1vZHVsZV9yZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9rdGhyZWFkX3N0b3AgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfd2FrZXVwX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZvcmsgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICByY3U6cmN1X3V0aWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHdvcmtxdWV1ZTp3b3JrcXVldWVfcXVldWVfd29yayAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZCAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzaWduYWw6c2lnbmFsX2dlbmVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHNpZ25hbDpzaWduYWxfZGVsaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6dGltZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjp0aW1lcl9zdGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRpbWVyOmhydGltZXJfY2FuY2VsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGltZXI6aXRpbWVyX3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICB0aW1lcjppdGltZXJfZXhwaXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTppcnFfaGFuZGxlcl9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOmlycV9oYW5kbGVyX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBpcnE6c29mdGlycV9lbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIGlycTpzb2Z0aXJxX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgaXJxOnNvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBwcmludGs6Y29uc29sZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHRhc2s6dGFza19uZXd0YXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgdGFzazp0YXNrX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZW50ZXJfc29ja2V0Y2FsbCAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgc3lzY2FsbHM6c3lzX2VudGVyX3Vuc2hhcmUgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICBzeXNjYWxsczpzeXNfZXhpdF91bnNoYXJlICAgICAgICAgICAgICAgICAgICAgICAgICBbVHJhY2Vwb2ludCBldmVudF0KKyAgICAgIHJhd19zeXNjYWxsczpzeXNfZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUcmFjZXBvaW50IGV2ZW50XQorICAgICAgcmF3X3N5c2NhbGxzOnN5c19leGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1RyYWNlcG9pbnQgZXZlbnRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnRzIGRlZmluZWQKKyAgICAgICAgICAgICAgICBieSB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtIGFuZCBleHBvc2VkIGJ5CisgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIGFzIGZpbGVzIGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGJ5IFN5c3RlbVRhcCBhcworICAgICAgICAgICAgICAgIGtlcm5lbC50cmFjZSgidHJhY2Vwb2ludF9uYW1lIikgYW5kIChwYXJ0aWFsbHkpIGFjY2Vzc2VkIGJ5IExUVG5nLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9ubHkgYSBzdWJzZXQgb2YgdGhlc2Ugd291bGQgYmUgb2YgaW50ZXJlc3QgdG8gdXMgd2hlbiBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgdGhpcyB3b3JrbG9hZCwgc28gbGV0J3MgY2hvb3NlIHRoZSBtb3N0IGxpa2VseSBzdWJzeXN0ZW1zCisgICAgICAgICAgICAgICAgKGlkZW50aWZpZWQgYnkgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGNvbG9uIGluIHRoZSBUcmFjZXBvaW50IGV2ZW50cykKKyAgICAgICAgICAgICAgICBhbmQgZG8gYSAncGVyZiBzdGF0JyBydW4gdXNpbmcgb25seSB0aG9zZSB3aWxkY2FyZGVkIHN1YnN5c3RlbXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc3RhdCAtZSBza2I6KiAtZSBuZXQ6KiAtZSBuYXBpOiogLWUgc2NoZWQ6KiAtZSB3b3JrcXVldWU6KiAtZSBpcnE6KiAtZSBzeXNjYWxsczoqIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgUGVyZm9ybWFuY2UgY291bnRlciBzdGF0cyBmb3IgJ3dnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4nOgorCisgICAgICAgICAgICAgICAgIDIzMzIzIHNrYjprZnJlZV9za2IKKyAgICAgICAgICAgICAgICAgICAgIDAgc2tiOmNvbnN1bWVfc2tiCisgICAgICAgICAgICAgICAgIDQ5ODk3IHNrYjpza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgICAgICAgICAgICAgNjIxNyBuZXQ6bmV0X2Rldl94bWl0CisgICAgICAgICAgICAgICAgICA2MjE3IG5ldDpuZXRfZGV2X3F1ZXVlCisgICAgICAgICAgICAgICAgICA3OTYyIG5ldDpuZXRpZl9yZWNlaXZlX3NrYgorICAgICAgICAgICAgICAgICAgICAgMiBuZXQ6bmV0aWZfcngKKyAgICAgICAgICAgICAgICAgIDgzNDAgbmFwaTpuYXBpX3BvbGwKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfa3RocmVhZF9zdG9wCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX2t0aHJlYWRfc3RvcF9yZXQKKyAgICAgICAgICAgICAgICAgIDM3NDkgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dha2V1cF9uZXcKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfc3dpdGNoCisgICAgICAgICAgICAgICAgICAgIDI5IHNjaGVkOnNjaGVkX21pZ3JhdGVfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX2ZyZWUKKyAgICAgICAgICAgICAgICAgICAgIDEgc2NoZWQ6c2NoZWRfcHJvY2Vzc19leGl0CisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3dhaXRfdGFzaworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9wcm9jZXNzX3dhaXQKKyAgICAgICAgICAgICAgICAgICAgIDAgc2NoZWQ6c2NoZWRfcHJvY2Vzc19mb3JrCisgICAgICAgICAgICAgICAgICAgICAxIHNjaGVkOnNjaGVkX3Byb2Nlc3NfZXhlYworICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X3dhaXQKKyAgICAgICAgIDIxMDY1MTk0MTU2NDEgc2NoZWQ6c2NoZWRfc3RhdF9zbGVlcAorICAgICAgICAgICAgICAgICAgICAgMCBzY2hlZDpzY2hlZF9zdGF0X2lvd2FpdAorICAgICAgICAgICAgIDE0NzQ1MzYxMyBzY2hlZDpzY2hlZF9zdGF0X2Jsb2NrZWQKKyAgICAgICAgICAgMTI5MDMwMjY5NTUgc2NoZWQ6c2NoZWRfc3RhdF9ydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAwIHNjaGVkOnNjaGVkX3BpX3NldHByaW8KKyAgICAgICAgICAgICAgICAgIDM1NzQgd29ya3F1ZXVlOndvcmtxdWV1ZV9xdWV1ZV93b3JrCisgICAgICAgICAgICAgICAgICAzNTc0IHdvcmtxdWV1ZTp3b3JrcXVldWVfYWN0aXZhdGVfd29yaworICAgICAgICAgICAgICAgICAgICAgMCB3b3JrcXVldWU6d29ya3F1ZXVlX2V4ZWN1dGVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgIDAgd29ya3F1ZXVlOndvcmtxdWV1ZV9leGVjdXRlX2VuZAorICAgICAgICAgICAgICAgICAxNjYzMSBpcnE6aXJxX2hhbmRsZXJfZW50cnkKKyAgICAgICAgICAgICAgICAgMTY2MzEgaXJxOmlycV9oYW5kbGVyX2V4aXQKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZW50cnkKKyAgICAgICAgICAgICAgICAgMjg1MjEgaXJxOnNvZnRpcnFfZXhpdAorICAgICAgICAgICAgICAgICAyODcyOCBpcnE6c29mdGlycV9yYWlzZQorICAgICAgICAgICAgICAgICAgICAgMSBzeXNjYWxsczpzeXNfZW50ZXJfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDEgc3lzY2FsbHM6c3lzX2V4aXRfc2VuZG1tc2cKKyAgICAgICAgICAgICAgICAgICAgIDAgc3lzY2FsbHM6c3lzX2VudGVyX3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgICAwIHN5c2NhbGxzOnN5c19leGl0X3JlY3ZtbXNnCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19lbnRlcl9zb2NrZXRjYWxsCisgICAgICAgICAgICAgICAgICAgIDE0IHN5c2NhbGxzOnN5c19leGl0X3NvY2tldGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2VudGVyX3JlYWQKKyAgICAgICAgICAgICAgICAgMTY5NjUgc3lzY2FsbHM6c3lzX2V4aXRfcmVhZAorICAgICAgICAgICAgICAgICAxMjg1NCBzeXNjYWxsczpzeXNfZW50ZXJfd3JpdGUKKyAgICAgICAgICAgICAgICAgMTI4NTQgc3lzY2FsbHM6c3lzX2V4aXRfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgICAgICAgICAgIC4KKworICAgICAgICAgIDU4LjAyOTcxMDk3MiBzZWNvbmRzIHRpbWUgZWxhcHNlZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBMZXQncyBwaWNrIG9uZSBvZiB0aGVzZSB0cmFjZXBvaW50cyBhbmQgdGVsbCBwZXJmIHRvIGRvIGEgcHJvZmlsZQorICAgICAgICAgICAgICAgIHVzaW5nIGl0IGFzIHRoZSBzYW1wbGluZyBldmVudDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2NoZWQ6c2NoZWRfd2FrZXVwIHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zY2hlZC13YWtldXAtcHJvZmlsZS5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI3aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc2NyZWVuc2hvdCBhYm92ZSBzaG93cyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgcHJvZmlsZSB1c2luZworICAgICAgICAgICAgICAgIHNjaGVkOnNjaGVkX3N3aXRjaCB0cmFjZXBvaW50LCB3aGljaCBzaG93cyB0aGUgcmVsYXRpdmUgY29zdHMgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIHBhdGhzIHRvIHNjaGVkX3dha2V1cCAobm90ZSB0aGF0IHNjaGVkX3dha2V1cCBpcyB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSB0cmFjZXBvaW50IC0gaXQncyBhY3R1YWxseSBkZWZpbmVkIGp1c3QgaW5zaWRlCisgICAgICAgICAgICAgICAgdHR3dV9kb193YWtldXAoKSwgd2hpY2ggYWNjb3VudHMgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBwcm9maWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgLyoKKyAgICAgICogTWFyayB0aGUgdGFzayBydW5uYWJsZSBhbmQgcGVyZm9ybSB3YWtldXAtcHJlZW1wdGlvbi4KKyAgICAgICovCisgICAgIHN0YXRpYyB2b2lkCisgICAgIHR0d3VfZG9fd2FrZXVwKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZmxhZ3MpCisgICAgIHsKKyAgICAgICAgICB0cmFjZV9zY2hlZF93YWtldXAocCwgdHJ1ZSk7CisgICAgICAgICAgLgorICAgICAgICAgIC4KKyAgICAgICAgICAuCisgICAgIH0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQSBjb3VwbGUgb2YgdGhlIG1vcmUgaW50ZXJlc3RpbmcgY2FsbGNoYWlucyBhcmUgZXhwYW5kZWQgYW5kCisgICAgICAgICAgICAgICAgZGlzcGxheWVkIGFib3ZlLCBiYXNpY2FsbHkgc29tZSBuZXR3b3JrIHJlY2VpdmUgcGF0aHMgdGhhdAorICAgICAgICAgICAgICAgIHByZXN1bWFibHkgZW5kIHVwIHdha2luZyB1cCB3Z2V0IChidXN5Ym94KSB3aGVuIG5ldHdvcmsgZGF0YSBpcworICAgICAgICAgICAgICAgIHJlYWR5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3RlIHRoYXQgYmVjYXVzZSB0cmFjZXBvaW50cyBhcmUgbm9ybWFsbHkgdXNlZCBmb3IgdHJhY2luZywKKyAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBzYW1wbGluZyBwZXJpb2QgZm9yIHRyYWNlcG9pbnRzIGlzIDEgaS5lLiBmb3IKKyAgICAgICAgICAgICAgICB0cmFjZXBvaW50cyBwZXJmIHdpbGwgc2FtcGxlIG9uIGV2ZXJ5IGV2ZW50IG9jY3VycmVuY2UgKHRoaXMKKyAgICAgICAgICAgICAgICBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgLWMgb3B0aW9uKS4gVGhpcyBpcyBpbiBjb250cmFzdCB0bworICAgICAgICAgICAgICAgIGhhcmR3YXJlIGNvdW50ZXJzIHN1Y2ggYXMgZm9yIGV4YW1wbGUgdGhlIGRlZmF1bHQgJ2N5Y2xlcycKKyAgICAgICAgICAgICAgICBoYXJkd2FyZSBjb3VudGVyIHVzZWQgZm9yIG5vcm1hbCBwcm9maWxpbmcsIHdoZXJlIHNhbXBsaW5nCisgICAgICAgICAgICAgICAgcGVyaW9kcyBhcmUgbXVjaCBoaWdoZXIgKGluIHRoZSB0aG91c2FuZHMpIGJlY2F1c2UgcHJvZmlsaW5nIHNob3VsZAorICAgICAgICAgICAgICAgIGhhdmUgYXMgbG93IGFuIG92ZXJoZWFkIGFzIHBvc3NpYmxlIGFuZCBzYW1wbGluZyBvbiBldmVyeSBjeWNsZQorICAgICAgICAgICAgICAgIHdvdWxkIGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3VzaW5nLXBlcmYtdG8tZG8tYmFzaWMtdHJhY2luZyc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgcGVyZiB0byBkbyBCYXNpYyBUcmFjaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJvZmlsaW5nIGlzIGEgZ3JlYXQgdG9vbCBmb3Igc29sdmluZyBtYW55IHByb2JsZW1zIG9yIGZvcgorICAgICAgICAgICAgICAgIGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggYSB3b3JrbG9hZCBvcgorICAgICAgICAgICAgICAgIGFjcm9zcyB0aGUgc3lzdGVtLiBJdCBpcyBob3dldmVyIGJ5IGRlZmluaXRpb24gYW4gYXBwcm94aW1hdGlvbiwKKyAgICAgICAgICAgICAgICBhcyBzdWdnZXN0ZWQgYnkgdGhlIG1vc3QgcHJvbWluZW50IHdvcmQgYXNzb2NpYXRlZCB3aXRoIGl0LAorICAgICAgICAgICAgICAgICdzYW1wbGluZycuIE9uIHRoZSBvbmUgaGFuZCwgaXQgYWxsb3dzIGEgcmVwcmVzZW50YXRpdmUgcGljdHVyZSBvZgorICAgICAgICAgICAgICAgIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgc3lzdGVtIHRvIGJlIGNoZWFwbHkgdGFrZW4sIGJ1dCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICBoYW5kLCB0aGF0IGNoZWFwbmVzcyBsaW1pdHMgaXRzIHV0aWxpdHkgd2hlbiB0aGF0IGRhdGEgc3VnZ2VzdHMgYQorICAgICAgICAgICAgICAgIG5lZWQgdG8gJ2RpdmUgZG93bicgbW9yZSBkZWVwbHkgdG8gZGlzY292ZXIgd2hhdCdzIHJlYWxseSBnb2luZworICAgICAgICAgICAgICAgIG9uLiBJbiBzdWNoIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gc2VlIHdoYXQncyByZWFsbHkgZ29pbmcgb24gaXMKKyAgICAgICAgICAgICAgICB0byBiZSBhYmxlIHRvIGxvb2sgYXQgKG9yIHN1bW1hcml6ZSBtb3JlIGludGVsbGlnZW50bHkpIHRoZQorICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgc3RlcHMgdGhhdCBnbyBpbnRvIHRoZSBoaWdoZXItbGV2ZWwgYmVoYXZpb3IgZXhwb3NlZAorICAgICAgICAgICAgICAgIGJ5IHRoZSBjb2Fyc2UtZ3JhaW5lZCBwcm9maWxpbmcgZGF0YS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBjb25jcmV0ZSBleGFtcGxlLCB3ZSBjYW4gdHJhY2UgYWxsIHRoZSBldmVudHMgd2UgdGhpbmsgbWlnaHQKKyAgICAgICAgICAgICAgICBiZSBhcHBsaWNhYmxlIHRvIG91ciB3b3JrbG9hZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWUgc2tiOiogLWUgbmV0OiogLWUgbmFwaToqIC1lIHNjaGVkOnNjaGVkX3N3aXRjaCAtZSBzY2hlZDpzY2hlZF93YWtldXAgLWUgaXJxOioKKyAgICAgIC1lIHN5c2NhbGxzOnN5c19lbnRlcl9yZWFkIC1lIHN5c2NhbGxzOnN5c19leGl0X3JlYWQgLWUgc3lzY2FsbHM6c3lzX2VudGVyX3dyaXRlIC1lIHN5c2NhbGxzOnN5c19leGl0X3dyaXRlCisgICAgICB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBsb29rIGF0IHRoZSByYXcgdHJhY2Ugb3V0cHV0IHVzaW5nICdwZXJmIHNjcmlwdCcgd2l0aCBubworICAgICAgICAgICAgICAgIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQKKworICAgICAgICAgICBwZXJmICAxMjYyIFswMDBdIDExNjI0Ljg1NzA4Mjogc3lzX2V4aXRfcmVhZDogMHgwCisgICAgICAgICAgIHBlcmYgIDEyNjIgWzAwMF0gMTE2MjQuODU3MTkzOiBzY2hlZF93YWtldXA6IGNvbW09bWlncmF0aW9uLzAgcGlkPTYgcHJpbz0wIHN1Y2Nlc3M9MSB0YXJnZXRfY3B1PTAwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODAyMTogc29mdGlycV9yYWlzZTogdmVjPTEgW2FjdGlvbj1USU1FUl0KKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTgwNzQ6IHNvZnRpcnFfZW50cnk6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MDgxOiBzb2Z0aXJxX2V4aXQ6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTY2OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGJmODJjOTQwLCBjb3VudDogMHgwMjAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4MTc3OiBzeXNfZXhpdF9yZWFkOiAweDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1ODg3ODoga2ZyZWVfc2tiOiBza2JhZGRyPTB4ZWIyNDhkODAgcHJvdG9jb2w9MCBsb2NhdGlvbj0weGMxNWE1MzA4CisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU4OTQ1OiBrZnJlZV9za2I6IHNrYmFkZHI9MHhlYjI0ODAwMCBwcm90b2NvbD0wIGxvY2F0aW9uPTB4YzE1YTUzMDgKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkwMjA6IHNvZnRpcnFfcmFpc2U6IHZlYz0xIFthY3Rpb249VElNRVJdCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5MDc2OiBzb2Z0aXJxX2VudHJ5OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTA4Mzogc29mdGlycV9leGl0OiB2ZWM9MSBbYWN0aW9uPVRJTUVSXQorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE2Nzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiNzcyMDAwMCwgY291bnQ6IDB4MDQwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTE5Mjogc3lzX2V4aXRfcmVhZDogMHgxZDcKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMjg6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTkyMzM6IHN5c19leGl0X3JlYWQ6IDB4MAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU3Mzogc3lzX2VudGVyX3JlYWQ6IGZkOiAweDAwMDMsIGJ1ZjogMHhiZjgyYzU4MCwgY291bnQ6IDB4MDIwMAorICAgICAgICAgICB3Z2V0ICAxMjYyIFswMDFdIDExNjI0Ljg1OTU4NDogc3lzX2V4aXRfcmVhZDogMHgyMDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4NjQ6IHN5c19lbnRlcl9yZWFkOiBmZDogMHgwMDAzLCBidWY6IDB4Yjc3MjAwMDAsIGNvdW50OiAweDA0MDAKKyAgICAgICAgICAgd2dldCAgMTI2MiBbMDAxXSAxMTYyNC44NTk4ODg6IHN5c19leGl0X3JlYWQ6IDB4NDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTM1OiBzeXNfZW50ZXJfcmVhZDogZmQ6IDB4MDAwMywgYnVmOiAweGI3NzIwMDAwLCBjb3VudDogMHgwNDAwCisgICAgICAgICAgIHdnZXQgIDEyNjIgWzAwMV0gMTE2MjQuODU5OTQ0OiBzeXNfZXhpdF9yZWFkOiAweDQwMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIGdpdmVzIHVzIGEgZGV0YWlsZWQgdGltZXN0YW1wZWQgc2VxdWVuY2Ugb2YgZXZlbnRzIHRoYXQKKyAgICAgICAgICAgICAgICBvY2N1cnJlZCB3aXRoaW4gdGhlIHdvcmtsb2FkIHdpdGggcmVzcGVjdCB0byB0aG9zZSBldmVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIG1hbnkgd2F5cywgcHJvZmlsaW5nIGNhbiBiZSB2aWV3ZWQgYXMgYSBzdWJzZXQgb2YgdHJhY2luZyAtCisgICAgICAgICAgICAgICAgdGhlb3JldGljYWxseSwgaWYgeW91IGhhdmUgYSBzZXQgb2YgdHJhY2UgZXZlbnRzIHRoYXQncyBzdWZmaWNpZW50CisgICAgICAgICAgICAgICAgdG8gY2FwdHVyZSBhbGwgdGhlIGltcG9ydGFudCBhc3BlY3RzIG9mIGEgd29ya2xvYWQsIHlvdSBjYW4gZGVyaXZlCisgICAgICAgICAgICAgICAgYW55IG9mIHRoZSByZXN1bHRzIG9yIHZpZXdzIHRoYXQgYSBwcm9maWxpbmcgcnVuIGNhbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQW5vdGhlciBhc3BlY3Qgb2YgdHJhZGl0aW9uYWwgcHJvZmlsaW5nIGlzIHRoYXQgd2hpbGUgcG93ZXJmdWwgaW4KKyAgICAgICAgICAgICAgICBtYW55IHdheXMsIGl0J3MgbGltaXRlZCBieSB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICBQcm9maWxpbmcgdG9vbHMgb2ZmZXIgdmFyaW91cyB3YXlzIG9mIHNvcnRpbmcgYW5kIHByZXNlbnRpbmcgdGhlCisgICAgICAgICAgICAgICAgc2FtcGxlIGRhdGEsIHdoaWNoIG1ha2UgaXQgbXVjaCBtb3JlIHVzZWZ1bCBhbmQgYW1lbmFibGUgdG8gdXNlcgorICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhdGlvbiwgYnV0IGluIHRoZSBlbmQgaXQgY2FuJ3QgYmUgdXNlZCBpbiBhbiBvcGVuLWVuZGVkCisgICAgICAgICAgICAgICAgd2F5IHRvIGV4dHJhY3QgZGF0YSB0aGF0IGp1c3QgaXNuJ3QgcHJlc2VudCBhcyBhIGNvbnNlcXVlbmNlIG9mCisgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBjb25jZXB0dWFsbHksIG1vc3Qgb2YgaXQgaGFzIGJlZW4gdGhyb3duIGF3YXkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZ1bGwtYmxvd24gZGV0YWlsZWQgdHJhY2luZyBkYXRhIGRvZXMgaG93ZXZlciBvZmZlciB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgICAgICAgICB0byBtYW5pcHVsYXRlIGFuZCBwcmVzZW50IHRoZSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZHVyaW5nIGEKKyAgICAgICAgICAgICAgICB0cmFjaW5nIHJ1biBpbiBhbiBpbmZpbml0ZSB2YXJpZXR5IG9mIHdheXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFub3RoZXIgd2F5IHRvIGxvb2sgYXQgaXQgaXMgdGhhdCB0aGVyZSBhcmUgb25seSBzbyBtYW55IHdheXMgdGhhdAorICAgICAgICAgICAgICAgIHRoZSAncHJpbWl0aXZlJyBjb3VudGVycyBjYW4gYmUgdXNlZCBvbiB0aGVpciBvd24gdG8gZ2VuZXJhdGUKKyAgICAgICAgICAgICAgICBpbnRlcmVzdGluZyBvdXRwdXQ7IHRvIGdldCBhbnl0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gc2ltcGxlCisgICAgICAgICAgICAgICAgY291bnRzIHJlcXVpcmVzIHNvbWUgYW1vdW50IG9mIGFkZGl0aW9uYWwgbG9naWMsIHdoaWNoIGlzIHR5cGljYWxseQorICAgICAgICAgICAgICAgIHZlcnkgc3BlY2lmaWMgdG8gdGhlIHByb2JsZW0gYXQgaGFuZC4gRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0bworICAgICAgICAgICAgICAgIG1ha2UgdXNlIG9mIGEgJ2NvdW50ZXInIHRoYXQgbWFwcyB0byB0aGUgdmFsdWUgb2YgdGhlIHRpbWUKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gd2hlbiBhIHByb2Nlc3Mgd2FzIHNjaGVkdWxlZCB0byBydW4gb24gYQorICAgICAgICAgICAgICAgIHByb2Nlc3NvciBhbmQgdGhlIHRpbWUgaXQgYWN0dWFsbHkgcmFuLCB3ZSB3b3VsZG4ndCBleHBlY3Qgc3VjaAorICAgICAgICAgICAgICAgIGEgY291bnRlciB0byBleGlzdCBvbiBpdHMgb3duLCBidXQgd2UgY291bGQgZGVyaXZlIG9uZSBjYWxsZWQgc2F5CisgICAgICAgICAgICAgICAgJ3dha2V1cF9sYXRlbmN5JyBhbmQgdXNlIGl0IHRvIGV4dHJhY3QgYSB1c2VmdWwgdmlldyBvZiB0aGF0IG1ldHJpYworICAgICAgICAgICAgICAgIGZyb20gdHJhY2UgZGF0YS4gTGlrZXdpc2UsIHdlIHJlYWxseSBjYW4ndCBmaWd1cmUgb3V0IGZyb20gc3RhbmRhcmQKKyAgICAgICAgICAgICAgICBwcm9maWxpbmcgdG9vbHMgaG93IG11Y2ggZGF0YSBldmVyeSBwcm9jZXNzIG9uIHRoZSBzeXN0ZW0gcmVhZHMgYW5kCisgICAgICAgICAgICAgICAgd3JpdGVzLCBhbG9uZyB3aXRoIGhvdyBtYW55IG9mIHRob3NlIHJlYWRzIGFuZCB3cml0ZXMgZmFpbAorICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkuIElmIHdlIGhhdmUgc3VmZmljaWVudCB0cmFjZSBkYXRhLCBob3dldmVyLCB3ZSBjb3VsZAorICAgICAgICAgICAgICAgIHdpdGggdGhlIHJpZ2h0IHRvb2xzIGVhc2lseSBleHRyYWN0IGFuZCBwcmVzZW50IHRoYXQgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgYnV0IHdlJ2QgbmVlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBwcmUtY2FubmVkIHByb2ZpbGluZyB0b29scyB0bworICAgICAgICAgICAgICAgIGRvIHRoYXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEx1Y2tpbHksIHRoZXJlIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHdheSB0byBoYW5kbGUgc3VjaCBuZWVkcywKKyAgICAgICAgICAgICAgICBjYWxsZWQgJ3Byb2dyYW1taW5nIGxhbmd1YWdlcycuIE1ha2luZyBwcm9ncmFtbWluZyBsYW5ndWFnZXMKKyAgICAgICAgICAgICAgICBlYXNpbHkgYXZhaWxhYmxlIHRvIGFwcGx5IHRvIHN1Y2ggcHJvYmxlbXMgZ2l2ZW4gdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgZm9ybWF0IG9mIGRhdGEgaXMgY2FsbGVkIGEgJ3Byb2dyYW1taW5nIGxhbmd1YWdlIGJpbmRpbmcnIGZvcgorICAgICAgICAgICAgICAgIHRoYXQgZGF0YSBhbmQgbGFuZ3VhZ2UuIFBlcmYgc3VwcG9ydHMgdHdvIHByb2dyYW1taW5nIGxhbmd1YWdlCisgICAgICAgICAgICAgICAgYmluZGluZ3MsIG9uZSBmb3IgUHl0aG9uIGFuZCBvbmUgZm9yIFBlcmwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IExhbmd1YWdlIGJpbmRpbmdzIGZvciBtYW5pcHVsYXRpbmcgYW5kCisgICAgICAgICAgICAgICAgYWdncmVnYXRpbmcgdHJhY2UgZGF0YSBhcmUgb2YgY291cnNlIG5vdCBhIG5ldworICAgICAgICAgICAgICAgIGlkZWEuICBPbmUgb2YgdGhlIGZpcnN0IHByb2plY3RzIHRvIGRvIHRoaXMgd2FzIElCTSdzIERQcm9iZXMKKyAgICAgICAgICAgICAgICBkcGNjIGNvbXBpbGVyLCBhbiBBTlNJIEMgY29tcGlsZXIgd2hpY2ggdGFyZ2V0ZWQgYSBsb3ctbGV2ZWwKKyAgICAgICAgICAgICAgICBhc3NlbWJseSBsYW5ndWFnZSBydW5uaW5nIG9uIGFuIGluLWtlcm5lbCBpbnRlcnByZXRlciBvbiB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLiAgVGhpcyBpcyBleGFjdGx5IGFuYWxvZ291cyB0byB3aGF0IFN1bidzIERUcmFjZQorICAgICAgICAgICAgICAgIGRpZCwgZXhjZXB0IHRoYXQgRFRyYWNlIGludmVudGVkIGl0cyBvd24gbGFuZ3VhZ2UgZm9yIHRoZSBwdXJwb3NlLgorICAgICAgICAgICAgICAgIFN5c3RlbXRhcCwgaGVhdmlseSBpbnNwaXJlZCBieSBEVHJhY2UsIGFsc28gY3JlYXRlZCBpdHMgb3duCisgICAgICAgICAgICAgICAgb25lLW9mZiBsYW5ndWFnZSwgYnV0IHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlIHByb2R1Y3Qgb24gYW4KKyAgICAgICAgICAgICAgICBpbi1rZXJuZWwgaW50ZXJwcmV0ZXIsIGNyZWF0ZWQgYW4gZWxhYm9yYXRlIGNvbXBpbGVyLWJhc2VkCisgICAgICAgICAgICAgICAgbWFjaGluZXJ5IHRvIHRyYW5zbGF0ZSBpdHMgbGFuZ3VhZ2UgaW50byBrZXJuZWwgbW9kdWxlcyB3cml0dGVuCisgICAgICAgICAgICAgICAgaW4gQy4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIHRoZSB0cmFjZSBkYXRhIGluIHBlcmYuZGF0YSwgd2UgY2FuIHVzZQorICAgICAgICAgICAgICAgICdwZXJmIHNjcmlwdCAtZycgdG8gZ2VuZXJhdGUgYSBza2VsZXRvbiBzY3JpcHQgd2l0aCBoYW5kbGVycworICAgICAgICAgICAgICAgIGZvciB0aGUgcmVhZC93cml0ZSBlbnRyeS9leGl0IGV2ZW50cyB3ZSByZWNvcmRlZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiBzY3JpcHQgLWcgcHl0aG9uCisgICAgIGdlbmVyYXRlZCBQeXRob24gc2NyaXB0OiBwZXJmLXNjcmlwdC5weQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgc2tlbGV0b24gc2NyaXB0IHNpbXBseSBjcmVhdGVzIGEgcHl0aG9uIGZ1bmN0aW9uIGZvciBlYWNoCisgICAgICAgICAgICAgICAgZXZlbnQgdHlwZSBpbiB0aGUgcGVyZi5kYXRhIGZpbGUuIFRoZSBib2R5IG9mIGVhY2ggZnVuY3Rpb24gc2ltcGx5CisgICAgICAgICAgICAgICAgcHJpbnRzIHRoZSBldmVudCBuYW1lIGFsb25nIHdpdGggaXRzIHBhcmFtZXRlcnMuIEZvciBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZGVmIG5ldF9fbmV0aWZfcngoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKyAgICAgICAgICAgIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorICAgICAgICAgICAgc2tiYWRkciwgbGVuLCBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJICAgICBwcmludCAic2tiYWRkcj0ldSwgbGVuPSV1LCBuYW1lPSVzXG4iICUgKHNrYmFkZHIsIGxlbiwgbmFtZSksCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdlIGNhbiBydW4gdGhhdCBzY3JpcHQgZGlyZWN0bHkgdG8gcHJpbnQgYWxsIG9mIHRoZSBldmVudHMKKyAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlIHBlcmYuZGF0YSBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHNjcmlwdCAtcyBwZXJmLXNjcmlwdC5weQorCisgICAgIGluIHRyYWNlX2JlZ2luCisgICAgIHN5c2NhbGxzX19zeXNfZXhpdF9yZWFkICAgICAwIDExNjI0Ljg1NzA4Mjc5NSAgICAgMTI2MiBwZXJmICAgICAgICAgICAgICAgICAgbnI9MywgcmV0PTAKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgIDAgMTE2MjQuODU3MTkzNDk4ICAgICAxMjYyIHBlcmYgICAgICAgICAgICAgICAgICBjb21tPW1pZ3JhdGlvbi8wLCBwaWQ9NiwgcHJpbz0wLCAgICAgIHN1Y2Nlc3M9MSwgdGFyZ2V0X2NwdT0wCisgICAgIGlycV9fc29mdGlycV9yYWlzZSAgICAgICAxIDExNjI0Ljg1ODAyMTYzNSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9lbnRyeSAgICAgICAxIDExNjI0Ljg1ODA3NDA3NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIGlycV9fc29mdGlycV9leGl0ICAgICAgICAxIDExNjI0Ljg1ODA4MTM4OSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgdmVjPVRJTUVSCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTgxNjY0MzQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE5NDU2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTgxNzc5MjQgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc2tiX19rZnJlZV9za2IgICAgICAgICAgIDEgMTE2MjQuODU4ODc4MTg4ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBza2JhZGRyPTM5NDUwNDEyODAsICAgICAgICAgICBsb2NhdGlvbj0zMjQzOTIyMTg0LCBwcm90b2NvbD0wCisgICAgIHNrYl9fa2ZyZWVfc2tiICAgICAgICAgICAxIDExNjI0Ljg1ODk0NTYwOCAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgc2tiYWRkcj0zOTQ1MDM3ODI0LCAgICAgIGxvY2F0aW9uPTMyNDM5MjIxODQsIHByb3RvY29sPTAKKyAgICAgaXJxX19zb2Z0aXJxX3JhaXNlICAgICAgIDEgMTE2MjQuODU5MDIwOTQyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgIDEgMTE2MjQuODU5MDc2OTM1ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgaXJxX19zb2Z0aXJxX2V4aXQgICAgICAgIDEgMTE2MjQuODU5MDgzNDY5ICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICB2ZWM9VElNRVIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTE2NzU2NSAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkxOTI1MzMgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD00NzEKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTIyODA3MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTkyMzM3MDcgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0wCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk1NzMwMDggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMjEzMDE4NDk2LCAgICAgIGNvdW50PTUxMgorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk1ODQ4MTggICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD01MTIKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl9yZWFkICAgICAxIDExNjI0Ljg1OTg2NDU2MiAgICAgMTI2MiB3Z2V0ICAgICAgICAgICAgICAgICAgbnI9MywgZmQ9MywgYnVmPTMwNzc3MDE2MzIsICAgICAgY291bnQ9MTAyNAorICAgICBzeXNjYWxsc19fc3lzX2V4aXRfcmVhZCAgICAgMSAxMTYyNC44NTk4ODg3NzAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIHJldD0xMDI0CisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgMSAxMTYyNC44NTk5MzUxNDAgICAgIDEyNjIgd2dldCAgICAgICAgICAgICAgICAgIG5yPTMsIGZkPTMsIGJ1Zj0zMDc3NzAxNjMyLCAgICAgIGNvdW50PTEwMjQKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgIDEgMTE2MjQuODU5OTQ0MDMyICAgICAxMjYyIHdnZXQgICAgICAgICAgICAgICAgICBucj0zLCByZXQ9MTAyNAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGF0IGluIGl0c2VsZiBpc24ndCB2ZXJ5IHVzZWZ1bDsgYWZ0ZXIgYWxsLCB3ZSBjYW4gYWNjb21wbGlzaAorICAgICAgICAgICAgICAgIHByZXR0eSBtdWNoIHRoZSBzYW1lIHRoaW5nIGJ5IHNpbXBseSBydW5uaW5nICdwZXJmIHNjcmlwdCcKKyAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHBlcmYuZGF0YSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXZSBjYW4gaG93ZXZlciByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBib2RpZXMgd2l0aCB3aGF0ZXZlciB3ZSB3YW50LCBhbmQgdGhlcmVieSBtYWtlIGl0CisgICAgICAgICAgICAgICAgaW5maW5pdGVseSBtb3JlIHVzZWZ1bC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgYSBzaW1wbGUgZXhhbXBsZSwgbGV0J3MganVzdCByZXBsYWNlIHRoZSBwcmludCBzdGF0ZW1lbnRzIGluCisgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIGJvZGllcyB3aXRoIGEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nIGJ1dAorICAgICAgICAgICAgICAgIGluY3JlbWVudCBhIHBlci1ldmVudCBjb3VudC4gV2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4gYWdhaW5zdCBhCisgICAgICAgICAgICAgICAgcGVyZi5kYXRhIGZpbGUsIGVhY2ggdGltZSBhIHBhcnRpY3VsYXIgZXZlbnQgaXMgZW5jb3VudGVyZWQsCisgICAgICAgICAgICAgICAgYSB0YWxseSBpcyBpbmNyZW1lbnRlZCBmb3IgdGhhdCBldmVudC4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkZWYgbmV0X19uZXRpZl9yeChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorICAgICAgICAgICAgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgICAgICBza2JhZGRyLCBsZW4sIG5hbWUpOgorCQkgICAgICAgICAgaW5jX2NvdW50cyhldmVudF9uYW1lKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFYWNoIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gaW4gdGhlIGdlbmVyYXRlZCBjb2RlIGlzIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgdG8gZG8gdGhpcy4gRm9yIGNvbnZlbmllbmNlLCB3ZSBkZWZpbmUgYSBjb21tb24gZnVuY3Rpb24gY2FsbGVkCisgICAgICAgICAgICAgICAgaW5jX2NvdW50cygpIHRoYXQgZWFjaCBoYW5kbGVyIGNhbGxzOyBpbmNfY291bnRzKCkgc2ltcGx5IHRhbGxpZXMKKyAgICAgICAgICAgICAgICBhIGNvdW50IGZvciBlYWNoIGV2ZW50IHVzaW5nIHRoZSAnY291bnRzJyBoYXNoLCB3aGljaCBpcyBhCisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWQgaGFzaCBmdW5jdGlvbiB0aGF0IGRvZXMgUGVybC1saWtlIGF1dG92aXZpZmljYXRpb24sIGEKKyAgICAgICAgICAgICAgICBjYXBhYmlsaXR5IHRoYXQncyBleHRyZW1lbHkgdXNlZnVsIGZvciBraW5kcyBvZiBtdWx0aS1sZXZlbAorICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uIGNvbW1vbmx5IHVzZWQgaW4gcHJvY2Vzc2luZyB0cmFjZXMgKHNlZSBwZXJmJ3MKKyAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIG9uIHRoZSBQeXRob24gbGFuZ3VhZ2UgYmluZGluZyBmb3IgZGV0YWlscyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBjb3VudHMgPSBhdXRvZGljdCgpCisKKyAgICAgZGVmIGluY19jb3VudHMoZXZlbnRfbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvdW50c1tldmVudF9uYW1lXSArPSAxCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb3VudHNbZXZlbnRfbmFtZV0gPSAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZpbmFsbHksIGF0IHRoZSBlbmQgb2YgdGhlIHRyYWNlIHByb2Nlc3NpbmcgcnVuLCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgcHJpbnQgdGhlIHJlc3VsdCBvZiBhbGwgdGhlIHBlci1ldmVudCB0YWxsaWVzLiBGb3IgdGhhdCwgd2UKKyAgICAgICAgICAgICAgICB1c2UgdGhlIHNwZWNpYWwgJ3RyYWNlX2VuZCgpJyBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZiB0cmFjZV9lbmQoKToKKyAgICAgICAgICAgIGZvciBldmVudF9uYW1lLCBjb3VudCBpbiBjb3VudHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIlLTQwcyAlMTBzXG4iICUgKGV2ZW50X25hbWUsIGNvdW50KQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgZW5kIHJlc3VsdCBpcyBhIHN1bW1hcnkgb2YgYWxsIHRoZSBldmVudHMgcmVjb3JkZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBza2JfX3NrYl9jb3B5X2RhdGFncmFtX2lvdmVjICAgICAgICAgICAgICAgICAgMTMxNDgKKyAgICAgaXJxX19zb2Z0aXJxX2VudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Nzk2CisgICAgIGlycV9faXJxX2hhbmRsZXJfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNQorICAgICBpcnFfX3NvZnRpcnFfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTUKKyAgICAgc3lzY2FsbHNfX3N5c19lbnRlcl93cml0ZSAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgIG5ldF9fbmV0X2Rldl94bWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1MgorICAgICBza2JfX2tmcmVlX3NrYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNDcKKyAgICAgc2NoZWRfX3NjaGVkX3dha2V1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTU1CisgICAgIGlycV9faXJxX2hhbmRsZXJfZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgMzgwNAorICAgICBpcnFfX3NvZnRpcnFfcmFpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OTkKKyAgICAgbmV0X19uZXRfZGV2X3F1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUyCisgICAgIHN5c2NhbGxzX19zeXNfZW50ZXJfcmVhZCAgICAgICAgICAgICAgICAgICAgICAxNzU5OQorICAgICBuZXRfX25ldGlmX3JlY2VpdmVfc2tiICAgICAgICAgICAgICAgICAgICAgICAgIDE3NDMKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3JlYWQgICAgICAgICAgICAgICAgICAgICAgIDE3NTk4CisgICAgIG5ldF9fbmV0aWZfcnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorICAgICBuYXBpX19uYXBpX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NzcKKyAgICAgc3lzY2FsbHNfX3N5c19leGl0X3dyaXRlICAgICAgICAgICAgICAgICAgICAgICA4OTkwCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIHByZXR0eSBtdWNoIGV4YWN0bHkgdGhlIHNhbWUgaW5mb3JtYXRpb24gd2UgZ2V0CisgICAgICAgICAgICAgICAgZnJvbSAncGVyZiBzdGF0Jywgd2hpY2ggZ29lcyBhIGxpdHRsZSB3YXkgdG8gc3VwcG9ydCB0aGUgaWRlYQorICAgICAgICAgICAgICAgIG1lbnRpb25lZCBwcmV2aW91c2x5IHRoYXQgZ2l2ZW4gdGhlIHJpZ2h0IGtpbmQgb2YgdHJhY2UgZGF0YSwKKyAgICAgICAgICAgICAgICBoaWdoZXItbGV2ZWwgcHJvZmlsaW5nLXR5cGUgc3VtbWFyaWVzIGNhbiBiZSBkZXJpdmVkIGZyb20gaXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zY3JpcHQtcHl0aG9uJz4ncGVyZiBzY3JpcHQnIHB5dGhvbiBiaW5kaW5nPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc3lzdGVtLXdpZGUtdHJhY2luZy1hbmQtcHJvZmlsaW5nJz4KKyAgICAgICAgICAgIDx0aXRsZT5TeXN0ZW0tV2lkZSBUcmFjaW5nIGFuZCBQcm9maWxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZXhhbXBsZXMgc28gZmFyIGhhdmUgZm9jdXNlZCBvbiB0cmFjaW5nIGEgcGFydGljdWxhciBwcm9ncmFtIG9yCisgICAgICAgICAgICAgICAgd29ya2xvYWQgLSBpbiBvdGhlciB3b3JkcywgZXZlcnkgcHJvZmlsaW5nIHJ1biBoYXMgc3BlY2lmaWVkIHRoZQorICAgICAgICAgICAgICAgIHByb2dyYW0gdG8gcHJvZmlsZSBpbiB0aGUgY29tbWFuZC1saW5lIGUuZy4gJ3BlcmYgcmVjb3JkIHdnZXQgLi4uJy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQncyBhbHNvIHBvc3NpYmxlLCBhbmQgbW9yZSBpbnRlcmVzdGluZyBpbiBtYW55IGNhc2VzLCB0byBydW4gYQorICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHByb2ZpbGUgb3IgdHJhY2Ugd2hpbGUgcnVubmluZyB0aGUgd29ya2xvYWQgaW4gYQorICAgICAgICAgICAgICAgIHNlcGFyYXRlIHNoZWxsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkbyBzeXN0ZW0td2lkZSBwcm9maWxpbmcgb3IgdHJhY2luZywgeW91IHR5cGljYWxseSB1c2UKKyAgICAgICAgICAgICAgICB0aGUgLWEgZmxhZyB0byAncGVyZiByZWNvcmQnLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBkZW1vbnN0cmF0ZSB0aGlzLCBvcGVuIHVwIG9uZSB3aW5kb3cgYW5kIHN0YXJ0IHRoZSBwcm9maWxlCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIC1hIGZsYWcgKHByZXNzIEN0cmwtQyB0byBzdG9wIHRyYWNpbmcpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtZyAtYQorICAgICBeQ1sgcGVyZiByZWNvcmQ6IFdva2VuIHVwIDYgdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAxLjQwMCBNQiBwZXJmLmRhdGEgKH42MTE3MiBzYW1wbGVzKSBdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluIGFub3RoZXIgd2luZG93LCBydW4gdGhlIHdnZXQgdGVzdDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPgorICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIZXJlIHdlIHNlZSBlbnRyaWVzIG5vdCBvbmx5IGZvciBvdXIgd2dldCBsb2FkLCBidXQgZm9yIG90aGVyCisgICAgICAgICAgICAgICAgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbSBhcyB3ZWxsOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvcGVyZi1zeXN0ZW13aWRlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEluIHRoZSBzbmFwc2hvdCBhYm92ZSwgd2UgY2FuIHNlZSBjYWxsY2hhaW5zIHRoYXQgb3JpZ2luYXRlIGluCisgICAgICAgICAgICAgICAgbGliYywgYW5kIGEgY2FsbGNoYWluIGZyb20gWG9yZyB0aGF0IGRlbW9uc3RyYXRlcyB0aGF0IHdlJ3JlCisgICAgICAgICAgICAgICAgdXNpbmcgYSBwcm9wcmlldGFyeSBYIGRyaXZlciBpbiB1c2Vyc3BhY2UgKG5vdGljZSB0aGUgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICBvZiAnUFZSJyBhbmQgc29tZSBvdGhlciB1bnJlc29sdmFibGUgc3ltYm9scyBpbiB0aGUgZXhwYW5kZWQKKyAgICAgICAgICAgICAgICBYb3JnIGNhbGxjaGFpbikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYm90aCBrZXJuZWwgYW5kIHVzZXJzcGFjZSBlbnRyaWVzIGluIHRoZQorICAgICAgICAgICAgICAgIGFib3ZlIHNuYXBzaG90LiBXZSBjYW4gYWxzbyB0ZWxsIHBlcmYgdG8gZm9jdXMgb24gdXNlcnNwYWNlIGJ1dAorICAgICAgICAgICAgICAgIHByb3ZpZGluZyBhIG1vZGlmaWVyLCBpbiB0aGlzIGNhc2UgJ3UnLCB0byB0aGUgJ2N5Y2xlcycgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBjb3VudGVyIHdoZW4gd2UgcmVjb3JkIGEgcHJvZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWcgLWEgLWUgY3ljbGVzOnUKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAyIHRpbWVzIHRvIHdyaXRlIGRhdGEgXQorICAgICBbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgMC4zNzYgTUIgcGVyZi5kYXRhICh+MTY0NDMgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcmVwb3J0LWN5Y2xlcy11LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGljZSBpbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2Ugc2VlIG9ubHkgdXNlcnNwYWNlIGVudHJpZXMgKFsuXSkKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgd2UgY2FuIHByZXNzICdlbnRlcicgb24gYSBsZWFmIG5vZGUgYW5kIHNlbGVjdCB0aGUgJ1pvb20KKyAgICAgICAgICAgICAgICBpbnRvIERTTycgbWVudSBpdGVtIHRvIHNob3cgb25seSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgRFNPLiBJbiB0aGUgc2NyZWVuc2hvdCBiZWxvdywgd2UndmUgem9vbWVkIGludG8gdGhlCisgICAgICAgICAgICAgICAgJ2xpYmMnIERTTyB3aGljaCBzaG93cyBhbGwgdGhlIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIGxpYmMteHh4LnNvIERTTy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtc3lzdGVtd2lkZS1saWJjLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdlIGNhbiBhbHNvIHVzZSB0aGUgc3lzdGVtLXdpZGUgLWEgc3dpdGNoIHRvIGRvIHN5c3RlbS13aWRlCisgICAgICAgICAgICAgICAgdHJhY2luZy4gSGVyZSB3ZSdsbCB0cmFjZSBhIGNvdXBsZSBvZiBzY2hlZHVsZXIgZXZlbnRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHJlY29yZCAtYSAtZSBzY2hlZDpzY2hlZF9zd2l0Y2ggLWUgc2NoZWQ6c2NoZWRfd2FrZXVwCisgICAgIF5DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMzggdGltZXMgdG8gd3JpdGUgZGF0YSBdCisgICAgIFsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA5Ljc4MCBNQiBwZXJmLmRhdGEgKH40MjcyOTkgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbG9vayBhdCB0aGUgcmF3IG91dHB1dCB1c2luZyAncGVyZiBzY3JpcHQnIHdpdGggbm8KKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA0NTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ2MDA2Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09cGVyZiBwcmV2X3BpZD0xMzgzIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SKyA9PT4gbmV4dF9jb21tPWt3b3JrZXIvMToxIG5leHRfcGlkPTIxIG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMToxICAgIDIxIFswMDFdICA2MTcxLjQ2MDA5Mzogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8xOjEgcHJldl9waWQ9MjEgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1wZXJmIG5leHRfcGlkPTEzODMgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDYxNzEuNDY4MDYzOiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNjE3MS40NjgxMDc6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNjE3MS40NjgxNDM6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwMzk6IHNjaGVkX3dha2V1cDogY29tbT1rd29ya2VyLzE6MSBwaWQ9MjEgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAxCisgICAgICAgICAgICAgICAgcGVyZiAgMTM4MyBbMDAxXSAgNjE3MS40NzAwNTg6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXBlcmYgcHJldl9waWQ9MTM4MyBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UisgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNjE3MS40NzAwODI6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09cGVyZiBuZXh0X3BpZD0xMzgzIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxMzgzIFswMDFdICA2MTcxLjQ4MDAzNTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdwZXJmLWZpbHRlcmluZyc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkZpbHRlcmluZzwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTm90aWNlIHRoYXQgdGhlcmUgYXJlIGEgbG90IG9mIGV2ZW50cyB0aGF0IGRvbid0IHJlYWxseSBoYXZlCisgICAgICAgICAgICAgICAgICAgIGFueXRoaW5nIHRvIGRvIHdpdGggd2hhdCB3ZSdyZSBpbnRlcmVzdGVkIGluLCBuYW1lbHkgZXZlbnRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2NoZWR1bGUgJ3BlcmYnIGl0c2VsZiBpbiBhbmQgb3V0IG9yIHRoYXQgd2FrZSBwZXJmIHVwLgorICAgICAgICAgICAgICAgICAgICBXZSBjYW4gZ2V0IHJpZCBvZiB0aG9zZSBieSB1c2luZyB0aGUgJy0tZmlsdGVyJyBvcHRpb24gLQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCBldmVudCB3ZSBzcGVjaWZ5IHVzaW5nIC1lLCB3ZSBjYW4gYWRkIGEgLS1maWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhhdCB0byBmaWx0ZXIgb3V0IHRyYWNlIGV2ZW50cyB0aGF0IGNvbnRhaW4gZmllbGRzCisgICAgICAgICAgICAgICAgICAgIHdpdGggc3BlY2lmaWMgdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgcGVyZiByZWNvcmQgLWEgLWUgc2NoZWQ6c2NoZWRfc3dpdGNoIC0tZmlsdGVyICduZXh0X2NvbW0gIT0gcGVyZiAmYW1wOyZhbXA7IHByZXZfY29tbSAhPSBwZXJmJyAtZSBzY2hlZDpzY2hlZF93YWtldXAgLS1maWx0ZXIgJ2NvbW0gIT0gcGVyZicKKyAgICAgXkNbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAzOCB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDkuNjg4IE1CIHBlcmYuZGF0YSAofjQyMzI3OSBzYW1wbGVzKSBdCisKKworICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDBdICA3OTMyLjE2MjE4MDogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8wIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzA6MyBuZXh0X3BpZD0xMjA5IG5leHRfcHJpbz0xMjAKKyAgICAgICAgIGt3b3JrZXIvMDozICAxMjA5IFswMDBdICA3OTMyLjE2MjIzNjogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09a3dvcmtlci8wOjMgcHJldl9waWQ9MTIwOSBwcmV2X3ByaW89MTIwIHByZXZfc3RhdGU9UyA9PT4gbmV4dF9jb21tPXN3YXBwZXIvMCBuZXh0X3BpZD0wIG5leHRfcHJpbz0xMjAKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE3MDA0ODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE4MDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjE5MDAzODogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIwMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIxMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICAgICBwZXJmICAxNDA3IFswMDFdICA3OTMyLjIyMDA0NDogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDExMTogc2NoZWRfd2FrZXVwOiBjb21tPWt3b3JrZXIvMToxIHBpZD0yMSBwcmlvPTEyMCBzdWNjZXNzPTEgdGFyZ2V0X2NwdT0wMDEKKyAgICAgICAgICAgICBzd2FwcGVyICAgICAwIFswMDFdICA3OTMyLjIzMDE0Njogc2NoZWRfc3dpdGNoOiBwcmV2X2NvbW09c3dhcHBlci8xIHByZXZfcGlkPTAgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVIgPT0+IG5leHRfY29tbT1rd29ya2VyLzE6MSBuZXh0X3BpZD0yMSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzE6MSAgICAyMSBbMDAxXSAgNzkzMi4yMzAyMDU6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMToxIHByZXZfcGlkPTIxIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1TID09PiBuZXh0X2NvbW09c3dhcHBlci8xIG5leHRfcGlkPTAgbmV4dF9wcmlvPTEyMAorICAgICAgICAgICAgIHN3YXBwZXIgICAgIDAgWzAwMF0gIDc5MzIuMzI2MTA5OiBzY2hlZF93YWtldXA6IGNvbW09a3dvcmtlci8wOjMgcGlkPTEyMDkgcHJpbz0xMjAgc3VjY2Vzcz0xIHRhcmdldF9jcHU9MDAwCisgICAgICAgICAgICAgc3dhcHBlciAgICAgMCBbMDAwXSAgNzkzMi4zMjYxNzE6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPXN3YXBwZXIvMCBwcmV2X3BpZD0wIHByZXZfcHJpbz0xMjAgcHJldl9zdGF0ZT1SID09PiBuZXh0X2NvbW09a3dvcmtlci8wOjMgbmV4dF9waWQ9MTIwOSBuZXh0X3ByaW89MTIwCisgICAgICAgICBrd29ya2VyLzA6MyAgMTIwOSBbMDAwXSAgNzkzMi4zMjYyMTQ6IHNjaGVkX3N3aXRjaDogcHJldl9jb21tPWt3b3JrZXIvMDozIHByZXZfcGlkPTEyMDkgcHJldl9wcmlvPTEyMCBwcmV2X3N0YXRlPVMgPT0+IG5leHRfY29tbT1zd2FwcGVyLzAgbmV4dF9waWQ9MCBuZXh0X3ByaW89MTIwCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB3ZSd2ZSBmaWx0ZXJlZCBvdXQgYWxsIGV2ZW50cyB0aGF0IGhhdmUgJ3BlcmYnCisgICAgICAgICAgICAgICAgICAgIGluIHRoZWlyICdjb21tJyBvciAnY29tbV9wcmV2JyBvciAnY29tbV9uZXh0JyBmaWVsZHMuIE5vdGljZQorICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXJlIGFyZSBzdGlsbCBldmVudHMgcmVjb3JkZWQgZm9yIHBlcmYsIGJ1dCBub3RpY2UKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB0aG9zZSBldmVudHMgZG9uJ3QgaGF2ZSB2YWx1ZXMgb2YgJ3BlcmYnIGZvciB0aGUgZmlsdGVyZWQKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLiBUbyBjb21wbGV0ZWx5IGZpbHRlciBvdXQgYW55dGhpbmcgZnJvbSBwZXJmIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmssIGJ1dCBmb3IgdGhlIHB1cnBvc2Ugb2YgZGVtb25zdHJhdGluZworICAgICAgICAgICAgICAgICAgICBob3cgdG8gdXNlIGZpbHRlcnMsIGl0J3MgY2xvc2UgZW5vdWdoLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXQgb2YgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVycyBkZWZpbmVkIGJ5IHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0uIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZnRyYWNlL3RyYWNlY21kL2tlcm5lbHNoYXJrIHNlY3Rpb24gZm9yIG1vcmUgZGlzY3Vzc2lvbiBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGVzZSBldmVudCBmaWx0ZXJzLgorICAgICAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZXNlIGV2ZW50IGZpbHRlcnMgYXJlIGltcGxlbWVudGVkIGJ5IGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC1wdXJwb3NlIHBzZXVkby1pbnRlcnByZXRlciBpbiB0aGUga2VybmVsIGFuZCBhcmUgYW4KKyAgICAgICAgICAgICAgICAgICAgaW50ZWdyYWwgYW5kIGluZGlzcGVuc2FibGUgcGFydCBvZiB0aGUgcGVyZiBkZXNpZ24gYXMgaXQKKyAgICAgICAgICAgICAgICAgICAgcmVsYXRlcyB0byB0cmFjaW5nLiAga2VybmVsLWJhc2VkIGV2ZW50IGZpbHRlcnMgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0byBwcmVjaXNlbHkgdGhyb3R0bGUgdGhlIGV2ZW50IHN0cmVhbSB0aGF0IGFwcGVhcnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdXNlciBzcGFjZSwgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gcHJvdmlkZSBiaW5kaW5ncyB0byByZWFsCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1taW5nIGxhbmd1YWdlcyBmb3IgcG9zdHByb2Nlc3NpbmcgdGhlIGV2ZW50IHN0cmVhbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciB0aGUgaW50ZWxsaWdlbnQgYW5kIGZsZXhpYmxlCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbmluZyBvZiBwcm9jZXNzaW5nIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJhc3QgdGhpcyB3aXRoIG90aGVyIHRvb2xzIHN1Y2ggYXMgU3lzdGVtVGFwLCB3aGljaCBkb2VzCisgICAgICAgICAgICAgICAgICAgIGFsbCBvZiBpdHMgcHJvY2Vzc2luZyBpbiB0aGUga2VybmVsIGFuZCBhcyBzdWNoIHJlcXVpcmVzIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCBwcm9qZWN0LWRlZmluZWQgbGFuZ3VhZ2UgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXNpZ24sIG9yIExUVG5nLCB3aGVyZSBldmVyeXRoaW5nIGlzIHNlbnQgdG8gdXNlcnNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICBhcyBzdWNoIHJlcXVpcmVzIGEgc3VwZXItZWZmaWNpZW50IGtlcm5lbC10by11c2Vyc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IG1lY2hhbmlzbSBpbiBvcmRlciB0byBmdW5jdGlvbiBwcm9wZXJseS4gIFdoaWxlCisgICAgICAgICAgICAgICAgICAgIHBlcmYgY2VydGFpbmx5IGNhbiBiZW5lZml0IGZyb20gZm9yIGluc3RhbmNlIGFkdmFuY2VzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZXNpZ24gb2YgdGhlIHRyYW5zcG9ydCwgaXQgZG9lc24ndCBmdW5kYW1lbnRhbGx5IGRlcGVuZAorICAgICAgICAgICAgICAgICAgICBvbiB0aGVtLiAgQmFzaWNhbGx5LCBpZiB5b3UgZmluZCB0aGF0IHlvdXIgcGVyZiB0cmFjaW5nCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGlzIGNhdXNpbmcgYnVmZmVyIEkvTyBvdmVycnVucywgaXQgcHJvYmFibHkKKyAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhhdCB5b3UgYXJlbid0IHRha2luZyBlbm91Z2ggYWR2YW50YWdlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgZmlsdGVyaW5nIGVuZ2luZS4KKyAgICAgICAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1keW5hbWljLXRyYWNlcG9pbnRzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Vc2luZyBEeW5hbWljIFRyYWNlcG9pbnRzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgcGVyZiBpc24ndCByZXN0cmljdGVkIHRvIHRoZSBmaXhlZCBzZXQgb2Ygc3RhdGljIHRyYWNlcG9pbnRzCisgICAgICAgICAgICAgICAgbGlzdGVkIGJ5ICdwZXJmIGxpc3QnLiBVc2VycyBjYW4gYWxzbyBhZGQgdGhlaXIgb3duICdkeW5hbWljJworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIGFueXdoZXJlIGluIHRoZSBrZXJuZWwuIEZvciBpbnN0YW5jZSwgc3VwcG9zZSB3ZQorICAgICAgICAgICAgICAgIHdhbnQgdG8gZGVmaW5lIG91ciBvd24gdHJhY2Vwb2ludCBvbiBkb19mb3JrKCkuIFdlIGNhbiBkbyB0aGF0CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlICdwZXJmIHByb2JlJyBwZXJmIHN1YmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcHJvYmUgZG9fZm9yaworICAgICBBZGRlZCBuZXcgZXZlbnQ6CisgICAgICAgcHJvYmU6ZG9fZm9yayAgICAgICAgKG9uIGRvX2ZvcmspCisKKyAgICAgWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBzdWNoIGFzOgorCisJICAgICBwZXJmIHJlY29yZCAtZSBwcm9iZTpkb19mb3JrIC1hUiBzbGVlcCAxCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFkZGluZyBhIG5ldyB0cmFjZXBvaW50IHZpYSAncGVyZiBwcm9iZScgcmVzdWx0cyBpbiBhbiBldmVudAorICAgICAgICAgICAgICAgIHdpdGggYWxsIHRoZSBleHBlY3RlZCBmaWxlcyBhbmQgZm9ybWF0IGluCisgICAgICAgICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMsIGp1c3QgdGhlIHNhbWUgYXMgZm9yIHN0YXRpYworICAgICAgICAgICAgICAgIHRyYWNlcG9pbnRzIChhcyBkaXNjdXNzZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIHRyYWNlIGV2ZW50cworICAgICAgICAgICAgICAgIHN1YnN5c3RlbSBzZWN0aW9uOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9wcm9iZS9kb19mb3JrIyBscyAtYWwKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgLgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiAuLgorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBlbmFibGUKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBPY3QgMjggMTE6NDIgZmlsdGVyCisgICAgIC1yLS1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgT2N0IDI4IDExOjQyIGZvcm1hdAorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE9jdCAyOCAxMTo0MiBpZAorCisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvcHJvYmUvZG9fZm9yayMgY2F0IGZvcm1hdAorICAgICBuYW1lOiBkb19mb3JrCisgICAgIElEOiA5NDQKKyAgICAgZm9ybWF0OgorCSAgICAgZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7CXNpZ25lZDowOworCSAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsJc2lnbmVkOjE7CisJICAgICBmaWVsZDppbnQgY29tbW9uX3BhZGRpbmc7CW9mZnNldDo4OwlzaXplOjQ7CXNpZ25lZDoxOworCisJICAgICBmaWVsZDp1bnNpZ25lZCBsb25nIF9fcHJvYmVfaXA7CW9mZnNldDoxMjsJc2l6ZTo0OwlzaWduZWQ6MDsKKworICAgICBwcmludCBmbXQ6ICIoJWx4KSIsIFJFQy0+X19wcm9iZV9pcAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbGlzdCBhbGwgZHluYW1pYyB0cmFjZXBvaW50cyBjdXJyZW50bHkgaW4gZXhpc3RlbmNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBwZXJmIHByb2JlIC1sCisgICAgICBwcm9iZTpkb19mb3JrICAgICAgICAob24gZG9fZm9yaykKKyAgICAgIHByb2JlOnNjaGVkdWxlICAgICAgIChvbiBzY2hlZHVsZSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTGV0J3MgcmVjb3JkIHN5c3RlbS13aWRlICgnc2xlZXAgMzAnIGlzIGEgdHJpY2sgZm9yIHJlY29yZGluZworICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIGJ1dCBiYXNpY2FsbHkgZG8gbm90aGluZyBhbmQgdGhlbiB3YWtlIHVwIGFmdGVyCisgICAgICAgICAgICAgICAgMzAgc2Vjb25kcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgcmVjb3JkIC1nIC1hIC1lIHByb2JlOmRvX2Zvcmsgc2xlZXAgMzAKKyAgICAgWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KKyAgICAgWyBwZXJmIHJlY29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuMDg3IE1CIHBlcmYuZGF0YSAofjM4MTIgc2FtcGxlcykgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBVc2luZyAncGVyZiBzY3JpcHQnIHdlIGNhbiBzZWUgZWFjaCBkb19mb3JrIGV2ZW50IHRoYXQgZmlyZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHBlcmYgc2NyaXB0CisKKyAgICAgIyA9PT09PT09PQorICAgICAjIGNhcHR1cmVkIG9uOiBTdW4gT2N0IDI4IDExOjU1OjE4IDIwMTIKKyAgICAgIyBob3N0bmFtZSA6IGNyb3duYmF5CisgICAgICMgb3MgcmVsZWFzZSA6IDMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAjIHBlcmYgdmVyc2lvbiA6IDMuNC4xMQorICAgICAjIGFyY2ggOiBpNjg2CisgICAgICMgbnJjcHVzIG9ubGluZSA6IDIKKyAgICAgIyBucmNwdXMgYXZhaWwgOiAyCisgICAgICMgY3B1ZGVzYyA6IEludGVsKFIpIEF0b20oVE0pIENQVSBFNjYwIEAgMS4zMEdIegorICAgICAjIGNwdWlkIDogR2VudWluZUludGVsLDYsMzgsMQorICAgICAjIHRvdGFsIG1lbW9yeSA6IDEwMTcxODQga0IKKyAgICAgIyBjbWRsaW5lIDogL3Vzci9iaW4vcGVyZiByZWNvcmQgLWcgLWEgLWUgcHJvYmU6ZG9fZm9yayBzbGVlcCAzMAorICAgICAjIGV2ZW50IDogbmFtZSA9IHByb2JlOmRvX2ZvcmssIHR5cGUgPSAyLCBjb25maWcgPSAweDNiMCwgY29uZmlnMSA9IDB4MCwgY29uZmlnMiA9IDB4MCwgZXhjbF91c3IgPSAwLCBleGNsX2tlcm4KKyAgICAgID0gMCwgaWQgPSB7IDUsIDYgfQorICAgICAjIEhFQURFUl9DUFVfVE9QT0xPR1kgaW5mbyBhdmFpbGFibGUsIHVzZSAtSSB0byBkaXNwbGF5CisgICAgICMgPT09PT09PT0KKyAgICAgIworICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjExLjM3ODMxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk1IFswMDFdIDM0MjExLjM4MDM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzMjM1MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjExLjYzOTkxNzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjE3LjU0MTYwMzogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMjk5IFswMDFdIDM0MjE3LjU0MzU4NDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE3LjY5NzQ1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjA4NTczNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDBdIDM0MjE5LjEyMTM1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgZ3RodW1iICAxMzAwIFswMDFdIDM0MjE5LjI2NDU1MTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICBwY21hbmZtICAxMjk2IFswMDBdIDM0MjE5LjU5MDM4MDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjI0Ljk1NTk2NTogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzA2IFswMDFdIDM0MjI0Ljk1Nzk3MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjAzODIxNDogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDFdIDM0MjI1LjA0NDIxODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtdGVybWluICAxMzA3IFswMDBdIDM0MjI1LjA0NjQ0MjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMTk3IFswMDFdIDM0MjM3LjExMjEzODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgbWF0Y2hib3gtZGVza3RvICAxMzExIFswMDFdIDM0MjM3LjExNDEwNjogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgICBnYWt1ICAxMzEyIFswMDBdIDM0MjM3LjIwMjM4ODogZG9fZm9yazogKGMxMDI4NDYwKQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdXNpbmcgJ3BlcmYgcmVwb3J0JyBvbiB0aGUgc2FtZSBmaWxlLCB3ZSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgIGNhbGxncmFwaHMgZnJvbSBzdGFydGluZyBhIGZldyBwcm9ncmFtcyBkdXJpbmcgdGhvc2UgMzAgc2Vjb25kczoKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3BlcmYtcHJvYmUtZG9fZm9yay1wcm9maWxlLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSB0cmFjZSBldmVudHMgc3Vic3lzdGVtIGFjY29tbW9kYXRlIHN0YXRpYworICAgICAgICAgICAgICAgIGFuZCBkeW5hbWljIHRyYWNlcG9pbnRzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IC0gdGhlcmUncyBubworICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgYXMgZmFyIGFzIHRoZSBpbmZyYXN0cnVjdHVyZSBpcyBjb25jZXJuZWQuICBTZWUgdGhlCisgICAgICAgICAgICAgICAgZnRyYWNlIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgdHJhY2UgZXZlbnQgc3Vic3lzdGVtLgorICAgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IER5bmFtaWMgdHJhY2Vwb2ludHMgYXJlIGltcGxlbWVudGVkIHVuZGVyIHRoZQorICAgICAgICAgICAgICAgIGNvdmVycyBieSBrcHJvYmVzIGFuZCB1cHJvYmVzLiAga3Byb2JlcyBhbmQgdXByb2JlcyBhcmUgYWxzbyB1c2VkCisgICAgICAgICAgICAgICAgYnkgYW5kIGluIGZhY3QgYXJlIHRoZSBtYWluIGZvY3VzIG9mIFN5c3RlbVRhcC4KKyAgICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3BlcmYtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubGluZSB2ZXJzaW9ucyBvZiB0aGUgbWFuIHBhZ2VzIGZvciB0aGUgY29tbWFuZHMgZGlzY3Vzc2VkIGluIHRoaXMKKyAgICAgICAgICAgIHNlY3Rpb24gY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1zdGF0Jz4ncGVyZiBzdGF0JyBtYW5wYWdlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzEvcGVyZi1yZWNvcmQnPidwZXJmIHJlY29yZCcgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtcmVwb3J0Jz4ncGVyZiByZXBvcnQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmLXByb2JlJz4ncGVyZiBwcm9iZScgbWFucGFnZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0Jz4ncGVyZiBzY3JpcHQnIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvY3VtZW50YXRpb24gb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL3BlcmYtc2NyaXB0LXB5dGhvbic+J3BlcmYgc2NyaXB0JyBweXRob24gYmluZGluZzwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIHRvcC1sZXZlbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9wZXJmJz5wZXJmKDEpIG1hbnBhZ2U8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTm9ybWFsbHksIHlvdSBzaG91bGQgYmUgYWJsZSB0byBpbnZva2UgdGhlIG1hbiBwYWdlcyB2aWEgcGVyZgorICAgICAgICAgICAgaXRzZWxmIGUuZy4gJ3BlcmYgaGVscCcgb3IgJ3BlcmYgaGVscCByZWNvcmQnLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0IFlvY3RvIGRvZXNuJ3QgaW5zdGFsbCBtYW4gcGFnZXMsIGJ1dCBwZXJmCisgICAgICAgICAgICBpbnZva2VzIHRoZSBtYW4gcGFnZXMgZm9yIG1vc3QgaGVscCBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgYnVnCisgICAgICAgICAgICBhbmQgaXMgYmVpbmcgYWRkcmVzc2VkIGJ5IGEgWW9jdG8gYnVnOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg4Jz5CdWcgMzM4OCAtIHBlcmY6IGVuYWJsZSBtYW4gcGFnZXMgZm9yIGJhc2ljICdoZWxwJyBmdW5jdGlvbmFsaXR5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtYW4gcGFnZXMgaW4gdGV4dCBmb3JtLCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgZmlsZXMsIHN1Y2ggYXMKKyAgICAgICAgICAgIGEgc2V0IG9mIGV4YW1wbGVzLCBjYW4gYmUgZm91bmQgaW4gdGhlICdwZXJmJyBkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICBrZXJuZWwgdHJlZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVyZSdzIGFsc28gYSBuaWNlIHBlcmYgdHV0b3JpYWwgb24gdGhlIHBlcmYgd2lraSB0aGF0IGdvZXMKKyAgICAgICAgICAgIGludG8gbW9yZSBkZXRhaWwgdGhhbiB3ZSBkbyBoZXJlIGluIGNlcnRhaW4gYXJlYXM6CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3BlcmYud2lraS5rZXJuZWwub3JnL2luZGV4LnBocC9UdXRvcmlhbCc+UGVyZiBUdXRvcmlhbDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1mdHJhY2UnPgorICAgIDx0aXRsZT5mdHJhY2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgICdmdHJhY2UnIGxpdGVyYWxseSByZWZlcnMgdG8gdGhlICdmdHJhY2UgZnVuY3Rpb24gdHJhY2VyJyBidXQgaW4KKyAgICAgICAgcmVhbGl0eSB0aGlzIGVuY29tcGFzc2VzIGEgbnVtYmVyIG9mIHJlbGF0ZWQgdHJhY2VycyBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBpbmZyYXN0cnVjdHVyZSB0aGF0IHRoZXkgYWxsIG1ha2UgdXNlIG9mLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdmdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUgYmFzaWMKKyAgICAgICAgICAgIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIGZ0cmFjZSwgdHJhY2UtY21kLCBhbmQga2VybmVsc2hhcmsgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtLAorICAgICAgICAgICAgYW5kIGFyZSByZWFkeSB0byBnbyBvdXQtb2YtdGhlLWJveCAtIG5vIGFkZGl0aW9uYWwgc2V0dXAgaXMKKyAgICAgICAgICAgIG5lY2Vzc2FyeS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZAorICAgICAgICAgICAgdG8gdGhlIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBmdHJhY2Ugb24gdGhlIHRhcmdldC4ga2VybmVsc2hhcmsKKyAgICAgICAgICAgIGlzIGEgR1VJIGFwcGxpY2F0aW9uIGFuZCBpZiB5b3UgdXNlIHRoZSAnLVgnIG9wdGlvbiB0byBzc2ggeW91CisgICAgICAgICAgICBjYW4gaGF2ZSB0aGUga2VybmVsc2hhcmsgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5CisgICAgICAgICAgICByZW1vdGVseSBvbiB0aGUgaG9zdCBpZiB5b3Ugd2FudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdiYXNpYy1mdHJhY2UtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgZnRyYWNlIHVzYWdlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICdmdHJhY2UnIGVzc2VudGlhbGx5IHJlZmVycyB0byBldmVyeXRoaW5nIGluY2x1ZGVkIGluCisgICAgICAgICAgICB0aGUgL3RyYWNpbmcgZGlyZWN0b3J5IG9mIHRoZSBtb3VudGVkIGRlYnVnZnMgZmlsZXN5c3RlbQorICAgICAgICAgICAgKFlvY3RvIGZvbGxvd3MgdGhlIHN0YW5kYXJkIGNvbnZlbnRpb24gYW5kIG1vdW50cyBpdAorICAgICAgICAgICAgYXQgL3N5cy9rZXJuZWwvZGVidWcpLiBIZXJlJ3MgYSBsaXN0aW5nIG9mIGFsbCB0aGUgZmlsZXMKKyAgICAgICAgICAgIGZvdW5kIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgb24gYSBZb2N0byBzeXN0ZW06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgbHMKKyAgICAgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgIGtwcm9iZV9ldmVudHMgICAgICAgICAgICAgICB0cmFjZQorICAgICBhdmFpbGFibGVfZXZlbnRzICAgICAgICAgICAga3Byb2JlX3Byb2ZpbGUgICAgICAgICAgICAgIHRyYWNlX2Nsb2NrCisgICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgdHJhY2VfbWFya2VyCisgICAgIGF2YWlsYWJsZV90cmFjZXJzICAgICAgICAgICBwZXJfY3B1ICAgICAgICAgICAgICAgICAgICAgdHJhY2Vfb3B0aW9ucworICAgICBidWZmZXJfc2l6ZV9rYiAgICAgICAgICAgICAgcHJpbnRrX2Zvcm1hdHMgICAgICAgICAgICAgIHRyYWNlX3BpcGUKKyAgICAgYnVmZmVyX3RvdGFsX3NpemVfa2IgICAgICAgIHNhdmVkX2NtZGxpbmVzICAgICAgICAgICAgICB0cmFjaW5nX2NwdW1hc2sKKyAgICAgY3VycmVudF90cmFjZXIgICAgICAgICAgICAgIHNldF9ldmVudCAgICAgICAgICAgICAgICAgICB0cmFjaW5nX2VuYWJsZWQKKyAgICAgZHluX2Z0cmFjZV90b3RhbF9pbmZvICAgICAgIHNldF9mdHJhY2VfZmlsdGVyICAgICAgICAgICB0cmFjaW5nX29uCisgICAgIGVuYWJsZWRfZnVuY3Rpb25zICAgICAgICAgICBzZXRfZnRyYWNlX25vdHJhY2UgICAgICAgICAgdHJhY2luZ190aHJlc2gKKyAgICAgZXZlbnRzICAgICAgICAgICAgICAgICAgICAgIHNldF9mdHJhY2VfcGlkCisgICAgIGZyZWVfYnVmZmVyICAgICAgICAgICAgICAgICBzZXRfZ3JhcGhfZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBmaWxlcyBsaXN0ZWQgYWJvdmUgYXJlIHVzZWQgZm9yIHZhcmlvdXMgcHVycG9zZXMgLQorICAgICAgICAgICAgc29tZSByZWxhdGUgZGlyZWN0bHkgdG8gdGhlIHRyYWNlcnMgdGhlbXNlbHZlcywgb3RoZXJzIGFyZQorICAgICAgICAgICAgdXNlZCB0byBzZXQgdHJhY2luZyBvcHRpb25zLCBhbmQgeWV0IG90aGVycyBhY3R1YWxseSBjb250YWluCisgICAgICAgICAgICB0aGUgdHJhY2luZyBvdXRwdXQgd2hlbiBhIHRyYWNlciBpcyBpbiBlZmZlY3QuIFNvbWUgb2YgdGhlCisgICAgICAgICAgICBmdW5jdGlvbnMgY2FuIGJlIGd1ZXNzZWQgZnJvbSB0aGVpciBuYW1lcywgb3RoZXJzIG5lZWQKKyAgICAgICAgICAgIGV4cGxhbmF0aW9uOyBpbiBhbnkgY2FzZSwgd2UnbGwgY292ZXIgc29tZSBvZiB0aGUgZmlsZXMgd2UKKyAgICAgICAgICAgIHNlZSBoZXJlIGJlbG93IGJ1dCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIG90aGVycywgcGxlYXNlCisgICAgICAgICAgICBzZWUgdGhlIGZ0cmFjZSBkb2N1bWVudGF0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZSdsbCBzdGFydCBieSBsb29raW5nIGF0IHNvbWUgb2YgdGhlIGF2YWlsYWJsZSBidWlsdC1pbgorICAgICAgICAgICAgdHJhY2Vycy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgY2F0J2luZyB0aGUgJ2F2YWlsYWJsZV90cmFjZXJzJyBmaWxlIGxpc3RzIHRoZSBzZXQgb2YKKyAgICAgICAgICAgIGF2YWlsYWJsZSB0cmFjZXJzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2N1cnJlbnRfdHJhY2VyJyBmaWxlIGNvbnRhaW5zIHRoZSB0cmFjZXIgY3VycmVudGx5IGluCisgICAgICAgICAgICBlZmZlY3Q6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IGN1cnJlbnRfdHJhY2VyCisgICAgIG5vcAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGFib3ZlIGxpc3Rpbmcgb2YgY3VycmVudF90cmFjZXIgc2hvd3MgdGhhdAorICAgICAgICAgICAgdGhlICdub3AnIHRyYWNlciBpcyBpbiBlZmZlY3QsIHdoaWNoIGlzIGp1c3QgYW5vdGhlcgorICAgICAgICAgICAgd2F5IG9mIHNheWluZyB0aGF0IHRoZXJlJ3MgYWN0dWFsbHkgbm8gdHJhY2VyCisgICAgICAgICAgICBjdXJyZW50bHkgaW4gZWZmZWN0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBlY2hvJ2luZyBvbmUgb2YgdGhlIGF2YWlsYWJsZV90cmFjZXJzIGludG8gY3VycmVudF90cmFjZXIKKyAgICAgICAgICAgIG1ha2VzIHRoZSBzcGVjaWZpZWQgdHJhY2VyIHRoZSBjdXJyZW50IHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgY3VycmVudF90cmFjZXIKKyAgICAgZnVuY3Rpb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBzZXRzIHRoZSBjdXJyZW50IHRyYWNlciB0byBiZSB0aGUKKyAgICAgICAgICAgICdmdW5jdGlvbiB0cmFjZXInLiBUaGlzIHRyYWNlciB0cmFjZXMgZXZlcnkgZnVuY3Rpb24KKyAgICAgICAgICAgIGNhbGwgaW4gdGhlIGtlcm5lbCBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGFzIHRoZQorICAgICAgICAgICAgY29udGVudHMgb2YgdGhlICd0cmFjZScgZmlsZS4gUmVhZGluZyB0aGUgJ3RyYWNlJyBmaWxlCisgICAgICAgICAgICBsaXN0cyB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIGZ1bmN0aW9uIGNhbGxzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICB0cmFjZWQgYnkgdGhlIGZ1bmN0aW9uIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIyB0cmFjZXI6IGZ1bmN0aW9uCisgICAgICMKKyAgICAgIyBlbnRyaWVzLWluLWJ1ZmZlci9lbnRyaWVzLXdyaXR0ZW46IDMxMDYyOS83NjY0NzEgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTY5OiBrdGltZV9nZXRfcmVhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcwOiBnZXRuc3RpbWVvZmRheSAmbHQ7LWt0aW1lX2dldF9yZWFsCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLi4xICAgNDcwLjg2NzE3MTogbnNfdG9fdGltZXZhbCAmbHQ7LWludGVsX2lkbGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcxOiBuc190b190aW1lc3BlYyAmbHQ7LW5zX3RvX3RpbWV2YWwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTcyOiBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQgJmx0Oy1hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IG5hdGl2ZV9hcGljX21lbV93cml0ZSAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IGlycV9lbnRlciAmbHQ7LXNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzI6IHJjdV9pcnFfZW50ZXIgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiByY3VfaWRsZV9leGl0X2NvbW1vbi5pc3JhLjMzICZsdDstcmN1X2lycV9lbnRlcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC4uMSAgIDQ3MC44NjcxNzM6IGxvY2FsX2JoX2Rpc2FibGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuLjEgICA0NzAuODY3MTczOiBhZGRfcHJlZW1wdF9jb3VudCAmbHQ7LWxvY2FsX2JoX2Rpc2FibGUKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX2lkbGUgJmx0Oy1pcnFfZW50ZXIKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczEgICA0NzAuODY3MTc0OiB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDoga3RpbWVfZ2V0ICZsdDstdGlja19jaGVja19pZGxlCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NDogdGlja19ub2h6X3N0b3BfaWRsZSAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHVwZGF0ZV90c190aW1lX3N0YXRzICZsdDstdGlja19ub2h6X3N0b3BfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IG5yX2lvd2FpdF9jcHUgJmx0Oy11cGRhdGVfdHNfdGltZV9zdGF0cworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IHRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NCAmbHQ7LXRpY2tfY2hlY2tfaWRsZQorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMSAgIDQ3MC44NjcxNzU6IF9yYXdfc3Bpbl9sb2NrICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMxICAgNDcwLjg2NzE3NjogYWRkX3ByZWVtcHRfY291bnQgJmx0Oy1fcmF3X3NwaW5fbG9jaworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGRvX3RpbWVyICZsdDstdGlja19kb191cGRhdGVfamlmZmllczY0CisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDA0XSBkLnMyICAgNDcwLjg2NzE3NjogX3Jhd19zcGluX2xvY2sgJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMiAgIDQ3MC44NjcxNzY6IGFkZF9wcmVlbXB0X2NvdW50ICZsdDstX3Jhd19zcGluX2xvY2sKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDRdIGQuczMgICA0NzAuODY3MTc3OiBudHBfdGlja19sZW5ndGggJmx0Oy1kb190aW1lcgorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwNF0gZC5zMyAgIDQ3MC44NjcxNzc6IF9yYXdfc3Bpbl9sb2NrX2lycXNhdmUgJmx0Oy1udHBfdGlja19sZW5ndGgKKyAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAuCisgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEVhY2ggbGluZSBpbiB0aGUgdHJhY2UgYWJvdmUgc2hvd3Mgd2hhdCB3YXMgaGFwcGVuaW5nIGluCisgICAgICAgICAgICB0aGUga2VybmVsIG9uIGEgZ2l2ZW4gY3B1LCB0byB0aGUgbGV2ZWwgb2YgZGV0YWlsIG9mCisgICAgICAgICAgICBmdW5jdGlvbiBjYWxscy4gRWFjaCBlbnRyeSBzaG93cyB0aGUgZnVuY3Rpb24gY2FsbGVkLAorICAgICAgICAgICAgZm9sbG93ZWQgYnkgaXRzIGNhbGxlciAoYWZ0ZXIgdGhlIGFycm93KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIHRyYWNlciBnaXZlcyB5b3UgYW4gZXh0cmVtZWx5IGRldGFpbGVkIGlkZWEKKyAgICAgICAgICAgIG9mIHdoYXQgdGhlIGtlcm5lbCB3YXMgZG9pbmcgYXQgdGhlIHBvaW50IGluIHRpbWUgdGhlIHRyYWNlCisgICAgICAgICAgICB3YXMgdGFrZW4sIGFuZCBpcyBhIGdyZWF0IHdheSB0byBsZWFybiBhYm91dCBob3cgdGhlIGtlcm5lbAorICAgICAgICAgICAgY29kZSB3b3JrcyBpbiBhIGR5bmFtaWMgc2Vuc2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IFRoZSBmdHJhY2UgZnVuY3Rpb24gdHJhY2VyIGlzIGFsc28KKyAgICAgICAgICAgIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiBwZXJmLCBhcyB0aGUgZnRyYWNlOmZ1bmN0aW9uIHRyYWNlcG9pbnQuCisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYSBsaXR0bGUgbW9yZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyB0aGFuCisgICAgICAgICAgICBpdCBuZWVkcyB0byBiZSAtIGx1Y2tpbHkgdGhlcmUncyBhIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICB0cmFjZXIgdGhhdCBkaXNwbGF5cyB0aGUgY2FsbGNoYWlucyBleHBsaWNpdGx5LCBjYWxsZWQgdGhlCisgICAgICAgICAgICAnZnVuY3Rpb25fZ3JhcGgnIHRyYWNlcjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGZ1bmN0aW9uX2dyYXBoICZndDsgY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgdHJhY2UgfCBsZXNzCisKKyAgICAgIHRyYWNlcjogZnVuY3Rpb25fZ3JhcGgKKworICAgICAgQ1BVICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisgICAgICB8ICAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwKKyAgICAgNykgICAwLjA0NiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA3KSAgIDAuMDQzIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19zdG9wKCk7CisgICAgIDcpICAgMC4wNDIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3J0KCk7CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX2ZhaXIoKTsKKyAgICAgNykgICAwLjAzMCB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfaWRsZSgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fdW5sb2NrX2lycSgpIHsKKyAgICAgNykgICAwLjAzMyB1cyAgICB8ICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMjU4IHVzICAgIHwgICAgICB9CisgICAgIDcpICAgMC4wMzIgdXMgICAgfCAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICsgMTMuMzQxIHVzICAgfCAgICB9IC8qIF9fc2NoZWR1bGUgKi8KKyAgICAgNykgICAwLjA5NSB1cyAgICB8ICB9IC8qIHN1Yl9wcmVlbXB0X2NvdW50ICovCisgICAgIDcpICAgICAgICAgICAgICAgfCAgc2NoZWR1bGUoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICBfX3NjaGVkdWxlKCkgeworICAgICA3KSAgIDAuMDYwIHVzICAgIHwgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICA3KSAgIDAuMDQ0IHVzICAgIHwgICAgICByY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCgpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBfcmF3X3NwaW5fbG9ja19pcnEoKSB7CisgICAgIDcpICAgMC4wMzMgdXMgICAgfCAgICAgICAgYWRkX3ByZWVtcHRfY291bnQoKTsKKyAgICAgNykgICAwLjI0NyB1cyAgICB8ICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICBpZGxlX2JhbGFuY2UoKSB7CisgICAgIDcpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9jaygpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgIHN1Yl9wcmVlbXB0X2NvdW50KCk7CisgICAgIDcpICAgMC4yNDYgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIHVwZGF0ZV9zaGFyZXMoKSB7CisgICAgIDcpICAgMC4wMzAgdXMgICAgfCAgICAgICAgICBfX3JjdV9yZWFkX2xvY2soKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgIF9fcmN1X3JlYWRfdW5sb2NrKCk7CisgICAgIDcpICAgMC40ODQgdXMgICAgfCAgICAgICAgfQorICAgICA3KSAgIDAuMDMwIHVzICAgIHwgICAgICAgIF9fcmN1X3JlYWRfbG9jaygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAyOSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjAzNSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgNykgICAwLjkwNiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgNykgICAxLjE0MSB1cyAgICB8ICAgICAgICB9CisgICAgIDcpICAgMC4wMjIgdXMgICAgfCAgICAgICAgbXNlY3NfdG9famlmZmllcygpOworICAgICA3KSAgICAgICAgICAgICAgIHwgICAgICAgIGxvYWRfYmFsYW5jZSgpIHsKKyAgICAgNykgICAgICAgICAgICAgICB8ICAgICAgICAgIGZpbmRfYnVzaWVzdF9ncm91cCgpIHsKKyAgICAgNykgICAwLjAzMSB1cyAgICB8ICAgICAgICAgICAgaWRsZV9jcHUoKTsKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgICBtc2Vjc190b19qaWZmaWVzKCk7CisgICAgIDQpICAgMC4wNjIgdXMgICAgfCAgICAgICAgX19yY3VfcmVhZF91bmxvY2soKTsKKyAgICAgNCkgICAgICAgICAgICAgICB8ICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgNCkgICAwLjA3MyB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDQpICAgMC41NjIgdXMgICAgfCAgICAgICAgfQorICAgICA0KSArIDE3LjQ1MiB1cyAgIHwgICAgICB9CisgICAgIDQpICAgMC4xMDggdXMgICAgfCAgICAgIHB1dF9wcmV2X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMTAyIHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19mYWlyKCk7CisgICAgIDQpICAgMC4wODQgdXMgICAgfCAgICAgIHBpY2tfbmV4dF90YXNrX3N0b3AoKTsKKyAgICAgNCkgICAwLjA3NSB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfcnQoKTsKKyAgICAgNCkgICAwLjA2MiB1cyAgICB8ICAgICAgcGlja19uZXh0X3Rhc2tfZmFpcigpOworICAgICA0KSAgIDAuMDY2IHVzICAgIHwgICAgICBwaWNrX25leHRfdGFza19pZGxlKCk7CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA0KSAgIGt3b3JrZXItNzQgICA9Jmd0OyAgICAmbHQ7aWRsZSZndDstMAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICA0KSAgICAgICAgICAgICAgIHwgICAgICBmaW5pc2hfdGFza19zd2l0Y2goKSB7CisgICAgIDQpICAgICAgICAgICAgICAgfCAgICAgICAgX3Jhd19zcGluX3VubG9ja19pcnEoKSB7CisgICAgIDQpICAgMC4xMDAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAgIDAuNTgyIHVzICAgIHwgICAgICAgIH0KKyAgICAgNCkgICAxLjEwNSB1cyAgICB8ICAgICAgfQorICAgICA0KSAgIDAuMDg4IHVzICAgIHwgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICA0KSAhIDEwMC4wNjYgdXMgIHwgICAgfQorICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAzKSAgICAgICAgICAgICAgIHwgIHN5c19pb2N0bCgpIHsKKyAgICAgMykgICAwLjA4MyB1cyAgICB8ICAgIGZnZXRfbGlnaHQoKTsKKyAgICAgMykgICAgICAgICAgICAgICB8ICAgIHNlY3VyaXR5X2ZpbGVfaW9jdGwoKSB7CisgICAgIDMpICAgMC4wNjYgdXMgICAgfCAgICAgIGNhcF9maWxlX2lvY3RsKCk7CisgICAgIDMpICAgMC41NjIgdXMgICAgfCAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICBkb192ZnNfaW9jdGwoKSB7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgIGRybV9pb2N0bCgpIHsKKyAgICAgMykgICAwLjA3NSB1cyAgICB8ICAgICAgICBkcm1fdXRfZGVidWdfcHJpbnRrKCk7CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9tdXRleF9sb2NrX2ludGVycnVwdGlibGUoKSB7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICAgIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgpOworICAgICAzKSAgIDAuNTcwIHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgZHJtX2dlbV9vYmplY3RfbG9va3VwKCkgeworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICBfcmF3X3NwaW5fbG9jaygpIHsKKyAgICAgMykgICAwLjA4MCB1cyAgICB8ICAgICAgICAgICAgICBhZGRfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuNjIwIHVzICAgIHwgICAgICAgICAgICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgICAgICAgICAgIF9yYXdfc3Bpbl91bmxvY2soKSB7CisgICAgIDMpICAgMC4wODUgdXMgICAgfCAgICAgICAgICAgICAgc3ViX3ByZWVtcHRfY291bnQoKTsKKyAgICAgMykgICAwLjU2MiB1cyAgICB8ICAgICAgICAgICAgfQorICAgICAzKSAgIDIuMTQ5IHVzICAgIHwgICAgICAgICAgfQorICAgICAzKSAgIDAuMTMzIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3BpbigpOworICAgICAzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKCkgeworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbigpOworICAgICAzKSAgIDAuMDY1IHVzICAgIHwgICAgICAgICAgICBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoKTsKKyAgICAgMykgICAwLjA2MiB1cyAgICB8ICAgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2NwdV93cml0ZV9kb21haW4oKTsKKyAgICAgMykgICAxLjYxMiB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAgICAgICAgICAgICB8ICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2UoKSB7CisgICAgIDMpICAgMC4wOTcgdXMgICAgfCAgICAgICAgICAgIGk5MTVfZ2VtX29iamVjdF9mbHVzaF9mZW5jZS5jb25zdHByb3AuMzYoKTsKKyAgICAgMykgICAwLjY0NSB1cyAgICB8ICAgICAgICAgIH0KKyAgICAgMykgICAwLjA3MCB1cyAgICB8ICAgICAgICAgIGFkZF9wcmVlbXB0X2NvdW50KCk7CisgICAgIDMpICAgMC4wNzAgdXMgICAgfCAgICAgICAgICBzdWJfcHJlZW1wdF9jb3VudCgpOworICAgICAzKSAgIDAuMDczIHVzICAgIHwgICAgICAgICAgaTkxNV9nZW1fb2JqZWN0X3VucGluKCk7CisgICAgIDMpICAgMC4wNjggdXMgICAgfCAgICAgICAgICBtdXRleF91bmxvY2soKTsKKyAgICAgMykgICA5LjkyNCB1cyAgICB8ICAgICAgICB9CisgICAgIDMpICsgMTEuMjM2IHVzICAgfCAgICAgIH0KKyAgICAgMykgKyAxMS43NzAgdXMgICB8ICAgIH0KKyAgICAgMykgKyAxMy43ODQgdXMgICB8ICB9CisgICAgIDMpICAgICAgICAgICAgICAgfCAgc3lzX2lvY3RsKCkgeworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQXMgeW91IGNhbiBzZWUsIHRoZSBmdW5jdGlvbl9ncmFwaCBkaXNwbGF5IGlzIG11Y2ggZWFzaWVyIHRvCisgICAgICAgICAgICBmb2xsb3cuIEFsc28gbm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQKKyAgICAgICAgICAgIGFzc29jaWF0ZWQgYnJhY2VzLCBvdGhlciBldmVudHMgc3VjaCBhcyBzY2hlZHVsZXIgZXZlbnRzCisgICAgICAgICAgICBhcmUgZGlzcGxheWVkIGluIGNvbnRleHQuIEluIGZhY3QsIHlvdSBjYW4gZnJlZWx5IGluY2x1ZGUKKyAgICAgICAgICAgIGFueSB0cmFjZXBvaW50IGF2YWlsYWJsZSBpbiB0aGUgdHJhY2UgZXZlbnRzIHN1YnN5c3RlbSBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBuZXh0IHNlY3Rpb24gYnkgc2ltcGx5IGVuYWJsaW5nIHRob3NlIGV2ZW50cywgYW5kIHRoZXknbGwKKyAgICAgICAgICAgIGFwcGVhciBpbiBjb250ZXh0IGluIHRoZSBmdW5jdGlvbiBncmFwaCBkaXNwbGF5LiBRdWl0ZSBhCisgICAgICAgICAgICBwb3dlcmZ1bCB0b29sIGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBkeW5hbWljcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWxzbyBub3RpY2UgdGhhdCB0aGVyZSBhcmUgdmFyaW91cyBhbm5vdGF0aW9ucyBvbiB0aGUgbGVmdAorICAgICAgICAgICAgaGFuZCBzaWRlIG9mIHRoZSBkaXNwbGF5LiBGb3IgZXhhbXBsZSBpZiB0aGUgdG90YWwgdGltZSBpdAorICAgICAgICAgICAgdG9vayBmb3IgYSBnaXZlbiBmdW5jdGlvbiB0byBleGVjdXRlIGlzIGFib3ZlIGEgY2VydGFpbgorICAgICAgICAgICAgdGhyZXNob2xkLCBhbiBleGNsYW1hdGlvbiBwb2ludCBvciBwbHVzIHNpZ24gYXBwZWFycyBvbiB0aGUKKyAgICAgICAgICAgIGxlZnQgaGFuZCBzaWRlLiBQbGVhc2Ugc2VlIHRoZSBmdHJhY2UgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgICAgIGRldGFpbHMgb24gYWxsIHRoZXNlIGZpZWxkcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0aGUtdHJhY2UtZXZlbnRzLXN1YnN5c3RlbSc+CisgICAgICAgIDx0aXRsZT5UaGUgJ3RyYWNlIGV2ZW50cycgU3Vic3lzdGVtPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uZSBlc3BlY2lhbGx5IGltcG9ydGFudCBkaXJlY3RvcnkgY29udGFpbmVkIHdpdGhpbgorICAgICAgICAgICAgdGhlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZGlyZWN0b3J5IGlzIHRoZSAnZXZlbnRzJworICAgICAgICAgICAgc3ViZGlyZWN0b3J5LCB3aGljaCBjb250YWlucyByZXByZXNlbnRhdGlvbnMgb2YgZXZlcnkKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgaW4gdGhlIHN5c3RlbS4gTGlzdGluZyBvdXQgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICB0aGUgJ2V2ZW50cycgc3ViZGlyZWN0b3J5LCB3ZSBzZWUgbWFpbmx5IGFub3RoZXIgc2V0IG9mCisgICAgICAgICAgICBzdWJkaXJlY3RvcmllczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjZCBldmVudHMKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgZHJ3eHIteHIteCAgIDE5IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYmxvY2sKKyAgICAgZHJ3eHIteHIteCAgIDMyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgYnRyZnMKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZHJtCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICBkcnd4ci14ci14ICAgNDAgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBleHQzCisgICAgIGRyd3hyLXhyLXggICA3OSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGV4dDQKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZnRyYWNlCisgICAgIGRyd3hyLXhyLXggICAgOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGhkYQorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBoZWFkZXJfZXZlbnQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaGVhZGVyX3BhZ2UKKyAgICAgZHJ3eHIteHIteCAgIDI1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaTkxNQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBpcnEKKyAgICAgZHJ3eHIteHIteCAgIDEyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgamJkCisgICAgIGRyd3hyLXhyLXggICAxNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGpiZDIKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbQorICAgICBkcnd4ci14ci14ICAgIDcgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBtb2R1bGUKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbmFwaQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBuZXQKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgb29tCisgICAgIGRyd3hyLXhyLXggICAxMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHBvd2VyCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHByaW50aworICAgICBkcnd4ci14ci14ICAgIDggcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSByYW5kb20KKyAgICAgZHJ3eHIteHIteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgcmF3X3N5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgMyByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHJjdQorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBycG0KKyAgICAgZHJ3eHIteHIteCAgIDIwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NoZWQKKyAgICAgZHJ3eHIteHIteCAgICA3IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2NzaQorICAgICBkcnd4ci14ci14ICAgIDQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBzaWduYWwKKyAgICAgZHJ3eHIteHIteCAgICA1IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc2tiCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHNvY2sKKyAgICAgZHJ3eHIteHIteCAgIDEwIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgc3VucnBjCisgICAgIGRyd3hyLXhyLXggIDUzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHN5c2NhbGxzCisgICAgIGRyd3hyLXhyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHRhc2sKKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdGltZXIKKyAgICAgZHJ3eHIteHIteCAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgdWRwCisgICAgIGRyd3hyLXhyLXggICAyMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IHZtc2NhbgorICAgICBkcnd4ci14ci14ICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB2c3lzY2FsbAorICAgICBkcnd4ci14ci14ICAgIDYgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSB3b3JrcXVldWUKKyAgICAgZHJ3eHIteHIteCAgIDI2IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgd3JpdGViYWNrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBFYWNoIG9uZSBvZiB0aGVzZSBzdWJkaXJlY3RvcmllcyBjb3JyZXNwb25kcyB0byBhCisgICAgICAgICAgICAnc3Vic3lzdGVtJyBhbmQgY29udGFpbnMgeWV0IGFnYWluIG1vcmUgc3ViZGlyZWN0b3JpZXMsCisgICAgICAgICAgICBlYWNoIG9uZSBvZiB0aG9zZSBmaW5hbGx5IGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjZXBvaW50LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGhlcmUgYXJlIHRoZSBjb250ZW50cyBvZiB0aGUgJ2ttZW0nIHN1YnN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cyMgY2Qga21lbQorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0jIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTQgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSAuCisgICAgIGRyd3hyLXhyLXggICAzOCByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4uCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGVuYWJsZQorICAgICAtcnctci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmaWx0ZXIKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga2ZyZWUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWFsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9hbGxvYworICAgICBkcnd4ci14ci14ICAgIDIgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBrbWVtX2NhY2hlX2FsbG9jX25vZGUKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkga21lbV9jYWNoZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2MKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9hbGxvY19leHRmcmFnCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfYWxsb2Nfem9uZV9sb2NrZWQKKyAgICAgZHJ3eHIteHIteCAgICAyIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgbW1fcGFnZV9mcmVlCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfZnJlZV9iYXRjaGVkCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IG1tX3BhZ2VfcGNwdV9kcmFpbgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgTGV0J3Mgc2VlIHdoYXQncyBpbnNpZGUgdGhlIHN1YmRpcmVjdG9yeSBmb3IgYSBzcGVjaWZpYworICAgICAgICAgICAgdHJhY2Vwb2ludCwgaW4gdGhpcyBjYXNlIHRoZSBvbmUgZm9yIGttYWxsb2M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbSMgY2Qga21hbGxvYworICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IC4KKyAgICAgZHJ3eHIteHIteCAgIDE0IHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgZW5hYmxlCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgIDAgTm92IDE0IDIzOjE5IGZpbHRlcgorICAgICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAgICAwIE5vdiAxNCAyMzoxOSBmb3JtYXQKKyAgICAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgICAgMCBOb3YgMTQgMjM6MTkgaWQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSAnZm9ybWF0JyBmaWxlIGZvciB0aGUgdHJhY2Vwb2ludCBkZXNjcmliZXMgdGhlIGV2ZW50CisgICAgICAgICAgICBpbiBtZW1vcnksIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHZhcmlvdXMgdHJhY2luZyB0b29scworICAgICAgICAgICAgdGhhdCBub3cgbWFrZSB1c2Ugb2YgdGhlc2UgdHJhY2Vwb2ludCB0byBwYXJzZSB0aGUgZXZlbnQKKyAgICAgICAgICAgIGFuZCBtYWtlIHNlbnNlIG9mIGl0LCBhbG9uZyB3aXRoIGEgJ3ByaW50IGZtdCcgZmllbGQgdGhhdAorICAgICAgICAgICAgYWxsb3dzIHRvb2xzIGxpa2UgZnRyYWNlIHRvIGRpc3BsYXkgdGhlIGV2ZW50IGFzIHRleHQuCisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB0aGUgZm9ybWF0IG9mIHRoZSBrbWFsbG9jIGV2ZW50IGxvb2tzIGxpa2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAc3VnYXJiYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva21lbS9rbWFsbG9jIyBjYXQgZm9ybWF0CisgICAgIG5hbWU6IGttYWxsb2MKKyAgICAgSUQ6IDMxMworICAgICBmb3JtYXQ6CisJICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsJb2Zmc2V0OjA7CXNpemU6MjsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsJb2Zmc2V0OjI7CXNpemU6MTsJc2lnbmVkOjA7CisJICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwlvZmZzZXQ6MzsJc2l6ZToxOwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGlkOwlvZmZzZXQ6NDsJc2l6ZTo0OwlzaWduZWQ6MTsKKwkgICAgIGZpZWxkOmludCBjb21tb25fcGFkZGluZzsJb2Zmc2V0Ojg7CXNpemU6NDsJc2lnbmVkOjE7CisKKwkgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlOwlvZmZzZXQ6MTY7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpjb25zdCB2b2lkICogcHRyOwlvZmZzZXQ6MjQ7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfcmVxOwlvZmZzZXQ6MzI7CXNpemU6ODsJc2lnbmVkOjA7CisJICAgICBmaWVsZDpzaXplX3QgYnl0ZXNfYWxsb2M7CW9mZnNldDo0MDsJc2l6ZTo4OwlzaWduZWQ6MDsKKwkgICAgIGZpZWxkOmdmcF90IGdmcF9mbGFnczsJb2Zmc2V0OjQ4OwlzaXplOjQ7CXNpZ25lZDowOworCisgICAgIHByaW50IGZtdDogImNhbGxfc2l0ZT0lbHggcHRyPSVwIGJ5dGVzX3JlcT0lenUgYnl0ZXNfYWxsb2M9JXp1IGdmcF9mbGFncz0lcyIsIFJFQy0+Y2FsbF9zaXRlLCBSRUMtPnB0ciwgUkVDLT5ieXRlc19yZXEsIFJFQy0+Ynl0ZXNfYWxsb2MsCisgICAgIChSRUMtPmdmcF9mbGFncykgPyBfX3ByaW50X2ZsYWdzKFJFQy0+Z2ZwX2ZsYWdzLCAifCIsIHsodW5zaWduZWQgbG9uZykoKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSkgfCAoKCBnZnBfdCkweDQwMDB1KSB8ICgoIGdmcF90KTB4MTAwMDB1KSB8ICgoIGdmcF90KTB4MTAwMHUpIHwgKCggZ2ZwX3QpMHgyMDB1KSB8ICgoCisgICAgIGdmcF90KTB4NDAwMDAwdSkpLCAiR0ZQX1RSQU5TSFVHRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoIGdmcF90KTB4MjAwMDB1KSB8ICgoCisgICAgIGdmcF90KTB4MDJ1KSB8ICgoIGdmcF90KTB4MDh1KSksICJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSB8ICgoIGdmcF90KTB4NDB1KSB8ICgoIGdmcF90KTB4ODB1KSB8ICgoCisgICAgIGdmcF90KTB4MjAwMDB1KSB8ICgoIGdmcF90KTB4MDJ1KSksICJHRlBfSElHSFVTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKAorICAgICBnZnBfdCkweDIwMDAwdSkpLCAiR0ZQX1VTRVIifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkgfCAoKCBnZnBfdCkweDgwdSkgfCAoKCBnZnBfdCkweDgwMDAwdSkpLCBHRlBfVEVNUE9SQVJZIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCggZ2ZwX3QpMHgxMHUpIHwgKCggZ2ZwX3QpMHg0MHUpIHwgKCggZ2ZwX3QpMHg4MHUpKSwgIkdGUF9LRVJORUwifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDEwdSkgfCAoKCBnZnBfdCkweDQwdSkpLAorICAgICAiR0ZQX05PRlMifSwgeyh1bnNpZ25lZCBsb25nKSgoKCBnZnBfdCkweDIwdSkpLCAiR0ZQX0FUT01JQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgoIGdmcF90KTB4MTB1KSksICJHRlBfTk9JTyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCgKKyAgICAgZ2ZwX3QpMHgyMHUpLCAiR0ZQX0hJR0gifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4MTB1KSwgIkdGUF9XQUlUIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwdSksICJHRlBfSU8ifSwgeyh1bnNpZ25lZCBsb25nKSgoCisgICAgIGdmcF90KTB4MTAwdSksICJHRlBfQ09MRCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDB1KSwgIkdGUF9OT1dBUk4ifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwdSksICJHRlBfUkVQRUFUIn0sIHsodW5zaWduZWQKKyAgICAgbG9uZykoKCBnZnBfdCkweDgwMHUpLCAiR0ZQX05PRkFJTCJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgxMDAwdSksICJHRlBfTk9SRVRSWSJ9LCAgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDB1KSwgIkdGUF9DT01QIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDB1KSwgIkdGUF9aRVJPIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDEwMDAwdSksICJHRlBfTk9NRU1BTExPQyJ9LCB7KHVuc2lnbmVkIGxvbmcpKCggZ2ZwX3QpMHgyMDAwMHUpLAorICAgICAiR0ZQX0hBUkRXQUxMIn0sIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDQwMDAwdSksICJHRlBfVEhJU05PREUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4ODAwMDB1KSwgIkdGUF9SRUNMQUlNQUJMRSJ9LCB7KHVuc2lnbmVkCisgICAgIGxvbmcpKCggZ2ZwX3QpMHgwOHUpLCAiR0ZQX01PVkFCTEUifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTApLCAiR0ZQX05PVFJBQ0sifSwgeyh1bnNpZ25lZCBsb25nKSgoIGdmcF90KTB4NDAwMDAwdSksICJHRlBfTk9fS1NXQVBEIn0sCisgICAgIHsodW5zaWduZWQgbG9uZykoKCBnZnBfdCkweDgwMDAwMHUpLCAiR0ZQX09USEVSX05PREUifSApIDogIkdGUF9OT1dBSVQiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgJ2VuYWJsZScgZmlsZSBpbiB0aGUgdHJhY2Vwb2ludCBkaXJlY3RvcnkgaXMgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgIHRoZSB1c2VyIChvciB0b29scyBzdWNoIGFzIHRyYWNlLWNtZCkgdG8gYWN0dWFsbHkgdHVybiB0aGUKKyAgICAgICAgICAgIHRyYWNlcG9pbnQgb24gYW5kIG9mZi4gV2hlbiBlbmFibGVkLCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICAgdHJhY2Vwb2ludCB3aWxsIHN0YXJ0IGFwcGVhcmluZyBpbiB0aGUgZnRyYWNlICd0cmFjZScKKyAgICAgICAgICAgIGZpbGUgZGVzY3JpYmVkIHByZXZpb3VzbHkuIEZvciBleGFtcGxlLCB0aGlzIHR1cm5zIG9uIHRoZQorICAgICAgICAgICAga21hbGxvYyB0cmFjZXBvaW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL2ttZW0va21hbGxvYyMgZWNobyAxID4gZW5hYmxlCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBdCB0aGUgbW9tZW50LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb24gdHJhY2VyIG9yCisgICAgICAgICAgICBzb21lIG90aGVyIHRyYWNlciB0aGF0IG1pZ2h0IGJlIGluIGVmZmVjdCwgc28gd2UgZmlyc3QgdHVybgorICAgICAgICAgICAgaXQgb2ZmLCBidXQgaWYgd2UgZG8gdGhhdCwgd2Ugc3RpbGwgbmVlZCB0byB0dXJuIHRyYWNpbmcgb24gaW4KKyAgICAgICAgICAgIG9yZGVyIHRvIHNlZSB0aGUgZXZlbnRzIGluIHRoZSBvdXRwdXQgYnVmZmVyOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGVjaG8gbm9wID4gY3VycmVudF90cmFjZXIKKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiB0cmFjaW5nX29uCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3csIGlmIHdlIGxvb2sgYXQgdGhlIHRoZSAndHJhY2UnIGZpbGUsIHdlIHNlZSBub3RoaW5nCisgICAgICAgICAgICBidXQgdGhlIGttYWxsb2MgZXZlbnRzIHdlIGp1c3QgdHVybmVkIG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCB0cmFjZSB8IGxlc3MKKyAgICAgIyB0cmFjZXI6IG5vcAorICAgICAjCisgICAgICMgZW50cmllcy1pbi1idWZmZXIvZW50cmllcy13cml0dGVuOiAxODk3LzE4OTcgICAjUDo4CisgICAgICMKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8tLS0tLT0mZ3Q7IGlycXMtb2ZmCisgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXy0tLS09Jmd0OyBuZWVkLXJlc2NoZWQKKyAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC8gXy0tLT0mZ3Q7IGhhcmRpcnEvc29mdGlycQorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IC8gXy0tPSZndDsgcHJlZW1wdC1kZXB0aAorICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8fCAvICAgICBkZWxheQorICAgICAjICAgICAgICAgICBUQVNLLVBJRCAgIENQVSMgIHx8fHwgICAgVElNRVNUQU1QICBGVU5DVElPTgorICAgICAjICAgICAgICAgICAgICB8IHwgICAgICAgfCAgIHx8fHwgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTQuNjIwNzUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU0LjYyMTY0MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTQuNjIxNjU2OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICBtYXRjaGJveC10ZXJtaW4tMTM2MSAgWzAwMV0gLi4uMSAxODE1NC43NTU0NzI6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE0MDUwIHB0cj1mZmZmODgwMDZkNWYwZTAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTQuNzU1NTgxOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4Mzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU0Ljc1NTU4OToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1LjM1NDU5NDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmRiMzU0MDAgYnl0ZXNfcmVxPTU3NiBieXRlc19hbGxvYz0xMDI0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9SRVBFQVQKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuMzU0NzAzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxYWJlOCBwdHI9ZmZmZjg4MDA3MzRmNGNjMCBieXRlc19yZXE9MTY4IGJ5dGVzX2FsbG9jPTE5MiBnZnBfZmxhZ3M9R0ZQX0tFUk5FTHxHRlBfTk9XQVJOfEdGUF9OT1JFVFJZCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcwNToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTkyYTMgcHRyPWZmZmY4ODAwMWY4MjI1MjAgYnl0ZXNfcmVxPTI0IGJ5dGVzX2FsbG9jPTMyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICAgWG9yZy0xMjY0ICBbMDAyXSAuLi4xIDE4MTU1LjM1NDcxMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE0MTllZGIgcHRyPWZmZmY4ODAwNzIxYTJmMDAgYnl0ZXNfcmVxPTY0IGJ5dGVzX2FsbG9jPTY0IGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9aRVJPCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3MzMxOToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTU4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgIGRyb3BiZWFyLTE0NjUgIFswMDBdIC4uLjEgMTgxNTUuNjczNTI1OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTY2NTBkNCBwdHI9ZmZmZjg4MDA3MjljMzAwMCBieXRlc19yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU1LjY3NDgyMToga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzkzMDE0OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1NS43OTMyMTk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTUuNzk0MTQ3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45MzY3MDU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU1LjkzNjkxMDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfcmVxPTIwNDggYnl0ZXNfYWxsb2M9MjA0OCBnZnBfZmxhZ3M9R0ZQX0tFUk5FTAorICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1NS45Mzc4Njk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU0ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgIG1hdGNoYm94LXRlcm1pbi0xMzYxICBbMDAxXSAuLi4xIDE4MTU1Ljk1MzY2Nzoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTQwNTAgcHRyPWZmZmY4ODAwNmQ1ZjIwMDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgICAgIFhvcmctMTI2NCAgWzAwMl0gLi4uMSAxODE1NS45NTM3NzU6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNDFhYmU4IHB0cj1mZmZmODgwMDczNGY0Y2MwIGJ5dGVzX3JlcT0xNjggYnl0ZXNfYWxsb2M9MTkyIGdmcF9mbGFncz1HRlBfS0VSTkVMfEdGUF9OT1dBUk58R0ZQX05PUkVUUlkKKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzc3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOTJhMyBwdHI9ZmZmZjg4MDAxZjgyMjUyMCBieXRlc19yZXE9MjQgYnl0ZXNfYWxsb2M9MzIgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgICBYb3JnLTEyNjQgIFswMDJdIC4uLjEgMTgxNTUuOTUzNzgzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTQxOWVkYiBwdHI9ZmZmZjg4MDA3MjFhMmYwMCBieXRlc19yZXE9NjQgYnl0ZXNfYWxsb2M9NjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1pFUk8KKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc2MDUzOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NDgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgZHJvcGJlYXItMTQ2NSAgWzAwMF0gLi4uMSAxODE1Ni4xNzYyNTc6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjY1MGQ0IHB0cj1mZmZmODgwMDcyOWMzMDAwIGJ5dGVzX3JlcT0yMDQ4IGJ5dGVzX2FsbG9jPTIwNDggZ2ZwX2ZsYWdzPUdGUF9LRVJORUwKKyAgICAgICAgICAgICAgJmx0O2lkbGUmZ3Q7LTAgICAgIFswMDBdIC4uczMgMTgxNTYuMTc3NzE3OiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxOWIzNiBwdHI9ZmZmZjg4MDA2ZDU1NTgwMCBieXRlc19yZXE9NTEyIGJ5dGVzX2FsbG9jPTUxMiBnZnBfZmxhZ3M9R0ZQX0FUT01JQworICAgICAgICAgICAgICAmbHQ7aWRsZSZndDstMCAgICAgWzAwMF0gLi5zMyAxODE1Ni4zOTkyMjk6IGttYWxsb2M6IGNhbGxfc2l0ZT1mZmZmZmZmZjgxNjE5YjM2IHB0cj1mZmZmODgwMDZkNTU1ODAwIGJ5dGVzX3JlcT01MTIgYnl0ZXNfYWxsb2M9NTEyIGdmcF9mbGFncz1HRlBfQVRPTUlDCisgICAgICAgICAgICBkcm9wYmVhci0xNDY1ICBbMDAwXSAuLi4xIDE4MTU2LjM5OTQzNDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2NjUwZDQgcHRyPWZmZmY4ODAwNzI5YzMwMDAgYnl0ZXNfaHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay9yZXE9MjA0OCBieXRlc19hbGxvYz0yMDQ4IGdmcF9mbGFncz1HRlBfS0VSTkVMCisgICAgICAgICAgICAgICZsdDtpZGxlJmd0Oy0wICAgICBbMDAwXSAuLnMzIDE4MTU2LjQwMDY2MDoga21hbGxvYzogY2FsbF9zaXRlPWZmZmZmZmZmODE2MTliMzYgcHRyPWZmZmY4ODAwNmQ1NTQ4MDAgYnl0ZXNfcmVxPTUxMiBieXRlc19hbGxvYz01MTIgZ2ZwX2ZsYWdzPUdGUF9BVE9NSUMKKyAgICAgbWF0Y2hib3gtdGVybWluLTEzNjEgIFswMDFdIC4uLjEgMTgxNTYuNTUyODAwOiBrbWFsbG9jOiBjYWxsX3NpdGU9ZmZmZmZmZmY4MTYxNDA1MCBwdHI9ZmZmZjg4MDA2ZGIzNDgwMCBieXRlc19yZXE9NTc2IGJ5dGVzX2FsbG9jPTEwMjQgZ2ZwX2ZsYWdzPUdGUF9LRVJORUx8R0ZQX1JFUEVBVAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVG8gYWdhaW4gZGlzYWJsZSB0aGUga21hbGxvYyBldmVudCwgd2UgbmVlZCB0byBzZW5kIDAgdG8gdGhlCisgICAgICAgICAgICBlbmFibGUgZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBzdWdhcmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy9rbWVtL2ttYWxsb2MjIGVjaG8gMCA+IGVuYWJsZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBlbmFibGUgYW55IG51bWJlciBvZiBldmVudHMgb3IgY29tcGxldGUgc3Vic3lzdGVtcworICAgICAgICAgICAgKGJ5IHVzaW5nIHRoZSAnZW5hYmxlJyBmaWxlIGluIHRoZSBzdWJzeXN0ZW0gZGlyZWN0b3J5KSBhbmQKKyAgICAgICAgICAgIGdldCBhbiBhcmJpdHJhcmlseSBmaW5lLWdyYWluZWQgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlCisgICAgICAgICAgICBzeXN0ZW0gYnkgZW5hYmxpbmcgYXMgbWFueSBvZiB0aGUgYXBwcm9wcmlhdGUgdHJhY2Vwb2ludHMKKyAgICAgICAgICAgIGFzIGFwcGxpY2FibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgbnVtYmVyIG9mIHRoZSB0b29scyBkZXNjcmliZWQgaW4gdGhpcyBIT1dUTyBkbyBqdXN0IHRoYXQsCisgICAgICAgICAgICBpbmNsdWRpbmcgdHJhY2UtY21kIGFuZCBrZXJuZWxzaGFyayBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBUaGVzZSB0cmFjZXBvaW50cyBhbmQgdGhlaXIgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgIGFyZSB1c2VkIG5vdCBvbmx5IGJ5IGZ0cmFjZSwgIGJ1dCBieSBtYW55IG9mIHRoZSBvdGhlciB0b29scworICAgICAgICAgICAgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50IGFuZCB0aGV5IGZvcm0gYSBjZW50cmFsIHBvaW50IG9mCisgICAgICAgICAgICBpbnRlZ3JhdGlvbiBmb3IgdGhlIHZhcmlvdXMgdHJhY2VycyBhdmFpbGFibGUgaW4gTGludXguCisgICAgICAgICAgICBUaGV5IGZvcm0gYSBjZW50cmFsIHBhcnQgb2YgdGhlIGluc3RydW1lbnRhdGlvbiBmb3IgdGhlCisgICAgICAgICAgICBmb2xsb3dpbmcgdG9vbHM6IHBlcmYsIGx0dG5nLCBmdHJhY2UsIGJsa3RyYWNlIGFuZCBTeXN0ZW1UYXAKKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxlbXBoYXNpcz5UeWluZyBpdCBUb2dldGhlcjo8L2VtcGhhc2lzPiBFdmVudHVhbGx5IGFsbCB0aGUgc3BlY2lhbC1wdXJwb3NlIHRyYWNlcnMKKyAgICAgICAgICAgIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyB3aWxsIGJlCisgICAgICAgICAgICByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIGVxdWl2YWxlbnQgdHJhY2VycyBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICd0cmFjZSBldmVudHMnIHN1YnN5c3RlbS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RyYWNlLWNtZC1rZXJuZWxzaGFyayc+CisgICAgICAgIDx0aXRsZT50cmFjZS1jbWQva2VybmVsc2hhcms8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgdHJhY2UtY21kIGlzIGVzc2VudGlhbGx5IGFuIGV4dGVuc2l2ZSBjb21tYW5kLWxpbmUgJ3dyYXBwZXInCisgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBoaWRlcyB0aGUgZGV0YWlscyBvZiBhbGwgdGhlIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcsIGFsbG93aW5nIHVzZXJzIHRvIHNwZWNpZnkKKyAgICAgICAgICAgIHNwZWNpZmljIHBhcnRpY3VsYXIgZXZlbnRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyBzdWJkaXJlY3RvcnkgYW5kIHRvIGNvbGxlY3QKKyAgICAgICAgICAgIHRyYWNlcyBhbmQgYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aG9zZSBkZXRhaWxzIGRpcmVjdGx5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyB5ZXQgYW5vdGhlciBsYXllciBvbiB0b3Agb2YgdGhhdCwga2VybmVsc2hhcmsgcHJvdmlkZXMgYSBHVUkKKyAgICAgICAgICAgIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHN0YXJ0IGFuZCBzdG9wIHRyYWNlcyBhbmQgc3BlY2lmeSBzZXRzCisgICAgICAgICAgICBvZiBldmVudHMgdXNpbmcgYW4gaW50dWl0aXZlIGludGVyZmFjZSwgYW5kIHZpZXcgdGhlCisgICAgICAgICAgICBvdXRwdXQgYXMgYm90aCB0cmFjZSBldmVudHMgYW5kIGFzIGEgcGVyLUNQVSBncmFwaGljYWwKKyAgICAgICAgICAgIGRpc3BsYXkuIEl0IGRpcmVjdGx5IHVzZXMgJ3RyYWNlLWNtZCcgYXMgdGhlIHBsdW1iaW5nCisgICAgICAgICAgICB0aGF0IGFjY29tcGxpc2hlcyBhbGwgdGhhdCB1bmRlcm5lYXRoIHRoZSBjb3ZlcnMgKGFuZAorICAgICAgICAgICAgYWN0dWFsbHkgZGlzcGxheXMgdGhlIHRyYWNlLWNtZCBjb21tYW5kIGl0IHVzZXMsIGFzIHdlJ2xsIHNlZSkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIHN0YXJ0IGEgdHJhY2UgdXNpbmcga2VybmVsc2hhcmssIGZpcnN0IHN0YXJ0IGtlcm5lbHNoYXJrOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QHN1Z2FyYmF5On4jIGtlcm5lbHNoYXJrCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGVuIGJyaW5nIHVwIHRoZSAnQ2FwdHVyZScgZGlhbG9nIGJ5IGNob29zaW5nIGZyb20gdGhlCisgICAgICAgICAgICBrZXJuZWxzaGFyayBtZW51OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDYXB0dXJlIHwgUmVjb3JkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGF0IHdpbGwgZGlzcGxheSB0aGUgZm9sbG93aW5nIGRpYWxvZywgd2hpY2ggYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgY2hvb3NlIG9uZSBvciBtb3JlIGV2ZW50cyAob3IgZXZlbiBvbmUgb3IgbW9yZSBjb21wbGV0ZQorICAgICAgICAgICAgc3Vic3lzdGVtcykgdG8gdHJhY2U6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1jaG9vc2UtZXZlbnRzLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBzZXRzIG9mIGV2ZW50cyBkZXNjcmliZWQKKyAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyB0cmFjZSBldmVudHMgc3Vic3lzdGVtIHNlY3Rpb24sIGFuZCBpbiBmYWN0CisgICAgICAgICAgICBpcyB3aGVyZSB0cmFjZS1jbWQgZ2V0cyB0aGVtIGZvciBrZXJuZWxzaGFyay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gdGhlIGFib3ZlIHNjcmVlbnNob3QsIHdlJ3ZlIGRlY2lkZWQgdG8gZXhwbG9yZSB0aGUKKyAgICAgICAgICAgIGdyYXBoaWNzIHN1YnN5c3RlbSBhIGJpdCBhbmQgc28gaGF2ZSBjaG9zZW4gdG8gdHJhY2UgYWxsCisgICAgICAgICAgICB0aGUgdHJhY2Vwb2ludHMgY29udGFpbmVkIHdpdGhpbiB0aGUgJ2k5MTUnIGFuZCAnZHJtJworICAgICAgICAgICAgc3Vic3lzdGVtcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWZ0ZXIgZG9pbmcgdGhhdCwgd2UgY2FuIHN0YXJ0IGFuZCBzdG9wIHRoZSB0cmFjZSB1c2luZworICAgICAgICAgICAgdGhlICdSdW4nIGFuZCAnU3RvcCcgYnV0dG9uIG9uIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YKKyAgICAgICAgICAgIHRoZSBkaWFsb2cgKHRoZSBzYW1lIGJ1dHRvbiB3aWxsIHR1cm4gaW50byB0aGUgJ1N0b3AnCisgICAgICAgICAgICBidXR0b24gYWZ0ZXIgdGhlIHRyYWNlIGhhcyBzdGFydGVkKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2tlcm5lbHNoYXJrLW91dHB1dC1kaXNwbGF5LnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjZpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdGljZSB0aGF0IHRoZSByaWdodC1oYW5kIHBhbmUgc2hvd3MgdGhlIGV4YWN0IHRyYWNlLWNtZAorICAgICAgICAgICAgY29tbWFuZC1saW5lIHRoYXQncyB1c2VkIHRvIHJ1biB0aGUgdHJhY2UsIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICByZXN1bHRzIG9mIHRoZSB0cmFjZS1jbWQgcnVuLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHRoZSAnU3RvcCcgYnV0dG9uIGlzIHByZXNzZWQsIHRoZSBncmFwaGljYWwgdmlldyBtYWdpY2FsbHkKKyAgICAgICAgICAgIGZpbGxzIHVwIHdpdGggYSBjb2xvcmZ1bCBwZXItY3B1IGRpc3BsYXkgb2YgdGhlIHRyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIHRoZSBkZXRhaWxlZCBldmVudCBsaXN0aW5nIGJlbG93IHRoYXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1pOTE1LWRpc3BsYXkucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSdzIGFub3RoZXIgZXhhbXBsZSwgdGhpcyB0aW1lIGEgZGlzcGxheSByZXN1bHRpbmcKKyAgICAgICAgICAgIGZyb20gdHJhY2luZyAnYWxsIGV2ZW50cyc6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9rZXJuZWxzaGFyay1hbGwucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHRvb2wgaXMgcHJldHR5IHNlbGYtZXhwbGFuYXRvcnksIGJ1dCBmb3IgbW9yZSBkZXRhaWxlZAorICAgICAgICAgICAgaW5mb3JtYXRpb24gb24gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBkYXRhLCBzZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vcm9zdGVkdC5ob21lbGludXguY29tL2tlcm5lbHNoYXJrLyc+a2VybmVsc2hhcmsgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Z0cmFjZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIGZ0cmFjZSBjYW4gYmUgZm91bmQgaW4gdGhlIGtlcm5lbAorICAgICAgICAgICAgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0cmFjZSBldmVudCBzdWJzeXN0ZW0gY2FuIGFsc28KKyAgICAgICAgICAgIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwgRG9jdW1lbnRhdGlvbiBkaXJlY3Rvcnk6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlcmUgaXMgYSBuaWNlIHNlcmllcyBvZiBhcnRpY2xlcyBvbiB1c2luZworICAgICAgICAgICAgZnRyYWNlIGFuZCB0cmFjZS1jbWQgYXQgTFdOOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzY1ODM1Lyc+RGVidWdnaW5nIHRoZSBrZXJuZWwgdXNpbmcgRnRyYWNlIC0gcGFydCAxPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9sd24ubmV0L0FydGljbGVzLzM2Njc5Ni8nPkRlYnVnZ2luZyB0aGUga2VybmVsIHVzaW5nIEZ0cmFjZSAtIHBhcnQgMjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8zNzA0MjMvJz5TZWNyZXRzIG9mIHRoZSBGdHJhY2UgZnVuY3Rpb24gdHJhY2VyPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy80MTAyMDAvJz50cmFjZS1jbWQ6IEEgZnJvbnQtZW5kIGZvciBGdHJhY2U8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSdzIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBrZXJuZWxzaGFyayB1c2FnZSBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3Jvc3RlZHQuaG9tZWxpbnV4LmNvbS9rZXJuZWxzaGFyay8nPktlcm5lbFNoYXJrPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW4gYW11c2luZyB5ZXQgdXNlZnVsIFJFQURNRSAoYSB0cmFjaW5nIG1pbmktSE9XVE8pIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaW4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9SRUFETUUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdwcm9maWxlLW1hbnVhbC1zeXN0ZW10YXAnPgorICAgIDx0aXRsZT5zeXN0ZW10YXA8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFN5c3RlbVRhcCBpcyBhIHN5c3RlbS13aWRlIHNjcmlwdC1iYXNlZCB0cmFjaW5nIGFuZCBwcm9maWxpbmcgdG9vbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgU3lzdGVtVGFwIHNjcmlwdHMgYXJlIEMtbGlrZSBwcm9ncmFtcyB0aGF0IGFyZSBleGVjdXRlZCBpbiB0aGUKKyAgICAgICAga2VybmVsIHRvIGdhdGhlci9wcmludC9hZ2dyZWdhdGUgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUgY29udGV4dAorICAgICAgICB0aGV5IGVuZCB1cCBiZWluZyBpbnZva2VkIHVuZGVyLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBwcm9iZSBmcm9tIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vc291cmNld2FyZS5vcmcvc3lzdGVtdGFwL3R1dG9yaWFsLyc+U3lzdGVtVGFwIHR1dG9yaWFsPC91bGluaz4KKyAgICAgICAgc2ltcGx5IHByaW50cyBhIGxpbmUgZXZlcnkgdGltZSBhbnkgcHJvY2VzcyBvbiB0aGUgc3lzdGVtIG9wZW4oKXMKKyAgICAgICAgYSBmaWxlLiBGb3IgZWFjaCBsaW5lLCBpdCBwcmludHMgdGhlIGV4ZWN1dGFibGUgbmFtZSBvZiB0aGUKKyAgICAgICAgcHJvZ3JhbSB0aGF0IG9wZW5lZCB0aGUgZmlsZSwgYWxvbmcgd2l0aCBpdHMgUElELCBhbmQgdGhlIG5hbWUKKyAgICAgICAgb2YgdGhlIGZpbGUgaXQgb3BlbmVkIChvciB0cmllZCB0byBvcGVuKSwgd2hpY2ggaXQgZXh0cmFjdHMKKyAgICAgICAgZnJvbSB0aGUgb3BlbiBzeXNjYWxsJ3MgYXJnc3RyLgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHByb2JlIHN5c2NhbGwub3BlbgorICAgICB7CisgICAgICAgICAgICAgcHJpbnRmICgiJXMoJWQpIG9wZW4gKCVzKVxuIiwgZXhlY25hbWUoKSwgcGlkKCksIGFyZ3N0cikKKyAgICAgfQorCisgICAgIHByb2JlIHRpbWVyLm1zKDQwMDApICMgYWZ0ZXIgNCBzZWNvbmRzCisgICAgIHsKKyAgICAgICAgICAgICBleGl0ICgpCisgICAgIH0KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBOb3JtYWxseSwgdG8gZXhlY3V0ZSB0aGlzIHByb2JlLCB5b3UnZCBzaW1wbHkgaW5zdGFsbAorICAgICAgICBzeXN0ZW10YXAgb24gdGhlIHN5c3RlbSB5b3Ugd2FudCB0byBwcm9iZSwgYW5kIGRpcmVjdGx5IHJ1bgorICAgICAgICB0aGUgcHJvYmUgb24gdGhhdCBzeXN0ZW0gZS5nLiBhc3N1bWluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZQorICAgICAgICBjb250YWluaW5nIHRoZSBhYm92ZSB0ZXh0IGlzIHRyYWNlX29wZW4uc3RwOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICMgc3RhcCB0cmFjZV9vcGVuLnN0cAorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFdoYXQgc3lzdGVtdGFwIGRvZXMgdW5kZXIgdGhlIGNvdmVycyB0byBydW4gdGhpcyBwcm9iZSBpcyAxKQorICAgICAgICBwYXJzZSBhbmQgY29udmVydCB0aGUgcHJvYmUgdG8gYW4gZXF1aXZhbGVudCAnQycgZm9ybSwgMikKKyAgICAgICAgY29tcGlsZSB0aGUgJ0MnIGZvcm0gaW50byBhIGtlcm5lbCBtb2R1bGUsIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIGtlcm5lbCwgd2hpY2ggYXJtcyBpdCwgYW5kIDQpIGNvbGxlY3QgdGhlIGRhdGEKKyAgICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBwcm9iZSBhbmQgZGlzcGxheSBpdCB0byB0aGUgdXNlci4KKyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgICBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHN0ZXBzIDEgYW5kIDIsIHRoZSAnc3RhcCcgcHJvZ3JhbSBuZWVkcworICAgICAgICBhY2Nlc3MgdG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdGhhdCBwcm9kdWNlZCB0aGUga2VybmVsCisgICAgICAgIHRoYXQgdGhlIHByb2JlZCBzeXN0ZW0gaXMgcnVubmluZy4gSW4gdGhlIGNhc2Ugb2YgYSB0eXBpY2FsCisgICAgICAgIGVtYmVkZGVkIHN5c3RlbSAodGhlICd0YXJnZXQnKSwgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0KKyAgICAgICAgdW5mb3J0dW5hdGVseSBpc24ndCB0eXBpY2FsbHkgcGFydCBvZiB0aGUgaW1hZ2UgcnVubmluZyBvbgorICAgICAgICB0aGUgdGFyZ2V0LiBJdCBpcyBub3JtYWxseSBhdmFpbGFibGUgb24gdGhlICdob3N0JyBzeXN0ZW0KKyAgICAgICAgdGhhdCBwcm9kdWNlZCB0aGUgdGFyZ2V0IGltYWdlIGhvd2V2ZXI7IGluIHN1Y2ggY2FzZXMsCisgICAgICAgIHN0ZXBzIDEgYW5kIDIgYXJlIGV4ZWN1dGVkIG9uIHRoZSBob3N0IHN5c3RlbSwgYW5kIHN0ZXBzCisgICAgICAgIDMgYW5kIDQgYXJlIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLCB1c2luZyBvbmx5IHRoZQorICAgICAgICBzeXN0ZW10YXAgJ3J1bnRpbWUnLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgc3lzdGVtdGFwIHN1cHBvcnQgaW4gWW9jdG8gYXNzdW1lcyB0aGF0IG9ubHkgc3RlcHMKKyAgICAgICAgMyBhbmQgNCBhcmUgcnVuIG9uIHRoZSB0YXJnZXQ7IGl0IGlzIHBvc3NpYmxlIHRvIGRvCisgICAgICAgIGV2ZXJ5dGhpbmcgb24gdGhlIHRhcmdldCwgYnV0IHRoaXMgc2VjdGlvbiBhc3N1bWVzIG9ubHkKKyAgICAgICAgdGhlIHR5cGljYWwgZW1iZWRkZWQgdXNlLWNhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvIGJhc2ljYWxseSB3aGF0IHlvdSBuZWVkIHRvIGRvIGluIG9yZGVyIHRvIHJ1biBhIHN5c3RlbXRhcAorICAgICAgICBzY3JpcHQgb24gdGhlIHRhcmdldCBpcyB0byAxKSBvbiB0aGUgaG9zdCBzeXN0ZW0sIGNvbXBpbGUgdGhlCisgICAgICAgIHByb2JlIGludG8gYSBrZXJuZWwgbW9kdWxlIHRoYXQgbWFrZXMgc2Vuc2UgdG8gdGhlIHRhcmdldCwgMikKKyAgICAgICAgY29weSB0aGUgbW9kdWxlIG9udG8gdGhlIHRhcmdldCBzeXN0ZW0gYW5kIDMpIGluc2VydCB0aGUKKyAgICAgICAgbW9kdWxlIGludG8gdGhlIHRhcmdldCBrZXJuZWwsIHdoaWNoIGFybXMgaXQsIGFuZCA0KSBjb2xsZWN0CisgICAgICAgIHRoZSBkYXRhIGdlbmVyYXRlZCBieSB0aGUgcHJvYmUgYW5kIGRpc3BsYXkgaXQgdG8gdGhlIHVzZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3RlbXRhcC1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaG9zZSBhcmUgYSBsb3Qgb2Ygc3RlcHMgYW5kIGEgbG90IG9mIGRldGFpbHMsIGJ1dAorICAgICAgICAgICAgZm9ydHVuYXRlbHkgWW9jdG8gaW5jbHVkZXMgYSBzY3JpcHQgY2FsbGVkICdjcm9zc3RhcCcKKyAgICAgICAgICAgIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgdGhvc2UgZGV0YWlscywgYWxsb3dpbmcgeW91IHRvCisgICAgICAgICAgICBzaW1wbHkgZXhlY3V0ZSBhIHN5c3RlbXRhcCBzY3JpcHQgb24gdGhlIHJlbW90ZSB0YXJnZXQsCisgICAgICAgICAgICB3aXRoIGFyZ3VtZW50cyBpZiBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIHRvIGRvIHRoaXMgZnJvbSBhIHJlbW90ZSBob3N0LCBob3dldmVyLCB5b3UKKyAgICAgICAgICAgIG5lZWQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1aWxkIGZvciB0aGUgaW1hZ2UgeW91CisgICAgICAgICAgICBib290ZWQuIFRoZSAnY3Jvc3N0YXAnIHNjcmlwdCBwcm92aWRlcyBkZXRhaWxzIG9uIGhvdworICAgICAgICAgICAgdG8gZG8gdGhpcyBpZiB5b3UgcnVuIHRoZSBzY3JpcHQgb24gdGhlIGhvc3Qgd2l0aG91dCBoYXZpbmcKKyAgICAgICAgICAgIGRvbmUgYSBidWlsZDoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFN5c3RlbVRhcCwgd2hpY2ggdXNlcyAnY3Jvc3N0YXAnLCBhc3N1bWVzIHlvdSBjYW4gZXN0YWJsaXNoIGFuCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBjcm9zc3RhcCB3aWtpIHBhZ2UgZm9yIGRldGFpbHMgb24gdmVyaWZ5aW5nCisgICAgICAgICAgICAgICAgc3NoIGNvbm5lY3Rpb25zIGF0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9UcmFjaW5nX2FuZF9Qcm9maWxpbmcjc3lzdGVtdGFwJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBBbHNvLCB0aGUgYWJpbGl0eSB0byBzc2ggaW50byB0aGUgdGFyZ2V0IHN5c3RlbSBpcyBub3QgZW5hYmxlZAorICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gKi1taW5pbWFsIGltYWdlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS44OCB0cmFjZV9vcGVuLnN0cAorCisgICAgIEVycm9yOiBObyB0YXJnZXQga2VybmVsIGJ1aWxkIGZvdW5kLgorICAgICBEaWQgeW91IGZvcmdldCB0byBjcmVhdGUgYSBsb2NhbCBidWlsZCBvZiB5b3VyIGltYWdlPworCisgICAgICdjcm9zc3RhcCcgcmVxdWlyZXMgYSBsb2NhbCBzZGsgYnVpbGQgb2YgdGhlIHRhcmdldCBzeXN0ZW0KKyAgICAgKG9yIGEgYnVpbGQgdGhhdCBpbmNsdWRlcyAndG9vbHMtcHJvZmlsZScpIGluIG9yZGVyIHRvIGJ1aWxkCisgICAgIGtlcm5lbCBtb2R1bGVzIHRoYXQgY2FuIHByb2JlIHRoZSB0YXJnZXQgc3lzdGVtLgorCisgICAgIFByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGF0IG1lYW5zIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAtIElmIHlvdSdyZSBydW5uaW5nIGEgcHJlLWJ1aWx0IGltYWdlLCBkb3dubG9hZCB0aGUgcmVsZWFzZQorICAgICAgICBhbmQvb3IgQlNQIHRhcmJhbGxzIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorICAgICAgLSBJZiB5b3UncmUgd29ya2luZyBmcm9tIGdpdCBzb3VyY2VzLCBqdXN0IGNsb25lIHRoZSBtZXRhZGF0YQorICAgICAgICBhbmQgQlNQIGxheWVycyBuZWVkZWQgdG8gYnVpbGQgdGhlIGltYWdlIHlvdSdsbCBiZSBib290aW5nLgorICAgICAgLSBNYWtlIHN1cmUgeW91J3JlIHByb3Blcmx5IHNldCB1cCB0byBidWlsZCBhIG5ldyBpbWFnZSAoc2VlCisgICAgICAgIHRoZSBCU1AgUkVBRE1FIGFuZC9vciB0aGUgd2lkZWx5IGF2YWlsYWJsZSBiYXNpYyBkb2N1bWVudGF0aW9uCisgICAgICAgIHRoYXQgZGlzY3Vzc2VzIGhvdyB0byBidWlsZCBpbWFnZXMpLgorICAgICAgLSBCdWlsZCBhbiAtc2RrIHZlcnNpb24gb2YgdGhlIGltYWdlIGUuZy46CisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0by1zZGsKKyAgICAgIE9SCisgICAgICAtIEJ1aWxkIGEgbm9uLXNkayBpbWFnZSBidXQgaW5jbHVkZSB0aGUgcHJvZmlsaW5nIHRvb2xzOgorICAgICAgICAgIFsgZWRpdCBsb2NhbC5jb25mIGFuZCBhZGQgJ3Rvb2xzLXByb2ZpbGUnIHRvIHRoZSBlbmQgb2YKKyAgICAgICAgICAgIHRoZSBFWFRSQV9JTUFHRV9GRUFUVVJFUyB2YXJpYWJsZSBdCisgICAgICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworCisgICAgIE9uY2UgeW91J3ZlIGJ1aWxkIHRoZSBpbWFnZSBvbiB0aGUgaG9zdCBzeXN0ZW0sIHlvdSdyZSByZWFkeSB0bworICAgICBib290IGl0IChvciB0aGUgZXF1aXZhbGVudCBwcmUtYnVpbHQgaW1hZ2UpIGFuZCB1c2UgJ2Nyb3NzdGFwJworICAgICB0byBwcm9iZSBpdCAoeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBhcyB1c3VhbCBmaXJzdCk6CisKKyAgICAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKyAgICAgICAgJCBjZCB+L215L3N5c3RlbXRhcC9zY3JpcHRzCisgICAgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjEueHh4IG15c2NyaXB0LnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgU28gZXNzZW50aWFsbHkgd2hhdCB5b3UgbmVlZCB0byBkbyBpcyBidWlsZCBhbiBTREsgaW1hZ2Ugb3IKKyAgICAgICAgICAgIGltYWdlIHdpdGggJ3Rvb2xzLXByb2ZpbGUnIGFzIGRldGFpbGVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGlzIG1hbnVhbCwgYW5kIGJvb3QgdGhlIHJlc3VsdGluZyB0YXJnZXQgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgbWFjaGluZXMsCisgICAgICAgICAgICB5b3UgbmVlZCB0byBoYXZlIHRoZSBNQUNISU5FIHlvdSdyZSBjb25uZWN0aW5nIHRvIHNlbGVjdGVkCisgICAgICAgICAgICBpbiBsb2NhbC5jb25mLCBhbmQgdGhlIGtlcm5lbCBpbiB0aGF0IG1hY2hpbmUncyBidWlsZAorICAgICAgICAgICAgZGlyZWN0b3J5IG11c3QgbWF0Y2ggdGhlIGtlcm5lbCBvbiB0aGUgYm9vdGVkIHN5c3RlbSBleGFjdGx5LAorICAgICAgICAgICAgb3IgeW91J2xsIGdldCB0aGUgYWJvdmUgJ2Nyb3NzdGFwJyBtZXNzYWdlIHdoZW4geW91IHRyeSB0bworICAgICAgICAgICAgaW52b2tlIGEgc2NyaXB0LgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3J1bm5pbmctYS1zY3JpcHQtb24tYS10YXJnZXQnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBhIFNjcmlwdCBvbiBhIFRhcmdldDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBkb25lIHRoYXQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBydW4gYSBzeXN0ZW10YXAKKyAgICAgICAgICAgIHNjcmlwdCBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIC9wYXRoL3RvL3lvY3RvCisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisKKyAgICAgIyMjIFNoZWxsIGVudmlyb25tZW50IHNldCB1cCBmb3IgYnVpbGRzLiAjIyMKKworICAgICBZb3UgY2FuIG5vdyBydW4gJ2JpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgeW91J3ZlIGRvbmUgdGhhdCwgeW91IGNhbiBjZCB0byB3aGF0ZXZlciBkaXJlY3RvcnkKKyAgICAgICAgICAgIGNvbnRhaW5zIHlvdXIgc2NyaXB0cyBhbmQgdXNlICdjcm9zc3RhcCcgdG8gcnVuIHRoZSBzY3JpcHQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgL3BhdGgvdG8vbXkvc3lzdGVtYXAvc2NyaXB0CisgICAgICQgY3Jvc3N0YXAgcm9vdEAxOTIuMTY4LjcuMiB0cmFjZV9vcGVuLnN0cAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgeW91IGdldCBhbiBlcnJvciBjb25uZWN0aW5nIHRvIHRoZSB0YXJnZXQgZS5nLjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIGVycm9yIGVzdGFibGlzaGluZyBzc2ggY29ubmVjdGlvbiBvbiByZW1vdGUgJ3Jvb3RAMTkyLjE2OC43LjInCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUcnkgc3NoJ2luZyB0byB0aGUgdGFyZ2V0IGFuZCBzZWUgd2hhdCBoYXBwZW5zOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNzaCByb290QDE5Mi4xNjguNy4yCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBIGxvdCBvZiB0aGUgdGltZSwgY29ubmVjdGlvbiBwcm9ibGVtcyBhcmUgZHVlIHNwZWNpZnlpbmcgYQorICAgICAgICAgICAgd3JvbmcgSVAgYWRkcmVzcyBvciBoYXZpbmcgYSAnaG9zdCBrZXkgdmVyaWZpY2F0aW9uIGVycm9yJy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgZXZlcnl0aGluZyB3b3JrZWQgYXMgcGxhbm5lZCwgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nCisgICAgICAgICAgICBsaWtlIHRoaXMgKGVudGVyIHRoZSBwYXNzd29yZCB3aGVuIHByb21wdGVkLCBvciBwcmVzcyBlbnRlcgorICAgICAgICAgICAgaWYgaXQncyBzZXQgdXAgdG8gdXNlIG5vIHBhc3N3b3JkKToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguNy4yIHRyYWNlX29wZW4uc3RwCisgICAgIHJvb3RAMTkyLjE2OC43LjIncyBwYXNzd29yZDoKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZTNGUzJMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgbWF0Y2hib3gtdGVybWluKDEwMzYpIG9wZW4gKCIvdG1wL3Z0ZUpNQzdMVyIsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTHxPX0xBUkdFRklMRSwgMDYwMCkKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzeXN0ZW10YXAtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBTeXN0ZW1UYXAgbGFuZ3VhZ2UgcmVmZXJlbmNlIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3NvdXJjZXdhcmUub3JnL3N5c3RlbXRhcC9sYW5ncmVmLyc+U3lzdGVtVGFwIExhbmd1YWdlIFJlZmVyZW5jZTwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpbmtzIHRvIG90aGVyIFN5c3RlbVRhcCBkb2N1bWVudHMsIHR1dG9yaWFscywgYW5kIGV4YW1wbGVzIGNhbiBiZQorICAgICAgICAgICAgZm91bmQgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXAvZG9jdW1lbnRhdGlvbi5odG1sJz5TeXN0ZW1UYXAgZG9jdW1lbnRhdGlvbiBwYWdlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLW9wcm9maWxlJz4KKyAgICA8dGl0bGU+b3Byb2ZpbGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIG9wcm9maWxlIGl0c2VsZiBpcyBhIGNvbW1hbmQtbGluZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J29wcm9maWxlLXNldHVwJz4KKyAgICAgICAgPHRpdGxlPlNldHVwPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGlzIHNlY3Rpb24sIHdlJ2xsIGFzc3VtZSB5b3UndmUgYWxyZWFkeSBwZXJmb3JtZWQgdGhlCisgICAgICAgICAgICBiYXNpYyBzZXR1cCBvdXRsaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwcm9maWxlLW1hbnVhbC1nZW5lcmFsLXNldHVwJz5HZW5lcmFsIFNldHVwPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciB0aGUgc2VjdGlvbiB0aGF0IGRlYWxzIHdpdGggcnVubmluZyBvcHJvZmlsZSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsCisgICAgICAgICAgICB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUgaG9zdCBhbmQgd2lsbCBiZSBydW5uaW5nCisgICAgICAgICAgICBvcHJvZmlsZSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBvcHJvZmlsZXVpIChvcHJvZmlsZS12aWV3ZXIpIGlzIGEgR1VJLWJhc2VkIHByb2dyYW0gdGhhdCBydW5zCisgICAgICAgICAgICBvbiB0aGUgaG9zdCBhbmQgaW50ZXJhY3RzIHJlbW90ZWx5IHdpdGggdGhlIHRhcmdldC4KKyAgICAgICAgICAgIFNlZSB0aGUgb3Byb2ZpbGV1aSBzZWN0aW9uIGZvciB0aGUgZXhhY3Qgc3RlcHMgbmVlZGVkIHRvCisgICAgICAgICAgICBpbnN0YWxsIG9wcm9maWxldWkgb24gdGhlIGhvc3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nb3Byb2ZpbGUtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT3Byb2ZpbGUgYXMgY29uZmlndXJlZCBpbiBZb2N0byBpcyBhIHN5c3RlbS13aWRlIHByb2ZpbGVyCisgICAgICAgICAgICAoaS5lLiB0aGUgdmVyc2lvbiBpbiBZb2N0byBkb2Vzbid0IHlldCBtYWtlIHVzZSBvZiB0aGUKKyAgICAgICAgICAgIHBlcmZfZXZlbnRzIGludGVyZmFjZSB3aGljaCB3b3VsZCBhbGxvdyBpdCB0byBwcm9maWxlCisgICAgICAgICAgICBzcGVjaWZpYyBwcm9jZXNzZXMgYW5kIHdvcmtsb2FkcykuIEl0IHJlbGllcyBvbiBoYXJkd2FyZQorICAgICAgICAgICAgY291bnRlciBzdXBwb3J0IGluIHRoZSBoYXJkd2FyZSAoYnV0IGNhbiBmYWxsIGJhY2sgdG8gYQorICAgICAgICAgICAgdGltZXItYmFzZWQgbW9kZSksIHdoaWNoIG1lYW5zIHRoYXQgaXQgZG9lc24ndCB0YWtlCisgICAgICAgICAgICBhZHZhbnRhZ2Ugb2YgdHJhY2Vwb2ludHMgb3Igb3RoZXIgZXZlbnQgc291cmNlcyBmb3IgZXhhbXBsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgY29uc2lzdHMgb2YgYSBrZXJuZWwgbW9kdWxlIHRoYXQgY29sbGVjdHMgc2FtcGxlcyBhbmQgYQorICAgICAgICAgICAgdXNlcnNwYWNlIGRhZW1vbiB0aGF0IHdyaXRlcyB0aGUgc2FtcGxlIGRhdGEgdG8gZGlzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlICdvcGNvbnRyb2wnIHNoZWxsIHNjcmlwdCBpcyB1c2VkIGZvciB0cmFuc3BhcmVudGx5CisgICAgICAgICAgICBtYW5hZ2luZyB0aGVzZSBjb21wb25lbnRzIGFuZCBzdGFydGluZyBhbmQgc3RvcHBpbmcKKyAgICAgICAgICAgIHByb2ZpbGVzLCBhbmQgdGhlICdvcHJlcG9ydCcgY29tbWFuZCBpcyB1c2VkIHRvCisgICAgICAgICAgICBkaXNwbGF5IHRoZSByZXN1bHRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgb3Byb2ZpbGUgZGFlbW9uIHNob3VsZCBhbHJlYWR5IGJlIHJ1bm5pbmcsIGJ1dCBiZWZvcmUKKyAgICAgICAgICAgIHlvdSBzdGFydCBwcm9maWxpbmcsIHlvdSBtYXkgbmVlZCB0byBjaGFuZ2Ugc29tZSBzZXR0aW5ncworICAgICAgICAgICAgYW5kIHNvbWUgb2YgdGhlc2Ugc2V0dGluZ3MgbWF5IHJlcXVpcmUgdGhlIGRhZW1vbiB0byBub3QKKyAgICAgICAgICAgIGJlIHJ1bm5pbmcuIE9uZSBvZiB0aGVzZSBzZXR0aW5ncyBpcyB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgIHZtbGludXggZmlsZSwgd2hpY2ggeW91J2xsIHdhbnQgdG8gc2V0IHVzaW5nIHRoZSAtLXZtbGludXgKKyAgICAgICAgICAgIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHByb2ZpbGVkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXZtbGludXg9L2Jvb3Qvdm1saW51eC1gdW5hbWUgLXJgCisgICAgIFRoZSBwcm9maWxpbmcgZGFlbW9uIGlzIGN1cnJlbnRseSBhY3RpdmUsIHNvIGNoYW5nZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgd2lsbCBiZSB1c2VkIHRoZSBuZXh0IHRpbWUgeW91IHJlc3RhcnQgb3Byb2ZpbGUgYWZ0ZXIgYSAtLXNodXRkb3duIG9yIC0tZGVpbml0LgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgWW91IGNhbiBjaGVjayBpZiB2bWxpbnV4IGZpbGU6IGlzIHNldCB1c2luZyBvcGNvbnRyb2wgLS1zdGF0dXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxMzM0CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiBub25lCisgICAgIEltYWdlIGZpbHRlcjogbm9uZQorICAgICBDYWxsLWdyYXBoIGRlcHRoOiA2CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiBpdCdzIG5vdCwgeW91IG5lZWQgdG8gc2h1dGRvd24gdGhlIGRhZW1vbiwgYWRkIHRoZSBzZXR0aW5nCisgICAgICAgICAgICBhbmQgcmVzdGFydCB0aGUgZGFlbW9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIEtpbGxpbmcgZGFlbW9uLgorCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgVXNpbmcgZGVmYXVsdCBldmVudDogQ1BVX0NMS19VTkhBTFRFRDoxMDAwMDA6MDoxOjEKKyAgICAgVXNpbmcgMi42KyBPUHJvZmlsZSBrZXJuZWwgaW50ZXJmYWNlLgorICAgICBSZWFkaW5nIG1vZHVsZSBpbmZvLgorICAgICBVc2luZyBsb2cgZmlsZSAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzL29wcm9maWxlZC5sb2cKKyAgICAgRGFlbW9uIHN0YXJ0ZWQuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJZiB3ZSBjaGVjayB0aGUgc3RhdHVzIGFnYWluIHdlIG5vdyBzZWUgb3VyIHVwZGF0ZWQgc2V0dGluZ3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc3RhdHVzCisgICAgIERhZW1vbiBwYXVzZWQ6IHBpZCAxNjQ5CisgICAgIFNlcGFyYXRlIG9wdGlvbnM6IGxpYnJhcnkKKyAgICAgdm1saW51eCBmaWxlOiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICBJbWFnZSBmaWx0ZXI6IG5vbmUKKyAgICAgQ2FsbC1ncmFwaCBkZXB0aDogNgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgV2UncmUgbm93IGluIGEgcG9zaXRpb24gdG8gcnVuIGEgcHJvZmlsZS4gRm9yIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAnb3Bjb250cm9sIC0tc3RhcnQnOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXJ0CisgICAgIFByb2ZpbGVyIHJ1bm5pbmcuCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHdpbmRvdywgcnVuIG91ciB3Z2V0IHdvcmtsb2FkOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHN0b3AgdGhlIHByb2ZpbGUgd2UgdXNlICdvcGNvbnRyb2wgLS1zaHV0ZG93bicsIHdoaWNoIG5vdAorICAgICAgICAgICAgb25seSBzdG9wcyB0aGUgcHJvZmlsZSBidXQgc2h1dHMgZG93biB0aGUgZGFlbW9uIGFzIHdlbGw6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tc2h1dGRvd24KKyAgICAgU3RvcHBpbmcgcHJvZmlsaW5nLgorICAgICBLaWxsaW5nIGRhZW1vbi4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9wcm9maWxlIHdyaXRlcyBzYW1wbGUgZGF0YSB0byAvdmFyL2xpYi9vcHJvZmlsZS9zYW1wbGVzLAorICAgICAgICAgICAgd2hpY2ggeW91IGNhbiBsb29rIGF0IGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlCisgICAgICAgICAgICBzYW1wbGVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIGlzIGFsc28gaW50ZXJlc3RpbmcgYmVjYXVzZQorICAgICAgICAgICAgaXQncyByZWxhdGVkIHRvIGhvdyB5b3UgZGl2ZSBkb3duIHRvIGdldCBmdXJ0aGVyIGRldGFpbHMKKyAgICAgICAgICAgIGFib3V0IHNwZWNpZmljIGV4ZWN1dGFibGVzIGluIE9Qcm9maWxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgZGlzcGxheSBvdXRwdXQgZm9yIGEgcHJvZmlsZSwgc2ltcGx5IHR5cGUKKyAgICAgICAgICAgICdvcHJlcG9ydCcsIHdoaWNoIHdpbGwgc2hvdyB0aGUgcmVzdWx0cyB1c2luZyB0aGUgZGF0YSBpbgorICAgICAgICAgICAgL3Zhci9saWIvb3Byb2ZpbGUvc2FtcGxlczoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJlcG9ydAorCisgICAgIFdBUk5JTkchIFRoZSBPUHJvZmlsZSBrZXJuZWwgZHJpdmVyIHJlcG9ydHMgc2FtcGxlIGJ1ZmZlciBvdmVyZmxvd3MuCisgICAgIFN1Y2ggb3ZlcmZsb3dzIGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IHNhbXBsZSBhdHRyaWJ1dGlvbiwgaW52YWxpZCBzYW1wbGUKKyAgICAgZmlsZXMgYW5kIG90aGVyIHN5bXB0b21zLiAgU2VlIHRoZSBvcHJvZmlsZWQubG9nIGZvciBkZXRhaWxzLgorICAgICBZb3Ugc2hvdWxkIGFkanVzdCB5b3VyIHNhbXBsaW5nIGZyZXF1ZW5jeSB0byBlbGltaW5hdGUgKG9yIGF0IGxlYXN0IG1pbmltaXplKQorICAgICB0aGVzZSBvdmVyZmxvd3MuCisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIENQVV9DTEtfVU5IQUxULi4ufAorICAgICAgc2FtcGxlc3wgICAgICAlfAorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICA0NjQzNjUgNzkuODE1NiB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgICA2NTEwOCAxMS4xOTA4IG9wcm9maWxlZAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKyAJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAJICAgICAgICAgNjQ0MTYgOTguOTM3MiBvcHJvZmlsZWQKKyAJICAgICAgICAgICA2OTIgIDEuMDYyOCBsaWJjLTIuMTYuc28KKyAgICAgICAgMzY5NTkgIDYuMzUyNiBuby12bWxpbnV4CisgICAgICAgICA0Mzc4ICAwLjc1MjUgYnVzeWJveAorCSAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisJICAgICAgIHNhbXBsZXN8ICAgICAgJXwKKwkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgICAgICAyODQ0IDY0Ljk2MTIgbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSBidXN5Ym94CisJICAgICAgICAgICAxOTMgIDQuNDA4NCBsZC0yLjE2LnNvCisJICAgICAgICAgICAgIDIgIDAuMDQ1NyBsaWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IGxpYm5zbC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgIDAuMDIyOCBsaWJuc3NfZmlsZXMtMi4xNi5zbworICAgICAgICAgNDM0NCAgMC43NDY3IGJhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IGJhc2gKKwkgICAgICAgICAgMTY2NSAzOC4zMjg3IGxpYmMtMi4xNi5zbworCSAgICAgICAgICAgIDE4ICAwLjQxNDQgbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgbGlidGluZm8uc28uNS45CisJICAgICAgICAgICAgIDEgIDAuMDIzMCBsaWJkbC0yLjE2LnNvCisgICAgICAgICAzMTE4ICAwLjUzNTkgbmZfY29ubnRyYWNrCisgICAgICAgICAgNjg2ICAwLjExNzkgbWF0Y2hib3gtdGVybWluYWwKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgIDIxNCAzMS4xOTUzIGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAxMTQgMTYuNjE4MSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICA3OSAxMS41MTYwIGxpYmNhaXJvLnNvLjIuMTEyMDAuMgorCSAgICAgICAgICAgIDc4IDExLjM3MDMgbGliZ2RrLXgxMS0yLjAuc28uMC4yNDAwLjgKKwkgICAgICAgICAgICA1MSAgNy40MzQ0IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgIDQ1ICA2LjU1OTggbGliZ29iamVjdC0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAyOSAgNC4yMjc0IGxpYnZ0ZS5zby45LjI4MDAuMgorCSAgICAgICAgICAgIDI1ICAzLjY0NDMgbGliWDExLnNvLjYuMy4wCisJICAgICAgICAgICAgMTkgIDIuNzY5NyBsaWJ4Y2Iuc28uMS4xLjAKKwkgICAgICAgICAgICAxNyAgMi40NzgxIGxpYmd0ay14MTEtMi4wLnNvLjAuMjQwMC44CisJICAgICAgICAgICAgMTIgIDEuNzQ5MyBsaWJydC0yLjE2LnNvCisJICAgICAgICAgICAgIDMgIDAuNDM3MyBsaWJYcmVuZGVyLnNvLjEuMy4wCisgICAgICAgICAgNjcxICAwLjExNTMgZW1nZAorICAgICAgICAgIDQxMSAgMC4wNzA2IG5mX2Nvbm50cmFja19pcHY0CisgICAgICAgICAgMzkxICAwLjA2NzIgaXB0YWJsZV9uYXQKKyAgICAgICAgICAzNzggIDAuMDY1MCBuZl9uYXQKKyAgICAgICAgICAyNjMgIDAuMDQ1MiBYb3JnCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAxMDYgNDAuMzA0MiBYb3JnCisJICAgICAgICAgICAgNTMgMjAuMTUyMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAzMSAxMS43ODcxIGxpYnBpeG1hbi0xLnNvLjAuMjcuMgorCSAgICAgICAgICAgIDI2ICA5Ljg4NTkgZW1nZF9kcnYuc28KKwkgICAgICAgICAgICAxNiAgNi4wODM3IGxpYmVtZ2RzcnZfdW0uc28uMS41LjE1LjMyMjYKKwkgICAgICAgICAgICAxMSAgNC4xODI1IGxpYkVNR0QyZC5zby4xLjUuMTUuMzIyNgorCSAgICAgICAgICAgICA5ICAzLjQyMjEgbGliZmIuc28KKwkgICAgICAgICAgICAgNyAgMi42NjE2IGxpYnB0aHJlYWQtMi4xNi5zbworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGlidWRldi5zby4wLjkuMworCSAgICAgICAgICAgICAxICAwLjM4MDIgbGliZHJtLnNvLjIuNC4wCisJICAgICAgICAgICAgIDEgIDAuMzgwMiBsaWJleHRtb2Quc28KKwkgICAgICAgICAgICAgMSAgMC4zODAyIG1vdXNlX2Rydi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICA5ICAwLjAwMTUgY29ubm1hbmQKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgNCA0NC40NDQ0IGxpYmdsaWItMi4wLnNvLjAuMzIwMC40CisJICAgICAgICAgICAgIDIgMjIuMjIyMiBsaWJwdGhyZWFkLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGNvbm5tYW5kCisJICAgICAgICAgICAgIDEgMTEuMTExMSBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxMS4xMTExIGxpYnJ0LTIuMTYuc28KKyAgICAgICAgICAgIDYgIDAuMDAxMCBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgCSBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAgIDMgNTAuMDAwMCBsaWJjLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAxNi42NjY3IG9wcm9maWxlLXNlcnZlcgorCSAgICAgICAgICAgICAxIDE2LjY2NjcgbGlicHRocmVhZC0yLjE2LnNvCisJICAgICAgICAgICAgIDEgMTYuNjY2NyBsaWJnbGliLTIuMC5zby4wLjMyMDAuNAorICAgICAgICAgICA1IDguNmUtMDQgZ2NvbmZkLTIKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgICAgMiA0MC4wMDAwIGxpYmRidXMtMS5zby4zLjcuMgorCSAgICAgICAgICAgICAyIDQwLjAwMDAgbGliZ2xpYi0yLjAuc28uMC4zMjAwLjQKKwkgICAgICAgICAgICAgMSAyMC4wMDAwIGxpYmMtMi4xNi5zbworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIG91dHB1dCBhYm92ZSBzaG93cyB0aGUgYnJlYWtkb3duIG9yIHNhbXBsZXMgYnkgYm90aAorICAgICAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXMgYW5kIHBlcmNlbnRhZ2UgZm9yIGVhY2ggZXhlY3V0YWJsZS4KKyAgICAgICAgICAgIFdpdGhpbiBhbiBleGVjdXRhYmxlLCB0aGUgc2FtcGxlIGNvdW50cyBhcmUgYnJva2VuIGRvd24KKyAgICAgICAgICAgIGZ1cnRoZXIgaW50byBleGVjdXRhYmxlIGFuZCBzaGFyZWQgbGlicmFyaWVzIChEU09zKSB1c2VkCisgICAgICAgICAgICBieSB0aGUgZXhlY3V0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gZ2V0IGV2ZW4gbW9yZSBkZXRhaWxlZCBicmVha2Rvd25zIGJ5IGZ1bmN0aW9uLCB3ZSBuZWVkIHRvCisgICAgICAgICAgICBoYXZlIHRoZSBmdWxsIHBhdGhzIHRvIHRoZSBEU09zLCB3aGljaCB3ZSBjYW4gZ2V0IGJ5CisgICAgICAgICAgICB1c2luZyAtZiB3aXRoIG9wcmVwb3J0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1mCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgQ1BVX0NMS19VTkhBTFQuLi58CisgICAgICBzYW1wbGVzfCAgICAgICV8CisKKyAgICAgICA0NjQzNjUgNzkuODE1NiAvYm9vdC92bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZAorICAgICAgIDY1MTA4IDExLjE5MDggL3Vzci9iaW4vb3Byb2ZpbGVkCisJICAgICBDUFVfQ0xLX1VOSEFMVC4uLnwKKwkgICAgICAgc2FtcGxlc3wgICAgICAlfAorCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgICAgICAgNjQ0MTYgOTguOTM3MiAvdXNyL2Jpbi9vcHJvZmlsZWQKKwkgICAgICAgICAgIDY5MiAgMS4wNjI4IC9saWIvbGliYy0yLjE2LnNvCisgICAgICAgIDM2OTU5ICA2LjM1MjYgL25vLXZtbGludXgKKyAgICAgICAgIDQzNzggIDAuNzUyNSAvYmluL2J1c3lib3gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjg0NCA2NC45NjEyIC9saWIvbGliYy0yLjE2LnNvCisJICAgICAgICAgIDEzMzcgMzAuNTM5MSAvYmluL2J1c3lib3gKKwkgICAgICAgICAgIDE5MyAgNC40MDg0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAyICAwLjA0NTcgL2xpYi9saWJuc3NfY29tcGF0LTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNsLTIuMTYuc28KKwkgICAgICAgICAgICAgMSAgMC4wMjI4IC9saWIvbGlibnNzX2ZpbGVzLTIuMTYuc28KKyAgICAgICAgIDQzNDQgIDAuNzQ2NyAvYmluL2Jhc2gKKwkgICAgIENQVV9DTEtfVU5IQUxULi4ufAorCSAgICAgICBzYW1wbGVzfCAgICAgICV8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICAgICAgMjY1NyA2MS4xNjQ4IC9iaW4vYmFzaAorCSAgICAgICAgICAxNjY1IDM4LjMyODcgL2xpYi9saWJjLTIuMTYuc28KKwkgICAgICAgICAgICAxOCAgMC40MTQ0IC9saWIvbGQtMi4xNi5zbworCSAgICAgICAgICAgICAzICAwLjA2OTEgL2xpYi9saWJ0aW5mby5zby41LjkKKwkgICAgICAgICAgICAgMSAgMC4wMjMwIC9saWIvbGliZGwtMi4xNi5zbworICAgICAuCisgICAgIC4KKyAgICAgLgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVXNpbmcgdGhlIHBhdGhzIHNob3duIGluIHRoZSBhYm92ZSBvdXRwdXQgYW5kIHRoZSAtbCBvcHRpb24gdG8KKyAgICAgICAgICAgIG9wcmVwb3J0LCB3ZSBjYW4gc2VlIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBoaXRzIGluIHRoZQorICAgICAgICAgICAgcHJvZmlsZSBhbmQgdGhlaXIgc2FtcGxlIGNvdW50cyBhbmQgcGVyY2VudGFnZXMuIEhlcmUncyBhCisgICAgICAgICAgICBwb3J0aW9uIG9mIHdoYXQgd2UgZ2V0IGZvciB0aGUga2VybmVsOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wcmVwb3J0IC1sIC9ib290L3ZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkCisKKyAgICAgQ1BVOiBJbnRlbCBBcmNoaXRlY3R1cmFsIFBlcmZtb24sIHNwZWVkIDEuM2UrMDYgTUh6IChlc3RpbWF0ZWQpCisgICAgIENvdW50ZWQgQ1BVX0NMS19VTkhBTFRFRCBldmVudHMgKENsb2NrIGN5Y2xlcyB3aGVuIG5vdCBoYWx0ZWQpIHdpdGggYSB1bml0IG1hc2sgb2YgMHgwMCAoTm8gdW5pdCBtYXNrKSBjb3VudCAxMDAwMDAKKyAgICAgc2FtcGxlcyAgJSAgICAgICAgc3ltYm9sIG5hbWUKKyAgICAgMjMzOTgxICAgNTAuMzg3MyAgaW50ZWxfaWRsZQorICAgICAxNTQzNyAgICAgMy4zMjQzICByYl9nZXRfcmVhZGVyX3BhZ2UKKyAgICAgMTQ1MDMgICAgIDMuMTIzMiAgcmluZ19idWZmZXJfY29uc3VtZQorICAgICAxNDA5MiAgICAgMy4wMzQ3ICBtdXRleF9zcGluX29uX293bmVyCisgICAgIDEzMDI0ICAgICAyLjgwNDcgIHJlYWRfaHBldAorICAgICA4MDM5ICAgICAgMS43MzEyICBzdWJfcHJlZW1wdF9jb3VudAorICAgICA3MDk2ICAgICAgMS41MjgxICBpb3JlYWQzMgorICAgICA2OTk3ICAgICAgMS41MDY4ICBhZGRfcHJlZW1wdF9jb3VudAorICAgICAzOTg1ICAgICAgMC44NTgyICByYl9hZHZhbmNlX3JlYWRlcgorICAgICAzNDg4ICAgICAgMC43NTExICBhZGRfZXZlbnRfZW50cnkKKyAgICAgMzMwMyAgICAgIDAuNzExMyAgZ2V0X3BhcmVudF9pcAorICAgICAzMTA0ICAgICAgMC42Njg0ICByYl9idWZmZXJfcGVlaworICAgICAyOTYwICAgICAgMC42Mzc0ICBvcF9jcHVfYnVmZmVyX3JlYWRfZW50cnkKKyAgICAgMjYxNCAgICAgIDAuNTYyOSAgc3luY19idWZmZXIKKyAgICAgMjU0NSAgICAgIDAuNTQ4MSAgZGVidWdfc21wX3Byb2Nlc3Nvcl9pZAorICAgICAyNDU2ICAgICAgMC41Mjg5ICBvaGNpX2lycQorICAgICAyMzk3ICAgICAgMC41MTYyICBtZW1zZXQKKyAgICAgMjM0OSAgICAgIDAuNTA1OSAgX19jb3B5X3RvX3VzZXJfbGwKKyAgICAgMjE4NSAgICAgIDAuNDcwNSAgcmluZ19idWZmZXJfZXZlbnRfbGVuZ3RoCisgICAgIDE5MTggICAgICAwLjQxMzAgIGluX2xvY2tfZnVuY3Rpb25zCisgICAgIDE4NTAgICAgICAwLjM5ODQgIF9fc2NoZWR1bGUKKyAgICAgMTc2NyAgICAgIDAuMzgwNSAgX19jb3B5X2Zyb21fdXNlcl9sbF9ub3plcm8KKyAgICAgMTU3NSAgICAgIDAuMzM5MiAgcmJfZXZlbnRfZGF0YV9sZW5ndGgKKyAgICAgMTI1NiAgICAgIDAuMjcwNSAgbWVtY3B5CisgICAgIDEyMzMgICAgICAwLjI2NTUgIHN5c3RlbV9jYWxsCisgICAgIDEyMTMgICAgICAwLjI2MTIgIG1lbnVfc2VsZWN0CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBOb3RpY2UgdGhhdCBhYm92ZSB3ZSBzZWUgYW4gZW50cnkgZm9yIHRoZSBfX2NvcHlfdG9fdXNlcl9sbCgpCisgICAgICAgICAgICBmdW5jdGlvbiB0aGF0IHdlJ3ZlIGxvb2tlZCBhdCB3aXRoIG90aGVyIHByb2ZpbGVycyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBIZXJlJ3Mgd2hhdCB3ZSBnZXQgd2hlbiB3ZSBkbyB0aGUgc2FtZSB0aGluZyBmb3IgdGhlCisgICAgICAgICAgICBidXN5Ym94IGV4ZWN1dGFibGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENQVTogSW50ZWwgQXJjaGl0ZWN0dXJhbCBQZXJmbW9uLCBzcGVlZCAxLjNlKzA2IE1IeiAoZXN0aW1hdGVkKQorICAgICBDb3VudGVkIENQVV9DTEtfVU5IQUxURUQgZXZlbnRzIChDbG9jayBjeWNsZXMgd2hlbiBub3QgaGFsdGVkKSB3aXRoIGEgdW5pdCBtYXNrIG9mIDB4MDAgKE5vIHVuaXQgbWFzaykgY291bnQgMTAwMDAwCisgICAgIHNhbXBsZXMgICUgICAgICAgIGltYWdlIG5hbWUgICAgICAgICAgICAgICBzeW1ib2wgbmFtZQorICAgICAzNDkgICAgICAgOC40MTk4ICBidXN5Ym94ICAgICAgICAgICAgICAgICAgcmV0cmlldmVfZmlsZV9kYXRhCisgICAgIDMwOCAgICAgICA3LjQzMDYgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfSU9fZmlsZV94c2dldG4KKyAgICAgMjgzICAgICAgIDYuODI3NSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9fcmVhZF9ub2NhbmNlbAorICAgICAyMzUgICAgICAgNS42Njk1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgc3lzY2FsbAorICAgICAyMzMgICAgICAgNS42MjEyICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgY2xlYXJlcnIKKyAgICAgMjE1ICAgICAgIDUuMTg3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIGZyZWFkCisgICAgIDE4MSAgICAgICA0LjM2NjcgIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3dyaXRlX25vY2FuY2VsCisgICAgIDE1OCAgICAgICAzLjgxMTggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3VuZGVyZmxvdworICAgICAxNTEgICAgICAgMy42NDI5ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX2RsX2FkZHIKKyAgICAgMTUwICAgICAgIDMuNjE4OCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIHByb2dyZXNzX21ldGVyCisgICAgIDE1MCAgICAgICAzLjYxODggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3BvbGxfbm9jYW5jZWwKKyAgICAgMTQ4ICAgICAgIDMuNTcwNiAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3VuZGVyZmxvd0BAR0xJQkNfMi4xCisgICAgIDEzNyAgICAgICAzLjMwNTIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3BvbGwKKyAgICAgMTI1ICAgICAgIDMuMDE1NyAgYnVzeWJveCAgICAgICAgICAgICAgICAgIGJiX3Byb2dyZXNzX3VwZGF0ZQorICAgICAxMjIgICAgICAgMi45NDMzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX194ODYuZ2V0X3BjX3RodW5rLmJ4CisgICAgIDk1ICAgICAgICAyLjI5MTkgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBmdWxsX3dyaXRlCisgICAgIDgxICAgICAgICAxLjk1NDIgIGJ1c3lib3ggICAgICAgICAgICAgICAgICBzYWZlX3dyaXRlCisgICAgIDc3ICAgICAgICAxLjg1NzcgIGJ1c3lib3ggICAgICAgICAgICAgICAgICB4d3JpdGUKKyAgICAgNzIgICAgICAgIDEuNzM3MCAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19maWxlX3JlYWQKKyAgICAgNzEgICAgICAgIDEuNzEyOSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIF9JT19zZ2V0bgorICAgICA2NyAgICAgICAgMS42MTY0ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcG9sbAorICAgICA1MiAgICAgICAgMS4yNTQ1ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgX0lPX3N3aXRjaF90b19nZXRfbW9kZQorICAgICA0NSAgICAgICAgMS4wODU2ICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgcmVhZAorICAgICAzNCAgICAgICAgMC44MjAzICBsaWJjLTIuMTYuc28gICAgICAgICAgICAgd3JpdGUKKyAgICAgMzIgICAgICAgIDAuNzcyMCAgYnVzeWJveCAgICAgICAgICAgICAgICAgIG1vbm90b25pY19zZWMKKyAgICAgMjUgICAgICAgIDAuNjAzMSAgbGliYy0yLjE2LnNvICAgICAgICAgICAgIHZmcHJpbnRmCisgICAgIDIyICAgICAgICAwLjUzMDggIGJ1c3lib3ggICAgICAgICAgICAgICAgICBnZXRfbW9ubworICAgICAxNCAgICAgICAgMC4zMzc4ICBsZC0yLjE2LnNvICAgICAgICAgICAgICAgc3RyY21wCisgICAgIDE0ICAgICAgICAwLjMzNzggIGxpYmMtMi4xNi5zbyAgICAgICAgICAgICBfX3g4Ni5nZXRfcGNfdGh1bmsuY3gKKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFNpbmNlIHdlIHJlY29yZGVkIHRoZSBwcm9maWxlIHdpdGggYSBjYWxsY2hhaW4gZGVwdGggb2YgNiwgd2UKKyAgICAgICAgICAgIHNob3VsZCBiZSBhYmxlIHRvIHNlZSBvdXIgX19jb3B5X3RvX3VzZXJfbGwoKSBjYWxsY2hhaW5zIGluCisgICAgICAgICAgICB0aGUgb3V0cHV0LCBhbmQgaW5kZWVkIHdlIGNhbiBpZiB3ZSBzZWFyY2ggYXJvdW5kIGEgYml0IGluCisgICAgICAgICAgICB0aGUgJ29wcmVwb3J0IC0tY2FsbGdyYXBoJyBvdXRwdXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3ByZXBvcnQgLS1jYWxsZ3JhcGggL2Jvb3Qvdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQKKworICAgICAgIDM5MiAgICAgICA2Ljk2MzkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIHNvY2tfYWlvX3JlYWQKKyAgICAgICA3MzYgICAgICAxMy4wNzUxICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUKKyAgICAgICAzMjU1ICAgICA1Ny44MjU1ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBpbmV0X3JlY3Ztc2cKKyAgICAgNzg1ICAgICAgIDAuMTY5MCAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgdGNwX3JlY3Ztc2cKKyAgICAgICAxNzkwICAgICAzMS43OTQwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBsb2NhbF9iaF9lbmFibGUKKyAgICAgICAxMjM4ICAgICAyMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2tmcmVlX3NrYgorICAgICAgIDk5MiAgICAgIDE3LjYxOTkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGxvY2tfc29ja19uZXN0ZWQKKyAgICAgICA3ODUgICAgICAxMy45NDMyICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfcmVjdm1zZyBbc2VsZl0KKyAgICAgICA1MjUgICAgICAgOS4zMjUwICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCByZWxlYXNlX3NvY2sKKyAgICAgICAxMTIgICAgICAgMS45ODkzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCB0Y3BfY2xlYW51cF9yYnVmCisgICAgICAgNzIgICAgICAgIDEuMjc4OSAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKworICAgICAxNzAgICAgICAgMC4wMzY2ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYworICAgICAgIDE0OTEgICAgIDczLjMwMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIG1lbWNweV90b2lvdmVjCisgICAgICAgMzI3ICAgICAgMTYuMDc2NyAgdm1saW51eC0zLjQuMTEteW9jdG8tc3RhbmRhcmQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMKKyAgICAgICAxNzAgICAgICAgOC4zNTc5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyBbc2VsZl0KKyAgICAgICAyMCAgICAgICAgMC45ODMzICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBjb3B5X3RvX3VzZXIKKworICAgICAgIDI1ODggICAgIDk4LjI5MDkgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGNvcHlfdG9fdXNlcgorICAgICAyMzQ5ICAgICAgMC41MDU5ICB2bWxpbnV4LTMuNC4xMS15b2N0by1zdGFuZGFyZCBfX2NvcHlfdG9fdXNlcl9sbAorICAgICAgIDIzNDkgICAgIDg5LjIxMzggIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIF9fY29weV90b191c2VyX2xsIFtzZWxmXQorICAgICAgIDE2NiAgICAgICA2LjMwNDYgIHZtbGludXgtMy40LjExLXlvY3RvLXN0YW5kYXJkIGRvX3BhZ2VfZmF1bHQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFJlbWVtYmVyIHRoYXQgYnkgZGVmYXVsdCBPUHJvZmlsZSBzZXNzaW9ucyBhcmUgY3VtdWxhdGl2ZQorICAgICAgICAgICAgaS5lLiBpZiB5b3Ugc3RhcnQgYW5kIHN0b3AgYSBwcm9maWxpbmcgc2Vzc2lvbiwgdGhlbiBzdGFydCBhCisgICAgICAgICAgICBuZXcgb25lLCB0aGUgbmV3IG9uZSB3aWxsIG5vdCBlcmFzZSB0aGUgcHJldmlvdXMgcnVuKHMpIGJ1dAorICAgICAgICAgICAgd2lsbCBidWlsZCBvbiBpdC4gSWYgeW91IHdhbnQgdG8gcmVzdGFydCBhIHByb2ZpbGUgZnJvbSBzY3JhdGNoLAorICAgICAgICAgICAgeW91IG5lZWQgdG8gcmVzZXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tcmVzZXQKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZXVpLWEtZ3VpLWZvci1vcHJvZmlsZSc+CisgICAgICAgIDx0aXRsZT5PUHJvZmlsZVVJIC0gQSBHVUkgZm9yIE9Qcm9maWxlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvY3RvIGFsc28gc3VwcG9ydHMgYSBncmFwaGljYWwgVUkgZm9yIGNvbnRyb2xsaW5nIGFuZCB2aWV3aW5nCisgICAgICAgICAgICBPUHJvZmlsZSB0cmFjZXMsIGNhbGxlZCBPUHJvZmlsZVVJLiBUbyB1c2UgaXQsIHlvdSBmaXJzdCBuZWVkCisgICAgICAgICAgICB0byBjbG9uZSB0aGUgb3Byb2ZpbGV1aSBnaXQgcmVwbywgdGhlbiBjb25maWd1cmUsIGJ1aWxkLCBhbmQKKyAgICAgICAgICAgIGluc3RhbGwgaXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFt0cnpAZW1wYW5hZGEgdG1wXSQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkKKyAgICAgW3RyekBlbXBhbmFkYSB0bXBdJCBjZCBvcHJvZmlsZXVpCisgICAgIFt0cnpAZW1wYW5hZGEgb3Byb2ZpbGV1aV0kIC4vYXV0b2dlbi5zaAorICAgICBbdHJ6QGVtcGFuYWRhIG9wcm9maWxldWldJCBzdWRvIG1ha2UgaW5zdGFsbAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT3Byb2ZpbGVVSSByZXBsYWNlcyB0aGUgJ29wcmVwb3J0JyBmdW5jdGlvbmFsaXR5IHdpdGggYSBHVUksCisgICAgICAgICAgICBhbmQgbm9ybWFsbHkgZG9lc24ndCByZXF1aXJlIHRoZSB1c2VyIHRvIHVzZSAnb3Bjb250cm9sJyBlaXRoZXIuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHRoZSBrZXJuZWwsIGhvd2V2ZXIsIHlvdSBuZWVkIHRvIGVpdGhlcgorICAgICAgICAgICAgdXNlIHRoZSBVSSB0byBzcGVjaWZ5IGEgdm1saW51eCBvciB1c2UgJ29wY29udHJvbCcgdG8gc3BlY2lmeQorICAgICAgICAgICAgaXQgb24gdGhlIHRhcmdldDoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmlyc3QsIG9uIHRoZSB0YXJnZXQsIGNoZWNrIGlmIHZtbGludXggZmlsZTogaXMgc2V0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXN0YXR1cworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgSWYgbm90OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIG9wY29udHJvbCAtLXNodXRkb3duCisgICAgIHJvb3RAY3Jvd25iYXk6fiMgb3Bjb250cm9sIC0tdm1saW51eD0vYm9vdC92bWxpbnV4LWB1bmFtZSAtcmAKKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcGNvbnRyb2wgLS1zdGFydC1kYWVtb24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE5vdywgc3RhcnQgdGhlIG9wcm9maWxlIFVJIG9uIHRoZSBob3N0IHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgW3RyekBlbXBhbmFkYSBvcHJvZmlsZXVpXSQgb3Byb2ZpbGUtdmlld2VyCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUbyBydW4gYSBwcm9maWxlIG9uIHRoZSByZW1vdGUgc3lzdGVtLCBmaXJzdCBjb25uZWN0IHRvIHRoZQorICAgICAgICAgICAgcmVtb3RlIHN5c3RlbSBieSBwcmVzc2luZyB0aGUgJ0Nvbm5lY3QnIGJ1dHRvbiBhbmQgc3VwcGx5aW5nCisgICAgICAgICAgICB0aGUgSVAgYWRkcmVzcyBhbmQgcG9ydCBvZiB0aGUgcmVtb3RlIHN5c3RlbSAodGhlIGRlZmF1bHQKKyAgICAgICAgICAgIHBvcnQgaXMgNDIyNCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBvcHJvZmlsZSBzZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUgc3RhcnRlZCBhbHJlYWR5LgorICAgICAgICAgICAgSWYgbm90LCB0aGUgY29ubmVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSBlaXRoZXIgdHlwZWQgaW4gdGhlCisgICAgICAgICAgICB3cm9uZyBJUCBhZGRyZXNzIGFuZCBwb3J0IChzZWUgYmVsb3cpLCBvciB5b3UgbmVlZCB0byBzdGFydAorICAgICAgICAgICAgdGhlIHNlcnZlciB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9yLCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgcG9ydDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBvcHJvZmlsZS1zZXJ2ZXIgLS1wb3J0IDg4ODgKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgY29ubmVjdGVkLCBwcmVzcyB0aGUgJ1N0YXJ0JyBidXR0b24gYW5kIHRoZW4gcnVuIHRoZQorICAgICAgICAgICAgd2dldCB3b3JrbG9hZCBvbiB0aGUgcmVtb3RlIHN5c3RlbToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBybSBsaW51eC0yLjYuMTkuMi50YXIuYnoyOyB3Z2V0IDx1bGluayB1cmw9J2h0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyJz5odHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6MjwvdWxpbms+OyBzeW5jCisgICAgIENvbm5lY3RpbmcgdG8gZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcgKDE0MC4yMTEuMTY5LjU5OjgwKQorICAgICBsaW51eC0yLjYuMTkuMi50YXIuYiAxMDAlIHwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfCA0MTcyN2sgIDA6MDA6MDAgRVRBCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBPbmNlIHRoZSB3b3JrbG9hZCBjb21wbGV0ZXMsIHByZXNzIHRoZSAnU3RvcCcgYnV0dG9uLiBBdCB0aGF0CisgICAgICAgICAgICBwb2ludCB0aGUgT1Byb2ZpbGUgdmlld2VyIHdpbGwgZG93bmxvYWQgdGhlIHByb2ZpbGUgZmlsZXMgaXQncworICAgICAgICAgICAgY29sbGVjdGVkICh0aGlzIG1heSB0YWtlIHNvbWUgdGltZSwgZXNwZWNpYWxseSBpZiB0aGUga2VybmVsCisgICAgICAgICAgICB3YXMgcHJvZmlsZWQpLiBXaGlsZSBpdCBkb3dubG9hZHMgdGhlIGZpbGVzLCB5b3Ugc2hvdWxkIHNlZQorICAgICAgICAgICAgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktZG93bmxvYWRpbmcucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB0aGUgcHJvZmlsZSBmaWxlcyBoYXZlIGJlZW4gcmV0cmlldmVkLCB5b3Ugc2hvdWxkIHNlZSBhCisgICAgICAgICAgICBsaXN0IG9mIHRoZSBwcm9jZXNzZXMgdGhhdCB3ZXJlIHByb2ZpbGVkOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvb3Byb2ZpbGV1aS1wcm9jZXNzZXMucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IHNlbGVjdCBvbmUgb2YgdGhlbSwgeW91IHNob3VsZCBzZWUgYWxsIHRoZSBzeW1ib2xzIHRoYXQKKyAgICAgICAgICAgIHdlcmUgaGl0IGR1cmluZyB0aGUgcHJvZmlsZS4gU2VsZWN0aW5nIG9uZSBvZiB0aGVtIHdpbGwgc2hvdyBhCisgICAgICAgICAgICBsaXN0IG9mIGNhbGxlcnMgYW5kIGNhbGxlZXMgb2YgdGhlIGNob3NlbiBmdW5jdGlvbiBpbiB0d28KKyAgICAgICAgICAgIHBhbmVzIGJlbG93IHRoZSB0b3AgcGFuZS4gRm9yIGV4YW1wbGUsIGhlcmUncyB3aGF0IHdlIHNlZQorICAgICAgICAgICAgd2hlbiB3ZSBzZWxlY3QgX19jb3B5X3RvX3VzZXJfbGwoKToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL29wcm9maWxldWktY29weS10by11c2VyLnBuZyIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgYWxpZ249ImNlbnRlciIgc2NhbGVmaXQ9IjEiIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFzIGFub3RoZXIgZXhhbXBsZSwgd2UgY2FuIGxvb2sgYXQgdGhlIGJ1c3lib3ggcHJvY2VzcyBhbmQgc2VlCisgICAgICAgICAgICB0aGF0IHRoZSBwcm9ncmVzcyBtZXRlciBtYWRlIGEgc3lzdGVtIGNhbGw6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9vcHJvZmlsZXVpLWJ1c3lib3gucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iN2luIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdvcHJvZmlsZS1kb2N1bWVudGF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkRvY3VtZW50YXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW9jdG8gYWxyZWFkeSBoYXMgc29tZSBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCB1c2luZworICAgICAgICAgICAgT1Byb2ZpbGUgYW5kIG9wcm9maWxldWkuIEFzIHRoaXMgZG9jdW1lbnQgZG9lc24ndCBjb3ZlcgorICAgICAgICAgICAgZXZlcnl0aGluZyBpbiBkZXRhaWwsIGl0IG1heSBiZSB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtb3Byb2ZpbGUnPlByb2ZpbGluZyB3aXRoIE9Qcm9maWxlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT1Byb2ZpbGUgbWFudWFsIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9kb2MvaW5kZXguaHRtbCc+T1Byb2ZpbGUgbWFudWFsPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9Qcm9maWxlIHdlYnNpdGUgY29udGFpbnMgbGlua3MgdG8gdGhlIGFib3ZlIG1hbnVhbCBhbmQKKyAgICAgICAgICAgIGJ1bmNoIG9mIG90aGVyIGl0ZW1zIGluY2x1ZGluZyBhbiBleHRlbnNpdmUgc2V0IG9mIGV4YW1wbGVzOgorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL29wcm9maWxlLnNvdXJjZWZvcmdlLm5ldC9hYm91dC8nPkFib3V0IE9Qcm9maWxlPC91bGluaz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Byb2ZpbGUtbWFudWFsLXN5c3Byb2YnPgorICAgIDx0aXRsZT5TeXNwcm9mPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTeXNwcm9mIGlzIGEgdmVyeSBlYXN5IHRvIHVzZSBzeXN0ZW0td2lkZSBwcm9maWxlciB0aGF0IGNvbnNpc3RzCisgICAgICAgIG9mIGEgc2luZ2xlIHdpbmRvdyB3aXRoIHRocmVlIHBhbmVzIGFuZCBhIGZldyBidXR0b25zIHdoaWNoIGFsbG93CisgICAgICAgIHlvdSB0byBzdGFydCwgc3RvcCwgYW5kIHZpZXcgdGhlIHByb2ZpbGUgZnJvbSBvbmUgcGxhY2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2Ytc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZSBHZW5lcmFsIFNldHVwIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN5c3Byb2YgaXMgYSBHVUktYmFzZWQgYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQKKyAgICAgICAgICAgIHN5c3RlbS4gRm9yIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgd2UgYXNzdW1lIHlvdSd2ZQorICAgICAgICAgICAgc3NoJ2VkIHRvIHRoZSBob3N0IGFuZCB3aWxsIGJlIHJ1bm5pbmcgU3lzcHJvZiBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCAoeW91IGNhbiB1c2UgdGhlICctWCcgb3B0aW9uIHRvIHNzaCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgIFN5c3Byb2YgR1VJIHJ1biBvbiB0aGUgdGFyZ2V0IGJ1dCBkaXNwbGF5IHJlbW90ZWx5IG9uIHRoZQorICAgICAgICAgICAgaG9zdCBpZiB5b3Ugd2FudCkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3lzcHJvZi1iYXNpYy11c2FnZSc+CisgICAgICAgIDx0aXRsZT5CYXNpYyBVc2FnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzdGFydCBwcm9maWxpbmcgdGhlIHN5c3RlbSwgeW91IHNpbXBseSBwcmVzcyB0aGUgJ1N0YXJ0JworICAgICAgICAgICAgYnV0dG9uLiBUbyBzdG9wIHByb2ZpbGluZyBhbmQgdG8gc3RhcnQgdmlld2luZyB0aGUgcHJvZmlsZSBkYXRhCisgICAgICAgICAgICBpbiBvbmUgZWFzeSBzdGVwLCBwcmVzcyB0aGUgJ1Byb2ZpbGUnIGJ1dHRvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSB5b3UndmUgcHJlc3NlZCB0aGUgcHJvZmlsZSBidXR0b24sIHRoZSB0aHJlZSBwYW5lcyB3aWxsCisgICAgICAgICAgICBmaWxsIHVwIHdpdGggcHJvZmlsaW5nIGRhdGE6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9zeXNwcm9mLWNvcHktdG8tdXNlci5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbGVmdCBwYW5lIHNob3dzIGEgbGlzdCBvZiBmdW5jdGlvbnMgYW5kIHByb2Nlc3Nlcy4KKyAgICAgICAgICAgIFNlbGVjdGluZyBvbmUgb2YgdGhvc2UgZXhwYW5kcyB0aGF0IGZ1bmN0aW9uIGluIHRoZSByaWdodAorICAgICAgICAgICAgcGFuZSwgc2hvd2luZyBhbGwgaXRzIGNhbGxlZXMuIE5vdGUgdGhhdCB0aGlzIGNhbGxlci1vcmllbnRlZAorICAgICAgICAgICAgZGlzcGxheSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBwZXJmJ3MgZGVmYXVsdAorICAgICAgICAgICAgY2FsbGVlLW9yaWVudGVkIGNhbGxjaGFpbiBkaXNwbGF5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUgc2NyZWVuc2hvdCBhYm92ZSwgd2UncmUgZm9jdXNpbmcgb24gX19jb3B5X3RvX3VzZXJfbGwoKQorICAgICAgICAgICAgYW5kIGxvb2tpbmcgdXAgdGhlIGNhbGxjaGFpbiB3ZSBjYW4gc2VlIHRoYXQgb25lIG9mIHRoZSBjYWxsZXJzCisgICAgICAgICAgICBvZiBfX2NvcHlfdG9fdXNlcl9sbCBpcyBzeXNfcmVhZCgpIGFuZCB0aGUgY29tcGxldGUgY2FsbHBhdGgKKyAgICAgICAgICAgIGJldHdlZW4gdGhlbS4gTm90aWNlIHRoYXQgdGhpcyBpcyBlc3NlbnRpYWxseSBhIHBvcnRpb24gb2YgdGhlCisgICAgICAgICAgICBzYW1lIGluZm9ybWF0aW9uIHdlIHNhdyBpbiB0aGUgcGVyZiBkaXNwbGF5IHNob3duIGluIHRoZSBwZXJmCisgICAgICAgICAgICBzZWN0aW9uIG9mIHRoaXMgcGFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY29weS1mcm9tLXVzZXIucG5nIiB3aWR0aD0iNmluIiBkZXB0aD0iNGluIiBhbGlnbj0iY2VudGVyIiBzY2FsZWZpdD0iMSIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2ltaWxhcmx5LCB0aGUgYWJvdmUgaXMgYSBzbmFwc2hvdCBvZiB0aGUgU3lzcHJvZiBkaXNwbGF5IG9mIGEKKyAgICAgICAgICAgIGNvcHktZnJvbS11c2VyIGNhbGxjaGFpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgbG9va2luZyBhdCB0aGUgdGhpcmQgU3lzcHJvZiBwYW5lIGluIHRoZSBsb3dlciBsZWZ0LAorICAgICAgICAgICAgd2UgY2FuIHNlZSBhIGxpc3Qgb2YgYWxsIHRoZSBjYWxsZXJzIG9mIGEgcGFydGljdWxhciBmdW5jdGlvbgorICAgICAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIHRvcCBsZWZ0IHBhbmUuIEluIHRoaXMgY2FzZSwgdGhlIGxvd2VyIHBhbmUgaXMKKyAgICAgICAgICAgIHNob3dpbmcgYWxsIHRoZSBjYWxsZXJzIG9mIF9fbWFya19pbm9kZV9kaXJ0eToKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3N5c3Byb2YtY2FsbGVycy5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEb3VibGUtY2xpY2tpbmcgb24gb25lIG9mIHRob3NlIGZ1bmN0aW9ucyB3aWxsIGluIHR1cm4gY2hhbmdlIHRoZQorICAgICAgICAgICAgZm9jdXMgdG8gdGhlIHNlbGVjdGVkIGZ1bmN0aW9uLCBhbmQgc28gb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPGVtcGhhc2lzPlR5aW5nIGl0IFRvZ2V0aGVyOjwvZW1waGFzaXM+IElmIHlvdSBsaWtlIHN5c3Byb2YncyAnY2FsbGVyLW9yaWVudGVkJworICAgICAgICAgICAgZGlzcGxheSwgeW91IG1heSBiZSBhYmxlIHRvIGFwcHJveGltYXRlIGl0IGluIG90aGVyIHRvb2xzIGFzCisgICAgICAgICAgICB3ZWxsLiAgRm9yIGV4YW1wbGUsICdwZXJmIHJlcG9ydCcgaGFzIHRoZSAtZyAoLS1jYWxsLWdyYXBoKQorICAgICAgICAgICAgb3B0aW9uIHRoYXQgeW91IGNhbiBleHBlcmltZW50IHdpdGg7IG9uZSBvZiB0aGUgb3B0aW9ucyBpcworICAgICAgICAgICAgJ2NhbGxlcicgZm9yIGFuIGludmVydGVkIGNhbGxlci1iYXNlZCBjYWxsZ3JhcGggZGlzcGxheS4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N5c3Byb2YtZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgU3lzcHJvZiwgYnV0CisgICAgICAgICAgICBtYXliZSB0aGF0J3MgYmVjYXVzZSBpdCdzIHByZXR0eSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICAgICAgVGhlIFN5c3Byb2Ygd2Vic2l0ZSwgaG93ZXZlciwgaXMgaGVyZToKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9zeXNwcm9mLmNvbS8nPlN5c3Byb2YsIFN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eDwvdWxpbms+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdsdHRuZy1saW51eC10cmFjZS10b29sa2l0LW5leHQtZ2VuZXJhdGlvbic+CisgICAgPHRpdGxlPkxUVG5nIChMaW51eCBUcmFjZSBUb29sa2l0LCBuZXh0IGdlbmVyYXRpb24pPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSdsdHRuZy1zZXR1cCc+CisgICAgICAgIDx0aXRsZT5TZXR1cDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgdGhpcyBzZWN0aW9uLCB3ZSdsbCBhc3N1bWUgeW91J3ZlIGFscmVhZHkgcGVyZm9ybWVkIHRoZQorICAgICAgICAgICAgYmFzaWMgc2V0dXAgb3V0bGluZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTFRUbmcgaXMgcnVuIG9uIHRoZSB0YXJnZXQgc3lzdGVtIGJ5IHNzaCdpbmcgdG8gaXQuCisgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIHRyYWNlcyBncmFwaGljYWxseSwKKyAgICAgICAgICAgIGluc3RhbGwgRWNsaXBzZSBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbgorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21hbnVhbGx5LWNvcHlpbmctYS10cmFjZS10by10aGUtaG9zdC1hbmQtdmlld2luZy1pdC1pbi1lY2xpcHNlJz5NYW51YWxseSBjb3B5aW5nIGEgdHJhY2UgdG8gdGhlIGhvc3QgYW5kIHZpZXdpbmcgaXQgaW4gRWNsaXBzZSAoaS5lLiB1c2luZyBFY2xpcHNlIHdpdGhvdXQgbmV0d29yayBzdXBwb3J0KTwvbGluaz4iCisgICAgICAgICAgICBhbmQgZm9sbG93IHRoZSBkaXJlY3Rpb25zIHRvIG1hbnVhbGx5IGNvcHkgdHJhY2VzIHRvIHRoZSBob3N0IGFuZAorICAgICAgICAgICAgdmlldyB0aGVtIGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEJlIHN1cmUgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwvcnVuIHRoZSAnU1IxJyBvciBsYXRlciBKdW5vIHJlbGVhc2UKKyAgICAgICAgICAgIG9mIGVjbGlwc2UgZS5nLjoKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZG93bmxvYWRzL2Rvd25sb2FkLnBocD9maWxlPS90ZWNobm9sb2d5L2VwcC9kb3dubG9hZHMvcmVsZWFzZS9qdW5vL1NSMS9lY2xpcHNlLWNwcC1qdW5vLVNSMS1saW51eC1ndGsteDg2XzY0LnRhci5neic+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kb3dubG9hZHMvZG93bmxvYWQucGhwP2ZpbGU9L3RlY2hub2xvZ3kvZXBwL2Rvd25sb2Fkcy9yZWxlYXNlL2p1bm8vU1IxL2VjbGlwc2UtY3BwLWp1bm8tU1IxLWxpbnV4LWd0ay14ODZfNjQudGFyLmd6PC91bGluaz4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLXRyYWNlcyc+CisgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCBWaWV3aW5nIFRyYWNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIHlvdSd2ZSBhcHBsaWVkIHRoZSBhYm92ZSBjb21taXRzIGFuZCBidWlsdCBhbmQgYm9vdGVkIHlvdXIKKyAgICAgICAgICAgIGltYWdlICh5b3UgbmVlZCB0byBidWlsZCB0aGUgY29yZS1pbWFnZS1zYXRvLXNkayBpbWFnZSBvciB1c2Ugb25lIG9mIHRoZQorICAgICAgICAgICAgb3RoZXIgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlIEdlbmVyYWwgU2V0dXAgc2VjdGlvbiksIHlvdSdyZQorICAgICAgICAgICAgcmVhZHkgdG8gc3RhcnQgdHJhY2luZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdHJhY2Utb24tdGhlLXRhcmdldC1pbnNpZGUtYS1zaGVsbCc+CisgICAgICAgICAgICA8dGl0bGU+Q29sbGVjdGluZyBhbmQgdmlld2luZyBhIHRyYWNlIG9uIHRoZSB0YXJnZXQgKGluc2lkZSBhIHNoZWxsKTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTcGF3bmluZyBhIHNlc3Npb24gZGFlbW9uCisgICAgIFNlc3Npb24gYXV0by0yMDEyMTAxNS0yMzIxMjAgY3JlYXRlZC4KKyAgICAgVHJhY2VzIHdpbGwgYmUgd3JpdHRlbiBpbiAvaG9tZS9yb290L2x0dG5nLXRyYWNlcy9hdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGV2ZW50cyB5b3Ugd2FudCB0byB0cmFjZSAoaW4gdGhpcyBjYXNlIGFsbAorICAgICAgICAgICAgICAgIGtlcm5lbCBldmVudHMpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBlbmFibGUtZXZlbnQgLS1rZXJuZWwgLS1hbGwKKyAgICAgQWxsIGtlcm5lbCBldmVudHMgYXJlIGVuYWJsZWQgaW4gY2hhbm5lbCBjaGFubmVsMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBTdGFydCB0aGUgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0YXJ0CisgICAgIFRyYWNpbmcgc3RhcnRlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBBbmQgdGhlbiBzdG9wIHRoZSB0cmFjZSBhZnRlciBhd2hpbGUgb3IgYWZ0ZXIgcnVubmluZworICAgICAgICAgICAgICAgIGEgcGFydGljdWxhciB3b3JrbG9hZCB0aGF0IHlvdSB3YW50IHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdG9wCisgICAgIFRyYWNpbmcgc3RvcHBlZCBmb3Igc2Vzc2lvbiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIG5vdyB2aWV3IHRoZSB0cmFjZSBpbiB0ZXh0IGZvcm0gb24gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgdmlldworICAgICBbMjM6MjE6NTYuOTg5MjcwMzk5XSAoKz8uPz8/Pz8/Pz8/KSBzeXNfZ2V0ZXVpZDogeyAxIH0sIHsgfQorICAgICBbMjM6MjE6NTYuOTg5Mjc4MDgxXSAoKzAuMDAwMDA3NjgyKSBleGl0X3N5c2NhbGw6IHsgMSB9LCB7IHJldCA9IDAgfQorICAgICBbMjM6MjE6NTYuOTg5Mjg2MDQzXSAoKzAuMDAwMDA3OTYyKSBzeXNfcGlwZTogeyAxIH0sIHsgZmlsZGVzID0gMHhCNzdCOUU4QyB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjE4MDJdICgrMC4wMDAwMzU3NTkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzMjkzNDVdICgrMC4wMDAwMDc1NDMpIHN5c19tbWFwX3Bnb2ZmOiB7IDEgfSwgeyBhZGRyID0gMHgwLCBsZW4gPSAxMDQ4NTc2MCwgcHJvdCA9IDMsIGZsYWdzID0gMTMxMzYyLCBmZCA9IDQyOTQ5NjcyOTUsIHBnb2ZmID0gMCB9CisgICAgIFsyMzoyMTo1Ni45ODkzNTE2OTRdICgrMC4wMDAwMjIzNDkpIGV4aXRfc3lzY2FsbDogeyAxIH0sIHsgcmV0ID0gLTEyNDc4MDU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NDMyOTg5XSAoKzAuMDAwMDgxMjk1KSBzeXNfY2xvbmU6IHsgMSB9LCB7IGNsb25lX2ZsYWdzID0gMHg0MTEsIG5ld3NwID0gMHhCNUVGRkZFNCwgcGFyZW50X3RpZCA9IDB4RkZGRkZGRkYsIGNoaWxkX3RpZCA9IDB4MCB9CisgICAgIFsyMzoyMTo1Ni45ODk0NzcxMjldICgrMC4wMDAwNDQxNDApIHNjaGVkX3N0YXRfcnVudGltZTogeyAxIH0sIHsgY29tbSA9ICJsdHRuZy1jb25zdW1lcmQiLCB0aWQgPSAxMTkzLCBydW50aW1lID0gNjgxNjYwLCB2cnVudGltZSA9IDQzMzY3OTgzMzg4IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTQ4NjY5N10gKCswLjAwMDAwOTU2OCkgc2NoZWRfbWlncmF0ZV90YXNrOiB7IDEgfSwgeyBjb21tID0gImx0dG5nLWNvbnN1bWVyZCIsIHRpZCA9IDExOTMsIHByaW8gPSAyMCwgb3JpZ19jcHUgPSAxLCBkZXN0X2NwdSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NTA4NDE4XSAoKzAuMDAwMDIxNzIxKSBocnRpbWVyX2luaXQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTcwODMyMDc2LCBjbG9ja2lkID0gMSwgbW9kZSA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5NzcwNDYyXSAoKzAuMDAwMjYyMDQ0KSBocnRpbWVyX2NhbmNlbDogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAgfQorICAgICBbMjM6MjE6NTYuOTg5NzcxNTgwXSAoKzAuMDAwMDAxMTE4KSBocnRpbWVyX2NhbmNlbDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc2OTU3XSAoKzAuMDAwMDA1Mzc3KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgaHJ0aW1lciA9IDM5OTM4NjU0NDAsIG5vdyA9IDc5ODE1OTgwMDA3MDU3LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5Nzc4MTQ1XSAoKzAuMDAwMDAxMTg4KSBocnRpbWVyX2V4cGlyZV9lbnRyeTogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIsIG5vdyA9IDc5ODE1OTgwMDA4MTc0LCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIgfQorICAgICBbMjM6MjE6NTYuOTg5NzkxNjk1XSAoKzAuMDAwMDEzNTUwKSBzb2Z0aXJxX3JhaXNlOiB7IDEgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTc5NTM5Nl0gKCswLjAwMDAwMzcwMSkgc29mdGlycV9yYWlzZTogeyAwIH0sIHsgdmVjID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDA2MzVdICgrMC4wMDAwMDUyMzkpIHNvZnRpcnFfcmFpc2U6IHsgMCB9LCB7IHZlYyA9IDkgfQorICAgICBbMjM6MjE6NTYuOTg5ODA3MTMwXSAoKzAuMDAwMDA2NDk1KSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDMzMDcxMCwgdnJ1bnRpbWUgPSA0MzM2ODMxNDA5OCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MDk5OTNdICgrMC4wMDAwMDI4NjMpIHNjaGVkX3N0YXRfcnVudGltZTogeyAwIH0sIHsgY29tbSA9ICJsdHRuZy1zZXNzaW9uZCIsIHRpZCA9IDExODEsIHJ1bnRpbWUgPSAxMDE1MzEzLCB2cnVudGltZSA9IDM2OTc2NzMzMjQwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgxODUxNF0gKCswLjAwMDAwODUyMSkgaHJ0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgaHJ0aW1lciA9IDM5OTM4MTIxOTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODE5NjMxXSAoKzAuMDAwMDAxMTE3KSBocnRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyBocnRpbWVyID0gMzk5Mzg2NTQ0MCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjE4NjZdICgrMC4wMDAwMDIyMzUpIGhydGltZXJfc3RhcnQ6IHsgMCB9LCB7IGhydGltZXIgPSAzOTkzODEyMTkyLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MjI5ODRdICgrMC4wMDAwMDExMTgpIGhydGltZXJfc3RhcnQ6IHsgMSB9LCB7IGhydGltZXIgPSAzOTkzODY1NDQwLCBmdW5jdGlvbiA9IDMyMzg0NjUyMzIsIGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCwgc29mdGV4cGlyZXMgPSA3OTgxNTk4MTAwMDAwMCB9CisgICAgIFsyMzoyMTo1Ni45ODk4MzI3NjJdICgrMC4wMDAwMDk3NzgpIHNvZnRpcnFfZW50cnk6IHsgMSB9LCB7IHZlYyA9IDEgfQorICAgICBbMjM6MjE6NTYuOTg5ODMzODc5XSAoKzAuMDAwMDAxMTE3KSBzb2Z0aXJxX2VudHJ5OiB7IDAgfSwgeyB2ZWMgPSAxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTgzODA2OV0gKCswLjAwMDAwNDE5MCkgdGltZXJfY2FuY2VsOiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODM5MTg3XSAoKzAuMDAwMDAxMTE4KSB0aW1lcl9jYW5jZWw6IHsgMCB9LCB7IHRpbWVyID0gMzk5MzgxODcwOCB9CisgICAgIFsyMzoyMTo1Ni45ODk4NDE0OTJdICgrMC4wMDAwMDIzMDUpIHRpbWVyX2V4cGlyZV9lbnRyeTogeyAxIH0sIHsgdGltZXIgPSAzOTkzODcxOTU2LCBub3cgPSA3OTUxNTk4MCwgZnVuY3Rpb24gPSAzMjM4Mjc3NTUyIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg0MjgxOV0gKCswLjAwMDAwMTMyNykgdGltZXJfZXhwaXJlX2VudHJ5OiB7IDAgfSwgeyB0aW1lciA9IDM5OTM4MTg3MDgsIG5vdyA9IDc5NTE1OTgwLCBmdW5jdGlvbiA9IDMyMzgyNzc1NTIgfQorICAgICBbMjM6MjE6NTYuOTg5ODU0ODMxXSAoKzAuMDAwMDEyMDEyKSBzY2hlZF9zdGF0X3J1bnRpbWU6IHsgMSB9LCB7IGNvbW0gPSAibHR0bmctY29uc3VtZXJkIiwgdGlkID0gMTE5MywgcnVudGltZSA9IDQ5MjM3LCB2cnVudGltZSA9IDQzMzY4MzYzMzM1IH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg1NTk0OV0gKCswLjAwMDAwMTExOCkgc2NoZWRfc3RhdF9ydW50aW1lOiB7IDAgfSwgeyBjb21tID0gImx0dG5nLXNlc3Npb25kIiwgdGlkID0gMTE4MSwgcnVudGltZSA9IDQ1MTIxLCB2cnVudGltZSA9IDM2OTc2Nzc4MzYxIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2MTI1N10gKCswLjAwMDAwNTMwOCkgc2NoZWRfc3RhdF9zbGVlcDogeyAxIH0sIHsgY29tbSA9ICJrd29ya2VyLzE6MSIsIHRpZCA9IDIxLCBkZWxheSA9IDk0NTEzMTggfQorICAgICBbMjM6MjE6NTYuOTg5ODYyMzc0XSAoKzAuMDAwMDAxMTE3KSBzY2hlZF9zdGF0X3NsZWVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgZGVsYXkgPSA5OTU4ODIwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2ODI0MV0gKCswLjAwMDAwNTg2Nykgc2NoZWRfd2FrZXVwOiB7IDAgfSwgeyBjb21tID0gImt3b3JrZXIvMDowIiwgdGlkID0gNCwgcHJpbyA9IDEyMCwgc3VjY2VzcyA9IDEsIHRhcmdldF9jcHUgPSAwIH0KKyAgICAgWzIzOjIxOjU2Ljk4OTg2OTM1OF0gKCswLjAwMDAwMTExNykgc2NoZWRfd2FrZXVwOiB7IDEgfSwgeyBjb21tID0gImt3b3JrZXIvMToxIiwgdGlkID0gMjEsIHByaW8gPSAxMjAsIHN1Y2Nlc3MgPSAxLCB0YXJnZXRfY3B1ID0gMSB9CisgICAgIFsyMzoyMTo1Ni45ODk4Nzc0NjBdICgrMC4wMDAwMDgxMDIpIHRpbWVyX2V4cGlyZV9leGl0OiB7IDEgfSwgeyB0aW1lciA9IDM5OTM4NzE5NTYgfQorICAgICBbMjM6MjE6NTYuOTg5ODc4NTc3XSAoKzAuMDAwMDAxMTE3KSB0aW1lcl9leHBpcmVfZXhpdDogeyAwIH0sIHsgdGltZXIgPSAzOTkzODE4NzA4IH0KKyAgICAgLgorICAgICAuCisgICAgIC4KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgc2FmZWx5IGRlc3Ryb3kgdGhlIHRyYWNlIHNlc3Npb24gKG5vdGUgdGhhdAorICAgICAgICAgICAgICAgIHRoaXMgZG9lc24ndCBkZWxldGUgdGhlIHRyYWNlIC0gaXQncyBzdGlsbCB0aGVyZQorICAgICAgICAgICAgICAgIGluIH4vbHR0bmctdHJhY2VzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZGVzdHJveQorICAgICBTZXNzaW9uIGF1dG8tMjAxMjEwMTUtMjMyMTIwIGRlc3Ryb3llZCBhdCAvaG9tZS9yb290CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgdHJhY2UgaXMgc2F2ZWQgaW4gYSBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5ICdsdHRuZyBjcmVhdGUnLCB1bmRlciB0aGUgfi9sdHRuZy10cmFjZXMKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgKG5vdGUgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHN1cHBseWluZyB5b3VyCisgICAgICAgICAgICAgICAgb3duIG5hbWUgdG8gJ2x0dG5nIGNyZWF0ZScpOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBscyAtYWwgfi9sdHRuZy10cmFjZXMKKyAgICAgZHJ3eHJ3eC0tLSAgICAzIHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMTUgMjM6MjEgLgorICAgICBkcnd4ci14ci14ICAgIDUgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzo1NyAuLgorICAgICBkcnd4cnd4LS0tICAgIDMgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAxNSAyMzoyMSBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdjb2xsZWN0aW5nLWFuZC12aWV3aW5nLWEtdXNlcnNwYWNlLXRyYWNlLW9uLXRoZS10YXJnZXQtaW5zaWRlLWEtc2hlbGwnPgorICAgICAgICAgICAgPHRpdGxlPkNvbGxlY3RpbmcgYW5kIHZpZXdpbmcgYSB1c2Vyc3BhY2UgdHJhY2Ugb24gdGhlIHRhcmdldCAoaW5zaWRlIGEgc2hlbGwpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9yIExUVG5nIHVzZXJzcGFjZSB0cmFjaW5nLCB5b3UgbmVlZCB0byBoYXZlIGEgcHJvcGVybHkKKyAgICAgICAgICAgICAgICBpbnN0cnVtZW50ZWQgdXNlcnNwYWNlIHByb2dyYW0uIEZvciB0aGlzIGV4YW1wbGUsIHdlJ2xsIHVzZQorICAgICAgICAgICAgICAgIHRoZSAnaGVsbG8nIHRlc3QgcHJvZ3JhbSBnZW5lcmF0ZWQgYnkgdGhlIGx0dG5nLXVzdCBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICdoZWxsbycgdGVzdCBwcm9ncmFtIGlzbid0IGluc3RhbGxlZCBvbiB0aGUgcm9vdGZzIGJ5CisgICAgICAgICAgICAgICAgdGhlIGx0dG5nLXVzdCBidWlsZCwgc28gd2UgbmVlZCB0byBjb3B5IGl0IG92ZXIgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgRmlyc3QgY2QgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIGhlbGxvCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2QgYnVpbGQvdG1wL3dvcmsvY29yZTJfMzItcG9reS1saW51eC9sdHRuZy11c3QvMi4wLjUtcjAvZ2l0L3Rlc3RzL2hlbGxvLy5saWJzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIENvcHkgdGhhdCBvdmVyIHRvIHRoZSB0YXJnZXQgbWFjaGluZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc2NwIGhlbGxvIHJvb3RAMTkyLjE2OC4xLjIwOgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3Ugbm93IGhhdmUgdGhlIGluc3RydW1lbnRlZCBsdHRuZyAnaGVsbG8gd29ybGQnIHRlc3QKKyAgICAgICAgICAgICAgICBwcm9ncmFtIG9uIHRoZSB0YXJnZXQsIHJlYWR5IHRvIHRlc3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZpcnN0LCBmcm9tIHRoZSBob3N0LCBzc2ggdG8gdGhlIHRhcmdldDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3NoIC1sIHJvb3QgMTkyLjE2OC4xLjQ3CisgICAgIFRoZSBhdXRoZW50aWNpdHkgb2YgaG9zdCAnMTkyLjE2OC4xLjQ3ICgxOTIuMTY4LjEuNDcpJyBjYW4ndCBiZSBlc3RhYmxpc2hlZC4KKyAgICAgUlNBIGtleSBmaW5nZXJwcmludCBpcyAyMzpiZDpjODpiMTphODo3MTo1MjowMDplZTowMDo0Zjo2NDo5ZToxMDpiOTo3ZS4KKyAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlIGNvbm5lY3RpbmcgKHllcy9ubyk/IHllcworICAgICBXYXJuaW5nOiBQZXJtYW5lbnRseSBhZGRlZCAnMTkyLjE2OC4xLjQ3JyAoUlNBKSB0byB0aGUgbGlzdCBvZiBrbm93biBob3N0cy4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSBvbiB0aGUgdGFyZ2V0LCB1c2UgdGhlc2Ugc3RlcHMgdG8gY3JlYXRlIGEgdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGNyZWF0ZQorICAgICBTZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzIGNyZWF0ZWQuCisgICAgIFRyYWNlcyB3aWxsIGJlIHdyaXR0ZW4gaW4gL2hvbWUvcm9vdC9sdHRuZy10cmFjZXMvYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBldmVudHMgeW91IHdhbnQgdG8gdHJhY2UgKGluIHRoaXMgY2FzZSBhbGwKKyAgICAgICAgICAgICAgICB1c2Vyc3BhY2UgZXZlbnRzKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHR0bmcgZW5hYmxlLWV2ZW50IC0tdXNlcnNwYWNlIC0tYWxsCisgICAgIEFsbCBVU1QgZXZlbnRzIGFyZSBlbmFibGVkIGluIGNoYW5uZWwgY2hhbm5lbDAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgU3RhcnQgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyBzdGFydAorICAgICBUcmFjaW5nIHN0YXJ0ZWQgZm9yIHNlc3Npb24gYXV0by0yMDE5MDMwMy0wMjE5NDMKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgUnVuIHRoZSBpbnN0cnVtZW50ZWQgaGVsbG8gd29ybGQgcHJvZ3JhbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgLi9oZWxsbworICAgICBIZWxsbywgV29ybGQhCisgICAgIFRyYWNpbmcuLi4gIGRvbmUuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGVuIHN0b3AgdGhlIHRyYWNlIGFmdGVyIGF3aGlsZSBvciBhZnRlciBydW5uaW5nIGEKKyAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHdvcmtsb2FkIHRoYXQgeW91IHdhbnQgdG8gdHJhY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIHN0b3AKKyAgICAgVHJhY2luZyBzdG9wcGVkIGZvciBzZXNzaW9uIGF1dG8tMjAxOTAzMDMtMDIxOTQzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHZpZXcgdGhlIHRyYWNlIGluIHRleHQgZm9ybSBvbiB0aGUgdGFyZ2V0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBsdHRuZyB2aWV3CisgICAgIFswMjozMToxNC45MDYxNDY1NDRdICgrPy4/Pz8/Pz8/Pz8pIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAwLCBpbnRmaWVsZDIgPSAweDAsIGxvbmdmaWVsZCA9IDAsIG5ldGludGZpZWxkID0gMCwgbmV0aW50ZmllbGRoZXggPSAweDAsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCAgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIFswMjozMToxNC45MDYxNzAzNjBdICgrMC4wMDAwMjM4MTYpIGhlbGxvOjE0MjQgdXN0X3Rlc3RzX2hlbGxvOnRwdGVzdDogeyBjcHVfaWQgPSAxIH0sIHsgaW50ZmllbGQgPSAxLCBpbnRmaWVsZDIgPSAweDEsIGxvbmdmaWVsZCA9IDEsIG5ldGludGZpZWxkID0gMSwgbmV0aW50ZmllbGRoZXggPSAweDEsIGFycmZpZWxkMSA9IFsgWzBdID0gMSwgWzFdID0gMiwgWzJdID0gMyBdLCBhcnJmaWVsZDIgPSAidGVzdCIsIF9zZXFmaWVsZDFfbGVuZ3RoID0gNCwgc2VxZmllbGQxID0gWyBbMF0gPSAxMTYsIFsxXSA9IDEwMSwgWzJdID0gMTE1LCBbM10gPSAxMTYgXSwgX3NlcWZpZWxkMl9sZW5ndGggPSA0LCBzZXFmaWVsZDIgPSAidGVzdCIsIHN0cmluZ2ZpZWxkID0gInRlc3QiLCBmbG9hdGZpZWxkID0gMjIyMiwgZG91YmxlZmllbGQgPSAyLCBib29sZmllbGQgPSAxIH0KKyAgICAgWzAyOjMxOjE0LjkwNjE4MzE0MF0gKCswLjAwMDAxMjc4MCkgaGVsbG86MTQyNCB1c3RfdGVzdHNfaGVsbG86dHB0ZXN0OiB7IGNwdV9pZCA9IDEgfSwgeyBpbnRmaWVsZCA9IDIsIGludGZpZWxkMiA9IDB4MiwgbG9uZ2ZpZWxkID0gMiwgbmV0aW50ZmllbGQgPSAyLCBuZXRpbnRmaWVsZGhleCA9IDB4MiwgYXJyZmllbGQxID0gWyBbMF0gPSAxLCBbMV0gPSAyLCBbMl0gPSAzIF0sIGFycmZpZWxkMiA9ICJ0ZXN0IiwgX3NlcWZpZWxkMV9sZW5ndGggPSA0LCBzZXFmaWVsZDEgPSBbIFswXSA9IDExNiwgWzFdID0gMTAxLCBbMl0gPSAxMTUsIFszXSA9IDExNiBdLCBfc2VxZmllbGQyX2xlbmd0aCA9IDQsIHNlcWZpZWxkMiA9ICJ0ZXN0Iiwgc3RyaW5nZmllbGQgPSAidGVzdCIsIGZsb2F0ZmllbGQgPSAyMjIyLCBkb3VibGVmaWVsZCA9IDIsIGJvb2xmaWVsZCA9IDEgfQorICAgICBbMDI6MzE6MTQuOTA2MTk0Mzg1XSAoKzAuMDAwMDExMjQ1KSBoZWxsbzoxNDI0IHVzdF90ZXN0c19oZWxsbzp0cHRlc3Q6IHsgY3B1X2lkID0gMSB9LCB7IGludGZpZWxkID0gMywgaW50ZmllbGQyID0gMHgzLCBsb25nZmllbGQgPSAzLCBuZXRpbnRmaWVsZCA9IDMsIG5ldGludGZpZWxkaGV4ID0gMHgzLCBhcnJmaWVsZDEgPSBbIFswXSA9IDEsIFsxXSA9IDIsIFsyXSA9IDMgXSwgYXJyZmllbGQyID0gInRlc3QiLCBfc2VxZmllbGQxX2xlbmd0aCA9IDQsIHNlcWZpZWxkMSA9IFsgWzBdID0gMTE2LCBbMV0gPSAxMDEsIFsyXSA9IDExNSwgWzNdID0gMTE2IF0sIF9zZXFmaWVsZDJfbGVuZ3RoID0gNCwgc2VxZmllbGQyID0gInRlc3QiLCBzdHJpbmdmaWVsZCA9ICJ0ZXN0IiwgZmxvYXRmaWVsZCA9IDIyMjIsIGRvdWJsZWZpZWxkID0gMiwgYm9vbGZpZWxkID0gMSB9CisgICAgIC4KKyAgICAgLgorICAgICAuCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFlvdSBjYW4gbm93IHNhZmVseSBkZXN0cm95IHRoZSB0cmFjZSBzZXNzaW9uIChub3RlIHRoYXQKKyAgICAgICAgICAgICAgICB0aGlzIGRvZXNuJ3QgZGVsZXRlIHRoZSB0cmFjZSAtIGl0J3Mgc3RpbGwKKyAgICAgICAgICAgICAgICB0aGVyZSBpbiB+L2x0dG5nLXRyYWNlcyk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGx0dG5nIGRlc3Ryb3kKKyAgICAgU2Vzc2lvbiBhdXRvLTIwMTkwMzAzLTAyMTk0MyBkZXN0cm95ZWQgYXQgL2hvbWUvcm9vdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtYW51YWxseS1jb3B5aW5nLWEtdHJhY2UtdG8tdGhlLWhvc3QtYW5kLXZpZXdpbmctaXQtaW4tZWNsaXBzZSc+CisgICAgICAgICAgICA8dGl0bGU+TWFudWFsbHkgY29weWluZyBhIHRyYWNlIHRvIHRoZSBob3N0IGFuZCB2aWV3aW5nIGl0IGluIEVjbGlwc2UgKGkuZS4gdXNpbmcgRWNsaXBzZSB3aXRob3V0IG5ldHdvcmsgc3VwcG9ydCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYWxyZWFkeSBoYXZlIGFuIExUVG5nIHRyYWNlIG9uIGEgcmVtb3RlIHRhcmdldCBhbmQKKyAgICAgICAgICAgICAgICB3b3VsZCBsaWtlIHRvIHZpZXcgaXQgaW4gRWNsaXBzZSBvbiB0aGUgaG9zdCwgeW91IGNhbiBlYXNpbHkKKyAgICAgICAgICAgICAgICBjb3B5IGl0IGZyb20gdGhlIHRhcmdldCB0byB0aGUgaG9zdCBhbmQgaW1wb3J0IGl0IGludG8KKyAgICAgICAgICAgICAgICBFY2xpcHNlIHRvIHZpZXcgaXQgdXNpbmcgdGhlIExUVG5nIEVjbGlwc2UgcGx1Zy1pbiBhbHJlYWR5CisgICAgICAgICAgICAgICAgYnVuZGxlZCBpbiB0aGUgRWNsaXBzZSAoSnVubyBTUjEgb3IgZ3JlYXRlcikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB0cmFjZSB3ZSBjcmVhdGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCBhcmNoaXZlCisgICAgICAgICAgICAgICAgaXQgYW5kIGNvcHkgaXQgdG8geW91ciBob3N0IHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fi9sdHRuZy10cmFjZXMjIHRhciB6Y3ZmIGF1dG8tMjAxMjEwMTUtMjMyMTIwLnRhci5neiBhdXRvLTIwMTIxMDE1LTIzMjEyMAorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC8KKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvbWV0YWRhdGEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzEKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsL2NoYW5uZWwwXzAKKworICAgICAkIHNjcCByb290QDE5Mi4xNjguMS40NzpsdHRuZy10cmFjZXMvYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IC4KKyAgICAgcm9vdEAxOTIuMTY4LjEuNDcncyBwYXNzd29yZDoKKyAgICAgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwJSAxNTY2S0IgICAxLjVNQi9zICAgMDA6MDEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVW5hcmNoaXZlIGl0IG9uIHRoZSBob3N0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBndW56aXAgLWMgYXV0by0yMDEyMTAxNS0yMzIxMjAudGFyLmd6IHwgdGFyIHh2ZiAtCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwLworICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvCisgICAgIGF1dG8tMjAxMjEwMTUtMjMyMTIwL2tlcm5lbC9tZXRhZGF0YQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMQorICAgICBhdXRvLTIwMTIxMDE1LTIzMjEyMC9rZXJuZWwvY2hhbm5lbDBfMAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBXZSBjYW4gbm93IGltcG9ydCB0aGUgdHJhY2UgaW50byBFY2xpcHNlIGFuZCB2aWV3IGl0OgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZpcnN0LCBzdGFydCBlY2xpcHNlIGFuZCBvcGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgcGVyc3BlY3RpdmUgYnkgc2VsZWN0aW5nIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgT3BlbiBQZXJzcGVjdGl2ZSB8IE90aGVyLi4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICdMVFRuZyBLZXJuZWwnIGZyb20gdGhlIGxpc3QuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CYWNrIGF0IHRoZSBtYWluIG1lbnUsIHNlbGVjdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBtZW51IGl0ZW06CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZpbGUgfCBOZXcgfCBQcm9qZWN0Li4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgZGlhbG9nIGJveCB0aGF0IG9wZW5zLCBzZWxlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAnVHJhY2luZyB8IFRyYWNpbmcgUHJvamVjdCcgd2l6YXJkIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ05leHQ+Jy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdpdmUgdGhlIHByb2plY3QgYSBuYW1lIGFuZCBwcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpbmlzaCcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5JbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9qZWN0IHlvdSBjcmVhdGVkLCByaWdodCBjbGljayBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICdUcmFjZXMnIGl0ZW0uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TZWxlY3QgJ0ltcG9ydC4uLiIgYW5kIGluIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQncyBkaXNwbGF5ZWQ6PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ccm93c2UgdGhlIGZpbGVzeXN0ZW0gYW5kIGZpbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgdGhlICdrZXJuZWwnIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB0cmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNvcGllZCBmcm9tIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4gYXV0by0yMDEyMTAxNS0yMzIxMjAva2VybmVsPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4nQ2hlY2ttYXJrJyB0aGUgZGlyZWN0b3J5IGluIHRoZSB0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0J3MgZGlzcGxheWVkIGZvciB0aGUgdHJhY2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJlbG93IHRoYXQsIHNlbGVjdCAnQ29tbW9uIFRyYWNlIEZvcm1hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCBUcmFjZScgZm9yIHRoZSAnVHJhY2UgVHlwZSc8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByZXNzICdGaW5pc2gnIHRvIGNsb3NlIHRoZSBkaWFsb2cKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QmFjayBpbiB0aGUgJ1Byb2plY3QgRXhwbG9yZXInIHBhbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUtY2xpY2sgb24gdGhlICdrZXJuZWwnIGl0ZW0gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UgeW91IGp1c3QgaW1wb3J0ZWQgdW5kZXIgJ1RyYWNlcycKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3cgc2VlIHlvdXIgdHJhY2UgZGF0YSBkaXNwbGF5ZWQgZ3JhcGhpY2FsbHkKKyAgICAgICAgICAgICAgICBpbiBzZXZlcmFsIGRpZmZlcmVudCB2aWV3cyBpbiBFY2xpcHNlOgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvbHR0bmdtYWluMC5wbmciIHdpZHRoPSI2aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFjY2VzcyBleHRlbnNpdmUgaGVscCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlCisgICAgICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEKKyAgICAgICAgICAgICAgICB0aGUgRWNsaXBzZSBoZWxwIHN5c3RlbToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEhlbHAgfCBIZWxwIENvbnRlbnRzIHwgTFRUbmcgUGx1Zy1pbiBVc2VyIEd1aWRlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbGxlY3RpbmctYW5kLXZpZXdpbmctYS10cmFjZS1pbi1lY2xpcHNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db2xsZWN0aW5nIGFuZCB2aWV3aW5nIGEgdHJhY2UgaW4gRWNsaXBzZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBvbiBjb2xsZWN0aW5nIHRyYWNlcyByZW1vdGVseSBkb2Vzbid0IGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHdvcmsgYmVjYXVzZSBvZiBFY2xpcHNlICdSU0UnIGNvbm5lY3Rpdml0eSBwcm9ibGVtcy4gTWFudWFsbHkKKyAgICAgICAgICAgICAgICB0cmFjaW5nIG9uIHRoZSB0YXJnZXQsIGNvcHlpbmcgdGhlIHRyYWNlIGZpbGVzIHRvIHRoZSBob3N0LAorICAgICAgICAgICAgICAgIGFuZCB2aWV3aW5nIHRoZSB0cmFjZSBpbiBFY2xpcHNlIG9uIHRoZSBob3N0IGFzIG91dGxpbmVkIGluCisgICAgICAgICAgICAgICAgcHJldmlvdXMgc3RlcHMgZG9lcyB3b3JrIGhvd2V2ZXIgLSBwbGVhc2UgdXNlIHRoZSBtYW51YWwKKyAgICAgICAgICAgICAgICBzdGVwcyBvdXRsaW5lZCBhYm92ZSB0byB2aWV3IHRyYWNlcyBpbiBFY2xpcHNlLgorICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbiBvcmRlciB0byB0cmFjZSBhIHJlbW90ZSB0YXJnZXQsIHlvdSBhbHNvIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgYSAndHJhY2luZycgZ3JvdXAgb24gdGhlIHRhcmdldCBhbmQgY29ubmVjdCBhcyBhIHVzZXIKKyAgICAgICAgICAgICAgICB3aG8ncyBwYXJ0IG9mIHRoYXQgZ3JvdXAgZS5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBhZGR1c2VyIHRvbXoKKyAgICAgIyBncm91cGFkZCAtciB0cmFjaW5nCisgICAgICMgdXNlcm1vZCAtYSAtRyB0cmFjaW5nIHRvbXoKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmlyc3QsIHN0YXJ0IGVjbGlwc2UgYW5kIG9wZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAnTFRUbmcgS2VybmVsJyBwZXJzcGVjdGl2ZSBieSBzZWxlY3RpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFdpbmRvdyB8IE9wZW4gUGVyc3BlY3RpdmUgfCBPdGhlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgJ0xUVG5nIEtlcm5lbCcgZnJvbSB0aGUgbGlzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkJhY2sgYXQgdGhlIG1haW4gbWVudSwgc2VsZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIG1lbnUgaXRlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRmlsZSB8IE5ldyB8IFByb2plY3QuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSBkaWFsb2cgYm94IHRoYXQgb3BlbnMsIHNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlICdUcmFjaW5nIHwgVHJhY2luZyBQcm9qZWN0JyB3aXphcmQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzcyAnTmV4dD4nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZSB0aGUgcHJvamVjdCBhIG5hbWUgYW5kIHByZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAnRmluaXNoJy4gVGhhdCBzaG91bGQgcmVzdWx0IGluIGFuIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2plY3QnIHN1YndpbmRvdy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluIHRoZSAnQ29udHJvbCcgc3Vid2luZG93IGp1c3QgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBwcmVzcyAnTmV3IENvbm5lY3Rpb24nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWRkIGEgbmV3IGNvbm5lY3Rpb24sIGdpdmluZyBpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlByb3ZpZGUgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBxdWFsaWZpZWQgdXNlciAoYSBtZW1iZXIgb2YgdGhlICd0cmFjaW5nJyBncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIHJvb3QgYWNjb3VudCBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHJvdmlkZSBhcHByb3ByaWF0ZSBhbnN3ZXJzIHRvIHdoYXRldmVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlzIGFza2VkIGZvciBlLmcuICdzZWN1cmUgc3RvcmFnZSBwYXNzd29yZCcKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gJ1JTRSBFcnJvcicgaXQgbWF5IGJlIGR1ZSB0byBwcm94aWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGdldCBhcm91bmQgdGhlIHByb2JsZW0gYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIHRoZSBmb2xsb3dpbmcgc2V0dGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgV2luZG93IHwgUHJlZmVyZW5jZXMgfCBOZXR3b3JrIENvbm5lY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBTd2l0Y2ggJ0FjdGl2ZSBQcm92aWRlcicgdG8gJ0RpcmVjdCcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbGx0bmctZG9jdW1lbnRhdGlvbic+CisgICAgICAgIDx0aXRsZT5Eb2N1bWVudGF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgcHJpbWFyeSBMVFRuZyBEb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9sdHRuZy5vcmcvZG9jcy8nPkxUVG5nIERvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgc2l0ZSBpcyBhcHByb3ByaWF0ZSBmb3IgaW50ZXJtZWRpYXRlIHRvCisgICAgICAgICAgICBhZHZhbmNlZCBzb2Z0d2FyZSBkZXZlbG9wZXJzIHdobyBhcmUgd29ya2luZyBpbiBhIExpbnV4IGVudmlyb25tZW50CisgICAgICAgICAgICBhbmQgYXJlIGludGVyZXN0ZWQgaW4gZWZmaWNpZW50IHNvZnR3YXJlIHRyYWNpbmcuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBMVFRuZyBpbiBnZW5lcmFsLCB2aXNpdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sdHRuZy5vcmcvbHR0bmcyLjAnPkxUVG5nIFByb2plY3Q8L3VsaW5rPgorICAgICAgICAgICAgc2l0ZS4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhICJHZXR0aW5nIFN0YXJ0ZWQiIGxpbmsgb24gdGhpcyBzaXRlIHRoYXQgdGFrZXMKKyAgICAgICAgICAgIHlvdSB0byBhbiBMVFRuZyBRdWljayBTdGFydC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmluYWxseSwgeW91IGNhbiBhY2Nlc3MgZXh0ZW5zaXZlIGhlbHAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorICAgICAgICAgICAgdGhlIExUVG5nIHBsdWctaW4gdG8gc2VhcmNoIGFuZCBhbmFseXplIGNhcHR1cmVkIHRyYWNlcyB2aWEgdGhlCisgICAgICAgICAgICBFY2xpcHNlIGhlbHAgc3lzdGVtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIZWxwIHwgSGVscCBDb250ZW50cyB8IExUVG5nIFBsdWctaW4gVXNlciBHdWlkZQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncHJvZmlsZS1tYW51YWwtYmxrdHJhY2UnPgorICAgIDx0aXRsZT5ibGt0cmFjZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgYmxrdHJhY2UgaXMgYSB0b29sIGZvciB0cmFjaW5nIGFuZCByZXBvcnRpbmcgbG93LWxldmVsIGRpc2sgSS9PLgorICAgICAgICBibGt0cmFjZSBwcm92aWRlcyB0aGUgdHJhY2luZyBoYWxmIG9mIHRoZSBlcXVhdGlvbjsgaXRzIG91dHB1dCBjYW4KKyAgICAgICAgYmUgcGlwZWQgaW50byB0aGUgYmxrcGFyc2UgcHJvZ3JhbSwgd2hpY2ggcmVuZGVycyB0aGUgZGF0YSBpbiBhCisgICAgICAgIGh1bWFuLXJlYWRhYmxlIGZvcm0gYW5kIGRvZXMgc29tZSBiYXNpYyBhbmFseXNpczoKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2Utc2V0dXAnPgorICAgICAgICA8dGl0bGU+U2V0dXA8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHRoaXMgc2VjdGlvbiwgd2UnbGwgYXNzdW1lIHlvdSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCB0aGUKKyAgICAgICAgICAgIGJhc2ljIHNldHVwIG91dGxpbmVkIGluIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Byb2ZpbGUtbWFudWFsLWdlbmVyYWwtc2V0dXAnPkdlbmVyYWwgU2V0dXA8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgYmxrdHJhY2UgaXMgYW4gYXBwbGljYXRpb24gdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgWW91IGNhbiBydW4gdGhlIGVudGlyZSBibGt0cmFjZSBhbmQgYmxrcGFyc2UgcGlwZWxpbmUgb24gdGhlCisgICAgICAgICAgICB0YXJnZXQsIG9yIHlvdSBjYW4gcnVuIGJsa3RyYWNlIGluICdsaXN0ZW4nIG1vZGUgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgYW5kIGhhdmUgYmxrdHJhY2UgYW5kIGJsa3BhcnNlIGNvbGxlY3QgYW5kIGFuYWx5emUgdGhlIGRhdGEgb24KKyAgICAgICAgICAgIHRoZSBob3N0IChzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctYmxrdHJhY2UtcmVtb3RlbHknPlVzaW5nIGJsa3RyYWNlIFJlbW90ZWx5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gYmVsb3cpLgorICAgICAgICAgICAgRm9yIHRoZSByZXN0IG9mIHRoaXMgc2VjdGlvbiB3ZSBhc3N1bWUgeW91J3ZlIHNzaCdlZCB0byB0aGUKKyAgICAgICAgICAgIGhvc3QgYW5kIHdpbGwgYmUgcnVubmluZyBibGtyYWNlIG9uIHRoZSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nYmxrdHJhY2UtYmFzaWMtdXNhZ2UnPgorICAgICAgICA8dGl0bGU+QmFzaWMgVXNhZ2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcmVjb3JkIGEgdHJhY2UsIHNpbXBseSBydW4gdGhlICdibGt0cmFjZScgY29tbWFuZCwgZ2l2aW5nIGl0CisgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgYmxvY2sgZGV2aWNlIHlvdSB3YW50IHRvIHRyYWNlIGFjdGl2aXR5IG9uOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJsa3RyYWNlIC9kZXYvc2RjCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L21lZGlhL3NkYyMgcm0gbGludXgtMi42LjE5LjIudGFyLmJ6Mjsgd2dldCA8dWxpbmsgdXJsPSdodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbGludXgtMi42LjE5LjIudGFyLmJ6Mic+aHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejI8L3VsaW5rPjsgc3luYworICAgICBDb25uZWN0aW5nIHRvIGRvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnICgxNDAuMjExLjE2OS41OTo4MCkKKyAgICAgbGludXgtMi42LjE5LjIudGFyLmIgMTAwJSB8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKnwgNDE3MjdrICAwOjAwOjAwIEVUQQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgUHJlc3MgQ3RybC1DIGluIHRoZSBibGt0cmFjZSBzaGVsbCB0byBzdG9wIHRoZSB0cmFjZS4gSXQgd2lsbAorICAgICAgICAgICAgZGlzcGxheSBob3cgbWFueSBldmVudHMgd2VyZSBsb2dnZWQsIGFsb25nIHdpdGggdGhlIHBlci1jcHUgZmlsZQorICAgICAgICAgICAgc2l6ZXMgKGJsa3RyYWNlIHJlY29yZHMgdHJhY2VzIGluIHBlci1jcHUga2VybmVsIGJ1ZmZlcnMgYW5kCisgICAgICAgICAgICBzaW1wbHkgZHVtcHMgdGhlbSB0byB1c2Vyc3BhY2UgZm9yIGJsa3BhcnNlIHRvIG1lcmdlIGFuZCBzb3J0CisgICAgICAgICAgICBsYXRlcikuCisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIF5DPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDcwODIgZXZlbnRzLCAgICAgIDMzMiBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgMTU3OCBldmVudHMsICAgICAgIDc0IEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgICA4NjYwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA0MDYgS2lCIGRhdGEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIElmIHlvdSBleGFtaW5lIHRoZSBmaWxlcyBzYXZlZCB0byBkaXNrLCB5b3Ugc2VlIG11bHRpcGxlIGZpbGVzLAorICAgICAgICAgICAgb25lIHBlciBDUFUgYW5kIHdpdGggdGhlIGRldmljZSBuYW1lIGFzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgZmlsZW5hbWU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgbHMgLWFsCisgICAgIGRyd3hyLXhyLXggICAgNiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI3IDIyOjM5IC4KKyAgICAgZHJ3eHItc3IteCAgICA0IHJvb3QgICAgIHJvb3QgICAgICAgICAgMTAyNCBPY3QgMjYgMTg6MjQgLi4KKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgIDMzOTkzOCBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjAKKyAgICAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA3NTc1MyBPY3QgMjcgMjI6NDAgc2RjLmJsa3RyYWNlLjEKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRvIHZpZXcgdGhlIHRyYWNlIGV2ZW50cywgc2ltcGx5IGludm9rZSAnYmxrcGFyc2UnIGluIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHRyYWNlIGZpbGVzLCBnaXZpbmcgaXQgdGhlIGRldmljZSBuYW1lCisgICAgICAgICAgICB0aGF0IGZvcm1zIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBmaWxlbmFtZXM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTIyNSAgUSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMiAgICAgMC4wMDAwMjUyMTMgIDEyMjUgIEcgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDMzMzg0ICAxMjI1ICBQICAgTiBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA0ICAgICAwLjAwMDA0MzMwMSAgMTIyNSAgSSAgV1MgMzQxNzA0OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTcyNzAgICAgIDAgIG0gICBOIGNmcTEyMjUgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2NDgxMyAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICA1ICAgICAwLjAwMDA3NjMzNiAgMTIyNSAgVSAgIE4gW2piZDIvc2RjLThdIDEKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA4ODU1OSAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjE1MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDk3MzU5ICAgICAwICBtICAgTiBjZnExMjI1IHNldF9hY3RpdmUgd2xfcHJpbzowIHdsX3R5cGU6MQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTA0MDYzICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMTI1ODQgICAgIDAgIG0gICBOIGNmcTEyMjUgZmlmbz0gIChudWxsKQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTE4NzMwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoX2luc2VydAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMTI3MzkwICAgICAwICBtICAgTiBjZnExMjI1IGRpc3BhdGNoZWQgYSByZXF1ZXN0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAxMzM1MzYgICAgIDAgIG0gICBOIGNmcTEyMjUgYWN0aXZhdGUgcnEsIGRydj0xCisgICAgICA4LDMyICAgMSAgICAgICAgNiAgICAgMC4wMDAxMzY4ODkgIDEyMjUgIEQgIFdTIDM0MTcwNDggKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgIDcgICAgIDAuMDAwMzYwMzgxICAxMjI1ICBRICBXUyAzNDE3MDU2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICA4ICAgICAwLjAwMDM3NzQyMiAgMTIyNSAgRyAgV1MgMzQxNzA1NiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAgOSAgICAgMC4wMDAzODg4NzYgIDEyMjUgIFAgICBOIFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTAgICAgIDAuMDAwMzk3ODg2ICAxMjI1ICBRICBXUyAzNDE3MDY0ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDExICAgICAwLjAwMDQwNDgwMCAgMTIyNSAgTSAgV1MgMzQxNzA2NCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxMiAgICAgMC4wMDA0MTIzNDMgIDEyMjUgIFEgIFdTIDM0MTcwNzIgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTMgICAgIDAuMDAwNDE2NTMzICAxMjI1ICBNICBXUyAzNDE3MDcyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE0ICAgICAwLjAwMDQyMjEyMSAgMTIyNSAgUSAgV1MgMzQxNzA4MCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxNSAgICAgMC4wMDA0MjUxOTQgIDEyMjUgIE0gIFdTIDM0MTcwODAgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTYgICAgIDAuMDAwNDMxOTY4ICAxMjI1ICBRICBXUyAzNDE3MDg4ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDE3ICAgICAwLjAwMDQzNTI1MSAgMTIyNSAgTSAgV1MgMzQxNzA4OCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAxOCAgICAgMC4wMDA0NDAyNzkgIDEyMjUgIFEgIFdTIDM0MTcwOTYgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMTkgICAgIDAuMDAwNDQzOTExICAxMjI1ICBNICBXUyAzNDE3MDk2ICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIwICAgICAwLjAwMDQ1MDMzNiAgMTIyNSAgUSAgV1MgMzQxNzEwNCArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyMSAgICAgMC4wMDA0NTQwMzggIDEyMjUgIE0gIFdTIDM0MTcxMDQgKyA4IFtqYmQyL3NkYy04XQorICAgICAgOCwzMiAgIDEgICAgICAgMjIgICAgIDAuMDAwNDYyMDcwICAxMjI1ICBRICBXUyAzNDE3MTEyICsgOCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgIDIzICAgICAwLjAwMDQ2NTQyMiAgMTIyNSAgTSAgV1MgMzQxNzExMiArIDggW2piZDIvc2RjLThdCisgICAgICA4LDMyICAgMSAgICAgICAyNCAgICAgMC4wMDA0NzQyMjIgIDEyMjUgIEkgIFdTIDM0MTcwNTYgKyA2NCBbamJkMi9zZGMtOF0KKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDQ4MzAyMiAgICAgMCAgbSAgIE4gY2ZxMTIyNSBpbnNlcnRfcmVxdWVzdAorICAgICAgOCwzMiAgIDEgICAgICAgMjUgICAgIDAuMDAwNDg5NzI3ICAxMjI1ICBVICAgTiBbamJkMi9zZGMtOF0gMQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwNDk4NDU3ICAgICAwICBtICAgTiBjZnExMjI1IE5vdCBpZGxpbmcuIHN0LT5jb3VudDoxCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MDM3NjUgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hfaW5zZXJ0CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDA1MTI5MTQgICAgIDAgIG0gICBOIGNmcTEyMjUgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDUxODg1MSAgICAgMCAgbSAgIE4gY2ZxMTIyNSBhY3RpdmF0ZSBycSwgZHJ2PTIKKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIC4KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNTAwNjEzOCAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgMjAyNCAgICA1OC41MTY2MDMyNjkgICAgIDMgIEMgIFdTIDMxNTY5OTIgKyAxNiBbMF0KKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgIDU4LjUxNjYyNjczNiAgICAgMCAgbSAgIE4gY2ZxMzU1MSBjb21wbGV0ZSBycW5vaWRsZSAxCisgICAgICA4LDMyICAgMCAgICAgICAgMCAgICA1OC41MTY2MzQ1NTggICAgIDAgIG0gICBOIGNmcTM1NTEgYXJtX2lkbGU6IDggZ3JvdXBfaWRsZTogMAorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAgNTguNTE2NjM2OTMzICAgICAwICBtICAgTiBjZnEgc2NoZWR1bGUgZGlzcGF0Y2gKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgIDU4LjUxNjk3MTYxMyAgICAgMCAgbSAgIE4gY2ZxMzU1MSBzbGljZSBleHBpcmVkIHQ9MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTgyMDg5ICAgICAwICBtICAgTiBjZnEzNTUxIHNsX3VzZWQ9MTMgZGlzcD02IGNoYXJnZT0xMyBpb3BzPTAgc2VjdD04MAorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgNTguNTE2OTg1NTExICAgICAwICBtICAgTiBjZnEzNTUxIGRlbF9mcm9tX3JyCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICA1OC41MTY5OTA4MTkgICAgIDAgIG0gICBOIGNmcTM1NTEgcHV0X3F1ZXVlCisKKyAgICAgQ1BVMCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDMzMSwgICAyNiwyODRLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDQ4NSwgICA0MCw0ODRLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTExLCAgIDQxLDAwMEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDEzLCAgICAgIDE2MEtpQgorICAgICAgUmVhZCBkZXB0aDogICAgICAgICAgICAgMCAgICAgICAgCSBXcml0ZSBkZXB0aDogICAgICAgICAgICAgMgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICAyMyAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMAorICAgICBDUFUxIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjQ5LCAgIDE1LDgwMEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgIDQyLCAgICAxLDYwMEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICAgMTYsICAgIDEsMDg0S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgNDAsICAgICAgMjc2S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAwICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDMwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisKKyAgICAgVG90YWwgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICA1ODAsICAgNDIsMDg0S2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICA1MjcsICAgNDIsMDg0S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgIDUyNywgICA0MiwwODRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA1MywgICAgICA0MzZLaUIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTMgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDEKKworICAgICBUaHJvdWdocHV0IChSL1cpOiAwS2lCL3MgLyA3MTlLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDYsNTkyIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgSW5wdXQgZmlsZSBzZGMuYmxrdHJhY2UuMCBhZGRlZAorICAgICBJbnB1dCBmaWxlIHNkYy5ibGt0cmFjZS4xIGFkZGVkCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGUgcmVwb3J0IHNob3dzIGVhY2ggZXZlbnQgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGJsa3RyYWNlIGRhdGEsCisgICAgICAgICAgICBhbG9uZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgb3ZlcmFsbCBibG9jayBJL08gdHJhZmZpYyBkdXJpbmcKKyAgICAgICAgICAgIHRoZSBydW4uIFlvdSBjYW4gbG9vayBhdCB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICBtYW5wYWdlIHRvIGxlYXJuIHRoZQorICAgICAgICAgICAgbWVhbmluZyBvZiBlYWNoIGZpZWxkIGRpc3BsYXllZCBpbiB0aGUgdHJhY2UgbGlzdGluZy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdibGt0cmFjZS1saXZlLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPkxpdmUgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIGJsa3RyYWNlIGFuZCBibGtwYXJzZSBhcmUgZGVzaWduZWQgZnJvbSB0aGUgZ3JvdW5kIHVwIHRvCisgICAgICAgICAgICAgICAgYmUgYWJsZSB0byBvcGVyYXRlIHRvZ2V0aGVyIGluIGEgJ3BpcGUgbW9kZScgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgc3Rkb3V0IG9mIGJsa3RyYWNlIGNhbiBiZSBmZWQgZGlyZWN0bHkgaW50byB0aGUgc3RkaW4gb2YKKyAgICAgICAgICAgICAgICBibGtwYXJzZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6fiMgYmxrdHJhY2UgL2Rldi9zZGMgLW8gLSB8IGJsa3BhcnNlIC1pIC0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhpcyBlbmFibGVzIGxvbmctbGl2ZWQgdHJhY2luZyBzZXNzaW9ucyB0byBydW4gd2l0aG91dAorICAgICAgICAgICAgICAgIHdyaXRpbmcgYW55dGhpbmcgdG8gZGlzaywgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb29rIGZvcgorICAgICAgICAgICAgICAgIGNlcnRhaW4gY29uZGl0aW9ucyBpbiB0aGUgdHJhY2UgZGF0YSBpbiAncmVhbC10aW1lJyBieQorICAgICAgICAgICAgICAgIHZpZXdpbmcgdGhlIHRyYWNlIG91dHB1dCBhcyBpdCBzY3JvbGxzIGJ5IG9uIHRoZSBzY3JlZW4gb3IKKyAgICAgICAgICAgICAgICBieSBwYXNzaW5nIGl0IGFsb25nIHRvIHlldCBhbm90aGVyIHByb2dyYW0gaW4gdGhlIHBpcGVsaW5lCisgICAgICAgICAgICAgICAgc3VjaCBhcyBncmVwIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGFuZCBjYXB0dXJlCisgICAgICAgICAgICAgICAgY29uZGl0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUncyBhY3R1YWxseSBhbm90aGVyIGJsa3RyYWNlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzCisgICAgICAgICAgICAgICAgdGhlIGFib3ZlIHBpcGVsaW5lIGFzIGEgc2luZ2xlIGNvbW1hbmQsIHNvIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICBoYXZlIHRvIGJvdGhlciB0eXBpbmcgaW4gdGhlIGFib3ZlIGNvbW1hbmQgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5On4jIGJ0cmFjZSAvZGV2L3NkYworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1c2luZy1ibGt0cmFjZS1yZW1vdGVseSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgYmxrdHJhY2UgUmVtb3RlbHk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIGJsa3RyYWNlIHRyYWNlcyBibG9jayBJL08gYW5kIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgICAgICAgICBub3JtYWxseSB3cml0ZXMgaXRzIHRyYWNlIGRhdGEgdG8gYSBibG9jayBkZXZpY2UsIGFuZAorICAgICAgICAgICAgICAgIGluIGdlbmVyYWwgYmVjYXVzZSBpdCdzIG5vdCByZWFsbHkgYSBncmVhdCBpZGVhIHRvIG1ha2UKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIGJlaW5nIHRyYWNlZCB0aGUgc2FtZSBhcyB0aGUgZGV2aWNlIHRoZSB0cmFjZXIKKyAgICAgICAgICAgICAgICB3cml0ZXMgdG8sIGJsa3RyYWNlIHByb3ZpZGVzIGEgd2F5IHRvIHRyYWNlIHdpdGhvdXQKKyAgICAgICAgICAgICAgICBwZXJ0dXJiaW5nIHRoZSB0cmFjZWQgZGV2aWNlIGF0IGFsbCBieSBwcm92aWRpbmcgbmF0aXZlCisgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Igc2VuZGluZyBhbGwgdHJhY2UgZGF0YSBvdmVyIHRoZSBuZXR3b3JrLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBoYXZlIGJsa3RyYWNlIG9wZXJhdGUgaW4gdGhpcyBtb2RlLCBzdGFydCBibGt0cmFjZSBvbgorICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtIGJlaW5nIHRyYWNlZCB3aXRoIHRoZSAtbCBvcHRpb24sIGFsb25nIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIHRvIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTp+IyBibGt0cmFjZSAtbCAvZGV2L3NkYworICAgICBzZXJ2ZXI6IHdhaXRpbmcgZm9yIGNvbm5lY3Rpb25zLi4uCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIE9uIHRoZSBob3N0IHN5c3RlbSwgdXNlIHRoZSAtaCBvcHRpb24gdG8gY29ubmVjdCB0byB0aGUKKyAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLCBhbHNvIHBhc3NpbmcgaXQgdGhlIGRldmljZSB0byB0cmFjZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrdHJhY2UgLWQgL2Rldi9zZGMgLWggMTkyLjE2OC4xLjQzCisgICAgIGJsa3RyYWNlOiBjb25uZWN0aW5nIHRvIDE5Mi4xNjguMS40MworICAgICBibGt0cmFjZTogY29ubmVjdGVkIQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBzZWUgdGhpczoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNlcnZlcjogY29ubmVjdGlvbiBmcm9tIDE5Mi4xNjguMS40MworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJbiBhbm90aGVyIHNoZWxsLCBleGVjdXRlIGEgd29ya2xvYWQgeW91IHdhbnQgdG8gdHJhY2UuCisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9tZWRpYS9zZGMjIHJtIGxpbnV4LTIuNi4xOS4yLnRhci5iejI7IHdnZXQgPHVsaW5rIHVybD0naHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL2xpbnV4LTIuNi4xOS4yLnRhci5iejInPmh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy9saW51eC0yLjYuMTkuMi50YXIuYnoyPC91bGluaz47IHN5bmMKKyAgICAgQ29ubmVjdGluZyB0byBkb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZyAoMTQwLjIxMS4xNjkuNTk6ODApCisgICAgIGxpbnV4LTIuNi4xOS4yLnRhci5iIDEwMCUgfCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip8IDQxNzI3ayAgMDowMDowMCBFVEEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgV2hlbiBpdCdzIGRvbmUsIGRvIGEgQ3RybC1DIG9uIHRoZSBob3N0IHN5c3RlbSB0bworICAgICAgICAgICAgICAgIHN0b3AgdGhlIHRyYWNlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgXkM9PT0gc2RjID09PQorICAgICAgQ1BVICAwOiAgICAgICAgICAgICAgICAgNzY5MSBldmVudHMsICAgICAgMzYxIEtpQiBkYXRhCisgICAgICBDUFUgIDE6ICAgICAgICAgICAgICAgICA0MTA5IGV2ZW50cywgICAgICAxOTMgS2lCIGRhdGEKKyAgICAgIFRvdGFsOiAgICAgICAgICAgICAgICAgMTE4MDAgZXZlbnRzIChkcm9wcGVkIDApLCAgICAgIDU1NCBLaUIgZGF0YQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPbiB0aGUgdGFyZ2V0IHN5c3RlbSwgeW91IHNob3VsZCBhbHNvIHNlZSBhIHRyYWNlCisgICAgICAgICAgICAgICAgc3VtbWFyeSBmb3IgdGhlIHRyYWNlIGp1c3QgZW5kZWQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBzZXJ2ZXI6IGVuZCBvZiBydW4gZm9yIDE5Mi4xNjguMS40MzpzZGMKKyAgICAgPT09IHNkYyA9PT0KKyAgICAgIENQVSAgMDogICAgICAgICAgICAgICAgIDc2OTEgZXZlbnRzLCAgICAgIDM2MSBLaUIgZGF0YQorICAgICAgQ1BVICAxOiAgICAgICAgICAgICAgICAgNDEwOSBldmVudHMsICAgICAgMTkzIEtpQiBkYXRhCisgICAgICBUb3RhbDogICAgICAgICAgICAgICAgIDExODAwIGV2ZW50cyAoZHJvcHBlZCAwKSwgICAgICA1NTQgS2lCIGRhdGEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGJsa3RyYWNlIGluc3RhbmNlIG9uIHRoZSBob3N0IHdpbGwgc2F2ZSB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgb3V0cHV0IGluc2lkZSBhIGhvc3RuYW1lLXRpbWVzdGFtcCBkaXJlY3Rvcnk6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1hbAorICAgICBkcnd4ci14ci14ICAgMTAgcm9vdCAgICAgcm9vdCAgICAgICAgICAxMDI0IE9jdCAyOCAwMjo0MCAuCisgICAgIGRyd3hyLXNyLXggICAgNCByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI2IDE4OjI0IC4uCisgICAgIGRyd3hyLXhyLXggICAgMiByb290ICAgICByb290ICAgICAgICAgIDEwMjQgT2N0IDI4IDAyOjQwIDE5Mi4xNjguMS40My0yMDEyLTEwLTI4LTAyOjQwOjU2CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIGNkIGludG8gdGhhdCBkaXJlY3RvcnkgdG8gc2VlIHRoZSBvdXRwdXQgZmlsZXM6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGxzIC1sCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAzNjkxOTMgT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4wCisgICAgIC1ydy1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAxOTcyNzggT2N0IDI4IDAyOjQ0IHNkYy5ibGt0cmFjZS4xCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCBydW4gYmxrcGFyc2Ugb24gdGhlIGhvc3Qgc3lzdGVtIHVzaW5nIHRoZSBkZXZpY2UgbmFtZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYmxrcGFyc2Ugc2RjCisKKyAgICAgIDgsMzIgICAxICAgICAgICAxICAgICAwLjAwMDAwMDAwMCAgMTI2MyAgUSAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDAgICAgIDAuMDAwMDM2MDM4ICAgICAwICBtICAgTiBjZnExMjYzIGFsbG9jZWQKKyAgICAgIDgsMzIgICAxICAgICAgICAyICAgICAwLjAwMDAzOTM5MCAgMTI2MyAgRyAgUk0gNjAxNiArIDggW2xzXQorICAgICAgOCwzMiAgIDEgICAgICAgIDMgICAgIDAuMDAwMDQ5MTY4ICAxMjYzICBJICBSTSA2MDE2ICsgOCBbbHNdCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgICAgMC4wMDAwNTYxNTIgICAgIDAgIG0gICBOIGNmcTEyNjMgaW5zZXJ0X3JlcXVlc3QKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA2MTYwMCAgICAgMCAgbSAgIE4gY2ZxMTI2MyBhZGRfdG9fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgICAwLjAwMDA3NTQ5OCAgICAgMCAgbSAgIE4gY2ZxIHdvcmtsb2FkIHNsaWNlOjMwMAorICAgICAgLgorICAgICAgLgorICAgICAgLgorICAgICAgOCwzMiAgIDAgICAgICAgIDAgICAxNzcuMjY2Mzg1Njk2ICAgICAwICBtICAgTiBjZnExMjY3IGFybV9pZGxlOiA4IGdyb3VwX2lkbGU6IDAKKyAgICAgIDgsMzIgICAwICAgICAgICAwICAgMTc3LjI2NjM4ODE0MCAgICAgMCAgbSAgIE4gY2ZxIHNjaGVkdWxlIGRpc3BhdGNoCisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2NzkyMzkgICAgIDAgIG0gICBOIGNmcTEyNjcgc2xpY2UgZXhwaXJlZCB0PTAKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY4OTI5NyAgICAgMCAgbSAgIE4gY2ZxMTI2NyBzbF91c2VkPTkgZGlzcD02IGNoYXJnZT05IGlvcHM9MCBzZWN0PTU2CisgICAgICA4LDMyICAgMSAgICAgICAgMCAgIDE3Ny4yNjY2OTI2NDkgICAgIDAgIG0gICBOIGNmcTEyNjcgZGVsX2Zyb21fcnIKKyAgICAgIDgsMzIgICAxICAgICAgICAwICAgMTc3LjI2NjY5NjU2MCAgICAgMCAgbSAgIE4gY2ZxMTI2NyBwdXRfcXVldWUKKworICAgICBDUFUwIChzZGMpOgorICAgICAgUmVhZHMgUXVldWVkOiAgICAgICAgICAgMCwgICAgICAgIDBLaUIJIFdyaXRlcyBRdWV1ZWQ6ICAgICAgICAgMjcwLCAgIDIxLDcwOEtpQgorICAgICAgUmVhZCBEaXNwYXRjaGVzOiAgICAgICA1OSwgICAgMiw2MjhLaUIJIFdyaXRlIERpc3BhdGNoZXM6ICAgICAgNDk1LCAgIDM5LDk2NEtpQgorICAgICAgUmVhZHMgUmVxdWV1ZWQ6ICAgICAgICAgMAkJIFdyaXRlcyBSZXF1ZXVlZDogICAgICAgICAwCisgICAgICBSZWFkcyBDb21wbGV0ZWQ6ICAgICAgIDkwLCAgICAyLDc1MktpQgkgV3JpdGVzIENvbXBsZXRlZDogICAgICA1NDMsICAgNDEsNTk2S2lCCisgICAgICBSZWFkIE1lcmdlczogICAgICAgICAgICAwLCAgICAgICAgMEtpQgkgV3JpdGUgTWVyZ2VzOiAgICAgICAgICAgIDksICAgICAgMzQ0S2lCCisgICAgICBSZWFkIGRlcHRoOiAgICAgICAgICAgICAyICAgICAgICAJIFdyaXRlIGRlcHRoOiAgICAgICAgICAgICAyCisgICAgICBJTyB1bnBsdWdzOiAgICAgICAgICAgIDIwICAgICAgICAJIFRpbWVyIHVucGx1Z3M6ICAgICAgICAgICAxCisgICAgIENQVTEgKHNkYyk6CisgICAgICBSZWFkcyBRdWV1ZWQ6ICAgICAgICAgNjg4LCAgICAyLDc1MktpQgkgV3JpdGVzIFF1ZXVlZDogICAgICAgICAzODEsICAgMjAsNjUyS2lCCisgICAgICBSZWFkIERpc3BhdGNoZXM6ICAgICAgIDMxLCAgICAgIDEyNEtpQgkgV3JpdGUgRGlzcGF0Y2hlczogICAgICAgNTksICAgIDIsMzk2S2lCCisgICAgICBSZWFkcyBSZXF1ZXVlZDogICAgICAgICAwCQkgV3JpdGVzIFJlcXVldWVkOiAgICAgICAgIDAKKyAgICAgIFJlYWRzIENvbXBsZXRlZDogICAgICAgIDAsICAgICAgICAwS2lCCSBXcml0ZXMgQ29tcGxldGVkOiAgICAgICAxMSwgICAgICA3NjRLaUIKKyAgICAgIFJlYWQgTWVyZ2VzOiAgICAgICAgICA1OTgsICAgIDIsMzkyS2lCCSBXcml0ZSBNZXJnZXM6ICAgICAgICAgICA4OCwgICAgICA0NDhLaUIKKyAgICAgIFJlYWQgZGVwdGg6ICAgICAgICAgICAgIDIgICAgICAgIAkgV3JpdGUgZGVwdGg6ICAgICAgICAgICAgIDIKKyAgICAgIElPIHVucGx1Z3M6ICAgICAgICAgICAgNTIgICAgICAgIAkgVGltZXIgdW5wbHVnczogICAgICAgICAgIDAKKworICAgICBUb3RhbCAoc2RjKToKKyAgICAgIFJlYWRzIFF1ZXVlZDogICAgICAgICA2ODgsICAgIDIsNzUyS2lCCSBXcml0ZXMgUXVldWVkOiAgICAgICAgIDY1MSwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWQgRGlzcGF0Y2hlczogICAgICAgOTAsICAgIDIsNzUyS2lCCSBXcml0ZSBEaXNwYXRjaGVzOiAgICAgIDU1NCwgICA0MiwzNjBLaUIKKyAgICAgIFJlYWRzIFJlcXVldWVkOiAgICAgICAgIDAJCSBXcml0ZXMgUmVxdWV1ZWQ6ICAgICAgICAgMAorICAgICAgUmVhZHMgQ29tcGxldGVkOiAgICAgICA5MCwgICAgMiw3NTJLaUIJIFdyaXRlcyBDb21wbGV0ZWQ6ICAgICAgNTU0LCAgIDQyLDM2MEtpQgorICAgICAgUmVhZCBNZXJnZXM6ICAgICAgICAgIDU5OCwgICAgMiwzOTJLaUIJIFdyaXRlIE1lcmdlczogICAgICAgICAgIDk3LCAgICAgIDc5MktpQgorICAgICAgSU8gdW5wbHVnczogICAgICAgICAgICA3MiAgICAgICAgCSBUaW1lciB1bnBsdWdzOiAgICAgICAgICAgMQorCisgICAgIFRocm91Z2hwdXQgKFIvVyk6IDE1S2lCL3MgLyAyMzhLaUIvcworICAgICBFdmVudHMgKHNkYyk6IDksMzAxIGVudHJpZXMKKyAgICAgU2tpcHM6IDAgZm9yd2FyZCAoMCAtICAgMC4wJSkKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIHRyYWNlIGV2ZW50cyBhbmQgc3VtbWFyeSBqdXN0IGFzCisgICAgICAgICAgICAgICAgeW91IHdvdWxkIGhhdmUgaWYgeW91J2QgcnVuIHRoZSBzYW1lIGNvbW1hbmQgb24gdGhlIHRhcmdldC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0cmFjaW5nLWJsb2NrLWlvLXZpYS1mdHJhY2UnPgorICAgICAgICAgICAgPHRpdGxlPlRyYWNpbmcgQmxvY2sgSS9PIHZpYSAnZnRyYWNlJzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEl0J3MgYWxzbyBwb3NzaWJsZSB0byB0cmFjZSBibG9jayBJL08gdXNpbmcgb25seQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RoZS10cmFjZS1ldmVudHMtc3Vic3lzdGVtJz50cmFjZSBldmVudHMgc3Vic3lzdGVtPC9saW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBjYXN1YWwgdHJhY2luZworICAgICAgICAgICAgICAgIGlmIHlvdSBkb24ndCB3YW50IHRvIGJvdGhlciBkZWFsaW5nIHdpdGggdGhlIHVzZXJzcGFjZSB0b29scy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHRyYWNpbmcgZm9yIGEgZ2l2ZW4gZGV2aWNlLCB1c2UKKyAgICAgICAgICAgICAgICAvc3lzL2Jsb2NrL3h4eC90cmFjZS9lbmFibGUsIHdoZXJlIHh4eCBpcyB0aGUgZGV2aWNlIG5hbWUuCisgICAgICAgICAgICAgICAgVGhpcyBmb3IgZXhhbXBsZSBlbmFibGVzIHRyYWNpbmcgZm9yIC9kZXYvc2RjOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIDEgPiAvc3lzL2Jsb2NrL3NkYy90cmFjZS9lbmFibGUKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT25jZSB5b3UndmUgc2VsZWN0ZWQgdGhlIGRldmljZShzKSB5b3Ugd2FudCB0byB0cmFjZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RpbmcgdGhlICdibGsnIHRyYWNlciB3aWxsIHR1cm4gdGhlIGJsayB0cmFjZXIgb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICByb290QGNyb3duYmF5Oi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcjIGNhdCBhdmFpbGFibGVfdHJhY2VycworICAgICBibGsgZnVuY3Rpb25fZ3JhcGggZnVuY3Rpb24gbm9wCisKKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBlY2hvIGJsayA+IGN1cnJlbnRfdHJhY2VyCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGhlIHdvcmtsb2FkIHlvdSdyZSBpbnRlcmVzdGVkIGluOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgcm9vdEBjcm93bmJheTovc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nIyBjYXQgL21lZGlhL3NkYy90ZXN0ZmlsZS50eHQKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgQW5kIGxvb2sgYXQgdGhlIG91dHB1dCAobm90ZSBoZXJlIHRoYXQgd2UncmUgdXNpbmcKKyAgICAgICAgICAgICAgICAndHJhY2VfcGlwZScgaW5zdGVhZCBvZiB0cmFjZSB0byBjYXB0dXJlIHRoaXMgdHJhY2UgLQorICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIHVzIHRvIHdhaXQgYXJvdW5kIG9uIHRoZSBwaXBlIGZvciBkYXRhIHRvCisgICAgICAgICAgICAgICAgYXBwZWFyKToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgY2F0IHRyYWNlX3BpcGUKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2MzYxOiAgIDgsMzIgICBRICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgYWxsb2NlZAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0MTU6ICAgOCwzMiAgIEcgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQyNDogICA4LDMyICAgUCAgIE4gW2NhdF0KKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjIgIDMwMjMuMjc2NDMyOiAgIDgsMzIgICBJICAgUiAxNjk5ODQ4ICsgOCBbY2F0XQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0Mzk6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgaW5zZXJ0X3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDQ1OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFkZF90b19ycgorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY0NTQ6ICAgOCwzMiAgIFUgICBOIFtjYXRdIDEKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDY0OiAgIDgsMzIgICBtICAgTiBjZnEgd29ya2xvYWQgc2xpY2U6MTUwCisgICAgICAgICAgICAgICAgIGNhdC0zNTg3ICBbMDAxXSBkLi4xICAzMDIzLjI3NjQ3MTogICA4LDMyICAgbSAgIE4gY2ZxMzU4NyBzZXRfYWN0aXZlIHdsX3ByaW86MCB3bF90eXBlOjIKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDc4OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGZpZm89ICAobnVsbCkKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDgzOiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGRpc3BhdGNoX2luc2VydAorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMSAgMzAyMy4yNzY0OTA6ICAgOCwzMiAgIG0gICBOIGNmcTM1ODcgZGlzcGF0Y2hlZCBhIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgY2F0LTM1ODcgIFswMDFdIGQuLjEgIDMwMjMuMjc2NDk3OiAgIDgsMzIgICBtICAgTiBjZnEzNTg3IGFjdGl2YXRlIHJxLCBkcnY9MQorICAgICAgICAgICAgICAgICBjYXQtMzU4NyAgWzAwMV0gZC4uMiAgMzAyMy4yNzY1MDA6ICAgOCwzMiAgIEQgICBSIDE2OTk4NDggKyA4IFtjYXRdCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFuZCB0aGlzIHR1cm5zIG9mZiB0cmFjaW5nIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHJvb3RAY3Jvd25iYXk6L3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZyMgZWNobyAwID4gL3N5cy9ibG9jay9zZGMvdHJhY2UvZW5hYmxlCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2Jsa3RyYWNlLWRvY3VtZW50YXRpb24nPgorICAgICAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmxpbmUgdmVyc2lvbnMgb2YgdGhlIG1hbiBwYWdlcyBmb3IgdGhlIGNvbW1hbmRzIGRpc2N1c3NlZAorICAgICAgICAgICAgaW4gdGhpcyBzZWN0aW9uIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvYmxrdHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2Jsa3RyYWNlPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jsa3BhcnNlJz5odHRwOi8vbGludXguZGllLm5ldC9tYW4vMS9ibGtwYXJzZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPSdodHRwOi8vbGludXguZGllLm5ldC9tYW4vOC9idHJhY2UnPmh0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L2J0cmFjZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBhYm92ZSBtYW5wYWdlcywgYWxvbmcgd2l0aCBtYW5wYWdlcyBmb3IgdGhlIG90aGVyCisgICAgICAgICAgICBibGt0cmFjZSB1dGlsaXRpZXMgKGJ0dCwgYmxraW9tb24sIGV0YykgY2FuIGJlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgL2RvYyBkaXJlY3Rvcnkgb2YgdGhlIGJsa3RyYWNlIHRvb2xzIGdpdCByZXBvOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbCBiL2RvY3VtZW50YXRpb24vcHJvZmlsZS1tYW51YWwvcHJvZmlsZS1tYW51YWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjIwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Byb2ZpbGUtbWFudWFsL3Byb2ZpbGUtbWFudWFsLnhtbApAQCAtMCwwICsxLDEwNSBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3Byb2ZpbGUtbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL3Byb2ZpbGUtdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisJCSAgWW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsCisJCTwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlRvbTwvZmlyc3RuYW1lPiA8c3VybmFtZT5aYW51c3NpPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+SW50ZWwgQ29ycG9yYXRpb248L29yZ25hbWU+CisgICAgICAgICAgICAgICAgPC9hZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICA8ZW1haWw+dG9tLnphbnVzc2lAaW50ZWwuY29tPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorICAgICAgICA8L2F1dGhvcmdyb3VwPgorCisgICAgICAgIDxyZXZoaXN0b3J5PgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQgdW5kZXIKKyAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPgorICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5CisgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPG5vdGU+CisgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1BST0ZfVVJMOyc+WW9jdG8gUHJvamVjdCBQcm9maWxpbmcgYW5kIFRyYWNpbmcgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisgICAgPC9sZWdhbG5vdGljZT4KKworICAgIDwvYm9va2luZm8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC1pbnRyby54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWFyY2gueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJwcm9maWxlLW1hbnVhbC11c2FnZS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InByb2ZpbGUtbWFudWFsLWV4YW1wbGVzLnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwZGI5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9UT0RPCkBAIC0wLDAgKzEsMTEgQEAKK0hhbmRib29rIFRvZG8gTGlzdDoKKworICAqIERvY3VtZW50IGFkZGluZyBhIG5ldyBJTUFHRV9GRUFUVVJFIHRvIHRoZSBjdXN0b21pc2luZyBpbWFnZXMgc2VjdGlvbiAKKyAgKiBBZGQgaW5zdHJ1Y3Rpb25zIGFib3V0IHVzaW5nIHphdXJ1cy9vcGVubW9rbyBlbXVsYXRpb24KKyAgKiBBZGQgY29tcG9uZW50IG92ZXJ2aWV3L2Jsb2NrIGRpYWdyYW1zCisgICogU29mdHdhcmUgRGVldmVsb3BtZW50IGludHJvIHNob3VsZCBtZW50aW9uIGl0cyBzb2Z0d2FyZSBkZXZlbG9wbWVudCBmb3IgCisgICAgaW50ZW5kZWQgdGFyZ2V0IGFuZCBjb3VsZCBiZSBhIGRpZmZlcmVudCBhcmNoIGV0YyBhbmQgdGh1cyBzcGVjaWFsIGNhc2UuIAorICAqIEV4cGFuZCBpbnNhbmUuYmJjbGFzcyBkb2N1bWVudGF0aW9uIHRvIGNvdmVyIHRlc3RzCisgICogRG9jdW1lbnQgcmVtYWluaW5nIGNsYXNzZXMgKHNlZSBsaXN0IGluIHJlZi1jbGFzc2VzKQorICAqIERvY3VtZW50IGZvcm1mYWN0b3IKKwpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2Nsb3Nlci1sb29rLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmNjc0YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9jbG9zZXItbG9vay54bWwKQEAgLTAsMCArMSwxMzMxIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nY2xvc2VyLWxvb2snPgorPHRpdGxlPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciB0YWtlcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBkaWFncmFtIHJlcHJlc2VudHMgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGF0IGEKKyAgICAgICAgaGlnaCBsZXZlbC4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIGNoYXB0ZXIgZXhwYW5kcyBvbiB0aGUgZnVuZGFtZW50YWwgaW5wdXQsIG91dHB1dCwKKyAgICAgICAgcHJvY2VzcywgYW5kCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+KSBibG9ja3MKKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmEgaWQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz4KKyAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4aW4iIGRlcHRoPSI0LjI1aW4iIC8+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBnZW5lcmFsaXplZCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGNvbnNpc3RzIG9mCisgICAgICAgIHNldmVyYWwgZnVuY3Rpb25hbCBhcmVhczoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VXNlciBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTWV0YWRhdGEgeW91IGNhbiB1c2UgdG8gY29udHJvbCB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGEgTGF5ZXJzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVmFyaW91cyBsYXllcnMgdGhhdCBwcm92aWRlIHNvZnR3YXJlLCBtYWNoaW5lLCBhbmQKKyAgICAgICAgICAgICAgICBkaXN0cm8gTWV0YWRhdGEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBGaWxlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFVwc3RyZWFtIHJlbGVhc2VzLCBsb2NhbCBwcm9qZWN0cywgYW5kIFNDTXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIFN5c3RlbTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb2Nlc3NlcyB1bmRlciB0aGUgY29udHJvbCBvZgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoaXMgYmxvY2sgZXhwYW5kcyBvbiBob3cgQml0QmFrZSBmZXRjaGVzIHNvdXJjZSwgYXBwbGllcworICAgICAgICAgICAgICAgIHBhdGNoZXMsIGNvbXBsZXRlcyBjb21waWxhdGlvbiwgYW5hbHl6ZXMgb3V0cHV0IGZvciBwYWNrYWdlCisgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiwgY3JlYXRlcyBhbmQgdGVzdHMgcGFja2FnZXMsIGdlbmVyYXRlcyBpbWFnZXMsIGFuZAorICAgICAgICAgICAgICAgIGdlbmVyYXRlcyBjcm9zcy1kZXZlbG9wbWVudCB0b29scy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGFja2FnZSBGZWVkczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIGNvbnRhaW5pbmcgb3V0cHV0IHBhY2thZ2VzIChSUE0sIERFQiBvciBJUEspLAorICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIGFuIGltYWdlIG9yCisgICAgICAgICAgICAgICAgU0RLLCBwcm9kdWNlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIFRoZXNlIGZlZWRzIGNhbiBhbHNvIGJlIGNvcGllZCBhbmQgc2hhcmVkIHVzaW5nIGEgd2ViIHNlcnZlciBvcgorICAgICAgICAgICAgICAgIG90aGVyIG1lYW5zIHRvIGZhY2lsaXRhdGUgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIGV4aXN0aW5nCisgICAgICAgICAgICAgICAgaW1hZ2VzIG9uIGRldmljZXMgYXQgcnVudGltZSBpZiBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBpcworICAgICAgICAgICAgICAgIGVuYWJsZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEltYWdlcyBwcm9kdWNlZCBieSB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMgdGhhdCBhcmUgcHJvZHVjZWQgYWxvbmcgd2l0aCBhbiBpbWFnZQorICAgICAgICAgICAgICAgIG9yIHNlcGFyYXRlbHkgd2l0aCBCaXRCYWtlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlci1jb25maWd1cmF0aW9uIj4KKyAgICAgICAgPHRpdGxlPlVzZXIgQ29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVc2VyIGNvbmZpZ3VyYXRpb24gaGVscHMgZGVmaW5lIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRocm91Z2ggdXNlciBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHRlbGwgQml0QmFrZSB0aGUKKyAgICAgICAgICAgIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcgdGhlIGltYWdlLAorICAgICAgICAgICAgd2hlcmUgdG8gc3RvcmUgZG93bmxvYWRlZCBzb3VyY2UsIGFuZCBvdGhlciBidWlsZCBwcm9wZXJ0aWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyBhbiBleHBhbmRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICJVc2VyIENvbmZpZ3VyYXRpb24iIGJveCBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjMuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIG5lZWRzIHNvbWUgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBvcmRlciB0byBjb21wbGV0ZQorICAgICAgICAgICAgYSBidWlsZC4KKyAgICAgICAgICAgIFRoZXNlIGZpbGVzIGFyZSA8ZmlsZW5hbWU+Ki5jb25mPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICBUaGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBvbmVzIHJlc2lkZSBhcyBleGFtcGxlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgRm9yIHNpbXBsaWNpdHksIHRoaXMgc2VjdGlvbiByZWZlcnMgdG8gdGhlIFNvdXJjZSBEaXJlY3RvcnkgYXMKKyAgICAgICAgICAgIHRoZSAiUG9reSBEaXJlY3RvcnkuIgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjbG9uZSB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvciB5b3UKKyAgICAgICAgICAgIGRvd25sb2FkIGFuZCB1bnBhY2sgYSBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHlvdSBjYW4gc2V0IHVwIHRoZQorICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSB0byBiZSBuYW1lZCBhbnl0aGluZyB5b3Ugd2FudC4KKyAgICAgICAgICAgIEZvciB0aGlzIGRpc2N1c3Npb24sIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB1c2VzIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgUG9reSByZXBvc2l0b3J5IGlzIHByaW1hcmlseSBhbiBhZ2dyZWdhdGlvbiBvZiBleGlzdGluZworICAgICAgICAgICAgICAgIHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBjYW5vbmljYWwgdXBzdHJlYW0gc291cmNlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllciBpbnNpZGUgUG9reSBjb250YWlucworICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0IGhhcyBleGFtcGxlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgVGhlc2UgZXhhbXBsZSBmaWxlcyBhcmUgdXNlZCBhcyBhIGJhc2lzIGZvciBjcmVhdGluZyBhY3R1YWwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2hlbiB5b3Ugc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU291cmNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCBjcmVhdGVzIGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAgICAgICAgQml0QmFrZSB1c2VzIHRoZSBCdWlsZCBEaXJlY3RvcnkgZm9yIGFsbCBpdHMgd29yayBkdXJpbmcgYnVpbGRzLgorICAgICAgICAgICAgVGhlIEJ1aWxkIERpcmVjdG9yeSBoYXMgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSB0aGF0CisgICAgICAgICAgICBjb250YWlucyBkZWZhdWx0IHZlcnNpb25zIG9mIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIFRoZXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgY3JlYXRlZCBvbmx5IGlmIHZlcnNpb25zCisgICAgICAgICAgICBkbyBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IGF0IHRoZSB0aW1lIHlvdQorICAgICAgICAgICAgc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIFBva3kgcmVwb3NpdG9yeSBpcyBmdW5kYW1lbnRhbGx5IGFuIGFnZ3JlZ2F0aW9uIG9mCisgICAgICAgICAgICBleGlzdGluZyByZXBvc2l0b3JpZXMsIHNvbWUgdXNlcnMgbWlnaHQgYmUgZmFtaWxpYXIgd2l0aCBydW5uaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgIG9mIHNlcGFyYXRlIE9wZW5FbWJlZGRlZC1Db3JlIGFuZCBCaXRCYWtlIHJlcG9zaXRvcmllcyByYXRoZXIgdGhhbiBhCisgICAgICAgICAgICBzaW5nbGUgUG9reSByZXBvc2l0b3J5LgorICAgICAgICAgICAgVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIGNsb25lZAorICAgICAgICAgICAgb3IgdW5wYWNrZWQgdmVyc2lvbiBvZiBQb2t5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHNjcmlwdCBpcyBzb3VyY2VkLCBkaWZmZXJlbnQgc3ViLXNjcmlwdHMKKyAgICAgICAgICAgIGFyZSBjYWxsZWQgdG8gc2V0IHVwIHRoZSBCdWlsZCBEaXJlY3RvcnkgKFlvY3RvIG9yIE9wZW5FbWJlZGRlZCkuCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHRoZSBzY3JpcHQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL29lLXNldHVwLWJ1aWxkZGlyPC9maWxlbmFtZT4gaW5zaWRlIHRoZQorICAgICAgICAgICAgcG9reSBkaXJlY3Rvcnkgc2V0cyB1cCB0aGUgQnVpbGQgRGlyZWN0b3J5IGFuZCBzZWVkcyB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAoaWYgbmVjZXNzYXJ5KSB3aXRoIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpcjwvZmlsZW5hbWU+IHNjcmlwdAorICAgICAgICAgICAgICAgIHVzZXMgdGhlIDxmaWxlbmFtZT4kVEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2hpY2ggc2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gbG9jYXRlLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHByb3ZpZGVzIG1hbnkKKyAgICAgICAgICAgIGJhc2ljIHZhcmlhYmxlcyB0aGF0IGRlZmluZSBhIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgSGVyZSBpcyBhIGxpc3Qgb2YgYSBmZXcuCisgICAgICAgICAgICBUbyBzZWUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgaW4gYSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgc2VlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhcmFsbGVsaXNtIE9wdGlvbnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1RIUkVBRFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRhcmdldCBNYWNoaW5lIFNlbGVjdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb3dubG9hZCBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNoYXJlZCBTdGF0ZSBEaXJlY3Rvcnk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPjxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgT3V0cHV0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb25zIHNldCBpbiB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgZmlsZSBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvc2l0ZS5jb25mPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvYXV0by5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSB0ZWxscyBCaXRCYWtlIHdoYXQKKyAgICAgICAgICAgIGxheWVycyB5b3Ugd2FudCBjb25zaWRlcmVkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgbGF5ZXJzIGxpc3RlZCBpbiB0aGlzIGZpbGUgaW5jbHVkZSBsYXllcnMKKyAgICAgICAgICAgIG1pbmltYWxseSBuZWVkZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBtdXN0IG1hbnVhbGx5IGFkZCBhbnkgY3VzdG9tIGxheWVycyB5b3UgaGF2ZSBjcmVhdGVkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2VuYWJsaW5nLXlvdXItbGF5ZXInPkVuYWJsaW5nIFlvdXIgTGF5ZXI8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlsZXMgPGZpbGVuYW1lPnNpdGUuY29uZjwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmF1dG8uY29uZjwvZmlsZW5hbWU+IGFyZSBub3QgY3JlYXRlZCBieSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHlvdSBtdXN0IGNyZWF0ZSB0aGVtCisgICAgICAgICAgICB5b3Vyc2VsZjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2l0ZS5jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBjb25maWd1cmUgbXVsdGlwbGUgYnVpbGQgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgc2V2ZXJhbCBidWlsZCBlbnZpcm9ubWVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hhcmVkIHNvbWUgY29tbW9uIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGVzZSBkZWZhdWx0IGJ1aWxkIHByb3BlcnRpZXMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgaXMgcGVyaGFwcyB0aGUgcGFja2FnaW5nIGZvcm1hdCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPk9uZSB1c2VmdWwgc2NlbmFyaW8gZm9yIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9zaXRlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGlzIHRvIGV4dGVuZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gaW5jbHVkZSB0aGUgcGF0aCB0byBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGVuLCB3aGVuIEJpdEJha2UgbG9va3MgZm9yIE1ldGFkYXRhIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPiwgaXQgZmluZHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGUgYW5kIGFwcGxpZXMgeW91cgorICAgICAgICAgICAgICAgICAgICBjb21tb24gY29uZmlndXJhdGlvbnMgZm91bmQgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zIGluIGEgcGFydGljdWxhciBidWlsZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgIGFsdGVyIHRoZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiB0aGF0IGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSdzIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5hdXRvLmNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgbm90IGhhbmQtY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgUmF0aGVyLCB0aGUgZmlsZSBpcyB1c3VhbGx5IGNyZWF0ZWQgYW5kIHdyaXR0ZW4gdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gYXV0b2J1aWxkZXIuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZXR0aW5ncyBwdXQgaW50byB0aGUgZmlsZSBhcmUgdHlwaWNhbGx5IHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIHlvdSB3b3VsZCBmaW5kIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3IgdGhlIDxmaWxlbmFtZT5jb25mL3NpdGUuY29uZjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGVkaXQgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZnVydGhlciBkZWZpbmUKKyAgICAgICAgICAgIGFueSBwYXJ0aWN1bGFyIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgVGhpcyBwcm9jZXNzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSAiVXNlciBDb25maWd1cmF0aW9uIEVkaXRzIgorICAgICAgICAgICAgYm94IGluIHRoZSBmaWd1cmUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IGxhdW5jaCB5b3VyIGJ1aWxkIHdpdGggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBjb21tYW5kLCBCaXRCYWtlCisgICAgICAgICAgICBzb3J0cyBvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHVsdGltYXRlbHkgZGVmaW5lIHlvdXIgYnVpbGQKKyAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1ldGFkYXRhLW1hY2hpbmUtY29uZmlndXJhdGlvbi1hbmQtcG9saWN5LWNvbmZpZ3VyYXRpb24iPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyBzZWN0aW9uIGRlc2NyaWJlZCB0aGUgdXNlciBjb25maWd1cmF0aW9ucyB0aGF0CisgICAgICAgICAgICBkZWZpbmUgQml0QmFrZSdzIGdsb2JhbCBiZWhhdmlvci4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiB0YWtlcyBhIGNsb3NlciBsb29rIGF0IHRoZSBsYXllcnMgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgdXNlcyB0byBmdXJ0aGVyIGNvbnRyb2wgdGhlIGJ1aWxkLgorICAgICAgICAgICAgVGhlc2UgbGF5ZXJzIHByb3ZpZGUgTWV0YWRhdGEgZm9yIHRoZSBzb2Z0d2FyZSwgbWFjaGluZSwgYW5kCisgICAgICAgICAgICBwb2xpY3kuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIHRocmVlIHR5cGVzIG9mIGxheWVyIGlucHV0IGV4aXN0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBvbGljeSBDb25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBMYXllcnMgcHJvdmlkZSB0b3AtbGV2ZWwgb3IgZ2VuZXJhbAorICAgICAgICAgICAgICAgICAgICBwb2xpY2llcyBmb3IgdGhlIGltYWdlIG9yIFNESyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgbGF5ZXIgd291bGQgZGljdGF0ZSB3aGV0aGVyIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXMgUlBNIG9yIElQSyBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk1hY2hpbmUgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgbGF5ZXJzIHByb3ZpZGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0eXBlIG9mIGluZm9ybWF0aW9uIGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TWV0YWRhdGE6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgbGF5ZXJzIGNvbnRhaW4gdXNlci1zdXBwbGllZCByZWNpcGUgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHBhdGNoZXMsIGFuZCBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGFuIGV4cGFuZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgICAgICAgICAgTWV0YWRhdGEsIE1hY2hpbmUgQ29uZmlndXJhdGlvbiwgYW5kIFBvbGljeSBDb25maWd1cmF0aW9uIGlucHV0CisgICAgICAgICAgICAobGF5ZXJzKSBib3hlcyBvZiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPjoKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2xheWVyLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjhpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiBnZW5lcmFsLCBhbGwgbGF5ZXJzIGhhdmUgYSBzaW1pbGFyIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIFRoZXkgYWxsIGNvbnRhaW4gYSBsaWNlbnNpbmcgZmlsZQorICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPkNPUFlJTkc8L2ZpbGVuYW1lPikgaWYgdGhlIGxheWVyIGlzIHRvIGJlCisgICAgICAgICAgICBkaXN0cmlidXRlZCwgYSA8ZmlsZW5hbWU+UkVBRE1FPC9maWxlbmFtZT4gZmlsZSBhcyBnb29kIHByYWN0aWNlCisgICAgICAgICAgICBhbmQgZXNwZWNpYWxseSBpZiB0aGUgbGF5ZXIgaXMgdG8gYmUgZGlzdHJpYnV0ZWQsIGEKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LCBhbmQgcmVjaXBlIGRpcmVjdG9yaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBoYXMgbWFueSBsYXllcnMgdGhhdCBjYW4gYmUgdXNlZC4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIGEgd2ViLWludGVyZmFjZSBsaXN0aW5nIG9mIHRoZW0gb24gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvIj5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIHBhZ2UuCisgICAgICAgICAgICBUaGUgbGF5ZXJzIGFyZSBzaG93biBhdCB0aGUgYm90dG9tIGNhdGVnb3JpemVkIHVuZGVyCisgICAgICAgICAgICAiWW9jdG8gTWV0YWRhdGEgTGF5ZXJzLiIKKyAgICAgICAgICAgIFRoZXNlIGxheWVycyBhcmUgZnVuZGFtZW50YWxseSBhIHN1YnNldCBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVycy8iPk9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleDwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggbGlzdHMgYWxsIGxheWVycyBwcm92aWRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGNvbW11bml0eS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIExheWVycyBleGlzdCBpbiB0aGUgWW9jdG8gUHJvamVjdCBTb3VyY2UgUmVwb3NpdG9yaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KKyAgICAgICAgICAgICAgICBUaGVzZSBsYXllcnMgYXJlIGVpdGhlciBkZXByZWNhdGVkIG9yIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUsCisgICAgICAgICAgICB3aGljaCBpcyBwYXJ0IG9mIHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24sIHRvIGZpbmQgd2hhdCBsYXllcnMgaXQKKyAgICAgICAgICAgIHNob3VsZCBiZSB1c2luZyBhcyBwYXJ0IG9mIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZCBDcmVhdGluZyBMYXllcnM8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImRpc3Ryby1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+RGlzdHJvIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRpc3RyaWJ1dGlvbiBsYXllciBwcm92aWRlcyBwb2xpY3kgY29uZmlndXJhdGlvbnMgZm9yIHlvdXIKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBpc29sYXRlIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgaW50byB0aGVpciBvd24gbGF5ZXIuCisgICAgICAgICAgICAgICAgU2V0dGluZ3MgeW91IHByb3ZpZGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiBvdmVycmlkZQorICAgICAgICAgICAgICAgIHNpbWlsYXIKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyB0aGF0IEJpdEJha2UgZmluZHMgaW4geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHByb3ZpZGVzIHNvbWUgZXhwbGFuYXRpb24gYW5kIHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICBmb3Igd2hhdCB5b3UgdHlwaWNhbGx5IGZpbmQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBsYXllcjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNsYXNzZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIGZpbGVzICg8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPikgaG9sZAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGluIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdXIgcmVjaXBlcyBpbmhlcml0IGEgY2xhc3MsIHRoZXkgdGFrZSBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzIGFuZCBmdW5jdGlvbnMgZm9yIHRoYXQgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBjbGFzcyBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcyc+Q2xhc3NlczwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jb25mOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgaG9sZHMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciAoPGZpbGVuYW1lPmNvbmYvbGF5ZXIuY29uZjwvZmlsZW5hbWU+KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9kaXN0cm8vPHJlcGxhY2VhYmxlPmRpc3RybzwvcmVwbGFjZWFibGU+LmNvbmY8L2ZpbGVuYW1lPiksCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGRpc3RyaWJ1dGlvbi13aWRlIGluY2x1ZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5yZWNpcGVzLSo6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcyB0aGF0IGFmZmVjdCBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgYWNyb3NzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgY291bGQgaW5jbHVkZSByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFkZCBkaXN0cmlidXRpb24tc3BlY2lmaWMgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIHNjcmlwdHMsIGN1c3RvbSBpbWFnZSByZWNpcGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImJzcC1sYXllciI+CisgICAgICAgICAgICA8dGl0bGU+QlNQIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJTUCBMYXllciBwcm92aWRlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgIEV2ZXJ5dGhpbmcgaW4gdGhpcyBsYXllciBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBmb3Igd2hpY2gKKyAgICAgICAgICAgICAgICB5b3UgYXJlIGJ1aWxkaW5nIHRoZSBpbWFnZSBvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgIEEgY29tbW9uIHN0cnVjdHVyZSBvciBmb3JtIGlzIGRlZmluZWQgZm9yIEJTUCBsYXllcnMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IHRoaXMgc3RydWN0dXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgYSBCU1AgbGF5ZXIgdG8gYmUgY29uc2lkZXJlZCBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCwgaXQgbXVzdCBtZWV0IHNvbWUgc3RydWN0dXJhbCByZXF1aXJlbWVudHMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgQlNQIExheWVyJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgY29udGFpbnMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KSBhbmQsCisgICAgICAgICAgICAgICAgb2YgY291cnNlLCB0aGUgbGF5ZXIgKDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhlIGxheWVyIGlzIGRlZGljYXRlZCB0byBzcGVjaWZpYyByZWNpcGVzCisgICAgICAgICAgICAgICAgYnkgZnVuY3Rpb246IDxmaWxlbmFtZT5yZWNpcGVzLWJzcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yZWNpcGVzLWNvcmU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1ncmFwaGljczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cmVjaXBlcy1rZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBNZXRhZGF0YSBjYW4gZXhpc3QgZm9yIG11bHRpcGxlIGZvcm1mYWN0b3JzLCBncmFwaGljcworICAgICAgICAgICAgICAgIHN1cHBvcnQgc3lzdGVtcywgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGUgZmlndXJlIHNob3dzIHNldmVyYWwgPGZpbGVuYW1lPnJlY2lwZXMtKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLCBub3QgYWxsIHRoZXNlIGRpcmVjdG9yaWVzIGFwcGVhciBpbiBhbGwKKyAgICAgICAgICAgICAgICAgICAgQlNQIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ic29mdHdhcmUtbGF5ZXIiPgorICAgICAgICAgICAgPHRpdGxlPlNvZnR3YXJlIExheWVyPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIGxheWVyIHByb3ZpZGVzIHRoZSBNZXRhZGF0YSBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIHNvZnR3YXJlIHBhY2thZ2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGRvZXMgbm90IGluY2x1ZGUgTWV0YWRhdGEgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gb3IgdGhlIG1hY2hpbmUsIHdoaWNoIGFyZSBmb3VuZCBpbiB0aGVpcgorICAgICAgICAgICAgICAgIHJlc3BlY3RpdmUgbGF5ZXJzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIGxheWVyIGNvbnRhaW5zIGFueSBuZXcgcmVjaXBlcyB0aGF0IHlvdXIgcHJvamVjdCBuZWVkcworICAgICAgICAgICAgICAgIGluIHRoZSBmb3JtIG9mIHJlY2lwZSBmaWxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJzb3VyY2VzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5Tb3VyY2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIG9yZGVyIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYW4gaW1hZ2Ugb3IKKyAgICAgICAgICAgIGFueSB0YXJnZXQsIGl0IG11c3QgYmUgYWJsZSB0byBhY2Nlc3Mgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdnZW5lcmFsLXlvY3RvLWVudmlyb25tZW50LWZpZ3VyZSc+Z2VuZXJhbCBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50IGZpZ3VyZTwvbGluaz4KKyAgICAgICAgICAgIHJlcHJlc2VudHMgc291cmNlIGZpbGVzIHVzaW5nIHRoZSAiVXBzdHJlYW0gUHJvamVjdCBSZWxlYXNlcyIsCisgICAgICAgICAgICAiTG9jYWwgUHJvamVjdHMiLCBhbmQgIlNDTXMgKG9wdGlvbmFsKSIgYm94ZXMuCisgICAgICAgICAgICBUaGUgZmlndXJlIHJlcHJlc2VudHMgbWlycm9ycywgd2hpY2ggYWxzbyBwbGF5IGEgcm9sZSBpbiBsb2NhdGluZworICAgICAgICAgICAgc291cmNlIGZpbGVzLCB3aXRoIHRoZSAiU291cmNlIE1pcnJvcihzKSIgYm94LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbWV0aG9kIGJ5IHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgdWx0aW1hdGVseSBvcmdhbml6ZWQgaXMKKyAgICAgICAgICAgIGEgZnVuY3Rpb24gb2YgdGhlIHByb2plY3QuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHJlbGVhc2VkIHNvZnR3YXJlLCBwcm9qZWN0cyB0ZW5kIHRvIHVzZSB0YXJiYWxscworICAgICAgICAgICAgb3Igb3RoZXIgYXJjaGl2ZWQgZmlsZXMgdGhhdCBjYW4gY2FwdHVyZSB0aGUgc3RhdGUgb2YgYSByZWxlYXNlCisgICAgICAgICAgICBndWFyYW50ZWVpbmcgdGhhdCBpdCBpcyBzdGF0aWNhbGx5IHJlcHJlc2VudGVkLgorICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGZvciBhIHByb2plY3QgdGhhdCBpcyBtb3JlIGR5bmFtaWMgb3IKKyAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUsIGEgcHJvamVjdCBtaWdodCBrZWVwIHNvdXJjZSBmaWxlcyBpbiBhCisgICAgICAgICAgICByZXBvc2l0b3J5IGNvbnRyb2xsZWQgYnkgYSBTb3VyY2UgQ29udHJvbCBNYW5hZ2VyIChTQ00pIHN1Y2ggYXMKKyAgICAgICAgICAgIEdpdC4KKyAgICAgICAgICAgIFB1bGxpbmcgc291cmNlIGZyb20gYSByZXBvc2l0b3J5IGFsbG93cyB5b3UgdG8gY29udHJvbAorICAgICAgICAgICAgdGhlIHBvaW50IGluIHRoZSByZXBvc2l0b3J5ICh0aGUgcmV2aXNpb24pIGZyb20gd2hpY2ggeW91IHdhbnQgdG8KKyAgICAgICAgICAgIGJ1aWxkIHNvZnR3YXJlLgorICAgICAgICAgICAgRmluYWxseSwgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIG1pZ2h0IGV4aXN0LCB3aGljaCB3b3VsZCBnaXZlIHRoZQorICAgICAgICAgICAgY29uc3VtZXIgYSBjaG9pY2Ugd2hlbiBkZWNpZGluZyB3aGVyZSB0byBnZXQgc291cmNlIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRvIHBvaW50IHRvIHNvdXJjZSBmaWxlcyByZWdhcmRsZXNzIG9mIHRoZWlyIGxvY2F0aW9uLgorICAgICAgICAgICAgRWFjaCByZWNpcGUgbXVzdCBoYXZlIGEgPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgdGhhdCBwb2ludHMgdG8gdGhlIHNvdXJjZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQW5vdGhlciBhcmVhIHRoYXQgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIHdoZXJlIHNvdXJjZSBmaWxlcworICAgICAgICAgICAgY29tZSBmcm9tIGlzIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoaXMgYXJlYSBpcyBhIGNhY2hlIHRoYXQgY2FuIGhvbGQgcHJldmlvdXNseSBkb3dubG9hZGVkIHNvdXJjZS4KKyAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBpbnN0cnVjdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUKKyAgICAgICAgICAgIHRhcmJhbGxzIGZyb20gR2l0IHJlcG9zaXRvcmllcywgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBieSB1c2luZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxmaWxlbmFtZT5CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBKdWRpY2lvdXMgdXNlIG9mIGEgPGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjYW4KKyAgICAgICAgICAgIHNhdmUgdGhlIGJ1aWxkIHN5c3RlbSBhIHRyaXAgYWNyb3NzIHRoZSBJbnRlcm5ldCB3aGVuIGxvb2tpbmcKKyAgICAgICAgICAgIGZvciBmaWxlcy4KKyAgICAgICAgICAgIEEgZ29vZCBtZXRob2QgZm9yIHVzaW5nIGEgZG93bmxvYWQgZGlyZWN0b3J5IGlzIHRvIGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBwb2ludCB0byBhbiBhcmVhIG91dHNpZGUgb2YgeW91cgorICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgRG9pbmcgc28gYWxsb3dzIHlvdSB0byBzYWZlbHkgZGVsZXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIG5lZWRlZCB3aXRob3V0IGZlYXIgb2YgcmVtb3ZpbmcgYW55IGRvd25sb2FkZWQgc291cmNlIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgZGVlcGVyIGxvb2sgaW50byB0aGUKKyAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBhbmQgdGhlIG1pcnJvcnMuCisgICAgICAgICAgICBIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsb29rIGF0IHRoZSBzb3VyY2UgZmlsZSBhcmVhIG9mIHRoZQorICAgICAgICAgICAgYmFzZSBmaWd1cmU6CisgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjcuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Vwc3RyZWFtLXByb2plY3QtcmVsZWFzZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVwc3RyZWFtIFByb2plY3QgUmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVcHN0cmVhbSBwcm9qZWN0IHJlbGVhc2VzIGV4aXN0IGFueXdoZXJlIGluIHRoZSBmb3JtIG9mIGFuCisgICAgICAgICAgICAgICAgYXJjaGl2ZWQgZmlsZSAoZS5nLiB0YXJiYWxsIG9yIHppcCBmaWxlKS4KKyAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBjb3JyZXNwb25kIHRvIGluZGl2aWR1YWwgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZpZ3VyZSB1c2VzIHNwZWNpZmljIHJlbGVhc2VzIGVhY2ggZm9yCisgICAgICAgICAgICAgICAgQnVzeUJveCwgUXQsIGFuZCBEYnVzLgorICAgICAgICAgICAgICAgIEFuIGFyY2hpdmUgZmlsZSBjYW4gYmUgZm9yIGFueSByZWxlYXNlZCBwcm9kdWN0IHRoYXQgY2FuIGJlCisgICAgICAgICAgICAgICAgYnVpbHQgdXNpbmcgYSByZWNpcGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbG9jYWwtcHJvamVjdHMnPgorICAgICAgICAgICAgPHRpdGxlPkxvY2FsIFByb2plY3RzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTG9jYWwgcHJvamVjdHMgYXJlIGN1c3RvbSBiaXRzIG9mIHNvZnR3YXJlIHRoZSB1c2VyIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFRoZXNlIGJpdHMgcmVzaWRlIHNvbWV3aGVyZSBsb2NhbCB0byBhIHByb2plY3QgLSBwZXJoYXBzCisgICAgICAgICAgICAgICAgYSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgdXNlciBjaGVja3MgaW4gaXRlbXMgKGUuZy4KKyAgICAgICAgICAgICAgICBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIGEgZGV2ZWxvcG1lbnQgc291cmNlIHRyZWUKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBncm91cCkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjYW5vbmljYWwgbWV0aG9kIHRocm91Z2ggd2hpY2ggdG8gaW5jbHVkZSBhIGxvY2FsIHByb2plY3QKKyAgICAgICAgICAgICAgICBpcyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzIHRvIGluY2x1ZGUgdGhhdCBsb2NhbCBwcm9qZWN0LgorICAgICAgICAgICAgICAgIFlvdSB1c2UgZWl0aGVyIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGEKKyAgICAgICAgICAgICAgICByZWNpcGUncyBhcHBlbmQgZmlsZSB0byBvdmVycmlkZSBvciBzZXQgdGhlCisgICAgICAgICAgICAgICAgcmVjaXBlIHRvIHBvaW50IHRvIHRoZSBsb2NhbCBkaXJlY3Rvcnkgb24geW91ciBkaXNrIHRvIHB1bGwKKyAgICAgICAgICAgICAgICBpbiB0aGUgd2hvbGUgc291cmNlIHRyZWUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NjbXMnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBDb250cm9sIE1hbmFnZXJzIChPcHRpb25hbCk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbm90aGVyIHBsYWNlIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGdldCBzb3VyY2UgZmlsZXMgZnJvbSBpcworICAgICAgICAgICAgICAgIHRocm91Z2ggYW4gU0NNIHN1Y2ggYXMgR2l0IG9yIFN1YnZlcnNpb24uCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkIG9yIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1mZXRjaCc+PGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbnNpZGUgQml0QmFrZSB1c2VzCisgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aGUgYXJndW1lbnQncyBwcmVmaXggdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaGF2ZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGdlbmVyYXRlIHRhcmJhbGxzIGZvciBHaXQgcmVwb3NpdG9yaWVzIGFuZCBwbGFjZSB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ETF9ESVInPjxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTJz48ZmlsZW5hbWU+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICA8L25vdGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gZmV0Y2hpbmcgYSByZXBvc2l0b3J5LCBCaXRCYWtlIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgcmV2aXNpb24gZnJvbSB3aGljaCB0bworICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1taXJyb3JzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Tb3VyY2UgTWlycm9yKHMpPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVHdvIGtpbmRzIG9mIG1pcnJvcnMgZXhpc3Q6IHByZS1taXJyb3JzIGFuZCByZWd1bGFyIG1pcnJvcnMuCisgICAgICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NSVJST1JTJz48ZmlsZW5hbWU+TUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBwb2ludCB0byB0aGVzZSwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIEJpdEJha2UgY2hlY2tzIHByZS1taXJyb3JzIGJlZm9yZSBsb29raW5nIHVwc3RyZWFtIGZvciBhbnkKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMuCisgICAgICAgICAgICAgICAgUHJlLW1pcnJvcnMgYXJlIGFwcHJvcHJpYXRlIHdoZW4geW91IGhhdmUgYSBzaGFyZWQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRExfRElSJz48ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgQSBQcmUtbWlycm9yIHR5cGljYWxseSBwb2ludHMgdG8gYSBzaGFyZWQgZGlyZWN0b3J5IHRoYXQgaXMKKyAgICAgICAgICAgICAgICBsb2NhbCB0byB5b3VyIG9yZ2FuaXphdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUmVndWxhciBtaXJyb3JzIGNhbiBiZSBhbnkgc2l0ZSBhY3Jvc3MgdGhlIEludGVybmV0IHRoYXQgaXMKKyAgICAgICAgICAgICAgICB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uIGZvciBzb3VyY2UgY29kZSBzaG91bGQgdGhlCisgICAgICAgICAgICAgICAgcHJpbWFyeSBzaXRlIG5vdCBiZSBmdW5jdGlvbmluZyBmb3Igc29tZSByZWFzb24gb3IgYW5vdGhlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCI+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIEZlZWRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2VuZXJhdGVzIGFuIGltYWdlIG9yIGFuIFNESywKKyAgICAgICAgICAgIGl0IGdldHMgdGhlIHBhY2thZ2VzIGZyb20gYSBwYWNrYWdlIGZlZWQgYXJlYSBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZ2VuZXJhbC15b2N0by1lbnZpcm9ubWVudC1maWd1cmUnPmdlbmVyYWwgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBmaWd1cmU8L2xpbms+CisgICAgICAgICAgICBzaG93cyB0aGlzIHBhY2thZ2UgZmVlZHMgYXJlYSBpbiB0aGUgdXBwZXItcmlnaHQgY29ybmVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbG9va3MgYSBsaXR0bGUgY2xvc2VyIGludG8gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYSB1c2VkCisgICAgICAgICAgICBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbG9vayBhdCB0aGUgYXJlYToKKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjdpbiIgZGVwdGg9IjZpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUGFja2FnZSBmZWVkcyBhcmUgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBjbGFzc2VzIHRvIGdlbmVyYXRlCisgICAgICAgICAgICBkaWZmZXJlbnQgcGFja2FnZSB0eXBlcywgYW5kIHlvdSBzcGVjaWZ5IHdoaWNoIGNsYXNzZXMgdG8gZW5hYmxlCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCZWZvcmUgcGxhY2luZyB0aGUgcGFja2FnZXMgaW50byBwYWNrYWdlIGZlZWRzLAorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgdmFsaWRhdGVzIHRoZW0gd2l0aCBnZW5lcmF0ZWQgb3V0cHV0IHF1YWxpdHkKKyAgICAgICAgICAgIGFzc3VyYW5jZSBjaGVja3MgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwYWNrYWdlIGZlZWQgYXJlYSByZXNpZGVzIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHRoZSBidWlsZCBzeXN0ZW0gdXNlcyB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYWNrYWdlcworICAgICAgICAgICAgaXMgZGV0ZXJtaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgdGhlIHBhcnRpY3VsYXIKKyAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciBpbiB1c2UuCisgICAgICAgICAgICBTZWUgdGhlICJQYWNrYWdlIEZlZWRzIiBib3ggaW4gdGhlIGlsbHVzdHJhdGlvbiBhbmQgbm90ZSB0aGUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIHRoZSByaWdodCBvZiB0aGF0IGFyZWEuCisgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIGRlZmluZXMgd2hlcmUgcGFja2FnZSBmaWxlcyBhcmUKKyAgICAgICAgICAgIGtlcHQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIERlZmluZWQgYXMgPGZpbGVuYW1lPnRtcC9kZXBsb3k8L2ZpbGVuYW1lPiBpbiB0aGUgQnVpbGQKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkRFUExPWV9ESVJfKjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIHBhY2thZ2UgbWFuYWdlciB1c2VkLCB0aGUgcGFja2FnZSB0eXBlCisgICAgICAgICAgICAgICAgICAgIHN1Yi1mb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEdpdmVuIFJQTSwgSVBLLCBvciBERUIgcGFja2FnaW5nIGFuZCB0YXJiYWxsIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lQSyc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSVBLPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfVEFSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9UQVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgdXNlZCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGZpbGVuYW1lPlBBQ0tBR0VfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3ViLWZvbGRlcnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBwYWNrYWdlcyBjb3VsZCBleGlzdCBmb3IgdGhlIGk1ODYgb3IgcWVtdXg4NgorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHVzZXMgdGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiB0YXNrcyB0bworICAgICAgICAgICAgZ2VuZXJhdGUgcGFja2FnZXMgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgcGFja2FnZSBob2xkaW5nIGFyZWEgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+IGZvciBJUEsgcGFja2FnZXMpLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+IiwKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPiIsCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4iLAorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVyIGEgc2NlbmFyaW8gd2hlcmUgYW4gSVBLIHBhY2thZ2luZyBtYW5hZ2VyCisgICAgICAgICAgICBpcyBiZWluZyB1c2VkIGFuZCBwYWNrYWdlIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBib3RoIGk1ODYKKyAgICAgICAgICAgIGFuZCBxZW11eDg2IGV4aXN0LgorICAgICAgICAgICAgUGFja2FnZXMgZm9yIHRoZSBpNTg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvaTU4NjwvZmlsZW5hbWU+LCB3aGlsZSBwYWNrYWdlcyBmb3IKKyAgICAgICAgICAgIHRoZSBxZW11eDg2IGFyY2hpdGVjdHVyZSBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvcWVtdXg4NjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2JpdGJha2UtZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYml0YmFrZS10ZXJtJz5CaXRCYWtlPC91bGluaz4KKyAgICAgICAgICAgIHRvIHByb2R1Y2UgaW1hZ2VzLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBCaXRCYWtlIGFyZWEgY29uc2lzdHMgb2Ygc2V2ZXJhbCBmdW5jdGlvbmFsIGFyZWFzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHRha2VzIGEgY2xvc2VyIGxvb2sgYXQgZWFjaCBvZiB0aG9zZSBhcmVhcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU2VwYXJhdGUgZG9jdW1lbnRhdGlvbiBleGlzdHMgZm9yIHRoZSBCaXRCYWtlIHRvb2wuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwnPkJpdEJha2UgVXNlciBNYW51YWw8L3VsaW5rPgorICAgICAgICAgICAgZm9yIHJlZmVyZW5jZSBtYXRlcmlhbCBvbiBCaXRCYWtlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlNvdXJjZSBGZXRjaGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBzdGFnZXMgb2YgYnVpbGRpbmcgYSByZWNpcGUgYXJlIHRvIGZldGNoIGFuZCB1bnBhY2sKKyAgICAgICAgICAgICAgICB0aGUgc291cmNlIGNvZGU6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2LjVpbiIgZGVwdGg9IjVpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWZldGNoJz48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgZmV0Y2ggdGhlIHNvdXJjZSBmaWxlcyBhbmQgdW5wYWNrIHRoZW0gaW50byB0aGUgd29yaworICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV2ZXJ5IGxvY2FsIGZpbGUgKGUuZy4gPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBwYXJ0IG9mIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgYSBjaGVja3N1bQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZSBmb3IgdGhlIHJlY2lwZSBhbmQgaW5zZXJ0cyB0aGUgY2hlY2tzdW0gaW50bworICAgICAgICAgICAgICAgICAgICB0aGUgc2lnbmF0dXJlIGZvciB0aGUgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIElmIGFueSBsb2NhbCBmaWxlIGhhcyBiZWVuIG1vZGlmaWVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2ZldGNoPC9maWxlbmFtZT4gdGFzayBhbmQgYWxsIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kIG9uIGl0IGFyZSByZS1leGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgZXZlcnl0aGluZyBpcyBhY2NvbXBsaXNoZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICB3aGljaCBoYXMgYSBkZWZpbmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZSBCdWlsZCBEaXJlY3RvcnksCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1idWlsZCc+PGZpbGVuYW1lPmJ1aWxkLzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBVbnBhY2tlZCBzb3VyY2UgZmlsZXMgYXJlIHBvaW50ZWQgdG8gYnkgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIEVhY2ggcmVjaXBlIGhhcyBhbiBhcmVhIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgdW5wYWNrZWQgc291cmNlIGNvZGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGF0IGRpcmVjdG9yeSBmb3IgYW55IGdpdmVuIHJlY2lwZSBpcyBkZWZpbmVkIGZyb20KKyAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlIHZhcmlhYmxlcyB0aGF0IGRlZmluZSB0aGVzZSBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgIGJ5IGxvb2tpbmcgYXQgdGhlIGZpZ3VyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIGFsbCBpdHMgd29yayBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9BUkNIJz48ZmlsZW5hbWU+UEFDS0FHRV9BUkNIPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWx0IHBhY2thZ2Ugb3IgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfT1MnPjxmaWxlbmFtZT5UQVJHRVRfT1M8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBidWlsdCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmVyc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gd2l0aGluIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBwYWNrYWdlIGlzIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbnMgdGhlIHVucGFja2VkIHNvdXJjZSBmaWxlcyBmb3IgYSBnaXZlbiByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPlBhdGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSBzb3VyY2UgY29kZSBpcyBmZXRjaGVkIGFuZCB1bnBhY2tlZCwgQml0QmFrZSBsb2NhdGVzCisgICAgICAgICAgICAgICAgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGZpbGVzOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9wYXRjaGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBwcm9jZXNzZXMgcmVjaXBlcyBieQorICAgICAgICAgICAgICAgIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGxvY2F0ZSBhcHBsaWNhYmxlIHBhdGNoIGZpbGVzLCB3aGljaCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgYXJlIDxmaWxlbmFtZT4qLnBhdGNoPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5kaWZmPC9maWxlbmFtZT4gZmlsZXMsIG9yIGFueSBmaWxlIGlmCisgICAgICAgICAgICAgICAgImFwcGx5PXllcyIgaXMgc3BlY2lmaWVkIGZvciB0aGUgZmlsZSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJpdEJha2UgZmluZHMgYW5kIGFwcGxpZXMgbXVsdGlwbGUgcGF0Y2hlcyBmb3IgYSBzaW5nbGUgcmVjaXBlCisgICAgICAgICAgICAgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGl0IGZpbmRzIHRoZSBwYXRjaGVzLgorICAgICAgICAgICAgICAgIFBhdGNoZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHJlY2lwZSdzIHNvdXJjZSBmaWxlcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgc291cmNlIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAgICAgICAgIGNyZWF0ZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc291cmNlLWZldGNoaW5nLWRldi1lbnZpcm9ubWVudCc+U291cmNlIEZldGNoaW5nPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyYXRpb24tYW5kLWNvbXBpbGF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBhbmQgQ29tcGlsYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciBzb3VyY2UgY29kZSBpcyBwYXRjaGVkLCBCaXRCYWtlIGV4ZWN1dGVzIHRhc2tzIHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIGNvbXBpbGUgdGhlIHNvdXJjZSBjb2RlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI1aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc3RlcCBpbiB0aGUgYnVpbGQgcHJvY2VzcyBjb25zaXN0cyBvZiB0aHJlZSB0YXNrczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbnMgY2FuIGNvbWUgZnJvbSB0aGUgcmVjaXBlIGl0c2VsZiBhcyB3ZWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBmcm9tIGFuIGluaGVyaXRlZCBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIHNvZnR3YXJlIGl0c2VsZiBtaWdodCBjb25maWd1cmUgaXRzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBmb3Igd2hpY2ggaXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBjb25maWd1cmF0aW9ucyBoYW5kbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzayBhcmUgc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNvdXJjZSBjb2RlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQgYnkgdGhlIHJlY2lwZS48L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSBhcmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhZGQgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDT05GJz48ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSB3b3JrcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBhIGNvbmZpZ3VyYXRpb24gdGFzayBoYXMgYmVlbiBzYXRpc2ZpZWQsIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVzIHRoZSBzb3VyY2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxhdGlvbiBvY2N1cnMgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxpemUgdGhhdCB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMsIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LCB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgY29tcGlsYXRpb24gaXMgZG9uZSwgQml0QmFrZSBleGVjdXRlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdGFzayBjb3BpZXMgZmlsZXMgZnJvbSB0aGUgPGZpbGVuYW1lPkI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBwbGFjZXMgdGhlbSBpbiBhIGhvbGRpbmcgYXJlYSBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncGFja2FnZS1zcGxpdHRpbmctZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgICAgIDx0aXRsZT5QYWNrYWdlIFNwbGl0dGluZzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFmdGVyIHNvdXJjZSBjb2RlIGlzIGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkLCB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuYWx5emVzCisgICAgICAgICAgICAgICAgdGhlIHJlc3VsdHMgYW5kIHNwbGl0cyB0aGUgb3V0cHV0IGludG8gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3aW4iIGRlcHRoPSI3aW4iIC8+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFza3MgY29tYmluZSB0byBhbmFseXplCisgICAgICAgICAgICAgICAgdGhlIGZpbGVzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBhbmQgc3BsaXQgdGhlbSBpbnRvIHN1YnNldHMgYmFzZWQgb24gYXZhaWxhYmxlIHBhY2thZ2VzIGFuZAorICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgIFRoZSBhbmFseXppbmcgcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIGFzIHdlbGwgYXMgb3RoZXIKKyAgICAgICAgICAgICAgICBpdGVtczogc3BsaXR0aW5nIG91dCBkZWJ1Z2dpbmcgc3ltYm9scywKKyAgICAgICAgICAgICAgICBsb29raW5nIGF0IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBhY2thZ2VzLAorICAgICAgICAgICAgICAgIGFuZCBsb29raW5nIGF0IHBhY2thZ2UgcmVsYXRpb25zaGlwcy4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBtZXRhZGF0YSBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2FuIGdlbmVyYXRlIHRoZSBmaW5hbCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBXb3JraW5nLCBzdGFnZWQsIGFuZCBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMKKyAgICAgICAgICAgICAgICBhbmQgcGFja2FnZSBzcGxpdHRpbmcgcHJvY2VzcyB1c2UgdGhlc2UgYXJlYXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dEJz48ZmlsZW5hbWU+UEtHRDwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBiZWZvcmUgdGhleSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEtHREVTVFdPUksnPjxmaWxlbmFtZT5QS0dERVNUV09SSzwvZmlsZW5hbWU+PC9saW5rPiAtCisgICAgICAgICAgICAgICAgICAgICAgICBBIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT4gdGFzay4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBLR0RFU1QnPjxmaWxlbmFtZT5QS0dERVNUPC9maWxlbmFtZT48L2xpbms+IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBwYWNrYWdlcyBhZnRlciB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gc3BsaXQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbmVzIHRoZSBmaWxlcyB0aGF0IGdvIGludG8gZWFjaCBwYWNrYWdlIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgZGV0YWlscyBvbiBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICBsb29rIGF0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBwYWNrYWdlcyBiZWluZyBjcmVhdGVkIChSUE0sIERFQiwgb3IKKyAgICAgICAgICAgICAgICBJUEspLCB0aGUgPGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfKjwvZmlsZW5hbWU+IHRhc2sKKyAgICAgICAgICAgICAgICBjcmVhdGVzIHRoZSBhY3R1YWwgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIFBhY2thZ2UgRmVlZCBhcmVhLCB3aGljaCBpcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbCBvbiB0aGF0IHBhcnQgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGNyZWF0aW5nIGZlZWRzIGRpcmVjdGx5IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvKjwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGRvZXMgbm90IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBDcmVhdGluZyBzdWNoIGZlZWRzIHVzdWFsbHkgcmVxdWlyZXMgc29tZSBraW5kIG9mIGZlZWQKKyAgICAgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2UgbWVjaGFuaXNtIHRoYXQgd291bGQgdXBsb2FkIHRoZSBuZXcgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBvZmZpY2lhbCBwYWNrYWdlIGZlZWQgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgIMOFbmdzdHLDtm0gZGlzdHJpYnV0aW9uKS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGhpZ2hseSBkaXN0cmlidXRpb24tc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRodXMgaXMgbm90IHByb3ZpZGVkIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+SW1hZ2UgR2VuZXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE9uY2UgcGFja2FnZXMgYXJlIHNwbGl0IGFuZCBzdG9yZWQgaW4gdGhlIFBhY2thZ2UgRmVlZHMgYXJlYSwKKyAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlOgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGdlbmVyYXRpb24gcHJvY2VzcyBjb25zaXN0cyBvZiBzZXZlcmFsIHN0YWdlcyBhbmQKKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIG1hbnkgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIHVzZXMgdGhlc2Uga2V5IHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5IGluc3RhbGw6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIG91dCB0aGUgYmFzZSBzZXQgb2YgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBwYWNrYWdlcyB0aGF0IHNob3VsZCBub3QgYmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgbWFwIHRvIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWNrYWdlIGJhY2tlbmQgdG8gdXNlIGFuZCBjb25zZXF1ZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBzIGRldGVybWluZSB3aGVyZSB0byBsb2NhdGUgcGFja2FnZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZSBGZWVkcyBhcmVhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxmaWxlbmFtZT5JTUFHRV9MSU5HVUFTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbGFuZ3VhZ2UocykgZm9yIHdoaWNoIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIHN1cHBvcnQgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYWNrYWdlIGluc3RhbGxhdGlvbiBpcyB1bmRlciBjb250cm9sIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAoZS5nLiBzbWFydC9ycG0sIG9wa2csIG9yIGFwdC9kcGtnKSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3IKKyAgICAgICAgICAgICAgICBub3QgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcywgaWYgcGFja2FnZSBtYW5hZ2VtZW50IGlzIG5vdAorICAgICAgICAgICAgICAgIGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQsIHRoZSBwYWNrYWdlIG1hbmFnZXIncyBkYXRhIGZpbGVzCisgICAgICAgICAgICAgICAgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgaW1hZ2UgZ2VuZXJhdGlvbiwgdGhlIGJ1aWxkIHN5c3RlbSBhdHRlbXB0cyB0byBydW4KKyAgICAgICAgICAgICAgICBhbGwgcG9zdC1pbnN0YWxsYXRpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICBBbnkgdGhhdCBmYWlsIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBhcmUgcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIHRhcmdldCB3aGVuIHRoZSB0YXJnZXQgc3lzdGVtIGlzIGZpcnN0IGJvb3RlZC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIGEKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPnJlYWQtb25seSByb290IGZpbGVzeXN0ZW08L3VsaW5rPiwKKyAgICAgICAgICAgICAgICBhbGwgdGhlIHBvc3QgaW5zdGFsbGF0aW9uIHNjcmlwdHMgbXVzdCBzdWNjZWVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlIGluc3RhbGxhdGlvbiBwaGFzZSBzaW5jZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgcmVhZC1vbmx5LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEdXJpbmcgT3B0aW1pemF0aW9uLCBvcHRpbWl6aW5nIHByb2Nlc3NlcyBhcmUgcnVuIGFjcm9zcworICAgICAgICAgICAgICAgIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaGVzZSBwcm9jZXNzZXMgaW5jbHVkZSA8ZmlsZW5hbWU+bWtsaWJzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnByZWxpbms8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1rbGliczwvZmlsZW5hbWU+IHByb2Nlc3Mgb3B0aW1pemVzIHRoZSBzaXplCisgICAgICAgICAgICAgICAgb2YgdGhlIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gcHJvY2VzcyBvcHRpbWl6ZXMgdGhlIGR5bmFtaWMKKyAgICAgICAgICAgICAgICBsaW5raW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgdG8gcmVkdWNlIHN0YXJ0IHVwIHRpbWUgb2YKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWxvbmcgd2l0aCB3cml0aW5nIG91dCB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT4gdGFzayBjcmVhdGVzIGEgbWFuaWZlc3QgZmlsZQorICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Lm1hbmlmZXN0PC9maWxlbmFtZT4pIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UgdGhhdCBsaXN0cyBvdXQsIGxpbmUtYnktbGluZSwgdGhlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoaXMgbWFuaWZlc3QgZmlsZSBpcyB1c2VmdWwgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXRlc3RpbWFnZSc+PGZpbGVuYW1lPnRlc3RpbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzLCBmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIHJ1bgorICAgICAgICAgICAgICAgIHNwZWNpZmljIHRlc3RzLgorICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTUFOSUZFU1QnPjxmaWxlbmFtZT5JTUFHRV9NQU5JRkVTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBQYXJ0IG9mIHRoZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaW5jbHVkZXMgY29tcHJlc3NpbmcgdGhlCisgICAgICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIGlzIGFjY29tcGxpc2hlZCB0aHJvdWdoIHNldmVyYWwgb3B0aW1pemF0aW9uCisgICAgICAgICAgICAgICAgcm91dGluZXMgZGVzaWduZWQgdG8gcmVkdWNlIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBZnRlciB0aGUgcm9vdCBmaWxlc3lzdGVtIGhhcyBiZWVuIGNvbnN0cnVjdGVkLCB0aGUgaW1hZ2UKKyAgICAgICAgICAgICAgICBnZW5lcmF0aW9uIHByb2Nlc3MgdHVybnMgZXZlcnl0aGluZyBpbnRvIGFuIGltYWdlIGZpbGUgb3IKKyAgICAgICAgICAgICAgICBhIHNldCBvZiBpbWFnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgZm9ybWF0cyB1c2VkIGZvciB0aGUgcm9vdCBmaWxlc3lzdGVtIGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGVudGlyZSBpbWFnZSBnZW5lcmF0aW9uIHByb2Nlc3MgaXMgcnVuIHVuZGVyIFBzZXVkby4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHVuZGVyIFBzZXVkbyBlbnN1cmVzIHRoYXQgdGhlIGZpbGVzIGluIHRoZSByb290CisgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBoYXZlIGNvcnJlY3Qgb3duZXJzaGlwLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3Nkay1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+CisgICAgICAgICAgICA8dGl0bGU+U0RLIEdlbmVyYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIEJpdEJha2UgdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICAgICAgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChTREspIGluc3RhbGxlciBzY3JpcHQ6CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay1nZW5lcmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjdpbiIgLz4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbgorICAgICAgICAgICAgICAgIGdlbmVyYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEKKyAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3Nkayc+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTGlrZSBpbWFnZSBnZW5lcmF0aW9uLCB0aGUgU0RLIHNjcmlwdCBwcm9jZXNzIGNvbnNpc3RzIG9mCisgICAgICAgICAgICAgICAgc2V2ZXJhbCBzdGFnZXMgYW5kIGRlcGVuZHMgb24gbWFueSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPiB0YXNrIHVzZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBrZXkgdmFyaWFibGVzIHRvIGhlbHAgY3JlYXRlIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgaW5zdGFsbC4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlhYmxlcyBsaXN0ZWQgaW4gdGhlIGZpZ3VyZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZGV2LWVudmlyb25tZW50Jz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBTREs8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBoYW5kbGVzIHR3bworICAgICAgICAgICAgICAgIHBhcnRzOiBhIHRhcmdldCBwYXJ0IGFuZCBhIGhvc3QgcGFydC4KKyAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IHBhcnQgaXMgdGhlIHBhcnQgYnVpbHQgZm9yIHRoZSB0YXJnZXQgaGFyZHdhcmUgYW5kCisgICAgICAgICAgICAgICAgaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorICAgICAgICAgICAgICAgIFRoZSBob3N0IHBhcnQgaXMgdGhlIHBhcnQgb2YgdGhlIFNESyB0aGF0IHJ1bnMgb24gdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPbmNlIGJvdGggcGFydHMgYXJlIGNvbnN0cnVjdGVkLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT4gdGFzayBwZXJmb3JtcyBzb21lIGNsZWFudXAKKyAgICAgICAgICAgICAgICBvbiBib3RoIHBhcnRzLgorICAgICAgICAgICAgICAgIEFmdGVyIHRoZSBjbGVhbnVwLCB0aGUgdGFzayBjcmVhdGVzIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYW5kIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICBtaWdodCBiZSBuZWVkZWQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIHRhc2sgaXMgdGhlIENyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdG9vbGNoYWluIGluc3RhbGxhdGlvbiBzY3JpcHQgKDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlKSwKKyAgICAgICAgICAgICAgICB3aGljaCBpbmNsdWRlcyB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2ltYWdlcy1kZXYtZW52aXJvbm1lbnQnPgorICAgICAgICA8dGl0bGU+SW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpbWFnZXMgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGFyZSBjb21wcmVzc2VkIGZvcm1zIG9mIHRoZQorICAgICAgICAgICAgcm9vdCBmaWxlc3lzdGVtIHRoYXQgYXJlIHJlYWR5IHRvIGJvb3Qgb24gYSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPgorICAgICAgICAgICAgdGhhdCBCaXRCYWtlIG91dHB1dCwgaW4gcGFydCwgY29uc2lzdHMgb2YgaW1hZ2VzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGlzIGdvaW5nIHRvIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2ltYWdlcy5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1LjVpbiIgZGVwdGg9IjUuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGV4YW1wbGUgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMsCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPiIgY2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW1hZ2VzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGluc2lkZSB0aGUgPGZpbGVuYW1lPnRtcC9kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvbGRlciBhcyBzaG93biBpbiB0aGUgZmlndXJlLgorICAgICAgICAgICAgVGhpcyBmb2xkZXIgY29udGFpbnMgYW55IGZpbGVzIGV4cGVjdGVkIHRvIGJlIGxvYWRlZCBvbiB0aGUKKyAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LAorICAgICAgICAgICAgd2hpbGUgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgaW1hZ2VzIGZvcgorICAgICAgICAgICAgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLWltYWdlPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgQSBrZXJuZWwgYmluYXJ5IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX0lNQUdFVFlQRSc+PGZpbGVuYW1lPktFUk5FTF9JTUFHRVRZUEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSBuYW1pbmcgc2NoZW1lIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAga2VybmVsIGltYWdlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGF0IHZhcmlhYmxlLCB0aGUgZmlsZSBjb3VsZCBiZWdpbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgdmFyaWV0eSBvZiBuYW1pbmcgc3RyaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgaW1hZ2UgZmlsZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnJvb3QtZmlsZXN5c3RlbS1pbWFnZTwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFJvb3QgZmlsZXN5c3RlbXMgZm9yIHRoZSB0YXJnZXQgZGV2aWNlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLmV4dDM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+Ki5iejI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlcykuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0dGluZyBkZXRlcm1pbmVzIHRoZSByb290IGZpbGVzeXN0ZW0gaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcm9vdCBmaWxlc3lzdGVtcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48cmVwbGFjZWFibGU+a2VybmVsLW1vZHVsZXM8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUYXJiYWxscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBtb2R1bGVzIGJ1aWx0IGZvciB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgICAgICBLZXJuZWwgbW9kdWxlIHRhcmJhbGxzIGV4aXN0IGZvciBsZWdhY3kgcHVycG9zZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxmaWxlbmFtZT5NT0RVTEVfVEFSQkFMTF9ERVBMT1k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRlcGxveS9pbWFnZXMvPHJlcGxhY2VhYmxlPm1hY2hpbmU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBjYW4gY29udGFpbiBtdWx0aXBsZSBrZXJuZWwgbW9kdWxlIHRhcmJhbGxzCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgbWFjaGluZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxyZXBsYWNlYWJsZT5ib290bG9hZGVyczwvcmVwbGFjZWFibGU+PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXJzIHN1cHBvcnRpbmcgdGhlIGltYWdlLCBpZiBhcHBsaWNhYmxlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gbXVsdGlwbGUgYm9vdGxvYWRlcnMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnN5bWxpbmtzPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kZXBsb3kvaW1hZ2VzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb2xkZXIgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgYSBzeW1ib2xpYyBsaW5rIHRoYXQgcG9pbnRzIHRvIHRoZSBtb3N0IHJlY2VudGx5IGJ1aWx0IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2ggbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgbGlua3MgbWlnaHQgYmUgdXNlZnVsIGZvciBleHRlcm5hbCBzY3JpcHRzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBvYnRhaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzZGstZGV2LWVudmlyb25tZW50Jz4KKyAgICAgICAgPHRpdGxlPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2dlbmVyYWwteW9jdG8tZW52aXJvbm1lbnQtZmlndXJlJz5nZW5lcmFsIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZmlndXJlPC9saW5rPiwKKyAgICAgICAgICAgIHRoZSBvdXRwdXQgbGFiZWxlZCAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLIiByZXByZXNlbnRzIGFuCisgICAgICAgICAgICBTREsuCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gaXMgZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoaXMgb3V0cHV0OgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3Nkay5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzcGVjaWZpYyBmb3JtIG9mIHRoaXMgb3V0cHV0IGlzIGEgc2VsZi1leHRyYWN0aW5nCisgICAgICAgICAgICBTREsgaW5zdGFsbGVyICg8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+KSB0aGF0LCB3aGVuIHJ1biwKKyAgICAgICAgICAgIGluc3RhbGxzIHRoZSBTREssIHdoaWNoIGNvbnNpc3RzIG9mIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIHRvb2xjaGFpbiwgYSBzZXQgb2YgbGlicmFyaWVzIGFuZCBoZWFkZXJzLCBhbmQgYW4gU0RLCisgICAgICAgICAgICBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICBSdW5uaW5nIHRoaXMgaW5zdGFsbGVyIGVzc2VudGlhbGx5IHNldHMgdXAgeW91cgorICAgICAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSBjcm9zcy10b29sY2hhaW4gYXMgdGhlICJob3N0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIGl0IHJ1bnMgb24gdGhlIFNESyBtYWNoaW5lLgorICAgICAgICAgICAgWW91IGNhbiB0aGluayBvZiB0aGUgbGlicmFyaWVzIGFuZCBoZWFkZXJzIGFzIHRoZSAidGFyZ2V0IgorICAgICAgICAgICAgcGFydCBiZWNhdXNlIHRoZXkgYXJlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgVGhlIHNldHVwIHNjcmlwdCBpcyBhZGRlZCBzbyB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgICAgIGVudmlyb25tZW50IGJlZm9yZSB1c2luZyB0aGUgdG9vbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHN1cHBvcnRzIHNldmVyYWwgbWV0aG9kcyBieSB3aGljaCB5b3UgY2FuCisgICAgICAgICAgICAgICAgc2V0IHVwIHRoaXMgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBpbmNsdWRlIGRvd25sb2FkaW5nIHByZS1idWlsdCBTREsgaW5zdGFsbGVycywKKyAgICAgICAgICAgICAgICBidWlsZGluZyBhbmQgaW5zdGFsbGluZyB5b3VyIG93biBTREsgaW5zdGFsbGVyLCBvciBydW5uaW5nCisgICAgICAgICAgICAgICAgYW4gQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBpbnN0YWxsZXIgdG8KKyAgICAgICAgICAgICAgICBpbnN0YWxsIG5vdCBqdXN0IGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBidXQgYWxzbyBhZGRpdGlvbmFsIHRvb2xzIHRvIGhlbHAgaW4gdGhpcyB0eXBlIG9mCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgYSBjcm9zcy1kZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3RlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgT25jZSBidWlsdCwgdGhlIFNESyBpbnN0YWxsZXJzIGFyZSB3cml0dGVuIG91dCB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kZXBsb3kvc2RrPC9maWxlbmFtZT4gZm9sZGVyIGluc2lkZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFzIHNob3duIGluIHRoZSBmaWd1cmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24uCisgICAgICAgICAgICBTZXZlcmFsIHZhcmlhYmxlcyBleGlzdCB0aGF0IGhlbHAgY29uZmlndXJlIHRoZXNlIGZpbGVzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIDxmaWxlbmFtZT5kZXBsb3k8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xzIGFyZSBydW4gdG8KKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlIHBhY2thZ2VzIGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNES0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+U0RLSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHRoZSBmZWF0dXJlcyB0byBpbmNsdWRlIGluIHRoZSAidGFyZ2V0IiBwYXJ0CisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9IT1NUX1RBU0s8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgIExpc3RzIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaG9zdAorICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBTREsgKGkuZS4gdGhlIHBhcnQgdGhhdCBydW5zIG9uCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayA8cmVwbGFjZWFibGU+aW1hZ2VuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBjcmVhdGUgdGhlIFNESywgYSBzZXQgb2YgZGVmYXVsdCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhcHBseS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGFkZCBtb3JlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9UQVJHRVRfVEFTSyc+PGZpbGVuYW1lPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSB0YXJnZXQgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU0RLIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGhhcmR3YXJlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgZGVmYXVsdCBTREsgaW5zdGFsbGF0aW9uIHBhdGggb2ZmZXJlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYiBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1hdXRvdG9vbHMvaGVsbG9fMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmIwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tYXV0b3Rvb2xzL2hlbGxvXzIuMy5iYgpAQCAtMCwwICsxLDggQEAKK0RFU0NSSVBUSU9OID0gIkdOVSBIZWxsb3dvcmxkIGFwcGxpY2F0aW9uIgorU0VDVElPTiA9ICJleGFtcGxlcyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZGVmZGEzMDkwNTIyMzVhYTVkMWU5OWNlNzU1NzAxMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2hlbGxvL2hlbGxvLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvZmlsZXMvaGVsbG93b3JsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzE2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvaGVsbG8tc2luZ2xlL2ZpbGVzL2hlbGxvd29ybGQuYwpAQCAtMCwwICsxLDggQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbih2b2lkKQoreworCXByaW50ZigiSGVsbG8gd29ybGQhXG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2V4YW1wbGVzL2hlbGxvLXNpbmdsZS9oZWxsby5iYiBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvaGVsbG8uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxMjc0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9oZWxsby1zaW5nbGUvaGVsbG8uYmIKQEAgLTAsMCArMSwxNyBAQAorREVTQ1JJUFRJT04gPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24iCitTRUNUSU9OID0gImV4YW1wbGVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gaGVsbG93b3JsZC5jIC1vIGhlbGxvd29ybGQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYiBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9saWJ4cG0vbGlieHBtXzMuNS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGQ0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZXhhbXBsZXMvbGlieHBtL2xpYnhwbV8zLjUuNi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworREVTQ1JJUFRJT04gPSAiWDExIFBpeG1hcCBsaWJyYXJ5IgorTElDRU5TRSA9ICJYLUJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlMDc3NjNkMTY5NjNjM2FmMTJkYjI3MWEzMWFiYWE1IgorREVQRU5EUyArPSAibGlieGV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2V4YW1wbGVzL210ZC1tYWtlZmlsZS9tdGQtdXRpbHNfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwNWE0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9leGFtcGxlcy9tdGQtbWFrZWZpbGUvbXRkLXV0aWxzXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK0RFU0NSSVBUSU9OID0gIlRvb2xzIGZvciBtYW5hZ2luZyBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiemxpYiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZnJhZGVhZC5vcmcvcHViL210ZC11dGlscy9tdGQtdXRpbHMtJHtQVn0udGFyLmd6IgorCitDRkxBR1NfcHJlcGVuZCA9ICItSSAke1N9L2luY2x1ZGUgIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZhcS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3ZDQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9mYXEueG1sCkBAIC0wLDAgKzEsODE3IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nZmFxJz4KKzx0aXRsZT5GQVE8L3RpdGxlPgorPHFhbmRhc2V0PgorICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyBQb2t5IGRpZmZlciBmcm9tIDx1bGluayB1cmw9JyZPRV9IT01FX1VSTDsnPk9wZW5FbWJlZGRlZDwvdWxpbms+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRlcm0gIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPlBva3k8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICByZWZlcnMgdG8gdGhlIHNwZWNpZmljIHJlZmVyZW5jZSBidWlsZCBzeXN0ZW0gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IHByb3ZpZGVzLgorICAgICAgICAgICAgICAgIFBva3kgaXMgYmFzZWQgb24gPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+CisgICAgICAgICAgICAgICAgYW5kIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRodXMsIHRoZSBnZW5lcmljIHRlcm0gdXNlZCBoZXJlIGZvciB0aGUgYnVpbGQgc3lzdGVtIGlzCisgICAgICAgICAgICAgICAgdGhlICJPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgICAgICBEZXZlbG9wbWVudCBpbiB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBQb2t5IGlzIGNsb3NlbHkgdGllZCB0byBPcGVuRW1iZWRkZWQsIHdpdGgKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIGFsd2F5cyBiZWluZyBtZXJnZWQgdG8gT0UtQ29yZSBvciBCaXRCYWtlIGZpcnN0IGJlZm9yZSBiZWluZyBwdWxsZWQgYmFjaworICAgICAgICAgICAgICAgIGludG8gUG9reS4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGJlbmVmaXRzIGJvdGggcHJvamVjdHMgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYSBpZD0nZmFxLW5vdC1tZWV0aW5nLXJlcXVpcmVtZW50cyc+CisgICAgICAgICAgICAgICAgTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgdGhlCisgICAgICAgICAgICAgICAgcmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgSW4gcGFydGljdWxhciwgSSBkbyBub3QgaGF2ZSBQeXRob24gMi43LjMgb3IgZ3JlYXRlciwgb3IKKyAgICAgICAgICAgICAgICBJIGRvIGhhdmUgUHl0aG9uIDMueCwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IG5vdCBzdXBwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICBDYW4gSSBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3Q/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGUgcmVxdWlyZWQgdG9vbHMgb24geW91ciBob3N0IGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgc3lzdGVtIGEgY291cGxlIGRpZmZlcmVudCB3YXlzIChpLmUuIGJ1aWxkaW5nIGEgdGFyYmFsbCBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkaW5nIGEgdGFyYmFsbCkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBzdGVwcyBvbiBob3cgdG8gdXBkYXRlIHlvdXIgYnVpbGQgdG9vbHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgY2FuIHlvdSBjbGFpbSBQb2t5IC8gT3BlbkVtYmVkZGVkLUNvcmUgaXMgc3RhYmxlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGFyZWFzIHRoYXQgaGVscCB3aXRoIHN0YWJpbGl0eTsKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFlvY3RvIFByb2plY3QgdGVhbSBrZWVwcworICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjb2UtY29yZSc+T0UtQ29yZTwvdWxpbms+IHNtYWxsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZm9jdXNlZCwgY29udGFpbmluZyBhcm91bmQgODMwIHJlY2lwZXMgYXMgb3Bwb3NlZCB0byB0aGUgdGhvdXNhbmRzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgaW4gb3RoZXIgT3BlbkVtYmVkZGVkIGNvbW11bml0eSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBLZWVwaW5nIGl0IHNtYWxsIG1ha2VzIGl0IGVhc3kgdG8gdGVzdCBhbmQgbWFpbnRhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHJ1bnMgbWFudWFsIGFuZCBhdXRvbWF0ZWQgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGEgc21hbGwsIGZpeGVkIHNldCBvZiByZWZlcmVuY2UgaGFyZHdhcmUgYXMgd2VsbCBhcyBlbXVsYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYW4gYXV0b2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBwcm92aWRlcyBjb250aW51b3VzIGJ1aWxkIGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhvdyBkbyBJIGdldCBzdXBwb3J0IGZvciBteSBib2FyZCBhZGRlZCB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIGFuIGFkZGl0aW9uYWwgYm9hcmQgaXMgYWRkZWQgYnkgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBsYXllciBmb3IgaXQuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhIEJTUCBsYXllciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kIENyZWF0aW5nIExheWVyczwvdWxpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFVzdWFsbHksIGlmIHRoZSBib2FyZCBpcyBub3QgY29tcGxldGVseSBleG90aWMsIGFkZGluZyBzdXBwb3J0IGluCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFyZSB0aGVyZSBhbnkgcHJvZHVjdHMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc29mdHdhcmUgcnVubmluZyBvbiB0aGUgPHVsaW5rIHVybD0naHR0cDovL3Zlcm5pZXIuY29tL2xhYnF1ZXN0Lyc+VmVybmllciBMYWJRdWVzdDwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgU2VlIHRoZSA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZlcm5pZXIuY29tL3Byb2R1Y3RzL2ludGVyZmFjZXMvbGFicS8nPlZlcm5pZXIgTGFiUXVlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgIHdlYnNpdGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHByZS1wcm9kdWN0aW9uIGRldmljZXMgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICBhbmQgdGhlIFlvY3RvIFByb2plY3QgdGVhbQorICAgICAgICAgICAgICAgIGFubm91bmNlcyB0aGVtIGFzIHNvb24gYXMgdGhleSBhcmUgcmVsZWFzZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvZHVjZSBhcyBvdXRwdXQ/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBjYW4gdXNlIHRoZSBzYW1lIHNldCBvZiByZWNpcGVzIHRvIGNyZWF0ZSBvdXRwdXQgb2YKKyAgICAgICAgICAgICAgICB2YXJpb3VzIGZvcm1hdHMsIHRoZSBvdXRwdXQgb2YgYW4gT3BlbkVtYmVkZGVkIGJ1aWxkIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICBob3cgeW91IHN0YXJ0IGl0LgorICAgICAgICAgICAgICAgIFVzdWFsbHksIHRoZSBvdXRwdXQgaXMgYSBmbGFzaGFibGUgaW1hZ2UgcmVhZHkgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBkZXZpY2UuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBhZGQgbXkgcGFja2FnZSB0byB0aGUgWW9jdG8gUHJvamVjdD8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGFkZCBhIHBhY2thZ2UsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIEJpdEJha2UgcmVjaXBlLgorICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGEgQml0QmFrZSByZWNpcGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbmV3LXJlY2lwZS13cml0aW5nLWEtbmV3LXJlY2lwZSc+V3JpdGluZyBhIE5ldyBSZWNpcGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBEbyBJIGhhdmUgdG8gcmVmbGFzaCBteSBlbnRpcmUgYm9hcmQgd2l0aCBhIG5ldyBZb2N0byBQcm9qZWN0IGltYWdlIHdoZW4gcmVjb21waWxpbmcKKyAgICAgICAgICAgICAgICBhIHBhY2thZ2U/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gYnVpbGQgcGFja2FnZXMgaW4gdmFyaW91cworICAgICAgICAgICAgICAgIGZvcm1hdHMgc3VjaCBhcyBJUEsgZm9yIE9QS0csIERlYmlhbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4pLCBvciBSUE0uCisgICAgICAgICAgICAgICAgWW91IGNhbiB0aGVuIHVwZ3JhZGUgdGhlIHBhY2thZ2VzIHVzaW5nIHRoZSBwYWNrYWdlIHRvb2xzIG9uCisgICAgICAgICAgICAgICAgdGhlIGRldmljZSwgbXVjaCBsaWtlIG9uIGEgZGVza3RvcCBkaXN0cmlidXRpb24gc3VjaCBhcworICAgICAgICAgICAgICAgIFVidW50dSBvciBGZWRvcmEuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgcGFja2FnZSBtYW5hZ2VtZW50IG9uIHRoZSB0YXJnZXQgaXMgZW50aXJlbHkgb3B0aW9uYWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSB0aGUgZXJyb3IgJzxmaWxlbmFtZT5jaG1vZDogWFhYWFggbmV3IHBlcm1pc3Npb25zIGFyZSByLXhyd3hyd3gsIG5vdCByLXhyLXhyLXg8L2ZpbGVuYW1lPicuCisgICAgICAgICAgICAgICAgV2hhdCBpcyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvYmFibHkgcnVubmluZyB0aGUgYnVpbGQgb24gYW4gTlRGUyBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+ZXh0MjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZXh0MzwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGluc3RlYWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPCEtLSAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgbWFrZSB0aGUgWW9jdG8gUHJvamVjdCB3b3JrIGluIFJIRUwvQ2VudE9TPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IHdvcmtpbmcgdW5kZXIgUkhFTC9DZW50T1MgNS4xIHlvdSBuZWVkIHRvIGZpcnN0CisgICAgICAgICAgICAgICAgaW5zdGFsbCBzb21lIHJlcXVpcmVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBDZW50T1MgcGFja2FnZXMgbmVlZGVkIGFyZToKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+IkRldmVsb3BtZW50IHRvb2xzIiAoc2VsZWN0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbik8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT50ZXhpMmh0bWw8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvbXBhdC1nY2MtMzQ8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIE9uIHRvcCBvZiB0aGVzZSwgeW91IG5lZWQgdGhlIGZvbGxvd2luZyBleHRlcm5hbCBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnB5dGhvbi1zcWxpdGUyPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2RhZy53aWVlcnMuY29tL3JwbS9wYWNrYWdlcy9weXRob24tc3FsaXRlMi8nPkRBRyByZXBvc2l0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmhlbHAybWFuPC9maWxlbmFtZT4gZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NlbnRvcy5rYXJhbi5vcmcvZWw0L2V4dHJhcy9zdGFibGUveDg2XzY0L1JQTVMvcmVwb2RhdGEvcmVwb3ZpZXcvaGVscDJtYW4tMC0xLjMzLjEtMi5odG1sJz5LYXJhbiByZXBvc2l0b3J5PC91bGluaz48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgT25jZSB0aGVzZSBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIGJlIGFibGUKKyAgICAgICAgICAgICAgICB0byBidWlsZCBzdGFuZGFyZCBpbWFnZXMuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIFFFTVUgZW11bGF0b3Igc2VnZmF1bHRpbmcuCisgICAgICAgICAgICAgICAgWW91IGNhbiBlaXRoZXIgZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBieSBzZXR0aW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OJz5FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9saW5rPgorICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+IHRvICIwIiBvciBieSByZW1vdmluZyB0aGUgPGZpbGVuYW1lPmxpbnV4LTIuNi1leGVjc2hpZWxkLnBhdGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBmcm9tIHRoZSBrZXJuZWwgYW5kIHJlYnVpbGRpbmcgaXQgc2luY2UgdGhhdCBpcyB0aGUgcGF0Y2ggdGhhdCBjYXVzZXMgdGhlIHByb2JsZW1zIHdpdGggUUVNVS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGluZm9ybWF0aW9uIG9uIGRpc3RyaWJ1dGlvbnMgdGhhdCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHVzZXMgZHVyaW5nIHZhbGlkYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvRGlzdHJpYnV0aW9uX1N1cHBvcnQnPkRpc3RyaWJ1dGlvbiBTdXBwb3J0PC91bGluaz4KKyAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkZvciBub3RlcyBhYm91dCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBvbiBhIFJIRUwgNC1iYXNlZAorICAgICAgICAgICAgICAgIGhvc3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fV0lLSV9VUkw7L3dpa2kvQnVpbGRpbmdPblJIRUw0Jz5CdWlsZGluZyBvbiBSSEVMNDwvdWxpbms+CisgICAgICAgICAgICAgICAgV2lraSBwYWdlLjwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PiAtLT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJIHNlZSBsb3RzIG9mIDQwNCByZXNwb25zZXMgZm9yIGZpbGVzIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiZZT0NUT19IT01FX1VSTDsvc291cmNlcy8qPC9maWxlbmFtZT4uIElzIHNvbWV0aGluZyB3cm9uZz8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIE5vdGhpbmcgaXMgd3JvbmcuCisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzIGFueSBjb25maWd1cmVkIHNvdXJjZSBtaXJyb3JzIGJlZm9yZSBkb3dubG9hZGluZworICAgICAgICAgICAgICAgIGZyb20gdGhlIHVwc3RyZWFtIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBkb2VzIHRoaXMgc2VhcmNoaW5nIGZvciBib3RoIHNvdXJjZSBhcmNoaXZlcyBhbmQKKyAgICAgICAgICAgICAgICBwcmUtY2hlY2tlZCBvdXQgdmVyc2lvbnMgb2YgU0NNLW1hbmFnZWQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgVGhlc2UgY2hlY2tzIGhlbHAgaW4gbGFyZ2UgaW5zdGFsbGF0aW9ucyBiZWNhdXNlIGl0IGNhbiByZWR1Y2UgbG9hZCBvbiB0aGUgU0NNIHNlcnZlcnMKKyAgICAgICAgICAgICAgICB0aGVtc2VsdmVzLgorICAgICAgICAgICAgICAgIFRoZSBhZGRyZXNzIGFib3ZlIGlzIG9uZSBvZiB0aGUgZGVmYXVsdCBtaXJyb3JzIGNvbmZpZ3VyZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiBhbiB1cHN0cmVhbSBzb3VyY2UgZGlzYXBwZWFycywgdGhlIHRlYW0KKyAgICAgICAgICAgICAgICBjYW4gcGxhY2Ugc291cmNlcyB0aGVyZSBzbyBidWlsZHMgY29udGludWUgdG8gd29yay4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEkgaGF2ZSBtYWNoaW5lLXNwZWNpZmljIGRhdGEgaW4gYSBwYWNrYWdlIGZvciBvbmUgbWFjaGluZSBvbmx5IGJ1dCB0aGUgcGFja2FnZSBpcworICAgICAgICAgICAgICAgIGJlaW5nIG1hcmtlZCBhcyBtYWNoaW5lLXNwZWNpZmljIGluIGFsbCBjYXNlcywgaG93IGRvIEkgcHJldmVudCB0aGlzPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgU2V0IDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJz5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2xpbms+CisgICAgICAgICAgICAgICAgPC9maWxlbmFtZT4gPSAiMCIgaW4gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGJ1dCBtYWtlIHN1cmUgdGhlIHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICBtYW51YWxseSBtYXJrZWQgYXMKKyAgICAgICAgICAgICAgICBtYWNoaW5lLXNwZWNpZmljIGZvciB0aGUgY2FzZSB0aGF0IG5lZWRzIGl0LgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIHRoYXQgaGFuZGxlcworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbgorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzczwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJJ20gYmVoaW5kIGEgZmlyZXdhbGwgYW5kIG5lZWQgdG8gdXNlIGEgcHJveHkgc2VydmVyLiBIb3cgZG8gSSBkbyB0aGF0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTW9zdCBzb3VyY2UgZmV0Y2hpbmcgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgZG9uZSBieSA8ZmlsZW5hbWU+d2dldDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIHlvdSB0aGVyZWZvcmUgbmVlZCB0byBzcGVjaWZ5IHRoZSBwcm94eSBzZXR0aW5ncyBpbiBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi53Z2V0cmM8L2ZpbGVuYW1lPiBmaWxlIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlIHNldHRpbmdzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgaHR0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgIGZ0cF9wcm94eSA9IGh0dHA6Ly9wcm94eS55b3lvZHluZS5jb206MTgwMjMvCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGFsc28gaW5jbHVkZXMgYQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaXRlLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSB0aGF0IHNob3dzIGhvdyB0bworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBDVlMgYW5kIEdpdCBwcm94eSBzZXJ2ZXJzIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoYXTigJlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGFuZCA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4qLW5hdGl2ZTwvZmlsZW5hbWU+IHRhcmdldHMgYXJlIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCBmb3IgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZXNlIGFyZSB1c3VhbGx5IHRvb2xzIHRoYXQgYXJlIG5lZWRlZCB0byBhc3Npc3QgdGhlIGJ1aWxkIGluIHNvbWUgd2F5IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sIHdoaWNoIGlzIHVzZWQgdG8gYXBwbHkgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBUaGUgbm9uLW5hdGl2ZSB2ZXJzaW9uIGlzIHRoZSBvbmUgdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSSdtIHNlZWluZyByYW5kb20gYnVpbGQgZmFpbHVyZXMuIEhlbHA/IQorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSWYgdGhlIHNhbWUgYnVpbGQgaXMgZmFpbGluZyBpbiB0b3RhbGx5IGRpZmZlcmVudCBhbmQgcmFuZG9tCisgICAgICAgICAgICAgICAgd2F5cywgdGhlIG1vc3QgbGlrZWx5IGV4cGxhbmF0aW9uIGlzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgaGFyZHdhcmUgeW91IGFyZSBydW5uaW5nIHRoZSBidWlsZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIHNvbWUgcHJvYmxlbS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBhcmUgcnVubmluZyB0aGUgYnVpbGQgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxpemF0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSB2aXJ0dWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgaGFzIGJ1Z3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvY2Vzc2VzIGEgbWFzc2l2ZSBhbW91bnQgb2YKKyAgICAgICAgICAgICAgICBkYXRhIHRoYXQgY2F1c2VzIGxvdHMgb2YgbmV0d29yaywgZGlzayBhbmQgQ1BVIGFjdGl2aXR5IGFuZAorICAgICAgICAgICAgICAgIGlzIHNlbnNpdGl2ZSB0byBldmVuIHNpbmdsZS1iaXQgZmFpbHVyZXMgaW4gYW55IG9mIHRoZXNlIGFyZWFzLgorICAgICAgICAgICAgICAgIFRydWUgcmFuZG9tIGZhaWx1cmVzIGhhdmUgYWx3YXlzIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGFyZHdhcmUKKyAgICAgICAgICAgICAgICBvciB2aXJ0dWFsaXphdGlvbiBpc3N1ZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIEkgdHJ5IHRvIGJ1aWxkIGEgbmF0aXZlIHJlY2lwZSwgdGhlIGJ1aWxkIGZhaWxzIHdpdGggPGZpbGVuYW1lPmljb252Lmg8L2ZpbGVuYW1lPiBwcm9ibGVtcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIElmIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IGluZGljYXRlcyBHTlUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliaWNvbnY8L2ZpbGVuYW1lPiBpcyBub3QgaW4gdXNlIGJ1dAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4gaGFzIGJlZW4gaW5jbHVkZWQgZnJvbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJpY29udjwvZmlsZW5hbWU+LCB5b3UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYKKyAgICAgICAgICAgICAgICB5b3UgaGF2ZSBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlCisgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPi91c3IvbG9jYWwvaW5jbHVkZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgI2Vycm9yIEdOVSBsaWJpY29udiBub3QgaW4gdXNlIGJ1dCBpbmNsdWRlZCBpY29udi5oIGlzIGZyb20gbGliaWNvbnYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSWYgeW91IGZpbmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBmaWxlLCB5b3Ugc2hvdWxkIGVpdGhlcgorICAgICAgICAgICAgICAgIHVuaW5zdGFsbCBpdCBvciB0ZW1wb3JhcmlseSByZW5hbWUgaXQgYW5kIHRyeSB0aGUgYnVpbGQgYWdhaW4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgaXNzdWUgaXMganVzdCBhIHNpbmdsZSBtYW5pZmVzdGF0aW9uIG9mICJzeXN0ZW0KKyAgICAgICAgICAgICAgICBsZWFrYWdlIiBpc3N1ZXMgY2F1c2VkIHdoZW4gdGhlIE9wZW5FYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGZpbmRzIGFuZCB1c2VzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGZpbGVzIGR1cmluZyBhIG5hdGl2ZQorICAgICAgICAgICAgICAgIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoaXMgdHlwZSBvZiBpc3N1ZSBtaWdodCBub3QgYmUgbGltaXRlZCB0bworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY29udi5oPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQmUgc3VyZSB0aGF0IGxlYWthZ2UgY2Fubm90IG9jY3VyIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9sb2NhbC9pbmNsdWRlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9vcHQ8L2ZpbGVuYW1lPiBsb2NhdGlvbnMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGF0IGRvIHdlIG5lZWQgdG8gc2hpcCBmb3IgbGljZW5zZSBjb21wbGlhbmNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRpZmZpY3VsdCBxdWVzdGlvbiBhbmQgeW91IG5lZWQgdG8gY29uc3VsdCB5b3VyIGxhd3llcgorICAgICAgICAgICAgICAgIGZvciB0aGUgYW5zd2VyIGZvciB5b3VyIHNwZWNpZmljIGNhc2UuCisgICAgICAgICAgICAgICAgSXQgaXMgd29ydGggYmVhcmluZyBpbiBtaW5kIHRoYXQgZm9yIEdQTCBjb21wbGlhbmNlLCB0aGVyZSBuZWVkcworICAgICAgICAgICAgICAgIHRvIGJlIGVub3VnaCBpbmZvcm1hdGlvbiBzaGlwcGVkIHRvIGFsbG93IHNvbWVvbmUgZWxzZSB0bworICAgICAgICAgICAgICAgIHJlYnVpbGQgYW5kIHByb2R1Y2UgdGhlIHNhbWUgZW5kIHJlc3VsdCB5b3UgYXJlIHNoaXBwaW5nLgorICAgICAgICAgICAgICAgIFRoaXMgbWVhbnMgc2hhcmluZyB0aGUgc291cmNlIGNvZGUsIGFueSBwYXRjaGVzIGFwcGxpZWQgdG8gaXQsCisgICAgICAgICAgICAgICAgYW5kIGFsc28gYW55IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoYXQgcGFja2FnZQorICAgICAgICAgICAgICAgIHdhcyBjb25maWd1cmVkIGFuZCBidWlsdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gbGljZW5zaW5nIGluIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsaWNlbnNpbmcnPkxpY2Vuc2luZzwvdWxpbms+IgorICAgICAgICAgICAgICAgIGFuZCAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9ucywgYm90aCBvZiB3aGljaCBhcmUgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBNYW51YWwuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBkaXNhYmxlIHRoZSBjdXJzb3Igb24gbXkgdG91Y2hzY3JlZW4gZGV2aWNlPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY3JlYXRlIGEgZm9ybSBmYWN0b3IgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgU2V0IHRoZSA8ZmlsZW5hbWU+SEFWRV9UT1VDSFNDUkVFTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgb25lIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBIQVZFX1RPVUNIU0NSRUVOPTEKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSBtYWtlIHN1cmUgY29ubmVjdGVkIG5ldHdvcmsgaW50ZXJmYWNlcyBhcmUgYnJvdWdodCB1cCBieSBkZWZhdWx0PworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaW50ZXJmYWNlcyBmaWxlIHByb3ZpZGVkIGJ5IHRoZSBuZXRiYXNlIHJlY2lwZSBkb2VzIG5vdAorICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnJpbmcgdXAgbmV0d29yayBpbnRlcmZhY2VzLgorICAgICAgICAgICAgICAgIFRoZXJlZm9yZSwgeW91IHdpbGwgbmVlZCB0byBhZGQgYSBCU1Atc3BlY2lmaWMgbmV0YmFzZSB0aGF0IGluY2x1ZGVzIGFuIGludGVyZmFjZXMKKyAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7I2JzcC1maWxlbGF5b3V0LW1pc2MtcmVjaXBlcyc+TWlzY2VsbGFuZW91cyBCU1AtU3BlY2lmaWMgUmVjaXBlIEZpbGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1ApCisgICAgICAgICAgICAgICAgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIHRoZXNlIHR5cGVzIG9mCisgICAgICAgICAgICAgICAgbWlzY2VsbGFuZW91cyByZWNpcGUgZmlsZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWRkIHRoZSBmb2xsb3dpbmcgZmlsZXMgdG8geW91ciBsYXllcjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2UvTUFDSElORS9pbnRlcmZhY2VzCisgICAgIG1ldGEtTUFDSElORS9yZWNpcGVzLWJzcC9uZXRiYXNlL25ldGJhc2VfNS4wLmJiYXBwZW5kCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSG93IGRvIEkgY3JlYXRlIGltYWdlcyB3aXRoIG1vcmUgZnJlZSBzcGFjZT8KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9xdWVzdGlvbj4KKyAgICAgICAgPGFuc3dlcj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgaW1hZ2VzCisgICAgICAgICAgICAgICAgdGhhdCBhcmUgMS4zIHRpbWVzIHRoZSBzaXplIG9mIHRoZSBwb3B1bGF0ZWQgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIFRvIGFmZmVjdCB0aGUgaW1hZ2Ugc2l6ZSwgeW91IG5lZWQgdG8gc2V0IHZhcmlvdXMKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uczoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkltYWdlIFNpemU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPjxmaWxlbmFtZT5JTUFHRV9ST09URlNfU0laRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZGVmaW5lIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpbiBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGRldGVybWluZXMgdGhlIHNpemUgYnkgdGFraW5nIGludG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgdGhlIGluaXRpYWwgcm9vdCBmaWxlc3lzdGVtIHNpemUgYmVmb3JlIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9ucyBzdWNoIGFzIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgaW1hZ2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgcmVxdWVzdGVkIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3ZlcmhlYWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9PVkVSSEVBRF9GQUNUT1InPjxmaWxlbmFtZT5JTUFHRV9PVkVSSEVBRF9GQUNUT1I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGRlZmluZSB0aGUgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSwgd2hpY2ggaXMgMS4zIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFkZGl0aW9uYWwgRnJlZSBTcGFjZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSc+PGZpbGVuYW1lPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gYWRkIGFkZGl0aW9uYWwgZnJlZSBzcGFjZSB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGFkZHMgdGhpcyBzcGFjZSB0byB0aGUgaW1hZ2UgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGRldGVybWluZXMgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX1NJWkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2h5IGRvbid0IHlvdSBzdXBwb3J0IGRpcmVjdG9yaWVzIHdpdGggc3BhY2VzIGluIHRoZSBwYXRobmFtZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyB0cmllZCB0byBkbyB0aGlzIGJlZm9yZSBidXQgdG9vCisgICAgICAgICAgICAgICAgbWFueSBvZiB0aGUgdG9vbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZGVwZW5kcyBvbiwKKyAgICAgICAgICAgICAgICBzdWNoIGFzIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+LCBicmVhayB3aGVuIHRoZXkgZmluZAorICAgICAgICAgICAgICAgIHNwYWNlcyBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICAgICAgVW50aWwgdGhhdCBzaXR1YXRpb24gY2hhbmdlcywgdGhlIHRlYW0gd2lsbCBub3Qgc3VwcG9ydCBzcGFjZXMKKyAgICAgICAgICAgICAgICBpbiBwYXRobmFtZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIb3cgZG8gSSB1c2UgYW4gZXh0ZXJuYWwgdG9vbGNoYWluPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIGlzIHZlcnkgZmxleGlibGUgYW5kIGN1c3RvbWl6YWJsZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBwcmltYXJpbHkgY29udHJvbGxlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENNT0RFJz5UQ01PREU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHdoaWNoIDxmaWxlbmFtZT50Y21vZGUtKi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUgdG8gaW5jbHVkZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluCisgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gaXMgImRlZmF1bHQiLAorICAgICAgICAgICAgICAgIHdoaWNoIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHVzZSBpdHMgaW50ZXJuYWxseQorICAgICAgICAgICAgICAgIGJ1aWx0IHRvb2xjaGFpbiAoaS5lLiA8ZmlsZW5hbWU+dGNtb2RlLWRlZmF1bHQuaW5jPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIG90aGVyIHBhdHRlcm5zIGFyZSBhY2NlcHRlZC4KKyAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCAiZXh0ZXJuYWwtKiIgcmVmZXJzIHRvIGV4dGVybmFsIHRvb2xjaGFpbnMuCisgICAgICAgICAgICAgICAgT25lIGV4YW1wbGUgaXMgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgICAgICAgICAgVGhlIHN1cHBvcnQgZm9yIHRoaXMgdG9vbGNoYWluIHJlc2lkZXMgaW4gdGhlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllciBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXRodWIuY29tL01lbnRvckVtYmVkZGVkL21ldGEtc291cmNlcnkvJz48L3VsaW5rPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uLCB5b3UgYWxzbyBuZWVkIGEKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvb2xjaGFpbiByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBmaWxlIG5lZWRzIHRvIHBhY2thZ2UgdXAgYW55IHByZS1idWlsdCBvYmplY3RzIGluCisgICAgICAgICAgICAgICAgdGhlIHRvb2xjaGFpbiBzdWNoIGFzIDxmaWxlbmFtZT5saWJnY2M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlic3RkY2MrKzwvZmlsZW5hbWU+LCBhbnkgbG9jYWxlcywgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhIGlkPSdob3ctZG9lcy10aGUteW9jdG8tcHJvamVjdC1vYnRhaW4tc291cmNlLWNvZGUtYW5kLXdpbGwtaXQtd29yay1iZWhpbmQtbXktZmlyZXdhbGwtb3ItcHJveHktc2VydmVyJz4KKyAgICAgICAgICAgICAgICBIb3cgZG9lcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBvYnRhaW4gc291cmNlIGNvZGUgYW5kCisgICAgICAgICAgICAgICAgd2lsbCBpdCB3b3JrIGJlaGluZCBteSBmaXJld2FsbCBvciBwcm94eSBzZXJ2ZXI/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgd2F5IHRoZSBidWlsZCBzeXN0ZW0gb2J0YWlucyBzb3VyY2UgY29kZSBpcyBoaWdobHkKKyAgICAgICAgICAgICAgICBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgWW91IGNhbiBzZXR1cCB0aGUgYnVpbGQgc3lzdGVtIHRvIGdldCBzb3VyY2UgY29kZSBpbiBtb3N0CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzIGlmIEhUVFAgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgdHJpZXMgdGhlIGxvY2FsIGRvd25sb2FkIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGF0IGxvY2F0aW9uIGZhaWxzLCBQb2t5IHRyaWVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIHRoZSB1cHN0cmVhbSBzb3VyY2UsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzc3VtaW5nIHlvdXIgZGlzdHJpYnV0aW9uIGlzICJwb2t5IiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbSB1c2VzIHRoZSBZb2N0byBQcm9qZWN0IHNvdXJjZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gYnkgZGVmYXVsdCBmb3IgU0NNLWJhc2VkCisgICAgICAgICAgICAgICAgc291cmNlcywgdXBzdHJlYW1zIGZvciBub3JtYWwgdGFyYmFsbHMsIGFuZCB0aGVuIGZhbGxzIGJhY2sKKyAgICAgICAgICAgICAgICB0byBhIG51bWJlciBvZiBvdGhlciBtaXJyb3JzIGluY2x1ZGluZyB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHNvdXJjZSBtaXJyb3IgaWYgdGhvc2UgZmFpbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHlvdSBjb3VsZCBhZGQgYSBzcGVjaWZpYyBzZXJ2ZXIgZm9yIHRoZQorICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZyBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdCBHaXQsIEZUUCwKKyAgICAgICAgICAgICAgICBIVFRQLCBhbmQgSFRUUFMgcmVxdWVzdHMgYW5kIGRpcmVjdCB0aGVtIHRvIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vPC9maWxlbmFtZT4gc291cmNlcyBtaXJyb3IuCisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50IHRvCisgICAgICAgICAgICAgICAgbG9jYWwgZGlyZWN0b3JpZXMgb3IgbmV0d29yayBzaGFyZXMgYXMgd2VsbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzaWRlIGZyb20gdGhlIHByZXZpb3VzIHRlY2huaXF1ZSwgdGhlc2Ugb3B0aW9ucyBhbHNvIGV4aXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfTk9fTkVUV09SSyA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCB0ZWxscyBCaXRCYWtlIHRvIGlzc3VlIGFuIGVycm9yIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICB0cnlpbmcgdG8gYWNjZXNzIHRoZSBJbnRlcm5ldC4KKyAgICAgICAgICAgICAgICBUaGlzIHRlY2huaXF1ZSBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZW5zdXJlIGNvZGUgYnVpbGRzCisgICAgICAgICAgICAgICAgb25seSBmcm9tIGxvY2FsIHNvdXJjZXMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRkVUQ0hfUFJFTUlSUk9ST05MWSA9ICIxIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YXRlbWVudCBsaW1pdHMgdGhlIGJ1aWxkIHN5c3RlbSB0byBwdWxsaW5nIHNvdXJjZQorICAgICAgICAgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gb25seS4KKyAgICAgICAgICAgICAgICBBZ2FpbiwgdGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyBidWlsZHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFub3RoZXIgdGVjaG5pcXVlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID0gIjEiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoaXMgc3RhdGVtZW50IHRlbGxzIHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgbWlycm9yCisgICAgICAgICAgICAgICAgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgVGhpcyB0ZWNobmlxdWUgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG1pcnJvciBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgSWYgbm90LCBob3dldmVyLCB0aGUgdGVjaG5pcXVlIGNhbiBzaW1wbHkgd2FzdGUgdGltZSBkdXJpbmcKKyAgICAgICAgICAgICAgICB0aGUgYnVpbGQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGaW5hbGx5LCBjb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBhcmUgYmVoaW5kIGFuCisgICAgICAgICAgICAgICAgSFRUUC1vbmx5IGZpcmV3YWxsLgorICAgICAgICAgICAgICAgIFlvdSBjb3VsZCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBhcyBsb25nIGFzCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gc2VydmVyIGlzIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgIEJCX0ZFVENIX1BSRU1JUlJPUk9OTFkgPSAiMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyB3b3VsZCBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIGZldGNoIHNvdXJjZSBvdmVyIEhUVFAgYW5kIGFueSBuZXR3b3JrIGFjY2Vzc2VzIHRvIGFueXRoaW5nCisgICAgICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiB3b3VsZCBmYWlsLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBhbHNvIGhvbm9ycyB0aGUgc3RhbmRhcmQgc2hlbGwgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICB2YXJpYWJsZXMgPGZpbGVuYW1lPmh0dHBfcHJveHk8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZnRwX3Byb3h5PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmh0dHBzX3Byb3h5PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbGxfcHJveHk8L2ZpbGVuYW1lPiB0byByZWRpcmVjdCByZXF1ZXN0cyB0aHJvdWdoCisgICAgICAgICAgICAgICAgcHJveHkgc2VydmVycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19XSUtJX1VSTDsvd2lraS9Xb3JraW5nX0JlaGluZF9hX05ldHdvcmtfUHJveHknPldvcmtpbmcgQmVoaW5kIGEgTmV0d29yayBQcm94eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICBXaWtpIHBhZ2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworICAgIDxxYW5kYWVudHJ5PgorICAgICAgICA8cXVlc3Rpb24+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBDYW4gSSBnZXQgcmlkIG9mIGJ1aWxkIG91dHB1dCBzbyBJIGNhbiBzdGFydCBvdmVyPworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3F1ZXN0aW9uPgorICAgICAgICA8YW5zd2VyPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWWVzIC0geW91IGNhbiBlYXNpbHkgZG8gdGhpcy4KKyAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgQml0QmFrZSB0byBidWlsZCBhbiBpbWFnZSwgYWxsIHRoZSBidWlsZCBvdXRwdXQKKyAgICAgICAgICAgICAgICBnb2VzIGludG8gdGhlIGRpcmVjdG9yeSBjcmVhdGVkIHdoZW4geW91IHJ1biB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgaXMgbmFtZWQgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gYnV0IGNhbiBiZSBuYW1lZAorICAgICAgICAgICAgICAgIGFueXRoaW5nIHlvdSB3YW50LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaXRoaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSwgaXMgdGhlIDxmaWxlbmFtZT50bXA8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBUbyByZW1vdmUgYWxsIHRoZSBidWlsZCBvdXRwdXQgeWV0IHByZXNlcnZlIGFueSBzb3VyY2UgY29kZSBvcgorICAgICAgICAgICAgICAgIGRvd25sb2FkZWQgZmlsZXMgZnJvbSBwcmV2aW91cyBidWlsZHMsIHNpbXBseSByZW1vdmUgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9hbnN3ZXI+CisgICAgPC9xYW5kYWVudHJ5PgorCisgICAgPHFhbmRhZW50cnk+CisgICAgICAgIDxxdWVzdGlvbj4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoeSBkbyA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4ke2xpYmRpcn08L2ZpbGVuYW1lPiBoYXZlIHN0cmFuZ2UgdmFsdWVzIGZvciA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZXM/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBFeGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIG1pZ2h0IG5lZWQgdG8gYmUgdXNlZCBmcm9tIGEKKyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhleSB3ZXJlCisgICAgICAgICAgICAgICAgaW5pdGlhbGx5IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICBDb21wbGljYXRpbmcgdGhpcyBzaXR1YXRpb24gaXMgdGhlIGZhY3QgdGhhdCBzb21ldGltZXMgdGhlc2UKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSBleHBlY3RhdGlvbgorICAgICAgICAgICAgICAgIG9mIGJlaW5nIHJ1biBmcm9tIHRoYXQgaW5pdGlhbCBpbnN0YWxsYXRpb24gdGFyZ2V0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBtb3ZpbmcgdGhlbSBjYXVzZXMgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2NlbmFyaW8gaXMgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIGZvciBwYWNrYWdlIG1haW50YWluZXJzCisgICAgICAgICAgICAgICAgb2YgbWFpbnN0cmVhbSBMaW51eCBkaXN0cmlidXRpb25zIGFzIHdlbGwgYXMgZm9yIHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQXMgc3VjaCwgYSB3ZWxsLWVzdGFibGlzaGVkIHNvbHV0aW9uIGV4aXN0cy4KKyAgICAgICAgICAgICAgICBNYWtlZmlsZXMsIEF1dG90b29scyBjb25maWd1cmF0aW9uIHNjcmlwdHMsIGFuZCBvdGhlciBidWlsZAorICAgICAgICAgICAgICAgIHN5c3RlbXMgYXJlIGV4cGVjdGVkIHRvIHJlc3BlY3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saWJkaXI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnN5c2NvbmZkaXI8L2ZpbGVuYW1lPiB0aGF0IGluZGljYXRlIHdoZXJlCisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMsIGxpYnJhcmllcywgYW5kIGRhdGEgcmVzaWRlIHdoZW4gYSBwcm9ncmFtIGlzCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgcnVuLgorICAgICAgICAgICAgICAgIFRoZXkgYXJlIGFsc28gZXhwZWN0ZWQgdG8gcmVzcGVjdCBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICBwcmVwZW5kZWQgdG8gYWxsIHRoZSBvdGhlciB2YXJpYWJsZXMgd2hlbiB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgYWN0dWFsbHkgaW5zdGFsbHMgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBhY3R1YWxseSBydW4gZnJvbQorICAgICAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgYSByZWNpcGUgdG8gYnVpbGQgYQorICAgICAgICAgICAgICAgIHRhcmdldC1hcmNoaXRlY3R1cmUgcHJvZ3JhbSAoaS5lLiBvbmUgdGhhdCBpcyBpbnRlbmRlZCBmb3IKKyAgICAgICAgICAgICAgICBpbmNsdXNpb24gb24gdGhlIGltYWdlIGJlaW5nIGJ1aWx0KSwgdGhhdCBwcm9ncmFtIGV2ZW50dWFsbHkKKyAgICAgICAgICAgICAgICBydW5zIGZyb20gdGhlIHJvb3QgZmlsZSBzeXN0ZW0gb2YgdGhhdCBpbWFnZS4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYnVpbGQgc3lzdGVtIHByb3ZpZGVzIGEgdmFsdWUgb2YgIi91c3IvYmluIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4sIGEgdmFsdWUgb2YgIi91c3IvbGliIiBmb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliZGlyPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTWVhbndoaWxlLCA8ZmlsZW5hbWU+REVTVERJUjwvZmlsZW5hbWU+IGlzIGEgcGF0aCB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB3aGVuIHRoZSByZWNpcGUgYnVpbGRzIGEgbmF0aXZlIHByb2dyYW0gKGkuZS4gb25lCisgICAgICAgICAgICAgICAgdGhhdCBpcyBpbnRlbmRlZCB0byBydW4gb24gdGhlIGJ1aWxkIG1hY2hpbmUpLCB0aGF0IHByb2dyYW0KKyAgICAgICAgICAgICAgICBpcyBuZXZlciBpbnN0YWxsZWQgZGlyZWN0bHkgdG8gdGhlIGJ1aWxkIG1hY2hpbmUncyByb290CisgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgcGF0aHMgd2l0aGluIHRoZSBCdWlsZAorICAgICAgICAgICAgICAgIERpcmVjdG9yeSBmb3IgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluZGlyPC9maWxlbmFtZT4gYW5kIHJlbGF0ZWQgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIFRvIGJldHRlciB1bmRlcnN0YW5kIHRoaXMsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgdHdvIHBhdGhzCisgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGZpcnN0IGlzIHJlbGF0aXZlbHkgbm9ybWFsIGFuZCB0aGUgc2Vjb25kIGlzIG5vdDoKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHRoZXNlIGxlbmd0aHkgZXhhbXBsZXMsIHRoZSBwYXRocyBhcmUgYXJ0aWZpY2lhbGx5CisgICAgICAgICAgICAgICAgICAgIGJyb2tlbiBhY3Jvc3MgbGluZXMgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIC9ob21lL21heHRvdGhlbWF4L3Bva3ktYm9vdGNoYXJ0Mi9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvemxpYi8KKyAgICAgICAgMS4yLjgtcjAvc3lzcm9vdC1kZXN0ZGlyL3Vzci9iaW4KKworICAgICAvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4LworICAgICAgICB6bGliLW5hdGl2ZS8xLjIuOC1yMC9zeXNyb290LWRlc3RkaXIvaG9tZS9tYXh0b3RoZW1heC9wb2t5LWJvb3RjaGFydDIvCisgICAgICAgIGJ1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2JpbgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBFdmVuIGlmIHRoZSBwYXRocyBsb29rIHVudXN1YWwsIHRoZXkgYm90aCBhcmUgY29ycmVjdCAtCisgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGZvciBhIHRhcmdldCBhbmQgdGhlIHNlY29uZCBmb3IgYSBuYXRpdmUgcmVjaXBlLgorICAgICAgICAgICAgICAgIFRoZXNlIHBhdGhzIGFyZSBhIGNvbnNlcXVlbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4gbWVjaGFuaXNtIGFuZCB3aGlsZSB0aGV5CisgICAgICAgICAgICAgICAgYXBwZWFyIHN0cmFuZ2UsIHRoZXkgYXJlIGNvcnJlY3QgYW5kIGluIHByYWN0aWNlIHZlcnkgZWZmZWN0aXZlLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2Fuc3dlcj4KKyAgICA8L3FhbmRhZW50cnk+CisKKyAgICA8cWFuZGFlbnRyeT4KKyAgICAgICAgPHF1ZXN0aW9uPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpbGVzIHByb3ZpZGVkIGJ5IG15IDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gcmVjaXBlIGRvCisgICAgICAgICAgICAgICAgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUgdG8gb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICBGaWxlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBuYXRpdmUgc3lzcm9vdCwgbXkgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgaW5zdGFsbGluZyB0byB0aGUgd3JvbmcgcGxhY2UsIG9yIEkgYW0gZ2V0dGluZyBwZXJtaXNzaW9ucworICAgICAgICAgICAgICAgIGVycm9ycyBkdXJpbmcgdGhlIGRvX2luc3RhbGwgdGFzayBpbiBteSByZWNpcGUhIFdoYXQgaXMgd3Jvbmc/CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvcXVlc3Rpb24+CisgICAgICAgIDxhbnN3ZXI+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiByZXN1bHRzIHdoZW4gYSBidWlsZCBzeXN0ZW0gZG9lcworICAgICAgICAgICAgICAgIG5vdCByZWNvZ25pemUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdXBwbGllZCB0byBpdCBieQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFRoZSBpbmNpZGVudCB0aGF0IHByb21wdGVkIHRoaXMgRkFRIGVudHJ5IGludm9sdmVkIGEgTWFrZWZpbGUKKyAgICAgICAgICAgICAgICB0aGF0IHVzZWQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QklORElSPC9maWxlbmFtZT4gaW5zdGVhZCBvZiB0aGUgbW9yZSBzdGFuZGFyZAorICAgICAgICAgICAgICAgIHZhcmlhYmxlIDxmaWxlbmFtZT5iaW5kaXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGUgbWFrZWZpbGUncyBoYXJkY29kZWQgZGVmYXVsdCB2YWx1ZSBvZiAiL3Vzci9iaW4iIHdvcmtlZAorICAgICAgICAgICAgICAgIG1vc3Qgb2YgdGhlIHRpbWUsIGJ1dCBub3QgZm9yIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gdmFyaWFudC4KKyAgICAgICAgICAgICAgICBGb3IgYW5vdGhlciBleGFtcGxlLCBwZXJtaXNzaW9ucyBlcnJvcnMgbWlnaHQgYmUgY2F1c2VkCisgICAgICAgICAgICAgICAgYnkgYSBNYWtlZmlsZSB0aGF0IGlnbm9yZXMgPGZpbGVuYW1lPkRFU1RESVI8L2ZpbGVuYW1lPiBvciB1c2VzCisgICAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBDaGVjayB0aGUgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgaWYgdGhlc2Uga2luZHMgb2YKKyAgICAgICAgICAgICAgICBpc3N1ZXMgZXhpc3QuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvYW5zd2VyPgorICAgIDwvcWFuZGFlbnRyeT4KKworPC9xYW5kYXNldD4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYW5hbHlzaXMtZm9yLXBhY2thZ2Utc3BsaXR0aW5nLnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmMjc5NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2FuYWx5c2lzLWZvci1wYWNrYWdlLXNwbGl0dGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGhpc3Rvcnktd2ViLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmRiODZjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRoaXN0b3J5LnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1ZjhhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2J1aWxkaGlzdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvYnVpbGRpbmctYW4taW1hZ2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmYmVhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY29uZmlndXJhdGlvbi1jb21waWxlLWF1dG9yZWNvbmYucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzQ2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jb25maWd1cmF0aW9uLWNvbXBpbGUtYXV0b3JlY29uZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9jcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW5zLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzY2NzBhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjI3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9pbWFnZS1nZW5lcmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjk2MjU4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2UtZ2VuZXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvaW1hZ2VzLnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk5ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL2ltYWdlcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvbGF5ZXItaW5wdXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNGYyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9sYXllci1pbnB1dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYWNrYWdlLWZlZWRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M5YzMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGFja2FnZS1mZWVkcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcGF0Y2hpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlY2QwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wYXRjaGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9wb2t5LXRpdGxlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODkzZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvcG9reS10aXRsZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLWdlbmVyYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2UyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvZmlndXJlcy9zZGstZ2VuZXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc2RrLnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Nkay5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzOWNjNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3Nkay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWZldGNoaW5nLnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhZWZiNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1mZXRjaGluZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvc291cmNlLWlucHV0LnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1MTUwNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3NvdXJjZS1pbnB1dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMvdXNlci1jb25maWd1cmF0aW9uLnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiM2Y4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3VzZXItY29uZmlndXJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ZpZ3VyZXMveW9jdG8tZW52aXJvbm1lbnQtcmVmLnBuZyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwYzZjOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LXJlZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvaW50cm9kdWN0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjUwZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL2ludHJvZHVjdGlvbi54bWwKQEAgLTAsMCArMSw1OTEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtbWFudWFsLWludHJvJz4KKzx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorCis8c2VjdGlvbiBpZD0naW50cm8td2VsY29tZSc+CisgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBtYW51YWwgcHJvdmlkZXMgcmVmZXJlbmNlIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCByZWxlYXNlIG9mIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBpcyBhbiBvcGVuLXNvdXJjZSBjb2xsYWJvcmF0aW9uIHByb2plY3QgZm9jdXNlZCBvbiBlbWJlZGRlZCBMaW51eAorICAgICAgICBkZXZlbG9wZXJzLgorICAgICAgICBBbW9uZ3N0IG90aGVyIHRoaW5ncywgdGhlIFlvY3RvIFByb2plY3QgdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgd2hpY2gKKyAgICAgICAgaXMgYmFzZWQgb24gdGhlIFBva3kgcHJvamVjdCwgdG8gY29uc3RydWN0IGNvbXBsZXRlIExpbnV4IGltYWdlcy4KKyAgICAgICAgWW91IGNhbiBmaW5kIGNvbXBsZXRlIGludHJvZHVjdG9yeSBhbmQgZ2V0dGluZyBzdGFydGVkIGluZm9ybWF0aW9uIG9uIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgIGJ5IHJlYWRpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPi4KKyAgICAgICAgRm9yIHRhc2stYmFzZWQgaW5mb3JtYXRpb24gdXNpbmcgdGhlIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsnPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPC91bGluaz4KKyAgICAgICAgYW5kIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsnPllvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbDwvdWxpbms+LgorICAgICAgICBGb3IgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIHN0cnVjdHVyZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyc+WW9jdG8gUHJvamVjdCBCb2FyZCBTdXBwb3J0IFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIG9uIHRyYWNpbmcgYW5kIHByb2ZpbGluZyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUFJPRl9VUkw7Jz5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHdoaWNoIGlzIHRoZSB0YXNrIGV4ZWN1dGlvbiB0b29sIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlzIGJhc2VkIG9uLCBzZWUgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICBGaW5hbGx5LCB5b3UgY2FuIGFsc28gZmluZCBsb3RzIG9mIFlvY3RvIFByb2plY3QgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19IT01FX1VSTDsiPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J2ludHJvLW1hbnVhbG92ZXJ2aWV3Jz4KKyAgICA8dGl0bGU+RG9jdW1lbnRhdGlvbiBPdmVydmlldzwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgcmVmZXJlbmNlIG1hbnVhbCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd1c2luZ3Bva3knPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IGluZm9ybWF0aW9uIGFib3V0IGRlYnVnZ2luZyBpbWFnZXMgY3JlYXRlZCBpbiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nY2xvc2VyLWxvb2snPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBtb3JlIGRldGFpbGVkIGxvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3RlY2huaWNhbC1kZXRhaWxzJz5UZWNobmljYWwgRGV0YWlsczwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgZnVuZGFtZW50YWwgWW9jdG8gUHJvamVjdCBjb21wb25lbnRzIGFzIHdlbGwgYXMgYW4gZXhwbGFuYXRpb24KKyAgICAgICAgICAgICAgICBiZWhpbmQgaG93IHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgc2hhcmVkIHN0YXRlIChzc3RhdGUpIGNhY2hlIHRvIHNwZWVkIGJ1aWxkIHRpbWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbic+TWlncmF0aW5nIHRvIGEgTmV3ZXIgWW9jdG8gUHJvamVjdCBSZWxlYXNlPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyByZWxlYXNlLXNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgaGVscHMgeW91IG1vdmUgZnJvbQorICAgICAgICAgICAgICAgIG9uZSBZb2N0byBQcm9qZWN0IFJlbGVhc2UgdG8gYW5vdGhlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXN0cnVjdHVyZSc+RGlyZWN0b3J5IFN0cnVjdHVyZTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBEZXNjcmliZXMgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICBlaXRoZXIgYnkgdW5wYWNraW5nIGEgcmVsZWFzZWQgWW9jdG8gUHJvamVjdCB0YXJiYWxsIG9uIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0sCisgICAgICAgICAgICAgICAgb3IgYnkgY2xvbmluZyB0aGUgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwb2t5Jz5Qb2t5PC91bGluaz4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzJz5DbGFzc2VzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgY2xhc3NlcyB1c2VkIGluIHRoZSBZb2N0byBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MnPlRhc2tzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgdGFza3MgZGVmaW5lZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgTGlzdHMgYW5kIGRlc2NyaWJlcyBRQSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWltYWdlcyc+SW1hZ2VzPC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERlc2NyaWJlcyB0aGUgc3RhbmRhcmQgaW1hZ2VzIHRoYXQgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcyc+RmVhdHVyZXM8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgRGVzY3JpYmVzIG1lY2hhbmlzbXMgZm9yIGNyZWF0aW5nIGRpc3RyaWJ1dGlvbiwgbWFjaGluZSwgYW5kIGltYWdlCisgICAgICAgICAgICAgICAgZmVhdHVyZXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdmFyaWFibGVzLWdsb3MnPlZhcmlhYmxlcyBHbG9zc2FyeTwvbGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBQcmVzZW50cyBtb3N0IHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLCB3aGljaAorICAgICAgICAgICAgICAgIHVzZXMgQml0QmFrZS4KKyAgICAgICAgICAgICAgICBFbnRyaWVzIGRlc2NyaWJlIHRoZSBmdW5jdGlvbiBvZiB0aGUgdmFyaWFibGUgYW5kIGhvdyB0byBhcHBseSB0aGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdmFybG9jYWxpdHknPlZhcmlhYmxlIENvbnRleHQ8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgdmFyaWFibGUgbG9jYWxpdHkgb3IgY29udGV4dC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nZmFxJz5GQVE8L2xpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgYW5zd2VycyBmb3IgY29tbW9ubHkgYXNrZWQgcXVlc3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Jlc291cmNlcyc+Q29udHJpYnV0aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGd1aWRhbmNlIG9uIGhvdyB5b3UgY2FuIGNvbnRyaWJ1dGUgYmFjayB0byB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICBQcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKworPHNlY3Rpb24gaWQ9J2ludHJvLXJlcXVpcmVtZW50cyc+Cis8dGl0bGU+U3lzdGVtIFJlcXVpcmVtZW50czwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICAgIEZvciBnZW5lcmFsIFlvY3RvIFByb2plY3Qgc3lzdGVtIHJlcXVpcmVtZW50cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgICAgIFRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIGRldGFpbHMgb24gc3lzdGVtIHJlcXVpcmVtZW50cworICAgICAgICBub3QgY292ZXJlZCBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPgorICAgICAgICA8dGl0bGU+U3VwcG9ydGVkIExpbnV4IERpc3RyaWJ1dGlvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3VycmVudGx5LCB0aGUgWW9jdG8gUHJvamVjdCBpcyBzdXBwb3J0ZWQgb24gdGhlIGZvbGxvd2luZworICAgICAgICAgICAgZGlzdHJpYnV0aW9uczoKKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2VzIGFyZSB0ZXN0ZWQgYWdhaW5zdCB0aGUgc3RhYmxlIExpbnV4CisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbnMgaW4gdGhlIGZvbGxvd2luZyBsaXN0LgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBzaG91bGQgd29yayBvbiBvdGhlciBkaXN0cmlidXRpb25zIGJ1dAorICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uIGlzIG5vdCBwZXJmb3JtZWQgYWdhaW5zdCB0aGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgWW9jdG8gUHJvamVjdCBkb2VzIG5vdCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50bHkgaGFzIG5vIHBsYW5zIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgcm9sbGluZy1yZWxlYXNlcyBvciBkZXZlbG9wbWVudCBkaXN0cmlidXRpb25zIGR1ZSB0byB0aGVpcgorICAgICAgICAgICAgICAgICAgICBjb25zdGFudGx5IGNoYW5naW5nIG5hdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgV2Ugd2VsY29tZSBwYXRjaGVzIGFuZCBidWcgcmVwb3J0cywgYnV0IGtlZXAgaW4gbWluZCB0aGF0CisgICAgICAgICAgICAgICAgICAgIG91ciBwcmlvcml0eSBpcyBvbiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtcyBsaXN0ZWQgYmVsb3cuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMsIHBsZWFzZSBnbyB0bworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fQlVHWklMTEFfVVJMOyc+WW9jdG8gUHJvamVjdCBCdWd6aWxsYTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBzdWJtaXQgYSBidWcuCisgICAgICAgICAgICAgICAgICAgIFdlIGFyZSBpbnRlcmVzdGVkIGluIGhlYXJpbmcgYWJvdXQgeW91ciBleHBlcmllbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+Cis8IS0tCisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMC4wNDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5VYnVudHUgMTEuMTA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDEyLjA0IChMVFMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxMy4xMDwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VWJ1bnR1IDE0LjA0IChMVFMpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlVidW50dSAxNC4xMDwvcGFyYT48L2xpc3RpdGVtPgorPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIDE2IChWZXJuZSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmVkb3JhIDE3IChTcGhlcmljYWwpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSByZWxlYXNlIDE5IChTY2hyw7ZkaW5nZXIncyBDYXQpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZlZG9yYSByZWxlYXNlIDIwIChIZWlzZW5idWcpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5GZWRvcmEgcmVsZWFzZSAyMTwvcGFyYT48L2xpc3RpdGVtPgorPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNS42IChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNS43IChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNS44IChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2VudE9TIHJlbGVhc2UgNi4zIChGaW5hbCk8L3BhcmE+PC9saXN0aXRlbT4gLS0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNlbnRPUyByZWxlYXNlIDYueDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DZW50T1MgcmVsZWFzZSA3Lng8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNi4wIChTcXVlZXplKTwvcGFyYT48L2xpc3RpdGVtPiAtLT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGViaWFuIEdOVS9MaW51eCA3LnggKFdoZWV6eSk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RGViaWFuIEdOVS9MaW51eCA4LnggKEplc3NpZSk8L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0gICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4xIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4yIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy4zIChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy40IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy41IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRlYmlhbiBHTlUvTGludXggNy42IChXaGVlenkpPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorPCEtLSAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTEuNDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMi4xPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPm9wZW5TVVNFIDEyLjI8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+b3BlblNVU0UgMTIuMzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMy4xPC9wYXJhPjwvbGlzdGl0ZW0+IC0tPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5vcGVuU1VTRSAxMy4yPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgV2hpbGUgdGhlIFlvY3RvIFByb2plY3QgVGVhbSBhdHRlbXB0cyB0byBlbnN1cmUgYWxsIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgIHJlbGVhc2VzIGFyZSBvbmUgaHVuZHJlZCBwZXJjZW50IGNvbXBhdGlibGUgd2l0aCBlYWNoIG9mZmljaWFsbHkKKyAgICAgICAgICAgIHN1cHBvcnRlZCBMaW51eCBkaXN0cmlidXRpb24sIGluc3RhbmNlcyBtaWdodCBleGlzdCB3aGVyZSB5b3UKKyAgICAgICAgICAgIGVuY291bnRlciBhIHByb2JsZW0gd2hpbGUgdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qgb24gYSBzcGVjaWZpYworICAgICAgICAgICAgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBDZW50T1MgNi40IGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgR3RrKyAyLjIwLjAgYW5kIFB5R3RrIDIuMjEuMCAob3IgaGlnaGVyKSBwYWNrYWdlcywgd2hpY2ggYXJlCisgICAgICAgICAgICByZXF1aXJlZCB0byBydW4KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVxdWlyZWQtcGFja2FnZXMtZm9yLXRoZS1ob3N0LWRldmVsb3BtZW50LXN5c3RlbSc+CisgICAgPHRpdGxlPlJlcXVpcmVkIFBhY2thZ2VzIGZvciB0aGUgSG9zdCBEZXZlbG9wbWVudCBTeXN0ZW08L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgeW91IG5lZWQgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGNhbgorICAgICAgICAgICAgYmUgbGFyZ2Ugd2hlbiBjb3ZlcmluZyBhbGwgYnVpbGQgc2NlbmFyaW9zIHVzaW5nIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHJlcXVpcmVkIHBhY2thZ2VzIGFjY29yZGluZyB0bworICAgICAgICAgICAgTGludXggZGlzdHJpYnV0aW9uIGFuZCBmdW5jdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd1YnVudHUtcGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPlVidW50dSBhbmQgRGViaWFuPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBieSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGdpdmVuIGEgc3VwcG9ydGVkIFVidW50dSBvciBEZWJpYW4gTGludXggZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGJ1aWxkIHN5c3RlbSBoYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vc3M0LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UgaW5zdGFsbGVkLCB5b3UKKyAgICAgICAgICAgICAgICAgICAgbWlnaHQgZXhwZXJpZW5jZSBRRU1VIGJ1aWxkIGZhaWx1cmVzIGR1ZSB0byB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsaW5nIGl0cyBvd24gY3VzdG9tCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2luY2x1ZGUvbGludXgvc291bmRjYXJkLmg8L2ZpbGVuYW1lPiBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgRGViaWFuIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biBpbnRvIHRoaXMgc2l0dWF0aW9uLCBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICBzb2x1dGlvbnMgZXhpc3Q6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgYnVpbGQtZGVwIHFlbXUKKyAgICAgJCBzdWRvIGFwdC1nZXQgcmVtb3ZlIG9zczQtZGV2CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RXNzZW50aWFsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkIGFuIGltYWdlIG9uIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCAmVUJVTlRVX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdyYXBoaWNhbCBhbmQgRWNsaXBzZSBQbHVnLUluIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgcmVjb21tZW5kZWQgaWYgdGhlIGhvc3Qgc3lzdGVtIGhhcyBncmFwaGljcworICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBvciBpZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgRWNsaXBzZQorICAgICAgICAgICAgICAgICAgICAgICAgSURFOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpYnNkbDEuMi1kZXYgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBtYWtlIHhzbHRwcm9jIGRvY2Jvb2stdXRpbHMgZm9wIGRibGF0ZXggeG1sdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIGFwdC1nZXQgaW5zdGFsbCBhdXRvY29uZiBhdXRvbWFrZSBsaWJ0b29sIGxpYmdsaWIyLjAtZGV2CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZmVkb3JhLXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5GZWRvcmEgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHJlcXVpcmVkIHBhY2thZ2VzIGJ5IGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgZ2l2ZW4gYSBzdXBwb3J0ZWQgRmVkb3JhIExpbnV4IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkVzc2VudGlhbHM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCB0byBidWlsZCBhbiBpbWFnZSBmb3IgYSBoZWFkbGVzcworICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkZFRE9SQV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HcmFwaGljYWwgYW5kIEVjbGlwc2UgUGx1Zy1JbiBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHJlY29tbWVuZGVkIGlmIHRoZSBob3N0IHN5c3RlbSBoYXMgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb3IgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIFNETC1kZXZlbCB4dGVybSBwZXJsLVRocmVhZC1RdWV1ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIG91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBtYW51YWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgbWFrZSBkb2Nib29rLXN0eWxlLWRzc3NsIGRvY2Jvb2stc3R5bGUteHNsIFwKKyAgICAgZG9jYm9vay1kdGRzIGRvY2Jvb2stdXRpbHMgZm9wIGxpYnhzbHQgZGJsYXRleCB4bWx0byB4c2x0cHJvYworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFEVCBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS1hZHQtaW5zdGFsbGVyJz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIEluc3RhbGxlcjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBnbGliMi1kZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J29wZW5zdXNlLXBhY2thZ2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5vcGVuU1VTRSBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgYnkgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICBnaXZlbiBhIHN1cHBvcnRlZCBvcGVuU1VTRSBMaW51eCBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3NlbnRpYWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQgYW4gaW1hZ2UgZm9yIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsICZPUEVOU1VTRV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HcmFwaGljYWwgYW5kIEVjbGlwc2UgUGx1Zy1JbiBFeHRyYXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHJlY29tbWVuZGVkIGlmIHRoZSBob3N0IHN5c3RlbSBoYXMgZ3JhcGhpY3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb3IgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIEVjbGlwc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIElERToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsIGxpYlNETC1kZXZlbCB4dGVybQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRvY3VtZW50YXRpb246PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIG5lZWRlZCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIG91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBtYW51YWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgbWFrZSBmb3AgeHNsdHByb2MgZGJsYXRleCB4bWx0bworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkFEVCBJbnN0YWxsZXIgRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzaW5nLXRoZS1hZHQtaW5zdGFsbGVyJz5BcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIEluc3RhbGxlcjwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8genlwcGVyIGluc3RhbGwgYXV0b2NvbmYgYXV0b21ha2UgbGlidG9vbCBnbGliMi1kZXZlbAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2NlbnRvcy1wYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+Q2VudE9TIFBhY2thZ2VzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBieSBmdW5jdGlvbgorICAgICAgICAgICAgICAgIGdpdmVuIGEgc3VwcG9ydGVkIENlbnRPUyBMaW51eCBkaXN0cmlidXRpb246CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEZvciBDZW50T1MgNi54LCBzb21lIG9mIHRoZSB2ZXJzaW9ucyBvZiB0aGUgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgZGlzdHJpYnV0aW9uIGFyZSB0b28gb2xkIChlLmcuIEdpdCwgUHl0aG9uLAorICAgICAgICAgICAgICAgICAgICBhbmQgdGFyKS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaW5zdGFsbCB0aGUgYnVpbGR0b29scyBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIHZlcnNpb25zIHRoYXQgd2lsbCB3b3JrIHdpdGggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaW5zdGFsbCB0aGUgYnVpbGR0b29scyB0YXJiYWxsLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgVGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Fc3NlbnRpYWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgdG8gYnVpbGQgYW4gaW1hZ2UgZm9yIGEgaGVhZGxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsICZDRU5UT1NfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+R3JhcGhpY2FsIGFuZCBFY2xpcHNlIFBsdWctSW4gRXh0cmFzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyByZWNvbW1lbmRlZCBpZiB0aGUgaG9zdCBzeXN0ZW0gaGFzIGdyYXBoaWNzCisgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IG9yIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBFY2xpcHNlCisgICAgICAgICAgICAgICAgICAgICAgICBJREU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCBTREwtZGV2ZWwgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Eb2N1bWVudGF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyBuZWVkZWQgaWYgeW91IGFyZSBnb2luZyB0byBidWlsZCBvdXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24gbWFudWFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIG1ha2UgZG9jYm9vay1zdHlsZS1kc3NzbCBkb2Nib29rLXN0eWxlLXhzbCBcCisgICAgIGRvY2Jvb2stZHRkcyBkb2Nib29rLXV0aWxzIGZvcCBsaWJ4c2x0IGRibGF0ZXggeG1sdG8geHNsdHByb2MKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BRFQgSW5zdGFsbGVyIEV4dHJhczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgbmVlZGVkIGlmIHlvdSBhcmUgZ29pbmcgdG8gYmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyN1c2luZy10aGUtYWR0LWluc3RhbGxlcic+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCAoQURUKSBJbnN0YWxsZXI8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHl1bSBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGxpYnRvb2wgZ2xpYjItZGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPgorICAgICAgICA8dGl0bGU+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIHRoZSBidWlsZCBzeXN0ZW0sIHlvdXIgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0KKyAgICAgICAgICAgIG11c3QgbWVldCB0aGUgZm9sbG93aW5nIHZlcnNpb24gcmVxdWlyZW1lbnRzIGZvciBHaXQsIHRhciwgYW5kCisgICAgICAgICAgICBQeXRob246CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HaXQgMS43Ljggb3IgZ3JlYXRlcjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT50YXIgMS4yNCBvciBncmVhdGVyPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiAyLjcuMyBvciBncmVhdGVyIG5vdCBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgICAgICAgUHl0aG9uIDMueCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3VyIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IG1lZXQgYWxsIHRoZXNlIHJlcXVpcmVtZW50cywKKyAgICAgICAgICAgIHlvdSBjYW4gcmVzb2x2ZSB0aGlzIGJ5IGluc3RhbGxpbmcgYSA8ZmlsZW5hbWU+YnVpbGR0b29sczwvZmlsZW5hbWU+CisgICAgICAgICAgICB0YXJiYWxsIHRoYXQgY29udGFpbnMgdGhlc2UgdG9vbHMuCisgICAgICAgICAgICBZb3UgY2FuIGdldCB0aGUgdGFyYmFsbCBvbmUgb2YgdHdvIHdheXM6IGRvd25sb2FkIGEgcHJlLWJ1aWx0CisgICAgICAgICAgICB0YXJiYWxsIG9yIHVzZSBCaXRCYWtlIHRvIGJ1aWxkIHRoZSB0YXJiYWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2Rvd25sb2FkaW5nLWEtcHJlLWJ1aWx0LWJ1aWxkdG9vbHMtdGFyYmFsbCc+CisgICAgICAgICAgICA8dGl0bGU+RG93bmxvYWRpbmcgYSBQcmUtQnVpbHQgPGZpbGVuYW1lPmJ1aWxkdG9vbHM8L2ZpbGVuYW1lPiBUYXJiYWxsPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgYW5kIHJ1bm5pbmcgYSBwcmUtYnVpbHQgYnVpbGR0b29scyBpbnN0YWxsZXIgaXMKKyAgICAgICAgICAgICAgICB0aGUgZWFzaWVzdCBvZiB0aGUgdHdvIG1ldGhvZHMgYnkgd2hpY2ggeW91IGNhbiBnZXQgdGhlc2UgdG9vbHM6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdGUgYW5kIGRvd25sb2FkIHRoZSA8ZmlsZW5hbWU+Ki5zaDwvZmlsZW5hbWU+IGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRExfVVJMOy9yZWxlYXNlcy95b2N0by95b2N0by0mRElTVFJPOy9idWlsZHRvb2xzLyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0ZSB0aGUgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzaCBwb2t5LWdsaWJjLXg4Nl82NC1idWlsZHRvb2xzLXRhcmJhbGwteDg2XzY0LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIER1cmluZyBleGVjdXRpb24sIGEgcHJvbXB0IGFwcGVhcnMgdGhhdCBhbGxvd3MgeW91IHRvCisgICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGNob29zZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAvaG9tZS88cmVwbGFjZWFibGU+eW91ci11c2VybmFtZTwvcmVwbGFjZWFibGU+L2J1aWxkdG9vbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgdGhlIHRvb2xzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBieSB1c2luZyBhCisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXJfdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwLWk1ODYtcG9reS1saW51eAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgbmVlZCB0byBzdXBwbHkgeW91ciBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0byB1c2UgdGhlIHJpZ2h0IGZpbGUgKGkuZS4gaTU4NSBvciB4ODYtNjQpLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBzb3VyY2VkIHRoZSBzZXR1cCBzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbHMgYXJlIGFkZGVkIHRvIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzIGFyZSBpbml0aWFsaXplZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRzIGFyZSB3b3JraW5nIHZlcnNpb25zIHZlcnNpb25zIG9mIEdpdCwgdGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGFuZCA8ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZGluZy15b3VyLW93bi1idWlsZHRvb2xzLXRhcmJhbGwnPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIFlvdXIgT3duIDxmaWxlbmFtZT5idWlsZHRvb2xzPC9maWxlbmFtZT4gVGFyYmFsbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuZCBydW5uaW5nIHlvdXIgb3duIGJ1aWxkdG9vbHMgaW5zdGFsbGVyIGFwcGxpZXMKKyAgICAgICAgICAgICAgICBvbmx5IHdoZW4geW91IGhhdmUgYSBidWlsZCBob3N0IHRoYXQgY2FuIGFscmVhZHkgcnVuIEJpdEJha2UuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgdXNlIHRoYXQgbWFjaGluZSB0byBidWlsZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNoPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlbgorICAgICAgICAgICAgICAgIHRha2Ugc3RlcHMgdG8gdHJhbnNmZXIgYW5kIHJ1biBpdCBvbiBhCisgICAgICAgICAgICAgICAgbWFjaGluZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlIG1pbmltYWwgR2l0LCB0YXIsIGFuZCBQeXRob24KKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudHMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBzdGVwcyB0byB0YWtlIHRvIGJ1aWxkIGFuZCBydW4geW91ciBvd24KKyAgICAgICAgICAgICAgICBidWlsZHRvb2xzIGluc3RhbGxlcjoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBtYWNoaW5lIHRoYXQgaXMgYWJsZSB0byBydW4gQml0QmFrZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgeW91IGhhdmUgc2V0IHVwIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNldHVwIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgUnVuIHRoZSBCaXRCYWtlIGNvbW1hbmQgdG8gYnVpbGQgdGhlIHRhcmJhbGw6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBidWlsZHRvb2xzLXRhcmJhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIHdoZXRoZXIgeW91IGJ1aWxkIHRvb2xzIGZvciBhIDMyLWJpdAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgNjQtYml0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBidWlsZCBjb21wbGV0ZXMsIHlvdSBjYW4gZmluZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUgdGhhdCBpbnN0YWxscworICAgICAgICAgICAgICAgICAgICAgICB0aGUgdG9vbHMgaW4gdGhlIDxmaWxlbmFtZT50bXAvZGVwbG95L3NkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluc3RhbGxlciBmaWxlIGhhcyB0aGUgc3RyaW5nICJidWlsZHRvb2xzIgorICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlciB0aGUgPGZpbGVuYW1lPi5zaDwvZmlsZW5hbWU+IGZpbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdCB0byB0aGUgbWFjaGluZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIEdpdCwgdGFyLCBvciBQeXRob24gcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBtYWNoaW5lIHRoYXQgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBydW4gdGhlIDxmaWxlbmFtZT4uc2g8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgIHRvIGluc3RhbGwgdGhlIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzaCBwb2t5LWdsaWJjLXg4Nl82NC1idWlsZHRvb2xzLXRhcmJhbGwteDg2XzY0LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtJkRJU1RSTzsuc2gKKyAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgZXhlY3V0aW9uLCBhIHByb21wdCBhcHBlYXJzIHRoYXQgYWxsb3dzIHlvdSB0bworICAgICAgICAgICAgICAgICAgICAgICBjaG9vc2UgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgY291bGQgY2hvb3NlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgL2hvbWUvPHJlcGxhY2VhYmxlPnlvdXJfdXNlcm5hbWU8L3JlcGxhY2VhYmxlPi9idWlsZHRvb2xzCisgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSB0aGUgdG9vbHMgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGJ5IHVzaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAvaG9tZS88cmVwbGFjZWFibGU+eW91cl91c2VybmFtZTwvcmVwbGFjZWFibGU+L2J1aWxkdG9vbHMvZW52aXJvbm1lbnQtc2V0dXAtaTU4Ni1wb2t5LWxpbnV4CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBPZiBjb3Vyc2UsIHlvdSBuZWVkIHRvIHN1cHBseSB5b3VyIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYW5kIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBzdXJlIHRvIHVzZSB0aGUgcmlnaHQgZmlsZSAoaS5lLiBpNTg1IG9yIHg4Ni02NCkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFmdGVyIHlvdSBoYXZlIHNvdXJjZWQgdGhlIHNldHVwIHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0b29scyBhcmUgYWRkZWQgdG8gPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFueSBvdGhlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMgYXJlIGluaXRpYWxpemVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdHMgYXJlIHdvcmtpbmcgdmVyc2lvbnMgdmVyc2lvbnMgb2YgR2l0LCB0YXIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeXRob24gYW5kIDxmaWxlbmFtZT5jaHJwYXRoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0naW50cm8tZ2V0aXQnPgorICAgIDx0aXRsZT5PYnRhaW5pbmcgdGhlIFlvY3RvIFByb2plY3Q8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBkZXZlbG9wbWVudCB0ZWFtIG1ha2VzIHRoZSBZb2N0byBQcm9qZWN0IGF2YWlsYWJsZSB0aHJvdWdoIGEgbnVtYmVyCisgICAgICAgIG9mIG1ldGhvZHM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNvdXJjZSBSZXBvc2l0b3JpZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBXb3JraW5nIGZyb20gYSBjb3B5IG9mIHRoZSB1cHN0cmVhbQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBpcyB0aGUKKyAgICAgICAgICAgICAgICBwcmVmZXJyZWQgbWV0aG9kIGZvciBvYnRhaW5pbmcgYW5kIHVzaW5nIGEgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgWW91IGNhbiB2aWV3IHRoZSBZb2N0byBQcm9qZWN0IFNvdXJjZSBSZXBvc2l0b3JpZXMgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC5jZ2knPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHlvdSBjYW4gZmluZCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgYXQKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5Lyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlbGVhc2VzOjwvZW1waGFzaXM+IFN0YWJsZSwgdGVzdGVkCisgICAgICAgICAgICAgICAgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBhcyB0YXJiYWxscyB0aHJvdWdoCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RMX1VSTDsvcmVsZWFzZXMveW9jdG8vJy8+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5OaWdodGx5IEJ1aWxkczo8L2VtcGhhc2lzPiBUaGVzZQorICAgICAgICAgICAgICAgIHRhcmJhbGwgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBhdAorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19BQl9OSUdIVExZX1VSTDsnLz4uCisgICAgICAgICAgICAgICAgVGhlc2UgYnVpbGRzIGluY2x1ZGUgWW9jdG8gUHJvamVjdCByZWxlYXNlcywgbWV0YS10b29sY2hhaW4KKyAgICAgICAgICAgICAgICB0YXJiYWxsIGluc3RhbGxhdGlvbiBzY3JpcHRzLCBhbmQgZXhwZXJpbWVudGFsIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCBXZWJzaXRlOjwvZW1waGFzaXM+IFlvdSBjYW4KKyAgICAgICAgICAgICAgICBmaW5kIHRhcmJhbGwgcmVsZWFzZXMgb2YgdGhlIFlvY3RvIFByb2plY3QgYW5kIHN1cHBvcnRlZCBCU1BzCisgICAgICAgICAgICAgICAgYXQgdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgQWxvbmcgd2l0aCB0aGVzZSBkb3dubG9hZHMsIHlvdSBjYW4gZmluZCBsb3RzIG9mIG90aGVyCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYXQgdGhpcyBzaXRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbnRyby1nZXRpdC1kZXYnPgorICAgIDx0aXRsZT5EZXZlbG9wbWVudCBDaGVja291dHM8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBEZXZlbG9wbWVudCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCByZXF1aXJlcyBhIGxvY2FsCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgWW91IGNhbiBzZXQgdXAgdGhlIFNvdXJjZSBEaXJlY3RvcnkgYnkgY2xvbmluZyBhIGNvcHkgb2YgdGhlIHVwc3RyZWFtCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Bva3knPnBva3k8L3VsaW5rPiBHaXQgcmVwb3NpdG9yeS4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyB0aGlzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnZXR0aW5nLXNldHVwJz5HZXR0aW5nIFNldCBVcDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvbWlncmF0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzc1ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL21pZ3JhdGlvbi54bWwKQEAgLTAsMCArMSwyMzE5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0nbWlncmF0aW9uJz4KKzx0aXRsZT5NaWdyYXRpbmcgdG8gYSBOZXdlciBZb2N0byBQcm9qZWN0IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBpbmZvcm1hdGlvbiB5b3UgY2FuIHVzZSB0byBtaWdyYXRlIHdvcmsgdG8gYQorICAgICAgICBuZXdlciBZb2N0byBQcm9qZWN0IHJlbGVhc2UuICBZb3UgY2FuIGZpbmQgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgICAgIHJlbGVhc2Ugbm90ZXMgZm9yIGEgZ2l2ZW4gcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdnZW5lcmFsLW1pZ3JhdGlvbi1jb25zaWRlcmF0aW9ucyc+CisgICAgPHRpdGxlPkdlbmVyYWwgTWlncmF0aW9uIENvbnNpZGVyYXRpb25zPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBTb21lIGNvbnNpZGVyYXRpb25zIGFyZSBub3QgdGllZCB0byBhIHNwZWNpZmljIFlvY3RvIFByb2plY3QKKyAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIGluZm9ybWF0aW9uIHlvdSBzaG91bGQgY29uc2lkZXIgd2hlbgorICAgICAgICBtaWdyYXRpbmcgdG8gYW55IG5ldyBZb2N0byBQcm9qZWN0IHJlbGVhc2UuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRlYWxpbmcgd2l0aCBDdXN0b21pemVkIFJlY2lwZXM8L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICBJc3N1ZXMgY291bGQgYXJpc2UgaWYgeW91IHRha2Ugb2xkZXIgcmVjaXBlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9ucyBhbmQgc2ltcGx5IGNvcHkgdGhlbSBmb3J3YXJkIGV4cGVjdGluZyB0aGVtCisgICAgICAgICAgICAgICAgdG8gd29yayBhZnRlciB5b3UgbWlncmF0ZSB0byBuZXcgWW9jdG8gUHJvamVjdCBtZXRhZGF0YS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIHJlY2lwZSBpbiB5b3VyIGxheWVyIHRoYXQgaXMKKyAgICAgICAgICAgICAgICBhIGN1c3RvbWl6ZWQgdmVyc2lvbiBvZiBhIGNvcmUgcmVjaXBlIGNvcGllZCBmcm9tIHRoZSBlYXJsaWVyCisgICAgICAgICAgICAgICAgcmVsZWFzZSwgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUgdXNlIG9mIGFuIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgIFdoZW4geW91IG1pZ3JhdGUgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIFlvY3RvIFByb2plY3QsIHRoZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhIChlLmcuIHBlcmhhcHMgYW4gaW5jbHVkZSBmaWxlIHVzZWQgYnkgdGhlIHJlY2lwZSkKKyAgICAgICAgICAgICAgICBjb3VsZCBoYXZlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBicmVhayB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgU2F5LCBmb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpcyByZW1vdmVkIGZyb20gYW4gaW5jbHVkZSBmaWxlCisgICAgICAgICAgICAgICAgYW5kIHRoZSBjdXN0b21pemVkIHJlY2lwZSB0cmllcyB0byBjYWxsIHRoYXQgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+WW91IGNvdWxkICJmb3J3YXJkLXBvcnQiIGFsbCB5b3VyIGN1c3RvbWl6YXRpb25zIGluIHlvdXIKKyAgICAgICAgICAgICAgICByZWNpcGUgc28gdGhhdCBldmVyeXRoaW5nIHdvcmtzIGZvciB0aGUgbmV3IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBub3QgdGhlIG9wdGltYWwgc29sdXRpb24gYXMgeW91IHdvdWxkIGhhdmUKKyAgICAgICAgICAgICAgICB0byByZXBlYXQgdGhpcyBwcm9jZXNzIHdpdGggZWFjaCBuZXcgcmVsZWFzZSBpZiBjaGFuZ2VzCisgICAgICAgICAgICAgICAgb2NjdXIgdGhhdCBnaXZlIHJpc2UgdG8gcHJvYmxlbXMuPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+VGhlIGJldHRlciBzb2x1dGlvbiAod2hlcmUgcHJhY3RpY2FsKSBpcyB0byB1c2UgYXBwZW5kCisgICAgICAgICAgICAgICAgZmlsZXMgKDxmaWxlbmFtZT4qLmJiYXBwZW5kPC9maWxlbmFtZT4pIHRvIGNhcHR1cmUgYW55CisgICAgICAgICAgICAgICAgY3VzdG9taXphdGlvbnMgeW91IHdhbnQgdG8gbWFrZSB0byBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICBEb2luZyBzbywgaXNvbGF0ZXMgeW91ciBjaGFuZ2VzIGZyb20gdGhlIG1haW4gcmVjaXBlIG1ha2luZworICAgICAgICAgICAgICAgIHRoZW0gbXVjaCBtb3JlIG1hbmFnZWFibGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgc29tZXRpbWVzIGl0IGlzIG5vdCBwcmFjdGljYWwgdG8gdXNlIGFuIGFwcGVuZAorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgQSBnb29kIGV4YW1wbGUgb2YgdGhpcyBpcyB3aGVuIGludHJvZHVjaW5nIGEgbmV3ZXIgb3Igb2xkZXIKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIGEgcmVjaXBlIGluIGFub3RoZXIgbGF5ZXIuPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlVwZGF0aW5nIEFwcGVuZCBGaWxlczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgIFNpbmNlIGFwcGVuZCBmaWxlcyBnZW5lcmFsbHkgb25seSBjb250YWluIHlvdXIgY3VzdG9taXphdGlvbnMsCisgICAgICAgICAgICAgICAgdGhleSBvZnRlbiBkbyBub3QgbmVlZCB0byBiZSBhZGp1c3RlZCBmb3IgbmV3IHJlbGVhc2VzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoZSA8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4gZmlsZSBpcworICAgICAgICAgICAgICAgIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSByZWNpcGUgKGkuZS4gaXRzCisgICAgICAgICAgICAgICAgbmFtZSBkb2VzIG5vdCB1c2UgdGhlICUgd2lsZGNhcmQpIGFuZCB0aGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICByZWNpcGUgdG8gd2hpY2ggaXQgaXMgYXBwZW5kaW5nIGhhcyBjaGFuZ2VkLCB0aGVuIHlvdSB3aWxsCisgICAgICAgICAgICAgICAgYXQgYSBtaW5pbXVtIG5lZWQgdG8gcmVuYW1lIHRoZSBhcHBlbmQgZmlsZSB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICBuYW1lIG9mIHRoZSByZWNpcGUgZmlsZS4KKyAgICAgICAgICAgICAgICBBIG1pc21hdGNoIGJldHdlZW4gYW4gYXBwZW5kIGZpbGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgcmVjaXBlIGZpbGUgKDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPikgd2lsbAorICAgICAgICAgICAgICAgIHRyaWdnZXIgYW4gZXJyb3IgZHVyaW5nIHBhcnNpbmcuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPkRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjdXN0b21pemF0aW9uIHRoZSBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgIGFwcGxpZXMsIG90aGVyIGluY29tcGF0aWJpbGl0aWVzIG1pZ2h0IG9jY3VyIHdoZW4geW91CisgICAgICAgICAgICAgICAgdXBncmFkZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91ciBhcHBlbmQgZmlsZSBhcHBsaWVzIGEgcGF0Y2ggYW5kIHRoZQorICAgICAgICAgICAgICAgIHJlY2lwZSB0byB3aGljaCBpdCBpcyBhcHBlbmRpbmcgaXMgdXBkYXRlZCB0byBhIG5ld2VyCisgICAgICAgICAgICAgICAgdmVyc2lvbiwgdGhlIHBhdGNoIG1pZ2h0IG5vIGxvbmdlciBhcHBseS4KKyAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlIGFuZCBhc3N1bWluZyB0aGUgcGF0Y2ggaXMgc3RpbGwgbmVlZGVkLAorICAgICAgICAgICAgICAgIHlvdSBtdXN0IG1vZGlmeSB0aGUgcGF0Y2ggZmlsZSBzbyB0aGF0IGl0IGRvZXMgYXBwbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21vdmluZy10by10aGUteW9jdG8tcHJvamVjdC0xLjMtcmVsZWFzZSc+CisgICAgPHRpdGxlPk1vdmluZyB0byB0aGUgWW9jdG8gUHJvamVjdCAxLjMgUmVsZWFzZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbiBmb3IgbW92aW5nIHRvIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IDEuMyBSZWxlYXNlIGZyb20gdGhlIHByaW9yIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9JzEuMy1sb2NhbC1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkxvY2FsIENvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGlmZmVyZW5jZXMgaW5jbHVkZSBjaGFuZ2VzIGZvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtc3N0YXRlLW1pcnJvcnMnPgorICAgICAgICAgICAgPHRpdGxlPlNTVEFURV9NSVJST1JTPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBjYWNoZSAoc3N0YXRlLWNhY2hlKSwgYXMgcG9pbnRlZCB0byBieQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgIG5vdyBoYXMgdHdvLWNoYXJhY3RlciBzdWJkaXJlY3RvcmllcyB0byBwcmV2ZW50IGlzc3VlcyBhcmlzaW5nCisgICAgICAgICAgICAgICAgZnJvbSB0b28gbWFueSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgQWxzbywgbmF0aXZlIHNzdGF0ZS1jYWNoZSBwYWNrYWdlcyB3aWxsIGdvIGludG8gYSBzdWJkaXJlY3RvcnkgbmFtZWQgdXNpbmcKKyAgICAgICAgICAgICAgICB0aGUgZGlzdHJvIElEIHN0cmluZy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgY29weSB0aGUgbmV3bHkgc3RydWN0dXJlZCBzc3RhdGUtY2FjaGUgdG8gYSBtaXJyb3IgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAoZWl0aGVyIGxvY2FsIG9yIHJlbW90ZSkgYW5kIHRoZW4gcG9pbnQgdG8gaXQgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX01JUlJPUlMnPjxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB5b3UgbmVlZCB0byBhcHBlbmQgIlBBVEgiIHRvIHRoZSBlbmQgb2YgdGhlIG1pcnJvciBVUkwgc28gdGhhdAorICAgICAgICAgICAgICAgIHRoZSBwYXRoIHVzZWQgYnkgQml0QmFrZSBiZWZvcmUgdGhlIG1pcnJvciBzdWJzdGl0dXRpb24gaXMKKyAgICAgICAgICAgICAgICBhcHBlbmRlZCB0byB0aGUgcGF0aCB1c2VkIHRvIGFjY2VzcyB0aGUgbWlycm9yLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNTVEFURV9NSVJST1JTID0gImZpbGU6Ly8uKiBodHRwOi8vPHJlcGxhY2VhYmxlPnNvbWVzZXJ2ZXI8L3JlcGxhY2VhYmxlPi50bGQvc2hhcmUvc3N0YXRlL1BBVEgiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtYmJsYXllcnMtY29uZic+CisgICAgICAgICAgICA8dGl0bGU+YmJsYXllcnMuY29uZjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGxheWVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cworICAgICAgICAgICAgICAgIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgUG9reSByZWZlcmVuY2UgZGlzdHJpYnV0aW9uIGFuZCB0aGUKKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgaGFyZHdhcmUgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyksIHJlc3BlY3RpdmVseToKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0bzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvLWJzcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFdoZW4gcnVubmluZyBCaXRCYWtlIG9yIEhvYiBmb3IgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgdXBncmFkaW5nLAorICAgICAgICAgICAgICAgIHlvdXIgPGZpbGVuYW1lPmNvbmYvYmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgd2lsbCBiZQorICAgICAgICAgICAgICAgIHVwZGF0ZWQgdG8gaGFuZGxlIHRoaXMgY2hhbmdlIGFuZCB5b3Ugd2lsbCBiZSBhc2tlZCB0bworICAgICAgICAgICAgICAgIHJlLXJ1biBvciByZXN0YXJ0IGZvciB0aGUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPScxLjMtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERpZmZlcmVuY2VzIGluY2x1ZGUgY2hhbmdlcyBmb3IgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlB5dGhvbiBmdW5jdGlvbiB3aGl0ZXNwYWNlPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wcm90bz08L2ZpbGVuYW1lPiBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UYXNrIHJlY2lwZXM8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVtb3ZlZCByZWNpcGVzPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXB5dGhvbi1mdW5jdGlvbi13aGl0ZXNwYWNlJz4KKyAgICAgICAgICAgIDx0aXRsZT5QeXRob24gRnVuY3Rpb24gV2hpdGVzcGFjZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFsbCBQeXRob24gZnVuY3Rpb25zIG11c3Qgbm93IHVzZSBmb3VyIHNwYWNlcyBmb3IgaW5kZW50YXRpb24uCisgICAgICAgICAgICAgICAgUHJldmlvdXNseSwgYW4gaW5jb25zaXN0ZW50IG1peCBvZiBzcGFjZXMgYW5kIHRhYnMgZXhpc3RlZCwKKyAgICAgICAgICAgICAgICB3aGljaCBtYWRlIGV4dGVuZGluZyB0aGVzZSBmdW5jdGlvbnMgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29tcGxpY2F0ZWQgZ2l2ZW4gdGhhdCBQeXRob24gdHJlYXRzIHdoaXRlc3BhY2UgYXMKKyAgICAgICAgICAgICAgICBzeW50YWN0aWNhbGx5IHNpZ25pZmljYW50LgorICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZGVmaW5pbmcgb3IgZXh0ZW5kaW5nIGFueSBQeXRob24gZnVuY3Rpb25zIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3BhY2thZ2VzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fcGF0Y2g8L2ZpbGVuYW1lPiBhbmQgc28gZm9ydGgpIGluIGN1c3RvbSByZWNpcGVzCisgICAgICAgICAgICAgICAgb3IgY2xhc3NlcywgeW91IG5lZWQgdG8gZW5zdXJlIHlvdSBhcmUgdXNpbmcgY29uc2lzdGVudAorICAgICAgICAgICAgICAgIGZvdXItc3BhY2UgaW5kZW50YXRpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1wcm90bz0taW4tc3JjLXVyaSc+CisgICAgICAgICAgICA8dGl0bGU+cHJvdG89IGluIFNSQ19VUkk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBbnkgdXNlIG9mIDxmaWxlbmFtZT5wcm90bz08L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gPGZpbGVuYW1lPnByb3RvY29sPTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHRoaXMgYXBwbGllcyB0byB0aGUgZm9sbG93aW5nIFVSSXM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zdm46Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ6cjovLzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aGc6Ly88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm9zYzovLzwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgT3RoZXIgVVJJcyB3ZXJlIGFscmVhZHkgdXNpbmcgPGZpbGVuYW1lPnByb3RvY29sPTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGltcHJvdmVzIGNvbnNpc3RlbmN5LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtbmF0aXZlc2RrJz4KKyAgICAgICAgICAgIDx0aXRsZT5uYXRpdmVzZGs8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgc3VmZml4IDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBpcyBub3cgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICBhcyBhIHByZWZpeCwgd2hpY2ggc2ltcGxpZmllcyBhIGxvdCBvZiB0aGUgcGFja2FnaW5nIGNvZGUgZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMuCisgICAgICAgICAgICAgICAgQWxsIGN1c3RvbSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gcmVjaXBlcyBhbmQgYW55CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay0qPC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLW5hdGl2ZXNkazwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjMtdGFzay1yZWNpcGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5UYXNrIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAiVGFzayIgcmVjaXBlcyBhcmUgbm93IGtub3duIGFzICJQYWNrYWdlIGdyb3VwcyIgYW5kIGhhdmUKKyAgICAgICAgICAgICAgICBiZWVuIHJlbmFtZWQgZnJvbSA8ZmlsZW5hbWU+dGFzay0qLmJiPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLSouYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBFeGlzdGluZyByZWZlcmVuY2VzIHRvIHRoZSBwcmV2aW91cyA8ZmlsZW5hbWU+dGFzay0qPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBuYW1lcyBzaG91bGQgd29yayBpbiBtb3N0IGNhc2VzIGFzIHRoZXJlIGlzIGFuIGF1dG9tYXRpYworICAgICAgICAgICAgICAgIHVwZ3JhZGUgcGF0aCBmb3IgbW9zdCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3Ugc2hvdWxkIHVwZGF0ZSByZWZlcmVuY2VzIGluIHlvdXIgb3duIHJlY2lwZXMgYW5kCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYXMgdGhleSBjb3VsZCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcy4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGFsc28gcmVuYW1lIGFueSBjdXN0b20gPGZpbGVuYW1lPnRhc2stKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlcyB0byA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLSo8L2ZpbGVuYW1lPiwgYW5kIGNoYW5nZQorICAgICAgICAgICAgICAgIHRoZW0gdG8gaW5oZXJpdCA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwPC9maWxlbmFtZT4gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrPC9maWxlbmFtZT4sIGFzIHdlbGwgYXMgdGFraW5nIHRoZSBvcHBvcnR1bml0eQorICAgICAgICAgICAgICAgIHRvIHJlbW92ZSBhbnl0aGluZyBub3cgaGFuZGxlZCBieQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+LCBzdWNoIGFzIHByb3ZpZGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYWNrYWdlcywgc2V0dGluZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MSUNfRklMRVNfQ0hLU1VNJz48ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBhbmQgc28gZm9ydGguCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlZ3JvdXAnPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuMy1pbWFnZS1mZWF0dXJlcyc+CisgICAgICAgICAgICA8dGl0bGU+SU1BR0VfRkVBVFVSRVM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBJbWFnZSByZWNpcGVzIHRoYXQgcHJldmlvdXNseSBpbmNsdWRlZCAiYXBwcy1jb25zb2xlLWNvcmUiCisgICAgICAgICAgICAgICAgaW4gPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBzaG91bGQgbm93IGluY2x1ZGUgInNwbGFzaCIgaW5zdGVhZCB0byBlbmFibGUgdGhlIGJvb3QtdXAKKyAgICAgICAgICAgICAgICBzcGxhc2ggc2NyZWVuLgorICAgICAgICAgICAgICAgIFJldGFpbmluZyAiYXBwcy1jb25zb2xlLWNvcmUiIHdpbGwgc3RpbGwgaW5jbHVkZSB0aGUgc3BsYXNoCisgICAgICAgICAgICAgICAgc2NyZWVuIGJ1dCBnZW5lcmF0ZXMgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgIFRoZSAiYXBwcy14MTEtY29yZSIgYW5kICJhcHBzLXgxMS1nYW1lcyIKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBmZWF0dXJlcyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS4zLXJlbW92ZWQtcmVjaXBlcyc+CisgICAgICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgIEZvciBtb3N0IG9mIHRoZW0sIGl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdvdWxkIGhhdmUgYW55CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyB0byB0aGVtIGluIHlvdXIgb3duCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4uCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IHNob3VsZCBjaGVjayB5b3VyIG1ldGFkYXRhIGFnYWluc3QgdGhpcyBsaXN0IHRvIGJlIHN1cmU6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGlieDExLXRyaW08L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgYnkgPGZpbGVuYW1lPmxpYngxMTwvZmlsZW5hbWU+LCB3aGljaCBoYXMgYSBuZWdsaWdpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGRpZmZlcmVuY2Ugd2l0aCBtb2Rlcm4gWG9yZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eHNlcnZlci14b3JnLWxpdGU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT54c2VydmVyLXhvcmc8L2ZpbGVuYW1lPiwgd2hpY2ggaGFzIGEgbmVnbGlnaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBkaWZmZXJlbmNlIHdoZW4gRFJJIGFuZCBHTFggbW9kdWxlcyBhcmUgbm90IGluc3RhbGxlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eHNlcnZlci1rZHJpdmU8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlbHkgdW5tYWludGFpbmVkIGZvciBtYW55IHllYXJzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tZXNhLXhsaWI8L2ZpbGVuYW1lPjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTm8gbG9uZ2VyIHNlcnZlcyBhbnkgcHVycG9zZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2FsYWdvPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IHRlbGVwYXRoeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Z2FpbDwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IHdhcyBpbnRlZ3JhdGVkIGludG8gR1RLKyAyLjEzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5lZ2dkYnVzPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdjYy0qLWludGVybWVkaWF0ZTwvZmlsZW5hbWU+PC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkIHRvIGF2b2lkIHRoZSBuZWVkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzdGVwLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJnc21kPC9maWxlbmFtZT48L2VtcGhhc2lzPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVubWFpbnRhaW5lZCBmb3IgbWFueSB5ZWFycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgbm93IHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2Zvbm88L2ZpbGVuYW1lPiBpbnN0ZWFkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmNvbnRhY3RzLCBkYXRlcywgdGFza3MsIGVkcy10b29sczwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICAgICAgTGFyZ2VseSB1bm1haW50YWluZWQgUElNIGFwcGxpY2F0aW9uIHN1aXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gbW92ZWQgdG8gPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gPGZpbGVuYW1lPm1ldGEtb3BlbmVtYmVkZGVkPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHByZXZpb3VzbHkgbGlzdGVkIGNoYW5nZXMsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWRlbW9hcHBzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGhhcyBhbHNvIGJlZW4gcmVtb3ZlZAorICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHJlY2lwZXMgaW4gaXQgd2VyZSBub3QgYmVpbmcgbWFpbnRhaW5lZCBhbmQgbWFueQorICAgICAgICAgICAgICAgIGhhZCBiZWNvbWUgb2Jzb2xldGUgb3IgYnJva2VuLgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlc2UgcmVjaXBlcyB3ZXJlIG5vdCBwYXJzZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICBNYW55IG9mIHRoZXNlIHJlY2lwZXMgYXJlIGFscmVhZHkgcHJvdmlkZWQgaW4gYW4gdXBkYXRlZCBhbmQKKyAgICAgICAgICAgICAgICBtYWludGFpbmVkIGZvcm0gd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgY29tbXVuaXR5IGxheWVycyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBGb3IgdGhlIHJlbWFpbmRlciwgeW91IGNhbiBub3cgZmluZCB0aGVtIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWV4dHJhczwvZmlsZW5hbWU+IHJlcG9zaXRvcnksIHdoaWNoIGlzIGluIHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtcmVwb3NpdG9yaWVzJz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nMS4zLWxpbnV4LWtlcm5lbC1uYW1pbmcnPgorICAgICAgICA8dGl0bGU+TGludXggS2VybmVsIE5hbWluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbmFtaW5nIHNjaGVtZSBmb3Iga2VybmVsIG91dHB1dCBiaW5hcmllcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAgICAgICAgICBub3cgaW5jbHVkZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4gYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgIGZpbGVuYW1lOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfSU1BR0VfQkFTRV9OQU1FID89ICIke0tFUk5FTF9JTUFHRVRZUEV9LSR7UEV9LSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwKKyAgICAgICAgICAgIHRoZXNlIGJpbmFyeSBmaWxlcyBjb3VsZCByZXN1bHQgd2l0aCBuYW1lcyB0aGF0IGluY2x1ZGUgdHdvIGRhc2gKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGJ6SW1hZ2UtLTMuMTAuOStnaXQwK2NkNTAyYTg4MTRfNzE0NGJjYzRiOC1yMC1xZW11eDg2LTY0LTIwMTMwODMwMDg1NDMxLmJpbgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbW92aW5nLXRvLXRoZS15b2N0by1wcm9qZWN0LTEuNC1yZWxlYXNlJz4KKyAgICA8dGl0bGU+TW92aW5nIHRvIHRoZSBZb2N0byBQcm9qZWN0IDEuNCBSZWxlYXNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgbWlncmF0aW9uIGluZm9ybWF0aW9uIGZvciBtb3ZpbmcgdG8gdGhlCisgICAgICAgIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UgZnJvbSB0aGUgcHJpb3IgcmVsZWFzZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRGlmZmVyZW5jZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNvbW1lbnQgQ29udGludWF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIGEgY29tbWVudCBlbmRzIHdpdGggYSBsaW5lIGNvbnRpbnVhdGlvbiAoXCkgY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSBuZXh0IGxpbmUgbXVzdCBhbHNvIGJlIGEgY29tbWVudC4KKyAgICAgICAgICAgICAgICAgICAgQW55IGluc3RhbmNlIHdoZXJlIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBub3cgdHJpZ2dlcnMKKyAgICAgICAgICAgICAgICAgICAgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBlaXRoZXIgcmVtb3ZlIHRoZSBjb250aW51YXRpb24gY2hhcmFjdGVyLCBvciBiZQorICAgICAgICAgICAgICAgICAgICBzdXJlIHRoZSBuZXh0IGxpbmUgaXMgYSBjb21tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlBhY2thZ2UgTmFtZSBPdmVycmlkZXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJ1bnRpbWUgcGFja2FnZSBzcGVjaWZpYyB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPjxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwcmUsIHBvc3QsIGluc3RhbGwsIGFuZCB1bmluc3RhbGwgc2NyaXB0IGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZWluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0aW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZXJtPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3Bvc3RybTwvZmlsZW5hbWU+IHNob3VsZCBhbHdheXMgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzZSA8ZmlsZW5hbWU+UkRFUEVORFNfJHtQTn08L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhlIG1haW4gcGFja2FnZSBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgbW9yZSBzdHJpY3QgY2hlY2tzIHdoZW4gaXQgcGFyc2VzIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1idWlsZC1iZWhhdmlvcic+CisgICAgICAgIDx0aXRsZT5CdWlsZCBCZWhhdmlvcjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBEaWZmZXJlbmNlcyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2hhcmVkIFN0YXRlIENvZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBjb2RlIGhhcyBiZWVuIG9wdGltaXplZCB0byBhdm9pZCBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgIHVubmVjZXNzYXJ5IHRhc2tzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBubyBsb25nZXIgcG9wdWxhdGVzIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBzaW5jZSB0aGF0IGlzIG5vdCBuZWNlc3Nhcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIHJvb3RmcyA8cmVwbGFjZWFibGU+c29tZS1pbWFnZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCwgdGhlIHN5c3RlbSBqdXN0IG5lZWRzIHRvIGV4dHJhY3QgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGNvbnRlbnRzLCByZS1jcmVhdGUgdGhlIHBhY2thZ2VzLCBhbmQgY29uc3RydWN0CisgICAgICAgICAgICAgICAgICAgIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIHVubGlrZWx5IHRvIGNhdXNlIGFueSBwcm9ibGVtcyB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgeW91IGhhdmUgbWlzc2luZyBkZWNsYXJlZCBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2Nhbm5pbmcgRGlyZWN0b3J5IE5hbWVzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2Nhbm5pbmcgZm9yIGZpbGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIHN5c3RlbSBub3cgdXNlcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNPVkVSUklERVMnPjxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBkaXJlY3RvcnkgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEluIGdlbmVyYWwsIHRoZSB2YWx1ZXMgcHJldmlvdXNseSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4gYXJlIG5vdyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNPVkVSUklERVM8L2ZpbGVuYW1lPiBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgcmVsaWVkIHVwb24gYW4gYWRkaXRpb25hbCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICB5b3UgcHJldmlvdXNseSBhZGRlZCB0byA8ZmlsZW5hbWU+T1ZFUlJJREVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHlvdSBtaWdodCBub3cgbmVlZCB0byBhZGQgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT4gdW5sZXNzIHlvdSBhcmUgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBhZGRpbmcgaXQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVPVkVSUklERVMnPjxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9PVkVSUklERVMnPjxmaWxlbmFtZT5ESVNUUk9PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgcmVsYXRlZCBjaGFuZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtaWdyYXRpb24tMS40LXZhcmlhYmxlcyc+VmFyaWFibGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtcHJveGllcy1hbmQtZmV0Y2hpbmctc291cmNlJz4KKyAgICAgICAgPHRpdGxlPlByb3hpZXMgYW5kIEZldGNoaW5nIFNvdXJjZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIG5ldyA8ZmlsZW5hbWU+b2UtZ2l0LXByb3h5PC9maWxlbmFtZT4gc2NyaXB0IGhhcyBiZWVuIGFkZGVkIHRvCisgICAgICAgICAgICByZXBsYWNlIHByZXZpb3VzIG1ldGhvZHMgb2YgaGFuZGxpbmcgcHJveGllcyBhbmQgZmV0Y2hpbmcgc291cmNlCisgICAgICAgICAgICBmcm9tIEdpdC4KKyAgICAgICAgICAgIFNlZSB0aGUgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi9zaXRlLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyBzY3JpcHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC1jdXN0b20taW50ZXJmYWNlcy1maWxlLW5ldGJhc2UtY2hhbmdlJz4KKyAgICAgICAgPHRpdGxlPkN1c3RvbSBJbnRlcmZhY2VzIEZpbGUgKG5ldGJhc2UgY2hhbmdlKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgb3duIGN1c3RvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmV0Yy9uZXR3b3JrL2ludGVyZmFjZXM8L2ZpbGVuYW1lPiBmaWxlIGJ5IGNyZWF0aW5nCisgICAgICAgICAgICBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlIDxmaWxlbmFtZT5uZXRiYXNlPC9maWxlbmFtZT4gcmVjaXBlLAorICAgICAgICAgICAgeW91IG5vdyBuZWVkIHRvIGNyZWF0ZSBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+IHJlY2lwZSBpbnN0ZWFkLCB3aGljaCB5b3UgY2FuCisgICAgICAgICAgICBmaW5kIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBhdCA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgYXBwZW5kIGZpbGVzLCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctYmJhcHBlbmQtZmlsZXMnPlVzaW5nIC5iYmFwcGVuZCBGaWxlczwvdWxpbms+IgorICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtcmVtb3RlLWRlYnVnZ2luZyc+CisgICAgICAgIDx0aXRsZT5SZW1vdGUgRGVidWdnaW5nPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFN1cHBvcnQgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcgd2l0aCB0aGUgRWNsaXBzZSBJREUgaXMgbm93CisgICAgICAgICAgICBzZXBhcmF0ZWQgaW50byBhbiBpbWFnZSBmZWF0dXJlCisgICAgICAgICAgICAoPGZpbGVuYW1lPmVjbGlwc2UtZGVidWc8L2ZpbGVuYW1lPikgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnPC9maWxlbmFtZT4gcGFja2FnZSBncm91cC4KKyAgICAgICAgICAgIFByZXZpb3VzbHksIHRoZSBkZWJ1Z2dpbmcgZmVhdHVyZSB3YXMgaW5jbHVkZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT50b29scy1kZWJ1ZzwvZmlsZW5hbWU+IGltYWdlIGZlYXR1cmUsIHdoaWNoIGNvcnJlc3BvbmRzCisgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHBhY2thZ2UgZ3JvdXAuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNC12YXJpYWJsZXMnPgorICAgICAgICA8dGl0bGU+VmFyaWFibGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGhhdmUgY2hhbmdlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+U0FOSVRZX1RFU1RFRF9ESVNUUk9TPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBub3cgdXNlcyBhIGRpc3RyaWJ1dGlvbiBJRCwgd2hpY2ggaXMgY29tcG9zZWQKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGhvc3QgZGlzdHJpYnV0b3IgSUQgZm9sbG93ZWQgYnkgdGhlIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzbHksCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TQU5JVFlfVEVTVEVEX0RJU1RST1MnPjxmaWxlbmFtZT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2FzIGNvbXBvc2VkIG9mIHRoZSBkZXNjcmlwdGlvbiBmaWVsZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsICJVYnVudHUgMTIuMTAiIGJlY29tZXMgIlVidW50dS0xMi4xMCIuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzIGNoYW5nZSBpZiB5b3UgYXJlIG5vdAorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY2FsbHkgc2V0dGluZyB0aGlzIHZhcmlhYmxlLCBvciBpZiB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljYWxseSBzZXR0aW5nIGl0IHRvICIiLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QRic+PGZpbGVuYW1lPlBGPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUCc+PGZpbGVuYW1lPlA8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkZJTEVfRElSTkFNRTwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgICAgICBkcm9wcGVkIGZyb20gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU1BBVEgnPjxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIHVzZWQgYXMgdGhlIHNlYXJjaCBwYXRoIGZvciBmaW5kaW5nIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHJlZmVycmVkIHRvIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgYSByZWNpcGUgdGhhdCByZWxpZWQgdXBvbiB0aGVzZSBkaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggd291bGQgYmUgdW51c3VhbCwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGFkZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgcGF0aHMgd2l0aGluIHRoZSByZWNpcGUgb3IsIGFsdGVybmF0aXZlbHksCisgICAgICAgICAgICAgICAgICAgIHJlYXJyYW5nZSB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiBsb2NhdGlvbnMgYXJlIHN0aWxsIGNvdmVyZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7QlB9PC9maWxlbmFtZT4sIDxmaWxlbmFtZT4ke0JQTn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kICJmaWxlcyIsIHdoaWNoIGFsbCByZW1haW4gaW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tdGFyZ2V0LXBhY2thZ2UtbWFuYWdlbWVudC13aXRoLXJwbSc+CisgICAgICAgIDx0aXRsZT5UYXJnZXQgUGFja2FnZSBNYW5hZ2VtZW50IHdpdGggUlBNPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGVuYWJsZWQgYW5kIHRoZSBSUE0gYmFja2VuZAorICAgICAgICAgICAgaXMgc2VsZWN0ZWQsIFNtYXJ0IGlzIG5vdyBpbnN0YWxsZWQgZm9yIHBhY2thZ2UgZG93bmxvYWQsIGRlcGVuZGVuY3kKKyAgICAgICAgICAgIHJlc29sdXRpb24sIGFuZCB1cGdyYWRlcyBpbnN0ZWFkIG9mIFp5cHBlci4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgU21hcnQsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQKKyAgICAgICAgICAgIG9uIHRoZSB0YXJnZXQ6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHNtYXJ0IC0taGVscAorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjQtcmVjaXBlcy1tb3ZlZCc+CisgICAgICAgIDx0aXRsZT5SZWNpcGVzIE1vdmVkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyB3ZXJlIG1vdmVkIGZyb20gdGhlaXIgcHJldmlvdXMgbG9jYXRpb25zCisgICAgICAgICAgICBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciB1c2VkIGJ5IGFueXRoaW5nIGluCisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkLUNvcmU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmNsdXR0ZXItYm94MmQ8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZXZvbHV0aW9uLWRhdGEtc2VydmVyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmd0aHVtYjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1nbm9tZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ndGtodG1sMjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1vZTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ndXBucDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIE5vdyByZXNpZGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS1tdWx0aW1lZGlhPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmd5cHN5PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmNhbmJlcnJhPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmdkYXRhPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYm11c2ljYnJhaW56PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW11bHRpbWVkaWE8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWV0YWNpdHk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBOb3cgcmVzaWRlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGEtZ25vbWU8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9sa2l0PC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnplcm9jb25mPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTm93IHJlc2lkZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhLW5ldHdvcmtpbmc8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS40LXJlbW92YWxzLWFuZC1yZW5hbWVzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92YWxzIGFuZCBSZW5hbWVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB3aGF0IGhhcyBiZWVuIHJlbW92ZWQgb3IgcmVuYW1lZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZXZpZWV4dDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBpdCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhzZXJ2ZXI8L2ZpbGVuYW1lPiBzaW5jZSAyMDA4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkd0aysgRGlyZWN0RkI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBzdXBwb3J0IGJlY2F1c2UgdXBzdHJlYW0gR3RrKyBubyBsb25nZXIgc3VwcG9ydHMgaXQKKyAgICAgICAgICAgICAgICAgICAgYXMgb2YgdmVyc2lvbiAyLjE4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4Zm9udGNhY2hlIC8geGZvbnRjYWNoZXByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZXkgd2VyZSByZW1vdmVkIGZyb20gdGhlIFhvcmcgc2VydmVyIGluIDIwMDguCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYnhwIC8gbGlieHByaW50YXBwdXRpbCAvIGxpYnhwcmludHV0aWwgLyBwcmludHByb3RvPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIHRoZSBYUHJpbnQgc2VydmVyIHdhcyByZW1vdmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgWG9yZyBpbiAyMDA4LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5saWJ4dHJhcCAvIHh0cmFwcHJvdG88L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgdGhlaXIgZnVuY3Rpb25hbGl0eSB3YXMgYnJva2VuIHVwc3RyZWFtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmxpbnV4LXlvY3RvIDMuMCBrZXJuZWw6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCB3aXRoIGxpbnV4LXlvY3RvIDMuOCBrZXJuZWwgYmVpbmcgYWRkZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaW51eC15b2N0byAzLjIgYW5kIGxpbnV4LXlvY3RvIDMuNCBrZXJuZWxzIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5sc2JzZXR1cDwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgd2l0aCBmdW5jdGlvbmFsaXR5IG5vdyBwcm92aWRlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHNidGVzdDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tYXRjaGJveC1zdHJva2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgd2FzIG5ldmVyIG1vcmUgdGhhbiBhIHByb29mLW9mLWNvbmNlcHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1hdGNoYm94LXdtLTIgLyBtYXRjaGJveC10aGVtZS1zYXRvLTI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgdGhleSBhcmUgbm90IG1haW50YWluZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIDxmaWxlbmFtZT5tYXRjaGJveC13bTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWF0Y2hib3gtdGhlbWUtc2F0bzwvZmlsZW5hbWU+IGFyZSBzdGlsbAorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWVzYS1kcmk8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW5hbWVkIHRvIDxmaWxlbmFtZT5tZXNhPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm1lc2EteGxpYjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgbm8gbG9uZ2VyIHVzZWZ1bC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bXV0dGVyPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIG5vdGhpbmcgZXZlciB1c2VzIGl0IGFuZCB0aGUgcmVjaXBlIGlzCisgICAgICAgICAgICAgICAgICAgIHZlcnkgb2xkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vcmlub2NvLWNvbmY8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaGFzIGJlY29tZSBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dXBkYXRlLW1vZHVsZXM8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgbW9kdWxlIDxmaWxlbmFtZT5wb3N0aW5zdGFsbDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9zdHJtPC9maWxlbmFtZT4gc2NyaXB0cyBjYW4gbm93IGRvIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgICAgIHRhc2sgd2l0aG91dCB0aGUgdXNlIG9mIHRoaXMgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT53ZWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgaXQgaXMgbm90IG1haW50YWluZWQuICBTdXBlcnNlZGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53ZWItd2Via2l0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhmODZiaWdmb250cHJvdG88L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGJlY2F1c2UgdXBzdHJlYW0gaXQgaGFzIGJlZW4gZGlzYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBzaW5jZSAyMDA3LgorICAgICAgICAgICAgICAgICAgICBOb3RoaW5nIHVzZXMgPGZpbGVuYW1lPnhmODZiaWdmb250cHJvdG88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+eGY4NnJ1c2hwcm90bzwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgYmVjYXVzZSBpdHMgZGVwZW5kZW5jeSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eHNlcnZlcjwvZmlsZW5hbWU+IHdhcyBzcHVyaW91cyBhbmQgaXQgd2FzCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgaW4gMjAwNS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+enlwcGVyIC8gbGlienlwcCAvIHNhdC1zb2x2ZXI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIGFuZCBiZWVuIGZ1bmN0aW9uYWxseSByZXBsYWNlZCB3aXRoIFNtYXJ0CisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+cHl0aG9uLXNtYXJ0cG08L2ZpbGVuYW1lPikgd2hlbiBSUE0gcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgYW5kIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBlbmFibGVkIG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS41LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS41IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWhvc3QtZGVwZW5kZW5jeS1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkhvc3QgRGVwZW5kZW5jeSBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIG5vdyBoYXMgc29tZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cworICAgICAgICAgICAgb24gdGhlIGhvc3Qgc3lzdGVtOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UHl0aG9uIDIuNy4zKzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UYXIgMS4yNCs8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l0IDEuNy44KzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5QYXRjaGVkIHZlcnNpb24gb2YgTWFrZSBpZiB5b3UgYXJlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDMuODIuCisgICAgICAgICAgICAgICAgICAgIE1vc3QgZGlzdHJpYnV0aW9ucyB0aGF0IHByb3ZpZGUgTWFrZSAzLjgyIHVzZSB0aGUgcGF0Y2hlZAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICBJZiB0aGUgTGludXggZGlzdHJpYnV0aW9uIHlvdSBhcmUgdXNpbmcgb24geW91ciBidWlsZCBob3N0CisgICAgICAgICAgICBkb2VzIG5vdCBwcm92aWRlIHBhY2thZ2VzIGZvciB0aGVzZSwgeW91IGNhbiBpbnN0YWxsIGFuZCB1c2UKKyAgICAgICAgICAgIHRoZSBCdWlsZHRvb2xzIHRhcmJhbGwsIHdoaWNoIHByb3ZpZGVzIGFuIFNESy1saWtlIGVudmlyb25tZW50CisgICAgICAgICAgICBjb250YWluaW5nIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgcmVxdWlyZW1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1hdG9tLXBjLWJzcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YXRvbS1wYzwvZmlsZW5hbWU+IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmF0b20tcGM8L2ZpbGVuYW1lPiBoYXJkd2FyZSByZWZlcmVuY2UgQlNQIGhhcyBiZWVuCisgICAgICAgICAgICByZXBsYWNlZCBieSBhIDxmaWxlbmFtZT5nZW5lcmljeDg2PC9maWxlbmFtZT4gQlNQLgorICAgICAgICAgICAgVGhpcyBCU1AgaXMgbm90IG5lY2Vzc2FyaWx5IGd1YXJhbnRlZWQgdG8gd29yayBvbiBhbGwgeDg2CisgICAgICAgICAgICBoYXJkd2FyZSwgYnV0IGl0IHdpbGwgcnVuIG9uIGEgd2lkZXIgcmFuZ2Ugb2Ygc3lzdGVtcyB0aGFuIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmF0b20tcGM8L2ZpbGVuYW1lPiBkaWQuCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIGEgPGZpbGVuYW1lPmdlbmVyaWN4ODYtNjQ8L2ZpbGVuYW1lPiBCU1AgaGFzCisgICAgICAgICAgICAgICAgYmVlbiBhZGRlZCBmb3IgNjQtYml0IEF0b20gc3lzdGVtcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdGhhdCByZWxhdGUgdG8gQml0QmFrZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIG5vdyBzdXBwb3J0cyBhIDxmaWxlbmFtZT5fcmVtb3ZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIFRoZSBhZGRpdGlvbiBvZiB0aGlzIG9wZXJhdG9yIG1lYW5zIHlvdSB3aWxsIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lIGFueSBpdGVtcyBpbiByZWNpcGUgc3BhY2UgKGZ1bmN0aW9ucywgdmFyaWFibGVzKQorICAgICAgICAgICAgICAgICAgICB3aG9zZSBuYW1lcyBjdXJyZW50bHkgY29udGFpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3JlbW92ZV88L2ZpbGVuYW1lPiBvciBlbmQgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X3JlbW92ZTwvZmlsZW5hbWU+IHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSdzIGdsb2JhbCBtZXRob2QgcG9vbCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBub3QgcGFydGljdWxhcmx5IHVzZWZ1bCBhbmQgbGVkIHRvIGNsYXNoZXMKKyAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiByZWNpcGVzIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRoYXQgaGFkIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgIm5vbmUiIHNlcnZlciBiYWNrZW5kIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSAicHJvY2VzcyIgc2VydmVyIGJhY2tlbmQgaGFzIGJlZW4gc2VydmluZyB3ZWxsIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGZvciBhIGxvbmcgdGltZSBub3cuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpdGJha2UtcnVudGFzazwvZmlsZW5hbWU+IHNjcmlwdCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICByZW1vdmVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUCc+PGZpbGVuYW1lPlA8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QRic+PGZpbGVuYW1lPlBGPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcmUgbm8gbG9uZ2VyIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUk9WSURFUyc+PGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQgaW4gPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSB2ZXJzaW9uLXNwZWNpZmljIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGl0ZW1zIHdlcmUgc2VsZG9tIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIEF0dGVtcHRpbmcgdG8gdXNlIHRoZW0gY291bGQgcmVzdWx0IGluIHR3byB2ZXJzaW9ucyBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBzaW11bHRhbmVvdXNseSByYXRoZXIgdGhhbiBqdXN0IG9uZSB2ZXJzaW9uIGR1ZSB0bworICAgICAgICAgICAgICAgICAgICB0aGUgd2F5IEJpdEJha2UgcmVzb2x2ZXMgZGVwZW5kZW5jaWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1xYS13YXJuaW5ncyc+CisgICAgICAgIDx0aXRsZT5RQSBXYXJuaW5nczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBhY2thZ2UgUUEgY2hlY2tzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIGN1c3RvbWl6ZWQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVSUk9SX1FBJz48ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IgPGxpbmsgbGlua2VuZD0ndmFyLVdBUk5fUUEnPjxmaWxlbmFtZT5XQVJOX1FBPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24sIGNoZWNrIHRoYXQgdGhleSBjb250YWluIGFsbCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgaXNzdWVzIHRoYXQgeW91IHdpc2ggdG8gYmUgcmVwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzIFlvY3RvIFByb2plY3QgdmVyc2lvbnMgY29udGFpbmVkIGEgYnVnIHRoYXQgbWVhbnQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbnkgaXRlbSBub3QgbWVudGlvbmVkIGluIDxmaWxlbmFtZT5FUlJPUl9RQTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG9yIDxmaWxlbmFtZT5XQVJOX1FBPC9maWxlbmFtZT4gd291bGQgYmUgdHJlYXRlZCBhcyBhCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgc2V2ZXJhbCBpbXBvcnRhbnQgaXRlbXMgd2VyZSBub3QgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBbGwgb2YgdGhlIHBvc3NpYmxlIFFBIGNoZWNrcyBhcmUgbm93IGRvY3VtZW50ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGFkZGl0aW9uYWwgUUEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgaWYKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc2hhcmUvaW5mby9kaXI8L2ZpbGVuYW1lPiBpcyBiZWluZyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdXIgcmVjaXBlIHNob3VsZCBkZWxldGUgdGhpcyBmaWxlIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaWYgIm1ha2UgaW5zdGFsbCIgaXMgaW5zdGFsbGluZyBpdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoZSBjaGVjayBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgdmVyc2lvbiBnb2luZyBiYWNrd2FyZHMgaXMgbm93IGNvbnRyb2xsZWQgdXNpbmcgYQorICAgICAgICAgICAgICAgICAgICBzdGFuZGFyZCBRQSBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgVGh1cywgaWYgeW91IGhhdmUgY3VzdG9taXplZCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FUlJPUl9RQTwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5XQVJOX1FBPC9maWxlbmFtZT4gdmFsdWVzIGFuZCBzdGlsbCB3aXNoIHRvIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBjaGVjayBwZXJmb3JtZWQsIHlvdSBzaG91bGQgYWRkCisgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyIgdG8geW91ciB2YWx1ZSBmb3Igb25lIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciB2YXJpYWJsZXMgZGVwZW5kaW5nIG9uIGhvdyB5b3Ugd2lzaCBpdCB0byBiZSBoYW5kbGVkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGRvY3VtZW50ZWQgUUEgY2hlY2tzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1kaXJlY3RvcnktbGF5b3V0LWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+RGlyZWN0b3J5IExheW91dCBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IGNoYW5nZXMgZXhpc3Q6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgT3V0cHV0IFNESyBpbnN0YWxsZXIgZmlsZXMgYXJlIG5vdyBuYW1lZCB0byBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICBpbWFnZSBuYW1lIGFuZCB0dW5pbmcgYXJjaGl0ZWN0dXJlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfTkFNRSc+PGZpbGVuYW1lPlNES19OQU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW1hZ2VzIGFuZCByZWxhdGVkIGZpbGVzIGFyZSBub3cgaW5zdGFsbGVkIGludG8gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSwgaW5zdGVhZCBvZiBhIHBhcmVudAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgY29udGFpbmluZyBvdXRwdXQgZmlsZXMgZm9yIG11bHRpcGxlIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGNvbnRpbnVlcyB0byBwb2ludCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzIGZvciB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHNob3VsZCBiZSB1c2VkIGFueXdoZXJlIHRoZXJlIGlzIGEgbmVlZCB0byByZWZlciB0bworICAgICAgICAgICAgICAgICAgICB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5xZW11PC9maWxlbmFtZT4gc2NyaXB0IG5vdyB1c2VzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gZmluZCBpbWFnZXMgYW5kIGtlcm5lbCBiaW5hcmllcyBhbmQgd2lsbCB1c2UKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB0byBkZXRlcm1pbmUgdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIGVudmlyb25tZW50LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGhpc3RvcnkgaXMgZW5hYmxlZCwgaXRzIG91dHB1dCBpcyBub3cgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBtYWtlcyBpdCBlYXNpZXIgdG8gZGVsZXRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiBhbmQgcHJlc2VydmUgdGhlIGJ1aWxkIGhpc3RvcnkuCisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgZGF0YSBmb3IgcHJvZHVjZWQgU0RLcyBpcyBub3cgc3BsaXQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX05BTUUnPjxmaWxlbmFtZT5JTUFHRV9OQU1FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBwcm9kdWNlZCBhcworICAgICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBwYWNrYWdpbmcgcHJvY2VzcyBoYXMgYmVlbiBjb2xsYXBzZWQgaW50byBhCisgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBtYWNoaW5lLXNwZWNpZmljIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgaXMgbG9jYXRlZCB1bmRlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzcm9vdHM8L2ZpbGVuYW1lPiBhbmQgdXNlcyBhIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgbmFtZSAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3N5c3Jvb3RzLzxyZXBsYWNlYWJsZT5tYWNoaW5lPC9yZXBsYWNlYWJsZT4vcGtnZGF0YTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LXNob3J0ZW5lZC1naXQtc3JjcmV2LXZhbHVlcyc+CisgICAgICAgIDx0aXRsZT5TaG9ydGVuZWQgR2l0IDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiBWYWx1ZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSB3aWxsIG5vdyBzaG9ydGVuIHJldmlzaW9ucyBmcm9tIEdpdCByZXBvc2l0b3JpZXMgZnJvbSB0aGUKKyAgICAgICAgICAgIG5vcm1hbCA0MCBjaGFyYWN0ZXJzIGRvd24gdG8gMTAgY2hhcmFjdGVycyB3aXRoaW4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBmb3IgaW1wcm92ZWQgdXNhYmlsaXR5IGluIHBhdGggYW5kIGZpbGUgbmFtZXMuCisgICAgICAgICAgICBUaGlzIGNoYW5nZSBzaG91bGQgYmUgc2FmZSB3aXRoaW4gY29udGV4dHMgd2hlcmUgdGhlc2UgcmV2aXNpb25zCisgICAgICAgICAgICBhcmUgdXNlZCBiZWNhdXNlIHRoZSBjaGFuY2VzIG9mIHNwYXRpYWxseSBjbG9zZSBjb2xsaXNpb25zCisgICAgICAgICAgICBpcyB2ZXJ5IGxvdy4KKyAgICAgICAgICAgIERpc3RhbnQgY29sbGlzaW9ucyBhcmUgbm90IGEgbWFqb3IgaXNzdWUgaW4gdGhlIHdheQorICAgICAgICAgICAgdGhlIHZhbHVlcyBhcmUgdXNlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWltYWdlLWZlYXR1cmVzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0aGF0IHJlbGF0ZSB0bworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdyB2YWxpZGF0ZWQgdG8gZW5zdXJlIGludmFsaWQgZmVhdHVyZSBpdGVtcyBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICBTb21lIHVzZXJzIG1pc3Rha2VubHkgYWRkIHBhY2thZ2UgbmFtZXMgdG8gdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBoYXZlIHRoZSBwYWNrYWdlIGFkZGVkIHRvIHRoZSBpbWFnZSwgd2hpY2ggZG9lcworICAgICAgICAgICAgICAgICAgICBub3Qgd29yay4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQgdG8gY2F0Y2ggdGhvc2Uga2luZHMgb2Ygc2l0dWF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgVmFsaWQgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYXJlIGRyYXduIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfR1JPVVAnPjxmaWxlbmFtZT5QQUNLQUdFX0dST1VQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zLAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09NUExFTUVOVEFSWV9HTE9CJz48ZmlsZW5hbWU+Q09NUExFTUVOVEFSWV9HTE9CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBhIG5ldyAidmFsaWRpdGVtcyIgdmFyZmxhZyBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlICJ2YWxpZGl0ZW1zIiB2YXJmbGFnIGNoYW5nZSBhbGxvd3MgYWRkaXRpb25hbCBmZWF0dXJlcworICAgICAgICAgICAgICAgICAgICB0byBiZSBhZGRlZCBpZiB0aGV5IGFyZSBub3QgcHJvdmlkZWQgdXNpbmcgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgIHR3byBtZWNoYW5pc21zLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgImFwcHMtY29uc29sZS1jb3JlIgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpdGVtIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAgIEFkZCAic3BsYXNoIiB0byA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBpZiB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2lzaCB0byBoYXZlIHRoZSBzcGxhc2ggc2NyZWVuIGVuYWJsZWQsIHNpbmNlIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgYWxsIHRoYXQgYXBwcy1jb25zb2xlLWNvcmUgd2FzIGRvaW5nLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1ydW4nPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPi9ydW48L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPi9ydW48L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZnJvbSB0aGUgRmlsZXN5c3RlbQorICAgICAgICAgICAgSGllcmFyY2h5IFN0YW5kYXJkIDMuMCBoYXMgYmVlbiBpbnRyb2R1Y2VkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHNvbWUgb2YgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhpcyBjaGFuZ2UKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9pZD0wZTMyNjI4MGExNWIwZjJjNGVmMmVmNGVjNDQxZjYzZjU1Yjc1ODczJz5oZXJlPC91bGluaz4uCisgICAgICAgICAgICBUaGUgY2hhbmdlIGFsc28gbWVhbnMgdGhhdCByZWNpcGVzIHRoYXQgaW5zdGFsbCBmaWxlcyB0bworICAgICAgICAgICAgPGZpbGVuYW1lPi92YXIvcnVuPC9maWxlbmFtZT4gbXVzdCBiZSBjaGFuZ2VkLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgZ3VpZGUgb24gaG93IHRvIG1ha2UgdGhlc2UgY2hhbmdlcworICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3Blcm1hbGluay5nbWFuZS5vcmcvZ21hbmUuY29tcC5oYW5kaGVsZHMub3BlbmVtYmVkZGVkLzU4NTMwJz5oZXJlPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1yZW1vdmFsLW9mLXBhY2thZ2UtbWFuYWdlci1kYXRhYmFzZS13aXRoaW4taW1hZ2UtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmFsIG9mIFBhY2thZ2UgTWFuYWdlciBEYXRhYmFzZSBXaXRoaW4gSW1hZ2UgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaW1hZ2UgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IG5vIGxvbmdlciBhZGRzCisgICAgICAgICAgICA8ZmlsZW5hbWU+cmVtb3ZlX3BhY2thZ2luZ19kYXRhX2ZpbGVzPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCc+PGZpbGVuYW1lPlJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgVGhpcyBhZGRpdGlvbiBpcyBub3cgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gInBhY2thZ2UtbWFuYWdlbWVudCIKKyAgICAgICAgICAgIGlzIG5vdCBpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBJZiB5b3UgaGF2ZSBjdXN0b20gaW1hZ2UgcmVjaXBlcyB0aGF0IG1ha2UgdGhpcyBhZGRpdGlvbiwKKyAgICAgICAgICAgIHlvdSBzaG91bGQgcmVtb3ZlIHRoZSBsaW5lcywgYXMgdGhleSBhcmUgbm90IG5lZWRlZCBhbmQgbWlnaHQKKyAgICAgICAgICAgIGludGVyZmVyZSB3aXRoIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHBvc3RpbnN0YWxsIHNjcmlwdHMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1pbWFnZXMtbm93LXJlYnVpbGQtb25seS1vbi1jaGFuZ2VzLWluc3RlYWQtb2YtZXZlcnktdGltZSc+CisgICAgICAgIDx0aXRsZT5JbWFnZXMgTm93IFJlYnVpbGQgT25seSBvbiBDaGFuZ2VzIEluc3RlYWQgb2YgRXZlcnkgVGltZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBvdGhlciByZWxhdGVkIGltYWdlCisgICAgICAgICAgICBjb25zdHJ1Y3Rpb24gdGFza3MgYXJlIG5vIGxvbmdlciBtYXJrZWQgYXMgIm5vc3RhbXAiLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGV5IHdpbGwgb25seSBiZSByZS1leGVjdXRlZCB3aGVuIHRoZWlyIGlucHV0cyBoYXZlCisgICAgICAgICAgICBjaGFuZ2VkLgorICAgICAgICAgICAgUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWx3YXlzIHJlYnVpbHQKKyAgICAgICAgICAgIHRoZSBpbWFnZSB3aGVuIHJlcXVlc3RlZCByYXRoZXIgd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS10YXNrLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+VGFzayBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgPGZpbGVuYW1lPnRhc2suYmJjbGFzczwvZmlsZW5hbWU+IGhhcworICAgICAgICAgICAgbm93IGJlZW4gZHJvcHBlZC4KKyAgICAgICAgICAgIEZvciByZWNpcGVzIHRoYXQgcHJldmlvdXNseSBpbmhlcml0ZWQgZnJvbSB0aGlzIGNsYXNzLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICByZW5hbWUgdGhlbSBmcm9tIDxmaWxlbmFtZT50YXNrLSo8L2ZpbGVuYW1lPiB0bworICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC0qPC9maWxlbmFtZT4gYW5kIGluaGVyaXQgcGFja2FnZWdyb3VwCisgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2Vncm91cCc+PGZpbGVuYW1lPnBhY2thZ2Vncm91cC5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LWJ1c3lib3gnPgorICAgICAgICA8dGl0bGU+QnVzeUJveDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB3ZSBub3cgc3BsaXQgQnVzeUJveCBpbnRvIHR3byBiaW5hcmllczoKKyAgICAgICAgICAgIG9uZSB0aGF0IGlzIHN1aWQgcm9vdCBmb3IgdGhvc2UgY29tcG9uZW50cyB0aGF0IG5lZWQgaXQsIGFuZAorICAgICAgICAgICAgYW5vdGhlciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMuCisgICAgICAgICAgICBTcGxpdHRpbmcgQnVzeUJveCBhbGxvd3MgZm9yIG9wdGltaXphdGlvbiB0aGF0IGVsaW1pbmF0ZXMgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dGlueWxvZ2luPC9maWxlbmFtZT4gcmVjaXBlIGFzIHJlY29tbWVuZGVkIGJ5IHVwc3RyZWFtLgorICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoaXMgc3BsaXQgYnkgc2V0dGluZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVU1lCT1hfU1BMSVRfU1VJRCc+PGZpbGVuYW1lPkJVU1lCT1hfU1BMSVRfU1VJRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gIjAiLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtYXV0b21hdGVkLWltYWdlLXRlc3RpbmcnPgorICAgICAgICA8dGl0bGU+QXV0b21hdGVkIEltYWdlIFRlc3Rpbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQSBuZXcgYXV0b21hdGVkIGltYWdlIHRlc3RpbmcgZnJhbWV3b3JrIGhhcyBiZWVuIGFkZGVkCisgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdGVzdGltYWdlJz48ZmlsZW5hbWU+dGVzdGltYWdlKi5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIFRoaXMgZnJhbWV3b3JrIHJlcGxhY2VzIHRoZSBvbGRlcgorICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdldGVzdC1xZW11PC9maWxlbmFtZT4gZnJhbWV3b3JrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgcGVyZm9ybWluZyBhdXRvbWF0ZWQgaW1hZ2UgdGVzdHMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNS1idWlsZC1oaXN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIEhpc3Rvcnk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBjaGFuZ2VzIHRvIEJ1aWxkIEhpc3Rvcnk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxlZCBwYWNrYWdlIHNpemVzOgorICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLXNpemVzLnR4dDwvZmlsZW5hbWU+IGZvciBhbgorICAgICAgICAgICAgICAgICAgICAgaW1hZ2Ugbm93IHJlY29yZHMgdGhlIHNpemUgb2YgdGhlIGZpbGVzIGluc3RhbGxlZCBieSBlYWNoCisgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgZWFjaCBjb21wcmVzc2VkIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUgZmlsZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZXBlbmRlbmN5IGdyYXBocyAoPGZpbGVuYW1lPmRlcGVuZHMqLmRvdDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBub3cgdXNlIHRoZSBhY3R1YWwgcGFja2FnZSBuYW1lcyBpbnN0ZWFkIG9mIHJlcGxhY2luZworICAgICAgICAgICAgICAgICAgICBkYXNoZXMsIGRvdHMgYW5kIHBsdXMgc2lnbnMgd2l0aCB1bmRlcnNjb3Jlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS1kaWZmPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdXRpbGl0aWVzIGhhdmUgaW1wcm92ZWQgY29tbWFuZC1saW5lIGhhbmRsaW5nLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4tLWhlbHA8L2ZpbGVuYW1lPiBvcHRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIGVhY2ggdXRpbGl0eSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbmV3IHN5bnRheC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJ1aWxkIEhpc3RvcnksIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+TWFpbnRhaW5pbmcgQnVpbGQgT3V0cHV0IFF1YWxpdHk8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS41LXVkZXYnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgYXJlIGNoYW5nZXMgdG8gPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWRldjwvZmlsZW5hbWU+IG5vIGxvbmdlciBicmluZ3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXYtZXh0cmFjb25mPC9maWxlbmFtZT4gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBzaW5jZSB0aGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGJlIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0aGUgZXh0cmEgcnVsZXMsIHRoZW4gYWRkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51ZGV2LWV4dHJhY29uZjwvZmlsZW5hbWU+IHRvIHlvdXIgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBubyBsb25nZXIgYnJpbmdzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wY2l1dGlscy1pZHM8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNidXRpbHMtaWRzPC9maWxlbmFtZT4gdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgYXJlIG5vdCBuZWVkZWQgYnkgPGZpbGVuYW1lPnVkZXY8L2ZpbGVuYW1lPiBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlbW92aW5nIHRoZW0gc2F2ZXMgYXJvdW5kIDM1MEtCLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtcmVtb3ZlZC1yZW5hbWVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBhbmQgUmVuYW1lZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGludXgteW9jdG88L2ZpbGVuYW1lPiAzLjIga2VybmVsIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgcmVtb3ZlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidG9vbC1uYXRpdmVzZGs8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay1saWJ0b29sPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRpbnlsb2dpbjwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYSBzdWlkIHBvcnRpb24gb2YgQnVzeWJveC4KKyAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21pZ3JhdGlvbi0xLjUtYnVzeWJveCc+QnVzeUJveDwvbGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWwtcHl0aG9uLXRhcmJhbGw8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW5hbWVkCisgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPmJ1aWxkdG9vbHMtdGFyYmFsbDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53ZWItd2Via2l0PC9maWxlbmFtZT4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBJdCBoYXMgYmVlbiBmdW5jdGlvbmFsbHkgcmVwbGFjZWQgYnkKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlkb3JpPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWtlPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBJdCBpcyBubyBsb25nZXIgbmVlZGVkIGJ5IGFueSBvdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRyYW5zZmlnLW5hdGl2ZTwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgSXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSBhbnkgb3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hbmp1dGEtcmVtb3RlLXJ1bjwvZmlsZW5hbWU+IGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgQW5qdXRhIElERSBpbnRlZ3JhdGlvbiBoYXMgbm90IGJlZW4gb2ZmaWNpYWxseSBzdXBwb3J0ZWQgZm9yCisgICAgICAgICAgICAgICAgc2V2ZXJhbCByZWxlYXNlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjUtb3RoZXItY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5PdGhlciBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2Ygc2hvcnQgZW50cmllcyBkZXNjcmliaW5nIG90aGVyIGNoYW5nZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bi1wb3N0aW5zdHM8L2ZpbGVuYW1lPjogTWFrZSB0aGlzIGdlbmVyaWMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtZmlsZXM8L2ZpbGVuYW1lPjogUmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWVkaWEvPC9maWxlbmFtZT48cmVwbGFjZWFibGU+eHh4PC9yZXBsYWNlYWJsZT4gZGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFsc2Etc3RhdGU8L2ZpbGVuYW1lPjogUHJvdmlkZSBhbiBlbXB0eQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXNvdW5kLmNvbmY8L2ZpbGVuYW1lPiBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL2ltYWdlPC9maWxlbmFtZT46IEVuc3VyZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgcHJlLXJlbmFtZWQgcGFja2FnZSBuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jbGFzc2VzL3Jvb3Rmc19ycG08L2ZpbGVuYW1lPjogSW1wbGVtZW50CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQURfUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+QkFEX1JFQ09NTUVOREFUSU9OUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgUlBNLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjogUmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kX3VuaXRkaXI8L2ZpbGVuYW1lPiBpZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+IGlzIG5vdCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT46IFJlbW92ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdC5kPC9maWxlbmFtZT4gZGlyIGlmCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT4gdW5pdCBmaWxlIGlzIHByZXNlbnQgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXN2aW5pdDwvZmlsZW5hbWU+IGlzIG5vdCBhIGRpc3RybyBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJwYW08L2ZpbGVuYW1lPjogRGVueSBhbGwgc2VydmljZXMgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+T1RIRVI8L2ZpbGVuYW1lPiBlbnRyaWVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT46IE1vdmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnJ1bnRpbWVfbWFwcGluZ19yZW5hbWU8L2ZpbGVuYW1lPiB0byBhdm9pZAorICAgICAgICAgICAgICAgICAgICBjb25mbGljdCB3aXRoIDxmaWxlbmFtZT5tdWx0aWxpYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD00OTkzJz48ZmlsZW5hbWU+WU9DVE8gIzQ5OTM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIEJ1Z3ppbGxhIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saW51eC1kdGI8L2ZpbGVuYW1lPjogVXNlIGtlcm5lbCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdG8gZ2VuZXJhdGUgdGhlIDxmaWxlbmFtZT5kdGI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+a2Vybi10b29sczwvZmlsZW5hbWU+OiBTd2l0Y2ggZnJvbSBndWlsdCB0bworICAgICAgICAgICAgICAgICAgICBuZXcgPGZpbGVuYW1lPmtnaXQtczJxPC9maWxlbmFtZT4gdG9vbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21vdmluZy10by10aGUteW9jdG8tcHJvamVjdC0xLjYtcmVsZWFzZSc+CisgICAgPHRpdGxlPk1vdmluZyB0byB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIG1pZ3JhdGlvbiBpbmZvcm1hdGlvbiBmb3IgbW92aW5nIHRvIHRoZQorICAgICAgICBZb2N0byBQcm9qZWN0IDEuNiBSZWxlYXNlIGZyb20gdGhlIHByaW9yIHJlbGVhc2UuCisgICAgPC9wYXJhPgorCisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1hcmNoaXZlci1jbGFzcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPiBDbGFzczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWFyY2hpdmVyJz48ZmlsZW5hbWU+YXJjaGl2ZXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGhhcyBiZWVuIHJld3JpdHRlbiBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc2ltcGxpZmllZC4KKyAgICAgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHNvdXJjZSBhcmNoaXZlciwgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21haW50YWluaW5nLW9wZW4tc291cmNlLWxpY2Vuc2UtY29tcGxpYW5jZS1kdXJpbmcteW91ci1wcm9kdWN0cy1saWZlY3ljbGUnPk1haW50YWluaW5nIE9wZW4gU291cmNlIExpY2Vuc2UgQ29tcGxpYW5jZSBEdXJpbmcgWW91ciBQcm9kdWN0J3MgTGlmZWN5Y2xlPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXBhY2thZ2luZy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPlBhY2thZ2luZyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcGFja2FnaW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGU6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+IHJlY2lwZSBubyBsb25nZXIgcHJvZHVjZXMKKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+YmludXRpbHMtc3ltbGlua3M8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+IGlzIG5vdyB1c2VkIHRvCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSB0aGUgcHJlZmVycmVkIDxmaWxlbmFtZT5iaW51dGlsczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgb24gdGhlIHRhcmdldCBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YyAodHJhZmZpYyBjb250cm9sKSB1dGlsaXRpZXMgaGF2ZSBiZWVuIHNwbGl0IG91dCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgbWFpbiA8ZmlsZW5hbWU+aXByb3V0ZTI8L2ZpbGVuYW1lPiBwYWNrYWdlIGFuZCBwdXQKKyAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgPGZpbGVuYW1lPmlwcm91dGUyLXRjPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmd0ay1lbmdpbmVzPC9maWxlbmFtZT4gc2NoZW1hcyBoYXZlIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgbW92ZWQgdG8gYSBkZWRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmd0ay1lbmdpbmVzLXNjaGVtYXM8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXJtdjdhPC9maWxlbmFtZT4gd2l0aCB0aHVtYiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZSBzdWZmaXggaGFzIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzdWZmaXggZm9yIHRoZXNlIHBhY2thZ2VzIHdpdGggdGhlIHRodW1iCisgICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbiBlbmFibGVkIGlzICJ0MiIgYXMgaXQgc2hvdWxkIGJlLgorICAgICAgICAgICAgICAgICAgICBVc2Ugb2YgdGhpcyBzdWZmaXggd2FzIG5vdCB0aGUgY2FzZSBpbiB0aGUgMS41IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIEFyY2hpdGVjdHVyZSBuYW1lcyB3aWxsIGNoYW5nZSB3aXRoaW4gcGFja2FnZSBmZWVkcyBhcyBhCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UnPgorICAgICAgICA8dGl0bGU+Qml0QmFrZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8KKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtbWF0Y2hpbmctYnJhbmNoLXJlcXVpcmVtZW50LWZvci1naXQtZmV0Y2hpbmcnPgorICAgICAgICAgICAgPHRpdGxlPk1hdGNoaW5nIEJyYW5jaCBSZXF1aXJlbWVudCBmb3IgR2l0IEZldGNoaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiBmZXRjaGluZyBzb3VyY2UgZnJvbSBhIEdpdCByZXBvc2l0b3J5IHVzaW5nCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIEJpdEJha2Ugd2lsbCBub3cgdmFsaWRhdGUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhbHVlIGFnYWluc3QgdGhlIGJyYW5jaC4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdGhlIGJyYW5jaCB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImdpdDovL3NlcnZlci5uYW1lL3JlcG9zaXRvcnk7YnJhbmNoPTxyZXBsYWNlYWJsZT5icmFuY2huYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIGJyYW5jaCwgQml0QmFrZSBsb29rcworICAgICAgICAgICAgICAgIGluIHRoZSBkZWZhdWx0ICJtYXN0ZXIiIGJyYW5jaC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG5lZWQgdG8gYnlwYXNzIHRoaXMgY2hlY2sgKGUuZy4KKyAgICAgICAgICAgICAgICBpZiB5b3UgYXJlIGZldGNoaW5nIGEgcmV2aXNpb24gY29ycmVzcG9uZGluZyB0byBhIHRhZyB0aGF0CisgICAgICAgICAgICAgICAgaXMgbm90IG9uIGFueSBicmFuY2gpLCB5b3UgY2FuIGFkZCAiO25vYnJhbmNoPTEiIHRvCisgICAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgVVJMIHdpdGhpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYml0YmFrZS1kZXBzJz4KKyAgICAgICAgICAgIDx0aXRsZT5QeXRob24gRGVmaW5pdGlvbiBzdWJzdGl0dXRpb25zPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQml0QmFrZSBoYWQgc29tZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgUHl0aG9uIGRlZmluaXRpb25zCisgICAgICAgICAgICAgICAgd2l0aGluIGl0cyA8ZmlsZW5hbWU+YmI8L2ZpbGVuYW1lPiBtb2R1bGUgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGVpciBzdWItbW9kdWxlIGNvdW50ZXJwYXJ0cyBpbnN0ZWFkOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuTWFsZm9ybWVkVXJsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLmZldGNoLk1hbGZvcm1lZFVybDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuZmV0Y2guZW5jb2RldXJsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLmZldGNoLmVuY29kZXVybDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuZGVjb2RldXJsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLmZldGNoLmRlY29kZXVybDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi5ta2RpcmhpZXI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMubWtkaXJoaWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi5tb3ZlZmlsZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy5tb3ZlZmlsZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+YmIuY29weWZpbGU8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSA8ZmlsZW5hbWU+YmIudXRpbHMuY29weWZpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLndoaWNoPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLndoaWNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iYi52ZXJjbXBfc3RyaW5nPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmJiLnV0aWxzLnZlcmNtcF9zdHJpbmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJiLnZlcmNtcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIDxmaWxlbmFtZT5iYi51dGlscy52ZXJjbXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtYml0YmFrZS1mZXRjaGVyJz4KKyAgICAgICAgICAgIDx0aXRsZT5TVksgRmV0Y2hlcjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBTVksgZmV0Y2hlciBoYXMgYmVlbiByZW1vdmVkIGZyb20gQml0QmFrZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJpdGJha2UtY29uc29sZS1vdXRwdXQnPgorICAgICAgICAgICAgPHRpdGxlPkNvbnNvbGUgT3V0cHV0IEVycm9yIFJlZGlyZWN0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uc29sZSBVSSB3aWxsIG5vdyBvdXRwdXQgZXJyb3JzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnN0ZGVycjwvZmlsZW5hbWU+IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3Rkb3V0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgYXJlIHBpcGluZyBvciByZWRpcmVjdGluZyB0aGUgb3V0cHV0IG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiB0byBzb21ld2hlcmUgZWxzZSwgYW5kIHlvdSB3aXNoCisgICAgICAgICAgICAgICAgdG8gcmV0YWluIHRoZSBlcnJvcnMsIHlvdSB3aWxsIG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjI+JmFtcDsxPC9maWxlbmFtZT4gKG9yIHNvbWV0aGluZyBzaW1pbGFyKSB0byB0aGUKKyAgICAgICAgICAgICAgICBlbmQgb2YgeW91ciA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXRhc2stdGFza25hbWUtb3ZlcnJpZGVzJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+dGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+IE92ZXJyaWRlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50YXNrLTwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT4gb3ZlcnJpZGVzIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgIGFkanVzdGVkIHNvIHRoYXQgdGFza3Mgd2hvc2UgbmFtZXMgY29udGFpbiB1bmRlcnNjb3JlcyBoYXZlIHRoZQorICAgICAgICAgICAgICAgIHVuZGVyc2NvcmVzIHJlcGxhY2VkIGJ5IGh5cGhlbnMgZm9yIHRoZSBvdmVycmlkZSBzbyB0aGF0IHRoZXkKKyAgICAgICAgICAgICAgICBub3cgZnVuY3Rpb24gcHJvcGVybHkuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSB0YXNrIG92ZXJyaWRlIGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+dGFzay1wb3B1bGF0ZS1zZGs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+Q2hhbmdlcyB0byBWYXJpYWJsZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHZhcmlhYmxlcywgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+VmFyaWFibGVzIEdsb3NzYXJ5PC9saW5rPiIgQ2hhcHRlci4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtVE1QRElSJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2FuIG5vIGxvbmdlciBiZSBvbiBhbiBORlMgbW91bnQuCisgICAgICAgICAgICAgICAgTkZTIGRvZXMgbm90IG9mZmVyIGZ1bGwgUE9TSVggbG9ja2luZyBhbmQgaW5vZGUgY29uc2lzdGVuY3kKKyAgICAgICAgICAgICAgICBhbmQgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzIGlmIHVzZWQgdG8gc3RvcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBjaGVjayBmb3IgdGhpcyBvY2N1cnMgb24gc3RhcnR1cC4KKyAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gaXMgZGV0ZWN0ZWQgb24gYW4gTkZTIG1vdW50LAorICAgICAgICAgICAgICAgIGFuIGVycm9yIG9jY3Vycy4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtUFJJTkMnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5QUklOQzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUklOQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgdHJpZ2dlcnMgYSB3YXJuaW5nIGlmCisgICAgICAgICAgICAgICAgZGV0ZWN0ZWQgZHVyaW5nIGEgYnVpbGQuCisgICAgICAgICAgICAgICAgRm9yCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRzIG9uIGNoYW5nZXMsIHVzZSB0aGUgUFIgc2VydmljZSBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCB0aGlzIHNlcnZpY2UgaW4gdGhlCisgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3dvcmtpbmctd2l0aC1hLXByLXNlcnZpY2UnPldvcmtpbmcgV2l0aCBhIFBSIFNlcnZpY2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtSU1BR0VfVFlQRVMnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5JTUFHRV9UWVBFUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlICJzdW0uamZmczIiIG9wdGlvbiBmb3IKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9UWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSAiamZmczIuc3VtIiBvcHRpb24sIHdoaWNoIGZpdHMgdGhlCisgICAgICAgICAgICAgICAgcHJvY2Vzc2luZyBvcmRlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtQ09QWV9MSUNfTUFOSUZFU1QnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5DT1BZX0xJQ19NQU5JRkVTVDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBtdXN0CisgICAgICAgICAgICAgICAgbm93IGJlIHNldCB0byAiMSIgcmF0aGVyIHRoYW4gYW55IHZhbHVlIGluIG9yZGVyIHRvIGVuYWJsZQorICAgICAgICAgICAgICAgIGl0LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtdmFyaWFibGUtY2hhbmdlcy1DT1BZX0xJQ19ESVJTJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Q09QWV9MSUNfRElSUzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX0RJUlMnPjxmaWxlbmFtZT5DT1BZX0xJQ19ESVJTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgbXVzdAorICAgICAgICAgICAgICAgIG5vdyBiZSBzZXQgdG8gIjEiIHJhdGhlciB0aGFuIGFueSB2YWx1ZSBpbiBvcmRlciB0byBlbmFibGUKKyAgICAgICAgICAgICAgICBpdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtUEFDS0FHRV9HUk9VUCc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPlBBQ0tBR0VfR1JPVVA8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0dST1VQJz48ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHZhcmlhYmxlIGhhcyBiZWVuIHJlbmFtZWQgdG8KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+PGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0byBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdCBpdHMgcHVycG9zZS4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHN0aWxsIHVzZSA8ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+IGJ1dAorICAgICAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHByb2R1Y2VzIGEgd2FybmluZyBtZXNzYWdlIHdoZW4KKyAgICAgICAgICAgICAgICBpdCBlbmNvdW50ZXJzIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXZhcmlhYmxlLWNoYW5nZXMtdmFyaWFibGUtZW50cnktYmVoYXZpb3InPgorICAgICAgICAgICAgPHRpdGxlPlByZXByb2Nlc3MgYW5kIFBvc3QgUHJvY2VzcyBDb21tYW5kIFZhcmlhYmxlIEJlaGF2aW9yPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbm93IGV4cGVjdCBhIHNlbWljb2xvbiBzZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFuZCBub3QgYXJiaXRyYXJ5IHNoZWxsIGNvbW1hbmRzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnPlJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCc+Uk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfUE9TVFBST0NFU1NfQ09NTUFORCc+U0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCc+UE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQnPlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORDwvbGluaz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnPklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnPklNQUdFX1BSRVBST0NFU1NfQ09NTUFORDwvbGluaz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQnPlJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQ8L2xpbms+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlNfUE9TVElOU1RBTExfQ09NTUFORCc+Uk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQ8L2xpbms+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEZvciBtaWdyYXRpb24gcHVycG9zZXMsIHlvdSBjYW4gc2ltcGx5IHdyYXAgc2hlbGwgY29tbWFuZHMgaW4KKyAgICAgICAgICAgICAgICBhIHNoZWxsIGZ1bmN0aW9uIGFuZCB0aGVuIGNhbGwgdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG15X3Bvc3Rwcm9jZXNzX2Z1bmN0aW9uKCkgeworICAgICAgICBlY2hvICJoZWxsbyIgPiAke0lNQUdFX1JPT1RGU30vaGVsbG8udHh0CisgICAgIH0KKyAgICAgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIm15X3Bvc3Rwcm9jZXNzX2Z1bmN0aW9uOyAiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtZGlyZWN0b3J5LWxheW91dC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkRpcmVjdG9yeSBMYXlvdXQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtaG9iPC9maWxlbmFtZT4gbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tCisgICAgICAgICAgICB0aGUgdG9wLWxldmVsIG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgbGF5ZXIgYXJlIG5vIGxvbmdlciBuZWVkZWQgYnkgdGhlIEhvYgorICAgICAgICAgICAgdXNlciBpbnRlcmZhY2UgZm9yIGJ1aWxkaW5nIGltYWdlcyBhbmQgdG9vbGNoYWlucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXBhY2thZ2UtdGVzdC1wdGVzdCc+CisgICAgICAgIDx0aXRsZT5QYWNrYWdlIFRlc3QgKHB0ZXN0KTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBQYWNrYWdlIFRlc3RzIChwdGVzdCkgYXJlIGJ1aWx0IGJ1dCBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdXNpbmcgUGFja2FnZSBUZXN0cywgc2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+U2V0dGluZyB1cCBhbmQgcnVubmluZyBwYWNrYWdlIHRlc3QgKHB0ZXN0KTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT5wdGVzdDwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcHRlc3QnPjxmaWxlbmFtZT5wdGVzdC5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWJ1aWxkLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+QnVpbGQgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTZXBhcmF0ZSBidWlsZCBhbmQgc291cmNlIGRpcmVjdG9yaWVzIGhhdmUgYmVlbiBlbmFibGVkCisgICAgICAgICAgICBieSBkZWZhdWx0IGZvciBzZWxlY3RlZCByZWNpcGVzIHdoZXJlIGl0IGlzIGtub3duIHRvIHdvcmsKKyAgICAgICAgICAgIChhIHdoaXRlbGlzdCkgYW5kIGZvciBhbGwgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jbWFrZSc+PGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgIEluIGZ1dHVyZSByZWxlYXNlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3Mgd2lsbCBlbmFibGUgYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgYnkgZGVmYXVsdCBhcworICAgICAgICAgICAgd2VsbC4KKyAgICAgICAgICAgIFJlY2lwZXMgYnVpbGRpbmcgQXV0b3Rvb2xzLWJhc2VkCisgICAgICAgICAgICBzb2Z0d2FyZSB0aGF0IGZhaWxzIHRvIGJ1aWxkIHdpdGggYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkKKyAgICAgICAgICAgIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGluaGVyaXQgZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scy1icm9rZW5zZXAnPjxmaWxlbmFtZT5hdXRvdG9vbHMtYnJva2Vuc2VwPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBpbnN0ZWFkIG9mIHRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1idWlsZGluZy1xZW11LW5hdGl2ZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cWVtdS1uYXRpdmU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+cWVtdS1uYXRpdmU8L2ZpbGVuYW1lPiBub3cgYnVpbGRzIHdpdGhvdXQKKyAgICAgICAgICAgIFNETC1iYXNlZCBncmFwaGljYWwgb3V0cHV0IHN1cHBvcnQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBsaW5lcyBhcmUgbmVlZGVkIGluIHlvdXIKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gdG8gZW5hYmxlIGl0OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX3BuLXFlbXUtbmF0aXZlID0gInNkbCIKKyAgICAgQVNTVU1FX1BST1ZJREVEICs9ICJsaWJzZGwtbmF0aXZlIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZXNlIHN0YXRlbWVudHMuCisgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgaGVhZGxlc3Mgc3lzdGVtIGFuZCB1c2luZworICAgICAgICAgICAgICAgIGEgZGVmYXVsdCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHlvdSB3aWxsIG5lZWQKKyAgICAgICAgICAgICAgICBjb21tZW50IHRoZXNlIHR3byBsaW5lcyBvdXQuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1jb3JlLWltYWdlLWJhc2ljJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5jb3JlLWltYWdlLWJhc2ljPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtYmFzaWM8L2ZpbGVuYW1lPiBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1mdWxsLWNtZGxpbmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gPGZpbGVuYW1lPmNvcmUtaW1hZ2UtYmFzaWM8L2ZpbGVuYW1lPiBiZWluZyByZW5hbWVkLAorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWJhc2ljPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+IHRvIG1hdGNoLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtbGljZW5zaW5nJz4KKyAgICAgICAgPHRpdGxlPkxpY2Vuc2luZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgdG9wLWxldmVsIDxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT4gZmlsZSBoYXMgYmVlbiBjaGFuZ2VkCisgICAgICAgICAgICB0byBiZXR0ZXIgZGVzY3JpYmUgdGhlIGxpY2Vuc2Ugb2YgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZgorICAgICAgICAgICAgT0UtQ29yZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBsaWNlbnNpbmcgaXRzZWxmIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBOb3JtYWxseSwgdGhpcyBjaGFuZ2Ugd291bGQgbm90IGNhdXNlIGFueSBzaWRlLWVmZmVjdHMuCisgICAgICAgICAgICBIb3dldmVyLCBzb21lIHJlY2lwZXMgcG9pbnQgdG8gdGhpcyBmaWxlIHdpdGhpbgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPjxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAoYXMgPGZpbGVuYW1lPiR7Q09SRUJBU0V9L0xJQ0VOU0U8L2ZpbGVuYW1lPikgYW5kIHRodXMgdGhlCisgICAgICAgICAgICBhY2NvbXBhbnlpbmcgY2hlY2tzdW0gbXVzdCBiZSBjaGFuZ2VkIGZyb20KKyAgICAgICAgICAgIDNmNDBkNzk5NDM5NzEwOTI4NWVjN2I4MWZkZWIzYjU4IHRvCisgICAgICAgICAgICA0ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MC4KKyAgICAgICAgICAgIEEgYmV0dGVyIGFsdGVybmF0aXZlIGlzIHRvIGhhdmUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gcG9pbnQgdG8gYSBmaWxlCisgICAgICAgICAgICBkZXNjcmliaW5nIHRoZSBsaWNlbnNlIHRoYXQgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgc291cmNlCisgICAgICAgICAgICB0aGF0IHRoZSByZWNpcGUgaXMgYnVpbGRpbmcsIGlmIHBvc3NpYmxlLCByYXRoZXIgdGhhbiBwb2ludGluZworICAgICAgICAgICAgdG8gPGZpbGVuYW1lPiR7Q09SRUJBU0V9L0xJQ0VOU0U8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWNmbGFncy1vcHRpb25zJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPiBPcHRpb25zPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSAiLWZwZXJtaXNzaXZlIiBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz48ZmlsZW5hbWU+Q0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIHRha2UgYWN0aW9uIG9uIGluZGl2aWR1YWwgcmVjaXBlcyB0aGF0IGZhaWwgd2hlbgorICAgICAgICAgICAgYnVpbGRpbmcgd2l0aCB0aGlzIG9wdGlvbi4KKyAgICAgICAgICAgIFlvdSBuZWVkIHRvIGVpdGhlciBwYXRjaCB0aGUgcmVjaXBlcyB0byBmaXggdGhlIGlzc3VlcyByZXBvcnRlZCBieQorICAgICAgICAgICAgdGhlIGNvbXBpbGVyLCBvciB5b3UgbmVlZCB0byBhZGQgIi1mcGVybWlzc2l2ZSIgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPiBpbiB0aGUgcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LWN1c3RvbS1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+Q3VzdG9tIEltYWdlIE91dHB1dCBUeXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDdXN0b20gaW1hZ2Ugb3V0cHV0IHR5cGVzLCBhcyBzZWxlY3RlZCB1c2luZworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgbXVzdCBkZWNsYXJlIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBpbWFnZSB0eXBlcyAoaWYgYW55KSB1c2luZworICAgICAgICAgICAgYSBuZXcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9UWVBFREVQJz48ZmlsZW5hbWU+SU1BR0VfVFlQRURFUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNi1kby1wYWNrYWdlLXdyaXRlLXRhc2snPgorICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlPC9maWxlbmFtZT4gdGFzayBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAgICAgVGhlIHRhc2sgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS42LXVwZGF0ZS1hbHRlcm5hdGl2ZXMtcHJvdmlkZXInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZTwvZmlsZW5hbWU+IFByb3ZpZGVyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4gcHJvdmlkZXIgaGFzCisgICAgICAgICAgICBiZWVuIGNoYW5nZWQgZnJvbSA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+b3BrZy11dGlsczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhpcyBjaGFuZ2UgcmVzb2x2ZXMgc29tZSB0cm91Ymxlc29tZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBUaGUgcnVudGltZSBwYWNrYWdlIGhhcyBhbHNvIGJlZW4gcmVuYW1lZCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdG8gPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtdmlydGNsYXNzLW92ZXJyaWRlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+dmlydGNsYXNzPC9maWxlbmFtZT4gT3ZlcnJpZGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+dmlydGNsYXNzPC9maWxlbmFtZT4gb3ZlcnJpZGVzIGFyZSBub3cgZGVwcmVjYXRlZC4KKyAgICAgICAgICAgIFVzZSB0aGUgZXF1aXZhbGVudCBjbGFzcyBvdmVycmlkZXMgaW5zdGVhZCAoZS5nLgorICAgICAgICAgICAgPGZpbGVuYW1lPnZpcnRjbGFzcy1uYXRpdmU8L2ZpbGVuYW1lPiBiZWNvbWVzCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y2xhc3MtbmF0aXZlPC9maWxlbmFtZT4uKQorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtcmVtb3ZlZC1yZW5hbWVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBhbmQgUmVuYW1lZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtdG9vbHNldC1uYXRpdmU8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIGxhcmdlbHkgdW51c2VkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuODwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIExpbnV4IHlvY3RvIDMuOCBrZXJuZWwgaGFzIGJlZW4gZHJvcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIDMuMTAgYW5kIDMuMTQga2VybmVscyBoYXZlIGJlZW4gYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTA8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLTMuMTQ8L2ZpbGVuYW1lPiByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm9jZi1saW51eDwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaGFzIGJlZW4gZnVuY3Rpb25hbGx5IHJlcGxhY2VkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcnlwdG9kZXYtbGludXg8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nZW5leHQyZnM8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nZW5leHQyZnM8L2ZpbGVuYW1lPiBpcyBubyBsb25nZXIgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGFuZCBpcyB1bm1haW50YWluZWQgdXBzdHJlYW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+anM8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJvdmlkZWQgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIE1vemlsbGEncyBqYXZhc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGVuZ2luZSB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+emF1cnVzZDwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaGFuZGhlbGQ8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5lZ2xpYmMgMi4xNzwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgUmVwbGFjZWQgYnkgdGhlIDxmaWxlbmFtZT5lZ2xpYmMgMi4xOTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2MgNC43LjI8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFJlcGxhY2VkIGJ5IHRoZSBub3cgc3RhYmxlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MgNC44LjI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5leHRlcm5hbC1zb3VyY2VyeS10b29sY2hhaW48L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIHRoaXMgcmVjaXBlIGlzIG5vdyBtYWludGFpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1zb3VyY2VyeTwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpbnV4LWxpYmMtaGVhZGVycy15b2N0byAzLjQrZ2l0PC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBOb3cgdXNpbmcgdmVyc2lvbiAzLjEwIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtbGliYy1oZWFkZXJzPC9maWxlbmFtZT4gYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5tZXRhLXRvb2xjaGFpbi1nbWFlPC9maWxlbmFtZT4gLQorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBvYnNvbGV0ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS1zZGstZ21hZTwvZmlsZW5hbWU+IC0KKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1nbWFlLXNkay10YXJnZXQ8L2ZpbGVuYW1lPiAtCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtcmVtb3ZlZC1jbGFzc2VzJz4KKyAgICAgICAgPHRpdGxlPlJlbW92ZWQgQ2xhc3NlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGNsYXNzZXMgaGF2ZSBiZWNvbWUgb2Jzb2xldGUgYW5kIGhhdmUgYmVlbiByZW1vdmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm1vZHVsZV9zdHJpcDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cGtnX21ldGFpbmZvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5wa2dfZGlzdHJpYnV0ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW1hZ2UtZW1wdHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjYtcmVmZXJlbmNlLWJzcHMnPgorICAgICAgICA8dGl0bGU+UmVmZXJlbmNlIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIEJTUHMgY2hhbmdlcyBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBCZWFnbGVCb2FyZAorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmJlYWdsZWJvYXJkPC9maWxlbmFtZT4pIEFSTSByZWZlcmVuY2UgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIEJlYWdsZUJvbmUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5iZWFnbGVib25lPC9maWxlbmFtZT4pIGhhcmR3YXJlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlIFJvdXRlclN0YXRpb24gUHJvCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+cm91dGVyc3RhdGlvbnBybzwvZmlsZW5hbWU+KSBNSVBTIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgRWRnZVJvdXRlciBMaXRlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZWRnZXJvdXRlcjwvZmlsZW5hbWU+KSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIFRoZSBwcmV2aW91cyByZWZlcmVuY2UgQlNQcyBmb3IgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmVhZ2xlYm9hcmQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5yb3V0ZXJzdGF0aW9ucHJvPC9maWxlbmFtZT4gbWFjaGluZXMgYXJlIHN0aWxsIGF2YWlsYWJsZQorICAgICAgICAgICAgaW4gYSBuZXcgPGZpbGVuYW1lPm1ldGEteW9jdG8tYnNwLW9sZDwvZmlsZW5hbWU+IGxheWVyIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7Jz5Tb3VyY2UgUmVwb3NpdG9yaWVzPC91bGluaz4KKyAgICAgICAgICAgIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvLWJzcC1vbGQvJz5odHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLXlvY3RvLWJzcC1vbGQvPC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS43LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS43IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjcgUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWNoYW5nZXMtdG8tc2V0dGluZy1xZW11LXBhY2thZ2Vjb25maWctb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT5DaGFuZ2VzIHRvIFNldHRpbmcgUUVNVSA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IE9wdGlvbnMgaW4gPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgUUVNVSByZWNpcGUgbm93IHVzZXMgYSBudW1iZXIgb2YKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFQ09ORklHJz48ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3B0aW9ucyB0byBlbmFibGUgdmFyaW91cyBvcHRpb25hbCBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZSBtZXRob2QgdXNlZCB0byBzZXQgZGVmYXVsdHMgZm9yIHRoZXNlIG9wdGlvbnMgbWVhbnMgdGhhdAorICAgICAgICAgICAgZXhpc3RpbmcKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZXMgd2lsbCBuZWVkIHRvIGJlIGJlCisgICAgICAgICAgICBtb2RpZmllZCB0byBhcHBlbmQgdG8gPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBmb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11LW5hdGl2ZTwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay1xZW11PC9maWxlbmFtZT4gaW5zdGVhZCBvZiBzZXR0aW5nIGl0LgorICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRvIGVuYWJsZSBncmFwaGljYWwgb3V0cHV0IGZvciBRRU1VLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICBub3cgaGF2ZSB0aGVzZSBsaW5lcyBpbiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1xZW11LW5hdGl2ZSA9ICIgc2RsIgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZF9wbi1uYXRpdmVzZGstcWVtdSA9ICIgc2RsIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctbWluaW11bS1naXQtdmVyc2lvbic+CisgICAgICAgIDx0aXRsZT5NaW5pbXVtIEdpdCB2ZXJzaW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtaW5pbXVtCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHZlcnNpb24gcmVxdWlyZWQKKyAgICAgICAgICAgIG9uIHRoZSBidWlsZCBob3N0IGlzIG5vdyAxLjcuOCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi0tbGlzdDwvZmlsZW5hbWU+IG9wdGlvbiBpcyBub3cgcmVxdWlyZWQgYnkKKyAgICAgICAgICAgIEJpdEJha2UncyBHaXQgZmV0Y2hlci4KKyAgICAgICAgICAgIEFzIGFsd2F5cywgaWYgeW91ciBob3N0IGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBwcm92aWRlIGEgdmVyc2lvbiBvZgorICAgICAgICAgICAgR2l0IHRoYXQgbWVldHMgdGhpcyByZXF1aXJlbWVudCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGR0b29scy10YXJiYWxsPC9maWxlbmFtZT4gdGhhdCBkb2VzLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlcXVpcmVkLWdpdC10YXItYW5kLXB5dGhvbi12ZXJzaW9ucyc+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWF1dG90b29scy1jbGFzcy1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPkF1dG90b29scyBDbGFzcyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MgY2hhbmdlcyBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgaXMgbm93IHVzZWQgYnkgZGVmYXVsdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGEgZGlyZWN0b3J5IGZvciBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QiAhPSBTPC9maWxlbmFtZT4sIG9yIGFuIG91dC1vZi10cmVlIGJ1aWxkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+SWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGlzIGFscmVhZHkgY2FwYWJsZSBvZgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBpbiBhIGRpcmVjdG9yeSBzZXBhcmF0ZSBmcm9tIHRoZSBzb3VyY2UsIHlvdQorICAgICAgICAgICAgICAgICAgICBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgdGhlIHNvZnR3YXJlIGlzIG5vdCBjYXBhYmxlIG9mIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgbWFubmVyLCB5b3Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBuZWVkIHRvIGVpdGhlciBwYXRjaCB0aGUgc29mdHdhcmUgc28gdGhhdCBpdCBjYW4gYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVseSwgb3IgeW91IHdpbGwgbmVlZCB0byBjaGFuZ2UgdGhlIHJlY2lwZSB0bworICAgICAgICAgICAgICAgICAgICBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpbnN0ZWFkIG9mIHRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LS1mb3JlaWduPC9maWxlbmFtZT4gb3B0aW9uIGlzCisgICAgICAgICAgICAgICAgICAgIG5vIGxvbmdlciBwYXNzZWQgdG8gPGZpbGVuYW1lPmF1dG9tYWtlPC9maWxlbmFtZT4gd2hlbgorICAgICAgICAgICAgICAgICAgICBydW5uaW5nIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgb3B0aW9uIHRlbGxzIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+IHRoYXQgYQorICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHNvZnR3YXJlIHBhY2thZ2UgZG9lcyBub3QgZm9sbG93IHRoZSBHTlUKKyAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRzIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgICB0byBkaXN0cmlidXRlIGNlcnRhaW4gZmlsZXMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q2hhbmdlTG9nPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BVVRIT1JTPC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgbWFqb3JpdHkgb2YgdXBzdHJlYW0gc29mdHdhcmUgcGFja2FnZXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICB0ZWxsIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+IHRvIGVuYWJsZSBmb3JlaWduIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcywgdGhlIG9wdGlvbiBpcyBtb3N0bHkgc3VwZXJmbHVvdXMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgcmVjaXBlcyB3aWxsIG5lZWQgcGF0Y2hlcyBmb3IgdGhpcyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZWFzaWx5IG1ha2UgdGhlIGNoYW5nZSBieSBwYXRjaGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlLmFjPC9maWxlbmFtZT4gc28gdGhhdCBpdCBwYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgImZvcmVpZ24iIHRvIDxmaWxlbmFtZT5BTV9JTklUX0FVVE9NQUtFKCk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvY29tbWl0Lz9pZD0wMTk0MzE4OGY4NWNlNjQxMTcxN2ZiNWJmNzAyZDYwOWY1NTgxM2YyJz50aGlzIGNvbW1pdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIG1ha2UgdGhlIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctYmluYXJ5LWNvbmZpZ3VyYXRpb24tc2NyaXB0cy1kaXNhYmxlZCc+CisgICAgICAgIDx0aXRsZT5CaW5hcnkgQ29uZmlndXJhdGlvbiBTY3JpcHRzIERpc2FibGVkPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgb2YgdGhlIGNvcmUgcmVjaXBlcyB0aGF0IHBhY2thZ2UgYmluYXJ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cworICAgICAgICAgICAgbm93IGRpc2FibGUgdGhlIHNjcmlwdHMgZHVlIHRvIHRoZQorICAgICAgICAgICAgc2NyaXB0cyBwcmV2aW91c2x5IHJlcXVpcmluZyBlcnJvci1wcm9uZSBwYXRoIHN1YnN0aXR1dGlvbi4KKyAgICAgICAgICAgIFNvZnR3YXJlIHRoYXQgbGlua3MgYWdhaW5zdCB0aGVzZSBsaWJyYXJpZXMgdXNpbmcgdGhlc2Ugc2NyaXB0cworICAgICAgICAgICAgc2hvdWxkIHVzZSB0aGUgbXVjaCBtb3JlIHJvYnVzdCA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICBpbnN0ZWFkLgorICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcmVjaXBlcyBjaGFuZ2VkIGluIHRoaXMgdmVyc2lvbiAoYW5kIHRoZWlyCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIHNjcmlwdHMpIGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRpcmVjdGZiIChkaXJlY3RmYi1jb25maWcpCisgICAgIGZyZWV0eXBlIChmcmVldHlwZS1jb25maWcpCisgICAgIGdwZ21lIChncGdtZS1jb25maWcpCisgICAgIGxpYmFzc3VhbiAobGliYXNzdWFuLWNvbmZpZykKKyAgICAgbGliY3JvY28gKGNyb2NvLTYuMC1jb25maWcpCisgICAgIGxpYmdjcnlwdCAobGliZ2NyeXB0LWNvbmZpZykKKyAgICAgbGliZ3BnLWVycm9yIChncGctZXJyb3ItY29uZmlnKQorICAgICBsaWJrc2JhIChrc2JhLWNvbmZpZykKKyAgICAgbGlicGNhcCAocGNhcC1jb25maWcpCisgICAgIGxpYnBjcmUgKHBjcmUtY29uZmlnKQorICAgICBsaWJwbmcgKGxpYnBuZy1jb25maWcsIGxpYnBuZzE2LWNvbmZpZykKKyAgICAgbGlic2RsIChzZGwtY29uZmlnKQorICAgICBsaWJ1c2ItY29tcGF0IChsaWJ1c2ItY29uZmlnKQorICAgICBsaWJ4bWwyICh4bWwyLWNvbmZpZykKKyAgICAgbGlieHNsdCAoeHNsdC1jb25maWcpCisgICAgIG5jdXJzZXMgKG5jdXJzZXMtY29uZmlnKQorICAgICBuZW9uIChuZW9uLWNvbmZpZykKKyAgICAgbnB0aCAobnB0aC1jb25maWcpCisgICAgIHB0aCAocHRoLWNvbmZpZykKKyAgICAgdGFnbGliICh0YWdsaWItY29uZmlnKQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgQWRkaXRpb25hbGx5LCBzdXBwb3J0IGZvciA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGhhcyBiZWVuCisgICAgICAgICAgICBhZGRlZCB0byBzb21lIHJlY2lwZXMgaW4gdGhlIHByZXZpb3VzIGxpc3QgaW4gdGhlIHJhcmUgY2FzZXMKKyAgICAgICAgICAgIHdoZXJlIHRoZSB1cHN0cmVhbSBzb2Z0d2FyZSBwYWNrYWdlIGRvZXMgbm90IGFscmVhZHkgcHJvdmlkZQorICAgICAgICAgICAgaXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1nbGliYy1yZXBsYWNlcy1lZ2xpYmMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmVnbGliYyAyLjE5PC9maWxlbmFtZT4gUmVwbGFjZWQgd2l0aCA8ZmlsZW5hbWU+Z2xpYmMgMi4yMDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgPGZpbGVuYW1lPmVnbGliYzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gd2VyZSBhbHJlYWR5IGZhaXJseSBjbG9zZSwgdGhpcworICAgICAgICAgICAgcmVwbGFjZW1lbnQgc2hvdWxkIG5vdCByZXF1aXJlIGFueSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIG90aGVyCisgICAgICAgICAgICBzb2Z0d2FyZSB0aGF0IGxpbmtzIHRvIDxmaWxlbmFtZT5lZ2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZXJlIHdlcmUgYSBudW1iZXIgb2YgbWlub3IgY2hhbmdlcyBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPiB1cHN0cmVhbSB0aGF0IGNvdWxkIHJlcXVpcmUKKyAgICAgICAgICAgIHBhdGNoaW5nIHNvbWUgc29mdHdhcmUgKGUuZy4gdGhlIHJlbW92YWwgb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+X0JTRF9TT1VSQ0U8L2ZpbGVuYW1lPiBmZWF0dXJlIHRlc3QgbWFjcm8pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmMgMi4yMDwvZmlsZW5hbWU+IHJlcXVpcmVzIHZlcnNpb24gMi42LjMyIG9yIGdyZWF0ZXIKKyAgICAgICAgICAgIG9mIHRoZSBMaW51eCBrZXJuZWwuCisgICAgICAgICAgICBUaHVzLCBvbGRlciBrZXJuZWxzIHdpbGwgbm8gbG9uZ2VyIGJlIHVzYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIGl0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZnVsbCBkZXRhaWxzIG9uIHRoZSBjaGFuZ2VzIGluIDxmaWxlbmFtZT5nbGliYyAyLjIwPC9maWxlbmFtZT4sCisgICAgICAgICAgICBzZWUgdGhlIHVwc3RyZWFtIHJlbGVhc2Ugbm90ZXMKKyAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1hbHBoYS8yMDE0LTA5L21zZzAwMDg4Lmh0bWwnPmhlcmU8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS43LWtlcm5lbC1tb2R1bGUtYXV0b2xvYWRpbmcnPgorICAgICAgICA8dGl0bGU+S2VybmVsIE1vZHVsZSBBdXRvbG9hZGluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1tb2R1bGVfYXV0b2xvYWQnPjxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWRfKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgaXMgbm93IGRlcHJlY2F0ZWQgYW5kIGEgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9BVVRPTE9BRCc+PGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICAgICBBbHNvLAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLW1vZHVsZV9jb25mJz48ZmlsZW5hbWU+bW9kdWxlX2NvbmZfKjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgbXVzdCBub3cgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgbmV3CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBUaGUgbmV3IHZhcmlhYmxlcyBubyBsb25nZXIgcmVxdWlyZSB5b3UgdG8gc3BlY2lmeSB0aGUgbW9kdWxlIG5hbWUKKyAgICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIHZhcmlhYmxlIG5hbWUuCisgICAgICAgICAgICBUaGlzIGNoYW5nZSBub3Qgb25seSBzaW1wbGlmaWVzIHVzYWdlIGJ1dCBhbHNvIGFsbG93cyB0aGUgdmFsdWVzCisgICAgICAgICAgICBvZiB0aGVzZSB2YXJpYWJsZXMgdG8gYmUgYXBwcm9wcmlhdGVseSBpbmNvcnBvcmF0ZWQgaW50byB0YXNrCisgICAgICAgICAgICBzaWduYXR1cmVzIGFuZCB0aHVzIHRyaWdnZXIgdGhlIGFwcHJvcHJpYXRlIHRhc2tzIHRvIHJlLWV4ZWN1dGUKKyAgICAgICAgICAgIHdoZW4gY2hhbmdlZC4KKyAgICAgICAgICAgIFlvdSBzaG91bGQgcmVwbGFjZSBhbnkgcmVmZXJlbmNlcyB0bworICAgICAgICAgICAgPGZpbGVuYW1lPm1vZHVsZV9hdXRvbG9hZF8qPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiwgYW5kIGFkZCBhbnkgbW9kdWxlcworICAgICAgICAgICAgZm9yIHdoaWNoIDxmaWxlbmFtZT5tb2R1bGVfY29uZl8qPC9maWxlbmFtZT4gaXMgc3BlY2lmaWVkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9QUk9CRUNPTkY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J21pZ3JhdGlvbi0xLjctcWEtY2hlY2stY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5RQSBDaGVjayBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIG9jY3VycmVkIHRvIHRoZSBRQSBjaGVjayBwcm9jZXNzOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgUUEgY2hlY2tzIDxmaWxlbmFtZT5maWxlLXJkZXBzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5idWlsZC1kZXBzPC9maWxlbmFtZT4gaGF2ZSBiZWVuIGFkZGVkIGluCisgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGZpbGUgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gcGFja2FnZSBjb250YWlucyBhIHNjcmlwdCByZXF1aXJpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaW4vYmFzaDwvZmlsZW5hbWU+KSBhbmQgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIGRlY2xhcmVkLCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgUUEgY2hlY2tzIGFyZSBub3cgcGVyZm9ybWVkIGR1cmluZyBhIG5ldworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV9xYSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayByYXRoZXIgdGhhbiBiZWluZyBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgbW9yZSBwYXJhbGxlbCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhbmdlIGlzIHVubGlrZWx5IHRvIGJlIGFuIGlzc3VlIGV4Y2VwdCBmb3IgaGlnaGx5CisgICAgICAgICAgICAgICAgICAgIGN1c3RvbWl6ZWQgcmVjaXBlcyB0aGF0IGRpc2FibGUgcGFja2FnaW5nIHRhc2tzIHRoZW1zZWx2ZXMKKyAgICAgICAgICAgICAgICAgICAgYnkgbWFya2luZyB0aGVtIGFzIDxmaWxlbmFtZT5ub2V4ZWM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRob3NlIHBhY2thZ2VzLCB5b3Ugd2lsbCBuZWVkIHRvIGRpc2FibGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3FhPC9maWxlbmFtZT4gdGFzayBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZpbGVzIGJlaW5nIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgbm93IHRyaWdnZXIgYW4gZXJyb3IgaW5zdGVhZCBvZiBhIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgICAgIFJlY2lwZXMgc2hvdWxkIG5vdCBiZSBvdmVyd3JpdGluZyBmaWxlcyB3cml0dGVuIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IGJ5IG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIHRoZXNlIHR5cGVzIG9mIHJlY2lwZXMsIHlvdSBuZWVkIHRvIGFsdGVyIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgc28gdGhhdCB0aGV5IGRvIG5vdCBvdmVyd3JpdGUgdGhlc2UgZmlsZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3UgbWlnaHQgbm93IHJlY2VpdmUgdGhpcyBlcnJvciBhZnRlciBjaGFuZ2VzIGluCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3IgbWV0YWRhdGEgcmVzdWx0aW5nIGluIG9ycGhhbmVkIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGxlZnQgaW4gdGhlIHN5c3Jvb3QuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyByZWNlaXZlIHRoaXMgZXJyb3IsIHRoZSB3YXkgdG8gcmVzb2x2ZSB0aGUgaXNzdWUKKyAgICAgICAgICAgICAgICAgICAgaXMgdG8gZGVsZXRlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvciB0byBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5IGFuZCB0aGVuIHJlLXN0YXJ0IHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgQW55dGhpbmcgdGhhdCBoYXMgYmVlbiBmdWxseSBidWlsdCB1cCB0byB0aGF0IHBvaW50IGFuZAorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBuZWVkIHJlYnVpbGRpbmcgd2lsbCBiZSByZXN0b3JlZCBmcm9tIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgY2FjaGUgYW5kIHRoZSByZXN0IG9mIHRoZSBidWlsZCB3aWxsIGJlIGFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgcHJvY2VlZCBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1yZW1vdmVkLXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVtb3ZlZCBSZWNpcGVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVjaXBlcyBoYXZlIGJlZW4gcmVtb3ZlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eC1sb2FkPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVjaXBlIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgVS1ib290IFNQTCBmb3IgYWxsIENvcnRleC1iYXNlZCBUSSBTb0NzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbGVnYWN5IGJvYXJkcywgdGhlIDxmaWxlbmFtZT5tZXRhLXRpPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIHdoaWNoIGNvbnRhaW5zIGEgbWFpbnRhaW5lZCByZWNpcGUsIHNob3VsZCBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVib290Y2hhcnQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNpcGUgaXMgb2Jzb2xldGUuCisgICAgICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmJvb3RjaGFydDI8L2ZpbGVuYW1lPiByZWNpcGUgaGFzIGJlZW4gYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gZnVuY3Rpb25hbGx5IHJlcGxhY2UgaXQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvIDMuNDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgbGludXgteW9jdG8gMy40IGtlcm5lbCBoYXMgYmVlbiBkcm9wcGVkLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGUgMy4xMCBhbmQgMy4xNCBrZXJuZWxzIHJlbWFpbnMsIHdoaWxlCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHZlcnNpb24gMy4xNyBoYXMgYmVlbiBhZGRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZWdsaWJjPC9maWxlbmFtZT4gaGFzIGJlZW4gcmVtb3ZlZCBpbiBmYXZvciBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWlncmF0aW9uLTEuNy1nbGliYy1yZXBsYWNlcy1lZ2xpYmMnPjxmaWxlbmFtZT5lZ2xpYmMgMi4xOTwvZmlsZW5hbWU+IFJlcGxhY2VkIHdpdGggPGZpbGVuYW1lPmdsaWJjIDIuMjA8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuNy1taXNjZWxsYW5lb3VzLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbWlzY2VsbGFuZW91cyBjaGFuZ2Ugb2NjdXJyZWQ6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZSBub3cgd3JpdGVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC1pZC50eHQ8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC1pZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIDxmaWxlbmFtZT5idWlsZC1pZC50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBub3cgY29udGFpbnMgdGhlIGZ1bGwgYnVpbGQgaGVhZGVyIGFzIHByaW50ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1cG9uIHN0YXJ0aW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBtYW51YWxseSByZW1vdmUgb2xkICJidWlsZC1pZCIgZmlsZXMgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIGJ1aWxkIGhpc3RvcnkgcmVwb3NpdG9yaWVzIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBidWlsZCBoaXN0b3J5IGZlYXR1cmUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtb3ZpbmctdG8tdGhlLXlvY3RvLXByb2plY3QtMS44LXJlbGVhc2UnPgorICAgIDx0aXRsZT5Nb3ZpbmcgdG8gdGhlIFlvY3RvIFByb2plY3QgMS44IFJlbGVhc2U8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBtaWdyYXRpb24gaW5mb3JtYXRpb24gZm9yIG1vdmluZyB0byB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdCAxLjggUmVsZWFzZSBmcm9tIHRoZSBwcmlvciByZWxlYXNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LXJlbW92ZWQtcmVjaXBlcyc+CisgICAgICAgIDx0aXRsZT5SZW1vdmVkIFJlY2lwZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgYmVlbiByZW1vdmVkOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm93bC12aWRlbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IHJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5nc3QtcGxheWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2FrdTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5IHJlcGxhY2VkIGJ5IDxmaWxlbmFtZT5nc3QtcGxheWVyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z25vbWUtZGVza3RvcDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBub3cgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBpcyBub3cgYXZhaWxhYmxlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWdub21lPC9maWxlbmFtZT4gYW5kIGlzIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+cHl0aG9uLWFyZ3BhcnNlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXJncGFyc2U8L2ZpbGVuYW1lPiBtb2R1bGUgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBpbiB0aGUgZGVmYXVsdCBQeXRob24gZGlzdHJpYnV0aW9uIGluIGEKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBuYW1lZCA8ZmlsZW5hbWU+cHl0aG9uLWFyZ3BhcnNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgdGhlIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5weXRob24tYXJncGFyc2U8L2ZpbGVuYW1lPiByZWNpcGUgaXMgbm8KKyAgICAgICAgICAgICAgICAgICAgbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT50ZWxlcGF0aHktcHl0aG9uLCBsaWJ0ZWxlcGF0aHksIHRlbGVwYXRoeS1nbGliLCB0ZWxlcGF0aHktaWRsZSwgdGVsZXBhdGh5LW1pc3Npb24tY29udHJvbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBBbGwgdGhlc2UgcmVjaXBlcyBoYXZlIG1vdmVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLW9lPC9maWxlbmFtZT4gYW5kIGFyZSBjb25zZXF1ZW50bHkgbm8KKyAgICAgICAgICAgICAgICAgICAgbG9uZ2VyIG5lZWRlZCBieSBhbnkgcmVjaXBlcyBpbiBPcGVuRW1iZWRkZWQtQ29yZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC15b2N0b18zLjEwPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5saW51eC15b2N0b18zLjE3PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBsaW51eC15b2N0byAzLjEwIGFuZCAzLjE3IGtlcm5lbHMgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgZHJvcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIDMuMTQga2VybmVsIHJlbWFpbnMsIHdoaWxlIHN1cHBvcnQgZm9yCisgICAgICAgICAgICAgICAgICAgIDMuMTkga2VybmVsIGhhcyBiZWVuIGFkZGVkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnBva3ktZmVlZC1jb25maWctb3BrZzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICBUaGlzIHJlY2lwZSBoYXMgYmVjb21lIG9ic29sZXRlIGFuZCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBVc2UgPGZpbGVuYW1lPmRpc3Ryby1mZWVkLWNvbmZpZzwvZmlsZW5hbWU+IGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpYmF2IDAuOC54PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJhdiA5Lng8L2ZpbGVuYW1lPiBpcyBub3cgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5zZWQtbmF0aXZlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIE5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIEEgd29ya2luZyB2ZXJzaW9uIG9mIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiBpcyBleHBlY3RlZAorICAgICAgICAgICAgICAgICAgICB0byBiZSBwcm92aWRlZCBieSB0aGUgaG9zdCBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1ibHVleic+CisgICAgICAgIDx0aXRsZT5CbHVlWiA0LnggLyA1LnggU2VsZWN0aW9uPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByb3BlciBidWlsdC1pbiBzdXBwb3J0IGZvciBzZWxlY3RpbmcgQmx1ZVogNS54IGluIHByZWZlcmVuY2UKKyAgICAgICAgICAgIHRvIHRoZSBkZWZhdWx0IG9mIDQueCBub3cgZXhpc3RzLgorICAgICAgICAgICAgVG8gdXNlIEJsdWVaIDUueCwgc2ltcGx5IGFkZCAiYmx1ZXo1IiB0byB5b3VyCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgIElmIHlvdSBoYWQgcHJldmlvdXNseSBhZGRlZCBhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICg8ZmlsZW5hbWU+Ki5iYmFwcGVuZDwvZmlsZW5hbWU+KSB0byBtYWtlIHRoaXMgc2VsZWN0aW9uLCB5b3UgY2FuCisgICAgICAgICAgICBub3cgcmVtb3ZlIHRoZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgYQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmx1ZXRvb3RoJz48ZmlsZW5hbWU+Ymx1ZXRvb3RoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyBoYXMgYmVlbiBhZGRlZCB0byBtYWtlIHNlbGVjdGlvbiBvZiB0aGUgYXBwcm9wcmlhdGUgYmx1ZXRvb3RoCisgICAgICAgICAgICBzdXBwb3J0IHdpdGhpbiBhIHJlY2lwZSBhIGxpdHRsZSBlYXNpZXIuCisgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBtYWtlIHVzZSBvZiB0aGlzIGNsYXNzIGluIGEgcmVjaXBlLCBhZGQgc29tZXRoaW5nCisgICAgICAgICAgICBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgYmx1ZXRvb3RoCisgICAgIFBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0KKyAgICAgUEFDS0FHRUNPTkZJR1tibHVlejRdID0gIi0tZW5hYmxlLWJsdWV0b290aCwtLWRpc2FibGUtYmx1ZXRvb3RoLGJsdWV6NCIKKyAgICAgUEFDS0FHRUNPTkZJR1tibHVlejVdID0gIi0tZW5hYmxlLWJsdWV6NSwtLWRpc2FibGUtYmx1ZXo1LGJsdWV6NSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LWtlcm5lbC1idWlsZC1jaGFuZ2VzJz4KKyAgICAgICAgPHRpdGxlPktlcm5lbCBCdWlsZCBDaGFuZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcyB3YXMgY2hhbmdlZCB0byBwbGFjZSB0aGUgc291cmNlCisgICAgICAgICAgICBpbiBhIGNvbW1vbiBzaGFyZWQgd29yayBhcmVhIGFuZCB0byBwbGFjZSBidWlsZCBhcnRpZmFjdHMKKyAgICAgICAgICAgIHNlcGFyYXRlbHkgaW4gdGhlIHNvdXJjZSBjb2RlIHRyZWUuCisgICAgICAgICAgICBJbiB0aGVvcnksIG1pZ3JhdGlvbiBwYXRocyBoYXZlIGJlZW4gcHJvdmlkZWQgZm9yIG1vc3QgY29tbW9uCisgICAgICAgICAgICB1c2FnZXMgaW4ga2VybmVsIHJlY2lwZXMgYnV0IHRoaXMgbWlnaHQgbm90IHdvcmsgaW4gYWxsIGNhc2VzLgorICAgICAgICAgICAgSW4gcGFydGljdWxhciwgdXNlcnMgbmVlZCB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgPGZpbGVuYW1lPiR7U308L2ZpbGVuYW1lPiAoc291cmNlIGZpbGVzKSBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke0J9PC9maWxlbmFtZT4gKGJ1aWxkIGFydGlmYWN0cykgYXJlIHVzZWQKKyAgICAgICAgICAgIGNvcnJlY3RseSBpbiBmdW5jdGlvbnMgc3VjaCBhcworICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBGb3Iga2VybmVsIHJlY2lwZXMgdGhhdCBkbyBub3QgaW5oZXJpdCBmcm9tCisgICAgICAgICAgICA8ZmlsZW5hbWU+a2VybmVsLXlvY3RvPC9maWxlbmFtZT4gb3IgaW5jbHVkZQorICAgICAgICAgICAgPGZpbGVuYW1lPmxpbnV4LXlvY3RvLmluYzwvZmlsZW5hbWU+LCB5b3UgbWlnaHQgd2lzaCB0bworICAgICAgICAgICAgcmVmZXIgdG8gdGhlIDxmaWxlbmFtZT5saW51eC5pbmM8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiBsYXllciBmb3IgdGhlIGtpbmRzIG9mIGNoYW5nZXMgeW91CisgICAgICAgICAgICBuZWVkIHRvIG1ha2UuCisgICAgICAgICAgICBGb3IgcmVmZXJlbmNlLCBoZXJlIGlzIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9tZXRhLW9wZW5lbWJlZGRlZC9jb21taXQvbWV0YS1vZS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC5pbmM/aWQ9ZmM3MTMyZWRlMjdhYzY3NjY5NDQ4ZDNkMjg0NWNlN2Q0NmM2YTFlZSc+Y29tbWl0PC91bGluaz4KKyAgICAgICAgICAgIHdoZXJlIHRoZSA8ZmlsZW5hbWU+bGludXguaW5jPC9maWxlbmFtZT4gZmlsZSBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtb2U8L2ZpbGVuYW1lPiB3YXMgdXBkYXRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVjaXBlcyB0aGF0IHJlbHkgb24gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBhbmQgZG8gbm90IGluaGVyaXQKKyAgICAgICAgICAgIHRoZSBtb2R1bGUgY2xhc3NlcyBtaWdodCBuZWVkIHRvIGFkZCBleHBsaWNpdCBkZXBlbmRlbmNpZXMgb24KKyAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZG9fc2hhcmVkX3dvcmtkaXI8L2ZpbGVuYW1lPiBrZXJuZWwgdGFzaywgZm9yIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX2NvbmZpZ3VyZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1zc2wnPgorICAgICAgICA8dGl0bGU+U1NMIDMuMCBpcyBOb3cgRGlzYWJsZWQgaW4gT3BlblNTTDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTU0wgMy4wIGlzIG5vdyBkaXNhYmxlZCB3aGVuIGJ1aWxkaW5nIE9wZW5TU0wuCisgICAgICAgICAgICBEaXNhYmxpbmcgU1NMIDMuMCBhdm9pZHMgYW55IGxpbmdlcmluZyBpbnN0YW5jZXMgb2YgdGhlIFBPT0RMRQorICAgICAgICAgICAgdnVsbmVyYWJpbGl0eS4KKyAgICAgICAgICAgIElmIHlvdSBmZWVsIHlvdSBtdXN0IHJlLWVuYWJsZSBTU0wgMy4wLCB0aGVuIHlvdSBjYW4gYWRkIGFuCisgICAgICAgICAgICBhcHBlbmQgZmlsZSAoPGZpbGVuYW1lPiouYmJhcHBlbmQ8L2ZpbGVuYW1lPikgZm9yIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5zc2w8L2ZpbGVuYW1lPiByZWNpcGUgdG8gcmVtb3ZlICItbm8tc3NsMyIKKyAgICAgICAgICAgIGZyb20KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nbWlncmF0aW9uLTEuOC1kZWZhdWx0LXN5c3Jvb3QtcG9pc29uaW5nJz4KKyAgICAgICAgPHRpdGxlPkRlZmF1bHQgU3lzcm9vdCBQb2lzb25pbmc8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGZpbGVuYW1lPmdjYydzPC9maWxlbmFtZT4gZGVmYXVsdCBzeXNyb290IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBhcmUgbm93ICJwb2lzb25lZCIuCisgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIHN5c3Jvb3QgYW5kIGluY2x1ZGUgZGlyZWN0b3JpZXMgYXJlIGJlaW5nCisgICAgICAgICAgICByZWRpcmVjdGVkIHRvIGEgbm9uLWV4aXN0ZW50IGxvY2F0aW9uIGluIG9yZGVyIHRvIGNhdGNoIHdoZW4KKyAgICAgICAgICAgIGhvc3QgZGlyZWN0b3JpZXMgYXJlIGJlaW5nIHVzZWQgZHVlIHRvIHRoZSBjb3JyZWN0IG9wdGlvbnMgbm90CisgICAgICAgICAgICBiZWluZyBwYXNzZWQuCisgICAgICAgICAgICBUaGlzIHBvaXNvbmluZyBhcHBsaWVzIGJvdGggdG8gdGhlIGNyb3NzLWNvbXBpbGVyIHVzZWQgd2l0aGluIHRoZQorICAgICAgICAgICAgYnVpbGQgYW5kIHRvIHRoZSBjcm9zcy1jb21waWxlciBwcm9kdWNlZCBpbiB0aGUgU0RLLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB0aGlzIGNoYW5nZSBjYXVzZXMgc29tZXRoaW5nIGluIHRoZSBidWlsZCB0byBmYWlsLCBpdCBhbG1vc3QKKyAgICAgICAgICAgIGNlcnRhaW5seSBtZWFucyB0aGUgdmFyaW91cyBjb21waWxlciBmbGFncyBhbmQgY29tbWFuZHMgYXJlIG5vdAorICAgICAgICAgICAgYmVpbmcgcGFzc2VkIGNvcnJlY3RseSB0byB0aGUgdW5kZXJseWluZyBwaWVjZSBvZiBzb2Z0d2FyZS4KKyAgICAgICAgICAgIEluIHN1Y2ggY2FzZXMsIHlvdSBuZWVkIHRvIHRha2UgY29ycmVjdGl2ZSBzdGVwcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LXJlYnVpbGQtaW1wcm92ZW1lbnRzJz4KKyAgICAgICAgPHRpdGxlPlJlYnVpbGQgSW1wcm92ZW1lbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY21ha2UnPjxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3NlcyB0byBjbGVhbiBvdXQgZ2VuZXJhdGVkIGZpbGVzIHdoZW4gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIG5lZWRzIHRvIGJlIHJlLWV4ZWN1dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgb2YgdGhlIGltcHJvdmVtZW50cyBpcyB0byBhdHRlbXB0IHRvIHJ1biAibWFrZSBjbGVhbiIgZHVyaW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+IHRhc2sgaWYgYQorICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4gZXhpc3RzLgorICAgICAgICAgICAgU29tZSBzb2Z0d2FyZSBwYWNrYWdlcyBkbyBub3QgcHJvdmlkZSBhIHdvcmtpbmcgY2xlYW4gdGFyZ2V0CisgICAgICAgICAgICB3aXRoaW4gdGhlaXIgbWFrZSBmaWxlcy4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIHN1Y2ggcmVjaXBlcywgeW91IG5lZWQgdG8gc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0xFQU5CUk9LRU4nPjxmaWxlbmFtZT5DTEVBTkJST0tFTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gIjEiIHdpdGhpbiB0aGUgcmVjaXBlLCBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ0xFQU5CUk9LRU4gPSAiMSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LXFhLWNoZWNrLWFuZC12YWxpZGF0aW9uLWNoYW5nZXMnPgorICAgICAgICA8dGl0bGU+UUEgQ2hlY2sgYW5kIFZhbGlkYXRpb24gQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIFFBIENoZWNrIGFuZCBWYWxpZGF0aW9uIENoYW5nZXMgaGF2ZSBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2FnZSBvZiA8ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHRyaWdnZXJlZCBhIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgICAgIEl0IG5vdyB0cmlnZ2VycyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCByZW1vdmUgYW55IHJlbWFpbmluZyB1c2FnZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJJTkM8L2ZpbGVuYW1lPiBpbiBhbnkgcmVjaXBlIG9yIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGFkZGl0aW9uYWwgUUEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgdG8gZGV0ZWN0IHVzYWdlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4gaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPiB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSB1c2VkIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNhbWUgY2hlY2sgZW5zdXJlcyB0aGF0IDxmaWxlbmFtZT4kRDwvZmlsZW5hbWU+IGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wcmVpbnN0L3BrZ19wb3N0aW5zdC9wa2dfcHJlcm0vcGtnX3Bvc3RybTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIDxmaWxlbmFtZT4ke0R9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IG5vdworICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBzZXQgdG8gYSB2YWxpZCB2YWx1ZSB3aXRoaW4gYSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gaXMgbm90IHNldCBpbiB0aGUgcmVjaXBlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgIElmIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gZG9lcyBub3QgcG9pbnQgdG8gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBleGlzdHMgYXQgdGhlIHRpbWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy11bnBhY2snPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBmaW5pc2hlcywgYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIG5vdyB2YWxpZGF0ZWQgZm9yIGNvcnJlY3QgZm9ybWF0dGluZyBvZiBtdWx0aXBsZQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZvcm1hdCBpcyBpbnZhbGlkIChlLmcuIG11bHRpcGxlIGxpY2Vuc2VzIGFyZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgd2l0aCBubyBvcGVyYXRvcnMgdG8gc3BlY2lmeSBob3cgdGhlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIGludGVyYWN0KSwgdGhlbiBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdtaWdyYXRpb24tMS44LW1pc2NlbGxhbmVvdXMtY2hhbmdlcyc+CisgICAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIENoYW5nZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtaXNjZWxsYW5lb3VzIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZDoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNlbmQtZXJyb3ItcmVwb3J0PC9maWxlbmFtZT4gc2NyaXB0IG5vdworICAgICAgICAgICAgICAgICAgICBleHBlY3RzIGEgIi1zIiBvcHRpb24gdG8gYmUgc3BlY2lmaWVkIGJlZm9yZSB0aGUgc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXNzdW1lcyBhIHNlcnZlciBhZGRyZXNzIGlzIGJlaW5nIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm9lLXBrZ2RhdGEtdXRpbDwvZmlsZW5hbWU+IHNjcmlwdCBub3cKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0cyBhICItcCIgb3B0aW9uIHRvIGJlIHNwZWNpZmllZCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dkYXRhPC9maWxlbmFtZT4gZGlyZWN0b3J5LCB3aGljaCBpcyBub3cKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+cGtnZGF0YTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHdpbGwgcnVuIEJpdEJha2UgdG8gcXVlcnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1iaXRiYWtlLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtYml0YmFrZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0MDJkYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtYml0YmFrZS54bWwKQEAgLTAsMCArMSw0NzIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtYml0YmFrZSc+CisKKyAgICA8dGl0bGU+Qml0QmFrZTwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQml0QmFrZSBpcyBhIHByb2dyYW0gd3JpdHRlbiBpbiBQeXRob24gdGhhdCBpbnRlcnByZXRzIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiB1c2VkIGJ5CisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBBdCBzb21lIHBvaW50LCBkZXZlbG9wZXJzIHdvbmRlciB3aGF0IGFjdHVhbGx5IGhhcHBlbnMgd2hlbiB5b3UgZW50ZXI6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB3aGF0IGhhcHBlbnMgYmVoaW5kIHRoZSBzY2VuZXMgZnJvbSBCaXRCYWtlJ3MgcGVyc3BlY3RpdmUuCisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgICAgIEJpdEJha2Ugc3RyaXZlcyB0byBiZSBhIGdlbmVyaWMgInRhc2siIGV4ZWN1dG9yIHRoYXQgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBjb21wbGV4IGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcy4KKyAgICAgICAgQXMgc3VjaCwgaXQgaGFzIG5vIHJlYWwga25vd2xlZGdlIG9mIHdoYXQgdGhlIHRhc2tzIGJlaW5nIGV4ZWN1dGVkIGFjdHVhbGx5IGRvLgorICAgICAgICBCaXRCYWtlIGp1c3QgY29uc2lkZXJzIGEgbGlzdCBvZiB0YXNrcyB3aXRoIGRlcGVuZGVuY2llcyBhbmQgaGFuZGxlcworICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICBjb25zaXN0aW5nIG9mIHZhcmlhYmxlcyBpbiBhIGNlcnRhaW4gZm9ybWF0IHRoYXQgZ2V0IHBhc3NlZCB0byB0aGUgdGFza3MuCisgICAgPC9ub3RlPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXBhcnNpbmcnPgorICAgICAgICA8dGl0bGU+UGFyc2luZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBjb25maWd1cmF0aW9uIGZpbGVzLCBjbGFzc2VzLCBhbmQgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZmlyc3QgdGhpbmcgQml0QmFrZSBkb2VzIGlzIGxvb2sgZm9yIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICB3aXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgQml0QmFrZSBmaW5kcyBpdCBieSBleGFtaW5pbmcgaXRzCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+IGVudmlyb25tZW50CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgbG9va2luZyBmb3IgdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGxpc3RzIG90aGVyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIHRvIGluY2x1ZGUgZnJvbSBhIDxmaWxlbmFtZT5jb25mLzwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgYmVsb3cgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4uCisgICAgICAgICAgICBJbiBnZW5lcmFsLCB0aGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gYSB1c2VyJ3MgcGVyc3BlY3RpdmUKKyAgICAgICAgICAgIGlzIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4sIHdoaWNoIGNvbnRhaW5zIGEgdXNlcidzIGN1c3RvbWl6ZWQKKyAgICAgICAgICAgIHNldHRpbmdzIGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIGVudmlyb25tZW50LgorICAgICAgICAgICAgT3RoZXIgbm90YWJsZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgKHNldCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz5ESVNUUk88L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUpCisgICAgICAgICAgICBhbmQgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAoc2V0IGJ5IHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlKS4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT4gQml0QmFrZSBlbnZpcm9ubWVudAorICAgICAgICAgICAgdmFyaWFibGVzIGFyZSBib3RoIHVzdWFsbHkgc2V0IGluCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgVmFsaWQgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvLzwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgYW5kIHZhbGlkIG1hY2hpbmUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS88L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICBXaXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlLzwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgYXJlIHZhcmlvdXMgPGZpbGVuYW1lPnR1bmUtKi5pbmM8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcHJvdmlkZSBjb21tb24KKyAgICAgICAgICAgICJ0dW5pbmciIHNldHRpbmdzIHNwZWNpZmljIHRvIGFuZCBzaGFyZWQgYmV0d2VlbiBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZXMgYW5kIG1hY2hpbmVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZnRlciB0aGUgcGFyc2luZyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgc29tZSBzdGFuZGFyZCBjbGFzc2VzIGFyZSBpbmNsdWRlZC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZSBpcyBhbHdheXMgaW5jbHVkZWQuCisgICAgICAgICAgICBPdGhlciBjbGFzc2VzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU5IRVJJVCc+SU5IRVJJVDwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUgYXJlIGFsc28gaW5jbHVkZWQuCisgICAgICAgICAgICBDbGFzcyBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIGluIGEgPGZpbGVuYW1lPmNsYXNzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgIHVuZGVyIHRoZSBwYXRocyBpbiA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gaW4gdGhlIHNhbWUgd2F5IGFzCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBZnRlciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPkJCRklMRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHNldCwgdXN1YWxseSBpbgorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiwgYW5kIGRlZmluZXMgdGhlIGxpc3Qgb2YgcGxhY2VzIHRvIHNlYXJjaCBmb3IKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtKi88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluIFBva3kuCisgICAgICAgICAgICBBZGRpbmcgZXh0cmEgY29udGVudCB0byA8ZmlsZW5hbWU+QkJGSUxFUzwvZmlsZW5hbWU+IGlzIGJlc3QgYWNoaWV2ZWQgdGhyb3VnaCB0aGUgdXNlIG9mCisgICAgICAgICAgICBCaXRCYWtlIGxheWVycyBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdW5kZXJzdGFuZGluZy1hbmQtY3JlYXRpbmctbGF5ZXJzJz5VbmRlcnN0YW5kaW5nIGFuZAorICAgICAgICAgICAgQ3JlYXRpbmcgTGF5ZXJzPC91bGluaz4iIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIHBhcnNlcyBlYWNoIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGluIDxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICBzdG9yZXMgdGhlIHZhbHVlcyBvZiB2YXJpb3VzIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIEluIHN1bW1hcnksIGZvciBlYWNoIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZmlsZSB0aGUgY29uZmlndXJhdGlvbiBwbHVzIHRoZSBiYXNlIGNsYXNzIG9mIHZhcmlhYmxlcyBhcmUgc2V0LCBmb2xsb3dlZAorICAgICAgICAgICAgYnkgdGhlIGRhdGEgaW4gdGhlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICBpdHNlbGYsIGZvbGxvd2VkIGJ5IGFueSBpbmhlcml0IGNvbW1hbmRzIHRoYXQKKyAgICAgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIG1pZ2h0IGNvbnRhaW4uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlY2F1c2UgcGFyc2luZyA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgaXMgYSB0aW1lCisgICAgICAgICAgICBjb25zdW1pbmcgcHJvY2VzcywgYSBjYWNoZSBpcyBrZXB0IHRvIHNwZWVkIHVwIHN1YnNlcXVlbnQgcGFyc2luZy4KKyAgICAgICAgICAgIFRoaXMgY2FjaGUgaXMgaW52YWxpZCBpZiB0aGUgdGltZXN0YW1wIG9mIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZpbGUgaXRzZWxmIGNoYW5nZXMsIG9yIGlmIHRoZSB0aW1lc3RhbXBzIG9mIGFueSBvZiB0aGUgaW5jbHVkZSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgY2xhc3MgZmlsZXMgb24gd2hpY2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBkZXBlbmRzIGNoYW5nZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gYmUgYXdhcmUgb2YgaG93IEJpdEJha2UgcGFyc2VzIGN1cmx5IGJyYWNlcy4KKyAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSB1c2VzIGEgY2xvc2luZyBjdXJseSBicmFjZSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGFuZAorICAgICAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXIgaGFzIG5vIGxlYWRpbmcgc3BhY2VzLCBCaXRCYWtlIHByb2R1Y2VzIGEgcGFyc2luZworICAgICAgICAgICAgICAgIGVycm9yLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgYSBwYWlyIG9mIGN1cmx5IGJyYWNlIGluIGEgc2hlbGwgZnVuY3Rpb24sIHRoZQorICAgICAgICAgICAgICAgIGNsb3NpbmcgY3VybHkgYnJhY2UgbXVzdCBub3QgYmUgbG9jYXRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUKKyAgICAgICAgICAgICAgICB3aXRob3V0IGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBjYXVzZXMgQml0QmFrZSB0byBwcm9kdWNlIGEgcGFyc2luZworICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisgICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisgICAgIHVzYWdlKCkKKyAgICAgeworICAgICAgIGVjaG8gInRlc3QiCisgICAgICAgIyMjIyMjIFRoZSBmb2xsb3dpbmcgIn0iIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBjYXVzZXMgYSBwYXJzaW5nIGVycm9yICMjIyMjIworICAgICB9CisgICAgIEVPRgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFdyaXRpbmcgdGhlIHJlY2lwZSB0aGlzIHdheSBhdm9pZHMgdGhlIGVycm9yOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisgICAgICAgICBjYXQgJmx0OyZsdDsgIkVPRiIgJmd0OyAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisgICAgIHVzYWdlKCkKKyAgICAgeworICAgICAgIGVjaG8gInRlc3QiCisgICAgICAgIyMjIyMjVGhlIGZvbGxvd2luZyAifSIgd2l0aCBhIGxlYWRpbmcgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGF2b2lkcyB0aGUgZXJyb3IgIyMjIyMjCisgICAgICB9CisgICAgIEVPRgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLXByb3ZpZGVycyc+CisgICAgICAgIDx0aXRsZT5QcmVmZXJlbmNlcyBhbmQgUHJvdmlkZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgYWxsIHRoZSA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZXMgaGF2ZSBiZWVuCisgICAgICAgICAgICBwYXJzZWQsIEJpdEJha2Ugc3RhcnRzIHRvIGJ1aWxkIHRoZSB0YXJnZXQgKDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24ncyBleGFtcGxlKSBhbmQgbG9va3MgZm9yIHByb3ZpZGVycyBvZiB0aGF0IHRhcmdldC4KKyAgICAgICAgICAgIE9uY2UgYSBwcm92aWRlciBpcyBzZWxlY3RlZCwgQml0QmFrZSByZXNvbHZlcyBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IKKyAgICAgICAgICAgIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBJbiB0aGUgY2FzZSBvZiA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4sIGl0IHdvdWxkIGxlYWQgdG8KKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0bzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgd2hpY2ggaW4gdHVybiBsZWFkcyB0byByZWNpcGVzIGxpa2UgPGZpbGVuYW1lPm1hdGNoYm94LXRlcm1pbmFsPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cGNtYW5mbTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z3RodW1iPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGVzZSByZWNpcGVzIGluIHR1cm4gZGVwZW5kIG9uIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IGFuZCB0aGUgdG9vbGNoYWluLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgYSB0YXJnZXQgbWlnaHQgaGF2ZSBtdWx0aXBsZSBwcm92aWRlcnMuCisgICAgICAgICAgICBBIGNvbW1vbiBleGFtcGxlIGlzICJ2aXJ0dWFsL2tlcm5lbCIsIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IGVhY2gga2VybmVsIHBhY2thZ2UuCisgICAgICAgICAgICBFYWNoIG1hY2hpbmUgb2Z0ZW4gc2VsZWN0cyB0aGUgYmVzdCBrZXJuZWwgcHJvdmlkZXIgYnkgdXNpbmcgYSBsaW5lIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICBmb2xsb3dpbmcgaW4gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8iCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz5QUkVGRVJSRURfUFJPVklERVI8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGlzIHRoZSBwcm92aWRlciB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVW5kZXJzdGFuZGluZyBob3cgcHJvdmlkZXJzIGFyZSBjaG9zZW4gaXMgbWFkZSBjb21wbGljYXRlZCBieSB0aGUgZmFjdAorICAgICAgICAgICAgdGhhdCBtdWx0aXBsZSB2ZXJzaW9ucyBtaWdodCBleGlzdC4KKyAgICAgICAgICAgIEJpdEJha2UgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QgdmVyc2lvbiBvZiBhIHByb3ZpZGVyLgorICAgICAgICAgICAgVmVyc2lvbiBjb21wYXJpc29ucyBhcmUgbWFkZSB1c2luZyB0aGUgc2FtZSBtZXRob2QgYXMgRGViaWFuLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdmVyc2lvbiAodXN1YWxseSBpbiB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24pLgorICAgICAgICAgICAgWW91IGNhbiBpbmZsdWVuY2UgdGhlIG9yZGVyIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUX1BSRUZFUkVOQ0UnPkRFRkFVTFRfUFJFRkVSRU5DRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICBCeSBkZWZhdWx0LCBmaWxlcyBoYXZlIGEgcHJlZmVyZW5jZSBvZiAiMCIuCisgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gdG8gIi0xIiBtYWtlcyB0aGUKKyAgICAgICAgICAgIHBhY2thZ2UgdW5saWtlbHkgdG8gYmUgdXNlZCB1bmxlc3MgaXQgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLgorICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHRvICIxIiBtYWtlcyBpdCBsaWtlbHkgdGhlIHBhY2thZ2UgaXMgdXNlZC4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVGRVJSRURfVkVSU0lPTjwvZmlsZW5hbWU+IG92ZXJyaWRlcyBhbnkgPGZpbGVuYW1lPkRFRkFVTFRfUFJFRkVSRU5DRTwvZmlsZW5hbWU+IHNldHRpbmcuCisgICAgICAgICAgICA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4gaXMgb2Z0ZW4gdXNlZCB0byBtYXJrIG5ld2VyIGFuZCBtb3JlIGV4cGVyaW1lbnRhbCBwYWNrYWdlCisgICAgICAgICAgICB2ZXJzaW9ucyB1bnRpbCB0aGV5IGhhdmUgdW5kZXJnb25lIHN1ZmZpY2llbnQgdGVzdGluZyB0byBiZSBjb25zaWRlcmVkIHN0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gc3VtbWFyeSwgQml0QmFrZSBoYXMgY3JlYXRlZCBhIGxpc3Qgb2YgcHJvdmlkZXJzLCB3aGljaCBpcyBwcmlvcml0aXplZCwgZm9yIGVhY2ggdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLWRlcGVuZGVuY2llcyc+CisgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRWFjaCB0YXJnZXQgQml0QmFrZSBidWlsZHMgY29uc2lzdHMgb2YgbXVsdGlwbGUgdGFza3Mgc3VjaCBhcworICAgICAgICAgICAgPGZpbGVuYW1lPmZldGNoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmNvbXBpbGU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEZvciBiZXN0IHBlcmZvcm1hbmNlIG9uIG11bHRpLWNvcmUgc3lzdGVtcywgQml0QmFrZSBjb25zaWRlcnMgZWFjaCB0YXNrIGFzIGFuIGluZGVwZW5kZW50CisgICAgICAgICAgICBlbnRpdHkgd2l0aCBpdHMgb3duIHNldCBvZiBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCB0aHJvdWdoIHNldmVyYWwgdmFyaWFibGVzLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IHZhcmlhYmxlcyBCaXRCYWtlIHVzZXMgaW4gdGhlIEJpdEJha2UgZG9jdW1lbnRhdGlvbiwKKyAgICAgICAgICAgIHdoaWNoIGlzIGZvdW5kIGluIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS9kb2MvbWFudWFsPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIEF0IGEgYmFzaWMgbGV2ZWwsIGl0IGlzIHN1ZmZpY2llbnQgdG8ga25vdyB0aGF0IEJpdEJha2UgdXNlcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlcyB3aGVuCisgICAgICAgICAgICBjYWxjdWxhdGluZyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtdGFza2xpc3QnPgorICAgICAgICA8dGl0bGU+VGhlIFRhc2sgTGlzdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCYXNlZCBvbiB0aGUgZ2VuZXJhdGVkIGxpc3Qgb2YgcHJvdmlkZXJzIGFuZCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgIEJpdEJha2UgY2FuIG5vdyBjYWxjdWxhdGUgZXhhY3RseSB3aGF0IHRhc2tzIGl0IG5lZWRzIHRvIHJ1biBhbmQgaW4gd2hhdAorICAgICAgICAgICAgb3JkZXIgaXQgbmVlZHMgdG8gcnVuIHRoZW0uCisgICAgICAgICAgICBUaGUgYnVpbGQgbm93IHN0YXJ0cyB3aXRoIEJpdEJha2UgZm9ya2luZyBvZmYgdGhyZWFkcyB1cCB0byB0aGUgbGltaXQgc2V0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+QkJfTlVNQkVSX1RIUkVBRFM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBCaXRCYWtlIGNvbnRpbnVlcyB0byBmb3JrIHRocmVhZHMgYXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFza3MgcmVhZHkgdG8gcnVuLAorICAgICAgICAgICAgdGhvc2UgdGFza3MgaGF2ZSBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzIG1ldCwgYW5kIHRoZSB0aHJlYWQgdGhyZXNob2xkIGhhcyBub3QgYmVlbgorICAgICAgICAgICAgZXhjZWVkZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHlvdSBjYW4gZ3JlYXRseSBzcGVlZCB1cCB0aGUgYnVpbGQgdGltZSBieSBwcm9wZXJseSBzZXR0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyNxcy1idWlsZGluZy1pbWFnZXMnPkJ1aWxkaW5nIEltYWdlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQXMgZWFjaCB0YXNrIGNvbXBsZXRlcywgYSB0aW1lc3RhbXAgaXMgd3JpdHRlbiB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1RBTVAnPlNUQU1QPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgT24gc3Vic2VxdWVudCBydW5zLCBCaXRCYWtlIGxvb2tzIHdpdGhpbiB0aGUgPGZpbGVuYW1lPmJ1aWxkL3RtcC9zdGFtcHM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGFuZCBkb2VzIG5vdCByZXJ1bgorICAgICAgICAgICAgdGFza3MgdGhhdCBhcmUgYWxyZWFkeSBjb21wbGV0ZWQgdW5sZXNzIGEgdGltZXN0YW1wIGlzIGZvdW5kIHRvIGJlIGludmFsaWQuCisgICAgICAgICAgICBDdXJyZW50bHksIGludmFsaWQgdGltZXN0YW1wcyBhcmUgb25seSBjb25zaWRlcmVkIG9uIGEgcGVyCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4gZmlsZSBiYXNpcy4KKyAgICAgICAgICAgIFNvLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNvbmZpZ3VyZSBzdGFtcCBoYXMgYSB0aW1lc3RhbXAgZ3JlYXRlciB0aGFuIHRoZQorICAgICAgICAgICAgY29tcGlsZSB0aW1lc3RhbXAgZm9yIGEgZ2l2ZW4gdGFyZ2V0LCB0aGVuIHRoZSBjb21waWxlIHRhc2sgd291bGQgcmVydW4uCisgICAgICAgICAgICBSdW5uaW5nIHRoZSBjb21waWxlIHRhc2sgYWdhaW4sIGhvd2V2ZXIsIGhhcyBubyBlZmZlY3Qgb24gb3RoZXIgcHJvdmlkZXJzCisgICAgICAgICAgICB0aGF0IGRlcGVuZCBvbiB0aGF0IHRhcmdldC4KKyAgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgY291bGQgY2hhbmdlIG9yIGJlY29tZSBjb25maWd1cmFibGUgaW4gZnV0dXJlIHZlcnNpb25zIG9mIEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFNvbWUgdGFza3MgYXJlIG1hcmtlZCBhcyAibm9zdGFtcCIgdGFza3MuCisgICAgICAgICAgICBObyB0aW1lc3RhbXAgZmlsZSBpcyBjcmVhdGVkIHdoZW4gdGhlc2UgdGFza3MgYXJlIHJ1bi4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgIm5vc3RhbXAiIHRhc2tzIGFyZSBhbHdheXMgcmVydW4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWJpdGJha2UtcnVudGFzayc+CisgICAgICAgIDx0aXRsZT5SdW5uaW5nIGEgVGFzazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUYXNrcyBjYW4gZWl0aGVyIGJlIGEgc2hlbGwgdGFzayBvciBhIFB5dGhvbiB0YXNrLgorICAgICAgICAgICAgRm9yIHNoZWxsIHRhc2tzLCBCaXRCYWtlIHdyaXRlcyBhIHNoZWxsIHNjcmlwdCB0bworICAgICAgICAgICAgPGZpbGVuYW1lPiR7V09SS0RJUn0vdGVtcC9ydW4uZG9fdGFza25hbWUucGlkPC9maWxlbmFtZT4gYW5kIHRoZW4gZXhlY3V0ZXMgdGhlIHNjcmlwdC4KKyAgICAgICAgICAgIFRoZSBnZW5lcmF0ZWQgc2hlbGwgc2NyaXB0IGNvbnRhaW5zIGFsbCB0aGUgZXhwb3J0ZWQgdmFyaWFibGVzLCBhbmQgdGhlIHNoZWxsIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBhbGwgdmFyaWFibGVzIGV4cGFuZGVkLgorICAgICAgICAgICAgT3V0cHV0IGZyb20gdGhlIHNoZWxsIHNjcmlwdCBnb2VzIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvX3Rhc2tuYW1lLnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgTG9va2luZyBhdCB0aGUgZXhwYW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluIHRoZSBydW4gZmlsZSBhbmQgdGhlIG91dHB1dCBpbiB0aGUgbG9nIGZpbGVzCisgICAgICAgICAgICBpcyBhIHVzZWZ1bCBkZWJ1Z2dpbmcgdGVjaG5pcXVlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgUHl0aG9uIHRhc2tzLCBCaXRCYWtlIGV4ZWN1dGVzIHRoZSB0YXNrIGludGVybmFsbHkgYW5kIGxvZ3MgaW5mb3JtYXRpb24gdG8gdGhlCisgICAgICAgICAgICBjb250cm9sbGluZyB0ZXJtaW5hbC4KKyAgICAgICAgICAgIEZ1dHVyZSB2ZXJzaW9ucyBvZiBCaXRCYWtlIHdpbGwgd3JpdGUgdGhlIGZ1bmN0aW9ucyB0byBmaWxlcyBzaW1pbGFyIHRvIHRoZSB3YXkKKyAgICAgICAgICAgIHNoZWxsIHRhc2tzIGFyZSBoYW5kbGVkLgorICAgICAgICAgICAgTG9nZ2luZyB3aWxsIGJlIGhhbmRsZWQgaW4gYSB3YXkgc2ltaWxhciB0byBzaGVsbCB0YXNrcyBhcyB3ZWxsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmNlIGFsbCB0aGUgdGFza3MgaGF2ZSBiZWVuIGNvbXBsZXRlZCBCaXRCYWtlIGV4aXRzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHJ1bm5pbmcgYSB0YXNrLCBCaXRCYWtlIHRpZ2h0bHkgY29udHJvbHMgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgb2YgdGhlIGJ1aWxkIHRhc2tzIHRvIG1ha2Ugc3VyZSB1bndhbnRlZCBjb250YW1pbmF0aW9uIGZyb20gdGhlIGJ1aWxkIG1hY2hpbmUKKyAgICAgICAgICAgIGNhbm5vdCBpbmZsdWVuY2UgdGhlIGJ1aWxkLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiB5b3UgZG8gd2FudCBzb21ldGhpbmcgdG8gZ2V0IHBhc3NlZCBpbnRvIHRoZSBidWlsZAorICAgICAgICAgICAgdGFzaydzIGVudmlyb25tZW50LCB5b3UgbXVzdCB0YWtlIGEgZmV3IHN0ZXBzOgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UZWxsIEJpdEJha2UgdG8gbG9hZCB3aGF0IHlvdSB3YW50IGZyb20gdGhlIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGRhdGEgc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZG8gc28gdGhyb3VnaCB0aGUgPGZpbGVuYW1lPkJCX0VOVl9FWFRSQVdISVRFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWUgeW91IHdhbnQgdG8gcHJldmVudCB0aGUgYnVpbGQgc3lzdGVtIGZyb20KKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzaW5nIHlvdXIgPGZpbGVuYW1lPiRIT01FLy5jY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCB0ZWxscyBCaXRCYWtlIHRvIGxvYWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNDQUNIRV9ESVI8L2ZpbGVuYW1lPiBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbnRvIHRoZSBkYXRhCisgICAgICAgICAgICAgICAgICAgIHN0b3JlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iJEJCX0VOVl9FWFRSQVdISVRFIENDQUNIRV9ESVIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGVsbCBCaXRCYWtlIHRvIGV4cG9ydCB3aGF0IHlvdSBoYXZlIGxvYWRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCBzdG9yZSB0byB0aGUgdGFzayBlbnZpcm9ubWVudCBvZiBldmVyeSBydW5uaW5nIHRhc2suCisgICAgICAgICAgICAgICAgICAgIExvYWRpbmcgc29tZXRoaW5nIGZyb20gdGhlIGVudmlyb25tZW50IGludG8gdGhlIGRhdGEgc3RvcmUKKyAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzIHN0ZXApIG9ubHkgbWFrZXMgaXQgYXZhaWxhYmxlIGluIHRoZSBkYXRhc3RvcmUuCisgICAgICAgICAgICAgICAgICAgIFRvIGV4cG9ydCBpdCB0byB0aGUgdGFzayBlbnZpcm9ubWVudCBvZiBldmVyeSBydW5uaW5nIHRhc2ssCisgICAgICAgICAgICAgICAgICAgIHVzZSBhIGNvbW1hbmQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBkaXN0cm8gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGV4cG9ydCBDQ0FDSEVfRElSCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEEgc2lkZSBlZmZlY3Qgb2YgdGhlIHByZXZpb3VzIHN0ZXBzIGlzIHRoYXQgQml0QmFrZSByZWNvcmRzIHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBidWlsZCBwcm9jZXNzIGluIHRoaW5ncyBsaWtlIHRoZSBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgIElmIGRvaW5nIHNvIHJlc3VsdHMgaW4gdW5uZWNlc3NhcnkgcmVidWlsZHMgb2YgdGFza3MsIHlvdSBjYW4gd2hpdGVsaXN0IHRoZQorICAgICAgICAgICAgdmFyaWFibGUgc28gdGhhdCB0aGUgc2hhcmVkIHN0YXRlIGNvZGUgaWdub3JlcyB0aGUgZGVwZW5kZW5jeSB3aGVuIGl0IGNyZWF0ZXMKKyAgICAgICAgICAgIGNoZWNrc3Vtcy4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIHByb2Nlc3MsIHNlZSB0aGUgPGZpbGVuYW1lPkJCX0hBU0hCQVNFX1dISVRFTElTVDwvZmlsZW5hbWU+CisgICAgICAgICAgICBleGFtcGxlIGluIHRoZSAiPGxpbmsgbGlua2VuZD0nY2hlY2tzdW1zJz5DaGVja3N1bXMgKFNpZ25hdHVyZXMpPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtYml0YmFrZS1jb21tYW5kbGluZSc+CisgICAgICAgIDx0aXRsZT5CaXRCYWtlIENvbW1hbmQgTGluZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIEJpdEJha2UgaGVscCBvdXRwdXQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2NyZWVuPgorJCBiaXRiYWtlIC0taGVscAorVXNhZ2U6IGJpdGJha2UgW29wdGlvbnNdIFtyZWNpcGVuYW1lL3RhcmdldCAuLi5dCisKKyAgICBFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIHRhc2sgKGRlZmF1bHQgaXMgJ2J1aWxkJykgZm9yIGEgZ2l2ZW4gc2V0IG9mIHRhcmdldCByZWNpcGVzICguYmIgZmlsZXMpLgorICAgIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYSBjb25mL2JibGF5ZXJzLmNvbmYgYXZhaWxhYmxlIGluIGN3ZCBvciBpbiBCQlBBVEggd2hpY2gKKyAgICB3aWxsIHByb3ZpZGUgdGhlIGxheWVyLCBCQkZJTEVTIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCitPcHRpb25zOgorICAtLXZlcnNpb24gICAgICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgLWIgQlVJTERGSUxFLCAtLWJ1aWxkZmlsZT1CVUlMREZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgdGFza3MgZnJvbSBhIHNwZWNpZmljIC5iYiByZWNpcGUgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgICAgICBXQVJOSU5HOiBEb2VzIG5vdCBoYW5kbGUgYW55IGRlcGVuZGVuY2llcyBmcm9tIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLgorICAtaywgLS1jb250aW51ZSAgICAgICAgQ29udGludWUgYXMgbXVjaCBhcyBwb3NzaWJsZSBhZnRlciBhbiBlcnJvci4gV2hpbGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgdGhhdCBmYWlsZWQgYW5kIGFueXRoaW5nIGRlcGVuZGluZyBvbiBpdCBjYW5ub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIGJ1aWx0LCBhcyBtdWNoIGFzIHBvc3NpYmxlIHdpbGwgYmUgYnVpbHQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZy4KKyAgLWEsIC0tdHJ5YWx0Y29uZmlncyAgIENvbnRpbnVlIHdpdGggYnVpbGRzIGJ5IHRyeWluZyB0byB1c2UgYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVycyB3aGVyZSBwb3NzaWJsZS4KKyAgLWYsIC0tZm9yY2UgICAgICAgICAgIEZvcmNlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0cy90YXNrIHRvIHJ1biAoaW52YWxpZGF0aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZXhpc3Rpbmcgc3RhbXAgZmlsZSkuCisgIC1jIENNRCwgLS1jbWQ9Q01EICAgICBTcGVjaWZ5IHRoZSB0YXNrIHRvIGV4ZWN1dGUuIFRoZSBleGFjdCBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgZGVwZW5kIG9uIHRoZSBtZXRhZGF0YS4gU29tZSBleGFtcGxlcyBtaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgJ2NvbXBpbGUnIG9yICdwb3B1bGF0ZV9zeXNyb290JyBvciAnbGlzdHRhc2tzJyBtYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpdmUgYSBsaXN0IG9mIHRoZSB0YXNrcyBhdmFpbGFibGUuCisgIC1DIElOVkFMSURBVEVfU1RBTVAsIC0tY2xlYXItc3RhbXA9SU5WQUxJREFURV9TVEFNUAorICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZGF0ZSB0aGUgc3RhbXAgZm9yIHRoZSBzcGVjaWZpZWQgdGFzayBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGlsZScgYW5kIHRoZW4gcnVuIHRoZSBkZWZhdWx0IHRhc2sgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHRhcmdldChzKS4KKyAgLXIgUFJFRklMRSwgLS1yZWFkPVBSRUZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlYWQgdGhlIHNwZWNpZmllZCBmaWxlIGJlZm9yZSBiaXRiYWtlLmNvbmYuCisgIC1SIFBPU1RGSUxFLCAtLXBvc3RyZWFkPVBPU1RGSUxFCisgICAgICAgICAgICAgICAgICAgICAgICBSZWFkIHRoZSBzcGVjaWZpZWQgZmlsZSBhZnRlciBiaXRiYWtlLmNvbmYuCisgIC12LCAtLXZlcmJvc2UgICAgICAgICBPdXRwdXQgbW9yZSBsb2cgbWVzc2FnZSBkYXRhIHRvIHRoZSB0ZXJtaW5hbC4KKyAgLUQsIC0tZGVidWcgICAgICAgICAgIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gWW91IGNhbiBzcGVjaWZ5IHRoaXMgbW9yZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhhbiBvbmNlLgorICAtbiwgLS1kcnktcnVuICAgICAgICAgRG9uJ3QgZXhlY3V0ZSwganVzdCBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zLgorICAtUywgLS1kdW1wLXNpZ25hdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIERvbid0IGV4ZWN1dGUsIGp1c3QgZHVtcCBvdXQgdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uIGluZm9ybWF0aW9uLgorICAtcCwgLS1wYXJzZS1vbmx5ICAgICAgUXVpdCBhZnRlciBwYXJzaW5nIHRoZSBCQiByZWNpcGVzLgorICAtcywgLS1zaG93LXZlcnNpb25zICAgU2hvdyBjdXJyZW50IGFuZCBwcmVmZXJyZWQgdmVyc2lvbnMgb2YgYWxsIHJlY2lwZXMuCisgIC1lLCAtLWVudmlyb25tZW50ICAgICBTaG93IHRoZSBnbG9iYWwgb3IgcGVyLXBhY2thZ2UgZW52aXJvbm1lbnQgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdmFyaWFibGVzIHdlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC9jaGFuZ2VkLgorICAtZywgLS1ncmFwaHZpeiAgICAgICAgU2F2ZSBkZXBlbmRlbmN5IHRyZWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMgaW4gdGhlIGRvdCBzeW50YXguCisgIC1JIEVYVFJBX0FTU1VNRV9QUk9WSURFRCwgLS1pZ25vcmUtZGVwcz1FWFRSQV9BU1NVTUVfUFJPVklERUQKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzc3VtZSB0aGVzZSBkZXBlbmRlbmNpZXMgZG9uJ3QgZXhpc3QgYW5kIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCAoZXF1aXZhbGVudCB0byBBU1NVTUVfUFJPVklERUQpLiBVc2VmdWwgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2UgZGVwZW5kZW5jeSBncmFwaHMgbW9yZSBhcHBlYWxpbmcKKyAgLWwgREVCVUdfRE9NQUlOUywgLS1sb2ctZG9tYWlucz1ERUJVR19ET01BSU5TCisgICAgICAgICAgICAgICAgICAgICAgICBTaG93IGRlYnVnIGxvZ2dpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbG9nZ2luZyBkb21haW5zCisgIC1QLCAtLXByb2ZpbGUgICAgICAgICBQcm9maWxlIHRoZSBjb21tYW5kIGFuZCBzYXZlIHJlcG9ydHMuCisgIC11IFVJLCAtLXVpPVVJICAgICAgICBUaGUgdXNlciBpbnRlcmZhY2UgdG8gdXNlIChlLmcuIGtub3R0eSwgaG9iLCBkZXBleHApLgorICAtdCBTRVJWRVJUWVBFLCAtLXNlcnZlcnR5cGU9U0VSVkVSVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlIHdoaWNoIHNlcnZlciB0byB1c2UsIHByb2Nlc3Mgb3IgeG1scnBjLgorICAtLXJldmlzaW9ucy1jaGFuZ2VkICAgU2V0IHRoZSBleGl0IGNvZGUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIHJldmlzaW9ucyBoYXZlIGNoYW5nZWQgb3Igbm90LgorICAtLXNlcnZlci1vbmx5ICAgICAgICAgUnVuIGJpdGJha2Ugd2l0aG91dCBhIFVJLCBvbmx5IHN0YXJ0aW5nIGEgc2VydmVyCisgICAgICAgICAgICAgICAgICAgICAgICAoY29va2VyKSBwcm9jZXNzLgorICAtQiBCSU5ELCAtLWJpbmQ9QklORCAgVGhlIG5hbWUvYWRkcmVzcyBmb3IgdGhlIGJpdGJha2Ugc2VydmVyIHRvIGJpbmQgdG8uCisgIC0tbm8tc2V0c2NlbmUgICAgICAgICBEbyBub3QgcnVuIGFueSBzZXRzY2VuZSB0YXNrcy4gc3N0YXRlIHdpbGwgYmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV2ZXJ5dGhpbmcgbmVlZGVkLCBidWlsdC4KKyAgLS1yZW1vdGUtc2VydmVyPVJFTU9URV9TRVJWRVIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3QgdG8gdGhlIHNwZWNpZmllZCBzZXJ2ZXIuCisgIC1tLCAtLWtpbGwtc2VydmVyICAgICBUZXJtaW5hdGUgdGhlIHJlbW90ZSBzZXJ2ZXIuCisgIC0tb2JzZXJ2ZS1vbmx5ICAgICAgICBDb25uZWN0IHRvIGEgc2VydmVyIGFzIGFuIG9ic2VydmluZy1vbmx5IGNsaWVudC4KKyAgICAgICAgPC9zY3JlZW4+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1iaXRiYWtlLWZldGNoZXJzJz4KKyAgICAgICAgPHRpdGxlPkZldGNoZXJzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJpdEJha2UgYWxzbyBjb250YWlucyBhIHNldCBvZiAiZmV0Y2hlciIgbW9kdWxlcyB0aGF0IGFsbG93CisgICAgICAgICAgICByZXRyaWV2YWwgb2Ygc291cmNlIGNvZGUgZnJvbSB2YXJpb3VzIHR5cGVzIG9mIHNvdXJjZXMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgQml0QmFrZSBjYW4gZ2V0IHNvdXJjZSBjb2RlIGZyb20gYSBkaXNrIHdpdGggdGhlIG1ldGFkYXRhLCBmcm9tIHdlYnNpdGVzLAorICAgICAgICAgICAgZnJvbSByZW1vdGUgc2hlbGwgYWNjb3VudHMsIG9yIGZyb20gU291cmNlIENvZGUgTWFuYWdlbWVudCAoU0NNKSBzeXN0ZW1zCisgICAgICAgICAgICBsaWtlIDxmaWxlbmFtZT5jdnMvc3VidmVyc2lvbi9naXQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRmV0Y2hlcnMgYXJlIHVzdWFsbHkgdHJpZ2dlcmVkIGJ5IGVudHJpZXMgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+U1JDX1VSSTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyBhbmQgZm9ybWF0cyBvZiBlbnRyaWVzIGZvciBzcGVjaWZpYworICAgICAgICAgICAgZmV0Y2hlcnMgaW4gdGhlIEJpdEJha2UgbWFudWFsIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9kb2MvbWFudWFsPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBPbmUgdXNlZnVsIGZlYXR1cmUgZm9yIGNlcnRhaW4gU291cmNlIENvZGUgTWFuYWdlciAoU0NNKSBmZXRjaGVycyBpcyB0aGUgYWJpbGl0eSB0bworICAgICAgICAgICAgImF1dG8tdXBkYXRlIiB3aGVuIHRoZSB1cHN0cmVhbSBTQ00gY2hhbmdlcyB2ZXJzaW9uLgorICAgICAgICAgICAgU2luY2UgdGhpcyBhYmlsaXR5IHJlcXVpcmVzIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSBmcm9tIHRoZSBTQ00sIG5vdCBhbGwKKyAgICAgICAgICAgIHN5c3RlbXMgc3VwcG9ydCBpdC4KKyAgICAgICAgICAgIEN1cnJlbnRseSBTdWJ2ZXJzaW9uLCBCYXphYXIgYW5kIHRvIGEgbGltaXRlZCBleHRlbnQsIEdpdCBzdXBwb3J0IHRoZSBhYmlsaXR5IHRvICJhdXRvLXVwZGF0ZSIuCisgICAgICAgICAgICBUaGlzIGZlYXR1cmUgd29ya3MgdXNpbmcgdGhlIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz5TUkNSRVY8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BsYXRkZXYtYXBwZGV2LXNyY3Jldic+VXNpbmcgYW4gRXh0ZXJuYWwgU0NNPC91bGluaz4iIHNlY3Rpb24KKyAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00IHNwZWxsIHNwZWxsbGFuZz1lbl9nYgorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWNsYXNzZXMueG1sIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODdjOWZmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1jbGFzc2VzLnhtbApAQCAtMCwwICsxLDM1MzkgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZWYtY2xhc3Nlcyc+Cis8dGl0bGU+Q2xhc3NlczwvdGl0bGU+CisKKzxwYXJhPgorICAgIENsYXNzIGZpbGVzIGFyZSB1c2VkIHRvIGFic3RyYWN0IGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFuZCBzaGFyZSBpdCBhbW9uZ3N0CisgICAgbXVsdGlwbGUgcmVjaXBlICg8ZmlsZW5hbWU+LmJiPC9maWxlbmFtZT4pIGZpbGVzLgorICAgIFRvIHVzZSBhIGNsYXNzIGZpbGUsIHlvdSBzaW1wbHkgbWFrZSBzdXJlIHRoZSByZWNpcGUgaW5oZXJpdHMgdGhlIGNsYXNzLgorICAgIEluIG1vc3QgY2FzZXMsIHdoZW4gYSByZWNpcGUgaW5oZXJpdHMgYSBjbGFzcyBpdCBpcyBlbm91Z2ggdG8gZW5hYmxlIGl0cworICAgIGZlYXR1cmVzLgorICAgIFRoZXJlIGFyZSBjYXNlcywgaG93ZXZlciwgd2hlcmUgaW4gdGhlIHJlY2lwZSB5b3UgbWlnaHQgbmVlZCB0byBzZXQKKyAgICB2YXJpYWJsZXMgb3Igb3ZlcnJpZGUgc29tZSBkZWZhdWx0IGJlaGF2aW9yLgorPC9wYXJhPgorCis8cGFyYT4KKyAgICBBbnkgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdXN1YWxseQorICAgIGZvdW5kIGluIGEgcmVjaXBlIGNhbiBhbHNvIGJlIHBsYWNlZCBpbiBhIGNsYXNzIGZpbGUuCisgICAgQ2xhc3MgZmlsZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIGV4dGVuc2lvbiA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgIGFuZCBhcmUgdXN1YWxseSBwbGFjZWQgaW4gYSA8ZmlsZW5hbWU+Y2xhc3Nlcy88L2ZpbGVuYW1lPiBkaXJlY3RvcnkgYmVuZWF0aAorICAgIHRoZSA8ZmlsZW5hbWU+bWV0YSovPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZvdW5kIGluIHRoZQorICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICBDbGFzcyBmaWxlcyBjYW4gYWxzbyBiZSBwb2ludGVkIHRvIGJ5CisgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxERElSJz48ZmlsZW5hbWU+QlVJTERESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAoZS5nLiA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT4pIGluIHRoZSBzYW1lIHdheSBhcworICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICBDbGFzcyBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIGluCisgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBieSB3aGljaCA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlcyBhcmUKKyAgICBzZWFyY2hlZC4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgVGhpcyBjaGFwdGVyIGRpc2N1c3NlcyBvbmx5IHRoZSBtb3N0IHVzZWZ1bCBhbmQgaW1wb3J0YW50IGNsYXNzZXMuCisgICAgT3RoZXIgY2xhc3NlcyBkbyBleGlzdCB3aXRoaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPgorICAgIGRpcmVjdG9yeSBpbiB0aGUKKyAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgWW91IGNhbiByZWZlcmVuY2UgdGhlIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzIGRpcmVjdGx5CisgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCis8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1hbGxhcmNoJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmFsbGFyY2guYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmFsbGFyY2g8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbmhlcml0ZWQKKyAgICAgICAgYnkgcmVjaXBlcyB0aGF0IGRvIG5vdCBwcm9kdWNlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvdXRwdXQuCisgICAgICAgIFRoZSBjbGFzcyBkaXNhYmxlcyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgbm9ybWFsbHkgbmVlZGVkIGZvciByZWNpcGVzCisgICAgICAgIHRoYXQgcHJvZHVjZSBleGVjdXRhYmxlIGJpbmFyaWVzIChzdWNoIGFzIGJ1aWxkaW5nIHRoZSBjcm9zcy1jb21waWxlcgorICAgICAgICBhbmQgYSBDIGxpYnJhcnkgYXMgcHJlLXJlcXVpc2l0ZXMsIGFuZCBzcGxpdHRpbmcgb3V0IG9mIGRlYnVnIHN5bWJvbHMKKyAgICAgICAgZHVyaW5nIHBhY2thZ2luZykuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVW5saWtlIGUuZy4gRGViaWFuLCBPcGVuRW1iZWRkZWQgcmVjaXBlcyB0aGF0IHByb2R1Y2UgcGFja2FnZXMKKyAgICAgICAgICAgIHdoaWNoCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb24KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX1BLR0FSQ0gnPjxmaWxlbmFtZT5UVU5FX1BLR0FSQ0g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHBhY2thZ2VzIHNob3VsZCBuZXZlciBiZSBtYWRlIDxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT4sIGV2ZW4KKyAgICAgICAgICAgIGlmIHRoZXkgZG8gbm90IHByb2R1Y2UgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG91dHB1dC4gVGhpcyB3b3VsZAorICAgICAgICAgICAgY2F1c2UgdGhlIGRvX3BhY2thZ2Vfd3JpdGVfKiB0YXNrcyB0byBoYXZlIGRpZmZlcmVudCBzaWduYXR1cmVzCisgICAgICAgICAgICBmb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPnMKKyAgICAgICAgICAgIHdpdGggZGlmZmVyZW50CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgdGh1cyB1bm5lY2Vzc2FyeSByZWJ1aWxkcyBldmVyeSBzaW5nbGUgdGltZSBhbiBpbWFnZSBmb3IgYSBkaWZmZXJlbnQKKyAgICAgICAgICAgIE1BQ0hJTkUgaXMgYnVpbHQgKGV2ZW4gd2l0aG91dCBhbnkgY2hhbmdlIHRvIHRoZSByZWNpcGUpLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIGFsbCByZWNpcGVzIGluaGVyaXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzLCB3aGljaCBlbmFibGUgZnVuY3Rpb25hbGl0eQorICAgICAgICBuZWVkZWQgZm9yIHJlY2lwZXMgdGhhdCBwcm9kdWNlIGV4ZWN1dGFibGUgb3V0cHV0LgorICAgICAgICBJZiB5b3VyIHJlY2lwZSwgZm9yIGV4YW1wbGUsIG9ubHkgcHJvZHVjZXMgcGFja2FnZXMgdGhhdCBjb250YWluCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG1lZGlhIGZpbGVzLCBvciBzY3JpcHRzIChlLmcuIFB5dGhvbiBhbmQgUGVybCksCisgICAgICAgIHRoZW4gaXQgc2hvdWxkIGluaGVyaXQgdGhlIDxmaWxlbmFtZT5hbGxhcmNoPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YXJjaGl2ZXIuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVsZWFzaW5nCisgICAgICAgIHNvdXJjZSBjb2RlIGFuZCBvdGhlciBtYXRlcmlhbHMgd2l0aCB0aGUgYmluYXJpZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHNvdXJjZSBhcmNoaXZlciwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2R1Y3QncyBMaWZlY3ljbGU8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BUkNISVZFUl9NT0RFJz48ZmlsZW5hbWU+QVJDSElWRVJfTU9ERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlhYmxlIGZsYWdzICh2YXJmbGFncykKKyAgICAgICAgdGhhdCBoZWxwIGNvbnRyb2wgYXJjaGl2ZSBjcmVhdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBBdXRvdG9vbGVkCisgICAgICAgIHBhY2thZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmF1dG9jb25mPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5hdXRvbWFrZTwvZmlsZW5hbWU+LAorICAgICAgICBhbmQgPGZpbGVuYW1lPmxpYnRvb2w8L2ZpbGVuYW1lPiBicmluZyBzdGFuZGFyZGl6YXRpb24uCisgICAgICAgIFRoaXMgY2xhc3MgZGVmaW5lcyBhIHNldCBvZiB0YXNrcyAoY29uZmlndXJlLCBjb21waWxlIGV0Yy4pIHRoYXQKKyAgICAgICAgd29yayBmb3IgYWxsIEF1dG90b29sZWQgcGFja2FnZXMuCisgICAgICAgIEl0IHNob3VsZCB1c3VhbGx5IGJlIGVub3VnaCB0byBkZWZpbmUgYSBmZXcgc3RhbmRhcmQgdmFyaWFibGVzCisgICAgICAgIGFuZCB0aGVuIHNpbXBseSA8ZmlsZW5hbWU+aW5oZXJpdCBhdXRvdG9vbHM8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhpcyBjbGFzcyBjYW4gYWxzbyB3b3JrIHdpdGggc29mdHdhcmUgdGhhdCBlbXVsYXRlcyBBdXRvdG9vbHMuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWF1dG90b29sZWQtcGFja2FnZSc+QXV0b3Rvb2xlZCBQYWNrYWdlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHVzZXMgb3V0LW9mLXRyZWUgYnVpbGRzCisgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gPGZpbGVuYW1lPiE9PC9maWxlbmFtZT4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGJ5IGEgcmVjaXBlIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgICAgdXNpbmcgb3V0LW9mLXRyZWUgYnVpbGRzLCB5b3Ugc2hvdWxkIGhhdmUgdGhlIHJlY2lwZSBpbmhlcml0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMtYnJva2Vuc2VwJz48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSXQncyB1c2VmdWwgdG8gaGF2ZSBzb21lIGlkZWEgb2YgaG93IHRoZSB0YXNrcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3Mgd29yaworICAgICAgICBhbmQgd2hhdCB0aGV5IGRvIGJlaGluZCB0aGUgc2NlbmVzLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4gLQorICAgICAgICAgICAgICAgIFJlZ2VuZXJhdGVzIHRoZQorICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgKHVzaW5nIDxmaWxlbmFtZT5hdXRvcmVjb25mPC9maWxlbmFtZT4pIGFuZCB0aGVuIGxhdW5jaGVzIGl0CisgICAgICAgICAgICAgICAgd2l0aCBhIHN0YW5kYXJkIHNldCBvZiBhcmd1bWVudHMgdXNlZCBkdXJpbmcgY3Jvc3MtY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAgWW91IGNhbiBwYXNzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+RVhUUkFfT0VDT05GPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPiAtIFJ1bnMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgYXJndW1lbnRzIHRoYXQgc3BlY2lmeSB0aGUgY29tcGlsZXIgYW5kIGxpbmtlci4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdGhyb3VnaAorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPiAtIFJ1bnMgPGZpbGVuYW1lPm1ha2UgaW5zdGFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgYW5kIHBhc3NlcyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT5ERVNURElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWF1dG90b29scy1icm9rZW5zZXAnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzLWJyb2tlbnNlcDwvZmlsZW5hbWU+IGNsYXNzIGJlaGF2ZXMgdGhlIHNhbWUKKyAgICAgICAgYXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBidXQgYnVpbGRzIHdpdGgKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+ID09CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4gb3V0LW9mLXRyZWUgYnVpbGQgc3VwcG9ydCBpcyBlaXRoZXIgbm90CisgICAgICAgIHByZXNlbnQgb3IgaXMgYnJva2VuLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgb3V0LW9mLXRyZWUgc3VwcG9ydCBiZSBmaXhlZCBhbmQgdXNlZAorICAgICAgICAgICAgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MgaXMgc3BlY2lhbCBpbiB0aGF0IGV2ZXJ5CisgICAgICAgIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBmaWxlIGltcGxpY2l0bHkgaW5oZXJpdHMgdGhlIGNsYXNzLgorICAgICAgICBUaGlzIGNsYXNzIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBzdGFuZGFyZCBiYXNpYworICAgICAgICB0YXNrcyBzdWNoIGFzIGZldGNoaW5nLCB1bnBhY2tpbmcsIGNvbmZpZ3VyaW5nIChlbXB0eSBieSBkZWZhdWx0KSwKKyAgICAgICAgY29tcGlsaW5nIChydW5zIGFueSA8ZmlsZW5hbWU+TWFrZWZpbGU8L2ZpbGVuYW1lPiBwcmVzZW50KSwgaW5zdGFsbGluZworICAgICAgICAoZW1wdHkgYnkgZGVmYXVsdCkgYW5kIHBhY2thZ2luZyAoZW1wdHkgYnkgZGVmYXVsdCkuCisgICAgICAgIFRoZXNlIGNsYXNzZXMgYXJlIG9mdGVuIG92ZXJyaWRkZW4gb3IgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3NlcworICAgICAgICBzdWNoIGFzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Mgb3IgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBjb250YWlucyBzb21lIGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgICAgPGZpbGVuYW1lPm9lX3J1bm1ha2U8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1iaW4tcGFja2FnZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iaW5fcGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmluX3BhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcyBpcyBhCisgICAgICAgIGhlbHBlciBjbGFzcyBmb3IgcmVjaXBlcyB0aGF0IGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIGEgYmluYXJ5IHBhY2thZ2UKKyAgICAgICAgKGUuZy4gYW4gUlBNKSBhbmQgaW5zdGFsbCB0aG9zZSBjb250ZW50cyByYXRoZXIgdGhhbiBidWlsZGluZyB0aGUKKyAgICAgICAgYmluYXJ5IGZyb20gc291cmNlLgorICAgICAgICBUaGUgYmluYXJ5IHBhY2thZ2UgaXMgZXh0cmFjdGVkIGFuZCBuZXcgcGFja2FnZXMgaW4gdGhlIGNvbmZpZ3VyZWQKKyAgICAgICAgb3V0cHV0IHBhY2thZ2UgZm9ybWF0IGFyZSBjcmVhdGVkLgorICAgICAgICBFeHRyYWN0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgcHJvcHJpZXRhcnkgYmluYXJpZXMgaXMgYSBnb29kIGV4YW1wbGUKKyAgICAgICAgdXNlIGZvciB0aGlzIGNsYXNzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEZvciBSUE1zIGFuZCBvdGhlciBwYWNrYWdlcyB0aGF0IGRvIG5vdCBjb250YWluIGEgc3ViZGlyZWN0b3J5LAorICAgICAgICAgICAgeW91IHNob3VsZCBzcGVjaWZ5IGEgInN1YmRpciIgcGFyYW1ldGVyLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlIDxmaWxlbmFtZT4ke0JQfTwvZmlsZW5hbWU+IGlzIHVzZWQgc28gdGhhdAorICAgICAgICAgICAgdGhlIGZpbGVzIGFyZSBleHRyYWN0ZWQgaW50byB0aGUgc3ViZGlyZWN0b3J5IGV4cGVjdGVkIGJ5IHRoZQorICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTUkNfVVJJID0gImh0dHA6Ly9leGFtcGxlLmNvbS9kb3dubG9hZHMvc29tZXBhY2thZ2UucnBtO3N1YmRpcj0ke0JQfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+IGNsYXNzIGhlbHBzIHRvIGNvcnJlY3QgcGF0aHMgaW4KKyAgICAgICAgc2hlbGwgc2NyaXB0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaGFkIGJlY29tZSB3aWRlc3ByZWFkLCBsaWJyYXJpZXMKKyAgICAgICAgc2hpcHBlZCBzaGVsbCBzY3JpcHRzIHRvIGdpdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpYnJhcmllcyBhbmQKKyAgICAgICAgaW5jbHVkZSBwYXRocyBuZWVkZWQgdG8gYnVpbGQgc29mdHdhcmUgKHVzdWFsbHkgbmFtZWQKKyAgICAgICAgPGZpbGVuYW1lPkxJQk5BTUUtY29uZmlnPC9maWxlbmFtZT4pLgorICAgICAgICBUaGlzIGNsYXNzIGFzc2lzdHMgYW55IHJlY2lwZSB1c2luZyBzdWNoIHNjcmlwdHMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIER1cmluZyBzdGFnaW5nLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbnN0YWxscyBzdWNoIHNjcmlwdHMKKyAgICAgICAgaW50byB0aGUgPGZpbGVuYW1lPnN5c3Jvb3RzLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgSW5oZXJpdGluZyB0aGlzIGNsYXNzIHJlc3VsdHMgaW4gYWxsIHBhdGhzIGluIHRoZXNlIHNjcmlwdHMgYmVpbmcKKyAgICAgICAgY2hhbmdlZCB0byBwb2ludCBpbnRvIHRoZSA8ZmlsZW5hbWU+c3lzcm9vdHMvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHNvCisgICAgICAgIHRoYXQgYWxsIGJ1aWxkcyB0aGF0IHVzZSB0aGUgc2NyaXB0IHVzZSB0aGUgY29ycmVjdCBkaXJlY3RvcmllcworICAgICAgICBmb3IgdGhlIGNyb3NzIGNvbXBpbGluZyBsYXlvdXQuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJJTkNPTkZJR19HTE9CJz48ZmlsZW5hbWU+QklOQ09ORklHX0dMT0I8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnLWRpc2FibGVkJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEFuIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+PGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcywgd2hpY2ggZGlzYWJsZXMgYmluYXJ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cyBieSBtYWtpbmcgdGhlbQorICAgICAgICByZXR1cm4gYW4gZXJyb3IgaW4gZmF2b3Igb2YgdXNpbmcgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPgorICAgICAgICB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBzY3JpcHRzIHRvIGJlIGRpc2FibGVkIHNob3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CSU5DT05GSUcnPjxmaWxlbmFtZT5CSU5DT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgd2l0aGluIHRoZSByZWNpcGUgaW5oZXJpdGluZyB0aGUgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYmxhY2tsaXN0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJsYWNrbGlzdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YmxhY2tsaXN0PC9maWxlbmFtZT4gY2xhc3MgcHJldmVudHMKKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZnJvbSBidWlsZGluZyBzcGVjaWZpYyByZWNpcGVzCisgICAgICAgIChibGFja2xpc3RzIHRoZW0pLgorICAgICAgICBUbyB1c2UgdGhpcyBjbGFzcywgaW5oZXJpdCB0aGUgY2xhc3MgZ2xvYmFsbHkgYW5kIHNldAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE5CTEFDS0xJU1QnPjxmaWxlbmFtZT5QTkJMQUNLTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBmb3IgZWFjaCByZWNpcGUgeW91IHdpc2ggdG8gYmxhY2tsaXN0LgorICAgICAgICBTcGVjaWZ5IHRoZSA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YWx1ZSBhcyBhIHZhcmlhYmxlIGZsYWcgKHZhcmZsYWcpIGFuZCBwcm92aWRlIGEgcmVhc29uLCB3aGljaCBpcworICAgICAgICByZXBvcnRlZCwgaWYgdGhlIHBhY2thZ2UgaXMgcmVxdWVzdGVkIHRvIGJlIGJ1aWx0IGFzIHRoZSB2YWx1ZS4KKyAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGJsYWNrbGlzdCBhIHJlY2lwZSBjYWxsZWQgImV4b3RpY3dhcmUiLAorICAgICAgICB5b3UgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgIG9yIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImJsYWNrbGlzdCIKKyAgICAgUE5CTEFDS0xJU1RbZXhvdGljd2FyZV0gPSAiTm90IHN1cHBvcnRlZCBieSBvdXIgb3JnYW5pemF0aW9uLiIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJsdWV0b290aCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5ibHVldG9vdGguYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJsdWV0b290aDwvZmlsZW5hbWU+IGNsYXNzIGRlZmluZXMgYSB2YXJpYWJsZSB0aGF0CisgICAgICAgIGV4cGFuZHMgdG8gdGhlIHJlY2lwZSAocGFja2FnZSkgcHJvdmlkaW5nIGNvcmUKKyAgICAgICAgYmx1ZXRvb3RoIHN1cHBvcnQgb24gdGhlIHBsYXRmb3JtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgdGhlIGNsYXNzIHdvcmtzLCBzZWUgdGhlCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmx1ZXRvb3RoLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZSBZb2N0bworICAgICAgICBQcm9qZWN0CisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ib290LWRpcmVjdGRpc2snPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Ym9vdC1kaXJlY3RkaXNrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ib290LWRpcmVjdGRpc2s8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBjcmVhdGVzIGFuIGltYWdlIHRoYXQgY2FuIGJlIHBsYWNlZCBkaXJlY3RseSBvbnRvIGEgaGFyZCBkaXNrIHVzaW5nCisgICAgICAgIDxmaWxlbmFtZT5kZDwvZmlsZW5hbWU+IGFuZCB0aGVuIGJvb3RlZC4KKyAgICAgICAgVGhlIGltYWdlIHVzZXMgU1lTTElOVVguCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBlbmQgcmVzdWx0IGlzIGEgNTEyIGJvb3Qgc2VjdG9yIHBvcHVsYXRlZCB3aXRoIGEKKyAgICAgICAgTWFzdGVyIEJvb3QgUmVjb3JkIChNQlIpIGFuZCBwYXJ0aXRpb24gdGFibGUgZm9sbG93ZWQgYnkgYW4gTVNET1MKKyAgICAgICAgRkFUMTYgcGFydGl0aW9uIGNvbnRhaW5pbmcgU1lTTElOVVggYW5kIGEgTGludXgga2VybmVsIGNvbXBsZXRlZCBieQorICAgICAgICB0aGUgPGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICByb290IGZpbGVzeXN0ZW1zLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Ym9vdGltZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Ym9vdGltZzwvZmlsZW5hbWU+IGNsYXNzIGNyZWF0ZXMgYSBib290YWJsZQorICAgICAgICBpbWFnZSB1c2luZyBTWVNMSU5VWCwgeW91ciBrZXJuZWwsIGFuZCBhbiBvcHRpb25hbCBpbml0aWFsIFJBTSBkaXNrCisgICAgICAgICg8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBjbGFzcywgdHdvIHRoaW5ncyBoYXBwZW46CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGZpbGUgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgYW4gTVNET1MgZmlsZXN5c3RlbSB0aGF0IGNvbnRhaW5zIFNZU0xJTlVYLAorICAgICAgICAgICAgICAgIGEga2VybmVsLCBhbiA8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4sIGFuZCBhIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIEFsbCB0aHJlZSBvZiB0aGVzZSBjYW4gYmUgd3JpdHRlbiB0byBoYXJkIGRyaXZlcyBkaXJlY3RseSBhbmQKKyAgICAgICAgICAgICAgICBhbHNvIGJvb3RlZCBvbiBhIFVTQiBmbGFzaCBkaXNrcyB1c2luZyA8ZmlsZW5hbWU+ZGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBBIENEIDxmaWxlbmFtZT4uaXNvPC9maWxlbmFtZT4gaW1hZ2UgaXMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICBXaGVuIHRoaXMgZmlsZSBpcyBib290ZWQsIHRoZSA8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBib290cyBhbmQgcHJvY2Vzc2VzIHRoZSBsYWJlbCBzZWxlY3RlZCBpbiBTWVNMSU5VWC4KKyAgICAgICAgICAgICAgICBBY3Rpb25zIGJhc2VkIG9uIHRoZSBsYWJlbCBhcmUgdGhlbiBwZXJmb3JtZWQgKGUuZy4gaW5zdGFsbGluZworICAgICAgICAgICAgICAgIHRvIGEgaGFyZCBkcml2ZSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSRCc+PGZpbGVuYW1lPklOSVRSRDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PSVNPJz48ZmlsZW5hbWU+Tk9JU088L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1OT0hERCc+PGZpbGVuYW1lPk5PSEREPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJPT1RGUyc+PGZpbGVuYW1lPlJPT1RGUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtYnVnemlsbGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVnemlsbGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1Z3ppbGxhPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgc2V0dGluZyB1cCBhbgorICAgICAgICBpbnN0YW5jZSBvZiBCdWd6aWxsYSBpbiB3aGljaCB5b3UgY2FuIGF1dG9tYXRpY2FsbHkgZmlsZXMgYnVnIHJlcG9ydHMKKyAgICAgICAgaW4gcmVzcG9uc2UgdG8gYnVpbGQgZmFpbHVyZXMuCisgICAgICAgIEZvciB0aGlzIGNsYXNzIHRvIHdvcmssIHlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgWE1MLVJQQyBpbnRlcmZhY2UgaW4KKyAgICAgICAgdGhlIGluc3RhbmNlIG9mIEJ1Z3ppbGxhLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZGhpc3RvcnkuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzIHJlY29yZHMgYQorICAgICAgICBoaXN0b3J5IG9mIGJ1aWxkIG91dHB1dCBtZXRhZGF0YSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHBvc3NpYmxlCisgICAgICAgIHJlZ3Jlc3Npb25zIGFzIHdlbGwgYXMgdXNlZCBmb3IgYW5hbHlzaXMgb2YgdGhlIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgQnVpbGQgSGlzdG9yeSwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkc3RhdHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmJ1aWxkc3RhdHM8L2ZpbGVuYW1lPiBjbGFzcyByZWNvcmRzCisgICAgICAgIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3MgYWJvdXQgZWFjaCB0YXNrIGV4ZWN1dGVkIGR1cmluZyB0aGUgYnVpbGQKKyAgICAgICAgKGUuZy4gZWxhcHNlZCB0aW1lLCBDUFUgdXNhZ2UsIGFuZCBJL08gdXNhZ2UpLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSB1c2UgdGhpcyBjbGFzcywgdGhlIG91dHB1dCBnb2VzIGludG8gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRFNUQVRTX0JBU0UnPjxmaWxlbmFtZT5CVUlMRFNUQVRTX0JBU0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+JHtUTVBESVJ9L2J1aWxkc3RhdHMvPC9maWxlbmFtZT4uCisgICAgICAgIFlvdSBjYW4gYW5hbHl6ZSB0aGUgZWxhcHNlZCB0aW1lIHVzaW5nCisgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5PC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgIHByb2R1Y2VzIGEgY2FzY2FkaW5nIGNoYXJ0IG9mIHRoZSBlbnRpcmUgYnVpbGQgcHJvY2VzcyBhbmQgY2FuIGJlCisgICAgICAgIHVzZWZ1bCBmb3IgaGlnaGxpZ2h0aW5nIGJvdHRsZW5lY2tzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBDb2xsZWN0aW5nIGJ1aWxkIHN0YXRpc3RpY3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSX0NMQVNTRVMnPjxmaWxlbmFtZT5VU0VSX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgZnJvbSB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgZG8gbm90IGhhdmUgdG8gZG8gYW55dGhpbmcgdG8gZW5hYmxlIHRoZSBjbGFzcy4KKyAgICAgICAgSG93ZXZlciwgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGUgY2xhc3MsIHNpbXBseSByZW1vdmUgImJ1aWxkc3RhdHMiCisgICAgICAgIGZyb20gdGhlIDxmaWxlbmFtZT5VU0VSX0NMQVNTRVM8L2ZpbGVuYW1lPiBsaXN0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWJ1aWxkc3RhdHMtc3VtbWFyeSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZHN0YXRzLXN1bW1hcnkuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBXaGVuIGluaGVyaXRlZCBnbG9iYWxseSwgcHJpbnRzIHN0YXRpc3RpY3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQKKyAgICAgICAgb24gc3N0YXRlIHJlLXVzZS4KKyAgICAgICAgSW4gb3JkZXIgdG8gZnVuY3Rpb24sIHRoaXMgY2xhc3MgcmVxdWlyZXMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkc3RhdHMnPjxmaWxlbmFtZT5idWlsZHN0YXRzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGJlIGVuYWJsZWQuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY2NhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNjYWNoZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2NhY2hlPC9maWxlbmFtZT4gY2xhc3MgZW5hYmxlcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2NjYWNoZS5zYW1iYS5vcmcvJz5DL0MrKyBDb21waWxlciBDYWNoZTwvdWxpbms+CisgICAgICAgIGZvciB0aGUgYnVpbGQuCisgICAgICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnaXZlIGEgbWlub3IgcGVyZm9ybWFuY2UgYm9vc3QgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgSG93ZXZlciwgdXNpbmcgdGhlIGNsYXNzIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzLgorICAgICAgICBUaHVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MuCisgICAgICAgIFNlZSA8dWxpbmsgdXJsPSdodHRwOi8vY2NhY2hlLnNhbWJhLm9yZy8nPjwvdWxpbms+IGZvciBpbmZvcm1hdGlvbiBvbgorICAgICAgICB0aGUgQy9DKysgQ29tcGlsZXIgQ2FjaGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY2hycGF0aCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jaHJwYXRoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jaHJwYXRoPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgImNocnBhdGgiIHV0aWxpdHksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIHRoZQorICAgICAgICBidWlsZCBwcm9jZXNzIGZvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5jcm9zczwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgPGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4gcmVjaXBlcyB0byBjaGFuZ2UKKyAgICAgICAgPGZpbGVuYW1lPlJQQVRIPC9maWxlbmFtZT4gcmVjb3JkcyB3aXRoaW4gYmluYXJpZXMgaW4gb3JkZXIgdG8gbWFrZQorICAgICAgICB0aGVtIHJlbG9jYXRhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNsdXR0ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y2x1dHRlci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y2x1dHRlcjwvZmlsZW5hbWU+IGNsYXNzIGNvbnNvbGlkYXRlcyB0aGUKKyAgICAgICAgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbmFtaW5nIGFuZCBvdGhlciBjb21tb24gaXRlbXMgdXNlZCBieSBDbHV0dGVyCisgICAgICAgIGFuZCByZWxhdGVkIHJlY2lwZXMuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVW5saWtlIHNvbWUgb3RoZXIgY2xhc3NlcyByZWxhdGVkIHRvIHNwZWNpZmljIGxpYnJhcmllcywgcmVjaXBlcworICAgICAgICAgICAgYnVpbGRpbmcgb3RoZXIgc29mdHdhcmUgdGhhdCB1c2VzIENsdXR0ZXIgZG8gbm90IG5lZWQgdG8KKyAgICAgICAgICAgIGluaGVyaXQgdGhpcyBjbGFzcyB1bmxlc3MgdGhleSB1c2UgdGhlIHNhbWUgcmVjaXBlIHZlcnNpb25pbmcKKyAgICAgICAgICAgIHNjaGVtZSB0aGF0IHRoZSBDbHV0dGVyIGFuZCByZWxhdGVkIHJlY2lwZXMgZG8uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jbWFrZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jbWFrZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y21ha2U8L2ZpbGVuYW1lPiBjbGFzcyBhbGxvd3MgZm9yCisgICAgICAgIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGJ1aWxkIHNvZnR3YXJlIHVzaW5nIHRoZSBDTWFrZSBidWlsZCBzeXN0ZW0uCisgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfT0VDTUFLRSc+PGZpbGVuYW1lPkVYVFJBX09FQ01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBwYXNzZWQgb24KKyAgICAgICAgdGhlIDxmaWxlbmFtZT5jbWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgbGluZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jbWwxJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNtbDEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNtbDE8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciB0aGUKKyAgICAgICAgTGludXgga2VybmVsIHN0eWxlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gc3lzdGVtLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNvbXByZXNzX2RvYyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jb21wcmVzc19kb2MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIGNvbXByZXNzaW9uIGZvciBtYW4gcGFnZXMgYW5kIGluZm8gcGFnZXMuCisgICAgICAgIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGdsb2JhbGx5LgorICAgICAgICBUaGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtZWNoYW5pc20gaXMgZ3ogKGd6aXApIGJ1dCB5b3UgY2FuCisgICAgICAgIHNlbGVjdCBhbiBhbHRlcm5hdGl2ZSBtZWNoYW5pc20gYnkgc2V0dGluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURPQ19DT01QUkVTUyc+PGZpbGVuYW1lPkRPQ19DT01QUkVTUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb3B5bGVmdF9jb21wbGlhbmNlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmNvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNvcHlsZWZ0X2NvbXBsaWFuY2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcmVzZXJ2ZXMgc291cmNlIGNvZGUgZm9yIHRoZSBwdXJwb3NlcyBvZiBsaWNlbnNlIGNvbXBsaWFuY2UuCisgICAgICAgIFRoaXMgY2xhc3MgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIDxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+CisgICAgICAgIGNsYXNzIGFuZCBpcyBzdGlsbCB1c2VkIGJ5IHNvbWUgdXNlcnMgZXZlbiB0aG91Z2ggaXQgaGFzIGJlZW4KKyAgICAgICAgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jb3B5bGVmdF9maWx0ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29weWxlZnRfZmlsdGVyLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQSBjbGFzcyB1c2VkIGJ5IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hcmNoaXZlcic+PGZpbGVuYW1lPmFyY2hpdmVyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jb3B5bGVmdF9jb21wbGlhbmNlJz48ZmlsZW5hbWU+Y29weWxlZnRfY29tcGxpYW5jZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzIGZvciBmaWx0ZXJpbmcgbGljZW5zZXMuCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29weWxlZnRfZmlsdGVyPC9maWxlbmFtZT4gY2xhc3MgaXMgYW4gaW50ZXJuYWwgY2xhc3MKKyAgICAgICAgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWNvcmUtaW1hZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y29yZS1pbWFnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBkZWZpbml0aW9ucyBmb3IgdGhlCisgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLSo8L2ZpbGVuYW1lPiBpbWFnZSByZWNpcGVzLCBzdWNoIGFzIHN1cHBvcnQgZm9yCisgICAgICAgIGFkZGl0aW9uYWwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Bhbic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jcGFuLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5jcGFuPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgUGVybCBtb2R1bGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBSZWNpcGVzIGZvciBQZXJsIG1vZHVsZXMgYXJlIHNpbXBsZS4KKyAgICAgICAgVGhlc2UgcmVjaXBlcyB1c3VhbGx5IG9ubHkgbmVlZCB0byBwb2ludCB0byB0aGUgc291cmNlJ3MgYXJjaGl2ZSBhbmQKKyAgICAgICAgdGhlbiBpbmhlcml0IHRoZSBwcm9wZXIgY2xhc3MgZmlsZS4KKyAgICAgICAgQnVpbGRpbmcgaXMgc3BsaXQgaW50byB0d28gbWV0aG9kcyBkZXBlbmRpbmcgb24gd2hpY2ggbWV0aG9kIHRoZSBtb2R1bGUKKyAgICAgICAgYXV0aG9ycyB1c2VkLgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1vZHVsZXMgdGhhdCB1c2Ugb2xkCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlLlBMPC9maWxlbmFtZT4tYmFzZWQgYnVpbGQgc3lzdGVtIHJlcXVpcmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y3Bhbi5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Nb2R1bGVzIHRoYXQgdXNlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJ1aWxkLlBMPC9maWxlbmFtZT4tYmFzZWQgYnVpbGQgc3lzdGVtIHJlcXVpcmUKKyAgICAgICAgICAgICAgICB1c2luZyA8ZmlsZW5hbWU+Y3Bhbl9idWlsZC5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Jvc3MnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Jvc3MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNyb3NzPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJlY2lwZXMKKyAgICAgICAgdGhhdCBidWlsZCB0aGUgY3Jvc3MtY29tcGlsYXRpb24gdG9vbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtY3Jvc3MtY2FuYWRpYW4nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Y3Jvc3MtY2FuYWRpYW4uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHJlY2lwZXMgdGhhdCBidWlsZCB0aGUgQ2FuYWRpYW4KKyAgICAgICAgQ3Jvc3MtY29tcGlsYXRpb24gdG9vbHMgZm9yIFNES3MuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgZGlzY3Vzc2lvbiBvbiB0aGVzZSBjcm9zcy1jb21waWxhdGlvbiB0b29scy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1jcm9zc3Nkayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5jcm9zc3Nkay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Y3Jvc3NzZGs8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgcmVjaXBlcyB0aGF0IGJ1aWxkIHRoZSBjcm9zcy1jb21waWxhdGlvbgorICAgICAgICB0b29scyB1c2VkIGZvciBidWlsZGluZyBTREtzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRpc2N1c3Npb24gb24gdGhlc2UgY3Jvc3MtY29tcGlsYXRpb24gdG9vbHMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGViaWFuJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRlYmlhbi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT4gY2xhc3MgcmVuYW1lcyBvdXRwdXQgcGFja2FnZXMgc28gdGhhdAorICAgICAgICB0aGV5IGZvbGxvdyB0aGUgRGViaWFuIG5hbWluZyBwb2xpY3kgKGkuZS4gPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4KKyAgICAgICAgYmVjb21lcyA8ZmlsZW5hbWU+bGliYzY8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdsaWJjLWRldmVsPC9maWxlbmFtZT4KKyAgICAgICAgYmVjb21lcyA8ZmlsZW5hbWU+bGliYzYtZGV2PC9maWxlbmFtZT4uKQorICAgICAgICBSZW5hbWluZyBpbmNsdWRlcyB0aGUgbGlicmFyeSBuYW1lIGFuZCB2ZXJzaW9uIGFzIHBhcnQgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgbmFtZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgYSByZWNpcGUgY3JlYXRlcyBwYWNrYWdlcyBmb3IgbXVsdGlwbGUgbGlicmFyaWVzCisgICAgICAgIChzaGFyZWQgb2JqZWN0IGZpbGVzIG9mIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiB0eXBlKSwgdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEVBRF9TT05BTUUnPjxmaWxlbmFtZT5MRUFEX1NPTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgcmVjaXBlIHRvIHNwZWNpZnkgdGhlIGxpYnJhcnkgb24gd2hpY2ggdG8gYXBwbHkgdGhlCisgICAgICAgIG5hbWluZyBzY2hlbWUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGVwbG95Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRlcGxveS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gY2xhc3MgaGFuZGxlcyBkZXBsb3lpbmcgZmlsZXMKKyAgICAgICAgdG8gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JTUFHRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgIFRoZSBtYWluIGZ1bmN0aW9uIG9mIHRoaXMgY2xhc3MgaXMgdG8gYWxsb3cgdGhlIGRlcGxveSBzdGVwIHRvIGJlCisgICAgICAgIGFjY2VsZXJhdGVkIGJ5IHNoYXJlZCBzdGF0ZS4KKyAgICAgICAgUmVjaXBlcyB0aGF0IGluaGVyaXQgdGhpcyBjbGFzcyBzaG91bGQgZGVmaW5lIHRoZWlyIG93bgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZGVwbG95Jz48ZmlsZW5hbWU+ZG9fZGVwbG95PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGZ1bmN0aW9uIHRvIGNvcHkgdGhlIGZpbGVzIHRvIGJlIGRlcGxveWVkIHRvCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lESVInPjxmaWxlbmFtZT5ERVBMT1lESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIGFuZCB1c2UgPGZpbGVuYW1lPmFkZHRhc2s8L2ZpbGVuYW1lPiB0byBhZGQgdGhlIHRhc2sgYXQgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIHBsYWNlLCB3aGljaCBpcyB1c3VhbGx5IGFmdGVyCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBvcgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFRoZSBjbGFzcyB0aGVuIHRha2VzIGNhcmUgb2Ygc3RhZ2luZyB0aGUgZmlsZXMgZnJvbQorICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT4gdG8KKyAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kZXZzaGVsbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5kZXZzaGVsbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPiBjbGFzcyBhZGRzIHRoZQorICAgICAgICA8ZmlsZW5hbWU+ZG9fZGV2c2hlbGw8L2ZpbGVuYW1lPiB0YXNrLgorICAgICAgICBEaXN0cmlidXRpb24gcG9saWN5IGRpY3RhdGVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNsYXNzLgorICAgICAgICBTZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICB1c2luZyA8ZmlsZW5hbWU+ZGV2c2hlbGw8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kaXN0cm9fZmVhdHVyZXNfY2hlY2snPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5kaXN0cm9fZmVhdHVyZXNfY2hlY2s8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBhbGxvd3MgaW5kaXZpZHVhbCByZWNpcGVzIHRvIGNoZWNrIGZvciByZXF1aXJlZCBhbmQgY29uZmxpY3RpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPlJFUVVJUkVEX0RJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZMSUNUX0RJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkNPTkZMSUNUX0RJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIElmIGFueSBjb25kaXRpb25zIHNwZWNpZmllZCBpbiB0aGUgcmVjaXBlIHVzaW5nIHRoZSBhYm92ZSB2YXJpYWJsZXMgYXJlCisgICAgICAgIG5vdCBtZXQsIHRoZSByZWNpcGUgd2lsbCBiZSBza2lwcGVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWRpc3Ryb2RhdGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZGlzdHJvZGF0YS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlzdHJvZGF0YTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGZvciBhdXRvbWF0aWMgY2hlY2tpbmcgZm9yIHVwc3RyZWFtIHJlY2lwZSB1cGRhdGVzLgorICAgICAgICBUaGUgY2xhc3MgY3JlYXRlcyBhIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZSAoQ1NWKSBzcHJlYWRzaGVldCB0aGF0CisgICAgICAgIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNpcGVzLgorICAgICAgICBUaGUgaW5mb3JtYXRpb24gcHJvdmlkZXMgdGhlIDxmaWxlbmFtZT5kb19kaXN0cm9kYXRhPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5kb19kaXN0cm9fY2hlY2s8L2ZpbGVuYW1lPiB0YXNrcywgd2hpY2ggZG8gdXBzdHJlYW0gY2hlY2tpbmcKKyAgICAgICAgYW5kIGFsc28gdmVyaWZ5IGlmIGEgcGFja2FnZSBpcyB1c2VkIGluIG11bHRpcGxlIG1ham9yIGRpc3RyaWJ1dGlvbnMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBpcyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgVG8gdXNlIGl0LCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIHNldCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOSEVSSVQnPjxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9yZWNpcGVfY29sb3IuaW5jCisgICAgIGluY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKKyAgICAgaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYworICAgICBpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKKyAgICAgSU5IRVJJVCs9ICJkaXN0cm9kYXRhIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3R1dGlscy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyBmb3IgUHl0aG9uCisgICAgICAgIHZlcnNpb24gMi54IGV4dGVuc2lvbnMsIHdoaWNoIGFyZSBzaW1wbGUuCisgICAgICAgIFRoZXNlIHJlY2lwZXMgdXN1YWxseSBvbmx5IG5lZWQgdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSdzIGFyY2hpdmUgYW5kCisgICAgICAgIHRoZW4gaW5oZXJpdCB0aGUgcHJvcGVyIGNsYXNzLgorICAgICAgICBCdWlsZGluZyBpcyBzcGxpdCBpbnRvIHR3byBtZXRob2RzIGRlcGVuZGluZyBvbiB3aGljaCBtZXRob2QgdGhlCisgICAgICAgIG1vZHVsZSBhdXRob3JzIHVzZWQuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0ZW5zaW9ucyB0aGF0IHVzZSBhbiBBdXRvdG9vbHMtYmFzZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgcmVxdWlyZSBBdXRvdG9vbHMgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRpc3R1dGlsczwvZmlsZW5hbWU+LWJhc2VkIGNsYXNzZXMgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gcmVxdWlyZQorICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4gY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+IHJlcXVpcmUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+PGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjbGFzcyBpbiB0aGVpciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmRpc3R1dGlsczMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmRpc3R1dGlsczM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyByZWNpcGVzIGZvciBQeXRob24KKyAgICAgICAgdmVyc2lvbiAzLnggZXh0ZW5zaW9ucywgd2hpY2ggYXJlIHNpbXBsZS4KKyAgICAgICAgVGhlc2UgcmVjaXBlcyB1c3VhbGx5IG9ubHkgbmVlZCB0byBwb2ludCB0byB0aGUgc291cmNlJ3MgYXJjaGl2ZSBhbmQKKyAgICAgICAgdGhlbiBpbmhlcml0IHRoZSBwcm9wZXIgY2xhc3MuCisgICAgICAgIEJ1aWxkaW5nIGlzIHNwbGl0IGludG8gdHdvIG1ldGhvZHMgZGVwZW5kaW5nIG9uIHdoaWNoIG1ldGhvZCB0aGUKKyAgICAgICAgbW9kdWxlIGF1dGhvcnMgdXNlZC4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRlbnNpb25zIHRoYXQgdXNlIGFuIEF1dG90b29scy1iYXNlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICByZXF1aXJlIEF1dG90b29scyBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4tYmFzZWQgY2xhc3NlcyBpbiB0aGVpciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVuc2lvbnMgdGhhdCB1c2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT4tYmFzZWQgYnVpbGQgc3lzdGVtcyByZXF1aXJlCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kaXN0dXRpbHM8L2ZpbGVuYW1lPiBjbGFzcyBpbiB0aGVpciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkV4dGVuc2lvbnMgdGhhdCB1c2UgYnVpbGQgc3lzdGVtcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+IHJlcXVpcmUgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29scyc+PGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgaW4gdGhlaXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgYnVpbGRpbmcgc29mdHdhcmUKKyAgICAgICAgZnJvbSBzb3VyY2UgY29kZSB0aGF0IGlzIGV4dGVybmFsIHRvIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICBCdWlsZGluZyBzb2Z0d2FyZSBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZSB0cmVlIG1lYW5zIHRoYXQgdGhlIGJ1aWxkCisgICAgICAgIHN5c3RlbSdzIG5vcm1hbCBmZXRjaCwgdW5wYWNrLCBhbmQgcGF0Y2ggcHJvY2VzcyBpcyBub3QgdXNlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGVzIHRvCisgICAgICAgIGxvY2F0ZSB1bnBhY2tlZCByZWNpcGUgc291cmNlIGNvZGUgYW5kIHRvIGJ1aWxkIGl0LCByZXNwZWN0aXZlbHkuCisgICAgICAgIFdoZW4geW91ciByZWNpcGUgaW5oZXJpdHMgdGhlIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLAorICAgICAgICB5b3UgdXNlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhURVJOQUxTUkMnPjxmaWxlbmFtZT5FWFRFUk5BTFNSQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVEVSTkFMU1JDX0JVSUxEJz48ZmlsZW5hbWU+RVhURVJOQUxTUkNfQlVJTEQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzIHRvIHVsdGltYXRlbHkgZGVmaW5lIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgY2xhc3MgZXhwZWN0cyB0aGUgc291cmNlIGNvZGUgdG8gc3VwcG9ydCByZWNpcGUgYnVpbGRzCisgICAgICAgIHRoYXQgdXNlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItQic+PGZpbGVuYW1lPkI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgIHN5c3RlbSBwbGFjZXMgdGhlIGdlbmVyYXRlZCBvYmplY3RzIGJ1aWx0IGZyb20gdGhlIHJlY2lwZXMuCisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+QjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpcyBzZXQgdG8gdGhlCisgICAgICAgIGZvbGxvd2luZywgd2hpY2ggaXMgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNlIGRpcmVjdG9yeQorICAgICAgICAoPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPik6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS8ke0JQTn0ve1BWfS8KKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBTZWUgdGhlc2UgdmFyaWFibGVzIGZvciBtb3JlIGluZm9ybWF0aW9uOgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz4sIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCisgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+IGNsYXNzLCBzZWUgdGhlIGNvbW1lbnRzIGluCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+IGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmM8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UnPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWV4dHJhdXNlcnMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+ZXh0cmF1c2Vycy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+IGNsYXNzIGFsbG93cworICAgICAgICBhZGRpdGlvbmFsIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb24gdG8gYmUgYXBwbGllZCBhdCB0aGUgaW1hZ2UKKyAgICAgICAgbGV2ZWwuCisgICAgICAgIEluaGVyaXRpbmcgdGhpcyBjbGFzcyBlaXRoZXIgZ2xvYmFsbHkgb3IgZnJvbSBhbiBpbWFnZSByZWNpcGUgYWxsb3dzCisgICAgICAgIGFkZGl0aW9uYWwgdXNlciBhbmQgZ3JvdXAgb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9VU0VSU19QQVJBTVMnPjxmaWxlbmFtZT5FWFRSQV9VU0VSU19QQVJBTVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhlIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMgYWRkZWQgdXNpbmcgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0cmF1c2VyczwvZmlsZW5hbWU+IGNsYXNzIGFyZSBub3QgdGllZCB0byBhIHNwZWNpZmljCisgICAgICAgICAgICByZWNpcGUgb3V0c2lkZSBvZiB0aGUgcmVjaXBlIGZvciB0aGUgaW1hZ2UuCisgICAgICAgICAgICBUaHVzLCB0aGUgb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGFjcm9zcyB0aGUgaW1hZ2UgYXMgYSB3aG9sZS4KKyAgICAgICAgICAgIFVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcyB0byBhZGQgdXNlciBhbmQgZ3JvdXAgY29uZmlndXJhdGlvbiB0byBhIHNwZWNpZmljIHJlY2lwZS4KKyAgICAgICAgPC9ub3RlPgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIHRoaXMgY2xhc3MgaW4gYW4gaW1hZ2UgcmVjaXBlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgZXh0cmF1c2VycworICAgICBFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorICAgICAgICAgdXNlcmFkZCAtcCAnJyB0ZXN0ZXI7IFwKKyAgICAgICAgIGdyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyAgICAgICAgIHVzZXJkZWwgbm9ib2R5OyBcCisgICAgICAgICBncm91cGRlbCAtZyB2aWRlbzsgXAorICAgICAgICAgZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisgICAgICAgICB1c2VybW9kIC1zIC9iaW4vc2ggdGVzdGVyOyBcCisgICAgICAgICAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyB0d28gdXNlcnMgbmFtZWQgInRlc3Rlci1qaW0iIGFuZAorICAgICAgICAidGVzdGVyLXN1ZSIgYW5kIGFzc2lnbnMgcGFzc3dvcmRzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGluaGVyaXQgZXh0cmF1c2VycworICAgICBFWFRSQV9VU0VSU19QQVJBTVMgPSAiXAorICAgICAgICAgdXNlcmFkZCAtUCB0ZXN0ZXIwMSB0ZXN0ZXItamltOyBcCisgICAgICAgICB1c2VyYWRkIC1QIHRlc3RlcjAxIHRlc3Rlci1zdWU7IFwKKyAgICAgICAgICIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBGaW5hbGx5LCBoZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzZXRzIHRoZSByb290IHBhc3N3b3JkIHRvCisgICAgICAgICIxODc2KjE4IjoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBpbmhlcml0IGV4dHJhdXNlcnMKKyAgICAgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyAgICAgICAgIHVzZXJtb2QgLVAgMTg3NioxOCByb290OyBcCisgICAgICAgICAiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1mb250Y2FjaGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Zm9udGNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5mb250Y2FjaGU8L2ZpbGVuYW1lPiBjbGFzcyBnZW5lcmF0ZXMgdGhlCisgICAgICAgIHByb3BlciBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdCBhbmQgcG9zdHJtKQorICAgICAgICBzY3JpcHRsZXRzIGZvciBmb250IHBhY2thZ2VzLgorICAgICAgICBUaGVzZSBzY3JpcHRsZXRzIGNhbGwgPGZpbGVuYW1lPmZjLWNhY2hlPC9maWxlbmFtZT4gKHBhcnQgb2YKKyAgICAgICAgPGZpbGVuYW1lPkZvbnRjb25maWc8L2ZpbGVuYW1lPikgdG8gYWRkIHRoZSBmb250cyB0byB0aGUgZm9udAorICAgICAgICBpbmZvcm1hdGlvbiBjYWNoZS4KKyAgICAgICAgU2luY2UgdGhlIGNhY2hlIGZpbGVzIGFyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsCisgICAgICAgIDxmaWxlbmFtZT5mYy1jYWNoZTwvZmlsZW5hbWU+IHJ1bnMgdXNpbmcgUUVNVSBpZiB0aGUgcG9zdGluc3QKKyAgICAgICAgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UgY3JlYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBmb250cyBiZWluZyBpbnN0YWxsZWQgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlIG1haW4KKyAgICAgICAgcGFja2FnZSwgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GT05UX1BBQ0tBR0VTJz48ZmlsZW5hbWU+Rk9OVF9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyBjb250YWluaW5nIHRoZSBmb250cy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nY29uZic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nY29uZi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z2NvbmY8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBjb21tb24KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IG5lZWQgdG8gaW5zdGFsbCBHQ29uZiBzY2hlbWFzLgorICAgICAgICBUaGUgc2NoZW1hcyB3aWxsIGJlIHB1dCBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZQorICAgICAgICAoPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59LWdjb25mPC9maWxlbmFtZT4pCisgICAgICAgIHRoYXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhpcyBjbGFzcyBpcyBpbmhlcml0ZWQuCisgICAgICAgIFRoaXMgcGFja2FnZSB1c2VzIHRoZSBhcHByb3ByaWF0ZSBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlCisgICAgICAgIChwb3N0aW5zdC9wb3N0cm0pIHNjcmlwdGxldHMgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgdGhlIHNjaGVtYXMKKyAgICAgICAgaW4gdGhlIHRhcmdldCBpbWFnZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nZXR0ZXh0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdldHRleHQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdldHRleHQ8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICBidWlsZGluZyBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIEdOVSA8ZmlsZW5hbWU+Z2V0dGV4dDwvZmlsZW5hbWU+CisgICAgICAgIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24gc3lzdGVtLgorICAgICAgICBBbGwgcmVjaXBlcyBidWlsZGluZyBzb2Z0d2FyZSB0aGF0IHVzZQorICAgICAgICA8ZmlsZW5hbWU+Z2V0dGV4dDwvZmlsZW5hbWU+IHNob3VsZCBpbmhlcml0IHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ25vbWUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z25vbWUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdub21lPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyB0aGF0CisgICAgICAgIGJ1aWxkIHNvZnR3YXJlIGZyb20gdGhlIEdOT01FIHN0YWNrLgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1nbm9tZWJhc2UnPjxmaWxlbmFtZT5nbm9tZWJhc2U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd0ay1pY29uLWNhY2hlJz48ZmlsZW5hbWU+Z3RrLWljb24tY2FjaGU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdjb25mJz48ZmlsZW5hbWU+Z2NvbmY8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1pbWUnPjxmaWxlbmFtZT5taW1lPC9maWxlbmFtZT48L2xpbms+IGNsYXNzZXMuCisgICAgICAgIFRoZSBjbGFzcyBhbHNvIGRpc2FibGVzIEdPYmplY3QgaW50cm9zcGVjdGlvbiB3aGVyZSBhcHBsaWNhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdub21lYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5nbm9tZWJhc2UuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmdub21lYmFzZTwvZmlsZW5hbWU+IGNsYXNzIGlzIHRoZSBiYXNlCisgICAgICAgIGNsYXNzIGZvciByZWNpcGVzIHRoYXQgYnVpbGQgc29mdHdhcmUgZnJvbSB0aGUgR05PTUUgc3RhY2suCisgICAgICAgIFRoaXMgY2xhc3Mgc2V0cworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4gdG8KKyAgICAgICAgZG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBHTk9NRSBtaXJyb3JzIGFzIHdlbGwgYXMgZXh0ZW5kaW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHdpdGggdGhlIHR5cGljYWwgR05PTUUgaW5zdGFsbGF0aW9uIHBhdGhzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdydWItZWZpLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ncnViLWVmaTwvZmlsZW5hbWU+CisgICAgICAgIGNsYXNzIHByb3ZpZGVzIDxmaWxlbmFtZT5ncnViLWVmaTwvZmlsZW5hbWU+LXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IKKyAgICAgICAgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIHN1cHBvcnRzIHNldmVyYWwgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkQnPjxmaWxlbmFtZT5JTklUUkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZQorICAgICAgICAgICAgICAgIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkgKG9wdGlvbmFsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUk9PVEZTJz48ZmlsZW5hbWU+Uk9PVEZTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIEluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgKG9wdGlvbmFsKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1JVQl9HRlhTRVJJQUwnPjxmaWxlbmFtZT5HUlVCX0dGWFNFUklBTDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBTZXQgdGhpcyB0byAiMSIgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+PGZpbGVuYW1lPkxBQkVMUzwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgdGhlIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BUFBFTkQnPjxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgQW4gb3ZlcnJpZGUgbGlzdCBvZiBhcHBlbmQgc3RyaW5ncyBmb3IgZWFjaAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MQUJFTDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUlVCX09QVFMnPjxmaWxlbmFtZT5HUlVCX09QVFM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgY29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgorICAgICAgICAgICAgICAgIE9wdGlvbnMgYXJlIGRlbGltaXRlZCB1c2luZyBzZW1pLWNvbG9uIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPjs8L2ZpbGVuYW1lPikuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdSVUJfVElNRU9VVCc+PGZpbGVuYW1lPkdSVUJfVElNRU9VVDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBUaW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPkxBQkVMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAob3B0aW9uYWwpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtZ3NldHRpbmdzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmdzZXR0aW5ncy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+Z3NldHRpbmdzPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMgdGhhdCBuZWVkIHRvIGluc3RhbGwKKyAgICAgICAgR1NldHRpbmdzIChnbGliKSBzY2hlbWFzLgorICAgICAgICBUaGUgc2NoZW1hcyBhcmUgYXNzdW1lZCB0byBiZSBwYXJ0IG9mIHRoZSBtYWluIHBhY2thZ2UuCisgICAgICAgIEFwcHJvcHJpYXRlIHBvc3QtaW5zdGFsbCBhbmQgcG9zdC1yZW1vdmUgKHBvc3RpbnN0L3Bvc3RybSkKKyAgICAgICAgc2NyaXB0bGV0cyBhcmUgYWRkZWQgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgdGhlIHNjaGVtYXMgaW4gdGhlCisgICAgICAgIHRhcmdldCBpbWFnZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndGstZG9jJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd0ay1kb2MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmd0ay1kb2M8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBpcyBhIGhlbHBlciBjbGFzcyB0byBwdWxsIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+IGRlcGVuZGVuY2llcyBhbmQgZGlzYWJsZQorICAgICAgICA8ZmlsZW5hbWU+Z3RrLWRvYzwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWd0ay1pY29uLWNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd0ay1pY29uLWNhY2hlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndGstaWNvbi1jYWNoZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGdlbmVyYXRlcyB0aGUgcHJvcGVyIHBvc3QtaW5zdGFsbCBhbmQgcG9zdC1yZW1vdmUgKHBvc3RpbnN0L3Bvc3RybSkKKyAgICAgICAgc2NyaXB0bGV0cyBmb3IgcGFja2FnZXMgdGhhdCB1c2UgR1RLKyBhbmQgaW5zdGFsbCBpY29ucy4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiB0byBhZGQKKyAgICAgICAgdGhlIGZvbnRzIHRvIEdUSysncyBpY29uIGNhY2hlLgorICAgICAgICBTaW5jZSB0aGUgY2FjaGUgZmlsZXMgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywKKyAgICAgICAgPGZpbGVuYW1lPmd0ay11cGRhdGUtaWNvbi1jYWNoZTwvZmlsZW5hbWU+IGlzIHJ1biB1c2luZyBRRU1VIGlmIHRoZQorICAgICAgICBwb3N0aW5zdCBzY3JpcHRsZXRzIG5lZWQgdG8gYmUgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBpbWFnZQorICAgICAgICBjcmVhdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndGstaW1tb2R1bGVzLWNhY2hlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmd0ay1pbW1vZHVsZXMtY2FjaGU8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBnZW5lcmF0ZXMgdGhlIHByb3BlciBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pCisgICAgICAgIHNjcmlwdGxldHMgZm9yIHBhY2thZ2VzIHRoYXQgaW5zdGFsbCBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGZvcgorICAgICAgICB2aXJ0dWFsIGtleWJvYXJkcy4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiB0byBhZGQKKyAgICAgICAgdGhlIGlucHV0IG1ldGhvZCBtb2R1bGVzIHRvIHRoZSBjYWNoZS4KKyAgICAgICAgU2luY2UgdGhlIGNhY2hlIGZpbGVzIGFyZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsCisgICAgICAgIDxmaWxlbmFtZT5ndGstdXBkYXRlLWljb24tY2FjaGU8L2ZpbGVuYW1lPiBpcyBydW4gdXNpbmcgUUVNVSBpZiB0aGUKKyAgICAgICAgcG9zdGluc3Qgc2NyaXB0bGV0cyBuZWVkIHRvIGJlIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgaW1hZ2UKKyAgICAgICAgY3JlYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHRoZSBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4KKyAgICAgICAgdGhlIG1haW4gcGFja2FnZSwgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVEtJTU1PRFVMRVNfUEFDS0FHRVMnPjxmaWxlbmFtZT5HVEtJTU1PRFVMRVNfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gc3BlY2lmeSB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgbW9kdWxlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+Z3VtbWlib290LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbnMgc3BlY2lmaWMKKyAgICAgICAgdG8gdGhlIGd1bW1pYm9vdCBib290bG9hZGVyIGZvciBidWlsZGluZyBib290YWJsZSBpbWFnZXMuCisgICAgICAgIFRoaXMgaXMgYW4gaW50ZXJuYWwgY2xhc3MgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZQorICAgICAgICB1c2VkIGRpcmVjdGx5LgorICAgICAgICBTZXQgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FRklfUFJPVklERVInPjxmaWxlbmFtZT5FRklfUFJPVklERVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gImd1bW1pYm9vdCIgdG8gdXNlIHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBtb3JlIHZhcmlhYmxlcyB1c2VkIGFuZCBzdXBwb3J0ZWQgaW4gdGhpcyBjbGFzcywKKyAgICAgICAgc2VlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR1VNTUlCT09UX0NGRyc+PGZpbGVuYW1lPkdVTU1JQk9PVF9DRkc8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HVU1NSUJPT1RfRU5UUklFUyc+PGZpbGVuYW1lPkdVTU1JQk9PVF9FTlRSSUVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdVTU1JQk9PVF9USU1FT1VUJz48ZmlsZW5hbWU+R1VNTUlCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGFsc28gc2VlIHRoZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPgorICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1nemlwbmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmd6aXBuYXRpdmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmd6aXBuYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBlbmFibGVzIHRoZSB1c2Ugb2YgbmF0aXZlIHZlcnNpb25zIG9mIDxmaWxlbmFtZT5nemlwPC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5waWd6PC9maWxlbmFtZT4gcmF0aGVyIHRoYW4gdGhlIHZlcnNpb25zIG9mIHRoZXNlIHRvb2xzCisgICAgICAgIGZyb20gdGhlIGJ1aWxkIGhvc3QuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaWNlY2MnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aWNlY2MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9naXRodWIuY29tL2ljZWNjL2ljZWNyZWFtJz5JY2VjcmVhbTwvdWxpbms+LCB3aGljaAorICAgICAgICBmYWNpbGl0YXRlcyB0YWtpbmcgY29tcGlsZSBqb2JzIGFuZCBkaXN0cmlidXRpbmcgdGhlbSBhbW9uZyByZW1vdGUKKyAgICAgICAgbWFjaGluZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBzdGFnZXMgZGlyZWN0b3JpZXMgd2l0aCBzeW1saW5rcyBmcm9tIDxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPmcrKzwvZmlsZW5hbWU+IHRvIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+LCBmb3IgYm90aAorICAgICAgICBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4KKyAgICAgICAgRGVwZW5kaW5nIG9uIGVhY2ggY29uZmlndXJlIG9yIGNvbXBpbGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIGFkZHMgdGhlIGRpcmVjdG9yaWVzIGF0IHRoZSBoZWFkIG9mIHRoZSA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGxpc3QKKyAgICAgICAgYW5kIHRoZW4gc2V0cyB0aGUgPGZpbGVuYW1lPklDRUNDX0NYWDwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+SUNFQ19DQzwvZmlsZW5hbWU+IHZhcmlhYmxlcywgd2hpY2ggYXJlIHRoZSBwYXRocyB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmcrKzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gY29tcGlsZXJzLAorICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciB0aGUgY3Jvc3MgY29tcGlsZXIsIHRoZSBjbGFzcyBjcmVhdGVzIGEgPGZpbGVuYW1lPnRhci5nejwvZmlsZW5hbWU+CisgICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgWW9jdG8gUHJvamVjdCB0b29sY2hhaW4gYW5kIHNldHMKKyAgICAgICAgPGZpbGVuYW1lPklDRUNDX1ZFUlNJT048L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIHZlcnNpb24gb2YgdGhlCisgICAgICAgIGNyb3NzLWNvbXBpbGVyIHVzZWQgaW4gdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiwgYWNjb3JkaW5nbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBoYW5kbGVzIGFsbCB0aHJlZSBkaWZmZXJlbnQgY29tcGlsZSBzdGFnZXMKKyAgICAgICAgKGkuZSBuYXRpdmUgLGNyb3NzLWtlcm5lbCBhbmQgdGFyZ2V0KSBhbmQgY3JlYXRlcyB0aGUgbmVjZXNzYXJ5CisgICAgICAgIGVudmlyb25tZW50IDxmaWxlbmFtZT50YXIuZ3o8L2ZpbGVuYW1lPiBmaWxlIHRvIGJlIHVzZWQgYnkgdGhlIHJlbW90ZQorICAgICAgICBtYWNoaW5lcy4KKyAgICAgICAgVGhlIGNsYXNzIGFsc28gc3VwcG9ydHMgU0RLIGdlbmVyYXRpb24uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19QQVRIJz48ZmlsZW5hbWU+SUNFQ0NfUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpcyBub3Qgc2V0IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB0aGVuIHRoZQorICAgICAgICBjbGFzcyB0cmllcyB0byBsb2NhdGUgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGJpbmFyeQorICAgICAgICB1c2luZyA8ZmlsZW5hbWU+d2hpY2g8L2ZpbGVuYW1lPi4KKworICAgICAgICBJZgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRU5WX0VYRUMnPjxmaWxlbmFtZT5JQ0VDQ19FTlZfRVhFQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpcyBzZXQgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHRoZSB2YXJpYWJsZSBzaG91bGQKKyAgICAgICAgcG9pbnQgdG8gdGhlIDxmaWxlbmFtZT5pY2VjYy1jcmVhdGUtZW52PC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLgorICAgICAgICBJZiB5b3UgZG8gbm90IHBvaW50IHRvIGEgdXNlci1wcm92aWRlZCBzY3JpcHQsIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgdXNlcyB0aGUgZGVmYXVsdCBzY3JpcHQgcHJvdmlkZWQgYnkgdGhlIHJlY2lwZQorICAgICAgICA8ZmlsZW5hbWU+aWNlY2MtY3JlYXRlLWVudi1uYXRpdmUuYmI8L2ZpbGVuYW1lPi4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIHNjcmlwdCBpcyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kIG5vdCB0aGUgb25lIHRoYXQgY29tZXMgd2l0aAorICAgICAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gYXBwbHkKKyAgICAgICAgdG8gc3BlY2lmaWMgcmVjaXBlcyBvciBjbGFzc2VzLCB5b3UgY2FuIGVmZmVjdGl2ZWx5ICJibGFja2xpc3QiIHRoZW0KKyAgICAgICAgYnkgbGlzdGluZyB0aGUgcmVjaXBlcyBhbmQgY2xhc3NlcyB1c2luZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX1VTRVJfUEFDS0FHRV9CTCc+PGZpbGVuYW1lPklDRUNDX1VTRVJfUEFDS0FHRV9CTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX1VTRVJfQ0xBU1NfQkwnPjxmaWxlbmFtZT5JQ0VDQ19VU0VSX0NMQVNTX0JMPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICB2YXJpYWJsZXMsIHJlc3BlY3RpdmVseSwgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgIERvaW5nIHNvIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBoYW5kbGUgdGhlc2UKKyAgICAgICAgY29tcGlsYXRpb25zIGxvY2FsbHkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEFkZGl0aW9uYWxseSwgeW91IGNhbiBsaXN0IHJlY2lwZXMgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JQ0VDQ19VU0VSX1BBQ0tBR0VfV0wnPjxmaWxlbmFtZT5JQ0VDQ19VU0VSX1BBQ0tBR0VfV0w8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gZm9yY2UKKyAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gdG8gYmUgZW5hYmxlZCBmb3IgcmVjaXBlcyB1c2luZyBhbiBlbXB0eQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFSQUxMRUxfTUFLRSc+PGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEluaGVyaXRpbmcgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IGNsYXNzIGNoYW5nZXMgYWxsIHNzdGF0ZQorICAgICAgICBzaWduYXR1cmVzLgorICAgICAgICBDb25zZXF1ZW50bHksIGlmIGEgZGV2ZWxvcG1lbnQgdGVhbSBoYXMgYSBkZWRpY2F0ZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHRoYXQgcG9wdWxhdGVzCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfTUlSUk9SUyc+PGZpbGVuYW1lPlNUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kIHRoZXkgd2FudCB0byByZXVzZSBzc3RhdGUgZnJvbQorICAgICAgICA8ZmlsZW5hbWU+U1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+LCB0aGVuIGFsbCBkZXZlbG9wZXJzIGFuZCB0aGUKKyAgICAgICAgYnVpbGQgc3lzdGVtIG5lZWQgdG8gZWl0aGVyIGluaGVyaXQgdGhlIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+CisgICAgICAgIGNsYXNzIG9yIG5vYm9keSBzaG91bGQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEF0IHRoZSBkaXN0cmlidXRpb24gbGV2ZWwsIHlvdSBjYW4gaW5oZXJpdCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gY2xhc3MgdG8gYmUgc3VyZSB0aGF0IGFsbCBidWlsZGVycyBzdGFydAorICAgICAgICB3aXRoIHRoZSBzYW1lIHNzdGF0ZSBzaWduYXR1cmVzLgorICAgICAgICBBZnRlciBpbmhlcml0aW5nIHRoZSBjbGFzcywgeW91IGNhbiB0aGVuIGRpc2FibGUgdGhlIGZlYXR1cmUgYnkgc2V0dGluZworICAgICAgICB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz48ZmlsZW5hbWU+SUNFQ0NfRElTQUJMRUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgdG8gIjEiIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVF9ESVNUUk9fYXBwZW5kID0gIiBpY2VjYyIKKyAgICAgSUNFQ0NfRElTQUJMRUQgPz89ICIxIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIFRoaXMgcHJhY3RpY2UgbWFrZXMgc3VyZSBldmVyeW9uZSBpcyB1c2luZyB0aGUgc2FtZSBzaWduYXR1cmVzIGJ1dCBhbHNvCisgICAgICAgIHJlcXVpcmVzIGluZGl2aWR1YWxzIHRoYXQgZG8gd2FudCB0byB1c2UgSWNlY3JlYW0gdG8gZW5hYmxlIHRoZSBmZWF0dXJlCisgICAgICAgIGluZGl2aWR1YWxseSBhcyBmb2xsb3dzIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElDRUNDX0RJU0FCTEVEID0gIiIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZTwvZmlsZW5hbWU+IGNsYXNzIGhlbHBzIHN1cHBvcnQgY3JlYXRpbmcgaW1hZ2VzCisgICAgICAgIGluIGRpZmZlcmVudCBmb3JtYXRzLgorICAgICAgICBGaXJzdCwgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkIGZyb20gcGFja2FnZXMgdXNpbmcKKyAgICAgICAgb25lIG9mIHRoZSA8ZmlsZW5hbWU+cm9vdGZzKi5iYmNsYXNzPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZXMgKGRlcGVuZGluZyBvbiB0aGUgcGFja2FnZSBmb3JtYXQgdXNlZCkgYW5kIHRoZW4gb25lIG9yIG1vcmUgaW1hZ2UKKyAgICAgICAgZmlsZXMgYXJlIGNyZWF0ZWQuCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz5JTUFHRV9GU1RZUEVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgY29udHJvbHMgdGhlIHR5cGVzIG9mIGltYWdlcyB0byBnZW5lcmF0ZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPklNQUdFX0lOU1RBTEw8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBjb250cm9scyB0aGUgbGlzdCBvZiBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gdGhlCisgICAgICAgICAgICAgICAgaW1hZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gY3VzdG9taXppbmcgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlJz5DdXN0b21pemluZyBJbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgaW1hZ2VzIGFyZSBjcmVhdGVkLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBzZWN0aW9uIGVsc2V3aGVyZQorICAgICAgICBpbiB0aGlzIG1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZV90eXBlcyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPiBjbGFzcyBkZWZpbmVzIGFsbCBvZgorICAgICAgICB0aGUgc3RhbmRhcmQgaW1hZ2Ugb3V0cHV0IHR5cGVzIHRoYXQgeW91IGNhbiBlbmFibGUgdGhyb3VnaCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIGFzIGEgcmVmZXJlbmNlIG9uIGhvdyB0byBhZGQgc3VwcG9ydCBmb3IgY3VzdG9tCisgICAgICAgIGltYWdlIG91dHB1dCB0eXBlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBjbGFzcyBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9DTEFTU0VTJz48ZmlsZW5hbWU+SU1BR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIElmIHlvdSBkZWZpbmUgeW91ciBvd24gaW1hZ2UgdHlwZXMgdXNpbmcgYSBjdXN0b20gQml0QmFrZSBjbGFzcyBhbmQKKyAgICAgICAgdGhlbiB1c2UgPGZpbGVuYW1lPklNQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPiB0byBlbmFibGUgaXQsIHRoZSBjdXN0b20KKyAgICAgICAgY2xhc3MgbXVzdCBlaXRoZXIgaW5oZXJpdCA8ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPiBvcgorICAgICAgICA8ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPiBtdXN0IGFsc28gYXBwZWFyIGluCisgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9DTEFTU0VTPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2VfdHlwZXNfdWJvb3QnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlX3R5cGVzX3Vib290PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgZGVmaW5lcyBhZGRpdGlvbmFsIGltYWdlIHR5cGVzIHNwZWNpZmljYWxseSBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+aW1hZ2UtbGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+aW1hZ2UtbGl2ZTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGJ1aWxkaW5nICJsaXZlIgorICAgICAgICBpbWFnZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE5vcm1hbGx5LCB5b3UgZG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LgorICAgICAgICBJbnN0ZWFkLCB5b3UgYWRkICJsaXZlIiB0bworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugd2VyZSBidWlsZGluZyBhbiBJU08gaW1hZ2UsIHlvdSB3b3VsZCBhZGQgImxpdmUiCisgICAgICAgIHRvIDxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT4sIHNldCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5PSVNPJz48ZmlsZW5hbWU+Tk9JU088L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUgdG8KKyAgICAgICAgIjAiIGFuZCB0aGUgYnVpbGQgc3lzdGVtIHdvdWxkIHVzZSB0aGUgPGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyB0byBidWlsZCB0aGUgSVNPIGltYWdlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWltYWdlLW1rbGlicyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS1ta2xpYnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLW1rbGliczwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgPGZpbGVuYW1lPm1rbGliczwvZmlsZW5hbWU+IHV0aWxpdHkgZHVyaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHdoaWNoIG9wdGltaXplcyB0aGUgc2l6ZSBvZgorICAgICAgICBsaWJyYXJpZXMgY29udGFpbmVkIGluIHRoZSBpbWFnZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGNsYXNzIGlzIGVuYWJsZWQgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnRlbXBsYXRlPC9maWxlbmFtZT4gdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSX0NMQVNTRVMnPjxmaWxlbmFtZT5VU0VSX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMgaW1hZ2UtbWtsaWJzIGltYWdlLXByZWxpbmsiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1pbWFnZS1wcmVsaW5rJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmltYWdlLXByZWxpbmsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmltYWdlLXByZWxpbms8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIDxmaWxlbmFtZT5wcmVsaW5rPC9maWxlbmFtZT4gdXRpbGl0eSBkdXJpbmcKKyAgICAgICAgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzaywgd2hpY2ggb3B0aW1pemVzIHRoZSBkeW5hbWljCisgICAgICAgIGxpbmtpbmcgb2Ygc2hhcmVkIGxpYnJhcmllcyB0byByZWR1Y2UgZXhlY3V0YWJsZSBzdGFydHVwIHRpbWUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBpcyBlbmFibGVkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZi50ZW1wbGF0ZTwvZmlsZW5hbWU+IHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUl9DTEFTU0VTJz48ZmlsZW5hbWU+VVNFUl9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2Utc3dhYic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS1zd2FiLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS1zd2FiPC9maWxlbmFtZT4gY2xhc3MgZW5hYmxlcyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvc3dhYmJlcic+U3dhYmJlcjwvdWxpbms+CisgICAgICAgIHRvb2wgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuZCBsb2cgYWNjZXNzZXMgdG8gdGhlIGhvc3Qgc3lzdGVtIGR1cmluZworICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgdW5tYWludGFpbmVkLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW1hZ2Utdm1kayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbWFnZS12bWRrLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbWFnZS12bWRrPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgYnVpbGRpbmcgVk13YXJlCisgICAgICAgIFZNREsgaW1hZ2VzLgorICAgICAgICBOb3JtYWxseSwgeW91IGRvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4KKyAgICAgICAgSW5zdGVhZCwgeW91IGFkZCAidm1kayIgdG8KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPmluc2FuZTwvZmlsZW5hbWU+IGNsYXNzIGFkZHMgYSBzdGVwIHRvIHRoZSBwYWNrYWdlCisgICAgICAgIGdlbmVyYXRpb24gcHJvY2VzcyBzbyB0aGF0IG91dHB1dCBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3MgYXJlCisgICAgICAgIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgQSByYW5nZSBvZiBjaGVja3MgYXJlIHBlcmZvcm1lZCB0aGF0IGNoZWNrIHRoZSBidWlsZCdzIG91dHB1dAorICAgICAgICBmb3IgY29tbW9uIHByb2JsZW1zIHRoYXQgc2hvdyB1cCBkdXJpbmcgcnVudGltZS4KKyAgICAgICAgRGlzdHJpYnV0aW9uIHBvbGljeSB1c3VhbGx5IGRpY3RhdGVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgc2FuaXR5IGNoZWNrcyBzbyB0aGF0IHNwZWNpZmljIHRlc3QgZmFpbHVyZXMKKyAgICAgICAgZWl0aGVyIHJhaXNlIGEgd2FybmluZyBvciBhbiBlcnJvciBtZXNzYWdlLgorICAgICAgICBUeXBpY2FsbHksIGZhaWx1cmVzIGZvciBuZXcgdGVzdHMgZ2VuZXJhdGUgYSB3YXJuaW5nLgorICAgICAgICBTdWJzZXF1ZW50IGZhaWx1cmVzIGZvciB0aGUgc2FtZSB0ZXN0IHdvdWxkIHRoZW4gZ2VuZXJhdGUgYW4gZXJyb3IKKyAgICAgICAgbWVzc2FnZSBvbmNlIHRoZSBtZXRhZGF0YSBpcyBpbiBhIGtub3duIGFuZCBnb29kIGNvbmRpdGlvbi4KKyAgICAgICAgU2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLXFhLWNoZWNrcyc+UUEgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2xpbms+IgorICAgICAgICBDaGFwdGVyIGZvciBhIGxpc3Qgb2YgYWxsIHRoZSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcworICAgICAgICB5b3UgbWlnaHQgZW5jb3VudGVyIHVzaW5nIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVc2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz48ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVSUk9SX1FBJz48ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgIHRoZXNlIGNoZWNrcyBhdCB0aGUgZ2xvYmFsIGxldmVsIChpLmUuIGluIHlvdXIgY3VzdG9tIGRpc3RybworICAgICAgICBjb25maWd1cmF0aW9uKS4KKyAgICAgICAgSG93ZXZlciwgdG8gc2tpcCBvbmUgb3IgbW9yZSBjaGVja3MgaW4gcmVjaXBlcywgeW91IHNob3VsZCB1c2UKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEZvciBleGFtcGxlLCB0byBza2lwIHRoZSBjaGVjayBmb3Igc3ltYm9saWMgbGluaworICAgICAgICA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIG1haW4gcGFja2FnZSBvZiBhIHJlY2lwZSwKKyAgICAgICAgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIHJlY2lwZS4KKyAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSB0aGF0IHRoZSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUsIGluIHRoaXMgZXhhbXBsZQorICAgICAgICA8ZmlsZW5hbWU+JHtQTn08L2ZpbGVuYW1lPiwgbXVzdCBiZSB1c2VkOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBRQSBjaGVja3MgZXhpc3QgaW4gb3JkZXIgdG8gZGV0ZWN0IHJlYWwKKyAgICAgICAgb3IgcG90ZW50aWFsIHByb2JsZW1zIGluIHRoZSBwYWNrYWdlZCBvdXRwdXQuCisgICAgICAgIFNvIGV4ZXJjaXNlIGNhdXRpb24gd2hlbiBkaXNhYmxpbmcgdGhlc2UgY2hlY2tzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIHRlc3RzIHlvdSBjYW4gbGlzdCB3aXRoIHRoZQorICAgICAgICA8ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5hbHJlYWR5LXN0cmlwcGVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBwcm9kdWNlZCBiaW5hcmllcyBoYXZlIG5vdCBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgICBzdHJpcHBlZCBwcmlvciB0byB0aGUgYnVpbGQgc3lzdGVtIGV4dHJhY3RpbmcgZGVidWcgc3ltYm9scy4KKyAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIHVwc3RyZWFtIHNvZnR3YXJlIHByb2plY3RzIHRvIGRlZmF1bHQgdG8KKyAgICAgICAgICAgICAgICBzdHJpcHBpbmcgZGVidWcgc3ltYm9scyBmb3Igb3V0cHV0IGJpbmFyaWVzLgorICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBkZWJ1Z2dpbmcgdG8gd29yayBvbiB0aGUgdGFyZ2V0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcywgdGhpcyBzdHJpcHBpbmcgbXVzdCBiZQorICAgICAgICAgICAgICAgIGRpc2FibGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YXJjaDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoZSBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwgYml0IHNpemUsCisgICAgICAgICAgICAgICAgYW5kIGVuZGlhbm5lc3Mgb2YgYW55IGJpbmFyaWVzIHRvIGVuc3VyZSB0aGV5IG1hdGNoIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICB0aGVyZSB3b3VsZCBiZSBhbiBpbmNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgICAgVGhlIHRlc3QgY291bGQgaW5kaWNhdGUgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICB3cm9uZyBjb21waWxlciBvciBjb21waWxlciBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBzb2Z0d2FyZSwgbGlrZSBib290bG9hZGVycywgbWlnaHQgbmVlZCB0byBieXBhc3MKKyAgICAgICAgICAgICAgICB0aGlzIGNoZWNrLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnVpbGRwYXRoczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBwYXRocyB0byBsb2NhdGlvbnMgb24gdGhlIGJ1aWxkIGhvc3QgaW5zaWRlIHRoZQorICAgICAgICAgICAgICAgIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICBDdXJyZW50bHksIHRoaXMgdGVzdCB0cmlnZ2VycyB0b28gbWFueSBmYWxzZSBwb3NpdGl2ZXMgYW5kCisgICAgICAgICAgICAgICAgdGh1cyBpcyBub3Qgbm9ybWFsbHkgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmJ1aWxkLWRlcHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIERldGVybWluZXMgaWYgYSBidWlsZC10aW1lIGRlcGVuZGVuY3kgdGhhdCBpcyBzcGVjaWZpZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBFTkRTJz48ZmlsZW5hbWU+REVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBleHBsaWNpdAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIG9yIHRhc2stbGV2ZWwgZGVwZW5kZW5jaWVzIGV4aXN0cyB0byBtYXRjaCBhbnkgcnVudGltZQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgVGhpcyBkZXRlcm1pbmF0aW9uIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgdG8gZGlzY292ZXIgd2hlcmUKKyAgICAgICAgICAgICAgICBydW50aW1lIGRlcGVuZGVuY2llcyBhcmUgZGV0ZWN0ZWQgYW5kIGFkZGVkIGR1cmluZyBwYWNrYWdpbmcuCisgICAgICAgICAgICAgICAgSWYgbm8gZXhwbGljaXQgZGVwZW5kZW5jeSBoYXMgYmVlbiBzcGVjaWZpZWQgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLCBhdCB0aGUgcGFja2FnaW5nIHN0YWdlIGl0IGlzIHRvbyBsYXRlIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGRlcGVuZGVuY3kgaXMgYnVpbHQsIGFuZCB0aHVzIHlvdSBjYW4gZW5kIHVwIHdpdGggYW4KKyAgICAgICAgICAgICAgICBlcnJvciB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXJvb3Rmcyc+PGZpbGVuYW1lPmRvX3Jvb3RmczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHRhc2sgYmVjYXVzZSB0aGUgYXV0by1kZXRlY3RlZCBkZXBlbmRlbmN5IHdhcyBub3Qgc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtcmMuZCc+PGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY2xhc3MgYXV0b21hdGljYWxseSBhZGRzIGEgZGVwZW5kZW5jeSBvbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5pdHNjcmlwdHMtZnVuY3Rpb25zPC9maWxlbmFtZT4gcGFja2FnZSB0byBwYWNrYWdlcworICAgICAgICAgICAgICAgIHRoYXQgaW5zdGFsbCBhbiBpbml0c2NyaXB0IHRoYXQgcmVmZXJzIHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvaW5pdC5kL2Z1bmN0aW9uczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSByZWNpcGUgc2hvdWxkIHJlYWxseSBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gZm9yIHRoZSBwYWNrYWdlIGluIHF1ZXN0aW9uIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluaXRzY3JpcHRzLWZ1bmN0aW9uczwvZmlsZW5hbWU+IHNvIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbml0c2NyaXB0czwvZmlsZW5hbWU+IHJlY2lwZSBpcyBhY3R1YWxseSBidWlsdCBhbmQKKyAgICAgICAgICAgICAgICB0aHVzIHRoZSA8ZmlsZW5hbWU+aW5pdHNjcmlwdHMtZnVuY3Rpb25zPC9maWxlbmFtZT4gcGFja2FnZSBpcworICAgICAgICAgICAgICAgIG1hZGUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y29tcGlsZS1ob3N0LXBhdGg6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBsb2cgZm9yIGluZGljYXRpb25zCisgICAgICAgICAgICAgICAgdGhhdCBwYXRocyB0byBsb2NhdGlvbnMgb24gdGhlIGJ1aWxkIGhvc3Qgd2VyZSB1c2VkLgorICAgICAgICAgICAgICAgIFVzaW5nIHN1Y2ggcGF0aHMgbWlnaHQgcmVzdWx0IGluIGhvc3QgY29udGFtaW5hdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBvdXRwdXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZWJ1Zy1kZXBzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBhbGwgcGFja2FnZXMgZXhjZXB0IDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYWNrYWdlcyBkbyBub3QgZGVwZW5kIG9uIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYWNrYWdlcywgd2hpY2ggd291bGQgY2F1c2UgYSBwYWNrYWdpbmcgYnVnLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGVidWctZmlsZXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yaWVzIGluIGFueXRoaW5nIGJ1dCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgVGhlIGRlYnVnIGZpbGVzIHNob3VsZCBhbGwgYmUgaW4gdGhlIDxmaWxlbmFtZT4tZGJnPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICBUaHVzLCBhbnl0aGluZyBwYWNrYWdlZCBlbHNld2hlcmUgaXMgaW5jb3JyZWN0IHBhY2thZ2luZy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRlcC1jbXA6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgaW52YWxpZCB2ZXJzaW9uIGNvbXBhcmlzb24gc3RhdGVtZW50cyBpbiBydW50aW1lCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4gcGFja2FnZXMgKGkuZS4gaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRVBMQUNFUyc+PGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZXMpLgorICAgICAgICAgICAgICAgIEFueSBpbnZhbGlkIGNvbXBhcmlzb25zIG1pZ2h0IHRyaWdnZXIgZmFpbHVyZXMgb3IgdW5kZXNpcmFibGUKKyAgICAgICAgICAgICAgICBiZWhhdmlvciB3aGVuIHBhc3NlZCB0byB0aGUgcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZGVza3RvcDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUnVucyB0aGUgPGZpbGVuYW1lPmRlc2t0b3AtZmlsZS12YWxpZGF0ZTwvZmlsZW5hbWU+IHByb2dyYW0KKyAgICAgICAgICAgICAgICBhZ2FpbnN0IGFueSA8ZmlsZW5hbWU+LmRlc2t0b3A8L2ZpbGVuYW1lPiBmaWxlcyB0byB2YWxpZGF0ZQorICAgICAgICAgICAgICAgIHRoZWlyIGNvbnRlbnRzIGFnYWluc3QgdGhlIHNwZWNpZmljYXRpb24gZm9yCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5kZXNrdG9wPC9maWxlbmFtZT4gZmlsZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXYtZGVwczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGV4Y2VwdCA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPi1zdGF0aWNkZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcyBkbyBub3QgZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlcywgd2hpY2ggd291bGQgYmUgYQorICAgICAgICAgICAgICAgIHBhY2thZ2luZyBidWcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5kZXYtc286PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyB0aGF0IHRoZSA8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4gc3ltYm9saWMgbGlua3MgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBhbmQgbm90IGluIGFueSBvZiB0aGUgb3RoZXIgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgdGhlc2Ugc3ltbGlua3MgYXJlIG9ubHkgdXNlZnVsIGZvciBkZXZlbG9wbWVudCBwdXJwb3Nlcy4KKyAgICAgICAgICAgICAgICBUaHVzLCB0aGUgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIGlzIHRoZSBjb3JyZWN0IGxvY2F0aW9uIGZvcgorICAgICAgICAgICAgICAgIHRoZW0uCisgICAgICAgICAgICAgICAgU29tZSB2ZXJ5IHJhcmUgY2FzZXMgZG8gZXhpc3QgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIHdoZXJlCisgICAgICAgICAgICAgICAgdGhlc2Ugc3ltbGlua3MgYXJlIG5lZWRlZCBpbnN0ZWFkIGluIHRoZSBtYWluIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlLXJkZXBzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBmaWxlLWxldmVsIGRlcGVuZGVuY2llcyBpZGVudGlmaWVkIGJ5IHRoZQorICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXQgcGFja2FnaW5nIHRpbWUgYXJlIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBzaGVsbCBzY3JpcHQgbWlnaHQgc3RhcnQgd2l0aCB0aGUgbGluZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4jIS9iaW4vYmFzaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoaXMgbGluZSB3b3VsZCB0cmFuc2xhdGUgdG8gYSBmaWxlIGRlcGVuZGVuY3kgb24KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2Jpbi9iYXNoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgT2YgdGhlIHRocmVlIHBhY2thZ2UgbWFuYWdlcnMgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgc3lzdGVtIHN1cHBvcnRzLCBvbmx5IFJQTSBkaXJlY3RseSBoYW5kbGVzIGZpbGUtbGV2ZWwKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIHJlc29sdmluZyB0aGVtIGF1dG9tYXRpY2FsbHkgdG8gcGFja2FnZXMKKyAgICAgICAgICAgICAgICBwcm92aWRpbmcgdGhlIGZpbGVzLgorICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBsYWNrIG9mIHRoYXQgZnVuY3Rpb25hbGl0eSBpbiB0aGUgb3RoZXIgdHdvCisgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VycyBkb2VzIG5vdCBtZWFuIHRoZSBkZXBlbmRlbmNpZXMgZG8gbm90IHN0aWxsCisgICAgICAgICAgICAgICAgbmVlZCByZXNvbHZpbmcuCisgICAgICAgICAgICAgICAgVGhpcyBRQSBjaGVjayBhdHRlbXB0cyB0byBlbnN1cmUgdGhhdCBleHBsaWNpdGx5IGRlY2xhcmVkCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBleGlzdCB0byBoYW5kbGUgYW55IGZpbGUtbGV2ZWwgZGVwZW5kZW5jeSBkZXRlY3RlZCBpbgorICAgICAgICAgICAgICAgIHBhY2thZ2VkIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+ZmlsZXMtaW52YWxpZDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdmFsdWVzIHRoYXQgY29udGFpbiAiLy8iLCB3aGljaCBpcyBpbnZhbGlkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aW5jb21wYXRpYmxlLWxpY2Vuc2U6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydCB3aGVuIHBhY2thZ2VzIGFyZSBleGNsdWRlZCBmcm9tIGJlaW5nIGNyZWF0ZWQgZHVlIHRvCisgICAgICAgICAgICAgICAgYmVpbmcgbWFya2VkIHdpdGggYSBsaWNlbnNlIHRoYXQgaXMgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5DT01QQVRJQkxFX0xJQ0VOU0UnPjxmaWxlbmFtZT5JTkNPTVBBVElCTEVfTElDRU5TRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmluc3RhbGwtaG9zdC1wYXRoOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgbG9nIGZvciBpbmRpY2F0aW9ucworICAgICAgICAgICAgICAgIHRoYXQgcGF0aHMgdG8gbG9jYXRpb25zIG9uIHRoZSBidWlsZCBob3N0IHdlcmUgdXNlZC4KKyAgICAgICAgICAgICAgICBVc2luZyBzdWNoIHBhdGhzIG1pZ2h0IHJlc3VsdCBpbiBob3N0IGNvbnRhbWluYXRpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgYnVpbGQgb3V0cHV0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aW5zdGFsbGVkLXZzLXNoaXBwZWQ6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgd2hlbiBmaWxlcyBoYXZlIGJlZW4gaW5zdGFsbGVkIHdpdGhpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gYnV0IGhhdmUgbm90IGJlZW4gaW5jbHVkZWQgaW4KKyAgICAgICAgICAgICAgICBhbnkgcGFja2FnZSBieSB3YXkgb2YgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBGaWxlcyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gYW55IHBhY2thZ2UgY2Fubm90IGJlIHByZXNlbnQgaW4KKyAgICAgICAgICAgICAgICBhbiBpbWFnZSBsYXRlciBvbiBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBJZGVhbGx5LCBhbGwgaW5zdGFsbGVkIGZpbGVzIHNob3VsZCBiZSBwYWNrYWdlZCBvciBub3QKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgYXQgYWxsLgorICAgICAgICAgICAgICAgIFRoZXNlIGZpbGVzIGNhbiBiZSBkZWxldGVkIGF0IHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+IGlmIHRoZSBmaWxlcyBhcmUgbm90CisgICAgICAgICAgICAgICAgbmVlZGVkIGluIGFueSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bGE6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyA8ZmlsZW5hbWU+LmxhPC9maWxlbmFtZT4gZmlsZXMgZm9yIGFueSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICBBbnkgPGZpbGVuYW1lPi5sYTwvZmlsZW5hbWU+IGZpbGUgY29udGFpbmluZyB0aGVzZSBwYXRocyBpcyBpbmNvcnJlY3Qgc2luY2UKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+IGFkZHMgdGhlIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXggd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICBmaWxlcyBhdXRvbWF0aWNhbGx5IGl0c2VsZi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxkZmxhZ3M6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgYmluYXJpZXMgd2VyZSBsaW5rZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvcHRpb25zIHByb3ZpZGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB0ZXN0IGZhaWxzLCBjaGVjayB0aGF0IHRoZSA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaXMgYmVpbmcgcGFzc2VkIHRvIHRoZSBsaW5rZXIgY29tbWFuZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmRpcjo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBsaWJyYXJpZXMgYmVpbmcgaW5zdGFsbGVkIGludG8gaW5jb3JyZWN0CisgICAgICAgICAgICAgICAgKHBvc3NpYmx5IGhhcmRjb2RlZCkgaW5zdGFsbGF0aW9uIHBhdGhzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHRlc3Qgd2lsbCBjYXRjaCByZWNpcGVzIHRoYXQgaW5zdGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliL2Jhci5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiBpcyAibGliMzIiLgorICAgICAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyB3aGVuIHJlY2lwZXMgaW5zdGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYjY0L2Zvby5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtsaWJkaXJ9PC9maWxlbmFtZT4gaXMgIi91c3IvbGliIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmxpYmV4ZWM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBpZiBhIHBhY2thZ2UgY29udGFpbnMgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWJleGVjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBjaGVjayBpcyBub3QgcGVyZm9ybWVkIGlmIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJleGVjZGlyPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIGJlZW4gc2V0CisgICAgICAgICAgICAgICAgZXhwbGljaXRseSB0byA8ZmlsZW5hbWU+L3Vzci9saWJleGVjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wYWNrYWdlcy1saXN0OjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgZm9yIHRoZSBzYW1lIHBhY2thZ2UgYmVpbmcgbGlzdGVkIG11bHRpcGxlIHRpbWVzIHRocm91Z2gKKyAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICBJbnN0YWxsaW5nIHRoZSBwYWNrYWdlIGluIHRoaXMgbWFubmVyIGNhbiBjYXVzZSBlcnJvcnMgZHVyaW5nCisgICAgICAgICAgICAgICAgcGFja2FnaW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGVybS1jb25maWc6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFJlcG9ydHMgbGluZXMgaW4gPGZpbGVuYW1lPmZzLXBlcm1zLnR4dDwvZmlsZW5hbWU+IHRoYXQgaGF2ZQorICAgICAgICAgICAgICAgIGFuIGludmFsaWQgZm9ybWF0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGVybS1saW5lOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIGxpbmVzIGluIDxmaWxlbmFtZT5mcy1wZXJtcy50eHQ8L2ZpbGVuYW1lPiB0aGF0IGhhdmUKKyAgICAgICAgICAgICAgICBhbiBpbnZhbGlkIGZvcm1hdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBlcm0tbGluazo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyBsaW5lcyBpbiA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4gdGhhdAorICAgICAgICAgICAgICAgIHNwZWNpZnkgJ2xpbmsnIHdoZXJlIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGVybXM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgdGhpcyBjaGVjayBpcyB1bnVzZWQgYnV0IHJlc2VydmVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGtnY29uZmlnOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgPGZpbGVuYW1lPi5wYzwvZmlsZW5hbWU+IGZpbGVzIGZvciBhbnkKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LzxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHBhdGhzLgorICAgICAgICAgICAgICAgIEFueSA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZSBjb250YWluaW5nIHRoZXNlIHBhdGhzIGlzIGluY29ycmVjdAorICAgICAgICAgICAgICAgIHNpbmNlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaXRzZWxmIGFkZHMgdGhlIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXgKKyAgICAgICAgICAgICAgICB3aGVuIHRoZSBmaWxlcyBhcmUgYWNjZXNzZWQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wa2duYW1lOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhhdCBhbGwgcGFja2FnZXMgaW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGhhdmUgbmFtZXMgdGhhdCBkbyBub3QgY29udGFpbiBpbnZhbGlkIGNoYXJhY3RlcnMgKGkuZS4KKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gMC05LCBhLXosIC4sICssIGFuZCAtKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBrZ3YtdW5kZWZpbmVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdG8gc2VlIGlmIHRoZSA8ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaXMgdW5kZWZpbmVkIGR1cmluZworICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBrZ3ZhcmNoZWNrOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBDaGVja3MgdGhyb3VnaCB0aGUgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJTVUdHRVNUUyc+PGZpbGVuYW1lPlJTVUdHRVNUUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJQUk9WSURFUyc+PGZpbGVuYW1lPlJQUk9WSURFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BTExPV19FTVBUWSc+PGZpbGVuYW1lPkFMTE9XX0VNUFRZPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcHJlaW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdGluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZXJtPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPnBrZ19wb3N0cm08L2ZpbGVuYW1lPiwgYW5kIHJlcG9ydHMgaWYgdGhlcmUgYXJlCisgICAgICAgICAgICAgICAgdmFyaWFibGUgc2V0cyB0aGF0IGFyZSBub3QgcGFja2FnZS1zcGVjaWZpYy4KKyAgICAgICAgICAgICAgICBVc2luZyB0aGVzZSB2YXJpYWJsZXMgd2l0aG91dCBhIHBhY2thZ2Ugc3VmZml4IGlzIGJhZCBwcmFjdGljZSwKKyAgICAgICAgICAgICAgICBhbmQgbWlnaHQgdW5uZWNlc3NhcmlseSBjb21wbGljYXRlIGRlcGVuZGVuY2llcyBvZiBvdGhlciBwYWNrYWdlcworICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgc2FtZSByZWNpcGUgb3IgaGF2ZSBvdGhlciB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBuLW92ZXJyaWRlczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYSByZWNpcGUgZG9lcyBub3QgaGF2ZSBhIG5hbWUKKyAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4pIHZhbHVlCisgICAgICAgICAgICAgICAgdGhhdCBhcHBlYXJzIGluCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICBJZiBhIHJlY2lwZSBpcyBuYW1lZCBzdWNoIHRoYXQgaXRzIDxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFsdWUgbWF0Y2hlcyBzb21ldGhpbmcgYWxyZWFkeSBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiAoZS5nLiA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGhhcHBlbnMgdG8gYmUgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgIGl0IGNhbiBoYXZlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzLgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3NpZ25tZW50cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTXyR7UE59ID0gInh5eiI8L2ZpbGVuYW1lPiBlZmZlY3RpdmVseSB0dXJuIGludG8KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVMgPSAieHl6IjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5ycGF0aHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgcnBhdGhzIGluIHRoZSBiaW5hcmllcyB0aGF0IGNvbnRhaW4gYnVpbGQgc3lzdGVtIHBhdGhzIHN1Y2gKKyAgICAgICAgICAgICAgICBhcyA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgSWYgdGhpcyB0ZXN0IGZhaWxzLCBiYWQgPGZpbGVuYW1lPi1ycGF0aDwvZmlsZW5hbWU+IG9wdGlvbnMgYXJlIGJlaW5nCisgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBsaW5rZXIgY29tbWFuZHMgYW5kIHlvdXIgYmluYXJpZXMgaGF2ZSBwb3RlbnRpYWwgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICBpc3N1ZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zcGxpdC1zdHJpcDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB0aGF0IHNwbGl0dGluZyBvciBzdHJpcHBpbmcgZGVidWcgc3ltYm9scyBmcm9tIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgaGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN0YXRpY2Rldjo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBzdGF0aWMgbGlicmFyeSBmaWxlcyAoPGZpbGVuYW1lPiouYTwvZmlsZW5hbWU+KSBpbgorICAgICAgICAgICAgICAgIG5vbi08ZmlsZW5hbWU+c3RhdGljZGV2PC9maWxlbmFtZT4gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5zeW1saW5rLXRvLXN5c3Jvb3Q6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3Igc3ltbGlua3MgaW4gcGFja2FnZXMgdGhhdCBwb2ludCBpbnRvCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgIFN1Y2ggc3ltbGlua3Mgd2lsbCB3b3JrIG9uIHRoZSBob3N0LCBidXQgYXJlIGNsZWFybHkgaW52YWxpZAorICAgICAgICAgICAgICAgIHdoZW4gcnVubmluZyBvbiB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dGV4dHJlbDo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIGZvciBFTEYgYmluYXJpZXMgdGhhdCBjb250YWluIHJlbG9jYXRpb25zIGluIHRoZWlyCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi50ZXh0PC9maWxlbmFtZT4gc2VjdGlvbnMsIHdoaWNoIGNhbiByZXN1bHQgaW4gYQorICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGltcGFjdCBhdCBydW50aW1lLgorICAgICAgICAgICAgICAgIFNlZSB0aGUgZXhwbGFuYXRpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3FhLWlzc3VlLXRleHRyZWwnPjxmaWxlbmFtZT5FTEYgYmluYXJ5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgbWVzc2FnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgcnVudGltZSBwZXJmb3JtYW5jZSBpc3N1ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgUmVwb3J0cyB3aGVuIGEgYmluYXJ5IGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfYmluZGlyfTwvZmlsZW5hbWU+LCBvcgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2Vfc2JpbmRpcn08L2ZpbGVuYW1lPiwgZGVwZW5kcyBvbiBhbm90aGVyCisgICAgICAgICAgICAgICAgYmluYXJ5IGluc3RhbGxlZCB1bmRlciA8ZmlsZW5hbWU+JHtleGVjX3ByZWZpeH08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICBUaGlzIGRlcGVuZGVuY3kgaXMgYSBjb25jZXJuIGlmIHlvdSB3YW50IHRoZSBzeXN0ZW0gdG8gcmVtYWluCisgICAgICAgICAgICAgICAgYmFzaWNhbGx5IG9wZXJhYmxlIGlmIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4gaXMgbW91bnRlZAorICAgICAgICAgICAgICAgIHNlcGFyYXRlbHkgYW5kIGlzIG5vdCBtb3VudGVkLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyBmb3IgYmluYXJpZXMgaW5zdGFsbGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2VfbGliZGlyfTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2Jhc2Vfc2JpbmRpcn08L2ZpbGVuYW1lPiBhcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPi9iaW48L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vc2JpbjwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciBhIGJpbmFyeSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIHdoZW4gYSBzY3JpcHQgZmlsZSBpbnN0YWxsZWQgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2JpbmRpcn08L2ZpbGVuYW1lPiwgb3IKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4sIGRlcGVuZHMgb24gZmlsZXMKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWQgdW5kZXIgPGZpbGVuYW1lPiR7ZXhlY19wcmVmaXh9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhpcyBkZXBlbmRlbmN5IGlzIGEgY29uY2VybiBpZiB5b3Ugd2FudCB0aGUgc3lzdGVtIHRvIHJlbWFpbgorICAgICAgICAgICAgICAgIGJhc2ljYWxseSBvcGVyYWJsZSBpZiA8ZmlsZW5hbWU+L3VzcjwvZmlsZW5hbWU+IGlzIG1vdW50ZWQKKyAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5IGFuZCBpcyBub3QgbW91bnRlZC4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgZm9yIGJpbmFyaWVzIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX2xpYmRpcn08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9iaW5kaXJ9PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtiYXNlX3NiaW5kaXJ9PC9maWxlbmFtZT4gYXJlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3NiaW48L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmb3IgYSBiaW5hcnkgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIHVuZGVyIDxmaWxlbmFtZT4ke2V4ZWNfcHJlZml4fTwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+dXNlbGVzcy1ycGF0aHM6PC9maWxlbmFtZT48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIENoZWNrcyBmb3IgZHluYW1pYyBsaWJyYXJ5IGxvYWQgcGF0aHMgKHJwYXRocykgaW4gdGhlIGJpbmFyaWVzIHRoYXQKKyAgICAgICAgICAgICAgICBieSBkZWZhdWx0IG9uIGEgc3RhbmRhcmQgc3lzdGVtIGFyZSBzZWFyY2hlZCBieSB0aGUgbGlua2VyIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIFdoaWxlIHRoZXNlIHBhdGhzIHdpbGwgbm90IGNhdXNlIGFueSBicmVha2FnZSwgdGhleSBkbyB3YXN0ZSBzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICBhcmUgdW5uZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT52YXItdW5kZWZpbmVkOjwvZmlsZW5hbWU+PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBSZXBvcnRzIHdoZW4gdmFyaWFibGVzIGZ1bmRhbWVudGFsIHRvIHBhY2thZ2luZyAoaS5lLgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPjxmaWxlbmFtZT5EPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+LCBhbmQKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRCc+PGZpbGVuYW1lPlBLR0Q8L2ZpbGVuYW1lPjwvbGluaz4pIGFyZQorICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBkdXJpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT52ZXJzaW9uLWdvaW5nLWJhY2t3YXJkczo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgSWYgQnVpbGQgSGlzdG9yeSBpcyBlbmFibGVkLCByZXBvcnRzIHdoZW4gYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgYmVpbmcgd3JpdHRlbiBvdXQgaGFzIGEgbG93ZXIgdmVyc2lvbiB0aGFuIHRoZSBwcmV2aW91c2x5CisgICAgICAgICAgICAgICAgd3JpdHRlbiBwYWNrYWdlIHVuZGVyIHRoZSBzYW1lIG5hbWUuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBwbGFjaW5nIG91dHB1dCBwYWNrYWdlcyBpbnRvIGEgZmVlZCBhbmQKKyAgICAgICAgICAgICAgICB1cGdyYWRpbmcgcGFja2FnZXMgb24gYSB0YXJnZXQgc3lzdGVtIHVzaW5nIHRoYXQgZmVlZCwgdGhlCisgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBhIHBhY2thZ2UgZ29pbmcgYmFja3dhcmRzIGNhbiByZXN1bHQgaW4gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgIHN5c3RlbSBub3QgY29ycmVjdGx5IHVwZ3JhZGluZyB0byB0aGUgIm5ldyIgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCB1c2luZyBydW50aW1lIHBhY2thZ2UgbWFuYWdlbWVudCBvbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0sIHRoZW4geW91IGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0CisgICAgICAgICAgICAgICAgICAgIHRoaXMgc2l0dWF0aW9uLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnhvcmctZHJpdmVyLWFiaTo8L2ZpbGVuYW1lPjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQ2hlY2tzIHRoYXQgYWxsIHBhY2thZ2VzIGNvbnRhaW5pbmcgWG9yZyBkcml2ZXJzIGhhdmUgQUJJCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+eHNlcnZlci14b3JnPC9maWxlbmFtZT4gcmVjaXBlIHByb3ZpZGVzIGRyaXZlcgorICAgICAgICAgICAgICAgIEFCSSBuYW1lcy4KKyAgICAgICAgICAgICAgICBBbGwgZHJpdmVycyBzaG91bGQgZGVwZW5kIG9uIHRoZSBBQkkgdmVyc2lvbnMgdGhhdCB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICBiZWVuIGJ1aWx0IGFnYWluc3QuCisgICAgICAgICAgICAgICAgRHJpdmVyIHJlY2lwZXMgdGhhdCBpbmNsdWRlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhvcmctZHJpdmVyLWlucHV0LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgb3IgPGZpbGVuYW1lPnhvcmctZHJpdmVyLXZpZGVvLmluYzwvZmlsZW5hbWU+IHdpbGwKKyAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGdldCB0aGVzZSB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBzaG91bGQgb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIHRvIGJpbmFyeSBkcml2ZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtaW5zc2Vydic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5pbnNzZXJ2LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5pbnNzZXJ2PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgdXNlcyB0aGUgPGZpbGVuYW1lPmluc3NlcnY8L2ZpbGVuYW1lPiB1dGlsaXR5IHRvIHVwZGF0ZSB0aGUgb3JkZXIgb2YKKyAgICAgICAgc3ltYm9saWMgbGlua3MgaW4gPGZpbGVuYW1lPi9ldGMvcmM/LmQvPC9maWxlbmFtZT4gd2l0aGluIGFuIGltYWdlCisgICAgICAgIGJhc2VkIG9uIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgTFNCIGhlYWRlcnMgaW4gdGhlCisgICAgICAgIDxmaWxlbmFtZT5pbml0LmQ8L2ZpbGVuYW1lPiBzY3JpcHRzIHRoZW1zZWx2ZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMta2VybmVsJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT4gY2xhc3MgaGFuZGxlcyBidWlsZGluZyBMaW51eCBrZXJuZWxzLgorICAgICAgICBUaGUgY2xhc3MgY29udGFpbnMgY29kZSB0byBidWlsZCBhbGwga2VybmVsIHRyZWVzLgorICAgICAgICBBbGwgbmVlZGVkIGhlYWRlcnMgYXJlIHN0YWdlZCBpbnRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfS0VSTkVMX0RJUic+U1RBR0lOR19LRVJORUxfRElSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeSB0byBhbGxvdyBvdXQtb2YtdHJlZSBtb2R1bGUgYnVpbGRzIHVzaW5nCisgICAgICAgIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBlYWNoIGJ1aWx0IGtlcm5lbCBtb2R1bGUgaXMgcGFja2FnZWQgc2VwYXJhdGVseSBhbmQgaW50ZXItbW9kdWxlCisgICAgICAgIGRlcGVuZGVuY2llcyBhcmUgY3JlYXRlZCBieSBwYXJzaW5nIHRoZSA8ZmlsZW5hbWU+bW9kaW5mbzwvZmlsZW5hbWU+IG91dHB1dC4KKyAgICAgICAgSWYgYWxsIG1vZHVsZXMgYXJlIHJlcXVpcmVkLCB0aGVuIGluc3RhbGxpbmcgdGhlIDxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlczwvZmlsZW5hbWU+CisgICAgICAgIHBhY2thZ2UgaW5zdGFsbHMgYWxsIHBhY2thZ2VzIHdpdGggbW9kdWxlcyBhbmQgdmFyaW91cyBvdGhlciBrZXJuZWwgcGFja2FnZXMKKyAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+a2VybmVsLXZtbGludXg8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVmFyaW91cyBvdGhlciBjbGFzc2VzIGFyZSB1c2VkIGJ5IHRoZSA8ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPiBjbGFzc2VzIGludGVybmFsbHkgaW5jbHVkaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwtYXJjaCc+PGZpbGVuYW1lPmtlcm5lbC1hcmNoPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUtYmFzZSc+PGZpbGVuYW1lPm1vZHVsZS1iYXNlPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbGludXgta2VybmVsLWJhc2UnPjxmaWxlbmFtZT5saW51eC1rZXJuZWwtYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzc2VzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWtlcm5lbC1hcmNoJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmtlcm5lbC1hcmNoLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5rZXJuZWwtYXJjaDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHNldHMgdGhlIDxmaWxlbmFtZT5BUkNIPC9maWxlbmFtZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIExpbnV4CisgICAgICAgIGtlcm5lbCBjb21waWxhdGlvbiAoaW5jbHVkaW5nIG1vZHVsZXMpLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWtlcm5lbC1tb2R1bGUtc3BsaXQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+a2VybmVsLW1vZHVsZS1zcGxpdDwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBzcGxpdHRpbmcgTGludXgga2VybmVsIG1vZHVsZXMgaW50bworICAgICAgICBzZXBhcmF0ZSBwYWNrYWdlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1rZXJuZWwteW9jdG8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+a2VybmVsLXlvY3RvLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5rZXJuZWwteW9jdG88L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgZnJvbSBsaW51eC15b2N0byBzdHlsZQorICAgICAgICBrZXJuZWwgc291cmNlIHJlcG9zaXRvcmllcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1saWJfcGFja2FnZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5saWJfcGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGliX3BhY2thZ2U8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzdXBwb3J0cyByZWNpcGVzIHRoYXQgYnVpbGQgbGlicmFyaWVzIGFuZCBwcm9kdWNlIGV4ZWN1dGFibGUKKyAgICAgICAgYmluYXJpZXMsIHdoZXJlIHRob3NlIGJpbmFyaWVzIHNob3VsZCBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgYWxvbmcgd2l0aCB0aGUgbGlicmFyeS4KKyAgICAgICAgSW5zdGVhZCwgdGhlIGJpbmFyaWVzIGFyZSBhZGRlZCB0byBhIHNlcGFyYXRlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS1iaW48L2ZpbGVuYW1lPgorICAgICAgICBwYWNrYWdlIHRvIG1ha2UgdGhlaXIgaW5zdGFsbGF0aW9uIG9wdGlvbmFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWxpY2Vuc2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bGljZW5zZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bGljZW5zZTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGxpY2Vuc2UKKyAgICAgICAgbWFuaWZlc3QgY3JlYXRpb24gYW5kIGxpY2Vuc2UgZXhjbHVzaW9uLgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUX0RJU1RSTyc+PGZpbGVuYW1lPklOSEVSSVRfRElTVFJPPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLWxpbnV4LWtlcm5lbC1iYXNlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPmxpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5saW51eC1rZXJuZWwtYmFzZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzIHRoYXQgYnVpbGQgb3V0IG9mIHRoZSBMaW51eAorICAgICAgICBrZXJuZWwgc291cmNlIHRyZWUuCisgICAgICAgIFRoZXNlIGJ1aWxkcyBnb2VzIGJleW9uZCB0aGUga2VybmVsIGl0c2VsZi4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBQZXJmIHJlY2lwZSBhbHNvIGluaGVyaXRzIHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbG9nZ2luZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5sb2dnaW5nLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5sb2dnaW5nPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIHN0YW5kYXJkCisgICAgICAgIHNoZWxsIGZ1bmN0aW9ucyB1c2VkIHRvIGxvZyBtZXNzYWdlcyBmb3IgdmFyaW91cyBCaXRCYWtlIHNldmVyaXR5IGxldmVscworICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+YmJwbGFpbjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJub3RlPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5iYndhcm48L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJiZXJyb3I8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPmJiZmF0YWw8L2ZpbGVuYW1lPiwgYW5kIDxmaWxlbmFtZT5iYmRlYnVnPC9maWxlbmFtZT4pLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBzaW5jZSBpdCBpcyBpbmhlcml0ZWQgYnkKKyAgICAgICAgdGhlIDxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbWV0YSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkIGJ5IHJlY2lwZXMKKyAgICAgICAgdGhhdCBkbyBub3QgYnVpbGQgYW55IG91dHB1dCBwYWNrYWdlcyB0aGVtc2VsdmVzLCBidXQgYWN0IGFzIGEgIm1ldGEiCisgICAgICAgIHRhcmdldCBmb3IgYnVpbGRpbmcgb3RoZXIgcmVjaXBlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1tZXRhZGF0YV9zY20nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YWRhdGFfc2NtLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5tZXRhZGF0YV9zY208L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBxdWVyeWluZyB0aGUgYnJhbmNoIGFuZCByZXZpc2lvbiBvZiBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkKKyAgICAgICAgcmVwb3NpdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIHVzZXMgdGhpcyBjbGFzcyB0byBwcmludCB0aGUgcmV2aXNpb25zIG9mIGVhY2ggbGF5ZXIgYmVmb3JlCisgICAgICAgIHN0YXJ0aW5nIGV2ZXJ5IGJ1aWxkLgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGFkYXRhX3NjbTwvZmlsZW5hbWU+IGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieSB0aGUgPGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1taW1lJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm1pbWUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1pbWU8L2ZpbGVuYW1lPiBjbGFzcyBnZW5lcmF0ZXMgdGhlIHByb3BlcgorICAgICAgICBwb3N0LWluc3RhbGwgYW5kIHBvc3QtcmVtb3ZlIChwb3N0aW5zdC9wb3N0cm0pIHNjcmlwdGxldHMgZm9yIHBhY2thZ2VzCisgICAgICAgIHRoYXQgaW5zdGFsbCBNSU1FIHR5cGUgZmlsZXMuCisgICAgICAgIFRoZXNlIHNjcmlwdGxldHMgY2FsbCA8ZmlsZW5hbWU+dXBkYXRlLW1pbWUtZGF0YWJhc2U8L2ZpbGVuYW1lPiB0byBhZGQKKyAgICAgICAgdGhlIE1JTUUgdHlwZXMgdG8gdGhlIHNoYXJlZCBkYXRhYmFzZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1taXJyb3JzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm1pcnJvcnMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1pcnJvcnM8L2ZpbGVuYW1lPiBjbGFzcyBzZXRzIHVwIHNvbWUgc3RhbmRhcmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1JUlJPUlMnPjxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT48L2xpbms+IGVudHJpZXMKKyAgICAgICAgZm9yIHNvdXJjZSBjb2RlIG1pcnJvcnMuCisgICAgICAgIFRoZXNlIG1pcnJvcnMgcHJvdmlkZSBhIGZhbGwtYmFjayBwYXRoIGluIGNhc2UgdGhlIHVwc3RyZWFtIHNvdXJjZQorICAgICAgICBzcGVjaWZpZWQgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHdpdGhpbiByZWNpcGVzIGlzIHVuYXZhaWxhYmxlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBzaW5jZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW1vZHVsZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tb2R1bGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1vZHVsZTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJ1aWxkaW5nCisgICAgICAgIG91dC1vZi10cmVlIExpbnV4IGtlcm5lbCBtb2R1bGVzLgorICAgICAgICBUaGUgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLW1vZHVsZS1iYXNlJz48ZmlsZW5hbWU+bW9kdWxlLWJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbC1tb2R1bGUtc3BsaXQnPjxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlLXNwbGl0PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzZXMsIGFuZCBpbXBsZW1lbnRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrcy4KKyAgICAgICAgVGhlIGNsYXNzIHByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGJ1aWxkIGFuZCBwYWNrYWdlIGEga2VybmVsCisgICAgICAgIG1vZHVsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gb3V0LW9mLXRyZWUgTGludXgga2VybmVsIG1vZHVsZXMsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9VUkw7I2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgTGludXggS2VybmVsIERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1tb2R1bGUtYmFzZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5tb2R1bGUtYmFzZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bW9kdWxlLWJhc2U8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyB0aGUgYmFzZQorICAgICAgICBmdW5jdGlvbmFsaXR5IGZvciBidWlsZGluZyBMaW51eCBrZXJuZWwgbW9kdWxlcy4KKyAgICAgICAgVHlwaWNhbGx5LCBhIHJlY2lwZSB0aGF0IGJ1aWxkcyBzb2Z0d2FyZSB0aGF0IGluY2x1ZGVzIG9uZSBvcgorICAgICAgICBtb3JlIGtlcm5lbCBtb2R1bGVzIGFuZCBoYXMgaXRzIG93biBtZWFucyBvZiBidWlsZGluZworICAgICAgICB0aGUgbW9kdWxlIGluaGVyaXRzIHRoaXMgY2xhc3MgYXMgb3Bwb3NlZCB0byBpbmhlcml0aW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1tb2R1bGUnPjxmaWxlbmFtZT5tb2R1bGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtbXVsdGlsaWIqJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm11bHRpbGliKi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+bXVsdGlsaWIqPC9maWxlbmFtZT4gY2xhc3NlcyBwcm92aWRlIHN1cHBvcnQKKyAgICAgICAgZm9yIGJ1aWxkaW5nIGxpYnJhcmllcyB3aXRoIGRpZmZlcmVudCB0YXJnZXQgb3B0aW1pemF0aW9ucyBvciB0YXJnZXQKKyAgICAgICAgYXJjaGl0ZWN0dXJlcyBhbmQgaW5zdGFsbGluZyB0aGVtIHNpZGUtYnktc2lkZSBpbiB0aGUgc2FtZSBpbWFnZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIE11bHRpbGliIGZlYXR1cmUsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5Db21iaW5pbmcgTXVsdGlwbGUgVmVyc2lvbnMgb2YgTGlicmFyeSBGaWxlcyBpbnRvIE9uZSBJbWFnZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1uYXRpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+bmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBjb21tb24KKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgcmVjaXBlcyB0aGF0IHdpc2ggdG8gYnVpbGQgdG9vbHMgdG8gcnVuIG9uIHRoZSBidWlsZAorICAgICAgICBob3N0IChpLmUuIHRvb2xzIHRoYXQgdXNlIHRoZSBjb21waWxlciBvciBvdGhlciB0b29scyBmcm9tIHRoZQorICAgICAgICBidWlsZCBob3N0KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjcmVhdGUgYSByZWNpcGUgdGhhdCBidWlsZHMgdG9vbHMgdGhhdCBydW4gbmF0aXZlbHkgb24gdGhlCisgICAgICAgIGhvc3QgYSBjb3VwbGUgZGlmZmVyZW50IHdheXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgPHJlcGxhY2VhYmxlPm15cmVjaXBlPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+LW5hdGl2ZS5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdGhhdCBpbmhlcml0cyB0aGUgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzLgorICAgICAgICAgICAgICAgIElmIHlvdSB1c2UgdGhpcyBtZXRob2QsIHlvdSBtdXN0IG9yZGVyIHRoZSBpbmhlcml0IHN0YXRlbWVudAorICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUgYWZ0ZXIgYWxsIG90aGVyIGluaGVyaXQgc3RhdGVtZW50cyBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjbGFzcyBpcyBpbmhlcml0ZWQgbGFzdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DcmVhdGUgb3IgbW9kaWZ5IGEgdGFyZ2V0IHJlY2lwZSB0aGF0IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQkNMQVNTRVhURU5EJz48ZmlsZW5hbWU+QkJDTEFTU0VYVEVORDwvZmlsZW5hbWU+PC9saW5rPiA9ICJuYXRpdmUiCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEluc2lkZSB0aGUgcmVjaXBlLCB1c2UgPGZpbGVuYW1lPl9jbGFzcy1uYXRpdmU8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2NsYXNzLXRhcmdldDwvZmlsZW5hbWU+IG92ZXJyaWRlcyB0byBzcGVjaWZ5IGFueQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgc3BlY2lmaWMgdG8gdGhlIHJlc3BlY3RpdmUgbmF0aXZlIG9yIHRhcmdldAorICAgICAgICAgICAgICAgIGNhc2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBbHRob3VnaCBhcHBsaWVkIGRpZmZlcmVudGx5LCB0aGUgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzIGlzCisgICAgICAgIHVzZWQgd2l0aCBib3RoIG1ldGhvZHMuCisgICAgICAgIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlIHNlY29uZCBtZXRob2QgaXMgdGhhdCB5b3UgZG8gbm90IG5lZWQgdG8gaGF2ZSB0d28KKyAgICAgICAgc2VwYXJhdGUgcmVjaXBlcyAoYXNzdW1pbmcgeW91IG5lZWQgYm90aCkgZm9yIG5hdGl2ZSBhbmQgdGFyZ2V0LgorICAgICAgICBBbGwgY29tbW9uIHBhcnRzIG9mIHRoZSByZWNpcGUgYXJlIGF1dG9tYXRpY2FsbHkgc2hhcmVkLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLW5hdGl2ZXNkayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5uYXRpdmVzZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGNvbW1vbgorICAgICAgICBmdW5jdGlvbmFsaXR5IGZvciByZWNpcGVzIHRoYXQgd2lzaCB0byBidWlsZCB0b29scyB0byBydW4gYXMgcGFydCBvZgorICAgICAgICBhbiBTREsgKGkuZS4gdG9vbHMgdGhhdCBydW4gb24KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjcmVhdGUgYSByZWNpcGUgdGhhdCBidWlsZHMgdG9vbHMgdGhhdCBydW4gb24gdGhlIFNESyBtYWNoaW5lCisgICAgICAgIGEgY291cGxlIGRpZmZlcmVudCB3YXlzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNyZWF0ZSBhCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT5teXJlY2lwZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgcmVjaXBlIHRoYXQgaW5oZXJpdHMgdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBvcmRlciB0aGUgaW5oZXJpdCBzdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFmdGVyIGFsbCBvdGhlciBpbmhlcml0IHN0YXRlbWVudHMgc28gdGhhdCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2xhc3MgaXMgaW5oZXJpdGVkIGxhc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGEgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHZhcmlhbnQKKyAgICAgICAgICAgICAgICBvZiBhbnkgcmVjaXBlIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCQ0xBU1NFWFRFTkQnPjxmaWxlbmFtZT5CQkNMQVNTRVhURU5EPC9maWxlbmFtZT48L2xpbms+ID0gIm5hdGl2ZXNkayIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW5zaWRlIHRoZSByZWNpcGUsIHVzZSA8ZmlsZW5hbWU+X2NsYXNzLW5hdGl2ZXNkazwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fY2xhc3MtdGFyZ2V0PC9maWxlbmFtZT4gb3ZlcnJpZGVzIHRvIHNwZWNpZnkgYW55CisgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byB0aGUgcmVzcGVjdGl2ZSBTREsgbWFjaGluZSBvciB0YXJnZXQKKyAgICAgICAgICAgICAgICBjYXNlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQWx0aG91Z2ggYXBwbGllZCBkaWZmZXJlbnRseSwgdGhlIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBpcyB1c2VkIHdpdGggYm90aCBtZXRob2RzLgorICAgICAgICBUaGUgYWR2YW50YWdlIG9mIHRoZSBzZWNvbmQgbWV0aG9kIGlzIHRoYXQgeW91IGRvIG5vdCBuZWVkIHRvIGhhdmUgdHdvCisgICAgICAgIHNlcGFyYXRlIHJlY2lwZXMgKGFzc3VtaW5nIHlvdSBuZWVkIGJvdGgpIGZvciB0aGUgU0RLIG1hY2hpbmUgYW5kIHRoZQorICAgICAgICB0YXJnZXQuCisgICAgICAgIEFsbCBjb21tb24gcGFydHMgb2YgdGhlIHJlY2lwZSBhcmUgYXV0b21hdGljYWxseSBzaGFyZWQuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtb2VsaW50Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPm9lbGludC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2VsaW50PC9maWxlbmFtZT4gY2xhc3MgaXMgYW4KKyAgICAgICAgb2Jzb2xldGUgbGludCBjaGVja2luZyB0b29sIHRoYXQgZXhpc3RzIGluCisgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBIG51bWJlciBvZiBjbGFzc2VzIGV4aXN0IHRoYXQgY291bGQgYmUgZ2VuZXJhbGx5IHVzZWZ1bCBpbgorICAgICAgICBPRS1Db3JlIGJ1dCBhcmUgbmV2ZXIgYWN0dWFsbHkgdXNlZCB3aXRoaW4gT0UtQ29yZSBpdHNlbGYuCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2VsaW50PC9maWxlbmFtZT4gY2xhc3MgaXMgb25lIHN1Y2ggZXhhbXBsZS4KKyAgICAgICAgSG93ZXZlciwgYmVpbmcgYXdhcmUgb2YgdGhpcyBjbGFzcyBjYW4gcmVkdWNlIHRoZSBwcm9saWZlcmF0aW9uIG9mCisgICAgICAgIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBzaW1pbGFyIGNsYXNzZXMgYWNyb3NzIG11bHRpcGxlIGxheWVycy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1vd24tbWlycm9ycyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5vd24tbWlycm9ycy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+b3duLW1pcnJvcnM8L2ZpbGVuYW1lPiBjbGFzcyBtYWtlcyBpdAorICAgICAgICBlYXNpZXIgdG8gc2V0IHVwIHlvdXIgb3duCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBmcm9tIHdoaWNoIHRvIGZpcnN0IGZldGNoIHNvdXJjZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBmZXRjaCBpdCBmcm9tIHRoZQorICAgICAgICB1cHN0cmVhbSBzcGVjaWZpZWQgaW4KKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHdpdGhpbiBlYWNoIHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVG8gdXNlIHRoaXMgY2xhc3MsIGluaGVyaXQgaXQgZ2xvYmFsbHkgYW5kIHNwZWNpZnkKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNPVVJDRV9NSVJST1JfVVJMJz48ZmlsZW5hbWU+U09VUkNFX01JUlJPUl9VUkw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJvd24tbWlycm9ycyIKKyAgICAgU09VUkNFX01JUlJPUl9VUkwgPSAiaHR0cDovL2V4YW1wbGUuY29tL215LXNvdXJjZS1taXJyb3IiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgWW91IGNhbiBzcGVjaWZ5IG9ubHkgYSBzaW5nbGUgVVJMIGluCisgICAgICAgIDxmaWxlbmFtZT5TT1VSQ0VfTUlSUk9SX1VSTDwvZmlsZW5hbWU+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIGdlbmVyYXRpbmcKKyAgICAgICAgcGFja2FnZXMgZnJvbSBhIGJ1aWxkJ3Mgb3V0cHV0LgorICAgICAgICBUaGUgY29yZSBnZW5lcmljIGZ1bmN0aW9uYWxpdHkgaXMgaW4KKyAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICBUaGUgY29kZSBzcGVjaWZpYyB0byBwYXJ0aWN1bGFyIHBhY2thZ2UgdHlwZXMgcmVzaWRlcyBpbiB0aGVzZQorICAgICAgICBwYWNrYWdlLXNwZWNpZmljIGNsYXNzZXM6CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfZGViJz48ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfcnBtJz48ZmlsZW5hbWU+cGFja2FnZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfaXBrJz48ZmlsZW5hbWU+cGFja2FnZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+PGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT4gY2xhc3MgaXMgYnJva2VuIGFuZCBub3QKKyAgICAgICAgICAgIHN1cHBvcnRlZC4KKyAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvIG5vdCB1c2UgdGhpcyBjbGFzcy4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGxpc3Qgb2YgcmVzdWx0aW5nIHBhY2thZ2UgZm9ybWF0cyBieSB1c2luZyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPlBBQ0tBR0VfQ0xBU1NFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZSBkZWZpbmVkIGluIHlvdXIgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgV2hlbiBkZWZpbmluZyB0aGUgdmFyaWFibGUsIHlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbW9yZSBwYWNrYWdlIHR5cGVzLgorICAgICAgICBTaW5jZSBpbWFnZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHBhY2thZ2VzLCBhIHBhY2thZ2luZyBjbGFzcyBpcworICAgICAgICBuZWVkZWQgdG8gZW5hYmxlIGltYWdlIGdlbmVyYXRpb24uCisgICAgICAgIFRoZSBmaXJzdCBjbGFzcyBsaXN0ZWQgaW4gdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGZvciBpbWFnZSBnZW5lcmF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgdGFrZSB0aGUgb3B0aW9uYWwgc3RlcCB0byBzZXQgdXAgYSByZXBvc2l0b3J5IChwYWNrYWdlIGZlZWQpCisgICAgICAgIG9uIHRoZSBkZXZlbG9wbWVudCBob3N0IHRoYXQgY2FuIGJlIHVzZWQgYnkgU21hcnQsIHlvdSBjYW4KKyAgICAgICAgaW5zdGFsbCBwYWNrYWdlcyBmcm9tIHRoZSBmZWVkIHdoaWxlIHlvdSBhcmUgcnVubmluZyB0aGUgaW1hZ2UKKyAgICAgICAgb24gdGhlIHRhcmdldCAoaS5lLiBydW50aW1lIGluc3RhbGxhdGlvbiBvZiBwYWNrYWdlcykuCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy1ydW50aW1lLXBhY2thZ2UtbWFuYWdlbWVudCc+VXNpbmcgUnVudGltZSBQYWNrYWdlIE1hbmFnZW1lbnQ8L3VsaW5rPiIKKyAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcGFja2FnZS1zcGVjaWZpYyBjbGFzcyB5b3UgY2hvb3NlIGNhbiBhZmZlY3QgYnVpbGQtdGltZSBwZXJmb3JtYW5jZQorICAgICAgICBhbmQgaGFzIHNwYWNlIHJhbWlmaWNhdGlvbnMuCisgICAgICAgIEluIGdlbmVyYWwsIGJ1aWxkaW5nIGEgcGFja2FnZSB3aXRoIElQSyB0YWtlcyBhYm91dCB0aGlydHkgcGVyY2VudCBsZXNzCisgICAgICAgIHRpbWUgYXMgY29tcGFyZWQgdG8gdXNpbmcgUlBNIHRvIGJ1aWxkIHRoZSBzYW1lIG9yIHNpbWlsYXIgcGFja2FnZS4KKyAgICAgICAgVGhpcyBjb21wYXJpc29uIHRha2VzIGludG8gYWNjb3VudCBhIGNvbXBsZXRlIGJ1aWxkIG9mIHRoZSBwYWNrYWdlIHdpdGgKKyAgICAgICAgYWxsIGRlcGVuZGVuY2llcyBwcmV2aW91c2x5IGJ1aWx0LgorICAgICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGRpc2NyZXBhbmN5IGlzIGJlY2F1c2UgdGhlIFJQTSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgY3JlYXRlcyBhbmQgcHJvY2Vzc2VzIG1vcmUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gdGhhbiB0aGUKKyAgICAgICAgSVBLIHBhY2thZ2UgbWFuYWdlci4KKyAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgbWlnaHQgY29uc2lkZXIgc2V0dGluZworICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT4gdG8gInBhY2thZ2VfaXBrIiBpZiB5b3UgYXJlCisgICAgICAgIGJ1aWxkaW5nIHNtYWxsZXIgc3lzdGVtcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQmVmb3JlIG1ha2luZyB5b3VyIHBhY2thZ2UgbWFuYWdlciBkZWNpc2lvbiwgaG93ZXZlciwgeW91IHNob3VsZAorICAgICAgICBjb25zaWRlciBzb21lIGZ1cnRoZXIgdGhpbmdzIGFib3V0IHVzaW5nIFJQTToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBSUE0gc3RhcnRzIHRvIHByb3ZpZGUgbW9yZSBhYmlsaXRpZXMgdGhhbiBJUEsgZHVlIHRvCisgICAgICAgICAgICAgICAgdGhlIGZhY3QgdGhhdCBpdCBwcm9jZXNzZXMgbW9yZSBNZXRhZGF0YS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlcyBpbmRpdmlkdWFsIGZpbGUgdHlwZXMsCisgICAgICAgICAgICAgICAgZmlsZSBjaGVja3N1bSBnZW5lcmF0aW9uIGFuZCBldmFsdWF0aW9uIG9uIGluc3RhbGwsIHNwYXJzZSBmaWxlCisgICAgICAgICAgICAgICAgc3VwcG9ydCwgY29uZmxpY3QgZGV0ZWN0aW9uIGFuZCByZXNvbHV0aW9uIGZvciBNdWx0aWxpYiBzeXN0ZW1zLAorICAgICAgICAgICAgICAgIEFDSUQgc3R5bGUgdXBncmFkZSwgYW5kIHJlcGFja2FnaW5nIGFiaWxpdGllcyBmb3Igcm9sbGJhY2tzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIEZvciBzbWFsbGVyIHN5c3RlbXMsIHRoZSBleHRyYSBzcGFjZSB1c2VkIGZvciB0aGUgQmVya2VsZXkKKyAgICAgICAgICAgICAgICBEYXRhYmFzZSBhbmQgdGhlIGFtb3VudCBvZiBtZXRhZGF0YSB3aGVuIHVzaW5nIFJQTSBjYW4gYWZmZWN0CisgICAgICAgICAgICAgICAgeW91ciBhYmlsaXR5IHRvIHBlcmZvcm0gb24tZGV2aWNlIHVwZ3JhZGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBmaW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlIGVmZmVjdHMgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgY2xhc3MgYXQgdGhlc2UgdHdvIFlvY3RvIFByb2plY3QgbWFpbGluZyBsaXN0IGxpbmtzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2Mi5odG1sJz4KKyAgICAgICAgICAgICAgICBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvMjAxMS1NYXkvMDA2MzYyLmh0bWw8L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L3BpcGVybWFpbC9wb2t5LzIwMTEtTWF5LzAwNjM2My5odG1sJz4KKyAgICAgICAgICAgICAgICBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvMjAxMS1NYXkvMDA2MzYzLmh0bWw8L3VsaW5rPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2RlYic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlX2RlYi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBjcmVhdGluZyBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgRGViaWFuCisgICAgICAgIChpLmUuIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4pIGZpbGUgZm9ybWF0LgorICAgICAgICBUaGUgY2xhc3MgZW5zdXJlcyB0aGUgcGFja2FnZXMgYXJlIHdyaXR0ZW4gb3V0IGluIGEKKyAgICAgICAgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBmaWxlIGZvcm1hdCB0byB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9ERUInPjxmaWxlbmFtZT5ERVBMT1lfRElSX0RFQjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgZGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9pcGsnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZV9pcGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY3JlYXRpbmcgcGFja2FnZXMgdGhhdCB1c2UgdGhlIElQSworICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+KSBmaWxlIGZvcm1hdC4KKyAgICAgICAgVGhlIGNsYXNzIGVuc3VyZXMgdGhlIHBhY2thZ2VzIGFyZSB3cml0dGVuIG91dCBpbiBhCisgICAgICAgIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gZmlsZSBmb3JtYXQgdG8gdGhlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSVBLJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9JUEs8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgIGRpcmVjdG9yeS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYW5kIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfcnBtJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2VfcnBtLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wYWNrYWdlX3JwbTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNyZWF0aW5nIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBSUE0KKyAgICAgICAgKGkuZS4gPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPikgZmlsZSBmb3JtYXQuCisgICAgICAgIFRoZSBjbGFzcyBlbnN1cmVzIHRoZSBwYWNrYWdlcyBhcmUgd3JpdHRlbiBvdXQgaW4gYQorICAgICAgICA8ZmlsZW5hbWU+LnJwbTwvZmlsZW5hbWU+IGZpbGUgZm9ybWF0IHRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1JQTSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfUlBNPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFuZCBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlX3Rhci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBjcmVhdGluZyB0YXJiYWxscy4KKyAgICAgICAgVGhlIGNsYXNzIGVuc3VyZXMgdGhlIHBhY2thZ2VzIGFyZSB3cml0dGVuIG91dCBpbiBhCisgICAgICAgIHRhcmJhbGwgZm9ybWF0IHRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1RBUic+PGZpbGVuYW1lPkRFUExPWV9ESVJfVEFSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICBkaXJlY3RvcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGFuZCBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBZb3UgY2Fubm90IHNwZWNpZnkgdGhlIDxmaWxlbmFtZT5wYWNrYWdlX3RhcjwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICBmaXJzdCB1c2luZyB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgWW91IG11c3QgdXNlIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+LCBvciA8ZmlsZW5hbWU+LnJwbTwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgIGZvcm1hdHMgZm9yIHlvdXIgaW1hZ2Ugb3IgU0RLLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZWRhdGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGFja2FnZWRhdGEuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhY2thZ2VkYXRhPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMKKyAgICAgICAgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHJlYWRpbmcgPGZpbGVuYW1lPnBrZ2RhdGE8L2ZpbGVuYW1lPiBmaWxlcworICAgICAgICBmb3VuZCBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHREFUQV9ESVInPjxmaWxlbmFtZT5QS0dEQVRBX0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgVGhlc2UgZmlsZXMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG91dHB1dCBwYWNrYWdlIHByb2R1Y2VkIGJ5CisgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGFja2FnZWdyb3VwJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBhY2thZ2Vncm91cC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwPC9maWxlbmFtZT4gY2xhc3Mgc2V0cyBkZWZhdWx0IHZhbHVlcworICAgICAgICBhcHByb3ByaWF0ZSBmb3IgcGFja2FnZSBncm91cCByZWNpcGVzIChlLmcuCisgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSCc+UEFDS0FHRV9BUkNIPC9saW5rPjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUFMTE9XX0VNUFRZJz5BTExPV19FTVBUWTwvbGluaz48L2ZpbGVuYW1lPiwKKyAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgYWxsIHBhY2thZ2UgZ3JvdXAgcmVjaXBlcyBpbmhlcml0IHRoaXMgY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgY2xhc3MsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtY3VzdG9tdGFza3MnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gUGFja2FnZSBHcm91cHM8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFByZXZpb3VzbHksIHRoaXMgY2xhc3Mgd2FzIGNhbGxlZCB0aGUgPGZpbGVuYW1lPnRhc2s8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wYWNrYWdlaW5mbyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wYWNrYWdlaW5mby5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZWluZm88L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBnaXZlcyBhIEJpdEJha2UgdXNlciBpbnRlcmZhY2UgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24KKyAgICAgICAgYWJvdXQgb3V0cHV0IHBhY2thZ2VzIGZyb20gdGhlIDxmaWxlbmFtZT5wa2dkYXRhPC9maWxlbmFtZT4gZmlsZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19IT01FX1VSTDsvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2hvYic+SG9iPC91bGluaz4KKyAgICAgICAgdXNlciBpbnRlcmZhY2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGF0Y2gnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGF0Y2guYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBhdGNoPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIGFwcGx5aW5nIHBhdGNoZXMgZHVyaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGF0Y2gnPjxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNsYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGluaGVyaXRlZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmFzZSc+PGZpbGVuYW1lPmJhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGVybG5hdGl2ZSc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wZXJsbmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBpbmhlcml0ZWQgYnkgYSByZWNpcGUsIHRoZSA8ZmlsZW5hbWU+cGVybG5hdGl2ZTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHN1cHBvcnRzIHVzaW5nIHRoZSBuYXRpdmUgdmVyc2lvbiBvZiBQZXJsIGJ1aWx0IGJ5IHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIHZlcnNpb24gcHJvdmlkZWQgYnkgdGhlIGJ1aWxkIGhvc3QuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcGl4YnVmY2FjaGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cGl4YnVmY2FjaGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBpeGJ1ZmNhY2hlPC9maWxlbmFtZT4gY2xhc3MgZ2VuZXJhdGVzIHRoZSBwcm9wZXIKKyAgICAgICAgcG9zdC1pbnN0YWxsIGFuZCBwb3N0LXJlbW92ZSAocG9zdGluc3QvcG9zdHJtKSBzY3JpcHRsZXRzIGZvciBwYWNrYWdlcworICAgICAgICB0aGF0IGluc3RhbGwgcGl4YnVmIGxvYWRlcnMsIHdoaWNoIGFyZSB1c2VkIHdpdGgKKyAgICAgICAgPGZpbGVuYW1lPmdkay1waXhidWY8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlc2Ugc2NyaXB0bGV0cyBjYWxsIDxmaWxlbmFtZT51cGRhdGVfcGl4YnVmX2NhY2hlPC9maWxlbmFtZT4KKyAgICAgICAgdG8gYWRkIHRoZSBwaXhidWYgbG9hZGVycyB0byB0aGUgY2FjaGUuCisgICAgICAgIFNpbmNlIHRoZSBjYWNoZSBmaWxlcyBhcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLAorICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlX3BpeGJ1Zl9jYWNoZTwvZmlsZW5hbWU+IGlzIHJ1biB1c2luZyBRRU1VIGlmIHRoZQorICAgICAgICBwb3N0aW5zdCBzY3JpcHRsZXRzIG5lZWQgdG8gYmUgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBpbWFnZQorICAgICAgICBjcmVhdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgdGhlIHBpeGJ1ZiBsb2FkZXJzIGJlaW5nIGluc3RhbGxlZCBhcmUgaW4gcGFja2FnZXMgb3RoZXIKKyAgICAgICAgdGhhbiB0aGUgcmVjaXBlJ3MgbWFpbiBwYWNrYWdlLCBzZXQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBJWEJVRl9QQUNLQUdFUyc+PGZpbGVuYW1lPlBJWEJVRl9QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyBjb250YWluaW5nIHRoZSBsb2FkZXJzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBrZ2NvbmZpZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wa2djb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBnZXQKKyAgICAgICAgaGVhZGVyIGFuZCBsaWJyYXJ5IGluZm9ybWF0aW9uLgorICAgICAgICBUaGlzIGNsYXNzIGFpbXMgdG8gc21vb3RoIGludGVncmF0aW9uIG9mCisgICAgICAgIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaW50byBsaWJyYXJpZXMgdGhhdCB1c2UgaXQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIER1cmluZyBzdGFnaW5nLCBCaXRCYWtlIGluc3RhbGxzIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gZGF0YSBpbnRvIHRoZQorICAgICAgICA8ZmlsZW5hbWU+c3lzcm9vdHMvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICBCeSBtYWtpbmcgdXNlIG9mIHN5c3Jvb3QgZnVuY3Rpb25hbGl0eSB3aXRoaW4gPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiwKKyAgICAgICAgdGhpcyBjbGFzcyBubyBsb25nZXIgaGFzIHRvIG1hbmlwdWxhdGUgdGhlIGZpbGVzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkayc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBvcHVsYXRlX3NkazwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yCisgICAgICAgIFNESy1vbmx5IHJlY2lwZXMuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZHZhbnRhZ2VzIGdhaW5lZCB3aGVuIGJ1aWxkaW5nIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgdG9vbGNoYWluIHVzaW5nIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcG9wdWxhdGVfc2RrJz48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfc2RrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2ssIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I29wdGlvbmFsbHktYnVpbGRpbmctYS10b29sY2hhaW4taW5zdGFsbGVyJz5PcHRpb25hbGx5IEJ1aWxkaW5nIGEgVG9vbGNoYWluIEluc3RhbGxlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka18qLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfKjwvZmlsZW5hbWU+IGNsYXNzZXMgc3VwcG9ydCBTREsgY3JlYXRpb24KKyAgICAgICAgYW5kIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFRoZSBiYXNlIGNsYXNzIHN1cHBvcnRpbmcgU0RLIGNyZWF0aW9uIHVuZGVyIGFsbCBwYWNrYWdlCisgICAgICAgICAgICAgICAgbWFuYWdlcnMgKGkuZS4gREVCLCBSUE0sIGFuZCBvcGtnKS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19kZWI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFN1cHBvcnRzIGNyZWF0aW9uIG9mIHRoZSBTREsgZ2l2ZW4gdGhlIERlYmlhbiBwYWNrYWdlIG1hbmFnZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfcnBtPC9maWxlbmFtZT46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBTdXBwb3J0cyBjcmVhdGlvbiBvZiB0aGUgU0RLIGdpdmVuIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2lwazwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgY3JlYXRpb24gb2YgdGhlIFNESyBnaXZlbiB0aGUgb3BrZyAoSVBLIGZvcm1hdCkKKyAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4gY2xhc3MgaW5oZXJpdHMgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfKjwvZmlsZW5hbWU+IChpLmUuCisgICAgICAgIDxmaWxlbmFtZT5kZWI8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPnJwbTwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgPGZpbGVuYW1lPmlwazwvZmlsZW5hbWU+KSBiYXNlZCBvbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUEtHVFlQRSc+PGZpbGVuYW1lPklNQUdFX1BLR1RZUEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBiYXNlIGNsYXNzIGVuc3VyZXMgYWxsIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMgYXJlCisgICAgICAgIGVzdGFibGlzaGVkIGFuZCB0aGVuIHBvcHVsYXRlcyB0aGUgU0RLLgorICAgICAgICBBZnRlciBwb3B1bGF0aW5nIHRoZSBTREssIHRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPgorICAgICAgICBjbGFzcyBjb25zdHJ1Y3RzIHR3byBzeXNyb290czoKKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0RLX0FSQ0gnPjxmaWxlbmFtZT5TREtfQVJDSDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59LW5hdGl2ZXNkazwvZmlsZW5hbWU+LAorICAgICAgICB3aGljaCBjb250YWlucyB0aGUgY3Jvc3MtY29tcGlsZXIgYW5kIGFzc29jaWF0ZWQgdG9vbGluZywgYW5kIHRoZQorICAgICAgICB0YXJnZXQsIHdoaWNoIGNvbnRhaW5zIGEgdGFyZ2V0IHJvb3QgZmlsZXN5c3RlbSB0aGF0IGlzIGNvbmZpZ3VyZWQgZm9yCisgICAgICAgIHRoZSBTREsgdXNhZ2UuCisgICAgICAgIFRoZXNlIHR3byBpbWFnZXMgcmVzaWRlIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfT1VUUFVUJz48ZmlsZW5hbWU+U0RLX09VVFBVVDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgd2hpY2ggY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1NES19PVVRQVVR9LyR7U0RLX0FSQ0h9PHJlcGxhY2VhYmxlPi1uYXRpdmVzZGstcGtnczwvcmVwbGFjZWFibGU+CisgICAgICR7U0RLX09VVFBVVH0vJHtTREtUQVJHRVRTWVNST09UfS88cmVwbGFjZWFibGU+dGFyZ2V0LXBrZ3M8L3JlcGxhY2VhYmxlPgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZpbmFsbHksIHRoZSBiYXNlIHBvcHVsYXRlIFNESyBjbGFzcyBjcmVhdGVzIHRoZSB0b29sY2hhaW4KKyAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LCB0aGUgdGFyYmFsbCBvZiB0aGUgU0RLLCBhbmQgdGhlIGluc3RhbGxlci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlc3BlY3RpdmUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19kZWI8L2ZpbGVuYW1lPiwKKyAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19ycG08L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgIDxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfaXBrPC9maWxlbmFtZT4gY2xhc3NlcyBlYWNoIHN1cHBvcnQgdGhlCisgICAgICAgIHNwZWNpZmljIHR5cGUgb2YgU0RLLgorICAgICAgICBUaGVzZSBjbGFzc2VzIGFyZSBpbmhlcml0ZWQgYnkgYW5kIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4KKyAgICAgICAgZ2VuZXJhdGlvbiwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWluLWdlbmVyYXRpb24nPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkdmFudGFnZXMgZ2FpbmVkIHdoZW4gYnVpbGRpbmcgYQorICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zZGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdGFzaywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHJleHBvcnQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHJleHBvcnQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnByZXhwb3J0PC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IKKyAgICAgICAgZXhwb3J0aW5nCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IHZhbHVlcy4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgICAgICAgICAgUmF0aGVyLCBpdCBpcyBlbmFibGVkIHdoZW4gdXNpbmcKKyAgICAgICAgICAgICI8ZmlsZW5hbWU+Yml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQ8L2ZpbGVuYW1lPiIuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1wcmltcG9ydCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wcmltcG9ydC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cHJpbXBvcnQ8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvcgorICAgICAgICBpbXBvcnRpbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4gdmFsdWVzLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgICAgICAgICBSYXRoZXIsIGl0IGlzIGVuYWJsZWQgd2hlbiB1c2luZworICAgICAgICAgICAgIjxmaWxlbmFtZT5iaXRiYWtlLXByc2Vydi10b29sIGltcG9ydDwvZmlsZW5hbWU+Ii4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXByc2Vydic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5wcnNlcnYuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnByc2VydjwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIHVzaW5nIGEKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+UFIgc2VydmljZTwvdWxpbms+CisgICAgICAgIGluIG9yZGVyIHRvIGF1dG9tYXRpY2FsbHkgbWFuYWdlIHRoZSBpbmNyZW1lbnRpbmcgb2YgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlIGZvcgorICAgICAgICBlYWNoIHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgICAgICBIb3dldmVyLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aWxsIG5vdCBlbmFibGUgdGhlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjbGFzcyB1bmxlc3MKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSU0VSVl9IT1NUJz48ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgaGFzIGJlZW4gc2V0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXB0ZXN0Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnB0ZXN0LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5wdGVzdDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yCisgICAgICAgIHBhY2thZ2luZyBhbmQgaW5zdGFsbGluZyBydW50aW1lIHRlc3RzIGZvciByZWNpcGVzIHRoYXQgYnVpbGQgc29mdHdhcmUKKyAgICAgICAgdGhhdCBwcm92aWRlcyB0aGVzZSB0ZXN0cy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBpbmhlcml0ZWQgYnkgaW5kaXZpZHVhbCByZWNpcGVzLgorICAgICAgICBIb3dldmVyLCB0aGUgY2xhc3MnIGZ1bmN0aW9uYWxpdHkgaXMgbGFyZ2VseSBkaXNhYmxlZCB1bmxlc3MgInB0ZXN0IgorICAgICAgICBhcHBlYXJzIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgIG9uIHB0ZXN0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXB0ZXN0LWdub21lJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnB0ZXN0LWdub21lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBwYWNrYWdlIHRlc3RzIChwdGVzdHMpIHNwZWNpZmljYWxseSBmb3IgR05PTUUgcGFja2FnZXMsCisgICAgICAgIHdoaWNoIGhhdmUgdGVzdHMgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aAorICAgICAgICA8ZmlsZW5hbWU+Z25vbWUtZGVza3RvcC10ZXN0aW5nPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGFuZCBydW5uaW5nIHB0ZXN0cywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5UZXN0aW5nIFBhY2thZ2VzIFdpdGggcHRlc3Q8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcHl0aG9uLWRpcic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5weXRob24tZGlyLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5weXRob24tZGlyPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgdGhlIGJhc2UgdmVyc2lvbiwKKyAgICAgICAgbG9jYXRpb24sIGFuZCBzaXRlIHBhY2thZ2UgbG9jYXRpb24gZm9yIFB5dGhvbi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1weXRob25uYXRpdmUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cHl0aG9ubmF0aXZlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBpbmhlcml0ZWQgYnkgYSByZWNpcGUsIHRoZSA8ZmlsZW5hbWU+cHl0aG9ubmF0aXZlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgc3VwcG9ydHMgdXNpbmcgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIFB5dGhvbiBidWlsdCBieSB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSB2ZXJzaW9uIHByb3ZpZGVkIGJ5IHRoZSBidWlsZCBob3N0LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXFlbXUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cWVtdS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cWVtdTwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIHJlY2lwZXMKKyAgICAgICAgdGhhdCBlaXRoZXIgbmVlZCBRRU1VIG9yIHRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgUUVNVS4KKyAgICAgICAgVHlwaWNhbGx5LCB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gcnVuIHByb2dyYW1zIGZvciBhIHRhcmdldCBzeXN0ZW0gb24KKyAgICAgICAgdGhlIGJ1aWxkIGhvc3QgdXNpbmcgUUVNVSdzIGFwcGxpY2F0aW9uIGVtdWxhdGlvbiBtb2RlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXFtYWtlKic+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5xbWFrZSouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnFtYWtlKjwvZmlsZW5hbWU+IGNsYXNzZXMgc3VwcG9ydCByZWNpcGVzIHRoYXQKKyAgICAgICAgbmVlZCB0byBidWlsZCBzb2Z0d2FyZSB0aGF0IHVzZXMgUXQncyA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPgorICAgICAgICBidWlsZCBzeXN0ZW0gYW5kIGFyZSBjb21wcmlzZWQgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnFtYWtlX2Jhc2U8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGJhc2UgZnVuY3Rpb25hbGl0eSBmb3IgYWxsIHZlcnNpb25zIG9mCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFtYWtlPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5xbWFrZTI8L2ZpbGVuYW1lPjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEV4dGVuZHMgYmFzZSBmdW5jdGlvbmFsaXR5IGZvciA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPiAyLnggYXMKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IFF0IDQueC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBuZWVkIHRvIHNldCBhbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3IgcGFzcyBhbnkgb3B0aW9ucyB0bworICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPiwgeW91IGNhbiBhZGQgdGhlc2UgdG8gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9RTUFLRVZBUlNfUFJFJz48ZmlsZW5hbWU+RVhUUkFfUU1BS0VWQVJTX1BSRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBvcgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BPU1QnPjxmaWxlbmFtZT5FWFRSQV9RTUFLRVZBUlNfUE9TVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBiZWZvcmUgb3IKKyAgICAgICAgYWZ0ZXIgdGhlIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUsCisgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgQnkgZGVmYXVsdCwgYWxsIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZXMgYXJlIGJ1aWx0LgorICAgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHlvdXIgb3duIHN1YnNldCBvZiA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+CisgICAgICAgIGZpbGVzIHRvIGJlIGJ1aWx0LCBzcGVjaWZ5IHRoZW0gaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1RTUFLRV9QUk9GSUxFUyc+PGZpbGVuYW1lPlFNQUtFX1BST0ZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXF0NConPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cXQ0Ki5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+cXQ0KjwvZmlsZW5hbWU+IGNsYXNzZXMgc3VwcG9ydCByZWNpcGVzIHRoYXQgbmVlZCB0bworICAgICAgICBidWlsZCBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIFF0IGRldmVsb3BtZW50IGZyYW1ld29yayB2ZXJzaW9uIDQueAorICAgICAgICBhbmQgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cXQ0ZTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgYnVpbGRpbmcgYWdhaW5zdCBRdC9FbWJlZGRlZCwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciBmb3IgZ3JhcGhpY2FsIG91dHB1dC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnF0NHgxMTwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgU3VwcG9ydHMgYnVpbGRpbmcgYWdhaW5zdCBRdC9YMTEuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3NlcyBpbmhlcml0IHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1xbWFrZSonPjxmaWxlbmFtZT5xbWFrZTI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtcmVsb2NhdGFibGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cmVsb2NhdGFibGUuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnJlbG9jYXRhYmxlPC9maWxlbmFtZT4gY2xhc3MgZW5hYmxlcyByZWxvY2F0aW9uIG9mCisgICAgICAgIGJpbmFyaWVzIHdoZW4gdGhleSBhcmUgaW5zdGFsbGVkIGludG8gdGhlIHN5c3Jvb3QuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgbWFrZXMgdXNlIG9mIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jaHJwYXRoJz48ZmlsZW5hbWU+Y2hycGF0aDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbmQgaXMgdXNlZCBieSBib3RoIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jcm9zcyc+PGZpbGVuYW1lPmNyb3NzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGFuZAorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1uYXRpdmUnPjxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3Nlcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1yZXBvcnQtZXJyb3InPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+cmVwb3J0LWVycm9yLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5yZXBvcnQtZXJyb3I8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBlbmFibGluZyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctdGhlLWVycm9yLXJlcG9ydGluZy10b29sJz5lcnJvciByZXBvcnRpbmcgdG9vbDwvdWxpbms+LAorICAgICAgICB3aGljaCBhbGxvd3MgeW91IHRvIHN1Ym1pdCBidWlsZCBlcnJvciBpbmZvcm1hdGlvbiB0byBhIGNlbnRyYWwKKyAgICAgICAgZGF0YWJhc2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBjbGFzcyBjb2xsZWN0cyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgcmVjaXBlLCByZWNpcGUgdmVyc2lvbiwgdGFzaywKKyAgICAgICAgbWFjaGluZSwgZGlzdHJvLCBidWlsZCBzeXN0ZW0sIHRhcmdldCBzeXN0ZW0sIGhvc3QgZGlzdHJvLCBicmFuY2gsCisgICAgICAgIGNvbW1pdCwgYW5kIGxvZy4KKyAgICAgICAgRnJvbSB0aGUgaW5mb3JtYXRpb24sIHJlcG9ydCBmaWxlcyB1c2luZyBhIEpTT04gZm9ybWF0IGFyZSBjcmVhdGVkIGFuZAorICAgICAgICBzdG9yZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTE9HX0RJUic+PGZpbGVuYW1lPkxPR19ESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9lcnJvci1yZXBvcnQ8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJtX3dvcmsuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBkZWxldGlvbiBvZiB0ZW1wb3JhcnkKKyAgICAgICAgd29ya3NwYWNlLCB3aGljaCBjYW4gZWFzZSB5b3VyIGhhcmQgZHJpdmUgZGVtYW5kcyBkdXJpbmcgYnVpbGRzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjYW4gdXNlIGEgc3Vic3RhbnRpYWwgYW1vdW50IG9mIGRpc2sKKyAgICAgICAgc3BhY2UgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLgorICAgICAgICBBIHBvcnRpb24gb2YgdGhpcyBzcGFjZSBpcyB0aGUgd29yayBmaWxlcyB1bmRlciB0aGUKKyAgICAgICAgPGZpbGVuYW1lPiR7VE1QRElSfS93b3JrPC9maWxlbmFtZT4gZGlyZWN0b3J5IGZvciBlYWNoIHJlY2lwZS4KKyAgICAgICAgT25jZSB0aGUgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyB0aGUgcGFja2FnZXMgZm9yIGEgcmVjaXBlLCB0aGUgd29yaworICAgICAgICBmaWxlcyBmb3IgdGhhdCByZWNpcGUgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIEhvd2V2ZXIsIGJ5IGRlZmF1bHQsIHRoZSBidWlsZCBzeXN0ZW0gcHJlc2VydmVzIHRoZXNlIGZpbGVzCisgICAgICAgIGZvciBpbnNwZWN0aW9uIGFuZCBwb3NzaWJsZSBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICAgIElmIHlvdSB3b3VsZCByYXRoZXIgaGF2ZSB0aGVzZSBmaWxlcyBkZWxldGVkIHRvIHNhdmUgZGlzayBzcGFjZQorICAgICAgICBhcyB0aGUgYnVpbGQgcHJvZ3Jlc3NlcywgeW91IGNhbiBlbmFibGUgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPgorICAgICAgICBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgd2hpY2ggaXMgZm91bmQgaW4gdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBJTkhFUklUICs9ICJybV93b3JrIgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIElmIHlvdSBhcmUgbW9kaWZ5aW5nIGFuZCBidWlsZGluZyBzb3VyY2UgY29kZSBvdXQgb2YgdGhlIHdvcmsgZGlyZWN0b3J5CisgICAgICAgIGZvciBhIHJlY2lwZSwgZW5hYmxpbmcgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiB3aWxsIHBvdGVudGlhbGx5CisgICAgICAgIHJlc3VsdCBpbiB5b3VyIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBiZWluZyBsb3N0LgorICAgICAgICBUbyBleGNsdWRlIHNvbWUgcmVjaXBlcyBmcm9tIGhhdmluZyB0aGVpciB3b3JrIGRpcmVjdG9yaWVzIGRlbGV0ZWQgYnkKKyAgICAgICAgPGZpbGVuYW1lPnJtX3dvcms8L2ZpbGVuYW1lPiwgeW91IGNhbiBhZGQgdGhlIG5hbWVzIG9mIHRoZSByZWNpcGUgb3IKKyAgICAgICAgcmVjaXBlcyB5b3UgYXJlIHdvcmtpbmcgb24gdG8gdGhlIDxmaWxlbmFtZT5STV9XT1JLX0VYQ0xVREU8L2ZpbGVuYW1lPgorICAgICAgICB2YXJpYWJsZSwgd2hpY2ggY2FuIGFsc28gYmUgc2V0IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICBmaWxlLgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICBSTV9XT1JLX0VYQ0xVREUgKz0gImJ1c3lib3ggZ2xpYmMiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1yb290ZnMqJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnJvb3RmcyouYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnJvb3Rmcyo8L2ZpbGVuYW1lPiBjbGFzc2VzIHN1cHBvcnQgY3JlYXRpbmcKKyAgICAgICAgdGhlIHJvb3QgZmlsZXN5c3RlbSBmb3IgYW4gaW1hZ2UgYW5kIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cm9vdGZzX2RlYjwvZmlsZW5hbWU+IGNsYXNzLCB3aGljaCBzdXBwb3J0cworICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHJvb3QgZmlsZXN5c3RlbXMgZm9yIGltYWdlcyBidWlsdCB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uZGViPC9maWxlbmFtZT4gcGFja2FnZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5yb290ZnNfcnBtPC9maWxlbmFtZT4gY2xhc3MsIHdoaWNoIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgY3JlYXRpb24gb2Ygcm9vdCBmaWxlc3lzdGVtcyBmb3IgaW1hZ2VzIGJ1aWx0IHVzaW5nCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBwYWNrYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnJvb3Rmc19pcGs8L2ZpbGVuYW1lPiBjbGFzcywgd2hpY2ggc3VwcG9ydHMKKyAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiByb290IGZpbGVzeXN0ZW1zIGZvciBpbWFnZXMgYnVpbHQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmlwazwvZmlsZW5hbWU+IHBhY2thZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjcmVhdGVkIGZyb20gcGFja2FnZXMgdXNpbmcgb25lIG9mIHRoZQorICAgICAgICA8ZmlsZW5hbWU+cm9vdGZzKi5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZXMgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIGFyZSBjcmVhdGVkLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+SW1hZ2UgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2FuaXR5Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNhbml0eS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2FuaXR5PC9maWxlbmFtZT4gY2xhc3MgY2hlY2tzIHRvIHNlZSBpZiBwcmVyZXF1aXNpdGUKKyAgICAgICAgc29mdHdhcmUgaXMgcHJlc2VudCBvbiB0aGUgaG9zdCBzeXN0ZW0gc28gdGhhdCB1c2VycyBjYW4gYmUgbm90aWZpZWQKKyAgICAgICAgb2YgcG90ZW50aWFsIHByb2JsZW1zIHRoYXQgbWlnaHQgYWZmZWN0IHRoZWlyIGJ1aWxkLgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBwZXJmb3JtcyBiYXNpYyB1c2VyIGNvbmZpZ3VyYXRpb24gY2hlY2tzIGZyb20KKyAgICAgICAgdGhlIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIHRvCisgICAgICAgIHByZXZlbnQgY29tbW9uIG1pc3Rha2VzIHRoYXQgY2F1c2UgYnVpbGQgZmFpbHVyZXMuCisgICAgICAgIERpc3RyaWJ1dGlvbiBwb2xpY3kgdXN1YWxseSBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNjb25zJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNjb25zLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zY29uczwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvCisgICAgICAgIGJ1aWxkIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgU0NvbnMgYnVpbGQgc3lzdGVtLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FU0NPTlMnPjxmaWxlbmFtZT5FWFRSQV9PRVNDT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcworICAgICAgICBTQ29ucyBjb21tYW5kIGxpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2RsJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNkbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2RsPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IG5lZWQgdG8gYnVpbGQKKyAgICAgICAgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgKFNETCkgbGlicmFyeS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNldHVwdG9vbHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNldHVwdG9vbHM8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBQeXRob24KKyAgICAgICAgdmVyc2lvbiAyLnggZXh0ZW5zaW9ucyB0aGF0IHVzZSBidWlsZCBzeXN0ZW1zIGJhc2VkIG9uCisgICAgICAgIDxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT4uCisgICAgICAgIElmIHlvdXIgcmVjaXBlIHVzZXMgdGhlc2UgYnVpbGQgc3lzdGVtcywgdGhlIHJlY2lwZSBuZWVkcyB0bworICAgICAgICBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+IGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNldHVwdG9vbHMzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIFB5dGhvbgorICAgICAgICB2ZXJzaW9uIDMueCBleHRlbnNpb25zIHRoYXQgdXNlIGJ1aWxkIHN5c3RlbXMgYmFzZWQgb24KKyAgICAgICAgPGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT4uCisgICAgICAgIElmIHlvdXIgcmVjaXBlIHVzZXMgdGhlc2UgYnVpbGQgc3lzdGVtcywgdGhlIHJlY2lwZSBuZWVkcyB0bworICAgICAgICBpbmhlcml0IHRoZSA8ZmlsZW5hbWU+c2V0dXB0b29sczM8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zaXAnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c2lwLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zaXA8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICBzdXBwb3J0cyByZWNpcGVzIHRoYXQgYnVpbGQgb3IgcGFja2FnZSBTSVAtYmFzZWQgUHl0aG9uIGJpbmRpbmdzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXNpdGVjb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c2l0ZWNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c2l0ZWNvbmZpZzwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIGhhbmRsaW5nIHNpdGUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgVGhlIGNsYXNzIGlzIHVzZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWF1dG90b29scyc+PGZpbGVuYW1lPmF1dG90b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyB0byBhY2NlbGVyYXRlIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2suCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc2l0ZWluZm8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c2l0ZWluZm8uYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNpdGVpbmZvPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgdGhlIHRhcmdldHMgdGhhdCBtaWdodCBiZSBuZWVkZWQgYnkgb3RoZXIgY2xhc3NlcyBvciByZWNpcGVzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciBBdXRvdG9vbHMsIHdoaWNoIGNhbiByZXF1aXJlIHRlc3RzIHRoYXQgbXVzdAorICAgICAgICBleGVjdXRlIG9uIHRoZSB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgIFNpbmNlIHRoaXMgaXMgbm90IHBvc3NpYmxlIGluIGdlbmVyYWwgd2hlbiBjcm9zcyBjb21waWxpbmcsIHNpdGUKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBwcm92aWRlIGNhY2hlZCB0ZXN0IHJlc3VsdHMgc28gdGhlc2UgdGVzdHMgY2FuCisgICAgICAgIGJlIHNraXBwZWQgb3ZlciBidXQgc3RpbGwgbWFrZSB0aGUgY29ycmVjdCB2YWx1ZXMgYXZhaWxhYmxlLgorICAgICAgICBUaGUKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZXRhLXNpdGUnPm1ldGEvc2l0ZSBkaXJlY3Rvcnk8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgY29udGFpbnMgdGVzdCByZXN1bHRzIHNvcnRlZCBpbnRvIGRpZmZlcmVudCBjYXRlZ29yaWVzIHN1Y2ggYXMKKyAgICAgICAgYXJjaGl0ZWN0dXJlLCBlbmRpYW5uZXNzLCBhbmQgdGhlIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4gdXNlZC4KKyAgICAgICAgU2l0ZSBpbmZvcm1hdGlvbiBwcm92aWRlcyBhIGxpc3Qgb2YgZmlsZXMgY29udGFpbmluZyBkYXRhIHJlbGV2YW50IHRvCisgICAgICAgIHRoZSBjdXJyZW50IGJ1aWxkIGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUNPTkZJR19TSVRFJz5DT05GSUdfU0lURTwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICB0aGF0IEF1dG90b29scyBhdXRvbWF0aWNhbGx5IHBpY2tzIHVwLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3MgYWxzbyBwcm92aWRlcyB2YXJpYWJsZXMgbGlrZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNJVEVJTkZPX0VORElBTk5FU1MnPlNJVEVJTkZPX0VORElBTk5FU1M8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgYW5kIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU0lURUlORk9fQklUUyc+U0lURUlORk9fQklUUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICB0aGF0IGNhbiBiZSB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgbWV0YWRhdGEuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJlY2F1c2UgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+IGNsYXNzCisgICAgICAgIGluY2x1ZGVzIHRoZSA8ZmlsZW5hbWU+c2l0ZWluZm88L2ZpbGVuYW1lPiBjbGFzcywgaXQgaXMgYWx3YXlzIGFjdGl2ZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zcGR4Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnNwZHguYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnNwZHg8L2ZpbGVuYW1lPiBjbGFzcyBpbnRlZ3JhdGVzIHJlYWwtdGltZSBsaWNlbnNlCisgICAgICAgIHNjYW5uaW5nLCBnZW5lcmF0aW9uIG9mIFNQRFggc3RhbmRhcmQgb3V0cHV0LCBhbmQgdmVyaWZpY2F0aW9uCisgICAgICAgIG9mIGxpY2Vuc2UgaW5mb3JtYXRpb24gZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSBhdCB0aGUgcHJvdG90eXBlIHN0YWdlIGluIHRoZSAxLjYKKyAgICAgICAgICAgIHJlbGVhc2UuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy1zc3RhdGUnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c3N0YXRlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zc3RhdGU8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBTaGFyZWQKKyAgICAgICAgU3RhdGUgKHNzdGF0ZSkuCisgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjbGFzcyBpcyBlbmFibGVkIHRocm91Z2ggdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTkhFUklUX0RJU1RSTyc+PGZpbGVuYW1lPklOSEVSSVRfRElTVFJPPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3N0YXRlLCBzZWUgdGhlCisgICAgICAgICI8bGluayBsaW5rZW5kPSdzaGFyZWQtc3RhdGUtY2FjaGUnPlNoYXJlZCBTdGF0ZSBDYWNoZTwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtc3RhZ2luZyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT5zdGFnaW5nLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zdGFnaW5nPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc3RhZ2luZworICAgICAgICBmaWxlcyBpbnRvIHRoZSBzeXNyb290IGR1cmluZyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2suCisgICAgICAgIFRoZSBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnN5c2xpbnV4LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN5c2xpbnV4LXNwZWNpZmljCisgICAgICAgIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2xhc3Mgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUlOSVRSRCc+PGZpbGVuYW1lPklOSVRSRDwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzCisgICAgICAgICAgICAgICAgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJkKS4KKyAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG9wdGlvbmFsLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1ST09URlMnPjxmaWxlbmFtZT5ST09URlM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBvcHRpb25hbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQVVUT19TWVNMSU5VWE1FTlUnPjxmaWxlbmFtZT5BVVRPX1NZU0xJTlVYTUVOVTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICBFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IHdoZW4gc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItTEFCRUxTJz48ZmlsZW5hbWU+TEFCRUxTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIHRhcmdldHMgZm9yIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BUFBFTkQnPjxmaWxlbmFtZT5BUFBFTkQ8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgTGlzdHMgYXBwZW5kIHN0cmluZyBvdmVycmlkZXMgZm9yIGVhY2ggbGFiZWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX09QVFMnPjxmaWxlbmFtZT5TWVNMSU5VWF9PUFRTPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUuCisgICAgICAgICAgICAgICAgU2VtaWNvbG9uIGNoYXJhY3RlcnMgc2VwYXJhdGUgbXVsdGlwbGUgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU1lTTElOVVhfU1BMQVNIJz48ZmlsZW5hbWU+U1lTTElOVVhfU1BMQVNIPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIExpc3RzIGEgYmFja2dyb3VuZCBmb3IgdGhlIFZHQSBib290IG1lbnUgd2hlbiB5b3UgYXJlIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgIGJvb3QgbWVudS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItU1lTTElOVVhfREVGQVVMVF9DT05TT0xFJz48ZmlsZW5hbWU+U1lTTElOVVhfREVGQVVMVF9DT05TT0xFPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIFNldCB0byAiY29uc29sZT10dHlYIiB0byBjaGFuZ2Uga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNMSU5VWF9TRVJJQUwnPjxmaWxlbmFtZT5TWVNMSU5VWF9TRVJJQUw8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgU2V0cyBhbiBhbHRlcm5hdGUgc2VyaWFsIHBvcnQuCisgICAgICAgICAgICAgICAgT3IsIHR1cm5zIG9mZiBzZXJpYWwgd2hlbiB0aGUgdmFyaWFibGUgaXMgc2V0IHdpdGggYW4KKyAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLVNZU0xJTlVYX1NFUklBTF9UVFknPjxmaWxlbmFtZT5TWVNMSU5VWF9TRVJJQUxfVFRZPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgIFNldHMgYW4gYWx0ZXJuYXRlICJjb25zb2xlPXR0eS4uLiIga2VybmVsIGJvb3QgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+c3lzdGVtZC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+IGNsYXNzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHJlY2lwZXMKKyAgICAgICAgdGhhdCBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgY2xhc3MgaXMgZGlzYWJsZWQgdW5sZXNzIHlvdSBoYXZlICJzeXN0ZW1kIgorICAgICAgICBpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBVbmRlciB0aGlzIGNsYXNzLCB0aGUgcmVjaXBlIG9yIE1ha2VmaWxlIChpLmUuIHdoYXRldmVyIHRoZSByZWNpcGUgaXMKKyAgICAgICAgY2FsbGluZyBkdXJpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0YXNrKSBpbnN0YWxscyB1bml0IGZpbGVzIGludG8KKyAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW08L2ZpbGVuYW1lPi4KKyAgICAgICAgSWYgdGhlIHVuaXQgZmlsZXMgYmVpbmcgaW5zdGFsbGVkIGdvIGludG8gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgbWFpbiBwYWNrYWdlLCB5b3UgbmVlZCB0byBzZXQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNZU1RFTURfUEFDS0FHRVMnPjxmaWxlbmFtZT5TWVNURU1EX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGluIHlvdXIgcmVjaXBlIHRvIGlkZW50aWZ5IHRoZSBwYWNrYWdlcyBpbiB3aGljaCB0aGUgZmlsZXMgd2lsbCBiZQorICAgICAgICBpbnN0YWxsZWQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFlvdSBzaG91bGQgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX1NFUlZJQ0UnPjxmaWxlbmFtZT5TWVNURU1EX1NFUlZJQ0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdG8gdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgZmlsZS4KKyAgICAgICAgWW91IHNob3VsZCBhbHNvIHVzZSBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZSB0byBpbmRpY2F0ZSB0aGUgcGFja2FnZQorICAgICAgICB0byB3aGljaCB0aGUgdmFsdWUgYXBwbGllcy4KKyAgICAgICAgSWYgdGhlIHZhbHVlIGFwcGxpZXMgdG8gdGhlIHJlY2lwZSdzIG1haW4gcGFja2FnZSwgdXNlCisgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgY29ubm1hbiByZWNpcGU6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBTZXJ2aWNlcyBhcmUgc2V0IHVwIHRvIHN0YXJ0IG9uIGJvb3QgYXV0b21hdGljYWxseSB1bmxlc3MKKyAgICAgICAgeW91IGhhdmUgc2V0CisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TWVNURU1EX0FVVE9fRU5BQkxFJz48ZmlsZW5hbWU+U1lTVEVNRF9BVVRPX0VOQUJMRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB0byAiZGlzYWJsZSIuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NlbGVjdGluZy1hbi1pbml0aWFsaXphdGlvbi1tYW5hZ2VyJz5TZWxlY3RpbmcgYW4gSW5pdGlhbGl6YXRpb24gTWFuYWdlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXJtaW5hbCc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT50ZXJtaW5hbC5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dGVybWluYWw8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvciBzdGFydGluZworICAgICAgICBhIHRlcm1pbmFsIHNlc3Npb24uCisgICAgICAgIFRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT0VfVEVSTUlOQUwnPjxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSBjb250cm9scyB3aGljaCB0ZXJtaW5hbCBlbXVsYXRvciBpcyB1c2VkIGZvciB0aGUgc2Vzc2lvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT3RoZXIgY2xhc3NlcyB1c2UgdGhlIDxmaWxlbmFtZT50ZXJtaW5hbDwvZmlsZW5hbWU+IGNsYXNzIGFueXdoZXJlIGEKKyAgICAgICAgc2VwYXJhdGUgdGVybWluYWwgc2Vzc2lvbiBuZWVkcyB0byBiZSBzdGFydGVkLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhdGNoJz48ZmlsZW5hbWU+cGF0Y2g8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgYXNzdW1pbmcKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBVENIUkVTT0xWRSc+PGZpbGVuYW1lPlBBVENIUkVTT0xWRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBpcyBzZXQgdG8gInVzZXIiLCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY21sMSc+PGZpbGVuYW1lPmNtbDE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MsIGFuZCB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGV2c2hlbGwnPjxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcyBhbGwgdXNlIHRoZSA8ZmlsZW5hbWU+dGVybWluYWw8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGVzdGltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT50ZXN0aW1hZ2U8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyBydW5uaW5nIGF1dG9tYXRlZAorICAgICAgICB0ZXN0cyBhZ2FpbnN0IGltYWdlcyB1c2luZyBRRU1VIGFuZCBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgICAgIFRoZSBjbGFzcyBoYW5kbGVzIGxvYWRpbmcgdGhlIHRlc3RzIGFuZCBzdGFydGluZyB0aGUgaW1hZ2UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSB0aGUgY2xhc3MsIHlvdSBuZWVkIHRvIHBlcmZvcm0gc3RlcHMgdG8gc2V0IHVwIHRoZQorICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhlIHRlc3RzIGFyZSBjb21tYW5kcyB0aGF0IHJ1biBvbiB0aGUgdGFyZ2V0IHN5c3RlbSBvdmVyCisgICAgICAgIDxmaWxlbmFtZT5zc2g8L2ZpbGVuYW1lPi4KKyAgICAgICAgdGhleSBhcmUgd3JpdHRlbiBpbiBQeXRob24gYW5kIG1ha2UgdXNlIG9mIHRoZQorICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBtb2R1bGUuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZW5hYmxlLCBydW4sIGFuZCBjcmVhdGUgbmV3IHRlc3RzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXRleGluZm8nPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGV4aW5mby5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluaGVyaXRlZCBieSByZWNpcGVzIHdob3NlIHVwc3RyZWFtIHBhY2thZ2VzCisgICAgICAgIGludm9rZSB0aGUgPGZpbGVuYW1lPnRleGluZm88L2ZpbGVuYW1lPiB1dGlsaXRpZXMgYXQgYnVpbGQtdGltZS4KKyAgICAgICAgTmF0aXZlIGFuZCBjcm9zcyByZWNpcGVzIGFyZSBtYWRlIHRvIHVzZSB0aGUgZHVtbXkgc2NyaXB0cyBwcm92aWRlZAorICAgICAgICBieSA8ZmlsZW5hbWU+dGV4aW5mby1kdW1teS1uYXRpdmU8L2ZpbGVuYW1lPiwgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLgorICAgICAgICBUYXJnZXQgYXJjaGl0ZWN0dXJlIHJlY2lwZXMgdXNlIHRoZSBnZW51aW5lCisgICAgICAgIFRleGluZm8gdXRpbGl0aWVzLgorICAgICAgICBCeSBkZWZhdWx0LCB0aGV5IHVzZSB0aGUgVGV4aW5mbyB1dGlsaXRpZXMgb24gdGhlIGhvc3Qgc3lzdGVtLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGV4aW5mbyByZWNpcGUgc2hpcHBlZCB3aXRoIHRoZSBidWlsZAorICAgICAgICAgICAgc3lzdGVtLCB5b3UgY2FuIHJlbW92ZSAidGV4aW5mby1uYXRpdmUiIGZyb20KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1BU1NVTUVfUFJPVklERUQnPjxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZCBtYWtlaW5mbyBmcm9tCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUyc+PGZpbGVuYW1lPlNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10aW5kZXJjbGllbnQnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dGluZGVyY2xpZW50LmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT50aW5kZXJjbGllbnQ8L2ZpbGVuYW1lPiBjbGFzcyBzdWJtaXRzIGJ1aWxkIHJlc3VsdHMgdG8KKyAgICAgICAgYW4gZXh0ZXJuYWwgVGluZGVyYm94IGluc3RhbmNlLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IHVubWFpbnRhaW5lZC4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXRvYXN0ZXInPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dG9hc3Rlci5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9hc3RlcjwvZmlsZW5hbWU+IGNsYXNzIGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIHBhY2thZ2VzIGFuZCBpbWFnZXMgYW5kIHNlbmRzIHRoZW0gYXMgZXZlbnRzIHRoYXQgdGhlIEJpdEJha2UKKyAgICAgICAgdXNlciBpbnRlcmZhY2UgY2FuIHJlY2VpdmUuCisgICAgICAgIFRoZSBjbGFzcyBpcyBlbmFibGVkIHdoZW4gdGhlIFRvYXN0ZXIgdXNlciBpbnRlcmZhY2UgaXMgcnVubmluZy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy10b29sY2hhaW4tc2NyaXB0cyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT50b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dG9vbGNoYWluLXNjcmlwdHM8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyB0aGUgc2NyaXB0cworICAgICAgICB1c2VkIGZvciBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgaW5zdGFsbGVkIFNES3MuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdHlwZWNoZWNrJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnR5cGVjaGVjay5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dHlwZWNoZWNrPC9maWxlbmFtZT4gY2xhc3MgcHJvdmlkZXMgc3VwcG9ydCBmb3IKKyAgICAgICAgdmFsaWRhdGluZyB0aGUgdmFsdWVzIG9mIHZhcmlhYmxlcyBzZXQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwKKyAgICAgICAgYWdhaW5zdCB0aGVpciBkZWZpbmVkIHR5cGVzLgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbGxvd3MgeW91IHRvIGRlZmluZSB0aGUgdHlwZSBvZiBhCisgICAgICAgIHZhcmlhYmxlIHVzaW5nIHRoZSAidHlwZSIgdmFyZmxhZy4KKyAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX0ZFQVRVUkVTW3R5cGVdID0gImxpc3QiCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11Ym9vdC1jb25maWcnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dWJvb3QtY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51Ym9vdC1jb25maWc8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICBVLUJvb3QgY29uZmlndXJhdGlvbiBmb3IgYSBtYWNoaW5lLgorICAgICAgICBTcGVjaWZ5IHRoZSBtYWNoaW5lIGluIHlvdXIgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVUJPT1RfQ09ORklHID8/PSAmbHQ7ZGVmYXVsdCZndDsKKyAgICAgVUJPT1RfQ09ORklHW2Zvb10gPSAiY29uZmlnLGltYWdlcyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgbWFjaGluZSB1c2luZyB0aGlzIG1ldGhvZDoKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVQk9PVF9NQUNISU5FID0gImNvbmZpZyIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICBTZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9DT05GSUcnPjxmaWxlbmFtZT5VQk9PVF9DT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VQk9PVF9NQUNISU5FJz48ZmlsZW5hbWU+VUJPT1RfTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdW5pbmF0aXZlJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVuaW5hdGl2ZS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFByb3ZpZGVzIGEgbWVhbnMgb2YgcmV1c2luZyA8ZmlsZW5hbWU+bmF0aXZlL2Nyb3NzPC9maWxlbmFtZT4gb3ZlcgorICAgICAgICBtdWx0aXBsZSBkaXN0cm9zLgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIEN1cnJlbnRseSwgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSA8ZmlsZW5hbWU+dW5pbmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGNsYXNzIGlzIGV4cGVyaW1lbnRhbC4KKyAgICAgICAgPC9ub3RlPgorICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBjb21taXQgbWVzc2FnZQorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aWQ9ZTY2Yzk2YWU5YzdiYTIxZWJkMDRhNDgwNzM5MGYwMDMxMjM4YTg1YSc+aGVyZTwvdWxpbms+LgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1hbHRlcm5hdGl2ZXMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlczwvZmlsZW5hbWU+IGNsYXNzIGhlbHBzIHRoZQorICAgICAgICBhbHRlcm5hdGl2ZXMgc3lzdGVtIHdoZW4gbXVsdGlwbGUgc291cmNlcyBwcm92aWRlIHRoZSBzYW1lIGNvbW1hbmQuCisgICAgICAgIFRoaXMgc2l0dWF0aW9uIG9jY3VycyB3aGVuIHNldmVyYWwgcHJvZ3JhbXMgdGhhdCBoYXZlIHRoZSBzYW1lIG9yCisgICAgICAgIHNpbWlsYXIgZnVuY3Rpb24gYXJlIGluc3RhbGxlZCB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPmFyPC9maWxlbmFtZT4gY29tbWFuZCBpcyBhdmFpbGFibGUgZnJvbSB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmJ1c3lib3g8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJpbnV0aWxzPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5lbGZ1dGlsczwvZmlsZW5hbWU+IHBhY2thZ2VzLgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBjbGFzcyBoYW5kbGVzCisgICAgICAgIHJlbmFtaW5nIHRoZSBiaW5hcmllcyBzbyB0aGF0IG11bHRpcGxlIHBhY2thZ2VzIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgd2l0aG91dCBjb25mbGljdHMuCisgICAgICAgIFRoZSA8ZmlsZW5hbWU+YXI8L2ZpbGVuYW1lPiBjb21tYW5kIHN0aWxsIHdvcmtzIHJlZ2FyZGxlc3Mgb2Ygd2hpY2gKKyAgICAgICAgcGFja2FnZXMgYXJlIGluc3RhbGxlZCBvciBzdWJzZXF1ZW50bHkgcmVtb3ZlZC4KKyAgICAgICAgVGhlIGNsYXNzIHJlbmFtZXMgdGhlIGNvbmZsaWN0aW5nIGJpbmFyeSBpbiBlYWNoIHBhY2thZ2UgYW5kIHN5bWxpbmtzCisgICAgICAgIHRoZSBoaWdoZXN0IHByaW9yaXR5IGJpbmFyeSBkdXJpbmcgaW5zdGFsbGF0aW9uIG9yIHJlbW92YWwgb2YgcGFja2FnZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSB0aGlzIGNsYXNzLCB5b3UgbmVlZCB0byBkZWZpbmUgYSBudW1iZXIgb2YgdmFyaWFibGVzOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRSc+PGZpbGVuYW1lPkFMVEVSTkFUSVZFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGxpbmsgbGlua2VuZD0ndmFyLUFMVEVSTkFUSVZFX0xJTktfTkFNRSc+PGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxsaW5rIGxpbmtlbmQ9J3Zhci1BTFRFUk5BVElWRV9UQVJHRVQnPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9UQVJHRVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48bGluayBsaW5rZW5kPSd2YXItQUxURVJOQVRJVkVfUFJJT1JJVFknPjxmaWxlbmFtZT5BTFRFUk5BVElWRV9QUklPUklUWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgVGhlc2UgdmFyaWFibGVzIGxpc3QgYWx0ZXJuYXRpdmUgY29tbWFuZHMgbmVlZGVkIGJ5IGEgcGFja2FnZSwKKyAgICAgICAgcHJvdmlkZSBwYXRobmFtZXMgZm9yIGxpbmtzLCBkZWZhdWx0IGxpbmtzIGZvciB0YXJnZXRzLCBhbmQKKyAgICAgICAgc28gZm9ydGguCisgICAgICAgIEZvciBkZXRhaWxzIG9uIGhvdyB0byB1c2UgdGhpcyBjbGFzcywgc2VlIHRoZSBjb21tZW50cyBpbiB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MnPjxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdWxpbms+LgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXM8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgIGRpcmVjdGx5IGluIHlvdXIgcmVjaXBlcy4KKyAgICAgICAgSG93ZXZlciwgdGhpcyBjbGFzcyBzaW1wbGlmaWVzIHRoaW5ncyBpbiBtb3N0IGNhc2VzLgorICAgIDwvbm90ZT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVwZGF0ZS1yYy5kLmJiY2xhc3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+IGNsYXNzIHVzZXMKKyAgICAgICAgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4gdG8gc2FmZWx5IGluc3RhbGwgYW4KKyAgICAgICAgaW5pdGlhbGl6YXRpb24gc2NyaXB0IG9uIGJlaGFsZiBvZiB0aGUgcGFja2FnZS4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdGFrZXMgY2FyZSBvZiBkZXRhaWxzIHN1Y2ggYXMgbWFraW5nCisgICAgICAgIHN1cmUgdGhlIHNjcmlwdCBpcyBzdG9wcGVkIGJlZm9yZSBhIHBhY2thZ2UgaXMgcmVtb3ZlZCBhbmQgc3RhcnRlZCB3aGVuCisgICAgICAgIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhyZWUgdmFyaWFibGVzIGNvbnRyb2wgdGhpcyBjbGFzczoKKyAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUU0NSSVBUX1BBQ0tBR0VTJz5JTklUU0NSSVBUX1BBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlOSVRTQ1JJUFRfTkFNRSc+SU5JVFNDUklQVF9OQU1FPC9saW5rPjwvZmlsZW5hbWU+IGFuZAorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlOSVRTQ1JJUFRfUEFSQU1TJz5JTklUU0NSSVBUX1BBUkFNUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgU2VlIHRoZSB2YXJpYWJsZSBsaW5rcyBmb3IgZGV0YWlscy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnVzZXJhZGQuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyB0aGUgYWRkaXRpb24gb2YgdXNlcnMKKyAgICAgICAgb3IgZ3JvdXBzIGZvciB1c2FnZSBieSB0aGUgcGFja2FnZSBvbiB0aGUgdGFyZ2V0LgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgcGFja2FnZXMgdGhhdCBjb250YWluIHN5c3RlbSBzZXJ2aWNlcyB0aGF0CisgICAgICAgIHNob3VsZCBiZSBydW4gdW5kZXIgdGhlaXIgb3duIHVzZXIgb3IgZ3JvdXAsIHlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8KKyAgICAgICAgZW5hYmxlIGNyZWF0aW9uIG9mIHRoZSB1c2VyIG9yIGdyb3VwLgorICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYjwvZmlsZW5hbWU+CisgICAgICAgIHJlY2lwZSBpbiB0aGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgIHByb3ZpZGVzIGEgc2ltcGxlIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gYWRkIHRocmVlCisgICAgICAgIHVzZXJzIGFuZCBncm91cHMgdG8gdHdvIHBhY2thZ2VzLgorICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT51c2VyYWRkLWV4YW1wbGUuYmI8L2ZpbGVuYW1lPiByZWNpcGUgZm9yIG1vcmUKKyAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIGNsYXNzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiBjbGFzcyBzdXBwb3J0cyB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfUEFDS0FHRVMnPjxmaWxlbmFtZT5VU0VSQUREX1BBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9QQVJBTSc+PGZpbGVuYW1lPlVTRVJBRERfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1HUk9VUEFERF9QQVJBTSc+PGZpbGVuYW1lPkdST1VQQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdST1VQTUVNU19QQVJBTSc+PGZpbGVuYW1lPkdST1VQTUVNU19QQVJBTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtdXNlcmFkZC1zdGF0aWNpZHMnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnVzZXJhZGQtc3RhdGljaWRzPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgdGhlIGFkZGl0aW9uCisgICAgICAgIG9mIHVzZXJzIG9yIGdyb3VwcyB0aGF0IGhhdmUgc3RhdGljIHVzZXIgaWRlbnRpZmljYXRpb24KKyAgICAgICAgKDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPikgYW5kIGdyb3VwIGlkZW50aWZpY2F0aW9uCisgICAgICAgICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pIHZhbHVlcy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZm9yIGFzc2lnbmluZworICAgICAgICA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMgd2hlbgorICAgICAgICBwYWNrYWdlcyBhZGQgdXNlcnMgYW5kIGdyb3VwcyBkdXJpbmcgcGFja2FnZSBpbnN0YWxsIHRpbWUgaXMgdG8KKyAgICAgICAgYWRkIHRoZW0gZHluYW1pY2FsbHkuCisgICAgICAgIFRoaXMgd29ya3MgZmluZSBmb3IgcHJvZ3JhbXMgdGhhdCBkbyBub3QgY2FyZSB3aGF0IHRoZSB2YWx1ZXMgb2YgdGhlCisgICAgICAgIHJlc3VsdGluZyB1c2VycyBhbmQgZ3JvdXBzIGJlY29tZS4KKyAgICAgICAgSW4gdGhlc2UgY2FzZXMsIHRoZSBvcmRlciBvZiB0aGUgaW5zdGFsbGF0aW9uIGRldGVybWluZXMgdGhlIGZpbmFsCisgICAgICAgIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgSG93ZXZlciwgaWYgbm9uLWRldGVybWluaXN0aWMKKyAgICAgICAgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gdmFsdWVzIGFyZSBhCisgICAgICAgIHByb2JsZW0sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQsIGR5bmFtaWMgYXBwbGljYXRpb24gb2YgdGhlc2UKKyAgICAgICAgdmFsdWVzIGJ5IHNldHRpbmcgc3RhdGljIHZhbHVlcy4KKyAgICAgICAgV2hlbiB5b3Ugc2V0IHN0YXRpYyB2YWx1ZXMsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGxvb2tzIGluCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4gZm9yCisgICAgICAgIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4KKyAgICAgICAgZmlsZXMgZm9yIHRoZSB2YWx1ZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRvIHVzZSBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4KKyAgICAgICAgdmFsdWVzLCB5b3UgbmVlZCB0byBzZXQgc29tZSB2YXJpYWJsZXMuCisgICAgICAgIFNlZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERFWFRFTlNJT04nPjxmaWxlbmFtZT5VU0VSQURERVhURU5TSU9OPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9VSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9VSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9HSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9HSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfRVJST1JfRFlOQU1JQyc+PGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgIFlvdSBjYW4gYWxzbyBzZWUgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPjx0aXRsZT5Ob3RlczwvdGl0bGU+CisgICAgICAgIFlvdSBkbyBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuCisgICAgICAgIFlvdSBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGNsYXNzIGJ5IHNldHRpbmcgdGhlCisgICAgICAgIDxmaWxlbmFtZT5VU0VSQURERVhURU5TSU9OPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIElmIHlvdSBlbmFibGUgb3IgZGlzYWJsZSB0aGUgY2xhc3MgaW4gYSBjb25maWd1cmVkIHN5c3RlbSwKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBtaWdodCBjb250YWluIGluY29ycmVjdCA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kCisgICAgICAgIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgIERlbGV0aW5nIHRoZSA8ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgIHdpbGwgY29ycmVjdCB0aGlzIGNvbmRpdGlvbi4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11dGlsaXR5LXRhc2tzJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPnV0aWxpdHktdGFza3MuYmJjbGFzczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZpbGVuYW1lPnV0aWxpdHktdGFza3M8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorICAgICAgICB2YXJpb3VzICJ1dGlsaXR5IiB0eXBlIHRhc2tzIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gYWxsIHJlY2lwZXMsCisgICAgICAgIHN1Y2ggYXMKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNsZWFuJz48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1saXN0dGFza3MnPjxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2xhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgaW5oZXJpdGVkIGJ5CisgICAgICAgIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iYXNlJz48ZmlsZW5hbWU+YmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBjbGFzcy4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZWYtY2xhc3Nlcy11dGlscyc+CisgICAgPHRpdGxlPjxmaWxlbmFtZT51dGlscy5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dXRpbHM8L2ZpbGVuYW1lPiBjbGFzcyBwcm92aWRlcyBzb21lIHVzZWZ1bCBQeXRob24KKyAgICAgICAgZnVuY3Rpb25zIHRoYXQgYXJlIHR5cGljYWxseSB1c2VkIGluIGlubGluZSBQeXRob24gZXhwcmVzc2lvbnMKKyAgICAgICAgKGUuZy4gPGZpbGVuYW1lPiR7QC4uLn08L2ZpbGVuYW1lPikuCisgICAgICAgIE9uZSBleGFtcGxlIHVzZSBpcyBmb3IgPGZpbGVuYW1lPmJiLnV0aWxzLmNvbnRhaW5zKCk8L2ZpbGVuYW1lPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBpbmhlcml0ZWQgYnkgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJhc2UnPjxmaWxlbmFtZT5iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIGNsYXNzLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3JlZi1jbGFzc2VzLXZhbGEnPgorICAgIDx0aXRsZT48ZmlsZW5hbWU+dmFsYS5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+dmFsYTwvZmlsZW5hbWU+IGNsYXNzIHN1cHBvcnRzIHJlY2lwZXMgdGhhdCBuZWVkIHRvCisgICAgICAgIGJ1aWxkIHNvZnR3YXJlIHdyaXR0ZW4gdXNpbmcgdGhlIFZhbGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ncmVmLWNsYXNzZXMtd2FmJz4KKyAgICA8dGl0bGU+PGZpbGVuYW1lPndhZi5iYmNsYXNzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZmlsZW5hbWU+d2FmPC9maWxlbmFtZT4gY2xhc3Mgc3VwcG9ydHMgcmVjaXBlcyB0aGF0IG5lZWQgdG8gYnVpbGQKKyAgICAgICAgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSBXYWYgYnVpbGQgc3lzdGVtLgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHBhc3NlZCBvbgorICAgICAgICB0aGUgV2FmIGNvbW1hbmQgbGluZS4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzwhLS0gVW5kb2N1bWVudGVkIGNsYXNzZXMgYXJlOgorICAgICAgICBpbWFnZS1lbXB0eS5iYmNsYXNzIChwb3NzaWJseSBiZWluZyBkcm9wcGVkKQorICAgICAgICBtaWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcyAoc3RpbGwgbmVlZCBhIGRlc2NyaXB0aW9uKQorLS0+CisKKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtZmVhdHVyZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OGUwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLWZlYXR1cmVzLnhtbApAQCAtMCwwICsxLDQ0MyBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1mZWF0dXJlcyc+CisgICAgPHRpdGxlPkZlYXR1cmVzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgcHJvdmlkZXMgYSByZWZlcmVuY2Ugb2Ygc2hpcHBlZCBtYWNoaW5lIGFuZCBkaXN0cm8gZmVhdHVyZXMKKyAgICAgICAgeW91IGNhbiBpbmNsdWRlIGFzIHBhcnQgb2YgeW91ciBpbWFnZSwgYSByZWZlcmVuY2Ugb24gaW1hZ2UgZmVhdHVyZXMgeW91IGNhbgorICAgICAgICBzZWxlY3QsIGFuZCBhIHJlZmVyZW5jZSBvbiBmZWF0dXJlIGJhY2tmaWxsaW5nLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBGZWF0dXJlcyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciB3b3JraW5nIG91dCB3aGljaCBwYWNrYWdlcworICAgICAgICBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBpbWFnZXMuCisgICAgICAgIERpc3RyaWJ1dGlvbnMgY2FuIHNlbGVjdCB3aGljaCBmZWF0dXJlcyB0aGV5IHdhbnQgdG8gc3VwcG9ydCB0aHJvdWdoIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+RElTVFJPX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBzZXQgb3IgYXBwZW5kZWQgdG8gaW4gYSBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uIGZpbGUgc3VjaCBhcworICAgICAgICA8ZmlsZW5hbWU+cG9reS5jb25mPC9maWxlbmFtZT4sCisgICAgICAgIDxmaWxlbmFtZT5wb2t5LXRpbnkuY29uZjwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+cG9reS1sc2IuY29uZjwvZmlsZW5hbWU+IGFuZCBzbyBmb3J0aC4KKyAgICAgICAgTWFjaGluZSBmZWF0dXJlcyBhcmUgc2V0IGluIHRoZQorICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPk1BQ0hJTkVfRkVBVFVSRVM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIHNldCBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCisgICAgICAgIHNwZWNpZmllcyB0aGUgaGFyZHdhcmUgZmVhdHVyZXMgZm9yIGEgZ2l2ZW4gbWFjaGluZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlc2UgdHdvIHZhcmlhYmxlcyBjb21iaW5lIHRvIHdvcmsgb3V0IHdoaWNoIGtlcm5lbCBtb2R1bGVzLAorICAgICAgICB1dGlsaXRpZXMsIGFuZCBvdGhlciBwYWNrYWdlcyB0byBpbmNsdWRlLgorICAgICAgICBBIGdpdmVuIGRpc3RyaWJ1dGlvbiBjYW4gc3VwcG9ydCBhIHNlbGVjdGVkIHN1YnNldCBvZiBmZWF0dXJlcyBzbyBzb21lIG1hY2hpbmUgZmVhdHVyZXMgbWlnaHQgbm90CisgICAgICAgIGJlIGluY2x1ZGVkIGlmIHRoZSBkaXN0cmlidXRpb24gaXRzZWxmIGRvZXMgbm90IHN1cHBvcnQgdGhlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgT25lIG1ldGhvZCB5b3UgY2FuIHVzZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVjaXBlcyBhcmUgY2hlY2tpbmcgdG8gc2VlIGlmIGEKKyAgICAgICAgcGFydGljdWxhciBmZWF0dXJlIGlzIGNvbnRhaW5lZCBvciBub3QgaXMgdG8gPGZpbGVuYW1lPmdyZXA8L2ZpbGVuYW1lPiB0aHJvdWdoCisgICAgICAgIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICBmb3IgdGhlIGZlYXR1cmUuCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGRpc2NvdmVycyB0aGUgcmVjaXBlcyB3aG9zZSBidWlsZCBpcyBwb3RlbnRpYWxseQorICAgICAgICBjaGFuZ2VkIGJhc2VkIG9uIGEgZ2l2ZW4gZmVhdHVyZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGNkIHBva3kKKyAgICAgJCBnaXQgZ3JlcCAnY29udGFpbnMuKk1BQ0hJTkVfRkVBVFVSRVMuKjxyZXBsYWNlYWJsZT5mZWF0dXJlPC9yZXBsYWNlYWJsZT4nCisgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLWZlYXR1cmVzLW1hY2hpbmUnPgorICAgICAgICA8dGl0bGU+TWFjaGluZSBGZWF0dXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgaXRlbXMgYmVsb3cgYXJlIGZlYXR1cmVzIHlvdSBjYW4gdXNlIHdpdGgKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEZlYXR1cmVzIGRvIG5vdCBoYXZlIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSB0byBwYWNrYWdlcywgYW5kIHRoZXkgY2FuCisgICAgICAgICAgICBnbyBiZXlvbmQgc2ltcGx5IGNvbnRyb2xsaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgYSBwYWNrYWdlIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgU29tZXRpbWVzIGEgZmVhdHVyZSBjYW4gaW5mbHVlbmNlIGhvdyBjZXJ0YWluIHJlY2lwZXMgYXJlIGJ1aWx0LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgZmVhdHVyZSBtaWdodCBkZXRlcm1pbmUgd2hldGhlciBhIHBhcnRpY3VsYXIgY29uZmlndXJlIG9wdGlvbgorICAgICAgICAgICAgaXMgc3BlY2lmaWVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgZm9yIGEgcGFydGljdWxhciByZWNpcGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBsaXN0IG9ubHkgcmVwcmVzZW50cyBmZWF0dXJlcyBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgbWV0YWRhdGE6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YWNwaTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgQUNQSSAoeDg2L3g4Nl82NCBvbmx5KQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFsc2E6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIEFMU0EgYXVkaW8gZHJpdmVycworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmFwbTo8L2VtcGhhc2lzPiBIYXJkd2FyZSB1c2VzIEFQTSAob3IgQVBNIGVtdWxhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ibHVldG9vdGg6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGludGVncmF0ZWQgQlQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5lZmk6PC9lbXBoYXNpcz4gU3VwcG9ydCBmb3IgYm9vdGluZyB0aHJvdWdoIEVGSQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmV4dDI6PC9lbXBoYXNpcz4gSGFyZHdhcmUgSEREIG9yIE1pY3JvZHJpdmUKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pcmRhOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBJckRBIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5rZXlib2FyZDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgYSBrZXlib2FyZAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBjYmlvczo8L2VtcGhhc2lzPiBTdXBwb3J0IGZvciBib290aW5nIHRocm91Z2ggQklPUworICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnBjaTo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgYSBQQ0kgYnVzCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGNtY2lhOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBQQ01DSUEgb3IgQ29tcGFjdEZsYXNoIHNvY2tldHMKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5waG9uZTo8L2VtcGhhc2lzPiBNb2JpbGUgcGhvbmUgKHZvaWNlKSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cXZnYTo8L2VtcGhhc2lzPiBNYWNoaW5lIGhhcyBhIFFWR0EgKDMyMHgyNDApIGRpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5ydGM6PC9lbXBoYXNpcz4gTWFjaGluZSBoYXMgYSBSZWFsLVRpbWUgQ2xvY2sKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zY3JlZW46PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGEgc2NyZWVuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c2VyaWFsOjwvZW1waGFzaXM+IEhhcmR3YXJlIGhhcyBzZXJpYWwgc3VwcG9ydCAodXN1YWxseSBSUzIzMikKKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b3VjaHNjcmVlbjo8L2VtcGhhc2lzPiBIYXJkd2FyZSBoYXMgYSB0b3VjaHNjcmVlbgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnVzYmdhZGdldDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBpcyBVU0IgZ2FkZ2V0IGRldmljZSBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dXNiaG9zdDo8L2VtcGhhc2lzPiBIYXJkd2FyZSBpcyBVU0IgSG9zdCBjYXBhYmxlCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dmZhdDo8L2VtcGhhc2lzPiBGQVQgZmlsZSBzeXN0ZW0gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPndpZmk6PC9lbXBoYXNpcz4gSGFyZHdhcmUgaGFzIGludGVncmF0ZWQgV2lGaQorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi1mZWF0dXJlcy1kaXN0cm8nPgorICAgICAgICA8dGl0bGU+RGlzdHJvIEZlYXR1cmVzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBpdGVtcyBiZWxvdyBhcmUgZmVhdHVyZXMgeW91IGNhbiB1c2Ugd2l0aAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdG8gZW5hYmxlIGZlYXR1cmVzIGFjcm9zcyB5b3VyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIEZlYXR1cmVzIGRvIG5vdCBoYXZlIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSB0byBwYWNrYWdlcywKKyAgICAgICAgICAgIGFuZCB0aGV5IGNhbiBnbyBiZXlvbmQgc2ltcGx5IGNvbnRyb2xsaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgYQorICAgICAgICAgICAgcGFja2FnZSBvciBwYWNrYWdlcy4KKyAgICAgICAgICAgIEluIG1vc3QgY2FzZXMsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGEgZmVhdHVyZSB0cmFuc2xhdGVzIHRvCisgICAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uIHN1cHBsaWVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IGR1cmluZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgZm9yIHRoZSByZWNpcGVzIHRoYXQgb3B0aW9uYWxseQorICAgICAgICAgICAgc3VwcG9ydCB0aGUgZmVhdHVyZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU29tZSBkaXN0cm8gZmVhdHVyZXMgYXJlIGFsc28gbWFjaGluZSBmZWF0dXJlcy4KKyAgICAgICAgICAgIFRoZXNlIHNlbGVjdCBmZWF0dXJlcyBtYWtlIHNlbnNlIHRvIGJlIGNvbnRyb2xsZWQgYm90aCBhdAorICAgICAgICAgICAgdGhlIG1hY2hpbmUgYW5kIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGxldmVsLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjdmFyLUNPTUJJTkVEX0ZFQVRVUkVTJz48ZmlsZW5hbWU+Q09NQklORURfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBsaXN0IG9ubHkgcmVwcmVzZW50cyBmZWF0dXJlcyBhcyBzaGlwcGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgbWV0YWRhdGE6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YWxzYTo8L2VtcGhhc2lzPiBJbmNsdWRlIEFMU0Egc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAoT1NTIGNvbXBhdGliaWxpdHkga2VybmVsIG1vZHVsZXMgaW5zdGFsbGVkIGlmIGF2YWlsYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ymx1ZXRvb3RoOjwvZW1waGFzaXM+IEluY2x1ZGUKKyAgICAgICAgICAgICAgICAgICAgYmx1ZXRvb3RoIHN1cHBvcnQgKGludGVncmF0ZWQgQlQgb25seSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5jcmFtZnM6PC9lbXBoYXNpcz4gSW5jbHVkZSBDcmFtRlMKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmRpcmVjdGZiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgRGlyZWN0RkIgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5leHQyOjwvZW1waGFzaXM+IEluY2x1ZGUgdG9vbHMgZm9yCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRpbmcgZm9yIGRldmljZXMgd2l0aCBpbnRlcm5hbCBIREQvTWljcm9kcml2ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBmaWxlcyAoaW5zdGVhZCBvZiBGbGFzaCBvbmx5IGRldmljZXMpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmlwc2VjOjwvZW1waGFzaXM+IEluY2x1ZGUgSVBTZWMKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmlwdjY6PC9lbXBoYXNpcz4gSW5jbHVkZSBJUHY2IHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+aXJkYTo8L2VtcGhhc2lzPiBJbmNsdWRlIElyREEgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5rZXlib2FyZDo8L2VtcGhhc2lzPiBJbmNsdWRlIGtleWJvYXJkCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgKGUuZy4ga2V5bWFwcyB3aWxsIGJlIGxvYWRlZCBkdXJpbmcgYm9vdCkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+bmZzOjwvZW1waGFzaXM+IEluY2x1ZGUgTkZTIGNsaWVudAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IChmb3IgbW91bnRpbmcgTkZTIGV4cG9ydHMgb24gZGV2aWNlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5vcGVuZ2w6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSB0aGUgT3BlbiBHcmFwaGljcyBMaWJyYXJ5LCB3aGljaCBpcyBhCisgICAgICAgICAgICAgICAgICAgIGNyb3NzLWxhbmd1YWdlLCBtdWx0aS1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdXNlZCBmb3IgcmVuZGVyaW5nIHR3byBhbmQgdGhyZWUtZGltZW5zaW9uYWwKKyAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY2k6PC9lbXBoYXNpcz4gSW5jbHVkZSBQQ0kgYnVzCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wY21jaWE6PC9lbXBoYXNpcz4gSW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBQQ01DSUEvQ29tcGFjdEZsYXNoIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wcHA6PC9lbXBoYXNpcz4gSW5jbHVkZSBQUFAgZGlhbHVwCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wdGVzdDo8L2VtcGhhc2lzPiBFbmFibGVzIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIHRlc3RzIHdoZXJlIHN1cHBvcnRlZCBieSBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhY2thZ2UgdGVzdHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3Rlc3RpbmctcGFja2FnZXMtd2l0aC1wdGVzdCc+VGVzdGluZyBQYWNrYWdlcyBXaXRoIHB0ZXN0PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNtYmZzOjwvZW1waGFzaXM+IEluY2x1ZGUgU01CIG5ldHdvcmtzCisgICAgICAgICAgICAgICAgICAgIGNsaWVudCBzdXBwb3J0IChmb3IgbW91bnRpbmcgU2FtYmEvTWljcm9zb2Z0IFdpbmRvd3Mgc2hhcmVzCisgICAgICAgICAgICAgICAgICAgIG9uIGRldmljZSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zeXN0ZW1kOjwvZW1waGFzaXM+IEluY2x1ZGUgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyA8ZmlsZW5hbWU+aW5pdDwvZmlsZW5hbWU+IG1hbmFnZXIsIHdoaWNoIGlzIGEgZnVsbAorICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCBvZiBmb3IgPGZpbGVuYW1lPmluaXQ8L2ZpbGVuYW1lPiB3aXRoIHBhcmFsbGVsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0aW5nIG9mIHNlcnZpY2VzLCByZWR1Y2VkIHNoZWxsIG92ZXJoZWFkLCBhbmQgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgPGZpbGVuYW1lPmluaXQ8L2ZpbGVuYW1lPiBtYW5hZ2VyIGlzIHVzZWQgYnkgbWFueQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+dXNiZ2FkZ2V0OjwvZW1waGFzaXM+IEluY2x1ZGUgVVNCCisgICAgICAgICAgICAgICAgICAgIEdhZGdldCBEZXZpY2Ugc3VwcG9ydCAoZm9yIFVTQiBuZXR3b3JraW5nL3NlcmlhbC9zdG9yYWdlKS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz51c2Job3N0OjwvZW1waGFzaXM+IEluY2x1ZGUgVVNCIEhvc3QKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCAoYWxsb3dzIHRvIGNvbm5lY3QgZXh0ZXJuYWwga2V5Ym9hcmQsIG1vdXNlLAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBuZXR3b3JrIGV0YykuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53YXlsYW5kOjwvZW1waGFzaXM+IEluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIFdheWxhbmQgZGlzcGxheSBzZXJ2ZXIgcHJvdG9jb2wgYW5kIHRoZSBsaWJyYXJ5IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgaXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz53aWZpOjwvZW1waGFzaXM+IEluY2x1ZGUgV2lGaSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIChpbnRlZ3JhdGVkIG9ubHkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+eDExOjwvZW1waGFzaXM+IEluY2x1ZGUgdGhlIFggc2VydmVyCisgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJyYXJpZXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtZmVhdHVyZXMtaW1hZ2UnPgorICAgICAgICA8dGl0bGU+SW1hZ2UgRmVhdHVyZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvbnRlbnRzIG9mIGltYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RVhUUkFfSU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IHlvdSB0eXBpY2FsbHkgY29uZmlndXJlIGluIHlvdXIgaW1hZ2UgcmVjaXBlcy4KKyAgICAgICAgICAgIFRocm91Z2ggdGhlc2UgdmFyaWFibGVzLCB5b3UgY2FuIGFkZCBzZXZlcmFsIGRpZmZlcmVudAorICAgICAgICAgICAgcHJlZGVmaW5lZCBwYWNrYWdlcyBzdWNoIGFzIGRldmVsb3BtZW50IHV0aWxpdGllcyBvciBwYWNrYWdlcyB3aXRoCisgICAgICAgICAgICBkZWJ1ZyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW52ZXN0aWdhdGUgYXBwbGljYXRpb24gcHJvYmxlbXMgb3IKKyAgICAgICAgICAgIHByb2ZpbGUgYXBwbGljYXRpb25zLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGltYWdlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgZm9yIGFsbCBpbWFnZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+YWxsb3ctZW1wdHktcGFzc3dvcmQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIERyb3BiZWFyIGFuZCBPcGVuU1NIIHRvIGFjY2VwdCByb290IGxvZ2lucworICAgICAgICAgICAgICAgICAgICBhbmQgbG9naW5zIGZyb20gYWNjb3VudHMgaGF2aW5nIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kYmctcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZWJ1ZyBzeW1ib2wgcGFja2FnZXMgZm9yIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gYSBnaXZlbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZWJ1Zy10d2Vha3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IChlLmcuCisgICAgICAgICAgICAgICAgICAgIGFsbG93cyByb290IGxvZ2lucyB3aXRob3V0IHBhc3N3b3JkcyBhbmQgZW5hYmxlcworICAgICAgICAgICAgICAgICAgICBwb3N0LWluc3RhbGxhdGlvbiBsb2dnaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAnYWxsb3ctZW1wdHktcGFzc3dvcmQnLCAnZW1wdHktcm9vdC1wYXNzd29yZCcsCisgICAgICAgICAgICAgICAgICAgIGFuZCAncG9zdC1pbnN0YWxsLWxvZ2dpbmcnIGZlYXR1cmVzIGluIHRoaXMgbGlzdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kZXYtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZXZlbG9wbWVudCBwYWNrYWdlcyAoaGVhZGVycyBhbmQgZXh0cmEgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICBsaW5rcykgZm9yIGFsbCBwYWNrYWdlcyBpbnN0YWxsZWQgaW4gYSBnaXZlbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5kb2MtcGtnczo8L2VtcGhhc2lzPiBJbnN0YWxscworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGZvciBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGEKKyAgICAgICAgICAgICAgICAgICAgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZW1wdHktcm9vdC1wYXNzd29yZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSByb290IHBhc3N3b3JkIHRvIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggYWxsb3dzCisgICAgICAgICAgICAgICAgICAgIGxvZ2lucyB3aXRoIGEgYmxhbmsgcGFzc3dvcmQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cGFja2FnZS1tYW5hZ2VtZW50OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHBhY2thZ2UgbWFuYWdlbWVudCB0b29scyBhbmQgcHJlc2VydmVzIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+cG9zdC1pbnN0YWxsLWxvZ2dpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBsb2dnaW5nIHBvc3RpbnN0YWxsIHNjcmlwdCBydW5zIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+L3Zhci9sb2cvcG9zdGluc3RhbGwubG9nPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBvbiBmaXJzdCBib290IG9mIHRoZSBpbWFnZSBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wdGVzdC1wa2dzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHB0ZXN0IHBhY2thZ2VzIGZvciBhbGwgcHRlc3QtZW5hYmxlZCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnJlYWQtb25seS1yb290ZnM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlcyBhbiBpbWFnZSB3aG9zZSByb290IGZpbGVzeXN0ZW0gaXMgcmVhZC1vbmx5LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLXJlYWQtb25seS1yb290LWZpbGVzeXN0ZW0nPkNyZWF0aW5nIGEgUmVhZC1Pbmx5IFJvb3QgRmlsZXN5c3RlbTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zcGxhc2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBzaG93aW5nIGEgc3BsYXNoIHNjcmVlbiBkdXJpbmcgYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBzY3JlZW4gaXMgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPiwgd2hpY2ggZG9lcyBhbGxvdworICAgICAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9uLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgcHJlZmVyIHRvIHVzZSBhbiBhbHRlcm5hdGl2ZSBzcGxhc2ggc2NyZWVuIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gZG8gc28gYnkgc2V0dGluZyB0aGUgPGZpbGVuYW1lPlNQTEFTSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIGEgZGlmZmVyZW50IHBhY2thZ2UgbmFtZSAob3IgbmFtZXMpIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgcmVjaXBlIG9yIGF0IHRoZSBkaXN0cm8gY29uZmlndXJhdGlvbiBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zdGF0aWNkZXYtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBzdGF0aWMgZGV2ZWxvcG1lbnQgcGFja2FnZXMsIHdoaWNoIGFyZQorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgbGlicmFyaWVzIChpLmUuIDxmaWxlbmFtZT4qLmE8L2ZpbGVuYW1lPiBmaWxlcyksIGZvcgorICAgICAgICAgICAgICAgICAgICBhbGwgcGFja2FnZXMgaW5zdGFsbGVkIGluIGEgZ2l2ZW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWUgaW1hZ2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBvbmx5IHdoZW4geW91IGluaGVyaXQgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1jb3JlLWltYWdlJz48ZmlsZW5hbWU+Y29yZS1pbWFnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICBUaGUgY3VycmVudCBsaXN0IG9mIHRoZXNlIHZhbGlkIGZlYXR1cmVzIGlzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+ZWNsaXBzZS1kZWJ1Zzo8L2VtcGhhc2lzPiBQcm92aWRlcworICAgICAgICAgICAgICAgICAgICBFY2xpcHNlIHJlbW90ZSBkZWJ1Z2dpbmcgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5od2NvZGVjczo8L2VtcGhhc2lzPiBJbnN0YWxscworICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBhY2NlbGVyYXRpb24gY29kZWNzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPm5mcy1zZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgYW4gTkZTIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5xdDQtcGtnczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0cyBRdDQvWDExIGFuZCBkZW1vIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5zc2gtc2VydmVyLWRyb3BiZWFyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBEcm9wYmVhciBtaW5pbWFsIFNTSCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+c3NoLXNlcnZlci1vcGVuc3NoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBPcGVuU1NIIFNTSCBzZXJ2ZXIsIHdoaWNoIGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgZnVsbC1mZWF0dXJlZCB0aGFuIERyb3BiZWFyLgorICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgaWYgYm90aCB0aGUgT3BlblNTSCBTU0ggc2VydmVyIGFuZCB0aGUgRHJvcGJlYXIKKyAgICAgICAgICAgICAgICAgICAgbWluaW1hbCBTU0ggc2VydmVyIGFyZSBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+LCB0aGVuIE9wZW5TU0ggd2lsbCB0YWtlCisgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UgYW5kIERyb3BiZWFyIHdpbGwgbm90IGJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy1kZWJ1Zzo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZWJ1Z2dpbmcgdG9vbHMgc3VjaCBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3RyYWNlPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5nZGI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEdEQiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRyYWNpbmcgYW5kIHByb2ZpbGluZywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19QUk9GX1VSTDsnPllvY3RvIFByb2plY3QgUHJvZmlsaW5nIGFuZCBUcmFjaW5nIE1hbnVhbDwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnRvb2xzLXByb2ZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgcHJvZmlsaW5nIHRvb2xzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wcm9maWxlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5leG1hcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPkxUVG5nPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHVzZXItc3BhY2UgdG9vbHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I3VzZXItc3BhY2UtdG9vbHMnPlVzZXItU3BhY2UgVG9vbHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncworICAgICAgICAgICAgICAgICAgICBHdWlkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy1zZGs6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgYSBmdWxsIFNESyB0aGF0IHJ1bnMgb24gdGhlIGRldmljZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz50b29scy10ZXN0YXBwczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyBkZXZpY2UgdGVzdGluZyB0b29scyAoZS5nLiB0b3VjaHNjcmVlbiBkZWJ1Z2dpbmcpLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxscyB0aGUgWCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+eDExLWJhc2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW5zdGFsbHMgdGhlIFggc2VydmVyIHdpdGggYSBtaW5pbWFsIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPngxMS1zYXRvOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluc3RhbGxzIHRoZSBPcGVuZWRIYW5kIFNhdG8gZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPgorICAgICAgICA8dGl0bGU+RmVhdHVyZSBCYWNrZmlsbGluZzwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGV4dGVuZAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvciA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0byBjb250cm9sIGZ1bmN0aW9uYWxpdHkgdGhhdCB3YXMgcHJldmlvdXNseSBlbmFibGVkIGFuZCBub3QgYWJsZQorICAgICAgICAgICAgdG8gYmUgZGlzYWJsZWQuCisgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHdlIG5lZWQgdG8gYWRkIGFuCisgICAgICAgICAgICBhZGRpdGlvbmFsIGZlYXR1cmUgaXRlbSB0byBhcHBlYXIgaW4gb25lIG9mIHRoZXNlIHZhcmlhYmxlcywKKyAgICAgICAgICAgIGJ1dCB3ZSBkbyBub3Qgd2FudCB0byBmb3JjZSBkZXZlbG9wZXJzIHdobyBoYXZlIGV4aXN0aW5nIHZhbHVlcworICAgICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcyBpbiB0aGVpciBjb25maWd1cmF0aW9uIHRvIGFkZCB0aGUgbmV3IGZlYXR1cmUKKyAgICAgICAgICAgIGluIG9yZGVyIHRvIHJldGFpbiB0aGUgc2FtZSBvdmVyYWxsIGxldmVsIG9mIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICBUaHVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgYSBtZWNoYW5pc20gdG8KKyAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgImJhY2tmaWxsIiB0aGVzZSBhZGRlZCBmZWF0dXJlcyBpbnRvIGV4aXN0aW5nCisgICAgICAgICAgICBkaXN0cm8gb3IgbWFjaGluZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZSBsaXN0IG9mIGZlYXR1cmVzIGZvciB3aGljaCB0aGlzIGlzIGRvbmUgYnkKKyAgICAgICAgICAgIGZpbmRpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVjYXVzZSBzdWNoIGZlYXR1cmVzIGFyZSBiYWNrZmlsbGVkIGJ5IGRlZmF1bHQgaW50byBhbGwKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBkZXZlbG9wZXJzCisgICAgICAgICAgICB3aG8gd2lzaCB0byBkaXNhYmxlIHRoZSBuZXcgZmVhdHVyZXMgbmVlZCB0byBiZSBhYmxlIHRvIHNlbGVjdGl2ZWx5CisgICAgICAgICAgICBwcmV2ZW50IHRoZSBiYWNrZmlsbGluZyBmcm9tIG9jY3VycmluZy4KKyAgICAgICAgICAgIFRoZXkgY2FuIGRvIHRoaXMgYnkgYWRkaW5nIHRoZSB1bmRlc2lyZWQgZmVhdHVyZSBvciBmZWF0dXJlcyB0byB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvciA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz48ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGRpc3RybyBmZWF0dXJlcyBhbmQgbWFjaGluZSBmZWF0dXJlcyByZXNwZWN0aXZlbHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlcyB0byBoZWxwIGlsbHVzdHJhdGUgZmVhdHVyZSBiYWNrZmlsbGluZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5UaGUgInB1bHNlYXVkaW8iIGRpc3RybyBmZWF0dXJlIG9wdGlvbjwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBQcmV2aW91c2x5LCBQdWxzZUF1ZGlvIHN1cHBvcnQgd2FzIGVuYWJsZWQgd2l0aGluIHRoZSBRdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgR1N0cmVhbWVyIGZyYW1ld29ya3MuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGZlYXR1cmUgaXMgYmFja2ZpbGxlZCBhbmQgdGh1cworICAgICAgICAgICAgICAgICAgICBlbmFibGVkIGZvciBhbGwgZGlzdHJvcyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91ciBkaXN0cm8gbmVlZHMgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoZSBmZWF0dXJlIHdpdGhvdXQgYWZmZWN0aW5nCisgICAgICAgICAgICAgICAgICAgIG90aGVyIGV4aXN0aW5nIGRpc3RybyBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgUHVsc2VBdWRpbyBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyAicHVsc2VhdWRpbyIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW4geW91ciBkaXN0cm8ncyA8ZmlsZW5hbWU+LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBBZGRpbmcgdGhlIGZlYXR1cmUgdG8gdGhpcyB2YXJpYWJsZSB3aGVuIGl0IGFsc28KKyAgICAgICAgICAgICAgICAgICAgZXhpc3RzIGluIHRoZSA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgcHJldmVudHMgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIGFkZGluZyB0aGUgZmVhdHVyZSB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGNvbmZpZ3VyYXRpb24ncyA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4sIGVmZmVjdGl2ZWx5IGRpc2FibGluZworICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGRpc3Ryby48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlRoZSAicnRjIiBtYWNoaW5lIGZlYXR1cmUgb3B0aW9uPC9lbXBoYXNpcz46CisgICAgICAgICAgICAgICAgICAgIFByZXZpb3VzbHksIHJlYWwgdGltZSBjbG9jayAoUlRDKSBzdXBwb3J0IHdhcyBlbmFibGVkIGZvciBhbGwKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGZlYXR1cmUgaXMgYmFja2ZpbGxlZCBhbmQgdGh1cyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgbWFjaGluZXMgdGhyb3VnaCB0aGUgPGZpbGVuYW1lPk1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB5b3VyIHRhcmdldCBkZXZpY2UgZG9lcyBub3QgaGF2ZSB0aGlzIGNhcGFiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSBSVEMgc3VwcG9ydCBmb3IgeW91ciBkZXZpY2Ugd2l0aG91dAorICAgICAgICAgICAgICAgICAgICBhZmZlY3Rpbmcgb3RoZXIgbWFjaGluZXMgdGhhdCBuZWVkIFJUQyBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyB0aGUgZmVhdHVyZSB0byB5b3VyIG1hY2hpbmUncworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGlzdCBpbiB0aGUgbWFjaGluZSdzIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEFkZGluZyB0aGUgZmVhdHVyZSB0byB0aGlzIHZhcmlhYmxlIHdoZW4gaXQgYWxzbworICAgICAgICAgICAgICAgICAgICBleGlzdHMgaW4gdGhlIDxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgcHJldmVudHMgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIGFkZGluZyB0aGUgZmVhdHVyZSB0bworICAgICAgICAgICAgICAgICAgICB5b3VyIGNvbmZpZ3VyYXRpb24ncyA8ZmlsZW5hbWU+TUFDSElORV9GRUFUVVJFUzwvZmlsZW5hbWU+LCBlZmZlY3RpdmVseQorICAgICAgICAgICAgICAgICAgICBkaXNhYmxpbmcgUlRDIHN1cHBvcnQgZm9yIHRoYXQgcGFydGljdWxhciBtYWNoaW5lLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+CisKKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQgc3BlbGwgc3BlbGxsYW5nPWVuX2diCistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtaW1hZ2VzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTVjYTViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1pbWFnZXMueG1sCkBAIC0wLDAgKzEsMTY5IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLWltYWdlcyc+CisgICAgPHRpdGxlPkltYWdlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgc2V2ZXJhbCBleGFtcGxlCisgICAgICAgIGltYWdlcyB0byBzYXRpc2Z5IGRpZmZlcmVudCBuZWVkcy4KKyAgICAgICAgV2hlbiB5b3UgaXNzdWUgdGhlIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZCB5b3UgcHJvdmlkZSBhIOKAnHRvcC1sZXZlbOKAnSByZWNpcGUKKyAgICAgICAgdGhhdCBlc3NlbnRpYWxseSBiZWdpbnMgdGhlIGJ1aWxkIGZvciB0aGUgdHlwZSBvZiBpbWFnZSB5b3Ugd2FudC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgQnVpbGRpbmcgYW4gaW1hZ2Ugd2l0aG91dCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDMgKEdQTHYzKSwKKyAgICAgICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyAoTEdQTHYzKSwgYW5kIHRoZQorICAgICAgICBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAzIChBR1BMLTMuMCkgY29tcG9uZW50cworICAgICAgICBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgbWluaW1hbCBhbmQgYmFzZSBpbWFnZXMuCisgICAgICAgIEZ1cnRoZXJtb3JlLCBpZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nIG5vbi1HUEx2MyBhbmQKKyAgICAgICAgc2ltaWxhcmx5IGxpY2Vuc2VkIGNvbXBvbmVudHMsIHlvdSBtdXN0IG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYmVmb3JlIHVzaW5nIHRoZSBCaXRCYWtlCisgICAgICAgIGNvbW1hbmQgdG8gYnVpbGQgdGhlIG1pbmltYWwgb3IgYmFzZSBpbWFnZToKKyAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAxLiBDb21tZW50IG91dCB0aGUgRVhUUkFfSU1BR0VfRkVBVFVSRVMgbGluZQorICAgICAyLiBTZXQgSU5DT01QQVRJQkxFX0xJQ0VOU0UgPSAiR1BMLTMuMCBMR1BMLTMuMCBBR1BMLTMuMCIKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICBGcm9tIHdpdGhpbiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSwgeW91IGNhbiB1c2UKKyAgICAgICAgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2l0aGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgdGhhdCBjb250YWluZSBpbWFnZSByZWNpcGUgZmlsZXM6CisgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBscyBtZXRhKi9yZWNpcGVzKi9pbWFnZXMvKi5iYgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBpcyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHJlY2lwZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJ1aWxkLWFwcGxpYW5jZS1pbWFnZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgdmlydHVhbCBtYWNoaW5lIHRoYXQgY29udGFpbnMgYWxsIHRoZSBwaWVjZXMgcmVxdWlyZWQgdG8KKyAgICAgICAgICAgICAgICBydW4gYnVpbGRzIHVzaW5nIHRoZSBidWlsZCBzeXN0ZW0gYXMgd2VsbCBhcyB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZi4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGJvb3QgYW5kIHJ1biB0aGUgaW1hZ2UgdXNpbmcgZWl0aGVyIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly93d3cudm13YXJlLmNvbS9wcm9kdWN0cy9wbGF5ZXIvb3ZlcnZpZXcuaHRtbCc+Vk13YXJlIFBsYXllcjwvdWxpbms+CisgICAgICAgICAgICAgICAgb3IgPHVsaW5rIHVybD0naHR0cDovL3d3dy52bXdhcmUuY29tL3Byb2R1Y3RzL3dvcmtzdGF0aW9uL292ZXJ2aWV3Lmh0bWwnPlZNd2FyZSBXb3Jrc3RhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgaW1hZ2UsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7L2RvY3VtZW50YXRpb24vYnVpbGQtYXBwbGlhbmNlJz5CdWlsZCBBcHBsaWFuY2U8L3VsaW5rPiBwYWdlIG9uCisgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1iYXNlPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSBjb25zb2xlLW9ubHkgaW1hZ2UgdGhhdCBmdWxseSBzdXBwb3J0cyB0aGUgdGFyZ2V0IGRldmljZSBoYXJkd2FyZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1jbHV0dGVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2Ugd2l0aCBzdXBwb3J0IGZvciB0aGUgT3BlbiBHTC1iYXNlZCB0b29sa2l0IENsdXR0ZXIsIHdoaWNoIGVuYWJsZXMgZGV2ZWxvcG1lbnQgb2YKKyAgICAgICAgICAgICAgICByaWNoIGFuZCBhbmltYXRlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLWRpcmVjdGZiPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW1hZ2UgdGhhdCB1c2VzIDxmaWxlbmFtZT5kaXJlY3RmYjwvZmlsZW5hbWU+IGluc3RlYWQgb2YgWDExLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLWZ1bGwtY21kbGluZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgY29uc29sZS1vbmx5IGltYWdlIHdpdGggbW9yZSBmdWxsLWZlYXR1cmVkIExpbnV4IHN5c3RlbQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkgaW5zdGFsbGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbWFnZSB0aGF0IGNvbmZvcm1zIHRvIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpCisgICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHJlcXVpcmVzIGEgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGVuYWJsZXMgTFNCIGNvbXBsaWFuY2UgKGUuZy4gPGZpbGVuYW1lPnBva3ktbHNiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIElmIHlvdSBidWlsZCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiB3aXRob3V0IHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB0aGUgaW1hZ2Ugd2lsbCBub3QgYmUgTFNCLWNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2ItZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2I8L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGluY2x1ZGVzIGhlYWRlcnMgYW5kIGxpYnJhcmllcyB5b3UgY2FuIHVzZSBpbiBhIGhvc3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIHJlcXVpcmVzIGEgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gdGhhdAorICAgICAgICAgICAgICAgIGVuYWJsZXMgTFNCIGNvbXBsaWFuY2UgKGUuZy4gPGZpbGVuYW1lPnBva3ktbHNiPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIElmIHlvdSBidWlsZCA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1sc2ItZGV2PC9maWxlbmFtZT4gd2l0aG91dCB0aGF0CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiwgdGhlIGltYWdlIHdpbGwgbm90IGJlIExTQi1jb21wbGlhbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiLXNkazwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbHNiPC9maWxlbmFtZT4gdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIGluCisgICAgICAgICAgICAgICAgbWV0YS10b29sY2hhaW4gYnV0IGFsc28gaW5jbHVkZXMgZGV2ZWxvcG1lbnQgaGVhZGVycyBhbmQgbGlicmFyaWVzCisgICAgICAgICAgICAgICAgdG8gZm9ybSBhIGNvbXBsZXRlIHN0YW5kYWxvbmUgU0RLLgorICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2UgcmVxdWlyZXMgYSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgZW5hYmxlcyBMU0IgY29tcGxpYW5jZSAoZS5nLiA8ZmlsZW5hbWU+cG9reS1sc2I8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgSWYgeW91IGJ1aWxkIDxmaWxlbmFtZT5jb3JlLWltYWdlLWxzYi1zZGs8L2ZpbGVuYW1lPiB3aXRob3V0IHRoYXQKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCB0aGUgaW1hZ2Ugd2lsbCBub3QgYmUgTFNCLWNvbXBsaWFudC4KKyAgICAgICAgICAgICAgICBUaGlzIGltYWdlIGlzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB1c2luZyB0aGUgdGFyZ2V0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIHNtYWxsIGltYWdlIGp1c3QgY2FwYWJsZSBvZiBhbGxvd2luZyBhIGRldmljZSB0byBib290LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWwtZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IHdvcmsKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICBUaGUgaW1hZ2UgaW5jbHVkZXMgaGVhZGVycyBhbmQgbGlicmFyaWVzIHlvdSBjYW4gdXNlIGluIGEgaG9zdCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhIGlkPSdpbWFnZXMtY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyc+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGhhcyB0aGUgTWluaW1hbCBSQU0tYmFzZWQKKyAgICAgICAgICAgICAgICBJbml0aWFsIFJvb3QgRmlsZXN5c3RlbSAoaW5pdHJhbWZzKSBhcyBwYXJ0IG9mIHRoZSBrZXJuZWwsCisgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHRoZSBzeXN0ZW0gdG8gZmluZCB0aGUgZmlyc3Qg4oCcaW5pdOKAnSBwcm9ncmFtIG1vcmUgZWZmaWNpZW50bHkuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBoZWxwZnVsIHdoZW4gd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgaW5pdHJhbWZzIGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2UgdGhhdCBoYXMgc3VwcG9ydAorICAgICAgICAgICAgICAgIGZvciB0aGUgTWluaW1hbCBNVEQgVXRpbGl0aWVzLCB3aGljaCBsZXQgdGhlIHVzZXIgaW50ZXJhY3Qgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICBNVEQgc3Vic3lzdGVtIGluIHRoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGZsYXNoIGRldmljZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtcnQ8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZSBwbHVzIGEgcmVhbC10aW1lIHRlc3Qgc3VpdGUgYW5kCisgICAgICAgICAgICAgICAgdG9vbHMgYXBwcm9wcmlhdGUgZm9yIHJlYWwtdGltZSB1c2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtcnQtc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1ydDwvZmlsZW5hbWU+IGltYWdlIHRoYXQgaW5jbHVkZXMgZXZlcnl0aGluZyBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXRvb2xjaGFpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBhbHNvIGluY2x1ZGVzIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIGxpYnJhcmllcyB0byBmb3JtIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICBzdGFuZC1hbG9uZSBTREsgYW5kIGlzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB1c2luZyB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbWFnZSB3aXRoIFNhdG8gc3VwcG9ydCwgYSBtb2JpbGUgZW52aXJvbm1lbnQgYW5kIHZpc3VhbCBzdHlsZSB0aGF0IHdvcmtzIHdlbGwKKyAgICAgICAgICAgICAgICB3aXRoIG1vYmlsZSBkZXZpY2VzLgorICAgICAgICAgICAgICAgIFRoZSBpbWFnZSBzdXBwb3J0cyBYMTEgd2l0aCBhIFNhdG8gdGhlbWUgYW5kIGFwcGxpY2F0aW9ucyBzdWNoIGFzCisgICAgICAgICAgICAgICAgYSB0ZXJtaW5hbCwgZWRpdG9yLCBmaWxlIG1hbmFnZXIsIG1lZGlhIHBsYXllciwgYW5kIHNvIGZvcnRoLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8tZGV2PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1zYXRvPC9maWxlbmFtZT4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIGhvc3QuCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGluY2x1ZGVzIGxpYnJhcmllcyBuZWVkZWQgdG8gYnVpbGQgYXBwbGljYXRpb25zIG9uIHRoZSBkZXZpY2UgaXRzZWxmLAorICAgICAgICAgICAgICAgIHRlc3RpbmcgYW5kIHByb2ZpbGluZyB0b29scywgYW5kIGRlYnVnIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgVGhpcyBpbWFnZSB3YXMgZm9ybWVybHkgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2RrPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0by1zZGs8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbWFnZSB0aGF0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgaW4gbWV0YS10b29sY2hhaW4uCisgICAgICAgICAgICAgICAgVGhlIGltYWdlIGFsc28gaW5jbHVkZXMgZGV2ZWxvcG1lbnQgaGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBjb21wbGV0ZSBzdGFuZGFsb25lIFNESworICAgICAgICAgICAgICAgIGFuZCBpcyBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIHRhcmdldC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSAibWFzdGVyIiBpbWFnZSBkZXNpZ25lZCB0byBiZSB1c2VkIGZvciBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgImtub3duIGdvb2QiIGltYWdlIHRoYXQgaXMgZGVwbG95ZWQgdG8gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbiBzbyB0aGF0IHlvdSBjYW4gYm9vdCBpbnRvIGl0IGFuZCB1c2UgaXQgdG8gZGVwbG95IGEKKyAgICAgICAgICAgICAgICBzZWNvbmQgaW1hZ2UgdG8gYmUgdGVzdGVkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJ1bnRpbWUgdGVzdGluZyBpbiB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEEgUkFNLWJhc2VkIEluaXRpYWwgUm9vdCBGaWxlc3lzdGVtIChpbml0cmFtZnMpIGltYWdlIHRhaWxvcmVkIGZvcgorICAgICAgICAgICAgICAgIHVzZSB3aXRoIHRoZSA8ZmlsZW5hbWU+Y29yZS1pbWFnZS10ZXN0bWFzdGVyPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2Utd2VzdG9uPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSB2ZXJ5IGJhc2ljIFdheWxhbmQgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsLgorICAgICAgICAgICAgICAgIFRoaXMgaW1hZ2UgcHJvdmlkZXMgdGhlIFdheWxhbmQgcHJvdG9jb2wgbGlicmFyaWVzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICByZWZlcmVuY2UgV2VzdG9uIGNvbXBvc2l0b3IuCisgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nd2F5bGFuZCc+V2F5bGFuZDwvbGluaz4iIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmNvcmUtaW1hZ2UteDExPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQSB2ZXJ5IGJhc2ljIFgxMSBpbWFnZSB3aXRoIGEgdGVybWluYWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnF0NGUtZGVtby1pbWFnZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEFuIGltYWdlIHRoYXQgbGF1bmNoZXMgaW50byB0aGUgZGVtbyBhcHBsaWNhdGlvbiBmb3IgdGhlIGVtYmVkZGVkCisgICAgICAgICAgICAgICAgKG5vdCBiYXNlZCBvbiBYMTEpIHZlcnNpb24gb2YgUXQuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThkZDkwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwtY3VzdG9taXphdGlvbi54c2wKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCistLT4KKworICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9kaXZpc2lvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ3JlZi1zdHlsZS5jc3MnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIiBzZWxlY3Q9IkEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmlkLmF0dHJpYnV0ZXMiIHNlbGVjdD0iMSIgLz4KKworPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjc1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLW1hbnVhbC1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5maXJzdC5zZWN0aW9ucyIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2h1bmsuc2VjdGlvbi5kZXB0aCIgc2VsZWN0PSIxMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVzZS5pZC5hcy5maWxlbmFtZSIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0idWxpbmsudGFyZ2V0IiBzZWxlY3Q9Iidfc2VsZiciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYmFzZS5kaXIiIHNlbGVjdD0iJ2h0bWwvcmVmLW1hbnVhbC8nIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IicuLi9ib29rLmNzcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJlY2xpcHNlLm1hbmlmZXN0IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjcmVhdGUucGx1Z2luLnhtbCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgc2VsZWN0PSIxIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaW5kZXgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNoYXB0ZXIuYXV0b2xhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iYXBwZW5kaXguYXV0b2xhYmVsIj5BPC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCIgc2VsZWN0PSIxIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjRlZGRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1tYW51YWwueG1sCkBAIC0wLDAgKzEsMTYwIEBACis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Ym9vayBpZD0ncmVmLW1hbnVhbCcgbGFuZz0nZW4nCisgICAgICB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIKKyAgICAgIHhtbG5zPSJodHRwOi8vZG9jYm9vay5vcmcvbnMvZG9jYm9vayIKKyAgICAgID4KKyAgICA8Ym9va2luZm8+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0nZmlndXJlcy9wb2t5LXRpdGxlLnBuZycKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdTVkcnCisgICAgICAgICAgICAgICAgICAgIGFsaWduPSdsZWZ0JyBzY2FsZWZpdD0nMScgd2lkdGg9JzEwMCUnLz4KKyAgICAgICAgICAgIDwvaW1hZ2VvYmplY3Q+CisgICAgICAgIDwvbWVkaWFvYmplY3Q+CisKKyAgICAgICAgPHRpdGxlPgorICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlJpY2hhcmQ8L2ZpcnN0bmFtZT4gPHN1cm5hbWU+UHVyZGllPC9zdXJuYW1lPgorICAgICAgICAgICAgICAgIDxhZmZpbGlhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG9yZ25hbWU+TGludXggRm91bmRhdGlvbjwvb3JnbmFtZT4KKyAgICAgICAgICAgICAgICA8L2FmZmlsaWF0aW9uPgorICAgICAgICAgICAgICAgIDxlbWFpbD5yaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPC9lbWFpbD4KKyAgICAgICAgICAgIDwvYXV0aG9yPgorCisgICAgICAgIDwvYXV0aG9yZ3JvdXA+CisKKyAgICAgICAgPHJldmhpc3Rvcnk+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj40LjArZ2l0PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+MjQgTm92ZW1iZXIgMjAxMDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMC45IFJlbGVhc2U8L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjA8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT42IEFwcmlsIDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMC4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+MjMgTWF5IDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMC4xIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS4xPC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+NiBPY3RvYmVyIDIwMTE8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMSBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMjwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTI8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuMiBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuMzwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxMjwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS4zIFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS40PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+QXByaWwgMjAxMzwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS40IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICAgICAgPHJldmlzaW9uPgorICAgICAgICAgICAgICAgIDxyZXZudW1iZXI+MS41PC9yZXZudW1iZXI+CisgICAgICAgICAgICAgICAgPGRhdGU+T2N0b2JlciAyMDEzPC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjUgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjUuMTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkphbnVhcnkgMjAxNDwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS41LjEgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjY8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5BcHJpbCAyMDE0PC9kYXRlPgorICAgICAgICAgICAgICAgIDxyZXZyZW1hcms+UmVsZWFzZWQgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCAxLjYgUmVsZWFzZS48L3JldnJlbWFyaz4KKyAgICAgICAgICAgIDwvcmV2aXNpb24+CisgICAgICAgICAgICA8cmV2aXNpb24+CisgICAgICAgICAgICAgICAgPHJldm51bWJlcj4xLjc8L3Jldm51bWJlcj4KKyAgICAgICAgICAgICAgICA8ZGF0ZT5PY3RvYmVyIDIwMTQ8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuNyBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgICA8L3Jldmhpc3Rvcnk+CisKKyAgICA8Y29weXJpZ2h0PgorICAgICAgPHllYXI+JkNPUFlSSUdIVF9ZRUFSOzwveWVhcj4KKyAgICAgIDxob2xkZXI+TGludXggRm91bmRhdGlvbjwvaG9sZGVyPgorICAgIDwvY29weXJpZ2h0PgorCisgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgPHBhcmE+CisgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudCB1bmRlcgorICAgICAgICB0aGUgdGVybXMgb2YgdGhlIDx1bGluayB0eXBlPSJodHRwIiB1cmw9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC91ay8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMi4wIFVLOiBFbmdsYW5kICZhbXA7IFdhbGVzPC91bGluaz4gYXMgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMuCisgICAgICA8L3BhcmE+CisgICAgICA8bm90ZT4KKyAgICAgICAgICBGb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbWFudWFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlLCBzZWUgdGhlCisgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsnPllvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbDwvdWxpbms+CisgICAgICAgICAgZnJvbSB0aGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlLgorICAgICAgPC9ub3RlPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgICA8L2Jvb2tpbmZvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iaW50cm9kdWN0aW9uLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idXNpbmdwb2t5LnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0iY2xvc2VyLWxvb2sueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ0ZWNobmljYWwtZGV0YWlscy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9Im1pZ3JhdGlvbi54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1zdHJ1Y3R1cmUueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtY2xhc3Nlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi10YXNrcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi1xYS1jaGVja3MueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJyZWYtaW1hZ2VzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLWZlYXR1cmVzLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0icmVmLXZhcmlhYmxlcy54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlZi12YXJsb2NhbGl0eS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9ImZhcS54bWwiLz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InJlc291cmNlcy54bWwiLz4KKworPCEtLSAgICA8aW5kZXggaWQ9J2luZGV4Jz4KKyAgICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPC9pbmRleD4KKy0tPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtcWEtY2hlY2tzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY4OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1xYS1jaGVja3MueG1sCkBAIC0wLDAgKzEsMTIzNSBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1xYS1jaGVja3MnPgorPHRpdGxlPlFBIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC90aXRsZT4KKworPHNlY3Rpb24gaWQ9J3FhLWludHJvZHVjdGlvbic+CisgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBidWlsZGluZyBhIHJlY2lwZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGVyZm9ybXMKKyAgICAgICAgdmFyaW91cyBRQSBjaGVja3Mgb24gdGhlIG91dHB1dCB0byBlbnN1cmUgdGhhdCBjb21tb24gaXNzdWVzIGFyZQorICAgICAgICBkZXRlY3RlZCBhbmQgcmVwb3J0ZWQuCisgICAgICAgIFNvbWV0aW1lcyB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgcmVjaXBlIHRvIGJ1aWxkIG5ldyBzb2Z0d2FyZSwKKyAgICAgICAgaXQgd2lsbCBidWlsZCB3aXRoIG5vIHByb2JsZW1zLgorICAgICAgICBXaGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBvciB3aGVuIHlvdSBoYXZlIFFBIGlzc3VlcyBidWlsZGluZyBhbnkKKyAgICAgICAgc29mdHdhcmUsIGl0IGNvdWxkIHRha2UgYSBsaXR0bGUgdGltZSB0byByZXNvbHZlIHRoZW0uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFdoaWxlIGl0IGlzIHRlbXB0aW5nIHRvIGlnbm9yZSBhIFFBIG1lc3NhZ2Ugb3IgZXZlbiB0bworICAgICAgICBkaXNhYmxlIFFBIGNoZWNrcywgaXQgaXMgYmVzdCB0byB0cnkgYW5kIHJlc29sdmUgYW55CisgICAgICAgIHJlcG9ydGVkIFFBIGlzc3Vlcy4KKyAgICAgICAgVGhpcyBjaGFwdGVyIHByb3ZpZGVzIGEgbGlzdCBvZiB0aGUgUUEgbWVzc2FnZXMgYW5kIGJyaWVmIGV4cGxhbmF0aW9ucworICAgICAgICBvZiB0aGUgaXNzdWVzIHlvdSBjb3VsZCBlbmNvdW50ZXIgc28gdGhhdCB5b3UgY2FuIHByb3Blcmx5IHJlc29sdmUKKyAgICAgICAgcHJvYmxlbXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBuZXh0IHNlY3Rpb24gcHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBRQSBlcnJvciBhbmQgd2FybmluZworICAgICAgICBtZXNzYWdlcyBiYXNlZCBvbiBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgRWFjaCBlbnRyeSBwcm92aWRlcyB0aGUgbWVzc2FnZSBvciBlcnJvciBmb3JtIGFsb25nIHdpdGggYW4KKyAgICAgICAgZXhwbGFuYXRpb24uCisgICAgICAgIDxub3RlPgorICAgICAgICAgICAgPHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBdCB0aGUgZW5kIG9mIGVhY2ggbWVzc2FnZSwgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgUUEgdGVzdCAoYXMgbGlzdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24pIGFwcGVhcnMgd2l0aGluIHNxdWFyZSBicmFja2V0cy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoaXMgbGlzdCBvZiBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlcyBpcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgUUEgY2hlY2tzIG9ubHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IGRvZXMgbm90IGNvdmVyIGFsbCBwb3NzaWJsZSBidWlsZCBlcnJvcnMgb3IKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MgeW91IGNvdWxkIGVuY291bnRlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHNvbWUgUUEgY2hlY2tzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LCB0aGlzIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgaW5jbHVkZSBhbGwgcG9zc2libGUgUUEgY2hlY2sgZXJyb3JzIGFuZCB3YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9ub3RlPgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3FhLWVycm9ycy1hbmQtd2FybmluZ3MnPgorICAgIDx0aXRsZT5FcnJvcnMgYW5kIFdhcm5pbmdzPC90aXRsZT4KKworPCEtLQorVGhpcyBzZWN0aW9uIHVzZXMgdGhlIDxwYXJhPjxjb2RlPiBjb25zdHJ1Y3QgdG8gZW5hYmxlIHBlcm1hbGlua3MgZm9yIHRoZQordmFyaW91cyBRQSBpc3N1ZSBhbmQgd2FybmluZyBtZXNzYWdlcy4gIFRoZSBmaWxlIHRlbXBsYXRlcy9xYS1jb2RlLXBlcm1hbGlua3MueHNsCitpcyB1c2VkIHRvIGxvY2F0ZSB0aGUgY29uc3RydWN0IGFuZCBnZW5lcmF0ZSB0aGUgcGVybWFsaW5rLiAgVGhpcyBzb2x1dGlvbgorbGV2ZXJhZ2VzIHRoZSBmYWN0IHRoYXQgcmlnaHQgbm93IHRoaXMgc2VjdGlvbiBpbiB0aGUgcmVmLW1hbnVhbCBpcyB0aGUgb25seQorcGxhY2UgaXMgYWxsIHRoZSBZUCBkb2NzIHRoYXQgdXNlcyB0aGUgPHBhcmE+PGNvZGU+IGNvbnN0cnVjdC4gIElmLCBpbiB0aGUKK2Z1dHVyZSwgdGhhdCBjb25zdHJ1Y3Qgd2VyZSB0byBhcHBlYXIgaW4gdGhlIHJlZi1tYW51YWwsIGEgZ2VuZXJpYyBwZXJtYWxpbmsKK3dvdWxkIGJlIGdlbmVyYXRlZCBmb3IgdGhlIHRleHQgYmV0d2VlbiA8Y29kZT48L2NvZGU+LiAgSWYgYSBiZXR0ZXIgc29sdXRpb24KK2NhbiBiZSBmb3VuZCB0aGVuIGl0IHNob3VsZCBiZSBpbXBsZW1lbnRlZC4gIEkgY2FuJ3QgZmluZCBvbmUgYXQgdGhlIG1vbWVudC4KKy0tPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWxpYmV4ZWMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OzogJmx0O3BhdGgmZ3Q7IGlzIHVzaW5nIGxpYmV4ZWMgcGxlYXNlIHJlbG9jYXRlIHRvICZsdDtsaWJleGVjZGlyJmd0OyBbbGliZXhlY10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIHBhY2thZ2UgY29udGFpbnMgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+bGliZXhlY2RpcjwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICAiJHtsaWJkaXJ9LyR7QlBOfSIgcmF0aGVyIHRoYW4gdG8gIi91c3IvbGliZXhlYyIuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGluc3RhbGxpbmcgdG8gPGZpbGVuYW1lPi91c3IvbGliZXhlYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGxpa2VseSBub3QgZGVzaXJhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtcnBhdGhzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIHBhY2thZ2UgJmx0O3BhY2thZ2VuYW1lJmd0OyBjb250YWlucyBiYWQgUlBBVEggJmx0O3JwYXRoJmd0OyBpbiBmaWxlICZsdDtmaWxlJmd0OyBbcnBhdGhzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgYmluYXJ5IHByb2R1Y2VkIGJ5IHRoZSByZWNpcGUgY29udGFpbnMgZHluYW1pYworICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IGxvYWQgcGF0aHMgKHJwYXRocykgdGhhdCBjb250YWluIGJ1aWxkIHN5c3RlbSBwYXRocworICAgICAgICAgICAgICAgICAgICBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBpbmNvcnJlY3QgZm9yIHRoZSB0YXJnZXQgYW5kIGNvdWxkIHBvdGVudGlhbGx5CisgICAgICAgICAgICAgICAgICAgIGJlIGEgc2VjdXJpdHkgaXNzdWUuCisgICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBiYWQgPGZpbGVuYW1lPi1ycGF0aDwvZmlsZW5hbWU+IG9wdGlvbnMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgcGFzc2VkIHRvIHRoZSBsaW5rZXIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nLgorICAgICAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGJ1aWxkIHN5c3RlbSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCwgdGhlcmUgbWlnaHQgYmUgYSBjb25maWd1cmUgb3B0aW9uIHRvIGRpc2FibGUgcnBhdGgKKyAgICAgICAgICAgICAgICAgICAgdXNhZ2UgY29tcGxldGVseSB3aXRoaW4gdGhlIGJ1aWxkIG9mIHRoZSBzb2Z0d2FyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXVzZWxlc3MtcnBhdGhzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6ICZsdDtmaWxlJmd0OyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggJmx0O3JwYXRoJmd0OyBbdXNlbGVzcy1ycGF0aHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBiaW5hcnkgcHJvZHVjZWQgYnkgdGhlIHJlY2lwZSBjb250YWlucyBkeW5hbWljCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgbG9hZCBwYXRocyAocnBhdGhzKSB0aGF0IG9uIGEgc3RhbmRhcmQgc3lzdGVtIGFyZQorICAgICAgICAgICAgICAgICAgICBzZWFyY2hlZCBieSBkZWZhdWx0IGJ5IHRoZSBsaW5rZXIgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBXaGlsZSB0aGVzZSBwYXRocyB3aWxsIG5vdCBjYXVzZSBhbnkgYnJlYWthZ2UsIHRoZXkgZG8gd2FzdGUKKyAgICAgICAgICAgICAgICAgICAgc3BhY2UgYW5kIGFyZSB1bm5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQsIHRoZXJlIG1pZ2h0IGJlIGEgY29uZmlndXJlIG9wdGlvbiB0byBkaXNhYmxlIHJwYXRoCisgICAgICAgICAgICAgICAgICAgIHVzYWdlIGNvbXBsZXRlbHkgd2l0aGluIHRoZSBidWlsZCBvZiB0aGUgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1maWxlLXJkZXBzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgcmVxdWlyZXMgJmx0O2ZpbGVzJmd0OywgYnV0IG5vIHByb3ZpZGVycyBpbiBpdHMgUkRFUEVORFMgW2ZpbGUtcmRlcHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBmaWxlLWxldmVsIGRlcGVuZGVuY3kgaGFzIGJlZW4gaWRlbnRpZmllZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgcGFja2FnZSBvbiB0aGUgc3BlY2lmaWVkIGZpbGVzLCBidXQgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgICAgbm8gZXhwbGljaXQgY29ycmVzcG9uZGluZyBlbnRyeSBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgcGFydGljdWxhciBmaWxlcyBhcmUgcmVxdWlyZWQgYXQgcnVudGltZSB0aGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHNob3VsZCBiZSBkZWNsYXJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHRvIGVuc3VyZSB0aGUgcGFja2FnZXMgcHJvdmlkaW5nIHRoZW0gYXJlIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYnVpbGQtZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUxJmd0OyByZGVwZW5kcyBvbiAmbHQ7cGFja2FnZW5hbWUyJmd0OywgYnV0IGl0IGlzbid0IGEgYnVpbGQgZGVwZW5kZW5jeT8gW2J1aWxkLWRlcHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBydW50aW1lIGRlcGVuZGVuY3kgZXhpc3RzIGJldHdlZW4gdGhlIHR3byBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMsIGJ1dCB0aGVyZSBpcyBub3RoaW5nIGV4cGxpY2l0IHdpdGhpbiB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIHRvIGVuYWJsZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IGlzIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gaXMgdXN1YWxseSB0cmlnZ2VyZWQgYnkgYW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgYmVpbmcgYWRkZWQgYXQgdGhlIHBhY2thZ2luZyBzdGFnZSByYXRoZXIgdGhhbiB1cAorICAgICAgICAgICAgICAgICAgICBmcm9udCwgd2hpY2ggaXMgdXN1YWxseSBhdXRvbWF0aWMgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB5b3Ugc2hvdWxkIGNoYW5nZSB0aGUgcmVjaXBlIHRvIGFkZCBhbgorICAgICAgICAgICAgICAgICAgICBleHBsaWNpdCA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBmb3IgdGhlIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1kZXYtc28nPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgbm9uIC1kZXYvLWRiZy9uYXRpdmVzZGstIHBhY2thZ2UgY29udGFpbnMgc3ltbGluayAuc286ICZsdDtwYWNrYWdlbmFtZSZndDsgcGF0aCAnJmx0O3BhdGgmZ3Q7JyBbZGV2LXNvXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN5bWxpbmsgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzIGFyZSBmb3IgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgb25seSwgYW5kIHNob3VsZCB0aGVyZWZvcmUgZ28gaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNpdHVhdGlvbiBtaWdodCBvY2N1ciBpZiB5b3UgYWRkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNvKjwvZmlsZW5hbWU+IHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLnNvLio8L2ZpbGVuYW1lPiB0byBhIG5vbi1kZXYgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQ2hhbmdlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChhbmQgcG9zc2libHkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggdGhhdCB0aGUgc3BlY2lmaWVkIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlIGdvZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+LWRldjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1zdGF0aWNkZXYnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgbm9uIC1zdGF0aWNkZXYgcGFja2FnZSBjb250YWlucyBzdGF0aWMgLmEgbGlicmFyeTogJmx0O3BhY2thZ2VuYW1lJmd0OyBwYXRoICcmbHQ7cGF0aCZndDsnIFtzdGF0aWNkZXZdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3RhdGljIDxmaWxlbmFtZT4uYTwvZmlsZW5hbWU+IGxpYnJhcnkgZmlsZXMgc2hvdWxkIGdvIGludG8KKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+LXN0YXRpY2RldjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIENoYW5nZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVMnPjxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAoYW5kIHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICBzdWNoIHRoYXQgdGhlIHNwZWNpZmllZCA8ZmlsZW5hbWU+LmE8L2ZpbGVuYW1lPiBmaWxlIGdvZXMKKyAgICAgICAgICAgICAgICAgICAgaW50byBhbiBhcHByb3ByaWF0ZSA8ZmlsZW5hbWU+LXN0YXRpY2RldjwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1saWJkaXInPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OzogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbiBbbGliZGlyXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgZmlsZSBtYXkgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbnRvIGFuIGluY29ycmVjdAorICAgICAgICAgICAgICAgICAgICAocG9zc2libHkgaGFyZGNvZGVkKSBpbnN0YWxsYXRpb24gcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgdGVzdCB3aWxsIGNhdGNoIHJlY2lwZXMgdGhhdCBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbGliL2Jhci5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7YmFzZV9saWJkaXJ9PC9maWxlbmFtZT4gaXMgImxpYjMyIi4KKyAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBleGFtcGxlIGlzIHdoZW4gcmVjaXBlcyBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xpYjY0L2Zvby5zbzwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7bGliZGlyfTwvZmlsZW5hbWU+IGlzICIvdXNyL2xpYiIuCisgICAgICAgICAgICAgICAgICAgIEZhbHNlIHBvc2l0aXZlcyBvY2Nhc2lvbmFsbHkgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgIEZvciB0aGVzZSBjYXNlcyBhZGQgImxpYmRpciIgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlOU0FORV9TS0lQJz48ZmlsZW5hbWU+SU5TQU5FX1NLSVA8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGVidWctZmlsZXMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgbm9uIGRlYnVnIHBhY2thZ2UgY29udGFpbnMgLmRlYnVnIGRpcmVjdG9yeTogJmx0O3BhY2thZ2VuYW1lJmd0OyBwYXRoICZsdDtwYXRoJmd0OyBbZGVidWctZmlsZXNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBwYWNrYWdlIGNvbnRhaW5zIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBhcHBlYXIgaW4gYW55dGhpbmcgYnV0IHRoZSA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIG1pZ2h0IG9jY3VyIGlmIHlvdSBhZGQgYSBwYXRoIHdoaWNoIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQgZG8gbm90CisgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0bHkgYWRkIHRoZSA8ZmlsZW5hbWU+LmRlYnVnPC9maWxlbmFtZT4gZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGFkZCB0aGUgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBleHBsaWNpdGx5IHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfS1kYmc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXJjaCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBBcmNoaXRlY3R1cmUgZGlkIG5vdCBtYXRjaCAoJmx0O21hY2hpbmVfYXJjaCZndDsgdG8gJmx0O2ZpbGVfYXJjaCZndDspIG9uICZsdDtmaWxlJmd0OyBbYXJjaF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjaGVja3MgdGhlCisgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGFibGUgYW5kIExpbmthYmxlIEZvcm1hdCAoRUxGKSB0eXBlLCBiaXQgc2l6ZSwgYW5kCisgICAgICAgICAgICAgICAgICAgIGVuZGlhbm5lc3Mgb2YgYW55IGJpbmFyaWVzIHRvIGVuc3VyZSB0aGV5IG1hdGNoIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHRlc3QgZmFpbHMgaWYgYW55IGJpbmFyaWVzIGRvIG5vdCBtYXRjaCB0aGUgdHlwZSBzaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGVyZSB3b3VsZCBiZSBhbiBpbmNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvdWxkIGluZGljYXRlIHRoYXQgdGhlIHdyb25nIGNvbXBpbGVyIG9yIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaGF2ZSBiZWVuIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBzb2Z0d2FyZSwgbGlrZSBib290bG9hZGVycywgbWlnaHQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBieXBhc3MgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGUgeW91IHJlY2VpdmUgdGhlIGVycm9yIGZvciBpcyBmaXJtd2FyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCB3aXRoaW4gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIG9yIGlzIGludGVuZGVkIHRvIHJ1biBvbiBhIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciB3aXRoaW4gdGhlIGRldmljZSwgeW91IGNhbiBhZGQgImFyY2giIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBvcHRpb24gaXMgdG8gY2hlY2sgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBsb2cgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb21waWxlciBvcHRpb25zIGJlaW5nIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1hcmNoLWJpdC1zaXplLW5vLW1hdGNoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEJpdCBzaXplIGRpZCBub3QgbWF0Y2ggKCZsdDttYWNoaW5lX2JpdHMmZ3Q7IHRvICZsdDtmaWxlX2JpdHMmZ3Q7KSAmbHQ7cmVjaXBlJmd0OyBvbiAmbHQ7ZmlsZSZndDsgW2FyY2hdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2hlY2tzCisgICAgICAgICAgICAgICAgICAgIHRoZSBFeGVjdXRhYmxlIGFuZCBMaW5rYWJsZSBGb3JtYXQgKEVMRikgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgYml0IHNpemUsIGFuZCBlbmRpYW5uZXNzIG9mIGFueSBiaW5hcmllcyB0byBlbnN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhleSBtYXRjaCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0IGZhaWxzIGlmIGFueSBiaW5hcmllcyBkbyBub3QgbWF0Y2ggdGhlIHR5cGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgdGhlcmUgd291bGQgYmUgYW4gaW5jb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgICAgICAgICBUaGUgdGVzdCBjb3VsZCBpbmRpY2F0ZSB0aGF0IHRoZSB3cm9uZyBjb21waWxlciBvciBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGhhdmUgYmVlbiB1c2VkLgorICAgICAgICAgICAgICAgICAgICBTb21ldGltZXMgc29mdHdhcmUsIGxpa2UgYm9vdGxvYWRlcnMsIG1pZ2h0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgYnlwYXNzIHRoaXMgY2hlY2suCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBmaWxlIHlvdSByZWNlaXZlIHRoZSBlcnJvciBmb3IgaXMgZmlybXdhcmUgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBvciBpcyBpbnRlbmRlZCB0byBydW4gb24gYSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3Igd2l0aGluIHRoZSBkZXZpY2UsIHlvdSBjYW4gYWRkICJhcmNoIiB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEFub3RoZXIgb3B0aW9uIGlzIHRvIGNoZWNrIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgbG9nIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY29tcGlsZXIgb3B0aW9ucyBiZWluZyB1c2VkIGFyZQorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtYXJjaC1lbmRpYW5uZXNzLW5vLW1hdGNoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEVuZGlhbm5lc3MgZGlkIG5vdCBtYXRjaCAoJmx0O21hY2hpbmVfZW5kaWFubmVzcyZndDsgdG8gJmx0O2ZpbGVfZW5kaWFubmVzcyZndDspIG9uICZsdDtmaWxlJmd0OyBbYXJjaF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgdGhlIEV4ZWN1dGFibGUgYW5kIExpbmthYmxlIEZvcm1hdCAoRUxGKSB0eXBlLCBiaXQKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYW5kIGVuZGlhbm5lc3Mgb2YgYW55IGJpbmFyaWVzIHRvIGVuc3VyZSB0aGV5CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHRlc3QgZmFpbHMgaWYgYW55IGJpbmFyaWVzIGRvIG5vdCBtYXRjaCB0aGUgdHlwZSBzaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGVyZSB3b3VsZCBiZSBhbiBpbmNvbXBhdGliaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGNvdWxkIGluZGljYXRlIHRoYXQgdGhlIHdyb25nIGNvbXBpbGVyIG9yIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgaGF2ZSBiZWVuIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyBzb2Z0d2FyZSwgbGlrZSBib290bG9hZGVycywgbWlnaHQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICBieXBhc3MgdGhpcyBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGZpbGUgeW91IHJlY2VpdmUgdGhlIGVycm9yIGZvciBpcyBmaXJtd2FyZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCB3aXRoaW4gdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtIG9yIGlzIGludGVuZGVkIHRvIHJ1biBvbiBhIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciB3aXRoaW4gdGhlIGRldmljZSwgeW91IGNhbiBhZGQgImFyY2giIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTlNBTkVfU0tJUCc+PGZpbGVuYW1lPklOU0FORV9TS0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBvcHRpb24gaXMgdG8gY2hlY2sgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBsb2cgYW5kIHZlcmlmeSB0aGF0IHRoZSBjb21waWxlciBvcHRpb25zIGJlaW5nIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS10ZXh0cmVsJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEVMRiBiaW5hcnkgJyZsdDtmaWxlJmd0OycgaGFzIHJlbG9jYXRpb25zIGluIC50ZXh0IFt0ZXh0cmVsXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgRUxGIGJpbmFyeSBjb250YWlucyByZWxvY2F0aW9ucyBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi50ZXh0PC9maWxlbmFtZT4gc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGNhbiByZXN1bHQgaW4gYSBwZXJmb3JtYW5jZSBpbXBhY3QKKyAgICAgICAgICAgICAgICAgICAgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB0aGUgd2F5IHRvIHNvbHZlIHRoaXMgcGVyZm9ybWFuY2UgaXNzdWUgaXMgdG8KKyAgICAgICAgICAgICAgICAgICAgYWRkICItZlBJQyIgb3IgIi1mcGljIiB0byB0aGUgY29tcGlsZXIgY29tbWFuZC1saW5lCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBnaXZlbiBzb2Z0d2FyZSB0aGF0IHJlYWRzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgYnVpbGQgaXQsIHlvdSBjb3VsZCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGV4dCByZWxvY2F0aW9ucyBhdCBydW50aW1lLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5ha2thZGlhLm9yZy9kcmVwcGVyL3RleHRyZWxvY3MuaHRtbCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1sZGZsYWdzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIE5vIEdOVV9IQVNIIGluIHRoZSBlbGYgYmluYXJ5OiAnJmx0O2ZpbGUmZ3Q7JyBbbGRmbGFnc10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGluZGljYXRlcyB0aGF0IGJpbmFyaWVzIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBoYXZlIG5vdCBiZWVuIGxpbmtlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBwcm92aWRlZCBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBDaGVjayB0byBiZSBzdXJlIHRoYXQgdGhlIDxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgYmVpbmcgcGFzc2VkIHRvIHRoZSBsaW5rZXIgY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgQSBjb21tb24gd29ya2Fyb3VuZCBmb3IgdGhpcyBzaXR1YXRpb24gaXMgdG8gcGFzcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0NfQVJDSCc+PGZpbGVuYW1lPlRBUkdFVF9DQ19BUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXhvcmctZHJpdmVyLWFiaSc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBQYWNrYWdlICZsdDtwYWNrYWdlbmFtZSZndDsgY29udGFpbnMgWG9yZyBkcml2ZXIgKCZsdDtkcml2ZXImZ3Q7KSBidXQgbm8geG9yZy1hYmktIGRlcGVuZGVuY2llcyBbeG9yZy1kcml2ZXItYWJpXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcGFja2FnZSBjb250YWlucyBhbiBYb3JnIGRyaXZlciwgYnV0IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGhhdmUgYSBjb3JyZXNwb25kaW5nIEFCSSBwYWNrYWdlIGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgICAgIFRoZSB4c2VydmVyLXhvcmcgcmVjaXBlIHByb3ZpZGVzIGRyaXZlciBBQkkgbmFtZXMuCisgICAgICAgICAgICAgICAgICAgIEFsbCBkcml2ZXJzIHNob3VsZCBkZXBlbmQgb24gdGhlIEFCSSB2ZXJzaW9ucyB0aGF0IHRoZXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICBiZWVuIGJ1aWx0IGFnYWluc3QuCisgICAgICAgICAgICAgICAgICAgIERyaXZlciByZWNpcGVzIHRoYXQgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+eG9yZy1kcml2ZXItaW5wdXQuaW5jPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnhvcmctZHJpdmVyLXZpZGVvLmluYzwvZmlsZW5hbWU+IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBnZXQgdGhlc2UgdmVyc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHNob3VsZCBvbmx5IG5lZWQgdG8gZXhwbGljaXRseSBhZGQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzIHRvIGJpbmFyeSBkcml2ZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWluZm9kaXInPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgVGhlIC91c3Ivc2hhcmUvaW5mby9kaXIgZmlsZSBpcyBub3QgbWVhbnQgdG8gYmUgc2hpcHBlZCBpbiBhIHBhcnRpY3VsYXIgcGFja2FnZS4gW2luZm9kaXJdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT4vdXNyL3NoYXJlL2luZm8vZGlyPC9maWxlbmFtZT4gc2hvdWxkIG5vdCBiZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlZC4KKyAgICAgICAgICAgICAgICAgICAgQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIG9yIHRvIHlvdXIgPGZpbGVuYW1lPmRvX2luc3RhbGxfYXBwZW5kPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIHRoZSByZWNpcGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBybSAke0R9JHtpbmZvZGlyfS9kaXIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtc3ltbGluay10by1zeXNyb290Jz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIFN5bWxpbmsgJmx0O3BhdGgmZ3Q7IGluICZsdDtwYWNrYWdlbmFtZSZndDsgcG9pbnRzIHRvIFRNUERJUiBbc3ltbGluay10by1zeXNyb290XQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgc3ltbGluayBwb2ludHMgaW50bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBob3N0LgorICAgICAgICAgICAgICAgICAgICBTdWNoIHN5bWxpbmtzIHdpbGwgd29yayBvbiB0aGUgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhleSBhcmUgY2xlYXJseSBpbnZhbGlkIHdoZW4gcnVubmluZyBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGVpdGhlciBjb3JyZWN0IHRoZSBzeW1saW5rIHRvIHVzZSBhIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgICAgIHBhdGggb3IgcmVtb3ZlIHRoZSBzeW1saW5rLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtbGEnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O2ZpbGUmZ3Q7IGZhaWxlZCBzYW5pdHkgdGVzdCAod29ya2RpcikgaW4gcGF0aCAmbHQ7cGF0aCZndDsgW2xhXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgPGZpbGVuYW1lPi5sYTwvZmlsZW5hbWU+IGZpbGUgY29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgQW55IDxmaWxlbmFtZT4ubGE8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5jb3JyZWN0IHNpbmNlIDxmaWxlbmFtZT5saWJ0b29sPC9maWxlbmFtZT4gYWRkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdCBzeXNyb290IHByZWZpeCB3aGVuIHVzaW5nIHRoZSBmaWxlcyBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXBrZ2NvbmZpZyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7ZmlsZSZndDsgZmFpbGVkIHNhbml0eSB0ZXN0ICh0bXBkaXIpIGluIHBhdGggJmx0O3BhdGgmZ3Q7IFtwa2djb25maWddCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCA8ZmlsZW5hbWU+LnBjPC9maWxlbmFtZT4gZmlsZSBjb250YWlucworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPi88L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBwYXRocy4KKyAgICAgICAgICAgICAgICAgICAgQW55IDxmaWxlbmFtZT4ucGM8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5pbmcgdGhlc2UgcGF0aHMgaXMKKyAgICAgICAgICAgICAgICAgICAgaW5jb3JyZWN0IHNpbmNlIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gaXRzZWxmIGFkZHMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlY3Qgc3lzcm9vdCBwcmVmaXggd2hlbiB0aGUgZmlsZXMgYXJlIGFjY2Vzc2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGVidWctZGVwcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cGFja2FnZW5hbWUmZ3Q7IHJkZXBlbmRzIG9uICZsdDtkZWJ1Z19wYWNrYWdlbmFtZSZndDsgW2RlYnVnLWRlcHNdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSBkZXBlbmRlbmN5IGV4aXN0cyBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgbm9uLWRiZyBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIChpLmUuIGEgcGFja2FnZSB3aG9zZSBuYW1lIGRvZXMgbm90IGVuZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LWRiZzwvZmlsZW5hbWU+KSBhbmQgYSBwYWNrYWdlIHRoYXQgaXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyBjb250YWluCisgICAgICAgICAgICAgICAgICAgIGRlYnVnIHN5bWJvbHMgYW5kIGFyZSBicm91Z2h0IGluIHVzaW5nIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IG1ldGhvZHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgdGhlIDxmaWxlbmFtZT5kYmctcGtnczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcyBhIGRlcGVuZGVuY3kgb2YgYW5vdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlIHRoYXQgd2FzIGJyb3VnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB1c2luZyBvbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVwZW5kZW5jeSBtaWdodCBoYXZlIGJlZW4gYXV0b21hdGljYWxseSBhZGRlZAorICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSA8ZmlsZW5hbWU+ZGJnPC9maWxlbmFtZT4gcGFja2FnZSBlcnJvbmVvdXNseQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBmaWxlcyB0aGF0IGl0IHNob3VsZCBub3QgY29udGFpbiAoZS5nLiBhCisgICAgICAgICAgICAgICAgICAgIG5vbi1zeW1saW5rIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlKSBvciBpdCBtaWdodAorICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gYWRkZWQgbWFudWFsbHkgKGUuZy4gYnkgYWRkaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWRldi1kZXBzJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgcmRlcGVuZHMgb24gJmx0O2Rldl9wYWNrYWdlbmFtZSZndDsgW2Rldi1kZXBzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgZGVwZW5kZW5jeSBleGlzdHMgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG5vbi1kZXYgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAoYSBwYWNrYWdlIHdob3NlIG5hbWUgZG9lcyBub3QgZW5kIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tZGV2PC9maWxlbmFtZT4pIGFuZCBhIHBhY2thZ2UgdGhhdCBpcyBhCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRldjwvZmlsZW5hbWU+IHBhY2thZ2VzIGNvbnRhaW4gZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVycyBhbmQgYXJlIHVzdWFsbHkgYnJvdWdodCBpbiB1c2luZyBzZXZlcmFsIGRpZmZlcmVudAorICAgICAgICAgICAgICAgICAgICBtZXRob2RzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSA8ZmlsZW5hbWU+ZGV2LXBrZ3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfSU5TVEFMTCc+PGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgYSBkZXBlbmRlbmN5IG9mIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGV2PC9maWxlbmFtZT4gcGFja2FnZSB0aGF0IHdhcyBicm91Z2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdXNpbmcgb25lIG9mIHRoZSBhYm92ZSBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgbWlnaHQgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgYWRkZWQgKGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5kZXY8L2ZpbGVuYW1lPiBwYWNrYWdlIGVycm9uZW91c2x5IGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZlIChlLmcuIGEgbm9uLXN5bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGUpIG9yIGl0IG1pZ2h0IGhhdmUgYmVlbiBhZGRlZAorICAgICAgICAgICAgICAgICAgICBtYW51YWxseSAoZS5nLiBieSBhZGRpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtZGVwLWNtcCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7dmFyJmd0O18mbHQ7cGFja2FnZW5hbWUmZ3Q7IGlzIGludmFsaWQ6ICZsdDtjb21wYXJpc29uJmd0OyAoJmx0O3ZhbHVlJmd0OykgICBvbmx5IGNvbXBhcmlzb25zICZsdDssID0sICZndDssICZsdDs9LCBhbmQgJmd0Oz0gYXJlIGFsbG93ZWQgW2RlcC1jbXBdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBhZGRpbmcgYSB2ZXJzaW9uZWQgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgdG8gb25lCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZXBlbmRlbmN5IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlBST1ZJREVTJz48ZmlsZW5hbWU+UlBST1ZJREVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFUExBQ0VTJz48ZmlsZW5hbWU+UlJFUExBQ0VTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgICAgICB5b3UgbXVzdCBvbmx5IHVzZSB0aGUgbmFtZWQgY29tcGFyaXNvbiBvcGVyYXRvcnMuCisgICAgICAgICAgICAgICAgICAgIENoYW5nZSB0aGUgdmVyc2lvbmVkIGRlcGVuZGVuY3kgdmFsdWVzIHlvdSBhcmUgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIG1hdGNoIHRob3NlIGxpc3RlZCBpbiB0aGUgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLWNvbXBpbGUtaG9zdC1wYXRoJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtyZWNpcGVuYW1lJmd0OzogVGhlIGNvbXBpbGUgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuIFBsZWFzZSBjaGVjayB0aGUgbG9nICcmbHQ7bG9nZmlsZSZndDsnIGZvciBtb3JlIGluZm9ybWF0aW9uLiBbY29tcGlsZS1ob3N0LXBhdGhdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb21waWxlJz48ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGluZGljYXRlcyB0aGF0IHBhdGhzIG9uIHRoZSBob3N0IHdlcmUgc2VhcmNoZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVzLCB3aGljaCBpcyBub3QgYXBwcm9wcmlhdGUgd2hlbiBjcm9zcy1jb21waWxpbmcuCisgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yICJpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIiBvciAiQ1JPU1MgQ09NUElMRQorICAgICAgICAgICAgICAgICAgICBCYWRuZXNzIiBpbiB0aGUgc3BlY2lmaWVkIGxvZyBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtaW5zdGFsbC1ob3N0LXBhdGgnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3JlY2lwZW5hbWUmZ3Q7OiBUaGUgaW5zdGFsbCBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgJyZsdDtsb2dmaWxlJmd0OycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFtpbnN0YWxsLWhvc3QtcGF0aF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9nIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW5kaWNhdGVzIHRoYXQgcGF0aHMgb24gdGhlIGhvc3Qgd2VyZSBzZWFyY2hlZAorICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZXMsIHdoaWNoIGlzIG5vdCBhcHByb3ByaWF0ZSB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgImlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24iCisgICAgICAgICAgICAgICAgICAgIG9yICJDUk9TUyBDT01QSUxFIEJhZG5lc3MiIGluIHRoZSBzcGVjaWZpZWQgbG9nIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1hdXRvY29uZi1sb2cnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywgaXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRlcm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLiBSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICcmbHQ7cGF0aCZndDsnCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvZyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBpbmRpY2F0ZXMgdGhhdCBwYXRocyBvbiB0aGUgaG9zdCB3ZXJlIHNlYXJjaGVkCisgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlcywgd2hpY2ggaXMgbm90IGFwcHJvcHJpYXRlIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorICAgICAgICAgICAgICAgICAgICBMb29rIGZvciAiaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbiIgb3IKKyAgICAgICAgICAgICAgICAgICAgIkNST1NTIENPTVBJTEUgQmFkbmVzcyIgaW4gdGhlIHNwZWNpZmllZCBsb2cgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXBrZ25hbWUnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OyBkb2Vzbid0IG1hdGNoIHRoZSBbYS16MC05ListXSsgcmVnZXggW3BrZ25hbWVdCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnZlbnRpb24gd2l0aGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIChzb21ldGltZXMgZW5mb3JjZWQgYnkgdGhlIHBhY2thZ2UgbWFuYWdlciBpdHNlbGYpIGlzIHRvCisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUgdGhhdCBwYWNrYWdlIG5hbWVzIGFyZSBhbGwgbG93ZXIgY2FzZQorICAgICAgICAgICAgICAgICAgICBhbmQgdG8gYWxsb3cgYSByZXN0cmljdGVkIHNldCBvZiBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIHJlY2lwZSBuYW1lIGRvZXMgbm90IG1hdGNoIHRoaXMsIG9yIHlvdSBhZGQKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkbyBub3QgY29uZm9ybSB0byB0aGUgY29udmVudGlvbiwgdGhlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2lsbCByZWNlaXZlIHRoaXMgZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIFJlbmFtZSB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgT3IsIGlmIHlvdSBoYXZlIGFkZGVkIGEgbm9uLWNvbmZvcm1pbmcgcGFja2FnZSBuYW1lIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+LCBjaGFuZ2UgdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAmbmJzcDsKKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8cGFyYSBpZD0ncWEtaXNzdWUtdW5rbm93bi1jb25maWd1cmUtb3B0aW9uJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtyZWNpcGUmZ3Q7OiBjb25maWd1cmUgd2FzIHBhc3NlZCB1bnJlY29nbml6ZWQgb3B0aW9uczogJmx0O29wdGlvbnMmZ3Q7IFt1bmtub3duLWNvbmZpZ3VyZS1vcHRpb25dCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgcmVwb3J0aW5nIHRoYXQgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSB1bnJlY29nbml6ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2l0dWF0aW9uIGNvdWxkIGJlIGJlY2F1c2UgdGhlIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgd2VyZSBwcmV2aW91c2x5IHZhbGlkIGJ1dCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICBPciwgdGhlcmUgd2FzIGEgbWlzdGFrZSB3aGVuIHRoZSBvcHRpb25zIHdlcmUgYWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZXJlIGlzIGFub3RoZXIgb3B0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFyZSB1bnN1cmUsIGNvbnN1bHQgdGhlIHVwc3RyZWFtIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50YXRpb24sIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Li9jb25maWd1cmUgLS1oZWxwPC9maWxlbmFtZT4gb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHVwc3RyZWFtIGNoYW5nZSBsb2cgb3IgcmVsZWFzZSBub3Rlcy4KKyAgICAgICAgICAgICAgICAgICAgT25jZSB5b3UgaGF2ZSB3b3JrZWQgb3V0IHdoYXQgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSBpcywgeW91IGNhbiB1cGRhdGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvciB0aGUgaW5kaXZpZHVhbAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRUNPTkZJRyc+PGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uIHZhbHVlcyBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLXBuLW92ZXJyaWRlcyc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICBSZWNpcGUgJmx0O3JlY2lwZWZpbGUmZ3Q7IGhhcyBQTiBvZiAiJmx0O3JlY2lwZW5hbWUmZ3Q7IiB3aGljaCBpcyBpbiBPVkVSUklERVMsIHRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW9yLiBbcG4tb3ZlcnJpZGVzXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpZWQgcmVjaXBlIGhhcyBhIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSB0aGF0IGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgaXMgbmFtZWQgc3VjaCB0aGF0IGl0cyA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtYXRjaGVzIHNvbWV0aGluZyBhbHJlYWR5IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiAoZS5nLiA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgICAgICAgICAgaXQgY2FuIGhhdmUgdW5leHBlY3RlZCBjb25zZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3NpZ25tZW50cyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU18ke1BOfSA9ICJ4eXoiPC9maWxlbmFtZT4gZWZmZWN0aXZlbHkKKyAgICAgICAgICAgICAgICAgICAgdHVybiBpbnRvIDxmaWxlbmFtZT5GSUxFUyA9ICJ4eXoiPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFJlbmFtZSB5b3VyIHJlY2lwZSAob3IgaWYgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gaXMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgc2V0IGV4cGxpY2l0bHksIGNoYW5nZSB0aGUgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdmFsdWUpIHNvCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGNvbmZsaWN0IGRvZXMgbm90IG9jY3VyLgorICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wa2d2YXJjaGVjayc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAmbHQ7cmVjaXBlZmlsZSZndDs6IFZhcmlhYmxlICZsdDt2YXJpYWJsZSZndDsgaXMgc2V0IGFzIG5vdCBiZWluZyBwYWNrYWdlIHNwZWNpZmljLCBwbGVhc2UgZml4IHRoaXMuIFtwa2d2YXJjaGVja10KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDZXJ0YWluIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlNVR0dFU1RTJz48ZmlsZW5hbWU+UlNVR0dFU1RTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkNPTkZMSUNUUyc+PGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPjxmaWxlbmFtZT5SUkVQTEFDRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZWluc3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZ19wb3N0aW5zdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnX3ByZXJtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2dfcG9zdHJtPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQUxMT1dfRU1QVFknPjxmaWxlbmFtZT5BTExPV19FTVBUWTwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGFsd2F5cyBiZSBzZXQgc3BlY2lmaWMgdG8gYSBwYWNrYWdlIChpLmUuIHRoZXkKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNldCB3aXRoIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTXyR7UE59ID0gInZhbHVlIjwvZmlsZW5hbWU+IHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUyA9ICJ2YWx1ZSI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSByZWNlaXZlIHRoaXMgZXJyb3IsIGNvcnJlY3QgYW55IGFzc2lnbm1lbnRzIHRvIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyB3aXRoaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1hbHJlYWR5LXN0cmlwcGVkJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEZpbGUgJyZsdDtmaWxlJmd0OycgZnJvbSAmbHQ7cmVjaXBlbmFtZSZndDsgd2FzIGFscmVhZHkgc3RyaXBwZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchIFthbHJlYWR5LXN0cmlwcGVkXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFByb2R1Y2VkIGJpbmFyaWVzIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmlwcGVkIHByaW9yIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gZXh0cmFjdGluZyBkZWJ1ZyBzeW1ib2xzLgorICAgICAgICAgICAgICAgICAgICBJdCBpcyBjb21tb24gZm9yIHVwc3RyZWFtIHNvZnR3YXJlIHByb2plY3RzIHRvIGRlZmF1bHQgdG8KKyAgICAgICAgICAgICAgICAgICAgc3RyaXBwaW5nIGRlYnVnIHN5bWJvbHMgZm9yIG91dHB1dCBiaW5hcmllcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIGRlYnVnZ2luZyB0byB3b3JrIG9uIHRoZSB0YXJnZXQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcywgdGhpcyBzdHJpcHBpbmcgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBidWlsZCBzeXN0ZW0gdXNlZCBieSB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQsIGRpc2FibGluZyB0aGlzIHN0cmlwcGluZyBjb3VsZCBiZSBhcyBlYXN5IGFzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgYW4gYWRkaXRpb25hbCBjb25maWd1cmUgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICBJZiBub3QsIGRpc2FibGluZyBzdHJpcHBpbmcgbWlnaHQgaW52b2x2ZSBwYXRjaGluZworICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGxhdHRlciBjYXNlLCBsb29rIGZvciByZWZlcmVuY2VzIHRvICJzdHJpcCIgb3IKKyAgICAgICAgICAgICAgICAgICAgIlNUUklQIiwgb3IgdGhlICItcyIgb3IgIi1TIiBjb21tYW5kLWxpbmUgb3B0aW9ucyBiZWluZworICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgb24gdGhlIGxpbmtlciBjb21tYW5kIGxpbmUgKHBvc3NpYmx5CisgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZSBpZiBwcmVjZWRlZCB3aXRoICItV2wsIikuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsaW5nIHN0cmlwcGluZyBoZXJlIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgZmluYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkIGJpbmFyaWVzIHdpbGwgYmUgdW5zdHJpcHBlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3BsaXRzIG91dCBkZWJ1ZworICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scyB0byB0aGUgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCB0aGVuIHN0cmlwIHRoZSBzeW1ib2xzIGZyb20gdGhlIGJpbmFyaWVzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1wYWNrYWdlcy1saXN0Jz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDsgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIFtwYWNrYWdlcy1saXN0XQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2UgbmFtZXMgbXVzdCBhcHBlYXIgb25seSBvbmNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHJlY2VpdmUgdGhpcyBlcnJvciBpZiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYWRkIGEKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0byA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPiB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW4gdGhlIHZhcmlhYmxlJ3MgdmFsdWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1maWxlcy1pbnZhbGlkJz4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+CisgICAgIEZJTEVTIHZhcmlhYmxlIGZvciBwYWNrYWdlICZsdDtwYWNrYWdlbmFtZSZndDsgY29udGFpbnMgJy8vJyB3aGljaCBpcyBpbnZhbGlkLiBBdHRlbXB0aW5nIHRvIGZpeCB0aGlzIGJ1dCB5b3Ugc2hvdWxkIGNvcnJlY3QgdGhlIG1ldGFkYXRhLiBbZmlsZXMtaW52YWxpZF0KKyAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc3RyaW5nICIvLyIgaXMgaW52YWxpZCBpbiBhIFVuaXggcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgQ29ycmVjdCBhbGwgb2NjdXJyZW5jZXMgd2hlcmUgdGhpcyBzdHJpbmcgYXBwZWFycyBpbiBhCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNvIHRoYXQgdGhlcmUgaXMgb25seSBhIHNpbmdsZSAiLyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICZuYnNwOworICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxwYXJhIGlkPSdxYS1pc3N1ZS1pbnN0YWxsZWQtdnMtc2hpcHBlZCc+CisgICAgICAgICAgICAgICAgICAgIDxjb2RlPgorICAgICAgJmx0O3JlY2lwZW5hbWUmZ3Q7OiBGaWxlcy9kaXJlY3RvcmllcyB3ZXJlIGluc3RhbGxlZCBidXQgbm90IHNoaXBwZWQgW2luc3RhbGxlZC12cy1zaGlwcGVkXQorICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZpbGVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBidXQgaGF2ZSBub3QgYmVlbiBpbmNsdWRlZCBpbiBhbnkgcGFja2FnZSBieSB3YXkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFUyc+PGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBGaWxlcyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gYW55IHBhY2thZ2UgY2Fubm90IGJlIHByZXNlbnQgaW4KKyAgICAgICAgICAgICAgICAgICAgYW4gaW1hZ2UgbGF0ZXIgb24gaW4gdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0aGUgZmlsZXMgdG8gPGZpbGVuYW1lPkZJTEVTPC9maWxlbmFtZT4gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgeW91IHdhbnQgdGhlbSB0byBhcHBlYXIgaW4gKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNfJHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPiBmb3IgdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUgdGhlIGZpbGVzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPiB0YXNrIGlmIHRoZSBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgbmVlZGVkIGluIGFueSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPHBhcmEgaWQ9J3FhLWlzc3VlLW9sZC1hbmQtbmV3LXBhY2thZ2UtYW5kLXZlcnNpb24tbmFtZXMnPgorICAgICAgICAgICAgICAgICAgICA8Y29kZT4KKyAgICAgJmx0O29sZHBhY2thZ2UmZ3Q7LSZsdDtvbGRwa2d2ZXJzaW9uJmd0OyB3YXMgcmVnaXN0ZXJlZCBhcyBzaGxpYiBwcm92aWRlciBmb3IgJmx0O2xpYnJhcnkmZ3Q7LCBjaGFuZ2luZyBpdCB0byAmbHQ7bmV3cGFja2FnZSZndDstJmx0O25ld3BrZ3ZlcnNpb24mZ3Q7IGJlY2F1c2UgaXQgd2FzIGJ1aWx0IGxhdGVyCisgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZXNzYWdlIG1lYW5zIHRoYXQgYm90aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Jmx0O29sZHBhY2thZ2UmZ3Q7PC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mbHQ7bmV3cGFja2FnZSZndDs8L2ZpbGVuYW1lPiBwcm92aWRlIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZXhwZWN0IHRoaXMgbWVzc2FnZSB3aGVuIGEgcmVjaXBlIGhhcyBiZWVuIHJlbmFtZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCB0aGUgbWVzc2FnZSBtaWdodCBpbmRpY2F0ZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGEgcHJpdmF0ZSB2ZXJzaW9uIG9mIGEgbGlicmFyeSBpcyBiZWluZyBlcnJvbmVvdXNseQorICAgICAgICAgICAgICAgICAgICBwaWNrZWQgdXAgYXMgdGhlIHByb3ZpZGVyIGZvciBhIGNvbW1vbiBsaWJyYXJ5LgorICAgICAgICAgICAgICAgICAgICBJZiB0aGF0IGlzIHRoZSBjYXNlLCB5b3Ugc2hvdWxkIGFkZCB0aGUgbGlicmFyeSdzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlIG5hbWUgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSSVZBVEVfTElCUyc+PGZpbGVuYW1lPlBSSVZBVEVfTElCUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIHRoYXQgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByaXZhdGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKzwhLS0KK0hlcmUgYXJlIHNvbWUgbWVzc2FnZXMgdGhhdCBtaWdodCBiZSBkb2N1bWVudGVkIGluIHRoZSBmdXR1cmUuCitSaWdodCBub3cgd2UgYXJlIG5vdCBkb2N1bWVudGluZyB0aGVtIGJlY2F1c2UgdGhlIFFBIGNoZWNrcyBhcmUgbm90CitlbmFibGVkIGJ5IGRlZmF1bHQ6CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERlc2t0b3AgZmlsZSBpc3N1ZTogJmx0O2Vycm9yJmd0OyBbZGVza3RvcF0KKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgTkVFRCBBIERFU0NSSVBUSU9OIEFORCBTT0xVVElPTgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICZsdDtwYWNrYWdlbmFtZSZndDs6ICZsdDtmaWxlJmd0OywgaW5zdGFsbGVkIGluIHRoZSBiYXNlX3ByZWZpeCwgcmVxdWlyZXMgYSBzaGFyZWQgbGlicmFyeSB1bmRlciBleGVjX3ByZWZpeCAoJmx0O2V4ZWNfcHJlZml4JnQ7ZykgW3Vuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBORUVEIEEgREVTQ1JJUFRJT04gQU5EIFNPTFVUSU9OCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJmx0O3BhY2thZ2VuYW1lJmd0OzogRm91bmQgYSByZWZlcmVuY2UgdG8gJmx0O2V4ZWNfcHJlZml4Jmd0Oy8gaW4gJmx0O3BhdGgmZ3Q7IC0gU2hlbGwgc2NyaXB0cyBpbiBiYXNlX2JpbmRpciBhbmQgYmFzZV9zYmluZGlyIHNob3VsZCBub3QgcmVmZXJlbmNlIGFueXRoaW5nIGluIGV4ZWNfcHJlZml4IFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBORUVEIEEgREVTQ1JJUFRJT04gQU5EIFNPTFVUSU9OCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKy0tPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nY29uZmlndXJpbmctYW5kLWRpc2FibGluZy1xYS1jaGVja3MnPgorICAgIDx0aXRsZT5Db25maWd1cmluZyBhbmQgRGlzYWJsaW5nIFFBIENoZWNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiBjb25maWd1cmUgdGhlIFFBIGNoZWNrcyBnbG9iYWxseSBzbyB0aGF0IHNwZWNpZmljIGNoZWNrCisgICAgICAgIGZhaWx1cmVzIGVpdGhlciByYWlzZSBhIHdhcm5pbmcgb3IgYW4gZXJyb3IgbWVzc2FnZSwgdXNpbmcgdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XQVJOX1FBJz48ZmlsZW5hbWU+V0FSTl9RQTwvZmlsZW5hbWU+PC9saW5rPiBhbmQKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVSUk9SX1FBJz48ZmlsZW5hbWU+RVJST1JfUUE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuCisgICAgICAgIFlvdSBjYW4gYWxzbyBkaXNhYmxlIGNoZWNrcyB3aXRoaW4gYSBwYXJ0aWN1bGFyIHJlY2lwZSB1c2luZworICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5TQU5FX1NLSVAnPjxmaWxlbmFtZT5JTlNBTkVfU0tJUDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIFFBIGNoZWNrcywgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDxub3RlPjx0aXRsZT5UaXA8L3RpdGxlPgorICAgICAgICAgICAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBRQSBjaGVja3MgZXhpc3QgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgIGRldGVjdCByZWFsIG9yIHBvdGVudGlhbCBwcm9ibGVtcyBpbiB0aGUgcGFja2FnZWQgb3V0cHV0LgorICAgICAgICAgICAgU28gZXhlcmNpc2UgY2F1dGlvbiB3aGVuIGRpc2FibGluZyB0aGVzZSBjaGVja3MuCisgICAgICAgIDwvbm90ZT4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtc3RydWN0dXJlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGUzOTIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHJ1Y3R1cmUueG1sCkBAIC0wLDAgKzEsMTE1MyBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3JlZi1zdHJ1Y3R1cmUnPgorCis8dGl0bGU+U291cmNlIERpcmVjdG9yeSBTdHJ1Y3R1cmU8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGUgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+IGNvbnNpc3RzIG9mIHNldmVyYWwgY29tcG9uZW50cy4KKyAgICBVbmRlcnN0YW5kaW5nIHRoZW0gYW5kIGtub3dpbmcgd2hlcmUgdGhleSBhcmUgbG9jYXRlZCBpcyBrZXkgdG8gdXNpbmcgdGhlIFlvY3RvIFByb2plY3Qgd2VsbC4KKyAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBTb3VyY2UgRGlyZWN0b3J5IGFuZCBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaW91cworICAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKzwvcGFyYT4KKworPHBhcmE+CisgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBlc3RhYmxpc2ggYSBsb2NhbCBTb3VyY2UgRGlyZWN0b3J5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtLCBzZWUgdGhlCisgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dldHRpbmctc2V0dXAnPkdldHRpbmcgU2V0IFVwPC91bGluaz4iCisgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCis8L3BhcmE+CisKKzxub3RlPgorICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgdGhhdAorICAgIGNvbnRhaW4gc3BhY2VzLgorICAgIEJlIHN1cmUgdGhhdCB0aGUgU291cmNlIERpcmVjdG9yeSB5b3UgdXNlIGRvZXMgbm90IGNvbnRhaW4gdGhlc2UgdHlwZXMKKyAgICBvZiBuYW1lcy4KKzwvbm90ZT4KKworPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlJz4KKyAgICA8dGl0bGU+VG9wLUxldmVsIENvcmUgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgdG9wLWxldmVsIGNvbXBvbmVudHMgb2YgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Yml0YmFrZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpbmNsdWRlcyBhIGNvcHkgb2YgQml0QmFrZSBmb3IgZWFzZSBvZiB1c2UuCisgICAgICAgICAgICBUaGUgY29weSB1c3VhbGx5IG1hdGNoZXMgdGhlIGN1cnJlbnQgc3RhYmxlIEJpdEJha2UgcmVsZWFzZSBmcm9tCisgICAgICAgICAgICB0aGUgQml0QmFrZSBwcm9qZWN0LgorICAgICAgICAgICAgQml0QmFrZSwgYQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgIGludGVycHJldGVyLCByZWFkcyB0aGUgWW9jdG8gUHJvamVjdCBNZXRhZGF0YSBhbmQgcnVucyB0aGUgdGFza3MKKyAgICAgICAgICAgIGRlZmluZWQgYnkgdGhhdCBkYXRhLgorICAgICAgICAgICAgRmFpbHVyZXMgYXJlIHVzdWFsbHkgZnJvbSB0aGUgTWV0YWRhdGEgYW5kIG5vdCBmcm9tIEJpdEJha2UgaXRzZWxmLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBtb3N0IHVzZXJzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IEJpdEJha2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4geW91IHJ1biB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLCB0aGUKKyAgICAgICAgICAgIG1haW4gQml0QmFrZSBleGVjdXRhYmxlLCB3aGljaCByZXNpZGVzIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvYmluLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgc3RhcnRzLgorICAgICAgICAgICAgU291cmNpbmcgYW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IChlLmcuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJzdHJ1Y3R1cmUtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InN0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQiPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICBwbGFjZXMgdGhlIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9iaW48L2ZpbGVuYW1lPiBkaXJlY3RvcmllcyAoaW4gdGhhdCBvcmRlcikgaW50bworICAgICAgICAgICAgdGhlIHNoZWxsJ3MgPGZpbGVuYW1lPlBBVEg8L2ZpbGVuYW1lPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQml0QmFrZSwgc2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1jb3JlLWJ1aWxkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHRoZSBvdXRwdXQKKyAgICAgICAgICAgIGdlbmVyYXRlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpbiBpdHMgc3RhbmRhcmQgY29uZmlndXJhdGlvbiB3aGVyZQorICAgICAgICAgICAgdGhlIHNvdXJjZSB0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlIG91dHB1dC4KKyAgICAgICAgICAgIFRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBpcyBjcmVhdGVkIGluaXRpYWxseSB3aGVuIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0CisgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwbGFjZSBvdXRwdXQgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGVzIGluIGEgZGlyZWN0b3J5IHNlcGFyYXRlIGZyb20gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGJ5IHByb3ZpZGluZyBhIGRpcmVjdG9yeSBuYW1lIHdoZW4geW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGhlIHNldHVwIHNjcmlwdC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXBhcmF0aW5nIG91dHB1dCBmcm9tIHlvdXIgbG9jYWwKKyAgICAgICAgICAgIFNvdXJjZSBEaXJlY3RvcnkgZmlsZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2hhbmRib29rJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb2N1bWVudGF0aW9uLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGhvbGRzIHRoZSBzb3VyY2UgZm9yIHRoZSBZb2N0byBQcm9qZWN0IGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgIGFzIHdlbGwgYXMgdGVtcGxhdGVzIGFuZCB0b29scyB0aGF0IGFsbG93IHlvdSB0byBnZW5lcmF0ZSBQREYgYW5kIEhUTUwKKyAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBtYW51YWxzLgorICAgICAgICAgICAgRWFjaCBtYW51YWwgaXMgY29udGFpbmVkIGluIGEgc3ViLWZvbGRlci4KKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZmlsZXMgZm9yIHRoaXMgbWFudWFsIHJlc2lkZSBpbgorICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5yZWYtbWFudWFsLzwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1tZXRhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBtZXRhZGF0YS4KKyAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaG9sZHMgcmVjaXBlcywgY29tbW9uIGNsYXNzZXMsIGFuZCBtYWNoaW5lCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciBlbXVsYXRlZCB0YXJnZXRzICg8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoLikKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1tZXRhLXlvY3RvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhLXlvY3RvLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUG9reQorICAgICAgICAgICAgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1tZXRhLXlvY3RvLWJzcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS15b2N0by1ic3AvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFlvY3RvIFByb2plY3QgcmVmZXJlbmNlCisgICAgICAgICAgICBoYXJkd2FyZSBCb2FyZCBTdXBwb3J0IFBhY2thZ2VzIChCU1BzKS4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEJTUHMsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JTUF9VUkw7Jz5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQKKyAgICAgICAgICAgIFBhY2thZ2UgKEJTUCkgRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1zZWxmdGVzdCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS1zZWxmdGVzdC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBhZGRzIGFkZGl0aW9uYWwgcmVjaXBlcyBhbmQgYXBwZW5kIGZpbGVzCisgICAgICAgICAgICB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgc2VsZnRlc3RzIHRvIHZlcmlmeSB0aGUgYmVoYXZpb3IKKyAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBkbyBub3QgaGF2ZSB0byBhZGQgdGhpcyBsYXllciB0byB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgdW5sZXNzIHlvdSB3YW50IHRvIHJ1biB0aGUKKyAgICAgICAgICAgIHNlbGZ0ZXN0cy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1za2VsZXRvbic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS1za2VsZXRvbi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0ZW1wbGF0ZSByZWNpcGVzIGZvciBCU1AgYW5kIGtlcm5lbCBkZXZlbG9wbWVudC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHRzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5zY3JpcHRzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHZhcmlvdXMgaW50ZWdyYXRpb24gc2NyaXB0cyB0aGF0IGltcGxlbWVudAorICAgICAgICAgICAgZXh0cmEgZnVuY3Rpb25hbGl0eSBpbiB0aGUgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudCAoZS5nLiBRRU1VIHNjcmlwdHMpLgorICAgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9InN0cnVjdHVyZS1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHNjcmlwdHMgYXBwZW5kIHRoaXMgZGlyZWN0b3J5IHRvIHRoZSBzaGVsbCdzCisgICAgICAgICAgICA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaGFzIHVzZWZ1bCBzY3JpcHRzIHRoYXQgYXNzaXN0IGluIGNvbnRyaWJ1dGluZworICAgICAgICAgICAgYmFjayB0byB0aGUgWW9jdG8gUHJvamVjdCwgc3VjaCBhcyA8ZmlsZW5hbWU+Y3JlYXRlLXB1bGwtcmVxdWVzdDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnNlbmQtcHVsbC1yZXF1ZXN0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWNvcmUtc2NyaXB0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2NyaXB0IGlzIG9uZSBvZiB0d28gc2NyaXB0cyB0aGF0IHNldCB1cCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgb3RoZXIgc2NyaXB0LCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aCB0aGUgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IGNvbW1hbmQgaW4KKyAgICAgICAgICAgIGEgc2hlbGwgbWFrZXMgY2hhbmdlcyB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGFuZCBzZXRzIG90aGVyCisgICAgICAgICAgICBjb3JlIEJpdEJha2UgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgWW91IG5lZWQgdG8gcnVuIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBiZWZvcmUgcnVubmluZyBCaXRCYWtlCisgICAgICAgICAgICBjb21tYW5kcy4KKyAgICAgICAgICAgIFRoZSBzY3JpcHQgdXNlcyBvdGhlciBzY3JpcHRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zY3JpcHRzPC9maWxlbmFtZT4gZGlyZWN0b3J5IHRvIGRvIHRoZSBidWxrIG9mIHRoZSB3b3JrLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhpcyBzY3JpcHQsIHlvdXIgWW9jdG8gUHJvamVjdCBlbnZpcm9ubWVudCBpcyBzZXQKKyAgICAgICAgICAgIHVwLCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICBpcyBjcmVhdGVkLCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGJlY29tZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSwKKyAgICAgICAgICAgIGFuZCB5b3UgYXJlIHByZXNlbnRlZCB3aXRoIGEgbGlzdCBvZiBjb21tb24gQml0QmFrZSB0YXJnZXRzLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudgorCisgICAgICMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKKyAgICAgWW91IGNhbiBub3cgcnVuICdiaXRiYWtlICZsdDt0YXJnZXQmZ3Q7JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBzY3JpcHQgZ2V0cyBpdHMgZGVmYXVsdCBsaXN0IG9mIGNvbW1vbiB0YXJnZXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNob3VsZCB5b3UgaGF2ZSBjdXN0b20gZGlzdHJpYnV0aW9ucywgaXQgaXMgdmVyeSBlYXN5IHRvIG1vZGlmeQorICAgICAgICAgICAgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB5b3VyIHRhcmdldHMgZm9yIHlvdXIKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgcnVubmluZyB0aGlzIHNjcmlwdCB3aXRob3V0IGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFyZ3VtZW50IGNyZWF0ZXMgdGhlIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkgYXJndW1lbnQgd2hlbiB5b3UKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUgc2NyaXB0LCB5b3UgZGlyZWN0IHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgYSBCdWlsZCBEaXJlY3Rvcnkgb2YgeW91ciBjaG9pY2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgJk9FX0lOSVRfRklMRTsgfi9teWJ1aWxkcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMsIHdoaWNoIGFyZSBmb3VuZCBieSBkZWZhdWx0IGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgdGhhdAorICAgICAgICAgICAgICAgIGNvbnRhaW4gc3BhY2VzLgorICAgICAgICAgICAgICAgIElmIHlvdSBhdHRlbXB0IHRvIHJ1biB0aGUgPGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT4gc2NyaXB0CisgICAgICAgICAgICAgICAgZnJvbSBhIFNvdXJjZSBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBzcGFjZXMgaW4gZWl0aGVyIHRoZSBmaWxlbmFtZXMKKyAgICAgICAgICAgICAgICBvciBkaXJlY3RvcnkgbmFtZXMsIHRoZSBzY3JpcHQgcmV0dXJucyBhbiBlcnJvciBpbmRpY2F0aW5nIG5vIHN1Y2gKKyAgICAgICAgICAgICAgICBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIHVzZSBhIFNvdXJjZSBEaXJlY3RvcnkgZnJlZSBvZiBuYW1lcyBjb250YWluaW5nIHNwYWNlcy4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNjcmlwdCBpcyBvbmUgb2YgdHdvIHNjcmlwdHMgdGhhdCBzZXQgdXAgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgYnVpbGQgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBBc2lkZSBmcm9tIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50LCB0aGlzIHNjcmlwdCBzdGFydHMgYQorICAgICAgICAgICAgbWVtb3J5LXJlc2lkZW50IEJpdEJha2Ugc2VydmVyLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBvdGhlciBzZXR1cCBzY3JpcHQsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE1lbW9yeS1yZXNpZGVudCBCaXRCYWtlIHJlc2lkZXMgaW4gbWVtb3J5IHVudGlsIHlvdSBzcGVjaWZpY2FsbHkKKyAgICAgICAgICAgIHJlbW92ZSBpdCB1c2luZyB0aGUgZm9sbG93aW5nIEJpdEJha2UgY29tbWFuZDoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1tCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFJ1bm5pbmcgdGhpcyBzY3JpcHQgd2l0aCB0aGUgPGZpbGVuYW1lPnNvdXJjZTwvZmlsZW5hbWU+IGNvbW1hbmQgaW4KKyAgICAgICAgICAgIGEgc2hlbGwgbWFrZXMgY2hhbmdlcyB0byA8ZmlsZW5hbWU+UEFUSDwvZmlsZW5hbWU+IGFuZCBzZXRzIG90aGVyCisgICAgICAgICAgICBjb3JlIEJpdEJha2UgdmFyaWFibGVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgT25lIG9mIHRoZXNlIHZhcmlhYmxlcyBpcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlNFUlZFUic+PGZpbGVuYW1lPkJCU0VSVkVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggYWxsb3dzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGxvY2F0ZQorICAgICAgICAgICAgdGhlIHNlcnZlciB0aGF0IGlzIHJ1bm5pbmcgQml0QmFrZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IG5lZWQgdG8gcnVuIGFuIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBiZWZvcmUgdXNpbmcgQml0QmFrZQorICAgICAgICAgICAgY29tbWFuZHMuCisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgdGhlIHNjcmlwdCBzeW50YXg6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcyA8cmVwbGFjZWFibGU+cG9ydF9udW1iZXI8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+YnVpbGRfZGlyPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgc29tZSBjb25zaWRlcmF0aW9ucyB3aGVuIHNvdXJjaW5nIHRoaXMgc2NyaXB0OgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzY3JpcHQgdXNlcyBvdGhlciBzY3JpcHRzIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHM8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgdG8gZG8gdGhlIGJ1bGsgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBwcm92aWRlIGEgcG9ydCBudW1iZXIgd2l0aCB0aGUgc2NyaXB0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBzZXJ2ZXIgc3RhcnRzIGF0IGEgcmFuZG9tbHkgc2VsZWN0ZWQgcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0J3MgcGFyYW1ldGVycyBhcmUgcG9zaXRpb25hbGx5IGRlcGVuZGVudC4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3UgY2Fubm90IHJ1biB0aGUgc2NyaXB0IGFuZCBwcm92aWRlIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBuYW1lIHdpdGhvdXQgYWxzbyBwcm92aWRpbmcgYSBwb3J0IG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dpbmcgc3ludGF4IGlzIGlsbGVnYWw6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2Ugb2UtaW5pdGJ1aWxkLWVudi1tZW1yZXMgPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcHJldmlvdXMgcmVzdHJpY3Rpb24gbWlnaHQgYmUgcmVzb2x2ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NSc+QnVnIDc1NTU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiB5b3UgcnVuIHRoaXMgc2NyaXB0LCB5b3VyIFlvY3RvIFByb2plY3QgZW52aXJvbm1lbnQgaXMgc2V0CisgICAgICAgICAgICB1cCwgYSBCdWlsZCBEaXJlY3RvcnkgaXMgY3JlYXRlZCwgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBiZWNvbWVzCisgICAgICAgICAgICB0aGUgQnVpbGQgRGlyZWN0b3J5LCBhbmQgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgY29tbW9uCisgICAgICAgICAgICBCaXRCYWtlIHRhcmdldHMuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52LW1lbXJlcworICAgICBObyBwb3J0IHNwZWNpZmllZCwgdXNpbmcgZHluYW1pY2FsbHkgc2VsZWN0ZWQgcG9ydAorCisgICAgICMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKKyAgICAgWW91IGNhbiBub3cgcnVuICdiaXRiYWtlICZsdDt0YXJnZXQmZ3Q7JworCisgICAgIENvbW1vbiB0YXJnZXRzIGFyZToKKyAgICAgICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICBtZXRhLXRvb2xjaGFpbgorICAgICAgICAgYWR0LWluc3RhbGxlcgorICAgICAgICAgbWV0YS1pZGUtc3VwcG9ydAorCisgICAgIFlvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKKyAgICAgQml0YmFrZSBzZXJ2ZXIgYWRkcmVzczogMTI3LjAuMC4xLCBzZXJ2ZXIgcG9ydDogNTM5OTUKKyAgICAgQml0YmFrZSBzZXJ2ZXIgc3RhcnRlZCBvbiBkZW1hbmQgYXMgbmVlZGVkLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSBzY3JpcHQgZ2V0cyBpdHMgZGVmYXVsdCBsaXN0IG9mIGNvbW1vbiB0YXJnZXRzIGZyb20gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi1ub3Rlcy50eHQ8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgIFNob3VsZCB5b3UgaGF2ZSBjdXN0b20gZGlzdHJpYnV0aW9ucywgaXQgaXMgdmVyeSBlYXN5IHRvIG1vZGlmeQorICAgICAgICAgICAgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgdG8gaW5jbHVkZSB5b3VyIHRhcmdldHMgZm9yIHlvdXIKKyAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNjcmVhdGluZy1hLWN1c3RvbS10ZW1wbGF0ZS1jb25maWd1cmF0aW9uLWRpcmVjdG9yeSc+Q3JlYXRpbmcgYSBDdXN0b20gVGVtcGxhdGUgQ29uZmlndXJhdGlvbiBEaXJlY3Rvcnk8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlCisgICAgICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgcnVubmluZyB0aGlzIHNjcmlwdCB3aXRob3V0IGEKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIGFyZ3VtZW50IGNyZWF0ZXMgYSBidWlsZCBkaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgSWYgeW91IHByb3ZpZGUgYSBCdWlsZCBEaXJlY3RvcnkgYXJndW1lbnQgYW5kIHBvcnQgbnVtYmVyIHdoZW4geW91CisgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHNjcmlwdCwgdGhlIEJ1aWxkIERpcmVjdG9yeSBpcworICAgICAgICAgICAgY3JlYXRlZCB1c2luZyB0aGF0IG5hbWUuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21tYW5kIHN0YXJ0cyB0aGUgQml0QmFrZSBzZXJ2ZXIgdXNpbmcKKyAgICAgICAgICAgIHBvcnQgNTM5OTUgYW5kIGNyZWF0ZXMgYSBCdWlsZCBEaXJlY3RvcnkgbmFtZWQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5teWJ1aWxkczwvZmlsZW5hbWU+IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIDUzOTk1IH4vbXlidWlsZHMKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0IHN0YXJ0cyBhCisgICAgICAgICAgICBtZW1vcnkgcmVzaWRlbnQgQml0QmFrZSBzZXJ2ZXIuCisgICAgICAgICAgICBUaGlzIEJpdEJha2UgaW5zdGFuY2UgdXNlcyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLWNvb2tlcmRhZW1vbi5sb2c8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcworICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlcywgd2hpY2ggYXJlIGZvdW5kIGJ5IGRlZmF1bHQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NyZWF0aW5nLWEtY3VzdG9tLXRlbXBsYXRlLWNvbmZpZ3VyYXRpb24tZGlyZWN0b3J5Jz5DcmVhdGluZyBhIEN1c3RvbSBUZW1wbGF0ZSBDb25maWd1cmF0aW9uIERpcmVjdG9yeTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBmaWxlIG9yCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzIHRoYXQgY29udGFpbiBzcGFjZXMuCisgICAgICAgICAgICAgICAgSWYgeW91IGF0dGVtcHQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICBmcm9tIGEgU291cmNlIERpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHNwYWNlcyBpbiBlaXRoZXIgdGhlCisgICAgICAgICAgICAgICAgZmlsZW5hbWVzIG9yIGRpcmVjdG9yeSBuYW1lcywgdGhlIHNjcmlwdCByZXR1cm5zIGFuIGVycm9yCisgICAgICAgICAgICAgICAgaW5kaWNhdGluZyBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIEJlIHN1cmUgdG8gdXNlIGEgU291cmNlIERpcmVjdG9yeSBmcmVlIG9mIG5hbWVzIGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICBzcGFjZXMuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJhc2ljLXRvcC1sZXZlbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+TElDRU5TRSwgUkVBRE1FLCBhbmQgUkVBRE1FLmhhcmR3YXJlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXJlIHN0YW5kYXJkIHRvcC1sZXZlbCBmaWxlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZCc+CisgICAgPHRpdGxlPlRoZSBCdWlsZCBEaXJlY3RvcnkgLSA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgdGhlCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgd2hlbiB5b3UgcnVuIG9uZSBvZiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0cyAoaS5lLgorICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICBvcgorICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGRvIG5vdCBnaXZlIHRoZSBCdWlsZCBEaXJlY3RvcnkgYSBzcGVjaWZpYyBuYW1lIHdoZW4geW91IHJ1bgorICAgICAgICBhIHNldHVwIHNjcmlwdCwgdGhlIG5hbWUgZGVmYXVsdHMgdG8gPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4uCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE9QRElSJz48ZmlsZW5hbWU+VE9QRElSPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgIHBvaW50cyB0byB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtYnVpbGRoaXN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC9idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoaXMgZGlyZWN0b3J5IHdoZW4geW91CisgICAgICAgICAgICBlbmFibGUgdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZS4KKyAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgdHJhY2tzIGJ1aWxkIGluZm9ybWF0aW9uIGludG8gaW1hZ2UsIHBhY2thZ2VzLCBhbmQKKyAgICAgICAgICAgIFNESyBzdWJkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgYnVpbGQgaGlzdG9yeSBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbWFpbnRhaW5pbmctYnVpbGQtb3V0cHV0LXF1YWxpdHknPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLWNvbmYtbG9jYWwuY29uZic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgY29udGFpbnMgYWxsIHRoZSBsb2NhbCB1c2VyIGNvbmZpZ3VyYXRpb25zCisgICAgICAgICAgICBmb3IgeW91ciBidWlsZCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgY29udGFpbnMgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgICAgICAgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgICAgICAgICAgQW55IHZhcmlhYmxlIHNldCBoZXJlIG92ZXJyaWRlcyBhbnkgdmFyaWFibGUgc2V0IGVsc2V3aGVyZSB3aXRoaW4KKyAgICAgICAgICAgIHRoZSBlbnZpcm9ubWVudCB1bmxlc3MgdGhhdCB2YXJpYWJsZSBpcyBoYXJkLWNvZGVkIHdpdGhpbiBhIGZpbGUKKyAgICAgICAgICAgIChlLmcuIGJ5IHVzaW5nICc9JyBpbnN0ZWFkIG9mICc/PScpLgorICAgICAgICAgICAgU29tZSB2YXJpYWJsZXMgYXJlIGhhcmQtY29kZWQgZm9yIHZhcmlvdXMgcmVhc29ucyBidXQgdGhlc2UKKyAgICAgICAgICAgIHZhcmlhYmxlcyBhcmUgcmVsYXRpdmVseSByYXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFZGl0IHRoaXMgZmlsZSB0byBzZXQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPk1BQ0hJTkU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGZvciB3aGljaCB5b3Ugd2FudCB0byBidWlsZCwgd2hpY2ggcGFja2FnZSB0eXBlcyB5b3Ugd2lzaCB0byB1c2UKKyAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+KSwKKyAgICAgICAgICAgIGFuZCB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB5b3Ugd2FudCB0byBhY2Nlc3MgZG93bmxvYWRlZCBmaWxlcworICAgICAgICAgICAgKDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRExfRElSJz5ETF9ESVI8L2xpbms+PC9maWxlbmFtZT4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGlzIG5vdCBwcmVzZW50IHdoZW4geW91CisgICAgICAgICAgICBzdGFydCB0aGUgYnVpbGQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgaXQgZnJvbQorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gd2hlbgorICAgICAgICAgICAgeW91IDxmaWxlbmFtZT5zb3VyY2U8L2ZpbGVuYW1lPiB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICBzZXR1cCBzY3JpcHQgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPiZPRV9JTklUX0ZJTEU7PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBvcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBzb3VyY2UgPGZpbGVuYW1lPmxvY2FsLmNvbmYuc2FtcGxlPC9maWxlbmFtZT4gZmlsZSB1c2VkCisgICAgICAgICAgICBkZXBlbmRzIG9uIHRoZSA8ZmlsZW5hbWU+JFRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHNjcmlwdCB2YXJpYWJsZSwKKyAgICAgICAgICAgIHdoaWNoIGRlZmF1bHRzIHRvIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgd2hlbiB5b3UgYXJlIGJ1aWxkaW5nIGZyb20gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgIGVudmlyb25tZW50IGFuZCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+bWV0YS9jb25mPC9maWxlbmFtZT4gd2hlbgorICAgICAgICAgICAgeW91IGFyZSBidWlsZGluZyBmcm9tIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIEJlY2F1c2UgdGhlIHNjcmlwdCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUsIHRoaXMgaW1wbGllcyB0aGF0CisgICAgICAgICAgICB5b3UgY2FuIGNvbmZpZ3VyZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IGZyb20gYW55IGxheWVyIGJ5IHNldHRpbmcKKyAgICAgICAgICAgIHRoZSB2YXJpYWJsZSBpbiB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBhcworICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVNUExBVEVDT05GPTxyZXBsYWNlYWJsZT55b3VyX2xheWVyPC9yZXBsYWNlYWJsZT4vY29uZgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgT25jZSB0aGUgYnVpbGQgcHJvY2VzcyBnZXRzIHRoZSBzYW1wbGUgZmlsZSwgaXQgdXNlcworICAgICAgICAgICAgPGZpbGVuYW1lPnNlZDwvZmlsZW5hbWU+IHRvIHN1YnN0aXR1dGUgZmluYWwKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU9FUk9PVCc+PGZpbGVuYW1lPk9FUk9PVDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhbHVlcyBmb3IgYWxsIDxmaWxlbmFtZT4jI09FUk9PVCMjPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgaG93IHRoZSA8ZmlsZW5hbWU+VEVNUExBVEVDT05GPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICBpcyB1c2VkIGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXI8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtY29uZi1iYmxheWVycy5jb25mJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC9jb25mL2JibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBkZWZpbmVzCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPmxheWVyczwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggYXJlIGRpcmVjdG9yeSB0cmVlcywgdHJhdmVyc2VkIChvciB3YWxrZWQpIGJ5IEJpdEJha2UuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIHVzZXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlMnPjxmaWxlbmFtZT5CQkxBWUVSUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgdG8gbGlzdCB0aGUgbGF5ZXJzIEJpdEJha2UgdHJpZXMgdG8gZmluZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBpcyBub3QgcHJlc2VudCB3aGVuIHlvdQorICAgICAgICAgICAgc3RhcnQgdGhlIGJ1aWxkLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIGl0IGZyb20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSA8ZmlsZW5hbWU+c291cmNlPC9maWxlbmFtZT4gdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudAorICAgICAgICAgICAgc2V0dXAgc2NyaXB0IChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgc291cmNlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgdXNlZAorICAgICAgICAgICAgZGVwZW5kcyBvbiB0aGUgPGZpbGVuYW1lPiRURU1QTEFURUNPTkY8L2ZpbGVuYW1lPiBzY3JpcHQgdmFyaWFibGUsCisgICAgICAgICAgICB3aGljaCBkZWZhdWx0cyB0byA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHdoZW4geW91IGFyZSBidWlsZGluZyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50CisgICAgICAgICAgICBlbnZpcm9ubWVudCBhbmQgZGVmYXVsdHMgdG8gPGZpbGVuYW1lPm1ldGEvY29uZjwvZmlsZW5hbWU+IHdoZW4KKyAgICAgICAgICAgIHlvdSBhcmUgYnVpbGRpbmcgZnJvbSB0aGUgT3BlbkVtYmVkZGVkIENvcmUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICBCZWNhdXNlIHRoZSBzY3JpcHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZi5zYW1wbGU8L2ZpbGVuYW1lPiBmaWxlLCB0aGlzIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgeW91IGNhbiBiYXNlIHlvdXIgYnVpbGQgZnJvbSBhbnkgbGF5ZXIgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUgaW4KKyAgICAgICAgICAgIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFTVBMQVRFQ09ORj08cmVwbGFjZWFibGU+eW91cl9sYXllcjwvcmVwbGFjZWFibGU+L2NvbmYKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIHByb2Nlc3MgZ2V0cyB0aGUgc2FtcGxlIGZpbGUsIGl0IHVzZXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZWQ8L2ZpbGVuYW1lPiB0byBzdWJzdGl0dXRlIGZpbmFsCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1PRVJPT1QnPjxmaWxlbmFtZT5PRVJPT1Q8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICB2YWx1ZXMgZm9yIGFsbCA8ZmlsZW5hbWU+IyNPRVJPT1QjIzwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIGhvdyB0aGUgPGZpbGVuYW1lPlRFTVBMQVRFQ09ORjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXI8L2ZpbGVuYW1lPiBzY3JpcHQgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0aGUgWW9jdG8gUHJvamVjdCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtY29uZi1zYW5pdHlfaW5mbyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvY29uZi9zYW5pdHlfaW5mbzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBpbmRpY2F0ZXMgdGhlIHN0YXRlIG9mIHRoZSBzYW5pdHkgY2hlY2tzIGFuZCBpcyBjcmVhdGVkCisgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC1kb3dubG9hZHMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL2Rvd25sb2Fkcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBkb3dubG9hZGVkIHVwc3RyZWFtIHNvdXJjZSB0YXJiYWxscy4KKyAgICAgICAgICAgIFlvdSBjYW4gcmV1c2UgdGhlIGRpcmVjdG9yeSBmb3IgbXVsdGlwbGUgYnVpbGRzIG9yIG1vdmUKKyAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgdG8gYW5vdGhlciBsb2NhdGlvbi4KKyAgICAgICAgICAgIFlvdSBjYW4gY29udHJvbCB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRExfRElSJz5ETF9ESVI8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXNzdGF0ZS1jYWNoZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvc3N0YXRlLWNhY2hlLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuCisgICAgICAgICAgICBZb3UgY2FuIHJldXNlIHRoZSBkaXJlY3RvcnkgZm9yIG11bHRpcGxlIGJ1aWxkcyBvciBtb3ZlCisgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRvIGFub3RoZXIgbG9jYXRpb24uCisgICAgICAgICAgICBZb3UgY2FuIGNvbnRyb2wgdGhlIGxvY2F0aW9uIG9mIHRoaXMgZGlyZWN0b3J5IHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9ESVInPlNTVEFURV9ESVI8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW5kIHVzZXMgdGhpcyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZvciBhbGwgdGhlIGJ1aWxkIHN5c3RlbSdzIG91dHB1dC4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgcG9pbnRzIHRvIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCaXRCYWtlIGNyZWF0ZXMgdGhpcyBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICBBcyBhIGxhc3QgcmVzb3J0LCB0byBjbGVhbiB1cCBhIGJ1aWxkIGFuZCBzdGFydCBpdCBmcm9tIHNjcmF0Y2gKKyAgICAgICAgICAgIChvdGhlciB0aGFuIHRoZSBkb3dubG9hZHMpLCB5b3UgY2FuIHJlbW92ZSBldmVyeXRoaW5nIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnRtcDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvciBnZXQgcmlkIG9mIHRoZQorICAgICAgICAgICAgZGlyZWN0b3J5IGNvbXBsZXRlbHkuCisgICAgICAgICAgICBJZiB5b3UgZG8sIHlvdSBzaG91bGQgYWxzbyBjb21wbGV0ZWx5IHJlbW92ZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZC9zc3RhdGUtY2FjaGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1idWlsZHN0YXRzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvYnVpbGRzdGF0cy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBzdG9yZXMgdGhlIGJ1aWxkIHN0YXRpc3RpY3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1jYWNoZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2NhY2hlLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gQml0QmFrZSBwYXJzZXMgdGhlIG1ldGFkYXRhLCBpdCBjcmVhdGVzIGEgY2FjaGUgZmlsZSBvZiB0aGUgcmVzdWx0IHRoYXQgY2FuCisgICAgICAgICAgICBiZSB1c2VkIHdoZW4gc3Vic2VxdWVudGx5IHJ1bm5pbmcgY29tbWFuZHMuCisgICAgICAgICAgICBCaXRCYWtlIHN0b3JlcyB0aGVzZSByZXN1bHRzIGhlcmUgb24gYSBwZXItbWFjaGluZSBiYXNpcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhbnkgImVuZCByZXN1bHQiIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBwb2ludHMgdG8gdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWwgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ltYWdlcy1kZXYtZW52aXJvbm1lbnQnPkltYWdlczwvbGluaz4iIGFuZAorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveS1kZWInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvZGViLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIGFueSA8ZmlsZW5hbWU+LmRlYjwvZmlsZW5hbWU+IHBhY2thZ2VzIHByb2R1Y2VkIGJ5CisgICAgICAgICAgICB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgIFRoZSBwYWNrYWdlcyBhcmUgc29ydGVkIGludG8gZmVlZHMgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUgdHlwZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktcnBtJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L3JwbS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSByZWNlaXZlcyBhbnkgPGZpbGVuYW1lPi5ycG08L2ZpbGVuYW1lPiBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICBUaGUgcGFja2FnZXMgYXJlIHNvcnRlZCBpbnRvIGZlZWRzIGZvciBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtZGVwbG95LWlwayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2RlcGxveS9pcGsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgcmVjZWl2ZXMgPGZpbGVuYW1lPi5pcGs8L2ZpbGVuYW1lPiBwYWNrYWdlcyBwcm9kdWNlZCBieQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktbGljZW5zZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvbGljZW5zZXMvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgcmVjZWl2ZXMgcGFja2FnZSBsaWNlbnNpbmcgaW5mb3JtYXRpb24uCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGRpcmVjdG9yeSBjb250YWlucyBzdWItZGlyZWN0b3JpZXMgZm9yIDxmaWxlbmFtZT5iYXNoPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gKGFtb25nIG90aGVycykgdGhhdCBpbiB0dXJuCisgICAgICAgICAgICBjb250YWluIGFwcHJvcHJpYXRlIDxmaWxlbmFtZT5DT1BZSU5HPC9maWxlbmFtZT4gbGljZW5zZSBmaWxlcyB3aXRoIG90aGVyIGxpY2Vuc2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBsaWNlbnNpbmcsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtYWludGFpbmluZy1vcGVuLXNvdXJjZS1saWNlbnNlLWNvbXBsaWFuY2UtZHVyaW5nLXlvdXItcHJvZHVjdHMtbGlmZWN5Y2xlJz5NYWludGFpbmluZyBPcGVuIFNvdXJjZSBMaWNlbnNlIENvbXBsaWFuY2UgRHVyaW5nIFlvdXIgUHJvZHVjdCdzIExpZmVjeWNsZTwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWRlcGxveS1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9kZXBsb3kvaW1hZ2VzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IHJlY2VpdmVzIGNvbXBsZXRlIGZpbGVzeXN0ZW0gaW1hZ2VzLgorICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gZmxhc2ggdGhlIHJlc3VsdGluZyBpbWFnZSBmcm9tIGEgYnVpbGQgb250byBhIGRldmljZSwgbG9vayBoZXJlIGZvciB0aGUgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJlIGNhcmVmdWwgd2hlbiBkZWxldGluZyBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIFlvdSBjYW4gc2FmZWx5IGRlbGV0ZSBvbGQgaW1hZ2VzIGZyb20gdGhpcyBkaXJlY3RvcnkgKGUuZy4KKyAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLSo8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmhvYi1pbWFnZS0qPC9maWxlbmFtZT4sCisgICAgICAgICAgICBldGMuKS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBrZXJuZWwgKDxmaWxlbmFtZT4qekltYWdlKjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+KnVJbWFnZSo8L2ZpbGVuYW1lPiwgZXRjLiksCisgICAgICAgICAgICBib290bG9hZGVyIGFuZCBvdGhlciBzdXBwbGVtZW50YXJ5IGZpbGVzIG1pZ2h0IGJlIGRlcGxveWVkIGhlcmUgcHJpb3IgdG8gYnVpbGRpbmcgYW4KKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgQmVjYXVzZSB0aGVzZSBmaWxlcyBhcmUgbm90IGRpcmVjdGx5IHByb2R1Y2VkIGZyb20gdGhlIGltYWdlLCBpZiB5b3UKKyAgICAgICAgICAgIGRlbGV0ZSB0aGVtIHRoZXkgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSByZS1jcmVhdGVkIHdoZW4geW91IGJ1aWxkIHRoZSBpbWFnZSBhZ2Fpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSWYgeW91IGRvIGFjY2lkZW50YWxseSBkZWxldGUgZmlsZXMgaGVyZSwgeW91IHdpbGwgbmVlZCB0byBmb3JjZSB0aGVtIHRvIGJlCisgICAgICAgICAgICByZS1jcmVhdGVkLgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gZG8gdGhhdCwgeW91IHdpbGwgbmVlZCB0byBrbm93IHRoZSB0YXJnZXQgdGhhdCBwcm9kdWNlZCB0aGVtLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZXNlIGNvbW1hbmRzIHJlYnVpbGQgYW5kIHJlLWNyZWF0ZSB0aGUga2VybmVsIGZpbGVzOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWMgY2xlYW4gdmlydHVhbC9rZXJuZWwKKyAgICAgJCBiaXRiYWtlIHZpcnR1YWwva2VybmVsCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLWJ1aWxkLXRtcC1kZXBsb3ktc2RrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvZGVwbG95L3Nkay88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzIHRoaXMgZGlyZWN0b3J5IHRvIGhvbGQKKyAgICAgICAgICAgIHRvb2xjaGFpbiBpbnN0YWxsZXIgc2NyaXB0cywgd2hpY2ggd2hlbiBleGVjdXRlZCwgaW5zdGFsbCB0aGUKKyAgICAgICAgICAgIHN5c3Jvb3QgdGhhdCBtYXRjaGVzIHlvdXIgdGFyZ2V0IGhhcmR3YXJlLgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIG91dCBtb3JlIGFib3V0IHRoZXNlIGluc3RhbGxlcnMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsjb3B0aW9uYWxseS1idWlsZGluZy1hLXRvb2xjaGFpbi1pbnN0YWxsZXInPk9wdGlvbmFsbHkgQnVpbGRpbmcgYSBUb29sY2hhaW4gSW5zdGFsbGVyPC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3N0YXRlLWNvbnRyb2wnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9zc3RhdGUtY29udHJvbC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoaXMgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBtYW5pZmVzdCBmaWxlcy4KKyAgICAgICAgICAgIFRoZSBzaGFyZWQgc3RhdGUgY29kZSB1c2VzIHRoZXNlIGZpbGVzIHRvIHJlY29yZCB0aGUgZmlsZXMKKyAgICAgICAgICAgIGluc3RhbGxlZCBieSBlYWNoIHNzdGF0ZSB0YXNrIHNvIHRoYXQgdGhlIGZpbGVzIGNhbiBiZSByZW1vdmVkCisgICAgICAgICAgICB3aGVuIGNsZWFuaW5nIHRoZSByZWNpcGUgb3Igd2hlbiBhIG5ld2VyIHZlcnNpb24gaXMgYWJvdXQgdG8KKyAgICAgICAgICAgIGJlIGluc3RhbGxlZC4KKyAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gYWxzbyB1c2VzIHRoZSBtYW5pZmVzdHMgdG8gZGV0ZWN0IGFuZCBwcm9kdWNlCisgICAgICAgICAgICBhIHdhcm5pbmcgd2hlbiBmaWxlcyBmcm9tIG9uZSB0YXNrIGFyZSBvdmVyd3JpdGluZyB0aG9zZSBmcm9tCisgICAgICAgICAgICBhbm90aGVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3lzcm9vdHMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC9zeXNyb290cy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBzaGFyZWQgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMgYXMgd2VsbCBhcyBvdGhlciBzaGFyZWQKKyAgICAgICAgICAgIGRhdGEuCisgICAgICAgICAgICBQYWNrYWdlcyB0aGF0IG5lZWQgdG8gc2hhcmUgb3V0cHV0IHdpdGggb3RoZXIgcGFja2FnZXMgZG8gc28gd2l0aGluIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSBpcyBzdWJkaXZpZGVkIGJ5IGFyY2hpdGVjdHVyZSBzbyBtdWx0aXBsZSBidWlsZHMgY2FuIHJ1biB3aXRoaW4KKyAgICAgICAgICAgIHRoZSBvbmUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtc3RhbXBzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5idWlsZC90bXAvc3RhbXBzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGhvbGRzIGluZm9ybWF0aW9uIHRoYXQgQml0QmFrZSB1c2VzIGZvciBhY2NvdW50aW5nIHB1cnBvc2VzCisgICAgICAgICAgICB0byB0cmFjayB3aGF0IHRhc2tzIGhhdmUgcnVuIGFuZCB3aGVuIHRoZXkgaGF2ZSBydW4uCisgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGlzIHN1Yi1kaXZpZGVkIGJ5IGFyY2hpdGVjdHVyZSwgcGFja2FnZSBuYW1lLCBhbmQKKyAgICAgICAgICAgIHZlcnNpb24uCisgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgc3RhbXBzL2FsbC1wb2t5LWxpbnV4L2Rpc3RjYy1jb25maWcvMS4wLXIwLmRvX2J1aWxkLTJmZGQuLi4uMmRvCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBBbHRob3VnaCB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgZW1wdHkgb2YgZGF0YSwKKyAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGUgZmlsZW5hbWVzIGFuZCB0aW1lc3RhbXBzIGZvciB0cmFja2luZyBwdXJwb3Nlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtdG1wLWxvZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL2xvZy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBnZW5lcmFsIGxvZ3MgdGhhdCBhcmUgbm90IG90aGVyd2lzZSBwbGFjZWQgdXNpbmcgdGhlCisgICAgICAgICAgICBwYWNrYWdlJ3MgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRXhhbXBsZXMgb2YgbG9ncyBhcmUgdGhlIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX2NoZWNrX3BrZzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZGlzdHJvX2NoZWNrPC9maWxlbmFtZT4gdGFza3MuCisgICAgICAgICAgICBSdW5uaW5nIGEgYnVpbGQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGlzIGRpcmVjdG9yeSBpcyBjcmVhdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1idWlsZC10bXAtd29yayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGQvdG1wL3dvcmsvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHdvcmsgc3ViLWRpcmVjdG9yaWVzCisgICAgICAgICAgICBmb3IgcGFja2FnZXMgYnVpbHQgYnkgQml0QmFrZS4KKyAgICAgICAgICAgIEFsbCB0YXNrcyBleGVjdXRlIGZyb20gdGhlIGFwcHJvcHJpYXRlIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBzb3VyY2UgZm9yIGEgcGFydGljdWxhciBwYWNrYWdlIGlzIHVucGFja2VkLAorICAgICAgICAgICAgcGF0Y2hlZCwgY29uZmlndXJlZCBhbmQgY29tcGlsZWQgYWxsIHdpdGhpbiBpdHMgb3duIHdvcmsgZGlyZWN0b3J5LgorICAgICAgICAgICAgV2l0aGluIHRoZSB3b3JrIGRpcmVjdG9yeSwgb3JnYW5pemF0aW9uIGlzIGJhc2VkIG9uIHRoZSBwYWNrYWdlIGdyb3VwCisgICAgICAgICAgICBhbmQgdmVyc2lvbiBmb3Igd2hpY2ggdGhlIHNvdXJjZSBpcyBiZWluZyBjb21waWxlZAorICAgICAgICAgICAgYXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgd29ydGggY29uc2lkZXJpbmcgdGhlIHN0cnVjdHVyZSBvZiBhIHR5cGljYWwgd29yayBkaXJlY3RvcnkuCisgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjb25zaWRlciA8ZmlsZW5hbWU+bGludXgteW9jdG8ta2VybmVsLTMuMDwvZmlsZW5hbWU+CisgICAgICAgICAgICBvbiB0aGUgbWFjaGluZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICBidWlsdCB3aXRoaW4gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBGb3IgdGhpcyBwYWNrYWdlLCBhIHdvcmsgZGlyZWN0b3J5IG9mCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvLzMuMCtnaXQxKyZsdDsuLi4uLiZndDs8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIHJlZmVycmVkIHRvIGFzIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+LCBpcyBjcmVhdGVkLgorICAgICAgICAgICAgV2l0aGluIHRoaXMgZGlyZWN0b3J5LCB0aGUgc291cmNlIGlzIHVucGFja2VkIHRvCisgICAgICAgICAgICA8ZmlsZW5hbWU+bGludXgtcWVtdXg4Ni1zdGFuZGFyZC1idWlsZDwvZmlsZW5hbWU+IGFuZCB0aGVuIHBhdGNoZWQgYnkgUXVpbHQuCisgICAgICAgICAgICAoU2VlIHRoZQorICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLWEtcXVpbHQtd29ya2Zsb3cnPlVzaW5nIFF1aWx0IGluIFlvdXIgV29ya2Zsb3c8L3VsaW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uLikKKyAgICAgICAgICAgIFdpdGhpbiB0aGUgPGZpbGVuYW1lPmxpbnV4LXFlbXV4ODYtc3RhbmRhcmQtYnVpbGQ8L2ZpbGVuYW1lPiBkaXJlY3RvcnksCisgICAgICAgICAgICBzdGFuZGFyZCBRdWlsdCBkaXJlY3RvcmllcyA8ZmlsZW5hbWU+bGludXgtMy4wL3BhdGNoZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT5saW51eC0zLjAvLnBjPC9maWxlbmFtZT4gYXJlIGNyZWF0ZWQsCisgICAgICAgICAgICBhbmQgc3RhbmRhcmQgUXVpbHQgY29tbWFuZHMgY2FuIGJlIHVzZWQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZXJlIGFyZSBvdGhlciBkaXJlY3RvcmllcyBnZW5lcmF0ZWQgd2l0aGluIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgbW9zdCBpbXBvcnRhbnQgZGlyZWN0b3J5IGlzIDxmaWxlbmFtZT5XT1JLRElSL3RlbXAvPC9maWxlbmFtZT4sCisgICAgICAgICAgICB3aGljaCBoYXMgbG9nIGZpbGVzIGZvciBlYWNoIHRhc2sgKDxmaWxlbmFtZT5sb2cuZG9fKi5waWQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgIGFuZCBjb250YWlucyB0aGUgc2NyaXB0cyBCaXRCYWtlIHJ1bnMgZm9yIGVhY2ggdGFzaworICAgICAgICAgICAgKDxmaWxlbmFtZT5ydW4uZG9fKi5waWQ8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPldPUktESVIvaW1hZ2UvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIHdoZXJlICJtYWtlCisgICAgICAgICAgICBpbnN0YWxsIiBwbGFjZXMgaXRzIG91dHB1dCB0aGF0IGlzIHRoZW4gc3BsaXQgaW50byBzdWItcGFja2FnZXMKKyAgICAgICAgICAgIHdpdGhpbiA8ZmlsZW5hbWU+V09SS0RJUi9wYWNrYWdlcy1zcGxpdC88L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtYnVpbGQtd29yay1zaGFyZWQnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmJ1aWxkL3RtcC93b3JrLXNoYXJlZC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgZWZmaWNpZW5jeSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcyBhbmQgdXNlcworICAgICAgICAgICAgdGhpcyBkaXJlY3RvcnkgdG8gaG9sZCByZWNpcGVzIHRoYXQgc2hhcmUgYSB3b3JrIGRpcmVjdG9yeSB3aXRoCisgICAgICAgICAgICBvdGhlciByZWNpcGVzLgorICAgICAgICAgICAgSW4gcHJhY3RpY2UsIHRoaXMgaXMgb25seSB1c2VkIGZvciA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4KKyAgICAgICAgICAgIGFuZCBpdHMgdmFyaWFudHMgKGUuZy4gPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmxpYmdjYzwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+Z2NjLXJ1bnRpbWU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIGFuZCBzbyBmb3J0aCkuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YSc+CisgICAgPHRpdGxlPlRoZSBNZXRhZGF0YSAtIDxmaWxlbmFtZT5tZXRhLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4gaXMgdGhlIGNvcmUKKyAgICAgICAgb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIE1ldGFkYXRhIGhhcyBzZXZlcmFsIGltcG9ydGFudCBzdWJkaXZpc2lvbnM6CisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNsYXNzZXMnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgPGZpbGVuYW1lPiouYmJjbGFzczwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgQ2xhc3MgZmlsZXMgYXJlIHVzZWQgdG8gYWJzdHJhY3QgY29tbW9uIGNvZGUgc28gaXQgY2FuIGJlIHJldXNlZCBieSBtdWx0aXBsZQorICAgICAgICAgICAgcGFja2FnZXMuCisgICAgICAgICAgICBFdmVyeSBwYWNrYWdlIGluaGVyaXRzIHRoZSA8ZmlsZW5hbWU+YmFzZS5iYmNsYXNzPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgIEV4YW1wbGVzIG9mIG90aGVyIGltcG9ydGFudCBjbGFzc2VzIGFyZSA8ZmlsZW5hbWU+YXV0b3Rvb2xzLmJiY2xhc3M8L2ZpbGVuYW1lPiwgd2hpY2gKKyAgICAgICAgICAgIGluIHRoZW9yeSBhbGxvd3MgYW55IEF1dG90b29sLWVuYWJsZWQgcGFja2FnZSB0byB3b3JrIHdpdGggdGhlIFlvY3RvIFByb2plY3Qgd2l0aCBtaW5pbWFsIGVmZm9ydC4KKyAgICAgICAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyA8ZmlsZW5hbWU+a2VybmVsLmJiY2xhc3M8L2ZpbGVuYW1lPiB0aGF0IGNvbnRhaW5zIGNvbW1vbiBjb2RlIGFuZCBmdW5jdGlvbnMKKyAgICAgICAgICAgIGZvciB3b3JraW5nIHdpdGggdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgICAgIEZ1bmN0aW9ucyBsaWtlIGltYWdlIGdlbmVyYXRpb24gb3IgcGFja2FnaW5nIGFsc28gaGF2ZSB0aGVpciBzcGVjaWZpYyBjbGFzcyBmaWxlcworICAgICAgICAgICAgc3VjaCBhcyA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+cm9vdGZzXyouYmJjbGFzczwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2UqLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiBjbGFzc2VzLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMnPkNsYXNzZXM8L2xpbms+IiBjaGFwdGVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY29uZi88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgY29yZSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHN0YXJ0IGZyb20KKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBhbmQgZnJvbSB3aGljaCBhbGwgb3RoZXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZXMgYXJlIGluY2x1ZGVkLgorICAgICAgICAgICAgU2VlIHRoZSBpbmNsdWRlIHN0YXRlbWVudHMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGFuZCB5b3Ugd2lsbCBub3RlIHRoYXQgZXZlbgorICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBpcyBsb2FkZWQgZnJvbSB0aGVyZS4KKyAgICAgICAgICAgIFdoaWxlIDxmaWxlbmFtZT5iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBzZXRzIHVwIHRoZSBkZWZhdWx0cywgeW91IGNhbiBvZnRlbiBvdmVycmlkZQorICAgICAgICAgICAgdGhlc2UgYnkgdXNpbmcgdGhlICg8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+KSBmaWxlLCBtYWNoaW5lIGZpbGUgb3IKKyAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYtbWFjaGluZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICBJZiB5b3Ugc2V0IDxmaWxlbmFtZT5NQUNISU5FID0gInFlbXV4ODYiPC9maWxlbmFtZT4sCisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBsb29rcyBmb3IgYSA8ZmlsZW5hbWU+cWVtdXg4Ni5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGlzCisgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgY29udGFpbnMgdmFyaW91cyBkYXRhIGNvbW1vbiB0byBtdWx0aXBsZSBtYWNoaW5lcy4KKyAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBhIG5ldyBtYWNoaW5lIHRvIHRoZSBZb2N0byBQcm9qZWN0LCBsb29rIGluIHRoaXMgZGlyZWN0b3J5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYtZGlzdHJvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGRpcmVjdG9yeSBjb250cm9scyBhbnkgZGlzdHJpYnV0aW9uLXNwZWNpZmljCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgIEZvciB0aGUgWW9jdG8gUHJvamVjdCwgdGhlIDxmaWxlbmFtZT5kZWZhdWx0c2V0dXAuY29uZjwvZmlsZW5hbWU+IGlzIHRoZSBtYWluIGZpbGUgaGVyZS4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGluY2x1ZGVzIHRoZSB2ZXJzaW9ucyBhbmQgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDREFURTwvZmlsZW5hbWU+IGRlZmluaXRpb25zIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgY29uZmlndXJlZCBoZXJlLgorICAgICAgICAgICAgQW4gZXhhbXBsZSBvZiBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIDxmaWxlbmFtZT5wb2t5LWJsZWVkaW5nLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIEFsdGhvdWdoIHRoaXMgZmlsZSBtYWlubHkgaW5oZXJpdHMgaXRzIGNvbmZpZ3VyYXRpb24gZnJvbSBQb2t5LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWNvbmYtbWFjaGluZS1zZGsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lLXNkay88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyB0aGlzIGRpcmVjdG9yeSBmb3IKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgMzItYml0IGFuZCA2NC1iaXQgeDg2IGZpbGVzIHNoaXAgd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgIFByb2plY3QgdGhhdCBzdXBwb3J0IHNvbWUgU0RLIGhvc3RzLgorICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gZXh0ZW5kIHRoYXQgc3VwcG9ydCB0byBvdGhlciBTREsgaG9zdHMKKyAgICAgICAgICAgIGJ5IGFkZGluZyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhpcyBzdWJkaXJlY3RvcnkKKyAgICAgICAgICAgIHdpdGhpbiBhbm90aGVyIGxheWVyLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLWZpbGVzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL2ZpbGVzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvbW1vbiBsaWNlbnNlIGZpbGVzIGFuZCBzZXZlcmFsIHRleHQgZmlsZXMKKyAgICAgICAgICAgIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgIFRoZSB0ZXh0IGZpbGVzIGNvbnRhaW4gbWluaW1hbCBkZXZpY2UgaW5mb3JtYXRpb24gYW5kCisgICAgICAgICAgICBsaXN0cyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBrbm93biBwZXJtaXNzaW9ucy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1saWInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvbGliLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIE9wZW5FbWJlZGRlZCBQeXRob24gbGlicmFyeSBjb2RlCisgICAgICAgICAgICB1c2VkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWJzcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWJzcC88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhbnl0aGluZyBsaW5raW5nIHRvIHNwZWNpZmljIGhhcmR3YXJlIG9yIGhhcmR3YXJlCisgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHN1Y2ggYXMgInUtYm9vdCIgYW5kICJncnViIi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWNvbm5lY3Rpdml0eSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucyByZWxhdGVkIHRvIGNvbW11bmljYXRpb24gd2l0aCBvdGhlciBkZXZpY2VzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtY29yZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgd2hhdCBpcyBuZWVkZWQgdG8gYnVpbGQgYSBiYXNpYyB3b3JraW5nIExpbnV4IGltYWdlCisgICAgICAgICAgICBpbmNsdWRpbmcgY29tbW9ubHkgdXNlZCBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1kZXZ0b29scyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWRldnRvb2xzLzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRvb2xzIHRoYXQgYXJlIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICBUaGUgdG9vbHMsIGhvd2V2ZXIsIGNhbiBhbHNvIGJlIHVzZWQgb24gdGFyZ2V0cy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWV4dGVuZGVkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbm9uLWVzc2VudGlhbCBhcHBsaWNhdGlvbnMgdGhhdCBhZGQgZmVhdHVyZXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMgaW4gY29yZS4KKyAgICAgICAgICAgIFlvdSBtaWdodCBuZWVkIHRoaXMgZGlyZWN0b3J5IGZvciBmdWxsIHRvb2wgZnVuY3Rpb25hbGl0eSBvciBmb3IgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKQorICAgICAgICAgICAgY29tcGxpYW5jZS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWdub21lJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZ25vbWUvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBHVEsrIGFwcGxpY2F0aW9uIGZyYW1ld29yay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLWdyYXBoaWNzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgWCBhbmQgb3RoZXIgZ3JhcGhpY2FsbHkgcmVsYXRlZCBzeXN0ZW0gbGlicmFyaWVzCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1rZXJuZWwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1rZXJuZWwvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGtlcm5lbCBhbmQgZ2VuZXJpYyBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyB0aGF0CisgICAgICAgICAgICBoYXZlIHN0cm9uZyBrZXJuZWwgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtbHNiNCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWxzYjQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcmVjaXBlcyBzcGVjaWZpY2FsbHkgYWRkZWQgdG8gc3VwcG9ydAorICAgICAgICAgICAgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdmVyc2lvbiA0LnguCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1tdWx0aW1lZGlhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb2RlY3MgYW5kIHN1cHBvcnQgdXRpbGl0aWVzIGZvciBhdWRpbywgaW1hZ2VzIGFuZCB2aWRlby4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLXF0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtcXQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBRdCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1ydCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXJ0LzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHBhY2thZ2UgYW5kIGltYWdlIHJlY2lwZXMgZm9yIHVzaW5nIGFuZCB0ZXN0aW5nCisgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBSRUVNUFRfUlQ8L2ZpbGVuYW1lPiBrZXJuZWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nc3RydWN0dXJlLW1ldGEtcmVjaXBlcy1zYXRvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5tZXRhL3JlY2lwZXMtc2F0by88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgU2F0byBkZW1vL3JlZmVyZW5jZSBVSS9VWCBhbmQgaXRzIGFzc29jaWF0ZWQgYXBwbGljYXRpb25zCisgICAgICAgICAgICBhbmQgY29uZmlndXJhdGlvbiBkYXRhLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXJlY2lwZXMtc3VwcG9ydCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXN1cHBvcnQvPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcmVjaXBlcyB1c2VkIGJ5IG90aGVyIHJlY2lwZXMsIGJ1dCB0aGF0IGFyZQorICAgICAgICAgICAgbm90IGRpcmVjdGx5IGluY2x1ZGVkIGluIGltYWdlcyAoaS5lLiBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIKKyAgICAgICAgICAgIHJlY2lwZXMpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3N0cnVjdHVyZS1tZXRhLXNpdGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPm1ldGEvc2l0ZS88L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGxpc3Qgb2YgY2FjaGVkIHJlc3VsdHMgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgIEJlY2F1c2UgY2VydGFpbiAiYXV0b2NvbmYiIHRlc3QgcmVzdWx0cyBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB3aGVuIGNyb3NzLWNvbXBpbGluZyBkdWUgdG8KKyAgICAgICAgICAgIHRoZSB0ZXN0cyBub3QgYWJsZSB0byBydW4gb24gYSBsaXZlIHN5c3RlbSwgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZGlyZWN0b3J5IGlzCisgICAgICAgICAgICBwYXNzZWQgdG8gImF1dG9jb25mIiBmb3IgdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdzdHJ1Y3R1cmUtbWV0YS1yZWNpcGVzLXR4dCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLnR4dDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50cyBvZiA8ZmlsZW5hbWU+cmVjaXBlcy0qPC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE4ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi1zdHlsZS5jc3MKQEAgLTAsMCArMSwxMDI4IEBACisvKgorICAgR2VuZXJpYyBYSFRNTCAvIERvY0Jvb2sgWEhUTUwgQ1NTIFN0eWxlc2hlZXQuCisKKyAgIEJyb3dzZXIgd3JhbmdsaW5nIGFuZCB0eXBvZ3JhcGhpYyBkZXNpZ24gYnkKKyAgICAgIE95dmluZCBLb2xhcyAvIHBpcHBpbkBnaW1wLm9yZworCisgICBDdXN0b21pc2VkIGZvciBQb2t5IGJ5CisgICAgICBNYXR0aGV3IEFsbHVtIC8gbWFsbHVtQG8taGFuZC5jb20KKworICAgVGhhbmtzIHRvOgorICAgICBMaWFtIFIuIEUuIFF1aW4KKyAgICAgV2lsbGlhbSBTa2FnZ3MKKyAgICAgSmFrdWIgU3RlaW5lcgorCisgICBTdHJ1Y3R1cmUKKyAgIC0tLS0tLS0tLQorCisgICBUaGUgc3R5bGVzaGVldCBpcyBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworICAgICAgIFBvc2l0aW9uaW5nCisgICAgICAgICAgTWFyZ2lucywgcGFkZGluZ3MsIHdpZHRoLCBmb250LXNpemUsIGNsZWFyaW5nLgorICAgICAgIERlY29yYXRpb25zCisgICAgICAgICAgQm9yZGVycywgc3R5bGUKKyAgICAgICBDb2xvcnMKKyAgICAgICAgICBDb2xvcnMKKyAgICAgICBHcmFwaGljcworICAgICAgICAgIEdyYXBoaWNhbCBiYWNrZ3JvdW5kcworICAgICAgIE5hc3R5IElFIHR3ZWFrcworICAgICAgICAgIFdvcmthcm91bmRzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgaW4gaW50ZXJuZXQgZXhwbG9yZXIsCisgICAgICAgICAgY3VycmVudGx5IG1ha2VzIHRoZSBzdHlsZXNoZWV0IG5vbiB2YWxpZGF0aW5nLCBidXQgdXAgdW50aWwKKyAgICAgICAgICB0aGlzIHBvaW50IGl0IGlzIHZhbGlkYXRpbmcuCisgICAgICAgTW96aWxsYSBleHRlbnNpb25zCisgICAgICAgICAgVHJhbnNwYXJlbmN5IGZvciBmb290ZXIKKwkgIFJvdW5kZWQgY29ybmVycyBvbiBib3hlcworCisqLworCisKKyAgLyoqKioqKioqKioqKioqKiAvCisgLyAgUG9zaXRpb25pbmcgICAvCisvICoqKioqKioqKioqKioqKi8KKworYm9keSB7CisgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBTYW5zLCBzYW5zLXNlcmlmOworCisgIG1pbi13aWR0aDogNjQwcHg7CisgIHdpZHRoOiA4MCU7CisgIG1hcmdpbjogIDBlbSBhdXRvOworICBwYWRkaW5nOiAyZW0gNWVtIDVlbSA1ZW07CisgIGNvbG9yOiAjMzMzOworfQorCitoMSxoMixoMyxoNCxoNSxoNixoNyB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgU2FuczsKKyAgY29sb3I6ICMwMDU1N0Q7CisgIGNsZWFyOiBib3RoOworfQorCitoMSB7CisgIGZvbnQtc2l6ZTogMmVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMmVtIDBlbSAwZW0gMGVtOworfQorCitoMi5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMC4xMGVtIDBlbSAzLjBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjhlbTsKKyAgcGFkZGluZy1sZWZ0OiAyMCU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworaDIgeworICBtYXJnaW46IDJlbSAwZW0gMC42NmVtIDBlbTsKKyAgcGFkZGluZzogMC41ZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS41ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoMy5zdWJ0aXRsZSB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQyLjE0JTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKK2gzIHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0MCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNCB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMjAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDUgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g2IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmF1dGhvcmdyb3VwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIHBhZGRpbmctdG9wOiAyNTZweDsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJmaWd1cmVzL3Bva3ktdGl0bGUucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOworICBtYXJnaW4tdG9wOiAtMjU2cHg7CisgIHBhZGRpbmctcmlnaHQ6IDUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIHRleHQtYWxpZ246IHJpZ2h0OworICB3aWR0aDogNzQwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLyogVXNlIHRoaXMgc2V0IHdoZW4geW91IGRlY2lkZSB0byBnZXQgdGhlIGltYWdlcyBpbiBmb3IgdmFyaWFibGVzLgorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDBlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy52YXJpYWJsZWxpc3QgZGwgZHQgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKK30KKworLmdsb3NzYXJ5IGRsIGRkLAorLnZhcmlhYmxlbGlzdCBkbCBkZCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWxlZnQ6IDE1LjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMmVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZ2xvc3NkZWZmaXJzdCB7CisgIHRleHQtaW5kZW50OiAtNzBweDsKK30KKyovCisKKy8qIFN0YXJ0IG9mIG5vbi1pbWFnZSBzZXQgKi8KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZ2xvc3NkZWZmaXJzdCB7CisgIHRleHQtaW5kZW50OiAwcHg7Cit9CisKKy8qIEVuZCBvZiBub24taW1hZ2Ugc2V0ICovCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy9wb2t5LXRpdGxlLnBuZyIpOworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi10YXNrcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliNGQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdGFza3MueG1sCkBAIC0wLDAgKzEsNzExIEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLXRhc2tzJz4KKzx0aXRsZT5UYXNrczwvdGl0bGU+CisKKzxwYXJhPgorICAgIFRhc2tzIGFyZSB1bml0cyBvZiBleGVjdXRpb24gZm9yIEJpdEJha2UuCisgICAgUmVjaXBlcyAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzKSB1c2UgdGFza3MgdG8gY29tcGxldGUKKyAgICBjb25maWd1cmluZywgY29tcGlsaW5nLCBhbmQgcGFja2FnaW5nIHNvZnR3YXJlLgorICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyBhIHJlZmVyZW5jZSBvZiB0aGUgdGFza3MgZGVmaW5lZCBpbiB0aGUKKyAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorPC9wYXJhPgorCis8c2VjdGlvbiBpZD0nbm9ybWFsLXJlY2lwZS1idWlsZC10YXNrcyc+CisgICAgPHRpdGxlPk5vcm1hbCBSZWNpcGUgQnVpbGQgVGFza3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgbm9ybWFsIHRhc2tzIGFzc29jaWF0ZWQgd2l0aCBidWlsZGluZworICAgICAgICBhIHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWJ1aWxkJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgZm9yIGFsbCByZWNpcGVzLgorICAgICAgICAgICAgVGhpcyB0YXNrIGRlcGVuZHMgb24gYWxsIG90aGVyIG5vcm1hbCB0YXNrcworICAgICAgICAgICAgcmVxdWlyZWQgdG8gYnVpbGQgYSByZWNpcGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNvbXBpbGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb21waWxlcyB0aGUgc291cmNlIGluIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnksIHdoaWNoIGlzIHBvaW50ZWQKKyAgICAgICAgICAgIHRvIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb21waWxlX3B0ZXN0X2Jhc2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NvbXBpbGVfcHRlc3RfYmFzZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbXBpbGVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY29uZmlndXJlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBzb3VyY2UgYnkgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBhbnkgYnVpbGQtdGltZSBhbmQKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jb25maWd1cmVfcHRlc3RfYmFzZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGVwbG95Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXcml0ZXMgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHRvIGJlIGRlcGxveWVkIHRvIHRoZSBkZXBsb3kKKyAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lESVInPjxmaWxlbmFtZT5ERVBMT1lESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmRvX2RlcGxveTwvZmlsZW5hbWU+IHRhc2sgaXMgYQorICAgICAgICAgICAgc2hhcmVkIHN0YXRlIChzc3RhdGUpIHRhc2ssIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHRhc2sgY2FuCisgICAgICAgICAgICBiZSBhY2NlbGVyYXRlZCB0aHJvdWdoIHNzdGF0ZSB1c2UuCisgICAgICAgICAgICBSZWFsaXplIGFsc28gdGhhdCBpZiB0aGUgdGFzayBpcyByZS1leGVjdXRlZCwgYW55IHByZXZpb3VzIG91dHB1dAorICAgICAgICAgICAgaXMgcmVtb3ZlZCAoaS5lLiAiY2xlYW5lZCIpLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1mZXRjaCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZXRjaGVzIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIFRoaXMgdGFzayB1c2VzIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGhlIGFyZ3VtZW50J3MgcHJlZml4IHRvIGRldGVybWluZSB0aGUgY29ycmVjdAorICAgICAgICAgICAgZmV0Y2hlciBtb2R1bGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWluc3RhbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb3BpZXMgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5LCB3aGljaCBpcyBkZWZpbmVkIGJ5CisgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CJz48ZmlsZW5hbWU+QjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgIHRvIGEgaG9sZGluZyBhcmVhIGRlZmluZWQgYnkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRCc+PGZpbGVuYW1lPkQ8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWluc3RhbGxfcHRlc3RfYmFzZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9faW5zdGFsbF9wdGVzdF9iYXNlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29waWVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5CisgICAgICAgICAgICB0byBhIGhvbGRpbmcgYXJlYS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFuYWx5emVzIHRoZSBjb250ZW50IG9mIHRoZSBob2xkaW5nIGFyZWEgYW5kIHNwbGl0cyBpdCBpbnRvIHN1YnNldHMKKyAgICAgICAgICAgIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2VfcWEnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2VfcWE8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5zIFFBIGNoZWNrcyBvbiBwYWNrYWdlZCBmaWxlcy4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIGNoZWNrcywgc2VlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9kZWInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyBEZWJpYW4gcGFja2FnZXMgKGkuZS4gPGZpbGVuYW1lPiouZGViPC9maWxlbmFtZT4gZmlsZXMpIGFuZAorICAgICAgICAgICAgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX0RFQic+PGZpbGVuYW1lPkRFUExPWV9ESVJfREVCPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwYWNrYWdlIGZlZWRzIGFyZWEuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgSVBLIHBhY2thZ2VzIChpLmUuIDxmaWxlbmFtZT4qLmlwazwvZmlsZW5hbWU+IGZpbGVzKSBhbmQKKyAgICAgICAgICAgIHBsYWNlcyB0aGVtIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JUEsnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lQSzwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgIGRpcmVjdG9yeSBpbiB0aGUgcGFja2FnZSBmZWVkcyBhcmVhLgorICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYWNrYWdlLWZlZWRzLWRldi1lbnZpcm9ubWVudCc+UGFja2FnZSBGZWVkczwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX3JwbSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIFJQTSBwYWNrYWdlcyAoaS5lLiA8ZmlsZW5hbWU+Ki5ycG08L2ZpbGVuYW1lPiBmaWxlcykgYW5kCisgICAgICAgICAgICBwbGFjZXMgdGhlbSBpbiB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfUlBNJz48ZmlsZW5hbWU+REVQTE9ZX0RJUl9SUE08L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICBkaXJlY3RvcnkgaW4gdGhlIHBhY2thZ2UgZmVlZHMgYXJlYS4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV90YXInPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfdGFyPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyB0YXJiYWxscyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSX1RBUic+PGZpbGVuYW1lPkRFUExPWV9ESVJfVEFSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgZGlyZWN0b3J5IGluIHRoZSBwYWNrYWdlIGZlZWRzIGFyZWEuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19wYWNrYWdlZGF0YTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgcGFja2FnZSBtZXRhZGF0YSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgICBmaW5hbCBwYWNrYWdlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtcGF0Y2gnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgTG9jYXRlcyBwYXRjaCBmaWxlcyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdwYXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPlBhdGNoaW5nPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBvcHVsYXRlX2xpYyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcG9wdWxhdGVfbGljPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV3JpdGVzIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIHRoZSByZWNpcGUgdGhhdCBpcyBjb2xsZWN0ZWQgbGF0ZXIKKyAgICAgICAgICAgIHdoZW4gdGhlIGltYWdlIGlzIGNvbnN0cnVjdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1wb3B1bGF0ZV9zZGsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3NkazwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgdGhlIGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFuIGluc3RhbGxhYmxlIFNESy4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzZGstZ2VuZXJhdGlvbi1kZXYtZW52aXJvbm1lbnQnPlNESyBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BvcHVsYXRlX3N5c3Jvb3Q8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb3BpZXMgYSBzdWJzZXQgb2YgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGludG8gdGhlIHN5c3Jvb3QgaW4gb3JkZXIgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZSB0byBvdGhlcgorICAgICAgICAgICAgcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT4gdGFzayBpcyBhCisgICAgICAgICAgICBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgdGFzaywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdGFzayBjYW4KKyAgICAgICAgICAgIGJlIGFjY2VsZXJhdGVkIHRocm91Z2ggc3N0YXRlIHVzZS4KKyAgICAgICAgICAgIFJlYWxpemUgYWxzbyB0aGF0IGlmIHRoZSB0YXNrIGlzIHJlLWV4ZWN1dGVkLCBhbnkgcHJldmlvdXMgb3V0cHV0CisgICAgICAgICAgICBpcyByZW1vdmVkIChpLmUuICJjbGVhbmVkIikuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXJtX3dvcmsnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3JtX3dvcms8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmVzIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzCisgICAgICAgICAgICBmaW5pc2hlZCB3aXRoIHRoZW0uCisgICAgICAgICAgICBZb3UgY2FuIGxlYXJuIG1vcmUgYnkgbG9va2luZyBhdCB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yay5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtcm1fd29ya19hbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3JtX3dvcmtfYWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG9wLWxldmVsIHRhc2sgZm9yIHJlbW92aW5nIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMKKyAgICAgICAgICAgIGZpbmlzaGVkIHdpdGggdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtdW5wYWNrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBVbnBhY2tzIHRoZSBzb3VyY2UgY29kZSBpbnRvIGEgd29ya2luZyBkaXJlY3RvcnkgcG9pbnRlZCB0bworICAgICAgICAgICAgYnkKKyAgICAgICAgICAgIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVMnPjxmaWxlbmFtZT5TPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlIGFsc28KKyAgICAgICAgICAgIHBsYXlzIGEgcm9sZSBpbiB3aGVyZSB1bnBhY2tlZCBzb3VyY2UgZmlsZXMgdWx0aW1hdGVseSByZXNpZGUuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgc291cmNlIGZpbGVzIGFyZSB1bnBhY2tlZCwgc2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NvdXJjZS1mZXRjaGluZy1kZXYtZW52aXJvbm1lbnQnPlNvdXJjZSBGZXRjaGluZzwvbGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5TPC9maWxlbmFtZT4gdmFyaWFibGUgZGVzY3JpcHRpb25zLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nbWFudWFsbHktY2FsbGVkLXRhc2tzJz4KKyAgICA8dGl0bGU+TWFudWFsbHkgQ2FsbGVkIFRhc2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGVzZSB0YXNrcyBhcmUgdHlwaWNhbGx5IG1hbnVhbGx5IHRyaWdnZXJlZCAoZS5nLiBieSB1c2luZyB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWM8L2ZpbGVuYW1lPiBjb21tYW5kLWxpbmUgb3B0aW9uKToKKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNoZWNrdXJpJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jaGVja3VyaTwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZhbGlkYXRlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNoZWNrdXJpYWxsJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19jaGVja3VyaWFsbDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFZhbGlkYXRlcyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz48ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWUgZm9yIGFsbCByZWNpcGVzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdGFyZ2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jbGVhbic+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2xlYW48L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgZm9yIGEgdGFyZ2V0IGZyb20gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtdW5wYWNrJz48ZmlsZW5hbWU+ZG9fdW5wYWNrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGZvcndhcmQgKGkuZS4KKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3VucGFjazwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29tcGlsZSc+PGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoaXMgdGFzayB1c2luZyBCaXRCYWtlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbiA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUnVubmluZyB0aGlzIHRhc2sgZG9lcyBub3QgcmVtb3ZlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KSBjYWNoZQorICAgICAgICAgICAgZmlsZXMuCisgICAgICAgICAgICBDb25zZXF1ZW50bHksIGlmIG5vIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYW5kIHRoZSByZWNpcGUgaXMKKyAgICAgICAgICAgIHJlYnVpbHQgYWZ0ZXIgY2xlYW5pbmcsIG91dHB1dCBmaWxlcyBhcmUgc2ltcGx5IHJlc3RvcmVkIGZyb20gdGhlCisgICAgICAgICAgICBzc3RhdGUgY2FjaGUuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHNzdGF0ZSBjYWNoZSBmaWxlcyBmb3IgdGhlIHJlY2lwZSwKKyAgICAgICAgICAgIHlvdSBuZWVkIHRvIHVzZSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIGluc3RlYWQgKGkuZS4gPGZpbGVuYW1lPmJpdGJha2UgLWMgY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4pLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1jbGVhbmFsbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY2xlYW5hbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMsIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3NoYXJlZC1zdGF0ZS1jYWNoZSc+c3N0YXRlPC9saW5rPikgY2FjaGUsIGFuZAorICAgICAgICAgICAgZG93bmxvYWRlZCBzb3VyY2UgZmlsZXMgZm9yIGEgdGFyZ2V0IChpLmUuIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICBFc3NlbnRpYWxseSwgdGhlIDxmaWxlbmFtZT5kb19jbGVhbmFsbDwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbnNzdGF0ZSc+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIHdpdGggdGhlIGFkZGVkIHJlbW92YWwgb2YgZG93bmxvYWRlZCBzb3VyY2UgZmlsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gcnVuIHRoaXMgdGFzayB1c2luZyBCaXRCYWtlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBjbGVhbmFsbCA8cmVwbGFjZWFibGU+cmVjaXBlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3Ugd291bGQgbm90IG5vcm1hbGx5IHVzZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5jbGVhbmFsbDwvZmlsZW5hbWU+IHRhc2suCisgICAgICAgICAgICBEbyBzbyBvbmx5IGlmIHlvdSB3YW50IHRvIHN0YXJ0IGZyZXNoIHdpdGggdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtZmV0Y2gnPjxmaWxlbmFtZT5kb19mZXRjaDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzay4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtY2xlYW5zc3RhdGUnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2NsZWFuc3N0YXRlPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGFuZCBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSdzaGFyZWQtc3RhdGUtY2FjaGUnPnNzdGF0ZTwvbGluaz4pCisgICAgICAgICAgICBjYWNoZSBmb3IgYSB0YXJnZXQuCisgICAgICAgICAgICBFc3NlbnRpYWxseSwgdGhlIDxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+IHRhc2sgaXMKKyAgICAgICAgICAgIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jbGVhbic+PGZpbGVuYW1lPmRvX2NsZWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB0YXNrIHdpdGggdGhlIGFkZGVkIHJlbW92YWwgb2Ygc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0nc2hhcmVkLXN0YXRlLWNhY2hlJz5zc3RhdGU8L2xpbms+KSBjYWNoZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBydW4gdGhpcyB0YXNrIHVzaW5nIEJpdEJha2UgYXMgZm9sbG93czoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIDxyZXBsYWNlYWJsZT5yZWNpcGU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBydW4gdGhlIDxmaWxlbmFtZT5kb19jbGVhbnNzdGF0ZTwvZmlsZW5hbWU+IHRhc2ssCisgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBubyBsb25nZXIgdXNlcyBhbnkKKyAgICAgICAgICAgIHNzdGF0ZS4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgYnVpbGRpbmcgdGhlIHJlY2lwZSBmcm9tIHNjcmF0Y2ggaXMgZ3VhcmFudGVlZC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fY2xlYW5zc3RhdGU8L2ZpbGVuYW1lPiB0YXNrIGNhbm5vdCByZW1vdmUKKyAgICAgICAgICAgICAgICBzc3RhdGUgZnJvbSBhIHJlbW90ZSBzc3RhdGUgbWlycm9yLgorICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgdGFyZ2V0IGZyb20gc2NyYXRjaCB1c2luZyByZW1vdGUKKyAgICAgICAgICAgICAgICBtaXJyb3JzLCB1c2UgdGhlICItZiIgb3B0aW9uIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWYgLWMgZG9fY2xlYW5zc3RhdGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisgICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGV2c2hlbGwnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU3RhcnRzIGEgc2hlbGwgd2hvc2UgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGZvcgorICAgICAgICAgICAgZGV2ZWxvcG1lbnQsIGRlYnVnZ2luZywgb3IgYm90aC4KKyAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwgZm9yIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIDxmaWxlbmFtZT5kZXZzaGVsbDwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1mZXRjaGFsbCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZmV0Y2hhbGw8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGZXRjaGVzIGFsbCByZW1vdGUgc291cmNlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtbGlzdHRhc2tzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBMaXN0cyBhbGwgZGVmaW5lZCB0YXNrcyBmb3IgYSB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXBhY2thZ2VfaW5kZXgnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3BhY2thZ2VfaW5kZXg8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIGluZGV4IGluIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+CisgICAgICAgICAgICBhcmVhLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhpcyB0YXNrIGlzIG5vdCB0cmlnZ2VyZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSAtYzwvZmlsZW5hbWU+IGNvbW1hbmQtbGluZSBvcHRpb24gYXMKKyAgICAgICAgICAgICAgICBhcmUgdGhlIG90aGVyIHRhc2tzIGluIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBCZWNhdXNlIHRoaXMgdGFzayBpcyBzcGVjaWZpY2FsbHkgZm9yIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlLWluZGV4PC9maWxlbmFtZT4gcmVjaXBlLAorICAgICAgICAgICAgICAgIHlvdSBydW4gaXQgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZSBwYWNrYWdlLWluZGV4PC9maWxlbmFtZT4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdpbWFnZS1yZWxhdGVkLXRhc2tzJz4KKyAgICA8dGl0bGU+SW1hZ2UtUmVsYXRlZCBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyB0YXNrcyBhcmUgYXBwbGljYWJsZSB0byBpbWFnZSByZWNpcGVzLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtYm9vdGltZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fYm9vdGltZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBib290YWJsZSBsaXZlIGltYWdlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBsaXZlIGltYWdlIHR5cGVzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1idW5kbGVfaW5pdHJhbWZzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19idW5kbGVfaW5pdHJhbWZzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29tYmluZXMgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKSBpbWFnZSBhbmQga2VybmVsCisgICAgICAgICAgICB0b2dldGhlciB0byBmb3JtIGEgc2luZ2xlIGltYWdlLgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09ORklHX0lOSVRSQU1GU19TT1VSQ0UnPjxmaWxlbmFtZT5DT05GSUdfSU5JVFJBTUZTX1NPVVJDRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUgaGFzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSB0eXBlcyBvZiBpbWFnZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXJvb3Rmcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ3JlYXRlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlKSBmb3IgYW4KKyAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2ltYWdlLWdlbmVyYXRpb24tZGV2LWVudmlyb25tZW50Jz5JbWFnZSBHZW5lcmF0aW9uPC9saW5rPiIKKyAgICAgICAgICAgIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3JlYXRlZC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtdGVzdGltYWdlJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb190ZXN0aW1hZ2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCb290cyBhbiBpbWFnZSBhbmQgcGVyZm9ybXMgcnVudGltZSB0ZXN0cyB3aXRoaW4gdGhlIGltYWdlLgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGF1dG9tYXRpY2FsbHkgdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXRlc3RpbWFnZV9hdXRvJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb190ZXN0aW1hZ2VfYXV0bzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UKKyAgICAgICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGhhcyBiZWVuIGJ1aWx0LgorICAgICAgICAgICAgVGhpcyB0YXNrIGlzIGVuYWJsZWQgd2hlbiB5b3Ugc2V0CisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9JTUFHRSc+PGZpbGVuYW1lPlRFU1RfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGVxdWFsIHRvICIxIi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGF1dG9tYXRpY2FsbHkgdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXZtZGtpbWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3ZtZGtpbWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgPGZpbGVuYW1lPi52bWRrPC9maWxlbmFtZT4gaW1hZ2UgZm9yIHVzZSB3aXRoCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnZtd2FyZS5jb20vJz5WTXdhcmU8L3VsaW5rPgorICAgICAgICAgICAgYW5kIGNvbXBhdGlibGUgdmlydHVhbCBtYWNoaW5lIGhvc3RzLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0na2VybmVsLXJlbGF0ZWQtdGFza3MnPgorICAgIDx0aXRsZT5LZXJuZWwtUmVsYXRlZCBUYXNrczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvbGxvd2luZyB0YXNrcyBhcmUgYXBwbGljYWJsZSB0byBrZXJuZWwgcmVjaXBlcy4KKyAgICAgICAgU29tZSBvZiB0aGVzZSB0YXNrcyAoZS5nLiB0aGUKKyAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLW1lbnVjb25maWcnPjxmaWxlbmFtZT5kb19tZW51Y29uZmlnPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgIHRhc2spIGFyZSBhbHNvIGFwcGxpY2FibGUgdG8gcmVjaXBlcyB0aGF0IHVzZQorICAgICAgICBMaW51eCBrZXJuZWwgc3R5bGUgY29uZmlndXJhdGlvbiBzdWNoIGFzIHRoZSBCdXN5Qm94IHJlY2lwZS4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLWNvbXBpbGVfa2VybmVsbW9kdWxlcyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ29tcGlsZXMgbG9hZGFibGUgbW9kdWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3MtZGlmZmNvbmZpZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZGlmZmNvbmZpZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENvbXBhcmVzIHRoZSBvbGQgYW5kIG5ldyBjb25maWcgZmlsZXMgYWZ0ZXIgcnVubmluZyB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1tZW51Y29uZmlnJz48ZmlsZW5hbWU+ZG9fbWVudWNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFzayBmb3IgdGhlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2NoZWNrb3V0Jz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19rZXJuZWxfY2hlY2tvdXQ8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDaGVja3Mgb3V0IHNvdXJjZS9tZXRhIGJyYW5jaGVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2NvbmZpZ2NoZWNrJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnY2hlY2s8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBWYWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2NvbmZpZ21lJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb19rZXJuZWxfY29uZmlnbWU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBc3NlbWJsZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mta2VybmVsX2xpbmtfdm1saW51eCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fa2VybmVsX2xpbmtfdm1saW51eDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+YXJjaC8kYXJjaC9ib290PC9maWxlbmFtZT4gZm9yIHZtbGludXgga2VybmVsCisgICAgICAgICAgICBpbWFnZXMuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLW1lbnVjb25maWcnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX21lbnVjb25maWc8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBSdW5zIDxmaWxlbmFtZT5tYWtlIG1lbnVjb25maWc8L2ZpbGVuYW1lPiBmb3IgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdXNpbmctbWVudWNvbmZpZyc+VXNpbmcmbmJzcDsmbmJzcDs8ZmlsZW5hbWU+bWVudWNvbmZpZzwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtc2F2ZWRlZmNvbmZpZyc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc2F2ZWRlZmNvbmZpZzwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIENyZWF0ZXMgYSBtaW5pbWFsIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXNpemVjaGVjayc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc2l6ZWNoZWNrPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2tzIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgYWdhaW5zdAorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9JTUFHRV9NQVhTSVpFJz48ZmlsZW5hbWU+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHdoZW4gc2V0LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1zdHJpcCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc3RyaXA8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTdHJpcHMgdW5uZWVkZWQgc2VjdGlvbnMgb3V0IG9mIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXVib290X21raW1hZ2UnPgorICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPmRvX3Vib290X21raW1hZ2U8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDcmVhdGVzIGEgdUltYWdlIGZpbGUgZnJvbSB0aGUga2VybmVsIGZvciB0aGUgVS1Cb290IGJvb3Rsb2FkZXIuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXRhc2tzLXZhbGlkYXRlX2JyYW5jaGVzJz4KKyAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5kb192YWxpZGF0ZV9icmFuY2hlczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgc291cmNlLCBtZXRhZGF0YSAob3IgYm90aCkgYnJhbmNoZXMgYXJlIG9uIHRoZQorICAgICAgICAgICAgbG9jYXRpb25zIHNwZWNpZmllZCBieSB0aGVpcgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ1JFVic+PGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFsdWVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbC4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J21pc2NlbGxhbmVvdXMtdGFza3MnPgorICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIFRhc2tzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIG1pc2NlbGxhbmVvdXMgdGFza3MuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3JlZi10YXNrcy1nZW5lcmF0ZV9xdF9jb25maWdfZmlsZSc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXcml0ZXMgYSA8ZmlsZW5hbWU+cXQuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgIGZpbGUgdXNlZCBmb3IgYnVpbGRpbmcgYSBRdC1iYXNlZCBhcHBsaWNhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdyZWYtdGFza3Mtc3BkeCc+CisgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+ZG9fc3BkeDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgYnVpbGQgc3RhZ2UgdGhhdCB0YWtlcyB0aGUgc291cmNlIGNvZGUgYW5kIHNjYW5zIGl0IG9uIGEgcmVtb3RlCisgICAgICAgICAgICBGT1NTT0xPR1kgc2VydmVyIGluIG9yZGVyIHRvIHByb2R1Y2UgYW4gU1BEWCBkb2N1bWVudC4KKyAgICAgICAgICAgIFRoaXMgdGFzayBhcHBsaWVzIG9ubHkgdG8gdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zcGR4Jz48ZmlsZW5hbWU+c3BkeDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3MuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJpYWJsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNGZjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVmLXZhcmlhYmxlcy54bWwKQEAgLTAsMCArMSwxNDA5NiBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPCEtLSBEdW1teSBjaGFwdGVyIC0tPgorPGNoYXB0ZXIgaWQ9J3JlZi12YXJpYWJsZXMtZ2xvcyc+CisKKzx0aXRsZT5WYXJpYWJsZXMgR2xvc3Nhcnk8L3RpdGxlPgorCis8cGFyYT4KKyAgICBUaGlzIGNoYXB0ZXIgbGlzdHMgY29tbW9uIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFuZCBnaXZlcyBhbiBvdmVydmlldworICAgIG9mIHRoZWlyIGZ1bmN0aW9uIGFuZCBjb250ZW50cy4KKzwvcGFyYT4KKworPGdsb3NzYXJ5IGlkPSdyZWYtdmFyaWFibGVzLWdsb3NzYXJ5Jz4KKworCisgICAgPHBhcmE+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFCSUVYVEVOU0lPTic+QTwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQic+QjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ0FDSEUnPkM8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUQnPkQ8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+RTwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+RjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItR0RCJz5HPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1IT01FUEFHRSc+SDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSUNFQ0NfRElTQUJMRUQnPkk8L2xpbms+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LWonPko8L2xpbms+IC0tPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LQVJDSCc+SzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTEFCRUxTJz5MPC9saW5rPgorICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS1uJz5OPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItT0JKQ09QWSc+TzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUCc+UDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUU1BS0VfUFJPRklMRVMnPlE8L2xpbms+CisgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJBTkxJQic+UjwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVCc+VDwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfQ09ORklHJz5VPC9saW5rPgorPCEtLSAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1nbG9zc2FyeS12Jz5WPC9saW5rPiAtLT4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItV0FSTl9RQSc+VzwvbGluaz4KKyAgICAgICA8bGluayBsaW5rZW5kPSd2YXItWFNFUlZFUic+WDwvbGluaz4KKzwhLS0gICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItZ2xvc3NhcnkteSc+WTwvbGluaz4gLS0+Cis8IS0tICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLWdsb3NzYXJ5LXonPlo8L2xpbms+LS0+CisgICAgPC9wYXJhPgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktYSc+PHRpdGxlPkE8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUJJRVhURU5TSU9OJz48Z2xvc3N0ZXJtPkFCSUVYVEVOU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUJJRVhURU5TSU9OW2RvY10gPSAiRXh0ZW5zaW9uIHRvIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIGZpZWxkIG9mIHRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBuYW1lIChlLmcuICJlYWJpIikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uIHRvIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIGZpZWxkIG9mIHRoZSBHTlUgY2Fub25pY2FsIGFyY2hpdGVjdHVyZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIChlLmcuICJlYWJpIikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQUJJIGV4dGVuc2lvbnMgYXJlIHNldCBpbiB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICBmaWxlIHNldHMgdGhlIGZvbGxvd2luZyBleHRlbnNpb246CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBQklFWFRFTlNJT04gPSAiZWFiaSIKKyAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQUxMT1dfRU1QVFknPjxnbG9zc3Rlcm0+QUxMT1dfRU1QVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFMTE9XX0VNUFRZW2RvY10gPSAiU3BlY2lmaWVzIGlmIGFuIG91dHB1dCBwYWNrYWdlIHNob3VsZCBzdGlsbCBiZSBwcm9kdWNlZCBpZiBpdCBpcyBlbXB0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBpZiBhbiBvdXRwdXQgcGFja2FnZSBzaG91bGQgc3RpbGwgYmUgcHJvZHVjZWQgaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgQml0QmFrZSBkb2VzIG5vdCBwcm9kdWNlIGVtcHR5IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCBiZWhhdmlvciBjYW4gY2F1c2UgaXNzdWVzIHdoZW4gdGhlcmUgaXMgYW4KKyAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPiBvcgorICAgICAgICAgICAgICAgICAgIHNvbWUgb3RoZXIgaGFyZCBydW50aW1lIHJlcXVpcmVtZW50IG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgTGlrZSBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cyB1c2UgdGhlbSBpbgorICAgICAgICAgICAgICAgICAgIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUsIGFzIGluOgorICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKyAgICAgQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCisgICAgIEFMTE9XX0VNUFRZXyR7UE59LXN0YXRpY2RldiA9ICIxIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRSc+PGdsb3NzdGVybT5BTFRFUk5BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQUxURVJOQVRJVkVbZG9jXSA9ICJMaXN0cyBjb21tYW5kcyBpbiBhIHBhY2thZ2UgdGhhdCBuZWVkIGFuIGFsdGVybmF0aXZlIGJpbmFyeSBuYW1pbmcgc2NoZW1lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGNvbW1hbmRzIGluIGEgcGFja2FnZSB0aGF0IG5lZWQgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgYmluYXJ5IG5hbWluZyBzY2hlbWUuCisgICAgICAgICAgICAgICAgICAgIFNvbWV0aW1lcyB0aGUgc2FtZSBjb21tYW5kIGlzIHByb3ZpZGVkIGluIG11bHRpcGxlIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHRoaXMgb2NjdXJzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBuZWVkcyB0bworICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGEgZGlmZmVyZW50IGJpbmFyeQorICAgICAgICAgICAgICAgICAgICBuYW1pbmcgc2NoZW1lIHNvIHRoZSBjb21tYW5kcyBjYW4gY28tZXhpc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgdmFyaWFibGUsIGxpc3Qgb3V0IHRoZSBwYWNrYWdlJ3MgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhbHNvIGV4aXN0IGFzIHBhcnQgb2YgYW5vdGhlciBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIDxmaWxlbmFtZT5idXN5Ym94PC9maWxlbmFtZT4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBoYXMgZm91ciBjb21tYW5kcyB0aGF0IGFsc28gZXhpc3QgYXMgcGFydCBvZiBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UsIHlvdSBpZGVudGlmeSB0aGVtIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxURVJOQVRJVkVfYnVzeWJveCA9ICJzaCBzZWQgdGVzdCBicmFja2V0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtYWx0ZXJuYXRpdmVzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFMVEVSTkFUSVZFX0xJTktfTkFNRSc+PGdsb3NzdGVybT5BTFRFUk5BVElWRV9MSU5LX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFMVEVSTkFUSVZFX0xJTktfTkFNRVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gbWFwIGR1cGxpY2F0ZWQgY29tbWFuZHMgdG8gYWN0dWFsIGxvY2F0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIHRvIGFjdHVhbCBsb2NhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB0aGUgPGZpbGVuYW1lPmJyYWNrZXQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHBhY2thZ2UgaXMKKyAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlZCB0aHJvdWdoIGFub3RoZXIgcGFja2FnZSwgeW91IG11c3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfTElOS19OQU1FPC9maWxlbmFtZT4gdmFyaWFibGUgdG8KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgYWN0dWFsIGxvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFMVEVSTkFUSVZFX0xJTktfTkFNRVticmFja2V0XSA9ICIvdXNyL2Jpbi9bIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGJpbmFyeSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5icmFja2V0PC9maWxlbmFtZT4gY29tbWFuZCAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+WzwvZmlsZW5hbWU+KSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVzeWJveDwvZmlsZW5hbWU+IHBhY2thZ2UgcmVzaWRlcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW4vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+IGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2JpbmRpcn0vPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11cGRhdGUtYWx0ZXJuYXRpdmVzJz48ZmlsZW5hbWU+dXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFMVEVSTkFUSVZFX1BSSU9SSVRZJz48Z2xvc3N0ZXJtPkFMVEVSTkFUSVZFX1BSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTFRFUk5BVElWRV9QUklPUklUWVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgcHJpb3JpdGllcyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgYSBzaW5nbGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBjb21tYW5kIG5hbWUgb3IgcGFja2FnZSwgYSBkZWZhdWx0IGZvcgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBkdXBsaWNhdGVkIGNvbW1hbmRzIHJlZ2FyZGxlc3Mgb2YgdGhlIHBhY2thZ2UsIG9yCisgICAgICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBmb3Igc3BlY2lmaWMgY29tbWFuZHMgdGllZCB0byBwYXJ0aWN1bGFyIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0aGUgYXZhaWxhYmxlIHN5bnRheCBmb3JtczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBTFRFUk5BVElWRV9QUklPUklUWSA9ICI8cmVwbGFjZWFibGU+cHJpb3JpdHk8L3JlcGxhY2VhYmxlPiIKKyAgICAgQUxURVJOQVRJVkVfUFJJT1JJVFlbPHJlcGxhY2VhYmxlPm5hbWU8L3JlcGxhY2VhYmxlPl0gPSAiPHJlcGxhY2VhYmxlPnByaW9yaXR5PC9yZXBsYWNlYWJsZT4iCisgICAgIEFMVEVSTkFUSVZFX1BSSU9SSVRZXzxyZXBsYWNlYWJsZT5wa2c8L3JlcGxhY2VhYmxlPls8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+XSA9ICI8cmVwbGFjZWFibGU+cHJpb3JpdHk8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BTFRFUk5BVElWRV9UQVJHRVQnPjxnbG9zc3Rlcm0+QUxURVJOQVRJVkVfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBTFRFUk5BVElWRV9UQVJHRVRbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IGxpbmsgbG9jYXRpb25zIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgbGluaworICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgYSBzaW5nbGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgYWxsIGR1cGxpY2F0ZWQgY29tbWFuZHMgcmVnYXJkbGVzcyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBuYW1lIG9yIHBhY2thZ2UsIGEgZGVmYXVsdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgZHVwbGljYXRlZCBjb21tYW5kcyByZWdhcmRsZXNzIG9mIHRoZSBwYWNrYWdlLCBvcgorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgZm9yIHNwZWNpZmljIGNvbW1hbmRzIHRpZWQgdG8gcGFydGljdWxhciBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBzeW50YXggZm9ybXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQUxURVJOQVRJVkVfVEFSR0VUID0gIjxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiIKKyAgICAgQUxURVJOQVRJVkVfVEFSR0VUWzxyZXBsYWNlYWJsZT5uYW1lPC9yZXBsYWNlYWJsZT5dID0gIjxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPiIKKyAgICAgQUxURVJOQVRJVkVfVEFSR0VUXzxyZXBsYWNlYWJsZT5wa2c8L3JlcGxhY2VhYmxlPls8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGU+XSA9ICI8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfVEFSR0VUPC9maWxlbmFtZT4gaXMgbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCwgaXQgaW5oZXJpdHMgdGhlIHZhbHVlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUFMVEVSTkFUSVZFX0xJTktfTkFNRSc+PGZpbGVuYW1lPkFMVEVSTkFUSVZFX0xJTktfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+QUxURVJOQVRJVkVfTElOS19OQU1FPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkFMVEVSTkFUSVZFX1RBUkdFVDwvZmlsZW5hbWU+IGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lLCB0aGUgdGFyZ2V0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5BTFRFUk5BVElWRV9UQVJHRVQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyAiPGZpbGVuYW1lPi57QlBOfTwvZmlsZW5hbWU+IiBhcHBlbmRlZCB0byBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluYWxseSwgaWYgdGhlIGZpbGUgcmVmZXJlbmNlZCBoYXMgbm90IGJlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVkLCB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB3aWxsIHJlbmFtZSBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2b2lkIHRoZSBuZWVkIHRvIHJlbmFtZSBhbHRlcm5hdGl2ZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluaW5nIHN1cHBvcnQgZm9yIHRoZSBjb21tYW5kIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLWFsdGVybmF0aXZlcyc+PGZpbGVuYW1lPnVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BUFBFTkQnPjxnbG9zc3Rlcm0+QVBQRU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBUFBFTkRbZG9jXSA9ICJBbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIExBQkVMLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBQkVMUyc+PGZpbGVuYW1lPkxBQkVMPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BUic+PGdsb3NzdGVybT5BUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVJbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ2FyJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdXNlZCB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmFyPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVJDSElWRVJfTU9ERSc+PGdsb3NzdGVybT5BUkNISVZFUl9NT0RFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBUkNISVZFUl9NT0RFW2RvY10gPSAiQ29udHJvbHMgYXJjaGl2ZSBjcmVhdGlvbiB1c2VkIHdoZW4gcmVsZWFzaW5nIHNvdXJjZSBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXJjaGl2ZXInPjxmaWxlbmFtZT5hcmNoaXZlcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBhIHJlbGVhc2VkIGFyY2hpdmUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8gY3JlYXRlIGFyY2hpdmVzIG9mIHBhdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgc291cmNlLCBvcmlnaW5hbCBzb3VyY2UsIGNvbmZpZ3VyZWQgc291cmNlLCBhbmQgc28gZm9ydGgKKyAgICAgICAgICAgICAgICAgICAgYnkgZW1wbG95aW5nIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgZmxhZ3MgKHZhcmZsYWdzKToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiICAgICAgICAgICAgICAgICAjIFVzZXMgb3JpZ2luYWwgKHVucGFja2VkKSBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWxlcy4KKworICAgICBBUkNISVZFUl9NT0RFW3NyY10gPSAicGF0Y2hlZCIgICAgICAgICAgICAgICAgICAjIFVzZXMgcGF0Y2hlZCBzb3VyY2UgZmlsZXMuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZGVmYXVsdC4KKworICAgICBBUkNISVZFUl9NT0RFW3NyY10gPSAiY29uZmlndXJlZCIgICAgICAgICAgICAgICAjIFVzZXMgY29uZmlndXJlZCBzb3VyY2UgZmlsZXMuCisKKyAgICAgQVJDSElWRVJfTU9ERVtkaWZmXSA9ICIxIiAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VzIHBhdGNoZXMgYmV0d2VlbiBkb191bnBhY2sgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9fcGF0Y2guCisKKyAgICAgQVJDSElWRVJfTU9ERVtkaWZmLWV4Y2x1ZGVdID89ICI8cmVwbGFjZWFibGU+ZmlsZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5maWxlPC9yZXBsYWNlYWJsZT4gLi4uIiAgIyBMaXN0cyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleGNsdWRlIGZyb20gZGlmZi4KKworICAgICBBUkNISVZFUl9NT0RFW2R1bXBkYXRhXSA9ICIxIiAgICAgICAgICAgICAgICAgICAjIFVzZXMgZW52aXJvbm1lbnQgZGF0YS4KKworICAgICBBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIgICAgICAgICAgICAgICAgICAgICAjIFVzZXMgcmVjaXBlIGFuZCBpbmNsdWRlIGZpbGVzLgorCisgICAgIEFSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIgICAgICAgICAgICAgICAgICAgICAgICMgVXNlcyBSUE0gcGFja2FnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSB2YXJpYWJsZSB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2FyY2hpdmVyLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVMnPjxnbG9zc3Rlcm0+QVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFTW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBhc3NlbWJsZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1BST1ZJREVEJz48Z2xvc3N0ZXJtPkFTU1VNRV9QUk9WSURFRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVNTVU1FX1BST1ZJREVEW2RvY10gPSAiTGlzdHMgcmVjaXBlIG5hbWVzIChQTiB2YWx1ZXMpIEJpdEJha2UgZG9lcyBub3QgYXR0ZW1wdCB0byBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyByZWNpcGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcykgQml0QmFrZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBCaXRCYWtlIGFzc3VtZXMgdGhlc2UgcmVjaXBlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgICAgICBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gT3BlbkVtYmVkZGVkIENvcmUsIDxmaWxlbmFtZT5BU1NVTUVfUFJPVklERUQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtb3N0bHkgc3BlY2lmaWVzIG5hdGl2ZSB0b29scyB0aGF0IHNob3VsZCBub3QgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgPGZpbGVuYW1lPmdpdC1uYXRpdmU8L2ZpbGVuYW1lPiwgd2hpY2ggd2hlbgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIGFsbG93cyBmb3IgdGhlIEdpdCBiaW5hcnkgZnJvbSB0aGUgaG9zdCB0byBiZQorICAgICAgICAgICAgICAgICAgICB1c2VkIHJhdGhlciB0aGFuIGJ1aWxkaW5nIDxmaWxlbmFtZT5naXQtbmF0aXZlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVNTVU1FX1NITElCUyc+PGdsb3NzdGVybT5BU1NVTUVfU0hMSUJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBBU1NVTUVfU0hMSUJTW2RvY10gPSBQcm92aWRlcyBhZGRpdGlvbmFsIHNobGlicyBwcm92aWRlciBtYXBwaW5nIGluZm9ybWF0aW9uLCB3aGljaCBhZGRzIHRvIG9yIG92ZXJ3cml0ZXMgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcyBhZGRpdGlvbmFsIDxmaWxlbmFtZT5zaGxpYnM8L2ZpbGVuYW1lPiBwcm92aWRlcgorICAgICAgICAgICAgICAgICAgICBtYXBwaW5nIGluZm9ybWF0aW9uLCB3aGljaCBhZGRzIHRvIG9yIG92ZXJ3cml0ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgbXVsdGlwbGUgZW50cmllcyB1c2luZyBzcGFjZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm0gdG8gYWRkIGFuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGxpYjwvZmlsZW5hbWU+IHByb3ZpZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5zaGxpYm5hbWU8L3JlcGxhY2VhYmxlPiBpbgorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPiB3aXRoIHRoZSBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5zaGxpYm5hbWU6cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPltfPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPl0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBhZGRzIGEgc2hhcmVkIGxpYnJhcnkgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxpYkVHTC5zby4xPC9maWxlbmFtZT4gYXMgYmVpbmcgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5saWJlZ2wtaW1wbGVtZW50YXRpb248L2ZpbGVuYW1lPiBwYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEFTU1VNRV9TSExJQlMgPSAibGliRUdMLnNvLjE6bGliZWdsLWltcGxlbWVudGF0aW9uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVVUSE9SJz48Z2xvc3N0ZXJtPkFVVEhPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVVUSE9SW2RvY10gPSAiRW1haWwgYWRkcmVzcyB1c2VkIHRvIGNvbnRhY3QgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBhdXRob3JzIGluIG9yZGVyIHRvIHNlbmQgcGF0Y2hlcyBhbmQgZm9yd2FyZCBidWdzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBlbWFpbCBhZGRyZXNzIHVzZWQgdG8gY29udGFjdCB0aGUgb3JpZ2luYWwgYXV0aG9yCisgICAgICAgICAgICAgICAgICAgIG9yIGF1dGhvcnMgaW4gb3JkZXIgdG8gc2VuZCBwYXRjaGVzIGFuZCBmb3J3YXJkIGJ1Z3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQVVUT19MSUJOQU1FX1BLR1MnPjxnbG9zc3Rlcm0+QVVUT19MSUJOQU1FX1BLR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEFVVE9fTElCTkFNRV9QS0dTW2RvY10gPSAiU3BlY2lmaWVzIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBjaGVja2VkIGZvciBsaWJyYXJpZXMgYW5kIHJlbmFtZWQgYWNjb3JkaW5nIHRvIERlYmlhbiBsaWJyYXJ5IHBhY2thZ2UgbmFtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBpbmhlcml0ZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QVVUT19MSUJOQU1FX1BLR1M8L2ZpbGVuYW1lPiBzcGVjaWZpZXMgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIGxpYnJhcmllcyBhbmQgcmVuYW1lZAorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gRGViaWFuIGxpYnJhcnkgcGFja2FnZSBuYW1pbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICIke1BBQ0tBR0VTfSIsIHdoaWNoIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGViaWFuIGNsYXNzIHRvIGFjdCBvbiBhbGwgcGFja2FnZXMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgZXhwbGljaXRseSBnZW5lcmF0ZWQgYnkgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1BVVRPX1NZU0xJTlVYTUVOVSc+PGdsb3NzdGVybT5BVVRPX1NZU0xJTlVYTUVOVTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVVUT19TWVNMSU5VWE1FTlVbZG9jXSA9ICJFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXggYm9vdGxvYWRlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXgKKyAgICAgICAgICAgICAgICAgICAgYm9vdGxvYWRlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgaW4geW91ciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGNoZWNrcyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFVVE9SRVYnPjxnbG9zc3Rlcm0+QVVUT1JFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVVUT1JFVltkb2NdID0gIldoZW4gU1JDUkVWIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSwgaXQgc3BlY2lmaWVzIHRvIHVzZSB0aGUgbGF0ZXN0IHNvdXJjZSByZXZpc2lvbiBpbiB0aGUgcmVwb3NpdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz5TUkNSRVY8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLCBpdCBzcGVjaWZpZXMgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXRlc3Qgc291cmNlIHJldmlzaW9uIGluIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1JDUkVWID0gIiR7QVVUT1JFVn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSB0aGUgcHJldmlvdXMgc3RhdGVtZW50IHRvIHJldHJpZXZlIHRoZSBsYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBvZiBzb2Z0d2FyZSwgeW91IG5lZWQgdG8gYmUgc3VyZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNQVic+PGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgYSBrZXJuZWwgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+a2VybmVsPC9saW5rPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBhbmQgeW91IHVzZSB0aGUgcHJldmlvdXMgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIDxmaWxlbmFtZT4ke1NSQ1BWfTwvZmlsZW5hbWU+IGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2V0IGludG8gPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IG5lZWQgdG8gY2hhbmdlIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlIHNvIHRoYXQgaXQgZG9lcyBjb250YWluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NSQ1BWfTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUFWQUlMVFVORVMnPjxnbG9zc3Rlcm0+QVZBSUxUVU5FUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQVZBSUxUVU5FU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRlZmluZWQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmluZ3MgKGkuZS4gICJ0dW5lcyIpIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIGRlZmluZWQgQ1BVIGFuZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIChBQkkpIHR1bmluZ3MgKGkuZS4gICJ0dW5lcyIpIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBzaW1wbHkgcHJlc2VudHMgdGhlIHR1bmVzIHRoYXQgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgTm90IGFsbCB0dW5lcyBtYXkgYmUgY29tcGF0aWJsZSB3aXRoIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIGNvbmZpZ3VyYXRpb24sIG9yIHdpdGggZWFjaCBvdGhlciBpbiBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2NvbWJpbmluZy1tdWx0aXBsZS12ZXJzaW9ucy1saWJyYXJ5LWZpbGVzLWludG8tb25lLWltYWdlJz5NdWx0aWxpYjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGFkZCBhIHR1bmUgdG8gdGhlIGxpc3QsIGJlIHN1cmUgdG8gYXBwZW5kIGl0IHdpdGgKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzIHVzaW5nIHRoZSAiKz0iIEJpdEJha2Ugb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBzaW1wbHkgcmVwbGFjZSB0aGUgbGlzdCBieSB1c2luZyB0aGUgIj0iIG9wZXJhdG9yLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2Jhc2ljLXN5bnRheCc+QmFzaWMgU3ludGF4PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWInPjx0aXRsZT5CPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUInPjxnbG9zc3Rlcm0+QjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBnZW5lcmF0ZWQgb2JqZWN0cyBpbnRvIHRoZSBCdWlsZCBEaXJlY3RvcnkgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgaXMgdGhlIHNhbWUgYXMgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIGlzIGRlZmluZWQgYXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUyA9ICIke1dPUktESVJ9LyR7QlB9LyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNlcGFyYXRlIHRoZSAoPGZpbGVuYW1lPlM8L2ZpbGVuYW1lPikgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkgdGhlIDxmaWxlbmFtZT5CPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIE1vc3QgQXV0b3Rvb2xzLWJhc2VkIHJlY2lwZXMgc3VwcG9ydCBzZXBhcmF0aW5nIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIGRlZmF1bHRzIHRvIHVzaW5nIHNlcGFyYXRlIGRpcmVjdG9yaWVzIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjPC9maWxlbmFtZT4gYW5kIHNvbWUga2VybmVsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkFEX1JFQ09NTUVOREFUSU9OUyc+PGdsb3NzdGVybT5CQURfUkVDT01NRU5EQVRJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQURfUkVDT01NRU5EQVRJT05TW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIG5vdCB0byBpbnN0YWxsIGRlc3BpdGUgYmVpbmcgcmVjb21tZW5kZWQgYnkgYSByZWNpcGUuIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUgSVBLIHBhY2thZ2luZyBiYWNrZW5kLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzICJyZWNvbW1lbmRlZC1vbmx5IiBwYWNrYWdlcyB0byBub3QgaW5zdGFsbC4KKyAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQtb25seSBwYWNrYWdlcyBhcmUgcGFja2FnZXMgaW5zdGFsbGVkIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz48ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gcHJldmVudCBhbnkgb2YgdGhlc2UgInJlY29tbWVuZGVkIiBwYWNrYWdlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGluc3RhbGxlZCBieSBsaXN0aW5nIHRoZW0gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJBRF9SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQURfUkVDT01NRU5EQVRJT05TID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IC4uLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGdsb2JhbGx5IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIHlvdSBjYW4gYXR0YWNoIGl0IHRvCisgICAgICAgICAgICAgICAgICAgIGEgc3BlY2lmaWMgaW1hZ2UgcmVjaXBlIGJ5IHVzaW5nIHRoZSByZWNpcGUgbmFtZSBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQURfUkVDT01NRU5EQVRJT05TX3BuLTxyZXBsYWNlYWJsZT50YXJnZXRfaW1hZ2U8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBpZiB5b3UgY2hvb3NlIHRvIG5vdCBpbnN0YWxsCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHVzaW5nIHRoaXMgdmFyaWFibGUgYW5kIHNvbWUgb3RoZXIgcGFja2FnZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVudCBvbiB0aGVtIChpLmUuIGxpc3RlZCBpbiBhIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlKSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaWdub3JlcyB5b3VyCisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgYW5kIHdpbGwgaW5zdGFsbCB0aGUgcGFja2FnZXMgdG8gYXZvaWQgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBlcnJvcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVBLIGFuZCBSUE0gcGFja2FnaW5nIGJhY2tlbmQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZG9lcyBub3QgZXhpc3QgZm9yIERFQi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkFTRV9MSUInPjxnbG9zc3Rlcm0+QkFTRV9MSUI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJBU0VfTElCW2RvY10gPSAiVGhlIGxpYnJhcnkgZGlyZWN0b3J5IG5hbWUgZm9yIHRoZSBDUFUgb3IgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoQUJJKSB0dW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaWJyYXJ5IGRpcmVjdG9yeSBuYW1lIGZvciB0aGUgQ1BVIG9yIEFwcGxpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQVNFX0xJQjwvZmlsZW5hbWU+IGFwcGxpZXMgb25seSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgTXVsdGlsaWIgY29udGV4dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY29tYmluaW5nLW11bHRpcGxlLXZlcnNpb25zLWxpYnJhcnktZmlsZXMtaW50by1vbmUtaW1hZ2UnPkNvbWJpbmluZyBNdWx0aXBsZSBWZXJzaW9ucyBvZiBMaWJyYXJ5IEZpbGVzIGludG8gT25lIEltYWdlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBNdWx0aWxpYi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CQVNFX0xJQjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBJZiBNdWx0aWxpYiBpcyBub3QgYmVpbmcgdXNlZCwgdGhlIHZhbHVlIGRlZmF1bHRzIHRvICJsaWIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJBU0VfV09SS0RJUic+PGdsb3NzdGVybT5CQVNFX1dPUktESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJBU0VfV09SS0RJUltkb2NdID0gIlBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgd29yayBkaXJlY3RvcnkgZm9yIGFsbCByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgd29yayBkaXJlY3RvcnkgZm9yIGFsbCByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtUTVBESVJ9L3dvcmsiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX0FMTE9XRURfTkVUV09SS1MnPjxnbG9zc3Rlcm0+QkJfQUxMT1dFRF9ORVRXT1JLUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfQUxMT1dFRF9ORVRXT1JLU1tkb2NdID0gIkEgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBob3N0cyB0aGF0IHRoZSBmZXRjaGVyCisgICAgICAgICAgICAgICAgICAgIGlzIGFsbG93ZWQgdG8gdXNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgY29uc2lkZXJhdGlvbnMgc3Vycm91bmRpbmcgdGhpcyB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhvc3QgbGlzdCBpcyBvbmx5IHVzZWQgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfTk9fTkVUV09SSzwvZmlsZW5hbWU+IGlzIGVpdGhlciBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgb3Igc2V0IHRvICIwIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW1pdGVkIHN1cHBvcnQgZm9yIHdpbGRjYXJkIG1hdGNoaW5nIGFnYWluc3QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9mIGhvc3QgbmFtZXMgZXhpc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQuZ251Lm9yZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5mdHAuZ251Lm9yZzwvZmlsZW5hbWU+LCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Zm9vLmdpdC5nbnUub3JnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9BTExPV0VEX05FVFdPUktTID0gIiouZ251Lm9yZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlycm9ycyBub3QgaW4gdGhlIGhvc3QgbGlzdCBhcmUgc2tpcHBlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZWQgaW4gZGVidWcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0ZW1wdHMgdG8gYWNjZXNzIG5ldHdvcmtzIG5vdCBpbiB0aGUgaG9zdCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UgYSBmYWlsdXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPkJCX0FMTE9XRURfTkVUV09SS1M8L2ZpbGVuYW1lPiBpbgorICAgICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyB2ZXJ5IHVzZWZ1bC4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoZSBob3N0IHlvdSB3YW50IHRvIHVzZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IHJlc3VsdHMgaW4gdGhlIHNvdXJjZSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGZldGNoZWQgZnJvbSBhbiBhbGxvd2VkIGxvY2F0aW9uIGFuZCBhdm9pZHMgcmFpc2luZworICAgICAgICAgICAgICAgICAgICBhbiBlcnJvciB3aGVuIGEgaG9zdCB0aGF0IGlzIG5vdCBhbGxvd2VkIGlzIGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ19VUkknPjxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBmZXRjaGVyIGRvZXMgbm90IGF0dGVtcHQgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBob3N0IGxpc3RlZCBpbiA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGFmdGVyIGEKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bCBmZXRjaCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+IG9jY3Vycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFknPjxnbG9zc3Rlcm0+QkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFlbZG9jXSA9ICJEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQgZmlsZSAoLmJiYXBwZW5kKSBoYXMgbm8gY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoLmJiKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgZmlsZSAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KSBoYXMgbm8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gb2Z0ZW4gb2NjdXJzIHdoZW4gbGF5ZXJzIGdldCBvdXQgb2Ygc3luYworICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+b2UtY29yZTwvZmlsZW5hbWU+IGJ1bXBzIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIHZlcnNpb24gYW5kIHRoZSBvbGQgcmVjaXBlIG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvdGhlciBsYXllciBoYXMgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbmV3IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHJlY2lwZSB5ZXQpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBmYXRhbCBiZWhhdmlvciBpcyBzYWZlc3QgYmVjYXVzZSBpdCBpcworICAgICAgICAgICAgICAgICAgICB0aGUgc2FuZSByZWFjdGlvbiBnaXZlbiBzb21ldGhpbmcgaXMgb3V0IG9mIHN5bmMuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHdoZW4geW91ciBjaGFuZ2VzIGFyZSBubyBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvICIxIiwgInllcyIsIG9yICJ0cnVlIgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0RBTkdMSU5HQVBQRU5EU19XQVJOT05MWSA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRElTS01PTl9ESVJTJz48Z2xvc3N0ZXJtPkJCX0RJU0tNT05fRElSUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJfRElTS01PTl9ESVJTW2RvY10gPSAiTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlIHBhcmFtZXRlcnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc2sgc3BhY2UgbW9uaXRvcmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgbW9uaXRvcmluZywgYWRkIHRoZSA8ZmlsZW5hbWU+QkJfRElTS01PTl9ESVJTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8geW91ciA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiPHJlcGxhY2VhYmxlPmFjdGlvbjwvcmVwbGFjZWFibGU+LDxyZXBsYWNlYWJsZT5kaXI8L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+dGhyZXNob2xkPC9yZXBsYWNlYWJsZT4gWy4uLl0iCisKKyAgICAgd2hlcmU6CisKKyAgICAgICAgPHJlcGxhY2VhYmxlPmFjdGlvbjwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBQk9SVDogICAgIEltbWVkaWF0ZWx5IGFib3J0IHRoZSBidWlsZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBTVE9QVEFTS1M6IFN0b3AgdGhlIGJ1aWxkIGFmdGVyIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgaGF2ZSBmaW5pc2hlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlc2hvbGQgaXMgYnJva2VuLgorICAgICAgICAgICBXQVJOOiAgICAgIElzc3VlIGEgd2FybmluZyBidXQgY29udGludWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgd2hlbiBhIHRocmVzaG9sZCBpcyBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGFzCisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IGJlIGRlZmluZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgY29uZi9sb2NhbC5jb25mIGZpbGUuCisKKyAgICAgICAgPHJlcGxhY2VhYmxlPmRpcjwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBbnkgZGlyZWN0b3J5IHlvdSBjaG9vc2UuIFlvdSBjYW4gc3BlY2lmeSBvbmUgb3IKKyAgICAgICAgICAgbW9yZSBkaXJlY3RvcmllcyB0byBtb25pdG9yIGJ5IHNlcGFyYXRpbmcgdGhlCisgICAgICAgICAgIGdyb3VwaW5ncyB3aXRoIGEgc3BhY2UuICBJZiB0d28gZGlyZWN0b3JpZXMgYXJlCisgICAgICAgICAgIG9uIHRoZSBzYW1lIGRldmljZSwgb25seSB0aGUgZmlyc3QgZGlyZWN0b3J5CisgICAgICAgICAgIGlzIG1vbml0b3JlZC4KKworICAgICAgICA8cmVwbGFjZWFibGU+dGhyZXNob2xkPC9yZXBsYWNlYWJsZT4gaXM6CisgICAgICAgICAgIEVpdGhlciB0aGUgbWluaW11bSBhdmFpbGFibGUgZGlzayBzcGFjZSwKKyAgICAgICAgICAgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyZWUgaW5vZGVzLCBvcgorICAgICAgICAgICBib3RoLiAgWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUuICBUbworICAgICAgICAgICBvbWl0IG9uZSBvciB0aGUgb3RoZXIsIHNpbXBseSBvbWl0IHRoZSB2YWx1ZS4KKyAgICAgICAgICAgU3BlY2lmeSB0aGUgdGhyZXNob2xkIHVzaW5nIEcsIE0sIEsgZm9yIEdieXRlcywKKyAgICAgICAgICAgTWJ5dGVzLCBhbmQgS2J5dGVzLCByZXNwZWN0aXZlbHkuIElmIHlvdSBkbworICAgICAgICAgICBub3Qgc3BlY2lmeSBHLCBNLCBvciBLLCBLYnl0ZXMgaXMgYXNzdW1lZCBieQorICAgICAgICAgICBkZWZhdWx0LiAgRG8gbm90IHVzZSBHQiwgTUIsIG9yIEtCLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxRywxMDBLIFdBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorICAgICBCQl9ESVNLTU9OX0RJUlMgPSAiU1RPUFRBU0tTLCR7VE1QRElSfSwxRyIKKyAgICAgQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwsMTAwSyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSB3b3JrcyBvbmx5IGlmIHlvdSBhbHNvIHByb3ZpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCc+PGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgICAgICBhYm9ydCB3aGVuIGVpdGhlciB0aGUgZGlzayBzcGFjZSBpbiA8ZmlsZW5hbWU+JHtUTVBESVJ9PC9maWxlbmFtZT4gZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMSBHYnl0ZSBvciB0aGUgYXZhaWxhYmxlIGZyZWUgaW5vZGVzIGRyb3BzIGJlbG93CisgICAgICAgICAgICAgICAgICAgIDEwMCBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdHdvIGRpcmVjdG9yaWVzIGFyZSBwcm92aWRlZCB3aXRoIHRoZSB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSBhbHNvIGlzc3VlIGEKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZyB3aGVuIHRoZSBkaXNrIHNwYWNlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBkcm9wcworICAgICAgICAgICAgICAgICAgICBiZWxvdyAxIEdieXRlIG9yIHRoZSBudW1iZXIgb2YgZnJlZSBpbm9kZXMgZHJvcHMKKyAgICAgICAgICAgICAgICAgICAgYmVsb3cgMTAwIEtieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGR1cmluZyBpbnRlcnZhbHMgYXMKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUgPGZpbGVuYW1lPkJCX0RJU0tNT05fV0FSTklOVEVSVkFMPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBzdG9wcyB0aGUgYnVpbGQgYWZ0ZXIgYWxsIGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICBleGVjdXRpbmcgdGFza3MgY29tcGxldGUgd2hlbiB0aGUgbWluaW11bSBkaXNrIHNwYWNlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz5UTVBESVI8L2xpbms+fTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBkcm9wcyBiZWxvdyAxIEdieXRlLgorICAgICAgICAgICAgICAgICAgICBObyBkaXNrIG1vbml0b3Jpbmcgb2NjdXJzIGZvciB0aGUgZnJlZSBpbm9kZXMgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgZXhhbXBsZSBpbW1lZGlhdGVseSBhYm9ydHMgdGhlIGJ1aWxkIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBmcmVlIGlub2RlcyBpbiB0aGUgPGZpbGVuYW1lPiR7VE1QRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBkcm9wcyBiZWxvdyAxMDAgS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBObyBkaXNrIHNwYWNlIG1vbml0b3JpbmcgZm9yIHRoZSBkaXJlY3RvcnkgaXRzZWxmIG9jY3VycworICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJfRElTS01PTl9XQVJOSU5URVJWQUwnPjxnbG9zc3Rlcm0+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMW2RvY10gPSAiRGVmaW5lcyB0aGUgZGlzayBzcGFjZSBhbmQgZnJlZSBpbm9kZSB3YXJuaW5nIGludGVydmFscy4gVG8gc2V0IHRoZXNlIGludGVydmFscywgZGVmaW5lIHRoZSB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLgorICAgICAgICAgICAgICAgICAgICBUbyBzZXQgdGhlc2UgaW50ZXJ2YWxzLCBkZWZpbmUgdGhlIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJfRElTS01PTl9XQVJOSU5URVJWQUw8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9ESVNLTU9OX0RJUlMnPjxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRlZmluZSBpdHMgYWN0aW9uIGFzICJXQVJOIi4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIHRoZSBidWlsZCwgc3Vic2VxdWVudCB3YXJuaW5ncyBhcmUgaXNzdWVkIGVhY2ggdGltZQorICAgICAgICAgICAgICAgICAgICBkaXNrIHNwYWNlIG9yIG51bWJlciBvZiBmcmVlIGlub2RlcyBmdXJ0aGVyIHJlZHVjZXMgYnkKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3BlY3RpdmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIDxmaWxlbmFtZT5CQl9ESVNLTU9OX1dBUk5JTlRFUlZBTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB5b3UgZG8gdXNlIDxmaWxlbmFtZT5CQl9ESVNLTU9OX0RJUlM8L2ZpbGVuYW1lPiB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSAiV0FSTiIgYWN0aW9uLCB0aGUgZGlzayBtb25pdG9yaW5nIGludGVydmFsIGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiNTBNLDVLIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyB0aGUgdmFyaWFibGUgaW4geW91ciBjb25maWd1cmF0aW9uIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgZm9sbG93aW5nIGZvcm06CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9XQVJOSU5URVJWQUwgPSAiPHJlcGxhY2VhYmxlPmRpc2tfc3BhY2VfaW50ZXJ2YWw8L3JlcGxhY2VhYmxlPiw8cmVwbGFjZWFibGU+ZGlza19pbm9kZV9pbnRlcnZhbDwvcmVwbGFjZWFibGU+IgorCisgICAgIHdoZXJlOgorCisgICAgICAgIDxyZXBsYWNlYWJsZT5kaXNrX3NwYWNlX2ludGVydmFsPC9yZXBsYWNlYWJsZT4gaXM6CisgICAgICAgICAgIEFuIGludGVydmFsIG9mIG1lbW9yeSBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKworICAgICAgICA8cmVwbGFjZWFibGU+ZGlza19pbm9kZV9pbnRlcnZhbDwvcmVwbGFjZWFibGU+IGlzOgorICAgICAgICAgICBBbiBpbnRlcnZhbCBvZiBmcmVlIGlub2RlcyBleHByZXNzZWQgaW4gZWl0aGVyCisgICAgICAgICAgIEcsIE0sIG9yIEsgZm9yIEdieXRlcywgTWJ5dGVzLCBvciBLYnl0ZXMsCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gWW91IGNhbm5vdCB1c2UgR0IsIE1CLCBvciBLQi4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfRElTS01PTl9ESVJTID0gIldBUk4sJHtTU1RBVEVfRElSfSwxRywxMDBLIgorICAgICBCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgdmFyaWFibGVzIGNhdXNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgICAgIGlzc3VlIHN1YnNlcXVlbnQgd2FybmluZ3MgZWFjaCB0aW1lIHRoZSBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgZGlzayBzcGFjZSBmdXJ0aGVyIHJlZHVjZXMgYnkgNTAgTWJ5dGVzIG9yIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgZnJlZSBpbm9kZXMgZnVydGhlciByZWR1Y2VzIGJ5IDUgS2J5dGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTU1RBVEVfRElSfTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgU3Vic2VxdWVudCB3YXJuaW5ncyBiYXNlZCBvbiB0aGUgaW50ZXJ2YWwgb2NjdXIgZWFjaCB0aW1lCisgICAgICAgICAgICAgICAgICAgIGEgcmVzcGVjdGl2ZSBpbnRlcnZhbCBpcyByZWFjaGVkIGJleW9uZCB0aGUgaW5pdGlhbCB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDEgR2J5dGVzIGFuZCAxMDAgS2J5dGVzKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMnPjxnbG9zc3Rlcm0+QkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFNbZG9jXSA9ICJDYXVzZXMgdGFyYmFsbHMgb2YgdGhlIEdpdCByZXBvc2l0b3JpZXMgdG8gYmUgcGxhY2VkIGluIHRoZSBETF9ESVIgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcywgaW5jbHVkaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBHaXQgbWV0YWRhdGEsIHRvIGJlIHBsYWNlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURMX0RJUic+PGZpbGVuYW1lPkRMX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBjcmVhdGluZyBhbmQgcGxhY2luZyB0YXJiYWxscyBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgR2l0IHJlcG9zaXRvcmllcyBpcyBub3QgdGhlIGRlZmF1bHQgYWN0aW9uIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCX05VTUJFUl9USFJFQURTJz48Z2xvc3N0ZXJtPkJCX05VTUJFUl9USFJFQURTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQl9OVU1CRVJfVEhSRUFEU1tkb2NdID0gIlRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyBCaXRCYWtlIHNob3VsZCBydW4gaW4gcGFyYWxsZWwgYXQgYW55IG9uZSB0aW1lLiBUaGlzIHZhcmlhYmxlIGlzIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCB0byBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJ1aWxkIHN5c3RlbSBjb3Jlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsCisgICAgICAgICAgICAgICAgICAgIGF0IGFueSBvbmUgdGltZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjb25maWd1cmVzCisgICAgICAgICAgICAgICAgICAgIHRoaXMgdmFyaWFibGUgdG8gYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjb3JlcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBzeXN0ZW0gd2l0aCBhIGR1YWwgY29yZSBwcm9jZXNzb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICBhbHNvIHVzZXMgaHlwZXItdGhyZWFkaW5nIGNhdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICB0byAiNCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBzaW5nbGUgc29ja2V0IHN5c3RlbXMgKGkuZS4gb25lIENQVSksIHlvdSBzaG91bGQgbm90CisgICAgICAgICAgICAgICAgICAgIGhhdmUgdG8gb3ZlcnJpZGUgdGhpcyB2YXJpYWJsZSB0byBnYWluIG9wdGltYWwgcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaWYgeW91IGhhdmUgdmVyeSBsYXJnZSBzeXN0ZW1zIHRoYXQgZW1wbG95CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIHBoeXNpY2FsIENQVXMsIHlvdSBtaWdodCB3YW50IHRvIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCX05VTUJFUl9USFJFQURTPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHNldCBoaWdoZXIgdGhhbiAiMjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVlZGluZyB1cCBidWlsZHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NwZWVkaW5nLXVwLXRoZS1idWlsZCc+U3BlZWRpbmcgVXAgdGhlIEJ1aWxkPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkNMQVNTRVhURU5EJz48Z2xvc3N0ZXJtPkJCQ0xBU1NFWFRFTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCQ0xBU1NFWFRFTkRbZG9jXSA9ICJBbGxvd3MgeW91IHRvIGV4dGVuZCBhIHJlY2lwZSBzbyB0aGF0IGl0IGJ1aWxkcyB2YXJpYW50cyBvZiB0aGUgc29mdHdhcmUuIENvbW1vbiB2YXJpYW50cyBmb3IgcmVjaXBlcyBhcmUgJ25hdGl2ZScsICdjcm9zcycsICduYXRpdmVzZGsnIGFuZCBtdWx0aWxpYnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgICAgICBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgZXhpc3Qgc3VjaCBhcyAibmF0aXZlcyIgbGlrZSA8ZmlsZW5hbWU+cXVpbHQtbmF0aXZlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIGEgY29weSBvZiBRdWlsdCBidWlsdCB0byBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbTsKKyAgICAgICAgICAgICAgICAgICAgImNyb3NzZXMiIHN1Y2ggYXMgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIGNvbXBpbGVyIGJ1aWx0IHRvIHJ1biBvbiB0aGUgYnVpbGQgbWFjaGluZSBidXQgcHJvZHVjZXMgYmluYXJpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBydW4gb24gdGhlIHRhcmdldCA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz47CisgICAgICAgICAgICAgICAgICAgICJuYXRpdmVzZGsiLCB3aGljaCB0YXJnZXRzIHRoZSBTREsgbWFjaGluZSBpbnN0ZWFkIG9mIDxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT47CisgICAgICAgICAgICAgICAgICAgIGFuZCAibXVsaXRsaWJzIiBpbiB0aGUgZm9ybSAiPGZpbGVuYW1lPm11bHRpbGliOjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGJ1aWxkIGEgZGlmZmVyZW50IHZhcmlhbnQgb2YgdGhlIHJlY2lwZSB3aXRoIGEgbWluaW1hbCBhbW91bnQgb2YgY29kZSwgaXQgdXN1YWxseQorICAgICAgICAgICAgICAgICAgICBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91ciByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibmF0aXZlIG5hdGl2ZXNkayIKKyAgICAgQkJDTEFTU0VYVEVORCA9KyAibXVsdGlsaWI6PHJlcGxhY2VhYmxlPm11bHRpbGliX25hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfQ09MTEVDVElPTlMnPjxnbG9zc3Rlcm0+QkJGSUxFX0NPTExFQ1RJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkZJTEVfQ09MTEVDVElPTlNbZG9jXSA9ICJMaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIEJCRklMRV8qIHZhcmlhYmxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB0aGUgbmFtZXMgb2YgY29uZmlndXJlZCBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIG5hbWVzIGFyZSB1c2VkIHRvIGZpbmQgdGhlIG90aGVyIDxmaWxlbmFtZT5CQkZJTEVfKjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBlYWNoIGxheWVyIHdpbGwgYXBwZW5kIGl0cyBuYW1lIHRvIHRoaXMgdmFyaWFibGUgaW4gaXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRV9QQVRURVJOJz48Z2xvc3N0ZXJtPkJCRklMRV9QQVRURVJOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkZJTEVfUEFUVEVSTltkb2NdID0gIlZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byBtYXRjaCBmaWxlcyBmcm9tIEJCRklMRVMgaW4gYSBwYXJ0aWN1bGFyIGxheWVyLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGxheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIG1hdGNoIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRVMnPjxmaWxlbmFtZT5CQkZJTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGluIGEgcGFydGljdWxhciBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZSBhbmQgbXVzdAorICAgICAgICAgICAgICAgICAgICBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJGSUxFX1BBVFRFUk5fZW1lbmxvdzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkZJTEVfUFJJT1JJVFknPjxnbG9zc3Rlcm0+QkJGSUxFX1BSSU9SSVRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQkZJTEVfUFJJT1JJVFlbZG9jXSA9ICJBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHByaW9yaXRpemUgYSBsYXllciBhZ2FpbnN0IG90aGVyIGxheWVycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgc2FtZSByZWNpcGUgYXBwZWFycyBpbgorICAgICAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIGxheWVyLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgdmFyaWFibGUgYWxsb3dzIHlvdSB0byBwcmlvcml0aXplIGEKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYWdhaW5zdCBvdGhlciBsYXllcnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHJlY2lwZSAtIGVmZmVjdGl2ZWx5CisgICAgICAgICAgICAgICAgICAgIGxldHRpbmcgeW91IGNvbnRyb2wgdGhlIHByZWNlZGVuY2UgZm9yIHRoZSBtdWx0aXBsZSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmVjZWRlbmNlIGVzdGFibGlzaGVkIHRocm91Z2ggdGhpcyB2YXJpYWJsZSBzdGFuZHMgcmVnYXJkbGVzcyBvZiBhCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSdzIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlKS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGEgbGF5ZXIgdGhhdCBoYXMgYSByZWNpcGUgd2l0aCBhIGhpZ2hlciA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiB2YWx1ZSBidXQgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gaXMgc2V0IHRvIGhhdmUgYSBsb3dlciBwcmVjZWRlbmNlIHN0aWxsIGhhcyBhCisgICAgICAgICAgICAgICAgICAgIGxvd2VyIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbGFyZ2VyIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkJCRklMRV9QUklPUklUWTwvZmlsZW5hbWU+IHZhcmlhYmxlIHJlc3VsdHMgaW4gYSBoaWdoZXIKKyAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSA2IGhhcyBhIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gdGhlIHZhbHVlIDUuCisgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA8ZmlsZW5hbWU+QkJGSUxFX1BSSU9SSVRZPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0IGJhc2VkIG9uIGxheWVyCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyAoc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+TEFZRVJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBwcmlvcml0eSwgaWYgdW5zcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgbGF5ZXIgd2l0aCBubyBkZXBlbmRlbmNpZXMsIGlzIHRoZSBsb3dlc3QgZGVmaW5lZCBwcmlvcml0eSArIDEKKyAgICAgICAgICAgICAgICAgICAgKG9yIDEgaWYgbm8gcHJpb3JpdGllcyBhcmUgZGVmaW5lZCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBjb21tYW5kIDxmaWxlbmFtZT5iaXRiYWtlLWxheWVycyBzaG93LWxheWVyczwvZmlsZW5hbWU+IHRvIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgYWxsIGNvbmZpZ3VyZWQgbGF5ZXJzIGFsb25nIHdpdGggdGhlaXIgcHJpb3JpdGllcy4KKyAgICAgICAgICAgICAgICA8L3RpcD4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJCRklMRVMnPjxnbG9zc3Rlcm0+QkJGSUxFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJGSUxFU1tkb2NdID0gIkxpc3Qgb2YgcmVjaXBlIGZpbGVzIHVzZWQgYnkgQml0QmFrZSB0byBidWlsZCBzb2Z0d2FyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQklOQ0xVREVMT0dTW2RvY10gPSAiVmFyaWFibGUgdGhhdCBjb250cm9scyBob3cgQml0QmFrZSBkaXNwbGF5cyBsb2dzIG9uIGJ1aWxkIGZhaWx1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGUgdGhhdCBjb250cm9scyBob3cgQml0QmFrZSBkaXNwbGF5cyBsb2dzIG9uIGJ1aWxkIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJJTkNMVURFTE9HU19MSU5FUyc+PGdsb3NzdGVybT5CQklOQ0xVREVMT0dTX0xJTkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQklOQ0xVREVMT0dTX0xJTkVTW2RvY10gPSAiQW1vdW50IG9mIGxvZyBsaW5lcyBwcmludGVkIG9uIGZhaWx1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCSU5DTFVERUxPR1MnPjxmaWxlbmFtZT5CQklOQ0xVREVMT0dTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCwgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXNrIGxvZyBmaWxlIHRvIHByaW50IHdoZW4gcmVwb3J0aW5nIGEgZmFpbGVkIHRhc2suCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qgc2V0IDxmaWxlbmFtZT5CQklOQ0xVREVMT0dTX0xJTkVTPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHRoZSBlbnRpcmUgbG9nIGlzIHByaW50ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJMQVlFUlMnPjxnbG9zc3Rlcm0+QkJMQVlFUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCTEFZRVJTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSBiYmxheWVycy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyB0aGUgbGF5ZXJzIHRvIGVuYWJsZSBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gdGhlIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJMQVlFUlMgPSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvLWJzcCBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLW15a2VybmVsIFwKKyAgICAgICAiCisKKyAgICAgQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSA/PSAiIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YS15b2N0byBcCisgICAgICAgIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJMQVlFUlNfTk9OX1JFTU9WQUJMRSc+PGZpbGVuYW1lPkJCTEFZRVJTX05PTl9SRU1PVkFCTEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGV4aXN0cyBvbmx5IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5hYmxlcyBmb3VyIGxheWVycywgb25lIG9mIHdoaWNoIGlzIGEgY3VzdG9tLCB1c2VyLWRlZmluZWQgbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPm1ldGEtbXlrZXJuZWw8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQkxBWUVSU19OT05fUkVNT1ZBQkxFJz48Z2xvc3N0ZXJtPkJCTEFZRVJTX05PTl9SRU1PVkFCTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJCTEFZRVJTX05PTl9SRU1PVkFCTEVbZG9jXSA9ICJMaXN0cyBjb3JlIGxheWVycyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGJibGF5ZXJzLmNvbmYgZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBjb3JlIGxheWVycyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBkdXJpbmcgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGFuIGltYWdlIG91dHNpZGUgb2YgSG9iLCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gaWdub3JlcyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG9yZGVyIGZvciBCaXRCYWtlIHRvIGJ1aWxkIHlvdXIgaW1hZ2UgdXNpbmcgSG9iLCB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gZmlsZSBtdXN0IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29yZSBsYXllcnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IHNob3dzIHRoZXNlIHR3byBsYXllcnMgbGlzdGVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+QkJMQVlFUlNfTk9OX1JFTU9WQUJMRTwvZmlsZW5hbWU+IHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQkxBWUVSUyA9ICIgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YSBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEteW9jdG8tYnNwIFwKKyAgICAgICAvaG9tZS9zY290dHJpZi9wb2t5L21ldGEtbXlrZXJuZWwgXAorICAgICAgICIKKworICAgICBCQkxBWUVSU19OT05fUkVNT1ZBQkxFID89ICIgXAorICAgICAgIC9ob21lL3Njb3R0cmlmL3Bva3kvbWV0YSBcCisgICAgICAgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvIFwKKyAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQk1BU0snPjxnbG9zc3Rlcm0+QkJNQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCQk1BU0tbZG9jXSA9ICJQcmV2ZW50cyBCaXRCYWtlIGZyb20gcHJvY2Vzc2luZyBzcGVjaWZpYyByZWNpcGVzIG9yIHJlY2lwZSBhcHBlbmQgZmlsZXMuIFVzZSB0aGUgQkJNQVNLIHZhcmlhYmxlIGZyb20gd2l0aGluIGNvbmYvbG9jYWwuY29uZi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQcmV2ZW50cyBCaXRCYWtlIGZyb20gcHJvY2Vzc2luZyByZWNpcGVzIGFuZCByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5CQk1BU0s8L2ZpbGVuYW1lPiB2YXJpYWJsZSBmcm9tIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+QkJNQVNLPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgdG8gImhpZGUiIHRoZXNlIDxmaWxlbmFtZT4uYmI8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlIGlnbm9yZXMgYW55IHJlY2lwZSBvciByZWNpcGUgYXBwZW5kIGZpbGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFzIGlmIEJpdEJha2UgZG9lcyBub3Qgc2VlIHRoZW0gYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIG1hdGNoaW5nIGZpbGVzIGFyZSBub3QgcGFyc2VkIG9yIG90aGVyd2lzZQorICAgICAgICAgICAgICAgICAgICB1c2VkIGJ5IEJpdEJha2UuPC9wYXJhPgorICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgeW91IHByb3ZpZGUgaXMgcGFzc2VkIHRvIFB5dGhvbidzIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZnVsbCBwYXRocyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBjb21wbGV0ZSBzeW50YXggaW5mb3JtYXRpb24sIHNlZSBQeXRob24ncworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uIGF0CisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8yLjMvbGliL3JlLXN5bnRheC5odG1sJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYSBjb21wbGV0ZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgdG8gdGVsbCBCaXRCYWtlIHRvIGlnbm9yZSBhbGwgcmVjaXBlIGFuZCByZWNpcGUgYXBwZW5kCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS10aS9yZWNpcGVzLW1pc2MvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy8iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbWFzayBvdXQgbXVsdGlwbGUgZGlyZWN0b3JpZXMgb3IgcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgdXNlIHRoZSB2ZXJ0aWNhbCBiYXIgdG8gc2VwYXJhdGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBmcmFnbWVudHMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIG1hc2tzIG91dCBtdWx0aXBsZSBkaXJlY3RvcmllcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCByZWNpcGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJCTUFTSyA9ICJtZXRhLXRpL3JlY2lwZXMtbWlzYy98bWV0YS10aS9yZWNpcGVzLXRpL3BhY2thZ2Vncm91cC8iCisgICAgIEJCTUFTSyAuPSAifC4qbWV0YS1vZS9yZWNpcGVzLXN1cHBvcnQvIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5sZGFwIgorICAgICBCQk1BU0sgLj0gInwuKm9wZW5jdiIKKyAgICAgQkJNQVNLIC49ICJ8Lipsem1hIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE5vdGljZSBob3cgdGhlIHZlcnRpY2FsIGJhciBpcyB1c2VkIHRvIGFwcGVuZCB0aGUgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gc3BlY2lmeWluZyBhIGRpcmVjdG9yeSBuYW1lLCB1c2UgdGhlIHRyYWlsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBzbGFzaCBjaGFyYWN0ZXIgdG8gZW5zdXJlIHlvdSBtYXRjaCBqdXN0IHRoYXQgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQkJQQVRIJz48Z2xvc3N0ZXJtPkJCUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJQQVRIW2RvY10gPSAiVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSAuYmJjbGFzcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlIFBBVEggdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmJiY2xhc3M8L2ZpbGVuYW1lPiBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVRIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHJ1biBCaXRCYWtlIGZyb20gYSBkaXJlY3Rvcnkgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7YnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBtdXN0IGJlIHN1cmUgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT4gdG8gcG9pbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIHlvdSB3b3VsZCBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIHJ1biBCaXRCYWtlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIEJCUEFUSCA9ICI8cmVwbGFjZWFibGU+YnVpbGRfZGlyZWN0b3J5PC9yZXBsYWNlYWJsZT4iCisgICAgICQgZXhwb3J0IEJCUEFUSAorICAgICAkIGJpdGJha2UgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CQlNFUlZFUic+PGdsb3NzdGVybT5CQlNFUlZFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQkJTRVJWRVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIHNlcnZlciB0aGF0IHJ1bnMgbWVtb3J5LXJlc2lkZW50IEJpdEJha2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQgYW5kIHNob3VsZCBub3QgYmUgaGFuZC1lZGl0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgd2hlbiB5b3UgZW1wbG95IG1lbW9yeS1yZXNpZGVudAorICAgICAgICAgICAgICAgICAgICBCaXRCYWtlLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2V0dXAgc2NyaXB0IGV4cG9ydHMgdGhlIHZhbHVlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZXhwb3J0IEJCU0VSVkVSPWxvY2FsaG9zdDokcG9ydAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJCU0VSVkVSPC9maWxlbmFtZT4gaXMgdXNlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT4gc2NyaXB0LCB3aGljaAorICAgICAgICAgICAgICAgICAgICBpcyBsb2NhdGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQklOQ09ORklHJz48Z2xvc3N0ZXJtPkJJTkNPTkZJRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQklOQ09ORklHW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBiaW5jb25maWctZGlzYWJsZWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGJpbmFyeSBjb25maWd1cmF0aW9uIHNjcmlwdHMgdG8gZGlzYWJsZSBpbiBmYXZvciBvZiB1c2luZyBwa2ctY29uZmlnIHRvIHF1ZXJ5IHRoZSBpbmZvcm1hdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZy1kaXNhYmxlZCc+PGZpbGVuYW1lPmJpbmNvbmZpZy1kaXNhYmxlZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYmluYXJ5IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyB0byBkaXNhYmxlIGluIGZhdm9yIG9mIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wa2ctY29uZmlnPC9maWxlbmFtZT4gdG8gcXVlcnkgdGhlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPmJpbmNvbmZpZy1kaXNhYmxlZDwvZmlsZW5hbWU+IGNsYXNzIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZ5IHRoZSBzcGVjaWZpZWQgc2NyaXB0cyB0byByZXR1cm4gYW4gZXJyb3Igc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBjYWxscyB0byB0aGVtIGNhbiBiZSBlYXNpbHkgZm91bmQgYW5kIHJlcGxhY2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBhZGQgbXVsdGlwbGUgc2NyaXB0cywgc2VwYXJhdGUgdGhlbSBieSBzcGFjZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+bGlicG5nPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGlicG5nLWNvbmZpZyAke2JpbmRpcn0vbGlicG5nMTYtY29uZmlnIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQklOQ09ORklHX0dMT0InPjxnbG9zc3Rlcm0+QklOQ09ORklHX0dMT0I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJJTkNPTkZJR19HTE9CW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIGJpbmNvbmZpZy5iYmNsYXNzIGZyb20gYSByZWNpcGUsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJpbmNvbmZpZyc+PGZpbGVuYW1lPmJpbmNvbmZpZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSB3aWxkY2FyZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgbmVlZCBlZGl0aW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2NyaXB0cyBhcmUgZWRpdGVkIHRvIGNvcnJlY3QgYW55IHBhdGhzIHRoYXQgaGF2ZSBiZWVuCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCBkdXJpbmcgY29tcGlsYXRpb24gc28gdGhhdCB0aGV5IGFyZSBjb3JyZWN0IGZvcgorICAgICAgICAgICAgICAgICAgICB1c2Ugd2hlbiBpbnN0YWxsZWQgaW50byB0aGUgc3lzcm9vdCBhbmQgY2FsbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBwcm9jZXNzZXMgb2Ygb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgd29ya3MsIHNlZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2JpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT4gaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbiB0aGUgY2xhc3MgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1iaW5jb25maWcnPjxmaWxlbmFtZT5iaW5jb25maWcuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CUCc+PGdsb3NzdGVybT5CUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlBbZG9jXSA9ICJUaGUgYmFzZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbiBidXQgd2l0aG91dCBhbnkgc3BlY2lhbCByZWNpcGUgbmFtZSBzdWZmaXggKGkuZS4gLW5hdGl2ZSwgbGliNjQtLCBhbmQgc28gZm9ydGgpLiBCUCBpcyBjb21wcmlzZWQgb2YgJHtCUE59LSR7UFZ9IgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQgYW55IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIG5hbWUgc3VmZml4IChpLmUuIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5saWI2NC08L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJQPC9maWxlbmFtZT4gaXMgY29tcHJpc2VkIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KKyAgICAgJHtCUE59LSR7UFZ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CUE4nPjxnbG9zc3Rlcm0+QlBOPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCUE5bZG9jXSA9ICJUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSBQTiB2YXJpYWJsZSBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgYW5kIHByZWZpeGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXJlIG5hbWUgb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBhIHZlcnNpb24gb2YgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGJ1dCByZW1vdmVzIGNvbW1vbiBzdWZmaXhlcyBzdWNoIGFzICItbmF0aXZlIiBhbmQgIi1jcm9zcyIgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICBhcyByZW1vdmVzIGNvbW1vbiBwcmVmaXhlcyBzdWNoIGFzIG11bHRpbGliJ3MgImxpYjY0LSIgYW5kICJsaWIzMi0iLgorICAgICAgICAgICAgICAgICAgICBUaGUgZXhhY3QgbGlzdCBvZiBzdWZmaXhlcyByZW1vdmVkIGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNQRUNJQUxfUEtHU1VGRklYJz48ZmlsZW5hbWU+U1BFQ0lBTF9QS0dTVUZGSVg8L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBleGFjdCBsaXN0IG9mIHByZWZpeGVzIHJlbW92ZWQgaXMgc3BlY2lmaWVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUxQUkVGSVgnPjxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgUHJlZml4ZXMgYXJlIHJlbW92ZWQgZm9yIDxmaWxlbmFtZT5tdWx0aWxpYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gY2FzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVHVFJBQ0tFUic+PGdsb3NzdGVybT5CVUdUUkFDS0VSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUdUUkFDS0VSW2RvY10gPSAiU3BlY2lmaWVzIGEgVVJMIGZvciBhbiB1cHN0cmVhbSBidWcgdHJhY2tpbmcgd2Vic2l0ZSBmb3IgYSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgVVJMIGZvciBhbiB1cHN0cmVhbSBidWcgdHJhY2tpbmcgd2Vic2l0ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHVzZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBSYXRoZXIsIHRoZSB2YXJpYWJsZSBpcyBhIHVzZWZ1bCBwb2ludGVyIGluIGNhc2UgYSBidWcKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IG5lZWRzIHRvIGJlIG1hbnVhbGx5IHJlcG9ydGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX0FSQ0gnPjxnbG9zc3Rlcm0+QlVJTERfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gaTY4NikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGJ1aWxkIGhvc3QKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmk2ODY8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNldHMgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9BUkNIPC9maWxlbmFtZT4gZnJvbSB0aGUgbWFjaGluZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGJ5IHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX0NGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9DRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT4tbmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9DUFBGTEFHUyc+PGdsb3NzdGVybT5CVUlMRF9DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfQ1BQRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvciAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNQUEZMQUdTJz48ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfQ1hYRkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERfQ1hYRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0NYWEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRF9MREZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEX0xERkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX0xERkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfT1BUSU1JWkFUSU9OJz48Z2xvc3N0ZXJtPkJVSUxEX09QVElNSVpBVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfT1BUSU1JWkFUSU9OW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IG9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IG9yIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFncyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRFNES19DRkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfT1BUSU1JWkFUSU9OPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICAgICAgIi1PMiAtcGlwZSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfT1MnPjxnbG9zc3Rlcm0+QlVJTERfT1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX09TW2RvY10gPSAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gKGluIGxvd2VyIGNhc2UpIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gTGludXgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbiB1c2Ugb24gdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QgKGUuZy4gImxpbnV4IikuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNldHMgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CVUlMRF9PUzwvZmlsZW5hbWU+IGZyb20gdGhlIE9TIHJlcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kIC0gdGhlIGZpcnN0IHdvcmQsCisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCB0byBsb3dlci1jYXNlIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfUFJFRklYJz48Z2xvc3N0ZXJtPkJVSUxEX1BSRUZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERfUFJFRklYW2RvY10gPSAiVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IHVzZWQgZm9yIG5hdGl2ZSByZWNpcGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmUgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX1BSRUZJWDwvZmlsZW5hbWU+IHZhbHVlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIG5hdGl2ZSByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEX1NZUyc+PGdsb3NzdGVybT5CVUlMRF9TWVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEX1NZU1tkb2NdID0gIlRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCB1c2VkIGZvciBuYXRpdmUgcmVjaXBlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCB0byB1c2Ugd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGhvc3QgKGkuZS4gd2hlbiBidWlsZGluZyA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9BUkNIJz48ZmlsZW5hbWU+QlVJTERfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX1ZFTkRPUic+PGZpbGVuYW1lPkJVSUxEX1ZFTkRPUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9PUyc+PGZpbGVuYW1lPkJVSUxEX09TPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZSA8ZmlsZW5hbWU+QlVJTERfU1lTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERfVkVORE9SJz48Z2xvc3N0ZXJtPkJVSUxEX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICBCVUlMRF9WRU5ET1JbZG9jXSA9ICJUaGUgdmVuZG9yIG5hbWUgdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdmVuZG9yIG5hbWUgdG8gdXNlIHdoZW4gYnVpbGRpbmcgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmcgKCIiKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRERJUic+PGdsb3NzdGVybT5CVUlMRERJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkZWZpbmUgdGhpcyBkaXJlY3RvcnkgaW5kaXJlY3RseSB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBzY3JpcHRzIGJ5IHBhc3NpbmcgaW4gYSBCdWlsZCBEaXJlY3RvcnkgcGF0aCB3aGVuIHlvdSBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBydW4gdGhlIHNjcmlwdHMgYW5kIGRvIG5vdCBwcm92aWRlIGEgQnVpbGQgRGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIHBhdGgsIHRoZSA8ZmlsZW5hbWU+QlVJTERESVI8L2ZpbGVuYW1lPiBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGdsb3NzdGVybT5CVUlMREhJU1RPUllfQ09NTUlUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfQ09NTUlUW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIHRoZSBidWlsZGhpc3RvcnkgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIGNvbW1pdCB0aGUgYnVpbGQgaGlzdG9yeSBvdXRwdXQgaW4gYSBsb2NhbCBHaXQgcmVwb3NpdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgdG8gY29tbWl0IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBoaXN0b3J5IG91dHB1dCBpbiBhIGxvY2FsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB0aGlzIGxvY2FsIHJlcG9zaXRvcnkgd2lsbCBiZSBtYWludGFpbmVkCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgYSBjb21taXQgd2lsbCBiZSBjcmVhdGVkIG9uIGV2ZXJ5CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGZvciBjaGFuZ2VzIHRvIGVhY2ggdG9wLWxldmVsIHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaGlzdG9yeSBvdXRwdXQgKGltYWdlcywgcGFja2FnZXMsIGFuZCBzZGspLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB0cmFjayBjaGFuZ2VzIHRvIGJ1aWxkIGhpc3Rvcnkgb3ZlcgorICAgICAgICAgICAgICAgICAgICB0aW1lLCB5b3Ugc2hvdWxkIHNldCB0aGlzIHZhbHVlIHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBjb21taXQgdGhlIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IGluIGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVCA/PSAiMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SJz48Z2xvc3N0ZXJtPkJVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUltkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYXV0aG9yIHRvIHVzZSBmb3IgZWFjaCBHaXQgY29tbWl0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgYXV0aG9yIHRvIHVzZSBmb3IgZWFjaAorICAgICAgICAgICAgICAgICAgICBHaXQgY29tbWl0LgorICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgdGhlIDxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHdvcmssIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERISVNUT1JZX0NPTU1JVCc+PGZpbGVuYW1lPkJVSUxESElTVE9SWV9DT01NSVQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gIjEiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBHaXQgcmVxdWlyZXMgdGhhdCB0aGUgdmFsdWUgeW91IHByb3ZpZGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1I8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0YWtlcyB0aGUgZm9ybSBvZiAibmFtZSAmbHQ7ZW1haWxAaG9zdCZndDsiLgorICAgICAgICAgICAgICAgICAgICBQcm92aWRpbmcgYW4gZW1haWwgYWRkcmVzcyBvciBob3N0IHRoYXQgaXMgbm90IHZhbGlkIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHByb2R1Y2UgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0cyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUiA/PSAiYnVpbGRoaXN0b3J5ICZsdDtidWlsZGhpc3RvcnlAJHtESVNUUk99Jmd0OyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9ESVInPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX0RJUltkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGJ1aWxkIGhpc3RvcnkgaW5mb3JtYXRpb24gaXMga2VwdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICBidWlsZCBoaXN0b3J5IGluZm9ybWF0aW9uIGlzIGtlcHQuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0aGUgdmFyaWFibGUgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS5jbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIHNldHMgdGhlIGRpcmVjdG9yeSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9ESVIgPz0gIiR7VE9QRElSfS9idWlsZGhpc3RvcnkiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZXMgdG8gYmUgZW5hYmxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJ1aWxkaGlzdG9yeSc+PGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGJ1aWxkIGhpc3RvcnkgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGJ1aWxkIGhpc3Rvcnkgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSB0aHJlZSBmZWF0dXJlcyBpbiB0aGUgZm9ybSBvZiBhCisgICAgICAgICAgICAgICAgICAgIHNwYWNlLXNlcGFyYXRlZCBsaXN0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5pbWFnZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIG9mIHRoZSBjb250ZW50cyBvZiBpbWFnZXMsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGFtb25nIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmdzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5wYWNrYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5hbHlzaXMgb2YgdGhlIGNvbnRlbnRzIG9mIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPnNkazo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuYWx5c2lzIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgc29mdHdhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBraXQgKFNESykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeTwvZmlsZW5hbWU+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgYWxsIHRocmVlIGZlYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9GRUFUVVJFUyA/PSAiaW1hZ2UgcGFja2FnZSBzZGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMREhJU1RPUllfSU1BR0VfRklMRVMnPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMREhJU1RPUllfSU1BR0VfRklMRVNbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGJ1aWxkaGlzdG9yeSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhdGhzIHRvIGZpbGVzIGNvcGllZCBmcm9tIHRoZSBpbWFnZSBjb250ZW50cyBpbnRvIHRoZSBidWlsZCBoaXN0b3J5IGRpcmVjdG9yeSB1bmRlciBhbiAiaW1hZ2UtZmlsZXMiIGRpcmVjdG9yeSBpbiB0aGUgZGlyZWN0b3J5IGZvciB0aGUgaW1hZ2UsIHNvIHRoYXQgeW91IGNhbiB0cmFjayB0aGUgY29udGVudHMgb2YgZWFjaCBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYnVpbGRoaXN0b3J5Jz48ZmlsZW5hbWU+YnVpbGRoaXN0b3J5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGF0aHMgdG8gZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgY29waWVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIGltYWdlIGNvbnRlbnRzIGludG8gdGhlIGJ1aWxkIGhpc3RvcnkgZGlyZWN0b3J5IHVuZGVyCisgICAgICAgICAgICAgICAgICAgIGFuICJpbWFnZS1maWxlcyIgZGlyZWN0b3J5IGluIHRoZSBkaXJlY3RvcnkgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSwgc28gdGhhdCB5b3UgY2FuIHRyYWNrIHRoZSBjb250ZW50cyBvZiBlYWNoIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIHRvIGNvcHkgPGZpbGVuYW1lPi9ldGMvcGFzc3dkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT4vZXRjL2dyb3VwPC9maWxlbmFtZT4sIHdoaWNoIGFsbG93cyB5b3UgdG8KKyAgICAgICAgICAgICAgICAgICAgbW9uaXRvciBmb3IgY2hhbmdlcyBpbiB1c2VyIGFuZCBncm91cCBlbnRyaWVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG1vZGlmeSB0aGUgbGlzdCB0byBpbmNsdWRlIGFueSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5aW5nIGFuIGludmFsaWQgcGF0aCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHlvdSBjYW4gaW5jbHVkZSBmaWxlcyB0aGF0IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgIG5vdCBhbHdheXMgYmUgcHJlc2VudC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBwYXRocyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9JTUFHRV9GSUxFUyA/PSAiL2V0Yy9wYXNzd2QgL2V0Yy9ncm91cCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxESElTVE9SWV9QVVNIX1JFUE8nPjxnbG9zc3Rlcm0+QlVJTERISVNUT1JZX1BVU0hfUkVQTzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERISVNUT1JZX1BVU0hfUkVQT1tkb2NdID0gIldoZW4gaW5oZXJpdGluZyB0aGUgYnVpbGRoaXN0b3J5IGNsYXNzLCB0aGlzIHZhcmlhYmxlIG9wdGlvbmFsbHkgc3BlY2lmaWVzIGEgcmVtb3RlIHJlcG9zaXRvcnkgdG8gd2hpY2ggYnVpbGQgaGlzdG9yeSBwdXNoZXMgR2l0IGNoYW5nZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgb3B0aW9uYWxseSBzcGVjaWZpZXMgYSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSB0byB3aGljaCBidWlsZCBoaXN0b3J5IHB1c2hlcyBHaXQgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIDxmaWxlbmFtZT5CVUlMREhJU1RPUllfUFVTSF9SRVBPPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gd29yaywKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlcG9zaXRvcnkgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYSByZW1vdGUKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyB0aGF0IHNwZWNpZmllcyBhIHJlcG9zaXRvcnkgYXMgdW5kZXJzdG9vZCBieQorICAgICAgICAgICAgICAgICAgICBHaXQsIG9yIGFsdGVybmF0aXZlbHkgdG8gYSByZW1vdGUgbmFtZSB0aGF0IHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCBtYW51YWxseSB1c2luZyA8ZmlsZW5hbWU+Z2l0IHJlbW90ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBzZXRzIHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEJVSUxESElTVE9SWV9QVVNIX1JFUE8gPz0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU0RLX0NGTEFHUyc+PGdsb3NzdGVybT5CVUlMRFNES19DRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEJVSUxEU0RLX0NGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVUlMRFNES19DUFBGTEFHUyc+PGdsb3NzdGVybT5CVUlMRFNES19DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTREtfQ1BQRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvciAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykgd2hlbiBidWlsZGluZyBmb3IgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvcgorICAgICAgICAgICAgICAgICAgICAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU0RLX0NYWEZMQUdTJz48Z2xvc3N0ZXJtPkJVSUxEU0RLX0NYWEZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVUlMRFNES19DWFhGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBidWlsZGluZyBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DWFhGTEFHUyc+PGZpbGVuYW1lPkNYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUJVSUxEU0RLX0xERkxBR1MnPjxnbG9zc3Rlcm0+QlVJTERTREtfTERGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTREtfTERGTEFHU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgbGlua2VyIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBpbiB0aGUgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTERGTEFHUyc+PGZpbGVuYW1lPkxERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQlVJTERTVEFUU19CQVNFJz48Z2xvc3N0ZXJtPkJVSUxEU1RBVFNfQkFTRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQlVJTERTVEFUU19CQVNFW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgYnVpbGQgc3RhdGlzdGljcyB3aGVuIHlvdSB1c2UgYW5kIGVuYWJsZSB0aGUgYnVpbGRzdGF0cyBjbGFzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBidWlsZAorICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzIHdoZW4geW91IHVzZSBhbmQgZW5hYmxlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZHN0YXRzJz48ZmlsZW5hbWU+YnVpbGRzdGF0czwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5CVUlMRFNUQVRTX0JBU0U8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZGVmYXVsdHMKKyAgICAgICAgICAgICAgICAgICAgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+PGZpbGVuYW1lPn0vYnVpbGRzdGF0cy88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1CVVNZQk9YX1NQTElUX1NVSUQnPjxnbG9zc3Rlcm0+QlVTWUJPWF9TUExJVF9TVUlEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBCVVNZQk9YX1NQTElUX1NVSURbZG9jXSA9ICJGb3IgdGhlIEJ1c3lCb3ggcmVjaXBlLCBzcGVjaWZpZXMgd2hldGhlciB0byBzcGxpdCB0aGUgb3V0cHV0IGV4ZWN1dGFibGUgZmlsZSBpbnRvIHR3byBwYXJ0czogb25lIGZvciBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgc2V0dWlkIHJvb3QsIGFuZCBvbmUgZm9yIHRoZSByZW1haW5pbmcgZmVhdHVyZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBCdXN5Qm94IHJlY2lwZSwgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc3BsaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBleGVjdXRhYmxlIGZpbGUgaW50byB0d28gcGFydHM6IG9uZSBmb3IgZmVhdHVyZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCByZXF1aXJlIDxmaWxlbmFtZT5zZXR1aWQgcm9vdDwvZmlsZW5hbWU+LCBhbmQgb25lIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVtYWluaW5nIGZlYXR1cmVzIChpLmUuIHRob3NlIHRoYXQgZG8gbm90IHJlcXVpcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNldHVpZCByb290PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkJVU1lCT1hfU1BMSVRfU1VJRDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvICIxIiwgd2hpY2ggcmVzdWx0cyBpbiBhIHNpbmdsZSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIHRvICIwIiB0byBzcGxpdCB0aGUgb3V0cHV0IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWMnPjx0aXRsZT5DPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNBQ0hFJz48Z2xvc3N0ZXJtPkNBQ0hFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDQUNIRVtkb2NdICA9ICJUaGUgZGlyZWN0b3J5IEJpdEJha2UgdXNlcyB0byBzdG9yZSBhIGNhY2hlIG9mIHRoZSBtZXRhZGF0YS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBCaXRCYWtlIHVzZXMgdG8gc3RvcmUgYSBjYWNoZQorICAgICAgICAgICAgICAgICAgICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc28gaXQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJzZWQgZXZlcnkgdGltZSBCaXRCYWtlIGlzCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0MnPjxnbG9zc3Rlcm0+Q0M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENDW2RvY10gPSAiTWluaW11bSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDIGNvbXBpbGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB1c2VkIHRvIHJ1biB0aGUgQworICAgICAgICAgICAgICAgICAgICBjb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DRkxBR1MnPjxnbG9zc3Rlcm0+Q0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDRkxBR1NbZG9jXSA9ICJGbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0aGUgc2FtZSBhcyBUQVJHRVRfQ0ZMQUdTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBleHBvcnRlZCB0byBhbiBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhbmQgdGh1cyBtYWRlIHZpc2libGUgdG8gdGhlIHNvZnR3YXJlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGR1cmluZyB0aGUgY29tcGlsYXRpb24gc3RlcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiBmb3IgPGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxEX0NGTEFHUyc+PGZpbGVuYW1lPkJVSUxEX0NGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ0ZMQUdTJz48ZmlsZW5hbWU+QlVJTERTREtfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgYW4gU0RLIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkay08L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0xBU1NPVkVSUklERSc+PGdsb3NzdGVybT5DTEFTU09WRVJSSURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDTEFTU09WRVJSSURFW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgc3BlY2lhbCBjbGFzcyBvdmVycmlkZSB0aGF0IHNob3VsZCBjdXJyZW50bHkgYXBwbHkgKGUuZy4gImNsYXNzLXRhcmdldCIsICJjbGFzcy1uYXRpdmUiLCBhbmQgc28gZm9ydGgpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLAorICAgICAgICAgICAgICAgICAgICAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzZXMgdGhhdCB1c2UgdGhpcyB2YXJpYWJsZSBzZXQgaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgdmFsdWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5vcm1hbGx5IGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGZvciB0aGUgPGZpbGVuYW1lPkNMQVNTT1ZFUlJJREU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBnb2VzIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU9WRVJSSURFUyc+PGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBjYW4gYmUgdXNlZCBhcyBhbiBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHdoZXJlICJweXRob24tbmF0aXZlIiBpcyBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb25seSB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgbmF0aXZlIGNhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBweXRob24tbmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ0xFQU5CUk9LRU4nPjxnbG9zc3Rlcm0+Q0xFQU5CUk9LRU48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENMRUFOQlJPS0VOW2RvY10gPSAiUHJldmVudHMgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHJ1bm5pbmcgJ21ha2UgY2xlYW4nIGR1cmluZyB0aGUgZG9fY29uZmlndXJlIHRhc2suIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvICIxIiB3aXRoaW4gYSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DTEVBTkJST0tFTjwvZmlsZW5hbWU+IHNwZWNpZmllcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+bWFrZSBjbGVhbjwvZmlsZW5hbWU+IGNvbW1hbmQgZG9lcworICAgICAgICAgICAgICAgICAgICBub3Qgd29yayBmb3IgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdpbGwgbm90IHRyeQorICAgICAgICAgICAgICAgICAgICB0byBydW4gPGZpbGVuYW1lPm1ha2UgY2xlYW48L2ZpbGVuYW1lPiBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzaywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NQklORURfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+Q09NQklORURfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTUJJTkVEX0ZFQVRVUkVTW2RvY10gPSAiQSBzZXQgb2YgZmVhdHVyZXMgY29tbW9uIGJldHdlZW4gTUFDSElORV9GRUFUVVJFUyBhbmQgRElTVFJPX0ZFQVRVUkVTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIGluCisgICAgICAgICAgICAgICAgICAgIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHNlbGVjdCBsaXN0IG9mIGZlYXR1cmVzIGNvbnRhaW5zIGZlYXR1cmVzIHRoYXQgbWFrZQorICAgICAgICAgICAgICAgICAgICBzZW5zZSB0byBiZSBjb250cm9sbGVkIGJvdGggYXQgdGhlIG1hY2hpbmUgYW5kIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGxldmVsLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlICJibHVldG9vdGgiIGZlYXR1cmUgcmVxdWlyZXMgaGFyZHdhcmUKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBidXQgc2hvdWxkIGFsc28gYmUgb3B0aW9uYWwgYXQgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBsZXZlbCwgaW4gY2FzZSB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgQmx1ZXRvb3RoIGJ1dCB5b3UKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGV2ZXIgaW50ZW5kIHRvIHVzZSBpdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5NQUNISU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT01NT05fTElDRU5TRV9ESVInPjxnbG9zc3Rlcm0+Q09NTU9OX0xJQ0VOU0VfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01NT05fTElDRU5TRV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIDxmaWxlbmFtZT5tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09NUEFUSUJMRV9IT1NUJz48Z2xvc3N0ZXJtPkNPTVBBVElCTEVfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09NUEFUSUJMRV9IT1NUW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIGhvc3RzCisgICAgICAgICAgICAgICAgICAgICh3aGVuIHRoZSByZWNpcGUgaXMgbmF0aXZlKSBvciBvbmUgb3IgbW9yZSB0YXJnZXRzICh3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgaXMgbm9uLW5hdGl2ZSkgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQgYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSJ2YXItSE9TVF9TWVMiPjxmaWxlbmFtZT5IT1NUX1NZUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHZhcmlhYmxlIHRvIHN0b3AgcmVjaXBlcyBmcm9tIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc2VzIG9mIHN5c3RlbXMgd2l0aCB3aGljaCB0aGUgcmVjaXBlcyBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUuCisgICAgICAgICAgICAgICAgICAgIFN0b3BwaW5nIHRoZXNlIGJ1aWxkcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdpdGgga2VybmVscy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGFsc28gaGVscHMgdG8gaW5jcmVhc2UgcGFyc2luZyBzcGVlZAorICAgICAgICAgICAgICAgICAgICBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIHNraXBzIHBhcnNpbmcgcmVjaXBlcyBub3QKKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHN5c3RlbS4KKyAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTVBBVElCTEVfTUFDSElORSc+PGdsb3NzdGVybT5DT01QQVRJQkxFX01BQ0hJTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTVBBVElCTEVfTUFDSElORVtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgdGFyZ2V0IG1hY2hpbmVzIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgbWF0Y2hlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZhci1NQUNISU5FT1ZFUlJJREVTIj48ZmlsZW5hbWU+TUFDSElORU9WRVJSSURFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIHZhcmlhYmxlIHRvIHN0b3AgcmVjaXBlcyBmcm9tIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgIGZvciBtYWNoaW5lcyB3aXRoIHdoaWNoIHRoZSByZWNpcGVzIGFyZSBub3QgY29tcGF0aWJsZS4KKyAgICAgICAgICAgICAgICAgICAgU3RvcHBpbmcgdGhlc2UgYnVpbGRzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2l0aCBrZXJuZWxzLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgYWxzbyBoZWxwcyB0byBpbmNyZWFzZSBwYXJzaW5nIHNwZWVkCisgICAgICAgICAgICAgICAgICAgIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gc2tpcHMgcGFyc2luZyByZWNpcGVzIG5vdAorICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT01QTEVNRU5UQVJZX0dMT0InPjxnbG9zc3Rlcm0+Q09NUExFTUVOVEFSWV9HTE9CPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT01QTEVNRU5UQVJZX0dMT0JbZG9jXSA9ICJEZWZpbmVzIHdpbGRjYXJkcyB0byBtYXRjaCB3aGVuIGluc3RhbGxpbmcgYSBsaXN0IG9mIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgZm9yIGFsbCB0aGUgcGFja2FnZXMgaW5zdGFsbGVkIGluIGFuIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgd2lsZGNhcmRzIHRvIG1hdGNoIHdoZW4gaW5zdGFsbGluZyBhIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBmb3IgYWxsIHRoZSBwYWNrYWdlcyBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgICAgIChvciBpbXBsaWNpdGx5KSBpbnN0YWxsZWQgaW4gYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGlzIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBpdGVtIHRoYXQgY2FuIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIHVzYWdlIG9mIHRoaXMgaXMgdGhlICJkZXYtcGtncyIgaXRlbSB0aGF0IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gd2lsbAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kZXYgcGFja2FnZXMgKGNvbnRhaW5pbmcgaGVhZGVycyBhbmQgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgZmlsZXMpIGZvciBldmVyeSBwYWNrYWdlIGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWRkIGEgbmV3IGZlYXR1cmUgaXRlbSBwb2ludGluZyB0byBhIHdpbGRjYXJkLCB1c2UgYQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmbGFnIHRvIHNwZWNpZnkgdGhlIGZlYXR1cmUgaXRlbSBuYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIHZhbHVlIHRvIHNwZWNpZnkgdGhlIHdpbGRjYXJkLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NUExFTUVOVEFSWV9HTE9CW2Rldi1wa2dzXSA9ICcqLWRldicKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZfVkVSU0lPTic+PGdsb3NzdGVybT5DT05GX1ZFUlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZfVkVSU0lPTltkb2NdID0gIlRyYWNrcyB0aGUgdmVyc2lvbiBvZiBsb2NhbC5jb25mLiAgSW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mLyBjaGFuZ2VzIGluY29tcGF0aWJseS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUcmFja3MgdGhlIHZlcnNpb24gb2YgdGhlIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGZvciA8ZmlsZW5hbWU+Q09ORl9WRVJTSU9OPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBlYWNoIHRpbWUgPGZpbGVuYW1lPmJ1aWxkL2NvbmYvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZGSUxFUyc+PGdsb3NzdGVybT5DT05GRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPTkZGSUxFU1tkb2NdID0gIklkZW50aWZpZXMgZWRpdGFibGUgb3IgY29uZmlndXJhYmxlIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgZWRpdGFibGUgb3IgY29uZmlndXJhYmxlIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBJZiB0aGUgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbSAoUE1TKSBpcyBiZWluZyB1c2VkIHRvIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBvbiB0aGUgdGFyZ2V0IHN5c3RlbSwgaXQgaXMgcG9zc2libGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHlvdSBoYXZlIGNoYW5nZWQgYWZ0ZXIgdGhlIG9yaWdpbmFsIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCB5b3Ugbm93IHdhbnQgdG8gcmVtYWluIHVuY2hhbmdlZCBhcmUgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBlZGl0YWJsZSBmaWxlcyBtaWdodCBleGlzdCBpbiB0aGUgcGFja2FnZSB0aGF0IHlvdSBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgd2FudCByZXNldCBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlIHVwZGF0ZSBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIGxpc3QgdGhlIGZpbGVzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHRoYXQgeW91IHdpc2ggdG8gcHJldmVudCB0aGUgUE1TIGZyb20gb3ZlcndyaXRpbmcgZHVyaW5nIHRoaXMgdXBkYXRlIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLCBwcm92aWRlIGEgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVzdWx0aW5nIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZW4sIHByb3ZpZGUgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9maWxlMSBcCisgICAgICAgICR7c3lzY29uZmRpcn0vZmlsZTIgJHtzeXNjb25mZGlyfS9maWxlMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBIHJlbGF0aW9uc2hpcCBleGlzdHMgYmV0d2VlbiB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz5GSUxFUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlcyBsaXN0ZWQgd2l0aGluIDxmaWxlbmFtZT5DT05GRklMRVM8L2ZpbGVuYW1lPiBtdXN0IGJlIGEgc3Vic2V0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBmaWxlcyBsaXN0ZWQgd2l0aGluIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHlvdSBwcm92aWRlIHdpdGggPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFyZSBzaW1wbHkgYmVpbmcgaWRlbnRpZmllZCBzbyB0aGF0IHRoZSBQTVMgd2lsbCBub3Qgb3ZlcndyaXRlIHRoZW0sCisgICAgICAgICAgICAgICAgICAgIGl0IG1ha2VzIHNlbnNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVzIG11c3QgYWxyZWFkeSBiZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNwZWNpZnlpbmcgcGF0aHMgYXMgcGFydCBvZiB0aGUgPGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBpdCBpcyBnb29kIHByYWN0aWNlIHRvIHVzZSBhcHByb3ByaWF0ZSBwYXRoIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT4ke3N5c2NvbmZkaXJ9PC9maWxlbmFtZT4gcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGM8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+JHtiaW5kaXJ9PC9maWxlbmFtZT4gcmF0aGVyCisgICAgICAgICAgICAgICAgICAgIHRoYW4gPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBhIGxpc3Qgb2YgdGhlc2UgdmFyaWFibGVzIGF0IHRoZSB0b3Agb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPTkZJR19JTklUUkFNRlNfU09VUkNFJz48Z2xvc3N0ZXJtPkNPTkZJR19JTklUUkFNRlNfU09VUkNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRVtkb2NdID0gIklkZW50aWZpZXMgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykgc291cmNlIGZpbGVzLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWNlaXZlcyBhbmQgdXNlcyB0aGlzIGtlcm5lbCBLY29uZmlnIHZhcmlhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykgc291cmNlIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSByZWNlaXZlcyBhbmQgdXNlcworICAgICAgICAgICAgICAgICAgICB0aGlzIGtlcm5lbCBLY29uZmlnIHZhcmlhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIG51bGwgKCIiKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5DT05GSUdfSU5JVFJBTUZTX1NPVVJDRTwvZmlsZW5hbWU+IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICBlaXRoZXIgYSBzaW5nbGUgY3BpbyBhcmNoaXZlIHdpdGggYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmNwaW88L2ZpbGVuYW1lPiBzdWZmaXggb3IgYQorICAgICAgICAgICAgICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZm9yIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0cmFtZnMgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEEgY3BpbyBhcmNoaXZlIHNob3VsZCBjb250YWluIGEgZmlsZXN5c3RlbSBhcmNoaXZlCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIHVzZWQgYXMgYW4gaW5pdHJhbWZzIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcmllcyBzaG91bGQgY29udGFpbiBhIGZpbGVzeXN0ZW0gbGF5b3V0IHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBpbml0cmFtZnMgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEZpbGVzIHNob3VsZCBjb250YWluIGVudHJpZXMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNyL2dlbl9pbml0X2NwaW88L2ZpbGVuYW1lPiBwcm9ncmFtIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgdHJlZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIGltYWdlIHdpbGwgYmUgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb2YgdGhlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GSUdfU0lURSc+PGdsb3NzdGVybT5DT05GSUdfU0lURTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORklHX1NJVEVbZG9jXSA9ICJBIGxpc3Qgb2YgZmlsZXMgdGhhdCBjb250YWlucyBhdXRvY29uZiB0ZXN0IHJlc3VsdHMgcmVsZXZhbnQgdG8gdGhlIGN1cnJlbnQgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSB0aGUgQXV0b3Rvb2xzIHV0aWxpdGllcyB3aGVuIHJ1bm5pbmcgY29uZmlndXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5zIDxmaWxlbmFtZT5hdXRvY29uZjwvZmlsZW5hbWU+IHRlc3QgcmVzdWx0cyByZWxldmFudAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3VycmVudCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBBdXRvdG9vbHMgdXRpbGl0aWVzIHdoZW4gcnVubmluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZmlndXJlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09ORklHVVJFX0ZMQUdTJz48Z2xvc3N0ZXJtPkNPTkZJR1VSRV9GTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09ORklHVVJFX0ZMQUdTW2RvY10gPSAiVGhlIG1pbmltYWwgYXJndW1lbnRzIGZvciBHTlUgY29uZmlndXJlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGFyZ3VtZW50cyBmb3IgR05VIGNvbmZpZ3VyZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT05GTElDVF9ESVNUUk9fRkVBVFVSRVMnPjxnbG9zc3Rlcm0+Q09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBDT05GTElDVF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCB3b3VsZCBiZSBpbiBjb25mbGljdCBzaG91bGQgdGhlIHJlY2lwZSBiZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb19mZWF0dXJlc19jaGVjayc+PGZpbGVuYW1lPmRpc3Ryb19mZWF0dXJlc19jaGVjazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlIGluIGNvbmZsaWN0IHNob3VsZCB0aGUgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgaWYgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT05GTElDVF9ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBsaXN0cyBhIGZlYXR1cmUgdGhhdCBhbHNvIGFwcGVhcnMgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCBjb25maWd1cmF0aW9uLCBhbiBlcnJvciBvY2N1cnMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBzdG9wcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT1BZX0xJQ19ESVJTJz48Z2xvc3N0ZXJtPkNPUFlfTElDX0RJUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUFlfTElDX0RJUlNbZG9jXSA9ICJJZiBzZXQgdG8gIjEiIGFsb25nIHdpdGggdGhlIENPUFlfTElDX01BTklGRVNUIHZhcmlhYmxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb3BpZXMgaW50byB0aGUgaW1hZ2UgdGhlIGxpY2Vuc2UgZmlsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGluIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzLCBmb3IgZWFjaCBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIgYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPUFlfTElDX01BTklGRVNUJz48ZmlsZW5hbWU+Q09QWV9MSUNfTUFOSUZFU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvcGllcworICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBpbWFnZSB0aGUgbGljZW5zZSBmaWxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaWNlbnNlIGZpbGVzIGFyZSBwbGFjZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBpbWFnZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ09QWV9MSUNfTUFOSUZFU1QnPjxnbG9zc3Rlcm0+Q09QWV9MSUNfTUFOSUZFU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUFlfTElDX01BTklGRVNUW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29waWVzIHRoZSBsaWNlbnNlIG1hbmlmZXN0IGZvciB0aGUgaW1hZ2UgdG8gL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvbGljZW5zZS5tYW5pZmVzdCB3aXRoaW4gdGhlIGltYWdlIGl0c2VsZi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjb3BpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGxpY2Vuc2UgbWFuaWZlc3QgZm9yIHRoZSBpbWFnZSB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvbGljZW5zZS5tYW5pZmVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgaW1hZ2UgaXRzZWxmLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCc+PGdsb3NzdGVybT5DT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuIFlvdSBzaG91bGQgb25seSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlIGZvdW5kCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHJlcGxhY2VzIDxmaWxlbmFtZT5QT0tZX0VYVFJBX0lOU1RBTEw8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DT1JFQkFTRSc+PGdsb3NzdGVybT5DT1JFQkFTRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ09SRUJBU0VbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIE9wZW5FbWJlZGRlZCBDb3JlIE1ldGFkYXRhIGxheWVyIChpLmUuIG1ldGEpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIENvcmUgTWV0YWRhdGEgbGF5ZXIgKGkuZS4gPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT1JFQkFTRTwvZmlsZW5hbWU+IHBvaW50cyB0byB0aGUgcGFyZW50IG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgYW5kIG5vdCB0aGUgbGF5ZXIgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBoYXZlIGNsb25lZCB0aGUgUG9reSBHaXQKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhbmQgcmV0YWluZWQgdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbmFtZSBmb3IgeW91ciBsb2NhbCBjb3B5IG9mIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIDxmaWxlbmFtZT5DT1JFQkFTRTwvZmlsZW5hbWU+IHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBmb2xkZXIgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgPGZpbGVuYW1lPnBva3kvbWV0YTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxheWVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNQUCc+PGdsb3NzdGVybT5DUFA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENQUFtkb2NdID0gIk1pbmltdW0gY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZSBDCisgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1DUFBGTEFHUyc+PGdsb3NzdGVybT5DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ1BQRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMgcHJlLXByb2Nlc3NvciAoaS5lLiB0byBib3RoIHRoZSBDIGFuZCB0aGUgQysrIGNvbXBpbGVycykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGV4cG9ydGVkIHRvIGFuIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGFuZCB0aHVzIG1hZGUgdmlzaWJsZSB0byB0aGUgc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBzdGVwLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGluaXRpYWxpemF0aW9uIGZvciA8ZmlsZW5hbWU+Q1BQRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgYnVpbHQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DUFBGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfQ1BQRkxBR1MnPjxmaWxlbmFtZT5CVUlMRF9DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfQ1BQRkxBR1MnPjxmaWxlbmFtZT5CVUlMRFNES19DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNST1NTX0NPTVBJTEUnPjxnbG9zc3Rlcm0+Q1JPU1NfQ09NUElMRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ1JPU1NfQ09NUElMRVtkb2NdID0gIlRoZSB0b29sY2hhaW4gYmluYXJ5IHByZWZpeCBmb3IgdGhlIHRhcmdldCB0b29scy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IGZvciB0aGUgdGFyZ2V0IHRvb2xzLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkNST1NTX0NPTVBJTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Q1JPU1NfQ09NUElMRTwvZmlsZW5hbWU+IHZhcmlhYmxlIG9ubHkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRhaW4gY29udGV4dHMgKGUuZy4gd2hlbiBidWlsZGluZyBmb3Iga2VybmVsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQga2VybmVsIG1vZHVsZSByZWNpcGVzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUNWU0RJUic+PGdsb3NzdGVybT5DVlNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENWU0RJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgY3ZzIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZCBpbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IHVuZGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBDVlMgc3lzdGVtIGFyZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1hYJz48Z2xvc3N0ZXJtPkNYWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgQ1hYW2RvY10gPSAiTWluaW11bSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBDKysgY29tcGlsZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZSBDKysKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItQ1hYRkxBR1MnPjxnbG9zc3Rlcm0+Q1hYRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIENYWEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZXhwb3J0ZWQgdG8gYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRodXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NYWEZMQUdTJz48ZmlsZW5hbWU+VEFSR0VUX0NYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9DWFhGTEFHUyc+PGZpbGVuYW1lPkJVSUxEX0NYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LW5hdGl2ZTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRFNES19DWFhGTEFHUyc+PGZpbGVuYW1lPkJVSUxEU0RLX0NYWEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgYW4gU0RLIChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZCc+PHRpdGxlPkQ8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRCc+PGdsb3NzdGVybT5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBEW2RvY10gPSAiVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaW4gdGhlIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgY29tcG9uZW50cyBhcmUgaW5zdGFsbGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBkZWZhdWx0cyB0bzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9L2ltYWdlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1EQVRFJz48Z2xvc3N0ZXJtPkRBVEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERBVEVbZG9jXSA9ICJUaGUgZGF0ZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQgdXNpbmcgWU1EIGZvcm1hdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGF0ZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIERhdGVzIGFwcGVhciB1c2luZyB0aGUgeWVhciwgbW9udGgsIGFuZCBkYXkgKFlNRCkgZm9ybWF0CisgICAgICAgICAgICAgICAgICAgIChlLmcuICIyMDE1MDIwOSIgZm9yIEZlYnJ1YXJ5IDl0aCwgMjAxNSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREFURVRJTUUnPjxnbG9zc3Rlcm0+REFURVRJTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERBVEVUSU1FW2RvY10gPSAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIGFuZCB0aW1lIG9uIHdoaWNoIHRoZSBjdXJyZW50IGJ1aWxkIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmb3JtYXQgaXMgc3VpdGFibGUgZm9yIHRpbWVzdGFtcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVCSUFOX05PQVVUT05BTUUnPjxnbG9zc3Rlcm0+REVCSUFOX05PQVVUT05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFQklBTl9OT0FVVE9OQU1FW2RvY10gPSAiUHJldmVudHMgYSBwYXJ0aWN1bGFyIHBhY2thZ2UgZnJvbSBiZWluZyByZW5hbWVkIGFjY29yZGluZyB0byBEZWJpYW4gcGFja2FnZSBuYW1pbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGlzIGluaGVyaXRlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERUJJQU5fTk9BVVRPTkFNRTwvZmlsZW5hbWU+IHNwZWNpZmllcyBhCisgICAgICAgICAgICAgICAgICAgIHBhcnRpY3VsYXIgcGFja2FnZSBzaG91bGQgbm90IGJlIHJlbmFtZWQgYWNjb3JkaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIERlYmlhbiBsaWJyYXJ5IHBhY2thZ2UgbmFtaW5nLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIHBhY2thZ2UgbmFtZSBhcyBhbiBvdmVycmlkZSB3aGVuIHlvdQorICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIDxmaWxlbmFtZT5mb250Y29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFQklBTl9OT0FVVE9OQU1FX2ZvbnRjb25maWctdXRpbHMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFQklBTk5BTUUnPjxnbG9zc3Rlcm0+REVCSUFOTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVCSUFOTkFNRVtkb2NdID0gIkFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIGxpYnJhcnkgbmFtZSBmb3IgYW4gaW5kaXZpZHVhbCBwYWNrYWdlIGZvciBEZWJpYW4gbGlicmFyeSBwYWNrYWdlIHJlbmFtaW5nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpcyBpbmhlcml0ZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVCSUFOTkFNRTwvZmlsZW5hbWU+IGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgbmFtZSBmb3IgYW4gaW5kaXZpZHVhbCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBPdmVycmlkaW5nIHRoZSBsaWJyYXJ5IG5hbWUgaW4gdGhlc2UgY2FzZXMgaXMgcmFyZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgdXNlIHRoZSBwYWNrYWdlIG5hbWUgYXMgYW4gb3ZlcnJpZGUgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERUJJQU5OQU1FXyR7UE59ID0gImRidXMtMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFQlVHX0JVSUxEJz48Z2xvc3N0ZXJtPkRFQlVHX0JVSUxEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUJVR19CVUlMRFtkb2NdID0gIlNwZWNpZmllcyB0byBidWlsZCBwYWNrYWdlcyB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhpcyBpbmZsdWVuY2VzIHRoZSB2YWx1ZSBvZiB0aGUgU0VMRUNURURfT1BUSU1JWkFUSU9OIHZhcmlhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0byBidWlsZCBwYWNrYWdlcyB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpbmZsdWVuY2VzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TRUxFQ1RFRF9PUFRJTUlaQVRJT04nPlNFTEVDVEVEX09QVElNSVpBVElPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUJVR19PUFRJTUlaQVRJT04nPjxnbG9zc3Rlcm0+REVCVUdfT1BUSU1JWkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERUJVR19PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhIHN5c3RlbSBmb3IgZGVidWdnaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctTyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZycuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG9wdGlvbnMgdG8gcGFzcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DRkxBR1MnPlRBUkdFVF9DRkxBR1M8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItQ0ZMQUdTJz5DRkxBR1M8L2xpbms+PC9maWxlbmFtZT4gd2hlbiBjb21waWxpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAiLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJHtERUJVR19GTEFHU30gLXBpcGUiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFRkFVTFRfUFJFRkVSRU5DRSc+PGdsb3NzdGVybT5ERUZBVUxUX1BSRUZFUkVOQ0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFRkFVTFRfUFJFRkVSRU5DRVtkb2NdID0gIlNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSB3ZWFrIGJpYXMgZm9yIHJlY2lwZSBzZWxlY3Rpb24gcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBvZiB0aGlzIGlzIHZhcmlhYmxlIGlzIHRvIHNldAorICAgICAgICAgICAgICAgICAgICBpdCB0byAiLTEiIHdpdGhpbiBhIHJlY2lwZSBmb3IgYSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgcGllY2Ugb2Ygc29mdHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRoZSB2YXJpYWJsZSBpbiB0aGlzIHdheSBjYXVzZXMgdGhlIHN0YWJsZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZWNpcGUgdG8gYnVpbGQgYnkgZGVmYXVsdCBpbiB0aGUgYWJzZW5jZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBSRUZFUlJFRF9WRVJTSU9OJz5QUkVGRVJSRURfVkVSU0lPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBiZWluZyB1c2VkIHRvIGJ1aWxkIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmlhcyBwcm92aWRlZCBieSA8ZmlsZW5hbWU+REVGQVVMVF9QUkVGRVJFTkNFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgd2VhayBhbmQgaXMgb3ZlcnJpZGRlbiBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUJCRklMRV9QUklPUklUWSc+QkJGSUxFX1BSSU9SSVRZPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgdmFyaWFibGUgaXMgZGlmZmVyZW50IGJldHdlZW4gdHdvIGxheWVycworICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERUZBVUxUVFVORSc+PGdsb3NzdGVybT5ERUZBVUxUVFVORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgREVGQVVMVFRVTkVbZG9jXSA9ICJUaGUgZGVmYXVsdCBDUFUgYW5kIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuaW5ncyAoaS5lLiAgdGhlICJ0dW5lIikgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBDUFUgYW5kIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkKKyAgICAgICAgICAgICAgICAgICAgdHVuaW5ncyAoaS5lLiAgdGhlICJ0dW5lIikgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ERUZBVUxUVFVORTwvZmlsZW5hbWU+IGhlbHBzIGRlZmluZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9GRUFUVVJFUyc+PGZpbGVuYW1lPlRVTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHR1bmUgaXMgZWl0aGVyIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBzZXQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHNldHRpbmcgdXNpbmcgYXZhaWxhYmxlIHR1bmVzCisgICAgICAgICAgICAgICAgICAgIGFzIGRlZmluZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVZBSUxUVU5FUyc+PGZpbGVuYW1lPkFWQUlMVFVORVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQRU5EUyc+PGdsb3NzdGVybT5ERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBFTkRTW2RvY10gPSAiTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGEgcmVjaXBlJ3MgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gb3RoZXIgcmVjaXBlIGZpbGVzKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN5c3RlbSBlbnN1cmVzIHRoYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMgbGlzdGVkCisgICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBidWlsdCBhbmQgaGF2ZSB0aGVpciBjb250ZW50cyBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdHMgYmVmb3JlIHRoZSByZWNpcGUncyBjb25maWd1cmUgdGFzayBpcyBleGVjdXRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhpcyBzaW1wbGUgZXhhbXBsZSBmb3IgdHdvIHJlY2lwZXMgbmFtZWQgImEiIGFuZAorICAgICAgICAgICAgICAgICAgICAiYiIgdGhhdCBwcm9kdWNlIHNpbWlsYXJseSBuYW1lZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgYXBwZWFycyBpbiB0aGUgImEiIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTID0gImIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSwgdGhlIGRlcGVuZGVuY3kgaXMgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtY29uZmlndXJlJz48ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgZm9yIHJlY2lwZSAiYSIgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBvcHVsYXRlX3N5c3Jvb3QnPjxmaWxlbmFtZT5kb19wb3B1bGF0ZV9zeXNyb290PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgb2YgcmVjaXBlICJiIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBhbnl0aGluZyB0aGF0IHJlY2lwZSAiYiIgcHV0cyBpbnRvIHN5c3Jvb3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYXZhaWxhYmxlIHdoZW4gcmVjaXBlICJhIiBpcyBjb25maWd1cmluZyBpdHNlbGYuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBydW50aW1lIGRlcGVuZGVuY2llcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgZ2VuZXJhbCBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgZGlyZWN0b3J5IHJlc2lkZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFzIDxmaWxlbmFtZT4ke1RNUERJUn0vZGVwbG95PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtYnVpbGQnPlRoZSBCdWlsZCBEaXJlY3RvcnkgLSA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWwgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiwKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIsCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nc2RrLWRldi1lbnZpcm9ubWVudCc+QXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgU0RLPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVQTE9ZX0RJUl9ERUInPjxnbG9zc3Rlcm0+REVQTE9ZX0RJUl9ERUI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWV9ESVJfREVCW2RvY10gPSAiUG9pbnRzIHRvIGEgRGViaWFuLXNwZWNpZmljIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcywgcGFja2FnZXMsIFNES3MgYW5kIG90aGVyIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIHRvIHBsYWNlIERlYmlhbiBwYWNrYWdlcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkIG91dHNpZGUKKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz48ZmlsZW5hbWU+UEFDS0FHRV9DTEFTU0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zICJwYWNrYWdlX2RlYiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbml0aWFsbHkgZGVmaW5lcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRFUExPWV9ESVJfREVCPC9maWxlbmFtZT4gdmFyaWFibGUgYXMgYQorICAgICAgICAgICAgICAgICAgICBzdWItZm9sZGVyIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERVBMT1lfRElSJz48ZmlsZW5hbWU+REVQTE9ZX0RJUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lfRElSX0RFQiA9ICIke0RFUExPWV9ESVJ9L2RlYiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZV9kZWInPjxmaWxlbmFtZT5wYWNrYWdlX2RlYjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZX0RJUl9ERUI8L2ZpbGVuYW1lPiB2YXJpYWJsZSB0byBtYWtlIHN1cmUKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlX3dyaXRlX2RlYic+PGZpbGVuYW1lPmRvX3BhY2thZ2Vfd3JpdGVfZGViPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgd3JpdGVzIERlYmlhbiBwYWNrYWdlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBmb2xkZXIuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBwYWNrYWdpbmcgd29ya3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3BhY2thZ2UtZmVlZHMtZGV2LWVudmlyb25tZW50Jz5QYWNrYWdlIEZlZWRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ERVBMT1lfRElSX0lNQUdFJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWV9ESVJfSU1BR0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZCBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgZGVwbG95ZWQgb250byB0aGUgdGFyZ2V0IG1hY2hpbmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBpbWFnZXMgYW5kIG90aGVyIGFzc29jaWF0ZWQgb3V0cHV0IGZpbGVzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIHJlYWR5IHRvIGJlIGRlcGxveWVkIG9udG8gdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGlzIG1hY2hpbmUtc3BlY2lmaWMgYXMgaXQgY29udGFpbnMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke01BQ0hJTkV9PC9maWxlbmFtZT4gbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhpcyBkaXJlY3RvcnkgcmVzaWRlcyB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgYXMgPGZpbGVuYW1lPiR7REVQTE9ZX0RJUn0vaW1hZ2VzLyR7TUFDSElORX0vPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEJ1aWxkCisgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSwgc2VlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtYnVpbGQnPlRoZSBCdWlsZCBEaXJlY3RvcnkgLSA8ZmlsZW5hbWU+YnVpbGQvPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWwgb24gdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gZGlyZWN0b3J5LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZXMtZGV2LWVudmlyb25tZW50Jz5JbWFnZXM8L2xpbms+IiBhbmQKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3Nkay1kZXYtZW52aXJvbm1lbnQnPkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFNESzwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfSVBLJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfSVBLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX0lQS1tkb2NdID0gIlBvaW50cyB0byBhIElQSy1zcGVjaWZpYyBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBJUEsgcGFja2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV9pcGsiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBhIHN1Yi1mb2xkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWV9ESVJfSVBLID0gIiR7REVQTE9ZX0RJUn0vaXBrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX2lwayc+PGZpbGVuYW1lPnBhY2thZ2VfaXBrPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX0lQSzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB3cml0ZXMgSVBLIHBhY2thZ2VzIGludG8gdGhlIGFwcHJvcHJpYXRlIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHBhY2thZ2luZyB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfUlBNJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfUlBNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX1JQTVtkb2NdID0gIlBvaW50cyB0byBhIFJQTS1zcGVjaWZpYyBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBwbGFjZSBSUE0gcGFja2FnZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV9ycG0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBhIHN1Yi1mb2xkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWV9ESVJfUlBNID0gIiR7REVQTE9ZX0RJUn0vcnBtIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3JwbSc+PGZpbGVuYW1lPnBhY2thZ2VfcnBtPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX1JQTTwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfcnBtJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB3cml0ZXMgUlBNIHBhY2thZ2VzIGludG8gdGhlIGFwcHJvcHJpYXRlIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHBhY2thZ2luZyB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWV9ESVJfVEFSJz48Z2xvc3N0ZXJtPkRFUExPWV9ESVJfVEFSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBERVBMT1lfRElSX1RBUltkb2NdID0gIlBvaW50cyB0byBhIHRhcmJhbGwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGxhY2UgdGFyYmFsbHMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IHdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+PGZpbGVuYW1lPlBBQ0tBR0VfQ0xBU1NFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAicGFja2FnZV90YXIiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUgaW5pdGlhbGx5IGRlZmluZXMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBhIHN1Yi1mb2xkZXIgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVInPjxmaWxlbmFtZT5ERVBMT1lfRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWV9ESVJfVEFSID0gIiR7REVQTE9ZX0RJUn0vdGFyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wYWNrYWdlX3Rhcic+PGZpbGVuYW1lPnBhY2thZ2VfdGFyPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ERVBMT1lfRElSX1RBUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfdGFyJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayB3cml0ZXMgVEFSIHBhY2thZ2VzIGludG8gdGhlIGFwcHJvcHJpYXRlIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHBhY2thZ2luZyB3b3Jrcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncGFja2FnZS1mZWVkcy1kZXYtZW52aXJvbm1lbnQnPlBhY2thZ2UgRmVlZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURFUExPWURJUic+PGdsb3NzdGVybT5ERVBMT1lESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFUExPWURJUltkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGVwbG95IGNsYXNzLCB0aGUgREVQTE9ZRElSIHBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgZm9yIGRlcGxveWVkIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGVwbG95Jz48ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGUgPGZpbGVuYW1lPkRFUExPWURJUjwvZmlsZW5hbWU+IHBvaW50cyB0byBhCisgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSB3b3JrIGFyZWEgZm9yIGRlcGxveWVkIGZpbGVzIHRoYXQgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gY2xhc3MgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHs8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBpbmhlcml0aW5nIHRoZSA8ZmlsZW5hbWU+ZGVwbG95PC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGNvcHkgZmlsZXMgdG8gYmUgZGVwbG95ZWQgaW50bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+REVQTE9ZRElSPC9maWxlbmFtZT4sIGFuZCB0aGUgY2xhc3Mgd2lsbCB0YWtlCisgICAgICAgICAgICAgICAgICAgIGNhcmUgb2YgY29weWluZyB0aGVtIGludG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFmdGVyd2FyZHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItREVTQ1JJUFRJT04nPjxnbG9zc3Rlcm0+REVTQ1JJUFRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERFU0NSSVBUSU9OW2RvY10gPSAiVGhlIHBhY2thZ2UgZGVzY3JpcHRpb24gdXNlZCBieSBwYWNrYWdlIG1hbmFnZXJzLiBJZiBub3Qgc2V0LCBERVNDUklQVElPTiB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIFNVTU1BUlkgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgZGVzY3JpcHRpb24gdXNlZCBieSBwYWNrYWdlIG1hbmFnZXJzLgorICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc2V0LCA8ZmlsZW5hbWU+REVTQ1JJUFRJT048L2ZpbGVuYW1lPiB0YWtlcworICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVU1NQVJZJz48ZmlsZW5hbWU+U1VNTUFSWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNLX1NJR05BVFVSRSc+PGdsb3NzdGVybT5ESVNLX1NJR05BVFVSRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTS19TSUdOQVRVUkVbZG9jXSA9ICJBIDMyLWJpdCBNQlIgZGlzayBzaWduYXR1cmUgdXNlZCBieSBkaXJlY3RkaXNrIGltYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIDMyLWJpdCBNQlIgZGlzayBzaWduYXR1cmUgdXNlZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlyZWN0ZGlzazwvZmlsZW5hbWU+IGltYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIHNpZ25hdHVyZSBpcyBzZXQgdG8gYW4gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlIHRoYXQgYWxsb3dzIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSBhIGJvb3QgbG9hZGVyLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG92ZXJyaWRlIHRoZSBzaWduYXR1cmUgaW4gdGhlIGltYWdlIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBieSBzZXR0aW5nIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IHRvIGFuCisgICAgICAgICAgICAgICAgICAgIDgtZGlnaXQgaGV4IHN0cmluZy4KKyAgICAgICAgICAgICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU0tfU0lHTkFUVVJFPC9maWxlbmFtZT4gaWYgeW91IHdhbnQgdGhlIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIHRvIHJlbWFpbiBjb25zdGFudCBiZXR3ZWVuIGltYWdlIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZyBMaW51eCAzLjggb3IgbGF0ZXIsIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNLX1NJR05BVFVSRTwvZmlsZW5hbWU+IHRvIHNwZWNpZnkgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgYnkgVVVJRCB0byBhbGxvdyB0aGUga2VybmVsIHRvIGxvY2F0ZSB0aGUgcm9vdCBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgZXZlbiBpZiB0aGUgZGV2aWNlIG5hbWUgY2hhbmdlcyBkdWUgdG8gZGlmZmVyZW5jZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlNZU0xJTlVYX1JPT1Q8L2ZpbGVuYW1lPiBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9ST09UID0gInJvb3Q9L2Rldi9zZGEyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gY2hhbmdlIHRoaXMgdG8gbG9jYXRlIHRoZSByb290IGRldmljZQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgZGlzayBzaWduYXR1cmUgaW5zdGVhZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTWVNMSU5VWF9ST09UID0gInJvb3Q9UEFSVFVVSUQ9JHtESVNLX1NJR05BVFVSRX0tMDIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU0tfU0lHTkFUVVJFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgdG8gYSBmaXhlZAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpZiB5b3UgZG8gbm90IHdhbnQgPGZpbGVuYW1lPnN5c2xpbnV4LmNmZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nIGZvciBlYWNoIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBZb3UgbWlnaHQgZmluZCB0aGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHVwZ3JhZGUgdGhlCisgICAgICAgICAgICAgICAgICAgIHJvb3QgZmlsZXN5c3RlbSBvbiBhIGRldmljZSB3aXRob3V0IGhhdmluZyB0byByZWNyZWF0ZSBvcgorICAgICAgICAgICAgICAgICAgICBtb2RpZnkgdGhlIG1hc3RlciBib290IHJlY29yZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk8nPjxnbG9zc3Rlcm0+RElTVFJPPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9bZG9jXSA9ICJUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgYmxhbmssIG1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgd2lsbCBiZSB1c2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgY29ycmVzcG9uZHMgdG8gYSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHdob3NlIHJvb3QgbmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUncyBhcmd1bWVudCBhbmQgd2hvc2UgZmlsZW5hbWUgZXh0ZW5zaW9uIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBQb2t5IGRpc3RyaWJ1dGlvbiBpcyBuYW1lZCA8ZmlsZW5hbWU+cG9reS5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlc2lkZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvL2NvbmYvZGlzdHJvPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdpdGhpbiB0aGF0IDxmaWxlbmFtZT5wb2t5LmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHNldCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERJU1RSTyA9ICJwb2t5IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBsb2NhdGVkIGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvPC9maWxlbmFtZT4gZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBmb3IgPGZpbGVuYW1lPkRJU1RSTzwvZmlsZW5hbWU+IG11c3Qgbm90IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgc3BhY2VzLCBhbmQgaXMgdHlwaWNhbGx5IGFsbCBsb3dlci1jYXNlLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSA8ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgYmxhbmssIGEgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICBvZiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIGFyZSB1c2VkLCB3aGljaCBhcmUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fQ09ERU5BTUUnPjxnbG9zc3Rlcm0+RElTVFJPX0NPREVOQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fQ09ERU5BTUVbZG9jXSA9ICJTcGVjaWZpZXMgYSBjb2RlbmFtZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBiZWluZyBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBjb2RlbmFtZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRVhUUkFfUkRFUEVORFMnPjxnbG9zc3Rlcm0+RElTVFJPX0VYVFJBX1JERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcy4gVGhlIHZhcmlhYmxlIG9ubHkgYXBwbGllcyB0byB0aGUgaW1hZ2VzIHRoYXQgaW5jbHVkZSBwYWNrYWdlZ3JvdXAtYmFzZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB0YWtlcyBhZmZlY3QgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWJhc2U8L2ZpbGVuYW1lPiBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgb25seSByZWFsbHkgYXBwbGllcyB0byB0aGUgbW9yZSBmdWxsLWZlYXR1cmVkCisgICAgICAgICAgICAgICAgICAgIGltYWdlcyB0aGF0IGluY2x1ZGUgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1iYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgdmFyaWFibGUgdG8ga2VlcCBkaXN0cm8gcG9saWN5IG91dCBvZgorICAgICAgICAgICAgICAgICAgICBnZW5lcmljIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgb3RoZXIgZGlzdHJvIHZhcmlhYmxlcywgeW91IHNldCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkaXN0cm8gPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fRVhUUkFfUlJFQ09NTUVORFMnPjxnbG9zc3Rlcm0+RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcyBpZiB0aGUgcGFja2FnZXMgZXhpc3QuIFRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBidXQgeW91IGNhbiByZW1vdmUgdGhlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGRpc3Ryby1zcGVjaWZpYyBwYWNrYWdlcyB0byBhZGQgdG8gYWxsIGltYWdlcworICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcGFja2FnZXMgZXhpc3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlcyBtaWdodCBub3QgZXhpc3Qgb3IgYmUgZW1wdHkgKGUuZy4ga2VybmVsIG1vZHVsZXMpLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgYnV0IHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiVGhlIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoZSBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIHN1cHBvcnQgeW91IHdhbnQgaW4geW91ciBkaXN0cmlidXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIHZhcmlvdXMgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgeW91ciBkaXN0cmlidXRpb24gZmVhdHVyZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEluIG1vc3QgY2FzZXMsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGEgZmVhdHVyZSBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gaXMgdHJhbnNsYXRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgb3B0aW9uIHN1cHBsaWVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0CisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbmZpZ3VyZSc+PGZpbGVuYW1lPmRvX2NvbmZpZ3VyZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0YXNrIGZvciByZWNpcGVzIHRoYXQgb3B0aW9uYWxseSBzdXBwb3J0IHRoZSBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3BlY2lmeWluZyAieDExIiBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4sIGNhdXNlcworICAgICAgICAgICAgICAgICAgICBldmVyeSBwaWVjZSBvZiBzb2Z0d2FyZSBidWlsdCBmb3IgdGhlIHRhcmdldCB0aGF0IGNhbgorICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGx5IHN1cHBvcnQgWDExIHRvIGhhdmUgaXRzIFgxMSBzdXBwb3J0IGVuYWJsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR3byBtb3JlIGV4YW1wbGVzIGFyZSBCbHVldG9vdGggYW5kIE5GUyBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBzaGlwcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGFuZCB0aGF0IHlvdSBjYW4gcHJvdmlkZSB3aXRoIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1kaXN0cm8nPkRpc3RybyBGZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyB0byBiZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+RElTVFJPX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYmVzdCB0byBqdXN0IHJlZmVyZW5jZSB0aGUgdmFyaWFibGUgdG8gc2VlIHdoaWNoIGRpc3RybyBmZWF0dXJlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYmFja2ZpbGxlZCBmb3IgYWxsIGRpc3RybyBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPkZlYXR1cmUgYmFja2ZpbGxpbmc8L2xpbms+IHNlY3Rpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQnPjxnbG9zc3Rlcm0+RElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEW2RvY10gPSAiRmVhdHVyZXMgZnJvbSBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwnPkRJU1RST19GRUFUVVJFU19CQUNLRklMTDwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+RElTVFJPX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPkZlYXR1cmUgQmFja2ZpbGxpbmc8L2xpbms+IiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19ERUZBVUxUJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19ERUZBVUxUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVNfREVGQVVMVFtkb2NdID0gIlByb3ZpZGVzIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlzdHJvIGZlYXR1cmVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbnkgbGliYy1zcGVjaWZpYyBmZWF0dXJlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGNvbnZlbmllbmNlIHZhcmlhYmxlIHRoYXQgZ2l2ZXMgeW91IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIGxpc3Qgb2YgZGlzdHJvIGZlYXR1cmVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhbnkKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIEMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgYSBjdXN0b20gZGlzdHJpYnV0aW9uLCB5b3UgbWlnaHQgZmluZCBpdAorICAgICAgICAgICAgICAgICAgICB1c2VmdWwgdG8gYmUgYWJsZSB0byByZXVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgd2l0aG91dCB0aGUgbmVlZCB0byB3cml0ZSBvdXQgdGhlIGZ1bGwgc2V0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVNfREVGQVVMVDwvZmlsZW5hbWU+IGZyb20gYQorICAgICAgICAgICAgICAgICAgICBjdXN0b20gZGlzdHJvIGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0RFRkFVTFR9ICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IG15ZmVhdHVyZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19GRUFUVVJFU19MSUJDJz48Z2xvc3N0ZXJtPkRJU1RST19GRUFUVVJFU19MSUJDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVNfTElCQ1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBkaXN0cm8gZmVhdHVyZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEMgbGlicmFyeSAobGliYykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBjb252ZW5pZW5jZSB2YXJpYWJsZSB0aGF0IHNwZWNpZmllcyB0aGUgbGlzdCBvZiBkaXN0cm8KKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgdGhlc2UgZmVhdHVyZXMgYXJlIHByZWZpeGVkIHdpdGggImxpYmMtIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhdCBkdXJpbmcgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgQyBsaWJyYXJ5IGl0c2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9fTkFNRSc+PGdsb3NzdGVybT5ESVNUUk9fTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRElTVFJPX05BTUVbZG9jXSA9ICJUaGUgbG9uZyBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvbmcgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLURJU1RST19WRVJTSU9OJz48Z2xvc3N0ZXJtPkRJU1RST19WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9fVkVSU0lPTltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ESVNUUk9PVkVSUklERVMnPjxnbG9zc3Rlcm0+RElTVFJPT1ZFUlJJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBESVNUUk9PVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uLiBCeSBkZWZhdWx0LCB0aGUgdmFyaWFibGUgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgdGhlIERJU1RSTyB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSB2YXJpYWJsZSBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPkRJU1RSTzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgdGhlIHZhcmlhYmxlIHRvIGFwcGx5IGFueSB2YXJpYWJsZSBvdmVycmlkZXMKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgYXMgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uIGFuZCBhcmUgbm90CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgaW4gPGZpbGVuYW1lPk9WRVJSSURFUzwvZmlsZW5hbWU+IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgc29tZSBvdGhlciBtZWFucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ETF9ESVInPjxnbG9zc3Rlcm0+RExfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBETF9ESVJbZG9jXSA9ICJUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBzdG9yZSBkb3dubG9hZHMuIEJ5IGRlZmF1bHQsIHRoZSBkaXJlY3RvcnkgaXMgJ2Rvd25sb2FkcycgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgY2VudHJhbCBkb3dubG9hZCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0bworICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3dubG9hZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiBnZXRzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIHN1aXRhYmxlIGZvciBtaXJyb3JpbmcgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IEdpdAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRhcmJhbGxzIG9mIEdpdCByZXBvc2l0b3JpZXMsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUyc+PGZpbGVuYW1lPkJCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyBkaXJlY3RvcnkgYnkgZGVmaW5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ETF9ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGlzIHNlbGYtbWFpbnRhaW5pbmcgYW5kIHlvdSBzaG91bGQgbm90IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgdG8gdG91Y2ggaXQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBkaXJlY3RvcnkgaXMgPGZpbGVuYW1lPmRvd25sb2FkczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICNETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVG8gc3BlY2lmeSBhIGRpZmZlcmVudCBkb3dubG9hZCBkaXJlY3RvcnksIHNpbXBseSByZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbW1lbnQgZnJvbSB0aGUgbGluZSBhbmQgcHJvdmlkZSB5b3VyIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIGEgZmlyc3QgYnVpbGQsIHRoZSBzeXN0ZW0gZG93bmxvYWRzIG1hbnkgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlIHRhcmJhbGxzIGZyb20gdmFyaW91cyB1cHN0cmVhbSBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRpbmcgY2FuIHRha2UgYSB3aGlsZSwgcGFydGljdWxhcmx5IGlmIHlvdXIgbmV0d29yaworICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGlzIHNsb3cuCisgICAgICAgICAgICAgICAgICAgIFRhcmJhbGxzIGFyZSBhbGwgc3RvcmVkIGluIHRoZSBkaXJlY3RvcnkgZGVmaW5lZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RExfRElSPC9maWxlbmFtZT4gYW5kIHRoZSBidWlsZCBzeXN0ZW0gbG9va3MgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgdG8gZmluZCBzb3VyY2UgdGFyYmFsbHMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB3aXBpbmcgYW5kIHJlYnVpbGRpbmcsIHlvdSBjYW4gcHJlc2VydmUgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHRvIHNwZWVkIHVwIHRoaXMgcGFydCBvZiBzdWJzZXF1ZW50CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzYWZlbHkgc2hhcmUgdGhpcyBkaXJlY3RvcnkgYmV0d2VlbiBtdWx0aXBsZSBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIHNhbWUgZGV2ZWxvcG1lbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gaG93IHRoZSBidWlsZCBwcm9jZXNzIGdldHMKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIHdoZW4gd29ya2luZyBiZWhpbmQgYSBmaXJld2FsbCBvciBwcm94eSBzZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGlzIHNwZWNpZmljIHF1ZXN0aW9uIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0naG93LWRvZXMtdGhlLXlvY3RvLXByb2plY3Qtb2J0YWluLXNvdXJjZS1jb2RlLWFuZC13aWxsLWl0LXdvcmstYmVoaW5kLW15LWZpcmV3YWxsLW9yLXByb3h5LXNlcnZlcic+RkFRPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1ET0NfQ09NUFJFU1MnPjxnbG9zc3Rlcm0+RE9DX0NPTVBSRVNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBET0NfQ09NUFJFU1NbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgdGhlIGNvbXByZXNzX2RvYyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBjb21wcmVzc2lvbiBwb2xpY3kgdXNlZCB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNvbXByZXNzZXMgbWFuIHBhZ2VzIGFuZCBpbmZvIHBhZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtY29tcHJlc3NfZG9jJz48ZmlsZW5hbWU+Y29tcHJlc3NfZG9jPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNldHMgdGhlIGNvbXByZXNzaW9uIHBvbGljeSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY29tcHJlc3NlcyBtYW4gcGFnZXMgYW5kIGluZm8KKyAgICAgICAgICAgICAgICAgICAgcGFnZXMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdXNlZCBpcyBneiAoZ3ppcCkuCisgICAgICAgICAgICAgICAgICAgIE90aGVyIHBvbGljaWVzIGF2YWlsYWJsZSBhcmUgeHogYW5kIGJ6Mi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHBvbGljaWVzIGFuZCBvbiBob3cgdG8gdXNlIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHNlZSB0aGUgY29tbWVudHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1lJz48dGl0bGU+RTwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FRklfUFJPVklERVInPjxnbG9zc3Rlcm0+RUZJX1BST1ZJREVSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFRklfUFJPVklERVJbZG9jXSA9ICJXaGVuIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcyAoaS5lLiB3aGVyZSBoZGRpbWcgb3Igdm1kayBpcyBpbiBJTUFHRV9GU1RZUEVTKSwgdGhlIEVGSV9QUk9WSURFUiB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIEVGSSBib290bG9hZGVyIHRvIHVzZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcyAoaS5lLiB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aGRkaW1nPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPnZtZGs8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4pLAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICB0aGUgRUZJIGJvb3Rsb2FkZXIgdG8gdXNlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAiZ3J1Yi1lZmkiLCBidXQgImd1bW1pYm9vdCIgY2FuIGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTic+PGdsb3NzdGVybT5FTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OW2RvY10gPSAiQ29udHJvbHMgd2hpY2ggbG9jYWxlcyBmb3IgZ2xpYmMgYXJlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLiBUaGUgdmFyaWFibGUgaXMgdXNlZnVsIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyA2NE1ieXRlcyBvZiBSQU0gb3IgbGVzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSB0aGF0IGNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCAodXNlZnVsIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyA2NE1ieXRlcworICAgICAgICAgICAgICAgICAgICBvZiBSQU0gb3IgbGVzcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVJSX1JFUE9SVF9ESVInPjxnbG9zc3Rlcm0+RVJSX1JFUE9SVF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVSUl9SRVBPUlRfRElSW2RvY10gPSAiV2hlbiB1c2VkIHdpdGggdGhlIHJlcG9ydC1lcnJvciBjbGFzcywgc3BlY2lmaWVzIHRoZSBwYXRoIHVzZWQgZm9yIHN0b3JpbmcgdGhlIGRlYnVnIGZpbGVzIGNyZWF0ZWQgYnkgdGhlIGVycm9yIHJlcG9ydGluZyB0b29sLCB3aGljaCBhbGxvd3MgeW91IHRvIHN1Ym1pdCBidWlsZCBlcnJvcnMgeW91IGVuY291bnRlciB0byBhIGNlbnRyYWwgZGF0YWJhc2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXJlcG9ydC1lcnJvcic+PGZpbGVuYW1lPnJlcG9ydC1lcnJvcjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgc3BlY2lmaWVzIHRoZSBwYXRoIHVzZWQgZm9yIHN0b3JpbmcgdGhlIGRlYnVnIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5nLXRoZS1lcnJvci1yZXBvcnRpbmctdG9vbCc+ZXJyb3IgcmVwb3J0aW5nIHRvb2w8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggYWxsb3dzIHlvdSB0byBzdWJtaXQgYnVpbGQgZXJyb3JzIHlvdSBlbmNvdW50ZXIgdG8gYQorICAgICAgICAgICAgICAgICAgICBjZW50cmFsIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1MT0dfRElSJz48ZmlsZW5hbWU+TE9HX0RJUjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59L2Vycm9yLXJlcG9ydDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+RVJSX1JFUE9SVF9ESVI8L2ZpbGVuYW1lPiB0byB0aGUgcGF0aAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0aGUgZXJyb3IgcmVwb3J0aW5nIHRvb2wgdG8gc3RvcmUgdGhlIGRlYnVnIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRVJSX1JFUE9SVF9ESVIgPSAiPHJlcGxhY2VhYmxlPnBhdGg8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVSUk9SX1FBJz48Z2xvc3N0ZXJtPkVSUk9SX1FBPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFUlJPUl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyBlcnJvcnMgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3Mgd2hvc2UgZmFpbHVyZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIGVycm9ycyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgY2hlY2tzIHlvdSBjYW4gY29udHJvbCB3aXRoIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYQ0xVREVfRlJPTV9XT1JMRCc+PGdsb3NzdGVybT5FWENMVURFX0ZST01fV09STEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYQ0xVREVfRlJPTV9XT1JMRFtkb2NdID0gIkRpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuIGJpdGJha2Ugd29ybGQpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIHdvcmxkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgd29ybGQgYnVpbGRzLCBCaXRCYWtlIGxvY2F0ZXMsIHBhcnNlcyBhbmQgYnVpbGRzIGFsbAorICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGZvdW5kIGluIGV2ZXJ5IGxheWVyIGV4cG9zZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYmxheWVycy5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUbyBleGNsdWRlIGEgcmVjaXBlIGZyb20gYSB3b3JsZCBidWlsZCB1c2luZyB0aGlzIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhlIHZhcmlhYmxlIHRvICIxIiBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIGFkZGVkIHRvIDxmaWxlbmFtZT5FWENMVURFX0ZST01fV09STEQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBtYXkgc3RpbGwgYmUgYnVpbHQgZHVyaW5nIGEgd29ybGQgYnVpbGQgaW4gb3JkZXIgdG8gc2F0aXNmeQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcy4KKyAgICAgICAgICAgICAgICAgICAgQWRkaW5nIGEgcmVjaXBlIHRvIDxmaWxlbmFtZT5FWENMVURFX0ZST01fV09STEQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgcmVjaXBlIGlzIG5vdCBleHBsaWNpdGx5IGFkZGVkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBsaXN0IG9mIGJ1aWxkIHRhcmdldHMgaW4gYSB3b3JsZCBidWlsZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFTkRQRSc+PGdsb3NzdGVybT5FWFRFTkRQRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURU5EUEVbZG9jXSA9ICJVc2VkIHdpdGggZmlsZSBhbmQgcGF0aG5hbWVzIHRvIGNyZWF0ZSBhIHByZWZpeCBmb3IgYSByZWNpcGUncyB2ZXJzaW9uIGJhc2VkIG9uIHRoZSByZWNpcGUncyBQRSB2YWx1ZS4gSWYgUEUgaXMgc2V0IGFuZCBncmVhdGVyIHRoYW4gemVybyBmb3IgYSByZWNpcGUsIEVYVEVORFBFIGJlY29tZXMgdGhhdCB2YWx1ZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBVc2VkIHdpdGggZmlsZSBhbmQgcGF0aG5hbWVzIHRvIGNyZWF0ZSBhIHByZWZpeCBmb3IgYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIGJhc2VkIG9uIHRoZSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC9saW5rPiB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlBFPC9maWxlbmFtZT4gaXMgc2V0IGFuZCBncmVhdGVyIHRoYW4gemVybyBmb3IgYSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGJlY29tZXMgdGhhdCB2YWx1ZSAoZS5nIGlmCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+IGlzIGVxdWFsIHRvICIxIiB0aGVuIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgIjFfIikuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcmVjaXBlJ3MgPGZpbGVuYW1lPlBFPC9maWxlbmFtZT4gaXMgbm90IHNldCAodGhlIGRlZmF1bHQpIG9yIGlzIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgICAgIHplcm8sIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGJlY29tZXMgIiIuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5TZWUgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVEVORFBLR1YnPjxnbG9zc3Rlcm0+RVhURU5EUEtHVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURU5EUEtHVltkb2NdID0gIlRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyB2YWx1ZSBpcyBub3JtYWxseSB1c2VkIHRvIGZpeCBhIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSB0byB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9uIG9mIGFub3RoZXIgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgc2FtZSByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0tYWRkaXRpb25hbC1tb2R1bGUgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBhcmUgaW50ZW5kZWQgdG8gZm9yY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbWFuYWdlciB0byB1cGdyYWRlIHRoZXNlIHR5cGVzIG9mIHBhY2thZ2VzIGluCisgICAgICAgICAgICAgICAgICAgIGxvY2stc3RlcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFUk5BTF9LRVJORUxfVE9PTFMnPjxnbG9zc3Rlcm0+RVhURVJOQUxfS0VSTkVMX1RPT0xTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRFUk5BTF9LRVJORUxfVE9PTFNbZG9jXSA9ICJJbmRpY2F0ZXMga2VybmVsIHRvb2xzIGFyZSBleHRlcm5hbCB0byB0aGUgc291cmNlIHRyZWUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQsIHRoZSA8ZmlsZW5hbWU+RVhURVJOQUxfS0VSTkVMX1RPT0xTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW5kaWNhdGVzIHRoYXQgdGhlc2UgdG9vbHMgYXJlIG5vdCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc291cmNlIHRyZWUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4ga2VybmVsIHRvb2xzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHRyZWUsIHRoZXkgYXJlCisgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZCBvdmVyIGFueSBleHRlcm5hbGx5IGluc3RhbGxlZCB0b29scy4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgPGZpbGVuYW1lPkVYVEVSTkFMX0tFUk5FTF9UT09MUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHByZWZlcgorICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGVkIGV4dGVybmFsIHRvb2xzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbC15b2N0byc+PGZpbGVuYW1lPmtlcm5lbC15b2N0bzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBpbiA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzPC9maWxlbmFtZT4gdG8gc2VlIGhvdworICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFUk5BTFNSQyc+PGdsb3NzdGVybT5FWFRFUk5BTFNSQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURVJOQUxTUkNbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSB0cmVlLCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZXh0ZXJuYWxzcmMnPjxmaWxlbmFtZT5leHRlcm5hbHNyYzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSB0cmVlLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldCwgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIHdoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB0byBsb2NhdGUgdW5wYWNrZWQgcmVjaXBlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjLmJiY2xhc3M8L2ZpbGVuYW1lPjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBmaW5kIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkaW5nLXNvZnR3YXJlLWZyb20tYW4tZXh0ZXJuYWwtc291cmNlJz5CdWlsZGluZyBTb2Z0d2FyZSBmcm9tIGFuIEV4dGVybmFsIFNvdXJjZTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRFUk5BTFNSQ19CVUlMRCc+PGdsb3NzdGVybT5FWFRFUk5BTFNSQ19CVUlMRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhURVJOQUxTUkNfQlVJTERbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcmVjaXBlJ3Mgc291cmNlIGNvZGUgaXMgYnVpbHQsIHdoaWNoIGlzIG91dHNpZGUgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1leHRlcm5hbHNyYyc+PGZpbGVuYW1lPmV4dGVybmFsc3JjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyBzb3VyY2UgY29kZSBpcyBidWlsdCwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQsIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUInPjxmaWxlbmFtZT5CPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyB3aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gbG9jYXRlIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leHRlcm5hbHNyYy5iYmNsYXNzPC9maWxlbmFtZT4sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dGVybmFsc3JjJz48ZmlsZW5hbWU+ZXh0ZXJuYWxzcmMuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIGZpbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGRpbmctc29mdHdhcmUtZnJvbS1hbi1leHRlcm5hbC1zb3VyY2UnPkJ1aWxkaW5nIFNvZnR3YXJlIGZyb20gYW4gRXh0ZXJuYWwgU291cmNlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX0FVVE9SRUNPTkYnPjxnbG9zc3Rlcm0+RVhUUkFfQVVUT1JFQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfQVVUT1JFQ09ORltkb2NdID0gIkV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBhdXRvcmVjb25mIGNvbW1hbmQsIHdoaWNoIGlzIGV4ZWN1dGVkIGR1cmluZyBkb19jb25maWd1cmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHJlY2lwZXMgaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB5b3UgY2FuIHVzZSA8ZmlsZW5hbWU+RVhUUkFfQVVUT1JFQ09ORjwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgZXh0cmEgb3B0aW9ucyB0byBwYXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b3JlY29uZjwvZmlsZW5hbWU+IGNvbW1hbmQgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICBleGVjdXRlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIi0tZXhjbHVkZT1hdXRvcG9pbnQiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9JTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBsaXN0aW5nIG1vcmUgdGhhbiBvbmUgZmVhdHVyZSwgc2VwYXJhdGUgdGhlbSB3aXRoCisgICAgICAgICAgICAgICAgICAgIGEgc3BhY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGNvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBpcyBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBhIHJlY2lwZSwKKyAgICAgICAgICAgICAgICAgICAgYmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBkbyBub3QuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIHByaW1hcnkgZmVhdHVyZXMgZnJvbSB3aXRoaW4gdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUsIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGZlYXR1cmVzIHlvdSBjYW4gYWRkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisiZGJnLXBrZ3MiIC0gQWRkcyAtZGJnIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzCisgICAgICAgICAgICAgaW5jbHVkaW5nIHN5bWJvbCBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nIGFuZAorICAgICAgICAgICAgIHByb2ZpbGluZy4KKworImRlYnVnLXR3ZWFrcyIgLSBNYWtlcyBhbiBpbWFnZSBzdWl0YWJsZSBmb3IgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWxsb3dzIHJvb3QgbG9naW5zIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgcGFzc3dvcmRzIGFuZCBlbmFibGVzIHBvc3QtaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgIGxvZ2dpbmcuIFNlZSB0aGUgJ2FsbG93LWVtcHR5LXBhc3N3b3JkJworICAgICAgICAgICAgICAgICBhbmQgJ3Bvc3QtaW5zdGFsbC1sb2dnaW5nJyBmZWF0dXJlcyBpbgorICAgICAgICAgICAgICAgICB0aGUgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1pbWFnZSc+SW1hZ2UgRmVhdHVyZXM8L2xpbms+IiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorCisiZGV2LXBrZ3MiIC0gQWRkcyAtZGV2IHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzLgorICAgICAgICAgICAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRldmVsb3AgYWdhaW5zdAorICAgICAgICAgICAgIHRoZSBsaWJyYXJpZXMgaW4gdGhlIGltYWdlLgorCisicmVhZC1vbmx5LXJvb3RmcyIgLSBDcmVhdGVzIGFuIGltYWdlIHdob3NlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0gaXMgcmVhZC1vbmx5LiBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjY3JlYXRpbmctYS1yZWFkLW9ubHktcm9vdC1maWxlc3lzdGVtJz5DcmVhdGluZyBhIFJlYWQtT25seSBSb290IEZpbGVzeXN0ZW08L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IE1hbnVhbCBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24KKworInRvb2xzLWRlYnVnIiAtIEFkZHMgZGVidWdnaW5nIHRvb2xzIHN1Y2ggYXMgZ2RiIGFuZAorICAgICAgICAgICAgICAgIHN0cmFjZS4KKworInRvb2xzLXByb2ZpbGUiIC0gQWRkcyBwcm9maWxpbmcgdG9vbHMgc3VjaCBhcyBvcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgIGV4bWFwLCBsdHRuZyBhbmQgdmFsZ3JpbmQgKHg4NiBvbmx5KS4KKworInRvb2xzLXNkayIgLSBBZGRzIGRldmVsb3BtZW50IHRvb2xzIHN1Y2ggYXMgZ2NjLCBtYWtlLAorICAgICAgICAgICAgICBwa2djb25maWcgYW5kIHNvIGZvcnRoLgorCisidG9vbHMtdGVzdGFwcHMiIC0gQWRkcyB1c2VmdWwgdGVzdGluZyB0b29scyBzdWNoIGFzCisgICAgICAgICAgICAgICAgICAgdHNfcHJpbnQsIGFwbGF5LCBhcmVjb3JkIGFuZCBzbworICAgICAgICAgICAgICAgICAgIGZvcnRoLgorCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgY29tcGxldGUgbGlzdCBvZiBpbWFnZSBmZWF0dXJlcyB0aGF0IHNoaXBzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9InJlZi1mZWF0dXJlcy1pbWFnZSI+SW1hZ2UgRmVhdHVyZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSB0aGF0IHNob3dzIGhvdyB0byBjdXN0b21pemUgeW91ciBpbWFnZSBieQorICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZ3Bva3ktZXh0ZW5kLWN1c3RvbWltYWdlLWltYWdlZmVhdHVyZXMnPkN1c3RvbWl6aW5nIEltYWdlcyBVc2luZyBDdXN0b20gPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX0lNQUdFQ01EJz48Z2xvc3N0ZXJtPkVYVFJBX0lNQUdFQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9JTUFHRUNNRFtkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBpbWFnZSBjcmVhdGlvbiBjb21tYW5kIHRoYXQgaGFzIGJlZW4gc3BlY2lmaWVkIGluIElNQUdFX0NNRC4gV2hlbiBzZXR0aW5nIHRoaXMgdmFyaWFibGUsIHlvdSBzaG91bGQgdXNlIGFuIG92ZXJyaWRlIGZvciB0aGUgYXNzb2NpYXRlZCB0eXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBjb21tYW5kIHRoYXQgaGFzIGJlZW4gc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9DTUQnPjxmaWxlbmFtZT5JTUFHRV9DTUQ8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFdoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlLCB5b3Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgIHVzZSBhbiBvdmVycmlkZSBmb3IgdGhlIGFzc29jaWF0ZWQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEVYVFJBX0lNQUdFQ01EX2V4dDMgPz0gIi1pIDQwOTYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9JTUFHRURFUEVORFMnPjxnbG9zc3Rlcm0+RVhUUkFfSU1BR0VERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9JTUFHRURFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0byBidWlsZCB0aGF0IGRvIG5vdCBwcm92aWRlIHBhY2thZ2VzIGZvciBpbnN0YWxsaW5nIGludG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4gVXNlIHRoaXMgdmFyaWFibGUgdG8gbGlzdCByZWNpcGVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBmaW5hbCBpbWFnZSwgYnV0IG5vdCBuZWVkZWQgaW4gdGhlIHJvb3QgZmlsZXN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcmVjaXBlcyB0byBidWlsZCB0aGF0IGRvIG5vdCBwcm92aWRlIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBpbnN0YWxsaW5nIGludG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIGEgcmVjaXBlIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBmaW5hbCBpbWFnZSBidXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIG5lZWRlZCBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPkVYVFJBX0lNQUdFREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIGxpc3QgdGhlc2UgcmVjaXBlcyBhbmQgdGh1cyBzcGVjaWZ5IHRoZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgICAgIEEgdHlwaWNhbCBleGFtcGxlIGlzIGEgcmVxdWlyZWQgYm9vdGxvYWRlciBpbiBhIG1hY2hpbmUgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWRkIHBhY2thZ2VzIHRvIHRoZSByb290IGZpbGVzeXN0ZW0sIHNlZSB0aGUgdmFyaW91cworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+KjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT4qPGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz5SUkVDT01NRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfT0VDTUFLRSc+PGdsb3NzdGVybT5FWFRSQV9PRUNNQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9PRUNNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBjbWFrZSBvcHRpb25zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgPGZpbGVuYW1lPmNtYWtlPC9maWxlbmFtZT4gb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxnbG9zc3Rlcm0+RVhUUkFfT0VDT05GPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9PRUNPTkZbZG9jXSA9ICJBZGRpdGlvbmFsIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIDxmaWxlbmFtZT5jb25maWd1cmU8L2ZpbGVuYW1lPiBzY3JpcHQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9PRU1BS0UnPjxnbG9zc3Rlcm0+RVhUUkFfT0VNQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBFWFRSQV9PRU1BS0VbZG9jXSA9ICJBZGRpdGlvbmFsIEdOVSBtYWtlIG9wdGlvbnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBHTlUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX09FU0NPTlMnPjxnbG9zc3Rlcm0+RVhUUkFfT0VTQ09OUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRVhUUkFfT0VTQ09OU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHNjb25zIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZSBzY29ucyBjb21tYW5kIGxpbmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zY29ucyc+PGZpbGVuYW1lPnNjb25zPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NvbnM8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRVhUUkFfUU1BS0VWQVJTX1BPU1QnPjxnbG9zc3Rlcm0+RVhUUkFfUU1BS0VWQVJTX1BPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX1FNQUtFVkFSU19QT1NUW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGFmdGVyIHRoZSAucHJvIGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1xbWFrZSonPjxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIG9yIG90aGVyIGNsYXNzZXMgdGhhdCBpbmhlcml0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1FWFRSQV9RTUFLRVZBUlNfUFJFJz48Z2xvc3N0ZXJtPkVYVFJBX1FNQUtFVkFSU19QUkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX1FNQUtFVkFSU19QUkVbZG9jXSA9ICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gcW1ha2Ugd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIHRoZSAucHJvIGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+IGZpbGUgbGlzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2l0aCByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcW1ha2UqJz48ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBvciBvdGhlciBjbGFzc2VzIHRoYXQgaW5oZXJpdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2VfYmFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUVYVFJBX1VTRVJTX1BBUkFNUyc+PGdsb3NzdGVybT5FWFRSQV9VU0VSU19QQVJBTVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEVYVFJBX1VTRVJTX1BBUkFNU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGV4dHJhdXNlcnMgY2xhc3MsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgaW1hZ2UgbGV2ZWwgdXNlciBhbmQgZ3JvdXAgb3BlcmF0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWV4dHJhdXNlcnMnPjxmaWxlbmFtZT5leHRyYXVzZXJzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIGltYWdlIGxldmVsIHVzZXIgYW5kIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSBtb3JlIGdsb2JhbCBtZXRob2Qgb2YgcHJvdmlkaW5nIHVzZXIgYW5kIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYXMgY29tcGFyZWQgdG8gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB3aGljaCB0aWVzIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb25zIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgc2V0IGxpc3Qgb2YgY29tbWFuZHMgeW91IGNhbiBjb25maWd1cmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5FWFRSQV9VU0VSU19QQVJBTVM8L2ZpbGVuYW1lPiBpcyBzaG93biBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dHJhdXNlcnM8L2ZpbGVuYW1lPiBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tbWFuZHMgbWFwIHRvIHRoZSBub3JtYWwgVW5peCBjb21tYW5kcyBvZiB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisgICAgICMgdXNlcmFkZCAtcCAnJyB0ZXN0ZXI7IFwKKyAgICAgIyBncm91cGFkZCBkZXZlbG9wZXJzOyBcCisgICAgICMgdXNlcmRlbCBub2JvZHk7IFwKKyAgICAgIyBncm91cGRlbCAtZyB2aWRlbzsgXAorICAgICAjIGdyb3VwbW9kIC1nIDEwMjAgZGV2ZWxvcGVyczsgXAorICAgICAjIHVzZXJtb2QgLXMgL2Jpbi9zaCB0ZXN0ZXI7IFwKKyAgICAgIyAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktZic+PHRpdGxlPkY8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+PGdsb3NzdGVybT5GRUFUVVJFX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGRUFUVVJFX1BBQ0tBR0VTW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiBXaGVuIHNldHRpbmcgdGhlIHZhbHVlLCBGRUFUVVJFX1BBQ0tBR0VTIHNob3VsZCBoYXZlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIGl0ZW0gYXMgYW4gb3ZlcnJpZGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GRUFUVVJFUyc+PGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHZhbHVlLCA8ZmlsZW5hbWU+RkVBVFVSRV9QQUNLQUdFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIGl0ZW0gYXMgYW4gb3ZlcnJpZGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGRUFUVVJFX1BBQ0tBR0VTX3dpZGdldCA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTE8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZTI8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGlmICJ3aWRnZXQiIHdlcmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT4sIDxyZXBsYWNlYWJsZT5wYWNrYWdlMTwvcmVwbGFjZWFibGU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cGFja2FnZTI8L3JlcGxhY2VhYmxlPiB3b3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZXMgaW5zdGFsbGVkIGJ5IGZlYXR1cmVzIGRlZmluZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPiBhcmUgb2Z0ZW4gcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLgorICAgICAgICAgICAgICAgICAgICAgICAgV2hpbGUgc2ltaWxhcmx5IG5hbWVkLCB5b3Ugc2hvdWxkIG5vdCBjb25mdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIGdyb3Vwcywgd2hpY2ggYXJlIGRpc2N1c3NlZCBlbHNld2hlcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknPjxnbG9zc3Rlcm0+RkVFRF9ERVBMT1lESVJfQkFTRV9VUkk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZFRURfREVQTE9ZRElSX0JBU0VfVVJJW2RvY10gPSAiQWxsb3cgdG8gc2VydmUgaXBrIGRlcGxveSBkaXJlY3RvcnkgYXMgYW4gYWQgaG9jIGZlZWQgKGJvZ29mZWVkKS4gU2V0IHRvIGJhc2UgVVJMIG9mIHRoZSBkaXJlY3RvcnkgYXMgZXhwb3J0ZWQgYnkgSFRUUC4gU2V0IG9mIGFkIGhvYyBmZWVkIGNvbmZpZ3Mgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gdGhlIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgYmFzZSBVUkwgb2YgdGhlIHNlcnZlciBhbmQgbG9jYXRpb24gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBkb2N1bWVudC1yb290IHRoYXQgcHJvdmlkZXMgdGhlIG1ldGFkYXRhIGFuZAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyByZXF1aXJlZCBieSBPUEtHIHRvIHN1cHBvcnQgcnVudGltZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgb2YgSVBLIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGRUVEX0RFUExPWURJUl9CQVNFX1VSSSA9ICJodHRwOi8vMTkyLjE2OC43LjEvQk9BUkQtZGlyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdSBhcmUgc2VydmluZyB5b3VyIHBhY2thZ2VzIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgSFRUUCBhbmQgeW91ciBkYXRhYmFzZXMgYXJlIGxvY2F0ZWQgaW4gYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPkJPQVJELWRpcjwvZmlsZW5hbWU+LCB3aGljaCBpcyB1bmRlcm5lYXRoCisgICAgICAgICAgICAgICAgICAgIHlvdXIgSFRUUCBzZXJ2ZXIncyBkb2N1bWVudC1yb290LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdlbmVyYXRlcyBhIHNldAorICAgICAgICAgICAgICAgICAgICBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB5b3UgaW4geW91ciB0YXJnZXQgdGhhdCB3b3JrCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGZlZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVMnPjxnbG9zc3Rlcm0+RklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTW2RvY10gPSAiVGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBhcmUgcGxhY2VkIGluIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSA8ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgcHJvdmlkZSBhCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZSBvdmVycmlkZSB0aGF0IGlkZW50aWZpZXMgdGhlIHJlc3VsdGluZyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVuLCBwcm92aWRlIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgb3IgcGF0aHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpZGVudGlmeSB0aGUgZmlsZXMgeW91IHdhbnQgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0aW5nIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU18ke1BOfSArPSAiJHtiaW5kaXJ9L215ZGlyMS8gJHtiaW5kaXJ9L215ZGlyMi9teWZpbGUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzcGVjaWZ5aW5nIHBhdGhzIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLCBpdCBpcyBnb29kIHByYWN0aWNlCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhcHByb3ByaWF0ZSBwYXRoIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHVzZSA8ZmlsZW5hbWU+JHtzeXNjb25mZGlyfTwvZmlsZW5hbWU+IHJhdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIDxmaWxlbmFtZT4vZXRjPC9maWxlbmFtZT4sIG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke2JpbmRpcn08L2ZpbGVuYW1lPiByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9iaW48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiB0aGVzZSB2YXJpYWJsZXMgYXQgdGhlIHRvcCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHNvbWUgb2YgdGhlIGZpbGVzIHlvdSBwcm92aWRlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFyZSBlZGl0YWJsZSBhbmQgeW91CisgICAgICAgICAgICAgICAgICAgIGtub3cgdGhleSBzaG91bGQgbm90IGJlIG92ZXJ3cml0dGVuIGR1cmluZyB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB1cGRhdGUgcHJvY2VzcyBieSB0aGUgUGFja2FnZSBNYW5hZ2VtZW50IFN5c3RlbSAoUE1TKSwgeW91CisgICAgICAgICAgICAgICAgICAgIGNhbiBpZGVudGlmeSB0aGVzZSBmaWxlcyBzbyB0aGF0IHRoZSBQTVMgd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlIHRoZW0uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTkZGSUxFUyc+PGZpbGVuYW1lPkNPTkZGSUxFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHRoZXNlIGZpbGVzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBQTVMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU19TT0xJQlNERVYnPjxnbG9zc3Rlcm0+RklMRVNfU09MSUJTREVWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGSUxFU19TT0xJQlNERVZbZG9jXSA9ICJEZWZpbmVzIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluayAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBmaWxlIHNwZWNpZmljYXRpb24gdG8gbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNPTElCU0RFVic+PGZpbGVuYW1lPlNPTElCU0RFVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIDxmaWxlbmFtZT5GSUxFU19TT0xJQlNERVY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgICAgICAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UuY29uZjwvZmlsZW5hbWU+IHNob3dzIGhvdyBpdCBpcyBzZXQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNfU09MSUJTREVWID89ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNFWFRSQVBBVEhTJz48Z2xvc3N0ZXJtPkZJTEVTRVhUUkFQQVRIUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNFWFRSQVBBVEhTW2RvY10gPSAiRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgICAgICAgICB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzCisgICAgICAgICAgICAgICAgICAgIGFuZCBhcHBlbmQgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yaWVzIEJpdEJha2UgdXNlcyB3aGVuIGl0IHByb2Nlc3NlcworICAgICAgICAgICAgICAgICAgICByZWNpcGVzIGFyZSBpbml0aWFsbHkgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGJ5IHVzaW5nIDxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVzdCBwcmFjdGljZXMgZGljdGF0ZSB0aGF0IHlvdSBhY2NvbXBsaXNoIHRoaXMgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+IGZyb20gd2l0aGluIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoYXQgeW91IHByZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gZmlyc3QgbG9va3MgZm9yIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGluIGEgZGlyZWN0b3J5IHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBleHRlbmRpbmcgPGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgc3VyZSB0byB1c2UgdGhlIGltbWVkaWF0ZSBleHBhbnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+Oj08L2ZpbGVuYW1lPikgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICBJbW1lZGlhdGUgZXhwYW5zaW9uIG1ha2VzIHN1cmUgdGhhdCBCaXRCYWtlIGV2YWx1YXRlcworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRISVNESVInPjxmaWxlbmFtZT5USElTRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgdGltZSB0aGUgZGlyZWN0aXZlIGlzIGVuY291bnRlcmVkIHJhdGhlciB0aGFuIGF0CisgICAgICAgICAgICAgICAgICAgICAgICBzb21lIGxhdGVyIHRpbWUgd2hlbiBleHBhbnNpb24gbWlnaHQgcmVzdWx0IGluIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIGZpbGVzIHlvdSBuZWVkLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWxzbywgaW5jbHVkZSB0aGUgdHJhaWxpbmcgc2VwYXJhdGluZyBjb2xvbgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGlmIHlvdSBhcmUgcHJlcGVuZGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0cmFpbGluZyBjb2xvbiBjaGFyYWN0ZXIgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZGlyZWN0aW5nIEJpdEJha2UgdG8gZXh0ZW5kIHRoZSBwYXRoIGJ5IHByZXBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHRvIHRoZSBzZWFyY2ggcGF0aC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbm90aGVyIGNvbW1vbiB1c2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgdGhlIGJ1aWxkIHN5c3RlbSBleHRlbmRzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gaW5jbHVkZSBhCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBuYW1lZCA8ZmlsZW5hbWU+ZmlsZXM8L2ZpbGVuYW1lPiB0aGF0IGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29ycmVzcG9uZGluZyBhcHBlbmQgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhIGZpbmFsIGV4YW1wbGUgdGhhdCBzcGVjaWZpY2FsbHkgYWRkcyB0aHJlZSBwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAicGF0aF8xOnBhdGhfMjpwYXRoXzM6IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IHByZXBlbmRpbmcgcGF0aHMgaW4gPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLCB5b3UgYWxsb3cgbXVsdGlwbGUgYXBwZW5kIGZpbGVzIHRoYXQgcmVzaWRlIGluCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBsYXllcnMgYnV0IGFyZSB1c2VkIGZvciB0aGUgc2FtZSByZWNpcGUgdG8KKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGx5IGV4dGVuZCB0aGUgcGF0aC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GSUxFU09WRVJSSURFUyc+PGdsb3NzdGVybT5GSUxFU09WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNPVkVSUklERVNbZG9jXSA9ICJBIHN1YnNldCBvZiBPVkVSUklERVMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcgRklMRVNQQVRILiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgc3Vic2V0IG9mIDxsaW5rIGxpbmtlbmQ9J3Zhci1PVkVSUklERVMnPjxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTUEFUSCc+PGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IG92ZXJyaWRlcyBhcmUgaGFuZGxlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyc+Qml0QmFrZSBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5GSUxFU09WRVJSSURFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGRlZmluZWQgYXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRklMRVNPVkVSUklERVMgPSAiJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfToke01BQ0hJTkVPVkVSUklERVN9OiR7RElTVFJPT1ZFUlJJREVTfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRG8gbm90IGhhbmQtZWRpdCB0aGUgPGZpbGVuYW1lPkZJTEVTT1ZFUlJJREVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlcyBtYXRjaCB1cCB3aXRoIGV4cGVjdGVkIG92ZXJyaWRlcyBhbmQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIGFuIGV4cGVjdGVkIG1hbm5lciBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNQQVRIJz48Z2xvc3N0ZXJtPkZJTEVTUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgRklMRVNQQVRIW2RvY10gPSAiVGhlIGRlZmF1bHQgc2V0IG9mIGRpcmVjdG9yaWVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yIHBhdGNoZXMgYW5kIGZpbGVzLiBJdCBpcyBkZWZpbmVkIGluIHRoZSBiYXNlLmJiY2xhc3MgY2xhc3MgZm91bmQgaW4gbWV0YS9jbGFzc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LiBEbyBub3QgaGFuZC1lZGl0IHRoZSBGSUxFU1BBVEggdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgc2V0IG9mIGRpcmVjdG9yaWVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yIHBhdGNoZXMgYW5kIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MsIEJpdEJha2Ugc2VhcmNoZXMgZWFjaCBkaXJlY3RvcnkgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IGluIHRoZSBzcGVjaWZpZWQgb3JkZXIgd2hlbgorICAgICAgICAgICAgICAgICAgICBsb29raW5nIGZvciBmaWxlcyBhbmQgcGF0Y2hlcyBzcGVjaWZpZWQgYnkgZWFjaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZTovLzwvZmlsZW5hbWU+IFVSSSBpbiBhIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgPGZpbGVuYW1lPmJhc2UuYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvdW5kIGluIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEZJTEVTUEFUSCA9ICIke0BiYXNlX3NldF9maWxlc3BhdGgoWyIke0ZJTEVfRElSTkFNRX0vJHtCUH0iLCBcCisgICAgICAgICIke0ZJTEVfRElSTkFNRX0vJHtCUE59IiwgIiR7RklMRV9ESVJOQU1FfS9maWxlcyJdLCBkKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3QgaGFuZC1lZGl0IHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGJ1aWxkIHN5c3RlbSB0byBsb29rIGluIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cywgZXh0ZW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkZJTEVTUEFUSDwvZmlsZW5hbWU+IHZhcmlhYmxlIGJ5IHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTRVhUUkFQQVRIUyc+PGZpbGVuYW1lPkZJTEVTRVhUUkFQQVRIUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgQmUgYXdhcmUgdGhhdCB0aGUgZGVmYXVsdCA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgZG8gbm90IG1hcCB0byBkaXJlY3RvcmllcyBpbiBjdXN0b20gbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIHdoZXJlIGFwcGVuZCBmaWxlcyAoPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhcmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdGhlIGJ1aWxkIHN5c3RlbSB0byBmaW5kIHBhdGNoZXMgb3IgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCByZXNpZGUgd2l0aCB5b3VyIGFwcGVuZCBmaWxlcywgeW91IG5lZWQgdG8gZXh0ZW5kCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT4gdmFyaWFibGUgYnkgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1GSUxFU0VYVFJBUEFUSFMnPjxmaWxlbmFtZT5GSUxFU0VYVFJBUEFUSFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRklMRVNZU1RFTV9QRVJNU19UQUJMRVMnPjxnbG9zc3Rlcm0+RklMRVNZU1RFTV9QRVJNU19UQUJMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZJTEVTWVNURU1fUEVSTVNfVEFCTEVTW2RvY10gPSAiQWxsb3dzIHlvdSB0byBkZWZpbmUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBhcyBwYXJ0IG9mIHlvdXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBhY2thZ2luZyBwcm9jZXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgb3duIGZpbGUgcGVybWlzc2lvbnMgc2V0dGluZ3MgdGFibGUgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB5b3VyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IG5lZWQgYSBjb25zaXN0ZW50IHNldCBvZiBjdXN0b20gcGVybWlzc2lvbnMgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgc2V0IG9mIGdyb3VwcyBhbmQgdXNlcnMgYWNyb3NzIGFuIGVudGlyZSB3b3JrIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGJlc3QgdG8gZG8gdGhpcyBpbiB0aGUgcGFja2FnZXMgdGhlbXNlbHZlcyBidXQgdGhpcyBpcyBub3QgYWx3YXlzCisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIGxvY2F0ZWQgaW4gdGhlIDxmaWxlbmFtZT5tZXRhL2ZpbGVzPC9maWxlbmFtZT4gZm9sZGVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjcmVhdGUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5nIHRhYmxlLCB5b3Ugc2hvdWxkIHBsYWNlIGl0IGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgb3IgdGhlIGRpc3RybydzIGxheWVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIHRoZSA8ZmlsZW5hbWU+RklMRVNZU1RFTV9QRVJNU19UQUJMRVM8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LCB0bworICAgICAgICAgICAgICAgICAgICBwb2ludCB0byB5b3VyIGN1c3RvbSA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gYSBzaW5nbGUgZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5nIHRhYmxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aHMgeW91IHNwZWNpZnkgdG8gdGhlc2UgZmlsZXMgbXVzdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGd1aWRhbmNlIG9uIGhvdyB0byBjcmVhdGUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICBleGFtaW5lIHRoZSBleGlzdGluZyA8ZmlsZW5hbWU+ZnMtcGVybXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRk9OVF9FWFRSQV9SREVQRU5EUyc+PGdsb3NzdGVybT5GT05UX0VYVFJBX1JERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBGT05UX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBydW50aW1lIGRlcGVuZGVuY2llcyBmb3IgZm9udCBwYWNrYWdlcy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnZm9udGNvbmZpZy11dGlscycuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1mb250Y2FjaGUnPjxmaWxlbmFtZT5mb250Y2FjaGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBydW50aW1lIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICBmb3IgZm9udCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5GT05UX0VYVFJBX1JERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJmb250Y29uZmlnLXV0aWxzIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1GT05UX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPkZPTlRfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZPTlRfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyBjb250YWluaW5nIGZvbnQgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGNhY2hlZCBieSBGb250Y29uZmlnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZm9udGNhY2hlJz48ZmlsZW5hbWU+Zm9udGNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIDxmaWxlbmFtZT5mb250Y2FjaGU8L2ZpbGVuYW1lPiBjbGFzcyBhc3N1bWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgZm9udHMgYXJlIGluIHRoZSByZWNpcGUncyBtYWluIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhpcyB2YXJpYWJsZSBpZiBmb250cyB5b3UgbmVlZCBhcmUgaW4gYSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYW4gdGhhdCBtYWluIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItRlVMTF9PUFRJTUlaQVRJT04nPjxnbG9zc3Rlcm0+RlVMTF9PUFRJTUlaQVRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEZVTExfT1BUSU1JWkFUSU9OW2RvY109ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhbiBvcHRpbWl6ZWQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzInLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQ0ZMQUdTJz5UQVJHRVRfQ0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+Q0ZMQUdTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHdoZW4gY29tcGlsaW5nIGFuIG9wdGltaXplZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgIi1PMiAtcGlwZSAke0RFQlVHX0ZMQUdTfSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1nJz48dGl0bGU+RzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HREInPjxnbG9zc3Rlcm0+R0RCPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHREJbZG9jXSA9ICJUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBHTlUgRGVidWdnZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biB0aGUgR05VIERlYnVnZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdJVERJUic+PGdsb3NzdGVybT5HSVRESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdJVERJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgR2l0IGNsb25lcyB3aWxsIGJlIHN0b3JlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGEgbG9jYWwgY29weSBvZiBhIEdpdCByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGlzIHN0b3JlZCB3aGVuIGl0IGlzIGNsb25lZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HTElCQ19HRU5FUkFURV9MT0NBTEVTJz48Z2xvc3N0ZXJtPkdMSUJDX0dFTkVSQVRFX0xPQ0FMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdMSUJDX0dFTkVSQVRFX0xPQ0FMRVNbZG9jXT0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBHTElCQyBsb2NhbGVzIHRvIGdlbmVyYXRlIHNob3VsZCB5b3Ugbm90IHdpc2ggZ2VuZXJhdGUgYWxsIExJQkMgbG9jYWxzLCB3aGljaCBjYW4gYmUgdGltZSBjb25zdW1pbmcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIEdMSUJDIGxvY2FsZXMgdG8gZ2VuZXJhdGUgc2hvdWxkIHlvdQorICAgICAgICAgICAgICAgICAgICBub3Qgd2lzaCBnZW5lcmF0ZSBhbGwgTElCQyBsb2NhbHMsIHdoaWNoIGNhbiBiZSB0aW1lCisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWluZy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugc3BlY2lmaWNhbGx5IHJlbW92ZSB0aGUgbG9jYWxlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZW5fVVMuVVRGLTg8L2ZpbGVuYW1lPiwgeW91IG11c3Qgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfTElOR1VBUyc+PGZpbGVuYW1lPklNQUdFX0xJTkdVQVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgPGZpbGVuYW1lPkdMSUJDX0dFTkVSQVRFX0xPQ0FMRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgYWxsIGxvY2FsZXMgYXJlIGdlbmVyYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyA9ICJlbl9HQi5VVEYtOCBlbl9VUy5VVEYtOCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdST1VQQUREX1BBUkFNJz48Z2xvc3N0ZXJtPkdST1VQQUREX1BBUkFNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUk9VUEFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgZ3JvdXAgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVzZXJhZGQnPjxmaWxlbmFtZT51c2VyYWRkPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+Z3JvdXBhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIGFkZCBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoZSA8ZmlsZW5hbWU+ZGJ1czwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItciBuZXRkZXYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBzdGFuZGFyZCBMaW51eCBzaGVsbCBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncm91cGFkZDwvZmlsZW5hbWU+LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvZ3JvdXBhZGQnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdST1VQTUVNU19QQVJBTSc+PGdsb3NzdGVybT5HUk9VUE1FTVNfUEFSQU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdST1VQTUVNU19QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwbWVtcyBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+PGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIDxmaWxlbmFtZT5ncm91cG1lbXM8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHN0YW5kYXJkIExpbnV4IHNoZWxsIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdyb3VwbWVtczwvZmlsZW5hbWU+LCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzgvZ3JvdXBtZW1zJz48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUlVCX0dGWFNFUklBTCc+PGdsb3NzdGVybT5HUlVCX0dGWFNFUklBTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgR1JVQl9HRlhTRVJJQUxbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSB0byBoYXZlIGdyYXBoaWNzIGFuZCBzZXJpYWwgaW4gdGhlIGJvb3QgbWVudS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSB0byBoYXZlCisgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzIGFuZCBzZXJpYWwgaW4gdGhlIGJvb3QgbWVudS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRvIGVuYWJsZSBncmFwaGljcyBhbmQgc2VyaWFsCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBtZW51LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUlVCX09QVFMnPjxnbG9zc3Rlcm0+R1JVQl9PUFRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUlVCX09QVFNbZG9jXSA9ICJBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBHTlUgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyIChHUlVCKSBjb25maWd1cmF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIEdOVSBHUmFuZCBVbmlmaWVkCisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXIgKEdSVUIpIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFVzZSBhIHNlbWktY29sb24gY2hhcmFjdGVyICg8ZmlsZW5hbWU+OzwvZmlsZW5hbWU+KSB0bworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBtdWx0aXBsZSBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkdSVUJfT1BUUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HUlVCX1RJTUVPVVQnPjxnbG9zc3Rlcm0+R1JVQl9USU1FT1VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHUlVCX1RJTUVPVVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRpbWVvdXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBMQUJFTCBpbiB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxBQkVMPC9maWxlbmFtZT4gaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkCisgICAgICAgICAgICAgICAgICAgIEJvb3Rsb2FkZXIgKEdSVUIpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPkdSVUJfVElNRU9VVDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1HVEtJTU1PRFVMRVNfUEFDS0FHRVMnPjxnbG9zc3Rlcm0+R1RLSU1NT0RVTEVTX1BBQ0tBR0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVEtJTU1PRFVMRVNfUEFDS0FHRVNbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGd0ay1pbW1vZHVsZXMtY2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIEdUSysgaW5wdXQgbWV0aG9kIG1vZHVsZXMgYmVpbmcgaW5zdGFsbGVkIHdoZW4gdGhlIG1vZHVsZXMgYXJlIGluIHBhY2thZ2VzIG90aGVyIHRoYW4gdGhlIG1haW4gcGFja2FnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWd0ay1pbW1vZHVsZXMtY2FjaGUnPjxmaWxlbmFtZT5ndGstaW1tb2R1bGVzLWNhY2hlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZQorICAgICAgICAgICAgICAgICAgICBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGJlaW5nIGluc3RhbGxlZCB3aGVuIHRoZSBtb2R1bGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1VNTUlCT09UX0NGRyc+PGdsb3NzdGVybT5HVU1NSUJPT1RfQ0ZHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVU1NSUJPT1RfQ0ZHW2RvY10gPSAiV2hlbiBFRklfUFJPVklERVIgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUgR1VNTUlCT09UX0NGRyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IHNob3VsZCBiZSB1c2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1VNTUlCT09UX0NGRzwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGUgPGZpbGVuYW1lPkdVTU1JQk9PVF9DRkc8L2ZpbGVuYW1lPiBhcworICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEdVTU1JQk9PVF9DRkcgPz0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVMnPlM8L2xpbms+fS9sb2FkZXIuY29uZiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gR3VtbWlib290LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9ndW1taWJvb3QvJz5HdW1taWJvb3QgZG9jdW1lbnRhdGlvbjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUdVTU1JQk9PVF9FTlRSSUVTJz48Z2xvc3N0ZXJtPkdVTU1JQk9PVF9FTlRSSUVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBHVU1NSUJPT1RfRU5UUklFU1tkb2NdID0gIldoZW4gRUZJX1BST1ZJREVSIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlIEdVTU1JQk9PVF9FTlRSSUVTIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgZW50cnkgZmlsZXMgKCouY29uZikgdG8gYmUgaW5zdGFsbGVkIGNvbnRhaW5pbmcgb25lIGJvb3QgZW50cnkgcGVyIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRUZJX1BST1ZJREVSJz48ZmlsZW5hbWU+RUZJX1BST1ZJREVSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byAiZ3VtbWlib290IiwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HVU1NSUJPT1RfRU5UUklFUzwvZmlsZW5hbWU+IHZhcmlhYmxlIHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICBhIGxpc3Qgb2YgZW50cnkgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4qLmNvbmY8L2ZpbGVuYW1lPikgdG8gYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgb25lIGJvb3QgZW50cnkgcGVyIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGUgPGZpbGVuYW1lPkdVTU1JQk9PVF9FTlRSSUVTPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHVU1NSUJPT1RfRU5UUklFUyA/PSAiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBHdW1taWJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2d1bW1pYm9vdC8nPkd1bW1pYm9vdCBkb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItR1VNTUlCT09UX1RJTUVPVVQnPjxnbG9zc3Rlcm0+R1VNTUlCT09UX1RJTUVPVVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEdVTU1JQk9PVF9USU1FT1VUW2RvY10gPSAiV2hlbiBFRklfUFJPVklERVIgaXMgc2V0IHRvICJndW1taWJvb3QiLCB0aGUgR1VNTUlCT09UX1RJTUVPVVQgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBib290IG1lbnUgdGltZW91dCBpbiBzZWNvbmRzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVGSV9QUk9WSURFUic+PGZpbGVuYW1lPkVGSV9QUk9WSURFUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gImd1bW1pYm9vdCIsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R1VNTUlCT09UX1RJTUVPVVQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBzcGVjaWZpZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJvb3QgbWVudSB0aW1lb3V0IGluIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ndW1taWJvb3QnPjxmaWxlbmFtZT5ndW1taWJvb3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGUgPGZpbGVuYW1lPkdVTU1JQk9PVF9USU1FT1VUPC9maWxlbmFtZT4gYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBHVU1NSUJPT1RfVElNRU9VVCA/PSAiMTAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIEd1bW1pYm9vdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290Lyc+R3VtbWlib290IGRvY3VtZW50YXRpb248L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktaCc+PHRpdGxlPkg8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9NRVBBR0UnPjxnbG9zc3Rlcm0+SE9NRVBBR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPTUVQQUdFW2RvY10gPSAiV2Vic2l0ZSB3aGVyZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb2Z0d2FyZSB0aGUgcmVjaXBlIGlzIGJ1aWxkaW5nIGNhbiBiZSBmb3VuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfQVJDSCc+PGdsb3NzdGVybT5IT1NUX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEhPU1RfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQVJDSC4iCisKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBub3JtYWxseQorICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgbWFueQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlIGFzIHRoZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgaXMgY29uZmlndXJhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFybQorICAgICBpNTg2CisgICAgIHg4Nl82NAorICAgICBwb3dlcnBjCisgICAgIHBvd2VycGM2NAorICAgICBtaXBzCisgICAgIG1pcHNlbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9DQ19BUkNIJz48Z2xvc3N0ZXJtPkhPU1RfQ0NfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9DQ19BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQ0NfQVJDSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgQyBjb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpbml0aWFsaXphdGlvbiBmb3IgPGZpbGVuYW1lPkhPU1RfQ0NfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmllcyBkZXBlbmRpbmcgb24gd2hhdCBpcyBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0NDX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQ0NfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQ0NfQVJDSDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEU0RLX0NDX0FSQ0g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIGFuIFNESyAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGs8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSE9TVF9PUyc+PGdsb3NzdGVybT5IT1NUX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT1NUX09TW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBvcGVyYXRpbmcgc3lzdGVtLiBOb3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgVEFSR0VUX09TLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW0sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX09TJz48ZmlsZW5hbWU+VEFSR0VUX09TPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgY2FuIGJlIHNldCB0byAibGludXgiIGZvciA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPi1iYXNlZCBzeXN0ZW1zIGFuZAorICAgICAgICAgICAgICAgICAgICB0byAibGludXgtdWNsaWJjIiBmb3IgPGZpbGVuYW1lPnVjbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgQVJNL0VBQkkgdGFyZ2V0cywgdGhlcmUgYXJlIGFsc28gImxpbnV4LWdudWVhYmkiIGFuZAorICAgICAgICAgICAgICAgICAgICAibGludXgtdWNsaWJjLWdudWVhYmkiIHZhbHVlcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX1BSRUZJWCc+PGdsb3NzdGVybT5IT1NUX1BSRUZJWDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MgY29tcGlsZSB0b29sY2hhaW4uIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9QUkVGSVguIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwcmVmaXggZm9yIHRoZSBjcm9zcy1jb21waWxlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkhPU1RfUFJFRklYPC9maWxlbmFtZT4gaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUhPU1RfU1lTJz48Z2xvc3N0ZXJtPkhPU1RfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBIT1NUX1NZU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aXRoIHRoZSBidWlsZCBpcyBvY2N1cnJpbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aGljaCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhPU1RfQVJDSCc+PGZpbGVuYW1lPkhPU1RfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUhPU1RfVkVORE9SJz48ZmlsZW5hbWU+SE9TVF9WRU5ET1I8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSE9TVF9PUyc+PGZpbGVuYW1lPkhPU1RfT1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBkbyBub3QgbmVlZCB0byBzZXQgdGhlIHZhcmlhYmxlIHlvdXJzZWxmLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZXNlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5HaXZlbiBhIG5hdGl2ZSByZWNpcGUgb24gYSAzMi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODYgbWFjaGluZSBydW5uaW5nIExpbnV4LCB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaTY4Ni1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2l2ZW4gYSByZWNpcGUgYmVpbmcgYnVpbHQgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUtZW5kaWFuIE1JUFMgdGFyZ2V0IHJ1bm5pbmcgTGludXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIG1pZ2h0IGJlICJtaXBzZWwtbGludXgiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1IT1NUX1ZFTkRPUic+PGdsb3NzdGVybT5IT1NUX1ZFTkRPUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSE9TVF9WRU5ET1JbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdmVuZG9yLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfVkVORE9SLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdmVuZG9yLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SE9TVF9WRU5ET1I8L2ZpbGVuYW1lPiBpcyBub3JtYWxseSB0aGUgc2FtZSBhcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX1BSRUZJWCc+PGZpbGVuYW1lPlRBUkdFVF9WRU5ET1I8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWknPjx0aXRsZT5JPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX0RJU0FCTEVEJz48Z2xvc3N0ZXJtPklDRUNDX0RJU0FCTEVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJQ0VDQ19ESVNBQkxFRFtkb2NdID0gIkRpc2FibGVzIG9yIGVuYWJsZXMgdGhlIGljZWNjIChJY2VjcmVhbSkgZnVuY3Rpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGlzYWJsZXMgb3IgZW5hYmxlcyB0aGUgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgKEljZWNyZWFtKSBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBmdW5jdGlvbiBhbmQgYmVzdCBwcmFjdGljZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHVzaW5nIHRoaXMgdmFyaWFibGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWljZWNjJz48ZmlsZW5hbWU+aWNlY2MuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZGlzYWJsZXMgdGhlIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElDRUNDX0RJU0FCTEVEID8/PSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgdGhlIGZ1bmN0aW9uLCBzZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSUNFQ0NfRElTQUJMRUQgPSAiIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSUNFQ0NfRU5WX0VYRUMnPjxnbG9zc3Rlcm0+SUNFQ0NfRU5WX0VYRUM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX0VOVl9FWEVDW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB0aGF0IHlvdSBwcm92aWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB0aGUgPGZpbGVuYW1lPmljZWNjLWNyZWF0ZS1lbnY8L2ZpbGVuYW1lPiBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgdGhhdCB5b3UgcHJvdmlkZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3QgcG9pbnQgdG8gYSBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgZGVmYXVsdCBzY3JpcHQgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIDxmaWxlbmFtZT5pY2VjYy1jcmVhdGUtZW52LmJiPC9maWxlbmFtZT4gcmVjaXBlLAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kIG5vdCB0aGUgb25lIHRoYXQgY29tZXMgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JQ0VDQ19QQVJBTExFTF9NQUtFJz48Z2xvc3N0ZXJtPklDRUNDX1BBUkFMTEVMX01BS0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1BBUkFMTEVMX01BS0VbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgZG9fY29tcGlsZSB0YXNrIHRoYXQgc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgdGhhdCBzcGVjaWZ5IHBhcmFsbGVsIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHVzdWFsbHkgdGFrZXMgdGhlIGZvcm0gb2YKKyAgICAgICAgICAgICAgICAgICAgIi1qIDxyZXBsYWNlYWJsZT54PC9yZXBsYWNlYWJsZT4iLCB3aGVyZQorICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+IHJlcHJlc2VudHMgdGhlIG1heGltdW0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHBhcmFsbGVsIHRocmVhZHMgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjYW4KKyAgICAgICAgICAgICAgICAgICAgcnVuLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIHBhc3NlZCBhZmZlY3QgYnVpbGRzIG9uIGFsbCBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcyBvbiB0aGUgbmV0d29yaywgd2hpY2ggYXJlIG1hY2hpbmVzIHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aWNlY2NkPC9maWxlbmFtZT4gZGFlbW9uLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdXIgZW5hYmxlZCBtYWNoaW5lcyBzdXBwb3J0IG11bHRpcGxlIGNvcmVzLAorICAgICAgICAgICAgICAgICAgICBjb21pbmcgdXAgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcworICAgICAgICAgICAgICAgICAgICB0aGF0IGdpdmVzIHlvdSB0aGUgYmVzdCBwZXJmb3JtYW5jZSBjb3VsZCB0YWtlIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgZXhwZXJpbWVudGF0aW9uIHNpbmNlIG1hY2hpbmUgc3BlZWQsIG5ldHdvcmsgbGFnLAorICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgbWVtb3J5LCBhbmQgZXhpc3RpbmcgbWFjaGluZSBsb2FkcyBjYW4gYWxsCisgICAgICAgICAgICAgICAgICAgIGFmZmVjdCBidWlsZCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHVubGlrZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGVyZSBpcyBubyBydWxlLW9mLXRodW1iIGZvciBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JQ0VDQ19QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4gdG8gYWNoaWV2ZQorICAgICAgICAgICAgICAgICAgICBvcHRpbWFsIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHNldCA8ZmlsZW5hbWU+SUNFQ0NfUEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgc3lzdGVtIGRvZXMgbm90IHVzZSBpdCAoaS5lLiB0aGUgc3lzdGVtIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGRldGVjdCBhbmQgYXNzaWduIHRoZSBudW1iZXIgb2YgY29yZXMgYXMgaXMgZG9uZSB3aXRoCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1BBVEgnPjxnbG9zc3Rlcm0+SUNFQ0NfUEFUSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUgaWNlY2MgYmluYXJ5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgPGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT4gYmluYXJ5LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBkb2VzIG5vdCBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgdGhpcyB2YXJpYWJsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWljZWNjJz48ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYXR0ZW1wdHMgdG8gZGVmaW5lIGl0IGJ5IGxvY2F0aW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pY2VjYzwvZmlsZW5hbWU+IHVzaW5nIDxmaWxlbmFtZT53aGljaDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1VTRVJfQ0xBU1NfQkwnPjxnbG9zc3Rlcm0+SUNFQ0NfVVNFUl9DTEFTU19CTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfVVNFUl9DTEFTU19CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcyB1c2VyIGNsYXNzZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGxpc3QgY2xhc3NlcyB1c2luZyB0aGlzIHZhcmlhYmxlLCB5b3UgYXJlCisgICAgICAgICAgICAgICAgICAgICJibGFja2xpc3RpbmciIHRoZW0gZnJvbSBkaXN0cmlidXRlZCBjb21waWxhdGlvbiBhY3Jvc3MKKyAgICAgICAgICAgICAgICAgICAgcmVtb3RlIGhvc3RzLgorICAgICAgICAgICAgICAgICAgICBBbnkgY2xhc3NlcyB5b3UgbGlzdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFuZCBjb21waWxlZAorICAgICAgICAgICAgICAgICAgICBsb2NhbGx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlDRUNDX1VTRVJfUEFDS0FHRV9CTCc+PGdsb3NzdGVybT5JQ0VDQ19VU0VSX1BBQ0tBR0VfQkw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElDRUNDX1VTRVJfUEFDS0FHRV9CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pY2VjYyc+PGZpbGVuYW1lPmljZWNjPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGxpc3QgcGFja2FnZXMgdXNpbmcgdGhpcyB2YXJpYWJsZSwgeW91IGFyZQorICAgICAgICAgICAgICAgICAgICAiYmxhY2tsaXN0aW5nIiB0aGVtIGZyb20gZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gYWNyb3NzCisgICAgICAgICAgICAgICAgICAgIHJlbW90ZSBob3N0cy4KKyAgICAgICAgICAgICAgICAgICAgQW55IHBhY2thZ2VzIHlvdSBsaXN0IHdpbGwgYmUgZGlzdHJpYnV0ZWQgYW5kIGNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgIGxvY2FsbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSUNFQ0NfVVNFUl9QQUNLQUdFX1dMJz48Z2xvc3N0ZXJtPklDRUNDX1VTRVJfUEFDS0FHRV9XTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSUNFQ0NfVVNFUl9QQUNLQUdFX1dMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB1c2UgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSB0aGF0IHlvdSB3YW50IHRvIGZvcmNlIHJlbW90ZSBkaXN0cmlidXRlZCBjb21waWxhdGlvbiBvbiB1c2luZyB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgdXNlIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0aGF0IHlvdSB3YW50IHRvIGZvcmNlIHJlbW90ZSBkaXN0cmlidXRlZAorICAgICAgICAgICAgICAgICAgICBjb21waWxhdGlvbiBvbiB1c2luZyB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWljZWNjJz48ZmlsZW5hbWU+aWNlY2M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9CQVNFTkFNRSc+PGdsb3NzdGVybT5JTUFHRV9CQVNFTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfQkFTRU5BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byB0aGUgcmVjaXBlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9CT09UX0ZJTEVTJz48Z2xvc3N0ZXJtPklNQUdFX0JPT1RfRklMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0JPT1RfRklMRVNbZG9jXSA9ICJXaGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIGZyb20gJHtERVBMT1lfRElSX0lNQUdFfSB0byBwbGFjZSBpbiBib290IHBhcnRpdGlvbi4gRW50cmllcyB3aWxsIGJlIGluc3RhbGxlZCB1bmRlciBhIHNhbWUgbmFtZSBhcyB0aGUgc291cmNlIGZpbGUuIFRvIGNoYW5nZSB0aGUgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBwYXNzIGEgZGVzaXJlZCBuYW1lIGFmdGVyIGEgc2VtaWNvbG9uIChlZy4gdS1ib290LmltZzt1Ym9vdCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBpbnN0YWxsZWQgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgYm9vdCBwYXJ0aXRpb24gd2hlbiBwcmVwYXJpbmcgYW4gaW1hZ2UgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWM8L2ZpbGVuYW1lPiB0b29sIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ib290aW1nLXBhcnRpdGlvbjwvZmlsZW5hbWU+IHNvdXJjZQorICAgICAgICAgICAgICAgICAgICBwbHVnaW4uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBmaWxlcyBhcmUgaW5zdGFsbGVkIHVuZGVyCisgICAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoZSBpbnN0YWxsZWQgbmFtZSwgc2VwYXJhdGUgaXQgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgbmFtZSB3aXRoIGEgc2VtaS1jb2xvbiAoOykuCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBmaWxlcyBuZWVkIHRvIGJlIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUExPWV9ESVJfSU1BR0UnPjxmaWxlbmFtZT5ERVBMT1lfRElSX0lNQUdFPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgorICAgICBJTUFHRV9CT09UX0ZJTEVTID0gInUtYm9vdC5pbWcgdUltYWdlO2tlcm5lbCIKKyAgICAgSU1BR0VfQk9PVF9GSUxFUyA9ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9ICR7S0VSTkVMX0lNQUdFVFlQRX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgc291cmNlIGZpbGVzIGNhbiBiZSBwaWNrZWQgdXAgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgYSBnbG9iIHBhdHRlcm4uCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgd2lsbCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGJhc2UgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgVG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgZGlyZWN0b3J5IHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGxvY2F0aW9uLCBwYXNzIGl0cyBuYW1lIGFmdGVyIGEgc2VtaS1jb2xvbgorICAgICAgICAgICAgICAgICAgICAoOykuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHR3byBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9Im1vbm9zcGFjZWQiPgorICAgICBJTUFHRV9CT09UX0ZJTEVTID0gImJjbTI4MzUtYm9vdGZpbGVzLyoiCisgICAgIElNQUdFX0JPT1RfRklMRVMgPSAiYmNtMjgzNS1ib290ZmlsZXMvKjtib290LyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgZXhhbXBsZSBpbnN0YWxscyBhbGwgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtERVBMT1lfRElSX0lNQUdFfS9iY20yODM1LWJvb3RmaWxlczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHJvb3Qgb2YgdGhlIHRhcmdldCBwYXJ0aXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBpbnN0YWxscyB0aGUgc2FtZSBmaWxlcyBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJvb3Q8L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgcGFydGl0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0NMQVNTRVMnPjxnbG9zc3Rlcm0+SU1BR0VfQ0xBU1NFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIHRoYXQgYWxsIGltYWdlcyBzaG91bGQgaW5oZXJpdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgdXNlIHRoaXMgdmFyaWFibGUgdG8gc3BlY2lmeSB0aGUgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHRoYXQgcmVnaXN0ZXIgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBpbWFnZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY3JlYXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIDxmaWxlbmFtZT5JTUFHRV9DTEFTU0VTPC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlX3R5cGVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IG9yIGluIGEgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3M8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0NNRCc+PGdsb3NzdGVybT5JTUFHRV9DTUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0NNRFtkb2NdID0gIlNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGltYWdlIGZpbGUgZm9yIGEgc3BlY2lmaWMgaW1hZ2UgdHlwZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIHNldCBzZXQgaW4gSU1BR0VfRlNUWVBFUywgKGUuZy4gZXh0MywgYnRyZnMsIGFuZCBzbyBmb3J0aCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgaW1hZ2UgZmlsZSBmb3IgYQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyBpbWFnZSB0eXBlLCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgc2V0CisgICAgICAgICAgICAgICAgICAgIHNldCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5leHQzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idHJmczwvZmlsZW5hbWU+LCBhbmQgc28gZm9ydGgpLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhpcyB2YXJpYWJsZSwgeW91IHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgYW4gb3ZlcnJpZGUgZm9yIHRoZSBhc3NvY2lhdGVkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9DTURfamZmczIgPSAibWtmcy5qZmZzMiAtLXJvb3Q9JHtJTUFHRV9ST09URlN9IFwKKyAgICAgICAgLS1mYWtldGltZSAtLW91dHB1dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmpmZnMyIFwKKyAgICAgICAgJHtFWFRSQV9JTUFHRUNNRH0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHR5cGljYWxseSBkbyBub3QgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgeW91IGFyZSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcgaW1hZ2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgZXhhbXBsZXMgb24gaG93IHRvIHNldCB0aGlzIHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWltYWdlX3R5cGVzJz48ZmlsZW5hbWU+aW1hZ2VfdHlwZXM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZmlsZSwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfREVWSUNFX1RBQkxFUyc+PGdsb3NzdGVybT5JTUFHRV9ERVZJQ0VfVEFCTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ERVZJQ0VfVEFCTEVTW2RvY10gPSAiU3BlY2lmaWVzIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQgY29udGFpbiBjdXN0b20gZGV2aWNlIHRhYmxlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG1ha2VkZXZzIGNvbW1hbmQgYXMgcGFydCBvZiBjcmVhdGluZyBhbiBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgb25lIG9yIG1vcmUgZmlsZXMgdGhhdCBjb250YWluIGN1c3RvbSBkZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgdGFibGVzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2VkZXZzPC9maWxlbmFtZT4gY29tbWFuZCBhcyBwYXJ0IG9mIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgICAgIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmaWxlcyBsaXN0IGJhc2ljIGRldmljZSBub2RlcyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIHVuZGVyIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gd2l0aGluIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPklNQUdFX0RFVklDRV9UQUJMRVM8L2ZpbGVuYW1lPiBpcyBub3Qgc2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0PC9maWxlbmFtZT4gaXMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCwgd2hpY2ggaXMgbG9jYXRlZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZGV0YWlscyBvbiBob3cgeW91IHNob3VsZCB3cml0ZSBkZXZpY2UgdGFibGUgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIHNlZSA8ZmlsZW5hbWU+bWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhcyBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPklNQUdFX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBwcmltYXJ5IGxpc3Qgb2YgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwcmltYXJ5IGxpc3Qgb2YgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGZyb20geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUsIHdoaWNoIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBiZXN0IHByYWN0aWNlcyBkaWN0YXRlIHRoYXQgeW91IGRvIG5vdC4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUbyBlbmFibGUgZXh0cmEgZmVhdHVyZXMgZnJvbSBvdXRzaWRlIHRoZSBpbWFnZSByZWNpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX0lNQUdFX0ZFQVRVUkVTJz5FWFRSQV9JTUFHRV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYSBsaXN0IG9mIGltYWdlIGZlYXR1cmVzIHRoYXQgc2hpcHMgd2l0aCB0aGUgWW9jdG8KKyAgICAgICAgICAgICAgICAgICAgUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0icmVmLWZlYXR1cmVzLWltYWdlIj5JbWFnZSBGZWF0dXJlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIGN1c3RvbWl6ZSB5b3VyIGltYWdlIGJ5CisgICAgICAgICAgICAgICAgICAgIHVzaW5nIHRoaXMgdmFyaWFibGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3VzaW5ncG9reS1leHRlbmQtY3VzdG9taW1hZ2UtaW1hZ2VmZWF0dXJlcyc+Q3VzdG9taXppbmcgSW1hZ2VzIFVzaW5nIEN1c3RvbSA8ZmlsZW5hbWU+SU1BR0VfRkVBVFVSRVM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPkVYVFJBX0lNQUdFX0ZFQVRVUkVTPC9maWxlbmFtZT48L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfRlNUWVBFUyc+PGdsb3NzdGVybT5JTUFHRV9GU1RZUEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9GU1RZUEVTW2RvY10gPSAiRm9ybWF0cyBvZiByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZm9ybWF0cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgYnVpbGQgd2hlbiBjcmVhdGluZyB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc2V0dGluZyA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbXMgdXNpbmcgdHdvIGZvcm1hdHM6IDxmaWxlbmFtZT4uZXh0MzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+LnRhci5iejI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9GU1RZUEVTID0gImV4dDMgdGFyLmJ6MiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGZvcm1hdHMgZnJvbSB3aGljaAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNob29zZSwgc2VlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9UWVBFUyc+PGZpbGVuYW1lPklNQUdFX1RZUEVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYWRkICJsaXZlIiB0byA8ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluc2lkZSBhbiBpbWFnZSByZWNpcGUsIGJlIHN1cmUgdGhhdCB5b3UgZG8gc28gcHJpb3IgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICJpbmhlcml0IGltYWdlIiBsaW5lIG9mIHRoZSByZWNpcGUgb3IgdGhlIGxpdmUgaW1hZ2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICBub3QgYnVpbGQuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIER1ZSB0byB0aGUgd2F5IHRoaXMgdmFyaWFibGUgaXMgcHJvY2Vzc2VkLCBpdCBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgdG8gdXBkYXRlIGl0cyBjb250ZW50cyB1c2luZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+X2FwcGVuZDwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5fcHJlcGVuZDwvZmlsZW5hbWU+LiBUbyBhZGQgb25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoaXMgdmFyaWFibGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+IG9wZXJhdG9yIG11c3QgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9JTlNUQUxMJz48Z2xvc3N0ZXJtPklNQUdFX0lOU1RBTEw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSW1hZ2UgcmVjaXBlcyBzZXQgSU1BR0VfSU5TVEFMTCB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaCBpbWFnZS5iYmNsYXNzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBhCisgICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbSBmb3IgYW4gaW1hZ2UgcmVjaXBlIGFuZCB5b3Ugc2hvdWxkIHVzZSBpdAorICAgICAgICAgICAgICAgICAgICB3aXRoIGNhcmUgdG8gYXZvaWQgb3JkZXJpbmcgaXNzdWVzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIGFuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbWFnZXMtY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyc+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLCBkbyBub3QgdXNlIHRoZSA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzcGVjaWZ5IHBhY2thZ2VzIGZvciBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48ZmlsZW5hbWU+UEFDS0FHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggYWxsb3dzIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgdG8gdXNlIGEgZml4ZWQgc2V0IG9mIHBhY2thZ2VzIGFuZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkIGJ5IDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW1hZ2UgcmVjaXBlcyBzZXQgPGZpbGVuYW1lPklNQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksICJoZWxwZXIiIGNsYXNzZXMgZXhpc3QsIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+LCB0aGF0IGNhbiB0YWtlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPklNQUdFX0ZFQVRVUkVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGxpc3RzIGFuZCB0dXJuIHRoZXNlIGludG8gYXV0by1nZW5lcmF0ZWQgZW50cmllcyBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IGluIGFkZGl0aW9uIHRvIGl0cworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGNvbnRlbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4rPTwvZmlsZW5hbWU+IG9wZXJhdG9yIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBmcm9tIHdpdGhpbgorICAgICAgICAgICAgICAgICAgICBhbiBpbWFnZSByZWNpcGUgaXMgbm90IHJlY29tbWVuZGVkIGFzIGl0IGNhbiBjYXVzZSBvcmRlcmluZworICAgICAgICAgICAgICAgICAgICBpc3N1ZXMuCisgICAgICAgICAgICAgICAgICAgIFNpbmNlIDxmaWxlbmFtZT5jb3JlLWltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPiBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT4gdG8gYSBkZWZhdWx0IHZhbHVlIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+Pz08L2ZpbGVuYW1lPiBvcGVyYXRvciwgdXNpbmcgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Kz08L2ZpbGVuYW1lPiBvcGVyYXRpb24gYWdhaW5zdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU1BR0VfSU5TVEFMTDwvZmlsZW5hbWU+IHdpbGwgcmVzdWx0IGluCisgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiB1c2VkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBzYW1lIG9wZXJhdGlvbiBmcm9tIHdpdGhpbiBhbiBpbWFnZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUgbWF5IG9yIG1heSBub3Qgc3VjY2VlZCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSW4gYm90aCB0aGVzZSBjYXNlcywgdGhlIGJlaGF2aW9yIGlzIGNvbnRyYXJ5IHRvIGhvdyBtb3N0CisgICAgICAgICAgICAgICAgICAgIHVzZXJzIGV4cGVjdCB0aGUgPGZpbGVuYW1lPis9PC9maWxlbmFtZT4gb3BlcmF0b3IgdG8gd29yay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgdXNlIHRoaXMgdmFyaWFibGUsIGl0IGlzIGJlc3QgdG8gdXNlIGl0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIDxyZXBsYWNlYWJsZT5wYWNrYWdlLW5hbWU8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHRvIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBzdGFydCBvZiB0aGUgcGFja2FnZSBuYW1lIG9yIG5hbWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX0xJTkdVQVMnPjxnbG9zc3Rlcm0+SU1BR0VfTElOR1VBUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfTElOR1VBU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBsb2NhbGVzIHRvIGluc3RhbGwgaW50byB0aGUgaW1hZ2UgZHVyaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gY29uc3RydWN0aW9uIHByb2Nlc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGxvY2FsZXMgdG8gaW5zdGFsbCBpbnRvIHRoZSBpbWFnZQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBjb25zdHJ1Y3Rpb24gcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzcGxpdHMgbG9jYWxlCisgICAgICAgICAgICAgICAgICAgIGZpbGVzLCB3aGljaCBhcmUgdXNlZCBmb3IgbG9jYWxpemF0aW9uLCBpbnRvIHNlcGFyYXRlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSA8ZmlsZW5hbWU+SU1BR0VfTElOR1VBUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGVuc3VyZXMgdGhhdCBhbnkgbG9jYWxlIHBhY2thZ2VzIHRoYXQgY29ycmVzcG9uZCB0byBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IHNlbGVjdGVkIGZvciBpbnN0YWxsYXRpb24gaW50byB0aGUgaW1hZ2UgYXJlIGFsc28KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfTElOR1VBUyA9ICJwdC1iciBkZS1kZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBidWlsZCBzeXN0ZW0gZW5zdXJlcyBhbnkgQnJhemlsaWFuCisgICAgICAgICAgICAgICAgICAgIFBvcnR1Z3Vlc2UgYW5kIEdlcm1hbiBsb2NhbGUgZmlsZXMgdGhhdCBjb3JyZXNwb25kIHRvCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluIHRoZSBpbWFnZSBhcmUgaW5zdGFsbGVkIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLWxvY2FsZS1wdC1icjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Ki1sb2NhbGUtZGUtZGU8L2ZpbGVuYW1lPiBhcyB3ZWxsIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4qLWxvY2FsZS1wdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+Ki1sb2NhbGUtZGU8L2ZpbGVuYW1lPiwgc2luY2Ugc29tZSBzb2Z0d2FyZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBvbmx5IHByb3ZpZGUgbG9jYWxlIGZpbGVzIGJ5IGxhbmd1YWdlIGFuZCBub3QgYnkKKyAgICAgICAgICAgICAgICAgICAgY291bnRyeS1zcGVjaWZpYyBsYW5ndWFnZSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdMSUJDX0dFTkVSQVRFX0xPQ0FMRVMnPjxmaWxlbmFtZT5HTElCQ19HRU5FUkFURV9MT0NBTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBpbmZvcm1hdGlvbiBvbiBnZW5lcmF0aW5nIEdMSUJDIGxvY2FsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfTUFOSUZFU1QnPjxnbG9zc3Rlcm0+SU1BR0VfTUFOSUZFU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX01BTklGRVNUW2RvY10gPSAiVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSBpbWFnZS4gVGhpcyBmaWxlIGxpc3RzIGFsbCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGxpc3RzIGFsbCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIHRoYXQgbWFrZSB1cAorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIGNvbnRhaW5zIHBhY2thZ2UgaW5mb3JtYXRpb24gb24gYSBsaW5lLXBlci1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJhc2lzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VhcmNoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGRlZmluZXMgdGhlIG1hbmlmZXN0IGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9NQU5JRkVTVCA9ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLm1hbmlmZXN0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpcyBkZXJpdmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUl9JTUFHRSc+PGZpbGVuYW1lPkRFUExPWV9ESVJfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9OQU1FJz48ZmlsZW5hbWU+SU1BR0VfTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGNyZWF0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdpbWFnZS1nZW5lcmF0aW9uLWRldi1lbnZpcm9ubWVudCc+SW1hZ2UgR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfTkFNRSc+PGdsb3NzdGVybT5JTUFHRV9OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9OQU1FW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBpbWFnZSBmaWxlcyBtaW51cyB0aGUgZXh0ZW5zaW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZXMgbWludXMgdGhlIGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBkZXJpdmVkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfQkFTRU5BTUUnPjxmaWxlbmFtZT5JTUFHRV9CQVNFTkFNRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURBVEVUSU1FJz48ZmlsZW5hbWU+REFURVRJTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX05BTUUgPSAiJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX09WRVJIRUFEX0ZBQ1RPUic+PGdsb3NzdGVybT5JTUFHRV9PVkVSSEVBRF9GQUNUT1I8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX09WRVJIRUFEX0ZBQ1RPUltkb2NdID0gIkRlZmluZXMgYSBtdWx0aXBsaWVyIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRvIHRoZSBpbml0aWFsIGltYWdlIHNpemUgZm9yIGNhc2VzIHdoZW4gdGhlIG11bHRpcGxpZXIgdGltZXMgdGhlIHJldHVybmVkIGRpc2sgdXNhZ2UgdmFsdWUgZm9yIHRoZSBpbWFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN1bSBvZiBJTUFHRV9ST09URlNfU0laRSBhbmQgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgYSBtdWx0aXBsaWVyIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBhcHBsaWVzIHRvIHRoZSBpbml0aWFsIGltYWdlCisgICAgICAgICAgICAgICAgICAgIHNpemUgZm9yIGNhc2VzIHdoZW4gdGhlIG11bHRpcGxpZXIgdGltZXMgdGhlIHJldHVybmVkIGRpc2sgdXNhZ2UgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBpbWFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHN1bSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz5JTUFHRV9ST09URlNfU0laRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbGllciBhcHBsaWVkIHRvIHRoZSBpbml0aWFsIGltYWdlIHNpemUgY3JlYXRlcworICAgICAgICAgICAgICAgICAgICBmcmVlIGRpc2sgc3BhY2UgaW4gdGhlIGltYWdlIGFzIG92ZXJoZWFkLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgYnVpbGQgcHJvY2VzcyB1c2VzIGEgbXVsdGlwbGllciBvZiAxLjMgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCB2YWx1ZSByZXN1bHRzIGluIDMwJSBmcmVlIGRpc2sgc3BhY2UgYWRkZWQgdG8gdGhlIGltYWdlIHdoZW4gdGhpcworICAgICAgICAgICAgICAgICAgICBtZXRob2QgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZpbmFsIGdlbmVyYXRlZCBpbWFnZSBzaXplLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQgcG9zdCBpbnN0YWxsIHNjcmlwdHMgYW5kIHRoZSBwYWNrYWdlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHVzZXMgZGlzayBzcGFjZSBpbnNpZGUgdGhpcyBvdmVyaGVhZCBhcmVhLgorICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIHRoZSBtdWx0aXBsaWVyIGRvZXMgbm90IHByb2R1Y2UgYW4gaW1hZ2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIHRoZW9yZXRpY2FsIGZyZWUgZGlzayBzcGFjZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPklNQUdFX1JPT1RGU19TSVpFPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IDMwJSBmcmVlIGRpc2sgc3BhY2UgdHlwaWNhbGx5IGdpdmVzIHRoZSBpbWFnZSBlbm91Z2ggcm9vbSB0byBib290CisgICAgICAgICAgICAgICAgICAgIGFuZCBhbGxvd3MgZm9yIGJhc2ljIHBvc3QgaW5zdGFsbHMgd2hpbGUgc3RpbGwgbGVhdmluZyBhIHNtYWxsIGFtb3VudCBvZgorICAgICAgICAgICAgICAgICAgICBmcmVlIGRpc2sgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIElmIDMwJSBmcmVlIHNwYWNlIGlzIGluYWRlcXVhdGUsIHlvdSBjYW4gaW5jcmVhc2UgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgZ2l2ZXMgeW91IDUwJSBmcmVlIHNwYWNlIGFkZGVkIHRvIHRoZSBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9PVkVSSEVBRF9GQUNUT1IgPSAiMS41IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZW5zdXJlIGEgc3BlY2lmaWMgYW1vdW50IG9mIGZyZWUgZGlzayBzcGFjZSBpcyBhZGRlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgaW1hZ2UgYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz5JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0U8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfUEtHVFlQRSc+PGdsb3NzdGVybT5JTUFHRV9QS0dUWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9QS0dUWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUgcGFja2FnZSB0eXBlIChERUIsIFJQTSwgSVBLLCBvciBUQVIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGVmaW5lcyB0aGUgcGFja2FnZSB0eXBlIChERUIsIFJQTSwgSVBLLCBvciBUQVIpIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkIGFwcHJvcHJpYXRlbHkgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfZGViJz48ZmlsZW5hbWU+cGFja2FnZV9kZWI8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfcnBtJz48ZmlsZW5hbWU+cGFja2FnZV9ycG08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfaXBrJz48ZmlsZW5hbWU+cGFja2FnZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2VfdGFyJz48ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5XYXJuaW5nPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcyBpcyBicm9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gbm90IHVzZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wYWNrYWdlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbWFnZSc+PGZpbGVuYW1lPmltYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgdXNlIHRoZSA8ZmlsZW5hbWU+SU1BR0VfUEtHVFlQRTwvZmlsZW5hbWU+IGZvcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdpbmcgdXAgaW1hZ2VzIGFuZCBTREtzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCBzZXQgdGhlIDxmaWxlbmFtZT5JTUFHRV9QS0dUWVBFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgICAgIFJhdGhlciwgdGhlIHZhcmlhYmxlIGlzIHNldCBpbmRpcmVjdGx5IHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2UnPjxmaWxlbmFtZT5wYWNrYWdlXyo8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIGZpcnN0IHBhY2thZ2UgdHlwZQorICAgICAgICAgICAgICAgICAgICAoZS5nLiBERUIsIFJQTSwgb3IgSVBLKSB0aGF0IGFwcGVhcnMgd2l0aCB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBGaWxlcyB1c2luZyB0aGUgPGZpbGVuYW1lPi50YXI8L2ZpbGVuYW1lPiBmb3JtYXQgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICBuZXZlciB1c2VkIGFzIGEgc3Vic3RpdHV0ZSBwYWNrYWdpbmcgZm9ybWF0IGZvciBERUIsCisgICAgICAgICAgICAgICAgICAgICAgICBSUE0sIGFuZCBJUEsgZm9ybWF0dGVkIGZpbGVzIGZvciB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+SU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgZmluYWwgaW1hZ2Ugb3V0cHV0IGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgZmluYWwgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1BSRVBST0NFU1NfQ09NTUFORCc+PGdsb3NzdGVybT5JTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1BSRVBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBmaW5hbCBpbWFnZSBvdXRwdXQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIGZpbmFsIGltYWdlCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1JPT1RGUyc+PGdsb3NzdGVybT5JTUFHRV9ST09URlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElNQUdFX1JPT1RGU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdoaWxlIGl0IGlzIHVuZGVyIGNvbnN0cnVjdGlvbiAoaS5lLiBkdXJpbmcgZG9fcm9vdGZzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aGlsZSBpdCBpcyB1bmRlcgorICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rpb24gKGkuZS4gZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3Mtcm9vdGZzJz48ZmlsZW5hbWU+ZG9fcm9vdGZzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2spLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIG5vdCBjb25maWd1cmFibGUuCisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgaXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCc+PGdsb3NzdGVybT5JTUFHRV9ST09URlNfQUxJR05NRU5UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNfQUxJR05NRU5UW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgZm9yIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZSBpbiBLYnl0ZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgZm9yIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZSBpbgorICAgICAgICAgICAgICAgICAgICBLYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgICAgICAgICAgICAgICAgICB0aGlzIHZhbHVlLCB0aGVuIHRoZSBzaXplIGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgb2YgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiMSIuCisgICAgICAgICAgICAgICAgICAgIFNlZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPjxmaWxlbmFtZT5JTUFHRV9ST09URlNfU0laRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnPjxnbG9zc3Rlcm0+SU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VbZG9jXSA9ICJEZWZpbmVzIGFkZGl0aW9uYWwgZnJlZSBkaXNrIHNwYWNlIGNyZWF0ZWQgaW4gdGhlIGltYWdlIGluIEtieXRlcy4gQnkgZGVmYXVsdCwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gJzAnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgY3JlYXRlZCBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAiMCIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZnJlZSBkaXNrIHNwYWNlIGlzIGFkZGVkIHRvIHRoZSBpbWFnZSBhZnRlciB0aGUgYnVpbGQgc3lzdGVtIGRldGVybWluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGltYWdlIHNpemUgYXMgZGVzY3JpYmVkIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX1NJWkUnPklNQUdFX1JPT1RGU19TSVpFPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBlbnN1cmUgdGhhdCBhCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljIGFtb3VudCBvZiBmcmVlIGRpc2sgc3BhY2UgaXMgYXZhaWxhYmxlIG9uIGEgZGV2aWNlIGFmdGVyIGFuIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZCBhbmQgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGJlIHN1cmUgNSBHYnl0ZXMgb2YgZnJlZSBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI1MjQyODgwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgWW9jdG8gUHJvamVjdCBCdWlsZCBBcHBsaWFuY2Ugc3BlY2lmaWNhbGx5IHJlcXVlc3RzIDQwIEdieXRlcworICAgICAgICAgICAgICAgICAgICBvZiBleHRyYSBzcGFjZSB3aXRoIHRoZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI0MTk0MzA0MCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1JPT1RGU19TSVpFJz48Z2xvc3N0ZXJtPklNQUdFX1JPT1RGU19TSVpFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTUFHRV9ST09URlNfU0laRVtkb2NdID0gIkRlZmluZXMgdGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzIHRoZSBmaW5hbCBzaXplIGZvciB0aGUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgIGltYWdlIHVzaW5nIGFuIGFsZ29yaXRobSB0aGF0IHRha2VzIGludG8gYWNjb3VudCB0aGUgaW5pdGlhbCBkaXNrIHNwYWNlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UsIGEgcmVxdWVzdGVkIHNpemUgZm9yIHRoZSBpbWFnZSwgYW5kIHJlcXVlc3RlZAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGZyZWUgZGlzayBzcGFjZSB0byBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFByb2dyYW1hdGljYWxseSwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlcm1pbmVzIHRoZSBmaW5hbCBzaXplIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgaW1hZ2UgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIGlmIChpbWFnZS1kdSAqIG92ZXJoZWFkKSAmbHQ7IHJvb3Rmcy1zaXplOgorCWludGVybmFsLXJvb3Rmcy1zaXplID0gcm9vdGZzLXNpemUgKyB4c3BhY2UKKyAgICBlbHNlOgorCWludGVybmFsLXJvb3Rmcy1zaXplID0gKGltYWdlLWR1ICogb3ZlcmhlYWQpICsgeHNwYWNlCisKKyAgICB3aGVyZToKKworICAgICAgaW1hZ2UtZHUgPSBSZXR1cm5lZCB2YWx1ZSBvZiB0aGUgZHUgY29tbWFuZCBvbgorICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UuCisKKyAgICAgIG92ZXJoZWFkID0gSU1BR0VfT1ZFUkhFQURfRkFDVE9SCisKKyAgICAgIHJvb3Rmcy1zaXplID0gSU1BR0VfUk9PVEZTX1NJWkUKKworICAgICAgaW50ZXJuYWwtcm9vdGZzLXNpemUgPSBJbml0aWFsIHJvb3QgZmlsZXN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGJlZm9yZSBhbnkgbW9kaWZpY2F0aW9ucy4KKworICAgICAgeHNwYWNlID0gSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfT1ZFUkhFQURfRkFDVE9SJz48ZmlsZW5hbWU+SU1BR0VfT1ZFUkhFQURfRkFDVE9SPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBmb3IgcmVsYXRlZCBpbmZvcm1hdGlvbi4KKzwhLS0gICAgICAgICAgICAgICAgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCA8ZmlsZW5hbWU+b3ZlcmhlYWQ8L2ZpbGVuYW1lPiBpcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX09WRVJIRUFEX0ZBQ1RPUic+SU1BR0VfT1ZFUkhFQURfRkFDVE9SPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCA8ZmlsZW5hbWU+eHNwYWNlPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnPklNQUdFX1JPT1RGU19FWFRSQV9TUEFDRTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgYW5kIDxmaWxlbmFtZT5kdTwvZmlsZW5hbWU+IGlzIHRoZSByZXN1bHRzIG9mIHRoZSBkaXNrIHVzYWdlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgb24gdGhlIGluaXRpYWxseSBnZW5lcmF0ZWQgaW1hZ2UuIC0tPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlNQUdFX1RZUEVERVAnPjxnbG9zc3Rlcm0+SU1BR0VfVFlQRURFUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfVFlQRURFUFtkb2NdID0gIlNwZWNpZmllcyBhIGRlcGVuZGVuY3kgZnJvbSBvbmUgaW1hZ2UgdHlwZSBvbiBhbm90aGVyLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGRlcGVuZGVuY3kgZnJvbSBvbmUgaW1hZ2UgdHlwZSBvbiBhbm90aGVyLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW1hZ2UtbGl2ZSc+PGZpbGVuYW1lPmltYWdlLWxpdmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU1BR0VfVFlQRURFUF9saXZlID0gImV4dDMiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSB2YXJpYWJsZSBlbnN1cmVzIHRoYXQgd2hlbgorICAgICAgICAgICAgICAgICAgICAibGl2ZSIgaXMgbGlzdGVkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvZHVjZXMgYW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPiBpbWFnZSBmaXJzdCBzaW5jZSBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgb2YgdGhlIGxpdmUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaXMgYW4gPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQgcGFydGl0aW9uIGNvbnRhaW5pbmcgdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTUFHRV9UWVBFUyc+PGdsb3NzdGVybT5JTUFHRV9UWVBFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU1BR0VfVFlQRVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIHR5cGVzIGJ5IGRlZmF1bHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSB0eXBlcworICAgICAgICAgICAgICAgICAgICBieSBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGpmZnMyCisgICAgIGpmZnMyLnN1bQorICAgICBjcmFtZnMKKyAgICAgZXh0MgorICAgICBleHQyLmd6CisgICAgIGV4dDIuYnoyCisgICAgIGV4dDMKKyAgICAgZXh0My5negorICAgICBleHQyLmx6bWEKKyAgICAgYnRyZnMKKyAgICAgbGl2ZQorICAgICBzcXVhc2hmcworICAgICBzcXVhc2hmcy14egorICAgICB1YmkKKyAgICAgdWJpZnMKKyAgICAgdGFyCisgICAgIHRhci5negorICAgICB0YXIuYnoyCisgICAgIHRhci54egorICAgICBjcGlvCisgICAgIGNwaW8uZ3oKKyAgICAgY3Bpby54egorICAgICBjcGlvLmx6bWEKKyAgICAgdmRpCisgICAgIHZtZGsKKyAgICAgZWxmCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMgb2YgaW1hZ2VzLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcyouYmJjbGFzczwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5DX1BSJz48Z2xvc3N0ZXJtPklOQ19QUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5DX1BSW2RvY10gPSAiSGVscHMgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24gZm9yIHJlY2lwZXMgdGhhdCBzaGFyZSBhIGNvbW1vbiBpbmNsdWRlIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSGVscHMgZGVmaW5lIHRoZSByZWNpcGUgcmV2aXNpb24gZm9yIHJlY2lwZXMgdGhhdCBzaGFyZQorICAgICAgICAgICAgICAgICAgICBhIGNvbW1vbiA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgdGhpcyB2YXJpYWJsZSBhcyBwYXJ0IG9mIHRoZSByZWNpcGUgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgYXMgc2V0IGZyb20gd2l0aGluIGFuIGluY2x1ZGUgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEgc2V0IG9mIHJlY2lwZXMgdGhhdAorICAgICAgICAgICAgICAgICAgICBhcmUgdXNlZCBhY3Jvc3Mgc2V2ZXJhbCBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgQW5kLCB3aXRoaW4gZWFjaCBvZiB0aG9zZSByZWNpcGVzIHRoZSByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICAoaXRzIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlKSBpcyBzZXQgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgd2hlbiB0aGUgcmV2aXNpb24gb2YgdGhvc2UgcmVjaXBlcyBjaGFuZ2VzLAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVyZGVuIGlzIG9uIHlvdSB0byBmaW5kIGFsbCB0aG9zZSByZWNpcGVzIGFuZAorICAgICAgICAgICAgICAgICAgICBiZSBzdXJlIHRoYXQgdGhleSBnZXQgY2hhbmdlZCB0byByZWZsZWN0IHRoZSB1cGRhdGVkCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBzY2VuYXJpbywgaXQgY2FuIGdldCBjb21wbGljYXRlZCB3aGVuIHJlY2lwZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgdXNlZCBpbiBtYW55IHBsYWNlcyBhbmQgcHJvdmlkZSBjb21tb24gZnVuY3Rpb25hbGl0eQorICAgICAgICAgICAgICAgICAgICBhcmUgdXBncmFkZWQgdG8gYSBuZXcgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEEgbW9yZSBlZmZpY2llbnQgd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGlzIHNpdHVhdGlvbiBpcworICAgICAgICAgICAgICAgICAgICB0byBzZXQgdGhlIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbnNpZGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZmlsZXMgdGhhdCB0aGUgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICBzaGFyZSBhbmQgdGhlbiBleHBhbmQgdGhlIDxmaWxlbmFtZT5JTkNfUFI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoaW4gdGhlIHJlY2lwZXMgdG8gaGVscAorICAgICAgICAgICAgICAgICAgICBkZWZpbmUgdGhlIHJlY2lwZSByZXZpc2lvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBwcm92aWRlcyBhbiBleGFtcGxlIHRoYXQgc2hvd3MgaG93IHRvIHVzZQorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGdpdmVuIGEgY29tbW9uIDxmaWxlbmFtZT5pbmNsdWRlPC9maWxlbmFtZT4gZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+aW5jbHVkZTwvZmlsZW5hbWU+IGZpbGUsIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byBzZXQgdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlcyBpbgorICAgICAgICAgICAgICAgICAgICBlYWNoIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgbm90aWNlIHRoYXQgd2hlbiB5b3Ugc2V0IGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4geW91IGNhbiBwcm92aWRlIG1vcmUgZ3JhbnVsYXIKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25pbmcgYnkgYXBwZW5kaW5nIHZhbHVlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPklOQ19QUjwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLWZvbnQtY29tbW9uLmluYzpJTkNfUFIgPSAicjIiCityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmI6UFIgPSAiJHtJTkNfUFJ9LjEiCityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjAuYmI6UFIgPSAiJHtJTkNfUFJ9LjAiCityZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiOlBSID0gIiR7SU5DX1BSfS4zIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBleGFtcGxlIGVzdGFibGlzaGVzIHRoZSBiYXNlbGluZQorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiB0byBiZSB1c2VkIGZvciBhbGwgcmVjaXBlcyB0aGF0IHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmluY2x1ZGU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVtYWluaW5nIGxpbmVzIGluIHRoZSBleGFtcGxlIGFyZSBmcm9tIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBhbmQgc2hvdyBob3cgdGhlIDxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlzIHNldC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkNPTVBBVElCTEVfTElDRU5TRSc+PGdsb3NzdGVybT5JTkNPTVBBVElCTEVfTElDRU5TRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5DT01QQVRJQkxFX0xJQ0VOU0VbZG9jXSA9ICJTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaWNlbnNlIG5hbWVzIChhcyB0aGV5IHdvdWxkIGFwcGVhciBpbiBMSUNFTlNFKSB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaWNlbnNlIG5hbWVzCisgICAgICAgICAgICAgICAgICAgIChhcyB0aGV5IHdvdWxkIGFwcGVhciBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgcHJvdmlkZSBubyBhbHRlcm5hdGl2ZXMgdG8gbGlzdGVkIGluY29tcGF0aWJsZQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBhcmUgbm90IGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlcyB0aGF0IGFyZSBpbmRpdmlkdWFsbHkgbGljZW5zZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJsZSBsaWNlbnNlcyB3aWxsIGJlIGRlbGV0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBvbmx5IHJlZ3VsYXJseSB0ZXN0ZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBzZXR0aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOQ09NUEFUSUJMRV9MSUNFTlNFID0gIkdQTC0zLjAgTEdQTC0zLjAgQUdQTC0zLjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggeW91IGNhbiB1c2Ugb3RoZXIgc2V0dGluZ3MsIHlvdSBtaWdodCBiZSByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgICB0byByZW1vdmUgZGVwZW5kZW5jaWVzIG9uIG9yIHByb3ZpZGUgYWx0ZXJuYXRpdmVzIHRvCisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcHJvZHVjZSBhIGZ1bmN0aW9uYWwgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSElCSVRfREVGQVVMVF9ERVBTJz48Z2xvc3N0ZXJtPklOSElCSVRfREVGQVVMVF9ERVBTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhJQklUX0RFRkFVTFRfREVQU1tkb2NdID0gIlByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvIERFUEVORFMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jaWVzLCBuYW1lbHkgdGhlIEMgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgYW5kIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYyksIGZyb20gYmVpbmcgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgdXNlZCB3aXRoaW4gcmVjaXBlcyB0aGF0IGRvIG5vdAorICAgICAgICAgICAgICAgICAgICByZXF1aXJlIGFueSBjb21waWxhdGlvbiB1c2luZyB0aGUgQyBjb21waWxlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBiZWluZyBhZGRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQnPjxnbG9zc3Rlcm0+SU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhJQklUX1BBQ0tBR0VfU1RSSVBbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJldmVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZnJvbSBzcGxpdHRpbmcKKyAgICAgICAgICAgICAgICAgICAgb3V0IGRlYnVnIGluZm9ybWF0aW9uIGR1cmluZyBwYWNrYWdpbmcuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBzeXN0ZW0gc3BsaXRzIG91dCBkZWJ1Z2dpbmcKKyAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IGRlYnVnIGluZm9ybWF0aW9uIGlzIHNwbGl0IG91dCwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRSc+PGZpbGVuYW1lPlBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHByZXZlbnQgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHNwbGl0dGluZyBvdXQKKyAgICAgICAgICAgICAgICAgICAgZGVidWcgaW5mb3JtYXRpb24gZHVyaW5nIHBhY2thZ2luZywgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+SU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSElCSVRfUEFDS0FHRV9TVFJJUCc+PGdsb3NzdGVybT5JTkhJQklUX1BBQ0tBR0VfU1RSSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSElCSVRfUEFDS0FHRV9TVFJJUFtkb2NdID0gIklmIHNldCB0byAiMSIsIGNhdXNlcyB0aGUgYnVpbGQgdG8gbm90IHN0cmlwIGJpbmFyaWVzIGluIHJlc3VsdGluZyBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5IRVJJVCc+PGdsb3NzdGVybT5JTkhFUklUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhFUklUW2RvY10gPSAiQ2F1c2VzIHRoZSBuYW1lZCBjbGFzcyB0byBiZSBpbmhlcml0ZWQgYXQgdGhpcyBwb2ludCBkdXJpbmcgcGFyc2luZy4gVGhlIHZhcmlhYmxlIGlzIG9ubHkgdmFsaWQgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdAorICAgICAgICAgICAgICAgICAgICB0aGlzIHBvaW50IGR1cmluZyBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgb25seSB2YWxpZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSEVSSVRfRElTVFJPJz48Z2xvc3N0ZXJtPklOSEVSSVRfRElTVFJPPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTkhFUklUX0RJU1RST1tkb2NdID0gIkxpc3RzIGNsYXNzZXMgdGhhdCB3aWxsIGJlIGluaGVyaXRlZCBhdCB0aGUgZGlzdHJpYnV0aW9uIGxldmVsLiBJdCBpcyB1bmxpa2VseSB0aGF0IHlvdSB3YW50IHRvIGVkaXQgdGhpcyB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBsZXZlbC4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2FudCB0byBlZGl0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpcyBzZXQgYXMgZm9sbG93cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVRfRElTVFJPID89ICJkZWJpYW4gZGV2c2hlbGwgc3N0YXRlIGxpY2Vuc2UiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUUkFNRlNfRlNUWVBFUyc+PGdsb3NzdGVybT5JTklUUkFNRlNfRlNUWVBFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJBTUZTX0ZTVFlQRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgaW1hZ2Ugb2YgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKSwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgYm9vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgaW1hZ2Ugb2YgYW4gaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICBSQU0gZGlzayAoaW5pdHJhbWZzKSwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIGZvcm1hdHMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIHN1cHBvcnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZTVFlQRVMnPjxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRSQU1GU19JTUFHRSc+PGdsb3NzdGVybT5JTklUUkFNRlNfSU1BR0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRSQU1GU19JTUFHRVtkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhbiBhZGRpdGlvbmFsIHJlY2lwZSBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciByb290IGZpbGVzeXN0ZW0gcmVjaXBlIChlLmcuIGNvcmUtaW1hZ2Utc2F0bykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIGFuIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGFzIGEgZGVwZW5kZW5jeSB0byB5b3VyIHJvb3QgZmlsZXN5c3RlbSByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFkZGl0aW9uYWwgcmVjaXBlIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGluaXRpYWwgUkFNIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgKGluaXRyYW1mcykgdGhhdCBtaWdodCBiZSBuZWVkZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBzeXN0ZW0gdG8gYWNjb21wbGlzaCBzdWNoIHRoaW5ncyBhcyBsb2FkaW5nCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBtb2R1bGVzIHByaW9yIHRvIG1vdW50aW5nIHRoZSByb290IGZpbGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdGhlIHZhcmlhYmxlLCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBpbml0cmFtZnMgeW91IHdhbnQgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBleGFtcGxlLCB3aGljaCBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlLCBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgYSBzZXBhcmF0ZSByZWNpcGUgdG8gYmUgY3JlYXRlZCB0aGF0IHJlc3VsdHMgaW4gYW4KKyAgICAgICAgICAgICAgICAgICAgaW5pdHJhbWZzIGltYWdlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG8taW5pdHJhbWZzLmJiPC9maWxlbmFtZT4gdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTklUUkFNRlNfSU1BR0UgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz48ZmlsZW5hbWU+a2VybmVsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhpcyB2YXJpYWJsZSB0byBhIG51bGwgc3RyaW5nIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFID0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19HSVRfVVJMOy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhLXlvY3RvL2NvbmYvbG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQnPjxmaWxlbmFtZT5sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZDwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS90cmVlL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyc+PGZpbGVuYW1lPmtlcm5lbC5iYmNsYXNzPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHRvIHNlZSBob3cgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSc+PGdsb3NzdGVybT5JTklUUkFNRlNfSU1BR0VfQlVORExFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJTklUUkFNRlNfSU1BR0VfQlVORExFW2RvY10gPSAiQ29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGltYWdlIHJlY2lwZSBzcGVjaWZpZWQgYnkgSU5JVFJBTUZTX0lNQUdFIGlzIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MgZHVyaW5nIGtlcm5lbCBjb21waWxhdGlvbiBpbiBvcmRlciB0byBidWlsZCBhIHNpbmdsZSBiaW5hcnkgdGhhdCBjb250YWlucyBib3RoIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0aWFsIFJBTSBkaXNrIChpbml0cmFtZnMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSByZWNpcGUgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTklUUkFNRlNfSU1BR0UnPjxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgcnVuIHRocm91Z2ggYW4gZXh0cmEgcGFzcyBkdXJpbmcga2VybmVsIGNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGJ1aWxkIGEgc2luZ2xlIGJpbmFyeSB0aGF0IGNvbnRhaW5zIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIGtlcm5lbCBpbWFnZSBhbmQgdGhlIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIGFuIGV4dHJhIGNvbXBpbGF0aW9uIHBhc3MgZW5zdXJlcyB0aGF0IHdoZW4gYSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMgdG8gdXNlIGFuIGluaXRyYW1mcywgaXQgZG9lcyBub3QgZW5jb3VudGVyCisgICAgICAgICAgICAgICAgICAgIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBzaG91bGQgdGhlIGluaXRyYW1mcyBpbmNsdWRlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgY29tYmluZWQgYmluYXJ5IGlzIGRlcG9zaXRlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL2RlcGxveTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgdmFyaWFibGUgdG8gIjEiIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIGNhdXNlcworICAgICAgICAgICAgICAgICAgICB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBtYWtlIHRoZSBleHRyYSBwYXNzIGR1cmluZworICAgICAgICAgICAgICAgICAgICBrZXJuZWwgY29tcGlsYXRpb246CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPjxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2V0cyB0aGlzIHZhcmlhYmxlIHRvIGEgbnVsbCBzdHJpbmcgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTklUUkFNRlNfSU1BR0VfQlVORExFID0gIiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTklUUkFNRlNfSU1BR0VfQlVORExFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBzZXQgdGhlIHZhcmlhYmxlIGluIGEgcmVjaXBlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L3RyZWUvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkJz48ZmlsZW5hbWU+bG9jYWwuY29uZi5zYW1wbGUuZXh0ZW5kZWQ8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJEJz48Z2xvc3N0ZXJtPklOSVRSRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJEW2RvY10gPSAiSW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZQorICAgICAgICAgICAgICAgICAgICBhcyBhbiBpbml0aWFsIFJBTSBkaXNrICg8ZmlsZW5hbWU+aW5pdHJkPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPklOSVRSRDwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGFuIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYm9vdGltZyc+PGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFJEX0lNQUdFJz48Z2xvc3N0ZXJtPklOSVRSRF9JTUFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgSU5JVFJEX0lNQUdFW2RvY10gPSAiV2hlbiBidWlsZGluZyBhICJsaXZlIiBib290YWJsZSBpbWFnZSAoaS5lLiB3aGVuIElNQUdFX0ZTVFlQRVMgY29udGFpbnMgImxpdmUiKSwgSU5JVFJEX0lNQUdFIHNwZWNpZmllcyB0aGUgaW1hZ2UgcmVjaXBlIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgUkFNIGRpc2sgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBidWlsZGluZyBhICJsaXZlIiBib290YWJsZSBpbWFnZSAoaS5lLiB3aGVuCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz48ZmlsZW5hbWU+SU1BR0VfRlNUWVBFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyAibGl2ZSIpLCA8ZmlsZW5hbWU+SU5JVFJEX0lNQUdFPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBpbWFnZSByZWNpcGUgdGhhdCBzaG91bGQgYmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSB0aGUgaW5pdGlhbCBSQU0gZGlzayBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWltYWdlLWxpdmUnPjxmaWxlbmFtZT5pbWFnZS1saXZlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUlOSVRTQ1JJUFRfTkFNRSc+PGdsb3NzdGVybT5JTklUU0NSSVBUX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRTQ1JJUFRfTkFNRVtkb2NdID0gIlRoZSBmaWxlbmFtZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IGFzIGluc3RhbGxlZCB0byAke3N5c2NvbmZkaXJ9L2luaXQuZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZW5hbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdCBhcyBpbnN0YWxsZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7c3lzY29uZmRpcn0vaW5pdC5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiByZWNpcGVzIHdoZW4gdXNpbmcgPGZpbGVuYW1lPnVwZGF0ZS1yYy5kLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIG1hbmRhdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTklUU0NSSVBUX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPklOSVRTQ1JJUFRfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRTQ1JJUFRfUEFDS0FHRVNbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBQTiB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgSWYgbXVsdGlwbGUgcGFja2FnZXMgYXJlIHNwZWNpZmllZCwgeW91IG5lZWQgdG8gYXBwZW5kIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG90aGVyIDxmaWxlbmFtZT5JTklUU0NSSVBUXyo8L2ZpbGVuYW1lPiBhcyBhbiBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIDxmaWxlbmFtZT51cGRhdGUtcmMuZC5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+PGZpbGVuYW1lPlBOPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5JVFNDUklQVF9QQVJBTVMnPjxnbG9zc3Rlcm0+SU5JVFNDUklQVF9QQVJBTVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOSVRTQ1JJUFRfUEFSQU1TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBvcHRpb25zIHRvIHBhc3MgdG8gdXBkYXRlLXJjLmQuIFRoZSB2YXJpYWJsZSBpcyBtYW5kYXRvcnkgYW5kIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIHVwZGF0ZS1yYy5kLmJiY2xhc3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcHRpb25zIHRvIHBhc3MgdG8gPGZpbGVuYW1lPnVwZGF0ZS1yYy5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgc2NyaXB0IGhhcyBhIHJ1bmxldmVsIG9mIDk5LAorICAgICAgICAgICAgICAgICAgICBzdGFydHMgdGhlIHNjcmlwdCBpbiBpbml0bGV2ZWxzIDIgYW5kIDUsIGFuZAorICAgICAgICAgICAgICAgICAgICBzdG9wcyB0aGUgc2NyaXB0IGluIGxldmVscyAwLCAxIGFuZCA2LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyBkZWZhdWx0IHZhbHVlIGlzICJkZWZhdWx0cyIsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXBkYXRlLXJjLmQnPjxmaWxlbmFtZT51cGRhdGUtcmMuZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTklUU0NSSVBUX1BBUkFNUzwvZmlsZW5hbWU+IGlzIHBhc3NlZCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB2YWxpZCBwYXJhbWV0ZXJzLCBwbGVhc2Ugc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPiBtYW51YWwgcGFnZSBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LnRpbi5vcmcvYmluL21hbi5jZ2k/c2VjdGlvbj04JmFtcDt0b3BpYz11cGRhdGUtcmMuZCc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSU5TQU5FX1NLSVAnPjxnbG9zc3Rlcm0+SU5TQU5FX1NLSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIElOU0FORV9TS0lQW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGhpbiBhIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIFFBIGNoZWNrcyB0byBza2lwIGZvciBhIHNwZWNpZmljIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc2tpcCB0aGUgY2hlY2sgZm9yIHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzIGluIHRoZSBtYWluIHBhY2thZ2Ugb2YgYQorICAgICAgICAgICAgICAgICAgICByZWNpcGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIG5hbWUgb3ZlcnJpZGUgbXVzdCBiZSB1c2VkLCB3aGljaCBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUgaXMgPGZpbGVuYW1lPiR7UE59PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1pbnNhbmUnPjxmaWxlbmFtZT5pbnNhbmUuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBmb3IgYSBsaXN0IG9mIHRoZSB2YWxpZCBRQSBjaGVja3MgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHVzaW5nIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItSVBLX0ZFRURfVVJJUyc+PGdsb3NzdGVybT5JUEtfRkVFRF9VUklTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBJUEtfRkVFRF9VUklTW2RvY10gPSAiTGlzdCBvZiBpcGtnIGZlZWQgcmVjb3JkcyB0byBwdXQgaW50byBnZW5lcmF0ZWQgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB0aGUgSVBLIGJhY2tlbmQgaXMgaW4gdXNlIGFuZCBwYWNrYWdlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgaXMgZW5hYmxlZCBvbiB0aGUgdGFyZ2V0LCB5b3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIHNldCB1cCA8ZmlsZW5hbWU+b3BrZzwvZmlsZW5hbWU+IGluIHRoZSB0YXJnZXQgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgdG8gcG9pbnQgdG8gcGFja2FnZSBmZWVkcyBvbiBhIG5vbWluYXRlZCBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGZlZWQgaXMgZXN0YWJsaXNoZWQsIHlvdSBjYW4gcGVyZm9ybQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb25zIG9yIHVwZ3JhZGVzIHVzaW5nIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICAgICAgICAgICAgICAgICAgYXQgcnVudGltZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKzwhLS0KKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1JTlRFUkNFUFRfRElSJz48Z2xvc3N0ZXJtPklOVEVSQ0VQVF9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBkZWZpbmVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgcG9zdCBpbnN0YWxsYXRpb24gaG9va3MgYXJlIGluc3RhbGxlZCBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHBvc3QgaW5zdGFsbCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBmaXhlZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vaW50ZXJjZXB0X3NjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZnRlciBpbnN0YWxsYXRpb24gb2YgYSB0YXJnZXQncyByb290IGZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgIHBvc3QgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIHdoaWNoIGFyZSBlc3NlbnRpYWxseSBiYXNoIHNjcmlwdHMsCisgICAgICAgICAgICAgICAgICAgIGFyZSBhbGwgZXhlY3V0ZWQganVzdCBhIHNpbmdsZSB0aW1lLgorICAgICAgICAgICAgICAgICAgICBMaW1pdGluZyBleGVjdXRpb24gb2YgdGhlc2Ugc2NyaXB0cyBtaW5pbWl6ZXMgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIHRpbWUgdGhhdCB3b3VsZCBiZSBsZW5ndGhlbmVkIGR1ZSB0byAgY2VydGFpbiBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyaW5nIHJlZHVuZGFudCBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGluc3RhbGxhdGlvbiBvZiBmb250IHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGFzIGEgY29tbW9uIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgbGltaXRpbmcgdGhlIGV4ZWN1dGlvbiBvZiBwb3N0IGluc3RhbGxhdGlvbiBzY3JpcHRzLAorICAgICAgICAgICAgICAgICAgICBhbGwgZm9udCBkaXJlY3RvcmllcyB3b3VsZCBiZSByZXNjYW5uZWQgdG8gY3JlYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBjYWNoZSBhZnRlciBlYWNoIGluZGl2aWR1YWwgZm9udCBwYWNrYWdlIHdhcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBlZGl0IHRoZSA8ZmlsZW5hbWU+SU5URVJDRVBUX0RJUjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKy0tPgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLSAgICAgICAgICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LWonPjx0aXRsZT5KPC90aXRsZT4tLT4KKzwhLS0gICAgICAgICAgICA8L2dsb3NzZGl2Pi0tPgorCisgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1rJz48dGl0bGU+SzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LQVJDSCc+PGdsb3NzdGVybT5LQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0FSQ0hbZG9jXSA9ICJEZWZpbmVzIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHVzZWQgd2hlbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiBZb3UgZGVmaW5lIHRoZSBLQVJDSCB2YXJpYWJsZSBpbiB0aGUgQlNQIERlc2NyaXB0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBrZXJuZWwgYXJjaGl0ZWN0dXJlIHVzZWQgd2hlbiBhc3NlbWJsaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCBmb3IgdGhpcyByZWxlYXNlIGFyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb3dlcnBjCisgICAgIGkzODYKKyAgICAgeDg2XzY0CisgICAgIGFybQorICAgICBxZW11CisgICAgIG1pcHMKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgZGVmaW5lIHRoZSA8ZmlsZW5hbWU+S0FSQ0g8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2JzcC1kZXNjcmlwdGlvbnMnPkJTUCBEZXNjcmlwdGlvbnM8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LQlJBTkNIJz48Z2xvc3N0ZXJtPktCUkFOQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtCUkFOQ0hbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggdGhhdCBpcyB2YWxpZGF0ZWQsIHBhdGNoZWQgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZ5IHRoZSBrZXJuZWwgYnJhbmNoIHRoYXQgaXMgdmFsaWRhdGVkLCBwYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICBhbmQgY29uZmlndXJlZCBkdXJpbmcgYSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoaXMgdmFyaWFibGUgdG8gZW5zdXJlIHRoZSBleGFjdCBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIHlvdSB3YW50IGlzIGJlaW5nIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFZhbHVlcyBmb3IgdGhpcyB2YXJpYWJsZSBhcmUgc2V0IGluIHRoZSBrZXJuZWwncyByZWNpcGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBhbmQgdGhlIGtlcm5lbCdzIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCBrZXJuZWwgdGhhdAorICAgICAgICAgICAgICAgICAgICBpcyBiYXNlZCBvbiB0aGUgTGludXggMy4xNCBrZXJuZWwsIHRoZSBrZXJuZWwgcmVjaXBlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBmb3IgYSBrZXJuZWwgcmVjaXBlIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGFsc28gdXNlZCBmcm9tIHRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZQorICAgICAgICAgICAgICAgICAgICB0byBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBvciB0YXJnZXQgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwncyBhcHBlbmQgZmlsZSBpcyBsb2NhdGVkIGluIHRoZSBCU1AgbGF5ZXIgZm9yCisgICAgICAgICAgICAgICAgICAgIGEgZ2l2ZW4gbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBrZXJuZWwgYXBwZW5kIGZpbGUgZm9yIHRoZSBFbWVubG93IEJTUCBpcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBhbmQgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtZW1lbmxvdy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSByZWxhdGVkIHN0YXRlbWVudHMgZnJvbSB0aGUgYXBwZW5kIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09NUEFUSUJMRV9NQUNISU5FX2VtZW5sb3ctbm9lbWdkID0gImVtZW5sb3ctbm9lbWdkIgorICAgICBLTUFDSElORV9lbWVubG93LW5vZW1nZCA9ICJlbWVubG93IgorICAgICBLQlJBTkNIX2VtZW5sb3ctbm9lbWdkID0gInN0YW5kYXJkL2Jhc2UiCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfZW1lbmxvdy1ub2VtZ2QgPSAiIGZlYXR1cmVzL2RybS1nbWE1MDAvZHJtLWdtYTUwMC5zY2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+IHN0YXRlbWVudCBpZGVudGlmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUga2VybmVsIGJyYW5jaCB0byB1c2Ugd2hlbiBidWlsZGluZyBmb3IgdGhlIEVtZW5sb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIEJTUC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LQlVJTERfREVGQ09ORklHJz48Z2xvc3N0ZXJtPktCVUlMRF9ERUZDT05GSUc8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtCVUlMRF9ERUZDT05GSUdbZG9jXSA9ICJTcGVjaWZpZXMgYW4gImluLXRyZWUiIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHVzZSBkdXJpbmcgYSBrZXJuZWwgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbC15b2N0byc+PGZpbGVuYW1lPmtlcm5lbC15b2N0bzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgc3BlY2lmaWVzIGFuICJpbi10cmVlIiBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGZvciB1c2UgZHVyaW5nIGEga2VybmVsIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHdoZW4gdXNpbmcgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gdG8KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIGEga2VybmVsIGR1cmluZyBhIGJ1aWxkLCB5b3UgcGxhY2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4geW91ciBsYXllciBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgeW91IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIHBhdGNoIGZpbGVzIGFuZCBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGVzIChpLmUuCisgICAgICAgICAgICAgICAgICAgICJvdXQtb2YtdHJlZSIpLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byB1c2UgYSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIGtlcm5lbCB0cmVlIChpLmUuICJpbi10cmVlIiksCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlIHRvIHBvaW50CisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gdXNlIHRoZSB2YXJpYWJsZSwgc2V0IGl0IGluIHRoZSBhcHBlbmQgZmlsZSBmb3IgeW91cgorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLQlVJTERfREVGQ09ORklHXzxsaW5rIGxpbmtlbmQ9J3Zhci1LTUFDSElORSc+S01BQ0hJTkU8L2xpbms+ID89IDxyZXBsYWNlYWJsZT5kZWZjb25maWdfZmlsZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gYSAicmFzcGJlcnJ5cGkyIgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBidWlsZCB0aGF0IHVzZXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGVmY29uZmlnPC9maWxlbmFtZT4gZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAiYmNtMjcwOV9kZWZjb25maWciOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCVUlMRF9ERUZDT05GSUdfcmFzcGJlcnJ5cGkyID0gImJjbTI3MDlfZGVmY29uZmlnIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdpdGhpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIEtCVUlMRF9ERUZDT05GSUdfcG4tbGludXgteW9jdG8gPz0gPHJlcGxhY2VhYmxlPmRlZmNvbmZpZ19maWxlPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0JVSUxEX0RFRkNPTkZJRzwvZmlsZW5hbWU+IHZhcmlhYmxlLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsjdXNpbmctYW4taW4tdHJlZS1kZWZjb25maWctZmlsZSc+VXNpbmcgYW4gIkluLVRyZWUiIDxmaWxlbmFtZT5kZWZjb25maWc8L2ZpbGVuYW1lPiBGaWxlPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0NMQVNTRVMnPjxnbG9zc3Rlcm0+S0VSTkVMX0NMQVNTRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9DTEFTU0VTW2RvY10gPSAiQSBsaXN0IG9mIGNsYXNzZXMgZGVmaW5pbmcga2VybmVsIGltYWdlIHR5cGVzIHRoYXQga2VybmVsIGNsYXNzIHNob3VsZCBpbmhlcml0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBjbGFzc2VzIGRlZmluaW5nIGtlcm5lbCBpbWFnZSB0eXBlcyB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1rZXJuZWwnPjxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3Mgc2hvdWxkIGluaGVyaXQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgYXBwZW5kIHRoaXMgdmFyaWFibGUgdG8gZW5hYmxlIGV4dGVuZGVkIGltYWdlCisgICAgICAgICAgICAgICAgICAgIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIHRoZSAia2VybmVsLWZpdGltYWdlIiwgd2hpY2ggZW5hYmxlcworICAgICAgICAgICAgICAgICAgICBmaXRJbWFnZSBzdXBwb3J0IGFuZCByZXNpZGVzIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZWdpc3RlciBjdXN0b20ga2VybmVsIGltYWdlIHR5cGVzIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWw8L2ZpbGVuYW1lPiBjbGFzcyB1c2luZyB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9FWFRSQV9BUkdTJz48Z2xvc3N0ZXJtPktFUk5FTF9FWFRSQV9BUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfRVhUUkFfQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIG1ha2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwYXNzZXMgb24gd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPktFUk5FTF9GRUFUVVJFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX0ZFQVRVUkVTW2RvY10gPSAiSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4gVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGRlc2NyaXB0aW9ucy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRlcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGZyb20gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSwgdGhlIGRlZmF1bHQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgcHJvdmlkZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9J3Zhci1LQlJBTkNIJz48ZmlsZW5hbWU+S0JSQU5DSDwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUgdG8gZnVydGhlcgorICAgICAgICAgICAgICAgICAgICBhZGQgbWV0YWRhdGEgZm9yIGFsbCBCU1BzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnIGZyYWdtZW50cyBhbmQKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgZGVzY3JpcHRpb25zLAorICAgICAgICAgICAgICAgICAgICB3aGljaCB1c3VhbGx5IGluY2x1ZGVzIHBhdGNoZXMgYXMgd2VsbCBhcyBjb25maWcgZnJhZ21lbnRzLgorICAgICAgICAgICAgICAgICAgICBZb3UgdHlwaWNhbGx5IG92ZXJyaWRlIHRoZSA8ZmlsZW5hbWU+S0VSTkVMX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGEgc3BlY2lmaWMgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyB3YXksIHlvdSBjYW4gcHJvdmlkZSB2YWxpZGF0ZWQsIGJ1dCBvcHRpb25hbCwgc2V0cyBvZiBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBhZGRzIDxmaWxlbmFtZT5uZXRmaWx0ZXI8L2ZpbGVuYW1lPiB0byBhbGwKKyAgICAgICAgICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3Qga2VybmVscyBhbmQgYWRkcyBzb3VuZCBzdXBwb3J0IHRvIHRoZSA8ZmlsZW5hbWU+cWVtdXg4NjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBBZGQgbmV0ZmlsdGVyIHRvIGFsbCBsaW51eC15b2N0byBrZXJuZWxzCisgICAgIEtFUk5FTF9GRUFUVVJFUz0iZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCisKKyAgICAgIyBBZGQgc291bmQgc3VwcG9ydCB0byB0aGUgcWVtdXg4NiBtYWNoaW5lCisgICAgIEtFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfSU1BR0VfQkFTRV9OQU1FJz48Z2xvc3N0ZXJtPktFUk5FTF9JTUFHRV9CQVNFX05BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9JTUFHRV9CQVNFX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIHRoZSBrZXJuZWwgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBvZiB0aGUga2VybmVsIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMta2VybmVsJz5rZXJuZWw8L2xpbms+IGNsYXNzCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9JTUFHRVRZUEUnPjxmaWxlbmFtZT5LRVJORUxfSU1BR0VUWVBFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRSc+PGZpbGVuYW1lPlBLR0U8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dWJz48ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR1InPjxmaWxlbmFtZT5QS0dSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREFURVRJTUUnPjxmaWxlbmFtZT5EQVRFVElNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItS0VSTkVMX0lNQUdFX01BWFNJWkUnPjxnbG9zc3Rlcm0+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9JTUFHRV9NQVhTSVpFW2RvY10gPSAiVGhlIG1heGltdW0gYWxsb3dhYmxlIHNpemUgaW4ga2lsb2J5dGVzIG9mIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAga2lsb2J5dGVzLgorICAgICAgICAgICAgICAgICAgICBJZiA8ZmlsZW5hbWU+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2ZpbGVuYW1lPiBpcyBzZXQsCisgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSBpcyBjaGVja2VkIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgICAgdGhlIHNldCB2YWx1ZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1zaXplY2hlY2snPjxmaWxlbmFtZT5kb19zaXplY2hlY2s8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRhc2sgZmFpbHMgaWYgdGhlIGtlcm5lbCBpbWFnZSBmaWxlIGlzIGxhcmdlciB0aGFuCisgICAgICAgICAgICAgICAgICAgIHRoZSBzZXR0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX0lNQUdFX01BWFNJWkU8L2ZpbGVuYW1lPiBpcyB1c2VmdWwgZm9yCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBkZXZpY2VzIHRoYXQgaGF2ZSBhIGxpbWl0ZWQgYW1vdW50IG9mIHNwYWNlIGluCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSBrZXJuZWwgaW1hZ2UgbXVzdCBiZSBzdG9yZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdGhlCisgICAgICAgICAgICAgICAgICAgIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZSBpcyBub3QgY2hlY2tlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfSU1BR0VUWVBFJz48Z2xvc3N0ZXJtPktFUk5FTF9JTUFHRVRZUEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9JTUFHRVRZUEVbZG9jXSA9ICJUaGUgdHlwZSBvZiBrZXJuZWwgdG8gYnVpbGQgZm9yIGEgZGV2aWNlLCB1c3VhbGx5IHNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBkZWZhdWx0cyB0byAnekltYWdlJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdHlwZSBvZiBrZXJuZWwgdG8gYnVpbGQgZm9yIGEgZGV2aWNlLCB1c3VhbGx5IHNldCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBkZWZhdWx0cyB0byAiekltYWdlIi4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbCBhbmQgaXMgcGFzc2VkIHRvIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gYXMgdGhlIHRhcmdldCB0bworICAgICAgICAgICAgICAgICAgICBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfTU9EVUxFX0FVVE9MT0FEJz48Z2xvc3N0ZXJtPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIEtFUk5FTF9NT0RVTEVfQVVUT0xPQURbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgYXV0by1sb2FkZWQgZHVyaW5nIGJvb3QiCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBMaXN0cyBrZXJuZWwgbW9kdWxlcyB0aGF0IG5lZWQgdG8gYmUgYXV0by1sb2FkZWQgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSByZXBsYWNlcyB0aGUgZGVwcmVjYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLW1vZHVsZV9hdXRvbG9hZCc+PGZpbGVuYW1lPm1vZHVsZV9hdXRvbG9hZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW55d2hlcmUgdGhhdCBpdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplZCBieSB0aGUga2VybmVsIHJlY2lwZSBvciBieSBhbiBvdXQtb2YtdHJlZSBrZXJuZWwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlIHJlY2lwZSAoZS5nLiBhIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlLCBhCisgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUsIGFuIGFwcGVuZCBmaWxlIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLCBvciB0aGUgcmVjaXBlIGl0c2VsZikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgaXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBLRVJORUxfTU9EVUxFX0FVVE9MT0FEICs9ICI8cmVwbGFjZWFibGU+bW9kdWxlX25hbWUxPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lMjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5tb2R1bGVfbmFtZTM8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgPGZpbGVuYW1lPktFUk5FTF9NT0RVTEVfQVVUT0xPQUQ8L2ZpbGVuYW1lPiBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL21vZHVsZXMtbG9hZC5kL21vZG5hbWUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGF1dG8tbG9hZGVkIG9uIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBtb2R1bGVzIGFwcGVhciBvbmUtcGVyLWxpbmUgaW4gdGhlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgbW9zdCBjb21tb24gdXNlIGNhc2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAiPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwb3B1bGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1vZG5hbWUuY29uZjwvZmlsZW5hbWU+IGZpbGUgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kcHJvYmUuZDwvZmlsZW5hbWU+IHN5bnRheCBsaW5lcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRVJORUxfTU9EVUxFX1BST0JFQ09ORic+PGdsb3NzdGVybT5LRVJORUxfTU9EVUxFX1BST0JFQ09ORjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX01PRFVMRV9QUk9CRUNPTkZbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyBmb3Igd2hpY2ggdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzIHRvIGZpbmQgbW9kdWxlX2NvbmZfKiB2YWx1ZXMgdGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsaXN0IG9mIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGV4cGVjdHMgdG8gZmluZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bW9kdWxlX2NvbmZfPC9maWxlbmFtZT48cmVwbGFjZWFibGU+bW9kbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyB0aGF0IHNwZWNpZnkgY29uZmlndXJhdGlvbiBmb3IgZWFjaCBvZiB0aGUgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwcm92aWRlIHRob3NlIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItbW9kdWxlX2NvbmYnPjxmaWxlbmFtZT5tb2R1bGVfY29uZl8qPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9QQVRIJz48Z2xvc3N0ZXJtPktFUk5FTF9QQVRIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLRVJORUxfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19LRVJORUxfRElSJz48ZmlsZW5hbWU+U1RBR0lOR19LRVJORUxfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGhlbHAgbWF4aW1pemUgY29tcGF0aWJpbGl0eSB3aXRoIG91dC1vZi10cmVlIGRyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCBtb2R1bGVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbHNvCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXMgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfU1JDJz48ZmlsZW5hbWU+S0VSTkVMX1NSQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgQm90aCB2YXJpYWJsZXMgYXJlIGNvbW1vbiB2YXJpYWJsZXMgdXNlZCBieSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZXMgdG8gcG9pbnQgdG8gdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtFUk5FTF9TUkMnPjxnbG9zc3Rlcm0+S0VSTkVMX1NSQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0VSTkVMX1NSQ1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHRoZSBrZXJuZWwgc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19LRVJORUxfRElSJz48ZmlsZW5hbWU+U1RBR0lOR19LRVJORUxfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtbW9kdWxlJz48ZmlsZW5hbWU+bW9kdWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfS0VSTkVMX0RFVl9VUkw7I2luY29ycG9yYXRpbmctb3V0LW9mLXRyZWUtbW9kdWxlcyc+SW5jb3Jwb3JhdGluZyBPdXQtb2YtVHJlZSBNb2R1bGVzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIGhlbHAgbWF4aW1pemUgY29tcGF0aWJpbGl0eSB3aXRoIG91dC1vZi10cmVlIGRyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBidWlsZCBtb2R1bGVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhbHNvCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZXMgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1LRVJORUxfUEFUSCc+PGZpbGVuYW1lPktFUk5FTF9QQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5LRVJORUxfU1JDPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEJvdGggdmFyaWFibGVzIGFyZSBjb21tb24gdmFyaWFibGVzIHVzZWQgYnkgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzIHRvIHBvaW50IHRvIHRoZSBrZXJuZWwgc291cmNlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1LRkVBVFVSRV9ERVNDUklQVElPTic+PGdsb3NzdGVybT5LRkVBVFVSRV9ERVNDUklQVElPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgS0ZFQVRVUkVfREVTQ1JJUFRJT05bZG9jXSA9ICJQcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudC4gWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSAuc2NjIGZpbGUgdGhhdCBkZXNjcmliZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuCisgICAgICAgICAgICAgICAgICAgIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgPGZpbGVuYW1lPi5zY2M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSB2YXJpYWJsZSB1c2VkIGluIGEgZmlsZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c21wLnNjYzwvZmlsZW5hbWU+IHRvIGRlc2NyaWJlIFNNUCBiZWluZworICAgICAgICAgICAgICAgICAgICBlbmFibGVkOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRlZmluZSBLRkVBVFVSRV9ERVNDUklQVElPTiAiRW5hYmxlIFNNUCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtNQUNISU5FJz48Z2xvc3N0ZXJtPktNQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLTUFDSElORVtkb2NdID0gIlRoZSBtYWNoaW5lIGFzIGtub3duIGJ5IHRoZSBrZXJuZWwuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1hY2hpbmUgYXMga25vd24gYnkgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgICAgICAgICAgU29tZXRpbWVzIHRoZSBtYWNoaW5lIG5hbWUgdXNlZCBieSB0aGUga2VybmVsIGRvZXMgbm90CisgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBtYWNoaW5lIG5hbWUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBtYWNoaW5lIG5hbWUgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB1bmRlcnN0YW5kcyBhcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZTItMzItaW50ZWwtY29tbW9uPC9maWxlbmFtZT4gZ29lcyBieSBhCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBuYW1lIGluIHRoZSBMaW51eCBZb2N0byBrZXJuZWwuCisgICAgICAgICAgICAgICAgICAgIFRoZSBrZXJuZWwgdW5kZXJzdGFuZHMgdGhhdCBtYWNoaW5lIGFzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbnRlbC1jb3JlMi0zMjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgY2FzZXMgbGlrZSB0aGVzZSwgdGhlIDxmaWxlbmFtZT5LTUFDSElORTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG1hcHMgdGhlIGtlcm5lbCBtYWNoaW5lIG5hbWUgdG8gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gbWFjaGluZSBuYW1lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBtYXBwaW5ncyBiZXR3ZWVuIGRpZmZlcmVudCBuYW1lcyBvY2N1ciBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gTGludXggS2VybmVsJ3MgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBicmFuY2guCisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUgdGFrZSBhIGxvb2sgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElOVVhfVkVSU0lPTl9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiMy4xOS4wIgorICAgICBDT01QQVRJQkxFX01BQ0hJTkVfY29yZTItMzItaW50ZWwtY29tbW9uID0gIiR7TUFDSElORX0iCisgICAgIFNSQ1JFVl9tZXRhX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICI4ODk3ZWY2OGIzMGU3NDI2YmMxZDM5ODk1ZTcxZmIxNTVkNjk0OTc0IgorICAgICBTUkNSRVZfbWFjaGluZV9jb3JlMi0zMi1pbnRlbC1jb21tb24gPSAiNDNiOWVjZWQ5YmE4YTU3YWRkMzZhZjA3NzM2MzQ0ZGNjMzgzZjcxMSIKKyAgICAgS01BQ0hJTkVfY29yZTItMzItaW50ZWwtY29tbW9uID0gImludGVsLWNvcmUyLTMyIgorICAgICBLQlJBTkNIX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICJzdGFuZGFyZC9iYXNlIgorICAgICBLRVJORUxfRkVBVFVSRVNfYXBwZW5kX2NvcmUyLTMyLWludGVsLWNvbW1vbiA9ICIke0tFUk5FTF9GRUFUVVJFU19JTlRFTF9DT01NT059IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgc2F5cyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZSBrZXJuZWwgdW5kZXJzdGFuZHMgdGhlIG1hY2hpbmUgbmFtZSBhcworICAgICAgICAgICAgICAgICAgICAiaW50ZWwtY29yZTItMzIiLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1bmRlcnN0YW5kcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSBhcyAiY29yZTItMzItaW50ZWwtY29tbW9uIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUtUWVBFJz48Z2xvc3N0ZXJtPktUWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBLVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsCisgICAgICAgICAgICAgICAgICAgIGFuZCAicHJlZW1wdC1ydCIga2VybmVsIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsja2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGUgPGZpbGVuYW1lPktUWVBFPC9maWxlbmFtZT4gdmFyaWFibGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0tFUk5FTF9ERVZfVVJMOyNic3AtZGVzY3JpcHRpb25zJz5CU1AgRGVzY3JpcHRpb25zPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSB5b3UgdXNlIG11c3QgbWF0Y2ggdGhlIHZhbHVlIHVzZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElOVVhfS0VSTkVMX1RZUEUnPjxmaWxlbmFtZT5MSU5VWF9LRVJORUxfVFlQRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSB1c2VkIGJ5IHRoZSBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1sJz48dGl0bGU+TDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQUJFTFMnPjxnbG9zc3Rlcm0+TEFCRUxTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMQUJFTFNbZG9jXSA9ICJQcm92aWRlcyBhIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsaXN0IG9mIHRhcmdldHMgZm9yIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWdydWItZWZpJz48ZmlsZW5hbWU+Z3J1Yi1lZmk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRFUEVORFMnPjxnbG9zc3Rlcm0+TEFZRVJERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMQVlFUkRFUEVORFNbZG9jXSA9ICJMaXN0cyB0aGUgbGF5ZXJzLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB1cG9uIHdoaWNoIHRoaXMgcmVjaXBlIGRlcGVuZHMuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgdGhlIGxheWVycyB0aGF0IHRoaXMgcmVjaXBlIGRlcGVuZHMgdXBvbiwgc2VwYXJhdGVkIGJ5IHNwYWNlcy4KKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgbGF5ZXIgdmVyc2lvbiBmb3IgYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgIGJ5IGFkZGluZyBpdCB0byB0aGUgZW5kIG9mIHRoZSBsYXllciBuYW1lIHdpdGggYSBjb2xvbiwgKGUuZy4gImFub3RoZXJsYXllcjozIgorICAgICAgICAgICAgICAgICAgICB0byBiZSBjb21wYXJlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MQVlFUlZFUlNJT04nPjxmaWxlbmFtZT5MQVlFUlZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+X2Fub3RoZXJsYXllcjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSkuCisgICAgICAgICAgICAgICAgICAgIEFuIGVycm9yIHdpbGwgYmUgcHJvZHVjZWQgaWYgYW55IGRlcGVuZGVuY3kgaXMgbWlzc2luZyBvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmVyc2lvbiBudW1iZXJzIGRvIG5vdCBtYXRjaCBleGFjdGx5IChpZiBzcGVjaWZpZWQpLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIDxmaWxlbmFtZT5jb25mL2xheWVyLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MQVlFUkRFUEVORFNfbXlsYXllcjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUkRJUic+PGdsb3NzdGVybT5MQVlFUkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEFZRVJESVJbZG9jXSA9ICJXaGVuIHVzZWQgaW5zaWRlIHRoZSBsYXllci5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgaW5zaWRlIHRoZSA8ZmlsZW5hbWU+bGF5ZXIuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgb2YgPGZpbGVuYW1lPmxheWVyLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgcmVmZXJlbmNlcyBhcmUgZXhwYW5kZWQgaW1tZWRpYXRlbHkgd2hlbiBwYXJzaW5nIG9mIHRoZSBmaWxlIGNvbXBsZXRlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MQVlFUlZFUlNJT04nPjxnbG9zc3Rlcm0+TEFZRVJWRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMQVlFUlZFUlNJT05bZG9jXSA9ICJPcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBjb25mL2xheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBPcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhIGxheWVyIGFzIGEgc2luZ2xlIG51bWJlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxBWUVSREVQRU5EUyc+PGZpbGVuYW1lPkxBWUVSREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYW5vdGhlciBsYXllciBpbiBvcmRlciB0byBkZXBlbmQgb24gYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSA8ZmlsZW5hbWU+Y29uZi9sYXllci5jb25mPC9maWxlbmFtZT4gZmlsZQorICAgICAgICAgICAgICAgICAgICBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllciAoZS5nLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TEFZRVJWRVJTSU9OX215bGF5ZXI8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTEQnPjxnbG9zc3Rlcm0+TEQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExEW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuIHRoZSBsaW5rZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gcnVuIHRoZQorICAgICAgICAgICAgICAgICAgICBsaW5rZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTERGTEFHUyc+PGdsb3NzdGVybT5MREZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgZXhwb3J0ZWQgdG8gYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kIHRodXMgbWFkZSB2aXNpYmxlIHRvIHRoZSBzb2Z0d2FyZSBiZWluZworICAgICAgICAgICAgICAgICAgICBidWlsdCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHN0ZXAuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaW5pdGlhbGl6YXRpb24gZm9yIDxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGF0IGlzIGJlaW5nIGJ1aWx0OgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfTERGTEFHUyc+PGZpbGVuYW1lPlRBUkdFVF9MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMRF9MREZMQUdTJz48ZmlsZW5hbWU+QlVJTERfTERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSBidWlsZCBob3N0IChpLmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1uYXRpdmU8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERTREtfTERGTEFHUyc+PGZpbGVuYW1lPkJVSUxEU0RLX0xERkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciBhbiBTREsgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLTwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MRUFEX1NPTkFNRSc+PGdsb3NzdGVybT5MRUFEX1NPTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTEVBRF9TT05BTUVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxlYWQgKG9yIHByaW1hcnkpIGNvbXBpbGVkIGxpYnJhcnkgZmlsZSAoLnNvKSB0aGF0IHRoZSBkZWJpYW4gY2xhc3MgYXBwbGllcyBpdHMgbmFtaW5nIHBvbGljeSB0byBnaXZlbiBhIHJlY2lwZSB0aGF0IHBhY2thZ2VzIG11bHRpcGxlIGxpYnJhcmllcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxlYWQgKG9yIHByaW1hcnkpIGNvbXBpbGVkIGxpYnJhcnkgZmlsZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+KSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kZWJpYW4nPjxmaWxlbmFtZT5kZWJpYW48L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgYXBwbGllcyBpdHMgbmFtaW5nIHBvbGljeSB0byBnaXZlbiBhIHJlY2lwZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIG11bHRpcGxlIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDX0ZJTEVTX0NIS1NVTSc+PGdsb3NzdGVybT5MSUNfRklMRVNfQ0hLU1VNPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSUNfRklMRVNfQ0hLU1VNW2RvY10gPSAiQ2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHJlY2lwZSBzb3VyY2UgY29kZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDaGVja3N1bXMgb2YgdGhlIGxpY2Vuc2UgdGV4dCBpbiB0aGUgcmVjaXBlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHRyYWNrcyBjaGFuZ2VzIGluIGxpY2Vuc2UgdGV4dCBvZiB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgIGNvZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsaWNlbnNlIHRleHQgaXMgY2hhbmdlZCwgaXQgd2lsbCB0cmlnZ2VyIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSwgd2hpY2ggZ2l2ZXMgdGhlIGRldmVsb3BlciBhbiBvcHBvcnR1bml0eSB0byByZXZpZXcgYW55CisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgY2hhbmdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIG11c3QgYmUgZGVmaW5lZCBmb3IgYWxsIHJlY2lwZXMgKHVubGVzcworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRSc+PGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvICJDTE9TRUQiKS48L3BhcmE+CisgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5ncG9reS1jb25maWd1cmluZy1MSUNfRklMRVNfQ0hLU1VNJz4KKyAgICAgICAgICAgICAgICAgICAgVHJhY2tpbmcgTGljZW5zZSBDaGFuZ2VzPC9saW5rPiIgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFJz48Z2xvc3N0ZXJtPkxJQ0VOU0U8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VbZG9jXSA9ICJUaGUgbGlzdCBvZiBzb3VyY2UgbGljZW5zZXMgZm9yIHRoZSByZWNpcGUuIFRoZSBsb2dpY2FsIG9wZXJhdG9ycyAmYW1wOywgJ3wnLCBhbmQgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2UgcnVsZXM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RG8gbm90IHVzZSBzcGFjZXMgd2l0aGluIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIG5hbWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNlcGFyYXRlIGxpY2Vuc2UgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChwaXBlKSB3aGVuIHRoZXJlIGlzIGEgY2hvaWNlIGJldHdlZW4gbGljZW5zZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2VwYXJhdGUgbGljZW5zZSBuYW1lcyB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7IChhbXBlcnNhbmQpIHdoZW4gbXVsdGlwbGUgbGljZW5zZXMgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvdmVyIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gdXNlIHNwYWNlcyBiZXR3ZWVuIGxpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Gb3Igc3RhbmRhcmQgbGljZW5zZXMsIHVzZSB0aGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZmlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1BEWExJQ0VOU0VNQVAnPjxmaWxlbmFtZT5TUERYTElDRU5TRU1BUDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgbmFtZXMgZGVmaW5lZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbGljZW5zZXMuY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFID0gIkxHUEx2Mi4xIHwgR1BMdjMiCisgICAgIExJQ0VOU0UgPSAiTVBMLTEgJmFtcDsgTEdQTHYyLjEiCisgICAgIExJQ0VOU0UgPSAiR1BMdjIrIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBleGFtcGxlIGlzIGZyb20gdGhlIHJlY2lwZXMgZm9yIFF0LCB3aGljaCB0aGUgdXNlcgorICAgICAgICAgICAgICAgICAgICBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZWl0aGVyIHRoZSBMR1BMIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgMi4xIG9yIEdQTCB2ZXJzaW9uIDMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgZXhhbXBsZSBpcyBmcm9tIENhaXJvIHdoZXJlIHR3byBsaWNlbnNlcyBjb3ZlcgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgZXhhbXBsZSBpcyBmcm9tIDxmaWxlbmFtZT5zeXNzdGF0PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHByZXNlbnRzIGEgc2luZ2xlIGxpY2Vuc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGxpY2Vuc2VzIG9uIGEgcGVyLXBhY2thZ2UgYmFzaXMgdG8KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlIHNpdHVhdGlvbnMgd2hlcmUgY29tcG9uZW50cyBvZiB0aGUgb3V0cHV0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGxpY2Vuc2VzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYSBwaWVjZSBvZiBzb2Z0d2FyZSB3aG9zZSBjb2RlIGlzCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VkIHVuZGVyIEdQTHYyIGJ1dCBoYXMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSAxLjIgY291bGQKKyAgICAgICAgICAgICAgICAgICAgYmUgc3BlY2lmaWVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRSA9ICJHRkRMLTEuMiAmYW1wOyBHUEx2MiIKKyAgICAgTElDRU5TRV8ke1BOfSA9ICJHUEx2MiIKKyAgICAgTElDRU5TRV8ke1BOfS1kb2MgPSAiR0ZETC0xLjIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSUNFTlNFX0ZMQUdTJz48Z2xvc3N0ZXJtPkxJQ0VOU0VfRkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VfRkxBR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBmbGFncyBmb3IgYSByZWNpcGUgeW91IG11c3Qgd2hpdGVsaXN0IHRocm91Z2ggTElDRU5TRV9GTEFHU19XSElURUxJU1QgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIHJlY2lwZSB0byBiZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBmbGFncyBmb3IgYSByZWNpcGUgeW91IG11c3QKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0IHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUJz48ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIHJlY2lwZSB0byBiZSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBwcm92aWRpbmcgbXVsdGlwbGUgZmxhZ3MsIHNlcGFyYXRlIHRoZW0gd2l0aAorICAgICAgICAgICAgICAgICAgICBzcGFjZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBpcyB0eXBpY2FsbHkgdXNlZCB0byBtYXJrIHJlY2lwZXMgdGhhdCBtaWdodAorICAgICAgICAgICAgICAgICAgICByZXF1aXJlIGFkZGl0aW9uYWwgbGljZW5zZXMgaW4gb3JkZXIgdG8gYmUgdXNlZCBpbiBhCisgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWwgcHJvZHVjdC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2VuYWJsaW5nLWNvbW1lcmNpYWxseS1saWNlbnNlZC1yZWNpcGVzJz5FbmFibGluZyBDb21tZXJjaWFsbHkgTGljZW5zZWQgUmVjaXBlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxnbG9zc3Rlcm0+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUW2RvY10gPSAiTGlzdHMgbGljZW5zZSBmbGFncyB0aGF0IHdoZW4gc3BlY2lmaWVkIGluIExJQ0VOU0VfRkxBR1Mgd2l0aGluIGEgcmVjaXBlIHNob3VsZCBub3QgcHJldmVudCB0aGF0IHJlY2lwZSBmcm9tIGJlaW5nIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGxpY2Vuc2UgZmxhZ3MgdGhhdCB3aGVuIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRV9GTEFHUyc+PGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgcmVjaXBlIHNob3VsZCBub3QgcHJldmVudCB0aGF0IHJlY2lwZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGlzIG90aGVyd2lzZSBrbm93biBhcyAid2hpdGVsaXN0aW5nIgorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlIGZsYWdzLgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyc+RW5hYmxpbmcgQ29tbWVyY2lhbGx5IExpY2Vuc2VkIFJlY2lwZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJQ0VOU0VfUEFUSCc+PGdsb3NzdGVybT5MSUNFTlNFX1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIExJQ0VOU0VfUEFUSFtkb2NdID0gIlBhdGggdG8gYWRkaXRpb25hbCBsaWNlbnNlcyB1c2VkIGR1cmluZyB0aGUgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUGF0aCB0byBhZGRpdGlvbmFsIGxpY2Vuc2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyA8ZmlsZW5hbWU+Q09NTU9OX0xJQ0VOU0VfRElSPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gZGVmaW5lIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBjb21tb24gbGljZW5zZSB0ZXh0IHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSUNFTlNFX1BBVEg8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIGV4dGVuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uIHRvIG90aGVyIGFyZWFzIHRoYXQgaGF2ZSBhZGRpdGlvbmFsIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfUEFUSCArPSAiPHJlcGxhY2VhYmxlPnBhdGgtdG8tYWRkaXRpb25hbC1jb21tb24tbGljZW5zZXM8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxJTlVYX0tFUk5FTF9UWVBFJz48Z2xvc3N0ZXJtPkxJTlVYX0tFUk5FTF9UWVBFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSU5VWF9LRVJORUxfVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBrZXJuZWwgdHlwZSB0byBiZSB1c2VkIGluIGFzc2VtYmxpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSBsaW51eC15b2N0byByZWNpcGVzIGRlZmluZSAic3RhbmRhcmQiLCAidGlueSIsIGFuZAorICAgICAgICAgICAgICAgICAgICAicHJlZW1wdC1ydCIga2VybmVsIHR5cGVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19LRVJORUxfREVWX1VSTDsja2VybmVsLXR5cGVzJz5LZXJuZWwgVHlwZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBMaW51eCBLZXJuZWwgRGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgTWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGtlcm5lbCB0eXBlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJTlVYX0tFUk5FTF9UWVBFPC9maWxlbmFtZT4sIGl0IGRlZmF1bHRzIHRvCisgICAgICAgICAgICAgICAgICAgICJzdGFuZGFyZCIuCisgICAgICAgICAgICAgICAgICAgIFRvZ2V0aGVyIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtNQUNISU5FJz48ZmlsZW5hbWU+S01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+TElOVVhfS0VSTkVMX1RZUEU8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSBzZWFyY2gKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIHVzZWQgYnkgdGhlIGtlcm5lbCB0b29scyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiB3aXRoaW4gdGhlIGtlcm5lbAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB3aXRoIHdoaWNoIHRvIGJ1aWxkIG91dCB0aGUgc291cmNlcyBhbmQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTElOVVhfVkVSU0lPTic+PGdsb3NzdGVybT5MSU5VWF9WRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBMSU5VWF9WRVJTSU9OW2RvY10gPSAiVGhlIExpbnV4IHZlcnNpb24gZnJvbSBrZXJuZWwub3JnIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgTGludXggdmVyc2lvbiBmcm9tIDxmaWxlbmFtZT5rZXJuZWwub3JnPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBiZWluZyBidWlsdCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIDxmaWxlbmFtZT5saW51eC15b2N0by0zLjQuYmI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBrZXJuZWwgcmVjaXBlIGZvdW5kIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgdmFyaWFibGVzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElOVVhfVkVSU0lPTiA/PSAiMy40LjI0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+TElOVVhfVkVSU0lPTjwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTic+PGdsb3NzdGVybT5MSU5VWF9WRVJTSU9OX0VYVEVOU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTElOVVhfVkVSU0lPTl9FWFRFTlNJT05bZG9jXSA9ICJBIHN0cmluZyBleHRlbnNpb24gY29tcGlsZWQgaW50byB0aGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIExpbnV4IGtlcm5lbCBidWlsdCB3aXRoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiBZb3UgZGVmaW5lIHRoaXMgdmFyaWFibGUgaW4gdGhlIGtlcm5lbCByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgZXh0ZW5zaW9uIGNvbXBpbGVkIGludG8gdGhlIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgYnVpbHQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGxpbnV4LXlvY3RvIGtlcm5lbCByZWNpcGVzIGFsbCBkZWZpbmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0by0kezxsaW5rIGxpbmtlbmQ9J3Zhci1MSU5VWF9LRVJORUxfVFlQRSc+TElOVVhfS0VSTkVMX1RZUEU8L2xpbms+fSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmluZyB0aGlzIHZhcmlhYmxlIGVzc2VudGlhbGx5IHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uIGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTkZJR19MT0NBTFZFUlNJT048L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdmlzaWJsZQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSA8ZmlsZW5hbWU+dW5hbWU8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyB0aGUgZXh0ZW5zaW9uIGFzc3VtaW5nIGl0CisgICAgICAgICAgICAgICAgICAgIHdhcyBzZXQgYXMgcHJldmlvdXNseSBzaG93bjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHVuYW1lIC1yCisgICAgIDMuNy4wLXJjOC1jdXN0b20KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLUxPR19ESVInPjxnbG9zc3Rlcm0+TE9HX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTE9HX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdyaXRlcyBvdmVyYWxsIGxvZyBmaWxlcy4gVGhlIGRlZmF1bHQgZGlyZWN0b3J5IGlzICR7VE1QRElSfS9sb2ciCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3cml0ZXMgb3ZlcmFsbCBsb2cgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyA8ZmlsZW5hbWU+JHtUTVBESVJ9L2xvZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGxvZ3Mgc3BlY2lmaWMgdG8gZWFjaCB0YXNrLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1UJz48ZmlsZW5hbWU+VDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktbSc+PHRpdGxlPk08L3RpdGxlPgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkUnPjxnbG9zc3Rlcm0+TUFDSElORTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LiBZb3UgZGVmaW5lIE1BQ0hJTkUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQgZGV2aWNlIGZvciB3aGljaCB0aGUgaW1hZ2UgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBkZWZpbmUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICAicWVtdXg4NiIsIHdoaWNoIGlzIGFuIHg4Ni1iYXNlZCBhcmNoaXRlY3R1cmUgbWFjaGluZSB0bworICAgICAgICAgICAgICAgICAgICBiZSBlbXVsYXRlZCB1c2luZyBRRU1VOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkUgPz0gInFlbXV4ODYiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGNvcnJlc3BvbmRzIHRvIGEgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgbmFtZSwgdGhyb3VnaCB3aGljaCBtYWNoaW5lLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQuCisgICAgICAgICAgICAgICAgICAgIFRodXMsIHdoZW4gPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiBpcyBzZXQgdG8gInFlbXV4ODYiIHRoZXJlCisgICAgICAgICAgICAgICAgICAgIGV4aXN0cyB0aGUgY29ycmVzcG9uZGluZyA8ZmlsZW5hbWU+cWVtdXg4Ni5jb25mPC9maWxlbmFtZT4gbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGluIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBvZiBtYWNoaW5lcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgYXMKKyAgICAgICAgICAgICAgICAgICAgc2hpcHBlZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORSA/PSAicWVtdWFybSIKKyAgICAgTUFDSElORSA/PSAicWVtdWFybTY0IgorICAgICBNQUNISU5FID89ICJxZW11bWlwcyIKKyAgICAgTUFDSElORSA/PSAicWVtdW1pcHM2NCIKKyAgICAgTUFDSElORSA/PSAicWVtdXBwYyIKKyAgICAgTUFDSElORSA/PSAicWVtdXg4NiIKKyAgICAgTUFDSElORSA/PSAicWVtdXg4Ni02NCIKKyAgICAgTUFDSElORSA/PSAiZ2VuZXJpY3g4NiIKKyAgICAgTUFDSElORSA/PSAiZ2VuZXJpY3g4Ni02NCIKKyAgICAgTUFDSElORSA/PSAiYmVhZ2xlYm9uZSIKKyAgICAgTUFDSElORSA/PSAibXBjODMxNWUtcmRiIgorICAgICBNQUNISU5FID89ICJlZGdlcm91dGVyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsYXN0IGZpdmUgYXJlIFlvY3RvIFByb2plY3QgcmVmZXJlbmNlIGhhcmR3YXJlIGJvYXJkcywgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgYXJlIHByb3ZpZGVkIGluIHRoZSA8ZmlsZW5hbWU+bWV0YS15b2N0by1ic3A8L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+QWRkaW5nIGFkZGl0aW9uYWwgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIGxheWVycworICAgICAgICAgICAgICAgICAgICAgICAgdG8geW91ciBjb25maWd1cmF0aW9uIGFkZHMgbmV3IHBvc3NpYmxlIHNldHRpbmdzIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9BUkNIJz48Z2xvc3N0ZXJtPk1BQ0hJTkVfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9BUkNIW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBtYWNoaW5lLXNwZWNpZmljIGFyY2hpdGVjdHVyZS4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgYXV0b21hdGljYWxseSBmcm9tIE1BQ0hJTkUgb3IgVFVORV9QS0dBUkNILiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbWFjaGluZS1zcGVjaWZpYyBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgZnJvbQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgaGFuZC1lZGl0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TUFDSElORV9BUkNIPC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiByZXF1aXJlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBwcm9jZXNzIGRlcGVuZHMgb24gdGhlc2UgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4KKyAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhpcyBpcyBhICJtYWNoaW5lIGVzc2VudGlhbCIgdmFyaWFibGUsIHRoZSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbXBhY3Qgb2YgdGhpcyB2YXJpYWJsZSBhZmZlY3RzIGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtYm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTJz5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIGEgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgdmFyaWFibGUncyBsaXN0IG9mIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgdGhlIGltYWdlIHdpbGwgbm90IGJ1aWxkIGlmIGEgZmlsZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBzdXBwb3NlIHRoZSBtYWNoaW5lIGZvciB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nIHJlcXVpcmVzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5leGFtcGxlLWluaXQ8L2ZpbGVuYW1lPiB0byBiZSBydW4gZHVyaW5nIGJvb3QgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGluIHRoZSBtYWNoaW5lJ3MKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gY29uZmlndXJhdGlvbiBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJleGFtcGxlLWluaXQiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTJz48Z2xvc3N0ZXJtPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiByZWNvbW1lbmRlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuIEJlY2F1c2UgdGhpcyBpcyBhICdtYWNoaW5lIGVzc2VudGlhbCcgdmFyaWFibGUsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY29tbWVuZGVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbWFnZSBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QgZGVwZW5kIG9uIHRoZXNlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGJlY2F1c2UgdGhpcyBpcyBhICJtYWNoaW5lIGVzc2VudGlhbCIgdmFyaWFibGUsIHRoZSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSBpbXBhY3Qgb2YgdGhpcyB2YXJpYWJsZSBhZmZlY3RzIGltYWdlcyBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZWdyb3VwLWNvcmUtYm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBpbWFnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzaW1pbGFyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTJz5NQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgaGF2ZSBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIHZhcmlhYmxlJ3MgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSB3aWxsIHN0aWxsIGJ1aWxkIGlmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBoYW5kbGUgZXNzZW50aWFsIGtlcm5lbCBtb2R1bGVzLCB3aG9zZQorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG1heSBiZSBzZWxlY3RlZCB0byBiZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgcmF0aGVyIHRoYW4gYXMgYSBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgYSBwYWNrYWdlIHdpbGwgbm90IGJlIHByb2R1Y2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciBhbiBleGFtcGxlIHdoZXJlIHlvdSBoYXZlIGEgY3VzdG9tIGtlcm5lbCB3aGVyZSBhIHNwZWNpZmljIHRvdWNoc2NyZWVuCisgICAgICAgICAgICAgICAgICAgIGRyaXZlciBpcyByZXF1aXJlZCBmb3IgdGhlIG1hY2hpbmUgdG8gYmUgdXNhYmxlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCB0aGUgZHJpdmVyIGNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSBvcgorICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBrZXJuZWwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgeW91IHdhbnQgaXQgdG8gYmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBCdXQsIHdoZW4gdGhlIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBzdGlsbCB3YW50IHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCB0byBzdWNjZWVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHNldHMgdXAgYSAicmVjb21tZW5kcyIgcmVsYXRpb25zaGlwIHNvIHRoYXQgaW4gdGhlIGxhdHRlciBjYXNlLAorICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgd2lsbCBub3QgZmFpbCBkdWUgdG8gdGhlIG1pc3NpbmcgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzLCBhc3N1bWluZyB0aGUgcGFja2FnZSBmb3IgdGhlIG1vZHVsZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlLWFiMTIzPC9maWxlbmFtZT4sIHlvdSB3b3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpbiB0aGUgbWFjaGluZSdzIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyArPSAia2VybmVsLW1vZHVsZS1hYjEyMyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTb21lIGV4YW1wbGVzIG9mIHRoZXNlIG1hY2hpbmUgZXNzZW50aWFscyBhcmUgZmxhc2gsIHNjcmVlbiwga2V5Ym9hcmQsIG1vdXNlLAorICAgICAgICAgICAgICAgICAgICBvciB0b3VjaHNjcmVlbiBkcml2ZXJzIChkZXBlbmRpbmcgb24gdGhlIG1hY2hpbmUpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FX0VYVFJBX1JERVBFTkRTJz48Z2xvc3N0ZXJtPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIEhvd2V2ZXIsIHRoZSBidWlsZCBwcm9jZXNzIGZvciBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlcyBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIG1vcmUgZnVsbHktZmVhdHVyZWQgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgb24gdGhlIHBhY2thZ2VzIGJlaW5nIHByZXNlbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYWZmZWN0cyBhbGwgaW1hZ2VzIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZTwvZmlsZW5hbWU+LCB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgc2ltaWxhciB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz5NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBpbWFnZSBiZWluZyBidWlsdCBoYXMgYSBidWlsZAorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSB2YXJpYWJsZSdzIGxpc3Qgb2YgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgaW1hZ2Ugd2lsbCBub3QgYnVpbGQgaWYgYSBmaWxlIGluIHRoaXMgbGlzdCBpcyBub3QgZm91bmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgYSBtYWNoaW5lIHRoYXQgaGFzIFdpRmkgY2FwYWJpbGl0eSBidXQgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdCB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlLCB5b3Ugd2FudCB0byBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgdGhlIFdpRmkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIGZvciB0aGUgV2lGaSBoYXJkd2FyZSBpcyBhbHdheXMKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgdG8gZXhpc3QsIHNvIGl0IGlzIGFjY2VwdGFibGUgZm9yIHRoZSBidWlsZCBwcm9jZXNzIHRvIGRlcGVuZCB1cG9uCisgICAgICAgICAgICAgICAgICAgIGZpbmRpbmcgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgZm9yIHRoZSBmaXJtd2FyZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT53aWZpZHJpdmVyLWZpcm13YXJlPC9maWxlbmFtZT4sIHlvdSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FWFRSQV9SREVQRU5EUyArPSAid2lmaWRyaXZlci1maXJtd2FyZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciBib290aW5nIHRoZSBtYWNoaW5lLiBUaGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcyBvbiB0aGUgcGFja2FnZXMgaW4gdGhpcyBsaXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgYmVpbmcgYnVpbHQgdGhhdCBhcmUgbm90IGVzc2VudGlhbCBmb3IgYm9vdGluZyB0aGUgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGltYWdlIGJlaW5nIGJ1aWx0IGhhcyBubyBidWlsZCBkZXBlbmRlbmN5IG9uIHRoaXMgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBhZmZlY3RzIG9ubHkgaW1hZ2VzIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlZ3JvdXAtYmFzZTwvZmlsZW5hbWU+LCB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNpbWlsYXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FWFRSQV9SREVQRU5EUyc+TUFDSElORV9FWFRSQV9SREVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgaGF2ZSBhIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgb24gdGhlIHZhcmlhYmxlJ3MgbGlzdCBvZiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbWFnZSB3aWxsIGJ1aWxkIGlmIGEgZmlsZSBpbiB0aGlzIGxpc3QgaXMgbm90IGZvdW5kLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBbiBleGFtcGxlIGlzIGEgbWFjaGluZSB0aGF0IGhhcyBXaUZpIGNhcGFiaWxpdHkgYnV0IGlzIG5vdCBlc3NlbnRpYWwKKyAgICAgICAgICAgICAgICAgICAgRm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZSwgeW91IHdhbnQgdG8gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgIFdpRmkuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIHBhY2thZ2UgY29udGFpbmluZyB0aGUgV2lGaSBrZXJuZWwgbW9kdWxlIHdpbGwgbm90IGJlIHByb2R1Y2VkCisgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBXaUZpIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGluIHdoaWNoIGNhc2UgeW91IHN0aWxsIHdhbnQgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHRvIHN1Y2NlZWQgaW5zdGVhZCBvZiBmYWlsaW5nIGFzIGEgcmVzdWx0IG9mIHRoZSBwYWNrYWdlIG5vdCBiZWluZyBmb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgVG8gYWNjb21wbGlzaCB0aGlzLCBhc3N1bWluZyB0aGUgcGFja2FnZSBmb3IgdGhlIG1vZHVsZSB3YXMgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5rZXJuZWwtbW9kdWxlLWV4YW1wbGV3aWZpPC9maWxlbmFtZT4sIHlvdSB3b3VsZCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBpbiB0aGUgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3IgdGhlIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAia2VybmVsLW1vZHVsZS1leGFtcGxld2lmaSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9GRUFUVVJFUyc+PGdsb3NzdGVybT5NQUNISU5FX0ZFQVRVUkVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0ZFQVRVUkVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIGhhcmR3YXJlIGZlYXR1cmVzIHRoZSBNQUNISU5FIHN1cHBvcnRzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+IGlzIGNhcGFibGUKKyAgICAgICAgICAgICAgICAgICAgb2Ygc3VwcG9ydGluZy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcgZmVhdHVyZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19GRUFUVVJFUyc+PGZpbGVuYW1lPkRJU1RST19GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNPTUJJTkVEX0ZFQVRVUkVTJz48ZmlsZW5hbWU+Q09NQklORURfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0bworICAgICAgICAgICAgICAgICAgICBQcm9qZWN0IGFzIHNoaXBwZWQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1mZWF0dXJlcy1tYWNoaW5lJz5NYWNoaW5lIEZlYXR1cmVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCc+PGdsb3NzdGVybT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlIG1ldGEvY29uZi9iaXRiYWtlLmNvbmYgZmlsZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZXItY29uZmlndXJhYmxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWxzbyBwcmVzZW50IGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVEJz5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYmVzdCB0byBqdXN0IHJlZmVyZW5jZSB0aGUgdmFyaWFibGUgdG8gc2VlIHdoaWNoIG1hY2hpbmUgZmVhdHVyZXMgYXJlCisgICAgICAgICAgICAgICAgICAgIGJlaW5nIGJhY2tmaWxsZWQgZm9yIGFsbCBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtZmVhdHVyZXMtYmFja2ZpbGwnPkZlYXR1cmUgYmFja2ZpbGxpbmc8L2xpbms+IiBzZWN0aW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRCc+PGdsb3NzdGVybT5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBNQUNISU5FX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMJz5NQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWZlYXR1cmVzLWJhY2tmaWxsJz5GZWF0dXJlIGJhY2tmaWxsaW5nPC9saW5rPiIgc2VjdGlvbiBmb3IKKyAgICAgICAgICAgICAgICAgICAgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUNISU5FT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk1BQ0hJTkVPVkVSUklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BQ0hJTkVPVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4gQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiBNQUNISU5FLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORSc+TUFDSElORTwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBleHRlbmQgdGhlIGxpc3QgdG8gYXBwbHkgdmFyaWFibGUgb3ZlcnJpZGVzIGZvcgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIG9mIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgYWxsIFFFTVUgZW11bGF0ZWQgbWFjaGluZXMgKGUuZy4gcWVtdWFybSwKKyAgICAgICAgICAgICAgICAgICAgcWVtdXg4NiwgYW5kIHNvIGZvcnRoKSBpbmNsdWRlIGEgY29tbW9uIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB0aGF0IHByZXBlbmRzIDxmaWxlbmFtZT5NQUNISU5FT1ZFUlJJREVTPC9maWxlbmFtZT4gd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgTUFDSElORU9WRVJSSURFUyA9LiAicWVtdWFsbDoiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXBwbHlpbmcgYW4gb3ZlcnJpZGUgbGlrZSA8ZmlsZW5hbWU+cWVtdWFsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFmZmVjdHMgYWxsIFFFTVUgZW11bGF0ZWQgbWFjaGluZXMgZWxzZXdoZXJlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbm5tYW4tY29uZjwvZmlsZW5hbWU+IHJlY2lwZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIFNSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiZmlsZTovL3dpcmVkLmNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lyZWQtc2V0dXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NQUlOVEFJTkVSJz48Z2xvc3N0ZXJtPk1BSU5UQUlORVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1BSU5UQUlORVJbZG9jXSA9ICJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgZGlzdHJpYnV0aW9uIG1haW50YWluZXIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1JUlJPUlMnPjxnbG9zc3Rlcm0+TUlSUk9SUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB0aGUgdXBzdHJlYW0gc291cmNlLCBhbmQgdGhlbiBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT4gaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgeW91ciBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIGlzICJwb2t5IiwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NSVJST1JTPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTUxQUkVGSVgnPjxnbG9zc3Rlcm0+TUxQUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE1MUFJFRklYW2RvY10gPSAiU3BlY2lmaWVzIGEgcHJlZml4IGhhcyBiZWVuIGFkZGVkIHRvIFBOIHRvIGNyZWF0ZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiBhIHJlY2lwZSBvciBwYWNrYWdlLCBzdWNoIGFzIGEgTXVsdGlsaWIgdmVyc2lvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwcmVmaXggaGFzIGJlZW4gYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4gdG8gY3JlYXRlIGEgc3BlY2lhbCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIGEgcmVjaXBlIG9yIHBhY2thZ2UsIHN1Y2ggYXMgYSBNdWx0aWxpYiB2ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgaXMgdXNlZCBpbiBwbGFjZXMgd2hlcmUgdGhlIHByZWZpeCBuZWVkcyB0byBiZQorICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gYSB0aGUgbmFtZSAoZS5nLiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJQTic+PGZpbGVuYW1lPkJQTjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5NTFBSRUZJWDwvZmlsZW5hbWU+IGdldHMgc2V0IHdoZW4gYSBwcmVmaXggaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItbW9kdWxlX2F1dG9sb2FkJz48Z2xvc3N0ZXJtPm1vZHVsZV9hdXRvbG9hZDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgbW9kdWxlX2F1dG9sb2FkW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCB2YXJpYWJsZS4gWW91IHNob3VsZCByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBtb2R1bGVfYXV0b2xvYWQgd2l0aCBhZGRpdGlvbnMgdG8gS0VSTkVMX01PRFVMRV9BVVRPTE9BRC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tb2R1bGVfYXV0b2xvYWQ8L2ZpbGVuYW1lPiB3aXRoIGFkZGl0aW9ucyB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+S0VSTkVMX01PRFVMRV9BVVRPTE9BRDwvZmlsZW5hbWU+LCBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtb2R1bGVfYXV0b2xvYWRfcmZjb21tID0gInJmY29tbSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBzaG91bGQgbm93IGJlIHJlcGxhY2VkIHdpdGg6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCArPSAicmZjb21tIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLW1vZHVsZV9jb25mJz48Z2xvc3N0ZXJtPm1vZHVsZV9jb25mPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBtb2R1bGVfY29uZltkb2NdID0gIlNwZWNpZmllcyBtb2Rwcm9iZS5kIHN5bnRheCBsaW5lcyBmb3IgaW5jbHVzaW9uIGluIHRoZSAvZXRjL21vZHByb2JlLmQvbW9kbmFtZS5jb25mIGZpbGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi81L21vZHByb2JlLmQnPjxmaWxlbmFtZT5tb2Rwcm9iZS5kPC9maWxlbmFtZT48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBzeW50YXggbGluZXMgZm9yIGluY2x1c2lvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9ldGMvbW9kcHJvYmUuZC9tb2RuYW1lLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGlzIHZhcmlhYmxlIGFueXdoZXJlIHRoYXQgaXQgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGtlcm5lbCByZWNpcGUgb3Igb3V0LW9mLXRyZWUga2VybmVsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSByZWNpcGUgKGUuZy4gYSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSwgYQorICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCBhbiBhcHBlbmQgZmlsZSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSwgb3IgdGhlIHJlY2lwZSBpdHNlbGYpLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIHRoaXMgdmFyaWFibGUsIHlvdSBtdXN0IGFsc28gYmUgc3VyZSB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBnZW5lcmFsIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBtb2R1bGVfY29uZl88cmVwbGFjZWFibGU+bW9kdWxlX25hbWU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+bW9kcHJvYmUuZC1zeW50YXg8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2UgdGhlIGtlcm5lbCBtb2R1bGUgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUnVuIDxmaWxlbmFtZT5tYW4gbW9kcHJvYmUuZDwvZmlsZW5hbWU+IGluIHRoZSBzaGVsbCB0bworICAgICAgICAgICAgICAgICAgICBmaW5kIG91dCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBleGFjdCBzeW50YXgKKyAgICAgICAgICAgICAgICAgICAgeW91IHdhbnQgdG8gcHJvdmlkZSB3aXRoIDxmaWxlbmFtZT5tb2R1bGVfY29uZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbmNsdWRpbmcgPGZpbGVuYW1lPm1vZHVsZV9jb25mPC9maWxlbmFtZT4gY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHBvcHVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L2V0Yy9tb2Rwcm9iZS5kL21vZG5hbWUuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgd2l0aCA8ZmlsZW5hbWU+bW9kcHJvYmUuZDwvZmlsZW5hbWU+IHN5bnRheCBsaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYWRkcyB0aGUgb3B0aW9ucworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXJnMTwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+YXJnMjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHRvIGEgbW9kdWxlIG5hbWVkIDxmaWxlbmFtZT5teW1vZHVsZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1vZHVsZV9jb25mX215bW9kdWxlID0gIm9wdGlvbnMgbXltb2R1bGUgYXJnMT12YWwxIGFyZzI9dmFsMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHNwZWNpZnkga2VybmVsIG1vZHVsZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgYXV0by1sb2FkIG9uIGJvb3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUtFUk5FTF9NT0RVTEVfQVVUT0xPQUQnPjxmaWxlbmFtZT5LRVJORUxfTU9EVUxFX0FVVE9MT0FEPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1PRFVMRV9JTUFHRV9CQVNFX05BTUUnPjxnbG9zc3Rlcm0+TU9EVUxFX0lNQUdFX0JBU0VfTkFNRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgTU9EVUxFX0lNQUdFX0JBU0VfTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHRhcmJhbGwuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBvZiB0aGUga2VybmVsIG1vZHVsZXMgdGFyYmFsbC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWtlcm5lbCc+a2VybmVsPC9saW5rPiBjbGFzcworICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE1PRFVMRV9JTUFHRV9CQVNFX05BTUUgPz0gIm1vZHVsZXMtJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QS0dFJz48ZmlsZW5hbWU+UEtHRTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR1YnPjxmaWxlbmFtZT5QS0dWPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHUic+PGZpbGVuYW1lPlBLR1I8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EQVRFVElNRSc+PGZpbGVuYW1lPkRBVEVUSU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1NT0RVTEVfVEFSQkFMTF9ERVBMT1knPjxnbG9zc3Rlcm0+TU9EVUxFX1RBUkJBTExfREVQTE9ZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNT0RVTEVfVEFSQkFMTF9ERVBMT1lbZG9jXSA9ICJDb250cm9scyBjcmVhdGlvbiBvZiB0aGUgbW9kdWxlcy0qLnRneiBmaWxlLiBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMCIgdG8gZGlzYWJsZSBjcmVhdGlvbiBvZiB0aGlzIGZpbGUsIHdoaWNoIGNvbnRhaW5zIGFsbCBvZiB0aGUga2VybmVsIG1vZHVsZXMgcmVzdWx0aW5nIGZyb20gYSBrZXJuZWwgYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgY3JlYXRpb24gb2YgdGhlIDxmaWxlbmFtZT5tb2R1bGVzLSoudGd6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gIjAiIHRvIGRpc2FibGUgY3JlYXRpb24gb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBmaWxlLCB3aGljaCBjb250YWlucyBhbGwgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICBmcm9tIGEga2VybmVsIGJ1aWxkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48Z2xvc3N0ZXJtPk1VTFRJTUFDSF9UQVJHRVRfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBNVUxUSU1BQ0hfVEFSR0VUX1NZU1tkb2NdID0gIlNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFNUCc+PGZpbGVuYW1lPlNUQU1QPC9maWxlbmFtZT48L2xpbms+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGZvciBhbiBleGFtcGxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1uJz48dGl0bGU+TjwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1OQVRJVkVMU0JTVFJJTkcnPjxnbG9zc3Rlcm0+TkFUSVZFTFNCU1RSSU5HPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOQVRJVkVMU0JTVFJJTkdbZG9jXSA9ICJBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgaG9zdCBkaXN0cmlidXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdHJpbmdzIGNvbnNpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0b3IgSUQKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIHJlbGVhc2UsIGFzIHJlcG9ydGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bHNiX3JlbGVhc2U8L2ZpbGVuYW1lPiB0b29sCisgICAgICAgICAgICAgICAgICAgIG9yIGFzIHJlYWQgZnJvbSA8ZmlsZW5hbWU+L2V0Yy9sc2ItcmVsZWFzZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiBydW5uaW5nIGEgYnVpbGQgb24gVWJ1bnR1IDEyLjEwLCB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaXMgIlVidW50dS0xMi4xMCIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaW5mb3JtYXRpb24gaXMgdW5hYmxlIHRvIGJlIGRldGVybWluZWQsIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXNvbHZlcyB0byAiVW5rbm93biIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSBkZWZhdWx0IHRvIGlzb2xhdGUgbmF0aXZlIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICBzdGF0ZSBwYWNrYWdlcyBmb3IgZGlmZmVyZW50IGRpc3RyaWJ1dGlvbnMgKGUuZy4gdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAgICAgcHJvYmxlbXMgd2l0aCA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzKS4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgdmFyaWFibGUgaXMgY2hlY2tlZCBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TQU5JVFlfVEVTVEVEX0RJU1RST1MnPjxmaWxlbmFtZT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaWYgdGhhdCB2YXJpYWJsZSBpcyBzZXQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk0nPjxnbG9zc3Rlcm0+Tk08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE5NW2RvY10gPSAiTWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuICdubScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm08L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1OT19SRUNPTU1FTkRBVElPTlMnPjxnbG9zc3Rlcm0+Tk9fUkVDT01NRU5EQVRJT05TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBOT19SRUNPTU1FTkRBVElPTlNbZG9jXSA9ICJXaGVuIHNldCB0byAnMScsIG5vIHJlY29tbWVuZGVkIHBhY2thZ2VzIHdpbGwgYmUgaW5zdGFsbGVkLiBSZWFsaXplIHRoYXQgc29tZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBtaWdodCBiZSByZXF1aXJlZCBmb3IgY2VydGFpbiBzeXN0ZW0gZnVuY3Rpb25hbGl0eSwgc3VjaCBhcyBrZXJuZWwtbW9kdWxlcy4gSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gYWRkIHBhY2thZ2VzIHRvIElNQUdFX0lOU1RBTEwgYXMgbmVlZGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFByZXZlbnRzIGluc3RhbGxhdGlvbiBvZiBhbGwgInJlY29tbWVuZGVkLW9ubHkiIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBSZWNvbW1lbmRlZC1vbmx5IHBhY2thZ2VzIGFyZSBwYWNrYWdlcyBpbnN0YWxsZWQgb25seQorICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUlJFQ09NTUVORFMnPjxmaWxlbmFtZT5SUkVDT01NRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSkuCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIDxmaWxlbmFtZT5OT19SRUNPTU1FTkRBVElPTlM8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICB0byAiMSIgdHVybnMgdGhpcyBmZWF0dXJlIG9uOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE5PX1JFQ09NTUVOREFUSU9OUyA9ICIxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgZ2xvYmFsbHkgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgeW91IGNhbiBhdHRhY2ggaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBpbWFnZSByZWNpcGUgYnkgdXNpbmcgdGhlIHJlY2lwZSBuYW1lIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIE5PX1JFQ09NTUVOREFUSU9OU19wbi08cmVwbGFjZWFibGU+dGFyZ2V0X2ltYWdlPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgaWYgeW91IGNob29zZSB0byBub3QgaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyB1c2luZyB0aGlzIHZhcmlhYmxlIGFuZCBzb21lIG90aGVyIHBhY2thZ2VzIGFyZQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gdGhlbSAoaS5lLiBsaXN0ZWQgaW4gYSByZWNpcGUncworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSksIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGlnbm9yZXMgeW91cgorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB3aWxsIGluc3RhbGwgdGhlIHBhY2thZ2VzIHRvIGF2b2lkIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgcmVjb21tZW5kZWQgcGFja2FnZXMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIGtlcm5lbCBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgdXAgdG8geW91IHRvIGFkZCBwYWNrYWdlcyB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIHZhcmlhYmxlIGV4aXN0cyBvbmx5IHdoZW4gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIElQSyBhbmQgUlBNIHBhY2thZ2luZyBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICBTdXBwb3J0IGRvZXMgbm90IGV4aXN0IGZvciBERUIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIHJlbGF0ZWQgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk9IREQnPjxnbG9zc3Rlcm0+Tk9IREQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE5PSEREW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIC5oZGRpbWcgaW1hZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uaGRkaW1nPC9maWxlbmFtZT4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+Tk9IREQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyB1c2VkIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWJvb3RpbWcnPjxmaWxlbmFtZT5ib290aW1nPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIHRvICIxIiB0byBwcmV2ZW50IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LmhkZGltZzwvZmlsZW5hbWU+IGltYWdlIGZyb20gYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItTk9JU08nPjxnbG9zc3Rlcm0+Tk9JU088L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE5PSVNPW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIElTTyBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVNPIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPk5PSVNPPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgdXNlZCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ib290aW1nJz48ZmlsZW5hbWU+Ym9vdGltZzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSB2YXJpYWJsZSB0byAiMSIgdG8gcHJldmVudCB0aGUgSVNPIGltYWdlIGZyb20KKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRvIGVuYWJsZSBidWlsZGluZyBhbiBJU08gaW1hZ2UsIHNldCB0aGUgdmFyaWFibGUgdG8gIjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS1vJz48dGl0bGU+TzwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PQkpDT1BZJz48Z2xvc3N0ZXJtPk9CSkNPUFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9CSkNPUFlbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamNvcHknLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9iamNvcHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PQkpEVU1QJz48Z2xvc3N0ZXJtPk9CSkRVTVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9CSkRVTVBbZG9jXSA9ICJNaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4gJ29iamR1bXAnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtaW5pbWFsIGNvbW1hbmQgYW5kIGFyZ3VtZW50cyB0byBydW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9iamR1bXA8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFJz48Z2xvc3N0ZXJtPk9FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEVbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBiaW5jb25maWcuYmJjbGFzcyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSAic2VkIiBjb21tYW5kLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnJz48ZmlsZW5hbWU+YmluY29uZmlnPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlICJzZWQiIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBzZWQgY29tbWFuZCBhbHRlcnMgYW55IHBhdGhzIGluIGNvbmZpZ3VyYXRpb24gc2NyaXB0cworICAgICAgICAgICAgICAgICAgICB0aGF0IGhhdmUgYmVlbiBzZXQgdXAgZHVyaW5nIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgcmVzdWx0cyBpbiBhbGwgcGF0aHMgaW4gdGhlc2Ugc2NyaXB0cworICAgICAgICAgICAgICAgICAgICBiZWluZyBjaGFuZ2VkIHRvIHBvaW50IGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zeXNyb290cy88L2ZpbGVuYW1lPiBkaXJlY3Rvcnkgc28gdGhhdCBhbGwgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdXNlIHRoZSBzY3JpcHQgd2lsbCB1c2UgdGhlIGNvcnJlY3QgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBjcm9zcyBjb21waWxpbmcgbGF5b3V0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIDxmaWxlbmFtZT5tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBkZXRhaWxzIG9uIGhvdyB0aGlzIGNsYXNzIGFwcGxpZXMgdGhlc2UgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBzZWQgY29tbWFuZCBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmluY29uZmlnLmJiY2xhc3M8L2ZpbGVuYW1lPiBjbGFzcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmluY29uZmlnJz5CaW5hcnkgQ29uZmlndXJhdGlvbiBTY3JpcHRzIC0gPGZpbGVuYW1lPmJpbmNvbmZpZy5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9FX0lNUE9SVFMnPjxnbG9zc3Rlcm0+T0VfSU1QT1JUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT0VfSU1QT1JUU1tkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHVzZWQgdG8gdGVsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IFB5dGhvbiBtb2R1bGVzIHRvIGltcG9ydCBmb3IgZXZlcnkgUHl0aG9uIGZ1bmN0aW9uIHJ1biBieSB0aGUgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEFuIGludGVybmFsIHZhcmlhYmxlIHVzZWQgdG8gdGVsbCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSB3aGF0IFB5dGhvbiBtb2R1bGVzIHRvIGltcG9ydCBmb3IgZXZlcnkgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1biBieSB0aGUgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIEl0IGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1PRV9URVJNSU5BTCc+PGdsb3NzdGVybT5PRV9URVJNSU5BTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT0VfVEVSTUlOQUxbZG9jXSA9ICJDb250cm9scyBob3cgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3Bhd25zIGludGVyYWN0aXZlIHRlcm1pbmFscyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMgaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHNwYXducworICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSB0ZXJtaW5hbHMgb24gdGhlIGhvc3QgZGV2ZWxvcG1lbnQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIChlLmcuIHVzaW5nIHRoZSBCaXRCYWtlIGNvbW1hbmQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1jIGRldnNoZWxsPC9maWxlbmFtZT4gY29tbWFuZC1saW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWFwcGRldi1kZXZzaGVsbCc+VXNpbmcgYSBEZXZlbG9wbWVudCBTaGVsbDwvdWxpbms+IiBzZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHZhbHVlcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5PRV9URVJNSU5BTDwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGF1dG8KKyAgICAgZ25vbWUKKyAgICAgeGZjZQorICAgICByeHZ0CisgICAgIHNjcmVlbgorICAgICBrb25zb2xlCisgICAgIG5vbmUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLU9FUk9PVCc+PGdsb3NzdGVybT5PRVJPT1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIE9FUk9PVFtkb2NdID0gIlRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBpcyBzb3VyY2VkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0aGUgdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdCBpcyBzb3VyY2VkLgorICAgICAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBtYWtlcyB0d28gdG9wLWxldmVsIGJ1aWxkIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgIHNldHVwIHNjcmlwdHMgYXZhaWxhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCc+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgcnVuIG9uZSBvZiB0aGVzZSBzY3JpcHRzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk9FUk9PVDwvZmlsZW5hbWU+IHZhcmlhYmxlIHJlc29sdmVzIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkLAorICAgICAgICAgICAgICAgICAgICBzZWUgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT0xERVNUX0tFUk5FTCc+PGdsb3NzdGVybT5PTERFU1RfS0VSTkVMPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBPTERFU1RfS0VSTkVMW2RvY10gPSAiRGVjbGFyZXMgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgdGhhdCB0aGUgcHJvZHVjZWQgYmluYXJpZXMgbXVzdCBzdXBwb3J0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBwYXNzZWQgaW50byB0aGUgYnVpbGQgb2YgdGhlIEVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIEdOVSBDIExpYnJhcnkgKDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgdmFyaWFibGUgY29tZXMgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgY3VzdG9tIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItT1ZFUlJJREVTJz48Z2xvc3N0ZXJtPk9WRVJSSURFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgT1ZFUlJJREVTW2RvY10gPSAiQml0QmFrZSB1c2VzIE9WRVJSSURFUyB0byBjb250cm9sIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSB1c2VzIDxmaWxlbmFtZT5PVkVSUklERVM8L2ZpbGVuYW1lPiB0byBjb250cm9sCisgICAgICAgICAgICAgICAgICAgIHdoYXQgdmFyaWFibGVzIGFyZSBvdmVycmlkZGVuIGFmdGVyIEJpdEJha2UgcGFyc2VzCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBvdmVycmlkZXMgYXJlIGhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2NvbmRpdGlvbmFsLXN5bnRheC1vdmVycmlkZXMnPkNvbmRpdGlvbmFsIFN5bnRheCAoT3ZlcnJpZGVzKTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIG9mIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktcCc+PHRpdGxlPlA8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUCc+PGdsb3NzdGVybT5QPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQW2RvY10gPSAiVGhlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uLiBQIGlzIGNvbXByaXNlZCBvZiAke1BOfS0ke1BWfS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QPC9maWxlbmFtZT4gaXMgY29tcHJpc2VkIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtQTn0tJHtQVn0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfQVJDSCc+PGdsb3NzdGVybT5QQUNLQUdFX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGZpbGVuYW1lPlRVTkVfUEtHQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVuIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+QlVJTERfQVJDSDwvZmlsZW5hbWU+IHdoZW4gYnVpbGRpbmcgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0IGFuZCAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IiB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBpZiB5b3VyIHJlY2lwZSdzIG91dHB1dCBwYWNrYWdlcyBhcmUgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdG8gdGhlIHRhcmdldCBtYWNoaW5lIHJhdGhlciB0aGFuIGdlbmVyYWwgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIG1hY2hpbmUsIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0FSQ0g8L2ZpbGVuYW1lPiB0byB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfQVJDSCc+PGZpbGVuYW1lPk1BQ0hJTkVfQVJDSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgcmVjaXBlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfQVJDSFMnPjxnbG9zc3Rlcm0+UEFDS0FHRV9BUkNIUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9BUkNIU1tkb2NdID0gIkEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IGluIG9yZGVyIG9mIHByaW9yaXR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgdGhlIHRhcmdldCBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHNldCBhdXRvbWF0aWNhbGx5IGFuZCBzaG91bGQgbm90CisgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IGJlIGhhbmQtZWRpdGVkLgorICAgICAgICAgICAgICAgICAgICBFbnRyaWVzIGFyZSBzZXBhcmF0ZWQgdXNpbmcgc3BhY2VzIGFuZCBsaXN0ZWQgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgb2YgcHJpb3JpdHkuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+IGlzICJhbGwgYW55IG5vYXJjaAorICAgICAgICAgICAgICAgICAgICAke1BBQ0tBR0VfRVhUUkFfQVJDSFN9ICR7TUFDSElORV9BUkNIfSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9CRUZPUkVfUE4nPjxnbG9zc3Rlcm0+UEFDS0FHRV9CRUZPUkVfUE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfQkVGT1JFX1BOW2RvY10gPSAiRW5hYmxlcyBlYXNpbHkgYWRkaW5nIHBhY2thZ2VzIHRvIFBBQ0tBR0VTIGJlZm9yZSAke1BOfSBzbyB0aGF0IHRoZSBwYWNrYWdlcyBjYW4gcGljayB1cCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IHBhY2thZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxlcyBlYXNpbHkgYWRkaW5nIHBhY2thZ2VzIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA8ZmlsZW5hbWU+JHs8bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPn08L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzbyB0aGF0IHRob3NlIGFkZGVkIHBhY2thZ2VzIGNhbiBwaWNrIHVwIGZpbGVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRV9DTEFTU0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX0NMQVNTRVNbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZSB3aGVuIHBhY2thZ2luZyBkYXRhLiBJdCBpcyBzZXQgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSwgd2hpY2ggaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBmb3VuZCBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmNvbmY8L2ZpbGVuYW1lPiBmb2xkZXIgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHVzZXMgd2hlbiBwYWNrYWdpbmcgZGF0YS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX3JwbSBwYWNrYWdlX2RlYiBwYWNrYWdlX2lwayBwYWNrYWdlX3RhciIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGlsZSBpdCBpcyBhIGxlZ2FsIG9wdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFja2FnZV90YXI8L2ZpbGVuYW1lPiBjbGFzcyBpcyBicm9rZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZG8gbm90IHVzZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgb25seSB0aGUgZmlyc3QgYXJndW1lbnQgaW4gdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgYXMgdGhlIHBhY2thZ2UgbWFuYWdlciB3aGVuIGNyZWF0aW5nIHlvdXIgaW1hZ2Ugb3IgU0RLLgorICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBwYWNrYWdlcyB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgYW55IGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnaW5nIGNsYXNzZXMgeW91IHNwZWNpZnkuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIHRoZSBmb2xsb3dpbmcgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX2lwayIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBJUEsgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgIHRvIGNyZWF0ZSB5b3VyIGltYWdlIG9yIFNESy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHBhY2thZ2luZyBhbmQgYnVpbGQgcGVyZm9ybWFuY2UgZWZmZWN0cworICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyIGluIHVzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcGFja2FnZSc+PGZpbGVuYW1lPnBhY2thZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEVbZG9jXSA9ICJEZXRlcm1pbmVzIGhvdyB0byBzcGxpdCB1cCB0aGUgYmluYXJ5IGFuZCBkZWJ1ZyBpbmZvcm1hdGlvbiB3aGVuIGNyZWF0aW5nICotZGJnIHBhY2thZ2VzIHRvIGJlIHVzZWQgd2l0aCB0aGUgR05VIFByb2plY3QgRGVidWdnZXIgKEdEQikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBob3cgdG8gc3BsaXQgdXAgdGhlIGJpbmFyeSBhbmQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgd2hlbiBjcmVhdGluZyA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlcyB0byBiZQorICAgICAgICAgICAgICAgICAgICB1c2VkIHdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRTwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGNvbnRyb2wgd2hlcmUgZGVidWcgaW5mb3JtYXRpb24sIHdoaWNoIGNhbiBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgIG9yIGV4Y2x1ZGUgc291cmNlIGZpbGVzLCBpcyBzdG9yZWQ6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5kZWJ1ZyI6IERlYnVnIHN5bWJvbCBmaWxlcyBhcmUgcGxhY2VkIG5leHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYmluYXJ5IGluIGEgPGZpbGVuYW1lPi5kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG9uIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgYmluYXJ5IGlzIGluc3RhbGxlZCBpbnRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9iaW48L2ZpbGVuYW1lPiwgdGhlIGNvcnJlc3BvbmRpbmcgZGVidWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgZmlsZXMgYXJlIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluLy5kZWJ1ZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBmaWxlcyBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc3JjL2RlYnVnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVidWctZmlsZS1kaXJlY3RvcnkiOiBEZWJ1ZyBzeW1ib2wgZmlsZXMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkIHVuZGVyIDxmaWxlbmFtZT4vdXNyL2xpYi9kZWJ1ZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCwgYW5kIHNlcGFyYXRlZCBieSB0aGUgcGF0aCBmcm9tIHdoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJpbmFyeSBpcyBpbnN0YWxsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgYmluYXJ5IGlzIGluc3RhbGxlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vYmluPC9maWxlbmFtZT4sIHRoZSBjb3JyZXNwb25kaW5nIGRlYnVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9scyBhcmUgaW5zdGFsbGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvbGliL2RlYnVnL2JpbjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBmaWxlcyBhcmUgcGxhY2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3Ivc3JjL2RlYnVnPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlYnVnLXdpdGhvdXQtc3JjIjogVGhlIHNhbWUgYmVoYXZpb3IgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLmRlYnVnIiBwcmV2aW91c2x5IGRlc2NyaWJlZCB3aXRoIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG5vIHNvdXJjZSBmaWxlcyBhcmUgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPi4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCBkZWJ1Z2dpbmcgdXNpbmcgR0RCIGJ5IHJlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwbGF0ZGV2LWdkYi1yZW1vdGVkZWJ1Zyc+RGVidWdnaW5nIFdpdGggdGhlIEdOVSBQcm9qZWN0IERlYnVnZ2VyIChHREIpIFJlbW90ZWx5PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGdsb3NzdGVybT5QQUNLQUdFX0VYQ0xVREU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfRVhDTFVERVtkb2NdID0gIlBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgaW5zdGFsbGF0aW9uLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGlzIHJlcXVpcmVkLCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcGFja2FnZXMgdGhhdCBzaG91bGQgbm90IGJlIGluc3RhbGxlZCBpbnRvIGFuIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFX0VYQ0xVREUgPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+cGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4gLi4uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgZ2xvYmFsbHkgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3IgeW91IGNhbiBhdHRhY2ggaXQgdG8KKyAgICAgICAgICAgICAgICAgICAgYSBzcGVjaWZpYyBpbWFnZSByZWNpcGUgYnkgdXNpbmcgdGhlIHJlY2lwZSBuYW1lIG92ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfRVhDTFVERV9wbi08cmVwbGFjZWFibGU+dGFyZ2V0X2ltYWdlPC9yZXBsYWNlYWJsZT4gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBjaG9vc2UgdG8gbm90IGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgYSBwYWNrYWdlIHVzaW5nIHRoaXMgdmFyaWFibGUgYW5kIHNvbWUgb3RoZXIgcGFja2FnZSBpcworICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQgb24gaXQgKGkuZS4gbGlzdGVkIGluIGEgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz48ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUpLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBnZW5lcmF0ZXMgYSBmYXRhbAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIGJ1aWxkIHN5c3RlbSBoYWx0cyB0aGUgcHJvY2VzcyB3aXRoIGEgZmF0YWwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IsIHlvdSBjYW4gdXNlIHRoZSB2YXJpYWJsZSB3aXRoIGFuIGl0ZXJhdGl2ZQorICAgICAgICAgICAgICAgICAgICBkZXZlbG9wbWVudCBwcm9jZXNzIHRvIHJlbW92ZSBzcGVjaWZpYyBjb21wb25lbnRzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgSVBLIGFuZCBSUE0gcGFja2FnaW5nIGJhY2tlbmQuCisgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQgZG9lcyBub3QgZXhpc3QgZm9yIERFQi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBmb3IgcmVsYXRlZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0VYVFJBX0FSQ0hTJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfRVhUUkFfQVJDSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfRVhUUkFfQVJDSFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlCisgICAgICAgICAgICAgICAgICAgIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycyBzdWNoIGFzIFhTY2FsZSBhbmQgQVJNOTI2LUVKUy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX0dST1VQJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfR1JPVVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfR1JPVVBbZG9jXSA9ICJEZWZpbmVzIG9uZSBvciBtb3JlIHBhY2thZ2VzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2Ugd2hlbiBhIHNwZWNpZmljIGl0ZW0gaXMgaW5jbHVkZWQgaW4gSU1BR0VfRkVBVFVSRVMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QQUNLQUdFX0dST1VQPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRkVBVFVSRV9QQUNLQUdFUyc+PGZpbGVuYW1lPkZFQVRVUkVfUEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgdmFyaWFibGUgZGVzY3JpcHRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GRUFUVVJFX1BBQ0tBR0VTPC9maWxlbmFtZT4gZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBpZiB5b3UgdXNlIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRV9HUk9VUDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpc3N1ZXMgYSB3YXJuaW5nCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRV9JTlNUQUxMJz48Z2xvc3N0ZXJtPlBBQ0tBR0VfSU5TVEFMTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFDS0FHRV9JTlNUQUxMW2RvY10gPSAiTGlzdCBvZiB0aGUgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIGltYWdlLiBUaGUgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQgYW5kIHVzZXMgSU1BR0VfSU5TVEFMTCBhcyBwYXJ0IG9mIHRoZSBsaXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBsaXN0IG9mIHBhY2thZ2VzIHBhc3NlZCB0byB0aGUgcGFja2FnZSBtYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgIGZvciBpbnN0YWxsYXRpb24gaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHBhY2thZ2UgbWFuYWdlciBjb250cm9scyBhY3R1YWwgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIGFsbCBwYWNrYWdlcywgdGhlIGxpc3Qgb2YgcGFja2FnZXMgcGFzc2VkIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFX0lOU1RBTEw8L2ZpbGVuYW1lPiBpcyBub3QgdGhlIGZpbmFsIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgb2YgcGFja2FnZXMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGludGVybmFsIHRvIHRoZSBpbWFnZSBjb25zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0lOU1RBTEwnPjxmaWxlbmFtZT5JTUFHRV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHRvIHNwZWNpZnkgcGFja2FnZXMgZm9yIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdoZW4gd29ya2luZyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdpbWFnZXMtY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyc+PGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gd29ya2luZyB3aXRoIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcykKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UsIHVzZSB0aGUgPGZpbGVuYW1lPlBBQ0tBR0VfSU5TVEFMTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSc+PGdsb3NzdGVybT5QQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWVtkb2NdID0gIkxpc3Qgb2YgcGFja2FnZXMgYXR0ZW1wdGVkIHRvIGJlIGluc3RhbGxlZCB3aGVuIGNyZWF0aW5nIGFuIGltYWdlLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGZhaWxzIHRvIGluc3RhbGwsIHRoZSBidWlsZCBzeXN0ZW0gZG9lcyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IuIFRoaXMgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBhdHRlbXB0cyB0byBpbnN0YWxsIHdoZW4gY3JlYXRpbmcgYW4gaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIElmIGEgbGlzdGVkIHBhY2thZ2UgZmFpbHMgdG8gaW5zdGFsbCwgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyBnZW5lcmFsbHkgbm90IHVzZXItZGVmaW5lZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MnPjxnbG9zc3Rlcm0+UEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyBydW4gdG8gcHJlLXByb2Nlc3MgdGhlIFBLR0QgZGlyZWN0b3J5IHByaW9yIHRvIHNwbGl0dGluZyB0aGUgZmlsZXMgb3V0IHRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgcnVuIHRvIHByZS1wcm9jZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEtHRCc+PGZpbGVuYW1lPlBLR0Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHByaW9yIHRvIHNwbGl0dGluZyB0aGUgZmlsZXMgb3V0IHRvIGluZGl2aWR1YWwKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRUNPTkZJRyc+PGdsb3NzdGVybT5QQUNLQUdFQ09ORklHPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFQ09ORklHW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZworICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFQ09ORklHPC9maWxlbmFtZT4gYmxvY2tzIGFyZSBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgIGluIHJlY2lwZXMgd2hlbiB5b3Ugc3BlY2lmeSBmZWF0dXJlcyBhbmQgdGhlbiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkZWZpbmUgZmVhdHVyZSBiZWhhdmlvcnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGJhc2ljIGJsb2NrIHN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHID8/PSAiZjEgZjIgZjMgLi4uIgorICAgICBQQUNLQUdFQ09ORklHW2YxXSA9ICItLXdpdGgtZjEsLS13aXRob3V0LWYxLGJ1aWxkLWRlcHMtZjEscnQtZGVwcy1mMSIKKyAgICAgUEFDS0FHRUNPTkZJR1tmMl0gPSAiLS13aXRoLWYyLC0td2l0aG91dC1mMixidWlsZC1kZXBzLWYyLHJ0LWRlcHMtZjIiCisgICAgIFBBQ0tBR0VDT05GSUdbZjNdID0gIi0td2l0aC1mMywtLXdpdGhvdXQtZjMsYnVpbGQtZGVwcy1mMyxydC1kZXBzLWYzIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGl0c2VsZiBzcGVjaWZpZXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgdG8gZW5hYmxlLgorICAgICAgICAgICAgICAgICAgICBGb2xsb3dpbmcgdGhlIGZlYXR1cmVzLCB5b3UgY2FuIGRldGVybWluZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAgICAgICAgICAgICAgZWFjaCBmZWF0dXJlIGJ5IHByb3ZpZGluZyB1cCB0byBmb3VyIG9yZGVyLWRlcGVuZGVudAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsIHdoaWNoIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIG9taXQgYW55IGFyZ3VtZW50IHlvdSBsaWtlIGJ1dCBtdXN0IHJldGFpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGluZyBjb21tYXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQgYW5kIHNwZWNpZmllcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RXh0cmEgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPjxmaWxlbmFtZT5FWFRSQV9PRUNPTkY8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHRyYSBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byA8ZmlsZW5hbWU+RVhUUkFfT0VDT05GPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGRpdGlvbmFsIGJ1aWxkIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+PGZpbGVuYW1lPkRFUEVORFM8L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgYWRkZWQgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BZGRpdGlvbmFsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGFkZGVkIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPiBibG9jayB0YWtlbiBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGlicnN2ZzwvZmlsZW5hbWU+IHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlIHRoZSBmZWF0dXJlIGlzIDxmaWxlbmFtZT5jcm9jbzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBoYXMgdGhyZWUgYXJndW1lbnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSBmZWF0dXJlJ3MKKyAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUEFDS0FHRUNPTkZJRyA/Pz0gImNyb2NvIgorICAgICBQQUNLQUdFQ09ORklHW2Nyb2NvXSA9ICItLXdpdGgtY3JvY28sLS13aXRob3V0LWNyb2NvLGxpYmNyb2NvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+LS13aXRoLWNyb2NvPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJjcm9jbzwvZmlsZW5hbWU+IGFyZ3VtZW50cyBhcHBseSBvbmx5IGlmCisgICAgICAgICAgICAgICAgICAgIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgPGZpbGVuYW1lPi0td2l0aC1jcm9jbzwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IGFyZ3VtZW50IGxpc3QgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJjcm9jbzwvZmlsZW5hbWU+IGlzIGFkZGVkIHRvCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkIHNheSB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIGEgPGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+IGZpbGUgaW4gYW5vdGhlciBsYXllciwgdGhlbgorICAgICAgICAgICAgICAgICAgICB0aGUgc2Vjb25kIGFyZ3VtZW50IDxmaWxlbmFtZT4tLXdpdGhvdXQtY3JvY288L2ZpbGVuYW1lPiBpcworICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LS13aXRoLWNyb2NvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNpYyA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGRlc2NyaWJlZCBob2xkcyB0cnVlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3UKKyAgICAgICAgICAgICAgICAgICAgYXJlIGNyZWF0aW5nIGEgYmxvY2sgb3IgY2hhbmdpbmcgYSBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBjcmVhdGluZyBhIGJsb2NrLCB1c2UgdGhlIHN0cnVjdHVyZSBpbnNpZGUgeW91cgorICAgICAgICAgICAgICAgICAgICByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGNoYW5nZSBhbiBleGlzdGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUNPTkZJRzwvZmlsZW5hbWU+IGJsb2NrLCB5b3UgY2FuIGRvIHNvCisgICAgICAgICAgICAgICAgICAgIG9uZSBvZiB0d28gd2F5czoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QXBwZW5kIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgYW4gYXBwZW5kIGZpbGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+PGZpbGVuYW1lPi5iYmFwcGVuZDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4geW91ciBsYXllciBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBQ0tBR0VDT05GSUc8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGVpdGhlciBjb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUc9ImY0IGY1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciwgeW91IGNhbiBqdXN0IGFwcGVuZCB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX2FwcGVuZCA9ICIgZjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uIGZpbGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBpZGVudGljYWwgdG8gY2hhbmdpbmcgdGhlIGJsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCBhbiBhcHBlbmQgZmlsZSBleGNlcHQgeW91IGVkaXQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PHJlcGxhY2VhYmxlPm15ZGlzdHJvPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhcHBlbmQgZmlsZXMgcHJldmlvdXNseSBkZXNjcmliZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBlaXRoZXIgY29tcGxldGVseSBvdmVycmlkZSB0aGUgdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQQUNLQUdFQ09ORklHX3BuLTxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT49ImY0IGY1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPciwgeW91IGNhbiBqdXN0IGFtZW5kIHRoZSB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLTxyZXBsYWNlYWJsZT5yZWNpcGVuYW1lPC9yZXBsYWNlYWJsZT4gPSAiIGY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSc+PGdsb3NzdGVybT5QQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZW2RvY10gPSAiUHJldmVudHMgYXV0b21hdGljIGNyZWF0aW9uIG9mIHRoZSBub3JtYWwgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBzdWNoIGFzIC1kZXYgYW5kIC1kYmcgaW4gYSBwYWNrYWdlZ3JvdXAgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBhY2thZ2Vncm91cCc+PGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgc2V0dGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWTwvZmlsZW5hbWU+IHRvCisgICAgICAgICAgICAgICAgICAgICIxIiBzcGVjaWZpZXMgdGhhdCB0aGUgbm9ybWFsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gPGZpbGVuYW1lPi1kZXY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi1kYmc8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKSBzaG91bGQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cDwvZmlsZW5hbWU+IHJlY2lwZSwgd2hpY2ggaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVMnPjxnbG9zc3Rlcm0+UEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgY3JlYXRlZCBmcm9tIHRoZSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgY3JlYXRlZCBmcm9tIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtQTn0tZGJnICR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZG9jICR7UE59LWxvY2FsZSAke1BBQ0tBR0VfQkVGT1JFX1BOfSAke1BOfQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNfRFlOQU1JQyc+PGdsb3NzdGVybT5QQUNLQUdFU19EWU5BTUlDPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQUNLQUdFU19EWU5BTUlDW2RvY10gPSAiQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZG9lcyBub3QgYWN0dWFsbHkgc2F0aXNmeSB0aGUgZGVwZW5kZW5jaWVzLCBpdCBvbmx5IHN0YXRlcyB0aGF0CisgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIGJlIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGEgaGFyZCwgcnVudGltZSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPjxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+PC9saW5rPikKKyAgICAgICAgICAgICAgICAgICAgb2YgYW5vdGhlciBwYWNrYWdlIGlzIHNhdGlzZmllZAorICAgICAgICAgICAgICAgICAgICBhdCBidWlsZCB0aW1lIHRocm91Z2ggdGhlIDxmaWxlbmFtZT5QQUNLQUdFU19EWU5BTUlDPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIGJ1dCBhIHBhY2thZ2Ugd2l0aCB0aGUgbW9kdWxlIG5hbWUgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjZWQsIHRoZW4gdGhlIG90aGVyIHBhY2thZ2Ugd2lsbCBiZSBicm9rZW4uCisgICAgICAgICAgICAgICAgICAgIFRodXMsIGlmIHlvdSBhdHRlbXB0IHRvIGluY2x1ZGUgdGhhdCBwYWNrYWdlIGluIGFuIGltYWdlLAorICAgICAgICAgICAgICAgICAgICB5b3Ugd2lsbCBnZXQgYSBkZXBlbmRlbmN5IGZhaWx1cmUgZnJvbSB0aGUgcGFja2FnaW5nIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1yb290ZnMnPjxmaWxlbmFtZT5kb19yb290ZnM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHN1Y2ggYSBzaXR1YXRpb24gY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGFuZCB0aGUgcGFja2FnZSB0aGF0IGlzIG5vdCBjcmVhdGVkIGlzIHZhbGlkCisgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGRlcGVuZGVuY3kgYmVpbmcgc2F0aXNmaWVkLCB0aGVuIHlvdSBzaG91bGQgdXNlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVDT01NRU5EUyc+PGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIChhIHNvZnQgcnVudGltZSBkZXBlbmRlbmN5KSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHdoZW4geW91IGFyZSBzcGxpdHRpbmcgcGFja2FnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2hhbmRsaW5nLW9wdGlvbmFsLW1vZHVsZS1wYWNrYWdpbmcnPkhhbmRsaW5nIE9wdGlvbmFsIE1vZHVsZSBQYWNrYWdpbmc8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFDS0FHRVNQTElURlVOQ1MnPjxnbG9zc3Rlcm0+UEFDS0FHRVNQTElURlVOQ1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBQ0tBR0VTUExJVEZVTkNTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgcnVuIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzcGxpdHRpbmcgb2YgZmlsZXMgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHJ1biB0byBwZXJmb3JtIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIG9mIGZpbGVzIGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgUmVjaXBlcyBjYW4gZWl0aGVyIHByZXBlbmQgdG8gdGhpcyB2YXJpYWJsZSBvciBwcmVwZW5kCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSA8ZmlsZW5hbWU+cG9wdWxhdGVfcGFja2FnZXM8L2ZpbGVuYW1lPiBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBwZXJmb3JtIGFkZGl0aW9uYWwgcGFja2FnZSBzcGxpdHRpbmcuCisgICAgICAgICAgICAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGUgZnVuY3Rpb24gc2hvdWxkIHNldAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPjxmaWxlbmFtZT5QQUNLQUdFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz48ZmlsZW5hbWU+RklMRVM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+PGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBwYWNrYWdpbmcgdmFyaWFibGVzIGFwcHJvcHJpYXRlbHkgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgcGVyZm9ybSB0aGUgZGVzaXJlZCBzcGxpdHRpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEFSQUxMRUxfTUFLRSc+PGdsb3NzdGVybT5QQVJBTExFTF9NQUtFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQVJBTExFTF9NQUtFW2RvY10gPSAiU3BlY2lmaWVzIGV4dHJhIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtYWtlIGNvbW1hbmQgZHVyaW5nIHRoZSBjb21waWxlIHRhc2tzLiBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgaW4gdGhlIGZvcm0gLWogeCwgd2hlcmUgeCByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIG1ha2UgY2FuIHJ1bi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBjb21waWxhdGlvbiBvbiB0aGUgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtICItaiA8cmVwbGFjZWFibGU+eDwvcmVwbGFjZWFibGU+IiwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPiByZXByZXNlbnRzIHRoZSBtYXhpbXVtCisgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY2FuCisgICAgICAgICAgICAgICAgICAgIHJ1bi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseQorICAgICAgICAgICAgICAgICAgICBzZXRzIHRoaXMgdmFyaWFibGUgdG8gYmUgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjb3JlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHVzZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IGV4cGVyaWVuY2VzIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlcyBkdXJpbmcgdGhlIDxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgdGhhdCByZXN1bHQgaW4gcmFjZSBjb25kaXRpb25zLCB5b3UgY2FuIGNsZWFyCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlBBUkFMTEVMX01BS0U8L2ZpbGVuYW1lPiB2YXJpYWJsZSB3aXRoaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZWNpcGUgYXMgYSB3b3JrYXJvdW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGVidWdnaW5nLXBhcmFsbGVsLW1ha2UtcmFjZXMnPkRlYnVnZ2luZyBQYXJhbGxlbCBNYWtlIFJhY2VzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHNvY2tldCBzeXN0ZW1zIChpLmUuIG9uZSBDUFUpLCB5b3Ugc2hvdWxkIG5vdAorICAgICAgICAgICAgICAgICAgICBoYXZlIHRvIG92ZXJyaWRlIHRoaXMgdmFyaWFibGUgdG8gZ2FpbiBvcHRpbWFsIHBhcmFsbGVsaXNtCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyBidWlsZHMuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIHZlcnkgbGFyZ2Ugc3lzdGVtcyB0aGF0IGVtcGxveQorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBwaHlzaWNhbCBDUFVzLCB5b3UgbWlnaHQgd2FudCB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgbm90CisgICAgICAgICAgICAgICAgICAgIHNldCBoaWdoZXIgdGhhbiAiLWogMjAiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVlZGluZyB1cCBidWlsZHMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3NwZWVkaW5nLXVwLXRoZS1idWlsZCc+U3BlZWRpbmcgVXAgdGhlIEJ1aWxkPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQVJBTExFTF9NQUtFSU5TVCc+PGdsb3NzdGVybT5QQVJBTExFTF9NQUtFSU5TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEFSQUxMRUxfTUFLRUlOU1RbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBpbnN0YWxsIGNvbW1hbmQgZHVyaW5nIHRoZSBkb19pbnN0YWxsIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYWtlIGluc3RhbGw8L2ZpbGVuYW1lPiBjb21tYW5kIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWluc3RhbGwnPjxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQVJBTExFTF9NQUtFJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgc29mdHdhcmUgYmVpbmcgYnVpbHQgZXhwZXJpZW5jZXMgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19pbnN0YWxsPC9maWxlbmFtZT4gdGFzayB0aGF0IHJlc3VsdCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmFjZSBjb25kaXRpb25zLCB5b3UgY2FuIGNsZWFyIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBBUkFMTEVMX01BS0VJTlNUPC9maWxlbmFtZT4gdmFyaWFibGUgd2l0aGluCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlIGFzIGEgd29ya2Fyb3VuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2RlYnVnZ2luZy1wYXJhbGxlbC1tYWtlLXJhY2VzJz5EZWJ1Z2dpbmcgUGFyYWxsZWwgTWFrZSBSYWNlczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QQVRDSFJFU09MVkUnPjxnbG9zc3Rlcm0+UEFUQ0hSRVNPTFZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQQVRDSFJFU09MVkVbZG9jXSA9ICJFbmFibGUgb3IgZGlzYWJsZSBpbnRlcmFjdGl2ZSBwYXRjaCByZXNvbHV0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGFjdGlvbiB0byB0YWtlIHdoZW4gYSBwYXRjaCBmYWlscy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZSB0byBvbmUgb2YgdHdvIHZhbHVlczogIm5vb3AiIGFuZAorICAgICAgICAgICAgICAgICAgICAidXNlciIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICJub29wIiBjYXVzZXMgdGhlIGJ1aWxkIHRvIHNpbXBseSBmYWlsCisgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gY2Fubm90IHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgICAgICBhcHBseSBhIHBhdGNoLgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIHRoZSB2YWx1ZSB0byAidXNlciIgY2F1c2VzIHRoZSBidWlsZCBzeXN0ZW0gdG8KKyAgICAgICAgICAgICAgICAgICAgbGF1bmNoIGEgc2hlbGwgYW5kIHBsYWNlcyB5b3UgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBtYW51YWxseSByZXNvbHZlIHRoZSBjb25mbGljdHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBBVENIVE9PTCc+PGdsb3NzdGVybT5QQVRDSFRPT0w8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBBVENIVE9PTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdXRpbGl0eSB1c2VkIHRvIGFwcGx5IHBhdGNoZXMgZm9yIGEgcmVjaXBlIGR1cmluZyBkb19wYXRjaC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYXRjaCc+PGZpbGVuYW1lPmRvX3BhdGNoPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBvbmUgb2YgdGhyZWUgdXRpbGl0aWVzOiAicGF0Y2giLCAicXVpbHQiLCBvcgorICAgICAgICAgICAgICAgICAgICAiZ2l0Ii4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdXRpbGl0eSB1c2VkIGlzICJxdWlsdCIgZXhjZXB0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgcXVpbHQtbmF0aXZlIHJlY2lwZSBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIHF1aWx0IHRvb2wgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGltZSBxdWlsdC1uYXRpdmUgaXMgYmVpbmcgcGF0Y2hlZCwgaXQgdXNlcyAicGF0Y2giLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byB1c2UgYW4gYWx0ZXJuYXRpdmUgcGF0Y2hpbmcgdG9vbCwgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgcmVjaXBlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBVENIVE9PTCA9ICJwYXRjaCIKKyAgICAgUEFUQ0hUT09MID0gInF1aWx0IgorICAgICBQQVRDSFRPT0wgPSAiZ2l0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEUnPjxnbG9zc3Rlcm0+UEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBFW2RvY10gPSAiVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICcwJy4gVGhlIGZpZWxkIGlzIHVzZWQgdG8gbWFrZSB1cGdyYWRlcyBwb3NzaWJsZSB3aGVuIHRoZSB2ZXJzaW9uaW5nIHNjaGVtZSBjaGFuZ2VzIGluIHNvbWUgYmFja3dhcmRzIGluY29tcGF0aWJsZSB3YXkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgdW5zZXQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUKKyAgICAgICAgICAgICAgICAgICAgd2F5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBGJz48Z2xvc3N0ZXJtPlBGPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQRltkb2NdID0gIlNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uIG51bWJlcnMuIFRoaXMgdmFyaWFibGUgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSByZWNpcGUgb3IgcGFja2FnZSBuYW1lIGFuZCBpbmNsdWRlcyBhbGwgdmVyc2lvbiBhbmQgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVycyAoaS5lLiA8ZmlsZW5hbWU+Z2xpYmMtMi4xMy1yMjArc3ZucjE1NTA4LzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmFzaC00LjItcjEvPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIGNvbXByaXNlZCBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz59LSR7PGxpbmsgbGlua2VuZD0ndmFyLUVYVEVORFBFJz5FWFRFTkRQRTwvbGluaz59JHs8bGluayBsaW5rZW5kPSd2YXItUFYnPlBWPC9saW5rPn0tJHs8bGluayBsaW5rZW5kPSd2YXItUFInPlBSPC9saW5rPn0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBJWEJVRl9QQUNLQUdFUyc+PGdsb3NzdGVybT5QSVhCVUZfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBJWEJVRl9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHBpeGJ1ZmNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBwaXhidWYgbG9hZGVycyB1c2VkIHdpdGggZ2RrLXBpeGJ1Zi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBpeGJ1ZmNhY2hlJz48ZmlsZW5hbWU+cGl4YnVmY2FjaGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyB0aGF0IGNvbnRhaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIHBpeGJ1ZiBsb2FkZXJzIHVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2RrLXBpeGJ1ZjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPnBpeGJ1ZmNhY2hlPC9maWxlbmFtZT4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgYXNzdW1lcyB0aGF0IHRoZSBsb2FkZXJzIGFyZSBpbiB0aGUgcmVjaXBlJ3MgbWFpbiBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIChpLmUuIDxmaWxlbmFtZT4kezwvZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoaXMgdmFyaWFibGUgaWYgdGhlIGxvYWRlcnMgeW91IG5lZWQgYXJlIGluIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIHRoYXQgbWFpbiBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLRyc+PGdsb3NzdGVybT5QS0c8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR1tkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBjcmVhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiBXaGVuIHlvdSB1c2UgdGhpcyB2YXJpYWJsZSwgeW91IG11c3QgdXNlIGEgcGFja2FnZSBuYW1lIG92ZXJyaWRlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgcGFja2FnZSBjcmVhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgdGhlIDxmaWxlbmFtZT5QS0c8L2ZpbGVuYW1lPiB2YXJpYWJsZSwgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IHVzZSBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGViaWFuJz48ZmlsZW5hbWU+ZGViaWFuPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHJlbmFtZXMgdGhlIG91dHB1dCBwYWNrYWdlLCBpdCBkb2VzIHNvIGJ5IHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBLR188cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR19DT05GSUdfUEFUSCc+PGdsb3NzdGVybT5QS0dfQ09ORklHX1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR19DT05GSUdfUEFUSFtkb2NdID0gIlBhdGggdG8gcGtnLWNvbmZpZyBmaWxlcyBmb3IgdGhlIGN1cnJlbnQgYnVpbGQgY29udGV4dC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IGZpbGVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCBidWlsZCBjb250ZXh0LgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+IHJlYWRzIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHRCc+PGdsb3NzdGVybT5QS0dEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dEW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIGZpbGVzIHRvIGJlIHBhY2thZ2VkIGJlZm9yZSB0aGV5IGFyZSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIGZpbGVzIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VkIGJlZm9yZSB0aGV5IGFyZSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IGNoYW5nZSB0aGlzIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHREFUQV9ESVInPjxnbG9zc3Rlcm0+UEtHREFUQV9ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR0RBVEFfRElSW2RvY10gPSAiUG9pbnRzIHRvIGEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gYSBzaGFyZWQsIGdsb2JhbC1zdGF0ZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBkYXRhCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgdGhlIHBhY2thZ2luZyBwcm9jZXNzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2VkYXRhJz48ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBwYWNrYWdlcyBkYXRhIGZvciBlYWNoIHJlY2lwZSBhbmQgaW5zdGFsbHMgaXQgaW50bworICAgICAgICAgICAgICAgICAgICB0aGlzIHRlbXBvcmFyeSwgc2hhcmVkIGFyZWEuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtTVEFHSU5HX0RJUl9IT1NUfS9wa2dkYXRhCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRG8gbm90IGNoYW5nZSB0aGlzIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHREVTVCc+PGdsb3NzdGVybT5QS0dERVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dERVNUW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZAorICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGV5IGhhdmUgYmVlbiBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGRlZmF1bHRzIHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJHtXT1JLRElSfS9wYWNrYWdlcy1zcGxpdAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFVuZGVyIHRoaXMgZGlyZWN0b3J5LCB0aGUgYnVpbGQgc3lzdGVtIGNyZWF0ZXMKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgZm9yIGVhY2ggcGFja2FnZSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0RFU1RXT1JLJz48Z2xvc3N0ZXJtPlBLR0RFU1RXT1JLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dERVNUV09SS1tkb2NdID0gIlBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUgZG9fcGFja2FnZSB0YXNrIHRvIHdyaXRlIG91dHB1dCBmcm9tIHRoZSBkb19wYWNrYWdlZGF0YSB0YXNrLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byBhIHRlbXBvcmFyeSB3b3JrIGFyZWEgdXNlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2UnPjxmaWxlbmFtZT5kb19wYWNrYWdlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2sgdG8gd3JpdGUgb3V0cHV0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlZGF0YSc+PGZpbGVuYW1lPmRvX3BhY2thZ2VkYXRhPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHRhc2suCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+UEtHREVTVFdPUks8L2ZpbGVuYW1lPiBsb2NhdGlvbiBkZWZhdWx0cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICR7V09SS0RJUn0vcGtnZGF0YQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+ZG9fcGFja2FnZWRhdGE8L2ZpbGVuYW1lPiB0YXNrIHRoZW4gcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRhdGEgaW4gdGhlIHRlbXBvcmFyeSB3b3JrIGFyZWEgYW5kIGluc3RhbGxzIGl0IGludG8gYQorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgZGlyZWN0b3J5IHBvaW50ZWQgdG8gYnkKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBLR0RBVEFfRElSJz48ZmlsZW5hbWU+UEtHREFUQV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBjaGFuZ2UgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBLR0UnPjxnbG9zc3Rlcm0+UEtHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUEtHRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGVwb2NoIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgPGZpbGVuYW1lPlBLR0U8L2ZpbGVuYW1lPiBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBFJz48ZmlsZW5hbWU+UEU8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUEtHUic+PGdsb3NzdGVybT5QS0dSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQS0dSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+UEtHUjwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QS0dWJz48Z2xvc3N0ZXJtPlBLR1Y8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBLR1ZbZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnVpbHQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIG91dHB1dCBwYWNrYWdlIGJ1aWx0IGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+UEtHVjwvZmlsZW5hbWU+IGlzIHNldCB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE4nPjxnbG9zc3Rlcm0+UE48L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBOW2RvY10gPSAiUE4gcmVmZXJzIHRvIGEgcmVjaXBlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXMgaW5wdXQgdG8gY3JlYXRlIGEgcGFja2FnZS4gSXQgcmVmZXJzIHRvIGEgcGFja2FnZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSBjcmVhdGVkIG9yIHByb2R1Y2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgY2FuIGhhdmUgdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQ6IGEgcmVjaXBlCisgICAgICAgICAgICAgICAgICAgIG5hbWUgb3IgYSByZXN1bHRpbmcgcGFja2FnZSBuYW1lLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiByZWZlcnMgdG8gYSByZWNpcGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgdXNlZAorICAgICAgICAgICAgICAgICAgICBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcyBpbnB1dCB0byBjcmVhdGUgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBpcyBub3JtYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgcmVjaXBlIGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cGF0XzIuMC4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAiZXhwYXQiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgcmVmZXJzIHRvIGEgcGFja2FnZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSBjcmVhdGVkIG9yIHByb2R1Y2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiBhcHBsaWNhYmxlLCB0aGUgPGZpbGVuYW1lPlBOPC9maWxlbmFtZT4gdmFyaWFibGUgYWxzbyBjb250YWlucyBhbnkgc3BlY2lhbAorICAgICAgICAgICAgICAgICAgICBzdWZmaXggb3IgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdXNpbmcgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiB0byBidWlsZCBwYWNrYWdlcyBmb3IgdGhlIG5hdGl2ZQorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiBpcyA8ZmlsZW5hbWU+YmFzaC1uYXRpdmU8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgVXNpbmcgPGZpbGVuYW1lPmJhc2g8L2ZpbGVuYW1lPiB0byBidWlsZCBwYWNrYWdlcyBmb3IgdGhlIHRhcmdldCBhbmQgZm9yIE11bHRpbGliLAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPiB3b3VsZCBiZSA8ZmlsZW5hbWU+YmFzaDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bGliNjQtYmFzaDwvZmlsZW5hbWU+LCByZXNwZWN0aXZlbHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE5CTEFDS0xJU1QnPjxnbG9zc3Rlcm0+UE5CTEFDS0xJU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBOQkxBQ0tMSVNUW2RvY10gPSAiTGlzdHMgcmVjaXBlcyB5b3UgZG8gbm90IHdhbnQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgcmVjaXBlcyB5b3UgZG8gbm90IHdhbnQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdG8gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYmxhY2tsaXN0Jz48ZmlsZW5hbWU+YmxhY2tsaXN0PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB3aGljaCB0aGUgcmVjaXBlIG11c3QgaW5oZXJpdCBnbG9iYWxseS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVG8gcHJldmVudCBhIHJlY2lwZSBmcm9tIGJlaW5nIGJ1aWx0LCBpbmhlcml0IHRoZSBjbGFzcworICAgICAgICAgICAgICAgICAgICBnbG9iYWxseSBhbmQgdXNlIHRoZSB2YXJpYWJsZSBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgcHJldmVudHMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm15cmVjaXBlPC9maWxlbmFtZT4gZnJvbSBiZWluZyBidWlsdDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJibGFja2xpc3QiCisgICAgIFBOQkxBQ0tMSVNUW215cmVjaXBlXSA9ICJOb3Qgc3VwcG9ydGVkIGJ5IG91ciBvcmdhbml6YXRpb24uIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EJz48Z2xvc3N0ZXJtPlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIGhvc3QgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgaG9zdCBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSBTREsgcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NES19ESVJ9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+PGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQnPjxnbG9zc3Rlcm0+UE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRhcmdldCBwYXJ0IG9mIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSB0YXJnZXQgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIHRoZSBTREsgcGF0aCB0byBhIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIGEgZnVuY3Rpb24sIHlvdSBjYW4gdXNlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ke1NES19ESVJ9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+PGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFInPjxnbG9zc3Rlcm0+UFI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzICdyMCcuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzICJyMCIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJFRkVSUkVEX1BST1ZJREVSJz48Z2xvc3N0ZXJtPlBSRUZFUlJFRF9QUk9WSURFUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJFRkVSUkVEX1BST1ZJREVSW2RvY10gPSAiSWYgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIGFuIGl0ZW0sIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIGFuIGl0ZW0sIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHN1ZmZpeCB0aGUgdmFyaWFibGUgd2l0aCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgaXRlbSwgYW5kIHlvdSBzaG91bGQgc2V0IGl0IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcmVjaXBlIHRvIHdoaWNoIHlvdSB3YW50IHRvIGdpdmUgcHJlY2VkZW5jZS4KKyAgICAgICAgICAgICAgICAgICAgU29tZSBleGFtcGxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorICAgICBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID0gInhzZXJ2ZXIteGY4NiIKKyAgICAgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1QUkVGRVJSRURfVkVSU0lPTic+PGdsb3NzdGVybT5QUkVGRVJSRURfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJFRkVSUkVEX1ZFUlNJT05bZG9jXSA9ICJJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHdheXMgc3VmZml4IHRoZSB2YXJpYWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB5b3Ugd2FudCB0byBzZWxlY3QsIGFuZCB5b3Ugc2hvdWxkIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nbHkgZm9yIHByZWNlZGVuY2UuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSAiPGZpbGVuYW1lPiU8L2ZpbGVuYW1lPiIgY2hhcmFjdGVyIGFzIGEKKyAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmQgdG8gbWF0Y2ggYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzLCB3aGljaCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIHdoZW4gc3BlY2lmeWluZyB2ZXJzaW9ucyB0aGF0IGNvbnRhaW4gbG9uZyByZXZpc2lvbgorICAgICAgICAgICAgICAgICAgICBudW1iZXJzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSB0d28gZXhhbXBsZXM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID0gIjIuNy4zIgorICAgICBQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA9ICIzLjE5JSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBSRU1JUlJPUlMnPjxnbG9zc3Rlcm0+UFJFTUlSUk9SUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJFTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcyBmb3Igc291cmNlIGNvZGUsIGl0IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIHRyaWVzIHRoZSBsb2NhbCBkb3dubG9hZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgbG9jYXRpb24gZmFpbHMsIHRoZSBidWlsZCBzeXN0ZW0gdHJpZXMgbG9jYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYnkgPGZpbGVuYW1lPlBSRU1JUlJPUlM8L2ZpbGVuYW1lPiwgdGhlIHVwc3RyZWFtCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgYW5kIHRoZW4gbG9jYXRpb25zIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaW4gdGhhdCBvcmRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgeW91ciBkaXN0cmlidXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk8nPjxmaWxlbmFtZT5ESVNUUk88L2ZpbGVuYW1lPjwvbGluaz4pCisgICAgICAgICAgICAgICAgICAgIGlzICJwb2t5IiwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT4gaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvZGlzdHJvL3Bva3kuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gR2l0IHJlcG9zaXRvcnkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IGNvdWxkIGFkZCBhIHNwZWNpZmljIHNlcnZlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIHN5c3RlbSB0byBhdHRlbXB0IGJlZm9yZSBhbnkgb3RoZXJzIGJ5IGFkZGluZworICAgICAgICAgICAgICAgICAgICBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUkVNSVJST1JTX3ByZXBlbmQgPSAiXAorICAgICBnaXQ6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBmdHA6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4gXAorICAgICBodHRwOi8vLiovLiogaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3NvdXJjZXMvIFxuIFwKKyAgICAgaHR0cHM6Ly8uKi8uKiBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvc291cmNlcy8gXG4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2UgY2hhbmdlcyBjYXVzZSB0aGUgYnVpbGQgc3lzdGVtIHRvIGludGVyY2VwdAorICAgICAgICAgICAgICAgICAgICBHaXQsIEZUUCwgSFRUUCwgYW5kIEhUVFBTIHJlcXVlc3RzIGFuZCBkaXJlY3QgdGhlbSB0bworICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmh0dHA6Ly88L2ZpbGVuYW1lPiBzb3VyY2VzIG1pcnJvci4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPmZpbGU6Ly88L2ZpbGVuYW1lPiBVUkxzIHRvIHBvaW50CisgICAgICAgICAgICAgICAgICAgIHRvIGxvY2FsIGRpcmVjdG9yaWVzIG9yIG5ldHdvcmsgc2hhcmVzIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJJT1JJVFknPjxnbG9zc3Rlcm0+UFJJT1JJVFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSSU9SSVRZW2RvY10gPSAiSW5kaWNhdGVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgcGFja2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdvcHRpb25hbCcuICBPdGhlciBzdGFuZGFyZCB2YWx1ZXMgYXJlICdyZXF1aXJlZCcsICdzdGFuZGFyZCcgYW5kICdleHRyYScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBSSU9SSVRZPC9maWxlbmFtZT4gaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBkaXN0cmlidXRpb24gcG9saWN5IGJlY2F1c2UgdGhlIGltcG9ydGFuY2Ugb2YgYW55IGdpdmVuCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSBkZXBlbmRzIG9uIHRoZSBwdXJwb3NlIGZvciB3aGljaCB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgICAgIGlzIGJlaW5nIHByb2R1Y2VkLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCA8ZmlsZW5hbWU+UFJJT1JJVFk8L2ZpbGVuYW1lPiBpcyBub3Qgbm9ybWFsbHkgc2V0CisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiByZWNpcGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+UFJJT1JJVFk8L2ZpbGVuYW1lPiB0byAicmVxdWlyZWQiLAorICAgICAgICAgICAgICAgICAgICAic3RhbmRhcmQiLCAiZXh0cmEiLCBhbmQgIm9wdGlvbmFsIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJJVkFURV9MSUJTJz48Z2xvc3N0ZXJtPlBSSVZBVEVfTElCUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFJJVkFURV9MSUJTW2RvY10gPSAiU3BlY2lmaWVzIGxpYnJhcmllcyBpbnN0YWxsZWQgd2l0aGluIGEgcmVjaXBlIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0ncyBzaGFyZWQgbGlicmFyeSByZXNvbHZlci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgbGlicmFyaWVzIGluc3RhbGxlZCB3aXRoaW4gYSByZWNpcGUgdGhhdAorICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSdzCisgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IHJlc29sdmVyLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gc29mdHdhcmUgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgYnVpbHQgYnkgYSByZWNpcGUgaGFzIGl0cyBvd24gcHJpdmF0ZSB2ZXJzaW9ucyBvZiBhCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkgbm9ybWFsbHkgcHJvdmlkZWQgYnkgYW5vdGhlciByZWNpcGUuCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIG5vdCB3YW50IHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHByaXZhdGUgbGlicmFyaWVzIHRvIGJlIHNldCBhcyBhIGRlcGVuZGVuY3kgb24gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgdW5yZWxhdGVkIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGluc3RlYWQgZGVwZW5kIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHByb3ZpZGluZyB0aGUgc3RhbmRhcmQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgTGlicmFyaWVzIHNwZWNpZmllZCBpbiB0aGlzIHZhcmlhYmxlIHNob3VsZCBiZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgdGhlaXIgZmlsZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZnJvbSB0aGUgRmlyZWZveCByZWNpcGUgaW4gbWV0YS1icm93c2VyOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBSSVZBVEVfTElCUyA9ICJsaWJtb3pqcy5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJ4cGNvbS5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJuc3ByNC5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJ4dWwuc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlibW96YWxsb2Muc28gXAorICAgICAgICAgICAgICAgICAgICAgbGlicGxjNC5zbyBcCisgICAgICAgICAgICAgICAgICAgICBsaWJwbGRzNC5zbyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBST1ZJREVTJz48Z2xvc3N0ZXJtPlBST1ZJREVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBhbGlhc2VzIHRoYXQgYSByZWNpcGUgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIGRlcGVuZGVuY2llcyBvZiBvdGhlciByZWNpcGVzIGR1cmluZyB0aGUgYnVpbGQgYXMgc3BlY2lmaWVkIGJ5IERFUEVORFMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGFsaWFzZXMgYnkgd2hpY2ggYSBwYXJ0aWN1bGFyIHJlY2lwZSBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAga25vd24uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGEgcmVjaXBlJ3Mgb3duCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUE4nPlBOPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzIGltcGxpY2l0bHkgYWxyZWFkeSBpbiBpdHMgPGZpbGVuYW1lPlBST1ZJREVTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgSWYgYSByZWNpcGUgdXNlcyA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiwgdGhlCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgYWxpYXNlcyBhcmUgc3lub255bXMgZm9yIHRoZSByZWNpcGUgYW5kIGNhbgorICAgICAgICAgICAgICAgICAgICBiZSB1c2VmdWwgc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFJPVklERVM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgZnJvbSBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT5saWJhdl8wLjguMTEuYmI8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQUk9WSURFUyArPSAibGlicG9zdHByb2MiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5QUk9WSURFUzwvZmlsZW5hbWU+IHN0YXRlbWVudCByZXN1bHRzIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSAibGliYXYiIHJlY2lwZSBhbHNvIGJlaW5nIGtub3duIGFzICJsaWJwb3N0cHJvYyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFJTRVJWX0hPU1QnPjxnbG9zc3Rlcm0+UFJTRVJWX0hPU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFBSU0VSVl9IT1NUW2RvY10gPSAiVGhlIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSBob3N0IGFuZCBwb3J0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBuZXR3b3JrIGJhc2VkCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgaG93IHRoZSA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcworICAgICAgICAgICAgICAgICAgICBzZXQ6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFJTRVJWX0hPU1QgPSAibG9jYWxob3N0OjAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgWW91IG11c3Qgc2V0IHRoZSB2YXJpYWJsZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0IGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjd29ya2luZy13aXRoLWEtcHItc2VydmljZSc+UFIgc2VydmljZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldCA8ZmlsZW5hbWU+UFJTRVJWX0hPU1Q8L2ZpbGVuYW1lPiB0byBvdGhlcgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgdG8gdXNlIGEgcmVtb3RlIFBSIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFRFU1RfRU5BQkxFRCc+PGdsb3NzdGVybT5QVEVTVF9FTkFCTEVEPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQUlNFUlZfSE9TVFtkb2NdID0gIlNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBQYWNrYWdlIFRlc3QgKHB0ZXN0KSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgd2hlbiBidWlsZGluZyBhIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjdGVzdGluZy1wYWNrYWdlcy13aXRoLXB0ZXN0Jz5QYWNrYWdlIFRlc3Q8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAocHRlc3QpIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCB3aGVuIGJ1aWxkaW5nIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugc2hvdWxkIG5vdCBzZXQgdGhpcyB2YXJpYWJsZSBkaXJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgRW5hYmxpbmcgYW5kIGRpc2FibGluZyBidWlsZGluZyBQYWNrYWdlIFRlc3RzCisgICAgICAgICAgICAgICAgICAgIGF0IGJ1aWxkIHRpbWUgc2hvdWxkIGJlIGRvbmUgYnkgYWRkaW5nICJwdGVzdCIgdG8gKG9yCisgICAgICAgICAgICAgICAgICAgIHJlbW92aW5nIGl0IGZyb20pCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ESVNUUk9fRkVBVFVSRVMnPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBWJz48Z2xvc3N0ZXJtPlBWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBQVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZlcnNpb24gaXMgbm9ybWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2lwZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmV4cGF0XzIuMC4xLmJiPC9maWxlbmFtZT4sIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAiMi4wLjEiLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPiBpcyBnZW5lcmFsbHkgbm90IG92ZXJyaWRkZW4gd2l0aGluCisgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBlIHVubGVzcyBpdCBpcyBidWlsZGluZyBhbiB1bnN0YWJsZSAoaS5lLiBkZXZlbG9wbWVudCkgdmVyc2lvbiBmcm9tIGEgc291cmNlIGNvZGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAoZS5nLiBHaXQgb3IgU3VidmVyc2lvbikuCisgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVBZVEhPTl9BQkknPjxnbG9zc3Rlcm0+UFlUSE9OX0FCSTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFlUSE9OX0FCSVtkb2NdID0gIldoZW4gdXNlZCBieSByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZGlzdHV0aWxzMywgc2V0dXB0b29sczMsIGRpc3R1dGlscywgb3Igc2V0dXB0b29scyBjbGFzc2VzLCBkZW5vdGVzIHRoZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIGN1cnJlbnRseSBpbiB1c2UgZm9yIFB5dGhvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzZWQgYnkgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3R1dGlsczMnPjxmaWxlbmFtZT5kaXN0dXRpbHMzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzMyc+PGZpbGVuYW1lPnNldHVwdG9vbHMzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMnPjxmaWxlbmFtZT5kaXN0dXRpbHM8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNldHVwdG9vbHMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMsIGRlbm90ZXMgdGhlIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IGluIHVzZSBmb3IgUHl0aG9uLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgQUJJIGlzICJtIi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIHRvIHNldCB0aGlzIHZhcmlhYmxlIGFzIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHNldHMgaXQgZm9yIHlvdS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgQUJJIHRvIGNvbnN0cnVjdAorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZXMgdXNlZCB3aGVuIGluc3RhbGxpbmcgdGhlIFB5dGhvbiBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgIGFuZCBsaWJyYXJpZXMgaW4gc3lzcm9vdAorICAgICAgICAgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+Li4uL3B5dGhvbjMuM20vLi4uPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGR1cmluZyBjcm9zcy1idWlsZHMgYWxzbyB1c2UgdGhpcyB2YXJpYWJsZSB0bworICAgICAgICAgICAgICAgICAgICBsb2NhdGUgdGhlIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBvZiB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uCisgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyB0YXJnZXRpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUFlUSE9OX1BOJz48Z2xvc3N0ZXJtPlBZVEhPTl9QTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUFlUSE9OX1BOW2RvY10gPSAiV2hlbiB1c2VkIGJ5IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBkaXN0dXRpbHMzLCBzZXR1cHRvb2xzMywgZGlzdHV0aWxzLCBvciBzZXR1cHRvb2xzIGNsYXNzZXMsIHNwZWNpZmllcyB0aGUgbWFqb3IgUHl0aG9uIHZlcnNpb24gYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2VkIGJ5IHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1kaXN0dXRpbHMzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2V0dXB0b29sczMnPjxmaWxlbmFtZT5zZXR1cHRvb2xzMzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtZGlzdHV0aWxzJz48ZmlsZW5hbWU+ZGlzdHV0aWxzPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zZXR1cHRvb2xzJz48ZmlsZW5hbWU+c2V0dXB0b29sczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLCBzcGVjaWZpZXMgdGhlIG1ham9yIFB5dGhvbiB2ZXJzaW9uIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBGb3IgUHl0aG9uIDIueCwgPGZpbGVuYW1lPlBZVEhPTl9QTjwvZmlsZW5hbWU+IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIGJlICJweXRob24yIi4gIEZvciBQeXRob24gMy54LCB0aGUgdmFyaWFibGUgd291bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgInB5dGhvbjMiLgorICAgICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gc2V0IHRoaXMgdmFyaWFibGUgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBzZXRzIGl0IGZvciB5b3UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSBhbGxvd3MgcmVjaXBlcyB0byB1c2UgY29tbW9uIGluZnJhc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBERVBFTkRTICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgdmVyc2lvbiBvZiB0aGUgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgICAgICBpcyA8ZmlsZW5hbWU+UFlUSE9OX1BOPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXEnPjx0aXRsZT5RPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVFNQUtFX1BST0ZJTEVTJz48Z2xvc3N0ZXJtPlFNQUtFX1BST0ZJTEVTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBRTUFLRV9QUk9GSUxFU1tkb2NdID0gIlNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgLnBybyBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGggcW1ha2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHlvdXIgb3duIHN1YnNldCBvZiA8ZmlsZW5hbWU+LnBybzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGVzIHRvIGJlIGJ1aWx0IGZvciB1c2Ugd2l0aAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cW1ha2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzZXQgdGhpcyB2YXJpYWJsZSwgYWxsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4ucHJvPC9maWxlbmFtZT4gZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvCisgICAgICAgICAgICAgICAgICAgIGJ5IDxsaW5rIGxpbmtlbmQ9J3Zhci1TJz48ZmlsZW5hbWU+UzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGJ1aWx0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aXRoIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1xbWFrZSonPjxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIG9yIG90aGVyIGNsYXNzZXMgdGhhdCBpbmhlcml0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xbWFrZV9iYXNlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXInPjx0aXRsZT5SPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJBTkxJQic+PGdsb3NzdGVybT5SQU5MSUI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJBTkxJQltkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAncmFubGliJy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5yYW5saWI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SQ09ORkxJQ1RTJz48Z2xvc3N0ZXJtPlJDT05GTElDVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJDT05GTElDVFNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNvbmZsaWN0IHdpdGggYW5vdGhlciBwYWNrYWdlLiBOb3RlIHRoYXQgdGhlIHBhY2thZ2Ugd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIHRoZSBjb25mbGljdGluZyBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgcGFja2FnZXMgd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIGNvbmZsaWN0aW5nCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGFyZSBub3QgZmlyc3QgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICBMaWtlIGFsbCBwYWNrYWdlLWNvbnRyb2xsaW5nIHZhcmlhYmxlcywgeW91IG11c3QgYWx3YXlzIHVzZQorICAgICAgICAgICAgICAgICAgIHRoZW0gaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSQ09ORkxJQ1RTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5hbm90aGVyX2NvbmZsaWN0aW5nX3BhY2thZ2VfbmFtZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcywgc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB2ZXJzaW9uZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJDT05GTElDVFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSQ09ORkxJQ1RTXyR7UE59ID0gIjxyZXBsYWNlYWJsZT5wYWNrYWdlPC9yZXBsYWNlYWJsZT4gKDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4pIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+b3BlcmF0b3I8L2ZpbGVuYW1lPiwgeW91IGNhbiBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPQorICAgICAmbHQ7CisgICAgICZndDsKKyAgICAgJmx0Oz0KKyAgICAgJmd0Oz0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzZXRzIHVwIGEgZGVwZW5kZW5jeSBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSQ09ORkxJQ1RTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJERVBFTkRTJz48Z2xvc3N0ZXJtPlJERVBFTkRTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSREVQRU5EU1tkb2NdID0gIkxpc3RzIGEgcGFja2FnZSdzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHBhY2thZ2VzKSB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGZvciB0aGUgcGFja2FnZSB0byBiZSBidWlsdC4gVGhleSBtdXN0IGJlIHRoZSBuYW1lcyBvZiBvdGhlciBwYWNrYWdlcyBhcyBsaXN0ZWQgaW4gdGhlIFBBQ0tBR0VTIHZhcmlhYmxlLCBub3QgcmVjaXBlIG5hbWVzIChQTikuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpCisgICAgICAgICAgICAgICAgICAgIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgZm9yIHRoZSBidWlsdCBwYWNrYWdlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIElmIGEgcGFja2FnZSBpbiB0aGlzIGxpc3QgY2Fubm90IGJlIGZvdW5kIGR1cmluZyB0aGUgYnVpbGQsCisgICAgICAgICAgICAgICAgICAgIHlvdSB3aWxsIGdldCBhIGJ1aWxkIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluIGEgcmVjaXBlLCB5b3UgYXJlIGVzc2VudGlhbGx5IHN0YXRpbmcgdGhhdCB0aGUgcmVjaXBlJ3MKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWJ1aWxkJz48ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBkZXBlbmRzIG9uIHRoZSBleGlzdGVuY2Ugb2YgYSBzcGVjaWZpYyBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBDb25zaWRlciB0aGlzIHNpbXBsZSBleGFtcGxlIGZvciB0d28gcmVjaXBlcyBuYW1lZCAiYSIgYW5kCisgICAgICAgICAgICAgICAgICAgICJiIiB0aGF0IHByb2R1Y2Ugc2ltaWxhcmx5IG5hbWVkIElQSyBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gdGhlICJhIiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiYiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBIZXJlLCB0aGUgZGVwZW5kZW5jeSBpcyBzdWNoIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kb19idWlsZDwvZmlsZW5hbWU+IHRhc2sgZm9yIHJlY2lwZSAiYSIgZGVwZW5kcworICAgICAgICAgICAgICAgICAgICBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLXBhY2thZ2Vfd3JpdGVfaXBrJz48ZmlsZW5hbWU+ZG9fcGFja2FnZV93cml0ZV9pcGs8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBvZiByZWNpcGUgImIiLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIHRoZSBwYWNrYWdlIGZpbGUgZm9yICJiIiBtdXN0IGJlIGF2YWlsYWJsZSB3aGVuCisgICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgZm9yIHJlY2lwZSAiYSIgaGFzIGJlZW4gY29tcGxldGVseSBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgTW9yZSBpbXBvcnRhbnRseSwgcGFja2FnZSAiYSIgd2lsbCBiZSBtYXJrZWQgYXMgZGVwZW5kaW5nCisgICAgICAgICAgICAgICAgICAgIG9uIHBhY2thZ2UgImIiIGluIGEgbWFubmVyIHRoYXQgaXMgdW5kZXJzdG9vZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgbmFtZXMgb2YgdGhlIHBhY2thZ2VzIHlvdSBsaXN0IHdpdGhpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiBtdXN0IGJlIHRoZSBuYW1lcyBvZiBvdGhlcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyAtIHRoZXkgY2Fubm90IGJlIHJlY2lwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgQWx0aG91Z2ggcGFja2FnZSBuYW1lcyBhbmQgcmVjaXBlIG5hbWVzIHVzdWFsbHkgbWF0Y2gsCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbXBvcnRhbnQgcG9pbnQgaGVyZSBpcyB0aGF0IHlvdSBhcmUKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkaW5nIHBhY2thZ2UgbmFtZXMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkRFUEVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGV4YW1wbGUgb2YgdGhlIGRlZmF1bHQgbGlzdCBvZiBwYWNrYWdlcyBjcmVhdGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgYSByZWNpcGUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VTJz48ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGFwcGxpZXMKKyAgICAgICAgICAgICAgICAgICAgdG8gcGFja2FnZXMgYmVpbmcgYnVpbHQsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gYSBmb3JtIHdpdGggYW4gYXR0YWNoZWQgcGFja2FnZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGEgZGV2ZWxvcG1lbnQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGRlcGVuZHMgb24gdGhlIDxmaWxlbmFtZT5wZXJsPC9maWxlbmFtZT4gcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gc3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59LWRldiArPSAicGVybCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgZXhhbXBsZSwgdGhlIGRldmVsb3BtZW50IHBhY2thZ2UgZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPnBlcmw8L2ZpbGVuYW1lPiBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGUgaGFzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtQTn0tZGV2PC9maWxlbmFtZT4gcGFja2FnZSBuYW1lIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBuYW1lIHlvdSBhdHRhY2ggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHZhcmlhYmxlIG11c3QgYXBwZWFyCisgICAgICAgICAgICAgICAgICAgIGFzIGl0IHdvdWxkIGluIHRoZSA8ZmlsZW5hbWU+UEFDS0FHRVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgYmVmb3JlIGFueSByZW5hbWluZyBvZiB0aGUgb3V0cHV0IHBhY2thZ2UgYnkKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyBsaWtlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlYmlhbic+PGZpbGVuYW1lPmRlYmlhbjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gbWFueSBjYXNlcyB5b3UgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBhZGQKKyAgICAgICAgICAgICAgICAgICAgcnVudGltZSBkZXBlbmRlbmNpZXMgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gc2luY2Ugc29tZSBhdXRvbWF0aWMKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxpbmcgb2NjdXJzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c2hsaWJkZXBzPC9maWxlbmFtZT48L2VtcGhhc2lzPjogIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBydW50aW1lIHBhY2thZ2UgY29udGFpbnMgYSBzaGFyZWQgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+LnNvPC9maWxlbmFtZT4pLCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXMgdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIHRvIHdoaWNoIGl0IGlzIGR5bmFtaWNhbGx5IGxpbmtlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnVpbGQgcHJvY2VzcyBhZGRzIHRoZXNlIGxpYnJhcmllcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+IHdoZW4gY3JlYXRpbmcgdGhlIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGNkZXBzPC9maWxlbmFtZT48L2VtcGhhc2lzPjogIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHBhY2thZ2Ugc2hpcHMgYSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZmlsZSwgdGhlIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGlzIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZGQgaXRlbXMgdG8gdGhlIDxmaWxlbmFtZT5SREVQRU5EUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gY3JlYXRlIHRoZSBydW50aW1lIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcywgc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB2ZXJzaW9uZWQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJERVBFTkRTPC9maWxlbmFtZT4gdmFyaWFibGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUkRFUEVORFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnBhY2thZ2U8L3JlcGxhY2VhYmxlPiAoPHJlcGxhY2VhYmxlPm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5vcGVyYXRvcjwvZmlsZW5hbWU+LCB5b3UgY2FuIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICA9CisgICAgICZsdDsKKyAgICAgJmd0OworICAgICAmbHQ7PQorICAgICAmZ3Q7PQorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHMgdXAgYSBkZXBlbmRlbmN5IG9uIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJERVBFTkRTXyR7UE59ID0gImZvbyAoPj0gMS4yKSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURFUEVORFMnPjxmaWxlbmFtZT5ERVBFTkRTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJFUVVJUkVEX0RJU1RST19GRUFUVVJFUyc+PGdsb3NzdGVybT5SRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJFUVVJUkVEX0RJU1RST19GRUFUVVJFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRpc3Ryb19mZWF0dXJlc19jaGVjayc+PGZpbGVuYW1lPmRpc3Ryb19mZWF0dXJlc19jaGVjazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QKKyAgICAgICAgICAgICAgICAgICAgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgbGlzdHMgYSBmZWF0dXJlIHRoYXQgZG9lcyBub3QgYXBwZWFyIGluCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPiB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW4gZXJyb3Igb2NjdXJzIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3RvcHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk1fT0xEX0lNQUdFJz48Z2xvc3N0ZXJtPlJNX09MRF9JTUFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk1fT0xEX0lNQUdFW2RvY10gPSAiUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0IHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlIGltYWdlcyBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUgREVQTE9ZX0RJUiB2YXJpYWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBSZWNsYWltcyBkaXNrIHNwYWNlIGJ5IHJlbW92aW5nIHByZXZpb3VzbHkgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgdGhlIHNhbWUgaW1hZ2UgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmltYWdlczwvZmlsZW5hbWU+IGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItREVQTE9ZX0RJUic+PGZpbGVuYW1lPkRFUExPWV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNldCB0aGlzIHZhcmlhYmxlIHRvICIxIiBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSB0byByZW1vdmUgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJNX1dPUktfRVhDTFVERSc+PGdsb3NzdGVybT5STV9XT1JLX0VYQ0xVREU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJNX1dPUktfRVhDTFVERVtkb2NdID0gIldpdGggcm1fd29yayBlbmFibGVkLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgd2hvc2Ugd29yayBkaXJlY3RvcmllcyBzaG91bGQgbm90IGJlIHJlbW92ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCA8ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+IGVuYWJsZWQsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc3BlY2lmaWVzIGEgbGlzdCBvZiByZWNpcGVzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yay5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVF9IT01FJz48Z2xvc3N0ZXJtPlJPT1RfSE9NRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk9PVF9IT01FW2RvY10gPSAiRGVmaW5lcyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSByb290IGhvbWUgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRpcmVjdG9yeSBpcyBzZXQgYXMgZm9sbG93cyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVF9IT01FID8/PSAiL2hvbWUvcm9vdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCB2YWx1ZSBpcyBsaWtlbHkgdXNlZCBiZWNhdXNlIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvbHV0aW9ucyBwcmVmZXIgdG8gaGF2ZSBhIHJlYWQtb25seSByb290CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGFuZCBwcmVmZXIgdG8ga2VlcCB3cml0ZWFibGUgZGF0YSBpbiBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnkgc2V0dGluZyB0aGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgaW4gYW55IGxheWVyIG9yIGluIHRoZSA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgdGhlIGRlZmF1bHQgaXMgc2V0IHVzaW5nIGEgIndlYWsiIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gIj8/PSIpLCB5b3UgY2FuIHVzZSBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBmb3JtcworICAgICAgICAgICAgICAgICAgICB0byBkZWZpbmUgeW91ciBvdmVycmlkZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBST09UX0hPTUUgPSAiL3Jvb3QiCisgICAgIFJPT1RfSE9NRSA/PSAiL3Jvb3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2Ugb3ZlcnJpZGUgZXhhbXBsZXMgdXNlIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBwcm9iYWJseSB0aGUgbW9zdCBjb21tb25seSB1c2VkIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGUyc+PGdsb3NzdGVybT5ST09URlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU1tkb2NdID0gIkluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdAorICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlJPT1RGUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIGFuIG9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHVzZWQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYm9vdGltZyc+PGZpbGVuYW1lPmJvb3RpbWc8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciBpbnN0YWxsaW5nIHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGluc3RhbGxlZCBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGZ1bmN0aW9ucyBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9uczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBST09URlNfUE9TVElOU1RBTExfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgcm9vdCBmaWxlc3lzdGVtIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlMnPjxmaWxlbmFtZT5JTUFHRV9ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBvbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSByb290IGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQnPjxnbG9zc3Rlcm0+Uk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgcmVtb3ZhbCBvZiB1bm5lZWRlZCBwYWNrYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyByZW1vdmVkIHVubmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHJ1bnRpbWUgcGFja2FnZSBtYW5hZ2VtZW50IGlzIGRpc2FibGVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBpbWFnZSwgc2V2ZXJhbCBwYWNrYWdlcyBhcmUgcmVtb3ZlZCBpbmNsdWRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJhc2UtcGFzc3dkPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zaGFkb3c8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51cGRhdGUtYWx0ZXJuYXRpdmVzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbnMgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnM6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCArPSAiPHJlcGxhY2VhYmxlPmZ1bmN0aW9uPC9yZXBsYWNlYWJsZT47IC4uLiAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IG5lZWQgdG8gcGFzcyB0aGUgcm9vdCBmaWxlc3lzdGVtIHBhdGggdG8gYSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhIGZ1bmN0aW9uLCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtJTUFHRV9ST09URlN9PC9maWxlbmFtZT4sIHdoaWNoIHBvaW50cyB0bworICAgICAgICAgICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyB0aGUgcm9vdCBmaWxlc3lzdGVtIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9ST09URlMnPjxmaWxlbmFtZT5JTUFHRV9ST09URlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCc+PGdsb3NzdGVybT5ST09URlNfUFJFUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBST09URlNfUFJFUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQgKz0gIjxyZXBsYWNlYWJsZT5mdW5jdGlvbjwvcmVwbGFjZWFibGU+OyAuLi4gIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBuZWVkIHRvIHBhc3MgdGhlIHJvb3QgZmlsZXN5c3RlbSBwYXRoIHRvIGEgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB3aXRoaW4gYSBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7SU1BR0VfUk9PVEZTfTwvZmlsZW5hbWU+LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgdGhlIHJvb3QgZmlsZXN5c3RlbSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfUk9PVEZTJz48ZmlsZW5hbWU+SU1BR0VfUk9PVEZTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVJQUk9WSURFUyc+PGdsb3NzdGVybT5SUFJPVklERVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFJQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICAgICAgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIChhcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SREVQRU5EUyc+UkRFUEVORFM8L2xpbms+PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgcGFja2FnZSdzIG93biBuYW1lIGlzIGltcGxpY2l0bHkgYWxyZWFkeSBpbiBpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPiBsaXN0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZSBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUFJPVklERVNfJHtQTn0gPSAid2lkZ2V0LWFiaS0yIgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVDT01NRU5EUyc+PGdsb3NzdGVybT5SUkVDT01NRU5EUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBleHRlbmRzIHRoZSB1c2FiaWxpdHkgb2YgYSBwYWNrYWdlIGJlaW5nIGJ1aWx0LiBUaGUgcGFja2FnZSBiZWluZyBidWlsdCBkb2VzIG5vdCBkZXBlbmQgb24gdGhpcyBsaXN0IG9mIHBhY2thZ2VzIGluIG9yZGVyIHRvIHN1Y2Nlc3NmdWxseSBidWlsZCwgYnV0IG5lZWRzIHRoZW0gZm9yIHRoZSBleHRlbmRlZCB1c2FiaWxpdHkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgdXNlcyB0aGVtIGZvciBleHRlbmRlZCB1c2FiaWxpdHkuCisgICAgICAgICAgICAgICAgICAgIFRvIHNwZWNpZnkgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUkRFUEVORFMnPlJERVBFTkRTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBtYW5hZ2VyIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiBsaXN0IG9mIHBhY2thZ2VzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGluZyB0aGUgYnVpbHQgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBwcmV2ZW50IGxpc3RlZCBwYWNrYWdlcyBmcm9tIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJBRF9SRUNPTU1FTkRBVElPTlMnPjxmaWxlbmFtZT5CQURfUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTk9fUkVDT01NRU5EQVRJT05TJz48ZmlsZW5hbWU+Tk9fUkVDT01NRU5EQVRJT05TPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhDTFVERSc+PGZpbGVuYW1lPlBBQ0tBR0VfRVhDTFVERTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VzIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiBuZWVkIG5vdCBhY3R1YWxseSBiZQorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZC4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgYSByZWNpcGUgbXVzdCBleGlzdCB0aGF0IHByb3ZpZGVzIGVhY2ggcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFUyc+PGZpbGVuYW1lPlBBQ0tBR0VTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIG9yCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFU19EWU5BTUlDJz48ZmlsZW5hbWU+UEFDS0FHRVNfRFlOQU1JQzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1SUFJPVklERVMnPjxmaWxlbmFtZT5SUFJPVklERVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIG9yIGFuIGVycm9yIHdpbGwgb2NjdXIgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgSWYgc3VjaCBhIHJlY2lwZSBkb2VzIGV4aXN0IGFuZCB0aGUgcGFja2FnZSBpcyBub3QgcHJvZHVjZWQsCisgICAgICAgICAgICAgICAgICAgIHRoZSBidWlsZCBjb250aW51ZXMgd2l0aG91dCBlcnJvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSB0aGUgPGZpbGVuYW1lPlJSRUNPTU1FTkRTPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllcyB0byBwYWNrYWdlcyBiZWluZyBidWlsdCwgeW91IHNob3VsZCBhbHdheXMgYXR0YWNoCisgICAgICAgICAgICAgICAgICAgIGFuIG92ZXJyaWRlIHRvIHRoZSB2YXJpYWJsZSB0byBzcGVjaWZ5IHRoZSBwYXJ0aWN1bGFyCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2Ugd2hvc2UgdXNhYmlsaXR5IGlzIGJlaW5nIGV4dGVuZGVkLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIGJ1aWxkaW5nIGEgZGV2ZWxvcG1lbnQgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGlzIGV4dGVuZGVkIHRvIHN1cHBvcnQgd2lyZWxlc3MgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUlJFQ09NTUVORFNfJHtQTn0tZGV2ICs9ICI8cmVwbGFjZWFibGU+d2lyZWxlc3NfcGFja2FnZV9uYW1lPC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhlIGV4YW1wbGUsIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT4kezxsaW5rIGxpbmtlbmQ9J3Zhci1QTic+UE48L2xpbms+fS1kZXY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgbXVzdCBhcHBlYXIgYXMgaXQgd291bGQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSBiZWZvcmUgYW55IHJlbmFtaW5nIG9mIHRoZSBvdXRwdXQgcGFja2FnZSBieQorICAgICAgICAgICAgICAgICAgICBjbGFzc2VzIHN1Y2ggYXMgPGZpbGVuYW1lPmRlYmlhbi5iYmNsYXNzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UsIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMsIHN1cHBvcnRzCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnlpbmcgdmVyc2lvbmVkIHJlY29tbWVuZHMuCisgICAgICAgICAgICAgICAgICAgIEFsdGhvdWdoIHRoZSBzeW50YXggdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGFja2FnaW5nCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgQml0QmFrZSBoaWRlcyB0aGVzZSBkaWZmZXJlbmNlcyBmcm9tIHlvdS4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyB0aGUgZ2VuZXJhbCBzeW50YXggdG8gc3BlY2lmeSB2ZXJzaW9ucyB3aXRoCisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+UlJFQ09NTUVORFM8L2ZpbGVuYW1lPiB2YXJpYWJsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlY29tbWVuZCBvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIDEuMiBvciBncmVhdGVyIG9mIHRoZSBwYWNrYWdlIDxmaWxlbmFtZT5mb288L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSUkVDT01NRU5EU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SUkVQTEFDRVMnPjxnbG9zc3Rlcm0+UlJFUExBQ0VTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSUkVQTEFDRVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLiBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKSBkdXJpbmcgYW4gdXBncmFkZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKQorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYW4gdXBncmFkZS4KKyAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gYWxzbyBoYXZlIHRoZSBvdGhlciBwYWNrYWdlKHMpIHJlbW92ZWQgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIHNhbWUgdGltZSwgeW91IG11c3QgYWRkIHRoZSBuYW1lIG9mIHRoZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPlJDT05GTElDVFM8L2xpbms+PC9maWxlbmFtZT4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IHVzZQorICAgICAgICAgICAgICAgICAgIHRoaXMgdmFyaWFibGUgaW4gY29uanVuY3Rpb24gd2l0aCBhIHBhY2thZ2UgbmFtZQorICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlLgorICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRVBMQUNFU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+b3RoZXJfcGFja2FnZV9iZWluZ19yZXBsYWNlZDwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQml0QmFrZSwgd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcywgc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeWluZyB2ZXJzaW9uZWQgcmVwbGFjZW1lbnRzLgorICAgICAgICAgICAgICAgICAgICBBbHRob3VnaCB0aGUgc3ludGF4IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2luZworICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEJpdEJha2UgaGlkZXMgdGhlc2UgZGlmZmVyZW5jZXMgZnJvbSB5b3UuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4IHRvIHNwZWNpZnkgdmVyc2lvbnMgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPlJSRVBMQUNFUzwvZmlsZW5hbWU+IHZhcmlhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRVBMQUNFU18ke1BOfSA9ICI8cmVwbGFjZWFibGU+cGFja2FnZTwvcmVwbGFjZWFibGU+ICg8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGU+dmVyc2lvbjwvcmVwbGFjZWFibGU+KSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgPGZpbGVuYW1lPm9wZXJhdG9yPC9maWxlbmFtZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgID0KKyAgICAgJmx0OworICAgICAmZ3Q7CisgICAgICZsdDs9CisgICAgICZndDs9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0cyB1cCBhIHJlcGxhY2VtZW50IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS4yIG9yIGdyZWF0ZXIgb2YgdGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvbzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFJSRVBMQUNFU18ke1BOfSA9ICJmb28gKD49IDEuMikiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1SU1VHR0VTVFMnPjxnbG9zc3Rlcm0+UlNVR0dFU1RTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBSU1VHR0VTVFNbZG9jXSA9ICJBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlIGlzIGluc3RhbGxlZC4gTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBhZGRpdGlvbmFsIHBhY2thZ2VzIHRoYXQgeW91IGNhbiBzdWdnZXN0IGZvcgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gYnkgdGhlIHBhY2thZ2UgbWFuYWdlciBhdCB0aGUgdGltZSBhIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgaXMgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICBOb3QgYWxsIHBhY2thZ2UgbWFuYWdlcnMgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgcGFja2FnZS1jb250cm9sbGluZyB2YXJpYWJsZXMsIHlvdSBtdXN0IGFsd2F5cworICAgICAgICAgICAgICAgICAgIHVzZSB0aGlzIHZhcmlhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICBvdmVycmlkZS4KKyAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBSU1VHR0VTVFNfJHtQTn0gPSAiPHJlcGxhY2VhYmxlPnVzZWZ1bF9wYWNrYWdlPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmFub3RoZXJfcGFja2FnZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnktcyc+PHRpdGxlPlM8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItUyc+PGdsb3NzdGVybT5TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTW2RvY10gPSAiVGhlIGxvY2F0aW9uIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdW5wYWNrZWQgcGFja2FnZSBzb3VyY2UgY29kZSByZXNpZGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICB3aGVyZSB1bnBhY2tlZCByZWNpcGUgc291cmNlIGNvZGUgcmVzaWRlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsb2NhdGlvbiBpcyB3aXRoaW4gdGhlIHdvcmsgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPldPUktESVI8L2xpbms+PC9maWxlbmFtZT4pLAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3Qgc3RhdGljLgorICAgICAgICAgICAgICAgICAgICBUaGUgdW5wYWNrZWQgc291cmNlIGxvY2F0aW9uIGRlcGVuZHMgb24gdGhlIHJlY2lwZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz5QTjwvbGluaz48L2ZpbGVuYW1lPikgYW5kCisgICAgICAgICAgICAgICAgICAgIHJlY2lwZSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBWJz5QVjwvbGluaz48L2ZpbGVuYW1lPikgYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1dPUktESVJ9LyR7UE59LSR7UFZ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgYXNzdW1lIGEKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRvcC1sZXZlbCBmb2xkZXIgbmFtZWQgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBhbmQgYQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IEJ1aWxkIERpcmVjdG9yeSBhdCA8ZmlsZW5hbWU+cG9reS9idWlsZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSB3b3JrIGRpcmVjdG9yeSB0aGUgYnVpbGQgc3lzdGVtIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdG8ga2VlcCB0aGUgdW5wYWNrZWQgcmVjaXBlIGZvciA8ZmlsZW5hbWU+ZGI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHBva3kvYnVpbGQvdG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2RiLzUuMS4xOS1yMy9kYi01LjEuMTkKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnPjxnbG9zc3Rlcm0+U0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIHV0aWxpdGllcyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBkdXJpbmcgdGhlIGluaXRpYWwgc2FuaXR5IGNoZWNraW5nIHByb2Nlc3Mgd2hlbiBydW5uaW5nIEJpdEJha2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBjb21tYW5kLWxpbmUgdXRpbGl0aWVzIHRoYXQgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgZm9yIGR1cmluZyB0aGUgaW5pdGlhbCBzYW5pdHkgY2hlY2tpbmcgcHJvY2VzcyB3aGVuCisgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgQml0QmFrZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgYW55IG9mIHRoZSB1dGlsaXRpZXMgYXJlIG5vdCBpbnN0YWxsZWQgb24gdGhlIGJ1aWxkIGhvc3QsCisgICAgICAgICAgICAgICAgICAgIHRoZW4gQml0QmFrZSBpbW1lZGlhdGVseSBleGl0cyB3aXRoIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNBTklUWV9URVNURURfRElTVFJPUyc+PGdsb3NzdGVybT5TQU5JVFlfVEVTVEVEX0RJU1RST1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNBTklUWV9URVNURURfRElTVFJPU1tkb2NdID0gIkEgbGlzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRpb24gaWRlbnRpZmllcnMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRpb24gaWRlbnRpZmllcnMgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0LgorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVycyBjb25zaXN0IG9mIHRoZSBob3N0IGRpc3RyaWJ1dG9yIElECisgICAgICAgICAgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSByZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICBhcyByZXBvcnRlZCBieSB0aGUgPGZpbGVuYW1lPmxzYl9yZWxlYXNlPC9maWxlbmFtZT4gdG9vbAorICAgICAgICAgICAgICAgICAgICBvciBhcyByZWFkIGZyb20gPGZpbGVuYW1lPi9ldGMvbHNiLXJlbGVhc2U8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2VwYXJhdGUgdGhlIGxpc3QgaXRlbXMgd2l0aCBleHBsaWNpdCBuZXdsaW5lCisgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgKDxmaWxlbmFtZT5cbjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlNBTklUWV9URVNURURfRElTVFJPUzwvZmlsZW5hbWU+IGlzIG5vdCBlbXB0eQorICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU5BVElWRUxTQlNUUklORyc+PGZpbGVuYW1lPk5BVElWRUxTQlNUUklORzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QsIHRoZW4gdGhlIGJ1aWxkIHN5c3RlbSByZXBvcnRzCisgICAgICAgICAgICAgICAgICAgIGEgd2FybmluZyB0aGF0IGluZGljYXRlcyB0aGUgY3VycmVudCBob3N0IGRpc3RyaWJ1dGlvbiBoYXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGJlZW4gdGVzdGVkIGFzIGEgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfQVJDSCc+PGdsb3NzdGVybT5TREtfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX0FSQ0hbZG9jXSA9ICJUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFNESy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgVHlwaWNhbGx5LCB5b3UgZG8gbm90IGRpcmVjdGx5IHNldCB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19ERVBMT1knPjxnbG9zc3Rlcm0+U0RLX0RFUExPWTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX0RFUExPWVtkb2NdID0gIlRoZSBkaXJlY3Rvcnkgc2V0IHVwIGFuZCB1c2VkIGJ5IHRoZSBwb3B1bGF0ZV9zZGtfYmFzZSB0byB3aGljaCB0aGUgU0RLIGlzIGRlcGxveWVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3Rvcnkgc2V0IHVwIGFuZCB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGsnPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB0byB3aGljaCB0aGUgU0RLIGlzIGRlcGxveWVkLgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT4gY2xhc3MgZGVmaW5lcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX0RFUExPWSA9ICIkezxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPlRNUERJUjwvbGluaz59L2RlcGxveS9zZGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfRElSJz48Z2xvc3N0ZXJtPlNES19ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19ESVJbZG9jXSA9ICJUaGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXBvcHVsYXRlLXNkay0qJz48ZmlsZW5hbWU+cG9wdWxhdGVfc2RrX2Jhc2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgZGVmaW5lcyB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfRElSID0gIiR7PGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+fS9zZGsiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNES19ESVI8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhcyBpdCBpcyBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpbmFsIG91dHB1dCBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19IT1NUX01BTklGRVNUJz48Z2xvc3N0ZXJtPlNES19IT1NUX01BTklGRVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfSE9TVF9NQU5JRkVTVFtkb2NdID0gIlRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaG9zdCBwYXJ0IG9mIHRoZSBTREsuIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIGhvc3QgcGFydCBvZiB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgaG9zdCBwYXJ0IG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAKKyAgICAgICAgICAgICAgICAgICAgdGhlIGhvc3QgcGFydCBvZiBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIGNvbnRhaW5zIHBhY2thZ2UgaW5mb3JtYXRpb24gb24gYSBsaW5lLXBlci1wYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGJhc2lzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgPHJlcGxhY2VhYmxlPnBhY2thZ2VuYW1lPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnBhY2thZ2VhcmNoPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPnZlcnNpb248L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGRlZmluZXMgdGhlIG1hbmlmZXN0IGZpbGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfSE9TVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9Lmhvc3QubWFuaWZlc3QiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIGlzIGRlcml2ZWQgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfREVQTE9ZJz48ZmlsZW5hbWU+U0RLX0RFUExPWTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRPT0xDSEFJTl9PVVRQVVROQU1FJz48ZmlsZW5hbWU+VE9PTENIQUlOX09VVFBVVE5BTUU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19OQU1FJz48Z2xvc3N0ZXJtPlNES19OQU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgZm9yIFNESyBvdXRwdXQgZmlsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJhc2UgbmFtZSBmb3IgU0RLIG91dHB1dCBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz48ZmlsZW5hbWU+RElTVFJPPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVENMSUJDJz48ZmlsZW5hbWU+VENMSUJDPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0FSQ0gnPjxmaWxlbmFtZT5TREtfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0JBU0VOQU1FJz48ZmlsZW5hbWU+SU1BR0VfQkFTRU5BTUU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9QS0dBUkNIJz48ZmlsZW5hbWU+VFVORV9QS0dBUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfTkFNRSA9ICIke0RJU1RST30tJHtUQ0xJQkN9LSR7U0RLX0FSQ0h9LSR7SU1BR0VfQkFTRU5BTUV9LSR7VFVORV9QS0dBUkNIfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19PUyc+PGdsb3NzdGVybT5TREtfT1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciB3aGljaCB0aGUgU0RLIHdpbGwgYmUgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciB3aGljaCB0aGUgU0RLCisgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQlVJTERfT1MnPjxmaWxlbmFtZT5CVUlMRF9PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfT1VUUFVUJz48Z2xvc3N0ZXJtPlNES19PVVRQVVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19PVVRQVVRbZG9jXSA9ICJUaGUgbG9jYXRpb24gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxvY2F0aW9uIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hlbgorICAgICAgICAgICAgICAgICAgICBjcmVhdGluZyBTREsgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19PVVRQVVQgPSAiJHs8bGluayBsaW5rZW5kPSd2YXItU0RLX0RJUic+U0RLX0RJUjwvbGluaz59L2ltYWdlIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5TREtfT1VUUFVUPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvcmFyeSBkaXJlY3RvcnkgYXMgaXQgaXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPiBieSB3YXkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtfRElSPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmluYWwgb3V0cHV0IGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ERVBMT1knPjxmaWxlbmFtZT5TREtfREVQTE9ZPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1BBQ0tBR0VfQVJDSFMnPjxnbG9zc3Rlcm0+U0RLX1BBQ0tBR0VfQVJDSFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19QQUNLQUdFX0FSQ0hTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgU0RLIG1hY2hpbmUuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYW5kIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgaGFuZC1lZGl0ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgU0RLIG1hY2hpbmUuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgc2V0IGF1dG9tYXRpY2FsbHkgYW5kIHNob3VsZCBub3QKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsbHkgYmUgaGFuZC1lZGl0ZWQuCisgICAgICAgICAgICAgICAgICAgIEVudHJpZXMgYXJlIHNlcGFyYXRlZCB1c2luZyBzcGFjZXMgYW5kIGxpc3RlZCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICBvZiBwcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtfUEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+IGlzICJhbGwgYW55IG5vYXJjaAorICAgICAgICAgICAgICAgICAgICAke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNES19QT1NUUFJPQ0VTU19DT01NQU5EJz48Z2xvc3N0ZXJtPlNES19QT1NUUFJPQ0VTU19DT01NQU5EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgU0RLLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGNhbGwgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgZnVuY3Rpb25zIHNlcGFyYXRlZCBieSBzZW1pY29sb25zOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNES19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICI8cmVwbGFjZWFibGU+ZnVuY3Rpb248L3JlcGxhY2VhYmxlPjsgLi4uICIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgbmVlZCB0byBwYXNzIGFuIFNESyBwYXRoIHRvIGEgY29tbWFuZCB3aXRoaW4gYQorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgeW91IGNhbiB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7U0RLX0RJUn08L2ZpbGVuYW1lPiwgd2hpY2ggcG9pbnRzIHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgd2hlbiBjcmVhdGluZyBTREsgb3V0cHV0LgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfRElSJz48ZmlsZW5hbWU+U0RLX0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfUFJFRklYJz48Z2xvc3N0ZXJtPlNES19QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19QUkVGSVhbZG9jXSA9ICJUaGUgdG9vbGNoYWluIGJpbmFyeSBwcmVmaXggdXNlZCBmb3IgbmF0aXZlc2RrIHJlY2lwZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRvb2xjaGFpbiBiaW5hcnkgcHJlZml4IHVzZWQgZm9yIG5hdGl2ZXNkayByZWNpcGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U0RLX1BSRUZJWDwvZmlsZW5hbWU+IHZhbHVlIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9QUkVGSVgnPjxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgPGZpbGVuYW1lPm5hdGl2ZXNkazwvZmlsZW5hbWU+IHJlY2lwZXMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzICIke1NES19TWVN9LSIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1NZUyc+PGdsb3NzdGVybT5TREtfU1lTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfU1lTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdoaWNoIHRoZSBTREsgd2lsbCBiZSBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2hpY2ggdGhlIFNESyB3aWxsIGJlIGJ1aWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX0FSQ0gnPjxmaWxlbmFtZT5TREtfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19WRU5ET1InPjxmaWxlbmFtZT5TREtfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19PUyc+PGZpbGVuYW1lPlNES19PUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgPGZpbGVuYW1lPlNES19TWVM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB5b3Vyc2VsZi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfVEFSR0VUX01BTklGRVNUJz48Z2xvc3N0ZXJtPlNES19UQVJHRVRfTUFOSUZFU1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES19UQVJHRVRfTUFOSUZFU1RbZG9jXSA9ICJUaGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIHRhcmdldCBwYXJ0IG9mIHRoZSBTREsuIFRoaXMgZmlsZSBsaXN0cyBhbGwgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIHRhcmdldCBwYXJ0IG9mIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGZpbGUgZm9yIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgbGlzdHMgYWxsIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBtYWtlIHVwCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgcGFydCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZSBjb250YWlucyBwYWNrYWdlIGluZm9ybWF0aW9uIG9uIGEgbGluZS1wZXItcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBiYXNpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDxyZXBsYWNlYWJsZT5wYWNrYWdlbmFtZTwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5wYWNrYWdlYXJjaDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT52ZXJzaW9uPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtcG9wdWxhdGUtc2RrLSonPjxmaWxlbmFtZT5wb3B1bGF0ZV9zZGtfYmFzZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBkZWZpbmVzIHRoZSBtYW5pZmVzdCBmaWxlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU0RLX1RBUkdFVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gaXMgZGVyaXZlZCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES19ERVBMT1knPjxmaWxlbmFtZT5TREtfREVQTE9ZPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE9PTENIQUlOX09VVFBVVE5BTUUnPjxmaWxlbmFtZT5UT09MQ0hBSU5fT1VUUFVUTkFNRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLX1ZFTkRPUic+PGdsb3NzdGVybT5TREtfVkVORE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTREtfVkVORE9SW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBTREsgdmVuZG9yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgU0RLIHZlbmRvci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtfVkVSU0lPTic+PGdsb3NzdGVybT5TREtfVkVSU0lPTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0RLX1ZFUlNJT05bZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZlcnNpb24gZm9yIHRoZSBTREsuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBmaWxlIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmY8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgPGZpbGVuYW1lPlNES19WRVJTSU9OPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtfVkVSU0lPTiA6PSAiJHtAJyR7RElTVFJPX1ZFUlNJT059Jy5yZXBsYWNlKCdzbmFwc2hvdC0ke0RBVEV9Jywnc25hcHNob3QnKX0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19WRVJTSU9OJz48ZmlsZW5hbWU+RElTVFJPX1ZFUlNJT048L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1EQVRFJz48ZmlsZW5hbWU+REFURTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0RLSU1BR0VfRkVBVFVSRVMnPjxnbG9zc3Rlcm0+U0RLSU1BR0VfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES0lNQUdFX0ZFQVRVUkVTW2RvY10gPSAiRXF1aXZhbGVudCB0byBJTUFHRV9GRUFUVVJFUy4gSG93ZXZlciwgdGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIHRoZSBTREsgZ2VuZXJhdGVkIGZyb20gYW4gaW1hZ2UgdXNpbmcgdGhlIGNvbW1hbmQgJ2JpdGJha2UgLWMgcG9wdWxhdGVfc2RrIGltYWdlbmFtZScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUlNQUdFX0ZFQVRVUkVTJz5JTUFHRV9GRUFUVVJFUzwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIHRoZSBTREsgZ2VuZXJhdGVkIGZyb20gYW4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgPHJlcGxhY2VhYmxlPmltYWdlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtNQUNISU5FJz48Z2xvc3N0ZXJtPlNES01BQ0hJTkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSAoaS5lLiBpNjg2IG9yIHg4Nl82NCkgZm9yIHdoaWNoIHRvIGJ1aWxkIFNESyBhbmQgQURUIGl0ZW1zLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBtYWNoaW5lIGZvciB3aGljaCB0aGUgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdAorICAgICAgICAgICAgICAgICAgICAoQURUKSBvciBTREsgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCB0aGUgU0RLIG9yIEFEVCBpcyBidWlsdCBzdWNoIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgcnVucyBvbiB0aGUgdGFyZ2V0IHlvdSBzcGVjaWZ5IHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT4gdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBwb2ludHMgdG8gYSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+IGZpbGUgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS1zZGsvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSAiaTY4NiIgYW5kICJ4ODZfNjQiIGFzIHBvc3NpYmxlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdmFyaWFibGUuIFRoZSB2YXJpYWJsZSBkZWZhdWx0cyB0byAiaTY4NiIKKyAgICAgICAgICAgICAgICAgICAgIGFuZCBpcyBzZXQgaW4gdGhlIGxvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTREtNQUNISU5FID89ICJpNjg2IgorICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbm5vdCBzZXQgdGhlIDxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB5b3VyIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvLCB0aGUgY29uZmlndXJhdGlvbiB3aWxsIG5vdCB0YWtlIGFmZmVjdC4KKyAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtQQVRIJz48Z2xvc3N0ZXJtPlNES1BBVEg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES1BBVEhbZG9jXSA9ICJEZWZpbmVzIHRoZSBwYXRoIG9mZmVyZWQgdG8gdGhlIHVzZXIgZm9yIGluc3RhbGxhdGlvbiBvZiB0aGUgU0RLIHRoYXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHBhdGggb2ZmZXJlZCB0byB0aGUgdXNlciBmb3IgaW5zdGFsbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBTREsgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRoIGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIGluc3RhbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIFNESyB3aGVuIHlvdSBydW4gdGhlIFNESydzIGluc3RhbGxhdGlvbiBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIG9mZmVyZWQgcGF0aCB3aGVuIHlvdSBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TREtUQVJHRVRTWVNST09UJz48Z2xvc3N0ZXJtPlNES1RBUkdFVFNZU1JPT1Q8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNES1RBUkdFVFNZU1JPT1RbZG9jXSA9ICJGdWxsIHBhdGggdG8gdGhlIHN5c3Jvb3QgdXNlZCBmb3IgY3Jvc3MtY29tcGlsYXRpb24gd2l0aGluIGFuIFNESyBhcyBpdCB3aWxsIGJlIHdoZW4gaW5zdGFsbGVkIGludG8gdGhlIGRlZmF1bHQgU0RLUEFUSC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzeXNyb290IHVzZWQgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBhbiBTREsgYXMgaXQgd2lsbCBiZSB3aGVuIGluc3RhbGxlZCBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtQQVRIJz48ZmlsZW5hbWU+U0RLUEFUSDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TRUNUSU9OJz48Z2xvc3N0ZXJtPlNFQ1RJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFQ1RJT05bZG9jXSA9ICJUaGUgc2VjdGlvbiBpbiB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQuIFBhY2thZ2UgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG1ha2UgdXNlIG9mIHRoaXMgdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLgorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFTEVDVEVEX09QVElNSVpBVElPTic+PGdsb3NzdGVybT5TRUxFQ1RFRF9PUFRJTUlaQVRJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFTEVDVEVEX09QVElNSVpBVElPTltkb2NdID0gIlRoZSB2YXJpYWJsZSB0YWtlcyB0aGUgdmFsdWUgb2YgRlVMTF9PUFRJTUlaQVRJT04gdW5sZXNzIERFQlVHX0JVSUxEID0gJzEnLiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBvZiBERUJVR19PUFRJTUlaQVRJT04gaXMgdXNlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG9wdGltaXphdGlvbiBmbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZsYWdzIGFyZSBwYXNzZWQgdGhyb3VnaCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9DRkxBR1MnPjxmaWxlbmFtZT5UQVJHRVRfQ0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNFTEVDVEVEX09QVElNSVpBVElPTjwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIHRha2VzIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUZVTExfT1BUSU1JWkFUSU9OJz5GVUxMX09QVElNSVpBVElPTjwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB1bmxlc3MgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1ERUJVR19CVUlMRCc+REVCVUdfQlVJTEQ8L2xpbms+PC9maWxlbmFtZT4gPSAiMSIuCisgICAgICAgICAgICAgICAgICAgIElmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURFQlVHX09QVElNSVpBVElPTic+REVCVUdfT1BUSU1JWkFUSU9OPC9saW5rPjwvZmlsZW5hbWU+IGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VSSUFMX0NPTlNPTEUnPjxnbG9zc3Rlcm0+U0VSSUFMX0NPTlNPTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFW2RvY10gPSAiVGhlIHNwZWVkIGFuZCBkZXZpY2UgZm9yIHRoZSBzZXJpYWwgcG9ydCB1c2VkIHRvIGF0dGFjaCB0aGUgc2VyaWFsIGNvbnNvbGUuIFRoaXMgdmFyaWFibGUgaXMgZ2l2ZW4gdG8gdGhlIGtlcm5lbCBhcyB0aGUgJ2NvbnNvbGUnIHBhcmFtZXRlci4gQWZ0ZXIgYm9vdGluZyBvY2N1cnMsIGdldHR5IGlzIHN0YXJ0ZWQgb24gdGhhdCBwb3J0IHNvIHJlbW90ZSBsb2dpbiBpcyBwb3NzaWJsZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIGEgc2VyaWFsIGNvbnNvbGUgKFRUWSkgdG8gZW5hYmxlIHVzaW5nIGdldHR5LgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGJhdWQgcmF0ZSBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgICAgICB0aGUgVFRZIGRldmljZSBuYW1lIHNlcGFyYXRlZCBieSBhIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBUVFkgZGV2aWNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEU8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaXMgZGVwcmVjYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0VSSUFMX0NPTlNPTEVTJz48ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNFUklBTF9DT05TT0xFUyc+PGdsb3NzdGVybT5TRVJJQUxfQ09OU09MRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNFUklBTF9DT05TT0xFU1tkb2NdID0gIkRlZmluZXMgdGhlIHNlcmlhbCBjb25zb2xlcyAoVFRZcykgdG8gZW5hYmxlIHVzaW5nIGdldHR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHNlcmlhbCBjb25zb2xlcyAoVFRZcykgdG8gZW5hYmxlIHVzaW5nIGdldHR5LgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIGJhdWQgcmF0ZSBmb2xsb3dlZCBieQorICAgICAgICAgICAgICAgICAgICB0aGUgVFRZIGRldmljZSBuYW1lIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbi4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHNwYWNlcyB0byBzZXBhcmF0ZSBtdWx0aXBsZSBkZXZpY2VzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0VSSUFMX0NPTlNPTEVTX0NIRUNLJz48Z2xvc3N0ZXJtPlNFUklBTF9DT05TT0xFU19DSEVDSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0VSSUFMX0NPTlNPTEVTX0NIRUNLW2RvY10gPSAiU2ltaWxhciB0byBTRVJJQUxfQ09OU09MRVMgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVuYWJsZSBpdC4gU3VwcG9ydGVkIG9ubHkgYnkgU3lzVmluaXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU2ltaWxhciB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0VSSUFMX0NPTlNPTEVTJz48ZmlsZW5hbWU+U0VSSUFMX0NPTlNPTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB0aGUgZGV2aWNlIGlzIGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSBiZWZvcmUgYXR0ZW1wdGluZworICAgICAgICAgICAgICAgICAgICB0byBlbmFibGUgaXQuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIHdpdGggU3lzVmluaXQKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gbm90IHdpdGggc3lzdGVtZCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQUyc+PGdsb3NzdGVybT5TSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHNpZ25hdHVyZXMgb2YgdGFza3MgZnJvbSBvbmUgcmVjaXBlIHdoZW4gdGhleSBkZXBlbmQgb24gdGFza3MgZnJvbSBhbm90aGVyIHJlY2lwZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgcmVjaXBlIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgc2lnbmF0dXJlcyBvZiB0YXNrcyBmcm9tIG9uZSByZWNpcGUgd2hlbiB0aGV5CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZCBvbiB0YXNrcyBmcm9tIGFub3RoZXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgIFNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMgKz0gImludG9uZS0+bXBsYXllcjIiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBleGFtcGxlLCA8ZmlsZW5hbWU+aW50b25lPC9maWxlbmFtZT4gZGVwZW5kcyBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXBsYXllcjI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVXNlIG9mIHRoaXMgdmFyaWFibGUgaXMgb25lIG1lY2hhbmlzbSB0byByZW1vdmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYWZmZWN0IHRhc2sgc2lnbmF0dXJlcyBhbmQgdGh1cyBmb3JjZSByZWJ1aWxkcyB3aGVuIGEKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPjx0aXRsZT5DYXV0aW9uPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhZGQgYW4gaW5hcHByb3ByaWF0ZSBkZXBlbmRlbmN5IGZvciBhIHJlY2lwZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwLCB0aGUgc29mdHdhcmUgbWlnaHQgYnJlYWsgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lIGlmIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHNlY29uZCByZWNpcGUgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIGFmdGVyIHRoZSBmaXJzdCByZWNpcGUgaGFkIGJlZW4gYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSc+PGdsb3NzdGVybT5TSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkVbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHN0YWJsZSBhbmQgd2lsbCBuZXZlciBjaGFuZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHJlY2lwZXMgdGhhdCBhcmUgY29tcGxldGVseSBzdGFibGUgYW5kIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgbmV2ZXIgY2hhbmdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgQUJJIGZvciB0aGUgcmVjaXBlcyBpbiB0aGUgbGlzdCBhcmUgcHJlc2VudGVkIGJ5CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmcm9tIHRoZSB0YXNrcyBydW4gdG8gYnVpbGQgdGhlIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlIG9mIHRoaXMgdmFyaWFibGUgaXMgb25lIHdheSB0byByZW1vdmUgZGVwZW5kZW5jaWVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgb25lIHJlY2lwZSBvbiBhbm90aGVyIHRoYXQgYWZmZWN0IHRhc2sgc2lnbmF0dXJlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGh1cyBmb3JjZSByZWJ1aWxkcyB3aGVuIHRoZSByZWNpcGUgY2hhbmdlcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPkNhdXRpb248L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGFkZCBhbiBpbmFwcHJvcHJpYXRlIHZhcmlhYmxlIHRvIHRoaXMgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzb2Z0d2FyZSBtaWdodCBicmVhayBhdCBydW50aW1lIGlmIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIG9mIHRoZSByZWNpcGUgd2FzIGNoYW5nZWQgYWZ0ZXIgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICBoYWQgYmVlbiBidWlsdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNJVEVJTkZPX0JJVFMnPjxnbG9zc3Rlcm0+U0lURUlORk9fQklUUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU0lURUlORk9fQklUU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIENQVS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbSBDUFUuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyICIzMiIgb3IgIjY0Ii4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TSVRFSU5GT19FTkRJQU5ORVNTJz48Z2xvc3N0ZXJtPlNJVEVJTkZPX0VORElBTk5FU1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNJVEVJTkZPX0VORElBTk5FU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVuZGlhbiBieXRlIG9yZGVyIG9mIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAnbGUnIGZvciAnbGl0dGxlLWVuZGlhbicgb3IgJ2JlJyBmb3IgJ2JpZy1lbmRpYW4nLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZW5kaWFuIGJ5dGUgb3JkZXIgb2YgdGhlIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyICJsZSIgZm9yIGxpdHRsZS1lbmRpYW4gb3IgImJlIiBmb3IgYmlnLWVuZGlhbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT0NfRkFNSUxZJz48Z2xvc3N0ZXJtPlNPQ19GQU1JTFk8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPQ19GQU1JTFlbZG9jXSA9ICJHcm91cHMgdG9nZXRoZXIgbWFjaGluZXMgYmFzZWQgdXBvbiB0aGUgc2FtZSBmYW1pbHkgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkuIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb21tb24gLmluYyBmaWxlIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYWxsIHRoZSBtYWNoaW5lcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBHcm91cHMgdG9nZXRoZXIgbWFjaGluZXMgYmFzZWQgdXBvbiB0aGUgc2FtZSBmYW1pbHkKKyAgICAgICAgICAgICAgICAgICAgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkuCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb21tb24KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi5pbmM8L2ZpbGVuYW1lPiBmaWxlIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYWxsIHRoZSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdmFyaWFibGUgdG8gYXBwZWFyIGluCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUFDSElORU9WRVJSSURFUyc+PGZpbGVuYW1lPk1BQ0hJTkVPVkVSUklERVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT0xJQlMnPjxnbG9zc3Rlcm0+U09MSUJTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTT0xJQlNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHNoYXJlZCBsaWJyYXJpZXMgdXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIHN1ZmZpeCBmb3Igc2hhcmVkIGxpYnJhcmllcyB1c2VkIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgcGxhdGZvcm0uCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoaXMgc3VmZml4IGlzICIuc28uKiIgZm9yIGFsbCBMaW51eC1iYXNlZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zIGFuZCBpcyBkZWZpbmVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgc2VlIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlZCBpbiB0aGUgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgb2YgPGZpbGVuYW1lPkZJTEVTXyR7UE59PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU09MSUJTREVWJz48Z2xvc3N0ZXJtPlNPTElCU0RFVjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU09MSUJTREVWW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciB0aGUgZGV2ZWxvcG1lbnQgc3ltYm9saWMgbGluayAoc3ltbGluaykgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHRoZSBkZXZlbG9wbWVudCBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICAgICAgICAgIChzeW1saW5rKSBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIHN1ZmZpeCBpcyAiLnNvIiBmb3IgTGludXgtYmFzZWQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyBhbmQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHNlZSB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZWQgaW4gdGhlIGRlZmF1bHQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIG9mIDxmaWxlbmFtZT5GSUxFU18ke1BOfS1kZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT1VSQ0VfTUlSUk9SX0ZFVENIJz48Z2xvc3N0ZXJtPlNPVVJDRV9NSVJST1JfRkVUQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNPVVJDRV9NSVJST1JfRkVUQ0hbZG9jXSA9ICJTZXQgYXMgcGFydCBvZiBhIHNvdXJjZSBtaXJyb3IgZ2VuZXJhdGlvbiBzY3JpcHQgdG8gc2tpcCBDT01QQVRJQkxFX01BQ0hJTkUgYW5kIENPTVBBVElCTEVfSE9TVCBjaGVja3MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3UgYXJlIGZldGNoaW5nIGZpbGVzIHRvIGNyZWF0ZSBhIG1pcnJvciBvZiBzb3VyY2VzCisgICAgICAgICAgICAgICAgICAgIChpLmUuIGNyZWF0aW5nIGEgc291cmNlIG1pcnJvciksIHNldHRpbmcKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfRkVUQ0g8L2ZpbGVuYW1lPiB0byAiMSIgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZSBlbnN1cmVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBzb3VyY2UgZm9yIGFsbCByZWNpcGVzIGFyZSBmZXRjaGVkIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgICAgICAgICAgICAgd2hldGhlciBvciBub3QgYSByZWNpcGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBIHJlY2lwZSBpcyBjb25zaWRlcmVkIGluY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCBtYWNoaW5lIHdoZW4gZWl0aGVyIG9yIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01QQVRJQkxFX01BQ0hJTkUnPjxmaWxlbmFtZT5DT01QQVRJQkxFX01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DT01QQVRJQkxFX0hPU1QnPjxmaWxlbmFtZT5DT01QQVRJQkxFX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHNwZWNpZnkgY29tcGF0aWJpbGl0eSB3aXRoIGEgbWFjaGluZSBvdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIHRoYXQgb2YgdGhlIGN1cnJlbnQgbWFjaGluZSBvciBob3N0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+V2FybmluZzwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICBEbyBub3Qgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfRkVUQ0g8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIHlvdSBhcmUgY3JlYXRpbmcgYSBzb3VyY2UgbWlycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGRvIG5vdCBzZXQgdGhlIHZhcmlhYmxlIGR1cmluZyBhCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWwgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TT1VSQ0VfTUlSUk9SX1VSTCc+PGdsb3NzdGVybT5TT1VSQ0VfTUlSUk9SX1VSTDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU09VUkNFX01JUlJPUl9VUkxbZG9jXSA9ICJVUkwgdG8gc291cmNlIG1pcnJvciB0aGF0IHdpbGwgYmUgdXNlZCBiZWZvcmUgZmV0Y2hpbmcgZnJvbSBvcmlnaW5hbCBTUkNfVVJJLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIERlZmluZXMgeW91ciBvd24KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBSRU1JUlJPUlMnPjxmaWxlbmFtZT5QUkVNSVJST1JTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZyb20gd2hpY2ggdG8gZmlyc3QgZmV0Y2ggc291cmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZldGNoCisgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHVwc3RyZWFtIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+PGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGlzIHZhcmlhYmxlLCB5b3UgbXVzdCBnbG9iYWxseSBpbmhlcml0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1vd24tbWlycm9ycyc+PGZpbGVuYW1lPm93bi1taXJyb3JzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCB0aGVuIHByb3ZpZGUgdGhlIFVSTCB0byB5b3VyIG1pcnJvcnMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGdlbmVyYWwgc3ludGF4OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gIm93bi1taXJyb3JzIgorICAgICBTT1VSQ0VfTUlSUk9SX1VSTCA9ICJodHRwOi8vPHJlcGxhY2VhYmxlPmV4YW1wbGU8L3JlcGxhY2VhYmxlPi5jb20vPHJlcGxhY2VhYmxlPm15X3NvdXJjZV9taXJyb3I8L3JlcGxhY2VhYmxlPiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBvbmx5IGEgc2luZ2xlIFVSTCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNPVVJDRV9NSVJST1JfVVJMPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TUERYTElDRU5TRU1BUCc+PGdsb3NzdGVybT5TUERYTElDRU5TRU1BUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1BEWExJQ0VOU0VNQVBbZG9jXSA9ICJNYXBzIGNvbW1vbmx5IHVzZWQgbGljZW5zZSBuYW1lcyB0byB0aGVpciBTUERYIGNvdW50ZXJwYXJ0cyBmb3VuZCBpbiBtZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy8uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgTWFwcyBjb21tb25seSB1c2VkIGxpY2Vuc2UgbmFtZXMgdG8gdGhlaXIgU1BEWCBjb3VudGVycGFydHMKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgaW4gPGZpbGVuYW1lPm1ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzLzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPlNQRFhMSUNFTlNFTUFQPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9saWNlbnNlcy5jb25mPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0UnPjxmaWxlbmFtZT5MSUNFTlNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNQRUNJQUxfUEtHU1VGRklYJz48Z2xvc3N0ZXJtPlNQRUNJQUxfUEtHU1VGRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUEVDSUFMX1BLR1NVRkZJWFtkb2NdID0gIkEgbGlzdCBvZiBwcmVmaXhlcyBmb3IgUE4gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgdmFyaWFudHMgb2YgcmVjaXBlcyBvciBwYWNrYWdlcy4gVGhlIGxpc3Qgc3BlY2lmaWVzIHRoZSBwcmVmaXhlcyB0byBzdHJpcCBvZmYgZHVyaW5nIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBzdWNoIGFzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBCUE4gdmFyaWFibGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIHByZWZpeGVzIGZvciA8bGluayBsaW5rZW5kPSd2YXItUE4nPjxmaWxlbmFtZT5QTjwvZmlsZW5hbWU+PC9saW5rPiB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGNyZWF0ZSB2YXJpYW50cyBvZiByZWNpcGVzIG9yIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgbGlzdCBzcGVjaWZpZXMgdGhlIHByZWZpeGVzIHRvIHN0cmlwIG9mZiBkdXJpbmcgY2VydGFpbiBjaXJjdW1zdGFuY2VzCisgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIDxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPjxmaWxlbmFtZT5CUE48L2ZpbGVuYW1lPjwvbGluaz4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1JDX1VSSSc+PGdsb3NzdGVybT5TUkNfVVJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNfVVJJW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIC0gbG9jYWwgb3IgcmVtb3RlLiBUaGlzIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoYXQgYml0cyB0byBwdWxsIGluIGZvciB0aGUgYnVpbGQgYW5kIGhvdyB0byBwdWxsIHRoZW0gaW4uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2Ygc291cmNlIGZpbGVzIC0gbG9jYWwgb3IgcmVtb3RlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHRlbGxzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoaWNoIGJpdHMKKyAgICAgICAgICAgICAgICAgICAgdG8gcHVsbCBpbiBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtIGluLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlY2lwZSBvciBhcHBlbmQgZmlsZSBvbmx5IG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCBmcm9tIHRoZSBJbnRlcm5ldCwgdGhlIHJlY2lwZSBvcgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQgZmlsZSB1c2VzIGEgc2luZ2xlIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZW50cnkuCisgICAgICAgICAgICAgICAgICAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlIG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgIGZldGNoIGEgdGFyYmFsbCwgYXBwbHkgdHdvIHBhdGNoZXMsIGFuZCBpbmNsdWRlIGEgY3VzdG9tCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIHRoZSByZWNpcGUgb3IgYXBwZW5kIGZpbGUgd291bGQgaW5jbHVkZSBmb3VyCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBleHBsYWlucyB0aGUgYXZhaWxhYmxlIFVSSSBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5maWxlOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0Y2hlcyBmaWxlcywgd2hpY2ggYXJlIHVzdWFsbHkgZmlsZXMgc2hpcHBlZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWV0YWRhdGEnPk1ldGFkYXRhPC91bGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgbG9jYWwgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNQQVRIJz48ZmlsZW5hbWU+RklMRVNQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgdGhlIGJ1aWxkIHN5c3RlbSBzZWFyY2hlcywgaW4gb3JkZXIsIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGRpcmVjdG9yaWVzLCB3aGljaCBhcmUgYXNzdW1lZCB0byBiZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgZmlsZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+KSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBmaWxlICg8ZmlsZW5hbWU+LmJiYXBwZW5kPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT4ke0JQTn08L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIHJlY2lwZSBuYW1lIHdpdGhvdXQgYW55IHNwZWNpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCBvciB2ZXJzaW9uIG51bWJlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+JHtCUH08L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4kezxsaW5rIGxpbmtlbmQ9J3Zhci1CUE4nPkJQTjwvbGluaz59LSR7UFZ9PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbiBidXQgd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IHNwZWNpYWwgcGFja2FnZSBuYW1lIHN1ZmZpeC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPmZpbGVzIC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZXMgd2l0aGluIGEgZGlyZWN0b3J5LCB3aGljaCBpcyBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZpbGVzPC9maWxlbmFtZT4gYW5kIGlzIGFsc28KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsb25nc2lkZSB0aGUgcmVjaXBlIG9yIGFwcGVuZCBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBidWlsZCBzeXN0ZW0gdG8gcGljayB1cCBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgdGhyb3VnaCBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TUkNfVVJJPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50IGZyb20geW91ciBhcHBlbmQgZmlsZSwgeW91IG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VyZSB0byBleHRlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5GSUxFU1BBVEg8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBieSBhbHNvIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRklMRVNFWFRSQVBBVEhTJz48ZmlsZW5hbWU+RklMRVNFWFRSQVBBVEhTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZyb20gd2l0aGluIHlvdXIgYXBwZW5kIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YnpyOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmF6YWFyIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdpdDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5vc2M6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gT1NDIChPcGVuU1VTRSBCdWlsZCBzZXJ2aWNlKSByZXZpc2lvbiBjb250cm9sIHJlcG9zaXRvcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5yZXBvOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVwbyAoR2l0KSByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y2NyYzovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXMgZmlsZXMgZnJvbSBhIENsZWFyQ2FzZSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+aHR0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgSW50ZXJuZXQgdXNpbmcgPGZpbGVuYW1lPmh0dHA8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmh0dHBzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBJbnRlcm5ldCB1c2luZyA8ZmlsZW5hbWU+aHR0cHM8L2ZpbGVuYW1lPi48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmZ0cDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgSW50ZXJuZXQgdXNpbmcgPGZpbGVuYW1lPmZ0cDwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+Y3ZzOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgQ1ZTIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmhnOi8vPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IEZldGNoZXMgZmlsZXMgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgTWVyY3VyaWFsICg8ZmlsZW5hbWU+aGc8L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cDQ6Ly88L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gRmV0Y2hlcyBmaWxlcyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBQZXJmb3JjZSAoPGZpbGVuYW1lPnA0PC9maWxlbmFtZT4pIHJldmlzaW9uIGNvbnRyb2wgcmVwb3NpdG9yeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnNzaDovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNlY3VyZSBzaGVsbC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN2bjovLzwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPiBGZXRjaGVzIGZpbGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFN1YnZlcnNpb24gKDxmaWxlbmFtZT5zdm48L2ZpbGVuYW1lPikgcmV2aXNpb24gY29udHJvbCByZXBvc2l0b3J5LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgYW5kIHJlY2lwZS1zcGVjaWZpYyBvcHRpb25zIGZvciA8ZmlsZW5hbWU+U1JDX1VSSTwvZmlsZW5hbWU+IGV4aXN0LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGFyZSBzdGFuZGFyZCBvcHRpb25zOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+YXBwbHk8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gV2hldGhlciB0byBhcHBseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwYXRjaCBvciBub3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIGFwcGx5IHRoZSBwYXRjaC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPnN0cmlwbGV2ZWw8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gV2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcGxldmVsIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHRoZSBwYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBsZXZlbCBpcyAxLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cGF0Y2hkaXI8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcGF0Y2ggc2hvdWxkIGJlIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGZpbGVuYW1lPiR7PC9maWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUyc+PGZpbGVuYW1lPlM8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBhcmUgb3B0aW9ucyBzcGVjaWZpYyB0byByZWNpcGVzIGJ1aWxkaW5nIGNvZGUgZnJvbSBhIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWluZGF0ZTwvZmlsZW5hbWU+IC08L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IHRoZSBwYXRjaCBvbmx5IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNSQ0RBVEUnPjxmaWxlbmFtZT5TUkNEQVRFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDxmaWxlbmFtZT5taW5kYXRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5tYXhkYXRlPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ0RBVEU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBsYXRlciB0aGFuIDxmaWxlbmFtZT5taW5kYXRlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT5taW5yZXY8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBseSB0aGUgcGF0Y2ggb25seSBpZiA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gPGZpbGVuYW1lPm1pbnJldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bWF4cmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGxhdGVyIHRoYW4gPGZpbGVuYW1lPm1heHJldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+cmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXF1YWwgdG8gPGZpbGVuYW1lPnJldjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+bm90cmV2PC9maWxlbmFtZT4gLTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbHkgdGhlIHBhdGNoIG9ubHkgaWYgPGZpbGVuYW1lPlNSQ1JFVjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGVxdWFsIHRvIDxmaWxlbmFtZT5yZXY8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIHdvcnRoIG1lbnRpb25pbmc6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPjxmaWxlbmFtZT51bnBhY2s8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gQ29udHJvbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGV0aGVyIG9yIG5vdCB0byB1bnBhY2sgdGhlIGZpbGUgaWYgaXQgaXMgYW4gYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gdW5wYWNrIHRoZSBmaWxlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz48ZmlsZW5hbWU+c3ViZGlyPC9maWxlbmFtZT4gLTwvZW1waGFzaXM+IFBsYWNlcyB0aGUgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBleHRyYWN0cyBpdHMgY29udGVudHMpIGludG8gdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciB1bnVzdWFsIHRhcmJhbGxzIG9yIG90aGVyIGFyY2hpdmVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgaGF2ZSB0aGVpciBmaWxlcyBhbHJlYWR5IGluIGEgc3ViZGlyZWN0b3J5IHdpdGhpbiB0aGUgYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPm5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lIHRvIGJlIHVzZWQgZm9yIGFzc29jaWF0aW9uIHdpdGggPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPiBjaGVja3N1bXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgZmlsZSBzcGVjaWZpZWQgaW4gPGZpbGVuYW1lPlNSQ19VUkk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmRvd25sb2FkZmlsZW5hbWU8L2ZpbGVuYW1lPiAtPC9lbXBoYXNpcz4gU3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbGVuYW1lIHVzZWQgd2hlbiBzdG9yaW5nIHRoZSBkb3dubG9hZGVkIGZpbGUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ19VUklfT1ZFUlJJREVTX1BBQ0tBR0VfQVJDSCc+PGdsb3NzdGVybT5TUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNSQ19VUklfT1ZFUlJJREVTX1BBQ0tBR0VfQVJDSFtkb2NdID0gIkJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIFNSQ19VUkkgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgbWFjaGluZS1zcGVjaWZpYy4gSWYgc28sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjaGFuZ2VzIFBBQ0tBR0VfQVJDSC4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICcwJyBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItU1JDX1VSSSc+U1JDX1VSSTwvbGluaz48L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBjb250YWlucyBmaWxlcyB0aGF0IGFyZSBtYWNoaW5lLXNwZWNpZmljLgorICAgICAgICAgICAgICAgICAgICBJZiBzbywgdGhlIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1QQUNLQUdFX0FSQ0gnPlBBQ0tBR0VfQVJDSDwvbGluaz48L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICIwIiBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ0RBVEUnPjxnbG9zc3Rlcm0+U1JDREFURTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1JDREFURVtkb2NdID0gIlRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLiBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRlIG9mIHRoZSBzb3VyY2UgY29kZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGFwcGxpZXMgb25seSBpZiB0aGUgc291cmNlIHdhcyBmZXRjaGVkIGZyb20gYSBTb3VyY2UgQ29kZSBNYW5hZ2VyIChTQ00pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ1BWJz48Z2xvc3N0ZXJtPlNSQ1BWPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTUkNQVltkb2NdID0gIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gaGVscCBkZWZpbmUgdGhlIHZhbHVlIG9mIFBWLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gaGVscCBkZWZpbmUgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QVic+PGZpbGVuYW1lPlBWPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNSQ1BWID0gIiR7QGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHRoYXQgbmVlZCB0byBkZWZpbmUgPGZpbGVuYW1lPlBWPC9maWxlbmFtZT4gZG8gc28KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgaGVscCBvZiB0aGUgPGZpbGVuYW1lPlNSQ1BWPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgPGZpbGVuYW1lPm9mb25vPC9maWxlbmFtZT4gcmVjaXBlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+b2Zvbm9fZ2l0LmJiPC9maWxlbmFtZT4pIGxvY2F0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHk8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgU291cmNlIERpcmVjdG9yeSBkZWZpbmVzIDxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgUFYgPSAiMC4xMi1naXQke1NSQ1BWfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNSQ1JFVic+PGdsb3NzdGVybT5TUkNSRVY8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNSQ1JFVltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIFN1YnZlcnNpb24sIEdpdCwgTWVyY3VyaWFsIGFuZCBCYXphYXIgb25seS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgQmF6YWFyIG9ubHkuCisgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBidWlsZCBhIGZpeGVkIHJldmlzaW9uIGFuZCB5b3UKKyAgICAgICAgICAgICAgICAgICAgd2FudCB0byBhdm9pZCBwZXJmb3JtaW5nIGEgcXVlcnkgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5CisgICAgICAgICAgICAgICAgICAgIGV2ZXJ5IHRpbWUgQml0QmFrZSBwYXJzZXMgeW91ciByZWNpcGUsIHlvdSBzaG91bGQgc3BlY2lmeQorICAgICAgICAgICAgICAgICAgICBhIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiB0aGF0IGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZnVsbCByZXZpc2lvbiBpZGVudGlmaWVyIGFuZCBub3QganVzdCBhIHRhZy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGxpbWl0YXRpb25zIHdoZW4gaW5oZXJpdGluZyB0aGUgbGF0ZXN0CisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uIG9mIHNvZnR3YXJlIHVzaW5nIDxmaWxlbmFtZT5TUkNSRVY8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQVVUT1JFVic+PGZpbGVuYW1lPkFVVE9SRVY8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgZGVzY3JpcHRpb24uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1NUQVRFX0RJUic+PGdsb3NzdGVybT5TU1RBVEVfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTU1RBVEVfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGZvciB0aGUgc2hhcmVkIHN0YXRlIGNhY2hlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSyc+PGdsb3NzdGVybT5TU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUks8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SS1tkb2NdID0gIklmIHNldCB0byAiMSIsIGFsbG93cyBmZXRjaGVzIGZyb20gbWlycm9ycyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gU1NUQVRFX01JUlJPUlMgdG8gd29yayBldmVuIHdoZW4gZmV0Y2hpbmcgZnJvbSB0aGUgbmV0d29yayBoYXMgYmVlbiBkaXNhYmxlZCBieSBzZXR0aW5nIEJCX05PX05FVFdPUksgdG8gIjEiLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCB0byAiMSIsIGFsbG93cyBmZXRjaGVzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgbWlycm9ycyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNTVEFURV9NSVJST1JTJz48ZmlsZW5hbWU+U1NUQVRFX01JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdG8gd29yayBldmVuIHdoZW4gZmV0Y2hpbmcgZnJvbSB0aGUgbmV0d29yayBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBieSBzZXR0aW5nIDxmaWxlbmFtZT5CQl9OT19ORVRXT1JLPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIjEiLgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNTVEFURV9NSVJST1JTPC9maWxlbmFtZT4gdG8gcG9pbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwgc2VydmVyIGZvciB5b3VyIHNoYXJlZCBzdGF0ZSBjYWNoZSwgYnV0CisgICAgICAgICAgICAgICAgICAgIHlvdSB3YW50IHRvIGRpc2FibGUgYW55IG90aGVyIGZldGNoaW5nIGZyb20gdGhlIG5ldHdvcmsuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1NUQVRFX01JUlJPUlMnPjxnbG9zc3Rlcm0+U1NUQVRFX01JUlJPUlM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNTVEFURV9NSVJST1JTW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBzZWFyY2ggb3RoZXIgbWlycm9yIGxvY2F0aW9ucyBmb3IgcHJlYnVpbHQgY2FjaGUgZGF0YSBvYmplY3RzIGJlZm9yZSBidWlsZGluZyBvdXQgdGhlIGRhdGEuIFlvdSBjYW4gc3BlY2lmeSBhIGZpbGVzeXN0ZW0gZGlyZWN0b3J5IG9yIGEgcmVtb3RlIFVSTCBzdWNoIGFzIEhUVFAgb3IgRlRQLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2VhcmNoIG90aGVyCisgICAgICAgICAgICAgICAgICAgIG1pcnJvciBsb2NhdGlvbnMgZm9yIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgb3V0IHRoZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIHdvcmtzIGxpa2UgZmV0Y2hlcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTUlSUk9SUyc+PGZpbGVuYW1lPk1JUlJPUlM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUkVNSVJST1JTJz48ZmlsZW5hbWU+UFJFTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhbmQgcG9pbnRzIHRvIHRoZSBjYWNoZSBsb2NhdGlvbnMgdG8gY2hlY2sgZm9yIHRoZSBzaGFyZWQKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzcGVjaWZ5IGEgZmlsZXN5c3RlbSBkaXJlY3Rvcnkgb3IgYSByZW1vdGUgVVJMIHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgYXMgSFRUUCBvciBGVFAuCisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbnMgeW91IHNwZWNpZnkgbmVlZCB0byBjb250YWluIHRoZSBzaGFyZWQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUgKHNzdGF0ZS1jYWNoZSkgcmVzdWx0cyBmcm9tIHByZXZpb3VzIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNzdGF0ZS1jYWNoZSB5b3UgcG9pbnQgdG8gY2FuIGFsc28gYmUgZnJvbSBidWlsZHMgb24KKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgbWFjaGluZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIGEgbWlycm9yIHVzZXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TU1RBVEVfRElSJz48ZmlsZW5hbWU+U1NUQVRFX0RJUjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gYWRkCisgICAgICAgICAgICAgICAgICAgICJQQVRIIiBhdCB0aGUgZW5kIGFzIHNob3duIGluIHRoZSBleGFtcGxlcyBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIHN5c3RlbSBzdWJzdGl0dXRlcyB0aGUgY29ycmVjdCBwYXRoIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTU1RBVEVfTUlSUk9SUyA/PSAiXAorICAgICBmaWxlOi8vLiogaHR0cDovLzxyZXBsYWNlYWJsZT5zb21lc2VydmVyPC9yZXBsYWNlYWJsZT4udGxkL3NoYXJlL3NzdGF0ZS9QQVRIIFxuIFwKKyAgICAgZmlsZTovLy4qIGZpbGU6Ly8vPHJlcGxhY2VhYmxlPnNvbWUtbG9jYWwtZGlyPC9yZXBsYWNlYWJsZT4vc3N0YXRlL1BBVEgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0JBU0VfTElCRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0JBU0VfTElCRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L2xpYjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQkFTRUxJQkRJUic+PGdsb3NzdGVybT5TVEFHSU5HX0JBU0VMSUJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQkFTRUxJQkRJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL2xpYiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi9saWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19CSU5ESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19CSU5ESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfQklORElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2JpbiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi91c3IvYmluPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfQklORElSX0NST1NTJz48Z2xvc3N0ZXJtPlNUQUdJTkdfQklORElSX0NST1NTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0JJTkRJUl9DUk9TU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYmluYXJ5IGNvbmZpZ3VyYXRpb24gc2NyaXB0cy4gVGhlc2Ugc2NyaXB0cyBwcm92aWRlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIG90aGVyIHNvZnR3YXJlIHRoYXQgd2FudHMgdG8gbWFrZSB1c2Ugb2YgbGlicmFyaWVzIG9yIGluY2x1ZGUgZmlsZXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NyaXB0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYmluYXJ5CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gc2NyaXB0cy4KKyAgICAgICAgICAgICAgICAgICAgVGhlc2Ugc2NyaXB0cyBwcm92aWRlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yCisgICAgICAgICAgICAgICAgICAgIG90aGVyIHNvZnR3YXJlIHRoYXQgd2FudHMgdG8gbWFrZSB1c2Ugb2YgbGlicmFyaWVzIG9yCisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZmlsZXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc3R5bGUgb2YgYnVpbGQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBsYXJnZWx5CisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZCBieSA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCBpZiA8ZmlsZW5hbWU+cGtnLWNvbmZpZzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBpcyBzdXBwb3J0ZWQgYnkgdGhlIGxpYnJhcnkgdG8gd2hpY2ggeW91IGFyZSBsaW5raW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgcmVjb21tZW5kZWQgeW91IHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBrZy1jb25maWc8L2ZpbGVuYW1lPiBpbnN0ZWFkIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gc2NyaXB0LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19CSU5ESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfQklORElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19CSU5ESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2JpbiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2JpbjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfREFUQURJUic+PGdsb3NzdGVybT5TVEFHSU5HX0RBVEFESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfREFUQURJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9zaGFyZSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9zaGFyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICAoPGxpbmsgbGlua2VuZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxmaWxlbmFtZT5TVEFHSU5HX0RJUl9IT1NUPC9maWxlbmFtZT48L2xpbms+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RBVEFESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfREFUQURJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfREFUQURJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC91c3Ivc2hhcmUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9zaGFyZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgdG9wLWxldmVsIHN5c3Jvb3RzIGRpcmVjdG9yeSAoaS5lLiAke1RNUERJUn0vc3lzcm9vdHMpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgdG9wLWxldmVsIHN5c3Jvb3RzIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9zeXNyb290czwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBSZWNpcGVzIHNob3VsZCBuZXZlciB3cml0ZSBmaWxlcyBkaXJlY3RseSB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBkaXJlY3RvcnkgYmVjYXVzZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlcyB0aGUgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0ZWFkLCBmaWxlcyBzaG91bGQgYmUgaW5zdGFsbGVkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1EJz48ZmlsZW5hbWU+RDwvZmlsZW5hbWU+PC9saW5rPjxmaWxlbmFtZT59PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB5b3VyIHJlY2lwZSdzCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgYW5kIHRoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2UgYSBzdWJzZXQgb2YgdGhvc2UgZmlsZXMgaW50byB0aGUgc3lzcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRElSX0hPU1QnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfSE9TVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19ESVJfSE9TVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgcHJpbWFyeSBzeXNyb290IGRpcmVjdG9yeSBmb3Igd2hpY2ggdGhlIHRhcmdldCBpcyBiZWluZyBidWlsdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHByaW1hcnkgc3lzcm9vdCBkaXJlY3RvcnkgZm9yCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRoZSB0YXJnZXQgaXMgYmVpbmcgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiByZWNpcGUgYW5kIHRoZSBidWlsZCB0YXJnZXQsIHRoZQorICAgICAgICAgICAgICAgICAgICByZWNpcGUncyB2YWx1ZSBpcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciByZWNpcGVzIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCB0aGUgdmFsdWUgaXMgIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rm9yIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlcyBidWlsZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBidWlsZCBob3N0LCB0aGUgdmFsdWUgaXMgZW1wdHkgZ2l2ZW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3N1bXB0aW9uIHRoYXQgd2hlbiBidWlsZGluZyBmb3IgdGhlIGJ1aWxkIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVpbGQgaG9zdCdzIG93biBkaXJlY3RvcmllcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkZvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXMgdGhhdCBidWlsZCBmb3IgdGhlIFNESywgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtTVEFHSU5HX0RJUn0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0RJUl9UQVJHRVQnPjxnbG9zc3Rlcm0+U1RBR0lOR19ESVJfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0RJUl9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LgorICAgICAgICAgICAgICAgICAgICBJbiBtb3N0IGNhc2VzLCB0aGlzIHBhdGggaXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU29tZSByZWNpcGVzIGJ1aWxkIGJpbmFyaWVzIHRoYXQgY2FuIHJ1biBvbiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBidXQgdGhvc2UgYmluYXJpZXMgaW4gdHVybiBnZW5lcmF0ZSBjb2RlIGZvcgorICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGRpZmZlcmVudCBzeXN0ZW0gKGUuZy4gY3Jvc3MtY2FuYWRpYW4gcmVjaXBlcykuCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIHRlcm1pbm9sb2d5IGZyb20gR05VLCB0aGUgcHJpbWFyeSBzeXN0ZW0gaXMgcmVmZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYXMgdGhlICJIT1NUIiBhbmQgdGhlIHNlY29uZGFyeSwgb3IgZGlmZmVyZW50LCBzeXN0ZW0gaXMKKyAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgdGhlICJUQVJHRVQiLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgYmluYXJpZXMgcnVuIG9uIHRoZSAiSE9TVCIgc3lzdGVtIGFuZAorICAgICAgICAgICAgICAgICAgICBhbmQgZ2VuZXJhdGUgYmluYXJpZXMgZm9yIHRoZSAiVEFSR0VUIiBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TVEFHSU5HX0RJUl9UQVJHRVQ8L2ZpbGVuYW1lPiBwb2ludHMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgdXNlZCBmb3IgdGhlICJUQVJHRVQiIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFHSU5HX0VUQ0RJUl9OQVRJVkUnPjxnbG9zc3Rlcm0+U1RBR0lOR19FVENESVJfTkFUSVZFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVEFHSU5HX0VUQ0RJUl9OQVRJVkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIC9ldGMgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L2V0YzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgc3lzcm9vdCBkaXJlY3RvcnkgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfRVhFQ1BSRUZJWERJUic+PGdsb3NzdGVybT5TVEFHSU5HX0VYRUNQUkVGSVhESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfRVhFQ1BSRUZJWERJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3VzciBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3I8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19JTkNESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19JTkNESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfSU5DRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2luY2x1ZGUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGJlaW5nIGJ1aWx0IChTVEFHSU5HX0RJUl9IT1NUKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2luY2x1ZGU8L2ZpbGVuYW1lPiBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICByZWNpcGUgYmVpbmcgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgKDxsaW5rIGxpbmtlbmQ9J3Zhci1TVEFHSU5HX0RJUl9IT1NUJz48ZmlsZW5hbWU+U1RBR0lOR19ESVJfSE9TVDwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19JTkNESVJfTkFUSVZFJz48Z2xvc3N0ZXJtPlNUQUdJTkdfSU5DRElSX05BVElWRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19JTkNESVJfTkFUSVZFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2luY2x1ZGUgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9pbmNsdWRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19LRVJORUxfRElSJz48Z2xvc3N0ZXJtPlNUQUdJTkdfS0VSTkVMX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBR0lOR19LRVJORUxfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1RBR0lOR19MSUJESVInPjxnbG9zc3Rlcm0+U1RBR0lOR19MSUJESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfTElCRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSAvdXNyL2xpYiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgY3VycmVudCByZWNpcGUgaXMgYmVpbmcgYnVpbHQgKFNUQUdJTkdfRElSX0hPU1QpLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgPGZpbGVuYW1lPi91c3IvbGliPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIHRhcmdldCBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIGN1cnJlbnQgcmVjaXBlIGlzIGJlaW5nIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICg8bGluayBsaW5rZW5kPSd2YXItU1RBR0lOR19ESVJfSE9TVCc+PGZpbGVuYW1lPlNUQUdJTkdfRElSX0hPU1Q8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQUdJTkdfTElCRElSX05BVElWRSc+PGdsb3NzdGVybT5TVEFHSU5HX0xJQkRJUl9OQVRJVkU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNUQUdJTkdfTElCRElSX05BVElWRVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgL3Vzci9saWIgc3ViZGlyZWN0b3J5IG9mIHRoZSBzeXNyb290IGRpcmVjdG9yeSBmb3IgdGhlIGJ1aWxkIGhvc3QuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSA8ZmlsZW5hbWU+L3Vzci9saWI8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnkgb2YgdGhlIHN5c3Jvb3QgZGlyZWN0b3J5IGZvciB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TVEFNUCc+PGdsb3NzdGVybT5TVEFNUDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBTVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuIFRoZSBwYXRoIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcyBzdHJpbmcgYW5kIHRoZW4gYXBwZW5kaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBiYXNlIHBhdGggdXNlZCB0byBjcmVhdGUgcmVjaXBlIHN0YW1wIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICBUaGUgcGF0aCB0byBhbiBhY3R1YWwgc3RhbXAgZmlsZSBpcyBjb25zdHJ1Y3RlZCBieSBldmFsdWF0aW5nIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGFuZCB0aGVuIGFwcGVuZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHksIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgZm9yIDxmaWxlbmFtZT5TVEFNUDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGFzIHNldCBpbiB0aGUgPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICAgICAgICAgIGlzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNUQU1QID0gIiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgPGxpbmsgbGlua2VuZD0ndmFyLVNUQU1QU19ESVInPjxmaWxlbmFtZT5TVEFNUFNfRElSPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTVVMVElNQUNIX1RBUkdFVF9TWVMnPjxmaWxlbmFtZT5NVUxUSU1BQ0hfVEFSR0VUX1NZUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRFTkRQRSc+PGZpbGVuYW1lPkVYVEVORFBFPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFYnPjxmaWxlbmFtZT5QVjwvZmlsZW5hbWU+PC9saW5rPiwgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1QUic+PGZpbGVuYW1lPlBSPC9maWxlbmFtZT48L2xpbms+IGZvciByZWxhdGVkIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUQU1QU19ESVInPjxnbG9zc3Rlcm0+U1RBTVBTX0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1RBTVBTX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIHN0YW1wcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGJhc2UgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHBsYWNlcyBzdGFtcHMuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtUTVBESVJ9L3N0YW1wczwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNUUklQJz48Z2xvc3N0ZXJtPlNUUklQPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVFJJUFtkb2NdID0gIk1pbmltYWwgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1biAnc3RyaXAnIChzdHJpcCBzeW1ib2xzKS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgbWluaW1hbCBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdHJpcDwvZmlsZW5hbWU+LCB3aGljaCBpcyB1c2VkIHRvIHN0cmlwCisgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1VNTUFSWSc+PGdsb3NzdGVybT5TVU1NQVJZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTVU1NQVJZW2RvY10gPSAiVGhlIHNob3J0ICg4MCBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcgc3lzdGVtcyBzdWNoIGFzIG9wa2csIHJwbSBvciBkcGtnLiBCeSBkZWZhdWx0LCBTVU1NQVJZIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBERVNDUklQVElPTiB2YXJpYWJsZSBpZiBERVNDUklQVElPTiBpcyBub3Qgc2V0IGluIHRoZSByZWNpcGUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNob3J0ICg3MiBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtcyBzdWNoIGFzIDxmaWxlbmFtZT5vcGtnPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5ycG08L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZHBrZzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCA8ZmlsZW5hbWU+U1VNTUFSWTwvZmlsZW5hbWU+IGlzIHVzZWQgdG8gZGVmaW5lCisgICAgICAgICAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItREVTQ1JJUFRJT04nPjxmaWxlbmFtZT5ERVNDUklQVElPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpZiA8ZmlsZW5hbWU+REVTQ1JJUFRJT048L2ZpbGVuYW1lPiBpcyBub3Qgc2V0CisgICAgICAgICAgICAgICAgICAgIGluIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1ZORElSJz48Z2xvc3N0ZXJtPlNWTkRJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgU1ZORElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBTdWJ2ZXJzaW9uIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIGZpbGVzIGNoZWNrZWQgb3V0IG9mIGEgU3VidmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gYXJlIHN0b3JlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUnPjxnbG9zc3Rlcm0+U1lTTElOVVhfREVGQVVMVF9DT05TT0xFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gdXNlIGEgY29uc29sZSBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIHJlY2lwZSBhcyBmb2xsb3dzIHdoZXJlICJYIiBpcworICAgICAgICAgICAgICAgICAgICB0aGUgY29uc29sZSBudW1iZXIgeW91IHdhbnQgdG8gdXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU0xJTlVYX0RFRkFVTFRfQ09OU09MRSA9ICJjb25zb2xlPXR0eVgiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgaW5pdGlhbGx5IHNldHMgdGhpcyB2YXJpYWJsZSB0byBudWxsIGJ1dCB0aGVuIGNoZWNrcworICAgICAgICAgICAgICAgICAgICBmb3IgYSB2YWx1ZSBsYXRlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9PUFRTJz48Z2xvc3N0ZXJtPlNZU0xJTlVYX09QVFM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU0xJTlVYX09QVFNbZG9jXSA9ICJMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIExpc3RzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUuCisgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBsaXN0IG11bHRpcGxlIG9wdGlvbnMsIHNlcGFyYXRlIHRoZSBvcHRpb25zCisgICAgICAgICAgICAgICAgICAgIHdpdGggYSBzZW1pY29sb24gY2hhcmFjdGVyICg8ZmlsZW5hbWU+OzwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdXNlcyB0aGlzIHZhcmlhYmxlIHRvIGNyZWF0ZSBhIHNldCBvZiBvcHRpb25zLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU0xJTlVYX1NFUklBTCc+PGdsb3NzdGVybT5TWVNMSU5VWF9TRVJJQUw8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU0xJTlVYX1NFUklBTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIHNlcmlhbCBwb3J0IG9yIHR1cm5zIGl0IG9mZi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuCisgICAgICAgICAgICAgICAgICAgIFRvIHR1cm4gb2ZmIHNlcmlhbCwgc2V0IHRoaXMgdmFyaWFibGUgdG8gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIGluIHlvdXIgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUncyBkZWZhdWx0IHZhbHVlIGlzIHNldCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzbGludXgnPjxmaWxlbmFtZT5zeXNsaW51eDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU0xJTlVYX1NFUklBTCA/PSAiMCAxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGNoZWNrcyBmb3IgYW5kIHVzZXMgdGhlIHZhcmlhYmxlIGFzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNMSU5VWF9TUExBU0gnPjxnbG9zc3Rlcm0+U1lTTElOVVhfU1BMQVNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9TUExBU0hbZG9jXSA9ICJBbiAuTFNTIGZpbGUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIFZHQSBib290IG1lbnUgd2hlbiB5b3UgYXJlIHVzaW5nIHRoZSBib290IG1lbnUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQW4gPGZpbGVuYW1lPi5MU1M8L2ZpbGVuYW1lPiBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LgorICAgICAgICAgICAgICAgICAgICBZb3UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiB5b3VyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c2xpbnV4Jz48ZmlsZW5hbWU+c3lzbGludXg8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgY2hlY2tzIGZvciB0aGlzIHZhcmlhYmxlIGFuZCBpZiBmb3VuZCwgdGhlCisgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaW5zdGFsbHMgdGhlIHNwbGFzaCBzY3JlZW4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItU1lTTElOVVhfU0VSSUFMX1RUWSc+PGdsb3NzdGVybT5TWVNMSU5VWF9TRVJJQUxfVFRZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNMSU5VWF9TRVJJQUxfVFRZW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgICAgIFRoZSB2YXJpYWJsZSdzIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXNsaW51eCc+PGZpbGVuYW1lPnN5c2xpbnV4PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTTElOVVhfU0VSSUFMX1RUWSA/PSAiY29uc29sZT10dHlTMCwxMTUyMDAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzIGNoZWNrcyBmb3IgYW5kIHVzZXMgdGhlIHZhcmlhYmxlIGFzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNST09UX1BSRVBST0NFU1NfRlVOQ1MnPjxnbG9zc3Rlcm0+U1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbCBmaWxlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBzeXNyb290LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX0FVVE9fRU5BQkxFJz48Z2xvc3N0ZXJtPlNZU1RFTURfQVVUT19FTkFCTEU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU1RFTURfQVVUT19FTkFCTEVbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNlcnZpY2UgeW91IGhhdmUgc3BlY2lmaWVkIGluIFNZU1RFTURfU0VSVklDRSBzaG91bGQgYmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IG9yIG5vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXN5c3RlbWQnPjxmaWxlbmFtZT5zeXN0ZW1kPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1lTVEVNRF9TRVJWSUNFJz48ZmlsZW5hbWU+U1lTVEVNRF9TRVJWSUNFPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgb3Igbm90LgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSBpcyBlbmFibGVkIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgYXQgYm9vdCB0aW1lLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz48ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFNZU1RFTURfQVVUT19FTkFCTEUgPz89ICJlbmFibGUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoZSBzZXJ2aWNlIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPlNZU1RFTURfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFNZU1RFTURfUEFDS0FHRVNbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgbG9jYXRlcyB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIHdoZW4gdGhleSBhcmUgbm90IGZvdW5kIGluIHRoZSBtYWluIHJlY2lwZSdzIHBhY2thZ2UuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zeXN0ZW1kJz48ZmlsZW5hbWU+c3lzdGVtZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZSBsb2NhdGVzIHRoZSBzeXN0ZW1kIHVuaXQgZmlsZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICB0aGV5IGFyZSBub3QgZm91bmQgaW4gdGhlIG1haW4gcmVjaXBlJ3MgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TWVNURU1EX1BBQ0tBR0VTPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgIHN1Y2ggdGhhdCB0aGUgc3lzdGVtZCB1bml0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIHJlc2lkZSBpbgorICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBlcyBtYWluIHBhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9QQUNLQUdFUyA/PSAiJHtQTn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgdGhlc2UgdW5pdCBmaWxlcyBhcmUgbm90IGluIHRoaXMgcmVjaXBlJ3MgbWFpbgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCB5b3UgbmVlZCB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlNZU1RFTURfUEFDS0FHRVM8L2ZpbGVuYW1lPiB0byBsaXN0IHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIG9yIHBhY2thZ2VzIGluIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gY2FuIGZpbmQgdGhlIHN5c3RlbWQKKyAgICAgICAgICAgICAgICAgICAgdW5pdCBmaWxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1TWVNURU1EX1NFUlZJQ0UnPjxnbG9zc3Rlcm0+U1lTVEVNRF9TRVJWSUNFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNURU1EX1NFUlZJQ0VbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IgYSBwYWNrYWdlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc3lzdGVtZCc+PGZpbGVuYW1lPnN5c3RlbWQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzcGVjaWZ5IHRoaXMgZmlsZSBpbiB5b3VyIHJlY2lwZSwgdXNlIGEgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBuYW1lIG92ZXJyaWRlIHRvIGluZGljYXRlIHRoZSBwYWNrYWdlIHRvIHdoaWNoIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBhcHBsaWVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgY29ubm1hbiByZWNpcGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVNZU1ZJTklUX0VOQUJMRURfR0VUVFlTJz48Z2xvc3N0ZXJtPlNZU1ZJTklUX0VOQUJMRURfR0VUVFlTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBTWVNWSU5JVF9FTkFCTEVEX0dFVFRZU1tkb2NdID0gIlNwZWNpZmllcyB3aGljaCB2aXJ0dWFsIHRlcm1pbmFscyBzaG91bGQgYmUgcnVubmluZyBhIGdldHR5LCB0aGUgZGVmYXVsdCBpcyAnMScuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNuZXctcmVjaXBlLWVuYWJsaW5nLXN5c3RlbS1zZXJ2aWNlcyc+U3lzVmluaXQ8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHZpcnR1YWwgdGVybWluYWxzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHJ1bm5pbmcgYQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dldHR5XyUyOFVuaXglMjknPmdldHR5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGFsbG93aW5nIGxvZ2luKSwgYXNzdW1pbmcKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRV9WVCc+PGZpbGVuYW1lPlVTRV9WVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3Qgc2V0IHRvICIwIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TWVNWSU5JVF9FTkFCTEVEX0dFVFRZUzwvZmlsZW5hbWU+IGlzICIxIgorICAgICAgICAgICAgICAgICAgICAoaS5lLiBvbmx5IHJ1biBhIGdldHR5IG9uIHRoZSBmaXJzdCB2aXJ0dWFsIHRlcm1pbmFsKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdCc+PHRpdGxlPlQ8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVCc+PGdsb3NzdGVybT5UPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2VyZSBCaXRCYWtlIHBsYWNlcyB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIGNvbnNpc3QgbW9zdGx5IG9mIHRhc2sgbG9ncyBhbmQgc2NyaXB0cywgd2hlbiBidWlsZGluZyBhIHBhcnRpY3VsYXIgcmVjaXBlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMKKyAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlIGlzIHR5cGljYWxseSBzZXQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUID0gIiR7V09SS0RJUn0vdGVtcCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0ndmFyLVdPUktESVInPjxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCBCaXRCYWtlIHVucGFja3MgYW5kIGJ1aWxkcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZSBzZXRzIHRoaXMgdmFyaWFibGUuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5UaGUgPGZpbGVuYW1lPlQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBub3QgdG8gYmUgY29uZnVzZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICB0aGUgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPiB2YXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggcG9pbnRzIHRvIHRoZSByb290IG9mIHRoZSBkaXJlY3RvcnkgdHJlZSB3aGVyZSBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHBsYWNlcyB0aGUgb3V0cHV0IG9mIGFuIGVudGlyZSBidWlsZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfQVJDSCc+PGdsb3NzdGVybT5UQVJHRVRfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBkZXZpY2UgYmVpbmcgYnVpbHQuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlczogYXJtLCBtaXBzLCBwcGMsIHg4NiwgeDg2LTY0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgbWFjaGluZSdzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgbWFueQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IGlzIGJ5IG5vIG1lYW5zIGNvbXBsZXRlIGFzIHRoZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICAgICAgaXMgY29uZmlndXJhYmxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFybQorICAgICBpNTg2CisgICAgIHg4Nl82NAorICAgICBwb3dlcnBjCisgICAgIHBvd2VycGM2NAorICAgICBtaXBzCisgICAgIG1pcHNlbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIG1hY2hpbmUgYXJjaGl0ZWN0dXJlcywgc2VlCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9BUkNIJz48ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9BU19BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9BU19BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfQVNfQVJDSFtkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFzc2VtYmxlciBmbGFncyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQVNfQVJDSDwvZmlsZW5hbWU+IGlzIGluaXRpYWxpemVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfQVNBUkdTJz48ZmlsZW5hbWU+VFVORV9BU0FSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9BU19BUkNIID0gIiR7VFVORV9BU0FSR1N9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NDX0FSQ0gnPjxnbG9zc3Rlcm0+VEFSR0VUX0NDX0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9DQ19BUkNIW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEMgY29tcGlsZXIgZmxhZ3MgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0NDX0FSQ0g8L2ZpbGVuYW1lPiBpcyBpbml0aWFsaXplZCBmcm9tCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UVU5FX0NDQVJHUyc+PGZpbGVuYW1lPlRVTkVfQ0NBUkdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYSBjb21tb24gd29ya2Fyb3VuZCB0byBhcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1MREZMQUdTJz48ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPlRBUkdFVF9DQ19BUkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHJlY2lwZXMgdGhhdCBidWlsZCBzb2Z0d2FyZSBmb3IgdGhlIHRhcmdldCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICB3b3VsZCBub3Qgb3RoZXJ3aXNlIHJlc3BlY3QgdGhlIGV4cG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TERGTEFHUzwvZmlsZW5hbWU+IHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NDX0tFUk5FTF9BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9DQ19LRVJORUxfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NDX0tFUk5FTF9BUkNIW2RvY10gPSAiVGhpcyBpcyBhIHNwZWNpZmljIGtlcm5lbCBjb21waWxlciBmbGFnIGZvciBhIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmUuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIHNwZWNpZmljIGtlcm5lbCBjb21waWxlciBmbGFnIGZvciBhIENQVSBvcgorICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHR1bmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBmbGFnIGlzIHVzZWQgcmFyZWx5IGFuZCBvbmx5IGZvciBjYXNlcyB3aGVyZSBhCisgICAgICAgICAgICAgICAgICAgIHVzZXJzcGFjZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9DQ0FSR1MnPjxmaWxlbmFtZT5UVU5FX0NDQVJHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBrZXJuZWwgY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VEFSR0VUX0NDX0tFUk5FTF9BUkNIPC9maWxlbmFtZT4gdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgYWxsb3dzIHRoZSBrZXJuZWwgKGFuZCBhc3NvY2lhdGVkIG1vZHVsZXMpIHRvIHVzZSBhCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGV4YW1wbGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NGTEFHUyc+PGdsb3NzdGVybT5UQVJHRVRfQ0ZMQUdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgQ0ZMQUdTLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNGTEFHUyc+PGZpbGVuYW1lPkNGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgU0RLJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHNldHMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DRkxBR1MnPjxmaWxlbmFtZT5DRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4gdGhlIGVudmlyb25tZW50IHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEFSR0VUX0NGTEFHUzwvZmlsZW5hbWU+IHZhbHVlIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMgYnVpbHQgdXNpbmcgdGhlIFNESyBhbHNvIGhhdmUgdGhlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NQUEZMQUdTJz48Z2xvc3N0ZXJtPlRBUkdFVF9DUFBGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NQUEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDIHByZS1wcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICAgKGkuZS4gdG8gYm90aCB0aGUgQyBhbmQgdGhlIEMrKyBjb21waWxlcnMpIHdoZW4gYnVpbGRpbmcKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgaW4gdGhlIHRhcmdldCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1BQRkxBR1MnPjxmaWxlbmFtZT5DUFBGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB0aGUgU0RLJ3MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHNldHMKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1DUFBGTEFHUyc+PGZpbGVuYW1lPkNQUEZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9DUFBGTEFHUzwvZmlsZW5hbWU+IHZhbHVlIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZXMgYnVpbHQgdXNpbmcgdGhlIFNESyBhbHNvIGhhdmUgdGhlIGZsYWdzCisgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0NYWEZMQUdTJz48Z2xvc3N0ZXJtPlRBUkdFVF9DWFhGTEFHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0NYWEZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBDKysgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIEMrKyBjb21waWxlciB3aGVuCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUNYWEZMQUdTJz48ZmlsZW5hbWU+Q1hYRkxBR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIFNESydzIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBzZXRzCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ1hYRkxBR1MnPjxmaWxlbmFtZT5DWFhGTEFHUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQ1hYRkxBR1M8L2ZpbGVuYW1lPiB2YWx1ZSBzbyB0aGF0CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGJ1aWx0IHVzaW5nIHRoZSBTREsgYWxzbyBoYXZlIHRoZSBmbGFncworICAgICAgICAgICAgICAgICAgICBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9GUFUnPjxnbG9zc3Rlcm0+VEFSR0VUX0ZQVTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX0ZQVVtkb2NdID0gIlNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4gRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICdzb2Z0Jy4gSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAgICAgc2V0IHRvICJzb2Z0Ii4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9MRF9BUkNIJz48Z2xvc3N0ZXJtPlRBUkdFVF9MRF9BUkNIPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfTERfQVJDSFtkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbGlua2VyIGZsYWdzIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfTERfQVJDSDwvZmlsZW5hbWU+IGlzIGluaXRpYWxpemVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfTERBUkdTJz48ZmlsZW5hbWU+VFVORV9MREFSR1M8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYnkgZGVmYXVsdCBpbiB0aGUgQml0QmFrZSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5tZXRhL2NvbmYvYml0YmFrZS5jb25mPC9maWxlbmFtZT4pOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRBUkdFVF9MRF9BUkNIID0gIiR7VFVORV9MREFSR1N9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX0xERkxBR1MnPjxnbG9zc3Rlcm0+VEFSR0VUX0xERkxBR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9MREZMQUdTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBmbGFncyB0byBwYXNzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZyBmb3IgdGhlIHRhcmdldC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGZsYWdzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgICAgICAgICBXaGVuIGJ1aWxkaW5nIGluIHRoZSB0YXJnZXQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBieSBkZWZhdWx0LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSBTREsncyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgc2V0cworICAgICAgICAgICAgICAgICAgICB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxERkxBR1MnPjxmaWxlbmFtZT5MREZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRBUkdFVF9MREZMQUdTPC9maWxlbmFtZT4gdmFsdWUgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlcyBidWlsdCB1c2luZyB0aGUgU0RLIGFsc28gaGF2ZSB0aGUgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgYXBwbGllZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfT1MnPjxnbG9zc3Rlcm0+VEFSR0VUX09TPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfT1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCdzIG9wZXJhdGluZyBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSB0YXJnZXQncyBvcGVyYXRpbmcgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgdmFyaWFibGUgY2FuIGJlIHNldCB0byAibGludXgiIGZvciA8ZmlsZW5hbWU+Z2xpYmM8L2ZpbGVuYW1lPi1iYXNlZCBzeXN0ZW1zIGFuZAorICAgICAgICAgICAgICAgICAgICB0byAibGludXgtdWNsaWJjIiBmb3IgPGZpbGVuYW1lPnVjbGliYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBGb3IgQVJNL0VBQkkgdGFyZ2V0cywgdGhlcmUgYXJlIGFsc28gImxpbnV4LWdudWVhYmkiIGFuZAorICAgICAgICAgICAgICAgICAgICAibGludXgtdWNsaWJjLWdudWVhYmkiIHZhbHVlcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UQVJHRVRfUFJFRklYJz48Z2xvc3N0ZXJtPlRBUkdFVF9QUkVGSVg8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRBUkdFVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IHVzZWQgZm9yIHRoZSB0b29sY2hhaW4gYmluYXJ5IHRhcmdldCB0b29scy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHByZWZpeCB1c2VkIGZvciB0aGUgdG9vbGNoYWluIGJpbmFyeSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgdG9vbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiByZWNpcGUgYW5kIHRoZSBidWlsZCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfUFJFRklYPC9maWxlbmFtZT4gaXMgc2V0IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlY2lwZXMgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQgbWFjaGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHs8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX1NZUyc+VEFSR0VUX1NZUzwvbGluaz59LSIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIDxmaWxlbmFtZT5uYXRpdmU8L2ZpbGVuYW1lPiByZWNpcGVzLCB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gc2V0cyB0aGUgdmFyaWFibGUgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkJVSUxEX1BSRUZJWDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8ZmlsZW5hbWU+bmF0aXZlc2RrPC9maWxlbmFtZT4gcmVjaXBlcywgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3lzdGVtIHNldHMgdGhlIHZhcmlhYmxlIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5TREtfUFJFRklYPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRBUkdFVF9TWVMnPjxnbG9zc3Rlcm0+VEFSR0VUX1NZUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEFSR0VUX1NZU1tkb2NdID0gIlRoZSB0YXJnZXQgc3lzdGVtIGlzIGNvbXByaXNlZCBvZiBUQVJHRVRfQVJDSCxUQVJHRVRfVkVORE9SIGFuZCBUQVJHRVRfT1MuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSwgZm9yIHdoaWNoIHRoZSBidWlsZCBpcyBvY2N1cnJpbmcgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiYXNlZCBvbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEFSR0VUX0FSQ0gnPjxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9WRU5ET1InPjxmaWxlbmFtZT5UQVJHRVRfVkVORE9SPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9PUyc+PGZpbGVuYW1lPlRBUkdFVF9PUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfU1lTPC9maWxlbmFtZT4gdmFyaWFibGUgeW91cnNlbGYuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2lkZXIgdGhlc2UgdHdvIGV4YW1wbGVzOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdpdmVuIGEgPGZpbGVuYW1lPm5hdGl2ZTwvZmlsZW5hbWU+IHJlY2lwZSBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0LCB4ODYgbWFjaGluZSBydW5uaW5nIExpbnV4LCB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaTY4Ni1saW51eCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2l2ZW4gYSByZWNpcGUgYmVpbmcgYnVpbHQgZm9yIGEgbGl0dGxlLWVuZGlhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVBTIHRhcmdldCBydW5uaW5nIExpbnV4LCB0aGUgdmFsdWUgbWlnaHQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsLWxpbnV4Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEFSR0VUX1ZFTkRPUic+PGdsb3NzdGVybT5UQVJHRVRfVkVORE9SPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUQVJHRVRfVkVORE9SW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCB2ZW5kb3IuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgdmVuZG9yLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRDTElCQ0FQUEVORCc+PGdsb3NzdGVybT5UQ0xJQkNBUFBFTkQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRDTElCQ0FQUEVORFtkb2NdID0gIlNwZWNpZmllcyBhIHN1ZmZpeCBhcHBlbmRlZCB0byBUTVBESVIgdGhhdCBpZGVudGlmaWVzIHRoZSBsaWJjIHZhcmlhbnQgZm9yIHRoZSBidWlsZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBzdWZmaXggdG8gYmUgYXBwZW5kZWQgb250byB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHN1ZmZpeCBpZGVudGlmaWVzIHRoZSA8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+IHZhcmlhbnQKKyAgICAgICAgICAgICAgICAgICAgZm9yIGJ1aWxkaW5nLgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgYnVpbGRpbmcgZm9yIG11bHRpcGxlIHZhcmlhbnRzIHdpdGggdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBtZWNoYW5pc20gZW5zdXJlcyB0aGF0IG91dHB1dCBmb3IgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5saWJjPC9maWxlbmFtZT4gdmFyaWFudHMgaXMga2VwdCBzZXBhcmF0ZSB0bworICAgICAgICAgICAgICAgICAgICBhdm9pZCBwb3RlbnRpYWwgY29uZmxpY3RzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgPGZpbGVuYW1lPmRlZmF1bHRzZXR1cC5jb25mPC9maWxlbmFtZT4gZmlsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlRDTElCQ0FQUEVORDwvZmlsZW5hbWU+IGlzCisgICAgICAgICAgICAgICAgICAgICItJHtUQ0xJQkN9Ii4KKyAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgZGlzdHJvcyBzdWNoIGFzIHBva3ksIHdoaWNoIG5vcm1hbGx5IG9ubHkgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBvbmUgPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPiB2YXJpYW50LCBzZXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRDTElCQ0FQUEVORDwvZmlsZW5hbWU+IHRvICIiIGluIHRoZWlyIGRpc3RybworICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgcmVzdWx0aW5nIGluIG5vIHN1ZmZpeCBiZWluZyBhcHBsaWVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRDTElCQyc+PGdsb3NzdGVybT5UQ0xJQkM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRDTElCQ1tkb2NdID0gIlNwZWNpZmllcyBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIFlvdSBjYW4gc2VsZWN0ICdnbGliYycgb3IgJ3VjbGliYycuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5ICg8ZmlsZW5hbWU+bGliYzwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgcmVwbGFjZXMgPGZpbGVuYW1lPlBPS1lMSUJDPC9maWxlbmFtZT4sIHdoaWNoIGlzIG5vIGxvbmdlcgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VsZWN0ICJnbGliYyIgb3IgInVjbGliYyIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVENNT0RFJz48Z2xvc3N0ZXJtPlRDTU9ERTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVENNT0RFW2RvY10gPSAiRW5hYmxlcyBhbiBleHRlcm5hbCB0b29sY2hhaW4gKHdoZXJlIHByb3ZpZGVkIGJ5IGFuIGFkZGl0aW9uYWwgbGF5ZXIpIGlmIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gJ2RlZmF1bHQnLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdG9vbGNoYWluIHNlbGVjdG9yLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gY29udHJvbHMgdGhlIGNoYXJhY3RlcmlzdGljcworICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZ2VuZXJhdGVkIHBhY2thZ2VzIGFuZCBpbWFnZXMgYnkgdGVsbGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGljaCB0b29sY2hhaW4gcHJvZmlsZSB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGJ1aWxkcyBpdHMgb3duCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlJ3MgZGVmYXVsdCB2YWx1ZSBpcyAiZGVmYXVsdCIsIHdoaWNoIHVzZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBpbnRlcm5hbCB0b29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRDTU9ERTwvZmlsZW5hbWU+IGlzIHNldCB0byBhIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuICJkZWZhdWx0IiwgdGhlbiBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbGNoYWluIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgb2xkZXIgb3IgbmV3ZXIgdmVyc2lvbnMgb2YgdGhlc2UgY29tcG9uZW50cworICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHQgY2F1c2UgYnVpbGQgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fUkVMRUFTRV9OT1RFUzsnPlJlbGVhc2UgTm90ZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzcGVjaWZpYyBjb21wb25lbnRzIHdpdGggd2hpY2ggdGhlIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBjb21wYXRpYmxlLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+VENNT0RFPC9maWxlbmFtZT4gdmFyaWFibGUgaXMgc2ltaWxhciB0bworICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVENMSUJDJz48ZmlsZW5hbWU+VENMSUJDPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBjb250cm9scyB0aGUgdmFyaWFudCBvZiB0aGUgR05VIHN0YW5kYXJkIEMgbGlicmFyeQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmxpYmM8L2ZpbGVuYW1lPikgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nbGliYzwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT51Y2xpYmM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2l0aCBhZGRpdGlvbmFsIGxheWVycywgaXQgaXMgcG9zc2libGUgdG8gdXNlIGEgcHJlLWNvbXBpbGVkCisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgT25lIGV4YW1wbGUgaXMgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBzdXBwb3J0IGZvciB0aGlzIHRvb2xjaGFpbiByZXNpZGVzIGluIHRoZSBzZXBhcmF0ZQorICAgICAgICAgICAgICAgICAgICA8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5NZW50b3IgR3JhcGhpY3M8L3RyYWRlbWFyaz4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBsYXllciBhdAorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0aHViLmNvbS9NZW50b3JFbWJlZGRlZC9tZXRhLXNvdXJjZXJ5Lyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsYXllcidzIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIFNvdXJjZXJ5IEcrKyBUb29sY2hhaW4gYXMKKyAgICAgICAgICAgICAgICAgICAgYW4gZXh0ZXJuYWwgdG9vbGNoYWluLgorICAgICAgICAgICAgICAgICAgICBJbiBzdW1tYXJ5LCB5b3UgbXVzdCBiZSBzdXJlIHRvIGFkZCB0aGUgbGF5ZXIgdG8geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YmJsYXllcnMuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gZnJvbnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhPC9maWxlbmFtZT4gbGF5ZXIgYW5kIHRoZW4gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+RVhURVJOQUxfVE9PTENIQUlOPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGxvY2F0aW9uIGluIHdoaWNoIHlvdSBpbnN0YWxsZWQgdGhlIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZ1bmRhbWVudGFscyB1c2VkIGZvciB0aGlzIGV4YW1wbGUgYXBwbHkgdG8gYW55CisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIHRvb2xjaGFpbi4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgPGZpbGVuYW1lPm1ldGEtc291cmNlcnk8L2ZpbGVuYW1lPiBhcyBhCisgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIGZvciBhZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgZXh0ZXJuYWwgdG9vbGNoYWlucy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX0VYUE9SVF9ESVInPjxnbG9zc3Rlcm0+VEVTVF9FWFBPUlRfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX0VYUE9SVF9ESVJbZG9jXSA9ICJUaGUgbG9jYXRpb24gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBleHBvcnQgdGVzdHMgd2hlbiB0aGUgVEVTVF9FWFBPUlRfT05MWSB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBsb2NhdGlvbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIGV4cG9ydAorICAgICAgICAgICAgICAgICAgICB0ZXN0cyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9FWFBPUlRfT05MWSc+PGZpbGVuYW1lPlRFU1RfRVhQT1JUX09OTFk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgaXMgc2V0IHRvICIxIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX0VYUE9SVF9ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+IiR7VE1QRElSfS90ZXN0aW1hZ2UvJHtQTn0iPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9FWFBPUlRfT05MWSc+PGdsb3NzdGVybT5URVNUX0VYUE9SVF9PTkxZPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX0VYUE9SVF9PTkxZW2RvY10gPSAiU3BlY2lmaWVzIHRvIGV4cG9ydCB0aGUgdGVzdHMgb25seS4gU2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBydW4gdGhlIHRlc3RzIGJ1dCB5b3Ugd2FudCB0aGVtIHRvIGJlIGV4cG9ydGVkIGluIGEgbWFubmVyIHRoYXQgeW91IHRvIHJ1biB0aGVtIG91dHNpZGUgb2YgdGhlIGJ1aWxkIHN5c3RlbS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdG8gZXhwb3J0IHRoZSB0ZXN0cyBvbmx5LgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byAiMSIgaWYgeW91IGRvIG5vdCB3YW50IHRvIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgYnV0IHlvdSB3YW50IHRoZW0gdG8gYmUgZXhwb3J0ZWQgaW4gYSBtYW5uZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICB5b3UgdG8gcnVuIHRoZW0gb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfSU1BR0UnPjxnbG9zc3Rlcm0+VEVTVF9JTUFHRTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9JTUFHRVtkb2NdID0gIkVuYWJsZXMgdGVzdCBib290aW5nIG9mIHZpcnR1YWwgbWFjaGluZSBpbWFnZXMgdW5kZXIgdGhlIFFFTVUgZW11bGF0b3IgYWZ0ZXIgYW55IHJvb3QgZmlsZXN5c3RlbXMgYXJlIGNyZWF0ZWQgYW5kIHJ1bnMgdGVzdHMgYWdhaW5zdCB0aG9zZSBpbWFnZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQXV0b21hdGljYWxseSBydW5zIHRoZSBzZXJpZXMgb2YgYXV0b21hdGVkIHRlc3RzIGZvcgorICAgICAgICAgICAgICAgICAgICBpbWFnZXMgd2hlbiBhbiBpbWFnZSBpcyBzdWNjZXNzZnVsbHkgYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHRlc3RzIGFyZSB3cml0dGVuIGluIFB5dGhvbiBtYWtpbmcgdXNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dW5pdHRlc3Q8L2ZpbGVuYW1lPiBtb2R1bGUsIGFuZCB0aGUgbWFqb3JpdHkgb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlbSBydW4gY29tbWFuZHMgb24gdGhlIHRhcmdldCBzeXN0ZW0gb3ZlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2V0IHRoaXMgdmFyaWFibGUgdG8gIjEiIGluIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHRvIGhhdmUgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBydW4KKyAgICAgICAgICAgICAgICAgICAgdGhlc2UgdGVzdHMgYWZ0ZXIgYW4gaW1hZ2Ugc3VjY2Vzc2Z1bGx5IGJ1aWxkczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX0lNQUdFID0gIjEiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcsIHJ1bm5pbmcsIGFuZCB3cml0aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZXNlIHRlc3RzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNwZXJmb3JtaW5nLWF1dG9tYXRlZC1ydW50aW1lLXRlc3RpbmcnPlBlcmZvcm1pbmcgQXV0b21hdGVkIFJ1bnRpbWUgVGVzdGluZzwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy10ZXN0aW1hZ2UnPjxmaWxlbmFtZT50ZXN0aW1hZ2UuYmJjbGFzczwvZmlsZW5hbWU+PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1URVNUX0xPR19ESVInPjxnbG9zc3Rlcm0+VEVTVF9MT0dfRElSPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX0xPR19ESVJbZG9jXSA9ICJIb2xkcyB0aGUgU1NIIGxvZyBhbmQgdGhlIGJvb3QgbG9nIGZvciBRRU1VIG1hY2hpbmVzLiBUaGUgPGZpbGVuYW1lPlRFU1RfTE9HX0RJUjwvZmlsZW5hbWU+IHZhcmlhYmxlIGRlZmF1bHRzIHRvICIke1dPUktESVJ9L3Rlc3RpbWFnZSIuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgSG9sZHMgdGhlIFNTSCBsb2cgYW5kIHRoZSBib290IGxvZyBmb3IgUUVNVSBtYWNoaW5lcy4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX0xPR19ESVI8L2ZpbGVuYW1lPiB2YXJpYWJsZSBkZWZhdWx0cworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+IiR7V09SS0RJUn0vdGVzdGltYWdlIjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFjdHVhbCB0ZXN0IHJlc3VsdHMgcmVzaWRlIGluIHRoZSB0YXNrIGxvZworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5sb2cuZG9fdGVzdGltYWdlPC9maWxlbmFtZT4pLCB3aGljaCBpcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvPC9maWxlbmFtZT4gZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9QT1dFUkNPTlRST0xfQ01EJz48Z2xvc3N0ZXJtPlRFU1RfUE9XRVJDT05UUk9MX0NNRDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9QT1dFUkNPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbnRyb2wgdGhlIHBvd2VyIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0IgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8KKyAgICAgICAgICAgICAgICAgICAgdXNlIHRvIGNvbnRyb2wgdGhlIHBvd2VyIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0LgorICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHksIHRoaXMgY29tbWFuZCB3b3VsZCBwb2ludCB0byBhIHNjcmlwdCB0aGF0CisgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1zIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gKGUuZy4gaW50ZXJhY3RpbmcKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBhIHdlYi1lbmFibGVkIHBvd2VyIHN0cmlwKS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNwZWNpZmllZCBjb21tYW5kIHNob3VsZCBleHBlY3QgdG8gcmVjZWl2ZSBhcyB0aGUgbGFzdAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCAib2ZmIiwgIm9uIiBvciAiY3ljbGUiIHNwZWNpZnlpbmcgdG8gcG93ZXIgb2ZmLAorICAgICAgICAgICAgICAgICAgICBvbiwgb3IgY3ljbGUgKHBvd2VyIG9mZiBhbmQgdGhlbiBwb3dlciBvbikgdGhlIGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgcmVzcGVjdGl2ZWx5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1MnPjxnbG9zc3Rlcm0+VEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9QT1dFUkNPTlRST0xfQ01EIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9QT1dFUkNPTlRST0xfQ01EJz48ZmlsZW5hbWU+VEVTVF9QT1dFUkNPTlRST0xfQ01EPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5nIDxmaWxlbmFtZT5URVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGl0IGlmIHlvdSB3aXNoLCBmb3IgZXhhbXBsZSwgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgYW5kIG5vbi1tYWNoaW5lLXNwZWNpZmljIHBhcnRzIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9RRU1VQk9PVF9USU1FT1VUJz48Z2xvc3N0ZXJtPlRFU1RfUUVNVUJPT1RfVElNRU9VVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEVTVF9RRU1VQk9PVF9USU1FT1VUW2RvY10gPSAiVGhlIHRpbWUgaW4gc2Vjb25kcyBhbGxvd2VkIGZvciBhbiBpbWFnZSB0byBib290IGJlZm9yZSBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyBiZWdpbiB0byBydW4gYWdhaW5zdCBhbiBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdGltZSBpbiBzZWNvbmRzIGFsbG93ZWQgZm9yIGFuIGltYWdlIHRvIGJvb3QgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRlZCBydW50aW1lIHRlc3RzIGJlZ2luIHRvIHJ1biBhZ2FpbnN0IGFuCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB0aW1lb3V0IHBlcmlvZCB0byBhbGxvdyB0aGUgYm9vdCBwcm9jZXNzIHRvCisgICAgICAgICAgICAgICAgICAgIHJlYWNoIHRoZSBsb2dpbiBwcm9tcHQgaXMgNTAwIHNlY29uZHMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCB2YWx1ZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0ZXN0aW5nIGltYWdlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGVyZm9ybWluZy1hdXRvbWF0ZWQtcnVudGltZS10ZXN0aW5nJz5QZXJmb3JtaW5nIEF1dG9tYXRlZCBSdW50aW1lIFRlc3Rpbmc8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9TRVJJQUxDT05UUk9MX0NNRCc+PGdsb3NzdGVybT5URVNUX1NFUklBTENPTlRST0xfQ01EPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcmlhbCBjb25zb2xlIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBvZiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgdW5kZXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21tYW5kIHNpbXBseSBuZWVkcyB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZQorICAgICAgICAgICAgICAgICAgICBhbmQgZm9yd2FyZCB0aGF0IGNvbm5lY3Rpb24gdG8gc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBhcyBhbnkgbm9ybWFsIHRlcm1pbmFsIHByb2dyYW0gZG9lcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgUGljb2NvbSB0ZXJtaW5hbCBwcm9ncmFtIG9uCisgICAgICAgICAgICAgICAgICAgIHNlcmlhbCBkZXZpY2UgPGZpbGVuYW1lPi9kZXYvdHR5VVNCMDwvZmlsZW5hbWU+IGF0CisgICAgICAgICAgICAgICAgICAgIDExNTIwMGJwcywgeW91IHdvdWxkIHNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1NFUklBTENPTlRST0xfQ01EID0gInBpY29jb20gL2Rldi90dHlVU0IwIC1iIDExNTIwMCIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTJz48Z2xvc3N0ZXJtPlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9TRVJJQUxDT05UUk9MX0NNRC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1URVNUX1NFUklBTENPTlRST0xfQ01EJz48ZmlsZW5hbWU+VEVTVF9TRVJJQUxDT05UUk9MX0NNRDwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICAgICAgU2V0dGluZyA8ZmlsZW5hbWU+VEVTVF9TRVJJQUxDT05UUk9MX0VYVFJBX0FSR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyBvcHRpb25hbC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgaXQgaWYgeW91IHdpc2gsIGZvciBleGFtcGxlLCB0byBzZXBhcmF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZS1zcGVjaWZpYyBhbmQgbm9uLW1hY2hpbmUtc3BlY2lmaWMgcGFydHMgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9TRVJWRVJfSVAnPjxnbG9zc3Rlcm0+VEVTVF9TRVJWRVJfSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfU0VSVkVSX0lQW2RvY10gPSAiVGhlIElQIGFkZHJlc3Mgb2YgdGhlIGJ1aWxkIG1hY2hpbmUgKGhvc3QgbWFjaGluZSkuIFRoaXMgSVAgYWRkcmVzcyBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIElQIGFkZHJlc3Mgb2YgdGhlIGJ1aWxkIG1hY2hpbmUgKGhvc3QgbWFjaGluZSkuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgSVAgYWRkcmVzcyBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGlmIGRldGVjdGlvbiBmYWlscywgdGhpcyB2YXJpYWJsZSBuZWVkcyB0byBiZSBzZXQKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGJ1aWxkIG1hY2hpbmUgKGkuZS4gd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGlzIHRha2luZyBwbGFjZSkuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX1NFUlZFUl9JUDwvZmlsZW5hbWU+IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBpcyBvbmx5IHVzZWQgZm9yIGEgc21hbGwgbnVtYmVyIG9mIHRlc3RzIHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAic21hcnQiIHRlc3Qgc3VpdGUsIHdoaWNoIG5lZWRzIHRvIGRvd25sb2FkCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBmcm9tIDxmaWxlbmFtZT5ERVBMT1lfRElSL3JwbTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9UQVJHRVQnPjxnbG9zc3Rlcm0+VEVTVF9UQVJHRVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfVEFSR0VUW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgbWV0aG9kIG9mIGRlcGxveWluZyB0aGUgaW1hZ2UgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIHRhcmdldCBtYWNoaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGNvbnRyb2xsZXIgdG8gdXNlIHdoZW4gcnVubmluZyB0ZXN0cworICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGEgdGVzdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgY29udHJvbGxlciB0byB1c2UgaXMgInFlbXUiOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfVEFSR0VUID0gInFlbXUiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQSB0YXJnZXQgY29udHJvbGxlciBpcyBhIGNsYXNzIHRoYXQgZGVmaW5lcyBob3cgYW4KKyAgICAgICAgICAgICAgICAgICAgaW1hZ2UgZ2V0cyBkZXBsb3llZCBvbiBhIHRhcmdldCBhbmQgaG93IGEgdGFyZ2V0IGlzIHN0YXJ0ZWQuCisgICAgICAgICAgICAgICAgICAgIEEgbGF5ZXIgY2FuIGV4dGVuZCB0aGUgY29udHJvbGxlcnMgYnkgYWRkaW5nIGEgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBsYXllcidzIDxmaWxlbmFtZT4vbGliL29lcWEvY29udHJvbGxlcnM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgYW5kIGJ5IGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5CYXNlVGFyZ2V0PC9maWxlbmFtZT4gY2xhc3MsIHdoaWNoIGlzIGFuIGFic3RyYWN0CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRoYXQgY2Fubm90IGJlIHVzZWQgYXMgYSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VEVTVF9UQVJHRVQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRFU1RfVEFSR0VUPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJxZW11IiBhbmQgIlFlbXVUYXJnZXQiOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdHMgYSBRRU1VIGltYWdlIGFuZCBydW5zIHRoZSB0ZXN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3FlbXUtaW1hZ2UtZW5hYmxpbmctdGVzdHMnPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gUUVNVTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPiJzaW1wbGVyZW1vdGUiIGFuZCAiU2ltcGxlUmVtb3RlVGFyZ2V0Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnMgdGhlIHRlc3RzIG9uIHRhcmdldCBoYXJkd2FyZSB0aGF0IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCBhbmQgcnVubmluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaGFyZHdhcmUgY2FuIGJlIG9uIHRoZSBuZXR3b3JrIG9yIGl0IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2aWNlIHJ1bm5pbmcgYW4gaW1hZ2Ugb24gUUVNVS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBhbHNvIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1URVNUX1RBUkdFVF9JUCc+PGZpbGVuYW1lPlRFU1RfVEFSR0VUX0lQPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgdXNlICJzaW1wbGVyZW1vdGUiIG9yICJTaW1wbGVSZW1vdGVUYXJnZXQiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGlzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc21hbGwgY2FwcyBuYW1lcyBhcmUga2VwdCBmb3IgY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Ikd1bW1pYm9vdFRhcmdldCI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvbWF0aWNhbGx5IGRlcGxveXMgYW5kIHJ1bnMgdGVzdHMgb24gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRkktZW5hYmxlZCBtYWNoaW5lIHRoYXQgaGFzIGEgbWFzdGVyIGltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZ3VtZW50IGlzIGRlZmluZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gcnVubmluZyB0ZXN0cyBvbiBoYXJkd2FyZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaGFyZHdhcmUtaW1hZ2UtZW5hYmxpbmctdGVzdHMnPkVuYWJsaW5nIFJ1bnRpbWUgVGVzdHMgb24gSGFyZHdhcmU8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9UQVJHRVRfSVAnPjxnbG9zc3Rlcm0+VEVTVF9UQVJHRVRfSVA8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfVEFSR0VUX0lQW2RvY10gPSAiVGhlIElQIGFkZHJlc3Mgb2YgeW91ciBoYXJkd2FyZSB1bmRlciB0ZXN0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIG9mIHlvdXIgaGFyZHdhcmUgdW5kZXIgdGVzdC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5URVNUX1RBUkdFVF9JUDwvZmlsZW5hbWU+IHZhcmlhYmxlIGhhcyBubworICAgICAgICAgICAgICAgICAgICBlZmZlY3Qgd2hlbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVEVTVF9UQVJHRVQnPjxmaWxlbmFtZT5URVNUX1RBUkdFVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG8gInFlbXUiLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBzcGVjaWZ5IHRoZSBJUCBhZGRyZXNzLCB5b3UgY2FuIGFsc28gaW5jbHVkZSBhCisgICAgICAgICAgICAgICAgICAgIHBvcnQuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBURVNUX1RBUkdFVF9JUCA9ICIxOTIuMTY4LjEuNDoyMjAxIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYSBwb3J0IGlzIHVzZWZ1bCB3aGVuIFNTSCBpcyBzdGFydGVkIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgbm9uLXN0YW5kYXJkIHBvcnQgb3IgaW4gY2FzZXMgd2hlbiB5b3VyIGhhcmR3YXJlIHVuZGVyIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaXMgYmVoaW5kIGEgZmlyZXdhbGwgb3IgbmV0d29yayB0aGF0IGlzIG5vdCBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlIGZyb20geW91ciBob3N0IGFuZCB5b3UgbmVlZCB0byBkbyBwb3J0IGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVEVTVF9TVUlURVMnPjxnbG9zc3Rlcm0+VEVTVF9TVUlURVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRFU1RfU1VJVEVTW2RvY10gPSAiQW4gb3JkZXJlZCBsaXN0IG9mIHRlc3RzIChtb2R1bGVzKSB0byBydW4gYWdhaW5zdCBhbiBpbWFnZSB3aGVuIHBlcmZvcm1pbmcgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBbiBvcmRlcmVkIGxpc3Qgb2YgdGVzdHMgKG1vZHVsZXMpIHRvIHJ1biBhZ2FpbnN0CisgICAgICAgICAgICAgICAgICAgIGFuIGltYWdlIHdoZW4gcGVyZm9ybWluZyBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwcm92aWRlcyBhIGNvcmUgc2V0IG9mIHRlc3RzCisgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgYWdhaW5zdCBpbWFnZXMuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGVyZSBpcyBvbmx5IHN1cHBvcnQgZm9yIHJ1bm5pbmcgdGhlc2UgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIFFFTVUuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgVGVzdHMgaW5jbHVkZSA8ZmlsZW5hbWU+cGluZzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3NoPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5kZjwvZmlsZW5hbWU+IGFtb25nCisgICAgICAgICAgICAgICAgICAgIG90aGVycy4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBhZGQgeW91ciBvd24gdGVzdHMgdG8gdGhlIGxpc3Qgb2YgdGVzdHMgYnkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kaW5nIDxmaWxlbmFtZT5URVNUX1NVSVRFUzwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TVUlURVNfYXBwZW5kID0gIiA8cmVwbGFjZWFibGU+bXl0ZXN0PC9yZXBsYWNlYWJsZT4iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIHRoZSAiYXV0byIgb3B0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgIGhhdmUgYWxsIGFwcGxpY2FibGUgdGVzdHMgcnVuIGFnYWluc3QgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRFU1RfU1VJVEVTX2FwcGVuZCA9ICIgYXV0byIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBVc2luZyB0aGlzIG9wdGlvbiBjYXVzZXMgdGhlIGJ1aWxkIHN5c3RlbSB0byBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgICAgIHJ1biB0ZXN0cyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGVzdHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgYXJlIHNraXBwZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBvcmRlciBpbiB3aGljaCB0ZXN0cyBhcmUgcnVuIGlzIGltcG9ydGFudC4KKyAgICAgICAgICAgICAgICAgICAgVGVzdHMgdGhhdCBkZXBlbmQgb24gYW5vdGhlciB0ZXN0IG11c3QgYXBwZWFyIGxhdGVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICBsaXN0IHRoYW4gdGhlIHRlc3Qgb24gd2hpY2ggdGhleSBkZXBlbmQuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXBwZW5kIHRoZSBsaXN0IG9mIHRlc3RzIHdpdGggdHdvCisgICAgICAgICAgICAgICAgICAgIHRlc3RzICg8ZmlsZW5hbWU+dGVzdF9BPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50ZXN0X0I8L2ZpbGVuYW1lPikgd2hlcmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRlc3RfQjwvZmlsZW5hbWU+IGlzIGRlcGVuZGVudCBvbgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dGVzdF9BPC9maWxlbmFtZT4sIHRoZW4geW91IG11c3Qgb3JkZXIgdGhlIHRlc3RzCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEVTVF9TVUlURVMgPSAiIHRlc3RfQSB0ZXN0X0IiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGVzdGluZyBpbWFnZXMsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3BlcmZvcm1pbmctYXV0b21hdGVkLXJ1bnRpbWUtdGVzdGluZyc+UGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRISVNESVInPjxnbG9zc3Rlcm0+VEhJU0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVEhJU0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkgcGFyc2luZyBpcyBsb2NhdGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2luZyBpcyBsb2NhdGVkLgorICAgICAgICAgICAgICAgICAgICBEbyBub3QgbWFudWFsbHkgc2V0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVElNRSc+PGdsb3NzdGVybT5USU1FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUSU1FW2RvY10gPSAiVGhlIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIEhNUyBmb3JtYXQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLgorICAgICAgICAgICAgICAgICAgICBUaW1lcyBhcHBlYXIgdXNpbmcgdGhlIGhvdXIsIG1pbnV0ZSwgYW5kIHNlY29uZCAoSE1TKQorICAgICAgICAgICAgICAgICAgICBmb3JtYXQgKGUuZy4gIjE0MDE1OSIgZm9yIG9uZSBtaW51dGUgYW5kIGZpZnR5LW5pbmUKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyBwYXN0IDE0MDAgaG91cnMpLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRNUERJUic+PGdsb3NzdGVybT5UTVBESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRNUERJUltkb2NdID0gIlRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBpdCBkb2VzIGl0cyB3b3JrIGJ1aWxkaW5nIGltYWdlcy4gQnkgZGVmYXVsdCwgdGhlIFRNUERJUiB2YXJpYWJsZSBpcyBuYW1lZCB0bXAgd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBpcyB0aGUgYmFzZSBkaXJlY3RvcnkgdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gdXNlcyBmb3IgYWxsIGJ1aWxkIG91dHB1dCBhbmQgaW50ZXJtZWRpYXRlCisgICAgICAgICAgICAgICAgICAgIGZpbGVzIChvdGhlciB0aGFuIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUpLgorICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IHZhcmlhYmxlIHBvaW50cworICAgICAgICAgICAgICAgICAgICB0byA8ZmlsZW5hbWU+dG1wPC9maWxlbmFtZT4gd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBlc3RhYmxpc2ggdGhpcyBkaXJlY3RvcnkgaW4gYSBsb2NhdGlvbiBvdGhlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZSBkZWZhdWx0LCB5b3UgY2FuIHVuY29tbWVudCBhbmQgZWRpdCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPjoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjVE1QRElSID0gIiR7VE9QRElSfS90bXAiCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgQW4gZXhhbXBsZSB1c2UgZm9yIHRoaXMgc2NlbmFyaW8gaXMgdG8gc2V0CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPiB0byBhIGxvY2FsIGRpc2ssIHdoaWNoIGRvZXMKKyAgICAgICAgICAgICAgICAgICAgbm90IHVzZSBORlMsIHdoaWxlIGhhdmluZyB0aGUgQnVpbGQgRGlyZWN0b3J5IHVzZSBORlMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlc3lzdGVtIHVzZWQgYnkgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IG11c3QKKyAgICAgICAgICAgICAgICAgICAgaGF2ZSBzdGFuZGFyZCBmaWxlc3lzdGVtIHNlbWFudGljcyAoaS5lLiBtaXhlZC1jYXNlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIGFyZSB1bmlxdWUsIFBPU0lYIGZpbGUgbG9ja2luZywgYW5kIHBlcnNpc3RlbnQgaW5vZGVzKS4KKyAgICAgICAgICAgICAgICAgICAgRHVlIHRvIHZhcmlvdXMgaXNzdWVzIHdpdGggTkZTIGFuZCBidWdzIGluIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLCBORlMgZG9lcyBub3QgbWVldCB0aGlzIG1pbmltdW0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIENvbnNlcXVlbnRseSwgPGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+IGNhbm5vdCBiZSBvbgorICAgICAgICAgICAgICAgICAgICBORlMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9PTENIQUlOX0hPU1RfVEFTSyc+PGdsb3NzdGVybT5UT09MQ0hBSU5fSE9TVF9UQVNLPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUT09MQ0hBSU5fSE9TVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gYnVpbGRpbmcgYW4gU0RLLCB3aGljaCBjb250YWlucyBhIGNyb3NzLWRldmVsb3BtZW50IGVudmlyb25tZW50LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdXNlcyB3aGVuIGJ1aWxkaW5nIGFuIFNESywgd2hpY2ggY29udGFpbnMgYQorICAgICAgICAgICAgICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHBhY2thZ2VzIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIGFyZSBwYXJ0IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICB0b29sY2hhaW4gc2V0IHRoYXQgcnVucyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVNES01BQ0hJTkUnPjxmaWxlbmFtZT5TREtNQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICBhbmQgZWFjaCBwYWNrYWdlIHNob3VsZCB1c3VhbGx5IGhhdmUgdGhlIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAibmF0aXZlc2RrLSIuCisgICAgICAgICAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYW4gU0RLIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlIC1jIHBvcHVsYXRlX3NkayAmbHQ7aW1hZ2VuYW1lJmd0OzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgbGlzdCBvZiBwYWNrYWdlcyBpcyBzZXQgaW4gdGhpcyB2YXJpYWJsZSwgYnV0CisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgcGFja2FnZXMgdG8gdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbnMKKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbi1nZW5lcmF0aW9uJz5Dcm9zcy1EZXZlbG9wbWVudCBUb29sY2hhaW4gR2VuZXJhdGlvbjwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIGEgY3Jvc3MtZGV2ZWxvcG1lbnQKKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0FEVF9VUkw7I2luc3RhbGxpbmctdGhlLWFkdCc+SW5zdGFsbGluZyB0aGUgQURUIGFuZCBUb29sY2hhaW5zPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9PTENIQUlOX09VVFBVVE5BTUUnPjxnbG9zc3Rlcm0+VE9PTENIQUlOX09VVFBVVE5BTUU8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRPT0xDSEFJTl9PVVRQVVROQU1FW2RvY10gPSAiRGVmaW5lcyB0aGUgbmFtZSB1c2VkIGZvciB0aGUgdG9vbGNoYWluIG91dHB1dC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlIG5hbWUgdXNlZCBmb3IgdGhlIHRvb2xjaGFpbgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1wb3B1bGF0ZS1zZGstKic+PGZpbGVuYW1lPnBvcHVsYXRlX3Nka19iYXNlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHNldHMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UT09MQ0hBSU5fT1VUUFVUTkFNRTwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1NES19WRVJTSU9OfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtfTkFNRSc+PGZpbGVuYW1lPlNES19OQU1FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLX1ZFUlNJT04nPjxmaWxlbmFtZT5TREtfVkVSU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVE9PTENIQUlOX1RBUkdFVF9UQVNLJz48Z2xvc3N0ZXJtPlRPT0xDSEFJTl9UQVJHRVRfVEFTSzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVE9PTENIQUlOX1RBUkdFVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLLCB3aGljaCBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgICAgICB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLCisgICAgICAgICAgICAgICAgICAgIChpLmUuIHRoZSBwYXJ0IGJ1aWx0IGZvciB0aGUgdGFyZ2V0IGhhcmR3YXJlKSwgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMgbGlicmFyaWVzIGFuZCBoZWFkZXJzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW5zCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBZb2N0byBQcm9qZWN0IGRldmVsb3BtZW50IGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbic+Q3Jvc3MtRGV2ZWxvcG1lbnQgVG9vbGNoYWluIEdlbmVyYXRpb248L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gc2V0dGluZyB1cCBhIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50LCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNpbnN0YWxsaW5nLXRoZS1hZHQnPkluc3RhbGxpbmcgdGhlIEFEVCBhbmQgVG9vbGNoYWluczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRPUERJUic+PGdsb3NzdGVybT5UT1BESVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRPUERJUltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdGhlIEJ1aWxkIERpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIGltYWdlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBUaGUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgYXV0b21hdGljYWxseSBzZXRzIHRoaXMgdmFyaWFibGUgd2hlbiB5b3UKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHVzaW5nIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtbWVtcmVzLWNvcmUtc2NyaXB0Jz48ZmlsZW5hbWU+b2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRSQU5TTEFURURfVEFSR0VUX0FSQ0gnPjxnbG9zc3Rlcm0+VFJBTlNMQVRFRF9UQVJHRVRfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFJBTlNMQVRFRF9UQVJHRVRfQVJDSFtkb2NdID0gIkEgc2FuaXRpemVkIHZlcnNpb24gb2YgVEFSR0VUX0FSQ0guIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIG5lZWRlZCBpbiBhIHZhbHVlIHdoZXJlIHVuZGVyc2NvcmVzIGFyZSBub3QgYWxsb3dlZC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBIHNhbml0aXplZCB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQVJDSCc+PGZpbGVuYW1lPlRBUkdFVF9BUkNIPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQsIGZvciBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgIHdpdGhpbiBwYWNrYWdlIGZpbGVuYW1lcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBkYXNoIGNoYXJhY3RlcnMgcmVwbGFjZSBhbnkgdW5kZXJzY29yZQorICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIHVzZWQgaW4gVEFSR0VUX0FSQ0guCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIERvIG5vdCBlZGl0IHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9BUkNIJz48Z2xvc3N0ZXJtPlRVTkVfQVJDSDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORV9BUkNIW2RvY10gPSAiVGhlIEdOVSBjYW5vbmljYWwgYXJjaGl0ZWN0dXJlIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSAoaS5lLiBhcm0sIGFybWViLCBtaXBzLCBtaXBzNjQsIGFuZCBzbyBmb3J0aCkuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEdOVSBjYW5vbmljYWwgYXJjaGl0ZWN0dXJlIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+YXJtPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hcm1lYjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlwczwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWlwczY0PC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgdXNlcyB0aGlzIHZhbHVlIHRvIHNldHVwIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FX0FSQ0g8L2ZpbGVuYW1lPiBkZWZpbml0aW9ucyBhcmUgc3BlY2lmaWMgdG8KKyAgICAgICAgICAgICAgICAgICAgYSBnaXZlbiBhcmNoaXRlY3R1cmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZpbml0aW9ucyBjYW4gYmUgYSBzaW5nbGUgc3RhdGljIGRlZmluaXRpb24sIG9yCisgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBkeW5hbWljYWxseSBhZGp1c3RlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWUgZGV0YWlscyBmb3IgYSBnaXZlbiBDUFUgZmFtaWx5IGJ5IGxvb2tpbmcgYXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGFyY2hpdGVjdHVyZSdzIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGluZm9ybWF0aW9uIGZvciA8ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgdG8gdGhlIDxmaWxlbmFtZT5taXBzPC9maWxlbmFtZT4gYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9BUkNIPC9maWxlbmFtZT4gaXMgdGllZCBjbG9zZWx5IHRvCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQVJDSCc+PGZpbGVuYW1lPlRBUkdFVF9BUkNIPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBkZWZpbmVzIHRoZSB0YXJnZXQgbWFjaGluZSdzIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bWV0YS9jb25mL2JpdGJha2UuY29uZjwvZmlsZW5hbWU+KSBzZXRzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UQVJHRVRfQVJDSDwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVEFSR0VUX0FSQ0ggPSAiJHtUVU5FX0FSQ0h9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCwgd2hpY2ggaXMgYnkgbm8gbWVhbnMgY29tcGxldGUgc2luY2UKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyBhcmUgY29uZmlndXJhYmxlLCBzaG93cyBzdXBwb3J0ZWQgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGFybQorICAgICBpNTg2CisgICAgIHg4Nl82NAorICAgICBwb3dlcnBjCisgICAgIHBvd2VycGM2NAorICAgICBtaXBzCisgICAgIG1pcHNlbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORV9BU0FSR1MnPjxnbG9zc3Rlcm0+VFVORV9BU0FSR1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfQVNBUkdTW2RvY10gPSAiU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhc3NlbWJsZXIgZmxhZ3MgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYXNzZW1ibGVyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBmbGFncyBpcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdHVuZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfQVNBUkdTPC9maWxlbmFtZT4gaXMgc2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0dW5lIGluY2x1ZGUgZmlsZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvPC9maWxlbmFtZT4gYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlIGRlZmluZXMgdGhlIGZsYWdzIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfQVNBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi14MzIiLCAiIiwgZCl9IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcykgc2VsZWN0IHRoZSB0dW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNlbGVjdGVkIHR1bmUsIGluIHR1cm4sIGFmZmVjdHMgdGhlIHR1bmUgdmFyaWFibGVzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGVtc2VsdmVzIChpLmUuIHRoZSB0dW5lIGNhbiBzdXBwbHkgaXRzIG93bgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0IG9mIGZsYWdzKS4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfQ0NBUkdTJz48Z2xvc3N0ZXJtPlRVTkVfQ0NBUkdTPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FX0NDQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgQyBjb21waWxlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBDIGNvbXBpbGVyIGZsYWdzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGUgdGFyZ2V0IHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBmbGFncyBpcyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgdHVuZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVfQ0NBUkdTPC9maWxlbmFtZT4gaXMgc2V0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSB0dW5lIGluY2x1ZGUgZmlsZXMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgdW5kZXIKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvPC9maWxlbmFtZT4gYW5kIGFyZQorICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2VkIHRocm91Z2gKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVfRkVBVFVSRVMnPjxmaWxlbmFtZT5UVU5FX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+LgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpIHNlbGVjdCB0aGUgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWxlY3RlZCB0dW5lLCBpbiB0dXJuLCBhZmZlY3RzIHRoZSB0dW5lIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcyAoaS5lLiB0aGUgdHVuZSBjYW4gc3VwcGx5IGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBmbGFncykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX0xEQVJHUyc+PGdsb3NzdGVybT5UVU5FX0xEQVJHUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICAgVFVORV9MREFSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxpbmtlciBmbGFncyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MgZm9yCisgICAgICAgICAgICAgICAgICAgIHRoZSB0YXJnZXQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBUaGUgc2V0IG9mIGZsYWdzIGlzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCB0dW5lIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9MREFSR1M8L2ZpbGVuYW1lPiBpcyBzZXQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIHR1bmUgaW5jbHVkZSBmaWxlcywgd2hpY2ggYXJlIHR5cGljYWxseSB1bmRlcgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS88L2ZpbGVuYW1lPiBhbmQgYXJlCisgICAgICAgICAgICAgICAgICAgIGluZmx1ZW5jZWQgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORV9GRUFUVVJFUyc+PGZpbGVuYW1lPlRVTkVfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGZpbGUgZGVmaW5lcyB0aGUgZmxhZ3MgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORV9MREFSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLW0gZWxmMzJfeDg2XzY0IiwgIiIsIGQpfSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJvYXJkIFN1cHBvcnQgUGFja2FnZXMgKEJTUHMpIHNlbGVjdCB0aGUgdHVuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWxlY3RlZCB0dW5lLCBpbiB0dXJuLCBhZmZlY3RzIHRoZSB0dW5lIHZhcmlhYmxlcworICAgICAgICAgICAgICAgICAgICAgICAgdGhlbXNlbHZlcyAoaS5lLiB0aGUgdHVuZSBjYW4gc3VwcGx5IGl0cyBvd24KKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCBvZiBmbGFncykuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FX0ZFQVRVUkVTJz48Z2xvc3N0ZXJtPlRVTkVfRkVBVFVSRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfRkVBVFVSRVNbZG9jXSA9ICJGZWF0dXJlcyB1c2VkIHRvICJ0dW5lIiBhIGNvbXBpbGVyIGZvciBvcHRpbWFsIHVzZSBnaXZlbiBhIHNwZWNpZmljIHByb2Nlc3Nvci4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlcyB1c2VkIHRvICJ0dW5lIiBhIGNvbXBpbGVyIGZvciBvcHRpbWFsIHVzZQorICAgICAgICAgICAgICAgICAgICBnaXZlbiBhIHNwZWNpZmljIHByb2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGZlYXR1cmVzIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgdHVuZSBmaWxlcyBhbmQgYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIChpLmUuIDxmaWxlbmFtZT5UVU5FXypBUkdTPC9maWxlbmFtZT4pIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgZmVhdHVyZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHZlcmlmaWVzIHRoZSBmZWF0dXJlcworICAgICAgICAgICAgICAgICAgICB0byBiZSBzdXJlIHRoZXkgYXJlIG5vdCBjb25mbGljdGluZyBhbmQgdGhhdCB0aGV5IGFyZQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPm1ldGEvY29uZi9iaXRiYWtlLmNvbmY8L2ZpbGVuYW1lPikgZGVmaW5lcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORV9GRUFUVVJFUzwvZmlsZW5hbWU+IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORV9GRUFUVVJFUyA/Pz0gIiR7VFVORV9GRUFUVVJFU190dW5lLSR7REVGQVVMVFRVTkV9fSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1ERUZBVUxUVFVORSc+PGZpbGVuYW1lPkRFRkFVTFRUVU5FPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVfUEtHQVJDSCc+PGdsb3NzdGVybT5UVU5FX1BLR0FSQ0g8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVfUEtHQVJDSFtkb2NdID0gIlRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1bmRlcnN0b29kIGJ5IHRoZSBwYWNrYWdpbmcgc3lzdGVtIHRvIGRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBBQkksIGFuZCB0dW5pbmcgb2Ygb3V0cHV0IHBhY2thZ2VzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1bmRlcnN0b29kIGJ5IHRoZSBwYWNrYWdpbmcKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHRvIGRlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBBQkksIGFuZCB0dW5pbmcgb2YKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWMgdHVuZSBpcyBkZWZpbmVkIHVzaW5nIHRoZSAiX3R1bmUiIG92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVFVORV9QS0dBUkNIX3R1bmUtPHJlcGxhY2VhYmxlPnR1bmU8L3JlcGxhY2VhYmxlPiA9ICI8cmVwbGFjZWFibGU+dHVuZTwvcmVwbGFjZWFibGU+IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZXNlIHR1bmUtc3BlY2lmaWMgcGFja2FnZSBhcmNoaXRlY3R1cmVzIGFyZSBkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lIGluY2x1ZGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgImNvcmUyLTMyIiB0dW5pbmcgYXMgdXNlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBmaWxlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTMyID0gImNvcmUyLTMyIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORUFCSSc+PGdsb3NzdGVybT5UVU5FQUJJPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQUJJW2RvY10gPSAiQW4gdW5kZXJseWluZyBBQkkgdXNlZCBieSBhIHBhcnRpY3VsYXIgdHVuaW5nIGluIGEgZ2l2ZW4gdG9vbGNoYWluIGxheWVyLiBUaGlzIGZlYXR1cmUgYWxsb3dzIHByb3ZpZGVycyB1c2luZyBwcmVidWlsdCBsaWJyYXJpZXMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSBvZiBhIHR1bmluZyBhZ2FpbnN0IHRoZWlyIHNlbGVjdGlvbiBvZiBsaWJyYXJpZXMuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQW4gdW5kZXJseWluZyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJzIHRoYXQgdXNlIHByZWJ1aWx0IGxpYnJhcmllcyBjYW4gdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VFVORUFCSTwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSV9PVkVSUklERSc+PGZpbGVuYW1lPlRVTkVBQklfT1ZFUlJJREU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSV9XSElURUxJU1QnPjxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSBvZiB0dW5pbmdzIGFnYWluc3QgdGhlaXIKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIG9mIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPiBpcyB1bmRlZmluZWQsIHRoZW4gZXZlcnkKKyAgICAgICAgICAgICAgICAgICAgdHVuaW5nIGlzIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtc2FuaXR5Jz48ZmlsZW5hbWU+c2FuaXR5PC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIHRvIHNlZSBob3cgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORUFCSV9PVkVSUklERSc+PGdsb3NzdGVybT5UVU5FQUJJX09WRVJSSURFPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQUJJX09WRVJSSURFW2RvY10gPSAiSWYgc2V0LCBpZ25vcmVzIFRVTkVBQklfV0hJVEVMSVNULiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIElmIHNldCwgdGhlIE9wZW5FbWJlZGRlZCBzeXN0ZW0gaWdub3JlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQklfV0hJVEVMSVNUJz48ZmlsZW5hbWU+VFVORUFCSV9XSElURUxJU1Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVycyB0aGF0IHVzZSBwcmVidWlsdCBsaWJyYXJpZXMgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVBQklfT1ZFUlJJREU8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlRVTkVBQklfV0hJVEVMSVNUPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSSc+PGZpbGVuYW1lPlRVTkVBQkk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpcgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXNhbml0eSc+PGZpbGVuYW1lPnNhbml0eTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcyB0byBzZWUgaG93IHRoZSB2YXJpYWJsZSBpcyB1c2VkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVRVTkVBQklfV0hJVEVMSVNUJz48Z2xvc3N0ZXJtPlRVTkVBQklfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgICBUVU5FQUJJX1dISVRFTElTVFtkb2NdID0gIkEgd2hpdGVsaXN0IG9mIHBlcm1pc3NpYmxlIFRVTkVBQkkgdmFsdWVzLiAgSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbCB2YWx1ZXMgYXJlIGFsbG93ZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgQSB3aGl0ZWxpc3Qgb2YgcGVybWlzc2libGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRVTkVBQkknPjxmaWxlbmFtZT5UVU5FQUJJPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgSWYgPGZpbGVuYW1lPlRVTkVBQklfV0hJVEVMSVNUPC9maWxlbmFtZT4gaXMgbm90IHNldCwKKyAgICAgICAgICAgICAgICAgICAgYWxsIHR1bmVzIGFyZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgICBQcm92aWRlcnMgdGhhdCB1c2UgcHJlYnVpbHQgbGlicmFyaWVzIGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5UVU5FQUJJX1dISVRFTElTVDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVFVORUFCSV9PVkVSUklERSc+PGZpbGVuYW1lPlRVTkVBQklfT1ZFUlJJREU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgIGFuZCA8ZmlsZW5hbWU+VFVORUFCSTwvZmlsZW5hbWU+IHZhcmlhYmxlcyB0byBjaGVjaworICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5IG9mIGEgdHVuaW5nIGFnYWluc3QgdGhlaXIgc2VsZWN0aW9uIG9mCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zYW5pdHknPjxmaWxlbmFtZT5zYW5pdHk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgdG8gc2VlIGhvdyB0aGUgdmFyaWFibGUgaXMgdXNlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1UVU5FQ09ORkxJQ1RTJz48Z2xvc3N0ZXJtPlRVTkVDT05GTElDVFNbPHJlcGxhY2VhYmxlPmZlYXR1cmU8L3JlcGxhY2VhYmxlPl08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgIFRVTkVDT05GTElDVFNbZG9jXSA9ICJTcGVjaWZpZXMgQ1BVIG9yIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkgdHVuaW5nIGZlYXR1cmVzIHRoYXQgY29uZmxpY3Qgd2l0aCBzcGVjaWZpZWQgZmVhdHVyZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgQ1BVIG9yIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKEFCSSkKKyAgICAgICAgICAgICAgICAgICAgdHVuaW5nIGZlYXR1cmVzIHRoYXQgY29uZmxpY3Qgd2l0aCA8cmVwbGFjZWFibGU+ZmVhdHVyZTwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBLbm93biB0dW5pbmcgY29uZmxpY3RzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIG1hY2hpbmUgaW5jbHVkZQorICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBmaWxlIHRoYXQgbGlzdHMgdGhlICJvMzIiIGFuZCAibjY0IiBmZWF0dXJlcyBhcworICAgICAgICAgICAgICAgICAgICBjb25mbGljdGluZyB3aXRoIHRoZSAibjMyIiBmZWF0dXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFRVTkVDT05GTElDVFNbbjMyXSA9ICJvMzIgbjY0IgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVFVORVZBTElEJz48Z2xvc3N0ZXJtPlRVTkVWQUxJRFs8cmVwbGFjZWFibGU+ZmVhdHVyZTwvcmVwbGFjZWFibGU+XTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBUVU5FVkFMSURbZG9jXSA9ICJEZXNjcmlwdGlvbnMsIHN0b3JlZCBhcyBmbGFncywgb2YgdmFsaWQgdHVuaW5nIGZlYXR1cmVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHZhbGlkIENQVSBvciBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChBQkkpCisgICAgICAgICAgICAgICAgICAgIHR1bmluZyBmZWF0dXJlLgorICAgICAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMgc3RvcmVkIGFzIGEgZmxhZy4KKyAgICAgICAgICAgICAgICAgICAgVmFsaWQgZmVhdHVyZXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgbWFjaGluZSBpbmNsdWRlIGZpbGVzCisgICAgICAgICAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmM8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIHRoYXQgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGUgYmlnLWVuZGlhbiBtb2RlLiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIG1hY2hpbmUgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciB0aGVzZSBmZWF0dXJlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICA8L2dsb3NzZGl2PgorCisgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3NhcnktdSc+PHRpdGxlPlU8L3RpdGxlPgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfQ09ORklHJz48Z2xvc3N0ZXJtPlVCT09UX0NPTkZJRzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9DT05GSUdbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBVQk9PVF9NQUNISU5FIGFuZCBjYW4gYWxzbyBkZWZpbmUgSU1BR0VfRlNUWVBFUyBmb3IgaW5kaXZpZHVhbCBjYXNlcy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBDb25maWd1cmVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVUJPT1RfTUFDSElORSc+PGZpbGVuYW1lPlVCT09UX01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgYW5kIGNhbiBhbHNvIGRlZmluZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRlNUWVBFUyc+PGZpbGVuYW1lPklNQUdFX0ZTVFlQRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGluZGl2aWR1YWwgY2FzZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWZzbC1hcm08L2ZpbGVuYW1lPiBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVQk9PVF9DT05GSUcgPz89ICJzZCIKKyAgICAgVUJPT1RfQ09ORklHW3NkXSA9ICJteDZxc2FicmVhdXRvX2NvbmZpZyxzZGNhcmQiCisgICAgIFVCT09UX0NPTkZJR1tlaW1ub3JdID0gIm14NnFzYWJyZWF1dG9fZWltbm9yX2NvbmZpZyIKKyAgICAgVUJPT1RfQ09ORklHW25hbmRdID0gIm14NnFzYWJyZWF1dG9fbmFuZF9jb25maWcsdWJpZnMiCisgICAgIFVCT09UX0NPTkZJR1tzcGlub3JdID0gIm14NnFzYWJyZWF1dG9fc3Bpbm9yX2NvbmZpZyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGV4YW1wbGUsICJzZCIgaXMgc2VsZWN0ZWQgYXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBvc3NpYmxlIGZvdXIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VUJPT1RfTUFDSElORTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBUaGUgInNkIiBjb25maWd1cmF0aW9uIGRlZmluZXMgIm14NnFzYWJyZWF1dG9fY29uZmlnIgorICAgICAgICAgICAgICAgICAgICBhcyB0aGUgdmFsdWUgZm9yIDxmaWxlbmFtZT5VQk9PVF9NQUNISU5FPC9maWxlbmFtZT4sIHdoaWxlCisgICAgICAgICAgICAgICAgICAgIHRoZSAic2RjYXJkIiBzcGVjaWZpZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5JTUFHRV9GU1RZUEVTPC9maWxlbmFtZT4gdG8gdXNlIGZvciB0aGUgVS1ib290CisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5VQk9PVF9DT05GSUc8L2ZpbGVuYW1lPiBpcyBoYW5kbGVkLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvdHJlZS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MnPjxmaWxlbmFtZT51Ym9vdC1jb25maWc8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVCT09UX0VOVFJZUE9JTlQnPjxnbG9zc3Rlcm0+VUJPT1RfRU5UUllQT0lOVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVQk9PVF9FTlRSWVBPSU5UW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgVS1Cb290IGltYWdlLgorICAgICAgICAgICAgICAgICAgICBEdXJpbmcgVS1Cb290IGltYWdlIGNyZWF0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlVCT09UX0VOVFJZUE9JTlQ8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBwYXNzZWQKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBjb21tYW5kLWxpbmUgcGFyYW1ldGVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWJvb3QtbWtpbWFnZTwvZmlsZW5hbWU+IHV0aWxpdHkuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTE9BREFERFJFU1MnPjxnbG9zc3Rlcm0+VUJPT1RfTE9BREFERFJFU1M8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfTE9BREFERFJFU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IgdGhlIFUtQm9vdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgRHVyaW5nIFUtQm9vdCBpbWFnZSBjcmVhdGlvbiwgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5VQk9PVF9MT0FEQUREUkVTUzwvZmlsZW5hbWU+IHZhcmlhYmxlIGlzIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICBhcyBhIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT51Ym9vdC1ta2ltYWdlPC9maWxlbmFtZT4gdXRpbGl0eS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9MT0NBTFZFUlNJT04nPjxnbG9zc3Rlcm0+VUJPT1RfTE9DQUxWRVJTSU9OPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX0xPQ0FMVkVSU0lPTltkb2NdID0gIkFwcGVuZHMgYSBzdHJpbmcgdG8gdGhlIG5hbWUgb2YgdGhlIGxvY2FsIHZlcnNpb24gb2YgdGhlIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBBcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBVLUJvb3QgaW1hZ2UuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBhc3N1bWluZyB0aGUgdmVyc2lvbiBvZiB0aGUgVS1Cb290IGltYWdlCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IHdhcyAiMjAxMy4xMCwgdGhlIGZ1bGwgdmVyc2lvbiBzdHJpbmcgcmVwb3J0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgVS1Cb290IHdvdWxkIGJlICIyMDEzLjEwLXlvY3RvIiBnaXZlbiB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVQk9PVF9MT0NBTFZFUlNJT04gPSAiLXlvY3RvIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTUFDSElORSc+PGdsb3NzdGVybT5VQk9PVF9NQUNISU5FPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZyBhIFUtQm9vdCBpbWFnZS4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ha2U8L2ZpbGVuYW1lPiBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZworICAgICAgICAgICAgICAgICAgICBhIFUtQm9vdCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGluZGljYXRlcyB0aGUgdGFyZ2V0IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgZnJvbSB0aGUgbWFjaGluZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvbmYvbWFjaGluZS88cmVwbGFjZWFibGU+bWFjaGluZV9uYW1lPC9yZXBsYWNlYWJsZT4uY29uZjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlZSB0aGUgIlNlbGVjdGlvbiBvZiBQcm9jZXNzb3IgQXJjaGl0ZWN0dXJlIGFuZAorICAgICAgICAgICAgICAgICAgICBCb2FyZCBUeXBlIiBzZWN0aW9uIGluIHRoZSBVLUJvb3QgUkVBRE1FIGZvciB2YWxpZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVUJPT1RfTUFLRV9UQVJHRVQnPjxnbG9zc3Rlcm0+VUJPT1RfTUFLRV9UQVJHRVQ8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVUJPT1RfTUFLRV9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCBjYWxsZWQgaW4gdGhlIE1ha2VmaWxlLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgdGFyZ2V0IGNhbGxlZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1ha2VmaWxlPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhcmdldCBpcyAiYWxsIi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9TVUZGSVgnPjxnbG9zc3Rlcm0+VUJPT1RfU1VGRklYPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX1NVRkZJWFtkb2NdID0gIlBvaW50cyB0byB0aGUgZ2VuZXJhdGVkIFUtQm9vdCBleHRlbnNpb24uIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBnZW5lcmF0ZWQgVS1Cb290IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIDxmaWxlbmFtZT51LWJvb3Quc2I8L2ZpbGVuYW1lPiBoYXMgYQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNiPC9maWxlbmFtZT4gZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBVLUJvb3QgZXh0ZW5zaW9uIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4uYmluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VQk9PVF9UQVJHRVQnPjxnbG9zc3Rlcm0+VUJPT1RfVEFSR0VUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVCT09UX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IHVzZWQgZm9yIGJ1aWxkaW5nIFUtQm9vdC4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuCisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXJnZXQgaXMgcGFzc2VkIGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlICJtYWtlIiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIChlLmcuIFNQTCBhbmQgQUlTKS4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUsIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgcHJvY2VzcyBwYXNzZXMgYW5kIHVzZXMgImFsbCIgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgZHVyaW5nIHRoZSBVLUJvb3QgYnVpbGRpbmcgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QnPjxnbG9zc3Rlcm0+VU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUPC9nbG9zc3Rlcm0+CisgICAgICAgICAgICA8aW5mbz4KKyAgICAgICAgICAgICAgIFVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVFtkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0LCBpZiByZXBvcnRlZCBieSB0aGUgY29uZmlndXJlIHNjcmlwdCBhcyBiZWluZyBpbnZhbGlkLCBzaG91bGQgbm90IGdlbmVyYXRlIGEgd2FybmluZyBkdXJpbmcgdGhlIGRvX2NvbmZpZ3VyZSB0YXNrLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0LCBpZiByZXBvcnRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHNjcmlwdCBhcyBiZWluZyBpbnZhbGlkLCBzaG91bGQgbm90IGdlbmVyYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZyBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1jb25maWd1cmUnPjxmaWxlbmFtZT5kb19jb25maWd1cmU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsbHksIGludmFsaWQgY29uZmlndXJlIG9wdGlvbnMgYXJlIHNpbXBseSBub3QgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IChlLmcuIHNob3VsZCBiZSByZW1vdmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ09ORic+PGZpbGVuYW1lPkVYVFJBX09FQ09ORjwvZmlsZW5hbWU+PC9saW5rPikuCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIGNvbW1vbiBvcHRpb25zLCBmb3IgZXhhbXBsZSwgZXhpc3QgdGhhdCBhcmUgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIGFsbCBjb25maWd1cmUgc2NyaXB0cyBhdCBhIGNsYXNzIGxldmVsIHRoYXQgbWlnaHQgbm90CisgICAgICAgICAgICAgICAgICAgIGJlIHZhbGlkIGZvciBzb21lIGNvbmZpZ3VyZSBzY3JpcHRzLgorICAgICAgICAgICAgICAgICAgICBJdCBmb2xsb3dzIHRoYXQgbm8gYmVuZWZpdCBleGlzdHMgaW4gc2VlaW5nIGEgd2FybmluZyBhYm91dAorICAgICAgICAgICAgICAgICAgICB0aGVzZSBvcHRpb25zLgorICAgICAgICAgICAgICAgICAgICBGb3IgdGhlc2UgY2FzZXMsIHRoZSBvcHRpb25zIGFyZSBhZGRlZCB0bworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmUgYXJndW1lbnRzIGNoZWNrIHRoYXQgdXNlcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUPC9maWxlbmFtZT4gaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtaW5zYW5lJz48ZmlsZW5hbWU+aW5zYW5lPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIGFuZCBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIHJlY2lwZSBpbmhlcml0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtYXV0b3Rvb2xzJz48ZmlsZW5hbWU+YXV0b3Rvb2xzPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGNsYXNzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVQREFURVJDUE4nPjxnbG9zc3Rlcm0+VVBEQVRFUkNQTjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVUERBVEVSQ1BOW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIGluaXRzY3JpcHQgdGhhdCBpcyB0byBiZSBlbmFibGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvciByZWNpcGVzIGluaGVyaXRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLXVwZGF0ZS1yYy5kJz48ZmlsZW5hbWU+dXBkYXRlLXJjLmQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIDxmaWxlbmFtZT5VUERBVEVSQ1BOPC9maWxlbmFtZT4gc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgIHRoZSBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIGluaXRzY3JpcHQgdGhhdCBpcyB0byBiZQorICAgICAgICAgICAgICAgICAgICBlbmFibGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiJHtQTn0iLgorICAgICAgICAgICAgICAgICAgICBHaXZlbiB0aGF0IGFsbW9zdCBhbGwgcmVjaXBlcyB0aGF0IGluc3RhbGwgaW5pdHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZSB0aGVtIGluIHRoZSBtYWluIHBhY2thZ2UgZm9yIHRoZSByZWNpcGUsIHlvdQorICAgICAgICAgICAgICAgICAgICByYXJlbHkgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiBpbmRpdmlkdWFsIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFX0RFVkZTJz48Z2xvc3N0ZXJtPlVTRV9ERVZGUzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVU0VfREVWRlNbZG9jXSA9ICJEZXRlcm1pbmVzIGlmIGRldnRtcGZzIGlzIHVzZWQgZm9yIC9kZXYgcG9wdWxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGlmIDxmaWxlbmFtZT5kZXZ0bXBmczwvZmlsZW5hbWU+IGlzIHVzZWQgZm9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4gcG9wdWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCBmb3IgPGZpbGVuYW1lPlVTRV9ERVZGUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIGlzICIxIiB3aGVuIG5vIHZhbHVlIGlzIHNwZWNpZmljYWxseSBzZXQuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIHNldCA8ZmlsZW5hbWU+VVNFX0RFVkZTPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIjAiIGZvciBhIHN0YXRpY2FsbHkgcG9wdWxhdGVkIDxmaWxlbmFtZT4vZGV2PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzZWxlY3RpbmctZGV2LW1hbmFnZXInPlNlbGVjdGluZyBhIERldmljZSBNYW5hZ2VyPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsIGZvcgorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFX1ZUJz48Z2xvc3N0ZXJtPlVTRV9WVDwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVU0VfVlRbZG9jXSA9ICJXaGVuIHVzaW5nIFN5c1Zpbml0LCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHJ1biBhIGdldHR5IG9uIGFueSB2aXJ0dWFsIHRlcm1pbmFscyBpbiBvcmRlciB0byBlbmFibGUgbG9nZ2luZyBpbiB0aHJvdWdoIHRob3NlIHRlcm1pbmFscy4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I25ldy1yZWNpcGUtZW5hYmxpbmctc3lzdGVtLXNlcnZpY2VzJz5TeXNWaW5pdDwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIHJ1biBhCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2V0dHlfJTI4VW5peCUyOSc+Z2V0dHk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvbiBhbnkgdmlydHVhbCB0ZXJtaW5hbHMgaW4gb3JkZXIgdG8gZW5hYmxlIGxvZ2dpbmcgaW4KKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aG9zZSB0ZXJtaW5hbHMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgZm9yIDxmaWxlbmFtZT5VU0VfVlQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBpcyAiMSIgd2hlbiBubyBkZWZhdWx0IHZhbHVlIGlzIHNwZWNpZmljYWxseSBzZXQuCisgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSwgeW91IHdvdWxkIHNldCA8ZmlsZW5hbWU+VVNFX1ZUPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgdG8gIjAiIGluIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWFjaGluZXMKKyAgICAgICAgICAgICAgICAgICAgdGhhdCBkbyBub3QgaGF2ZSBhIGdyYXBoaWNhbCBkaXNwbGF5IGF0dGFjaGVkIGFuZAorICAgICAgICAgICAgICAgICAgICB0aGVyZWZvcmUgZG8gbm90IG5lZWQgdmlydHVhbCB0ZXJtaW5hbCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJfQ0xBU1NFUyc+PGdsb3NzdGVybT5VU0VSX0NMQVNTRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUl9DTEFTU0VTW2RvY10gPSAiTGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHRoYXQgZW5hYmxlIGV4dHJhIGZlYXR1cmVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBjbGFzc2VzIHRvIGdsb2JhbGx5IGluaGVyaXQuCisgICAgICAgICAgICAgICAgICAgIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgdG8gZW5hYmxlIGV4dHJhIGZlYXR1cmVzIChlLmcuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZHN0YXRzPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5pbWFnZS1ta2xpYnM8L2ZpbGVuYW1lPiwgYW5kIHNvIGZvcnRoKS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgbGlzdCBpcyBzZXQgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUl9DTEFTU0VTID89ICJidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZTwvZmlsZW5hbWU+IGluCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgICAgIDxnbG9zc2VudHJ5IGlkPSd2YXItVVNFUkFERF9FUlJPUl9EWU5BTUlDJz48Z2xvc3N0ZXJtPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBVU0VSQUREX0VSUk9SX0RZTkFNSUNbZG9jXSA9ICJGb3JjZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gcHJvZHVjZSBhbiBlcnJvciBpZiB0aGUgdXNlciBpZGVudGlmaWNhdGlvbiAodWlkKSBhbmQgZ3JvdXAgaWRlbnRpZmljYXRpb24gKGdpZCkgdmFsdWVzIGFyZSBub3QgZGVmaW5lZCBpbiBmaWxlcy9wYXNzd2QgYW5kIGZpbGVzL2dyb3VwIGZpbGVzLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIEZvcmNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBwcm9kdWNlIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgIGlmIHRoZSB1c2VyIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIGFuZAorICAgICAgICAgICAgICAgICAgICBncm91cCBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+KSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgYXJlIG5vdCBkZWZpbmVkIGluIDxmaWxlbmFtZT5maWxlcy9wYXNzd2Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmZpbGVzL2dyb3VwPC9maWxlbmFtZT4gZmlsZXMuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgYnVpbGQgc3lzdGVtIGlzIHRvIGR5bmFtaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGFwcGx5IDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgPGZpbGVuYW1lPlVTRVJBRERfRVJST1JfRFlOQU1JQzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIGlzIGJ5IGRlZmF1bHQgbm90IHNldC4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHBsYW4gb24gdXNpbmcgc3RhdGljYWxseSBhc3NpZ25lZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsIHlvdSBzaG91bGQgc2V0CisgICAgICAgICAgICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+VVNFUkFERF9FUlJPUl9EWU5BTUlDPC9maWxlbmFtZT4gdmFyaWFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX0VSUk9SX0RZTkFNSUMgPSAiMSIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBPdmVycmlkaW5nIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGltcGxpZXMgeW91IGFyZSBnb2luZyB0bworICAgICAgICAgICAgICAgICAgICBhbHNvIHRha2Ugc3RlcHMgdG8gc2V0IHN0YXRpYyA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPiB2YWx1ZXMgdGhyb3VnaCB1c2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGZpbGVuYW1lPlVTRVJBRERfVUlEX1RBQkxFUzwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYW5kCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQUREX0dJRF9UQUJMRVMnPjxmaWxlbmFtZT5VU0VSQUREX0dJRF9UQUJMRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJBRERfR0lEX1RBQkxFUyc+PGdsb3NzdGVybT5VU0VSQUREX0dJRF9UQUJMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9HSURfVEFCTEVTW2RvY10gPSAiU3BlY2lmaWVzIGEgcGFzc3dvcmQgZmlsZSB0byB1c2UgZm9yIG9idGFpbmluZyBzdGF0aWMgZ3JvdXAgaWRlbnRpZmljYXRpb24gKGdpZCkgdmFsdWVzIHdoZW4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYWRkcyBhIGdyb3VwIHRvIHRoZSBzeXN0ZW0gZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyBhIHBhc3N3b3JkIGZpbGUgdG8gdXNlIGZvciBvYnRhaW5pbmcgc3RhdGljCisgICAgICAgICAgICAgICAgICAgIGdyb3VwIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4pIHZhbHVlcworICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFkZHMgYSBncm91cCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBhcHBseWluZyBzdGF0aWMgZ3JvdXAgaWRlbnRpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikgdmFsdWVzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSBsb29rcyBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJQQVRIJz48ZmlsZW5hbWU+QkJQQVRIPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGZvciBhIDxmaWxlbmFtZT5maWxlcy9ncm91cDwvZmlsZW5hbWU+IGZpbGUgYW5kIHRoZW4gYXBwbGllcworICAgICAgICAgICAgICAgICAgICB0aG9zZSA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICBTZXQgdGhlIHZhcmlhYmxlIGFzIGZvbGxvd3MgaW4geW91cgorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFERF9HSURfVEFCTEVTID0gImZpbGVzL2dyb3VwIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAidXNlcmFkZC1zdGF0aWNpZHMiIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBzdGF0aWMgPGZpbGVuYW1lPmdpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX1BBQ0tBR0VTJz48Z2xvc3N0ZXJtPlVTRVJBRERfUEFDS0FHRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gaW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZCc+PGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgY2xhc3MsIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBzZXQgdGhpcyB2YXJpYWJsZSBpZiB0aGUgcmVjaXBlIGluaGVyaXRzIHRoZQorICAgICAgICAgICAgICAgICAgICBjbGFzcy4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZW5hYmxlcyBhZGRpbmcgYSB1c2VyIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgbWFpbiBwYWNrYWdlIGluIGEgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiBmb2xsb3dzIHRoYXQgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+VVNFUkFERF9QQUNLQUdFUzwvZmlsZW5hbWU+IHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gc2V0IG9uZSBvciBtb3JlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVVTRVJBRERfUEFSQU0nPjxmaWxlbmFtZT5VU0VSQUREX1BBUkFNPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdST1VQQUREX1BBUkFNJz48ZmlsZW5hbWU+R1JPVVBBRERfUEFSQU08L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUdST1VQTUVNU19QQVJBTSc+PGZpbGVuYW1lPkdST1VQTUVNU19QQVJBTTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQUREX1BBUkFNJz48Z2xvc3N0ZXJtPlVTRVJBRERfUEFSQU08L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIHVzZXJhZGQgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBhZGQgYSB1c2VyIHRvIHRoZSBzeXN0ZW0gd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBpbmhlcml0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy11c2VyYWRkJz48ZmlsZW5hbWU+dXNlcmFkZDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBjbGFzcywgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZAorICAgICAgICAgICAgICAgICAgICB0byB0aGUgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIGFkZCBhIHVzZXIgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIGZyb20gdGhlIDxmaWxlbmFtZT5kYnVzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVjaXBlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFVTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lICR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgbWVzc2FnZWJ1cyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIHN0YW5kYXJkIExpbnV4IHNoZWxsIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnVzZXJhZGQ8L2ZpbGVuYW1lPiwgc2VlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9saW51eC5kaWUubmV0L21hbi84L3VzZXJhZGQnPjwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVVTRVJBRERfVUlEX1RBQkxFUyc+PGdsb3NzdGVybT5VU0VSQUREX1VJRF9UQUJMRVM8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFERF9VSURfVEFCTEVTW2RvY10gPSAiU3BlY2lmaWVzIGEgcGFzc3dvcmQgZmlsZSB0byB1c2UgZm9yIG9idGFpbmluZyBzdGF0aWMgdXNlciBpZGVudGlmaWNhdGlvbiAodWlkKSB2YWx1ZXMgd2hlbiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhZGRzIGEgdXNlciB0byB0aGUgc3lzdGVtIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4iCisgICAgICAgICAgICA8L2luZm8+CisgICAgICAgICAgICA8Z2xvc3NkZWY+CisgICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+Cis8IS0tICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPjxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9kZWZpbmUtZ2VuZXJpYy5wbmciIC8+IC0tPgorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBwYXNzd29yZCBmaWxlIHRvIHVzZSBmb3Igb2J0YWluaW5nIHN0YXRpYworICAgICAgICAgICAgICAgICAgICB1c2VyIGlkZW50aWZpY2F0aW9uICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIHZhbHVlcworICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFkZHMgYSB1c2VyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBXaGVuIGFwcGx5aW5nIHN0YXRpYyB1c2VyIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4pIHZhbHVlcywgdGhlIE9wZW5FbWJlZGRlZCBidWlsZAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gbG9va3MgaW4KKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJCUEFUSCc+PGZpbGVuYW1lPkJCUEFUSDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBmb3IgYSA8ZmlsZW5hbWU+ZmlsZXMvcGFzc3dkPC9maWxlbmFtZT4gZmlsZSBhbmQgdGhlbiBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIHRob3NlIDxmaWxlbmFtZT51aWQ8L2ZpbGVuYW1lPiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgYXMgZm9sbG93cyBpbiB5b3VyCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBVU0VSQUREX1VJRF9UQUJMRVMgPSAiZmlsZXMvcGFzc3dkIgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48ZmlsZW5hbWU+VVNFUkFEREVYVEVOU0lPTjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byAidXNlcmFkZC1zdGF0aWNpZHMiIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IHZhbHVlcy4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L2dsb3NzZGVmPgorICAgICAgICA8L2dsb3NzZW50cnk+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1VU0VSQURERVhURU5TSU9OJz48Z2xvc3N0ZXJtPlVTRVJBRERFWFRFTlNJT048L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgVVNFUkFEREVYVEVOU0lPTltkb2NdID0gIldoZW4gc2V0IHRvICJ1c2VyYWRkLXN0YXRpY2lkcyIsIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBiYXNlIGFsbCB1c2VyIGFuZCBncm91cCBhZGRpdGlvbnMgb24gYSBzdGF0aWMgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBmb3VuZCBpbiBCQlBBVEguIgorICAgICAgICAgICAgPC9pbmZvPgorICAgICAgICAgICAgPGdsb3NzZGVmPgorICAgICAgICAgICAgICAgIDxwYXJhIHJvbGU9Imdsb3NzZGVmZmlyc3QiPgorPCEtLSAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij48aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvZGVmaW5lLWdlbmVyaWMucG5nIiAvPiAtLT4KKyAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXQgdG8gInVzZXJhZGQtc3RhdGljaWRzIiwgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJhc2UgYWxsIHVzZXIgYW5kIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9ucyBvbiBhIHN0YXRpYworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cGFzc3dkPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5ncm91cDwvZmlsZW5hbWU+IGZpbGVzIGZvdW5kIGluCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CQlBBVEgnPjxmaWxlbmFtZT5CQlBBVEg8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRvIHVzZSBzdGF0aWMgdXNlciBpZGVudGlmaWNhdGlvbiAoPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+KQorICAgICAgICAgICAgICAgICAgICBhbmQgZ3JvdXAgaWRlbnRpZmljYXRpb24gKDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLCBzZXQgdGhlIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgIGFzIGZvbGxvd3MgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgVVNFUkFEREVYVEVOU0lPTiA9ICJ1c2VyYWRkLXN0YXRpY2lkcyIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byB1c2Ugc3RhdGljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dWlkPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5naWQ8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBlbXBsb3kKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMtdXNlcmFkZC1zdGF0aWNpZHMnPjxmaWxlbmFtZT51c2VyYWRkLXN0YXRpY2lkczwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHVzZSBzdGF0aWMgPGZpbGVuYW1lPnVpZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2lkPC9maWxlbmFtZT4gaW5mb3JtYXRpb24sIHlvdSBtdXN0IGFsc28KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgPGZpbGVuYW1lPmZpbGVzL3Bhc3N3ZDwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZmlsZXMvZ3JvdXA8L2ZpbGVuYW1lPiBmaWxlcyBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9VSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9VSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9HSURfVEFCTEVTJz48ZmlsZW5hbWU+VVNFUkFERF9HSURfVEFCTEVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbGx5LCB5b3Ugc2hvdWxkIGFsc28gc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVVNFUkFERF9FUlJPUl9EWU5BTUlDJz48ZmlsZW5hbWU+VVNFUkFERF9FUlJPUl9EWU5BTUlDPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKzwhLS0gICAgICAgICAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS12Jz48dGl0bGU+VjwvdGl0bGU+LS0+Cis8IS0tICAgICAgICAgICAgPC9nbG9zc2Rpdj4tLT4KKworICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXcnPjx0aXRsZT5XPC90aXRsZT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVdBUk5fUUEnPjxnbG9zc3Rlcm0+V0FSTl9RQTwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBXQVJOX1FBW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBxdWFsaXR5IGFzc3VyYW5jZSBjaGVja3Mgd2hvc2UgZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGFzIHdhcm5pbmdzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB3YXJuaW5ncyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNldCB0aGlzIHZhcmlhYmxlIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGEgbGlzdCBvZiB0aGUgY2hlY2tzIHlvdSBjYW4gY29udHJvbCB3aXRoIHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWluc2FuZSc+PGZpbGVuYW1lPmluc2FuZS5iYmNsYXNzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgICAgICA8Z2xvc3NlbnRyeSBpZD0ndmFyLVdPUktESVInPjxnbG9zc3Rlcm0+V09SS0RJUjwvZ2xvc3N0ZXJtPgorICAgICAgICAgICAgPGluZm8+CisgICAgICAgICAgICAgICBXT1JLRElSW2RvY10gPSAiVGhlIHBhdGhuYW1lIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgYSByZWNpcGUuIFRoaXMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBUTVBESVIgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgY2hhbmdlcyBhcyBkaWZmZXJlbnQgcGFja2FnZXMgYXJlIGJ1aWx0LiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFRoZSBwYXRobmFtZSBvZiB0aGUgd29yayBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBpcyBzcGVjaWZpYyB0byB0aGUgcmVjaXBlIGJlaW5nCisgICAgICAgICAgICAgICAgICAgIGJ1aWx0IGFuZCB0aGUgc3lzdGVtIGZvciB3aGljaCBpdCBpcyBiZWluZyBidWlsdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzIGRlZmluZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAke1RNUERJUn0vd29yay8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGFjdHVhbCBkaXJlY3RvcnkgZGVwZW5kcyBvbiBzZXZlcmFsIHRoaW5nczoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB0b3AtbGV2ZWwgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLU1VTFRJTUFDSF9UQVJHRVRfU1lTJz48ZmlsZW5hbWU+TVVMVElNQUNIX1RBUkdFVF9TWVM8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRhcmdldCBzeXN0ZW0gaWRlbnRpZmllcjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVBOJz48ZmlsZW5hbWU+UE48L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSBuYW1lPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48bGluayBsaW5rZW5kPSd2YXItRVhURU5EUEUnPjxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXBvY2ggLSAoaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUEUnPjxmaWxlbmFtZT5QRTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yIG1vc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGVzLCB0aGVuIDxmaWxlbmFtZT5FWFRFTkRQRTwvZmlsZW5hbWU+IGlzIGJsYW5rKTwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PGxpbmsgbGlua2VuZD0ndmFyLVBWJz48ZmlsZW5hbWU+UFY8L2ZpbGVuYW1lPjwvbGluaz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJlY2lwZSB2ZXJzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVjaXBlIHJldmlzaW9uPC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEFzIGFuIGV4YW1wbGUsIGFzc3VtZSBhIFNvdXJjZSBEaXJlY3RvcnkgdG9wLWxldmVsIGZvbGRlcgorICAgICAgICAgICAgICAgICAgICBuYW1lIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4sIGEgZGVmYXVsdCBCdWlsZCBEaXJlY3RvcnkgYXQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiwgYW5kIGEKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnFlbXV4ODYtcG9reS1saW51eDwvZmlsZW5hbWU+IG1hY2hpbmUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIHN1cHBvc2UgeW91ciByZWNpcGUgaXMgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC1yMC5iYjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSB3b3JrIGRpcmVjdG9yeSB0aGUgYnVpbGQgc3lzdGVtIHVzZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgYnVpbGQgdGhlIHBhY2thZ2Ugd291bGQgYmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBwb2t5L2J1aWxkL3RtcC93b3JrL3FlbXV4ODYtcG9reS1saW51eC9mb28vMS4zLjAtcjAKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvZ2xvc3NkZWY+CisgICAgICAgIDwvZ2xvc3NlbnRyeT4KKworICAgIDwvZ2xvc3NkaXY+CisKKyAgICA8Z2xvc3NkaXYgaWQ9J3Zhci1nbG9zc2FyeS14Jz48dGl0bGU+WDwvdGl0bGU+CisKKyAgICAgICAgPGdsb3NzZW50cnkgaWQ9J3Zhci1YU0VSVkVSJz48Z2xvc3N0ZXJtPlhTRVJWRVI8L2dsb3NzdGVybT4KKyAgICAgICAgICAgIDxpbmZvPgorICAgICAgICAgICAgICAgWFNFUlZFUltkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkCisgICAgICAgICAgICAgICB0byBwcm92aWRlIGFuIFggc2VydmVyIGFuZCBkcml2ZXJzIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLiIKKyAgICAgICAgICAgIDwvaW5mbz4KKyAgICAgICAgICAgIDxnbG9zc2RlZj4KKyAgICAgICAgICAgICAgICA8cGFyYSByb2xlPSJnbG9zc2RlZmZpcnN0Ij4KKzwhLS0gICAgICAgICAgICAgICAgPHBhcmEgcm9sZT0iZ2xvc3NkZWZmaXJzdCI+PGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2RlZmluZS1nZW5lcmljLnBuZyIgLz4gLS0+CisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIHRvCisgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgYW4gWCBzZXJ2ZXIgYW5kIGRyaXZlcnMgZm9yIHRoZSBjdXJyZW50IG1hY2hpbmUsCisgICAgICAgICAgICAgICAgICAgIGFzc3VtaW5nIHlvdXIgaW1hZ2UgZGlyZWN0bHkgaW5jbHVkZXMKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyPC9maWxlbmFtZT4gb3IsCisgICAgICAgICAgICAgICAgICAgIHBlcmhhcHMgaW5kaXJlY3RseSwgaW5jbHVkZXMgIngxMS1iYXNlIiBpbgorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU1BR0VfRkVBVFVSRVMnPjxmaWxlbmFtZT5JTUFHRV9GRUFUVVJFUzwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgPGZpbGVuYW1lPlhTRVJWRVI8L2ZpbGVuYW1lPiwgaWYgbm90CisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uLCBpcworICAgICAgICAgICAgICAgICAgICAieHNlcnZlci14b3JnIHhmODYtdmlkZW8tZmJkZXYgeGY4Ni1pbnB1dC1ldmRldiIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9nbG9zc2RlZj4KKyAgICAgICAgPC9nbG9zc2VudHJ5PgorCisgICAgPC9nbG9zc2Rpdj4KKworPCEtLSAgICAgICAgICAgIDxnbG9zc2RpdiBpZD0ndmFyLWdsb3NzYXJ5LXknPjx0aXRsZT5ZPC90aXRsZT4tLT4KKzwhLS0gICAgICAgICAgICA8L2dsb3NzZGl2Pi0tPgorCis8IS0tICAgICAgICAgICAgPGdsb3NzZGl2IGlkPSd2YXItZ2xvc3Nhcnkteic+PHRpdGxlPlo8L3RpdGxlPi0tPgorPCEtLSAgICAgICAgICAgIDwvZ2xvc3NkaXY+LS0+CisKKzwvZ2xvc3Nhcnk+Cis8L2NoYXB0ZXI+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3JlZi12YXJsb2NhbGl0eS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmODczMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC9yZWYtdmFybG9jYWxpdHkueG1sCkBAIC0wLDAgKzEsMTk2IEBACis8IURPQ1RZUEUgY2hhcHRlciBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8Y2hhcHRlciBpZD0ncmVmLXZhcmxvY2FsaXR5Jz4KKyAgICA8dGl0bGU+VmFyaWFibGUgQ29udGV4dDwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgV2hpbGUgeW91IGNhbiB1c2UgbW9zdCB2YXJpYWJsZXMgaW4gYWxtb3N0IGFueSBjb250ZXh0IHN1Y2ggYXMKKyAgICAgICAgPGZpbGVuYW1lPi5jb25mPC9maWxlbmFtZT4sIDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+LAorICAgICAgICA8ZmlsZW5hbWU+LmluYzwvZmlsZW5hbWU+LCBhbmQgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGVzLAorICAgICAgICBzb21lIHZhcmlhYmxlcyBhcmUgb2Z0ZW4gYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBsb2NhbGl0eSBvciBjb250ZXh0LgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHNvbWUgY29tbW9uIGFzc29jaWF0aW9ucy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LWNvbmZpZ3VyYXRpb24nPgorICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIHByb3ZpZGUgbGlzdHMgb2YgdmFyaWFibGVzIHdob3NlIGNvbnRleHQgaXMKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGRpc3RyaWJ1dGlvbiwgbWFjaGluZSwgYW5kIGxvY2FsLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1jb25maWctZGlzdHJvJz4KKyAgICAgICAgICAgIDx0aXRsZT5EaXN0cmlidXRpb24gKERpc3Rybyk8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgd2hvc2UgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIHRoZQorICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uLCBvciBkaXN0cm8uCisgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RSTyc+RElTVFJPPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPX05BTUUnPkRJU1RST19OQU1FPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLURJU1RST19WRVJTSU9OJz5ESVNUUk9fVkVSU0lPTjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUlOVEFJTkVSJz5NQUlOVEFJTkVSPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQ0xBU1NFUyc+UEFDS0FHRV9DTEFTU0VTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9PUyc+VEFSR0VUX09TPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVRBUkdFVF9GUFUnPlRBUkdFVF9GUFU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENNT0RFJz5UQ01PREU8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItVENMSUJDJz5UQ0xJQkM8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LWNvbmZpZy1tYWNoaW5lJz4KKyAgICAgICAgICAgIDx0aXRsZT5NYWNoaW5lPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlhYmxlcyB3aG9zZSBjb25maWd1cmF0aW9uIGNvbnRleHQgaXMgdGhlCisgICAgICAgICAgICAgICAgbWFjaGluZS4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UQVJHRVRfQVJDSCc+VEFSR0VUX0FSQ0g8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TRVJJQUxfQ09OU09MRVMnPlNFUklBTF9DT05TT0xFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfRVhUUkFfQVJDSFMnPlBBQ0tBR0VfRVhUUkFfQVJDSFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1JTUFHRV9GU1RZUEVTJz5JTUFHRV9GU1RZUEVTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9GRUFUVVJFUyc+TUFDSElORV9GRUFUVVJFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkVfRVhUUkFfUkRFUEVORFMnPk1BQ0hJTkVfRVhUUkFfUkRFUEVORFMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTJz5NQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMnPk1BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMnPgorICAgICAgICAgICAgICAgICAgICAgICAgTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFM8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktY29uZmlnLWxvY2FsJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2NhbDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgd2hvc2UgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCB0aGUgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGZpbGUuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRElTVFJPJz5ESVNUUk88L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1NQUNISU5FJz5NQUNISU5FPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRExfRElSJz5ETF9ESVI8L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQkZJTEVTJz5CQkZJTEVTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRVhUUkFfSU1BR0VfRkVBVFVSRVMnPkVYVFJBX0lNQUdFX0ZFQVRVUkVTCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpbms+PC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRV9DTEFTU0VTJz5QQUNLQUdFX0NMQVNTRVM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQl9OVU1CRVJfVEhSRUFEUyc+QkJfTlVNQkVSX1RIUkVBRFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1CQklOQ0xVREVMT0dTJz5CQklOQ0xVREVMT0dTPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTic+CisgICAgICAgICAgICAgICAgICAgICAgICBFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OPC9saW5rPjwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZXMnPgorICAgICAgICA8dGl0bGU+UmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIHByb3ZpZGUgbGlzdHMgb2YgdmFyaWFibGVzIHdob3NlIGNvbnRleHQgaXMKKyAgICAgICAgICAgIHJlY2lwZXM6IHJlcXVpcmVkLCBkZXBlbmRlbmNpZXMsIHBhdGgsIGFuZCBleHRyYSBidWlsZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWYtdmFybG9jYWxpdHktcmVjaXBlLXJlcXVpcmVkJz4KKyAgICAgICAgICAgIDx0aXRsZT5SZXF1aXJlZDwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBsaXN0cyB2YXJpYWJsZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHJlY2lwZXMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItTElDRU5TRSc+TElDRU5TRTwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPkxJQ19GSUxFU19DSEtTVU08L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TUkNfVVJJJz5TUkNfVVJJPC9saW5rPjwvZmlsZW5hbWU+IC0gdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgaW4gcmVjaXBlcyB0aGF0IGZldGNoIGxvY2FsIG9yIHJlbW90ZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3JlZi12YXJsb2NhbGl0eS1yZWNpcGUtZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgICAgIDx0aXRsZT5EZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHJlY2lwZSBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVQRU5EUyc+REVQRU5EUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJERVBFTkRTJz5SREVQRU5EUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJSRUNPTU1FTkRTJz5SUkVDT01NRU5EUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLVJDT05GTElDVFMnPlJDT05GTElDVFM8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1SUkVQTEFDRVMnPlJSRVBMQUNFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1wYXRocyc+CisgICAgICAgICAgICA8dGl0bGU+UGF0aHM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIHJlY2lwZSBwYXRocy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUyc+UzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUZJTEVTJz5GSUxFUzwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ncmVmLXZhcmxvY2FsaXR5LXJlY2lwZS1idWlsZCc+CisgICAgICAgICAgICA8dGl0bGU+RXh0cmEgQnVpbGQgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHNlY3Rpb24gbGlzdHMgdmFyaWFibGVzIHRoYXQgZGVmaW5lIGV4dHJhIGJ1aWxkIGluZm9ybWF0aW9uIGZvciByZWNpcGVzLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FQ01BS0UnPkVYVFJBX09FQ01BS0U8L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1FWFRSQV9PRUNPTkYnPkVYVFJBX09FQ09ORjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUVYVFJBX09FTUFLRSc+RVhUUkFfT0VNQUtFPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlbmFtZT48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItUEFDS0FHRVMnPlBBQ0tBR0VTPC9saW5rPjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT48bGluayBsaW5rZW5kPSd2YXItREVGQVVMVF9QUkVGRVJFTkNFJz5ERUZBVUxUX1BSRUZFUkVOQ0UKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGluaz48L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NCBzcGVsbCBzcGVsbGxhbmc9ZW5fZ2IKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvcmVzb3VyY2VzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjk5ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3Jlc291cmNlcy54bWwKQEAgLTAsMCArMSwxMjMgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSdyZXNvdXJjZXMnPgorPHRpdGxlPkNvbnRyaWJ1dGluZyB0byB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtaW50cm8nPgorICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGlzIGhhcHB5IGZvciBwZW9wbGUgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICBBIG51bWJlciBvZiBwbGFjZXMgZXhpc3QgdG8gZmluZCBoZWxwIGlmIHlvdSBydW4gaW50byBkaWZmaWN1bHRpZXMgb3IgZmluZCBidWdzLgorICAgICAgICBUbyBmaW5kIG91dCBob3cgdG8gZG93bmxvYWQgc291cmNlIGNvZGUsCisgICAgICAgIHNlZSB0aGUgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2xvY2FsLXlwLXJlbGVhc2UnPllvY3RvIFByb2plY3QgUmVsZWFzZTwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtYnVndHJhY2tlcic+CisgICAgPHRpdGxlPlRyYWNraW5nIEJ1Z3M8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIElmIHlvdSBmaW5kIHByb2JsZW1zIHdpdGggdGhlIFlvY3RvIFByb2plY3QsIHlvdSBzaG91bGQgcmVwb3J0IHRoZW0gdXNpbmcgdGhlCisgICAgICAgIEJ1Z3ppbGxhIGFwcGxpY2F0aW9uIGF0IDx1bGluayB1cmw9JyZZT0NUT19CVUdaSUxMQV9VUkw7Jz48L3VsaW5rPi4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtbWFpbGluZ2xpc3QnPgorICAgIDx0aXRsZT5NYWlsaW5nIGxpc3RzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBBIG51bWJlciBvZiBtYWlsaW5nIGxpc3RzIG1haW50YWluZWQgYnkgdGhlIFlvY3RvIFByb2plY3QgZXhpc3QKKyAgICAgICAgYXMgd2VsbCBhcyByZWxhdGVkIE9wZW5FbWJlZGRlZCBtYWlsaW5nIGxpc3RzIGZvciBkaXNjdXNzaW9uLAorICAgICAgICBwYXRjaCBzdWJtaXNzaW9uIGFuZCBhbm5vdW5jZW1lbnRzLgorICAgICAgICBUbyBzdWJzY3JpYmUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbWFpbGluZyBsaXN0cywgY2xpY2sgb24gdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIFVSTCBpbiB0aGUgZm9sbG93aW5nIGxpc3QgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgR2VuZXJhbCBZb2N0byBQcm9qZWN0IGRpc2N1c3Npb24gbWFpbGluZyBsaXN0LiA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dWxpbmsgdXJsPScmT0VfTElTVFNfVVJMOy9saXN0aW5mby9vcGVuZW1iZWRkZWQtY29yZSc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0IE9wZW5FbWJlZGRlZC1Db3JlICh0aGUgY29yZSBtZXRhZGF0YSkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJk9FX0xJU1RTX1VSTDsvbGlzdGluZm8vb3BlbmVtYmVkZGVkLWRldmVsJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgRGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QgYWJvdXQgT3BlbkVtYmVkZGVkLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZPRV9MSVNUU19VUkw7L2xpc3RpbmZvL2JpdGJha2UtZGV2ZWwnPjwvdWxpbms+IC0KKyAgICAgICAgICAgICAgICBEaXNjdXNzaW9uIG1haWxpbmcgbGlzdCBhYm91dCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICAgICAgICAgIGJ1aWxkIHRvb2wuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHVsaW5rIHVybD0nJllPQ1RPX0xJU1RTX1VSTDsvbGlzdGluZm8vcG9reSc+PC91bGluaz4gLQorICAgICAgICAgICAgICAgIERpc2N1c3Npb24gbWFpbGluZyBsaXN0IGFib3V0CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjx1bGluayB1cmw9JyZZT0NUT19MSVNUU19VUkw7L2xpc3RpbmZvL3lvY3RvLWFubm91bmNlJz48L3VsaW5rPiAtCisgICAgICAgICAgICAgICAgTWFpbGluZyBsaXN0IHRvIHJlY2VpdmUgb2ZmaWNpYWwgWW9jdG8gUHJvamVjdCByZWxlYXNlIGFuZCBtaWxlc3RvbmUKKyAgICAgICAgICAgICAgICBhbm5vdW5jZW1lbnRzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisgICAgRm9yIG1vcmUgWW9jdG8gUHJvamVjdC1yZWxhdGVkIG1haWxpbmcgbGlzdHMsIHNlZSB0aGUgWW9jdG8gUHJvamVjdCBjb21tdW5pdHkgbWFpbGluZyBsaXN0cyBwYWdlCisgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvY29tbXVuaXR5L21haWxpbmctbGlzdHMnPmhlcmU8L3VsaW5rPi4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Jlc291cmNlcy1pcmMnPgorICAgIDx0aXRsZT5JbnRlcm5ldCBSZWxheSBDaGF0IChJUkMpPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUd28gSVJDIGNoYW5uZWxzIG9uIGZyZWVub2RlIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBZb2N0byBQcm9qZWN0IGFuZCBQb2t5IGRpc2N1c3Npb25zOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4jeW9jdG88L2ZpbGVuYW1lPjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4jcG9reTwvZmlsZW5hbWU+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9J3Jlc291cmNlcy1saW5rcyc+CisgICAgPHRpdGxlPkxpbmtzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBIZXJlIGlzIGEgbGlzdCBvZiByZXNvdXJjZXMgeW91IHdpbGwgZmluZCBoZWxwZnVsOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5UaGUgWW9jdG8gUHJvamVjdCB3ZWJzaXRlPC91bGluaz46CisgICAgICAgICAgICAgICAgPC9lbXBoYXNpcz4gVGhlIGhvbWUgc2l0ZSBmb3IgdGhlIFlvY3RvCisgICAgICAgICAgICAgICAgUHJvamVjdC48L3BhcmE+PC9saXN0aXRlbT4KKzwhLS0KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3d3dy5pbnRlbC5jb20vJz5JbnRlbCBDb3Jwb3JhdGlvbjwvdWxpbms+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgVGhlIGNvbXBhbnkgdGhhdCBhY3F1aXJlZCBPcGVuZWRIYW5kIGluIDIwMDggYW5kIGJlZ2FuCisgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgb24gdGhlIFlvY3RvIFByb2plY3QuPC9wYXJhPjwvbGlzdGl0ZW0+CistLT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+CisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJk9FX0hPTUVfVVJMOyc+T3BlbkVtYmVkZGVkPC91bGluaz46PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICBUaGUgdXBzdHJlYW0sIGdlbmVyaWMsIGVtYmVkZGVkIGRpc3RyaWJ1dGlvbiB1c2VkIGFzIHRoZSBiYXNpcworICAgICAgICAgICAgICAgIGZvciB0aGUgYnVpbGQgc3lzdGVtIGluIHRoZSBZb2N0byBQcm9qZWN0LgorICAgICAgICAgICAgICAgIFBva3kgZGVyaXZlcyBmcm9tIGFuZCBjb250cmlidXRlcyBiYWNrIHRvIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICBwcm9qZWN0LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3Lm9wZW5lbWJlZGRlZC5vcmcvd2lraS9CaXRCYWtlJz4KKyAgICAgICAgICAgICAgICBCaXRCYWtlPC91bGluaz46PC9lbXBoYXNpcz4gVGhlIHRvb2wgdXNlZCB0byBwcm9jZXNzIG1ldGFkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgRm9yIG1vcmUgbGlua3MsIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I290aGVyLWluZm9ybWF0aW9uJz5PdGhlciBJbmZvcm1hdGlvbjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdyZXNvdXJjZXMtY29udHJpYnV0aW9ucyc+CisgICAgPHRpdGxlPkNvbnRyaWJ1dGlvbnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IGdsYWRseSBhY2NlcHRzIGNvbnRyaWJ1dGlvbnMuCisgICAgICAgIFlvdSBjYW4gc3VibWl0IGNoYW5nZXMgdG8gdGhlIHByb2plY3QgZWl0aGVyIGJ5IGNyZWF0aW5nIGFuZCBzZW5kaW5nCisgICAgICAgIHB1bGwgcmVxdWVzdHMsCisgICAgICAgIG9yIGJ5IHN1Ym1pdHRpbmcgcGF0Y2hlcyB0aHJvdWdoIGVtYWlsLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRvIGJvdGggYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvbiBob3cKKyAgICAgICAgdG8gaWRlbnRpZnkgdGhlIG1haW50YWluZXIgZm9yIGVhY2ggYXJlYSBvZiBjb2RlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNob3ctdG8tc3VibWl0LWEtY2hhbmdlJz5Ib3cgdG8gU3VibWl0IGEgQ2hhbmdlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKworPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdGVjaG5pY2FsLWRldGFpbHMueG1sIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGYzNjUyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi9yZWYtbWFudWFsL3RlY2huaWNhbC1kZXRhaWxzLnhtbApAQCAtMCwwICsxLDE0MjEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0ZWNobmljYWwtZGV0YWlscyc+Cis8dGl0bGU+VGVjaG5pY2FsIERldGFpbHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBwcm92aWRlcyB0ZWNobmljYWwgZGV0YWlscyBmb3IgdmFyaW91cyBwYXJ0cyBvZiB0aGUKKyAgICAgICAgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgQ3VycmVudGx5LCB0b3BpY3MgaW5jbHVkZSBZb2N0byBQcm9qZWN0IGNvbXBvbmVudHMsCisgICAgICAgIGNyb3NzLXRvb2xjaGFpbiBnZW5lcmF0aW9uLCBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY2FjaGUsCisgICAgICAgIHgzMiwgV2F5bGFuZCBzdXBwb3J0LCBhbmQgTGljZW5zZXMuCisgICAgPC9wYXJhPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMnPgorICAgIDx0aXRsZT5Zb2N0byBQcm9qZWN0IENvbXBvbmVudHM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNiaXRiYWtlLXRlcm0nPkJpdEJha2U8L3VsaW5rPgorICAgICAgICB0YXNrIGV4ZWN1dG9yIHRvZ2V0aGVyIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGZvcm0KKyAgICAgICAgdGhlIE9wZW5FbWJlZGRlZCBDb3JlLgorICAgICAgICBUaGlzIHNlY3Rpb24gb3ZlcnZpZXdzIHRoZXNlIGNvbXBvbmVudHMgYnkgZGVzY3JpYmluZyB0aGVpciB1c2UgYW5kCisgICAgICAgIGhvdyB0aGV5IGludGVyYWN0LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBCaXRCYWtlIGhhbmRsZXMgdGhlIHBhcnNpbmcgYW5kIGV4ZWN1dGlvbiBvZiB0aGUgZGF0YSBmaWxlcy4KKyAgICAgICAgVGhlIGRhdGEgaXRzZWxmIGlzIG9mIHZhcmlvdXMgdHlwZXM6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlJlY2lwZXM6PC9lbXBoYXNpcz4gUHJvdmlkZXMgZGV0YWlscworICAgICAgICAgICAgICAgIGFib3V0IHBhcnRpY3VsYXIgcGllY2VzIG9mIHNvZnR3YXJlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DbGFzcyBEYXRhOjwvZW1waGFzaXM+IEFic3RyYWN0cworICAgICAgICAgICAgICAgIGNvbW1vbiBidWlsZCBpbmZvcm1hdGlvbiAoZS5nLiBob3cgdG8gYnVpbGQgYSBMaW51eCBrZXJuZWwpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uIERhdGE6PC9lbXBoYXNpcz4gRGVmaW5lcworICAgICAgICAgICAgICAgIG1hY2hpbmUtc3BlY2lmaWMgc2V0dGluZ3MsIHBvbGljeSBkZWNpc2lvbnMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGRhdGEgYWN0cyBhcyB0aGUgZ2x1ZSB0byBiaW5kIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICB0b2dldGhlci4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJpdEJha2Uga25vd3MgaG93IHRvIGNvbWJpbmUgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIHRvZ2V0aGVyIGFuZCByZWZlcnMKKyAgICAgICAgdG8gZWFjaCBkYXRhIHNvdXJjZSBhcyBhIGxheWVyLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1bmRlcnN0YW5kaW5nLWFuZC1jcmVhdGluZy1sYXllcnMnPlVuZGVyc3RhbmRpbmcgYW5kCisgICAgICAgIENyZWF0aW5nIExheWVyczwvdWxpbms+IiBzZWN0aW9uIG9mIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9sbG93aW5nIGFyZSBzb21lIGJyaWVmIGRldGFpbHMgb24gdGhlc2UgY29yZSBjb21wb25lbnRzLgorICAgICAgICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBkdXJpbmcKKyAgICAgICAgYSBidWlsZCwgc2VlIHRoZQorICAgICAgICAiPGxpbmsgbGlua2VuZD0nY2xvc2VyLWxvb2snPkEgQ2xvc2VyIExvb2sgYXQgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L2xpbms+IgorICAgICAgICBDaGFwdGVyLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1iaXRiYWtlJz4KKyAgICAgICAgPHRpdGxlPkJpdEJha2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBpcyB0aGUgdG9vbCBhdCB0aGUgaGVhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgcGFyc2luZyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+LAorICAgICAgICAgICAgZ2VuZXJhdGluZyBhIGxpc3Qgb2YgdGFza3MgZnJvbSBpdCwgYW5kIHRoZW4gZXhlY3V0aW5nIHRob3NlIHRhc2tzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gYnJpZWZseSBpbnRyb2R1Y2VzIEJpdEJha2UuCisgICAgICAgICAgICBJZiB5b3Ugd2FudCBtb3JlIGluZm9ybWF0aW9uIG9uIEJpdEJha2UsIHNlZSB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjYml0YmFrZS11c2VyLW1hbnVhbCc+Qml0QmFrZSBVc2VyIE1hbnVhbDwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBzZWUgYSBsaXN0IG9mIHRoZSBvcHRpb25zIEJpdEJha2Ugc3VwcG9ydHMsIHVzZSBlaXRoZXIgb2YKKyAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtaAorICAgICAkIGJpdGJha2UgLS1oZWxwCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBtb3N0IGNvbW1vbiB1c2FnZSBmb3IgQml0QmFrZSBpcyA8ZmlsZW5hbWU+Yml0YmFrZSA8cmVwbGFjZWFibGU+cGFja2FnZW5hbWU8L3JlcGxhY2VhYmxlPjwvZmlsZW5hbWU+LCB3aGVyZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VuYW1lPC9maWxlbmFtZT4gaXMgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgeW91IHdhbnQgdG8gYnVpbGQKKyAgICAgICAgICAgIChyZWZlcnJlZCB0byBhcyB0aGUgInRhcmdldCIgaW4gdGhpcyBtYW51YWwpLgorICAgICAgICAgICAgVGhlIHRhcmdldCBvZnRlbiBlcXVhdGVzIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIGEgcmVjaXBlJ3MgZmlsZW5hbWUKKyAgICAgICAgICAgIChlLmcuICJmb28iIGZvciBhIHJlY2lwZSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPmZvb18xLjMuMC1yMC5iYjwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFNvLCB0byBwcm9jZXNzIHRoZSA8ZmlsZW5hbWU+bWF0Y2hib3gtZGVza3RvcF8xLjIuMy5iYjwvZmlsZW5hbWU+IHJlY2lwZSBmaWxlLCB5b3UKKyAgICAgICAgICAgIG1pZ2h0IHR5cGUgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFNldmVyYWwgZGlmZmVyZW50IHZlcnNpb25zIG9mIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT4gbWlnaHQgZXhpc3QuCisgICAgICAgICAgICBCaXRCYWtlIGNob29zZXMgdGhlIG9uZSBzZWxlY3RlZCBieSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICBZb3UgY2FuIGdldCBtb3JlIGRldGFpbHMgYWJvdXQgaG93IEJpdEJha2UgY2hvb3NlcyBiZXR3ZWVuIGRpZmZlcmVudAorICAgICAgICAgICAgdGFyZ2V0IHZlcnNpb25zIGFuZCBwcm92aWRlcnMgaW4gdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiYi1iaXRiYWtlLXByZWZlcmVuY2VzJz5QcmVmZXJlbmNlczwvdWxpbms+IgorICAgICAgICAgICAgc2VjdGlvbiBvZiB0aGUgQml0QmFrZSBVc2VyIE1hbnVhbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQml0QmFrZSBhbHNvIHRyaWVzIHRvIGV4ZWN1dGUgYW55IGRlcGVuZGVudCB0YXNrcyBmaXJzdC4KKyAgICAgICAgICAgIFNvIGZvciBleGFtcGxlLCBiZWZvcmUgYnVpbGRpbmcgPGZpbGVuYW1lPm1hdGNoYm94LWRlc2t0b3A8L2ZpbGVuYW1lPiwgQml0QmFrZQorICAgICAgICAgICAgd291bGQgYnVpbGQgYSBjcm9zcyBjb21waWxlciBhbmQgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4gaWYgdGhleSBoYWQgbm90IGFscmVhZHkKKyAgICAgICAgICAgIGJlZW4gYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEEgdXNlZnVsIEJpdEJha2Ugb3B0aW9uIHRvIGNvbnNpZGVyIGlzIHRoZSA8ZmlsZW5hbWU+LWs8L2ZpbGVuYW1lPiBvcgorICAgICAgICAgICAgPGZpbGVuYW1lPi0tY29udGludWU8L2ZpbGVuYW1lPiBvcHRpb24uCisgICAgICAgICAgICBUaGlzIG9wdGlvbiBpbnN0cnVjdHMgQml0QmFrZSB0byB0cnkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIGpvYgorICAgICAgICAgICAgYXMgbG9uZyBhcyBwb3NzaWJsZSBldmVuIGFmdGVyIGVuY291bnRlcmluZyBhbiBlcnJvci4KKyAgICAgICAgICAgIFdoZW4gYW4gZXJyb3Igb2NjdXJzLCB0aGUgdGFyZ2V0IHRoYXQKKyAgICAgICAgICAgIGZhaWxlZCBhbmQgdGhvc2UgdGhhdCBkZXBlbmQgb24gaXQgY2Fubm90IGJlIHJlbWFkZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHdoZW4geW91IHVzZSB0aGlzIG9wdGlvbiBvdGhlciBkZXBlbmRlbmNpZXMgY2FuIHN0aWxsIGJlCisgICAgICAgICAgICBwcm9jZXNzZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWNvbXBvbmVudHMtbWV0YWRhdGEnPgorICAgICAgICA8dGl0bGU+TWV0YWRhdGEgKFJlY2lwZXMpPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZpbGVzIHRoYXQgaGF2ZSB0aGUgPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IHN1ZmZpeCBhcmUgInJlY2lwZXMiCisgICAgICAgICAgICBmaWxlcy4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgcmVjaXBlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIHBpZWNlIG9mCisgICAgICAgICAgICBzb2Z0d2FyZS4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdG8gZG93bmxvYWQgdGhlCisgICAgICAgICAgICB1bmFsdGVyZWQgc291cmNlLCBhbnkgc291cmNlIHBhdGNoZXMgdG8gYmUgYXBwbGllZCB0byB0aGF0IHNvdXJjZQorICAgICAgICAgICAgKGlmIG5lZWRlZCksIHdoaWNoIHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFwcGx5LAorICAgICAgICAgICAgaG93IHRvIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcywgYW5kIGhvdyB0byBwYWNrYWdlIHRoZSBjb21waWxlZAorICAgICAgICAgICAgb3V0cHV0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgdGVybSAicGFja2FnZSIgaXMgc29tZXRpbWVzIHVzZWQgdG8gcmVmZXIgdG8gcmVjaXBlcy4gSG93ZXZlciwKKyAgICAgICAgICAgIHNpbmNlIHRoZSB3b3JkICJwYWNrYWdlIiBpcyB1c2VkIGZvciB0aGUgcGFja2FnZWQgb3V0cHV0IGZyb20gdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgYnVpbGQgc3lzdGVtIChpLmUuIDxmaWxlbmFtZT4uaXBrPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBmaWxlcyksCisgICAgICAgICAgICB0aGlzIGRvY3VtZW50IGF2b2lkcyB1c2luZyB0aGUgdGVybSAicGFja2FnZSIgd2hlbiByZWZlcnJpbmcgdG8gcmVjaXBlcy4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1jbGFzc2VzJz4KKyAgICAgICAgPHRpdGxlPkNsYXNzZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2xhc3MgZmlsZXMgKDxmaWxlbmFtZT4uYmJjbGFzczwvZmlsZW5hbWU+KSBjb250YWluIGluZm9ybWF0aW9uIHRoYXQKKyAgICAgICAgICAgIGlzIHVzZWZ1bCB0byBzaGFyZSBiZXR3ZWVuCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNtZXRhZGF0YSc+TWV0YWRhdGE8L3VsaW5rPiBmaWxlcy4KKyAgICAgICAgICAgIEFuIGV4YW1wbGUgaXMgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1hdXRvdG9vbHMnPjxmaWxlbmFtZT5hdXRvdG9vbHM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzLCB3aGljaCBjb250YWlucyBjb21tb24gc2V0dGluZ3MgZm9yIGFueSBhcHBsaWNhdGlvbiB0aGF0CisgICAgICAgICAgICBBdXRvdG9vbHMgdXNlcy4KKyAgICAgICAgICAgIFRoZSAiPGxpbmsgbGlua2VuZD0ncmVmLWNsYXNzZXMnPkNsYXNzZXM8L2xpbms+IiBjaGFwdGVyIHByb3ZpZGVzCisgICAgICAgICAgICBkZXRhaWxzIGFib3V0IGNsYXNzZXMgYW5kIGhvdyB0byB1c2UgdGhlbS4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktY29tcG9uZW50cy1jb25maWd1cmF0aW9uJz4KKyAgICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgKDxmaWxlbmFtZT4uY29uZjwvZmlsZW5hbWU+KSBkZWZpbmUgdmFyaW91cyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgICAgICAgdGhhdCBnb3Zlcm4gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBwcm9jZXNzLgorICAgICAgICAgICAgVGhlc2UgZmlsZXMgZmFsbCBpbnRvIHNldmVyYWwgYXJlYXMgdGhhdCBkZWZpbmUgbWFjaGluZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsCisgICAgICAgICAgICBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBvcHRpb25zLCBjb21waWxlciB0dW5pbmcgb3B0aW9ucywgZ2VuZXJhbCBjb21tb24gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgb3B0aW9ucywgYW5kIHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4sIHdoaWNoIGlzIGZvdW5kCisgICAgICAgICAgICBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJjcm9zcy1kZXZlbG9wbWVudC10b29sY2hhaW4tZ2VuZXJhdGlvbiI+CisgICAgPHRpdGxlPkNyb3NzLURldmVsb3BtZW50IFRvb2xjaGFpbiBHZW5lcmF0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCBkb2VzIG1vc3Qgb2YgdGhlIHdvcmsgZm9yIHlvdSB3aGVuIGl0IGNvbWVzIHRvCisgICAgICAgIGNyZWF0aW5nCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2Nyb3NzLWRldmVsb3BtZW50LXRvb2xjaGFpbic+Y3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluczwvdWxpbms+LgorICAgICAgICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgc29tZSB0ZWNobmljYWwgYmFja2dyb3VuZCBvbiBob3cKKyAgICAgICAgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWlucyBhcmUgY3JlYXRlZCBhbmQgdXNlZC4KKyAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdG9vbGNoYWlucywgeW91IGNhbiBhbHNvIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQURUX1VSTDsnPllvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGU8L3VsaW5rPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIFlvY3RvIFByb2plY3QgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIGNyb3NzLWRldmVsb3BtZW50CisgICAgICAgIHRvb2xjaGFpbnMgYXJlIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb24gdGhlCisgICAgICAgIHRhcmdldCBoYXJkd2FyZS4KKyAgICAgICAgV2l0aCBqdXN0IGEgZmV3IGNvbW1hbmRzLCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBjcmVhdGVzCisgICAgICAgIHRoZXNlIG5lY2Vzc2FyeSB0b29sY2hhaW5zIGZvciB5b3UuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgZmlndXJlIHNob3dzIGEgaGlnaC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCByZWdhcmRpbmcKKyAgICAgICAgdG9vbGNoYWluIGNvbnN0cnVjdGlvbiBhbmQgdXNlLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvY3Jvc3MtZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy5wbmciIHdpZHRoPSI4aW4iIGRlcHRoPSI2aW4iIGFsaWduPSJjZW50ZXIiIC8+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIE1vc3Qgb2YgdGhlIHdvcmsgb2NjdXJzIG9uIHRoZSBCdWlsZCBIb3N0LgorICAgICAgICBUaGlzIGlzIHRoZSBtYWNoaW5lIHVzZWQgdG8gYnVpbGQgaW1hZ2VzIGFuZCBnZW5lcmFsbHkgd29yayB3aXRoaW4gdGhlCisgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IGVudmlyb25tZW50LgorICAgICAgICBXaGVuIHlvdSBydW4gQml0QmFrZSB0byBjcmVhdGUgYW4gaW1hZ2UsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHVzZXMgdGhlIGhvc3QgPGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+IGNvbXBpbGVyIHRvIGJvb3RzdHJhcCBhCisgICAgICAgIGNyb3NzLWNvbXBpbGVyIG5hbWVkIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPi4KKyAgICAgICAgVGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiBjb21waWxlciBpcyB3aGF0IEJpdEJha2UgdXNlcyB0bworICAgICAgICBjb21waWxlIHNvdXJjZSBmaWxlcyB3aGVuIGNyZWF0aW5nIHRoZSB0YXJnZXQgaW1hZ2UuCisgICAgICAgIFlvdSBjYW4gdGhpbmsgb2YgPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+IHNpbXBseSBhcyBhbgorICAgICAgICBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjcm9zcy1jb21waWxlciB0aGF0IGlzIHVzZWQgaW50ZXJuYWxseSB3aXRoaW4KKyAgICAgICAgQml0QmFrZSBvbmx5LgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgY2hhaW4gb2YgZXZlbnRzIHRoYXQgb2NjdXJzIHdoZW4gPGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+IGlzCisgICAgICAgIGJvb3RzdHJhcHBlZCBpcyBhcyBmb2xsb3dzOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdjYyAtPiBiaW51dGlscy1jcm9zcyAtPiBnY2MtY3Jvc3MtaW5pdGlhbCAtPiBsaW51eC1saWJjLWhlYWRlcnMgLT4gZ2xpYmMtaW5pdGlhbCAtPiBnbGliYyAtPiBnY2MtY3Jvc3MgLT4gZ2NjLXJ1bnRpbWUKKyAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nY2M8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgaG9zdCdzIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5iaW51dGlscy1jcm9zczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBiYXJlIG1pbmltdW0gYmluYXJ5IHV0aWxpdGllcyBuZWVkZWQgaW4gb3JkZXIgdG8gcnVuCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3MtaW5pdGlhbDwvZmlsZW5hbWU+IHBoYXNlIG9mIHRoZQorICAgICAgICAgICAgICAgIGJvb3RzdHJhcCBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zcy1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gZWFybHkgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciBjcmVhdGluZworICAgICAgICAgICAgICAgIHRoZSBjcm9zcy1jb21waWxlci4KKyAgICAgICAgICAgICAgICBUaGlzIHN0YWdlIGJ1aWxkcyBlbm91Z2ggb2YgdGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3M8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICB0aGUgQyBsaWJyYXJ5LCBhbmQgb3RoZXIgcGllY2VzIG5lZWRlZCB0byBmaW5pc2ggYnVpbGRpbmcgdGhlCisgICAgICAgICAgICAgICAgZmluYWwgY3Jvc3MtY29tcGlsZXIgaW4gbGF0ZXIgc3RhZ2VzLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhICJuYXRpdmUiIHBhY2thZ2UgKGkuZS4gaXQgaXMgZGVzaWduZWQgdG8gcnVuIG9uCisgICAgICAgICAgICAgICAgdGhlIGJ1aWxkIGhvc3QpLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5saW51eC1saWJjLWhlYWRlcnM8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBIZWFkZXJzIG5lZWRlZCBmb3IgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5nbGliYy1pbml0aWFsPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgQW4gaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBFbWJlZGRlZCBHTElCQyBuZWVkZWQgdG8gYm9vdHN0cmFwCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1jcm9zczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBmaW5hbCBzdGFnZSBvZiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZm9yIHRoZQorICAgICAgICAgICAgICAgIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoaXMgc3RhZ2UgcmVzdWx0cyBpbiB0aGUgYWN0dWFsIGNyb3NzLWNvbXBpbGVyIHRoYXQKKyAgICAgICAgICAgICAgICBCaXRCYWtlIHVzZXMgd2hlbiBpdCBidWlsZHMgYW4gaW1hZ2UgZm9yIGEgdGFyZ2V0ZWQKKyAgICAgICAgICAgICAgICBkZXZpY2UuCisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcmVwbGFjaW5nIHRoaXMgY3Jvc3MgY29tcGlsZXIgdG9vbGNoYWluCisgICAgICAgICAgICAgICAgICAgIHdpdGggYSBjdXN0b20gdmVyc2lvbiwgeW91IG11c3QgcmVwbGFjZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3NzPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhbHNvIGEgIm5hdGl2ZSIgcGFja2FnZSAoaS5lLiBpdCBpcworICAgICAgICAgICAgICAgIGRlc2lnbmVkIHRvIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYy1ydW50aW1lPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgUnVudGltZSBsaWJyYXJpZXMgcmVzdWx0aW5nIGZyb20gdGhlIHRvb2xjaGFpbiBib290c3RyYXBwaW5nCisgICAgICAgICAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBUaGlzIHRvb2wgcHJvZHVjZXMgYSBiaW5hcnkgdGhhdCBjb25zaXN0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICBydW50aW1lIGxpYnJhcmllcyBuZWVkIGZvciB0aGUgdGFyZ2V0ZWQgZGV2aWNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgWW91IGNhbiB1c2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYW4gaW5zdGFsbGVyIGZvcgorICAgICAgICB0aGUgcmVsb2NhdGFibGUgU0RLIHVzZWQgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMuCisgICAgICAgIFdoZW4geW91IHJ1biB0aGUgaW5zdGFsbGVyLCBpdCBpbnN0YWxscyB0aGUgdG9vbGNoYWluLCB3aGljaCBjb250YWlucworICAgICAgICB0aGUgZGV2ZWxvcG1lbnQgdG9vbHMgKGUuZy4sIHRoZQorICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4pLAorICAgICAgICA8ZmlsZW5hbWU+YmludXRpbHMtY3Jvc3MtY2FuYWRpYW48L2ZpbGVuYW1lPiwgYW5kIG90aGVyCisgICAgICAgIDxmaWxlbmFtZT5uYXRpdmVzZGstKjwvZmlsZW5hbWU+IHRvb2xzIHlvdSBuZWVkIHRvIGNyb3NzLWNvbXBpbGUgYW5kCisgICAgICAgIHRlc3QgeW91ciBzb2Z0d2FyZS4KKyAgICAgICAgVGhlIGZpZ3VyZSBzaG93cyB0aGUgY29tbWFuZHMgeW91IHVzZSB0byBlYXNpbHkgYnVpbGQgb3V0IHRoaXMKKyAgICAgICAgdG9vbGNoYWluLgorICAgICAgICBUaGlzIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpcyBidWlsdCB0byBleGVjdXRlIG9uIHRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU0RLTUFDSElORSc+PGZpbGVuYW1lPlNES01BQ0hJTkU8L2ZpbGVuYW1lPjwvbGluaz4sCisgICAgICAgIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZQorICAgICAgICBtYWNoaW5lIGFzIHRoZSBCdWlsZCBIb3N0LgorICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIElmIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFlvY3RvIFByb2plY3QsCisgICAgICAgICAgICB5b3UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHByZS1idWlsdCBpbWFnZXMgdGhhdCBzaGlwIHdpdGggdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IGFuZCBhbHJlYWR5IGNvbnRhaW4gY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluCisgICAgICAgICAgICBpbnN0YWxsZXJzLgorICAgICAgICA8L25vdGU+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEhlcmUgaXMgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGZvciB0aGUgcmVsb2NhdGFibGUgdG9vbGNoYWluOgorICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGdjYyAtPiBiaW51dGlscy1jcm9zc3NkayAtPiBnY2MtY3Jvc3NzZGstaW5pdGlhbCAtPiBsaW51eC1saWJjLWhlYWRlcnMgLT4KKyAgICAgICAgZ2xpYmMtaW5pdGlhbCAtPiBuYXRpdmVzZGstZ2xpYmMgLT4gZ2NjLWNyb3Nzc2RrIC0+IGdjYy1jcm9zcy1jYW5hZGlhbgorICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdjYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBob3N0J3MgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmJpbnV0aWxzLWNyb3Nzc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGJhcmUgbWluaW11bSBiaW5hcnkgdXRpbGl0aWVzIG5lZWRlZCBpbiBvcmRlciB0byBydW4KKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPmdjYy1jcm9zc3Nkay1pbml0aWFsPC9maWxlbmFtZT4gcGhhc2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgYm9vdHN0cmFwIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrLWluaXRpYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBlYXJseSBzdGFnZSBvZiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZm9yIGNyZWF0aW5nCisgICAgICAgICAgICAgICAgdGhlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoaXMgc3RhZ2UgYnVpbGRzIGVub3VnaCBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT4gYW5kIHN1cHBvcnRpbmcgcGllY2VzIHNvIHRoYXQKKyAgICAgICAgICAgICAgICB0aGUgZmluYWwgc3RhZ2Ugb2YgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIGNhbiBwcm9kdWNlIHRoZQorICAgICAgICAgICAgICAgIGZpbmlzaGVkIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFRoaXMgdG9vbCBpcyBhICJuYXRpdmUiIGJpbmFyeSB0aGF0IHJ1bnMgb24gdGhlIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmxpbnV4LWxpYmMtaGVhZGVyczwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEhlYWRlcnMgbmVlZGVkIGZvciB0aGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmdsaWJjLWluaXRpYWw8L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICBBbiBpbml0aWFsIHZlcnNpb24gb2YgdGhlIEVtYmVkZGVkIEdMSUJDIG5lZWRlZCB0byBib290c3RyYXAKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bmF0aXZlc2RrLWdsaWJjPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPm5hdGl2ZXNkay1nbGliYzwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSBFbWJlZGRlZCBHTElCQyBuZWVkZWQgdG8gYm9vdHN0cmFwIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5nY2MtY3Jvc3NzZGs8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjLWNyb3Nzc2RrPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHN0YWdlIG9mIHRoZSBib290c3RyYXAgcHJvY2VzcyBmb3IgdGhlCisgICAgICAgICAgICAgICAgcmVsb2NhdGFibGUgY3Jvc3MtY29tcGlsZXIuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5nY2MtY3Jvc3NzZGs8L2ZpbGVuYW1lPiBpcyBhIHRyYW5zaXRvcnkgY29tcGlsZXIKKyAgICAgICAgICAgICAgICBhbmQgbmV2ZXIgbGVhdmVzIHRoZSBidWlsZCBob3N0LgorICAgICAgICAgICAgICAgIEl0cyBwdXJwb3NlIGlzIHRvIGhlbHAgaW4gdGhlIGJvb3RzdHJhcCBwcm9jZXNzIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgICBldmVudHVhbCByZWxvY2F0YWJsZSA8ZmlsZW5hbWU+Z2NjLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21waWxlciwgd2hpY2ggaXMgcmVsb2NhdGFibGUuCisgICAgICAgICAgICAgICAgVGhpcyB0b29sIGlzIGFsc28gYSAibmF0aXZlIiBwYWNrYWdlIChpLmUuIGl0IGlzCisgICAgICAgICAgICAgICAgZGVzaWduZWQgdG8gcnVuIG9uIHRoZSBidWlsZCBob3N0KS4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+Z2NjLWNyb3NzLWNhbmFkaWFuPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgVGhlIGZpbmFsIHJlbG9jYXRhYmxlIGNyb3NzLWNvbXBpbGVyLgorICAgICAgICAgICAgICAgIFdoZW4gcnVuIG9uIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1TREtNQUNISU5FJz48ZmlsZW5hbWU+U0RLTUFDSElORTwvZmlsZW5hbWU+PC9saW5rPiwKKyAgICAgICAgICAgICAgICB0aGlzIHRvb2wKKyAgICAgICAgICAgICAgICBwcm9kdWNlcyBleGVjdXRhYmxlIGNvZGUgdGhhdCBydW5zIG9uIHRoZSB0YXJnZXQgZGV2aWNlLgorICAgICAgICAgICAgICAgIE9ubHkgb25lIGNyb3NzLWNhbmFkaWFuIGNvbXBpbGVyIGlzIHByb2R1Y2VkIHBlciBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBzaW5jZSB0aGV5IGNhbiBiZSB0YXJnZXRlZCBhdCBkaWZmZXJlbnQgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMKKyAgICAgICAgICAgICAgICB1c2luZyBjb25maWd1cmF0aW9ucyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHRocm91Z2ggdGhlCisgICAgICAgICAgICAgICAgY29tcGlsZSBjb21tYW5kcy4KKyAgICAgICAgICAgICAgICBUaGlzIGNpcmN1bXZlbnRzIHRoZSBuZWVkIGZvciBtdWx0aXBsZSBjb21waWxlcnMgYW5kIHRodXMKKyAgICAgICAgICAgICAgICByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSB0b29sY2hhaW5zLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGFkdmFudGFnZXMgZ2FpbmVkIHdoZW4gYnVpbGRpbmcgYQorICAgICAgICBjcm9zcy1kZXZlbG9wbWVudCB0b29sY2hhaW4gaW5zdGFsbGVyLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNvcHRpb25hbGx5LWJ1aWxkaW5nLWEtdG9vbGNoYWluLWluc3RhbGxlcic+T3B0aW9uYWxseSBCdWlsZGluZyBhIFRvb2xjaGFpbiBJbnN0YWxsZXI8L3VsaW5rPiIKKyAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS4KKyAgICA8L25vdGU+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSJzaGFyZWQtc3RhdGUtY2FjaGUiPgorICAgIDx0aXRsZT5TaGFyZWQgU3RhdGUgQ2FjaGU8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ5IGRlc2lnbiwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGV2ZXJ5dGhpbmcgZnJvbSBzY3JhdGNoIHVubGVzcworICAgICAgICBCaXRCYWtlIGNhbiBkZXRlcm1pbmUgdGhhdCBwYXJ0cyBkbyBub3QgbmVlZCB0byBiZSByZWJ1aWx0LgorICAgICAgICBGdW5kYW1lbnRhbGx5LCBidWlsZGluZyBmcm9tIHNjcmF0Y2ggaXMgYXR0cmFjdGl2ZSBhcyBpdCBtZWFucyBhbGwgcGFydHMgYXJlCisgICAgICAgIGJ1aWx0IGZyZXNoIGFuZCB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSBvZiBzdGFsZSBkYXRhIGNhdXNpbmcgcHJvYmxlbXMuCisgICAgICAgIFdoZW4gZGV2ZWxvcGVycyBoaXQgcHJvYmxlbXMsIHRoZXkgdHlwaWNhbGx5IGRlZmF1bHQgYmFjayB0byBidWlsZGluZyBmcm9tIHNjcmF0Y2gKKyAgICAgICAgc28gdGhleSBrbm93IHRoZSBzdGF0ZSBvZiB0aGluZ3MgZnJvbSB0aGUgc3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIGZyb20gc2NyYXRjaCBpcyBib3RoIGFuIGFkdmFudGFnZSBhbmQgYSBkaXNhZHZhbnRhZ2UgdG8gdGhlIHByb2Nlc3MuCisgICAgICAgIEFzIG1lbnRpb25lZCBpbiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBidWlsZGluZyBmcm9tIHNjcmF0Y2ggZW5zdXJlcyB0aGF0CisgICAgICAgIGV2ZXJ5dGhpbmcgaXMgY3VycmVudCBhbmQgc3RhcnRzIGZyb20gYSBrbm93biBzdGF0ZS4KKyAgICAgICAgSG93ZXZlciwgYnVpbGRpbmcgZnJvbSBzY3JhdGNoIGFsc28gdGFrZXMgbXVjaCBsb25nZXIgYXMgaXQgZ2VuZXJhbGx5IG1lYW5zCisgICAgICAgIHJlYnVpbGRpbmcgdGhpbmdzIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IG5lZWQgdG8gYmUgcmVidWlsdC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaW1wbGVtZW50cyBzaGFyZWQgc3RhdGUgY29kZSB0aGF0IHN1cHBvcnRzIGluY3JlbWVudGFsIGJ1aWxkcy4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzaGFyZWQgc3RhdGUgY29kZSBhbnN3ZXJzIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zIHRoYXQKKyAgICAgICAgd2VyZSBmdW5kYW1lbnRhbCByb2FkYmxvY2tzIHdpdGhpbiB0aGUgT3BlbkVtYmVkZGVkIGluY3JlbWVudGFsIGJ1aWxkIHN1cHBvcnQgc3lzdGVtOgorICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoYXQgcGllY2VzIG9mIHRoZSBzeXN0ZW0gaGF2ZSBjaGFuZ2VkIGFuZCB3aGF0IHBpZWNlcyBoYXZlCisgICAgICAgICAgICAgICAgbm90IGNoYW5nZWQ/PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IGFyZSBjaGFuZ2VkIHBpZWNlcyBvZiBzb2Z0d2FyZSByZW1vdmVkIGFuZCByZXBsYWNlZD88L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgYXJlIHByZS1idWlsdCBjb21wb25lbnRzIHRoYXQgZG8gbm90IG5lZWQgdG8gYmUgcmVidWlsdCBmcm9tIHNjcmF0Y2gKKyAgICAgICAgICAgICAgICB1c2VkIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlPzwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBmaXJzdCBxdWVzdGlvbiwgdGhlIGJ1aWxkIHN5c3RlbSBkZXRlY3RzIGNoYW5nZXMgaW4gdGhlICJpbnB1dHMiIHRvIGEgZ2l2ZW4gdGFzayBieQorICAgICAgICBjcmVhdGluZyBhIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIG9mIHRoZSB0YXNrJ3MgaW5wdXRzLgorICAgICAgICBJZiB0aGUgY2hlY2tzdW0gY2hhbmdlcywgdGhlIHN5c3RlbSBhc3N1bWVzIHRoZSBpbnB1dHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFzayBuZWVkcyB0byBiZQorICAgICAgICByZXJ1bi4KKyAgICAgICAgRm9yIHRoZSBzZWNvbmQgcXVlc3Rpb24sIHRoZSBzaGFyZWQgc3RhdGUgKHNzdGF0ZSkgY29kZSB0cmFja3Mgd2hpY2ggdGFza3MgYWRkIHdoaWNoIG91dHB1dAorICAgICAgICB0byB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBtZWFucyB0aGUgb3V0cHV0IGZyb20gYSBnaXZlbiB0YXNrIGNhbiBiZSByZW1vdmVkLCB1cGdyYWRlZCBvciBvdGhlcndpc2UgbWFuaXB1bGF0ZWQuCisgICAgICAgIFRoZSB0aGlyZCBxdWVzdGlvbiBpcyBwYXJ0bHkgYWRkcmVzc2VkIGJ5IHRoZSBzb2x1dGlvbiBmb3IgdGhlIHNlY29uZCBxdWVzdGlvbgorICAgICAgICBhc3N1bWluZyB0aGUgYnVpbGQgc3lzdGVtIGNhbiBmZXRjaCB0aGUgc3N0YXRlIG9iamVjdHMgZnJvbSByZW1vdGUgbG9jYXRpb25zIGFuZAorICAgICAgICBpbnN0YWxsIHRoZW0gaWYgdGhleSBhcmUgZGVlbWVkIHRvIGJlIHZhbGlkLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBtYWludGFpbgorICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItUFInPjxmaWxlbmFtZT5QUjwvZmlsZW5hbWU+PC9saW5rPiBpbmZvcm1hdGlvbgorICAgICAgICBhcyBwYXJ0IG9mIHRoZSBzaGFyZWQgc3RhdGUgcGFja2FnZXMuCisgICAgICAgIENvbnNlcXVlbnRseSwgY29uc2lkZXJhdGlvbnMgZXhpc3QgdGhhdCBhZmZlY3QgbWFpbnRhaW5pbmcgc2hhcmVkCisgICAgICAgIHN0YXRlIGZlZWRzLgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHdvcmtzIHdpdGggcGFja2FnZXMgYW5kIGNhbgorICAgICAgICB0cmFjayBpbmNyZW1lbnRpbmcgPGZpbGVuYW1lPlBSPC9maWxlbmFtZT4gaW5mb3JtYXRpb24sIHNlZSB0aGUKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2luY3JlbWVudGluZy1hLXBhY2thZ2UtcmV2aXNpb24tbnVtYmVyJz5JbmNyZW1lbnRpbmcgYSBQYWNrYWdlIFJldmlzaW9uIE51bWJlcjwvdWxpbms+IgorICAgICAgICBzZWN0aW9uLgorICAgIDwvbm90ZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gZ29lcyBpbnRvIGRldGFpbCBhYm91dCB0aGUgb3ZlcmFsbCBpbmNyZW1lbnRhbCBidWlsZAorICAgICAgICBhcmNoaXRlY3R1cmUsIHRoZSBjaGVja3N1bXMgKHNpZ25hdHVyZXMpLCBzaGFyZWQgc3RhdGUsIGFuZCBzb21lIHRpcHMgYW5kIHRyaWNrcy4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nb3ZlcmFsbC1hcmNoaXRlY3R1cmUnPgorICAgICAgICA8dGl0bGU+T3ZlcmFsbCBBcmNoaXRlY3R1cmU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgV2hlbiBkZXRlcm1pbmluZyB3aGF0IHBhcnRzIG9mIHRoZSBzeXN0ZW0gbmVlZCB0byBiZSBidWlsdCwgQml0QmFrZQorICAgICAgICAgICAgd29ya3Mgb24gYSBwZXItdGFzayBiYXNpcyByYXRoZXIgdGhhbiBhIHBlci1yZWNpcGUgYmFzaXMuCisgICAgICAgICAgICBZb3UgbWlnaHQgd29uZGVyIHdoeSB1c2luZyBhIHBlci10YXNrIGJhc2lzIGlzIHByZWZlcnJlZCBvdmVyIGEgcGVyLXJlY2lwZSBiYXNpcy4KKyAgICAgICAgICAgIFRvIGhlbHAgZXhwbGFpbiwgY29uc2lkZXIgaGF2aW5nIHRoZSBJUEsgcGFja2FnaW5nIGJhY2tlbmQgZW5hYmxlZCBhbmQgdGhlbiBzd2l0Y2hpbmcgdG8gREVCLgorICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1pbnN0YWxsJz48ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHRhc2sgb3V0cHV0cyBhcmUgc3RpbGwgdmFsaWQuCisgICAgICAgICAgICBIb3dldmVyLCB3aXRoIGEgcGVyLXJlY2lwZSBhcHByb2FjaCwgdGhlIGJ1aWxkIHdvdWxkIG5vdCBpbmNsdWRlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPi5kZWI8L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgIENvbnNlcXVlbnRseSwgeW91IHdvdWxkIGhhdmUgdG8gaW52YWxpZGF0ZSB0aGUgd2hvbGUgYnVpbGQgYW5kIHJlcnVuIGl0LgorICAgICAgICAgICAgUmVydW5uaW5nIGV2ZXJ5dGhpbmcgaXMgbm90IHRoZSBiZXN0IHNvbHV0aW9uLgorICAgICAgICAgICAgQWxzbywgaW4gdGhpcyBjYXNlLCB0aGUgY29yZSBtdXN0IGJlICJ0YXVnaHQiIG11Y2ggYWJvdXQgc3BlY2lmaWMgdGFza3MuCisgICAgICAgICAgICBUaGlzIG1ldGhvZG9sb2d5IGRvZXMgbm90IHNjYWxlIHdlbGwgYW5kIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvIGVhc2lseSBhZGQgbmV3IHRhc2tzCisgICAgICAgICAgICBpbiBsYXllcnMgb3IgYXMgZXh0ZXJuYWwgcmVjaXBlcyB3aXRob3V0IHRvdWNoaW5nIHRoZSBwYWNrYWdlZC1zdGFnaW5nIGNvcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nY2hlY2tzdW1zJz4KKyAgICAgICAgPHRpdGxlPkNoZWNrc3VtcyAoU2lnbmF0dXJlcyk8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBjb2RlIHVzZXMgYSBjaGVja3N1bSwgd2hpY2ggaXMgYSB1bmlxdWUgc2lnbmF0dXJlIG9mIGEgdGFzaydzCisgICAgICAgICAgICBpbnB1dHMsIHRvIGRldGVybWluZSBpZiBhIHRhc2sgbmVlZHMgdG8gYmUgcnVuIGFnYWluLgorICAgICAgICAgICAgQmVjYXVzZSBpdCBpcyBhIGNoYW5nZSBpbiBhIHRhc2sncyBpbnB1dHMgdGhhdCB0cmlnZ2VycyBhIHJlcnVuLCB0aGUgcHJvY2VzcworICAgICAgICAgICAgbmVlZHMgdG8gZGV0ZWN0IGFsbCB0aGUgaW5wdXRzIHRvIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIEZvciBzaGVsbCB0YXNrcywgdGhpcyB0dXJucyBvdXQgdG8gYmUgZmFpcmx5IGVhc3kgYmVjYXVzZQorICAgICAgICAgICAgdGhlIGJ1aWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGEgInJ1biIgc2hlbGwgc2NyaXB0IGZvciBlYWNoIHRhc2sgYW5kCisgICAgICAgICAgICBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBjaGVja3N1bSB0aGF0IGdpdmVzIHlvdSBhIGdvb2QgaWRlYSBvZiB3aGVuCisgICAgICAgICAgICB0aGUgdGFzaydzIGRhdGEgY2hhbmdlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gY29tcGxpY2F0ZSB0aGUgcHJvYmxlbSwgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4KKyAgICAgICAgICAgIHRoZSBjaGVja3N1bS4KKyAgICAgICAgICAgIEZpcnN0LCB0aGVyZSBpcyB0aGUgYWN0dWFsIHNwZWNpZmljIGJ1aWxkIHBhdGggb2YgYSBnaXZlbiB0YXNrIC0KKyAgICAgICAgICAgIHRoZSA8bGluayBsaW5rZW5kPSd2YXItV09SS0RJUic+PGZpbGVuYW1lPldPUktESVI8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBJdCBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIHdvcmsgZGlyZWN0b3J5IGNoYW5nZXMgYmVjYXVzZSBpdCBzaG91bGQgbm90CisgICAgICAgICAgICBhZmZlY3QgdGhlIG91dHB1dCBmb3IgdGFyZ2V0IHBhY2thZ2VzLgorICAgICAgICAgICAgQWxzbywgdGhlIGJ1aWxkIHByb2Nlc3MgaGFzIHRoZSBvYmplY3RpdmUgb2YgbWFraW5nIG5hdGl2ZSBvciBjcm9zcyBwYWNrYWdlcyByZWxvY2F0YWJsZS4KKyAgICAgICAgICAgIFRoZSBjaGVja3N1bSB0aGVyZWZvcmUgbmVlZHMgdG8gZXhjbHVkZSA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVGhlIHNpbXBsaXN0aWMgYXBwcm9hY2ggZm9yIGV4Y2x1ZGluZyB0aGUgd29yayBkaXJlY3RvcnkgaXMgdG8gc2V0CisgICAgICAgICAgICA8ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+IHRvIHNvbWUgZml4ZWQgdmFsdWUgYW5kIGNyZWF0ZSB0aGUgY2hlY2tzdW0KKyAgICAgICAgICAgIGZvciB0aGUgInJ1biIgc2NyaXB0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbm90aGVyIHByb2JsZW0gcmVzdWx0cyBmcm9tIHRoZSAicnVuIiBzY3JpcHRzIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHRoYXQKKyAgICAgICAgICAgIG1pZ2h0IG9yIG1pZ2h0IG5vdCBnZXQgY2FsbGVkLgorICAgICAgICAgICAgVGhlIGluY3JlbWVudGFsIGJ1aWxkIHNvbHV0aW9uIGNvbnRhaW5zIGNvZGUgdGhhdCBmaWd1cmVzIG91dCBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIGJldHdlZW4gc2hlbGwgZnVuY3Rpb25zLgorICAgICAgICAgICAgVGhpcyBjb2RlIGlzIHVzZWQgdG8gcHJ1bmUgdGhlICJydW4iIHNjcmlwdHMgZG93biB0byB0aGUgbWluaW11bSBzZXQsCisgICAgICAgICAgICB0aGVyZWJ5IGFsbGV2aWF0aW5nIHRoaXMgcHJvYmxlbSBhbmQgbWFraW5nIHRoZSAicnVuIiBzY3JpcHRzIG11Y2ggbW9yZQorICAgICAgICAgICAgcmVhZGFibGUgYXMgYSBib251cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgU28gZmFyIHdlIGhhdmUgc29sdXRpb25zIGZvciBzaGVsbCBzY3JpcHRzLgorICAgICAgICAgICAgV2hhdCBhYm91dCBQeXRob24gdGFza3M/CisgICAgICAgICAgICBUaGUgc2FtZSBhcHByb2FjaCBhcHBsaWVzIGV2ZW4gdGhvdWdoIHRoZXNlIHRhc2tzIGFyZSBtb3JlIGRpZmZpY3VsdC4KKyAgICAgICAgICAgIFRoZSBwcm9jZXNzIG5lZWRzIHRvIGZpZ3VyZSBvdXQgd2hhdCB2YXJpYWJsZXMgYSBQeXRob24gZnVuY3Rpb24gYWNjZXNzZXMKKyAgICAgICAgICAgIGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscy4KKyAgICAgICAgICAgIEFnYWluLCB0aGUgaW5jcmVtZW50YWwgYnVpbGQgc29sdXRpb24gY29udGFpbnMgY29kZSB0aGF0IGZpcnN0IGZpZ3VyZXMgb3V0CisgICAgICAgICAgICB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIGRlcGVuZGVuY2llcywgYW5kIHRoZW4gY3JlYXRlcyBhIGNoZWNrc3VtIGZvciB0aGUgZGF0YQorICAgICAgICAgICAgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlIHRhc2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIExpa2UgdGhlIDxmaWxlbmFtZT5XT1JLRElSPC9maWxlbmFtZT4gY2FzZSwgc2l0dWF0aW9ucyBleGlzdCB3aGVyZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAgICAgICAgRm9yIHRoZXNlIGNhc2VzLCB5b3UgY2FuIGluc3RydWN0IHRoZSBidWlsZCBwcm9jZXNzIHRvIGlnbm9yZSBhIGRlcGVuZGVuY3kKKyAgICAgICAgICAgIGJ5IHVzaW5nIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBBQ0tBR0VfQVJDSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGV4YW1wbGUgZW5zdXJlcyB0aGF0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBQ0tBR0VfQVJDSFMnPjxmaWxlbmFtZT5QQUNLQUdFX0FSQ0hTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBkb2VzIG5vdAorICAgICAgICAgICAgZGVwZW5kIG9uIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLU1BQ0hJTkUnPjxmaWxlbmFtZT5NQUNISU5FPC9maWxlbmFtZT48L2xpbms+LAorICAgICAgICAgICAgZXZlbiBpZiBpdCBkb2VzIHJlZmVyZW5jZSBpdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRXF1YWxseSwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYWRkIGRlcGVuZGVuY2llcyBCaXRCYWtlIGlzIG5vdCBhYmxlIHRvIGZpbmQuCisgICAgICAgICAgICBZb3UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSB1c2luZyBhIGxpbmUgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgUEFDS0FHRV9BUkNIU1t2YXJkZXBzXSA9ICJNQUNISU5FIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhpcyBleGFtcGxlIGV4cGxpY2l0bHkgYWRkcyB0aGUgPGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPiB2YXJpYWJsZSBhcyBhCisgICAgICAgICAgICBkZXBlbmRlbmN5IGZvciA8ZmlsZW5hbWU+UEFDS0FHRV9BUkNIUzwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBDb25zaWRlciBhIGNhc2Ugd2l0aCBpbi1saW5lIFB5dGhvbiwgZm9yIGV4YW1wbGUsIHdoZXJlIEJpdEJha2UgaXMgbm90CisgICAgICAgICAgICBhYmxlIHRvIGZpZ3VyZSBvdXQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgV2hlbiBydW5uaW5nIGluIGRlYnVnIG1vZGUgKGkuZS4gdXNpbmcgPGZpbGVuYW1lPi1EREQ8L2ZpbGVuYW1lPiksIEJpdEJha2UKKyAgICAgICAgICAgIHByb2R1Y2VzIG91dHB1dCB3aGVuIGl0IGRpc2NvdmVycyBzb21ldGhpbmcgZm9yIHdoaWNoIGl0IGNhbm5vdCBmaWd1cmUgb3V0CisgICAgICAgICAgICBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIGhhcyBjdXJyZW50bHkgbm90IG1hbmFnZWQgdG8gY292ZXIgdGhvc2UgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpbiBkZXRhaWwgYW5kIGlzIGF3YXJlIG9mIHRoZSBuZWVkIHRvIGZpeCB0aGlzIHNpdHVhdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGh1cyBmYXIsIHRoaXMgc2VjdGlvbiBoYXMgbGltaXRlZCBkaXNjdXNzaW9uIHRvIHRoZSBkaXJlY3QgaW5wdXRzIGludG8gYSB0YXNrLgorICAgICAgICAgICAgSW5mb3JtYXRpb24gYmFzZWQgb24gZGlyZWN0IGlucHV0cyBpcyByZWZlcnJlZCB0byBhcyB0aGUgImJhc2VoYXNoIiBpbiB0aGUKKyAgICAgICAgICAgIGNvZGUuCisgICAgICAgICAgICBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCB0aGUgcXVlc3Rpb24gb2YgYSB0YXNrJ3MgaW5kaXJlY3QgaW5wdXRzIC0gdGhlCisgICAgICAgICAgICB0aGluZ3MgdGhhdCB3ZXJlIGFscmVhZHkgYnVpbHQgYW5kIHByZXNlbnQgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgVGhlIGNoZWNrc3VtIChvciBzaWduYXR1cmUpIGZvciBhIHBhcnRpY3VsYXIgdGFzayBuZWVkcyB0byBhZGQgdGhlIGhhc2hlcworICAgICAgICAgICAgb2YgYWxsIHRoZSB0YXNrcyBvbiB3aGljaCB0aGUgcGFydGljdWxhciB0YXNrIGRlcGVuZHMuCisgICAgICAgICAgICBDaG9vc2luZyB3aGljaCBkZXBlbmRlbmNpZXMgdG8gYWRkIGlzIGEgcG9saWN5IGRlY2lzaW9uLgorICAgICAgICAgICAgSG93ZXZlciwgdGhlIGVmZmVjdCBpcyB0byBnZW5lcmF0ZSBhIG1hc3RlciBjaGVja3N1bSB0aGF0IGNvbWJpbmVzIHRoZSBiYXNlaGFzaAorICAgICAgICAgICAgYW5kIHRoZSBoYXNoZXMgb2YgdGhlIHRhc2sncyBkZXBlbmRlbmNpZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSBjb2RlIGxldmVsLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHdheXMgYm90aCB0aGUgYmFzZWhhc2ggYW5kIHRoZQorICAgICAgICAgICAgZGVwZW5kZW50IHRhc2sgaGFzaGVzIGNhbiBiZSBpbmZsdWVuY2VkLgorICAgICAgICAgICAgV2l0aGluIHRoZSBCaXRCYWtlIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2UgY2FuIGdpdmUgQml0QmFrZSBzb21lIGV4dHJhIGluZm9ybWF0aW9uCisgICAgICAgICAgICB0byBoZWxwIGl0IGNvbnN0cnVjdCB0aGUgYmFzZWhhc2guCisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBlZmZlY3RpdmVseSByZXN1bHRzIGluIGEgbGlzdCBvZiBnbG9iYWwgdmFyaWFibGUKKyAgICAgICAgICAgIGRlcGVuZGVuY3kgZXhjbHVkZXMgLSB2YXJpYWJsZXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGNoZWNrc3VtOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBCQl9IQVNIQkFTRV9XSElURUxJU1QgPz0gIlRNUERJUiBGSUxFIFBBVEggUFdEIEJCX1RBU0tIQVNIIEJCUEFUSCBETF9ESVIgXAorICAgICAgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAorICAgICAgICAgVVNFUiBGSUxFU1BBVEggU1RBR0lOR19ESVJfSE9TVCBTVEFHSU5HX0RJUl9UQVJHRVQgQ09SRUJBU0UgUFJTRVJWX0hPU1QgXAorICAgICAgICAgUFJTRVJWX0RVTVBESVIgUFJTRVJWX0RVTVBGSUxFIFBSU0VSVl9MT0NLRE9XTiBQQVJBTExFTF9NQUtFIFwKKyAgICAgICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZXhjbHVkZXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgc2luY2UgdGhhdCB2YXJpYWJsZSBpcyBhY3R1YWxseSBjb25zdHJ1Y3RlZCBhcyBhIHBhdGggd2l0aGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItVE1QRElSJz48ZmlsZW5hbWU+VE1QRElSPC9maWxlbmFtZT48L2xpbms+LCB3aGljaCBpcyBvbgorICAgICAgICAgICAgdGhlIHdoaXRlbGlzdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHJ1bGVzIGZvciBkZWNpZGluZyB3aGljaCBoYXNoZXMgb2YgZGVwZW5kZW50IHRhc2tzIHRvIGluY2x1ZGUgdGhyb3VnaAorICAgICAgICAgICAgZGVwZW5kZW5jeSBjaGFpbnMgYXJlIG1vcmUgY29tcGxleCBhbmQgYXJlIGdlbmVyYWxseSBhY2NvbXBsaXNoZWQgd2l0aCBhCisgICAgICAgICAgICBQeXRob24gZnVuY3Rpb24uCisgICAgICAgICAgICBUaGUgY29kZSBpbiA8ZmlsZW5hbWU+bWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5PC9maWxlbmFtZT4gc2hvd3MgdHdvIGV4YW1wbGVzCisgICAgICAgICAgICBvZiB0aGlzIGFuZCBhbHNvIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIGluc2VydCB5b3VyIG93biBwb2xpY3kgaW50byB0aGUgc3lzdGVtCisgICAgICAgICAgICBpZiBzbyBkZXNpcmVkLgorICAgICAgICAgICAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR3byBiYXNpYyBzaWduYXR1cmUgZ2VuZXJhdG9ycyA8ZmlsZW5hbWU+T0UtQ29yZTwvZmlsZW5hbWU+CisgICAgICAgICAgICB1c2VzOiAgIk9FQmFzaWMiIGFuZCAiT0VCYXNpY0hhc2giLgorICAgICAgICAgICAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgYSBkdW1teSAibm9vcCIgc2lnbmF0dXJlIGhhbmRsZXIgZW5hYmxlZCBpbiBCaXRCYWtlLgorICAgICAgICAgICAgVGhpcyBtZWFucyB0aGF0IGJlaGF2aW9yIGlzIHVuY2hhbmdlZCBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgorICAgICAgICAgICAgPGZpbGVuYW1lPk9FLUNvcmU8L2ZpbGVuYW1lPiB1c2VzIHRoZSAiT0VCYXNpY0hhc2giIHNpZ25hdHVyZSBoYW5kbGVyIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHRocm91Z2ggdGhpcyBzZXR0aW5nIGluIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZS5jb25mPC9maWxlbmFtZT4gZmlsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlICJPRUJhc2ljSGFzaCIgPGZpbGVuYW1lPkJCX1NJR05BVFVSRV9IQU5ETEVSPC9maWxlbmFtZT4gaXMgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICAiT0VCYXNpYyIgdmVyc2lvbiBidXQgYWRkcyB0aGUgdGFzayBoYXNoIHRvIHRoZSBzdGFtcCBmaWxlcy4KKyAgICAgICAgICAgIFRoaXMgcmVzdWx0cyBpbiBhbnkKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I21ldGFkYXRhJz5NZXRhZGF0YTwvdWxpbms+CisgICAgICAgICAgICBjaGFuZ2UgdGhhdCBjaGFuZ2VzIHRoZSB0YXNrIGhhc2gsIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIGNhdXNpbmcgdGhlIHRhc2sgdG8gYmUgcnVuIGFnYWluLgorICAgICAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBuZWVkIHRvIGJ1bXAgPGxpbmsgbGlua2VuZD0ndmFyLVBSJz48ZmlsZW5hbWU+UFI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIHZhbHVlcywgYW5kIGNoYW5nZXMgdG8gTWV0YWRhdGEgYXV0b21hdGljYWxseSByaXBwbGUgYWNyb3NzIHRoZSBidWlsZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgZW5kIHJlc3VsdCBvZiB0aGVzZSBzaWduYXR1cmUgZ2VuZXJhdG9ycyBpcyB0bworICAgICAgICAgICAgbWFrZSBzb21lIGRlcGVuZGVuY3kgYW5kIGhhc2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXM6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+QkJfQkFTRUhBU0hfdGFzay08L2ZpbGVuYW1lPjxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+OgorICAgICAgICAgICAgICAgICAgICBUaGUgYmFzZSBoYXNoZXMgZm9yIGVhY2ggdGFzayBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX0JBU0VIQVNIXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBiYXNlIGhhc2hlcyBmb3IgZWFjaCBkZXBlbmRlbnQgdGFzay4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5CQkhBU0hERVBTXzwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48ZmlsZW5hbWU+OjwvZmlsZW5hbWU+PHJlcGxhY2VhYmxlPnRhc2tuYW1lPC9yZXBsYWNlYWJsZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSB0YXNrIGRlcGVuZGVuY2llcyBmb3IgZWFjaCB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPkJCX1RBU0tIQVNIPC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3NoYXJlZC1zdGF0ZSc+CisgICAgICAgIDx0aXRsZT5TaGFyZWQgU3RhdGU8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQ2hlY2tzdW1zIGFuZCBkZXBlbmRlbmNpZXMsIGFzIGRpc2N1c3NlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgc29sdmUgaGFsZiB0aGUKKyAgICAgICAgICAgIHByb2JsZW0gb2Ygc3VwcG9ydGluZyBhIHNoYXJlZCBzdGF0ZS4KKyAgICAgICAgICAgIFRoZSBvdGhlciBwYXJ0IG9mIHRoZSBwcm9ibGVtIGlzIGJlaW5nIGFibGUgdG8gdXNlIGNoZWNrc3VtIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgYnVpbGQKKyAgICAgICAgICAgIGFuZCBiZWluZyBhYmxlIHRvIHJldXNlIG9yIHJlYnVpbGQgc3BlY2lmaWMgY29tcG9uZW50cy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1zc3RhdGUnPjxmaWxlbmFtZT5zc3RhdGU8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGNsYXNzIGlzIGEgcmVsYXRpdmVseSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGhvdyB0byAiY2FwdHVyZSIKKyAgICAgICAgICAgIGEgc25hcHNob3Qgb2YgYSBnaXZlbiB0YXNrLgorICAgICAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgYnVpbGQgcHJvY2VzcyBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBzb3VyY2Ugb2YgYSB0YXNrJ3Mgb3V0cHV0LgorICAgICAgICAgICAgT3V0cHV0IGNvdWxkIGJlIGZyZXNobHkgYnVpbHQgb3IgaXQgY291bGQgYmUgZG93bmxvYWRlZCBhbmQgdW5wYWNrZWQgZnJvbQorICAgICAgICAgICAgc29tZXdoZXJlIC0gdGhlIGJ1aWxkIHByb2Nlc3MgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdHMgb3JpZ2luLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG91dHB1dCwgb25lIGlzIGp1c3QgYWJvdXQgY3JlYXRpbmcgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGluIDxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz48ZmlsZW5hbWU+V09SS0RJUjwvZmlsZW5hbWU+PC9saW5rPi4KKyAgICAgICAgICAgIEEgZ29vZCBleGFtcGxlIGlzIHRoZSBvdXRwdXQgb2YgZWl0aGVyCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIG9yCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZSc+PGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICBUaGUgb3RoZXIgdHlwZSBvZiBvdXRwdXQgb2NjdXJzIHdoZW4gYSBzZXQgb2YgZGF0YSBpcyBtZXJnZWQgaW50byBhIHNoYXJlZCBkaXJlY3RvcnkKKyAgICAgICAgICAgIHRyZWUgc3VjaCBhcyB0aGUgc3lzcm9vdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgdGVhbSBoYXMgdHJpZWQgdG8ga2VlcCB0aGUgZGV0YWlscyBvZiB0aGUKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGhpZGRlbiBpbiA8ZmlsZW5hbWU+c3N0YXRlPC9maWxlbmFtZT4gY2xhc3MuCisgICAgICAgICAgICBGcm9tIGEgdXNlcidzIHBlcnNwZWN0aXZlLCBhZGRpbmcgc2hhcmVkIHN0YXRlIHdyYXBwaW5nIHRvIGEgdGFzaworICAgICAgICAgICAgaXMgYXMgc2ltcGxlIGFzIHRoaXMKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1kZXBsb3knPjxmaWxlbmFtZT5kb19kZXBsb3k8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgIGV4YW1wbGUgdGFrZW4gZnJvbSB0aGUKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi1jbGFzc2VzLWRlcGxveSc+PGZpbGVuYW1lPmRlcGxveTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY2xhc3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIERFUExPWURJUiA9ICIke1dPUktESVJ9L2RlcGxveS0ke1BOfSIKKyAgICAgU1NUQVRFVEFTS1MgKz0gImRvX2RlcGxveSIKKyAgICAgZG9fZGVwbG95W3NzdGF0ZS1uYW1lXSA9ICJkZXBsb3kiCisgICAgIGRvX2RlcGxveVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke0RFUExPWURJUn0iCisgICAgIGRvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lNQUdFfSIKKworICAgICBweXRob24gZG9fZGVwbG95X3NldHNjZW5lICgpIHsKKyAgICAgICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorICAgICB9CisgICAgIGFkZHRhc2sgZG9fZGVwbG95X3NldHNjZW5lCisgICAgIGRvX2RlcGxveVtkaXJzXSA9ICIke0RFUExPWURJUn0gJHtCfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIEluIHRoaXMgZXhhbXBsZSwgd2UgYWRkIHNvbWUgZXh0cmEgZmxhZ3MgdG8gdGhlIHRhc2ssIGEgbmFtZSBmaWVsZCAoImRlcGxveSIpLCBhbgorICAgICAgICAgICAgaW5wdXQgZGlyZWN0b3J5IHdoZXJlIHRoZSB0YXNrIHNlbmRzIGRhdGEsIGFuZCB0aGUgb3V0cHV0CisgICAgICAgICAgICBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRhdGEgZnJvbSB0aGUgdGFzayBzaG91bGQgZXZlbnR1YWxseSBiZSBjb3BpZWQuCisgICAgICAgICAgICBXZSBhbHNvIGFkZCBhIDxmaWxlbmFtZT5fc2V0c2NlbmU8L2ZpbGVuYW1lPiB2YXJpYW50IG9mIHRoZSB0YXNrIGFuZCBhZGQgdGhlIHRhc2sKKyAgICAgICAgICAgIG5hbWUgdG8gdGhlIDxmaWxlbmFtZT5TU1RBVEVUQVNLUzwvZmlsZW5hbWU+IGxpc3QuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBoYXZlIGEgZGlyZWN0b3J5IHdob3NlIGNvbnRlbnRzIHlvdSBuZWVkIHRvIHByZXNlcnZlLCB5b3UgY2FuIGRvIHRoaXMgd2l0aAorICAgICAgICAgICAgYSBsaW5lIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgZG9fcGFja2FnZVtzc3RhdGUtcGxhaW5kaXJzXSA9ICIke1BLR0R9ICR7UEtHREVTVH0iCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIG1ldGhvZCwgYXMgd2VsbCBhcyB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGFsc28gd29ya3MgZm9yIG11bHRpcGxlIGRpcmVjdG9yaWVzLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBkb19wYWNrYWdlW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHREVTVFdPUkt9ICR7U0hMSUJTV09SS0RJUn0iCisgICAgIGRvX3BhY2thZ2Vbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7UEtHREFUQV9ESVJ9ICR7U0hMSUJTRElSfSIKKyAgICAgZG9fcGFja2FnZVtzc3RhdGUtbG9ja2ZpbGVdID0gIiR7UEFDS0FHRUxPQ0t9IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBhbHNvIGluY2x1ZGUgdGhlIGFiaWxpdHkgdG8gdGFrZSBhIGxvY2tmaWxlIHdoZW4gbWFuaXB1bGF0aW5nCisgICAgICAgICAgICBzaGFyZWQgc3RhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZXMgc2luY2Ugc29tZSBjYXNlcyBhcmUgc2Vuc2l0aXZlIHRvIGZpbGUKKyAgICAgICAgICAgIGFkZGl0aW9ucyBvciByZW1vdmFscy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQmVoaW5kIHRoZSBzY2VuZXMsIHRoZSBzaGFyZWQgc3RhdGUgY29kZSB3b3JrcyBieSBsb29raW5nIGluCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX0RJUic+PGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPjwvbGluaz4gYW5kCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1NUQVRFX01JUlJPUlMnPjxmaWxlbmFtZT5TU1RBVEVfTUlSUk9SUzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgZm9yIHNoYXJlZCBzdGF0ZSBmaWxlcy4KKyAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1NUQVRFX01JUlJPUlMgPz0gIlwKKyAgICAgZmlsZTovLy4qIGh0dHA6Ly9zb21lc2VydmVyLnRsZC9zaGFyZS9zc3RhdGUvUEFUSCBcbiBcCisgICAgIGZpbGU6Ly8uKiBmaWxlOi8vL3NvbWUvbG9jYWwvZGlyL3NzdGF0ZS9QQVRIIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBkaXJlY3RvcnkgKDxmaWxlbmFtZT5TU1RBVEVfRElSPC9maWxlbmFtZT4pIGlzCisgICAgICAgICAgICAgICAgb3JnYW5pemVkIGludG8gdHdvLWNoYXJhY3RlciBzdWJkaXJlY3Rvcmllcywgd2hlcmUgdGhlIHN1YmRpcmVjdG9yeQorICAgICAgICAgICAgICAgIG5hbWVzIGFyZSBiYXNlZCBvbiB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIGhhc2guCisgICAgICAgICAgICAgICAgSWYgdGhlIHNoYXJlZCBzdGF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBhIG1pcnJvciBoYXMgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBzdHJ1Y3R1cmUgYXMgPGZpbGVuYW1lPlNTVEFURV9ESVI8L2ZpbGVuYW1lPiwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBzcGVjaWZ5ICJQQVRIIiBhcyBwYXJ0IG9mIHRoZSBVUkkgdG8gZW5hYmxlIHRoZSBidWlsZCBzeXN0ZW0KKyAgICAgICAgICAgICAgICB0byBtYXAgdG8gdGhlIGFwcHJvcHJpYXRlIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIHZhbGlkaXR5IGNhbiBiZSBkZXRlY3RlZCBqdXN0IGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgICAgICAgICBmaWxlbmFtZSBzaW5jZSB0aGUgZmlsZW5hbWUgY29udGFpbnMgdGhlIHRhc2sgY2hlY2tzdW0gKG9yIHNpZ25hdHVyZSkgYXMKKyAgICAgICAgICAgIGRlc2NyaWJlZCBlYXJsaWVyIGluIHRoaXMgc2VjdGlvbi4KKyAgICAgICAgICAgIElmIGEgdmFsaWQgc2hhcmVkIHN0YXRlIHBhY2thZ2UgaXMgZm91bmQsIHRoZSBidWlsZCBwcm9jZXNzIGRvd25sb2FkcyBpdAorICAgICAgICAgICAgYW5kIHVzZXMgaXQgdG8gYWNjZWxlcmF0ZSB0aGUgdGFzay4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGJ1aWxkIHByb2Nlc3NlcyB1c2UgdGhlIDxmaWxlbmFtZT4qX3NldHNjZW5lPC9maWxlbmFtZT4gdGFza3MKKyAgICAgICAgICAgIGZvciB0aGUgdGFzayBhY2NlbGVyYXRpb24gcGhhc2UuCisgICAgICAgICAgICBCaXRCYWtlIGdvZXMgdGhyb3VnaCB0aGlzIHBoYXNlIGJlZm9yZSB0aGUgbWFpbiBleGVjdXRpb24gY29kZSBhbmQgdHJpZXMKKyAgICAgICAgICAgIHRvIGFjY2VsZXJhdGUgYW55IHRhc2tzIGZvciB3aGljaCBpdCBjYW4gZmluZCBzaGFyZWQgc3RhdGUgcGFja2FnZXMuCisgICAgICAgICAgICBJZiBhIHNoYXJlZCBzdGF0ZSBwYWNrYWdlIGZvciBhIHRhc2sgaXMgYXZhaWxhYmxlLCB0aGUgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICBwYWNrYWdlIGlzIHVzZWQuCisgICAgICAgICAgICBUaGlzIG1lYW5zIHRoZSB0YXNrIGFuZCBhbnkgdGFza3Mgb24gd2hpY2ggaXQgaXMgZGVwZW5kZW50IGFyZSBub3QKKyAgICAgICAgICAgIGV4ZWN1dGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBcyBhIHJlYWwgd29ybGQgZXhhbXBsZSwgdGhlIGFpbSBpcyB3aGVuIGJ1aWxkaW5nIGFuIElQSy1iYXNlZCBpbWFnZSwKKyAgICAgICAgICAgIG9ubHkgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtcGFja2FnZV93cml0ZV9pcGsnPjxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlX2lwazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdGFza3Mgd291bGQgaGF2ZSB0aGVpcgorICAgICAgICAgICAgc2hhcmVkIHN0YXRlIHBhY2thZ2VzIGZldGNoZWQgYW5kIGV4dHJhY3RlZC4KKyAgICAgICAgICAgIFNpbmNlIHRoZSBzeXNyb290IGlzIG5vdCB1c2VkLCBpdCB3b3VsZCBuZXZlciBnZXQgZXh0cmFjdGVkLgorICAgICAgICAgICAgVGhpcyBpcyBhbm90aGVyIHJlYXNvbiB3aHkgYSB0YXNrLWJhc2VkIGFwcHJvYWNoIGlzIHByZWZlcnJlZCBvdmVyIGEKKyAgICAgICAgICAgIHJlY2lwZS1iYXNlZCBhcHByb2FjaCwgd2hpY2ggd291bGQgaGF2ZSB0byBpbnN0YWxsIHRoZSBvdXRwdXQgZnJvbSBldmVyeSB0YXNrLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3RpcHMtYW5kLXRyaWNrcyc+CisgICAgICAgIDx0aXRsZT5UaXBzIGFuZCBUcmlja3M8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGNvZGUgaW4gdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IHN1cHBvcnRzIGluY3JlbWVudGFsIGJ1aWxkcyBpcyBub3QKKyAgICAgICAgICAgIHNpbXBsZSBjb2RlLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByZXNlbnRzIHNvbWUgdGlwcyBhbmQgdHJpY2tzIHRoYXQgaGVscCB5b3Ugd29yayBhcm91bmQKKyAgICAgICAgICAgIGlzc3VlcyByZWxhdGVkIHRvIHNoYXJlZCBzdGF0ZSBjb2RlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2RlYnVnZ2luZyc+CisgICAgICAgICAgICA8dGl0bGU+RGVidWdnaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB0aGluZ3MgZ28gd3JvbmcsIGRlYnVnZ2luZyBuZWVkcyB0byBiZSBzdHJhaWdodGZvcndhcmQuCisgICAgICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgWW9jdG8gUHJvamVjdCBpbmNsdWRlcyBzdHJvbmcgZGVidWdnaW5nCisgICAgICAgICAgICAgICAgdG9vbHM6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPldoZW5ldmVyIGEgc2hhcmVkIHN0YXRlIHBhY2thZ2UgaXMgd3JpdHRlbiBvdXQsIHNvIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgPGZpbGVuYW1lPi5zaWdpbmZvPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcHJhY3RpY2UgcmVzdWx0cyBpbiBhIHBpY2tsZWQgUHl0aG9uIGRhdGFiYXNlIG9mIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldGFkYXRhIHRoYXQgd2VudCBpbnRvIGNyZWF0aW5nIHRoZSBoYXNoIGZvciBhIGdpdmVuIHNoYXJlZCBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdSBydW4gQml0QmFrZSB3aXRoIHRoZSA8ZmlsZW5hbWU+LS1kdW1wLXNpZ25hdHVyZXM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgKG9yIDxmaWxlbmFtZT4tUzwvZmlsZW5hbWU+KSBvcHRpb24sIEJpdEJha2UgZHVtcHMgb3V0CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+LnNpZ2luZm88L2ZpbGVuYW1lPiBmaWxlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YW1wIGRpcmVjdG9yeSBmb3IgZXZlcnkgdGFzayBpdCB3b3VsZCBoYXZlIGV4ZWN1dGVkIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHBhY2thZ2UuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGVyZSBpcyBhIDxmaWxlbmFtZT5iaXRiYWtlLWRpZmZzaWdzPC9maWxlbmFtZT4gY29tbWFuZCB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjYW4gcHJvY2VzcyA8ZmlsZW5hbWU+LnNpZ2luZm88L2ZpbGVuYW1lPiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBzcGVjaWZ5IG9uZSBvZiB0aGVzZSBmaWxlcywgQml0QmFrZSBkdW1wcyBvdXQgdGhlIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgdHdvIGZpbGVzLCBCaXRCYWtlIGNvbXBhcmVzIHRoZSB0d28gZmlsZXMgYW5kIGR1bXBzIG91dAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHR3by4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbW9yZSBlYXNpbHkgaGVscHMgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiAiV2hhdAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCBiZXR3ZWVuIFggYW5kIFk/IjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2ludmFsaWRhdGluZy1zaGFyZWQtc3RhdGUnPgorICAgICAgICAgICAgPHRpdGxlPkludmFsaWRhdGluZyBTaGFyZWQgU3RhdGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIGNoZWNrc3VtcyBhbmQgc2hhcmVkIHN0YXRlCisgICAgICAgICAgICAgICAgY2FjaGUgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSByZWJ1aWxkaW5nIHRhc2tzLgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhpcyBzY2hlbWUgaXMga25vd24gYXMgInNoYXJlZCBzdGF0ZSBjb2RlLiIKKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgd2l0aCBhbGwgc2NoZW1lcywgdGhpcyBvbmUgaGFzIHNvbWUgZHJhd2JhY2tzLgorICAgICAgICAgICAgICAgIEl0IGlzIHBvc3NpYmxlIHRoYXQgeW91IGNvdWxkIG1ha2UgaW1wbGljaXQgY2hhbmdlcyB0byB5b3VyCisgICAgICAgICAgICAgICAgY29kZSB0aGF0IHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMgZG8gbm90IHRha2UgaW50bworICAgICAgICAgICAgICAgIGFjY291bnQuCisgICAgICAgICAgICAgICAgVGhlc2UgaW1wbGljaXQgY2hhbmdlcyBhZmZlY3QgYSB0YXNrJ3Mgb3V0cHV0IGJ1dCBkbyBub3QgdHJpZ2dlcgorICAgICAgICAgICAgICAgIHRoZSBzaGFyZWQgc3RhdGUgY29kZSBpbnRvIHJlYnVpbGRpbmcgYSByZWNpcGUuCisgICAgICAgICAgICAgICAgQ29uc2lkZXIgYW4gZXhhbXBsZSBkdXJpbmcgd2hpY2ggYSB0b29sIGNoYW5nZXMgaXRzIG91dHB1dC4KKyAgICAgICAgICAgICAgICBBc3N1bWUgdGhhdCB0aGUgb3V0cHV0IG9mIDxmaWxlbmFtZT5ycG1kZXBzPC9maWxlbmFtZT4gY2hhbmdlcy4KKyAgICAgICAgICAgICAgICBUaGUgcmVzdWx0IG9mIHRoZSBjaGFuZ2Ugc2hvdWxkIGJlIHRoYXQgYWxsIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlPC9maWxlbmFtZT4gYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2Vfd3JpdGVfcnBtPC9maWxlbmFtZT4gc2hhcmVkIHN0YXRlIGNhY2hlCisgICAgICAgICAgICAgICAgaXRlbXMgYmVjb21lIGludmFsaWQuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgYmVjYXVzZSB0aGUgY2hhbmdlIHRvIHRoZSBvdXRwdXQgaXMKKyAgICAgICAgICAgICAgICBleHRlcm5hbCB0byB0aGUgY29kZSBhbmQgdGhlcmVmb3JlIGltcGxpY2l0LAorICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIHNoYXJlZCBzdGF0ZSBjYWNoZSBpdGVtcyBkbyBub3QgYmVjb21lCisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZWQuCisgICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgYnVpbGQgcHJvY2VzcyB1c2VzIHRoZSBjYWNoZWQgaXRlbXMgcmF0aGVyCisgICAgICAgICAgICAgICAgdGhhbiBydW5uaW5nIHRoZSB0YXNrIGFnYWluLgorICAgICAgICAgICAgICAgIE9idmlvdXNseSwgdGhlc2UgdHlwZXMgb2YgaW1wbGljaXQgY2hhbmdlcyBjYW4gY2F1c2UgcHJvYmxlbXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIGF2b2lkIHRoZXNlIHByb2JsZW1zIGR1cmluZyB0aGUgYnVpbGQsIHlvdSBuZWVkIHRvCisgICAgICAgICAgICAgICAgdW5kZXJzdGFuZCB0aGUgZWZmZWN0cyBvZiBhbnkgY2hhbmdlcyB5b3UgbWFrZS4KKyAgICAgICAgICAgICAgICBSZWFsaXplIHRoYXQgY2hhbmdlcyB5b3UgbWFrZSBkaXJlY3RseSB0byBhIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgYXJlIGF1dG9tYXRpY2FsbHkgZmFjdG9yZWQgaW50byB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb24uCisgICAgICAgICAgICAgICAgVGh1cywgdGhlc2UgZXhwbGljaXQgY2hhbmdlcyBpbnZhbGlkYXRlIHRoZSBhc3NvY2lhdGVkIGFyZWEgb2YKKyAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUgY2FjaGUuCisgICAgICAgICAgICAgICAgSG93ZXZlciwgeW91IG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGltcGxpY2l0IGNoYW5nZXMgdGhhdAorICAgICAgICAgICAgICAgIGFyZSBub3Qgb2J2aW91cyBjaGFuZ2VzIHRvIHRoZSBjb2RlIGFuZCBjb3VsZCBhZmZlY3QgdGhlIG91dHB1dAorICAgICAgICAgICAgICAgIG9mIGEgZ2l2ZW4gdGFzay4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgV2hlbiB5b3UgaWRlbnRpZnkgYW4gaW1wbGljaXQgY2hhbmdlLCB5b3UgY2FuIGVhc2lseSB0YWtlIHN0ZXBzCisgICAgICAgICAgICAgICAgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIGZvcmNlIHRoZSB0YXNrcyB0byBydW4uCisgICAgICAgICAgICAgICAgVGhlIHN0ZXBzIHlvdSBjYW4gdGFrZSBhcmUgYXMgc2ltcGxlIGFzIGNoYW5naW5nIGEgZnVuY3Rpb24ncworICAgICAgICAgICAgICAgIGNvbW1lbnRzIGluIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdG8gaW52YWxpZGF0ZSBwYWNrYWdlIHNoYXJlZCBzdGF0ZSBmaWxlcywgY2hhbmdlCisgICAgICAgICAgICAgICAgdGhlIGNvbW1lbnQgc3RhdGVtZW50cyBvZgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3JlZi10YXNrcy1wYWNrYWdlJz48ZmlsZW5hbWU+ZG9fcGFja2FnZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIG9yIHRoZSBjb21tZW50cyBvZiBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBpdCBjYWxscy4KKyAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgY2hhbmdlIGlzIHB1cmVseSBjb3NtZXRpYywgaXQgY2F1c2VzIHRoZQorICAgICAgICAgICAgICAgIGNoZWNrc3VtIHRvIGJlIHJlY2FsY3VsYXRlZCBhbmQgZm9yY2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgICAgICAgICBzeXN0ZW0gdG8gcnVuIHRoZSB0YXNrIGFnYWluLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBGb3IgYW4gZXhhbXBsZSBvZiBhIGNvbW1pdCB0aGF0IG1ha2VzIGEgY29zbWV0aWMgY2hhbmdlIHRvCisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSBzaGFyZWQgc3RhdGUsIHNlZSB0aGlzCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQuY2dpL3Bva3kvY29tbWl0L21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3M/aWQ9NzM3ZjhiYmI0ZjI3YjQ4MzcwNDdjYjliNGZiZmUwMWRmZGUzNmQ1NCc+Y29tbWl0PC91bGluaz4uCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd4MzInPgorICAgIDx0aXRsZT54MzI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIHgzMiBpcyBhIHByb2Nlc3Nvci1zcGVjaWZpYyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlIChwc0FCSSkgZm9yIHg4Nl82NC4KKyAgICAgICAgQW4gQUJJIGRlZmluZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgYmV0d2VlbiBmdW5jdGlvbnMgaW4gYSBwcm9jZXNzaW5nIGVudmlyb25tZW50LgorICAgICAgICBUaGUgaW50ZXJmYWNlIGRldGVybWluZXMgd2hhdCByZWdpc3RlcnMgYXJlIHVzZWQgYW5kIHdoYXQgdGhlIHNpemVzIGFyZSBmb3IgdmFyaW91cyBDIGRhdGEgdHlwZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFNvbWUgcHJvY2Vzc2luZyBlbnZpcm9ubWVudHMgcHJlZmVyIHVzaW5nIDMyLWJpdCBhcHBsaWNhdGlvbnMgZXZlbiB3aGVuIHJ1bm5pbmcKKyAgICAgICAgb24gSW50ZWwgNjQtYml0IHBsYXRmb3Jtcy4KKyAgICAgICAgQ29uc2lkZXIgdGhlIGkzODYgcHNBQkksIHdoaWNoIGlzIGEgdmVyeSBvbGQgMzItYml0IEFCSSBmb3IgSW50ZWwgNjQtYml0IHBsYXRmb3Jtcy4KKyAgICAgICAgVGhlIGkzODYgcHNBQkkgZG9lcyBub3QgcHJvdmlkZSBlZmZpY2llbnQgdXNlIGFuZCBhY2Nlc3Mgb2YgdGhlIEludGVsIDY0LWJpdCBwcm9jZXNzb3IgcmVzb3VyY2VzLAorICAgICAgICBsZWF2aW5nIHRoZSBzeXN0ZW0gdW5kZXJ1dGlsaXplZC4KKyAgICAgICAgTm93IGNvbnNpZGVyIHRoZSB4ODZfNjQgcHNBQkkuCisgICAgICAgIFRoaXMgQUJJIGlzIG5ld2VyIGFuZCB1c2VzIDY0LWJpdHMgZm9yIGRhdGEgc2l6ZXMgYW5kIHByb2dyYW0gcG9pbnRlcnMuCisgICAgICAgIFRoZSBleHRyYSBiaXRzIGluY3JlYXNlIHRoZSBmb290cHJpbnQgc2l6ZSBvZiB0aGUgcHJvZ3JhbXMsIGxpYnJhcmllcywKKyAgICAgICAgYW5kIGFsc28gaW5jcmVhc2VzIHRoZSBtZW1vcnkgYW5kIGZpbGUgc3lzdGVtIHNpemUgcmVxdWlyZW1lbnRzLgorICAgICAgICBFeGVjdXRpbmcgdW5kZXIgdGhlIHgzMiBwc0FCSSBlbmFibGVzIHVzZXIgcHJvZ3JhbXMgdG8gdXRpbGl6ZSBDUFUgYW5kIHN5c3RlbSByZXNvdXJjZXMKKyAgICAgICAgbW9yZSBlZmZpY2llbnRseSB3aGlsZSBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRoZSBhcHBsaWNhdGlvbnMgbG93LgorICAgICAgICBFeHRyYSBiaXRzIGFyZSB1c2VkIGZvciByZWdpc3RlcnMgYnV0IG5vdCBmb3IgYWRkcmVzc2luZyBtZWNoYW5pc21zLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdzdXBwb3J0Jz4KKyAgICAgICAgPHRpdGxlPlN1cHBvcnQ8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBZb2N0byBQcm9qZWN0IHJlbGVhc2Ugc3VwcG9ydHMgdGhlIGZpbmFsIHNwZWNpZmljYXRpb25zIG9mIHgzMgorICAgICAgICAgICAgcHNBQkkuCisgICAgICAgICAgICBTdXBwb3J0IGZvciB4MzIgcHNBQkkgZXhpc3RzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Zb3UgY2FuIGNyZWF0ZSBwYWNrYWdlcyBhbmQgaW1hZ2VzIGluIHgzMiBwc0FCSSBmb3JtYXQgb24geDg2XzY0IGFyY2hpdGVjdHVyZSB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBzdWNjZXNzZnVsbHkgYnVpbGQgbWFueSByZWNpcGVzIHdpdGggdGhlIHgzMiB0b29sY2hhaW4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gY3JlYXRlIGFuZCBib290IDxmaWxlbmFtZT5jb3JlLWltYWdlLW1pbmltYWw8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2Utc2F0bzwvZmlsZW5hbWU+IGltYWdlcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2NvbXBsZXRpbmcteDMyJz4KKyAgICAgICAgPHRpdGxlPkNvbXBsZXRpbmcgeDMyPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZ1dHVyZSBQbGFucyBmb3IgdGhlIHgzMiBwc0FCSSBpbiB0aGUgWW9jdG8gUHJvamVjdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbmhhbmNlIGFuZCBmaXggdGhlIGZldyByZW1haW5pbmcgcmVjaXBlcyBzbyB0aGV5CisgICAgICAgICAgICAgICAgICAgIHdvcmsgd2l0aCBhbmQgc3VwcG9ydCB4MzIgdG9vbGNoYWlucy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5oYW5jZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIHN1cHBvcnQgZm9yIHgzMiBiaW5hcmllcy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U3VwcG9ydCBsYXJnZXIgaW1hZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmcteDMyLXJpZ2h0LW5vdyc+CisgICAgICAgIDx0aXRsZT5Vc2luZyB4MzIgUmlnaHQgTm93PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byB1c2UgdGhlIHgzMiBzcEFCSToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkVuYWJsZSB0aGUgeDMyIHBzQUJJIHR1bmluZyBmaWxlIGZvciA8ZmlsZW5hbWU+eDg2XzY0PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZXMgYnkgZWRpdGluZyB0aGUgPGZpbGVuYW1lPmNvbmYvbG9jYWwuY29uZjwvZmlsZW5hbWU+IGxpa2UgdGhpczoKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAgTUFDSElORSA9ICJxZW11eDg2LTY0IgorICAgICAgREVGQVVMVFRVTkUgPSAieDg2LTY0LXgzMiIKKyAgICAgIGJhc2VsaWIgPSAiJHtAZC5nZXRWYXIoJ0JBU0VfTElCX3R1bmUtJyArIChkLmdldFZhcignREVGQVVMVFRVTkUnLCBUcnVlKSBcCisgICAgICAgICBvciAnSU5WQUxJRCcpLCBUcnVlKSBvciAnbGliJ30iCisgICAgICAjTUFDSElORSA9ICJnZW5lcmljeDg2IgorICAgICAgI0RFRkFVTFRUVU5FID0gImNvcmUyLTY0LXgzMiIKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcyB1c3VhbCwgdXNlIEJpdEJha2UgdG8gYnVpbGQgYW4gaW1hZ2UgdGhhdCBzdXBwb3J0cyB0aGUgeDMyIHBzQUJJLgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFzIHVzdWFsLCBydW4geW91ciBpbWFnZSB1c2luZyBRRU1VOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2LTY0IGNvcmUtaW1hZ2Utc2F0bworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvc2VjdGlvbj4KKworPHNlY3Rpb24gaWQ9IndheWxhbmQiPgorICAgIDx0aXRsZT5XYXlsYW5kPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dheWxhbmRfKGRpc3BsYXlfc2VydmVyX3Byb3RvY29sKSc+V2F5bGFuZDwvdWxpbms+CisgICAgICAgIGlzIGEgY29tcHV0ZXIgZGlzcGxheSBzZXJ2ZXIgcHJvdG9jb2wgdGhhdAorICAgICAgICBwcm92aWRlcyBhIG1ldGhvZCBmb3IgY29tcG9zaXRpbmcgd2luZG93IG1hbmFnZXJzIHRvIGNvbW11bmljYXRlCisgICAgICAgIGRpcmVjdGx5IHdpdGggYXBwbGljYXRpb25zIGFuZCB2aWRlbyBoYXJkd2FyZSBhbmQgZXhwZWN0cyB0aGVtIHRvCisgICAgICAgIGNvbW11bmljYXRlIHdpdGggaW5wdXQgaGFyZHdhcmUgdXNpbmcgb3RoZXIgbGlicmFyaWVzLgorICAgICAgICBVc2luZyBXYXlsYW5kIHdpdGggc3VwcG9ydGluZyB0YXJnZXRzIGNhbiByZXN1bHQgaW4gYmV0dGVyIGNvbnRyb2wKKyAgICAgICAgb3ZlciBncmFwaGljcyBmcmFtZSByZW5kZXJpbmcgdGhhbiBhbiBhcHBsaWNhdGlvbiBtaWdodCBvdGhlcndpc2UKKyAgICAgICAgYWNoaWV2ZS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgcHJvdmlkZXMgdGhlIFdheWxhbmQgcHJvdG9jb2wgbGlicmFyaWVzIGFuZCB0aGUKKyAgICAgICAgcmVmZXJlbmNlCisgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2F5bGFuZF8oZGlzcGxheV9zZXJ2ZXJfcHJvdG9jb2wpI1dlc3Rvbic+V2VzdG9uPC91bGluaz4KKyAgICAgICAgY29tcG9zaXRvciBhcyBwYXJ0IG9mIGl0cyByZWxlYXNlLgorICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHdoYXQgeW91IG5lZWQgdG8gZG8gdG8gaW1wbGVtZW50IFdheWxhbmQgYW5kCisgICAgICAgIHVzZSB0aGUgY29tcG9zaXRvciB3aGVuIGJ1aWxkaW5nIGFuIGltYWdlIGZvciBhIHN1cHBvcnRpbmcgdGFyZ2V0LgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSJ3YXlsYW5kLXN1cHBvcnQiPgorICAgICAgICA8dGl0bGU+U3VwcG9ydDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgV2F5bGFuZCBwcm90b2NvbCBsaWJyYXJpZXMgYW5kIHRoZSByZWZlcmVuY2UgV2VzdG9uIGNvbXBvc2l0b3IKKyAgICAgICAgICAgIHNoaXAgYXMgaW50ZWdyYXRlZCBwYWNrYWdlcyBpbiB0aGUgPGZpbGVuYW1lPm1ldGE8L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgb2YgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICBTcGVjaWZpY2FsbHksIHlvdSBjYW4gZmluZCB0aGUgcmVjaXBlcyB0aGF0IGJ1aWxkIGJvdGggV2F5bGFuZAorICAgICAgICAgICAgYW5kIFdlc3RvbiBhdCA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBidWlsZCBib3RoIHRoZSBXYXlsYW5kIGFuZCBXZXN0b24gcGFja2FnZXMgZm9yIHVzZSBvbmx5CisgICAgICAgICAgICB3aXRoIHRhcmdldHMgdGhhdCBhY2NlcHQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy93aWtpLyc+TWVzYSAzRCBhbmQgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZTwvdWxpbms+LAorICAgICAgICAgICAgd2hpY2ggaXMgYWxzbyBrbm93biBhcyBNZXNhIERSSS4KKyAgICAgICAgICAgIFRoaXMgaW1wbGllcyB0aGF0IHlvdSBjYW5ub3QgYnVpbGQgYW5kIHVzZSB0aGUgcGFja2FnZXMgaWYgeW91cgorICAgICAgICAgICAgdGFyZ2V0IHVzZXMsIGZvciBleGFtcGxlLCB0aGUKKyAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+IEVtYmVkZGVkIE1lZGlhIGFuZAorICAgICAgICAgICAgR3JhcGhpY3MgRHJpdmVyICg8dHJhZGVtYXJrIGNsYXNzPSdyZWdpc3RlcmVkJz5JbnRlbDwvdHJhZGVtYXJrPgorICAgICAgICAgICAgRU1HRCkgdGhhdCBvdmVycmlkZXMgTWVzYSBEUkkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgIER1ZSB0byBsYWNrIG9mIEVHTCBzdXBwb3J0LCBXZXN0b24gMS4wLjMgd2lsbCBub3QgcnVuIGRpcmVjdGx5IG9uCisgICAgICAgICAgICB0aGUgZW11bGF0ZWQgUUVNVSBoYXJkd2FyZS4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHRoaXMgdmVyc2lvbiBvZiBXZXN0b24gd2lsbCBydW4gdW5kZXIgWCBlbXVsYXRpb24gd2l0aG91dAorICAgICAgICAgICAgaXNzdWVzLgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImVuYWJsaW5nLXdheWxhbmQtaW4tYW4taW1hZ2UiPgorICAgICAgICA8dGl0bGU+RW5hYmxpbmcgV2F5bGFuZCBpbiBhbiBJbWFnZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBlbmFibGUgV2F5bGFuZCwgeW91IG5lZWQgdG8gZW5hYmxlIGl0IHRvIGJlIGJ1aWx0IGFuZCBlbmFibGUKKyAgICAgICAgICAgIGl0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBpbWFnZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJlbmFibGUtYnVpbGRpbmciPgorICAgICAgICAgICAgPHRpdGxlPkJ1aWxkaW5nPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gY2F1c2UgTWVzYSB0byBidWlsZCB0aGUgPGZpbGVuYW1lPndheWxhbmQtZWdsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBwbGF0Zm9ybSBhbmQgV2VzdG9uIHRvIGJ1aWxkIFdheWxhbmQgd2l0aCBLZXJuZWwgTW9kZQorICAgICAgICAgICAgICAgIFNldHRpbmcKKyAgICAgICAgICAgICAgICAoPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLmFyY2hsaW51eC5vcmcvaW5kZXgucGhwL0tlcm5lbF9Nb2RlX1NldHRpbmcnPktNUzwvdWxpbms+KQorICAgICAgICAgICAgICAgIHN1cHBvcnQsIGluY2x1ZGUgdGhlICJ3YXlsYW5kIiBmbGFnIGluIHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InZhci1ESVNUUk9fRkVBVFVSRVMiPjxmaWxlbmFtZT5ESVNUUk9fRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB3YXlsYW5kIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgSWYgWDExIGhhcyBiZWVuIGVuYWJsZWQgZWxzZXdoZXJlLCBXZXN0b24gd2lsbCBidWlsZCBXYXlsYW5kCisgICAgICAgICAgICAgICAgd2l0aCBYMTEgc3VwcG9ydAorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9ImVuYWJsZS1pbnN0YWxsYXRpb24taW4tYW4taW1hZ2UiPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGxpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBpbnN0YWxsIHRoZSBXYXlsYW5kIGZlYXR1cmUgaW50byBhbiBpbWFnZSwgeW91IG11c3QKKyAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMJz48ZmlsZW5hbWU+Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc3RhdGVtZW50IGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICJ3YXlsYW5kIHdlc3RvbiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icnVubmluZy13ZXN0b24iPgorICAgICAgICA8dGl0bGU+UnVubmluZyBXZXN0b248L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG8gcnVuIFdlc3RvbiBpbnNpZGUgWDExLCBlbmFibGluZyBpdCBhcyBkZXNjcmliZWQgZWFybGllciBhbmQKKyAgICAgICAgICAgIGJ1aWxkaW5nIGEgU2F0byBpbWFnZSBpcyBzdWZmaWNpZW50LgorICAgICAgICAgICAgSWYgeW91IGFyZSBydW5uaW5nIHlvdXIgaW1hZ2UgdW5kZXIgU2F0bywgYSBXZXN0b24gTGF1bmNoZXIgYXBwZWFycworICAgICAgICAgICAgaW4gdGhlICJVdGlsaXR5IiBjYXRlZ29yeS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gV2VzdG9uIHRocm91Z2ggdGhlIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgaW50ZXJwcmV0b3IgKENMSSksIHdoaWNoIGlzIGJldHRlciBzdWl0ZWQgZm9yIGRldmVsb3BtZW50IHdvcmsuCisgICAgICAgICAgICBUbyBydW4gV2VzdG9uIHVuZGVyIHRoZSBDTEksIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgYWZ0ZXIKKyAgICAgICAgICAgIHlvdXIgaW1hZ2UgaXMgYnVpbHQ6CisgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJ1biB0aGVzZSBjb21tYW5kcyB0byBleHBvcnQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlhER19SVU5USU1FX0RJUjwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIG1rZGlyIC1wIC90bXAvJFVTRVItd2VzdG9uCisgICAgIGNobW9kIDA3MDAgL3RtcC8kVVNFUi13ZXN0b24KKyAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vdG1wLyRVU0VSLXdlc3RvbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkxhdW5jaCBXZXN0b24gaW4gdGhlIHNoZWxsOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHdlc3RvbgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+PC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ibGljZW5zZXMiPgorICAgIDx0aXRsZT5MaWNlbnNlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisgICAgICAgIHRyYWNrcyBjaGFuZ2VzIHRvIGxpY2Vuc2luZyB0ZXh0LgorICAgICAgICBUaGUgc2VjdGlvbiBhbHNvIGRlc2NyaWJlcyBob3cgdG8gZW5hYmxlIGNvbW1lcmNpYWxseSBsaWNlbnNlZCByZWNpcGVzLAorICAgICAgICB3aGljaCBieSBkZWZhdWx0IGFyZSBkaXNhYmxlZC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGluZm9ybWF0aW9uIHRoYXQgY2FuIGhlbHAgeW91IG1haW50YWluIGNvbXBsaWFuY2Ugd2l0aCB2YXJpb3VzIG9wZW4KKyAgICAgICAgc291cmNlIGxpY2Vuc2luZyBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgcHJvZHVjdCwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjbWFpbnRhaW5pbmctb3Blbi1zb3VyY2UtbGljZW5zZS1jb21wbGlhbmNlLWR1cmluZy15b3VyLXByb2R1Y3RzLWxpZmVjeWNsZSc+TWFpbnRhaW5pbmcgT3BlbiBTb3VyY2UgTGljZW5zZSBDb21wbGlhbmNlIER1cmluZyBZb3VyIFByb2plY3QncyBMaWZlY3ljbGU8L3VsaW5rPiIgc2VjdGlvbgorICAgICAgICBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9InVzaW5ncG9reS1jb25maWd1cmluZy1MSUNfRklMRVNfQ0hLU1VNIj4KKyAgICAgICAgPHRpdGxlPlRyYWNraW5nIExpY2Vuc2UgQ2hhbmdlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgbGljZW5zZSBvZiBhbiB1cHN0cmVhbSBwcm9qZWN0IG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgSW4gb3JkZXIgdG8gcHJldmVudCB0aGVzZSBjaGFuZ2VzIGdvaW5nIHVubm90aWNlZCwgdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+PGxpbmsgbGlua2VuZD0ndmFyLUxJQ19GSUxFU19DSEtTVU0nPkxJQ19GSUxFU19DSEtTVU08L2xpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgIHZhcmlhYmxlIHRyYWNrcyBjaGFuZ2VzIHRvIHRoZSBsaWNlbnNlIHRleHQuIFRoZSBjaGVja3N1bXMgYXJlIHZhbGlkYXRlZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgY29uZmlndXJlIHN0ZXAsIGFuZCBpZiB0aGUgY2hlY2tzdW1zIGRvIG5vdCBtYXRjaCwgdGhlIGJ1aWxkIHdpbGwgZmFpbC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSJ1c2luZ3Bva3ktc3BlY2lmeWluZy1MSUNfRklMRVNfQ0hLU1VNIj4KKyAgICAgICAgICAgIDx0aXRsZT5TcGVjaWZ5aW5nIHRoZSA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IFZhcmlhYmxlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSBjb250YWlucyBjaGVja3N1bXMgb2YgdGhlIGxpY2Vuc2UgdGV4dCBpbiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHNwZWNpZnkgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPjoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PXh4eHggXAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWNmaWxlMS50eHQ7YmVnaW5saW5lPTU7ZW5kbGluZT0yOTttZDU9eXl5eSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpY2ZpbGUyLnR4dDtlbmRsaW5lPTUwO21kNT16enp6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4iCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgYnVpbGQgc3lzdGVtIHVzZXMgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1TJz5TPC9saW5rPjwvZmlsZW5hbWU+IHZhcmlhYmxlIGFzCisgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdoZW4gc2VhcmNoaW5nIGZpbGVzIGxpc3RlZCBpbgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgVGhlIHByZXZpb3VzIGV4YW1wbGUgZW1wbG95cyB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbnNpZGVyIHRoaXMgbmV4dCBleGFtcGxlOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2xzLmM7YmVnaW5saW5lPTU7ZW5kbGluZT0xNjtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNT1iYjE0ZWQzYzRjZGE1ODNhYmM4NTQwMTMwNGI1Y2Q0ZSIKKyAgICAgTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9saWNlbnNlLmh0bWw7bWQ1PTVjOTQ3NjdjZWRiNWQ2OTg3YzkwMmFjODUwZGVkMmM2IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGxpbmUgbG9jYXRlcyBhIGZpbGUgaW4KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+JHtTfS9zcmMvbHMuYzwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBzZWNvbmQgbGluZSByZWZlcnMgdG8gYSBmaWxlIGluCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1XT1JLRElSJz5XT1JLRElSPC9saW5rPjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgTm90ZSB0aGF0IDxmaWxlbmFtZT5MSUNfRklMRVNfQ0hLU1VNPC9maWxlbmFtZT4gdmFyaWFibGUgaXMKKyAgICAgICAgICAgICAgICBtYW5kYXRvcnkgZm9yIGFsbCByZWNpcGVzLCB1bmxlc3MgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ0VOU0U8L2ZpbGVuYW1lPiB2YXJpYWJsZSBpcyBzZXQgdG8gIkNMT1NFRCIuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0idXNpbmdwb2t5LUxJQ19GSUxFU19DSEtTVU0tZXhwbGFuYXRpb24tb2Ytc3ludGF4Ij4KKyAgICAgICAgICAgIDx0aXRsZT5FeHBsYW5hdGlvbiBvZiBTeW50YXg8L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQXMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLCB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDX0ZJTEVTX0NIS1NVTTwvZmlsZW5hbWU+IHZhcmlhYmxlIGxpc3RzIGFsbCB0aGUKKyAgICAgICAgICAgICAgICBpbXBvcnRhbnQgZmlsZXMgdGhhdCBjb250YWluIHRoZSBsaWNlbnNlIHRleHQgZm9yIHRoZSBzb3VyY2UgY29kZS4KKyAgICAgICAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgY2hlY2tzdW0gZm9yIGFuIGVudGlyZSBmaWxlLCBvciBhIHNwZWNpZmljIHNlY3Rpb24gb2YgYQorICAgICAgICAgICAgICAgIGZpbGUgKHNwZWNpZmllZCBieSBiZWdpbm5pbmcgYW5kIGVuZGluZyBsaW5lIG51bWJlcnMgd2l0aCB0aGUgImJlZ2lubGluZSIgYW5kICJlbmRsaW5lIgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsIHJlc3BlY3RpdmVseSkuCisgICAgICAgICAgICAgICAgVGhlIGxhdHRlciBpcyB1c2VmdWwgZm9yIHNvdXJjZSBmaWxlcyB3aXRoIGEgbGljZW5zZSBub3RpY2UgaGVhZGVyLAorICAgICAgICAgICAgICAgIFJFQURNRSBkb2N1bWVudHMsIGFuZCBzbyBmb3J0aC4KKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHVzZSB0aGUgImJlZ2lubGluZSIgcGFyYW1ldGVyLCB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdGV4dCBiZWdpbnMgb24gdGhlCisgICAgICAgICAgICAgICAgZmlyc3QgbGluZSBvZiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICBTaW1pbGFybHksIGlmIHlvdSBkbyBub3QgdXNlIHRoZSAiZW5kbGluZSIgcGFyYW1ldGVyLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxpY2Vuc2UgdGV4dAorICAgICAgICAgICAgICAgIGVuZHMgd2l0aCB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgIm1kNSIgcGFyYW1ldGVyIHN0b3JlcyB0aGUgbWQ1IGNoZWNrc3VtIG9mIHRoZSBsaWNlbnNlIHRleHQuCisgICAgICAgICAgICAgICAgSWYgdGhlIGxpY2Vuc2UgdGV4dCBjaGFuZ2VzIGluIGFueSB3YXkgYXMgY29tcGFyZWQgdG8gdGhpcyBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICB0aGVuIGEgbWlzbWF0Y2ggb2NjdXJzLgorICAgICAgICAgICAgICAgIFRoaXMgbWlzbWF0Y2ggdHJpZ2dlcnMgYSBidWlsZCBmYWlsdXJlIGFuZCBub3RpZmllcyB0aGUgZGV2ZWxvcGVyLgorICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBhbGxvd3MgdGhlIGRldmVsb3BlciB0byByZXZpZXcgYW5kIGFkZHJlc3MgdGhlIGxpY2Vuc2UgdGV4dCBjaGFuZ2VzLgorICAgICAgICAgICAgICAgIEFsc28gbm90ZSB0aGF0IGlmIGEgbWlzbWF0Y2ggb2NjdXJzIGR1cmluZyB0aGUgYnVpbGQsIHRoZSBjb3JyZWN0IG1kNQorICAgICAgICAgICAgICAgIGNoZWNrc3VtIGlzIHBsYWNlZCBpbiB0aGUgYnVpbGQgbG9nIGFuZCBjYW4gYmUgZWFzaWx5IGNvcGllZCB0byB0aGUgcmVjaXBlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBsaW1pdCB0byBob3cgbWFueSBmaWxlcyB5b3UgY2FuIHNwZWNpZnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkxJQ19GSUxFU19DSEtTVU08L2ZpbGVuYW1lPiB2YXJpYWJsZS4KKyAgICAgICAgICAgICAgICBHZW5lcmFsbHksIGhvd2V2ZXIsIGV2ZXJ5IHByb2plY3QgcmVxdWlyZXMgYSBmZXcgc3BlY2lmaWNhdGlvbnMgZm9yIGxpY2Vuc2UgdHJhY2tpbmcuCisgICAgICAgICAgICAgICAgTWFueSBwcm9qZWN0cyBoYXZlIGEgIkNPUFlJTkciIGZpbGUgdGhhdCBzdG9yZXMgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIGFsbCB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgY29kZSBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGlzIHByYWN0aWNlIGFsbG93cyB5b3UgdG8ganVzdCB0cmFjayB0aGUgIkNPUFlJTkciIGZpbGUgYXMgbG9uZyBhcyBpdCBpcyBrZXB0IHVwIHRvIGRhdGUuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDx0aXA+CisgICAgICAgICAgICAgICAgSWYgeW91IHNwZWNpZnkgYW4gZW1wdHkgb3IgaW52YWxpZCAibWQ1IiBwYXJhbWV0ZXIsIEJpdEJha2UgcmV0dXJucyBhbiBtZDUgbWlzLW1hdGNoCisgICAgICAgICAgICAgICAgZXJyb3IgYW5kIGRpc3BsYXlzIHRoZSBjb3JyZWN0ICJtZDUiIHBhcmFtZXRlciB2YWx1ZSBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFRoZSBjb3JyZWN0IHBhcmFtZXRlciBpcyBhbHNvIGNhcHR1cmVkIGluIHRoZSBidWlsZCBsb2cuCisgICAgICAgICAgICA8L3RpcD4KKworICAgICAgICAgICAgPHRpcD4KKyAgICAgICAgICAgICAgICBJZiB0aGUgd2hvbGUgZmlsZSBjb250YWlucyBvbmx5IGxpY2Vuc2UgdGV4dCwgeW91IGRvIG5vdCBuZWVkIHRvIHVzZSB0aGUgImJlZ2lubGluZSIgYW5kCisgICAgICAgICAgICAgICAgImVuZGxpbmUiIHBhcmFtZXRlcnMuCisgICAgICAgICAgICA8L3RpcD4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJlbmFibGluZy1jb21tZXJjaWFsbHktbGljZW5zZWQtcmVjaXBlcyI+CisgICAgICAgIDx0aXRsZT5FbmFibGluZyBDb21tZXJjaWFsbHkgTGljZW5zZWQgUmVjaXBlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBkaXNhYmxlcworICAgICAgICAgICAgY29tcG9uZW50cyB0aGF0IGhhdmUgY29tbWVyY2lhbCBvciBvdGhlciBzcGVjaWFsIGxpY2Vuc2luZworICAgICAgICAgICAgcmVxdWlyZW1lbnRzLgorICAgICAgICAgICAgU3VjaCByZXF1aXJlbWVudHMgYXJlIGRlZmluZWQgb24gYQorICAgICAgICAgICAgcmVjaXBlLWJ5LXJlY2lwZSBiYXNpcyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSBkZWZpbml0aW9uIGluIHRoZSBhZmZlY3RlZCByZWNpcGUuCisgICAgICAgICAgICBGb3IgaW5zdGFuY2UsIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXVnbHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgcmVjaXBlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBIZXJlIGlzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBleGFtcGxlIHRoYXQgY29udGFpbnMgYm90aCBhbgorICAgICAgICAgICAgZXhwbGljaXQgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gKGFmdGVyIHZhcmlhYmxlIGV4cGFuc2lvbik6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1MgPSAibGljZW5zZV8ke1BOfV8ke1BWfSIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgIEluIG9yZGVyIGZvciBhIGNvbXBvbmVudCByZXN0cmljdGVkIGJ5IGEgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPgorCSAgICAgICAgZGVmaW5pdGlvbiB0byBiZSBlbmFibGVkIGFuZCBpbmNsdWRlZCBpbiBhbiBpbWFnZSwgaXQKKwkgICAgICAgIG5lZWRzIHRvIGhhdmUgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgZ2xvYmFsCisJICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGlzIGEgdmFyaWFibGUKKwkgICAgICAgIHR5cGljYWxseSBkZWZpbmVkIGluIHlvdXIgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGVuYWJsZQorCSAgICAgICAgdGhlIDxmaWxlbmFtZT5wb2t5L21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy11Z2x5PC9maWxlbmFtZT4KKwkgICAgICAgIHBhY2thZ2UsIHlvdSBjb3VsZCBhZGQgZWl0aGVyIHRoZSBzdHJpbmcKKwkgICAgICAgICJjb21tZXJjaWFsX2dzdC1wbHVnaW5zLXVnbHkiIG9yIHRoZSBtb3JlIGdlbmVyYWwgc3RyaW5nCisJICAgICAgICAiY29tbWVyY2lhbCIgdG8gPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4uCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0nbGljZW5zZS1mbGFnLW1hdGNoaW5nJz5MaWNlbnNlIEZsYWcgTWF0Y2hpbmc8L2xpbms+IiBzZWN0aW9uCisgICAgICAgICAgICBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIGhvdyA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+IG1hdGNoaW5nIHdvcmtzLgorICAgICAgICAgICAgSGVyZSBpcyB0aGUgZXhhbXBsZToKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorCSAgICAgICAgTGlrZXdpc2UsIHRvIGFkZGl0aW9uYWxseSBlbmFibGUgdGhlIHBhY2thZ2UgYnVpbHQgZnJvbSB0aGUgcmVjaXBlIGNvbnRhaW5pbmcKKwkgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTID0gImxpY2Vuc2VfJHtQTn1fJHtQVn0iPC9maWxlbmFtZT4sIGFuZCBhc3N1bWluZworCSAgICAgICAgdGhhdCB0aGUgYWN0dWFsIHJlY2lwZSBuYW1lIHdhcyA8ZmlsZW5hbWU+ZW1nZF8xLjEwLmJiPC9maWxlbmFtZT4sCisJICAgICAgICB0aGUgZm9sbG93aW5nIHN0cmluZyB3b3VsZCBlbmFibGUgdGhhdCBwYWNrYWdlIGFzIHdlbGwgYXMKKwkgICAgICAgIHRoZSBvcmlnaW5hbCA8ZmlsZW5hbWU+Z3N0LXBsdWdpbnMtdWdseTwvZmlsZW5hbWU+IHBhY2thZ2U6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUID0gImNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtdWdseSBsaWNlbnNlX2VtZ2RfMS4xMCIKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKwkgICAgICAgIEFzIGEgY29udmVuaWVuY2UsIHlvdSBkbyBub3QgbmVlZCB0byBzcGVjaWZ5IHRoZSBjb21wbGV0ZSBsaWNlbnNlIHN0cmluZworCSAgICAgICAgaW4gdGhlIHdoaXRlbGlzdCBmb3IgZXZlcnkgcGFja2FnZS4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFuIGFiYnJldmlhdGVkIGZvcm0sIHdoaWNoIGNvbnNpc3RzCisJICAgICAgICBvZiBqdXN0IHRoZSBmaXJzdCBwb3J0aW9uIG9yIHBvcnRpb25zIG9mIHRoZSBsaWNlbnNlIHN0cmluZyBiZWZvcmUKKwkgICAgICAgIHRoZSBpbml0aWFsIHVuZGVyc2NvcmUgY2hhcmFjdGVyIG9yIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBBIHBhcnRpYWwgc3RyaW5nIHdpbGwgbWF0Y2gKKwkgICAgICAgIGFueSBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUgZmlyc3QKKwkgICAgICAgIHBvcnRpb24gb2YgaXRzIGxpY2Vuc2UuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZworCSAgICAgICAgd2hpdGVsaXN0IHN0cmluZyB3aWxsIGFsc28gbWF0Y2ggYm90aCBvZiB0aGUgcGFja2FnZXMKKwkgICAgICAgIHByZXZpb3VzbHkgbWVudGlvbmVkIGFzIHdlbGwgYXMgYW55IG90aGVyIHBhY2thZ2VzIHRoYXQgaGF2ZQorCSAgICAgICAgbGljZW5zZXMgc3RhcnRpbmcgd2l0aCAiY29tbWVyY2lhbCIgb3IgImxpY2Vuc2UiLgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9ICJjb21tZXJjaWFsIGxpY2Vuc2UiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0ibGljZW5zZS1mbGFnLW1hdGNoaW5nIj4KKyAgICAgICAgICAgIDx0aXRsZT5MaWNlbnNlIEZsYWcgTWF0Y2hpbmc8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKwkJICAgICAgICBMaWNlbnNlIGZsYWcgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBjb250cm9sIHdoYXQgcmVjaXBlcyB0aGUKKyAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGluY2x1ZGVzIGluIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBGdW5kYW1lbnRhbGx5LCB0aGUgYnVpbGQgc3lzdGVtIGF0dGVtcHRzIHRvIG1hdGNoCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgc3RyaW5ncyBmb3VuZCBpbiByZWNpcGVzIGFnYWluc3QKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItTElDRU5TRV9GTEFHU19XSElURUxJU1QnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTX1dISVRFTElTVDwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIHN0cmluZ3MgZm91bmQgaW4gdGhlIHdoaXRlbGlzdC4KKyAgICAgICAgICAgICAgICBBIG1hdGNoIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgYSByZWNpcGUgaW4gdGhlCisgICAgICAgICAgICAgICAgYnVpbGQsIHdoaWxlIGZhaWx1cmUgdG8gZmluZCBhIG1hdGNoIGNhdXNlcyB0aGUgYnVpbGQgc3lzdGVtIHRvCisgICAgICAgICAgICAgICAgZXhjbHVkZSBhIHJlY2lwZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgbGljZW5zZSBmbGFnIG1hdGNoaW5nIGlzIHNpbXBsZS4KKyAgICAgICAgICAgICAgICBIb3dldmVyLCB1bmRlcnN0YW5kaW5nIHNvbWUgY29uY2VwdHMgd2lsbCBoZWxwIHlvdQorICAgICAgICAgICAgICAgIGNvcnJlY3RseSBhbmQgZWZmZWN0aXZlbHkgdXNlIG1hdGNoaW5nLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBCZWZvcmUgYSBmbGFnCisgICAgICAgICAgICAgICAgZGVmaW5lZCBieSBhIHBhcnRpY3VsYXIgcmVjaXBlIGlzIHRlc3RlZCBhZ2FpbnN0IHRoZQorICAgICAgICAgICAgICAgIGNvbnRlbnRzIG9mIHRoZSB3aGl0ZWxpc3QsIHRoZSBleHBhbmRlZCBzdHJpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+XyR7UE59PC9maWxlbmFtZT4gaXMgYXBwZW5kZWQgdG8gdGhlIGZsYWcuCisgICAgICAgICAgICAgICAgVGhpcyBleHBhbnNpb24gbWFrZXMgZWFjaCA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgdmFsdWUgcmVjaXBlLXNwZWNpZmljLgorICAgICAgICAgICAgICAgIEFmdGVyIGV4cGFuc2lvbiwgdGhlIHN0cmluZyBpcyB0aGVuIG1hdGNoZWQgYWdhaW5zdCB0aGUKKyAgICAgICAgICAgICAgICB3aGl0ZWxpc3QuCisgICAgICAgICAgICAgICAgVGh1cywgc3BlY2lmeWluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBpbiByZWNpcGUgImZvbyIsIGZvciBleGFtcGxlLCByZXN1bHRzIGluIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ImNvbW1lcmNpYWxfZm9vIjwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEFuZCwgdG8gY3JlYXRlIGEgbWF0Y2gsIHRoYXQgc3RyaW5nIG11c3QgYXBwZWFyIGluIHRoZQorICAgICAgICAgICAgICAgIHdoaXRlbGlzdC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSnVkaWNpb3VzIHVzZSBvZiB0aGUgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1M8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIHN0cmluZ3MgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHU19XSElURUxJU1Q8L2ZpbGVuYW1lPiB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGFsbG93cyB5b3UgYSBsb3Qgb2YgZmxleGliaWxpdHkgZm9yIGluY2x1ZGluZyBvciBleGNsdWRpbmcKKyAgICAgICAgICAgICAgICByZWNpcGVzIGJhc2VkIG9uIGxpY2Vuc2luZy4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IGNhbiBicm9hZGVuIHRoZSBtYXRjaGluZyBjYXBhYmlsaXRpZXMgYnkKKyAgICAgICAgICAgICAgICB1c2luZyBsaWNlbnNlIGZsYWdzIHN0cmluZyBzdWJzZXRzIGluIHRoZSB3aGl0ZWxpc3QuCisgICAgICAgICAgICAgICAgPG5vdGU+V2hlbiB1c2luZyBhIHN0cmluZyBzdWJzZXQsIGJlIHN1cmUgdG8gdXNlIHRoZSBwYXJ0IG9mCisgICAgICAgICAgICAgICAgICAgIHRoZSBleHBhbmRlZCBzdHJpbmcgdGhhdCBwcmVjZWRlcyB0aGUgYXBwZW5kZWQgdW5kZXJzY29yZQorICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgKGUuZy4gPGZpbGVuYW1lPnVzZXRoaXNwYXJ0XzEuMzwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dXNldGhpc3BhcnRfMS40PC9maWxlbmFtZT4sIGFuZCBzbyBmb3J0aCkuCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzaW1wbHkgc3BlY2lmeWluZyB0aGUgc3RyaW5nICJjb21tZXJjaWFsIiBpbgorICAgICAgICAgICAgICAgIHRoZSB3aGl0ZWxpc3QgbWF0Y2hlcyBhbnkgZXhwYW5kZWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+IGRlZmluaXRpb24gdGhhdCBzdGFydHMgd2l0aAorICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcgImNvbW1lcmNpYWwiIHN1Y2ggYXMgImNvbW1lcmNpYWxfZm9vIiBhbmQKKyAgICAgICAgICAgICAgICAiY29tbWVyY2lhbF9iYXIiLCB3aGljaCBhcmUgdGhlIHN0cmluZ3MgdGhlIGJ1aWxkIHN5c3RlbQorICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGZvciBoeXBvdGhldGljYWwgcmVjaXBlcyBuYW1lZAorICAgICAgICAgICAgICAgICJmb28iIGFuZCAiYmFyIiBhc3N1bWluZyB0aG9zZSByZWNpcGVzIHNpbXBseSBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgICAgIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIExJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGh1cywgeW91IGNhbiBjaG9vc2UgdG8gZXhoYXVzdGl2ZWx5CisgICAgICAgICAgICAgICAgZW51bWVyYXRlIGVhY2ggbGljZW5zZSBmbGFnIGluIHRoZSB3aGl0ZWxpc3QgYW5kCisgICAgICAgICAgICAgICAgYWxsb3cgb25seSBzcGVjaWZpYyByZWNpcGVzIGludG8gdGhlIGltYWdlLCBvcgorICAgICAgICAgICAgICAgIHlvdSBjYW4gdXNlIGEgc3RyaW5nIHN1YnNldCB0aGF0IGNhdXNlcyBhIGJyb2FkZXIgcmFuZ2Ugb2YKKyAgICAgICAgICAgICAgICBtYXRjaGVzIHRvIGFsbG93IGEgcmFuZ2Ugb2YgcmVjaXBlcyBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyBzY2hlbWUgd29ya3MgZXZlbiBpZiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+TElDRU5TRV9GTEFHUzwvZmlsZW5hbWU+IHN0cmluZyBhbHJlYWR5CisgICAgICAgICAgICAgICAgaGFzIDxmaWxlbmFtZT5fJHtQTn08L2ZpbGVuYW1lPiBhcHBlbmRlZC4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGJ1aWxkIHN5c3RlbSB0dXJucyB0aGUgbGljZW5zZSBmbGFnCisgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfMS4yX2ZvbyIgaW50byAiY29tbWVyY2lhbF8xLjJfZm9vX2ZvbyIgYW5kIHdvdWxkCisgICAgICAgICAgICAgICAgbWF0Y2ggYm90aCB0aGUgZ2VuZXJhbCAiY29tbWVyY2lhbCIgYW5kIHRoZSBzcGVjaWZpYworICAgICAgICAgICAgICAgICJjb21tZXJjaWFsXzEuMl9mb28iIHN0cmluZ3MgZm91bmQgaW4gdGhlIHdoaXRlbGlzdCwgYXMKKyAgICAgICAgICAgICAgICBleHBlY3RlZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBvdGhlciBzY2VuYXJpb3M6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPllvdSBjYW4gc3BlY2lmeSBhIHZlcnNpb25lZCBzdHJpbmcgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgc3VjaCBhcyAiY29tbWVyY2lhbF9mb29fMS4yIiBpbiBhICJmb28iIHJlY2lwZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gZXhwYW5kcyB0aGlzIHN0cmluZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfZm9vXzEuMl9mb28iLgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluZSB0aGlzIGxpY2Vuc2UgZmxhZyB3aXRoIGEgd2hpdGVsaXN0IHRoYXQgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RyaW5nICJjb21tZXJjaWFsIiBhbmQgeW91IG1hdGNoIHRoZSBmbGFnIGFsb25nCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFueSBvdGhlciBmbGFnIHRoYXQgc3RhcnRzIHdpdGggdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWwiLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VW5kZXIgdGhlIHNhbWUgY2lyY3Vtc3RhbmNlcywgeW91IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlICJjb21tZXJjaWFsX2ZvbyIgaW4gdGhlIHdoaXRlbGlzdCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gbm90IG9ubHkgbWF0Y2hlcyAiY29tbWVyY2lhbF9mb29fMS4yIiBidXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gbWF0Y2hlcyBhbnkgbGljZW5zZSBmbGFnIHdpdGggdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfZm9vIiwgcmVnYXJkbGVzcyBvZiB0aGUgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+WW91IGNhbiBiZSB2ZXJ5IHNwZWNpZmljIGFuZCB1c2UgYm90aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgYW5kIHZlcnNpb24gcGFydHMgaW4gdGhlIHdoaXRlbGlzdCAoZS5nLgorICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1lcmNpYWxfZm9vXzEuMiIpIHRvIHNwZWNpZmljYWxseSBtYXRjaCBhCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uZWQgcmVjaXBlLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9Im90aGVyLXZhcmlhYmxlcy1yZWxhdGVkLXRvLWNvbW1lcmNpYWwtbGljZW5zZXMiPgorICAgICAgICAgICAgPHRpdGxlPk90aGVyIFZhcmlhYmxlcyBSZWxhdGVkIHRvIENvbW1lcmNpYWwgTGljZW5zZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBPdGhlciBoZWxwZnVsIHZhcmlhYmxlcyByZWxhdGVkIHRvIGNvbW1lcmNpYWwKKyAgICAgICAgICAgICAgICBsaWNlbnNlIGhhbmRsaW5nIGV4aXN0IGFuZCBhcmUgZGVmaW5lZCBpbiB0aGUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYzwvZmlsZW5hbWU+IGZpbGU6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPz0gIiIKKyAgICAgQ09NTUVSQ0lBTF9WSURFT19QTFVHSU5TID89ICIiCisgICAgIENPTU1FUkNJQUxfUVQgPSAiIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlc2UgY29tcG9uZW50cywgeW91IGNhbiBkbyBzbyBieSBtYWtpbmcgc3VyZSB5b3UgaGF2ZQorICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgaW4geW91ciA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+IGNvbmZpZ3VyYXRpb24gZmlsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIENPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA9ICJnc3QtcGx1Z2lucy11Z2x5LW1hZCBcCisgICAgICAgIGdzdC1wbHVnaW5zLXVnbHktbXBlZ2F1ZGlvcGFyc2UiCisgICAgIENPTU1FUkNJQUxfVklERU9fUExVR0lOUyA9ICJnc3QtcGx1Z2lucy11Z2x5LW1wZWcyZGVjIFwKKyAgICAgICAgZ3N0LXBsdWdpbnMtdWdseS1tcGVnc3RyZWFtIGdzdC1wbHVnaW5zLWJhZC1tcGVndmlkZW9wYXJzZSIKKyAgICAgQ09NTUVSQ0lBTF9RVCA/PSAicW1tcCIKKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IGNvbW1lcmNpYWxfZ3N0LXBsdWdpbnMtYmFkIGNvbW1lcmNpYWxfcW1tcCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgY291bGQgYWxzbyBjcmVhdGUgYSBtYXRjaGluZyB3aGl0ZWxpc3QKKyAgICAgICAgICAgICAgICBmb3IgdGhvc2UgY29tcG9uZW50cyB1c2luZyB0aGUgbW9yZSBnZW5lcmFsICJjb21tZXJjaWFsIgorICAgICAgICAgICAgICAgIGluIHRoZSB3aGl0ZWxpc3QsIGJ1dCB0aGF0IHdvdWxkIGFsc28gZW5hYmxlIGFsbCB0aGUKKyAgICAgICAgICAgICAgICBvdGhlciBwYWNrYWdlcyB3aXRoCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUxJQ0VOU0VfRkxBR1MnPjxmaWxlbmFtZT5MSUNFTlNFX0ZMQUdTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgY29udGFpbmluZyAiY29tbWVyY2lhbCIsIHdoaWNoIHlvdSBtYXkgb3IgbWF5IG5vdCB3YW50OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSAiY29tbWVyY2lhbCIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYXVkaW8gYW5kIHZpZGVvIHBsdWctaW5zIGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkNPTU1FUkNJQUxfQVVESU9fUExVR0lOUzwvZmlsZW5hbWU+IGFuZAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5DT01NRVJDSUFMX1ZJREVPX1BMVUdJTlM8L2ZpbGVuYW1lPiBzdGF0ZW1lbnRzCisgICAgICAgICAgICAgICAgb3IgY29tbWVyY2lhbCBRdCBjb21wb25lbnRzIGFzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICB0aGUgPGZpbGVuYW1lPkNPTU1FUkNJQUxfUVQ8L2ZpbGVuYW1lPiBzdGF0ZW1lbnQgKGFsb25nCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgZW5hYmxpbmcgPGZpbGVuYW1lPkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUPC9maWxlbmFtZT4pIGluY2x1ZGVzIHRoZQorICAgICAgICAgICAgICAgIHBsdWctaW5zIG9yIGNvbXBvbmVudHMgaW50byBidWlsdCBpbWFnZXMsIHRodXMgYWRkaW5nCisgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgbWVkaWEgZm9ybWF0cyBvciBjb21wb25lbnRzLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorPC9jaGFwdGVyPgorPCEtLQordmltOiBleHBhbmR0YWIgdHc9ODAgdHM9NAorLS0+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbCBiL2RvY3VtZW50YXRpb24vcmVmLW1hbnVhbC91c2luZ3Bva3kueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhODc5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3JlZi1tYW51YWwvdXNpbmdwb2t5LnhtbApAQCAtMCwwICsxLDEwODggQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd1c2luZ3Bva3knPgorPHRpdGxlPlVzaW5nIHRoZSBZb2N0byBQcm9qZWN0PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGNvbW1vbiB1c2FnZSBmb3IgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIFRoZSBpbmZvcm1hdGlvbiBpcyBpbnRyb2R1Y3RvcnkgaW4gbmF0dXJlIGFzIG90aGVyIG1hbnVhbHMgaW4gdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgZG9jdW1lbnRhdGlvbiBzZXQgcHJvdmlkZSBtb3JlIGRldGFpbHMgb24gaG93IHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICA8L3BhcmE+CisKKzxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktYnVpbGQnPgorICAgIDx0aXRsZT5SdW5uaW5nIGEgQnVpbGQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHN1bW1hcnkgb2YgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uCisgICAgICAgIGZvciBsZXNzIG9idmlvdXMgYXNwZWN0cyBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KKyAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gaG93IHRvIGJ1aWxkIGFuIGltYWdlIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQKKyAgICAgICAgc3lzdGVtLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3FzLWJ1aWxkaW5nLWltYWdlcyc+QnVpbGRpbmcgSW1hZ2VzPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLW92ZXJ2aWV3Jz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkIE92ZXJ2aWV3PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB5b3Ugd2lsbCBuZWVkIHRvIGJ1aWxkIGFuIGltYWdlIHdoZW5ldmVyIHlvdSBjaGFuZ2UgaGFyZHdhcmUKKyAgICAgICAgICAgIHN1cHBvcnQsIGFkZCBvciBjaGFuZ2Ugc3lzdGVtIGxpYnJhcmllcywgb3IgYWRkIG9yIGNoYW5nZSBzZXJ2aWNlcyB0aGF0IGhhdmUgZGVwZW5kZW5jaWVzLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgPGltYWdlb2JqZWN0PgorICAgICAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9idWlsZGluZy1hbi1pbWFnZS5wbmciIGZvcm1hdD0iUE5HIiBhbGlnbj0nY2VudGVyJyBzY2FsZWZpdD0nMScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxjYXB0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPkJ1aWxkaW5nIGFuIEltYWdlPC9wYXJhPgorICAgICAgICAgICAgPC9jYXB0aW9uPgorICAgICAgICA8L21lZGlhb2JqZWN0PgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHlvdSBuZWVkIHRvIGRvIGlzIHNldCB1cCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkCisgICAgICAgICAgICBlbnZpcm9ubWVudCBieSBzb3VyY2luZyBhbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAgIChpLmUuCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgb3IKKyAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvbGluaz4pLgorICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOyBbPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+XQorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPmJ1aWxkX2RpcjwvcmVwbGFjZWFibGU+IGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZCBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyBmb3IgdGhlIGJ1aWxkIC0KKyAgICAgICAgICAgIHRoZSA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgQnVpbGQgRGlyZWN0b3J5LCBpdCBkZWZhdWx0cyB0byBhIGRpcmVjdG9yeQorICAgICAgICAgICAgbmFtZWQgPGZpbGVuYW1lPmJ1aWxkPC9maWxlbmFtZT4gaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgQSBjb21tb24gcHJhY3RpY2UgaXMgdG8gdXNlIGEgZGlmZmVyZW50IEJ1aWxkIERpcmVjdG9yeSBmb3IgZGlmZmVyZW50IHRhcmdldHMuCisgICAgICAgICAgICBGb3IgZXhhbXBsZSwgPGZpbGVuYW1lPn4vYnVpbGQveDg2PC9maWxlbmFtZT4gZm9yIGEgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGFyZ2V0LCBhbmQgPGZpbGVuYW1lPn4vYnVpbGQvYXJtPC9maWxlbmFtZT4gZm9yIGEgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIGVudmlyb25tZW50IGlzIHNldCB1cCwgeW91IGNhbiBidWlsZCBhIHRhcmdldCB1c2luZzoKKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IGlzIHRoZSBuYW1lIG9mIHRoZSByZWNpcGUgeW91IHdhbnQgdG8gYnVpbGQuCisgICAgICAgICAgICBDb21tb24gdGFyZ2V0cyBhcmUgdGhlIGltYWdlcyBpbiA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzPC9maWxlbmFtZT4sIGV0Yy4gYWxsIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+LgorICAgICAgICAgICAgT3IsIHRoZSB0YXJnZXQgY2FuIGJlIHRoZSBuYW1lIG9mIGEgcmVjaXBlIGZvciBhIHNwZWNpZmljIHBpZWNlIG9mIHNvZnR3YXJlIHN1Y2ggYXMKKyAgICAgICAgICAgIEJ1c3lCb3guCisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpbWFnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMsIHNlZSB0aGUKKyAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSJyZWYtaW1hZ2VzIj5JbWFnZXM8L2xpbms+IiBjaGFwdGVyLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPG5vdGU+CisgICAgICAgICAgICBCdWlsZGluZyBhbiBpbWFnZSB3aXRob3V0IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAgICAgICAgICAgIDMgKEdQTHYzKSwgb3Igc2ltaWxhcmx5IGxpY2Vuc2VkLCBjb21wb25lbnRzIGlzIHN1cHBvcnRlZCBmb3IKKyAgICAgICAgICAgIG9ubHkgbWluaW1hbCBhbmQgYmFzZSBpbWFnZXMuCisgICAgICAgICAgICBTZWUgdGhlICI8bGluayBsaW5rZW5kPSdyZWYtaW1hZ2VzJz5JbWFnZXM8L2xpbms+IiBjaGFwdGVyIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICA8L25vdGU+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J2J1aWxkaW5nLWFuLWltYWdlLXVzaW5nLWdwbC1jb21wb25lbnRzJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIGFuIEltYWdlIFVzaW5nIEdQTCBDb21wb25lbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UgdXNpbmcgR1BMIGNvbXBvbmVudHMsIHlvdSBuZWVkIHRvIG1haW50YWluIHlvdXIgb3JpZ2luYWwKKyAgICAgICAgICAgIHNldHRpbmdzIGFuZCBub3Qgc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGFwcGx5aW5nIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgR05VCisgICAgICAgICAgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICAgICAgICAgICAgSWYgeW91IHJlYnVpbGQgdXNpbmcgZGlmZmVyZW50IHZlcnNpb25zIG9mIEdQTCwgZGVwZW5kZW5jeSBlcnJvcnMgbWlnaHQgb2NjdXIKKyAgICAgICAgICAgIGR1ZSB0byBzb21lIGNvbXBvbmVudHMgbm90IGJlaW5nIHJlYnVpbHQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktaW5zdGFsbCc+CisgICAgPHRpdGxlPkluc3RhbGxpbmcgYW5kIFVzaW5nIHRoZSBSZXN1bHQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIE9uY2UgYW4gaW1hZ2UgaGFzIGJlZW4gYnVpbHQsIGl0IG9mdGVuIG5lZWRzIHRvIGJlIGluc3RhbGxlZC4KKyAgICAgICAgVGhlIGltYWdlcyBhbmQga2VybmVscyBidWlsdCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcmUgcGxhY2VkIGluIHRoZQorICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+IGluCisgICAgICAgIDxmaWxlbmFtZSBjbGFzcz0iZGlyZWN0b3J5Ij50bXAvZGVwbG95L2ltYWdlczwvZmlsZW5hbWU+LgorICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHJ1biBwcmUtYnVpbHQgaW1hZ2VzIHN1Y2ggYXMgPGZpbGVuYW1lPnFlbXV4ODY8L2ZpbGVuYW1lPgorICAgICAgICBhbmQgPGZpbGVuYW1lPnFlbXVhcm08L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN1c2luZy1wcmUtYnVpbHQnPkV4YW1wbGUgVXNpbmcgUHJlLUJ1aWx0IEJpbmFyaWVzIGFuZCBRRU1VPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgQXBwbGljYXRpb24gRGV2ZWxvcGVyJ3MgR3VpZGUuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gaW5zdGFsbCB0aGVzZSBpbWFnZXMsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91cgorICAgICAgICBwYXJ0aWN1bGFyIGJvYXJkIG9yIG1hY2hpbmUuCisgICAgPC9wYXJhPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZyc+CisgICAgPHRpdGxlPkRlYnVnZ2luZyBCdWlsZCBGYWlsdXJlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIGV4YWN0IG1ldGhvZCBmb3IgZGVidWdnaW5nIGJ1aWxkIGZhaWx1cmVzIGRlcGVuZHMgb24gdGhlIG5hdHVyZSBvZgorICAgICAgICB0aGUgcHJvYmxlbSBhbmQgb24gdGhlIHN5c3RlbSdzIGFyZWEgZnJvbSB3aGljaCB0aGUgYnVnIG9yaWdpbmF0ZXMuCisgICAgICAgIFN0YW5kYXJkIGRlYnVnZ2luZyBwcmFjdGljZXMgc3VjaCBhcyBjb21wYXJpc29uIGFnYWluc3QgdGhlIGxhc3QKKyAgICAgICAga25vd24gd29ya2luZyB2ZXJzaW9uIHdpdGggZXhhbWluYXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kIHRoZQorICAgICAgICByZS1hcHBsaWNhdGlvbiBvZiBzdGVwcyB0byBpZGVudGlmeSB0aGUgb25lIGNhdXNpbmcgdGhlIHByb2JsZW0gYXJlCisgICAgICAgIHZhbGlkIGZvciB0aGUgWW9jdG8gUHJvamVjdCBqdXN0IGFzIHRoZXkgYXJlIGZvciBhbnkgb3RoZXIgc3lzdGVtLgorICAgICAgICBFdmVuIHRob3VnaCBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGFpbCBldmVyeSBwb3NzaWJsZSBwb3RlbnRpYWwgZmFpbHVyZSwKKyAgICAgICAgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgZ2VuZXJhbCB0aXBzIHRvIGFpZCBpbiBkZWJ1Z2dpbmcuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEEgdXNlZnVsIGZlYXR1cmUgZm9yIGRlYnVnZ2luZyBpcyB0aGUgZXJyb3IgcmVwb3J0aW5nIHRvb2wuCisgICAgICAgIENvbmZpZ3VyaW5nIHRoZSBZb2N0byBQcm9qZWN0IHRvIHVzZSB0aGlzIHRvb2wgY2F1c2VzIHRoZQorICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHByb2R1Y2UgZXJyb3IgcmVwb3J0aW5nIGNvbW1hbmRzIGFzCisgICAgICAgIHBhcnQgb2YgdGhlIGNvbnNvbGUgb3V0cHV0LgorICAgICAgICBZb3UgY2FuIGVudGVyIHRoZSBjb21tYW5kcyBhZnRlciB0aGUgYnVpbGQgY29tcGxldGVzCisgICAgICAgIHRvIGxvZyBlcnJvciBpbmZvcm1hdGlvbgorICAgICAgICBpbnRvIGEgY29tbW9uIGRhdGFiYXNlLCB0aGF0IGNhbiBoZWxwIHlvdSBmaWd1cmUgb3V0IHdoYXQgbWlnaHQgYmUKKyAgICAgICAgZ29pbmcgd3JvbmcuCisgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZW5hYmxlIGFuZCB1c2UgdGhpcyBmZWF0dXJlLCBzZWUgdGhlCisgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN1c2luZy10aGUtZXJyb3ItcmVwb3J0aW5nLXRvb2wnPlVzaW5nIHRoZSBFcnJvciBSZXBvcnRpbmcgVG9vbDwvdWxpbms+IgorICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgRm9yIGRpc2N1c3Npb25zIG9uIGRlYnVnZ2luZywgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcGxhdGRldi1nZGItcmVtb3RlZGVidWcnPkRlYnVnZ2luZyBXaXRoIHRoZSBHTlUgUHJvamVjdCBEZWJ1Z2dlciAoR0RCKSBSZW1vdGVseTwvdWxpbms+IgorICAgICAgICBhbmQKKyAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2FkdC1lY2xpcHNlJz5Xb3JraW5nIHdpdGhpbiBFY2xpcHNlPC91bGluaz4iCisgICAgICAgIHNlY3Rpb25zIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICA8L3BhcmE+CisKKyAgICA8bm90ZT4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gcHJlc2VudHMgbWFueSBleGFtcGxlcyBvZiB0aGUKKyAgICAgICAgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICBZb3UgY2FuIGxlYXJuIGFib3V0IEJpdEJha2UgYnkgcmVhZGluZyB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQkJfVVJMOyNiaXRiYWtlLXVzZXItbWFudWFsJz5CaXRCYWtlIFVzZXIgTWFudWFsPC91bGluaz4uCisgICAgPC9ub3RlPgorCisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmdwb2t5LWRlYnVnZ2luZy10YXNrZmFpbHVyZXMnPgorICAgICAgICA8dGl0bGU+VGFzayBGYWlsdXJlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+VGhlIGxvZyBmaWxlIGZvciBzaGVsbCB0YXNrcyBpcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvXzxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LnBpZDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+IHRhc2sgZm9yIHRoZSBRRU1VIG1pbmltYWwgaW1hZ2UgZm9yIHRoZSB4ODYKKyAgICAgICAgICAgIG1hY2hpbmUgKDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4pIG1pZ2h0IGJlCisgICAgICAgICAgICA8ZmlsZW5hbWU+dG1wL3dvcmsvcWVtdXg4Ni1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvdGVtcC9sb2cuZG9fY29tcGlsZS4yMDgzMDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgVG8gc2VlIHdoYXQKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICBydW5zIHRvIGdlbmVyYXRlIHRoYXQgbG9nLCBsb29rIGF0IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICA8ZmlsZW5hbWU+cnVuLmRvXzxyZXBsYWNlYWJsZT50YXNrbmFtZTwvcmVwbGFjZWFibGU+LnBpZDwvZmlsZW5hbWU+IGZpbGUgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFByZXNlbnRseSwgdGhlIG91dHB1dCBmcm9tIFB5dGhvbiB0YXNrcyBpcyBzZW50IGRpcmVjdGx5IHRvIHRoZSBjb25zb2xlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctdGFza3J1bm5pbmcnPgorICAgICAgICA8dGl0bGU+UnVubmluZyBTcGVjaWZpYyBUYXNrczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBbnkgZ2l2ZW4gcGFja2FnZSBjb25zaXN0cyBvZiBhIHNldCBvZiB0YXNrcy4KKyAgICAgICAgICAgIFRoZSBzdGFuZGFyZCBCaXRCYWtlIGJlaGF2aW9yIGluIG1vc3QgY2FzZXMgaXM6CisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fZmV0Y2g8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb191bnBhY2s8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYXRjaDwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9fY29uZmlndXJlPC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fY29tcGlsZTwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+ZG9faW5zdGFsbDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgPGZpbGVuYW1lPmRvX3BhY2thZ2U8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19wYWNrYWdlX3dyaXRlXyo8L2ZpbGVuYW1lPiwgYW5kCisgICAgICAgICAgICA8ZmlsZW5hbWU+ZG9fYnVpbGQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IHRhc2sgaXMgPGZpbGVuYW1lPmRvX2J1aWxkPC9maWxlbmFtZT4gYW5kIGFueSB0YXNrcworICAgICAgICAgICAgb24gd2hpY2ggaXQgZGVwZW5kcyBidWlsZCBmaXJzdC4KKyAgICAgICAgICAgIFNvbWUgdGFza3MsIHN1Y2ggYXMgPGZpbGVuYW1lPmRvX2RldnNoZWxsPC9maWxlbmFtZT4sIGFyZSBub3QgcGFydAorICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgYnVpbGQgY2hhaW4uCisgICAgICAgICAgICBJZiB5b3Ugd2lzaCB0byBydW4gYSB0YXNrIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQKKyAgICAgICAgICAgIGNoYWluLCB5b3UgY2FuIHVzZSB0aGUgPGZpbGVuYW1lPi1jPC9maWxlbmFtZT4gb3B0aW9uIGluIEJpdEJha2UuCisgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGRldnNoZWxsCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSB3aXNoIHRvIHJlcnVuIGEgdGFzaywgdXNlIHRoZSA8ZmlsZW5hbWU+LWY8L2ZpbGVuYW1lPiBmb3JjZQorICAgICAgICAgICAgb3B0aW9uLgorICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgZm9yY2VzIHJlY29tcGlsYXRpb24gYWZ0ZXIKKyAgICAgICAgICAgIGNoYW5naW5nIGZpbGVzIGluIHRoZSB3b3JrIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIG1hdGNoYm94LWRlc2t0b3AKKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgICAgIC4KKyAgICAgICAgPHJlcGxhY2VhYmxlPm1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgd29yayBkaXJlY3Rvcnk8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgICAgLgorICAgICAkIGJpdGJha2UgbWF0Y2hib3gtZGVza3RvcCAtYyBjb21waWxlIC1mCisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VxdWVuY2UgZmlyc3QgYnVpbGRzIGFuZCB0aGVuIHJlY29tcGlsZXMKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tYXRjaGJveC1kZXNrdG9wPC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGUgbGFzdCBjb21tYW5kIHJlcnVucyBhbGwgdGFza3MgKGJhc2ljYWxseSB0aGUgcGFja2FnaW5nIHRhc2tzKQorICAgICAgICAgICAgYWZ0ZXIgdGhlIGNvbXBpbGUuCisgICAgICAgICAgICBCaXRCYWtlIHJlY29nbml6ZXMgdGhhdCB0aGUgPGZpbGVuYW1lPmRvX2NvbXBpbGU8L2ZpbGVuYW1lPgorICAgICAgICAgICAgdGFzayB3YXMgcmVydW4gYW5kIHRoZXJlZm9yZSB1bmRlcnN0YW5kcyB0aGF0IHRoZSBvdGhlciB0YXNrcworICAgICAgICAgICAgYWxzbyBuZWVkIHRvIGJlIHJ1biBhZ2Fpbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiB2aWV3IGEgbGlzdCBvZiB0YXNrcyBpbiBhIGdpdmVuIHBhY2thZ2UgYnkgcnVubmluZyB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5kb19saXN0dGFza3M8L2ZpbGVuYW1lPiB0YXNrIGFzIGZvbGxvd3M6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBtYXRjaGJveC1kZXNrdG9wIC1jIGxpc3R0YXNrcworICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgVGhlIHJlc3VsdHMgYXBwZWFyIGFzIG91dHB1dCB0byB0aGUgY29uc29sZSBhbmQgYXJlIGFsc28gaW4gdGhlCisgICAgICAgICAgICBmaWxlIDxmaWxlbmFtZT4ke1dPUktESVJ9L3RlbXAvbG9nLmRvX2xpc3R0YXNrczwvZmlsZW5hbWU+LgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkRlcGVuZGVuY3kgR3JhcGhzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNvbWV0aW1lcyBpdCBjYW4gYmUgaGFyZCB0byBzZWUgd2h5IEJpdEJha2Ugd2FudHMgdG8gYnVpbGQKKyAgICAgICAgICAgIG90aGVyIHBhY2thZ2VzIGJlZm9yZSBidWlsZGluZyBhIGdpdmVuIHBhY2thZ2UgeW91IGhhdmUgc3BlY2lmaWVkLgorICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5iaXRiYWtlIC1nIDxyZXBsYWNlYWJsZT50YXJnZXRuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICBjcmVhdGVzIHRoZSA8ZmlsZW5hbWU+cG4tYnVpbGRsaXN0PC9maWxlbmFtZT4sCisgICAgICAgICAgICA8ZmlsZW5hbWU+cG4tZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgIDxmaWxlbmFtZT5wYWNrYWdlLWRlcGVuZHMuZG90PC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgPGZpbGVuYW1lPnRhc2stZGVwZW5kcy5kb3Q8L2ZpbGVuYW1lPiBmaWxlcyBpbiB0aGUgY3VycmVudAorICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgVGhlc2UgZmlsZXMgc2hvdyB3aGF0IHdpbGwgYmUgYnVpbHQgYW5kIHRoZSBwYWNrYWdlIGFuZCB0YXNrCisgICAgICAgICAgICBkZXBlbmRlbmNpZXMsIHdoaWNoIGFyZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwcm9ibGVtcy4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UgLWcgLXUgZGVwZXhwIDxyZXBsYWNlYWJsZT50YXJnZXRuYW1lPC9yZXBsYWNlYWJsZT48L2ZpbGVuYW1lPgorICAgICAgICAgICAgY29tbWFuZCB0byBkaXNwbGF5IHRoZSByZXN1bHRzIGluIGEgbW9yZSBodW1hbi1yZWFkYWJsZSBmb3JtLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctYml0YmFrZSc+CisgICAgICAgIDx0aXRsZT5HZW5lcmFsIEJpdEJha2UgUHJvYmxlbXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgWW91IGNhbiBzZWUgZGVidWcgb3V0cHV0IGZyb20gQml0QmFrZSBieSB1c2luZyB0aGUgPGZpbGVuYW1lPi1EPC9maWxlbmFtZT4gb3B0aW9uLgorICAgICAgICAgICAgVGhlIGRlYnVnIG91dHB1dCBnaXZlcyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgQml0QmFrZQorICAgICAgICAgICAgaXMgZG9pbmcgYW5kIHRoZSByZWFzb24gYmVoaW5kIGl0LgorICAgICAgICAgICAgRWFjaCA8ZmlsZW5hbWU+LUQ8L2ZpbGVuYW1lPiBvcHRpb24geW91IHVzZSBpbmNyZWFzZXMgdGhlIGxvZ2dpbmcgbGV2ZWwuCisgICAgICAgICAgICBUaGUgbW9zdCBjb21tb24gdXNhZ2UgaXMgPGZpbGVuYW1lPi1EREQ8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIG91dHB1dCBmcm9tIDxmaWxlbmFtZT5iaXRiYWtlIC1EREQgLXY8L2ZpbGVuYW1lPiA8cmVwbGFjZWFibGU+dGFyZ2V0bmFtZTwvcmVwbGFjZWFibGU+IGNhbiByZXZlYWwgd2h5CisgICAgICAgICAgICBCaXRCYWtlIGNob3NlIGEgY2VydGFpbiB2ZXJzaW9uIG9mIGEgcGFja2FnZSBvciB3aHkgQml0QmFrZQorICAgICAgICAgICAgcGlja2VkIGEgY2VydGFpbiBwcm92aWRlci4KKyAgICAgICAgICAgIFRoaXMgY29tbWFuZCBjb3VsZCBhbHNvIGhlbHAgeW91IGluIGEgc2l0dWF0aW9uIHdoZXJlIHlvdSB0aGluayBCaXRCYWtlIGRpZCBzb21ldGhpbmcKKyAgICAgICAgICAgIHVuZXhwZWN0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0nZGV2ZWxvcG1lbnQtaG9zdC1zeXN0ZW0taXNzdWVzJz4KKyAgICAgICAgPHRpdGxlPkRldmVsb3BtZW50IEhvc3QgU3lzdGVtIElzc3VlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTb21ldGltZXMgaXNzdWVzIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbSBjYW4gY2F1c2UgeW91cgorICAgICAgICAgICAgYnVpbGQgdG8gZmFpbC4KKyAgICAgICAgICAgIEZvbGxvd2luZyBhcmUga25vd24sIGhvc3Qtc3BlY2lmaWMgcHJvYmxlbXMuCisgICAgICAgICAgICBCZSBzdXJlIHRvIGFsd2F5cyBjb25zdWx0IHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1JFTEVBU0VfTk9URVM7Jz5SZWxlYXNlIE5vdGVzPC91bGluaz4KKyAgICAgICAgICAgIGZvciBhIGxvb2sgYXQgYWxsIHJlbGVhc2UtcmVsYXRlZCBpc3N1ZXMuCisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+PGZpbGVuYW1lPmdsaWJjLWluaXRpYWw8L2ZpbGVuYW1lPiBmYWlscyB0byBidWlsZDwvZW1waGFzaXM+OgorICAgICAgICAgICAgICAgICAgICBJZiB5b3VyIGRldmVsb3BtZW50IGhvc3Qgc3lzdGVtIGhhcyB0aGUgdW5wYXRjaGVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5HTlUgTWFrZSAzLjgyPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIHRoZQorICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGFzayBmYWlscyBmb3IgPGZpbGVuYW1lPmdsaWJjLWluaXRpYWw8L2ZpbGVuYW1lPiBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlIGJ1aWxkLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VHlwaWNhbGx5LCBldmVyeSBkaXN0cmlidXRpb24gdGhhdCBzaGlwcworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+R05VIE1ha2UgMy44MjwvZmlsZW5hbWU+IGFzCisgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGFscmVhZHkgaGFzIHRoZSBwYXRjaGVkIHZlcnNpb24uCisgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgZGlzdHJpYnV0aW9ucywgc3VjaCBhcyBEZWJpYW4sIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPkdOVSBNYWtlIDMuODI8L2ZpbGVuYW1lPiBhcyBhbiBvcHRpb24sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIGlzIHVucGF0Y2hlZC4KKyAgICAgICAgICAgICAgICAgICAgWW91IHdpbGwgc2VlIHRoaXMgZXJyb3Igb24gdGhlc2UgdHlwZXMgb2YgZGlzdHJpYnV0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgU3dpdGNoIHRvIDxmaWxlbmFtZT5HTlUgTWFrZSAzLjgxPC9maWxlbmFtZT4gb3IgcGF0Y2gKKyAgICAgICAgICAgICAgICAgICAgeW91ciA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IHRvIHNvbHZlIHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctYnVpbGRmaWxlJz4KKyAgICAgICAgPHRpdGxlPkJ1aWxkaW5nIHdpdGggTm8gRGVwZW5kZW5jaWVzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUbyBidWlsZCBhIHNwZWNpZmljIHJlY2lwZSAoPGZpbGVuYW1lPi5iYjwvZmlsZW5hbWU+IGZpbGUpLAorICAgICAgICAgICAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZvcm06CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtYiA8cmVwbGFjZWFibGU+c29tZXBhdGg8L3JlcGxhY2VhYmxlPi88cmVwbGFjZWFibGU+c29tZXJlY2lwZTwvcmVwbGFjZWFibGU+LmJiCisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICBUaGlzIGNvbW1hbmQgZm9ybSBkb2VzIG5vdCBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgQ29uc2VxdWVudGx5LCB5b3Ugc2hvdWxkIHVzZSBpdAorICAgICAgICAgICAgb25seSB3aGVuIHlvdSBrbm93IGV4aXN0aW5nIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gbWV0LgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgWW91IGNhbiBhbHNvIHNwZWNpZnkgZnJhZ21lbnRzIG9mIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgICAgICAgICBJbiB0aGlzIGNhc2UsIEJpdEJha2UgY2hlY2tzIGZvciBhIHVuaXF1ZSBtYXRjaC4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZ3Bva3ktZGVidWdnaW5nLXZhcmlhYmxlcyc+CisgICAgICAgIDx0aXRsZT5WYXJpYWJsZXM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSA8ZmlsZW5hbWU+LWU8L2ZpbGVuYW1lPiBCaXRCYWtlIG9wdGlvbiB0bworICAgICAgICAgICAgZGlzcGxheSB0aGUgcGFyc2luZyBlbnZpcm9ubWVudCBmb3IgYSBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBkaXNwbGF5cyB0aGUgZ2VuZXJhbCBwYXJzaW5nIGVudmlyb25tZW50OgorICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLWUKKyAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIFRoaXMgbmV4dCBleGFtcGxlIHNob3dzIHRoZSBwYXJzaW5nIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljCisgICAgICAgICAgICByZWNpcGU6CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSAtZSA8cmVwbGFjZWFibGU+cmVjaXBlbmFtZTwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncmVjaXBlLWxvZ2dpbmctbWVjaGFuaXNtcyc+CisgICAgICAgIDx0aXRsZT5SZWNpcGUgTG9nZ2luZyBNZWNoYW5pc21zPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCZXN0IHByYWN0aWNlcyBleGlzdCB3aGlsZSB3cml0aW5nIHJlY2lwZXMgdGhhdCBib3RoIGxvZyBidWlsZCBwcm9ncmVzcyBhbmQKKyAgICAgICAgICAgIGFjdCBvbiBidWlsZCBjb25kaXRpb25zIHN1Y2ggYXMgd2FybmluZ3MgYW5kIGVycm9ycy4KKyAgICAgICAgICAgIEJvdGggUHl0aG9uIGFuZCBCYXNoIGxhbmd1YWdlIGJpbmRpbmdzIGV4aXN0IGZvciB0aGUgbG9nZ2luZyBtZWNoYW5pc206CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UHl0aG9uOjwvZW1waGFzaXM+IEZvciBQeXRob24gZnVuY3Rpb25zLCBCaXRCYWtlCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHNldmVyYWwgbG9nbGV2ZWxzOiA8ZmlsZW5hbWU+YmIuZmF0YWw8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiLmVycm9yPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYi53YXJuPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYi5ub3RlPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5iYi5wbGFpbjwvZmlsZW5hbWU+LAorICAgICAgICAgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmJiLmRlYnVnPC9maWxlbmFtZT4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CYXNoOjwvZW1waGFzaXM+IEZvciBCYXNoIGZ1bmN0aW9ucywgdGhlIHNhbWUgc2V0CisgICAgICAgICAgICAgICAgICAgIG9mIGxvZ2xldmVscyBleGlzdCBhbmQgYXJlIGFjY2Vzc2VkIHdpdGggYSBzaW1pbGFyIHN5bnRheDoKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJiZmF0YWw8L2ZpbGVuYW1lPiwgPGZpbGVuYW1lPmJiZXJyb3I8L2ZpbGVuYW1lPiwKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJid2FybjwvZmlsZW5hbWU+LCA8ZmlsZW5hbWU+YmJub3RlPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iYnBsYWluPC9maWxlbmFtZT4sIGFuZCA8ZmlsZW5hbWU+YmJkZWJ1ZzwvZmlsZW5hbWU+LjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEZvciBndWlkYW5jZSBvbiBob3cgbG9nZ2luZyBpcyBoYW5kbGVkIGluIGJvdGggUHl0aG9uIGFuZCBCYXNoIHJlY2lwZXMsIHNlZSB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5sb2dnaW5nLmJiY2xhc3M8L2ZpbGVuYW1lPiBmaWxlIGluIHRoZQorICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEvY2xhc3NlczwvZmlsZW5hbWU+IGZvbGRlciBvZiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdsb2dnaW5nLXdpdGgtcHl0aG9uJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2dnaW5nIFdpdGggUHl0aG9uPC90aXRsZT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFdoZW4gY3JlYXRpbmcgcmVjaXBlcyB1c2luZyBQeXRob24gYW5kIGluc2VydGluZyBjb2RlIHRoYXQgaGFuZGxlcyBidWlsZCBsb2dzLAorICAgICAgICAgICAgICAgIGtlZXAgaW4gbWluZCB0aGUgZ29hbCBpcyB0byBoYXZlIGluZm9ybWF0aXZlIGxvZ3Mgd2hpbGUga2VlcGluZyB0aGUgY29uc29sZSBhcworICAgICAgICAgICAgICAgICJzaWxlbnQiIGFzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgIEFsc28sIGlmIHlvdSB3YW50IHN0YXR1cyBtZXNzYWdlcyBpbiB0aGUgbG9nLCB1c2UgdGhlICJkZWJ1ZyIgbG9nbGV2ZWwuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHdyaXR0ZW4gaW4gUHl0aG9uLgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIGhhbmRsZXMgbG9nZ2luZyBmb3IgYSBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgdGhlCisgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRhc2tzIG5lZWRlZCB0byBiZSBydW4uCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtbGlzdHRhc2tzJz48ZmlsZW5hbWU+ZG9fbGlzdHRhc2tzPC9maWxlbmFtZT48L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb246CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBweXRob24gZG9fbGlzdHRhc2tzKCkgeworICAgICAgICAgYmIuZGVidWcoMiwgIlN0YXJ0aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHRhc2sgbGlzdCIpCisgICAgICAgICBpZiBub3Rld29ydGh5X2NvbmRpdGlvbjoKKyAgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgNDcgdGFza3MgdG8gcnVuIikKKyAgICAgICAgIGJiLmRlYnVnKDIsICJHb3QgdG8gcG9pbnQgeHl6IikKKyAgICAgICAgIGlmIHdhcm5pbmdfdHJpZ2dlcjoKKyAgICAgICAgICAgICBiYi53YXJuKCJEZXRlY3RlZCB3YXJuaW5nX3RyaWdnZXIsIHRoaXMgbWlnaHQgYmUgYSBwcm9ibGVtIGxhdGVyLiIpCisgICAgICAgICBpZiByZWNvdmVyYWJsZV9lcnJvcjoKKyAgICAgICAgICAgICBiYi5lcnJvcigiSGl0IHJlY292ZXJhYmxlX2Vycm9yLCB5b3UgcmVhbGx5IG5lZWQgdG8gZml4IHRoaXMhIikKKyAgICAgICAgIGlmIGZhdGFsX2Vycm9yOgorICAgICAgICAgICAgIGJiLmZhdGFsKCJmYXRhbF9lcnJvciBkZXRlY3RlZCwgdW5hYmxlIHRvIHByaW50IHRoZSB0YXNrIGxpc3QiKQorICAgICAgICAgYmIucGxhaW4oIlRoZSB0YXNrcyBwcmVzZW50IGFyZSBhYmMiKQorICAgICAgICAgYmIuZGVidWcoMiwgIkZpbmlzaGVkIGZpZ3VyaW5nIG91dCB0aGUgdGFza2xpc3QiKQorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2xvZ2dpbmctd2l0aC1iYXNoJz4KKyAgICAgICAgICAgIDx0aXRsZT5Mb2dnaW5nIFdpdGggQmFzaDwvdGl0bGU+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBXaGVuIGNyZWF0aW5nIHJlY2lwZXMgdXNpbmcgQmFzaCBhbmQgaW5zZXJ0aW5nIGNvZGUgdGhhdCBoYW5kbGVzIGJ1aWxkCisgICAgICAgICAgICAgICAgbG9ncywgeW91IGhhdmUgdGhlIHNhbWUgZ29hbHMgLSBpbmZvcm1hdGl2ZSB3aXRoIG1pbmltYWwgY29uc29sZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgVGhlIHN5bnRheCB5b3UgdXNlIGZvciByZWNpcGVzIHdyaXR0ZW4gaW4gQmFzaCBpcyBzaW1pbGFyIHRvIHRoYXQgb2YKKyAgICAgICAgICAgICAgICByZWNpcGVzIHdyaXR0ZW4gaW4gUHl0aG9uIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgd3JpdHRlbiBpbiBCYXNoLgorICAgICAgICAgICAgICAgIFRoZSBjb2RlIGxvZ3MgdGhlIHByb2dyZXNzIG9mIHRoZSA8ZmlsZW5hbWU+ZG9fbXlfZnVuY3Rpb248L2ZpbGVuYW1lPiBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGRvX215X2Z1bmN0aW9uKCkgeworICAgICAgICAgYmJkZWJ1ZyAyICJSdW5uaW5nIGRvX215X2Z1bmN0aW9uIgorICAgICAgICAgaWYgWyBleGNlcHRpb25hbF9jb25kaXRpb24gXTsgdGhlbgorICAgICAgICAgICAgIGJibm90ZSAiSGl0IGV4Y2VwdGlvbmFsX2NvbmRpdGlvbiIKKyAgICAgICAgIGZpCisgICAgICAgICBiYmRlYnVnIDIgICJHb3QgdG8gcG9pbnQgeHl6IgorICAgICAgICAgaWYgWyB3YXJuaW5nX3RyaWdnZXIgXTsgdGhlbgorICAgICAgICAgICAgIGJid2FybiAiRGV0ZWN0ZWQgd2FybmluZ190cmlnZ2VyLCB0aGlzIG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBsYXRlci4iCisgICAgICAgICBmaQorICAgICAgICAgaWYgWyByZWNvdmVyYWJsZV9lcnJvciBdOyB0aGVuCisgICAgICAgICAgICAgYmJlcnJvciAiSGl0IHJlY292ZXJhYmxlX2Vycm9yLCBjb3JyZWN0aW5nIgorICAgICAgICAgZmkKKyAgICAgICAgIGlmIFsgZmF0YWxfZXJyb3IgXTsgdGhlbgorICAgICAgICAgICAgIGJiZmF0YWwgImZhdGFsX2Vycm9yIGRldGVjdGVkIgorICAgICAgICAgZmkKKyAgICAgICAgIGJiZGVidWcgMiAiQ29tcGxldGVkIGRvX215X2Z1bmN0aW9uIgorICAgICB9CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VzaW5ncG9reS1kZWJ1Z2dpbmctb3RoZXJzJz4KKyAgICAgICAgPHRpdGxlPk90aGVyIFRpcHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSGVyZSBhcmUgc29tZSBvdGhlciB0aXBzIHRoYXQgeW91IG1pZ2h0IGZpbmQgdXNlZnVsOgorICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+V2hlbiBhZGRpbmcgbmV3IHBhY2thZ2VzLCBpdCBpcyB3b3J0aCB3YXRjaGluZyBmb3IKKyAgICAgICAgICAgICAgICAgICAgdW5kZXNpcmFibGUgaXRlbXMgbWFraW5nIHRoZWlyIHdheSBpbnRvIGNvbXBpbGVyIGNvbW1hbmQgbGluZXMuCisgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB5b3UgZG8gbm90IHdhbnQgcmVmZXJlbmNlcyB0byBsb2NhbCBzeXN0ZW0gZmlsZXMgbGlrZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+L3Vzci9saWIvPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPi91c3IvaW5jbHVkZS88L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPklmIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgPGZpbGVuYW1lPnBzcGxhc2g8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBib290IHNwbGFzaHNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgYWRkIDxmaWxlbmFtZT5wc3BsYXNoPWZhbHNlPC9maWxlbmFtZT4gdG8gIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBwcmV2ZW50cyA8ZmlsZW5hbWU+cHNwbGFzaDwvZmlsZW5hbWU+IGZyb20gbG9hZGluZworICAgICAgICAgICAgICAgICAgICBhbmQgdGh1cyBhbGxvd3MgeW91IHRvIHNlZSB0aGUgY29uc29sZS4KKyAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzd2l0Y2ggb3V0IG9mIHRoZSBzcGxhc2hzY3JlZW4gYnkKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nIHRoZSB2aXJ0dWFsIGNvbnNvbGUgKGUuZy4gRm4rTGVmdCBvciBGbitSaWdodCBvbiBhIFphdXJ1cykuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+Cis8L3NlY3Rpb24+CisKKzxzZWN0aW9uIGlkPSdtYWludGFpbmluZy1idWlsZC1vdXRwdXQtcXVhbGl0eSc+CisgICAgPHRpdGxlPk1haW50YWluaW5nIEJ1aWxkIE91dHB1dCBRdWFsaXR5PC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBNYW55IGZhY3RvcnMgY2FuIGluZmx1ZW5jZSB0aGUgcXVhbGl0eSBvZiBhIGJ1aWxkLgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHVwZ3JhZGUgYSByZWNpcGUgdG8gdXNlIGEgbmV3IHZlcnNpb24gb2YgYW4gdXBzdHJlYW0gc29mdHdhcmUKKyAgICAgICAgcGFja2FnZSBvciB5b3UgZXhwZXJpbWVudCB3aXRoIHNvbWUgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3VidGxlIGNoYW5nZXMKKyAgICAgICAgY2FuIG9jY3VyIHRoYXQgeW91IG1pZ2h0IG5vdCBkZXRlY3QgdW50aWwgbGF0ZXIuCisgICAgICAgIENvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHlvdXIgcmVjaXBlIGlzIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbiBvZiBhbiB1cHN0cmVhbSBwYWNrYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIGEgbmV3IHZlcnNpb24gb2YgYSBwaWVjZSBvZiBzb2Z0d2FyZSBtaWdodCBpbnRyb2R1Y2UgYW4gb3B0aW9uYWwKKyAgICAgICAgZGVwZW5kZW5jeSBvbiBhbm90aGVyIGxpYnJhcnksIHdoaWNoIGlzIGF1dG8tZGV0ZWN0ZWQuCisgICAgICAgIElmIHRoYXQgbGlicmFyeSBoYXMgYWxyZWFkeSBiZWVuIGJ1aWx0IHdoZW4gdGhlIHNvZnR3YXJlIGlzIGJ1aWxkaW5nLAorICAgICAgICB0aGUgc29mdHdhcmUgd2lsbCBsaW5rIHRvIHRoZSBidWlsdCBsaWJyYXJ5IGFuZCB0aGF0IGxpYnJhcnkgd2lsbCBiZSBwdWxsZWQKKyAgICAgICAgaW50byB5b3VyIGltYWdlIGFsb25nIHdpdGggdGhlIG5ldyBzb2Z0d2FyZSBldmVuIGlmIHlvdSBkaWQgbm90IHdhbnQgdGhlCisgICAgICAgIGxpYnJhcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoZQorICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1idWlsZGhpc3RvcnknPjxmaWxlbmFtZT5idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgY2xhc3MgZXhpc3RzIHRvIGhlbHAgeW91IG1haW50YWluCisgICAgICAgIHRoZSBxdWFsaXR5IG9mIHlvdXIgYnVpbGQgb3V0cHV0LgorICAgICAgICBZb3UgY2FuIHVzZSB0aGUgY2xhc3MgdG8gaGlnaGxpZ2h0IHVuZXhwZWN0ZWQgYW5kIHBvc3NpYmx5IHVud2FudGVkCisgICAgICAgIGNoYW5nZXMgaW4gdGhlIGJ1aWxkIG91dHB1dC4KKyAgICAgICAgV2hlbiB5b3UgZW5hYmxlIGJ1aWxkIGhpc3RvcnksIGl0IHJlY29yZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnRlbnRzIG9mCisgICAgICAgIGVhY2ggcGFja2FnZSBhbmQgaW1hZ2UgYW5kIHRoZW4gY29tbWl0cyB0aGF0IGluZm9ybWF0aW9uIHRvIGEgbG9jYWwgR2l0CisgICAgICAgIHJlcG9zaXRvcnkgd2hlcmUgeW91IGNhbiBleGFtaW5lIHRoZSBpbmZvcm1hdGlvbi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgICAgVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ib3cgeW91IGNhbiBlbmFibGUgYW5kIGRpc2FibGUKKyAgICAgICAgICAgICAgIGJ1aWxkIGhpc3Rvcnk8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGJ1aWxkIGhpc3RvcnkgY29udGFpbnMKKyAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SG93IHRvIGxpbWl0IHRoZSBpbmZvcm1hdGlvbiB1c2VkIGZvciBidWlsZCBoaXN0b3J5CisgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkhvdyB0byBleGFtaW5lIHRoZSBidWlsZCBoaXN0b3J5IGZyb20gYm90aCBhCisgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgYW5kIHdlYiBpbnRlcmZhY2U8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+CisKKyAgICA8c2VjdGlvbiBpZD0nZW5hYmxpbmctYW5kLWRpc2FibGluZy1idWlsZC1oaXN0b3J5Jz4KKyAgICAgICAgPHRpdGxlPkVuYWJsaW5nIGFuZCBEaXNhYmxpbmcgQnVpbGQgSGlzdG9yeTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBCdWlsZCBoaXN0b3J5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBUbyBlbmFibGUgaXQsIGFkZCB0aGUgZm9sbG93aW5nIDxmaWxlbmFtZT5JTkhFUklUPC9maWxlbmFtZT4KKyAgICAgICAgICAgIHN0YXRlbWVudCBhbmQgc2V0IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9DT01NSVQnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfQ09NTUlUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZSB0byAiMSIgYXQgdGhlIGVuZCBvZiB5b3VyCisgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4gZmlsZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIElOSEVSSVQgKz0gImJ1aWxkaGlzdG9yeSIKKyAgICAgQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIgorICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgRW5hYmxpbmcgYnVpbGQgaGlzdG9yeSBhcyBwcmV2aW91c2x5IGRlc2NyaWJlZAorICAgICAgICAgICAgY2F1c2VzIHRoZSBidWlsZCBwcm9jZXNzIHRvIGNvbGxlY3QgYnVpbGQKKyAgICAgICAgICAgIG91dHB1dCBpbmZvcm1hdGlvbiBhbmQgY29tbWl0IGl0IHRvIGEgbG9jYWwKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2dpdCc+R2l0PC91bGluaz4gcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIEVuYWJsaW5nIGJ1aWxkIGhpc3RvcnkgaW5jcmVhc2VzIHlvdXIgYnVpbGQgdGltZXMgc2xpZ2h0bHksCisgICAgICAgICAgICAgICAgcGFydGljdWxhcmx5IGZvciBpbWFnZXMsIGFuZCBpbmNyZWFzZXMgdGhlIGFtb3VudCBvZiBkaXNrCisgICAgICAgICAgICAgICAgc3BhY2UgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIGRpc2FibGUgYnVpbGQgaGlzdG9yeSBieSByZW1vdmluZyB0aGUgcHJldmlvdXMgc3RhdGVtZW50cworICAgICAgICAgICAgZnJvbSB5b3VyIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmRpbmctd2hhdC10aGUtYnVpbGQtaGlzdG9yeS1jb250YWlucyc+CisgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kaW5nIFdoYXQgdGhlIEJ1aWxkIEhpc3RvcnkgQ29udGFpbnM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgQnVpbGQgaGlzdG9yeSBpbmZvcm1hdGlvbiBpcyBrZXB0IGluCisgICAgICAgICAgICA8ZmlsZW5hbWU+JHs8L2ZpbGVuYW1lPjxsaW5rIGxpbmtlbmQ9J3Zhci1UT1BESVInPjxmaWxlbmFtZT5UT1BESVI8L2ZpbGVuYW1lPjwvbGluaz48ZmlsZW5hbWU+fS9idWlsZGhpc3Rvcnk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBhcyBkZWZpbmVkIGJ5IHRoZQorICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLUJVSUxESElTVE9SWV9ESVInPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfRElSPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICB2YXJpYWJsZS4KKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBhYmJyZXZpYXRlZCBsaXN0aW5nOgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL2J1aWxkaGlzdG9yeS5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSI0aW4iIC8+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEF0IHRoZSB0b3AgbGV2ZWwsIHRoZXJlIGlzIGEgPGZpbGVuYW1lPm1ldGFkYXRhLXJldnM8L2ZpbGVuYW1lPiBmaWxlCisgICAgICAgICAgICB0aGF0IGxpc3RzIHRoZSByZXZpc2lvbnMgb2YgdGhlIHJlcG9zaXRvcmllcyBmb3IgdGhlIGxheWVycyBlbmFibGVkCisgICAgICAgICAgICB3aGVuIHRoZSBidWlsZCB3YXMgcHJvZHVjZWQuCisgICAgICAgICAgICBUaGUgcmVzdCBvZiB0aGUgZGF0YSBzcGxpdHMgaW50byBzZXBhcmF0ZQorICAgICAgICAgICAgPGZpbGVuYW1lPnBhY2thZ2VzPC9maWxlbmFtZT4sIDxmaWxlbmFtZT5pbWFnZXM8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgIDxmaWxlbmFtZT5zZGs8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcywgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZQorICAgICAgICAgICAgZGVzY3JpYmVkIGJlbG93LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2J1aWxkLWhpc3RvcnktcGFja2FnZS1pbmZvcm1hdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgSGlzdG9yeSBQYWNrYWdlIEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGhpc3RvcnkgZm9yIGVhY2ggcGFja2FnZSBjb250YWlucyBhIHRleHQgZmlsZSB0aGF0IGhhcworICAgICAgICAgICAgICAgIG5hbWUtdmFsdWUgcGFpcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2FnZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS9wYWNrYWdlcy9pNTg2LXBva3ktbGludXgvYnVzeWJveC9idXN5Ym94L2xhdGVzdDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIFBWID0gMS4yMi4xCisgICAgIFBSID0gcjMyCisgICAgIFJQUk9WSURFUyA9CisgICAgIFJERVBFTkRTID0gZ2xpYmMgKD49IDIuMjApIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZworICAgICBSUkVDT01NRU5EUyA9IGJ1c3lib3gtc3lzbG9nIGJ1c3lib3gtdWRoY3BjIHVwZGF0ZS1yYy5kCisgICAgIFBLR1NJWkUgPSA1NDAxNjgKKyAgICAgRklMRVMgPSAvdXNyL2Jpbi8qIC91c3Ivc2Jpbi8qIC91c3IvbGliL2J1c3lib3gvKiAvdXNyL2xpYi9saWIqLnNvLiogXAorICAgICAgICAvZXRjIC9jb20gL3ZhciAvYmluLyogL3NiaW4vKiAvbGliLyouc28uKiAvbGliL3VkZXYvcnVsZXMuZCBcCisgICAgICAgIC91c3IvbGliL3VkZXYvcnVsZXMuZCAvdXNyL3NoYXJlL2J1c3lib3ggL3Vzci9saWIvYnVzeWJveC8qIFwKKyAgICAgICAgL3Vzci9zaGFyZS9waXhtYXBzIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zIC91c3Ivc2hhcmUvaWRsIFwKKyAgICAgICAgL3Vzci9zaGFyZS9vbWYgL3Vzci9zaGFyZS9zb3VuZHMgL3Vzci9saWIvYm9ub2JvL3NlcnZlcnMKKyAgICAgRklMRUxJU1QgPSAvYmluL2J1c3lib3ggL2Jpbi9idXN5Ym94Lm5vc3VpZCAvYmluL2J1c3lib3guc3VpZCAvYmluL3NoIFwKKyAgICAgICAgL2V0Yy9idXN5Ym94LmxpbmtzLm5vc3VpZCAvZXRjL2J1c3lib3gubGlua3Muc3VpZAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBNb3N0IG9mIHRoZXNlIG5hbWUtdmFsdWUgcGFpcnMgY29ycmVzcG9uZCB0byB2YXJpYWJsZXMgdXNlZAorICAgICAgICAgICAgICAgIHRvIHByb2R1Y2UgdGhlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgVGhlIGV4Y2VwdGlvbnMgYXJlIDxmaWxlbmFtZT5GSUxFTElTVDwvZmlsZW5hbWU+LCB3aGljaCBpcyB0aGUKKyAgICAgICAgICAgICAgICBhY3R1YWwgbGlzdCBvZiBmaWxlcyBpbiB0aGUgcGFja2FnZSwgYW5kCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPlBLR1NJWkU8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIHRvdGFsIHNpemUgb2YgZmlsZXMKKyAgICAgICAgICAgICAgICBpbiB0aGUgcGFja2FnZSBpbiBieXRlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlcmUgaXMgYWxzbyBhIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVjaXBlIGZyb20gd2hpY2ggdGhlCisgICAgICAgICAgICAgICAgcGFja2FnZSBjYW1lIChlLmcuCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJ1aWxkaGlzdG9yeS9wYWNrYWdlcy9pNTg2LXBva3ktbGludXgvYnVzeWJveC9sYXRlc3Q8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBQViA9IDEuMjIuMQorICAgICBQUiA9IHIzMgorICAgICBERVBFTkRTID0gaW5pdHNjcmlwdHMga2Vybi10b29scy1uYXRpdmUgdXBkYXRlLXJjLmQtbmF0aXZlIFwKKyAgICAgICAgdmlydHVhbC9pNTg2LXBva3ktbGludXgtY29tcGlsZXJsaWJzIHZpcnR1YWwvaTU4Ni1wb2t5LWxpbnV4LWdjYyBcCisgICAgICAgIHZpcnR1YWwvbGliYyB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKyAgICAgUEFDS0FHRVMgPSBidXN5Ym94LXB0ZXN0IGJ1c3lib3gtaHR0cGQgYnVzeWJveC11ZGhjcGQgYnVzeWJveC11ZGhjcGMgXAorICAgICAgICBidXN5Ym94LXN5c2xvZyBidXN5Ym94LW1kZXYgYnVzeWJveC1od2Nsb2NrIGJ1c3lib3gtZGJnIFwKKyAgICAgICAgYnVzeWJveC1zdGF0aWNkZXYgYnVzeWJveC1kZXYgYnVzeWJveC1kb2MgYnVzeWJveC1sb2NhbGUgYnVzeWJveAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRmluYWxseSwgZm9yIHRob3NlIHJlY2lwZXMgZmV0Y2hlZCBmcm9tIGEgdmVyc2lvbiBjb250cm9sCisgICAgICAgICAgICAgICAgc3lzdGVtIChlLmcuLCBHaXQpLCBhIGZpbGUgZXhpc3RzIHRoYXQgbGlzdHMgc291cmNlIHJldmlzaW9ucworICAgICAgICAgICAgICAgIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgcmVjaXBlIGFuZCBsaXN0cyB0aGUgYWN0dWFsIHJldmlzaW9ucworICAgICAgICAgICAgICAgIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICBMaXN0ZWQgYW5kIGFjdHVhbCByZXZpc2lvbnMgbWlnaHQgZGlmZmVyIHdoZW4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItU1JDUkVWJz48ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgaXMgc2V0IHRvCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPiR7PGxpbmsgbGlua2VuZD0ndmFyLUFVVE9SRVYnPkFVVE9SRVY8L2xpbms+fTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhc3N1bWluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnkvcGFja2FnZXMvcWVtdXg4Ni1wb2t5LWxpbnV4L2xpbnV4LXlvY3RvL2xhdGVzdF9zcmNyZXY8L2ZpbGVuYW1lPik6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAjIFNSQ1JFVl9tYWNoaW5lID0gIjM4Y2Q1NjBkNTAyMmVkMmRiZDFhYjBkY2E5NjQyZTQ3Yzk4YTBhYTEiCisgICAgIFNSQ1JFVl9tYWNoaW5lID0gIjM4Y2Q1NjBkNTAyMmVkMmRiZDFhYjBkY2E5NjQyZTQ3Yzk4YTBhYTEiCisgICAgICMgU1JDUkVWX21ldGEgPSAiYTIyN2YyMGVmZjA1NmU1MTFkNTA0YjJlNDkwZjM3NzRhYjI2MGQ2ZiIKKyAgICAgU1JDUkVWX21ldGEgPSAiYTIyN2YyMGVmZjA1NmU1MTFkNTA0YjJlNDkwZjM3NzRhYjI2MGQ2ZiIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kIHdpdGggdGhlIDxmaWxlbmFtZT4tYTwvZmlsZW5hbWU+IG9wdGlvbiB0bworICAgICAgICAgICAgICAgIGNvbGxlY3QgdGhlIHN0b3JlZCA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdmFsdWVzCisgICAgICAgICAgICAgICAgZnJvbSBidWlsZCBoaXN0b3J5IGFuZCByZXBvcnQgdGhlbSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IKKyAgICAgICAgICAgICAgICB1c2UgaW4gZ2xvYmFsIGNvbmZpZ3VyYXRpb24gKGUuZy4sCisgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBvciBhIGRpc3RybyBpbmNsdWRlIGZpbGUpIHRvCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgZmxvYXRpbmcgPGZpbGVuYW1lPkFVVE9SRVY8L2ZpbGVuYW1lPiB2YWx1ZXMgdG8gYQorICAgICAgICAgICAgICAgIGZpeGVkIHNldCBvZiByZXZpc2lvbnMuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBzb21lIGV4YW1wbGUgb3V0cHV0IGZyb20gdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBidWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzIC1hCisgICAgICMgaTU4Ni1wb2t5LWxpbnV4CisgICAgIFNSQ1JFVl9wbi1nbGliYyA9ICJiODA3OWRkMGQzNjA2NDhlNGU4ZGU0ODY1NmM1YzM4OTcyNjIxMDcyIgorICAgICBTUkNSRVZfcG4tZ2xpYmMtaW5pdGlhbCA9ICJiODA3OWRkMGQzNjA2NDhlNGU4ZGU0ODY1NmM1YzM4OTcyNjIxMDcyIgorICAgICBTUkNSRVZfcG4tb3BrZy11dGlscyA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorICAgICBTUkNSRVZfcG4ta21vZCA9ICJmZDU2NjM4YWVkM2ZlMTQ3MDE1YmZhMTBlZDRhNWY3NDkxMzAzY2I0IgorICAgICAjIHg4Nl82NC1saW51eAorICAgICBTUkNSRVZfcG4tZ3RrLWRvYy1zdHViLW5hdGl2ZSA9ICIxZGVhMjY2NTkzZWRiNzY2ZDZkODk4Yzc5NDUxZWYxOTNlYjE3Y2ZhIgorICAgICBTUkNSRVZfcG4tZHRjLW5hdGl2ZSA9ICI2NWNjNGQyNzQ4YTJjMmU2ZjI3ZjFjZjM5ZTA3YTVkYmFiZDgwZWJmIgorICAgICBTUkNSRVZfcG4tdXBkYXRlLXJjLmQtbmF0aXZlID0gImVjYTY4MGRkZjI4ZDAyNDk1NDg5NWY1OWEyNDFhNjIyZGQ1NzVjMTEiCisgICAgIFNSQ1JFVl9nbGliY19wbi1jcm9zcy1sb2NhbGVkZWYtbmF0aXZlID0gImI4MDc5ZGQwZDM2MDY0OGU0ZThkZTQ4NjU2YzVjMzg5NzI2MjEwNzIiCisgICAgIFNSQ1JFVl9sb2NhbGVkZWZfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJjODMzMzY3MzQ4ZDM5ZGFkN2JhMDE4OTkwYmZkYWZmYWVjOGU5ZWQzIgorICAgICBTUkNSRVZfcG4tcHJlbGluay1uYXRpdmUgPSAiZmFhMDY5ZGVlYzk5YmY2MTQxOGQwYmFiODMxYzgzZDdjMWI3OTdjYSIKKyAgICAgU1JDUkVWX3BuLW9wa2ctdXRpbHMtbmF0aXZlID0gIjUzMjc0ZjA4NzU2NWZkNDVkODQ1MmM1MzY3OTk3YmE2YTY4MmEzN2EiCisgICAgIFNSQ1JFVl9wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICIyMzM0NWI4ODQ2ZmU0YmQxNjdlZmRmMWJkOGExMjI0YjJiYTlhNWZmIgorICAgICBTUkNSRVZfcG4ta21vZC1uYXRpdmUgPSAiZmQ1NjYzOGFlZDNmZTE0NzAxNWJmYTEwZWQ0YTVmNzQ5MTMwM2NiNCIKKyAgICAgIyBxZW11eDg2LXBva3ktbGludXgKKyAgICAgU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8gPSAiMzhjZDU2MGQ1MDIyZWQyZGJkMWFiMGRjYTk2NDJlNDdjOThhMGFhMSIKKyAgICAgU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8gPSAiYTIyN2YyMGVmZjA1NmU1MTFkNTA0YjJlNDkwZjM3NzRhYjI2MGQ2ZiIKKyAgICAgIyBhbGwtcG9reS1saW51eAorICAgICBTUkNSRVZfcG4tdXBkYXRlLXJjLmQgPSAiZWNhNjgwZGRmMjhkMDI0OTU0ODk1ZjU5YTI0MWE2MjJkZDU3NWMxMSIKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgbm90ZXMgb24gdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzPC9maWxlbmFtZT4gY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5CeSBkZWZhdWx0LCBvbmx5IHZhbHVlcyB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGhhcmRjb2RlZCAodXN1YWxseSB3aGVuIDxmaWxlbmFtZT5BVVRPUkVWPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgdXNlZCkgYXJlIHJlcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPi1hPC9maWxlbmFtZT4gb3B0aW9uIHRvIHNlZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+U1JDUkVWPC9maWxlbmFtZT4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBvdXRwdXQgc3RhdGVtZW50cyBtaWdodCBub3QgaGF2ZSBhbnkgZWZmZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcnJpZGVzIGFyZSBhcHBsaWVkIGVsc2V3aGVyZSBpbiB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT4tZjwvZmlsZW5hbWU+IG9wdGlvbiB0byBhZGQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmZvcmNldmFyaWFibGU8L2ZpbGVuYW1lPiBvdmVycmlkZSB0byBlYWNoIG91dHB1dCBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeW91IG5lZWQgdG8gd29yayBhcm91bmQgdGhpcyByZXN0cmljdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgc2NyaXB0IGRvZXMgYXBwbHkgc3BlY2lhbCBoYW5kbGluZyB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRpbmcgZm9yIG11bHRpcGxlIG1hY2hpbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvd2V2ZXIsIHRoZSBzY3JpcHQgZG9lcyBwbGFjZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCBiZWZvcmUgZWFjaCBzZXQgb2YgdmFsdWVzIHRoYXQgc3BlY2lmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdHJpcGxldCB0byB3aGljaCB0aGV5IGJlbG9uZyBhcyBzaG93biBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuLCA8ZmlsZW5hbWU+aTU4Ni1wb2t5LWxpbnV4PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nYnVpbGQtaGlzdG9yeS1pbWFnZS1pbmZvcm1hdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgSGlzdG9yeSBJbWFnZSBJbmZvcm1hdGlvbjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmaWxlcyBwcm9kdWNlZCBmb3IgZWFjaCBpbWFnZSBhcmUgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmltYWdlLWZpbGVzOjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGRpcmVjdG9yeSBjb250YWluaW5nIHNlbGVjdGVkIGZpbGVzIGZyb20gdGhlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlsZXMgYXJlIGRlZmluZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfSU1BR0VfRklMRVMnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfSU1BR0VfRklMRVM8L2ZpbGVuYW1lPjwvbGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5idWlsZC1pZC50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEh1bWFuLXJlYWRhYmxlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0YWRhdGEgc291cmNlIHJldmlzaW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVsbCBidWlsZCBoZWFkZXIgYXMgcHJpbnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgYnkgQml0QmFrZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT4qLmRvdDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kZW5jeSBncmFwaHMgZm9yIHRoZSBpbWFnZSB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIDxmaWxlbmFtZT5ncmFwaHZpejwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+ZmlsZXMtaW4taW1hZ2UudHh0OjwvZmlsZW5hbWU+CisgCSAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGZpbGVzIGluIHRoZSBpbWFnZSB3aXRoIHBlcm1pc3Npb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIsIGdyb3VwLCBzaXplLCBhbmQgc3ltbGluayBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmltYWdlLWluZm8udHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHRleHQgZmlsZSBjb250YWluaW5nIG5hbWUtdmFsdWUgcGFpcnMgd2l0aCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYWJvdXQgdGhlIGltYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBmb2xsb3dpbmcgbGlzdGluZyBleGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IG5hbWUgb25seS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgb3JkZXJlZCBieSBzaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2VzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyB3aXRoIGZ1bGwgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbnN0YWxsZWQgcGFja2FnZSBpbmZvcm1hdGlvbiBpcyBhYmxlIHRvIGJlIGdhdGhlcmVkIGFuZAorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZCBldmVuIGlmIHBhY2thZ2UgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCBmb3IgdGhlIGZpbmFsCisgICAgICAgICAgICAgICAgICAgIGltYWdlLgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIDxmaWxlbmFtZT5pbWFnZS1pbmZvLnR4dDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgRElTVFJPID0gcG9reQorICAgICBESVNUUk9fVkVSU0lPTiA9IDEuNworICAgICBVU0VSX0NMQVNTRVMgPSBidWlsZHN0YXRzIGltYWdlLW1rbGlicyBpbWFnZS1wcmVsaW5rCisgICAgIElNQUdFX0NMQVNTRVMgPSBpbWFnZV90eXBlcworICAgICBJTUFHRV9GRUFUVVJFUyA9IGRlYnVnLXR3ZWFrcworICAgICBJTUFHRV9MSU5HVUFTID0KKyAgICAgSU1BR0VfSU5TVEFMTCA9IHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcnVuLXBvc3RpbnN0cworICAgICBCQURfUkVDT01NRU5EQVRJT05TID0KKyAgICAgTk9fUkVDT01NRU5EQVRJT05TID0KKyAgICAgUEFDS0FHRV9FWENMVURFID0KKyAgICAgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgPSB3cml0ZV9wYWNrYWdlX21hbmlmZXN0OyBsaWNlbnNlX2NyZWF0ZV9tYW5pZmVzdDsgXAorICAgICAgICB3cml0ZV9pbWFnZV9tYW5pZmVzdCA7IGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9pbWFnZSA7IFwKKyAgICAgICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQgOyBzc2hfYWxsb3dfZW1wdHlfcGFzc3dvcmQ7ICBcCisgICAgICAgIHBvc3RpbnN0X2VuYWJsZV9sb2dnaW5nOyByb290ZnNfdXBkYXRlX3RpbWVzdGFtcCA7IHNzaF9kaXNhYmxlX2Ruc19sb29rdXAgOworICAgICBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EID0gICBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbyA7CisgICAgIElNQUdFU0laRSA9IDY5MDAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgT3RoZXIgdGhhbiA8ZmlsZW5hbWU+SU1BR0VTSVpFPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICAgIHRvdGFsIHNpemUgb2YgdGhlIGZpbGVzIGluIHRoZSBpbWFnZSBpbiBLYnl0ZXMsIHRoZQorICAgICAgICAgICAgICAgIG5hbWUtdmFsdWUgcGFpcnMgYXJlIHZhcmlhYmxlcyB0aGF0IG1heSBoYXZlIGluZmx1ZW5jZWQgdGhlCisgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgVGhpcyBpbmZvcm1hdGlvbiBpcyBvZnRlbiB1c2VmdWwgd2hlbiB5b3UgYXJlIHRyeWluZyB0byBkZXRlcm1pbmUKKyAgICAgICAgICAgICAgICB3aHkgYSBjaGFuZ2UgaW4gdGhlIHBhY2thZ2Ugb3IgZmlsZSBsaXN0aW5ncyBoYXMgb2NjdXJyZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndXNpbmctYnVpbGQtaGlzdG9yeS10by1nYXRoZXItaW1hZ2UtaW5mb3JtYXRpb24tb25seSc+CisgICAgICAgICAgICA8dGl0bGU+VXNpbmcgQnVpbGQgSGlzdG9yeSB0byBHYXRoZXIgSW1hZ2UgSW5mb3JtYXRpb24gT25seTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHlvdSBjYW4gc2VlLCBidWlsZCBoaXN0b3J5IHByb2R1Y2VzIGltYWdlIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgIGluY2x1ZGluZyBkZXBlbmRlbmN5IGdyYXBocywgc28geW91IGNhbiBzZWUgd2h5IHNvbWV0aGluZworICAgICAgICAgICAgICAgIHdhcyBwdWxsZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgSWYgeW91IGFyZSBqdXN0IGludGVyZXN0ZWQgaW4gdGhpcyBpbmZvcm1hdGlvbiBhbmQgbm90CisgICAgICAgICAgICAgICAgaW50ZXJlc3RlZCBpbiBjb2xsZWN0aW5nIHNwZWNpZmljIHBhY2thZ2Ugb3IgU0RLIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgIHlvdSBjYW4gZW5hYmxlIHdyaXRpbmcgb25seSBpbWFnZSBpbmZvcm1hdGlvbiB3aXRob3V0CisgICAgICAgICAgICAgICAgYW55IGhpc3RvcnkgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8geW91cgorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mL2xvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJidWlsZGhpc3RvcnkiCisgICAgIEJVSUxESElTVE9SWV9DT01NSVQgPSAiMCIKKyAgICAgQlVJTERISVNUT1JZX0ZFQVRVUkVTID0gImltYWdlIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBIZXJlLCB5b3Ugc2V0IHRoZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfRkVBVFVSRVMnPjxmaWxlbmFtZT5CVUlMREhJU1RPUllfRkVBVFVSRVM8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB2YXJpYWJsZSB0byB1c2UgdGhlIGltYWdlIGZlYXR1cmUgb25seS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdidWlsZC1oaXN0b3J5LXNkay1pbmZvcm1hdGlvbic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgSGlzdG9yeSBTREsgSW5mb3JtYXRpb248L3RpdGxlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQnVpbGQgaGlzdG9yeSBjb2xsZWN0cyBzaW1pbGFyIGluZm9ybWF0aW9uIG9uIHRoZSBjb250ZW50cworICAgICAgICAgICAgICAgIG9mIFNES3MgKGUuZy4gPGZpbGVuYW1lPm1ldGEtdG9vbGNoYWluPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+Yml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgaW1hZ2VuYW1lPC9maWxlbmFtZT4pCisgICAgICAgICAgICAgICAgYXMgY29tcGFyZWQgdG8gaW5mb3JtYXRpb24gaXQgY29sbGVjdHMgZm9yIGltYWdlcy4KKyAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3MgdGhlIGZpbGVzIHByb2R1Y2VkIGZvciBlYWNoIFNESzoKKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmZpbGVzLWluLXNkay50eHQ6PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBmaWxlcyBpbiB0aGUgU0RLIHdpdGggcGVybWlzc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBvd25lciwgZ3JvdXAsIHNpemUsIGFuZCBzeW1saW5rIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBsaXN0IGluY2x1ZGVzIGJvdGggdGhlIGhvc3QgYW5kIHRhcmdldCBwYXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIFNESy4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPnNkay1pbmZvLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgQSB0ZXh0IGZpbGUgY29udGFpbmluZyBuYW1lLXZhbHVlIHBhaXJzIHdpdGggaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0IHRoZSBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIGZvbGxvd2luZyBsaXN0aW5nIGV4YW1wbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXBwZWFycyB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBvZiB0aGUgPGZpbGVuYW1lPmhvc3Q8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDxmaWxlbmFtZT50YXJnZXQ8L2ZpbGVuYW1lPiBkaXJlY3RvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBwb3J0aW9ucyBvZiB0aGUgU0RLIHRoYXQgcnVuIG9uIHRoZSBob3N0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIHRhcmdldCwgcmVzcGVjdGl2ZWx5OgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmRlcGVuZHMuZG90OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGVuZGVuY3kgZ3JhcGggZm9yIHRoZSBTREsgdGhhdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggPGZpbGVuYW1lPmdyYXBodml6PC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZmlsZW5hbWU+aW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgYnkgbmFtZSBvbmx5LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGZpbGVuYW1lPmluc3RhbGxlZC1wYWNrYWdlLXNpemVzLnR4dDo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIG9yZGVyZWQgYnkgc2l6ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxmaWxlbmFtZT5pbnN0YWxsZWQtcGFja2FnZXMudHh0OjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgd2l0aCBmdWxsIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiA8ZmlsZW5hbWU+c2RrLWluZm8udHh0PC9maWxlbmFtZT46CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBESVNUUk8gPSBwb2t5CisgICAgIERJU1RST19WRVJTSU9OID0gMS4zK3NuYXBzaG90LTIwMTMwMzI3CisgICAgIFNES19OQU1FID0gcG9reS1nbGliYy1pNjg2LWFybQorICAgICBTREtfVkVSU0lPTiA9IDEuMytzbmFwc2hvdAorICAgICBTREtNQUNISU5FID0KKyAgICAgU0RLSU1BR0VfRkVBVFVSRVMgPSBkZXYtcGtncyBkYmctcGtncworICAgICBCQURfUkVDT01NRU5EQVRJT05TID0KKyAgICAgU0RLU0laRSA9IDM1MjcxMgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBPdGhlciB0aGFuIDxmaWxlbmFtZT5TREtTSVpFPC9maWxlbmFtZT4sIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICAgIHRvdGFsIHNpemUgb2YgdGhlIGZpbGVzIGluIHRoZSBTREsgaW4gS2J5dGVzLCB0aGUKKyAgICAgICAgICAgICAgICBuYW1lLXZhbHVlIHBhaXJzIGFyZSB2YXJpYWJsZXMgdGhhdCBtaWdodCBoYXZlIGluZmx1ZW5jZWQgdGhlCisgICAgICAgICAgICAgICAgY29udGVudCBvZiB0aGUgU0RLLgorICAgICAgICAgICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgb2Z0ZW4gdXNlZnVsIHdoZW4geW91IGFyZSB0cnlpbmcgdG8KKyAgICAgICAgICAgICAgICBkZXRlcm1pbmUgd2h5IGEgY2hhbmdlIGluIHRoZSBwYWNrYWdlIG9yIGZpbGUgbGlzdGluZ3MKKyAgICAgICAgICAgICAgICBoYXMgb2NjdXJyZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nZXhhbWluaW5nLWJ1aWxkLWhpc3RvcnktaW5mb3JtYXRpb24nPgorICAgICAgICAgICAgPHRpdGxlPkV4YW1pbmluZyBCdWlsZCBIaXN0b3J5IEluZm9ybWF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgWW91IGNhbiBleGFtaW5lIGJ1aWxkIGhpc3Rvcnkgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBvcgorICAgICAgICAgICAgICAgIGZyb20gYSB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyBzZWUgYW55IGNoYW5nZXMgdGhhdCBoYXZlIG9jY3VycmVkIChhc3N1bWluZyB5b3UgaGF2ZQorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1CVUlMREhJU1RPUllfQ09NTUlUJz48ZmlsZW5hbWU+QlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIjwvZmlsZW5hbWU+PC9saW5rPiksCisgICAgICAgICAgICAgICAgeW91IGNhbiBzaW1wbHkKKyAgICAgICAgICAgICAgICB1c2UgYW55IEdpdCBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byB2aWV3IHRoZSBoaXN0b3J5IG9mCisgICAgICAgICAgICAgICAgYSByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgIEhlcmUgaXMgb25lIG1ldGhvZDoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICAkIGdpdCBsb2cgLXAKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gcmVhbGl6ZSwgaG93ZXZlciwgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIHNob3cKKyAgICAgICAgICAgICAgICBjaGFuZ2VzIHRoYXQgYXJlIG5vdCBzaWduaWZpY2FudCAoZS5nLiBhIHBhY2thZ2UncyBzaXplCisgICAgICAgICAgICAgICAgY2hhbmdpbmcgYnkgYSBmZXcgYnl0ZXMpLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBIGNvbW1hbmQtbGluZSB0b29sIGNhbGxlZCA8ZmlsZW5hbWU+YnVpbGRoaXN0b3J5LWRpZmY8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGRvZXMgZXhpc3QsIHRob3VnaCwgdGhhdCBxdWVyaWVzIHRoZSBHaXQgcmVwb3NpdG9yeSBhbmQgcHJpbnRzIGp1c3QKKyAgICAgICAgICAgICAgICB0aGUgZGlmZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBzaWduaWZpY2FudCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgfi9wb2t5L3Bva3kvc2NyaXB0cy9idWlsZGhpc3RvcnktZGlmZiAuIEhFQUReCisgICAgIENoYW5nZXMgdG8gaW1hZ2VzL3FlbXV4ODZfNjQvZ2xpYmMvY29yZS1pbWFnZS1taW5pbWFsIChmaWxlcy1pbi1pbWFnZS50eHQpOgorICAgICAgICAvZXRjL2Fub3RoZXJwa2cuY29uZiB3YXMgYWRkZWQKKyAgICAgICAgL3NiaW4vYW5vdGhlcnBrZyB3YXMgYWRkZWQKKyAgICAgICAgKiAoaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0KToKKyAgICAgICAgKiAgIGFub3RoZXJwa2cgd2FzIGFkZGVkCisgICAgIENoYW5nZXMgdG8gaW1hZ2VzL3FlbXV4ODZfNjQvZ2xpYmMvY29yZS1pbWFnZS1taW5pbWFsIChpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQpOgorICAgICAgICBhbm90aGVycGtnIHdhcyBhZGRlZAorICAgICBwYWNrYWdlcy9xZW11eDg2XzY0LXBva3ktbGludXgvdjg2ZDogUEFDS0FHRVM6IGFkZGVkICJ2ODZkLWV4dHJhcyIKKyAgICAgICAgKiBQUiBjaGFuZ2VkIGZyb20gInIwIiB0byAicjEiCisgICAgICAgICogUFYgY2hhbmdlZCBmcm9tICIwLjEuMTAiIHRvICIwLjEuMTIiCisgICAgIHBhY2thZ2VzL3FlbXV4ODZfNjQtcG9reS1saW51eC92ODZkL3Y4NmQ6IFBLR1NJWkUgY2hhbmdlZCBmcm9tIDExMDU3OSB0byAxNDQzODEgKCszMCUpCisgICAgICAgICogUFIgY2hhbmdlZCBmcm9tICJyMCIgdG8gInIxIgorICAgICAgICAqIFBWIGNoYW5nZWQgZnJvbSAiMC4xLjEwIiB0byAiMC4xLjEyIgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVG8gc2VlIGNoYW5nZXMgdG8gdGhlIGJ1aWxkIGhpc3RvcnkgdXNpbmcgYSB3ZWIgaW50ZXJmYWNlLCBmb2xsb3cKKyAgICAgICAgICAgICAgICB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlIDxmaWxlbmFtZT5SRUFETUU8L2ZpbGVuYW1lPiBmaWxlIGhlcmUuCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvYnVpbGRoaXN0b3J5LXdlYi8nPjwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBIZXJlIGlzIGEgc2FtcGxlIHNjcmVlbnNob3Qgb2YgdGhlIGludGVyZmFjZToKKyAgICAgICAgICAgICAgICA8aW1hZ2VkYXRhIGZpbGVyZWY9ImZpZ3VyZXMvYnVpbGRoaXN0b3J5LXdlYi5wbmciIGFsaWduPSJjZW50ZXIiIHNjYWxlZml0PSIxIiB3aWR0aD0iMTMwJSIgY29udGVudGRlcHRoPSIxMzAlIiAvPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorPC9zZWN0aW9uPgorCis8c2VjdGlvbiBpZD0nc3BlZWRpbmctdXAtdGhlLWJ1aWxkJz4KKyAgICA8dGl0bGU+U3BlZWRpbmcgVXAgdGhlIEJ1aWxkPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBCdWlsZCB0aW1lIGNhbiBiZSBhbiBpc3N1ZS4KKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJ1aWxkIHN5c3RlbSB1c2VzIHNpbXBsZSBjb250cm9scyB0byB0cnkgYW5kIG1heGltaXplCisgICAgICAgIGJ1aWxkIGVmZmljaWVuY3kuCisgICAgICAgIEluIGdlbmVyYWwsIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKKyAgICAgICAgcmVzdWx0IGluIHRoZSBtb3N0IGVmZmljaWVudCBidWlsZCB0aW1lcyB3aGVuIGRlYWxpbmcgd2l0aCBzaW5nbGUKKyAgICAgICAgc29ja2V0IHN5c3RlbXMgKGkuZS4gYSBzaW5nbGUgQ1BVKS4KKyAgICAgICAgSWYgeW91IGhhdmUgbXVsdGlwbGUgQ1BVcywgeW91IG1pZ2h0IHRyeSBpbmNyZWFzaW5nIHRoZSBkZWZhdWx0CisgICAgICAgIHZhbHVlcyB0byBnYWluIG1vcmUgc3BlZWQuCisgICAgICAgIFNlZSB0aGUgZGVzY3JpcHRpb25zIGluIHRoZSBnbG9zc2FyeSBmb3IgZWFjaCB2YXJpYWJsZSBmb3IgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbjoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItQkJfTlVNQkVSX1RIUkVBRFMnPjxmaWxlbmFtZT5CQl9OVU1CRVJfVEhSRUFEUzwvZmlsZW5hbWU+OjwvbGluaz4KKyAgICAgICAgICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyBCaXRCYWtlIHNpbXVsdGFuZW91c2x5IGV4ZWN1dGVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0JCX1VSTDsjdmFyLUJCX05VTUJFUl9QQVJTRV9USFJFQURTJz48ZmlsZW5hbWU+QkJfTlVNQkVSX1BBUlNFX1RIUkVBRFM8L2ZpbGVuYW1lPjo8L3VsaW5rPgorICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgdGhyZWFkcyBCaXRCYWtlIHVzZXMgZHVyaW5nIHBhcnNpbmcuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0UnPjxmaWxlbmFtZT5QQVJBTExFTF9NQUtFPC9maWxlbmFtZT46PC9saW5rPgorICAgICAgICAgICAgICAgIEV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSA8ZmlsZW5hbWU+bWFrZTwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ncmVmLXRhc2tzLWNvbXBpbGUnPjxmaWxlbmFtZT5kb19jb21waWxlPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGFzayBpbiBvcmRlciB0byBzcGVjaWZ5IHBhcmFsbGVsIGNvbXBpbGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVBBUkFMTEVMX01BS0VJTlNUJz48ZmlsZW5hbWU+UEFSQUxMRUxfTUFLRUlOU1Q8L2ZpbGVuYW1lPjo8L2xpbms+CisgICAgICAgICAgICAgICAgRXh0cmEgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIDxmaWxlbmFtZT5tYWtlPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtdGFza3MtaW5zdGFsbCc+PGZpbGVuYW1lPmRvX2luc3RhbGw8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICB0YXNrIGluIG9yZGVyIHRvIHNwZWNpZnkgcGFyYWxsZWwgaW5zdGFsbGF0aW9uIG9uIHRoZQorICAgICAgICAgICAgICAgIGxvY2FsIGJ1aWxkIGhvc3QuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICBBcyBtZW50aW9uZWQsIHRoZXNlIHZhcmlhYmxlcyBhbGwgc2NhbGUgdG8gdGhlIG51bWJlciBvZiBwcm9jZXNzb3IKKyAgICAgICAgY29yZXMgYXZhaWxhYmxlIG9uIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgIEZvciBzaW5nbGUgc29ja2V0IHN5c3RlbXMsIHRoaXMgYXV0by1zY2FsaW5nIGVuc3VyZXMgdGhhdCB0aGUgYnVpbGQKKyAgICAgICAgc3lzdGVtIGZ1bmRhbWVudGFsbHkgdGFrZXMgYWR2YW50YWdlIG9mIHBvdGVudGlhbCBwYXJhbGxlbCBvcGVyYXRpb25zCisgICAgICAgIGR1cmluZyB0aGUgYnVpbGQgYmFzZWQgb24gdGhlIGJ1aWxkIG1hY2hpbmUncyBjYXBhYmlsaXRpZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICAgIEZvbGxvd2luZyBhcmUgYWRkaXRpb25hbCBmYWN0b3JzIHRoYXQgY2FuIGFmZmVjdCBidWlsZCBzcGVlZDoKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBGaWxlIHN5c3RlbSB0eXBlOgorICAgICAgICAgICAgICAgIFRoZSBmaWxlIHN5c3RlbSB0eXBlIHRoYXQgdGhlIGJ1aWxkIGlzIGJlaW5nIHBlcmZvcm1lZCBvbiBjYW4KKyAgICAgICAgICAgICAgICBhbHNvIGluZmx1ZW5jZSBwZXJmb3JtYW5jZS4KKyAgICAgICAgICAgICAgICBVc2luZyA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGlzIHJlY29tbWVuZGVkIGFzIGNvbXBhcmVkCisgICAgICAgICAgICAgICAgdG8gPGZpbGVuYW1lPmV4dDI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPmV4dDM8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgIGR1ZSB0byA8ZmlsZW5hbWU+ZXh0NDwvZmlsZW5hbWU+IGltcHJvdmVkIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgc3VjaCBhcyBleHRlbnRzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIERpc2FibGluZyB0aGUgdXBkYXRpbmcgb2YgYWNjZXNzIHRpbWUgdXNpbmcKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bm9hdGltZTwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bm9hdGltZTwvZmlsZW5hbWU+IG1vdW50IG9wdGlvbiBwcmV2ZW50cyB0aGUKKyAgICAgICAgICAgICAgICBidWlsZCBzeXN0ZW0gZnJvbSB1cGRhdGluZyBmaWxlIGFuZCBkaXJlY3RvcnkgYWNjZXNzIHRpbWVzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFNldHRpbmcgYSBsb25nZXIgY29tbWl0OgorICAgICAgICAgICAgICAgIFVzaW5nIHRoZSAiY29tbWl0PSIgbW91bnQgb3B0aW9uIGluY3JlYXNlcyB0aGUgaW50ZXJ2YWwKKyAgICAgICAgICAgICAgICBpbiBzZWNvbmRzIGJldHdlZW4gZGlzayBjYWNoZSB3cml0ZXMuCisgICAgICAgICAgICAgICAgQ2hhbmdpbmcgdGhpcyBpbnRlcnZhbCBmcm9tIHRoZSBmaXZlIHNlY29uZCBkZWZhdWx0IHRvCisgICAgICAgICAgICAgICAgc29tZXRoaW5nIGxvbmdlciBpbmNyZWFzZXMgdGhlIHJpc2sgb2YgZGF0YSBsb3NzIGJ1dCBkZWNyZWFzZXMKKyAgICAgICAgICAgICAgICB0aGUgbmVlZCB0byB3cml0ZSB0byB0aGUgZGlzaywgdGh1cyBpbmNyZWFzaW5nIHRoZSBidWlsZAorICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIENob29zaW5nIHRoZSBwYWNrYWdpbmcgYmFja2VuZDoKKyAgICAgICAgICAgICAgICBPZiB0aGUgYXZhaWxhYmxlIHBhY2thZ2luZyBiYWNrZW5kcywgSVBLIGlzIHRoZSBmYXN0ZXN0LgorICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxseSwgc2VsZWN0aW5nIGEgc2luZ3VsYXIgcGFja2FnaW5nIGJhY2tlbmQgYWxzbworICAgICAgICAgICAgICAgIGhlbHBzLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT50bXBmczwvZmlsZW5hbWU+IGZvcgorICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J3Zhci1UTVBESVInPjxmaWxlbmFtZT5UTVBESVI8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBhcyBhIHRlbXBvcmFyeSBmaWxlIHN5c3RlbToKKyAgICAgICAgICAgICAgICBXaGlsZSB0aGlzIGNhbiBoZWxwIHNwZWVkIHVwIHRoZSBidWlsZCwgdGhlIGJlbmVmaXRzIGFyZQorICAgICAgICAgICAgICAgIGxpbWl0ZWQgZHVlIHRvIHRoZSBjb21waWxlciB1c2luZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4tcGlwZTwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgIFRoZSBidWlsZCBzeXN0ZW0gZ29lcyB0byBzb21lIGxlbmd0aHMgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3luYygpPC9maWxlbmFtZT4gY2FsbHMgaW50byB0aGUKKyAgICAgICAgICAgICAgICBmaWxlIHN5c3RlbSBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgaWYgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQKKyAgICAgICAgICAgICAgICBmYWlsdXJlLCB0aGUKKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgY29udGVudHMgY291bGQgZWFzaWx5IGJlIHJlYnVpbHQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgSW5oZXJpdGluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSdyZWYtY2xhc3Nlcy1ybS13b3JrJz48ZmlsZW5hbWU+cm1fd29yazwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNsYXNzOgorICAgICAgICAgICAgICAgIEluaGVyaXRpbmcgdGhpcyBjbGFzcyBoYXMgc2hvd24gdG8gc3BlZWQgdXAgYnVpbGRzIGR1ZSB0bworICAgICAgICAgICAgICAgIHNpZ25pZmljYW50bHkgbG93ZXIgYW1vdW50cyBvZiBkYXRhIHN0b3JlZCBpbiB0aGUgZGF0YQorICAgICAgICAgICAgICAgIGNhY2hlIGFzIHdlbGwgYXMgb24gZGlzay4KKyAgICAgICAgICAgICAgICBJbmhlcml0aW5nIHRoaXMgY2xhc3MgYWxzbyBtYWtlcyBjbGVhbnVwIG9mCisgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0ndmFyLVRNUERJUic+PGZpbGVuYW1lPlRNUERJUjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGZhc3RlciwgYXQgdGhlIGV4cGVuc2Ugb2YgYmVpbmcgZWFzaWx5IGFibGUgdG8gZGl2ZSBpbnRvIHRoZQorICAgICAgICAgICAgICAgIHNvdXJjZSBjb2RlLgorICAgICAgICAgICAgICAgIEZpbGUgc3lzdGVtIG1haW50YWluZXJzIGhhdmUgcmVjb21tZW5kZWQgdGhhdCB0aGUgZmFzdGVzdCB3YXkKKyAgICAgICAgICAgICAgICB0byBjbGVhbiB1cCBsYXJnZSBudW1iZXJzIG9mIGZpbGVzIGlzIHRvIHJlZm9ybWF0IHBhcnRpdGlvbnMKKyAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkZWxldGUgZmlsZXMgZHVlIHRvIHRoZSBsaW5lYXIgbmF0dXJlIG9mIHBhcnRpdGlvbnMuCisgICAgICAgICAgICAgICAgVGhpcywgb2YgY291cnNlLCBhc3N1bWVzIHlvdSBzdHJ1Y3R1cmUgdGhlIGRpc2sgcGFydGl0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICBmaWxlIHN5c3RlbXMgaW4gYSB3YXkgdGhhdCB0aGlzIGlzIHByYWN0aWNhbC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIEFzaWRlIGZyb20gdGhlIHByZXZpb3VzIGxpc3QsIHlvdSBzaG91bGQga2VlcCBzb21lIHRyYWRlIG9mZnMgaW4KKyAgICAgICAgbWluZCB0aGF0IGNhbiBoZWxwIHlvdSBzcGVlZCB1cCB0aGUgYnVpbGQ6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUmVtb3ZlIGl0ZW1zIGZyb20KKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItRElTVFJPX0ZFQVRVUkVTJz48ZmlsZW5hbWU+RElTVFJPX0ZFQVRVUkVTPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdGhhdCB5b3UgbWlnaHQgbm90IG5lZWQuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgRXhjbHVkZSBkZWJ1ZyBzeW1ib2xzIGFuZCBvdGhlciBkZWJ1ZyBpbmZvcm1hdGlvbjoKKyAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IG5lZWQgdGhlc2Ugc3ltYm9scyBhbmQgb3RoZXIgZGVidWcgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgZGlzYWJsaW5nIHRoZSA8ZmlsZW5hbWU+Ki1kYmc8L2ZpbGVuYW1lPiBwYWNrYWdlIGdlbmVyYXRpb24KKyAgICAgICAgICAgICAgICBjYW4gc3BlZWQgdXAgdGhlIGJ1aWxkLgorICAgICAgICAgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGdlbmVyYXRpb24gYnkgc2V0dGluZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd2YXItSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUJz48ZmlsZW5hbWU+SU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgdmFyaWFibGUgdG8gIjEiLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIERpc2FibGUgc3RhdGljIGxpYnJhcnkgZ2VuZXJhdGlvbiBmb3IgcmVjaXBlcyBkZXJpdmVkIGZyb20KKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YXV0b2NvbmY8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+bGlidG9vbDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgIEZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIGRpc2FibGUgc3RhdGljCisgICAgICAgICAgICAgICAgbGlicmFyaWVzIGFuZCBzdGlsbCBwcm92aWRlIGFuIG92ZXJyaWRlIHRvIGhhbmRsZSBleGNlcHRpb25zOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU1RBVElDTElCQ09ORiA9ICItLWRpc2FibGUtc3RhdGljIgorICAgICBTVEFUSUNMSUJDT05GX3NxbGl0ZTMtbmF0aXZlID0gIiIKKyAgICAgRVhUUkFfT0VDT05GICs9ICIke1NUQVRJQ0xJQkNPTkZ9IgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8bm90ZT48dGl0bGU+Tm90ZXM8L3RpdGxlPgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgcmVjaXBlcyBuZWVkIHN0YXRpYyBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gd29yaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseSAoZS5nLiA8ZmlsZW5hbWU+cHNldWRvLW5hdGl2ZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgPGZpbGVuYW1lPnNxbGl0ZTMtbmF0aXZlPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRlcywgYXMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIGFjY291bnQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlc2Uga2luZHMgb2YgZXhjZXB0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHBhY2thZ2VzIGhhdmUgcGFja2FnaW5nIGNvZGUgdGhhdCBhc3N1bWVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbmNlIG9mIHRoZSBzdGF0aWMgbGlicmFyaWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNvLCB5b3UgbWlnaHQgbmVlZCB0byBleGNsdWRlIHRoZW0gYXMgd2VsbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgIDwvcGFyYT4KKzwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnR0ZiBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYS50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjZDZiNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYS50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhLnhtbCBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4MjA0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYS54bWwKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Zm9udC1tZXRyaWNzIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zPC9mb250LW5hbWU+PGVtYmVkLz48Y2FwLWhlaWdodD43Mjk8L2NhcC1oZWlnaHQ+PHgtaGVpZ2h0PjU0NjwveC1oZWlnaHQ+PGFzY2VuZGVyPjkyODwvYXNjZW5kZXI+PGRlc2NlbmRlcj4tMjM1PC9kZXNjZW5kZXI+PGJib3g+PGxlZnQ+LTE4MzwvbGVmdD48Ym90dG9tPi0yMzU8L2JvdHRvbT48cmlnaHQ+MTI4NzwvcmlnaHQ+PHRvcD45Mjg8L3RvcD48L2Jib3g+PGZsYWdzPjMyPC9mbGFncz48c3RlbXY+MDwvc3RlbXY+PGl0YWxpY2FuZ2xlPjA8L2l0YWxpY2FuZ2xlPjxzdWJ0eXBlPlRZUEUwPC9zdWJ0eXBlPjxtdWx0aWJ5dGUtZXh0cmFzPjxjaWQtdHlwZT5DSURGb250VHlwZTI8L2NpZC10eXBlPjxkZWZhdWx0LXdpZHRoPjA8L2RlZmF1bHQtd2lkdGg+PGJmcmFuZ2VzPjxiZiBnaT0iMyIgdWU9IjEyNiIgdXM9IjMyIi8+PGJmIGdpPSIxNzIiIHVlPSIxNjAiIHVzPSIxNjAiLz48YmYgZ2k9IjE2MyIgdWU9IjE2MSIgdXM9IjE2MSIvPjxiZiBnaT0iMTMyIiB1ZT0iMTYzIiB1cz0iMTYyIi8+PGJmIGdpPSIxODkiIHVlPSIxNjQiIHVzPSIxNjQiLz48YmYgZ2k9IjE1MCIgdWU9IjE2NSIgdXM9IjE2NSIvPjxiZiBnaT0iMjMxIiB1ZT0iMTY2IiB1cz0iMTY2Ii8+PGJmIGdpPSIxMzQiIHVlPSIxNjciIHVzPSIxNjciLz48YmYgZ2k9IjE0MiIgdWU9IjE2OCIgdXM9IjE2OCIvPjxiZiBnaT0iMTM5IiB1ZT0iMTY5IiB1cz0iMTY5Ii8+PGJmIGdpPSIxNTciIHVlPSIxNzAiIHVzPSIxNzAiLz48YmYgZ2k9IjE2OSIgdWU9IjE3MSIgdXM9IjE3MSIvPjxiZiBnaT0iMTY0IiB1ZT0iMTcyIiB1cz0iMTcyIi8+PGJmIGdpPSIyNTYiIHVlPSIxNzMiIHVzPSIxNzMiLz48YmYgZ2k9IjEzOCIgdWU9IjE3NCIgdXM9IjE3NCIvPjxiZiBnaT0iMjE3IiB1ZT0iMTc1IiB1cz0iMTc1Ii8+PGJmIGdpPSIxMzEiIHVlPSIxNzYiIHVzPSIxNzYiLz48YmYgZ2k9IjE0NyIgdWU9IjE3NyIgdXM9IjE3NyIvPjxiZiBnaT0iMjQxIiB1ZT0iMTc5IiB1cz0iMTc4Ii8+PGJmIGdpPSIxNDEiIHVlPSIxODAiIHVzPSIxODAiLz48YmYgZ2k9IjE1MSIgdWU9IjE4MSIgdXM9IjE4MSIvPjxiZiBnaT0iMTM2IiB1ZT0iMTgyIiB1cz0iMTgyIi8+PGJmIGdpPSIxOTUiIHVlPSIxODMiIHVzPSIxODMiLz48YmYgZ2k9IjIyMSIgdWU9IjE4NCIgdXM9IjE4NCIvPjxiZiBnaT0iMjQwIiB1ZT0iMTg1IiB1cz0iMTg1Ii8+PGJmIGdpPSIxNTgiIHVlPSIxODYiIHVzPSIxODYiLz48YmYgZ2k9IjE3MCIgdWU9IjE4NyIgdXM9IjE4NyIvPjxiZiBnaT0iMjQzIiB1ZT0iMTkwIiB1cz0iMTg4Ii8+PGJmIGdpPSIxNjIiIHVlPSIxOTEiIHVzPSIxOTEiLz48YmYgZ2k9IjE3MyIgdWU9IjE5MiIgdXM9IjE5MiIvPjxiZiBnaT0iMjAxIiB1ZT0iMTkzIiB1cz0iMTkzIi8+PGJmIGdpPSIxOTkiIHVlPSIxOTQiIHVzPSIxOTQiLz48YmYgZ2k9IjE3NCIgdWU9IjE5NSIgdXM9IjE5NSIvPjxiZiBnaT0iOTgiIHVlPSIxOTciIHVzPSIxOTYiLz48YmYgZ2k9IjE0NCIgdWU9IjE5OCIgdXM9IjE5OCIvPjxiZiBnaT0iMTAwIiB1ZT0iMTk5IiB1cz0iMTk5Ii8+PGJmIGdpPSIyMDMiIHVlPSIyMDAiIHVzPSIyMDAiLz48YmYgZ2k9IjEwMSIgdWU9IjIwMSIgdXM9IjIwMSIvPjxiZiBnaT0iMjAwIiB1ZT0iMjAyIiB1cz0iMjAyIi8+PGJmIGdpPSIyMDIiIHVlPSIyMDMiIHVzPSIyMDMiLz48YmYgZ2k9IjIwNyIgdWU9IjIwNCIgdXM9IjIwNCIvPjxiZiBnaT0iMjA0IiB1ZT0iMjA3IiB1cz0iMjA1Ii8+PGJmIGdpPSIyMzIiIHVlPSIyMDgiIHVzPSIyMDgiLz48YmYgZ2k9IjEwMiIgdWU9IjIwOSIgdXM9IjIwOSIvPjxiZiBnaT0iMjEwIiB1ZT0iMjEwIiB1cz0iMjEwIi8+PGJmIGdpPSIyMDgiIHVlPSIyMTIiIHVzPSIyMTEiLz48YmYgZ2k9IjE3NSIgdWU9IjIxMyIgdXM9IjIxMyIvPjxiZiBnaT0iMTAzIiB1ZT0iMjE0IiB1cz0iMjE0Ii8+PGJmIGdpPSIyMzkiIHVlPSIyMTUiIHVzPSIyMTUiLz48YmYgZ2k9IjE0NSIgdWU9IjIxNiIgdXM9IjIxNiIvPjxiZiBnaT0iMjEzIiB1ZT0iMjE3IiB1cz0iMjE3Ii8+PGJmIGdpPSIyMTEiIHVlPSIyMTkiIHVzPSIyMTgiLz48YmYgZ2k9IjEwNCIgdWU9IjIyMCIgdXM9IjIyMCIvPjxiZiBnaT0iMjM0IiB1ZT0iMjIxIiB1cz0iMjIxIi8+PGJmIGdpPSIyMzYiIHVlPSIyMjIiIHVzPSIyMjIiLz48YmYgZ2k9IjEzNyIgdWU9IjIyMyIgdXM9IjIyMyIvPjxiZiBnaT0iMTA2IiB1ZT0iMjI0IiB1cz0iMjI0Ii8+PGJmIGdpPSIxMDUiIHVlPSIyMjUiIHVzPSIyMjUiLz48YmYgZ2k9IjEwNyIgdWU9IjIyNiIgdXM9IjIyNiIvPjxiZiBnaT0iMTA5IiB1ZT0iMjI3IiB1cz0iMjI3Ii8+PGJmIGdpPSIxMDgiIHVlPSIyMjgiIHVzPSIyMjgiLz48YmYgZ2k9IjExMCIgdWU9IjIyOSIgdXM9IjIyOSIvPjxiZiBnaT0iMTYwIiB1ZT0iMjMwIiB1cz0iMjMwIi8+PGJmIGdpPSIxMTEiIHVlPSIyMzEiIHVzPSIyMzEiLz48YmYgZ2k9IjExMyIgdWU9IjIzMiIgdXM9IjIzMiIvPjxiZiBnaT0iMTEyIiB1ZT0iMjMzIiB1cz0iMjMzIi8+PGJmIGdpPSIxMTQiIHVlPSIyMzUiIHVzPSIyMzQiLz48YmYgZ2k9IjExNyIgdWU9IjIzNiIgdXM9IjIzNiIvPjxiZiBnaT0iMTE2IiB1ZT0iMjM3IiB1cz0iMjM3Ii8+PGJmIGdpPSIxMTgiIHVlPSIyMzkiIHVzPSIyMzgiLz48YmYgZ2k9IjIzMyIgdWU9IjI0MCIgdXM9IjI0MCIvPjxiZiBnaT0iMTIwIiB1ZT0iMjQxIiB1cz0iMjQxIi8+PGJmIGdpPSIxMjIiIHVlPSIyNDIiIHVzPSIyNDIiLz48YmYgZ2k9IjEyMSIgdWU9IjI0MyIgdXM9IjI0MyIvPjxiZiBnaT0iMTIzIiB1ZT0iMjQ0IiB1cz0iMjQ0Ii8+PGJmIGdpPSIxMjUiIHVlPSIyNDUiIHVzPSIyNDUiLz48YmYgZ2k9IjEyNCIgdWU9IjI0NiIgdXM9IjI0NiIvPjxiZiBnaT0iMTg0IiB1ZT0iMjQ3IiB1cz0iMjQ3Ii8+PGJmIGdpPSIxNjEiIHVlPSIyNDgiIHVzPSIyNDgiLz48YmYgZ2k9IjEyNyIgdWU9IjI0OSIgdXM9IjI0OSIvPjxiZiBnaT0iMTI2IiB1ZT0iMjUwIiB1cz0iMjUwIi8+PGJmIGdpPSIxMjgiIHVlPSIyNTIiIHVzPSIyNTEiLz48YmYgZ2k9IjIzNSIgdWU9IjI1MyIgdXM9IjI1MyIvPjxiZiBnaT0iMjM3IiB1ZT0iMjU0IiB1cz0iMjU0Ii8+PGJmIGdpPSIxODYiIHVlPSIyNTUiIHVzPSIyNTUiLz48YmYgZ2k9IjI1MSIgdWU9IjI2MyIgdXM9IjI2MiIvPjxiZiBnaT0iMjUzIiB1ZT0iMjY5IiB1cz0iMjY4Ii8+PGJmIGdpPSIwIiB1ZT0iMjcwIiB1cz0iMjcwIi8+PGJmIGdpPSIwIiB1ZT0iMjcxIiB1cz0iMjcxIi8+PGJmIGdpPSIwIiB1ZT0iMjcyIiB1cz0iMjcyIi8+PGJmIGdpPSIyNTUiIHVlPSIyNzMiIHVzPSIyNzMiLz48YmYgZ2k9IjI0NiIgdWU9IjI4NyIgdXM9IjI4NiIvPjxiZiBnaT0iMjQ4IiB1ZT0iMzA0IiB1cz0iMzA0Ii8+PGJmIGdpPSIyMTQiIHVlPSIzMDUiIHVzPSIzMDUiLz48YmYgZ2k9IjIyNSIgdWU9IjMyMiIgdXM9IjMyMSIvPjxiZiBnaT0iMTc2IiB1ZT0iMzM5IiB1cz0iMzM4Ii8+PGJmIGdpPSIyNDkiIHVlPSIzNTEiIHVzPSIzNTAiLz48YmYgZ2k9IjIyNyIgdWU9IjM1MyIgdXM9IjM1MiIvPjxiZiBnaT0iMTg3IiB1ZT0iMzc2IiB1cz0iMzc2Ii8+PGJmIGdpPSIyMjkiIHVlPSIzODIiIHVzPSIzODEiLz48YmYgZ2k9IjE2NiIgdWU9IjQwMiIgdXM9IjQwMiIvPjxiZiBnaT0iMjE1IiB1ZT0iNzEwIiB1cz0iNzEwIi8+PGJmIGdpPSIyMjQiIHVlPSI3MTEiIHVzPSI3MTEiLz48YmYgZ2k9IjIxOCIgdWU9IjczMCIgdXM9IjcyOCIvPjxiZiBnaT0iMjIzIiB1ZT0iNzMxIiB1cz0iNzMxIi8+PGJmIGdpPSIyMTYiIHVlPSI3MzIiIHVzPSI3MzIiLz48YmYgZ2k9IjIyMiIgdWU9IjczMyIgdXM9IjczMyIvPjxiZiBnaT0iMTU5IiB1ZT0iOTM3IiB1cz0iOTM3Ii8+PGJmIGdpPSIxNTUiIHVlPSI5NjAiIHVzPSI5NjAiLz48YmYgZ2k9IjE3OCIgdWU9IjgyMTIiIHVzPSI4MjExIi8+PGJmIGdpPSIwIiB1ZT0iODIxMyIgdXM9IjgyMTMiLz48YmYgZ2k9IjAiIHVlPSI4MjE0IiB1cz0iODIxNCIvPjxiZiBnaT0iMCIgdWU9IjgyMTUiIHVzPSI4MjE1Ii8+PGJmIGdpPSIxODIiIHVlPSI4MjE3IiB1cz0iODIxNiIvPjxiZiBnaT0iMTk2IiB1ZT0iODIxOCIgdXM9IjgyMTgiLz48YmYgZ2k9IjAiIHVlPSI4MjE5IiB1cz0iODIxOSIvPjxiZiBnaT0iMTgwIiB1ZT0iODIyMSIgdXM9IjgyMjAiLz48YmYgZ2k9IjE5NyIgdWU9IjgyMjIiIHVzPSI4MjIyIi8+PGJmIGdpPSIwIiB1ZT0iODIyMyIgdXM9IjgyMjMiLz48YmYgZ2k9IjEzMCIgdWU9IjgyMjQiIHVzPSI4MjI0Ii8+PGJmIGdpPSIxOTQiIHVlPSI4MjI1IiB1cz0iODIyNSIvPjxiZiBnaT0iMTM1IiB1ZT0iODIyNiIgdXM9IjgyMjYiLz48YmYgZ2k9IjAiIHVlPSI4MjI3IiB1cz0iODIyNyIvPjxiZiBnaT0iMCIgdWU9IjgyMjgiIHVzPSI4MjI4Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOSIgdXM9IjgyMjkiLz48YmYgZ2k9IjE3MSIgdWU9IjgyMzAiIHVzPSI4MjMwIi8+PGJmIGdpPSIxOTgiIHVlPSI4MjQwIiB1cz0iODI0MCIvPjxiZiBnaT0iMTkwIiB1ZT0iODI1MCIgdXM9IjgyNDkiLz48YmYgZ2k9IjI1OCIgdWU9IjgzNjQiIHVzPSI4MzY0Ii8+PGJmIGdpPSIxNDAiIHVlPSI4NDgyIiB1cz0iODQ4MiIvPjxiZiBnaT0iMTUyIiB1ZT0iODcwNiIgdXM9Ijg3MDYiLz48YmYgZ2k9IjAiIHVlPSI4NzA3IiB1cz0iODcwNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MDgiIHVzPSI4NzA4Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOSIgdXM9Ijg3MDkiLz48YmYgZ2k9IjE2OCIgdWU9Ijg3MTAiIHVzPSI4NzEwIi8+PGJmIGdpPSIxNTQiIHVlPSI4NzE5IiB1cz0iODcxOSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjAiIHVzPSI4NzIwIi8+PGJmIGdpPSIxNTMiIHVlPSI4NzIxIiB1cz0iODcyMSIvPjxiZiBnaT0iMjM4IiB1ZT0iODcyMiIgdXM9Ijg3MjIiLz48YmYgZ2k9IjAiIHVlPSI4NzIzIiB1cz0iODcyMyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjQiIHVzPSI4NzI0Ii8+PGJmIGdpPSIxODgiIHVlPSI4NzI1IiB1cz0iODcyNSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjYiIHVzPSI4NzI2Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNyIgdXM9Ijg3MjciLz48YmYgZ2k9IjAiIHVlPSI4NzI4IiB1cz0iODcyOCIvPjxiZiBnaT0iMjU3IiB1ZT0iODcyOSIgdXM9Ijg3MjkiLz48YmYgZ2k9IjE2NSIgdWU9Ijg3MzAiIHVzPSI4NzMwIi8+PGJmIGdpPSIwIiB1ZT0iODczMSIgdXM9Ijg3MzEiLz48YmYgZ2k9IjAiIHVlPSI4NzMyIiB1cz0iODczMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MzMiIHVzPSI4NzMzIi8+PGJmIGdpPSIxNDYiIHVlPSI4NzM0IiB1cz0iODczNCIvPjxiZiBnaT0iMTU2IiB1ZT0iODc0NyIgdXM9Ijg3NDciLz48YmYgZ2k9IjE2NyIgdWU9Ijg3NzYiIHVzPSI4Nzc2Ii8+PGJmIGdpPSIxNDMiIHVlPSI4ODAwIiB1cz0iODgwMCIvPjxiZiBnaT0iMCIgdWU9Ijg4MDEiIHVzPSI4ODAxIi8+PGJmIGdpPSIwIiB1ZT0iODgwMiIgdXM9Ijg4MDIiLz48YmYgZ2k9IjAiIHVlPSI4ODAzIiB1cz0iODgwMyIvPjxiZiBnaT0iMTQ4IiB1ZT0iODgwNSIgdXM9Ijg4MDQiLz48YmYgZ2k9IjE4NSIgdWU9Ijk2NzQiIHVzPSI5Njc0Ii8+PGJmIGdpPSIxOTIiIHVlPSI2NDI1OCIgdXM9IjY0MjU3Ii8+PGJmIGdpPSIwIiB1ZT0iNjU1MzUiIHVzPSI2NTUzNSIvPjwvYmZyYW5nZXM+PGNpZC13aWR0aHMgc3RhcnQtaW5kZXg9IjAiPjx3eCB3PSI2MDAiLz48d3ggdz0iMCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0NTkiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI5NTAiLz48d3ggdz0iNzc5Ii8+PHd4IHc9IjI3NCIvPjx3eCB3PSIzOTAiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI4MzciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjM2MCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSIzMzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjUzMCIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODYiLz48d3ggdz0iNjk4Ii8+PHd4IHc9Ijc3MCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNTc1Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI3NTEiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSI2NTUiLz48d3ggdz0iNTU3Ii8+PHd4IHc9Ijg2MiIvPjx3eCB3PSI3NDgiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjYwMyIvPjx3eCB3PSI3ODciLz48d3ggdz0iNjk0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI2MTAiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI5ODgiLz48d3ggdz0iNjg1Ii8+PHd4IHc9IjYxMCIvPjx3eCB3PSI2ODUiLz48d3ggdz0iMzkwIi8+PHd4IHc9IjMzNiIvPjx3eCB3PSIzOTAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYzNCIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSIzNTIiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYzMyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjU3OSIvPjx3eCB3PSIyNzciLz48d3ggdz0iOTc0Ii8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSI0MTEiLz48d3ggdz0iNTIwIi8+PHd4IHc9IjM5MiIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjgxNyIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNTkxIi8+PHd4IHc9IjUyNCIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzM2Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI4MzciLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNjMxIi8+PHd4IHc9Ijc0OCIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzMxIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjYxMiIvPjx3eCB3PSI2MTIiLz48d3ggdz0iNjEyIi8+PHd4IHc9IjU0OSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iNjE1Ii8+PHd4IHc9IjYxNSIvPjx3eCB3PSI2MTUiLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjI3NyIvPjx3eCB3PSIyNzciLz48d3ggdz0iMjc3Ii8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYxMSIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI2MzMiLz48d3ggdz0iNjMzIi8+PHd4IHc9IjYzMyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjU4OSIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjEwMDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSIxMDAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9Ijk3NCIvPjx3eCB3PSI3ODciLz48d3ggdz0iODMzIi8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjYzNiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iNTE3Ii8+PHd4IHc9IjY3MyIvPjx3eCB3PSI3NTYiLz48d3ggdz0iNTg4Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI0NzEiLz48d3ggdz0iNDcxIi8+PHd4IHc9Ijc2NCIvPjx3eCB3PSI5ODEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjUzMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjYzNyIvPjx3eCB3PSI2MzYiLz48d3ggdz0iODM3Ii8+PHd4IHc9IjY2OCIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjExIi8+PHd4IHc9IjEwMDAiLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2ODQiLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjEwNjkiLz48d3ggdz0iMTAyMiIvPjx3eCB3PSI1MDAiLz48d3ggdz0iMTAwMCIvPjx3eCB3PSI1MTgiLz48d3ggdz0iNTE4Ii8+PHd4IHc9IjMxNyIvPjx3eCB3PSIzMTciLz48d3ggdz0iODM3Ii8+PHd4IHc9IjQ5NCIvPjx3eCB3PSI1OTEiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjE2NiIvPjx3eCB3PSI2MzYiLz48d3ggdz0iMzk5Ii8+PHd4IHc9IjM5OSIvPjx3eCB3PSI2MjkiLz48d3ggdz0iNjI5Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSIzMTciLz48d3ggdz0iMzE3Ii8+PHd4IHc9IjUxOCIvPjx3eCB3PSIxMzQxIi8+PHd4IHc9IjY4NCIvPjx3eCB3PSI2MzEiLz48d3ggdz0iNjg0Ii8+PHd4IHc9IjYzMSIvPjx3eCB3PSI2MzEiLz48d3ggdz0iMjk0Ii8+PHd4IHc9IjI5NCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iMjk0Ii8+PHd4IHc9Ijc4NyIvPjx3eCB3PSI3ODciLz48d3ggdz0iNzg3Ii8+PHd4IHc9IjczMSIvPjx3eCB3PSI3MzEiLz48d3ggdz0iNzMxIi8+PHd4IHc9IjI3NyIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTYyIi8+PHd4IHc9IjI4NCIvPjx3eCB3PSI2MzQiLz48d3ggdz0iNTIwIi8+PHd4IHc9IjY4NSIvPjx3eCB3PSI1MjQiLz48d3ggdz0iMzM2Ii8+PHd4IHc9Ijc3NCIvPjx3eCB3PSI2MTEiLz48d3ggdz0iNjEwIi8+PHd4IHc9IjU5MSIvPjx3eCB3PSI2MDQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjgzNyIvPjx3eCB3PSI4MzciLz48d3ggdz0iNDAwIi8+PHd4IHc9IjQwMCIvPjx3eCB3PSI0MDAiLz48d3ggdz0iOTY5Ii8+PHd4IHc9Ijk2OSIvPjx3eCB3PSI5NjkiLz48d3ggdz0iNzc0Ii8+PHd4IHc9IjYzNCIvPjx3eCB3PSIyOTQiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjUyMCIvPjx3eCB3PSI2OTgiLz48d3ggdz0iNTQ5Ii8+PHd4IHc9IjY5OCIvPjx3eCB3PSI1NDkiLz48d3ggdz0iNjM0Ii8+PHd4IHc9IjM2MCIvPjx3eCB3PSIzMTciLz48d3ggdz0iNjM2Ii8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjUwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PHd4IHc9IjQwMCIvPjx3eCB3PSI1MDAiLz48d3ggdz0iNTAwIi8+PC9jaWQtd2lkdGhzPjwvbXVsdGlieXRlLWV4dHJhcz48a2VybmluZyBrcHgxPSIyNDYiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjM1Ij48cGFpciBrZXJuPSItMTQyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE0NiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0MyI+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNiI+PHBhaXIga2Vybj0iMzYiIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjM2IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSIzNiIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTE4IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49IjU1IiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMTIiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIzIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNTEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjEzIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjA4Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTg3Ij48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjAyIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExMyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxNDQiPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1OSI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjExNSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI3MyI+PHBhaXIga2Vybj0iMzEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xMTQiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjIyNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTQiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNjAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ5Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEyNCI+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjkxIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODEiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTY5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iNzMiIGtweDI9IjE0NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMDEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI2MCI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI4NSI+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgwIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3NSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODEiLz48cGFpciBrZXJuPSI0MSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNTEiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIwIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjYxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNCI+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNzciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIwMiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMDAiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTIyIj48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iOTEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTA0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjEzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0yMDIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTEzMiIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjIxMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMTMyIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTM3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTI2MiIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyMTIiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTA5IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjU2Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU4Ij48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNzYiLz48cGFpciBrZXJuPSItMTE0IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjEwOSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODIiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE4NiI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTc1Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjA5Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTAzIj48cGFpciBrZXJuPSItMTciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTkiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODEiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5OCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIxMiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIyOSI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIzOCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjEiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU3Ij48cGFpciBrZXJuPSItNjciIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItODYiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDYiLz48cGFpciBrZXJuPSItODEiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSI3NiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTEzNyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxMTAiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIzNyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMjciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTcwIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI0OSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjAiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyNDkiPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iOTgiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMjI3Ij48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNTUiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTE2MCIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMDQiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI3MiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxOTkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NCI+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSI5OCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxODAiPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQzIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTE4OCIga3B4Mj0iMTQ0Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI1OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQxIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9Ijg1Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQ3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMzciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEyMCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iNTEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjUzIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMzciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIyMzYiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQ1Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjQ2Ii8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjUzIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjY4Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxMjYiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItNDQiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii00NCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItNDQiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjEzNyI+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzMyI+PHBhaXIga2Vybj0iLTQ0IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjI1MyI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSIxOCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIzNCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIyMTEiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI2MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI3OCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA2Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iODgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iNTIiPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSIxMjUiPjxwYWlyIGtlcm49Ii03MiIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSI5MSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTgxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQyIj48cGFpciBrZXJuPSItMjEiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3MCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTEwOSIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49Ii04NiIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTE1Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjkxIi8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjkwIj48cGFpciBrZXJuPSItOTEiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTA0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzYiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjQ2Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIyMzUiLz48cGFpciBrZXJuPSItMjEiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTMiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA4Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjkiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIzNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODIiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItMTIzIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii02MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzEiLz48cGFpciBrZXJuPSItMTI4IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNDIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNSIvPjxwYWlyIGtlcm49Ii00MCIga3B4Mj0iOTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTY3IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9Ijg5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1NSI+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMTA3Ii8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iODYiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxMjkiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItOTEiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTE0NiIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0xMDkiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSI2OCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTE1NSIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMjUwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTExOCIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItNTgiIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE2NSIga3B4Mj0iMjI4Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjEwNSIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE2OSIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxNzAiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSI4OCIvPjxwYWlyIGtlcm49Ii0xNjkiIGtweDI9IjExMSIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItMTY5IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTUxIiBrcHgyPSIxMjciLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDgiLz48cGFpciBrZXJuPSItMzAiIGtweDI9Ijc2Ii8+PHBhaXIga2Vybj0iLTE1MSIga3B4Mj0iMTI4Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTY1IiBrcHgyPSIxMDkiLz48cGFpciBrZXJuPSItMTU1IiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNjUiIGtweDI9IjExMCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjExNCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5MSIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI1MCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii05MSIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3NCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjkxIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI1NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzAiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxMTUiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMzkiPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iOTgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE4NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjIzNiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODAiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjE3Ii8+PHBhaXIga2Vybj0iLTkxIiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjI5Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjQ1Ij48cGFpciBrZXJuPSItMzUiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxOTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwMSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0zMCIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTczIj48cGFpciBrZXJuPSItMTciIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTIxIiBrcHgyPSIxNiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI1MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEzIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNzMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTY5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTIiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcwIi8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMTAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1OCIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iMTg2Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjIwOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTAzIi8+PHBhaXIga2Vybj0iMjciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTEyMyIga3B4Mj0iMTgxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjEiLz48cGFpciBrZXJuPSItNjMiIGtweDI9IjU3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MiIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjcxIi8+PHBhaXIga2Vybj0iLTEyOCIga3B4Mj0iMTgwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDAiIGtweDI9IjkwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTEiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMzYiLz48cGFpciBrZXJuPSItNzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMTQiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjUwIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii02NyIga3B4Mj0iOTIiLz48cGFpciBrZXJuPSIyMiIga3B4Mj0iMTk3Ii8+PHBhaXIga2Vybj0iLTU4IiBrcHgyPSI4OSIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzQiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iMTk3Ij48cGFpciBrZXJuPSItMzUiIGtweDI9IjI0NiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjM1Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSIxODciLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIwOCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNDQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjU5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNDEiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEyNCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iODUiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSI2MCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTgzIiBrcHgyPSIyMzQiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjEwMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI0NyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjU4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjgxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIzOCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTE4MyIga3B4Mj0iNTciLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjM3Ii8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjAiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjUxIi8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE5OSIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTMiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjEzNyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjMzIi8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjUyIi8+PHBhaXIga2Vybj0iLTM1IiBrcHgyPSIxMjUiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQyIi8+PHBhaXIga2Vybj0iLTk1IiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii0xMzciIGtweDI9IjU1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMzkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjIzNiIvPjxwYWlyIGtlcm49IjIyIiBrcHgyPSI0NSIvPjxwYWlyIGtlcm49IjE4IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iLTExNCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjQ2Ii8+PHBhaXIga2Vybj0iMTgiIGtweDI9IjE3NCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI5MiI+PHBhaXIga2Vybj0iLTE0MiIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNDYiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzAiLz48L2tlcm5pbmc+PGtlcm5pbmcga3B4MT0iODkiPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xMzIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii0yNiIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjI5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MCIvPjwva2VybmluZz48a2VybmluZyBrcHgxPSI0NiI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDciLz48cGFpciBrZXJuPSItNzIiIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0xMDQiIGtweDI9IjE2Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTIiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyMyIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjUxIi8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIyMTMiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyOSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI0Ii8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSIxNjkiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjYwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwNiIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjgiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjIxMCIvPjxwYWlyIGtlcm49Ii0zNSIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjgyIi8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSIxODYiLz48cGFpciBrZXJuPSItNTQiIGtweDI9IjE3NSIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMjA5Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIxMDMiLz48cGFpciBrZXJuPSItMTciIGtweDI9Ijk4Ii8+PHBhaXIga2Vybj0iLTMwIiBrcHgyPSIxODEiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjIxMiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iMzgiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyMSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI2Ii8+PHBhaXIga2Vybj0iLTI2IiBrcHgyPSIxMDQiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjcyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxOTkiLz48cGFpciBrZXJuPSItMzAiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA1Ii8+PHBhaXIga2Vybj0iLTU0IiBrcHgyPSIyNTMiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjIxMSIvPjxwYWlyIGtlcm49Ii00OSIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9Ijg4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIzNiIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNTUiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjExNCIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTAiLz48cGFpciBrZXJuPSItNDkiIGtweDI9IjEyNyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA4Ii8+PHBhaXIga2Vybj0iLTQ5IiBrcHgyPSIxMjgiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjE3MyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTA5Ii8+PHBhaXIga2Vybj0iLTcyIiBrcHgyPSI5MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxNzQiLz48cGFpciBrZXJuPSItMjYiIGtweDI9IjU2Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjE3NCI+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNDYiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjIzNSIvPjxwYWlyIGtlcm49Ii0yMSIga3B4Mj0iMTYiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyNTEiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjExMyIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMTg3Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDgiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjczIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMjQiLz48cGFpciBrZXJuPSItMzUiIGtweDI9IjE2OSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUyIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MCIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iNjAiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMjAxIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyOSIvPjxwYWlyIGtlcm49Ii03NyIga3B4Mj0iMjM0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIxMDAiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEyMiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjEwIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4MiIvPjxwYWlyIGtlcm49Ii01NCIga3B4Mj0iNTgiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjE4NiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTc1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSIyMDkiLz48cGFpciBrZXJuPSItMTciIGtweDI9IjEwMyIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSI5OCIvPjxwYWlyIGtlcm49Ii0xMjMiIGtweDI9IjE4MSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTciLz48cGFpciBrZXJuPSItMTciIGtweDI9IjM4Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTIxIi8+PHBhaXIga2Vybj0iLTYzIiBrcHgyPSI1NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjU0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI4NyIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNzIiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTk5Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI3MSIvPjxwYWlyIGtlcm49Ii0xMjgiIGtweDI9IjE4MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMjUzIi8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTI1Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI0MiIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE1Ii8+PHBhaXIga2Vybj0iLTQwIiBrcHgyPSI5MCIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTExIi8+PHBhaXIga2Vybj0iMjciIGtweDI9IjM2Ii8+PHBhaXIga2Vybj0iLTc3IiBrcHgyPSI1NSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iMTE0Ii8+PHBhaXIga2Vybj0iLTE3IiBrcHgyPSI1MCIvPjxwYWlyIGtlcm49IjI3IiBrcHgyPSIxNzMiLz48cGFpciBrZXJuPSItNjciIGtweDI9IjkyIi8+PHBhaXIga2Vybj0iMjIiIGtweDI9IjE5NyIvPjxwYWlyIGtlcm49Ii01OCIga3B4Mj0iODkiLz48cGFpciBrZXJuPSIyNyIga3B4Mj0iMTc0Ii8+PC9rZXJuaW5nPjxrZXJuaW5nIGtweDE9IjU2Ij48cGFpciBrZXJuPSItMTciIGtweDI9IjIyOSIvPjxwYWlyIGtlcm49Ii0xNyIga3B4Mj0iNjEiLz48L2tlcm5pbmc+PC9mb250LW1ldHJpY3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC50dGYgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb0JkLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU2NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC54bWwgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL1ZlcmFNb0JkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjMzMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9CZC54bWwKQEAgLTAsMCArMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Zm9udC1tZXRyaWNzIG1ldHJpY3MtdmVyc2lvbj0iMiIgdHlwZT0iVFlQRTAiPjxmb250LW5hbWU+Qml0c3RyZWFtVmVyYVNhbnNNb25vLUJvbGQ8L2ZvbnQtbmFtZT48ZnVsbC1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubyBCb2xkPC9mdWxsLW5hbWU+PGZhbWlseS1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZmFtaWx5LW5hbWU+PGVtYmVkLz48Y2FwLWhlaWdodD43Mjk8L2NhcC1oZWlnaHQ+PHgtaGVpZ2h0PjU0NjwveC1oZWlnaHQ+PGFzY2VuZGVyPjc1OTwvYXNjZW5kZXI+PGRlc2NlbmRlcj4tMjQwPC9kZXNjZW5kZXI+PGJib3g+PGxlZnQ+LTE5PC9sZWZ0Pjxib3R0b20+LTIzNTwvYm90dG9tPjxyaWdodD42MDU8L3JpZ2h0Pjx0b3A+OTI4PC90b3A+PC9iYm94PjxmbGFncz4zNDwvZmxhZ3M+PHN0ZW12PjA8L3N0ZW12PjxpdGFsaWNhbmdsZT4wPC9pdGFsaWNhbmdsZT48c3VidHlwZT5UWVBFMDwvc3VidHlwZT48bXVsdGlieXRlLWV4dHJhcz48Y2lkLXR5cGU+Q0lERm9udFR5cGUyPC9jaWQtdHlwZT48ZGVmYXVsdC13aWR0aD4wPC9kZWZhdWx0LXdpZHRoPjxiZnJhbmdlcz48YmYgZ2k9IjMiIHVlPSIxMjYiIHVzPSIzMiIvPjxiZiBnaT0iMTcyIiB1ZT0iMTYwIiB1cz0iMTYwIi8+PGJmIGdpPSIxNjMiIHVlPSIxNjEiIHVzPSIxNjEiLz48YmYgZ2k9IjEzMiIgdWU9IjE2MyIgdXM9IjE2MiIvPjxiZiBnaT0iMTg5IiB1ZT0iMTY0IiB1cz0iMTY0Ii8+PGJmIGdpPSIxNTAiIHVlPSIxNjUiIHVzPSIxNjUiLz48YmYgZ2k9IjIzMSIgdWU9IjE2NiIgdXM9IjE2NiIvPjxiZiBnaT0iMTM0IiB1ZT0iMTY3IiB1cz0iMTY3Ii8+PGJmIGdpPSIxNDIiIHVlPSIxNjgiIHVzPSIxNjgiLz48YmYgZ2k9IjEzOSIgdWU9IjE2OSIgdXM9IjE2OSIvPjxiZiBnaT0iMTU3IiB1ZT0iMTcwIiB1cz0iMTcwIi8+PGJmIGdpPSIxNjkiIHVlPSIxNzEiIHVzPSIxNzEiLz48YmYgZ2k9IjE2NCIgdWU9IjE3MiIgdXM9IjE3MiIvPjxiZiBnaT0iMjU2IiB1ZT0iMTczIiB1cz0iMTczIi8+PGJmIGdpPSIxMzgiIHVlPSIxNzQiIHVzPSIxNzQiLz48YmYgZ2k9IjIxNyIgdWU9IjE3NSIgdXM9IjE3NSIvPjxiZiBnaT0iMTMxIiB1ZT0iMTc2IiB1cz0iMTc2Ii8+PGJmIGdpPSIxNDciIHVlPSIxNzciIHVzPSIxNzciLz48YmYgZ2k9IjI0MSIgdWU9IjE3OSIgdXM9IjE3OCIvPjxiZiBnaT0iMTQxIiB1ZT0iMTgwIiB1cz0iMTgwIi8+PGJmIGdpPSIxNTEiIHVlPSIxODEiIHVzPSIxODEiLz48YmYgZ2k9IjEzNiIgdWU9IjE4MiIgdXM9IjE4MiIvPjxiZiBnaT0iMTk1IiB1ZT0iMTgzIiB1cz0iMTgzIi8+PGJmIGdpPSIyMjEiIHVlPSIxODQiIHVzPSIxODQiLz48YmYgZ2k9IjI0MCIgdWU9IjE4NSIgdXM9IjE4NSIvPjxiZiBnaT0iMTU4IiB1ZT0iMTg2IiB1cz0iMTg2Ii8+PGJmIGdpPSIxNzAiIHVlPSIxODciIHVzPSIxODciLz48YmYgZ2k9IjI0MyIgdWU9IjE5MCIgdXM9IjE4OCIvPjxiZiBnaT0iMTYyIiB1ZT0iMTkxIiB1cz0iMTkxIi8+PGJmIGdpPSIxNzMiIHVlPSIxOTIiIHVzPSIxOTIiLz48YmYgZ2k9IjIwMSIgdWU9IjE5MyIgdXM9IjE5MyIvPjxiZiBnaT0iMTk5IiB1ZT0iMTk0IiB1cz0iMTk0Ii8+PGJmIGdpPSIxNzQiIHVlPSIxOTUiIHVzPSIxOTUiLz48YmYgZ2k9Ijk4IiB1ZT0iMTk3IiB1cz0iMTk2Ii8+PGJmIGdpPSIxNDQiIHVlPSIxOTgiIHVzPSIxOTgiLz48YmYgZ2k9IjEwMCIgdWU9IjE5OSIgdXM9IjE5OSIvPjxiZiBnaT0iMjAzIiB1ZT0iMjAwIiB1cz0iMjAwIi8+PGJmIGdpPSIxMDEiIHVlPSIyMDEiIHVzPSIyMDEiLz48YmYgZ2k9IjIwMCIgdWU9IjIwMiIgdXM9IjIwMiIvPjxiZiBnaT0iMjAyIiB1ZT0iMjAzIiB1cz0iMjAzIi8+PGJmIGdpPSIyMDciIHVlPSIyMDQiIHVzPSIyMDQiLz48YmYgZ2k9IjIwNCIgdWU9IjIwNyIgdXM9IjIwNSIvPjxiZiBnaT0iMjMyIiB1ZT0iMjA4IiB1cz0iMjA4Ii8+PGJmIGdpPSIxMDIiIHVlPSIyMDkiIHVzPSIyMDkiLz48YmYgZ2k9IjIxMCIgdWU9IjIxMCIgdXM9IjIxMCIvPjxiZiBnaT0iMjA4IiB1ZT0iMjEyIiB1cz0iMjExIi8+PGJmIGdpPSIxNzUiIHVlPSIyMTMiIHVzPSIyMTMiLz48YmYgZ2k9IjEwMyIgdWU9IjIxNCIgdXM9IjIxNCIvPjxiZiBnaT0iMjM5IiB1ZT0iMjE1IiB1cz0iMjE1Ii8+PGJmIGdpPSIxNDUiIHVlPSIyMTYiIHVzPSIyMTYiLz48YmYgZ2k9IjIxMyIgdWU9IjIxNyIgdXM9IjIxNyIvPjxiZiBnaT0iMjExIiB1ZT0iMjE5IiB1cz0iMjE4Ii8+PGJmIGdpPSIxMDQiIHVlPSIyMjAiIHVzPSIyMjAiLz48YmYgZ2k9IjIzNCIgdWU9IjIyMSIgdXM9IjIyMSIvPjxiZiBnaT0iMjM2IiB1ZT0iMjIyIiB1cz0iMjIyIi8+PGJmIGdpPSIxMzciIHVlPSIyMjMiIHVzPSIyMjMiLz48YmYgZ2k9IjEwNiIgdWU9IjIyNCIgdXM9IjIyNCIvPjxiZiBnaT0iMTA1IiB1ZT0iMjI1IiB1cz0iMjI1Ii8+PGJmIGdpPSIxMDciIHVlPSIyMjYiIHVzPSIyMjYiLz48YmYgZ2k9IjEwOSIgdWU9IjIyNyIgdXM9IjIyNyIvPjxiZiBnaT0iMTA4IiB1ZT0iMjI4IiB1cz0iMjI4Ii8+PGJmIGdpPSIxMTAiIHVlPSIyMjkiIHVzPSIyMjkiLz48YmYgZ2k9IjE2MCIgdWU9IjIzMCIgdXM9IjIzMCIvPjxiZiBnaT0iMTExIiB1ZT0iMjMxIiB1cz0iMjMxIi8+PGJmIGdpPSIxMTMiIHVlPSIyMzIiIHVzPSIyMzIiLz48YmYgZ2k9IjExMiIgdWU9IjIzMyIgdXM9IjIzMyIvPjxiZiBnaT0iMTE0IiB1ZT0iMjM1IiB1cz0iMjM0Ii8+PGJmIGdpPSIxMTciIHVlPSIyMzYiIHVzPSIyMzYiLz48YmYgZ2k9IjExNiIgdWU9IjIzNyIgdXM9IjIzNyIvPjxiZiBnaT0iMTE4IiB1ZT0iMjM5IiB1cz0iMjM4Ii8+PGJmIGdpPSIyMzMiIHVlPSIyNDAiIHVzPSIyNDAiLz48YmYgZ2k9IjEyMCIgdWU9IjI0MSIgdXM9IjI0MSIvPjxiZiBnaT0iMTIyIiB1ZT0iMjQyIiB1cz0iMjQyIi8+PGJmIGdpPSIxMjEiIHVlPSIyNDMiIHVzPSIyNDMiLz48YmYgZ2k9IjEyMyIgdWU9IjI0NCIgdXM9IjI0NCIvPjxiZiBnaT0iMTI1IiB1ZT0iMjQ1IiB1cz0iMjQ1Ii8+PGJmIGdpPSIxMjQiIHVlPSIyNDYiIHVzPSIyNDYiLz48YmYgZ2k9IjE4NCIgdWU9IjI0NyIgdXM9IjI0NyIvPjxiZiBnaT0iMTYxIiB1ZT0iMjQ4IiB1cz0iMjQ4Ii8+PGJmIGdpPSIxMjciIHVlPSIyNDkiIHVzPSIyNDkiLz48YmYgZ2k9IjEyNiIgdWU9IjI1MCIgdXM9IjI1MCIvPjxiZiBnaT0iMTI4IiB1ZT0iMjUyIiB1cz0iMjUxIi8+PGJmIGdpPSIyMzUiIHVlPSIyNTMiIHVzPSIyNTMiLz48YmYgZ2k9IjIzNyIgdWU9IjI1NCIgdXM9IjI1NCIvPjxiZiBnaT0iMTg2IiB1ZT0iMjU1IiB1cz0iMjU1Ii8+PGJmIGdpPSIyNTEiIHVlPSIyNjMiIHVzPSIyNjIiLz48YmYgZ2k9IjI1MyIgdWU9IjI2OSIgdXM9IjI2OCIvPjxiZiBnaT0iMCIgdWU9IjI3MCIgdXM9IjI3MCIvPjxiZiBnaT0iMCIgdWU9IjI3MSIgdXM9IjI3MSIvPjxiZiBnaT0iMCIgdWU9IjI3MiIgdXM9IjI3MiIvPjxiZiBnaT0iMjU1IiB1ZT0iMjczIiB1cz0iMjczIi8+PGJmIGdpPSIyNDYiIHVlPSIyODciIHVzPSIyODYiLz48YmYgZ2k9IjI0OCIgdWU9IjMwNCIgdXM9IjMwNCIvPjxiZiBnaT0iMjE0IiB1ZT0iMzA1IiB1cz0iMzA1Ii8+PGJmIGdpPSIyMjUiIHVlPSIzMjIiIHVzPSIzMjEiLz48YmYgZ2k9IjE3NiIgdWU9IjMzOSIgdXM9IjMzOCIvPjxiZiBnaT0iMjQ5IiB1ZT0iMzUxIiB1cz0iMzUwIi8+PGJmIGdpPSIyMjciIHVlPSIzNTMiIHVzPSIzNTIiLz48YmYgZ2k9IjE4NyIgdWU9IjM3NiIgdXM9IjM3NiIvPjxiZiBnaT0iMjI5IiB1ZT0iMzgyIiB1cz0iMzgxIi8+PGJmIGdpPSIxNjYiIHVlPSI0MDIiIHVzPSI0MDIiLz48YmYgZ2k9IjIxNSIgdWU9IjcxMCIgdXM9IjcxMCIvPjxiZiBnaT0iMjI0IiB1ZT0iNzExIiB1cz0iNzExIi8+PGJmIGdpPSIyMTgiIHVlPSI3MzAiIHVzPSI3MjgiLz48YmYgZ2k9IjIyMyIgdWU9IjczMSIgdXM9IjczMSIvPjxiZiBnaT0iMjE2IiB1ZT0iNzMyIiB1cz0iNzMyIi8+PGJmIGdpPSIyMjIiIHVlPSI3MzMiIHVzPSI3MzMiLz48YmYgZ2k9IjE1OSIgdWU9IjkzNyIgdXM9IjkzNyIvPjxiZiBnaT0iMTU1IiB1ZT0iOTYwIiB1cz0iOTYwIi8+PGJmIGdpPSIxNzgiIHVlPSI4MjEyIiB1cz0iODIxMSIvPjxiZiBnaT0iMCIgdWU9IjgyMTMiIHVzPSI4MjEzIi8+PGJmIGdpPSIwIiB1ZT0iODIxNCIgdXM9IjgyMTQiLz48YmYgZ2k9IjAiIHVlPSI4MjE1IiB1cz0iODIxNSIvPjxiZiBnaT0iMTgyIiB1ZT0iODIxNyIgdXM9IjgyMTYiLz48YmYgZ2k9IjE5NiIgdWU9IjgyMTgiIHVzPSI4MjE4Ii8+PGJmIGdpPSIwIiB1ZT0iODIxOSIgdXM9IjgyMTkiLz48YmYgZ2k9IjE4MCIgdWU9IjgyMjEiIHVzPSI4MjIwIi8+PGJmIGdpPSIxOTciIHVlPSI4MjIyIiB1cz0iODIyMiIvPjxiZiBnaT0iMCIgdWU9IjgyMjMiIHVzPSI4MjIzIi8+PGJmIGdpPSIxMzAiIHVlPSI4MjI0IiB1cz0iODIyNCIvPjxiZiBnaT0iMTk0IiB1ZT0iODIyNSIgdXM9IjgyMjUiLz48YmYgZ2k9IjEzNSIgdWU9IjgyMjYiIHVzPSI4MjI2Ii8+PGJmIGdpPSIwIiB1ZT0iODIyNyIgdXM9IjgyMjciLz48YmYgZ2k9IjAiIHVlPSI4MjI4IiB1cz0iODIyOCIvPjxiZiBnaT0iMCIgdWU9IjgyMjkiIHVzPSI4MjI5Ii8+PGJmIGdpPSIxNzEiIHVlPSI4MjMwIiB1cz0iODIzMCIvPjxiZiBnaT0iMTk4IiB1ZT0iODI0MCIgdXM9IjgyNDAiLz48YmYgZ2k9IjE5MCIgdWU9IjgyNTAiIHVzPSI4MjQ5Ii8+PGJmIGdpPSIyNTgiIHVlPSI4MzY0IiB1cz0iODM2NCIvPjxiZiBnaT0iMTQwIiB1ZT0iODQ4MiIgdXM9Ijg0ODIiLz48YmYgZ2k9IjE1MiIgdWU9Ijg3MDYiIHVzPSI4NzA2Ii8+PGJmIGdpPSIwIiB1ZT0iODcwNyIgdXM9Ijg3MDciLz48YmYgZ2k9IjAiIHVlPSI4NzA4IiB1cz0iODcwOCIvPjxiZiBnaT0iMCIgdWU9Ijg3MDkiIHVzPSI4NzA5Ii8+PGJmIGdpPSIxNjgiIHVlPSI4NzEwIiB1cz0iODcxMCIvPjxiZiBnaT0iMTU0IiB1ZT0iODcxOSIgdXM9Ijg3MTkiLz48YmYgZ2k9IjAiIHVlPSI4NzIwIiB1cz0iODcyMCIvPjxiZiBnaT0iMTUzIiB1ZT0iODcyMSIgdXM9Ijg3MjEiLz48YmYgZ2k9IjIzOCIgdWU9Ijg3MjIiIHVzPSI4NzIyIi8+PGJmIGdpPSIwIiB1ZT0iODcyMyIgdXM9Ijg3MjMiLz48YmYgZ2k9IjAiIHVlPSI4NzI0IiB1cz0iODcyNCIvPjxiZiBnaT0iMTg4IiB1ZT0iODcyNSIgdXM9Ijg3MjUiLz48YmYgZ2k9IjAiIHVlPSI4NzI2IiB1cz0iODcyNiIvPjxiZiBnaT0iMCIgdWU9Ijg3MjciIHVzPSI4NzI3Ii8+PGJmIGdpPSIwIiB1ZT0iODcyOCIgdXM9Ijg3MjgiLz48YmYgZ2k9IjI1NyIgdWU9Ijg3MjkiIHVzPSI4NzI5Ii8+PGJmIGdpPSIxNjUiIHVlPSI4NzMwIiB1cz0iODczMCIvPjxiZiBnaT0iMCIgdWU9Ijg3MzEiIHVzPSI4NzMxIi8+PGJmIGdpPSIwIiB1ZT0iODczMiIgdXM9Ijg3MzIiLz48YmYgZ2k9IjAiIHVlPSI4NzMzIiB1cz0iODczMyIvPjxiZiBnaT0iMTQ2IiB1ZT0iODczNCIgdXM9Ijg3MzQiLz48YmYgZ2k9IjE1NiIgdWU9Ijg3NDciIHVzPSI4NzQ3Ii8+PGJmIGdpPSIxNjciIHVlPSI4Nzc2IiB1cz0iODc3NiIvPjxiZiBnaT0iMTQzIiB1ZT0iODgwMCIgdXM9Ijg4MDAiLz48YmYgZ2k9IjAiIHVlPSI4ODAxIiB1cz0iODgwMSIvPjxiZiBnaT0iMCIgdWU9Ijg4MDIiIHVzPSI4ODAyIi8+PGJmIGdpPSIwIiB1ZT0iODgwMyIgdXM9Ijg4MDMiLz48YmYgZ2k9IjE0OCIgdWU9Ijg4MDUiIHVzPSI4ODA0Ii8+PGJmIGdpPSIxODUiIHVlPSI5Njc0IiB1cz0iOTY3NCIvPjxiZiBnaT0iMTkyIiB1ZT0iNjQyNTgiIHVzPSI2NDI1NyIvPjxiZiBnaT0iMCIgdWU9IjY1NTM1IiB1cz0iNjU1MzUiLz48L2JmcmFuZ2VzPjxjaWQtd2lkdGhzIHN0YXJ0LWluZGV4PSIwIj48d3ggdz0iNjAyIi8+PHd4IHc9IjAiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48L2NpZC13aWR0aHM+PC9tdWx0aWJ5dGUtZXh0cmFzPjwvZm9udC1tZXRyaWNzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8udHRmIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9uby50dGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZjBiNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8udHRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8ueG1sIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9WZXJhTW9uby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwYTg2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvVmVyYU1vbm8ueG1sCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGZvbnQtbWV0cmljcyBtZXRyaWNzLXZlcnNpb249IjIiIHR5cGU9IlRZUEUwIj48Zm9udC1uYW1lPkJpdHN0cmVhbVZlcmFTYW5zTW9uby1Sb21hbjwvZm9udC1uYW1lPjxmdWxsLW5hbWU+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vPC9mdWxsLW5hbWU+PGZhbWlseS1uYW1lPkJpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubzwvZmFtaWx5LW5hbWU+PGVtYmVkLz48Y2FwLWhlaWdodD43Mjk8L2NhcC1oZWlnaHQ+PHgtaGVpZ2h0PjU0NjwveC1oZWlnaHQ+PGFzY2VuZGVyPjc1OTwvYXNjZW5kZXI+PGRlc2NlbmRlcj4tMjQwPC9kZXNjZW5kZXI+PGJib3g+PGxlZnQ+LTQ8L2xlZnQ+PGJvdHRvbT4tMjM1PC9ib3R0b20+PHJpZ2h0PjYwNTwvcmlnaHQ+PHRvcD45Mjg8L3RvcD48L2Jib3g+PGZsYWdzPjM0PC9mbGFncz48c3RlbXY+MDwvc3RlbXY+PGl0YWxpY2FuZ2xlPjA8L2l0YWxpY2FuZ2xlPjxzdWJ0eXBlPlRZUEUwPC9zdWJ0eXBlPjxtdWx0aWJ5dGUtZXh0cmFzPjxjaWQtdHlwZT5DSURGb250VHlwZTI8L2NpZC10eXBlPjxkZWZhdWx0LXdpZHRoPjA8L2RlZmF1bHQtd2lkdGg+PGJmcmFuZ2VzPjxiZiBnaT0iMyIgdWU9IjEyNiIgdXM9IjMyIi8+PGJmIGdpPSIxNzIiIHVlPSIxNjAiIHVzPSIxNjAiLz48YmYgZ2k9IjE2MyIgdWU9IjE2MSIgdXM9IjE2MSIvPjxiZiBnaT0iMTMyIiB1ZT0iMTYzIiB1cz0iMTYyIi8+PGJmIGdpPSIxODkiIHVlPSIxNjQiIHVzPSIxNjQiLz48YmYgZ2k9IjE1MCIgdWU9IjE2NSIgdXM9IjE2NSIvPjxiZiBnaT0iMjMxIiB1ZT0iMTY2IiB1cz0iMTY2Ii8+PGJmIGdpPSIxMzQiIHVlPSIxNjciIHVzPSIxNjciLz48YmYgZ2k9IjE0MiIgdWU9IjE2OCIgdXM9IjE2OCIvPjxiZiBnaT0iMTM5IiB1ZT0iMTY5IiB1cz0iMTY5Ii8+PGJmIGdpPSIxNTciIHVlPSIxNzAiIHVzPSIxNzAiLz48YmYgZ2k9IjE2OSIgdWU9IjE3MSIgdXM9IjE3MSIvPjxiZiBnaT0iMTY0IiB1ZT0iMTcyIiB1cz0iMTcyIi8+PGJmIGdpPSIyNTYiIHVlPSIxNzMiIHVzPSIxNzMiLz48YmYgZ2k9IjEzOCIgdWU9IjE3NCIgdXM9IjE3NCIvPjxiZiBnaT0iMjE3IiB1ZT0iMTc1IiB1cz0iMTc1Ii8+PGJmIGdpPSIxMzEiIHVlPSIxNzYiIHVzPSIxNzYiLz48YmYgZ2k9IjE0NyIgdWU9IjE3NyIgdXM9IjE3NyIvPjxiZiBnaT0iMjQxIiB1ZT0iMTc5IiB1cz0iMTc4Ii8+PGJmIGdpPSIxNDEiIHVlPSIxODAiIHVzPSIxODAiLz48YmYgZ2k9IjE1MSIgdWU9IjE4MSIgdXM9IjE4MSIvPjxiZiBnaT0iMTM2IiB1ZT0iMTgyIiB1cz0iMTgyIi8+PGJmIGdpPSIxOTUiIHVlPSIxODMiIHVzPSIxODMiLz48YmYgZ2k9IjIyMSIgdWU9IjE4NCIgdXM9IjE4NCIvPjxiZiBnaT0iMjQwIiB1ZT0iMTg1IiB1cz0iMTg1Ii8+PGJmIGdpPSIxNTgiIHVlPSIxODYiIHVzPSIxODYiLz48YmYgZ2k9IjE3MCIgdWU9IjE4NyIgdXM9IjE4NyIvPjxiZiBnaT0iMjQzIiB1ZT0iMTkwIiB1cz0iMTg4Ii8+PGJmIGdpPSIxNjIiIHVlPSIxOTEiIHVzPSIxOTEiLz48YmYgZ2k9IjE3MyIgdWU9IjE5MiIgdXM9IjE5MiIvPjxiZiBnaT0iMjAxIiB1ZT0iMTkzIiB1cz0iMTkzIi8+PGJmIGdpPSIxOTkiIHVlPSIxOTQiIHVzPSIxOTQiLz48YmYgZ2k9IjE3NCIgdWU9IjE5NSIgdXM9IjE5NSIvPjxiZiBnaT0iOTgiIHVlPSIxOTciIHVzPSIxOTYiLz48YmYgZ2k9IjE0NCIgdWU9IjE5OCIgdXM9IjE5OCIvPjxiZiBnaT0iMTAwIiB1ZT0iMTk5IiB1cz0iMTk5Ii8+PGJmIGdpPSIyMDMiIHVlPSIyMDAiIHVzPSIyMDAiLz48YmYgZ2k9IjEwMSIgdWU9IjIwMSIgdXM9IjIwMSIvPjxiZiBnaT0iMjAwIiB1ZT0iMjAyIiB1cz0iMjAyIi8+PGJmIGdpPSIyMDIiIHVlPSIyMDMiIHVzPSIyMDMiLz48YmYgZ2k9IjIwNyIgdWU9IjIwNCIgdXM9IjIwNCIvPjxiZiBnaT0iMjA0IiB1ZT0iMjA3IiB1cz0iMjA1Ii8+PGJmIGdpPSIyMzIiIHVlPSIyMDgiIHVzPSIyMDgiLz48YmYgZ2k9IjEwMiIgdWU9IjIwOSIgdXM9IjIwOSIvPjxiZiBnaT0iMjEwIiB1ZT0iMjEwIiB1cz0iMjEwIi8+PGJmIGdpPSIyMDgiIHVlPSIyMTIiIHVzPSIyMTEiLz48YmYgZ2k9IjE3NSIgdWU9IjIxMyIgdXM9IjIxMyIvPjxiZiBnaT0iMTAzIiB1ZT0iMjE0IiB1cz0iMjE0Ii8+PGJmIGdpPSIyMzkiIHVlPSIyMTUiIHVzPSIyMTUiLz48YmYgZ2k9IjE0NSIgdWU9IjIxNiIgdXM9IjIxNiIvPjxiZiBnaT0iMjEzIiB1ZT0iMjE3IiB1cz0iMjE3Ii8+PGJmIGdpPSIyMTEiIHVlPSIyMTkiIHVzPSIyMTgiLz48YmYgZ2k9IjEwNCIgdWU9IjIyMCIgdXM9IjIyMCIvPjxiZiBnaT0iMjM0IiB1ZT0iMjIxIiB1cz0iMjIxIi8+PGJmIGdpPSIyMzYiIHVlPSIyMjIiIHVzPSIyMjIiLz48YmYgZ2k9IjEzNyIgdWU9IjIyMyIgdXM9IjIyMyIvPjxiZiBnaT0iMTA2IiB1ZT0iMjI0IiB1cz0iMjI0Ii8+PGJmIGdpPSIxMDUiIHVlPSIyMjUiIHVzPSIyMjUiLz48YmYgZ2k9IjEwNyIgdWU9IjIyNiIgdXM9IjIyNiIvPjxiZiBnaT0iMTA5IiB1ZT0iMjI3IiB1cz0iMjI3Ii8+PGJmIGdpPSIxMDgiIHVlPSIyMjgiIHVzPSIyMjgiLz48YmYgZ2k9IjExMCIgdWU9IjIyOSIgdXM9IjIyOSIvPjxiZiBnaT0iMTYwIiB1ZT0iMjMwIiB1cz0iMjMwIi8+PGJmIGdpPSIxMTEiIHVlPSIyMzEiIHVzPSIyMzEiLz48YmYgZ2k9IjExMyIgdWU9IjIzMiIgdXM9IjIzMiIvPjxiZiBnaT0iMTEyIiB1ZT0iMjMzIiB1cz0iMjMzIi8+PGJmIGdpPSIxMTQiIHVlPSIyMzUiIHVzPSIyMzQiLz48YmYgZ2k9IjExNyIgdWU9IjIzNiIgdXM9IjIzNiIvPjxiZiBnaT0iMTE2IiB1ZT0iMjM3IiB1cz0iMjM3Ii8+PGJmIGdpPSIxMTgiIHVlPSIyMzkiIHVzPSIyMzgiLz48YmYgZ2k9IjIzMyIgdWU9IjI0MCIgdXM9IjI0MCIvPjxiZiBnaT0iMTIwIiB1ZT0iMjQxIiB1cz0iMjQxIi8+PGJmIGdpPSIxMjIiIHVlPSIyNDIiIHVzPSIyNDIiLz48YmYgZ2k9IjEyMSIgdWU9IjI0MyIgdXM9IjI0MyIvPjxiZiBnaT0iMTIzIiB1ZT0iMjQ0IiB1cz0iMjQ0Ii8+PGJmIGdpPSIxMjUiIHVlPSIyNDUiIHVzPSIyNDUiLz48YmYgZ2k9IjEyNCIgdWU9IjI0NiIgdXM9IjI0NiIvPjxiZiBnaT0iMTg0IiB1ZT0iMjQ3IiB1cz0iMjQ3Ii8+PGJmIGdpPSIxNjEiIHVlPSIyNDgiIHVzPSIyNDgiLz48YmYgZ2k9IjEyNyIgdWU9IjI0OSIgdXM9IjI0OSIvPjxiZiBnaT0iMTI2IiB1ZT0iMjUwIiB1cz0iMjUwIi8+PGJmIGdpPSIxMjgiIHVlPSIyNTIiIHVzPSIyNTEiLz48YmYgZ2k9IjIzNSIgdWU9IjI1MyIgdXM9IjI1MyIvPjxiZiBnaT0iMjM3IiB1ZT0iMjU0IiB1cz0iMjU0Ii8+PGJmIGdpPSIxODYiIHVlPSIyNTUiIHVzPSIyNTUiLz48YmYgZ2k9IjI1MSIgdWU9IjI2MyIgdXM9IjI2MiIvPjxiZiBnaT0iMjUzIiB1ZT0iMjY5IiB1cz0iMjY4Ii8+PGJmIGdpPSIwIiB1ZT0iMjcwIiB1cz0iMjcwIi8+PGJmIGdpPSIwIiB1ZT0iMjcxIiB1cz0iMjcxIi8+PGJmIGdpPSIwIiB1ZT0iMjcyIiB1cz0iMjcyIi8+PGJmIGdpPSIyNTUiIHVlPSIyNzMiIHVzPSIyNzMiLz48YmYgZ2k9IjI0NiIgdWU9IjI4NyIgdXM9IjI4NiIvPjxiZiBnaT0iMjQ4IiB1ZT0iMzA0IiB1cz0iMzA0Ii8+PGJmIGdpPSIyMTQiIHVlPSIzMDUiIHVzPSIzMDUiLz48YmYgZ2k9IjIyNSIgdWU9IjMyMiIgdXM9IjMyMSIvPjxiZiBnaT0iMTc2IiB1ZT0iMzM5IiB1cz0iMzM4Ii8+PGJmIGdpPSIyNDkiIHVlPSIzNTEiIHVzPSIzNTAiLz48YmYgZ2k9IjIyNyIgdWU9IjM1MyIgdXM9IjM1MiIvPjxiZiBnaT0iMTg3IiB1ZT0iMzc2IiB1cz0iMzc2Ii8+PGJmIGdpPSIyMjkiIHVlPSIzODIiIHVzPSIzODEiLz48YmYgZ2k9IjE2NiIgdWU9IjQwMiIgdXM9IjQwMiIvPjxiZiBnaT0iMjE1IiB1ZT0iNzEwIiB1cz0iNzEwIi8+PGJmIGdpPSIyMjQiIHVlPSI3MTEiIHVzPSI3MTEiLz48YmYgZ2k9IjIxOCIgdWU9IjczMCIgdXM9IjcyOCIvPjxiZiBnaT0iMjIzIiB1ZT0iNzMxIiB1cz0iNzMxIi8+PGJmIGdpPSIyMTYiIHVlPSI3MzIiIHVzPSI3MzIiLz48YmYgZ2k9IjIyMiIgdWU9IjczMyIgdXM9IjczMyIvPjxiZiBnaT0iMTU5IiB1ZT0iOTM3IiB1cz0iOTM3Ii8+PGJmIGdpPSIxNTUiIHVlPSI5NjAiIHVzPSI5NjAiLz48YmYgZ2k9IjE3OCIgdWU9IjgyMTIiIHVzPSI4MjExIi8+PGJmIGdpPSIwIiB1ZT0iODIxMyIgdXM9IjgyMTMiLz48YmYgZ2k9IjAiIHVlPSI4MjE0IiB1cz0iODIxNCIvPjxiZiBnaT0iMCIgdWU9IjgyMTUiIHVzPSI4MjE1Ii8+PGJmIGdpPSIxODIiIHVlPSI4MjE3IiB1cz0iODIxNiIvPjxiZiBnaT0iMTk2IiB1ZT0iODIxOCIgdXM9IjgyMTgiLz48YmYgZ2k9IjAiIHVlPSI4MjE5IiB1cz0iODIxOSIvPjxiZiBnaT0iMTgwIiB1ZT0iODIyMSIgdXM9IjgyMjAiLz48YmYgZ2k9IjE5NyIgdWU9IjgyMjIiIHVzPSI4MjIyIi8+PGJmIGdpPSIwIiB1ZT0iODIyMyIgdXM9IjgyMjMiLz48YmYgZ2k9IjEzMCIgdWU9IjgyMjQiIHVzPSI4MjI0Ii8+PGJmIGdpPSIxOTQiIHVlPSI4MjI1IiB1cz0iODIyNSIvPjxiZiBnaT0iMTM1IiB1ZT0iODIyNiIgdXM9IjgyMjYiLz48YmYgZ2k9IjAiIHVlPSI4MjI3IiB1cz0iODIyNyIvPjxiZiBnaT0iMCIgdWU9IjgyMjgiIHVzPSI4MjI4Ii8+PGJmIGdpPSIwIiB1ZT0iODIyOSIgdXM9IjgyMjkiLz48YmYgZ2k9IjE3MSIgdWU9IjgyMzAiIHVzPSI4MjMwIi8+PGJmIGdpPSIxOTgiIHVlPSI4MjQwIiB1cz0iODI0MCIvPjxiZiBnaT0iMTkwIiB1ZT0iODI1MCIgdXM9IjgyNDkiLz48YmYgZ2k9IjI1OCIgdWU9IjgzNjQiIHVzPSI4MzY0Ii8+PGJmIGdpPSIxNDAiIHVlPSI4NDgyIiB1cz0iODQ4MiIvPjxiZiBnaT0iMTUyIiB1ZT0iODcwNiIgdXM9Ijg3MDYiLz48YmYgZ2k9IjAiIHVlPSI4NzA3IiB1cz0iODcwNyIvPjxiZiBnaT0iMCIgdWU9Ijg3MDgiIHVzPSI4NzA4Ii8+PGJmIGdpPSIwIiB1ZT0iODcwOSIgdXM9Ijg3MDkiLz48YmYgZ2k9IjE2OCIgdWU9Ijg3MTAiIHVzPSI4NzEwIi8+PGJmIGdpPSIxNTQiIHVlPSI4NzE5IiB1cz0iODcxOSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjAiIHVzPSI4NzIwIi8+PGJmIGdpPSIxNTMiIHVlPSI4NzIxIiB1cz0iODcyMSIvPjxiZiBnaT0iMjM4IiB1ZT0iODcyMiIgdXM9Ijg3MjIiLz48YmYgZ2k9IjAiIHVlPSI4NzIzIiB1cz0iODcyMyIvPjxiZiBnaT0iMCIgdWU9Ijg3MjQiIHVzPSI4NzI0Ii8+PGJmIGdpPSIxODgiIHVlPSI4NzI1IiB1cz0iODcyNSIvPjxiZiBnaT0iMCIgdWU9Ijg3MjYiIHVzPSI4NzI2Ii8+PGJmIGdpPSIwIiB1ZT0iODcyNyIgdXM9Ijg3MjciLz48YmYgZ2k9IjAiIHVlPSI4NzI4IiB1cz0iODcyOCIvPjxiZiBnaT0iMjU3IiB1ZT0iODcyOSIgdXM9Ijg3MjkiLz48YmYgZ2k9IjE2NSIgdWU9Ijg3MzAiIHVzPSI4NzMwIi8+PGJmIGdpPSIwIiB1ZT0iODczMSIgdXM9Ijg3MzEiLz48YmYgZ2k9IjAiIHVlPSI4NzMyIiB1cz0iODczMiIvPjxiZiBnaT0iMCIgdWU9Ijg3MzMiIHVzPSI4NzMzIi8+PGJmIGdpPSIxNDYiIHVlPSI4NzM0IiB1cz0iODczNCIvPjxiZiBnaT0iMTU2IiB1ZT0iODc0NyIgdXM9Ijg3NDciLz48YmYgZ2k9IjE2NyIgdWU9Ijg3NzYiIHVzPSI4Nzc2Ii8+PGJmIGdpPSIxNDMiIHVlPSI4ODAwIiB1cz0iODgwMCIvPjxiZiBnaT0iMCIgdWU9Ijg4MDEiIHVzPSI4ODAxIi8+PGJmIGdpPSIwIiB1ZT0iODgwMiIgdXM9Ijg4MDIiLz48YmYgZ2k9IjAiIHVlPSI4ODAzIiB1cz0iODgwMyIvPjxiZiBnaT0iMTQ4IiB1ZT0iODgwNSIgdXM9Ijg4MDQiLz48YmYgZ2k9IjE4NSIgdWU9Ijk2NzQiIHVzPSI5Njc0Ii8+PGJmIGdpPSIxOTIiIHVlPSI2NDI1OCIgdXM9IjY0MjU3Ii8+PGJmIGdpPSIwIiB1ZT0iNjU1MzUiIHVzPSI2NTUzNSIvPjwvYmZyYW5nZXM+PGNpZC13aWR0aHMgc3RhcnQtaW5kZXg9IjAiPjx3eCB3PSI2MDIiLz48d3ggdz0iMCIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjx3eCB3PSI2MDIiLz48d3ggdz0iNjAyIi8+PHd4IHc9IjYwMiIvPjwvY2lkLXdpZHRocz48L211bHRpYnl0ZS1leHRyYXM+PC9mb250LW1ldHJpY3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9jb21wb25lbnQudGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMjFkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wKQEAgLTAsMCArMSwzOSBAQAorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiPgorCisgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJsZXZlbCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpkOnNlY3Rpb24iPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChhbmNlc3Rvcjo6ZDpzZWN0aW9uKSsxIi8+CisgICAgICAgIDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6c2VjdDUiPjY8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3Q0Ij41PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImFuY2VzdG9yOjpzZWN0MyI+NDwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6c2VjdDIiPjM8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OnNlY3QxIj4yPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmVsZW1lbnQgbmFtZT0iaHskbGV2ZWwrMX0iIG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+dGl0bGU8L3hzbDphdHRyaWJ1dGU+CisgICAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5pZC5hdHRyaWJ1dGVzID0gMCI+CisgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiPgorICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRub2RlIi8+CisgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNvbmRpdGlvbmFsIiBzZWxlY3Q9IjAiLz4KKyAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDwveHNsOmlmPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkbm9kZSIgbW9kZT0ib2JqZWN0LnRpdGxlLm1hcmt1cCI+CisgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJhbGxvdy1hbmNob3JzIiBzZWxlY3Q9IjEiLz4KKyAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwZXJtYWxpbmsiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3hzbDplbGVtZW50PgorICA8L3hzbDp0ZW1wbGF0ZT4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjY1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDI0IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImRpdmlzaW9uLnRpdGxlIj4KKyAgICA8eHNsOnBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iLiIvPgorICAgIAorICAgIDxoMT4KKyAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj50aXRsZTwveHNsOmF0dHJpYnV0ZT4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY29uZGl0aW9uYWwiIHNlbGVjdD0iMCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iJG5vZGUiIG1vZGU9Im9iamVjdC50aXRsZS5tYXJrdXAiPgorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG5vZGUiLz4KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgICAgPC9oMT4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kcmFmdC5wbmcgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2RyYWZ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzA1MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9kcmFmdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9lbWJlZGRlZF92aWRlby54c2wgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2VtYmVkZGVkX3ZpZGVvLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmIzM2MzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9lbWJlZGRlZF92aWRlby54c2wKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCisgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIj4KKworICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiAvPgorCisgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZDpjaGFwdGVyL2Q6c2VjdGlvbi9kOm1lZGlhb2JqZWN0Ij4KKyAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIuIj4KKyAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmlkX3VybCI+CisgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9kOnZpZGVvb2JqZWN0L2Q6dmlkZW9kYXRhL0BmaWxlcmVmIiAvPgorICAgICAgICAgPC94c2w6dmFyaWFibGU+CisgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogYXV0byI+CisgICAgICAgICAgICA8b2JqZWN0IHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiB3aWR0aD0iNjQwIiBoZWlnaHQ9IjQyMCIgZGF0YT0ieyR2aWRfdXJsfT9jb2xvcjI9RkJFOUVDJmFtcDtzaG93c2VhcmNoPTAmYW1wO3ZlcnNpb249MyZhbXA7bW9kZXN0YnJhbmRpbmc9MSZhbXA7ZnM9MSI+CisgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibW92aWUiIHZhbHVlPSJ7JHZpZF91cmx9P2NvbG9yMj1GQkU5RUMmYW1wO3Nob3dzZWFyY2g9MCZhbXA7dmVyc2lvbj0zJmFtcDttb2Rlc3RicmFuZGluZz0xJmFtcDtmcz0xIiAvPgorICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9InRydWUiIC8+CisgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWxsb3dzY3JpcHRhY2Nlc3MiIHZhbHVlPSJhbHdheXMiIC8+CisgICAgICAgICAgICA8L29iamVjdD4KKyAgICAgICAgIDwvZGl2PgorICAgICAgPC94c2w6Zm9yLWVhY2g+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9wLWNvbmZpZy54bWwgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2M1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2ZvcC1jb25maWcueG1sCkBAIC0wLDAgKzEsNTggQEAKKzxmb3AgdmVyc2lvbj0iMS4wIj4KKworICA8IS0tIFN0cmljdCB1c2VyIGNvbmZpZ3VyYXRpb24gLS0+CisgIDxzdHJpY3QtY29uZmlndXJhdGlvbj50cnVlPC9zdHJpY3QtY29uZmlndXJhdGlvbj4KKworICA8IS0tIFN0cmljdCBGTyB2YWxpZGF0aW9uIC0tPgorICA8c3RyaWN0LXZhbGlkYXRpb24+dHJ1ZTwvc3RyaWN0LXZhbGlkYXRpb24+CisKKyAgIDwhLS0KKyAgICBTZXQgdGhlIGJhc2VEaXIgc28gY29tbW9uL29wZW5lZGhhbmQuc3ZnIHJlZmVyZW5jZXMgaW4gcGxhbnMgc3RpbGwKKyAgICB3b3JrIG9rLiBOb3RlLCByZWxhdGl2ZSBmaWxlIHJlZmVyZW5jZXMgdG8gY3VycmVudCBkaXIgc2hvdWxkIHN0aWxsIHdvcmsuCisgICAgLS0+CQorICA8YmFzZT4uLi90ZW1wbGF0ZTwvYmFzZT4KKyAgPGZvbnQtYmFzZT4uLi90ZW1wbGF0ZTwvZm9udC1iYXNlPgorIAorICA8IS0tIFNvdXJjZSByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgICBzaXplIG9mIHBpeGVscyBpbiBTVkcgYW5kIGJpdG1hcCBpbWFnZXMsIGRlZmF1bHQ6IDcyZHBpIC0tPgorICA8IS0tIDxzb3VyY2UtcmVzb2x1dGlvbj43Mjwvc291cmNlLXJlc29sdXRpb24+IC0tPgorICA8IS0tIFRhcmdldCByZXNvbHV0aW9uIGluIGRwaSAoZG90cy9waXhlbHMgcGVyIGluY2gpIGZvciBzcGVjaWZ5aW5nIHRoZQorICAgICAgIHRhcmdldCByZXNvbHV0aW9uIGZvciBnZW5lcmF0ZWQgYml0bWFwcywgZGVmYXVsdDogNzJkcGkgLS0+CisgIDwhLS0gPHRhcmdldC1yZXNvbHV0aW9uPjcyPC90YXJnZXQtcmVzb2x1dGlvbj4gLS0+CisgCisgIDwhLS0gZGVmYXVsdCBwYWdlLWhlaWdodCBhbmQgcGFnZS13aWR0aCwgaW4gY2FzZQorICAgICAgIHZhbHVlIGlzIHNwZWNpZmllZCBhcyBhdXRvIC0tPgorICA8ZGVmYXVsdC1wYWdlLXNldHRpbmdzIGhlaWdodD0iMTFpbiIgd2lkdGg9IjguMjZpbiIvPiAKKyAKKyAgPCEtLSA8dXNlLWNhY2hlPmZhbHNlPC91c2UtY2FjaGU+IC0tPgorIAorICA8cmVuZGVyZXJzPgorICAgIDxyZW5kZXJlciBtaW1lPSJhcHBsaWNhdGlvbi9wZGYiPgorICAgICAgPGZvbnRzPgorICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9uby54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9uby50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0ibm9ybWFsIi8+CisgICAgICAgIDwvZm9udD4KKworICAgICAgICA8Zm9udCAgbWV0cmljcy1maWxlPSJWZXJhTW9CZC54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhTW9CZC50dGYiPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYW1vbm8iIHN0eWxlPSJub3JtYWwiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisKKyAgICAgICAgPGZvbnQgIG1ldHJpY3MtZmlsZT0iVmVyYS54bWwiCisgICAgICAgICAgICAgICBrZXJuaW5nPSJ5ZXMiIAorICAgICAgICAgICAgICAgZW1iZWQtdXJsPSJWZXJhLnR0ZiI+CisgICAgICAgICAgPGZvbnQtdHJpcGxldCBuYW1lPSJ2ZXJhc2FucyIgc3R5bGU9Im5vcm1hbCIgd2VpZ2h0PSJub3JtYWwiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0ibm9ybWFsIiB3ZWlnaHQ9ImJvbGQiLz4KKyAgICAgICAgICA8Zm9udC10cmlwbGV0IG5hbWU9InZlcmFzYW5zIiBzdHlsZT0iaXRhbGljIiB3ZWlnaHQ9Im5vcm1hbCIvPgorICAgICAgICAgIDxmb250LXRyaXBsZXQgbmFtZT0idmVyYXNhbnMiIHN0eWxlPSJpdGFsaWMiIHdlaWdodD0iYm9sZCIvPgorICAgICAgICA8L2ZvbnQ+CisgICAgICAgIAorICAgICAgICA8YXV0by1kZXRlY3QvPgorICAgICAgPC9mb250cz4KKyAgICA8L3JlbmRlcmVyPgorICA8L3JlbmRlcmVycz4KKzwvZm9wPgorCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2Zvcm1hbC5vYmplY3QuaGVhZGluZy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1ZTY5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbApAQCAtMCwwICsxLDIxIEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgorICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisgIAorICA8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hbC5vYmplY3QuaGVhZGluZyI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iLiIvPgorICAgIDx4c2w6cGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIkb2JqZWN0IiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImFsbG93LWFuY2hvcnMiIHNlbGVjdD0iMSIvPgorICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgorICAgIDwveHNsOnBhcmFtPgorICAgIDxwIGNsYXNzPSJ0aXRsZSI+CisgICAgICA8Yj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdGl0bGUiLz48L2I+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJG9iamVjdCIvPgorICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICA8L3A+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvZ2xvc3MtcGVybWFsaW5rcy54c2wgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL2dsb3NzLXBlcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMTQgQEAKKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiDQorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCisgIHhtbG5zOmQ9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIg0KKyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KKw0KKyAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZ2xvc3NlbnRyeS9nbG9zc3Rlcm0iPg0KKyAgICA8eHNsOmFwcGx5LWltcG9ydHMvPg0KKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gMCI+DQorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+DQorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuLiIvPg0KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQorICAgIDwveHNsOmlmPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL29oYW5kLWNvbG9yLnN2ZyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvb2hhbmQtY29sb3Iuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MmZmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL29oYW5kLWNvbG9yLnN2ZwpAQCAtMCwwICsxLDE1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKKyAgIHhtbG5zOmNjPSJodHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy8iCisgICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCisgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgorICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgorICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCisgICB3aWR0aD0iMTQxLjE3OTk5IgorICAgaGVpZ2h0PSI1NS4zNCIKKyAgIGlkPSJzdmcyMjA3IgorICAgc29kaXBvZGk6dmVyc2lvbj0iMC4zMiIKKyAgIGlua3NjYXBlOnZlcnNpb249IjAuNDUiCisgICB2ZXJzaW9uPSIxLjAiCisgICBzb2RpcG9kaTpkb2NuYW1lPSJvaGFuZC1jb2xvci5zdmciCisgICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSIKKyAgIHNvZGlwb2RpOmRvY2Jhc2U9Ii9ob21lL21hbGx1bS9Qcm9qZWN0cy9hZG1pbi9vaC1kb2MtdG9vbHMvY29tbW9uIgorICAgc29kaXBvZGk6bW9kaWZpZWQ9InRydWUiPgorICA8ZGVmcworICAgICBpZD0iZGVmczMiIC8+CisgIDxzb2RpcG9kaTpuYW1lZHZpZXcKKyAgICAgaWQ9ImJhc2UiCisgICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKKyAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCisgICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKKyAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKKyAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKKyAgICAgaW5rc2NhcGU6em9vbT0iMS4yIgorICAgICBpbmtzY2FwZTpjeD0iMTYwIgorICAgICBpbmtzY2FwZTpjeT0iMTQ2LjIxMTg5IgorICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCisgICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKKyAgICAgaGVpZ2h0PSI1NS4zNHB4IgorICAgICB3aWR0aD0iMTQxLjE4cHgiCisgICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iNzcyIgorICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI1ODEiCisgICAgIGlua3NjYXBlOndpbmRvdy14PSI1IgorICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNDgiIC8+CisgIDxtZXRhZGF0YQorICAgICBpZD0ibWV0YWRhdGEyMjExIj4KKyAgICA8cmRmOlJERj4KKyAgICAgIDxjYzpXb3JrCisgICAgICAgICByZGY6YWJvdXQ9IiI+CisgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgorICAgICAgICA8ZGM6dHlwZQorICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgorICAgICAgPC9jYzpXb3JrPgorICAgIDwvcmRmOlJERj4KKyAgPC9tZXRhZGF0YT4KKyAgPGcKKyAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCisgICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiCisgICAgIGlkPSJsYXllcjEiPgorICAgIDxnCisgICAgICAgaWQ9ImcyMDk0IgorICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LWZpbGVuYW1lPSIvaG9tZS9tYWxsdW0vRGVza3RvcC9nMjEyNi5wbmciCisgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjMxMi43MTg0MSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMzEyLjcxODQxIgorICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNTk1NDc2NywwLDAsMC41OTU0NzY3LDMxLjc5MzA1OCwtMTguNDcxMDUyKSI+CisgICAgICA8ZworICAgICAgICAgaWQ9ImcxOSIKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiPgorICAgICAgICA8cGF0aAorICAgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgICBpZD0icGF0aDIxIgorICAgICAgICAgICBkPSJNIDQ4LjY5Myw1MC42MzMgQyA0MC4yODIsNTAuNjMzIDMzLjQzOSw1Ny40NzcgMzMuNDM5LDY1Ljg4OCBMIDMzLjQzOSw4MS4xNDIgTCA0MS4wNjYsODEuMTQyIEwgNDEuMDY2LDY1Ljg4OCBDIDQxLjA2Niw2MS42ODQgNDQuNDg2LDU4LjI2MSA0OC42OTIsNTguMjYxIEMgNTIuODk3LDU4LjI2MSA1Ni4zMiw2MS42ODQgNTYuMzIsNjUuODg4IEMgNTYuMzIsNzAuMDkzIDUyLjg5Nyw3My41MTYgNDguNjkyLDczLjUxNiBDIDQ1LjY3Nyw3My41MTYgNDMuMDY1LDcxLjc1NiA0MS44MjgsNjkuMjExIEwgNDEuODI4LDc5LjUwNCBDIDQzLjg5Miw4MC41NDkgNDYuMjI0LDgxLjE0MiA0OC42OTIsODEuMTQyIEMgNTcuMTAzLDgxLjE0MiA2My45NDcsNzQuMyA2My45NDcsNjUuODg4IEMgNjMuOTQ4LDU3LjQ3NyA1Ny4xMDQsNTAuNjMzIDQ4LjY5Myw1MC42MzMgeiAiIC8+CisgICAgICA8L2c+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjMiCisgICAgICAgICBkPSJNIDE4LjQ4Niw1MC41NTcgQyAyNi45NDIsNTAuNTU3IDMzLjgxOSw1Ny40MzUgMzMuODE5LDY1Ljg4OCBDIDMzLjgxOSw3NC4zNDQgMjYuOTQyLDgxLjIyMyAxOC40ODYsODEuMjIzIEMgMTAuMDMyLDgxLjIyMyAzLjE1Miw3NC4zNDQgMy4xNTIsNjUuODg4IEMgMy4xNTIsNTcuNDM1IDEwLjAzMiw1MC41NTcgMTguNDg2LDUwLjU1NyB6IE0gMTguNDg2LDczLjU1NiBDIDIyLjcxMyw3My41NTYgMjYuMTUzLDcwLjExOCAyNi4xNTMsNjUuODg4IEMgMjYuMTUzLDYxLjY2MSAyMi43MTMsNTguMjIyIDE4LjQ4Niw1OC4yMjIgQyAxNC4yNTgsNTguMjIyIDEwLjgxOSw2MS42NjEgMTAuODE5LDY1Ljg4OCBDIDEwLjgyLDcwLjExNyAxNC4yNTksNzMuNTU2IDE4LjQ4Niw3My41NTYgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMjUiCisgICAgICAgICBkPSJNIDk0LjA3NCwxMDcuNDY1IEwgOTQuMDc0LDk2LjAxNiBDIDk0LjA3NCw4Ny42MDUgODcuMjMzLDgwLjc2MyA3OC44MjIsODAuNzYzIEMgNzAuNDEsODAuNzYzIDYzLjU2Nyw4Ny42MDUgNjMuNTY3LDk2LjAxNiBDIDYzLjU2NywxMDQuNDI3IDcwLjQxLDExMS4yNjkgNzguODIyLDExMS4yNjkgQyA4MS4yODksMTExLjI2OSA4My42MjEsMTEwLjY3NiA4NS42ODUsMTA5LjYzMSBMIDg1LjY4NSw5OS4zMzkgQyA4NC40NDgsMTAxLjg4NSA4MS44MzYsMTAzLjY0NCA3OC44MjIsMTAzLjY0NCBDIDc0LjYxNSwxMDMuNjQ0IDcxLjE5NCwxMDAuMjIxIDcxLjE5NCw5Ni4wMTYgQyA3MS4xOTQsOTEuODEgNzQuNjE1LDg4LjM4OCA3OC44MjIsODguMzg4IEMgODMuMDI2LDg4LjM4OCA4Ni40NDgsOTEuODEgODYuNDQ4LDk2LjAxNiBMIDg2LjQ0OCwxMDcuNDU2IEMgODYuNDQ4LDEwOS41NjIgODguMTU2LDExMS4yNjggOTAuMjYyLDExMS4yNjggQyA5Mi4zNjQsMTExLjI2OSA5NC4wNjgsMTA5LjU2NiA5NC4wNzQsMTA3LjQ2NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgyNyIKKyAgICAgICAgIGQ9Ik0gMTI0LjE5Nyw5NS44MTQgQyAxMjQuMDg4LDg3LjQ5NiAxMTcuMjkzLDgwLjc2MiAxMDguOTQ5LDgwLjc2MiBDIDEwMC41OSw4MC43NjIgOTMuNzgzLDg3LjUyIDkzLjY5Nyw5NS44NTYgTCA5My42OTMsOTUuODU2IEwgOTMuNjk1LDEwNy40NTYgQyA5My42OTUsMTA5LjU2MiA5NS40MDIsMTExLjI2OCA5Ny41MDksMTExLjI2OCBDIDk5LjYxMSwxMTEuMjY4IDEwMS4zMTYsMTA5LjU2NiAxMDEuMzIxLDEwNy40NjQgTCAxMDEuMzIxLDk1Ljk5NCBMIDEwMS4zMjEsOTUuOTk0IEMgMTAxLjMzMyw5MS43OTggMTA0Ljc0Nyw4OC4zODggMTA4Ljk0OCw4OC4zODggQyAxMTMuMTQ3LDg4LjM4OCAxMTYuNTYzLDkxLjc5OCAxMTYuNTc1LDk1Ljk5NCBMIDExNi41NzUsMTA3LjQ1NiBDIDExNi41NzUsMTA5LjU2MiAxMTguMjgyLDExMS4yNjggMTIwLjM4NywxMTEuMjY4IEMgMTIyLjQ5MiwxMTEuMjY4IDEyNC4yMDEsMTA5LjU2MiAxMjQuMjAxLDEwNy40NTYgTCAxMjQuMjAxLDk1LjgxNCBMIDEyNC4xOTcsOTUuODE0IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDI5IgorICAgICAgICAgZD0iTSA2My45NDYsOTYuMDA1IEwgNjMuOTQ2LDk1Ljg1NCBMIDYzLjk0Myw5NS44NTQgTCA2My45NDMsOTUuODE1IEwgNjMuOTQyLDk1LjgxNSBDIDYzLjgzMyw4Ny40OTcgNTcuMDM3LDgwLjc2MSA0OC42OTMsODAuNzYxIEMgNDguNjgyLDgwLjc2MSA0OC42NzEsODAuNzYzIDQ4LjY1OCw4MC43NjMgQyA0OC4zODIsODAuNzYzIDQ4LjEwNyw4MC43NzIgNDcuODMzLDgwLjc4NiBDIDQ3Ljc1LDgwLjc5MSA0Ny42NjgsODAuNzk5IDQ3LjU4Niw4MC44MDYgQyA0Ny4zNzgsODAuODIyIDQ3LjE3Miw4MC44MzggNDYuOTY4LDgwLjg2MiBDIDQ2Ljg4NCw4MC44NzMgNDYuODAxLDgwLjg4MiA0Ni43MTksODAuODkzIEMgNDYuNTA4LDgwLjkyIDQ2LjI5OCw4MC45NTIgNDYuMDkxLDgwLjk4NyBDIDQ2LjAyNCw4MC45OTkgNDUuOTU4LDgxLjAxIDQ1Ljg5MSw4MS4wMjQgQyA0NS42NDksODEuMDY4IDQ1LjQwNiw4MS4xMTkgNDUuMTY4LDgxLjE3NSBDIDQ1LjE0LDgxLjE4MyA0NS4xMTIsODEuMTg5IDQ1LjA4NSw4MS4xOTUgQyA0My42NTYsODEuNTQyIDQyLjMwNiw4Mi4wOTIgNDEuMDY1LDgyLjgxMiBMIDQxLjA2NSw4MC43NjEgTCAzMy40MzgsODAuNzYxIEwgMzMuNDM4LDk1Ljg1NyBMIDMzLjQzNSw5NS44NTcgTCAzMy40MzUsMTA3LjQ1NyBDIDMzLjQzNSwxMDkuNTYzIDM1LjE0MiwxMTEuMjY5IDM3LjI0OCwxMTEuMjY5IEMgMzkuMDkzLDExMS4yNjkgNDAuNjMyLDEwOS45NTggNDAuOTg0LDEwOC4yMTcgQyA0MS4wMzYsMTA3Ljk2MyA0MS4wNjUsMTA3LjcwMiA0MS4wNjUsMTA3LjQzNSBMIDQxLjA2NSw5NS44NzMgQyA0MS4wODYsOTQuNzMyIDQxLjM1Nyw5My42NSA0MS44MjgsOTIuNjg1IEwgNDEuODI4LDkyLjY5MyBDIDQyLjU5OCw5MS4xMDYgNDMuOTA1LDg5LjgyNCA0NS41MTEsODkuMDg1IEMgNDUuNTE5LDg5LjA4IDQ1LjUyOSw4OS4wNzYgNDUuNTM2LDg5LjA3MyBDIDQ1Ljg0OSw4OC45MjggNDYuMTc0LDg4LjgwNyA0Ni41MDgsODguNzA3IEMgNDYuNTIzLDg4LjcwNCA0Ni41MzYsODguNjk5IDQ2LjU1LDg4LjY5NiBDIDQ2LjY5OSw4OC42NTEgNDYuODUsODguNjE0IDQ3LjAwNCw4OC41NzYgQyA0Ny4wMjUsODguNTc1IDQ3LjA0Niw4OC41NjcgNDcuMDY5LDg4LjU2MiBDIDQ3LjIzNCw4OC41MjcgNDcuNDAyLDg4LjQ5NSA0Ny41NzIsODguNDY5IEMgNDcuNTg2LDg4LjQ2OCA0Ny42LDg4LjQ2NiA0Ny42MTUsODguNDYzIEMgNDcuNzYzLDg4LjQ0MyA0Ny45MTYsODguNDI3IDQ4LjA2Nyw4OC40MTUgQyA0OC4xMDYsODguNDEgNDguMTQ1LDg4LjQwNyA0OC4xODYsODguNDA0IEMgNDguMzUyLDg4LjM5MyA0OC41Miw4OC4zODYgNDguNjkxLDg4LjM4NiBDIDUyLjg4OCw4OC4zODcgNTYuMzA0LDkxLjc5NyA1Ni4zMTYsOTUuOTkyIEwgNTYuMzE2LDEwNy40NTQgQyA1Ni4zMTYsMTA5LjU2IDU4LjAyMywxMTEuMjY2IDYwLjEzLDExMS4yNjYgQyA2MS45NzYsMTExLjI2NiA2My41MTYsMTA5Ljk1NCA2My44NjcsMTA4LjIxMSBDIDYzLjkxOSwxMDcuOTYzIDYzLjk0NiwxMDcuNzA2IDYzLjk0NiwxMDcuNDQyIEwgNjMuOTQ2LDk2LjAyNCBDIDYzLjk0Niw5Ni4wMjEgNjMuOTQ3LDk2LjAxOCA2My45NDcsOTYuMDE1IEMgNjMuOTQ4LDk2LjAxMSA2My45NDYsOTYuMDA4IDYzLjk0Niw5Ni4wMDUgeiAiIC8+CisgICAgICA8cGF0aAorICAgICAgICAgc3R5bGU9ImZpbGw6IzZkNmQ3MDtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgIGlkPSJwYXRoMzEiCisgICAgICAgICBkPSJNIDE4MC42NDQsNTAuNjMzIEMgMTc4LjUzOSw1MC42MzMgMTc2LjgzMiw1Mi4zNDEgMTc2LjgzMiw1NC40NDcgTCAxNzYuODMyLDY1Ljg4NyBDIDE3Ni44MzIsNzAuMDkyIDE3My40MSw3My41MTMgMTY5LjIwMyw3My41MTMgQyAxNjQuOTk4LDczLjUxMyAxNjEuNTc2LDcwLjA5MiAxNjEuNTc2LDY1Ljg4NyBDIDE2MS41NzYsNjEuNjgzIDE2NC45OTgsNTguMjYgMTY5LjIwMyw1OC4yNiBDIDE3Mi4yMTksNTguMjYgMTc0LjgzLDYwLjAxOSAxNzYuMDY4LDYyLjU2NSBMIDE3Ni4wNjgsNTIuMjcxIEMgMTc0LjAwNCw1MS4yMjUgMTcxLjY3Myw1MC42MzIgMTY5LjIwMyw1MC42MzIgQyAxNjAuNzkzLDUwLjYzMiAxNTMuOTUxLDU3LjQ3NiAxNTMuOTUxLDY1Ljg4NyBDIDE1My45NTEsNzQuMjk4IDE2MC43OTMsODEuMTQxIDE2OS4yMDMsODEuMTQxIEMgMTc3LjYxNSw4MS4xNDEgMTg0LjQ1OSw3NC4yOTggMTg0LjQ1OSw2NS44ODcgTCAxODQuNDU5LDU0LjQ0NyBDIDE4NC40NTgsNTIuMzQxIDE4Mi43NTEsNTAuNjMzIDE4MC42NDQsNTAuNjMzIHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDMzIgorICAgICAgICAgZD0iTSAxMjQuMjAzLDc3LjMzOSBMIDEyNC4yMDMsNjUuNjg3IEwgMTI0LjE5Nyw2NS42ODcgQyAxMjQuMDg4LDU3LjM3MSAxMTcuMjkzLDUwLjYzMyAxMDguOTQ5LDUwLjYzMyBDIDEwMC41OTIsNTAuNjMzIDkzLjc4Myw1Ny4zOTMgOTMuNjk3LDY1LjczMSBMIDkzLjY5NSw2NS43MzEgTCA5My42OTUsNjUuODc3IEMgOTMuNjk1LDY1Ljg4MiA5My42OTMsNjUuODg1IDkzLjY5Myw2NS44ODggQyA5My42OTMsNjUuODkxIDkzLjY5NSw2NS44OTYgOTMuNjk1LDY1Ljg5OSBMIDkzLjY5NSw3Ny4zMyBDIDkzLjY5NSw3OS40MzUgOTUuNDAyLDgxLjE0MiA5Ny41MDksODEuMTQyIEMgOTkuNjE0LDgxLjE0MiAxMDEuMzIxLDc5LjQzNSAxMDEuMzIxLDc3LjMzIEwgMTAxLjMyMSw2NS44NjggQyAxMDEuMzMzLDYxLjY3MiAxMDQuNzQ3LDU4LjI2MSAxMDguOTQ4LDU4LjI2MSBDIDExMy4xNDcsNTguMjYxIDExNi41NjMsNjEuNjcyIDExNi41NzUsNjUuODY4IEwgMTE2LjU3NSw2NS44NjggTCAxMTYuNTc1LDc3LjMyOSBDIDExNi41NzUsNzkuNDM0IDExOC4yODIsODEuMTQxIDEyMC4zODksODEuMTQxIEMgMTIyLjQ5Miw4MS4xNDIgMTI0LjE5Nyw3OS40NCAxMjQuMjAzLDc3LjMzOSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzNSIKKyAgICAgICAgIGQ9Ik0gMTUwLjUxNyw4MC43NjEgQyAxNDguNDEsODAuNzYxIDE0Ni43MDMsODIuNDY5IDE0Ni43MDMsODQuNTc1IEwgMTQ2LjcwMyw5Ni4wMTUgQyAxNDYuNzAzLDEwMC4yMiAxNDMuMjgzLDEwMy42NDMgMTM5LjA3NiwxMDMuNjQzIEMgMTM0Ljg3MSwxMDMuNjQzIDEzMS40NDksMTAwLjIyIDEzMS40NDksOTYuMDE1IEMgMTMxLjQ0OSw5MS44MDggMTM0Ljg3MSw4OC4zODcgMTM5LjA3Niw4OC4zODcgQyAxNDIuMDkyLDg4LjM4NyAxNDQuNzAzLDkwLjE0NSAxNDUuOTQxLDkyLjY5MiBMIDE0NS45NDEsODIuMzk3IEMgMTQzLjg3NSw4MS4zNTMgMTQxLjU0NSw4MC43NiAxMzkuMDc2LDgwLjc2IEMgMTMwLjY2Niw4MC43NiAxMjMuODIyLDg3LjYwNCAxMjMuODIyLDk2LjAxNSBDIDEyMy44MjIsMTA0LjQyNiAxMzAuNjY2LDExMS4yNjggMTM5LjA3NiwxMTEuMjY4IEMgMTQ3LjQ4NiwxMTEuMjY4IDE1NC4zMywxMDQuNDI2IDE1NC4zMyw5Ni4wMTUgTCAxNTQuMzMsODQuNTc1IEMgMTU0LjMzLDgyLjQ2OSAxNTIuNjIzLDgwLjc2MSAxNTAuNTE3LDgwLjc2MSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgzNyIKKyAgICAgICAgIGQ9Ik0gODIuNjI1LDc3LjM0NSBDIDgyLjYyNSw3NS4yNDcgODAuOTIzLDczLjU0NyA3OC44MjYsNzMuNTQ3IEwgNzguODI2LDgxLjE0MiBDIDgwLjkyMiw4MS4xNDIgODIuNjI1LDc5LjQ0MiA4Mi42MjUsNzcuMzQ1IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDM5IgorICAgICAgICAgZD0iTSA5MC4yNTIsNjkuNjg1IEMgOTIuMzUsNjkuNjg1IDk0LjA0OCw2Ny45ODcgOTQuMDQ4LDY1Ljg4OCBMIDg2LjQ1Myw2NS44ODggQyA4Ni40NTMsNjcuOTg2IDg4LjE1NCw2OS42ODUgOTAuMjUyLDY5LjY4NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0MSIKKyAgICAgICAgIGQ9Ik0gOTMuODMyLDc3LjMyOSBDIDkzLjgzMiw3NS4yMjMgOTIuMTI1LDczLjUxNiA5MC4wMTgsNzMuNTE2IEwgNzguODI1LDczLjUxNiBDIDc0LjYxOSw3My41MTYgNzEuMTk5LDcwLjA5MyA3MS4xOTksNjUuODg4IEMgNzEuMTk5LDYxLjY4NCA3NC42MTksNTguMjYxIDc4LjgyNSw1OC4yNjEgQyA4My4wMzIsNTguMjYxIDg2LjQ1Myw2MS42ODQgODYuNDUzLDY1Ljg4OCBDIDg2LjQ1Myw2OC45MDQgODQuNjk0LDcxLjUxNCA4Mi4xNDksNzIuNzUyIEwgOTIuNDQyLDcyLjc1MiBDIDkzLjQ4OCw3MC42ODkgOTQuMDgsNjguMzU2IDk0LjA4LDY1Ljg4OCBDIDk0LjA4LDU3LjQ3NyA4Ny4yMzcsNTAuNjMzIDc4LjgyNiw1MC42MzMgQyA3MC40MTUsNTAuNjMzIDYzLjU3MSw1Ny40NzcgNjMuNTcxLDY1Ljg4OCBDIDYzLjU3MSw3NC4zIDcwLjQxNSw4MS4xNDIgNzguODI2LDgxLjE0MiBMIDkwLjAxOCw4MS4xNDIgQyA5Mi4xMjUsODEuMTQyIDkzLjgzMiw3OS40MzUgOTMuODMyLDc3LjMyOSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0MyIKKyAgICAgICAgIGQ9Ik0gMTQyLjg2OSw3Ny4zNDUgQyAxNDIuODY5LDc1LjI0NyAxNDEuMTY4LDczLjU0NyAxMzkuMDcsNzMuNTQ3IEwgMTM5LjA3LDgxLjE0MiBDIDE0MS4xNjcsODEuMTQyIDE0Mi44NjksNzkuNDQyIDE0Mi44NjksNzcuMzQ1IHogIiAvPgorICAgICAgPHBhdGgKKyAgICAgICAgIHN0eWxlPSJmaWxsOiM2ZDZkNzA7ZmlsbC1vcGFjaXR5OjEiCisgICAgICAgICBpZD0icGF0aDQ1IgorICAgICAgICAgZD0iTSAxNTAuNDk2LDY5LjY4NSBDIDE1Mi41OTQsNjkuNjg1IDE1NC4yOTMsNjcuOTg3IDE1NC4yOTMsNjUuODg4IEwgMTQ2LjY5OSw2NS44ODggQyAxNDYuNjk5LDY3Ljk4NiAxNDguMzk4LDY5LjY4NSAxNTAuNDk2LDY5LjY4NSB6ICIgLz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojNmQ2ZDcwO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGg0NyIKKyAgICAgICAgIGQ9Ik0gMTU0LjA3Niw3Ny4zMjkgQyAxNTQuMDc2LDc1LjIyMyAxNTIuMzY3LDczLjUxNiAxNTAuMjYyLDczLjUxNiBMIDEzOS4wNyw3My41MTYgQyAxMzQuODY1LDczLjUxNiAxMzEuNDQzLDcwLjA5MyAxMzEuNDQzLDY1Ljg4OCBDIDEzMS40NDMsNjEuNjg0IDEzNC44NjUsNTguMjYxIDEzOS4wNyw1OC4yNjEgQyAxNDMuMjc1LDU4LjI2MSAxNDYuNjk5LDYxLjY4NCAxNDYuNjk5LDY1Ljg4OCBDIDE0Ni42OTksNjguOTA0IDE0NC45MzksNzEuNTE0IDE0Mi4zOTIsNzIuNzUyIEwgMTUyLjY4Nyw3Mi43NTIgQyAxNTMuNzMsNzAuNjg5IDE1NC4zMjQsNjguMzU2IDE1NC4zMjQsNjUuODg4IEMgMTU0LjMyNCw1Ny40NzcgMTQ3LjQ4LDUwLjYzMyAxMzkuMDcsNTAuNjMzIEMgMTMwLjY2LDUwLjYzMyAxMjMuODE2LDU3LjQ3NyAxMjMuODE2LDY1Ljg4OCBDIDEyMy44MTYsNzQuMyAxMzAuNjYsODEuMTQyIDEzOS4wNyw4MS4xNDIgTCAxNTAuMjYxLDgxLjE0MiBDIDE1Mi4zNjcsODEuMTQyIDE1NC4wNzYsNzkuNDM1IDE1NC4wNzYsNzcuMzI5IHogIiAvPgorICAgIDwvZz4KKyAgICA8ZworICAgICAgIGlkPSJnMjEyNiIKKyAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2Nzk1NjQsMCwwLDAuNzY3OTU2NCwtNjYuNTIwNjMxLDExLjQyOTAzKSIKKyAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMzEyLjcxODQxIgorICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIzMTIuNzE4NDEiCisgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSI+CisgICAgICA8ZworICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODYuMzM5NzUsNC4yMzk4NWUtMikiCisgICAgICAgICBzdHlsZT0iZmlsbDojMzU5OTJhO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9ImcyMTE0Ij4KKyAgICAgICAgPGcKKyAgICAgICAgICAgc3R5bGU9ImZpbGw6IzM1OTkyYTtmaWxsLW9wYWNpdHk6MSIKKyAgICAgICAgICAgaWQ9ImcyMTE2Ij4KKyAgICAgICAgICA8cGF0aAorICAgICAgICAgICAgIGlkPSJwYXRoMjExOCIKKyAgICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtODYuMzM5NzUsLTQuMjM5OTM0ZS0yKSIKKyAgICAgICAgICAgICBkPSJNIDg5Ljk2ODc1LDAuMDMxMjUgQyA4Ny45NjI3NDgsMC4wMzEyNTAwMDEgODYuMzQzNzUsMS42ODE1MDAxIDg2LjM0Mzc1LDMuNjg3NSBMIDg2LjM0Mzc1LDE3LjcxODc1IEwgODYuMzQzNzUsMTkuNjg3NSBMIDg2LjM0Mzc1LDI4LjkwNjI1IEMgODYuMzQzNzUyLDM5LjA2ODI1IDk0LjYxOTI1LDQ3LjM0Mzc1IDEwNC43ODEyNSw0Ny4zNDM3NSBMIDExMy4zNzUsNDcuMzQzNzUgTCAxMjMuMTg3NSw0Ny4zNDM3NSBMIDEyNy4xNTYyNSw0Ny4zNDM3NSBDIDEyOS4xNjMyNSw0Ny4zNDM3NDkgMTMwLjgxMjUsNDUuNzI0NzUgMTMwLjgxMjUsNDMuNzE4NzUgQyAxMzAuODEyNSw0MS43MTI3NSAxMjkuMTYzMjUsNDAuMDkzNzUgMTI3LjE1NjI1LDQwLjA5Mzc1IEwgMTIzLjE4NzUsNDAuMDkzNzUgTCAxMjMuMTg3NSwxOS42ODc1IEwgMTIzLjE4NzUsMTQuNjU2MjUgTCAxMjMuMTg3NSwzLjY4NzUgQyAxMjMuMTg3NSwxLjY4MTUgMTIxLjU2NzUsMC4wMzEyNSAxMTkuNTYyNSwwLjAzMTI1IEMgMTE3LjU1NTUsMC4wMzEyNTAwMDEgMTE1LjkzNzUsMS42ODE1MDAxIDExNS45Mzc1LDMuNjg3NSBMIDExNS45Mzc1LDE0LjI4MTI1IEMgMTE1LjExODUsMTMuNjU0MjUgMTE0LjI2Mjc1LDEzLjEwOSAxMTMuMzQzNzUsMTIuNjI1IEwgMTEzLjM0Mzc1LDMuNjg3NSBDIDExMy4zNDQ3NSwxLjY4MTUgMTExLjY5MjUsMC4wMzEyNSAxMDkuNjg3NSwwLjAzMTI1IEMgMTA3LjY4MjUsMC4wMzEyNTAwMDEgMTA2LjA2MjUsMS42ODE1MDAxIDEwNi4wNjI1LDMuNjg3NSBMIDEwNi4wNjI1LDEwLjU2MjUgQyAxMDUuNjMwNSwxMC41MzI1IDEwNS4yMjAyNSwxMC41IDEwNC43ODEyNSwxMC41IEMgMTA0LjM0MTI1LDEwLjUgMTAzLjkwMDc1LDEwLjUzMjUgMTAzLjQ2ODc1LDEwLjU2MjUgTCAxMDMuNDY4NzUsMy42ODc1IEMgMTAzLjQ2OTc1LDEuNjgxNSAxMDEuODQ5NzUsMC4wMzEyNSA5OS44NDM3NSwwLjAzMTI1IEMgOTcuODM3NzQ5LDAuMDMxMjUwMDAxIDk2LjIxODc1LDEuNjgxNTAwMSA5Ni4yMTg3NSwzLjY4NzUgTCA5Ni4yMTg3NSwxMi42MjUgQyA5NS4yOTk3NTQsMTMuMTA5IDk0LjQxMzc1LDEzLjY1NDI1IDkzLjU5Mzc1LDE0LjI4MTI1IEwgOTMuNTkzNzUsMy42ODc1IEMgOTMuNTk0NzUsMS42ODE1IDkxLjk3NDc1LDAuMDMxMjUgODkuOTY4NzUsMC4wMzEyNSB6IE0gMTA0Ljc4MTI1LDE0LjM0Mzc1IEMgMTEyLjgwODI1LDE0LjM0Mzc1IDExOS4zMTI1LDIwLjg3OTI1IDExOS4zMTI1LDI4LjkwNjI1IEMgMTE5LjMxMjUsMzYuOTMzMjUgMTEyLjgwODI1LDQzLjQ2ODc1IDEwNC43ODEyNSw0My40Njg3NSBDIDk2Ljc1NDI1NCw0My40Njg3NSA5MC4yMTg3NSwzNi45MzQyNSA5MC4yMTg3NSwyOC45MDYyNSBDIDkwLjIxODc1MiwyMC44NzgyNSA5Ni43NTMyNTMsMTQuMzQzNzUgMTA0Ljc4MTI1LDE0LjM0Mzc1IHogIgorICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiMzNTk5MmE7ZmlsbC1vcGFjaXR5OjEiIC8+CisgICAgICAgIDwvZz4KKyAgICAgIDwvZz4KKyAgICAgIDxwYXRoCisgICAgICAgICBzdHlsZT0iZmlsbDojMzU5OTJhO2ZpbGwtb3BhY2l0eToxIgorICAgICAgICAgaWQ9InBhdGgyMTIyIgorICAgICAgICAgZD0iTSAxMTIuMDQ4NzUsMjguOTEzMzk5IEMgMTEyLjA0ODc1LDI0Ljg5OTM5OSAxMDguNzgyNzUsMjEuNjM0Mzk5IDEwNC43Njk3NSwyMS42MzQzOTkgQyAxMDAuNzU2NzUsMjEuNjM0Mzk5IDk3LjQ5MDc1MywyNC45MDAzOTkgOTcuNDkwNzUzLDI4LjkxMzM5OSBDIDk3LjQ5MDc1MywzMi45MjYzOTkgMTAwLjc1Njc1LDM2LjE5MjM5OSAxMDQuNzY5NzUsMzYuMTkyMzk5IEMgMTA4Ljc4Mjc1LDM2LjE5MjM5OSAxMTIuMDQ4NzUsMzIuOTI3Mzk5IDExMi4wNDg3NSwyOC45MTMzOTkgeiAiIC8+CisgICAgPC9nPgorICA8L2c+Cis8L3N2Zz4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcGVybWFsaW5rcy54c2wgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTFjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIKKyAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUucGVybWFsaW5rIiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJwZXJtYWxpbmsudGV4dCI+wrY8L3hzbDpwYXJhbT4KKworICA8eHNsOnRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+CisgICAgPHhzbDpwYXJhbSBuYW1lPSJub2RlIi8+CisKKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gJzAnIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJwZXJtYWxpbmsiPgorICAgICAgICA8YSBhbHQ9IlBlcm1hbGluayIgdGl0bGU9IlBlcm1hbGluayI+CisgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iaHJlZiI+CisgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaHJlZi50YXJnZXQiPgorICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ib2JqZWN0IiAgc2VsZWN0PSIkbm9kZSIvPgorICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgICA8L3hzbDphdHRyaWJ1dGU+CisgICAgICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iJHBlcm1hbGluay50ZXh0Ii8+CisgICAgICAgIDwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LWRiLXBkZi54c2wgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktZGItcGRmLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGEzZGYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LWRiLXBkZi54c2wKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L2ZvL2RvY2Jvb2sueHNsIiAvPgorCisgIDwhLS0gY2hlY2sgcHJvamVjdC1wbGFuLnNoIGZvciBob3cgdGhpcyBpcyBnZW5lcmF0ZWQsIG5lZWRlZCB0byB0d2VhaworICAgICAgIHRoZSBjb3ZlciBwYWdlCisgICAgLS0+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIvdG1wL3RpdGxlcGFnZS54c2wiLz4KKworICA8IS0tIFRvIGZvcmNlIGEgcGFnZSBicmVhayBpbiBkb2N1bWVudCwgaS5lIHBlciBzZWN0aW9uIGFkZCBhCisgICAgICA8P2hhcmQtcGFnZWJyZWFrPz4gdGFnLgorICAtLT4KKyA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uKCdoYXJkLXBhZ2VicmVhaycpIj4KKyAgIDxmbzpibG9jayBicmVhay1iZWZvcmU9J3BhZ2UnIC8+CisgPC94c2w6dGVtcGxhdGU+CisKKyAgPCEtLUZpeCBmb3IgZGVmdWFsdCBpbmRlbnQgZ2V0dGluZyBUT0MgYWxsIHdpZXJkLi4KKyAgICAgIFNlZSBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL2RvY2Jvb2stYXBwcy8yMDA1LXExL21zZzAwNDU1Lmh0bWwKKyAgICAgIEZJWE1FOiBtdXN0IGJlIGEgYmV0dGVyIGZpeAorICAgIC0tPgorICA8eHNsOnBhcmFtIG5hbWU9ImJvZHkuc3RhcnQuaW5kZW50IiBzZWxlY3Q9IicwJyIvPgorICA8IS0tPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5tYXJnaW4ubGVmdCIgc2VsZWN0PSInMCciLz4tLT4KKworICA8IS0tIHN0b3AgbG9uZy1pc2ggaGVhZGVyIHRpdGxlcyBnZXR0aW5nIHdyYXBwZWQgLS0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaGVhZGVyLmNvbHVtbi53aWR0aHMiPjEgMTAgMTwveHNsOnBhcmFtPgorCisgIDwhLS0gY3VzdG9taXNlIGhlYWRlcnMgYW5kIGZvb3RlcnMgYSBsaXR0bGUgLS0+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJoZWFkLnNlcC5ydWxlIj4KKyAgIDx4c2w6aWYgdGVzdD0iJGhlYWRlci5ydWxlICE9IDAiPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItYm90dG9tLXdpZHRoIj4wLjVwdDwveHNsOmF0dHJpYnV0ZT4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLWJvdHRvbS1zdHlsZSI+c29saWQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci1ib3R0b20tY29sb3IiPiM5OTk5OTk8L3hzbDphdHRyaWJ1dGU+CisgICA8L3hzbDppZj4KKyAgPC94c2w6dGVtcGxhdGU+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb290LnNlcC5ydWxlIj4KKyAgICA8eHNsOmlmIHRlc3Q9IiRmb290ZXIucnVsZSAhPSAwIj4KKyAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iYm9yZGVyLXRvcC13aWR0aCI+MC41cHQ8L3hzbDphdHRyaWJ1dGU+CisgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImJvcmRlci10b3Atc3R5bGUiPnNvbGlkPC94c2w6YXR0cmlidXRlPgorICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJib3JkZXItdG9wLWNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICAgIDwveHNsOmlmPgorICA8L3hzbDp0ZW1wbGF0ZT4KKworICA8eHNsOmF0dHJpYnV0ZS1zZXQgbmFtZT0iaGVhZGVyLmNvbnRlbnQucHJvcGVydGllcyI+CisgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0iY29sb3IiPiM5OTk5OTk8L3hzbDphdHRyaWJ1dGU+CisgIDwveHNsOmF0dHJpYnV0ZS1zZXQ+CisKKyAgPHhzbDphdHRyaWJ1dGUtc2V0IG5hbWU9ImZvb3Rlci5jb250ZW50LnByb3BlcnRpZXMiPgorICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImNvbG9yIj4jOTk5OTk5PC94c2w6YXR0cmlidXRlPgorICA8L3hzbDphdHRyaWJ1dGUtc2V0PgorCisKKyAgPCEtLSBnZW5lcmFsIHNldHRpbmdzIC0tPgorCisgIDx4c2w6cGFyYW0gbmFtZT0iZm9wMS5leHRlbnNpb25zIiBzZWxlY3Q9IjEiPjwveHNsOnBhcmFtPgorICA8eHNsOnBhcmFtIG5hbWU9InBhcGVyLnR5cGUiIHNlbGVjdD0iJ0E0JyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0ic2VjdGlvbi5hdXRvbGFiZWwiIHNlbGVjdD0iMSI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iYm9keS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYXNhbnMnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ0aXRsZS5mb250LmZhbWlseSIgc2VsZWN0PSIndmVyYXNhbnMnIj48L3hzbDpwYXJhbT4KKyAgPHhzbDpwYXJhbSBuYW1lPSJtb25vc3BhY2UuZm9udC5mYW1pbHkiIHNlbGVjdD0iJ3ZlcmFtb25vJyI+PC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktcmVmLW1hbnVhbC5wbmcgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3ktcmVmLW1hbnVhbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NWVkYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvcG9reS1yZWYtbWFudWFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3Bva3kuc3ZnIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGVhNWUyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9wb2t5LnN2ZwpAQCAtMCwwICsxLDE2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4KKzxzdmcKKyAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCisgICB2ZXJzaW9uPSIxLjAiCisgICB3aWR0aD0iMTU4LjU2MDc2IgorICAgaGVpZ2h0PSI3OS4yODQ0MjQiCisgICB2aWV3Qm94PSItNDAuOTgxIC05Mi41OTIgMzAwIDMwMCIKKyAgIGlkPSJzdmcyIgorICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cis8ZGVmcworICAgaWQ9ImRlZnM0Ij4KKzwvZGVmcz4KKzxwYXRoCisgICBkPSJNIC0zNi41ODUzNzksNTQuNDEyNTc2IEwgLTM2LjU4NTM3OSw1NC40MjEzMDUgTCAtMzYuNTgyNDY5LDU0LjQyMTMwNSBMIC0zNi41ODI0NjksNTQuMjQzODI5IEMgLTM2LjU3OTU2LDU0LjMwMjAxOCAtMzYuNTg1Mzc5LDU0LjM1NzI5NyAtMzYuNTg1Mzc5LDU0LjQxMjU3NiB6ICIKKyAgIHN0eWxlPSJmaWxsOiM2YWM3YmQiCisgICBpZD0icGF0aDYiIC8+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzgiPgorCTxnCisgICBpZD0iZzEwIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gMjQuNDgyLDIzLjk5OCBMIDI0LjQ4MiwyMy45OTUgQyAxMC45NjEsMjMuOTk0IDAsMzQuOTU1IDAsNDguNDc2IEwgMC4wMDEsNDguNDc5IEwgMC4wMDEsNDguNDgyIEMgMC4wMDMsNjIuMDAxIDEwLjk2Miw3Mi45NiAyNC40ODIsNzIuOTYgTCAyNC40ODIsNzIuOTYgTCAwLDcyLjk2IEwgMCw5Ny40NDIgTCAwLjAwMyw5Ny40NDIgQyAxMy41MjMsOTcuNDQgMjQuNDgyLDg2LjQ4IDI0LjQ4Miw3Mi45NjEgTCAyNC40ODUsNzIuOTYxIEMgMzguMDA1LDcyLjk1OSA0OC45NjMsNjIgNDguOTYzLDQ4LjQ3OSBMIDQ4Ljk2Myw0OC40NzYgQyA0OC45NjIsMzQuOTU3IDM4LjAwMSwyMy45OTggMjQuNDgyLDIzLjk5OCB6IE0gMjQuNDgyLDUwLjkyOCBDIDIzLjEzLDUwLjkyOCAyMi4wMzQsNDkuODMyIDIyLjAzNCw0OC40OCBDIDIyLjAzNCw0Ny4xMjggMjMuMTMsNDYuMDMyIDI0LjQ4Miw0Ni4wMzIgQyAyNS44MzQsNDYuMDMyIDI2LjkzLDQ3LjEyOCAyNi45Myw0OC40OCBDIDI2LjkzLDQ5LjgzMiAyNS44MzQsNTAuOTI4IDI0LjQ4Miw1MC45MjggeiAiCisgICBzdHlsZT0iZmlsbDojZWY0MTJhIgorICAgaWQ9InBhdGgxMiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzE0Ij4KKwk8ZworICAgaWQ9ImcxNiI+CisJCTxwYXRoCisgICBkPSJNIDExOS45Niw0OC44NDIgQyAxMjAuMDI0LDQ3LjU0OCAxMjEuMDg2LDQ2LjUxNiAxMjIuMzk3LDQ2LjUxNiBDIDEyMy43MDcsNDYuNTE2IDEyNC43NjgsNDcuNTQ4IDEyNC44MzMsNDguODQzIEMgMTM3LjIxMSw0Ny42MiAxNDYuODc5LDM3LjE4MSAxNDYuODc5LDI0LjQ4MyBMIDEyMi4zOTcsMjQuNDgzIEMgMTIyLjM5NiwxMC45NjEgMTExLjQzNSwwIDk3LjkxNSwwIEwgOTcuOTE1LDI0LjQ4NSBDIDk3LjkxNywzNy4xODMgMTA3LjU4NCw0Ny42MTkgMTE5Ljk2LDQ4Ljg0MiB6IE0gMTI0LjgzMyw0OS4wODQgQyAxMjQuNzY5LDUwLjM3OSAxMjMuNzA3LDUxLjQxMSAxMjIuMzk3LDUxLjQxMSBMIDEyMi4zOTYsNTEuNDExIEwgMTIyLjM5Niw3My40NDQgTCAxNDYuODc4LDczLjQ0NCBMIDE0Ni44NzgsNzMuNDQxIEMgMTQ2Ljg3Niw2MC43NDUgMTM3LjIwOCw1MC4zMDggMTI0LjgzMyw0OS4wODQgeiBNIDExOS45NDksNDguOTYzIEwgOTcuOTE1LDQ4Ljk2MyBMIDk3LjkxNSw3My40NDIgTCA5Ny45MTUsNzMuNDQyIEMgMTEwLjYxMyw3My40NDIgMTIxLjA1Miw2My43NzQgMTIyLjI3NSw1MS4zOTkgQyAxMjAuOTgxLDUxLjMzNCAxMTkuOTQ5LDUwLjI3NCAxMTkuOTQ5LDQ4Ljk2MyB6ICIKKyAgIHN0eWxlPSJmaWxsOiNhOWM1NDIiCisgICBpZD0icGF0aDE4IiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnMjAiPgorCTxnCisgICBpZD0iZzIyIj4KKwkJPHBhdGgKKyAgIGQ9Ik0gMTY4LjkxMiw0OC45NjcgQyAxNjguOTEyLDQ3LjY1NiAxNjkuOTQ1LDQ2LjU5NiAxNzEuMjQsNDYuNTMxIEMgMTcwLjAxOCwzNC4xNTIgMTU5LjU3OSwyNC40ODIgMTQ2Ljg3OSwyNC40ODIgTCAxNDYuODc5LDQ4Ljk2MyBDIDE0Ni44NzksNjIuNDg0IDE1Ny44NCw3My40NDQgMTcxLjM2MSw3My40NDQgTCAxNzEuMzYxLDUxLjQxNCBDIDE3MC4wMDcsNTEuNDE1IDE2OC45MTIsNTAuMzE5IDE2OC45MTIsNDguOTY3IHogTSAxOTUuODQxLDQ4Ljk3OCBDIDE5NS44NDEsNDguOTczIDE5NS44NDIsNDguOTY5IDE5NS44NDIsNDguOTY0IEwgMTk1Ljg0MiwyNC40ODIgTCAxOTUuODM4LDI0LjQ4MiBDIDE4My4xNCwyNC40ODQgMTcyLjcwMiwzNC4xNTQgMTcxLjQ4Miw0Ni41MzEgQyAxNzIuNzc2LDQ2LjU5NSAxNzMuODA4LDQ3LjY1NiAxNzMuODA4LDQ4Ljk2NyBDIDE3My44MDgsNTAuMjc4IDE3Mi43NzYsNTEuMzM5IDE3MS40ODEsNTEuNDAzIEMgMTcyLjY3OSw2My41OSAxODIuODE0LDczLjE0NiAxOTUuMjQ0LDczLjQ0NSBMIDE3MS4zNjEsNzMuNDQ1IEwgMTcxLjM2MSw5Ny45MjcgTCAxNzEuMzY0LDk3LjkyNyBDIDE4NC44NzksOTcuOTI1IDE5NS44MzQsODYuOTczIDE5NS44NDIsNzMuNDYgTCAxOTUuODQ0LDczLjQ2IEwgMTk1Ljg0NCw0OC45NzkgTCAxOTUuODQxLDQ4Ljk3OCB6IE0gMTk1LjgzMiw0OC45NjQgTCAxOTUuODQyLDQ4Ljk2NCBMIDE5NS44NDIsNDguOTc4IEwgMTk1LjgzMiw0OC45NjQgeiAiCisgICBzdHlsZT0iZmlsbDojZjljNzU5IgorICAgaWQ9InBhdGgyNCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzI2Ij4KKwk8ZworICAgaWQ9ImcyOCI+CisJCTxwYXRoCisgICBkPSJNIDcwLjk5NCw0OC40NzkgTCA0OC45NjIsNDguNDc5IEwgNDguOTYyLDQ4LjQ4MSBMIDcwLjk5NSw0OC40ODEgQyA3MC45OTUsNDguNDgxIDcwLjk5NCw0OC40OCA3MC45OTQsNDguNDc5IHogTSA3My40NCwyNC4wMDEgTCA3My40MzcsMjQuMDAxIEwgNzMuNDM3LDQ2LjAzMiBDIDczLjQzOSw0Ni4wMzIgNzMuNDQsNDYuMDMyIDczLjQ0Miw0Ni4wMzIgQyA3NC43OTQsNDYuMDMyIDc1Ljg5LDQ3LjEyOCA3NS44OSw0OC40OCBDIDc1Ljg5LDQ5LjgzMiA3NC43OTQsNTAuOTI4IDczLjQ0Miw1MC45MjggQyA3Mi4wOTEsNTAuOTI4IDcwLjk5Niw0OS44MzQgNzAuOTk0LDQ4LjQ4MyBMIDQ4Ljk1OCw0OC40ODMgTCA0OC45NTgsNDguNDg2IEMgNDguOTYsNjIuMDA1IDU5LjkxOSw3Mi45NjQgNzMuNDM3LDcyLjk2NCBDIDg2Ljk1NSw3Mi45NjQgOTcuOTE0LDYyLjAwNSA5Ny45MTYsNDguNDg2IEwgOTcuOTE2LDQ4LjQ4MyBDIDk3LjkxNiwzNC45NjMgODYuOTU4LDI0LjAwMyA3My40NCwyNC4wMDEgeiAiCisgICBzdHlsZT0iZmlsbDojNmFjN2JkIgorICAgaWQ9InBhdGgzMCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzMyIj4KKwk8ZworICAgaWQ9ImczNCI+CisJCTxwYXRoCisgICBkPSJNIDI0LjQ4MiwyMy45OTggTCAyNC40ODIsMjMuOTk1IEMgMTAuOTYxLDIzLjk5NCAwLDM0Ljk1NSAwLDQ4LjQ3NiBMIDIyLjAzNCw0OC40NzYgQyAyMi4wMzYsNDcuMTI1IDIzLjEzMSw0Ni4wMzEgMjQuNDgyLDQ2LjAzMSBDIDI1LjgzNCw0Ni4wMzEgMjYuOTMsNDcuMTI3IDI2LjkzLDQ4LjQ3OSBDIDI2LjkzLDQ5LjgzMSAyNS44MzQsNTAuOTI3IDI0LjQ4Miw1MC45MjcgTCAyNC40ODIsNzIuOTM3IEMgMjQuNDY5LDU5LjQyNyAxMy41MTQsNDguNDc5IDAsNDguNDc5IEwgMCw3Mi45NiBMIDI0LjQ4MSw3Mi45NiBMIDI0LjQ4MSw3Mi45NiBMIDAsNzIuOTYgTCAwLDk3LjQ0MiBMIDAuMDAzLDk3LjQ0MiBDIDEzLjUyMyw5Ny40NCAyNC40ODIsODYuNDggMjQuNDgyLDcyLjk2MSBMIDI0LjQ4NSw3Mi45NjEgQyAzOC4wMDUsNzIuOTU5IDQ4Ljk2Myw2MiA0OC45NjMsNDguNDc5IEwgNDguOTYzLDQ4LjQ3NiBDIDQ4Ljk2MiwzNC45NTcgMzguMDAxLDIzLjk5OCAyNC40ODIsMjMuOTk4IHogIgorICAgc3R5bGU9ImZpbGw6I2VmNDEyYSIKKyAgIGlkPSJwYXRoMzYiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9ImczOCI+CisJPGcKKyAgIGlkPSJnNDAiPgorCQk8cGF0aAorICAgZD0iTSAxMjIuMzk3LDQ2LjUxNiBDIDEyMy43MDcsNDYuNTE2IDEyNC43NjgsNDcuNTQ4IDEyNC44MzMsNDguODQzIEMgMTM3LjIxMSw0Ny42MiAxNDYuODc5LDM3LjE4MSAxNDYuODc5LDI0LjQ4MyBMIDEyMi4zOTcsMjQuNDgzIEwgMTIyLjM5Nyw0Ni41MTYgTCAxMjIuMzk3LDQ2LjUxNiB6IE0gOTcuOTE1LDAgTCA5Ny45MTUsMjQuNDgyIEwgMTIyLjM5NiwyNC40ODIgQyAxMjIuMzk2LDEwLjk2MSAxMTEuNDM1LDAgOTcuOTE1LDAgeiBNIDEyMi4yNzUsNDYuNTI4IEMgMTIxLjA1MiwzNC4xNTEgMTEwLjYxMywyNC40ODIgOTcuOTE0LDI0LjQ4MiBMIDk3LjkxNCw0OC45NjQgTCA5Ny45MTQsNDguOTY0IEwgOTcuOTE0LDczLjQ0MyBMIDk3LjkxNCw3My40NDMgQyAxMTAuNjEyLDczLjQ0MyAxMjEuMDUxLDYzLjc3NSAxMjIuMjc0LDUxLjQgQyAxMjAuOTgsNTEuMzM1IDExOS45NDgsNTAuMjc1IDExOS45NDgsNDguOTY0IEMgMTE5Ljk0OSw0Ny42NTMgMTIwLjk4LDQ2LjU5MyAxMjIuMjc1LDQ2LjUyOCB6IE0gMTI0LjgzMyw0OS4wODQgQyAxMjQuNzY5LDUwLjM3OSAxMjMuNzA3LDUxLjQxMSAxMjIuMzk3LDUxLjQxMSBMIDEyMi4zOTYsNTEuNDExIEwgMTIyLjM5Niw3My40NDQgTCAxNDYuODc4LDczLjQ0NCBMIDE0Ni44NzgsNzMuNDQxIEMgMTQ2Ljg3Niw2MC43NDUgMTM3LjIwOCw1MC4zMDggMTI0LjgzMyw0OS4wODQgeiAiCisgICBzdHlsZT0iZmlsbDojYTljNTQyIgorICAgaWQ9InBhdGg0MiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzQ0Ij4KKwk8ZworICAgaWQ9Imc0NiI+CisJCTxwYXRoCisgICBkPSJNIDE3My43OTUsNDkuMSBDIDE3My43MjQsNTAuMzg5IDE3Mi42NjYsNTEuNDE1IDE3MS4zNiw1MS40MTUgQyAxNzAuMDA2LDUxLjQxNSAxNjguOTExLDUwLjMxOSAxNjguOTExLDQ4Ljk2NyBDIDE2OC45MTEsNDcuNjU2IDE2OS45NDQsNDYuNTk2IDE3MS4yMzksNDYuNTMxIEMgMTcwLjAxNywzNC4xNTIgMTU5LjU3OCwyNC40ODIgMTQ2Ljg3OCwyNC40ODIgTCAxNDYuODc4LDQ4Ljk2MyBDIDE0Ni44NzgsNjIuNDg0IDE1Ny44MzksNzMuNDQ0IDE3MS4zNiw3My40NDQgTCAxNzEuMzYsOTcuOTI2IEwgMTcxLjM2Myw5Ny45MjYgQyAxODQuODc4LDk3LjkyNCAxOTUuODMzLDg2Ljk3MiAxOTUuODQxLDczLjQ1OSBMIDE5NS44NDIsNzMuNDU5IEwgMTk1Ljg0Miw3My40NDMgTCAxOTUuODQxLDczLjQ0MyBDIDE5NS44MzMsNjAuNzUzIDE4Ni4xNjcsNTAuMzIyIDE3My43OTUsNDkuMSB6IE0gMTk1LjgzOCwyNC40ODIgQyAxODMuMTQsMjQuNDg0IDE3Mi43MDIsMzQuMTU0IDE3MS40ODIsNDYuNTMxIEMgMTcyLjc3NSw0Ni41OTUgMTczLjgwNiw0Ny42NTUgMTczLjgwOCw0OC45NjQgTCAxOTUuODQxLDQ4Ljk2NCBMIDE5NS44NDEsNDguOTc5IEMgMTk1Ljg0MSw0OC45NzQgMTk1Ljg0Miw0OC45NjkgMTk1Ljg0Miw0OC45NjQgTCAxOTUuODQyLDI0LjQ4MiBMIDE5NS44MzgsMjQuNDgyIHogIgorICAgc3R5bGU9ImZpbGw6I2Y5Yzc1OSIKKyAgIGlkPSJwYXRoNDgiIC8+CisJPC9nPgorPC9nPgorPGcKKyAgIHRyYW5zZm9ybT0ibWF0cml4KDIuOTA5NDE5MywwLDAsMi45MDk0MTkzLC0xNzkuMDMwNTUsLTg2LjYyNDQzNSkiCisgICBzdHlsZT0ib3BhY2l0eTowLjY1IgorICAgaWQ9Imc1MCI+CisJPGcKKyAgIGlkPSJnNTIiPgorCQk8cGF0aAorICAgZD0iTSA3MS4wMDcsNDguMzQ3IEMgNzEuMDc1LDQ3LjEwNSA3Mi4wNjIsNDYuMTE3IDczLjMwNCw0Ni4wNDYgQyA3Mi41MDksMzguMDIgNjcuODUsMzEuMTMzIDYxLjIwMSwyNy4yODQgQyA1Ny42MDEsMjUuMiA1My40MjQsMjQgNDguOTY1LDI0IEwgNDguOTYyLDI0IEMgNDguOTYyLDI4LjQ2IDUwLjE2MSwzMi42MzggNTIuMjQ1LDM2LjI0IEMgNTYuMDkzLDQyLjg5MSA2Mi45OCw0Ny41NTIgNzEuMDA3LDQ4LjM0NyB6IE0gNDguOTYyLDQ4LjQxOCBDIDQ4Ljk2Miw0OC40MzggNDguOTYxLDQ4LjQ1NiA0OC45NjEsNDguNDc2IEwgNDguOTYxLDQ4LjQ3OSBMIDQ4Ljk2Miw0OC40NzkgTCA0OC45NjIsNDguNDE4IHogTSA3MC45OTUsNDguNDgyIEMgNzAuOTk1LDQ4LjQ4MSA3MC45OTUsNDguNDgxIDcwLjk5NSw0OC40OCBMIDQ4Ljk2Miw0OC40OCBMIDQ4Ljk2Miw0OC40ODIgTCA3MC45OTUsNDguNDgyIHogTSA3My40NCwyNC4wMDEgTCA3My40MzcsMjQuMDAxIEwgNzMuNDM3LDQ2LjAzMiBDIDczLjQzOSw0Ni4wMzIgNzMuNDQsNDYuMDMyIDczLjQ0Miw0Ni4wMzIgQyA3NC43OTQsNDYuMDMyIDc1Ljg5LDQ3LjEyOCA3NS44OSw0OC40OCBDIDc1Ljg5LDQ5LjgzMiA3NC43OTQsNTAuOTI4IDczLjQ0Miw1MC45MjggQyA3Mi4wOTEsNTAuOTI4IDcwLjk5Niw0OS44MzQgNzAuOTk0LDQ4LjQ4MyBMIDQ4Ljk1OCw0OC40ODMgTCA0OC45NTgsNDguNDg2IEMgNDguOTYsNjIuMDA1IDU5LjkxOSw3Mi45NjQgNzMuNDM3LDcyLjk2NCBDIDg2Ljk1NSw3Mi45NjQgOTcuOTE0LDYyLjAwNSA5Ny45MTYsNDguNDg2IEwgOTcuOTE2LDQ4LjQ4MyBDIDk3LjkxNiwzNC45NjMgODYuOTU4LDI0LjAwMyA3My40NCwyNC4wMDEgeiAiCisgICBzdHlsZT0iZmlsbDojNmFjN2JkIgorICAgaWQ9InBhdGg1NCIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzU2Ij4KKwk8ZworICAgaWQ9Imc1OCI+CisJCTxwYXRoCisgICBkPSJNIDI0LjQ4MiwyMy45OTggTCAyNC40ODIsMjMuOTk1IEMgMTAuOTYxLDIzLjk5NCAwLDM0Ljk1NSAwLDQ4LjQ3NiBMIDIyLjAzNCw0OC40NzYgQyAyMi4wMzYsNDcuMTI1IDIzLjEzMSw0Ni4wMzEgMjQuNDgyLDQ2LjAzMSBDIDI1LjgzNCw0Ni4wMzEgMjYuOTMsNDcuMTI3IDI2LjkzLDQ4LjQ3OSBDIDI2LjkzLDQ5LjgzMSAyNS44MzQsNTAuOTI3IDI0LjQ4Miw1MC45MjcgQyAyMy4xNzEsNTAuOTI3IDIyLjExLDQ5Ljg5NCAyMi4wNDYsNDguNiBDIDkuNjY5LDQ5LjgyNCAwLjAwMSw2MC4yNjIgMC4wMDEsNzIuOTYgTCAwLDcyLjk2IEwgMCw5Ny40NDIgTCAwLjAwMyw5Ny40NDIgQyAxMy41MjMsOTcuNDQgMjQuNDgyLDg2LjQ4IDI0LjQ4Miw3Mi45NjEgTCAyNC40ODUsNzIuOTYxIEMgMzguMDA1LDcyLjk1OSA0OC45NjMsNjIgNDguOTYzLDQ4LjQ3OSBMIDQ4Ljk2Myw0OC40NzYgQyA0OC45NjIsMzQuOTU3IDM4LjAwMSwyMy45OTggMjQuNDgyLDIzLjk5OCB6ICIKKyAgIHN0eWxlPSJmaWxsOiNlZjQxMmEiCisgICBpZD0icGF0aDYwIiAvPgorCTwvZz4KKzwvZz4KKzxnCisgICB0cmFuc2Zvcm09Im1hdHJpeCgyLjkwOTQxOTMsMCwwLDIuOTA5NDE5MywtMTc5LjAzMDU1LC04Ni42MjQ0MzUpIgorICAgc3R5bGU9Im9wYWNpdHk6MC42NSIKKyAgIGlkPSJnNjIiPgorCTxnCisgICBpZD0iZzY0Ij4KKwkJPHBhdGgKKyAgIGQ9Ik0gMTE5Ljk0OSw0OC45NjMgQyAxMTkuOTQ5LDQ3LjYxMSAxMjEuMDQ1LDQ2LjUxNSAxMjIuMzk3LDQ2LjUxNSBDIDEyMy43MDcsNDYuNTE1IDEyNC43NjgsNDcuNTQ3IDEyNC44MzMsNDguODQyIEMgMTM3LjIxMSw0Ny42MTkgMTQ2Ljg3OSwzNy4xOCAxNDYuODc5LDI0LjQ4MiBMIDEyMi4zOTcsMjQuNDgyIEMgMTIyLjM5NiwxMC45NjEgMTExLjQzNSwwIDk3LjkxNSwwIEwgOTcuOTE1LDI0LjQ4MiBMIDEyMi4zOTQsMjQuNDgyIEMgMTA4Ljg3NCwyNC40ODQgOTcuOTE2LDM1LjQ0NCA5Ny45MTYsNDguOTYzIEwgOTcuOTE2LDQ4Ljk2MyBMIDk3LjkxNiw3My40NDIgTCA5Ny45MTYsNzMuNDQyIEMgMTEwLjYxNCw3My40NDIgMTIxLjA1Myw2My43NzQgMTIyLjI3Niw1MS4zOTkgQyAxMjAuOTgxLDUxLjMzNCAxMTkuOTQ5LDUwLjI3NCAxMTkuOTQ5LDQ4Ljk2MyB6IE0gMTI0LjgzMyw0OS4wODQgQyAxMjQuNzY5LDUwLjM3OSAxMjMuNzA3LDUxLjQxMSAxMjIuMzk3LDUxLjQxMSBMIDEyMi4zOTYsNTEuNDExIEwgMTIyLjM5Niw3My40NDQgTCAxNDYuODc4LDczLjQ0NCBMIDE0Ni44NzgsNzMuNDQxIEMgMTQ2Ljg3Niw2MC43NDUgMTM3LjIwOCw1MC4zMDggMTI0LjgzMyw0OS4wODQgeiAiCisgICBzdHlsZT0iZmlsbDojYTljNTQyIgorICAgaWQ9InBhdGg2NiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzY4Ij4KKwk8ZworICAgaWQ9Imc3MCI+CisJCTxwYXRoCisgICBkPSJNIDE5NS44NDEsNDguOTc5IEwgMTk1LjgzNSw0OC45NjQgTCAxOTUuODQxLDQ4Ljk2NCBMIDE5NS44NDEsNDguOTc5IEMgMTk1Ljg0MSw0OC45NzQgMTk1Ljg0Miw0OC45NjkgMTk1Ljg0Miw0OC45NjQgTCAxOTUuODQyLDI0LjQ4MiBMIDE5NS44MzgsMjQuNDgyIEMgMTgzLjE0LDI0LjQ4NCAxNzIuNzAyLDM0LjE1NCAxNzEuNDgyLDQ2LjUzMSBDIDE3Mi43NzYsNDYuNTk1IDE3My44MDgsNDcuNjU2IDE3My44MDgsNDguOTY3IEMgMTczLjgwOCw1MC4zMTkgMTcyLjcxMiw1MS40MTUgMTcxLjM2MSw1MS40MTUgQyAxNzAuMDA3LDUxLjQxNSAxNjguOTEyLDUwLjMxOSAxNjguOTEyLDQ4Ljk2NyBDIDE2OC45MTIsNDcuNjU2IDE2OS45NDUsNDYuNTk2IDE3MS4yNCw0Ni41MzEgQyAxNzAuMDE4LDM0LjE1MiAxNTkuNTc5LDI0LjQ4MiAxNDYuODc5LDI0LjQ4MiBMIDE0Ni44NzksNDguOTYzIEMgMTQ2Ljg3OSw2Mi40ODQgMTU3Ljg0LDczLjQ0NCAxNzEuMzYxLDczLjQ0NCBMIDE3MS4zNjEsOTcuOTI2IEwgMTcxLjM2NCw5Ny45MjYgQyAxODQuODgzLDk3LjkyNCAxOTUuODQzLDg2Ljk2MyAxOTUuODQzLDczLjQ0NCBMIDE3MS45NTksNzMuNDQ0IEMgMTg1LjIwMyw3My4xMjYgMTk1Ljg0MSw2Mi4yOTkgMTk1Ljg0MSw0OC45NzkgeiAiCisgICBzdHlsZT0iZmlsbDojZjljNzU5IgorICAgaWQ9InBhdGg3MiIgLz4KKwk8L2c+Cis8L2c+Cis8ZworICAgdHJhbnNmb3JtPSJtYXRyaXgoMi45MDk0MTkzLDAsMCwyLjkwOTQxOTMsLTE3OS4wMzA1NSwtODYuNjI0NDM1KSIKKyAgIHN0eWxlPSJvcGFjaXR5OjAuNjUiCisgICBpZD0iZzc0Ij4KKwk8ZworICAgaWQ9Imc3NiI+CisJCTxwYXRoCisgICBkPSJNIDczLjQ0LDI0LjAwMSBMIDczLjQzNywyNC4wMDEgQyA1OS45MTksMjQuMDAzIDQ4Ljk2LDM0Ljk1OSA0OC45NTgsNDguNDc2IEwgNDguOTU4LDQ4LjQ3OSBMIDQ4Ljk2MSw0OC40NzkgTCA0OC45NjEsNDguNDgxIEwgNDguOTU3LDQ4LjQ4MiBMIDQ4Ljk1Nyw0OC40ODUgQyA0OC45NTksNjIuMDA0IDU5LjkxOCw3Mi45NjMgNzMuNDM2LDcyLjk2MyBDIDg2Ljk1NCw3Mi45NjMgOTcuOTEzLDYyLjAwNCA5Ny45MTUsNDguNDg1IEwgOTcuOTE1LDQ4LjQ4MiBDIDk3LjkxNiwzNC45NjMgODYuOTU4LDI0LjAwMyA3My40NCwyNC4wMDEgeiBNIDczLjQ0Miw1MC45MjggQyA3Mi4wOSw1MC45MjggNzAuOTk0LDQ5LjgzMiA3MC45OTQsNDguNDggQyA3MC45OTQsNDcuMTI4IDcyLjA5LDQ2LjAzMiA3My40NDIsNDYuMDMyIEMgNzQuNzk0LDQ2LjAzMiA3NS44OSw0Ny4xMjggNzUuODksNDguNDggQyA3NS44OSw0OS44MzIgNzQuNzk0LDUwLjkyOCA3My40NDIsNTAuOTI4IHogIgorICAgc3R5bGU9ImZpbGw6IzZhYzdiZCIKKyAgIGlkPSJwYXRoNzgiIC8+CisJPC9nPgorPC9nPgorPC9zdmc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9xYS1jb2RlLXBlcm1hbGlua3MueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDkwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3FhLWNvZGUtcGVybWFsaW5rcy54c2wKQEAgLTAsMCArMSwyMyBAQAorPCEtLQ0KK1RoaXMgWFNMIHNoZWV0IGVuYWJsZXMgY3JlYXRpb24gb2YgcGVybWFsaW5rcyBmb3IgPHBhcmE+PGNvZGU+DQorY29uc3RydWN0cy4gIFJpZ2h0IG5vdywgdGhpcyBjb25zdHJ1Y3Qgb2NjdXJzIG9ubHkgaW4gdGhlIHJlZi1tYW51YWwNCitib29rJ3MgcWEgaXNzdWVzIGFuZCB3YXJuaW5ncyBjaGFwdGVyLiAgSG93ZXZlciwgaWYgdGhlIGNvbnN0cnVjdA0KK3dlcmUgdG8gYXBwZWFyIGFueXdoZXJlIGluIHRoYXQgcmVmLW1hbnVhbCwgYSBwZXJtYWxpbmsgd291bGQgYmUNCitnZW5lcmF0ZWQuICBJIGRvbid0IGZvcmVzZWUgYW55IDxwYXJhPjxjb2RlPiBjb25zdHJ1Y3RzIGJlaW5nIHVzZWQNCitpbiB0aGUgZnV0dXJlIGJ1dCBpZiB0aGV5IGFyZSB0aGVuIGEgcGVybWFsaW5rIHdpdGggYSBnZW5lcmljYWxseQ0KK251bWJlcmVkIHBlcm1hbGluayB3b3VsZCBiZSBnZW5lcmF0ZWQuDQorLS0+DQorPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCINCisgIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIg0KKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siDQorICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQorDQorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwYXJhL2NvZGUiPg0KKyAgICA8eHNsOmFwcGx5LWltcG9ydHMvPg0KKyAgICA8eHNsOmlmIHRlc3Q9IiRnZW5lcmF0ZS5wZXJtYWxpbmsgIT0gMCI+DQorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBlcm1hbGluayI+DQorICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSIuLiIvPg0KKyAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQorICAgIDwveHNsOmlmPg0KKyAgPC94c2w6dGVtcGxhdGU+DQorPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3NlY3Rpb24udGl0bGUueHNsIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZmZjlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbApAQCAtMCwwICsxLDU1IEBACis8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgorICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKyAgeG1sbnM6ZD0iaHR0cDovL2RvY2Jvb2sub3JnL25zL2RvY2Jvb2siCisgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZCI+CisKKyAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InNlY3Rpb24iCisgICAgICBzZWxlY3Q9IihhbmNlc3Rvcjo6c2VjdGlvbiB8CisgICAgICAgICAgICAgICBhbmNlc3Rvcjo6c2ltcGxlc2VjdHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MXwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0MnwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0M3wKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NHwKKyAgICAgICAgICAgICAgIGFuY2VzdG9yOjpzZWN0NSlbbGFzdCgpXSIvPgorCisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZW5kZXJhcyI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0MSciPjE8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3QyJyI+MjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkc2VjdGlvbi9AcmVuZGVyYXMgPSAnc2VjdDMnIj4zPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRzZWN0aW9uL0ByZW5kZXJhcyA9ICdzZWN0NCciPjQ8L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHNlY3Rpb24vQHJlbmRlcmFzID0gJ3NlY3Q1JyI+NTwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSInJyIvPjwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKworICAgIDx4c2w6dmFyaWFibGUgbmFtZT0ibGV2ZWwiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkcmVuZGVyYXMgIT0gJyciPgorICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkcmVuZGVyYXMiLz4KKyAgICAgICAgPC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+CisgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24ubGV2ZWwiPgorICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iJHNlY3Rpb24iLz4KKyAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgorICAgICAgICA8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisKKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdGlvbi5oZWFkaW5nIj4KKyAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJzZWN0aW9uIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ibGV2ZWwiIHNlbGVjdD0iJGxldmVsIi8+CisgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idGl0bGUiPgorICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9IiRzZWN0aW9uIiBtb2RlPSJvYmplY3QudGl0bGUubWFya3VwIj4KKyAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iYWxsb3ctYW5jaG9ycyIgc2VsZWN0PSIxIi8+CisgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KKyAgICAgICAgPHhzbDppZiB0ZXN0PSIkbGV2ZWwgJmd0OyAwIj4KKyAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGVybWFsaW5rIj4KKyAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9IiRzZWN0aW9uIi8+CisgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKyAgICAgICAgPC94c2w6aWY+CisgICAgICA8L3hzbDp3aXRoLXBhcmFtPgorICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdGVtcGxhdGUvdGl0bGVwYWdlLnRlbXBsYXRlcy54bWwgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1M2YxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3RpdGxlcGFnZS50ZW1wbGF0ZXMueG1sCkBAIC0wLDAgKzEsMTIyNyBAQAorPCFET0NUWVBFIHQ6dGVtcGxhdGVzIFsKKzwhRU5USVRZIGhzaXplMCAiMTBwdCI+Cis8IUVOVElUWSBoc2l6ZTEgIjEycHQiPgorPCFFTlRJVFkgaHNpemUyICIxNC40cHQiPgorPCFFTlRJVFkgaHNpemUzICIxNy4yOHB0Ij4KKzwhRU5USVRZIGhzaXplNCAiMjAuNzM2cHQiPgorPCFFTlRJVFkgaHNpemU1ICIyNC44ODMycHQiPgorPCFFTlRJVFkgaHNpemUwc3BhY2UgIjcuNXB0Ij4gPCEtLSAwLjc1ICogaHNpemUwIC0tPgorPCFFTlRJVFkgaHNpemUxc3BhY2UgIjlwdCI+IDwhLS0gMC43NSAqIGhzaXplMSAtLT4KKzwhRU5USVRZIGhzaXplMnNwYWNlICIxMC44cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTIgLS0+Cis8IUVOVElUWSBoc2l6ZTNzcGFjZSAiMTIuOTZwdCI+IDwhLS0gMC43NSAqIGhzaXplMyAtLT4KKzwhRU5USVRZIGhzaXplNHNwYWNlICIxNS41NTJwdCI+IDwhLS0gMC43NSAqIGhzaXplNCAtLT4KKzwhRU5USVRZIGhzaXplNXNwYWNlICIxOC42NjI0cHQiPiA8IS0tIDAuNzUgKiBoc2l6ZTUgLS0+CitdPgorPHQ6dGVtcGxhdGVzIHhtbG5zOnQ9Imh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2sveHNsL3RlbXBsYXRlLzEuMCIKKwkgICAgIHhtbG5zOnBhcmFtPSJodHRwOi8vbndhbHNoLmNvbS9kb2Nib29rL3hzbC90ZW1wbGF0ZS8xLjAvcGFyYW0iCisgICAgICAgICAgICAgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKyAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgJElkOiB0aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCx2IDEuMjMgMjAwMy8xMi8xNiAwMDozMDo0OSBib2JzdGF5dG9uIEV4cCAkCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERvY0Jvb2sgWFNMIFN0eWxlc2hlZXQgZGlzdHJpYnV0aW9uLgorICAgICBTZWUgLi4vUkVBRE1FIG9yIGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8gZm9yIGNvcHlyaWdodAorICAgICBhbmQgb3RoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImFydGljbGUiIHQ6d3JhcHBlcj0iZm86YmxvY2siCisgICAgICAgICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iPgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iCisgICAgICAgICAgICAgdGV4dC1hbGlnbj0iY2VudGVyIj4KKworICAgIDxtZWRpYW9iamVjdC8+CSAgICAgCisKKyAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmFydGljbGVbMV0iCisJICAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisKKyAgICA8c3VidGl0bGUgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6YXJ0aWNsZVsxXSIKKwkgICBrZWVwLXdpdGgtbmV4dD0iYWx3YXlzIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8Y29ycGF1dGhvciBzcGFjZS1iZWZvcmU9IjAuNWVtIgorICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiLz4KKyAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorICAgIDxhdXRob3Igc3BhY2UtYmVmb3JlPSIwLjVlbSIKKyAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiIAorICAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuOGVtIi8+CisKKyAgICA8ZW1haWwgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgPG90aGVyY3JlZGl0IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8cmVsZWFzZWluZm8gc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxjb3B5cmlnaHQgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxsZWdhbG5vdGljZSB0ZXh0LWFsaWduPSJzdGFydCIKKyAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ9IjAuNWluIgorICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ9IjAuNWluIgorICAgICAgICAgICAgICAgICBmb250LWZhbWlseT0ieyRib2R5LmZvbnRzZXR9Ii8+CisgICAgPHB1YmRhdGUgc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorCTxwYXJhPjwvcGFyYT4KKyAgICA8cmV2aXNpb24gc3BhY2UtYmVmb3JlPSIwLjVlbSIvPgorICAgIDxyZXZoaXN0b3J5IHNwYWNlLWJlZm9yZT0iMC41ZW0iLz4KKyAgICA8YWJzdHJhY3Qgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICB0ZXh0LWFsaWduPSJzdGFydCIKKwkgICAgICBtYXJnaW4tbGVmdD0iMC41aW4iCisgICAgICAgICAgICAgIG1hcmdpbi1yaWdodD0iMC41aW4iCisgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JGJvZHkuZm9udHNldH0iLz4KKworICAgIDxwYXJhPjwvcGFyYT4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZXQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpzZXRbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYm9vayIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisKKyAgICAgIDxtZWRpYW9iamVjdC8+CSAgICAgCisKKyAgICAgIDxzdWJ0aXRsZQorCQl0ZXh0LWFsaWduPSJjZW50ZXIiCisJCWZvbnQtc2l6ZT0iJmhzaXplNDsiCisJCXNwYWNlLWJlZm9yZT0iJmhzaXplNHNwYWNlOyIKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJCSAga2VlcC13aXRoLW5leHQ9ImFsd2F5cyIKKwkJICBzcGFjZS1iZWZvcmU9IjJpbiIvPgorICAgICAgPGF1dGhvcmdyb3VwIHNwYWNlLWJlZm9yZT0iMmluIi8+CisgICAgICA8YXV0aG9yIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICAgc3BhY2UtYmVmb3JlPSImaHNpemUyc3BhY2U7IgorCSAgICAgIGtlZXAtd2l0aC1uZXh0PSJhbHdheXMiLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgICA8Y29ycGF1dGhvci8+CisgICAgICA8YXV0aG9yZ3JvdXAgdDpuYW1lZC10ZW1wbGF0ZT0idmVyc28uYXV0aG9yZ3JvdXAiLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxwdWJkYXRlIHNwYWNlLWJlZm9yZT0iMWVtIi8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgICA8bGVnYWxub3RpY2UgZm9udC1zaXplPSI4cHQiLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgICA8Zm86YmxvY2sgYnJlYWstYWZ0ZXI9InBhZ2UiLz4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICAgIDxmbzpibG9jayBicmVhay1hZnRlcj0icGFnZSIvPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InBhcnQiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpwYXJ0WzFdIgorCSAgICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIHNwYWNlLWJlZm9yZT0iJmhzaXplNXNwYWNlOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICAgZm9udC1zaXplPSImaHNpemU0OyIKKwkgICAgICBzcGFjZS1iZWZvcmU9IiZoc2l6ZTRzcGFjZTsiCisJICAgICAgZm9udC13ZWlnaHQ9J2JvbGQnCisJICAgICAgZm9udC1zdHlsZT0naXRhbGljJworCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icGFydGludHJvIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgdGV4dC1hbGlnbj0iY2VudGVyIgorCSAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgc3BhY2UtYmVmb3JlPSIxZW0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICAgZm9udC1zaXplPSImaHNpemUyOyIKKwkgICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgICBmb250LXN0eWxlPSJpdGFsaWMiCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZlcmVuY2UiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZGl2aXNpb24udGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpyZWZlcmVuY2VbMV0iCisJICAgICB0ZXh0LWFsaWduPSJjZW50ZXIiCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgc3BhY2UtYmVmb3JlPSImaHNpemU1c3BhY2U7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgIHRleHQtYWxpZ249ImNlbnRlciIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnN5bm9wc2lzZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJyZWZzZWN0MSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icmVmc2VjdDIiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InJlZnNlY3QzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImRlZGljYXRpb24iIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6ZGVkaWNhdGlvblsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0icHJlZmFjZSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpwcmVmYWNlWzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgICAgPGNvcnBhdXRob3IvPgorICAgICAgPGF1dGhvcmdyb3VwLz4KKyAgICAgIDxhdXRob3IvPgorICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iY2hhcHRlciIgdDp3cmFwcGVyPSJmbzpibG9jayIKKyAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ij4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIiBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iPgorICAgICAgPHRpdGxlIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmNoYXB0ZXJbMV0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTU7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKworICAgICAgPHN1YnRpdGxlIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJCWZvbnQtc3R5bGU9Iml0YWxpYyIKKwkJZm9udC1zaXplPSImaHNpemUyOyIKKwkJZm9udC13ZWlnaHQ9ImJvbGQiLz4KKworICAgICAgPGNvcnBhdXRob3IgIHNwYWNlLWJlZm9yZT0iMC41ZW0iCisJICAgICAgICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisgICAgICAgICAgICAgICAgICAgZm9udC1zaXplPSImaHNpemUyOyIvPgorCisgICAgICA8YXV0aG9yZ3JvdXAgc3BhY2UtYmVmb3JlPSIwLjVlbSIKKwkgICAgICAgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKyAgICAgICAgICAgICAgICAgICBmb250LXNpemU9IiZoc2l6ZTI7Ii8+CisKKyAgICAgIDxhdXRob3IgICAgICBzcGFjZS1iZWZvcmU9IjAuNWVtIgorCSAgICAgICAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZT0iJmhzaXplMjsiLz4KKworICAgICAgPG90aGVyY3JlZGl0Lz4KKyAgICAgIDxyZWxlYXNlaW5mby8+CisgICAgICA8Y29weXJpZ2h0Lz4KKyAgICAgIDxsZWdhbG5vdGljZS8+CisgICAgICA8cHViZGF0ZS8+CisgICAgICA8cmV2aXNpb24vPgorICAgICAgPHJldmhpc3RvcnkvPgorICAgICAgPGFic3RyYWN0Lz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYXBwZW5kaXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjphcHBlbmRpeFsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICAgIDxjb3JwYXV0aG9yLz4KKyAgICAgIDxhdXRob3Jncm91cC8+CisgICAgICA8YXV0aG9yLz4KKyAgICAgIDxvdGhlcmNyZWRpdC8+CisgICAgICA8cmVsZWFzZWluZm8vPgorICAgICAgPGNvcHlyaWdodC8+CisgICAgICA8bGVnYWxub3RpY2UvPgorICAgICAgPHB1YmRhdGUvPgorICAgICAgPHJldmlzaW9uLz4KKyAgICAgIDxyZXZoaXN0b3J5Lz4KKyAgICAgIDxhYnN0cmFjdC8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0aW9uIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0MSIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDIiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNlY3QzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgPHRpdGxlCisJICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPHN1YnRpdGxlCisJICAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8Y29ycGF1dGhvci8+CisgICAgPGF1dGhvcmdyb3VwLz4KKyAgICA8YXV0aG9yLz4KKyAgICA8b3RoZXJjcmVkaXQvPgorICAgIDxyZWxlYXNlaW5mby8+CisgICAgPGNvcHlyaWdodC8+CisgICAgPGxlZ2Fsbm90aWNlLz4KKyAgICA8cHViZGF0ZS8+CisgICAgPHJldmlzaW9uLz4KKyAgICA8cmV2aGlzdG9yeS8+CisgICAgPGFic3RyYWN0Lz4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1iZWZvcmU+Cis8L3Q6dGl0bGVwYWdlPgorCis8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJzZWN0NCIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgIDx0aXRsZQorCSAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxzdWJ0aXRsZQorCSAgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPGNvcnBhdXRob3IvPgorICAgIDxhdXRob3Jncm91cC8+CisgICAgPGF1dGhvci8+CisgICAgPG90aGVyY3JlZGl0Lz4KKyAgICA8cmVsZWFzZWluZm8vPgorICAgIDxjb3B5cmlnaHQvPgorICAgIDxsZWdhbG5vdGljZS8+CisgICAgPHB1YmRhdGUvPgorICAgIDxyZXZpc2lvbi8+CisgICAgPHJldmhpc3RvcnkvPgorICAgIDxhYnN0cmFjdC8+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorPC90OnRpdGxlcGFnZT4KKworPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2VjdDUiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9InNpbXBsZXNlY3QiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICA8dGl0bGUKKwkgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8c3VidGl0bGUKKwkgICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDxjb3JwYXV0aG9yLz4KKyAgICA8YXV0aG9yZ3JvdXAvPgorICAgIDxhdXRob3IvPgorICAgIDxvdGhlcmNyZWRpdC8+CisgICAgPHJlbGVhc2VpbmZvLz4KKyAgICA8Y29weXJpZ2h0Lz4KKyAgICA8bGVnYWxub3RpY2UvPgorICAgIDxwdWJkYXRlLz4KKyAgICA8cmV2aXNpb24vPgorICAgIDxyZXZoaXN0b3J5Lz4KKyAgICA8YWJzdHJhY3QvPgorICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYmlibGlvZ3JhcGh5IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmJpYmxpb2dyYXBoeVsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0iYmlibGlvZGl2IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZSB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpiaWJsaW9kaXZbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imdsb3NzYXJ5IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6Omdsb3NzYXJ5WzFdIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJnbG9zc2RpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NkaXZbMV0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTQ7IgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iCisJICAgICBmb250LXdlaWdodD0iYm9sZCIvPgorICAgICAgPHN1YnRpdGxlCisJCWZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9ImluZGV4IiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImNvbXBvbmVudC50aXRsZSIKKwkgICAgIHBhcmFtOm5vZGU9ImFuY2VzdG9yLW9yLXNlbGY6OmluZGV4WzFdIgorICAgICAgICAgICAgIHBhcmFtOnBhZ2V3aWRlPSIxIgorCSAgICAgbWFyZ2luLWxlZnQ9IjBwdCIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPCEtLSBUaGUgaW5kZXhkaXYudGl0bGUgdGVtcGxhdGUgaXMgdXNlZCBzbyB0aGF0IG1hbnVhbCBhbmQgLS0+CisgIDwhLS0gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaW5kZXhkaXYgdGl0bGVzIGdldCB0aGUgc2FtZSAtLT4KKyAgPCEtLSBmb3JtYXR0aW5nLiAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJpbmRleGRpdiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImluZGV4ZGl2LnRpdGxlIgorCSAgICAgcGFyYW06dGl0bGU9InRpdGxlIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0ic2V0aW5kZXgiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iY29tcG9uZW50LnRpdGxlIgorCSAgICAgcGFyYW06bm9kZT0iYW5jZXN0b3Itb3Itc2VsZjo6c2V0aW5kZXhbMV0iCisgICAgICAgICAgICAgcGFyYW06cGFnZXdpZGU9IjEiCisJICAgICBtYXJnaW4tbGVmdD0iMHB0IgorCSAgICAgZm9udC1zaXplPSImaHNpemU1OyIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiLz4KKyAgICAgIDxzdWJ0aXRsZQorCQlmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJjb2xvcGhvbiIgdDp3cmFwcGVyPSJmbzpibG9jayI+CisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJyZWN0byI+CisgICAgICA8dGl0bGUKKwkgICAgIHQ6Zm9yY2U9IjEiCisJICAgICB0Om5hbWVkLXRlbXBsYXRlPSJjb21wb25lbnQudGl0bGUiCisJICAgICBwYXJhbTpub2RlPSJhbmNlc3Rvci1vci1zZWxmOjpjb2xvcGhvblsxXSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplNTsiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIi8+CisgICAgICA8c3VidGl0bGUKKwkJZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKzwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKyAgPHQ6dGl0bGVwYWdlIHQ6ZWxlbWVudD0idGFibGUub2YuY29udGVudHMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ1RhYmxlb2ZDb250ZW50cyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YudGFibGVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZUYWJsZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmZpZ3VyZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZkZpZ3VyZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLmV4YW1wbGVzIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZFeGFtcGxlcyciCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1pbmltdW09IjFlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUub3B0aW11bT0iMS41ZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm1heGltdW09IjJlbSIKKwkgICAgIHNwYWNlLWFmdGVyPSIwLjVlbSIKKwkgICAgIG1hcmdpbi1sZWZ0PSJ7JHRpdGxlLm1hcmdpbi5sZWZ0fSIKKwkgICAgIGZvbnQtc2l6ZT0iJmhzaXplMzsiCisJICAgICBmb250LXdlaWdodD0iYm9sZCIKKwkgICAgIGZvbnQtZmFtaWx5PSJ7JHRpdGxlLmZvbnRzZXR9Ii8+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLWNvbnRlbnQgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1jb250ZW50PgorCisgICAgPHQ6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKyAgICA8L3Q6dGl0bGVwYWdlLXNlcGFyYXRvcj4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJyZWN0byI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorICA8L3Q6dGl0bGVwYWdlPgorCisgIDx0OnRpdGxlcGFnZSB0OmVsZW1lbnQ9Imxpc3Qub2YuZXF1YXRpb25zIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZFcXVhdGlvbnMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnByb2NlZHVyZXMiIHQ6d3JhcHBlcj0iZm86YmxvY2siPgorICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0icmVjdG8iPgorICAgICAgPHRpdGxlCisJICAgICB0OmZvcmNlPSIxIgorCSAgICAgdDpuYW1lZC10ZW1wbGF0ZT0iZ2VudGV4dCIKKwkgICAgIHBhcmFtOmtleT0iJ0xpc3RvZlByb2NlZHVyZXMnIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5taW5pbXVtPSIxZW0iCisgICAgICAgICAgICAgc3BhY2UtYmVmb3JlLm9wdGltdW09IjEuNWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5tYXhpbXVtPSIyZW0iCisJICAgICBzcGFjZS1hZnRlcj0iMC41ZW0iCisJICAgICBtYXJnaW4tbGVmdD0ieyR0aXRsZS5tYXJnaW4ubGVmdH0iCisJICAgICBmb250LXNpemU9IiZoc2l6ZTM7IgorCSAgICAgZm9udC13ZWlnaHQ9ImJvbGQiCisJICAgICBmb250LWZhbWlseT0ieyR0aXRsZS5mb250c2V0fSIvPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1jb250ZW50IHQ6c2lkZT0idmVyc28iPgorICAgIDwvdDp0aXRsZXBhZ2UtY29udGVudD4KKworICAgIDx0OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisgICAgPC90OnRpdGxlcGFnZS1zZXBhcmF0b3I+CisKKyAgICA8dDp0aXRsZXBhZ2UtYmVmb3JlIHQ6c2lkZT0icmVjdG8iPgorICAgIDwvdDp0aXRsZXBhZ2UtYmVmb3JlPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKyAgPC90OnRpdGxlcGFnZT4KKworICA8dDp0aXRsZXBhZ2UgdDplbGVtZW50PSJsaXN0Lm9mLnVua25vd25zIiB0OndyYXBwZXI9ImZvOmJsb2NrIj4KKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InJlY3RvIj4KKyAgICAgIDx0aXRsZQorCSAgICAgdDpmb3JjZT0iMSIKKwkgICAgIHQ6bmFtZWQtdGVtcGxhdGU9ImdlbnRleHQiCisJICAgICBwYXJhbTprZXk9IidMaXN0b2ZVbmtub3duJyIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWluaW11bT0iMWVtIgorICAgICAgICAgICAgIHNwYWNlLWJlZm9yZS5vcHRpbXVtPSIxLjVlbSIKKyAgICAgICAgICAgICBzcGFjZS1iZWZvcmUubWF4aW11bT0iMmVtIgorCSAgICAgc3BhY2UtYWZ0ZXI9IjAuNWVtIgorCSAgICAgbWFyZ2luLWxlZnQ9InskdGl0bGUubWFyZ2luLmxlZnR9IgorCSAgICAgZm9udC1zaXplPSImaHNpemUzOyIKKwkgICAgIGZvbnQtd2VpZ2h0PSJib2xkIgorCSAgICAgZm9udC1mYW1pbHk9InskdGl0bGUuZm9udHNldH0iLz4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2UtY29udGVudCB0OnNpZGU9InZlcnNvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWNvbnRlbnQ+CisKKyAgICA8dDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorICAgIDwvdDp0aXRsZXBhZ2Utc2VwYXJhdG9yPgorCisgICAgPHQ6dGl0bGVwYWdlLWJlZm9yZSB0OnNpZGU9InJlY3RvIj4KKyAgICA8L3Q6dGl0bGVwYWdlLWJlZm9yZT4KKworICAgIDx0OnRpdGxlcGFnZS1iZWZvcmUgdDpzaWRlPSJ2ZXJzbyI+CisgICAgPC90OnRpdGxlcGFnZS1iZWZvcmU+CisgIDwvdDp0aXRsZXBhZ2U+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisKKzwvdDp0ZW1wbGF0ZXM+CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RlbXBsYXRlL3lvY3RvLXByb2plY3QtcXMucG5nIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS95b2N0by1wcm9qZWN0LXFzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM0NDJlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90ZW1wbGF0ZS95b2N0by1wcm9qZWN0LXFzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvaG9zdGVkLXNlcnZpY2UucG5nIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWZlYTdiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL2hvc3RlZC1zZXJ2aWNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvc2ltcGxlLWNvbmZpZ3VyYXRpb24ucG5nIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZjZTJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC9maWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL2ZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYTM5YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvZmlndXJlcy90b2FzdGVyLXRpdGxlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg2OTRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1jdXN0b21pemF0aW9uLnhzbApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiIHZlcnNpb249IjEuMCI+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9kb2Nib29rLW1pcnJvci9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKzwhLS0KKworICA8eHNsOmltcG9ydCBocmVmPSIuLi90ZW1wbGF0ZS8xLjc2LjEvZG9jYm9vay14c2wtMS43Ni4xL3hodG1sL2RvY2Jvb2sueHNsIiAvPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKy0tPgorCisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9wZXJtYWxpbmtzLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvc2VjdGlvbi50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2NvbXBvbmVudC50aXRsZS54c2wiLz4KKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL2RpdmlzaW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZm9ybWFsLm9iamVjdC5oZWFkaW5nLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZW1iZWRkZWRfdmlkZW8ueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJodG1sLnN0eWxlc2hlZXQiIHNlbGVjdD0iJ3RvYXN0ZXItbWFudWFsLXN0eWxlLmNzcyciIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY2hhcHRlci5hdXRvbGFiZWwiIHNlbGVjdD0iMSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJhcHBlbmRpeC5hdXRvbGFiZWwiIHNlbGVjdD0iQSIgLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJzZWN0aW9uLmF1dG9sYWJlbCIgc2VsZWN0PSIxIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9InNlY3Rpb24ubGFiZWwuaW5jbHVkZXMuY29tcG9uZW50LmxhYmVsIiBzZWxlY3Q9IjEiIC8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZ2VuZXJhdGUuaWQuYXR0cmlidXRlcyIgc2VsZWN0PSIxIiAvPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLWludHJvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDllMDhiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1pbnRyby54bWwKQEAgLTAsMCArMSwxNzIgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1pbnRybyc+Cis8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBUb2FzdGVyIGlzIGEgd2ViIGludGVyZmFjZSB0byB0aGUgWW9jdG8gUHJvamVjdCdzCisgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLXN5c3RlbS10ZXJtJz5PcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtPC91bGluaz4uCisgICAgICAgIFRoZSBpbnRlcmZhY2UgZW5hYmxlcyB5b3UgdG8gY29uZmlndXJlIGFuZCBydW4geW91ciBidWlsZHMuCisgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IGJ1aWxkcyBpcyBjb2xsZWN0ZWQgYW5kIHN0b3JlZCBpbiBhIGRhdGFiYXNlLgorICAgICAgICBZb3UgY2FuIHVzZSBUb2FzdGVyIHRvIGNvbmZpZ3VyZSBhbmQgc3RhcnQgYnVpbGRzIG9uIG11bHRpcGxlCisgICAgICAgIHJlbW90ZSBidWlsZCBzZXJ2ZXJzLgorICAgIDwvcGFyYT4KKworICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBvZiBUb2FzdGVyIGRvZXMgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSBhbmQgaW5pdGlhdGUKKyAgICAgICAgICAgIGJ1aWxkcy4KKyAgICAgICAgICAgIEhvd2V2ZXIsIHlvdSBjYW5ub3QgdXNlIFRvYXN0ZXIgdG8gY3VzdG9taXplIGltYWdlIHJlY2lwZXMsIHdoaWNoCisgICAgICAgICAgICBzdGlsbCBtdXN0IGVpdGhlciBiZSBkb25lIGJ5IGhhbmQgb3IgdGhyb3VnaAorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvaG9iJz5Ib2I8L3VsaW5rPi4KKyAgICAgICAgICAgIEFzIFRvYXN0ZXIgbWF0dXJlcywgaXQgZXZlbnR1YWxseSB3aWxsIGVxdWFsIGFuZCBzdXJwYXNzIEhvYgorICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSwgYXQgd2hpY2ggdGltZSBIb2Igd2lsbCBiZSBkZXByZWNhdGVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBIb2IsCisgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjaW1hZ2UtZGV2ZWxvcG1lbnQtdXNpbmctaG9iJz5JbWFnZSBEZXZlbG9wbWVudCBVc2luZyBIb2I8L3VsaW5rPiIKKyAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L25vdGU+CisKKyAgICA8c2VjdGlvbiBpZD0naW50cm8tbW9kZXMnPgorICAgICAgICA8dGl0bGU+VG9hc3RlciBPcGVyYXRpb25hbCBNb2RlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSBUb2FzdGVyIGluIEFuYWx5c2lzIE1vZGUgb3IgQnVpbGQgTW9kZToKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5BbmFseXNpcyBNb2RlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEluIEFuYWx5c2lzIE1vZGUsIHlvdSBjYW4gcmVjb3JkIGJ1aWxkcyBhbmQgc3RhdGlzdGljcy4KKyAgICAgICAgICAgICAgICAgICAgSW4gdGhpcyBNb2RlLCB5b3UgZGlyZWN0bHkgYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHdoaWNoIHlvdSB0aGVuIHVzZSB0bworICAgICAgICAgICAgICAgICAgICBidWlsZCBpbWFnZXMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICA8cGFyYT5BbmFseXNpcyBNb2RlIHJlcXVpcmVzIHlvdSB0byBoYXZlIGZpcnN0IHN0YXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhbmQgdGhlbiB0byBpbml0aWF0ZSB5b3VyIGJ1aWxkIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgZnJvbSB0aGUgc2hlbGwuCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgbXVzdCBiZSBzdGFydGVkIGJlZm9yZSB0aGUgYnVpbGQgb3IgaXQgd2lsbCBub3QKKyAgICAgICAgICAgICAgICAgICAgY29sbGVjdCBidWlsZCBkYXRhLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+VG9hc3RlciBoYXMgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgQW5hbHlzaXMgTW9kZToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgd2hhdCB3YXMgYnVpbHQgKHJlY2lwZXMgYW5kIHBhY2thZ2VzKSBhbmQgd2hhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHdlcmUgaW5zdGFsbGVkIGludG8geW91ciBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcm93c2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIHZhbHVlIG9mIGFsbCB2YXJpYWJsZXMgaW4geW91ciBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGFuZCB3aGljaCBmaWxlcyBzZXQgZWFjaCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtaW5lIGVycm9yLCB3YXJuaW5nIGFuZCB0cmFjZSBtZXNzYWdlcyB0byBhaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBCaXRCYWtlIHRhc2tzIGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJldXNlZCBkdXJpbmcgeW91ciBidWlsZCwgaW5jbHVkaW5nIHRob3NlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHNoYXJlZCBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzIGJldHdlZW4gcmVjaXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBhbmQgdGFza3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gc3VjaCBhcyBidWlsZCB0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgdGltZSwgQ1BVIHVzYWdlLCBhbmQgZGlzayBJL08uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIE1vZGU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSW4gQnVpbGQgTW9kZSwgVG9hc3RlciBoYW5kbGVzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBzY2hlZHVsaW5nIGFuZCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgICAgIEluIHRoaXMgbW9kZSwgYWxsIHlvdXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnVpbGQgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgIGhhcHBlbnMgdGhyb3VnaCB0aGUgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgWW91IGRvIG5vdCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gY29tbWFuZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlVzaW5nIHRoaXMgbW9kZSwgeW91IGNvbmZpZ3VyZSBhbmQgc3RhcnQgeW91ciBidWlsZHMKKyAgICAgICAgICAgICAgICAgICAgd2l0aGluIFRvYXN0ZXIncyBHVUkuCisgICAgICAgICAgICAgICAgICAgIEVhY2ggcHJvamVjdCBjYW4gYmUgY29uZmlndXJlZCBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBidWlsZCBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgc3VwcG9ydHMgWW9jdG8gUHJvamVjdCBSZWxlYXNlcyAxLjcgYW5kCisgICAgICAgICAgICAgICAgICAgIGJleW9uZC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhPlRvYXN0ZXIgaGFzIGFsbCB0aGUgc2FtZSBjYXBhYmlsaXRpZXMgaW4gQnVpbGQgTW9kZQorICAgICAgICAgICAgICAgICAgICBhcyBpdCBkb2VzIGluIEFuYWx5c2lzIE1vZGUgcGx1cyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyb3dzZSBsYXllcnMgbGlzdGVkIGluIHRoZSB2YXJpb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmsgbGlua2VuZD0nbGF5ZXItc291cmNlJz5sYXllciBzb3VyY2VzPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIHByb2plY3QgKGUuZy4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIE1ldGFkYXRhIEluZGV4IGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvJz48L3VsaW5rPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wb3J0IHlvdXIgb3duIGxheWVycyBmb3IgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFuZCByZW1vdmUgbGF5ZXJzIGZyb20geW91ciBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSB0YXJnZXQgb3IgbXVsdGlwbGUgdGFyZ2V0cyB0byBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCB5b3VyIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1pbnN0YWxsYXRpb24tb3B0aW9ucyc+CisgICAgICAgIDx0aXRsZT5JbnN0YWxsYXRpb24gT3B0aW9uczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHNldCBUb2FzdGVyIHVwIHRvIHJ1biBhcyBhIGxvY2FsIGluc3RhbmNlIG9yIGFzIGEgc2hhcmVkCisgICAgICAgICAgICBob3N0ZWQgc2VydmljZS4KKyAgICAgICAgICAgIFJlZ2FyZGxlc3Mgb2YgaG93IHlvdSBzZXQgdXAgVG9hc3RlciwgYm90aCBBbmFseXNpcyBhbmQgQnVpbGQKKyAgICAgICAgICAgIE1vZGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFdoZW4gVG9hc3RlciBpcyBzZXQgdXAgYXMgYSBsb2NhbCBpbnN0YW5jZSwgYWxsIHRoZSBjb21wb25lbnRzCisgICAgICAgICAgICByZXNpZGUgb24gYSBzaW5nbGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgIEZ1bmRhbWVudGFsbHksIGEgbG9jYWwgaW5zdGFuY2Ugb2YgVG9hc3RlciBpcyBzdWl0ZWQgZm9yIGEgc2luZ2xlCisgICAgICAgICAgICB1c2VyIGRldmVsb3Bpbmcgb24gYSBzaW5nbGUgYnVpbGQgaG9zdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3NpbXBsZS1jb25maWd1cmF0aW9uLnBuZyIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjZpbiIgZGVwdGg9IjEuNWluIiAvPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUb2FzdGVyIGFzIGEgaG9zdGVkIHNlcnZpY2UgaXMgc3VpdGVkIGZvciBtdWx0aXBsZSB1c2VycworICAgICAgICAgICAgZGV2ZWxvcGluZyBhY3Jvc3Mgc2V2ZXJhbCBidWlsZCBob3N0cy4KKyAgICAgICAgICAgIFdoZW4gVG9hc3RlciBpcyBzZXQgdXAgYXMgYSBob3N0ZWQgc2VydmljZSwgaXRzIGNvbXBvbmVudHMgY2FuCisgICAgICAgICAgICBiZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgbWFjaGluZXM6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy9ob3N0ZWQtc2VydmljZS5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2aW4iIGRlcHRoPSIzLjVpbiIgLz4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPCEtLVRISVMgRVhUUkEgSU5GT1JNQVRJT04gUFJPQkFCTFkgV0lMTCBHTyBBV0FZCisgICAgICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGluc3RhbGxpbmcgYW5kIHJ1bm5pbmcgVG9hc3Rlciwgc2VlIHRoZQorICAgICAgICAiPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9Ub2FzdGVyI0luc3RhbGxhdGlvbl9hbmRfUnVubmluZyc+SW5zdGFsbGF0aW9uIGFuZCBSdW5uaW5nPC91bGluaz4iCisgICAgICAgIHNlY3Rpb24gb2YgdGhlICJUb2FzdGVyIiB3aWtpIHBhZ2UuCisgICAgICAgIEZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiB0aGUgQVBJIGFuZCBpdHMgc2VhcmNoIG9wZXJhdGlvbgorICAgICAgICBVUkksIHBhcmFtZXRlcnMsIGFuZCByZXNwb25zZXMsIHNlZSB0aGUKKyAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9SRVNUX0FQSV9Db250cmFjdHMnPlJFU1QgQVBJIENvbnRyYWN0czwvdWxpbms+CisgICAgICAgIFdpa2kgcGFnZS4KKyAgICA8L3BhcmE+CistLT4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCBiL2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk0MDFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1yZWZlcmVuY2UueG1sCkBAIC0wLDAgKzEsMTA3OCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3RvYXN0ZXItbWFudWFsLXJlZmVyZW5jZSc+CisKKzx0aXRsZT5Db25jZXB0cyBhbmQgUmVmZXJlbmNlPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgICBJbiBvcmRlciB0byBjb25maWd1cmUgYW5kIHVzZSBUb2FzdGVyLCB5b3Ugc2hvdWxkIHVuZGVyc3RhbmQgc29tZQorICAgICAgICBjb25jZXB0cyBhbmQgaGF2ZSBzb21lIGJhc2ljIGNvbW1hbmQgcmVmZXJlbmNlIG1hdGVyaWFsIGF2YWlsYWJsZS4KKyAgICAgICAgVGhpcyBmaW5hbCBjaGFwdGVyIHByb3ZpZGVzIGNvbmNlcHR1YWwgaW5mb3JtYXRpb24gb24gbGF5ZXIgc291cmNlcywKKyAgICAgICAgcmVsZWFzZXMsIGFuZCBKU09OIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgICAgICAgIEFsc28gcHJvdmlkZWQgaXMgYSBxdWljayBsb29rIGF0IHNvbWUgdXNlZnVsCisgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyB0aGF0IGFyZSBUb2FzdGVyLXNwZWNpZmljLgorICAgICAgICBJbmZvcm1hdGlvbiBvbiA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgZG9lcyBleGlzdAorICAgICAgICBhY3Jvc3MgdGhlIFdlYiBhbmQgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgbWFudWFsIGJ5IG5vIG1lYW5zCisgICAgICAgIGF0dGVtcHRzIHRvIHByb3ZpZGUgYSBjb21tYW5kIGNvbXByZWhlbnNpdmUgcmVmZXJlbmNlLgorICAgIDwvcGFyYT4KKworICAgIDxzZWN0aW9uIGlkPSdsYXllci1zb3VyY2UnPgorICAgICAgICA8dGl0bGU+TGF5ZXIgU291cmNlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEluIGdlbmVyYWwsIGEgImxheWVyIHNvdXJjZSIgaXMgYSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgICAgIGV4aXN0aW5nIGxheWVycy4KKyAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIHdlIGFyZSBjb25jZXJuZWQgd2l0aCBsYXllcnMgdGhhdCB5b3UgY2FuIHVzZQorICAgICAgICAgICAgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCBhbmQgVG9hc3Rlci4KKyAgICAgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgbGF5ZXIgc291cmNlIGNhbGxlZAorICAgICAgICAgICAgYSAibGF5ZXIgaW5kZXguIgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBBIGxheWVyIGluZGV4IGlzIGEgd2ViIGFwcGxpY2F0aW9uIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGFib3V0IGEgc2V0IG9mIGN1c3RvbSBsYXllcnMuCisgICAgICAgICAgICBBIGdvb2QgZXhhbXBsZSBvZiBhbiBleGlzdGluZyBsYXllciBpbmRleCBpcyB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBNZXRhZGF0YSBJbmRleC4KKyAgICAgICAgICAgIEEgcHVibGljIGluc3RhbmNlIG9mIHRoaXMgbGF5ZXIgaW5kZXggZXhpc3RzIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcnPjwvdWxpbms+LgorICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoZSBjb2RlIGZvciB0aGlzIGxheWVyIGluZGV4J3Mgd2ViIGFwcGxpY2F0aW9uIGF0CisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9sYXllcmluZGV4LXdlYi8nPjwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSB0aWUgYSBsYXllciBzb3VyY2UgaW50byBUb2FzdGVyLCBpdCBjYW4gcXVlcnkgdGhlIGxheWVyCisgICAgICAgICAgICBzb3VyY2UgdGhyb3VnaCBhCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcHJlc2VudGF0aW9uYWxfc3RhdGVfdHJhbnNmZXInPlJFU1Q8L3VsaW5rPgorICAgICAgICAgICAgQVBJLCBzdG9yZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxheWVycyBpbiB0aGUgVG9hc3RlcgorICAgICAgICAgICAgZGF0YWJhc2UsIGFuZCB0aGVuIHNob3cgdGhlIGluZm9ybWF0aW9uIHRvIHVzZXJzLgorICAgICAgICAgICAgVXNlcnMgYXJlIHRoZW4gYWJsZSB0byB2aWV3IHRoYXQgaW5mb3JtYXRpb24gYW5kIGJ1aWxkIGxheWVycworICAgICAgICAgICAgZnJvbSBUb2FzdGVyIGl0c2VsZiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGNsb25pbmcgb3IgZWRpdGluZworICAgICAgICAgICAgdGhlIEJpdEJha2UgbGF5ZXJzIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVHlpbmcgYSBsYXllciBzb3VyY2UgaW50byBUb2FzdGVyIGlzIGNvbnZlbmllbnQgd2hlbiB5b3UgaGF2ZQorICAgICAgICAgICAgbWFueSBjdXN0b20gbGF5ZXJzIHRoYXQgbmVlZCB0byBiZSBidWlsdCBvbiBhIHJlZ3VsYXIgYmFzaXMgYnkKKyAgICAgICAgICAgIGEgY29tbXVuaXR5IG9mIGRldmVsb3BlcnMuCisgICAgICAgICAgICBJbiBmYWN0LCBUb2FzdGVyIGNvbWVzIHByZS1jb25maWd1cmVkIHdpdGggdGhlIE9wZW5FbWJlZGRlZAorICAgICAgICAgICAgTWV0YWRhdGEgSW5kZXguCisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBZb3UgZG8gbm90IGhhdmUgdG8gdXNlIGEgbGF5ZXIgc291cmNlIHRvIHVzZSBUb2FzdGVyLgorICAgICAgICAgICAgICAgIFR5aW5nIGludG8gYSBsYXllciBzb3VyY2UgaXMgb3B0aW9uYWwuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8c2VjdGlvbiBpZD0nbGF5ZXItc291cmNlLXVzaW5nLXdpdGgtdG9hc3Rlcic+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBhbmQgVXNpbmcgYSBMYXllciBTb3VyY2U8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUbyB1c2UgeW91ciBvd24gbGF5ZXIgc291cmNlLCB5b3UgbmVlZCB0byBzZXQgdXAgdGhlIGxheWVyCisgICAgICAgICAgICAgICAgc291cmNlIGFuZCB0aGVuIHRpZSBpdCBpbnRvIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBob3cgdG8gdGllIGludG8gYSBsYXllciBpbmRleCBpbiBhIG1hbm5lcgorICAgICAgICAgICAgICAgIHNpbWlsYXIgdG8gdGhlIHdheSBUb2FzdGVyIHRpZXMgaW50byB0aGUgT3BlbkVtYmVkZGVkIE1ldGFkYXRhCisgICAgICAgICAgICAgICAgSW5kZXguCisgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J3VuZGVyc3RhbmRpbmcteW91ci1sYXllcnMnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5VbmRlcnN0YW5kaW5nIFlvdXIgTGF5ZXJzPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGZvciB1c2luZyBhIGxheWVyIGluZGV4IGlzIHRvIGhhdmUKKyAgICAgICAgICAgICAgICAgICAgc2V2ZXJhbCBjdXN0b20gbGF5ZXJzIHRoYXQgZGV2ZWxvcGVycyBidWlsZCBhbmQgYWNjZXNzIHVzaW5nCisgICAgICAgICAgICAgICAgICAgIHRoZSBZb2N0byBQcm9qZWN0IG9uIGEgcmVndWxhciBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXQgb2YgbGF5ZXJzIG5lZWRzIHRvIGV4aXN0IGFuZCB5b3UgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICBmYW1pbGlhciB3aXRoIHdoZXJlIHRoZXkgcmVzaWRlLgorICAgICAgICAgICAgICAgICAgICBZb3Ugd2lsbCBuZWVkIHRoYXQgaW5mb3JtYXRpb24gd2hlbiB5b3Ugc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgICAgICBjb2RlIGZvciB0aGUgd2ViIGFwcGxpY2F0aW9uIHRoYXQgImhvb2tzIiBpbnRvIHlvdXIgc2V0IG9mCisgICAgICAgICAgICAgICAgICAgIGxheWVycy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gbGF5ZXJzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AtbGF5ZXJzJz5CU1AgTGF5ZXJzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGFuZAorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfQlNQX1VSTDsjdXNpbmctdGhlLXlvY3RvLXByb2plY3RzLWJzcC10b29scyc+VXNpbmcgdGhlIFlvY3RvIFByb2plY3QncyBCU1AgVG9vbHM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgaW4gdGhlIFlvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApCisgICAgICAgICAgICAgICAgICAgIERldmVsb3BlcidzIEd1aWRlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2NvbmZpZ3VyaW5nLXRvYXN0ZXItdG8taG9vay1pbnRvLXlvdXItbGF5ZXItc291cmNlJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Q29uZmlndXJpbmcgVG9hc3RlciB0byBIb29rIEludG8gWW91ciBMYXllciBJbmRleDwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgVG9hc3RlciB0byB1c2UgeW91ciBsYXllciBpbmRleCwgeW91IG11c3QgaG9zdAorICAgICAgICAgICAgICAgICAgICB0aGUgd2ViIGFwcGxpY2F0aW9uIGluIGEgc2VydmVyIHRvIHdoaWNoIFRvYXN0ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3QuCisgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgdG8gZ2l2ZSBUb2FzdGVyIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGluZGV4LgorICAgICAgICAgICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgeW91IGhhdmUgdG8gY29uZmlndXJlIFRvYXN0ZXIgdG8gdXNlIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIgaW5kZXguCisgICAgICAgICAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdHdvIG1ldGhvZHMgYnkgd2hpY2ggeW91IGNhbgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgYW5kIHVzZSB5b3VyIGxheWVyIGluZGV4LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgdGhlIGNvZGUgZm9yIHRoZSBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgTWV0YWRhdGEgSW5kZXggKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnJz48L3VsaW5rPikgd2FzCisgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWQuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoaXMgY29kZSwgd2hpY2ggaXMgYXQKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvbGF5ZXJpbmRleC13ZWIvJz48L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgYXMgYSBiYXNlIHRvIGNyZWF0ZSB5b3VyIG93biBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8c2VjdGlvbiBpZD0ndXNlLXRoZS1hZG1pbmlzdHJhdGlvbi1pbnRlcmZhY2UnPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+VXNlIHRoZSBBZG1pbmlzdHJhdGlvbiBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UgdGhyb3VnaCBhCisgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyIGJ5IGVudGVyaW5nIHRoZSBVUkwgb2YgeW91ciBUb2FzdGVyIGluc3RhbmNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkaW5nICI8ZmlsZW5hbWU+L2FkbWluPC9maWxlbmFtZT4iIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBVUkwuCisgICAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgYXJlIHJ1bm5pbmcgVG9hc3RlciBsb2NhbGx5LCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb2xsb3dpbmcgVVJMOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vMTI3LjAuMC4xOjgwMDAvYWRtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZSBoYXMgYSAiTGF5ZXIgc291cmNlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gdGhhdCBpbmNsdWRlcyBhbiAiQWRkIGxheWVyIHNvdXJjZSIgYnV0dG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgdGhhdCBidXR0b24gYW5kIHByb3ZpZGUgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgTWFrZSBzdXJlIHlvdSBzZWxlY3QgImxheWVyaW5kZXgiIGFzIHRoZSBsYXllciBzb3VyY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdzZWxlY3QtdGhlLXRvYXN0ZXJjb25mLWpzb24tZmlsZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5Vc2UgdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gRmlsZTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdG8gdXNlIHRoZSBBZG1pbmlzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlLCB5b3UgY2FuIGVkaXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPjxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT48L2xpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGFuZCByZWxvYWQgaXQgdG8gVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiB5b3Ugc2V0IHVwIFRvYXN0ZXIgaW4gQnVpbGQgTW9kZSwgeW91IGFyZSBwcm9tcHRlZAorICAgICAgICAgICAgICAgICAgICAgICAgdG8gc2VsZWN0IGEgVG9hc3RlciBjb25maWd1cmF0aW9uIGZpbGUuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c2VkIHRvIHNldCB1cCB0aGUgaW5pdGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiB2YWx1ZXMgd2l0aGluIHRoZSBUb2FzdGVyIGRhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGxheWVyIHNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBUaHJlZSB2ZXJzaW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIGZvdW5kIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG88L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgc2V0IHVwIHByb2Nlc3MgaWYgeW91IGhhZCBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc2Vjb25kIHZlcnNpb24gb2YgdGhlIGZpbGUgaXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLiA8ZmlsZW5hbWU+bWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFyZSBwcm9tcHRlZCB0byBzZWxlY3QgdGhpcyBmaWxlIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBzZXQgdXAgcHJvY2VzcyBpZiB5b3UgaGFkIGNsb25lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm9wZW5lbWJlZGRlZC1jb3JlPC9maWxlbmFtZT4gcmVwb3NpdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Z2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRoaXJkIHZlcnNpb24gaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gc2V0IHVwIGEgaG9zdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgaW4gQnVpbGQgTW9kZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIHRoaXMgdmVyc2lvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoJz5GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2VkaXQtdGhlLWNvbmZpZ3VyYXRpb24tZmlsZSc+CisgICAgICAgICAgICAgICAgICAgIDx0aXRsZT5FZGl0IHRoZSBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgRWRpdCB0aGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gc2V0IHVwIHlvdXIgVG9hc3RlciBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBmaWxlLCB5b3Ugd2lsbCBmaW5kIGEgc2VjdGlvbiBmb3IgbGF5ZXIgc291cmNlcworICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCBhcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAibGF5ZXJzb3VyY2VzIjogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKKyAgICAgICAgICAgICAiYXBpdXJsIjogIi4uLy4uLyIsCisgICAgICAgICAgICAgImJyYW5jaGVzIjogWyJIRUFEIiwgIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0sCisgICAgICAgICAgICAgImxheWVycyI6IFsKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YSIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCisgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0byIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8iCisgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8tYnNwIiwKKyAgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0by1ic3AiCisgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIF0KKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKKyAgICAgICAgICAgICAiYXBpdXJsIjogImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8iLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKKyAgICAgICAgICAgICAiYXBpdXJsIjogIiIsCisgICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICAgfQorICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBhZGQgeW91ciBvd24gbGF5ZXIgc291cmNlIHRvIHRoaXMgc2VjdGlvbiBieQorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHRoZSBzYW1lIGZvcm1hdCB1c2VkIGZvciB0aGUgIk9wZW5FbWJlZGRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyIHNvdXJjZSBzaG93biBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgR2l2ZSB5b3VyIGxheWVyIHNvdXJjZSBhIG5hbWUsIHByb3ZpZGUgdGhlIFVSTCBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBzb3VyY2UgQVBJLCB1c2UgdGhlIHNvdXJjZSB0eXBlICJsYXllcmluZGV4IiwgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZSB3aGljaCBicmFuY2hlcyBmcm9tIHlvdXIgbGF5ZXIgc291cmNlIHlvdSB3YW50CisgICAgICAgICAgICAgICAgICAgICAgICB0byBtYWtlIGF2YWlsYWJsZSB0aHJvdWdoIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIE9wZW5FbWJlZGRlZCBsYXllciBzb3VyY2UgbWFrZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBvbmx5IGl0cyAibWFzdGVyIiwgImZpZG8iLCBhbmQgImRpenp5IgorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2hlcyBtdXN0IG1hdGNoIHRoZSBicmFuY2ggeW91CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiBjb25maWd1cmluZyB5b3VyIHJlbGVhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjb25maWd1cmUgb25lIHJlbGVhc2UgaW4gVG9hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgYnkgc2V0dGluZyBpdHMgYnJhbmNoIHRvICJicmFuY2gtb25lIiBhbmQgeW91IGNvbmZpZ3VyZQorICAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlciByZWxlYXNlIGluIFRvYXN0ZXIgYnkgc2V0dGluZyBpdHMgYnJhbmNoIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAiYnJhbmNoLXR3byIsIHRoZSBicmFuY2hlcyBpbiB5b3VyIGxheWVyIHNvdXJjZSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlICJicmFuY2gtb25lIiBhbmQgImJyYW5jaC10d28iIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBjcmVhdGVzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZWxlYXNlcworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBsYXllciBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGh1cywgd2hlbiB1c2VycyBjcmVhdGUgYSBwcm9qZWN0IHdpdGggYSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSwgdGhleSB3aWxsIHNlZSB0aGUgYXBwcm9wcmlhdGUgbGF5ZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdXIgbGF5ZXIgc291cmNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb25uZWN0aW9uIGVuc3VyZXMgdGhhdCBvbmx5IGxheWVycyB0aGF0IGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBzZWxlY3RlZCBwcm9qZWN0IHJlbGVhc2UgY2FuIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBmb3IgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGhhdmUgYWRkZWQgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSwgc2F2ZSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJbiBhIHRlcm1pbmFsIHdpbmRvdywgbmF2aWdhdGUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGUgVG9hc3RlciBkYXRhYmFzZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Qgb2YgdGhlIFlvY3RvIFByb2plY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgeW91IGFyZSBsb2NhdGVkIGluIHRoYXQgZGlyZWN0b3J5LCBydW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGZpbGVuYW1lPmxvYWRjb25mPC9maWxlbmFtZT4iIGNvbW1hbmQsIHdoaWNoIHRha2VzIGFzCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcmd1bWVudCB0aGUgZnVsbCBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPiBmaWxlIHlvdSBqdXN0IGVkaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgY2xvbmVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiByZXBvc2l0b3J5IGFuZCB5b3UgZWRpdGVkIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlvdSB3b3VsZCB0eXBlIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbG9hZGNvbmYgL2hvbWUvc2NvdHRyaWYvcG9reS9tZXRhLXlvY3RvL2NvbmYvdG9hc3RlcmNvbmYuanNvbgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgZW50ZXJpbmcgdGhpcyBjb21tYW5kLCB5b3UgbmVlZCB0byB1cGRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGRhdGFiYXNlIHdpdGggdGhlIGluZm9ybWF0aW9uIGNvbWluZyBmcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBsYXllciBzb3VyY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyB0aGF0LCB5b3Ugc2hvdWxkIHJ1biB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8ZmlsZW5hbWU+bHN1cGRhdGVzPC9maWxlbmFtZT4iIGNvbW1hbmQgZnJvbSB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBUb2FzdGVyIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxzdXBkYXRlcworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG9hc3RlciBjYW4gcmVhY2ggdGhlIEFQSSBVUkwsIHlvdSBzaG91bGQgc2VlIGEgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgdGVsbGluZyB5b3UgdGhhdCBUb2FzdGVyIGlzIHVwZGF0aW5nIHRoZSBsYXllciBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBPbmNlIHRoZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCB2ZXJpZnkgdGhlIG5ldyBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJ5IHVzaW5nIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBUbyBkbyB0aGF0LCB2aXNpdCB0aGUgIkFsbCBjb21wYXRpYmxlIGxheWVycyIgcGFnZSBpbnNpZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGxheWVycyBmcm9tIHlvdXIgbGF5ZXIgc291cmNlIHNob3VsZCBiZSBsaXN0ZWQgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1yZWxlYXNlcyc+CisgICAgICAgIDx0aXRsZT5SZWxlYXNlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXaGVuIHlvdSBjcmVhdGUgYSBUb2FzdGVyIHByb2plY3QgdXNpbmcgdGhlIHdlYiBpbnRlcmZhY2UsCisgICAgICAgICAgICB5b3UgYXJlIGFza2VkIHRvIGNob29zZSBhICJSZWxlYXNlLiIKKyAgICAgICAgICAgIEluIHRoZSBjb250ZXh0IG9mIFRvYXN0ZXIsIHRoZSB0ZXJtICJSZWxlYXNlIiByZWZlcnMgdG8gYSBzZXQgb2YKKyAgICAgICAgICAgIGxheWVycyBhbmQgYSBCaXRCYWtlIHZlcnNpb24gdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcworICAgICAgICAgICAgdG8gYnVpbGQgc29tZXRoaW5nLgorICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBwcmUtY29uZmlndXJlZCB3aXRoIHJlbGVhc2VzIHRoYXQKKyAgICAgICAgICAgIGNvcnJlc3BvbmQgdG8gWW9jdG8gUHJvamVjdCByZWxlYXNlIGJyYW5jaGVzLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IGNhbiBtb2RpZnksIGRlbGV0ZSwgYW5kIGNyZWF0ZSBuZXcgcmVsZWFzZXMKKyAgICAgICAgICAgIGFjY29yZGluZyB0byB5b3VyIG5lZWRzLgorICAgICAgICAgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNvbWUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiByZWxlYXNlcy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLXJlbGVhc2VzLXN1cHBvcnRlZCc+CisgICAgICAgICAgICA8dGl0bGU+UHJlLUNvbmZpZ3VyZWQgUmVsZWFzZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGEgc3BlY2lmaWMgc2V0IG9mCisgICAgICAgICAgICAgICAgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgT2YgY291cnNlLCB5b3UgY2FuIGFsd2F5cyBjb25maWd1cmUgVG9hc3RlciB0byB1c2UgYW55CisgICAgICAgICAgICAgICAgcmVsZWFzZS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IHdhbnQgeW91ciBwcm9qZWN0IHRvIGJ1aWxkIGFnYWluc3QgYQorICAgICAgICAgICAgICAgIHNwZWNpZmljIGNvbW1pdCBvZiBhbnkgb2YgdGhlICJvdXQtb2YtdGhlLWJveCIgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgT3IsIHlvdSBtaWdodCB3YW50IHlvdXIgcHJvamVjdCB0byBidWlsZCBhZ2FpbnN0IGRpZmZlcmVudAorICAgICAgICAgICAgICAgIHJldmlzaW9ucyBvZiBPcGVuRW1iZWRkZWQgYW5kIEJpdEJha2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEFzIHNoaXBwZWQsIFRvYXN0ZXIgaXMgY29uZmlndXJlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgIHJlbGVhc2VzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+WW9jdG8gUHJvamVjdCAxLjcgIkRpenp5IiBvciBPcGVuRW1iZWRkZWQgIkRpenp5Ijo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgcHJvamVjdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIGRpenp5IGJyYW5jaCBhdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0dJVF9VUkw7L2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9ZGl6enknPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2NvbW1pdC8/aD1kaXp6eSc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0IDEuOCAiRmlkbyIgb3IgT3BlbkVtYmVkZGVkICJGaWRvIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgcHJvamVjdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIGZpZG8gYnJhbmNoIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1maWRvJz48L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9jb21taXQvP2g9Zmlkbyc+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Zb2N0byBQcm9qZWN0ICJNYXN0ZXIiIG9yIE9wZW5FbWJlZGRlZCAiTWFzdGVyIjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIGNhdXNlcyB5b3VyIFRvYXN0ZXIgUHJvamVjdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFnYWluc3QgdGhlIGhlYWQgb2YgdGhlIG1hc3RlciBicmFuY2gsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhY3RpdmUgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UsIGF0CisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fR0lUX1VSTDsvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8nPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8nPjwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TG9jYWwgWW9jdG8gUHJvamVjdCBvciBMb2NhbCBPcGVuRW1iZWRkZWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVsZWFzZSBjYXVzZXMgeW91ciBUb2FzdGVyIFByb2plY3RzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhZ2FpbnN0IHRoZSBoZWFkIG9mIHRoZSA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBvciA8ZmlsZW5hbWU+b3BlbmVtYmVkZGVkLWNvcmU8L2ZpbGVuYW1lPiBjbG9uZSB5b3UKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgbG9jYWwgdG8gdGhlIG1hY2hpbmUgcnVubmluZyBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1yZWxlYXNlcy1jb21wcmlzZWQtb2YnPgorICAgICAgICAgICAgPHRpdGxlPldoYXQgTWFrZXMgVXAgYSBSZWxlYXNlPzwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEEgcmVsZWFzZSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TmFtZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJlbGVhc2UgKDxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZWxlYXNlIG5hbWUgbmV2ZXIgYXBwZWFycyBpbiB0aGUgdGhlIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zZXF1ZW50bHksIGEgdXNlciBuZXZlciBzZWVzIHRoZSByZWxlYXNlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXNjcmlwdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+ZGVzY3JpcHRpb248L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRlc2NyaXB0aW9uIGlzIHdoYXQgdXNlcnMgZW5jb3VudGVyIHdoZW4gY3JlYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RzIHdpdGggdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IGNvbmZpZ3VyZSB5b3VyIHJlbGVhc2UsIGJlIHN1cmUgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICBhIGRlc2NyaXB0aW9uIHRoYXQgc3VmZmljaWVudGx5IGRlc2NyaWJlcyBhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyc3RhbmRhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgVG9hc3RlciBoYXMgbW9yZSB0aGFuIG9uZSByZWxlYXNlIGNvbmZpZ3VyZWQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBkZXNjcmlwdGlvbnMgYXBwZWFyIGxpc3RlZCBpbiBhIGRyb3AgZG93biBtZW51CisgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGEgdXNlciBjcmVhdGVzIGEgbmV3IHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiBUb2FzdGVyIGhhcyBvbmx5IG9uZSByZWxlYXNlIGNvbmZpZ3VyZWQsIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdHMgY3JlYXRlZCB1c2luZyB0aGUgd2ViIGludGVyZmFjZSB0YWtlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgYW5kIHRoZSBkcm9wIGRvd24gbWVudSBkb2VzIG5vdCBkaXNwbGF5IGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Qml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEJpdGJha2UgdmVyc2lvbiAoPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gYnVpbGQgbGF5ZXJzIHNldCBpbiB0aGUgY3VycmVudCByZWxlYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGlzIGRlc2NyaWJlZCBieSBhIG5hbWUsIGEgR2l0IFVSTCwgYQorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGluIHRoZSBHaXQgVVJMLCBhbmQgYSBkaXJlY3RvcnkgcGF0aCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCByZXBvc2l0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0IGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgIGEgVG9hc3RlciBKU09OIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgQml0QmFrZSB2ZXJzaW9uIHVzZXMgdGhlIG1hc3RlciBicmFuY2ggZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCByZXBvc2l0b3J5OgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAiYml0YmFrZSIgOiBbCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgICB9CisgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgbW9yZSBkZXRhaWwgb24gZWFjaCBvZiB0aGUgaXRlbXMgdGhhdCBjb21wcmlzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEJpdEJha2UgdmVyc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5OYW1lOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+KSB1c2VkIHRvIHJlZmVyIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB2ZXJzaW9uIG9mIEJpdEJha2UgeW91IGFyZSB1c2luZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbmFtZSBpcyBuZXZlciBleHBvc2VkIHRocm91Z2ggVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HaXQgVVJMOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBVUkwgKDxmaWxlbmFtZT5naXR1cmw8L2ZpbGVuYW1lPikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBCaXRCYWtlIEdpdCByZXBvc2l0b3J5IGNsb25lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVG9hc3RlciBwcm9qZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CcmFuY2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEdpdCBicmFuY2gsIG9yIHJldmlzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+KSBvZiB0aGUgQml0QmFrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IHVzZWQgd2l0aCBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkRpcmVjdG9yeSBQYXRoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdWItZGlyZWN0b3J5IG9mIHRoZSBCaXRCYWtlIHJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5kaXJwYXRoPC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgR2l0IFVSTCBpbmNsdWRlcyBtb3JlIHRoYW4gb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnksIHlvdSBuZWVkIHRvIHNldCB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhlIFVSTCBkb2VzIG5vdCBpbmNsdWRlIG1vcmUgdGhhbiBhIHNpbmdsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LCB5b3UgY2FuIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+ZGlycGF0aDwvZmlsZW5hbWU+IHRvIGEgbnVsbCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkuZS4gIiIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnJhbmNoOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYnJhbmNoIGZvciB0aGUgbGF5ZXIgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAoPGZpbGVuYW1lPmJyYW5jaDwvZmlsZW5hbWU+KSB1c2VkIHdpdGggdGhlIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgZm9yIHRoZSBPcGVuRW1iZWRkZWQgbGF5ZXIgc291cmNlLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYXN0ZXIiLCAiZmlkbyIsIGFuZCAiZGl6enkiIGJyYW5jaGVzIGFyZSBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZWZhdWx0IExheWVyczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNldCBvZiBkZWZhdWx0IGxheWVycworICAgICAgICAgICAgICAgICAgICAgICAgKDxmaWxlbmFtZT5kZWZhdWx0bGF5ZXJzPC9maWxlbmFtZT4pIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBwcm9qZWN0IGNvbmZpZ3VyYXRpb24gd2hlbiBhIHByb2plY3QgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5MYXllciBTb3VyY2UgUHJpb3JpdGllczwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBBIHNwZWNpZmljYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlPC9saW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdGllcyAoPGZpbGVuYW1lPmxheWVyc291cmNlcHJpb3JpdHk8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgICAgICBJbiBvcmRlciBmb3IgVG9hc3RlciB0byB3b3JrIGFzIGludGVuZGVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbXBvcnRlZCBsYXllcnMiIGxheWVyIHNvdXJjZSBzaG91bGQgaGF2ZSB0aGUgaGlnaGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksIHdoaWNoIG1lYW5zIHRoYXQgbGF5ZXJzIG1hbnVhbGx5IGltcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VycyB3aXRoIHRoZSAiSW1wb3J0IGxheWVyIiBmdW5jdGlvbmFsaXR5IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5cyBiZSB2aXNpYmxlIGFuZCBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkhlbHAgVGV4dDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSGVscCB0ZXh0ICg8ZmlsZW5hbWU+aGVscHRleHQ8L2ZpbGVuYW1lPikgdGhhdCBleHBsYWlucworICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCB0aGUgcmVsZWFzZSBkb2VzIHdoZW4gc2VsZWN0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGhlbHAgdGV4dCBhcHBlYXJzIGJlbG93IHRoZSByZWxlYXNlIGRyb3AtZG93bgorICAgICAgICAgICAgICAgICAgICAgICAgbWVudSB3aGVuIHlvdSBjcmVhdGUgYSBUb2FzdGVyIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaGVscCB0ZXh0IHNob3VsZCBhc3Npc3QgdXNlcnMgaW4gbWFraW5nIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBkZWNpc2lvbiByZWdhcmRpbmcgdGhlIHJlbGVhc2UgdG8gdXNlIGZvciBhIGdpdmVuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRvIHN1bW1hcml6ZSB3aGF0IGNvbXByaXNlcyBhIHJlbGVhc2UsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAgICBleGFtcGxlIGZyb20gYSBUb2FzdGVyIEpTT04gZmlsZS4KKyAgICAgICAgICAgICAgICBUaGUgY29uZmlndXJhdGlvbiBuYW1lcyB0aGUgcmVsZWFzZSAibWFzdGVyIiBhbmQgdXNlcyB0aGUKKyAgICAgICAgICAgICAgICAibWFzdGVyIiBicmFuY2ggcHJvdmlkZWQgYnkgdGhlIGxheWVyIHNvdXJjZSBvZiB0eXBlCisgICAgICAgICAgICAgICAgImxheWVyaW5kZXgiLCB3aGljaCBpcyBjYWxsZWQgIk9wZW5FbWJlZGRlZCIsIGFuZCBzZXRzCisgICAgICAgICAgICAgICAgdGhlIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IGxheWVyIGFzIHRoZSBvbmUKKyAgICAgICAgICAgICAgICB0byBiZSBhZGRlZCBieSBkZWZhdWx0IHRvIGFueSBwcm9qZWN0cyBjcmVhdGVkIGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgVGhlIEJpdEJha2UgdmVyc2lvbiB1c2VkIHdvdWxkIGJlIGRlZmluZWQgYXMgc2hvd24gZWFybGllcgorICAgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBsaXN0OgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgInJlbGVhc2VzIjogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBtYXN0ZXIiLAorICAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSBPcGVuRW1iZWRkZWQgbWFzdGVyIGJyYW5jaCwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgIH0KKyAgICAgXQorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWpzb24tZmlsZXMnPgorICAgICAgICA8dGl0bGU+SlNPTiBGaWxlczwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgYXJlIGdvaW5nIHRvIGJlIHVzaW5nIFRvYXN0ZXIgaW4gQnVpbGQgTW9kZSwgaXQgbXVzdAorICAgICAgICAgICAgYmUgaW5pdGlhbGx5IGNvbmZpZ3VyZWQgYmVmb3JlIHVzZS4KKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY3VzdG9taXplcyBsYXllciBzb3VyY2Ugc2V0dGluZ3MgYW5kIFRvYXN0ZXIgZGVmYXVsdHMKKyAgICAgICAgICAgIGZvciBhbGwgdXNlcnMgYW5kIGlzIHBlcmZvcm1lZCBieSB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICAgICAgVG9hc3RlciBDb25maWd1cmF0aW9uIChpLmUgIHRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IpLgorICAgICAgICAgICAgVGhlIFRvYXN0ZXIgQWRtaW5pc3RyYXRvciBwZXJmb3JtcyB0aGlzIGNvbmZpZ3VyYXRpb24gdGhyb3VnaCB0aGUKKyAgICAgICAgICAgIERqYW5nbyBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRvIG1ha2UgaXQgZWFzaWVyIHRvIGluaXRpYWxseSBzdGFydCBUb2FzdGVyLCB5b3UgY2FuIGltcG9ydCBhCisgICAgICAgICAgICBwcmUtZGVmaW5lZCBjb25maWd1cmF0aW9uIGZpbGUgdXNpbmcgdGhlCisgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWNvbW1hbmQtbG9hZGNvbmYnPjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgY29tbWFuZC4KKyAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgYSBKU09OLWZvcm1hdHRlZCB0ZXh0IGZpbGUgd2l0aAorICAgICAgICAgICAgICAgIHNwZWNpZmljIGZpZWxkcyB0aGF0IFRvYXN0ZXIgcmVjb2duaXplcy4KKyAgICAgICAgICAgICAgICBJdCBpcyBub3QgYSBkYXRhIGR1bXAgZnJvbSB0aGUgZGF0YWJhc2UsIHNvIGl0IGNhbm5vdCBiZQorICAgICAgICAgICAgICAgIGxvYWRlZCBkaXJlY3RseSBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICA8L25vdGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEJ5IGNvbnZlbnRpb24sIHRoZSBzdXBwbGllZCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgIFRoZSBUb2FzdGVyIEFkbWluaXN0cmF0b3IgY2FuIGN1c3RvbWl6ZSB0aGUgZmlsZSBwcmlvciB0byBsb2FkaW5nCisgICAgICAgICAgICBpdCBpbnRvIFRvYXN0ZXIuCisgICAgICAgICAgICBXaGVuIHlvdSBzZXQgdXAgVG9hc3RlciBsb2NhbGx5IHRvIHJ1biBpbiBCdWlsZCBNb2RlLCB0aGUgc3lzdGVtCisgICAgICAgICAgICBzdGFydHVwIHNjcmlwdCBhY3RpdmVseSBsb29rcyBmb3IgY29tcGF0aWJsZSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICAgICBhbmQgcHJvbXB0cyB5b3UgdG8gc2VsZWN0IGEgZmlsZSB0byBsb2FkIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUKKyAgICAgICAgICAgIGRhdGFiYXNlIGhhcyBub3QgYmVlbiBjb25maWd1cmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tZmlsZS1jaG9pY2VzJz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEZpbGUgQ2hvaWNlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRocmVlIHZlcnNpb25zIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZXhpc3Q6CisgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb248L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIDxmaWxlbmFtZT5jb25mPC9maWxlbmFtZT4gZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCdzIDxmaWxlbmFtZT5tZXRhLXlvY3RvPC9maWxlbmFtZT4gbGF5ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZlcnNpb24gY29udGFpbnMgdGhlIGRlZmF1bHQgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgcHJvbXB0ZWQgdG8gc2VsZWN0IHRoaXMgZmlsZSBkdXJpbmcgdGhlIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCB1cCBwcm9jZXNzIGlmIHlvdSBjbG9uZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG9reTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mWU9DVE9fR0lUX1VSTDsvcG9reTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPm1ldGEvY29uZi90b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IGRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5FbWJlZGRlZCdzIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmVyc2lvbiBjb250YWlucyB0aGUgZGVmYXVsdCBPcGVuRW1iZWRkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZm9yIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIHByb21wdGVkIHRvIHNlbGVjdCB0aGlzIGZpbGUgZHVyaW5nIHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdXAgcHJvY2VzcyBpZiB5b3UgaGFkIGNsb25lZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+IHJlcG9zaXRvcnkgKGkuZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5naXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZTwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgPGZpbGVuYW1lPlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0ZWQgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0ZpbGU6VG9hc3RlcmNvbmYuanNvbi50eHQucGF0Y2gnPkZpbGU6VG9hc3RlcmNvbmYuanNvbi50eHQucGF0Y2g8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHVzZWZ1bCBhcyBhIHNhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmb3Igd2hlbiB5b3Ugd2FudCB0byBzZXQgdXAgVG9hc3RlciBhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZWQgc2VydmljZSBpbiBCdWlsZCBNb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nanNvbi1zdHJ1Y3R1cmUnPgorICAgICAgICAgICAgPHRpdGxlPkZpbGUgU3RydWN0dXJlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZSBjb25zaXN0cyBvZgorICAgICAgICAgICAgICAgIGVhc2lseSByZWFkYWJsZSBhcmVhczogY29uZmlndXJhdGlvbiwgbGF5ZXIgc291cmNlcywgQml0QmFrZSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0IHJlbGVhc2UsIGFuZCByZWxlYXNlcy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tY29uZmlnLWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uIEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIHNldHMgd2hpY2ggdmFyaWFibGVzIGFyZSBleHBvc2VkCisgICAgICAgICAgICAgICAgICAgIHRvIHVzZXJzIHRocm91Z2ggdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgVXNlcnMgY2FuIGVhc2lseSBlZGl0IHRoZXNlIHZhcmlhYmxlcy4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHZhcmlhYmxlcyB5b3Ugc2V0IGhlcmUgYXJlIGRpc3BsYXllZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIiBwYWdlIGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgICAgIE1pbmltYWxseSwgeW91IHNob3VsZCBzZXQgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1NQUNISU5FJz48ZmlsZW5hbWU+TUFDSElORTwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIHdoaWNoIGFwcGVhcnMgdG8gdXNlcnMgYXMgcGFydCBvZiB0aGUgcHJvamVjdAorICAgICAgICAgICAgICAgICAgICBwYWdlIGluIFRvYXN0ZXIuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmNvbmZpZzwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImNvbmZpZyI6IHsKKyAgICAgICAgICJNQUNISU5FIiAgICAgIDogInFlbXV4ODYiLAorICAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICAiSU1BR0VfRlNUWVBFUyI6ICJleHQzIGpmZnMyIHRhci5iejIiLAorICAgICAgICAgIklNQUdFX0lOU1RBTExfYXBwZW5kIjogIiIsCisgICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgICJTREtNQUNISU5FIiAgIDogIng4Nl82NCIKKyAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tbGF5ZXJzb3VyY2VzLWFyZWEnPgorICAgICAgICAgICAgICAgIDx0aXRsZT5MYXllciBTb3VyY2VzIEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGRlZmluZXMgdGhlCisgICAgICAgICAgICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9J2xheWVyLXNvdXJjZSc+bGF5ZXIgc291cmNlczwvbGluaz4KKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciB1c2VzLgorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIHJlYWRzIGxheWVyIGluZm9ybWF0aW9uIGZyb20gbGF5ZXIgc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgVGhyZWUgdHlwZXMgb2YgbGF5ZXIgc291cmNlcyBleGlzdCB0aGF0IFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplczogTG9jYWwsIExheWVySW5kZXgsIGFuZCBJbXBvcnRlZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExvY2FsIGxheWVyIHNvdXJjZSByZWFkcyBsYXllcnMgZnJvbSBHaXQgY2xvbmVzCisgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBvbiB5b3VyIGxvY2FsIGRyaXZlLgorICAgICAgICAgICAgICAgICAgICBVc2luZyBhIGxvY2FsIGxheWVyIHNvdXJjZSBlbmFibGVzIHlvdSB0byBlYXNpbHkgdGVzdAorICAgICAgICAgICAgICAgICAgICBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgc2V0dGluZyB1cCBhIGhvc3RlZCB2ZXJzaW9uIG9mIFRvYXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgYSBsb2NhbCBsYXllciBzb3VyY2UuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhlIExheWVySW5kZXggbGF5ZXIgc291cmNlIHVzZXMgYSBSRVNUIEFQSSBleHBvc2VkIGJ5CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyBvZiB0aGUgTGF5ZXIgSW5kZXggYXBwbGljYXRpb24gKGUuZyB0aGUgcHVibGljCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy8nPjwvdWxpbms+KQorICAgICAgICAgICAgICAgICAgICB0byByZWFkIGxheWVyIGRhdGEuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoZSBJbXBvcnRlZCBsYXllciBzb3VyY2UgaXMgcmVzZXJ2ZWQgZm9yIGxheWVyIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsbHkgaW50cm9kdWNlZCBieSB0aGUgdXNlciBvciBUb2FzdGVyIEFkbWluaXN0cmF0b3IKKyAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgR1VJLgorICAgICAgICAgICAgICAgICAgICBUaGlzIGxheWVyIHNvdXJjZSBsZXRzIHVzZXJzIGltcG9ydCB0aGVpciBvd24gbGF5ZXJzCisgICAgICAgICAgICAgICAgICAgIGFuZCBidWlsZCB0aGVtIHdpdGggVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgWW91IHNob3VsZCBub3QgcmVtb3ZlIHRoZSBpbXBvcnRlZCBsYXllciBzb3VyY2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIGRlZmF1bHQgPGZpbGVuYW1lPmxheWVyc291cmNlczwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBZb2N0byBQcm9qZWN0IiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgICJsYXllcnMiOiBbCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEiLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgICJsb2NhbF9wYXRoIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhLXlvY3RvIgorICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvLWJzcCIsCisgICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8tYnNwIgorICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICBdCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibGF5ZXJpbmRleCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCisgICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgIH0KKyAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tYml0YmFrZS1hcmVhJz4KKyAgICAgICAgICAgICAgICA8dGl0bGU+Qml0QmFrZSBBcmVhPC90aXRsZT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBUaGlzIGFyZWEgb2YgdGhlIEpTT04gZmlsZSBkZWZpbmVzIHRoZSB2ZXJzaW9uIG9mCisgICAgICAgICAgICAgICAgICAgIEJpdEJha2UgVG9hc3RlciB1c2VzLgorICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gcmVjb2duaXplIGZvdXIKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgQml0QmFrZTogbWFzdGVyLCBmaWRvLCBkaXp6eSwgYW5kIEhFQUQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgSEVBRCBpcyBhIHNwZWNpYWwgb3B0aW9uIHRoYXQgYnVpbGRzIHdoYXRldmVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgb24gZGlzaywgd2l0aG91dCBjaGVja2luZyBvdXQgYW55IHJlbW90ZQorICAgICAgICAgICAgICAgICAgICAgICAgR2l0IHJlcG9zaXRvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5iaXRiYWtlPC9maWxlbmFtZT4gYXJlYToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAiYml0YmFrZSIgOiBbCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiSEVBRCIsCisgICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgICB9CisgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSdqc29uLWRlZmF1bHQtYXJlYSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPkRlZmF1bHQgQXJlYTwvdGl0bGU+CisKKyAgICAgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBhcmVhIG9mIHRoZSBKU09OIGZpbGUgZXN0YWJsaXNoZXMgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgdXNlZCBieSBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICBBcyBzaGlwcGVkLCBUb2FzdGVyIHVzZXMgdGhlICJtYXN0ZXIiIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgdGhlIHN0YXRlbWVudCBpbiB0aGUgSlNPTiBmaWxlIHRoYXQgZXN0YWJsaXNoZXMKKyAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgcmVsZWFzZToKKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICAgICAgPHNlY3Rpb24gaWQ9J2pzb24tcmVsZWFzZXMtYXJlYSc+CisgICAgICAgICAgICAgICAgPHRpdGxlPlJlbGVhc2VzIEFyZWE8L3RpdGxlPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFRoaXMgYXJlYSBvZiB0aGUgSlNPTiBmaWxlIGRlZmluZXMgdGhlIHZlcnNpb25zIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIFRvYXN0ZXIgcmVjb2duaXplcy4KKyAgICAgICAgICAgICAgICAgICAgQXMgc2hpcHBlZCwgVG9hc3RlciBpcyBjb25maWd1cmVkIHRvIHdvcmsgd2l0aCB0aGUgZm91cgorICAgICAgICAgICAgICAgICAgICByZWxlYXNlcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXJlbGVhc2VzLXN1cHBvcnRlZCc+UHJlLUNvbmZpZ3VyZWQgUmVsZWFzZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIHRoZSBkZWZhdWx0IDxmaWxlbmFtZT5yZWxlYXNlczwvZmlsZW5hbWU+IGFyZWE6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgInJlbGVhc2VzIjogWworICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgbWFzdGVyIiwKKyAgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHVzaW5nIHRoZSB0aXAgb2YgdGhlICZsdDthIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy9cIiZndDtZb2N0byBQcm9qZWN0IG1hc3RlciBicmFuY2gmbHQ7L2EmZ3Q7LCB3aGVyZSBhY3RpdmUgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UuIFRoaXMgaXMgbm90IGEgc3RhYmxlIGJyYW5jaCwgc28geW91ciBidWlsZHMgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIgorICAgICAgICAgfSwKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjggRmlkbyIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJmaWRvIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgJmx0O2EgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nLz9oPWZpZG9cIiZndDtZb2N0byBQcm9qZWN0IDEuOCBcIkZpZG9cIiZsdDsvYSZndDsgYnJhbmNoLiIKKyAgICAgICAgIH0sCisgICAgICAgICB7CisgICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IDEuNyBEaXp6eSIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAiZGl6enkiLAorICAgICAgICAgICAgICJicmFuY2giOiAiZGl6enkiLAorICAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiLCAibWV0YS15b2N0byIsICJtZXRhLXlvY3RvLWJzcCJdLAorICAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSAmbHQ7YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9ZGl6enlcIiZndDtZb2N0byBQcm9qZWN0IDEuNyBcIkRpenp5XCImbHQ7L2EmZ3Q7IGJyYW5jaC4iCisgICAgICAgICB9LAorICAgICAgICAgeworICAgICAgICAgICAgICJuYW1lIjogImxvY2FsIiwKKyAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgWW9jdG8gUHJvamVjdCIsCisgICAgICAgICAgICAgImJpdGJha2UiOiAiSEVBRCIsCisgICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHZlcnNpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgeW91IGhhdmUgY2xvbmVkIG9yIGRvd25sb2FkZWQgdG8geW91ciBjb21wdXRlci4iCisgICAgICAgICB9CisgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+CisgICAgICAgIDx0aXRsZT5Vc2VmdWwgQ29tbWFuZHM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHdlYiB1c2VyIGludGVyZmFjZSBhbmQgdGhlIHNjcmlwdHMgdGhhdCBzdGFydAorICAgICAgICAgICAgYW5kIHN0b3AgVG9hc3RlciwgY29tbWFuZC1saW5lIGNvbW1hbmRzIGV4aXN0IHRocm91Z2ggdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gbWFuYWdlbWVudCBzY3JpcHQuCisgICAgICAgICAgICBZb3UgY2FuIGZpbmQgZ2VuZXJhbCBkb2N1bWVudGF0aW9uIG9uCisgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gYXQgdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43L3RvcGljcy9zZXR0aW5ncy8nPkRqYW5nbzwvdWxpbms+CisgICAgICAgICAgICBzaXRlLgorICAgICAgICAgICAgSG93ZXZlciwgc2V2ZXJhbCA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgaGF2ZSBiZWVuCisgICAgICAgICAgICBjcmVhdGVkIHRoYXQgYXJlIHNwZWNpZmljIHRvIFRvYXN0ZXIgYW5kIGFyZSB1c2VkIHRvIGNvbnRyb2wKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYW5kIGJhY2stZW5kIHRhc2tzLgorICAgICAgICAgICAgWW91IGNhbiBsb2NhdGUgdGhlc2UgY29tbWFuZHMgaW4gdGhlCisgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgIChlLmcuIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4pIGF0CisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS9saWIvbWFuYWdlLnB5PC9maWxlbmFtZT4uCisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRob3NlIGNvbW1hbmRzLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzIGdpdmVuCisgICAgICAgICAgICAgICAgICAgIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB5b3UgbXVzdCBiZSBzdXJlIHRoYXQgeW91cgorICAgICAgICAgICAgICAgICAgICB3b3JraW5nIGRpcmVjdG9yeSBpcyBzZXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIFVzaW5nIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICBCdWlsZCBEaXJlY3RvcnkgYWxsb3dzIFRvYXN0ZXIgdG8gZmluZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXIuc3FsaXRlPC9maWxlbmFtZT4gZmlsZSwgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICBGb3Igbm9uLWRlZmF1bHQgZGF0YWJhc2UgY29uZmlndXJhdGlvbnMsIGl0IGlzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgeW91IGNhbiB1c2UgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzCisgICAgICAgICAgICAgICAgICAgIGZyb20gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgQnVpbGQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBUbyBkbyBzbywgdGhlCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVybWFpbi9zZXR0aW5ncy5weTwvZmlsZW5hbWU+IGZpbGUgbXVzdCBiZQorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGRhdGFiYXNlIGJhY2tlbmQuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1idWlsZHNsaXN0Jz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRzbGlzdDwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5idWlsZHNsaXN0PC9maWxlbmFtZT4gY29tbWFuZCBsaXN0cyBhbGwgYnVpbGRzCisgICAgICAgICAgICAgICAgdGhhdCBUb2FzdGVyIGhhcyByZWNvcmRlZC4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYnVpbGRzbGlzdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCByZXR1cm5zIGEgbGlzdCwgd2hpY2ggaW5jbHVkZXMgbnVtZXJpYworICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9ucywgb2YgdGhlIGJ1aWxkcyB0aGF0IFRvYXN0ZXIgaGFzIHJlY29yZGVkIGluIHRoZQorICAgICAgICAgICAgICAgIGN1cnJlbnQgZGF0YWJhc2UuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biB0aGUgPGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPiBjb21tYW5kCisgICAgICAgICAgICAgICAgZmlyc3QgdG8gaWRlbnRpZnkgZXhpc3RpbmcgYnVpbGRzIGluIHRoZSBkYXRhYmFzZSBiZWZvcmUKKyAgICAgICAgICAgICAgICB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWNvbW1hbmQtYnVpbGRkZWxldGUnPjxmaWxlbmFtZT5idWlsZGRlbGV0ZTwvZmlsZW5hbWU+PC9saW5rPgorICAgICAgICAgICAgICAgIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYXNzdW1lcyBkZWZhdWx0IHJlcG9zaXRvcnkgYW5kIGJ1aWxkCisgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjZCB+L3Bva3kvYnVpbGQKKyAgICAgJCBweXRob24gLi4vYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgYnVpbGRzbGlzdAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBJZiB5b3VyIFRvYXN0ZXIgZGF0YWJhc2UgaGFkIG9ubHkgb25lIGJ1aWxkLCB0aGUgYWJvdmUKKyAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+YnVpbGRzbGlzdDwvZmlsZW5hbWU+IGNvbW1hbmQgd291bGQgcmV0dXJuIHNvbWV0aGluZworICAgICAgICAgICAgICAgIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIDE6IHFlbXV4ODYgcG9reSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLWJ1aWxkZGVsZXRlJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+YnVpbGRkZWxldGU8L2ZpbGVuYW1lPjwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+YnVpbGRkZWxldGU8L2ZpbGVuYW1lPiBjb21tYW5kIGRlbGV0ZXMgZGF0YQorICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIGJ1aWxkLgorICAgICAgICAgICAgICAgIEFjY2VzcyB0aGUgY29tbWFuZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBidWlsZGRlbGV0ZSA8cmVwbGFjZWFibGU+YnVpbGRfaWQ8L3JlcGxhY2VhYmxlPgorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBUaGUgY29tbWFuZCBkZWxldGVzIGFsbCB0aGUgYnVpbGQgZGF0YSBmb3IgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5idWlsZF9pZDwvcmVwbGFjZWFibGU+LgorICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCBpcyB1c2VmdWwgZm9yIHJlbW92aW5nIG9sZCBhbmQgdW51c2VkIGRhdGEgZnJvbQorICAgICAgICAgICAgICAgIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUHJpb3IgdG8gcnVubmluZyB0aGUgPGZpbGVuYW1lPmJ1aWxkZGVsZXRlPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICBjb21tYW5kLCB5b3UgbmVlZCB0byBnZXQgdGhlIElEIGFzc29jaWF0ZWQgd2l0aCBidWlsZHMKKyAgICAgICAgICAgICAgICBieSB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICA8bGluayBsaW5rZW5kPSd0b2FzdGVyLWNvbW1hbmQtYnVpbGRzbGlzdCc+PGZpbGVuYW1lPmJ1aWxkc2xpc3Q8L2ZpbGVuYW1lPjwvbGluaz4KKyAgICAgICAgICAgICAgICBjb21tYW5kLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1wZXJmJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+cGVyZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5wZXJmPC9maWxlbmFtZT4gY29tbWFuZCBtZWFzdXJlcyBUb2FzdGVyCisgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHBlcmYKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1hbmQgaXMgYSBzYW5pdHkgY2hlY2sgdGhhdCByZXR1cm5zIHBhZ2UgbG9hZGluZworICAgICAgICAgICAgICAgIHRpbWVzIGluIG9yZGVyIHRvIGlkZW50aWZ5IHBlcmZvcm1hbmNlIHByb2JsZW1zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItY29tbWFuZC1jaGVja3NldHRpbmdzJz4KKyAgICAgICAgICAgIDx0aXRsZT48ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jaGVja3NldHRpbmdzPC9maWxlbmFtZT4gY29tbWFuZCB2ZXJpZmllcworICAgICAgICAgICAgICAgIGV4aXN0aW5nIFRvYXN0ZXIgc2V0dGluZ3MuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGNoZWNrc2V0dGluZ3MKKyAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgSW4gQnVpbGQgTW9kZSwgVG9hc3RlciB1c2VzIHNldHRpbmdzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZQorICAgICAgICAgICAgICAgIGRhdGFiYXNlIHRvIGNvbmZpZ3VyZSB0aGUgYnVpbGRpbmcgdGFza3MuCisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5jaGVja3NldHRpbmdzPC9maWxlbmFtZT4gY29tbWFuZCB2ZXJpZmllcyB0aGF0CisgICAgICAgICAgICAgICAgdGhlIGRhdGFiYXNlIHNldHRpbmdzIGFyZSB2YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICB0aGUgbWluaW1hbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc3RhcnQgYSBidWlsZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gb3JkZXIgZm9yIHRoZSA8ZmlsZW5hbWU+Y2hlY2tzZXR0aW5nczwvZmlsZW5hbWU+IGNvbW1hbmQKKyAgICAgICAgICAgICAgICB0byB3b3JrLCB0aGUgZGF0YWJhc2UgbXVzdCBiZSBjb3JyZWN0bHkgc2V0IHVwIGFuZCBub3QgaGF2ZQorICAgICAgICAgICAgICAgIGV4aXN0aW5nIGRhdGEuCisgICAgICAgICAgICAgICAgVG8gYmUgc3VyZSB0aGUgZGF0YWJhc2UgaXMgcmVhZHksIHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYeKAi2dlLnB5IHN5bmNkYgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYeKAi2dlLnB5IG1pZ3JhdGUgb3JtCisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5h4oCLZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIEFmdGVyIHJ1bm5pbmcgdGhlc2UgY29tbWFuZHMsIHlvdSBjYW4gcnVuIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jaGVja3NldHRpbmdzPC9maWxlbmFtZT4gY29tbWFuZC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWNvbW1hbmQtbG9hZGNvbmYnPgorICAgICAgICAgICAgPHRpdGxlPjxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5sb2FkY29uZjwvZmlsZW5hbWU+IGNvbW1hbmQgbG9hZHMgYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoSlNPTiBmaWxlKS4KKyAgICAgICAgICAgICAgICBZb3UgbXVzdCBydW4gdGhpcyBvbiBhIG5ldyBkYXRhYmFzZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55CisgICAgICAgICAgICAgICAgZGF0YS4KKyAgICAgICAgICAgICAgICBSdW5uaW5nIHRoaXMgY29tbWFuZCBvbiBhbiBleGlzdGluZyBkYXRhYmFzZSB0aGF0IGhhcyBkYXRhCisgICAgICAgICAgICAgICAgcmVzdWx0cyBpbiBlcnJvcnMuCisgICAgICAgICAgICAgICAgQWNjZXNzIHRoZSBjb21tYW5kIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIDxyZXBsYWNlYWJsZT5maWxlcGF0aDwvcmVwbGFjZWFibGU+CisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+bG9hZGNvbmY8L2ZpbGVuYW1lPiBjb21tYW5kIGNvbmZpZ3VyZXMgYSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBleGlzdGluZworICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZS4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWpzb24tZmlsZXMnPkpTT04gRmlsZXM8L2xpbms+IgorICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1jb21tYW5kLXJ1bmJ1aWxkcyc+CisgICAgICAgICAgICA8dGl0bGU+PGZpbGVuYW1lPnJ1bmJ1aWxkczwvZmlsZW5hbWU+PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5ydW5idWlsZHM8L2ZpbGVuYW1lPiBjb21tYW5kIGxhdW5jaGVzCisgICAgICAgICAgICAgICAgc2NoZWR1bGVkIGJ1aWxkcy4KKyAgICAgICAgICAgICAgICBBY2Nlc3MgdGhlIGNvbW1hbmQgYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgcnVuYnVpbGRzCisgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIFRoZSA8ZmlsZW5hbWU+cnVuYnVpbGRzPC9maWxlbmFtZT4gY29tbWFuZCBjaGVja3MgaWYKKyAgICAgICAgICAgICAgICBzY2hlZHVsZWQgYnVpbGRzIGV4aXN0IGluIHRoZSBkYXRhYmFzZSBhbmQgdGhlbiBsYXVuY2hlcyB0aGVtCisgICAgICAgICAgICAgICAgcGVyIHNjaGVkdWxlLgorICAgICAgICAgICAgICAgIFRoZSBjb21tYW5kIHJldHVybnMgYWZ0ZXIgdGhlIGJ1aWxkcyBzdGFydCBidXQgYmVmb3JlIHRoZXkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZS4KKyAgICAgICAgICAgICAgICBUaGUgVG9hc3RlciBMb2dnaW5nIEludGVyZmFjZSByZWNvcmRzIGFuZCB1cGRhdGVzIHRoZSBkYXRhYmFzZQorICAgICAgICAgICAgICAgIHdoZW4gdGhlIGJ1aWxkcyBjb21wbGV0ZS4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKzwvY2hhcHRlcj4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdG9hc3Rlci1tYW51YWwvdG9hc3Rlci1tYW51YWwtc2V0dXAtYW5kLXVzZS54bWwgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OWQyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UueG1sCkBAIC0wLDAgKzEsMTAyNCBAQAorPCFET0NUWVBFIGNoYXB0ZXIgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGNoYXB0ZXIgaWQ9J3RvYXN0ZXItbWFudWFsLXNldHVwLWFuZC11c2UnPgorCis8dGl0bGU+U2V0dGluZyBVcCBhbmQgVXNpbmcgVG9hc3RlcjwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0ndXNpbmctdG9hc3Rlci1pbi1hbmFseXNpcy1tb2RlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIFRvYXN0ZXIgaW4gQW5hbHlzaXMgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyB0byB1c2UgVG9hc3RlciBpbiBBbmFseXNpcyBNb2RlCisgICAgICAgICAgICBhZnRlciBzZXR0aW5nIFRvYXN0ZXIgdXAgYXMgYSBsb2NhbCBpbnN0YW5jZSBvciBhcyBhIGhvc3RlZAorICAgICAgICAgICAgc2VydmljZS4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdzZXR0aW5nLXVwLWxvY2FsbHktYW5kLXJ1bm5pbmctaW4tYW5hbHlzaXMtbW9kZSc+CisgICAgICAgICAgICA8dGl0bGU+U2V0dGluZyBVcCBMb2NhbGx5IGFuZCBSdW5uaW5nIGluIEFuYWx5c2lzIE1vZGU8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb2xsb3cgdGhlc2Ugc3RlcHMgdG8gc2V0IHVwIGEgbG9jYWwgaW5zdGFuY2Ugb2YgVG9hc3RlciBhbmQKKyAgICAgICAgICAgICAgICB0aGVuIHJ1biBpbiBBbmFseXNpcyBNb2RlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U291cmNlIHlvdXIgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHlvdXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiksIHNvdXJjZSB0aGUgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjYnVpbGQtZGlyZWN0b3J5Jz5CdWlsZCBEaXJlY3Rvcnk8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IFRvYXN0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc291cmNlIHRvYXN0ZXIgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IFlvdXIgQnVpbGQgVXNpbmcgQml0QmFrZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQgdG8gc3RhcnQgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBidWlsZHMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Y29yZS1pbWFnZS1taW5pbWFsPC9maWxlbmFtZT4gaW1hZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW4gWW91ciBCcm93c2VyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIHlvdXIgYnJvd3NlciBhbmQgdmlzaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vaG9zdDpwb3J0L3RvYXN0ZXJndWk8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBob3N0IGFuZCBwb3J0IHZhbHVlcywgc2VlIHRoZSBvdXRwdXQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c291cmNlIHRvYXN0ZXIgc3RhcnQ8L2ZpbGVuYW1lPiBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgVG9hc3Rlciwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3VzaW5nLXRoZS10b2FzdGVyLXdlYi1pbnRlcmZhY2UnPlVzaW5nIHRoZSBUb2FzdGVyIFdlYiBJbnRlcmZhY2U8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0nc2V0dGluZy11cC1hLWhvc3RlZC1zZXJ2aWNlLWFuZC1ydW5uaW5nLWluLWFuYWx5c2lzLW1vZGUnPgorICAgICAgICAgICAgPHRpdGxlPlNldHRpbmcgVXAgYSBIb3N0ZWQgU2VydmljZSBhbmQgUnVubmluZyBpbiBBbmFseXNpcyBNb2RlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgQSBob3N0ZWQgc2VydmljZSByZXNpZGVzIG9uIGEgc2hhcmVkIHNlcnZlciBhbmQgYWxsb3dzCisgICAgICAgICAgICAgICAgbXVsdGlwbGUgdXNlcnMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgVG9hc3Rlci4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgbWlnaHQgd2FudCB0byBoYXZlIG11bHRpcGxlCisgICAgICAgICAgICAgICAgbG9jYWwgaW5zdGFuY2VzIG9mIHRoZSBUb2FzdGVyIExvZ2dpbmcgSW50ZXJmYWNlIHJ1bm5pbmcgb24KKyAgICAgICAgICAgICAgICB2YXJpb3VzIHJlbW90ZSBidWlsZCBtYWNoaW5lcywgYW5kIGhhdmUgdGhvc2UgbG9jYWwgaW5zdGFuY2VzCisgICAgICAgICAgICAgICAgYWNjZXNzIGFuZCB1c2UgYSBzaW5nbGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICBUbyBkbyB0aGlzLCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIE1haW50YWluIGEgY29tbW9uIFNRTCBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdXAgc2VwYXJhdGUgaW5zdGFuY2VzIG9mIEJpdEJha2Ugc2VydmVycworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFRvYXN0ZXIgTG9nZ2luZyBJbnRlcmZhY2VzIGZvciBlYWNoIG9mIHRob3NlCisgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBCaXRCYWtlIHNlcnZlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGNvbW1vbiBTUUwgZGF0YWJhc2UgYWxsb3dzIHRoZSBXZWIgc2VydmVyIHRvIHNob3cgZGF0YSBmcm9tCisgICAgICAgICAgICAgICAgYWxsIHRoZSB2YXJpb3VzIEJpdEJha2UgYnVpbGRzLgorICAgICAgICAgICAgICAgIFNldHRpbmcgdGhlIFNRTCBkYXRhYmFzZSBvdXRzaWRlIG9mIGFueQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2J1aWxkLWRpcmVjdG9yeSc+QnVpbGQgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICBtYWludGFpbnMgYSBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHZhcmlvdXMgYnVpbGRzLgorICAgICAgICAgICAgICAgIFRoZSBCaXRCYWtlIHNlcnZlcnMsIHRoZSBTUUwgc2VydmVyLCBhbmQgdGhlIFdlYiBzZXJ2ZXIgb3IKKyAgICAgICAgICAgICAgICBzZXJ2ZXJzIGNhbiBiZSBydW4gb24gc2VwYXJhdGUgbWFjaGluZXMuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgYW5kIHJ1biBhIGhvc3RlZCBzZXJ2aWNlIGFuZCBydW4KKyAgICAgICAgICAgICAgICBUb2FzdGVyIGluIEFuYWx5c2lzIE1vZGU6CisgICAgICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzdGVwcyBhc3N1bWUgYSBUb2FzdGVyIGluc3RhbGxhdGlvbiBwYXRoIG9mCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vb3B0L2JpdGJha2UvPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCBhbmQgU2V0IHVwIHRoZSBEYXRhYmFzZSBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFueSBTUUwgc2VydmVyIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYmVjYXVzZSBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZHZhbnRhZ2VzIG9mIGFkdmFuY2VkIFNRTCBmZWF0dXJlcyBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhc3QgYW5kIHJlbGlhYmxlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2V0dGluZyB1cCA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG1vcmUgY29tcGxleCBhbmQgbWlnaHQgcmVxdWlyZSBhIERhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBBZG1pbmlzdHJhdG9yIHRvIHR1bmUgaXQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBzdXBwb3J0ZWQgZGF0YWJhc2UgYmFja2VuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPiwgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbnRhZ2Ugb2Ygbm8gY29uZmlndXJhdGlvbiBhbmQgYW4gZWFzeSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBUb2FzdGVyIHN0aWxsIHJlcXVpcmVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zcWxpdGU8L2ZpbGVuYW1lPiBiYWNrZW5kIGlzIGFsc28gc2xvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBjb21wYXJlZCB0byA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vIHRyYW5zYWN0aW9uYWwgc3VwcG9ydC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3Ugc2hvdWxkIHNldCB1cCBwcm9wZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgb24gdGhlIHNoYXJlZCBkYXRhYmFzZSBmb3IgZXZlcnlvbmUgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICBiZSB1c2luZyBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYWRtaW5pc3RyYXRvciByaWdodHMgZm9yIHRoZSByb290IGFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgcm9vdCBhY2Nlc3Mgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXNxbC1zZXJ2ZXI8L2ZpbGVuYW1lPiBhbmQgc2V0cyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZSB1c2VyIGFjY291bnRzIGFuZCB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXB0LWdldCBpbnN0YWxsIG15c3FsLXNlcnZlcgorICAgICAkIG15c3FsIC11IHJvb3QKKyAgICAgbXlzcWw+IENSRUFURSBVU0VSICduZXd1c2VyJ0AnbG9jYWxob3N0JyBJREVOVElGSUVEIEJZICdwYXNzd29yZCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBDUkVBVEUgREFUQUJBU0UgJ3RvYXN0ZXInOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYSBzZXBhcmF0ZSBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBEYXRhYmFzZSBTZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNsb25lIGlzIG9ubHkgdXNlZCBmb3IgZ2V0dGluZyB0aGUgbGF0ZXN0IFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB1cCB1c2luZyB0aGUgZm9sbG93aW5nIEdpdCBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBzZXQgdXAgdGhlIGRpcmVjdG9yeSBvdXRzaWRlIG9mIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzZXBhcmF0ZWx5IGNsb25lZCB0cmVlIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCB0aGUgPGZpbGVuYW1lPkRBVEFCQVNFUzwvZmlsZW5hbWU+IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHByZXZpb3VzbHkgY3JlYXRlZCBkYXRhYmFzZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBlc3RhYmxpc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CisgICAgICAgIC4uLgorICAgICBEQVRBQkFTRVMgPSB7CisgICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgICAgICAnRU5HSU5FJzogJ2RqYW5nby5kYi5iYWNrZW5kcy5teXNxbCcsCisgICAgICAgICAgICAgJ05BTUUnOiAndG9hc3RlcicsCisgICAgICAgICAgICAgJ1VTRVInOiAnbmV3dXNlcicsCisgICAgICAgICAgICAgJ1BBU1NXT1JEJzogJ3Bhc3N3b3JkJywKKyAgICAgICAgICAgICAnSE9TVCc6ICcxOTIuMTY4LjAuMjUnLAorICAgICAgICAgICAgICdQT1JUJzogJzMzMDYnLAorICAgICAgICAgfQorICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCBVcCB0aGUgV2ViIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGluc3RhbGwgYW5kIHNldCB1cCBhIGZyb250LWVuZCB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXJ2ZXIgYWxsb3dzIGZvciBsb2FkIGJhbGFuY2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpLXRocmVhZGluZyBvdmVyIFRvYXN0ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43L2hvd3RvL2RlcGxveW1lbnQvd3NnaS8nPjxmaWxlbmFtZT5kamFuZ288L2ZpbGVuYW1lPiBXU0dJPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIEFwYWNoZSB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyIGxpYmFwYWNoZTItbW9kLXdzZ2kKKyAgICAgJCBhMmVubW9kIHdzZ2kKKyAgICAgJCBjYXQgL2V0Yy9hcGFjaGUyL3NpdGVzLWF2YWlsYWJsZS8wMDAtZGVmYXVsdC5jb25mCisKKyAgICAgICAgLi4uCisKKyAgICAgIyB0aGUgV1NHSVB5dGhvblBhdGggaXMgZ2xvYmFsCisgICAgIFdTR0lQeXRob25QYXRoIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci8KKworICAgICAgICAuLi4KKworICAgICAjc25pcCAtIGluIFZpcnR1YWxIb3N0CisgICAgIFdTR0lTY3JpcHRBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgJmx0O0RpcmVjdG9yeSAvL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluLyZndDsKKyAgICAgICAgICZsdDtGaWxlcyB3c2dpLnB5Jmd0OworICAgICAgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgICZsdDsvRmlsZXMmZ3Q7CisgICAgICZsdDsvRGlyZWN0b3J5Jmd0OworCisgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY29sbGVjdCBzdGF0aWMgbWVkaWEgZnJvbSBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY29uZmlndXJpbmcgQXBhY2hlIHRvIHNlcnZlIHRoYXQgc3RhdGljCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciAvdmFyL3d3dy5odG1sL3N0YXRpYyAmYW1wOyZhbXA7IGNkIC92YXIvd3d3Lmh0bWwvc3RhdGljCisgICAgICQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjb2xsZWN0c3RhdGljCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgaW4gVmlydHVhbEhvc3QsIEFIRUFEIG9mIHRoZSBXU0dJU2NyaXB0QWxpYXMgZGVmaW5pdGlvbgorICAgICBBbGlhcyAvc3RhdGljLyAvdmFyL3d3dy5odG1sL3N0YXRpYy8KKworICAgICAmbHQ7RGlyZWN0b3J5IC92YXIvd3d3Lmh0bWwvc3RhdGljLyZndDsKKyAgICAgUmVxdWlyZSBhbGwgZ3JhbnRlZAorICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKworICAgICBXU0dJU2NyaXB0IEFsaWFzIC8gL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHRoZSBkYXRhYmFzZXMgZm9yIHRvYXN0ZXIsIGFuZCB0aGVuIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICB1cCB0aGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbnRpbnVlcyB3aXRoIHRoZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIGZyb20gdGhlIHByZXZpb3VzIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCisgICAgICQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybQorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisKKyAgICAgJCBzZXJ2aWNlIGFwYWNoZTIgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBmaW5kIGdlbmVyYWwgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuNy9yZWYvZGphbmdvLWFkbWluLyc+RGphbmdvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLXVzZWZ1bC1jb21tYW5kcyc+VXNlZnVsIENvbW1hbmRzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FbmFibGUgQnVpbGQgTG9nZ2luZyB0byB0aGUgQ29tbW9uIFNRTCBTZXJ2ZXIgZm9yIEVhY2ggQnVpbGQgRGlyZWN0b3J5IHlvdSBhcmUgVXNpbmc6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjcmVmLWNsYXNzZXMtdG9hc3Rlcic+PGZpbGVuYW1lPnRvYXN0ZXI8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBhbmQgYnVpbGQgaGlzdG9yeSBhcmUgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZG9uZSBpbiBhCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+dG9hc3Rlci5jb25mPC9maWxlbmFtZT4gZmlsZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5zdGFydDwvZmlsZW5hbWU+IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhhdCBsaXZlcyBpbnNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBpbiA8ZmlsZW5hbWU+L2NvbmYvdG9hc3Rlci5jb25mPC9maWxlbmFtZT4uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VGhhdCBmaWxlIHNob3VsZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgSU5IRVJJVCArPSAidG9hc3RlciBidWlsZGhpc3RvcnkiCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gYnVpbGQgaGlzdG9yeSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I21haW50YWluaW5nLWJ1aWxkLW91dHB1dC1xdWFsaXR5Jz5NYWludGFpbmluZyBCdWlsZCBPdXRwdXQgUXVhbGl0eTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgTWFudWFsLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBhbHNvIG5lZWQgdG8gcG9pbnQgdG8gdGhlIGRhdGFiYXNlIHRoYXQgeW91IHNldAorICAgICAgICAgICAgICAgICAgICAgICAgdXAgaW4gc3RlcCAzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGJ5IGV4cG9ydGluZyB0aGUgPGZpbGVuYW1lPkRBVEFCQVNFX1VSTDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBleHBvcnQgREFUQUJBU0VfVVJMPW15c3FsOi8vbmV3dXNlcjpwYXNzd29yZEAxOTIuMTY4LjAuMjU6MzMwNi90b2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHlvdSBhcmUgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXNxbC1zZXJ2ZXI8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBJUCBhZGRyZXNzIHNob3VsZCBiZSB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Tb3VyY2UgeW91ciBCdWlsZCBFbnZpcm9ubWVudCBTZXR1cCBTY3JpcHQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZyb20geW91cgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvbiBlYWNoIG9mIHRoZSBidWlsZCBzeXN0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3kvYnVpbGQ8L2ZpbGVuYW1lPiksIHNvdXJjZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCAoaS5lLgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLWNvcmUtc2NyaXB0Ij48ZmlsZW5hbWU+Jk9FX0lOSVRfRklMRTs8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0iJllPQ1RPX0RPQ1NfUkVGX1VSTDsjc3RydWN0dXJlLW1lbXJlcy1jb3JlLXNjcmlwdCI+PGZpbGVuYW1lPm9lLWluaXQtYnVpbGQtZW52LW1lbXJlczwvZmlsZW5hbWU+PC91bGluaz4pLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgdGhlIEJpdEJha2UgU2VydmVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFydCB0aGUgQml0QmFrZSBzZXJ2ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgLS1wb3N0cmVhZCBjb25mL3RvYXN0ZXIuY29uZiAtLXNlcnZlci1vbmx5IC10IHhtbHJwYyAtQiBsb2NhbGhvc3Q6MCAmYW1wOyZhbXA7IGV4cG9ydCBCQlNFUlZFUj1sb2NhbGhvc3Q6LTEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IHRoZSBMb2dnaW5nIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdGhlIFRvYXN0ZXIgTG9nZ2luZyBJbnRlcmZhY2UgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBub2h1cCBiaXRiYWtlIC0tb2JzZXJ2ZS1vbmx5IC11IHRvYXN0ZXJ1aSA+dG9hc3Rlcl91aS5sb2cgJmFtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGhhcmQtY29kZWQgcG9ydHMgYXJlIHVzZWQgaW4gdGhlIEJpdEJha2Ugb3B0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZXJlIGlzIGVub3VnaCBjb2RlIHRvIHJ1bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5hdXRvZGlzY292ZXJ5PC9maWxlbmFtZT4gZm9yIEJpdEJha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2luZyBzbyBwcmV2ZW50cyBjb2xsaXNpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3RhcnQgQnVpbGRzIFVzaW5nIEJpdEJha2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgPGZpbGVuYW1lPmJpdGJha2U8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIHN0YXJ0IGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIG9uIGEgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgYnVpbGRzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmNvcmUtaW1hZ2UtbWluaW1hbDwvZmlsZW5hbWU+IGltYWdlOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1taW5pbWFsCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCBhIGJ1aWxkIGluIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIERpcmVjdG9yeSwgYmUgc3VyZSB0byA8ZmlsZW5hbWU+a2lsbDwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQml0QmFrZSBzZXJ2ZXIgZm9yIHRoYXQgYnVpbGQgYXJlYToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIC1tCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGUgVG9hc3RlciB3ZWIgaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndXNpbmctdGhlLXRvYXN0ZXItd2ViLWludGVyZmFjZSc+VXNpbmcgdGhlIFRvYXN0ZXIgV2ViIEludGVyZmFjZTwvbGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10b2FzdGVyLWluLWJ1aWxkLW1vZGUnPgorICAgICAgICA8dGl0bGU+VXNpbmcgVG9hc3RlciBpbiBCdWlsZCBNb2RlPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIHVzZSBUb2FzdGVyIGluIEJ1aWxkIE1vZGUKKyAgICAgICAgICAgIGFmdGVyIHNldHRpbmcgVG9hc3RlciB1cCBhcyBhIGxvY2FsIGluc3RhbmNlIG9yIGFzIGEgaG9zdGVkCisgICAgICAgICAgICBzZXJ2aWNlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtbG9jYWxseS1hbmQtcnVubmluZy1pbi1idWlsZC1tb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIExvY2FsbHkgYW5kIFJ1bm5pbmcgaW4gQnVpbGQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgYSBsb2NhbCBpbnN0YW5jZSBvZiBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgIHRoZW4gcnVuIGluIEJ1aWxkIE1vZGU6CisgICAgICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlByZXBhcmUgeW91ciBCdWlsZCBTeXN0ZW06PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91ciBzeXN0ZW0gaGFzIHRoZSBUb2FzdGVyIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgYnkgZm9sbG93aW5nIHRoZSBzdGVwcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd0b2FzdGVyLWVzdGFibGlzaGluZy10b2FzdGVyLXN5c3RlbS1kZXBlbmRlbmNpZXMnPkVzdGFibGlzaGluZyBUb2FzdGVyIFN5c3RlbSBEZXBlbmRlbmNpZXM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkdldCBTZXQgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBHZXQgdGhlIHJlcXVpcmVtZW50cyBzZXQgdXAgc28gdGhhdCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgdG8gYnVpbGQgaW1hZ2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsjeXAtcmVzb3VyY2VzJz5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBRdWljayBTdGFydCBmb3IgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCBUb2FzdGVyOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIHRoZSByb290IG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5IChlLmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5LzwvZmlsZW5hbWU+KSwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlL2Jpbi90b2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYSBTdXBlcnVzZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIERqYW5nbyB3aWxsIGFzayB5b3UgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgc3VwZXJ1c2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBza2lwIHRoaXMgc3RlcCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzdXBlcnVzZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgc3VwZXJ1c2VyIHRvIGFjY2VzcyB0aGUgRGphbmdvCisgICAgICAgICAgICAgICAgICAgICAgICBhZG1pbmlzdHJhdGlvbiBpbnRlcmZhY2UgYW5kIG1ha2UgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgY29uZmlndXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNlbGVjdCB0aGUgQnVpbGQgTG9nIERpcmVjdG9yeTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91CisgICAgICAgICAgICAgICAgICAgICAgICB3YW50IHRvIHN0b3JlIHRoZSBidWlsZCBsb2cgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2luZyBhIGRpcmVjdG9yeSBmb3IgdGhlc2UgZmlsZXMgbWFrZXMgc3VyZSB0aGV5CisgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYWx3YXlzIGF2YWlsYWJsZSB0byB5b3UuCisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGNob29zZSBhIGRpcmVjdG9yeSwgdGhlIGxvZ3MgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhcHBlYXIgKGUuZy4gZGVsZXRpbmcgdGhlIEJ1aWxkIERpcmVjdG9yeSkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBUb2FzdGVyIHByb21wdHMgeW91IGZvciB0aGUgQnVpbGQgTG9nCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHlvdSBjYW4gc2VsZWN0IHRoZSBzdWdnZXN0ZWQgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgcHJvdmlkZSBhIHBhdGggdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U3BlY2lmeSB0aGUgTGF5ZXIgQ2hlY2tvdXQgRGlyZWN0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGFza3MgeW91IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllcnMgYXJlIGNoZWNrZWQgb3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBjbG9uZXMgYW55IGxheWVycyBuZWVkZWQgZm9yIHlvdXIgYnVpbGRzCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhpcyBkaXJlY3RvcnkuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+V2hlbiBUb2FzdGVyIHByb21wdHMgeW91IGZvciB0aGUgTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrb3V0IGRpcmVjdG9yeSwgeW91IGNhbiBzZWxlY3QgdGhlIHN1Z2dlc3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBvciBwcm92aWRlIGEgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TcGVjaWZ5IHRoZSBCdWlsZCBEaXJlY3RvcnkgUGF0aDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZWxlY3QgdGhlIHN1Z2dlc3RlZCBkZWZhdWx0IG9yIHByb3ZpZGUgYQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaG9vc2UgV2hldGhlciBvciBub3QgdG8gSW1wb3J0IGEgRGVmYXVsdCBUb2FzdGVyIENvbmZpZ3VyYXRpb24gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBhc2tzIHlvdSBpZiB5b3Ugd2FudCB0byBpbXBvcnQgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHN0b3JlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgSlNPTiBmaWxlcyBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgaW5mb3JtYXRpb24gb24gSlNPTiBmaWxlcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItanNvbi1maWxlcyc+SlNPTiBGaWxlczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPllvdSBjYW4gc2tpcCBpbXBvcnRpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGVudGVyaW5nICIwIiBhdCB0aGUgcHJvbXB0LgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaW1wb3J0IG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgbGlzdGVkIGR1cmluZyB0aGlzIHN0ZXAuCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsd2F5cyBhbWVuZCB0aGUgaW1wb3J0ZWQgY29uZmlndXJhdGlvbiBkdXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGEgbGF0ZXIgc3RhZ2UgdGhyb3VnaCB0aGUgRGphbmdvIGFkbWluaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+Rm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gRGphbmdvLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjcvJz5kb2N1bWVudGF0aW9uPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZmluZCBpbmZvcm1hdGlvbiBvbiBUb2FzdGVyLXNwZWNpZmljCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWFuYWdlLnB5PC9maWxlbmFtZT4gY29tbWFuZHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+T3BlbiB0aGUgQnJvd3Nlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm8gYnJvd3NlciB3aW5kb3cgYXBwZWFycywgb3BlbiB5b3VyIGZhdm9yaXRlCisgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyIGFuZCBlbnRlciB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBodHRwOi8vbG9jYWxob3N0OjgwMDAvdG9hc3Rlcmd1aQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBub3cgdXNlIHRoZSBUb2FzdGVyIHdlYiBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3NldHRpbmctdXAtYS1ob3N0ZWQtc2VydmljZS1hbmQtcnVubmluZy1pbi1idWlsZC1tb2RlJz4KKyAgICAgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIGEgSG9zdGVkIFNlcnZpY2UgYW5kIFJ1bm5pbmcgaW4gQnVpbGQgTW9kZTwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEZvbGxvdyB0aGVzZSBzdGVwcyB0byBzZXQgdXAgYSBob3N0ZWQgc2VydmljZSBhbmQgcnVuIFRvYXN0ZXIKKyAgICAgICAgICAgICAgICBpbiBCdWlsZCBNb2RlOgorICAgICAgICAgICAgICAgIDxvcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5QcmVwYXJlIHlvdXIgQnVpbGQgU3lzdGVtOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBCZSBzdXJlIHlvdXIgc3lzdGVtIGhhcyB0aGUgVG9hc3RlciByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGZvbGxvd2luZyB0aGUgc3RlcHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz5Fc3RhYmxpc2hpbmcgVG9hc3RlciBTeXN0ZW0gRGVwZW5kZW5jaWVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5HZXQgU2V0IFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgR2V0IHRoZSByZXF1aXJlbWVudHMgc2V0IHVwIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGJ1aWxkIGltYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19RU19VUkw7I3lwLXJlc291cmNlcyc+U2V0dGluZyBVcCB0byBVc2UgdGhlIFlvY3RvIFByb2plY3Q8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQgZm9yIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgU3VyZSBNYW5hZ2VtZW50IGlzIEVuYWJsZWQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyBUb2FzdGVyIHVuZGVyIEFwYWNoZSwgeW91IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHN1cmUgbWFuYWdlbWVudCBpcyBlbmFibGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgVG8gZW5hYmxlIG1hbmFnZW1lbnQsIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPk1BTkFHRUQ8L2ZpbGVuYW1lPiB0byAiVHJ1ZSIgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJpdGJha2UvbGliL3RvYXN0ZXIvc2V0dGluZ3MucHk8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgTUFOQUdFRD0iVHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNldCBVcCBUb2FzdGVyIGZvciBOb3JtYWwgVXNhZ2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBlYWNoIGJ1aWxkIGVudmlyb25tZW50LCBsYXllcgorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcywgYW5kIEJpdEJha2UgdmVyc2lvbnMuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+VmVyaWZ5IHRoYXQgeW91ciByZWxlYXNlcyBoYXZlIGJlZW4gbG9hZGVkIGNvcnJlY3RseSBieQorICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZSB0byBjcmVhdGUgYSBuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QuCisgICAgICAgICAgICAgICAgICAgICAgICBDaGVjayB0aGUgIlJlbGVhc2VzIiBkcm9wZG93biBtZW51IHRvIGJlIHN1cmUgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bHkgc3BlY2lmaWVkIHJlbGVhc2VzIGV4aXN0LjwvcGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPklmIHlvdSB3YW50IHRvIHVzZSB0aGUgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBzdGVwLCBoZXJlIGlzIGEgc2V0IG9mIGV4YW1wbGUgY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc29tZSBkZXNjcmlwdGlvbnMgYXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBDcmVhdGUgdGhlIHVzZXIgdW5kZXIgd2hpY2ggdGhlIGJ1aWxkcyB3aWxsIHJ1bgorICAgICAkIGFkZHVzZXIgcG9reQorCisgICAgICMgQnJpbmcgdXAgdGhlIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZQorICAgICAkeGRnLW9wZW4gaHR0cDovLzxyZXBsYWNlYWJsZT5zZXJ2ZXItYWRkcmVzczwvcmVwbGFjZWFibGU+L2FkbWluLworCisgICAgICMgTG9naW4gd2l0aCB0aGUgYWRtaW4gdXNlciBwcmV2aW91c2x5IGNyZWF0ZWQKKworICAgICAjIEdvIHRvIHRoZSBCdWlsZEVudmlyb25tZW50IG9iamVjdCBpbiBCdWlsZCBFbnZpcm9ubWVudHMgYW5kCisgICAgICMgc2V0IGFkZHJlc3MgdG8gbG9jYWwgaG9zdCwgc291cmNlZGlyIHRvIC9ob21lL3Bva3ksIGFuZAorICAgICAjIGJ1aWxkZGlyIHRvIC9ob21lL3Bva3lidWlsZC4KKyAgICAgIworICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisKKyAgICAgIyBHbyB0byBIb21lLCBMYXllciBTb3VyY2VzIGFuZCBzZWxlY3QgYWRkIExheWVyIFNvdXJjZQorICAgICAjIE5hbWU6IE9wZW5FbWJlZGRlZCwgU291cmNldHlwZTogbGF5ZXJpbmRleCwKKyAgICAgIyBBcGl1cmw6IGh0dHA6Ly9sYXllcnMgb3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8KKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgQml0YmFrZSBWZXJzaW9ucywgQWRkIGJpdGJha2UgdmVyc2lvbjsKKyAgICAgIyBUYWtlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbTogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvcmVmcy9oZWFkcywKKyAgICAgIyBUaGlzIGV4YW1wbGUgYXNzdW1lcyAibWFzdGVyIiB2ZXJzaW9uLgorICAgICAjIHNldCBOYW1lOiBtYXN0ZXIsIEdpdHVybCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICMgYnJhbmNoIG1hc3RlciwgZGlycGF0aCAvCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgdG8gY29uZmlndXJlIHRoZSBwcm9qZWN0IHJlbGVhc2VzLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFyaWFibGVzLCBhbmQgdXBkYXRlIGluZm9ybWF0aW9uIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBsYXllciBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRpbnVpbmcgd2l0aCB0aGUgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBHbyB0byBIb21lLCBSZWxlYXNlcywgQWRkIHJlbGVhc2UKKyAgICAgIyBzZXQgTmFtZTogbWFzdGVyLCBEZXNjcmlwdGlvbjogQ3VycmVudCBtYXN0ZXIgcmVsZWFzZSwgc2VsZWN0IEJpdGJha2UgVmVyc2lvbiwKKyAgICAgIyBhbmQgQnJhbmNoOiBtYXN0ZXIKKyAgICAgIyBTYXZlIHlvdXIgY2hhbmdlcyBhbmQgZXhpdAorCisgICAgICMgR28gdG8gSG9tZSwgVG9hc3RlciBTZXR0aW5ncywgc2VsZWN0IHRoZSBTZXR0aW5nIGZvciBERUZBVUxUX1JFTEVBU0UKKyAgICAgIyBzZXQgSGVscHRleHQ6IFRoaXMgc2VsZWN0cyB0aGUgZGVmYXVsdCByZWxlYXNlLiwgVmFsdWU6IG1hc3RlcgorICAgICAjIFNhdmUgeW91ciBjaGFuZ2VzIGFuZCBleGl0CisKKyAgICAgIyBHbyB0byBIb21lLCBCaXRiYWtlIFZlcnNpb25zLCBBZGQgYml0YmFrZSB2ZXJzaW9uOworICAgICAjIHRha2UgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIDogaHR0cDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UvcmVmcy9oZWFkcywKKyAgICAgIyB0aGlzIG1hbnVhbCBhc3N1bWVzIHRoZSBtYXN0ZXIgdmVyc2lvbgorICAgICAjIHNldCBOYW1lOiBtYXN0ZXIsIEdpdHVybCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisgICAgICMgYnJhbmNoIG1hc3RlciwgZGlycGF0aCAvCisgICAgICMgU2F2ZSB5b3VyIGNoYW5nZXMgYW5kIGV4aXQKKworICAgICAjIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24KKyAgICAgIyBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBsc3VwZGF0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24gb24gVG9hc3Rlci1zcGVjaWZpYworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1hbmFnZS5weTwvZmlsZW5hbWU+IGNvbW1hbmRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCBhbmQgU2V0IHVwIHRoZSBEYXRhYmFzZSBTZXJ2ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdXNlIGFueSBTUUwgc2VydmVyIG91dCBvZiB0aGUgYm94LgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4gYmVjYXVzZSBpdCBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZHZhbnRhZ2VzIG9mIGFkdmFuY2VkIFNRTCBmZWF0dXJlcyBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhc3QgYW5kIHJlbGlhYmxlIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgc2V0dGluZyB1cCA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIG1vcmUgY29tcGxleCBhbmQgbWlnaHQgcmVxdWlyZSBhIERhdGFiYXNlCisgICAgICAgICAgICAgICAgICAgICAgICBBZG1pbmlzdHJhdG9yIHRvIHR1bmUgaXQuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QW5vdGhlciBzdXBwb3J0ZWQgZGF0YWJhc2UgYmFja2VuZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFdpdGggPGZpbGVuYW1lPnNxbGl0ZTM8L2ZpbGVuYW1lPiwgeW91IGhhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbnRhZ2Ugb2Ygbm8gY29uZmlndXJhdGlvbiBhbmQgYW4gZWFzeSBpbnN0YWxsYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBIb3dldmVyLCBUb2FzdGVyIHN0aWxsIHJlcXVpcmVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIDxmaWxlbmFtZT5zcWxpdGU8L2ZpbGVuYW1lPiBiYWNrZW5kIGlzIGFsc28gc2xvd2VyCisgICAgICAgICAgICAgICAgICAgICAgICBhcyBjb21wYXJlZCB0byA8ZmlsZW5hbWU+bXlzcWwtc2VydmVyPC9maWxlbmFtZT4sIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vIHRyYW5zYWN0aW9uYWwgc3VwcG9ydC48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYT5Zb3Ugc2hvdWxkIHNldCB1cCBwcm9wZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkCisgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgb24gdGhlIHNoYXJlZCBkYXRhYmFzZSBmb3IgZXZlcnlvbmUgdGhhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICBiZSB1c2luZyBUb2FzdGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYWRtaW5pc3RyYXRvciByaWdodHMgZm9yIHRoZSByb290IGFjY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgcm9vdCBhY2Nlc3Mgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgaW5zdGFsbHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5teXNxbC1zZXJ2ZXI8L2ZpbGVuYW1lPiBhbmQgc2V0cyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgc29tZSB1c2VyIGFjY291bnRzIGFuZCB0aGUgZGF0YWJhc2UuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYXB0LWdldCBpbnN0YWxsIG15c3FsLXNlcnZlcgorICAgICAkIG15c3FsIC11IHJvb3QKKyAgICAgbXlzcWw+IENSRUFURSBVU0VSICduZXd1c2VyJ0AnbG9jYWxob3N0JyBJREVOVElGSUVEIEJZICdwYXNzd29yZCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiAqIC4gKiBUTyAnbmV3dXNlcidAJ2xvY2FsaG9zdCc7CisgICAgIG15c3FsPiBDUkVBVEUgREFUQUJBU0UgJ3RvYXN0ZXInOworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgYSBzZXBhcmF0ZSBjbG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1yZXBvc2l0b3JpZXMnPlNvdXJjZSBSZXBvc2l0b3JpZXM8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBEYXRhYmFzZSBTZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNsb25lIGlzIG9ubHkgdXNlZCBmb3IgZ2V0dGluZyB0aGUgbGF0ZXN0IFRvYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBzZXQgdGhpcyB1cCB1c2luZyB0aGUgZm9sbG93aW5nIEdpdCBjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB0byBzZXQgdXAgdGhlIGRpcmVjdG9yeSBvdXRzaWRlIG9mIGFueQorICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3JpZXMuCisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZ2l0IGNsb25lIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluIHRoZSBzZXBhcmF0ZWx5IGNsb25lZCB0cmVlIGZvciB0aGUgRGF0YWJhc2UgU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc28gdGhhdCB0aGUgPGZpbGVuYW1lPkRBVEFCQVNFUzwvZmlsZW5hbWU+IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHByZXZpb3VzbHkgY3JlYXRlZCBkYXRhYmFzZSBzZXJ2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBlc3RhYmxpc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjYXQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3NldHRpbmdzLnB5CisgICAgICAgIC4uLgorICAgICBEQVRBQkFTRVMgPSB7CisgICAgICAgICAnZGVmYXVsdCc6IHsKKyAgICAgICAgICAgICAnRU5HSU5FJzogJ2RqYW5nby5kYi5iYWNrZW5kcy5teXNxbCcsCisgICAgICAgICAgICAgJ05BTUUnOiAndG9hc3RlcicsCisgICAgICAgICAgICAgJ1VTRVInOiAnbmV3dXNlcicsCisgICAgICAgICAgICAgJ1BBU1NXT1JEJzogJ3Bhc3N3b3JkJywKKyAgICAgICAgICAgICAnSE9TVCc6ICcxOTIuMTY4LjAuMjUnLAorICAgICAgICAgICAgICdQT1JUJzogJzMzMDYnLAorICAgICAgICAgfQorICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNyZWF0ZSB0aGUgRGF0YWJhc2U8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBvcm0KKyAgICAgJCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIGJsZGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcmZhY2UgYXNrcyB5b3UgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVydXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIERvIG5vdCBza2lwIHRoaXMgc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3aWxsIHVzZSB0aGUgc3VwZXJ1c2VyIGFjY291bnQgdG8gYWNjZXNzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIGFuZCBtYWtlIGNoYW5nZXMgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBUb2FzdGVyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZWxlY3QgV2hlcmUgdGhlIEJ1aWxkIFByb2Nlc3MgVGFrZXMgUGxhY2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGNyZWF0ZSB0aHJlZSBkaXJlY3RvcmllcyBmb3Igc3RvcmluZworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgYXJ0aWZhY3RzLCBkb3dubG9hZGluZyBzb3VyY2VzLCBhbmQgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIHRocmVlIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgd3JpdGFibGUgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyLCB3aGljaCBpcyAicG9reSIgaW4gdGhpcyBleGFtcGxlLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJ1aWxkIGFydGlmYWN0cyBkaXJlY3RvcnkgbmVlZHMgdG8gcmVhZGFibGUgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUgdXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhbHNvIG5lZWQgZnJlZSBkaXNrIHNwYWNlIGluIHRoZSByYW5nZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgMTAwIEdieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBhcmUgdGhyZWUgc3VnZ2VzdGVkIGRpcmVjdG9yaWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAvaG9tZS9wb2t5L2J1aWxkYXJ0aWZhY3RzLworICAgICAvaG9tZS9wb2t5L2J1aWxkLworICAgICAvaG9tZS9wb2t5L3NvdXJjZXMvCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TZXQgVXAgdGhlIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gRmlsZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9GaWxlOlRvYXN0ZXJjb25mLmpzb24udHh0LnBhdGNoJz5Eb3dubG9hZCB0aGUgaG9zdGVkIDxmaWxlbmFtZT50b2FzdGVyY29uZi5qc29uPC9maWxlbmFtZT4gZmlsZTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdpa2kgYW5kIGVkaXQgaXQgdG8gc3VpdCB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgb2YgdGhlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci1qc29uLWZpbGVzJz5KU09OIEZpbGVzPC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+QWZ0ZXIgZWRpdGluZyB0aGUgZmlsZSwgbG9hZCBpdCBieSBydW5uaW5nCisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IGxvYWRjb25mIHBhdGgtdG8tdG9hc3RlcmNvbmYuanNvbi1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkNoZWNrIHRoZSBUb2FzdGVyIFNldHRpbmdzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGJ5IHJ1bm5pbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgY2hlY2tzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBwcm9tcHRlZCwgcGFzdGUgaW4gdGhlIGRpcmVjdG9yeSBwYXRocyBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGR1cmluZyBTdGVwIDcuCisgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uIG9uIFRvYXN0ZXItc3BlY2lmaWMKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIjxsaW5rIGxpbmtlbmQ9J3RvYXN0ZXItdXNlZnVsLWNvbW1hbmRzJz5Vc2VmdWwgQ29tbWFuZHM8L2xpbms+IgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkluc3RhbGwgYW5kIFNldCBVcCB0aGUgV2ViIFNlcnZlcjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IGluc3RhbGwgYW5kIHNldCB1cCBhIGZyb250LWVuZCB3ZWIgc2VydmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXJ2ZXIgYWxsb3dzIGZvciBsb2FkIGJhbGFuY2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpLXRocmVhZGluZyBvdmVyIFRvYXN0ZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS43L2hvd3RvL2RlcGxveW1lbnQvd3NnaS8nPjxmaWxlbmFtZT5kamFuZ288L2ZpbGVuYW1lPiBXU0dJPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIEFwYWNoZSB3ZWIgc2VydmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyIGxpYmFwYWNoZTItbW9kLXdzZ2kKKyAgICAgJCBhMmVubW9kIHdzZ2kKKyAgICAgJCBjYXQgL2V0Yy9hcGFjaGUyL3NpdGVzLWF2YWlsYWJsZS8wMDAtZGVmYXVsdC5jb25mCisKKyAgICAgICAgLi4uCisKKyAgICAgIyB0aGUgV1NHSVB5dGhvblBhdGggaXMgZ2xvYmFsCisgICAgIFdTR0lQeXRob25QYXRoIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci8KKworICAgICAgICAuLi4KKworICAgICAjc25pcCAtIGluIFZpcnR1YWxIb3N0CisgICAgIFdTR0lTY3JpcHRBbGlhcyAvIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci90b2FzdGVybWFpbi93c2dpLnB5CisKKyAgICAgJmx0O0RpcmVjdG9yeSAvL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluLyZndDsKKyAgICAgICAgICZsdDtGaWxlcyB3c2dpLnB5Jmd0OworICAgICAgICAgICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKKyAgICAgICAgICZsdDsvRmlsZXMmZ3Q7CisgICAgICZsdDsvRGlyZWN0b3J5Jmd0OworCisgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IG5lZWQgdG8gY29sbGVjdCBzdGF0aWMgbWVkaWEgZnJvbSBUb2FzdGVyIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgY29uZmlndXJpbmcgQXBhY2hlIHRvIHNlcnZlIHRoYXQgc3RhdGljCisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBta2RpciAvdmFyL3d3dy5odG1sL3N0YXRpYyAmYW1wOyZhbXA7IGNkIC92YXIvd3d3Lmh0bWwvc3RhdGljCisgICAgICQgL29wdCBiaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBjb2xsZWN0c3RhdGljCisgICAgICQgY2F0IC9ldGMvYXBhY2hlMi9zaXRlcy1hdmFpbGFibGUvMDAwLWRlZmF1bHQuY29uZgorCisgICAgICAgIC4uLgorCisgICAgICMgaW4gVmlydHVhbEhvc3QsIEFIRUFEIG9mIHRoZSBXU0dJU2NyaXB0QWxpYXMgZGVmaW5pdGlvbgorICAgICBBbGlhcyAvc3RhdGljLyAvdmFyL3d3dy5odG1sL3N0YXRpYy8KKworICAgICAmbHQ7RGlyZWN0b3J5IC92YXIvd3d3Lmh0bWwvc3RhdGljLyZndDsKKyAgICAgUmVxdWlyZSBhbGwgZ3JhbnRlZAorICAgICAmbHQ7L0RpcmVjdG9yeSZndDsKKworICAgICAgICAuLi4KKworICAgICBXU0dJU2NyaXB0IEFsaWFzIC8gL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL3RvYXN0ZXJtYWluL3dzZ2kucHkKKworICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlN0YXJ0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHRoZSBkYXRhYmFzZXMgZm9yIFRvYXN0ZXIsIGFuZCB0aGVuIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICB1cCB0aGUgd2ViIHNlcnZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGNvbnRpbnVlcyB3aXRoIHRoZSBhc3N1bWVkCisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzIGZyb20gdGhlIHByZXZpb3VzIHN0ZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgc3luY2RiCisgICAgICQgL29wdC9iaXRiYWtlL2xpYi90b2FzdGVyL21hbmFnZS5weSBtaWdyYXRlIG9ybQorICAgICAkIC9vcHQvYml0YmFrZS9saWIvdG9hc3Rlci9tYW5hZ2UucHkgbWlncmF0ZSBibGRjb250cm9sCisKKyAgICAgJCBzZXJ2aWNlIGFwYWNoZTIgcmVzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5tYW5hZ2UucHk8L2ZpbGVuYW1lPiBjb21tYW5kcyB1c2VkIGhlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAiPGxpbmsgbGlua2VuZD0ndG9hc3Rlci11c2VmdWwtY29tbWFuZHMnPlVzZWZ1bCBDb21tYW5kczwvbGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+U2V0IHVwIEJ1aWxkIENvbnRyb2wgYW5kIE9wZW4gdGhlIFdlYiBJbnRlcmZhY2U6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIHJ1biB0aGUgYnVpbGQgY29udHJvbCBtYW5hZ2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBkbyB0aGlzIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgIyBhcyB0aGUgInBva3kiIHVzZXIsIHN0YXJ0IHRoZSBydW5idWlsZHMgY29tbWFuZCBpbiBhIGxvb3AgKG9yIHB1dCBpdCBpbiBjcm9udGFiISkKKyAgICAgJCBzdWRvIC1pIC11IHBva3kKKyAgICAgJCB3aGlsZSB0cnVlOyBkbyAvb3B0L2JpdGJha2UvbGliL3RvYXN0ZXIvbWFuYWdlLnB5IHJ1bmJ1aWxkczsgc2xlZXAgMTA7IGRvbmUKKworICAgICAjIG9wZW4gdXAgdGhlIHdlYiBpbnRlcmZhY2UKKyAgICAgJCB4ZGctb3BlbiBodHRwOi8vW3NlcnZlci1hZGRyZXNzXS90b2FzdGVyZ3VpLworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgSXQgaXMgc3VnZ2VzdGVkIHRoYXQgeW91IGVuYWJsZSBidWlsZCBjb250cm9sIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nIDxmaWxlbmFtZT5ydW5idWlsZHM8L2ZpbGVuYW1lPiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jcm9udGFiPC9maWxlbmFtZT4gYXMgZm9sbG93czoKKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBjcm9udGFiIC1sCisgICAgICogKiAqICogKiAgL29wdC9iaXRiYWtlL2xpdC90b2FzdGVyL21hbmFnZS5weSBydW5idWlsZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW4gdGhlIEJyb3dzZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIEFwYWNoZSBzZXJ2ZXIgaXMgcnVubmluZywgY29ubmVjdCB0byBpdCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICB5b3VyIGZhdm9yaXRlIGJyb3dzZXIgYW5kIHZlcmlmeSB0aGF0IHRoZSBUb2FzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgY29tZXMgdXA6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90b2FzdGVyZ3VpCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRyYWNrIGFjY2Vzc2VzIGFuZCBlcnJvcnMgaW4gdGhlIEFwYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSBsb2dzLgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSd1c2luZy10aGUtdG9hc3Rlci13ZWItaW50ZXJmYWNlJz4KKyAgICAgICAgPHRpdGxlPlVzaW5nIHRoZSBUb2FzdGVyIFdlYiBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhlIFRvYXN0ZXIgd2ViIGludGVyZmFjZSBhbGxvd3MgeW91IHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgQnJvd3NlIHB1Ymxpc2hlZCBsYXllcnMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZyc+T3BlbkVtYmVkZGVkIE1ldGFkYXRhIEluZGV4PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIHNlbGVjdGVkIHZlcnNpb24gb2YgdGhlIGJ1aWxkCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBJbXBvcnQgeW91ciBvd24gbGF5ZXJzIGZvciBidWlsZGluZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBBZGQgYW5kIHJlbW92ZSBsYXllcnMgZnJvbSB5b3VyIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2V0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhIHRhcmdldCBvciBtdWx0aXBsZSB0YXJnZXRzIHRvIGJ1aWxkLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFN0YXJ0IHlvdXIgYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgIFNlZSB3aGF0IHdhcyBidWlsdCAocmVjaXBlcyBhbmQgcGFja2FnZXMpIGFuZCB3aGF0CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIHdlcmUgaW5zdGFsbGVkIGludG8geW91ciBmaW5hbCBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCcm93c2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgeW91ciBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgdGhlIHZhbHVlIG9mIGFsbCB2YXJpYWJsZXMgaW4geW91ciBidWlsZCBjb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBhbmQgd2hpY2ggZmlsZXMgc2V0IGVhY2ggdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRXhhbWluZSBlcnJvciwgd2FybmluZyBhbmQgdHJhY2UgbWVzc2FnZXMgdG8gYWlkIGluCisgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEJpdEJha2UgdGFza3MgZXhlY3V0ZWQgYW5kCisgICAgICAgICAgICAgICAgICAgIHJldXNlZCBkdXJpbmcgeW91ciBidWlsZCwgaW5jbHVkaW5nIHRob3NlIHRoYXQgdXNlZAorICAgICAgICAgICAgICAgICAgICBzaGFyZWQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgU2VlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHJlY2lwZXMsIHBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgIGFuZCB0YXNrcy4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBTZWUgcGVyZm9ybWFuY2UgaW5mb3JtYXRpb24gc3VjaCBhcyBidWlsZCB0aW1lLCB0YXNrIHRpbWUsCisgICAgICAgICAgICAgICAgICAgIENQVSB1c2FnZSwgYW5kIGRpc2sgSS9PLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgRm9sbG93aW5nIGFyZSBzZXZlcmFsIHZpZGVvcyB0aGF0IHNob3cgaG93IHRvIHVzZSB0aGUgVG9hc3RlciBHVUk6CisgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgQ29uZmlndXJhdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9cVlnRFo4WXpWNncnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXdzIGFuZCBkZW1vbnN0cmF0ZXMgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Ub2FzdGVyIEhvbWVwYWdlIGFuZCBUYWJsZSBDb250cm9sczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UUVBUkRuclIxWHcnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZ29lcyBvdmVyIHRoZSBUb2FzdGVyIGVudHJ5IHBhZ2UsIGFuZCBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICBhbiBvdmVydmlldyBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzIG9mCisgICAgICAgICAgICAgICAgICAgIFRvYXN0ZXIsIHdoaWNoIGluY2x1ZGUgc2VhcmNoLCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgYnkKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGNyaXRlcmlhLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIERhc2hib2FyZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9S0txSFljbnAyZ0UnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgeW91IHRoZSBidWlsZCBkYXNoYm9hcmQsIGEgcGFnZSBwcm92aWRpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXcgb2YgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBmb3IgYSBzZWxlY3RlZCBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5JbWFnZSBJbmZvcm1hdGlvbjo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9WHFZR0ZzbUEwUncnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgd2Fsa3MgdGhyb3VnaCB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcworICAgICAgICAgICAgICAgICAgICBhYm91dCBpbWFnZXM6IHBhY2thZ2VzIGluc3RhbGxlZCBhbmQgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Db25maWd1cmF0aW9uOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1VVy1qLVQyVHpJZyc+dmlkZW88L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBUb2FzdGVyIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGFza3M6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVGhpcworICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUQ0LTl2R1N4UXR3Jz52aWRlbzwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHNob3dzIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzIGFib3V0IHRoZQorICAgICAgICAgICAgICAgICAgICB0YXNrcyBydW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5SZWNpcGVzIGFuZCBQYWNrYWdlcyBCdWlsdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9eC02ZHg0aHVObncnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMgYWJvdXQgcmVjaXBlcworICAgICAgICAgICAgICAgICAgICBhbmQgcGFja2FnZXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+UGVyZm9ybWFuY2UgRGF0YTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGlzCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9cVdHTXJKb3F1c1EnPnZpZGVvPC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgc2hvd3MgdGhlIGJ1aWxkIHBlcmZvcm1hbmNlIGRhdGEgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworPCEtLQorICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy0xJz4KKyAgICAgICAgICAgIDx0aXRsZT5Ub2FzdGVyIEhvbWVwYWdlIGFuZCBUYWJsZSBDb250cm9sczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoaXMgdmlkZW8gZ29lcyBvdmVyIHRoZSBUb2FzdGVyIGVudHJ5IHBhZ2UsIGFuZCBwcm92aWRlcworICAgICAgICAgICAgICAgIGFuIG92ZXJ2aWV3IG9mIHRoZSBkYXRhIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMgb2YgVG9hc3RlciwKKyAgICAgICAgICAgICAgICB3aGljaCBpbmNsdWRlIHNlYXJjaCwgc29ydGluZyBhbmQgZmlsdGVyaW5nIGJ5IGRpZmZlcmVudAorICAgICAgICAgICAgICAgIGNyaXRlcmlhLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwIiBoZWlnaHQ9IjQ4MCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L1FFQVJEbnJSMVh3Ij48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtMic+CisgICAgICAgICAgICA8dGl0bGU+QnVpbGQgRGFzaGJvYXJkPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB5b3UgdGhlIGJ1aWxkIGRhc2hib2FyZCwgYSBwYWdlIHByb3ZpZGluZyBhbgorICAgICAgICAgICAgICAgIG92ZXJ2aWV3IG9mIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgZm9yIGEgc2VsZWN0ZWQgYnVpbGQuCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L0tLcUhZY25wMmdFIj48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtMyc+CisgICAgICAgICAgICA8dGl0bGU+SW1hZ2UgSW5mb3JtYXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIHdhbGtzIHRocm91Z2ggdGhlIGluZm9ybWF0aW9uIFRvYXN0ZXIgcHJvdmlkZXMKKyAgICAgICAgICAgICAgICBhYm91dCBpbWFnZXM6IHBhY2thZ2VzIGluc3RhbGxlZCBhbmQgcm9vdCBmaWxlIHN5c3RlbS4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvWHFZR0ZzbUEwUnciPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1ndWktdmlkcy00Jz4KKyAgICAgICAgICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCBidWlsZAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgPG1lZGlhb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICA8dmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9kYXRhIHdpZHRoPSI2NDBweCIgaGVpZ2h0PSI0ODBweCIgZmlsZXJlZj0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92L1VXLWotVDJUeklnIj48L3ZpZGVvZGF0YT4KKyAgICAgICAgICAgICAgICAgICAgPC92aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICA8L21lZGlhb2JqZWN0PgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItZ3VpLXZpZHMtNSc+CisgICAgICAgICAgICA8dGl0bGU+VGFza3M8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIHNob3dzIHRoZSBpbmZvcm1hdGlvbiBUb2FzdGVyIHByb3ZpZGVzIGFib3V0IHRoZQorICAgICAgICAgICAgICAgIHRhc2tzIHJ1biBieSB0aGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi9ENC05dkdTeFF0dyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTYnPgorICAgICAgICAgICAgPHRpdGxlPlJlY2lwZXMgYW5kIFBhY2thZ2VzIEJ1aWx0PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhpcyB2aWRlbyBzaG93cyB0aGUgaW5mb3JtYXRpb24gVG9hc3RlciBwcm92aWRlcyBhYm91dCByZWNpcGVzCisgICAgICAgICAgICAgICAgYW5kIHBhY2thZ2VzIGJ1aWx0LgorICAgICAgICAgICAgICAgIDxtZWRpYW9iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgPHZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvZGF0YSB3aWR0aD0iNjQwcHgiIGhlaWdodD0iNDgwcHgiIGZpbGVyZWY9Imh0dHA6Ly93d3cueW91dHViZS5jb20vdi94LTZkeDRodU5udyI+PC92aWRlb2RhdGE+CisgICAgICAgICAgICAgICAgICAgIDwvdmlkZW9vYmplY3Q+CisgICAgICAgICAgICAgICAgPC9tZWRpYW9iamVjdD5xWWdEWjhZelY2dworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L3NlY3Rpb24+CisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWd1aS12aWRzLTcnPgorICAgICAgICAgICAgPHRpdGxlPlBlcmZvcm1hbmNlIERhdGE8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGlzIHZpZGVvIHNob3dzIHRoZSBidWlsZCBwZXJmb3JtYW5jZSBkYXRhIHByb3ZpZGVkIGJ5CisgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICAgICAgICAgIDx2aWRlb29iamVjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb2RhdGEgd2lkdGg9IjY0MHB4IiBoZWlnaHQ9IjQ4MHB4IiBmaWxlcmVmPSJodHRwOi8vd3d3LnlvdXR1YmUuY29tL3YvcVdHTXJKb3F1c1EiPjwvdmlkZW9kYXRhPgorICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvb2JqZWN0PgorICAgICAgICAgICAgICAgIDwvbWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4KKy0tPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0YXJ0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmRiNWVjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdGFydC54bWwKQEAgLTAsMCArMSwxNDEgQEAKKzwhRE9DVFlQRSBjaGFwdGVyIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4yLy9FTiIKKyJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCitbPCFFTlRJVFkgJSBwb2t5IFNZU1RFTSAiLi4vcG9reS5lbnQiPiAlcG9reTsgXSA+CisKKzxjaGFwdGVyIGlkPSd0b2FzdGVyLW1hbnVhbC1zdGFydCc+CisKKzx0aXRsZT5QcmVwYXJpbmcgdG8gVXNlIFRvYXN0ZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2hhcHRlciBkZXNjcmliZXMgaG93IHlvdSBuZWVkIHRvIHByZXBhcmUgeW91ciBzeXN0ZW0gaW4gb3JkZXIgdG8KKyAgICAgICAgdXNlIFRvYXN0ZXIuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3Rpb24gaWQ9J3RvYXN0ZXItc2V0dGluZy11cC10aGUtYmFzaWMtc3lzdGVtLXJlcXVpcmVtZW50cyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRoZSBCYXNpYyBTeXN0ZW0gUmVxdWlyZW1lbnRzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFlvdSBmaXJzdCBuZWVkIHRvIGJlIHN1cmUgeW91ciBidWlsZCBzeXN0ZW0gaXMgc2V0IHVwIHRvIHJ1bgorICAgICAgICAgICAgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICBTZWUgdGhlCisgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUVNfVVJMOyN5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC91bGluaz4iCisgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0IGZvciBpbmZvcm1hdGlvbiBvbiBob3cKKyAgICAgICAgICAgIHRvIHNldCB1cCB5b3VyIHN5c3RlbSBmb3IgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1lc3RhYmxpc2hpbmctdG9hc3Rlci1zeXN0ZW0tZGVwZW5kZW5jaWVzJz4KKyAgICAgICAgPHRpdGxlPkVzdGFibGlzaGluZyBUb2FzdGVyIFN5c3RlbSBEZXBlbmRlbmNpZXM8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVG9hc3RlciByZXF1aXJlcyBleHRyYSBQeXRob24gZGVwZW5kZW5jaWVzIGluIG9yZGVyIHRvIHJ1bi4KKyAgICAgICAgICAgIEEgVG9hc3RlciByZXF1aXJlbWVudHMgZmlsZSBuYW1lZAorICAgICAgICAgICAgPGZpbGVuYW1lPnRvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dDwvZmlsZW5hbWU+IGRlZmluZXMgdGhlCisgICAgICAgICAgICBQeXRob24gZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgVGhlIHJlcXVpcmVtZW50cyBmaWxlIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUKKyAgICAgICAgICAgIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjc291cmNlLWRpcmVjdG9yeSc+U291cmNlIERpcmVjdG9yeTwvdWxpbms+CisgICAgICAgICAgICAoZS5nLiA8ZmlsZW5hbWU+cG9reS9iaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgIFRoZSBkZXBlbmRlbmNpZXMgYXBwZWFyIGluIGEgPGZpbGVuYW1lPnBpcDwvZmlsZW5hbWU+LAorICAgICAgICAgICAgaW5zdGFsbC1jb21wYXRpYmxlIGZvcm1hdC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLW9wdGlvbmFsLXZpcnR1YWwtZW52aXJvbm1lbnQnPgorICAgICAgICAgICAgPHRpdGxlPk9wdGlvbmFsbHkgU2V0dGluZyBVcCBhIFB5dGhvbiBWaXJ0dWFsIEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIFB5dGhvbiB2aXJ0dWFsCisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgdGhhdCBhbGxvd3MgeW91IHRvIG1haW50YWluIGEgZGVkaWNhdGVkIFB5dGhvbgorICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgYW5kIGl0cyBvd24gc2V0IG9mIGluc3RhbGxlZCBtb2R1bGVzLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIHNlcGFyYXRlcyB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBQeXRob24gYW5kIG1vZHVsZXMKKyAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlcmVmb3JlIGF2b2lkcyBhbnkKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGNvbmZsaWN0cy4KKyAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIHNldCB1cCB5b3VyIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgICAgICAgICAgICAgVGhlc2Ugc3RlcHMgYXNzdW1lIGEgVWJ1bnR1IGRpc3RyaWJ1dGlvbjoKKyAgICAgICAgICAgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5zdGFsbCA8ZmlsZW5hbWU+dmlydHVhbGVudjwvZmlsZW5hbWU+OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsIHRoZSBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5weXRob24tdmlydHVhbGVudjwvZmlsZW5hbWU+IHBhY2thZ2UgZnJvbSB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb24gcmF0aGVyIHRoYW4gdXNpbmcgPGZpbGVuYW1lPnBpcDwvZmlsZW5hbWU+LgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIHB5dGhvbi12aXJ0dWFsZW52CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DcmVhdGUgYW5kIEFjdGl2YXRlIGEgVmlydHVhbCBFbnZpcm9ubWVudDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHZpcnR1YWxlbnYgdmVudgorICAgICAkIHNvdXJjZSB2ZW52L2Jpbi9hY3RpdmF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9vcmRlcmVkbGlzdD4KKyAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IGRvIGNob29zZSB0byBzZXQgdXAgYSB2aXJ0dWFsIGVudmlyb25tZW50IGluCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIHRvIHJ1biBUb2FzdGVyLCB5b3UgbXVzdCBpbml0aWFsaXplIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudCBlYWNoIHRpbWUgeW91IHdhbnQgdG8gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgVG9hc3Rlci4KKyAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgZW52aXJvbm1lbnQganVzdAorICAgICAgICAgICAgICAgICAgICBiZWZvcmUgeW91IHN0YXJ0IFRvYXN0ZXI6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzb3VyY2UgdmVudi9iaW4vYWN0aXZhdGUKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSd0b2FzdGVyLWxvYWQtcGFja2FnZXMnPgorICAgICAgICAgICAgPHRpdGxlPkluc3RhbGwgVG9hc3RlciBQYWNrYWdlczwvdGl0bGU+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2VzIHRoYXQgVG9hc3RlciByZXF1aXJlcy4KKyAgICAgICAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBwaXAgaW5zdGFsbCAtciBiaXRiYWtlL3RvYXN0ZXItcmVxdWlyZW1lbnRzLnR4dAorICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCis8IS0tIENvbW1lbnRpbmcgdGhpcyBzZWN0aW9uIG91dCBmb3Igbm93IGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgdXNlZCBhZ2Fpbi4KKworICAgICAgICA8c2VjdGlvbiBpZD0ndG9hc3Rlci1pbnN0YWxsLWRhZW1vbic+CisgICAgICAgICAgICA8dGl0bGU+SW5zdGFsbCA8ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT48L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUb2FzdGVyIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPSdodHRwOi8vd3d3LmxpYnNsYWNrLm9yZy9kYWVtb24vJz48ZmlsZW5hbWU+ZGFlbW9uPC9maWxlbmFtZT48L3VsaW5rPi4KKyAgICAgICAgICAgICAgICBEZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24sIGhvdyB5b3UgaW5zdGFsbAorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5kYWVtb248L2ZpbGVuYW1lPiBkaWZmZXJzOgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+RGViaWFuLUJhc2VkIFN5c3RlbXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgcnVubmluZyBhIERlYmlhbi1iYXNlZCBkaXN0cmlidXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIDxmaWxlbmFtZT5kYWVtb248L2ZpbGVuYW1lPiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBjb21tYW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGRhZW1vbuKAiworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Tm9uLURlYmlhbi1CYXNlZCBTeXN0ZW1zOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIG5vdCBydW5uaW5nIGEgRGViaWFuLWJhc2VkIGRpc3RyaWJ1dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgKFJlZGhhdC1iYXNlZCBkaXN0cmlidXRpb24gc3VjaCBhcyBGZWRvcmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgeW91IG5lZWQgdG8gZG93bmxvYWQg4oCLdGhlIGZpbGUgcmVsZXZhbnQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmUgYW5kIHRoZW4gaW5zdGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmRhZW1vbjwvZmlsZW5hbWU+IG1hbnVhbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgRm9sbG93aW5nIGFyZSB0aGUgY29tbWFuZHMgZm9yIDY0LWJpdCBkaXN0cmlidXRpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdnZXQgaHR0cDovL2xpYnNsYWNrLm9yZy9kYWVtb24vZG93bmxvYWQvZGFlbW9uLTAuNi40LTEueDg2XzY0LnJwbQorICAgICAkIHN1ZG8gcnBtIC1pIGRhZW1vbi0wLjYuNC0xLng4Nl82NC5ycG0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEhlcmUgYXJlIHRoZSBjb21tYW5kcyBmb3IgYSAzMi1iaXQgZGlzdHJpYnV0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHdnZXQgaHR0cDovL2xpYnNsYWNrLm9yZy9kYWVtb24vZG93bmxvYWQvZGFlbW9uLTAuNi40LTEuaTY4Ni5ycG0KKyAgICAgJCBzdWRvIHJwbSAtaSDigItkYWVtb24tMC42LjQtMS5pNjg2LnJwbeKAiworICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvc2VjdGlvbj4gLS0+CisgICAgPC9zZWN0aW9uPgorPC9jaGFwdGVyPgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZiOWZiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC1zdHlsZS5jc3MKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgICBHZW5lcmljIFhIVE1MIC8gRG9jQm9vayBYSFRNTCBDU1MgU3R5bGVzaGVldC4KKworICAgQnJvd3NlciB3cmFuZ2xpbmcgYW5kIHR5cG9ncmFwaGljIGRlc2lnbiBieQorICAgICAgT3l2aW5kIEtvbGFzIC8gcGlwcGluQGdpbXAub3JnCisKKyAgIEN1c3RvbWlzZWQgZm9yIFBva3kgYnkKKyAgICAgIE1hdHRoZXcgQWxsdW0gLyBtYWxsdW1Aby1oYW5kLmNvbQorCisgICBUaGFua3MgdG86CisgICAgIExpYW0gUi4gRS4gUXVpbgorICAgICBXaWxsaWFtIFNrYWdncworICAgICBKYWt1YiBTdGVpbmVyCisKKyAgIFN0cnVjdHVyZQorICAgLS0tLS0tLS0tCisKKyAgIFRoZSBzdHlsZXNoZWV0IGlzIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgICAgICAgUG9zaXRpb25pbmcKKyAgICAgICAgICBNYXJnaW5zLCBwYWRkaW5ncywgd2lkdGgsIGZvbnQtc2l6ZSwgY2xlYXJpbmcuCisgICAgICAgRGVjb3JhdGlvbnMKKyAgICAgICAgICBCb3JkZXJzLCBzdHlsZQorICAgICAgIENvbG9ycworICAgICAgICAgIENvbG9ycworICAgICAgIEdyYXBoaWNzCisgICAgICAgICAgR3JhcGhpY2FsIGJhY2tncm91bmRzCisgICAgICAgTmFzdHkgSUUgdHdlYWtzCisgICAgICAgICAgV29ya2Fyb3VuZHMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlciwKKyAgICAgICAgICBjdXJyZW50bHkgbWFrZXMgdGhlIHN0eWxlc2hlZXQgbm9uIHZhbGlkYXRpbmcsIGJ1dCB1cCB1bnRpbAorICAgICAgICAgIHRoaXMgcG9pbnQgaXQgaXMgdmFsaWRhdGluZy4KKyAgICAgICBNb3ppbGxhIGV4dGVuc2lvbnMKKyAgICAgICAgICBUcmFuc3BhcmVuY3kgZm9yIGZvb3RlcgorCSAgUm91bmRlZCBjb3JuZXJzIG9uIGJveGVzCisKKyovCisKKworICAvKioqKioqKioqKioqKioqIC8KKyAvICBQb3NpdGlvbmluZyAgIC8KKy8gKioqKioqKioqKioqKioqLworCitib2R5IHsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIFNhbnMsIHNhbnMtc2VyaWY7CisKKyAgbWluLXdpZHRoOiA2NDBweDsKKyAgd2lkdGg6IDgwJTsKKyAgbWFyZ2luOiAgMGVtIGF1dG87CisgIHBhZGRpbmc6IDJlbSA1ZW0gNWVtIDVlbTsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2gxLGgyLGgzLGg0LGg1LGg2LGg3IHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBTYW5zOworICBjb2xvcjogIzAwNTU3RDsKKyAgY2xlYXI6IGJvdGg7Cit9CisKK2gxIHsKKyAgZm9udC1zaXplOiAyZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAyZW0gMGVtIDBlbSAwZW07Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwLjEwZW0gMGVtIDMuMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuOGVtOworICBwYWRkaW5nLWxlZnQ6IDIwJTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitoMiB7CisgIG1hcmdpbjogMmVtIDBlbSAwLjY2ZW0gMGVtOworICBwYWRkaW5nOiAwLjVlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxLjVlbTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2gzLnN1YnRpdGxlIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDIuMTQlOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworaDMgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTQwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g0IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEyMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNSB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxMTAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDYgeworICBtYXJnaW46IDFlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuYXV0aG9yZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgcGFkZGluZy10b3A6IDI1NnB4OworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvdG9hc3Rlci10aXRsZS5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CisgIG1hcmdpbi10b3A6IC0yNTZweDsKKyAgcGFkZGluZy1yaWdodDogNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDBweDsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIHdpZHRoOiA3NDBweDsKK30KKworaDMuYXV0aG9yIHsKKyAgbWFyZ2luOiAwZW0gMG1lIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiAxMDAlOworICBjb2xvcjogIzMzMzsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5hdXRob3IgdHQuZW1haWwgeworICBmb250LXNpemU6IDY2JTsKK30KKworLnRpdGxlcGFnZSBociB7CisgIHdpZHRoOiAwZW07CisgIGNsZWFyOiBib3RoOworfQorCisucmV2aGlzdG9yeSB7CisgIHBhZGRpbmctdG9wOiAyZW07CisgIGNsZWFyOiBib3RoOworfQorCisudG9jLAorLmxpc3Qtb2YtdGFibGVzLAorLmxpc3Qtb2YtZXhhbXBsZXMsCisubGlzdC1vZi1maWd1cmVzIHsKKyAgcGFkZGluZzogMS4zM2VtIDBlbSAyLjVlbSAwZW07CisgIGNvbG9yOiAjMDA1NTdEOworfQorCisudG9jIHAsCisubGlzdC1vZi10YWJsZXMgcCwKKy5saXN0LW9mLWZpZ3VyZXMgcCwKKy5saXN0LW9mLWV4YW1wbGVzIHAgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMC4zZW07CisgIG1hcmdpbjogMS41ZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgcCBiLAorLmxpc3Qtb2YtdGFibGVzIHAgYiwKKy5saXN0LW9mLWZpZ3VyZXMgcCBiLAorLmxpc3Qtb2YtZXhhbXBsZXMgcCBieworICBmb250LXNpemU6IDEwMC4wJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy50b2MgZGwsCisubGlzdC1vZi10YWJsZXMgZGwsCisubGlzdC1vZi1maWd1cmVzIGRsLAorLmxpc3Qtb2YtZXhhbXBsZXMgZGwgeworICBtYXJnaW46IDBlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy50b2MgZHQgeworICBtYXJnaW46IDBlbSAwZW0gMGVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGRkIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAyLjZlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuZ2xvc3NhcnkgZGwsCitkaXYudmFyaWFibGVsaXN0IGRsIHsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgd2lkdGg6IDIwZW07CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCisudmFyaWFibGVsaXN0IGRsIGR0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKKy5nbG9zc2FyeSBkbCBkZCwKKy52YXJpYWJsZWxpc3QgZGwgZGQgeworICBtYXJnaW4tdG9wOiAtMWVtOworICBtYXJnaW4tbGVmdDogMjUuNWVtOworfQorCisuZ2xvc3NhcnkgZGQgcCwKKy52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKK2Rpdi5jYWxsb3V0bGlzdCB0YWJsZSB0ZCBwIHsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKK2RpdiBwLmNvcHlyaWdodCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK2Rpdi5sZWdhbG5vdGljZSBwLmxlZ2Fsbm90aWNlLXRpdGxlIHsKKyAgbWFyZ2luLWJvdHRvbTogMGVtOworfQorCitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisKK30KKworZGwgeworICBwYWRkaW5nLXRvcDogMGVtOworfQorCitociB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCisKKy5tZWRpYW9iamVjdCwKKy5tZWRpYW9iamVjdGNvIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCitpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisKK3VsIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMS41ZW07Cit9CisKK3VsIGxpIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCit1bCBsaSBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKwordGFibGUgeworICB3aWR0aCA6MTAwJTsKK30KKwordGggeworICBwYWRkaW5nOiAwLjI1ZW07CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisKK3RkIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCitwIGFbaWRdIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgZGlzcGxheTogaW5saW5lOworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCithIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGNvbG9yOiAjNDQ0OworfQorCitwcmUgeworICAgIG92ZXJmbG93OiBhdXRvOworfQorCithOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIC8qZm9udC13ZWlnaHQ6IGJvbGQ7Ki8KK30KKworLyogVGhpcyBzdHlsZSBkZWZpbmVzIGhvdyB0aGUgcGVybWFsaW5rIGNoYXJhY3RlcgorICAgYXBwZWFycyBieSBpdHNlbGYgYW5kIHdoZW4gaG92ZXJlZCBvdmVyIHdpdGgKKyAgIHRoZSBtb3VzZS4gKi8KKworW2FsdD0nUGVybWFsaW5rJ10geyBjb2xvcjogI2VlZTsgfQorW2FsdD0nUGVybWFsaW5rJ106aG92ZXIgeyBjb2xvcjogYmxhY2s7IH0KKworCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUgeworICBtYXJnaW46IDFlbSAwZW07CisgIHBhZGRpbmc6IDFlbTsKKyAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOworfQorCisKK2Rpdi5pbmZvcm1hbGZpZ3VyZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWxleGFtcGxlIHAudGl0bGUgYiwKK2Rpdi5pbmZvcm1hbHRhYmxlIHAudGl0bGUgYiwKK2Rpdi5maWd1cmUgcC50aXRsZSBiLAorZGl2LmV4YW1wbGUgcC50aXRsZSBiLAorZGl2LnRhYmxlIHAudGl0bGUgYnsKKyAgICBwYWRkaW5nLXRvcDogMGVtOworICAgIG1hcmdpbi10b3A6IDBlbTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworLm1lZGlhb2JqZWN0IC5jYXB0aW9uLAorLm1lZGlhb2JqZWN0IC5jYXB0aW9uIHAgIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZy10b3A6IDAuNWVtOworICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Cit9CisKKy5lcGlncmFwaCB7CisgIHBhZGRpbmctbGVmdDogNTUlOworICBtYXJnaW4tYm90dG9tOiAxZW07Cit9CisKKy5lcGlncmFwaCBwIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmVwaWdyYXBoIC5xdW90ZSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKy5lcGlncmFwaCAuYXR0cmlidXRpb24geworICBmb250LXN0eWxlOiBub3JtYWw7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitzcGFuLmFwcGxpY2F0aW9uIHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucHJvZ3JhbWxpc3RpbmcgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBmb250LXNpemU6IDgwJTsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgbWFyZ2luOiAxLjMzZW0gMGVtOworICBwYWRkaW5nOiAxLjMzZW07Cit9CisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBtYXJnaW4tdG9wOiAxZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKKworfQorCisvKiBmb3JjZSBmdWxsIHdpZHRoIG9mIHRhYmxlIHdpdGhpbiBkaXYgKi8KKy50aXAgdGFibGUsCisud2FybmluZyB0YWJsZSwKKy5jYXV0aW9uIHRhYmxlLAorLm5vdGUgdGFibGUgeworICBib3JkZXI6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworfQorCisKKy50aXAgdGFibGUgdGgsCisud2FybmluZyB0YWJsZSB0aCwKKy5jYXV0aW9uIHRhYmxlIHRoLAorLm5vdGUgdGFibGUgdGggeworICBwYWRkaW5nOiAwLjhlbSAwLjBlbSAwLjBlbSAwLjBlbTsKKyAgbWFyZ2luIDogMGVtIDBlbSAwZW0gMGVtOworfQorCisudGlwIHAsCisud2FybmluZyBwLAorLmNhdXRpb24gcCwKKy5ub3RlIHAgeworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KKworLmFjcm9ueW0geworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICBwYWRkaW5nOiAwLjA5ZW0gMC4zZW07CisgIG1hcmdpbjogMGVtOworfQorCisuaXRlbWl6ZWRsaXN0IGxpIHsKKyAgY2xlYXI6IG5vbmU7Cit9CisKKy5maWxlbmFtZSB7CisgIGZvbnQtc2l6ZTogbWVkaXVtOworICBmb250LWZhbWlseTogQ291cmllciwgbW9ub3NwYWNlOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDBlbTsKKyAgdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2RmOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbGVmdDogMGVtOworICBib3R0b206IDBlbTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKworZGl2Lm5hdmhlYWRlciB0ZCwKK2Rpdi5uYXZmb290ZXIgdGQgeworICBmb250LXNpemU6IDY2JTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB0aCB7CisgIC8qZm9udC1mYW1pbHk6IEdlb3JnaWEsIFRpbWVzLCBzZXJpZjsqLworICAvKmZvbnQtc2l6ZTogeC1sYXJnZTsqLworICBmb250LXNpemU6IDgwJTsKK30KKworZGl2Lm5hdmhlYWRlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItdG9wOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2Zm9vdGVyIHRhYmxlIHsKKyAgYm9yZGVyLWxlZnQ6IDBlbTsKKyAgYm9yZGVyLXJpZ2h0OiAwZW07CisgIGJvcmRlci1ib3R0b206IDBlbTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYSwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYSB7CisgIGNvbG9yOiAjNzc3OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKy8qIG5vcm1hbCB0ZXh0IGluIHRoZSBmb290ZXIgKi8KK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgeworICBjb2xvcjogYmxhY2s7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTp2aXNpdGVkLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOnZpc2l0ZWQgeworICBjb2xvcjogIzQ0NDsKK30KKworCisvKiBsaW5rcyBpbiBoZWFkZXIgYW5kIGZvb3RlciAqLworZGl2Lm5hdmhlYWRlciB0YWJsZSB0ZCBhOmhvdmVyLAorZGl2Lm5hdmZvb3RlciB0YWJsZSB0ZCBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogIzMzYTsKK30KKworZGl2Lm5hdmhlYWRlciBociwKK2Rpdi5uYXZmb290ZXIgaHIgeworICBkaXNwbGF5OiBub25lOworfQorCisKKy5xYW5kYXNldCB0ci5xdWVzdGlvbiB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnFhbmRhc2V0IHRyLmFuc3dlciB0ZCBwIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDFlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKy5hbnN3ZXIgdGQgeworICBwYWRkaW5nLWJvdHRvbTogMS41ZW07Cit9CisKKy5lbXBoYXNpcyB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisKKyAgLyoqKioqKioqKioqKiogLworIC8gZGVjb3JhdGlvbnMgIC8KKy8gKioqKioqKioqKioqKi8KKworLnRpdGxlcGFnZSB7Cit9CisKKy5wYXJ0IC50aXRsZSB7Cit9CisKKy5zdWJ0aXRsZSB7CisgICAgYm9yZGVyOiBub25lOworfQorCisvKgoraDEgeworICBib3JkZXI6IG5vbmU7Cit9CisKK2gyIHsKKyAgYm9yZGVyLXRvcDogc29saWQgMC4yZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDMgeworICBib3JkZXItdG9wOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDQgeworICBib3JkZXI6IDBlbTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMC4wNmVtOworfQorCitoNSB7CisgIGJvcmRlcjogMGVtOworfQorKi8KKworLnByb2dyYW1saXN0aW5nIHsKKyAgYm9yZGVyOiBzb2xpZCAxcHg7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKKworLnRpcCwKKy53YXJuaW5nLAorLmNhdXRpb24sCisubm90ZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisucXVlc3Rpb24gdGQgeworICBib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7Cit9CisKKy5hbnN3ZXIgeworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZoZWFkZXIsIGRpdi5oZWFkaW5neworICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7Cit9CisKKworZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZDsKK30KKworICAvKioqKioqKioqIC8KKyAvICBjb2xvcnMgIC8KKy8gKioqKioqKioqLworCitib2R5IHsKKyAgY29sb3I6ICMzMzM7CisgIGJhY2tncm91bmQ6IHdoaXRlOworfQorCithIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2E6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVkZWRlOworfQorCisKK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3LAoraDggeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KKworaHIgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKKworLnRpcCwgLndhcm5pbmcsIC5jYXV0aW9uLCAubm90ZSB7CisgIGJvcmRlci1jb2xvcjogI2ZmZjsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKK30KKworCisud2FybmluZyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5jYXV0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLnRpcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5ub3RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMjsKK30KKworLmdsb3NzYXJ5IGRsIGR0LAorLnZhcmlhYmxlbGlzdCBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQgc3Bhbi50ZXJtIHsKKyAgY29sb3I6ICMwNDQ7Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbGZpZ3VyZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmluZm9ybWFsZXhhbXBsZSB7CisgIGJvcmRlci1jb2xvcjogI2FhYTsKK30KKworcHJlLnByb2dyYW1saXN0aW5nIHsKKyAgY29sb3I6IGJsYWNrOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOworICBib3JkZXItY29sb3I6ICNhYWE7CisgIGJvcmRlci13aWR0aDogMnB4OworfQorCisuZ3VpbWVudSwKKy5ndWlsYWJlbCwKKy5ndWltZW51aXRlbSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworfQorCisKK2Rpdi5uYXZoZWFkZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKK2Rpdi5uYXZmb290ZXIgeworICBib3JkZXItY29sb3I6IGJsYWNrOworfQorCisKKyAgLyoqKioqKioqKioqIC8KKyAvICBncmFwaGljcyAgLworLyAqKioqKioqKioqKi8KKworLyoKK2JvZHkgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9ib2R5X2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisubmF2aGVhZGVyLAorLm5vdGUsCisudGlwIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvbm90ZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLndhcm5pbmcsCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL3dhcm5pbmdfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy5maWd1cmUsCisuaW5mb3JtYWxmaWd1cmUsCisuZXhhbXBsZSwKKy5pbmZvcm1hbGV4YW1wbGUsCisudGFibGUsCisuaW5mb3JtYWx0YWJsZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL2ZpZ3VyZV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworKi8KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK2g3eworfQorCisvKgorRXhhbXBsZSBvZiBob3cgdG8gc3RpY2sgYW4gaW1hZ2UgYXMgcGFydCBvZiB0aGUgdGl0bGUuCisKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZmlndXJlcy93aGl0ZS1vbi1ibGFjay5wbmciKTsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Cit9CisqLworCitkaXYucHJlZmFjZSAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5jb2xvcGhvbiAudGl0bGUsCitkaXYuY2hhcHRlciAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5hcnRpY2xlIC50aXRsZXBhZ2UgLnRpdGxlCit7Cit9CisKK2Rpdi5zZWN0aW9uIGRpdi5zZWN0aW9uIC50aXRsZXBhZ2UgLnRpdGxlLAorZGl2LnNlY3QyIC50aXRsZXBhZ2UgLnRpdGxlIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorCisKK2gxLnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGhlaWdodDogMjU2cHg7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47Cit9CisKK2gyLnN1YnRpdGxlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIHRleHQtaW5kZW50OiAtOTAwMHB4OworICBvdmVyZmxvdzpoaWRkZW47CisgIHdpZHRoOiAwcHg7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyAgcGlwcGluLmdpbXAub3JnIHNwZWNpZmljIGFsdGVyYXRpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgY29sb3I6ICM3Nzc7CisgIGZvbnQtc2l6ZTogODAlOworICBwYWRkaW5nOiAwOworICBtYXJnaW46IDA7CisgIHRleHQtYWxpZ246IGxlZnQ7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogNTBweDsKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2hlYWRpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKKyAgYm9yZGVyOiBub25lOworfQorCitkaXYuaGVhZGluZyBhIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyOiBub25lOworICBjb2xvcjogI2RkZDsKKyAgZm9udC1zaXplOiA4MCU7CisgIHRleHQtYWxpZ246cmlnaHQ7CisKKyAgd2lkdGg6IDEwMCU7CisgIHBhZGRpbmctdG9wOiAxMHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMHB4OworICBsZWZ0OiAwcHg7CisKKyAgYmFja2dyb3VuZDogdXJsKCcvZ2Z4L2Zvb3RpbmdfYmcucG5nJykgdHJhbnNwYXJlbnQ7Cit9CisqLworCisKKworICAvKioqKioqKioqKioqKioqKioqIC8KKyAvICBuYXN0eSBpZSB0d2Vha3MgIC8KKy8gKioqKioqKioqKioqKioqKioqLworCisvKgorZGl2LmhlYWRpbmcsIGRpdi5uYXZoZWFkZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKK30KKworZGl2LmZvb3RpbmcsIGRpdi5uYXZmb290ZXIgeworICB3aWR0aDpleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyAicHgiKTsKKyAgbWFyZ2luLWxlZnQ6ZXhwcmVzc2lvbigiLTVlbSIpOworfQorYm9keSB7CisgIHBhZGRpbmc6ZXhwcmVzc2lvbigiNGVtIDVlbSAwZW0gNWVtIik7Cit9CisqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC8KKyAvIG1vemlsbGEgdmVuZG9yIHNwZWNpZmljIGNzcyBleHRlbnNpb25zICAvCisvICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorZGl2Lm5hdmZvb3RlciwgZGl2LmZvb3Rpbmd7CisgIC1tb3otb3BhY2l0eTogMC44ZW07Cit9CisKK2Rpdi5maWd1cmUsCitkaXYudGFibGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUsCitkaXYuZXhhbXBsZSwKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuNWVtOworfQorCitiLmtleWNhcCwKKy5rZXljYXAgeworICAtbW96LWJvcmRlci1yYWRpdXM6IDAuM2VtOworfQorKi8KKwordGFibGUgdHIgdGQgdGFibGUgdHIgdGQgeworICBkaXNwbGF5OiBub25lOworfQorCisKK2hyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKwordGFibGUgeworICBib3JkZXI6IDBlbTsKK30KKworIC5waG90byB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6ICAgMS41ZW07CisgIG1hcmdpbi1ib3R0b206IDEuNWVtOworICBtYXJnaW4tdG9wOiAwZW07CisgIG1heC13aWR0aDogICAgICAxN2VtOworICBib3JkZXI6ICAgICAxcHggc29saWQgZ3JheTsKKyAgcGFkZGluZzogICAgM3B4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKyAuc2VwZXJhdG9yIHsKKyAgIHBhZGRpbmctdG9wOiAyZW07CisgICBjbGVhcjogYm90aDsKKyAgfQorCisgICN2YWxpZGF0b3JzIHsKKyAgICAgIG1hcmdpbi10b3A6IDVlbTsKKyAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgY29sb3I6ICM3Nzc7CisgIH0KKyAgQG1lZGlhIHByaW50IHsKKyAgICAgIGJvZHkgeworICAgICAgICAgIGZvbnQtc2l6ZTogOHB0OworICAgICAgfQorICAgICAgLm5vcHJpbnQgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICB9CisgIH0KKworCisudGlwLAorLm5vdGUgeworICAgYmFja2dyb3VuZDogI2YwZjBmMjsKKyAgIGNvbG9yOiAjMzMzOworICAgcGFkZGluZzogMjBweDsKKyAgIG1hcmdpbjogMjBweDsKK30KKworLnRpcCBoMywKKy5ub3RlIGgzIHsKKyAgIHBhZGRpbmc6IDBlbTsKKyAgIG1hcmdpbjogMGVtOworICAgZm9udC1zaXplOiAyZW07CisgICBmb250LXdlaWdodDogYm9sZDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisudGlwIGEsCisubm90ZSBhIHsKKyAgIGNvbG9yOiAjMzMzOworICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5mb290bm90ZSB7CisgICBmb250LXNpemU6IHNtYWxsOworICAgY29sb3I6ICMzMzM7Cit9CisKKy8qIENoYW5nZXMgdGhlIGFubm91bmNlbWVudCB0ZXh0ICovCisudGlwIGgzLAorLndhcm5pbmcgaDMsCisuY2F1dGlvbiBoMywKKy5ub3RlIGgzIHsKKyAgIGZvbnQtc2l6ZTpsYXJnZTsKKyAgIGNvbG9yOiAjMDA1NTdEOworfQpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwgYi9kb2N1bWVudGF0aW9uL3RvYXN0ZXItbWFudWFsL3RvYXN0ZXItbWFudWFsLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFjNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b2FzdGVyLW1hbnVhbC90b2FzdGVyLW1hbnVhbC54bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKK1s8IUVOVElUWSAlIHBva3kgU1lTVEVNICIuLi9wb2t5LmVudCI+ICVwb2t5OyBdID4KKworPGJvb2sgaWQ9J3RvYXN0ZXItbWFudWFsJyBsYW5nPSdlbicKKyAgICAgIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIgorICAgICAgeG1sbnM9Imh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIgorICAgICAgPgorICAgIDxib29raW5mbz4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSdmaWd1cmVzL3RvYXN0ZXItdGl0bGUucG5nJworICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J1NWRycKKyAgICAgICAgICAgICAgICAgICAgYWxpZ249J2xlZnQnIHNjYWxlZml0PScxJyB3aWR0aD0nMTAwJScvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8dGl0bGU+CisgICAgICAgICAgICBUb2FzdGVyIFVzZXIgTWFudWFsCisgICAgICAgIDwvdGl0bGU+CisKKyAgICAgICAgPGF1dGhvcmdyb3VwPgorICAgICAgICAgICAgPGF1dGhvcj4KKyAgICAgICAgICAgICAgICA8Zmlyc3RuYW1lPlNjb3R0PC9maXJzdG5hbWU+IDxzdXJuYW1lPlJpZmVuYmFyazwvc3VybmFtZT4KKyAgICAgICAgICAgICAgICA8YWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxvcmduYW1lPkludGVsIENvcnBvcmF0aW9uPC9vcmduYW1lPgorICAgICAgICAgICAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgICAgICAgICAgICAgPGVtYWlsPnNjb3R0Lm0ucmlmZW5iYXJrQGludGVsLmNvbTwvZW1haWw+CisgICAgICAgICAgICA8L2F1dGhvcj4KKyAgICAgICAgPC9hdXRob3Jncm91cD4KKworICAgICAgICA8cmV2aGlzdG9yeT4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuODwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPkFwcmlsIDIwMTU8L2RhdGU+CisgICAgICAgICAgICAgICAgPHJldnJlbWFyaz5SZWxlYXNlZCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0IDEuOCBSZWxlYXNlLjwvcmV2cmVtYXJrPgorICAgICAgICAgICAgPC9yZXZpc2lvbj4KKyAgICAgICAgICAgIDxyZXZpc2lvbj4KKyAgICAgICAgICAgICAgICA8cmV2bnVtYmVyPjEuOTwvcmV2bnVtYmVyPgorICAgICAgICAgICAgICAgIDxkYXRlPk9jdG9iZXIgMjAxNTwvZGF0ZT4KKyAgICAgICAgICAgICAgICA8cmV2cmVtYXJrPlJlbGVhc2VkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgMS45IFJlbGVhc2UuPC9yZXZyZW1hcms+CisgICAgICAgICAgICA8L3JldmlzaW9uPgorICAgICAgIDwvcmV2aGlzdG9yeT4KKworICAgIDxjb3B5cmlnaHQ+CisgICAgICA8eWVhcj4mQ09QWVJJR0hUX1lFQVI7PC95ZWFyPgorICAgICAgPGhvbGRlcj5MaW51eCBGb3VuZGF0aW9uPC9ob2xkZXI+CisgICAgPC9jb3B5cmlnaHQ+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgICA8cGFyYT4KKyAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgPHVsaW5rIHR5cGU9Imh0dHAiIHVybD0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL3VrLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAyLjAgVUs6IEVuZ2xhbmQgJmFtcDsgV2FsZXM8L3VsaW5rPiBhcyBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxub3RlPgorICAgICAgICAgIEZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgICAgICBZb2N0byBQcm9qZWN0IHJlbGVhc2UsIHNlZSB0aGUKKyAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19UT0FTVF9VUkw7Jz5Ub2FzdGVyIFVzZXIgTWFudWFsPC91bGluaz4KKyAgICAgICAgICBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisgICAgICA8L25vdGU+CisKKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgICAgPC9ib29raW5mbz4KKworICAgIDx4aTppbmNsdWRlIGhyZWY9InRvYXN0ZXItbWFudWFsLWludHJvLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idG9hc3Rlci1tYW51YWwtc3RhcnQueG1sIi8+CisKKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ0b2FzdGVyLW1hbnVhbC1zZXR1cC1hbmQtdXNlLnhtbCIvPgorCisgICAgPHhpOmluY2x1ZGUgaHJlZj0idG9hc3Rlci1tYW51YWwtcmVmZXJlbmNlLnhtbCIvPgorCis8L2Jvb2s+Cis8IS0tCit2aW06IGV4cGFuZHRhYiB0dz04MCB0cz00CistLT4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdG9vbHMvZWNsaXBzZS1oZWxwLnNlZCBiL2RvY3VtZW50YXRpb24vdG9vbHMvZWNsaXBzZS1oZWxwLnNlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY5MGJjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b29scy9lY2xpcHNlLWhlbHAuc2VkCkBAIC0wLDAgKzEsMTggQEAKKyMgUHJvY2Vzc2VzIHBva3ktcmVmLW1hbnVhbCBhbmQgeW9jdG8tcHJvamVjdC1xcyBtYW51YWwgKDx3b3JkPi08d29yZD4tPHdvcmQ+IHN0eWxlKQorIyBGb3IgZXhhbXBsZToKKyMgICAidWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuMy9wb2t5LXJlZi1tYW51YWwvcG9reS1yZWYtbWFudWFsLmh0bWwjZmFxIgorIyAgIC0+ICJsaW5rIiBocmVmPSIuLi9wb2t5LXJlZi1tYW51YWwvZmFxLmh0bWwiCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcL1teXC9dKlwvXChbYS16XSotW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLVthLXpdKi5odG1sI1woW15cIl0qXClcIi9cImxpbmtcIiBocmVmPVwiXC5cLlwvXDFcL1wyLmh0bWxcIi9nCisKKyMgUHJvY2Vzc2VzIGFsbCBvdGhlciBtYW51YWxzICg8d29yZD4tPHdvcmQ+IHN0eWxlKQorIyBGb3IgZXhhbXBsZToKKyMgICAidWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuMy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbCNmYXEiCisjICAgLT4gImxpbmsiIGhyZWY9Ii4uL2tlcm5lbC1tYW51YWwvZmFxLmh0bWwiCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcL1teXC9dKlwvXChbYS16XSotW2Etel0qXClcL1thLXpdKi1bYS16XSouaHRtbCNcKFteXCJdKlwpXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9cMi5odG1sXCIvZworCisjIFByb2Nlc3MgY2FzZXMgd2hlcmUganVzdCBhbiBleHRlcm5hbCBtYW51YWwgaXMgcmVmZXJlbmNlZCB3aXRob3V0IGFuIGlkIGFuY2hvcgorIyBGb3IgZXhhbXBsZToKKyMgICAidWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2NzLzEuMy9rZXJuZWwtbWFudWFsL2tlcm5lbC1tYW51YWwuaHRtbAorIyAgIC0+ICJsaW5rIiBocmVmPSIuLi9rZXJuZWwtbWFudWFsL2luZGV4Lmh0bWwiCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcL1teXC9dKlwvXChbYS16XSotW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLVthLXpdKi5odG1sXCIvXCJsaW5rXCIgaHJlZj1cIlwuXC5cL1wxXC9pbmRleC5odG1sXCIvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC9bXlwvXSpcL1woW2Etel0qLVthLXpdKlwpXC9bYS16XSotW2Etel0qLmh0bWxcIi9cImxpbmtcIiBocmVmPVwiXC5cLlwvXDFcL2luZGV4Lmh0bWxcIi9nCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZCBiL2RvY3VtZW50YXRpb24vdG9vbHMvbWVnYS1tYW51YWwuc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzQwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3Rvb2xzL21lZ2EtbWFudWFsLnNlZApAQCAtMCwwICsxLDMzIEBACisjIFByb2Nlc3NlcyBwb2t5LXJlZi1tYW51YWwgYW5kIHlvY3RvLXByb2plY3QtcXMgbWFudWFsICg8d29yZD4tPHdvcmQ+LTx3b3JkPiBzdHlsZSkuCisjIFRoaXMgc3R5bGUgaXMgZm9yIG1hbnVhbCBmb2xkZXJzIGxpa2UgInlvY3RvLXByb2plY3QtcXMiIGFuZCAicG9reS1yZWYtbWFudWFsIi4KKyMgVGhpcyBpcyB0aGUgb2xkIHdheSB0aGF0IGRpZCBpdC4gIENhbid0IGRvIHRoYXQgbm93IHRoYXQgd2UgaGF2ZSAiYml0YmFrZS11c2VyLW1hbnVhbCIgc3RyaW5ncworIyBpbiB0aGUgbWVnYS1tYW51YWwuCisjIHMvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9bYS16XSotW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi1bYS16XSouaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3Bva3ktcmVmLW1hbnVhbFwvcG9reS1yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKKworIyBQcm9jZXNzZXMgYWxsIG90aGVyIG1hbnVhbHMgKDx3b3JkPi08d29yZD4gc3R5bGUpIGV4Y2VwdCBmb3IgdGhlIEJpdEJha2UgVXNlciBNYW51YWwgYmVjYXVzZQorIyBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIG1lZ2EtbWFudWFsLgorIyBUaGlzIHN0eWxlIGlzIGZvciBtYW51YWwgZm9sZGVycyB0aGF0IHVzZSB0d28gd29yZCwgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIG5vdyAoZS5nLiAicmVmLW1hbnVhbCIpLgorIyBUaGlzIHdhcyB0aGUgb25lLWxpbmVyIHRoYXQgd29ya2VkIGJlZm9yZSB3ZSBpbnRyb2R1Y2VkIHRoZSBCaXRCYWtlIFVzZXIgTWFudWFsLCB3aGljaCBpcworIyBub3QgaW4gdGhlIG1lZ2EtbWFudWFsLgorIyBzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvW2Etel0qLVthLXpdKlwvW2Etel0qLVthLXpdKi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCisKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9hZHQtbWFudWFsXC9hZHQtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9ic3AtZ3VpZGVcL2JzcC1ndWlkZS5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwva2VybmVsLWRldlwva2VybmVsLWRldi5odG1sIy9cImxpbmtcIiBocmVmPVwiIy9nCitzL1widWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvcHJvZmlsZS1tYW51YWxcL3Byb2ZpbGUtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9yZWYtbWFudWFsXC9yZWYtbWFudWFsLmh0bWwjL1wibGlua1wiIGhyZWY9XCIjL2cKK3MvXCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC90b2FzdGVyLW1hbnVhbFwvdG9hc3Rlci1tYW51YWwuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworcy9cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbCMvXCJsaW5rXCIgaHJlZj1cIiMvZworCisjIFByb2Nlc3MgY2FzZXMgd2hlcmUganVzdCBhbiBleHRlcm5hbCBtYW51YWwgaXMgcmVmZXJlbmNlZCB3aXRob3V0IGFuIGlkIGFuY2hvcgorcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3lvY3RvLXByb2plY3QtcXNcL3lvY3RvLXByb2plY3QtcXMuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFF1aWNrIFN0YXJ0PFwvYT4vWW9jdG8gUHJvamVjdCBRdWljayBTdGFydC9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvZGV2LW1hbnVhbFwvZGV2LW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPllvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsPFwvYT4vWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2FkdC1tYW51YWxcL2FkdC1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPFwvYT4vWW9jdG8gUHJvamVjdCBBcHBsaWNhdGlvbiBEZXZlbG9wZXIncyBHdWlkZS9nCitzLzxhIGNsYXNzPVwidWxpbmtcIiBocmVmPVwiaHR0cDpcL1wvd3d3LnlvY3RvcHJvamVjdC5vcmdcL2RvY3NcLzEuOVwvYnNwLWd1aWRlXC9ic3AtZ3VpZGUuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IEJvYXJkIFN1cHBvcnQgUGFja2FnZSAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTxcL2E+L1lvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlIChCU1ApIERldmVsb3BlcidzIEd1aWRlL2cKK3MvPGEgY2xhc3M9XCJ1bGlua1wiIGhyZWY9XCJodHRwOlwvXC93d3cueW9jdG9wcm9qZWN0Lm9yZ1wvZG9jc1wvMS45XC9wcm9maWxlLW1hbnVhbFwvcHJvZmlsZS1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IFByb2ZpbGluZyBhbmQgVHJhY2luZyBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL2tlcm5lbC1kZXZcL2tlcm5lbC1kZXYuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IExpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3JlZi1tYW51YWxcL3JlZi1tYW51YWwuaHRtbFwiIHRhcmdldD1cIl90b3BcIj5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8XC9hPi9Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwvZworcy88YSBjbGFzcz1cInVsaW5rXCIgaHJlZj1cImh0dHA6XC9cL3d3dy55b2N0b3Byb2plY3Qub3JnXC9kb2NzXC8xLjlcL3RvYXN0ZXItbWFudWFsXC90b2FzdGVyLW1hbnVhbC5odG1sXCIgdGFyZ2V0PVwiX3RvcFwiPlRvYXN0ZXIgVXNlciBNYW51YWw8XC9hPi9Ub2FzdGVyIFVzZXIgTWFudWFsL2cKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vdG9vbHMvcG9reS1kb2Nib29rLXRvLXBkZiBiL2RvY3VtZW50YXRpb24vdG9vbHMvcG9reS1kb2Nib29rLXRvLXBkZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTVmZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi90b29scy9wb2t5LWRvY2Jvb2stdG8tcGRmCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCQoraWYgWyAteiAiJDEiIC1vIC16ICIkMiIgXTsgdGhlbgorICAgZWNobyAidXNhZ2U6IFstdl0gJDAgPGRvY2Jvb2sgZmlsZT4gPHRlbXBsYXRlZGlyPiIKKyAgIGVjaG8KKyAgIGVjaG8gIipOT1RFKiB5b3UgbmVlZCB4c2x0cHJvYywgZm9wIGFuZCBud2Fsc2ggZG9jYm9vayBzdHlsZXNoZWV0cyIgCisgICBlY2hvICIgICAgICAgaW5zdGFsbGVkIGZvciB0aGlzIHRvIHdvcmshIgorICAgZWNobworICAgZXhpdCAwCitmaQorCitGTz1gZWNobyAkMSB8IHNlZCBzLy54bWwvLmZvL2AgfHwgZXhpdCAxCitQREY9YGVjaG8gJDEgfCBzZWQgcy8ueG1sLy5wZGYvYCB8fCBleGl0IDEKK1RFTVBMQVRFRElSPSQyCisKKyMjCisjIFRoZXNlIFVSSSBzaG91bGQgYmUgcmV3cml0dGVuIGJ5IHlvdXIgZGlzdHJpYnV0aW9uJ3MgeG1sIGNhdGFsb2cgdG8KKyMgbWF0Y2ggeW91ciBsb2NhbHkgaW5zdGFsbGVkIFhTTCBzdHlsZXNoZWV0cy4KK1hTTF9CQVNFX1VSST0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQiCisKKyMgQ3JlYXRlcyBhIHRlbXBvcmFyeSBYU0wgc3R5bGVzaGVldCBiYXNlZCBvbiB0aXRsZXBhZ2UueHNsCit4c2x0cHJvYyAtbyAvdG1wL3RpdGxlcGFnZS54c2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAtLXhpbmNsdWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgJFhTTF9CQVNFX1VSSS90ZW1wbGF0ZS90aXRsZXBhZ2UueHNsIFwKKyAgICAgICAgICRURU1QTEFURURJUi90aXRsZXBhZ2UudGVtcGxhdGVzLnhtbCB8fCBleGl0IDEKKworIyBDcmVhdGVzIHRoZSBmaWxlIG5lZWRlZCBmb3IgRk9QCit4c2x0cHJvYyAtLXhpbmNsdWRlICAgICAgICAgICAgICAgICAgICBcCisJIC0tc3RyaW5ncGFyYW0gaHlwaGVuYXRlIGZhbHNlIFwKKwkgLS1zdHJpbmdwYXJhbSBmb3JtYWwudGl0bGUucGxhY2VtZW50ICJmaWd1cmUgYWZ0ZXIiIFwKKwkgLS1zdHJpbmdwYXJhbSB1bGluay5zaG93IDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgYm9keS5mb250Lm1hc3RlciAgOSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICB0aXRsZS5mb250Lm1hc3RlciAgMTEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSBkcmFmdC53YXRlcm1hcmsuaW1hZ2UgIiRURU1QTEFURURJUi9kcmFmdC5wbmciIFwKKyAgICAgICAgIC0tc3RyaW5ncGFyYW0gIGNoYXB0ZXIuYXV0b2xhYmVsIDEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgYXBwZW5kaXguYXV0b2xhYmVsIEEgXAorICAgICAgICAgLS1zdHJpbmdwYXJhbSAgc2VjdGlvbi5hdXRvbGFiZWwgMSBcCisgICAgICAgICAtLXN0cmluZ3BhcmFtICBzZWN0aW9uLmxhYmVsLmluY2x1ZGVzLmNvbXBvbmVudC5sYWJlbCAxIFwKKyAgICAgICAgIC0tb3V0cHV0ICRGTyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICRURU1QTEFURURJUi9wb2t5LWRiLXBkZi54c2wgICAgXAorCSAkMSAgICAgICAgICAgICAgICAgfHwgZXhpdCAxCisKKyMgSW52b2tlcyB0aGUgSmF2YSB2ZXJzaW9uIG9mIEZPUC4gIFVzZXMgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGNvbW1vbi9mb3AtY29uZmlnLnhtbAorZm9wIC1jICRURU1QTEFURURJUi9mb3AtY29uZmlnLnhtbCAtZm8gJEZPIC1wZGYgJFBERiAgICAgICB8fCBleGl0IDEKKworcm0gLWYgJEZPCitybSAtZiAgL3RtcC90aXRsZXBhZ2UueHNsCisKK2VjaG8KK2VjaG8gIiAjIyMjIFN1Y2Nlc3MhICRQREYgcmVhZHkuICMjIyMiCitlY2hvCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3Rvb2xzL3VwZGF0ZS1kb2N1bWVudGF0aW9uLWNvbmYgYi9kb2N1bWVudGF0aW9uL3Rvb2xzL3VwZGF0ZS1kb2N1bWVudGF0aW9uLWNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4ZDI4MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vdG9vbHMvdXBkYXRlLWRvY3VtZW50YXRpb24tY29uZgpAQCAtMCwwICsxLDE2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgZG9jdW1lbnRhdGlvbi5jb25mIHVwZGF0ZSBzY3JpcHQKKyMKKyMgQXV0aG9yOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgcmUKK2Zyb20gbHhtbCBpbXBvcnQgZXRyZWUKK2ltcG9ydCBsb2dnaW5nCisKK2RlZiBsb2dnZXJfY3JlYXRlKG5hbWUpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgbG9nZ2VyaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIobG9nZ2VyaGFuZGxlcikKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIHJldHVybiBsb2dnZXIKK2xvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoJ2RvY2NvbmZ1cGRhdGVyJykKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iZG9jdW1lbnRhdGlvbi5jb25mIHVwZGF0ZXIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2Jhc2VwYXRoJywgaGVscD0nUGF0aCB0byBPRS1Db3JlIGJhc2UgZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSB3YXJuaW5ncy9lcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihhcmdzLmJhc2VwYXRoKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdTcGVjaWZpZWQgYmFzZSBwYXRoICVzIG5vdCBmb3VuZCcpCisgICAgICAgIHJldHVybiAxCisKKyAgICBkb2NfY29uZiA9IG9zLnBhdGguam9pbihhcmdzLmJhc2VwYXRoLCAnbWV0YScsICdjb25mJywgJ2RvY3VtZW50YXRpb24uY29uZicpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRvY19jb25mKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCAlcycgJSBkb2NfY29uZikKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGFsbG93ZWRfZmxhZ3MgPSBbJ2RvYyddCisgICAgZmxhZ19yZSA9IHJlLmNvbXBpbGUocidcWyguKz8pXF0nKQorCisgICAgaW5mb3MgPSB7fQorICAgIHRyZWUgPSBldHJlZS5wYXJzZSgncmVmLW1hbnVhbC9yZWYtdmFyaWFibGVzLnhtbCcpCisgICAgcm9vdCA9IHRyZWUuZ2V0cm9vdCgpCisgICAgZm9yIGdsb3NzYXJ5IGluIHJvb3QuZmluZGFsbCgnZ2xvc3NhcnknKToKKyAgICAgICAgZm9yIGdsb3NzZGl2IGluIGdsb3NzYXJ5LmZpbmRhbGwoJ2dsb3NzZGl2Jyk6CisgICAgICAgICAgICBmb3IgZ2xvc3NlbnRyeSBpbiBnbG9zc2Rpdi5maW5kYWxsKCdnbG9zc2VudHJ5Jyk6CisgICAgICAgICAgICAgICAgaW5mbyA9IGdsb3NzZW50cnkuZmluZCgnaW5mbycpCisgICAgICAgICAgICAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5mb2xpbmUgPSAnICcuam9pbihpbmZvLnRleHQuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgaW5mb2xpbmVzcGxpdCA9IGluZm9saW5lLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGluZm9saW5lKSA8IDI6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBpbmZvIGxpbmUgKG5vID0gY2hhcmFjdGVyKSwgaWdub3Jpbmc6ICVzJyAlIGluZm9saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmbGFnX3JlLmZpbmRhbGwoaW5mb2xpbmVzcGxpdFswXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgaW5mbyBsaW5lIChubyB2YXJmbGFnKSwgaWdub3Jpbmc6ICVzJyAlIGluZm9saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBhbGxvd2VkX2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdJbnZhbGlkIGluZm8gbGluZSAodmFyZmxhZyAlcyBub3QgaW4gYWxsb3dlZCBsaXN0KSwgaWdub3Jpbmc6ICVzJyAlIChmbGFnLCBpbmZvbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaW5mb3NbaW5mb2xpbmVzcGxpdFswXS5yc3RyaXAoKV0gPSBpbmZvbGluZXNwbGl0WzFdLmxzdHJpcCgpCisKKyAgICBpZiBub3QgaW5mb3M6CisgICAgICAgIGxvZ2dlci5lcnJvcignRVJST1I6IFVuYWJsZSB0byBmaW5kIGFueSBpbmZvIHRhZ3MgaW4gdGhlIGdsb3NzYXJ5JykKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBzb3J0a2V5KGtleSk6CisgICAgICAgICMgVW5kZXJzY29yZXMgc29ydCB1bmRlc2lyYWJseSwgc28gcmVwbGFjZSB0aGVtCisgICAgICAgIHJldHVybiBrZXkuc3BsaXQoJ1snKVswXS5yZXBsYWNlKCdfJywgJy0nKQorCisgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgbGluZXMgPSBbXQorICAgIGludmFycyA9IEZhbHNlCisgICAgbGFzdGxldHRlciA9IE5vbmUKKyAgICBhZGRlZCA9IFtdCisgICAgd2l0aCBvcGVuKGRvY19jb25mLCAncicpIGFzIGRjZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZGNmOgorICAgICAgICAgICAgaWYgbm90IGludmFyczoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBhbmQgJ0RFU0NSSVBUSU9OUyBGT1IgVkFSSUFCTEVTJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBpbnZhcnMgPSBUcnVlCisgICAgICAgICAgICBlbGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICBsaW5lc3BsaXQgPSBsaW5lLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZXNwbGl0KSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGxpbmVzcGxpdFswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBsYXN0bGV0dGVyID0ga2V5WzBdCisgICAgICAgICAgICAgICAgICAgICMgRmluZCBhbnl0aGluZyBpbiB0aGUgZGljdCB0aGF0IHNob3VsZCBjb21lIGJlZm9yZSB0aGUgY3VycmVudCBrZXkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRrZXkgaW4gc29ydGVkKGluZm9zLmtleXMoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzb3J0a2V5KGRrZXkpIDwgc29ydGtleShrZXkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgPSAlc1xuJyAlIChka2V5LCBpbmZvc1tka2V5XSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQuYXBwZW5kKGRrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGluZm9zW2RrZXldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBpbmZvcy5nZXQoa2V5LCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvc1trZXldCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBuZXd2YWx1ZSAhPSBsaW5lc3BsaXRbMV0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzID0gJXNcbicgJSAoa2V5LCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleSBpbiBhZGRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBhZGRlZCBhIG5ldyB2YWx1ZSBmb3IgdGhpcyBrZXksIHNvIHNraXAgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBsYXN0bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSB3ZSB3cml0ZSBvdXQgYW55dGhpbmcgYW55dGhpbmcgbGVmdCBvdmVyIGZvciB0aGlzIGxldHRlcgorICAgICAgICAgICAgICAgICAgICBmb3IgZGtleSBpbiBzb3J0ZWQoaW5mb3Mua2V5cygpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRrZXlbMF0gPT0gbGFzdGxldHRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzID0gJXNcbicgJSAoZGtleSwgaW5mb3NbZGtleV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBpbmZvc1tka2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGRrZXlbMF0gPiBsYXN0bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTGlzdCBpcyBzb3J0ZWQsIHNvIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsYXN0bGV0dGVyID0gTm9uZQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICBpZiBub3QgaW52YXJzOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ0VSUk9SOiBVbmFibGUgdG8gZmluZCB2YXJpYWJsZXMgc2VjdGlvbiBpbiBkb2N1bWVudGF0aW9uLmNvbmYnKQorICAgICAgICByZXR1cm4gMQorCisgICAgaWYgaW5mb3M6CisgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICMgV3JpdGUgb3V0IGFueXRoaW5nIGxlZnQgb3ZlcgorICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuXG4nKQorICAgICAgICBmb3Iga2V5IGluIHNvcnRlZChpbmZvcy5rZXlzKCkpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyA9ICVzXG4nICUgKGtleSwgaW5mb3Nba2V5XSkpCisKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgJXMnICUgZG9jX2NvbmYpCisgICAgICAgIHdpdGggb3Blbihkb2NfY29uZiwgJ3cnKSBhcyBkY2Y6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBkY2Yud3JpdGUobGluZSkKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuaW5mbygnTm8gY2hhbmdlcyByZXF1aXJlZCcpCisKKyAgICByZXR1cm4gMAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKKworCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcgYi9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1lbnZpcm9ubWVudC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiN2E1NQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcgYi9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzFkMmIxNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy9maWd1cmVzL3lvY3RvLXByb2plY3QtdHJhbnNwLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMvcXMtc3R5bGUuY3NzIGIvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3FzLXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzVjODVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3FzLXN0eWxlLmNzcwpAQCAtMCwwICsxLDk4MyBAQAorLyoKKyAgIEdlbmVyaWMgWEhUTUwgLyBEb2NCb29rIFhIVE1MIENTUyBTdHlsZXNoZWV0LgorCisgICBCcm93c2VyIHdyYW5nbGluZyBhbmQgdHlwb2dyYXBoaWMgZGVzaWduIGJ5CisgICAgICBPeXZpbmQgS29sYXMgLyBwaXBwaW5AZ2ltcC5vcmcKKworICAgQ3VzdG9taXNlZCBmb3IgUG9reSBieQorICAgICAgTWF0dGhldyBBbGx1bSAvIG1hbGx1bUBvLWhhbmQuY29tCisKKyAgIFRoYW5rcyB0bzoKKyAgICAgTGlhbSBSLiBFLiBRdWluCisgICAgIFdpbGxpYW0gU2thZ2dzCisgICAgIEpha3ViIFN0ZWluZXIKKworICAgU3RydWN0dXJlCisgICAtLS0tLS0tLS0KKworICAgVGhlIHN0eWxlc2hlZXQgaXMgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6CisKKyAgICAgICBQb3NpdGlvbmluZworICAgICAgICAgIE1hcmdpbnMsIHBhZGRpbmdzLCB3aWR0aCwgZm9udC1zaXplLCBjbGVhcmluZy4KKyAgICAgICBEZWNvcmF0aW9ucworICAgICAgICAgIEJvcmRlcnMsIHN0eWxlCisgICAgICAgQ29sb3JzCisgICAgICAgICAgQ29sb3JzCisgICAgICAgR3JhcGhpY3MKKyAgICAgICAgICBHcmFwaGljYWwgYmFja2dyb3VuZHMKKyAgICAgICBOYXN0eSBJRSB0d2Vha3MKKyAgICAgICAgICBXb3JrYXJvdW5kcyBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIGluIGludGVybmV0IGV4cGxvcmVyLAorICAgICAgICAgIGN1cnJlbnRseSBtYWtlcyB0aGUgc3R5bGVzaGVldCBub24gdmFsaWRhdGluZywgYnV0IHVwIHVudGlsCisgICAgICAgICAgdGhpcyBwb2ludCBpdCBpcyB2YWxpZGF0aW5nLgorICAgICAgIE1vemlsbGEgZXh0ZW5zaW9ucworICAgICAgICAgIFRyYW5zcGFyZW5jeSBmb3IgZm9vdGVyCisJICBSb3VuZGVkIGNvcm5lcnMgb24gYm94ZXMKKworKi8KKworCisgIC8qKioqKioqKioqKioqKiogLworIC8gIFBvc2l0aW9uaW5nICAgLworLyAqKioqKioqKioqKioqKiovCisKK2JvZHkgeworICBmb250LWZhbWlseTogVmVyZGFuYSwgU2Fucywgc2Fucy1zZXJpZjsKKworICBtaW4td2lkdGg6IDY0MHB4OworICB3aWR0aDogODAlOworICBtYXJnaW46ICAwZW0gYXV0bzsKKyAgcGFkZGluZzogMmVtIDVlbSA1ZW0gNWVtOworICBjb2xvcjogIzMzMzsKK30KKworaDEsaDIsaDMsaDQsaDUsaDYsaDcgeworICBmb250LWZhbWlseTogQXJpYWwsIFNhbnM7CisgIGNvbG9yOiAjMDA1NTdEOworICBjbGVhcjogYm90aDsKK30KKworaDEgeworICBmb250LXNpemU6IDJlbTsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBtYXJnaW46IDJlbSAwZW0gMGVtIDBlbTsKK30KKworaDIuc3VidGl0bGUgeworICBtYXJnaW46IDAuMTBlbSAwZW0gMy4wZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMS44ZW07CisgIHBhZGRpbmctbGVmdDogMjAlOworICBmb250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK2gyIHsKKyAgbWFyZ2luOiAyZW0gMGVtIDAuNjZlbSAwZW07CisgIHBhZGRpbmc6IDAuNWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDEuNWVtOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDMuc3VidGl0bGUgeworICBtYXJnaW46IDBlbSAwZW0gMWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDE0Mi4xNCU7CisgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCitoMyB7CisgIG1hcmdpbjogMWVtIDBlbSAwLjVlbSAwZW07CisgIHBhZGRpbmc6IDFlbSAwZW0gMGVtIDBlbTsKKyAgZm9udC1zaXplOiAxNDAlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKworaDQgeworICBtYXJnaW46IDFlbSAwZW0gMC41ZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTIwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2g1IHsKKyAgbWFyZ2luOiAxZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMWVtIDBlbSAwZW0gMGVtOworICBmb250LXNpemU6IDExMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitoNiB7CisgIG1hcmdpbjogMWVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAxZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtc2l6ZTogMTEwJTsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5hdXRob3Jncm91cCB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBwYWRkaW5nLXRvcDogMjU2cHg7CisgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcDsKKyAgbWFyZ2luLXRvcDogLTI1NnB4OworICBwYWRkaW5nLXJpZ2h0OiA1MHB4OworICBtYXJnaW4tbGVmdDogNTBweDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB3aWR0aDogNjAwcHg7Cit9CisKK2gzLmF1dGhvciB7CisgIG1hcmdpbjogMGVtIDBtZSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgY29sb3I6ICMzMzM7CisgIGNsZWFyOiBib3RoOworfQorCisuYXV0aG9yIHR0LmVtYWlsIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKKy50aXRsZXBhZ2UgaHIgeworICB3aWR0aDogMGVtOworICBjbGVhcjogYm90aDsKK30KKworLnJldmhpc3RvcnkgeworICBwYWRkaW5nLXRvcDogMmVtOworICBjbGVhcjogYm90aDsKK30KKworLnRvYywKKy5saXN0LW9mLXRhYmxlcywKKy5saXN0LW9mLWV4YW1wbGVzLAorLmxpc3Qtb2YtZmlndXJlcyB7CisgIHBhZGRpbmc6IDEuMzNlbSAwZW0gMi41ZW0gMGVtOworICBjb2xvcjogIzAwNTU3RDsKK30KKworLnRvYyBwLAorLmxpc3Qtb2YtdGFibGVzIHAsCisubGlzdC1vZi1maWd1cmVzIHAsCisubGlzdC1vZi1leGFtcGxlcyBwIHsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDAuM2VtOworICBtYXJnaW46IDEuNWVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIHAgYiwKKy5saXN0LW9mLXRhYmxlcyBwIGIsCisubGlzdC1vZi1maWd1cmVzIHAgYiwKKy5saXN0LW9mLWV4YW1wbGVzIHAgYnsKKyAgZm9udC1zaXplOiAxMDAuMCU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisudG9jIGRsLAorLmxpc3Qtb2YtdGFibGVzIGRsLAorLmxpc3Qtb2YtZmlndXJlcyBkbCwKKy5saXN0LW9mLWV4YW1wbGVzIGRsIHsKKyAgbWFyZ2luOiAwZW0gMGVtIDAuNWVtIDBlbTsKKyAgcGFkZGluZzogMGVtIDBlbSAwZW0gMGVtOworfQorCisudG9jIGR0IHsKKyAgbWFyZ2luOiAwZW0gMGVtIDBlbSAwZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRvYyBkZCB7CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMi42ZW07CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworZGl2Lmdsb3NzYXJ5IGRsLAorZGl2LnZhcmlhYmxlbGlzdCBkbCB7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHdpZHRoOiAyMGVtOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLnZhcmlhYmxlbGlzdCBkbCBkdCB7CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCisuZ2xvc3NhcnkgZGwgZGQsCisudmFyaWFibGVsaXN0IGRsIGRkIHsKKyAgbWFyZ2luLXRvcDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDI1LjVlbTsKK30KKworLmdsb3NzYXJ5IGRkIHAsCisudmFyaWFibGVsaXN0IGRkIHAgeworICBtYXJnaW4tdG9wOiAwZW07CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKworCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgeworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07CisgIG1hcmdpbjogMGVtIDBlbSAwZW0gMGVtOworfQorCitkaXYuY2FsbG91dGxpc3QgdGFibGUgdGQgcCB7CisgIG1hcmdpbi10b3A6IDBlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCitkaXYgcC5jb3B5cmlnaHQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCitkaXYubGVnYWxub3RpY2UgcC5sZWdhbG5vdGljZS10aXRsZSB7CisgIG1hcmdpbi1ib3R0b206IDBlbTsKK30KKworcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworCit9CisKK2RsIHsKKyAgcGFkZGluZy10b3A6IDBlbTsKK30KKworaHIgeworICBib3JkZXI6IHNvbGlkIDFweDsKK30KKworCisubWVkaWFvYmplY3QsCisubWVkaWFvYmplY3RjbyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworaW1nIHsKKyAgYm9yZGVyOiBub25lOworfQorCit1bCB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDEuNWVtOworfQorCit1bCBsaSB7CisgIHBhZGRpbmc6IDBlbSAwZW0gMGVtIDBlbTsKK30KKwordWwgbGkgcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGggOjEwMCU7Cit9CisKK3RoIHsKKyAgcGFkZGluZzogMC4yNWVtOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZCB7CisgIHBhZGRpbmc6IDAuMjVlbTsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworcCBhW2lkXSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7CisgIGRpc3BsYXk6IGlubGluZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30KKworYSB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBjb2xvcjogIzQ0NDsKK30KKworcHJlIHsKKyAgICBvdmVyZmxvdzogYXV0bzsKK30KKworYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAvKmZvbnQtd2VpZ2h0OiBib2xkOyovCit9CisKKy8qIFRoaXMgc3R5bGUgZGVmaW5lcyBob3cgdGhlIHBlcm1hbGluayBjaGFyYWN0ZXIKKyAgIGFwcGVhcnMgYnkgaXRzZWxmIGFuZCB3aGVuIGhvdmVyZWQgb3ZlciB3aXRoCisgICB0aGUgbW91c2UuICovCisKK1thbHQ9J1Blcm1hbGluayddIHsgY29sb3I6ICNlZWU7IH0KK1thbHQ9J1Blcm1hbGluayddOmhvdmVyIHsgY29sb3I6IGJsYWNrOyB9CisKKworZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsZXhhbXBsZSwKK2Rpdi5pbmZvcm1hbHRhYmxlLAorZGl2LmZpZ3VyZSwKK2Rpdi50YWJsZSwKK2Rpdi5leGFtcGxlIHsKKyAgbWFyZ2luOiAxZW0gMGVtOworICBwYWRkaW5nOiAxZW07CisgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKK30KKworCitkaXYuaW5mb3JtYWxmaWd1cmUgcC50aXRsZSBiLAorZGl2LmluZm9ybWFsZXhhbXBsZSBwLnRpdGxlIGIsCitkaXYuaW5mb3JtYWx0YWJsZSBwLnRpdGxlIGIsCitkaXYuZmlndXJlIHAudGl0bGUgYiwKK2Rpdi5leGFtcGxlIHAudGl0bGUgYiwKK2Rpdi50YWJsZSBwLnRpdGxlIGJ7CisgICAgcGFkZGluZy10b3A6IDBlbTsKKyAgICBtYXJnaW4tdG9wOiAwZW07CisgICAgZm9udC1zaXplOiAxMDAlOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiwKKy5tZWRpYW9iamVjdCAuY2FwdGlvbiBwICB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgZm9udC1zaXplOiA4MCU7CisgIHBhZGRpbmctdG9wOiAwLjVlbTsKKyAgcGFkZGluZy1ib3R0b206IDAuNWVtOworfQorCisuZXBpZ3JhcGggeworICBwYWRkaW5nLWxlZnQ6IDU1JTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworfQorCisuZXBpZ3JhcGggcCB7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5lcGlncmFwaCAucXVvdGUgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisuZXBpZ3JhcGggLmF0dHJpYnV0aW9uIHsKKyAgZm9udC1zdHlsZTogbm9ybWFsOworICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworc3Bhbi5hcHBsaWNhdGlvbiB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnByb2dyYW1saXN0aW5nIHsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiA4MCU7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIG1hcmdpbjogMS4zM2VtIDBlbTsKKyAgcGFkZGluZzogMS4zM2VtOworfQorCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgbWFyZ2luLXRvcDogMWVtOworICBtYXJnaW4tYm90dG9tOiAxZW07CisKK30KKworLyogZm9yY2UgZnVsbCB3aWR0aCBvZiB0YWJsZSB3aXRoaW4gZGl2ICovCisudGlwIHRhYmxlLAorLndhcm5pbmcgdGFibGUsCisuY2F1dGlvbiB0YWJsZSwKKy5ub3RlIHRhYmxlIHsKKyAgYm9yZGVyOiBub25lOworICB3aWR0aDogMTAwJTsKK30KKworCisudGlwIHRhYmxlIHRoLAorLndhcm5pbmcgdGFibGUgdGgsCisuY2F1dGlvbiB0YWJsZSB0aCwKKy5ub3RlIHRhYmxlIHRoIHsKKyAgcGFkZGluZzogMC44ZW0gMC4wZW0gMC4wZW0gMC4wZW07CisgIG1hcmdpbiA6IDBlbSAwZW0gMGVtIDBlbTsKK30KKworLnRpcCBwLAorLndhcm5pbmcgcCwKKy5jYXV0aW9uIHAsCisubm90ZSBwIHsKKyAgbWFyZ2luLXRvcDogMC41ZW07CisgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICBwYWRkaW5nLXJpZ2h0OiAxZW07CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKy5hY3JvbnltIHsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgcGFkZGluZzogMC4wOWVtIDAuM2VtOworICBtYXJnaW46IDBlbTsKK30KKworLml0ZW1pemVkbGlzdCBsaSB7CisgIGNsZWFyOiBub25lOworfQorCisuZmlsZW5hbWUgeworICBmb250LXNpemU6IG1lZGl1bTsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwZW07CisgIHRvcDogMGVtOworICB3aWR0aDogMTAwJTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZjsKKyAgd2lkdGg6IDEwMCU7Cit9CisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBwb3NpdGlvbjogZml4ZWQ7CisgIGxlZnQ6IDBlbTsKKyAgYm90dG9tOiAwZW07CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIHdpZHRoOiAxMDAlOworfQorCisKK2Rpdi5uYXZoZWFkZXIgdGQsCitkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1zaXplOiA2NiU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGggeworICAvKmZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBUaW1lcywgc2VyaWY7Ki8KKyAgLypmb250LXNpemU6IHgtbGFyZ2U7Ki8KKyAgZm9udC1zaXplOiA4MCU7Cit9CisKK2Rpdi5uYXZoZWFkZXIgdGFibGUgeworICBib3JkZXItbGVmdDogMGVtOworICBib3JkZXItcmlnaHQ6IDBlbTsKKyAgYm9yZGVyLXRvcDogMGVtOworICB3aWR0aDogMTAwJTsKK30KKworZGl2Lm5hdmZvb3RlciB0YWJsZSB7CisgIGJvcmRlci1sZWZ0OiAwZW07CisgIGJvcmRlci1yaWdodDogMGVtOworICBib3JkZXItYm90dG9tOiAwZW07CisgIHdpZHRoOiAxMDAlOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGEsCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIGEgeworICBjb2xvcjogIzc3NzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKiBub3JtYWwgdGV4dCBpbiB0aGUgZm9vdGVyICovCitkaXYubmF2Zm9vdGVyIHRhYmxlIHRkIHsKKyAgY29sb3I6IGJsYWNrOworfQorCitkaXYubmF2aGVhZGVyIHRhYmxlIHRkIGE6dmlzaXRlZCwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTp2aXNpdGVkIHsKKyAgY29sb3I6ICM0NDQ7Cit9CisKKworLyogbGlua3MgaW4gaGVhZGVyIGFuZCBmb290ZXIgKi8KK2Rpdi5uYXZoZWFkZXIgdGFibGUgdGQgYTpob3ZlciwKK2Rpdi5uYXZmb290ZXIgdGFibGUgdGQgYTpob3ZlciB7CisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgY29sb3I6ICMzM2E7Cit9CisKK2Rpdi5uYXZoZWFkZXIgaHIsCitkaXYubmF2Zm9vdGVyIGhyIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisucWFuZGFzZXQgdHIucXVlc3Rpb24gdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisKKy5xYW5kYXNldCB0ci5hbnN3ZXIgdGQgcCB7CisgIG1hcmdpbjogMGVtIDBlbSAxZW0gMGVtOworICBwYWRkaW5nOiAwZW0gMGVtIDBlbSAwZW07Cit9CisuYW5zd2VyIHRkIHsKKyAgcGFkZGluZy1ib3R0b206IDEuNWVtOworfQorCisuZW1waGFzaXMgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworCisgIC8qKioqKioqKioqKioqIC8KKyAvIGRlY29yYXRpb25zICAvCisvICoqKioqKioqKioqKiovCisKKy50aXRsZXBhZ2UgeworfQorCisucGFydCAudGl0bGUgeworfQorCisuc3VidGl0bGUgeworICAgIGJvcmRlcjogbm9uZTsKK30KKworLyoKK2gxIHsKKyAgYm9yZGVyOiBub25lOworfQorCitoMiB7CisgIGJvcmRlci10b3A6IHNvbGlkIDAuMmVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2gzIHsKKyAgYm9yZGVyLXRvcDogMGVtOworICBib3JkZXItYm90dG9tOiBzb2xpZCAwLjA2ZW07Cit9CisKK2g0IHsKKyAgYm9yZGVyOiAwZW07CisgIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDZlbTsKK30KKworaDUgeworICBib3JkZXI6IDBlbTsKK30KKyovCisKKy5wcm9ncmFtbGlzdGluZyB7CisgIGJvcmRlcjogc29saWQgMXB4OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCisKKy50aXAsCisud2FybmluZywKKy5jYXV0aW9uLAorLm5vdGUgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKK30KKworLnF1ZXN0aW9uIHRkIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOworfQorCisuYW5zd2VyIHsKK30KKworCitiLmtleWNhcCwKKy5rZXljYXAgeworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworCitkaXYubmF2aGVhZGVyLCBkaXYuaGVhZGluZ3sKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkOworfQorCisKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICBib3JkZXItdG9wOiAxcHggc29saWQ7Cit9CisKKyAgLyoqKioqKioqKiAvCisgLyAgY29sb3JzICAvCisvICoqKioqKioqKi8KKworYm9keSB7CisgIGNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKK30KKworYSB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCithOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RlZGVkZTsKK30KKworCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoNywKK2g4IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CisKK2hyIHsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworfQorCisKKy50aXAsIC53YXJuaW5nLCAuY2F1dGlvbiwgLm5vdGUgeworICBib3JkZXItY29sb3I6ICNmZmY7Cit9CisKKworLnRpcCB0YWJsZSB0aCwKKy53YXJuaW5nIHRhYmxlIHRoLAorLmNhdXRpb24gdGFibGUgdGgsCisubm90ZSB0YWJsZSB0aCB7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cit9CisKKworLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisuY2F1dGlvbiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy50aXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYyOworfQorCisubm90ZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjI7Cit9CisKKy5nbG9zc2FyeSBkbCBkdCwKKy52YXJpYWJsZWxpc3QgZGwgZHQsCisudmFyaWFibGVsaXN0IGRsIGR0IHNwYW4udGVybSB7CisgIGNvbG9yOiAjMDQ0OworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmV4YW1wbGUsCitkaXYuaW5mb3JtYWxmaWd1cmUsCitkaXYuaW5mb3JtYWx0YWJsZSwKK2Rpdi5pbmZvcm1hbGV4YW1wbGUgeworICBib3JkZXItY29sb3I6ICNhYWE7Cit9CisKK3ByZS5wcm9ncmFtbGlzdGluZyB7CisgIGNvbG9yOiBibGFjazsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgYm9yZGVyLWNvbG9yOiAjYWFhOworICBib3JkZXItd2lkdGg6IDJweDsKK30KKworLmd1aW1lbnUsCisuZ3VpbGFiZWwsCisuZ3VpbWVudWl0ZW0geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisKK2Iua2V5Y2FwLAorLmtleWNhcCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKworCitkaXYubmF2aGVhZGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCitkaXYubmF2Zm9vdGVyIHsKKyAgYm9yZGVyLWNvbG9yOiBibGFjazsKK30KKworCisgIC8qKioqKioqKioqKiAvCisgLyAgZ3JhcGhpY3MgIC8KKy8gKioqKioqKioqKiovCisKKy8qCitib2R5IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJpbWFnZXMvYm9keV9iZy5qcGciKTsKKyAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsKK30KKworLm5hdmhlYWRlciwKKy5ub3RlLAorLnRpcCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiaW1hZ2VzL25vdGVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKy53YXJuaW5nLAorLmNhdXRpb24geworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy93YXJuaW5nX2JnLmpwZyIpOworICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOworfQorCisuZmlndXJlLAorLmluZm9ybWFsZmlndXJlLAorLmV4YW1wbGUsCisuaW5mb3JtYWxleGFtcGxlLAorLnRhYmxlLAorLmluZm9ybWFsdGFibGUgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImltYWdlcy9maWd1cmVfYmcuanBnIik7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7Cit9CisKKyovCitoMSwKK2gyLAoraDMsCitoNCwKK2g1LAoraDYsCitoN3sKK30KKworLyoKK0V4YW1wbGUgb2YgaG93IHRvIHN0aWNrIGFuIGltYWdlIGFzIHBhcnQgb2YgdGhlIHRpdGxlLgorCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImZpZ3VyZXMvd2hpdGUtb24tYmxhY2sucG5nIik7CisgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworfQorKi8KKworZGl2LnByZWZhY2UgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuY29sb3Bob24gLnRpdGxlLAorZGl2LmNoYXB0ZXIgLnRpdGxlcGFnZSAudGl0bGUsCitkaXYuYXJ0aWNsZSAudGl0bGVwYWdlIC50aXRsZQoreworfQorCitkaXYuc2VjdGlvbiBkaXYuc2VjdGlvbiAudGl0bGVwYWdlIC50aXRsZSwKK2Rpdi5zZWN0MiAudGl0bGVwYWdlIC50aXRsZSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKworCitoMS50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBoZWlnaHQ6IDI1NnB4OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworfQorCitoMi5zdWJ0aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LWluZGVudDogLTkwMDBweDsKKyAgb3ZlcmZsb3c6aGlkZGVuOworICB3aWR0aDogMHB4OworICBkaXNwbGF5OiBub25lOworfQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLworIC8gIHBpcHBpbi5naW1wLm9yZyBzcGVjaWZpYyBhbHRlcmF0aW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitkaXYuaGVhZGluZywgZGl2Lm5hdmhlYWRlciB7CisgIGNvbG9yOiAjNzc3OworICBmb250LXNpemU6IDgwJTsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luOiAwOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBsZWZ0OiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUwcHg7CisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9oZWFkaW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CisgIGJvcmRlcjogbm9uZTsKK30KKworZGl2LmhlYWRpbmcgYSB7CisgIGNvbG9yOiAjNDQ0OworfQorCitkaXYuZm9vdGluZywgZGl2Lm5hdmZvb3RlciB7CisgIGJvcmRlcjogbm9uZTsKKyAgY29sb3I6ICNkZGQ7CisgIGZvbnQtc2l6ZTogODAlOworICB0ZXh0LWFsaWduOnJpZ2h0OworCisgIHdpZHRoOiAxMDAlOworICBwYWRkaW5nLXRvcDogMTBweDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDBweDsKKyAgbGVmdDogMHB4OworCisgIGJhY2tncm91bmQ6IHVybCgnL2dmeC9mb290aW5nX2JnLnBuZycpIHRyYW5zcGFyZW50OworfQorKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKiAvCisgLyAgbmFzdHkgaWUgdHdlYWtzICAvCisvICoqKioqKioqKioqKioqKioqKi8KKworLyoKK2Rpdi5oZWFkaW5nLCBkaXYubmF2aGVhZGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7Cit9CisKK2Rpdi5mb290aW5nLCBkaXYubmF2Zm9vdGVyIHsKKyAgd2lkdGg6ZXhwcmVzc2lvbihkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgInB4Iik7CisgIG1hcmdpbi1sZWZ0OmV4cHJlc3Npb24oIi01ZW0iKTsKK30KK2JvZHkgeworICBwYWRkaW5nOmV4cHJlc3Npb24oIjRlbSA1ZW0gMGVtIDVlbSIpOworfQorKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAvCisgLyBtb3ppbGxhIHZlbmRvciBzcGVjaWZpYyBjc3MgZXh0ZW5zaW9ucyAgLworLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKK2Rpdi5uYXZmb290ZXIsIGRpdi5mb290aW5neworICAtbW96LW9wYWNpdHk6IDAuOGVtOworfQorCitkaXYuZmlndXJlLAorZGl2LnRhYmxlLAorZGl2LmluZm9ybWFsZmlndXJlLAorZGl2LmluZm9ybWFsdGFibGUsCitkaXYuaW5mb3JtYWxleGFtcGxlLAorZGl2LmV4YW1wbGUsCisudGlwLAorLndhcm5pbmcsCisuY2F1dGlvbiwKKy5ub3RlIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjVlbTsKK30KKworYi5rZXljYXAsCisua2V5Y2FwIHsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwLjNlbTsKK30KKyovCisKK3RhYmxlIHRyIHRkIHRhYmxlIHRyIHRkIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCitociB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3RhYmxlIHsKKyAgYm9yZGVyOiAwZW07Cit9CisKKyAucGhvdG8geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiAgIDEuNWVtOworICBtYXJnaW4tYm90dG9tOiAxLjVlbTsKKyAgbWFyZ2luLXRvcDogMGVtOworICBtYXgtd2lkdGg6ICAgICAgMTdlbTsKKyAgYm9yZGVyOiAgICAgMXB4IHNvbGlkIGdyYXk7CisgIHBhZGRpbmc6ICAgIDNweDsKKyAgYmFja2dyb3VuZDogd2hpdGU7Cit9CisgLnNlcGVyYXRvciB7CisgICBwYWRkaW5nLXRvcDogMmVtOworICAgY2xlYXI6IGJvdGg7CisgIH0KKworICAjdmFsaWRhdG9ycyB7CisgICAgICBtYXJnaW4tdG9wOiA1ZW07CisgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgIGNvbG9yOiAjNzc3OworICB9CisgIEBtZWRpYSBwcmludCB7CisgICAgICBib2R5IHsKKyAgICAgICAgICBmb250LXNpemU6IDhwdDsKKyAgICAgIH0KKyAgICAgIC5ub3ByaW50IHsKKyAgICAgICAgICBkaXNwbGF5OiBub25lOworICAgICAgfQorICB9CisKKworLnRpcCwKKy5ub3RlIHsKKyAgIGJhY2tncm91bmQ6ICNmMGYwZjI7CisgICBjb2xvcjogIzMzMzsKKyAgIHBhZGRpbmc6IDIwcHg7CisgICBtYXJnaW46IDIwcHg7Cit9CisKKy50aXAgaDMsCisubm90ZSBoMyB7CisgICBwYWRkaW5nOiAwZW07CisgICBtYXJnaW46IDBlbTsKKyAgIGZvbnQtc2l6ZTogMmVtOworICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICBjb2xvcjogIzMzMzsKK30KKworLnRpcCBhLAorLm5vdGUgYSB7CisgICBjb2xvcjogIzMzMzsKKyAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisuZm9vdG5vdGUgeworICAgZm9udC1zaXplOiBzbWFsbDsKKyAgIGNvbG9yOiAjMzMzOworfQorCisvKiBDaGFuZ2VzIHRoZSBhbm5vdW5jZW1lbnQgdGV4dCAqLworLnRpcCBoMywKKy53YXJuaW5nIGgzLAorLmNhdXRpb24gaDMsCisubm90ZSBoMyB7CisgICBmb250LXNpemU6bGFyZ2U7CisgICBjb2xvcjogIzAwNTU3RDsKK30KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWN1c3RvbWl6YXRpb24ueHNsIGIvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMtY3VzdG9taXphdGlvbi54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjMDJkZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgdmVyc2lvbj0iMS4wIj4KKworICA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL2RvY2Jvb2stbWlycm9yL2RvY2Jvb2steHNsLTEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworPCEtLQorCisgIDx4c2w6aW1wb3J0IGhyZWY9Ii4uL3RlbXBsYXRlLzEuNzYuMS9kb2Nib29rLXhzbC0xLjc2LjEveGh0bWwvZG9jYm9vay54c2wiIC8+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS94aHRtbC9kb2Nib29rLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0ieW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsIi8+CisKKyAgPHhzbDppbmNsdWRlIGhyZWY9Ii4uL3RlbXBsYXRlL3Blcm1hbGlua3MueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9zZWN0aW9uLnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvY29tcG9uZW50LnRpdGxlLnhzbCIvPgorICA8eHNsOmluY2x1ZGUgaHJlZj0iLi4vdGVtcGxhdGUvZGl2aXNpb24udGl0bGUueHNsIi8+CisgIDx4c2w6aW5jbHVkZSBocmVmPSIuLi90ZW1wbGF0ZS9mb3JtYWwub2JqZWN0LmhlYWRpbmcueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9Iidxcy1zdHlsZS5jc3MnIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLWVjbGlwc2UtY3VzdG9taXphdGlvbi54c2wgYi9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTY4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy1lY2xpcHNlLWN1c3RvbWl6YXRpb24ueHNsCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPHhzbDpzdHlsZXNoZWV0CisJeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiCisJeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIKKwl2ZXJzaW9uPSIxLjAiPgorCisgIDx4c2w6aW1wb3J0IGhyZWY9Imh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3IvZG9jYm9vay1taXJyb3IvZG9jYm9vay14c2wtMS43Ni4xL2VjbGlwc2UvZWNsaXBzZTMueHNsIiAvPgorCis8IS0tCisKKyAgPHhzbDppbXBvcnQgaHJlZj0iLi4vdGVtcGxhdGUvMS43Ni4xL2RvY2Jvb2steHNsLTEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworICA8eHNsOmltcG9ydAorCSAgaHJlZj0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLzEuNzYuMS9lY2xpcHNlL2VjbGlwc2UzLnhzbCIgLz4KKworLS0+CisKKyAgPHhzbDppbXBvcnQgaHJlZj0ieW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsIi8+CisKKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVua2VyLm91dHB1dC5pbmRlbnQiIHNlbGVjdD0iJ3llcyciLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJjaHVuay5xdWlldGx5IiBzZWxlY3Q9IjEiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJ1c2UuaWQuYXMuZmlsZW5hbWUiIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9InVsaW5rLnRhcmdldCIgc2VsZWN0PSInX3NlbGYnIiAvPgorICA8eHNsOnBhcmFtIG5hbWU9ImJhc2UuZGlyIiBzZWxlY3Q9IidodG1sL3lvY3RvLXByb2plY3QtcXMvJyIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImNodW5rLnNlY3Rpb24uZGVwdGgiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9Imh0bWwuc3R5bGVzaGVldCIgc2VsZWN0PSInLi4vYm9vay5jc3MnIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iZWNsaXBzZS5tYW5pZmVzdCIgc2VsZWN0PSIwIi8+CisgIDx4c2w6cGFyYW0gbmFtZT0iY3JlYXRlLnBsdWdpbi54bWwiIHNlbGVjdD0iMCIvPgorICA8eHNsOnBhcmFtIG5hbWU9InN1cHByZXNzLm5hdmlnYXRpb24iIHNlbGVjdD0iMSIvPgorICA8eHNsOnBhcmFtIG5hbWU9ImdlbmVyYXRlLmluZGV4IiBzZWxlY3Q9IjAiLz4KKyAgPHhzbDpwYXJhbSBuYW1lPSJnZW5lcmF0ZS50b2MiIHNlbGVjdD0iJ2FydGljbGUgbm9wJyI+PC94c2w6cGFyYW0+CisgIDx4c2w6cGFyYW0gbmFtZT0iaHRtbC5zdHlsZXNoZWV0IiBzZWxlY3Q9IidzdHlsZS5jc3MnIiAvPgorPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLXRpdGxlcGFnZS54c2wgYi9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzVhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL3lvY3RvLXByb2plY3QtcXMveW9jdG8tcHJvamVjdC1xcy10aXRsZXBhZ2UueHNsCkBAIC0wLDAgKzEsMzgyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+CisKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM6ZXhzbD0iaHR0cDovL2V4c2x0Lm9yZy9jb21tb24iIHZlcnNpb249IjEuMCIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImV4c2wiPgorCis8IS0tIFRoaXMgc3R5bGVzaGVldCB3YXMgY3JlYXRlZCBieSB0ZW1wbGF0ZS90aXRsZXBhZ2UueHNsLS0+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aWNsZWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aWNsZWluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXJ0aGVhZGVyL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhcnRpY2xlaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aWNsZWluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJhcnRoZWFkZXIvc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXJ0aGVhZGVyL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcnRoZWFkZXIvcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGljbGVpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFydGhlYWRlci9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcnRpY2xlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFydGljbGUudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+CisgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhbmNob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorPCEtLSBvcmlnbmFsbHkgZ2VuZXJhdGVkIGNvbnRlbnQgLS0+Cis8IS0tIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPiAtLT4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcnRpY2xlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFydGljbGUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXJ0aWNsZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNldGluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZXRpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZXRpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNldGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2V0LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZXQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2V0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZXQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2V0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImJvb2tpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImJvb2tpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJib29raW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImJvb2tpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYm9va2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnNlcGFyYXRvciI+PGhyLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJib29rLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYm9vay50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2sudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYm9vay50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYm9vay50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJib29rLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJib29rLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9ImJvb2sudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImJvb2sudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYm9vay50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRpdmlzaW9uLnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OnBhcnRbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJwYXJ0aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InBhcnQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0icGFydC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icGFydGludHJvaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwYXJ0aW50cm9pbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InBhcnRpbnRyb2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icGFydGludHJvaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InBhcnRpbnRyb2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UiPgorICA8ZGl2PgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJwYXJ0aW50cm8udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InBhcnRpbnRyby50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icGFydGludHJvLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0idGl0bGUiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29ycGF1dGhvciIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3Jncm91cCIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhdXRob3IiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ib3RoZXJjcmVkaXQiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmVsZWFzZWluZm8iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29weXJpZ2h0IiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImxlZ2Fsbm90aWNlIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InB1YmRhdGUiIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aXNpb24iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InBhcnRpbnRyby50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icmV2aGlzdG9yeSIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJhYnN0cmFjdCIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwYXJ0aW50cm8udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icGFydGludHJvLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icmVmZXJlbmNlaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJyZWZlcmVuY2VpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InJlZmVyZW5jZWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icmVmZXJlbmNlaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InJlZmVyZW5jZWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj48aHIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVyZW5jZS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZXJlbmNlLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlcmVuY2UudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icmVmZXJlbmNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InJlZmVyZW5jZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJyZWZlcmVuY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icmVmZW50cnkudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJlZmVudHJ5LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyZWZlbnRyeS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InJlZmVudHJ5LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icmVmZW50cnkudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OmRlZGljYXRpb25bMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkZWRpY2F0aW9uaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZGVkaWNhdGlvbmluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImRlZGljYXRpb24udGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZGVkaWNhdGlvbi50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJkZWRpY2F0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImRlZGljYXRpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6YWNrbm93bGVkZ2VtZW50c1sxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFja25vd2xlZGdlbWVudHNpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhY2tub3dsZWRnZW1lbnRzaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhY2tub3dsZWRnZW1lbnRzLnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFja25vd2xlZGdlbWVudHMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYWNrbm93bGVkZ2VtZW50cy50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJwcmVmYWNlaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0icHJlZmFjZWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0icHJlZmFjZWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InByZWZhY2VpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJwcmVmYWNlaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJwcmVmYWNlLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InByZWZhY2UudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJwcmVmYWNlLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InByZWZhY2UudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0icHJlZmFjZS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJjaGFwdGVyaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iY2hhcHRlcmluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iY2hhcHRlcmluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImNoYXB0ZXJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJjaGFwdGVyaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hYnN0cmFjdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJjaGFwdGVyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNoYXB0ZXIudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJjaGFwdGVyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImNoYXB0ZXIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iY2hhcHRlci50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYXBwZW5kaXhpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImFwcGVuZGl4aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hdXRob3Jncm91cCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vb3RoZXJjcmVkaXQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JlbGVhc2VpbmZvIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImFwcGVuZGl4aW5mby9yZXZpc2lvbiIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iYXBwZW5kaXhpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJhcHBlbmRpeGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9hYnN0cmFjdCIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJhcHBlbmRpeC50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYXBwZW5kaXgudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImFwcGVuZGl4LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYXBwZW5kaXgudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9ImFwcGVuZGl4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJhcHBlbmRpeC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0byI+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0aW9uaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzZWN0aW9uaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdGlvbmluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0aW9uaW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Rpb25pbmZvL2Fic3RyYWN0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5zZXBhcmF0b3IiPjx4c2w6aWYgdGVzdD0iY291bnQocGFyZW50OjoqKT0nMCciPjxoci8+PC94c2w6aWY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdGlvbi50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0aW9uLnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdGlvbi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0aW9uLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Rpb24udGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QxaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDFpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QxaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDFpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDEudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QxLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0MS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QxLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0MS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDEudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QyaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QyaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0MmluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QyLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0Mi50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QyLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0Mi50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3QzaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDNpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3QzaW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDNpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0M2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDMudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3QzLnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0My50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3QzLnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0My50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDMudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q0aW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDRpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q0aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDRpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDQudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q0LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0NC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDQudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNlY3Q1aW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2VjdDVpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2F1dGhvcmdyb3VwIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL290aGVyY3JlZGl0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNlY3Q1aW5mby9yZWxlYXNlaW5mbyIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vbGVnYWxub3RpY2UiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2xlZ2Fsbm90aWNlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vcmV2aXNpb24iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2VjdDVpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzZWN0NWluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL2Fic3RyYWN0Ii8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2VjdDUudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNlY3Q1LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZWN0NS50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0aXRsZSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3JwYXV0aG9yIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvcmdyb3VwIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImF1dGhvciIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJvdGhlcmNyZWRpdCIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZWxlYXNlaW5mbyIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3B5cmlnaHQiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ibGVnYWxub3RpY2UiIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0icHViZGF0ZSIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZpc2lvbiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNlY3Q1LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJyZXZoaXN0b3J5IiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFic3RyYWN0IiBtb2RlPSJzZWN0NS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2VjdDUudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8iPgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2ltcGxlc2VjdGluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby90aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0idGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNpbXBsZXNlY3RpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9jb3JwYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL2NvcnBhdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29ycGF1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yZ3JvdXAiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2F1dGhvciIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9hdXRob3IiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYXV0aG9yIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9vdGhlcmNyZWRpdCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmVsZWFzZWluZm8iLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL2NvcHlyaWdodCIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9jb3B5cmlnaHQiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vY29weXJpZ2h0Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9sZWdhbG5vdGljZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vcHViZGF0ZSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9wdWJkYXRlIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3B1YmRhdGUiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InNpbXBsZXNlY3RpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3JldmlzaW9uIi8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaW1wbGVzZWN0aW5mby9yZXZoaXN0b3J5Ii8+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3Jldmhpc3RvcnkiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vcmV2aGlzdG9yeSIvPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2ltcGxlc2VjdGluZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vYWJzdHJhY3QiLz4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vYWJzdHJhY3QiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnNlcGFyYXRvciI+PHhzbDppZiB0ZXN0PSJjb3VudChwYXJlbnQ6OiopPScwJyI+PGhyLz48L3hzbDppZj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcnBhdXRob3IiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yZ3JvdXAiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYXV0aG9yIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9Im90aGVyY3JlZGl0IiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJlbGVhc2VpbmZvIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvcHlyaWdodCIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsZWdhbG5vdGljZSIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJwdWJkYXRlIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmlzaW9uIiBtb2RlPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaW1wbGVzZWN0LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InJldmhpc3RvcnkiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYWJzdHJhY3QiIG1vZGU9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNpbXBsZXNlY3QudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0ic2ltcGxlc2VjdC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6YmlibGlvZ3JhcGh5WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0iYmlibGlvZ3JhcGh5aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJiaWJsaW9ncmFwaHlpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJpYmxpb2dyYXBoeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJiaWJsaW9ncmFwaHkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iYmlibGlvZ3JhcGh5LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0byI+CisgIDxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJjb21wb25lbnQudGl0bGUiPgorPHhzbDp3aXRoLXBhcmFtIG5hbWU9Im5vZGUiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6Z2xvc3NhcnlbMV0iLz4KKzwveHNsOmNhbGwtdGVtcGxhdGU+PC9kaXY+CisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJnbG9zc2FyeWluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJnbG9zc2FyeWluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iZG9jaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0ic3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5zZXBhcmF0b3IiPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZSI+CisgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJyZWN0by5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkcmVjdG8uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkcmVjdG8uY29udGVudCkgIT0gJycpIG9yICgkcmVjdG8uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiRyZWN0by5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5jb250ZW50Ij4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJnbG9zc2FyeS50aXRsZXBhZ2UuYmVmb3JlLnZlcnNvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Imdsb3NzYXJ5LnRpdGxlcGFnZS5zZXBhcmF0b3IiLz4KKyAgPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJnbG9zc2FyeS50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJnbG9zc2FyeS50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIj4KKzxkaXYgeHNsOnVzZS1hdHRyaWJ1dGUtc2V0cz0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLnN0eWxlIj4KKzx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0iZ2xvc3NhcnkudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvIj4KKyAgPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImNvbXBvbmVudC50aXRsZSI+Cis8eHNsOndpdGgtcGFyYW0gbmFtZT0ibm9kZSIgc2VsZWN0PSJhbmNlc3Rvci1vci1zZWxmOjppbmRleFsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT48L2Rpdj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImluZGV4aW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZGV4aW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vc3VidGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0iaW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InN1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlIj4KKyAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImluZGV4LnRpdGxlcGFnZS5iZWZvcmUudmVyc28iLz4KKyAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJpbmRleC50aXRsZXBhZ2UudmVyc28iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCR2ZXJzby5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCR2ZXJzby5jb250ZW50KSAhPSAnJykgb3IgKCR2ZXJzby5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHZlcnNvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iaW5kZXgudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9ImluZGV4LnRpdGxlcGFnZS52ZXJzby5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0ic3VidGl0bGUiIG1vZGU9ImluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJpbmRleC50aXRsZXBhZ2UucmVjdG8uc3R5bGUiPgorPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJpbmRleC50aXRsZXBhZ2UucmVjdG8ubW9kZSIvPgorPC9kaXY+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8iPgorICA8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29tcG9uZW50LnRpdGxlIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJub2RlIiBzZWxlY3Q9ImFuY2VzdG9yLW9yLXNlbGY6OnNldGluZGV4WzFdIi8+Cis8L3hzbDpjYWxsLXRlbXBsYXRlPjwvZGl2PgorICA8eHNsOmNob29zZT4KKyAgICA8eHNsOndoZW4gdGVzdD0ic2V0aW5kZXhpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2V0aW5kZXhpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iZG9jaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzZXRpbmRleC50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICA8L3hzbDpjaG9vc2U+CisKKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5iZWZvcmUucmVjdG8iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLmJlZm9yZS5yZWN0byIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0byIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHJlY3RvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHJlY3RvLmNvbnRlbnQpICE9ICcnKSBvciAoJHJlY3RvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkcmVjdG8uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2V0aW5kZXgudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNldGluZGV4LnRpdGxlcGFnZS52ZXJzbyIvPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0idmVyc28uZWxlbWVudHMuY291bnQiPgorICAgICAgPHhzbDpjaG9vc2U+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJmdW5jdGlvbi1hdmFpbGFibGUoJ2V4c2w6bm9kZS1zZXQnKSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImNvbnRhaW5zKHN5c3RlbS1wcm9wZXJ0eSgneHNsOnZlbmRvcicpLCAnQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nKSI+CisgICAgICAgICAgPCEtLVhhbGFuIHF1aXJrLS0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvdW50KGV4c2w6bm9kZS1zZXQoJHZlcnNvLmNvbnRlbnQpLyopIi8+PC94c2w6d2hlbj4KKyAgICAgICAgPHhzbDpvdGhlcndpc2U+MTwveHNsOm90aGVyd2lzZT4KKyAgICAgIDwveHNsOmNob29zZT4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOmlmIHRlc3Q9Iihub3JtYWxpemUtc3BhY2UoJHZlcnNvLmNvbnRlbnQpICE9ICcnKSBvciAoJHZlcnNvLmVsZW1lbnRzLmNvdW50ICZndDsgMCkiPgorICAgICAgPGRpdj48eHNsOmNvcHktb2Ygc2VsZWN0PSIkdmVyc28uY29udGVudCIvPjwvZGl2PgorICAgIDwveHNsOmlmPgorICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzZXRpbmRleC50aXRsZXBhZ2Uuc2VwYXJhdG9yIi8+CisgIDwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2V0aW5kZXgudGl0bGVwYWdlLnZlcnNvLm1vZGUiPgorICA8IS0tIGlmIGFuIGVsZW1lbnQgaXNuJ3QgZm91bmQgaW4gdGhpcyBtb2RlLCAtLT4KKyAgPCEtLSB0cnkgdGhlIGdlbmVyaWMgdGl0bGVwYWdlLm1vZGUgLS0+CisgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLiIgbW9kZT0idGl0bGVwYWdlLm1vZGUiLz4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzdWJ0aXRsZSIgbW9kZT0ic2V0aW5kZXgudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSI+Cis8ZGl2IHhzbDp1c2UtYXR0cmlidXRlLXNldHM9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNldGluZGV4LnRpdGxlcGFnZS5yZWN0by5tb2RlIi8+Cis8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvIj4KKyAgPHhzbDpjaG9vc2U+CisgICAgPHhzbDp3aGVuIHRlc3Q9InNpZGViYXJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzaWRlYmFyaW5mby90aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9ImRvY2luZm8vdGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9ImRvY2luZm8vdGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJpbmZvL3RpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJpbmZvL3RpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0idGl0bGUiPgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8uYXV0by5tb2RlIiBzZWxlY3Q9InRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgPC94c2w6Y2hvb3NlPgorCisgIDx4c2w6Y2hvb3NlPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJzaWRlYmFyaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0ic2lkZWJhcmluZm8vc3VidGl0bGUiLz4KKyAgICA8L3hzbDp3aGVuPgorICAgIDx4c2w6d2hlbiB0ZXN0PSJkb2NpbmZvL3N1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJkb2NpbmZvL3N1YnRpdGxlIi8+CisgICAgPC94c2w6d2hlbj4KKyAgICA8eHNsOndoZW4gdGVzdD0iaW5mby9zdWJ0aXRsZSI+CisgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiIHNlbGVjdD0iaW5mby9zdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgICAgPHhzbDp3aGVuIHRlc3Q9InN1YnRpdGxlIj4KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLmF1dG8ubW9kZSIgc2VsZWN0PSJzdWJ0aXRsZSIvPgorICAgIDwveHNsOndoZW4+CisgIDwveHNsOmNob29zZT4KKworPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2Uuc2VwYXJhdG9yIj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLmJlZm9yZS5yZWN0byI+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBuYW1lPSJzaWRlYmFyLnRpdGxlcGFnZS5iZWZvcmUudmVyc28iPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UiPgorICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgorICAgIDx4c2w6dmFyaWFibGUgbmFtZT0icmVjdG8uY29udGVudCI+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UuYmVmb3JlLnJlY3RvIi8+CisgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic2lkZWJhci50aXRsZXBhZ2UucmVjdG8iLz4KKyAgICA8L3hzbDp2YXJpYWJsZT4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InJlY3RvLmVsZW1lbnRzLmNvdW50Ij4KKyAgICAgIDx4c2w6Y2hvb3NlPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iZnVuY3Rpb24tYXZhaWxhYmxlKCdleHNsOm5vZGUtc2V0JykiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJjb250YWlucyhzeXN0ZW0tcHJvcGVydHkoJ3hzbDp2ZW5kb3InKSwgJ0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJykiPgorICAgICAgICAgIDwhLS1YYWxhbiBxdWlyay0tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb3VudChleHNsOm5vZGUtc2V0KCRyZWN0by5jb250ZW50KS8qKSIvPjwveHNsOndoZW4+CisgICAgICAgIDx4c2w6b3RoZXJ3aXNlPjE8L3hzbDpvdGhlcndpc2U+CisgICAgICA8L3hzbDpjaG9vc2U+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDppZiB0ZXN0PSIobm9ybWFsaXplLXNwYWNlKCRyZWN0by5jb250ZW50KSAhPSAnJykgb3IgKCRyZWN0by5lbGVtZW50cy5jb3VudCAmZ3Q7IDApIj4KKyAgICAgIDxkaXY+PHhzbDpjb3B5LW9mIHNlbGVjdD0iJHJlY3RvLmNvbnRlbnQiLz48L2Rpdj4KKyAgICA8L3hzbDppZj4KKyAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InZlcnNvLmNvbnRlbnQiPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLmJlZm9yZS52ZXJzbyIvPgorICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnZlcnNvIi8+CisgICAgPC94c2w6dmFyaWFibGU+CisgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJ2ZXJzby5lbGVtZW50cy5jb3VudCI+CisgICAgICA8eHNsOmNob29zZT4KKyAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnZXhzbDpub2RlLXNldCcpIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoc3lzdGVtLXByb3BlcnR5KCd4c2w6dmVuZG9yJyksICdBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicpIj4KKyAgICAgICAgICA8IS0tWGFsYW4gcXVpcmstLT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iY291bnQoZXhzbDpub2RlLXNldCgkdmVyc28uY29udGVudCkvKikiLz48L3hzbDp3aGVuPgorICAgICAgICA8eHNsOm90aGVyd2lzZT4xPC94c2w6b3RoZXJ3aXNlPgorICAgICAgPC94c2w6Y2hvb3NlPgorICAgIDwveHNsOnZhcmlhYmxlPgorICAgIDx4c2w6aWYgdGVzdD0iKG5vcm1hbGl6ZS1zcGFjZSgkdmVyc28uY29udGVudCkgIT0gJycpIG9yICgkdmVyc28uZWxlbWVudHMuY291bnQgJmd0OyAwKSI+CisgICAgICA8ZGl2Pjx4c2w6Y29weS1vZiBzZWxlY3Q9IiR2ZXJzby5jb250ZW50Ii8+PC9kaXY+CisgICAgPC94c2w6aWY+CisgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InNpZGViYXIudGl0bGVwYWdlLnNlcGFyYXRvciIvPgorICA8L2Rpdj4KKzwveHNsOnRlbXBsYXRlPgorCis8eHNsOnRlbXBsYXRlIG1hdGNoPSIqIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5tb2RlIj4KKyAgPCEtLSBpZiBhbiBlbGVtZW50IGlzbid0IGZvdW5kIGluIHRoaXMgbW9kZSwgLS0+CisgIDwhLS0gdHJ5IHRoZSBnZW5lcmljIHRpdGxlcGFnZS5tb2RlIC0tPgorICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InRpdGxlcGFnZS5tb2RlIi8+Cis8L3hzbDp0ZW1wbGF0ZT4KKworPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiIgbW9kZT0ic2lkZWJhci50aXRsZXBhZ2UudmVyc28ubW9kZSI+CisgIDwhLS0gaWYgYW4gZWxlbWVudCBpc24ndCBmb3VuZCBpbiB0aGlzIG1vZGUsIC0tPgorICA8IS0tIHRyeSB0aGUgZ2VuZXJpYyB0aXRsZXBhZ2UubW9kZSAtLT4KKyAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuIiBtb2RlPSJ0aXRsZXBhZ2UubW9kZSIvPgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InRpdGxlIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZm9ybWFsLm9iamVjdC5oZWFkaW5nIj4KKzx4c2w6d2l0aC1wYXJhbSBuYW1lPSJvYmplY3QiIHNlbGVjdD0iYW5jZXN0b3Itb3Itc2VsZjo6c2lkZWJhclsxXSIvPgorPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzx4c2w6dGVtcGxhdGUgbWF0Y2g9InN1YnRpdGxlIiBtb2RlPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5hdXRvLm1vZGUiPgorPGRpdiB4c2w6dXNlLWF0dHJpYnV0ZS1zZXRzPSJzaWRlYmFyLnRpdGxlcGFnZS5yZWN0by5zdHlsZSI+Cis8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4iIG1vZGU9InNpZGViYXIudGl0bGVwYWdlLnJlY3RvLm1vZGUiLz4KKzwvZGl2PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CisKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbCBiL2RvY3VtZW50YXRpb24veW9jdG8tcHJvamVjdC1xcy95b2N0by1wcm9qZWN0LXFzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGE3MzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi95b2N0by1wcm9qZWN0LXFzL3lvY3RvLXByb2plY3QtcXMueG1sCkBAIC0wLDAgKzEsNzk1IEBACis8IURPQ1RZUEUgYXJ0aWNsZSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iCisiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIvZG9jYm9va3guZHRkIgorWzwhRU5USVRZICUgcG9reSBTWVNURU0gIi4uL3Bva3kuZW50Ij4gJXBva3k7IF0gPgorCis8YXJ0aWNsZSBpZD0neW9jdG8tcHJvamVjdC1xcy1pbnRybyc+CisgICAgPGFydGljbGVpbmZvPgorICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBRdWljayBTdGFydDwvdGl0bGU+CisKKyAgICAgICAgPGNvcHlyaWdodD4KKyAgICAgICAgICAgIDx5ZWFyPiZDT1BZUklHSFRfWUVBUjs8L3llYXI+CisgICAgICAgICAgICA8aG9sZGVyPkxpbnV4IEZvdW5kYXRpb248L2hvbGRlcj4KKyAgICAgICAgPC9jb3B5cmlnaHQ+CisKKyAgICAgICAgPGxlZ2Fsbm90aWNlPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50IHVuZGVyCisgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSA8dWxpbmsgdHlwZT0iaHR0cCIgdXJsPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvdWsvIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDIuMCBVSzogRW5nbGFuZCAmYW1wOyBXYWxlczwvdWxpbms+IGFzIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zLgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgRm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1hbnVhbCBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1FTX1VSTDsnPllvY3RvIFByb2plY3QgUXVpY2sgU3RhcnQ8L3VsaW5rPgorICAgICAgICAgICAgICAgIGZyb20gdGhlIFlvY3RvIFByb2plY3Qgd2Vic2l0ZS4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9sZWdhbG5vdGljZT4KKworCisgICAgICAgIDxhYnN0cmFjdD4KKyAgICAgICAgICAgIDxpbWFnZWRhdGEgZmlsZXJlZj0iZmlndXJlcy95b2N0by1wcm9qZWN0LXRyYW5zcC5wbmciCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0iNmluIiBkZXB0aD0iMWluIgorICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ249InJpZ2h0IiBzY2FsZT0iMjUiIC8+CisgICAgICAgIDwvYWJzdHJhY3Q+CisgICAgPC9hcnRpY2xlaW5mbz4KKworICAgIDxzZWN0aW9uIGlkPSd3ZWxjb21lJz4KKyAgICAgICAgPHRpdGxlPldlbGNvbWUhPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBXZWxjb21lIHRvIHRoZSBZb2N0byBQcm9qZWN0IQorICAgICAgICAgICAgVGhlIFlvY3RvIFByb2plY3QgaXMgYW4gb3Blbi1zb3VyY2UgY29sbGFib3JhdGlvbiBwcm9qZWN0IHdob3NlCisgICAgICAgICAgICBmb2N1cyBpcyBkZXZlbG9wZXJzIG9mIGVtYmVkZGVkIExpbnV4IHN5c3RlbXMuCisgICAgICAgICAgICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoZSBZb2N0byBQcm9qZWN0IHVzZXMgYSBidWlsZCBob3N0IGJhc2VkCisgICAgICAgICAgICBvbiB0aGUgT3BlbkVtYmVkZGVkIChPRSkgcHJvamVjdCwgd2hpY2ggdXNlcyB0aGUKKyAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I2JpdGJha2UtdGVybSc+Qml0QmFrZTwvdWxpbms+CisgICAgICAgICAgICB0b29sLCB0byBjb25zdHJ1Y3QgY29tcGxldGUgTGludXggaW1hZ2VzLgorICAgICAgICAgICAgVGhlIEJpdEJha2UgYW5kIE9FIGNvbXBvbmVudHMgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyIHRvIGZvcm0KKyAgICAgICAgICAgIGEgcmVmZXJlbmNlIGJ1aWxkIGhvc3QsIGhpc3RvcmljYWxseSBrbm93biBhcworICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjcG9reSc+UG9reTwvdWxpbms+LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBJZiB5b3UgZG8gbm90IGhhdmUgYSBzeXN0ZW0gdGhhdCBydW5zIExpbnV4IGFuZCB5b3Ugd2FudCB0byBnaXZlCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBhIHRlc3QgcnVuLCB5b3UgbWlnaHQgY29uc2lkZXIgdXNpbmcgdGhlIFlvY3RvCisgICAgICAgICAgICBQcm9qZWN0IEJ1aWxkIEFwcGxpYW5jZS4KKyAgICAgICAgICAgIFRoZSBCdWlsZCBBcHBsaWFuY2UgYWxsb3dzIHlvdSB0byBidWlsZCBhbmQgYm9vdCBhIGN1c3RvbSBlbWJlZGRlZAorICAgICAgICAgICAgTGludXggaW1hZ2Ugd2l0aCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhIG5vbi1MaW51eCBkZXZlbG9wbWVudAorICAgICAgICAgICAgc3lzdGVtLgorICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cHM6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy90b29scy1yZXNvdXJjZXMvcHJvamVjdHMvYnVpbGQtYXBwbGlhbmNlJz5Zb2N0byBQcm9qZWN0IEJ1aWxkIEFwcGxpYW5jZTwvdWxpbms+CisgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVGhpcyBxdWljayBzdGFydCBpcyB3cml0dGVuIHNvIHRoYXQgeW91IGNhbiBxdWlja2x5IGdldCBhIGhvc3QKKyAgICAgICAgICAgIGJ1aWxkIGhvc3Qgc2V0IHVwIHRvIHVzZSB0aGUgWW9jdG8gUHJvamVjdCBhbmQgdGhlbiBidWlsZCBzb21lCisgICAgICAgICAgICBMaW51eCBpbWFnZXMuCisgICAgICAgICAgICBSYXRoZXIgdGhhbiBnbyBpbnRvIGdyZWF0IGRldGFpbCBhYm91dCB0aGUgWW9jdG8gUHJvamVjdCBhbmQgaXRzCisgICAgICAgICAgICBtYW55IGNhcGFiaWxpdGllcywgdGhpcyBxdWljayBzdGFydCBwcm92aWRlcyB0aGUgbWluaW1hbAorICAgICAgICAgICAgaW5mb3JtYXRpb24geW91IG5lZWQgdG8gdHJ5IG91dCB0aGUgWW9jdG8gUHJvamVjdCB1c2luZyBhCisgICAgICAgICAgICBzdXBwb3J0ZWQgTGludXggYnVpbGQgaG9zdC4KKyAgICAgICAgICAgIFJlYWRpbmcgYW5kIHVzaW5nIHRoZSBxdWljayBzdGFydCBzaG91bGQgcmVzdWx0IGluIHlvdSBoYXZpbmcgYQorICAgICAgICAgICAgYmFzaWMgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBZb2N0byBQcm9qZWN0IGlzIGFuZCBob3cgdG8gdXNlCisgICAgICAgICAgICBzb21lIG9mIGl0cyBjb3JlIGNvbXBvbmVudHMuCisgICAgICAgICAgICBZb3Ugd2lsbCBhbHNvIGhhdmUgd29ya2VkIHRocm91Z2ggc3RlcHMgdG8gcHJvZHVjZSB0d28gaW1hZ2VzOgorICAgICAgICAgICAgb25lIHN1aXRhYmxlIGZvciBlbXVsYXRpb24gYW5kIG9uZSB0aGF0IGNhbiBiZSB1c2VkIG9uIGFjdHVhbAorICAgICAgICAgICAgaGFyZHdhcmUuCisgICAgICAgICAgICBUaGUgZXhhbXBsZXMgaGlnaGxpZ2h0IHRoZSBlYXNlIHdpdGggd2hpY2ggeW91IGNhbiB1c2UgdGhlCisgICAgICAgICAgICBZb2N0byBQcm9qZWN0IHRvIGNyZWF0ZSBpbWFnZXMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIGhhcmR3YXJlLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgWW9jdG8gUHJvamVjdCwgeW91IGNhbgorICAgICAgICAgICAgcmVmZXJlbmNlIHRoZXNlIHJlc291cmNlczoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5XZWJzaXRlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fSE9NRV9VUkw7Jz5Zb2N0byBQcm9qZWN0IFdlYnNpdGU8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyB0aGUgbGF0ZXN0IGJ1aWxkcywgYnJlYWtpbmcgbmV3cywgZnVsbCBkZXZlbG9wbWVudAorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCBhbmQgYWNjZXNzIHRvIGEgcmljaCBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgICAgIERldmVsb3BtZW50IENvbW11bml0eSBpbnRvIHdoaWNoIHlvdSBjYW4gdGFwLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZBUXM6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgTGlzdHMgY29tbW9ubHkgYXNrZWQgWW9jdG8gUHJvamVjdCBxdWVzdGlvbnMgYW5kIGFuc3dlcnMuCisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gZmluZCB0d28gRkFRczoKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX1dJS0lfVVJMOy93aWtpL0ZBUSc+WW9jdG8gUHJvamVjdCBGQVE8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBvbiBhIHdpa2ksIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2ZhcSc+RkFRPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIGNoYXB0ZXIgaW4gdGhlIFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5EZXZlbG9wZXIgU2NyZWVuY2FzdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0naHR0cDovL3ZpbWVvLmNvbS8zNjQ1MDMyMSc+R2V0dGluZyBTdGFydGVkIHdpdGggdGhlIFlvY3RvIFByb2plY3QgLSBOZXcgRGV2ZWxvcGVyIFNjcmVlbmNhc3QgVHV0b3JpYWw8L3VsaW5rPgorICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBhIDMwLW1pbnV0ZSB2aWRlbyBjcmVhdGVkIGZvciB1c2VycyB1bmZhbWlsaWFyCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIFlvY3RvIFByb2plY3QgYnV0IGZhbWlsaWFyIHdpdGggTGludXggYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgaG9zdHMuCisgICAgICAgICAgICAgICAgICAgIFdoaWxlIHRoaXMgc2NyZWVuY2FzdCBpcyBzb21ld2hhdCBkYXRlZCwgdGhlIGludHJvZHVjdG9yeQorICAgICAgICAgICAgICAgICAgICBhbmQgZnVuZGFtZW50YWwgY29uY2VwdHMgYXJlIHVzZWZ1bCBmb3IgdGhlIGJlZ2lubmVyLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3lwLWludHJvJz4KKyAgICAgICAgPHRpdGxlPkludHJvZHVjaW5nIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFRoZSBZb2N0byBQcm9qZWN0IHRocm91Z2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcHJvdmlkZXMgYW4KKyAgICAgICAgICAgIG9wZW4gc291cmNlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRhcmdldGluZyB0aGUgQVJNLCBNSVBTLAorICAgICAgICAgICAgUG93ZXJQQywgYW5kIHg4NiBhcmNoaXRlY3R1cmVzIGZvciBhIHZhcmlldHkgb2YgcGxhdGZvcm1zCisgICAgICAgICAgICBpbmNsdWRpbmcgeDg2LTY0IGFuZCBlbXVsYXRlZCBvbmVzLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgY29tcG9uZW50cyBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IHRvIGRlc2lnbiwgZGV2ZWxvcCwKKyAgICAgICAgICAgIGJ1aWxkLCBkZWJ1Zywgc2ltdWxhdGUsIGFuZCB0ZXN0IHRoZSBjb21wbGV0ZSBzb2Z0d2FyZSBzdGFjayB1c2luZworICAgICAgICAgICAgTGludXgsIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIEdUSysgZnJhbWV3b3JrcywgYW5kIFF0IGZyYW1ld29ya3MuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8bWVkaWFvYmplY3Q+CisgICAgICAgICAgICA8aW1hZ2VvYmplY3Q+CisgICAgICAgICAgICAgICAgPGltYWdlZGF0YSBmaWxlcmVmPSJmaWd1cmVzL3lvY3RvLWVudmlyb25tZW50LnBuZyIKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSJQTkciIGFsaWduPSdjZW50ZXInIHNjYWxlZml0PScxJyB3aWR0aD0iMTAwJSIvPgorICAgICAgICAgICAgPC9pbWFnZW9iamVjdD4KKyAgICAgICAgICAgIDxjYXB0aW9uPgorICAgICAgICAgICAgICAgIDxwYXJhPlRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IEVudmlyb25tZW50PC9wYXJhPgorICAgICAgICAgICAgPC9jYXB0aW9uPgorICAgICAgICAgPC9tZWRpYW9iamVjdD4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEhlcmUgYXJlIHNvbWUgaGlnaGxpZ2h0cyBmb3IgdGhlIFlvY3RvIFByb2plY3Q6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIFByb3ZpZGVzIGEgcmVjZW50IExpbnV4IGtlcm5lbCBhbG9uZyB3aXRoIGEgc2V0IG9mIHN5c3RlbQorICAgICAgICAgICAgICAgIGNvbW1hbmRzIGFuZCBsaWJyYXJpZXMgc3VpdGFibGUgZm9yIHRoZSBlbWJlZGRlZAorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIE1ha2VzIGF2YWlsYWJsZSBzeXN0ZW0gY29tcG9uZW50cyBzdWNoIGFzIFgxMSwgR1RLKywgUXQsCisgICAgICAgICAgICAgICAgQ2x1dHRlciwgYW5kIFNETCAoYW1vbmcgb3RoZXJzKSBzbyB5b3UgY2FuIGNyZWF0ZSBhIHJpY2ggdXNlcgorICAgICAgICAgICAgICAgIGV4cGVyaWVuY2Ugb24gZGV2aWNlcyB0aGF0IGhhdmUgZGlzcGxheSBoYXJkd2FyZS4KKyAgICAgICAgICAgICAgICBGb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEgZGlzcGxheSBvciB3aGVyZSB5b3Ugd2lzaCB0bworICAgICAgICAgICAgICAgIHVzZSBhbHRlcm5hdGl2ZSBVSSBmcmFtZXdvcmtzLCB0aGVzZSBjb21wb25lbnRzIG5lZWQgbm90IGJlCisgICAgICAgICAgICAgICAgaW5zdGFsbGVkLgorICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBmb2N1c2VkIGFuZCBzdGFibGUgY29yZSBjb21wYXRpYmxlIHdpdGggdGhlCisgICAgICAgICAgICAgICAgT3BlbkVtYmVkZGVkIHByb2plY3Qgd2l0aCB3aGljaCB5b3UgY2FuIGVhc2lseSBhbmQgcmVsaWFibHkKKyAgICAgICAgICAgICAgICBidWlsZCBhbmQgZGV2ZWxvcC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICBGdWxseSBzdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2YgaGFyZHdhcmUgYW5kIGRldmljZSBlbXVsYXRpb24KKyAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBRdWljayBFTVVsYXRvciAoUUVNVSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgUHJvdmlkZXMgYSBsYXllciBtZWNoYW5pc20gdGhhdCBhbGxvd3MgeW91IHRvIGVhc2lseSBleHRlbmQKKyAgICAgICAgICAgICAgICB0aGUgc3lzdGVtLCBtYWtlIGN1c3RvbWl6YXRpb25zLCBhbmQga2VlcCB0aGVtIG9yZ2FuaXplZC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0byBnZW5lcmF0ZSBpbWFnZXMgZm9yIG1hbnkga2luZHMKKyAgICAgICAgICAgIG9mIGRldmljZXMuCisgICAgICAgICAgICBBcyBtZW50aW9uZWQgZWFybGllciwgdGhlIFlvY3RvIFByb2plY3Qgc3VwcG9ydHMgY3JlYXRpb24gb2YKKyAgICAgICAgICAgIHJlZmVyZW5jZSBpbWFnZXMgdGhhdCB5b3UgY2FuIGJvb3Qgd2l0aGluIGFuZCBlbXVsYXRlIHVzaW5nIFFFTVUuCisgICAgICAgICAgICBUaGUgc3RhbmRhcmQgZXhhbXBsZSBtYWNoaW5lcyB0YXJnZXQgUUVNVSBmdWxsLXN5c3RlbQorICAgICAgICAgICAgZW11bGF0aW9uIGZvciAzMi1iaXQgYW5kIDY0LWJpdCB2YXJpYW50cyBvZiB4ODYsIEFSTSwgTUlQUywgYW5kCisgICAgICAgICAgICBQb3dlclBDIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBCZXlvbmQgZW11bGF0aW9uLCB5b3UgY2FuIHVzZSB0aGUgbGF5ZXIgbWVjaGFuaXNtIHRvIGV4dGVuZAorICAgICAgICAgICAgc3VwcG9ydCB0byBqdXN0IGFib3V0IGFueSBwbGF0Zm9ybSB0aGF0IExpbnV4IGNhbiBydW4gb24gYW5kIHRoYXQKKyAgICAgICAgICAgIGEgdG9vbGNoYWluIGNhbiB0YXJnZXQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEFub3RoZXIgWW9jdG8gUHJvamVjdCBmZWF0dXJlIGlzIHRoZSBTYXRvIHJlZmVyZW5jZSBVc2VyCisgICAgICAgICAgICBJbnRlcmZhY2UuCisgICAgICAgICAgICBUaGlzIG9wdGlvbmFsIFVJIHRoYXQgaXMgYmFzZWQgb24gR1RLKyBpcyBpbnRlbmRlZCBmb3IgZGV2aWNlcyB3aXRoCisgICAgICAgICAgICByZXN0cmljdGVkIHNjcmVlbiBzaXplcyBhbmQgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgIE9wZW5FbWJlZGRlZCBDb3JlIGxheWVyIHNvIHRoYXQgZGV2ZWxvcGVycyBjYW4gdGVzdCBwYXJ0cyBvZiB0aGUKKyAgICAgICAgICAgIHNvZnR3YXJlIHN0YWNrLgorICAgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9J3lwLXJlc291cmNlcyc+CisgICAgICAgIDx0aXRsZT5TZXR0aW5nIFVwIHRvIFVzZSB0aGUgWW9jdG8gUHJvamVjdDwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIGxpc3Qgc2hvd3Mgd2hhdCB5b3UgbmVlZCBpbiBvcmRlciB0byB1c2UgYQorICAgICAgICAgICAgTGludXgtYmFzZWQgYnVpbGQgaG9zdCB0byB1c2UgdGhlIFlvY3RvIFByb2plY3QgdG8gYnVpbGQgaW1hZ2VzOgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QnVpbGQgSG9zdDwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgQSBidWlsZCBob3N0IHdpdGggYSBtaW5pbXVtIG9mIDUwIEdieXRlcyBvZiBmcmVlIGRpc2sKKyAgICAgICAgICAgICAgICBzcGFjZSB0aGF0IGlzIHJ1bm5pbmcgYSBzdXBwb3J0ZWQgTGludXggZGlzdHJpYnV0aW9uIChpLmUuCisgICAgICAgICAgICAgICAgcmVjZW50IHJlbGVhc2VzIG9mIEZlZG9yYSwgb3BlblNVU0UsIENlbnRPUywgRGViaWFuLCBvcgorICAgICAgICAgICAgICAgIFVidW50dSkuCisgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkJ1aWxkIEhvc3QgUGFja2FnZXM8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEFwcHJvcHJpYXRlIHBhY2thZ2VzIGluc3RhbGxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VGhlIFlvY3RvIFByb2plY3Q8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgIEEgcmVsZWFzZSBvZiB0aGUgWW9jdG8gUHJvamVjdC4KKyAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisKKyAgICAgICAgPHNlY3Rpb24gaWQ9J3RoZS1saW51eC1kaXN0cm8nPgorICAgICAgICAgICAgPHRpdGxlPlRoZSBMaW51eCBEaXN0cmlidXRpb248L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgWW9jdG8gUHJvamVjdCB0ZWFtIHZlcmlmaWVzIGVhY2ggcmVsZWFzZSBhZ2FpbnN0IHJlY2VudAorICAgICAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBtb3N0IHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyB0aGF0CisgICAgICAgICAgICAgICAgcHJvdmlkZSBzdGFibGUgcmVsZWFzZXMuCisgICAgICAgICAgICAgICAgSW4gZ2VuZXJhbCwgaWYgeW91IGhhdmUgdGhlIGN1cnJlbnQgcmVsZWFzZSBtaW51cyBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgZm9sbG93aW5nIGRpc3RyaWJ1dGlvbnMsIHlvdSBzaG91bGQgaGF2ZSBubyBwcm9ibGVtcy4KKyAgICAgICAgICAgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBVYnVudHUKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBGZWRvcmEKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVuU1VTRQorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIENlbnRPUworICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIERlYmlhbgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgRm9yIGEgbW9yZSBkZXRhaWxlZCBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgdGhhdCBzdXBwb3J0IHRoZQorICAgICAgICAgICAgICAgIFlvY3RvIFByb2plY3QsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfUkVGX1VSTDsjZGV0YWlsZWQtc3VwcG9ydGVkLWRpc3Ryb3MnPlN1cHBvcnRlZCBMaW51eCBEaXN0cmlidXRpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBydW4gb24gYW55CisgICAgICAgICAgICAgICAgbW9kZXJuIGRpc3RyaWJ1dGlvbiB0aGF0IGhhcyB0aGUgZm9sbG93aW5nIHZlcnNpb25zIGZvcgorICAgICAgICAgICAgICAgIEdpdCwgdGFyLCBhbmQgUHl0aG9uLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdpdCAxLjcuOCBvciBncmVhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyIDEuMjQgb3IgZ3JlYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiAyLjcuMyBvciBncmVhdGVyIGV4Y2x1ZGluZyBQeXRob24KKyAgICAgICAgICAgICAgICAgICAgICAgIDMueCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgorICAgICAgICAgICAgICAgIElmIHlvdXIgYnVpbGQgaG9zdCBkb2VzIG5vdCBtZWV0IGFueSBvZiB0aGVzZSB0aHJlZSBsaXN0ZWQKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIHJlcXVpcmVtZW50cywgeW91IGNhbiB0YWtlIHN0ZXBzIHRvIHByZXBhcmUgdGhlCisgICAgICAgICAgICAgICAgc3lzdGVtIHNvIHRoYXQgeW91IGNhbiBzdGlsbCB1c2UgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgU2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1naXQtdGFyLWFuZC1weXRob24tdmVyc2lvbnMnPlJlcXVpcmVkIEdpdCwgdGFyLCBhbmQgUHl0aG9uIFZlcnNpb25zPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsIGZvciBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdwYWNrYWdlcyc+CisgICAgICAgICAgICA8dGl0bGU+VGhlIEJ1aWxkIEhvc3QgUGFja2FnZXM8L3RpdGxlPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBSZXF1aXJlZCBidWlsZCBob3N0IHBhY2thZ2VzIHZhcnkgZGVwZW5kaW5nIG9uIHlvdXIKKyAgICAgICAgICAgICAgICBidWlsZCBtYWNoaW5lIGFuZCB3aGF0IHlvdSB3YW50IHRvIGRvIHdpdGggdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGFuIGltYWdlIHRoYXQgY2FuIHJ1bgorICAgICAgICAgICAgICAgIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGEgbWluaW1hbCwgYmFzaWMgYnVpbGQKKyAgICAgICAgICAgICAgICByZXF1aXJlbWVudCksIHRoZW4gdGhlIGJ1aWxkIGhvc3QgcGFja2FnZSByZXF1aXJlbWVudHMKKyAgICAgICAgICAgICAgICBhcmUgZGlmZmVyZW50IHRoYW4gaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gaW1hZ2Ugb24gYSBoZWFkbGVzcworICAgICAgICAgICAgICAgIHN5c3RlbSBvciBidWlsZCBvdXQgdGhlIFlvY3RvIFByb2plY3QgZG9jdW1lbnRhdGlvbiBzZXQuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIENvbGxlY3RpdmVseSwgdGhlIG51bWJlciBvZiByZXF1aXJlZCBwYWNrYWdlcyBpcyBsYXJnZQorICAgICAgICAgICAgICAgIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY292ZXIgYWxsIGNhc2VzLgorICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICBJbiBnZW5lcmFsLCB5b3UgbmVlZCB0byBoYXZlIHJvb3QgYWNjZXNzIGFuZCB0aGVuIGluc3RhbGwKKyAgICAgICAgICAgICAgICAgICAgdGhlIHJlcXVpcmVkIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICBUaHVzLCB0aGUgY29tbWFuZHMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uIG1heSBvciBtYXkKKyAgICAgICAgICAgICAgICAgICAgbm90IHdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHlvdXIgTGludXgKKyAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9uIGhhcyA8ZmlsZW5hbWU+c3VkbzwvZmlsZW5hbWU+IGluc3RhbGxlZC4KKyAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgcmVxdWlyZWQgcGFja2FnZXMgbmVlZGVkIHRvIGJ1aWxkCisgICAgICAgICAgICAgICAgYW4gaW1hZ2UgdGhhdCBydW5zIG9uIFFFTVUgaW4gZ3JhcGhpY2FsIG1vZGUgKGUuZy4gZXNzZW50aWFsCisgICAgICAgICAgICAgICAgcGx1cyBncmFwaGljcyBzdXBwb3J0KS4KKyAgICAgICAgICAgICAgICBGb3IgbGlzdHMgb2YgcmVxdWlyZWQgcGFja2FnZXMgZm9yIG90aGVyIHNjZW5hcmlvcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZXF1aXJlZC1wYWNrYWdlcy1mb3ItdGhlLWhvc3QtZGV2ZWxvcG1lbnQtc3lzdGVtJz5SZXF1aXJlZCBQYWNrYWdlcyBmb3IgdGhlIEhvc3QgRGV2ZWxvcG1lbnQgU3lzdGVtPC91bGluaz4iCisgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+VWJ1bnR1IGFuZCBEZWJpYW48L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8gYXB0LWdldCBpbnN0YWxsICZVQlVOVFVfSE9TVF9QQUNLQUdFU19FU1NFTlRJQUw7IGxpYnNkbDEuMi1kZXYgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkZlZG9yYTwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyB5dW0gaW5zdGFsbCAmRkVET1JBX0hPU1RfUEFDS0FHRVNfRVNTRU5USUFMOyBTREwtZGV2ZWwgeHRlcm0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPk9wZW5TVVNFPC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBzdWRvIHp5cHBlciBpbnN0YWxsICZPUEVOU1VTRV9IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgbGliU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DZW50T1M8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHN1ZG8geXVtIGluc3RhbGwgJkNFTlRPU19IT1NUX1BBQ0tBR0VTX0VTU0VOVElBTDsgU0RMLWRldmVsIHh0ZXJtCisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZW50T1MgNi54IHVzZXJzIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbnMgb2YgR2l0LCB0YXIgYW5kIFB5dGhvbiBhcmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBkZXRhaWxzLCBTZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3JlcXVpcmVkLWdpdC10YXItYW5kLXB5dGhvbi12ZXJzaW9ucyc+UmVxdWlyZWQgR2l0LCB0YXIsIGFuZCBQeXRob24gVmVyc2lvbnM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWwgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICA8L25vdGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorCisgICAgICAgIDxzZWN0aW9uIGlkPSdyZWxlYXNlcyc+CisgICAgICAgICAgICA8dGl0bGU+WW9jdG8gUHJvamVjdCBSZWxlYXNlPC90aXRsZT4KKworICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgVGhlIGxhc3QgcmVxdWlyZW1lbnQgeW91IG5lZWQgdG8gbWVldCBiZWZvcmUgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpcyBnZXR0aW5nIGEgWW9jdG8gUHJvamVjdCByZWxlYXNlLgorICAgICAgICAgICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGdldCB0aGUgbGF0ZXN0IFlvY3RvIFByb2plY3QgcmVsZWFzZQorICAgICAgICAgICAgICAgIGJ5IHNldHRpbmcgdXAgKGNsb25pbmcgaW4KKyAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNnaXQnPkdpdDwvdWxpbms+IHRlcm1zKSBhCisgICAgICAgICAgICAgICAgbG9jYWwgY29weSBvZiB0aGUgPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPiBHaXQgcmVwb3NpdG9yeSBvbgorICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQgaG9zdCBhbmQgdGhlbiBjaGVja2luZyBvdXQgdGhlIGxhdGVzdCByZWxlYXNlLgorICAgICAgICAgICAgICAgIERvaW5nIHNvIGFsbG93cyB5b3UgdG8gZWFzaWx5IHVwZGF0ZSB0byBuZXdlciBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZXMgYXMgd2VsbCBhcyBjb250cmlidXRlIGJhY2sgdG8gdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBmcm9tIGFuIFVidW50dSBidWlsZCBob3N0IHRoYXQgY2xvbmVzIHRoZQorICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4gcmVwb3NpdG9yeSBhbmQgdGhlbiBjaGVja3Mgb3V0IHRoZQorICAgICAgICAgICAgICAgIGxhdGVzdCBZb2N0byBQcm9qZWN0IFJlbGVhc2UgKGkuZS4gJkRJU1RSTzspOgorICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reQorICAgICBDbG9uaW5nIGludG8gJ3Bva3knLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMjI2NzkwLCBkb25lLgorICAgICByZW1vdGU6IENvbXByZXNzaW5nIG9iamVjdHM6IDEwMCUgKDU3NDY1LzU3NDY1KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAyMjY3OTAgKGRlbHRhIDE2NTIxMiksIHJldXNlZCAyMjU4ODcgKGRlbHRhIDE2NDMyNykKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDIyNjc5MC8yMjY3OTApLCAxMDAuOTggTWlCIHwgMjYzIEtpQi9zLCBkb25lLgorICAgICBSZXNvbHZpbmcgZGVsdGFzOiAxMDAlICgxNjUyMTIvMTY1MjEyKSwgZG9uZS4KKyAgICAgJCBnaXQgY2hlY2tvdXQgJkRJU1RST19OQU1FOworICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIGFsc28gZ2V0IHRoZSBZb2N0byBQcm9qZWN0IEZpbGVzIGJ5IGRvd25sb2FkaW5nCisgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCByZWxlYXNlcyBmcm9tIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9IiZZT0NUT19IT01FX1VSTDsiPllvY3RvIFByb2plY3Qgd2Vic2l0ZTwvdWxpbms+LgorICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBnZXR0aW5nIHNldCB1cCB3aXRoIHRoZSBZb2N0byBQcm9qZWN0CisgICAgICAgICAgICAgICAgcmVsZWFzZSwgc2VlIHRoZQorICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNsb2NhbC15cC1yZWxlYXNlJz5Zb2N0byBQcm9qZWN0IFJlbGVhc2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICBpdGVtIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSdxcy1idWlsZGluZy1pbWFnZXMnPgorICAgICAgICA8dGl0bGU+QnVpbGRpbmcgSW1hZ2VzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE5vdyB0aGF0IHlvdSBoYXZlIHlvdXIgc3lzdGVtIHJlcXVpcmVtZW50cyBpbiBvcmRlciwgeW91IGNhbiBnaXZlCisgICAgICAgICAgICB0aGUgWW9jdG8gUHJvamVjdCBhIHRyeS4KKyAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcmVzZW50cyBzdGVwcyB0aGF0IGxldCB5b3UgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgICAgICAgICAgICBCdWlsZCBhIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4gcmVmZXJlbmNlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gaXQgaW4gdGhlIFFFTVUgZW11bGF0b3IuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgRWFzaWx5IGNoYW5nZSBjb25maWd1cmF0aW9ucyBzbyB0aGF0IHlvdSBjYW4gcXVpY2tseQorICAgICAgICAgICAgICAgICAgICBjcmVhdGUgYSBzZWNvbmQgaW1hZ2UsIHdoaWNoIHdvdWxkIGJlIGZvciBNaW5ub3dCb2FyZAorICAgICAgICAgICAgICAgICAgICBNQVgtY29tcGF0aWJsZSBib2FyZHMuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICAgICAgICA8bm90ZT4KKyAgICAgICAgICAgICAgICBUaGUgc3RlcHMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBwcm92aWRlIGRldGFpbCwgYnV0IHJhdGhlcgorICAgICAgICAgICAgICAgIHByb3ZpZGUgbWluaW1hbCwgd29ya2luZyBjb21tYW5kcyBhbmQgZXhhbXBsZXMgZGVzaWduZWQgdG8KKyAgICAgICAgICAgICAgICBqdXN0IGdldCB5b3Ugc3RhcnRlZC4KKyAgICAgICAgICAgICAgICBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIGFwcHJvcHJpYXRlIG1hbnVhbHMgaW4gdGhlCisgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOy9kb2N1bWVudGF0aW9uJz5Zb2N0byBQcm9qZWN0IG1hbnVhbCBzZXQ8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgVXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gYnVpbGQgeW91ciBpbWFnZS4KKyAgICAgICAgICAgIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNyZWF0ZXMgYW4gZW50aXJlIExpbnV4CisgICAgICAgICAgICBkaXN0cmlidXRpb24sIGluY2x1ZGluZyB0aGUgdG9vbGNoYWluLCBmcm9tIHNvdXJjZS4KKyAgICAgICAgICAgIDxub3RlPjx0aXRsZT5Ob3RlIGFib3V0IE5ldHdvcmsgUHJveGllczwvdGl0bGU+CisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCBwcm9jZXNzIHNlYXJjaGVzIGZvciBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICB1c2luZyBhIHByZS1kZXRlcm1pbmVkIG9yZGVyIHRocm91Z2ggYSBzZXQgb2YKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIHdvcmtpbmcgYmVoaW5kIGEgZmlyZXdhbGwgYW5kIHlvdXIgYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgaG9zdCBpcyBub3Qgc2V0IHVwIGZvciBwcm94aWVzLCB5b3UgY291bGQgZW5jb3VudGVyCisgICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIHdpdGggdGhlIGJ1aWxkIHByb2Nlc3Mgd2hlbiBmZXRjaGluZyBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZSAoZS5nLiBmZXRjaGVyIGZhaWx1cmVzIG9yIEdpdCBmYWlsdXJlcykuCisgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBkbyBub3Qga25vdyB5b3VyIHByb3h5IHNldHRpbmdzLCBjb25zdWx0IHlvdXIKKyAgICAgICAgICAgICAgICAgICAgbG9jYWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSByZXNvdXJjZXMgYW5kIGdldCB0aGF0CisgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgY291bGQgYWxzbyBiZSB0byBjaGVjayB5b3VyIHdlYgorICAgICAgICAgICAgICAgICAgICBicm93c2VyIHNldHRpbmdzLgorICAgICAgICAgICAgICAgICAgICBGaW5hbGx5LCB5b3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBiZWhpbmQgYSBmaXJld2FsbCBpbiB0aGUgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgTWFudWFsCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I2hvdy1kb2VzLXRoZS15b2N0by1wcm9qZWN0LW9idGFpbi1zb3VyY2UtY29kZS1hbmQtd2lsbC1pdC13b3JrLWJlaGluZC1teS1maXJld2FsbC1vci1wcm94eS1zZXJ2ZXInPkZBUTwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIGFuZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9J2h0dHBzOi8vd2lraS55b2N0b3Byb2plY3Qub3JnL3dpa2kvV29ya2luZ19CZWhpbmRfYV9OZXR3b3JrX1Byb3h5Jz5Xb3JraW5nIEJlaGluZCBhIE5ldHdvcmsgUHJveHk8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgd2lraSBwYWdlLgorICAgICAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+QmUgU3VyZSBZb3VyIEJ1aWxkIEhvc3QgaXMgU2V0IFVwOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFRoZSBzdGVwcyB0byBidWlsZCBhbiBpbWFnZSBpbiB0aGlzIHNlY3Rpb24gZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgICAgIHlvdXIgYnVpbGQgaG9zdCBiZWluZyBwcm9wZXJseSBzZXQgdXAuCisgICAgICAgICAgICAgICAgICAgIEJlIHN1cmUgeW91IGhhdmUgd29ya2VkIHRocm91Z2ggdGhlIHJlcXVpcmVtZW50cworICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICI8bGluayBsaW5rZW5kPSd5cC1yZXNvdXJjZXMnPlNldHRpbmcgVXAgdG8gVXNlIHRoZSBZb2N0byBQcm9qZWN0PC9saW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5DaGVjayBPdXQgWW91ciBCcmFuY2g6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQmUgc3VyZSB5b3UgYXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNzb3VyY2UtZGlyZWN0b3J5Jz5Tb3VyY2UgRGlyZWN0b3J5PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgKGUuZy4gPGZpbGVuYW1lPnBva3k8L2ZpbGVuYW1lPikgYW5kIHRoZW4gY2hlY2sgb3V0CisgICAgICAgICAgICAgICAgICAgIHRoZSBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXRlc3QgWW9jdG8gUHJvamVjdAorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgY2Qgfi9wb2t5CisgICAgICQgZ2l0IGNoZWNrb3V0IC1iICZESVNUUk9fTkFNRTsgb3JpZ2luLyZESVNUUk9fTkFNRTsKKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBHaXQncyA8ZmlsZW5hbWU+Y2hlY2tvdXQ8L2ZpbGVuYW1lPiBjb21tYW5kIGNoZWNrcyBvdXQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgWW9jdG8gUHJvamVjdCByZWxlYXNlIGludG8gYSBsb2NhbCBicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hvc2UgbmFtZSBtYXRjaGVzIHRoZSByZWxlYXNlIChpLmUuCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4mRElTVFJPX05BTUU7PC9maWxlbmFtZT4pLgorICAgICAgICAgICAgICAgICAgICBUaGUgbG9jYWwgYnJhbmNoIHRyYWNrcyB0aGUgdXBzdHJlYW0gYnJhbmNoIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICBzYW1lIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIENyZWF0aW5nIHlvdXIgb3duIGJyYW5jaCBiYXNlZCBvbiB0aGUgcmVsZWFzZWQKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoIGVuc3VyZXMgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGZpbGVzIGZvcgorICAgICAgICAgICAgICAgICAgICB0aGF0IHJlbGVhc2UuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+SW5pdGlhbGl6ZSB0aGUgQnVpbGQgRW52aXJvbm1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgUnVuIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNzdHJ1Y3R1cmUtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT4mT0VfSU5JVF9GSUxFOzwvZmlsZW5hbWU+PC91bGluaz4KKyAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IHRvIGRlZmluZSB0aGUgT3BlbkVtYmVkZGVkCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGVudmlyb25tZW50IG9uIHlvdXIgYnVpbGQgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIHNvdXJjZSAmT0VfSU5JVF9GSUxFOworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIEFtb25nIG90aGVyIHRoaW5ncywgdGhlIHNjcmlwdCBjcmVhdGVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNidWlsZC1kaXJlY3RvcnknPkJ1aWxkIERpcmVjdG9yeTwvdWxpbms+LAorICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyA8ZmlsZW5hbWU+YnVpbGQ8L2ZpbGVuYW1lPiBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgYW5kIGlzIGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX0RFVl9VUkw7I3NvdXJjZS1kaXJlY3RvcnknPlNvdXJjZSBEaXJlY3Rvcnk8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgQWZ0ZXIgdGhlIHNjcmlwdCBydW5zLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIHRoZSBCdWlsZCBEaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIExhdGVyLCB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMsIHRoZSBCdWlsZCBEaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgYWxsIHRoZSBmaWxlcyBjcmVhdGVkIGR1cmluZyB0aGUgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgYSBtZW1vcnktcmVzaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzaW5ncG9reS1jb21wb25lbnRzLWJpdGJha2UnPkJpdEJha2U8L3VsaW5rPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3N0cnVjdHVyZS1tZW1yZXMtY29yZS1zY3JpcHQnPjxmaWxlbmFtZT5vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXM8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cCBzY3JpcHQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGFtaW5lIFlvdXIgTG9jYWwgQ29uZmlndXJhdGlvbiBGaWxlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFdoZW4geW91IHNldCB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIGEgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5sb2NhbC5jb25mPC9maWxlbmFtZT4gYmVjb21lcyBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgICAgICAgICAgYSA8ZmlsZW5hbWU+Y29uZjwvZmlsZW5hbWU+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQgRGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgICBCZWZvcmUgdXNpbmcgQml0QmFrZSB0byBzdGFydCB0aGUgYnVpbGQsIHlvdSBjYW4KKyAgICAgICAgICAgICAgICAgICAgbG9vayBhdCB0aGlzIGZpbGUgYW5kIGJlIHN1cmUgeW91ciBnZW5lcmFsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGFyZSBob3cgeW91IHdhbnQgdGhlbToKKyAgICAgICAgICAgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBoZWxwIGNvbnNlcnZlIGRpc2sgc3BhY2UgZHVyaW5nIGJ1aWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCB0byB5b3VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdCdzIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPnBva3kvYnVpbGQvY29uZi9sb2NhbC5jb25mPC9maWxlbmFtZT4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaW5nIHRoaXMgc3RhdGVtZW50IGRlbGV0ZXMgdGhlIHdvcmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgdXNlZCBmb3IgYnVpbGRpbmcgYSByZWNpcGUgb25jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNpcGUgaXMgYnVpbHQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBJTkhFUklUICs9ICJybV93b3JrIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCB0aGUgdGFyZ2V0IG1hY2hpbmUgZm9yIHRoZSBidWlsZCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5xZW11eDg2PC9maWxlbmFtZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggcHJvZHVjZXMgYW4gaW1hZ2UgdGhhdCBjYW4gYmUgdXNlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBRRU1VIGVtdWxhdG9yIGFuZCBpcyB0YXJnZXRlZCBhdCBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFkZW1hcmsgY2xhc3M9J3JlZ2lzdGVyZWQnPkludGVsPC90cmFkZW1hcms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IGJhc2VkIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXJ0aGVyIG9uIGluIHRoaXMgZXhhbXBsZSwgdGhpcyBkZWZhdWx0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzaWx5IGNoYW5nZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBhbiBpbWFnZSBmb3IgYSBkaWZmZXJlbnQgbWFjaGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbm90aGVyIGNvbnNpZGVyYXRpb24gYmVmb3JlIHlvdSBidWlsZCBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG1hbmFnZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCA8ZmlsZW5hbWU+bG9jYWwuY29uZjwvZmlsZW5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBzZWxlY3RzIHRoZSBSUE0gcGFja2FnZSBtYW5hZ2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gY29udHJvbCB0aGlzIGNvbmZpZ3VyYXRpb24gYnkgdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3Zhci1QQUNLQUdFX0NMQVNTRVMnPjxmaWxlbmFtZT5QQUNLQUdFX0NMQVNTRVM8L2ZpbGVuYW1lPjwvdWxpbms+PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS48L3BhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmE+U2VsZWN0aW9uIG9mIHRoZSBwYWNrYWdlIG1hbmFnZXIgaXMgc2VwYXJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHdoZXRoZXIgcGFja2FnZSBtYW5hZ2VtZW50IGlzIHVzZWQgYXQgcnVudGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSB0YXJnZXQgaW1hZ2UuPC9wYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhPkZvciBhZGRpdGlvbmFsIHBhY2thZ2UgbWFuYWdlciBzZWxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtY2xhc3Nlcy1wYWNrYWdlJz48ZmlsZW5hbWU+cGFja2FnZSouYmJjbGFzczwvZmlsZW5hbWU+PC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5TdGFydCB0aGUgQnVpbGQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgQ29udGludWUgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYnVpbGQgYW4gT1MgaW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSB0YXJnZXQsIHdoaWNoIGlzCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT5jb3JlLWltYWdlLXNhdG88L2ZpbGVuYW1lPiBpbiB0aGlzIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycyBhbmQgY29yZXMsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50IG9mIFJBTSwgdGhlIHNwZWVkIG9mIHlvdXIgSW50ZXJuZXQgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIGZhY3RvcnMsIHRoZSBidWlsZCBwcm9jZXNzIGNvdWxkIHRha2Ugc2V2ZXJhbAorICAgICAgICAgICAgICAgICAgICAgICAgaG91cnMgdGhlIGZpcnN0IHRpbWUgeW91IHJ1biBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgYnVpbGRzIHJ1biBtdWNoIGZhc3RlciBzaW5jZSBwYXJ0cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIGFyZSBjYWNoZWQuCisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZTwvZmlsZW5hbWU+IGNvbW1hbmQsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9JyZZT0NUT19ET0NTX1JFRl9VUkw7I3VzaW5ncG9reS1jb21wb25lbnRzLWJpdGJha2UnPkJpdEJha2U8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLCBvciBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CQl9VUkw7I2JpdGJha2UtdXNlci1tYW51YWwtY29tbWFuZCc+Qml0QmFrZSBDb21tYW5kPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIEJpdEJha2UgVXNlciBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIEZvciBpbmZvcm1hdGlvbiBvbiBvdGhlciB0YXJnZXRzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtaW1hZ2VzJz5JbWFnZXM8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBpbiB0aGUgWW9jdG8gUHJvamVjdCBSZWZlcmVuY2UgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPlNpbXVsYXRlIFlvdXIgSW1hZ2UgVXNpbmcgUUVNVTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBPbmNlIHRoaXMgcGFydGljdWxhciBpbWFnZSBpcyBidWlsdCwgeW91IGNhbiBzdGFydCBRRU1VCisgICAgICAgICAgICAgICAgICAgIGFuZCBydW4gdGhlIGltYWdlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgcnVucWVtdSBxZW11eDg2CisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbGVhcm4gbW9yZSBhYm91dCBydW5uaW5nIFFFTVUsIHNlZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIjx1bGluayB1cmw9IiZZT0NUT19ET0NTX0RFVl9VUkw7I2Rldi1tYW51YWwtcWVtdSI+VXNpbmcgdGhlIFF1aWNrIEVNVWxhdG9yIChRRU1VKTwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBjaGFwdGVyIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbC4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeGl0IFFFTVU6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgRXhpdCBRRU1VIGJ5IGVpdGhlciBjbGlja2luZyBvbiB0aGUgc2h1dGRvd24gaWNvbiBvciBieQorICAgICAgICAgICAgICAgICAgICBvcGVuaW5nIGEgdGVybWluYWwsIHR5cGluZworICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+cG93ZXJvZmY8L2ZpbGVuYW1lPiwgYW5kIHRoZW4gcHJlc3NpbmcgIkVudGVyIi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L29yZGVyZWRsaXN0PgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHN0ZXBzIHNob3cgaG93IGVhc3kgaXQgaXMgdG8gc2V0IHVwIHRvIGJ1aWxkIGFuCisgICAgICAgICAgICBpbWFnZSBmb3IgYSBuZXcgbWFjaGluZS4KKyAgICAgICAgICAgIFRoZXNlIHN0ZXBzIGJ1aWxkIGFuIGltYWdlIGZvciB0aGUgTWlubm93Qm9hcmQgTUFYLCB3aGljaCBpcworICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBZb2N0byBQcm9qZWN0IGFuZCB0aGUKKyAgICAgICAgICAgIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4gPGZpbGVuYW1lPmludGVsLWNvcmVpNy02NDwvZmlsZW5hbWU+CisgICAgICAgICAgICBhbmQgPGZpbGVuYW1lPmludGVsLWNvcmUyLTMyPC9maWxlbmFtZT4gQm9hcmQgU3VwcG9ydCBQYWNrYWdlcworICAgICAgICAgICAgKEJTUHMpLgorICAgICAgICAgICAgPG5vdGU+CisgICAgICAgICAgICAgICAgVGhlIE1pbm5vd0JvYXJkIE1BWCBzaGlwcyB3aXRoIDY0LWJpdCBmaXJtd2FyZS4KKyAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGJvYXJkIGluIDMyLWJpdCBtb2RlLCB5b3UgbXVzdAorICAgICAgICAgICAgICAgIGRvd25sb2FkIHRoZQorICAgICAgICAgICAgICAgIDx1bGluayB1cmw9J2h0dHA6Ly9maXJtd2FyZS5pbnRlbC5jb20vcHJvamVjdHMvbWlubm93Ym9hcmQtbWF4Jz4zMi1iaXQgZmlybXdhcmU8L3VsaW5rPi4KKyAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPG9yZGVyZWRsaXN0PgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q3JlYXRlIGEgTG9jYWwgQ29weSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPm1ldGEtaW50ZWw8L2ZpbGVuYW1lPiBSZXBvc2l0b3J5OjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIEJ1aWxkaW5nIGFuIGltYWdlIGZvciB0aGUgTWlubm93Qm9hcmQgTUFYIHJlcXVpcmVzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+bWV0YS1pbnRlbDwvZmlsZW5hbWU+IGxheWVyLgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIDxmaWxlbmFtZT5naXQgY2xvbmU8L2ZpbGVuYW1lPiBjb21tYW5kIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICBhIGxvY2FsIGNvcHkgb2YgdGhlIHJlcG9zaXRvcnk6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS1pbnRlbAorICAgICBDbG9uaW5nIGludG8gJ21ldGEtaW50ZWwnLi4uCisgICAgIHJlbW90ZTogQ291bnRpbmcgb2JqZWN0czogMTA4MjQsIGRvbmUuCisgICAgIHJlbW90ZTogQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoMzUwOC8zNTA4KSwgZG9uZS4KKyAgICAgcmVtb3RlOiBUb3RhbCAxMDgyNCAoZGVsdGEgNjIxOSksIHJldXNlZCAxMDU4MCAoZGVsdGEgNTk3NSkKKyAgICAgUmVjZWl2aW5nIG9iamVjdHM6IDEwMCUgKDEwODI0LzEwODI0KSwgMi43MiBNaUIgfCA0ODIuMDAgS2lCL3MsIGRvbmUuCisgICAgIFJlc29sdmluZyBkZWx0YXM6IDEwMCUgKDYyMTkvNjIxOSksIGRvbmUuCisgICAgIENoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiBkb25lLgorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+Q29uZmlndXJlIHRoZSBCdWlsZDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUbyBjb25maWd1cmUgdGhlIGJ1aWxkLCB5b3UgZWRpdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmJibGF5ZXJzLmNvbmY8L2ZpbGVuYW1lPiBhbmQKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPmxvY2FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlcywgYm90aCBvZiB3aGljaCBhcmUKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRlZCBpbiB0aGUgPGZpbGVuYW1lPmJ1aWxkL2NvbmY8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5IZXJlIGlzIGEgcXVpY2sgd2F5IHRvIG1ha2UgdGhlIGVkaXRzLgorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgY29tbWFuZCB1c2VzIHRoZQorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+Yml0YmFrZS1sYXllcnMgYWRkLWxheWVyPC9maWxlbmFtZT4gY29tbWFuZAorICAgICAgICAgICAgICAgICAgICB0byBhZGQgdGhlIDxmaWxlbmFtZT5tZXRhLWludGVsPC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIHdoaWNoIGNvbnRhaW5zIHRoZSA8ZmlsZW5hbWU+aW50ZWwtY29yZSo8L2ZpbGVuYW1lPgorICAgICAgICAgICAgICAgICAgICBCU1BzIHRvIHRoZSBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgVGhlIHNlY29uZCBjb21tYW5kIHNlbGVjdHMgdGhlIEJTUCBieSBzZXR0aW5nIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyN2YXItTUFDSElORSc+PGZpbGVuYW1lPk1BQ0hJTkU8L2ZpbGVuYW1lPjwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICIkSE9NRS9zb3VyY2UvcG9reS9tZXRhLWludGVsIgorICAgICAkIGVjaG8gJ01BQ0hJTkUgPSAiaW50ZWwtY29yZWk3LTY0IicgPj4gY29uZi9sb2NhbC5jb25mCisgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPG5vdGU+PHRpdGxlPk5vdGVzPC90aXRsZT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBhIDY0LWJpdCBidWlsZCwgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAnTUFDSElORSA9ICJpbnRlbC1jb3JlaTctNjQiJyA+PiBjb25mL2xvY2FsLmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgMzItYml0IGltYWdlcywgdXNlIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgZWNobyAnTUFDSElORSA9ICJpbnRlbC1jb3JlMi0zMiInID4+IGNvbmYvbG9jYWwuY29uZgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICAgICAgICAgIDwvbm90ZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5CdWlsZCBhIE1pbmltYWwgSW1hZ2UgZm9yIE1pbm5vd0JvYXJkIE1BWDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIHRoZSBtaW5pbWFsIGltYWdlIGZvcgorICAgICAgICAgICAgICAgICAgICBNaW5ub3dCb2FyZCBNQVguCisgICAgICAgICAgICAgICAgICAgIEJlY2F1c2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGFyZSBtaW5pbWFsIHRvIHNldCB1cCBmb3IKKyAgICAgICAgICAgICAgICAgICAgdGhpcyBzZWNvbmQgYnVpbGQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGNhbgorICAgICAgICAgICAgICAgICAgICByZS11c2UgZmlsZXMgZnJvbSBwcmV2aW91cyBidWlsZHMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgUmUtdXNpbmcgZmlsZXMgbWVhbnMgdGhpcyBzZWNvbmQgYnVpbGQgd2lsbCBiZSBtdWNoIGZhc3RlcgorICAgICAgICAgICAgICAgICAgICB0aGFuIGFuIGluaXRpYWwgYnVpbGQuCisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIE9uY2UgdGhlIGJ1aWxkIGNvbXBsZXRlcywgdGhlIHJlc3VsdGluZyBiYXNpYyBjb25zb2xlIGltYWdlCisgICAgICAgICAgICAgICAgICAgIGlzIGxvY2F0ZWQgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeSBoZXJlOgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgIHRtcC9kZXBsb3kvaW1hZ2VzL2ludGVsLWNvcmVpNy02NC9jb3JlLWltYWdlLW1pbmltYWwtaW50ZWwtY29yZWk3LTY0LmhkZGltZworICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+V3JpdGUgdGhlIEltYWdlOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gd3JpdGUgdGhlIGltYWdlIHRvIGEgVVNCIGtleSwgU0FUQSBkcml2ZSwgb3IgU0QKKyAgICAgICAgICAgICAgICAgICAgY2FyZCBieSB1c2luZyB0aGUgPGZpbGVuYW1lPm1rZWZpZGlzay5zaDwvZmlsZW5hbWU+IHNjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgaW5jbHVkZWQgaW4gdGhlIDxmaWxlbmFtZT5wb2t5PC9maWxlbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBhdAorICAgICAgICAgICAgICAgICAgICA8ZmlsZW5hbWU+c2NyaXB0cy9jb250cmliL21rZWZpZGlzay5zaDwvZmlsZW5hbWU+OgorICAgICAgICAgICAgICAgICAgICA8bGl0ZXJhbGxheW91dCBjbGFzcz0nbW9ub3NwYWNlZCc+CisgICAgICQgc3VkbyAkSE9NRS9zb3VyY2UvcG9reS9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoIDxyZXBsYWNlYWJsZT5IT1NUX0RFVklDRTwvcmVwbGFjZWFibGU+IFwKKyAgICAgICAgdG1wL2RlcGxveS9pbWFnZXMvaW50ZWwtY29yZWk3LTY0L2NvcmUtaW1hZ2UtbWluaW1hbC1pbnRlbC1jb3JlaTctNjQuaGRkaW1nIDxyZXBsYWNlYWJsZT5UQVJHRVRfREVWSUNFPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBJbiB0aGUgcHJldmlvdXMgY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VhYmxlPkhPU1RfREVWSUNFPC9yZXBsYWNlYWJsZT4gaXMgdGhlIGRldmljZSBub2RlCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBidWlsZCBob3N0IChlLmcuIDxmaWxlbmFtZT4vZGV2L3NkYzwvZmlsZW5hbWU+IG9yCisgICAgICAgICAgICAgICAgICAgIDxmaWxlbmFtZT4vZGV2L21tY2JsazA8L2ZpbGVuYW1lPikuCisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlYWJsZT5UQVJHRVRfREVWSUNFPC9yZXBsYWNlYWJsZT4gaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIGRldmljZSBhcyB0aGUgTWlubm93Qm9hcmQgTUFYIHNlZXMgaXQgKGUuZy4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYvc2RhPC9maWxlbmFtZT4gb3IKKyAgICAgICAgICAgICAgICAgICAgPGZpbGVuYW1lPi9kZXYvbW1jYmxrMDwvZmlsZW5hbWU+KS4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5Cb290IHRoZSBIYXJkd2FyZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBXaXRoIHRoZSBib290IGRldmljZSBwcm92aXNpb25lZCwgeW91IGNhbiBpbnNlcnQgdGhlCisgICAgICAgICAgICAgICAgICAgIG1lZGlhIGludG8gdGhlIE1pbm5vd0JvYXJkIE1BWCBhbmQgYm9vdCB0aGUgaGFyZHdhcmUuCisgICAgICAgICAgICAgICAgICAgIFRoZSBib2FyZCBzaG91bGQgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIG1lZGlhIGFuZCBib290IHRvCisgICAgICAgICAgICAgICAgICAgIHRoZSBib290bG9hZGVyIGFuZCBzdWJzZXF1ZW50bHkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgICAgICAgICAgICA8cGFyYT5JZiB0aGUgYm9hcmQgZG9lcyBub3QgYm9vdCBhdXRvbWF0aWNhbGx5LCB5b3UgY2FuCisgICAgICAgICAgICAgICAgICAgIGJvb3QgaXQgbWFudWFsbHkgZnJvbSB0aGUgRUZJIHNoZWxsIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAgIDxsaXRlcmFsbGF5b3V0IGNsYXNzPSdtb25vc3BhY2VkJz4KKyAgICAgU2hlbGw+IGNvbm5lY3QgLXIKKyAgICAgU2hlbGw+IG1hcCAtcgorICAgICBTaGVsbD4gZnMwOgorICAgICBTaGVsbD4gYm9vdHg2NAorICAgICAgICAgICAgICAgICAgICA8L2xpdGVyYWxsYXlvdXQ+CisgICAgICAgICAgICAgICAgICAgIDxub3RlPgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGEgMzItYml0IGltYWdlIHVzZSB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpdGVyYWxsYXlvdXQgY2xhc3M9J21vbm9zcGFjZWQnPgorICAgICBTaGVsbD4gYm9vdGlhMzIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgICAgICAgICAgICAgPC9ub3RlPgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ncXMtbmV4dC1zdGVwcyc+CisgICAgICAgIDx0aXRsZT5OZXh0IFN0ZXBzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElmIHlvdSBjb21wbGV0ZWQgYWxsIHRoZSBzdGVwcyBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiB0aGVuCisgICAgICAgICAgICBjb25ncmF0dWxhdGlvbnMgdG8geW91IQorICAgICAgICAgICAgV2hhdCBub3c/CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIERlcGVuZGluZyBvbiB3aGF0IHlvdSBwcmltYXJ5IGludGVyZXN0cyBhcmUgd2l0aCB0aGUgWW9jdG8gUHJvamVjdCwKKyAgICAgICAgICAgIHlvdSBjb3VsZCBjb25zaWRlciBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5WaXNpdCB0aGUgWW9jdG8gUHJvamVjdCBXZWIgU2l0ZTo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBUaGUgb2ZmaWNpYWwKKyAgICAgICAgICAgICAgICAgICAgPHVsaW5rIHVybD0nJllPQ1RPX0hPTUVfVVJMOyc+WW9jdG8gUHJvamVjdDwvdWxpbms+CisgICAgICAgICAgICAgICAgICAgIHdlYiBzaXRlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBlbnRpcmUgcHJvamVjdC4KKyAgICAgICAgICAgICAgICAgICAgVmlzaXRpbmcgdGhpcyBzaXRlIGlzIGEgZ29vZCB3YXkgdG8gZmFtaWxpYXJpemUgeW91cnNlbGYKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgb3ZlcmFsbCBwcm9qZWN0LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkV4cGxvcmUgRGV2ZWxvcG1lbnQgTW9kZWxzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZGV2LW1hbnVhbC1tb2RlbCc+Q29tbW9uIERldmVsb3BtZW50IE1vZGVsczwvdWxpbms+IgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGluIHRoZSBZb2N0byBQcm9qZWN0IERldmVsb3BtZW50IE1hbnVhbAorICAgICAgICAgICAgICAgICAgICB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIHZhcmlvdXMgd2F5cyBieSB3aGljaAorICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSB0aGUgWW9jdG8gUHJvamVjdCB0byBkZXZlbG9wIHByb2plY3RzLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIFNvbWUgT3BlbiBTb3VyY2UgQmFzaWNzOjwvZW1waGFzaXM+CisgICAgICAgICAgICAgICAgICAgIElmIHlvdSBhcmUgbmV3IHRvIHRoZSBvcGVuIHNvdXJjZSBlbnZpcm9ubWVudCwgeW91IG1pZ2h0CisgICAgICAgICAgICAgICAgICAgIHJlYWQgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyNkZXYtbWFudWFsLW5ld2JpZSc+VGhlIFlvY3RvIFByb2plY3QgT3BlbiBTb3VyY2UgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQ8L3VsaW5rPiIKKyAgICAgICAgICAgICAgICAgICAgY2hhcHRlciBvZiB0aGUgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY2hhcHRlciBwcmVzZW50cyBvdmVydmlldyBtYXRlcmlhbCBmb3Igb3BlbiBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcG1lbnQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFlvY3RvIFByb2plY3QuCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVhcm4gQWJvdXQgQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQ6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91ciBwcmltYXJ5IGludGVyZXN0cyBsaWUgaW4gZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gcmVmZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19BRFRfVVJMOyNhZHQtbWFudWFsLWludHJvJz5Zb2N0byBQcm9qZWN0IEFwcGxpY2F0aW9uIERldmVsb3BlcidzIEd1aWRlPC91bGluaz4uCisgICAgICAgICAgICAgICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48ZW1waGFzaXM+TGVhcm4gQWJvdXQgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQcyk6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gbGVhcm4gYWJvdXQgQlNQcywgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19CU1BfVVJMOyNic3AnPllvY3RvIFByb2plY3QgQm9hcmQgU3VwcG9ydCBQYWNrYWdlcyAoQlNQKSBEZXZlbG9wZXIncyBHdWlkZTwvdWxpbms+LgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IFVzaW5nIEVjbGlwc2UgV2l0aCB0aGUgWW9jdG8gUHJvamVjdDo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGFuIEVjbGlwc2UgdXNlciwgeW91IGNhbiBsZWFybiBhYm91dCB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgWW9jdG8gUHJvamVjdCBpbiB0aGF0IGRldmVsb3BtZW50IGVudmlyb25tZW50IGJ5IHJlYWRpbmcKKyAgICAgICAgICAgICAgICAgICAgdGhlCisgICAgICAgICAgICAgICAgICAgICI8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19ERVZfVVJMOyN3b3JrZmxvdy11c2luZy10aGUtYWR0LWFuZC1lY2xpcHNlJz5Xb3JrZmxvdyBVc2luZyB0aGUgQURUIGFuZCBFY2xpcHNl4oSiPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gaW4gdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PGVtcGhhc2lzPkxlYXJuIEFib3V0IFRvYXN0ZXI6PC9lbXBoYXNpcz4KKyAgICAgICAgICAgICAgICAgICAgVG9hc3RlciBpcyBhIHdlYiBpbnRlcmZhY2UgdG8gdGhlIFlvY3RvIFByb2plY3QncworICAgICAgICAgICAgICAgICAgICBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgdGhpcyB0eXBlIG9mIGludGVyZmFjZSB0bworICAgICAgICAgICAgICAgICAgICBjcmVhdGUgaW1hZ2VzLCBzZWUgdGhlCisgICAgICAgICAgICAgICAgICAgIDx1bGluayB1cmw9JyZZT0NUT19ET0NTX1RPQVNUX1VSTDsjdG9hc3Rlci1tYW51YWwtaW50cm8nPlRvYXN0ZXIgVXNlciBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxlbXBoYXNpcz5FeHBsb3JlIFlvY3RvIFByb2plY3QgQ29tbW9uIFRhc2tzIGFuZCBUZWNobmljYWwgRGV0YWlsczo8L2VtcGhhc2lzPgorICAgICAgICAgICAgICAgICAgICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gYSBtaXggb2YgY29tbW9uIHRhc2tzIHRoYXQgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICBkbyB3aXRoIHByb2plY3QgZGV2ZWxvcCB1c2luZyB0aGUgWW9jdG8gUHJvamVjdCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICAiPHVsaW5rIHVybD0nJllPQ1RPX0RPQ1NfREVWX1VSTDsjZXh0ZW5kcG9reSc+Q29tbW9uIFRhc2tzPC91bGluaz4iCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24gb2YgdGhlIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCBtb3JlIGRldGFpbCwgc2VlIHRoZQorICAgICAgICAgICAgICAgICAgICA8dWxpbmsgdXJsPScmWU9DVE9fRE9DU19SRUZfVVJMOyNyZWYtbWFudWFsLWludHJvJz5Zb2N0byBQcm9qZWN0IFJlZmVyZW5jZSBNYW51YWw8L3VsaW5rPi4KKyAgICAgICAgICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKzwvYXJ0aWNsZT4KKzwhLS0KK3ZpbTogZXhwYW5kdGFiIHR3PTgwIHRzPTQKKy0tPgpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9DT1BZSU5HLk1JVCBiL21ldGEtc2VsZnRlc3QvQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkZTM1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L1JFQURNRSBiL21ldGEtc2VsZnRlc3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTZmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L1JFQURNRQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgbGF5ZXIgaXMgaW50ZW5kZWQgYXMgdGVzdCBsYXllciwgdXNlZCBieSBzY3JpcHRzL29lLXNlbGZ0ZXN0CithbmQgaXQncyBwcm9iYWJseSBhIG1pc3Rha2UgdG8gaW5jbHVkZSBpdCBpbiB5b3VyIGJ1aWxkcyAodW5sZXNzIHlvdQord2FudCB0byBydW4gdGhlIHNjcmlwdCkuCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L2NsYXNzZXMvdGVzdF9ldmVudHMuYmJjbGFzcyBiL21ldGEtc2VsZnRlc3QvY2xhc3Nlcy90ZXN0X2V2ZW50cy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzI0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L2NsYXNzZXMvdGVzdF9ldmVudHMuYmJjbGFzcwpAQCAtMCwwICsxLDE2IEBACitweXRob24gdGVzdDFfZXZlbnRoYW5kbGVyKCkgeworICAgIGJiLm5vdGUoIlRlc3QgZm9yIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIpCit9CitweXRob24gdGVzdDJfZXZlbnRoYW5kbGVyKCkgeworICAgIGJiLm5vdGUoIlRlc3QgZm9yIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIikKK30KK3B5dGhvbiB0ZXN0M19ldmVudGhhbmRsZXIoKSB7CisgICAgYmIubm90ZSgiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50IikKK30KKworYWRkaGFuZGxlciB0ZXN0MV9ldmVudGhhbmRsZXIKK3Rlc3QxX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK2FkZGhhbmRsZXIgdGVzdDJfZXZlbnRoYW5kbGVyCit0ZXN0Ml9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK2FkZGhhbmRsZXIgdGVzdDNfZXZlbnRoYW5kbGVyCit0ZXN0M19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5JbnZhbGlkRXZlbnQiCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZiBiL21ldGEtc2VsZnRlc3QvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NDdiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDEwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKwkke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInNlbGZ0ZXN0IgorQkJGSUxFX1BBVFRFUk5fc2VsZnRlc3QgPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9zZWxmdGVzdCA9ICI1IgpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjAuMC4xLmJiIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjAuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTBhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuMC4wLjEuYmIKQEAgLTAsMCArMSwzMCBAQAorIyBUaGlzIHJlY2lwZSBpcyBhIGNvcHkgZnJvbSB0aGUgb2UtY29yZSBvbmUuCisjIEl0IGhhcyBhIGxvd2VyIGFuZCBpbnZhbGlkIHZlcnNpb24gbnVtYmVyIGluIG9yZGVyIG5vdCB0byBiZSBhY2NpZGVudGFsbHkgdXNlZCBieSBiaXRiYWtlLgorIyBJdCBpcyB1c2VkIGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgb3ZlcmxheWVkIHJlY2lwZSBmaWxlcy4KKworU1VNTUFSWSA9ICJHTlUgQXNwZWxsIHNwZWxsLWNoZWNrZXIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyIHwgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hc3BlbGwvYXNwZWxsLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNjZhOWM5YWY2YTYwZGM0NjEzNGZkYWNmNmNlOTdkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNTI1ODNhODNhNjM2MzM3MDFjNWY3MWRiM2RjNDBhYWI4N2I3Zjc2YjI5NzIzYWViMjc5NDFlZmY0MmRmNmUxIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMiCisKK1BBQ0tBR0VTICs9ICJsaWJhc3BlbGwgbGlicHNwZWxsIGxpYnBzcGVsbC1kZXYgYXNwZWxsLXV0aWxzIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hc3BlbGwtMC42MC8uZGVidSoiCitGSUxFU19saWJhc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYmFzcGVsbC5zby4qICR7bGliZGlyfS9hc3BlbGwqIgorRklMRVNfYXNwZWxsLXV0aWxzID0gIiR7YmluZGlyfS93b3JkLWxpc3QtY29tcHJlc3MgJHtiaW5kaXJ9L2FzcGVsbC1pbXBvcnQgJHtiaW5kaXJ9L3J1bi13aXRoLWFzcGVsbCAke2JpbmRpcn0vcHJlKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hc3BlbGwiCitGSUxFU19saWJwc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYnBzcGVsbC5zby4qIgorRklMRVNfbGlicHNwZWxsLWRldiA9ICIke2xpYmRpcn0vbGlicHNwZWxsKiAke2JpbmRpcn0vcHNwZWxsLWNvbmZpZyAke2luY2x1ZGVkaXJ9L3BzcGVsbCIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiYXBwZW5kIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU3MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvYXNwZWxsL2FzcGVsbF8wLjYwLjYuMS5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBiYmFwcGVuZCBpcyB1c2VkIHRvIGFsdGVyIHRoZSByZWNpcGUgdXNpbmcgdGhlIHRlc3RfcmVjaXBlLmluYyBmaWxlIGNyZWF0ZWQgYnkgdGVzdHMuCitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGVfMC4xLmJiIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9kZXZ0b29sLXVwZ3JhZGVfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZmZjODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2RldnRvb2wtdXBncmFkZV8wLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorIworIyBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSB0aGUgJ0hlbGxvIFdvcmxkIScgZXhhbXBsZSByZWNpcGUgaW4gdGhlCisjIFlvY3RvIFByb2plY3QgRGV2ZWxvcG1lbnQgTWFudWFsLgorIworCitERVNDUklQVElPTiA9ICJTaW1wbGUgaGVsbG93b3JsZCBhcHBsaWNhdGlvbiB1c2VkIHRvIHRlc3QgdGhlIGRldnRvb2wgdXBncmFkZSBmZWF0dXJlIgorU0VDVElPTiA9ICJkZXZ0b29sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKK1BSID0gInIwIgorCitTUkNfVVJJID0gImZpbGU6Ly8ke1RISVNESVJ9L2ZpbGVzLyR7UH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaCBcCisgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9LyR7UH0iCisKK2RvX2NvbXBpbGUoKSB7CisJICAgICAke0NDfSBoZWxsb3dvcmxkLmMgLW8gaGVsbG93b3JsZAorfQorCitkb19pbnN0YWxsKCkgeworCSAgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJICAgICBpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaCBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2RldnRvb2wvZmlsZXMvMDAwMS1oZWxsb3dvcmQuYy1leGl0LXdpdGgtRVhJVF9TVUNDRVNTLWluc3RlYWQtb2YtYS1tYWdpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTRhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzLzAwMDEtaGVsbG93b3JkLmMtZXhpdC13aXRoLUVYSVRfU1VDQ0VTUy1pbnN0ZWFkLW9mLWEtbWFnaS5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIDBmMzdhZmZiYzZlNmM3MTY4NzMwMWQ5OWQ3MjU5ZjE5NjhlNTdjNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxMjo0MjoyMyArMDAwMAorU3ViamVjdDogW1BBVENIXSBoZWxsb3dvcmQuYzogZXhpdCB3aXRoIEVYSVRfU1VDQ0VTUyBpbnN0ZWFkIG9mIGEgbWFnaWMgbnVtYmVyCisKKy0tLQorIGhlbGxvd29ybGQuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaGVsbG93b3JsZC5jIGIvaGVsbG93b3JsZC5jCitpbmRleCA3MWYyZTQ2Li41NGJmNTBiIDEwMDY0NAorLS0tIGEvaGVsbG93b3JsZC5jCisrKysgYi9oZWxsb3dvcmxkLmMKK0BAIC0xLDggKzEsOSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgeworICAgICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7CisgCistICAgIHJldHVybiAwOworKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworIH0KKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjEudGFyLmd6IGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy9kZXZ0b29sLXVwZ3JhZGUtMC4xLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmExYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy9kZXZ0b29sLXVwZ3JhZGUtMC4xLnRhci5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9kZXZ0b29sL2ZpbGVzL2RldnRvb2wtdXBncmFkZS0wLjIudGFyLmd6IGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy9kZXZ0b29sLXVwZ3JhZGUtMC4yLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBkY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZGV2dG9vbC9maWxlcy9kZXZ0b29sLXVwZ3JhZGUtMC4yLnRhci5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9lbXB0eXRlc3QvZW1wdHl0ZXN0LmJiIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZW1wdHl0ZXN0L2VtcHR5dGVzdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdmNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvZW1wdHl0ZXN0L2VtcHR5dGVzdC5iYgpAQCAtMCwwICsxLDUgQEAKK2luY2x1ZGUgdGVzdF9yZWNpcGUuaW5jCisKKyMgU2V0IExJQ0VOU0UgdG8gc29tZXRoaW5nIHNvIHRoYXQgYml0YmFrZSAtcCB0aGF0IGlzIHJhbiBhdCB0aGUgYmVnaW5uaW5nCisjIGlzIHN1Y2Nlc3NmdWwgc2luY2UgdGVzdF9yZWNpcGUuaW5jIGhhcyBub3QgeWV0IGJlZW4gbW9kaWZpZWQuCitMSUNFTlNFID0gIiIKZGlmZiAtLWdpdCBhL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy9vZS1zZWxmdGVzdC1pbWFnZS5iYiBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy9vZS1zZWxmdGVzdC1pbWFnZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTcwOTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL29lLXNlbGZ0ZXN0LWltYWdlLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJBbiBpbWFnZSB1c2VkIGR1cmluZyBvZS1zZWxmdGVzdCB0ZXN0cyIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290ICR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IGRyb3BiZWFyIgorSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIgorCitJTUFHRV9MSU5HVUFTID0gIiAiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9pbWFnZXMvd2ljLWltYWdlLW1pbmltYWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczYzU2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkFuIGV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2UuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iCisKK0lNQUdFX0ZTVFlQRVMgPSAid2ljLmJ6MiIKK1JNX09MRF9JTUFHRSA9ICIxIgorCisjIGNvcmUtaW1hZ2UtbWluaW1hbCBpcyByZWZlcmVuY2VkIGluIC53a3MsIHNvIHdlIG5lZWQgaXRzIHJvb3RmcworIyB0byBiZSByZWFkeSBiZWZvcmUgb3VyIHJvb3RmcworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJjb3JlLWltYWdlLW1pbmltYWw6ZG9fcm9vdGZzIgorCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMjAwMCIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljZDhmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogRXhhbXBsZSBvZiBwYXJ0aXRpb25lZCBpbWFnZSB3aXRoIGNvbXBsZXggbGF5b3V0CisjIGxvbmctZGVzY3JpcHRpb246IFRoaXMgaW1hZ2UgY29udGFpbnMgYm9vdCBwYXJ0aXRpb24gYW5kIDMgcm9vdGZzIHBhcnRpdGlvbnMKKyMgY3JlYXRlZCBmcm9tIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgd2ljLWltYWdlLW1pbmltYWwgaW1hZ2UgcmVjaXBlcy4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvY29yZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPWNvcmUtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGNvcmUgLS1hbGlnbiAxMDI0CitwYXJ0IC9iYWNrdXAgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj13aWMtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGJhY2t1cCAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tNC9tNF8xLjQuMTcuYmJhcHBlbmQgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tNC9tNF8xLjQuMTcuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1NzIwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L200L200XzEuNC4xNy5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBiYmFwcGVuZCBpcyB1c2VkIHRvIGFsdGVyIHRoZSByZWNpcGUgdXNpbmcgdGhlIHRlc3RfcmVjaXBlLmluYyBmaWxlIGNyZWF0ZWQgYnkgdGVzdHMuCitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaCBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkNTliNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVGVzdCBwYXRjaCBoZXJlIQorVGhpcyBpcyBpbnZhbGlkIHBhdGNoIHVzZWQgYnkgdGVzdHMgaW4gc2NyaXB0cy9saWIvc2VsZnRlc3RzLgorCistLS0gbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluLm1pa2UJRnJpIEFwciAgOSAxMzozNTo1NCAxOTk5CisrKysgbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluCUZyaSBBcHIgIDkgMTM6MzY6NDUgMTk5OQorQEAgLTEsOCArMSw4IEBACisgI01BS0UgVEhJUyBQQVRDSCBJTlZBTElECisgTUFOMSA9IG1hbiB3aGF0aXMgYXByb3BvcworLU1BTjUgPSBtYW4uY29uZgorK01BTjUgPSBtYW4uY29uZmlnCisgTUFOOCA9IG1ha2V3aGF0aXMKKy1BTEwgPSBtYW4uMSB3aGF0aXMuMSBhcHJvcG9zLjEgbWFuLmNvbmYuNQorK0FMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZmlnLjUKKyBNQVlCRTggPSBtYWtld2hhdGlzCisgCisgLlNVRkZJWEVTOiAubWFuIC4xIC41IC44CmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuXzEuNmcuYmJhcHBlbmQgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9tYW4vbWFuXzEuNmcuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1NzIwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L21hbi9tYW5fMS42Zy5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKKyMgVGhpcyBiYmFwcGVuZCBpcyB1c2VkIHRvIGFsdGVyIHRoZSByZWNpcGUgdXNpbmcgdGhlIHRlc3RfcmVjaXBlLmluYyBmaWxlIGNyZWF0ZWQgYnkgdGVzdHMuCitpbmNsdWRlIHRlc3RfcmVjaXBlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9hZGQtZmlsZS5wYXRjaCBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvYWRkLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRjOTljOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvYWRkLWZpbGUucGF0Y2gKQEAgLTAsMCArMSw4IEBACitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA0OWI0MmUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDIgQEAKKytUZXN0IGZpbGUgMgorKzQ1NgpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9maWxlMSBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvZmlsZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3MWFhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvZmlsZTEKQEAgLTAsMCArMSwyIEBACitGaXJzdCB0ZXN0IGZpbGUKKzEyMwpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9pbnN0YWxsc2NyaXB0LnNoIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9pbnN0YWxsc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL2luc3RhbGxzY3JpcHQuc2gKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gIlRoaXJkIGZpbGUiID4gJDEvc2VsZnRlc3QtcmVwbGFjZW1lLXNjcmlwdGVkCisKZGlmZiAtLWdpdCBhL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODAyYmIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBpbnN0YWxsZWQgYnkgYSBmdW5jdGlvbiBjYWxsZWQgYnkgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZSBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk2Mjk4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUKQEAgLTAsMCArMSBAQAorQSBmaWxlIG1hdGNoZWQgYnkgYSBnbG9iIGluIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NWFlM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LXRvZGlyLWdsb2JmaWxlCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBtYXRjaGVkIGJ5IGEgZ2xvYiBpbiBkb19pbnN0YWxsIHRvIGEgZGlyZWN0b3J5CmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNkNmEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZwpAQCAtMCwwICsxIEBACitTdHJhaWdodCB0aHJvdWdoIHdpdGggc2FtZSBuYW0KZGlmZiAtLWdpdCBhL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZSBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTIwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBtYXRjaGVkIGJ5IGEgZ2xvYiBpbiBTUkNfVVJJCmRpZmYgLS1naXQgYS9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc2VsZnRlc3QtcmVwbGFjZW1lLXRvZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmQ1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL2ZpbGVzL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcgpAQCAtMCwwICsxIEBACitGaWxlIGluIFNSQ19VUkkgaW5zdGFsbGVkIGp1c3QgdG8gZGlyZWN0b3J5IHBhdGgKZGlmZiAtLWdpdCBhL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc3ViZGlyL2ZpbGVpbnN1YmRpciBiL21ldGEtc2VsZnRlc3QvcmVjaXBlcy10ZXN0L3JlY2lwZXRvb2wvZmlsZXMvc3ViZGlyL2ZpbGVpbnN1YmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTE2YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9maWxlcy9zdWJkaXIvZmlsZWluc3ViZGlyCkBAIC0wLDAgKzEgQEAKK0EgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmIgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC9yZWNpcGV0b29sL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBhMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QvcmVjaXBldG9vbC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJUZXN0IHJlY2lwZSBmb3IgcmVjaXBldG9vbCBhcHBlbmRmaWxlIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5zdGFsbHNjcmlwdC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyBcCisgICAgICAgICAgIGZpbGU6Ly9zZWxmdGVzdC1yZXBsYWNlbWUtdG9kaXIgXAorICAgICAgICAgICBmaWxlOi8vZmlsZTEgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3ViZGlyIFwKKyAgICAgICAgICAgZmlsZTovL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYiogXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZ2xvYmZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyIKKworaW5zdGFsbF9leHRyYWZ1bmMoKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYyAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1mdW5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciAke0R9JHtkYXRhZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ZpbGUxICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1yZW5hbWVkCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3ViZGlyL2ZpbGVpbnN1YmRpciAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3ViZGlyCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLXNyYy1nbG9iZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc3JjLWdsb2JmaWxlCisJY3AgJHtXT1JLRElSfS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iKiAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZQorCWNwICR7V09SS0RJUn0vc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYiogJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZmlsZTIgJHtEfSR7c3lzY29uZmRpcn0vc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWQKKwlzaCAke1dPUktESVJ9L2luc3RhbGxzY3JpcHQuc2ggJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsX2V4dHJhZnVuYworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWVjaG8gIlRlc3QgZmlsZSBpbnN0YWxsZWQgYnkgcG9zdGluc3QiID4gJEQke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kIGIvbWV0YS1zZWxmdGVzdC9yZWNpcGVzLXRlc3QveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNTcyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNlbGZ0ZXN0L3JlY2lwZXMtdGVzdC94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgYmJhcHBlbmQgaXMgdXNlZCB0byBhbHRlciB0aGUgcmVjaXBlIHVzaW5nIHRoZSB0ZXN0X3JlY2lwZS5pbmMgZmlsZSBjcmVhdGVkIGJ5IHRlc3RzLgoraW5jbHVkZSB0ZXN0X3JlY2lwZS5pbmMKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vQ09QWUlORy5NSVQgYi9tZXRhLXNrZWxldG9uL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTUwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbi9jb25mL2xheWVyLmNvbmYgYi9tZXRhLXNrZWxldG9uL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ExNjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbi9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInNrZWxldG9uIgorQkJGSUxFX1BBVFRFUk5fc2tlbGV0b24gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9za2VsZXRvbiA9ICIxIgorCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKKyMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKK0xBWUVSVkVSU0lPTl9za2VsZXRvbiA9ICIxIgorCitMQVlFUkRFUEVORFNfc2tlbGV0b24gPSAiY29yZSIKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlLmNvbmYgYi9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNmRhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZS5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgU2FtcGxlIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gd2hpY2ggdGhlIHVzZXIgY2FuIGVpdGhlciBhZGQgaW4gbG9jYWwuY29uZgorIyBvciBzcGVjaWZpYyBpbiBhbiBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSB0aGlzLCB0aGVuIHJlcXVpcmUgaXQuCisjCisjIFRoaXMgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgYW4geDg2IDY0IGJpdCBtYWNoaW5lIGFzIHRoZSBtYWluIG1hY2hpbmUKKyMgdHlwZSBhbmQgdGhlbiBhZGRzIGEgbXVsdGlsaWIgaW4gdGhlICJsaWIzMiIgZGlyZWN0b3J5IHdoZXJlIHRob3NlCisjIGxpYnJhcmllcyBhcmUgY29tcGlsZWQgd2l0aCB0aGUgIng4NiIgdHVuZS4KKyMKKworTUFDSElORSA9ICJxZW11eDg2LTY0IgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9ICJtdWx0aWxpYjpsaWIzMiIKK0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZTIuY29uZiBiL21ldGEtc2tlbGV0b24vY29uZi9tdWx0aWxpYi1leGFtcGxlMi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTZmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL2NvbmYvbXVsdGlsaWItZXhhbXBsZTIuY29uZgpAQCAtMCwwICsxLDEzIEBACisjCisjIFNhbXBsZSBtdWx0aWxpYiBjb25maWd1cmF0aW9uIHdoaWNoIHRoZSB1c2VyIGNhbiBlaXRoZXIgYWRkIGluIGxvY2FsLmNvbmYKKyMgb3Igc3BlY2lmaWMgaW4gYW4gY29uZmlndXJhdGlvbiBmaWxlIGxpa2UgdGhpcywgdGhlbiByZXF1aXJlIGl0LgorIworIyBUaGlzIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGFuIHg4NiA2NCBiaXQgbWFjaGluZSBhcyB0aGUgbWFpbiBtYWNoaW5lCisjIHR5cGUgYW5kIHRoZW4gYWRkcyBhIG11bHRpbGliIGluIHRoZSAibGlieDMyIiBkaXJlY3Rvcnkgd2hlcmUgdGhvc2UKKyMgbGlicmFyaWVzIGFyZSBjb21waWxlZCB3aXRoIHRoZSAieDg2LTY0LXgzMiIgdHVuZS4KKyMKKworTUFDSElORSA9ICJxZW11eDg2LTY0IgorcmVxdWlyZSBjb25mL211bHRpbGliLmNvbmYKK01VTFRJTElCUyA9ICJtdWx0aWxpYjpsaWJ4MzIiCitERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItbGlieDMyID0gIng4Ni02NC14MzIiCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbm9fcmZraWxsLmNmZyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9ub19yZmtpbGwuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDBlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbm9fcmZraWxsLmNmZwpAQCAtMCwwICsxIEBACisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfJS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGNkZWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKQEAgLTAsMCArMSwxMiBAQAorIyBFeGFtcGxlIHVzZSBvZiBjb25maWd1cmF0aW9uIGZyYWdtZW50cyBmb3IgYnVzeWJveCwgd2hpY2ggdXNlcyB0aGUgc2FtZQorIyBtZWNoYW5pc20gYXMgdGhlIGxpbnV4LXlvY3RvIGtlcm5lbCByZWNpcGUuCisjCisjIFRoZSBlbnRyaWVzIGhlcmUgd2lsbCBvdmVycmlkZSBhbnkgZW50cmllcyBpbiB0aGUgYmFzZSBidXN5Ym94IHJlY2lwZQorIworIyBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBLZXJuZWwgRGV2IE1hbnVhbAorIyBodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jcy9jdXJyZW50L2tlcm5lbC1kZXYva2VybmVsLWRldi5odG1sI2NoYW5naW5nLXRoZS1jb25maWd1cmF0aW9uCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCisKK1NSQ19VUkkgKz0gIiBcCisJICAgIGZpbGU6Ly9ub19yZmtpbGwuY2ZnIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvQ09QWUlORyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ0NTUxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9NYWtlZmlsZSBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvaGVsbG8tbW9kL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZWQzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitvYmotbSA6PSBoZWxsby5vCisKK1NSQyA6PSAkKHNoZWxsIHB3ZCkKKworYWxsOgorCSQoTUFLRSkgLUMgJChLRVJORUxfU1JDKSBNPSQoU1JDKQorCittb2R1bGVzX2luc3RhbGw6CisJJChNQUtFKSAtQyAkKEtFUk5FTF9TUkMpIE09JChTUkMpIG1vZHVsZXNfaW5zdGFsbAorCitjbGVhbjoKKwlybSAtZiAqLm8gKn4gY29yZSAuZGVwZW5kIC4qLmNtZCAqLmtvICoubW9kLmMKKwlybSAtZiBNb2R1bGUubWFya2VycyBNb2R1bGUuc3ltdmVycyBtb2R1bGVzLm9yZGVyCisJcm0gLXJmIC50bXBfdmVyc2lvbnMgTW9kdWxlcy5zeW12ZXJzCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9maWxlcy9oZWxsby5jIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MwZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvZmlsZXMvaGVsbG8uYwpAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTEgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworCXByaW50aygiSGVsbG8gV29ybGQhXG4iKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXByaW50aygiR29vZGJ5ZSBDcnVlbCBXb3JsZCFcbiIpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2hlbGxvLW1vZC9oZWxsby1tb2RfMC4xLmJiIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQwYjBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9oZWxsby1tb2QvaGVsbG8tbW9kXzAuMS5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIkV4YW1wbGUgb2YgaG93IHRvIGJ1aWxkIGFuIGV4dGVybmFsIExpbnV4IGtlcm5lbCBtb2R1bGUiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UiCisKK2luaGVyaXQgbW9kdWxlCisKK1NSQ19VUkkgPSAiZmlsZTovL01ha2VmaWxlIFwKKyAgICAgICAgICAgZmlsZTovL2hlbGxvLmMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORyBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgVGhlIGluaGVyaXQgb2YgbW9kdWxlLmJiY2xhc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IG5hbWUgbW9kdWxlIHBhY2thZ2VzIHdpdGgKKyMgImtlcm5lbC1tb2R1bGUtIiBwcmVmaXggYXMgcmVxdWlyZWQgYnkgdGhlIG9lLWNvcmUgYnVpbGQgZW52aXJvbm1lbnQuCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYiBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZTQ0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpAQCAtMCwwICsxLDcyIEBACisjIGxpbnV4LXlvY3RvLWN1c3RvbS5iYjoKKyMKKyMgICBBbiBleGFtcGxlIGtlcm5lbCByZWNpcGUgdGhhdCB1c2VzIHRoZSBsaW51eC15b2N0byBhbmQgb2UtY29yZQorIyAgIGtlcm5lbCBjbGFzc2VzIHRvIGFwcGx5IGEgc3Vic2V0IG9mIHlvY3RvIGtlcm5lbCBtYW5hZ2VtZW50IHRvIGdpdAorIyAgIG1hbmFnZWQga2VybmVsIHJlcG9zaXRvcmllcy4KKyMKKyMgICBUbyB1c2UgbGludXgteW9jdG8tY3VzdG9tIGluIHlvdXIgbGF5ZXIsIGNvcHkgdGhpcyByZWNpcGUgKG9wdGlvbmFsbHkKKyMgICByZW5hbWUgaXQgYXMgd2VsbCkgYW5kIG1vZGlmeSBpdCBhcHByb3ByaWF0ZWx5IGZvciB5b3VyIG1hY2hpbmUuIGkuZS46CisjCisjICAgICBDT01QQVRJQkxFX01BQ0hJTkVfeW91cm1hY2hpbmUgPSAieW91cm1hY2hpbmUiCisjCisjICAgWW91IG11c3QgYWxzbyBwcm92aWRlIGEgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGRpcmVjdAorIyAgIG1ldGhvZCBpcyB0byBjb3B5IHlvdXIgLmNvbmZpZyB0byBmaWxlcy9kZWZjb25maWcgaW4geW91ciBsYXllciwKKyMgICBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvcHkgKGFuZCByZW5hbWUpIG9mIHRoaXMgcmVjaXBlIGFuZAorIyAgIGFkZCBmaWxlOi8vZGVmY29uZmlnIHRvIHlvdXIgU1JDX1VSSS4KKyMKKyMgICBUbyB1c2UgdGhlIHlvY3RvIGtlcm5lbCB0b29saW5nIHRvIGdlbmVyYXRlIGEgQlNQIGNvbmZpZ3VyYXRpb24KKyMgICB1c2luZyBtb2R1bGFyIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnRzLCBzZWUgdGhlIHlvY3RvLWJzcCBhbmQKKyMgICB5b2N0by1rZXJuZWwgdG9vbHMgZG9jdW1lbnRhdGlvbi4KKyMKKyMgV2FybmluZzoKKyMKKyMgICBCdWlsZGluZyB0aGlzIGV4YW1wbGUgd2l0aG91dCBwcm92aWRpbmcgYSBkZWZjb25maWcgb3IgQlNQCisjICAgY29uZmlndXJhdGlvbiB3aWxsIHJlc3VsdCBpbiBidWlsZCBvciBib290IGVycm9ycy4gVGhpcyBpcyBub3QgYQorIyAgIGJ1Zy4KKyMKKyMKKyMgTm90ZXM6CisjCisjICAgcGF0Y2hlczogcGF0Y2hlcyBjYW4gYmUgbWVyZ2VkIGludG8gdG8gdGhlIHNvdXJjZSBnaXQgdHJlZSBpdHNlbGYsCisjICAgICAgICAgICAgYWRkZWQgdmlhIHRoZSBTUkNfVVJJLCBvciBjb250cm9sbGVkIHZpYSBhIEJTUAorIyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uCisjCisjICAgZGVmY29uZmlnOiBXaGVuIGEgZGVmY29uZmlnIGlzIHByb3ZpZGVkLCB0aGUgbGludXgteW9jdG8gY29uZmlndXJhdGlvbgorIyAgICAgICAgICAgICAgdXNlcyB0aGUgZmlsZW5hbWUgYXMgYSB0cmlnZ2VyIHRvIHVzZSBhICdhbGxub2NvbmZpZycgYmFzZWxpbmUKKyMgICAgICAgICAgICAgIGJlZm9yZSBtZXJnaW5nIHRoZSBkZWZjb25maWcgaW50byB0aGUgYnVpbGQuIAorIworIyAgICAgICAgICAgICAgSWYgdGhlIGRlZmNvbmZpZyBmaWxlIHdhcyBjcmVhdGVkIHdpdGggbWFrZV9zYXZlZGVmY29uZmlnLCAKKyMgICAgICAgICAgICAgIG5vdCBhbGwgb3B0aW9ucyBhcmUgc3BlY2lmaWVkLCBhbmQgc2hvdWxkIGJlIHJlc3RvcmVkIHdpdGggdGhlaXIKKyMgICAgICAgICAgICAgIGRlZmF1bHRzLCBub3Qgc2V0IHRvICduJy4gVG8gcHJvcGVybHkgZXhwYW5kIGEgZGVmY29uZmlnIGxpa2UKKyMgICAgICAgICAgICAgIHRoaXMsIHNwZWNpZnk6IEtDT05GSUdfTU9ERT0iLS1hbGxkZWZjb25maWciIGluIHRoZSBrZXJuZWwKKyMgICAgICAgICAgICAgIHJlY2lwZS4KKyMgICAKKyMgICBleGFtcGxlIGNvbmZpZ3VyYXRpb24gYWRkaXRpb246CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovL3NtcC5jZmciCisjICAgZXhhbXBsZSBwYXRjaCBhZGRpdGlvbiAoZm9yIGtlcm5lbCB2My40IG9ubHkpOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWxpbnV4LXZlcnNpb24tdHdlYWsucGF0Y2gKKyMgICBleGFtcGxlIGZlYXR1cmUgYWRkaXRpb24gKGZvciBrZXJuZWwgdjMuNCBvbmx5KToKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vZmVhdHVyZS5zY2MiCisjCisKK2luaGVyaXQga2VybmVsCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIE92ZXJyaWRlIFNSQ19VUkkgaW4gYSBjb3B5IG9mIHRoaXMgcmVjaXBlIHRvIHBvaW50IGF0IGEgZGlmZmVyZW50IHNvdXJjZQorIyB0cmVlIGlmIHlvdSBkbyBub3Qgd2FudCB0byBidWlsZCBmcm9tIExpbnVzJyB0cmVlLgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0O3Byb3RvY29sPWdpdDtub2NoZWNrb3V0PTE7bmFtZT1tYWNoaW5lIgorCitMSU5VWF9WRVJTSU9OID89ICIzLjQiCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTiA/PSAiLWN1c3RvbSIKKworIyBNb2RpZnkgU1JDUkVWIHRvIGEgZGlmZmVyZW50IGNvbW1pdCBoYXNoIGluIGEgY29weSBvZiB0aGlzIHJlY2lwZSB0bworIyBidWlsZCBhIGRpZmZlcmVudCByZWxlYXNlIG9mIHRoZSBMaW51eCBrZXJuZWwuCisjIHRhZzogdjMuNCA3NmUxMGQxNThlZmI2ZDQ1MTYwMTg4NDZmNjBjMmFiNTUwMTkwMGJjCitTUkNSRVZfbWFjaGluZT0iNzZlMTBkMTU4ZWZiNmQ0NTE2MDE4ODQ2ZjYwYzJhYjU1MDE5MDBiYyIKKworUFIgPSAicjEiCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCisjIE92ZXJyaWRlIENPTVBBVElCTEVfTUFDSElORSB0byBpbmNsdWRlIHlvdXIgbWFjaGluZSBpbiBhIGNvcHkgb2YgdGhpcyByZWNpcGUKKyMgZmlsZS4gTGVhdmluZyBpdCBlbXB0eSBoZXJlIGVuc3VyZXMgYW4gZWFybHkgZXhwbGljaXQgYnVpbGQgZmFpbHVyZS4KK0NPTVBBVElCTEVfTUFDSElORSA9ICIoXiQpIgpkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vMDAwMS1saW51eC12ZXJzaW9uLXR3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTYyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS8wMDAxLWxpbnV4LXZlcnNpb24tdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSA1YTU1OTQzYTZiYmIxMGE3OTk5NGEwYjE4MDcxYjI0MjdkZmZiMTVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDExIEp1biAyMDEyIDE1OjMxOjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpbnV4OiB2ZXJzaW9uIHR3ZWFrCisKK1NpZ25lZC1vZmYtYnk6IEJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBhNjg3OTYzLi5mNWIxYWMzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMiw3ICsyLDcgQEAgVkVSU0lPTiA9IDMKKyBQQVRDSExFVkVMID0gNAorIFNVQkxFVkVMID0gMAorIEVYVFJBVkVSU0lPTiA9CistTkFNRSA9IFNhYmVyLXRvb3RoZWQgU3F1aXJyZWwKKytOQU1FID0gU2FiZXItdG9vdGhlZCBTcXVpcnJlbC1jdXN0b20KKyAKKyAjICpET0NVTUVOVEFUSU9OKgorICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgorLS0gCisxLjcuNS40CisKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2ZlYXR1cmUuc2NjIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vZmVhdHVyZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkNWFmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2ZlYXR1cmUuc2NjCkBAIC0wLDAgKzEgQEAKK3BhdGNoIDAwMDEtbGludXgtdmVyc2lvbi10d2Vhay5wYXRjaApkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vc21wLmNmZyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyNmE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL3NtcC5jZmcKQEAgLTAsMCArMSBAQAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1tdWx0aWxpYi9pbWFnZXMvY29yZS1pbWFnZS1tdWx0aWxpYi1leGFtcGxlLmJiIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLW11bHRpbGliL2ltYWdlcy9jb3JlLWltYWdlLW11bHRpbGliLWV4YW1wbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzMTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1tdWx0aWxpYi9pbWFnZXMvY29yZS1pbWFnZS1tdWx0aWxpYi1leGFtcGxlLmJiCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgQW4gZXhhbXBsZSBvZiBhIG11bHRpbGliIGltYWdlCisjCisjIFRoaXMgZXhhbXBsZSBpbmNsdWRlcyBhIGxpYjMyIHZlcnNpb24gb2YgYmFzaCBpbnRvIGFuIG90aGVyd2lzZSBzdGFuZGFyZAorIyBzYXRvIGltYWdlLiBJdCBhc3N1bWVzIGEgImxpYjMyIiBtdWx0aWxpYiBoYXMgYmVlbiBlbmFibGVkIGluIHRoZSB1c2VyJ3MKKyMgY29uZmlndXJhdGlvbiAoc2VlIHRoZSBleGFtcGxlIGNvbmYgZmlsZXMgZm9yIGV4YW1wbGVzIG9mIHRoaXMuKQorIworCisjIEZpcnN0IGluY2x1ZGUgYSBiYXNlIGltYWdlIHRvIGJhc2UgdGhpbmdzIG9mZgorcmVxdWlyZSByZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYgorCisjIE5vdyBhZGQgdGhlIG11bHRpbGliIHBhY2thZ2VzIHdlIHdhbnQgdG8gaW5zdGFsbAorSU1BR0VfSU5TVEFMTCArPSAibGliMzItYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2UvQ09QWVJJR0hUIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZS9DT1BZUklHSFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzZTE3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2UvQ09QWVJJR0hUCkBAIC0wLDAgKzEsMTUgQEAKK1N5c3Zpbml0IGlzIENvcHlyaWdodCAoQykgMTk5MS0yMDA0IE1pcXVlbCB2YW4gU21vb3JlbmJ1cmcKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b24gYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWRjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uCkBAIC0wLDAgKzEsMTkzIEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBza2VsZXRvbgorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzCisjIFNob3VsZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcworIyBTaG91bGQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGFtcGxlIGluaXRzY3JpcHQKKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2NyaXB0cyB0byBiZQorIyAgICAgICAgICAgICAgICAgICAgcGxhY2VkIGluIC9ldGMvaW5pdC5kCisjIyMgRU5EIElOSVQgSU5GTworCisjIFRoZSBkZWZpbml0aW9uIG9mIGFjdGlvbnM6IChGcm9tIExTQiAzLjEuMCkKKyMgc3RhcnQgICAgICAgICBzdGFydCB0aGUgc2VydmljZQorIyBzdG9wICAgICAgICAgIHN0b3AgdGhlIHNlcnZpY2UKKyMgcmVzdGFydCAgICAgICBzdG9wIGFuZCByZXN0YXJ0IHRoZSBzZXJ2aWNlIGlmIHRoZSBzZXJ2aWNlIGlzIGFscmVhZHkgcnVubmluZywKKyMgICAgICAgICAgICAgICBvdGhlcndpc2Ugc3RhcnQgdGhlIHNlcnZpY2UKKyMgdHJ5LXJlc3RhcnQJcmVzdGFydCB0aGUgc2VydmljZSBpZiB0aGUgc2VydmljZSBpcyBhbHJlYWR5IHJ1bm5pbmcKKyMgcmVsb2FkCWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzZXJ2aWNlIHRvIGJlIHJlbG9hZGVkIHdpdGhvdXQKKyMgICAgICAgICAgICAgICBhY3R1YWxseSBzdG9wcGluZyBhbmQgcmVzdGFydGluZyB0aGUgc2VydmljZQorIyBmb3JjZS1yZWxvYWQJY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcmVsb2FkZWQgaWYgdGhlIHNlcnZpY2Ugc3VwcG9ydHMKKyMgICAgICAgICAgICAgICB0aGlzLCBvdGhlcndpc2UgcmVzdGFydCB0aGUgc2VydmljZSBpZiBpdCBpcyBydW5uaW5nCisjIHN0YXR1cwlwcmludCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHNlcnZpY2UKKworIyBUaGUgc3RhcnQsIHN0b3AsIHJlc3RhcnQsIGZvcmNlLXJlbG9hZCwgYW5kIHN0YXR1cyBhY3Rpb25zIHNoYWxsIGJlIHN1cHBvcnRlZAorIyBieSBhbGwgaW5pdCBzY3JpcHRzOyB0aGUgcmVsb2FkIGFuZCB0aGUgdHJ5LXJlc3RhcnQgYWN0aW9ucyBhcmUgb3B0aW9uYWwKKworIyBDb21tb24gc3RlcHMgdG8gY29udmVydCB0aGlzIHNrZWxldG9uIGludG8gYSByZWFsIGluaXQgc2NyaXB0CisjIDEpIGNwIHNrZWxldG9uIDx0aGVfcmVhbF9uYW1lPgorIyAyKSBTZXQgREVTQyBhbmQgTkFNRQorIyAzKSBDaGVjayB3aGV0aGVyIHRoZSBkYWVtb24gYXBwIGlzIC91c3Ivc2Jpbi8kTkFNRSwgaWYgbm90LCBzZXQgaXQuCisjIDQpIFNldCBEQUVNT05fQVJHUyBpZiB0aGVyZSBpcyBhbnkKKyMgNSkgUmVtb3ZlIHRoZSB1c2VsZXNzIGNvZGUKKworIyBOT1RFOiBUaGUgc2tlbGV0b24gZG9lc24ndCBzdXBwb3J0IHRoZSBkYWVtb24gd2hpY2ggaXMgYSBzY3JpcHQgdW5sZXNzIHRoZQorIyAgICAgICBwaWRvZiBzdXBwb3J0cyAiLXgiIG9wdGlvbiwgcGxlYXNlIHNlZSBtb3JlIGNvbW1lbnRzIGZvciBwaWRvZnByb2MgKCkKKyMgICAgICAgaW4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgUEFUSCBzaG91bGQgb25seSBpbmNsdWRlIC91c3IvKiBpZiBpdCBydW5zIGFmdGVyIHRoZSBtb3VudG5mcy5zaCBzY3JpcHQKK1BBVEg9L3NiaW46L3Vzci9zYmluOi9iaW46L3Vzci9iaW4KKworREVTQz0ic2tlbGV0b24iCitOQU1FPSJza2VsZXRvbi10ZXN0IgorREFFTU9OPS91c3Ivc2Jpbi8kTkFNRQorREFFTU9OX0FSR1M9IiIKK1BJREZJTEU9L3Zhci9ydW4vJE5BTUUucGlkCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zIHx8IGV4aXQgMQorCisjIEV4aXQgaWYgdGhlIHBhY2thZ2UgaXMgbm90IGluc3RhbGxlZAorWyAteCAiJERBRU1PTiIgXSB8fCBleGl0IDAKKworIyBSZWFkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZmlsZSBpZiBpdCBpcyBwcmVzZW50CitbIC1yIC9ldGMvZGVmYXVsdC8kTkFNRSBdICYmIC4gL2V0Yy9kZWZhdWx0LyROQU1FCisKKyMKKyMgRnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIGRhZW1vbi9zZXJ2aWNlCisjCitkb19zdGFydCgpIHsKKwlsb2NhbCBzdGF0dXMgcGlkCisKKwlzdGF0dXM9MAorCXBpZD1gcGlkb2Zwcm9jICROQU1FYCB8fCBzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICIkREVTQyBhbHJlYWR5IHJ1bm5pbmcgKCRwaWQpLiIKKwkJZXhpdCAxCisJCTs7CisJKikKKwkJZWNobyAiU3RhcnRpbmcgJERFU0MgLi4uIgorCQlleGVjICREQUVNT04gJERBRU1PTl9BUkdTID4vZGV2L251bGwgMj4mMSB8fCBzdGF0dXM9JD8KKwkJZWNobyAiRVJST1I6IEZhaWxlZCB0byBzdGFydCAkREVTQy4iCisJCWV4aXQgJHN0YXR1cworCQk7OworCWVzYWMKKworCSMgQWRkIGNvZGUgaGVyZSwgaWYgbmVjZXNzYXJ5LCB0aGF0IHdhaXRzIGZvciB0aGUgcHJvY2VzcyB0byBiZSByZWFkeQorCSMgdG8gaGFuZGxlIHJlcXVlc3RzIGZyb20gc2VydmljZXMgc3RhcnRlZCBzdWJzZXF1ZW50bHkgd2hpY2ggZGVwZW5kCisJIyBvbiB0aGlzIG9uZS4gIEFzIGEgbGFzdCByZXNvcnQsIHNsZWVwIGZvciBzb21lIHRpbWUuCit9CisKKyMKKyMgRnVuY3Rpb24gdGhhdCBzdG9wcyB0aGUgZGFlbW9uL3NlcnZpY2UKKyMKK2RvX3N0b3AoKSB7CisJbG9jYWwgcGlkIHN0YXR1cworCisJc3RhdHVzPTAKKwlwaWQ9YHBpZG9mcHJvYyAkTkFNRWAgfHwgc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJIyBFeGl0IHdoZW4gZmFpbCB0byBzdG9wLCB0aGUga2lsbCB3b3VsZCBjb21wbGFpbiB3aGVuIGZhaWwKKwkJa2lsbCAtcyAxNSAkcGlkID4vZGV2L251bGwgJiYgcm0gLWYgJFBJREZJTEUgJiYgXAorCQkJZWNobyAiU3RvcHBlZCAkREVTQyAoJHBpZCkuIiB8fCBleGl0ICQ/CisJCTs7CisJKikKKwkJZWNobyAiJERFU0MgaXMgbm90IHJ1bm5pbmc7IG5vbmUga2lsbGVkLiIgPiYyCisJCTs7CisJZXNhYworCisJIyBXYWl0IGZvciBjaGlsZHJlbiB0byBmaW5pc2ggdG9vIGlmIHRoaXMgaXMgYSBkYWVtb24gdGhhdCBmb3JrcworCSMgYW5kIGlmIHRoZSBkYWVtb24gaXMgb25seSBldmVyIHJ1biBmcm9tIHRoaXMgaW5pdHNjcmlwdC4KKwkjIElmIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIHRoZW4gYWRkIHNvbWUgb3RoZXIgY29kZQorCSMgdGhhdCB3YWl0cyBmb3IgdGhlIHByb2Nlc3MgdG8gZHJvcCBhbGwgcmVzb3VyY2VzIHRoYXQgY291bGQgYmUKKwkjIG5lZWRlZCBieSBzZXJ2aWNlcyBzdGFydGVkIHN1YnNlcXVlbnRseS4gIEEgbGFzdCByZXNvcnQgaXMgdG8KKwkjIHNsZWVwIGZvciBzb21lIHRpbWUuCisJcmV0dXJuICRzdGF0dXMKK30KKworIworIyBGdW5jdGlvbiB0aGF0IHNlbmRzIGEgU0lHSFVQIHRvIHRoZSBkYWVtb24vc2VydmljZQorIworZG9fcmVsb2FkKCkgeworCWxvY2FsIHBpZCBzdGF0dXMKKworCXN0YXR1cz0wCisgICAgICAgICMgSWYgdGhlIGRhZW1vbiBjYW4gcmVsb2FkIGl0cyBjb25maWd1cmF0aW9uIHdpdGhvdXQKKyAgICAgICAgIyByZXN0YXJ0aW5nIChmb3IgZXhhbXBsZSwgd2hlbiBpdCBpcyBzZW50IGEgU0lHSFVQKSwKKyAgICAgICAgIyB0aGVuIGltcGxlbWVudCB0aGF0IGhlcmUuCisJcGlkPWBwaWRvZnByb2MgJE5BTUVgIHx8IHN0YXR1cz0kPworCWNhc2UgJHN0YXR1cyBpbgorCTApCisJCWVjaG8gIlJlbG9hZGluZyAkREVTQyAuLi4iCisJCWtpbGwgLXMgMSAkcGlkIHx8IGV4aXQgJD8KKwkJOzsKKwkqKQorCQllY2hvICIkREVTQyBpcyBub3QgcnVubmluZzsgbm9uZSByZWxvYWRlZC4iID4mMgorCQk7OworCWVzYWMKKwlleGl0ICRzdGF0dXMKK30KKworCisjCisjIEZ1bmN0aW9uIHRoYXQgc2hvd3MgdGhlIGRhZW1vbi9zZXJ2aWNlIHN0YXR1cworIworc3RhdHVzX29mX3Byb2MgKCkgeworCWxvY2FsIHBpZCBzdGF0dXMKKworCXN0YXR1cz0wCisJIyBwaWRvZiBvdXRwdXQgbnVsbCB3aGVuIG5vIHByb2dyYW0gaXMgcnVubmluZywgc28gbm8gIjI+L2Rldi9udWxsIi4KKwlwaWQ9YHBpZG9mcHJvYyAkTkFNRWAgfHwgc3RhdHVzPSQ/CisJY2FzZSAkc3RhdHVzIGluCisJMCkKKwkJZWNobyAiJERFU0MgaXMgcnVubmluZyAoJHBpZCkuIgorCQlleGl0IDAKKwkJOzsKKwkqKQorCQllY2hvICIkREVTQyBpcyBub3QgcnVubmluZy4iID4mMgorCQlleGl0ICRzdGF0dXMKKwkJOzsKKwllc2FjCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisJZG9fc3RhcnQKKwk7Oworc3RvcCkKKwlkb19zdG9wIHx8IGV4aXQgJD8KKwk7Oworc3RhdHVzKQorCXN0YXR1c19vZl9wcm9jCisJOzsKK3Jlc3RhcnQpCisJIyBBbHdheXMgc3RhcnQgdGhlIHNlcnZpY2UgcmVnYXJkbGVzcyB0aGUgc3RhdHVzIG9mIGRvX3N0b3AKKwlkb19zdG9wCisJZG9fc3RhcnQKKwk7OwordHJ5LXJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMgZm9yY2UtcmVsb2FkIGlzIHRoZSBzYW1lIGFzIHJlbG9hZCBvciB0cnktcmVzdGFydCBhY2NvcmRpbmcKKwkjIHRvIGl0cyBkZWZpbml0aW9uLCB0aGUgcmVsb2FkIGlzIG5vdCBpbXBsZW1lbnRlZCBoZXJlLCBzbworCSMgZm9yY2UtcmVsb2FkIGlzIHRoZSBhbGlhcyBvZiB0cnktcmVzdGFydCBoZXJlLCBidXQgaXQgc2hvdWxkCisJIyBiZSB0aGUgYWxpYXMgb2YgcmVsb2FkIGlmIHJlbG9hZCBpcyBpbXBsZW1lbnRlZC4KKwkjCisJIyBPbmx5IHN0YXJ0IHRoZSBzZXJ2aWNlIHdoZW4gZG9fc3RvcCBzdWNjZWVkcworCWRvX3N0b3AgJiYgZG9fc3RhcnQKKwk7OworI3JlbG9hZCkKKwkjIElmIHRoZSAicmVsb2FkIiBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgcHJvcGVybHksIHRoZW4gbGV0IHRoZQorCSMgZm9yY2UtcmVsb2FkIGJlIHRoZSBhbGlhcyBvZiByZWxvYWQsIGFuZCByZW1vdmUgaXQgZnJvbQorCSMgdHJ5LXJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMKKwkjZG9fcmVsb2FkCisJIzs7CisqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHx0cnktcmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDMKKwk7OworZXNhYworCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uX3Rlc3QuYyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2Uvc2tlbGV0b25fdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YzY3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vc2VydmljZS9zZXJ2aWNlL3NrZWxldG9uX3Rlc3QuYwpAQCAtMCwwICsxLDEyIEBACisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFRoaXMgZGVtbyBkb2VzIG5vdGhpbmcgZXhjZXB0IGZvciB0ZXN0aW5nIC9ldGMvaW5pdC5kL3NrZWxldG9uICovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZGFlbW9uKDAsIDApOworCXdoaWxlICgxKSB7CisJCXNsZWVwKDEpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2VfMC4xLmJiIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3NlcnZpY2Uvc2VydmljZV8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjZDdhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi9zZXJ2aWNlL3NlcnZpY2VfMC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiVGhlIGNhbm9uaWNhbCBleGFtcGxlIG9mIGluaXQgc2NyaXB0cyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0NPUFlSSUdIVDttZDU9MzQ5Yzg3MmUwMDY2MTU1ZTE4MThiNzg2OTM4ODc2YTQiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NrZWxldG9uIFwKKwkgICBmaWxlOi8vc2tlbGV0b25fdGVzdC5jIFwKKwkgICBmaWxlOi8vQ09QWVJJR0hUIFwKKwkgICAiCisKK2RvX2NvbXBpbGUgKCkgeworCSR7Q0N9ICR7V09SS0RJUn0vc2tlbGV0b25fdGVzdC5jIC1vICR7V09SS0RJUn0vc2tlbGV0b24tdGVzdAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWNhdCAke1dPUktESVJ9L3NrZWxldG9uIHwgXAorCSAgc2VkIC1lICdzLC9ldGMsJHtzeXNjb25mZGlyfSxnJyBcCisJICAgICAgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZycgXAorCSAgICAgIC1lICdzLC92YXIsJHtsb2NhbHN0YXRlZGlyfSxnJyBcCisJICAgICAgLWUgJ3MsL3Vzci9iaW4sJHtiaW5kaXJ9LGcnIFwKKwkgICAgICAtZSAncywvdXNyLCR7cHJlZml4fSxnJyA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9za2VsZXRvbgorCWNobW9kIGEreCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc2tlbGV0b24KKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9za2VsZXRvbi10ZXN0ICR7RH0ke3NiaW5kaXJ9LworfQorCitSREVQRU5EU18ke1BOfSA9ICJpbml0c2NyaXB0cyIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9za2VsZXRvbiIKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYiBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MwMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlLmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiRXhhbXBsZSByZWNpcGUgZm9yIHVzaW5nIGluaGVyaXQgdXNlcmFkZCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcmVjaXBlIHNlcnZlcyBhcyBhbiBleGFtcGxlIGZvciB1c2luZyBmZWF0dXJlcyBmcm9tIHVzZXJhZGQuYmJjbGFzcyIKK1NFQ1RJT04gPSAiZXhhbXBsZXMiCitQUiA9ICJyMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2ZpbGUxIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGUyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGUzIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGU0IgorCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VTID0rICIke1BOfS11c2VyMyIKKworaW5oZXJpdCB1c2VyYWRkCisKKyMgWW91IG11c3Qgc2V0IFVTRVJBRERfUEFDS0FHRVMgd2hlbiB5b3UgaW5oZXJpdCB1c2VyYWRkLiBUaGlzCisjIGxpc3RzIHdoaWNoIG91dHB1dCBwYWNrYWdlcyB3aWxsIGluY2x1ZGUgdGhlIHVzZXIvZ3JvdXAKKyMgY3JlYXRpb24gY29kZS4KK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXNlcjMiCisKKyMgWW91IG11c3QgYWxzbyBzZXQgVVNFUkFERF9QQVJBTSBhbmQvb3IgR1JPVVBBRERfUEFSQU0gd2hlbgorIyB5b3UgaW5oZXJpdCB1c2VyYWRkLgorCisjIFVTRVJBRERfUEFSQU0gc3BlY2lmaWVzIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlCisjIHVzZXJhZGQgY29tbWFuZC4gTXVsdGlwbGUgdXNlcnMgY2FuIGJlIGNyZWF0ZWQgYnkgc2VwYXJhdGluZworIyB0aGUgY29tbWFuZHMgd2l0aCBhIHNlbWljb2xvbi4gSGVyZSB3ZSdsbCBjcmVhdGUgdHdvIHVzZXJzLAorIyB1c2VyMSBhbmQgdXNlcjI6CitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi11IDEyMDAgLWQgL2hvbWUvdXNlcjEgLXIgLXMgL2Jpbi9iYXNoIHVzZXIxOyAtdSAxMjAxIC1kIC9ob21lL3VzZXIyIC1yIC1zIC9iaW4vYmFzaCB1c2VyMiIKKworIyB1c2VyMyB3aWxsIGJlIG1hbmFnZWQgaW4gdGhlIHVzZXJhZGQtZXhhbXBsZS11c2VyMyBwYWNha2dlOgorIyBBcyBhbiBleGFtcGxlLCB3ZSB1c2UgdGhlIC1QIG9wdGlvbiB0byBzZXQgY2xlYXIgdGV4dCBwYXNzd29yZCBmb3IgdXNlcjMKK1VTRVJBRERfUEFSQU1fJHtQTn0tdXNlcjMgPSAiLXUgMTIwMiAtZCAvaG9tZS91c2VyMyAtciAtcyAvYmluL2Jhc2ggLVAgJ3VzZXIzJyB1c2VyMyIKKworIyBHUk9VUEFERF9QQVJBTSB3b3JrcyB0aGUgc2FtZSB3YXksIHdoaWNoIHlvdSBzZXQgdG8gdGhlIG9wdGlvbnMKKyMgeW91J2Qgbm9ybWFsbHkgcGFzcyB0byB0aGUgZ3JvdXBhZGQgY29tbWFuZC4gVGhpcyB3aWxsIGNyZWF0ZQorIyBncm91cHMgZ3JvdXAxIGFuZCBncm91cDI6CitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItZyA4ODAgZ3JvdXAxOyAtZyA4OTAgZ3JvdXAyIgorCisjIExpa2V3aXNlLCB3ZSdsbCBtYW5hZ2UgZ3JvdXAzIGluIHRoZSB1c2VyYWRkLWV4YW1wbGUtdXNlcjMgcGFja2FnZToKK0dST1VQQUREX1BBUkFNXyR7UE59LXVzZXIzID0gIi1nIDkwMCBncm91cDMiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3VzZXIxCisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7ZGF0YWRpcn0vdXNlcjIKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkYXRhZGlyfS91c2VyMworCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTEgJHtEfSR7ZGF0YWRpcn0vdXNlcjEvCisJaW5zdGFsbCAtcCAtbSA2NDQgZmlsZTIgJHtEfSR7ZGF0YWRpcn0vdXNlcjEvCisKKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMiAke0R9JHtkYXRhZGlyfS91c2VyMi8KKwlpbnN0YWxsIC1wIC1tIDY0NCBmaWxlMyAke0R9JHtkYXRhZGlyfS91c2VyMi8KKworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGUzICR7RH0ke2RhdGFkaXJ9L3VzZXIzLworCWluc3RhbGwgLXAgLW0gNjQ0IGZpbGU0ICR7RH0ke2RhdGFkaXJ9L3VzZXIzLworCisJIyBUaGUgbmV3IHVzZXJzIGFuZCBncm91cHMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBkb19pbnN0YWxsCisJIyBzdGVwLCBzbyB5b3UgYXJlIG5vdyBmcmVlIHRvIG1ha2UgdXNlIG9mIHRoZW06CisJY2hvd24gLVIgdXNlcjEgJHtEfSR7ZGF0YWRpcn0vdXNlcjEKKwljaG93biAtUiB1c2VyMiAke0R9JHtkYXRhZGlyfS91c2VyMgorCWNob3duIC1SIHVzZXIzICR7RH0ke2RhdGFkaXJ9L3VzZXIzCisKKwljaGdycCAtUiBncm91cDEgJHtEfSR7ZGF0YWRpcn0vdXNlcjEKKwljaGdycCAtUiBncm91cDIgJHtEfSR7ZGF0YWRpcn0vdXNlcjIKKwljaGdycCAtUiBncm91cDMgJHtEfSR7ZGF0YWRpcn0vdXNlcjMKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS91c2VyMS8qICR7ZGF0YWRpcn0vdXNlcjIvKiIKK0ZJTEVTXyR7UE59LXVzZXIzID0gIiR7ZGF0YWRpcn0vdXNlcjMvKiIKKworIyBQcmV2ZW50cyBkb19wYWNrYWdlIGZhaWx1cmVzIHdpdGg6CisjIGRlYnVnc291cmNlcy5saXN0OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTEgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMQpkaWZmIC0tZ2l0IGEvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUyIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTIKZGlmZiAtLWdpdCBhL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS1za2VsZXRvbi9yZWNpcGVzLXNrZWxldG9uL3VzZXJhZGQvdXNlcmFkZC1leGFtcGxlL2ZpbGUzCmRpZmYgLS1naXQgYS9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTQgYi9tZXRhLXNrZWxldG9uL3JlY2lwZXMtc2tlbGV0b24vdXNlcmFkZC91c2VyYWRkLWV4YW1wbGUvZmlsZTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEtc2tlbGV0b24vcmVjaXBlcy1za2VsZXRvbi91c2VyYWRkL3VzZXJhZGQtZXhhbXBsZS9maWxlNApkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvY29uZi9sYXllci5jb25mIGIvbWV0YS15b2N0by1ic3AvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGJjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInlvY3RvYnNwIgorQkJGSUxFX1BBVFRFUk5feW9jdG9ic3AgPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV95b2N0b2JzcCA9ICI1IgorTEFZRVJWRVJTSU9OX3lvY3RvYnNwID0gIjMiCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvYmVhZ2xlYm9uZS5jb25mIGIvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGFlYmYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2JlYWdsZWJvbmUuY29uZgpAQCAtMCwwICsxLDM5IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogQmVhZ2xlYm9uZSBtYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIGh0dHA6Ly9iZWFnbGVib2FyZC5vcmcvYm9uZSBhbmQgaHR0cDovL2JlYWdsZWJvYXJkLm9yZy9ibGFjayBib2FyZHMKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMga2VybmVsLWRldmljZXRyZWUiCisKK0VYVFJBX0lNQUdFREVQRU5EUyArPSAidS1ib290IgorCitERUZBVUxUVFVORSA/PSAiY29ydGV4YThoZi1uZW9uIgoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYworCitJTUFHRV9GU1RZUEVTICs9ICJ0YXIuYnoyIGpmZnMyIgorRVhUUkFfSU1BR0VDTURfamZmczIgPSAiLWxucCAiCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlPMCIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICIzLjE5JSIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ6SW1hZ2UiCitLRVJORUxfREVWSUNFVFJFRSA9ICJhbTMzNXgtYm9uZS5kdGIgYW0zMzV4LWJvbmVibGFjay5kdGIiCitLRVJORUxfRVhUUkFfQVJHUyArPSAiTE9BREFERFI9JHtVQk9PVF9FTlRSWVBPSU5UfSIKKworU1BMX0JJTkFSWSA9ICJNTE8iCitVQk9PVF9TVUZGSVggPSAiaW1nIgorVUJPT1RfTUFDSElORSA9ICJhbTMzNXhfZXZtX2NvbmZpZyIKK1VCT09UX0VOVFJZUE9JTlQgPSAiMHg4MDAwODAwMCIKK1VCT09UX0xPQURBRERSRVNTID0gIjB4ODAwMDgwMDAiCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAidXNiZ2FkZ2V0IHVzYmhvc3QgdmZhdCBhbHNhIgorCitJTUFHRV9CT09UX0ZJTEVTID89ICJ1LWJvb3QuJHtVQk9PVF9TVUZGSVh9IE1MTyIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9lZGdlcm91dGVyLmNvbmYgYi9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZWYyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZWRnZXJvdXRlci5jb25mCkBAIC0wLDAgKzEsMjIgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBFZGdlcm91dGVyCisjQERFU0NSSVBUSU9OOiBFZGdlcm91dGVyCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAicGNpIGV4dDIgZXh0MyBzZXJpYWwiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TICA9ICIuY29tbWVudCIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID89ICIzLjE5JSIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorVVNFX1ZUID89ICIwIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHgxMDAwMCIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LTY0LmNvbmYgYi9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmUzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvZ2VuZXJpY3g4Ni02NC5jb25mCkBAIC0wLDAgKzEsOCBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IEdlbmVyaWMgWDg2XzY0LgorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIGdlbmVyaWMgWDg2XzY0ICg2NC1iaXQpIFBDcyBhbmQgc2VydmVycy4gU3VwcG9ydHMgYSBtb2RlcmF0ZWx5IHdpZGUgcmFuZ2Ugb2YgZHJpdmVycyB0aGF0IHNob3VsZCBib290IGFuZCBiZSB1c2FibGUgb24gInR5cGljYWwiIGhhcmR3YXJlLgorCitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL2dlbmVyaWN4ODYuY29uZiBiL21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0MmNhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9nZW5lcmljeDg2LmNvbmYKQEAgLTAsMCArMSw4IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogR2VuZXJpYyBYODYuCisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgZ2VuZXJpYyBYODYgKDMyLWJpdCkgUENzLiBTdXBwb3J0cyBhIG1vZGVyYXRlbHkgd2lkZSByYW5nZSBvZiBkcml2ZXJzIHRoYXQgc2hvdWxkIGJvb3QgYW5kIGJlIHVzYWJsZSBvbiAidHlwaWNhbCIgaGFyZHdhcmUuCisKK0RFRkFVTFRUVU5FID89ICJjb3JlMi0zMiIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvZ2VuZXJpY3g4Ni1jb21tb24uaW5jCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMgYi9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvaW5jbHVkZS9nZW5lcmljeDg2LWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxMGI1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL2NvbmYvbWFjaGluZS9pbmNsdWRlL2dlbmVyaWN4ODYtY29tbW9uLmluYwpAQCAtMCwwICsxLDIwIEBACitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYworTUFDSElORV9GRUFUVVJFUyArPSAid2lmaSBlZmkgcGNiaW9zIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjQuMSUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICIke1hTRVJWRVJfWDg2X0JBU0V9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfRVhUfSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X0k5MTV9IFwKKyAgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTk2NX0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9GQkRFVn0gXAorICAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9WRVNBfSBcCisgICAgICAgICAgICAke1hTRVJWRVJfWDg2X01PREVTRVRUSU5HfSBcCisgICAgICAgICAgICIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAibGludXgtZmlybXdhcmUgdjg2ZCBlZWUtYWNwaS1zY3JpcHRzIgorCitHTElCQ19BRERPTlMgPSAibnB0bCIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9wbi1tYXRjaGJveC1wYW5lbC0yID0gIiAtLXdpdGgtYmF0dGVyeT1hY3BpIgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mIGIvbWV0YS15b2N0by1ic3AvY29uZi9tYWNoaW5lL21wYzgzMTVlLXJkYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZWVmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9jb25mL21hY2hpbmUvbXBjODMxNWUtcmRiLmNvbmYKQEAgLTAsMCArMSwzMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgCisKK1RBUkdFVF9GUFUgPSAiIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInVJbWFnZSIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJ1LWJvb3QiCitVQk9PVF9NQUNISU5FX21wYzgzMTVlLXJkYiA9ICJNUEM4MzE1RVJEQl9jb25maWciCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKKworTUFDSElORV9GRUFUVVJFUyA9ICJrZXlib2FyZCBwY2kgZXh0MiBleHQzIHNlcmlhbCIKKworUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG8gPz0gIjMuMTklIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID0gImxpbnV4LXlvY3RvIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IgorCitQUkVGRVJSRURfVkVSU0lPTl91LWJvb3QgPz0gInYyMDEzLjA3JSIKK1VCT09UX0VOVFJZUE9JTlQgPSAiMHgwMDAwMDAwMCIKKworS0VSTkVMX0RFVklDRVRSRUUgPSAibXBjODMxNWVyZGIuZHRiIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHg0MDAwIgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkgYi9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2JlYWdsZWJvbmV0YXJnZXQucHkgYi9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9iZWFnbGVib25ldGFyZ2V0LnB5CkBAIC0wLDAgKzEsOTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCB0byB0ZXN0aW1hZ2UuYmJjbGFzcyB0byBkZXBsb3kgaW1hZ2VzIGFuZCBydW4KKyMgdGVzdHMgb24gYSBCZWFnbGVCb25lIChvcmlnaW5hbCAid2hpdGUiIG9yIEJsYWNrIG1vZGVscykuIFRoZSBkZXZpY2UgbXVzdAorIyBiZSBzZXQgdXAgYXMgcGVyIFJFQURNRS5oYXJkd2FyZSBhbmQgdGhlIG1hc3RlciBpbWFnZSBzaG91bGQgYmUgZGVwbG95ZWQKKyMgb250byB0aGUgY2FyZCBzbyB0aGF0IGl0IGJvb3RzIGludG8gaXQgYnkgZGVmYXVsdC4gRm9yIGJvb3RpbmcgaW50byB0aGUKKyMgaW1hZ2UgdW5kZXIgdGVzdCB3ZSBpbnRlcmFjdCB3aXRoIHUtYm9vdCBvdmVyIHNlcmlhbCwgc28gZm9yIHRoZQorIyBCZWFnbGVCb25lIEJsYWNrIHlvdSB3aWxsIG5lZWQgYW4gYWRkaXRpb25hbCBUVEwgc2VyaWFsIGNhYmxlIHNpbmNlIGEKKyMgc2VyaWFsIGludGVyZmFjZSBpc24ndCBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIG92ZXIgdGhlIFVTQiBjb25uZWN0aW9uIGFzCisjIGl0IGlzIG9uIHRoZSBvcmlnaW5hbCBCZWFnbGVCb25lICgid2hpdGUiKSB2ZXJzaW9uLiBUaGUgc2VwYXJhdGUgZXh0MworIyBwYXJ0aXRpb24gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGltYWdlIHRvIGJlIHRlc3RlZCBtdXN0IGJlIGxhYmVsbGVkCisjICJ0ZXN0cm9vdGZzIiBzbyB0aGF0IHRoZSBkZXBsb3ltZW50IGNvZGUgYmVsb3cgY2FuIGZpbmQgaXQuCisjCisjIE5PVEU6IGZvciB0aGUgQmVhZ2xlQm9uZSAid2hpdGUiIChvcmlnaW5hbCB2ZXJzaW9uKSB5b3UgbWF5IG5lZWQgdG8gdXNlCisjIGEgc2NyaXB0IHdoaWNoIGhhbmRsZXMgdGhlIHNlcmlhbCBkZXZpY2UgZGlzYXBwZWFyaW5nIG9uIHBvd2VyIGRvd24sIHN1Y2gKKyMgYXMgc2NyaXB0cy9jb250cmliL3NlcmRldnRyeSBpbiBPRS1Db3JlLgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgcGV4cGVjdAorCitpbXBvcnQgb2VxYS51dGlscy5zc2hjb250cm9sIGFzIHNzaGNvbnRyb2wKK2Zyb20gb2VxYS5jb250cm9sbGVycy5tYXN0ZXJpbWFnZSBpbXBvcnQgTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldAorCisKK2NsYXNzIEJlYWdsZUJvbmVUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkdGJzID0geyd1SW1hZ2UtYW0zMzV4LWJvbmUuZHRiJzogJ2FtMzM1eC1ib25lLmR0YicsICd1SW1hZ2UtYW0zMzV4LWJvbmVibGFjay5kdGInOiAnYW0zMzV4LWJvbmVibGFjay5kdGInfQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5kdGJzLmtleXMoKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoQmVhZ2xlQm9uZVRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKworICAgICAgICBzZWxmLmltYWdlX2ZzdHlwZSA9IHNlbGYuZ2V0X2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBzZWxmLmRlcGxveV9jbWRzID0gWworICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgJ1sgLWUgL21udC90ZXN0cm9vdGZzL2Jvb3QvdUltYWdlIF0gfHwgWyAtTCAvbW50L3Rlc3Ryb290ZnMvYm9vdC91SW1hZ2UgXSB8fCBjcCB+L3Rlc3Qta2VybmVsIC9tbnQvdGVzdHJvb3Rmcy9ib290L3VJbWFnZScsCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgIGZvciBfLCBkdGJmbiBpbiBzZWxmLmR0YnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAjIEtlcm5lbCBhbmQgZHRiIGZpbGVzIG1heSBub3QgYmUgaW4gdGhlIGltYWdlLCBzbyBjb3B5IHRoZW0gaWYgbm90CisgICAgICAgICAgICBzZWxmLmRlcGxveV9jbWRzLmFwcGVuZCgnWyAtZSAvbW50L3Rlc3Ryb290ZnMvYm9vdC97MH0gXSB8fCBjcCB+L3swfSAvbW50L3Rlc3Ryb290ZnMvYm9vdC8nLmZvcm1hdChkdGJmbikpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBURVNUX1RBUkdFVCBuZWVkcyBhIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgZGVmaW5lZCBpbiBsb2NhbC5jb25mLiIpCisKKworICAgIGRlZiBfZGVwbG95KHNlbGYpOgorICAgICAgICBzZWxmLm1hc3Rlci5ydW4oInVtb3VudCAvYm9vdDsgdW1vdW50IC9tbnQvdGVzdHJvb3RmczsiKQorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgIyBLZXJuZWwgYW5kIGR0YiBmaWxlcyBtYXkgbm90IGJlIGluIHRoZSBpbWFnZSwgc28gY29weSB0aGVtIGp1c3QgaW4gY2FzZQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGtlcm5lbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5rZXJuZWwpCisgICAgICAgIGZvciBkdGJvcmlnLCBkdGJmbiBpbiBzZWxmLmR0YnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBkdGJmaWxlID0gb3MucGF0aC5qb2luKGtlcm5lbHBhdGgsIGR0Ym9yaWcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkdGJmaWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKGR0YmZpbGUsICJ+LyVzIiAlIGR0YmZuKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYucm9vdGZzLCAifi90ZXN0LXJvb3Rmcy4lcyIgJSBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmRlcGxveV9jbWRzOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIucnVuKGNtZCkKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYubWFzdGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICAjIFdlJ2Qgd2FpdCBmb3IgIlUtQm9vdCIgaGVyZSBidXQgc29tZXRpbWVzIHdlIGNvbm5lY3QgdG9vIGxhdGUgb24gQmVhZ2xlQm9uZSB3aGl0ZSB0byBzZWUgaXQKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJOQU5EOiIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiTU1DOiIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJhIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJVLUJvb3QjIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uc2VuZGxpbmUoInNldGVudiBib290cGFydCAwOjMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgic2V0ZW52IG1tY3Jvb3QgL2Rldi9tbWNibGswcDMgcm8iKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgiYm9vdCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKKworICAgIGRlZiBfd2FpdF91bnRpbF9ib290ZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvbGliL29lcWEvY29udHJvbGxlcnMvZWRnZXJvdXRlcnRhcmdldC5weSBiL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzMzhjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2VkZ2Vyb3V0ZXJ0YXJnZXQucHkKQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyBvbiBhIFViaXF1aXRpIE5ldHdvcmtzIEVkZ2VSb3V0ZXIgTGl0ZS4gVGhlIGRldmljZSBtdXN0IGJlIHNldCB1cAorIyB0byBib290IGludG8gdGhlIG1hc3RlciBpbWFnZSBhbHJlYWR5IC0gdGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgYXMKKyMgZm9sbG93czoKKyMKKyMgMS4gVGFrZSBvdXQgdGhlIGludGVybmFsIFVTQiBkcml2ZSBhbmQgcGx1ZyBpdCBpbnRvIHlvdXIgUEMKKyMgMi4gUmVwYXJ0aXRpb24gdGhlIFVTQiBkcml2ZSBzbyB0aGF0IHlvdSBoYXZlIHRocmVlIHBhcnRpdGlvbnMgaW4gdGhpcworIyAgICBvcmRlcjoKKyMgICAgICAxOiB2ZmF0LCBsYWJlbGxlZCAiYm9vdCIgKGl0IHdpbGwgbmVlZCB0byBiZSBmb3JtYXR0ZWQgd2l0aCBta2ZzLnZmYXQKKyMgICAgICAgICBmb3IgdGhpcyB0byBiZSBwb3NzaWJsZSwgc2luY2UgRkFUIHBhcnRpdGlvbnMgZm9ybWF0dGVkIHVuZGVyCisjICAgICAgICAgRE9TL1dpbmRvd3Mgd2lsbCBvbmx5IHN1cHBvcnQgdXBwZXJjYXNlIGxhYmVscykKKyMgICAgICAyOiBleHQzIChmb3IgbWFzdGVyIGltYWdlKSBsYWJlbGxlZCAidGVzdG1hc3RlciIKKyMgICAgICAzOiBleHQzIChmb3IgaW1hZ2UgdW5kZXIgdGVzdCkgbGFiZWxsZWQgInRlc3Ryb290ZnMiCisjIDMuIENvcHkgdGhlIGtlcm5lbCB0byBiZSB1c2VkIGJ5IHRoZSBtYXN0ZXIgaW1hZ2UgdG8gdGhlIEZBVCBwYXJ0aXRpb24KKyMgICAgKGl0IHNob3VsZCBiZSBuYW1lZCAidm1saW51eC42NCIgd2l0aCB0aGUgZmFjdG9yeSB1LWJvb3QgY29uZmlndXJhdGlvbikKKyMgNC4gSW5zdGFsbCB0aGUgbWFzdGVyIGltYWdlIG9udG8gdGhlICJ0ZXN0bWFzdGVyIiBleHQzIHBhcnRpdGlvbi4gSWYKKyMgICAgeW91IGRvIHRoaXMgYnkganVzdCBleHRyYWN0aW5nIHRoZSBjb250ZW50cyBvZiBhbiBpbWFnZSBvbnRvIHRoZQorIyAgICBwYXJ0aXRpb24sIHlvdSB3aWxsIGFsc28gbGlrZWx5IG5lZWQgdG8gY3JlYXRlIHRoZSBtYXN0ZXIgaW1hZ2UgbWFya2VyCisjICAgIGZpbGUgL2V0Yy9tYXN0ZXJpbWFnZSB3aXRoaW4gdGhpcyBwYXJ0aXRpb24gc28gdGhhdCB3ZSBjYW4gdGVsbCB3aGVuCisjICAgIHdlJ3JlIGJvb3RlZCBpbnRvIGl0IHRoYXQgaXQgaXMgdGhlIG1hc3RlciBpbWFnZS4KKyMgNS4gUHV0IHRoZSBVU0IgZHJpdmUgYmFjayBpbnRvIHRoZSBkZXZpY2UsIGFuZCBlbnN1cmUgdGhlIGNvbnNvbGUgcG9ydAorIyAgICBhbmQgZmlyc3QgZXRoZXJuZXQgcG9ydCBhcmUgY29ubmVjdGVkIGJlZm9yZSBwb3dlcmluZyBvbgorIworIyBURVNUX1NFUklBTENPTlRST0xfQ01EIHdpbGwgbmVlZCB0byBiZSBzZXQgaW4gbG9jYWwuY29uZiBzbyB0aGF0IHdlIGNhbgorIyBpbnRlcmFjdCB3aXRoIHUtYm9vdCBvdmVyIHRoZSBzZXJpYWwgY29uc29sZSBwb3J0LgorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgcGV4cGVjdAorCitpbXBvcnQgb2VxYS51dGlscy5zc2hjb250cm9sIGFzIHNzaGNvbnRyb2wKK2Zyb20gb2VxYS5jb250cm9sbGVycy5tYXN0ZXJpbWFnZSBpbXBvcnQgTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldAorCisKK2NsYXNzIEVkZ2VSb3V0ZXJUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKEVkZ2VSb3V0ZXJUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKwlzZWxmLmltYWdlX2ZzdHlwZSA9IHNlbGYuZ2V0X2ltYWdlX2ZzdHlwZShkKQorICAgICAgICBzZWxmLmRlcGxveV9jbWRzID0gWworICAgICAgICAgICAgICAgICdtb3VudCAtTCBib290IC9ib290JywKKyAgICAgICAgICAgICAgICAnbWtkaXIgLXAgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgdGVzdHJvb3RmcyAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdjcCB+L3Rlc3Qta2VybmVsIC9ib290JywKKyAgICAgICAgICAgICAgICAncm0gLXJmIC9tbnQvdGVzdHJvb3Rmcy8qJywKKyAgICAgICAgICAgICAgICAndGFyIHh2ZiB+L3Rlc3Qtcm9vdGZzLiVzIC1DIC9tbnQvdGVzdHJvb3RmcycgJSBzZWxmLmltYWdlX2ZzdHlwZQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgbm90IHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBiYi5mYXRhbCgiVGhpcyBURVNUX1RBUkdFVCBuZWVkcyBhIFRFU1RfU0VSSUFMQ09OVFJPTF9DTUQgZGVmaW5lZCBpbiBsb2NhbC5jb25mLiIpCisKKworICAgIGRlZiBfZGVwbG95KHNlbGYpOgorICAgICAgICBzZWxmLm1hc3Rlci5ydW4oInVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IikKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5rZXJuZWwsICJ+L3Rlc3Qta2VybmVsIikKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuJXMiICUgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoIlUtQm9vdCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJhIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJPY3Rlb24gdWJudF9lMTAwIyIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJmYXRsb2FkIHVzYiAwOjEgJGxvYWRhZGRyIHRlc3Qta2VybmVsIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCIgYnl0ZXMgcmVhZCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgiT2N0ZW9uIHVibnRfZTEwMCMiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5zZW5kbGluZSgiYm9vdG9jdGxpbnV4ICRsb2FkYWRkciBjb3JlbWFzaz0weDMgcm9vdD0vZGV2L3NkYTMgcncgcm9vdHdhaXQgbXRkcGFydHM9cGh5c19tYXBwZWRfZmxhc2g6NTEyayhib290MCksNTEyayhib290MSksNjRrQDMwNzJrKGVlcHJvbSkiKQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJpYWxjb25uID0gcGV4cGVjdC5zcGF3bihzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBlbnY9c2VsZi5vcmlnZW52LCBsb2dmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZXJpYWxjb25uLmV4cGVjdCgibG9naW46IiwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZXJpYWxjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHBleHBlY3QuRXhjZXB0aW9uUGV4cGVjdCBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1NlcmlhbCBpbnRlcmFjdGlvbiBmYWlsZWQ6ICVzJyAlIHN0cihlKSkKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL2NvbnRyb2xsZXJzL2dydWJ0YXJnZXQucHkgYi9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzgwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9jb250cm9sbGVycy9ncnVidGFyZ2V0LnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCB0byB0ZXN0aW1hZ2UuYmJjbGFzcyB0byBkZXBsb3kgaW1hZ2VzIGFuZCBydW4KKyMgdGVzdHMgb24gYSBHZW5lcmljIFBDIHRoYXQgYm9vdHMgdXNpbmcgZ3J1YiBib290bG9hZGVyLiBUaGUgZGV2aWNlIG11c3QKKyMgYmUgc2V0IHVwIGFzIHBlciBSRUFETUUuaGFyZHdhcmUgYW5kIHRoZSBtYXN0ZXIgaW1hZ2Ugc2hvdWxkIGJlIGRlcGxveWVkCisjIG9udG8gdGhlIGhhcmRkaXNrIHNvIHRoYXQgaXQgYm9vdHMgaW50byBpdCBieSBkZWZhdWx0LkZvciBib290aW5nIGludG8gdGhlCisjIGltYWdlIHVuZGVyIHRlc3Qgd2UgaW50ZXJhY3Qgd2l0aCBncnViIG92ZXIgc2VyaWFsLCBzbyBmb3IgdGhlCisjIEdlbmVyaWMgUEMgeW91IHdpbGwgbmVlZCBhbiBhZGRpdGlvbmFsIHNlcmlhbCBjYWJsZSBhbmQgZGV2aWNlIHVuZGVyIHRlc3QKKyMgbmVlZHMgdG8gaGF2ZSBhIHNlcmlhbCBpbnRlcmZhY2UuIFRoZSBzZXBhcmF0ZSBleHQzCisjIHBhcnRpdGlvbiB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkIG11c3QgYmUgbGFiZWxsZWQKKyMgInRlc3Ryb290ZnMiIHNvIHRoYXQgdGhlIGRlcGxveW1lbnQgY29kZSBiZWxvdyBjYW4gZmluZCBpdC4KKworaW1wb3J0IG9zCitpbXBvcnQgYmIKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHBleHBlY3QKKworaW1wb3J0IG9lcWEudXRpbHMuc3NoY29udHJvbCBhcyBzc2hjb250cm9sCitmcm9tIG9lcWEuY29udHJvbGxlcnMubWFzdGVyaW1hZ2UgaW1wb3J0IE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQKKworY2xhc3MgR3J1YlRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoR3J1YlRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IFsKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgYm9vdCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnY3Agfi90ZXN0LWtlcm5lbCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgIGlmIG5vdCBzZWxmLnNlcmlhbGNvbnRyb2xfY21kOgorICAgICAgICAgICAgYmIuZmF0YWwoIlRoaXMgVEVTVF9UQVJHRVQgbmVlZHMgYSBURVNUX1NFUklBTENPTlRST0xfQ01EIGRlZmluZWQgaW4gbG9jYWwuY29uZi4iKQorCisKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IG1vdW50ZWQKKyAgICAgICAgc2VsZi5tYXN0ZXIucnVuKCJ1bW91bnQgL2Jvb3Q7IHVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IikKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgICMgS2VybmVsIGZpbGVzIG1heSBub3QgYmUgaW4gdGhlIGltYWdlLCBzbyBjb3B5IHRoZW0ganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiIgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcmlhbGNvbm4gPSBwZXhwZWN0LnNwYXduKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIGVudj1zZWxmLm9yaWdlbnYsIGxvZ2ZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJHTlUgR1JVQiAgdmVyc2lvbiAyLjAwIikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJMaW51eCIpCisgICAgICAgICAgICBzZXJpYWxjb25uLnNlbmRsaW5lKCJ4IikKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uZXhwZWN0KCJsb2dpbjoiLCB0aW1lb3V0PTEyMCkKKyAgICAgICAgICAgIHNlcmlhbGNvbm4uY2xvc2UoKQorICAgICAgICBleGNlcHQgcGV4cGVjdC5FeGNlcHRpb25QZXhwZWN0IGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgnU2VyaWFsIGludGVyYWN0aW9uIGZhaWxlZDogJXMnICUgc3RyKGUpKQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VyaWFsY29ubiA9IHBleHBlY3Quc3Bhd24oc2VsZi5zZXJpYWxjb250cm9sX2NtZCwgZW52PXNlbGYub3JpZ2VudiwgbG9nZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgc2VyaWFsY29ubi5leHBlY3QoImxvZ2luOiIsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VyaWFsY29ubi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBwZXhwZWN0LkV4Y2VwdGlvblBleHBlY3QgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCdTZXJpYWwgaW50ZXJhY3Rpb24gZmFpbGVkOiAlcycgJSBzdHIoZSkpCisKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5IGIvbWV0YS15b2N0by1ic3AvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9ndW1taWJvb3QucHkgYi9tZXRhLXlvY3RvLWJzcC9saWIvb2VxYS9zZWxmdGVzdC9ndW1taWJvb3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL2xpYi9vZXFhL3NlbGZ0ZXN0L2d1bW1pYm9vdC5weQpAQCAtMCwwICsxLDgzIEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQoraW1wb3J0IHJlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCisKKworY2xhc3MgR3VtbWlib290KG9lU2VsZlRlc3QpOgorCisgICAgZGVmIF9jb21tb25fc2V0dXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDb21tb24gc2V0dXAgZm9yIHRlc3QgY2FzZXM6IDExMDEsIDExMDMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBTZXQgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIgYW5kIE1BQ0hJTkUgPSAiZ2VuZXJpY3g4Ni02NCIgaW4gY29uZi9sb2NhbC5jb25mCisgICAgICAgIGZlYXR1cmVzID0gJ0VGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdNQUNISU5FID0gImdlbmVyaWN4ODYtNjQiJworICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICBkZWYgX2NvbW1vbl9idWlsZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbW1vbiBidWlsZCBmb3IgdGVzdCBjYXNlczogMTEwMSwgMTEwMworICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgZ2VuZXJpY3g4Ni02NC9lZmkgZ3VtbWlib290IGltYWdlCisgICAgICAgIGJpdGJha2UoJ3N5c2xpbnV4IHN5c2xpbnV4LW5hdGl2ZSBwYXJ0ZWQtbmF0aXZlIGRvc2ZzdG9vbHMtbmF0aXZlIG10b29scy1uYXRpdmUgY29yZS1pbWFnZS1taW5pbWFsJykKKworCisgICAgQHRlc3RjYXNlKDExMDEpCisgICAgZGVmIHRlc3RfZWZpX2d1bW1pYm9vdF9pbWFnZXNfY2FuX2JlX2J1aWx0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIGlmIGVmaS9ndW1taWJvb3QgaW1hZ2VzIGNhbiBiZSBidWlsdAorICAgICAgICBFeHBlY3RlZDogICAgMS4gRmlsZSBndW1taWJvb3R4NjQuZWZpIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gYnVpbGQvdG1wL2RlcGxveS9pbWFnZXMvZ2VuZXJpY3g4Ni02NAorICAgICAgICAgICAgICAgICAgICAgMi4gRWZpL2d1bW1pYm9vdCBpbWFnZXMgY2FuIGJlIGJ1aWx0CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSdkIHVzZSBERVBMT1lfRElSX0lNQUdFIGhlcmUsIGV4Y2VwdCB0aGF0IHdlIG5lZWQgaXRzIHZhbHVlIGZvcgorICAgICAgICAjIE1BQ0hJTkU9ImdlbmVyaWN4ODYtNjQgd2hpY2ggaXMgcHJvYmFibHkgbm90IHRoZSBvbmUgY29uZmlndXJlZAorICAgICAgICBndW1taWJvb3RmaWxlID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ0RFUExPWV9ESVInKSwgJ2ltYWdlcycsICdnZW5lcmljeDg2LTY0JywgJ2d1bW1pYm9vdHg2NC5lZmknKQorCisgICAgICAgIHNlbGYuX2NvbW1vbl9zZXR1cCgpCisKKyAgICAgICAgIyBFbnN1cmUgd2UncmUgYWN0dWFsbHkgdGVzdGluZyB0aGF0IHRoaXMgZ2V0cyBidWlsdCBhbmQgbm90IHRoYXQKKyAgICAgICAgIyBpdCB3YXMgYXJvdW5kIGZyb20gYW4gZWFybGllciBidWlsZAorICAgICAgICBiaXRiYWtlKCctYyBjbGVhbnNzdGF0ZSBndW1taWJvb3QnKQorICAgICAgICBydW5DbWQoJ3JtIC1mICVzJyAlIGd1bW1pYm9vdGZpbGUpCisKKyAgICAgICAgc2VsZi5fY29tbW9uX2J1aWxkKCkKKworICAgICAgICBmb3VuZCA9IG9zLnBhdGguaXNmaWxlKGd1bW1pYm9vdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgJ0d1bW1pYm9vdCBmaWxlICVzIG5vdCBmb3VuZCcgJSBndW1taWJvb3RmaWxlKQorCisgICAgQHRlc3RjYXNlKDExMDMpCisgICAgZGVmIHRlc3Rfd2ljX2NvbW1hbmRfY2FuX2NyZWF0ZV9lZmlfZ3VtbWlib290X2luc3RhbGxhdGlvbl9pbWFnZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgdGhhdCB3aWMgY29tbWFuZCBjYW4gY3JlYXRlIGVmaS9ndW1taWJvb3QgaW5zdGFsbGF0aW9uIGltYWdlcworICAgICAgICBFeHBlY3RlZDogICAgQSAuZGlyZWN0IGZpbGUgaW4gZm9sZGVyIC92YXIvdG1wL3dpYy8gbXVzdCBiZSBjcmVhdGVkLgorICAgICAgICBQcm9kdWN0OiAgICAgb2UtY29yZQorICAgICAgICBBdXRob3I6ICAgICAgSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2NvbW1vbl9zZXR1cCgpCisgICAgICAgIHNlbGYuX2NvbW1vbl9idWlsZCgpCisKKyAgICAgICAgIyBDcmVhdGUgZWZpL2d1bW1pYm9vdCBpbnN0YWxsYXRpb24gaW1hZ2VzCisgICAgICAgIHdpY19jcmVhdGVfY21kID0gJ3dpYyBjcmVhdGUgbWtndW1taWRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICByZXN1bHQgPSBydW5DbWQod2ljX2NyZWF0ZV9jbWQpCisKKyAgICAgICAgIyBGaW5kIGZpbGUgd3JpdHRlbiBieSB3aWMgZnJvbSBvdXRwdXQKKyAgICAgICAgcmVzID0gcmUuc2VhcmNoKCcoL3Zhci90bXAvd2ljLy4qXC5kaXJlY3QpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgZGlyZWN0X2ZpbGUgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgICMgQ2hlY2sgaXQgYWN0dWFsbHkgZXhpc3RzCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlyZWN0X2ZpbGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnd2ljIHJlcG9ydGVkIGRpcmVjdCBmaWxlICIlcyIgZG9lcyBub3QgZXhpc3Q7IHdpYyBvdXRwdXQ6XG4lcycgJSAoZGlyZWN0X2ZpbGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdObyAuZGlyZWN0IGZpbGUgcmVwb3J0ZWQgaW4gd2ljIG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmJhcHBlbmQgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYmVhZ2xlYm9hcmQvYXNvdW5kLnN0YXRlIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTI0NDkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2JlYWdsZWJvYXJkL2Fzb3VuZC5zdGF0ZQpAQCAtMCwwICsxLDY1NiBAQAorc3RhdGUub21hcDNiZWFnbGUgeworCWNvbnRyb2wuMSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ09wdGlvbiAyICh2b2ljZS9hdWRpbyknCisJCWNvbW1lbnQuaXRlbS4xICdPcHRpb24gMSAoYXVkaW8pJworCQlpZmFjZSBNSVhFUgorCQluYW1lICdDb2RlYyBPcGVyYXRpb24gTW9kZScKKwkJdmFsdWUgJ09wdGlvbiAxIChhdWRpbyknCisJfQorCWNvbnRyb2wuMiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDYzJworCQljb21tZW50LmRibWluIC02MzAwCisJCWNvbW1lbnQuZGJtYXggMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMxIERpZ2l0YWwgRmluZSBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4zIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gNjMnCisJCWNvbW1lbnQuZGJtaW4gLTYzMDAKKwkJY29tbWVudC5kYm1heCAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzIgRGlnaXRhbCBGaW5lIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCA1MAorCQl2YWx1ZS4xIDUwCisJfQorCWNvbnRyb2wuNCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDInCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMSBEaWdpdGFsIENvYXJzZSBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC41IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMicKKwkJY29tbWVudC5kYm1pbiAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMyIERpZ2l0YWwgQ29hcnNlIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAyCisJCXZhbHVlLjEgMgorCX0KKwljb250cm9sLjYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAyCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAxOCcKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMSBBbmFsb2cgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuNyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDE4JworCQljb21tZW50LmRibWluIC0yNDAwCisJCWNvbW1lbnQuZGJtYXggMTIwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdEQUMyIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUnCisJCXZhbHVlLjAgMTUKKwkJdmFsdWUuMSAxNQorCX0KKwljb250cm9sLjggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAyCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQzEgQW5hbG9nIFBsYXliYWNrIFN3aXRjaCcKKwkJdmFsdWUuMCBmYWxzZQorCQl2YWx1ZS4xIGZhbHNlCisJfQorCWNvbnRyb2wuOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDMiBBbmFsb2cgUGxheWJhY2sgU3dpdGNoJworCQl2YWx1ZS4wIHRydWUKKwkJdmFsdWUuMSB0cnVlCisJfQorCWNvbnRyb2wuMTAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSA0OScKKwkJY29tbWVudC5kYm1pbiAtMzcwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDIFZvaWNlIERpZ2l0YWwgRG93bmxpbmsgVm9sdW1lJworCQl2YWx1ZSAwCisJfQorCWNvbnRyb2wuMTEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAxOCcKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDEyMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnREFDIFZvaWNlIEFuYWxvZyBEb3dubGluayBWb2x1bWUnCisJCXZhbHVlIDE4CisJfQorCWNvbnRyb2wuMTIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0RBQyBWb2ljZSBBbmFsb2cgRG93bmxpbmsgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjEzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMycKKwkJY29tbWVudC5kYm1pbiAtMTIwMAorCQljb21tZW50LmRibWF4IDYwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVEcml2IFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAwCisJCXZhbHVlLjEgMAorCX0KKwljb250cm9sLjE0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMycKKwkJY29tbWVudC5kYm1pbiAtMTIwMAorCQljb21tZW50LmRibWF4IDYwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIZWFkc2V0IFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUuMCAzCisJCXZhbHVlLjEgMworCX0KKwljb250cm9sLjE1IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMycKKwkJY29tbWVudC5kYm1pbiAtMTIwMAorCQljb21tZW50LmRibWF4IDYwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXQgUGxheWJhY2sgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuMTYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIElOVEVHRVIKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQucmFuZ2UgJzAgLSAzJworCQljb21tZW50LmRibWluIC02MDAKKwkJY29tbWVudC5kYm1heCAxMjAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIFBsYXliYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjE3IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMzEnCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDMxMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVFgxIERpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUnCisJCXZhbHVlLjAgMTIKKwkJdmFsdWUuMSAxMgorCX0KKwljb250cm9sLjE4IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMgorCQljb21tZW50LnJhbmdlICcwIC0gMzEnCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDMxMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVFgyIERpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUnCisJCXZhbHVlLjAgMAorCQl2YWx1ZS4xIDAKKwl9CisJY29udHJvbC4xOSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDIKKwkJY29tbWVudC5yYW5nZSAnMCAtIDUnCisJCWNvbW1lbnQuZGJtaW4gMAorCQljb21tZW50LmRibWF4IDMwMDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIENhcHR1cmUgVm9sdW1lJworCQl2YWx1ZS4wIDAKKwkJdmFsdWUuMSAwCisJfQorCWNvbnRyb2wuMjAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICdWb2ljZSBoaWdoIHByaW9yaXR5JworCQljb21tZW50Lml0ZW0uMSAnSGlGaSBoaWdoIHByaW9yaXR5JworCQlpZmFjZSBNSVhFUgorCQluYW1lICdBVkFEQyBDbG9jayBQcmlvcml0eScKKwkJdmFsdWUgJ1ZvaWNlIGhpZ2ggcHJpb3JpdHknCisJfQorCWNvbnRyb2wuMjEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICcyNy8yMC8xNCBtcycKKwkJY29tbWVudC5pdGVtLjEgJzU1LzQwLzI3IG1zJworCQljb21tZW50Lml0ZW0uMiAnMTA5LzgxLzU1IG1zJworCQljb21tZW50Lml0ZW0uMyAnMjE4LzE2MS8xMDkgbXMnCisJCWNvbW1lbnQuaXRlbS40ICc0MzcvMzIzLzIxOCBtcycKKwkJY29tbWVudC5pdGVtLjUgJzg3NC82NDUvNDM3IG1zJworCQljb21tZW50Lml0ZW0uNiAnMTc0OC8xMjkxLzg3NCBtcycKKwkJY29tbWVudC5pdGVtLjcgJzM0OTUvMjU4MS8xNzQ4IG1zJworCQlpZmFjZSBNSVhFUgorCQluYW1lICdIUyByYW1wIGRlbGF5JworCQl2YWx1ZSAnMjcvMjAvMTQgbXMnCisJfQorCWNvbnRyb2wuMjIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICdWaWJyYSBILWJyaWRnZSBkaXJlY3Rpb24nCisJCWNvbW1lbnQuaXRlbS4xICdBdWRpbyBkYXRhIE1TQicKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVmlicmEgSC1icmlkZ2UgbW9kZScKKwkJdmFsdWUgJ1ZpYnJhIEgtYnJpZGdlIGRpcmVjdGlvbicKKwl9CisJY29udHJvbC4yMyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgJ1Bvc2l0aXZlIHBvbGFyaXR5JworCQljb21tZW50Lml0ZW0uMSAnTmVnYXRpdmUgcG9sYXJpdHknCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ZpYnJhIEgtYnJpZGdlIGRpcmVjdGlvbicKKwkJdmFsdWUgJ1Bvc2l0aXZlIHBvbGFyaXR5JworCX0KKwljb250cm9sLjI0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgUmlnaHQgU3ViIE1pYyBDYXB0dXJlIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4yNSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIFJpZ2h0IEFVWFIgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC4yNiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQW5hbG9nIExlZnQgTWFpbiBNaWMgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMjcgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBMZWZ0IEhlYWRzZXQgTWljIENhcHR1cmUgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjI4IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdBbmFsb2cgTGVmdCBBVVhMIENhcHR1cmUgU3dpdGNoJworCQl2YWx1ZSB0cnVlCisJfQorCWNvbnRyb2wuMjkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0FuYWxvZyBMZWZ0IENhcmtpdCBNaWMgQ2FwdHVyZSBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMzAgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wIEFuYWxvZworCQljb21tZW50Lml0ZW0uMSBEaWdpbWljMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDIgQ2FwdHVyZSBSb3V0ZScKKwkJdmFsdWUgQW5hbG9nCisJfQorCWNvbnRyb2wuMzEgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wIEFuYWxvZworCQljb21tZW50Lml0ZW0uMSBEaWdpbWljMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdUWDEgQ2FwdHVyZSBSb3V0ZScKKwkJdmFsdWUgQW5hbG9nCisJfQorCWNvbnRyb2wuMzIgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wICdMb2NhbCB2aWJyYXRvcicKKwkJY29tbWVudC5pdGVtLjEgQXVkaW8KKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVmlicmEgUm91dGUnCisJCXZhbHVlICdMb2NhbCB2aWJyYXRvcicKKwl9CisJY29udHJvbC4zMyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgQXVkaW9MMQorCQljb21tZW50Lml0ZW0uMSBBdWRpb1IxCisJCWNvbW1lbnQuaXRlbS4yIEF1ZGlvTDIKKwkJY29tbWVudC5pdGVtLjMgQXVkaW9SMgorCQlpZmFjZSBNSVhFUgorCQluYW1lICdWaWJyYSBNdXgnCisJCXZhbHVlIEF1ZGlvTDEKKwl9CisJY29udHJvbC4zNCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGFuZHNmcmVlUiBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMzUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEVOVU1FUkFURUQKKwkJY29tbWVudC5jb3VudCAxCisJCWNvbW1lbnQuaXRlbS4wIFZvaWNlCisJCWNvbW1lbnQuaXRlbS4xIEF1ZGlvUjEKKwkJY29tbWVudC5pdGVtLjIgQXVkaW9SMgorCQljb21tZW50Lml0ZW0uMyBBdWRpb0wyCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hhbmRzZnJlZVIgTXV4JworCQl2YWx1ZSBWb2ljZQorCX0KKwljb250cm9sLjM2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdIYW5kc2ZyZWVMIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC4zNyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgRU5VTUVSQVRFRAorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5pdGVtLjAgVm9pY2UKKwkJY29tbWVudC5pdGVtLjEgQXVkaW9MMQorCQljb21tZW50Lml0ZW0uMiBBdWRpb0wyCisJCWNvbW1lbnQuaXRlbS4zIEF1ZGlvUjIKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGFuZHNmcmVlTCBNdXgnCisJCXZhbHVlIFZvaWNlCisJfQorCWNvbnRyb2wuMzggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdFIgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuMzkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdFIgTWl4ZXIgQXVkaW9SMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40MCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnQ2Fya2l0UiBNaXhlciBBdWRpb1IyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQxIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXRMIE1peGVyIFZvaWNlJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjQyIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdDYXJraXRMIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0NhcmtpdEwgTWl4ZXIgQXVkaW9MMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC40NCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldFIgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRSIE1peGVyIEF1ZGlvUjEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDYgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRSIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC40NyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnSGVhZHNldEwgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRMIE1peGVyIEF1ZGlvTDEnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNDkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0hlYWRzZXRMIE1peGVyIEF1ZGlvTDInCisJCXZhbHVlIHRydWUKKwl9CisJY29udHJvbC41MCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVSIE1peGVyIFZvaWNlJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjUxIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZVIgTWl4ZXIgQXVkaW9SMScKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41MiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVSIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTMgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlUiBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU0IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZUwgTWl4ZXIgVm9pY2UnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTUgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1ByZWRyaXZlTCBNaXhlciBBdWRpb0wxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU2IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdQcmVkcml2ZUwgTWl4ZXIgQXVkaW9MMicKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC41NyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUHJlZHJpdmVMIE1peGVyIEF1ZGlvUjInCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNTggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0VhcnBpZWNlIE1peGVyIFZvaWNlJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjU5IHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdFYXJwaWVjZSBNaXhlciBBdWRpb0wxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjYwIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdFYXJwaWVjZSBNaXhlciBBdWRpb0wyJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjYxIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBCT09MRUFOCisJCWNvbW1lbnQuY291bnQgMQorCQlpZmFjZSBNSVhFUgorCQluYW1lICdFYXJwaWVjZSBNaXhlciBBdWRpb1IxJworCQl2YWx1ZSBmYWxzZQorCX0KKwljb250cm9sLjYyIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50LnJhbmdlICcwIC0gNDEnCisJCWNvbW1lbnQuZGJtaW4gLTUxMDAKKwkJY29tbWVudC5kYm1heCAtMTAwMAorCQlpZmFjZSBNSVhFUgorCQluYW1lICdWb2ljZSBEaWdpdGFsIExvb3BiYWNrIFZvbHVtZScKKwkJdmFsdWUgMAorCX0KKwljb250cm9sLjYzIHsKKwkJY29tbWVudC5hY2Nlc3MgJ3JlYWQgd3JpdGUnCisJCWNvbW1lbnQudHlwZSBJTlRFR0VSCisJCWNvbW1lbnQuY291bnQgMQorCQljb21tZW50LnJhbmdlICcwIC0gNycKKwkJY29tbWVudC5kYm1pbiAtMjQwMAorCQljb21tZW50LmRibWF4IDAKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUmlnaHQgRGlnaXRhbCBMb29wYmFjayBWb2x1bWUnCisJCXZhbHVlIDAKKwl9CisJY29udHJvbC42NCB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgSU5URUdFUgorCQljb21tZW50LmNvdW50IDEKKwkJY29tbWVudC5yYW5nZSAnMCAtIDcnCisJCWNvbW1lbnQuZGJtaW4gLTI0MDAKKwkJY29tbWVudC5kYm1heCAwCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0xlZnQgRGlnaXRhbCBMb29wYmFjayBWb2x1bWUnCisJCXZhbHVlIDAKKwl9CisJY29udHJvbC42NSB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnVm9pY2UgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42NiB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnTGVmdDIgQW5hbG9nIExvb3BiYWNrIFN3aXRjaCcKKwkJdmFsdWUgZmFsc2UKKwl9CisJY29udHJvbC42NyB7CisJCWNvbW1lbnQuYWNjZXNzICdyZWFkIHdyaXRlJworCQljb21tZW50LnR5cGUgQk9PTEVBTgorCQljb21tZW50LmNvdW50IDEKKwkJaWZhY2UgTUlYRVIKKwkJbmFtZSAnUmlnaHQyIEFuYWxvZyBMb29wYmFjayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjggeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ0xlZnQxIEFuYWxvZyBMb29wYmFjayBTd2l0Y2gnCisJCXZhbHVlIGZhbHNlCisJfQorCWNvbnRyb2wuNjkgeworCQljb21tZW50LmFjY2VzcyAncmVhZCB3cml0ZScKKwkJY29tbWVudC50eXBlIEJPT0xFQU4KKwkJY29tbWVudC5jb3VudCAxCisJCWlmYWNlIE1JWEVSCisJCW5hbWUgJ1JpZ2h0MSBBbmFsb2cgTG9vcGJhY2sgU3dpdGNoJworCQl2YWx1ZSBmYWxzZQorCX0KK30KZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9iZWFnbGVib2FyZC9tYWNoY29uZmlnIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2JlYWdsZWJvYXJkL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ2ODU5ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9iZWFnbGVib2FyZC9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMyBAQAorIyBBc3N1bWUgYSBVU0IgbW91c2UgYW5kIHRvdWNoc2NyZWVuIGFyZSBjb25uZWN0ZWQKK0hBVkVfVE9VQ0hTQ1JFRU49MAorSEFWRV9LRVlCT0FSRD0xCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvZ2VuZXJpY3g4Ni02NC9tYWNoY29uZmlnIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODFhMjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYtNjQvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDYgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MAorSEFWRV9LRVlCT0FSRD0xCisKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKK0RJU1BMQVlfRFBJPTEzMwpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL2dlbmVyaWN4ODYvbWFjaGNvbmZpZyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxYTIzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9nZW5lcmljeDg2L21hY2hjb25maWcKQEAgLTAsMCArMSw2IEBACitIQVZFX1RPVUNIU0NSRUVOPTAKK0hBVkVfS0VZQk9BUkQ9MQorCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX0RQST0xMzMKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvcl8wLjAuYmJhcHBlbmQgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmJhcHBlbmQgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjU5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorUkRFUEVORFNfJHtQTn1fYXBwZW5kX2dlbmVyaWN4ODYgPSAiIGx0dG5nLXVzdCBzeXN0ZW10YXAiCisKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjL2dlbmVyaWN4ODYtNjQvdUNsaWJjLm1hY2hpbmUgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWRjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2LTY0L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsNjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgRnJpIE5vdiAyMyAxNTo0OTozMyAyMDA3CisjCisjIFRBUkdFVF9hbHBoYSBpcyBub3Qgc2V0CisjIFRBUkdFVF9hcm0gaXMgbm90IHNldAorIyBUQVJHRVRfYmZpbiBpcyBub3Qgc2V0CisjIFRBUkdFVF9jcmlzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2UxIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2ZydiBpcyBub3Qgc2V0CisjIFRBUkdFVF9oODMwMCBpcyBub3Qgc2V0CisjIFRBUkdFVF9ocHBhIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2kzODY9eQorIyBUQVJHRVRfaTk2MCBpcyBub3Qgc2V0CisjIFRBUkdFVF9pYTY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX202OGsgaXMgbm90IHNldAorIyBUQVJHRVRfbWljcm9ibGF6ZSBpcyBub3Qgc2V0CisjIFRBUkdFVF9taXBzIGlzIG5vdCBzZXQKKyMgVEFSR0VUX25pb3MgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvczIgaXMgbm90IHNldAorIyBUQVJHRVRfcG93ZXJwYyBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaCBpcyBub3Qgc2V0CisjIFRBUkdFVF9zaDY0IGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NwYXJjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3Y4NTAgaXMgbm90IHNldAorIyBUQVJHRVRfdmF4IGlzIG5vdCBzZXQKK1RBUkdFVF94ODZfNjQ9eQorCisjCisjIFRhcmdldCBBcmNoaXRlY3R1cmUgRmVhdHVyZXMgYW5kIE9wdGlvbnMKKyMKK1RBUkdFVF9BUkNIPSJ4ODZfNjQiCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKKyMgQ09ORklHX0dFTkVSSUNfMzg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzM4NiBpcyBub3Qgc2V0CisjIENPTkZJR180ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzU4Nk1NWCBpcyBub3Qgc2V0CisjIENPTkZJR182ODYgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFTlRJVU1JSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTTQgaXMgbm90IHNldAorIyBDT05GSUdfSzYgaXMgbm90IHNldAorIyBDT05GSUdfSzcgaXMgbm90IHNldAorIyBDT05GSUdfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUlVTT0UgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUEM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkNISVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZUklYSUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FSEVNSUFIIGlzIG5vdCBzZXQKK1RBUkdFVF9TVUJBUkNIPSIiCisKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitBUkNIX0xJVFRMRV9FTkRJQU49eQorCisjCisjIFVzaW5nIExpdHRsZSBFbmRpYW4KKyMKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorVUNMSUJDX0hBU19GTE9BVFM9eQorVUNMSUJDX0hBU19GUFU9eQorRE9fQzk5X01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKK1VDTElCQ19IQVNfRkVOVj15CmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy9nZW5lcmljeDg2L3VDbGliYy5tYWNoaW5lIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYxNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMvZ2VuZXJpY3g4Ni91Q2xpYmMubWFjaGluZQpAQCAtMCwwICsxLDY5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIEZyaSBOb3YgMjMgMTU6NDk6MzMgMjAwNworIworIyBUQVJHRVRfYWxwaGEgaXMgbm90IHNldAorIyBUQVJHRVRfYXJtIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2JmaW4gaXMgbm90IHNldAorIyBUQVJHRVRfY3JpcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9lMSBpcyBub3Qgc2V0CisjIFRBUkdFVF9mcnYgaXMgbm90IHNldAorIyBUQVJHRVRfaDgzMDAgaXMgbm90IHNldAorIyBUQVJHRVRfaHBwYSBpcyBub3Qgc2V0CitUQVJHRVRfaTM4Nj15CisjIFRBUkdFVF9pOTYwIGlzIG5vdCBzZXQKKyMgVEFSR0VUX2lhNjQgaXMgbm90IHNldAorIyBUQVJHRVRfbTY4ayBpcyBub3Qgc2V0CisjIFRBUkdFVF9taWNyb2JsYXplIGlzIG5vdCBzZXQKKyMgVEFSR0VUX21pcHMgaXMgbm90IHNldAorIyBUQVJHRVRfbmlvcyBpcyBub3Qgc2V0CisjIFRBUkdFVF9uaW9zMiBpcyBub3Qgc2V0CisjIFRBUkdFVF9wb3dlcnBjIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoIGlzIG5vdCBzZXQKKyMgVEFSR0VUX3NoNjQgaXMgbm90IHNldAorIyBUQVJHRVRfc3BhcmMgaXMgbm90IHNldAorIyBUQVJHRVRfdjg1MCBpcyBub3Qgc2V0CisjIFRBUkdFVF92YXggaXMgbm90IHNldAorIyBUQVJHRVRfeDg2XzY0IGlzIG5vdCBzZXQKKworIworIyBUYXJnZXQgQXJjaGl0ZWN0dXJlIEZlYXR1cmVzIGFuZCBPcHRpb25zCisjCitUQVJHRVRfQVJDSD0iaTM4NiIKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfMzg2PXkKKyMgQ09ORklHXzM4NiBpcyBub3Qgc2V0CisjIENPTkZJR180ODYgaXMgbm90IHNldAorIyBDT05GSUdfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHXzU4Nk1NWCBpcyBub3Qgc2V0CisjIENPTkZJR182ODYgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFTlRJVU1JSUkgaXMgbm90IHNldAorIyBDT05GSUdfUEVOVElVTTQgaXMgbm90IHNldAorIyBDT05GSUdfSzYgaXMgbm90IHNldAorIyBDT05GSUdfSzcgaXMgbm90IHNldAorIyBDT05GSUdfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUlVTT0UgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQ0hJUEM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkNISVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZUklYSUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FSEVNSUFIIGlzIG5vdCBzZXQKK1RBUkdFVF9TVUJBUkNIPSIiCisKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitBUkNIX0xJVFRMRV9FTkRJQU49eQorCisjCisjIFVzaW5nIExpdHRsZSBFbmRpYW4KKyMKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorVUNMSUJDX0hBU19GTE9BVFM9eQorVUNMSUJDX0hBU19GUFU9eQorRE9fQzk5X01BVEg9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKK1VDTElCQ19IQVNfRkVOVj15CmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmJhcHBlbmQgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYmFwcGVuZApAQCAtMCwwICsxIEBACitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL2dlbmVyaWN4ODYtNjQveG9yZy5jb25mIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2LTY0L3hvcmcuY29uZgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9nZW5lcmljeDg2L3hvcmcuY29uZiBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvZ2VuZXJpY3g4Ni94b3JnLmNvbmYKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkOTkxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmQwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMTEgQEAKK0tCUkFOQ0hfZ2VuZXJpY3g4NiAgPSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorCitLTUFDSElORV9nZW5lcmljeDg2ID89ICJjb21tb24tcGMiCitLTUFDSElORV9nZW5lcmljeDg2LTY0ID89ICJjb21tb24tcGMtNjQiCisKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgPz0gImJkYTE3NTk2NjAwOWQ1YTk0MTAzNTU5ZTZlNmFlNTEyNzk5NTJmMzkiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICJiZGExNzU5NjYwMDlkNWE5NDEwMzU1OWU2ZTZhZTUxMjc5OTUyZjM5IgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWVjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjAgQEAKK0tCUkFOQ0hfZ2VuZXJpY3g4NiAgPSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9lZGdlcm91dGVyID0gInN0YW5kYXJkL2VkZ2Vyb3V0ZXIiCitLQlJBTkNIX2JlYWdsZWJvbmUgPSAic3RhbmRhcmQvYmVhZ2xlYm9uZSIKK0tCUkFOQ0hfbXBjODMxNWUtcmRiID0gInN0YW5kYXJkL2ZzbC1tcGM4MzE1ZS1yZGIiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiYWYxZjdmNTg2YmQzMmQzOWMwNTdmMTc2MDY5OTFiODg3ZWFkYjM4OSIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiMWNiMWJiYWY2M2NlY2M5MThjZjM2Yzg5ODE5YTc0NjRhZjRjNGIxMyIKKworQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYgPSAiZ2VuZXJpY3g4NiIKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCitDT01QQVRJQkxFX01BQ0hJTkVfZWRnZXJvdXRlciA9ICJlZGdlcm91dGVyIgorQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKK0NPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3Zjg0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8tYnNwL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwyMCBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9jb21tb24tcGMiCitLQlJBTkNIX2dlbmVyaWN4ODYtNjQgID0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9lZGdlcm91dGVyID0gInN0YW5kYXJkL2VkZ2Vyb3V0ZXIiCitLQlJBTkNIX2JlYWdsZWJvbmUgPSAic3RhbmRhcmQvYmVhZ2xlYm9uZSIKK0tCUkFOQ0hfbXBjODMxNWUtcmRiID0gInN0YW5kYXJkL2ZzbC1tcGM4MzE1ZS1yZGIiCisKK0tNQUNISU5FX2dlbmVyaWN4ODYgPz0gImNvbW1vbi1wYyIKK0tNQUNISU5FX2dlbmVyaWN4ODYtNjQgPz0gImNvbW1vbi1wYy02NCIKKworU1JDUkVWX21hY2hpbmVfZ2VuZXJpY3g4NiA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYtNjQgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9lZGdlcm91dGVyID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfYmVhZ2xlYm9uZSA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX21wYzgzMTVlLXJkYiA/PSAiMjg5M2YzZThlY2U3MmY2ZjQ3MzI5NzE0ZDZhZmU0YzljNTQ1YmJmOSIKKworQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYgPSAiZ2VuZXJpY3g4NiIKK0NPTVBBVElCTEVfTUFDSElORV9nZW5lcmljeDg2LTY0ID0gImdlbmVyaWN4ODYtNjQiCitDT01QQVRJQkxFX01BQ0hJTkVfZWRnZXJvdXRlciA9ICJlZGdlcm91dGVyIgorQ09NUEFUSUJMRV9NQUNISU5FX2JlYWdsZWJvbmUgPSAiYmVhZ2xlYm9uZSIKK0NPTVBBVElCTEVfTUFDSElORV9tcGM4MzE1ZS1yZGIgPSAibXBjODMxNWUtcmRiIgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kIGIvbWV0YS15b2N0by1ic3AvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmUwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvLWJzcC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmJhcHBlbmQKQEAgLTAsMCArMSwxMSBAQAorS0JSQU5DSF9nZW5lcmljeDg2ICA9ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9nZW5lcmljeDg2LTY0ICA9ICJzdGFuZGFyZC9iYXNlIgorCitLTUFDSElORV9nZW5lcmljeDg2ID89ICJjb21tb24tcGMiCitLTUFDSElORV9nZW5lcmljeDg2LTY0ID89ICJjb21tb24tcGMtNjQiCisKK1NSQ1JFVl9tYWNoaW5lX2dlbmVyaWN4ODYgPz0gIjRlMzBlNjRjNDRkZjllNTliZDEzMjM5OTUxYmI4ZDJiNWIyNzZlNmYiCitTUkNSRVZfbWFjaGluZV9nZW5lcmljeDg2LTY0ID89ICI0ZTMwZTY0YzQ0ZGY5ZTU5YmQxMzIzOTk1MWJiOGQyYjViMjc2ZTZmIgorCitDT01QQVRJQkxFX01BQ0hJTkVfZ2VuZXJpY3g4NiA9ICJnZW5lcmljeDg2IgorQ09NUEFUSUJMRV9NQUNISU5FX2dlbmVyaWN4ODYtNjQgPSAiZ2VuZXJpY3g4Ni02NCIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY2xhc3Nlcy9wb2t5LXNhbml0eS5iYmNsYXNzIGIvbWV0YS15b2N0by9jbGFzc2VzL3Bva3ktc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjMjY2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vY2xhc3Nlcy9wb2t5LXNhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsMjggQEAKKyMgUHJvdmlkZSBzb21lIGV4dGVuc2lvbnMgdG8gc2FuaXR5LmJiY2xhc3MgdG8gaGFuZGxlIHBva3ktc3BlY2lmaWMgY29uZiBmaWxlIHVwZ3JhZGVzCisKK3B5dGhvbiBwb2t5X3VwZGF0ZV9iYmxheWVyc2NvbmYoKSB7CisgICAgY3VycmVudF92ZXJzaW9uID0gaW50KGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkgb3IgLTEpCisgICAgbGF0ZXN0X3ZlcnNpb24gPSBpbnQoZC5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRydWUpIG9yIC0xKQorCisgICAgYmJsYXllcnNfZm4gPSBiYmxheWVyc19jb25mX2ZpbGUoZCkKKyAgICBsaW5lcyA9IHNhbml0eV9jb25mX3JlYWQoYmJsYXllcnNfZm4pCisKKyAgICBpZiBjdXJyZW50X3ZlcnNpb24gPT0gNSBhbmQgbGF0ZXN0X3ZlcnNpb24gPiA1OgorICAgICAgICAjIEhhbmRsZSBzcGxpdCBvdXQgb2YgbWV0YS15b2N0by1ic3AgZnJvbSBtZXRhLXlvY3RvCisgICAgICAgIGlmICcvbWV0YS15b2N0by1ic3AnIG5vdCBpbiBkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKToKKyAgICAgICAgICAgIGluZGV4LCBtZXRhX3lvY3RvX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ21ldGEteW9jdG9ccypcXFxcXFxuJywgbGluZXMpCisgICAgICAgICAgICBpZiBtZXRhX3lvY3RvX2xpbmU6CisgICAgICAgICAgICAgICAgbGluZXMuaW5zZXJ0KGluZGV4ICsgMSwgbWV0YV95b2N0b19saW5lLnJlcGxhY2UoJ21ldGEteW9jdG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRhLXlvY3RvLWJzcCcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisKKyAgICAgICAgY3VycmVudF92ZXJzaW9uICs9IDEKKyAgICAgICAgc2FuaXR5X2NvbmZfdXBkYXRlKGJibGF5ZXJzX2ZuLCBsaW5lcywgJ0xDT05GX1ZFUlNJT04nLCBjdXJyZW50X3ZlcnNpb24pCisgICAgICAgIHJldHVybgorCisgICAgc3lzLmV4aXQoKQorfQorCisjIFByZXBlbmQgdG8gZW5zdXJlIG91ciBmdW5jdGlvbiBydW5zIGJlZm9yZSB0aGUgT0UtQ29yZSBvbmUKK0JCTEFZRVJTX0NPTkZfVVBEQVRFX0ZVTkNTID0rICJwb2t5X3VwZGF0ZV9iYmxheWVyc2NvbmYiCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUgYi9tZXRhLXlvY3RvL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkYTU2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vY29uZi9iYmxheWVycy5jb25mLnNhbXBsZQpAQCAtMCwwICsxLDE2IEBACisjIExBWUVSX0NPTkZfVkVSU0lPTiBpcyBpbmNyZWFzZWQgZWFjaCB0aW1lIGJ1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorIyBjaGFuZ2VzIGluY29tcGF0aWJseQorTENPTkZfVkVSU0lPTiA9ICI2IgorCitCQlBBVEggPSAiJHtUT1BESVJ9IgorQkJGSUxFUyA/PSAiIgorCitCQkxBWUVSUyA/PSAiIFwKKyAgIyNPRVJPT1QjIy9tZXRhIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvIFwKKyAgIyNPRVJPT1QjIy9tZXRhLXlvY3RvLWJzcCBcCisgICIKK0JCTEFZRVJTX05PTl9SRU1PVkFCTEUgPz0gIiBcCisgICMjT0VST09UIyMvbWV0YSBcCisgICMjT0VST09UIyMvbWV0YS15b2N0byBcCisgICIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9jb25mLW5vdGVzLnR4dCBiL21ldGEteW9jdG8vY29uZi9jb25mLW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmU2MzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL2NvbmYtbm90ZXMudHh0CkBAIC0wLDAgKzEsOCBAQAorQ29tbW9uIHRhcmdldHMgYXJlOgorICAgIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgIGNvcmUtaW1hZ2Utc2F0bworICAgIG1ldGEtdG9vbGNoYWluCisgICAgYWR0LWluc3RhbGxlcgorICAgIG1ldGEtaWRlLXN1cHBvcnQKKworWW91IGNhbiBhbHNvIHJ1biBnZW5lcmF0ZWQgcWVtdSBpbWFnZXMgd2l0aCBhIGNvbW1hbmQgbGlrZSAncnVucWVtdSBxZW11eDg2JwpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYyBiL21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YjY0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vY29uZi9kaXN0cm8vaW5jbHVkZS9tYWludGFpbmVycy5pbmMKQEAgLTAsMCArMSw3NjEgQEAKKyMgWW9jdG8gUHJvamVjdCAvIE9wZW5FbWJlZGRlZC1Db3JlIChPRS1Db3JlKSBNYWludGFpbmVycyBGaWxlCisjCisjIFRoaXMgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgcmVjaXBlIG1haW50YWluZXJzLgorIworIyBQbGVhc2Ugc3VibWl0IGFueSBwYXRjaGVzIGFnYWluc3QgcmVjaXBlcyBpbiBtZXRhIHRvIHRoZSAKKyMgT0UtQ29yZSBtYWlsIGxpc3QgKG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcpCisjIEZvciByZWNpcGVzIGluIG1ldGEteW9jdG8gcGxlYXNlIHVzZSB0aGUgUG9reSBsaXN0IChwb2t5QHlvY3RvcHJvamVjdC5vcmcpCisjCisjIElmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggb3IgcXVlc3Rpb25zIGFib3V0IGEgcGFydGljdWxhciByZWNpcGUsIGZlZWwKKyMgZnJlZSB0byBjb250YWN0IHRoZSBtYWludGFpbmVyIGRpcmVjdGx5IChjYzppbmcgdGhlIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdAorIyBwdXRzIGl0IGluIHRoZSBhcmNoaXZlIGFuZCBoZWxwcyBvdGhlciBwZW9wbGUgd2hvIG1pZ2h0IGhhdmUgdGhlIHNhbWUKKyMgcXVlc3Rpb25zIGluIHRoZSBmdXR1cmUpLCBidXQgcGxlYXNlIHRyeSB0byBkbyB0aGUgZm9sbG93aW5nIGZpcnN0OgorIworIyAgLSBsb29rIGluIHRoZSBZb2N0byBQcm9qZWN0IEJ1Z3ppbGxhCisjICAgIChodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8pIHRvIHNlZSBpZiBhIHByb2JsZW0gaGFzCisjICAgIGFscmVhZHkgYmVlbiByZXBvcnRlZAorIworIyAtIGxvb2sgdGhyb3VnaCByZWNlbnQgZW50cmllcyBvZiB0aGUgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzCisjICAgKGh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZSBvcgorIyAgICBodHRwczovL2xpc3RzLnlvY3RvcHJvamVjdC5vcmcvcGlwZXJtYWlsL3Bva3kvKSB0byBzZWUgaWYgb3RoZXIKKyMgICBwZW9wbGUgaGF2ZSBydW4gaW50byBzaW1pbGFyIHByb2JsZW1zIG9yIGhhZCBzaW1pbGFyIHF1ZXN0aW9ucworIyAgIGFuc3dlcmVkLgorIworIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMKKyMJUkVDSVBFX01BSU5UQUlORVJfcG4tPHJlY2lwZSBuYW1lPiA9ICJGdWxsIE5hbWUgPGFkZHJlc3NAZG9tYWluPiIKKyMKKyMgUGxlYXNlIGtlZXAgdGhpcyBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyMKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFjbCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWNwaWQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWR0LWluc3RhbGxlciA9ICJKZXNzaWNhIFpoYW5nIDxqZXNzaWNhLnpoYW5nQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hZHdhaXRhLWljb24tdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLWxpYiA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXBsdWdpbnMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWxzYS1zdGF0ZSA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hbHNhLXRvb2xzID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFsc2EtdXRpbHMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYWxzYS11dGlscy1zY3JpcHRzID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwbWQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHIgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWFwci11dGlsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hcHQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYXNwZWxsID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0ayA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdC1zcGkyLWF0ayA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0LXNwaTItY29yZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF0dHIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1Z2VhcyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvY29uZiA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1hdXRvZ2VuID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF1dG9tYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF2YWhpLXVpID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWF2YWhpID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJhYmVsdHJhY2UgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNlLWZpbGVzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmFzZS1wYXNzd2QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYXNoID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iYyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iZHdnYyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iZWVjcnlwdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmlncmVxc3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmluZCA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaW51dGlscyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1iaXNvbiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYmxrdG9vbCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ibGt0cmFjZSA9ICJUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJsdWV6NSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJvb3N0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnRyZnMtdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtYXBwbGlhbmNlLWltYWdlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnVpbGQtY29tcGFyZSA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWJ1aWxkZXIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1idXN5Ym94ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ieWFjYyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tYnppcDIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNhLWNlcnRpZmljYXRlcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNhaXJvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2FsaWJyYXRlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jY2FjaGUgPSAiV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2RydG9vbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2hrY29uZmlnID0gIldlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlID0gIldlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNocnBhdGggPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci1nc3QtMy4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci1ndGstMS4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY2x1dHRlci0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jbWFrZS1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY21ha2UgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29nbC0xLjAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb21wb3NpdGVwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvbm5tYW4gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb25ubWFuLWdub21lID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29uc29sZWtpdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29uc29sZS10b29scyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1jbHV0dGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1kaXJlY3RmYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1sc2ItZGV2ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1sc2IgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLW1pbmltYWwtZGV2ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2UtcnQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXJ0LXNkayA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNvcmUtaW1hZ2Utc2F0by1kZXYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JlLWltYWdlLXNhdG8tc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY29yZS1pbWFnZS14MTEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jb3JldXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNwaW8gPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWNyYWNrbGliID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcmVhdGVyZXBvID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1jcm9uaWUgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN1cHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN1cmwgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWN3YXV0b21hY3JvcyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRhbWFnZXByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kYnVzLWdsaWIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRidXMtdGVzdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGJ1cy13YWl0ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGhjcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlmZnN0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpZmZ1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZGlyZWN0ZmItZXhhbXBsZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpcmVjdGZiID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kaXN0Y2MgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRpc3RjYy1jb25maWcgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG14cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXQgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXNnbWwtZHRkLTQuNS1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZG9jYm9vay1zZ21sLWR0ZCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kb2Nib29rLXV0aWxzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWRvc2ZzdG9vbHMgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZHBrZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkycHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcmkzcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kcm9wYmVhciA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1kdGMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lMmZzcHJvZ3MgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lZWUtYWNwaS1zY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZWxmdXRpbHMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWVuY2hhbnQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lbmNvZGluZ3MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1lcGlwaGFueSA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWV0aHRvb2wgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1leHBhdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1maWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZpbmR1dGlscyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZml4ZXNwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZsYWMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZmxleCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udC1hbGlhcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvbnRjb25maWcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1mb250c3Byb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9udC11dGlsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9vbWF0aWMtZmlsdGVycyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZm9ybWZhY3RvciA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZvdG93YWxsID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWZyZWV0eXBlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZnN0ZXN0cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nYWt1ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2F3ayA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjYy1zb3VyY2UgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2NjbWFrZWRlcCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY2MtcnVudGltZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nY29uZiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdjciA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdkYiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZGJtID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2RrLXBpeGJ1ZiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdlbmV4dDJmcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZXR0ZXh0LW1pbmltYWwtbmF0aXZlID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nZXR0ZXh0ID0gIldlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdob3N0c2NyaXB0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1naWZsaWIgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1naXQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xldyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdsaWItMi4wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYmMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xpYi1uZXR3b3JraW5nID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ2xwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdtcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1jb21tb24gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ25vbWUtZGVza3RvcCA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1kZXNrdG9wLXRlc3RpbmcgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1kZXNrdG9wMyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdub21lLWRvYy11dGlscyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbm9tZS1taW1lLWRhdGEgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ251LWNvbmZpZyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnUtZWZpID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdudXBnID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nbnV0bHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncGVyZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdwZ21lID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdyZXAgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdyb2ZmID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ncnViID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLWxpYmF2ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3N0LXBsYXllciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1kb2Mtc3R1YiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1kb2MgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGstZW5naW5lcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay10aGVtZS10b3J0dXJlciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0ay1pY29uLXV0aWxzLW5hdGl2ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd0aysgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndGsrMyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1aWxlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWd1aWx0LW5hdGl2ZSA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ndW1taWJvb3QgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tZ3ppcCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGFyZmJ1enogPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oZHBhcm0gPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taGVscDJtYW4tbmF0aXZlID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1oaWNvbG9yLWljb24tdGhlbWUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ob3N0YXAtY29uZiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWhvc3RhcC11dGlscyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWh3bGF0ZGV0ZWN0ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taWN1ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWJvb3QgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pbml0cmFtZnMtZnJhbWV3b3JrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW5wdXRwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWluc3NlcnYgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taW50bHRvb2wgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXByb3V0ZTIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1pcHRhYmxlcyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlwdXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4taXJkYS11dGlscyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWlzby1jb2RlcyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWpwZWcgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tanNvbi1nbGliID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2JkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2Jwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWtjb25maWctZnJvbnRlbmRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2VybmVsc2hhcmsgPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2V4ZWMtdG9vbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4ta2V5bWFwcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWttb2QgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxhbWUgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGF0ZW5jeXRvcCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZGNvbmZpZy1uYXRpdmUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sZWFmcGFkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGVzcyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhNTIgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYWNwaSA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhaW8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhcmNoaXZlID0gIlBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliYXJ0LWxncGwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhc3N1YW4gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJhdG9taWNzLW9wcyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmF2ID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmJzZCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjYXAgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2dyb3VwID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2hlY2sgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJjb252ZXJ0LWFzbjEtcGVybCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmNyb2NvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZGFlbW9uID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZG14ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZHJtID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmR1bXB2YWx1ZS1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZW52LXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJlcG94eSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmVyYXRpb24tZm9udHMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJldmRldiA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJldmVudCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJleGlmID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZmFrZWtleSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmZmaSAgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmaWxlLWNoZWNrdHJlZS1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZm0gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJmb250ZW5jID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2NjID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmdjcnlwdCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2ZvcnRyYW4gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliZ2xhZGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJnbHUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJncGctZXJyb3IgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaTE4bi1jb2xsYXRlLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpY2FsID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWNvbnYgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJpZDN0YWcgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaWRuID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGliaW5wdXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJqc29uID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYmtzYmEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtYWQgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibWF0Y2hib3ggPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJtcGMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmV3dCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmV3dC1weXRob24gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm5mc2lkbWFwID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlibmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJub3RpZnkgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJuc3MtbWRucyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9nZyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9pbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYm9teGlsID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib3dsLWF2ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlib3dsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGFtID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlicGNhcCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBjaWFjY2VzcyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwY3JlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBmbTQgPSAiTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwbmcgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwbmcxMiA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnBvZC1wbGFpbmVyLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJwcm94eSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnB0aHJlYWQtc3R1YnMgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJyc3ZnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2FtcGxlcmF0ZTAgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2RsID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnNkbDIgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic2VjcmV0ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlic20gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzbmRmaWxlMSA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJzb3VwLTIuNCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRhc24xID0gIlJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGVsZXBhdGh5ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGhlb3JhID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidGltZWRhdGUtcGVybCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnRpcnBjID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidG9vbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1bmlzdHJpbmcgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1cmN1ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXJpLXBlcmwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidXNiMSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ1c2ItY29tcGF0ID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnVzZXIgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlidm9yYmlzID0gIlRhbnUgS2Fza2luZW4gPHRhbnUua2Fza2luZW5AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYndlYnAgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ3bmNrMyA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYngxMS1kaWV0ID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYngxMSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhhdSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhjYWxpYnJhdGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y2IgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Y29tcG9zaXRlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGN1cnNvciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhkYW1hZ2UgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4ZG1jcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhleHQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Zml4ZXMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4Zm9udCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhmdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhpbmVyYW1hID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieGkgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4a2Jjb21tb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4a2JmaWxlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sMiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhtbC1wYXJzZXItcGVybCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXBlcmwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4bWwtc2F4LXBlcmwgPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG1sLXNpbXBsZS1wZXJsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieG11ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHBtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmFuZHIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4cmVuZGVyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHJlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnhzY3Juc2F2ZXIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4c2V0dGluZ3MtY2xpZW50ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNobWZlbmNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHNsdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh0ID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHRzdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh2bWMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWJ4diA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnh4Zjg2ZGdhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHhmODZtaXNjID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGlieHhmODZ2bSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpYnlhbWwgPSAiQWxleGFuZGVyIEthbmF2aW4gPGFsZXhhbmRlci5rYW5hdmluQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saWdodHRwZCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4ZG9jLXRvb2xzID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LWR1bW15ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtZmlybXdhcmUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC1saWJjLWhlYWRlcnMgPSAiQnJ1Y2UgQXNoZmllbGQgPGJydWNlLmFzaGZpZWxkQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbGludXgtbGliYy1oZWFkZXJzLXlvY3RvID0gIkJydWNlIEFzaGZpZWxkIDxicnVjZS5hc2hmaWVsZEB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxpbnV4LXlvY3RvLWRldiA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC15b2N0by1ydCA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1saW51eC15b2N0by10aW55ID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxvZ3JvdGF0ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1scnpzeiA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWxzYmluaXRzY3JpcHRzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNidGVzdCA9ICJZaSBaaGFvIDx5aS56aGFvQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHNiID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sc29mID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0cCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sdHRuZy1tb2R1bGVzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLXRvb2xzID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLWx0dG5nLXVzdCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1sem9wID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHpvID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbHo0ID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbTQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFpbHggPSAiS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWFrZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYWtlZGVwZW5kID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ha2VkZXZzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYW4tcGFnZXMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWRlc2t0b3Atc2F0byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LWRlc2t0b3AgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1rZXlib2FyZCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1zZXNzaW9uLXNhdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC1zZXNzaW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtdGVybWluYWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYXRjaGJveC10aGVtZS1zYXRvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWF0Y2hib3gtd20gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tYyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZGFkbSA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lbnUtY2FjaGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXNhID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWVzYS1kZW1vcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1lc2EtZ2wgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLWlkZS1zdXBwb3J0ID0gIkplc3NpY2EgWmhhbmcgPGplc3NpY2EuemhhbmdAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1ldGEtdG9vbGNoYWluLXF0ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tZXRhLXRvb2xjaGFpbiA9ICJKZXNzaWNhIFpoYW5nIDxqZXNzaWNhLnpoYW5nQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5nZXR0eSA9ICJLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1taW5pY29tID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWluaS14LXNlc3Npb24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2VsZmltYWdlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWtmb250ZGlyID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5qdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbWtmb250c2NhbGUgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ta2xpYnMtbmF0aXZlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1rdGVtcCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tb2R1dGlscy1pbml0c2NyaXB0cyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tcGVnMmRlYyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW1wZnIgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbXNtdHAgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1tdGRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW10ZC11dGlscyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW10b29scyA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW14LTEuMCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5hc20gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXFlbXUtaGVscGVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uY3Vyc2VzID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZWFyZCA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5lb24gPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1uZXRiYXNlID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0dGxlID0gIkFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmV0LXRvb2xzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbmZzLWV4cG9ydC1yb290ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5mcy11dGlscyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ucHRoID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tbnNwciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW5zcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9jZi1saW51eCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9mb25vID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb2gtcHV6emxlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5qYWRlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zcCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGVuc3NoID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wZW5zc2wgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWNvbGxhdGVyYWwgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcGtnLWNvbmZpZy1iYXNlID0gIlBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3BrZyA9ICJQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wa2ctdXRpbHMgPSAiUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcHJvZmlsZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1vcHJvZmlsZXVpID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLW9wcm9maWxldWktc2VydmVyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3NzcC11dWlkID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tb3dsLXZpZGVvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcDExLWtpdCA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtYm9vdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtbmZzID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXF0NGUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1ZyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcyA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlciA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYWNrYWdlLWluZGV4ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGFuZ28gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYXJ0ZWQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBhdGNoID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wYXgtdXRpbHMgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBheCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNpdXRpbHMgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBjbWFuZm0gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGNtY2lhdXRpbHMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcGVyZiA9ICJCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wZXJsID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waWdsaXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waWd6ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1waW5lbnRyeSA9ICJBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBpeG1hbiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBrZ2NvbmZpZyA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wbS11dGlscyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvaW50ZXJjYWwgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb25nLWNsb2NrID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcG9wdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wb3J0bWFwID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBvd2VydG9wID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXBwcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHBwLWRpYWxpbiA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJlbGluayA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJlc2VudHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHJvY3BzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHNldWRvID0gIk1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc21pc2MgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1wc3BsYXNoID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB0aCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB1bHNlYXVkaW8gPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHV6emxlcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbiA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tYXN5bmMgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZGJ1cyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZG9jdXRpbHMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWdpdCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tZ2l0ZGIgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLWltYWdpbmcgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLW1ha28gPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tbm9zZSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1udW1weSA9ICJLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWNhaXJvID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1weWN1cmwgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5Z29iamVjdCA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tcHlndGsgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uLXB5cmV4ID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXB5dGhvbi1zY29ucyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc2V0dXB0b29scyA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21hcnRwbSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24tc21tYXAgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcHl0aG9uMyA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1weXRob24zLWRpc3RyaWJ1dGUgPSAiS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11LWhlbHBlci1uYXRpdmUgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xZW11ID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcW1tcCA9ICJIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0ZS1kZW1vLWltYWdlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0NC1lbWJlZGRlZCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdDQtZ3JhcGhpY3Mtc3lzdGVtID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0NC1uYXRpdmUgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXQ0LXgxMS1mcmVlID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXF0LWRlbW8taW5pdCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1xdWlja3kgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVpbHQgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcXVvdGEgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yYW5kcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVhZGxpbmUgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlY29yZHByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVtYWtlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJlbmRlcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVzb2x2Y29uZiA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcmVzb3VyY2Vwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJnYiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJwY2JpbmQgPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJwbSA9ICJNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnBtcmVzb2x2ZSA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1yc3luYyA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydC10ZXN0cyA9ICJEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1ydWJ5ID0gIkFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tcnVuLXBvc3RpbnN0cyA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXJ4dnQtdW5pY29kZSA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNhdG8taWNvbi10aGVtZSA9ICJBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zYXRvLXNjcmVlbnNob3QgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmp1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zYmMgPSAiVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2NyZWVuID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNjcm5zYXZlcnByb3RvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2VkID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zZXRzZXJpYWwgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2V0dGluZ3MtZGFlbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbC1jb21tb24gPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2dtbHNwbCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFkb3cgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zZWN1cmV0dHkgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNoYWRvdy1zeXNyb290ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zaGFyZWQtbWltZS1pbmZvID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNsYW5nID0gIkthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNvY2F0ID0gIkhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcGVleCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcGVleGRzcCA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zcWxpdGUzID0gIkFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXNxdWFzaGZzLXRvb2xzID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN0YXJ0dXAtbm90aWZpY2F0aW9uID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RhdCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3RyYWNlID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN1YnZlcnNpb24gPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3VkbyA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3dhYmJlci1uYXRpdmUgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNmc3V0aWxzID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi1zeXNrbG9nZCA9ICJDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzbGludXggPSAiRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzcHJvZiA9ICJUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3N0YXQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbWQgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbXRhcCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3RlbXRhcC11cHJvYmVzID0gIlRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tc3lzdmluaXQtaW5pdHRhYiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXN5c3Zpbml0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGFnbGliID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10YXIgPSAiQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjZi1hZ2VudCA9ICJSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRjbCA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10Y3Atd3JhcHBlcnMgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGNwLXdyYXBwZXJzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGVsZXBhdGh5LWdsaWIgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZWxlcGF0aHktaWRsZSA9ICJDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRlbGVwYXRoeS1taXNzaW9uLWNvbnRyb2wgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10ZWxlcGF0aHktcHl0aG9uID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGV4aTJodG1sID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRleGluZm8gPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGlmZiA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRpbWUgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdGlueS1pbml0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHJhY2UtY21kID0gIkRhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXRyZW1vciA9ICJUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10c2xpYiA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10dGYtYml0c3RyZWFtLXZlcmEgPSAiQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdHpjb2RlLW5hdGl2ZSA9ICJSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi10emRhdGEgPSAiUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdS1ib290ID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdS1ib290LWZ3LXV0aWxzID0gIkRlbnlzIERteXRyaXllbmtvIDxkZW5pc0BkZW5peC5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdS1ib290LW1raW1hZ2UgPSAiRGVueXMgRG15dHJpeWVua28gPGRlbmlzQGRlbml4Lm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11Ym9vdGNoYXJ0ID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWNsaWJjID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWRldi1leHRyYWNvbmYgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdWRldiA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11bmlmZGVmID0gIlJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVuemlwID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVwZGF0ZS1yYy5kID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdXNiaW5pdCA9ICJSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXVzYnV0aWxzID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdW5mczMgPSAiUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLWxpbnV4ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi11dGlsLW1hY3JvcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXY4NmQgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmFsYSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXZhbGdyaW5kID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4tdmlkZW9wcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXZ0ZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdhZmZsZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdhdGNoZG9nID0gIlJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td2F5bGFuZCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlYmtpdGd0ayA9ICJBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdlYi13ZWJraXQgPSAiUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13ZXN0b24gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi13Z2V0ID0gIlJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdoaWNoID0gIkFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXdpcmVsZXNzLXRvb2xzID0gIkNyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4td3BhLXN1cHBsaWNhbnQgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTEtY29tbW9uID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teDExcGVyZiA9ICJSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14MTF2bmMgPSAiUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teDI2NCA9ICJQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14YXV0aCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi1wcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLWltYWdlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwta2V5c3ltcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNiLXV0aWwtcmVuZGVydXRpbCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kuanVra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhjYi11dGlsLXdtID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGNtaXNjcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGRnLXV0aWxzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGRweWluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXh0cHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14ZXllcyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZkZ2Fwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZkcmlwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtZXZkZXYgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LWlucHV0LWtleWJvYXJkID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC1tb3VzZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtaW5wdXQtc3luYXB0aWNzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni1pbnB1dC12bW1vdXNlID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Nm1pc2Nwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8tY2lycnVzID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1mYmRldiA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODYtdmlkZW8taW50ZWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLW9tYXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZlc2EgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhmODZ2aWRtb2RlcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aG9zdCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhpbmVyYW1hcHJvdG8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5ldGQgPSAiQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teGluaXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5wdXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14aW5wdXQtY2FsaWJyYXRvciA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhrYmNvbXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14a2V5Ym9hcmQtY29uZmlnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teG1sdG8gPSAiSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhtb2RtYXAgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14b3JnLW1pbmltYWwtZm9udHMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14cHJvcCA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhwcm90byA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXhyYW5kciA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14cmVzdG9wID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14c2VydmVyLXhmODYtY29uZmlnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNlcnZlci14b3JnID0gIkp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4teHNldCA9ICJBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dHJhbnMgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dHNjYWwgPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dmlkZW8tdGVzdHMgPSAiQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14dmluZm8gPSAiSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi14d2luaW5mbyA9ICJKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXh6ID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi15YXNtID0gIlBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPiIKK1JFQ0lQRV9NQUlOVEFJTkVSX3BuLXphdXJ1c2QgPSAiUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+IgorUkVDSVBFX01BSU5UQUlORVJfcG4temlwID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCitSRUNJUEVfTUFJTlRBSU5FUl9wbi16bGliID0gIkNoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4iCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL2luY2x1ZGUvcG9reS1mbG9hdGluZy1yZXZpc2lvbnMuaW5jIGIvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTFmMmNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYwpAQCAtMCwwICsxLDczIEBACisjCisjIFBhY2thZ2UgVmVyc2lvbnMgZm9yIGN1dHRpbmcgZWRnZSB0ZXN0aW5nOgorIworCisjU1JDUkVWX3BuLW9wa2ctbmF0aXZlID89ICIke0FVVE9SRVZ9IgorI1NSQ1JFVl9wbi1vcGtnLXNkayA/PSAiJHtBVVRPUkVWfSIKKyNTUkNSRVZfcG4tb3BrZyA/PSAiJHtBVVRPUkVWfSIKKyNTUkNSRVZfcG4tb3BrZy11dGlscy1uYWl0dmUgPz0gIiR7QVVUT1JFVn0iCisjU1JDUkVWX3BuLW9wa2ctdXRpbHMgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZ2NvbmYtZGJ1cyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1jb21tb24gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1kZXNrdG9wID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LWtleWJvYXJkID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXBhbmVsLTIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGhlbWVzLWV4dHJhID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXRlcm1pbmFsID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXdtID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXdtLTIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tc2V0dGluZ3MtZGFlbW9uID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXNjcmVlbnNob3QgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbGliZmFrZWtleSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1vcHJvZmlsZXVpID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXphdXJ1c2QgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbGlib3dsLWF2ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW93bC12aWRlbyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1wc3BsYXNoID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWV4bWFwLWNvbnNvbGUgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZ3RrLXNhdG8tZW5naW5lID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtdGhlbWUtc2F0by0yID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXNhdG8taWNvbi10aGVtZSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1tYXRjaGJveC1kZXNrdG9wLXNhdG8gPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tb2gtcHV6emxlcyA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1saWJvd2wgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tbWF0Y2hib3gtYXBwbGV0LWxpZ2h0ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWZzdGVzdHMgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4teHZpZGVvLXRlc3RzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWNsdXR0ZXIgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tY2x1dHRlci1nc3QgPz0gIiR7QVVUT1JFVn0iCitTUkNSRVZfcG4tZ2FrdSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1neXBzeSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1hYWluYSA/PSAiJHtBVVRPUkVWfSIKK1NSQ1JFVl9wbi1jbHV0dGVyLWNhaXJvID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXRhYmxlID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLWxpYm1hdGNoYm94ID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLXRhc2tzID89ICIke0FVVE9SRVZ9IgorU1JDUkVWX3BuLW9mb25vID89ICIke0FVVE9SRVZ9IgorCitTUkNSRVZfcG4tZHJpMnByb3RvID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05fZHJpMnByb3RvID89ICIxLjk5LjErZ2l0JSIKK1NSQ1JFVl9wbi1saWJkcm0gPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl9saWJkcm0gPz0gIjIuNC4wK2dpdCUiCitTUkNSRVZfcG4tbGlieGNiID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05fbGlieGNiID89ICIxLjEuOTAuMStnaXRyJSIKK1NSQ1JFVl9wbi1saWItcHJvdG8gPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Y2ItcHJvdG8gPz0gIjEuMitnaXRyJSIKK1NSQ1JFVl9wbi1saWJ4Y2Itc2RrID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05fbGlieGNiLXNkayA/PSAiMS4xLjkwLjErZ2l0ciUiCitTUkNSRVZfcG4teGY4Ni1pbnB1dC1ldmRldiA9ICIke0FVVE9SRVZ9IgorI1BSRUZFUlJFRF9WRVJTSU9OX3hmODYtaW5wdXQtZXZkZXYgPz0gIjIuMC40IgorU1JDUkVWX3BuLXhmODYtaW5wdXQtbW91c2UgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Zjg2LWlucHV0LW1vdXNlID89ICIxLjMuMCtnaXQlIgorU1JDUkVWX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiJHtBVVRPUkVWfSIKKyNQUkVGRVJSRURfVkVSU0lPTl94Zjg2LWlucHV0LWtleWJvYXJkID89ICIxLjMuMStnaXQlIgorU1JDUkVWX3BuLXhmODYtaW5wdXQtc3luYXB0aWNzID0gIiR7QVVUT1JFVn0iCisjUFJFRkVSUkVEX1ZFUlNJT05feGY4Ni1pbnB1dC1zeW5hcHRpY3MgPz0gIjAuMTUuMitnaXQlIgorCisjU1JDREFURV9vcHJvZmlsZSA/PSAiJHtEQVRFfSIKKworUFJFRkVSUkVEX1ZFUlNJT05fb3Byb2ZpbGUgPz0gIjAuOS40K2N2cyR7U1JDREFURV9vcHJvZmlsZX0iCisKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1ibGVlZGluZy5jb25mIGIvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWJsZWVkaW5nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzZTA0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1ibGVlZGluZy5jb25mCkBAIC0wLDAgKzEsMTEgQEAKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWItMi4wID89ICIyLjE3LjQiCitQUkVGRVJSRURfVkVSU0lPTl9nbGliLTIuMC1uYXRpdmUgPz0gIjIuMTcuNCIKK1BSRUZFUlJFRF9WRVJTSU9OX2F0ayA/PSAiMS4yMi4wIgorUFJFRkVSUkVEX1ZFUlNJT05fcGFuZ28gPz0gIjEuMjEuMiIKK1BSRUZFUlJFRF9WRVJTSU9OX2d0aysgPz0gIjIuMTMuMyIKKworcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3Bva3ktZmxvYXRpbmctcmV2aXNpb25zLmluYworcmVxdWlyZSBjb25mL2Rpc3Ryby9wb2t5LmNvbmYKKworRElTVFJPID0gInBva3ktYmxlZWRpbmciCitESVNUUk9PVkVSUklERVMgPSAicG9reSIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1sc2IuY29uZiBiL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS1sc2IuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiZTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LWxzYi5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKworcmVxdWlyZSBjb25mL2Rpc3Ryby9wb2t5LmNvbmYKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKKworRElTVFJPID0gInBva3ktbHNiIgorRElTVFJPT1ZFUlJJREVTID0gInBva3k6bGludXhzdGRiYXNlIgorCitESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiBwYW0gbGFyZ2VmaWxlIG9wZW5nbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYngxMSA9ICJsaWJ4MTEiCisKKyMgRW5zdXJlIHRoZSBrZXJuZWwgbmZzIHNlcnZlciBpcyBlbmFibGVkCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3BuLWxpbnV4LXlvY3RvID0gIiBmZWF0dXJlcy9uZnNkL25mc2QtZW5hYmxlLnNjYyIKKworIyBVc2UgdGhlIExUU0kgS2VybmVsIGZvciBMU0IgVGVzdGluZworUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fbGludXhzdGRiYXNlID89ICIzLjE0JSIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS10aW55LmNvbmYgYi9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjI3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvL2NvbmYvZGlzdHJvL3Bva3ktdGlueS5jb25mCkBAIC0wLDAgKzEsMTQ0IEBACisjIERpc3RyaWJ1dGlvbiBkZWZpbml0aW9uIGZvcjogcG9reS10aW55CisjCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgYXMgZGVzY3JpYmVkIGluCisjIC4uL21ldGEvQ09QWUlORy5NSVQuCisjCisjIFBva3ktdGlueSBpcyBpbnRlbmRlZCB0byBkZWZpbmUgYSB0aW55IExpbnV4IHN5c3RlbSBjb21wcmlzZWQgb2YgYQorIyBMaW51eCBrZXJuZWwgdGFpbG9yZWQgdG8gc3VwcG9ydCBlYWNoIHNwZWNpZmljIE1BQ0hJTkUgYW5kIGJ1c3lib3guCisjIFBva3ktdGlueSBzZXRzIHNvbWUgYmFzaWMgcG9saWN5IHRvIGVuc3VyZSBhIHVzYWJsZSBzeXN0ZW0gd2hpbGUgc3RpbGwKKyMga2VlcGluZyB0aGUgcm9vdGZzIGFuZCBrZXJuZWwgaW1hZ2UgYXMgc21hbGwgYXMgcG9zc2libGUuCisjCisjIFRoZSBwb2xpY2llcyBkZWZpbmVkIGFyZSBpbnRlbmRlZCB0byBtZWV0IHRoZSBmb2xsb3dpbmcgZ29hbHM6CisjIG8gU2VyaWFsIGNvbnNvbGVzIG9ubHkgKG5vIGZyYW1lYnVmZmVyIG9yIFZHQSBjb25zb2xlKQorIyBvIEJhc2ljIHN1cHBvcnQgZm9yIElQVjQgbmV0d29ya2luZworIyBvIFNpbmdsZSB1c2VyIGFzaCBzaGVsbAorIyBvIFN0YXRpYyBpbWFnZXMgKG5vIHN1cHBvcnQgZm9yIGFkZGluZyBwYWNrYWdlcyBvciBsaWJyYXJpZXMgbGF0ZXIpCisjIG8gUmVhZC1vbmx5IG9yIFJBTUZTIHJvb3QgZmlsZXN5c3RlbQorIyBvIENvbWJpbmVkIExpbnV4IGtlcm5lbCArIHJvb3RmcyBpbiB1bmRlciA0TUIKKyMgbyBBbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYmV0d2VlbiBlZ2xpYmMgb3IgdWNsaWJjIHdpdGggdGhlIFRDTElCQyB2YXJpYWJsZQorIworIyBUaGlzIGlzIGN1cnJlbnRseSBhIHBhcnRpYWwgZGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyB0YXNrcyByZW1haW46CisjIFsgXSBJbnRlZ3JhdGUgbGludXgteW9jdG8tdGlueSBrdHlwZSBpbnRvIGxpbnV4LXlvY3RvCisjIFsgXSBEZWZpbmUgbGludXgteW9jdG8tdGlueSBjb25maWdzIGZvciBhbGwgc3VwcG9ydGVkIEJTUHMKKyMgWyBdIERyb3AgbGRjb25maWcgZnJvbSB0aGUgaW5zdGFsbGF0aW9uCisjIFsgXSBNb2RpZnkgdGhlIHJ1bnFlbXUgc2NyaXB0cyB0byB3b3JrIHdpdGggZXh0MiBwYXJhbWV0ZXI6CisjICAgICBydW5xZW11IHFlbXV4ODYgcWVtdXBhcmFtcz0iLW5vZ3JhcGhpYyIgYm9vdHBhcmFtcz0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0wODAwIiAKKyMgWyBdIE1vZGlmeSBidXN5Ym94IHRvIGFsbG93IGZvciBESVNUUk9fRkVBVFVSRVMtbGlrZSBjb25maXJ1cmF0aW9uCisKK3JlcXVpcmUgY29uZi9kaXN0cm8vcG9reS5jb25mCitESVNUUk8gPSAicG9reS10aW55IgorCisjIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgYSBuZXcgInRpbnkiIGZlYXR1cmUKKyNESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB0aW55IgorCisjIERpc3RybyBjb25maWcgaXMgZXZhbHVhdGVkIGFmdGVyIHRoZSBtYWNoaW5lIGNvbmZpZywgc28gd2UgaGF2ZSB0byBleHBsaWNpdGx5CisjIHNldCB0aGUga2VybmVsIHByb3ZpZGVyIHRvIG92ZXJyaWRlIGEgbWFjaGluZSBjb25maWcuCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8tdGlueSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvLXRpbnkgPz0gIjMuMTklIgorCisjIFdlIGNhbiB1c2UgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCwgYnV0IGluIHRoZSBmdXR1cmUgd2UgbWF5IG5lZWQgYSBuZXcgcGFja2FnZWdyb3VwLWNvcmUtdGlueQorI1BPS1lfREVGQVVMVF9FWFRSQV9SREVQRU5EUyArPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKKyMgRHJvcCBrZXJuZWwtbW9kdWxlLWFmLXBhY2tldCBmcm9tIFJSRUNPTU1FTkRTCitQT0tZX0RFRkFVTFRfRVhUUkFfUlJFQ09NTUVORFMgPSAiIgorCisjIEZJWE1FOiB3aGF0IHNob3VsZCB3ZSBkbyB3aXRoIHRoaXM/CitUQ0xJQkNBUFBFTkQgPSAiIgorCisjIERpc2FibGUgd2lkZSBjaGFyIHN1cHBvcnQgZm9yIG5jdXJzZXMgYXMgd2UgZG9uJ3QgaW5jbHVkZSBpdCBpbgorIyBpbiB0aGUgTElCQyBmZWF0dXJlcyBiZWxvdy4KKyMgTGVhdmUgbmF0aXZlIGVuYWJsZSB0byBhdm9pZCBidWlsZCBmYWlsdXJlcworRU5BQkxFX1dJREVDID0gImZhbHNlIgorRU5BQkxFX1dJREVDX2NsYXNzLW5hdGl2ZSA9ICJ0cnVlIgorCisjIERyb3AgbmF0aXZlIGxhbmd1YWdlIHN1cHBvcnQuIFRoaXMgcmVtb3ZlcyB0aGUKKyMgZWdsaWJjLT5iYXNoLT5nZXR0ZXh0LT5saWJjLXBvc2l4LWNsYW5nLXdjaGFyIGRlcGVuZGVuY3kuCitVU0VfTkxTPSJubyIKKworIyBSZWNvbmZpZ3VyZSBlZ2xpYmMgZm9yIGEgc21hbGxlciBpbnN0YWxsYXRpb24KKyMgQ29tbWVudCBvdXQgYW55IG9mIHRoZSBsaW5lcyBiZWxvdyB0byBkaXNhYmxlIHRoZW0gaW4gdGhlIGJ1aWxkCitESVNUUk9fRkVBVFVSRVNfTElCQ19USU5ZID0gImxpYmMtbGlibSBsaWJjLWNyeXB0IgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfVElOWV9hcHBlbmRfeDg2LTY0ID0gIiBsaWJjLWxpYm0tYmlnIgorCisjIFJlcXVpcmVkIGZvciAid2hvIgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfTUlOSU1BTCA9ICJsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLWdldGxvZ2luIgorRElTVFJPX0ZFQVRVUkVTX0xJQkNfUkVHRVggPSAibGliYy1wb3NpeC1yZWdleHAiCitESVNUUk9fRkVBVFVSRVNfTElCQ19ORVQgPSAibGliYy1pbmV0IGxpYmMtbmlzIgorCitESVNUUk9fRkVBVFVSRVNfTElCQyA9ICIke0RJU1RST19GRUFUVVJFU19MSUJDX1RJTll9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfTUlOSU1BTH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTElCQ19SRUdFWH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ORVR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgorCisjIENvbW1lbnQgb3V0IGFueSBvZiB0aGUgbGluZXMgYmVsb3cgdG8gZGlzYWJsZSB0aGVtIGluIHRoZSBidWlsZAorIyBESVNUUk9fRkVBVFVSRVMgb3B0aW9uczoKKyMgYWxzYSBibHVldG9vdGggZXh0MiBpcmRhIHBjbWNpYSB1c2JnYWRnZXQgdXNiaG9zdCB3aWZpIG5mcyB6ZXJvY29uZiBwY2kKK0RJU1RST19GRUFUVVJFU19USU5ZID0gInBjaSIKK0RJU1RST19GRUFUVVJFU19ORVQgPSAiaXB2NCIKK0RJU1RST19GRUFUVVJFU19VU0IgPSAidXNiaG9zdCIKKyNESVNUUk9fRkVBVFVSRVNfVVNCR0FER0VUID0gInVzYmdhZGdldCIKKyNESVNUUk9fRkVBVFVSRVNfV0lGSSA9ICJ3aWZpIgorCitESVNUUk9fRkVBVFVSRVMgPSAiJHtESVNUUk9fRkVBVFVSRVNfVElOWX0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX05FVH0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX1VTQn0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX1VTQkdBREdFVH0gXAorICAgICAgICAgICAgICAgICAgICR7RElTVFJPX0ZFQVRVUkVTX1dJRkl9IFwKKyAgICAgICAgICAgICAgICAgICAke0RJU1RST19GRUFUVVJFU19MSUJDfSBcCisgICAgICAgICAgICAgICAgICAiCisKKyMgRW5hYmxlIExGUyAtIHNlZSBidWcgWU9DVE8gIzU4NjUKK0RJU1RST19GRUFUVVJFU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGxhcmdlZmlsZSIKKworRElTVFJPX0ZFQVRVUkVTX2NsYXNzLW5hdGl2ZSA9ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSAke1BPS1lfREVGQVVMVF9ESVNUUk9fRkVBVFVSRVN9IgorCisjIFVzZSB0bXBkZXZmcyBhbmQgdGhlIGJ1c3lib3ggcnVudGltZSBzZXJ2aWNlcworVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID0gIiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID0gIiIKK1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPSAidGlueS1pbml0IgorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPSAiIgorCisjIEZJWE1FOiBDb25zaWRlciBhZGRpbmcgIm1vZHVsZXMiIHRvIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIHVzaW5nIHRoYXQgaW4KKyMgcGFja2FnZWdyb3VwLWNvcmUtYmFzZSB0byBzZWxlY3QgbW9kdXRpbHMtaW5pdHNjcmlwdHMgb3Igbm90LiAgU2ltaWxhciB3aXRoICJuZXQiIGFuZAorIyBuZXRiYXNlLgorCisjIEJ5IGRlZmF1bHQgd2Ugb25seSBzdXBwb3J0IGluaXRyYW1mcy4gV2UgZG9uJ3QgYnVpbGQgbGl2ZSBhcyB0aGF0CisjIHB1bGxzIGluIGEgbG90IG9mIGRlcGVuZGVuY2llcyBmb3IgdGhlIGxpdmUgaW1hZ2UgYW5kIHRoZSBpbnN0YWxsZXIsIGxpa2UKKyMgdWRldiwgZ3J1YiwgZXRjLiAgVGhlc2UgcHVsbCBpbiBnZXR0ZXh0LCB3aGljaCBmYWlscyB0byBidWlsZCB3aXRoIHdpZGUKKyMgY2hhcmFjdGVyIHN1cHBvcnQuCitJTUFHRV9GU1RZUEVTID0gImNwaW8uZ3oiCisKKyMgRHJvcCB2ODZkIGZyb20gcWVtdSBkZXBlbmRlbmN5IGxpc3QgKHdlIHN1cHBvcnQgc2VyaWFsKQorIyBEcm9wIGdydWIgZnJvbSBtZXRhLWludGVsIEJTUHMKKyMgRklYTUU6IEEgZGlmZmVyZW50IG1lY2hhbmlzbSBpcyBuZWVkZWQgaGVyZS4gV2UgY291bGQgZGVmaW5lIC10aW55CisjICAgICAgICB2YXJpYW50cyBvZiBhbGwgY29tcGF0aWJsZSBtYWNoaW5lcywgYnV0IHRoYXQgbGVhZHMgdG8gYSBsb3QKKyMgICAgICAgIG1vcmUgbWFjaGluZSBjb25maWdzIHRvIG1haW50YWluIGxvbmcgdGVybS4KK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTID0gIiIKKworIyBUaGUgbXRyYWNlIHNjcmlwdCBpbmNsdWRlZCBieSBlZ2xpYmMgaXMgYSBwZXJsIHNjcmlwdC4gVGhpcyBtZWFucyB0aGUgc3lzdGVtCisjIHdpbGwgYnVpbGQgcGVybCBpbiBjYXNlIHRoaXMgcGFja2FnZSBpcyBpbnN0YWxsZWQuIFNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQKKyMgdGhpcyBzY3JpcHQgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aW55LCByZW1vdmUgdGhlIGRlcGVuZGVuY3kgZnJvbSBoZXJlLgorUkRFUEVORFNfJHtQTn0tbXRyYWNlX3BuLWVnbGliYyA9ICIiCisKK1BOQkxBQ0tMSVNUW2J1aWxkLWFwcGxpYW5jZS1pbWFnZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtYmFzZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtY2x1dHRlcl0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtZGlyZWN0ZmJdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLWZ1bGwtY21kbGluZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtbHNiXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1sc2ItZGV2XSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1sc2Itc2RrXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1ydF0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2UtcnQtc2RrXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1zYXRvXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorUE5CTEFDS0xJU1RbY29yZS1pbWFnZS1zYXRvLWRldl0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2Utc2F0by1zZGtdID0gIm5vdCBidWlsZGFibGUgd2l0aCBwb2t5LXRpbnkiCitQTkJMQUNLTElTVFtjb3JlLWltYWdlLXgxMV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW3F0NGUtZGVtby1pbWFnZV0gPSAibm90IGJ1aWxkYWJsZSB3aXRoIHBva3ktdGlueSIKK1BOQkxBQ0tMSVNUW2NvcmUtaW1hZ2Utd2VzdG9uXSA9ICJub3QgYnVpbGRhYmxlIHdpdGggcG9reS10aW55IgorCisjIERpc2FibGUgcHl0aG9uIHVzYWdlIGluIG9wa2ctdXRpbHMgc2luY2UgaXQgd29uJ3QgYnVpbGQgd2l0aCB0aW55IGNvbmZpZworUEFDS0FHRUNPTkZJR19wbi1vcGtnLXV0aWxzID0gIiIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS5jb25mIGIvbWV0YS15b2N0by9jb25mL2Rpc3Ryby9wb2t5LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMTdmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vY29uZi9kaXN0cm8vcG9reS5jb25mCkBAIC0wLDAgKzEsMTA0IEBACitESVNUUk8gPSAicG9reSIKK0RJU1RST19OQU1FID0gIlBva3kgKFlvY3RvIFByb2plY3QgUmVmZXJlbmNlIERpc3RybykiCitESVNUUk9fVkVSU0lPTiA9ICIxLjgrc25hcHNob3QtJHtEQVRFfSIKK0RJU1RST19DT0RFTkFNRSA9ICJtYXN0ZXIiCitTREtfVkVORE9SID0gIi1wb2t5c2RrIgorU0RLX1ZFUlNJT04gOj0gIiR7QCcke0RJU1RST19WRVJTSU9OfScucmVwbGFjZSgnc25hcHNob3QtJHtEQVRFfScsJ3NuYXBzaG90Jyl9IgorCitNQUlOVEFJTkVSID0gIlBva3kgPHBva3lAeW9jdG9wcm9qZWN0Lm9yZz4iCisKK1RBUkdFVF9WRU5ET1IgPSAiLXBva3kiCisKK0xPQ0FMQ09ORl9WRVJTSU9OID0gIjEiCisKKyMgT3ZlcnJpZGUgdGhlc2UgaW4gcG9reSBiYXNlZCBkaXN0cm9zCitQT0tZX0RFRkFVTFRfRElTVFJPX0ZFQVRVUkVTID0gImxhcmdlZmlsZSBvcGVuZ2wgcHRlc3QgbXVsdGlhcmNoIHdheWxhbmQiCitQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFMgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKK1BPS1lfREVGQVVMVF9FWFRSQV9SUkVDT01NRU5EUyA9ICJrZXJuZWwtbW9kdWxlLWFmLXBhY2tldCIKKworRElTVFJPX0ZFQVRVUkVTID89ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSAke1BPS1lfREVGQVVMVF9ESVNUUk9fRkVBVFVSRVN9IgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXV4ODYgPz0gIjQuMSUiCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0b19xZW11eDg2LTY0ID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdWFybSA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXVtaXBzID89ICI0LjElIgorUFJFRkVSUkVEX1ZFUlNJT05fbGludXgteW9jdG9fcWVtdW1pcHM2NCA/PSAiNC4xJSIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvX3FlbXVwcGMgPz0gIjQuMSUiCisKK1NES19OQU1FID0gIiR7RElTVFJPfS0ke1RDTElCQ30tJHtTREtfQVJDSH0tJHtJTUFHRV9CQVNFTkFNRX0tJHtUVU5FX1BLR0FSQ0h9IgorU0RLUEFUSCA9ICIvb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSIKKworRElTVFJPX0VYVFJBX1JERVBFTkRTICs9ICIgJHtQT0tZX0RFRkFVTFRfRVhUUkFfUkRFUEVORFN9IgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTICs9ICIgJHtQT0tZX0RFRkFVTFRfRVhUUkFfUlJFQ09NTUVORFN9IgorCitQT0tZUUVNVURFUFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIklOQ09NUEFUSUJMRV9MSUNFTlNFIiwgIkdQTC0zLjAiLCAiIiwgInBhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbCIsZCl9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11YXJtID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXVhcm02NCA9ICIgJHtQT0tZUUVNVURFUFN9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11bWlwcyA9ICIgJHtQT0tZUUVNVURFUFN9IgorRElTVFJPX0VYVFJBX1JERVBFTkRTX2FwcGVuZF9xZW11cHBjID0gIiAke1BPS1lRRU1VREVQU30iCitESVNUUk9fRVhUUkFfUkRFUEVORFNfYXBwZW5kX3FlbXV4ODYgPSAiICR7UE9LWVFFTVVERVBTfSIKK0RJU1RST19FWFRSQV9SREVQRU5EU19hcHBlbmRfcWVtdXg4Ni02NCA9ICIgJHtQT0tZUUVNVURFUFN9IgorCitUQ0xJQkNBUFBFTkQgPSAiIgorCitRRU1VX1RBUkdFVFMgPz0gImFybSBhYXJjaDY0IGkzODYgbWlwcyBtaXBzZWwgbWlwczY0IHBwYyB4ODZfNjQiCisjIE90aGVyIFFFTVVfVEFSR0VUUyAibWlwczY0ZWwgc2g0IgorCitQUkVNSVJST1JTID8/PSAiXAorYnpyOi8vLiovLiogICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2N2czovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitnaXQ6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZ2l0c206Ly8uKi8uKiBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2hnOi8vLiovLiogICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitvc2M6Ly8uKi8uKiAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorcDQ6Ly8uKi8uKiAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK3N2bjovLy4qLy4qICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiIKKworTUlSUk9SUyA9KyAiXAorZnRwOi8vLiovLiogICAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvIFxuIFwKK2h0dHA6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitodHRwczovLy4qLy4qICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4iCisKKyMgVGhlIENPTk5FQ1RJVklUWV9DSEVDS19VUkkncyBhcmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgd2UgY2FuIHN1Y2Nlc2Z1bGx5CisjIGZldGNoIGZyb20gdGhlIG5ldHdvcmsgKGFuZCB3YXJuIHlvdSBpZiBub3QpLiBUbyBkaXNhYmxlIHRoZSB0ZXN0IHNldAorIyB0aGUgdmFyaWFibGUgdG8gYmUgZW1wdHkuCisjIEdpdCBleGFtcGxlIHVybDogZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8tZmlyZXdhbGwtdGVzdDtwcm90b2NvbD1naXQ7cmV2PW1hc3RlcgorCitDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyA/PSAiIFwKKyAgICAgICAgICAgICBodHRwczovL2V1bGEtZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvaW5kZXgucGhwIFwKKyAgICAgICAgICAgICBodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9yZXBvcnQuY2dpIgorCitTQU5JVFlfVEVTVEVEX0RJU1RST1MgPz0gIiBcCisgICAgICAgICAgICBwb2t5LTEuNyBcbiBcCisgICAgICAgICAgICBwb2t5LTEuOCBcbiBcCisgICAgICAgICAgICBVYnVudHUtMTQuMDQgXG4gXAorICAgICAgICAgICAgVWJ1bnR1LTE0LjEwIFxuIFwKKyAgICAgICAgICAgIFVidW50dS0xNS4wNCBcbiBcCisgICAgICAgICAgICBGZWRvcmEtMjEgXG4gXAorICAgICAgICAgICAgQ2VudE9TLTYuKiBcbiBcCisgICAgICAgICAgICBDZW50T1MtNy4qIFxuIFwKKyAgICAgICAgICAgIERlYmlhbi03LiogXG4gXAorICAgICAgICAgICAgRGViaWFuLTguKiBcbiBcCisgICAgICAgICAgICBvcGVuU1VTRS1wcm9qZWN0LTEzLjIgXG4gXAorICAgICAgICAgICAgIgorCisjIERlZmF1bHQgaGFzaCBwb2xpY3kgZm9yIGRpc3RybworQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gJ09FQmFzaWNIYXNoJworIworIyBPRUxBWU9VVF9BQkkgYWxsb3dzIHVzIHRvIG5vdGlmeSB1c2VycyB3aGVuIHRoZSBmb3JtYXQgb2YgVE1QRElSIGNoYW5nZXMgaW4gCisjIGFuIGluY29tcGF0aWJsZSB3YXkuIFN1Y2ggY2hhbmdlcyBzaG91bGQgdXN1YWxseSBiZSBkZXRhaWxlZCBpbiB0aGUgY29tbWl0CisjIHRoYXQgYnJlYWtzIHRoZSBmb3JtYXQgYW5kIGhhdmUgYmVlbiBwcmV2aW91c2x5IGRpc2N1c3NlZCBvbiB0aGUgbWFpbGluZyBsaXN0IAorIyB3aXRoIGdlbmVyYWwgYWdyZWVtZW50IGZyb20gdGhlIGNvcmUgdGVhbS4KKyMKK09FTEFZT1VUX0FCSSA9ICIxMSIKKworIyBhZGQgcG9reSBzYW5pdHkgYmJjbGFzcworSU5IRVJJVCArPSAicG9reS1zYW5pdHkiCisKKyMgUUEgY2hlY2sgc2V0dGluZ3MgLSBhIGxpdHRsZSBzdHJpY3RlciB0aGFuIHRoZSBPRS1Db3JlIGRlZmF1bHRzCitXQVJOX1RPX0VSUk9SX1FBID0gImFscmVhZHktc3RyaXBwZWQgY29tcGlsZS1ob3N0LXBhdGggaW5zdGFsbC1ob3N0LXBhdGggXAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQtdnMtc2hpcHBlZCBsZGZsYWdzIHBuLW92ZXJyaWRlcyBycGF0aHMgc3RhdGljZGV2IFwKKyAgICAgICAgICAgICAgICAgICAgdXNlbGVzcy1ycGF0aHMiCitXQVJOX1FBX3JlbW92ZSA9ICIke1dBUk5fVE9fRVJST1JfUUF9IgorRVJST1JfUUFfYXBwZW5kID0gIiAke1dBUk5fVE9fRVJST1JfUUF9IgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by9jb25mL2xheWVyLmNvbmYgYi9tZXRhLXlvY3RvL2NvbmYvbGF5ZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQyYjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxNiBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCA9LiAiJHtMQVlFUkRJUn06IgorCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiBcCisgICAgICAgICAgICAke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInlvY3RvIgorQkJGSUxFX1BBVFRFUk5feW9jdG8gPSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV95b2N0byA9ICI1IgorCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKKyMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKK0xBWUVSVkVSU0lPTl95b2N0byA9ICIyIgorCitMQVlFUkRFUEVORFNfeW9jdG8gPSAiY29yZSIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZSBiL21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzEzNDlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlCkBAIC0wLDAgKzEsMjM2IEBACisjCisjIFRoaXMgZmlsZSBpcyB5b3VyIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgaXMgd2hlcmUgYWxsIGxvY2FsIHVzZXIgc2V0dGluZ3MKKyMgYXJlIHBsYWNlZC4gVGhlIGNvbW1lbnRzIGluIHRoaXMgZmlsZSBnaXZlIHNvbWUgZ3VpZGUgdG8gdGhlIG9wdGlvbnMgYSBuZXcgdXNlcgorIyB0byB0aGUgc3lzdGVtIG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGJ1dCBwcmV0dHkgbXVjaCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuCisjIGJlIHNldCBpbiB0aGlzIGZpbGUuIE1vcmUgYWR2ZW50dXJvdXMgdXNlcnMgY2FuIGxvb2sgYXQgbG9jYWwuY29uZi5leHRlbmRlZCAKKyMgd2hpY2ggY29udGFpbnMgb3RoZXIgZXhhbXBsZXMgb2YgY29uZmlndXJhdGlvbiB3aGljaCBjYW4gYmUgcGxhY2VkIGluIHRoaXMgZmlsZQorIyBidXQgbmV3IHVzZXJzIGxpa2VseSB3b24ndCBuZWVkIGFueSBvZiB0aGVtIGluaXRpYWxseS4KKyMKKyMgTGluZXMgc3RhcnRpbmcgd2l0aCB0aGUgJyMnIGNoYXJhY3RlciBhcmUgY29tbWVudGVkIG91dCBhbmQgaW4gc29tZSBjYXNlcyB0aGUgCisjIGRlZmF1bHQgdmFsdWVzIGFyZSBwcm92aWRlZCBhcyBjb21tZW50cyB0byBzaG93IHBlb3BsZSBleGFtcGxlIHN5bnRheC4gRW5hYmxpbmcKKyMgdGhlIG9wdGlvbiBpcyBhIHF1ZXN0aW9uIG9mIHJlbW92aW5nIHRoZSAjIGNoYXJhY3RlciBhbmQgbWFraW5nIGFueSBjaGFuZ2UgdG8gdGhlCisjIHZhcmlhYmxlIGFzIHJlcXVpcmVkLgorCisjCisjIE1hY2hpbmUgU2VsZWN0aW9uCisjCisjIFlvdSBuZWVkIHRvIHNlbGVjdCBhIHNwZWNpZmljIG1hY2hpbmUgdG8gdGFyZ2V0IHRoZSBidWlsZCB3aXRoLiBUaGVyZSBhcmUgYSBzZWxlY3Rpb24KKyMgb2YgZW11bGF0ZWQgbWFjaGluZXMgYXZhaWxhYmxlIHdoaWNoIGNhbiBib290IGFuZCBydW4gaW4gdGhlIFFFTVUgZW11bGF0b3I6CisjCisjTUFDSElORSA/PSAicWVtdWFybSIKKyNNQUNISU5FID89ICJxZW11YXJtNjQiCisjTUFDSElORSA/PSAicWVtdW1pcHMiCisjTUFDSElORSA/PSAicWVtdXBwYyIKKyNNQUNISU5FID89ICJxZW11eDg2IgorI01BQ0hJTkUgPz0gInFlbXV4ODYtNjQiCisjCisjIFRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgYm9hcmQgdGFyZ2V0IG1hY2hpbmVzIGluY2x1ZGVkIGZvciAKKyMgZGVtb25zdHJhdGlvbiBwdXJwb3NlczoKKyMKKyNNQUNISU5FID89ICJiZWFnbGVib25lIgorI01BQ0hJTkUgPz0gImdlbmVyaWN4ODYiCisjTUFDSElORSA/PSAiZ2VuZXJpY3g4Ni02NCIKKyNNQUNISU5FID89ICJtcGM4MzE1ZS1yZGIiCisjTUFDSElORSA/PSAiZWRnZXJvdXRlciIKKyMKKyMgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hY2hpbmUgdG8gYmUgcWVtdXg4NiBpZiBubyBvdGhlciBtYWNoaW5lIGlzIHNlbGVjdGVkOgorTUFDSElORSA/Pz0gInFlbXV4ODYiCisKKyMKKyMgV2hlcmUgdG8gcGxhY2UgZG93bmxvYWRzCisjCisjIER1cmluZyBhIGZpcnN0IGJ1aWxkIHRoZSBzeXN0ZW0gd2lsbCBkb3dubG9hZCBtYW55IGRpZmZlcmVudCBzb3VyY2UgY29kZSB0YXJiYWxscworIyBmcm9tIHZhcmlvdXMgdXBzdHJlYW0gcHJvamVjdHMuIFRoaXMgY2FuIHRha2UgYSB3aGlsZSwgcGFydGljdWxhcmx5IGlmIHlvdXIgbmV0d29yaworIyBjb25uZWN0aW9uIGlzIHNsb3cuIFRoZXNlIGFyZSBhbGwgc3RvcmVkIGluIERMX0RJUi4gV2hlbiB3aXBpbmcgYW5kIHJlYnVpbGRpbmcgeW91CisjIGNhbiBwcmVzZXJ2ZSB0aGlzIGRpcmVjdG9yeSB0byBzcGVlZCB1cCB0aGlzIHBhcnQgb2Ygc3Vic2VxdWVudCBidWlsZHMuIFRoaXMgZGlyZWN0b3J5CisjIGlzIHNhZmUgdG8gc2hhcmUgYmV0d2VlbiBtdWx0aXBsZSBidWlsZHMgb24gdGhlIHNhbWUgbWFjaGluZSB0b28uCisjCisjIFRoZSBkZWZhdWx0IGlzIGEgZG93bmxvYWRzIGRpcmVjdG9yeSB1bmRlciBUT1BESVIgd2hpY2ggaXMgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMKKyNETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCisKKyMKKyMgV2hlcmUgdG8gcGxhY2Ugc2hhcmVkLXN0YXRlIGZpbGVzCisjCisjIEJpdEJha2UgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIGFjY2VsZXJhdGUgYnVpbGRzIGJhc2VkIG9uIHByZXZpb3VzbHkgYnVpbHQgb3V0cHV0LgorIyBUaGlzIGlzIGRvbmUgdXNpbmcgInNoYXJlZCBzdGF0ZSIgZmlsZXMgd2hpY2ggY2FuIGJlIHRob3VnaHQgb2YgYXMgY2FjaGUgb2JqZWN0cworIyBhbmQgdGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB3aGVyZSB0aG9zZSBmaWxlcyBhcmUgcGxhY2VkLgorIworIyBZb3UgY2FuIHdpcGUgb3V0IFRNUERJUiBsZWF2aW5nIHRoaXMgZGlyZWN0b3J5IGludGFjdCBhbmQgdGhlIGJ1aWxkIHdvdWxkIHJlZ2VuZXJhdGUKKyMgZnJvbSB0aGVzZSBmaWxlcyBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgY29uZmlndXJhdGlvbi4gSWYgY2hhbmdlcyB3ZXJlIG1hZGUKKyMgdG8gdGhlIGNvbmZpZ3VyYXRpb24sIG9ubHkgc2hhcmVkIHN0YXRlIGZpbGVzIHdoZXJlIHRoZSBzdGF0ZSB3YXMgc3RpbGwgdmFsaWQgd291bGQKKyMgYmUgdXNlZCAoZG9uZSB1c2luZyBjaGVja3N1bXMpLgorIworIyBUaGUgZGVmYXVsdCBpcyBhIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgdW5kZXIgVE9QRElSLgorIworI1NTVEFURV9ESVIgPz0gIiR7VE9QRElSfS9zc3RhdGUtY2FjaGUiCisKKyMKKyMgV2hlcmUgdG8gcGxhY2UgdGhlIGJ1aWxkIG91dHB1dAorIworIyBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hlcmUgdGhlIGJ1bGsgb2YgdGhlIGJ1aWxkaW5nIHdvcmsgc2hvdWxkIGJlIGRvbmUgYW5kCisjIHdoZXJlIEJpdEJha2Ugc2hvdWxkIHBsYWNlIGl0cyB0ZW1wb3JhcnkgZmlsZXMgYW5kIG91dHB1dC4gS2VlcCBpbiBtaW5kIHRoYXQKKyMgdGhpcyBpbmNsdWRlcyB0aGUgZXh0cmFjdGlvbiBhbmQgY29tcGlsYXRpb24gb2YgbWFueSBhcHBsaWNhdGlvbnMgYW5kIHRoZSB0b29sY2hhaW4KKyMgd2hpY2ggY2FuIHVzZSBHaWdhYnl0ZXMgb2YgaGFyZCBkaXNrIHNwYWNlLgorIworIyBUaGUgZGVmYXVsdCBpcyBhIHRtcCBkaXJlY3RvcnkgdW5kZXIgVE9QRElSLgorIworI1RNUERJUiA9ICIke1RPUERJUn0vdG1wIgorCisjCisjIERlZmF1bHQgcG9saWN5IGNvbmZpZworIworIyBUaGUgZGlzdHJpYnV0aW9uIHNldHRpbmcgY29udHJvbHMgd2hpY2ggcG9saWN5IHNldHRpbmdzIGFyZSB1c2VkIGFzIGRlZmF1bHRzLgorIyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmaW5lIGZvciBnZW5lcmFsIFlvY3RvIHByb2plY3QgdXNlLCBhdCBsZWFzdCBpbml0aWFsbHkuCisjIFVsdGltYXRlbHkgd2hlbiBjcmVhdGluZyBjdXN0b20gcG9saWN5LCBwZW9wbGUgd2lsbCBsaWtlbHkgZW5kIHVwIHN1YmNsYXNzaW5nIAorIyB0aGVzZSBkZWZhdWx0cy4KKyMKK0RJU1RSTyA/PSAicG9reSIKKyMgQXMgYW4gZXhhbXBsZSBvZiBhIHN1YmNsYXNzIHRoZXJlIGlzIGEgImJsZWVkaW5nIiBlZGdlIHBvbGljeSBjb25maWd1cmF0aW9uCisjIHdoZXJlIG1hbnkgdmVyc2lvbnMgYXJlIHNldCB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IGNvZGUgZnJvbSB0aGUgdXBzdHJlYW0gCisjIHNvdXJjZSBjb250cm9sIHN5c3RlbXMuIFRoaXMgaXMganVzdCBtZW50aW9uZWQgaGVyZSBhcyBhbiBleGFtcGxlLCBpdHMgbm90CisjIHVzZWZ1bCB0byBtb3N0IG5ldyB1c2Vycy4KKyMgRElTVFJPID89ICJwb2t5LWJsZWVkaW5nIgorCisjCisjIFBhY2thZ2UgTWFuYWdlbWVudCBjb25maWd1cmF0aW9uCisjCisjIFRoaXMgdmFyaWFibGUgbGlzdHMgd2hpY2ggcGFja2FnaW5nIGZvcm1hdHMgdG8gZW5hYmxlLiBNdWx0aXBsZSBwYWNrYWdlIGJhY2tlbmRzIAorIyBjYW4gYmUgZW5hYmxlZCBhdCBvbmNlIGFuZCB0aGUgZmlyc3QgaXRlbSBsaXN0ZWQgaW4gdGhlIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCAKKyMgdG8gZ2VuZXJhdGUgdGhlIHJvb3QgZmlsZXN5c3RlbXMuCisjIE9wdGlvbnMgYXJlOgorIyAgLSAncGFja2FnZV9kZWInIGZvciBkZWJpYW4gc3R5bGUgZGViIGZpbGVzCisjICAtICdwYWNrYWdlX2lwaycgZm9yIGlwayBmaWxlcyBhcmUgdXNlZCBieSBvcGtnIChhIGRlYmlhbiBzdHlsZSBlbWJlZGRlZCBwYWNrYWdlIG1hbmFnZXIpCisjICAtICdwYWNrYWdlX3JwbScgZm9yIHJwbSBzdHlsZSBwYWNrYWdlcworIyBFLmcuOiBQQUNLQUdFX0NMQVNTRVMgPz0gInBhY2thZ2VfcnBtIHBhY2thZ2VfZGViIHBhY2thZ2VfaXBrIgorIyBXZSBkZWZhdWx0IHRvIHJwbToKK1BBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9ycG0iCisKKyMKKyMgU0RLL0FEVCB0YXJnZXQgYXJjaGl0ZWN0dXJlCisjCisjIFRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgdG8gYnVpbGQgU0RLL0FEVCBpdGVtcyBmb3IgYW5kIG1lYW5zCisjIHlvdSBjYW4gYnVpbGQgdGhlIFNESyBwYWNrYWdlcyBmb3IgYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSBtYWNoaW5lIHlvdSBhcmUgCisjIHJ1bm5pbmcgdGhlIGJ1aWxkIG9uIChpLmUuIGJ1aWxkaW5nIGk2ODYgcGFja2FnZXMgb24gYW4geDg2XzY0IGhvc3QpLgorIyBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBpNjg2IGFuZCB4ODZfNjQKKyNTREtNQUNISU5FID89ICJpNjg2IgorCisjCisjIEV4dHJhIGltYWdlIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMKKyMKKyMgVGhlIEVYVFJBX0lNQUdFX0ZFQVRVUkVTIHZhcmlhYmxlIGFsbG93cyBleHRyYSBwYWNrYWdlcyB0byBiZSBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIAorIyBpbWFnZXMuIFNvbWUgb2YgdGhlc2Ugb3B0aW9ucyBhcmUgYWRkZWQgdG8gY2VydGFpbiBpbWFnZSB0eXBlcyBhdXRvbWF0aWNhbGx5LiBUaGUKKyMgdmFyaWFibGUgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBvcHRpb25zOgorIyAgImRiZy1wa2dzIiAgICAgICAtIGFkZCAtZGJnIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzCisjICAgICAgICAgICAgICAgICAgICAgKGFkZHMgc3ltYm9sIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcvcHJvZmlsaW5nKQorIyAgImRldi1wa2dzIiAgICAgICAtIGFkZCAtZGV2IHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzCisjICAgICAgICAgICAgICAgICAgICAgKHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBkZXZlbG9wIGFnYWluc3QgbGlicyBpbiB0aGUgaW1hZ2UpCisjICAicHRlc3QtcGtncyIgICAgIC0gYWRkIC1wdGVzdCBwYWNrYWdlcyBmb3IgYWxsIHB0ZXN0LWVuYWJsZWQgcGFja2FnZXMKKyMgICAgICAgICAgICAgICAgICAgICAodXNlZnVsIGlmIHlvdSB3YW50IHRvIHJ1biB0aGUgcGFja2FnZSB0ZXN0IHN1aXRlcykKKyMgICJ0b29scy1zZGsiICAgICAgLSBhZGQgZGV2ZWxvcG1lbnQgdG9vbHMgKGdjYywgbWFrZSwgcGtnY29uZmlnIGV0Yy4pCisjICAidG9vbHMtZGVidWciICAgIC0gYWRkIGRlYnVnZ2luZyB0b29scyAoZ2RiLCBzdHJhY2UpCisjICAiZWNsaXBzZS1kZWJ1ZyIgIC0gYWRkIEVjbGlwc2UgcmVtb3RlIGRlYnVnZ2luZyBzdXBwb3J0CisjICAidG9vbHMtcHJvZmlsZSIgIC0gYWRkIHByb2ZpbGluZyB0b29scyAob3Byb2ZpbGUsIGV4bWFwLCBsdHRuZywgdmFsZ3JpbmQpCisjICAidG9vbHMtdGVzdGFwcHMiIC0gYWRkIHVzZWZ1bCB0ZXN0aW5nIHRvb2xzICh0c19wcmludCwgYXBsYXksIGFyZWNvcmQgZXRjLikKKyMgICJkZWJ1Zy10d2Vha3MiICAgLSBtYWtlIGFuIGltYWdlIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudAorIyAgICAgICAgICAgICAgICAgICAgIGUuZy4gc3NoIHJvb3QgYWNjZXNzIGhhcyBhIGJsYW5rIHBhc3N3b3JkCisjIFRoZXJlIGFyZSBvdGhlciBhcHBsaWNhdGlvbiB0YXJnZXRzIHRoYXQgY2FuIGJlIHVzZWQgaGVyZSB0b28sIHNlZQorIyBtZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcyBhbmQgbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcyBmb3IgbW9yZSBkZXRhaWxzLgorIyBXZSBkZWZhdWx0IHRvIGVuYWJsaW5nIHRoZSBkZWJ1Z2dpbmcgdHdlYWtzLgorRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAiZGVidWctdHdlYWtzIgorCisjCisjIEFkZGl0aW9uYWwgaW1hZ2UgZmVhdHVyZXMKKyMKKyMgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBjbGFzc2VzIHRvIHVzZSB3aGVuIGJ1aWxkaW5nIGltYWdlcyB3aGljaAorIyBlbmFibGUgZXh0cmEgZmVhdHVyZXMuIFNvbWUgYXZhaWxhYmxlIG9wdGlvbnMgd2hpY2ggY2FuIGJlIGluY2x1ZGVkIGluIHRoaXMgdmFyaWFibGUgCisjIGFyZToKKyMgICAtICdidWlsZHN0YXRzJyBjb2xsZWN0IGJ1aWxkIHN0YXRpc3RpY3MKKyMgICAtICdpbWFnZS1ta2xpYnMnIHRvIHJlZHVjZSBzaGFyZWQgbGlicmFyeSBmaWxlcyBzaXplIGZvciBhbiBpbWFnZQorIyAgIC0gJ2ltYWdlLXByZWxpbmsnIGluIG9yZGVyIHRvIHByZWxpbmsgdGhlIGZpbGVzeXN0ZW0gaW1hZ2UKKyMgICAtICdpbWFnZS1zd2FiJyB0byBwZXJmb3JtIGhvc3Qgc3lzdGVtIGludHJ1c2lvbiBkZXRlY3Rpb24KKyMgTk9URTogaWYgbGlzdGluZyBta2xpYnMgJiBwcmVsaW5rIGJvdGgsIHRoZW4gbWFrZSBzdXJlIG1rbGlicyBpcyBiZWZvcmUgcHJlbGluaworIyBOT1RFOiBta2xpYnMgYWxzbyBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgZm9yIGEgZ2l2ZW4gaW1hZ2UsIHNlZSBsb2NhbC5jb25mLmV4dGVuZGVkCitVU0VSX0NMQVNTRVMgPz0gImJ1aWxkc3RhdHMgaW1hZ2UtbWtsaWJzIGltYWdlLXByZWxpbmsiCisKKyMKKyMgUnVudGltZSB0ZXN0aW5nIG9mIGltYWdlcworIworIyBUaGUgYnVpbGQgc3lzdGVtIGNhbiB0ZXN0IGJvb3RpbmcgdmlydHVhbCBtYWNoaW5lIGltYWdlcyB1bmRlciBxZW11IChhbiBlbXVsYXRvcikKKyMgYWZ0ZXIgYW55IHJvb3QgZmlsZXN5c3RlbXMgYXJlIGNyZWF0ZWQgYW5kIHJ1biB0ZXN0cyBhZ2FpbnN0IHRob3NlIGltYWdlcy4gVG8KKyMgZW5hYmxlIHRoaXMgdW5jb21tZW50IHRoaXMgbGluZS4gU2VlIGNsYXNzZXMvdGVzdGltYWdlKC1hdXRvKS5iYmNsYXNzIGZvcgorIyBmdXJ0aGVyIGRldGFpbHMuCisjVEVTVF9JTUFHRSA9ICIxIgorIworIyBJbnRlcmFjdGl2ZSBzaGVsbCBjb25maWd1cmF0aW9uCisjCisjIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGUgc3lzdGVtIG1heSBuZWVkIGlucHV0IGZyb20geW91IGFuZCB0byBkbyB0aGlzIGl0IAorIyBjYW4gbGF1bmNoIGFuIGludGVyYWN0aXZlIHNoZWxsLiBJdCBuZWVkcyB0byBkbyB0aGlzIHNpbmNlIHRoZSBidWlsZCBpcyAKKyMgbXVsdGl0aHJlYWRlZCBhbmQgbmVlZHMgdG8gYmUgYWJsZSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXJhbGxlbAorIyBwcm9jZXNzIG1heSByZXF1aXJlIHRoZSB1c2VyJ3MgYXR0ZW50aW9uLiBUaGUgZGVmYXVsdCBpcyBpdGVyYXRlIG92ZXIgdGhlIGF2YWlsYWJsZQorIyB0ZXJtaW5hbCB0eXBlcyB0byBmaW5kIG9uZSB0aGF0IHdvcmtzLgorIworIyBFeGFtcGxlcyBvZiB0aGUgb2NjYXNpb25zIHRoaXMgbWF5IGhhcHBlbiBhcmUgd2hlbiByZXNvbHZpbmcgcGF0Y2hlcyB3aGljaCBjYW5ub3QKKyMgYmUgYXBwbGllZCwgdG8gdXNlIHRoZSBkZXZzaGVsbCBvciB0aGUga2VybmVsIG1lbnVjb25maWcKKyMKKyMgU3VwcG9ydGVkIHZhbHVlcyBhcmUgYXV0bywgZ25vbWUsIHhmY2UsIHJ4dnQsIHNjcmVlbiwga29uc29sZSAoS0RFIDMueCBvbmx5KSwgbm9uZQorIyBOb3RlOiBjdXJyZW50bHksIEtvbnNvbGUgc3VwcG9ydCBvbmx5IHdvcmtzIGZvciBLREUgMy54IGR1ZSB0byB0aGUgd2F5CisjIG5ld2VyIEtvbnNvbGUgdmVyc2lvbnMgYmVoYXZlCisjT0VfVEVSTUlOQUwgPSAiYXV0byIKKyMgQnkgZGVmYXVsdCBkaXNhYmxlIGludGVyYWN0aXZlIHBhdGNoIHJlc29sdXRpb24gKHRhc2tzIHdpbGwganVzdCBmYWlsIGluc3RlYWQpOgorUEFUQ0hSRVNPTFZFID0gIm5vb3AiCisKKyMKKyMgRGlzayBTcGFjZSBNb25pdG9yaW5nIGR1cmluZyB0aGUgYnVpbGQKKyMKKyMgTW9uaXRvciB0aGUgZGlzayBzcGFjZSBkdXJpbmcgdGhlIGJ1aWxkLiBJZiB0aGVyZSBpcyBsZXNzIHRoYXQgMUdCIG9mIHNwYWNlIG9yIGxlc3MKKyMgdGhhbiAxMDBLIGlub2RlcyBpbiBhbnkga2V5IGJ1aWxkIGxvY2F0aW9uIChUTVBESVIsIERMX0RJUiwgU1NUQVRFX0RJUiksIGdyYWNlZnVsbHkKKyMgc2h1dGRvd24gdGhlIGJ1aWxkLiBJZiB0aGVyZSBpcyBsZXNzIHRoYXQgMTAwTUIgb3IgMUsgaW5vZGVzLCBwZXJmb3JtIGEgaGFyZCBhYm9ydAorIyBvZiB0aGUgYnVpbGQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBydW5uaW5nIGNvbXBsZXRlbHkgb3V0IG9mIHNwYWNlIGNhbiBjb3JydXB0CisjIGZpbGVzIGFuZCBkYW1hZ2VzIHRoZSBidWlsZCBpbiB3YXlzIHdoaWNoIG1heSBub3QgYmUgZWFzaWx5IHJlY292ZXJhYmxlLgorIyBJdCdzIG5lY2VzYXJ5IHRvIG1vbml0b3IgL3RtcCwgaWYgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCB0aGUgYnVpbGQgd2lsbCBmYWlsCisjIHdpdGggdmVyeSBleG90aWMgZXJyb3JzLgorQkJfRElTS01PTl9ESVJTID0gIlwKKyAgICBTVE9QVEFTS1MsJHtUTVBESVJ9LDFHLDEwMEsgXAorICAgIFNUT1BUQVNLUywke0RMX0RJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyBcCisgICAgU1RPUFRBU0tTLC90bXAsMTAwTSwxMDBLIFwKKyAgICBBQk9SVCwke1RNUERJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsJHtETF9ESVJ9LDEwME0sMUsgXAorICAgIEFCT1JULCR7U1NUQVRFX0RJUn0sMTAwTSwxSyBcCisgICAgQUJPUlQsL3RtcCwxME0sMUsiCisKKyMKKyMgU2hhcmVkLXN0YXRlIGZpbGVzIGZyb20gb3RoZXIgbG9jYXRpb25zCisjCisjIEFzIG1lbnRpb25lZCBhYm92ZSwgc2hhcmVkIHN0YXRlIGZpbGVzIGFyZSBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgd2hpY2ggY2FuIAorIyB1c2VkIHRvIGFjY2VsZXJhdGUgYnVpbGQgdGltZS4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHN5c3RlbQorIyB0byBzZWFyY2ggb3RoZXIgbWlycm9yIGxvY2F0aW9ucyBmb3IgdGhlc2Ugb2JqZWN0cyBiZWZvcmUgaXQgYnVpbGRzIHRoZSBkYXRhIGl0c2VsZi4KKyMKKyMgVGhpcyBjYW4gYmUgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSwgb3IgYSByZW1vdGUgdXJsIHN1Y2ggYXMgaHR0cCBvciBmdHAuIFRoZXNlCisjIHdvdWxkIGNvbnRhaW4gdGhlIHNzdGF0ZS1jYWNoZSByZXN1bHRzIGZyb20gcHJldmlvdXMgYnVpbGRzIChwb3NzaWJseSBmcm9tIG90aGVyIAorIyBtYWNoaW5lcykuIFRoaXMgdmFyaWFibGUgd29ya3MgbGlrZSBmZXRjaGVyIE1JUlJPUlMvUFJFTUlSUk9SUyBhbmQgcG9pbnRzIHRvIHRoZSAKKyMgY2FjaGUgbG9jYXRpb25zIHRvIGNoZWNrIGZvciB0aGUgc2hhcmVkIG9iamVjdHMuCisjIE5PVEU6IGlmIHRoZSBtaXJyb3IgdXNlcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgU1NUQVRFX0RJUiwgeW91IG5lZWQgdG8gYWRkIFBBVEgKKyMgYXQgdGhlIGVuZCBhcyBzaG93biBpbiB0aGUgZXhhbXBsZXMgYmVsb3cuIFRoaXMgd2lsbCBiZSBzdWJzdGl0dXRlZCB3aXRoIHRoZQorIyBjb3JyZWN0IHBhdGggd2l0aGluIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlLgorI1NTVEFURV9NSVJST1JTID89ICJcCisjZmlsZTovLy4qIGh0dHA6Ly9zb21lc2VydmVyLnRsZC9zaGFyZS9zc3RhdGUvUEFUSDtkb3dubG9hZGZpbGVuYW1lPVBBVEggXG4gXAorI2ZpbGU6Ly8uKiBmaWxlOi8vL3NvbWUvbG9jYWwvZGlyL3NzdGF0ZS9QQVRIIgorCisKKyMKKyMgUWVtdSBjb25maWd1cmF0aW9uCisjCisjIEJ5IGRlZmF1bHQgcWVtdSB3aWxsIGJ1aWxkIHdpdGggYSBidWlsdGluIFZOQyBzZXJ2ZXIgd2hlcmUgZ3JhcGhpY2FsIG91dHB1dCBjYW4gYmUKKyMgc2Vlbi4gVGhlIHR3byBsaW5lcyBiZWxvdyBlbmFibGUgdGhlIFNETCBiYWNrZW5kIHRvby4gVGhpcyBhc3N1bWVzIHRoZXJlIGlzIGEKKyMgbGlic2RsIGxpYnJhcnkgYXZhaWxhYmxlIG9uIHlvdXIgYnVpbGQgc3lzdGVtLgorUEFDS0FHRUNPTkZJR19hcHBlbmRfcG4tcWVtdS1uYXRpdmUgPSAiIHNkbCIKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLW5hdGl2ZXNkay1xZW11ID0gIiBzZGwiCitBU1NVTUVfUFJPVklERUQgKz0gImxpYnNkbC1uYXRpdmUiCisKKworIyBDT05GX1ZFUlNJT04gaXMgaW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mLyBjaGFuZ2VzIGluY29tcGF0aWJseSBhbmQgaXMgdXNlZCB0bworIyB0cmFjayB0aGUgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2hlbiBpdCB3YXMgZ2VuZXJhdGVkLiBUaGlzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpZgorIyB0aGlzIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyB0byB5b3UuCitDT05GX1ZFUlNJT04gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZCBiL21ldGEteW9jdG8vY29uZi9sb2NhbC5jb25mLnNhbXBsZS5leHRlbmRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RkMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL2xvY2FsLmNvbmYuc2FtcGxlLmV4dGVuZGVkCkBAIC0wLDAgKzEsMzc0IEBACisjIEJCTUFTSyBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlbGwgQml0QmFrZSB0byBpZ25vcmUKKyMgY2VydGFpbiByZWNpcGVzLgorI0JCTUFTSyA9ICIiCisKKyMKKyMgUGFyYWxsZWxpc20gT3B0aW9ucworIworIyBUaGVzZSB0d28gb3B0aW9ucyBjb250cm9sIGhvdyBtdWNoIHBhcmFsbGVsaXNtIEJpdEJha2Ugc2hvdWxkIHVzZS4gVGhlIGZpcnN0CisjIG9wdGlvbiBkZXRlcm1pbmVzIGhvdyBtYW55IHRhc2tzIGJpdGJha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbDoKKyMKKyNCQl9OVU1CRVJfVEhSRUFEUyA/PSAiNCIKKyMKKyMgRGVmYXVsdCB0byBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gY3B1IGNvdW50CisjQkJfTlVNQkVSX1RIUkVBRFMgPz0gIiR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKyMKKyMgVGhlIHNlY29uZCBvcHRpb24gY29udHJvbHMgaG93IG1hbnkgcHJvY2Vzc2VzIG1ha2Ugc2hvdWxkIHJ1biBpbiBwYXJhbGxlbCB3aGVuCisjIHJ1bm5pbmcgY29tcGlsZSB0YXNrczoKKyMKKyNQQVJBTExFTF9NQUtFID89ICItaiA0IgorIworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKKyNQQVJBTExFTF9NQUtFID89ICItaiAke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisjCisjIEZvciBhIHF1YWQtY29yZSBtYWNoaW5lLCBCQl9OVU1CRVJfVEhSRUFEUyA9ICI0IiwgUEFSQUxMRUxfTUFLRSA9ICItaiA0IiB3b3VsZAorIyBiZSBhcHByb3ByaWF0ZSBmb3IgZXhhbXBsZS4KKworCisjIGdsaWJjIGNvbmZpZ3VyYWJpbGl0eSBpcyB1c2VkIHRvIHJlZHVjZSBtaW5pbWFsIGltYWdlJ3Mgc2l6ZS4KKyMgdGhlIGFsbCBzdXBwb3J0ZWQgZ2xpYmMgb3B0aW9ucyBhcmUgbGlzdGVkIGluIERJU1RST19GRUFUVVJFU19MSUJDCisjIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0LiBVbmNvbW1lbnQgYW5kIGNvcHkgdGhlIERJU1RST19GRUFUVVJFU19MSUJDCisjIGFuZCBESVNUUk9fRkVBVFVSRVMgZGVmaW5pdGlvbnMgdG8gbG9jYWwuY29uZiB0byBlbmFibGUgdGhlIG9wdGlvbnMuCisjRElTVFJPX0ZFQVRVUkVTX0xJQkMgPSAiaXB2NiBsaWJjLWJhY2t0cmFjZSBsaWJjLWJpZy1tYWNyb3MgbGliYy1ic2QgbGliYy1jeHgtdGVzdHMgbGliYy1jYXRnZXRzIGxpYmMtY2hhcnNldHMgbGliYy1jcnlwdCBcCisjICAgICAgICAgICAgICAgbGliYy1jcnlwdC11ZmMgbGliYy1kYi1hbGlhc2VzIGxpYmMtZW52eiBsaWJjLWZjdnQgbGliYy1mbXRtc2cgbGliYy1mc3RhYiBsaWJjLWZ0cmF2ZXJzZSBcCisjICAgICAgICAgICAgICAgbGliYy1nZXRsb2dpbiBsaWJjLWlkbiBsaWJjLWluZXQgbGliYy1pbmV0LWFubCBsaWJjLWxpYm0gbGliYy1sb2NhbGVzIGxpYmMtbG9jYWxlLWNvZGUgXAorIyAgICAgICAgICAgICAgIGxpYmMtbWVtdXNhZ2UgbGliYy1uaXMgbGliYy1uc3N3aXRjaCBsaWJjLXJjbWQgbGliYy1ydGxkLWRlYnVnIGxpYmMtc3Bhd24gbGliYy1zdHJlYW1zIGxpYmMtc3VucnBjIFwKKyMgICAgICAgICAgICAgICBsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLXdvcmRleHAgbGliYy1wb3NpeC1jbGFuZy13Y2hhciBsaWJjLXBvc2l4LXJlZ2V4cCBsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYyBcCisjICAgICAgICAgICAgICAgbGliYy1wb3NpeC13Y2hhci1pbyIKKworI0RJU1RST19GRUFUVVJFUyA9ICJhbHNhIGJsdWV0b290aCBleHQyIGlyZGEgcGNtY2lhIHVzYmdhZGdldCB1c2Job3N0IHdpZmkgbmZzIHplcm9jb25mIHBjaSAke0RJU1RST19GRUFUVVJFU19MSUJDfSIKKworIyBJZiB5b3Ugd2FudCB0byBnZXQgYW4gaW1hZ2UgYmFzZWQgb24gZGlyZWN0ZmIgd2l0aG91dCB4MTEsIFBsZWFzZSBjb3B5IHRoaXMgdmFyaWFibGUgdG8gYnVpbGQvY29uZi9sb2NhbC5jb25mCisjRElTVFJPX0ZFQVRVUkVTID0gImFsc2EgYXJncCBibHVldG9vdGggZXh0MiBpcmRhIGxhcmdlZmlsZSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSB4YXR0ciBuZnMgemVyb2NvbmYgcGNpIDNnIGRpcmVjdGZiICR7RElTVFJPX0ZFQVRVUkVTX0xJQkN9IgorCisjIEVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gY29udHJvbHMgdGhlIGdlbmVyYXRpb24gb2YgYmluYXJ5IGxvY2FsZQorIyBwYWNrYWdlcyBhdCBidWlsZCB0aW1lIHVzaW5nIHFlbXUtbmF0aXZlLiBEaXNhYmxpbmcgaXQgKGJ5IHNldHRpbmcgaXQgdG8gMCkKKyMgd2lsbCBzYXZlIHNvbWUgYnVpbGQgdGltZSBhdCB0aGUgZXhwZW5zZSBvZiBicmVha2luZyBpMThuIG9uIGRldmljZXMgd2l0aAorIyBsZXNzIHRoYW4gMTI4TUIgUkFNLgorI0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gPSAiMSIKKworIyBTZXQgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyB0byB0aGUgbG9jYWxlcyB5b3Ugd2lzaCB0byBnZW5lcmF0ZSBzaG91bGQgeW91IG5vdAorIyB3aXNoIHRvIHBlcmZvcm0gdGhlIHRpbWUtY29uc3VtaW5nIHN0ZXAgb2YgZ2VuZXJhdGluZyBhbGwgTElCQyBsb2NhbGVzLgorIyBOT1RFOiBJZiByZW1vdmluZyBlbl9VUy5VVEYtOCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gdW5jb21tZW50LCBhbmQgc2V0CisjIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBJTUFHRV9MSU5HVUFTLgorIyBXQVJOSU5HOiB0aGlzIG1heSBicmVhayBsb2NhbGlzYXRpb24hCisjR0xJQkNfR0VORVJBVEVfTE9DQUxFUyA9ICJlbl9HQi5VVEYtOCBlbl9VUy5VVEYtOCIKKyNJTUFHRV9MSU5HVUFTID89ICJlbi1nYiIKKworIyBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIHRvIGNvbnRyb2wgb3B0aW9ucyByZWxhdGVkIHRvIGRlYnVnZ2luZy4KKyMKKyMgVW5jb21tZW50IHRoaXMgdG8gY2hhbmdlIHRoZSBvcHRpbWl6YXRpb24gdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzZXIsIGF0IHRoZSAKKyMgcG9zc2libGUgY29zdCBvZiBwZXJmb3JtYW5jZS4KKyMgREVCVUdfQlVJTEQgPSAiMSIKKyMKKyMgVW5jb21tZW50IHRoaXMgdG8gZGlzYWJsZSB0aGUgc3RyaXBwaW5nIG9mIHRoZSBpbnN0YWxsZWQgYmluYXJpZXMKKyMgSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCisjCisjIFVuY29tbWVudCB0aGlzIHRvIGRpc2FibGUgdGhlIHNwbGl0IG9mIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbnRvIC1kYmcgZmlsZXMKKyMgSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisjCisjIFdoZW4gc3BsaXR0aW5nIGRlYnVnIGluZm9ybWF0aW9uLCB0aGUgZm9sbG93aW5nIGNvbnRyb2xzIHRoZSByZXN1bHRzIG9mIHRoZQorIyBmaWxlIHNwbGl0dGluZy4KKyMKKyMgIC5kZWJ1ZyAoZGVmYXVsdCk6CisjICAgIFdoZW4gc3BsaXR0aW5nIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHBsYWNlZCBpbnRvCisjICAgIGEgLmRlYnVnIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSBkaXJuYW1lIG9mIHRoZSBiaW5hcnkgcHJvZHVjZWQ6CisjICAgICAgL2Jpbi9mb28gLT4gL2Jpbi8uZGVidWcvZm9vCisjCisjICBkZWJ1Zy1maWxlLWRpcmVjdG9yeToKKyMgICAgV2hlbiBzcGxpdHRpbmcgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHdpbGwgYmUgcGxhY2VkIGludG8KKyMgICAgYSBjZW50cmFsIGRlYnVnLWZpbGUtZGlyZWN0b3J5LCAvdXNyL2xpYi9kZWJ1ZzoKKyMgICAgICAvYmluL2ZvbyAtPiAvdXNyL2xpYi9kZWJ1Zy9iaW4vZm9vLmRlYnVnCisjCisjICAgIEFueSBzb3VyY2UgY29kZSByZWZlcmVuY2VkIGluIHRoZSBkZWJ1ZyBzeW1ib2xzIHdpbGwgYmUgY29waWVkCisjICAgIGFuZCBtYWRlIGF2YWlsYWJsZSB3aXRoaW4gdGhlIC91c3Ivc3JjL2RlYnVnIGRpcmVjdG9yeQorIworI1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUgPSAnLmRlYnVnJworIyBQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFID0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JworCisjIFVuY29tbWVudCB0aGVzZSB0byBidWlsZCBhIHBhY2thZ2Ugc3VjaCB0aGF0IHlvdSBjYW4gdXNlIGdwcm9mIHRvIHByb2ZpbGUgaXQuCisjIE5PVEU6IFRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCAnbGludXgnIHRhcmdldHMsIG5vdAorIyAnbGludXgtdWNsaWJjJywgYXMgdUNsaWJjIGRvZXNuJ3QgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdCBmaWxlcy4gIEFsc28sIGRvbid0IGJ1aWxkIGdsaWJjIGl0c2VsZiB3aXRoIHRoZXNlCisjIGZsYWdzLCBvciBpdCdsbCBmYWlsIHRvIGJ1aWxkLgorIworIyBQUk9GSUxFX09QVElNSVpBVElPTiA9ICItcGciCisjIFNFTEVDVEVEX09QVElNSVpBVElPTiA9ICIke1BST0ZJTEVfT1BUSU1JWkFUSU9OfSIKKyMgTERGTEFHUyA9KyAiLXBnIgorCisjIFRDTU9ERSBjb250cm9scyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBnZW5lcmF0ZWQgcGFja2FnZXMvaW1hZ2VzIGJ5CisjIHRlbGxpbmcgcG9reSB3aGljaCB0b29sY2hhaW4gJ3Byb2ZpbGUnIHRvIHVzZS4KKyMKKyMgVGhlIGRlZmF1bHQgaXMgImRlZmF1bHQiIHdoaWNoIHVzZXMgdGhlIGludGVybmFsIHRvb2xjaGFpbi4gV2l0aAorIyBhZGRpdGlvbmFsIGxheWVycywgaXQgaXMgcG9zc2libGUgdG8gc2V0IHRoaXMgdG8gdXNlIGEgcHJlY29tcGlsZWQKKyMgZXh0ZXJuYWwgdG9vbGNoYWluLiBPbmUgZXhhbXBsZSBpcyB0aGUgU291cmNlcnkgRysrIFRvb2xjaGFpbiwgc3VwcG9ydAorIyBmb3Igd2hpY2ggaXMgbm93IGluIHRoZSBzZXBhcmF0ZSBtZXRhLXNvdXJjZXJ5IGxheWVyOgorIworIyAgaHR0cDovL2dpdGh1Yi5jb20vTWVudG9yRW1iZWRkZWQvbWV0YS1zb3VyY2VyeS8KKyMKKyMgbWV0YS1zb3VyY2VyeSBjYW4gYmUgdXNlZCBhcyBhIHRlbXBsYXRlIGZvciBhZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIKKyMgZXh0ZXJuYWwgdG9vbGNoYWlucy4gU2VlIHRoZSBsaW5rIGFib3ZlIGZvciBmdXJ0aGVyIGRldGFpbHMuCisjCisjIFRDTU9ERSBwb2ludHMgdGhlIHN5c3RlbSB0byBhIGZpbGUgaW4gY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtJHtUQ01PREV9LmluYywKKyMgc28gZm9yIG1ldGEtc291cmNlcnkgd2hpY2ggaGFzIGNvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWV4dGVybmFsLXNvdXJjZXJ5LmluYworIyB5b3Ugd291bGQgc2V0IGl0IGFzIGZvbGxvd3M6CisjCisjIFRDTU9ERSA/PSAiZXh0ZXJuYWwtc291cmNlcnkiCisKKyMgbWtsaWJzIGxpYnJhcnkgc2l6ZSBvcHRpbWl6YXRpb24gaXMgbW9yZSB1c2VmdWwgdG8gc21hbGxlciBpbWFnZXMsCisjIGFuZCBsZXNzIHVzZWZ1bCBmb3IgYmlnZ2VyIGltYWdlcy4gQWxzbyBta2xpYnMgbGlicmFyeSBvcHRpbWl6YXRpb24KKyMgY2FuIGJyZWFrIHRoZSBBQkkgY29tcGF0aWJpbGl0eSwgc28gc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoZQorIyBpbWFnZXMgd2hpY2ggYXJlIHRvIGJlIGV4dGVuZGVkIG9yIHVwZ3JhZGVkIGxhdGVyLgorI1RoaXMgZW5hYmxlZCBta2xpYnMgbGlicmFyeSBzaXplIG9wdGltaXphdGlvbiBqdXN0IGZvciB0aGUgc3BlY2lmaWVkIGltYWdlLgorI01LTElCU19PUFRJTUlaRURfSU1BR0VTID89ICJjb3JlLWltYWdlLW1pbmltYWwiCisjVGhpcyBlbmFibGUgbWtsaWJzIGxpYnJhcnkgc2l6ZSBvcHRpbWl6YXRpb24gd2lsbCBiZSBmb3IgYWxsIHRoZSBpbWFnZXMuCisjTUtMSUJTX09QVElNSVpFRF9JTUFHRVMgPz0gImFsbCIKKworIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3VyIGhvc3QgZGlzdHJpYnV0aW9uIHByb3ZpZGVzIHRoZSBoZWxwMm1hbiB0b29sLgorI0FTU1VNRV9QUk9WSURFRCArPSAiaGVscDJtYW4tbmF0aXZlIgorCisjIFRoaXMgdmFsdWUgaXMgY3VycmVudGx5IHVzZWQgYnkgcHNldWRvIHRvIGRldGVybWluZSBpZiB0aGUgcmVjaXBlIHNob3VsZAorIyBidWlsZCBib3RoIHRoZSAzMi1iaXQgYW5kIDY0LWJpdCB3cmFwcGVyIGxpYnJhcmllcyBvbiBhIDY0LWJpdCBidWlsZCBzeXN0ZW0uCisjCisjIFBzZXVkbyB3aWxsIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIGEgMzItYml0IHdyYXBwZXIgaXMgbmVjZXNzYXJ5LCBidXQKKyMgaXQgZG9lc24ndCBhbHdheXMgZ3Vlc3MgcHJvcGVybHkuICBJZiB5b3UgaGF2ZSAzMi1iaXQgZXhlY3V0YWJsZXMgb24gCisjIHlvdXIgNjQtYml0IGJ1aWxkIHN5c3RlbSwgeW91IGxpa2VseSB3YW50IHRvIHNldCB0aGlzIHRvICIwIiwgCisjIG90aGVyd2lzZSB5b3UgY291bGQgZW5kIHVwIHdpdGggaW5jb3JyZWN0IGZpbGUgYXR0cmlidXRlcyBvbiB0aGUgCisjIHRhcmdldCBmaWxlc3lzdGVtLgorIworIyBEZWZhdWx0IGlzIHRvIG5vdCBidWlsZCAzMiBiaXQgbGlicyBvbiA2NCBiaXQgc3lzdGVtcywgdW5jb21tZW50IHRoaXMKKyMgaWYgeW91IG5lZWQgdGhlIDMyIGJpdHMgbGlicworI05PMzJMSUJTID0gIjAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gZW5hYmxlIG11bHRpbGliIGJ1aWxkcworI3JlcXVpcmUgY29uZi9tdWx0aWxpYi5jb25mCisjTVVMVElMSUJTID0gIm11bHRpbGliOmxpYjMyIgorI0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi1saWIzMiA9ICJ4ODYiCisKKyMgU2V0IFJQTV9QUkVGRVJfRUxGX0FSQ0ggdG8gY29uZmlndXJlIHByZWZlcnJlZCBBQkkgd2hlbiB1c2luZyBycG0gcGFja2FnaW5nCisjIGJhY2tlbmQgdG8gZ2VuZXJhdGUgYSByb290ZnMsIGNob2ljZXMgYXJlOgorIyAxOiBFTEYzMiB3aW5zCisjIDI6IEVMRjY0IHdpbnMKKyMgNDogRUxGNjQgTjMyIHdpbnMgKGZvciBtaXBzNjQgb3IgbWlwczY0ZWwgb25seSkKKyNSUE1fUFJFRkVSX0VMRl9BUkNIID89ICIyIgorCisjIFRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydAorIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBlbmFibGUgUFJzZXJ2aWNlLgorIyBTZXQgUFJTRVJWX0hPU1QgdG8gJ2xvY2FsaG9zdDowJyB0byBhdXRvbWF0aWNhbGx5CisjIHN0YXJ0IGxvY2FsIFBSU2VydmljZS4KKyMgU2V0IHRvIG90aGVyIHZhbHVlcyB0byB1c2UgcmVtb3RlIFBSU2VydmljZS4KKyNQUlNFUlZfSE9TVCA9ICJsb2NhbGhvc3Q6MCIKKworIyBBZGRpdGlvbmFsIGltYWdlIGdlbmVyYXRpb24gZmVhdHVyZXMKKyMKKyMgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgY2xhc3NlcyB0byBpbXBvcnQgdG8gdXNlIGluIHRoZSBnZW5lcmF0aW9uIG9mIGltYWdlcworIyBjdXJyZW50bHkgYW4gZXhhbXBsZSBjbGFzcyBpcyBpbWFnZV90eXBlc191Ym9vdAorIyBJTUFHRV9DTEFTU0VTID0gIiBpbWFnZV90eXBlc191Ym9vdCIKKworIyBJbmNyZW1lbnRhbCBycG0gaW1hZ2UgZ2VuZXJhdGlvbiwgdGhlIHJvb3RmcyB3b3VsZCBiZSB0b3RhbGx5IHJlbW92ZWQKKyMgYW5kIHJlLWNyZWF0ZWQgaW4gdGhlIHNlY29uZCBnZW5lcmF0aW9uIGJ5IGRlZmF1bHQsIGJ1dCB3aXRoCisjIElOQ19SUE1fSU1BR0VfR0VOID0gIjEiLCB0aGUgcnBtIGJhc2VkIHJvb3RmcyB3b3VsZCBiZSBrZXB0LCBhbmQgd2lsbAorIyBkbyB1cGRhdGUocmVtb3ZlL2FkZCBzb21lIHBrZ3MpIG9uIGl0LiAgTk9URTogVGhpcyBpcyBub3Qgc3VnZ2VzdGVkCisjIHdoZW4geW91IHdhbnQgdG8gY3JlYXRlIGEgcHJvZHVjdGl2ZSByb290ZnMKKyNJTkNfUlBNX0lNQUdFX0dFTiA9ICIxIgorCisjIFRoaXMgaXMgYSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgcmVxdWlyZSBhIGNvbW1lcmNpYWwgbGljZW5zZSB0byBzaGlwCisjIHByb2R1Y3QuIElmIHNoaXBwZWQgYXMgcGFydCBvZiBhbiBpbWFnZSB0aGVzZSBwYWNrYWdlcyBtYXkgaGF2ZQorIyBpbXBsaWNhdGlvbnMgc28gdGhleSBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIGVuYWJsZSB0aGVtLAorIyB1bi1jb21tZW50IHRoZSBiZWxvdyBhcyBhcHByb3ByaWF0ZS4KKyNMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCA9ICJjb21tZXJjaWFsX2dzdC1mbHVlbmRvLW1wMyBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVyY2lhbF9nc3Qtb3Blbm1heCBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVyY2lhbF9nc3QtcGx1Z2lucy11Z2x5IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2xhbWUgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lcmNpYWxfbGlibWFkIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX2xpYm9teGlsIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX21wZWcyZGVjIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZXJjaWFsX3FtbXAiCisKKworIworIyBEaXNrIHNwYWNlIG1vbml0b3IsIHRha2UgYWN0aW9uIHdoZW4gdGhlIGRpc2sgc3BhY2Ugb3IgdGhlIGFtb3VudCBvZgorIyBpbm9kZSBpcyBydW5uaW5nIGxvdywgaXQgaXMgZW5hYmxlZCB3aGVuIEJCX0RJU0tNT05fRElSUyBpcyBzZXQuCisjCisjIFNldCB0aGUgZGlyZWN0b3J5IGZvciB0aGUgbW9uaXRvciwgdGhlIGZvcm1hdCBpczoKKyMgImFjdGlvbixkaXJlY3RvcnksbWluaW11bV9zcGFjZSxtaW5pbXVtX2ZyZWVfaW5vZGUiCisjCisjIFRoZSAiYWN0aW9uIiBtdXN0IGJlIHNldCBhbmQgc2hvdWxkIGJlIG9uZSBvZjoKKyMgQUJPUlQ6IEltbWVkaWF0ZWx5IGFib3J0CisjIFNUT1BUQVNLUzogVGhlIG5ldyB0YXNrcyBjYW4ndCBiZSBleGVjdXRlZCBhbnkgbW9yZSwgd2lsbCBzdG9wIHRoZSBidWlsZAorIyAgICAgICAgICAgd2hlbiB0aGUgcnVubmluZyB0YXNrcyBoYXZlIGJlZW4gZG9uZS4KKyMgV0FSTjogc2hvdyB3YXJuaW5ncyAoc2VlIEJCX0RJU0tNT05fV0FSTklOVEVSVkFMIGZvciBtb3JlIGluZm9ybWF0aW9uKQorIworIyBUaGUgImRpcmVjdG9yeSIgbXVzdCBiZSBzZXQsIGFueSBkaXJlY3RvcnkgaXMgT0suCisjCisjIEVpdGhlciAibWluaW11bV9zcGFjZSIgb3IgIm1pbmltdW1fZnJlZV9pbm9kZSIgKG9yIGJvdGggb2YgdGhlbSkKKyMgc2hvdWxkIGJlIHNldCwgb3RoZXJ3aXNlIHRoZSBtb25pdG9yIHdvdWxkIG5vdCBiZSBlbmFibGVkLAorIyB0aGUgdW5pdCBjYW4gYmUgRywgTSwgSyBvciBub25lLCBidXQgZG8gTk9UIHVzZSBHQiwgTUIgb3IgS0IKKyMgKEIgaXMgbm90IG5lZWRlZCkuCisjQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMUcsMTAwSyBXQVJOLCR7U1NUQVRFX0RJUn0sMUcsMTAwSyIKKyMKKyMgU2V0IGRpc2sgc3BhY2UgYW5kIGlub2RlIGludGVydmFsIChvbmx5IHdvcmtzIHdoZW4gdGhlIGFjdGlvbiBpcyAiV0FSTiIsCisjIHRoZSB1bml0IGNhbiBiZSBHLCBNLCBvciBLLCBidXQgZG8gTk9UIHVzZSB0aGUgR0IsIE1CIG9yIEtCCisjIChCIGlzIG5vdCBuZWVkZWQpLCB0aGUgZm9ybWF0IGlzOgorIyAiZGlza19zcGFjZV9pbnRlcnZhbCxkaXNrX2lub2RlX2ludGVydmFsIiwgdGhlIGRlZmF1bHQgdmFsdWUgaXMKKyMgIjUwTSw1SyIgd2hpY2ggbWVhbnMgdGhhdCBpdCB3b3VsZCB3YXJuIHdoZW4gdGhlIGZyZWUgc3BhY2UgaXMKKyMgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBzcGFjZShvciBpbm9kZSksIGFuZCB3b3VsZCByZXBlYXQgdGhlIHdhcm5pbmcKKyMgd2hlbiB0aGUgZGlzayBzcGFjZSByZWR1Y2VzIDUwTSAob3IgdGhlIGFtb3VudCBvZiBpbm9kZSByZWR1Y2VzIDVrKS4KKyNCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTCA9ICI1ME0sNUsiCisKKyMgQXJjaGl2ZSB0aGUgc291cmNlIGFuZCBwdXQgdGhlbSB0byAke0RFUExPWV9ESVJ9L3NvdXJjZXMvLgorIworI0lOSEVSSVQgKz0gImFyY2hpdmVyIgorIworIyBUaGUgdGFyYmFsbCBmb3IgdGhlIHBhdGNoZWQgc291cmNlIHdpbGwgYmUgY3JlYXRlZCBieSBkZWZhdWx0LCBhbmQgeW91CisjIGNhbiBjb25maWd1cmUgdGhlIGFyY2hpdmVyIGFzIGZvbGxvdzoKKyMKKyMgQ3JlYXRlIGFyY2hpdmUgZm9yOgorIyAxKSBvcmlnaW5hbCAob3IgdW5wYWNrZWQpIHNvdXJjZToKKyNBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiCisjIDIpIHBhdGNoZWQgc291cmNlOiAoZGVmYXVsdCkKKyNBUkNISVZFUl9NT0RFW3NyY10gPSAicGF0Y2hlZCIKKyMgMykgY29uZmlndXJlZCBzb3VyY2U6CisjQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiCisjCisjIDQpIHRoZSBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaDoKKyNBUkNISVZFUl9NT0RFW2RpZmZdID0gIjEiCisjIHNldCB0aGUgZmlsZXMgdGhhdCB5b3UnZCBsaWtlIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgZGlmZjoKKyNBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorIworIyA1KSB0aGUgZW52aXJvbm1lbnQgZGF0YSwgc2ltaWxhciB0byAnYml0YmFrZSAtZSByZWNpcGUnOgorI0FSQ0hJVkVSX01PREVbZHVtcGRhdGFdID0gIjEiCisjCisjIDYpIHRoZSByZWNpcGUgKC5iYiBhbmQgLmluYyk6CisjQVJDSElWRVJfTU9ERVtyZWNpcGVdID0gIjEiCisjCisjIDcpIFdoZXRoZXIgb3V0cHV0IHRoZSAuc3JjLnJwbSBwYWNrYWdlOgorI0FSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIKKyMKKyMgOCkgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgcmVjaXBlIHdob3NlIGxpY2Vuc2UgaW4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgd2lsbCBiZSBleGNsdWRlZC4KKyNDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgPSAnR1BMKiBMR1BMKicKKyNDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPSAnQ0xPU0VEIFByb3ByaWV0YXJ5JworIworIyA5KSBDb25maWcgdGhlIHJlY2lwZSB0eXBlIHRoYXQgd2lsbCBiZSBhcmNoaXZlZCwgdGhlIHR5cGUgY2FuIGJlCisjICAgIHRhcmdldCwgbmF0aXZlLCBuYXRpdmVzZGssIGNyb3NzLCBjcm9zc3NkayBhbmQgY3Jvc3MtY2FuYWRpYW4sCisjICAgIHlvdSBjYW4gc2V0IG9uZSBvciBtb3JlIHR5cGVzLiBBcmNoaXZlIGFsbCB0eXBlcyBieSBkZWZhdWx0LgorI0NPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCisjCisKKyMgUmVtb3ZlIHRoZSBvbGQgaW1hZ2UgYmVmb3JlIHRoZSBuZXcgb25lIGdlbmVyYXRlZCB0byBzYXZlIGRpc2sgc3BhY2UKKyNSTV9PTERfSU1BR0UgPSAiMSIKKworIworIyBHQ0MvTEQgRkxBR1MgdG8gZW5hYmxlIG1vcmUgc2VjdXJlIGNvZGUgZ2VuZXJhdGlvbgorIyAKKyMgQnkgaW5jbHVkaW5nIHRoZSBzZWN1cml0eV9mbGFncyBpbmNsdWRlIGZpbGUgeW91IGVuYWJsZSBmbGFncworIyB0byB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciB0aGF0IGNhdXNlIHRoZW0gdG8gZ2VuZXJhdGUgbW9yZSBzZWN1cmUKKyMgY29kZSwgdGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHBva3ktbHNiIGRpc3Ryby4KKyMgVGhpcyBkb2VzIGFmZmVjdCBjb21waWxlIHNwZWVkIHNsaWdodGx5LgorIworIyBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZSB0aGUgc2VjdXJpdHkgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncyB0byB5b3VyIGJ1aWxkCisjcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYworCisjIEltYWdlIGxldmVsIHVzZXIvZ3JvdXAgY29uZmlndXJhdGlvbi4KKyMgSW5oZXJpdCBleHRyYXVzZXJzIHRvIG1ha2UgdGhlIHNldHRpbmcgb2YgRVhUUkFfVVNFUlNfUEFSQU1TIGVmZmVjdGl2ZS4KKyNJTkhFUklUICs9ICJleHRyYXVzZXJzIgorIyBVc2VyIC8gZ3JvdXAgc2V0dGluZ3MKKyMgVGhlIHNldHRpbmdzIGFyZSBzcGVyYXRlZCBieSB0aGUgOyBjaGFyYWN0ZXIuCisjIEVhY2ggc2V0dGluZyBpcyBhY3R1YWxseSBhIGNvbW1hbmQuIFRoZSBzdXBwb3J0ZWQgY29tbWFuZHMgYXJlIHVzZXJhZGQsCisjIGdyb3VwYWRkLCB1c2VyZGVsLCBncm91cGRlbCwgdXNlcm1vZCBhbmQgZ3JvdXBtb2QuCisjRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyN1c2VyYWRkIC1wICcnIHRlc3RlcjsgXAorI2dyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyN1c2VyZGVsIG5vYm9keTsgXAorI2dyb3VwZGVsIHZpZGVvOyBcCisjZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisjdXNlcm1vZCAtcyAvYmluL3NoIHRlc3RlcjsgXAorIyIKKworIyBWYXJpb3VzIHBhY2thZ2VzIGR5bmFtaWNhbGx5IGFkZCB1c2VycyBhbmQgZ3JvdXBzIHRvIHRoZSBzeXN0ZW0gYXQgcGFja2FnZQorIyBpbnN0YWxsIHRpbWUuICBGb3IgcHJvZ3JhbXMgdGhhdCBkbyBub3QgY2FyZSB3aGF0IHRoZSB1aWQvZ2lkIGlzIG9mIHRoZQorIyByZXN1bHRpbmcgdXNlcnMvZ3JvdXBzLCB0aGUgb3JkZXIgb2YgdGhlIGluc3RhbGwgd2lsbCBkZXRlcm1pbmUgdGhlIGZpbmFsCisjIHVpZC9naWQuICBUaGlzIGNhbiBsZWFkIHRvIG5vbi1kZXRlcm1pbmlzdGljIHVpZC9naWQgdmFsdWVzIGZyb20gb25lIGJ1aWxkCisjIHRvIGFub3RoZXIuICBVc2UgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyB0byBzcGVjaWZ5IHRoYXQgYWxsIHVzZXIvZ3JvdXAgYWRkcworIyBzaG91bGQgYmUgY3JlYXRlZCBiYXNlZCBvbiBhIHN0YXRpYyBwYXNzd2QvZ3JvdXAgZmlsZS4KKyMKKyMgTm90ZSwgaWYgeW91IGVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2VyYWRkLXN0YXRpY2lkcyBpbiBhIGNvbmZpZ3VyZWQgc3lzdGVtLAorIyB0aGUgVE1QRElSIG1heSBjb250YWluIGluY29ycmVjdCB1aWQvZ2lkIHZhbHVlcy4gIENsZWFyaW5nIHRoZSBUTVBESVIKKyMgd2lsbCBjb3JyZWN0IHRoaXMgY29uZGl0aW9uLgorIworIyBCeSBkZWZhdWx0IHRoZSBzeXN0ZW0gbG9va3MgaW4gdGhlIEJCUEFUSCBmb3IgZmlsZXMvcGFzc3dkIGFuZCBmaWxlcy9ncm91cAorIyB0aGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHNwZWZ5aW5nIFVTRVJBRERfVUlEL0dJRF9UQUJMRVMuCisjCisjVVNFUkFEREVYVEVOU0lPTiA9ICJ1c2VyYWRkLXN0YXRpY2lkcyIKKyNVU0VSQUREX1VJRF9UQUJMRVMgPSAiZmlsZXMvcGFzc3dkIgorI1VTRVJBRERfR0lEX1RBQkxFUyA9ICJmaWxlcy9ncm91cCIKKyMKKyMgSW4gb3JkZXIgdG8gcHJldmVudCBnZW5lcmF0aW5nIGEgc3lzdGVtIHdoZXJlIGEgZHluYW1pY2x5IGFzc2lnbmVkIHVpZC9naWQKKyMgY2FuIGV4aXN0LCB5b3Ugc2hvdWxkIGVuYWJsZSB0aGUgZm9sbG93aW5nIHNldHRpbmcuICBUaGlzIHdpbGwgZm9yY2UgdGhlCisjIHN5c3RlbSB0byBlcnJvciBvdXQgaWYgdGhlIHVzZXIvZ3JvdXAgbmFtZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUKKyMgZmlsZXMvcGFzc3dkIG9yIGZpbGVzL2dyb3VwIChvciBzcGVjaWZpZWQgcmVwbGFjZW1lbnRzLikKKyNVU0VSQUREX0VSUk9SX0RZTkFNSUMgPSAiMSIKKworIyBFbmFibGluZyBGT1JUUkFOCisjIE5vdGUgdGhpcyBpcyBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgYW5kIGlzIGp1c3QgaWxsdXN0cmF0ZWQgaGVyZSB0bworIyBzaG93IGFuIGV4YW1wbGUgb2YgaG93IGl0IGNhbiBiZSBkb25lCisjIFlvdSdsbCBhbHNvIG5lZWQgeW91ciBmb3J0cmFuIHJlY2lwZSB0byBkZXBlbmQgb24gbGliZ2ZvcnRyYW4KKyNGT1JUUkFOX2ZvcmNldmFyaWFibGUgPSAiLGZvcnRyYW4iCisjUlVOVElNRVRBUkdFVF9hcHBlbmRfcG4tZ2NjLXJ1bnRpbWUgPSAiIGxpYnF1YWRtYXRoIgorCisjCisjIEtlcm5lbCBpbWFnZSBmZWF0dXJlcworIworIyBUaGUgSU5JVFJBTUZTX0lNQUdFIGltYWdlIHZhcmlhYmxlIHdpbGwgY2F1c2UgYW4gYWRkaXRpb25hbCByZWNpcGUgdG8KKyMgYmUgYnVpbHQgYXMgYSBkZXBlbmRlbmN5IHRvIHRoZSB3aGF0IGV2ZXIgcm9vdGZzIHJlY2lwZSB5b3UgbWlnaHQgYmUKKyMgdXNpbmcgc3VjaCBhcyBjb3JlLWltYWdlLXNhdG8uICBUaGUgaW5pdHJhbWZzIG1pZ2h0IGJlIG5lZWRlZCBmb3IKKyMgdGhlIGluaXRpYWwgYm9vdCBvZiBvZiB0aGUgdGFyZ2V0IHN5c3RlbSBzdWNoIGFzIHRvIGxvYWQga2VybmVsCisjIG1vZHVsZXMgcHJpb3IgdG8gbW91bnRpbmcgdGhlIHJvb3QgZmlsZSBzeXN0ZW0uCisjCisjIElOSVRSQU1GU19JTUFHRV9CVU5ETEUgdmFyaWFibGUgY29udHJvbHMgaWYgdGhlIGltYWdlIHJlY2lwZQorIyBzcGVjaWZpZWQgYnkgdGhlIElOSVRSQU1GU19JTUFHRSB3aWxsIGJlIHJ1biB0aHJvdWdoIGFuIGV4dHJhIHBhc3MKKyMgdGhyb3VnaCB0aGUga2VybmVsIGNvbXBpbGF0aW9uIGluIG9yZGVyIHRvIGJ1aWxkIGEgc2luZ2xlIGJpbmFyeQorIyB3aGljaCBjb250YWlucyBib3RoIHRoZSBrZXJuZWwgaW1hZ2UgYW5kIHRoZSBpbml0cmFtZnMuICBUaGUKKyMgY29tYmluZWQgYmluYXJ5IHdpbGwgYmUgZGVwb3NpdGVkIGludG8gdGhlIHRtcC9kZXBsb3kgZGlyZWN0b3J5LgorIyBOT1RFOiBZb3UgY2FuIHNldCBJTklUUkFNRlNfSU1BR0UgaW4gYW4gaW1hZ2UgcmVjaXBlLCBidXQKKyMgICAgICAgSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSBjYW4gb25seSBiZSBzZXQgaW4gYSBjb25mIGZpbGUuCisjCisjSU5JVFJBTUZTX0lNQUdFID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCisjSU5JVFJBTUZTX0lNQUdFX0JVTkRMRSA9ICIxIgorCisjCisjIElQSyBIaWVyYXJjaGljYWwgZmVlZAorIworIyBJbiBzb21lIGNhc2VzIGl0IG1heSBiZSBkZXNpcmFibGUgbm90IHRvIGhhdmUgYWxsIHBhY2thZ2UgZmlsZXMgaW4gdGhlIHNhbWUKKyMgZGlyZWN0b3J5LiBBbiBleGFtcGxlIHdvdWxkIGJlIHdoZW4gcGFja2FnZSBmZWVkcyBhcmUgdG8gYmUgdXBsb2FkZWQgdG8gYQorIyBzaGFyZWQgd2ViaG9zdGluZyBzZXJ2aWNlIG9yIHRyYW5zZmVycmVkIHRvIGEgV2luZG93cyBtYWNoaW5lIHdoaWNoIG1heSBoYXZlCisjIHByb2JsZW1zIHdpdGggZGlyZWN0b3JpZXMgY29udGFpbmluZyBtdWx0aXBsZSB0aG91c2FuZHMgb2YgZmlsZXMuCisjCisjIElmIHRoZSBJUEtfSElFUkFSQ0hJQ0FMX0ZFRUQgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgcGFja2FnZXMgd2lsbCBiZSBzcGxpdAorIyBiZXR3ZWVuIHN1YmRpcmVjdG9yaWVzIGluIGEgc2ltaWxhciB3YXkgdG8gaG93IERlYmlhbiBwYWNrYWdlIGZlZWRzIGFyZQorIyBvcmdhbmlzZWQuIEluIHRoZSBoaWVyYXJjaGljYWwgZmVlZCwgcGFja2FnZSBmaWxlcyBhcmUgd3JpdHRlbiB0bworIyA8b3V0ZGlyPi88YXJjaD4vPHBrZ19wcmVmaXg+Lzxwa2dfc3ViZGlyPiwgd2hlcmUgcGtnX3ByZWZpeCBpcyB0aGUgZmlyc3QKKyMgbGV0dGVyIG9mIHRoZSBwYWNrYWdlIGZpbGUgbmFtZSBmb3Igbm9uLWxpYiBwYWNrYWdlcyBvciAibGliIiBwbHVzIHRoZSA0dGgKKyMgbGV0dGVyIG9mIHRoZSBwYWNrYWdlIGZpbGUgbmFtZSBmb3IgbGliIHBhY2thZ2VzIChlZywgJ2wnIGZvciBsZXNzLCAnbGliYycgZm9yCisjIGxpYmM2KS4gIHBrZ19zdWJkaXIgaXMgdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2UgZmlsZSBuYW1lLCBkaXNjYXJkaW5nIHRoZQorIyB2ZXJzaW9uIGFuZCBhcmNoaXRlY3R1cmUgcGFydHMgYW5kIHRoZSBjb21tb24gc3VmZml4ZXMgJy1kYmcnLCAnLWRldicsICctZG9jJywKKyMgJy1zdGF0aWNkZXYnLCAnLWxvY2FsZScgYW5kICctbG9jYWxlLSonIHdoaWNoIGFyZSBsaXN0ZWQgaW4KKyMgbWV0YS9jb25mL2JpdGJha2UuY29uZi4KKyMKKyMgSWYgSVBLX0hJRVJBUkNISUNBTF9GRUVEIGlzIHVuc2V0IG9yIHNldCB0byBhbnkgb3RoZXIgdmFsdWUsIHRoZSB0cmFkaXRpb25hbAorIyBmZWVkIGxheW91dCBpcyB1c2VkIHdoZXJlIHBhY2thZ2UgZmlsZXMgYXJlIHBsYWNlZCBpbiA8b3V0ZGlyPi88YXJjaD4vLgorIworI0lQS19ISUVSQVJDSElDQUxfRkVFRCA9ICIxIgorIworCisjIFVzaW5nIFJQTTQKKyMKKyMgQ3VycmVudGx5IHRoZSByb290ZnNfcnBtIGNvZGUgaGFzIGEgaGFyZCBkZXBlbmRzIG9uIHJwbXJlc29sdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCwKKyMgd2hlbiB1c2luZyBycG00IHRoZSBycG1yZXNvbHZlIGNvZGUgd2lsbCBub3QgY29tcGlsZSBkdWUgdG8gYSBtaXNzaW5nIGhlYWRlciBmaWxlLgorIyBUaGF0IGRlcGVuZGVuY3kgbmVlZHMgdG8gYmUgcmVtb3ZlZCB3aGVuIHVzaW5nIFJQTTQsIGFsc28gdGhlIFBSRUZSUkVEX1ZFUlNJT04gbmVlZHMKKyMgdG8gYmUgc2V0LiBUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIGVuYWJsZSBycG00CisjIFBSRUZFUlJFRF9WRVJTSU9OX3JwbSA9ICI0LjExLjIiCisjIFBSRUZFUlJFRF9WRVJTSU9OX3JwbS1uYXRpdmUgPSAiNC4xMS4yIgorIyBSUE1ST09URlNERVBFTkRTX3JlbW92ZSA9ICJycG1yZXNvbHZlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by9jb25mL3NpdGUuY29uZi5zYW1wbGUgYi9tZXRhLXlvY3RvL2NvbmYvc2l0ZS5jb25mLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUxZThmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9jb25mL3NpdGUuY29uZi5zYW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIworIyBsb2NhbC5jb25mIGNvdmVycyB1c2VyIHNldHRpbmdzLCBzaXRlLmNvbmYgY292ZXJzIHNpdGUgc3BlY2lmaWMgaW5mb3JtYXRpb24KKyMgc3VjaCBhcyBwcm94eSBzZXJ2ZXIgYWRkcmVzc2VzIGFuZCBvcHRpb25hbGx5IGFueSBzaGFyZWQgZG93bmxvYWQgbG9jYXRpb24KKyMKKyMgU0lURV9DT05GX1ZFUlNJT04gaXMgaW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mL3NpdGUuY29uZgorIyBjaGFuZ2VzIGluY29tcGF0aWJseQorU0NPTkZfVkVSU0lPTiA9ICIxIgorCisjIFVuY29tbWVudCB0byBjYXVzZSBDVlMgdG8gdXNlIHRoZSBwcm94eSBob3N0IHNwZWNpZmllZAorI0NWU19QUk9YWV9IT1NUID0gInByb3h5LmV4YW1wbGUuY29tIgorI0NWU19QUk9YWV9QT1JUID0gIjgxIgorCisjIEZvciBzdm4sIHlvdSBuZWVkIHRvIGNyZWF0ZSB+Ly5zdWJ2ZXJzaW9uL3NlcnZlcnMgY29udGFpbmluZzoKKyNbZ2xvYmFsXQorI2h0dHAtcHJveHktaG9zdCA9IHByb3h5LmV4YW1wbGUuY29tCisjaHR0cC1wcm94eS1wb3J0ID0gODEKKyMKKworIyBUbyB1c2UgZ2l0IHdpdGggYSBwcm94eSwgeW91IG11c3QgdXNlIGFuIGV4dGVybmFsIGdpdCBwcm94eSBjb21tYW5kLCBzdWNoIGFzCisjIHRoZSBvbmUgcHJvdmlkZWQgYnkgc2NyaXB0cy9vZS1naXQtcHJveHkuc2guIFRvIHVzZSB0aGlzIHNjcmlwdCwgY29weSBpdCB0bworIyB5b3VyIFBBVEggYW5kIHVuY29tbWVudCB0aGUgZm9sbG93aW5nOgorI0dJVF9QUk9YWV9DT01NQU5EID89ICJvZS1naXQtcHJveHkiCisjQUxMX1BST1hZID89ICJzb2NrczovL3NvY2tzLmV4YW1wbGUuY29tOjEwODAiCisjb3IKKyNBTExfUFJPWFkgPz0gImh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb206ODA4MCIKKyMgSWYgeW91IHdpc2ggdG8gdXNlIGNlcnRhaW4gaG9zdHMgd2l0aG91dCB0aGUgcHJveHksIHNwZWNpZnkgdGhlbSBpbiBOT19QUk9YWS4KKyMgU2VlIHRoZSBzY3JpcHQgZm9yIGRldGFpbHMgb24gc3ludGF4LgorCisjIFVuY29tbWVudCB0aGlzIHRvIHVzZSBhIHNoYXJlZCBkb3dubG9hZCBkaXJlY3RvcnkKKyNETF9ESVIgPSAiL3NvbWUvc2hhcmVkL2Rvd25sb2FkL2RpcmVjdG9yeS8iCisKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uIGIvbWV0YS15b2N0by9jb25mL3RvYXN0ZXJjb25mLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NTI3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vY29uZi90b2FzdGVyY29uZi5qc29uCkBAIC0wLDAgKzEsMTE5IEBACit7CisgICAgImNvbmZpZyI6IHsKKyAgICAgICAgIk1BQ0hJTkUiICAgICAgOiAicWVtdXg4NiIsCisgICAgICAgICJESVNUUk8iICAgICAgIDogInBva3kiLAorICAgICAgICAiSU1BR0VfRlNUWVBFUyI6ICJleHQzIGpmZnMyIHRhci5iejIiLAorICAgICAgICAiSU1BR0VfSU5TVEFMTF9hcHBlbmQiOiAiIiwKKyAgICAgICAgIlBBQ0tBR0VfQ0xBU1NFUyI6ICJwYWNrYWdlX3JwbSIsCisgICAgICAgICJTREtNQUNISU5FIiAgIDogIng4Nl82NCIKKyAgICB9LAorICAgICJsYXllcnNvdXJjZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibG9jYWwiLAorICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJIRUFEIiwgIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0sCisgICAgICAgICAgICAibGF5ZXJzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKKyAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8iLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhLXlvY3RvIiwKKyAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEteW9jdG8iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm1ldGEteW9jdG8tYnNwIiwKKyAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YS15b2N0by1ic3AiLAorICAgICAgICAgICAgICAgICAgICAidmNzX3VybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgImRpcnBhdGgiOiAibWV0YS15b2N0by1ic3AiCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIk9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJsYXllcmluZGV4IiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvYXBpLyIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSW1wb3J0ZWQgbGF5ZXJzIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImltcG9ydGVkIiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiLCAiSEVBRCJdCisKKyAgICAgICAgfQorICAgIF0sCisgICAgImJpdGJha2UiIDogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogImJpdGJha2UiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImdpdHVybCI6ICJyZW1vdGU6b3JpZ2luIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZ2l0dXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICJiaXRiYWtlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiYml0YmFrZSIKKyAgICAgICAgfQorICAgIF0sCisKKyAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKworICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJZb2N0byBQcm9qZWN0IG1hc3RlciIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3Bva3kvbG9nL1wiPllvY3RvIFByb2plY3QgbWFzdGVyIGJyYW5jaDwvYT4sIHdoZXJlIGFjdGl2ZSBkZXZlbG9wbWVudCB0YWtlcyBwbGFjZS4gVGhpcyBpcyBub3QgYSBzdGFibGUgYnJhbmNoLCBzbyB5b3VyIGJ1aWxkcyBtaWdodCBub3Qgd29yayBhcyBleHBlY3RlZC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIllvY3RvIFByb2plY3QgMS44IEZpZG8iLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9sb2cvP2g9Zmlkb1wiPllvY3RvIFByb2plY3QgMS44IFwiRmlkb1wiPC9hPiBicmFuY2guIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiWW9jdG8gUHJvamVjdCAxLjcgRGl6enkiLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZGl6enkiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiwgIm1ldGEteW9jdG8iLCAibWV0YS15b2N0by1ic3AiXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBZb2N0byBQcm9qZWN0IiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2xvZy8/aD1kaXp6eVwiPllvY3RvIFByb2plY3QgMS43IFwiRGl6enlcIjwvYT4gYnJhbmNoLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9jYWwiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIFlvY3RvIFByb2plY3QiLAorICAgICAgICAgICAgImJpdGJha2UiOiAiSEVBRCIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIsICJtZXRhLXlvY3RvIiwgIm1ldGEteW9jdG8tYnNwIl0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgWW9jdG8gUHJvamVjdCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdmVyc2lvbiBvZiB0aGUgWW9jdG8gUHJvamVjdCB5b3UgaGF2ZSBjbG9uZWQgb3IgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9wb2t5LXRpbnkvZGVmY29uZmlnIGIvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3Bva3ktdGlueS9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZDVjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9wb2t5LXRpbnkvZGVmY29uZmlnCkBAIC0wLDAgKzEsMTAwOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBCdXN5Ym94IHZlcnNpb246IDEuMTkuMworIyBXZWQgTm92IDMwIDA5OjMzOjE2IDIwMTEKKyMKK0NPTkZJR19IQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEJ1c3lib3ggU2V0dGluZ3MKKyMKKworIworIyBHZW5lcmFsIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFU0tUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRVhUUkFfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQ0xVREVfU1VTdjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX1BPUlRBQkxFX0NPREUgaXMgbm90IHNldAorQ09ORklHX1BMQVRGT1JNX0xJTlVYPXkKK0NPTkZJR19GRUFUVVJFX0JVRkZFUlNfVVNFX01BTExPQz15CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fT05fU1RBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX0lOX0JTUyBpcyBub3Qgc2V0CitDT05GSUdfU0hPV19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9OT19VU1IgaXMgbm90IHNldAorQ09ORklHX0xPQ0FMRV9TVVBQT1JUPXkKKyMgQ09ORklHX1VOSUNPREVfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX1VTSU5HX0xPQ0FMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX1VOSUNPREVfSU5fRU5WIGlzIG5vdCBzZXQKK0NPTkZJR19TVUJTVF9XQ0hBUj0wCitDT05GSUdfTEFTVF9TVVBQT1JURURfV0NIQVI9MAorIyBDT05GSUdfVU5JQ09ERV9DT01CSU5JTkdfV0NIQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfV0lERV9XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9CSURJX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9ORVVUUkFMX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfUFJFU0VSVkVfQlJPS0VOIGlzIG5vdCBzZXQKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfREVWUFRTPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ0xFQU5fVVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVRNUD15CisjIENPTkZJR19GRUFUVVJFX1dUTVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUElERklMRT15CitDT05GSUdfRkVBVFVSRV9TVUlEPXkKK0NPTkZJR19GRUFUVVJFX1NVSURfQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX1NVSURfQ09ORklHX1FVSUVUPXkKKyMgQ09ORklHX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QUkVGRVJfQVBQTEVUUyBpcyBub3Qgc2V0CitDT05GSUdfQlVTWUJPWF9FWEVDX1BBVEg9Ii9wcm9jL3NlbGYvZXhlIgorQ09ORklHX0ZFQVRVUkVfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0hBVkVfUlBDPXkKKworIworIyBCdWlsZCBPcHRpb25zCisjCisjIENPTkZJR19TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfUElFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0xJQkJVU1lCT1ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hBUkVEX0JVU1lCT1ggaXMgbm90IHNldAorQ09ORklHX0xGUz15CitDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYPSIiCitDT05GSUdfRVhUUkFfQ0ZMQUdTPSIiCisKKyMKKyMgRGVidWdnaW5nIE9wdGlvbnMKKyMKKyMgQ09ORklHX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFU1NJTUlaRSBpcyBub3Qgc2V0CisjIENPTkZJR19XRVJST1IgaXMgbm90IHNldAorQ09ORklHX05PX0RFQlVHX0xJQj15CisjIENPTkZJR19ETUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGRU5DRSBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdGFsbGF0aW9uIE9wdGlvbnMgKCJtYWtlIGluc3RhbGwiIGJlaGF2aW9yKQorIworQ09ORklHX0lOU1RBTExfQVBQTEVUX1NZTUxJTktTPXkKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9TQ1JJUFRfV1JBUFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfRE9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TWU1MSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX0hBUkRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NDUklQVF9XUkFQUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVGSVg9Ii4vX2luc3RhbGwiCisKKyMKKyMgQnVzeWJveCBMaWJyYXJ5IFR1bmluZworIworQ09ORklHX0ZFQVRVUkVfU1lTVEVNRD15CitDT05GSUdfRkVBVFVSRV9SVE1JTk1BWD15CitDT05GSUdfUEFTU1dPUkRfTUlOTEVOPTYKK0NPTkZJR19NRDVfU0laRV9WU19TUEVFRD0yCitDT05GSUdfRkVBVFVSRV9GQVNUX1RPUD15CisjIENPTkZJR19GRUFUVVJFX0VUQ19ORVRXT1JLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9VU0VfVEVSTUlPUz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HPXkKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfTUFYX0xFTj0xMDI0CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfVkkgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRURJVElOR19ISVNUT1JZPTE1CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX1NBVkVISVNUT1JZPXkKKyMgQ09ORklHX0ZFQVRVUkVfUkVWRVJTRV9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFCX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfVVNFUk5BTUVfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0ZBTkNZX1BST01QVD15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX05PTl9QT1NJWF9DUD15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfQ1BfTUVTU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT1BZQlVGX0tCPTQKK0NPTkZJR19GRUFUVVJFX1NLSVBfUk9PVEZTPXkKK0NPTkZJR19NT05PVE9OSUNfU1lTQ0FMTD15CitDT05GSUdfSU9DVExfSEVYMlNUUl9FUlJPUj15CitDT05GSUdfRkVBVFVSRV9IV0lCPXkKKworIworIyBBcHBsZXRzCisjCisKKyMKKyMgQXJjaGl2YWwgVXRpbGl0aWVzCisjCisjIENPTkZJR19GRUFUVVJFX1NFQU1MRVNTX1haIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0xaTUE9eQorQ09ORklHX0ZFQVRVUkVfU0VBTUxFU1NfQloyPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0daPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX1o9eQorQ09ORklHX0FSPXkKKyMgQ09ORklHX0ZFQVRVUkVfQVJfTE9OR19GSUxFTkFNRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BUl9DUkVBVEUgaXMgbm90IHNldAorQ09ORklHX0JVTlpJUDI9eQorIyBDT05GSUdfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0NQSU89eQorIyBDT05GSUdfRkVBVFVSRV9DUElPX08gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUElPX1AgaXMgbm90IHNldAorIyBDT05GSUdfRFBLRyBpcyBub3Qgc2V0CisjIENPTkZJR19EUEtHX0RFQiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RQS0dfREVCX0VYVFJBQ1RfT05MWSBpcyBub3Qgc2V0CitDT05GSUdfR1VOWklQPXkKK0NPTkZJR19HWklQPXkKKyMgQ09ORklHX0ZFQVRVUkVfR1pJUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTFpPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MWk9QX0NPTVBSX0hJR0ggaXMgbm90IHNldAorIyBDT05GSUdfUlBNMkNQSU8gaXMgbm90IHNldAorIyBDT05GSUdfUlBNIGlzIG5vdCBzZXQKK0NPTkZJR19UQVI9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0NSRUFURT15CitDT05GSUdfRkVBVFVSRV9UQVJfQVVUT0RFVEVDVD15CitDT05GSUdfRkVBVFVSRV9UQVJfRlJPTT15CitDT05GSUdfRkVBVFVSRV9UQVJfT0xER05VX0NPTVBBVElCSUxJVFk9eQorIyBDT05GSUdfRkVBVFVSRV9UQVJfT0xEU1VOX0NPTVBBVElCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFSX0dOVV9FWFRFTlNJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9UT19DT01NQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1VOQU1FX0dOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX05PUFJFU0VSVkVfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVU5MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTFpNQV9GQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfVU5YWiBpcyBub3Qgc2V0CisjIENPTkZJR19YWiBpcyBub3Qgc2V0CitDT05GSUdfVU5aSVA9eQorCisjCisjIENvcmV1dGlscworIworQ09ORklHX0JBU0VOQU1FPXkKK0NPTkZJR19DQVQ9eQorQ09ORklHX0RBVEU9eQorIyBDT05GSUdfRkVBVFVSRV9EQVRFX0lTT0ZNVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RBVEVfTkFOTyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9EQVRFX0NPTVBBVD15CitDT05GSUdfSUQ9eQorQ09ORklHX0dST1VQUz15CitDT05GSUdfVEVTVD15CitDT05GSUdfRkVBVFVSRV9URVNUXzY0PXkKK0NPTkZJR19UT1VDSD15CitDT05GSUdfVFI9eQorQ09ORklHX0ZFQVRVUkVfVFJfQ0xBU1NFUz15CisjIENPTkZJR19GRUFUVVJFX1RSX0VRVUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CitDT05GSUdfV0hPPXkKK0NPTkZJR19VU0VSUz15CisjIENPTkZJR19DQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FUViBpcyBub3Qgc2V0CitDT05GSUdfQ0hHUlA9eQorQ09ORklHX0NITU9EPXkKK0NPTkZJR19DSE9XTj15CisjIENPTkZJR19GRUFUVVJFX0NIT1dOX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ0hST09UPXkKKyMgQ09ORklHX0NLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU0gaXMgbm90IHNldAorQ09ORklHX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DVVQ9eQorQ09ORklHX0REPXkKK0NPTkZJR19GRUFUVVJFX0REX1NJR05BTF9IQU5ETElORz15CisjIENPTkZJR19GRUFUVVJFX0REX1RISVJEX1NUQVRVU19MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRERfSUJTX09CUyBpcyBub3Qgc2V0CitDT05GSUdfREY9eQorIyBDT05GSUdfRkVBVFVSRV9ERl9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfRElSTkFNRT15CisjIENPTkZJR19ET1MyVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYMkRPUyBpcyBub3Qgc2V0CitDT05GSUdfRFU9eQorQ09ORklHX0ZFQVRVUkVfRFVfREVGQVVMVF9CTE9DS1NJWkVfMUs9eQorQ09ORklHX0VDSE89eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfRUNITz15CitDT05GSUdfRU5WPXkKK0NPTkZJR19GRUFUVVJFX0VOVl9MT05HX09QVElPTlM9eQorIyBDT05GSUdfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQUj15CitDT05GSUdfRVhQUl9NQVRIX1NVUFBPUlRfNjQ9eQorQ09ORklHX0ZBTFNFPXkKKyMgQ09ORklHX0ZPTEQgaXMgbm90IHNldAorIyBDT05GSUdfRlNZTkMgaXMgbm90IHNldAorQ09ORklHX0hFQUQ9eQorIyBDT05GSUdfRkVBVFVSRV9GQU5DWV9IRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RJRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TVEFMTF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0xOPXkKK0NPTkZJR19MT0dOQU1FPXkKK0NPTkZJR19MUz15CitDT05GSUdfRkVBVFVSRV9MU19GSUxFVFlQRVM9eQorQ09ORklHX0ZFQVRVUkVfTFNfRk9MTE9XTElOS1M9eQorQ09ORklHX0ZFQVRVUkVfTFNfUkVDVVJTSVZFPXkKK0NPTkZJR19GRUFUVVJFX0xTX1NPUlRGSUxFUz15CitDT05GSUdfRkVBVFVSRV9MU19USU1FU1RBTVBTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1VTRVJOQU1FPXkKK0NPTkZJR19GRUFUVVJFX0xTX0NPTE9SPXkKKyMgQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1JfSVNfREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfTUQ1U1VNPXkKK0NPTkZJR19NS0RJUj15CitDT05GSUdfRkVBVFVSRV9NS0RJUl9MT05HX09QVElPTlM9eQorQ09ORklHX01LRklGTz15CitDT05GSUdfTUtOT0Q9eQorQ09ORklHX01WPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVZfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JQ0UgaXMgbm90IHNldAorQ09ORklHX05PSFVQPXkKK0NPTkZJR19PRD15CisjIENPTkZJR19QUklOVEVOViBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRGPXkKK0NPTkZJR19QV0Q9eQorQ09ORklHX1JFQURMSU5LPXkKK0NPTkZJR19GRUFUVVJFX1JFQURMSU5LX0ZPTExPVz15CitDT05GSUdfUkVBTFBBVEg9eQorQ09ORklHX1JNPXkKK0NPTkZJR19STURJUj15CisjIENPTkZJR19GRUFUVVJFX1JNRElSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfU0VRPXkKKyMgQ09ORklHX1NIQTFTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBMjU2U1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTUxMlNVTSBpcyBub3Qgc2V0CitDT05GSUdfU0xFRVA9eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfU0xFRVA9eQorIyBDT05GSUdfRkVBVFVSRV9GTE9BVF9TTEVFUCBpcyBub3Qgc2V0CitDT05GSUdfU09SVD15CitDT05GSUdfRkVBVFVSRV9TT1JUX0JJRz15CisjIENPTkZJR19TUExJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NQTElUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVEFUX0ZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfU1RUWT15CisjIENPTkZJR19TVU0gaXMgbm90IHNldAorQ09ORklHX1NZTkM9eQorIyBDT05GSUdfVEFDIGlzIG5vdCBzZXQKK0NPTkZJR19UQUlMPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1RBSUw9eQorQ09ORklHX1RFRT15CisjIENPTkZJR19GRUFUVVJFX1RFRV9VU0VfQkxPQ0tfSU8gaXMgbm90IHNldAorQ09ORklHX1RSVUU9eQorQ09ORklHX1RUWT15CitDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VTkVYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1VOSVE9eQorQ09ORklHX1VTTEVFUD15CisjIENPTkZJR19VVURFQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19VVUVOQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfV0M9eQorIyBDT05GSUdfRkVBVFVSRV9XQ19MQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfV0hPQU1JPXkKK0NPTkZJR19ZRVM9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBjcCBhbmQgbXYKKyMKKyMgQ09ORklHX0ZFQVRVUkVfUFJFU0VSVkVfSEFSRExJTktTIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbHMsIG1vcmUgYW5kIHRlbG5ldAorIworQ09ORklHX0ZFQVRVUkVfQVVUT1dJRFRIPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgZGYsIGR1LCBscworIworQ09ORklHX0ZFQVRVUkVfSFVNQU5fUkVBREFCTEU9eQorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBtZDVzdW0sIHNoYTFzdW0sIHNoYTI1NnN1bSwgc2hhNTEyc3VtCisjCitDT05GSUdfRkVBVFVSRV9NRDVfU0hBMV9TVU1fQ0hFQ0s9eQorCisjCisjIENvbnNvbGUgVXRpbGl0aWVzCisjCitDT05GSUdfQ0hWVD15CisjIENPTkZJR19GR0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0NMRUFSPXkKK0NPTkZJR19ERUFMTE9DVlQ9eQorQ09ORklHX0RVTVBLTUFQPXkKKyMgQ09ORklHX0tCRF9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0FERk9OVD15CitDT05GSUdfTE9BREtNQVA9eQorQ09ORklHX09QRU5WVD15CitDT05GSUdfUkVTRVQ9eQorIyBDT05GSUdfUkVTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVTSVpFX1BSSU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TRVRDT05TT0xFPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0VUQ09OU09MRV9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VURk9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZPTlRfVEVYVFVBTF9NQVAgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VURk9OVF9ESVI9IiIKKyMgQ09ORklHX1NFVEtFWUNPREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVExPR0NPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0hPV0tFWSBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxvYWRmb250IGFuZCBzZXRmb250CisjCisjIENPTkZJR19GRUFUVVJFX0xPQURGT05UX1BTRjIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9SQVcgaXMgbm90IHNldAorCisjCisjIERlYmlhbiBVdGlsaXRpZXMKKyMKK0NPTkZJR19NS1RFTVA9eQorIyBDT05GSUdfUElQRV9QUk9HUkVTUyBpcyBub3Qgc2V0CitDT05GSUdfUlVOX1BBUlRTPXkKK0NPTkZJR19GRUFUVVJFX1JVTl9QQVJUU19MT05HX09QVElPTlM9eQorIyBDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfRkFOQ1kgaXMgbm90IHNldAorQ09ORklHX1NUQVJUX1NUT1BfREFFTU9OPXkKK0NPTkZJR19GRUFUVVJFX1NUQVJUX1NUT1BfREFFTU9OX0ZBTkNZPXkKK0NPTkZJR19GRUFUVVJFX1NUQVJUX1NUT1BfREFFTU9OX0xPTkdfT1BUSU9OUz15CitDT05GSUdfV0hJQ0g9eQorCisjCisjIEVkaXRvcnMKKyMKK0NPTkZJR19QQVRDSD15CitDT05GSUdfVkk9eQorQ09ORklHX0ZFQVRVUkVfVklfTUFYX0xFTj0xMDI0CitDT05GSUdfRkVBVFVSRV9WSV84QklUPXkKK0NPTkZJR19GRUFUVVJFX1ZJX0NPTE9OPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1lBTktNQVJLPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1NFQVJDSD15CisjIENPTkZJR19GRUFUVVJFX1ZJX1JFR0VYX1NFQVJDSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9VU0VfU0lHTkFMUz15CisjIENPTkZJR19GRUFUVVJFX1ZJX0RPVF9DTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUFET05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZJX1NFVE9QVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfV0lOX1JFU0laRT15CisjIENPTkZJR19GRUFUVVJFX1ZJX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9WSV9PUFRJTUlaRV9DVVJTT1I9eQorQ09ORklHX0FXSz15CisjIENPTkZJR19GRUFUVVJFX0FXS19MSUJNIGlzIG5vdCBzZXQKK0NPTkZJR19DTVA9eQorQ09ORklHX0RJRkY9eQorIyBDT05GSUdfRkVBVFVSRV9ESUZGX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ESUZGX0RJUj15CisjIENPTkZJR19FRCBpcyBub3Qgc2V0CitDT05GSUdfU0VEPXkKK0NPTkZJR19GRUFUVVJFX0FMTE9XX0VYRUM9eQorCisjCisjIEZpbmRpbmcgVXRpbGl0aWVzCisjCitDT05GSUdfRklORD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSSU5UMD15CitDT05GSUdfRkVBVFVSRV9GSU5EX01USU1FPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTU1JTj15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BFUk09eQorQ09ORklHX0ZFQVRVUkVfRklORF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfWERFVj15CitDT05GSUdfRkVBVFVSRV9GSU5EX01BWERFUFRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTkVXRVI9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0lOVU0gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfVVNFUj15CitDT05GSUdfRkVBVFVSRV9GSU5EX0dST1VQPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTk9UPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QQVJFTj15CitDT05GSUdfRkVBVFVSRV9GSU5EX1NJWkU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9QUlVORT15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfREVMRVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEFUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1JFR0VYPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9DT05URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9MSU5LUyBpcyBub3Qgc2V0CitDT05GSUdfR1JFUD15CitDT05GSUdfRkVBVFVSRV9HUkVQX0VHUkVQX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRkdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9DT05URVhUPXkKK0NPTkZJR19YQVJHUz15CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfQ09ORklSTUFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9RVU9URVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1RFUk1PUFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1pFUk9fVEVSTSBpcyBub3Qgc2V0CisKKyMKKyMgSW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0JPT1RDSEFSVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CT09UQ0hBUlREX0JMT0FURURfSEVBREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9DT05GSUdfRklMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFMVD15CisjIENPTkZJR19GRUFUVVJFX0NBTExfVEVMSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfVEVMSU5JVF9QQVRIPSIiCisjIENPTkZJR19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVVNFX0lOSVRUQUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9LSUxMX1JFTU9WRUQgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfS0lMTF9ERUxBWT0wCisjIENPTkZJR19GRUFUVVJFX0lOSVRfU0NUVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VYVFJBX1FVSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9DT1JFRFVNUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0lOSVRfVEVSTUlOQUxfVFlQRT0iIgorIyBDT05GSUdfTUVTRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01FU0dfRU5BQkxFX09OTFlfR1JPVVAgaXMgbm90IHNldAorCisjCisjIExvZ2luL1Bhc3N3b3JkIE1hbmFnZW1lbnQgVXRpbGl0aWVzCisjCisjIENPTkZJR19BRERfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUkVNT1ZFX1NIRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfQkJfUFdEX0dSUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfQkJfU0hBRE9XIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VfQkJfQ1JZUFQ9eQorIyBDT05GSUdfVVNFX0JCX0NSWVBUX1NIQSBpcyBub3Qgc2V0CisjIENPTkZJR19BRERVU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQUREVVNFUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEVDS19OQU1FUyBpcyBub3Qgc2V0CitDT05GSUdfRklSU1RfU1lTVEVNX0lEPTAKK0NPTkZJR19MQVNUX1NZU1RFTV9JRD0wCisjIENPTkZJR19BRERHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FEREdST1VQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FERFVTRVJfVE9fR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVMVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFTF9VU0VSX0ZST01fR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfR0VUVFkgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfUEFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NDUklQVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OT0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0VDVVJFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBU1NXRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BBU1NXRF9XRUFLX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUUFcgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQQVNTV0QgaXMgbm90IHNldAorIyBDT05GSUdfU1UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVV9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVV9DSEVDS1NfU0hFTExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfVkxPQ0sgaXMgbm90IHNldAorCisjCisjIExpbnV4IEV4dDIgRlMgUHJvZ3MKKyMKK0NPTkZJR19DSEFUVFI9eQorQ09ORklHX0ZTQ0s9eQorIyBDT05GSUdfTFNBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkUyRlMgaXMgbm90IHNldAorCisjCisjIExpbnV4IE1vZHVsZSBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX01PRElORk8gaXMgbm90IHNldAorIyBDT05GSUdfTU9EUFJPQkVfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9TTUFMTF9PUFRJT05TX09OX0NNRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9TTUFMTF9DSEVDS19BTFJFQURZX0xPQURFRCBpcyBub3Qgc2V0CitDT05GSUdfSU5TTU9EPXkKK0NPTkZJR19STU1PRD15CitDT05GSUdfTFNNT0Q9eQorIyBDT05GSUdfRkVBVFVSRV9MU01PRF9QUkVUVFlfMl82X09VVFBVVCBpcyBub3Qgc2V0CitDT05GSUdfTU9EUFJPQkU9eQorIyBDT05GSUdfRkVBVFVSRV9NT0RQUk9CRV9CTEFDS0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVQTU9EIGlzIG5vdCBzZXQKKworIworIyBPcHRpb25zIGNvbW1vbiB0byBtdWx0aXBsZSBtb2R1dGlscworIworIyBDT05GSUdfRkVBVFVSRV8yXzRfTU9EVUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9UUllfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9WRVJTSU9OX0NIRUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0tTWU1PT1BTX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRElOS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUF9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NIRUNLX1RBSU5URURfTU9EVUxFPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX1NZTUJPTFM9eQorQ09ORklHX0RFRkFVTFRfTU9EVUxFU19ESVI9Ii9saWIvbW9kdWxlcyIKK0NPTkZJR19ERUZBVUxUX0RFUE1PRF9GSUxFPSJtb2R1bGVzLmRlcCIKKworIworIyBMaW51eCBTeXN0ZW0gVXRpbGl0aWVzCisjCisjIENPTkZJR19CTE9DS0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19SRVYgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BQ1BJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLSUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFIGlzIG5vdCBzZXQKK0NPTkZJR19ETUVTRz15CitDT05GSUdfRkVBVFVSRV9ETUVTR19QUkVUVFk9eQorQ09ORklHX0ZCU0VUPXkKK0NPTkZJR19GRUFUVVJFX0ZCU0VUX0ZBTkNZPXkKK0NPTkZJR19GRUFUVVJFX0ZCU0VUX1JFQURNT0RFPXkKKyMgQ09ORklHX0ZERkxVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkRGT1JNQVQgaXMgbm90IHNldAorQ09ORklHX0ZESVNLPXkKKyMgQ09ORklHX0ZESVNLX1NVUFBPUlRfTEFSR0VfRElTS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRkRJU0tfV1JJVEFCTEU9eQorIyBDT05GSUdfRkVBVFVSRV9BSVhfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TR0lfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TVU5fTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9PU0ZfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9HUFRfTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GRElTS19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19GSU5ERlMgaXMgbm90IHNldAorQ09ORklHX0ZMT0NLPXkKKyMgQ09ORklHX0ZSRUVSQU1ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19GU0NLX01JTklYPXkKKyMgQ09ORklHX01LRlNfRVhUMiBpcyBub3Qgc2V0CitDT05GSUdfTUtGU19NSU5JWD15CitDT05GSUdfRkVBVFVSRV9NSU5JWDI9eQorIyBDT05GSUdfTUtGU19SRUlTRVIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19WRkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVE9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dFVE9QVF9MT05HIGlzIG5vdCBzZXQKK0NPTkZJR19IRVhEVU1QPXkKKyMgQ09ORklHX0ZFQVRVUkVfSEVYRFVNUF9SRVZFUlNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19IV0NMT0NLPXkKK0NPTkZJR19GRUFUVVJFX0hXQ0xPQ0tfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX0hXQ0xPQ0tfQURKVElNRV9GSFM9eQorIyBDT05GSUdfSVBDUk0gaXMgbm90IHNldAorIyBDT05GSUdfSVBDUyBpcyBub3Qgc2V0CitDT05GSUdfTE9TRVRVUD15CisjIENPTkZJR19MU1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19MU1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX1JFTkFNRV9SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NREVWX0xPQURfRklSTVdBUkUgaXMgbm90IHNldAorQ09ORklHX01LU1dBUD15CisjIENPTkZJR19GRUFUVVJFX01LU1dBUF9VVUlEIGlzIG5vdCBzZXQKK0NPTkZJR19NT1JFPXkKK0NPTkZJR19NT1VOVD15CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX05GUz15CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0NJRlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTU9VTlRfRkxBR1M9eQorQ09ORklHX0ZFQVRVUkVfTU9VTlRfRlNUQUI9eQorQ09ORklHX1BJVk9UX1JPT1Q9eQorQ09ORklHX1JEQVRFPXkKKyMgQ09ORklHX1JERVYgaXMgbm90IHNldAorIyBDT05GSUdfUkVBRFBST0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDV0FLRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1JJUFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUUkVQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEFSQ0ggaXMgbm90IHNldAorQ09ORklHX1NXQVBPTk9GRj15CisjIENPTkZJR19GRUFUVVJFX1NXQVBPTl9QUkkgaXMgbm90IHNldAorQ09ORklHX1NXSVRDSF9ST09UPXkKK0NPTkZJR19VTU9VTlQ9eQorQ09ORklHX0ZFQVRVUkVfVU1PVU5UX0FMTD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIG1vdW50L3Vtb3VudAorIworQ09ORklHX0ZFQVRVUkVfTU9VTlRfTE9PUD15CitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QX0NSRUFURT15CisjIENPTkZJR19GRUFUVVJFX01UQUJfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xVTUVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0JUUkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUkVJU0VSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9IRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9KRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9YRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9OVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSVNPOTY2MCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1VERiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xVS1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9MSU5VWFNXQVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9ST01GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NZU1YgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9PQ0ZTMiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0xJTlVYUkFJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0NPTlNQWSBpcyBub3Qgc2V0CitDT05GSUdfTEVTUz15CitDT05GSUdfRkVBVFVSRV9MRVNTX01BWExJTkVTPTk5OTk5OTkKK0NPTkZJR19GRUFUVVJFX0xFU1NfQlJBQ0tFVFM9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19GTEFHUz15CisjIENPTkZJR19GRUFUVVJFX0xFU1NfTUFSS1MgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1JFR0VYUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfV0lOQ0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0FTS19URVJNSU5BTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfREFTSENNRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xFU1NfTElORU5VTVMgaXMgbm90IHNldAorIyBDT05GSUdfTkFORFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkREVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VQklBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJREVUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSU1LVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJNVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJTVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVVQREFURVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19BREpUSU1FWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQkNPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NPTVBSRVNTX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRVAgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkVFUF9GUkVRPTAKK0NPTkZJR19GRUFUVVJFX0JFRVBfTEVOR1RIX01TPTAKKyMgQ09ORklHX0NIQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX05PRkFJTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfVFRZX0hJRkkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX0lNUExJQ0lUX0NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9TV0FMTE9XX09QVFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NFTkRfRVNDQVBFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfVkFSX0FCT1JUX0xFTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfQ0xSX0FCT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JPTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1JPTkRfQ0FMTF9TRU5ETUFJTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DUk9ORF9ESVI9IiIKKyMgQ09ORklHX0NST05UQUIgaXMgbm90IHNldAorQ09ORklHX0RDPXkKKyMgQ09ORklHX0ZFQVRVUkVfRENfTElCTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0QgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX01PRExPQUQgaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEX0ZHX05QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfREVWRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRUpFQ1RfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19GQlNQTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX0VSQVNFQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZRCBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEFTVF9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSERQQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0dFVF9JREVOVElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1NDQU5fSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1VOUkVHSVNURVJfSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX0RSSVZFX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSERQQVJNX0hESU9fVFJJU1RBVEVfSFdJRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX0dFVFNFVF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFLRURFVlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NQUtFREVWU19MRUFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFOIGlzIG5vdCBzZXQKK0NPTkZJR19NSUNST0NPTT15CisjIENPTkZJR19NT1VOVFBPSU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSURBVVRPUlVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURBSEVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfUlVOTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfUlggaXMgbm90IHNldAorQ09ORklHX1NFVFNJRD15CitDT05GSUdfU1RSSU5HUz15CisjIENPTkZJR19UQVNLU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFTS1NFVF9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfVElNRT15CisjIENPTkZJR19USU1FT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RUWVNJWkUgaXMgbm90IHNldAorIyBDT05GSUdfVk9MTkFNRSBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIFV0aWxpdGllcworIworIyBDT05GSUdfTkFNRUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkFNRUlGX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05CRENMSUVOVCBpcyBub3Qgc2V0CitDT05GSUdfTkM9eQorIyBDT05GSUdfTkNfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DXzExMF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX1BJTkc9eQorQ09ORklHX1BJTkc2PXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1BJTkc9eQorIyBDT05GSUdfV0hPSVMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSVBWNj15CisjIENPTkZJR19GRUFUVVJFX1VOSVhfTE9DQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0lQVjRfQUREUkVTUz15CisjIENPTkZJR19WRVJCT1NFX1JFU09MVVRJT05fRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJDVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX1NIT1cgaXMgbm90IHNldAorIyBDT05GSUdfRE5TRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUl9XQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBS0VJREVOVEQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUERfQUNDRVBUX0JST0tFTl9MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBQVVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBHRVRQVVRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUTkFNRT15CisjIENPTkZJR19IVFRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1VTRV9TRU5ERklMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVFVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0JBU0lDX0FVVEggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9BVVRIX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NHSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NPTkZJR19XSVRIX1NDUklQVF9JTlRFUlBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUX1JFTU9URV9QT1JUX1RPX0VOViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VOQ09ERV9VUkxfU1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRVJST1JfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9QUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0daSVAgaXMgbm90IHNldAorQ09ORklHX0lGQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NUQVRVUz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19NRU1TVEFSVF9JT0FERFJfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX0hXPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfQlJPQURDQVNUX1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSUZFTlNMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGUExVR0QgaXMgbm90IHNldAorQ09ORklHX0lGVVBET1dOPXkKK0NPTkZJR19JRlVQRE9XTl9JRlNUQVRFX1BBVEg9Ii92YXIvcnVuL2lmc3RhdGUiCisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTiBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JRkNPTkZJR19CVUlMVElOPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQ9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9NQVBQSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fRVhURVJOQUxfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVURCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0RJU0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9EQVlUSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX0NIQVJHRU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9SUEMgaXMgbm90IHNldAorQ09ORklHX0lQPXkKK0NPTkZJR19GRUFUVVJFX0lQX0FERFJFU1M9eQorQ09ORklHX0ZFQVRVUkVfSVBfTElOSz15CitDT05GSUdfRkVBVFVSRV9JUF9ST1VURT15CitDT05GSUdfRkVBVFVSRV9JUF9UVU5ORUw9eQorIyBDT05GSUdfRkVBVFVSRV9JUF9SVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfU0hPUlRfRk9STVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUF9SQVJFX1BST1RPQ09MUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUEFERFIgaXMgbm90IHNldAorIyBDT05GSUdfSVBMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBUVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBSVUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ0FMQyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ0FMQ19GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQQ0FMQ19MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX05FVFNUQVQ9eQorIyBDT05GSUdfRkVBVFVSRV9ORVRTVEFUX1dJREUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ORVRTVEFUX1BSRyBpcyBub3Qgc2V0CitDT05GSUdfTlNMT09LVVA9eQorIyBDT05GSUdfTlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19ST1VURT15CisjIENPTkZJR19TTEFUVEFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BTVkQgaXMgbm90IHNldAorQ09ORklHX1RFTE5FVD15CisjIENPTkZJR19GRUFUVVJFX1RFTE5FVF9UVFlQRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9URUxORVRfQVVUT0xPR0lOPXkKKyMgQ09ORklHX1RFTE5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URUxORVREX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9URUxORVREX0lORVREX1dBSVQgaXMgbm90IHNldAorQ09ORklHX1RGVFA9eQorIyBDT05GSUdfVEZUUEQgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciB0ZnRwL3RmdHBkCisjCitDT05GSUdfRkVBVFVSRV9URlRQX0dFVD15CitDT05GSUdfRkVBVFVSRV9URlRQX1BVVD15CisjIENPTkZJR19GRUFUVVJFX1RGVFBfQkxPQ0tTSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEZUUF9QUk9HUkVTU19CQVIgaXMgbm90IHNldAorIyBDT05GSUdfVEZUUF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VST1VURT15CisjIENPTkZJR19UUkFDRVJPVVRFNiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfU09VUkNFX1JPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFJBQ0VST1VURV9VU0VfSUNNUCBpcyBub3Qgc2V0CisjIENPTkZJR19UVU5DVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UVU5DVExfVUcgaXMgbm90IHNldAorQ09ORklHX1VESENQRD15CisjIENPTkZJR19ESENQUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0RVTVBMRUFTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfV1JJVEVfTEVBU0VTX0VBUkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX0JBU0VfSVBfT05fTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19ESENQRF9MRUFTRVNfRklMRT0iL3Zhci9saWIvbWlzYy91ZGhjcGQubGVhc2VzIgorQ09ORklHX1VESENQQz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfQVJQSU5HPXkKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVURIQ1BfREVCVUc9MAorIyBDT05GSUdfRkVBVFVSRV9VREhDUF9SRkMzMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfODAyMVEgaXMgbm90IHNldAorQ09ORklHX1VESENQQ19ERUZBVUxUX1NDUklQVD0iL3Vzci9zaGFyZS91ZGhjcGMvZGVmYXVsdC5zY3JpcHQiCitDT05GSUdfVURIQ1BDX1NMQUNLX0ZPUl9CVUdHWV9TRVJWRVJTPTgwCitDT05GSUdfSUZVUERPV05fVURIQ1BDX0NNRF9PUFRJT05TPSItUiAtbiIKKyMgQ09ORklHX1VEUFNWRCBpcyBub3Qgc2V0CisjIENPTkZJR19WQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19XR0VUPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfU1RBVFVTQkFSPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfQVVUSEVOVElDQVRJT049eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfV0dFVF9USU1FT1VUPXkKKyMgQ09ORklHX1pDSVAgaXMgbm90IHNldAorCisjCisjIFByaW50IFV0aWxpdGllcworIworIyBDT05GSUdfTFBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQUiBpcyBub3Qgc2V0CisjIENPTkZJR19MUFEgaXMgbm90IHNldAorCisjCisjIE1haWwgVXRpbGl0aWVzCisjCisjIENPTkZJR19NQUtFTUlNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NSU1FX0NIQVJTRVQ9IiIKKyMgQ09ORklHX1BPUE1BSUxESVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9QT1BNQUlMRElSX0RFTElWRVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRk9STUlNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFRk9STUlNRV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VORE1BSUwgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3MgVXRpbGl0aWVzCisjCisjIENPTkZJR19JT1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVBTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NRVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19QV0RYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNRU1DQVAgaXMgbm90IHNldAorQ09ORklHX1VQVElNRT15CisjIENPTkZJR19GRUFUVVJFX1VQVElNRV9VVE1QX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZSRUU9eQorQ09ORklHX0ZVU0VSPXkKK0NPTkZJR19LSUxMPXkKK0NPTkZJR19LSUxMQUxMPXkKKyMgQ09ORklHX0tJTExBTEw1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BHUkVQIGlzIG5vdCBzZXQKK0NPTkZJR19QSURPRj15CisjIENPTkZJR19GRUFUVVJFX1BJRE9GX1NJTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BJRE9GX09NSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEtJTEwgaXMgbm90IHNldAorQ09ORklHX1BTPXkKK0NPTkZJR19GRUFUVVJFX1BTX1dJREU9eQorIyBDT05GSUdfRkVBVFVSRV9QU19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFNfQURESVRJT05BTF9DT0xVTU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVU5VU1VBTF9TWVNURU1TIGlzIG5vdCBzZXQKK0NPTkZJR19SRU5JQ0U9eQorQ09ORklHX0JCX1NZU0NUTD15CitDT05GSUdfVE9QPXkKK0NPTkZJR19GRUFUVVJFX1RPUF9DUFVfVVNBR0VfUEVSQ0VOVEFHRT15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX0dMT0JBTF9QRVJDRU5UUz15CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX0RFQ0lNQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QX1NNUF9QUk9DRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVE9QTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hPV19USFJFQURTIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSD15CisKKyMKKyMgUnVuaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19SVU5TViBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5TVkRJUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTlNWRElSX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TViBpcyBub3Qgc2V0CitDT05GSUdfU1ZfREVGQVVMVF9TRVJWSUNFX0RJUj0iIgorIyBDT05GSUdfU1ZMT0dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVFVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZVSURHSUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5WRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPRlRMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQ09OX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRVRFTkZPUkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFNFQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0FEX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRDSFBBVEhDT04gaXMgbm90IHNldAorIyBDT05GSUdfUkVTVE9SRUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5DT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SVU5DT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTElOVVhFTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VURklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGSUxFU19DSEVDS19PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFU1RBVFVTIGlzIG5vdCBzZXQKKworIworIyBTaGVsbHMKKyMKK0NPTkZJR19BU0g9eQorQ09ORklHX0FTSF9CQVNIX0NPTVBBVD15CisjIENPTkZJR19BU0hfSURMRV9USU1FT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfSk9CX0NPTlRST0w9eQorQ09ORklHX0FTSF9BTElBUz15CitDT05GSUdfQVNIX0dFVE9QVFM9eQorQ09ORklHX0FTSF9CVUlMVElOX0VDSE89eQorQ09ORklHX0FTSF9CVUlMVElOX1BSSU5URj15CitDT05GSUdfQVNIX0JVSUxUSU5fVEVTVD15CisjIENPTkZJR19BU0hfQ01EQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTSF9NQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfQVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfRVhQQU5EX1BSTVQ9eQorQ09ORklHX0NUVFlIQUNLPXkKKyMgQ09ORklHX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9CQVNIX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JSQUNFX0VYUEFOU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0hFTFAgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9JTlRFUkFDVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1NBVkVISVNUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSk9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTE9PUFMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9DQVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRlVOQ1RJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTE9DQUwgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9SQU5ET01fU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0VYUE9SVF9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfTU9ERV9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eQorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19IVVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfU0hfSVNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JBU0hfSVNfQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19IVVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0JBU0hfSVNfTk9ORT15CitDT05GSUdfU0hfTUFUSF9TVVBQT1JUPXkKKyMgQ09ORklHX1NIX01BVEhfU1VQUE9SVF82NCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9FWFRSQV9RVUlFVD15CisjIENPTkZJR19GRUFUVVJFX1NIX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9OT0ZPUksgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfU0hfSElTVEZJTEVTSVpFPXkKKworIworIyBTeXN0ZW0gTG9nZ2luZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19TWVNMT0dEPXkKK0NPTkZJR19GRUFUVVJFX1JPVEFURV9MT0dGSUxFPXkKK0NPTkZJR19GRUFUVVJFX1JFTU9URV9MT0c9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9EVVA9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9DRkc9eQorQ09ORklHX0ZFQVRVUkVfU1lTTE9HRF9SRUFEX0JVRkZFUl9TSVpFPTI1NgorQ09ORklHX0ZFQVRVUkVfSVBDX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HX0JVRkZFUl9TSVpFPTE2CitDT05GSUdfTE9HUkVBRD15CitDT05GSUdfRkVBVFVSRV9MT0dSRUFEX1JFRFVDRURfTE9DS0lORz15CitDT05GSUdfS0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfS0xPR0RfS0xPR0NUTD15CitDT05GSUdfTE9HR0VSPXkKZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8lLmJiYXBwZW5kIGIvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XyUuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwNTc4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF8lLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtCUE59OiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmggYi9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRkYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmgKQEAgLTAsMCArMSw5MTQgQEAKKy8qIFlvY3RvIFByb2plY3QgbG9nbyBmb3IgcHNwbGFzaAorICoKKyAqIENyZWF0ZWQgdXNpbmcgbWFrZS1pbWFnZS1oZWFkZXIuc2ggKGRpc3RyaWJ1dGVkIHdpdGggcHNwbGFzaCkKKyAqLworCisvKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wIDEtYnl0ZS1ydW4tbGVuZ3RoLWVuY29kZWQgKi8KKworI2RlZmluZSBQT0tZX0lNR19ST1dTVFJJREUgKDE3MDgpCisjZGVmaW5lIFBPS1lfSU1HX1dJRFRIICg0MjcpCisjZGVmaW5lIFBPS1lfSU1HX0hFSUdIVCAoMjE0KQorI2RlZmluZSBQT0tZX0lNR19CWVRFU19QRVJfUElYRUwgKDQpIC8qIDM6UkdCLCA0OlJHQkEgKi8KKyNkZWZpbmUgUE9LWV9JTUdfUkxFX1BJWEVMX0RBVEEgKCh1aW50OCopIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDIzN1wzNTBcMzU0XDM0MFwzNzdcMVwzNTBcMzU0XDM0MlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDJcMjQxXDI0MyIgXAorICAiXDI0NFwzNzc7QUNcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wyXDI3NVwyNzdcMjc3XDM3N0xRUlwzNzdcMjAyLjQ2XDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1MFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDMyMVwzMjJcMzIzXDM3N11hY1wzNzdcMjA0LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcM1wzNDZcMzQ3XDM0N1wzNzciIFwKKyAgInd7fFwzNzcvNTdcMzc3XDIwNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDJcMjIzXDIyNlwyMjdcMzc3NTs9XDM3N1wyMDcuNDYiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQzIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjUzXDI1NVwyNTZcMzc3QkhKXDM3N1wyMTEuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyXDMwNCIgXAorICAiXDMwNlwzMDZcMzc3UFVXXDM3N1wyMTMuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwNlwzMTBcMzExXDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzIiBcCisgICJcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDMiIFwKKyAgIlwzMDRcMzc3XDIxNS40NlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDVcMzUwXDM1NFwzNDBcMzc3XDFcMzQ2XDM0NyIgXAorICAiXDM0N1wzNzdcMjU2XDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1MiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzA0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDNcMjIwXDIyM1wyMjRcMzc3NTs9XDM3N1wyNDRcMjQ3XDI1MFwzNzdcMjU0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDRcMzAyXDMwM1wzMDRcMzc3MTc5XDM3N1wyMDVcMjEwXDIxMlwzNzdcMzUwXDM1NFwzNDJcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDMwMlwzNTBcMzU0XDM0MFwzNzdcMlwyNTBcMjUzXDI1M1wzNzc+REZcMzc3XDIwMi40NiIgXAorICAiXDM3N1wxQEZHXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFZXmBcMzc3XDIwMi40NlwzNzdcMjtBQ1wzNzdcMjQxXDI0MyIgXAorICAiXDI0NFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMwMFwzNTBcMzU0XDM0MFwzNzdcMlwzMDNcMzA1XDMwNVwzNzdQVVciIFwKKyAgIlwzNzdcMjA1LjQ2XDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzAzXDMwNVwzMDVcMzc3IiBcCisgICJcMjA1LjQ2XDM3N1wyTFFSXDM3N1wyNzVcMjc3XDI3N1wzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wxNlwzNTBcMzUyXDM1MSIgXAorICAiXDM3N1wzMTNcMzE0XDMxNVwzNzdcMjU0XDI1N1wyNTdcMzc3XDIyNFwyMjdcMjMwXDM3N1wyMTRcMjIwXDIyMVwzNzciIFwKKyAgIlwyMDJcMjA1XDIwNlwzNzd3e3xcMzc3dXl7XDM3N1wyMDJcMjA1XDIwNlwzNzdcMjEzXDIxNlwyMTdcMzc3XDIyM1wyMjYiIFwKKyAgIlwyMjdcMzc3XDI1M1wyNTVcMjU2XDM3N1wzMTBcMzEyXDMxMlwzNzdcMzQ2XDM0NlwzNDdcMzc3XDM2MlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDI2N1wzNTBcMzU0XDM0MFwzNzdcMTZcMzUyXDM1NCIgXAorICAiXDM0NVwzNzdcMzE1XDMxNlwzMTdcMzc3XDI1N1wyNjJcMjYzXDM3N1wyMjVcMjMwXDIzMVwzNzdcMjE2XDIyMVwyMjIiIFwKKyAgIlwzNzdcMjAyXDIwNVwyMDZcMzc3eHx9XDM3N3R4eVwzNzdcMjAyXDIwNVwyMDZcMzc3XDIxMVwyMTRcMjE1XDM3N1wyMjEiIFwKKyAgIlwyMjRcMjI1XDM3N1wyNDdcMjUyXDI1M1wzNzdcMzA1XDMwNlwzMDdcMzc3XDM0MlwzNDNcMzQzXDM3N1wzNzBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMjdcMzMwXDMzMFwzNzdiZ2hcMzc3XDIwNy40NlwzNzdcMSIiOVw3N0FcMzc3XDI1MlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxXWFjXDM3N1wyMDcuNDZcMzc3XDJiZ2hcMzc3XDMyN1wzMzBcMzMwXDM3N1wyMzZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcNFwzMjNcMzI0XDMyNFwzNzdcMjM3XDI0MlwyNDNcMzc3a29wXDM3Nzk+QFwzNzdcMjE2LjQ2XDM3N1w0IiBcCisgICI3PVw3N1wzNzdmamxcMzc3XDIzMlwyMzVcMjM2XDM3N1wzMTZcMzE3XDMyMFwzNzdcMzAzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDdcMzUyXDM1NFwzNDZcMzc3XDMzMlwzMzNcMzM0XDM3N1wzMDNcMzA1XDMwNVwzNzdcMjcxXDI3M1wyNzRcMzc3XDI2MyIgXAorICAiXDI2NVwyNjZcMzc3XDI1M1wyNTZcMjU3XDM3N1wyNDdcMjUyXDI1M1wzNzdcMjQ0XDIzNVwyNDBcMjQxXDM3N1wxfVwyMDAiIFwKKyAgIlwyMDJcMzc3XDIxNS40NlwzNzdcMVwyMjdcMjMyXDIzM1wzNzdcMjIxXDIzNVwyNDBcMjQxXDM3N1wxXDMzNVwzMzZcMzM2IiBcCisgICJcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcNFwzMzBcMzMyXDMzMlwzNzdcMjQ0XDI0N1wyNTBcMzc3cHR1XDM3Nz5DRSIgXAorICAiXDM3N1wyMTYuNDZcMzc3XDQiIjQ6PFwzNzdfZGVcMzc3XDIyNFwyMzBcMjMxXDM3N1wzMTFcMzEyXDMxM1wzNzdcMzYyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDNcMzUyXDM1M1wzNDdcMzc3flwyMDJcMjAzXDM3NzA2OFwzNzdcMjExLjQ2XDM3N1wxXDIxNiIgXAorICAiXDIyMVwyMjJcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDZcMzEwXDMxMVwzNzdcMjExLjQ2XDM3N1wzIiIwNjgiIFwKKyAgIlwzNzd+XDIwMlwyMDNcMzc3XDM1MlwzNTNcMzQ3XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDNcMzMyXDMzM1wzMzRcMzc3IiBcCisgICJcMjE0XDIyMFwyMjFcMzc3Q0lKXDM3N1wyMjYuNDZcMzc3XDM+Q0VcMzc3XDIwN1wyMTJcMjEzXDM3N1wzMjFcMzIyXDMyMyIgXAorICAiXDM3N1wyNzJcMzUwXDM1NFwzNDBcMzc3XDZcMzI0XDMyNVwzMjVcMzc3XDI1N1wyNjFcMjYyXDM3N1wyMTNcMjE3XDIyMCIgXAorICAiXDM3N2drbFwzNzdGS01cMzc3Mjg6XDM3N1wzMTMuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIzNVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzXDM0MVwzNDJcMzQyXDM3N1wyMjRcMjMwXDIzMVwzNzdKT1FcMzc3XDIyNi40NlwzNzdcMyIiOVw3N0FcMzc3IiBcCisgICJ9XDIwMFwyMDJcMzc3XDMxMlwzMTNcMzE0XDM3N1wzNTZcMzUwXDM1NFwzNDBcMzc3XDJcMjI1XDIzMFwyMzFcMzc3OCIgXAorICAiPlw3N1wzNzdcMjEzLjQ2XDM3N1wyIiI1Oz1cMzc3XDM1MFwzNTJcMzUxXDM3N1wyNDdcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIl9kZVwzNzdcMjEzLjQ2XDM3N1wyIiI4Plw3N1wzNzdcMjMyXDIzNVwyMzZcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMiIgXAorICAiXDI2NFwyNjZcMjY2XDM3N1ZbXVwzNzdcMjM0LjQ2XDM3N1wyUFVWXDM3N1wyNTNcMjU2XDI1N1wzNzdcMjY0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDRcMzIyXDMyM1wzMjRcMzc3XDIzNVwyMzdcMjQwXDM3N2drbFwzNzc2PD5cMzc3XDMyMS40NlwzNzdcMSIgXAorICAiXDI2NVwyNjdcMjcwXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDJcMjc3XDMwMVwzMDJcMzc3YGVmXDM3N1wyMzQuNDYiIFwKKyAgIlwzNzdcMkdNTlwzNzdcMjQwXDI0M1wyNDRcMzc3XDM1NFwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDFcMjAyXDIwNVwyMDZcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzdcMjE1LjQ2XDM3N1wxIiBcCisgICJDSUpcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMlwyNDFcMjQzXDI0NFwzNzdGS01cMzc3XDI0MC40NlwzNzdcMkBGRyIgXAorICAiXDM3N1wyMzFcMjMzXDIzNFwzNzdcMjU3XDM1MFwzNTRcMzQwXDM3N1wzXDMyNVwzMjZcMzI3XDM3N1wyMTRcMjIwXDIyMSIgXAorICAiXDM3N0VKTFwzNzdcMzI1LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDJcMjU1XDI1NyIgXAorICAiXDI2MFwzNzdOU1VcMzc3XDI0MC40NlwzNzdcMyIiOVw3N0FcMzc3XDIyMFwyMjNcMjI0XDM3N1wzNTBcMzU0XDM0MlwzNzciIFwKKyAgIlwzNTFcMzUwXDM1NFwzNDBcMzc3XDFcMjUxXDI1M1wyNTRcMzc3XDIxNS40NlwzNzdcMiIiMTc5XDM3N1wzNDFcMzQyIiBcCisgICJcMzQzXDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDFiZmhcMzc3XDIxNS40NlwzNzdcMVwyNDRcMjQ3XDI1MFwzNzdcMjIyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDJcMjc1XDI3N1wyNzdcMzc3TFFSXDM3N1wyNDQuNDZcMzc3XDJCSEpcMzc3XDI2NFwyNjciIFwKKyAgIlwyNjdcMzc3XDI1M1wzNTBcMzU0XDM0MFwzNzdcMlwyNTNcMjU2XDI1N1wzNzdQVVZcMzc3XDMzMC40NlwzNzdcMVwyNjUiIFwKKyAgIlwyNjdcMjcwXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMzEzXDMxNFwzMTVcMzc3VVlbXDM3N1wyNDQuNDZcMzc3IiBcCisgICJcMjtBQ1wzNzdcMjQ3XDI1MlwyNTNcMzc3XDM1MVwzNTBcMzU0XDM0MFwzNzdcMUxRU1wzNzdcMjE1LjQ2XDM3N1wxeCIgXAorICAifH1cMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcMVwzMTRcMzE2XDMxNlwzNzdcMjE1LjQ2XDM3N1wxQkdJXDM3N1wyMjEiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzNDZcMzQ3XDM0N1wzNzdobW5cMzc3XDI1MC40NlwzNzdcMl1hY1wzNzdcMzQwXDM0MSIgXAorICAiXDM0MVwzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3N1wyXDIzNVwyMzdcMjQwXDM3N0JHSVwzNzdcMzMyLjQ2XDM3N1wxXDI2NSIgXAorICAiXDI2N1wyNzBcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzd0eHpcMzc3XDI1MC40NlwzNzciIFwKKyAgIlwyUFVXXDM3N1wzMjRcMzI2XDMyNlwzNzdcMzQ3XDM1MFwzNTRcMzQwXDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyMTUuIiBcCisgICI0NlwzNzdcMiIiMDY4XDM3N1wzMzBcMzMyXDMzMlwzNzdcMjQzXDM1MFwzNTRcMzQwXDM3N1wxZWlrXDM3N1wyMTUuNCIgXAorICAiNlwzNzdcMVwyNDJcMjQ0XDI0NVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wyXDI3NVwyNzdcMjc3XDM3Nz1CRFwzNzciIFwKKyAgIlwyNTIuNDZcMzc3XDIiIjg+XDc3XDM3N1wyNjFcMjYzXDI2NFwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3N1wyXDI2NVwyNjciIFwKKyAgIlwyNzBcMzc3QkhKXDM3N1wzMzQuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMlwzMTMiIFwKKyAgIlwzMTVcMzE1XDM3N0VKTFwzNzdcMjUyLjQ2XDM3N1wyIiIyODpcMzc3XDI0MFwyNDNcMjQ0XDM3N1wzNDdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVZbXVwzNzdcMjE1LjQ2XDM3N1wxa3BxXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDFcMzE2XDMxN1wzMjAiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxQEZHXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjEwXDIxNFwyMTVcMzc3XDI1Ni40IiBcCisgICI2XDM3N1wxeX1cMTc3XDM3N1wyNDFcMzUwXDM1NFwzNDBcMzc3XDJcMzM2XDMzN1wzMzdcMzc3YWVnXDM3N1wzMzYuNCIgXAorICAiNlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wyXDIzMVwyMzRcMjM1XDM3NzA2OFwzNzciIFwKKyAgIlwyNTUuNDZcMzc3XDFpbW9cMzc3XDM0NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDFcMzE3XDMyMVwzMjFcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzdcMWdsbVwzNzdcMjE1LjQ2XDM3N1wxXDIzNlwyNDEiIFwKKyAgIlwyNDJcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzdcMjYwLjQ2XDM3N1wxY2hpXDM3N1wyMzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwyNjRcMjY3XDI2N1wzNzc4Plw3N1wzNzdcMzM3LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMDJcMjA1XDIwNlwzNzdcMjYwLjQ2XDM3N1wyVFlaXDM3N1wzNTJcMzUzXDM0N1wzNzciIFwKKyAgIlwzNDVcMzUwXDM1NFwzNDBcMzc3XDFjaGlcMzc3XDIxNS40NlwzNzdcMWJmaFwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzIxXDMyMlwzMjNcMzc3XDIxNS40NlwzNzdcMT5ERlwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxX2RlXDM3N1wyNjIiIFwKKyAgIi40NlwzNzdcMlRZWlwzNzdcMzUyXDM1M1wzNDdcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMVwyMDJcMjA1XDIwNlwzNzciIFwKKyAgIlwzNDEuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMXB0dlwzNzdcMjYyLjQ2XDM3NyIgXAorICAiXDJITU9cMzc3XDMzN1wzNDBcMzQwXDM3N1wzNDRcMzUwXDM1NFwzNDBcMzc3XDJcMzIyXDMyM1wzMjRcMzc3LzU3XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjM3XDM1MFwzNTRcMzQwXDM3N1wxa29wXDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMVwyMzRcMjM3XDI0MFwzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxYWVnXDM3N1wyNjQuNDZcMzc3XDFTWFlcMzc3XDIzMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxZmpsXDM3N1wzNDIuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxcHR1XDM3N1wyNjQuNDZcMzc3XDJFSkxcMzc3XDM1MFwzNTFcMzUxXDM3N1wzNDRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMXB0dlwzNzdcMjE1LjQ2XDM3N1wxVltdXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNlwzMjZcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxPUJEXDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFucnNcMzc3XDIyNi40NlwzNzdcMTI9QkRcMzc3YGUiIFwKKyAgImZcMzc3XDIwMFwyMDRcMjA1XDM3N1wyMjBcMjIzXDIyNFwzNzdcMjMzXDIzNlwyMzdcMzc3XDIzNFwyMzdcMjQwXDM3NyIgXAorICAiXDIyMFwyMjNcMjI0XDM3N1wyMDJcMjA1XDIwNlwzNzdiZ2hcMzc3PkRGXDM3N1wyMjYuNDZcMzc3XDFkaWpcMzc3XDIzMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxX2RlXDM3N1wyMzEuNDZcMzc3XDMiIjM5O1wzNzdFSkxcMzc3WV5gXDM3N1wyMDJmamwiIFwKKyAgIlwzNzdcMXN3eFwzNzdcMjQ0dHh5XDM3N1wxX2RlXDM3N1wyMTUuNDZcMzc3XDFwdHVcMzc3XDIyMXR4eVwzNzdcMVwzMTYiIFwKKyAgIlwzMTdcMzIwXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIyNi40NlwzNzdcMTIiIjlcNzciIFwKKyAgIkFcMzc3W2BhXDM3N31cMjAwXDIwMlwzNzdcMjIwXDIyM1wyMjRcMzc3XDIzMVwyMzRcMjM1XDM3N1wyMzVcMjQwXDI0MSIgXAorICAiXDM3N1wyMjBcMjIzXDIyNFwzNzdcMjA1XDIxMFwyMTJcMzc3ZmpsXDM3N0JISlwzNzdcMjI2LjQ2XDM3N1wxU1hZXDM3NyIgXAorICAiXDM0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzNlwzNzcwNjhcMzc3XDIxNS40NlwzNzdcMVwyNzFcMjczXDI3NCIgXAorICAiXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFscXJcMzc3XDIxNS40NlwzNzdcMVwyMzFcMjMzXDIzNFwzNzdcMjE1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMjA3XDIxM1wyMTRcMzc3XDIyNC40NlwzNzdcM1BVV1wzNzdcMjM0XDIzN1wyNDBcMzc3XDMyNyIgXAorICAiXDMzMFwzMzBcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcM1wzMzJcMzMzXDMzNFwzNzdcMjM2XDI0MVwyNDJcMzc3UFUiIFwKKyAgIlZcMzc3XDIyNC40NlwzNzdcMXh8fVwzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wxW2BhXDM3N1wyMjUuNDZcMzc3XDVLIiBcCisgICJQUlwzNzdcMTc3XDIwM1wyMDRcMzc3XDI0N1wyNTJcMjUzXDM3N1wzMTFcMzEyXDMxM1wzNzdcMzUyXDM1NFwzNDZcMzc3IiBcCisgICJcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDIzN1wyNDJcMjQzXDM3N1wyMjQuNDZcMzc3XDNKT1FcMzc3XDIyNlwyMzFcMjMyXDM3N1wzMjBcMzIyXDMyMlwzNzciIFwKKyAgIlwyMTJcMzUwXDM1NFwzNDBcMzc3XDNcMzM2XDMzN1wzMzdcMzc3XDI0MlwyNDVcMjQ2XDM3N1ldX1wzNzdcMjI0LjQ2IiBcCisgICJcMzc3XDFlaWtcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMX5cMjAxXDIwMlwzNzdcMjE1LjQ2XDM3N1wxT1RWXDM3NyIgXAorICAiXDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMjZcMzI3XDMzMFwzNzcvNTdcMzc3XDIxNC40NlwzNzdcMTtBQ1wzNzdcMjE1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjcxXDI3M1wyNzRcMzc3XDIyMi40NlwzNzdcMy81N1wzNzdwdHVcMzc3XDMxNFwzMTYiIFwKKyAgIlwzMTZcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMlwzMTJcMzEzXDMxNFwzNzdqbnBcMzc3XDIyMy40NlwzNzdcMVwyNTQiIFwKKyAgIlwyNTdcMjU3XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDF5fH5cMzc3XDIyMi40NlwzNzdcNC81N1wzNzddYWNcMzc3IiBcCisgICJcMjQ3XDI1MlwyNTNcMzc3XDM0NlwzNDdcMzQ3XDM3N1wyNTdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDJcMzE2XDMxN1wzMjBcMzc3MDY4XDM3N1wyMjIuNDZcMzc3XDIiIFwKKyAgImZqbFwzNzdcMzA1XDMwNlwzMDdcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcM1wzMjNcMzI0XDMyNFwzNzd0eHlcMzc3IiBcCisgICIwNjhcMzc3XDIyMi40NlwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wyXDM0N1wzNTBcMzUwIiBcCisgICJcMzc3NTo8XDM3N1wyMTUuNDZcMzc3XDFcMjU2XDI2MFwyNjFcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMjI2XDIzMVwyMzJcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMlwzNDRcMzQ1XDM0NVwzNzc6IiBcCisgICJAQlwzNzdcMjIxLjQ2XDM3N1wyZ2tsXDM3N1wzMzJcMzMzXDMzNFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMyNCIgXAorICAiXDMyNlwzMjZcMzc3XmNlXDM3N1wyMjEuNDZcMzc3XDIiIjY8PlwzNzdcMzM1XDMzNlwzMzdcMzc3XDIyM1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDIzNVwyNDBcMjQxXDM3N1wyMjEuNDZcMzc3XDMiIjM5O1wzNzdcMTc3XDIwM1wyMDRcMzc3XDM0MSIgXAorICAiXDM0MlwzNDJcMzc3XDI2MlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNTBcMzU0XDM0MlwzNzdGS01cMzc3XDIyMS40NlwzNzdcMltgYVwzNzdcMzIxXDMyMlwzMjMiIFwKKyAgIlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMzNVwzMzZcMzM3XDM3N2tvcFwzNzdcMjIxLjQ2XDM3N1wyIiIwNjhcMzc3IiBcCisgICJcMzE0XDMxNlwzMTZcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyMTNcMjE3XDIyMFwzNzdcMjE1LjQ2XDM3N1wxRiIgXAorICAiS01cMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMlwzMzFcMzMyXDMzM1wzNzcvNTdcMzc3XDIxNC40NlwzNzdcMTpAQlwzNzciIFwKKyAgIlwyMTVcMzUwXDM1NFwzNDBcMzc3XDFeY2VcMzc3XDIyMC40NlwzNzdcMjtBQ1wzNzdcMjY1XDI2N1wyNzBcMzc3XDIzMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDI1MVwyNTNcMjU0XDM3NzU7PVwzNzdcMjIwLjQ2XDM3N1wxWV1fXDM3N1wyMjJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMjVcMzI2XDMyN1wzNzcwNjhcMzc3XDIyMC40NlwzNzdcMnB0dVwzNzdcMzQ2XDM0NlwzNDciIFwKKyAgIlwzNzdcMjY0XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzN1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxdHh6XDM3N1wyMjAuNDZcMzc3XDIiIjY8PlwzNzdcMjUwXDI1M1wyNTNcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDI3MFwyNzJcMjcyXDM3NzxCQ1wzNzdcMjIwLjQ2XDM3N1wxR01OXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDJcMzUwIiBcCisgICJcMzU0XDM0MlwzNzc5XDc3QVwzNzdcMjE1LjQ2XDM3N1wxXDI0NFwyNDdcMjUwXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMXJ2d1wzNzdcMjE1LjQ2XDM3N1wxXDIyM1wyMjZcMjI3XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjYxXDI2MyIgXAorICAiXDI2NFwzNzdcMjIwLjQ2XDM3N1wyWF1eXDM3N1wzNDRcMzQ1XDM0NVwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDMyNyIgXAorICAiXDMzMFwzMzBcMzc3SE1PXDM3N1wyMjAuNDZcMzc3XDFcMjU1XDI1N1wyNjBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxVVlbXDM3N1wyMTcuNDZcMzc3XDI8QkNcMzc3XDI3NFwyNzZcMjc2XDM3N1wyNjZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFcMzExXDMxMlwzMTNcMzc3XDIyMC40NiIgXAorICAiXDM3N1wyTFFTXDM3N1wzMzBcMzMyXDMzMlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wyXDM0MlwzNDNcMzQzXDM3N1MiIFwKKyAgIlhZXDM3N1wyMjAuNDZcMzc3XDFcMjI0XDIzMFwyMzFcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyMzBcMjMzXDIzNCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFARkdcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMlwzMzJcMzMzXDMzNFwzNzcwNjhcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wxIiI5PkBcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMUFGSFwzNzdcMjE3LjQ2XDM3N1wxZ2tsXDM3NyIgXAorICAiXDIzNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzUzXDM0N1wzNzdPVFZcMzc3XDIxNy40NlwzNzdcMVw3N0VHXDM3N1wyMjAiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzJcMjM1XDIzNlwzNzdcMjE3LjQ2XDM3N1wyTVJUXDM3N1wzNDBcMzQxXDM0MVwzNzciIFwKKyAgIlwyNjdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFPVFZcMzc3XDIxNy40NlwzNzdcMldcXF1cMzc3XDM1MFwzNTRcMzQyXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlxcYWJcMzc3XDIxNy40NlwzNzdcMiIiNTo8XDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJBRkhcMzc3XDIxNS40NlwzNzdcMVwyMzBcMjMzXDIzNFwzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wxdXl7XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxXDIxN1wyMjJcMjIzXDM3N1wyMTcuIiBcCisgICI0NlwzNzdcMWltb1wzNzdcMjM3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTRcMzQ2XDM3N0xRUlwzNzdcMjE3LjQ2XDM3NyIgXAorICAiXDFcMjIwXDIyNFwyMjVcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMSIiOT5AXDM3N1wyMTYuNDZcMzc3XDJPVFZcMzc3IiBcCisgICJcMzUxXDM1NFwzNDNcMzc3XDI3MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzdcMjE3LjQ2XDM3N1wxW2BhXDM3N1wyNDBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVtgYVwzNzdcMjE3LjQ2XDM3N1wxe1wxNzdcMjAwXDM3N1wzNDNcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MSIgXAorICAiXDI1MlwzNzdcMjE1LjQ2XDM3N1wyIiI5XDc3QVwzNzdcMzUwXDM1NFwzNDJcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDMzNVwzMzZcMzM3XDM3NzA2OFwzNzdcMjE0LjQ2XDM3N1wyIiI4Plw3N1wzNzdcMzUxXDM1NFwzNDNcMzc3XDIxNCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxIiI5PkBcMzc3XDIxNi40NlwzNzdcMVFWWFwzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyIiBcCisgICJcMzQxXDM0MlwzNDNcMzc3XDc3RUdcMzc3XDIxNi40NlwzNzdcMTtBQ1wzNzdcMjE2XDM1MFwzNTRcMzQwXDM3N1wxXDIyNCIgXAorICAiXDIzMFwyMzFcMzc3XDIxNi40NlwzNzdcMkdMTlwzNzdcMzUwXDM1MVwzNTFcMzc3XDI3MVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDJFSkxcMzc3XDM1MFwzNTFcMzUxXDM3N1wyNDBcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1NFwzNDNcMzc3Sk9RXDM3NyIgXAorICAiXDIxNi40NlwzNzdcMiIiMTc5XDM3N1wzNDZcMzQ3XDM0N1wzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMTZcMjIxXDIyMlwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxeHx9XDM3N1wyMTUuNDZcMzc3XDFcMjE2IiBcCisgICJcMjIxXDIyMlwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyMTYuNDZcMzc3XDIiIjc9XDc3IiBcCisgICJcMzc3XDMzN1wzNDBcMzQwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMzEyXDMxM1wzMTRcMzc3MDY4XDM3N1wyMTYiIFwKKyAgIi40NlwzNzdcMVwyNDJcMjQ0XDI0NVwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxO0FDXDM3N1wyMTUuNDZcMzc3XDIiIjAiIFwKKyAgIjY4XDM3N1wzMTZcMzE3XDMyMFwzNzdcMjcyXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDI1N1wyNjFcMjYyXDM3N1wyMTYuNDZcMzc3XDIiIjA2OFwzNzdcMzE3XDMyMCIgXAorICAiXDMyMFwzNzdcMjQyXDM1MFwzNTRcMzQwXDM3N1wyXDMzMFwzMzJcMzMyXDM3NzU6PFwzNzdcMjE2LjQ2XDM3N1wxXDIxMyIgXAorICAiXDIxNlwyMTdcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwyNjRcMjY2XDI2NlwzNzdcMjE1LjQ2XDM3N1wyIiI1Oz0iIFwKKyAgIlwzNzdcMzUwXDM1MlwzNTFcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMlwzMzdcMzQwXDM0MFwzNzcwNjhcMzc3XDIxNCIgXAorICAiLjQ2XDM3N1wyIiI2PD5cMzc3XDM1MlwzNTRcMzQ2XDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDE+REZcMzc3XDIxNi4iIFwKKyAgIjQ2XDM3N1wxXDI0NlwyNTBcMjUxXDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDFcMjE2XDIyMVwyMjJcMzc3XDIxNi40IiBcCisgICI2XDM3N1wxR0xOXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MVwyNTJcMzc3XDIxNi40NlwzNzdcMVwyMjMiIFwKKyAgIlwyMjZcMjI3XDM3N1wyNzNcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFPVFZcMzc3XDIxNi40NlwzNzdcMVwyMjBcMjIzXDIyNFwzNzdcMjQ0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjQ0XDI0N1wyNTBcMzc3XDIxNi40NlwzNzdcMSIiOD5cNzdcMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMVVZW1wzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMjAyXDIwNVwyMDZcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMXp+XDE3N1wzNzdcMjE1LjQ2IiBcCisgICJcMzc3XDFcMjEzXDIxNlwyMTdcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDFaX2FcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMUpPUVwzNzdcMjE2LjQ2XDM3N1wxXDMxMFwzMTJcMzEyXDM3N1wyMTMiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVtgYVwzNzdcMjE1LjQ2XDM3N1wxQkhKXDM3N1wyNzRcMzUwXDM1NFwzNDBcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMzIwXDMyMlwzMjJcMzc3XDIxNi40NiIgXAorICAiXDM3N1wxSE1PXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDFcXGFiXDM3N1wyMTYuNDZcMzc3XDFcMjYwXDI2M1wyNjMiIFwKKyAgIlwzNzdcMzQzXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIiIjE3OVwzNzdcMzQxIiBcCisgICJcMzQyXDM0MlwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQzXDM3NzE3OVwzNzdcMjE0LjQ2XDM3NyIgXAorICAiXDIiIjU7PVwzNzdcMzUyXDM1M1wzNDdcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMW5yc1wzNzdcMjE2LjQ2XDM3N1wxIiBcCisgICJcMzE2XDMxN1wzMjBcMzc3XDI0NlwzNTBcMzU0XDM0MFwzNzdcMVwyNzNcMjc1XDI3NlwzNzdcMjE2LjQ2XDM3N1wxfCIgXAorICAiXDIwMFwyMDFcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjE2LjQ2XDM3N1wxXDI1M1wyNTUiIFwKKyAgIlwyNTZcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjE2LjQ2XDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyNDZcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMlwzMjFcMzIyXDMyM1wzNzcvNTdcMzc3XDIxNS40NlwzNzdcMWVpa1wzNzdcMzQ0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFfZGVcMzc3XDIxNS40NlwzNzdcMXh8fVwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxflwyMDFcMjAyXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3NzI4OlwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFobW5cMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMVhdXlwzNzdcMjE1LjQ2XDM3N1wxIiI5PkBcMzc3IiBcCisgICJcMjEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyMTUuNDZcMzc3XDE7QUNcMzc3XDI3NVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMT1CRFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFQVVdcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMW9zdFwzNzdcMjE1LjQ2XDM3N1wyIiIwNjhcMzc3XDM1MSIgXAorICAiXDM1MlwzNTBcMzc3XDM0M1wzNTBcMzU0XDM0MFwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjE1LjQ2XDM3N1wyIiIwNjgiIFwKKyAgIlwzNzdcMzMwXDMzMlwzMzJcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMlwzNDNcMzQ0XDM0NFwzNzcxNzlcMzc3XDIxNCIgXAorICAiLjQ2XDM3N1wyIiI0OjxcMzc3XDM1MFwzNTJcMzUxXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3XDFcMjY1XDI2N1wyNzAiIFwKKyAgIlwzNzdcMjE2LjQ2XDM3N1wxXDMwNVwzMDZcMzA3XDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDFcMjcxXDI3M1wyNzNcMzc3IiBcCisgICJcMjE2LjQ2XDM3N1wxXDMwM1wzMDVcMzA1XDM3N1wyMTFcMzUwXDM1NFwzNDBcMzc3XDFlaWtcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDIwN1wyMTJcMjEzXDM3N1wyNzVcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNFwzMTVcMzc3XDIxNi40NlwzNzdcMVwyNjBcMjYzXDI2M1wzNzdcMjUwXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzE3XDMyMFwzMjBcMzc3XDIxNi40NlwzNzdcMVwyNTRcMjU3XDI1N1wzNzdcMzQ0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFucnNcMzc3XDIxNS40NlwzNzdcMWtwcVwzNzdcMjE3XDM1MFwzNTRcMzQwXDM3N1wxXDIwMFwyMDRcMjA1IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxXDIwMVwyMDRcMjA2XDM3NyIgXAorICAiXDIxNS40NlwzNzdcMU1SVFwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMTUuNDZcMzc3XDFcMjE3XDIyMiIgXAorICAiXDIyM1wzNzdcMjExXDM1MFwzNTRcMzQwXDM3N1wxIiI2PD5cMzc3XDIxNS40NlwzNzdcMVwzMTJcMzEzXDMxNFwzNzciIFwKKyAgIlwyNzVcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjI2XDIzMVwyMzJcMzc3XDIxNS40NlwzNzdcMT1CRFwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxV1xcXVwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDF4fH1cMzc3XDM0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMzNcMzM0XDMzNFwzNzcwNjhcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDMxN1wzMjBcMzIwXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDJcMzQ1XDM0NlwzNDZcMzc3Mzk7XDM3NyIgXAorICAiXDIxNC40NlwzNzdcMiIiMzk7XDM3N1wzNDdcMzUwXDM1MFwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxTFFSXDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMVwyMjVcMjMwXDIzMVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDIxMVwyMTRcMjE1XDM3N1wyMTUuIiBcCisgICI0NlwzNzdcMVxcYWJcMzc3XDIxMFwzNTBcMzU0XDM0MFwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjE1LjQ2XDM3N1wxOiIgXAorICAiQEJcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMWJnaFwzNzdcMjE1LjQ2XDM3N1wxXDE3N1wyMDNcMjA0XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM3IiBcCisgICJcMjQyXDI0M1wzNzdcMjE1LjQ2XDM3N1wxRElLXDM3N1wzNDVcMzUwXDM1NFwzNDBcMzc3XDF6flwxNzdcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxYmZoXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFcMjAzXDIwN1wyMTBcMzc3XDIxNS40NlwzNzdcMVwyMDMiIFwKKyAgIlwyMDdcMjEwXDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDFcMzUyXDM1NFwzNDZcMzc3XDIxNi40NlwzNzdcMVwzMzVcMzM2IiBcCisgICJcMzM2XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDFcMzE2XDMxN1wzMjBcMzc3XDIxNS40NlwzNzdcMSIiMTc5XDM3NyIgXAorICAiXDIxMFwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzdcMjE1LjQ2XDM3N1wxaW1vXDM3N1wyNzZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDEiIjU6PFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFcMzA2XDMxMFwzMTFcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMVwzNDRcMzQ1XDM0NVwzNzdcMjE2IiBcCisgICIuNDZcMzc3XDFcMzQ0XDM0NVwzNDVcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcNVwzMDRcMzM2XDM3M1wzNzdcMjM2XDMxMSIgXAorICAiXDM3MFwzNzdcMjIwXDMwMVwzNjdcMzc3XDIzNFwzMTBcMzcwXDM3N1wyNzNcMzMxXDM3MlwzNzdcMjY1XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDJcMzQ0XDM0NVwzNDVcMzc3Mzk7XDM3N1wyMTUuNDZcMzc3XDFcMzA0XDMwNlwzMDZcMzc3XDIxM1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0N1wzNTBcMzUwXDM3NzM5O1wzNzdcMjE0LjQ2XDM3N1wyIiIyODpcMzc3XDM0NVwzNDZcMzQ2IiBcCisgICJcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMjE1LjQ2XDM3N1wxQEZHXDM3N1wyNTRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMSIiNjw+XDM3N1wyMTUuNDZcMzc3XDFcMzMxXDMzMlwzMzNcMzc3XDIwN1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIxMlwyMTVcMjE2XDM3N1wyMTUuNDZcMzc3XDFcMjIyXDIyNVwyMjZcMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjE1IiBcCisgICIuNDZcMzc3XDEiIjI4OlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxSE1PXDM3N1wyMTUuNDZcMzc3XDFcMzAyXDMwNCIgXAorICAiXDMwNVwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyXDI2MlwzMjRcMzcxXDM3N1tcMjQ0XDM2M1wzNzdcMjA1T1wyMzUiIFwKKyAgIlwzNjJcMzc3XDJVXDI0MFwzNjJcMzc3XDIzNlwzMTFcMzcwXDM3N1wyNjRcMzUwXDM1NFwzNDBcMzc3XDFcMjExXDIxNCIgXAorICAiXDIxNVwzNzdcMjE1LjQ2XDM3N1wxVltdXDM3N1wyMTNcMzUwXDM1NFwzNDBcMzc3XDFcMjA1XDIxMFwyMTJcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDIwMFwyMDRcMjA1XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjUzXDI1NlwyNTdcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxcXV3XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFjaGlcMzc3XDIxNS40NlwzNzdcMVwyNzVcMjc3XDI3NyIgXAorICAiXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFtcXNcMzc3XDIxNS40NlwzNzdcMVwyNzBcMjcyXDI3MlwzNzdcMjc2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDQiIFwKKyAgIlwzMDVcMzc3XDIxNS40NlwzNzdcMVtgYVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxeX1cMTc3XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMVwyNDZcMjUwXDI1MVwzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3N1wxXDIxNFwyNzdcMzY2XDM3N1wyMTFPXDIzNVwzNjIiIFwKKyAgIlwzNzdcMXVcMjYyXDM2NVwzNzdcMjYzXDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTRcMzQ1XDM3Nzk+QFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMjcxXDI3M1wyNzNcMzc3XDIxMVwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzUyXDM1MVwzNzc1OjxcMzc3IiBcCisgICJcMjE0LjQ2XDM3N1wyIiIxNzlcMzc3XDM0M1wzNDRcMzQ0XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjE3XDIyMiIgXAorICAiXDIyM1wzNzdcMjE1LjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjEyXDIxNVwyMTYiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wxXDIzNVwyNDBcMjQxXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFRVlhcMzc3XDIxNS40IiBcCisgICI2XDM3N1wxXDMyMFwzMjJcMzIyXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NiIgXAorICAiXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MFwyNTFcMzc3XDIxNS40NlwzNzdcMVwyMDJcMjA1XDIwNlwzNzciIFwKKyAgIlwyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjM3XDI0MlwyNDNcMzc3XDIxNS40NlwzNzdcMVwyMDdcMjEyXDIxM1wzNzdcMjQ2IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjM2XDMxMVwzNzBcMzc3XDIxM09cMjM1XDM2MlwzNzdcMVwxNzdcMjcwXDM2NlwzNzciIFwKKyAgIlwyNjNcMzUwXDM1NFwzNDBcMzc3XDFcMjI1XDIzMFwyMzFcMzc3XDIxNS40NlwzNzdcMU9UVlwzNzdcMjExXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjEwXDIxNFwyMTVcMzc3XDIxNS40NlwzNzdcMX1cMjAwXDIwMlwzNzdcMjE3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDF5fH5cMzc3XDIxNS40NlwzNzdcMVwyNjRcMjY3XDI2N1wzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI0NiIgXAorICAiXDI1MVwyNTJcMzc3XDIxNS40NlwzNzdcMVwyMDZcMjExXDIxMlwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxO0FDXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwzNDdcMzUwXDM1MFwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDIxNlwyMjFcMjIyXDM3N1wyMTUuNDZcMzc3XDFcMjM1XDI0MFwyNDEiIFwKKyAgIlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyMTUuNDZcMzc3XDFucnNcMzc3XDI0NVwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0MlwzNTdcMzc1XDM3N1FcMjM2XDM2MlwzNzdcMjE0T1wyMzVcMzYyXDM3N1wxXDMwNFwzMzYiIFwKKyAgIlwzNzNcMzc3XDI2M1wzNTBcMzU0XDM0MFwzNzdcMT5ERlwzNzdcMjE1LjQ2XDM3N1wxXDI1NlwyNjBcMjYxXDM3N1wyMDciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzUzXDM0N1wzNzc1Oz1cMzc3XDIxNC40NlwzNzdcMiIiMTc5XDM3N1wzNDFcMzQyIiBcCisgICJcMzQyXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMVwzMTNcMzE1XDMxNVwzNzdcMjU0IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjc2XDMwMFwzMDFcMzc3XDIxNS40NlwzNzdcMXtcMTc3XDIwMFwzNzdcMjA3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDEiIjE3OVwzNzdcMjE1LjQ2XDM3N1wyNzdcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDQiIFwKKyAgIlwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjA0XDIxMFwyMTFcMzc3XDIxNS40NlwzNzdcMVwyNjciIFwKKyAgIlwyNzFcMjcyXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzI2XDMyN1wzMzBcMzc3XDIxNS40NlwzNzdcMWVpa1wzNzciIFwKKyAgIlwyNDVcMzUwXDM1NFwzNDBcMzc3XDFcMjMyXDMwN1wzNzBcMzc3XDIxNU9cMjM1XDM2MlwzNzdcMXpcMjY1XDM2NVwzNzciIFwKKyAgIlwyNjNcMzUwXDM1NFwzNDBcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDIxNS40NlwzNzdcMUZLTVwzNzdcMjA3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjEzXDIxNlwyMTdcMzc3XDIxNS40NlwzNzdcMXl9XDE3N1wzNzdcMjIwXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFiZ2hcMzc3XDIxNS40NlwzNzdcMVwzMzJcMzMzXDMzNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDMxNFwzMTYiIFwKKyAgIlwzMTZcMzc3XDIxNS40NlwzNzdcMXF1d1wzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wyMTYuNDZcMzc3XDI3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMXl8flwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjE1LiIgXAorICAiNDZcMzc3XDFbYGFcMzc3XDI0NVwzNTBcMzU0XDM0MFwzNzdcMWlcMjU0XDM2NFwzNzdcMjE1T1wyMzVcMzYyXDM3N1wxIiBcCisgICJRXDIzNlwzNjJcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMUdNTlwzNzdcMjE1LjQ2XDM3N1wxXDI0M1wyNDZcMjQ3XDM3NyIgXAorICAiXDIwNVwzNTBcMzU0XDM0MFwzNzdcMlwzNTJcMzU0XDM0NlwzNzc2PD5cMzc3XDIxNC40NlwzNzdcMiIiMDY4XDM3N1wzMzciIFwKKyAgIlwzNDBcMzQwXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFZXmBcMzc3XDIxNS40NlwzNzdcMVwzNDFcMzQyXDM0M1wzNzciIFwKKyAgIlwyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNlwzMjZcMzc3XDIxNS40NlwzNzdcMWhtblwzNzdcMjA3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDIxNS40NlwzNzdcMSIiOD5cNzdcMzc3XDI3N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMXB0dVwzNzdcMjE1LjQ2XDM3N1wxXDMxNFwzMTZcMzE2XDM3NyIgXAorICAiXDI1NFwzNTBcMzU0XDM0MFwzNzdcMVwzNTFcMzUyXDM1MFwzNzdcMjE1LjQ2XDM3N1wxUVZYXDM3N1wyNDVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVVcMjQwXDM2MlwzNzdcMjE2T1wyMzVcMzYyXDM3N1wxXDM0NFwzNjBcMzc1XDM3N1wyNjNcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNjBcMjYzXDI2M1wzNzdcMjE1LjQ2XDM3N1wxQEZHXDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIlwyMTZcMjIxXDIyMlwzNzdcMjE1LjQ2XDM3N1wxd3t8XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFZXV9cMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wxXDM0MlwzNDNcMzQzXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzI1XDMyNlwzMjdcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxZ2xtXDM3N1wyMDZcMzUwXDM1NFwzNDBcMzc3XDFcMzUxXDM1MlwzNTBcMzc3XDIxNS40NlwzNzdcMSIiNSIgXAorICAiOz1cMzc3XDI3N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMXB0dVwzNzdcMjE1LjQ2XDM3N1wxXDMxNVwzMTZcMzE3XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzUyIiBcCisgICJcMzUzXDM0N1wzNzdcMjE1LjQ2XDM3N1wxUVZYXDM3N1wyNDVcMzUwXDM1NFwzNDBcMzc3XDFVXDI0MFwzNjJcMzc3XDIxNiIgXAorICAiT1wyMzVcMzYyXDM3N1wxXDM0NVwzNjFcMzc1XDM3N1wyNjRcMzUwXDM1NFwzNDBcMzc3XDFQVVdcMzc3XDIxNS40NlwzNzciIFwKKyAgIlwxXDIzMFwyMzNcMjM0XDM3N1wyMDNcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1NFwzNDNcMzc3OD5cNzdcMzc3XDIxNCIgXAorICAiLjQ2XDM3N1wyIiIwNjhcMzc3XDMzNVwzMzZcMzM2XDM3N1wyMjFcMzUwXDM1NFwzNDBcMzc3XDFiZmhcMzc3XDIxNS4iIFwKKyAgIjQ2XDM3N1wxXDMzMlwzMzNcMzM0XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMzE0XDMxNlwzMTZcMzc3XDIxNS40IiBcCisgICI2XDM3N1wxcXV3XDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDIxNi40NlwzNzdcMjc3XDM1MFwzNTRcMzQwXDM3N1wxXDMwMiIgXAorICAiXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxeHx9XDM3N1wyMTUuNDZcMzc3XDFcMzAyIiBcCisgICJcMzAzXDMwNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQzXDM3N1wyMTUuNDZcMzc3XDFaX2FcMzc3IiBcCisgICJcMjQ1XDM1MFwzNTRcMzQwXDM3N1wxbFwyNTVcMzY0XDM3N1wyMTVPXDIzNVwzNjJcMzc3XDFSXDIzN1wzNjJcMzc3XDI2NSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDI3NVwyNzdcMzAwXDM3N1wyMTUuNDZcMzc3XDIiIjlcNzdBXDM3N1wzNTBcMzU0XDM0MiIgXAorICAiXDM3N1wyMDJcMzUwXDM1NFwzNDBcMzc3XDFcMjIwXDIyNFwyMjVcMzc3XDIxNS40NlwzNzdcMXR4elwzNzdcMjIyXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMVwzMTRcMzE2XDMxNlwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjc3XDMwMVwzMDJcMzc3XDIxNS40NlwzNzdcMXp+XDE3N1wzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wyMTYuNDYiIFwKKyAgIlwzNzdcMVwzNTJcMzU0XDM0NVwzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3IiBcCisgICJcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMTUuNDZcMzc3XDFcMjcxXDI3M1wyNzNcMzc3XDI1NCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDMyN1wzMzBcMzMwXDM3N1wyMTUuNDZcMzc3XDFkaWpcMzc3XDI0NVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIzNlwzMTFcMzcwXDM3N1wyMTVPXDIzNVwzNjJcMzc3XDFcMTc3XDI3MFwzNjZcMzc3XDI2NlwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXWFjXDM3N1wyMTUuNDZcMzc3XDRcMjE1XDIyMFwyMjFcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNTBcMzU0IiBcCisgICJcMzQyXDM3Nzk+QFwzNzdcMjE0LjQ2XDM3N1wyLzU3XDM3N1wzMzJcMzMzXDMzNFwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDF3e3xcMzc3XDIxNS40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI1MFwyNTMiIFwKKyAgIlwyNTNcMzc3XDIxNS40NlwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxIiIwNjhcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDM0MVwzNDJcMzQyXDM3N1wyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNSIgXAorICAiLjQ2XDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFcMjE1XDIyMFwyMjFcMzc3XDIxNS40NlwzNzdcMVwyMzdcMjQyXDI0MyIgXAorICAiXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFcMjc2XDMwMFwzMDFcMzc3XDIxNS40NlwzNzdcMW1xc1wzNzdcMjQ1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzUwXDM2MlwzNzVcMzc3U1wyMzdcMzYyXDM3N1wyMTRPXDIzNVwzNjJcMzc3XDFcMzE1XDM0MyIgXAorICAiXDM3M1wzNzdcMjY2XDM1MFwzNTRcMzQwXDM3N1wxXDMxM1wzMTVcMzE1XDM3N1wyMTUuNDZcMzc3XDMiIjU7PVwzNzciIFwKKyAgIlwzNTBcMzUyXDM1MVwzNzdcMjIzXDIyNlwyMjdcMzc3XDIxNS40NlwzNzdcMXF1d1wzNzdcMjIzXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjE2XDIyMVwyMjJcMzc3XDIxNS40NlwzNzdcMVwyMzFcMjM0XDIzNVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjE0XDIyMFwyMjFcMzc3XDIxNS40NlwzNzdcMVwyMzRcMjM3XDI0MFwzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJBRkhcMzc3XDIxNS40NlwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjc2XDM1MFwzNTRcMzQwXDM3N1wxXDMwMlwzMDNcMzA0IiBcCisgICJcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDI0NFwyNDdcMjUwXDM3N1wyMTUuNDZcMzc3XDFcMjAzIiBcCisgICJcMjA3XDIxMFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxXDI0MVwyNDNcMjQ0XDM3N1wyMTUuNDZcMzc3XDFcMjA1XDIxMCIgXAorICAiXDIxMlwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxXDI1M1wzMjBcMzcxXDM3N1wyMTNPXDIzNVwzNjJcMzc3XDFcMjE0IiBcCisgICJcMjc3XDM2NlwzNzdcMjcwXDM1MFwzNTRcMzQwXDM3N1wxaW1vXDM3N1wyMTUuNDZcMzc3XDJ1eXtcMzc3OkBCXDM3NyIgXAorICAiXDIxNC40NlwzNzdcMi81N1wzNzdcMzMwXDMzMlwzMzJcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVwyNTJcMjU0XDI1NSIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDF0eHlcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMWdrbFwzNzdcMjE1LjQ2XDM3N1wxXDI3MiIgXAorICAiXDI3NFwyNzVcMzc3XDIwN1wzNTBcMzU0XDM0MFwzNzdcMVdcXF1cMzc3XDIxNS40NlwzNzdcMVwyNTFcMjUzXDI1NFwzNzciIFwKKyAgIlwyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzAxXDMwMlwzMDNcMzc3XDIxNS40NlwzNzdcMV5jZVwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wxfVwyMDBcMjAyIiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwyNDNcMjQ2XDI0N1wzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwzMDZcMzY3XDM3NyIgXAorICAiXDIxMU9cMjM1XDM2MlwzNzdcMVwyMDBcMjcwXDM2NlwzNzdcMjcxXDM1MFwzNTRcMzQwXDM3N1wyXDMyN1wzMzBcMzMwIiBcCisgICJcMzc3MDY4XDM3N1wyMzIuNDZcMzc3XDFucnNcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVwzMTFcMzEyXDMxM1wzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFDSUpcMzc3XDI1NFwzNTBcMzU0XDM0MFwzNzdcMSIiOD5cNzdcMzc3XDIxNS40NlwzNzdcMVwzMzAiIFwKKyAgIlwzMzFcMzMxXDM3N1wyMDdcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxNS40NlwzNzdcMVwxNzdcMjAzXDIwNFwzNzciIFwKKyAgIlwyNzZcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMzM3XDM0MFwzNDBcMzc3XDIxNS40NlwzNzdcMSIiNDo8XDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3XDFMUVJcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDMwMVwzMDJcMzAzXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDJcMzAzXDMzNlwzNzNcMzc3ZCIgXAorICAiXDI1MVwzNjRcMzc3XDIwNU9cMjM1XDM2MlwzNzdcMlpcMjQzXDM2M1wzNzdcMjYwXDMyM1wzNzFcMzc3XDI3M1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxeHx9XDM3N1wyMzEuNDZcMzc3XDIvNTdcMzc3XDMyNVwzMjZcMzI3XDM3N1wyMjRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwzNTFcMzUyXDM1MFwzNzdcMjE2LjQ2XDM3N1wxXDM0MFwzNDFcMzQxXDM3N1wyNTJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjE1LjQ2XDM3N1wxIiIwNjhcMzc3XDIxMFwzNTBcMzU0XDM0MFwzNzdcMVwyMTMiIFwKKyAgIlwyMTdcMjIwXDM3N1wyMTUuNDZcMzc3XDFWW11cMzc3XDI3NlwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMSIiMzk7XDM3N1wyMTUuNDZcMzc3XDFcMzEyXDMxM1wzMTRcMzc3IiBcCisgICJcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDM1MFwzNTFcMzUxXDM3N1wyMTYuNDZcMzc3XDFcMzQxXDM0MlwzNDJcMzc3XDI1MiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1w1XDMyM1wzNDZcMzc0XDM3N1wyNTVcMzIxXDM3MVwzNzdcMjM2XDMxMVwzNzBcMzc3XDI1MSIgXAorICAiXDMxN1wzNzFcMzc3XDMxM1wzNDJcMzczXDM3N1wyNzVcMzUwXDM1NFwzNDBcMzc3XDJcMzQyXDM0M1wzNDNcMzc3MjgiIFwKKyAgIjpcMzc3XDIzMC40NlwzNzdcMWtwcVwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMTUuNDZcMzc3XDFcMjMyIiBcCisgICJcMjM1XDIzNlwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDIxNFwyMjBcMjIxXDM3N1wyMTUuNDZcMzc3XDFYXV5cMzc3IiBcCisgICJcMjEwXDM1MFwzNTRcMzQwXDM3N1wxXDI2MVwyNjNcMjY0XDM3N1wyMTUuNDZcMzc3XDEiIjE3OVwzNzdcMjc2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxX2RlXDM3NyIgXAorICAiXDIxNS40NlwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDI0M1wyNDZcMjQ3XDM3N1wyMTUiIFwKKyAgIi40NlwzNzdcMUJHSVwzNzdcMzU2XDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMzAuNDZcMzc3XDFcMzIzIiBcCisgICJcMzI0XDMyNFwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxfVwyMDBcMjAyXDM3N1wyMTUuNDZcMzc3XDFRVlhcMzc3XDI1MiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjE0XDIyMFwyMjFcMzc3XDIxMFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDMzMFwzMzFcMzMxXDM3N1wyMTYuNDZcMzc3XDFcMjUzXDI1NlwyNTdcMzc3XDI3NVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDMwMlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwyMjRcMjI3XDIzMFwzNzdcMjE1IiBcCisgICIuNDZcMzc3XDFcNzdFR1wzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxW2BhXDM3N1wyMTUuNDZcMzc3XDF0eHpcMzc3XDM1NiIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDM1MlwzNTNcMzQ3XDM3NzY8PlwzNzdcMjI2LjQ2XDM3N1wxaW1vXDM3N1wyMjdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyNjJcMjY0XDI2NVwzNzdcMjE2LjQ2XDM3N1wxXDMxM1wzMTRcMzE1XDM3N1wyNTBcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNzZcMzAwXDMwMVwzNzdcMjE2LjQ2XDM3N1wxXDMwMFwzMDJcMzAyXDM3N1wyMTFcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMTtBQ1wzNzdcMjE1LjQ2XDM3N1wxX2RlXDM3N1wyNzVcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFcMzA2XDMxMFwzMTFcMzc3XDIxNi40NlwzNzdcMVwyNjVcMjY3IiBcCisgICJcMjcwXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNVwzMjVcMzc3XDIxNi40NlwzNzdcMVwyNTFcMjUzXDI1NCIgXAorICAiXDM3N1wzNTdcMzUwXDM1NFwzNDBcMzc3XDFcMjIzXDIyNlwyMjdcMzc3XDIyNi40NlwzNzdcMVwzMjBcMzIyXDMyMlwzNzciIFwKKyAgIlwyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNTBcMzc3MTc5XDM3N1wyMTUuNDZcMzc3XDFvc3RcMzc3XDI1MCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXWFjXDM3N1wyMTUuNDZcMzc3XDEiIjY8PlwzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJtcXNcMzc3XDIxNS40NlwzNzdcMi81N1wzNzdcMzQxXDM0MlwzNDNcMzc3XDI3NFwzNTBcMzU0XDM0MFwzNzdcMVwzMDIiIFwKKyAgIlwzMDNcMzA0XDM3N1wyMTUuNDZcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMSIiOVw3N0FcMzc3XDIxNS40NlwzNzdcMSIgXAorICAiVltdXDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDF0eHpcMzc3XDIxNS40NlwzNzdcMi81N1wzNzdcMzQ2XDM0NlwzNDciIFwKKyAgIlwzNzdcMzYwXDM1MFwzNTRcMzQwXDM3N1wxPUJEXDM3N1wyMjQuNDZcMzc3XDFmamxcMzc3XDIzMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxaW1vXDM3N1wyMTUuNDZcMzc3XDIvNTdcMzc3XDMyNFwzMjVcMzI1XDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwzMDNcMzA1XDMwNVwzNzdcMjE2LjQ2XDM3N1wxeHx9XDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjQ2XDI1MSIgXAorICAiXDI1MlwzNzdcMjE2LjQ2XDM3N1wxeX1cMTc3XDM3N1wyNzRcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFcMjAwXDIwNFwyMDVcMzc3XDIxNi40NlwzNzdcMVwyNzZcMzAwIiBcCisgICJcMzAxXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3XDJcMzMwXDMzMVwzMzFcMzc3MDY4XDM3N1wyMTUuNDZcMzc3XDFgZSIgXAorICAiZlwzNzdcMzYxXDM1MFwzNTRcMzQwXDM3N1wxXDIzN1wyNDJcMjQzXDM3N1wyMjQuNDZcMzc3XDFcMzE2XDMxN1wzMjAiIFwKKyAgIlwzNzdcMjMxXDM1MFwzNTRcMzQwXDM3N1wxXDI2NFwyNjdcMjY3XDM3N1wyMTYuNDZcMzc3XDFhZWdcMzc3XDI0NlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxT1RWXDM3N1wyMTYuNDZcMzc3XDFcMzAzXDMwNVwzMDVcMzc3XDIxMlwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDM1MVwzNTJcMzUwXDM3NzA2OFwzNzdcMjE1LjQ2XDM3N1wyLzU3XDM3N1wzMjNcMzI0XDMyNFwzNzdcMjczXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxXDMxM1wzMTUiIFwKKyAgIlwzMTVcMzc3XDIxNi40NlwzNzdcMU5TVVwzNzdcMjQ2XDM1MFwzNTRcMzQwXDM3N1wxY2hpXDM3N1wyMTYuNDZcMzc3IiBcCisgICJcMVwyNTNcMjU2XDI1N1wzNzdcMzYyXDM1MFwzNTRcMzQwXDM3N1wxRElLXDM3N1wyMjIuNDZcMzc3XDFjaGlcMzc3XDIzMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxO0FDXDM3N1wyMTYuNDZcMzc3XDFcMjU3XDI2MlwyNjNcMzc3XDI0NFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIzMFwyMzNcMjM0XDM3N1wyMTYuNDZcMzc3XDFCSEpcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzdcMWFlZ1wzNzciIFwKKyAgIlwyMTYuNDZcMzc3XDFdYWNcMzc3XDI3M1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2XDM3NyIgXAorICAiXDIzNFwzNTBcMzU0XDM0MFwzNzdcMUpPUVwzNzdcMjE2LjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyNDRcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVwyNTZcMjYwXDI2MVwzNzdcMjE2LjQ2XDM3N1wxIiI1Oz1cMzc3XDM2M1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxXDI1NlwyNjBcMjYxXDM3N1wyMjIuNDZcMzc3XDFcMzEzXDMxNFwzMTVcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAiXDIyNFwyMjdcMjMwXDM3N1wyMTYuNDZcMzc3XDI6QEJcMzc3XDM0NlwzNDZcMzQ3XDM3N1wyNDJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMlwzMjJcMzIzXDMyNFwzNzcxNzlcMzc3XDIxNi40NlwzNzdcMVwyMzVcMjQwXDI0MVwzNzdcMjE0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjYyXDI2NFwyNjVcMzc3XDIxNy40NlwzNzdcMVwyMjBcMjIzXDIyNFwzNzdcMjcyXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wxXDI1MlwyNTRcMjU1XDM3NyIgXAorICAiXDIxNi40NlwzNzdcMiIiMzk7XDM3N1wzMjZcMzI3XDMzMFwzNzdcMjQyXDM1MFwzNTRcMzQwXDM3N1wyXDM0MFwzNDEiIFwKKyAgIlwzNDFcMzc3OD5cNzdcMzc3XDIxNi40NlwzNzdcMVwyMDdcMjEyXDIxM1wzNzdcMzY0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJPVFZcMzc3XDIyMC40NlwzNzdcMWBlZlwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3Nzg+XDc3IiBcCisgICJcMzc3XDIxNi40NlwzNzdcMVldX1wzNzdcMjQxXDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTFcMzUxXDM3N0VKTFwzNzciIFwKKyAgIlwyMTYuNDZcMzc3XDE7QUNcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjE2LjQ2XDM3N1wyLzU3XDM3NyIgXAorICAiXDI2NFwyNjdcMjY3XDM3N1wyNzFcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIxNS40NlwzNzdcMjM1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFFSkxcMzc3XDIxNi40NlwzNzdcMktQUlwzNzdcMzUxXDM1NFwzNDNcMzc3XDI0MVwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxTlNVXDM3N1wyMTYuNDZcMzc3XDIiIjE3OVwzNzdcMzQ2XDM0NlwzNDdcMzc3XDM2NFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI3MlwyNzRcMjc1XDM3N1wyMjAuNDZcMzc3XDFcMzA3XDMxMVwzMTFcMzc3XDIzNVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIyMFwyMjNcMjI0XDM3N1wyMTcuNDZcMzc3XDFzd3hcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzciIFwKKyAgIlwyMTcuNDZcMzc3XDFcMjIwXDIyNFwyMjVcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyMzNcMjM2XDIzN1wzNzdcMjE3IiBcCisgICIuNDZcMzc3XDIiIjY8PlwzNzdcMzAxXDMwMlwzMDNcMzc3XDI3MFwzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNCIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFcMzUyXDM1NFwzNTBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMVwyNDZcMjUxXDI1MlwzNzciIFwKKyAgIlwyMTcuNDZcMzc3XDFiZmhcMzc3XDI0MFwzNTBcMzU0XDM0MFwzNzdcMWNoaVwzNzdcMjE3LjQ2XDM3N1wxen5cMTc3IiBcCisgICJcMzc3XDM2NlwzNTBcMzU0XDM0MFwzNzdcMVldX1wzNzdcMjE2LjQ2XDM3N1wxXmNlXDM3N1wyMzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMUJHSVwzNzdcMjE3LjQ2XDM3N1wxbHFyXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDJcMzUyXDM1NFwzNTBcMzc3IiBcCisgICJTWFlcMzc3XDIxNy40NlwzNzdcMUJHSVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxQEZHXDM3N1wyMTcuNDZcMzc3XDIiIFwKKyAgIjA2OFwzNzdcMjQ2XDI1MVwyNTJcMzc3XDI2N1wzNTBcMzU0XDM0MFwzNzdcMVwzMDJcMzAzXDMwNFwzNzdcMjE1LjQ2IiBcCisgICJcMzc3XDFcMzM1XDMzNlwzMzdcMzc3XDIzNVwzNTBcMzU0XDM0MFwzNzdcMVFWWFwzNzdcMjE3LjQ2XDM3N1wxXFxhYiIgXAorICAiXDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDIxNy40NlwzNzdcMiIiNjw+XDM3N1wzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwzNjZcMzUwXDM1NFwzNDBcMzc3XDFcMzExXDMxMlwzMTNcMzc3XDIxNi40NlwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjM3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMC40NlwzNzdcMldcXF1cMzc3XDM0NFwzNDVcMzQ1XDM3NyIgXAorICAiXDIzMlwzNTBcMzU0XDM0MFwzNzdcMlwzMjZcMzI3XDMzMFwzNzdITU9cMzc3XDIyMC40NlwzNzdcMVwyNjFcMjYzXDI2NCIgXAorICAiXDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMjQ3XDI1MlwyNTNcMzc3XDIyMS40NlwzNzdcMVwyMDJcMjA2XDIwN1wzNzciIFwKKyAgIlwyNDJcMzUwXDM1NFwzNDBcMzc3XDJcMjY0XDI2N1wyNjdcMzc3XDI3NlwzMDBcMzAxXDM3N1wyMjJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMTBcMzEyXDMxMlwzNzdcMjE1LjQ2XDM3N1wxXDI2N1wyNzFcMjcyXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwzMTRcMzE2XDMxNlwzNzcvNTdcMzc3XDIxNy40NlwzNzdcMkxRU1wzNzdcMzMwXDMzMVwzMzFcMzc3XDIzMlwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDM0MVwzNDJcMzQyXDM3N1NYWVwzNzdcMjIwLjQ2XDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wzNjciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzNDFcMzQyXDM0M1wzNzcwNjhcMzc3XDIxNC40NlwzNzdcMVtgYVwzNzdcMjQxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFlaWtcMzc3XDIyMC40NlwzNzdcMjtBQ1wzNzdcMjYzXDI2NVwyNjZcMzc3XDIzMFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wyXDI0NlwyNTFcMjUyXDM3NzU6PFwzNzdcMjIwLjQ2XDM3N1wxXWFjXDM3N1wyMjJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVldX1wzNzdcMjIxLjQ2XDM3N1wyQkhKXDM3N1wyNjRcMjY3XDI2N1wzNzdcMjM1XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDVcMzMxXDMzMlwzMzNcMzc3XDIwN1wyMTNcMjE0XDM3Nz1CRFwzNzcuNDZcMzc3RktNXDM3N1wyMjJcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMVwzMjdcMzMwXDMzMFwzNzdcMjE1LjQ2XDM3N1wxdXl7XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDFcMzUwIiBcCisgICJcMzU0XDM0MlwzNzdcMjE1XDM1MFwzNTRcMzQwXDM3N1wxfFwyMDBcMjAxXDM3N1wyMjAuNDZcMzc3XDIiIjU6PFwzNzciIFwKKyAgIlwyNDVcMjQ3XDI1MFwzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wyXDI2NVwyNjdcMjcwXDM3NztBQ1wzNzdcMjIwLjQ2IiBcCisgICJcMzc3XDFLUFJcMzc3XDM3MFwzNTBcMzU0XDM0MFwzNzdcMVwyMDVcMjEwXDIxMlwzNzdcMjE1LjQ2XDM3N1wxXDMwMiIgXAorICAiXDMwM1wzMDRcMzc3XDI0MVwzNTBcMzU0XDM0MFwzNzdcMlwzNTBcMzUxXDM1MVwzNzc+REZcMzc3XDIyMS40NlwzNzciIFwKKyAgIlwyZmpsXDM3N1wzMzVcMzM2XDMzNlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMyN1wzMzBcMzMwXDM3N15iZFwzNzciIFwKKyAgIlwyMjEuNDZcMzc3XDIiIjlcNzdBXDM3N1wzNDJcMzQzXDM0M1wzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDMzMlwzMzMiIFwKKyAgIlwzMzRcMzc3Mzk7XDM3N1wyMjIuNDZcMzc3XDJXXFxdXDM3N1wyNTdcMjYyXDI2M1wzNzdcMjMwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDNcMzIwXDMyMlwzMjJcMzc3XDIxN1wyMjJcMjIzXDM3N01SVFwzNzdcMjA1LjQ2XDM3N1wxXDI0NlwyNTBcMjUxIiBcCisgICJcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMVwzNDdcMzUwXDM1MFwzNzdcMjE1LjQ2XDM3N1wyIiIxNzlcMzc3XDMyNCIgXAorICAiXDMyNlwzMjZcMzc3XDIxNVwzNTBcMzU0XDM0MFwzNzdcM1wyMzVcMjQwXDI0MVwzNzdDSUpcMzc3dHh6XDM3N1wyMTYiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMUtQUlwzNzdcMjIxLjQ2XDM3N1wyW2BhXDM3N1wzMjRcMzI1XDMyNVwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDJcMzQxXDM0MlwzNDJcMzc3a29wXDM3N1wyMjEuNDZcMzc3XDIiIjM5O1wzNzdcMzIzXDMyNFwzMjQiIFwKKyAgIlwzNzdcMzY3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQyXDM3NzU7PVwzNzdcMjE0LjQ2XDM3N1wxWV1fXDM3NyIgXAorICAiXDI0M1wzNTBcMzU0XDM0MFwzNzdcMlwzMDNcMzA1XDMwNVwzNzcvNTdcMzc3XDIyMS40NlwzNzdcMyIiMDY4XDM3N3siIFwKKyAgIlwxNzdcMjAwXDM3N1wzMzJcMzMzXDMzNFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wzXDMyNVwzMjZcMzI3XDM3N3R4IiBcCisgICJ6XDM3Ny81N1wzNzdcMjIyLjQ2XDM3N1wxXDI3MFwyNzJcMjcyXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFcMjQ0XDI0NyIgXAorICAiXDI1MFwzNzdcMjI0LjQ2XDM3N1wzPkRGXDM3N1wyMDZcMjExXDIxMlwzNzdcMjc3XDMwMVwzMDJcMzc3XDIyMVwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1w0XDMyNVwzMjZcMzI3XDM3N1wyNDVcMjQ3XDI1MFwzNzd0eHlcMzc3QkdJXDM3N1wyMTAuNDZcMzc3IiBcCisgICJcMUJHSVwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wxLzU3XDM3N1wyMTUuNDZcMzc3XDJDSUpcMzc3XDMzMFwzMzJcMzMyIiBcCisgICJcMzc3XDIxMVwzNTBcMzU0XDM0MFwzNzdcM1wzMDJcMzA0XDMwNVwzNzd8XDIwMFwyMDFcMzc3Nz1cNzdcMzc3XDIwMiIgXAorICAiLjQ2XDM3N1wyIiIwNjhcMzc3XDMzMlwzMzNcMzM0XDM3N1wyMTVcMzUwXDM1NFwzNDBcMzc3XDJcMzI2XDMyN1wzMzAiIFwKKyAgIlwzNzc0OjxcMzc3XDIyMS40NlwzNzdcMy81N1wzNzdwdHZcMzc3XDMyMFwzMjJcMzIyXDM3N1wyMjBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcM1wzMzZcMzM3XDMzN1wzNzdcMjAxXDIwNFwyMDZcMzc3MTc5XDM3N1wyMjIuNDZcMzc3XDFcMjM3XDI0MlwyNDMiIFwKKyAgIlwzNzdcMzcwXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyMTUuNDZcMzc3XDFcMjc3XDMwMVwzMDJcMzc3IiBcCisgICJcMjQ0XDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyMjQuNDZcMzc3XDNUWVpcMzc3XDIzMlwyMzVcMjM2IiBcCisgICJcMzc3XDMxN1wzMjBcMzIwXDM3N1wyMTJcMzUwXDM1NFwzNDBcMzc3XDNcMzIxXDMyMlwzMjNcMzc3XDIzMlwyMzVcMjM2IiBcCisgICJcMzc3U1hZXDM3N1wyMjQuNDZcMzc3XDFcMjA3XDIxMlwyMTNcMzc3XDIyNlwzNTBcMzU0XDM0MFwzNzdcMXZ6e1wzNzciIFwKKyAgIlwyMjYuNDZcMzc3XDIxIiIxNzlcMzc3XFxhYlwzNzd+XDIwMVwyMDJcMzc3XDIzM1wyMzZcMjM3XDM3N1wyNzJcMjc0IiBcCisgICJcMjc1XDM3N1wzMTNcMzE1XDMxNVwzNzdcMzI1XDMyNlwzMjdcMzc3XDMzM1wzMzRcMzM0XDM3N1wzNDNcMzQ0XDM0NCIgXAorICAiXDM3N1wzMzFcMzMyXDMzM1wzNzdcMzE1XDMxNlwzMTdcMzc3XDMwMVwzMDJcMzAzXDM3N1wyNjRcMjY2XDI2NlwzNzciIFwKKyAgIlwyMjRcMjMwXDIzMVwzNzd1eXtcMzc3VltdXDM3NzY8PlwzNzdcMjE1LjQ2XDM3N1wxXDIzNlwyNDFcMjQyXDM3N1wyMjEiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVBVV1wzNzdcMjE2LjQ2XDM3N1wxMiIiMTc5XDM3N3l9XDE3N1wzNzdcMjc0XDI3NlwyNzYiIFwKKyAgIlwzNzdcMzM3XDM0MFwzNDBcMzc3XDM0M1wzNDRcMzQ0XDM3N1wzMzJcMzMzXDMzNFwzNzdcMzA1XDMwNlwzMDdcMzc3IiBcCisgICJcMjM1XDIzN1wyNDBcMzc3cnZ3XDM3NzxCQ1wzNzdcMjA2LjQ2XDM3N1wxcXV3XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNTNcMjU2XDI1N1wzNzdcMjI0LjQ2XDM3N1wzTlNVXDM3N1wyMjNcMjI2XDIyN1wzNzdcMzEyXDMxM1wzMTRcMzc3IiBcCisgICJcMjEyXDM1MFwzNTRcMzQwXDM3N1wzXDMyN1wzMzBcMzMwXDM3N1wyNDFcMjQzXDI0NFwzNzddYWNcMzc3XDIyNC40NiIgXAorICAiXDM3N1wxcHR1XDM3N1wzNzFcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIxNC40NlwzNzdcMVZbXVwzNzdcMjQ2XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDF8XDIwMFwyMDFcMzc3XDIyNi40NlwzNzdcMTIiIjM5O1wzNzdQVVZcMzc3bnJzXDM3N35cMjAxIiBcCisgICJcMjAyXDM3N1wyMDdcMjEyXDIxM1wzNzdcMjEwXDIxNFwyMTVcMzc3flwyMDJcMjAzXDM3N29zdFwzNzdSV1lcMzc3NCIgXAorICAiOjxcMzc3XDIyNi40NlwzNzdcMW5yc1wzNzdcMjMwXDM1MFwzNTRcMzQwXDM3N1wxYWVnXDM3N1wyNjMuNDZcMzc3XDEiIFwKKyAgIj5DRVwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDIwNFwyMTBcMjExXDM3N1wyMzYuNDZcMzc3XDIvNTdcMzc3XDMzMCIgXAorICAiXDMzMVwzMzFcMzc3XDIxNlwzNTBcMzU0XDM0MFwzNzdcMVwyMjBcMjI0XDIyNVwzNzdcMjI2LjQ2XDM3N1wxMiIiMjgiIFwKKyAgIjpcMzc3TFFTXDM3N2tvcFwzNzd8XDIwMFwyMDFcMzc3XDIwNVwyMTBcMjEyXDM3N1wyMTFcMjE0XDIxNVwzNzdcMjAwIiBcCisgICJcMjA0XDIwNVwzNzdwdHZcMzc3VVpcXFwzNzc2PD5cMzc3XDIyNi40NlwzNzdcMVtgYVwzNzdcMzcxXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjI1XDIzMFwyMzFcMzc3XDIxNS40NlwzNzdcMVwyNzRcMjc2XDI3NlwzNzdcMjQ3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFucnNcMzc3XDI2NC40NlwzNzdcMVtgYVwzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wxVVpcXFwzNzdcMjYzLjQ2XDM3NyIgXAorICAiXDFcMjMxXDIzM1wyMzRcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyNzBcMjcyXDI3MlwzNzdcMjM3LjQ2XDM3N1wxIiBcCisgICJvc3RcMzc3XDIxN1wzNTBcMzU0XDM0MFwzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjY0LjQ2XDM3N1wyUFVXXDM3N1wzNTEiIFwKKyAgIlwzNTRcMzQzXDM3N1wzNzBcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3OT5AXDM3N1wyMTQuNDZcMzc3IiBcCisgICJcMVRZWlwzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wxbnJzXDM3N1wyNjIuNDZcMzc3XDFiZmhcMzc3XDIzNFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxX2RlXDM3N1wyNjIuNDZcMzc3XDE6QEJcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjM2IiBcCisgICIuNDZcMzc3XDIvNTdcMzc3XDMyNlwzMjdcMzMwXDM3N1wyMTdcMzUwXDM1NFwzNDBcMzc3XDFcMTc3XDIwM1wyMDRcMzc3IiBcCisgICJcMjYyLjQ2XDM3N1wyU1hZXDM3N1wzNTFcMzUyXDM1MFwzNzdcMzcxXDM1MFwzNTRcMzQwXDM3N1wxXDIxM1wyMTdcMjIwIiBcCisgICJcMzc3XDIxNS40NlwzNzdcMVwyNzFcMjczXDI3NFwzNzdcMjUyXDM1MFwzNTRcMzQwXDM3N1wxXDE3N1wyMDNcMjA0XDM3NyIgXAorICAiXDI2MC40NlwzNzdcMXF1d1wzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxcnZ3XDM3N1wyNjIuNDZcMzc3XDFcMjIyXDIyNSIgXAorICAiXDIyNlwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyMzcuNDZcMzc3XDFtcXNcMzc3XDIyMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMjdcMjMwXDM3N1wyNjAuNDZcMzc3XDFiZmhcMzc3XDM3MlwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyXDM1MFwzNTJcMzUxXDM3NzU6PFwzNzdcMjE0LjQ2XDM3N1wxUVZYXDM3N1wyNTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMlwyMzFcMjMzXDIzNFwzNzcwNjhcMzc3XDI1NC40NlwzNzdcMi81N1wzNzdcMjE0XDIyMFwyMjFcMzc3XDI0MFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyXDIzN1wyNDJcMjQzXDM3NzA2OFwzNzdcMjYwLjQ2XDM3N1wyIiI3PVw3N1wzNzdcMzUyXDM1NCIgXAorICAiXDM0NVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxQkhKXDM3N1wyMzcuNDZcMzc3XDFcMzIzXDMyNFwzMjRcMzc3XDIyMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDI1M1wyNTZcMjU3XDM3NzQ6PFwzNzdcMjU1LjQ2XDM3N1wxeXx+XDM3N1wzNzNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMDJcMjA1XDIwNlwzNzdcMjE1LjQ2XDM3N1wxXDI2NlwyNzBcMjcxXDM3N1wyNTVcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMlwzMTJcMzEzXDMxNFwzNzdDSUpcMzc3XDI1Mi40NlwzNzdcMj5DRVwzNzdcMjc3XDMwMVwzMDJcMzc3IiBcCisgICJcMjQyXDM1MFwzNTRcMzQwXDM3N1wyXDMyMlwzMjNcMzI0XDM3N1BVVlwzNzdcMjYwLjQ2XDM3N1wxXDIxM1wyMTZcMjE3IiBcCisgICJcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMlwzMDdcMzExXDMxMVwzNzcvNTdcMzc3XDIzNi40NlwzNzdcMWpucFwzNzciIFwKKyAgIlwyMjFcMzUwXDM1NFwzNDBcMzc3XDJcMzMwXDMzMVwzMzFcMzc3TFFTXDM3N1wyNTIuNDZcMzc3XDIiIjY8PlwzNzdcMjU3IiBcCisgICJcMjYyXDI2M1wzNzdcMzczXDM1MFwzNTRcMzQwXDM3N1wyXDM0MlwzNDNcMzQzXDM3NzE3OVwzNzdcMjE0LjQ2XDM3NyIgXAorICAiXDFOU1VcMzc3XDI1N1wzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzdxdXdcMzc3XDI1MC40NlwzNzdcMmYiIFwKKyAgImpsXDM3N1wzNDZcMzQ3XDM0N1wzNzdcMjQ1XDM1MFwzNTRcMzQwXDM3N1wyXDIyNFwyMzBcMjMxXDM3NzU7PVwzNzdcMjU1IiBcCisgICIuNDZcMzc3XDJXXFxdXDM3N1wyNjVcMjY3XDI3MFwzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDIyN1wyMzJcMjMzXDM3NyIgXAorICAiXDIzNy40NlwzNzdcMVwzMjFcMzIyXDMyM1wzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDIwMFwyMDRcMjA1XDM3Ny8iIFwKKyAgIjU3XDM3N1wyNDcuNDZcMzc3XDJZXmBcMzc3XDMzNVwzMzZcMzM2XDM3N1wzNzRcMzUwXDM1NFwzNDBcMzc3XDFwdHVcMzc3IiBcCisgICJcMjE1LjQ2XDM3N1wxXDI2NFwyNjdcMjY3XDM3N1wyNjFcMzUwXDM1NFwzNDBcMzc3XDJcMzA0XDMwNlwzMDZcMzc3TCIgXAorICAiUVJcMzc3XDI0NC40NlwzNzdcMkZLTVwzNzdcMjcxXDI3M1wyNzRcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcM1wzNDYiIFwKKyAgIlwzNDdcMzQ3XDM3N3xcMjAwXDIwMVwzNzcyODpcMzc3XDI1MC40NlwzNzdcMyIiMjg6XDM3N3Z6e1wzNzdcMzE3XDMyMSIgXAorICAiXDMyMVwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMzQuNDZcMzc3XDMvNTdcMzc3cXUiIFwKKyAgIndcMzc3XDM0MVwzNDJcMzQyXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMzIxXDMyMlwzMjNcMzc3VltdXDM3N1wyNDQiIFwKKyAgIi40NlwzNzdcMj5ERlwzNzdcMjUzXDI1NlwyNTdcMzc3XDM3NVwzNTBcMzU0XDM0MFwzNzdcMVwzMDZcMzA3XDMxMFwzNzciIFwKKyAgIlwyMTUuNDZcMzc3XDFNUlRcMzc3XDI2NFwzNTBcMzU0XDM0MFwzNzdcMlwyNDJcMjQ1XDI0NlwzNzdDSUpcMzc3XDI0MCIgXAorICAiLjQ2XDM3N1wyPkNFXDM3N1wyMzFcMjMzXDIzNFwzNzdcMjU0XDM1MFwzNTRcMzQwXDM3N1wzXDM0NlwzNDZcMzQ3XDM3NyIgXAorICAiXDIwN1wyMTNcMjE0XDM3NzpAQlwzNzdcMjQzLjQ2XDM3N1w0LzU3XDM3N1leYFwzNzdcMjM1XDI0MFwyNDFcMzc3XDM1MiIgXAorICAiXDM1M1wzNDdcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMlwyNjZcMjcwXDI3MVwzNzc+Q0VcMzc3XDIzMC40NlwzNzciIFwKKyAgIlwzIiIxNzlcMzc3cXV3XDM3N1wzMjRcMzI2XDMyNlwzNzdcMjI3XDM1MFwzNTRcMzQwXDM3N1wyXDI1NVwyNTdcMjYwIiBcCisgICJcMzc3S1BSXDM3N1wyNDAuNDZcMzc3XDMiIjk+QFwzNzdcMjE1XDIyMFwyMjFcMzc3XDM1MFwzNTRcMzQyXDM3N1wzNzYiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMU9UVlwzNzdcMjE1LjQ2XDM3N1wxXDI2MlwyNjRcMjY1XDM3N1wyNjZcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMlwyNTJcMjU0XDI1NVwzNzdLUFJcMzc3XDIzNC40NlwzNzdcMkRJS1wzNzdcMjQyXDI0NFwyNDVcMzc3XDI2MSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzXDI1NlwyNjBcMjYxXDM3N2RpalwzNzcwNjhcMzc3XDIzNS40NlwzNzdcNCIiMDY4XDM3NyIgXAorICAiYGVmXDM3N1wyNDNcMjQ2XDI0N1wzNzdcMzQ2XDM0N1wzNDdcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcM1wzNTJcMzU0IiBcCisgICJcMzQ1XDM3N3p+XDE3N1wzNzcyODpcMzc3XDIyNC40NlwzNzdcM0hNT1wzNzdcMjI0XDIzMFwyMzFcMzc3XDM1MFwzNTEiIFwKKyAgIlwzNTFcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyNjVcMjY3XDI3MFwzNzdTWFlcMzc3XDIzNC40NlwzNzdcMj5DIiBcCisgICJFXDM3N1wyMjZcMjMxXDIzMlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyXDM1MFwzNTRcMzQwXDM3N1wyMjdcMjMyXDIzMyIgXAorICAiXDM3N1wyMTUuNDZcMzc3XDFQVVdcMzc3XDI3MVwzNTBcMzU0XDM0MFwzNzdcM1wzMTdcMzIwXDMyMFwzNzdcMjEwXDIxNCIgXAorICAiXDIxNVwzNzdCSEpcMzc3XDIyNi40NlwzNzdcMz5DRVwzNzdcMjAxXDIwNFwyMDZcMzc3XDMxMlwzMTNcMzE0XDM3N1wyNjUiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcNFwzNTBcMzU0XDM0MlwzNzdcMjU3XDI2MVwyNjJcMzc3eHx9XDM3N0JISlwzNzdcMjI2IiBcCisgICIuNDZcMzc3XDUiIjY8PlwzNzdgZWZcMzc3XDIyMFwyMjNcMjI0XDM3N1wyNzdcMzAxXDMwMlwzNzdcMzUwXDM1NFwzNDIiIFwKKyAgIlwzNzdcMjQwXDM1MFwzNTRcMzQwXDM3N1wzXDM0N1wzNTBcMzUwXDM3N1wyMjBcMjIzXDIyNFwzNzdITU9cMzc3XDIxNiIgXAorICAiLjQ2XDM3N1w0IiIxNzlcMzc3W2BhXDM3N1wyMjRcMjI3XDIzMFwzNzdcMzI2XDMyN1wzMzBcMzc3XDI0MFwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzXDMzMFwzMzFcMzMxXDM3N1wyMjBcMjIzXDIyNFwzNzdITU9cMzc3XDIyNi40NlwzNzdcMyIiOT5AXDM3NyIgXAorICAien5cMTc3XDM3N1wzMDFcMzAyXDMwM1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMDJcMzUwXDM1NFwzNDBcMzc3XDIiIFwKKyAgIlwzMzJcMzMzXDMzNFwzNzczOTtcMzc3XDIxNS40NlwzNzdcMVwyNzVcMjc3XDI3N1wzNzdcMjc0XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDRcMzI2XDMyN1wzMzBcMzc3XDI0NFwyNDdcMjUwXDM3N3N3eFwzNzdDSUpcMzc3XDIxNi40NlwzNzdcNEBGRyIgXAorICAiXDM3N25yc1wzNzdcMjQwXDI0M1wyNDRcMzc3XDMyMVwzMjJcMzIzXDM3N1wyNzRcMzUwXDM1NFwzNDBcMzc3XDdcMzUwIiBcCisgICJcMzUyXDM1MVwzNzdcMzA2XDMwN1wzMTBcMzc3XDI0MlwyNDRcMjQ1XDM3N1wxNzdcMjAzXDIwNFwzNzdZXmBcMzc3QiIgXAorICAiSEpcMzc3NTs9XDM3N1wyMTEuNDZcMzc3XDZDSUpcMzc3X2RlXDM3N3p+XDE3N1wzNzdcMjI2XDIzMVwyMzJcMzc3XDI2MiIgXAorICAiXDI2NFwyNjVcMzc3XDMyNVwzMjZcMzI3XDM3N1wyNTBcMzUwXDM1NFwzNDBcMzc3XDZcMzM2XDMzN1wzMzdcMzc3XDI0NiIgXAorICAiXDI1MVwyNTJcMzc3XDIwNVwyMTBcMjEyXDM3N2ZqbFwzNzdMUVNcMzc3RElLXDM3N1wyMDI8QkNcMzc3XDZHTE5cMzc3IiBcCisgICJTWFlcMzc3ZWlrXDM3N1wyMDRcMjEwXDIxMVwzNzdcMjQyXDI0NVwyNDZcMzc3XDMxMVwzMTJcMzEzXDM3N1wyNDdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcNFwzMzNcMzM0XDMzNFwzNzdcMjUxXDI1M1wyNTRcMzc3eHx9XDM3N0hNT1wzNzdcMjE2LjQ2XDM3NyIgXAorICAiXDQ7QUNcMzc3aW1vXDM3N1wyMzJcMjM1XDIzNlwzNzdcMzE0XDMxNlwzMTZcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyMDVcMzUwXDM1NFwzNDBcMzc3XDFVWlxcXDM3N1wyMTUuNDZcMzc3XDFcXGFiXDM3N1wzMDJcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMTRcMzMwXDMzMVwzMzFcMzc3XDI3NFwyNzZcMjc2XDM3N1wyNDRcMjQ3XDI1MFwzNzdcMjM1XDIzN1wyNDBcMzc3XDIyMCIgXAorICAiXDIyM1wyMjRcMzc3XDIxMFwyMTRcMjE1XDM3N1wyMDdcMjEyXDIxM1wzNzdcMjIwXDIyM1wyMjRcMzc3XDIzNFwyMzciIFwKKyAgIlwyNDBcMzc3XDI0M1wyNDZcMjQ3XDM3N1wyNzFcMjczXDI3M1wzNzdcMzI2XDMyN1wzMzBcMzc3XDMxMVwzNTBcMzU0IiBcCisgICJcMzQwXDM3N1w1XDM1MlwzNTRcMzQ1XDM3N1wzNDBcMzQxXDM0MVwzNzdcMzI1XDMyNlwzMjdcMzc3XDM0MVwzNDJcMzQyIiBcCisgICJcMzc3XDM0M1wzNDRcMzQ0XDM3N1wzNTNcMzUwXDM1NFwzNDBcMzc3XDE1XDMzM1wzMzRcMzM0XDM3N1wyNzZcMzAwXDMwMSIgXAorICAiXDM3N1wyNDZcMjUwXDI1MVwzNzdcMjM1XDI0MFwyNDFcMzc3XDIyMFwyMjRcMjI1XDM3N1wyMTFcMjE0XDIxNVwzNzciIFwKKyAgIlwyMDVcMjEwXDIxMlwzNzdcMjIwXDIyM1wyMjRcMzc3XDIzMlwyMzVcMjM2XDM3N1wyNDJcMjQ0XDI0NVwzNzdcMjY1IiBcCisgICJcMjY3XDI3MFwzNzdcMzIzXDMyNFwzMjRcMzc3XDM1MFwzNTRcMzQyXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIxMCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIwNVwyMTBcMjEyXDM3N1wyMTYuNDZcMzc3XDFcMzEzXDMxNVwzMTVcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjM1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjY0XDI2N1wyNjdcMzc3XDIxNi40NlwzNzdcMXR4elwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDJcMzIyXDMyM1wzMjRcMzc3IiBcCisgICI1OjxcMzc3XDIxNS40NlwzNzdcMiIiOT5AXDM3N1wzNTBcMzUyXDM1MVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDJcMzM0XDMzNVwzMzUiIFwKKyAgIlwzNzdcNzdFR1wzNzdcMjE2LjQ2XDM3N1wxXDI0M1wyNDZcMjQ3XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzN1wzNzciIFwKKyAgIkBGR1wzNzdcMjE2LjQ2XDM3N1wxVltdXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMlwzMzZcMzM3XDMzN1wzNzdCR0lcMzc3XDIxNi40NiIgXAorICAiXDM3N1wyIiI2PD5cMzc3XDMzNVwzMzZcMzM2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwzMzNcMzM0XDMzNFwzNzdCSEpcMzc3XDIxNyIgXAorICAiLjQ2XDM3N1wxXDI1MlwyNTRcMjU1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyNzdcMzAxXDMwMlwzNzc5PkBcMzc3XDIxNy40NiIgXAorICAiXDM3N1wxcHR1XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMlwyMTVcMjIwXDIyMVwzNzcvNTdcMzc3XDIxNy40NlwzNzdcMUxRU1wzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMDRcMzA2XDMwNlwzNzdQVVdcMzc3XDIyMC40NlwzNzdcMlw3N0VHXDM3N1wzNDFcMzQyXDM0MyIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzAiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzNlwzNzdpbW9cMzc3XDIyMS40NlwzNzdcMiIiNTo8XDM3N1wzMjJcMzIzIiBcCisgICJcMzI0XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIyN1wzNTBcMzU0XDM0MFwzNzdcM1wzMTJcMzEzXDMxNFwzNzd2entcMzc3MTc5XDM3N1wyMjEuNDZcMzc3XDIiIjIiIFwKKyAgIjg6XDM3N1wyNzVcMjc3XDI3N1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDNcMzQxXDM0MlwzNDNcMzc3XDIzN1wyNDJcMjQzXDM3N01SIiBcCisgICJUXDM3N1wyMjMuNDZcMzc3XDIiIjA2OFwzNzdcMjcxXDI3M1wyNzRcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wzXDMxMFwzMTJcMzEyXDM3NyIgXAorICAiXDIxNVwyMjBcMjIxXDM3N09UVlwzNzdcMjI1LjQ2XDM3N1wyIiIwNjhcMzc3XDI2NFwyNjdcMjY3XDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIyMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzXDIxN1wyMjJcMjIzXDM3N1leYFwzNzcxNzlcMzc3XDIyNy40NlwzNzdcMiIiNTo8XDM3N1wyNzVcMjc3XDMwMCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMDFcMjA0XDIwNlwzNzdcMjMwLjQ2XDM3N1wyO0FDXDM3N1wzMTNcMzE1XDMxNVwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjNcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzNDFcMzQyXDM0M1wzNzcxNzlcMzc3XDIyNi40NlwzNzdcMk5TVVwzNzdcMzM1XDMzNlwzMzciIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMjI1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDF4fH1cMzc3XDIyNS40NlwzNzdcMXB0dVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDJcMzMzXDMzNFwzMzQiIFwKKyAgIlwzNzcvNTdcMzc3XDIyMi40NlwzNzdcMiIiOT5AXDM3N1wyNTJcMjU0XDI1NVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzFcMzUwXDM1NFwzNDBcMzc3XDFwdHVcMzc3IiBcCisgICJcMjIxLjQ2XDM3N1wyZWlrXDM3N1wzNDRcMzQ1XDM0NVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzJcMzUwXDM1NFwzNDBcMzc3XDFcMzI0XDMyNVwzMjVcMzc3XDIxNyIgXAorICAiLjQ2XDM3N1wyUFVXXDM3N1wyNzVcMjc3XDI3N1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFna2xcMzc3XDIxNC40NlwzNzdcMkxRIiBcCisgICJTXDM3N1wyNjBcMjYzXDI2M1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wyMzdcMzUwXDM1NFwzNDBcMzc3XDFcMzEzXDMxNVwzMTVcMzc3XDIxMS40NlwzNzdcMyIiMDY4IiBcCisgICJcMzc3am5wXDM3N1wyNzVcMjc3XDI3N1wzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyNDJcMzUwXDM1NFwzNDBcMzc3XDFeY2VcMzc3XDIwNS40NlwzNzdcNCIiOD5cNzdcMzc3IiBcCisgICJrcHFcMzc3XDI1M1wyNTVcMjU2XDM3N1wzNTBcMzUyXDM1MVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDRcMzUwXDM1NFwzNDBcMzc3XDZcMzAyXDMwNFwzMDVcMzc3LjQiIFwKKyAgIjZcMzc3O0FDXDM3N2JnaFwzNzdcMjI0XDIzMFwyMzFcMzc3XDMxNFwzMTZcMzE2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMVwzNDVcMzQ2IiBcCisgICJcMzQ2XDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDMzN1wzNTBcMzU0XDM0MFwzNzdcMVwzNTJcMzU0XDM1MFwzNzdcMjEwXDMyNVwzMjZcMzI3XDM3N1wxXDM0MSIgXAorICAiXDM0MlwzNDJcMzc3XDIzMlwzNTBcMzU0XDM0MFwzNzdcMVwzNDFcMzQyXDM0M1wzNzdcMjA3XDMyNVwzMjZcMzI3XDM3NyIgXAorICAiXDFcMzQzXDM0NFwzNDRcMzc3XDI0NFwzNTBcMzU0XDM0MFwzNzdcMlwzMTRcMzE2XDMxNlwzNzdcMjY3XDI3MVwyNzIiIFwKKyAgIlwzNzdcMjAyXDI0NFwyNDdcMjUwXDM3N1wyXDI2N1wyNzFcMjcyXDM3N1wzMTVcMzE2XDMxN1wzNzdcMjM2XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzUwXDM1MVwzNTFcMzc3XDIwNFwzNDNcMzQ0XDM0NFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMzMyXDMzM1wzMzRcMzc3XDIxN1wzMjVcMzI2XDMyN1wzNzdcMjMyXDM1MFwzNTRcMzQwXDM3N1wzXDMwMFwzMDJcMzAyIiBcCisgICJcMzc3XDIzNVwyMzdcMjQwXDM3N1wyMDZcMjExXDIxMlwzNzdcMjAyXDIwMlwyMDVcMjA2XDM3N1wzXDIxMlwyMTVcMjE2IiBcCisgICJcMzc3XDI0MlwyNDVcMjQ2XDM3N1wzMDdcMzExXDMxMVwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxXDM0NFwzNDVcMzQ1IiBcCisgICJcMzc3XDIyM1wzMjVcMzI2XDMyN1wzNzdcMVwzMzVcMzM2XDMzNlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMDJcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjEyLjQ2XDM3N1wzS1BSXDM3N1wyMTNcMjE2XDIxN1wzNzdcMzM1IiBcCisgICJcMzM2XDMzN1wzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTEuNDZcMzc3XDNCR0lcMzc3dHh5XDM3NyIgXAorICAiXDI3MVwyNzNcMjczXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDNcMjY1XDI2N1wyNzBcMzc3bHFyXDM3NzY8PlwzNzciIFwKKyAgIlwyMDYuNDZcMzc3XDMiIjY8PlwzNzducnNcMzc3XDI3MFwyNzJcMjcyXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFTIiBcCisgICJYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NlwzNzdcMVwzMzFcMzMyXDMzMyIgXAorICAiXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDNcMjY3XDI3MVwyNzJcMzc3ZmpsXDM3NzA2OFwzNzdcMjEwLjQ2XDM3N1w0IiBcCisgICIwNjhcMzc3YWVnXDM3N1wyNDZcMjUxXDI1MlwzNzdcMzUwXDM1NFwzNDJcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMSIgXAorICAieHx9XDM3N1wyMjMuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMjM1XDIzN1wyNDBcMzc3XDIxNC40NlwzNzdcMiIiMTc5XDM3N1wyMTNcMjE3XDIyMFwzNzdcMjI1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFrcHFcMzc3XDIxNC40NlwzNzdcMlBVV1wzNzdcMzI2XDMyN1wzMzBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyXDI3NVwyNzdcMzAwXDM3N1BVVlwzNzdcMjE0LjQ2XDM3N1wyUldZXDM3N1wyNzdcMzAxXDMwMlwzNzdcMjMxXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNDYiIFwKKyAgIlwzNzdcMVwzMzJcMzMzXDMzNFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wyXDMxMlwzMTNcMzE0XDM3N1FWWFwzNzdcMjE2IiBcCisgICIuNDZcMzc3XDIiIjY8PlwzNzdcMjA3XDIxM1wyMTRcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMXR4elwzNzdcMjIzLiIgXAorICAiNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwIiBcCisgICJcMzc3XDIxNi40NlwzNzdcMXN3eFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTUuNDZcMzc3XDIiIjciIFwKKyAgIj1cNzdcMzc3XDMxN1wzMjFcMzIxXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDFcMjEwXDIxNFwyMTVcMzc3XDIyMC40IiBcCisgICI2XDM3N1wxXDIxMVwyMTRcMjE1XDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIxNy40NlwzNzdcMVwzMzRcMzM1XDMzNVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMjI1XDIzMFwyMzFcMzc3MDY4XDM3N1wyMjAuNDZcMzc3XDFKT1FcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMWsiIFwKKyAgInBxXDM3N1wyMjMuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzAyXDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMUBGR1wzNzdcMjAySk9RXDM3N1wyRktNXDM3NzA2OFwzNzdcMjA2LiIgXAorICAiNDZcMzc3XDFcMjU3XDI2MVwyNjJcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxR0wiIFwKKyAgIk5cMzc3XDIwMkpPUVwzNzdcMUFGSFwzNzdcMjA2LjQ2XDM3N1wxR01OXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFnIiBcCisgICJsbVwzNzdcMjA3LjQ2XDM3N1w0PEJDXDM3N1FWWFwzNzdSV1lcMzc3PkNFXDM3N1wyMDcuNDZcMzc3XDFnbG1cMzc3XDIyNyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzIiBcCisgICIuNDZcMzc3XDEvNTdcMzc3XDIxMzxCQ1wzNzdcMVwzNTBcMzUxXDM1MVwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wxXDIwNCIgXAorICAiXDIxMFwyMTFcMzc3XDIwNy40NlwzNzdcNklOUFwzNzdmamxcMzc3dHh5XDM3N2ltb1wzNzdRVlhcMzc3Mjg6XDM3N1wyMDUiIFwKKyAgIi40NlwzNzdcMVwyNTVcMjU3XDI2MFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxdXl7XDM3N1wyMDY8QkNcMzc3XDE7IiBcCisgICJBQ1wzNzdcMjA0LjQ2XDM3N1wxIiIwNjhcMzc3XDIwNzxCQ1wzNzdcMV5jZVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDMwMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMDQiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMlwyNTBcMjUzXDI1M1wzNzc2PD5cMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMjIzXDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjAzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDJcMzUyXDM1NFwzNDVcMzc3XDIwN1wyMTNcMjE0XDM3N1wyMDUuNDZcMzc3XDFcMjcxXDI3M1wyNzRcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxen5cMTc3XDM3N1wyMDUuNDZcMzc3XDMiIjU7PVwzNzdcMjEzXDIxN1wyMjBcMzc3XDMyN1wzMzAiIFwKKyAgIlwzMzBcMzc3XDIwNFwzNTBcMzU0XDM0MFwzNzdcM1wzMzRcMzM1XDMzNVwzNzdcMjIzXDIyNlwyMjdcMzc3OD5cNzdcMzc3IiBcCisgICJcMjA1LjQ2XDM3N1wxeXx+XDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjM1XDM1MFwzNTRcMzQwXDM3N1wxXDI0MFwyNDMiIFwKKyAgIlwyNDRcMzc3XDIwNS40NlwzNzdcMzpAQlwzNzdcMjI0XDIzMFwyMzFcMzc3XDM0NFwzNDVcMzQ1XDM3N1wyMDZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcNVwzMDZcMzA3XDMxMFwzNzdcMjAyXDIwNVwyMDZcMzc3OkBCXDM3Ny40NlwzNzdHTU5cMzc3XDIzMSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjA1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjU1XDI1N1wyNjBcMzc3XDIwNS40NlwzNzdcMVwzNTFcMzU0XDM0M1wzNzdcMjIyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjA1XDM1MFwzNTRcMzQwXDM3N1wxen5cMTc3XDM3NyIgXAorICAiXDIwNC40NlwzNzdcMVwyMTBcMjE0XDIxNVwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxXDI1N1wyNjJcMjYzXDM3N1wyMDUiIFwKKyAgIi40NlwzNzdcMl5iZFwzNzdcMzUwXDM1MlwzNTFcMzc3XDIxMFwzNTBcMzU0XDM0MFwzNzdcMlwzNTFcMzU0XDM0M1wzNzciIFwKKyAgImdsbVwzNzdcMjA1LjQ2XDM3N1wxXDI1M1wyNTZcMjU3XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNCIgXAorICAiLjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjM0XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDJcMzMyXDMzM1wzMzRcMzc3Mjg6XDM3N1wyMDQuNDZcMzc3XDJbYGFcMzc3XDM0N1wzNTBcMzUwXDM3NyIgXAorICAiXDIxM1wzNTBcMzU0XDM0MFwzNzdcMlwyMzdcMjQyXDI0M1wzNzdcMjY0XDI2NlwyNjZcMzc3XDIzMVwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNSIgXAorICAiXDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjA2XDM1MFwzNTRcMzQwXDM3N1wyMDUuNDYiIFwKKyAgIlwzNzdcMVwzMzBcMzMxXDMzMVwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2IiBcCisgICJcMzQ3XDM0N1wzNzdcMjA1XDM1MFwzNTRcMzQwXDM3N1wxXDMxMFwzMTJcMzEyXDM3N1wyMDQuNDZcMzc3XDFxdXdcMzc3IiBcCisgICJcMjIzXDM1MFwzNTRcMzQwXDM3N1wxQkdJXDM3N1wyMDQuNDZcMzc3XDFna2xcMzc3XDIxNFwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxdHh5XDM3N1wyMDQuNDZcMzc3XDFBRkhcMzc3XDIyNVwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWpucFwzNzdcMjA0LjQ2XDM3N1wxVVpcXFwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzciIFwKKyAgIlwxXDI2NVwyNjdcMjcwXDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFcMzUyXDM1NFwzNDVcMzc3XDIwNS40NlwzNzdcMSIgXAorICAiXDM0MFwzNDFcMzQxXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0NyIgXAorICAiXDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFcMjcxXDI3M1wyNzNcMzc3XDIwNC40NlwzNzdcMVwyMDFcMjA0XDIwNlwzNzciIFwKKyAgIlwyMjJcMzUwXDM1NFwzNDBcMzc3XDFcMjM0XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMUNJSlwzNzdcMjE2XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFQVVZcMzc3XDIwNC40NlwzNzdcMVwyMzNcMjM2XDIzN1wzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDM0MVwzNDJcMzQyXDM3N1wyMDQuNDZcMzc3XDIiIjE3OVwzNzdcMzM1XDMzNlwzMzciIFwKKyAgIlwzNzdcMjUwXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjA1XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDFcMjIyXDIyNVwyMjZcMzc3XDIwNC40NlwzNzdcMSIiMDY4XDM3N1wyMjNcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDVcMzUwXDM1NFwzNDBcMzc3XDFiZmhcMzc3IiBcCisgICJcMjA0LjQ2XDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMjJcMzUwXDM1NFwzNDBcMzc3XDFWW11cMzc3XDIwNC40NlwzNzciIFwKKyAgIlwxXDI1M1wyNTZcMjU3XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjczXDI3NVwyNzZcMzc3XDIwNC40NlwzNzdcMSIgXAorICAiVFlaXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxIiBcCisgICJHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzNcMjM0XDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMXl9XDE3N1wzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNjVcMjY3XDI3MCIgXAorICAiXDM3N1wyMDNcMzUwXDM1NFwzNDBcMzc3XDNcMzQ1XDM0NlwzNDZcMzc3XDIwNlwyMTFcMjEyXDM3Ny81N1wzNzdcMjA0IiBcCisgICIuNDZcMzc3XDFbYGFcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3IiBcCisgICJcMzc3XDIwM1wzNTBcMzU0XDM0MFwzNzdcMlwzMjNcMzI0XDMyNFwzNzdmamxcMzc3XDIwNC40NlwzNzdcMi81N1wzNzciIFwKKyAgIlwzMzZcMzM3XDMzN1wzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxXDM0NVwzNDZcMzQ2XDM3N1wyMDQuNDZcMzc3XDEiIjkiIFwKKyAgIlw3N0FcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjA0LjQ2XDM3N1wxXDM0MVwzNDJcMzQyXDM3N1wyMjMiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMyIgXAorICAiLjQ2XDM3N1wxOkBCXDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDFna2xcMzc3XDIwNC40NlwzNzdcMVwzMDBcMzAyXDMwMiIgXAorICAiXDM3N1wyNTFcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxIiI3PVw3N1wzNzdcMjAzPEJDXDM3NyIgXAorICAiXDEvNTdcMzc3XDIwNi40NlwzNzdcMVwyNTdcMjYyXDI2M1wzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMTpAQlwzNzdcMjAyPEJDXDM3N1wxIiI5PkBcMzc3XDIwNi40NlwzNzdcMVwyMDBcMjA0XDIwNVwzNzdcMjIyIiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDFcMzAyXDMwM1wzMDRcMzc3XDIwNC40NlwzNzdcMXJ2d1wzNzdcMjIwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDF+XDIwMlwyMDNcMzc3XDIwNC40NlwzNzdcMVwyNzRcMjc2XDI3NlwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFTWFlcMzc3XDIwNC40NlwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDEiIjE3OVwzNzciIFwKKyAgIlwyMTFmamxcMzc3XDFcMzExXDMxMlwzMTNcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzdcMUBGR1wzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMzUyXDM1NFwzNDVcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMTYuNDZcMzc3XDFlaWtcMzc3XDIyNCIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTUuNDZcMzc3XDFwdHZcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVwyNTYiIFwKKyAgIlwyNjBcMjYxXDM3N1wyMDQuNDZcMzc3XDFcMjE3XDIyMlwyMjNcMzc3XDIyMFwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3IiBcCisgICJcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjQ2XDI1MFwyNTFcMzc3XDIyM1wzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0IiBcCisgICIuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE1LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMjEiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMSIiMTc5XDM3N1wyMDMuNDZcMzc3XDEiIjM5O1wzNzdcMjUyXDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzNyIgXAorICAiXDI0MFwzNzdcMjE1LjQ2XDM3N1wxcHR1XDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIxMy40NlwzNzciIFwKKyAgIlwyOkBCXDM3N1wyNTVcMjU3XDI2MFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDIzNlwyNDFcMjQyXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVwyMzFcMjMzXDIzNFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwyMDQuNDZcMzc3XDE6QEJcMzc3XDI1MlwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMTIuNDZcMzc3XDMiIjg+XDc3IiBcCisgICJcMzc3b3N0XDM3N1wzMTBcMzEyXDMxMlwzNzdcMjI2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMTMuNDZcMzc3XDIiIFwKKyAgIjc9XDc3XDM3N1wzNTJcMzU0XDM1MFwzNzdcMjI0XDM1MFwzNTRcMzQwXDM3N1wxXDI1N1wyNjJcMjYzXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMVwyMTRcMjIwXDIyMVwzNzdcMjIwXDM1MFwzNTRcMzQwXDM3N1wxXDIzMVwyMzRcMjM1XDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVwyNTFcMjUzXDI1NFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTUuNDZcMzc3XDFcMjY1XDI2N1wyNzBcMzc3XDIyMVwzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwxIiI1Oz1cMzc3XDIwMy40NlwzNzdcMSIiMDY4XDM3N1wyNTJcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYIiBcCisgICJZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LiIgXAorICAiNDZcMzc3XDF4fH1cMzc3XDIwMlwyNTNcMjU2XDI1N1wzNzdcM1wyNTRcMjU3XDI1N1wzNzdcMzAwXDMwMlwzMDJcMzc3IiBcCisgICJcMzI2XDMyN1wzMzBcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDMwMlwzMDNcMzA0IiBcCisgICJcMzc3XDIwMlwzMjVcMzI2XDMyN1wzNzdcMVwyMDRcMjEwXDIxMVwzNzdcMjA0LjQ2XDM3N1wxXDIwMlwyMDZcMjA3XDM3NyIgXAorICAiXDIyNFwzNTBcMzU0XDM0MFwzNzdcMVwzMDRcMzA2XDMwNlwzNzdcMjA0LjQ2XDM3N1wxa3BxXDM3N1wyMjBcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMXp+XDE3N1wzNzdcMjA0LjQ2XDM3N1wxXDI3NVwyNzdcMjc3XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMSIiNjw+XDM3NyIgXAorICAiXDIxMVwyNzFcMjczXDI3NFwzNzdcMVwzNDZcMzQ3XDM0N1wzNzdcMjIxXDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMVwzMzFcMzMyXDMzM1wzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDFTWFlcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDBcMzc3XDIwNC40NlwzNzdcMVwyNTEiIFwKKyAgIlwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40NlwzNzdcMVwzNDZcMzQ3XDM0N1wzNzciIFwKKyAgIlwyMDJcMzUwXDM1NFwzNDBcMzc3XDJcMzUwXDM1NFwzNDJcMzc3OVw3N0FcMzc3XDIwMy40NlwzNzdcMiIiMTc5XDM3NyIgXAorICAiXDMzNlwzMzdcMzM3XDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDJcMzUxXDM1MlwzNTBcMzc3MDY4XDM3N1wyMDMuNDYiIFwKKyAgIlwzNzdcMSIiNTs9XDM3N1wyMjBcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIwMy40NlwzNzdcMi81N1wzNzdcMzQ3IiBcCisgICJcMzUwXDM1MFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wxU1hZXDM3N1wyMDQuNDZcMzc3XDIyNFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxR0xOXDM3N1wyMDMuNDZcMzc3XDE6QEJcMzc3XDIzM1wzNTBcMzU0XDM0MFwzNzdcMXN3eFwzNzdcMjA0LjQiIFwKKyAgIjZcMzc3XDFcMjM1XDI0MFwyNDFcMzc3XDI1MVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjUxXDI1MyIgXAorICAiXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwMyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDIyNFwyMzBcMjMxXDM3N1wyMDQuNDZcMzc3XDFwdHVcMzc3XDIyNFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXFxhYlwzNzdcMjA0LjQ2XDM3N1wxXDI0MlwyNDRcMjQ1XDM3N1wyMTZcMzUwXDM1NFwzNDBcMzc3XDFcMjYwIiBcCisgICJcMjYzXDI2M1wzNzdcMjA0LjQ2XDM3N1wxWV5gXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NiIgXAorICAiXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjMzXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFcMjUwXDI1M1wyNTNcMzc3XDIwNC40NlwzNzdcMUhNT1wzNzdcMjUxXDM1MFwzNTRcMzQwXDM3N1wyMDQuNCIgXAorICAiNlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTJcMzUwXDM1NFwzNDBcMzc3XDFcMjM1XDIzN1wyNDAiIFwKKyAgIlwzNzdcMjA0LjQ2XDM3N1wxXDI1MVwyNTNcMjU0XDM3N1wyMzZcMzUwXDM1NFwzNDBcMzc3XDFrcHFcMzc3XDIwNC40IiBcCisgICI2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDRcMzUwXDM1NFwzNDBcMzc3XDE8QkNcMzc3XDIwNC40NlwzNzdcMVwzMTciIFwKKyAgIlwzMjBcMzIwXDM3N1wyMjNcMzUwXDM1NFwzNDBcMzc3XDFcMjQ1XDI0N1wyNTBcMzc3XDIwNC40NlwzNzdcMjxCQ1wzNzciIFwKKyAgIlwzNDZcMzQ3XDM0N1wzNzdcMjE0XDM1MFwzNTRcMzQwXDM3N1wyXDM1MVwzNTRcMzQzXDM3N0ZLTVwzNzdcMjA0LjQ2IiBcCisgICJcMzc3XDFcMjQzXDI0NlwyNDdcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA0LjQ2XDM3N1wyMjRcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzRcMzUwXDM1NFwzNDBcMzc3XDEiIjU6PCIgXAorICAiXDM3N1wyMDQuNDZcMzc3XDFcMjMwXDIzM1wyMzRcMzc3XDI1MFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1giIFwKKyAgIllcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuIiBcCisgICI0NlwzNzdcMVwyNTFcMjUzXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2IiBcCisgICJcMzQ3XDM0N1wzNzdcMjA0XDM1MFwzNTRcMzQwXDM3N1wxXDIzM1wyMzZcMjM3XDM3N1wyMDQuNDZcMzc3XDFeYmRcMzc3IiBcCisgICJcMjI0XDM1MFwzNTRcMzQwXDM3N1wxSU5QXDM3N1wyMDQuNDZcMzc3XDFXXFxdXDM3N1wyMTRcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMWNoaVwzNzdcMjA0LjQ2XDM3N1wxSE1PXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDFTWFlcMzc3XDIwNC40NlwzNzciIFwKKyAgIlwyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMy40NlwzNzdcMTpAQlwzNzdcMjM0XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDFcMjA1XDIxMFwyMTJcMzc3XDIwNC40NlwzNzdcMiIiMDY4XDM3N1wyNjdcMjcxXDI3MlwzNzdcMjE1XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDFcMzMwXDMzMlwzMzJcMzc3XDIzMVwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjUxIiBcCisgICJcMjUzXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3IiBcCisgICJcMjA1XDM1MFwzNTRcMzQwXDM3N1wxQEZHXDM3N1wyMDQuNDZcMzc3XDFcMjc0XDI3NlwyNzZcMzc3XDIyM1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wxXDI3NFwyNzZcMjc2XDM3N1wyMDUuNDZcMzc3XDJNUlRcMzc3XDMyN1wzMzBcMzMwXDM3N1wyMTBcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMlwzMzVcMzM2XDMzNlwzNzdVWVtcMzc3XDIwNS40NlwzNzdcMVwyNzJcMjc0XDI3NVwzNzdcMjI1IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDE9QkRcMzc3XDIwMy40NlwzNzdcMSIiNjw+XDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDEiIFwKKyAgIkdMTlwzNzdcMjAzLjQ2XDM3N1wxOkBCXDM3N1wyMzVcMzUwXDM1NFwzNDBcMzc3XDFBRkhcMzc3XDIwNC40NlwzNzdcMiIgXAorICAiLzU3XDM3N1wyMTdcMjIyXDIyM1wzNzdcMjEyXDM1MFwzNTRcMzQwXDM3N1w0XDI3NFwyNzZcMjc2XDM3N2JnaFwzNzciIFwKKyAgIi40NlwzNzdcMzI3XDMzMFwzMzBcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjUxXDI1MyIgXAorICAiXDI1NFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wxXDI0MFwyNDNcMjQ0XDM3N1wyMDQuNDZcMzc3XDFNUlRcMzc3XDIyNFwzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wxXDIyMFwyMjRcMjI1XDM3N1wyMDUuNDZcMzc3XDMiIjA2OFwzNzd5fVwxNzdcMzc3XDMwMlwzMDRcMzA1XDM3NyIgXAorICAiXDIwNFwzNTBcMzU0XDM0MFwzNzdcM1wzMDZcMzA3XDMxMFwzNzdcMjAwXDIwNFwyMDVcMzc3MTc5XDM3N1wyMDUuNDYiIFwKKyAgIlwzNzdcMVwyMjBcMjIzXDIyNFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wzXDMwNlwzMDdcMzEwXDM3N1wyNTdcMjYxIiBcCisgICJcMjYyXDM3N2htblwzNzdcMjA0LjQ2XDM3N1wxX2RlXDM3N1wyMjRcMzUwXDM1NFwzNDBcMzc3XDFHTE5cMzc3XDIwMyIgXAorICAiLjQ2XDM3N1wxIiI5PkBcMzc3XDIxM1wzNDNcMzQ0XDM0NFwzNzdcMjIyXDM1MFwzNTRcMzQwXDM3N1wyXDMxM1wzMTUiIFwKKyAgIlwzMTVcMzc3Mzk7XDM3N1wyMDUuNDZcMzc3XDEyQEZHXDM3N1wyMTJcMjE1XDIxNlwzNzdcMzAyXDMwM1wzMDRcMzc3IiBcCisgICJcMzQxXDM0MlwzNDJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNDdcMzUwXDM1MFwzNzdcMzIwXDMyMlwzMjJcMzc3XDI1MyIgXAorICAiXDI1NlwyNTdcMzc3d3t8XDM3Nz1CRFwzNzdcMjAzLjQ2XDM3N1wxXDIxMlwyMTVcMjE2XDM3N1wyMzBcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDMxMlwzNTBcMzU0XDM0MFwzNzdcMVwyMzUiIFwKKyAgIlwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY0XDI2NlwyNjZcMzc3XDIzNlwzNTBcMzU0XDM0MFwzNzdcMWtwcVwzNzciIFwKKyAgIlwyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3XDIwNlwzNTBcMzU0XDM0MFwzNzdcMUJISlwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFcMjUxXDI1M1wyNTRcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMXR4elwzNzdcMjEwLjQ2XDM3N1wyIiI3PVw3N1wzNzciIFwKKyAgIjg+XDc3XDM3N1wyMTAuNDZcMzc3XDF0eHpcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMVNYWVwzNzdcMjA2LjQ2XDM3NyIgXAorICAiXDFcMjUxXDI1M1wyNTRcMzc3XDIyNFwzNTBcMzU0XDM0MFwzNzdcMUdMTlwzNzdcMjE3LjQ2XDM3N1wxXDMyMFwzMjIiIFwKKyAgIlwzMjJcMzc3XDIyMlwzNTBcMzU0XDM0MFwzNzdcMlwyNzZcMzAwXDMwMVwzNzc1Oz1cMzc3XDIyMS40NlwzNzdcMUBGIiBcCisgICJHXDM3N1wyMzBcMzUwXDM1NFwzNDBcMzc3XDIwNC40NlwzNzdcMVNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzMTIiIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMVwyMzVcMjM3XDI0MFwzNzdcMjA0LjQ2XDM3N1wxXDI2NVwyNjdcMjcwXDM3N1wyMzZcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMWtwcVwzNzdcMjA0LjQ2XDM3N1wxXDM0NlwzNDdcMzQ3XDM3N1wyMDZcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMVwyNDZcMjUxXDI1MlwzNzdcMjA0LjQ2XDM3N1wxQUZIXDM3N1wyMjVcMzUwXDM1NFwzNDBcMzc3XDJcMjMyXDIzNSIgXAorICAiXDIzNlwzNzcwNjhcMzc3XDIxNi40NlwzNzdcMiIiMDY4XDM3N1wyMzJcMjM1XDIzNlwzNzdcMjI1XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFYXV5cMzc3XDIwNS40NlwzNzdcMUxRU1wzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNCIgXAorICAiNlwzNzdcMVwzMTZcMzE3XDMyMFwzNzdcMjIzXDM1MFwzNTRcMzQwXDM3N1wyXDMyNFwzMjVcMzI1XDM3N05TVVwzNzciIFwKKyAgIlwyMjAuNDZcMzc3XDIiIjA2OFwzNzdcMzIxXDMyMlwzMjNcMzc3XDIyN1wzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3NyIgXAorICAiXDFTWFlcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQiIFwKKyAgIi40NlwzNzdcMVwyNjVcMjY3XDI3MFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2IiBcCisgICJcMzQ3XDM0N1wzNzdcMjA3XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMDQuNDZcMzc3XDFcMjI2XDIzMVwyMzJcMzc3IiBcCisgICJcMjI1XDM1MFwzNTRcMzQwXDM3N1wyXDMxN1wzMjBcMzIwXDM3N2BlZlwzNzdcMjE0LjQ2XDM3N1wyYmdoXDM3N1wzMTciIFwKKyAgIlwzMjFcMzIxXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDFfZGVcMzc3XDIwNC40NlwzNzdcMjpAQlwzNzdcMzMyXDMzMyIgXAorICAiXDMzNFwzNzdcMjI1XDM1MFwzNTRcMzQwXDM3N1wxR0xOXDM3N1wyMTcuNDZcMzc3XDFcMzE2XDMxN1wzMjBcMzc3XDIyNSIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wyXDIzNlwyNDFcMjQyXDM3N0JHSVwzNzdcMjE0LjQ2XDM3N1wzIiI4Plw3N1wzNzd+XDIwMSIgXAorICAiXDIwMlwzNzdcMzM1XDMzNlwzMzdcMzc3XDIzMFwzNTBcMzU0XDM0MFwzNzdcMjA0LjQ2XDM3N1wxU1hZXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzEyXDM1MFwzNTRcMzQwXDM3N1wxXDIzNVwyMzdcMjQwXDM3N1wyMDQuNDZcMzc3XDFcMjY1IiBcCisgICJcMjY3XDI3MFwzNzdcMjM2XDM1MFwzNTRcMzQwXDM3N1wxa3BxXDM3N1wyMDQuNDZcMzc3XDFcMzQ2XDM0N1wzNDdcMzc3IiBcCisgICJcMjA3XDM1MFwzNTRcMzQwXDM3N1wxXDI1NFwyNTdcMjU3XDM3N1wyMDQuNDZcMzc3XDIiIjg+XDc3XDM3N1wzNTJcMzU0IiBcCisgICJcMzUwXDM3N1wyMjZcMzUwXDM1NFwzNDBcMzc3XDNcMzExXDMxMlwzMTNcMzc3XDIwMFwyMDRcMjA1XDM3N0VKTFwzNzciIFwKKyAgIlwyMDYuNDZcMzc3XDNFSkxcMzc3XDIwM1wyMDdcMjEwXDM3N1wzMTNcMzE0XDMxNVwzNzdcMjMwXDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDFfZGVcMzc3XDIwMi40NlwzNzdcMy81N1wzNzdmamxcMzc3XDM0MlwzNDNcMzQzXDM3N1wyMjZcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMVNYWVwzNzdcMjE3PEJDXDM3N1wxXDMwN1wzMTFcMzExXDM3N1wyMjdcMzUwXDM1NFwzNDBcMzc3XDQiIFwKKyAgIlwyNzVcMjc3XDMwMFwzNzd+XDIwMVwyMDJcMzc3T1RWXDM3NzA2OFwzNzdcMjA0LjQ2XDM3N1w0IiIzOTtcMzc3UVZYIiBcCisgICJcMzc3XDIwMVwyMDRcMjA2XDM3N1wyNzBcMjcyXDI3MlwzNzdcMjMzXDM1MFwzNTRcMzQwXDM3N1wyMDQuNDZcMzc3XDEiIFwKKyAgIlNYWVwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDIzNFwzNTBcMzU0XDM0MFwzNzdcMiIgXAorICAiXDM0NVwzNDZcMzQ2XDM3N1wzMTdcMzIxXDMyMVwzNzdcMjAyXDI3NVwyNzdcMzAwXDM3N1wyXDMxN1wzMjFcMzIxXDM3NyIgXAorICAiXDM0NVwzNDZcMzQ2XDM3N1wyMzNcMzUwXDM1NFwzNDBcMzc3XDRcMzAyXDMwNFwzMDVcMzc3XDI1NVwyNTdcMjYwXDM3NyIgXAorICAiXDMwMVwzMDJcMzAzXDM3N1wzNDZcMzQ2XDM0N1wzNzdcMzA0XDM1MFwzNTRcMzQwXDM3N1w0XDM0NlwzNDdcMzQ3XDM3NyIgXAorICAiXDMyN1wzMzBcMzMwXDM3N1wzMzVcMzM2XDMzN1wzNzdcMzQ3XDM1MFwzNTBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0IiBcCisgICJcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3NyIgXAorICAiXDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTAiIFwKKyAgIlwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwIiBcCisgICJcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3NyIgXAorICAiXDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTQiIFwKKyAgIlwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3IiBcCisgICJcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MCIgXAorICAiXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDAiIFwKKyAgIlwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3IiBcCisgICJcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NCIgXAorICAiXDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzciIFwKKyAgIlwzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwIiBcCisgICJcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MCIgXAorICAiXDM3N1wzNzdcMzUwXDM1NFwzNDBcMzc3XDM3N1wzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wzNzciIFwKKyAgIlwzNTBcMzU0XDM0MFwzNzdcMzc3XDM1MFwzNTRcMzQwXDM3N1wyNDZcMzUwXDM1NFwzNDBcMzc3IikKKworCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiYXBwZW5kIGIvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzNlZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kX3Bva3kgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCmRpZmYgLS1naXQgYS9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvZmlsZXMvaW5pdCBiL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDBlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvZmlsZXMvaW5pdApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKworIyBNb3VudCB0aGUgTGludXgga2VybmVsIHZpcnR1YWwgZmlsZXN5c3RlbXMKK21vdW50IG5vbmUgLXQgcHJvYyAvcHJvYworbW91bnQgbm9uZSAtdCBzeXNmcyAvc3lzCisKKyMgRW5zdXJlIGRldnRtcGZzIGlzIG1vdW50ZWQsIGl0IG11c3QgYmUgZG9uZSBtYW51YWxseSB3aXRoIGluaXRyYW1mcworbW91bnQgbm9uZSAtdCBkZXZ0bXBmcyAvZGV2CisKKyMgU2V0dXAgUFRZIGluZnJhc3RydWN0dXJlCitta2RpciAvZGV2L3B0cworbW91bnQgbm9uZSAtdCBkZXZwdHMgL2Rldi9wdHMKKworaWZ1cCBsbworCisjIEFsbG93IGZvciBkaXN0cm8gb3IgbG9jYWwgY3VzdG9taXphdGlvbnMKK2lmIFsgLWYgL2V0Yy9yYy5sb2NhbCBdIDsgdGhlbgorCS4gL2V0Yy9yYy5sb2NhbAorZmkKKworIyBCZWNvbWUgc2Vzc2lvbiBsZWFkZXIgYW5kIHRyeSB0byBmaW5kIGEgcmVhbCB0dHkgKGUuZy4gdHR5UzApCit3aGlsZSB0cnVlOyBkbworCXNldHNpZCBjdHR5aGFjayBzaAorCWVjaG8gIkNvbnNvbGUgc2ggZXhpdGVkIHdpdGggJD8sIHJlc3Bhd25pbmcuLi4iCisJc2xlZXAgMQorZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS15b2N0by9yZWNpcGVzLWNvcmUvdGlueS1pbml0L2ZpbGVzL3JjLmxvY2FsLnNhbXBsZSBiL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMTk4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC9maWxlcy9yYy5sb2NhbC5zYW1wbGUKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKKyMgU3RhcnQgc2VydmljZXMgYW5kIGN1c3RvbWl6ZSB0aGUgYm9vdCBwcm9jZXNzIGhlcmUuCitlY2hvICJSdW5uaW5nIC9ldGMvcmMubG9jYWwuLi4iCisKKyMgVXNlIGluaXQgc2NyaXB0cyBpbmNsdWRlZCB3aXRoIHBhY2thZ2VzIHN1Y2ggYXMgZHJvcGJlYXIKKyMvZXRjL2luaXQuZC9kcm9wYmVhciBzdGFydAorCisjIFNwYXduIGEgZ2V0dHkgbWFudWFsbHkKKyNzZXRzaWQgL3NiaW4vZ2V0dHkgMTE1MjAwIHR0eVMyCisKKyMgUHJpbnQgYSBiYW5uZXIKKyNlY2hvICJZb3UgYXJlIHJ1bm5pbmcgYSBwb2t5LXRpbnkgaW1hZ2UgYnJvdWdodCB0byB5b3UgYnkgdGhlIFlvY3RvIFByb2plY3QuIgorCisjIFNldHVwIGEgZGVidWdnaW5nIGVudmlyb25tZW50CisjbWtkaXIgL2RlYnVnZnMKKyNtb3VudCBub25lIC10IGRlYnVnZnMgL2RlYnVnZnMKKworIyBMb2FkIG1vZHVsZXMgKG5vdGU6IGxpbnV4LXlvY3RvLXRpbnkgZG9lcyBub3QgaGF2ZSBtb2R1bGUgc3VwcG9ydCBieSBkZWZhdWx0KQorI21vZHByb2JlIHlvdXJkcml2ZXIKKworIyBETyBOT1QgcnVuIGFueSBsb25nIHJ1bm5pbmcgdGFza3Mgb3IgbG9vcHMgYXMgdGhlc2Ugd2lsbCBkZWxheQorIyB0aGUgL2luaXQgc2NyaXB0IGFuZCB0aGUgY29uc29sZSBzaGVsbC4KZGlmZiAtLWdpdCBhL21ldGEteW9jdG8vcmVjaXBlcy1jb3JlL3RpbnktaW5pdC90aW55LWluaXQuYmIgYi9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGUzNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhLXlvY3RvL3JlY2lwZXMtY29yZS90aW55LWluaXQvdGlueS1pbml0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUG9reS10aW55IGluaXQiCitERVNDUklQVElPTiA9ICJCYXNpYyBpbml0IHN5c3RlbSBmb3IgcG9reS10aW55IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjIiCisKK1JERVBFTkRTXyR7UE59ID0gImJ1c3lib3giCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQgXAorCSAgIGZpbGU6Ly9yYy5sb2NhbC5zYW1wbGUgXAorCSAgIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9yYy5sb2NhbC5zYW1wbGUgJHtEfSR7c3lzY29uZmRpcn0KK30KKworRklMRVNfJHtQTn0gPSAiL2luaXQgJHtzeXNjb25mZGlyfS9yYy5sb2NhbC5zYW1wbGUiCmRpZmYgLS1naXQgYS9tZXRhL0NPUFlJTkcuR1BMdjIgYi9tZXRhL0NPUFlJTkcuR1BMdjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvQ09QWUlORy5HUEx2MgpAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL0NPUFlJTkcuTUlUIGIvbWV0YS9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjk1MGRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9DT1BZSU5HLk1JVApAQCAtMCwwICsxLDE3IEBACitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWE3YzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYWxsYXJjaC5iYmNsYXNzCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgcmVjaXBlcy9kYXRhIGZpbGVzICh1c2FsbHkgc2NyaXB0cykKKyMKKworIyBFeHBhbmQgU1RBR0lOR19ESVJfSE9TVCBzaW5jZSBmb3IgY3Jvc3MtY2FuYWRpYW4vbmF0aXZlL25hdGl2ZXNkaywgdGhpcyB3aWxsCisjIHBvaW50IGVsc2V3aGVyZSBhZnRlciB0aGVzZSBjaGFuZ2VzLgorU1RBR0lOR19ESVJfSE9TVCA6PSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworUEFDS0FHRV9BUkNIID0gImFsbCIKKworcHl0aG9uICgpIHsKKyAgICAjIEFsbG93IHRoaXMgY2xhc3MgdG8gYmUgaW5jbHVkZWQgYnV0IG92ZXJyaWRkZW4gLSBvbmx5IHNldAorICAgICMgdGhlIHZhbHVlcyBpZiB3ZSdyZSBzdGlsbCAiYWxsIiBwYWNrYWdlIGFyY2guCisgICAgaWYgZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpID09ICJhbGwiOgorICAgICAgICAjIE5vIG5lZWQgZm9yIHZpcnR1YWwvbGliYyBvciBhIGNyb3NzIGNvbXBpbGVyCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX0RFRkFVTFRfREVQUyIsIjEiKQorCisgICAgICAgICMgU2V0IHRoZXNlIHRvIGEgY29tbW9uIHNldCBvZiB2YWx1ZXMsIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGVtIG90aGVyIHRoYXQgZm9yIFdPUktESVIgZGlyZWN0b3J5CisgICAgICAgICMgbmFtaW5nIGFueXdheQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0FSQ0giLCAiYWxsYXJjaCIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0NDX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfTERfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9BU19BUkNIIiwgIm5vbmUiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0ZQVSIsICIiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1BSRUZJWCIsICIiKQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9FWFRSQV9BUkNIUyIsICIiKQorICAgICAgICBkLnNldFZhcigiU0RLX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJTREtfQ0NfQVJDSCIsICJub25lIikKKworICAgICAgICAjIEF2b2lkIHRoaXMgYmVpbmcgdW5uZWNlc3NhcmlseSBkaWZmZXJlbnQgZHVlIHRvIG51YW5jZXMgb2YKKyAgICAgICAgIyB0aGUgdGFyZ2V0IG1hY2hpbmUgdGhhdCBhcmVuJ3QgaW1wb3J0YW50IGZvciAiYWxsIiBhcmNoCisgICAgICAgICMgcGFja2FnZXMuCisgICAgICAgIGQuc2V0VmFyKCJMREZMQUdTIiwgIiIpCisKKyAgICAgICAgIyBObyBuZWVkIHRvIGRvIHNoYXJlZCBsaWJyYXJ5IHByb2Nlc3Npbmcgb3IgZGVidWcgc3ltYm9sIGhhbmRsaW5nCisgICAgICAgIGQuc2V0VmFyKCJFWENMVURFX0ZST01fU0hMSUJTIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUIiwgIjEiKQorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9QQUNLQUdFX1NUUklQIiwgIjEiKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgYmIuZXJyb3IoIlBsZWFzZSBlbnN1cmUgcmVjaXBlICVzIHNldHMgUEFDS0FHRV9BUkNIIGJlZm9yZSBpbmhlcml0IHBhY2thZ2Vncm91cCIgJSBkLmdldFZhcigiRklMRSIsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWQ3MDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYXJjaGl2ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM4NSBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBiYmNsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIGFyY2hpdmUgZm9yOgorIyAxKSBvcmlnaW5hbCAob3IgdW5wYWNrZWQpIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gIm9yaWdpbmFsIgorIyAyKSBwYXRjaGVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gInBhdGNoZWQiIChkZWZhdWx0KQorIyAzKSBjb25maWd1cmVkIHNvdXJjZTogQVJDSElWRVJfTU9ERVtzcmNdID0gImNvbmZpZ3VyZWQiCisjIDQpIFRoZSBwYXRjaGVzIGJldHdlZW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaDoKKyMgICAgQVJDSElWRVJfTU9ERVtkaWZmXSA9ICIxIgorIyAgICBBbmQgeW91IGNhbiBzZXQgdGhlIG9uZSB0aGF0IHlvdSdkIGxpa2UgdG8gZXhjbHVkZSBmcm9tIHRoZSBkaWZmOgorIyAgICBBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorIyA1KSBUaGUgZW52aXJvbm1lbnQgZGF0YSwgc2ltaWxhciB0byAnYml0YmFrZSAtZSByZWNpcGUnOgorIyAgICBBUkNISVZFUl9NT0RFW2R1bXBkYXRhXSA9ICIxIgorIyA2KSBUaGUgcmVjaXBlICguYmIgYW5kIC5pbmMpOiBBUkNISVZFUl9NT0RFW3JlY2lwZV0gPSAiMSIKKyMgNykgV2hldGhlciBvdXRwdXQgdGhlIC5zcmMucnBtIHBhY2thZ2U6CisjICAgIEFSQ0hJVkVSX01PREVbc3JwbV0gPSAiMSIKKyMgOCkgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgcmVjaXBlIHdob3NlIGxpY2Vuc2UgaW4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHdpbGwgYmUgaW5jbHVkZWQsIGFuZCBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgd2lsbCBiZSBleGNsdWRlZC4KKyMgICAgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID0gJ0dQTCogTEdQTConCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA9ICdDTE9TRUQgUHJvcHJpZXRhcnknCisjIDkpIFRoZSByZWNpcGUgdHlwZSB0aGF0IHdpbGwgYmUgYXJjaGl2ZWQ6CisjICAgIENPUFlMRUZUX1JFQ0lQRV9UWVBFUyA9ICd0YXJnZXQnCisjCisKKyMgRG9uJ3QgZmlsdGVyIHRoZSBsaWNlbnNlIGJ5IGRlZmF1bHQKK0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSA/PSAnJworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFID89ICcnCisjIENyZWF0ZSBhcmNoaXZlIGZvciBhbGwgdGhlIHJlY2lwZSB0eXBlcworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQgbmF0aXZlIG5hdGl2ZXNkayBjcm9zcyBjcm9zc3NkayBjcm9zcy1jYW5hZGlhbicKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0FSQ0hJVkVSX01PREVbc3JwbV0gPz0gIjAiCitBUkNISVZFUl9NT0RFW3NyY10gPz0gInBhdGNoZWQiCitBUkNISVZFUl9NT0RFW2RpZmZdID89ICIwIgorQVJDSElWRVJfTU9ERVtkaWZmLWV4Y2x1ZGVdID89ICIucGMgYXV0b200dGUuY2FjaGUgcGF0Y2hlcyIKK0FSQ0hJVkVSX01PREVbZHVtcGRhdGFdID89ICIwIgorQVJDSElWRVJfTU9ERVtyZWNpcGVdID89ICIwIgorCitERVBMT1lfRElSX1NSQyA/PSAiJHtERVBMT1lfRElSfS9zb3VyY2VzIgorQVJDSElWRVJfVE9QRElSID89ICIke1dPUktESVJ9L2RlcGxveS1zb3VyY2VzIgorQVJDSElWRVJfT1VURElSID0gIiR7QVJDSElWRVJfVE9QRElSfS8ke1RBUkdFVF9TWVN9LyR7UEZ9LyIKK0FSQ0hJVkVSX1dPUktESVIgPSAiJHtXT1JLRElSfS9hcmNoaXZlci13b3JrLyIKKworZG9fZHVtcGRhdGFbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9IgorZG9fYXJfcmVjaXBlW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSIKK2RvX2FyX29yaWdpbmFsW2RpcnNdID0gIiR7QVJDSElWRVJfT1VURElSfSAke0FSQ0hJVkVSX1dPUktESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19kZXBsb3lfYWxsX2FyY2hpdmVzW2RpcnNdID0gIiR7V09SS0RJUn0iCisKKyMgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZvciB0aGUgc2hlbGwgc2NyaXB0IHRvIHVzZSBpdAorCisKK3B5dGhvbiAoKSB7CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaW5jbHVkZWQsIHJlYXNvbiA9IGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpCisgICAgaWYgbm90IGluY2x1ZGVkOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYXJjaGl2ZXI6ICVzIGlzIGV4Y2x1ZGVkOiAlcycgJSAocG4sIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdhcmNoaXZlcjogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwbiwgcmVhc29uKSkKKworICAgIGFyX3NyYyA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKQorICAgIGFyX2R1bXBkYXRhID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2R1bXBkYXRhJywgVHJ1ZSkKKyAgICBhcl9yZWNpcGUgPSBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAncmVjaXBlJywgVHJ1ZSkKKworICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9vcmlnaW5hbCcgJSBwbikKKyAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3BhdGNoZWQnICUgcG4pCisgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAjIFdlIGNhbid0IHVzZSAiYWRkdGFzayBkb19hcl9jb25maWd1cmVkIGFmdGVyIGRvX2NvbmZpZ3VyZSIgc2luY2UgaXQKKyAgICAgICAgIyB3aWxsIGNhdXNlIHRoZSBkZXB0YXNrIG9mIGRvX3BvcHVsYXRlX3N5c3Jvb3QgdG8gcnVuIG5vdCBtYXR0ZXIgd2hhdAorICAgICAgICAjIGFyY2hpdmVzIHdlIG5lZWQsIHNvIHdlIGFkZCB0aGUgZGVwZW5kcyBoZXJlLgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2FyX2NvbmZpZ3VyZWQnLCAnZGVwZW5kcycsICcgJXM6ZG9fY29uZmlndXJlJyAlIHBuKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9jb25maWd1cmVkJyAlIHBuKQorICAgIGVsaWYgYXJfc3JjOgorICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBBUkNISVZFUl9NT0RFW3NyY106ICVzIiAlIGFyX3NyYykKKworICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXBsb3lfYXJjaGl2ZXMnLCAnZGVwZW5kcycsICcgJXM6ZG9fZHVtcGRhdGEnICUgcG4pCisKKyAgICBpZiBhcl9yZWNpcGUgPT0gIjEiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19hcl9yZWNpcGUnICUgcG4pCisKKyAgICAjIE91dHB1dCB0aGUgc3JwbSBwYWNrYWdlCisgICAgYXJfc3JwbSA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkKKyAgICBpZiBhcl9zcnBtID09ICIxIjoKKyAgICAgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJycgYW5kIGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkgPT0gJ3JwbSc6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19wYWNrYWdlX3dyaXRlX3JwbScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX2R1bXBkYXRhID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2R1bXBkYXRhJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfcmVjaXBlID09ICIxIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3JlY2lwZScgJSBwbikKKyAgICAgICAgICAgIGlmIGFyX3NyYyA9PSAib3JpZ2luYWwiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfb3JpZ2luYWwnICUgcG4pCisgICAgICAgICAgICBlbGlmIGFyX3NyYyA9PSAicGF0Y2hlZCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9wYXRjaGVkJyAlIHBuKQorICAgICAgICAgICAgZWxpZiBhcl9zcmMgPT0gImNvbmZpZ3VyZWQiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfY29uZmlndXJlZCcgJSBwbikKKworICAgICMgVGhlIGdjYyBzdGFmZiB1c2VzIHNoYXJlZCBzb3VyY2UKKyAgICBmbGFnID0gZC5nZXRWYXJGbGFnKCJkb191bnBhY2siLCAic3RhbXAtYmFzZSIsIFRydWUpCisgICAgaWYgZmxhZzoKKyAgICAgICAgaWYgYXJfc3JjIGluIFsgJ29yaWdpbmFsJywgJ3BhdGNoZWQnIF06CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX1RPUERJUicsIFRydWUpLCAnd29yay1zaGFyZWQnKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIGFyX291dGRpcikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlJywgZmxhZykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9wYXRjaGVkJywgJ3N0YW1wLWJhc2UnLCBmbGFnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAnc3RhbXAtYmFzZScsIGZsYWcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfb3JpZ2luYWwnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFja19hbmRfcGF0Y2gnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX3BhdGNoZWQnLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUE4gUEYgQVJDSElWRVJfT1VURElSIFdPUktESVInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2NyZWF0ZV9kaWZmX2d6JywgJ3ZhcmRlcHNleGNsdWRlJywgJ1BGJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdjcmVhdGVfdGFyYmFsbCcsICd2YXJkZXBzZXhjbHVkZScsICdQRicpCisKKyAgICAgICAgZmxhZ19jbGVhbiA9IGQuZ2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBUcnVlKQorICAgICAgICBpZiBmbGFnX2NsZWFuOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfcGF0Y2hlZCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICdzdGFtcC1iYXNlLWNsZWFuJywgZmxhZ19jbGVhbikKK30KKworIyBUYWtlIGFsbCB0aGUgc291cmNlcyBmb3IgYSByZWNpcGUgYW5kIHB1dHMgdGhlbSBpbiBXT1JLRElSL2FyY2hpdmVyLXdvcmsvLgorIyBGaWxlcyBpbiBTUkNfVVJJIGFyZSBjb3BpZWQgZGlyZWN0bHksIGFueXRoaW5nIHRoYXQncyBhIGRpcmVjdG9yeQorIyAoZS5nLiBnaXQgcmVwb3NpdG9yaWVzKSBpcyAidW5wYWNrZWQiIGFuZCB0aGVuIHB1dCBpbnRvIGEgdGFyYmFsbC4KK3B5dGhvbiBkb19hcl9vcmlnaW5hbCgpIHsKKworICAgIGltcG9ydCBzaHV0aWwsIHRhcmZpbGUsIHRlbXBmaWxlCisKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JjJywgVHJ1ZSkgIT0gIm9yaWdpbmFsIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIG9yaWdpbmFsIHNvdXJjZS4uLicpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpLnJzdHJpcCgiLyIpOworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbCk6CisgICAgICAgICAgICBzaHV0aWwuY29weShsb2NhbCwgYXJfb3V0ZGlyKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIobG9jYWwpOgorICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorICAgICAgICAgICAgZmV0Y2gudW5wYWNrKHRtcGRpciwgKHVybCwpKQorCisgICAgICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgICAgICAjIFdlIGVsaW1pbmF0ZSBhbnkgQVVUT0lOQysgaW4gdGhlIHJldmlzaW9uLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNyY19yZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKS5yZXBsYWNlKCdBVVRPSU5DKycsJycpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3JjX3JldiA9ICdOT1JFVicKKyAgICAgICAgICAgIHRhcm5hbWUgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCBiYXNlbmFtZSArICcuJyArIHNyY19yZXYgKyAnLnRhci5neicpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgJ3c6Z3onKQorICAgICAgICAgICAgdGFyLmFkZCgnLicpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgIyBFbWl0IHBhdGNoIHNlcmllcyBmaWxlcyBmb3IgJ29yaWdpbmFsJworICAgIGJiLm5vdGUoJ1dyaXRpbmcgcGF0Y2ggc2VyaWVzIGZpbGVzLi4uJykKKyAgICBmb3IgcGF0Y2ggaW4gc3JjX3BhdGNoZXMoZCk6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJ3Nlcmllcy5zdWJkaXIuJXMnICUgcGF0Y2hkaXIucmVwbGFjZSgnLycsICdfJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXJpZXMgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCitweXRob24gZG9fYXJfcGF0Y2hlZCgpIHsKKworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSAhPSAncGF0Y2hlZCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBHZXQgdGhlIEFSQ0hJVkVSX09VVERJUiBiZWZvcmUgd2UgcmVzZXQgdGhlIFdPUktESVIKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCdBcmNoaXZpbmcgdGhlIHBhdGNoZWQgc291cmNlLi4uJykKKyAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgIyBUaGUgZ2NjIHN0YWZmIHVzZXMgc2hhcmVkIHNvdXJjZQorICAgIGZsYWcgPSBkLmdldFZhckZsYWcoJ2RvX3VucGFjaycsICdzdGFtcC1iYXNlJywgVHJ1ZSkKKyAgICBpZiBmbGFnOgorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBkLmdldFZhcignUycsIFRydWUpLCAncGF0Y2hlZCcsIGFyX291dGRpciwgJ2djYycpCisgICAgZWxzZToKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgJ3BhdGNoZWQnLCBhcl9vdXRkaXIpCit9CisKK3B5dGhvbiBkb19hcl9jb25maWd1cmVkKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSA9PSAnY29uZmlndXJlZCc6CisgICAgICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgY29uZmlndXJlZCBzb3VyY2UuLi4nKQorICAgICAgICAjIFRoZSBsaWJ0b29sLW5hdGl2ZSdzIGRvX2NvbmZpZ3VyZSB3aWxsIHJlbW92ZSB0aGUKKyAgICAgICAgIyAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9saWJ0b29sLm00LCBzbyB3ZSBjYW4ndCByZS1ydW4gdGhlCisgICAgICAgICMgZG9fY29uZmlndXJlLCB3ZSBhcmNoaXZlIHRoZSBhbHJlYWR5IGNvbmZpZ3VyZWQgJHtTfSB0bworICAgICAgICAjIGluc3RlYWQgb2YuCisgICAgICAgIGlmIGQuZ2V0VmFyKCdQTicsIFRydWUpICE9ICdsaWJ0b29sLW5hdGl2ZSc6CisgICAgICAgICAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX2NvbmZpZ3VyZSBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgICAgICAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjbWFrZScsIGQpOgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZ2VuZXJhdGVfdG9vbGNoYWluX2ZpbGUnLCBkKQorICAgICAgICAgICAgcHJlZnVuY3MgPSBkLmdldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwcmVmdW5jcycsIFRydWUpCisgICAgICAgICAgICBmb3IgZnVuYyBpbiAocHJlZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSI6CisgICAgICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBkKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19jb25maWd1cmUnLCBkKQorICAgICAgICAgICAgcG9zdGZ1bmNzID0gZC5nZXRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAncG9zdGZ1bmNzJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBmdW5jIGluIChwb3N0ZnVuY3Mgb3IgJycpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyAhPSAiZG9fcWFfY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAgICAgYnVpbGRkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgICAgIGlmIHNyY2RpciAhPSBidWlsZGRpcjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGJ1aWxkZGlyKToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKGJ1aWxkZGlyLCBvcy5wYXRoLmpvaW4oc3JjZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICdidWlsZC4lcy5hcl9jb25maWd1cmVkJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKKyAgICAgICAgY3JlYXRlX3RhcmJhbGwoZCwgc3JjZGlyLCAnY29uZmlndXJlZCcsIGFyX291dGRpcikKK30KKworZGVmIGNyZWF0ZV90YXJiYWxsKGQsIHNyY2Rpciwgc3VmZml4LCBhcl9vdXRkaXIsIHBmPU5vbmUpOgorICAgICIiIgorICAgIGNyZWF0ZSB0aGUgdGFyYmFsbCBmcm9tIHNyY2RpcgorICAgICIiIgorICAgIGltcG9ydCB0YXJmaWxlCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXJfb3V0ZGlyKQorICAgIGlmIHBmOgorICAgICAgICB0YXJuYW1lID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLSVzLnRhci5neicgJSAocGYsIHN1ZmZpeCkpCisgICAgZWxzZToKKyAgICAgICAgdGFybmFtZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy0lcy50YXIuZ3onICUgXAorICAgICAgICAgICAgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBzdWZmaXgpKQorCisgICAgc3JjZGlyID0gc3JjZGlyLnJzdHJpcCgnLycpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShzcmNkaXIpCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyY2RpcikKKyAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgIGJiLm5vdGUoJ0NyZWF0aW5nICVzJyAlIHRhcm5hbWUpCisgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsICd3Omd6JykKKyAgICB0YXIuYWRkKGJhc2VuYW1lKQorICAgIHRhci5jbG9zZSgpCisKKyMgY3JlYXRpbmcgLmRpZmYuZ3ogYmV0d2VlbiBzb3VyY2Uub3JpZyBhbmQgc291cmNlCitkZWYgY3JlYXRlX2RpZmZfZ3ooZCwgc3JjX29yaWcsIHNyYywgYXJfb3V0ZGlyKToKKworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmMpIG9yIG5vdCBvcy5wYXRoLmlzZGlyKHNyY19vcmlnKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFRoZSBkaWZmIC0tZXhjbHVkZSBjYW4ndCBleGNsdWRlIHRoZSBmaWxlIHdpdGggcGF0aCwgc28gd2UgY29weQorICAgICMgdGhlIHBhdGNoZWQgc291cmNlLCBhbmQgcmVtb3ZlIHRoZSBmaWxlcyB0aGF0IHdlJ2QgbGlrZSB0bworICAgICMgZXhjbHVkZS4KKyAgICBzcmNfcGF0Y2hlZCA9IHNyYyArICcucGF0Y2hlZCcKKyAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3JjLCBzcmNfcGF0Y2hlZCkKKyAgICBmb3IgaSBpbiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZi1leGNsdWRlJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfb3JpZywgaSksIHJlY3Vyc2U9VHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzcmNfcGF0Y2hlZCwgaSksIHJlY3Vyc2U9VHJ1ZSkKKworICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoc3JjKQorICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzcmMpCisgICAgb3MuY2hkaXIoZGlybmFtZSkKKyAgICBvdXRfZmlsZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICclcy1kaWZmLmd6JyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGRpZmZfY21kID0gJ2RpZmYgLU5hdXIgJXMub3JpZyAlcy5wYXRjaGVkIHwgZ3ppcCAtYyA+ICVzJyAlIChiYXNlbmFtZSwgYmFzZW5hbWUsIG91dF9maWxlKQorICAgIHN1YnByb2Nlc3MuY2FsbChkaWZmX2NtZCwgc2hlbGw9VHJ1ZSkKKyAgICBiYi51dGlscy5yZW1vdmUoc3JjX3BhdGNoZWQsIHJlY3Vyc2U9VHJ1ZSkKKworIyBSdW4gZG9fdW5wYWNrIGFuZCBkb19wYXRjaAorcHl0aG9uIGRvX3VucGFja19hbmRfcGF0Y2goKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICBbICdwYXRjaGVkJywgJ2NvbmZpZ3VyZWQnXSBhbmQgXAorICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ2RpZmYnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybgorCisgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisKKyAgICAjIENoYW5nZSB0aGUgV09SS0RJUiB0byBtYWtlIGRvX3VucGFjayBkb19wYXRjaCBydW4gaW4gYW5vdGhlciBkaXIuCisgICAgZC5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignQVJDSElWRVJfV09SS0RJUicsIFRydWUpKQorCisgICAgIyBUaGUgY2hhbmdlZCAnV09SS0RJUicgYWxzbyBjYXN1ZWQgJ0InIGNoYW5nZWQsIGNyZWF0ZSBkaXIgJ0InIGZvciB0aGUKKyAgICAjIHBvc3NpYmx5IHJlcXVpcmluZyBvZiB0aGUgZm9sbG93aW5nIHRhc2tzIChzdWNoIGFzIHNvbWUgcmVjaXBlcydzCisgICAgIyBkb19wYXRjaCByZXF1aXJlZCAnQicgZXhpc3RlZCkuCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCdCJywgVHJ1ZSkpCisKKyAgICAjIFRoZSBrZXJuZWwgc291cmNlIGlzIHJlYWR5IGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgZCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgZCkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19rZXJuZWxfY2hlY2tvdXQnLCBkKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3ZhbGlkYXRlX2JyYW5jaGVzJywgZCkKKyAgICBlbHNlOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3VucGFjaycsIGQpCisKKyAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3IgY3JlYXRpbmcgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgc3JjID0gZC5nZXRWYXIoJ1MnLCBUcnVlKS5yc3RyaXAoJy8nKQorICAgICAgICBzcmNfb3JpZyA9ICclcy5vcmlnJyAlIHNyYworICAgICAgICBvZS5wYXRoLmNvcHl0cmVlKHNyYywgc3JjX29yaWcpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19wYXRjaCcsIGQpCisgICAgIyBDcmVhdGUgdGhlIHBhdGNoZXMKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpID09ICcxJzoKKyAgICAgICAgYmIubm90ZSgnQ3JlYXRpbmcgZGlmZiBnei4uLicpCisgICAgICAgIGNyZWF0ZV9kaWZmX2d6KGQsIHNyY19vcmlnLCBzcmMsIGFyX291dGRpcikKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNyY19vcmlnLCByZWN1cnNlPVRydWUpCit9CisKK3B5dGhvbiBkb19hcl9yZWNpcGUgKCkgeworICAgICIiIgorICAgIGFyY2hpdmUgdGhlIHJlY2lwZSwgaW5jbHVkaW5nIC5iYiBhbmQgLmluYy4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICByZXF1aXJlX3JlID0gcmUuY29tcGlsZSggciJyZXF1aXJlXHMrKC4rKSIgKQorICAgIGluY2x1ZGVfcmUgPSByZS5jb21waWxlKCByImluY2x1ZGVccysoLispIiApCisgICAgYmJmaWxlID0gZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIG91dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBcCisgICAgICAgICAgICAnJXMtcmVjaXBlJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgc2h1dGlsLmNvcHkoYmJmaWxlLCBvdXRkaXIpCisKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGJiZmlsZSkKKyAgICBiYnBhdGggPSAnJXM6JXMnICUgKGRpcm5hbWUsIGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKSkKKyAgICBmID0gb3BlbihiYmZpbGUsICdyJykKKyAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICBpbmNmaWxlID0gTm9uZQorICAgICAgICBpZiByZXF1aXJlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IHJlcXVpcmVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgZWxpZiBpbmNsdWRlX3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgaW5jZmlsZSA9IGluY2x1ZGVfcmUubWF0Y2gobGluZSkuZ3JvdXAoMSkKKyAgICAgICAgaWYgaW5jZmlsZToKKyAgICAgICAgICAgIGluY2ZpbGUgPSBiYi5kYXRhLmV4cGFuZChpbmNmaWxlLCBkKQorICAgICAgICAgICAgaW5jZmlsZSA9IGJiLnV0aWxzLndoaWNoKGJicGF0aCwgaW5jZmlsZSkKKyAgICAgICAgICAgIGlmIGluY2ZpbGU6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkoaW5jZmlsZSwgb3V0ZGlyKQorCisgICAgY3JlYXRlX3RhcmJhbGwoZCwgb3V0ZGlyLCAncmVjaXBlJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpKQorICAgIGJiLnV0aWxzLnJlbW92ZShvdXRkaXIsIHJlY3Vyc2U9VHJ1ZSkKK30KKworcHl0aG9uIGRvX2R1bXBkYXRhICgpIHsKKyAgICAiIiIKKyAgICBkdW1wIGVudmlyb25tZW50IGRhdGEgdG8gJHtQRn0tc2hvd2RhdGEuZHVtcAorICAgICIiIgorCisgICAgZHVtcGZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpLCBcCisgICAgICAgICclcy1zaG93ZGF0YS5kdW1wJyAlIGQuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgIGJiLm5vdGUoJ0R1bXBpbmcgbWV0YWRhdGEgaW50byAlcycgJSBkdW1wZmlsZSkKKyAgICBmID0gb3BlbihkdW1wZmlsZSwgJ3cnKQorICAgICMgZW1pdCB2YXJpYWJsZXMgYW5kIHNoZWxsIGZ1bmN0aW9ucworICAgIGJiLmRhdGEuZW1pdF9lbnYoZiwgZCwgVHJ1ZSkKKyAgICAjIGVtaXQgdGhlIG1ldGFkYXRhIHdoaWNoIGlzbid0IHZhbGlkIHNoZWxsCisgICAgZm9yIGUgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIGJiLmRhdGEuZ2V0VmFyRmxhZyhlLCAncHl0aG9uJywgZCk6CisgICAgICAgICAgICBmLndyaXRlKCJcbnB5dGhvbiAlcyAoKSB7XG4lc31cbiIgJSAoZSwgYmIuZGF0YS5nZXRWYXIoZSwgZCwgVHJ1ZSkpKQorICAgIGYuY2xvc2UoKQorfQorCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95X2FyY2hpdmVzIgorZG9fZGVwbG95X2FyY2hpdmVzICgpIHsKKyAgICBlY2hvICJEZXBsb3lpbmcgc291cmNlIGFyY2hpdmUgZmlsZXMgLi4uIgorfQorcHl0aG9uIGRvX2RlcGxveV9hcmNoaXZlc19zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9Citkb19kZXBsb3lfYXJjaGl2ZXNbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtBUkNISVZFUl9UT1BESVJ9IgorZG9fZGVwbG95X2FyY2hpdmVzW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfU1JDfSIKKworYWRkdGFzayBkb19hcl9vcmlnaW5hbCBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sgZG9fdW5wYWNrX2FuZF9wYXRjaCBhZnRlciBkb19wYXRjaAorYWRkdGFzayBkb19hcl9wYXRjaGVkIGFmdGVyIGRvX3VucGFja19hbmRfcGF0Y2gKK2FkZHRhc2sgZG9fYXJfY29uZmlndXJlZCBhZnRlciBkb191bnBhY2tfYW5kX3BhdGNoCithZGR0YXNrIGRvX2R1bXBkYXRhCithZGR0YXNrIGRvX2FyX3JlY2lwZQorYWRkdGFzayBkb19kZXBsb3lfYXJjaGl2ZXMgYmVmb3JlIGRvX2J1aWxkCisKK2FkZHRhc2sgZG9fZGVwbG95X2FsbF9hcmNoaXZlcyBhZnRlciBkb19kZXBsb3lfYXJjaGl2ZXMKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjcmRlcHRhc2tdID0gImRvX2RlcGxveV9hcmNoaXZlcyIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXMoKSB7CisgICAgICAgIDoKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMtYnJva2Vuc2VwLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxY2Y5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLWJyb2tlbnNlcC5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorIyBBdXRvdG9vbHMgY2xhc3MgZm9yIHJlY2lwZXMgd2hlcmUgc2VwYXJhdGUgYnVpbGQgZGlyIGRvZXNuJ3Qgd29yaworIyBJZGVhbGx5IHdlIHNob3VsZCBmaXggc29mdHdhcmUgc28gaXQgZG9lcyB3b3JrLiBTdGFuZGFyZCBhdXRvdG9vbHMgc3VwcG9ydHMKKyMgdGhpcy4KK2luaGVyaXQgYXV0b3Rvb2xzCitCID0gIiR7U30iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjZDdkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpAQCAtMCwwICsxLDMxMiBAQAorZGVmIGF1dG90b29sc19kZXBfcHJlcGVuZChkKToKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9BVVRPVE9PTFNfREVQUycsIFRydWUpOgorICAgICAgICByZXR1cm4gJycKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZXBzID0gJycKKworICAgIGlmIHBuIGluIFsnYXV0b2NvbmYtbmF0aXZlJywgJ2F1dG9tYWtlLW5hdGl2ZScsICdoZWxwMm1hbi1uYXRpdmUnXToKKyAgICAgICAgcmV0dXJuIGRlcHMKKyAgICBkZXBzICs9ICdhdXRvY29uZi1uYXRpdmUgYXV0b21ha2UtbmF0aXZlICcKKworICAgIGlmIG5vdCBwbiBpbiBbJ2xpYnRvb2wnLCAnbGlidG9vbC1uYXRpdmUnXSBhbmQgbm90IHBuLmVuZHN3aXRoKCJsaWJ0b29sLWNyb3NzIik6CisgICAgICAgIGRlcHMgKz0gJ2xpYnRvb2wtbmF0aXZlICcKKyAgICAgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBzICs9ICdsaWJ0b29sLWNyb3NzICcKKworICAgIHJldHVybiBkZXBzICsgJ2dudS1jb25maWctbmF0aXZlICcKKworRVhUUkFfT0VNQUtFID0gIiIKKworREVQRU5EU19wcmVwZW5kID0gIiR7QGF1dG90b29sc19kZXBfcHJlcGVuZChkKX0gIgorCitpbmhlcml0IHNpdGVpbmZvCisKKyMgU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2Ygc2hlbGwgc2NyaXB0cyB3aXRoIHZhcmlhYmxlcyBkZWZpbmVkIHRvIHN1cHBseSB0ZXN0CisjIHJlc3VsdHMgZm9yIGF1dG9jb25mIHRlc3RzIHdlIGNhbm5vdCBydW4gYXQgYnVpbGQgdGltZS4KK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCwgRmFsc2UpfSIKKworYWNwYXRocyA9ICJkZWZhdWx0IgorRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9YXV0b3BvaW50IgorCitleHBvcnQgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgPSAiJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IgorCisjIFdoZW4gYnVpbGRpbmcgdG9vbHMgZm9yIHVzZSBhdCBidWlsZC10aW1lIGl0J3MgcmVjb21tZW5kZWQgZm9yIHRoZSBidWlsZAorIyBzeXN0ZW0gdG8gdXNlIHRoZXNlIHZhcmlhYmxlcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyMgKGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYXV0b2Jvb2svYXV0b2Jvb2svYXV0b2Jvb2tfMjcwLmh0bWwpCitleHBvcnQgQ1BQX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NQUH0iCitleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorCitleHBvcnQgQ1hYX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKworZXhwb3J0IExEX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0xERkxBR1N9IgorCitkZWYgYXBwZW5kX2xpYnRvb2xfc3lzcm9vdChkKToKKyAgICAjIE9ubHkgc3VwcGx5IGxpYnRvb2wgc3lzcm9vdCBvcHRpb24gZm9yIG5vbi1uYXRpdmUgcGFja2FnZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHJldHVybiAnLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9JworICAgIHJldHVybiAiIgorCitDT05GSUdVUkVPUFRTID0gIiAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCisJCSAgLS1ob3N0PSR7SE9TVF9TWVN9IFwKKwkJICAtLXRhcmdldD0ke1RBUkdFVF9TWVN9IFwKKwkJICAtLXByZWZpeD0ke3ByZWZpeH0gXAorCQkgIC0tZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeH0gXAorCQkgIC0tYmluZGlyPSR7YmluZGlyfSBcCisJCSAgLS1zYmluZGlyPSR7c2JpbmRpcn0gXAorCQkgIC0tbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKwkJICAtLWRhdGFkaXI9JHtkYXRhZGlyfSBcCisJCSAgLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQkgIC0tc2hhcmVkc3RhdGVkaXI9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCQkgIC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkJICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorCQkgIC0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9IFwKKwkJICAtLW9sZGluY2x1ZGVkaXI9JHtvbGRpbmNsdWRlZGlyfSBcCisJCSAgLS1pbmZvZGlyPSR7aW5mb2Rpcn0gXAorCQkgIC0tbWFuZGlyPSR7bWFuZGlyfSBcCisJCSAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyBcCisJCSAgJHtDT05GSUdVUkVPUFRfREVQVFJBQ0t9IFwKKwkJICAke0BhcHBlbmRfbGlidG9vbF9zeXNyb290KGQpfSIKK0NPTkZJR1VSRU9QVF9ERVBUUkFDSyA/PSAiLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmciCisKKworb2VfcnVuY29uZiAoKSB7CisJY2Znc2NyaXB0PSIke1N9L2NvbmZpZ3VyZSIKKwlpZiBbIC14ICIkY2Znc2NyaXB0IiBdIDsgdGhlbgorCQliYm5vdGUgIlJ1bm5pbmcgJGNmZ3NjcmlwdCAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfSAkQCIKKwkJc2V0ICtlCisJCSR7Q0FDSEVEX0NPTkZJR1VSRVZBUlN9ICRjZmdzY3JpcHQgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0gIiRAIgorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWVjaG8gIkNvbmZpZ3VyZSBmYWlsZWQuIFRoZSBjb250ZW50cyBvZiBhbGwgY29uZmlnLmxvZyBmaWxlcyBmb2xsb3dzIHRvIGFpZCBkZWJ1Z2dpbmciCisJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgY29uZmlnLmxvZyAtcHJpbnQgLWV4ZWMgY2F0IHt9IFw7CisJCQlkaWUgIm9lX3J1bmNvbmYgZmFpbGVkIgorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCWJiZmF0YWwgIm5vIGNvbmZpZ3VyZSBzY3JpcHQgZm91bmQgYXQgJGNmZ3NjcmlwdCIKKwlmaQorfQorCitBVVRPVE9PTFNfQVVYRElSID89ICIke1N9IgorCitDT05GSUdVUkVTVEFNUEZJTEUgPSAiJHtXT1JLRElSfS9jb25maWd1cmUuc3N0YXRlIgorCithdXRvdG9vbHNfcHJlY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF07IHRoZW4KKwkJCQllY2hvICJQcmV2aW91c2x5IGNvbmZpZ3VyZWQgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGRldGVjdGVkLCBjbGVhbmluZyAke0J9IgorCQkJCXJtIC1yZiAke0J9CisJCQkJbWtkaXIgJHtCfQorCQkJZWxzZQorCQkJCSMgQXQgbGVhc3QgcmVtb3ZlIHRoZSAubGEgZmlsZXMgc2luY2UgYXV0b21ha2Ugd29uJ3QgYXV0b21hdGljYWxseQorCQkJCSMgcmVnZW5lcmF0ZSB0aGVtIGV2ZW4gaWYgQ0ZMQUdTL0xERkxBR1MgYXJlIGRpZmZlcmVudAorCQkJCWNkICR7U30KKwkJCQlpZiBbICIke0NMRUFOQlJPS0VOfSIgIT0gIjEiIC1hIFwoIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIFwpIF07IHRoZW4KKwkJCQkJZWNobyAiUnVubmluZyBcIiR7TUFLRX0gY2xlYW5cIiBpbiAke1N9IgorCQkJCQkke01BS0V9IGNsZWFuCisJCQkJZmkKKwkJCQlmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW5hbWUgXCoubGEgLWRlbGV0ZQorCQkJZmkKKwkJZmkKKwlmaQorfQorCithdXRvdG9vbHNfcG9zdGNvbmZpZ3VyZSgpeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKK30KKworRVhUUkFDT05GRlVOQ1MgPz89ICIiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gImF1dG90b29sc19wcmVjb25maWd1cmUgYXV0b3Rvb2xzX2NvcHlfYWNsb2NhbHMgJHtFWFRSQUNPTkZGVU5DU30iCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiYXV0b3Rvb2xzX3Bvc3Rjb25maWd1cmUiCisKK0FDTE9DQUxESVIgPSAiJHtCfS9hY2xvY2FsLWNvcHkiCisKK3B5dGhvbiBhdXRvdG9vbHNfY29weV9hY2xvY2FscyAoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocyArICIvY29uZmlndXJlLmluIikgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzICsgIi9jb25maWd1cmUuYWMiKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJBVVRPVE9PTFNfQ09QWUFDTE9DQUwiLCBGYWxzZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCisgICAgI2JiLndhcm4oc3RyKHRhc2tkZXBkYXRhKSkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYWNsb2NhbGRpciA9IGQuZ2V0VmFyKCJBQ0xPQ0FMRElSIiwgVHJ1ZSkKKyAgICBvZS5wYXRoLnJlbW92ZShhY2xvY2FsZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhY2xvY2FsZGlyKQorICAgIHN0YXJ0ID0gTm9uZQorICAgIGNvbmZpZ3VyZWRlcHMgPSBbXQorCisgICAgZm9yIGRlcCBpbiB0YXNrZGVwZGF0YToKKyAgICAgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAgICAgaWYgZGF0YVsxXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgZGF0YVswXSA9PSBwbjoKKyAgICAgICAgICAgIHN0YXJ0ID0gZGVwCisgICAgICAgICAgICBicmVhaworICAgIGlmIHN0YXJ0IGlzIE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJDb3VsZG4ndCBmaW5kIG91cnNlbGYgaW4gQkJfVEFTS0RFUERBVEE/IikKKworICAgICMgV2UgbmVlZCB0byBmaW5kIGNvbmZpZ3VyZSB0YXNrcyB3aGljaCBhcmUgZWl0aGVyIGZyb20gPHRhcmdldD4gLT4gPHRhcmdldD4KKyAgICAjIG9yIDxuYXRpdmU+IC0+IDxuYXRpdmU+IGJ1dCBub3QgPHRhcmdldD4gLT4gPG5hdGl2ZT4gdW5sZXNzIHRoZXkncmUgZGlyZWN0CisgICAgIyBkZXBlbmRlbmNpZXMuIFRoaXMgbWlycm9ycyB3aGF0IHdvdWxkIGdldCByZXN0b3JlZCBmcm9tIHNzdGF0ZS4KKyAgICBkb25lID0gW2RlcF0KKyAgICBuZXh0ID0gW2RlcF0KKyAgICB3aGlsZSBuZXh0OgorICAgICAgICBuZXcgPSBbXQorICAgICAgICBmb3IgZGVwIGluIG5leHQ6CisgICAgICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICAgICAgZm9yIGRhdGFkZXAgaW4gZGF0YVszXToKKyAgICAgICAgICAgICAgICBpZiBkYXRhZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoZGF0YWRlcCkKKyAgICAgICAgICAgICAgICBpZiAobm90IGRhdGFbMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSkgYW5kIHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdLmVuZHN3aXRoKCItbmF0aXZlIikgYW5kIGRlcCAhPSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXcuYXBwZW5kKGRhdGFkZXApCisgICAgICAgICAgICAgICAgaWYgdGFza2RlcGRhdGFbZGF0YWRlcF1bMV0gPT0gImRvX2NvbmZpZ3VyZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWRlcHMuYXBwZW5kKHRhc2tkZXBkYXRhW2RhdGFkZXBdWzBdKQorICAgICAgICBuZXh0ID0gbmV3CisKKyAgICAjY29uZmlndXJlZGVwczIgPSBbXQorICAgICNmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICMgICAgZGF0YSA9IHRhc2tkZXBkYXRhW2RlcF0KKyAgICAjICAgIGlmIGRhdGFbMV0gPT0gImRvX2NvbmZpZ3VyZSIgYW5kIGRhdGFbMF0gIT0gcG46CisgICAgIyAgICAgICAgY29uZmlndXJlZGVwczIuYXBwZW5kKGRhdGFbMF0pCisgICAgI2NvbmZpZ3VyZWRlcHMuc29ydCgpCisgICAgI2NvbmZpZ3VyZWRlcHMyLnNvcnQoKQorICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzKSkKKyAgICAjYmIud2FybihzdHIoY29uZmlndXJlZGVwczIpKQorCisgICAgY3AgPSBbXQorICAgIHNpdGVjb25mID0gW10gICAgCisgICAgZm9yIGMgaW4gY29uZmlndXJlZGVwczoKKyAgICAgICAgaWYgYy5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke0JVSUxEX0FSQ0h9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiBjLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtTREtfQVJDSH1fJHtTREtfT1N9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gYyBvciAiLWNyb3Nzc2RrIiBpbiBjOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtNQUNISU5FfS0lcy5wb3B1bGF0ZV9zeXNyb290IiAlIGMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAiciIpCisgICAgICAgICAgICBmb3IgbCBpbiBmOgorICAgICAgICAgICAgICAgIGlmICIvYWNsb2NhbC8iIGluIGwgYW5kIGwuc3RyaXAoKS5lbmRzd2l0aCgiLm00Iik6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxpZiAiY29uZmlnX3NpdGUuZC8iIGluIGw6CisgICAgICAgICAgICAgICAgICAgIGNwLmFwcGVuZChsLnN0cmlwKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIG5vdCBmb3VuZCIgJSBtYW5pZmVzdCkKKworICAgIGZvciBjIGluIGNwOgorICAgICAgICB0ID0gb3MucGF0aC5qb2luKGFjbG9jYWxkaXIsIG9zLnBhdGguYmFzZW5hbWUoYykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoYywgdCkKKyAgICAgICAgICAgIAorICAgIGQuc2V0VmFyKCJDT05GSUdfU0lURSIsIHNpdGVpbmZvX2dldF9maWxlcyhkLCBGYWxzZSkpCit9CithdXRvdG9vbHNfY29weV9hY2xvY2Fsc1t2YXJkZXBzZXhjbHVkZV0gKz0gIk1BQ0hJTkUgU0RLX0FSQ0ggQlVJTERfQVJDSCBTREtfT1MgQkJfVEFTS0RFUERBVEEiCisKK2F1dG90b29sc19kb19jb25maWd1cmUoKSB7CisJIyBXQVJOSU5HOiBncm9zcyBoYWNrIGZvbGxvd3M6CisJIyBBbiBhdXRvdG9vbHMgYnVpbHQgcGFja2FnZSBnZW5lcmFsbHkgbmVlZHMgdGhlc2Ugc2NyaXB0cywgaG93ZXZlciBvbmx5CisJIyBhdXRvbWFrZSBvciBsaWJ0b29saXplIGFjdHVhbGx5IGluc3RhbGwgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlbS4KKwkjIFRoaXMgaXMgYSBwcm9ibGVtIGluIGJ1aWxkcyB0aGF0IGRvIG5vdCB1c2UgbGlidG9vbCBvciBhdXRvbWFrZSwgaW4gdGhlIGNhc2UKKwkjIHdoZXJlIHdlIC1uZWVkLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlc2Ugc2NyaXB0cy4gIGUuZy4gcnVubmluZyBhIGJ1aWxkCisJIyBmb3IgYSBwYWNrYWdlIHdob3NlIGF1dG90b29scyBhcmUgb2xkLCBvbiBhbiB4ODZfNjQgbWFjaGluZSwgd2hpY2ggdGhlIG9sZAorCSMgY29uZmlnLnN1YiBkb2VzIG5vdCBzdXBwb3J0LiAgV29yayBhcm91bmQgdGhpcyBieSBpbnN0YWxsaW5nIHRoZW0gbWFudWFsbHkKKwkjIHJlZ2FyZGxlc3MuCisJKCBmb3IgYWMgaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBjb25maWd1cmUuaW4gLW8gLW5hbWUgY29uZmlndXJlLmFjYDsgZG8KKwkJcm0gLWYgYGRpcm5hbWUgJGFjYC9jb25maWd1cmUKKwkJZG9uZSApCisJaWYgWyAtZSAke1N9L2NvbmZpZ3VyZS5pbiAtbyAtZSAke1N9L2NvbmZpZ3VyZS5hYyBdOyB0aGVuCisJCW9sZGRpcj1gcHdkYAorCQljZCAke1N9CisJCUFDTE9DQUw9ImFjbG9jYWwgLS1zeXN0ZW0tYWNkaXI9JHtBQ0xPQ0FMRElSfS8iCisJCWlmIFsgeCIke2FjcGF0aHN9IiA9IHhkZWZhdWx0IF07IHRoZW4KKwkJCWFjcGF0aHM9CisJCQlmb3IgaSBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1tYXhkZXB0aCAyIC1uYW1lIFwqLm00fGdyZXAgLXYgJ2FjbG9jYWwubTQnfCBcCisJCQkJZ3JlcCAtdiAnYWNpbmNsdWRlLm00JyB8IGdyZXAgLXYgJ2FjbG9jYWwtY29weScgfCBzZWQgLWUgJ3MsXCguKi9cKS4qJCxcMSwnfHNvcnQgLXVgOyBkbworCQkJCWFjcGF0aHM9IiRhY3BhdGhzIC1JICRpIgorCQkJZG9uZQorCQllbHNlCisJCQlhY3BhdGhzPSIke2FjcGF0aHN9IgorCQlmaQorCQlBVVRPVj1gYXV0b21ha2UgLS12ZXJzaW9uIHwgc2VkIC1lICcxe3MvLiogLy87cy9cLlswLTldXCskLy99O3EnYAorCQlhdXRvbWFrZSAtLXZlcnNpb24KKwkJZWNobyAiQVVUT1YgaXMgJEFVVE9WIgorCQlpZiBbIC1kICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC0kQVVUT1YgXTsgdGhlbgorCQkJQUNMT0NBTD0iJEFDTE9DQUwgLS1hdXRvbWFrZS1hY2Rpcj0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwtJEFVVE9WIgorCQlmaQorCQkjIGF1dG9yZWNvbmYgaXMgdG9vIHNoeSB0byBvdmVyd3JpdGUgYWNsb2NhbC5tNCBpZiBpdCBkb2Vzbid0IGxvb2sKKwkJIyBsaWtlIGl0IHdhcyBhdXRvLWdlbmVyYXRlZC4gIFdvcmsgYXJvdW5kIHRoaXMgYnkgYmxvd2luZyBpdCBhd2F5CisJCSMgYnkgaGFuZCwgdW5sZXNzIHRoZSBwYWNrYWdlIHNwZWNpZmljYWxseSBhc2tlZCBub3QgdG8gcnVuIGFjbG9jYWwuCisJCWlmICEgZWNobyAke0VYVFJBX0FVVE9SRUNPTkZ9IHwgZ3JlcCAtcSAiYWNsb2NhbCI7IHRoZW4KKwkJCXJtIC1mIGFjbG9jYWwubTQKKwkJZmkKKwkJaWYgWyAtZSBjb25maWd1cmUuaW4gXTsgdGhlbgorCQkJQ09ORklHVVJFX0FDPWNvbmZpZ3VyZS5pbgorCQllbHNlCisJCQlDT05GSUdVUkVfQUM9Y29uZmlndXJlLmFjCisJCWZpCisJCWlmIGdyZXAgIl5bWzpzcGFjZTpdXSpBTV9HTElCX0dOVV9HRVRURVhUIiAkQ09ORklHVVJFX0FDID4vZGV2L251bGw7IHRoZW4KKwkJCWlmIGdyZXAgInNlZC4qUE9URklMRVMiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJCTogZG8gbm90aGluZyAtLSB3ZSBzdGlsbCBoYXZlIGFuIG9sZCB1bm1vZGlmaWVkIGNvbmZpZ3VyZS5hYworCSAgICAJCWVsc2UKKwkJCQliYm5vdGUgRXhlY3V0aW5nIGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJCWVjaG8gIm5vIiB8IGdsaWItZ2V0dGV4dGl6ZSAtLWZvcmNlIC0tY29weQorCQkJZmkKKwkJZWxzZSBpZiBncmVwICJeW1s6c3BhY2U6XV0qQU1fR05VX0dFVFRFWFQiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJIyBXZSdkIGNhbGwgZ2V0dGV4dGl6ZSBoZXJlIGlmIGl0IHdhc24ndCBzbyBicm9rZW4uLi4KKwkJCQljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvY29uZmlnLnJwYXRoICR7QVVUT1RPT0xTX0FVWERJUn0vCisJCQkJaWYgWyAtZCAke1N9L3BvLyBdOyB0aGVuCisJCQkJCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvLworCQkJCQlpZiBbICEgLWUgJHtTfS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIF07IHRoZW4KKwkJCQkJCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9yZW1vdmUtcG90Y2RhdGUuc2luICR7U30vcG8vCisJCQkJCWZpCisJCQkJZmkKKwkJCQlmb3IgaSBpbiBnZXR0ZXh0Lm00IGljb252Lm00IGxpYi1sZC5tNCBsaWItbGluay5tNCBsaWItcHJlZml4Lm00IG5scy5tNCBwby5tNCBwcm9ndGVzdC5tNDsgZG8KKwkJCQkJZm9yIGogaW4gYGZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSAkaSB8IGdyZXAgLXYgYWNsb2NhbC1jb3B5YDsgZG8KKwkJCQkJCXJtICRqCisJCQkJCWRvbmUKKwkJCQlkb25lCisJCQlmaQorCQlmaQorCQlta2RpciAtcCBtNAorCQlpZiBncmVwICJeW1s6c3BhY2U6XV0qW0FJXVtDVF1fUFJPR19JTlRMVE9PTCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQliYm5vdGUgRXhlY3V0aW5nIGludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJCWludGx0b29saXplIC0tY29weSAtLWZvcmNlIC0tYXV0b21ha2UKKwkJZmkKKwkJYmJub3RlIEV4ZWN1dGluZyBBQ0xPQ0FMPVwiJEFDTE9DQUxcIiBhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAke0VYVFJBX0FVVE9SRUNPTkZ9ICRhY3BhdGhzCisJCUFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorCQljZCAkb2xkZGlyCisJZmkKKwlpZiBbIC1lICR7U30vY29uZmlndXJlIF07IHRoZW4KKwkJb2VfcnVuY29uZgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbmZpZ3VyZSIKKwlmaQorfQorCithdXRvdG9vbHNfZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQorCitpbmhlcml0IHNpdGVjb25maWcKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9faW5zdGFsbAorCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzX3N0YWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYXV0b3Rvb2xzX3N0YWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjNDFlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKK2luaGVyaXQgYXV0b3Rvb2xzCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzgwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjI5IEBACitCQl9ERUZBVUxUX1RBU0sgPz0gImJ1aWxkIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorCitpbmhlcml0IHBhdGNoCitpbmhlcml0IHN0YWdpbmcKKworaW5oZXJpdCBtaXJyb3JzCitpbmhlcml0IHV0aWxzCitpbmhlcml0IHV0aWxpdHktdGFza3MKK2luaGVyaXQgbWV0YWRhdGFfc2NtCitpbmhlcml0IGxvZ2dpbmcKKworT0VfSU1QT1JUUyArPSAib3Mgc3lzIHRpbWUgb2UucGF0aCBvZS51dGlscyBvZS5kYXRhIG9lLnBhY2thZ2Ugb2UucGFja2FnZWdyb3VwIG9lLnNzdGF0ZXNpZyBvZS5sc2Igb2UuY2FjaGVkcGF0aCIKK09FX0lNUE9SVFNbdHlwZV0gPSAibGlzdCIKKworZGVmIG9lX2ltcG9ydChkKToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIHN5cy5wYXRoWzA6MF0gPSBbb3MucGF0aC5qb2luKGRpciwgImxpYiIpIGZvciBkaXIgaW4gYmJwYXRoXQorCisgICAgZGVmIGluamVjdChuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIk1ha2UgYSBweXRob24gb2JqZWN0IGFjY2Vzc2libGUgZnJvbSB0aGUgbWV0YWRhdGEiIiIKKyAgICAgICAgaWYgaGFzYXR0cihiYi51dGlscywgIl9jb250ZXh0Iik6CisgICAgICAgICAgICBiYi51dGlscy5fY29udGV4dFtuYW1lXSA9IHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfX2J1aWx0aW5zX19bbmFtZV0gPSB2YWx1ZQorCisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBmb3IgdG9pbXBvcnQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiT0VfSU1QT1JUUyIsIGQpOgorICAgICAgICBpbXBvcnRlZCA9IF9faW1wb3J0X18odG9pbXBvcnQpCisgICAgICAgIGluamVjdCh0b2ltcG9ydC5zcGxpdCgiLiIsIDEpWzBdLCBpbXBvcnRlZCkKKworICAgIHJldHVybiAiIgorCisjIFdlIG5lZWQgdGhlIG9lIG1vZHVsZSBuYW1lIHNwYWNlIGVhcmx5IChiZWZvcmUgSU5IRVJJVHMgZ2V0IGFkZGVkKQorT0VfSU1QT1JURUQgOj0gIiR7QG9lX2ltcG9ydChkKX0iCisKK2RlZiBsc2JfZGlzdHJvX2lkZW50aWZpZXIoZCk6CisgICAgYWRqdXN0ID0gZC5nZXRWYXIoJ0xTQl9ESVNUUk9fQURKVVNUJywgVHJ1ZSkKKyAgICBhZGp1c3RfZnVuYyA9IE5vbmUKKyAgICBpZiBhZGp1c3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkanVzdF9mdW5jID0gZ2xvYmFscygpW2FkanVzdF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2Z1bmMpCisKK2RpZSgpIHsKKwliYmZhdGFsX2xvZyAiJCoiCit9CisKK29lX3J1bm1ha2VfY2FsbCgpIHsKKwliYm5vdGUgJHtNQUtFfSAke0VYVFJBX09FTUFLRX0gIiRAIgorCSR7TUFLRX0gJHtFWFRSQV9PRU1BS0V9ICIkQCIKK30KKworb2VfcnVubWFrZSgpIHsKKwlvZV9ydW5tYWtlX2NhbGwgIiRAIiB8fCBkaWUgIm9lX3J1bm1ha2UgZmFpbGVkIgorfQorCisKK2RlZiBiYXNlX2RlcF9wcmVwZW5kKGQpOgorICAgICMKKyAgICAjIElkZWFsbHkgdGhpcyB3aWxsIGNoZWNrIGEgZmxhZyBzbyB3ZSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgaW4KKyAgICAjIHRoZSBjYXNlIHdoZXJlIGhvc3QgPT0gYnVpbGQgPT0gdGFyZ2V0LCBmb3Igbm93IHdlIGRvbid0IHdvcmsgaW4KKyAgICAjIHRoYXQgY2FzZSB0aG91Z2guCisgICAgIworCisgICAgZGVwcyA9ICIiCisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICBpZiAoZC5nZXRWYXIoJ0hPU1RfU1lTJywgVHJ1ZSkgIT0gZC5nZXRWYXIoJ0JVSUxEX1NZUycsIFRydWUpKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIHZpcnR1YWwvbGliYyAiCisgICAgcmV0dXJuIGRlcHMKKworQkFTRURFUEVORFMgPSAiJHtAYmFzZV9kZXBfcHJlcGVuZChkKX0iCisKK0RFUEVORFNfcHJlcGVuZD0iJHtCQVNFREVQRU5EU30gIgorCitGSUxFU1BBVEggPSAiJHtAYmFzZV9zZXRfZmlsZXNwYXRoKFsiJHtGSUxFX0RJUk5BTUV9LyR7QlB9IiwgIiR7RklMRV9ESVJOQU1FfS8ke0JQTn0iLCAiJHtGSUxFX0RJUk5BTUV9L2ZpbGVzIl0sIGQpfSIKKyMgVEhJU0RJUiBvbmx5IHdvcmtzIHByb3Blcmx5IHdpdGggaW1lZGlhdGUgZXhwYW5zaW9uIGFzIGl0IGhhcyB0byBydW4KKyMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxvY2F0aW9uIGl0cyB1c2VkICg6PSkKK1RISVNESVIgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkpfSIKKworZGVmIGV4dHJhX3BhdGhfZWxlbWVudHMoZCk6CisgICAgcGF0aCA9ICIiCisgICAgZWxlbWVudHMgPSAoZC5nZXRWYXIoJ0VYVFJBTkFUSVZFUEFUSCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIGUgaW4gZWxlbWVudHM6CisgICAgICAgIHBhdGggPSBwYXRoICsgIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8iICsgZSArICI6IgorICAgIHJldHVybiBwYXRoCisKK1BBVEhfcHJlcGVuZCA9ICIke0BleHRyYV9wYXRoX2VsZW1lbnRzKGQpfSIKKworZGVmIGdldF9saWNfY2hlY2tzdW1fZmlsZV9saXN0KGQpOgorICAgIGZpbGVsaXN0ID0gW10KKyAgICBsaWNfZmlsZXMgPSBkLmdldFZhcigiTElDX0ZJTEVTX0NIS1NVTSIsIFRydWUpIG9yICcnCisgICAgdG1wZGlyID0gZC5nZXRWYXIoIlRNUERJUiIsIFRydWUpCisKKyAgICB1cmxzID0gbGljX2ZpbGVzLnNwbGl0KCkKKyAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICMgV2Ugb25seSBjYXJlIGFib3V0IGl0ZW1zIHRoYXQgYXJlIGFic29sdXRlIHBhdGhzIHNpbmNlCisgICAgICAgICMgYW55IG90aGVycyBzaG91bGQgYmUgY292ZXJlZCBieSBTUkNfVVJJLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybClbMl0KKyAgICAgICAgICAgIGlmIHBhdGhbMF0gPT0gJy8nOgorICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZChwYXRoICsgIjoiICsgc3RyKG9zLnBhdGguZXhpc3RzKHBhdGgpKSkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKyAiOiBMSUNfRklMRVNfQ0hLU1VNIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMOiAiICsgdXJsKQorICAgIHJldHVybiAiICIuam9pbihmaWxlbGlzdCkKKworYWRkdGFzayBmZXRjaAorZG9fZmV0Y2hbZGlyc10gPSAiJHtETF9ESVJ9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdID0gIiR7QGJiLmZldGNoLmdldF9jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbZmlsZS1jaGVja3N1bXNdICs9ICIgJHtAZ2V0X2xpY19jaGVja3N1bV9maWxlX2xpc3QoZCl9IgorZG9fZmV0Y2hbdmFyZGVwc10gKz0gIlNSQ1JFViIKK3B5dGhvbiBiYXNlX2RvX2ZldGNoKCkgeworCisgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHNyY191cmkpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgICAgIGZldGNoZXIuZG93bmxvYWQoKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgdW5wYWNrIGFmdGVyIGRvX2ZldGNoCitkb191bnBhY2tbZGlyc10gPSAiJHtXT1JLRElSfSIKK3B5dGhvbiBiYXNlX2RvX3VucGFjaygpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICByb290ZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgIyBFbnN1cmUgdGhhdCB3ZSBjbGVhbnVwICR7U30vcGF0Y2hlcworICAgICMgVE9ETzogSW52ZXN0aWdhdGUgaWYgd2UgY2FuIHJlbW92ZQorICAgICMgdGhlIGVudGlyZSAke1N9IGluIHRoaXMgY2FzZS4KKyAgICBzX2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBwX2RpciA9IG9zLnBhdGguam9pbihzX2RpciwgJ3BhdGNoZXMnKQorICAgIGJiLnV0aWxzLnJlbW92ZShwX2RpciwgVHJ1ZSkKKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmZXRjaGVyLnVucGFjayhyb290ZGlyKQorICAgIGV4Y2VwdCBiYi5mZXRjaDIuQkJGZXRjaEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2RlZiBwa2dhcmNoX21hcHBpbmcoZCk6CisgICAgIyBDb21wYXRpYmlsaXR5IG1hcHBpbmdzIG9mIFRVTkVfUEtHQVJDSCAob3B0IGluKQorICAgIGlmIGQuZ2V0VmFyKCJQS0dBUkNIQ09NUEFUX0FSTVY3QSIsIFRydWUpOgorICAgICAgICBpZiBkLmdldFZhcigiVFVORV9QS0dBUkNIIiwgVHJ1ZSkgPT0gImFybXY3YS12ZnAtbmVvbiI6CisgICAgICAgICAgICBkLnNldFZhcigiVFVORV9QS0dBUkNIIiwgImFybXY3YSIpCisKK2RlZiBnZXRfbGF5ZXJzX2JyYW5jaF9yZXYoZCk6CisgICAgbGF5ZXJzID0gKGQuZ2V0VmFyKCJCQkxBWUVSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbGF5ZXJzX2JyYW5jaF9yZXYgPSBbIiUtMTdzID0gXCIlczolc1wiIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICBpID0gbGVuKGxheWVyc19icmFuY2hfcmV2KS0xCisgICAgcDEgPSBsYXllcnNfYnJhbmNoX3JldltpXS5maW5kKCI9IikKKyAgICBzMSA9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICB3aGlsZSBpID4gMDoKKyAgICAgICAgcDIgPSBsYXllcnNfYnJhbmNoX3JldltpLTFdLmZpbmQoIj0iKQorICAgICAgICBzMj0gbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXVtwMjpdCisgICAgICAgIGlmIHMxID09IHMyOgorICAgICAgICAgICAgbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXSA9IGxheWVyc19icmFuY2hfcmV2W2ktMV1bMDpwMl0KKyAgICAgICAgICAgIGkgLT0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaSAtPSAxCisgICAgICAgICAgICBwMSA9IGxheWVyc19icmFuY2hfcmV2W2ldLmZpbmQoIj0iKQorICAgICAgICAgICAgczE9IGxheWVyc19icmFuY2hfcmV2W2ldW3AxOl0KKyAgICByZXR1cm4gbGF5ZXJzX2JyYW5jaF9yZXYKKworCitCVUlMRENGR19GVU5DUyA/Pz0gImJ1aWxkY2ZnX3ZhcnMgZ2V0X2xheWVyc19icmFuY2hfcmV2IGJ1aWxkY2ZnX25lZWRlZHZhcnMiCitCVUlMRENGR19GVU5DU1t0eXBlXSA9ICJsaXN0IgorCitkZWYgYnVpbGRjZmdfdmFycyhkKToKKyAgICBzdGF0dXN2YXJzID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfVkFSUycsIGQpCisgICAgZm9yIHZhciBpbiBzdGF0dXN2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnJS0xN3MgPSAiJXMiJyAlICh2YXIsIHZhbHVlKQorCitkZWYgYnVpbGRjZmdfbmVlZGVkdmFycyhkKToKKyAgICBuZWVkZWRfdmFycyA9IG9lLmRhdGEudHlwZWRfdmFsdWUoIkJVSUxEQ0ZHX05FRURFRFZBUlMiLCBkKQorICAgIHBlc3RlcnVzZXIgPSBbXQorICAgIGZvciB2IGluIG5lZWRlZF92YXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBUcnVlKQorICAgICAgICBpZiBub3QgdmFsIG9yIHZhbCA9PSAnSU5WQUxJRCc6CisgICAgICAgICAgICBwZXN0ZXJ1c2VyLmFwcGVuZCh2KQorCisgICAgaWYgcGVzdGVydXNlcjoKKyAgICAgICAgYmIuZmF0YWwoJ1RoZSBmb2xsb3dpbmcgdmFyaWFibGUocykgd2VyZSBub3Qgc2V0OiAlc1xuUGxlYXNlIHNldCB0aGVtIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IHNldHMgdGhlbS4nICUgJywgJy5qb2luKHBlc3RlcnVzZXIpKQorCithZGRoYW5kbGVyIGJhc2VfZXZlbnRoYW5kbGVyCitiYXNlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCBiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UgYmIucnVucXVldWUuc2NlbmVRdWV1ZUNvbXBsZXRlIgorcHl0aG9uIGJhc2VfZXZlbnRoYW5kbGVyKCkgeworICAgIGltcG9ydCBiYi5ydW5xdWV1ZQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICBpZiBub3QgZS5kYXRhLmdldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgRmFsc2UpOgorICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiTkFUSVZFTFNCU1RSSU5HIiwgbHNiX2Rpc3Ryb19pZGVudGlmaWVyKGUuZGF0YSkpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoJ0JCX1ZFUlNJT04nLCBiYi5fX3ZlcnNpb25fXykKKyAgICAgICAgcGtnYXJjaF9tYXBwaW5nKGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIkRJU1RST19GRUFUVVJFUyIsIGUuZGF0YSkKKyAgICAgICAgb2UudXRpbHMuZmVhdHVyZXNfYmFja2ZpbGwoIk1BQ0hJTkVfRkVBVFVSRVMiLCBlLmRhdGEpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBzdGF0dXNsaW5lcyA9IFtdCisgICAgICAgIGZvciBmdW5jIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JVSUxEQ0ZHX0ZVTkNTJywgbG9jYWxkYXRhKToKKyAgICAgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgICAgIGlmIGZ1bmMgbm90IGluIGc6CisgICAgICAgICAgICAgICAgYmIud2FybigiQnVpbGQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIGZ1bmMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZsaW5lcyA9IGdbZnVuY10obG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGlmIGZsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgICAgICBzdGF0dXNoZWFkZXIgPSBlLmRhdGEuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgICAgICBiYi5wbGFpbignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworICAgICMgVGhpcyBjb2RlIGlzIHRvIHNpbGVuY2Ugd2FybmluZ3Mgd2hlcmUgdGhlIFNESyB2YXJpYWJsZXMgb3ZlcndyaXRlIHRoZSAKKyAgICAjIHRhcmdldCBvbmVzIGFuZCB3ZSdkIHNlZSBkdWxwaWNhdGUga2V5IG5hbWVzIG92ZXJ3cml0aW5nIGVhY2ggb3RoZXIKKyAgICAjIGZvciB2YXJpb3VzIFBSRUZFUlJFRF9QUk9WSURFUlMKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1BSRUZJWCIsIFRydWUpID09IGUuZGF0YS5nZXRWYXIoIlNES19QUkVGSVgiLCBUcnVlKToKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiKQorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUpOgorICAgICAgICBjb21wbGV0aW9ucyA9IGUuZGF0YS5leHBhbmQoIiR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGxldGlvbnMpOgorICAgICAgICAgICAgY21kcyA9IHNldCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oY29tcGxldGlvbnMsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBjbWRzID0gc2V0KGYpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJjb21wbGV0aW9uX2Z1bmN0aW9uIiwgIlxuIi5qb2luKGNtZHMpKQorICAgICAgICAgICAgZS5kYXRhLnNldFZhckZsYWcoImNvbXBsZXRpb25fZnVuY3Rpb24iLCAiZnVuYyIsICIxIikKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJFeGVjdXRpbmcgU2NlbmVRdWV1ZSBDb21wbGV0aW9uIGNvbW1hbmRzOiAlcyIgJSAiXG4iLmpvaW4oY21kcykpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNvbXBsZXRpb25fZnVuY3Rpb24iLCBlLmRhdGEpCisgICAgICAgICAgICBvcy5yZW1vdmUoY29tcGxldGlvbnMpCit9CisKK0NPTkZJR1VSRVNUQU1QRklMRSA9ICIke1dPUktESVJ9L2NvbmZpZ3VyZS5zc3RhdGUiCitDTEVBTkJST0tFTiA9ICIwIgorCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorZG9fY29uZmlndXJlW2RpcnNdID0gIiR7Qn0iCitkb19jb25maWd1cmVbZGVwdGFza10gPSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2Jhc2VfZG9fY29uZmlndXJlKCkgeworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgXTsgdGhlbgorCQkJY2QgJHtCfQorCQkJaWYgWyAiJHtDTEVBTkJST0tFTn0iICE9ICIxIiAtYSBcKCAtZSBNYWtlZmlsZSAtbyAtZSBtYWtlZmlsZSAtbyAtZSBHTlVtYWtlZmlsZSBcKSBdOyB0aGVuCisJCQkJb2VfcnVubWFrZSBjbGVhbgorCQkJZmkKKwkJCWZpbmQgJHtCfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBcKi5sYSAtZGVsZXRlCisJCWZpCisJZmkKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJZWNobyAke0JCX1RBU0tIQVNIfSA+ICR7Q09ORklHVVJFU1RBTVBGSUxFfQorCWZpCit9CisKK2FkZHRhc2sgY29tcGlsZSBhZnRlciBkb19jb25maWd1cmUKK2RvX2NvbXBpbGVbZGlyc10gPSAiJHtCfSIKK2Jhc2VfZG9fY29tcGlsZSgpIHsKKwlpZiBbIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIF07IHRoZW4KKwkJb2VfcnVubWFrZSB8fCBkaWUgIm1ha2UgZmFpbGVkIgorCWVsc2UKKwkJYmJub3RlICJub3RoaW5nIHRvIGNvbXBpbGUiCisJZmkKK30KKworYWRkdGFzayBpbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKK2RvX2luc3RhbGxbZGlyc10gPSAiJHtEfSAke0J9IgorIyBSZW1vdmUgYW5kIHJlLWNyZWF0ZSAke0R9IHNvIHRoYXQgaXMgaXQgZ3VhcmFudGVlZCB0byBiZSBlbXB0eQorZG9faW5zdGFsbFtjbGVhbmRpcnNdID0gIiR7RH0iCisKK2Jhc2VfZG9faW5zdGFsbCgpIHsKKwk6Cit9CisKK2Jhc2VfZG9fcGFja2FnZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgYnVpbGQgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorZG9fYnVpbGRbbm9leGVjXSA9ICIxIgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19kZXBsb3kiCitkb19idWlsZCAoKSB7CisJOgorfQorCitkZWYgc2V0X3BhY2thZ2V0cmlwbGV0KGQpOgorICAgIGFyY2hzID0gW10KKyAgICB0b3MgPSBbXQorICAgIHR2cyA9IFtdCisKKyAgICBhcmNocy5hcHBlbmQoZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpKQorICAgIHRvcy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpKQorICAgIHR2cy5hcHBlbmQoZC5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBUcnVlKSkKKworICAgIGRlZiBzZXR0cmlwbGV0KGQsIHZhcm5hbWUsIGFyY2hzLCB0b3MsIHR2cyk6CisgICAgICAgIHRyaXBsZXRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyY2hzKSk6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoc1tpXToKKyAgICAgICAgICAgICAgICB0cmlwbGV0cy5hcHBlbmQoYXJjaCArIHR2c1tpXSArICItIiArIHRvc1tpXSkKKyAgICAgICAgdHJpcGxldHMucmV2ZXJzZSgpCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKHRyaXBsZXRzKSkKKworICAgIHNldHRyaXBsZXQoZCwgIlBLR1RSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGFyY2hzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkuc3BsaXQoKSkKKyAgICAgICAgdG9zLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKSkKKyAgICAgICAgdHZzLmFwcGVuZChsb2NhbGRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgVHJ1ZSkpCisKKyAgICBzZXR0cmlwbGV0KGQsICJQS0dNTFRSSVBMRVRTIiwgYXJjaHMsIHRvcywgdHZzKQorCitweXRob24gKCkgeworICAgIGltcG9ydCBzdHJpbmcsIHJlCisKKyAgICAjIEhhbmRsZSBQQUNLQUdFQ09ORklHCisgICAgIworICAgICMgVGhlc2UgdGFrZSB0aGUgZm9ybToKKyAgICAjCisgICAgIyBQQUNLQUdFQ09ORklHID8/PSAiPGRlZmF1bHQgb3B0aW9ucz4iCisgICAgIyBQQUNLQUdFQ09ORklHW2Zvb10gPSAiLS1lbmFibGUtZm9vLC0tZGlzYWJsZS1mb28sZm9vX2RlcGVuZHMsZm9vX3J1bnRpbWVfZGVwZW5kcyIKKyAgICBwa2djb25maWdmbGFncyA9IGQuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKSBvciB7fQorICAgIGlmIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorCisgICAgICAgIGRlZiBleHBhbmRGaWx0ZXIoYXBwZW5kcywgZXh0ZW5zaW9uLCBwcmVmaXgpOgorICAgICAgICAgICAgYXBwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmV4cGFuZCgiICIuam9pbihhcHBlbmRzKSkpCisgICAgICAgICAgICBuZXdhcHBlbmRzID0gW10KKyAgICAgICAgICAgIGZvciBhIGluIGFwcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgYS5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICgiLWNyb3NzLSIgaW4gYSk6CisgICAgICAgICAgICAgICAgICAgIG5ld2FwcGVuZHMuYXBwZW5kKGEpCisgICAgICAgICAgICAgICAgZWxpZiBhLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICAgICAgICAgIHN1YnMgPSBhLnNwbGl0KCIvIiwgMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQoInZpcnR1YWwvIiArIHByZWZpeCArIHN1YnMgKyBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgYS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZChhICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQocHJlZml4ICsgYSArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBuZXdhcHBlbmRzCisKKyAgICAgICAgZGVmIGFwcGVuZFZhcih2YXJuYW1lLCBhcHBlbmRzKToKKyAgICAgICAgICAgIGlmIG5vdCBhcHBlbmRzOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgdmFybmFtZS5maW5kKCJERVBFTkRTIikgIT0gLTE6CisgICAgICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCAibmF0aXZlc2RrLSIpCisgICAgICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kcyA9IGV4cGFuZEZpbHRlcihhcHBlbmRzLCAiLW5hdGl2ZSIsICIiKQorICAgICAgICAgICAgICAgIGlmIG1scHJlZml4OgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICIiLCBtbHByZWZpeCkKKyAgICAgICAgICAgIHZhcm5hbWUgPSBkLmV4cGFuZCh2YXJuYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFybmFtZSwgIiAiICsgIiAiLmpvaW4oYXBwZW5kcykpCisKKyAgICAgICAgZXh0cmFkZXBzID0gW10KKyAgICAgICAgZXh0cmFyZGVwcyA9IFtdCisgICAgICAgIGV4dHJhY29uZiA9IFtdCisgICAgICAgIGZvciBmbGFnLCBmbGFndmFsIGluIHNvcnRlZChwa2djb25maWdmbGFncy5pdGVtcygpKToKKyAgICAgICAgICAgIGl0ZW1zID0gZmxhZ3ZhbC5zcGxpdCgiLCIpCisgICAgICAgICAgICBudW0gPSBsZW4oaXRlbXMpCisgICAgICAgICAgICBpZiBudW0gPiA0OgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJPbmx5IGVuYWJsZSxkaXNhYmxlLGRlcGVuZCxyZGVwZW5kIGNhbiBiZSBzcGVjaWZpZWQhIikKKworICAgICAgICAgICAgaWYgZmxhZyBpbiBwa2djb25maWc6CisgICAgICAgICAgICAgICAgaWYgbnVtID49IDMgYW5kIGl0ZW1zWzJdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWRlcHMuYXBwZW5kKGl0ZW1zWzJdKQorICAgICAgICAgICAgICAgIGlmIG51bSA+PSA0IGFuZCBpdGVtc1szXToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFyZGVwcy5hcHBlbmQoaXRlbXNbM10pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDEgYW5kIGl0ZW1zWzBdOgorICAgICAgICAgICAgICAgICAgICBleHRyYWNvbmYuYXBwZW5kKGl0ZW1zWzBdKQorICAgICAgICAgICAgZWxpZiBudW0gPj0gMiBhbmQgaXRlbXNbMV06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMV0pCisgICAgICAgIGFwcGVuZFZhcignREVQRU5EUycsIGV4dHJhZGVwcykKKyAgICAgICAgYXBwZW5kVmFyKCdSREVQRU5EU18ke1BOfScsIGV4dHJhcmRlcHMpCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2NtYWtlJywgZCk6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ01BS0UnLCBleHRyYWNvbmYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcHBlbmRWYXIoJ0VYVFJBX09FQ09ORicsIGV4dHJhY29uZikKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIGlmIGxpY2Vuc2UgPT0gIklOVkFMSUQiOgorICAgICAgICBiYi5mYXRhbCgnVGhpcyByZWNpcGUgZG9lcyBub3QgaGF2ZSB0aGUgTElDRU5TRSBmaWVsZCBzZXQgKCVzKScgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2xpY2Vuc2UnLCBkKToKKyAgICAgICAgY2hlY2tfbGljZW5zZV9mb3JtYXQoZCkKKyAgICAgICAgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZyA9IGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCkKKyAgICAgICAgaWYgdW5tYXRjaGVkX2xpY2Vuc2VfZmxhZzoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTa2lwcGluZyAlcyBiZWNhdXNlIGl0IGhhcyBhIHJlc3RyaWN0ZWQgbGljZW5zZSBub3QiCisgICAgICAgICAgICAgICAgICIgd2hpdGVsaXN0ZWQgaW4gTElDRU5TRV9GTEFHU19XSElURUxJU1QiICUgcG4pCisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiYmVjYXVzZSBpdCBoYXMgYSByZXN0cmljdGVkIGxpY2Vuc2Ugbm90IgorICAgICAgICAgICAgICAgICAiIHdoaXRlbGlzdGVkIGluIExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIikKKworICAgICMgSWYgd2UncmUgYnVpbGRpbmcgYSB0YXJnZXQgcGFja2FnZSB3ZSBuZWVkIHRvIHVzZSBmYWtlcm9vdCAocHNldWRvKQorICAgICMgaW4gb3JkZXIgdG8gY2FwdHVyZSBwZXJtaXNzaW9ucywgb3duZXJzLCBncm91cHMgYW5kIHNwZWNpYWwgZmlsZXMKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3VucGFjaycsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19pbnN0YWxsJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGwnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAndW1hc2snLCAnMDIyJykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2RldnNoZWxsJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXZzaGVsbCcsICdkZXBlbmRzJywgJyB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICBzb3VyY2VfbWlycm9yX2ZldGNoID0gZC5nZXRWYXIoJ1NPVVJDRV9NSVJST1JfRkVUQ0gnLCAwKQorICAgIGlmIG5vdCBzb3VyY2VfbWlycm9yX2ZldGNoOgorICAgICAgICBuZWVkX2hvc3QgPSBkLmdldFZhcignQ09NUEFUSUJMRV9IT1NUJywgVHJ1ZSkKKyAgICAgICAgaWYgbmVlZF9ob3N0OgorICAgICAgICAgICAgaW1wb3J0IHJlCisgICAgICAgICAgICB0aGlzX2hvc3QgPSBkLmdldFZhcignSE9TVF9TWVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHJlLm1hdGNoKG5lZWRfaG9zdCwgdGhpc19ob3N0KToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggaG9zdCAlcyAobm90IGluIENPTVBBVElCTEVfSE9TVCkiICUgdGhpc19ob3N0KQorCisgICAgICAgIG5lZWRfbWFjaGluZSA9IGQuZ2V0VmFyKCdDT01QQVRJQkxFX01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBpZiBuZWVkX21hY2hpbmU6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIGNvbXBhdF9tYWNoaW5lcyA9IChkLmdldFZhcignTUFDSElORU9WRVJSSURFUycsIFRydWUpIG9yICIiKS5zcGxpdCgiOiIpCisgICAgICAgICAgICBmb3IgbSBpbiBjb21wYXRfbWFjaGluZXM6CisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gobmVlZF9tYWNoaW5lLCBtKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIG1hY2hpbmUgJXMgKG5vdCBpbiBDT01QQVRJQkxFX01BQ0hJTkUpIiAlIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpCisKKworICAgICAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoJ0lOQ09NUEFUSUJMRV9MSUNFTlNFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBjaGVja19saWNlbnNlID0gRmFsc2UgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpIGVsc2UgVHJ1ZQorICAgICAgICBmb3IgdCBpbiBbIi1uYXRpdmUiLCAiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IiwgIi1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IiwKKyAgICAgICAgICAgICAgIi1jcm9zc3Nkay0ke1NES19BUkNIfSIsICItY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIsCisgICAgICAgICAgICAgICItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSJdOgorICAgICAgICAgICAgaWYgcG4uZW5kc3dpdGgoZC5leHBhbmQodCkpOgorICAgICAgICAgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZQorICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJnY2Mtc291cmNlLSIpOgorICAgICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlCisKKyAgICAgICAgaWYgY2hlY2tfbGljZW5zZSBhbmQgYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKworICAgICAgICAgICAgd2hpdGVsaXN0ID0gW10KKyAgICAgICAgICAgIGluY29tcGF0d2wgPSBbXQorICAgICAgICAgICAgaHRpbmNvbXBhdHdsID0gW10KKyAgICAgICAgICAgIGZvciBsaWMgaW4gYmFkX2xpY2Vuc2VzOgorICAgICAgICAgICAgICAgIHNwZHhfbGljZW5zZSA9IHJldHVybl9zcGR4KGQsIGxpYykKKyAgICAgICAgICAgICAgICBmb3IgdyBpbiBbIkhPU1RUT09MU19XSElURUxJU1RfIiwgIkxHUEx2Ml9XSElURUxJU1RfIiwgIldISVRFTElTVF8iXToKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0LmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwZHhfbGljZW5zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlbGlzdC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgV2UgbmVlZCB0byB0cmFjayB3aGF0IHdlIGFyZSB3aGl0ZWxpc3RpbmcgYW5kIHdoeS4gSWYgcG4gaXMgCisgICAgICAgICAgICAgICAgICAgIGluY29tcGF0aWJsZSBhbmQgaXMgbm90IEhPU1RUT09MU19XSElURUxJU1RfIHdlIG5lZWQgdG8gYmUgCisgICAgICAgICAgICAgICAgICAgIGFibGUgdG8gbm90ZSB0aGF0IHRoZSBpbWFnZSB0aGF0IGlzIGNyZWF0ZWQgbWF5IGluZmFjdCAKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbiBpbmNvbXBhdGlibGUgbGljZW5zZXMgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSAKKyAgICAgICAgICAgICAgICAgICAgYmVpbmcgc2V0LgorICAgICAgICAgICAgICAgICAgICAnJycKKyAgICAgICAgICAgICAgICAgICAgaWYgIkhPU1RUT09MUyIgaW4gdzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBsaWMsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGF0d2wuZXh0ZW5kKChkLmdldFZhcih3ICsgc3BkeF9saWNlbnNlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgICAgICAgICAgaWYgbm90IHBuIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICByZWNpcGVfbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBwa2dzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgIHNraXBwZWRfcGtncyA9IFtdCisgICAgICAgICAgICAgICAgdW5za2lwcGVkX3BrZ3MgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgYmFkX2xpY2Vuc2VzLCBwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNraXBwZWRfcGtncy5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgIGFsbF9za2lwcGVkID0gc2tpcHBlZF9wa2dzIGFuZCBub3QgdW5za2lwcGVkX3BrZ3MKKyAgICAgICAgICAgICAgICBpZiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBza2lwcGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiU0tJUFBJTkcgdGhlIHBhY2thZ2UgIiArIHBrZyArICIgYXQgZG9fcm9vdGZzIGJlY2F1c2UgaXQncyAiICsgcmVjaXBlX2xpY2Vuc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignTElDRU5TRV9FWENMVVNJT04tJyArIHBrZywgMSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiB1bnNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJJTkNMVURJTkcgdGhlIHBhY2thZ2UgIiArIHBrZykKKyAgICAgICAgICAgICAgICBlbGlmIGFsbF9za2lwcGVkIG9yIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGJhZF9saWNlbnNlcyk6CisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTS0lQUElORyByZWNpcGUgJXMgYmVjYXVzZSBpdCdzICVzIiAlIChwbiwgcmVjaXBlX2xpY2Vuc2UpKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggbGljZW5zZSAlcyIgJSByZWNpcGVfbGljZW5zZSkKKyAgICAgICAgICAgIGVsaWYgcG4gaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIHBuIGluIGluY29tcGF0d2w6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQiKQorICAgICAgICAgICAgICAgIGVsaWYgcG4gaW4gaHRpbmNvbXBhdHdsOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJTkNMVURJTkcgIiArIHBuICsgIiBhcyBidWlsZGFibGUgZGVzcGl0ZSBJTkNPTVBBVElCTEVfTElDRU5TRSBiZWNhdXNlIGl0IGhhcyBiZWVuIHdoaXRlbGlzdGVkIGZvciBIT1NUVE9PTFMiKQorCisgICAgc3JjdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICMgU3ZuIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gc3VidmVyc2lvbi1uYXRpdmUKKyAgICBpZiAic3ZuOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgc3VidmVyc2lvbi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIEdpdCBwYWNrYWdlcyBzaG91bGQgREVQRU5EIG9uIGdpdC1uYXRpdmUKKyAgICBpZiAiZ2l0Oi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgZ2l0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgTWVyY3VyaWFsIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gbWVyY3VyaWFsLW5hdGl2ZQorICAgIGVsaWYgImhnOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgbWVyY3VyaWFsLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgT1NDIHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gb3NjLW5hdGl2ZQorICAgIGVsaWYgIm9zYzovLyIgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2ZldGNoJywgJ2RlcGVuZHMnLCAnIG9zYy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjICoubHo0IHNob3VsZCBkZXBlbmRzIG9uIGx6NC1uYXRpdmUgZm9yIHVucGFja2luZworICAgICMgTm90IGVuZHN3aXRoIGJlY2F1c2Ugb2YgIioucGF0Y2gubHo0O3BhdGNoPTEiLiBOZWVkIGJiLmZldGNoLmRlY29kZXVybCBpbiBmdXR1cmUKKyAgICBpZiAnLmx6NCcgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBsejQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyAqLnh6IHNob3VsZCBkZXBlbmRzIG9uIHh6LW5hdGl2ZSBmb3IgdW5wYWNraW5nCisgICAgIyBOb3QgZW5kc3dpdGggYmVjYXVzZSBvZiAiKi5wYXRjaC54ejtwYXRjaD0xIi4gTmVlZCBiYi5mZXRjaC5kZWNvZGV1cmwgaW4gZnV0dXJlCisgICAgaWYgJy54eicgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyB4ei1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjIHVuemlwLW5hdGl2ZSBzaG91bGQgYWxyZWFkeSBiZSBzdGFnZWQgYmVmb3JlIHVucGFja2luZyBaSVAgcmVjaXBlcworICAgIGlmICIuemlwIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHVuemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgZmlsZSBpcyBuZWVkZWQgYnkgcnBtMmNwaW8uc2gKKyAgICBpZiAiLnNyYy5ycG0iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgZmlsZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICBzZXRfcGFja2FnZXRyaXBsZXQoZCkKKworICAgICMgJ211bHRpbWFjaGluZScgaGFuZGxpbmcKKyAgICBtYWNoX2FyY2ggPSBkLmdldFZhcignTUFDSElORV9BUkNIJywgVHJ1ZSkKKyAgICBwa2dfYXJjaCA9IGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorCisgICAgaWYgKHBrZ19hcmNoID09IG1hY2hfYXJjaCk6CisgICAgICAgICMgQWxyZWFkeSBtYWNoaW5lIHNwZWNpZmljIC0gbm90aGluZyBmdXJ0aGVyIHRvIGRvCisgICAgICAgIHJldHVybgorCisgICAgIworICAgICMgV2UgYWx3YXlzIHRyeSB0byBzY2FuIFNSQ19VUkkgZm9yIHVybHMgd2l0aCBtYWNoaW5lIG92ZXJyaWRlcworICAgICMgdW5sZXNzIHRoZSBwYWNrYWdlIHNldHMgU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIPTAKKyAgICAjCisgICAgb3ZlcnJpZGUgPSBkLmdldFZhcignU1JDX1VSSV9PVkVSUklERVNfUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICBpZiBvdmVycmlkZSAhPSAnMCc6CisgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorICAgICAgICBtYWNoaW5lID0gZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgICAgICBmb3IgcCBpbiBmcGF0aHM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHApID09IG1hY2hpbmUgYW5kIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHApCisKKyAgICAgICAgaWYgbGVuKHBhdGhzKSAhPSAwOgorICAgICAgICAgICAgZm9yIHMgaW4gc3JjdXJpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NdLCBkKQorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2hlci5sb2NhbHBhdGgocykKKyAgICAgICAgICAgICAgICBmb3IgbXAgaW4gcGF0aHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsLnN0YXJ0c3dpdGgobXApOgorICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIm92ZXJyaWRpbmcgUEFDS0FHRV9BUkNIIGZyb20gJXMgdG8gJXMgZm9yICVzIiAlIChwa2dfYXJjaCwgbWFjaF9hcmNoLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIXyVzIiAlIHBrZywgVHJ1ZSkKKworICAgICAgICAjIFdlIGNvdWxkIGxvb2sgZm9yICE9IFBBQ0tBR0VfQVJDSCBoZXJlIGJ1dCBob3cgdG8gY2hvb3NlCisgICAgICAgICMgaWYgbXVsdGlwbGUgZGlmZmVyZW5jZXMgYXJlIHByZXNlbnQ/CisgICAgICAgICMgTG9vayB0aHJvdWdoIFBBQ0tBR0VfQVJDSFMgZm9yIHRoZSBwcmlvcml0eSBvcmRlcj8KKyAgICAgICAgaWYgcGtnYXJjaCBhbmQgcGtnYXJjaCA9PSBtYWNoX2FyY2g6CisgICAgICAgICAgICBkLnNldFZhcignUEFDS0FHRV9BUkNIJywgIiR7TUFDSElORV9BUkNIfSIpCisgICAgICAgICAgICBiYi53YXJuKCJSZWNpcGUgJXMgaXMgbWFya2VkIGFzIG9ubHkgYmVpbmcgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJ1dCBzZWVtcyB0byBoYXZlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXM/ISBUaGUgcmVjaXBlIG1heSBhcyB3ZWxsIG1hcmsgaXRzZWxmIGFzIG1hY2hpbmUgc3BlY2lmaWMgZGlyZWN0bHkuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorfQorCithZGR0YXNrIGNsZWFuc3N0YXRlIGFmdGVyIGRvX2NsZWFuCitweXRob24gZG9fY2xlYW5zc3RhdGUoKSB7CisgICAgICAgIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGVzKGQpCit9CisKK2FkZHRhc2sgY2xlYW5hbGwgYWZ0ZXIgZG9fY2xlYW5zc3RhdGUKK3B5dGhvbiBkb19jbGVhbmFsbCgpIHsKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgICAgZmV0Y2hlci5jbGVhbigpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9Citkb19jbGVhbmFsbFtub3N0YW1wXSA9ICIxIgorCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZmV0Y2ggZG9fdW5wYWNrIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwgZG9fcGFja2FnZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTJiNzViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Jpbl9wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAorIworIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29tbW9uIHZhcmlhYmxlIGFuZCB0YXNrIGZvciB0aGUgYmluYXJ5IHBhY2thZ2UgcmVjaXBlLgorIyBCYXNpYyBwcmluY2lwbGU6CisjICogVGhlIGZpbGVzIGhhdmUgYmVlbiB1bnBhY2tlZCB0byAke1N9IGJ5IGJhc2UuYmJjbGFzcworIyAqIFNraXAgZG9fY29uZmlndXJlIGFuZCBkb19jb21waWxlCisjICogVXNlIGRvX2luc3RhbGwgdG8gaW5zdGFsbCB0aGUgZmlsZXMgdG8gJHtEfQorIworIyBOb3RlOgorIyBUaGUgInN1YmRpciIgcGFyYW1ldGVyIGluIHRoZSBTUkNfVVJJIGlzIHVzZWZ1bCB3aGVuIHRoZSBpbnB1dCBwYWNrYWdlCisjIGlzIHJwbSwgaXBrLCBkZWIgYW5kIHNvIG9uLCBmb3IgZXhhbXBsZToKKyMKKyMgU1JDX1VSSSA9ICJodHRwOi8vZm9vLmNvbS9mb28tMS4wLXIxLmk1ODYucnBtO3N1YmRpcj1mb28tMS4wIgorIworIyBUaGVuIHRoZSBmaWxlcyB3b3VsZCBiZSB1bnBhY2tlZCB0byAke1dPUktESVJ9L2Zvby0xLjAsIG90aGVyd2lzZQorIyB0aGV5IHdvdWxkIGJlIGluICR7V09SS0RJUn0uCisjCisKKyMgU2tpcCB0aGUgdW53YW50ZWQgc3RlcHMKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworIyBJbnN0YWxsIHRoZSBmaWxlcyB0byAke0R9CitiaW5fcGFja2FnZV9kb19pbnN0YWxsICgpIHsKKyAgICAjIERvIGl0IGNhcmVmdWxseQorICAgIFsgLWQgIiR7U30iIF0gfHwgZXhpdCAxCisgICAgY2QgJHtTfSB8fCBleGl0IDEKKyAgICB0YXIgLS1uby1zYW1lLW93bmVyIC0tZXhjbHVkZT0nLi9wYXRjaGVzJyAtLWV4Y2x1ZGU9Jy4vLnBjJyAtY3BmIC0gLiBcCisgICAgICAgIHwgdGFyIC0tbm8tc2FtZS1vd25lciAteHBmIC0gLUMgJHtEfQorfQorCitGSUxFU18ke1BOfSA9ICIvIgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9iaW5jb25maWctZGlzYWJsZWQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9iaW5jb25maWctZGlzYWJsZWQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDJhNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgQ2xhc3MgdG8gZGlzYWJsZSBiaW5jb25maWcgZmlsZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIHRoZW0KKyMKKworIyBUaGUgbGlzdCBvZiBzY3JpcHRzIHdoaWNoIHNob3VsZCBiZSBkaXNhYmxlZC4KK0JJTkNPTkZJRyA/PSAiIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS8qLWNvbmZpZyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJIyBNYWtlIHRoZSBkaXNhYmxlZCBzY3JpcHQgZW1pdCBpbnZhbGlkIHBhcmFtZXRlcnMgZm9yIHRob3NlIGNvbmZpZ3VyZQorCQkjIHNjcmlwdHMgd2hpY2ggY2FsbCBpdCB3aXRob3V0IGNoZWNraW5nIHRoZSByZXR1cm4gY29kZS4KKwkJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0keAorCQllY2hvICJlY2hvICdFUlJPUjogJHggc2hvdWxkIG5vdCBiZSB1c2VkLCB1c2UgYW4gYWx0ZXJuYXRpdmUgc3VjaCBhcyBwa2ctY29uZmlnJyA+JjIiID4+ICR7RH0keAorCQllY2hvICJlY2hvICctLXNob3VsZC1ub3QtaGF2ZS11c2VkLSR4JyIgPj4gJHtEfSR4CisJCWVjaG8gImV4aXQgMSIgPj4gJHtEfSR4CisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImJpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2JpbmNvbmZpZ19kaXNhYmxlZF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWZvciB4IGluICR7QklOQ09ORklHfTsgZG8KKwkJY29uZmlnbmFtZT1gYmFzZW5hbWUgJHhgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlpbnN0YWxsICR7RH0keCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzQxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw2MyBAQAorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vKi1jb25maWciCisgCisjIFRoZSBuYW1lc3BhY2VzIGNhbiBjbGFzaCBoZXJlIGhlbmNlIHRoZSB0d28gc3RlcCByZXBsYWNlCitkZWYgZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCk6CisgICAgcyA9ICItZSAnJyIKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIG9wdGlvbmFsX3F1b3RlID0gciJcKFwiXD9cKSIKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7YmFzZV9saWJkaXJ9Oj1cXDFPRUJBU0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7bGliZGlyfTo9XFwxT0VMSUJESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7aW5jbHVkZWRpcn06PVxcMU9FSU5DRElSOjsnIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczo9JXMke2RhdGFkaXJ9Oj1cXDFPRURBVEFESVI6JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtwcmVmaXh9Lzo9XFwxT0VQUkVGSVgvOiciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7ZXhlY19wcmVmaXh9Lzo9XFwxT0VFWEVDUFJFRklYLzonIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7bGliZGlyfTotTE9FTElCRElSOjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6LUkke2luY2x1ZGVkaXJ9Oi1JT0VJTkNESVI6OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUJBU0VMSUJESVI6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VMSUJESVI6JHtTVEFHSU5HX0xJQkRJUn06OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUlOQ0RJUjoke1NUQUdJTkdfSU5DRElSfTo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FREFUQURJUjoke1NUQUdJTkdfREFUQURJUn06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FUFJFRklYOiR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FRVhFQ1BSRUZJWDoke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOi1JJHtXT1JLRElSfTotSSR7U1RBR0lOR19JTkNESVJ9OiciCisgICAgICAgIHMgKz0gIiAtZSAnczotTCR7V09SS0RJUn06LUwke1NUQUdJTkdfTElCRElSfTonIgorICAgICAgICBpZiBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpOgorICAgICAgICAgICAgcyArPSBiYi5kYXRhLmdldFZhcigiT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSIsIGQpCisKKyAgICByZXR1cm4gcworCitCSU5DT05GSUdfR0xPQiA/PSAiKi1jb25maWciCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1BLR0R9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisgICAgICAgICAgICAgICAgICAgICRjb25maWcKKwlkb25lCisJZm9yIGxhZmlsZSBpbiBgZmluZCAke1BLR0R9IC1uYW1lICIqLmxhImAgOyBkbworCQlzZWQgLWkgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0JBU0VMSUJESVJ9OiR7YmFzZV9saWJkaXJ9Omc7JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfTElCRElSfToke2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19JTkNESVJ9OiR7aW5jbHVkZWRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19EQVRBRElSfToke2RhdGFkaXJ9OicgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fToke3ByZWZpeH06JyBcCisJCSAgICAkbGFmaWxlCisJZG9uZQkgICAgCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZm9yIGNvbmZpZyBpbiBgZmluZCAke1N9IC1uYW1lICcke0JJTkNPTkZJR19HTE9CfSdgIGBmaW5kICR7Qn0gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2A7IGRvCisJCWNvbmZpZ25hbWU9YGJhc2VuYW1lICRjb25maWdgCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCQlzZWQgJHtAZ2V0X2JpbmNvbmZpZ19tYW5nbGUoZCl9ICRjb25maWcgPiAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJCWNobW9kIHUreCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyRjb25maWduYW1lCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2JsYWNrbGlzdC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2JsYWNrbGlzdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTQxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MKQEAgLTAsMCArMSw0NSBAQAorIyBhbm9ueW1vdXMgc3VwcG9ydCBjbGFzcyBmcm9tIG9yaWdpbmFsbHkgZnJvbSBhbmdzdHJvbQorIyAKKyMgVG8gdXNlIHRoZSBibGFja2xpc3QsIGEgZGlzdHJpYnV0aW9uIHNob3VsZCBpbmNsdWRlIHRoaXMKKyMgY2xhc3MgaW4gdGhlIElOSEVSSVRfRElTVFJPCisjCisjIE5vIGxvbmdlciB1c2UgQU5HU1RST01fQkxBQ0tMSVNULCBpbnN0ZWFkIHVzZSBhIHRhYmxlIG9mCisjIHJlY2lwZXMgaW4gUE5CTEFDS0xJU1QKKyMKKyMgRmVhdHVyZXM6CisjCisjICogVG8gYWRkIGEgcGFja2FnZSB0byB0aGUgYmxhY2tsaXN0LCBzZXQ6CisjICAgUE5CTEFDS0xJU1RbcG5dID0gIm1lc3NhZ2UiCisjCisKKyMgQ29wZSB3aXRoIFBOQkxBQ0tMSVNUIGZsYWdzIGZvciBtdWx0aWxpYiBjYXNlCithZGRoYW5kbGVyIGJsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXIKK2JsYWNrbGlzdF9tdWx0aWxpYl9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCitweXRob24gYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcigpIHsKKyAgICBtdWx0aWxpYnMgPSBlLmRhdGEuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBtdWx0aWxpYnM6CisgICAgICAgIHJldHVybgorCisgICAgIyB0aGlzIGJsb2NrIGhhcyBiZWVuIGNvcGllZCBmcm9tIGJhc2UuYmJjbGFzcyBzbyBrZWVwIGl0IGluIHN5bmMKKyAgICBwcmVmaXhlcyA9IFtdCisgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgIHByZWZpeGVzLmFwcGVuZChlZXh0WzFdKQorCisgICAgYmxhY2tsaXN0cyA9IGUuZGF0YS5nZXRWYXJGbGFncygnUE5CTEFDS0xJU1QnKSBvciB7fQorICAgIGZvciBwa2csIHJlYXNvbiBpbiBibGFja2xpc3RzLml0ZW1zKCk6CisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgoIi1uYXRpdmUiLCAiLWNyb3Nzc2RrIikpIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSkgb3IgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwa2c6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIG5ld3BrZyA9IHAgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBuZXdwa2csIFRydWUpOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgcmVhc29uKQorfQorCitweXRob24gKCkgeworICAgIGJsYWNrbGlzdCA9IGQuZ2V0VmFyRmxhZygnUE5CTEFDS0xJU1QnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgVHJ1ZSkKKworICAgIGlmIGJsYWNrbGlzdDoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlJlY2lwZSBpcyBibGFja2xpc3RlZDogJXMiICUgKGJsYWNrbGlzdCkpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmx1ZXRvb3RoLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmx1ZXRvb3RoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4YjRhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACisjIEF2b2lkIGNvZGUgZHVwbGljYXRpb24gaW4gYmx1ZXRvb3RoLWRlcGVuZGVudCByZWNpcGVzLgorCisjIERlZmluZSBhIHZhcmlhYmxlIHRoYXQgZXhwYW5kcyB0byB0aGUgcmVjaXBlIChwYWNrYWdlKSBwcm92aWRpbmcgY29yZQorIyBibHVldG9vdGggc3VwcG9ydCBvbiB0aGUgcGxhdGZvcm06CisjICIiIGlmIGJsdWV0b290aCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisjIGVsc2UgImJsdWV6NSIgaWYgYmx1ZXo1IGlzIGluIERJU1RST19GRUFUVVJFUworIyBlbHNlICJibHVlejQiCisKKyMgVXNlIHRoaXMgd2l0aDoKKyMgIGluaGVyaXQgYmx1ZXRvb3RoCisjICBQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9CisjICBQQUNLQUdFQ09ORklHW2JsdWV6NF0gPSAiLS1lbmFibGUtYmx1ZXo0LC0tZGlzYWJsZS1ibHVlejQsYmx1ZXo0IgorCitCTFVFWiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV6NScsICdibHVlejUnLCAnYmx1ZXo0JywgZCksICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYm9vdC1kaXJlY3RkaXNrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYm9vdC1kaXJlY3RkaXNrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwZTIxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcwpAQCAtMCwwICsxLDE5NCBAQAorIyBib290LWRpcmVjdGRpc2suYmJjbGFzcworIyAobG9vc2x5IGJhc2VkIG9mZiBib290aW1nLmJiY2xhc3MgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuKQorIworIyBDcmVhdGUgYW4gaW1hZ2Ugd2hpY2ggY2FuIGJlIHBsYWNlZCBkaXJlY3RseSBvbnRvIGEgaGFyZGRpc2sgdXNpbmcgZGQgYW5kIHRoZW4KKyMgYm9vdGVkLgorIworIyBUaGlzIHVzZXMgc3lzbGludXguIGV4dGxpbnV4IHdvdWxkIGhhdmUgYmVlbiBuaWNlIGJ1dCByZXF1aXJlZCB0aGUgZXh0Mi8zIAorIyBwYXJ0aXRpb24gdG8gYmUgbW91bnRlZC4gZ3J1YiByZXF1aXJlcyB0byBydW4gaXRzZWxmIGFzIHBhcnQgb2YgdGhlIGluc3RhbGwgCisjIHByb2Nlc3MuCisjCisjIFRoZSBlbmQgcmVzdWx0IGlzIGEgNTEyIGJvb3Qgc2VjdG9yIHBvcHVsYXRlZCB3aXRoIGFuIE1CUiBhbmQgcGFydGl0aW9uIHRhYmxlCisjIGZvbGxvd2VkIGJ5IGFuIG1zZG9zIGZhdDE2IHBhcnRpdGlvbiBjb250YWluaW5nIHN5c2xpbnV4IGFuZCBhIGxpbnV4IGtlcm5lbAorIyBjb21wbGV0ZWQgYnkgdGhlIGV4dDIvMyByb290ZnMuCisjCisjIFdlIGhhdmUgdG8gcHVzaCB0aGUgbXNkb3MgcGFyaXRpb24gdGFibGUgc2l6ZSA+IDE2TUIgc28gZmF0IDE2IGlzIHVzZWQgYXMgcGFydGVkCisjIHdvbid0IHRvdWNoIGZhdDEyIHBhcnRpdGlvbnMuCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzIG5lZWRlZAorCisjICR7Uk9PVEZTfSAtIHRoZSByb290ZnMgaW1hZ2UgdG8gaW5jb3Jwb3JhdGUKKworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gImRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwva2VybmVsOmRvX2RlcGxveSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXg6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRlZC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290ICIKKworUEFDS0FHRVMgPSAiICIKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitCT09URERfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09URERfRVhUUkFfU1BBQ0UgPz0gIjE2Mzg0IgorCitFRkkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIjEiLCAiMCIsIGQpfSIKK0VGSV9QUk9WSURFUiA/PSAiZ3J1Yi1lZmkiCitFRklfQ0xBU1MgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZWZpIiwgIiR7RUZJX1BST1ZJREVSfSIsICIiLCBkKX0iCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK2RlZiBwY2Jpb3NfY2xhc3MoZCk6CisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgcmV0dXJuICJzeXNsaW51eCIKKyAgICByZXR1cm4gIiIKKworUENCSU9TID0gIiR7QHBjYmlvcyhkKX0iCitQQ0JJT1NfQ0xBU1MgPSAiJHtAcGNiaW9zX2NsYXNzKGQpfSIKKworaW5oZXJpdCAke1BDQklPU19DTEFTU30KK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKKyMgR2V0IHRoZSBidWlsZF9zeXNsaW51eF9jZmcoKSBmdW5jdGlvbiBmcm9tIHRoZSBzeXNsaW51eCBjbGFzcworCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitESVNLX1NJR05BVFVSRSA/PSAiJHtESVNLX1NJR05BVFVSRV9HRU5FUkFURUR9IgorU1lTTElOVVhfUk9PVCA/PSAicm9vdD0vZGV2L3NkYTIiCitTWVNMSU5VWF9USU1FT1VUID89ICIxMCIKKworSVNfVk0gPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GU1RZUEVTIiwgWyJ2bWRrIiwgInZkaSIsICJxY293MiJdLCAidHJ1ZSIsICJmYWxzZSIsIGQpfScKKworYm9vdF9kaXJlY3RfcG9wdWxhdGUoKSB7CisJZGVzdD0kMQorCWluc3RhbGwgLWQgJGRlc3QKKworCSMgSW5zdGFsbCBiekltYWdlLCBpbml0cmQsIGFuZCByb290ZnMuaW1nIGluIERFU1QgZm9yIGFsbCBsb2FkZXJzIHRvIHVzZS4KKwlpZiBbIC1lICR7REVQTE9ZX0RJUl9JTUFHRX0vYnpJbWFnZSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9L2J6SW1hZ2UgJGRlc3Qvdm1saW51egorCWZpCisKKwkjIGluaXRyZCBpcyBtYWRlIG9mIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlpZiBbIC1uICIke0lOSVRSRH0iIF07IHRoZW4KKwkJcm0gLWYgJGRlc3QvaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICRkZXN0L2luaXRyZAorCQkJZWxzZQorCQkJCWJiZmF0YWwgIiR7ZnN9IGlzIGludmFsaWQuIGluaXRyZCBpbWFnZSBjcmVhdGlvbiBmYWlsZWQuIgorCQkJZmkKKwkJZG9uZQorCQljaG1vZCAwNjQ0ICRkZXN0L2luaXRyZAorCWZpCit9CisKK2J1aWxkX2Jvb3RfZGQoKSB7CisJSERERElSPSIke1N9L2hkZC9ib290IgorCUhERElNRz0iJHtTfS9oZGQuaW1hZ2UiCisJSU1BR0U9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdAorCisJYm9vdF9kaXJlY3RfcG9wdWxhdGUgJEhERERJUgorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKwlpZiBbICIke0VGSX0iID0gIjEiIF07IHRoZW4KKwkJZWZpX2hkZGltZ19wb3B1bGF0ZSAkSERERElSCisJZmkKKworCWlmIFsgIiR7SVNfVk19IiA9ICJ0cnVlIiBdOyB0aGVuCisJCWlmIFsgIngke0FVVE9fU1lTTElOVVhNRU5VfSIgPSAieDEiIF0gOyB0aGVuCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS91c3Ivc2hhcmUvc3lzbGludXgvdmVzYW1lbnUuYzMyICRIRERESVIvJHtTWVNMSU5VWERJUn0vCisJCQlpZiBbICJ4JHtTWVNMSU5VWF9TUExBU0h9IiAhPSAieCIgXSA7IHRoZW4KKwkJCQlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWF9TUExBU0h9ICRIRERESVIvJHtTWVNMSU5VWERJUn0vc3BsYXNoLmxzcworCQkJZmkKKwkJZmkKKwlmaQorCisJQkxPQ0tTPWBkdSAtYmtzICRIRERESVIgfCBjdXQgLWYgMWAKKwlCTE9DS1M9YGV4cHIgJEJMT0NLUyArICR7Qk9PVEREX0VYVFJBX1NQQUNFfWAKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwlta2Rvc2ZzIC1uICR7Qk9PVEREX1ZPTFVNRV9JRH0gLVMgNTEyIC1DICRIRERJTUcgJEJMT0NLUyAKKwltY29weSAtaSAkSERESU1HIC1zICRIRERESVIvKiA6Oi8KKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlzeXNsaW51eF9oZGRkaXJlY3RfaW5zdGFsbCAkSERESU1HCisJZmkJCisJY2htb2QgNjQ0ICRIRERJTUcKKworCVJPT1RGU0JMT0NLUz1gZHUgLUxia3MgJHtST09URlN9IHwgY3V0IC1mIDFgCisJVE9UQUxTSVpFPWBleHByICRCTE9DS1MgKyAkUk9PVEZTQkxPQ0tTYAorCUVORDE9YGV4cHIgJEJMT0NLUyBcKiAxMDI0YAorCUVORDI9YGV4cHIgJEVORDEgKyA1MTJgCisJRU5EMz1gZXhwciBcKCAkUk9PVEZTQkxPQ0tTIFwqIDEwMjQgXCkgKyAkRU5EMWAKKworCWVjaG8gJFJPT1RGU0JMT0NLUyAkVE9UQUxTSVpFICRFTkQxICRFTkQyICRFTkQzCisJcm0gLXJmICRJTUFHRQorCWRkIGlmPS9kZXYvemVybyBvZj0kSU1BR0UgYnM9MTAyNCBzZWVrPSRUT1RBTFNJWkUgY291bnQ9MQorCisJcGFydGVkICRJTUFHRSBta2xhYmVsIG1zZG9zCisJcGFydGVkICRJTUFHRSBta3BhcnQgcHJpbWFyeSBmYXQxNiAwICR7RU5EMX1CCisJcGFydGVkICRJTUFHRSB1bml0IEIgbWtwYXJ0IHByaW1hcnkgZXh0MiAke0VORDJ9QiAke0VORDN9QgorCXBhcnRlZCAkSU1BR0Ugc2V0IDEgYm9vdCBvbiAKKworCXBhcnRlZCAkSU1BR0UgcHJpbnQKKworCWF3ayAiQkVHSU4geyBwcmludGYgXCIkKGVjaG8gJHtESVNLX1NJR05BVFVSRX0gfCBmb2xkIC13IDIgfCB0YWMgfCBwYXN0ZSAtc2QgJycgfCBzZWQgJ3MvXCguLlwpL1xceCYvZycpXCIgfSIgfCBcCisJCWRkIG9mPSRJTUFHRSBicz0xIHNlZWs9NDQwIGNvbnY9bm90cnVuYworCisJT0ZGU0VUPWBleHByICRFTkQyIC8gNTEyYAorCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQlkZCBpZj0ke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbWJyLmJpbiBvZj0kSU1BR0UgY29udj1ub3RydW5jCisJZmkKKworCWRkIGlmPSRIRERJTUcgb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPTEgYnM9NTEyCisJZGQgaWY9JHtST09URlN9IG9mPSRJTUFHRSBjb252PW5vdHJ1bmMgc2Vlaz0kT0ZGU0VUIGJzPTUxMgorCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorCWxuIC1zICR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGRpcmVjdAorfSAKKworcHl0aG9uIGRvX2Jvb3RkaXJlY3RkaXNrKCkgeworICAgIHZhbGlkYXRlX2Rpc2tfc2lnbmF0dXJlKGQpCisgICAgaWYgZC5nZXRWYXIoIlBDQklPUyIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9zeXNsaW51eF9jZmcnLCBkKQorICAgIGlmIGQuZ2V0VmFyKCJFRkkiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfZWZpX2NmZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9ib290X2RkJywgZCkKK30KKworZGVmIGdlbmVyYXRlX2Rpc2tfc2lnbmF0dXJlKCk6CisgICAgaW1wb3J0IHV1aWQKKworICAgIHNpZ25hdHVyZSA9IHN0cih1dWlkLnV1aWQ0KCkpWzo4XQorCisgICAgaWYgc2lnbmF0dXJlICE9ICcwMDAwMDAwMCc6CisgICAgICAgIHJldHVybiBzaWduYXR1cmUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2ZmZmZmZmZmJworCitkZWYgdmFsaWRhdGVfZGlza19zaWduYXR1cmUoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBkaXNrX3NpZ25hdHVyZSA9IGQuZ2V0VmFyKCJESVNLX1NJR05BVFVSRSIsIFRydWUpCisKKyAgICBpZiBub3QgcmUubWF0Y2gocideWzAtOWEtZkEtRl17OH0kJywgZGlza19zaWduYXR1cmUpOgorICAgICAgICBiYi5mYXRhbCgiRElTS19TSUdOQVRVUkUgJyVzJyBtdXN0IGJlIGFuIDggZGlnaXQgaGV4IHN0cmluZyIgJSBkaXNrX3NpZ25hdHVyZSkKKworRElTS19TSUdOQVRVUkVfR0VORVJBVEVEIDo9ICIke0BnZW5lcmF0ZV9kaXNrX3NpZ25hdHVyZSgpfSIKKworYWRkdGFzayBib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ib290aW1nLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYm9vdGltZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOWQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYm9vdGltZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzAzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCisjIENyZWF0ZXMgYSBib290YWJsZSBpbWFnZSB1c2luZyBzeXNsaW51eCwgeW91ciBrZXJuZWwgYW5kIGFuIG9wdGlvbmFsCisjIGluaXRyZAorCisjCisjIEVuZCByZXN1bHQgaXMgdHdvIHRoaW5nczoKKyMKKyMgMS4gQSAuaGRkaW1nIGZpbGUgd2hpY2ggaXMgYW4gbXNkb3MgZmlsZXN5c3RlbSBjb250YWluaW5nIHN5c2xpbnV4LCBhIGtlcm5lbCwKKyMgYW4gaW5pdHJkIGFuZCBhIHJvb3RmcyBpbWFnZS4gVGhlc2UgY2FuIGJlIHdyaXR0ZW4gdG8gaGFyZGRpc2tzIGRpcmVjdGx5IGFuZAorIyBhbHNvIGJvb3RlZCBvbiBVU0IgZmxhc2ggZGlza3MgKHdyaXRlIHRoZW0gdGhlcmUgd2l0aCBkZCkuCisjCisjIDIuIEEgQ0QgLmlzbyBpbWFnZQorCisjIEJvb3QgcHJvY2VzcyBpcyB0aGF0IHRoZSBpbml0cmQgd2lsbCBib290IGFuZCBwcm9jZXNzIHdoaWNoIGxhYmVsIHdhcyBzZWxlY3RlZAorIyBpbiBzeXNsaW51eC4gQWN0aW9ucyBiYXNlZCBvbiB0aGUgbGFiZWwgYXJlIHRoZW4gcGVyZm9ybWVkIChlLmcuIGluc3RhbGxpbmcgdG8KKyMgYW4gaGRkKQorCisjIEV4dGVybmFsIHZhcmlhYmxlcyAoYWxzbyB1c2VkIGJ5IHN5c2xpbnV4LmJiY2xhc3MpCisjICR7SU5JVFJEfSAtIGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0cmQgKG9wdGlvbmFsKQorIyAke0NPTVBSRVNTSVNPfSAtIFRyYW5zcGFyZW50IGNvbXByZXNzIElTTywgcmVkdWNlIHNpemUgfjQwJSBpZiBzZXQgdG8gMQorIyAke05PSVNPfSAgLSBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UgaWYgc2V0IHRvIDEKKyMgJHtOT0hERH0gIC0gc2tpcCBidWlsZGluZyB0aGUgSEREIGltYWdlIGlmIHNldCB0byAxCisjICR7SERESU1HX0lEfSAtIEZBVCBpbWFnZSB2b2x1bWUtaWQKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICJkb3Nmc3Rvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG10b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICBjZHJ0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsL2tlcm5lbDpkb19kZXBsb3kgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtAb2UudXRpbHMuaWZlbHNlKGQuZ2V0VmFyKCdDT01QUkVTU0lTTycsIEZhbHNlKSwnemlzb2ZzLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JywnJyl9IgorCitQQUNLQUdFUyA9ICIgIgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0hERERJUiA9ICIke1N9L2hkZGltZyIKK0lTT0RJUiA9ICIke1N9L2lzbyIKK0VGSUlNR0RJUiA9ICIke1N9L2VmaV9pbWciCitDT01QQUNUX0lTT0RJUiA9ICIke1N9L2lzby56IgorQ09NUFJFU1NJU08gPz0gIjAiCisKK0JPT1RJTUdfVk9MVU1FX0lEICAgPz0gImJvb3QiCitCT09USU1HX0VYVFJBX1NQQUNFID89ICI1MTIiCisKK0VGSSA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMSIsICIwIiwgZCl9IgorRUZJX1BST1ZJREVSID89ICJncnViLWVmaSIKK0VGSV9DTEFTUyA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiJHtFRklfUFJPVklERVJ9IiwgIiIsIGQpfSIKKworS0VSTkVMX0lNQUdFVFlQRSA/Pz0gImJ6SW1hZ2UiCisKKyMgSW5jbHVkZSBsZWdhY3kgYm9vdCBpZiBNQUNISU5FX0ZFQVRVUkVTIGluY2x1ZGVzICJwY2Jpb3MiIG9yIGlmIGl0IGRvZXMgbm90CisjIGNvbnRhaW4gImVmaSIuIFRoaXMgd2F5IGxlZ2FjeSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpZiBuZWl0aGVyIGlzCisjIHNwZWNpZmllZCwgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJlaGF2aW9yLgorZGVmIHBjYmlvcyhkKToKKyAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY2Jpb3MiLCAiMSIsICIwIiwgZCkKKyAgICBpZiBwY2Jpb3MgPT0gIjAiOgorICAgICAgICBwY2Jpb3MgPSBiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMCIsICIxIiwgZCkKKyAgICByZXR1cm4gcGNiaW9zCisKK1BDQklPUyA9ICIke0BwY2Jpb3MoZCl9IgorCisjIFRoZSBzeXNsaW51eCBpcyByZXF1aXJlZCBmb3IgdGhlIGlzb2h5YnJpZCBjb21tYW5kIGFuZCBib290IGNhdGFsb2cKK2luaGVyaXQgc3lzbGludXgKK2luaGVyaXQgJHtFRklfQ0xBU1N9CisKK3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlpbnN0YWxsIC1kICR7REVTVH0KKworCSMgSW5zdGFsbCBrZXJuZWwsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgorCWluc3RhbGwgLW0gMDY0NCAke0RFUExPWV9ESVJfSU1BR0V9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtERVNUfS92bWxpbnV6CisJCisJIyBpbml0cmQgaXMgbWFkZSBvZiBjb25jYXRlbmF0aW9uIG9mIG11bHRpcGxlIGZpbGVzeXN0ZW0gaW1hZ2VzCisJaWYgWyAtbiAiJHtJTklUUkR9IiBdOyB0aGVuCisJCXJtIC1mICR7REVTVH0vaW5pdHJkCisJCWZvciBmcyBpbiAke0lOSVRSRH0KKwkJZG8KKwkJCWlmIFsgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQkJY2F0ICR7ZnN9ID4+ICR7REVTVH0vaW5pdHJkCisJCQllbHNlCisJCQkJYmJmYXRhbCAiJHtmc30gaXMgaW52YWxpZC4gaW5pdHJkIGltYWdlIGNyZWF0aW9uIGZhaWxlZC4iCisJCQlmaQorCQlkb25lCisJCWNobW9kIDA2NDQgJHtERVNUfS9pbml0cmQKKwlmaQorCisJaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtST09URlN9ICR7REVTVH0vcm9vdGZzLmltZworCWZpCisKK30KKworYnVpbGRfaXNvKCkgeworCSMgT25seSBjcmVhdGUgYW4gSVNPIGlmIHdlIGhhdmUgYW4gSU5JVFJEIGFuZCBOT0lTTyB3YXMgbm90IHNldAorCWlmIFsgLXogIiR7SU5JVFJEfSIgXSB8fCBbICIke05PSVNPfSIgPSAiMSIgXTsgdGhlbgorCQliYm5vdGUgIklTTyBpbWFnZSB3aWxsIG5vdCBiZSBjcmVhdGVkLiIKKwkJcmV0dXJuCisJZmkKKwkjICR7SU5JVFJEfSBpcyBhIGxpc3Qgb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlmb3IgZnMgaW4gJHtJTklUUkR9CisJZG8KKwkJaWYgWyAhIC1zICIke2ZzfSIgXTsgdGhlbgorCQkJYmJub3RlICJJU08gaW1hZ2Ugd2lsbCBub3QgYmUgY3JlYXRlZC4gJHtmc30gaXMgaW52YWxpZC4iCisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisKKworCXBvcHVsYXRlICR7SVNPRElSfQorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2lzb19wb3B1bGF0ZSAke0lTT0RJUn0KKwlmaQorCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQllZmlfaXNvX3BvcHVsYXRlICR7SVNPRElSfQorCQlidWlsZF9mYXRfaW1nICR7RUZJSU1HRElSfSAke0lTT0RJUn0vZWZpLmltZworCWZpCisKKwkjIEVGSSBvbmx5CisJaWYgWyAiJHtQQ0JJT1N9IiAhPSAiMSIgXSAmJiBbICIke0VGSX0iID0gIjEiIF0gOyB0aGVuCisJCSMgV29yayBhcm91bmQgYnVnIGluIGlzb2h5YnJpZCB3aGVyZSBpdCByZXF1aXJlcyBpc29saW51eC5iaW4KKwkJIyBJbiB0aGUgYm9vdCBjYXRhbG9nLCBldmVuIHRob3VnaCBpdCBpcyBub3QgdXNlZAorCQlta2RpciAtcCAke0lTT0RJUn0vJHtJU09MSU5VWERJUn0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJHtJU09ESVJ9JHtJU09MSU5VWERJUn0KKwlmaQorCisJaWYgWyAiJHtDT01QUkVTU0lTT30iID0gIjEiIF0gOyB0aGVuCisJCSMgY3JlYXRlIGNvbXBhY3QgZGlyZWN0b3J5LCBjb21wcmVzcyBpc28KKwkJbWtkaXIgLXAgJHtDT01QQUNUX0lTT0RJUn0KKwkJbWt6ZnRyZWUgLXogOSAtcCA0IC1GICR7SVNPRElSfS9yb290ZnMuaW1nICR7Q09NUEFDVF9JU09ESVJ9L3Jvb3Rmcy5pbWcKKworCQkjIG1vdmUgY29tcGFjdCBpc28gdG8gaXNvLCB0aGVuIHJlbW92ZSBjb21wYWN0IGRpcmVjdG9yeQorCQltdiAke0NPTVBBQ1RfSVNPRElSfS9yb290ZnMuaW1nICR7SVNPRElSfS9yb290ZnMuaW1nCisJCXJtIC1SZiAke0NPTVBBQ1RfSVNPRElSfQorCQlta2lzb2ZzX2NvbXByZXNzX29wdHM9Ii1SIC16IC1EIC1sIgorCWVsc2UKKwkJbWtpc29mc19jb21wcmVzc19vcHRzPSItciIKKwlmaQorCisJIyBDaGVjayB0aGUgc2l6ZSBvZiAke0lTT0RJUn0vcm9vdGZzLmltZywgdXNlIG1raXNvZnMgLWlzby1sZXZlbCAzCisJIyB3aGVuIGl0IGV4Y2VlZHMgMy44R0IsIHRoZSBzcGVjaWZpY2F0aW9uIGlzIDRHIC0gMSBieXRlcywgd2UgbmVlZAorCSMgbGVhdmUgYSBmZXcgc3BhY2UgZm9yIG90aGVyIGZpbGVzLgorCW1raXNvZnNfaXNvX2xldmVsPSIiCisKKyAgICAgICAgaWYgWyAtbiAiJHtST09URlN9IiBdICYmIFsgLXMgIiR7Uk9PVEZTfSIgXTsgdGhlbgorCQlyb290ZnNfaW1nX3NpemU9YHN0YXQgLWMgJyVzJyAke0lTT0RJUn0vcm9vdGZzLmltZ2AKKwkJIyA0MDgwMjE4OTMxID0gMy44ICogMTAyNCAqIDEwMjQgKiAxMDI0CisJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgNDA4MDIxODkzMSBdOyB0aGVuCisJCQliYm5vdGUgIiR7SVNPRElSfS9yb290ZnMuaW1nIGV4ZWNlZWRzIDMuOEdCLCB1c2luZyAnLWlzby1sZXZlbCAzJyBmb3IgbWtpc29mcyIKKwkJCW1raXNvZnNfaXNvX2xldmVsPSItaXNvLWxldmVsIDMiCisJCWZpCisJZmkKKworCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXSAmJiBbICIke0VGSX0iICE9ICIxIiBdIDsgdGhlbgorCQkjIFBDQklPUyBvbmx5IG1lZGlhCisJCW1raXNvZnMgLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyBcCisJCQkke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsICR7SVNPRElSfQorCWVsc2UKKwkJIyBFRkkgb25seSBPUiBFRkkrUENCSU9TCisJCW1raXNvZnMgLUEgJHtCT09USU1HX1ZPTFVNRV9JRH0gLVYgJHtCT09USU1HX1ZPTFVNRV9JRH0gXAorCQkgICAgICAgIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28gXAorCQkJLWIgJHtJU09fQk9PVElNR30gLWMgJHtJU09fQk9PVENBVH0gXAorCQkJJG1raXNvZnNfY29tcHJlc3Nfb3B0cyAke01LSVNPRlNfT1BUSU9OU30gJG1raXNvZnNfaXNvX2xldmVsIFwKKwkJCS1lbHRvcml0by1hbHQtYm9vdCAtZWx0b3JpdG8tcGxhdGZvcm0gZWZpIFwKKwkJCS1iIGVmaS5pbWcgLW5vLWVtdWwtYm9vdCBcCisJCQkke0lTT0RJUn0KKwkJaXNvaHlicmlkX2FyZ3M9Ii11IgorCWZpCisKKwlpc29oeWJyaWQgJGlzb2h5YnJpZF9hcmdzICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5pc28KKworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KKwlsbiAtcyAke0lNQUdFX05BTUV9LmlzbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5pc28KK30KKworYnVpbGRfZmF0X2ltZygpIHsKKwlGQVRTT1VSQ0VESVI9JDEKKwlGQVRJTUc9JDIKKworCSMgQ2FsY3VsYXRlIHRoZSBzaXplIHJlcXVpcmVkIGZvciB0aGUgZmluYWwgaW1hZ2UgaW5jbHVkaW5nIHRoZQorCSMgZGF0YSBhbmQgZmlsZXN5c3RlbSBvdmVyaGVhZC4KKwkjIFNlY3RvcnM6IDUxMiBieXRlcworCSMgIEJsb2NrczogMTAyNCBieXRlcworCisJIyBEZXRlcm1pbmUgdGhlIHNlY3RvciBjb3VudCBqdXN0IGZvciB0aGUgZGF0YQorCVNFQ1RPUlM9JChleHByICQoZHUgLS1hcHBhcmVudC1zaXplIC1rcyAke0ZBVFNPVVJDRURJUn0gfCBjdXQgLWYgMSkgXCogMikKKworCSMgQWNjb3VudCBmb3IgdGhlIGZpbGVzeXN0ZW0gb3ZlcmhlYWQuIFRoaXMgaW5jbHVkZXMgZGlyZWN0b3J5CisJIyBlbnRyaWVzIGluIHRoZSBjbHVzdGVycyBhcyB3ZWxsIGFzIHRoZSBGQVQgaXRzZWxmLgorCSMgQXNzdW1wdGlvbnM6CisJIyAgIEZBVDMyICgxMiBvciAxNiBtYXkgYmUgc2VsZWN0ZWQgYnkgbWtkb3NmcywgYnV0IHRoZSBleHRyYQorCSMgICBwYWRkaW5nIHdpbGwgYmUgbWluaW1hbCBvbiB0aG9zZSBzbWFsbGVyIGltYWdlcyBhbmQgbm90CisJIyAgIHdvcnRoIHRoZSBsb2dpYyBoZXJlIHRvIGNhY2x1bGF0ZSB0aGUgc21hbGxlciBGQVQgc2l6ZXMpCisJIyAgIDwgMTYgZW50cmllcyBwZXIgZGlyZWN0b3J5CisJIyAgIDguMyBmaWxlbmFtZXMgb25seQorCisJIyAzMiBieXRlcyBwZXIgZGlyIGVudHJ5CisJRElSX0JZVEVTPSQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiAzMikKKwkjIDMyIGJ5dGVzIGZvciBldmVyeSBlbmQtb2YtZGlyZWN0b3J5IGRpciBlbnRyeQorCURJUl9CWVRFUz0kKGV4cHIgJERJUl9CWVRFUyArICQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IC10eXBlIGQgfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDMyKSkKKwkjIDQgYnl0ZXMgcGVyIEZBVCBlbnRyeSBwZXIgc2VjdG9yIG9mIGRhdGEKKwlGQVRfQllURVM9JChleHByICRTRUNUT1JTIFwqIDQpCisJIyA0IGJ5dGVzIHBlciBGQVQgZW50cnkgcGVyIGVuZC1vZi1jbHVzdGVyIGxpc3QKKwlGQVRfQllURVM9JChleHByICRGQVRfQllURVMgKyAkKGV4cHIgJChmaW5kICR7RkFUU09VUkNFRElSfSAtdHlwZSBkIHwgdGFpbCAtbiArMiB8IHdjIC1sKSBcKiA0KSkKKworCSMgVXNlIGEgY2VpbGluZyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgRlMgb3ZlcmhlYWQgaW4gc2VjdG9ycworCURJUl9TRUNUT1JTPSQoZXhwciAkKGV4cHIgJERJUl9CWVRFUyArIDUxMSkgLyA1MTIpCisJIyBUaGVyZSBhcmUgdHdvIEZBVHMgb24gdGhlIGltYWdlCisJRkFUX1NFQ1RPUlM9JChleHByICQoZXhwciAkKGV4cHIgJEZBVF9CWVRFUyArIDUxMSkgLyA1MTIpIFwqIDIpCisJU0VDVE9SUz0kKGV4cHIgJFNFQ1RPUlMgKyAkKGV4cHIgJERJUl9TRUNUT1JTICsgJEZBVF9TRUNUT1JTKSkKKworCSMgRGV0ZXJtaW5lIHRoZSBmaW5hbCBzaXplIGluIGJsb2NrcyBhY2NvdW50aW5nIGZvciBzb21lIHBhZGRpbmcKKwlCTE9DS1M9JChleHByICQoZXhwciAkU0VDVE9SUyAvIDIpICsgJHtCT09USU1HX0VYVFJBX1NQQUNFfSkKKworCSMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisJIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorCSMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24gaXMKKwkjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKwlCTE9DS1M9JChleHByICRCTE9DS1MgKyAkKGV4cHIgMTYgLSAkKGV4cHIgJEJMT0NLUyAlIDE2KSkpCisKKwkjIG1rZG9zZnMgd2lsbCBzb21ldGltZXMgdXNlIEZBVDE2IHdoZW4gaXQgaXMgbm90IGFwcHJvcHJpYXRlLAorCSMgcmVzdWx0aW5nIGluIGEgYm9vdCBmYWlsdXJlIGZyb20gU1lTTElOVVguIFVzZSBGQVQzMiBmb3IKKwkjIGltYWdlcyBsYXJnZXIgdGhhbiA1MTJNQiwgb3RoZXJ3aXNlIGxldCBta2Rvc2ZzIGRlY2lkZS4KKwlpZiBbICQoZXhwciAkQkxPQ0tTIC8gMTAyNCkgLWd0IDUxMiBdOyB0aGVuCisJCUZBVFNJWkU9Ii1GIDMyIgorCWZpCisKKwkjIG1rZG9zZnMgd2lsbCBmYWlsIGlmICR7RkFUSU1HfSBleGlzdHMuIFNpbmNlIHdlIGFyZSBjcmVhdGluZyBhbgorCSMgbmV3IGltYWdlLCBpdCBpcyBzYWZlIHRvIGRlbGV0ZSBhbnkgcHJldmlvdXMgaW1hZ2UuCisJaWYgWyAtZSAke0ZBVElNR30gXTsgdGhlbgorCQlybSAke0ZBVElNR30KKwlmaQorCisJaWYgWyAteiAiJHtIRERJTUdfSUR9IiBdOyB0aGVuCisJCW1rZG9zZnMgJHtGQVRTSVpFfSAtbiAke0JPT1RJTUdfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJHtGQVRJTUd9IFwKKwkJCSR7QkxPQ0tTfQorCWVsc2UKKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9IC1TIDUxMiAtQyAke0ZBVElNR30gXAorCQkke0JMT0NLU30gLWkgJHtIRERJTUdfSUR9CisJZmkKKworCSMgQ29weSBGQVRTT1VSQ0VESVIgcmVjdXJzaXZlbHkgaW50byB0aGUgaW1hZ2UgZmlsZSBkaXJlY3RseQorCW1jb3B5IC1pICR7RkFUSU1HfSAtcyAke0ZBVFNPVVJDRURJUn0vKiA6Oi8KK30KKworYnVpbGRfaGRkaW1nKCkgeworCSMgQ3JlYXRlIGFuIEhERCBpbWFnZQorCWlmIFsgIiR7Tk9IRER9IiAhPSAiMSIgXSA7IHRoZW4KKwkJcG9wdWxhdGUgJHtIRERESVJ9CisKKwkJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCQlzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUgJHtIRERESVJ9CisJCWZpCisJCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQkJZWZpX2hkZGltZ19wb3B1bGF0ZSAke0hERERJUn0KKwkJZmkKKworCQkjIENoZWNrIHRoZSBzaXplIG9mICR7SERERElSfS9yb290ZnMuaW1nLCBlcnJvciBvdXQgaWYgaXQKKwkJIyBleGNlZWRzIDRHQiwgaXQgaXMgdGhlIHNpbmdsZSBmaWxlJ3MgbWF4IHNpemUgb2YgRkFUIGZzLgorCQlpZiBbIC1mICR7SERERElSfS9yb290ZnMuaW1nIF07IHRoZW4KKwkJCXJvb3Rmc19pbWdfc2l6ZT1gc3RhdCAtYyAnJXMnICR7SERERElSfS9yb290ZnMuaW1nYAorCQkJbWF4X3NpemU9YGV4cHIgNCBcKiAxMDI0IFwqIDEwMjQgXCogMTAyNGAKKwkJCWlmIFsgJHJvb3Rmc19pbWdfc2l6ZSAtZ3QgJG1heF9zaXplIF07IHRoZW4KKwkJCQliYmVycm9yICIke0hERERJUn0vcm9vdGZzLmltZyBleGVjZWVkcyA0R0IsIgorCQkJCWJiZXJyb3IgInRoaXMgZG9lc24ndCB3b3JrIG9uIEZBVCBmaWxlc3lzdGVtLCB5b3UgY2FuIHRyeSBlaXRoZXIgb2Y6IgorCQkJCWJiZXJyb3IgIjEpIFJlZHVjZSB0aGUgc2l6ZSBvZiByb290ZnMuaW1nIgorCQkJCWJiZmF0YWwgIjIpIFVzZSBpc28sIHZtZGsgb3IgdmRpIHRvIGluc3RlYWQgb2YgaGRkaW1nXG4iCisJCQlmaQorCQlmaQorCisJCWJ1aWxkX2ZhdF9pbWcgJHtIRERESVJ9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJCXN5c2xpbnV4X2hkZGltZ19pbnN0YWxsCisJCWZpCisKKwkJY2htb2QgNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKKworCQljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGltZworCQlsbiAtcyAke0lNQUdFX05BTUV9LmhkZGltZyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS5oZGRpbWcKKwlmaQorfQorCitweXRob24gZG9fYm9vdGltZygpIHsKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX3N5c2xpbnV4X2NmZycsIGQpCisgICAgaWYgZC5nZXRWYXIoIkVGSSIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9lZmlfY2ZnJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2hkZGltZycsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9pc28nLCBkKQorfQorCitJTUFHRV9UWVBFREVQX2lzbyA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF9oZGRpbWcgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAiaXNvIGhkZGltZyIKKworYWRkdGFzayBib290aW1nIGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM4OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2J1Z3ppbGxhLmJiY2xhc3MKQEAgLTAsMCArMSwxODcgQEAKKyMKKyMgU21hbGwgZXZlbnQgaGFuZGxlciB0byBhdXRvbWF0aWNhbGx5IG9wZW4gVVJMcyBhbmQgZmlsZQorIyBidWcgcmVwb3J0cyBhdCBhIGJ1Z3ppbGxhIG9mIHlvdXIgY2hvaWNoZQorIyBpdCB1c2VzIFhNTC1SUEMgaW50ZXJmYWNlLCBzbyB5b3UgbXVzdCBoYXZlIGl0IGVuYWJsZWQKKyMKKyMgQmVmb3JlIHVzaW5nIHlvdSBtdXN0IGRlZmluZSBCVUdaSUxMQV9VU0VSLCBCVUdaSUxMQV9QQVNTIGNyZWRlbnRpYWxzLAorIyBCVUdaSUxMQV9YTUxSUEMgLSB1cmkgb2YgeG1scnBjLmNnaSwKKyMgQlVHWklMTEFfUFJPRFVDVCwgQlVHWklMTEFfQ09NUE9ORU5UIC0gYSBwbGFjZSBpbiBCVFMgZm9yIGJ1aWxkIGJ1Z3MKKyMgQlVHWklMTEFfVkVSU0lPTiAtIHZlcnNpb24gYWdhaW5zdCB3aGljaCB0byByZXBvcnQgbmV3IGJ1Z3MKKyMKKworZGVmIGJ1Z3ppbGxhX2ZpbmRfYnVnX3JlcG9ydChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z25hbWUpOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGJ1Z25hbWUKKyAgICBidWdzID0gc2VydmVyLkJ1Zy5zZWFyY2goYXJncykKKyAgICBpZiBsZW4oYnVnc1snYnVncyddKSA9PSAwOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQnVncyBub3QgZm91bmQiCisgICAgICAgIHJldHVybiAoRmFsc2UsTm9uZSkKKyAgICBlbHNlOiAjIHNpbGVudGx5IHBpY2sgdGhlIGZpcnN0IHJlc3VsdAorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiUmVzdWx0IG9mIGJ1ZyBzZWFyY2ggaXMgIgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCBidWdzCisgICAgICAgIHN0YXR1cyA9IGJ1Z3NbJ2J1Z3MnXVswXVsnc3RhdHVzJ10KKyAgICAgICAgaWQgPSBidWdzWydidWdzJ11bMF1bJ2lkJ10KKyAgICAgICAgcmV0dXJuIChub3Qgc3RhdHVzIGluIFsiQ0xPU0VEIiwgIlJFU09MVkVEIiwgIlZFUklGSUVEIl0saWQpCisKK2RlZiBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIG5hbWUsIHRleHQsIHZlcnNpb24pOgorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IG5hbWUKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgYXJnc1sndmVyc2lvbiddID0gdmVyc2lvbgorICAgIGFyZ3NbJ29wX3N5cyddID0gJ0xpbnV4JworICAgIGFyZ3NbJ3BsYXRmb3JtJ10gPSAnT3RoZXInCisgICAgYXJnc1snc2V2ZXJpdHknXSA9ICdub3JtYWwnCisgICAgYXJnc1sncHJpb3JpdHknXSA9ICdOb3JtYWwnCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc2VydmVyLkJ1Zy5jcmVhdGUoYXJncylbJ2lkJ10KKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBidWd6aWxsYV9yZW9wZW5fYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlcik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydzdGF0dXMnXSA9ICJDT05GSVJNRUQiCisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLnVwZGF0ZShhcmdzKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIHJlcHIoZSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MsIGJ1Z19udW1iZXIsIHRleHQsIGZpbGVfbmFtZSwgbG9nLCBsb2dkZXNjcmlwdGlvbik6CisgICAgYXJnc1snaWRzJ10gPSBbYnVnX251bWJlcl0KKyAgICBhcmdzWydmaWxlX25hbWUnXSA9IGZpbGVfbmFtZQorICAgIGFyZ3NbJ3N1bW1hcnknXSA9IGxvZ2Rlc2NyaXB0aW9uCisgICAgYXJnc1snY29udGVudF90eXBlJ10gPSAidGV4dC9wbGFpbiIKKyAgICBhcmdzWydkYXRhJ10gPSBsb2cKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9hdHRhY2htZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlciwgdGV4dCk6CisgICAgYXJnc1snaWQnXSA9IGJ1Z19udW1iZXIKKyAgICBhcmdzWydjb21tZW50J10gPSB0ZXh0CisgICAgdHJ5OgorICAgICAgICBzZXJ2ZXIuQnVnLmFkZF9jb21tZW50KGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworYWRkaGFuZGxlciBidWd6aWxsYV9ldmVudGhhbmRsZXIKK2J1Z3ppbGxhX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50Lk1zZ05vdGUgYmIuYnVpbGQuVGFza0ZhaWxlZCIKK3B5dGhvbiBidWd6aWxsYV9ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgeG1scnBjbGliLCBodHRwbGliCisKKyAgICBjbGFzcyBQcm94aWVkVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJveHksIHVzZV9kYXRldGltZSA9IDApOgorICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5fX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWUpCisgICAgICAgICAgICBzZWxmLnByb3h5ID0gcHJveHkKKyAgICAgICAgICAgIHNlbGYudXNlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCisKKyAgICAgICAgZGVmIHNldF91c2VyKHNlbGYsIHVzZXIpOgorICAgICAgICAgICAgc2VsZi51c2VyID0gdXNlcgorCisgICAgICAgIGRlZiBzZXRfcGFzc3dvcmQoc2VsZiwgcGFzc3dvcmQpOgorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3b3JkCisKKyAgICAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgICAgIHNlbGYucmVhbGhvc3QgPSBob3N0CisgICAgICAgICAgICByZXR1cm4gaHR0cGxpYi5IVFRQKHNlbGYucHJveHkpCisKKyAgICAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgJ2h0dHA6Ly8lcyVzJyAlIChzZWxmLnJlYWxob3N0LCBoYW5kbGVyKSkKKyAgICAgICAgICAgIGlmIHNlbGYudXNlciAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXV0aCA9ICIlczolcyIgJSAoc2VsZi51c2VyLCBzZWxmLnBhc3N3b3JkKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGF1dGggPSBzZWxmLnVzZXIKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiUHJveHktYXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgYmFzZTY0LmVuY29kZXN0cmluZyhhdXRoKSkKKworICAgIGV2ZW50ID0gZQorICAgIGRhdGEgPSBlLmRhdGEKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBpZiBuYW1lID09ICJNc2dOb3RlIjoKKyAgICAgICAgIyBhdm9pZCByZWN1cnNpb24KKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgeG1scnBjICA9IGRhdGEuZ2V0VmFyKCJCVUdaSUxMQV9YTUxSUEMiLCBUcnVlKQorICAgICAgICB1c2VyICAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1VTRVIiLCBUcnVlKQorICAgICAgICBwYXNzdyAgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BBU1MiLCBUcnVlKQorICAgICAgICBwcm9kdWN0ID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1BST0RVQ1QiLCBUcnVlKQorICAgICAgICBjb21wb24gID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX0NPTVBPTkVOVCIsIFRydWUpCisgICAgICAgIHZlcnNpb24gPSBkYXRhLmdldFZhcigiQlVHWklMTEFfVkVSU0lPTiIsIFRydWUpCisKKyAgICAgICAgcHJveHkgICA9IGRhdGEuZ2V0VmFyKCdodHRwX3Byb3h5JywgVHJ1ZSApCisgICAgICAgIGlmIChwcm94eSk6CisgICAgICAgICAgICBpbXBvcnQgdXJsbGliMgorICAgICAgICAgICAgcywgdSwgcCwgaG9zdHBvcnQgPSB1cmxsaWIyLl9wYXJzZV9wcm94eShwcm94eSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IFByb3hpZWRUcmFuc3BvcnQoaG9zdHBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KHhtbHJwYywgdHJhbnNwb3J0PXRyYW5zcG9ydCwgdmVyYm9zZT0wKQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ0J1Z3ppbGxhX2xvZ2luJzogdXNlciwKKyAgICAgICAgICAgICdCdWd6aWxsYV9wYXNzd29yZCc6IHBhc3N3LAorICAgICAgICAgICAgJ3Byb2R1Y3QnOiBwcm9kdWN0LAorICAgICAgICAgICAgJ2NvbXBvbmVudCc6IGNvbXBvbn0KKworICAgICAgICAjIGV2aWwgaGFjayB0byBmaWd1cmUgb3V0IHdoYXQgaXMgZ29pbmcgb24KKyAgICAgICAgZGVidWdfZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGRhdGEuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwiLi4iLCJidWd6aWxsYS1sb2ciKSwiYSIpCisKKyAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgYnVnbmFtZSA9ICIlKHBhY2thZ2Upcy0lKHB2KXMtYXV0b2J1aWxkIiAlIHsgInBhY2thZ2UiIDogZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdiIgICAgICA6IGRhdGEuZ2V0VmFyKCJQViIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGxvZ19maWxlID0gZ2xvYi5nbG9iKCIlcy9sb2cuJXMuKiIgJSAoZXZlbnQuZGF0YS5nZXRWYXIoJ1QnLCBUcnVlKSwgZXZlbnQudGFzaykpCisgICAgICAgIHRleHQgICAgID0gIlRoZSAlcyBzdGVwIGluICVzIGZhaWxlZCBhdCAlcyBmb3IgbWFjaGluZSAlcyIgJSAoZS50YXNrLCBkYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSksIGRhdGEuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKSApCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJBZGRpbmcgbG9nIGZpbGUgJXMiICUgbG9nX2ZpbGVbMF0KKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKGxvZ19maWxlWzBdLCAncicpCisgICAgICAgICAgICBsb2cgPSBmaWxlLnJlYWQoKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpOworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vIGxvZyBmaWxlIGZvdW5kIGZvciB0aGUgZ2xvYiIKKyAgICAgICAgICAgIGxvZyA9IE5vbmUKKworICAgICAgICAoYnVnX29wZW4sIGJ1Z19udW1iZXIpID0gYnVnemlsbGFfZmluZF9idWdfcmVwb3J0KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z25hbWUpCisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJCdWcgaXMgb3BlbjogJXMgYW5kIGJ1ZyBudW1iZXI6ICVzIiAlIChidWdfb3BlbiwgYnVnX251bWJlcikKKworICAgICAgICAjIFRoZSBidWcgaXMgcHJlc2VudCBhbmQgc3RpbGwgb3BlbiwgYXR0YWNoIGFuIGVycm9yIGxvZworICAgICAgICBpZiBub3QgYnVnX251bWJlcjoKKyAgICAgICAgICAgIGJ1Z19udW1iZXIgPSBidWd6aWxsYV9maWxlX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWduYW1lLCB0ZXh0LCB2ZXJzaW9uKQorICAgICAgICAgICAgaWYgbm90IGJ1Z19udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkNvdWxkbid0IGFjcXVpcmUgYSBuZXcgYnVnX251bWVyLCBmaWxpbmcgYSBidWdyZXBvcnQgZmFpbGVkIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiVGhlIG5ldyBidWdfbnVtYmVyOiAnJXMnIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgZWxpZiBub3QgYnVnX29wZW46CisgICAgICAgICAgICBpZiBub3QgYnVnemlsbGFfcmVvcGVuX2J1ZyhkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyKToKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiRmFpbGVkIHRvIHJlb3BlbiB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJSZW9wZW5lZCB0aGUgYnVnICMlcyIgJSBidWdfbnVtYmVyCisKKyAgICAgICAgaWYgYnVnX251bWJlciBhbmQgbG9nOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIlRoZSBidWcgaXMga25vd24gYXMgJyVzJyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBkZXNjID0gIkJ1aWxkIGxvZyBmb3IgbWFjaGluZSAlcyIgJSAoZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSkKKyAgICAgICAgICAgIGlmIG5vdCBidWd6aWxsYV9jcmVhdGVfYXR0YWNobWVudChkZWJ1Z19maWxlLCBzZXJ2ZXIsIGFyZ3MuY29weSgpLCBidWdfbnVtYmVyLCB0ZXh0LCBsb2dfZmlsZVswXSwgbG9nLCBkZXNjKToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkZhaWxlZCB0byBhdHRhY2ggdGhlIGJ1aWxkIGxvZyBmb3IgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQ3JlYXRlZCBhbiBhdHRhY2htZW50IGZvciAnJXMnICclcycgJyVzJyIgJSAocHJvZHVjdCwgY29tcG9uLCBidWdfbnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIk5vdCB0cnlpbmcgdG8gY3JlYXRlIGFuIGF0dGFjaG1lbnQgZm9yIGJ1ZyAjJXMiICUgYnVnX251bWJlcgorICAgICAgICAgICAgaWYgbm90IGJ1Z3ppbGxhX2FkZF9jb21tZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIsIHRleHQsICk6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJGYWlsZWQgdG8gY3JlYXRlIGEgY29tbWVudCB0aGUgYnVpbGQgbG9nIGZvciBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJDcmVhdGVkIGFuIGF0dGFjaG1lbnQgZm9yICclcycgJyVzJyAnJXMnIiAlIChwcm9kdWN0LCBjb21wb24sIGJ1Z19udW1iZXIpCisKKyAgICAgICAgIyBzdG9yZSBidWcgbnVtYmVyIGZvciBvZXN0YXRzLWNsaWVudAorICAgICAgICBpZiBidWdfbnVtYmVyOgorICAgICAgICAgICAgZGF0YS5zZXRWYXIoJ09FU1RBVFNfQlVHX05VTUJFUicsIGJ1Z19udW1iZXIpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9idWlsZGhpc3RvcnkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9idWlsZGhpc3RvcnkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIwNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCkBAIC0wLDAgKzEsNzY1IEBACisjCisjIFJlY29yZHMgaGlzdG9yeSBvZiBidWlsZCBvdXRwdXQgaW4gb3JkZXIgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zCisjCisjIEJhc2VkIGluIHBhcnQgb24gdGVzdGxhYi5iYmNsYXNzIGFuZCBwYWNrYWdlaGlzdG9yeS5iYmNsYXNzCisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEtvZW4gS29vaSA8a29lbkBvcGVuZW1iZWRkZWQub3JnPgorIworCitCVUlMREhJU1RPUllfRkVBVFVSRVMgPz0gImltYWdlIHBhY2thZ2Ugc2RrIgorQlVJTERISVNUT1JZX0RJUiA/PSAiJHtUT1BESVJ9L2J1aWxkaGlzdG9yeSIKK0JVSUxESElTVE9SWV9ESVJfSU1BR0UgPSAiJHtCVUlMREhJU1RPUllfRElSfS9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8ke0lNQUdFX0JBU0VOQU1FfSIKK0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRSA9ICIke0JVSUxESElTVE9SWV9ESVJ9L3BhY2thZ2VzLyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59IgorQlVJTERISVNUT1JZX0RJUl9TREsgPSAiJHtCVUlMREhJU1RPUllfRElSfS9zZGsvJHtTREtfTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0iCitCVUlMREhJU1RPUllfSU1BR0VfRklMRVMgPz0gIi9ldGMvcGFzc3dkIC9ldGMvZ3JvdXAiCitCVUlMREhJU1RPUllfQ09NTUlUID89ICIwIgorQlVJTERISVNUT1JZX0NPTU1JVF9BVVRIT1IgPz0gImJ1aWxkaGlzdG9yeSA8YnVpbGRoaXN0b3J5QCR7RElTVFJPfT4iCitCVUlMREhJU1RPUllfUFVTSF9SRVBPID89ICIiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyBXZSB3YW50IHRvIGF2b2lkIGluZmx1ZW5jZSB0aGUgc2lnbmF0dXJlcyBvZiBzc3RhdGUgdGFza3MgLSBmaXJzdCB0aGUgZnVuY3Rpb24gaXRzZWxmOgorc3N0YXRlX2luc3RhbGxbdmFyZGVwc2V4Y2x1ZGVdICs9ICJidWlsZGhpc3RvcnlfZW1pdF9wa2doaXN0b3J5IgorIyB0aGVuIHRoZSB2YWx1ZSBhZGRlZCB0byBTU1RBVEVQT1NUSU5TVEZVTkNTOgorU1NUQVRFUE9TVElOU1RGVU5DU1t2YXJkZXB2YWx1ZWV4Y2x1ZGVdIC49ICJ8IGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisKKyMKKyMgV3JpdGUgb3V0IG1ldGFkYXRhIGFib3V0IHRoaXMgcGFja2FnZSBmb3IgY29tcGFyaXNpb24gd2hlbiB3cml0aW5nIGZ1dHVyZSBwYWNrYWdlcworIworcHl0aG9uIGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkoKSB7CisgICAgaWYgbm90IGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIFRydWUpIGluIFsncGFja2FnZWRhdGEnLCAncGFja2FnZWRhdGFfc2V0c2NlbmUnXToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGlmIG5vdCAicGFja2FnZSIgaW4gKGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGVycm5vCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBjbGFzcyBSZWNpcGVJbmZvOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBlID0gIjAiCisgICAgICAgICAgICBzZWxmLnB2ID0gIjAiCisgICAgICAgICAgICBzZWxmLnByID0gInIwIgorICAgICAgICAgICAgc2VsZi5kZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucGFja2FnZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5zcmNyZXYgPSAiIgorCisKKyAgICBjbGFzcyBQYWNrYWdlSW5mbzoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5wZSA9ICIwIgorICAgICAgICAgICAgc2VsZi5wdiA9ICIwIgorICAgICAgICAgICAgc2VsZi5wciA9ICJyMCIKKyAgICAgICAgICAgICMgcGtnL3BrZ2UvcGtndi9wa2dyIHNob3VsZCBiZSBlbXB0eSBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkZWZhdWx0IHRoZW0KKyAgICAgICAgICAgIHNlbGYucGtnID0gIiIKKyAgICAgICAgICAgIHNlbGYucGtnZSA9ICIiCisgICAgICAgICAgICBzZWxmLnBrZ3YgPSAiIgorICAgICAgICAgICAgc2VsZi5wa2dyID0gIiIKKyAgICAgICAgICAgIHNlbGYuc2l6ZSA9IDAKKyAgICAgICAgICAgIHNlbGYuZGVwZW5kcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJwcm92aWRlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJkZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucnJlY29tbWVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5yc3VnZ2VzdHMgPSAiIgorICAgICAgICAgICAgc2VsZi5ycmVwbGFjZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5yY29uZmxpY3RzID0gIiIKKyAgICAgICAgICAgIHNlbGYuZmlsZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5maWxlbGlzdCA9ICIiCisgICAgICAgICAgICAjIFZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgd3JpdHRlbiB0byB0aGVpciBvd24gc2VwYXJhdGUgZmlsZQorICAgICAgICAgICAgc2VsZi5maWxldmFycyA9IGRpY3QuZnJvbWtleXMoWydwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nXSkKKworICAgICMgU2hvdWxkIGNoZWNrIFBBQ0tBR0VTIGhlcmUgdG8gc2VlIGlmIGFueXRoaW5nIHJlbW92ZWQKKworICAgIGRlZiByZWFkUGFja2FnZUluZm8ocGtnLCBoaXN0ZmlsZSk6CisgICAgICAgIHBrZ2luZm8gPSBQYWNrYWdlSW5mbyhwa2cpCisgICAgICAgIHdpdGggb3BlbihoaXN0ZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBsbnMgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICBuYW1lID0gbG5zWzBdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxuc1sxXS5zdHJpcCgiIFx0XHJcbiIpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJQRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUFYiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnB2ID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBSIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0ciOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLR1YiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZ3YgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHUiI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtnciA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSUFJPVklERVMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSREVQRU5EUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmRlcGVuZHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlJFQ09NTUVORFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJTVUdHRVNUUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJSRVBMQUNFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnJlcGxhY2VzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJDT05GTElDVFMiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnJjb25mbGljdHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHU0laRSI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uc2l6ZSA9IGxvbmcodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJGSUxFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uZmlsZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiRklMRUxJU1QiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gdmFsdWUKKyAgICAgICAgIyBBcHBseSBkZWZhdWx0cworICAgICAgICBpZiBub3QgcGtnaW5mby5wa2c6CisgICAgICAgICAgICBwa2dpbmZvLnBrZyA9IHBrZ2luZm8ubmFtZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dlOgorICAgICAgICAgICAgcGtnaW5mby5wa2dlID0gcGtnaW5mby5wZQorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2d2OgorICAgICAgICAgICAgcGtnaW5mby5wa2d2ID0gcGtnaW5mby5wdgorICAgICAgICBpZiBub3QgcGtnaW5mby5wa2dyOgorICAgICAgICAgICAgcGtnaW5mby5wa2dyID0gcGtnaW5mby5wcgorICAgICAgICByZXR1cm4gcGtnaW5mbworCisgICAgZGVmIGdldGxhc3Rwa2d2ZXJzaW9uKHBrZyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZywgImxhdGVzdCIpCisgICAgICAgICAgICByZXR1cm4gcmVhZFBhY2thZ2VJbmZvKHBrZywgaGlzdGZpbGUpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzb3J0cGtnbGlzdChzdHJpbmcpOgorICAgICAgICBwa2dpdGVyID0gcmUuZmluZGl0ZXIocidbYS16QS1aMC05ListXSsoIFwoWz48PV0rIFteICldK1wpKT8nLCBzdHJpbmcsIDApCisgICAgICAgIHBrZ2xpc3QgPSBbcC5ncm91cCgwKSBmb3IgcCBpbiBwa2dpdGVyXQorICAgICAgICBwa2dsaXN0LnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4ocGtnbGlzdCkKKworICAgIGRlZiBzb3J0bGlzdChzdHJpbmcpOgorICAgICAgICBpdGVtcyA9IHN0cmluZy5zcGxpdCgnICcpCisgICAgICAgIGl0ZW1zLnNvcnQoKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oaXRlbXMpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcGUgPSBkLmdldFZhcignUEUnLCBUcnVlKSBvciAiMCIKKyAgICBwdiA9IGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcHIgPSBkLmdldFZhcignUFInLCBUcnVlKQorCisgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorICAgIHBhY2thZ2VzID0gIiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsIHBuKSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQQUNLQUdFUzogJyk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKGxpbmUuc3BsaXQoJzogJywgMSlbMV0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAjIFByb2JhYmx5IGEgLWNyb3NzIHJlY2lwZSwganVzdCBpZ25vcmUKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisgICAgcGFja2FnZWxpc3QgPSBwYWNrYWdlcy5zcGxpdCgpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnaGlzdGRpcikKKyAgICBlbHNlOgorICAgICAgICAjIFJlbW92ZSBmaWxlcyBmb3IgcGFja2FnZXMgdGhhdCBubyBsb25nZXIgZXhpc3QKKyAgICAgICAgZm9yIGl0ZW0gaW4gb3MubGlzdGRpcihwa2doaXN0ZGlyKToKKyAgICAgICAgICAgIGlmIGl0ZW0gIT0gImxhdGVzdCIgYW5kIGl0ZW0gIT0gImxhdGVzdF9zcmNyZXYiOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgICAgICAgICBpdGVtcGF0aCA9IG9zLnBhdGguam9pbihwa2doaXN0ZGlyLCBpdGVtKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGl0ZW1wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJmaWxlIGluIG9zLmxpc3RkaXIoaXRlbXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oaXRlbXBhdGgsIHN1YmZpbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoaXRlbXBhdGgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoaXRlbXBhdGgpCisKKyAgICByY3BpbmZvID0gUmVjaXBlSW5mbyhwbikKKyAgICByY3BpbmZvLnBlID0gcGUKKyAgICByY3BpbmZvLnB2ID0gcHYKKyAgICByY3BpbmZvLnByID0gcHIKKyAgICByY3BpbmZvLmRlcGVuZHMgPSBzb3J0bGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIikpCisgICAgcmNwaW5mby5wYWNrYWdlcyA9IHBhY2thZ2VzCisgICAgd3JpdGVfcmVjaXBlaGlzdG9yeShyY3BpbmZvLCBkKQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VsaXN0OgorICAgICAgICBwa2dkYXRhID0ge30KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpdGVtID0gbGluZS5yc3RyaXAoJ1xuJykuc3BsaXQoJzogJywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBpdGVtWzBdCisgICAgICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCdfJyArIHBrZyk6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleVs6LWxlbihwa2cpLTFdCisgICAgICAgICAgICAgICAgcGtnZGF0YVtrZXldID0gaXRlbVsxXS5kZWNvZGUoJ3V0Zi04JykuZGVjb2RlKCdzdHJpbmdfZXNjYXBlJykKKworICAgICAgICBwa2dlID0gcGtnZGF0YS5nZXQoJ1BLR0UnLCAnMCcpCisgICAgICAgIHBrZ3YgPSBwa2dkYXRhWydQS0dWJ10KKyAgICAgICAgcGtnciA9IHBrZ2RhdGFbJ1BLR1InXQorICAgICAgICAjCisgICAgICAgICMgRmluZCBvdXQgd2hhdCB0aGUgbGFzdCB2ZXJzaW9uIHdhcworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBkaWQgbm90IGRlY3JlYXNlCisgICAgICAgICMKKyAgICAgICAgbGFzdHZlcnNpb24gPSBnZXRsYXN0cGtndmVyc2lvbihwa2cpCisgICAgICAgIGlmIGxhc3R2ZXJzaW9uOgorICAgICAgICAgICAgbGFzdF9wa2dlID0gbGFzdHZlcnNpb24ucGtnZQorICAgICAgICAgICAgbGFzdF9wa2d2ID0gbGFzdHZlcnNpb24ucGtndgorICAgICAgICAgICAgbGFzdF9wa2dyID0gbGFzdHZlcnNpb24ucGtncgorICAgICAgICAgICAgciA9IGJiLnV0aWxzLnZlcmNtcCgocGtnZSwgcGtndiwgcGtnciksIChsYXN0X3BrZ2UsIGxhc3RfcGtndiwgbGFzdF9wa2dyKSkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgIG1zZyA9ICJQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICglczolcy0lcyB0byAlczolcy0lcykiICUgKHBrZywgbGFzdF9wa2dlLCBsYXN0X3BrZ3YsIGxhc3RfcGtnciwgcGtnZSwgcGtndiwgcGtncikKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiLCBtc2csIGQpCisKKyAgICAgICAgcGtnaW5mbyA9IFBhY2thZ2VJbmZvKHBrZykKKyAgICAgICAgIyBBcHBhcmVudGx5IHRoZSB2ZXJzaW9uIGNhbiBiZSBkaWZmZXJlbnQgb24gYSBwZXItcGFja2FnZSBiYXNpcyAoc2VlIFB5dGhvbikKKyAgICAgICAgcGtnaW5mby5wZSA9IHBrZ2RhdGEuZ2V0KCdQRScsICcwJykKKyAgICAgICAgcGtnaW5mby5wdiA9IHBrZ2RhdGFbJ1BWJ10KKyAgICAgICAgcGtnaW5mby5wciA9IHBrZ2RhdGFbJ1BSJ10KKyAgICAgICAgcGtnaW5mby5wa2cgPSBwa2dkYXRhWydQS0cnXQorICAgICAgICBwa2dpbmZvLnBrZ2UgPSBwa2dlCisgICAgICAgIHBrZ2luZm8ucGtndiA9IHBrZ3YKKyAgICAgICAgcGtnaW5mby5wa2dyID0gcGtncgorICAgICAgICBwa2dpbmZvLnJwcm92aWRlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlBST1ZJREVTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yZGVwZW5kcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUkRFUEVORFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZWNvbW1lbmRzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUkVDT01NRU5EUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnN1Z2dlc3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSU1VHR0VTVFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJyZXBsYWNlcyA9IHNvcnRwa2dsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnUlJFUExBQ0VTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yY29uZmxpY3RzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSQ09ORkxJQ1RTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5maWxlcyA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhwa2dkYXRhLmdldCgnRklMRVMnLCAiIikpCisgICAgICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgICAgICBwa2dpbmZvLmZpbGV2YXJzW2ZpbGV2YXJdID0gcGtnZGF0YS5nZXQoZmlsZXZhciwgIiIpCisKKyAgICAgICAgIyBHYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZWQgZmlsZXMKKyAgICAgICAgdmFsID0gcGtnZGF0YS5nZXQoJ0ZJTEVTX0lORk8nLCAnJykKKyAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICBmaWxlbGlzdCA9IGRpY3R2YWwua2V5cygpCisgICAgICAgIGZpbGVsaXN0LnNvcnQoKQorICAgICAgICBwa2dpbmZvLmZpbGVsaXN0ID0gIiAiLmpvaW4oZmlsZWxpc3QpCisKKyAgICAgICAgcGtnaW5mby5zaXplID0gaW50KHBrZ2RhdGFbJ1BLR1NJWkUnXSkKKworICAgICAgICB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpCisKKyAgICAjIENyZWF0ZSBmaWxlcy1pbi08cGFja2FnZS1uYW1lPi50eHQgZmlsZXMgY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZXMgb2YgZWFjaCByZWNpcGUncyBwYWNrYWdlCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfbGlzdF9wa2dfZmlsZXMiLCBkKQorfQorCisKK2RlZiB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHJlY2lwZSBoaXN0b3J5IikKKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIGluZm9maWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICJsYXRlc3QiKQorICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb2ZpbGUsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICBpZiByY3BpbmZvLnBlICE9ICIwIjoKKyAgICAgICAgICAgIGYud3JpdGUodSJQRSA9ICVzXG4iICUgIHJjcGluZm8ucGUpCisgICAgICAgIGYud3JpdGUodSJQViA9ICVzXG4iICUgIHJjcGluZm8ucHYpCisgICAgICAgIGYud3JpdGUodSJQUiA9ICVzXG4iICUgIHJjcGluZm8ucHIpCisgICAgICAgIGYud3JpdGUodSJERVBFTkRTID0gJXNcbiIgJSAgcmNwaW5mby5kZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUEFDS0FHRVMgPSAlc1xuIiAlICByY3BpbmZvLnBhY2thZ2VzKQorCisKK2RlZiB3cml0ZV9wa2doaXN0b3J5KHBrZ2luZm8sIGQpOgorICAgIGltcG9ydCBjb2RlY3MKKworICAgIGJiLmRlYnVnKDIsICJXcml0aW5nIHBhY2thZ2UgaGlzdG9yeSBmb3IgcGFja2FnZSAlcyIgJSBwa2dpbmZvLm5hbWUpCisKKyAgICBwa2doaXN0ZGlyID0gZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRScsIFRydWUpCisKKyAgICBwa2dwYXRoID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIHBrZ2luZm8ubmFtZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtncGF0aCk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dwYXRoKQorCisgICAgaW5mb2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtncGF0aCwgImxhdGVzdCIpCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvZmlsZSwgInciLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGlmIHBrZ2luZm8ucGUgIT0gIjAiOgorICAgICAgICAgICAgZi53cml0ZSh1IlBFID0gJXNcbiIgJSAgcGtnaW5mby5wZSkKKyAgICAgICAgZi53cml0ZSh1IlBWID0gJXNcbiIgJSAgcGtnaW5mby5wdikKKyAgICAgICAgZi53cml0ZSh1IlBSID0gJXNcbiIgJSAgcGtnaW5mby5wcikKKworICAgICAgICBwa2d2YXJzID0ge30KKyAgICAgICAgcGtndmFyc1snUEtHJ10gPSBwa2dpbmZvLnBrZyBpZiBwa2dpbmZvLnBrZyAhPSBwa2dpbmZvLm5hbWUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dFJ10gPSBwa2dpbmZvLnBrZ2UgaWYgcGtnaW5mby5wa2dlICE9IHBrZ2luZm8ucGUgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dWJ10gPSBwa2dpbmZvLnBrZ3YgaWYgcGtnaW5mby5wa2d2ICE9IHBrZ2luZm8ucHYgZWxzZSAnJworICAgICAgICBwa2d2YXJzWydQS0dSJ10gPSBwa2dpbmZvLnBrZ3IgaWYgcGtnaW5mby5wa2dyICE9IHBrZ2luZm8ucHIgZWxzZSAnJworICAgICAgICBmb3IgcGtndmFyIGluIHBrZ3ZhcnM6CisgICAgICAgICAgICB2YWwgPSBwa2d2YXJzW3BrZ3Zhcl0KKyAgICAgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHUiJXMgPSAlc1xuIiAlIChwa2d2YXIsIHZhbCkpCisKKyAgICAgICAgZi53cml0ZSh1IlJQUk9WSURFUyA9ICVzXG4iICUgIHBrZ2luZm8ucnByb3ZpZGVzKQorICAgICAgICBmLndyaXRlKHUiUkRFUEVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJkZXBlbmRzKQorICAgICAgICBmLndyaXRlKHUiUlJFQ09NTUVORFMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZWNvbW1lbmRzKQorICAgICAgICBpZiBwa2dpbmZvLnJzdWdnZXN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSU1VHR0VTVFMgPSAlc1xuIiAlICBwa2dpbmZvLnJzdWdnZXN0cykKKyAgICAgICAgaWYgcGtnaW5mby5ycmVwbGFjZXM6CisgICAgICAgICAgICBmLndyaXRlKHUiUlJFUExBQ0VTID0gJXNcbiIgJSAgcGtnaW5mby5ycmVwbGFjZXMpCisgICAgICAgIGlmIHBrZ2luZm8ucmNvbmZsaWN0czoKKyAgICAgICAgICAgIGYud3JpdGUodSJSQ09ORkxJQ1RTID0gJXNcbiIgJSAgcGtnaW5mby5yY29uZmxpY3RzKQorICAgICAgICBmLndyaXRlKHUiUEtHU0laRSA9ICVkXG4iICUgIHBrZ2luZm8uc2l6ZSkKKyAgICAgICAgZi53cml0ZSh1IkZJTEVTID0gJXNcbiIgJSAgcGtnaW5mby5maWxlcykKKyAgICAgICAgZi53cml0ZSh1IkZJTEVMSVNUID0gJXNcbiIgJSAgcGtnaW5mby5maWxlbGlzdCkKKworICAgIGZvciBmaWxldmFyIGluIHBrZ2luZm8uZmlsZXZhcnM6CisgICAgICAgIGZpbGV2YXJwYXRoID0gb3MucGF0aC5qb2luKHBrZ3BhdGgsICJsYXRlc3QuJXMiICUgZmlsZXZhcikKKyAgICAgICAgdmFsID0gcGtnaW5mby5maWxldmFyc1tmaWxldmFyXQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKGZpbGV2YXJwYXRoLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHZhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGV2YXJwYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZXZhcnBhdGgpCisKKyMKKyMgcm9vdGZzX3R5cGUgY2FuIGJlOiBpbWFnZSwgc2RrX3RhcmdldCwgc2RrX2hvc3QKKyMKK2RlZiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgcm9vdGZzX3R5cGU9ImltYWdlIik6CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgcHJvY2Vzc19saXN0ID0gWygnZmlsZScsICdiaF9pbnN0YWxsZWRfcGtncy50eHQnKSxcCisgICAgICAgICAgICAgICAgICAgICgnZGVwcycsICdiaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dCcpXQorCisgICAgZm9yIG91dHB1dF90eXBlLCBvdXRwdXRfZmlsZSBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgIG91dHB1dF9maWxlX2Z1bGwgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgb3V0cHV0X2ZpbGUpCisKKyAgICAgICAgd2l0aCBvcGVuKG91dHB1dF9maWxlX2Z1bGwsICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgaWYgcm9vdGZzX3R5cGUgPT0gImltYWdlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgb3V0cHV0X3R5cGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHJvb3Rmc190eXBlID09ICJzZGtfdGFyZ2V0Iiwgb3V0cHV0X3R5cGUpKQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX2ltYWdlKCkgeworICAgIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkKQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka190YXJnZXQoKSB7CisgICAgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkKGQsICJzZGtfdGFyZ2V0IikKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9zZGtfaG9zdCgpIHsKKyAgICBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgInNka19ob3N0IikKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQoKSB7CisJbWtkaXIgLXAgJDEKKworCSMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisJcGtnY2FjaGU9IiQxL2luc3RhbGxlZC1wYWNrYWdlcy50bXAiCisJY2F0ICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3MudHh0IHwgc29ydCA+ICRwa2djYWNoZSAmJiBybSAke1dPUktESVJ9L2JoX2luc3RhbGxlZF9wa2dzLnR4dAorCisJY2F0ICRwa2djYWNoZSB8IGF3ayAneyBwcmludCAkMSB9JyA+ICQxL2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dAorCWlmIFsgLXMgJHBrZ2NhY2hlIF0gOyB0aGVuCisJCWNhdCAkcGtnY2FjaGUgfCBhd2sgJ3sgcHJpbnQgJDIgfScgfCB4YXJncyAtbjEgYmFzZW5hbWUgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZWxzZQorCQlwcmludGYgIiIgPiAkMS9pbnN0YWxsZWQtcGFja2FnZXMudHh0CisJZmkKKworCSMgUHJvZHVjZSBkZXBlbmRlbmN5IGdyYXBoCisJIyBGaXJzdCwgcXVvdGUgZWFjaCBuYW1lIHRvIGhhbmRsZSBjaGFyYWN0ZXJzIHRoYXQgY2F1c2UgaXNzdWVzIGZvciBkb3QKKwlzZWQgJ3M6XChbXnwgXSpcKToiXDEiOmcnICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQgPiAkMS9kZXBlbmRzLnRtcCAmJiBcCisJCXJtICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3NfZGVwcy50eHQKKwkjIENoYW5nZSBkZWxpbWl0ZXIgZnJvbSBwaXBlIHRvIC0+IGFuZCBzZXQgc3R5bGUgZm9yIHJlY29tbWVuZCBsaW5lcworCXNlZCAtaSAtZSAnczp8OiAtPiA6JyAtZSAnczoiXFtSRUNcXSI6W3N0eWxlPWRvdHRlZF06JyAtZSAnczokOjs6JyAkMS9kZXBlbmRzLnRtcAorCSMgQWRkIGhlYWRlciwgc29ydGVkIGFuZCBkZS1kdXBlZCBjb250ZW50cyBhbmQgZm9vdGVyIGFuZCB0aGVuIGRlbGV0ZSB0aGUgdGVtcCBmaWxlCisJcHJpbnRmICJkaWdyYXBoIGRlcGVuZHMge1xuICAgIG5vZGUgW3NoYXBlPXBsYWludGV4dF1cbiIgPiAkMS9kZXBlbmRzLmRvdAorCWNhdCAkMS9kZXBlbmRzLnRtcCB8IHNvcnQgfCB1bmlxID4+ICQxL2RlcGVuZHMuZG90CisJZWNobyAifSIgPj4gICQxL2RlcGVuZHMuZG90CisJcm0gJDEvZGVwZW5kcy50bXAKKworCSMgUHJvZHVjZSBpbnN0YWxsZWQgcGFja2FnZSBzaXplcyBsaXN0CisJcHJpbnRmICIiID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisJY2F0ICRwa2djYWNoZSB8IHdoaWxlIHJlYWQgcGtnIHBrZ2ZpbGUgcGtnYXJjaAorCWRvCisJCXNpemU9YG9lLXBrZ2RhdGEtdXRpbCAtcCAke1BLR0RBVEFfRElSfSByZWFkLXZhbHVlICJQS0dTSVpFIiAke3BrZ31fJHtwa2dhcmNofWAKKwkJaWYgWyAiJHNpemUiICE9ICIiIF0gOyB0aGVuCisJCQllY2hvICIkc2l6ZSAkcGtnIiA+PiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKwkJZmkKKwlkb25lCisJY2F0ICQxL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnRtcCB8IHNvcnQgLW4gLXIgfCBhd2sgJ3twcmludCAkMSAiXHRLaUIgIiAkMn0nID4gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0CisJcm0gJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wCisKKwkjIFdlJ3JlIG5vdyBkb25lIHdpdGggdGhlIGNhY2hlLCBkZWxldGUgaXQKKwlybSAkcGtnY2FjaGUKKworCWlmIFsgIiQyIiAhPSAic2RrIiBdIDsgdGhlbgorCQkjIFByb2R1Y2Ugc29tZSBjdXQtZG93biBncmFwaHMgKGZvciByZWFkYWJpbGl0eSkKKwkJZ3JlcCAtdiBrZXJuZWxfaW1hZ2UgJDEvZGVwZW5kcy5kb3QgfCBncmVwIC12IGtlcm5lbC0yIHwgZ3JlcCAtdiBrZXJuZWwtMyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwuZG90CisJCWdyZXAgLXYgbGliYzYgJDEvZGVwZW5kcy1ub2tlcm5lbC5kb3QgfCBncmVwIC12IGxpYmdjYyA+ICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLmRvdAorCQlncmVwIC12IHVwZGF0ZS0gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMuZG90ID4gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMtbm91cGRhdGUuZG90CisJCWdyZXAgLXYga2VybmVsLW1vZHVsZSAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS5kb3QgPiAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS1ub21vZHVsZXMuZG90CisJZmkKKworCSMgYWRkIGNvbXBsZW1lbnRhcnkgcGFja2FnZSBpbmZvcm1hdGlvbgorCWlmIFsgLWUgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0IF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9jb21wbGVtZW50YXJ5X3BrZ3MudHh0ICQxCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgaW1hZ2UKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCAnaW1hZ2UnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2dldF9pbnN0YWxsZWQgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfQorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQoKSB7CisJIyBBbnl0aGluZyByZXF1aXJpbmcgdGhlIHVzZSBvZiB0aGUgcGFja2FnaW5nIHN5c3RlbSBzaG91bGQgYmUgZG9uZSBpbiBoZXJlCisJIyBpbiBjYXNlIHRoZSBwYWNrYWdpbmcgZmlsZXMgYXJlIGdvaW5nIHRvIGJlIHJlbW92ZWQgZm9yIHRoaXMgU0RLCisKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ3NkaycsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCAke0JVSUxESElTVE9SWV9ESVJfU0RLfS8kMSBzZGsKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX2hvc3QoKSB7CisJYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkIGhvc3QKK30KKworYnVpbGRoaXN0b3J5X2dldF9zZGtfaW5zdGFsbGVkX3RhcmdldCgpIHsKKwlidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQgdGFyZ2V0Cit9CisKK2J1aWxkaGlzdG9yeV9saXN0X2ZpbGVzKCkgeworCSMgTGlzdCB0aGUgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksIGJ1dCBleGNsdWRlIGRhdGUvdGltZSBldGMuCisJIyBUaGlzIGF3ayBzY3JpcHQgaXMgc29tZXdoYXQgbWVzc3ksIGJ1dCBoYW5kbGVzIHdoZXJlIHRoZSBzaXplIGlzIG5vdCBwcmludGVkIGZvciBkZXZpY2UgZmlsZXMgdW5kZXIgcHNldWRvCisJaWYgWyAiJDMiID0gImZha2Vyb290IiBdIDsgdGhlbgorCQkoIGNkICQxICYmICR7RkFLRVJPT1RFTlZ9ICR7RkFLRVJPT1RDTUR9IGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZWxzZQorCQkoIGNkICQxICYmIGZpbmQgLiAhIC1wYXRoIC4gLXByaW50ZiAiJU0gJS0xMHUgJS0xMGcgJTEwcyAlcCAtPiAlbFxuIiB8IHNvcnQgLWs1IHwgc2VkICdzLyAqIC0+ICQvLycgPiAkMiApCisJZmkKK30KKworYnVpbGRoaXN0b3J5X2xpc3RfcGtnX2ZpbGVzKCkgeworCSMgQ3JlYXRlIGluZGl2aWR1YWwgZmlsZXMtaW4tcGFja2FnZSBmb3IgZWFjaCByZWNpcGUncyBwYWNrYWdlCisJZm9yIHBrZ2RpciBpbiAkKGZpbmQgJHtQS0dERVNUfS8qIC1tYXhkZXB0aCAwIC10eXBlIGQpOyBkbworCQlwa2duYW1lPSQoYmFzZW5hbWUgJHBrZ2RpcikKKwkJb3V0Zm9sZGVyPSIke0JVSUxESElTVE9SWV9ESVJfUEFDS0FHRX0vJHBrZ25hbWUiCisJCW91dGZpbGU9IiRvdXRmb2xkZXIvZmlsZXMtaW4tcGFja2FnZS50eHQiCisJCSMgTWFrZSBzdXJlIHRoZSBvdXRwdXQgZm9sZGVyIGV4aXN0cyBzbyB3ZSBjYW4gY3JlYXRlIHRoZSBmaWxlCisJCWlmIFsgISAtZCAkb3V0Zm9sZGVyIF0gOyB0aGVuCisJCQliYmRlYnVnIDIgIkZvbGRlciAkb3V0Zm9sZGVyIGRvZXMgbm90IGV4aXN0LCBmaWxlICRvdXRmaWxlIG5vdCBjcmVhdGVkIgorCQkJY29udGludWUKKwkJZmkKKwkJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHBrZ2RpciAkb3V0ZmlsZSBmYWtlcm9vdAorCWRvbmUKK30KKworYnVpbGRoaXN0b3J5X2dldF9pbWFnZWluZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdpbWFnZScsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAke0lNQUdFX1JPT1RGU30gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9maWxlcy1pbi1pbWFnZS50eHQKKworCSMgQ29sbGVjdCBmaWxlcyByZXF1ZXN0ZWQgaW4gQlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTCisJcm0gLXJmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMKKwlmb3IgZiBpbiAke0JVSUxESElTVE9SWV9JTUFHRV9GSUxFU307IGRvCisJCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9LyRmIF0gOyB0aGVuCisJCQlta2RpciAtcCAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWZpbGVzL2BkaXJuYW1lICRmYAorCQkJY3AgJHtJTUFHRV9ST09URlN9LyRmICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMvJGYKKwkJZmkKKwlkb25lCisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UKKwlwcmludGYgIiIgID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0IDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X2ltYWdldmFycyhkKX0KK0VORAorCWltYWdlc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwllY2hvICJJTUFHRVNJWkUgPSAkaW1hZ2VzaXplIiA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0CisKKwkjIEFkZCBzb21lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwllY2hvICIke01BQ0hJTkV9OiAke0lNQUdFX0JBU0VOQU1FfSBjb25maWd1cmVkIGZvciAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0iID4gJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9idWlsZC1pZC50eHQKKworCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2J1aWxkLWlkLnR4dCA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9idWlsZF9pZChkKX0KK0VORAorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka2luZm8oKSB7CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdzZGsnLCAnMScsICcwJywgZCl9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMgJHtTREtfT1VUUFVUfSAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9maWxlcy1pbi1zZGsudHh0CisKKwkjIFJlY29yZCBzb21lIG1hY2hpbmUtcmVhZGFibGUgbWV0YS1pbmZvcm1hdGlvbiBhYm91dCB0aGUgU0RLCisJcHJpbnRmICIiICA+ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L3Nkay1pbmZvLnR4dAorCWNhdCA+PiAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9zZGstaW5mby50eHQgPDxFTkQKKyR7QGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKX0KK0VORAorCXNka3NpemU9YGR1IC1rcyAke1NES19PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxIH0nYAorCWVjaG8gIlNES1NJWkUgPSAkc2Rrc2l6ZSIgPj4gJHtCVUlMREhJU1RPUllfRElSX1NES30vc2RrLWluZm8udHh0Cit9CisKKyMgQnkgdXNpbmcgUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCB3ZSBnZXQgaW4gYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YKKyMgdW5uZWVkZWQgcGFja2FnZXMgYnV0IGJlZm9yZSB0aGUgcmVtb3ZhbCBvZiBwYWNrYWdpbmcgZmlsZXMKK1JPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UgO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRoaXN0b3J5X2dldF9pbWFnZV9pbnN0YWxsZWQgOyAiCisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gIiBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbyA7ICIKKworIyBXZSB3YW50IHRoZXNlIHRvIGJlIHRoZSBsYXN0IHJ1biBzbyB0aGF0IHdlIGdldCBjYWxsZWQgYWZ0ZXIgY29tcGxlbWVudGFyeSBwYWNrYWdlIGluc3RhbGxhdGlvbgorUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX3RhcmdldCA7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfdGFyZ2V0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZCA9ICIgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka19ob3N0IDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfaG9zdCA7ICIKKworU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gImJ1aWxkaGlzdG9yeV9nZXRfc2RraW5mbyA7ICIKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfYnVpbGRfaWQoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiAiIgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHN0YXR1c2xpbmVzID0gW10KKyAgICBmb3IgZnVuYyBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdCVUlMRENGR19GVU5DUycsIGxvY2FsZGF0YSk6CisgICAgICAgIGcgPSBnbG9iYWxzKCkKKyAgICAgICAgaWYgZnVuYyBub3QgaW4gZzoKKyAgICAgICAgICAgIGJiLndhcm4oIkJ1aWxkIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gJyVzJyBkb2VzIG5vdCBleGlzdCIgJSBmdW5jKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmxpbmVzID0gZ1tmdW5jXShsb2NhbGRhdGEpCisgICAgICAgICAgICBpZiBmbGluZXM6CisgICAgICAgICAgICAgICAgc3RhdHVzbGluZXMuZXh0ZW5kKGZsaW5lcykKKworICAgIHN0YXR1c2hlYWRlciA9IGQuZ2V0VmFyKCdCVUlMRENGR19IRUFERVInLCBUcnVlKQorICAgIHJldHVybignXG4lc1xuJXNcbicgJSAoc3RhdHVzaGVhZGVyLCAnXG4nLmpvaW4oc3RhdHVzbGluZXMpKSkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfbWV0YWRhdGFfcmV2cyhkKToKKyAgICAjIFdlIHdhbnQgYW4gZWFzaWx5IG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IGhlcmUsIHNvIGdldF9sYXllcnNfYnJhbmNoX3JldiBpc24ndCBxdWl0ZSB3aGF0IHdlIHdhbnQKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBvdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKToKKyAgICB2YXJzID0gdmFycy5zcGxpdCgpCisgICAgbGlzdHZhcnMgPSBsaXN0dmFycy5zcGxpdCgpCisgICAgcmV0ID0gIiIKKyAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YXIgaW4gbGlzdHZhcnM6CisgICAgICAgICAgICAjIFNxdWFzaCBvdXQgc3BhY2VzCisgICAgICAgICAgICB2YWx1ZSA9IG9lLnV0aWxzLnNxdWFzaHNwYWNlcyh2YWx1ZSkKKyAgICAgICAgcmV0ICs9ICIlcyA9ICVzXG4iICUgKHZhciwgdmFsdWUpCisgICAgcmV0dXJuIHJldC5yc3RyaXAoJ1xuJykKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2V2YXJzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICByZXR1cm4gIiIKKyAgICBpbWFnZXZhcnMgPSAiRElTVFJPIERJU1RST19WRVJTSU9OIFVTRVJfQ0xBU1NFUyBJTUFHRV9DTEFTU0VTIElNQUdFX0ZFQVRVUkVTIElNQUdFX0xJTkdVQVMgSU1BR0VfSU5TVEFMTCBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUgUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIKKyAgICBsaXN0dmFycyA9ICJVU0VSX0NMQVNTRVMgSU1BR0VfQ0xBU1NFUyBJTUFHRV9GRUFUVVJFUyBJTUFHRV9MSU5HVUFTIElNQUdFX0lOU1RBTEwgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoaW1hZ2V2YXJzLCBsaXN0dmFycywgZCkKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfc2RrdmFycyhkKToKKyAgICBpZiBkLmdldFZhcignQkJfV09SS0VSQ09OVEVYVCcsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuICIiCisgICAgc2RrdmFycyA9ICJESVNUUk8gRElTVFJPX1ZFUlNJT04gU0RLX05BTUUgU0RLX1ZFUlNJT04gU0RLTUFDSElORSBTREtJTUFHRV9GRUFUVVJFUyBCQURfUkVDT01NRU5EQVRJT05TIE5PX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgbGlzdHZhcnMgPSAiU0RLSU1BR0VfRkVBVFVSRVMgQkFEX1JFQ09NTUVOREFUSU9OUyBQQUNLQUdFX0VYQ0xVREUiCisgICAgcmV0dXJuIG91dHB1dHZhcnMoc2RrdmFycywgbGlzdHZhcnMsIGQpCisKKworZGVmIGJ1aWxkaGlzdG9yeV9nZXRfY21kbGluZShkKToKKyAgICBpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgnYmluL2JpdGJha2UnKToKKyAgICAgICAgYmluY21kID0gJ2JpdGJha2UnCisgICAgZWxzZToKKyAgICAgICAgYmluY21kID0gc3lzLmFyZ3ZbMF0KKyAgICByZXR1cm4gJyVzICVzJyAlIChiaW5jbWQsICcgJy5qb2luKHN5cy5hcmd2WzE6XSkpCisKKworYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQoKSB7CisJaWYgWyAiJDMiID0gIiIgXSA7IHRoZW4KKwkJY29tbWl0b3B0cz0iJHtCVUlMREhJU1RPUllfRElSfS8gLS1hbGxvdy1lbXB0eSIKKwkJaXRlbT0iTm8gY2hhbmdlcyIKKwllbHNlCisJCWNvbW1pdG9wdHM9IiQzIG1ldGFkYXRhLXJldnMiCisJCWl0ZW09IiQzIgorCWZpCisJaWYgWyAiJHtCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVN9IiA9ICIwIiBdIDsgdGhlbgorCQlyZXN1bHQ9InN1Y2NlZWRlZCIKKwllbHNlCisJCXJlc3VsdD0iZmFpbGVkIgorCWZpCisJY2FzZSAke0JVSUxESElTVE9SWV9CVUlMRF9JTlRFUlJVUFRFRH0gaW4KKwkJMSkKKwkJCXJlc3VsdD0iJHJlc3VsdCAoaW50ZXJydXB0ZWQpIgorCQkJOzsKKwkJMikKKwkJCXJlc3VsdD0iJHJlc3VsdCAoZm9yY2UgaW50ZXJydXB0ZWQpIgorCQkJOzsKKwllc2FjCisJY29tbWl0bXNnZmlsZT1gbWt0ZW1wYAorCWNhdCA+ICRjb21taXRtc2dmaWxlIDw8IEVORAorJGl0ZW06IEJ1aWxkICR7QlVJTEROQU1FfSBvZiAke0RJU1RST30gJHtESVNUUk9fVkVSU0lPTn0gZm9yIG1hY2hpbmUgJHtNQUNISU5FfSBvbiAkMgorCitjbWQ6ICQxCisKK3Jlc3VsdDogJHJlc3VsdAorCittZXRhZGF0YSByZXZpc2lvbnM6CitFTkQKKwljYXQgJHtCVUlMREhJU1RPUllfRElSfS9tZXRhZGF0YS1yZXZzID4+ICRjb21taXRtc2dmaWxlCisJZ2l0IGNvbW1pdCAkY29tbWl0b3B0cyAtRiAkY29tbWl0bXNnZmlsZSAtLWF1dGhvciAiJHtCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUn0iID4gL2Rldi9udWxsCisJcm0gJGNvbW1pdG1zZ2ZpbGUKK30KKworYnVpbGRoaXN0b3J5X2NvbW1pdCgpIHsKKwlpZiBbICEgLWQgJHtCVUlMREhJU1RPUllfRElSfSBdIDsgdGhlbgorCQkjIENvZGUgYWJvdmUgdGhhdCBjcmVhdGVzIHRoaXMgZGlyIG5ldmVyIGV4ZWN1dGVkLCBzbyB0aGVyZSBjYW4ndCBiZSBhbnl0aGluZyB0byBjb21taXQKKwkJcmV0dXJuCisJZmkKKworCSMgQ3JlYXRlIGEgbWFjaGluZS1yZWFkYWJsZSBsaXN0IG9mIG1ldGFkYXRhIHJldmlzaW9ucyBmb3IgZWFjaCBsYXllcgorCWNhdCA+ICR7QlVJTERISVNUT1JZX0RJUn0vbWV0YWRhdGEtcmV2cyA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9tZXRhZGF0YV9yZXZzKGQpfQorRU5ECisKKwkoIGNkICR7QlVJTERISVNUT1JZX0RJUn0vCisJCSMgSW5pdGlhbGlzZSB0aGUgcmVwbyBpZiBuZWNlc3NhcnkKKwkJaWYgWyAhIC1kIC5naXQgXSA7IHRoZW4KKwkJCWdpdCBpbml0IC1xCisJCWVsc2UKKwkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMyBidWlsZC1taW51cy0yID4gL2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0yIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCQlnaXQgdGFnIC1mIGJ1aWxkLW1pbnVzLTEgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCWZpCisJCSMgSWYgdGhlIHVzZXIgaGFzbid0IHNldCB1cCB0aGVpciBuYW1lL2VtYWlsLCBzZXQgc29tZSBkZWZhdWx0cworCQkjIGp1c3QgZm9yIHRoaXMgcmVwbyAob3RoZXJ3aXNlIHRoZSBjb21taXQgd2lsbCBmYWlsIHdpdGggb2xkZXIKKwkJIyB2ZXJzaW9ucyBvZiBnaXQpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsID4gL2Rldi9udWxsIDsgdGhlbgorCQkJZ2l0IGNvbmZpZyAtLWxvY2FsIHVzZXIuZW1haWwgImJ1aWxkaGlzdG9yeUAke0RJU1RST30iCisJCWZpCisJCWlmICEgZ2l0IGNvbmZpZyB1c2VyLm5hbWUgPiAvZGV2L251bGwgOyB0aGVuCisJCQlnaXQgY29uZmlnIC0tbG9jYWwgdXNlci5uYW1lICJidWlsZGhpc3RvcnkiCisJCWZpCisJCSMgQ2hlY2sgaWYgdGhlcmUgYXJlIG5ldy9jaGFuZ2VkIGZpbGVzIHRvIGNvbW1pdCAob3RoZXIgdGhhbiBtZXRhZGF0YS1yZXZzKQorCQlyZXBvc3RhdHVzPWBnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgZ3JlcCAtdiAiIG1ldGFkYXRhLXJldnMkImAKKwkJSE9TVE5BTUU9YGhvc3RuYW1lIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKwkJQ01ETElORT0iJHtAYnVpbGRoaXN0b3J5X2dldF9jbWRsaW5lKGQpfSIKKwkJaWYgWyAiJHJlcG9zdGF0dXMiICE9ICIiIF0gOyB0aGVuCisJCQlnaXQgYWRkIC1BIC4KKwkJCSMgcG9yY2VsYWluIG91dHB1dCBsb29rcyBsaWtlICI/PyBwYWNrYWdlcy9mb28vYmFyIgorCQkJIyBFbnN1cmUgd2UgY29tbWl0IG1ldGFkYXRhLXJldnMgd2l0aCB0aGUgZmlyc3QgY29tbWl0CisJCQlmb3IgZW50cnkgaW4gYGVjaG8gIiRyZXBvc3RhdHVzIiB8IGF3ayAne3ByaW50ICQyfScgfCBhd2sgLUYvICd7cHJpbnQgJDF9JyB8IHNvcnQgfCB1bmlxYCA7IGRvCisJCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIiAiJGVudHJ5IgorCQkJZG9uZQorCQkJZ2l0IGdjIC0tYXV0byAtLXF1aWV0CisJCWVsc2UKKwkJCWJ1aWxkaGlzdG9yeV9zaW5nbGVfY29tbWl0ICIkQ01ETElORSIgIiRIT1NUTkFNRSIKKwkJZmkKKwkJaWYgWyAiJHtCVUlMREhJU1RPUllfUFVTSF9SRVBPfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWdpdCBwdXNoIC1xICR7QlVJTERISVNUT1JZX1BVU0hfUkVQT30KKwkJZmkpIHx8IHRydWUKK30KKworcHl0aG9uIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhLmdldFZhcignQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgVHJ1ZSkuc3RyaXAoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiQlVJTERISVNUT1JZX0NPTU1JVCIsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIldyaXRpbmcgYnVpbGRoaXN0b3J5IikKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCVUlMREhJU1RPUllfQlVJTERfRkFJTFVSRVMnLCBzdHIoZS5fZmFpbHVyZXMpKQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBnZXRhdHRyKGUsICdfaW50ZXJydXB0ZWQnLCAwKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignQlVJTERISVNUT1JZX0JVSUxEX0lOVEVSUlVQVEVEJywgc3RyKGludGVycnVwdGVkKSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiYnVpbGRoaXN0b3J5X2NvbW1pdCIsIGxvY2FsZGF0YSkKK30KKworYWRkaGFuZGxlciBidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyCitidWlsZGhpc3RvcnlfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCisKKworIyBGSVhNRSB0aGlzIG91Z2h0IHRvIGJlIG1vdmVkIGludG8gdGhlIGZldGNoZXIKK2RlZiBfZ2V0X3NyY3Jldl92YWx1ZXMoZCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB2ZXJzaW9uIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IHJlY2lwZQorICAgICIiIgorCisgICAgc2NtcyA9IFtdCisgICAgZmV0Y2hlciA9IGJiLmZldGNoLkZldGNoKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKSwgZCkKKyAgICB1cmxkYXRhID0gZmV0Y2hlci51ZAorICAgIGZvciB1IGluIHVybGRhdGE6CisgICAgICAgIGlmIHVybGRhdGFbdV0ubWV0aG9kLnN1cHBvcnRzX3NyY3JldigpOgorICAgICAgICAgICAgc2Ntcy5hcHBlbmQodSkKKworICAgIGF1dG9pbmNfdGVtcGwgPSAnQVVUT0lOQysnCisgICAgZGljdF9zcmNyZXZzID0ge30KKyAgICBkaWN0X3RhZ19zcmNyZXZzID0ge30KKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHVkID0gdXJsZGF0YVtzY21dCisgICAgICAgIGZvciBuYW1lIGluIHVkLm5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldiA9IHVkLm1ldGhvZC5zb3J0YWJsZV9yZXZpc2lvbih1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBzdXBwb3J0IG9sZCBiaXRiYWtlIHZlcnNpb25zCisgICAgICAgICAgICAgICAgcmV2ID0gdWQubWV0aG9kLnNvcnRhYmxlX3JldmlzaW9uKHNjbSwgdWQsIGQsIG5hbWUpCisgICAgICAgICAgICAjIENsZWFuIHRoaXMgdXAgd2hlbiB3ZSBuZXh0IGJ1bXAgYml0YmFrZSB2ZXJzaW9uCisgICAgICAgICAgICBpZiB0eXBlKHJldikgIT0gc3RyOgorICAgICAgICAgICAgICAgIGF1dG9pbmMsIHJldiA9IHJldgorICAgICAgICAgICAgZWxpZiByZXYuc3RhcnRzd2l0aChhdXRvaW5jX3RlbXBsKToKKyAgICAgICAgICAgICAgICByZXYgPSByZXZbbGVuKGF1dG9pbmNfdGVtcGwpOl0KKyAgICAgICAgICAgIGRpY3Rfc3JjcmV2c1tuYW1lXSA9IHJldgorICAgICAgICAgICAgaWYgJ3RhZycgaW4gdWQucGFybToKKyAgICAgICAgICAgICAgICB0YWcgPSB1ZC5wYXJtWyd0YWcnXTsKKyAgICAgICAgICAgICAgICBrZXkgPSBuYW1lKydfJyt0YWcKKyAgICAgICAgICAgICAgICBkaWN0X3RhZ19zcmNyZXZzW2tleV0gPSByZXYKKyAgICByZXR1cm4gKGRpY3Rfc3JjcmV2cywgZGljdF90YWdfc3JjcmV2cykKKworZG9fZmV0Y2hbcG9zdGZ1bmNzXSArPSAid3JpdGVfc3JjcmV2IgorZG9fZmV0Y2hbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ3cml0ZV9zcmNyZXYiCitweXRob24gd3JpdGVfc3JjcmV2KCkgeworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKyAgICBzcmNyZXZmaWxlID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsICdsYXRlc3Rfc3JjcmV2JykKKworICAgIHNyY3JldnMsIHRhZ19zcmNyZXZzID0gX2dldF9zcmNyZXZfdmFsdWVzKGQpCisgICAgaWYgc3JjcmV2czoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2hpc3RkaXIpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ2hpc3RkaXIpCisgICAgICAgIG9sZF90YWdfc3JjcmV2cyA9IHt9CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3JldmZpbGUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIHRhZ18nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKCcjIHRhZ18nLCAnJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCciJywgJycpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF90YWdfc3JjcmV2c1trZXldID0gdmFsdWUKKyAgICAgICAgd2l0aCBvcGVuKHNyY3JldmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIEZhbHNlKSBvciAnSU5WQUxJRCcKKyAgICAgICAgICAgIGlmIG9yaWdfc3JjcmV2ICE9ICdJTlZBTElEJzoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFViA9ICIlcyJcbicgJSBvcmlnX3NyY3JldikKKyAgICAgICAgICAgIGlmIGxlbihzcmNyZXZzKSA+IDE6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHNyY3JldiBpbiBzcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG9yaWdfc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVl8lcycgJSBuYW1lLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3JpZ19zcmNyZXY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcjIFNSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgb3JpZ19zcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCdTUkNSRVZfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFViA9ICIlcyJcbicgJSBzcmNyZXZzLml0ZXJ2YWx1ZXMoKS5uZXh0KCkpCisgICAgICAgICAgICBpZiBsZW4odGFnX3NyY3JldnMpID4gMDoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgc3JjcmV2IGluIHRhZ19zcmNyZXZzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgdGFnXyVzID0gIiVzIlxuJyAlIChuYW1lLCBzcmNyZXYpKQorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIG9sZF90YWdfc3JjcmV2cyBhbmQgb2xkX3RhZ19zcmNyZXZzW25hbWVdICE9IHNyY3JldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJSZXZpc2lvbiBmb3IgdGFnICVzIGluIHBhY2thZ2UgJXMgd2FzIGNoYW5nZWQgc2luY2UgbGFzdCBidWlsZCAoZnJvbSAlcyB0byAlcykiICUgKG5hbWUsIHBrZywgb2xkX3RhZ19zcmNyZXZzW25hbWVdLCBzcmNyZXYpKQorCisgICAgZWxzZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjcmV2ZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc3JjcmV2ZmlsZSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLXN1bW1hcnkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLXN1bW1hcnkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWVhZDlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCkBAIC0wLDAgKzEsMzcgQEAKKyMgU3VtbWFyaXplIHNzdGF0ZSB1c2FnZSBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZAorcHl0aG9uIGJ1aWxkc3RhdHNfc3VtbWFyeSAoKSB7CisgICAgaW1wb3J0IGNvbGxlY3Rpb25zCisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGJuID0gZ2V0X2JuKGUpCisgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhic2Rpcik6CisgICAgICAgIHJldHVybgorCisgICAgc3N0YXRldGFza3MgPSAoZS5kYXRhLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGJ1aWx0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBbc2V0KCksIHNldCgpXSkKKyAgICBmb3IgcGYgaW4gb3MubGlzdGRpcihic2Rpcik6CisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIHBmKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcih0YXNrZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdGFza3MgPSBvcy5saXN0ZGlyKHRhc2tkaXIpCisgICAgICAgIGZvciB0IGluIHNzdGF0ZXRhc2tzOgorICAgICAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICAgICAgaWYgdCBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBub19zc3RhdGUuYWRkKHBmKQorICAgICAgICAgICAgZWxpZiB0ICsgJ19zZXRzY2VuZScgaW4gdGFza3M6CisgICAgICAgICAgICAgICAgc3N0YXRlLmFkZChwZikKKworICAgIGhlYWRlcl9wcmludGVkID0gRmFsc2UKKyAgICBmb3IgdCBpbiBzc3RhdGV0YXNrczoKKyAgICAgICAgbm9fc3N0YXRlLCBzc3RhdGUgPSBidWlsdFt0XQorICAgICAgICBpZiBub19zc3RhdGUgfCBzc3RhdGU6CisgICAgICAgICAgICBpZiBub3QgaGVhZGVyX3ByaW50ZWQ6CisgICAgICAgICAgICAgICAgaGVhZGVyX3ByaW50ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgYmIubm90ZSgiQnVpbGQgY29tcGxldGlvbiBzdW1tYXJ5OiIpCisKKyAgICAgICAgICAgIGJiLm5vdGUoIiAgezB9OiB7MX0lIHNzdGF0ZSByZXVzZSAoezJ9IHNldHNjZW5lLCB7M30gc2NyYXRjaCkiLmZvcm1hdCh0LCAxMDAqbGVuKHNzdGF0ZSkvKGxlbihzc3RhdGUpK2xlbihub19zc3RhdGUpKSwgbGVuKHNzdGF0ZSksIGxlbihub19zc3RhdGUpKSkKK30KK2FkZGhhbmRsZXIgYnVpbGRzdGF0c19zdW1tYXJ5CitidWlsZHN0YXRzX3N1bW1hcnlbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWM1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy5iYmNsYXNzCkBAIC0wLDAgKzEsMjcwIEBACitCVUlMRFNUQVRTX0JBU0UgPSAiJHtUTVBESVJ9L2J1aWxkc3RhdHMvIgorQlVJTERTVEFUU19CTkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5idWlsZG5hbWUiCitCVUlMRFNUQVRTX0RFVkZJTEUgPSAiJHtCVUlMRFNUQVRTX0JBU0V9Ly5kZXZpY2UiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJ1aWxkIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgorIworIyBUaGUgQ1BVIGFuZCBUaW1lIGdhdGhlcmluZy90cmFja2luZyBmdW5jdGlvbnMgYW5kIGJiZXZlbnQgaW5zcGlyYXRpb24KKyMgd2VyZSB3cml0dGVuIGJ5IENocmlzdG9waGVyIExhcnNvbiBhbmQgY2FuIGJlIHNlZW4gaGVyZToKKyMgaHR0cDovL2tlcmdvdGgucGFzdGV5Lm5ldC8xNDI4MTMKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBnZXRfcHJvY2Vzc19jcHV0aW1lKHBpZCk6CisgICAgd2l0aCBvcGVuKCIvcHJvYy8lZC9zdGF0IiAlIHBpZCwgInIiKSBhcyBmOgorICAgICAgICBmaWVsZHMgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKQorICAgICMgMTM6IHV0aW1lLCAxNDogc3RpbWUsIDE1OiBjdXRpbWUsIDE2OiBjc3RpbWUKKyAgICByZXR1cm4gc3VtKGludChmaWVsZCkgZm9yIGZpZWxkIGluIGZpZWxkc1sxMzoxNl0pCisKK2RlZiBnZXRfY3B1dGltZSgpOgorICAgIHdpdGggb3BlbigiL3Byb2Mvc3RhdCIsICJyIikgYXMgZjoKKyAgICAgICAgZmllbGRzID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0KClbMTpdCisgICAgcmV0dXJuIHN1bShpbnQoZmllbGQpIGZvciBmaWVsZCBpbiBmaWVsZHMpCisKK2RlZiBzZXRfYm4oZSk6CisgICAgYm4gPSBlLmdldFBrZ3MoKVswXSArICItIiArIGUuZGF0YS5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSkpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQk5GSUxFJywgVHJ1ZSksICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShvcy5wYXRoLmpvaW4oYm4sIGUuZGF0YS5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpKSkKKworZGVmIGdldF9ibihlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSkgYXMgZjoKKyAgICAgICAgYm4gPSBmLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gYm4KKworZGVmIHNldF9kZXZpY2UoZSk6CisgICAgdG1wZGlyID0gZS5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkZXZmaWxlID0gZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShkZXZmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFdlIGxvb2sgZm9yIHRoZSB2b2x1bWUgVE1QRElSIGxpdmVzIG9uLiBUbyBkbyBhbGwgZGlza3Mgd291bGQgbWFrZSBsaXR0bGUKKyAgICAjIHNlbnNlIGFuZCBub3QgZ2l2ZSB1cyBhbnkgcGFydGljdWxhcmx5IHVzZWZ1bCBkYXRhLiBJbiB0aGVvcnkgd2UgY291bGQgZG8KKyAgICAjIHNvbWV0aGluZyBsaWtlIHN0aWNrIERMX0RJUiBvbiBhIGRpZmZlcmVudCBwYXJ0aXRpb24gYW5kIHRoaXMgd291bGQKKyAgICAjIHRocm93IHN0YXRzIGdhdGhlcmluZyBvZmYuIFRoZSBzYW1lIGdvZXMgd2l0aCBTU1RBVEVfRElSLiBIb3dldmVyLCBsZXQncworICAgICMgZ2V0IHRoZSBiYXNpY3MgaW4gaGVyZSBhbmQgd29yayBvbiB0aGUgY29ybmVyY2FzZXMgbGF0ZXIuCisgICAgIyBBIG5vdGUuIC9wcm9jL2Rpc2tzdGF0cyBkb2VzIG5vdCBjb250YWluIGluZm8gb24gZW5jcnlwdGZzLCB0bXBmcywgZXRjLgorICAgICMgSWYgd2UgZW5kIHVwIGhpdHRpbmcgb25lIG9mIHRoZXNlIGZzLCB3ZSdsbCBqdXN0IHNraXAgZGlza3N0YXRzIGNvbGxlY3Rpb24uCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIGRldmljZSA9IG9zLnN0YXQodG1wZGlyKQorICAgIG1ham9yZGV2ID0gb3MubWFqb3IobG9uZyhkZXZpY2Uuc3RfZGV2KSkKKyAgICBtaW5vcmRldiA9IG9zLm1pbm9yKGxvbmcoZGV2aWNlLnN0X2RldikpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQnVnIDE3MDA6CisgICAgIyBCZWNhdXNlIHRtcGZzL2VuY3J5cHRmcy9yYW1mcyBldGMgaW5zZXJ0cyBubyBlbnRyeSBpbiAvcHJvYy9kaXNrc3RhdHMKKyAgICAjIHdlIHNldCByZGV2IHRvIE5vTG9naWNhbERldmljZSBhbmQgc2VhcmNoIGZvciBpdCBsYXRlci4gSWYgd2UgZmluZCBOTEQKKyAgICAjIHdlIGRvIG5vdCBjb2xsZWN0IGRpc2tzdGF0cyBhcyB0aGUgbWV0aG9kIHRvIGNvbGxlY3QgbWVhbmluZ2Z1bCBzdGF0aXN0aWNzCisgICAgIyBmb3IgdGhlc2UgZnMgdHlwZXMgcmVxdWlyZXMgYSBiaXQgbW9yZSByZXNlYXJjaC4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgcmRldiA9ICJOb0xvZ2ljYWxEZXZpY2UiCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIi9wcm9jL2Rpc2tzdGF0cyIsICJyIikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbWFqb3JkZXYgPT0gaW50KGxpbmUuc3BsaXQoKVswXSkgYW5kIG1pbm9yZGV2ID09IGludChsaW5lLnNwbGl0KClbMV0pOgorICAgICAgICAgICAgICAgICAgICByZGV2ID0gbGluZS5zcGxpdCgpWzJdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgd2l0aCBvcGVuKGRldmZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShyZGV2KQorCitkZWYgZ2V0X2RldmljZShlKToKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19ERVZGSUxFJywgVHJ1ZSkpIGFzIGY6CisgICAgICAgIGRldmljZSA9IGYucmVhZGxpbmUoKQorICAgIHJldHVybiBkZXZpY2UKKworZGVmIGdldF9kaXNrc3RhdHMoZGV2KToKKyAgICBpbXBvcnQgaXRlcnRvb2xzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgRm9yIGluZm8gb24gd2hhdCB0aGVzZSBhcmUsIHNlZSBrZXJuZWwgZG9jIGZpbGUgaW9zdGF0cy50eHQKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgRFNUQVRfS0VZUyA9IFsnUmVhZHNDb21wJywgJ1JlYWRzTWVyZ2VkJywgJ1NlY3RSZWFkJywgJ1RpbWVSZWFkcycsICdXcml0ZXNDb21wJywgJ1NlY3RXcml0ZScsICdUaW1lV3JpdGUnLCAnSU9pblByb2dyZXNzJywgJ1RpbWVJTycsICdXVGltZUlPJ10KKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvZGlza3N0YXRzIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIHggaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBkZXYgaW4geDoKKyAgICAgICAgICAgICAgICAgICAgZGlza3N0YXRzX3ZhbCA9IHgucnN0cmlwKCkuc3BsaXQoKVs0Ol0KKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICByZXR1cm4KKyAgICBkaXNrc3RhdHMgPSBkaWN0KGl0ZXJ0b29scy5pemlwKERTVEFUX0tFWVMsIGRpc2tzdGF0c192YWwpKQorICAgIHJldHVybiBkaXNrc3RhdHMKKworZGVmIHNldF9kaXNrZGF0YSh2YXIsIGRldiwgZGF0YSk6CisgICAgZGF0YS5zZXRWYXIodmFyLCBnZXRfZGlza3N0YXRzKGRldikpCisKK2RlZiBnZXRfZGlza2RhdGEodmFyLCBkZXYsIGRhdGEpOgorICAgIG9sZGRpc2tkYXRhID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBkaXNrZGF0YSA9IHt9CisgICAgaWYgb2xkZGlza2RhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgbmV3ZGlza2RhdGEgPSBnZXRfZGlza3N0YXRzKGRldikKKyAgICBmb3Iga2V5IGluIG9sZGRpc2tkYXRhLml0ZXJrZXlzKCk6CisgICAgICAgIGRpc2tkYXRhWyJTdGFydCIra2V5XSA9IHN0cihpbnQob2xkZGlza2RhdGFba2V5XSkpCisgICAgICAgIGRpc2tkYXRhWyJFbmQiK2tleV0gPSBzdHIoaW50KG5ld2Rpc2tkYXRhW2tleV0pKQorICAgIHJldHVybiBkaXNrZGF0YQorCitkZWYgc2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICBpZiBzZXJ2ZXJfdGltZToKKyAgICAgICAgdGltZSA9IHNlcnZlcl90aW1lCisgICAgZWxzZToKKyAgICAgICAgdGltZSA9IHRpbWUudGltZSgpCisgICAgY3B1dGltZSA9IGdldF9jcHV0aW1lKCkKKyAgICBwcm9jdGltZSA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpCisgICAgZGF0YS5zZXRWYXIodmFyLCAodGltZSwgY3B1dGltZSwgcHJvY3RpbWUpKQorCitkZWYgZ2V0X3RpbWVkYXRhKHZhciwgZGF0YSwgc2VydmVyX3RpbWU9Tm9uZSk6CisgICAgaW1wb3J0IHRpbWUKKyAgICB0aW1lZGF0YSA9IGRhdGEuZ2V0VmFyKHZhciwgRmFsc2UpCisgICAgaWYgdGltZWRhdGEgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgb2xkdGltZSwgb2xkY3B1LCBvbGRwcm9jID0gdGltZWRhdGEKKyAgICBwcm9jZGlmZiA9IGdldF9wcm9jZXNzX2NwdXRpbWUob3MuZ2V0cGlkKCkpIC0gb2xkcHJvYworICAgIGNwdWRpZmYgPSBnZXRfY3B1dGltZSgpIC0gb2xkY3B1CisgICAgaWYgc2VydmVyX3RpbWU6CisgICAgICAgIGVuZF90aW1lID0gc2VydmVyX3RpbWUKKyAgICBlbHNlOgorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCisgICAgdGltZWRpZmYgPSBlbmRfdGltZSAtIG9sZHRpbWUKKyAgICBpZiBjcHVkaWZmID4gMDoKKyAgICAgICAgY3B1cGVyYyA9IGZsb2F0KHByb2NkaWZmKSAqIDEwMCAvIGNwdWRpZmYKKyAgICBlbHNlOgorICAgICAgICBjcHVwZXJjID0gTm9uZQorICAgIHJldHVybiB0aW1lZGlmZiwgY3B1cGVyYworCitkZWYgd3JpdGVfdGFza19kYXRhKHN0YXR1cywgbG9nZmlsZSwgZGV2LCBlKToKKyAgICBibiA9IGdldF9ibihlKQorICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGxvZ2ZpbGUpLCAiYSIpIGFzIGY6CisgICAgICAgIHRpbWVkYXRhID0gZ2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgaWYgdGltZWRhdGE6CisgICAgICAgICAgICBlbGFwc2VkdGltZSwgY3B1ID0gdGltZWRhdGEKKyAgICAgICAgICAgIGYud3JpdGUoYmIuZGF0YS5leHBhbmQoIiR7UEZ9OiAlczogRWxhcHNlZCB0aW1lOiAlMC4yZiBzZWNvbmRzIFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS50YXNrLCBlbGFwc2VkdGltZSksIGUuZGF0YSkpCisgICAgICAgICAgICBpZiBjcHU6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIEhlcmUgd2UgZ2F0aGVyIHVwIGRpc2sgZGF0YS4gSW4gYW4gZWZmb3J0IHRvIGF2b2lkIGx5aW5nIHdpdGggc3RhdHMKKyAgICAgICAgIyBJIGRvIGEgYmFyZSBtaW5pbXVtIG9mIGFuYWx5c2lzIG9mIGNvbGxlY3RlZCBkYXRhLgorICAgICAgICAjIFRoZSBzaW1wbGUgZmFjdCBpcywgZG9pbmcgZGlzayBpbyBjb2xsZWN0aW9uIG9uIGEgcGVyIHByb2Nlc3MgYmFzaXMKKyAgICAgICAgIyB3aXRob3V0IGVmZmVjdGluZyBidWlsZCB0aW1lIHdvdWxkIGJlIGRpZmZpY3VsdC4KKyAgICAgICAgIyBGb3IgdGhlIGJlc3QgaW5mb3JtYXRpb24sIHJ1bm5pbmcgdGhpbmdzIHdpdGggQkJfVE9UQUxfVEhSRUFEUyA9ICIxIgorICAgICAgICAjIHdvdWxkIHJldHVybiBhY2N1cmF0ZSBwZXIgdGFzayByZXN1bHRzLgorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGlmIGRldiAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIGRpc2tkYXRhID0gZ2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXYsIGUuZGF0YSkKKyAgICAgICAgICAgIGlmIGRpc2tkYXRhOgorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tkYXRhLml0ZXJrZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyBkaXNrZGF0YVtrZXldICsgIlxuIikKKyAgICAgICAgaWYgc3RhdHVzIGlzICJwYXNzZWQiOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBQQVNTRUQgXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi53cml0ZSgiU3RhdHVzOiBGQUlMRUQgXG4iKQorICAgICAgICBmLndyaXRlKCJFbmRlZDogJTAuMmYgXG4iICUgZS50aW1lKQorCitweXRob24gcnVuX2J1aWxkc3RhdHMgKCkgeworICAgIGltcG9ydCBiYi5idWlsZAorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBiYi5kYXRhCisgICAgaW1wb3J0IHRpbWUsIHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIGF0IGZpcnN0IHBhc3MgbWFrZSB0aGUgYnVpbGRzdGF0cyBoZXJpYXJjaHkgYW5kIHRoZW4KKyAgICAgICAgIyBzZXQgdGhlIGJ1aWxkbmFtZQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpKQorICAgICAgICBzZXRfYm4oZSkKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgc2V0X2RldmljZShlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYnNkaXIpCisgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgIHNldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgIGJ1aWxkX3RpbWUgPSBvcy5wYXRoLmpvaW4oYnNkaXIsICJidWlsZF9zdGF0cyIpCisgICAgICAgICMgd3JpdGUgc3RhcnQgb2YgYnVpbGQgaW50byBidWlsZF90aW1lCisgICAgICAgIHdpdGggb3BlbihidWlsZF90aW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBob3N0X2luZm8gPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICBmLndyaXRlKCJIb3N0IEluZm86ICIpCisgICAgICAgICAgICBmb3IgeCBpbiBob3N0X2luZm86CisgICAgICAgICAgICAgICAgaWYgeDoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSh4ICsgIiAiKQorICAgICAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICAgICAgZi53cml0ZSgiQnVpbGQgU3RhcnRlZDogJTAuMmYgXG4iICUgdGltZS50aW1lKCkpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3RpbWUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgIyBXcml0ZSBidWlsZCBzdGF0aXN0aWNzIGZvciB0aGUgYnVpbGQKKyAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAgICAgdGltZWRhdGEgPSBnZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfYnVpbGQiLCBlLmRhdGEpCisgICAgICAgICAgICBpZiB0aW1lZGF0YToKKyAgICAgICAgICAgICAgICB0aW1lLCBjcHUgPSB0aW1lZGF0YQorICAgICAgICAgICAgICAgICMgd3JpdGUgZW5kIG9mIGJ1aWxkIGFuZCBjcHUgdXNlZCBpbnRvIGJ1aWxkX3RpbWUKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJFbGFwc2VkIHRpbWU6ICUwLjJmIHNlY29uZHMgXG4iICUgKHRpbWUpKQorICAgICAgICAgICAgICAgIGlmIGNwdToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiQ1BVIHVzYWdlOiAlMC4xZiUlIFxuIiAlIGNwdSkKKyAgICAgICAgICAgIGlmIGRldmljZSAhPSAiTm9Mb2dpY2FsRGV2aWNlIjoKKyAgICAgICAgICAgICAgICBkaXNraW8gPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfYnVpbGQiLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBkaXNraW86CisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGRpc2tpby5pdGVya2V5cygpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIGRpc2tpb1trZXldICsgIlxuIikKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N0YXJ0ZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmdldFZhcignUEYnLCBUcnVlKSkKKyAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgc2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX3Rhc2siLCBkZXZpY2UsIGUuZGF0YSkKKyAgICAgICAgc2V0X3RpbWVkYXRhKCJfX3RpbWVkYXRhX3Rhc2siLCBlLmRhdGEsIGUudGltZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhc2tkaXIpCisgICAgICAgICMgd3JpdGUgaW50byB0aGUgdGFzayBldmVudCBmaWxlIHRoZSBuYW1lIGFuZCBzdGFydCB0aW1lCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiRXZlbnQ6ICVzIFxuIiAlIGJiLmV2ZW50LmdldE5hbWUoZSkpCisgICAgICAgICAgICBmLndyaXRlKCJTdGFydGVkOiAlMC4yZiBcbiIgJSBlLnRpbWUpCisKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgICAgICB3cml0ZV90YXNrX2RhdGEoInBhc3NlZCIsIG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCBkZXZpY2UsIGUpCisgICAgICAgIGlmIGUudGFzayA9PSAiZG9fcm9vdGZzIjoKKyAgICAgICAgICAgIGJzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJzLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgcm9vdGZzID0gZS5kYXRhLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICByb290ZnNfc2l6ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWyJkdSIsICItc2giLCByb290ZnNdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiVW5jb21wcmVzc2VkIFJvb3RmcyBzaXplOiAlcyIgJSByb290ZnNfc2l6ZSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrRmFpbGVkKToKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQorICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgICAgIHdyaXRlX3Rhc2tfZGF0YSgiZmFpbGVkIiwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGRldmljZSwgZSkKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgTGV0cyBtYWtlIHRoaW5ncyBlYXNpZXIgYW5kIHRlbGwgcGVvcGxlIHdoZXJlIHRoZSBidWlsZCBmYWlsZWQgaW4KKyAgICAgICAgIyBidWlsZF9zdGF0dXMuIFdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIEJ1aWxkQ29tcGxldGVkIHRyaWdnZXJzIG5vCisgICAgICAgICMgbWF0dGVyIHdoYXQgdGhlIHN0YXR1cyBvZiB0aGUgYnVpbGQgYWN0dWFsbHkgaXMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGJ1aWxkX3N0YXR1cyA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3N0YXR1cywgImEiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShlLmRhdGEuZXhwYW5kKCJGYWlsZWQgYXQ6ICR7UEZ9IGF0IHRhc2s6ICVzIFxuIiAlIGUudGFzaykpCit9CisKK2FkZGhhbmRsZXIgcnVuX2J1aWxkc3RhdHMKK3J1bl9idWlsZHN0YXRzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdGFydGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NjYWNoZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NjYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZGNlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitDQ0FDSEUgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgJ2NjYWNoZScpIGFuZCAnY2NhY2hlICd9IgorZXhwb3J0IENDQUNIRV9ESVIgPz0gIiR7VE1QRElSfS9jY2FjaGUvJHtNVUxUSU1BQ0hfSE9TVF9TWVN9LyR7UE59IgorQ0NBQ0hFX0RJU0FCTEVbdW5leHBvcnRdID0gIjEiCisKK2RvX2NvbmZpZ3VyZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKK2RvX2tlcm5lbF9jb25maWdtZVtkaXJzXSA9KyAiJHtDQ0FDSEVfRElSfSIKKworZG9fY2xlYW5bY2xlYW5kaXJzXSArPSAiJHtDQ0FDSEVfRElSfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jaHJwYXRoLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY2hycGF0aC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTYwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY2hycGF0aC5iYmNsYXNzCkBAIC0wLDAgKzEsMTE3IEBACitDSFJQQVRIX0JJTiA/PSAiY2hycGF0aCIKK1BSRVBST0NFU1NfUkVMT0NBVEVfRElSUyA/PSAiIgorCitkZWYgcHJvY2Vzc19maWxlX2xpbnV4KGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBwID0gc3ViLlBvcGVuKFtjbWQsICctbCcsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEhhbmRsZSBSVU5QQVRIIGFzIHdlbGwgYXMgUlBBVEgKKyAgICBlcnIgPSBlcnIucmVwbGFjZSgiUlVOUEFUSD0iLCJSUEFUSD0iKQorICAgICMgVGhyb3cgYXdheSBldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIHJwYXRoIGxpc3QKKyAgICBjdXJyX3JwYXRoID0gZXJyLnBhcnRpdGlvbigiUlBBVEg9IilbMl0KKyAgICAjYmIubm90ZSgiQ3VycmVudCBycGF0aCBmb3IgJXMgaXMgJXMiICUgKGZwYXRoLCBjdXJyX3JwYXRoLnN0cmlwKCkpKQorICAgIHJwYXRocyA9IGN1cnJfcnBhdGguc3BsaXQoIjoiKQorICAgIG5ld19ycGF0aHMgPSBbXQorICAgIG1vZGlmaWVkID0gRmFsc2UKKyAgICBmb3IgcnBhdGggaW4gcnBhdGhzOgorICAgICAgICAjIElmIHJwYXRoIGlzIGFscmVhZHkgZHluYW1pYyBjb3B5IGl0IHRvIG5ld19ycGF0aCBhbmQgY29udGludWUKKyAgICAgICAgaWYgcnBhdGguZmluZCgiJE9SSUdJTiIpICE9IC0xOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJwYXRoID0gIG9zLnBhdGgubm9ybXBhdGgocnBhdGgpCisgICAgICAgIGlmIGJhc2VwcmVmaXggbm90IGluIHJwYXRoIGFuZCB0bXBkaXIgbm90IGluIHJwYXRoOgorICAgICAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQocnBhdGguc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG5ld19ycGF0aHMuYXBwZW5kKCIkT1JJR0lOLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGguc3RyaXAoKSwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpKQorICAgICAgICBtb2RpZmllZCA9IFRydWUKKworICAgICMgaWYgd2UgaGF2ZSBtb2RpZmllZCBzb21lIHJwYXRocyBjYWxsIGNocnBhdGggdG8gdXBkYXRlIHRoZSBiaW5hcnkKKyAgICBpZiBtb2RpZmllZDoKKyAgICAgICAgYXJncyA9ICI6Ii5qb2luKG5ld19ycGF0aHMpCisgICAgICAgICNiYi5ub3RlKCJTZXR0aW5nIHJwYXRoIGZvciAlcyB0byAlcyIgJShmcGF0aCwgYXJncykpCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1yJywgYXJncywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIiVzOiBjaHJwYXRoIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVkOlxuJXMlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHAucmV0dXJuY29kZSwgb3V0LCBlcnIpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZAorCitkZWYgcHJvY2Vzc19maWxlX2RhcndpbihjbWQsIGZwYXRoLCByb290ZGlyLCBiYXNlcHJlZml4LCB0bXBkaXIsIGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorCisgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgIGlmICIoY29tcGF0aWJpbGl0eSIgbm90IGluIGw6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBycGF0aCA9IGwucGFydGl0aW9uKCIoY29tcGF0aWJpbGl0eSIpWzBdLnN0cmlwKCkKKyAgICAgICAgaWYgYmFzZXByZWZpeCBub3QgaW4gcnBhdGg6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5ld3BhdGggPSAiQGxvYWRlcl9wYXRoLyIgKyBvcy5wYXRoLnJlbHBhdGgocnBhdGgsIG9zLnBhdGguZGlybmFtZShmcGF0aC5yZXBsYWNlKHJvb3RkaXIsICIvIikpKQorICAgICAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1pbnN0YWxsX25hbWVfdG9vbCIpLCAnLWNoYW5nZScsIHJwYXRoLCBuZXdwYXRoLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKworZGVmIHByb2Nlc3NfZGlyIChyb290ZGlyLCBkaXJlY3RvcnksIGQpOgorICAgIGltcG9ydCBzdGF0CisKKyAgICByb290ZGlyID0gb3MucGF0aC5ub3JtcGF0aChyb290ZGlyKQorICAgIGNtZCA9IGQuZXhwYW5kKCcke0NIUlBBVEhfQklOfScpCisgICAgdG1wZGlyID0gb3MucGF0aC5ub3JtcGF0aChkLmdldFZhcignVE1QRElSJywgRmFsc2UpKQorICAgIGJhc2VwcmVmaXggPSBvcy5wYXRoLm5vcm1wYXRoKGQuZXhwYW5kKCcke2Jhc2VfcHJlZml4fScpKQorICAgIGhvc3RvcyA9IGQuZ2V0VmFyKCJIT1NUX09TIiwgVHJ1ZSkKKworICAgICNiYi5kZWJ1ZygiQ2hlY2tpbmcgJXMgZm9yIGJpbmFyaWVzIHRvIHByb2Nlc3MiICUgZGlyZWN0b3J5KQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgorICAgICAgICByZXR1cm4KKworICAgIGlmICJsaW51eCIgaW4gaG9zdG9zOgorICAgICAgICBwcm9jZXNzX2ZpbGUgPSBwcm9jZXNzX2ZpbGVfbGludXgKKyAgICBlbGlmICJkYXJ3aW4iIGluIGhvc3RvczoKKyAgICAgICAgcHJvY2Vzc19maWxlID0gcHJvY2Vzc19maWxlX2RhcndpbgorICAgIGVsc2U6CisgICAgICAgICMgUmVsb2NhdGlvbnMgbm90IHN1cHBvcnRlZAorICAgICAgICByZXR1cm4KKworICAgIGRpcnMgPSBvcy5saXN0ZGlyKGRpcmVjdG9yeSkKKyAgICBmb3IgZmlsZSBpbiBkaXJzOgorICAgICAgICBmcGF0aCA9IGRpcmVjdG9yeSArICIvIiArIGZpbGUKKyAgICAgICAgZnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGZwYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmcGF0aCk6CisgICAgICAgICAgICAjIFNraXAgc3ltbGlua3MKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcGF0aCk6CisgICAgICAgICAgICBwcm9jZXNzX2Rpcihyb290ZGlyLCBmcGF0aCwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICNiYi5ub3RlKCJUZXN0aW5nICVzIGZvciByZWxvY2F0YWJpbGl0eSIgJSBmcGF0aCkKKworICAgICAgICAgICAgIyBXZSBuZWVkIHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIGZvciBjaHJwYXRoLCBpZiB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAjIHRoZW0gdGhlbiBzZXQgdGhlbSB0ZW1wb3JhcmlseS4gVGFrZSBhIGNvcHkgb2YgdGhlIGZpbGVzCisgICAgICAgICAgICAjIHBlcm1pc3Npb25zIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUgdGhlbSBhZnRlcndhcmRzLgorICAgICAgICAgICAgcGVybXMgPSBvcy5zdGF0KGZwYXRoKVtzdGF0LlNUX01PREVdCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZnBhdGgsIG9zLldfT0t8b3MuUl9PSyk6CisgICAgICAgICAgICAgICAgcGVybXMgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGVtcG9yYXJpbHkgbWFrZSB0aGUgZmlsZSB3cml0ZWFibGUgc28gd2UgY2FuIGNocnBhdGggaXQKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgcGVybXN8c3RhdC5TX0lSV1hVKQorICAgICAgICAgICAgcHJvY2Vzc19maWxlKGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHBlcm1zOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtcykKKworZGVmIHJwYXRoX3JlcGxhY2UgKHBhdGgsIGQpOgorICAgIGJpbmRpcnMgPSBkLmV4cGFuZCgiJHtiaW5kaXJ9ICR7c2JpbmRpcn0gJHtiYXNlX3NiaW5kaXJ9ICR7YmFzZV9iaW5kaXJ9ICR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSAke2xpYmV4ZWNkaXJ9ICR7UFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTfSIpLnNwbGl0KCkKKworICAgIGZvciBiaW5kaXIgaW4gYmluZGlyczoKKyAgICAgICAgI2JiLm5vdGUgKCJQcm9jZXNzaW5nIGRpcmVjdG9yeSAiICsgYmluZGlyKQorICAgICAgICBkaXJlY3RvcnkgPSBwYXRoICsgIi8iICsgYmluZGlyCisgICAgICAgIHByb2Nlc3NfZGlyIChwYXRoLCBkaXJlY3RvcnksIGQpCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jbHV0dGVyLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY2x1dHRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NzQwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY2x1dHRlci5iYmNsYXNzCkBAIC0wLDAgKzEsMjIgQEAKKworZGVmIGdldF9taW5vcl9kaXIodik6CisgICAgaW1wb3J0IHJlCisgICAgbSA9IHJlLm1hdGNoKCJeKFswLTldKylcLihbMC05XSspIiwgdikKKyAgICByZXR1cm4gIiVzLiVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorCitkZWYgZ2V0X3JlYWxfbmFtZShuKToKKyAgICBpbXBvcnQgcmUKKyAgICBtID0gcmUubWF0Y2goIl4oW2Etel0rKC1bYS16XSspPykoLVswLTldK1wuWzAtOV0rKT8iLCBuKQorICAgIHJldHVybiAiJXMiICUgKG0uZ3JvdXAoMSkpCisKK1ZFUk1JTk9SID0gIiR7QGdldF9taW5vcl9kaXIoIiR7UFZ9Iil9IgorUkVBTE5BTUUgPSAiJHtAZ2V0X3JlYWxfbmFtZSgiJHtCUE59Iil9IgorCitDTFVUVEVSX1NSQ19GVFAgPSAiJHtHTk9NRV9NSVJST1J9LyR7UkVBTE5BTUV9LyR7VkVSTUlOT1J9LyR7UkVBTE5BTUV9LSR7UFZ9LnRhci54ejtuYW1lPWFyY2hpdmUiCisKK0NMVVRURVJfU1JDX0dJVCA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7UkVBTE5BTUV9IgorCitTUkNfVVJJID0gIiR7Q0xVVFRFUl9TUkNfRlRQfSIKK1MgPSAiJHtXT1JLRElSfS8ke1JFQUxOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MgZ2V0dGV4dApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNjYzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NtYWtlLmJiY2xhc3MKQEAgLTAsMCArMSwxMzggQEAKKyMgUGF0aCB0byB0aGUgQ01ha2UgZmlsZSB0byBwcm9jZXNzLgorT0VDTUFLRV9TT1VSQ0VQQVRIID89ICIke1N9IgorCitERVBFTkRTX3ByZXBlbmQgPSAiY21ha2UtbmF0aXZlICIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKKworIyBXZSBuZWVkIHRvIHVuc2V0IENDQUNIRSBvdGhlcndpc2UgY21ha2UgZ2V0cyB0b28gY29uZnVzZWQKK0NDQUNIRSA9ICIiCisKKyMgV2Ugd2FudCB0aGUgc3RhZ2luZyBhbmQgaW5zdGFsbGluZyBmdW5jdGlvbnMgZnJvbSBhdXRvdG9vbHMKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgQy9DKysgQ29tcGlsZXIgKHdpdGhvdXQgY3B1IGFyY2gvdHVuZSBhcmd1bWVudHMpCitPRUNNQUtFX0NfQ09NUElMRVIgPz0gImBlY2hvICR7Q0N9IHwgc2VkICdzL15cKFteIF0qXCkuKi9cMS8nYCIKK09FQ01BS0VfQ1hYX0NPTVBJTEVSID89ICJgZWNobyAke0NYWH0gfCBzZWQgJ3MvXlwoW14gXSpcKS4qL1wxLydgIgorT0VDTUFLRV9BUiA/PSAiJHtBUn0iCisKKyMgQ29tcGlsZXIgZmxhZ3MKK09FQ01BS0VfQ19GTEFHUyA/PSAiJHtIT1NUX0NDX0FSQ0h9ICR7VE9PTENIQUlOX09QVElPTlN9ICR7Q0ZMQUdTfSIKK09FQ01BS0VfQ1hYX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDWFhGTEFHU30iCitPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRSA/PSAiJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059ICR7Q0ZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0UgPz0gIiR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSAke0NYWEZMQUdTfSAtRE5ERUJVRyIKK09FQ01BS0VfQ19MSU5LX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDUFBGTEFHU30gJHtMREZMQUdTfSIKK09FQ01BS0VfQ1hYX0xJTktfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NYWEZMQUdTfSAke0xERkxBR1N9IgorCitPRUNNQUtFX1JQQVRIID89ICIiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID8/PSAiIgorT0VDTUFLRV9FWFRSQV9ST09UX1BBVEggPz0gIiIKKworT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gPSAiT05MWSIKK09FQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNX2NsYXNzLW5hdGl2ZSA9ICJCT1RIIgorCisjIENNYWtlIGV4cGVjdHMgdGFyZ2V0IGFyY2hpdGVjdHVyZXMgaW4gdGhlIGZvcm1hdCBvZiB1bmFtZSgyKSwKKyMgd2hpY2ggZG8gbm90IGFsd2F5cyBtYXRjaCBUQVJHRVRfQVJDSCwgc28gYWxsIHRoZSBuZWNlc3NhcnkKKyMgY29udmVyc2lvbnMgc2hvdWxkIGhhcHBlbiBoZXJlLgorZGVmIG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKHRhcmdldF9hcmNoKToKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHJldHVybiAicHBjIgorICAgIGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICByZXR1cm4gInBwYzY0IgorICAgIHJldHVybiB0YXJnZXRfYXJjaAorCitjbWFrZV9kb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZSgpIHsKKwljYXQgPiAke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSA8PEVPRgorIyBDTWFrZSBzeXN0ZW0gbmFtZSBtdXN0IGJlIHNvbWV0aGluZyBsaWtlICJMaW51eCIuCisjIFRoaXMgaXMgaW1wb3J0YW50IGZvciBjcm9zcy1jb21waWxpbmcuCitzZXQoIENNQUtFX1NZU1RFTV9OQU1FIGBlY2hvICR7VEFSR0VUX09TfSB8IHNlZCAtZSAncy9eLi9cdSYvJyAtZSAncy9eXChMaW51eFwpLiovXDEvJ2AgKQorc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICR7QG1hcF90YXJnZXRfYXJjaF90b191bmFtZV9hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpKX0gKQorc2V0KCBDTUFLRV9DX0NPTVBJTEVSICR7T0VDTUFLRV9DX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAke09FQ01BS0VfQ1hYX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0FTTV9DT01QSUxFUiAke09FQ01BS0VfQ19DT01QSUxFUn0gKQorc2V0KCBDTUFLRV9BUiAke09FQ01BS0VfQVJ9IENBQ0hFIEZJTEVQQVRIICJBcmNoaXZlciIgKQorc2V0KCBDTUFLRV9DX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9GTEFHUyAiJHtPRUNNQUtFX0NYWF9GTEFHU30iIENBQ0hFIFNUUklORyAiQ1hYRkxBR1MiICkKK3NldCggQ01BS0VfQVNNX0ZMQUdTICIke09FQ01BS0VfQ19GTEFHU30iIENBQ0hFIFNUUklORyAiQVNNIEZMQUdTIiApCitzZXQoIENNQUtFX0NfRkxBR1NfUkVMRUFTRSAiJHtPRUNNQUtFX0NfRkxBR1NfUkVMRUFTRX0iIENBQ0hFIFNUUklORyAiQ0ZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0V9IiBDQUNIRSBTVFJJTkcgIkNYWEZMQUdTIGZvciByZWxlYXNlIiApCitzZXQoIENNQUtFX0FTTV9GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ19GTEFHU19SRUxFQVNFfSIgQ0FDSEUgU1RSSU5HICJBU00gRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQ19MSU5LX0ZMQUdTICIke09FQ01BS0VfQ19MSU5LX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJMREZMQUdTIiApCitzZXQoIENNQUtFX0NYWF9MSU5LX0ZMQUdTICIke09FQ01BS0VfQ1hYX0xJTktfRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkxERkxBR1MiICkKKworIyBvbmx5IHNlYXJjaCBpbiB0aGUgcGF0aHMgcHJvdmlkZWQgc28gY21ha2UgZG9lc250IHBpY2sKKyMgdXAgbGlicmFyaWVzIGFuZCB0b29scyBmcm9tIHRoZSBuYXRpdmUgYnVpbGQgbWFjaGluZQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSCAke1NUQUdJTkdfRElSX0hPU1R9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSAke0NST1NTX0RJUn0gJHtPRUNNQUtFX1BFUkxOQVRJVkVfRElSfSAke09FQ01BS0VfRVhUUkFfUk9PVF9QQVRIfSAke0VYVEVSTkFMX1RPT0xDSEFJTn0pCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUEFDS0FHRSBPTkxZICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNICR7T0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU19ICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCisKKyMgVXNlIHF0LmNvbmYgc2V0dGluZ3MKK3NldCggRU5We1FUX0NPTkZfUEFUSH0gJHtXT1JLRElSfS9xdC5jb25mICkKKworIyBXZSBuZWVkIHRvIHNldCB0aGUgcnBhdGggdG8gdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGFzIGNtYWtlIGRvZXMgbm90IHByb3ZpZGUgYW55CisjIGRpcmVjdG9yeSBhcyBycGF0aCBieSBkZWZhdWx0CitzZXQoIENNQUtFX0lOU1RBTExfUlBBVEggJHtPRUNNQUtFX1JQQVRIfSApCisKKyMgVXNlIG5hdGl2ZSBjbWFrZSBtb2R1bGVzCitsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtTVEFHSU5HX0RBVEFESVJ9L2NtYWtlL01vZHVsZXMvIikKKworIyBhZGQgZm9yIG5vbiAvdXNyL2xpYiBsaWJkaXIsIGUuZy4gL3Vzci9saWI2NAorc2V0KCBDTUFLRV9MSUJSQVJZX1BBVEggJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9KQorCitFT0YKK30KKworYWRkdGFzayBnZW5lcmF0ZV90b29sY2hhaW5fZmlsZSBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKK2NtYWtlX2RvX2NvbmZpZ3VyZSgpIHsKKwlpZiBbICIke09FQ01BS0VfQlVJTERQQVRIfSIgXTsgdGhlbgorCQliYm5vdGUgImNtYWtlLmJiY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgT0VDTUFLRV9CVUlMRFBBVEguICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm93IG91dC1vZi10cmVlIGJ1aWxkcyB3aXRoIEI9V09SS0RJUi9idWlsZC4iCisJZmkKKworCWlmIFsgIiR7U30iICE9ICIke0J9IiBdOyB0aGVuCisJCXJtIC1yZiAke0J9CisJCW1rZGlyIC1wICR7Qn0KKwkJY2QgJHtCfQorCWVsc2UKKwkJZmluZCAke0J9IC1uYW1lIENNYWtlRmlsZXMgLW9yIC1uYW1lIE1ha2VmaWxlIC1vciAtbmFtZSBjbWFrZV9pbnN0YWxsLmNtYWtlIC1vciAtbmFtZSBDTWFrZUNhY2hlLnR4dCAtZGVsZXRlCisJZmkKKworCSMgSnVzdCBsaWtlIGF1dG90b29scyBjbWFrZSBjYW4gdXNlIGEgc2l0ZSBmaWxlIHRvIGNhY2hlIHJlc3VsdCB0aGF0IG5lZWQgZ2VuZXJhdGVkIGJpbmFyaWVzIHRvIHJ1bgorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlLWZpbGUuY21ha2UgXSA7IHRoZW4KKwkJT0VDTUFLRV9TSVRFRklMRT0iIC1DICR7V09SS0RJUn0vc2l0ZS1maWxlLmNtYWtlIgorCWVsc2UKKwkJT0VDTUFLRV9TSVRFRklMRT0iIgorCWZpCisKKwljbWFrZSBcCisJICAke09FQ01BS0VfU0lURUZJTEV9IFwKKwkgICR7T0VDTUFLRV9TT1VSQ0VQQVRIfSBcCisJICAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9JHtwcmVmaXh9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9CSU5ESVI6UEFUSD0ke2JpbmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NCSU5ESVI6UEFUSD0ke3NiaW5kaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJFWEVDRElSOlBBVEg9JHtsaWJleGVjZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU1lTQ09ORkRJUjpQQVRIPSR7c3lzY29uZmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NIQVJFRFNUQVRFRElSOlBBVEg9JHtzaGFyZWRzdGF0ZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xPQ0FMU1RBVEVESVI6UEFUSD0ke2xvY2Fsc3RhdGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9MSUJESVI6UEFUSD0ke2xpYmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVI6UEFUSD0ke2luY2x1ZGVkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9EQVRBUk9PVERJUjpQQVRIPSR7ZGF0YWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX1NPX05PX0VYRT0wIFwKKwkgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9JHtXT1JLRElSfS90b29sY2hhaW4uY21ha2UgXAorCSAgLURDTUFLRV9WRVJCT1NFX01BS0VGSUxFPTEgXAorCSAgJHtFWFRSQV9PRUNNQUtFfSBcCisJICAtV25vLWRldgorfQorCitjbWFrZV9kb19jb21waWxlKCkgIHsKKwljZCAke0J9CisJYmFzZV9kb19jb21waWxlCit9CisKK2NtYWtlX2RvX2luc3RhbGwoKSB7CisJY2QgJHtCfQorCWF1dG90b29sc19kb19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjZjU4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jbWwxLmJiY2xhc3MKQEAgLTAsMCArMSw3NSBAQAorY21sMV9kb19jb25maWd1cmUoKSB7CisJc2V0IC1lCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIG9sZGNvbmZpZworfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZQorYWRkdGFzayBjb25maWd1cmUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCisKK2luaGVyaXQgdGVybWluYWwKKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAiSE9TVF9FWFRSQUNGTEFHUyBIT1NUTERGTEFHUyBURVJNSU5GTyBDUk9TU19DVVJTRVNfTElCIENST1NTX0NVUlNFU19JTkMiCitIT1NUX0VYVFJBQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IgorSE9TVExERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0NST1NTX0NVUlNFU19MSUIgPSAiLWxuY3Vyc2VzIC1sdGluZm8iCitDUk9TU19DVVJTRVNfSU5DID0gJy1EQ1VSU0VTX0xPQz0iPGN1cnNlcy5oPiInCitURVJNSU5GTyA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3Rlcm1pbmZvIgorCitLQ09ORklHX0NPTkZJR19DT01NQU5EID8/PSAibWVudWNvbmZpZyIKK3B5dGhvbiBkb19tZW51Y29uZmlnKCkgeworICAgIGltcG9ydCBzaHV0aWwKKworICAgIHRyeToKKyAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgc2h1dGlsLmNvcHkoIi5jb25maWciLCAiLmNvbmZpZy5vcmlnIikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbXRpbWUgPSAwCisKKyAgICBvZV90ZXJtaW5hbCgiJHtTSEVMTH0gLWMgXCJtYWtlICR7S0NPTkZJR19DT05GSUdfQ09NTUFORH07IGlmIFsgXCQ/IC1uZSAwIF07IHRoZW4gZWNobyAnQ29tbWFuZCBmYWlsZWQuJzsgcHJpbnRmICdQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uICc7IHJlYWQgcjsgZmlcIiIsICcke1BOfSBDb25maWd1cmF0aW9uJywgZCkKKworICAgICMgRklYTUUgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBtaW5pbXVtIGJpdGJha2UgdmVyc2lvbiBoYXMgYmVlbiBidW1wZWQKKyAgICBpZiBoYXNhdHRyKGJiLmJ1aWxkLCAnd3JpdGVfdGFpbnQnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV3bXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKCIuY29uZmlnIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBuZXdtdGltZSA9IDAKKworICAgICAgICBpZiBuZXdtdGltZSA+IG10aW1lOgorICAgICAgICAgICAgYmIubm90ZSgiQ29uZmlndXJhdGlvbiBjaGFuZ2VkLCByZWNvbXBpbGUgd2lsbCBiZSBmb3JjZWQiKQorICAgICAgICAgICAgYmIuYnVpbGQud3JpdGVfdGFpbnQoJ2RvX2NvbXBpbGUnLCBkKQorfQorZG9fbWVudWNvbmZpZ1tkZXBlbmRzXSArPSAibmN1cnNlcy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX21lbnVjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgbWVudWNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworcHl0aG9uIGRvX2RpZmZjb25maWcoKSB7CisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZyYWdtZW50ID0gd29ya2RpciArICcvZnJhZ21lbnQuY2ZnJworICAgIGNvbmZpZ29yaWcgPSAnLmNvbmZpZy5vcmlnJworICAgIGNvbmZpZyA9ICcuY29uZmlnJworCisgICAgdHJ5OgorICAgICAgICBtZDVuZXdjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWdvcmlnKQorICAgICAgICBtZDVjb25maWcgPSBiYi51dGlscy5tZDVfZmlsZShjb25maWcpCisgICAgICAgIGlzZGlmZiA9IG1kNW5ld2NvbmZpZyAhPSBtZDVjb25maWcKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiTm8gY29uZmlnIGZpbGVzIGZvdW5kLiBEaWQgeW91IGRvIG1lbnVjb25maWcgP1xuJXMiICUgZSkKKworICAgIGlmIGlzZGlmZjoKKyAgICAgICAgc3RhdGVtZW50ID0gJ2RpZmYgLS11bmNoYW5nZWQtbGluZS1mb3JtYXQ9IC0tb2xkLWxpbmUtZm9ybWF0PSAtLW5ldy1saW5lLWZvcm1hdD0iJUwiICcgKyBjb25maWdvcmlnICsgJyAnICsgY29uZmlnICsgJz4nICsgZnJhZ21lbnQKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weShjb25maWdvcmlnLCBjb25maWcpCisKKyAgICAgICAgYmIucGxhaW4oIkNvbmZpZyBmcmFnbWVudCBoYXMgYmVlbiBkdW1wZWQgaW50bzpcbiAlcyIgJSBmcmFnbWVudCkKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmcmFnbWVudCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZnJhZ21lbnQpCit9CisKK2RvX2RpZmZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgZGlmZmNvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NvbXByZXNzX2RvYy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NvbXByZXNzX2RvYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNThkODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKyMgQ29tcHJlc3MgbWFuIHBhZ2VzIGluICR7bWFuZGlyfSBhbmQgaW5mbyBwYWdlcyBpbiAke2luZm9kaXJ9CisjCisjIDEuIFRoZSBkb2Mgd2lsbCBiZSBjb21wcmVzc2VkIHRvIGd6IGZvcm1hdCBieSBkZWZhdWx0LgorIworIyAyLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY29ycmVjdCB0aGUgY29tcHJlc3NlZCBkb2Mgd2hpY2ggaXMgbm90CisjIGluICR7RE9DX0NPTVBSRVNTfSBidXQgaW4gJHtET0NfQ09NUFJFU1NfTElTVH0gdG8gdGhlIGZvcm1hdAorIyBvZiAke0RPQ19DT01QUkVTU30gcG9saWN5CisjCisjIDMuIEl0IGlzIGVhc3kgdG8gYWRkIGEgbmV3IHR5cGUgY29tcHJlc3Npb24gYnkgZWRpdGluZworIyBsb2NhbC5jb25mLCBzdWNoIGFzOgorIyBET0NfQ09NUFJFU1NfTElTVF9hcHBlbmQgPSAnIGFiYycKKyMgRE9DX0NPTVBSRVNTID0gJ2FiYycKKyMgRE9DX0NPTVBSRVNTX0NNRFthYmNdID0gJ2FiYyBjb21wcmVzcyBjbWQgKioqJworIyBET0NfREVDT01QUkVTU19DTURbYWJjXSA9ICdhYmMgZGVjb21wcmVzcyBjbWQgKioqJworCisjIEFsbCBzdXBwb3J0ZWQgY29tcHJlc3Npb24gcG9saWN5CitET0NfQ09NUFJFU1NfTElTVCA/PSAiZ3ogeHogYnoyIgorCisjIENvbXByZXNzaW9uIHBvbGljeSwgbXVzdCBiZSBvbmUgb2YgJHtET0NfQ09NUFJFU1NfTElTVH0KK0RPQ19DT01QUkVTUyA/PSAiZ3oiCisKKyMgQ29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0NPTVBSRVNTX0NNRFtnel0gPz0gJ2d6aXAgLXYgLTkgLW4nCitET0NfQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ6aXAyIC12IC05IgorRE9DX0NPTVBSRVNTX0NNRFt4el0gPz0gInh6IC12IgorCisjIERlY29tcHJlc3Npb24gc2hlbGwgY29tbWFuZAorRE9DX0RFQ09NUFJFU1NfQ01EW2d6XSA/PSAnZ3VuemlwIC12JworRE9DX0RFQ09NUFJFU1NfQ01EW2J6Ml0gPz0gImJ1bnppcDIgLXYiCitET0NfREVDT01QUkVTU19DTURbeHpdID89ICJ1bnh6IC12IgorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBhY2thZ2VfZG9fY29tcHJlc3NfZG9jIGNvbXByZXNzX2RvY191cGRhdGVhbHRlcm5hdGl2ZXMiCitweXRob24gcGFja2FnZV9kb19jb21wcmVzc19kb2MoKSB7CisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGNvbXByZXNzX2xpc3QgPSAoZC5nZXRWYXIoJ0RPQ19DT01QUkVTU19MSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBpZiBjb21wcmVzc19tb2RlIG5vdCBpbiBjb21wcmVzc19saXN0OgorICAgICAgICBiYi5mYXRhbCgnQ29tcHJlc3Npb24gcG9saWN5ICVzIG5vdCBzdXBwb3J0ZWQgKG5vdCBsaXN0ZWQgaW4gJXMpXG4nICUgKGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2xpc3QpKQorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBjb21wcmVzc19jbWRzID0ge30KKyAgICBkZWNvbXByZXNzX2NtZHMgPSB7fQorICAgIGZvciBtb2RlIGluIGNvbXByZXNzX2xpc3Q6CisgICAgICAgIGNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19DT01QUkVTU19DTUQnLCBtb2RlKQorICAgICAgICBkZWNvbXByZXNzX2NtZHNbbW9kZV0gPSBkLmdldFZhckZsYWcoJ0RPQ19ERUNPTVBSRVNTX0NNRCcsIG1vZGUpCisKKyAgICBtYW5kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5kaXIpOgorICAgICAgICAjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorICAgICAgICBkZWNvbXByZXNzX2RvYyhtYW5kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKG1hbmRpciwgY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfY21kcykKKworICAgIGluZm9kaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJpbmZvZGlyIiwgVHJ1ZSkpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5mb2Rpcik6CisgICAgICAgICMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCisgICAgICAgIGRlY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcykKKyAgICAgICAgY29tcHJlc3NfZG9jKGluZm9kaXIsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpCit9CisKK2RlZiBfZ2V0X2NvbXByZXNzX2Zvcm1hdChmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgZm9yIGNvbXByZXNzX2Zvcm1hdCBpbiBjb21wcmVzc19mb3JtYXRfbGlzdDoKKyAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoY29tcHJlc3Nfc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiBjb21wcmVzc19mb3JtYXQKKworICAgIHJldHVybiAnJworCisjIENvbGxlY3QgaGFyZGxpbmtzIHRvIGRpY3QsIGVhY2ggZWxlbWVudCBpbiBkaWN0IGxpc3RzIGhhcmRsaW5rcworIyB3aGljaCBwb2ludHMgdG8gdGhlIHNhbWUgZG9jIGZpbGUuCisjIHtoYXJkbGluazEwOiBbaGFyZGxpbmsxMSwgaGFyZGxpbmsxMl0sLCx9CisjIFRoZSBoYXJkbGluazEwLCBoYXJkbGluazExIGFuZCBoYXJkbGluazEyIGFyZSB0aGUgc2FtZSBmaWxlLgorZGVmIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpOgorICAgIGZvciBoYXJkbGluayBpbiBoYXJkbGlua19kaWN0OgorICAgICAgICAjIEFkZCB0byB0aGUgZXhpc3RlZCBoYXJkbGluaworICAgICAgICBpZiBvcy5wYXRoLnNhbWVmaWxlKGhhcmRsaW5rLCBmaWxlKToKKyAgICAgICAgICAgIGhhcmRsaW5rX2RpY3RbaGFyZGxpbmtdLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgcmV0dXJuIGhhcmRsaW5rX2RpY3QKKworICAgIGhhcmRsaW5rX2RpY3RbZmlsZV0gPSBbXQorICAgIHJldHVybiBoYXJkbGlua19kaWN0CisKK2RlZiBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBzaGVsbF9jbWRzLCBkZWNvbXByZXNzPUZhbHNlKToKKyAgICBmb3IgdGFyZ2V0IGluIGhhcmRsaW5rX2RpY3Q6CisgICAgICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICAgICBjb21wcmVzc19mb3JtYXQgPSBfZ2V0X2NvbXByZXNzX2Zvcm1hdCh0YXJnZXQsIHNoZWxsX2NtZHMua2V5cygpKQorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIHRhcmdldCkKKyAgICAgICAgICAgIGJiLm5vdGUoJ2RlY29tcHJlc3MgaGFyZGxpbmsgJXMnICUgdGFyZ2V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC1mICVzIiAlIChzaGVsbF9jbWRzW2NvbXByZXNzX21vZGVdLCB0YXJnZXQpCisgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBoYXJkbGluayAlcycgJSB0YXJnZXQpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi53YXJuKCJkZS9jb21wcmVzcyBmaWxlIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGhhcmRsaW5rX2R1cCBpbiBoYXJkbGlua19kaWN0W3RhcmdldF06CisgICAgICAgICAgICBpZiBkZWNvbXByZXNzOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICAgICAgICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cFs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXRbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBcHBlbmQgY29tcHJlc3Mgc3VmZml4CisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld19oYXJkbGluayA9IGhhcmRsaW5rX2R1cCArIGNvbXByZXNzX3N1ZmZpeAorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSB0YXJnZXQgKyBjb21wcmVzc19zdWZmaXgKKworICAgICAgICAgICAgYmIubm90ZSgnaGFyZGxpbmsgJXMtLT4lcycgJSAobmV3X2hhcmRsaW5rLCBuZXdfdGFyZ2V0KSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfaGFyZGxpbmspOgorICAgICAgICAgICAgICAgIG9zLmxpbmsobmV3X3RhcmdldCwgbmV3X2hhcmRsaW5rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaGFyZGxpbmtfZHVwKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoaGFyZGxpbmtfZHVwKQorCitkZWYgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19mb3JtYXQsIGRlY29tcHJlc3M9RmFsc2UpOgorICAgIGNvbXByZXNzX3N1ZmZpeCA9ICcuJyArIGNvbXByZXNzX2Zvcm1hdAorICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICMgUmVtb3ZlIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKVs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgIGVsc2U6CisgICAgICAgICMgQXBwZW5kIGNvbXByZXNzIHN1ZmZpeAorICAgICAgICBuZXdfbGlua25hbWUgPSBmaWxlICsgY29tcHJlc3Nfc3VmZml4CisgICAgICAgIG5ld19zb3VyY2UgPSBvcy5yZWFkbGluayhmaWxlKSArIGNvbXByZXNzX3N1ZmZpeAorCisgICAgYmIubm90ZSgnc3ltbGluayAlcy0tPiVzJyAlIChuZXdfbGlua25hbWUsIG5ld19zb3VyY2UpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhuZXdfbGlua25hbWUpOgorICAgICAgICBvcy5zeW1saW5rKG5ld19zb3VyY2UsIG5ld19saW5rbmFtZSkKKworICAgIG9zLnVubGluayhmaWxlKQorCitkZWYgX2lzX2luZm8oZmlsZSk6CisgICAgZmxhZ3MgPSAnLmluZm8gLmluZm8tJy5zcGxpdCgpCisgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgaW4gb3MucGF0aC5iYXNlbmFtZShmaWxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIF9pc19tYW4oZmlsZSk6CisgICAgaW1wb3J0IHJlCisKKyAgICAjIEl0IHJlZmVycyBNQU5TRUNULXZhciBpbiBtYW4oMS42ZykncyBtYW4uY29uZmlnCisgICAgIyAiLjE6LjFwOi44Oi4yOi4zOi4zcDouNDouNTouNjouNzouOTouMHA6LnRjbDoubjoubDoucDoubyIKKyAgICAjIE5vdCBzdGFydCB3aXRoICcuJywgYW5kIGNvbnRhaW4gdGhlIGFib3ZlIGNvbG9uLXNlcGVyYXRlIGVsZW1lbnQKKyAgICBwID0gcmUuY29tcGlsZShyJ1teXC5dK1wuKFsxLTlsbm9wXXwwcHx0Y2wpJykKKyAgICBpZiBwLnNlYXJjaChmaWxlKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitkZWYgX2lzX2NvbXByZXNzX2RvYyhmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCk6CisgICAgY29tcHJlc3NfZm9ybWF0ID0gX2dldF9jb21wcmVzc19mb3JtYXQoZmlsZSwgY29tcHJlc3NfZm9ybWF0X2xpc3QpCisgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgaWYgZmlsZS5lbmRzd2l0aChjb21wcmVzc19zdWZmaXgpOgorICAgICAgICAjIFJlbW92ZSB0aGUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIHVuY29tcHJlc3NfZmlsZSA9IGZpbGVbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgaWYgX2lzX2luZm8odW5jb21wcmVzc19maWxlKSBvciBfaXNfbWFuKHVuY29tcHJlc3NfZmlsZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgY29tcHJlc3NfZm9ybWF0CisKKyAgICByZXR1cm4gRmFsc2UsICcnCisKK2RlZiBjb21wcmVzc19kb2ModG9wZGlyLCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZmlsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgX2lzX2luZm8oZmlsZSkgb3IgX2lzX21hbihmaWxlKToKKyAgICAgICAgICAgICAgICAjIFN5bWxpbmsKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgX3Byb2Nlc3Nfc3ltbGluayhmaWxlLCBjb21wcmVzc19tb2RlKQorICAgICAgICAgICAgICAgICMgSGFyZGxpbmsKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmxzdGF0KGZpbGUpLnN0X25saW5rID4gMToKKyAgICAgICAgICAgICAgICAgICAgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChjb21wcmVzc19jbWRzW2NvbXByZXNzX21vZGVdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiY29tcHJlc3MgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKQorCisjIERlY29tcHJlc3MgZG9jIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorZGVmIGRlY29tcHJlc3NfZG9jKHRvcGRpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKToKKyAgICBoYXJkbGlua19kaWN0ID0ge30KKyAgICBkZWNvbXByZXNzID0gVHJ1ZQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICByZXMsIGNvbXByZXNzX2Zvcm1hdCA9IF9pc19jb21wcmVzc19kb2MoZmlsZSwgZGVjb21wcmVzc19jbWRzLmtleXMoKSkKKyAgICAgICAgICAgICMgRGVjb21wcmVzcyBmaWxlcyB3aGljaCBmb3JtYXQgaXMgbm90IGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgIGlmIHJlcyBhbmQgY29tcHJlc3NfbW9kZSE9Y29tcHJlc3NfZm9ybWF0OgorICAgICAgICAgICAgICAgICMgU3ltbGluaworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX2Zvcm1hdCwgZGVjb21wcmVzcykKKyAgICAgICAgICAgICAgICAjIEhhcmRsaW5rCisgICAgICAgICAgICAgICAgZWxpZiBvcy5sc3RhdChmaWxlKS5zdF9ubGluayA+IDE6CisgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0X2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGZpbGUpCisgICAgICAgICAgICAgICAgIyBOb3JtYWwgZmlsZQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9ICIlcyAlcyIgJSAoZGVjb21wcmVzc19jbWRzW2NvbXByZXNzX2Zvcm1hdF0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJkZWNvbXByZXNzIGZhaWxlZCAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjb21wcmVzcyBmaWxlICVzJyAlIGZpbGUpCisKKyAgICBfcHJvY2Vzc19oYXJkbGluayhoYXJkbGlua19kaWN0LCBjb21wcmVzc19tb2RlLCBkZWNvbXByZXNzX2NtZHMsIGRlY29tcHJlc3MpCisKK3B5dGhvbiBjb21wcmVzc19kb2NfdXBkYXRlYWx0ZXJuYXRpdmVzICgpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygndXBkYXRlLWFsdGVybmF0aXZlcycsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIG1hbmRpciA9IGQuZ2V0VmFyKCJtYW5kaXIiLCBUcnVlKQorICAgIGluZm9kaXIgPSBkLmdldFZhcigiaW5mb2RpciIsIFRydWUpCisgICAgY29tcHJlc3NfbW9kZSA9IGQuZ2V0VmFyKCdET0NfQ09NUFJFU1MnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBvbGRfbmFtZXMgPSAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbmV3X25hbWVzID0gW10KKyAgICAgICAgZm9yIG9sZF9uYW1lIGluIG9sZF9uYW1lczoKKyAgICAgICAgICAgIG9sZF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUsIFRydWUpCisgICAgICAgICAgICBvbGRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG9sZF9uYW1lLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSwgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBvbGRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgb2xkX3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIG9sZF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob2xkX2xpbmspLCBvbGRfdGFyZ2V0KQorCisgICAgICAgICAgICAjIFRoZSB1cGRhdGVhbHRlcm5hdGl2ZXMgdXNlZCBmb3IgY29tcHJlc3MgZG9jCisgICAgICAgICAgICBpZiBtYW5kaXIgaW4gb2xkX3RhcmdldCBvciBpbmZvZGlyIGluIG9sZF90YXJnZXQ6CisgICAgICAgICAgICAgICAgbmV3X25hbWUgPSBvbGRfbmFtZSArICcuJyArIGNvbXByZXNzX21vZGUKKyAgICAgICAgICAgICAgICBuZXdfbGluayA9IG9sZF9saW5rICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld190YXJnZXQgPSBvbGRfdGFyZ2V0ICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBuZXdfbmFtZSwgbmV3X2xpbmspCisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBvbGRfbmFtZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuZGVsVmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgb2xkX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgbmV3X25hbWUsIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBuZXdfbmFtZSwgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG5ld190YXJnZXQpCisgICAgICAgICAgICAgICAgZWxpZiBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgb2xkX25hbWUsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgbmV3X3RhcmdldCkKKworICAgICAgICAgICAgICAgIG5ld19uYW1lcy5hcHBlbmQobmV3X25hbWUpCisKKyAgICAgICAgaWYgbmV3X25hbWVzOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgJyAnLmpvaW4obmV3X25hbWVzKSkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3YzE4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9jb21wbGlhbmNlLmJiY2xhc3MKQEAgLTAsMCArMSw2NCBAQAorIyBEZXBsb3kgc291cmNlcyBmb3IgcmVjaXBlcyBmb3IgY29tcGxpYW5jZSB3aXRoIGNvcHlsZWZ0LXN0eWxlIGxpY2Vuc2VzCisjIERlZmF1bHRzIHRvIHVzaW5nIHN5bWxpbmtzLCBhcyBpdCdzIGEgcXVpY2sgb3BlcmF0aW9uLCBhbmQgb25lIGNhbiBlYXNpbHkKKyMgZm9sbG93IHRoZSBsaW5rcyB3aGVuIG1ha2luZyB1c2Ugb2YgdGhlIGZpbGVzIChlLmcuIHRhciB3aXRoIHRoZSAtaCBhcmcpLgorIworIyB2aTpzdHM9NDpzdz00OmV0CisKK2luaGVyaXQgY29weWxlZnRfZmlsdGVyCisKK0NPUFlMRUZUX1NPVVJDRVNfRElSID89ICcke0RFUExPWV9ESVJ9L2NvcHlsZWZ0X3NvdXJjZXMnCisKK3B5dGhvbiBkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMgKCkgeworICAgICIiIlBvcHVsYXRlIGEgdHJlZSBvZiB0aGUgcmVjaXBlIHNvdXJjZXMgYW5kIGVtaXQgcGF0Y2ggc2VyaWVzIGZpbGVzIiIiCisgICAgaW1wb3J0IG9zLnBhdGgKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgIGluY2x1ZGVkLCByZWFzb24gPSBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKQorICAgIGlmIG5vdCBpbmNsdWRlZDoKKyAgICAgICAgYmIuZGVidWcoMSwgJ2NvcHlsZWZ0OiAlcyBpcyBleGNsdWRlZDogJXMnICUgKHAsIHJlYXNvbikpCisgICAgICAgIHJldHVybgorICAgIGVsc2U6CisgICAgICAgIGJiLmRlYnVnKDEsICdjb3B5bGVmdDogJXMgaXMgaW5jbHVkZWQ6ICVzJyAlIChwLCByZWFzb24pKQorCisgICAgc291cmNlc19kaXIgPSBkLmdldFZhcignQ09QWUxFRlRfU09VUkNFU19ESVInLCBUcnVlKQorICAgIGRsX2RpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgIHVkID0gZmV0Y2gudWQKKworICAgIHBmID0gZC5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBkZXN0ID0gb3MucGF0aC5qb2luKHNvdXJjZXNfZGlyLCBwZikKKyAgICBzaHV0aWwucm10cmVlKGRlc3QsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdCkKKworICAgIGZvciB1IGluIHVkLnZhbHVlcygpOgorICAgICAgICBsb2NhbCA9IG9zLnBhdGgubm9ybXBhdGgoZmV0Y2gubG9jYWxwYXRoKHUudXJsKSkKKyAgICAgICAgaWYgbG9jYWwuZW5kc3dpdGgoJy5iYicpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxpZiBsb2NhbC5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgbG9jYWwgPSBsb2NhbFs6LTFdCisKKyAgICAgICAgaWYgdS5taXJyb3J0YXJiYWxsOgorICAgICAgICAgICAgdGFyYmFsbF9wYXRoID0gb3MucGF0aC5qb2luKGRsX2RpciwgdS5taXJyb3J0YXJiYWxsKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyYmFsbF9wYXRoKToKKyAgICAgICAgICAgICAgICBsb2NhbCA9IHRhcmJhbGxfcGF0aAorCisgICAgICAgIG9lLnBhdGguc3ltbGluayhsb2NhbCwgb3MucGF0aC5qb2luKGRlc3QsIG9zLnBhdGguYmFzZW5hbWUobG9jYWwpKSwgZm9yY2U9VHJ1ZSkKKworICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hkaXIgPSBwYXJtLmdldCgncGF0Y2hkaXInKQorICAgICAgICBpZiBwYXRjaGRpcjoKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzLnN1YmRpci4lcycgJSBwYXRjaGRpci5yZXBsYWNlKCcvJywgJ18nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihkZXN0LCAnc2VyaWVzJykKKworICAgICAgICB3aXRoIG9wZW4oc2VyaWVzLCAnYScpIGFzIHM6CisgICAgICAgICAgICBzLndyaXRlKCclcyAtcCVzXG4nICUgKG9zLnBhdGguYmFzZW5hbWUobG9jYWwpLCBwYXJtWydzdHJpcGxldmVsJ10pKQorfQorCithZGR0YXNrIHByZXBhcmVfY29weWxlZnRfc291cmNlcyBhZnRlciBkb19mZXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3ByZXBhcmVfY29weWxlZnRfc291cmNlc1tkaXJzXSA9ICIke1dPUktESVJ9IgorZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICdkb19wcmVwYXJlX2NvcHlsZWZ0X3NvdXJjZXMnCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29weWxlZnRfZmlsdGVyLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY29weWxlZnRfZmlsdGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiZTdmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDc5IEBACisjIEZpbHRlciB0aGUgbGljZW5zZSwgdGhlIGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlIHJldHVybnMgVHJ1ZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERSByZWNpcGUsIGFuZCBGYWxzZSBmb3IgdGhlCisjIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERS4KKyMKKyMgQnkgZGVmYXVsdCwgaW5jbHVkZXMgYWxsIEdQTCBhbmQgTEdQTCwgYW5kIGV4Y2x1ZGVzIENMT1NFRCBhbmQgUHJvcHJpZXRhcnkuCisjCisjIHZpOnN0cz00OnN3PTQ6ZXQKKworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID89ICdHUEwqIExHUEwqJworQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9icyB3aGljaCBpbmNsdWRlIGxpY2Vuc2VzJworCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPz0gJ0NMT1NFRCBQcm9wcmlldGFyeScKK0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZ2xvYnMgd2hpY2ggZXhjbHVkZSBsaWNlbnNlcycKKworQ09QWUxFRlRfUkVDSVBFX1RZUEUgPz0gJyR7QGNvcHlsZWZ0X3JlY2lwZV90eXBlKGQpfScKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFW2RvY10gPSAnVGhlICJ0eXBlIiBvZiB0aGUgY3VycmVudCByZWNpcGUgKGUuZy4gdGFyZ2V0LCBuYXRpdmUsIGNyb3NzKScKKworQ09QWUxFRlRfUkVDSVBFX1RZUEVTID89ICd0YXJnZXQnCitDT1BZTEVGVF9SRUNJUEVfVFlQRVNbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSB0eXBlcyB0byBpbmNsdWRlJworCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCBuYXRpdmUgbmF0aXZlc2RrIGNyb3NzIGNyb3Nzc2RrIGNyb3NzLWNhbmFkaWFuJworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1t0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFU1tkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSByZWNpcGUgdHlwZXMnCisKK0NPUFlMRUZUX1BOX0lOQ0xVREUgPz0gJycKK0NPUFlMRUZUX1BOX0lOQ0xVREVbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX1BOX0lOQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiByZWNpcGUgbmFtZXMgdG8gaW5jbHVkZScKKworQ09QWUxFRlRfUE5fRVhDTFVERSA/PSAnJworQ09QWUxFRlRfUE5fRVhDTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUE5fRVhDTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBuYW1lcyB0byBleGNsdWRlJworCitkZWYgY29weWxlZnRfcmVjaXBlX3R5cGUoZCk6CisgICAgZm9yIHJlY2lwZV90eXBlIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0FWQUlMQUJMRV9SRUNJUEVfVFlQRVMnLCBkKToKKyAgICAgICAgaWYgb2UudXRpbHMuaW5oZXJpdHMoZCwgcmVjaXBlX3R5cGUpOgorICAgICAgICAgICAgcmV0dXJuIHJlY2lwZV90eXBlCisgICAgcmV0dXJuICd0YXJnZXQnCisKK2RlZiBjb3B5bGVmdF9zaG91bGRfaW5jbHVkZShkKToKKyAgICAiIiIKKyAgICBEZXRlcm1pbmUgaWYgdGhpcyByZWNpcGUncyBzb3VyY2VzIHNob3VsZCBiZSBkZXBsb3llZCBmb3IgY29tcGxpYW5jZQorICAgICIiIgorICAgIGltcG9ydCBhc3QKKyAgICBpbXBvcnQgb2UubGljZW5zZQorICAgIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCisgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRpZCBub3QgbWF0Y2ggYW55dGhpbmcnCisKKyAgICByZWNpcGVfdHlwZSA9IGQuZ2V0VmFyKCdDT1BZTEVGVF9SRUNJUEVfVFlQRScsIFRydWUpCisgICAgaWYgcmVjaXBlX3R5cGUgbm90IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX1JFQ0lQRV9UWVBFUycsIGQpOgorICAgICAgICBpbmNsdWRlLCBtb3RpdmUgPSBGYWxzZSwgJ3JlY2lwZSB0eXBlICIlcyIgaXMgZXhjbHVkZWQnICUgcmVjaXBlX3R5cGUKKworICAgIGluY2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUnLCBkKQorICAgIGV4Y2x1ZGUgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUnLCBkKQorCisgICAgdHJ5OgorICAgICAgICBpc19pbmNsdWRlZCwgcmVhc29uID0gb2UubGljZW5zZS5pc19pbmNsdWRlZChkLmdldFZhcignTElDRU5TRScsIFRydWUpLCBpbmNsdWRlLCBleGNsdWRlKQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGVsc2U6CisgICAgICAgIGlmIGlzX2luY2x1ZGVkOgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGluY2x1ZGVkLCBtb3RpdmUgPSBUcnVlLCAncmVjaXBlIGhhcyBpbmNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGRvZXMgbm90IGluY2x1ZGUgYSBjb3B5bGVmdCBsaWNlbnNlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGhhcyBleGNsdWRlZCBsaWNlbnNlczogJXMnICUgJywgJy5qb2luKHJlYXNvbikKKworICAgIGlmIGFueShmbm1hdGNoKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBuYW1lKSBcCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9QTl9JTkNMVURFJywgZCkpOgorICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gIFRydWUsICdyZWNpcGUgaW5jbHVkZWQgYnkgbmFtZScKKyAgICBpZiBhbnkoZm5tYXRjaChkLmdldFZhcignUE4nLCBUcnVlKSwgbmFtZSkgXAorICAgICAgICAgICAgZm9yIG5hbWUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfUE5fRVhDTFVERScsIGQpKToKKyAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIGV4Y2x1ZGVkIGJ5IG5hbWUnCisKKyAgICByZXR1cm4gaW5jbHVkZWQsIG1vdGl2ZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzNDBkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jb3JlLWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw3MyBAQAorIyBDb21tb24gY29kZSBmb3IgZ2VuZXJhdGluZyBjb3JlIHJlZmVyZW5jZSBpbWFnZXMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTGludXggRm91bmRhdGlvbgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBJTUFHRV9GRUFUVVJFUyBjb250cm9sIGNvbnRlbnQgb2YgdGhlIGNvcmUgcmVmZXJlbmNlIGltYWdlcworIyAKKyMgQnkgZGVmYXVsdCB3ZSBpbnN0YWxsIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgYW5kIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIHBhY2thZ2VzOworIyB0aGlzIGdpdmVzIHVzIHdvcmtpbmcgKGNvbnNvbGUgb25seSkgcm9vdGZzLgorIworIyBBdmFpbGFibGUgSU1BR0VfRkVBVFVSRVM6CisjCisjIC0geDExICAgICAgICAgICAgICAgICAtIFggc2VydmVyCisjIC0geDExLWJhc2UgICAgICAgICAgICAtIFggc2VydmVyIHdpdGggbWluaW1hbCBlbnZpcm9ubWVudAorIyAtIHgxMS1zYXRvICAgICAgICAgICAgLSBPcGVuZWRIYW5kIFNhdG8gZW52aXJvbm1lbnQKKyMgLSB0b29scy1kZWJ1ZyAgICAgICAgIC0gZGVidWdnaW5nIHRvb2xzCisjIC0gZWNsaXBzZS1kZWJ1ZyAgICAgICAtIEVjbGlwc2UgcmVtb3RlIGRlYnVnZ2luZyBzdXBwb3J0CisjIC0gdG9vbHMtcHJvZmlsZSAgICAgICAtIHByb2ZpbGluZyB0b29scworIyAtIHRvb2xzLXRlc3RhcHBzICAgICAgLSB0b29scyB1c2FibGUgdG8gbWFrZSBzb21lIGRldmljZSB0ZXN0cworIyAtIHRvb2xzLXNkayAgICAgICAgICAgLSBTREsgKEMvQysrIGNvbXBpbGVyLCBhdXRvdG9vbHMsIGV0Yy4pCisjIC0gbmZzLXNlcnZlciAgICAgICAgICAtIE5GUyBzZXJ2ZXIKKyMgLSBuZnMtY2xpZW50ICAgICAgICAgIC0gTkZTIGNsaWVudAorIyAtIHNzaC1zZXJ2ZXItZHJvcGJlYXIgLSBTU0ggc2VydmVyIChkcm9wYmVhcikKKyMgLSBzc2gtc2VydmVyLW9wZW5zc2ggIC0gU1NIIHNlcnZlciAob3BlbnNzaCkKKyMgLSBxdDQtcGtncyAgICAgICAgICAgIC0gUXQ0L1gxMSBhbmQgZGVtbyBhcHBsaWNhdGlvbnMKKyMgLSBod2NvZGVjcyAgICAgICAgICAgIC0gSW5zdGFsbCBoYXJkd2FyZSBhY2NlbGVyYXRpb24gY29kZWNzCisjIC0gcGFja2FnZS1tYW5hZ2VtZW50ICAtIGluc3RhbGxzIHBhY2thZ2UgbWFuYWdlbWVudCB0b29scyBhbmQgcHJlc2VydmVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGF0YWJhc2UKKyMgLSBkZWJ1Zy10d2Vha3MgICAgICAgIC0gbWFrZXMgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGRldmVsb3BtZW50LCBlLmcuIGFsbG93aW5nIHBhc3N3b3JkbGVzcyByb290IGxvZ2lucworIyAtIGRldi1wa2dzICAgICAgICAgICAgLSBkZXZlbG9wbWVudCBwYWNrYWdlcyAoaGVhZGVycywgZXRjLikgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRiZy1wa2dzICAgICAgICAgICAgLSBkZWJ1ZyBzeW1ib2wgcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIGRvYy1wa2dzICAgICAgICAgICAgLSBkb2N1bWVudGF0aW9uIHBhY2thZ2VzIGZvciBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGluIHRoZSByb290ZnMKKyMgLSBwdGVzdC1wa2dzICAgICAgICAgIC0gcHRlc3QgcGFja2FnZXMgZm9yIGFsbCBwdGVzdC1lbmFibGVkIHJlY2lwZXMKKyMgLSByZWFkLW9ubHktcm9vdGZzICAgIC0gdHdlYWtzIGFuIGltYWdlIHRvIHN1cHBvcnQgcmVhZC1vbmx5IHJvb3RmcworIworRkVBVFVSRV9QQUNLQUdFU194MTEgPSAicGFja2FnZWdyb3VwLWNvcmUteDExIgorRkVBVFVSRV9QQUNLQUdFU194MTEtYmFzZSA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSIKK0ZFQVRVUkVfUEFDS0FHRVNfeDExLXNhdG8gPSAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8iCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnIgorRkVBVFVSRV9QQUNLQUdFU19lY2xpcHNlLWRlYnVnID0gInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWciCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXByb2ZpbGUgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtdGVzdGFwcHMgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX3Rvb2xzLXNkayA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0IgorRkVBVFVSRV9QQUNLQUdFU19uZnMtc2VydmVyID0gInBhY2thZ2Vncm91cC1jb3JlLW5mcy1zZXJ2ZXIiCitGRUFUVVJFX1BBQ0tBR0VTX25mcy1jbGllbnQgPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLWNsaWVudCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3NoLXNlcnZlci1kcm9wYmVhciA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIiCitGRUFUVVJFX1BBQ0tBR0VTX3NzaC1zZXJ2ZXItb3BlbnNzaCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfcXQ0LXBrZ3MgPSAicGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMiCitGRUFUVVJFX1BBQ0tBR0VTX2h3Y29kZWNzID0gIiR7TUFDSElORV9IV0NPREVDU30iCisKKworIyBJTUFHRV9GRUFUVVJFU19SRVBMQUNFU19mb28gPSAnYmFyMSBiYXIyJworIyBJbmNsdWRpbmcgaW1hZ2UgZmVhdHVyZSBmb28gd291bGQgcmVwbGFjZSB0aGUgaW1hZ2UgZmVhdHVyZXMgYmFyMSBhbmQgYmFyMgorSU1BR0VfRkVBVFVSRVNfUkVQTEFDRVNfc3NoLXNlcnZlci1vcGVuc3NoID0gInNzaC1zZXJ2ZXItZHJvcGJlYXIiCisKKyMgSU1BR0VfRkVBVFVSRVNfQ09ORkxJQ1RTX2ZvbyA9ICdiYXIxIGJhcjInCisjIEFuIGVycm9yIGV4Y2VwdGlvbiB3b3VsZCBiZSByYWlzZWQgaWYgYm90aCBpbWFnZSBmZWF0dXJlcyBmb28gYW5kIGJhcjEob3IgYmFyMikgYXJlIGluY2x1ZGVkCisKK01BQ0hJTkVfSFdDT0RFQ1MgPz89ICIiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMID0gJ1wKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1ib290IFwKKyAgICBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCBcCisgICAgXAorICAgICR7Q09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMfSBcCisgICAgJworCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEwgPz0gIiIKKworSU1BR0VfSU5TVEFMTCA/PSAiJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0iCisKK2luaGVyaXQgaW1hZ2UKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcGFuLWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jcGFuLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTgxN2JhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgY3Bhbi1iYXNlIHByb3ZpZGVycyB2YXJpb3VzIHBlcmwgcmVsYXRlZCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGJ1aWxkaW5nCisjIGNwYW4gbW9kdWxlcworIworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9wZXJsICR7ZGF0YWRpcn0vcGVybCIKKworREVQRU5EUyAgKz0gIiR7QFsicGVybCIsICJwZXJsLW5hdGl2ZSJdWyhiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbInBlcmwiLCAiIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCitQRVJMX09XTl9ESVIgPSAiJHtAWyIiLCAiL3BlcmwtbmF0aXZlIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorCisjIERldGVybWluZSB0aGUgc3RhZ2VkIHZlcnNpb24gb2YgcGVybCBmcm9tIHRoZSBwZXJsIGNvbmZpZ3VyYXRpb24gZmlsZQorIyBBc3NpZ24gdmFyZGVwdmFsdWUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHNpZ25hdHVyZSBpcyBjaGFuZ2VkIGJlZm9yZSBhbmQgYWZ0ZXIKKyMgcGVybCBpcyBidWlsdCAoZnJvbSBOb25lIHRvIHJlYWwgdmVyc2lvbiBpbiBjb25maWcuc2gpLgorZ2V0X3BlcmxfdmVyc2lvblt2YXJkZXB2YWx1ZV0gPSAiJHtQRVJMX09XTl9ESVJ9IgorZGVmIGdldF9wZXJsX3ZlcnNpb24oZCk6CisgICAgaW1wb3J0IHJlCisgICAgY2ZnID0gZC5leHBhbmQoJyR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvY29uZmlnLnNoJykKKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKGNmZywgJ3InKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGwgPSBmLnJlYWRsaW5lcygpOworICAgIGYuY2xvc2UoKTsKKyAgICByID0gcmUuY29tcGlsZSgiXnZlcnNpb249JyhcZCpcLlxkKlwuXGQqKSciKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKyMgRGV0ZXJtaW5lIHdoZXJlIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFyZQorZGVmIHBlcmxfZ2V0X2xpYmRpcnMoZCk6CisgICAgbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgaWYgaXNfdGFyZ2V0KGQpID09ICJubyI6CisgICAgICAgIGxpYmRpciArPSAnL3BlcmwtbmF0aXZlJworICAgIGxpYmRpciArPSAnL3BlcmwnCisgICAgcmV0dXJuIGxpYmRpcgorCitkZWYgaXNfdGFyZ2V0KGQpOgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisgICAgcmV0dXJuICJubyIKKworUEVSTExJQkRJUlMgOj0gIiR7QHBlcmxfZ2V0X2xpYmRpcnMoZCl9IgorUEVSTFZFUlNJT04gOj0gIiR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorUEVSTFZFUlNJT05bdmFyZGVwdmFsdWVdID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BFUkxMSUJESVJTfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQRVJMTElCRElSU30vdmVuZG9yX3BlcmwvJHtQRVJMVkVSU0lPTn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY3Bhbi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NwYW4uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJiZDJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NwYW4uYmJjbGFzcwpAQCAtMCwwICsxLDU1IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgb2xkIE1ha2VmaWxlLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFORkxBR1MgPz0gIiIKK0VYVFJBX1BFUkxGTEFHUyA/PSAiIgorCisjIEVudiB2YXIgd2hpY2ggdGVsbHMgcGVybCBpZiBpdCBzaG91bGQgdXNlIGhvc3QgKG5vKSBvciB0YXJnZXQgKHllcykgc2V0dGluZ3MKK2V4cG9ydCBQRVJMQ09ORklHVEFSR0VUID0gIiR7QGlzX3RhcmdldChkKX0iCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIHdoZXJlIHRoZSBwZXJsIGluY2x1ZGUgZmlsZXMgYXJlCitleHBvcnQgUEVSTF9JTkMgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS9DT1JFIgorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTF9BUkNITElCID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitleHBvcnQgUEVSTEhPU1RMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vIgorCitjcGFuX2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IFBFUkw1TElCPSIke1BFUkxfQVJDSExJQn0iCisJeWVzICcnIHwgcGVybCAke0VYVFJBX1BFUkxGTEFHU30gTWFrZWZpbGUuUEwgJHtFWFRSQV9DUEFORkxBR1N9CisKKwkjIE1ha2VmaWxlLlBMcyBjYW4gZXhpdCB3aXRoIHN1Y2Nlc3Mgd2l0aG91dCBnZW5lcmF0aW5nIGEKKwkjIE1ha2VmaWxlLCBlLmcuIGluIGNhc2VzIG9mIG1pc3NpbmcgY29uZmlndXJlIHRpbWUKKwkjIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBjb25zaWRlcmVkIGEgYmVzdCBwcmFjdGljZSBieQorCSMgY3BhbnRlc3RlcnMub3JnLiBTZWU6CisJIyAgKiBodHRwOi8vd2lraS5jcGFudGVzdGVycy5vcmcvd2lraS9DUEFOQXV0aG9yTm90ZXMKKwkjICAqIGh0dHA6Ly93d3cubm50cC5wZXJsLm9yZy9ncm91cC9wZXJsLnFhLzIwMDgvMDgvbXNnMTEyMzYuaHRtbAorCVsgLWUgTWFrZWZpbGUgXSB8fCBiYmZhdGFsICJObyBNYWtlZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IE1ha2VmaWxlLlBMIgorCisJaWYgWyAiJHtCVUlMRF9TWVN9IiAhPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJLiAke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsL2NvbmZpZy5zaAorCQkjIFVzZSBmaW5kIHNpbmNlIHRoZXJlIGNhbiBiZSBhIE1ha2VmaWxlIGdlbmVyYXRlZCBmb3IgZWFjaCBNYWtlZmlsZS5QTAorCQlmb3IgZiBpbiBgZmluZCAtbmFtZSBNYWtlZmlsZS5QTGA7IGRvCisJCQlmMj1gZWNobyAkZiB8IHNlZCAtZSAncy8uUEwvLydgCisJCQl0ZXN0IC1mICRmMiB8fCBjb250aW51ZQorCQkJc2VkIC1pIC1lICJzOlwoUEVSTF9BUkNITElCID0gXCkuKjpcMSR7UEVSTF9BUkNITElCfToiIFwKKwkJCQktZSAncy9wZXJsLnJlYWwvcGVybC8nIFwKKwkJCQktZSAic3xeXChDQ0ZMQUdTID0uKlwpfFwxICR7Q0ZMQUdTfXwiIFwKKwkJCQkkZjIKKwkJZG9uZQorCWZpCit9CisKK2NwYW5fZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBQQVNUSFJVX0lOQz0iJHtDRkxBR1N9IiBMRD0iJHtDQ0xEfSIKK30KKworY3Bhbl9kb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfdmVuZG9yCisJZm9yIFBFUkxTQ1JJUFQgaW4gYGdyZXAgLXJJRWwgJyMhICoke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsJyAke0R9YDsgZG8KKwkJc2VkIC1pIC1lICdzfCR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkUEVSTFNDUklQVAorCWRvbmUKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY3Bhbl9idWlsZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NwYW5fYnVpbGQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjY0OGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NwYW5fYnVpbGQuYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjCisjIFRoaXMgaXMgZm9yIHBlcmwgbW9kdWxlcyB0aGF0IHVzZSB0aGUgbmV3IEJ1aWxkLlBMIGJ1aWxkIHN5c3RlbQorIworaW5oZXJpdCBjcGFuLWJhc2UgcGVybG5hdGl2ZQorCitFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTID89ICIiCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBMRCA9ICIke0NDTER9IgorCitjcGFuX2J1aWxkX2RvX2NvbmZpZ3VyZSAoKSB7CisJaWYgWyAiJHtAaXNfdGFyZ2V0KGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCSMgYnVpbGQgZm9yIHRhcmdldAorCQkuICR7U1RBR0lOR19MSUJESVJ9L3BlcmwvY29uZmlnLnNoCisJZmkKKworCXBlcmwgQnVpbGQuUEwgLS1pbnN0YWxsZGlycyB2ZW5kb3IgXAorCQkJCS0tZGVzdGRpciAke0R9IFwKKwkJCQktLWluc3RhbGxfcGF0aCBhcmNoPSIke2xpYmRpcn0vcGVybCIgXAorCQkJCS0taW5zdGFsbF9wYXRoIHNjcmlwdD0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbj0ke2JpbmRpcn0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGJpbmRvYz0ke21hbmRpcn0vbWFuMSBcCisJCQkJLS1pbnN0YWxsX3BhdGggbGliZG9jPSR7bWFuZGlyfS9tYW4zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtFWFRSQV9DUEFOX0JVSUxEX0ZMQUdTfQorfQorCitjcGFuX2J1aWxkX2RvX2NvbXBpbGUgKCkgeworICAgICAgICBwZXJsIEJ1aWxkCit9CisKK2NwYW5fYnVpbGRfZG9faW5zdGFsbCAoKSB7CisJcGVybCBCdWlsZCBpbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzBhMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Nyb3NzLWNhbmFkaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxODUgQEAKKyMKKyMgTk9URSAtIFdoZW4gdXNpbmcgdGhpcyBjbGFzcyB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAorIyBUUkFOU0xBVEVEX1RBUkdFVF9BUkNIIGlzIGFkZGVkIGludG8gUE4uIFRoaXMgZW5zdXJlcyB0aGF0IGlmIHRoZSBUQVJHRVRfQVJDSAorIyBpcyBjaGFuZ2VkLCBhbm90aGVyIG5hdGl2ZXNkayB4eHgtY2FuYWRpYW4tY3Jvc3MgY2FuIGJlIGluc3RhbGxlZAorIworCisKKyMgU0RLIHBhY2thZ2VzIGFyZSBidWlsdCBlaXRoZXIgZXhwbGljaXRseSBieSB0aGUgdXNlciwKKyMgb3IgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeS4gIE5vIG5lZWQgdG8gYmUgaW4gJ3dvcmxkJy4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zcy1jYW5hZGlhbiIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7U0RLX0FSQ0h9JHtTREtfVkVORE9SfS0ke1NES19PU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCisjCisjIFVwZGF0ZSBCQVNFX1BBQ0tBR0VfQVJDSCBhbmQgUEFDS0FHRV9BUkNIUworIworUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK0NBTkFESUFORVhUUkFPUyA9ICJsaW51eC11Y2xpYmMgbGludXgtbXVzbCIKK0NBTkFESUFORVhUUkFWRU5ET1IgPSAiIgorTU9ESUZZVE9TID8/PSAiMSIKK3B5dGhvbiAoKSB7CisgICAgYXJjaHMgPSBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnNwbGl0KCkKKyAgICBzZGthcmNocyA9IFtdCisgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgIHNka2FyY2hzLmFwcGVuZChhcmNoICsgJy0ke1NES1BLR1NVRkZJWH0nKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgIiAiLmpvaW4oc2RrYXJjaHMpKQorCisgICAgIyBBbGxvdyB0aGUgZm9sbG93aW5nIGNvZGUgc2VnbWVudCB0byBiZSBkaXNhYmxlZCwgZS5nLiBtZXRhLWVudmlyb25tZW50CisgICAgaWYgZC5nZXRWYXIoIk1PRElGWVRPUyIsIFRydWUpICE9ICIxIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBkLmdldFZhcigiVENMSUJDIiwgVHJ1ZSkgPT0gImJhcmVtZXRhbCI6CisgICAgICAgIHJldHVybgorCisgICAgdG9zID0gZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpCisgICAgd2hpdGVsaXN0ID0gW10KKyAgICBmb3IgdmFyaWFudCBpbiBbIiIsICJzcGUiLCAieDMyIiwgImVhYmkiLCAibjMyIl06CisgICAgICAgIGZvciBsaWJjIGluIFsiIiwgInVjbGliYyIsICJtdXNsIl06CisgICAgICAgICAgICBlbnRyeSA9ICJsaW51eCIKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgYW5kIGxpYmM6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItIiArIGxpYmMgKyB2YXJpYW50CisgICAgICAgICAgICBlbGlmIHZhcmlhbnQ6CisgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeSArICItZ251IiArIHZhcmlhbnQKKyAgICAgICAgICAgIGVsaWYgbGliYzoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYworICAgICAgICAgICAgd2hpdGVsaXN0LmFwcGVuZChlbnRyeSkKKyAgICBpZiB0b3Mgbm90IGluIHdoaXRlbGlzdDoKKyAgICAgICAgYmIuZmF0YWwoIkJ1aWxkaW5nIGNyb3NzLWNhbmRpYW4gZm9yIGFuIHVua25vd24gVEFSR0VUX1NZUyAoJXMpLCBwbGVhc2UgdXBkYXRlIGNyb3NzLWNhbmFkaWFuLmJiY2xhc3MiICUgZC5nZXRWYXIoIlRBUkdFVF9TWVMiLCBUcnVlKSkKKworICAgIGZvciBuIGluIFsiUFJPVklERVMiLCAiREVQRU5EUyJdOgorICAgICAgICBkLnNldFZhcihuLCBkLmdldFZhcihuLCBUcnVlKSkKKyAgICBkLnNldFZhcigiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIiwgZC5nZXRWYXIoIlNUQUdJTkdfQklORElSX1RPT0xDSEFJTiIsIFRydWUpKQorICAgIGZvciBwcmVmaXggaW4gWyJBUiIsICJBUyIsICJETExUT09MIiwgIkNDIiwgIkNYWCIsICJHQ0MiLCAiTEQiLCAiTElQTyIsICJOTSIsICJPQkpEVU1QIiwgIlJBTkxJQiIsICJTVFJJUCIsICJXSU5EUkVTIl06CisgICAgICAgIG4gPSBwcmVmaXggKyAiX0ZPUl9UQVJHRVQiCisgICAgICAgIGQuc2V0VmFyKG4sIGQuZ2V0VmFyKG4sIFRydWUpKQorICAgICMgVGhpcyBpcyBhIGJpdCB1Z2x5LiBXZSBuZWVkIHRvIHplcm8gTElCQy9BQkkgZXh0ZW5zaW9uIHdoaWNoIHdpbGwgY2hhbmdlIFRBUkdFVF9PUworICAgICMgaG93ZXZlciB3ZSBuZWVkIHRoZSBvbGQgdmFsdWUgaW4gc29tZSB2YXJpYWJsZXMuIFdlIGV4cGFuZCB0aG9zZSBoZXJlIGZpcnN0LgorICAgIHRhcmNoID0gZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJjaCA9PSAieDg2XzY0IjoKKyAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnV4MzIgbGludXgtdWNsaWJjeDMyIGxpbnV4LW11c2x4MzIiKQorICAgIGVsaWYgdGFyY2ggPT0gInBvd2VycGMiOgorICAgICAgICAjIFBvd2VyUEMgY2FuIGJ1aWxkICJsaW51eCIgYW5kICJsaW51eC1nbnVzcGUiCisgICAgICAgIGQuc2V0VmFyKCJMSUJDRVhURU5TSU9OIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJBQklFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIkNBTkFESUFORVhUUkFPUyIsICIgbGludXgtZ251c3BlIGxpbnV4LXVjbGliY3NwZSBsaW51eC1tdXNsc3BlIikKKyAgICBlbGlmIHRhcmNoID09ICJtaXBzNjQiOgorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVuMzIgbGludXgtdWNsaWJjbjMyIGxpbnV4LW11c2xuMzIiKQorICAgIGlmIHRhcmNoID09ICJhcm0iOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX09TIiwgImxpbnV4LWdudWVhYmkiKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgiKQorCisgICAgIyBBbHNvIG5lZWQgdG8gaGFuZGxlIG11bHRpbGliIHRhcmdldCB2ZW5kb3JzCisgICAgdmVuZG9ycyA9IGQuZ2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgVHJ1ZSkKKyAgICBpZiBub3QgdmVuZG9yczoKKyAgICAgICAgdmVuZG9ycyA9IGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnVEFSR0VUX1ZFTkRPUicpCisgICAgb3JpZ3ZlbmRvciA9IGQuZ2V0VmFyKCJUQVJHRVRfVkVORE9SX01VTFRJTElCX09SSUdJTkFMIiwgVHJ1ZSkKKyAgICBpZiBvcmlndmVuZG9yOgorICAgICAgICBkLnNldFZhcigiVEFSR0VUX1ZFTkRPUiIsIG9yaWd2ZW5kb3IpCisgICAgICAgIGlmIG9yaWd2ZW5kb3Igbm90IGluIHZlbmRvcnMuc3BsaXQoKToKKyAgICAgICAgICAgIHZlbmRvcnMgPSBvcmlndmVuZG9yICsgIiAiICsgdmVuZG9ycworICAgIGQuc2V0VmFyKCJDQU5BRElBTkVYVFJBVkVORE9SIiwgdmVuZG9ycykKK30KK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBVEhfYXBwZW5kID0gIjoke1RNUERJUn0vc3lzcm9vdHMvJHtIT1NUX0FSQ0h9LyR7YmluZGlyX2Nyb3NzfSIKK1BLR0hJU1RfRElSID0gIiR7VE1QRElSfS9wa2doaXN0b3J5LyR7SE9TVF9BUkNIfS0ke1NES1BLR1NVRkZJWH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9LyIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKworI2Fzc2lnbiBEUEtHX0FSQ0gKK0RQS0dfQVJDSCA9ICIke1NES19BUkNIfSIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IFwKKyAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUgbmF0aXZlc2RrLWdldHRleHQiCisKKyMKKyMgV2UgbmVlZCBjaHJwYXRoID49IDAuMTQgdG8gZW5zdXJlIHdlIGNhbiBkZWFsIHdpdGggMzIgYW5kIDY0IGJpdAorIyBiaW5hcmllcworIworREVQRU5EU19hcHBlbmQgPSAiIGNocnBhdGgtcmVwbGFjZW1lbnQtbmF0aXZlIgorRVhUUkFOQVRJVkVQQVRIICs9ICJjaHJwYXRoLW5hdGl2ZSIKKworIyBQYXRoIG1hbmdsaW5nIG5lZWRlZCBieSB0aGUgY3Jvc3MgcGFja2FnaW5nCisjIE5vdGUgdGhhdCB3ZSB1c2UgOj0gaGVyZSB0byBlbnN1cmUgdGhhdCBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgYXJlCisjIHRhcmdldCBwYXRocy4KK3RhcmdldF9iYXNlX3ByZWZpeCA6PSAiJHtiYXNlX3ByZWZpeH0iCit0YXJnZXRfcHJlZml4IDo9ICIke3ByZWZpeH0iCit0YXJnZXRfZXhlY19wcmVmaXggOj0gIiR7ZXhlY19wcmVmaXh9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7dGFyZ2V0X2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2xpYmRpciA9ICIke3RhcmdldF9leGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9pbmNsdWRlZGlyIDo9ICIke2luY2x1ZGVkaXJ9IgorCisjIENoYW5nZSB0byBwbGFjZSBmaWxlcyBpbiBTREtQQVRICitiYXNlX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9IgorcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitzYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2VfYmluZGlyID0gIiR7YmluZGlyfSIKK2Jhc2Vfc2JpbmRpciA9ICIke2JpbmRpcn0iCitsaWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke3ByZWZpeH0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtwcmVmaXh9L2Jpbi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9saWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIiR7U0RLVVNFX05MU30iCisKKyMgV2UgaGF2ZSB0byB1cyBUQVJHRVRfQVJDSCBidXQgd2UgY2FyZSBhYm91dCB0aGUgYWJzb2x1dGUgdmFsdWUKKyMgYW5kIG5vdCBhbnkgcGFydGljdWxhciB0dW5lIHRoYXQgaXMgZW5hYmxlZC4KK1RBUkdFVF9BUkNIW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX0FSQ0giCisKKyMgSWYgTUxQUkVGSVggaXMgc2V0IGJ5IG11bHRpbGliIGNvZGUsIHNobGlicworIyBwb2ludHMgdG8gdGhlIHdyb25nIHBsYWNlIHNvIGZvcmNlIGl0CitTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9L25hdGl2ZXNkay1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RBVEFfRElSfS9uYXRpdmVzZGstc2hsaWJzMiIKKworY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MgKCkgeworCWZvciBpIGluIGxpbnV4ICR7Q0FOQURJQU5FWFRSQU9TfQorCWRvCisJCWZvciB2IGluICR7Q0FOQURJQU5FWFRSQVZFTkRPUn0KKwkJZG8KKwkJCWQ9JHtEfSR7YmluZGlyfS8uLi8ke1RBUkdFVF9BUkNIfSR2LSRpCisJCQlpZiBbIC1kICRkIF07CisJCQl0aGVuCisJCQkgICAgY29udGludWUKKwkJCWZpCisJCQlpbnN0YWxsIC1kICRkCisJCQlmb3IgaiBpbiBgbHMgJHtEfSR7YmluZGlyfWAKKwkJCWRvCisJCQkJcD0ke1RBUkdFVF9BUkNIfSR2LSRpLWBlY2hvICRqIHwgc2VkIC1lIHMsJHtUQVJHRVRfUFJFRklYfSwsYAorCQkJCWxuIC1zIC4uLyR7VEFSR0VUX1NZU30vJGogJGQvJHAKKwkJCWRvbmUKKwkJZG9uZQorICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VhYjViOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jcm9zcy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK2luaGVyaXQgcmVsb2NhdGFibGUKKworIyBDcm9zcyBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0NMQVNTT1ZFUlJJREUgPSAiY2xhc3MtY3Jvc3MiCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworSE9TVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX09TID0gIiR7QlVJTERfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtCVUlMRF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7SE9TVF9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCitNVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1BBQ0tBR0VfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke2V4ZWNfcHJlZml4fS9saWIvcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCitDUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERfTERGTEFHU30iCitMREZMQUdTX2J1aWxkLWRhcndpbiA9ICItTCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUiCisKKyMgUGF0aCBtYW5nbGluZyBuZWVkZWQgYnkgdGhlIGNyb3NzIHBhY2thZ2luZworIyBOb3RlIHRoYXQgd2UgdXNlIDo9IGhlcmUgdG8gZW5zdXJlIHRoYXQgbGliZGlyIGFuZCBpbmNsdWRlZGlyIGFyZQorIyB0YXJnZXQgcGF0aHMuCit0YXJnZXRfYmFzZV9wcmVmaXggOj0gIiR7YmFzZV9wcmVmaXh9IgordGFyZ2V0X3ByZWZpeCA6PSAiJHtwcmVmaXh9IgordGFyZ2V0X2V4ZWNfcHJlZml4IDo9ICIke2V4ZWNfcHJlZml4fSIKK3RhcmdldF9iYXNlX2xpYmRpciA9ICIke3RhcmdldF9iYXNlX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9saWJkaXIgPSAiJHt0YXJnZXRfZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCit0YXJnZXRfaW5jbHVkZWRpciA6PSAiJHtpbmNsdWRlZGlyfSIKKworIyBPdmVycmlkZXMgZm9yIHBhdGhzCitDUk9TU19UQVJHRVRfU1lTX0RJUiA9ICIke1RBUkdFVF9TWVN9IgorcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitleGVjX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2Jpbi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9iaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9zYmluZGlyID0gIiR7YmluZGlyfSIKK2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCitsaWJleGVjZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMvJHtDUk9TU19UQVJHRVRfU1lTX0RJUn0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK1VTRV9OTFMgPSAibm8iCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkNWNmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jcm9zc3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQgY3Jvc3MKKworQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zc3NkayIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorUEFDS0FHRV9BUkNIID0gIiR7U0RLX0FSQ0h9IgorcHl0aG9uICgpIHsKKwkjIHNldCBUVU5FX1BLR0FSQ0ggdG8gU0RLX0FSQ0gKKwlkLnNldFZhcignVFVORV9QS0dBUkNIJywgZC5nZXRWYXIoJ1NES19BUkNIJywgVHJ1ZSkpCit9CisKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKK1NUQUdJTkdfQklORElSX1RPT0xDSEFJTiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorCit0YXJnZXRfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2xpYmRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2luY2x1ZGVkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7aW5jbHVkZWRpcl9uYXRpdmVzZGt9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30iCit0YXJnZXRfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgordGFyZ2V0X2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCisjIE5lZWQgdG8gZm9yY2UgdGhpcyB0byBlbnN1cmUgY29uc2l0ZW5jeSBhY2Nyb3NzIGFyY2hpdGVjdHVyZXMKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiIgorCitVU0VfTkxTID0gIm5vIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2RlYmlhbi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2RlYmlhbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjk3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MKQEAgLTAsMCArMSwxNDEgQEAKKyMgRGViaWFuIHBhY2thZ2UgcmVuYW1pbmcgb25seSBvY2N1cnMgd2hlbiBhIHBhY2thZ2UgaXMgYnVpbHQKKyMgV2UgdGhlcmVmb3JlIGhhdmUgdG8gbWFrZSBzdXJlIHdlIGJ1aWxkIGFsbCBydW50aW1lIHBhY2thZ2VzCisjIGJlZm9yZSBidWlsZGluZyB0aGUgY3VycmVudCBwYWNrYWdlIHRvIG1ha2UgdGhlIHBhY2thZ2VzIHJ1bnRpbWUKKyMgZGVwZW5kcyBhcmUgY29ycmVjdAorIworIyBDdXN0b20gbGlicmFyeSBwYWNrYWdlIG5hbWVzIGNhbiBiZSBkZWZpbmVkIHNldHRpbmcKKyMgREVCSUFOTkFNRV8gKyBwa2duYW1lIHRvIHRoZSBkZXNpcmVkIG5hbWUuCisjCisjIEJldHRlciBleHByZXNzZWQgYXMgZW5zdXJlIGFsbCBSREVQRU5EUyBwYWNrYWdlIGJlZm9yZSB3ZSBwYWNrYWdlCisjIFRoaXMgbWVhbnMgd2UgY2FuJ3QgaGF2ZSBjaXJjdWxhciBSREVQRU5EUy9SUkVDT01NRU5EUworCitBVVRPX0xJQk5BTUVfUEtHUyA9ICIke1BBQ0tBR0VTfSIKKworaW5oZXJpdCBwYWNrYWdlCisKK0RFQklBTlJERVAgPSAiZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorZG9fcGFja2FnZV93cml0ZV90YXJbcmRlcHRhc2tdID0gIiR7REVCSUFOUkRFUH0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5SREVQIiwgIiIpCit9CisKK3B5dGhvbiBkZWJpYW5fcGFja2FnZV9uYW1lX2hvb2sgKCkgeworICAgIGltcG9ydCBnbG9iLCBjb3B5LCBzdGF0LCBlcnJubywgcmUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGJpbl9yZSA9IHJlLmNvbXBpbGUoIi4qL3M/IiArIG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoImJpbmRpciIsIFRydWUpKSArICIkIikKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCIuKi8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpICsgIiQiKQorICAgIHNvX3JlID0gcmUuY29tcGlsZSgibGliLipcLnNvIikKKworICAgIGRlZiBzb2NydW5jaChzKToKKyAgICAgICAgcyA9IHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICBtID0gcmUubWF0Y2goIl4oLiopKC4pXC5zb1wuKC4qKSQiLCBzKQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBtLmdyb3VwKDIpIGluICcwMTIzNDU2Nzg5JzoKKyAgICAgICAgICAgIGJpbiA9ICclcyVzLSVzJyAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLCBtLmdyb3VwKDMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmluID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikgKyBtLmdyb3VwKDMpCisgICAgICAgIGRldiA9IG0uZ3JvdXAoMSkgKyBtLmdyb3VwKDIpCisgICAgICAgIHJldHVybiAoYmluLCBkZXYpCisKKyAgICBkZWYgaXNleGVjKHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gb3Muc3RhdChwYXRoKQorICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JRVhFQykKKworICAgIGRlZiBhZGRfcnByb3ZpZGVzKHBrZywgZCk6CisgICAgICAgIG5ld3BrZyA9IGQuZ2V0VmFyKCdQS0dfJyArIHBrZywgRmFsc2UpCisgICAgICAgIGlmIG5ld3BrZyBhbmQgbmV3cGtnICE9IHBrZzoKKyAgICAgICAgICAgIHByb3ZzID0gKGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gcHJvdnM6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAiICIgKyBwa2cgKyAiICg9IiArIGQuZ2V0VmFyKCJQS0dWIiwgVHJ1ZSkgKyAiKSIpCisKKyAgICBkZWYgYXV0b19saWJuYW1lKHBhY2thZ2VzLCBvcmlnX3BrZyk6CisgICAgICAgIHNvbmFtZXMgPSBbXQorICAgICAgICBoYXNfYmlucyA9IDAKKyAgICAgICAgaGFzX2xpYnMgPSAwCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW29yaWdfcGtnXToKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgIGlmIGJpbl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfYmlucyA9IDEKKyAgICAgICAgICAgIGlmIGxpYl9yZS5tYXRjaChyb290KToKKyAgICAgICAgICAgICAgICBoYXNfbGlicyA9IDEKKyAgICAgICAgICAgICAgICBpZiBzb19yZS5tYXRjaChvcy5wYXRoLmJhc2VuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gKGQuZ2V0VmFyKCdUQVJHRVRfUFJFRklYJywgVHJ1ZSkgb3IgIiIpICsgIm9iamR1bXAgLXAgIiArIGZpbGUgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICAgICAgICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGFuZCBub3QgbS5ncm91cCgxKSBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgYmIuZGVidWcoMSwgJ0xJQk5BTUVTOiBwa2cgJXMgbGlicyAlZCBiaW5zICVkIHNvbmFtZXMgJXMnICUgKG9yaWdfcGtnLCBoYXNfbGlicywgaGFzX2JpbnMsIHNvbmFtZXMpKQorICAgICAgICBzb25hbWUgPSBOb25lCisgICAgICAgIGlmIGxlbihzb25hbWVzKSA9PSAxOgorICAgICAgICAgICAgc29uYW1lID0gc29uYW1lc1swXQorICAgICAgICBlbGlmIGxlbihzb25hbWVzKSA+IDE6CisgICAgICAgICAgICBsZWFkID0gZC5nZXRWYXIoJ0xFQURfU09OQU1FJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxlYWQ6CisgICAgICAgICAgICAgICAgciA9IHJlLmNvbXBpbGUobGVhZCkKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHMgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgci5tYXRjaChzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIGlmIGxlbihmaWx0ZXJlZCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgc29uYW1lID0gZmlsdGVyZWRbMF0KKyAgICAgICAgICAgICAgICBlbGlmIGxlbihmaWx0ZXJlZCkgPiAxOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBtYXRjaGVzICglcykgZm9yIExFQURfU09OQU1FICclcyciICUgKCIsICIuam9pbihmaWx0ZXJlZCksIGxlYWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIGxpYnJhcmllcyAoJXMpIGZvdW5kLCBidXQgTEVBRF9TT05BTUUgJyVzJyBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aGVtIiAlICgiLCAiLmpvaW4oc29uYW1lcyksIGxlYWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJNdWx0aXBsZSBsaWJyYXJpZXMgKCVzKSBmb3VuZCBhbmQgTEVBRF9TT05BTUUgbm90IGRlZmluZWQiICUgIiwgIi5qb2luKHNvbmFtZXMpKQorCisgICAgICAgIGlmIGhhc19saWJzIGFuZCBub3QgaGFzX2JpbnMgYW5kIHNvbmFtZToKKyAgICAgICAgICAgIHNvbmFtZV9yZXN1bHQgPSBzb2NydW5jaChzb25hbWUpCisgICAgICAgICAgICBpZiBzb25hbWVfcmVzdWx0OgorICAgICAgICAgICAgICAgIChwa2duYW1lLCBkZXZuYW1lKSA9IHNvbmFtZV9yZXN1bHQKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIChkLmdldFZhcignUEtHXycgKyBwa2csIEZhbHNlKSBvciBkLmdldFZhcignREVCSUFOX05PQVVUT05BTUVfJyArIHBrZywgRmFsc2UpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMocGtnLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGViaWFuX3BuID0gZC5nZXRWYXIoJ0RFQklBTk5BTUVfJyArIHBrZywgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlYmlhbl9wbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IGRlYmlhbl9wbgorICAgICAgICAgICAgICAgICAgICBlbGlmIHBrZyA9PSBvcmlnX3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IHBrZy5yZXBsYWNlKG9yaWdfcGtnLCBkZXZuYW1lLCAxKQorICAgICAgICAgICAgICAgICAgICBtbHByZT1kLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBtbHByZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdwa2cuZmluZChtbHByZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBtbHByZSArIG5ld3BrZworICAgICAgICAgICAgICAgICAgICBpZiBuZXdwa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcGtnLCBuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfcnByb3ZpZGVzKHBrZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMob3JpZ19wa2csIGQpCisKKyAgICAjIHJldmVyc2VkIHNvcnQgaXMgbmVlZGVkIHdoZW4gc29tZSBwYWNrYWdlIGlzIHN1YnN0cmluZyBvZiBhbm90aGVyCisgICAgIyBpZSBpbiBuY3Vyc2VzIHdlIGdldCB3aXRob3V0IHJldmVyc2Ugc29ydDogCisgICAgIyBERUJVRzogTElCTkFNRVM6IHBrZ25hbWUgbGlidGljNSBkZXZuYW1lIGxpYnRpYyBwa2cgbmN1cnNlcy1saWJ0aWMgb3JpZ19wa2cgbmN1cnNlcy1saWJ0aWMgZGViaWFuX3BuIE5vbmUgbmV3cGtnIGxpYnRpYzUKKyAgICAjIGFuZCBsYXRlcgorICAgICMgREVCVUc6IExJQk5BTUVTOiBwa2duYW1lIGxpYnRpYzUgZGV2bmFtZSBsaWJ0aWMgcGtnIG5jdXJzZXMtbGlidGljdyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljdworICAgICMgc28gd2UgbmVlZCB0byBoYW5kbGUgbmN1cnNlcy1saWJ0aWN3LT5saWJ0aWN3NSBiZWZvcmUgbmN1cnNlcy1saWJ0aWMtPmxpYnRpYzUKKyAgICBmb3IgcGtnIGluIHNvcnRlZCgoZC5nZXRWYXIoJ0FVVE9fTElCTkFNRV9QS0dTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIGF1dG9fbGlibmFtZShwYWNrYWdlcywgcGtnKQorfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKK0RFQklBTl9OQU1FUyA9ICIxIgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGVwbG95LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGVwbG95LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmNWU0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcwpAQCAtMCwwICsxLDEwIEBACitERVBMT1lESVIgPSAiJHtXT1JLRElSfS9kZXBsb3ktJHtQTn0iCitTU1RBVEVUQVNLUyArPSAiZG9fZGVwbG95IgorZG9fZGVwbG95W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7REVQTE9ZRElSfSIKK2RvX2RlcGxveVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lNQUdFfSIKKworcHl0aG9uIGRvX2RlcGxveV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX2RlcGxveV9zZXRzY2VuZQorZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDUxNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2RldnNoZWxsLmJiY2xhc3MKQEAgLTAsMCArMSwxNTYgQEAKK2luaGVyaXQgdGVybWluYWwKKworREVWU0hFTEwgPSAiJHtTSEVMTH0iCisKK3B5dGhvbiBkb19kZXZzaGVsbCAoKSB7CisgICAgaWYgZC5nZXRWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJtYW51YWxmYWtlcm9vdCIpOgorICAgICAgIGQucHJlcGVuZFZhcigiREVWU0hFTEwiLCAicHNldWRvICIpCisgICAgICAgZmFrZWVudiA9IGQuZ2V0VmFyKCJGQUtFUk9PVEVOViIsIFRydWUpLnNwbGl0KCkKKyAgICAgICBmb3IgZiBpbiBmYWtlZW52OgorICAgICAgICAgICAgayA9IGYuc3BsaXQoIj0iKQorICAgICAgICAgICAgZC5zZXRWYXIoa1swXSwga1sxXSkgICAgICAgICAgIAorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIk9FX1RFUk1JTkFMX0VYUE9SVFMiLCAiICIgKyBrWzBdKQorICAgICAgIGQuZGVsVmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKQorCisgICAgb2VfdGVybWluYWwoZC5nZXRWYXIoJ0RFVlNIRUxMJywgVHJ1ZSksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFNoZWxsJywgZCkKK30KKworYWRkdGFzayBkZXZzaGVsbCBhZnRlciBkb19wYXRjaAorCisjIFRoZSBkaXJlY3RvcnkgdGhhdCB0aGUgdGVybWluYWwgc3RhcnRzIGluCitERVZTSEVMTF9TVEFSVERJUiA/PSAiJHtTfSIKK2RvX2RldnNoZWxsW2RpcnNdID0gIiR7REVWU0hFTExfU1RBUlRESVJ9IgorZG9fZGV2c2hlbGxbbm9zdGFtcF0gPSAiMSIKKworIyBkZXZzaGVsbCBhbmQgZmFrZXJvb3QvcHNldWRvIG5lZWQgY2FyZWZ1bCBoYW5kbGluZyBzaW5jZSBvbmx5IHRoZSBmaW5hbAorIyBjb21tYW5kIHNob3VsZCBydW4gdW5kZXIgZmFrZXJvb3QgZW11bGF0aW9uLCBhbnkgWCBjb25uZWN0aW9uIHNob3VsZAorIyBiZSBkb25lIGFzIHRoZSBub3JtYWwgdXNlci4gV2UgdGhlcmZvcmUgY2FyZWZ1bGx5IGNvbnN0cnVjdCB0aGUgZW52aW9ubWVudAorIyBtYW51YWxseQorcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoImRvX2RldnNoZWxsIiwgImZha2Vyb290Iik6CisgICAgICAgIyBXZSBuZWVkIHRvIHNpZ25hbCBvdXIgY29kZSB0aGF0IHdlIHdhbnQgZmFrZXJvb3QgaG93ZXZlciB3ZQorICAgICAgICMgY2FuJ3QgbWFuaXB1bGF0ZSB0aGUgZW52aXJvbm1lbnQgYW5kIHZhcmlhYmxlcyBoZXJlIHlldCAoc2VlIFlPQ1RPICM0Nzk1KQorICAgICAgIGQuc2V0VmFyRmxhZygiZG9fZGV2c2hlbGwiLCAibWFudWFsZmFrZXJvb3QiLCAiMSIpCisgICAgICAgZC5kZWxWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJmYWtlcm9vdCIpCit9IAorCitkZWYgZGV2cHlzaGVsbChkKToKKworICAgIGltcG9ydCBjb2RlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCBzaWduYWwKKyAgICBpbXBvcnQgdGVybWlvcworCisgICAgbSwgcyA9IG9zLm9wZW5wdHkoKQorICAgIHNuYW1lID0gb3MudHR5bmFtZShzKQorCisgICAgZGVmIG5vZWNob2ljYW5vbihmZCk6CisgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKQorICAgICAgICBvbGRbM10gPSBvbGRbM10gJn4gdGVybWlvcy5FQ0hPICZ+IHRlcm1pb3MuSUNBTk9OCisgICAgICAgICMgJn4gdGVybWlvcy5JU0lHCisgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorICAgIAorICAgICMgTm8gZWNobyBvciBidWZmZXJpbmcgb3ZlciB0aGUgcHR5CisgICAgbm9lY2hvaWNhbm9uKHMpCisKKyAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBpZiBwaWQ6CisgICAgICAgIG9zLmNsb3NlKG0pCisgICAgICAgIG9lX3Rlcm1pbmFsKCJvZXB5ZGV2c2hlbGwtaW50ZXJuYWwucHkgJXMgJWQiICUgKHNuYW1lLCBwaWQpLCAnT3BlbkVtYmVkZGVkIERldmVsb3BlciBQeVNoZWxsJywgZCkKKyAgICAgICAgb3MuX2V4aXQoMCkKKyAgICBlbHNlOgorICAgICAgICBvcy5jbG9zZShzKQorCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICBvcy5kdXAyKG0sIHN5cy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZGVyci5maWxlbm8oKSkKKworICAgICAgICBzeXMuc3Rkb3V0ID0gb3MuZmRvcGVuKHN5cy5zdGRvdXQuZmlsZW5vKCksICd3JywgMCkKKyAgICAgICAgc3lzLnN0ZGluID0gb3MuZmRvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgJ3InLCAwKQorCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZG91dCkKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3RkZXJyKQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRpbikKKworICAgICAgICBfY29udGV4dCA9IHsKKyAgICAgICAgICAgICJvcyI6IG9zLAorICAgICAgICAgICAgImJiIjogYmIsCisgICAgICAgICAgICAidGltZSI6IHRpbWUsCisgICAgICAgICAgICAiZCI6IGQsCisgICAgICAgIH0KKworICAgICAgICBwczEgPSAicHlkZXZzaGVsbD4gIgorICAgICAgICBwczIgPSAiLi4uICIKKyAgICAgICAgYnVmID0gW10KKyAgICAgICAgbW9yZSA9IEZhbHNlCisKKyAgICAgICAgaSA9IGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlcihsb2NhbHM9X2NvbnRleHQpCisgICAgICAgIHByaW50KCJPRSBQeVNoZWxsIChQTiA9ICVzKVxuIiAlIGQuZ2V0VmFyKCJQTiIsIFRydWUpKQorCisgICAgICAgIGRlZiBwcm9tcHQobW9yZSk6CisgICAgICAgICAgICBpZiBtb3JlOgorICAgICAgICAgICAgICAgIHByb21wdCA9IHBzMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9tcHQgPSBwczEKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHJvbXB0KQorCisgICAgICAgICMgUmVzdG9yZSBDdHJsK0Mgc2luY2UgYml0YmFrZSBtYXNrcyB0aGlzCisgICAgICAgIGRlZiBzaWduYWxfaGFuZGxlcihzaWduYWwsIGZyYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsX2hhbmRsZXIpCisKKyAgICAgICAgY2hpbGQgPSBOb25lCisKKyAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAociwgXywgXykgPSBzZWxlY3Quc2VsZWN0KFtzeXMuc3RkaW5dLCBbXSwgW10sIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGludChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSAiXG4iLmpvaW4oYnVmKQorICAgICAgICAgICAgICAgICAgICBtb3JlID0gaS5ydW5zb3VyY2Uoc291cmNlLCAiPHB5c2hlbGw+IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vcmU6CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBbXQorICAgICAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBpLndyaXRlKCJcbktleWJvYXJkSW50ZXJydXB0XG4iKQorICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgbW9yZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcHJvbXB0KG1vcmUpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgICAgICAjIEVhc2llc3Qgd2F5IHRvIGVuc3VyZSBldmVyeXRoaW5nIGV4aXRzCisgICAgICAgICAgICAgICAgb3Mua2lsbChjaGlsZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICAgICAgYnJlYWsKKworcHl0aG9uIGRvX2RldnB5c2hlbGwoKSB7CisgICAgaW1wb3J0IHNpZ25hbAorCisgICAgdHJ5OgorICAgICAgICBkZXZweXNoZWxsKGQpCisgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICMgU3RvcCB0aGUgU0lHVEVSTSBhYm92ZSBjYXVzaW5nIGFuIGVycm9yIGV4aXQgY29kZSAgICAKKyAgICAgICAgcmV0dXJuCisgICAgZmluYWxseToKKyAgICAgICAgcmV0dXJuCit9CithZGR0YXNrIGRldnB5c2hlbGwgYWZ0ZXIgZG9fcGF0Y2gKKworZG9fZGV2cHlzaGVsbFtub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3Ryb19mZWF0dXJlc19jaGVjay5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3Ryb19mZWF0dXJlc19jaGVjay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOTFkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBbGxvdyBjaGVja2luZyBvZiByZXF1aXJlZCBhbmQgY29uZmxpY3RpbmcgRElTVFJPX0ZFQVRVUkVTCisjCisjIEFOWV9PRl9ESVNUUk9fRkVBVFVSRVM6ICAgZW5zdXJlIGF0IGxlYXN0IG9uZSBpdGVtIG9uIHRoaXMgbGlzdCBpcyBpbmNsdWRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERJU1RST19GRUFUVVJFUy4KKyMgUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTOiBlbnN1cmUgZXZlcnkgaXRlbSBvbiB0aGlzIGxpc3QgaXMgaW5jbHVkZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBESVNUUk9fRkVBVFVSRVMuCisjIENPTkZMSUNUX0RJU1RST19GRUFUVVJFUzogZW5zdXJlIG5vIGl0ZW0gaW4gdGhpcyBsaXN0IGlzIGluY2x1ZGVkIGluCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgRElTVFJPX0ZFQVRVUkVTLgorIworIyBDb3B5cmlnaHQgMjAxMyAoQykgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK3B5dGhvbiAoKSB7CisgICAgIyBBc3N1bWUgYXQgbGVhc3Qgb25lIHZhciBpcyBzZXQuCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gKGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgYW55X29mX2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdBTllfT0ZfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzID0gYW55X29mX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGlmIHNldC5pc2Rpc2pvaW50KHNldChhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzKSxzZXQoZGlzdHJvX2ZlYXR1cmVzKSk6CisgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgib25lIG9mICclcycgbmVlZHMgdG8gYmUgaW4gRElTVFJPX0ZFQVRVUkVTIiAlIGFueV9vZl9kaXN0cm9fZmVhdHVyZXMpCisKKyAgICByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiByZXF1aXJlZF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcyA9IHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJtaXNzaW5nIHJlcXVpcmVkIGRpc3RybyBmZWF0dXJlICclcycgKG5vdCBpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCisKKyAgICBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXMgPSBkLmdldFZhcignQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkKKyAgICBpZiBjb25mbGljdF9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcyA9IGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcy5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGYgaW4gZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJjb25mbGljdGluZyBkaXN0cm8gZmVhdHVyZSAnJXMnIChpbiBESVNUUk9fRkVBVFVSRVMpIiAlIGYpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3Ryb2RhdGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTY4ZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Rpc3Ryb2RhdGEuYmJjbGFzcwpAQCAtMCwwICsxLDQ3NCBAQAoraW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL21haW50YWluZXJzLmluYworCithZGRoYW5kbGVyIGRpc3Ryb19ldmVudGhhbmRsZXIKK2Rpc3Ryb19ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCitweXRob24gZGlzdHJvX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRjCisgICAgaW1wb3J0IGNzdgorICAgIGxvZ2ZpbGUgPSBkYy5jcmVhdGVfbG9nX2ZpbGUoZS5kYXRhLCAiZGlzdHJvZGF0YS5jc3YiKQorCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgd3JpdGVyLndyaXRlcm93KFsnUGFja2FnZScsICdEZXNjcmlwdGlvbicsICdPd25lcicsICdMaWNlbnNlJywgCisgICAgICAgICAgICAnVmVyTWF0Y2gnLCAnVmVyc2lvbicsICdVcHN0cmVhbScsICdSZWFzb24nLCAnUmVjaXBlIFN0YXR1cycsCisgICAgICAgICAgICAnRGlzdHJvIDEnLCAnRGlzdHJvIDInLCAnRGlzdHJvIDMnXSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb2RhdGFfbnAKK2RvX2Rpc3Ryb2RhdGFfbnBbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhX25wKCkgeworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGlzdF9jaGVjaworICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZSBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zcyIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItY3Jvc3NzZGsiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3Nzc2RrIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnJlcGxhY2UoIm5hdGl2ZXNkay0iLCAiIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZVNESyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZCArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICAgICAgYmIubm90ZSgiaW5pdGlhbCBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgcGN1cnZlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGRlc2MgPSBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpCisgICAgICAgIGlmIHBkZXNjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBkZXNjID0gcGRlc2MucmVwbGFjZSgnLCcsJycpCisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCdcbicsJycpCisKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwbGljZW5zZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKS5yZXBsYWNlKCcsJywnXycpCisKKyAgICAgICAgcnN0YXR1cyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9DT0xPUicsIFRydWUpCisgICAgICAgIGlmIHJzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcnN0YXR1cyA9IHJzdGF0dXMucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgcHVwdmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBpZiBwY3VydmVyID09IHB1cHZlcjoKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2ZXJtYXRjaD0iMCIKKyAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBpZiBub3VwZGF0ZV9yZWFzb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMSIKKyAgICAgICAgICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBub3VwZGF0ZV9yZWFzb24ucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICAgICAgcmxyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9EQVRFJywgVHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBiYi5ub3RlKCJESVNUUk86ICVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzLCVzXG4iICUgXAorICAgICAgICAgICAgICAgICAgKHBuYW1lLCBwZGVzYywgbWFpbnRhaW5lciwgcGxpY2Vuc2UsIHZlcm1hdGNoLCBwY3VydmVyLCBwdXB2ZXIsIG5vdXBkYXRlX3JlYXNvbiwgcnN0YXR1cykpCisgICAgICAgIGxpbmUgPSBwbgorICAgICAgICBmb3IgaSBpbiByZXN1bHQ6CisgICAgICAgICAgICBsaW5lID0gbGluZSArICIsIiArIGkKKyAgICAgICAgYmIubm90ZSgiJXNcbiIgJSBsaW5lKQorfQorCithZGR0YXNrIGRpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9kYXRhKCkgeworICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJkaXN0cm9kYXRhLmNzdiIpCisKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkaXN0X2NoZWNrCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgZGlzdHJvX2NoZWNrX2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICJkaXN0cm9fY2hlY2siKQorICAgICAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgZGlzdF9jaGVjay51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgICAgICBiYi5ub3RlKCJQYWNrYWdlIE5hbWU6ICVzIiAlIHBuKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1uYXRpdmUiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmUgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4ucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zc3NkayIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3NzZGsiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgICAgICBiYi5ub3RlKCJpbml0aWFsIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gbG9jYWxkYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwY3VydmVyID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGRlc2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCcsJywnJykKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJ1xuJywnJykKKworICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHBsaWNlbnNlID0gbG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpLnJlcGxhY2UoJywnLCdfJykKKworICAgICAgICByc3RhdHVzID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX0NPTE9SJywgVHJ1ZSkKKyAgICAgICAgaWYgcnN0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByc3RhdHVzID0gcnN0YXR1cy5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBwdXB2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIHBjdXJ2ZXIgPT0gcHVwdmVyOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIwIgorCisgICAgICAgIG5vdXBkYXRlX3JlYXNvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9OT19VUERBVEVfUkVBU09OJywgVHJ1ZSkKKyAgICAgICAgaWYgbm91cGRhdGVfcmVhc29uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm91cGRhdGU9IjEiCisgICAgICAgICAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbm91cGRhdGVfcmVhc29uLnJlcGxhY2UoJywnLCcnKQorCisgICAgICAgIG1haW50YWluZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfTUFJTlRBSU5FUicsIFRydWUpCisgICAgICAgIHJscmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fREFURScsIFRydWUpCisgICAgICAgICMgZG8gdGhlIGNvbXBhcmlzb24KKyAgICAgICAgcmVzdWx0ID0gZGlzdF9jaGVjay5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGxvY2FsZGF0YSkKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICByb3cgPSBbcG5hbWUsIHBkZXNjLCBtYWludGFpbmVyLCBwbGljZW5zZSwgdmVybWF0Y2gsIHBjdXJ2ZXIsIHB1cHZlciwgbm91cGRhdGVfcmVhc29uLCByc3RhdHVzXQorICAgICAgICAgICAgcm93LmV4dGVuZChyZXN1bHQpCisKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhyb3cpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworYWRkdGFzayBkaXN0cm9kYXRhYWxsIGFmdGVyIGRvX2Rpc3Ryb2RhdGEKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjcmRlcHRhc2tdID0gImRvX2Rpc3Ryb2RhdGFhbGwgZG9fZGlzdHJvZGF0YSIKK2RvX2Rpc3Ryb2RhdGFhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2Rpc3Ryb2RhdGFhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2Rpc3Ryb2RhdGFhbGwoKSB7CisgICAgICAgIDoKK30KKworYWRkaGFuZGxlciBjaGVja3BrZ19ldmVudGhhbmRsZXIKK2NoZWNrcGtnX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK3B5dGhvbiBjaGVja3BrZ19ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGNzdgorCisgICAgZGVmIHBhcnNlX2Nzdl9maWxlKGZpbGVuYW1lKToKKyAgICAgICAgcGFja2FnZV9kaWN0ID0ge30KKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBmb3Igcm93IGluIHJlYWRlcjoKKyAgICAgICAgICAgICAgICBwbiA9IHJvd1swXQorCisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLmxpbmVfbnVtID09IDE6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IHJvdworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IHBuIGluIHBhY2thZ2VfZGljdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfZGljdFtwbl0gPSByb3cKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXIpCisgICAgICAgICAgICBmb3IgcG4gaW4gcGFja2FnZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3cocGFja2FnZV9kaWN0W3BuXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGRlbCBwYWNrYWdlX2RpY3QKKworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIkJ1aWxkU3RhcnRlZCI6CisgICAgICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICAgICAgbG9nZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICBoZWFkZXJzID0gWydQYWNrYWdlJywgJ1ZlcnNpb24nLCAnVXB2ZXInLCAnTGljZW5zZScsICdTZWN0aW9uJywKKyAgICAgICAgICAgICAgICAnSG9tZScsICdSZWxlYXNlJywgJ0RlcGVuZHMnLCAnQnVnVHJhY2tlcicsICdQRScsICdEZXNjcmlwdGlvbicsCisgICAgICAgICAgICAgICAgJ1N0YXR1cycsICdUcmFja2luZycsICdVUkknLCAnTUFJTlRBSU5FUicsICdOb1VwUmVhc29uJ10KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhoZWFkZXJzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJCdWlsZENvbXBsZXRlZCI6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBmaWxlbmFtZSA9ICJ0bXAvbG9nL2NoZWNrcGtnLmNzdiIKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIlZmlsZW5hbWUpCisgICAgICAgICAgICBwYXJzZV9jc3ZfZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2twa2cKK2RvX2NoZWNrcGtnW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2twa2coKSB7CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBpbXBvcnQgY3N2CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIGZyb20gYmIudXRpbHMgaW1wb3J0IHZlcmNtcF9zdHJpbmcKKyAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoRXJyb3IsIE5vTWV0aG9kRXJyb3IsIGRlY29kZXVybAorCisgICAgICAgICIiImZpcnN0IGNoZWNrIHdoZXRoZXIgYSB1cmkgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc3JjX3VyaSA9IGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY191cmk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHVyaV90eXBlLCBfLCBfLCBfLCBfLCBfID0gZGVjb2RldXJsKHNyY191cmkpCisKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJjaGVja3BrZy5jc3YiKQorCisgICAgICAgICIiImdlbmVyYXRlIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSAuYmIgZmlsZSIiIgorICAgICAgICBwbmFtZSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ0JCQ0xBU1NFWFRFTkQnLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuYW1lLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG5hbWUuc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgICAgIGJiLm5vdGUoImluaXRpYWwgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGdycCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwdmVyc2lvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICAgICAgcGxpY2Vuc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICAgICAgcHNlY3Rpb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGhvbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpCisgICAgICAgIHByZWxlYXNlID0gbG9jYWxkYXRhLmdldFZhcignUFInLCBUcnVlKQorICAgICAgICBwZGVwZW5kcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKQorICAgICAgICBwYnVndHJhY2tlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ0JVR1RSQUNLRVInLCBUcnVlKQorICAgICAgICBwcGUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQRScsIFRydWUpCisgICAgICAgIHBzcmN1cmkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKworICAgICAgICAiIiIgR2V0IHVwc3RyZWFtIHZlcnNpb24gdmVyc2lvbiAiIiIKKyAgICAgICAgcHVwdmVyID0gIiIKKyAgICAgICAgcHN0YXR1cyA9ICIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXYgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24obG9jYWxkYXRhKQorCisgICAgICAgICAgICBwdXB2ZXIgPSB1dlsndmVyc2lvbiddCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGlmIGUgaXMgRmV0Y2hFcnJvcjoKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyckFjY2VzcyIKKyAgICAgICAgICAgIGVsaWYgZSBpcyBOb01ldGhvZEVycm9yOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyVW5zdXBwb3J0ZWRQcm90byIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbmtub3duIgorCisgICAgICAgICIiIlNldCB1cHN0cmVhbSB2ZXJzaW9uIHN0YXR1cyIiIgorICAgICAgICBpZiBub3QgcHVwdmVyOgorICAgICAgICAgICAgcHVwdmVyID0gIk4vQSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2ZXJzaW9uLCB1cmlfdHlwZSkKKyAgICAgICAgICAgIHVwdiwgXywgXyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdXB2ZXIsIHVyaV90eXBlKQorCisgICAgICAgICAgICBjbXAgPSB2ZXJjbXBfc3RyaW5nKHB2LCB1cHYpCisgICAgICAgICAgICBpZiBjbXAgPT0gLTE6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJVUERBVEUiCisgICAgICAgICAgICBlbGlmIGNtcCA9PSAwOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiTUFUQ0giCisKKyAgICAgICAgcHNyY3VyaSA9IHBzcmN1cmkuc3BsaXQoKVswXQorICAgICAgICBwZGVwZW5kcyA9ICIiLmpvaW4ocGRlcGVuZHMuc3BsaXQoIlx0IikpCisgICAgICAgIHBkZXNjID0gIiIuam9pbihwZGVzYy5zcGxpdCgiXHQiKSkKKyAgICAgICAgbm9fdXBncl9yZWFzb24gPSBkLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtwbmFtZSwgcHZlcnNpb24sIHB1cHZlciwgcGxpY2Vuc2UsIHBzZWN0aW9uLCBwaG9tZSwgCisgICAgICAgICAgICAgICAgcHJlbGVhc2UsIHBkZXBlbmRzLCBwYnVndHJhY2tlciwgcHBlLCBwZGVzYywgcHN0YXR1cywgcHVwdmVyLAorICAgICAgICAgICAgICAgIHBzcmN1cmksIG1haW50YWluZXIsIG5vX3VwZ3JfcmVhc29uXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCithZGR0YXNrIGNoZWNrcGtnYWxsIGFmdGVyIGRvX2NoZWNrcGtnCitkb19jaGVja3BrZ2FsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2twa2dhbGwgZG9fY2hlY2twa2ciCitkb19jaGVja3BrZ2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2twa2dhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrcGtnYWxsKCkgeworICAgICAgICA6Cit9CisKK2FkZGhhbmRsZXIgZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcgorZGlzdHJvX2NoZWNrX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK3B5dGhvbiBkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyKCkgeworICAgICIiImluaXRpYWxpemUgbG9nIGZpbGVzLiIiIgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICByZXN1bHRfZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJkaXN0cm9jaGVjay5jc3YiKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGRpc3Ryb19jaGVjaworZG9fZGlzdHJvX2NoZWNrW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fZGlzdHJvX2NoZWNrKCkgeworICAgICIiImNoZWNrcyBpZiB0aGUgcGFja2FnZSBpcyBwcmVzZW50IGluIG90aGVyIHB1YmxpYyBMaW51eCBkaXN0cm9zIiIiCisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJyxkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICByZXN1bHRfZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiZGlzdHJvY2hlY2suY3N2IikKKyAgICBkYXRldGltZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICBkYy51cGRhdGVfZGlzdHJvX2RhdGEoZGlzdHJvX2NoZWNrX2RpciwgZGF0ZXRpbWUpCisKKyAgICAjIGRvIHRoZSBjb21wYXJpc29uCisgICAgcmVzdWx0ID0gZGMuY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyLCBkKQorCisgICAgIyBzYXZlIHRoZSByZXN1bHRzCisgICAgZGMuc2F2ZV9kaXN0cm9fY2hlY2tfcmVzdWx0KHJlc3VsdCwgZGF0ZXRpbWUsIHJlc3VsdF9maWxlLCBkKQorfQorCithZGR0YXNrIGRpc3Ryb19jaGVja2FsbCBhZnRlciBkb19kaXN0cm9fY2hlY2sKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNyZGVwdGFza10gPSAiZG9fZGlzdHJvX2NoZWNrYWxsIGRvX2Rpc3Ryb19jaGVjayIKK2RvX2Rpc3Ryb19jaGVja2FsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGlzdHJvX2NoZWNrYWxsW25vc3RhbXBdID0gIjEiCitkb19kaXN0cm9fY2hlY2thbGwoKSB7CisgICAgICAgIDoKK30KKyMKKyNDaGVjayBNaXNzaW5nIExpY2Vuc2UgVGV4dC4KKyNVc2UgdGhpcyB0YXNrIHRvIGdlbmVyYXRlIHRoZSBtaXNzaW5nIGxpY2Vuc2UgdGV4dCBkYXRhIGZvciBwa2ctcmVwb3J0IHN5c3RlbSwKKyN0aGVuIHdlIGNhbiBzZWFyY2ggdGhvc2UgcmVjaXBlcyB3aGljaCBsaWNlbnNlIHRleHQgaXNuJ3QgZXhzaXQgaW4gY29tbW9uLWxpY2Vuc2VzIGRpcmVjdG9yeQorIworYWRkaGFuZGxlciBjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyCitjaGVja2xpY2Vuc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorcHl0aG9uIGNoZWNrbGljZW5zZV9ldmVudGhhbmRsZXIoKSB7CisgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgaW1wb3J0IGNzdgorICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICBsb2dmaWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgIm1pc3NpbmdsaWNlbnNlLmNzdiIpCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgIHdpdGggb3Blbihsb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgIHdyaXRlci53cml0ZXJvdyhbJ1BhY2thZ2UnLCAnTGljZW5zZScsICdNaXNzaW5nTGljZW5zZSddKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZQorZG9fY2hlY2tsaWNlbnNlW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2tsaWNlbnNlKCkgeworICAgIGltcG9ydCBjc3YKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAibWlzc2luZ2xpY2Vuc2UuY3N2IikKKyAgICBnZW5lcmljX2RpcmVjdG9yeSA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgIGxpY2Vuc2VfdHlwZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgZm9yIGxpY2Vuc2VfdHlwZSBpbiAoKGxpY2Vuc2VfdHlwZXMucmVwbGFjZSgnKycsICcnKS5yZXBsYWNlKCd8JywgJyYnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnKCcsICcnKS5yZXBsYWNlKCcpJywgJycpLnJlcGxhY2UoJzsnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJywnLCAnJykucmVwbGFjZSgiICIsICIiKS5zcGxpdCgiJiIpKSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZ2VuZXJpY19kaXJlY3RvcnksIGxpY2Vuc2VfdHlwZSkpOgorICAgICAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbcG4sIGxpY2Vuc2VfdHlwZXMsIGxpY2Vuc2VfdHlwZV0pCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgIHJldHVybgorfQorCithZGR0YXNrIGNoZWNrbGljZW5zZWFsbCBhZnRlciBkb19jaGVja2xpY2Vuc2UKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNyZGVwdGFza10gPSAiZG9fY2hlY2tsaWNlbnNlYWxsIGRvX2NoZWNrbGljZW5zZSIKK2RvX2NoZWNrbGljZW5zZWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fY2hlY2tsaWNlbnNlYWxsW25vc3RhbXBdID0gIjEiCitkb19jaGVja2xpY2Vuc2VhbGwoKSB7CisgICAgICAgIDoKK30KKworCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMThlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgorCitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtY29tbW9uLWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtY29tbW9uLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjcyNzViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjQgQEAKK2luaGVyaXQgcHl0aG9uLWRpcgorCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitQQUNLQUdFUyA9ICIke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2MgJHtQTn0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vKiAke2xpYmRpcn0vJHtQWVRIT05fRElSfS8qIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIlwKKyAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIFwKKyIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAke2RhdGFkaXJ9L3BrZ2NvbmZpZyBcCisgICR7bGliZGlyfS9wa2djb25maWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmxhIFwKKyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcgXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLy5kZWJ1ZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyovKi8uZGVidWcgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1uYXRpdmUtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1uYXRpdmUtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWNiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZQorCitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlIiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtdG9vbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtdG9vbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDM0NTBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsNzcgQEAKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsc19kb19jb21waWxlKCkgeworICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkX2V4dCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGVjaG8gIkJlZ2lubmluZyAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgZWNobyAiU3RlcCAyIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgZWNobyAiU3RlcCAzIG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICAjIHN1cHBvcnQgZmlsZW5hbWVzIHdpdGggKnNwYWNlcyoKKyAgICAgICAgZmluZCAke0R9IC1uYW1lICIqLnB5IiAtcHJpbnQwIHwgd2hpbGUgcmVhZCAtZCAkJ1wwJyBpIDsgZG8gXAorICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtEfTo6ZyAkaQorICAgICAgICBkb25lCisKKyAgICAgICAgZWNobyAiU3RlcCA0IG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlN0ZXAgNCBvZiAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBlY2hvICJTdGVwIDUgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIAorICAgICAgICAjCisgICAgICAgICMgRklYTUU6IEJhbmRhaWQgYWdhaW5zdCB3cm9uZyBkYXRhZGlyIGNvbXB1dGF0aW9uCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtkYXRhZGlyfS9zaGFyZTsgdGhlbgorICAgICAgICAgICAgbXYgLWYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8KKyAgICAgICAgZmkKK30KKworI0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDY3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSw4NiBAQAoraW5oZXJpdCBkaXN0dXRpbHMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHUyA/PSAiLS1pbnN0YWxsLWRpcj0ke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorRElTVFVUSUxTX1NUQUdFX0FMTF9BUkdTID89ICItLXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke1NUQUdJTkdfREFUQURJUn0iCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID89ICItLXByZWZpeD0ke0R9LyR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtEfS8ke2RhdGFkaXJ9IgorCitkaXN0dXRpbHNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkICR7RElTVFVUSUxTX0JVSUxEX0FSR1N9IHx8IFwKKyAgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfYWxsKCkgeworICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgUFlUSE9OUEFUSD0ke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAtLWluc3RhbGwtbGliPSR7RH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gJHtESVNUVVRJTFNfSU5TVEFMTF9BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgorCisgICAgICAgICMgc3VwcG9ydCBmaWxlbmFtZXMgd2l0aCAqc3BhY2VzKgorICAgICAgICAjIG9ubHkgbW9kaWZ5IGZpbGUgaWYgaXQgY29udGFpbnMgcGF0aCAgYW5kIHJlY29tcGlsZSBpdAorICAgICAgICBmaW5kICR7RH0gLW5hbWUgIioucHkiIC1leGVjIGdyZXAgLXEgJHtEfSB7fSBcOyAtZXhlYyBzZWQgLWkgLWUgczoke0R9OjpnIHt9IFw7IC1leGVjICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiAtbWNvbXBpbGVhbGwge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIGlmIFsgJHtQTn0gIT0gIiR7QlBOfS1uYXRpdmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uOiR7YmluZGlyfS9lbnZcIHB5dGhvbjpnICRpCisJCWZpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBpZiBbICR7UE59ICE9ICIke0JQTn0tbmF0aXZlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbjoke2JpbmRpcn0vZW52XCBweXRob246ZyAkaQorCQlmaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9lYXN5LWluc3RhbGwucHRoCisgICAgICAgIHJtIC1mICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zaXRlLnB5KgorICAgICAgICAKKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBCYW5kYWlkIGFnYWluc3Qgd3JvbmcgZGF0YWRpciBjb21wdXRhdGlvbgorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7ZGF0YWRpcn0vc2hhcmU7IHRoZW4KKyAgICAgICAgICAgIG12IC1mICR7RH0ke2RhdGFkaXJ9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vCisgICAgICAgICAgICBybWRpciAke0R9JHtkYXRhZGlyfS9zaGFyZQorICAgICAgICBmaQorCisJIyBGaXggYmFja3BvcnQgbW9kdWxlcworCWlmIHRlc3QgLWUgJHtTVEFHSU5HX0xJQkRJUn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL2JhY2twb3J0cy9fX2luaXRfXy5weSAmJiB0ZXN0IC1lICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHk7IHRoZW4KKwkgICBybSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vYmFja3BvcnRzL19faW5pdF9fLnB5OworCSAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHljOworCWZpCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKK2V4cG9ydCBMRFNIQVJFRD0iJHtDQ0xEfSAtc2hhcmVkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2FhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitERVBFTkRTICArPSAiJHtAWyIke1BZVEhPTl9QTn0tbmF0aXZlICR7UFlUSE9OX1BOfSIsICIiXVsoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJycpXX0iCitSREVQRU5EU18ke1BOfSArPSAiJHtAWycnLCAnJHtQWVRIT05fUE59LWNvcmUnXVsnJHtDTEFTU09WRVJSSURFfScgPT0gJ2NsYXNzLXRhcmdldCddfSIKKworUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKK1BZVEhPTl9BQkkgPSAibSIKKworaW5oZXJpdCBkaXN0dXRpbHMtY29tbW9uLWJhc2UgcHl0aG9uM25hdGl2ZQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1uYXRpdmUtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtbmF0aXZlLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE3MTAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMtbmF0aXZlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjQiCitQWVRIT05fQUJJID0gIm0iCisKK2luaGVyaXQgZGlzdHV0aWxzLW5hdGl2ZS1iYXNlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTA5ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlsczMuYmJjbGFzcwpAQCAtMCwwICsxLDk2IEBACitpbmhlcml0IGRpc3R1dGlsczMtYmFzZQorCitESVNUVVRJTFNfQlVJTERfQVJHUyA/PSAiIgorRElTVFVUSUxTX0JVSUxEX0VYVF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsczNfZG9fY29tcGlsZSgpIHsKKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IFwKKyAgICAgICAgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX3N0YWdlX2hlYWRlcnMoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyAke0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGxfaGVhZGVycyBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19zdGFnZV9hbGwoKSB7CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgJHtESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgKHN0YWdlKSBleGVjdXRpb24gZmFpbGVkLiIKK30KKworZGlzdHV0aWxzM19kb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCisgICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQorICAgICAgICBmaQorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgUFlUSE9OUEFUSD0ke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7U1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgIyBzdXBwb3J0IGZpbGVuYW1lcyB3aXRoICpzcGFjZXMqCisgICAgICAgIGZpbmQgJHtEfSAtbmFtZSAiKi5weSIgLWV4ZWMgZ3JlcCAtcSAke0R9IHt9IFw7IC1leGVjIHNlZCAtaSAtZSBzOiR7RH06Omcge30gXDsKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2JpbmRpcn0gOyB0aGVuCQorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7YmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfToke2JpbmRpcn0vZW52XCAke1BZVEhPTl9QTn06ZyAkaQorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7c2JpbmRpcn07IHRoZW4KKyAgICAgICAgICAgIGZvciBpIGluICR7RH0ke3NiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi0ke1BZVEhPTl9QTn0vJHtQWVRIT05fUE59OiR7YmluZGlyfS9lbnZcICR7UFlUSE9OX1BOfTpnICRpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmFuZGFpZCBhZ2FpbnN0IHdyb25nIGRhdGFkaXIgY29tcHV0YXRpb24KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2RhdGFkaXJ9L3NoYXJlOyB0aGVuCisgICAgICAgICAgICBtdiAtZiAke0R9JHtkYXRhZGlyfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LworICAgICAgICAgICAgcm1kaXIgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKKyAgICAgICAgZmkKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYTU4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZXh0ZXJuYWxzcmMuYmJjbGFzcwpAQCAtMCwwICsxLDkyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBMaW51eCBGb3VuZGF0aW9uCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUKKyMgU29tZSBjb2RlIGFuZCBpbmZsdWVuY2UgdGFrZW4gZnJvbSBzcmN0cmVlLmJiY2xhc3M6CisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBMYXJzb24gPGNsYXJzb25Aa2VyZ290aC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisjCisjIGV4dGVybmFsc3JjLmJiY2xhc3MgZW5hYmxlcyB1c2Ugb2YgYW4gZXhpc3Rpbmcgc291cmNlIHRyZWUsIHVzdWFsbHkgZXh0ZXJuYWwgdG8gCisjIHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgYSBwaWVjZSBvZiBzb2Z0d2FyZSByYXRoZXIgdGhhbiB0aGUgdXN1YWwgZmV0Y2gvdW5wYWNrL3BhdGNoCisjIHByb2Nlc3MuCisjCisjIFRvIHVzZSwgYWRkIGV4dGVybmFsc3JjIHRvIHRoZSBnbG9iYWwgaW5oZXJpdCBhbmQgc2V0IEVYVEVSTkFMU1JDIHRvIHBvaW50IGF0IHRoZQorIyBkaXJlY3RvcnkgeW91IHdhbnQgdG8gdXNlIGNvbnRhaW5pbmcgdGhlIHNvdXJjZXMgZS5nLiBmcm9tIGxvY2FsLmNvbmYgZm9yIGEgcmVjaXBlCisjIGNhbGxlZCAibXlyZWNpcGUiIHlvdSB3b3VsZCBkbzoKKyMKKyMgSU5IRVJJVCArPSAiZXh0ZXJuYWxzcmMiCisjIEVYVEVSTkFMU1JDX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworIyBJbiBvcmRlciB0byBtYWtlIHRoaXMgY2xhc3Mgd29yayBmb3IgYm90aCB0YXJnZXQgYW5kIG5hdGl2ZSB2ZXJzaW9ucyAob3Igd2l0aAorIyBtdWx0aWxpYnMvY3Jvc3Mgb3Igb3RoZXIgQkJDTEFTU0VYVEVORCB2YXJpYW50cyksIEIgaXMgc2V0IHRvIHBvaW50IHRvIGEgc2VwYXJhdGUKKyMgZGlyZWN0b3J5IHVuZGVyIHRoZSB3b3JrIGRpcmVjdG9yeSAoc3BsaXQgc291cmNlIGFuZCBidWlsZCBkaXJlY3RvcmllcykuIFRoaXMgaXMKKyMgdGhlIGRlZmF1bHQsIGJ1dCB0aGUgYnVpbGQgZGlyZWN0b3J5IGNhbiBiZSBzZXQgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaWYKKyMgY2lyY3Vtc3RhbmNlcyBkaWN0YXRlIGJ5IHNldHRpbmcgRVhURVJOQUxTUkNfQlVJTEQgdG8gdGhlIHNhbWUgdmFsdWUsIGUuZy46CisjCisjIEVYVEVSTkFMU1JDX0JVSUxEX3BuLW15cmVjaXBlID0gIi9wYXRoL3RvL215L3NvdXJjZS90cmVlIgorIworCitTUkNUUkVFQ09WRVJFRFRBU0tTID89ICJkb19wYXRjaCBkb191bnBhY2sgZG9fZmV0Y2giCisKK3B5dGhvbiAoKSB7CisgICAgZXh0ZXJuYWxzcmMgPSBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKQorICAgIGlmIGV4dGVybmFsc3JjOgorICAgICAgICBkLnNldFZhcignUycsIGV4dGVybmFsc3JjKQorICAgICAgICBleHRlcm5hbHNyY2J1aWxkID0gZC5nZXRWYXIoJ0VYVEVSTkFMU1JDX0JVSUxEJywgVHJ1ZSkKKyAgICAgICAgaWYgZXh0ZXJuYWxzcmNidWlsZDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgZXh0ZXJuYWxzcmNidWlsZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdCJywgJyR7V09SS0RJUn0vJHtCUE59LSR7UFZ9LycpCisKKyAgICAgICAgbG9jYWxfc3JjdXJpID0gW10KKyAgICAgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCksIGQpCisgICAgICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgICAgIHVybF9kYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICAgICAgcGFybSA9IHVybF9kYXRhLnBhcm0KKyAgICAgICAgICAgIGlmICh1cmxfZGF0YS50eXBlID09ICdmaWxlJyBvcgorICAgICAgICAgICAgICAgICAgICAndHlwZScgaW4gcGFybSBhbmQgcGFybVsndHlwZSddID09ICdrbWV0YScpOgorICAgICAgICAgICAgICAgIGxvY2FsX3NyY3VyaS5hcHBlbmQodXJsKQorCisgICAgICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyAnLmpvaW4obG9jYWxfc3JjdXJpKSkKKworICAgICAgICBpZiAne1NSQ1BWfScgaW4gZC5nZXRWYXIoJ1BWJywgRmFsc2UpOgorICAgICAgICAgICAgIyBEdW1teSB2YWx1ZSBiZWNhdXNlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIGNhbid0IGJlIGNhbGxlZCB3aXRoIGJsYW5rIFNSQ19VUkkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTUkNQVicsICc5OTknKQorCisgICAgICAgIHRhc2tzID0gZmlsdGVyKGxhbWJkYSBrOiBkLmdldFZhckZsYWcoaywgInRhc2siKSwgZC5rZXlzKCkpCisKKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiB0YXNrLmVuZHN3aXRoKCJfc2V0c2NlbmUiKToKKyAgICAgICAgICAgICAgICAjIHNzdGF0ZSBpcyBuZXZlciBnb2luZyB0byB3b3JrIGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZXMsIGRpc2FibGUgaXQKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2luY2UgY29uZmlndXJlIHdpbGwgbGlrZWx5IHRvdWNoICR7U30sIGVuc3VyZSBvbmx5IHdlIGxvY2sgc28gb25lIHRhc2sgaGFzIGFjY2VzcyBhdCBhIHRpbWUKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgImxvY2tmaWxlcyIsICIgJHtTfS9zaW5nbGV0YXNrLmxvY2siKQorCisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3YW50IG91ciBzb3VyY2UgdG8gYmUgd2lwZWQgb3V0LCBldmVyIChrZXJuZWwuYmJjbGFzcyBkb2VzIHRoaXMgZm9yIGRvX2NsZWFuKQorICAgICAgICAgICAgY2xlYW5kaXJzID0gKGQuZ2V0VmFyRmxhZyh0YXNrLCAnY2xlYW5kaXJzJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBzZXR2YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgY2xlYW5kaXIgaW4gY2xlYW5kaXJzWzpdOgorICAgICAgICAgICAgICAgIGlmIGQuZXhwYW5kKGNsZWFuZGlyKSA9PSBleHRlcm5hbHNyYzoKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5kaXJzLnJlbW92ZShjbGVhbmRpcikKKyAgICAgICAgICAgICAgICAgICAgc2V0dmFsdWUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZXR2YWx1ZToKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcodGFzaywgJ2NsZWFuZGlycycsICcgJy5qb2luKGNsZWFuZGlycykpCisKKyAgICAgICAgZmV0Y2hfdGFza3MgPSBbJ2RvX2ZldGNoJywgJ2RvX3VucGFjayddCisgICAgICAgICMgSWYgd2UgZGVsdGFzayBkb19wYXRjaCwgdGhlcmUncyBubyBkZXBlbmRlbmN5IHRvIGVuc3VyZSBkb191bnBhY2sgZ2V0cyBydW4sIHNvIGFkZCBvbmUKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwcycsIFsnZG9fdW5wYWNrJ10pCisKKyAgICAgICAgZm9yIHRhc2sgaW4gZC5nZXRWYXIoIlNSQ1RSRUVDT1ZFUkVEVEFTS1MiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbG9jYWxfc3JjdXJpIGFuZCB0YXNrIGluIGZldGNoX3Rhc2tzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKHRhc2ssIGQpCisKKyAgICAgICAgZC5wcmVwZW5kVmFyRmxhZygnZG9fY29tcGlsZScsICdwcmVmdW5jcycsICJleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMgIikKKworICAgICAgICAjIEVuc3VyZSBjb21waWxhdGlvbiBoYXBwZW5zIGV2ZXJ5IHRpbWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19jb21waWxlJywgJ25vc3RhbXAnLCAnMScpCit9CisKK3B5dGhvbiBleHRlcm5hbHNyY19jb21waWxlX3ByZWZ1bmMoKSB7CisgICAgIyBNYWtlIGl0IG9idmlvdXMgdGhhdCB0aGlzIGlzIGhhcHBlbmluZywgc2luY2UgZm9yZ2V0dGluZyBhYm91dCBpdCBjb3VsZCBsZWFkIHRvIG11Y2ggY29uZnVzaW9uCisgICAgYmIud2FybignQ29tcGlsaW5nICVzIGZyb20gZXh0ZXJuYWwgc291cmNlICVzJyAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ0VYVEVSTkFMU1JDJywgVHJ1ZSkpKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2V4dHJhdXNlcnMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9leHRyYXVzZXJzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmNTdiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9leHRyYXVzZXJzLmJiY2xhc3MKQEAgLTAsMCArMSw2NSBAQAorIyBUaGlzIGJiY2xhc3MgaXMgbWFpbmx5IHVzZWQgZm9yIGltYWdlIGxldmVsIHVzZXIvZ3JvdXAgY29uZmlndXJhdGlvbi4KKyMgSW5oZXJpdCB0aGlzIGNsYXNzIGlmIHlvdSB3YW50IHRvIG1ha2UgRVhUUkFfVVNFUlNfUEFSQU1TIGVmZmVjdGl2ZS4KKworIyBCZWxvdyBpcyBhbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisjIElOSEVSSVQgKz0gImV4dHJhdXNlcnMiCisjIEVYVFJBX1VTRVJTX1BBUkFNUyA9ICJcCisjIHVzZXJhZGQgLXAgJycgdGVzdGVyOyBcCisjIGdyb3VwYWRkIGRldmVsb3BlcnM7IFwKKyMgdXNlcmRlbCBub2JvZHk7IFwKKyMgZ3JvdXBkZWwgLWcgdmlkZW87IFwKKyMgZ3JvdXBtb2QgLWcgMTAyMCBkZXZlbG9wZXJzOyBcCisjIHVzZXJtb2QgLXMgL2Jpbi9zaCB0ZXN0ZXI7IFwKKyMgIgorCisKK2luaGVyaXQgdXNlcmFkZF9iYXNlCisKK0lNQUdFX0lOU1RBTExfYXBwZW5kID0gIiAke0BbJycsICdiYXNlLXBhc3N3ZCBzaGFkb3cnXVtib29sKGQuZ2V0VmFyKCdFWFRSQV9VU0VSU19QQVJBTVMnLCBUcnVlKSldfSIKKworIyBJbWFnZSBsZXZlbCB1c2VyIC8gZ3JvdXAgc2V0dGluZ3MKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZCA9ICIgc2V0X3VzZXJfZ3JvdXA7IgorCisjIEltYWdlIGxldmVsIHVzZXIgLyBncm91cCBzZXR0aW5ncworc2V0X3VzZXJfZ3JvdXAgKCkgeworCXVzZXJfZ3JvdXBfc2V0dGluZ3M9IiR7RVhUUkFfVVNFUlNfUEFSQU1TfSIKKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vcHNldWRvIgorCXNldHRpbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMWAKKwlyZW1haW5pbmc9YGVjaG8gJHVzZXJfZ3JvdXBfc2V0dGluZ3MgfCBjdXQgLWQgJzsnIC1mMi1gCisJd2hpbGUgdGVzdCAieCRzZXR0aW5nIiAhPSAieCI7IGRvCisJCWNtZD1gZWNobyAkc2V0dGluZyB8IGN1dCAtZCAnICcgLWYxYAorCQlvcHRzPWBlY2hvICRzZXR0aW5nIHwgY3V0IC1kICcgJyAtZjItYAorCQkjIERpZmZlcmVudCBmcm9tIHVzZXJhZGQuYmJjbGFzcywgdGhlcmUncyBubyBmaWxlIGxvY2tpbmcgaXNzdWUgaGVyZSwgYXMKKwkJIyB0aGlzIHNldHRpbmcgaXMgYWN0dWFsbHkgYSBzZXJpYWwgcHJvY2Vzcy4gU28gd2Ugb25seSByZXRyeSBvbmNlLgorCQljYXNlICRjbWQgaW4KKwkJCXVzZXJhZGQpCisJCQkJcGVyZm9ybV91c2VyYWRkICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBhZGQpCisJCQkJcGVyZm9ybV9ncm91cGFkZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJkZWwpCisJCQkJcGVyZm9ybV91c2VyZGVsICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBkZWwpCisJCQkJcGVyZm9ybV9ncm91cGRlbCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCXVzZXJtb2QpCisJCQkJcGVyZm9ybV91c2VybW9kICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJZ3JvdXBtb2QpCisJCQkJcGVyZm9ybV9ncm91cG1vZCAiJHtJTUFHRV9ST09URlN9IiAiLVIgJHtJTUFHRV9ST09URlN9ICRvcHRzIiAxCisJCQkJOzsKKwkJCSopCisJCQkJYmJmYXRhbCAiSW52YWxpZCBjb21tYW5kIGluIEVYVFJBX1VTRVJTX1BBUkFNUzogJGNtZCIKKwkJCQk7OworCQllc2FjCisJCSMgQXZvaWQgaW5maW5pdGUgbG9vcCBpZiB0aGUgbGFzdCBwYXJhbWV0ZXIgZG9lc24ndCBlbmQgd2l0aCAnOycKKwkJaWYgWyAiJHNldHRpbmciID0gIiRyZW1haW5pbmciIF07IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCSMgaXRlcmF0ZSB0byB0aGUgbmV4dCBzZXR0aW5nCisJCXNldHRpbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYxYAorCQlyZW1haW5pbmc9YGVjaG8gJHJlbWFpbmluZyB8IGN1dCAtZCAnOycgLWYyLWAKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZm9udGNhY2hlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZm9udGNhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMjM4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDQ1IEBACisjCisjIFRoaXMgY2xhc3Mgd2lsbCBnZW5lcmF0ZSB0aGUgcHJvcGVyIHBvc3RpbnN0L3Bvc3RybSBzY3JpcHRsZXRzIGZvciBmb250CisjIHBhY2thZ2VzLgorIworCitERVBFTkRTICs9ICJxZW11LW5hdGl2ZSIKK2luaGVyaXQgcWVtdQorCitGT05UX1BBQ0tBR0VTID8/PSAiJHtQTn0iCitGT05UX0VYVFJBX1JERVBFTkRTID89ICJmb250Y29uZmlnLXV0aWxzIgorRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKK2ZvbnRjYWNoZV9jb21tb24oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdIDsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfZm9udF9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gYmluZGlyPSR7YmluZGlyfSBcCisJCWxpYmRpcj0ke2xpYmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0gZm9udGNvbmZpZ2NhY2hlZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9CitlbHNlCisJZmMtY2FjaGUKK2ZpCit9CisKK3B5dGhvbiAoKSB7CisgICAgZm9udF9wa2dzID0gZC5nZXRWYXIoJ0ZPTlRfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZGVwcyA9IGQuZ2V0VmFyKCJGT05UX0VYVFJBX1JERVBFTkRTIiwgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gZm9udF9wa2dzOgorICAgICAgICBpZiBkZXBzOiBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAnK2RlcHMpCit9CisKK3B5dGhvbiBhZGRfZm9udGNhY2hlX3Bvc3RpbnN0cygpIHsKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdGT05UX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGZvbnRzIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2ZvbnRjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignZm9udGNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitQQUNLQUdFRlVOQ1MgPSsgImFkZF9mb250Y2FjaGVfcG9zdGluc3RzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ZzLXV1aWQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9mcy11dWlkLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyNjEzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9mcy11dWlkLmJiY2xhc3MKQEAgLTAsMCArMSwyNCBAQAorIyBFeHRyYWN0IFVVSUQgZnJvbSAke1JPT1RGU30sIHdoaWNoIG11c3QgaGF2ZSBiZWVuIGJ1aWx0CisjIGJ5IHRoZSB0aW1lIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gT25seSB3b3JrcworIyBvbiBleHQgZmlsZSBzeXN0ZW1zIGFuZCBkZXBlbmRzIG9uIHR1bmUyZnMuCitkZWYgZ2V0X3Jvb3Rmc191dWlkKGQpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgcm9vdGZzID0gZC5nZXRWYXIoJ1JPT1RGUycsIFRydWUpCisgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd0dW5lMmZzJywgJy1sJywgcm9vdGZzXSkKKyAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRmlsZXN5c3RlbSBVVUlEOicpOgorICAgICAgICAgICAgdXVpZCA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGJiLm5vdGUoJ1VVSUQgb2YgJXM6ICVzJyAlIChyb290ZnMsIHV1aWQpKQorICAgICAgICAgICAgcmV0dXJuIHV1aWQKKyAgICBiYi5mYXRhbCgnQ291bGQgbm90IGRldGVybWluZSBmaWxlc3lzdGVtIFVVSUQgb2YgJXMnICUgcm9vdGZzKQorCisjIFJlcGxhY2UgdGhlIHNwZWNpYWwgPDx1dWlkLW9mLXJvb3Rmcz4+IGluc2lkZSBhIHN0cmluZyAobGlrZSB0aGUKKyMgcm9vdD0gQVBQRU5EIHN0cmluZyBpbiBhIHN5c2xpbnV4LmNmZyBvciBndW1taWJvb3QgZW50cnkpIHdpdGggdGhlCisjIGFjdHVhbCBVVUlEIG9mIHRoZSByb290ZnMuIERvZXMgbm90aGluZyBpZiB0aGUgc3BlY2lhbCBzdHJpbmcKKyMgaXMgbm90IHVzZWQuCitkZWYgcmVwbGFjZV9yb290ZnNfdXVpZChkLCBzdHJpbmcpOgorICAgIFVVSURfUExBQ0VIT0xERVIgPSAnPDx1dWlkLW9mLXJvb3Rmcz4+JworICAgIGlmIFVVSURfUExBQ0VIT0xERVIgaW4gc3RyaW5nOgorICAgICAgICB1dWlkID0gZ2V0X3Jvb3Rmc191dWlkKGQpCisgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKFVVSURfUExBQ0VIT0xERVIsIHV1aWQpCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FmYTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2djb25mLmJiY2xhc3MKQEAgLTAsMCArMSw3MCBAQAorREVQRU5EUyArPSAiZ2NvbmYgZ2NvbmYtbmF0aXZlIgorCisjIFRoZXNlIGFyZSBmb3Igd2hlbiBnY29uZnRvb2wgaXMgdXNlZCBuYXRpdmVseSBhbmQgdGhlIHByZWZpeCBpc24ndCBuZWNlc3NhcmlseQorIyB0aGUgc3lzcm9vdC4gIFRPRE86IHJlcGxpY2F0ZSB0aGUgcG9zdGluc3QgbG9naWMgZm9yIC1uYXRpdmUgcGFja2FnZXMgZ29pbmcKKyMgaW50byBzeXNyb290IGFzIHRoZXkgd29uJ3QgYmUgcnVubmluZyB0aGVpciBvd24gaW5zdGFsbC10aW1lIHNjaGVtYQorIyByZWdpc3RyYXRpb24gKGRpc2FibGVkIGJlbG93KSBub3IgdGhlIHBvc3RpbnN0IHNjcmlwdCAoYXMgdGhleSBkb24ndCBoYXBwZW4pLgorZXhwb3J0IEdDT05GX1NDSEVNQV9JTlNUQUxMX1NPVVJDRSA9ICJ4bWw6bWVyZ2VkOiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIgorZXhwb3J0IEdDT05GX0JBQ0tFTkRfRElSID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9HQ29uZi8yIgorCisjIERpc2FibGUgaW5zdGFsbC10aW1lIHNjaGVtYSByZWdpc3RyYXRpb24gYXMgd2UncmUgYSBwYWNrYWdpbmcgc3lzdGVtIHNvIHRoaXMKKyMgaGFwcGVucyBpbiB0aGUgcG9zdGluc3Qgc2NyaXB0LCBub3QgYXQgaW5zdGFsbCB0aW1lLiAgU2V0IGJvdGggdGhlIGNvbmZpZ3VyZQorIyBzY3JpcHQgb3B0aW9uIGFuZCB0aGUgdHJhZGl0aW9uYWwgZW52aW9ubWVudCB2YXJpYWJsZSBqdXN0IHRvIG1ha2Ugc3VyZS4KK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjaGVtYXMtaW5zdGFsbCIKK2V4cG9ydCBHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMID0gIjEiCisKK2djb25mX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCWV4cG9ydCBHQ09ORl9DT05GSUdfU09VUkNFPSJ4bWw6OiREJHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMiCitlbHNlCisJZXhwb3J0IEdDT05GX0NPTkZJR19TT1VSQ0U9YGdjb25mdG9vbC0yIC0tZ2V0LWRlZmF1bHQtc291cmNlYAorZmkKKworU0NIRU1BX0xPQ0FUSU9OPSREL2V0Yy9nY29uZi9zY2hlbWFzCitmb3IgU0NIRU1BIGluICR7U0NIRU1BX0ZJTEVTfTsgZG8KKwlpZiBbIC1lICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSBdOyB0aGVuCisJCUhPTUU9JEQvcm9vdCBnY29uZnRvb2wtMiBcCisJCQktLW1ha2VmaWxlLWluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitnY29uZl9wcmVybSgpIHsKK1NDSEVNQV9MT0NBVElPTj0vZXRjL2djb25mL3NjaGVtYXMKK2ZvciBTQ0hFTUEgaW4gJHtTQ0hFTUFfRklMRVN9OyBkbworCWlmIFsgLWUgJFNDSEVNQV9MT0NBVElPTi8kU0NIRU1BIF07IHRoZW4KKwkJSE9NRT0vcm9vdCBHQ09ORl9DT05GSUdfU09VUkNFPWBnY29uZnRvb2wtMiAtLWdldC1kZWZhdWx0LXNvdXJjZWAgXAorCQkJZ2NvbmZ0b29sLTIgXAorCQkJLS1tYWtlZmlsZS11bmluc3RhbGwtcnVsZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgPiAvZGV2L251bGwKKwlmaQorZG9uZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBzY2hlbWFfZGlyID0gJyVzLyVzL2V0Yy9nY29uZi9zY2hlbWFzJyAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIHNjaGVtYXMgPSBbXQorICAgICAgICBzY2hlbWFfcmUgPSByZS5jb21waWxlKCIuKlwuc2NoZW1hcyQiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzY2hlbWFfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc2NoZW1hX2Rpcik6CisgICAgICAgICAgICAgICAgaWYgc2NoZW1hX3JlLm1hdGNoKGYpOgorICAgICAgICAgICAgICAgICAgICBzY2hlbWFzLmFwcGVuZChmKQorICAgICAgICBpZiBzY2hlbWFzICE9IFtdOgorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIGdjb25mIHBvc3RpbnN0IGFuZCBwcmVybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuc2V0VmFyKCdTQ0hFTUFfRklMRVMnLCAiICIuam9pbihzY2hlbWFzKSkKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ2NvbmZfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwcmVybToKKyAgICAgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHByZXJtICs9IGQuZ2V0VmFyKCdnY29uZl9wcmVybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnZ2NvbmYnKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2dldHRleHQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiODliMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9nZXR0ZXh0LmJiY2xhc3MKQEAgLTAsMCArMSwxOSBAQAorZGVmIGdldHRleHRfZGVwZW5kZW5jaWVzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIFRydWUpIGFuZCBub3Qgb2UudXRpbHMuaW5oZXJpdHMoZCwgJ2Nyb3NzLWNhbmFkaWFuJyk6CisgICAgICAgIHJldHVybiAiIgorICAgIGlmIGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJzoKKyAgICAgICAgcmV0dXJuICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorICAgIHJldHVybiBkLmdldFZhcignREVQRU5EU19HRVRURVhUJywgRmFsc2UpCisKK2RlZiBnZXR0ZXh0X29lY29uZihkKToKKyAgICBpZiBkLmdldFZhcignVVNFX05MUycsIFRydWUpID09ICdubyc6CisgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKKyAgICAjIFJlbW92ZSB0aGUgTkxTIGJpdHMgaWYgVVNFX05MUyBpcyBubyBvciBJTkhJQklUX0RFRkFVTFRfREVQUyBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBUcnVlKSBhbmQgbm90IG9lLnV0aWxzLmluaGVyaXRzKGQsICdjcm9zcy1jYW5hZGlhbicpOgorICAgICAgICByZXR1cm4gJy0tZGlzYWJsZS1ubHMnCisgICAgcmV0dXJuICItLWVuYWJsZS1ubHMiCisKK0RFUEVORFNfR0VUVEVYVCA/Pz0gInZpcnR1YWwvZ2V0dGV4dCBnZXR0ZXh0LW5hdGl2ZSIKKworQkFTRURFUEVORFMgPSsgIiR7QGdldHRleHRfZGVwZW5kZW5jaWVzKGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiICR7QGdldHRleHRfb2Vjb25mKGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyMDJiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9nbm9tZS5iYmNsYXNzCkBAIC0wLDAgKzEgQEAKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGdjb25mIG1pbWUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9nbm9tZWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9nbm9tZWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjJiYTVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RlZiBnbm9tZV92ZXJkaXIodik6CisgICAgcmV0dXJuIG9lLnV0aWxzLnRyaW1fdmVyc2lvbih2LCAyKQorCitHTk9NRV9DT01QUkVTU19UWVBFID89ICJ4eiIKK1NFQ1RJT04gPz0gIngxMS9nbm9tZSIKK0dOT01FQk4gPz0gIiR7QlBOfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7R05PTUVCTn0vJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS8ke0dOT01FQk59LSR7UFZ9LnRhci4ke0dOT01FX0NPTVBSRVNTX1RZUEV9O25hbWU9YXJjaGl2ZSIKKworREVQRU5EUyArPSAiZ25vbWUtY29tbW9uLW5hdGl2ZSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb24tcmVnaXN0cnkgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUtaW5mbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9taW1lL3BhY2thZ2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUvYXBwbGljYXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUtMi4wIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3BvbGtpdCogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vR0NvbmYgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9zY3JvbGxrZWVwZXIvKgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9zY3JvbGxrZWVwZXIvKgorCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmNhY2hlCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGMyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ3J1Yi1lZmkuYmJjbGFzcwpAQCAtMCwwICsxLDE0NSBAQAorIyBncnViLWVmaS5iYmNsYXNzCisjIENvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgUHJvdmlkZSBncnViLWVmaSBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIGJvb3RhYmxlIGltYWdlcy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Uk9PVEZTfSAtIGluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChvcHRpb25hbCkKKyMgJHtHUlVCX0dGWFNFUklBTH0gLSBzZXQgdGhpcyB0byAxIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7R1JVQl9PUFRTfSAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIGNvbmZpZywgJzsnIGRlbGltaXRlZCAjIChvcHRpb25hbCkKKyMgJHtHUlVCX1RJTUVPVVR9IC0gdGltZW91dCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBkZWF1bHQgbGFiZWwgKG9wdGlvbmFsKQorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWdydWItZWZpOmRvX2RlcGxveSIKKworR1JVQl9TRVJJQUwgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorR1JVQkNGRyA9ICIke1N9L2dydWIuY2ZnIgorR1JVQl9USU1FT1VUID89ICIxMCIKKyNGSVhNRTogYnVpbGQgdGhpcyBmcm9tIHRoZSBtYWNoaW5lIGNvbmZpZworR1JVQl9PUFRTID89ICJzZXJpYWwgLS11bml0PTAgLS1zcGVlZD0xMTUyMDAgLS13b3JkPTggLS1wYXJpdHk9bm8gLS1zdG9wPTEiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitlZmlfcG9wdWxhdGUoKSB7CisJIyBERVNUIG11c3QgYmUgdGhlIHJvb3Qgb2YgdGhlIGltYWdlIHNvIHRoYXQgRUZJRElSIGlzIG5vdAorCSMgbmVzdGVkIHVuZGVyIGEgdG9wIGxldmVsIGRpcmVjdG9yeS4KKwlERVNUPSQxCisKKwlpbnN0YWxsIC1kICR7REVTVH0ke0VGSURJUn0KKworCUdSVUJfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdOyB0aGVuCisJCUdSVUJfSU1BR0U9ImJvb3R4NjQuZWZpIgorCWZpCisJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtHUlVCX0lNQUdFfSAke0RFU1R9JHtFRklESVJ9CisKKwlpbnN0YWxsIC1tIDA2NDQgJHtHUlVCQ0ZHfSAke0RFU1R9JHtFRklESVJ9L2dydWIuY2ZnCit9CisKK2VmaV9pc29fcG9wdWxhdGUoKSB7CisJaXNvX2Rpcj0kMQorCWVmaV9wb3B1bGF0ZSAkaXNvX2RpcgorCSMgQnVpbGQgYSBFRkkgZGlyZWN0b3J5IHRvIGNyZWF0ZSBlZmkuaW1nCisJbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorCWNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQorCWNwICRpc29fZGlyL3ZtbGludXogJHtFRklJTUdESVJ9CisJZWNobyAiJHtHUlVCX0lNQUdFfSIgPiAke0VGSUlNR0RJUn0vc3RhcnR1cC5uc2gKKwlpZiBbIC1mICIkaXNvX2Rpci9pbml0cmQiIF0gOyB0aGVuCisJCWNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKwlmaQorfQorCitlZmlfaGRkaW1nX3BvcHVsYXRlKCkgeworCWVmaV9wb3B1bGF0ZSAkMQorfQorCitweXRob24gYnVpbGRfZWZpX2NmZygpIHsKKyAgICBpbXBvcnQgc3lzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGdmeHNlcmlhbCA9IGQuZ2V0VmFyKCdHUlVCX0dGWFNFUklBTCcsIFRydWUpIG9yICIiCisKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ0dSVUJDRkcnLCBUcnVlKQorICAgIGlmIG5vdCBjZmlsZToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnVW5hYmxlIHRvIHJlYWQgR1JVQkNGRycpCisKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gZmlsZShjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisKKyAgICBvcHRzID0gZC5nZXRWYXIoJ0dSVUJfT1BUUycsIFRydWUpCisgICAgaWYgb3B0czoKKyAgICAgICAgZm9yIG9wdCBpbiBvcHRzLnNwbGl0KCc7Jyk6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclc1xuJyAlIG9wdCkKKworICAgIGNmZ2ZpbGUud3JpdGUoJ2RlZmF1bHQ9JXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHUlVCX1RJTUVPVVQnLCBUcnVlKQorICAgIGlmIHRpbWVvdXQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9JXNcbicgJSB0aW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3RpbWVvdXQ9NTBcbicpCisKKyAgICBpZiBnZnhzZXJpYWwgPT0gIjEiOgorICAgICAgICBidHlwZXMgPSBbIFsgIiBncmFwaGljcyBjb25zb2xlIiwgIiIgXSwKKyAgICAgICAgICAgIFsgIiBzZXJpYWwgY29uc29sZSIsIGQuZ2V0VmFyKCdHUlVCX1NFUklBTCcsIFRydWUpIG9yICIiIF0gXQorICAgIGVsc2U6CisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgIiIgXSBdCisKKyAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG92ZXJyaWRlczoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ09WRVJSSURFUyBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xubWVudWVudHJ5IFwnJXMlc1wne1xuJyAlIChsYWJlbCwgYnR5cGVbMF0pKQorICAgICAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICAgICAgaWYgbGFiZWwgPT0gImluc3RhbGwiOgorICAgICAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbGludXggL3ZtbGludXogTEFCRUw9JXMnICUgKGxiKSkKKworICAgICAgICAgICAgYXBwZW5kID0gbG9jYWxkYXRhLmdldFZhcignQVBQRU5EJywgVHJ1ZSkKKyAgICAgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcycgJSAoYXBwZW5kKSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyAlcycgJSBidHlwZVsxXSkKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xuJykKKworICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ2luaXRyZCAvaW5pdHJkJykKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1xufVxuJykKKworICAgIGNmZ2ZpbGUuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2dzZXR0aW5ncy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dzZXR0aW5ncy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzVhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBBIGJiY2xhc3MgdG8gaGFuZGxlIGluc3RhbGxlZCBHU2V0dGluZ3MgKGdsaWIpIHNjaGVtYXMsIHVwZGF0ZWQgdGhlIGNvbXBpbGVkCisjIGZvcm0gb24gcGFja2FnZSBpbnN0YWxsIGFuZCByZW1vdmUuCisjCisjIFRoZSBjb21waWxlZCBzY2hlbWFzIGFyZSBwbGF0Zm9ybS1hZ25vc3RpYywgc28gd2UgY2FuIGRlcGVuZCBvbgorIyBnbGliLTIuMC1uYXRpdmUgZm9yIHRoZSBuYXRpdmUgdG9vbCBhbmQgcnVuIHRoZSBwb3N0aW5zdCBzY3JpcHQgd2hlbiB0aGUKKyMgcm9vdGZzIGJ1aWxkcyB0byBzYXZlIGEgbGl0dGxlIHRpbWUgb24gZmlyc3QgYm9vdC4KKworIyBUT0RPIHVzZSBhIHRyaWdnZXIgc28gdGhhdCB0aGlzIHJ1bnMgb25jZSBwZXIgcGFja2FnZSBvcGVyYXRpb24gcnVuCisKK0RFUEVORFMgKz0gImdsaWItMi4wLW5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn0gKz0gImdsaWItMi4wLXV0aWxzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIgorCitnc2V0dGluZ3NfcG9zdGluc3RybSAoKSB7CisJZ2xpYi1jb21waWxlLXNjaGVtYXMgJEQke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJhZGRpbmcgZ3NldHRpbmdzIHBvc3RpbnN0IHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgIGJiLm5vdGUoImFkZGluZyBnc2V0dGluZ3MgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorCisgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgIHBvc3RybSArPSBkLmdldFZhcignZ3NldHRpbmdzX3Bvc3RpbnN0cm0nLCBUcnVlKQorICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ndGstZG9jLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyZjk4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ndGstZG9jLmJiY2xhc3MKQEAgLTAsMCArMSwyNSBAQAorIyBIZWxwZXIgY2xhc3MgdG8gcHVsbCBpbiB0aGUgcmlnaHQgZ3RrLWRvYyBkZXBlbmRlbmNpZXMgYW5kIGRpc2FibGUKKyMgZ3RrLWRvYy4KKyMKKyMgTG9uZy10ZXJtIGl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoaXMgY2xhc3MgY291bGQgYmUgdG9nZ2xlZCBiZXR3ZWVuCisjIGd0ay1kb2Mtc3R1Yi1uYXRpdmUgYW5kIHRoZSByZWFsIGd0ay1kb2MtbmF0aXZlLCB3aGljaCB3b3VsZCBlbmFibGUKKyMgcmUtZ2VuZXJhdGlvbiBvZiBkb2N1bWVudGF0aW9uLiAgRm9yIG5vdywgd2UnbGwgbWFrZSBkbyB3aXRoIHRoaXMgd2hpY2gKKyMgcGFja2FnZXMgdXAgYW55IGV4aXN0aW5nIGRvY3VtZW50YXRpb24gKHNvIGZyb20gdGFyYmFsbCBidWlsZHMpLgorCisjIFRoZSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeSwgd2hlcmUgdGhlIGluZnJhc3RydWN0dXJlIHdpbGwgYmUgY29waWVkLgorIyBndGtkb2NpemUgaGFzIGEgZGVmYXVsdCBvZiAiLiIgc28gdG8gaGFuZGxlIG91dC1vZi10cmVlIGJ1aWxkcyBzZXQgdGhpcyB0byAkUy4KK0dUS0RPQ19ET0NESVIgPz0gIiR7U30iCisKK0RFUEVORFNfYXBwZW5kID0gIiBndGstZG9jLXN0dWItbmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIlwKKyAgLS1kaXNhYmxlLWd0ay1kb2MgXAorICAtLWRpc2FibGUtZ3RrLWRvYy1odG1sIFwKKyAgLS1kaXNhYmxlLWd0ay1kb2MtcGRmIFwKKyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgZ3RrZG9jaXplIC0tZG9jZGlyICR7R1RLRE9DX0RPQ0RJUn0gKQorfQorCitpbmhlcml0IHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM1OGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d0ay1pY29uLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw2MiBAQAorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvciIKKworREVQRU5EUyArPSAiJHtAWydoaWNvbG9yLWljb24tdGhlbWUnLCAnJ11bJyR7QlBOfScgPT0gJ2hpY29sb3ItaWNvbi10aGVtZSddfSBndGstaWNvbi11dGlscy1uYXRpdmUiCisKK2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfaWNvbl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisKKwkjIFVwZGF0ZSB0aGUgcGl4YnVmIGxvYWRlcnMgaW4gY2FzZSB0aGV5IGhhdmVuJ3QgYmVlbiByZWdpc3RlcmVkIHlldAorCUdES19QSVhCVUZfTU9EVUxFRElSPSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycyBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUKKworCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtZnF0ICAkaWNvbmRpcgorCQlmaQorCWRvbmUKK2ZpCit9CisKK2d0a19pY29uX2NhY2hlX3Bvc3RybSgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX2ljb25fY2FjaGUgJHtQS0d9IG1scHJlZml4PSR7TUxQUkVGSVh9IGxpYmRpcj0ke2xpYmRpcn0gXAorCQliYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfQorZWxzZQorCWZvciBpY29uZGlyIGluIC91c3Ivc2hhcmUvaWNvbnMvKiA7IGRvCisJCWlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKwkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtcXQgICRpY29uZGlyCisJCWZpCisJZG9uZQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgaWNvbl9kaXIgPSAnJXMvJXMvJXMvaWNvbnMnICUgKHBrZ2Rlc3QsIHBrZywgZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGljb25fZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGhpY29sb3ItaWNvbi10aGVtZSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgcmRlcGVuZHMgPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAiaGljb2xvci1pY29uLXRoZW1lIgorICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCByZGVwZW5kcykKKyAgICAKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIGd0ay1pY29uLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgIAorICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2d0a19pY29uX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdndGtfaWNvbl9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2d0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2MzE2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ndGstaW1tb2R1bGVzLWNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw4MyBAQAorIyBUaGlzIGNsYXNzIHdpbGwgdXBkYXRlIHRoZSBpbnB1dG1ldGhvZCBtb2R1bGUgY2FjaGUgZm9yIHZpcnR1YWwga2V5Ym9hcmRzCisjCisjIFVzYWdlOiBTZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIHRvIHRoZSBwYWNrYWdlcyB0aGF0IG5lZWRzIHRvIHVwZGF0ZSB0aGUgaW5wdXRtZXRob2QgbW9kdWxlcworCitERVBFTkRTID0rICJxZW11LW5hdGl2ZSIKKworaW5oZXJpdCBxZW11CisKK0dUS0lNTU9EVUxFU19QQUNLQUdFUyA/PSAiJHtQTn0iCisKK2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0aW5zdCgpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgICBmb3IgbWFqX3ZlciBpbiAyIDM7IGRvCisgICAgICAgIGlmIFsgLXggJEQke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wIF07IHRoZW4KKyAgICAgICAgICAgIElNRklMRVM9JChscyAkRCR7bGliZGlyfS9ndGstJG1hal92ZXIuMC8qL2ltbW9kdWxlcy8qLnNvKQorICAgICAgICAgICAgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0kbWFqX3Zlci4wJyl9IFwKKyAgICAgICAgICAgICAgICAkSU1GSUxFUyA+ICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzIDI+L2Rldi9udWxsICYmCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzOiREOjoiICREL2V0Yy9ndGstJG1hal92ZXIuMC9ndGsuaW1tb2R1bGVzCisKKyAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0IDAKK2ZpCitpZiBbICEgLXogYHdoaWNoIGd0ay1xdWVyeS1pbW1vZHVsZXMtMi4wYCBdOyB0aGVuCisgICAgZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgPiAvZXRjL2d0ay0yLjAvZ3RrLmltbW9kdWxlcworZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTMuMCA+IC9ldGMvZ3RrLTMuMC9ndGsuaW1tb2R1bGVzCitmaQorfQorCitndGtfaW1tb2R1bGVfY2FjaGVfcG9zdHJtKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAgIGZvciBtYWpfdmVyIGluIDIgMzsgZG8KKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAgXTsgdGhlbgorICAgICAgICAgICAgSU1GSUxFUz0kKGxzICREJHtsaWJkaXJ9L2d0ay0kbWFqX3Zlci4wLyovaW1tb2R1bGVzLyouc28pCisgICAgICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAnKX0gXAorICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMgMj4vZGV2L251bGwgJiYKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInM6JEQ6OiIgJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMKKworICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMAorZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTIuMCA+IC9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTMuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wID4gL2V0Yy9ndGstMy4wL2d0ay5pbW1vZHVsZXMKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGd0a2ltbW9kdWxlc19wa2dzID0gZC5nZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gZ3RraW1tb2R1bGVzX3BrZ3M6CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ3RrLWltbW9kdWxlLWNhY2hlIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBndGtpbW1vZHVsZXNfY2hlY2sgPSBkLmdldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgRmFsc2UpCisgICAgICAgIGlmIG5vdCBndGtpbW1vZHVsZXNfY2hlY2s6CisgICAgICAgICAgICBiYl9maWxlbmFtZSA9IGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJFUlJPUjogJXMgaW5oZXJpdHMgZ3RrLWltbW9kdWxlcy1jYWNoZSBidXQgZG9lc24ndCBzZXQgR1RLSU1NT0RVTEVTX1BBQ0tBR0VTIiAlIGJiX2ZpbGVuYW1lKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3VtbWlib290LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ3VtbWlib290LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5YzA4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDExOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgZ3VtbWlib290LmJiY2xhc3MgLSBlcXVpdmFsZW50IG9mIGdydWItZWZpLmJiY2xhc3MKKyMgU2V0IEVGSV9QUk9WSURFUiA9ICJndW1taWJvb3QiIHRvIHVzZSBndW1taWJvb3Qgb24geW91ciBsaXZlIGltYWdlcyBpbnN0ZWFkIG9mIGdydWItZWZpCisjIChpbWFnZXMgYnVpbHQgYnkgYm9vdGltYWdlLmJiY2xhc3Mgb3IgYm9vdC1kaXJlY3RkaXNrLmJiY2xhc3MpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3VtbWlib290OmRvX2RlcGxveSIKK2RvX2Jvb3RkaXJlY3RkaXNrW2RlcGVuZHNdICs9ICIke01MUFJFRklYfWd1bW1pYm9vdDpkb19kZXBsb3kiCisKK0VGSURJUiA9ICIvRUZJL0JPT1QiCisKK0dVTU1JQk9PVF9DRkcgPz0gIiR7U30vbG9hZGVyLmNvbmYiCitHVU1NSUJPT1RfRU5UUklFUyA/PSAiIgorR1VNTUlCT09UX1RJTUVPVVQgPz0gIjEwIgorCisjIE5lZWQgVVVJRCB1dGlsaXR5IGNvZGUuCitpbmhlcml0IGZzLXV1aWQKKworZWZpX3BvcHVsYXRlKCkgeworICAgICAgICBERVNUPSQxCisKKyAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3RpYTMyLmVmaSIKKyAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3RpYTMyLmVmaSIKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIng4Nl82NCIgXTsgdGhlbgorICAgICAgICAgICAgRUZJX0lNQUdFPSJndW1taWJvb3R4NjQuZWZpIgorICAgICAgICAgICAgREVTVF9FRklfSU1BR0U9ImJvb3R4NjQuZWZpIgorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfSR7RUZJRElSfQorICAgICAgICAjIGd1bW1pYm9vdCByZXF1aXJlcyB0aGVzZSBwYXRocyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcworICAgICAgICAjIHRoZXkgYXJlIG5vdCBjdXN0b21pemFibGUgc28gbm8gcG9pbnQgaW4gbmV3IHZhcnMKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9L2xvYWRlcgorICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyL2VudHJpZXMKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtFRklfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0vJHtERVNUX0VGSV9JTUFHRX0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7R1VNTUlCT09UX0NGR30gJHtERVNUfS9sb2FkZXIvbG9hZGVyLmNvbmYKKyAgICAgICAgZm9yIGkgaW4gJHtHVU1NSUJPT1RfRU5UUklFU307IGRvCisgICAgICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtpfSAke0RFU1R9L2xvYWRlci9lbnRyaWVzCisgICAgICAgIGRvbmUKK30KKworZWZpX2lzb19wb3B1bGF0ZSgpIHsKKyAgICAgICAgaXNvX2Rpcj0kMQorICAgICAgICBlZmlfcG9wdWxhdGUgJGlzb19kaXIKKyAgICAgICAgbWtkaXIgLXAgJHtFRklJTUdESVJ9LyR7RUZJRElSfQorICAgICAgICBjcCAkaXNvX2Rpci8ke0VGSURJUn0vKiAke0VGSUlNR0RJUn0ke0VGSURJUn0KKyAgICAgICAgY3AgJGlzb19kaXIvdm1saW51eiAke0VGSUlNR0RJUn0KKyAgICAgICAgZWNobyAiJHtERVNUX0VGSV9JTUFHRX0iID4gJHtFRklJTUdESVJ9L3N0YXJ0dXAubnNoCisgICAgICAgIGlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGNwICRpc29fZGlyL2luaXRyZCAke0VGSUlNR0RJUn0KKyAgICAgICAgZmkKK30KKworZWZpX2hkZGltZ19wb3B1bGF0ZSgpIHsKKyAgICAgICAgZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgbGFiZWxzID0gZC5nZXRWYXIoJ0xBQkVMUycsIFRydWUpCisgICAgaWYgbm90IGxhYmVsczoKKyAgICAgICAgYmIuZGVidWcoMSwgIkxBQkVMUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfQ0ZHJywgVHJ1ZSkKKyAgICB0cnk6CisgICAgICAgICBjZmdmaWxlID0gb3BlbihjZmlsZSwgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5mdW5jRmFpbGVkKCdVbmFibGUgdG8gb3BlbiAlcycgJSAoY2ZpbGUpKQorCisgICAgY2ZnZmlsZS53cml0ZSgnIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgT0VcbicpCisgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdCAlc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdHVU1NSUJPT1RfVElNRU9VVCcsIFRydWUpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAlc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dCAxMFxuJykKKyAgICBjZmdmaWxlLmNsb3NlKCkKKworICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBlbnRyeWZpbGUgPSAiJXMvJXMuY29uZiIgJSAocywgbGFiZWwpCisgICAgICAgIGQuYXBwZW5kVmFyKCJHVU1NSUJPT1RfRU5UUklFUyIsICIgIiArIGVudHJ5ZmlsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW50cnljZmcgPSBvcGVuKGVudHJ5ZmlsZSwgInciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChlbnRyeWZpbGUpKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ3RpdGxlICVzXG4nICUgbGFiZWwpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdsaW51eCAvdm1saW51elxuJykKKworICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICBpbml0cmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdJTklUUkQnLCBUcnVlKQorCisgICAgICAgIGlmIGluaXRyZDoKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdpbml0cmQgL2luaXRyZFxuJykKKyAgICAgICAgbGIgPSBsYWJlbAorICAgICAgICBpZiBsYWJlbCA9PSAiaW5zdGFsbCI6CisgICAgICAgICAgICBsYiA9ICJpbnN0YWxsLWVmaSIKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ29wdGlvbnMgTEFCRUw9JXMgJyAlIGxiKQorICAgICAgICBpZiBhcHBlbmQ6CisgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCclcycgJSBhcHBlbmQpCisgICAgICAgIGVudHJ5Y2ZnLndyaXRlKCdcbicpCisgICAgICAgIGVudHJ5Y2ZnLmNsb3NlKCkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9nemlwbmF0aXZlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ3ppcG5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNmNiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ3ppcG5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNSBAQAorRVhUUkFOQVRJVkVQQVRIICs9ICJwaWd6LW5hdGl2ZSBnemlwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImd6aXAtbmF0aXZlIgorCisjIHRhciBtYXkgZ2V0IHJ1biBieSBkb191bnBhY2sgb3IgZG9fcG9wdWxhdGVfbGljIHdoaWNoIGNvdWxkIGNhbGwgZ3ppcAorZG9fdW5wYWNrW2RlcGVuZHNdICs9ICJnemlwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWI4YmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ljZWNjLmJiY2xhc3MKQEAgLTAsMCArMSwzMzMgQEAKKyMgSWNlQ3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsaW5nIHN1cHBvcnQKKyMKKyMgU3RhZ2VzIGRpcmVjdG9yaWVzIHdpdGggc3ltbGlua3MgZnJvbSBnY2MvZysrIHRvIGljZWNjLCBmb3IgYm90aAorIyBuYXRpdmUgYW5kIGNyb3NzIGNvbXBpbGVycy4gRGVwZW5kaW5nIG9uIGVhY2ggY29uZmlndXJlIG9yIGNvbXBpbGUsCisjIHRoZSBkaXJlY3RvcmllcyBhcmUgYWRkZWQgYXQgdGhlIGhlYWQgb2YgdGhlIFBBVEggbGlzdCBhbmQgSUNFQ0NfQ1hYCisjIGFuZCBJQ0VDX0NDIGFyZSBzZXQuCisjCisjIEZvciB0aGUgY3Jvc3MgY29tcGlsZXIsIGNyZWF0ZXMgYSB0YXIuZ3ogb2Ygb3VyIHRvb2xjaGFpbiBhbmQgc2V0cworIyBJQ0VDQ19WRVJTSU9OIGFjY29yZGluZ2x5LgorIworIyBUaGUgY2xhc3Mgbm93IGhhbmRsZXMgYWxsIDMgZGlmZmVyZW50IGNvbXBpbGUgJ3N0YWdlcycgKGkuZSBuYXRpdmUgLGNyb3NzLWtlcm5lbCBhbmQgdGFyZ2V0KSBjcmVhdGluZyB0aGUKKyMgbmVjZXNzYXJ5IGVudmlyb25tZW50IHRhci5neiBmaWxlIHRvIGJlIHVzZWQgYnkgdGhlIHJlbW90ZSBtYWNoaW5lcy4KKyMgSXQgYWxzbyBzdXBwb3J0cyBtZXRhLXRvb2xjaGFpbiBnZW5lcmF0aW9uCisjCisjIElmIElDRUNDX1BBVEggaXMgbm90IHNldCBpbiBsb2NhbC5jb25mIHRoZW4gdGhlIGNsYXNzIHdpbGwgdHJ5IHRvIGxvY2F0ZSBpdCB1c2luZyAnYmIudXRpbHMud2hpY2gnCisjIGJ1dCBub3RoaW5nIGlzIHN1cmUgOykKKyMKKyMgSWYgSUNFQ0NfRU5WX0VYRUMgaXMgc2V0IGluIGxvY2FsLmNvbmYsIHRoZW4gaXQgc2hvdWxkIHBvaW50IHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCBwcm92aWRlZCBieSB0aGUgdXNlcgorIyBvciB0aGUgZGVmYXVsdCBvbmUgcHJvdmlkZWQgYnkgaWNlY2MtY3JlYXRlLWVudi5iYiB3aWxsIGJlIHVzZWQKKyMgKE5PVEUgdGhhdCB0aGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgc2NyaXB0IG5lZWQgaXQgYW5kICpub3QgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGggaWNlY2MqCisjCisjIFVzZXIgY2FuIHNwZWNpZnkgaWYgc3BlY2lmaWMgcGFja2FnZXMgb3IgcGFja2FnZXMgYmVsb25naW5nIHRvIGNsYXNzIHNob3VsZCBub3QgdXNlIGljZWNjIHRvIGRpc3RyaWJ1dGUKKyMgY29tcGlsZSBqb2JzIHRvIHJlbW90ZSBtYWNoaW5lcywgYnV0IGhhbmRsZWQgbG9jYWxseSwgYnkgZGVmaW5pbmcgSUNFQ0NfVVNFUl9DTEFTU19CTCBhbmQgSUNFQ0NfVVNFUl9QQUNLQUdFX0JMCisjIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBpbiBsb2NhbC5jb25mLiBJbiBhZGRpdGlvbiB0aGUgdXNlciBjYW4gZm9yY2UgdG8gZW5hYmxlIGljZWNjIGZvciBwYWNrYWdlcworIyB3aGljaCBzZXQgYW4gZW1wdHkgUEFSQUxMRUxfTUFLRSB2YXJpYWJsZSBieSBkZWZpbmluZyBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0Vycm9yIGNoZWNraW5nIGlzIGtlcHQgdG8gbWluaW11bSBzbyBkb3VibGUgY2hlY2sgYW55IHBhcmFtZXRlcnMgeW91IHBhc3MgdG8gdGhlIGNsYXNzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0JCX0hBU0hCQVNFX1dISVRFTElTVCArPSAiSUNFQ0NfUEFSQUxMRUxfTUFLRSBJQ0VDQ19ESVNBQkxFRCBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkwgSUNFQ0NfVVNFUl9DTEFTU19CTCBJQ0VDQ19VU0VSX1BBQ0tBR0VfV0wgSUNFQ0NfUEFUSCBJQ0VDQ19FTlZfRVhFQyIKKworSUNFQ0NfRU5WX0VYRUMgPz0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pY2VjYy1jcmVhdGUtZW52IgorCitkZWYgaWNlY2NfZGVwX3ByZXBlbmQoZCk6CisgICAgIyBJTkhJQklUX0RFRkFVTFRfREVQUyBkb2Vzbid0IGFwcGx5IHRvIHRoZSBwYXRjaCBjb21tYW5kLiAgV2hldGhlciBvciAgbm90CisgICAgIyB3ZSBuZWVkIHRoYXQgYnVpbHQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwYXRjaCBmdW5jdGlvbiAvIGNsYXNzLCBub3QKKyAgICAjIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBpZiBub3QgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gImljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlIgorICAgIHJldHVybiAiIgorCitERVBFTkRTX3ByZXBlbmQgKz0gIiR7QGljZWNjX2RlcF9wcmVwZW5kKGQpfSAiCisKK2RlZiBnZXRfY3Jvc3Nfa2VybmVsX2NjKGJiLGQpOgorICAgIGtlcm5lbF9jYyA9IGQuZ2V0VmFyKCdLRVJORUxfQ0MnLCBGYWxzZSkKKworICAgICMgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYnkgdGhlIHNoZWxsIGlmIG5lY2Vzc2FyeQorICAgIGlmICdgJyBpbiBrZXJuZWxfY2Mgb3IgJyQoJyBpbiBrZXJuZWxfY2M6CisgICAgICAgIGtlcm5lbF9jYyA9IG9zLnBvcGVuKCJlY2hvICVzIiAlIGtlcm5lbF9jYykucmVhZCgpWzotMV0KKworICAgIGtlcm5lbF9jYyA9IGQuZXhwYW5kKGtlcm5lbF9jYykKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2MucmVwbGFjZSgnY2NhY2hlJywgJycpLnN0cmlwKCkKKyAgICBrZXJuZWxfY2MgPSBrZXJuZWxfY2Muc3BsaXQoJyAnKVswXQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5zdHJpcCgpCisgICAgcmV0dXJuIGtlcm5lbF9jYworCitkZWYgZ2V0X2ljZWNjKGQpOgorICAgIHJldHVybiBkLmdldFZhcignSUNFQ0NfUEFUSCcsIEZhbHNlKSBvciBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgImljZWNjIikKKworZGVmIGNyZWF0ZV9wYXRoKGNvbXBpbGVycywgYmIsIGQpOgorICAgICIiIgorICAgIENyZWF0ZSBTeW1saW5rcyBmb3IgdGhlIGljZWNjIGluIHRoZSBzdGFnaW5nIGRpcmVjdG9yeQorICAgICIiIgorICAgIHN0YWdpbmcgPSBvcy5wYXRoLmpvaW4oZC5leHBhbmQoJyR7U1RBR0lOR19CSU5ESVJ9JyksICJpY2UiKQorICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICBzdGFnaW5nICs9ICIta2VybmVsIgorCisgICAgI2NoZWNrIGlmIHRoZSBpY2VjYyBwYXRoIGlzIHNldCBieSB0aGUgdXNlcgorICAgIGljZWNjID0gZ2V0X2ljZWNjKGQpCisKKyAgICAjIENyZWF0ZSB0aGUgZGlyIGlmIG5lY2Vzc2FyeQorICAgIHRyeToKKyAgICAgICAgb3Muc3RhdChzdGFnaW5nKQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc3RhZ2luZykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZm9yIGNvbXBpbGVyIGluIGNvbXBpbGVyczoKKyAgICAgICAgZ2NjX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhZ2luZywgY29tcGlsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN0YXQoZ2NjX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGljZWNjLCBnY2NfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gc3RhZ2luZworCitkZWYgdXNlX2ljYyhiYixkKToKKyAgICBpZiBkLmdldFZhcignSUNFQ0NfRElTQUJMRUQnLCBGYWxzZSkgPT0gIjEiOgorICAgICAgICAjIGRvbid0IGV2ZW4gdHJ5IGl0LCB3aGVuIGV4cGxpY2l0bHkgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgICMgYWxsYXJjaCByZWNpcGVzIGRvbid0IHVzZSBjb21waWxlcgorICAgIGlmIGljY19pc19hbGxhcmNoKGJiLCBkKToKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIHN5c3RlbV9jbGFzc19ibGFja2xpc3QgPSBbXQorICAgIHVzZXJfY2xhc3NfYmxhY2tsaXN0ID0gKGQuZ2V0VmFyKCdJQ0VDQ19VU0VSX0NMQVNTX0JMJywgRmFsc2UpIG9yICJub25lIikuc3BsaXQoKQorICAgIHBhY2thZ2VfY2xhc3NfYmxhY2tsaXN0ID0gc3lzdGVtX2NsYXNzX2JsYWNrbGlzdCArIHVzZXJfY2xhc3NfYmxhY2tsaXN0CisKKyAgICBmb3IgYmxhY2sgaW4gcGFja2FnZV9jbGFzc19ibGFja2xpc3Q6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoYmxhY2ssIGQpOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBjbGFzcyAlcyBmb3VuZCBpbiBibGFja2xpc3QsIGRpc2FibGUgaWNlY2MiICUgKHBuLCBibGFjaykpCisgICAgICAgICAgICByZXR1cm4gIm5vIgorCisgICAgIyAic3lzdGVtIiByZWNpcGUgYmxhY2tsaXN0IGNvbnRhaW5zIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNhbiBub3QgZGlzdHJpYnV0ZSBjb21waWxlIHRhc2tzCisgICAgIyBmb3Igb25lIHJlYXNvbiBvciB0aGUgb3RoZXIKKyAgICAjIHRoaXMgaXMgdGhlIG9sZCBsaXN0ICh3aGljaCBkb2Vzbid0IHNlZW0gdG8gYmUgdmFsaWQgYW55bW9yZSwgYmVjYXVzZSBJIHdhcyBhYmxlIHRvIGJ1aWxkCisgICAgIyBhbGwgdGhlc2Ugd2l0aCBpY2VjYyBlbmFibGVkKQorICAgICMgc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ID0gWyAidWNsaWJjIiwgImdsaWJjIiwgImdjYyIsICJiaW5kIiwgInUtYm9vdCIsICJkaGNwLWZvcndhcmRlciIsICJlbmNoYW50IiwgImNvbm5tYW4iLCAib3JiaXQyIiBdCisgICAgIyB3aGVuIGFkZGluZyBuZXcgZW50cnksIHBsZWFzZSBkb2N1bWVudCB3aHkgKGhvdyBpdCBmYWlsZWQpIHNvIHRoYXQgd2UgY2FuIHJlLWV2YWx1YXRlIGl0IGxhdGVyCisgICAgIyBlLmcuIHdoZW4gdGhlcmUgaXMgbmV3IHZlcnNpb24KKyAgICAjIGJ1aWxkaW5nIGxpYmdjYy1pbml0aWFsIHdpdGggaWNlY2MgZmFpbHMgd2l0aCBDUFAgc2FuaXR5IGNoZWNrIGVycm9yIGlmIGhvc3Qgc3lzcm9vdCBjb250YWlucyBjcm9zcyBnY2MgYnVpbHQgZm9yIGFub3RoZXIgdGFyZ2V0IHR1bmUvdmFyaWFudAorICAgIHN5c3RlbV9wYWNrYWdlX2JsYWNrbGlzdCA9IFsibGliZ2NjLWluaXRpYWwiXQorICAgIHVzZXJfcGFja2FnZV9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9CTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHVzZXJfcGFja2FnZV93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfUEFDS0FHRV9XTCcsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorICAgIHBhY2thZ2VfYmxhY2tsaXN0ID0gc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ICsgdXNlcl9wYWNrYWdlX2JsYWNrbGlzdAorCisgICAgaWYgcG4gaW4gcGFja2FnZV9ibGFja2xpc3Q6CisgICAgICAgIGJiLmRlYnVnKDEsICIlczogZm91bmQgaW4gYmxhY2tsaXN0LCBkaXNhYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgaWYgcG4gaW4gdXNlcl9wYWNrYWdlX3doaXRlbGlzdDoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBmb3VuZCBpbiB3aGl0ZWxpc3QsIGVuYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJ5ZXMiCisKKyAgICBpZiBkLmdldFZhcignUEFSQUxMRUxfTUFLRScsIEZhbHNlKSA9PSAiIjoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBoYXMgZW1wdHkgUEFSQUxMRUxfTUFLRSwgZGlzYWJsZSBpY2VjYyIgJSBwbikKKyAgICAgICAgcmV0dXJuICJubyIKKworICAgIHJldHVybiAieWVzIgorCitkZWYgaWNjX2lzX2FsbGFyY2goYmIsIGQpOgorICAgIHJldHVybiBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgRmFsc2UpID09ICJhbGwiCisKK2RlZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICByZXR1cm4gXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJrZXJuZWwiLCBkKTsKKworZGVmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgIHJldHVybiBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCkgb3IgXAorICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKTsKKworIyBEb24ndCBwb2xsdXRlIGFsbGFyY2ggc2lnbmF0dXJlcyB3aXRoIFRBUkdFVF9GUFUKK2ljY192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSArPSAiVEFSR0VUX0ZQVSIKK2RlZiBpY2NfdmVyc2lvbihiYiwgZCk6CisgICAgaWYgdXNlX2ljYyhiYiwgZCkgPT0gIm5vIjoKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBwYXJhbGxlbCA9IGQuZ2V0VmFyKCdJQ0VDQ19QQVJBTExFTF9NQUtFJywgRmFsc2UpIG9yICIiCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgRmFsc2UpID09ICIiIGFuZCBwYXJhbGxlbDoKKyAgICAgICAgZC5zZXRWYXIoIlBBUkFMTEVMX01BS0UiLCBwYXJhbGxlbCkKKworICAgIGlmIGljY19pc19uYXRpdmUoYmIsIGQpOgorICAgICAgICBhcmNoaXZlX25hbWUgPSAibG9jYWwtaG9zdC1lbnYiCisgICAgZWxpZiBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKSA9PSAiIjoKKyAgICAgICAgYmIuZmF0YWwoZC5leHBhbmQoIiR7UE59IiksICIgTlVMTCBwcmVmaXgiKQorICAgIGVsc2U6CisgICAgICAgIHByZWZpeCA9IGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScgKQorICAgICAgICBkaXN0cm8gPSBkLmV4cGFuZCgnJHtESVNUUk99JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgZmxvYXQgPSBkLmdldFZhcignVEFSR0VUX0ZQVScsIEZhbHNlKSBvciAiaGFyZCIKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gcHJlZml4ICsgZGlzdHJvICsgIi0iICAgICAgICArIHRhcmdldF9zeXMgKyAiLSIgKyBmbG9hdAorICAgICAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSArPSAiLWtlcm5lbCIKKworICAgIGltcG9ydCBzb2NrZXQKKyAgICBpY2VfZGlyID0gZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0nKQorICAgIHRhcl9maWxlID0gb3MucGF0aC5qb2luKGljZV9kaXIsICdpY2UnLCBhcmNoaXZlX25hbWUgKyAiLUBWRVJTSU9OQC0iICsgc29ja2V0LmdldGhvc3RuYW1lKCkgKyAnLnRhci5neicpCisKKyAgICByZXR1cm4gdGFyX2ZpbGUKKworZGVmIGljY19wYXRoKGJiLGQpOgorICAgIGlmIHVzZV9pY2MoYmIsIGQpID09ICJubyI6CisgICAgICAgICMgZG9uJ3QgY3JlYXRlIHVubmVjZXNzYXJ5IGRpcmVjdG9yaWVzIHdoZW4gaWNlY2MgaXMgZGlzYWJsZWQKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpY2NfaXNfa2VybmVsKGJiLCBkKToKKyAgICAgICAgcmV0dXJuIGNyZWF0ZV9wYXRoKCBbZ2V0X2Nyb3NzX2tlcm5lbF9jYyhiYixkKSwgXSwgYmIsIGQpCisKKyAgICBlbHNlOgorICAgICAgICBwcmVmaXggPSBkLmV4cGFuZCgnJHtIT1NUX1BSRUZJWH0nKQorICAgICAgICByZXR1cm4gY3JlYXRlX3BhdGgoIFtwcmVmaXgrImdjYyIsIHByZWZpeCsiZysrIl0sIGJiLCBkKQorCitkZWYgaWNjX2dldF9leHRlcm5hbF90b29sKGJiLCBkLCB0b29sKToKKyAgICBleHRlcm5hbF90b29sY2hhaW5fYmluZGlyID0gZC5leHBhbmQoJyR7RVhURVJOQUxfVE9PTENIQUlOfSR7YmluZGlyX2Nyb3NzfScpCisgICAgdGFyZ2V0X3ByZWZpeCA9IGQuZXhwYW5kKCcke1RBUkdFVF9QUkVGSVh9JykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGV4dGVybmFsX3Rvb2xjaGFpbl9iaW5kaXIsICclcyVzJyAlICh0YXJnZXRfcHJlZml4LCB0b29sKSkKKworIyBEb24ndCBwb2xsdXRlIG5hdGl2ZSBzaWduYXR1cmVzIHdpdGggdGFyZ2V0IFRVTkVfUEtHQVJDSCB0aHJvdWdoIFNUQUdJTkdfQklORElSX1RPT0xDSEFJTgoraWNjX2dldF90b29sW3ZhcmRlcHNleGNsdWRlXSArPSAiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIgorZGVmIGljY19nZXRfdG9vbChiYiwgZCwgdG9vbCk6CisgICAgaWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgICAgIHJldHVybiBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgdG9vbCkKKyAgICBlbGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICByZXR1cm4gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCJQQVRIIiksIGdldF9jcm9zc19rZXJuZWxfY2MoYmIsIGQpKQorICAgIGVsc2U6CisgICAgICAgIGljZV9kaXIgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59JykKKyAgICAgICAgdGFyZ2V0X3N5cyA9IGQuZXhwYW5kKCcke1RBUkdFVF9TWVN9JykKKyAgICAgICAgdG9vbF9iaW4gPSBvcy5wYXRoLmpvaW4oaWNlX2RpciwgIiVzLSVzIiAlICh0YXJnZXRfc3lzLCB0b29sKSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodG9vbF9iaW4pOgorICAgICAgICAgICAgcmV0dXJuIHRvb2xfYmluCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRlcm5hbF90b29sX2JpbiA9IGljY19nZXRfZXh0ZXJuYWxfdG9vbChiYiwgZCwgdG9vbCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGV4dGVybmFsX3Rvb2xfYmluKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxfdG9vbF9iaW4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisKK2RlZiBpY2NfZ2V0X2FuZF9jaGVja190b29sKGJiLCBkLCB0b29sKToKKyAgICAjIENoZWNrIHRoYXQgZysrIG9yIGdjYyBpcyBub3QgYSBzeW1ib2xpYyBsaW5rIHRvIGljZWNjIGJpbmFyeSBpbgorICAgICMgUEFUSCBvciBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB3aWxsIHNpbGVudGx5IGNyZWF0ZSBhbiBpbnZhbGlkCisgICAgIyBjb21waWxlciBlbnZpcm9ubWVudCBwYWNrYWdlLgorICAgIHQgPSBpY2NfZ2V0X3Rvb2woYmIsIGQsIHRvb2wpCisgICAgaWYgdCBhbmQgb3MucG9wZW4oInJlYWRsaW5rIC1mICVzIiAlIHQpLnJlYWQoKVs6LTFdID09IGdldF9pY2VjYyhkKToKKyAgICAgICAgYmIuZXJyb3IoIiVzIGlzIGEgc3ltbGluayB0byAlcyBpbiBQQVRIIGFuZCB0aGlzIHByZXZlbnRzIGljZWNjIGZyb20gd29ya2luZyIgJSAodCwgZ2V0X2ljZWNjKGQpKSkKKyAgICAgICAgcmV0dXJuICIiCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHQKKword2FpdF9mb3JfZmlsZSgpIHsKKyAgICBsb2NhbCBUSU1FX0VMQVBTRUQ9MAorICAgIGxvY2FsIEZJTEVfVE9fVEVTVD0kMQorICAgIGxvY2FsIFRJTUVPVVQ9JDIKKyAgICB1bnRpbCBbIC1mICIkRklMRV9UT19URVNUIiBdCisgICAgZG8KKyAgICAgICAgVElNRV9FTEFQU0VEPWBleHByICRUSU1FX0VMQVBTRUQgKyAxYAorICAgICAgICBpZiBbICRUSU1FX0VMQVBTRUQgLWd0ICRUSU1FT1VUIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgc2xlZXAgMQorICAgIGRvbmUKK30KKworZGVmIHNldF9pY2VjY19lbnYoKToKKyAgICAjIGR1bW15IHB5dGhvbiB2ZXJzaW9uIG9mIHNldF9pY2VjY19lbnYKKyAgICByZXR1cm4KKworc2V0X2ljZWNjX2VudigpIHsKKyAgICBpZiBbICIke0B1c2VfaWNjKGJiLCBkKX0iID0gIm5vIiBdCisgICAgdGhlbgorICAgICAgICByZXR1cm4KKyAgICBmaQorICAgIElDRUNDX1ZFUlNJT049IiR7QGljY192ZXJzaW9uKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFQ0NfVkVSU0lPTn0iID0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogY291bGQgbm90IGdldCBJQ0VDQ19WRVJTSU9OIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFX1BBVEg9IiR7QGljY19wYXRoKGJiLCBkKX0iCisgICAgaWYgWyAieCR7SUNFX1BBVEh9IiA9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBiYndhcm4gIkNhbm5vdCB1c2UgaWNlY2M6IGNvdWxkIG5vdCBnZXQgSUNFX1BBVEgiCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBJQ0VDQ19DQz0iJHtAaWNjX2dldF9hbmRfY2hlY2tfdG9vbChiYiwgZCwgImdjYyIpfSIKKyAgICBJQ0VDQ19DWFg9IiR7QGljY19nZXRfYW5kX2NoZWNrX3Rvb2woYmIsIGQsICJnKysiKX0iCisgICAgIyBjYW5ub3QgdXNlIGljY19nZXRfYW5kX2NoZWNrX3Rvb2wgaGVyZSBiZWNhdXNlIGl0IGFzc3VtZXMgYXMgd2l0aG91dCB0YXJnZXRfc3lzIHByZWZpeAorICAgIElDRUNDX1dISUNIX0FTPSIke0BiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ2FzJyl9IgorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19DQ30iIC1vICEgLXggIiR7SUNFQ0NfQ1hYfSIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBjb3VsZCBub3QgZ2V0IElDRUNDX0NDIG9yIElDRUNDX0NYWCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRV9WRVJTSU9OPWAkSUNFQ0NfQ0MgLWR1bXB2ZXJzaW9uYAorICAgIElDRUNDX1ZFUlNJT049YGVjaG8gJHtJQ0VDQ19WRVJTSU9OfSB8IHNlZCAtZSAicy9AVkVSU0lPTkAvJElDRV9WRVJTSU9OL2ciYAorICAgIGlmIFsgISAteCAiJHtJQ0VDQ19FTlZfRVhFQ30iIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogaW52YWxpZCBJQ0VDQ19FTlZfRVhFQyIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRUNDX0FTPSJgJHtJQ0VDQ19DQ30gLXByaW50LXByb2ctbmFtZT1hc2AiCisgICAgIyBmb3IgdGFyZ2V0IHJlY2lwZXMgc2hvdWxkIHJldHVybiBzb21ldGhpbmcgbGlrZToKKyAgICAjIC9PRS90bXAtZWdsaWJjL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9hcm05MjB0dC1vZS1saW51eC1nbnVlYWJpL2djYy9hcm0tb2UtbGludXgtZ251ZWFiaS80LjguMi9hcworICAgICMgYW5kIGp1c3QgImFzIiBmb3IgbmF0aXZlLCBpZiBpdCByZXR1cm5zICJhcyIgaW4gY3VycmVudCBkaXJlY3RvcnkgKGZvciB3aGF0ZXZlciByZWFzb24pIHVzZSAiYXMiIGZyb20gUEFUSAorICAgIGlmIFsgImBkaXJuYW1lICIke0lDRUNDX0FTfSJgIiA9ICIuIiBdCisgICAgdGhlbgorICAgICAgICBJQ0VDQ19BUz0iJHtJQ0VDQ19XSElDSF9BU30iCisgICAgZmkKKworICAgIGlmIFsgISAtZiAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIiBdCisgICAgdGhlbgorICAgICAgICBta2RpciAtcCAiYGRpcm5hbWUgIiR7SUNFQ0NfVkVSU0lPTn0iYCIKKworICAgICAgICAjIHRoZSBJQ0VDQ19WRVJTSU9OIGdlbmVyYXRpb24gc3RlcCBtdXN0IGJlIGxvY2tlZCBieSBhIG11dGV4CisgICAgICAgICMgaW4gb3JkZXIgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaWYgZmxvY2sgLW4gIiR7SUNFQ0NfVkVSU0lPTn0ubG9jayIgXAorICAgICAgICAgICAgJHtJQ0VDQ19FTlZfRVhFQ30gIiR7SUNFQ0NfQ0N9IiAiJHtJQ0VDQ19DWFh9IiAiJHtJQ0VDQ19BU30iICIke0lDRUNDX1ZFUlNJT059IgorICAgICAgICB0aGVuCisgICAgICAgICAgICB0b3VjaCAiJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICBlbGlmIFsgISB3YWl0X2Zvcl9maWxlICIke0lDRUNDX1ZFUlNJT059LmRvbmUiIDMwIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBsb2NraW5nIGZhaWxlZCBzbyB3YWl0IGZvciAke0lDRUNDX1ZFUlNJT059LmRvbmUgdG8gYXBwZWFyCisgICAgICAgICAgICBiYndhcm4gIlRpbWVvdXQgd2FpdGluZyBmb3IgJHtJQ0VDQ19WRVJTSU9OfS5kb25lIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGV4cG9ydCBJQ0VDQ19WRVJTSU9OIElDRUNDX0NDIElDRUNDX0NYWAorICAgIGV4cG9ydCBQQVRIPSIkSUNFX1BBVEg6JFBBVEgiCisgICAgZXhwb3J0IENDQUNIRV9QQVRIPSIkUEFUSCIKKworICAgIGJibm90ZSAiVXNpbmcgaWNlY2MiCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIHNldF9pY2VjY19lbnYKK30KKworZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLWJ1aWxkaW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLWJ1aWxkaW5mby5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTdjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorIworIyBXcml0ZXMgYnVpbGQgaW5mb3JtYXRpb24gdG8gdGFyZ2V0IGZpbGVzeXN0ZW0gb24gL2V0Yy9idWlsZAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbGVqYW5kcm8gRW5lZGlubyBIZXJuYW5kZXogU2FtYW5pZWdvIDxhbGVqYW5kcm8uaGVybmFuZGV6QGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKyMKKyMgVXNhZ2U6IGFkZCBJTkhFUklUICs9ICJpbWFnZS1idWlsZGluZm8iIHRvIHlvdXIgY29uZiBmaWxlCisjCisKKyMgRGVzaXJlZCB2YXJpYWJsZXMgdG8gZGlzcGxheSAKK0lNQUdFX0JVSUxESU5GT19WQVJTID89ICJESVNUUk8gRElTVFJPX1ZFUlNJT04iCisKKyMgRnJvbSBidWlsZGhpc3RvcnkuYmJjbGFzcworZGVmIGltYWdlX2J1aWxkaW5mb19vdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKTogCisgICAgdmFycyA9IHZhcnMuc3BsaXQoKQorICAgIGxpc3R2YXJzID0gbGlzdHZhcnMuc3BsaXQoKQorICAgIHJldCA9ICIiCisgICAgZm9yIHZhciBpbiB2YXJzOgorICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgKGQuZ2V0VmFyRmxhZyh2YXIsICd0eXBlJykgPT0gImxpc3QiKToKKyAgICAgICAgICAgIHZhbHVlID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHZhbHVlKQorICAgICAgICByZXQgKz0gIiVzID0gJXNcbiIgJSAodmFyLCB2YWx1ZSkKKyAgICByZXR1cm4gcmV0LnJzdHJpcCgnXG4nKQorCisjIEdldHMgZ2l0IGJyYW5jaCdzIHN0YXR1cyAoY2xlYW4gb3IgZGlydHkpCitkZWYgZ2V0X2xheWVyX2dpdF9zdGF0dXMocGF0aCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGRpZmYgLS1zdGF0IDI+JjEgfCB0YWlsIC1uIDEiICUgcGF0aCkKKyAgICBkYXRhID0gZi5yZWFkKCkKKyAgICBpZiBmLmNsb3NlKCkgaXMgTm9uZToKKyAgICAgICAgaWYgbGVuKGRhdGEpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIi0tIG1vZGlmaWVkIgorICAgIHJldHVybiAiIgorCisjIFJldHVybnMgbGF5ZXIgcmV2aXNpb25zIGFsb25nIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBzdGF0dXMKK2RlZiBnZXRfbGF5ZXJfcmV2cyhkKToKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBtZWRhZGF0YV9yZXZzID0gWyIlLTE3cyA9ICVzOiVzICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKGkpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2goaSwgTm9uZSkuc3RyaXAoKSwgXAorICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24oaSwgTm9uZSksIFwKKyAgICAgICAgZ2V0X2xheWVyX2dpdF9zdGF0dXMoaSkpIFwKKyAgICAgICAgICAgIGZvciBpIGluIGxheWVyc10KKyAgICByZXR1cm4gJ1xuJy5qb2luKG1lZGFkYXRhX3JldnMpCisKK2RlZiBidWlsZGluZm9fdGFyZ2V0KGQpOgorICAgICAgICAjIEdldCBjb250ZXh0CisgICAgICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAjIFNpbmdsZSBhbmQgbGlzdCB2YXJpYWJsZXMgdG8gYmUgcmVhZAorICAgICAgICB2YXJzID0gKGQuZ2V0VmFyKCJJTUFHRV9CVUlMRElORk9fVkFSUyIsIFRydWUpIG9yICIiKQorICAgICAgICBsaXN0dmFycyA9IChkLmdldFZhcigiSU1BR0VfQlVJTERJTkZPX0xWQVJTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHJldHVybiBpbWFnZV9idWlsZGluZm9fb3V0cHV0dmFycyh2YXJzLCBsaXN0dmFycywgZCkKKworIyBXcml0ZSBidWlsZCBpbmZvcm1hdGlvbiB0byB0YXJnZXQgZmlsZXN5c3RlbQorYnVpbGRpbmZvICgpIHsKK2NhdCA+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vYnVpbGQgPDwgRU5ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnVpbGQgQ29uZmlndXJhdGlvbjogIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiske0BidWlsZGluZm9fdGFyZ2V0KGQpfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xheWVyIFJldmlzaW9uczogICAgICB8ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJHtAZ2V0X2xheWVyX3JldnMoZCl9CitFTkQKK30KKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJidWlsZGluZm87IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YTEzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1saXZlLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorCitBVVRPX1NZU0xJTlVYQ0ZHID0gIjEiCitJTklUUkRfSU1BR0UgPz0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTklUUkQgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0V9LSR7TUFDSElORX0uY3Bpby5neiIKK1NZU0xJTlVYX1JPT1QgPSAicm9vdD0vZGV2L3JhbTAiCitTWVNMSU5VWF9USU1FT1VUID89ICI1MCIKK1NZU0xJTlVYX0xBQkVMUyA/PSAiYm9vdCBpbnN0YWxsIgorTEFCRUxTX2FwcGVuZCA9ICIgJHtTWVNMSU5VWF9MQUJFTFN9ICIKKworUk9PVEZTID89ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0uZXh0NCIKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtJTklUUkRfSU1BR0V9OmRvX3Jvb3RmcyIKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKKworaW5oZXJpdCBib290aW1nCisKK0lNQUdFX1RZUEVERVBfbGl2ZSA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJsaXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLW1rbGlicy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLW1rbGlicy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTVhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MKQEAgLTAsMCArMSw3MSBAQAorZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJta2xpYnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCArPSAibWtsaWJzX29wdGltaXplX2ltYWdlOyAiCisKK21rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0KCkgeworCXJtIC1yZiAke1dPUktESVJ9L21rbGlicworCW1rZGlyIC1wICR7V09SS0RJUn0vbWtsaWJzL2Rlc3QKKwljZCAke0lNQUdFX1JPT1RGU30KKwlkdSAtYnMgPiAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dAorCWZvciBpIGluIGBmaW5kIC5gOyBkbyBmaWxlICRpOyBkb25lIFwKKwkJfCBncmVwIEVMRiBcCisJCXwgZ3JlcCAiTFNCICpleGVjdXRhYmxlIiBcCisJCXwgZ3JlcCAiZHluYW1pY2FsbHkgbGlua2VkIiBcCisJCXwgc2VkICJzLzouKi8vIiBcCisJCXwgc2VkICJzK15cLi8rKyIgXAorCQk+ICR7V09SS0RJUn0vbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3QKKworCWNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKwkJcG93ZXJwYyB8IG1pcHMgfCBtaXBzZWwgfCBtaWNyb2JsYXplICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC5zby4xIgorCQkJOzsKKwkJcG93ZXJwYzY0KQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkNjQuc28uMSIKKwkJCTs7CisJCXg4Nl82NCkKKwkJCWR5bmFtaWNfbG9hZGVyPSIke2Jhc2VfbGliZGlyfS9sZC1saW51eC14ODYtNjQuc28uMiIKKwkJCTs7CisJCWk1ODYgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjIiCisJCQk7OworCQlhcm0gKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LnNvLjMiCisJCQk7OworCQkqICkKKwkJCWR5bmFtaWNfbG9hZGVyPSIvdW5rbm93bl9keW5hbWljX2xpbmtlciIKKwkJCTs7CisJZXNhYworCisJbWtsaWJzIC12IFwKKwkJLS1sZGxpYiAke2R5bmFtaWNfbG9hZGVyfSBcCisJCS0tbGliZGlyICR7YmFzZWxpYn0gXAorCQktLXN5c3Jvb3QgJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSBcCisJCS0tZ2NjLW9wdGlvbnMgIi0tc3lzcm9vdD0ke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9IiBcCisJCS0tcm9vdCAke0lNQUdFX1JPT1RGU30gXAorCQktLXRhcmdldCBgZWNobyAke1RBUkdFVF9QUkVGSVh9IHwgc2VkICdzLy0kLy8nIGAgXAorCQktZCAke1dPUktESVJ9L21rbGlicy9kZXN0IFwKKwkJYGNhdCAke1dPUktESVJ9L21rbGlicy9leGVjdXRhYmxlcy5saXN0YAorCisJY2QgJHtXT1JLRElSfS9ta2xpYnMvZGVzdAorCWZvciBpIGluICoKKwlkbworCQljcCAkaSBgZmluZCAke0lNQUdFX1JPT1RGU30gLW5hbWUgJGlgCisJZG9uZQorCisJY2QgJHtJTUFHRV9ST09URlN9CisJZHUgLWJzID4gJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dAorCisJZWNobyByb290ZnMgc2l6ZSBiZWZvcmUgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAke1dPUktESVJ9L21rbGlicy9kdS5iZWZvcmUubWtsaWJzLnR4dGAKKwllY2hvIHJvb3RmcyBzaXplIGFmdGVyIG1rbGlicyBvcHRpbWl6YXRpb246IGBjYXQgJHtXT1JLRElSfS9ta2xpYnMvZHUuYWZ0ZXIubWtsaWJzLnR4dGAKK30KKworbWtsaWJzX29wdGltaXplX2ltYWdlKCkgeworCWZvciBpbWcgaW4gJHtNS0xJQlNfT1BUSU1JWkVEX0lNQUdFU30KKwlkbworCQlpZiBbICIke2ltZ30iID0gIiR7UE59IiBdIHx8IFsgIiR7aW1nfSIgPSAiYWxsIiBdCisJCXRoZW4KKwkJCW1rbGlic19vcHRpbWl6ZV9pbWFnZV9kb2l0CisJCQlicmVhaworCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZS1wcmVsaW5rLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmIzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtcHJlbGluay5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAicHJlbGluay1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJwcmVsaW5rX2ltYWdlOyAiCisKK3ByZWxpbmtfaW1hZ2UgKCkgeworIwlleHBvcnQgUFNFVURPX0RFQlVHPTQKKyMJL2Jpbi9lbnYgfCAvYmluL2dyZXAgUFNFVURPCisjCWVjaG8gIkxEX0xJQlJBUllfUEFUSD0kTERfTElCUkFSWV9QQVRIIgorIwllY2hvICJMRF9QUkVMT0FEPSRMRF9QUkVMT0FEIgorCisJcHJlX3ByZWxpbmtfc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAne3NpemUgPSAkMSA7IHByaW50IHNpemUgfSdgCisJZWNobyAiU2l6ZSBiZWZvcmUgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCisKKwkjIFdlIG5lZWQgYSBwcmVsaW5rIGNvbmYgb24gdGhlIGZpbGVzeXN0ZW0sIGFkZCBvbmUgaWYgaXQncyBtaXNzaW5nCisJaWYgWyAhIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mIF07IHRoZW4KKwkJY3AgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mIFwKKwkJCSR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJCWR1bW15X3ByZWxpbmtfY29uZj10cnVlOworCWVsc2UKKwkJZHVtbXlfcHJlbGlua19jb25mPWZhbHNlOworCWZpCisKKwkjIHByZWxpbmshCisJJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluayAtLXJvb3QgJHtJTUFHRV9ST09URlN9IC1hbVIgLU4gLWMgJHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKworCSMgUmVtb3ZlIHRoZSBwcmVsaW5rLmNvbmYgaWYgd2UgaGFkIHRvIGFkZCBpdC4KKwlpZiBbICIkZHVtbXlfcHJlbGlua19jb25mIiA9ICJ0cnVlIiBdOyB0aGVuCisJCXJtIC1mICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mCisJZmkKKworCXByZV9wcmVsaW5rX3NpemU9YGR1IC1rcyAke0lNQUdFX1JPT1RGU30gfCBhd2sgJ3tzaXplID0gJDEgOyBwcmludCBzaXplIH0nYAorCWVjaG8gIlNpemUgYWZ0ZXIgcHJlbGlua2luZyAkcHJlX3ByZWxpbmtfc2l6ZS4iCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2Utc3dhYi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTMxODU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ltYWdlLXN3YWIuYmJjbGFzcwpAQCAtMCwwICsxLDk0IEBACitIT1NUX0RBVEEgPz0gIiR7VE1QRElSfS9ob3N0LWNvbnRhbWluYXRpb24tZGF0YS8iCitTV0FCQkVSX1JFUE9SVCA/PSAiJHtMT0dfRElSfS9zd2FiYmVyLyIKK1NXQUJCRVJfTE9HUyA/PSAiJHtMT0dfRElSfS9jb250YW1pbmF0aW9uLWxvZ3MiCitUUkFDRV9MT0dESVIgPz0gIiR7U1dBQkJFUl9MT0dTfS8ke1BBQ0tBR0VfQVJDSH0iCitUUkFDRV9MT0dGSUxFID0gIiR7VFJBQ0VfTE9HRElSfS8ke1BOfS0ke1BWfSIKKworU1dBQl9PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCIKKworIyBTZXZlcmFsIHJlY2lwZXMgZG9uJ3QgYnVpbGQgd2l0aCBwYXJhbGxlbCBtYWtlIHdoZW4gcnVuIHVuZGVyIHN0cmFjZQorIyBJZGVhbGx5IHRoZXNlIHNob3VsZCBiZSBmaXhlZCBidXQgYXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBkaXNhYmxlIHBhcmFsbGVsCisjIGJ1aWxkcyBmb3IgdHJvdWJsZXNvbWUgcmVjaXBlcworUEFSQUxMRUxfTUFLRV9wbi1vcGVuc3NsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2xpYmMgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbGliLTIuMCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhtbDIgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1yZWFkbGluZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXV0aWwtbGludXggPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1iaW51dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJpc29uID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY21ha2UgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1lbGZ1dGlscyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdjYy1ydW50aW1lID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbTQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1vcGtnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcGtnY29uZmlnID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcHJlbGluayA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXJwbSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXRjbCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJlZWNyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tY3VybCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdtcCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYm1wYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWxpYnhzbHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1sem8gPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wb3B0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGludXgtd3JzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGliZ2NyeXB0ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ3BnbWUgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi11ZGV2ID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ251dGxzID0gIiIKKworcHl0aG9uKCkgeworICAgICMgTk9URTogSXQgbWlnaHQgYmUgdXNlZnVsIHRvIGRldGVjdCBob3N0IGluZmVjdGlvbiBvbiBuYXRpdmUgYW5kIGNyb3NzCisgICAgIyBwYWNrYWdlcyBidXQgYXMgaXQgdHVybnMgb3V0IHRvIGJlIHByZXR0eSBoYXJkIHRvIGRvIHRoaXMgZm9yIGFsbCBuYXRpdmUKKyAgICAjIGFuZCBjcm9zcyBwYWNrYWdlcyB3aGljaCBhcmVuJ3Qgc3dhYmJlci1uYXRpdmUgb3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMKKyAgICAjIEkgaGF2ZSBpZ25vcmVkIHRoZW0gZm9yIG5vdy4uLgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZGVwcyA9IChkLmdldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnKSBvciAiIikuc3BsaXQoKQorICAgICAgICBkZXBzLmFwcGVuZCgnc3RyYWNlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19zZXRzY2VuZScsICdkZXBlbmRzJywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGxvZ2RpciA9IGQuZXhwYW5kKCIke1RSQUNFX0xPR0RJUn0iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9nZGlyKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTVFJBQ0VGVU5DJywgJycpCit9CisKK1NUUkFDRVBJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCitTVFJBQ0VGVU5DID0gImltYWdlc3dhYl9hdHRhY2hzdHJhY2UiCisKK2RvX2NvbmZpZ3VyZVtwcmVmdW5jc10gKz0gIiR7U1RSQUNFRlVOQ30iCitkb19jb21waWxlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKKworaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSAoKSB7CisJU1RSQUNFPWB3aGljaCBzdHJhY2VgCisKKwlpZiBbIC14ICIkU1RSQUNFIiBdOyB0aGVuCisJCXN3YWJiZXItc3RyYWNlLWF0dGFjaCAiJFNUUkFDRSAtZiAtbyAke1RSQUNFX0xPR0ZJTEV9LSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyAtZSB0cmFjZT1vcGVuLGV4ZWN2ZSAtcCAke1NUUkFDRVBJRH0iICIke1RSQUNFX0xPR0ZJTEV9LXRyYWNlYXR0YWNoLSR7QkJfQ1VSUkVOVFRBU0t9LmxvZyIKKwlmaQorfQorCitkb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCAoKSB7CisKKwl1cGRhdGVfZGlzdHJvICR7SE9TVF9EQVRBfQorCisJIyBTd2FiYmVyIGNhbid0IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB1cworCW1rZGlyIC1wICR7U1dBQkJFUl9SRVBPUlR9CisKKwlSRVBPUlRTVEFNUD0ke1NXQUJfT1JJR19UQVNLfS1gZGF0ZSArJTJtJTJkJTJIJTJNJVlgCisKKwlpZiBbIGB3aGljaCBjY2FjaGVgIF0gOyB0aGVuCisJCUNDQUNIRV9ESVI9YCggY2NhY2hlIC1zIHwgZ3JlcCAiY2FjaGUgZGlyZWN0b3J5IiB8IGdyZXAgLW8gJ1teIF0qJCcgMj4gL2Rldi9udWxsIClgCisgCWZpCisKKwlpZiBbICIkKGxzIC1BICR7SE9TVF9EQVRBfSkiIF07IHRoZW4KKwkJZWNobyAiR2VuZXJhdGluZyBzd2FiYmVyIHJlcG9ydCIKKwkJc3dhYmJlciAtZCAke0hPU1RfREFUQX0gLWwgJHtTV0FCQkVSX0xPR1N9IC1vICR7U1dBQkJFUl9SRVBPUlR9L3JlcG9ydC0ke1JFUE9SVFNUQU1QfS50eHQgLXIgJHtTV0FCQkVSX1JFUE9SVH0vZXh0cmFfcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtYyBhbGwgLXAgJHtUT1BESVJ9IC1mICR7T0VST09UfS9tZXRhL2NvbmYvc3dhYmJlciAke1RPUERJUn0gJHtPRVJPT1R9ICR7Q0NBQ0hFX0RJUn0KKwllbHNlCisJCWVjaG8gIk5vIGhvc3QgZGF0YSwgY2Fubm90IGdlbmVyYXRlIHN3YWJiZXIgcmVwb3J0LiIKKwlmaQorfQorYWRkdGFzayBnZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydCBhZnRlciBkb18ke1NXQUJfT1JJR19UQVNLfQorZG9fZ2VuZXJhdGVfc3dhYmJlcl9yZXBvcnRbZGVwZW5kc10gPSAic3dhYmJlci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzMjY2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS12bS5iYmNsYXNzCkBAIC0wLDAgKzEsNDkgQEAKKworU1lTTElOVVhfUFJPTVBUID89ICIwIgorU1lTTElOVVhfTEFCRUxTID0gImJvb3QiCitMQUJFTFNfYXBwZW5kID0gIiAke1NZU0xJTlVYX0xBQkVMU30gIgorCisjIFVzaW5nIGFuIGluaXRyYW1mcyBpcyBvcHRpb25hbC4gRW5hYmxlIGl0IGJ5IHNldHRpbmcgSU5JVFJEX0lNQUdFLgorSU5JVFJEX0lNQUdFID89ICIiCitJTklUUkQgPz0gIiR7QCcke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJEX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8uZ3onIGlmICcke0lOSVRSRF9JTUFHRX0nIGVsc2UgJyd9IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7QCcke0lOSVRSRF9JTUFHRX06ZG9fcm9vdGZzJyBpZiAnJHtJTklUUkRfSU1BR0V9JyBlbHNlICcnfSIKKworIyBuZWVkIHRvIGRlZmluZSB0aGUgZGVwZW5kZW5jeSBhbmQgdGhlIFJPT1RGUyBmb3IgZGlyZWN0ZGlzaworZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7UE59OmRvX3Jvb3RmcyIKK1JPT1RGUyA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LmV4dDQiCisKKyMgY3JlYXRpbmcgVk0gaW1hZ2VzIHJlbGllcyBvbiBoYXZpbmcgYSBoZGRpbWcgc28gZW5zdXJlIHdlIGluaGVyaXQgaXQgaGVyZS4KK2luaGVyaXQgYm9vdC1kaXJlY3RkaXNrCisKK0lNQUdFX1RZUEVERVBfdm1kayA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF92ZGkgPSAiZXh0NCIKK0lNQUdFX1RZUEVERVBfcWNvdzIgPSAiZXh0NCIKK0lNQUdFX1RZUEVTX01BU0tFRCArPSAidm1kayB2ZGkgcWNvdzIiCisKK2NyZWF0ZV92bWRrX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGRpcmVjdCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kaworICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnZtZGsgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udm1kaworfQorCitjcmVhdGVfdmRpX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHZkaSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52ZGkKKyAgICBsbiAtc2YgJHtJTUFHRV9OQU1FfS52ZGkgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0udmRpCit9CisKK2NyZWF0ZV9xY293Ml9pbWFnZSAoKSB7CisgICAgcWVtdS1pbWcgY29udmVydCAtTyBxY293MiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5xY293MgorICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnFjb3cyICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LnFjb3cyCit9CisKK3B5dGhvbiBkb192bWltZygpIHsKKyAgICBpZiAndm1kaycgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdm1ka19pbWFnZScsIGQpCisgICAgaWYgJ3ZkaScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfdmRpX2ltYWdlJywgZCkKKyAgICBpZiAncWNvdzInIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX3Fjb3cyX2ltYWdlJywgZCkKK30KKworYWRkdGFzayB2bWltZyBhZnRlciBkb19ib290ZGlyZWN0ZGlzayBiZWZvcmUgZG9fYnVpbGQKK2RvX3ZtaW1nW2RlcGVuZHNdICs9ICJxZW11LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2Q2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDUwNCBAQAoraW5oZXJpdCByb290ZnNfJHtJTUFHRV9QS0dUWVBFfQorCitpbmhlcml0IHBvcHVsYXRlX3Nka19leHQKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLICs9ICIke1BBQ0tBR0VfSU5TVEFMTH0iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgKz0gIiR7UEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZfSIKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EICs9ICJyb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzOyAiCisKK2luaGVyaXQgZ3ppcG5hdGl2ZQorCitMSUNFTlNFID0gIk1JVCIKK1BBQ0tBR0VTID0gIiIKK0RFUEVORFMgKz0gIiR7TUxQUkVGSVh9cWVtdXdyYXBwZXItY3Jvc3MgJHtNTFBSRUZJWH1kZXBtb2R3cmFwcGVyLWNyb3NzIgorUkRFUEVORFMgKz0gIiR7UEFDS0FHRV9JTlNUQUxMfSAke0xJTkdVQVNfSU5TVEFMTH0iCitSUkVDT01NRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitURVNUSU1BR0VDTEFTUyA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdURVNUX0lNQUdFJywgJzEnLCAndGVzdGltYWdlLWF1dG8nLCAnJywgZCl9IgoraW5oZXJpdCAke1RFU1RJTUFHRUNMQVNTfQorCisjIElNQUdFX0ZFQVRVUkVTIG1heSBjb250YWluIGFueSBhdmFpbGFibGUgcGFja2FnZSBncm91cAorSU1BR0VfRkVBVFVSRVMgPz0gIiIKK0lNQUdFX0ZFQVRVUkVTW3R5cGVdID0gImxpc3QiCitJTUFHRV9GRUFUVVJFU1t2YWxpZGl0ZW1zXSArPSAiZGVidWctdHdlYWtzIHJlYWQtb25seS1yb290ZnMgZW1wdHktcm9vdC1wYXNzd29yZCBhbGxvdy1lbXB0eS1wYXNzd29yZCBwb3N0LWluc3RhbGwtbG9nZ2luZyIKKworIyBHZW5lcmF0ZSBjb21wYW5pb24gZGVidWdmcz8KK0lNQUdFX0dFTl9ERUJVR0ZTID89ICIwIgorCisjIHJvb3RmcyBib290c3RyYXAgaW5zdGFsbAorUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLCAiIiwgIiR7Uk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVB9IixkKX0iCisKKyMgcGFja2FnZXMgdG8gaW5zdGFsbCBmcm9tIGZlYXR1cmVzCitGRUFUVVJFX0lOU1RBTEwgPSAiJHtAJyAnLmpvaW4ob2UucGFja2FnZWdyb3VwLnJlcXVpcmVkX3BhY2thZ2VzKG9lLmRhdGEudHlwZWRfdmFsdWUoJ0lNQUdFX0ZFQVRVUkVTJywgZCksIGQpKX0iCitGRUFUVVJFX0lOU1RBTExbdmFyZGVwdmFsdWVdID0gIiR7RkVBVFVSRV9JTlNUQUxMfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAub3B0aW9uYWxfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKK0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTFt2YXJkZXB2YWx1ZV0gPSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgorCisjIERlZmluZSBzb21lIHZlcnkgYmFzaWMgZmVhdHVyZSBwYWNrYWdlIGdyb3VwcworRkVBVFVSRV9QQUNLQUdFU19wYWNrYWdlLW1hbmFnZW1lbnQgPSAiJHtST09URlNfUEtHTUFOQUdFfSIKK1NQTEFTSCA/PSAicHNwbGFzaCIKK0ZFQVRVUkVfUEFDS0FHRVNfc3BsYXNoID0gIiR7U1BMQVNIfSIKKworSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZID0gJyR7QGNvbXBsZW1lbnRhcnlfZ2xvYnMoIklNQUdFX0ZFQVRVUkVTIiwgZCl9JworCitkZWYgY2hlY2tfaW1hZ2VfZmVhdHVyZXMoZCk6CisgICAgdmFsaWRfZmVhdHVyZXMgPSAoZC5nZXRWYXJGbGFnKCdJTUFHRV9GRUFUVVJFUycsICd2YWxpZGl0ZW1zJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YWxpZF9mZWF0dXJlcyArPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKS5rZXlzKCkKKyAgICBmb3IgdmFyIGluIGQ6CisgICAgICAgaWYgdmFyLnN0YXJ0c3dpdGgoIlBBQ0tBR0VfR1JPVVBfIik6CisgICAgICAgICAgIGJiLndhcm4oIlBBQ0tBR0VfR1JPVVAgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBGRUFUVVJFX1BBQ0tBR0VTIGluc3RlYWQiKQorICAgICAgICAgICB2YWxpZF9mZWF0dXJlcy5hcHBlbmQodmFyWzE0Ol0pCisgICAgICAgZWxpZiB2YXIuc3RhcnRzd2l0aCgiRkVBVFVSRV9QQUNLQUdFU18iKToKKyAgICAgICAgICAgdmFsaWRfZmVhdHVyZXMuYXBwZW5kKHZhclsxNzpdKQorICAgIHZhbGlkX2ZlYXR1cmVzLnNvcnQoKQorCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gdmFsaWRfZmVhdHVyZXM6CisgICAgICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygnRVhUUkFfSU1BR0VfRkVBVFVSRVMnLCBmZWF0dXJlLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiJyVzJyBpbiBJTUFHRV9GRUFUVVJFUyAoYWRkZWQgdmlhIEVYVFJBX0lNQUdFX0ZFQVRVUkVTKSBpcyBub3QgYSB2YWxpZCBpbWFnZSBmZWF0dXJlLiBWYWxpZCBmZWF0dXJlczogJXMiICUgKGZlYXR1cmUsICcgJy5qb2luKHZhbGlkX2ZlYXR1cmVzKSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBSZWNpcGUoIiclcycgaW4gSU1BR0VfRkVBVFVSRVMgaXMgbm90IGEgdmFsaWQgaW1hZ2UgZmVhdHVyZS4gVmFsaWQgZmVhdHVyZXM6ICVzIiAlIChmZWF0dXJlLCAnICcuam9pbih2YWxpZF9mZWF0dXJlcykpKQorCitJTUFHRV9JTlNUQUxMID89ICIiCitJTUFHRV9JTlNUQUxMW3R5cGVdID0gImxpc3QiCitleHBvcnQgUEFDS0FHRV9JTlNUQUxMID89ICIke0lNQUdFX0lOU1RBTEx9ICR7Uk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMfSAke0ZFQVRVUkVfSU5TVEFMTH0iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkgPz0gIiR7RkVBVFVSRV9JTlNUQUxMX09QVElPTkFMfSIKKworIyBJbWFnZXMgYXJlIGdlbmVyYWxseSBidWlsdCBleHBsaWNpdGx5LCBkbyBub3QgbmVlZCB0byBiZSBwYXJ0IG9mIHdvcmxkLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1VTRV9ERVZGUyA/PSAiMSIKK1VTRV9ERVBNT0QgPz0gIjEiCisKK1BJRCA9ICIke0Bvcy5nZXRwaWQoKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0xEQ09ORklHREVQRU5EID89ICJsZGNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0xEQ09ORklHREVQRU5EX2xpYmMtdWNsaWJjID0gIiIKK0xEQ09ORklHREVQRU5EX2xpYmMtbXVzbCA9ICIiCisKKyMgVGhpcyBpcyBuZWVkZWQgdG8gaGF2ZSBkZXBtb2QgZGF0YSBpbiBQS0dEQVRBX0RJUiwKKyMgYnV0IGlmIHlvdSdyZSBidWlsZGluZyBzbWFsbCBpbml0cmFtZnMgaW1hZ2UKKyMgZS5nLiB0byBpbmNsdWRlIGl0IGluIHlvdXIga2VybmVsLCB5b3UgcHJvYmFibHkKKyMgZG9uJ3Qgd2FudCB0aGlzIGRlcGVuZGVuY3ksIHdoaWNoIGlzIGNhdXNpbmcgZGVwZW5kZW5jeSBsb29wCitLRVJORUxERVBNT0RERVBFTkQgPz0gInZpcnR1YWwva2VybmVsOmRvX3BhY2thZ2VkYXRhIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gIiBcCisgICAgbWFrZWRldnMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCAke0xEQ09ORklHREVQRU5EfSBcCisgICAgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHVwZGF0ZS1yYy5kLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAke0tFUk5FTERFUE1PRERFUEVORH0gXAorIgorZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZWRhdGEiCisKK2RlZiBjb21tYW5kX3ZhcmlhYmxlcyhkKToKKyAgICByZXR1cm4gWydST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCdJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJywKKyAgICAgICAgICAgICdJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQnLCdST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCcsJ1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EJywnU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsICAgICAgICAgCisgICAgICAgICAgICAnUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworcHl0aG9uICgpIHsKKyAgICB2YXJpYWJsZXMgPSBjb21tYW5kX3ZhcmlhYmxlcyhkKQorICAgIGZvciB2YXIgaW4gdmFyaWFibGVzOgorICAgICAgICBpZiBkLmdldFZhcih2YXIsIEZhbHNlKToKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZyh2YXIsICdmdW5jJywgJzEnKQorfQorCitkZWYgcm9vdGZzX3ZhcmlhYmxlcyhkKToKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgdmFyaWFibGVfZGVwZW5kcworICAgIHZhcmlhYmxlcyA9IFsnSU1BR0VfREVWSUNFX1RBQkxFUycsJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywnSU1BR0VfVFlQRURFUF8nLCdJTUFHRV9UWVBFU19NQVNLRUQnLCdJTUFHRV9ST09URlNfQUxJR05NRU5UJywnSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywnSU1BR0VfUk9PVEZTX1NJWkUnLCdJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UnLAorICAgICAgICAgICAgICAgICAnSU1BR0VfUk9PVEZTX01BWFNJWkUnLCdJTUFHRV9OQU1FJywnSU1BR0VfTElOS19OQU1FJywnSU1BR0VfTUFOSUZFU1QnLCdERVBMT1lfRElSX0lNQUdFJywnUk1fT0xEX0lNQUdFJywnSU1BR0VfRlNUWVBFUycsJ0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ0lNQUdFX0xJTkdVQVMnLCdTREtfT1MnLAorICAgICAgICAgICAgICAgICAnU0RLX09VVFBVVCcsJ1NES1BBVEhOQVRJVkUnLCdTREtUQVJHRVRTWVNST09UJywnU0RLX0RJUicsJ1NES19WRU5ET1InLCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCdTREtfUEFDS0FHRV9BUkNIUycsJ1NES19PVVRQVVQnLCdTREtUQVJHRVRTWVNST09UJywnTVVMVElMSUJSRV9BTExPV19SRVAnLAorICAgICAgICAgICAgICAgICAnTVVMVElMSUJfVEVNUF9ST09URlMnLCdNVUxUSUxJQl9WQVJJQU5UUycsJ01VTFRJTElCUycsJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywnTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywnQkFEX1JFQ09NTUVOREFUSU9OUycsJ05PX1JFQ09NTUVOREFUSU9OUycsJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAnUEFDS0FHRV9DTEFTU0VTJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9WRU5ET1InLCdUQVJHRVRfQVJDSCcsJ1RBUkdFVF9PUycsJ09WRVJSSURFUycsJ0JCRVhURU5EVkFSSUFOVCcsJ0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJJywnSU5URVJDRVBUX0RJUicsJ1VTRV9ERVZGUycsCisgICAgICAgICAgICAgICAgICdDT01QUkVTU0lPTlRZUEVTJywgJ0lNQUdFX0dFTl9ERUJVR0ZTJ10KKyAgICB2YXJpYWJsZXMuZXh0ZW5kKGNvbW1hbmRfdmFyaWFibGVzKGQpKQorICAgIHZhcmlhYmxlcy5leHRlbmQodmFyaWFibGVfZGVwZW5kcyhkKSkKKyAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFibGVzKQorCitkb19yb290ZnNbdmFyZGVwc10gKz0gIiR7QHJvb3Rmc192YXJpYWJsZXMoZCl9IgorCitkb19idWlsZFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fZGVwbG95IgorCitkZWYgYnVpbGRfbGl2ZShkKToKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRlNUWVBFUyIsICJsaXZlIiwgImxpdmUiLCAiMCIsIGQpID09ICIwIjogIyBsaXZlIGlzIG5vdCBzZXQgYnV0IGhvYiBtaWdodCBzZXQgaXNvIG9yIGhkZGltZworICAgICAgICBkLnNldFZhcignTk9JU08nLCBiYi51dGlscy5jb250YWlucygnSU1BR0VfRlNUWVBFUycsICJpc28iLCAiMCIsICIxIiwgZCkpCisgICAgICAgIGQuc2V0VmFyKCdOT0hERCcsIGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9GU1RZUEVTJywgImhkZGltZyIsICIwIiwgIjEiLCBkKSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ05PSVNPJywgVHJ1ZSkgPT0gIjAiIG9yIGQuZ2V0VmFyKCdOT0hERCcsIFRydWUpID09ICIwIjoKKyAgICAgICAgICAgIHJldHVybiAiaW1hZ2UtbGl2ZSIKKyAgICAgICAgcmV0dXJuICIiCisgICAgcmV0dXJuICJpbWFnZS1saXZlIgorCitJTUFHRV9UWVBFX2xpdmUgPSAiJHtAYnVpbGRfbGl2ZShkKX0iCitpbmhlcml0ICR7SU1BR0VfVFlQRV9saXZlfQorCitJTUFHRV9UWVBFX3ZtID0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRlNUWVBFUyIsIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiXSwgImltYWdlLXZtIiwgIiIsIGQpfScKK2luaGVyaXQgJHtJTUFHRV9UWVBFX3ZtfQorCitweXRob24gKCkgeworICAgIGRlcHMgPSAiICIgKyBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCkKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3Jvb3RmcycsICdkZXBlbmRzJywgZGVwcykKKworICAgIGRlcHMgPSAiIgorICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdFWFRSQV9JTUFHRURFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgZGVwcykKKworICAgICNwcm9jZXNzIElNQUdFX0ZFQVRVUkVTLCB3ZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUKKyAgICAjQ2hlY2sgZm9yIHJlcGxhY2VzIGltYWdlIGZlYXR1cmVzCisgICAgZmVhdHVyZXMgPSBzZXQob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSkKKyAgICByZW1haW5fZmVhdHVyZXMgPSBmZWF0dXJlcy5jb3B5KCkKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgcmVwbGFjZXMgPSBzZXQoKGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFU19SRVBMQUNFU18lcyIgJSBmZWF0dXJlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgcmVtYWluX2ZlYXR1cmVzIC09IHJlcGxhY2VzCisKKyAgICAjQ2hlY2sgZm9yIGNvbmZsaWN0IGltYWdlIGZlYXR1cmVzCisgICAgZm9yIGZlYXR1cmUgaW4gcmVtYWluX2ZlYXR1cmVzOgorICAgICAgICBjb25mbGljdHMgPSBzZXQoKGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFU19DT05GTElDVFNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgIHRlbXAgPSBjb25mbGljdHMgJiByZW1haW5fZmVhdHVyZXMKKyAgICAgICAgaWYgdGVtcDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBjb250YWlucyBjb25mbGljdGluZyBJTUFHRV9GRUFUVVJFUyAlcyAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGZlYXR1cmUsICcgJy5qb2luKGxpc3QodGVtcCkpKSkKKworICAgIGQuc2V0VmFyKCdJTUFHRV9GRUFUVVJFUycsICcgJy5qb2luKGxpc3QocmVtYWluX2ZlYXR1cmVzKSkpCisKKyAgICBjaGVja19pbWFnZV9mZWF0dXJlcyhkKQorICAgIGluaXRyYW1mc19pbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnLCBUcnVlKSBvciAiIgorICAgIGlmIGluaXRyYW1mc19pbWFnZSAhPSAiIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idWlsZCcsICdkZXBlbmRzJywgIiAlczpkb19idW5kbGVfaW5pdHJhbWZzIiAlICBkLmdldFZhcignUE4nLCBUcnVlKSkKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idW5kbGVfaW5pdHJhbWZzJywgJ2RlcGVuZHMnLCAiICVzOmRvX3Jvb3RmcyIgJSBpbml0cmFtZnNfaW1hZ2UpCit9CisKK0lNQUdFX0NMQVNTRVMgKz0gImltYWdlX3R5cGVzIgoraW5oZXJpdCAke0lNQUdFX0NMQVNTRVN9CisKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQgPz0gIiIKKworIyBaYXAgdGhlIHJvb3QgcGFzc3dvcmQgaWYgZGVidWctdHdlYWtzIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZFQVRVUkVTIiwgWyAnZGVidWctdHdlYWtzJywgJ2VtcHR5LXJvb3QtcGFzc3dvcmQnIF0sICIiLCAiemFwX2VtcHR5X3Jvb3RfcGFzc3dvcmQgOyAiLGQpfScKKworIyBBbGxvdyBkcm9wYmVhci9vcGVuc3NoIHRvIGFjY2VwdCBsb2dpbnMgZnJvbSBhY2NvdW50cyB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAnYWxsb3ctZW1wdHktcGFzc3dvcmQnIF0sICJzc2hfYWxsb3dfZW1wdHlfcGFzc3dvcmQ7ICIsICIiLGQpfScKKworIyBFbmFibGUgcG9zdGluc3QgbG9nZ2luZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAncG9zdC1pbnN0YWxsLWxvZ2dpbmcnIF0sICJwb3N0aW5zdF9lbmFibGVfbG9nZ2luZzsgIiwgIiIsZCl9JworCisjIENyZWF0ZSAvZXRjL3RpbWVzdGFtcCBkdXJpbmcgaW1hZ2UgY29uc3RydWN0aW9uIHRvIGdpdmUgYSByZWFzb25hYmx5IHNhbmUgZGVmYXVsdCB0aW1lIHNldHRpbmcKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICJyb290ZnNfdXBkYXRlX3RpbWVzdGFtcCA7ICIKKworIyBUd2VhayB0aGUgbW91bnQgb3B0aW9ucyBmb3Igcm9vdGZzIGluIC9ldGMvZnN0YWIgaWYgcmVhZC1vbmx5LXJvb3RmcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLCAicmVhZF9vbmx5X3Jvb3Rmc19ob29rOyAiLCAiIixkKX0nCisKKyMgV3JpdGUgbWFuaWZlc3QKK0lNQUdFX01BTklGRVNUID0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMubWFuaWZlc3QiCitST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EID0rICJ3cml0ZV9pbWFnZV9tYW5pZmVzdCA7ICIKKyMgU2V0IGRlZmF1bHQgcG9zdGluc3QgbG9nIGZpbGUKK1BPU1RJTlNUX0xPR0ZJTEUgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL3Bvc3RpbnN0YWxsLmxvZyIKKyMgU2V0IGRlZmF1bHQgdGFyZ2V0IGZvciBzeXN0ZW1kIGltYWdlcworU1lTVEVNRF9ERUZBVUxUX1RBUkdFVCA/PSAnJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgIngxMS1iYXNlIiwgImdyYXBoaWNhbC50YXJnZXQiLCAibXVsdGktdXNlci50YXJnZXQiLCBkKX0nCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInNldF9zeXN0ZW1kX2RlZmF1bHRfdGFyZ2V0OyAiLCAiIiwgZCl9JworCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnZW1wdHlfdmFyX3ZvbGF0aWxlOycKKworIyBzb21lIGRlZmF1bHQgbG9jYWxlcworSU1BR0VfTElOR1VBUyA/PSAiZGUtZGUgZnItZnIgZW4tZ2IiCisKK0xJTkdVQVNfSU5TVEFMTCA/PSAiJHtAIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAibG9jYWxlLWJhc2UtJXMiICUgcywgZC5nZXRWYXIoJ0lNQUdFX0xJTkdVQVMnLCBUcnVlKS5zcGxpdCgpKSl9IgorCisjIFByZWZlciBpbWFnZSwgYnV0IHVzZSB0aGUgZmFsbGJhY2sgZmlsZXMgZm9yIGxvb2t1cHMgaWYgdGhlIGltYWdlIG9uZXMKKyMgYXJlbid0IHlldCBhdmFpbGFibGUuCitQU0VVRE9fUEFTU1dEID0gIiR7SU1BR0VfUk9PVEZTfToke1NUQUdJTkdfRElSX05BVElWRX0iCisKK2RvX3Jvb3Rmc1tkaXJzXSA9ICIke1RPUERJUn0iCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtJTUFHRV9ST09URlN9LmxvY2siCitkb19yb290ZnNbY2xlYW5kaXJzXSArPSAiJHtTfSIKKworIyBNdXN0IGNhbGwgcmVhbF9kb19yb290ZnMoKSBmcm9tIGluc2lkZSBoZXJlLCByYXRoZXIgdGhhbiBhcyBhIHNlcGFyYXRlCisjIHRhc2ssIHNvIHRoYXQgd2UgaGF2ZSBhIHNpbmdsZSBmYWtlcm9vdCBjb250ZXh0IGZvciB0aGUgd2hvbGUgcHJvY2Vzcy4KK2RvX3Jvb3Rmc1t1bWFza10gPSAiMDIyIgorCisjIEEgaG9vayBmdW5jdGlvbiB0byBzdXBwb3J0IHJlYWQtb25seS1yb290ZnMgSU1BR0VfRkVBVFVSRVMKK3JlYWRfb25seV9yb290ZnNfaG9vayAoKSB7CisJIyBUd2VhayB0aGUgbW91bnQgb3B0aW9uIGFuZCBmc19wYXNzbm8gZm9yIHJvb3RmcyBpbiBmc3RhYgorCXNlZCAtaSAtZSAnL15bI1s6c3BhY2U6XV0qXC9kZXZcL3Jvb3Qve3MvZGVmYXVsdHMvcm8vO3MvXChbWzpzcGFjZTpdXSpbWzpkaWdpdDpdXVwpXChbWzpzcGFjZTpdXSpcKVtbOmRpZ2l0Ol1dJC9cMVwyMC99JyAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgInRydWUiLCAiZmFsc2UiLCBkKX07IHRoZW4KKwkJIyBDaGFuZ2UgdGhlIHZhbHVlIG9mIFJPT1RGU19SRUFEX09OTFkgaW4gL2V0Yy9kZWZhdWx0L3JjUyB0byB5ZXMKKwkJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvcmNTIF07IHRoZW4KKwkJCXNlZCAtaSAncy9ST09URlNfUkVBRF9PTkxZPW5vL1JPT1RGU19SRUFEX09OTFk9eWVzLycgJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3JjUworCQlmaQorCQkjIFJ1biBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSB0byBzZXQgdXAgYmFzaWMgZmlsZXMKKwkJIyBhbmQgZGlyZWN0b3JpZXMgdG8gc3VwcG9ydCByZWFkLW9ubHkgcm9vdGZzLgorCQlpZiBbIC14ICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoCisJCWZpCisJCSMgSWYgd2UncmUgdXNpbmcgb3BlbnNzaCBhbmQgdGhlIC9ldGMvc3NoIGRpcmVjdG9yeSBoYXMgbm8gcHJlLWdlbmVyYXRlZCBrZXlzLAorCQkjIHdlIHNob3VsZCBjb25maWd1cmUgb3BlbnNzaCB0byB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCQkjIGFuZCB0aGUga2V5cyB1bmRlciAvdmFyL3J1bi9zc2guCisJCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9L2V0Yy9zc2ggXTsgdGhlbgorCQkJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5IF07IHRoZW4KKwkJCQllY2hvICJTWVNDT05GRElSPS9ldGMvc3NoIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQkJZWNobyAiU1NIRF9PUFRTPSIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJZWxzZQorCQkJCWVjaG8gIlNZU0NPTkZESVI9L3Zhci9ydW4vc3NoIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQkJZWNobyAiU1NIRF9PUFRTPSctZiAvZXRjL3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seSciID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCWZpCisJCWZpCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICJ0cnVlIiwgImZhbHNlIiwgZCl9OyB0aGVuCisJICAgICMgVXBkYXRlIHVzZXIgZGF0YWJhc2UgZmlsZXMgc28gdGhhdCBzZXJ2aWNlcyBkb24ndCBmYWlsIGZvciBhIHJlYWQtb25seSBzeXN0ZW1kIHN5c3RlbQorCSAgICBmb3IgY29uZmZpbGUgaW4gJHtJTUFHRV9ST09URlN9L3Vzci9saWIvc3lzdXNlcnMuZC9zeXN0ZW1kLmNvbmYgJHtJTUFHRV9ST09URlN9L3Vzci9saWIvc3lzdXNlcnMuZC9zeXN0ZW1kLXJlbW90ZS5jb25mOyBkbworCQlbIC1lICRjb25mZmlsZSBdIHx8IGNvbnRpbnVlCisJCWdyZXAgLXYgIl4jIiAkY29uZmZpbGUgfCBzZWQgLWUgJy9eJC9kJyB8IHdoaWxlIHJlYWQgdHlwZSBuYW1lIGlkIGNvbW1lbnQ7IGRvCisJCSAgICBpZiBbICIkdHlwZSIgPSAidSIgXTsgdGhlbgorCQkJdXNlcmFkZF9wYXJhbXM9IiIKKwkJCVsgIiRpZCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLXVpZCAkaWQiCisJCQlbICIkY29tbWVudCIgIT0gIi0iIF0gJiYgdXNlcmFkZF9wYXJhbXM9IiR1c2VyYWRkX3BhcmFtcyAtLWNvbW1lbnQgJGNvbW1lbnQiCisJCQl1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCB1c2VyYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJHVzZXJhZGRfcGFyYW1zIHx8IHRydWUKKwkJICAgIGVsaWYgWyAiJHR5cGUiID0gImciIF07IHRoZW4KKwkJCWdyb3VwYWRkX3BhcmFtcz0iIgorCQkJWyAiJGlkIiAhPSAiLSIgXSAmJiBncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1naWQgJGlkIgorCQkJZ3JvdXBhZGRfcGFyYW1zPSIkZ3JvdXBhZGRfcGFyYW1zIC0tc3lzdGVtICRuYW1lIgorCQkJZXZhbCBncm91cGFkZCAtLXJvb3QgJHtJTUFHRV9ST09URlN9ICRncm91cGFkZF9wYXJhbXMgfHwgdHJ1ZQorCQkgICAgZmkKKwkJZG9uZQorCSAgICBkb25lCisJZmkKK30KKworUEFDS0FHRV9FWENMVURFID8/PSAiIgorUEFDS0FHRV9FWENMVURFW3R5cGVdID0gImxpc3QiCisKK3B5dGhvbiByb290ZnNfcHJvY2Vzc19pZ25vcmUoKSB7CisgICAgZXhjbF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpLnNwbGl0KCkKKyAgICBpbnN0X3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGluc3RfYXR0ZW1wdF9wa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsIFRydWUpLnNwbGl0KCkKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFX0lOU1RBTExfT1JJRycsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWScsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKKworICAgIGZvciBwa2cgaW4gZXhjbF9wa2dzOgorICAgICAgICBpZiBwa2cgaW4gaW5zdF9wa2dzOgorICAgICAgICAgICAgYmIud2FybigiUGFja2FnZSAlcywgc2V0IHRvIGJlIGV4Y2x1ZGVkLCBpcyBpbiAlcyBQQUNLQUdFX0lOU1RBTEwgKCVzKS4gIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiIgJSAocGtnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgaW5zdF9wa2dzKSkKKyAgICAgICAgICAgIGluc3RfcGtncy5yZW1vdmUocGtnKQorCisgICAgICAgIGlmIHBrZyBpbiBpbnN0X2F0dGVtcHRfcGtnczoKKyAgICAgICAgICAgIGJiLndhcm4oIlBhY2thZ2UgJXMsIHNldCB0byBiZSBleGNsdWRlZCwgaXMgaW4gJXMgUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZICglcykuICBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4iICUgKHBrZywgZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGluc3RfcGtncykpCisgICAgICAgICAgICBpbnN0X2F0dGVtcHRfcGtncy5yZW1vdmUocGtnKQorCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsICcgJy5qb2luKGluc3RfcGtncykpCisgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSIsICcgJy5qb2luKGluc3RfYXR0ZW1wdF9wa2dzKSkKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19wcm9jZXNzX2lnbm9yZSIKKworIyBXZSBoYXZlIHRvIGRlbGF5IHRoZSBydW50aW1lX21hcHBpbmdfcmVuYW1lIHVudGlsIGp1c3QgYmVmb3JlIHJvb3RmcyBydW5zCisjIG90aGVyd2lzZSwgdGhlIG11bHRpbGliIHJlbmFtaW5nIGNvdWxkIHN0ZXAgaW4gYW5kIHNxdWFzaCBhbnkgZml4dXBzIHRoYXQKKyMgbWF5IGhhdmUgb2NjdXJyZWQuCitweXRob24gcm9vdGZzX3J1bnRpbWVfbWFwcGluZygpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUEFDS0FHRV9JTlNUQUxMIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiQkFEX1JFQ09NTUVOREFUSU9OUyIsIHBuLCBkKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX3J1bnRpbWVfbWFwcGluZyIKKworZmFrZXJvb3QgcHl0aG9uIGRvX3Jvb3RmcyAoKSB7CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGNyZWF0ZV9yb290ZnMKKyAgICBmcm9tIG9lLmltYWdlIGltcG9ydCBjcmVhdGVfaW1hZ2UKKyAgICBmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCBjcmVhdGVfbWFuaWZlc3QKKworICAgICMgZ2VuZXJhdGUgdGhlIGluaXRpYWwgbWFuaWZlc3QKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCkKKworICAgICMgZ2VuZXJhdGUgcm9vdGZzCisgICAgY3JlYXRlX3Jvb3RmcyhkKQorCisgICAgIyBnZW5lcmF0ZSBmaW5hbCBpbWFnZXMKKyAgICBjcmVhdGVfaW1hZ2UoZCkKK30KKworaW5zZXJ0X2ZlZWRfdXJpcyAoKSB7CisJCisJZWNobyAiQnVpbGRpbmcgZmVlZHMgZm9yIFske0RJU1RST31dLi4iCisKKwlmb3IgbGluZSBpbiAke0ZFRURfVVJJU30KKwlkbworCQkjIHN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy90YWJzLCB0aGVuIHNwbGl0IGludG8gbmFtZSBhbmQgdXJpCisJCWxpbmVfY2xlYW49ImBlY2hvICIkbGluZSJ8c2VkICdzL15bIFx0XSovLztzL1sgXHRdKiQvLydgIgorCQlmZWVkX25hbWU9ImBlY2hvICIkbGluZV9jbGVhbiIgfCBzZWQgLW4gJ3MvXCguKlwpIyNcKC4qXCkvXDEvcCdgIgorCQlmZWVkX3VyaT0iYGVjaG8gIiRsaW5lX2NsZWFuIiB8IHNlZCAtbiAncy9cKC4qXCkjI1woLipcKS9cMi9wJ2AiCisJCQorCQllY2hvICJBZGRlZCAkZmVlZF9uYW1lIGZlZWQgd2l0aCBVUkwgJGZlZWRfdXJpIgorCQkKKwkJIyBpbnNlcnQgbmV3IGZlZWQtc291cmNlcworCQllY2hvICJzcmMvZ3ogJGZlZWRfbmFtZSAkZmVlZF91cmkiID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvb3BrZy8ke2ZlZWRfbmFtZX0tZmVlZC5jb25mCisJZG9uZQorfQorCitNVUxUSUxJQlJFX0FMTE9XX1JFUCA9LiAiJHtiYXNlX2JpbmRpcn18JHtiYXNlX3NiaW5kaXJ9fCR7YmluZGlyfXwke3NiaW5kaXJ9fCR7bGliZXhlY2Rpcn18JHtzeXNjb25mZGlyfXwke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXZ8L2xpYi9tb2R1bGVzL1teL10qL21vZHVsZXMuKnwiCitNVUxUSUxJQl9DSEVDS19GSUxFID0gIiR7V09SS0RJUn0vbXVsdGlsaWJfY2hlY2sucHkiCitNVUxUSUxJQl9URU1QX1JPT1RGUyA9ICIke1dPUktESVJ9L211bHRpbGliIgorCisjIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gZGlzYWxsb3cgZW1wdHkgcm9vdCBwYXNzd29yZCBpZiAnZGVidWctdHdlYWtzJyBpcyBub3QgaW4gSU1BR0VfRkVBVFVSRVMuCit6YXBfZW1wdHlfcm9vdF9wYXNzd29yZCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3NoYWRvdyBdOyB0aGVuCisJCXNlZCAtaSAncyVecm9vdDo6JXJvb3Q6KjolJyAke0lNQUdFX1JPT1RGU30vZXRjL3NoYWRvdworICAgICAgICBmaQorCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9L2V0Yy9wYXNzd2QgXTsgdGhlbgorCQlzZWQgLWkgJ3MlXnJvb3Q6OiVyb290Oio6JScgJHtJTUFHRV9ST09URlN9L2V0Yy9wYXNzd2QKKwlmaQorfSAKKworIyBhbGxvdyBkcm9wYmVhci9vcGVuc3NoIHRvIGFjY2VwdCByb290IGxvZ2lucyBhbmQgbG9naW5zIGZyb20gYWNjb3VudHMgd2l0aCBhbiBlbXB0eSBwYXNzd29yZCBzdHJpbmcKK3NzaF9hbGxvd19lbXB0eV9wYXNzd29yZCAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZyBdOyB0aGVuCisJCXNlZCAtaSAncy9eWyNbOnNwYWNlOl1dKlBlcm1pdFJvb3RMb2dpbi4qL1Blcm1pdFJvb3RMb2dpbiB5ZXMvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZworCQlzZWQgLWkgJ3MvXlsjWzpzcGFjZTpdXSpQZXJtaXRFbXB0eVBhc3N3b3Jkcy4qL1Blcm1pdEVtcHR5UGFzc3dvcmRzIHllcy8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9JHtzYmluZGlyfS9kcm9wYmVhciBdIDsgdGhlbgorCQlpZiBncmVwIC1xIERST1BCRUFSX0VYVFJBX0FSR1MgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyIDI+L2Rldi9udWxsIDsgdGhlbgorCQkJaWYgISBncmVwIC1xICJEUk9QQkVBUl9FWFRSQV9BUkdTPS4qLUIiICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhciA7IHRoZW4KKwkJCQlzZWQgLWkgJ3MvXkRST1BCRUFSX0VYVFJBX0FSR1M9IipcKFteIl0qXCkiKi9EUk9QQkVBUl9FWFRSQV9BUkdTPSJcMSAtQiIvJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIKKwkJCWZpCisJCWVsc2UKKwkJCXByaW50ZiAnXG5EUk9QQkVBUl9FWFRSQV9BUkdTPSItQiJcbicgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyCisJCWZpCisJZmkKKworCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wYW0uZCBdIDsgdGhlbgorCQlzZWQgLWkgJ3MvbnVsbG9rX3NlY3VyZS9udWxsb2svJyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3BhbS5kLyoKKwlmaQorfQorCisjIERpc2FibGUgRE5TIGxvb2t1cHMsIHRoZSBTU0hfRElTQUJMRV9ETlNfTE9PS1VQIGNhbiBiZSBvdmVycmlkZGVuIHRvIGFsbG93CisjIGRpc3Ryb3MgdG8gY2hvb3NlIG5vdCB0byB0YWtlIHRoaXMgY2hhbmdlCitTU0hfRElTQUJMRV9ETlNfTE9PS1VQID89ICIgc3NoX2Rpc2FibGVfZG5zX2xvb2t1cCA7ICIKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX2FwcGVuZF9xZW11YWxsID0gIiR7U1NIX0RJU0FCTEVfRE5TX0xPT0tVUH0iCitzc2hfZGlzYWJsZV9kbnNfbG9va3VwICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzOiNVc2VETlMgeWVzOlVzZUROUyBubzonICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKK30KKworIyBFbmFibGUgcG9zdGluc3QgbG9nZ2luZyBpZiBkZWJ1Zy10d2Vha3MgaXMgZW5hYmxlZAorcG9zdGluc3RfZW5hYmxlX2xvZ2dpbmcgKCkgeworCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWVjaG8gIlBPU1RJTlNUX0xPR0dJTkc9MSIgPj4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3Bvc3RpbnN0CisJZWNobyAiTE9HRklMRT0ke1BPU1RJTlNUX0xPR0ZJTEV9IiA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcG9zdGluc3QKK30KKworIyBNb2RpZnkgc3lzdGVtZCBkZWZhdWx0IHRhcmdldAorc2V0X3N5c3RlbWRfZGVmYXVsdF90YXJnZXQgKCkgeworCWlmIFsgLWQgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbSAtYSAtZSAke0lNQUdFX1JPT1RGU30ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyR7U1lTVEVNRF9ERUZBVUxUX1RBUkdFVH0gXTsgdGhlbgorCQlsbiAtc2YgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8ke1NZU1RFTURfREVGQVVMVF9UQVJHRVR9ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZGVmYXVsdC50YXJnZXQKKwlmaQorfQorCisjIElmIC92YXIvdm9sYXRpbGUgaXMgbm90IGVtcHR5LCB3ZSBoYXZlIHNlZW4gcHJvYmxlbXMgd2hlcmUgcHJvZ3JhbXMgc3VjaCBhcyB0aGUKKyMgam91cm5hbCBtYWtlIGFzc3VtcHRpb25zIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiAvdmFyL3ZvbGF0aWxlLiBUaGUgam91cm5hbAorIyB3b3VsZCB0aGVuIHdyaXRlIHRvIC92YXIvdm9sYXRpbGUgYmVmb3JlIGl0IHdhcyBtb3VudGVkLCB0aHVzIGhpZGluZyB0aGUKKyMgaXRlbXMgcHJldmlvdXNseSB3cml0dGVuLgorIworIyBUaGlzIGNoYW5nZSBpcyB0byBhdHRlbXB0IHRvIGZpeCB0aG9zZSB0eXBlcyBvZiBpc3N1ZXMgaW4gYSB3YXkgdGhhdCBkb2Vzbid0CisjIGFmZmVjdCB1c2VycyB0aGF0IG1heSBub3QgYmUgdXNpbmcgL3Zhci92b2xhdGlsZS4KK2VtcHR5X3Zhcl92b2xhdGlsZSAoKSB7CisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiIF07IHRoZW4KKwkJbWF0Y2g9YGF3ayAnJDEgIX4gIiMiICYmICQyIH4gL1wvdmFyXC92b2xhdGlsZS97cHJpbnQgJDJ9JyAke0lNQUdFX1JPT1RGU30vZXRjL2ZzdGFiIDI+IC9kZXYvbnVsbGAKKwkJaWYgWyAtbiAiJG1hdGNoIiBdOyB0aGVuCisJCQlmaW5kICR7SU1BR0VfUk9PVEZTfS92YXIvdm9sYXRpbGUgLW1pbmRlcHRoIDEgLWRlbGV0ZQorCQlmaQorCWZpCit9CisKKyMgVHVybiBhbnkgc3ltYm9saWMgL3NiaW4vaW5pdCBsaW5rIGludG8gYSBmaWxlCityZW1vdmVfaW5pdF9saW5rICgpIHsKKwlpZiBbIC1oICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgXTsgdGhlbgorCQlMSU5LRklMRT0ke0lNQUdFX1JPT1RGU31gcmVhZGxpbmsgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdGAKKwkJcm0gJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdAorCQljcCAkTElOS0ZJTEUgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdAorCWZpCit9CisKK21ha2VfemltYWdlX3N5bWxpbmtfcmVsYXRpdmUgKCkgeworCWlmIFsgLUwgJHtJTUFHRV9ST09URlN9L2Jvb3QvekltYWdlIF07IHRoZW4KKwkJKGNkICR7SU1BR0VfUk9PVEZTfS9ib290LyAmJiBmb3IgaSBpbiBgbHMgekltYWdlLSogfCBzb3J0YDsgZG8gbG4gLXNmICRpIHpJbWFnZTsgZG9uZSkKKwlmaQorfQorCitweXRob24gd3JpdGVfaW1hZ2VfbWFuaWZlc3QgKCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHdpdGggb3BlbihkLmdldFZhcignSU1BR0VfTUFOSUZFU1QnLCBUcnVlKSwgJ3crJykgYXMgaW1hZ2VfbWFuaWZlc3Q6CisgICAgICAgIGltYWdlX21hbmlmZXN0LndyaXRlKGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsICd2ZXInKSkKKyAgICAgICAgaW1hZ2VfbWFuaWZlc3Qud3JpdGUoIlxuIikKK30KKworIyBDYW4gYmUgdXNlIHRvIGNyZWF0ZSAvZXRjL3RpbWVzdGFtcCBkdXJpbmcgaW1hZ2UgY29uc3RydWN0aW9uIHRvIGdpdmUgYSByZWFzb25hYmx5IAorIyBzYW5lIGRlZmF1bHQgdGltZSBzZXR0aW5nCityb290ZnNfdXBkYXRlX3RpbWVzdGFtcCAoKSB7CisJZGF0ZSAtdSArJTRZJTJtJTJkJTJIJTJNJTJTID4ke0lNQUdFX1JPT1RGU30vZXRjL3RpbWVzdGFtcAorfQorCisjIFByZXZlbnQgWCBmcm9tIGJlaW5nIHN0YXJ0ZWQKK3Jvb3Rmc19ub194X3N0YXJ0dXAgKCkgeworCWlmIFsgLWYgJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQveHNlcnZlci1ub2RtIF07IHRoZW4KKwkJY2htb2QgYS14ICR7SU1BR0VfUk9PVEZTfS9ldGMvaW5pdC5kL3hzZXJ2ZXItbm9kbQorCWZpCit9CisKK3Jvb3Rmc190cmltX3NjaGVtYXMgKCkgeworCWZvciBzY2hlbWEgaW4gJHtJTUFHRV9ST09URlN9L2V0Yy9nY29uZi9zY2hlbWFzLyouc2NoZW1hcworCWRvCisJCSMgTmVlZCB0aGlzIGluIGNhc2Ugbm8gZmlsZXMgZXhpc3QKKwkJaWYgWyAtZSAkc2NoZW1hIF07IHRoZW4KKwkJCW9lLXRyaW0tc2NoZW1hcyAkc2NoZW1hID4gJHNjaGVtYS5uZXcKKwkJCW12ICRzY2hlbWEubmV3ICRzY2hlbWEKKwkJZmkKKwlkb25lCit9CisKK3Jvb3Rmc19jaGVja19ob3N0X3VzZXJfY29udGFtaW5hdGVkICgpIHsKKwljb250YW1pbmF0ZWQ9IiR7V09SS0RJUn0vaG9zdC11c2VyLWNvbnRhbWluYXRlZC50eHQiCisJSE9TVF9VU0VSX1VJRD0iJChQU0VVRE9fVU5MT0FEPTEgaWQgLXUpIgorCUhPU1RfVVNFUl9HSUQ9IiQoUFNFVURPX1VOTE9BRD0xIGlkIC1nKSIKKworCWZpbmQgIiR7SU1BR0VfUk9PVEZTfSIgLXdob2xlbmFtZSAiJHtJTUFHRV9ST09URlN9L2hvbWUiIC1wcnVuZSBcCisJICAgIC11c2VyICIkSE9TVF9VU0VSX1VJRCIgLW8gLWdyb3VwICIkSE9TVF9VU0VSX0dJRCIgPiIkY29udGFtaW5hdGVkIgorCisJaWYgWyAtcyAiJGNvbnRhbWluYXRlZCIgXTsgdGhlbgorCQllY2hvICJXQVJOSU5HOiBQYXRocyBpbiB0aGUgcm9vdGZzIGFyZSBvd25lZCBieSB0aGUgc2FtZSB1c2VyIG9yIGdyb3VwIGFzIHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4gU2VlIHRoZSBsb2dmaWxlIGZvciB0aGUgc3BlY2lmaWMgcGF0aHMuIgorCQljYXQgIiRjb250YW1pbmF0ZWQiIHwgc2VkICJzLF4sICAsIgorCWZpCit9CisKKyMgTWFrZSBhbnkgYWJzb2x1dGUgbGlua3MgaW4gYSBzeXNyb290IHJlbGF0aXZlCityb290ZnNfc3lzcm9vdF9yZWxhdGl2ZWxpbmtzICgpIHsKKwlzeXNyb290LXJlbGF0aXZlbGlua3MucHkgJHtTREtfT1VUUFVUfS8ke1NES1RBUkdFVFNZU1JPT1R9Cit9CisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3FhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKKworYWRkdGFzayByb290ZnMgYmVmb3JlIGRvX2J1aWxkCisjIEFsbG93IHRoZSBrZXJuZWwgdG8gYmUgcmVwYWNrZWQgd2l0aCB0aGUgaW5pdHJhbWZzIGFuZCBib290IGltYWdlIGZpbGUgYXMgYSBzaW5nbGUgZmlsZQorZG9fYnVuZGxlX2luaXRyYW1mc1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fYnVuZGxlX2luaXRyYW1mcyIKK2RvX2J1bmRsZV9pbml0cmFtZnNbbm9zdGFtcF0gPSAiMSIKK2RvX2J1bmRsZV9pbml0cmFtZnNbbm9leGVjXSA9ICIxIgorZG9fYnVuZGxlX2luaXRyYW1mcyAoKSB7CisJOgorfQorYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX3Jvb3RmcwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDY0MDNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzLmJiY2xhc3MKQEAgLTAsMCArMSwyNjAgQEAKKworIyBUaGUgZGVmYXVsdCBhbGlnbWVudCBvZiB0aGUgc2l6ZSBvZiB0aGUgcm9vdGZzIGlzIHNldCB0byAxS2lCLiBJbiBjYXNlCisjIHlvdSdyZSB1c2luZyB0aGUgU0QgY2FyZCBlbXVsYXRpb24gb2YgYSBRRU1VIHN5c3RlbSBzaW11bGF0b3IgeW91IG1heQorIyBzZXQgdGhpcyB2YWx1ZSB0byAyMDQ4ICgyTWlCIGFsaWdubWVudCkuCitJTUFHRV9ST09URlNfQUxJR05NRU5UID89ICIxIgorCitkZWYgaW1hZ2V0eXBlc19nZXRkZXBlbmRzKGQpOgorICAgIGRlZiBhZGRkZXAoZGVwc3RyLCBkZXBzKToKKyAgICAgICAgZm9yIGkgaW4gKGRlcHN0ciBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgbm90IGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoaSkKKworICAgIGRlcHMgPSBbXQorICAgIGN0eXBlcyA9IGQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciB0eXBlIGluIChkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBpZiB0eXBlIGluIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiLCAibGl2ZSIsICJpc28iLCAiaGRkaW1nIl06CisgICAgICAgICAgICB0eXBlID0gImV4dDQiCisgICAgICAgIGJhc2V0eXBlID0gdHlwZQorICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgaWYgdHlwZS5lbmRzd2l0aCgiLiIgKyBjdHlwZSk6CisgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoIkNPTVBSRVNTX0RFUEVORFNfJXMiICUgY3R5cGUsIFRydWUpLCBkZXBzKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZvciB0eXBlZGVwZW5kcyBpbiAoZC5nZXRWYXIoIklNQUdFX1RZUEVERVBfJXMiICUgYmFzZXR5cGUsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIHR5cGVkZXBlbmRzLCBUcnVlKSAsIGRlcHMpCisgICAgICAgIGFkZGRlcChkLmdldFZhcignSU1BR0VfREVQRU5EU18lcycgJSBiYXNldHlwZSwgVHJ1ZSkgLCBkZXBzKQorCisgICAgZGVwc3RyID0gIiIKKyAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgIGRlcHN0ciArPSAiICIgKyBkZXAgKyAiOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisgICAgcmV0dXJuIGRlcHN0cgorCisKK1haX0NPTVBSRVNTSU9OX0xFVkVMID89ICItZSAtNiIKK1haX0lOVEVHUklUWV9DSEVDSyA/PSAiY3JjMzIiCitYWl9USFJFQURTID89ICItVCAwIgorCitKRkZTMl9TVU1fRVhUUkFfQVJHUyA/PSAiIgorSU1BR0VfQ01EX2pmZnMyID0gIm1rZnMuamZmczIgLS1yb290PSR7SU1BR0VfUk9PVEZTfSAtLWZha2V0aW1lIC0tb3V0cHV0PSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuamZmczIgJHtFWFRSQV9JTUFHRUNNRH0iCisKK0lNQUdFX0NNRF9jcmFtZnMgPSAibWtmcy5jcmFtZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3JhbWZzICR7RVhUUkFfSU1BR0VDTUR9IgorCitvZV9ta2V4dDIzNGZzICgpIHsKKwlmc3R5cGU9JDEKKwlleHRyYV9pbWFnZWNtZD0iIgorCisJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJCXNoaWZ0CisJCWV4dHJhX2ltYWdlY21kPSRACisJZmkKKworCSMgSWYgZ2VuZXJhdGluZyBhbiBlbXB0eSBpbWFnZSB0aGUgc2l6ZSBvZiB0aGUgc3BhcnNlIGJsb2NrIHNob3VsZCBiZSBsYXJnZQorCSMgZW5vdWdoIHRvIGFsbG9jYXRlIGFuIGV4dDQgZmlsZXN5c3RlbSB1c2luZyA0MDk2IGJ5dGVzIHBlciBpbm9kZSwgdGhpcyBpcworCSMgYWJvdXQgNjBLLCBzbyBkZCBuZWVkcyBhIG1pbmltdW0gY291bnQgb2YgNjAsIHdpdGggYnM9MTAyNCAoYnl0ZXMgcGVyIElPKQorCWV2YWwgbG9jYWwgQ09VTlQ9XCIwXCIKKwlldmFsIGxvY2FsIE1JTl9DT1VOVD1cIjYwXCIKKwlpZiBbICRST09URlNfU0laRSAtbHQgJE1JTl9DT1VOVCBdOyB0aGVuCisJCWV2YWwgQ09VTlQ9XCIkTUlOX0NPVU5UXCIKKwlmaQorCSMgQ3JlYXRlIGEgc3BhcnNlIGltYWdlIGJsb2NrCisJZGQgaWY9L2Rldi96ZXJvIG9mPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuJGZzdHlwZSBzZWVrPSRST09URlNfU0laRSBjb3VudD0kQ09VTlQgYnM9MTAyNAorCW1rZnMuJGZzdHlwZSAtRiAkZXh0cmFfaW1hZ2VjbWQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy4kZnN0eXBlIC1kICR7SU1BR0VfUk9PVEZTfQorfQorCitJTUFHRV9DTURfZXh0MiA9ICJvZV9ta2V4dDIzNGZzIGV4dDIgJHtFWFRSQV9JTUFHRUNNRH0iCitJTUFHRV9DTURfZXh0MyA9ICJvZV9ta2V4dDIzNGZzIGV4dDMgJHtFWFRSQV9JTUFHRUNNRH0iCitJTUFHRV9DTURfZXh0NCA9ICJvZV9ta2V4dDIzNGZzIGV4dDQgJHtFWFRSQV9JTUFHRUNNRH0iCisKK01JTl9CVFJGU19TSVpFID89ICIxNjM4NCIKK0lNQUdFX0NNRF9idHJmcyAoKSB7CisJaWYgWyAke1JPT1RGU19TSVpFfSAtZ3QgJHtNSU5fQlRSRlNfU0laRX0gXTsgdGhlbgorCQlkZCBpZj0vZGV2L3plcm8gb2Y9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5idHJmcyBjb3VudD0ke1JPT1RGU19TSVpFfSBicz0xMDI0CisJCW1rZnMuYnRyZnMgJHtFWFRSQV9JTUFHRUNNRH0gLXIgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuYnRyZnMKKwllbHNlCisJCWJiZmF0YWwgIlJvb3RmcyBpcyB0b28gc21hbGwgZm9yIEJUUkZTIChSb290ZnMgQWN0dWFsIFNpemU6ICR7Uk9PVEZTX1NJWkV9LCBCVFJGUyBNaW5pbXVtIFNpemU6ICR7TUlOX0JUUkZTX1NJWkV9KSIKKwlmaQorfQorCitJTUFHRV9DTURfc3F1YXNoZnMgPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcyAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQiCitJTUFHRV9DTURfc3F1YXNoZnMteHogPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcy14eiAke0VYVFJBX0lNQUdFQ01EfSAtbm9hcHBlbmQgLWNvbXAgeHoiCitJTUFHRV9DTURfc3F1YXNoZnMtbHpvID0gIm1rc3F1YXNoZnMgJHtJTUFHRV9ST09URlN9ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuc3F1YXNoZnMtbHpvICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCBsem8iCisKKyMgQnkgZGVmYXVsdCwgdGFyIGZyb20gdGhlIGhvc3QgaXMgdXNlZCwgd2hpY2ggY2FuIGJlIHF1aXRlIG9sZC4gSWYKKyMgeW91IG5lZWQgc3BlY2lhbCBwYXJhbWV0ZXJzIChsaWtlIC0teGF0dHJzKSB3aGljaCBhcmUgb25seSBzdXBwb3J0ZWQKKyMgYnkgR05VIHRhciB1cHN0cmVhbSA+PSAxLjI3LCB0aGVuIG92ZXJyaWRlIHRoYXQgZGVmYXVsdDoKKyMgSU1BR0VfQ01EX1RBUiA9ICJ0YXIgLS14YXR0cnMgLS14YXR0cnMtaW5jbHVkZT0qIgorIyBJTUFHRV9ERVBFTkRTX3Rhcl9hcHBlbmQgPSAiIHRhci1yZXBsYWNlbWVudC1uYXRpdmUiCisjIEVYVFJBTkFUSVZFUEFUSCArPSAidGFyLW5hdGl2ZSIKKyMKKyMgVGhlIEdOVSBkb2N1bWVudGF0aW9uIGRvZXMgbm90IHNwZWNpZnkgd2hldGhlciAtLXhhdHRycy1pbmNsdWRlIGlzIG5lY2Vzc2FyeS4KKyMgSW4gcHJhY3RpY2UsIGl0IHR1cm5lZCBvdXQgdG8gYmUgbm90IG5lZWRlZCB3aGVuIGNyZWF0aW5nIGFyY2hpdmVzIGFuZAorIyByZXF1aXJlZCB3aGVuIGV4dHJhY3RpbmcsIGJ1dCBpdCBzZWVtcyBwcnVkZW50IHRvIHVzZSBpdCBpbiBib3RoIGNhc2VzLgorSU1BR0VfQ01EX1RBUiA/PSAidGFyIgorSU1BR0VfQ01EX3RhciA9ICIke0lNQUdFX0NNRF9UQVJ9IC1jdmYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy50YXIgLUMgJHtJTUFHRV9ST09URlN9IC4iCisKK2RvX3Jvb3Rmc1tjbGVhbmRpcnNdICs9ICIke1dPUktESVJ9L2NwaW9fYXBwZW5kIgorSU1BR0VfQ01EX2NwaW8gKCkgeworCShjZCAke0lNQUdFX1JPT1RGU30gJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8pCisJaWYgWyAhIC1MICR7SU1BR0VfUk9PVEZTfS9pbml0IC1hICEgLWUgJHtJTUFHRV9ST09URlN9L2luaXQgXTsgdGhlbgorCQlpZiBbIC1MICR7SU1BR0VfUk9PVEZTfS9zYmluL2luaXQgLW8gLWUgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCBdOyB0aGVuCisJCQlsbiAtc2YgL3NiaW4vaW5pdCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJZWxzZQorCQkJdG91Y2ggJHtXT1JLRElSfS9jcGlvX2FwcGVuZC9pbml0CisJCWZpCisJCShjZCAgJHtXT1JLRElSfS9jcGlvX2FwcGVuZCAmJiBlY2hvIC4vaW5pdCB8IGNwaW8gLW9BIC1IIG5ld2MgLUYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcGlvKQorCWZpCit9CisKK0VMRl9LRVJORUwgPz0gIiR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL3NyYy9rZXJuZWwvJHtLRVJORUxfSU1BR0VUWVBFfSIKK0VMRl9BUFBFTkQgPz0gInJhbWRpc2tfc2l6ZT0zMjc2OCByb290PS9kZXYvcmFtMCBydyBjb25zb2xlPSIKKworSU1BR0VfQ01EX2VsZiAoKSB7CisJdGVzdCAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZiAmJiBybSAtZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZgorCW1rZWxmSW1hZ2UgLS1rZXJuZWw9JHtFTEZfS0VSTkVMfSAtLWluaXRyZD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8uZ3ogLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5lbGYgLS1hcHBlbmQ9JyR7RUxGX0FQUEVORH0nICR7RVhUUkFfSU1BR0VDTUR9Cit9CitJTUFHRV9UWVBFREVQX2VsZiA9ICJjcGlvLmd6IgorCitVQklfVk9MTkFNRSA/PSAiJHtNQUNISU5FfS1yb290ZnMiCisKK211bHRpdWJpX21rZnMoKSB7CisJbG9jYWwgbWt1Ymlmc19hcmdzPSIkMSIKKwlsb2NhbCB1YmluaXplX2FyZ3M9IiQyIgorCWlmIFsgLXogIiQzIiBdOyB0aGVuCisJCWxvY2FsIHZuYW1lPSIiCisJZWxzZQorCQlsb2NhbCB2bmFtZT0iXyQzIgorCWZpCisKKwllY2hvIFxbdWJpZnNcXSA+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIG1vZGU9dWJpID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIGltYWdlPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfaWQ9MCA+PiB1YmluaXplJHt2bmFtZX0uY2ZnCisJZWNobyB2b2xfdHlwZT1keW5hbWljID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9uYW1lPSR7VUJJX1ZPTE5BTUV9ID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9mbGFncz1hdXRvcmVzaXplID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwlta2ZzLnViaWZzIC1yICR7SU1BR0VfUk9PVEZTfSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgJHtta3ViaWZzX2FyZ3N9CisJdWJpbml6ZSAtbyAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpICR7dWJpbml6ZV9hcmdzfSB1YmluaXplJHt2bmFtZX0uY2ZnCisKKwkjIENsZWFudXAgY2ZnIGZpbGUKKwltdiB1YmluaXplJHt2bmFtZX0uY2ZnICR7REVQTE9ZX0RJUl9JTUFHRX0vCisKKwkjIENyZWF0ZSBvd24gc3ltbGluaworCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwlpZiBbIC1lICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpZnMgXTsgdGhlbgorCQlsbiAtc2YgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyBcCisJCSR7SU1BR0VfTElOS19OQU1FfSR7dm5hbWV9LnViaWZzCisJZmkKKwlpZiBbIC1lICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpIF07IHRoZW4KKwkJbG4gLXNmICR7SU1BR0VfTkFNRX0ke3ZuYW1lfS5yb290ZnMudWJpIFwKKwkJJHtJTUFHRV9MSU5LX05BTUV9JHt2bmFtZX0udWJpCisJZmkKKwljZCAtCit9CisKK0lNQUdFX0NNRF9tdWx0aXViaSAoKSB7CisJIyBTcGxpdCBNS1VCSUZTX0FSR1NfPG5hbWU+IGFuZCBVQklOSVpFX0FSR1NfPG5hbWU+CisJZm9yIG5hbWUgaW4gJHtNVUxUSVVCSV9CVUlMRH07IGRvCisJCWV2YWwgbG9jYWwgbWt1Ymlmc19hcmdzPVwiXCRNS1VCSUZTX0FSR1NfJHtuYW1lfVwiCisJCWV2YWwgbG9jYWwgdWJpbml6ZV9hcmdzPVwiXCRVQklOSVpFX0FSR1NfJHtuYW1lfVwiCisKKwkJbXVsdGl1YmlfbWtmcyAiJHtta3ViaWZzX2FyZ3N9IiAiJHt1YmluaXplX2FyZ3N9IiAiJHtuYW1lfSIKKwlkb25lCit9CisKK0lNQUdFX0NNRF91YmkgKCkgeworCW11bHRpdWJpX21rZnMgIiR7TUtVQklGU19BUkdTfSIgIiR7VUJJTklaRV9BUkdTfSIKK30KKworSU1BR0VfQ01EX3ViaWZzID0gIm1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMudWJpZnMgJHtNS1VCSUZTX0FSR1N9IgorCitJTUFHRV9DTURfd2ljICgpIHsKKwlvdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9CisJd2tzPSR7RklMRV9ESVJOQU1FfS8ke0lNQUdFX0JBU0VOQU1FfS4ke01BQ0hJTkV9LndrcworCVsgLWUgJHdrcyBdIHx8IHdrcz0ke0ZJTEVfRElSTkFNRX0vJHtJTUFHRV9CQVNFTkFNRX0ud2tzCisJWyAtZSAkd2tzIF0gfHwgYmJmYXRhbCAiS2lza3N0YXJ0IGZpbGUgJHdrcyBkb2Vzbid0IGV4aXN0IgorCUJVSUxERElSPSR7VE9QRElSfSB3aWMgY3JlYXRlICR3a3MgLS12YXJzICR7U1RBR0lOR19ESVJfVEFSR0VUfS9pbWdkYXRhLyAtZSAke0lNQUdFX0JBU0VOQU1FfSAtbyAkb3V0LworCW12ICRvdXQvYnVpbGQvJHtJTUFHRV9CQVNFTkFNRX0qLmRpcmVjdCAkb3V0LnJvb3Rmcy53aWMKKwlybSAtcmYgJG91dC8KK30KKworRVhUUkFfSU1BR0VDTUQgPSAiIgorCitpbmhlcml0IHNpdGVpbmZvCitKRkZTMl9FTkRJQU5ORVNTID89ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdTSVRFSU5GT19FTkRJQU5ORVNTJywgJ2xlJywgJy1sJywgJy1iJywgZCl9IgorSkZGUzJfRVJBU0VCTE9DSyA/PSAiMHg0MDAwMCIKK0VYVFJBX0lNQUdFQ01EX2pmZnMyID89ICItLXBhZCAke0pGRlMyX0VORElBTk5FU1N9IC0tZXJhc2VibG9jaz0ke0pGRlMyX0VSQVNFQkxPQ0t9IC0tbm8tY2xlYW5tYXJrZXJzIgorCisjIENoYW5nZSB0aGVzZSBpZiB5b3Ugd2FudCBkZWZhdWx0IG1rZnMgYmVoYXZpb3IgKGkuZS4gY3JlYXRlIG1pbmltYWwgaW5vZGUgbnVtYmVyKQorRVhUUkFfSU1BR0VDTURfZXh0MiA/PSAiLWkgNDA5NiIKK0VYVFJBX0lNQUdFQ01EX2V4dDMgPz0gIi1pIDQwOTYiCitFWFRSQV9JTUFHRUNNRF9leHQ0ID89ICItaSA0MDk2IgorRVhUUkFfSU1BR0VDTURfYnRyZnMgPz0gIiIKK0VYVFJBX0lNQUdFQ01EX2VsZiA/PSAiIgorCitJTUFHRV9ERVBFTkRTID0gIiIKK0lNQUdFX0RFUEVORFNfamZmczIgPSAibXRkLXV0aWxzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfY3JhbWZzID0gInV0aWwtbGludXgtbmF0aXZlIgorSU1BR0VfREVQRU5EU19leHQyID0gImUyZnNwcm9ncy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2V4dDMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZXh0NCA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorSU1BR0VfREVQRU5EU19idHJmcyA9ICJidHJmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3NxdWFzaGZzID0gInNxdWFzaGZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfc3F1YXNoZnMteHogPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19zcXVhc2hmcy1sem8gPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19lbGYgPSAidmlydHVhbC9rZXJuZWwgbWtlbGZpbWFnZS1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3ViaSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU191YmlmcyA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19tdWx0aXViaSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU193aWMgPSAicGFydGVkLW5hdGl2ZSIKKworIyBUaGlzIHZhcmlhYmxlIGlzIGF2YWlsYWJsZSB0byByZXF1ZXN0IHdoaWNoIHZhbHVlcyBhcmUgc3VpdGFibGUgZm9yIElNQUdFX0ZTVFlQRVMKK0lNQUdFX1RZUEVTID0gIiBcCisgICAgamZmczIgamZmczIuc3VtIFwKKyAgICBjcmFtZnMgXAorICAgIGV4dDIgZXh0Mi5neiBleHQyLmJ6MiBleHQyLmx6bWEgXAorICAgIGV4dDMgZXh0My5neiBcCisgICAgZXh0NCBleHQ0Lmd6IFwKKyAgICBidHJmcyBcCisgICAgaXNvIFwKKyAgICBoZGRpbWcgXAorICAgIHNxdWFzaGZzIHNxdWFzaGZzLXh6IHNxdWFzaGZzLWx6byBcCisgICAgdWJpIHViaWZzIG11bHRpdWJpIFwKKyAgICB0YXIgdGFyLmd6IHRhci5iejIgdGFyLnh6IHRhci5sejQgXAorICAgIGNwaW8gY3Bpby5neiBjcGlvLnh6IGNwaW8ubHptYSBjcGlvLmx6NCBcCisgICAgdm1kayBcCisgICAgdmRpIFwKKyAgICBxY293MiBcCisgICAgZWxmIFwKKyAgICB3aWMgd2ljLmd6IHdpYy5iejIgd2ljLmx6bWEgXAorIgorCitDT01QUkVTU0lPTlRZUEVTID0gImd6IGJ6MiBsem1hIHh6IGx6NCBzdW0iCitDT01QUkVTU19DTURfbHptYSA9ICJsem1hIC1rIC1mIC03ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iCitDT01QUkVTU19DTURfZ3ogPSAiZ3ppcCAtZiAtOSAtYyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5neiIKK0NPTVBSRVNTX0NNRF9iejIgPSAicGJ6aXAyIC1mIC1rICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iCitDT01QUkVTU19DTURfeHogPSAieHogLWYgLWsgLWMgJHtYWl9DT01QUkVTU0lPTl9MRVZFTH0gJHtYWl9USFJFQURTfSAtLWNoZWNrPSR7WFpfSU5URUdSSVRZX0NIRUNLfSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS54eiIKK0NPTVBSRVNTX0NNRF9sejQgPSAibHo0YyAtOSAtYyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9ID4gJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5sejQiCitDT01QUkVTU19DTURfc3VtID0gInN1bXRvb2wgLWkgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSAtbyAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9LnN1bSAke0pGRlMyX1NVTV9FWFRSQV9BUkdTfSIKK0NPTVBSRVNTX0RFUEVORFNfbHptYSA9ICJ4ei1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX2d6ID0gIiIKK0NPTVBSRVNTX0RFUEVORFNfYnoyID0gInBiemlwMi1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX3h6ID0gInh6LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfbHo0ID0gImx6NC1uYXRpdmUiCitDT01QUkVTU19ERVBFTkRTX3N1bSA9ICJtdGQtdXRpbHMtbmF0aXZlIgorCitSVU5OQUJMRV9JTUFHRV9UWVBFUyA/PSAiZXh0MiBleHQzIGV4dDQiCitSVU5OQUJMRV9NQUNISU5FX1BBVFRFUk5TID89ICJxZW11IgorCitERVBMT1lBQkxFX0lNQUdFX1RZUEVTID89ICJoZGRpbWcgaXNvIiAKKworIyBVc2UgSU1BR0VfRVhURU5TSU9OX3h4eCB0byBtYXAgaW1hZ2UgdHlwZSAneHh4JyB3aXRoIHJlYWwgaW1hZ2UgZmlsZSBleHRlbnNpb24gbmFtZShzKSBmb3IgSG9iCitJTUFHRV9FWFRFTlNJT05fbGl2ZSA9ICJoZGRpbWcgaXNvIgorCisjIFRoZSBJTUFHRV9UWVBFU19NQVNLRUQgdmFyaWFibGUgd2lsbCBiZSB1c2VkIHRvIG1hc2sgb3V0IGZyb20gdGhlIElNQUdFX0ZTVFlQRVMsCisjIGltYWdlcyB0aGF0IHdpbGwgbm90IGJlIGJ1aWx0IGF0IGRvX3Jvb3RmcyB0aW1lOiB2bWRrLCB2ZGksIHFjb3cyLCBoZGRpbWcsIGlzbywgZXRjLgorSU1BR0VfVFlQRVNfTUFTS0VEID89ICIiCisKKyMgVGhlIFdJQ1ZBUlMgdmFyaWFibGUgaXMgdXNlZCB0byBkZWZpbmUgbGlzdCBvZiBiaXRiYWtlIHZhcmlhYmxlcyB1c2VkIGluIHdpYyBjb2RlCisjIHZhcmlhYmxlcyBmcm9tIHRoaXMgbGlzdCBpcyB3cml0dGVuIHRvIDxpbWFnZT4uZW52IGZpbGUKK1dJQ1ZBUlMgPz0gIkJCTEFZRVJTIERFUExPWV9ESVJfSU1BR0UgSERERElSIElNQUdFX0JBU0VOQU1FIElNQUdFX0JPT1RfRklMRVMgSU1BR0VfTElOS19OQU1FIElNQUdFX1JPT1RGUyBJTklUUkFNRlNfRlNUWVBFUyBJTklUUkQgSVNPRElSIE1BQ0hJTkVfQVJDSCBST09URlNfU0laRSBTVEFHSU5HX0RBVEFESVIgU1RBR0lOR19ESVJfTkFUSVZFIFNUQUdJTkdfTElCRElSIFRBUkdFVF9TWVMiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MWJjYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXNfdWJvb3QuYmJjbGFzcwpAQCAtMCwwICsxLDI2IEBACitpbmhlcml0IGltYWdlX3R5cGVzIGtlcm5lbC1hcmNoCisKK29lX21raW1hZ2UgKCkgeworICAgIG1raW1hZ2UgLUEgJHtVQk9PVF9BUkNIfSAtTyBsaW51eCAtVCByYW1kaXNrIC1DICQyIC1uICR7SU1BR0VfTkFNRX0gXAorICAgICAgICAtZCAke0RFUExPWV9ESVJfSU1BR0V9LyQxICR7REVQTE9ZX0RJUl9JTUFHRX0vJDEudS1ib290CisgICAgaWYgWyB4JDMgPSB4ImNsZWFuIiBdOyB0aGVuCisgICAgICAgIHJtICQxCisgICAgZmkKK30KKworQ09NUFJFU1NJT05UWVBFUyArPSAiZ3oudS1ib290IGJ6Mi51LWJvb3QgbHptYS51LWJvb3QgdS1ib290IgorCitDT01QUkVTU19ERVBFTkRTX3UtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfdS1ib290ICAgICAgPSAib2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IG5vbmUiCisKK0NPTVBSRVNTX0RFUEVORFNfZ3oudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9nei51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9nen07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5neiBnemlwIGNsZWFuIgorCitDT01QUkVTU19ERVBFTkRTX2J6Mi51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2J6Mi51LWJvb3QgICAgICA9ICIke0NPTVBSRVNTX0NNRF9iejJ9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uYnoyIGJ6aXAyIGNsZWFuIgorCitDT01QUkVTU19ERVBFTkRTX2x6bWEudS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF9sem1hLnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2x6bWF9OyBvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0ubHptYSBsem1hIGNsZWFuIgorCitJTUFHRV9UWVBFUyArPSAiZXh0Mi51LWJvb3QgZXh0Mi5nei51LWJvb3QgZXh0Mi5iejIudS1ib290IGV4dDIubHptYS51LWJvb3QgZXh0My5nei51LWJvb3QgZXh0NC5nei51LWJvb3QiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbnNhbmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzg2MjlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTI4MCBAQAorIyBCQiBDbGFzcyBpbnNwaXJlZCBieSBlYnVpbGQuc2gKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIHRlc3QgZmlsZXMgYWZ0ZXIgaW5zdGFsbGF0aW9uIGZvciBjZXJ0YWluCisjIHNlY3VyaXR5IGlzc3VlcyBhbmQgb3RoZXIga2luZCBvZiBpc3N1ZXMuCisjCisjIENoZWNrcyB3ZSBkbzoKKyMgIC1DaGVjayB0aGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucworIyAgLUNoZWNrIHRoZSBSVU5USU1FIHBhdGggZm9yIHRoZSAkVE1QRElSCisjICAtQ2hlY2sgaWYgLmxhIGZpbGVzIHdyb25nbHkgcG9pbnQgdG8gd29ya2RpcgorIyAgLUNoZWNrIGlmIC5wYyBmaWxlcyB3cm9uZ2x5IHBvaW50IHRvIHdvcmtkaXIKKyMgIC1DaGVjayBpZiBwYWNrYWdlcyBjb250YWlucyAuZGVidWcgZGlyZWN0b3JpZXMgb3IgLnNvIGZpbGVzCisjICAgd2hlcmUgdGhleSBzaG91bGQgYmUgaW4gLWRldiBvciAtZGJnCisjICAtQ2hlY2sgaWYgY29uZmlnLmxvZyBjb250YWlucyB0cmFjZXMgdG8gYnJva2VuIGF1dG9jb25mIHRlc3RzCisjICAtQ2hlY2sgaW52YWxpZCBjaGFyYWN0ZXJzIChub24tdXRmOCkgb24gc29tZSBwYWNrYWdlIG1ldGFkYXRhCisjICAtRW5zdXJlIHRoYXQgYmluYXJpZXMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgbGluaworIyAgIGludG8gZXhlY19wcmVmaXgKKyMgIC1DaGVjayB0aGF0IHNjcmlwdHMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSBkbyBub3QgcmVmZXJlbmNlCisjICAgZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKworCisjIHVuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzIHJlcXVpcmVzIHByZWxpbmstcnRsZCBmcm9tCisjIHByZWxpbmstbmF0aXZlLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGlzIERFUEVORFMgZm9yIC1uYXRpdmUgYnVpbGRzCitRQURFUEVORFMgPSAicHJlbGluay1uYXRpdmUiCitRQURFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1FBREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorUUFfU0FORSA9ICJUcnVlIgorCisjIEVsZWN0IHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9mIGVycm9yIGlzIGEgd2FybmluZyBvciBlcnJvciwgdGhleSBtYXkKKyMgaGF2ZSBiZWVuIHNldCBieSBvdGhlciBmaWxlcy4KK1dBUk5fUUEgPz0gImxkZmxhZ3MgdXNlbGVzcy1ycGF0aHMgcnBhdGhzIHN0YXRpY2RldiBsaWJkaXIgeG9yZy1kcml2ZXItYWJpIFwKKyAgICAgICAgICAgIHRleHRyZWwgYWxyZWFkeS1zdHJpcHBlZCBpbmNvbXBhdGlibGUtbGljZW5zZSBmaWxlcy1pbnZhbGlkIFwKKyAgICAgICAgICAgIGluc3RhbGxlZC12cy1zaGlwcGVkIGNvbXBpbGUtaG9zdC1wYXRoIGluc3RhbGwtaG9zdC1wYXRoIFwKKyAgICAgICAgICAgIHBuLW92ZXJyaWRlcyBpbmZvZGlyIGJ1aWxkLWRlcHMgZmlsZS1yZGVwcyBcCisgICAgICAgICAgICB1bmtub3duLWNvbmZpZ3VyZS1vcHRpb24gc3ltbGluay10by1zeXNyb290IG11bHRpbGliIFwKKyAgICAgICAgICAgIGludmFsaWQtcGtnY29uZmlnIGhvc3QtdXNlci1jb250YW1pbmF0ZWQgXAorICAgICAgICAgICAgIgorRVJST1JfUUEgPz0gImRldi1zbyBkZWJ1Zy1kZXBzIGRldi1kZXBzIGRlYnVnLWZpbGVzIGFyY2ggcGtnY29uZmlnIGxhIFwKKyAgICAgICAgICAgIHBlcm1zIGRlcC1jbXAgcGtndmFyY2hlY2sgcGVybS1jb25maWcgcGVybS1saW5lIHBlcm0tbGluayBcCisgICAgICAgICAgICBzcGxpdC1zdHJpcCBwYWNrYWdlcy1saXN0IHBrZ3YtdW5kZWZpbmVkIHZhci11bmRlZmluZWQgXAorICAgICAgICAgICAgdmVyc2lvbi1nb2luZy1iYWNrd2FyZHMgZXhwYW5kZWQtZCBpbnZhbGlkLWNoYXJzIFwKKyAgICAgICAgICAgICIKK0ZBS0VST09UX1FBID0gImhvc3QtdXNlci1jb250YW1pbmF0ZWQiCitGQUtFUk9PVF9RQVtkb2NdID0gIlFBIHRlc3RzIHdoaWNoIG5lZWQgdG8gcnVuIHVuZGVyIGZha2Vyb290LiBJZiBhbnkgXAorZW5hYmxlZCB0ZXN0cyBhcmUgbGlzdGVkIGhlcmUsIHRoZSBkb19wYWNrYWdlX3FhIHRhc2sgd2lsbCBydW4gdW5kZXIgZmFrZXJvb3QuIgorCitBTExfUUEgPSAiJHtXQVJOX1FBfSAke0VSUk9SX1FBfSIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUID89ICItLWVuYWJsZS1ubHMgLS1kaXNhYmxlLW5scyAtLWRpc2FibGUtc2lsZW50LXJ1bGVzIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIC0td2l0aC1saWJ0b29sLXN5c3Jvb3QiCisKKyMKKyMgZGljdGlvbmFyeSBmb3IgZWxmIGhlYWRlcnMKKyMKKyMgZmVlbCBmcmVlIHRvIGFkZCBhbmQgY29ycmVjdC4KKyMKKyMgICAgICAgICAgIFRBUkdFVF9PUyAgVEFSR0VUX0FSQ0ggICBNQUNISU5FLCBPU0FCSSwgQUJJVkVSU0lPTiwgTGl0dGxlIEVuZGlhbiwgMzJiaXQ/CitkZWYgcGFja2FnZV9xYV9nZXRfbWFjaGluZV9kaWN0KCk6CisgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJkYXJ3aW45IiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlbGYiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiIDogICAgICAoMywgICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcGlwaGFueSI6ICAgKDQ2NDMsICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0IiA6ICAgKDE4MywgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiIDooMTgzLCAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgOTcsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgICAgKDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYzY0IjogICgyMSwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoNjIsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiaWE2NCI6ICAgICAgICg1MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhbHBoYSI6ICAgICAgKDM2OTAyLCAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImhwcGEiOiAgICAgICAoMTUsICAgICAzLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibTY4ayI6ICAgICAgICggNCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgInMzOTAiOiAgICAgICAoMjIsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzcGFyYyI6ICAgICAgKCAyLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemUiOiAgKDE4OSwgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZWViIjooMTg5LCAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JsYXplZWwiOigxODksICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtdWNsaWJjIiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoICA2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXZyMzIiOiAgICAgICg2MzE3LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNoNCI6ICAgICAgICAoNDIsICAgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKworICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbCIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjQiIDogICAoMTgzLCAgICAwLCAgICAwLCAgICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhYXJjaDY0X2JlIiA6KDE4MywgICAgMCwgICAgMCwgICAgICAgICAgICBGYWxzZSwgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoICA0MCwgICAgOTcsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKCAgMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTM4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk0ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIng4Nl82NCI6ICAgICAoICA2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIjogICAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6ICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJ1Y2xpbnV4LXVjbGliYyIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYmZpbiI6ICAgICAgICggMTA2LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwgCisgICAgICAgICAgICAibGludXgtZ251ZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbGVhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LXVjbGliY2VhYmkiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgImFybSIgOiAgICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiIDogICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudXNwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LW11c2xzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC11Y2xpYmNzcGUiIDogeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1nbnUiIDogICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoMjAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudXgzMiIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudW4zMiIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICB9CisKKworZGVmIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpOgorICAgICIiIiBSZW1vdmUgdGhlIGNvbW1vbiBwcmVmaXggZnJvbSB0aGUgcGF0aC4gSW4gdGhpcyBjYXNlIGl0IGlzIHRoZSBUTVBESVIiIiIKKyAgICByZXR1cm4gcGF0aC5yZXBsYWNlKGQuZ2V0VmFyKCdUTVBESVInLFRydWUpLCIiKQorCitkZWYgcGFja2FnZV9xYV93cml0ZV9lcnJvcih0eXBlLCBlcnJvciwgZCk6CisgICAgbG9nZmlsZSA9IGQuZ2V0VmFyKCdRQV9MT0dGSUxFJywgVHJ1ZSkKKyAgICBpZiBsb2dmaWxlOgorICAgICAgICBwID0gZC5nZXRWYXIoJ1AnLCBUcnVlKQorICAgICAgICBmID0gZmlsZSggbG9nZmlsZSwgImErIikKKyAgICAgICAgcHJpbnQgPj4gZiwgIiVzOiAlcyBbJXNdIiAlIChwLCBlcnJvciwgdHlwZSkKKyAgICAgICAgZi5jbG9zZSgpCisKK2RlZiBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcihlcnJvcl9jbGFzcywgZXJyb3JfbXNnLCBkKToKKyAgICBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpCisgICAgaWYgZXJyb3JfY2xhc3MgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBiYi5lcnJvcigiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgICAgICBkLnNldFZhcigiUUFfU0FORSIsIEZhbHNlKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbGlmIGVycm9yX2NsYXNzIGluIChkLmdldFZhcigiV0FSTl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBiYi53YXJuKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiUUEgSXNzdWU6ICVzIFslc10iICUgKGVycm9yX21zZywgZXJyb3JfY2xhc3MpKQorICAgIHJldHVybiBUcnVlCisKK1FBUEFUSFRFU1RbbGliZXhlY10gPSAicGFja2FnZV9xYV9jaGVja19saWJleGVjIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfbGliZXhlYyhwYXRoLG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorCisgICAgIyBTa2lwIHRoZSBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IGlzIGV4cGxpY2l0bHkgL3Vzci9saWJleGVjCisgICAgbGliZXhlYyA9IGQuZ2V0VmFyKCdsaWJleGVjZGlyJywgVHJ1ZSkKKyAgICBpZiBsaWJleGVjID09ICIvdXNyL2xpYmV4ZWMiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgJ2xpYmV4ZWMnIGluIHBhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICBtZXNzYWdlc1sibGliZXhlYyJdID0gIiVzOiAlcyBpcyB1c2luZyBsaWJleGVjIHBsZWFzZSByZWxvY2F0ZSB0byAlcyIgJSAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsIGQpLCBsaWJleGVjKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKK1FBUEFUSFRFU1RbcnBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3JwYXRoIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfcnBhdGgoZmlsZSxuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgZGFuZ2Vyb3VzIFJQQVRIcworICAgICIiIgorICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgIHJldHVybgorCisgICAgYmFkX2RpcnMgPSBbZC5nZXRWYXIoJ0JBU0VfV09SS0RJUicsIFRydWUpLCBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSldCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgaW1wb3J0IHJlCisgICAgcnBhdGhfcmUgPSByZS5jb21waWxlKCJccytSUEFUSFxzKyguKikiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBtID0gcnBhdGhfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwYXRoID0gbS5ncm91cCgxKQorICAgICAgICAgICAgZm9yIGRpciBpbiBiYWRfZGlyczoKKyAgICAgICAgICAgICAgICBpZiBkaXIgaW4gcnBhdGg6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJycGF0aHMiXSA9ICJwYWNrYWdlICVzIGNvbnRhaW5zIGJhZCBSUEFUSCAlcyBpbiBmaWxlICVzIiAlIChuYW1lLCBycGF0aCwgZmlsZSkKKworUUFQQVRIVEVTVFt1c2VsZXNzLXJwYXRoc10gPSAicGFja2FnZV9xYV9jaGVja191c2VsZXNzX3JwYXRocyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3VzZWxlc3NfcnBhdGhzKGZpbGUsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBSUEFUSHMgdGhhdCBhcmUgdXNlbGVzcyBidXQgbm90IGRhbmdlcm91cworICAgICIiIgorICAgIGRlZiBycGF0aF9lcShhLCBiKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgoYSkgPT0gb3MucGF0aC5ub3JtcGF0aChiKQorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaWJkaXIgPSBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkKKyAgICBiYXNlX2xpYmRpciA9IGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgaW1wb3J0IHJlCisgICAgcnBhdGhfcmUgPSByZS5jb21waWxlKCJccytSUEFUSFxzKyguKikiKQorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBtID0gcnBhdGhfcmUubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwYXRoID0gbS5ncm91cCgxKQorICAgICAgICAgICAgaWYgcnBhdGhfZXEocnBhdGgsIGxpYmRpcikgb3IgcnBhdGhfZXEocnBhdGgsIGJhc2VfbGliZGlyKToKKyAgICAgICAgICAgICAgICAjIFRoZSBkeW5hbWljIGxpbmtlciBzZWFyY2hlcyBib3RoIHRoZXNlIHBsYWNlcyBhbnl3YXkuICBUaGVyZSBpcyBubyBwb2ludCBpbgorICAgICAgICAgICAgICAgICMgbG9va2luZyB0aGVyZSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBtZXNzYWdlc1sidXNlbGVzcy1ycGF0aHMiXSA9ICIlczogJXMgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIICVzIiAlIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgoZmlsZSwgZCksIHJwYXRoKQorCitRQVBBVEhURVNUW2Rldi1zb10gPSAicGFja2FnZV9xYV9jaGVja19kZXYiCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXYocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yICIuc28iIGxpYnJhcnkgc3ltbGlua3MgaW4gbm9uLWRldiBwYWNrYWdlcworICAgICIiIgorCisgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoIi1kZXYiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1kYmciKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1wdGVzdCIpIGFuZCBub3QgbmFtZS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikgYW5kIHBhdGguZW5kc3dpdGgoIi5zbyIpIGFuZCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgbWVzc2FnZXNbImRldi1zbyJdID0gIm5vbiAtZGV2Ly1kYmcvbmF0aXZlc2RrLSBwYWNrYWdlIGNvbnRhaW5zIHN5bWxpbmsgLnNvOiAlcyBwYXRoICclcyciICUgXAorICAgICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK1FBUEFUSFRFU1Rbc3RhdGljZGV2XSA9ICJwYWNrYWdlX3FhX2NoZWNrX3N0YXRpY2RldiIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YXRpY2RldihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgIi5hIiBsaWJyYXJ5IGluIG5vbi1zdGF0aWNkZXYgcGFja2FnZXMKKyAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUsIC1waWMgcGFja2FnZXMgY2FuIGNvbnRhaW4KKyAgICBzdGF0aWMgbGlicmFyaWVzLCB0aGUgX25vbnNoYXJlZC5hIGJlbG9uZyB3aXRoIHRoZWlyIC1kZXYgcGFja2FnZXMgYW5kCisgICAgbGliZ2NjLmEsIGxpYmdjb3YuYSB3aWxsIGJlIHNraXBwZWQgaW4gdGhlaXIgcGFja2FnZXMKKyAgICAiIiIKKworICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCItcGljIikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItc3RhdGljZGV2IikgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCItcHRlc3QiKSBhbmQgcGF0aC5lbmRzd2l0aCgiLmEiKSBhbmQgbm90IHBhdGguZW5kc3dpdGgoIl9ub25zaGFyZWQuYSIpOgorICAgICAgICBtZXNzYWdlc1sic3RhdGljZGV2Il0gPSAibm9uIC1zdGF0aWNkZXYgcGFja2FnZSBjb250YWlucyBzdGF0aWMgLmEgbGlicmFyeTogJXMgcGF0aCAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitkZWYgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIHdyb25nIGxpYnJhcnkgaW5zdGFsbGF0aW9uIHBhdGhzLiBGb3IgaW5zdGFuY2UsIGNhdGNoCisgICAgcmVjaXBlcyBpbnN0YWxsaW5nIC9saWIvYmFyLnNvIHdoZW4gJHtiYXNlX2xpYmRpcn09ImxpYjMyIiBvcgorICAgIGluc3RhbGxpbmcgaW4gL3Vzci9saWI2NCB3aGVuICR7bGliZGlyfT0iL3Vzci9saWIiCisgICAgIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGJhc2VfbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIixUcnVlKSArIG9zLnNlcAorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSArIG9zLnNlcAorICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoImV4ZWNfcHJlZml4IiwgVHJ1ZSkgKyBvcy5zZXAKKworICAgIG1lc3NhZ2VzID0gW10KKworICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIl4vbGliLitcLnNvKFwuLispPyQiKQorICAgIGV4ZWNfcmUgPSByZS5jb21waWxlKCJeJXMuKi9saWIuK1wuc28oXC4uKyk/JCIgJSBleGVjX3ByZWZpeCkKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ2Rlc3QpOgorICAgICAgICBpZiByb290ID09IHBrZ2Rlc3Q6CisgICAgICAgICAgICAjIFNraXAgc3ViZGlyZWN0b3JpZXMgZm9yIGFueSBwYWNrYWdlcyB3aXRoIGxpYmRpciBpbiBJTlNBTkVfU0tJUAorICAgICAgICAgICAgc2tpcHBhY2thZ2VzID0gW10KKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIGRpcnM6CisgICAgICAgICAgICAgICAgaWYgJ2xpYmRpcicgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcGFja2FnZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgJXMgc2tpcHBpbmcgbGliZGlyIFFBIHRlc3QiICUgKHBhY2thZ2UpKQorICAgICAgICAgICAgICAgICAgICBza2lwcGFja2FnZXMuYXBwZW5kKHBhY2thZ2UpCisgICAgICAgICAgICBmb3IgcGFja2FnZSBpbiBza2lwcGFja2FnZXM6CisgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUocGFja2FnZSkKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgIHJlbF9wYXRoID0gb3MucGF0aC5yZWxwYXRoKGZ1bGxfcGF0aCwgcGtnZGVzdCkKKyAgICAgICAgICAgIGlmIG9zLnNlcCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlLCByZWxfcGF0aCA9IHJlbF9wYXRoLnNwbGl0KG9zLnNlcCwgMSkKKyAgICAgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnNlcCArIHJlbF9wYXRoCisgICAgICAgICAgICAgICAgaWYgbGliX3JlLm1hdGNoKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFzZV9saWJkaXIgbm90IGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCIlczogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbjogJXMiICUgKHBhY2thZ2UsIHJlbF9wYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBleGVjX3JlLm1hdGNoKHJlbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGliZGlyIG5vdCBpbiByZWxfcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCgiJXM6IGZvdW5kIGxpYnJhcnkgaW4gd3JvbmcgbG9jYXRpb246ICVzIiAlIChwYWNrYWdlLCByZWxfcGF0aCkpCisKKyAgICBpZiBtZXNzYWdlczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxpYmRpciIsICJcbiIuam9pbihtZXNzYWdlcyksIGQpCisKK1FBUEFUSFRFU1RbZGVidWctZmlsZXNdID0gInBhY2thZ2VfcWFfY2hlY2tfZGJnIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZGJnKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciAiLmRlYnVnIiBmaWxlcyBvciBkaXJlY3RvcmllcyBvdXRzaWRlIG9mIHRoZSBkYmcgcGFja2FnZQorICAgICIiIgorCisgICAgaWYgbm90ICItZGJnIiBpbiBuYW1lIGFuZCBub3QgIi1wdGVzdCIgaW4gbmFtZToKKyAgICAgICAgaWYgJy5kZWJ1ZycgaW4gcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICBtZXNzYWdlc1siZGVidWctZmlsZXMiXSA9ICJub24gZGVidWcgcGFja2FnZSBjb250YWlucyAuZGVidWcgZGlyZWN0b3J5OiAlcyBwYXRoICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtwZXJtc10gPSAicGFja2FnZV9xYV9jaGVja19wZXJtIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfcGVybShwYXRoLG5hbWUsZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhlIHBlcm1pc3Npb24gb2YgZmlsZXMKKyAgICAiIiIKKyAgICByZXR1cm4KKworUUFQQVRIVEVTVFt1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllc10gPSAicGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9iaW5hcmllcyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX2JpbmFyaWVzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIEVuc3VyZSBiaW5hcmllcyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCBsaW5rIHRvIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisgICAgIiIiCisgICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGVsZjoKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcsIFRydWUpCisgICAgICAgIHN5c3Jvb3RfcGF0aCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBzeXNyb290X3BhdGhfdXNyID0gc3lzcm9vdF9wYXRoICsgZXhlY19wcmVmaXgKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gYmIucHJvY2Vzcy5Qb3BlbihbInByZWxpbmstcnRsZCIsICItLXJvb3QiLCBzeXNyb290X3BhdGgsIHBhdGhdLCBzdGRvdXQ9c3ViLlBJUEUpLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3I6CisgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IHByZWxpbmstcnRsZCBhYm9ydGVkIHdoZW4gcHJvY2Vzc2luZyAlcyIgJSBwYXRoCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzeXNyb290X3BhdGhfdXNyIGluIGxkZF9vdXRwdXQ6CisgICAgICAgICAgICBsZGRfb3V0cHV0ID0gbGRkX291dHB1dC5yZXBsYWNlKHN5c3Jvb3RfcGF0aCwgIiIpCisKKyAgICAgICAgICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc2hvcnRfcGF0aCA9IHBhdGgucmVwbGFjZSgnJXMvJXMnICUgKHBrZ2Rlc3QsIHBhY2thZ2UpLCAiIiwgMSkKKyAgICAgICAgICAgICAgICBpZiAoc2hvcnRfcGF0aCAhPSBwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgYmFzZV9lcnIgPSBwbiArICI6ICVzLCBpbnN0YWxsZWQgaW4gdGhlIGJhc2VfcHJlZml4LCByZXF1aXJlcyBhIHNoYXJlZCBsaWJyYXJ5IHVuZGVyIGV4ZWNfcHJlZml4ICglcykiICUgKHNob3J0X3BhdGgsIGV4ZWNfcHJlZml4KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGRkX291dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiBleGVjX3ByZWZpeCBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXM6ICVzIiAlIChiYXNlX2VyciwgbGluZS5zdHJpcCgpKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMiLCBlcnJvcl9tc2csIGQpCisKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCitRQVBBVEhURVNUW3Vuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHNdID0gInBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fc2NyaXB0cyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX3NjcmlwdHMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgV2FybiBpZiBzY3JpcHRzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gcmVmZXJlbmNlIGZpbGVzIHVuZGVyIGV4ZWNfcHJlZml4CisgICAgIiIiCisgICAgaWYgdW5zYWZlX3JlZmVyZW5jZXNfc2tpcHBhYmxlKHBhdGgsIG5hbWUsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIGltcG9ydCBzdGF0CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICAjIEVuc3VyZSB3ZSdyZSBjaGVja2luZyBhbiBleGVjdXRhYmxlIHNjcmlwdAorICAgICAgICBzdGF0aW5mbyA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgaWYgYm9vbChzdGF0aW5mby5zdF9tb2RlICYgc3RhdC5TX0lYVVNSKToKKyAgICAgICAgICAgICMgZ3JlcCBzaGVsbCBzY3JpcHRzIGZvciBwb3NzaWJsZSByZWZlcmVuY2VzIHRvIC9leGVjX3ByZWZpeC8KKyAgICAgICAgICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKKyAgICAgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICclcy8nICVzID4gL2Rldi9udWxsIiAlIChleGVjX3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBGb3VuZCBhIHJlZmVyZW5jZSB0byAlcy8gaW4gJXMiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICJTaGVsbCBzY3JpcHRzIGluIGJhc2VfYmluZGlyIGFuZCBiYXNlX3NiaW5kaXIgc2hvdWxkIG5vdCByZWZlcmVuY2UgYW55dGhpbmcgaW4gZXhlY19wcmVmaXgiCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCisKK2RlZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiAiLWRiZyIgaW4gbmFtZSBvciAiLWRldiIgaW4gbmFtZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgT3RoZXIgcGFja2FnZSBuYW1lcyB0byBza2lwOgorICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgia2VybmVsLW1vZHVsZS0iKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgU2tpcCBzeW1saW5rcworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIHVudXN1YWwgcm9vdGZzIGxheW91dHMgd2hpY2ggbWFrZSB0aGVzZSB0ZXN0cyBpcnJlbGV2YW50CisgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgnLCBUcnVlKQorICAgIGlmIGV4ZWNfcHJlZml4ID09ICIiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gcGtnZGVzdCArICIvIiArIG5hbWUKKyAgICBwa2dkZXN0ID0gb3MucGF0aC5hYnNwYXRoKHBrZ2Rlc3QpCisgICAgYmFzZV9iaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSkKKyAgICBiYXNlX3NiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpCisgICAgYmFzZV9saWJkaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSkKKyAgICBiaW5kaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpCisgICAgc2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignc2JpbmRpcicsIFRydWUpCisgICAgbGliZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorCisgICAgaWYgYmFzZV9iaW5kaXIgPT0gYmluZGlyIGFuZCBiYXNlX3NiaW5kaXIgPT0gc2JpbmRpciBhbmQgYmFzZV9saWJkaXIgPT0gbGliZGlyOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIGZpbGVzIG5vdCBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdCisgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQorICAgIGlmIG5vdCAoYmFzZV9iaW5kaXIgaW4gcGF0aCBvciBiYXNlX3NiaW5kaXIgaW4gcGF0aCBvciBiYXNlX2xpYmRpciBpbiBwYXRoKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitRQVBBVEhURVNUW2FyY2hdID0gInBhY2thZ2VfcWFfY2hlY2tfYXJjaCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2FyY2gocGF0aCxuYW1lLGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGlmIGFyY2hzIGFyZSBjb21wYXRpYmxlCisgICAgIiIiCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0YXJnZXRfb3MgICA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdQUk9WSURFUycsIFRydWUpCisgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisKKyAgICBpZiB0YXJnZXRfYXJjaCA9PSAiYWxsYXJjaCI6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9IHBuICsgIjogUmVjaXBlIGluaGVyaXRzIHRoZSBhbGxhcmNoIGNsYXNzLCBidXQgaGFzIHBhY2thZ2VkIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBiaW5hcmllcyIKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEZJWE1FOiBDcm9zcyBwYWNrYWdlIGNvbmZ1c2UgdGhpcyBjaGVjaywgc28ganVzdCBza2lwIHRoZW0KKyAgICBmb3IgcyBpbiBbJ2Nyb3NzJywgJ25hdGl2ZXNkaycsICdjcm9zcy1jYW5hZGlhbiddOgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKHMsIGQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAjIGF2b2lkIGZvbGxvd2luZyBsaW5rcyB0byAvdXNyL2JpbiAoZS5nLiBvbiB1ZGV2IGJ1aWxkcykKKyAgICAjIHdlIHdpbGwgY2hlY2sgdGhlIGZpbGVzIHBvaW50ZWQgdG8gYW55d2F5Li4uCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCisgICAgKG1hY2hpbmUsIG9zYWJpLCBhYml2ZXJzaW9uLCBsaXR0bGVlbmRpYW4sIGJpdHMpIFwKKyAgICAgICAgPSBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKVt0YXJnZXRfb3NdW3RhcmdldF9hcmNoXQorCisgICAgIyBDaGVjayB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBlbmRpYW5uZXMgb2YgdGhlIGJpbmFyeQorICAgIGlmIG5vdCAoKG1hY2hpbmUgPT0gZWxmLm1hY2hpbmUoKSkgb3IgXAorICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJBcmNoaXRlY3R1cmUgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKG1hY2hpbmUsIGVsZi5tYWNoaW5lKCksIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorICAgIGVsaWYgbm90ICgoYml0cyA9PSBlbGYuYWJpU2l6ZSgpKSBvciAgXAorICAgICAgICAoKCgidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJtb2R1bGUiLCBkKSApIGFuZCAodGFyZ2V0X29zID09ICJsaW51eC1nbnV4MzIiIG9yIHRhcmdldF9vcyA9PSAibGludXgtZ251bjMyIikpKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJCaXQgc2l6ZSBkaWQgbm90IG1hdGNoICglZCB0byAlZCkgJXMgb24gJXMiICUgXAorICAgICAgICAgICAgICAgICAoYml0cywgZWxmLmFiaVNpemUoKSwgYnBuLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKyAgICBlbGlmIG5vdCBsaXR0bGVlbmRpYW4gPT0gZWxmLmlzTGl0dGxlRW5kaWFuKCk6CisgICAgICAgIG1lc3NhZ2VzWyJhcmNoIl0gPSAiRW5kaWFubmVzIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSBvbiAlcyIgJSBcCisgICAgICAgICAgICAgICAgIChsaXR0bGVlbmRpYW4sIGVsZi5pc0xpdHRsZUVuZGlhbigpLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtkZXNrdG9wXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2Rlc2t0b3AiCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXNrdG9wKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIFJ1biBhbGwgZGVza3RvcCBmaWxlcyB0aHJvdWdoIGRlc2t0b3AtZmlsZS12YWxpZGF0ZS4KKyAgICAiIiIKKyAgICBpZiBwYXRoLmVuZHN3aXRoKCIuZGVza3RvcCIpOgorICAgICAgICBkZXNrdG9wX2ZpbGVfdmFsaWRhdGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsVHJ1ZSksJ2Rlc2t0b3AtZmlsZS12YWxpZGF0ZScpCisgICAgICAgIG91dHB1dCA9IG9zLnBvcGVuKCIlcyAlcyIgJSAoZGVza3RvcF9maWxlX3ZhbGlkYXRlLCBwYXRoKSkKKyAgICAgICAgIyBUaGlzIG9ubHkgcHJvZHVjZXMgb3V0cHV0IG9uIGVycm9ycworICAgICAgICBmb3IgbCBpbiBvdXRwdXQ6CisgICAgICAgICAgICBtZXNzYWdlc1siZGVza3RvcCJdID0gIkRlc2t0b3AgZmlsZSBpc3N1ZTogIiArIGwuc3RyaXAoKQorCitRQVBBVEhURVNUW3RleHRyZWxdID0gInBhY2thZ2VfcWFfdGV4dHJlbCIKK2RlZiBwYWNrYWdlX3FhX3RleHRyZWwocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBjb250YWlucyByZWxvY2F0aW9ucyBpbiAudGV4dAorICAgICIiIgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorICAgIHNhbmUgPSBUcnVlCisKKyAgICBpbXBvcnQgcmUKKyAgICB0ZXh0cmVsX3JlID0gcmUuY29tcGlsZSgiXHMrVEVYVFJFTFxzKyIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIGlmIHRleHRyZWxfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIGlmIG5vdCBzYW5lOgorICAgICAgICBtZXNzYWdlc1sidGV4dHJlbCJdID0gIkVMRiBiaW5hcnkgJyVzJyBoYXMgcmVsb2NhdGlvbnMgaW4gLnRleHQiICUgcGF0aAorCitRQVBBVEhURVNUW2xkZmxhZ3NdID0gInBhY2thZ2VfcWFfaGFzaF9zdHlsZSIKK2RlZiBwYWNrYWdlX3FhX2hhc2hfc3R5bGUocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgdGhlIGJpbmFyeSBoYXMgdGhlIHJpZ2h0IGhhc2ggc3R5bGUuLi4KKyAgICAiIiIKKworICAgIGlmIG5vdCBlbGY6CisgICAgICAgIHJldHVybgorCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgZ251X2hhc2ggPSAiLS1oYXNoLXN0eWxlPWdudSIgaW4gZC5nZXRWYXIoJ0xERkxBR1MnLCBUcnVlKQorICAgIGlmIG5vdCBnbnVfaGFzaDoKKyAgICAgICAgZ251X2hhc2ggPSAiLS1oYXNoLXN0eWxlPWJvdGgiIGluIGQuZ2V0VmFyKCdMREZMQUdTJywgVHJ1ZSkKKyAgICBpZiBub3QgZ251X2hhc2g6CisgICAgICAgIHJldHVybgorCisgICAgc2FuZSA9IEZhbHNlCisgICAgaGFzX3N5bXMgPSBGYWxzZQorCisgICAgcGhkcnMgPSBlbGYucnVuX29iamR1bXAoIi1wIiwgZCkKKworICAgICMgSWYgdGhpcyBiaW5hcnkgaGFzIHN5bWJvbHMsIHdlIGV4cGVjdCBpdCB0byBoYXZlIEdOVV9IQVNIIHRvby4KKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgIlNZTVRBQiIgaW4gbGluZToKKyAgICAgICAgICAgIGhhc19zeW1zID0gVHJ1ZQorICAgICAgICBpZiAiR05VX0hBU0giIGluIGxpbmU6CisgICAgICAgICAgICBzYW5lID0gVHJ1ZQorICAgICAgICBpZiAiW21pcHMzMl0iIGluIGxpbmUgb3IgIlttaXBzNjRdIiBpbiBsaW5lOgorICAgICAgICAgICAgc2FuZSA9IFRydWUKKworICAgIGlmIGhhc19zeW1zIGFuZCBub3Qgc2FuZToKKyAgICAgICAgbWVzc2FnZXNbImxkZmxhZ3MiXSA9ICJObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeTogJyVzJyIgJSBwYXRoCisKKworUUFQQVRIVEVTVFtidWlsZHBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2J1aWxkcGF0aHMiCitkZWYgcGFja2FnZV9xYV9jaGVja19idWlsZHBhdGhzKHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBidWlsZCBwYXRocyBpbnNpZGUgdGFyZ2V0IGZpbGVzIGFuZCBlcnJvciBpZiBub3QgZm91bmQgaW4gdGhlIHdoaXRlbGlzdAorICAgICIiIgorICAgICMgSWdub3JlIC5kZWJ1ZyBmaWxlcywgbm90IGludGVyZXN0aW5nCisgICAgaWYgcGF0aC5maW5kKCIuZGVidWciKSAhPSAtMToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElnbm9yZSBzeW1saW5rcworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHdpdGggb3BlbihwYXRoKSBhcyBmOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICBpZiB0bXBkaXIgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgbWVzc2FnZXNbImJ1aWxkcGF0aHMiXSA9ICJGaWxlICVzIGluIHBhY2thZ2UgY29udGFpbmVkIHJlZmVyZW5jZSB0byB0bXBkaXIiICUgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkKKworCitRQVBBVEhURVNUW3hvcmctZHJpdmVyLWFiaV0gPSAicGFja2FnZV9xYV9jaGVja194b3JnX2RyaXZlcl9hYmkiCitkZWYgcGFja2FnZV9xYV9jaGVja194b3JnX2RyaXZlcl9hYmkocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCBhbGwgcGFja2FnZXMgY29udGFpbmluZyBYb3JnIGRyaXZlcnMgaGF2ZSBBQkkgZGVwZW5kZW5jaWVzCisgICAgIiIiCisKKyAgICAjIFNraXAgZGV2LCBkYmcgb3IgbmF0aXZlc2RrIHBhY2thZ2VzCisgICAgaWYgbmFtZS5lbmRzd2l0aCgiLWRldiIpIG9yIG5hbWUuZW5kc3dpdGgoIi1kYmciKSBvciBuYW1lLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkcml2ZXJkaXIgPSBkLmV4cGFuZCgiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLyIpCisgICAgaWYgZHJpdmVyZGlyIGluIHBhdGggYW5kIHBhdGguZW5kc3dpdGgoIi5zbyIpOgorICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgICAgIGZvciByZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIG5hbWUsIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgIGlmIHJkZXAuc3RhcnRzd2l0aCgiJXN4b3JnLWFiaS0iICUgbWxwcmVmaXgpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBtZXNzYWdlc1sieG9yZy1kcml2ZXItYWJpIl0gPSAiUGFja2FnZSAlcyBjb250YWlucyBYb3JnIGRyaXZlciAoJXMpIGJ1dCBubyB4b3JnLWFiaS0gZGVwZW5kZW5jaWVzIiAlIChuYW1lLCBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorCitRQVBBVEhURVNUW2luZm9kaXJdID0gInBhY2thZ2VfcWFfY2hlY2tfaW5mb2RpciIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2luZm9kaXIocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCAvdXNyL3NoYXJlL2luZm8vZGlyIGlzbid0IHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UKKyAgICAiIiIKKyAgICBpbmZvZGlyID0gZC5leHBhbmQoIiR7aW5mb2Rpcn0vZGlyIikKKworICAgIGlmIGluZm9kaXIgaW4gcGF0aDoKKyAgICAgICAgbWVzc2FnZXNbImluZm9kaXIiXSA9ICJUaGUgL3Vzci9zaGFyZS9pbmZvL2RpciBmaWxlIGlzIG5vdCBtZWFudCB0byBiZSBzaGlwcGVkIGluIGEgcGFydGljdWxhciBwYWNrYWdlLiIKKworUUFQQVRIVEVTVFtzeW1saW5rLXRvLXN5c3Jvb3RdID0gInBhY2thZ2VfcWFfY2hlY2tfc3ltbGlua190b19zeXNyb290IgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3ltbGlua190b19zeXNyb290KHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIHRoYXQgdGhlIHBhY2thZ2UgZG9lc24ndCBjb250YWluIGFueSBhYnNvbHV0ZSBzeW1saW5rcyB0byB0aGUgc3lzcm9vdC4KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgdGFyZ2V0ID0gb3MucmVhZGxpbmsocGF0aCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXQuc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgICAgIHRyaW1tZWQgPSBwYXRoLnJlcGxhY2Uob3MucGF0aC5qb2luIChkLmdldFZhcigiUEtHREVTVCIsIFRydWUpLCBuYW1lKSwgIiIpCisgICAgICAgICAgICAgICAgbWVzc2FnZXNbInN5bWxpbmstdG8tc3lzcm9vdCJdID0gIlN5bWxpbmsgJXMgaW4gJXMgcG9pbnRzIHRvIFRNUERJUiIgJSAodHJpbW1lZCwgbmFtZSkKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhlIGxpY2Vuc2UgZmlsZXMgCisgICAgIiIiCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgc2FuZSA9IFRydWUKKworICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkKKyAgICBsaWMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaWYgbGljID09ICJDTE9TRUQiOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgbm90IGxpY19maWxlczoKKyAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbiAoTElDX0ZJTEVTX0NIS1NVTSkiKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKworICAgIGZvciB1cmwgaW4gbGljX2ZpbGVzLnNwbGl0KCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybCh1cmwpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5NYWxmb3JtZWRVcmw6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwpCisgICAgICAgIHNyY2xpY2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc3JjbGljZmlsZSk6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCBwbiArICI6IExJQ19GSUxFU19DSEtTVU0gcG9pbnRzIHRvIGFuIGludmFsaWQgZmlsZTogIiArIHNyY2xpY2ZpbGUpCisKKyAgICAgICAgcmVjaXBlbWQ1ID0gcGFybS5nZXQoJ21kNScsICcnKQorICAgICAgICBiZWdpbmxpbmUsIGVuZGxpbmUgPSAwLCAwCisgICAgICAgIGlmICdiZWdpbmxpbmUnIGluIHBhcm06CisgICAgICAgICAgICBiZWdpbmxpbmUgPSBpbnQocGFybVsnYmVnaW5saW5lJ10pCisgICAgICAgIGlmICdlbmRsaW5lJyBpbiBwYXJtOgorICAgICAgICAgICAgZW5kbGluZSA9IGludChwYXJtWydlbmRsaW5lJ10pCisKKyAgICAgICAgaWYgKG5vdCBiZWdpbmxpbmUpIGFuZCAobm90IGVuZGxpbmUpOgorICAgICAgICAgICAgbWQ1Y2hrc3VtID0gYmIudXRpbHMubWQ1X2ZpbGUoc3JjbGljZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpID0gb3BlbihzcmNsaWNmaWxlLCAncmInKQorICAgICAgICAgICAgZm8gPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0nd2InLCBwcmVmaXg9J3Bva3kuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQorICAgICAgICAgICAgdG1wbGljZmlsZSA9IGZvLm5hbWU7CisgICAgICAgICAgICBsaW5lbm8gPSAwCisgICAgICAgICAgICBsaW5lc291dCA9IDAKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSAxCisgICAgICAgICAgICAgICAgaWYgKGxpbmVubyA+PSBiZWdpbmxpbmUpOiAKKyAgICAgICAgICAgICAgICAgICAgaWYgKChsaW5lbm8gPD0gZW5kbGluZSkgb3Igbm90IGVuZGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm8ud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzb3V0ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmby5mbHVzaCgpCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmaS5jbG9zZSgpCisgICAgICAgICAgICBtZDVjaGtzdW0gPSBiYi51dGlscy5tZDVfZmlsZSh0bXBsaWNmaWxlKQorICAgICAgICAgICAgb3MudW5saW5rKHRtcGxpY2ZpbGUpCisKKyAgICAgICAgaWYgcmVjaXBlbWQ1ID09IG1kNWNoa3N1bToKKyAgICAgICAgICAgIGJiLm5vdGUgKHBuICsgIjogbWQ1IGNoZWNrc3VtIG1hdGNoZWQgZm9yICIsIHVybCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlY2lwZW1kNToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IG1kNSBkYXRhIGlzIG5vdCBtYXRjaGluZyBmb3IgIiwgdXJsKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgIiwgbWQ1Y2hrc3VtKQorICAgICAgICAgICAgICAgIGlmIGJlZ2lubGluZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZW5kbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gIiVzIChsaW5lcyAlZCB0aHJvdWdoIHRvICVkKSIgJSAoc3JjbGljZmlsZSwgYmVnaW5saW5lLCBlbmRsaW5lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGJlZ2lubmluZyBvbiBsaW5lICVkKSIgJSAoc3JjbGljZmlsZSwgYmVnaW5saW5lKQorICAgICAgICAgICAgICAgIGVsaWYgZW5kbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGVuZGluZyBvbiBsaW5lICVkKSIgJSAoc3JjbGljZmlsZSwgZW5kbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9IHNyY2xpY2ZpbGUKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IENoZWNrIGlmIHRoZSBsaWNlbnNlIGluZm9ybWF0aW9uIGhhcyBjaGFuZ2VkIGluICVzIHRvIHZlcmlmeSB0aGF0IHRoZSBMSUNFTlNFIHZhbHVlIFwiJXNcIiByZW1haW5zIHZhbGlkIiAlIChzcmNmaWxlZGVzYywgbGljKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBtZDUgY2hlY2tzdW0gaXMgbm90IHNwZWNpZmllZCBmb3IgIiwgdXJsKQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogVGhlIG1kNSBjaGVja3N1bSBpcyAiLCBtZDVjaGtzdW0pCisgICAgICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIHJldHVybiBzYW5lCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3N0YWdlZChwYXRoLGQpOgorICAgICIiIgorICAgIENoZWNrIHN0YWdlZCBsYSBhbmQgcGMgZmlsZXMgZm9yIHNhbml0eQorICAgICAgLWUuZy4gaW5zdGFsbGVkIGJlaW5nIGZhbHNlCisKKyAgICAgICAgQXMgdGhpcyBpcyBydW4gYWZ0ZXIgZXZlcnkgc3RhZ2Ugd2Ugc2hvdWxkIGJlIGFibGUKKyAgICAgICAgdG8gZmluZCB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgZXJyb3JzIGVhc2lseSBldmVuCisgICAgICAgIGlmIHdlIGxvb2sgYXQgZXZlcnkgLnBjIGFuZCAubGEgZmlsZQorICAgICIiIgorCisgICAgc2FuZSA9IFRydWUKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgIndvcmsiKQorCisgICAgaW5zdGFsbGVkID0gImluc3RhbGxlZD15ZXMiCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibmF0aXZlIiwgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKToKKyAgICAgICAgcGtnY29uZmlnY2hlY2sgPSB3b3JrZGlyCisgICAgZWxzZToKKyAgICAgICAgcGtnY29uZmlnY2hlY2sgPSB0bXBkaXIKKworICAgICMgZmluZCBhbGwgLmxhIGFuZCAucGMgZmlsZXMKKyAgICAjIHJlYWQgdGhlIGNvbnRlbnQKKyAgICAjIGFuZCBjaGVjayBmb3Igc3R1ZmYgdGhhdCBsb29rcyB3cm9uZworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmxhIik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmtkaXIgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGZhaWxlZCBzYW5pdHkgdGVzdCAod29ya2RpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJsYSIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgIGVsaWYgZmlsZS5lbmRzd2l0aCgiLnBjIik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ2NvbmZpZ2NoZWNrIGluIGZpbGVfY29udGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBmYWlsZWQgc2FuaXR5IHRlc3QgKHRtcGRpcikgaW4gcGF0aCAlcyIgJSAoZmlsZSxyb290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwa2djb25maWciLCBlcnJvcl9tc2csIGQpCisKKyAgICByZXR1cm4gc2FuZQorCisjIFdhbGsgb3ZlciBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkgYW5kIGNhbGwgZnVuYworZGVmIHBhY2thZ2VfcWFfd2FsayhwYXRoLCB3YXJuZnVuY3MsIGVycm9yZnVuY3MsIHNraXAsIHBhY2thZ2UsIGQpOgorICAgIGltcG9ydCBvZS5xYQorCisgICAgI2lmIHRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHRoZW4gZml4IHRoZSBkaWN0IGFib3ZlCisgICAgdGFyZ2V0X29zICAgPSBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkKKyAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisKKyAgICB3YXJuaW5ncyA9IHt9CisgICAgZXJyb3JzID0ge30KKyAgICBmb3IgcGF0aCBpbiBwa2dmaWxlc1twYWNrYWdlXToKKyAgICAgICAgICAgIGVsZiA9IG9lLnFhLkVMRkZpbGUocGF0aCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbGYub3BlbigpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZWxmID0gTm9uZQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gd2FybmZ1bmNzOgorICAgICAgICAgICAgICAgIGZ1bmMocGF0aCwgcGFja2FnZSwgZCwgZWxmLCB3YXJuaW5ncykKKyAgICAgICAgICAgIGZvciBmdW5jIGluIGVycm9yZnVuY3M6CisgICAgICAgICAgICAgICAgZnVuYyhwYXRoLCBwYWNrYWdlLCBkLCBlbGYsIGVycm9ycykKKworICAgIGZvciB3IGluIHdhcm5pbmdzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcih3LCB3YXJuaW5nc1t3XSwgZCkKKyAgICBmb3IgZSBpbiBlcnJvcnM6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKGUsIGVycm9yc1tlXSwgZCkKKworICAgIHJldHVybiBsZW4oZXJyb3JzKSA9PSAwCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3JkZXBlbmRzKHBrZywgcGtnZGVzdCwgc2tpcCwgdGFza2RlcHMsIHBhY2thZ2VzLCBkKToKKyAgICAjIERvbid0IGRvIHRoaXMgY2hlY2sgZm9yIGtlcm5lbC9tb2R1bGUgcmVjaXBlcywgdGhlcmUgYXJlbid0IHRvbyBtYW55IGRlYnVnL2RldmVsb3BtZW50CisgICAgIyBwYWNrYWdlcyBhbmQgeW91IGNhbiBnZXQgZmFsc2UgcG9zaXRpdmVzIGUuZy4gb24ga2VybmVsLW1vZHVsZS1saXJjLWRldgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImtlcm5lbCIsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZS1iYXNlIiwgZCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGlmIG5vdCAiLWRiZyIgaW4gcGtnIGFuZCBub3QgInBhY2thZ2Vncm91cC0iIGluIHBrZyBhbmQgbm90ICItaW1hZ2UiIGluIHBrZzoKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIHBrZykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIyBOb3cgY2hlY2sgdGhlIFJERVBFTkRTCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCisKKyAgICAgICAgIyBOb3cgZG8gdGhlIHNhbml0eSBjaGVjayEhIQorICAgICAgICBpZiAiYnVpbGQtZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICBmb3IgcmRlcGVuZCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBpZiAiLWRiZyIgaW4gcmRlcGVuZCBhbmQgImRlYnVnLWRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMiICUgKHBrZyxyZGVwZW5kKQorICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImRlYnVnLWRlcHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgaWYgKG5vdCAiLWRldiIgaW4gcGtnIGFuZCBub3QgIi1zdGF0aWNkZXYiIGluIHBrZykgYW5kIHJkZXBlbmQuZW5kc3dpdGgoIi1kZXYiKSBhbmQgImRldi1kZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIHJkZXBlbmRzIG9uICVzIiAlIChwa2csIHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGV2LWRlcHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgaWYgcmRlcGVuZCBub3QgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShyZGVwZW5kLCBkKQorICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmRlcF9kYXRhIG9yIG5vdCAnUE4nIGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFfZGlyID0gZC5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZXMgPSBvcy5saXN0ZGlyKCIlcy9ydW50aW1lLXJwcm92aWRlcy8lcy8iICUgKHBrZ2RhdGFfZGlyLCByZGVwZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwb3NzaWJsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmRlcF9kYXRhIGFuZCAnUE4nIGluIHJkZXBfZGF0YSBhbmQgcmRlcF9kYXRhWydQTiddIGluIHRhc2tkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMsIGJ1dCBpdCBpc24ndCBhIGJ1aWxkIGRlcGVuZGVuY3k/IiAlIChwa2csIHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiYnVpbGQtZGVwcyIsIGVycm9yX21zZywgZCkKKworICAgICAgICBpZiAiZmlsZS1yZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICBpZ25vcmVkX2ZpbGVfcmRlcHMgPSBzZXQoWycvYmluL3NoJywgJy91c3IvYmluL2VudicsICdydGxkKEdOVV9IQVNIKSddKQorICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgICAgICAgICAgaWdub3JlZF9maWxlX3JkZXBzIHw9IHNldChbJy9iaW4vYmFzaCcsICcvdXNyL2Jpbi9wZXJsJ10pCisgICAgICAgICAgICAjIEZvciBTYXZpbmcgdGhlIEZJTEVSREVQRU5EUworICAgICAgICAgICAgZmlsZXJkZXBlbmRzID0ge30KKyAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAgICAgICAgICBmb3Iga2V5IGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiRklMRVJERVBFTkRTXyIpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Via2V5IGluIHJkZXBfZGF0YVtrZXldLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJrZXkgbm90IGluIGlnbm9yZWRfZmlsZV9yZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyBpdCBzdGFydHMgd2l0aCBGSUxFUkRFUEVORFNfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzW3N1YmtleV0gPSBrZXlbMTM6XQorCisgICAgICAgICAgICBpZiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgbmV4dCA9IHJkZXBlbmRzCisgICAgICAgICAgICAgICAgZG9uZSA9IHJkZXBlbmRzWzpdCisgICAgICAgICAgICAgICAgIyBGaW5kIGFsbCB0aGUgcmRlcGVuZHMgb24gdGhlIGRlcGVuZGVuY3kgY2hhaW4KKyAgICAgICAgICAgICAgICB3aGlsZSBuZXh0OgorICAgICAgICAgICAgICAgICAgICBuZXcgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiBuZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHJkZXAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJfcmRlcHMgPSByZGVwX2RhdGEuZ2V0KCJSREVQRU5EU18iICsgcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJfcmRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJfcmRlcCBpbiBzdWJfcmRlcHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJfcmRlcCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWJfcmRlcC5zdGFydHN3aXRoKCcoJykgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lLnBhY2thZ2VkYXRhLmhhc19zdWJwa2dkYXRhKHN1Yl9yZGVwLCBkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgbmV3IHJkZXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3ViX3JkZXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoc3ViX3JkZXApCisgICAgICAgICAgICAgICAgICAgIG5leHQgPSBuZXcKKworICAgICAgICAgICAgICAgICMgQWRkIHRoZSBycHJvdmlkZXMgb2YgaXRzZWxmCisgICAgICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICBkb25lLmluc2VydCgwLCBwa2cpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBweXRob24gaXMgbm90IGEgcGFja2FnZSwgYnV0IHB5dGhvbi1jb3JlIHByb3ZpZGVzIGl0LCBzbworICAgICAgICAgICAgICAgICMgc2tpcCBjaGVja2luZyAvdXNyL2Jpbi9weXRob24gaWYgcHl0aG9uIGlzIGluIHRoZSByZGVwcywgaW4KKyAgICAgICAgICAgICAgICAjIGNhc2UgdGhlcmUgaXMgYSBSREVQRU5EU19wa2cgPSAicHl0aG9uIiBpbiB0aGUgcmVjaXBlLgorICAgICAgICAgICAgICAgIGZvciBweSBpbiBbIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpICsgInB5dGhvbiIsICJweXRob24iIF06CisgICAgICAgICAgICAgICAgICAgIGlmIHB5IGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKCIvdXNyL2Jpbi9weXRob24iLE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lLnJlbW92ZShweSkKKyAgICAgICAgICAgICAgICBmb3IgcmRlcCBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICAjIEZvciBTYXZpbmcgdGhlIEZJTEVSUFJPVklERVMsIFJQUk9WSURFUyBhbmQgRklMRVNfSU5GTworICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocmRlcCwgZCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiByZGVwX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiRklMRVJQUk9WSURFU18iKSBvciBrZXkuc3RhcnRzd2l0aCgiUlBST1ZJREVTXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWJrZXkgaW4gcmRlcF9kYXRhW2tleV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcChzdWJrZXksTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWRkIHRoZSBmaWxlcyBsaXN0IHRvIHRoZSBycHJvdmlkZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiRklMRVNfSU5GTyI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgZXZhbCgpIHRvIG1ha2UgaXQgYXMgYSBkaWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmtleSBpbiBldmFsKHJkZXBfZGF0YVtrZXldKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXJkZXBlbmRzLnBvcChzdWJrZXksTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQnJlYWsgaWYgYWxsIHRoZSBmaWxlIHJkZXBlbmRzIGFyZSBtZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBmaWxlcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBjb250YWluZWQgaW4gcGFja2FnZSAlcyByZXF1aXJlcyAlcywgYnV0IG5vIHByb3ZpZGVycyBmb3VuZCBpbiBpdHMgUkRFUEVORFMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlcmRlcGVuZHNba2V5XSxwa2csIGtleSkKKyAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImZpbGUtcmRlcHMiLCBlcnJvcl9tc2csIGQpCisKKyAgICByZXR1cm4gc2FuZQorCitkZWYgcGFja2FnZV9xYV9jaGVja19kZXBzKHBrZywgcGtnZGVzdCwgc2tpcCwgZCk6CisgICAgc2FuZSA9IFRydWUKKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIHBrZykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIGRlZiBjaGVja192YWxpZF9kZXBzKHZhcik6CisgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ2YXIgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICIiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzXyVzOiAlcyIgJSAodmFyLCBwa2csIGUpKQorICAgICAgICBmb3IgZGVwIGluIHJ2YXI6CisgICAgICAgICAgICBmb3IgdiBpbiBydmFyW2RlcF06CisgICAgICAgICAgICAgICAgaWYgdiBhbmQgbm90IHYuc3RhcnRzd2l0aCgoJzwgJywgJz0gJywgJz4gJywgJzw9ICcsICc+PScpKToKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzXyVzIGlzIGludmFsaWQ6ICVzICglcykgICBvbmx5IGNvbXBhcmlzb25zIDwsID0sID4sIDw9LCBhbmQgPj0gYXJlIGFsbG93ZWQiICUgKHZhciwgcGtnLCBkZXAsIHYpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGVwLWNtcCIsIGVycm9yX21zZywgZCkKKyAgICAgICAgcmV0dXJuIHNhbmUKKworICAgIHNhbmUgPSBUcnVlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JERVBFTkRTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUkVDT01NRU5EUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlNVR0dFU1RTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSUFJPVklERVMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRVBMQUNFUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUkNPTkZMSUNUUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKworICAgIHJldHVybiBzYW5lCisKK1FBUEFUSFRFU1RbZXhwYW5kZWQtZF0gPSAicGFja2FnZV9xYV9jaGVja19leHBhbmRlZF9kIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfZXhwYW5kZWRfZChwYXRoLG5hbWUsZCxlbGYsbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciB0aGUgZXhwYW5kZWQgRCAoJHtEfSkgdmFsdWUgaW4gcGtnXyogYW5kIEZJTEVTCisgICAgdmFyaWFibGVzLCB3YXJuIHRoZSB1c2VyIHRvIHVzZSBpdCBjb3JyZWN0bHkuCisgICAgIiIiCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIGV4cGFuZGVkX2QgPSBkLmdldFZhcignRCcsVHJ1ZSkKKworICAgICMgR2V0IHBhY2thZ2VzIGZvciBjdXJyZW50IHJlY2lwZSBhbmQgaXRlcmF0ZQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoIiAiKQorICAgIGZvciBwYWsgaW4gcGFja2FnZXM6CisgICAgIyBHbyB0aHJvdWdoIGFsbCB2YXJpYWJsZXMgYW5kIGNoZWNrIGlmIGV4cGFuZGVkIEQgaXMgZm91bmQsIHdhcm4gdGhlIHVzZXIgYWNjb3JkaW5nbHkKKyAgICAgICAgZm9yIHZhciBpbiAnRklMRVMnLCdwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nOgorICAgICAgICAgICAgYmJ2YXIgPSBkLmdldFZhcih2YXIgKyAiXyIgKyBwYWssIEZhbHNlKQorICAgICAgICAgICAgaWYgYmJ2YXI6CisgICAgICAgICAgICAgICAgIyBCaXRiYWtlIGV4cGFuZHMgJHtEfSB3aXRoaW4gYmJ2YXIgZHVyaW5nIHRoZSBwcmV2aW91cyBzdGVwLCBzbyB3ZSBjaGVjayBmb3IgaXRzIGV4cGFuZGVkIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgZXhwYW5kZWRfZCBpbiBiYnZhcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyID09ICdGSUxFUyc6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1siZXhwYW5kZWQtZCJdID0gIkZJTEVTIGluICVzIHJlY2lwZSBzaG91bGQgbm90IGNvbnRhaW4gdGhlICR7RH0gdmFyaWFibGUgYXMgaXQgcmVmZXJlbmNlcyB0aGUgbG9jYWwgYnVpbGQgZGlyZWN0b3J5IG5vdCB0aGUgdGFyZ2V0IGZpbGVzeXN0ZW0sIGJlc3Qgc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoZSAke0R9IHJlZmVyZW5jZSIgJSBwYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbImV4cGFuZGVkLWQiXSA9ICIlcyBpbiAlcyByZWNpcGUgY29udGFpbnMgJHtEfSwgaXQgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5ICREIGluc3RlYWQiICUgKHZhciwgcGFrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgcmV0dXJuIHNhbmUKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfZW5jb2Rpbmcoa2V5cywgZW5jb2RlLCBkKToKKyAgICBkZWYgY2hlY2tfZW5jb2Rpbmcoa2V5LGVuYyk6CisgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gdW5pY29kZSh2YWx1ZSwgZW5jKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyBoYXMgbm9uICVzIGNoYXJhY3RlcnMiICUgKGtleSxlbmMpCisgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImludmFsaWQtY2hhcnMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgIHJldHVybiBzYW5lCisKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIHNhbmUgPSBjaGVja19lbmNvZGluZyhrZXksIGVuY29kZSkKKyAgICAgICAgaWYgbm90IHNhbmU6CisgICAgICAgICAgICBicmVhaworCitIT1NUX1VTRVJfVUlEIDo9ICIke0Bvcy5nZXR1aWQoKX0iCitIT1NUX1VTRVJfR0lEIDo9ICIke0Bvcy5nZXRnaWQoKX0iCisKK1FBUEFUSFRFU1RbaG9zdC11c2VyLWNvbnRhbWluYXRlZF0gPSAicGFja2FnZV9xYV9jaGVja19ob3N0X3VzZXIiCitkZWYgcGFja2FnZV9xYV9jaGVja19ob3N0X3VzZXIocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiQ2hlY2sgZm9yIHBhdGhzIG91dHNpZGUgb2YgL2hvbWUgd2hpY2ggYXJlIG93bmVkIGJ5IHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4iIiIKKworICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBob21lID0gb3MucGF0aC5qb2luKGRlc3QsICdob21lJykKKyAgICBpZiBwYXRoID09IGhvbWUgb3IgcGF0aC5zdGFydHN3aXRoKGhvbWUgKyBvcy5zZXApOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgc3RhdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgZWxzZToKKyAgICAgICAgY2hlY2tfdWlkID0gaW50KGQuZ2V0VmFyKCdIT1NUX1VTRVJfVUlEJywgVHJ1ZSkpCisgICAgICAgIGlmIHN0YXQuc3RfdWlkID09IGNoZWNrX3VpZDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJob3N0LXVzZXItY29udGFtaW5hdGVkIl0gPSAiJXMgaXMgb3duZWQgYnkgdWlkICVkLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIFRoaXMgbWF5IGJlIGR1ZSB0byBob3N0IGNvbnRhbWluYXRpb24iICUgKHBhdGgsIGNoZWNrX3VpZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGNoZWNrX2dpZCA9IGludChkLmdldFZhcignSE9TVF9VU0VSX0dJRCcsIFRydWUpKQorICAgICAgICBpZiBzdGF0LnN0X2dpZCA9PSBjaGVja19naWQ6CisgICAgICAgICAgICBtZXNzYWdlc1siaG9zdC11c2VyLWNvbnRhbWluYXRlZCJdID0gIiVzIGlzIG93bmVkIGJ5IGdpZCAlZCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiBUaGlzIG1heSBiZSBkdWUgdG8gaG9zdCBjb250YW1pbmF0aW9uIiAlIChwYXRoLCBjaGVja19naWQpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisjIFRoZSBQQUNLQUdFIEZVTkMgdG8gc2NhbiBlYWNoIHBhY2thZ2UKK3B5dGhvbiBkb19wYWNrYWdlX3FhICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgYmIubm90ZSgiRE8gUEFDS0FHRSBRQSIpCisKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisKKyAgICAjIENoZWNrIG5vbiBVVEYtOCBjaGFyYWN0ZXJzIG9uIHJlY2lwZSdzIG1ldGFkYXRhCisgICAgcGFja2FnZV9xYV9jaGVja19lbmNvZGluZyhbJ0RFU0NSSVBUSU9OJywgJ1NVTU1BUlknLCAnTElDRU5TRScsICdTRUNUSU9OJ10sICd1dGYtOCcsIGQpCisKKyAgICBsb2dkaXIgPSBkLmdldFZhcignVCcsIFRydWUpCisgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICMgQ2hlY2sgdGhlIGNvbXBpbGUgbG9nIGZvciBob3N0IGNvbnRhbWluYXRpb24KKyAgICBjb21waWxlbG9nID0gb3MucGF0aC5qb2luKGxvZ2RpciwibG9nLmRvX2NvbXBpbGUiKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGlsZWxvZyk6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgY29tcGlsZWxvZworICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgY29tcGlsZSBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGNvbXBpbGVsb2cpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiY29tcGlsZS1ob3N0LXBhdGgiLCBtc2csIGQpCisKKyAgICAjIENoZWNrIHRoZSBpbnN0YWxsIGxvZyBmb3IgaG9zdCBjb250YW1pbmF0aW9uCisgICAgaW5zdGFsbGxvZyA9IG9zLnBhdGguam9pbihsb2dkaXIsImxvZy5kb19pbnN0YWxsIikKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGluc3RhbGxsb2cpOgorICAgICAgICBzdGF0ZW1lbnQgPSAiZ3JlcCAtZSAnQ1JPU1MgQ09NUElMRSBCYWRuZXNzOicgLWUgJ2lzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24nICVzID4gL2Rldi9udWxsIiAlIGluc3RhbGxsb2cKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1zZyA9ICIlczogVGhlIGluc3RhbGwgbG9nIGluZGljYXRlcyB0aGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3ZXJlIHVzZWQuXG4gXAorICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvZyAnJXMnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgJSAocGtnLCBpbnN0YWxsbG9nKQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGwtaG9zdC1wYXRoIiwgbXNnLCBkKQorCisgICAgIyBTY2FuIHRoZSBwYWNrYWdlcy4uLgorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBzZXQoKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpKQorCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgIGdsb2JhbCBwa2dmaWxlcworICAgIHBrZ2ZpbGVzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBwa2dmaWxlc1twa2ddID0gW10KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKHBrZ2Rlc3QgKyAiLyIgKyBwa2cpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcGtnZmlsZXNbcGtnXS5hcHBlbmQod2Fsa3Jvb3QgKyBvcy5zZXAgKyBmaWxlKQorCisgICAgIyBubyBwYWNrYWdlcyBzaG91bGQgYmUgc2Nhbm5lZAorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0ZXN0bWF0cml4ID0gZC5nZXRWYXJGbGFncygiUUFQQVRIVEVTVCIpCisgICAgaW1wb3J0IHJlCisgICAgIyBUaGUgcGFja2FnZSBuYW1lIG1hdGNoZXMgdGhlIFthLXowLTkuKy1dKyByZWd1bGFyIGV4cHJlc3Npb24KKyAgICBwa2duYW1lX3BhdHRlcm4gPSByZS5jb21waWxlKCJeW2EtejAtOS4rLV0rJCIpCisKKyAgICB0YXNrZGVwZGF0YSA9IGQuZ2V0VmFyKCJCQl9UQVNLREVQREFUQSIsIEZhbHNlKQorICAgIHRhc2tkZXBzID0gc2V0KCkKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICAgICB0YXNrZGVwcy5hZGQodGFza2RlcGRhdGFbZGVwXVswXSkKKworICAgIGcgPSBnbG9iYWxzKCkKKyAgICB3YWxrX3NhbmUgPSBUcnVlCisgICAgcmRlcGVuZHNfc2FuZSA9IFRydWUKKyAgICBkZXBzX3NhbmUgPSBUcnVlCisgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgIHNraXAgPSAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwYWNrYWdlLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogJXMiICUgKHBhY2thZ2UsIHN0cihza2lwKSkpCisgICAgICAgIHdhcm5jaGVja3MgPSBbXQorICAgICAgICBmb3IgdyBpbiAoZC5nZXRWYXIoIldBUk5fUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHcgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB3IGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbd10gaW4gZzoKKyAgICAgICAgICAgICAgICB3YXJuY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbd11dKQorICAgICAgICBlcnJvcmNoZWNrcyA9IFtdCisgICAgICAgIGZvciBlIGluIChkLmdldFZhcigiRVJST1JfUUEiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGUgaW4gc2tpcDoKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlIGluIHRlc3RtYXRyaXggYW5kIHRlc3RtYXRyaXhbZV0gaW4gZzoKKyAgICAgICAgICAgICAgICBlcnJvcmNoZWNrcy5hcHBlbmQoZ1t0ZXN0bWF0cml4W2VdXSkKKworICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBQYWNrYWdlOiAlcyIgJSBwYWNrYWdlKQorICAgICAgICAjIENoZWNrIHBhY2thZ2UgbmFtZQorICAgICAgICBpZiBub3QgcGtnbmFtZV9wYXR0ZXJuLm1hdGNoKHBhY2thZ2UpOgorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ25hbWUiLAorICAgICAgICAgICAgICAgICAgICAiJXMgZG9lc24ndCBtYXRjaCB0aGUgW2EtejAtOS4rLV0rIHJlZ2V4XG4iICUgcGFja2FnZSwgZCkKKworICAgICAgICBwYXRoID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwYWNrYWdlKQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV93YWxrKHBhdGgsIHdhcm5jaGVja3MsIGVycm9yY2hlY2tzLCBza2lwLCBwYWNrYWdlLCBkKToKKyAgICAgICAgICAgIHdhbGtfc2FuZSAgPSBGYWxzZQorICAgICAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19yZGVwZW5kcyhwYWNrYWdlLCBwa2dkZXN0LCBza2lwLCB0YXNrZGVwcywgcGFja2FnZXMsIGQpOgorICAgICAgICAgICAgcmRlcGVuZHNfc2FuZSA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGFja2FnZSwgcGtnZGVzdCwgc2tpcCwgZCk6CisgICAgICAgICAgICBkZXBzX3NhbmUgPSBGYWxzZQorCisKKyAgICBpZiAnbGliZGlyJyBpbiBkLmdldFZhcigiQUxMX1FBIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGFja2FnZV9xYV9jaGVja19saWJkaXIoZCkKKworICAgIHFhX3NhbmUgPSBkLmdldFZhcigiUUFfU0FORSIsIFRydWUpCisgICAgaWYgbm90IHdhbGtfc2FuZSBvciBub3QgcmRlcGVuZHNfc2FuZSBvciBub3QgZGVwc19zYW5lIG9yIG5vdCBxYV9zYW5lOgorICAgICAgICBiYi5mYXRhbCgiUUEgcnVuIGZvdW5kIGZhdGFsIGVycm9ycy4gUGxlYXNlIGNvbnNpZGVyIGZpeGluZyB0aGVtLiIpCisgICAgYmIubm90ZSgiRE9ORSB3aXRoIFBBQ0tBR0UgUUEiKQorfQorCitkb19wYWNrYWdlX3FhW3JkZXB0YXNrXSA9ICJkb19wYWNrYWdlZGF0YSIKK2FkZHRhc2sgZG9fcGFja2FnZV9xYSBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlIGJlZm9yZSBkb19idWlsZAorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV9xYSIKK2RvX3BhY2thZ2VfcWFbc3N0YXRlLWlucHV0ZGlyc10gPSAiIgorZG9fcGFja2FnZV9xYVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiIgorcHl0aG9uIGRvX3BhY2thZ2VfcWFfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3FhX3NldHNjZW5lCisKK3B5dGhvbiBkb19xYV9zdGFnaW5nKCkgeworICAgIGJiLm5vdGUoIlFBIGNoZWNraW5nIHN0YWdpbmciKQorCisgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkKGQuZXhwYW5kKCcke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfTElCRElSfScpLCBkKToKKyAgICAgICAgYmIuZmF0YWwoIlFBIHN0YWdpbmcgd2FzIGJyb2tlbiBieSB0aGUgcGFja2FnZSBidWlsdCBhYm92ZSIpCit9CisKK3B5dGhvbiBkb19xYV9jb25maWd1cmUoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgY29uZmlnLmxvZyBmb3IgY3Jvc3MgY29tcGlsZSBpc3N1ZXMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGNvbmZpZ3MgPSBbXQorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgYmIubm90ZSgiQ2hlY2tpbmcgYXV0b3Rvb2xzIGVudmlyb25tZW50IGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbiIpCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod29ya2Rpcik6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgXAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwiY29uZmlnLmxvZyIpCisgICAgICAgIGlmICJjb25maWcubG9nIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiIiVGhpcyBhdXRvY29uZiBsb2cgaW5kaWNhdGVzIGVycm9ycywgaXQgbG9va2VkIGF0IGhvc3QgaW5jbHVkZSBhbmQvb3IgbGlicmFyeSBwYXRocyB3aGlsZSBkZXRlcm1pbmluZyBzeXN0ZW0gY2FwYWJpbGl0aWVzLgorUmVydW4gY29uZmlndXJlIHRhc2sgYWZ0ZXIgZml4aW5nIHRoaXMuIFRoZSBwYXRoIHdhcyAnJXMnIiIiICUgcm9vdCkKKworICAgICAgICBpZiAiY29uZmlndXJlLmFjIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGNvbmZpZ3MuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCJjb25maWd1cmUuYWMiKSkKKyAgICAgICAgaWYgImNvbmZpZ3VyZS5pbiIgaW4gZmlsZXM6CisgICAgICAgICAgICBjb25maWdzLmFwcGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgImNvbmZpZ3VyZS5pbiIpKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBnZXR0ZXh0IGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY25mID0gZC5nZXRWYXIoJ0VYVFJBX09FQ09ORicsIFRydWUpIG9yICIiCisgICAgaWYgImdldHRleHQiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiZ2NjLXJ1bnRpbWUiIG5vdCBpbiBkLmdldFZhcignUCcsIFRydWUpIGFuZCAiLS1kaXNhYmxlLW5scyIgbm90IGluIGNuZjoKKyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgICAgICBndCA9ICJnZXR0ZXh0LW5hdGl2ZSIKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICAgICAgZ3QgPSAibmF0aXZlc2RrLWdldHRleHQiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBndCA9ICJ2aXJ0dWFsLyIgKyBtbCArICJnZXR0ZXh0IgorICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGlmIGd0IG5vdCBpbiBkZXBzOgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiBjb25maWdzOgorICAgICAgICAgICAgICAgIGdudSA9ICJncmVwIFwiXltbOnNwYWNlOl1dKkFNX0dOVV9HRVRURVhUXCIgJXMgPi9kZXYvbnVsbCIgJSBjb25maWcKKyAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoZ251LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiIiIlcyByZXF1aXJlZCBidXQgbm90IGluIERFUEVORFMgZm9yIGZpbGUgJXMuCitNaXNzaW5nIGluaGVyaXQgZ2V0dGV4dD8iIiIgJSAoZ3QsIGNvbmZpZykpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGxpY2Vuc2UgdmFyaWFibGVzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19saWNlbnNlKHdvcmtkaXIsIGQpOgorICAgICAgICBiYi5mYXRhbCgiTGljZW5zaW5nIEVycm9yOiBMSUNfRklMRVNfQ0hLU1VNIGRvZXMgbm90IG1hdGNoLCBwbGVhc2UgZml4IikKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdW5yZWNvZ25pc2VkIGNvbmZpZ3VyZSBvcHRpb25zICh3aXRoIGEgd2hpdGUgbGlzdCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJhdXRvdG9vbHMiLCBkKToKKyAgICAgICAgYmIubm90ZSgiQ2hlY2tpbmcgY29uZmlndXJlIG91dHB1dCBmb3IgdW5yZWNvZ25pc2VkIG9wdGlvbnMiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbGFnID0gIldBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiIKKyAgICAgICAgICAgIGxvZyA9IG9zLnBhdGguam9pbihkLmdldFZhcignQicsIFRydWUpLCAnY29uZmlnLmxvZycpCisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2dyZXAnLCAnLUYnLCBmbGFnLCBsb2ddKS5yZXBsYWNlKCcsICcsICcgJykKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZXQoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBvcHRpb25zIHw9IHNldChsaW5lLnBhcnRpdGlvbihmbGFnKVsyXS5zcGxpdCgpKQorICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KGQuZ2V0VmFyKCJVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QiLCBUcnVlKS5zcGxpdCgpKQorICAgICAgICAgICAgb3B0aW9ucyAtPSB3aGl0ZWxpc3QKKyAgICAgICAgICAgIGlmIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9IHBuICsgIjogY29uZmlndXJlIHdhcyBwYXNzZWQgdW5yZWNvZ25pc2VkIG9wdGlvbnM6ICIgKyAiICIuam9pbihvcHRpb25zKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bmtub3duLWNvbmZpZ3VyZS1vcHRpb24iLCBlcnJvcl9tc2csIGQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgQ2hlY2sgaW52YWxpZCBQQUNLQUdFQ09ORklHCisgICAgcGtnY29uZmlnID0gKGQuZ2V0VmFyKCJQQUNLQUdFQ09ORklHIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBwa2djb25maWc6CisgICAgICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpIG9yIHt9CisgICAgICAgIGZvciBwY29uZmlnIGluIHBrZ2NvbmZpZzoKKyAgICAgICAgICAgIGlmIHBjb25maWcgbm90IGluIHBrZ2NvbmZpZ2ZsYWdzOgorICAgICAgICAgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXM6IGludmFsaWQgUEFDS0FHRUNPTkZJRzogJXMiICUgKHBuLCBwY29uZmlnKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbnZhbGlkLXBrZ2NvbmZpZyIsIGVycm9yX21zZywgZCkKK30KKworcHl0aG9uIGRvX3FhX3VucGFjaygpIHsKKyAgICBiYi5ub3RlKCJDaGVja2luZyBoYXMgJHtTfSBiZWVuIGNyZWF0ZWQiKQorCisgICAgc19kaXIgPSBkLmdldFZhcignUycsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNfZGlyKToKKyAgICAgICAgYmIud2FybignJXM6IHRoZSBkaXJlY3RvcnkgJXMgKCVzKSBwb2ludGVkIHRvIGJ5IHRoZSBTIHZhcmlhYmxlIGRvZXNuXCd0IGV4aXN0IC0gcGxlYXNlIHNldCBTIHdpdGhpbiB0aGUgcmVjaXBlIHRvIHBvaW50IHRvIHdoZXJlIHRoZSBzb3VyY2UgaGFzIGJlZW4gdW5wYWNrZWQgdG8nICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignUycsIEZhbHNlKSwgc19kaXIpKQorfQorCisjIFRoZSBTdGFnaW5nIEZ1bmMsIHRvIGNoZWNrIGFsbCBzdGFnaW5nCisjYWRkdGFzayBxYV9zdGFnaW5nIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QgYmVmb3JlIGRvX2J1aWxkCitkb19wb3B1bGF0ZV9zeXNyb290W3Bvc3RmdW5jc10gKz0gImRvX3FhX3N0YWdpbmcgIgorCisjIENoZWNrIGJyb2tlbiBjb25maWcubG9nIGZpbGVzLCBmb3IgcGFja2FnZXMgcmVxdWlyaW5nIEdldHRleHQgd2hpY2ggZG9uJ3QKKyMgaGF2ZSBpdCBpbiBERVBFTkRTIGFuZCBmb3IgY29ycmVjdCBMSUNfRklMRVNfQ0hLU1VNCisjYWRkdGFzayBxYV9jb25maWd1cmUgYWZ0ZXIgZG9fY29uZmlndXJlIGJlZm9yZSBkb19jb21waWxlCitkb19jb25maWd1cmVbcG9zdGZ1bmNzXSArPSAiZG9fcWFfY29uZmlndXJlICIKKworIyBDaGVjayBkb2VzIFMgZXhpc3QuCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAiZG9fcWFfdW5wYWNrIgorCitweXRob24gKCkgeworICAgIHRlc3RzID0gZC5nZXRWYXIoJ0FMTF9RQScsIFRydWUpLnNwbGl0KCkKKyAgICBpZiAiZGVza3RvcCIgaW4gdGVzdHM6CisgICAgICAgIGQuYXBwZW5kVmFyKCJQQUNLQUdFX0RFUEVORFMiLCAiIGRlc2t0b3AtZmlsZS11dGlscy1uYXRpdmUiKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB2YXJpb3VzIHZhcmlhYmxlcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBDaGVja2luZyAke0ZJTEVTRVhUUkFQQVRIU30KKyAgICBleHRyYXBhdGhzID0gKGQuZ2V0VmFyKCJGSUxFU0VYVFJBUEFUSFMiLCBUcnVlKSBvciAiIikKKyAgICBpZiAnX19kZWZhdWx0JyBub3QgaW4gZXh0cmFwYXRocy5zcGxpdCgiOiIpOgorICAgICAgICBtc2cgPSAiRklMRVNFWFRSQVBBVEhTLXZhcmlhYmxlLCBtdXN0IGFsd2F5cyB1c2UgX3ByZXBlbmQgKG9yIF9hcHBlbmQpXG4iCisgICAgICAgIG1zZyArPSAidHlwZSBvZiBhc3NpZ25tZW50LCBhbmQgZG9uJ3QgZm9yZ2V0IHRoZSBjb2xvbi5cbiIKKyAgICAgICAgbXNnICs9ICJQbGVhc2UgYXNzaWduIGl0IHdpdGggdGhlIGZvcm1hdCBvZjpcbiIKKyAgICAgICAgbXNnICs9ICIgIEZJTEVTRVhUUkFQQVRIU19hcHBlbmQgOj0gXCI6JHtUSElTRElSfS9Zb3VyX0ZpbGVzX1BhdGhcIiBvclxuIgorICAgICAgICBtc2cgKz0gIiAgRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gXCIke1RISVNESVJ9L1lvdXJfRmlsZXNfUGF0aDpcIlxuIgorICAgICAgICBtc2cgKz0gImluIHlvdXIgYmJhcHBlbmQgZmlsZVxuXG4iCisgICAgICAgIG1zZyArPSAiWW91ciBpbmNvcnJlY3QgYXNzaWdubWVudCBpczpcbiIKKyAgICAgICAgbXNnICs9ICIlc1xuIiAlIGV4dHJhcGF0aHMKKyAgICAgICAgYmIud2Fybihtc2cpCisKKyAgICBpZiBkLmdldFZhcignZG9fc3RhZ2UnLCBUcnVlKSBpcyBub3QgTm9uZToKKyAgICAgICAgYmIuZmF0YWwoIkxlZ2FjeSBzdGFnaW5nIGZvdW5kIGZvciAlcyBhcyBpdCBoYXMgYSBkb19zdGFnZSBmdW5jdGlvbi4gVGhpcyB3aWxsIG5lZWQgY29udmVyc2lvbiB0byBhIGRvX2luc3RhbGwgb3Igb2Z0ZW4gc2ltcGx5IHJlbW92YWwgdG8gd29yayB3aXRoIE9FLWNvcmUiICUgZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkKKworICAgIG92ZXJyaWRlcyA9IGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKS5zcGxpdCgnOicpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGlmIHBuIGluIG92ZXJyaWRlczoKKyAgICAgICAgbXNnID0gJ1JlY2lwZSAlcyBoYXMgUE4gb2YgIiVzIiB3aGljaCBpcyBpbiBPVkVSUklERVMsIHRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91ci4nICUgKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSksIHBuKQorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicG4tb3ZlcnJpZGVzIiwgbXNnLCBkKQorCisgICAgaXNzdWVzID0gW10KKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdRQURFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdkZXBlbmRzJywgIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcCkKKyAgICAgICAgZm9yIHZhciBpbiAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JDT05GTElDVFMnLCAnUlBST1ZJREVTJywgJ1JSRVBMQUNFUycsICdGSUxFUycsICdwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nLCAnQUxMT1dfRU1QVFknOgorICAgICAgICAgICAgaWYgZC5nZXRWYXIodmFyLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgaXNzdWVzLmFwcGVuZCh2YXIpCisKKyAgICAgICAgZmFrZXJvb3RfdGVzdHMgPSBkLmdldFZhcignRkFLRVJPT1RfUUEnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGlmIHNldCh0ZXN0cykgJiBzZXQoZmFrZXJvb3RfdGVzdHMpOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2Zha2Vyb290JywgJzEnKQorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV9xYScsICdyZGVwdGFzaycsICcnKQorICAgIGZvciBpIGluIGlzc3VlczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ3ZhcmNoZWNrIiwgIiVzOiBWYXJpYWJsZSAlcyBpcyBzZXQgYXMgbm90IGJlaW5nIHBhY2thZ2Ugc3BlY2lmaWMsIHBsZWFzZSBmaXggdGhpcy4iICUgKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSksIGkpLCBkKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTFiNzJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC1hcmNoLmJiY2xhc3MKQEAgLTAsMCArMSw1OSBAQAorIworIyBzZXQgdGhlIEFSQ0ggZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGtlcm5lbCBjb21waWxhdGlvbiAoaW5jbHVkaW5nCisjIG1vZHVsZXMpLiByZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGFyY2hpdGVjdHVyZSBkaXJlY3RvcmllcworIyBpbiB0aGUga2VybmVsIHNvdXJjZSAiYXJjaCIgZGlyZWN0b3J5CisjCisKK3ZhbGlkX2FyY2hzID0gImFscGhhIGNyaXMgaWE2NCBcCisgICAgICAgICAgICAgICBpMzg2IHg4NiBcCisgICAgICAgICAgICAgICBtNjhrbm9tbXUgbTY4ayBwcGMgcG93ZXJwYyBwb3dlcnBjNjQgcHBjNjQgIFwKKyAgICAgICAgICAgICAgIHNwYXJjIHNwYXJjNjQgXAorICAgICAgICAgICAgICAgYXJtIGFhcmNoNjQgXAorICAgICAgICAgICAgICAgbTMyciBtaXBzIFwKKyAgICAgICAgICAgICAgIHNoIHNoNjQgdW0gaDgzMDAgICBcCisgICAgICAgICAgICAgICBwYXJpc2MgczM5MCAgdjg1MCBcCisgICAgICAgICAgICAgICBhdnIzMiBibGFja2ZpbiBcCisgICAgICAgICAgICAgICBtaWNyb2JsYXplIgorCitkZWYgbWFwX2tlcm5lbF9hcmNoKGEsIGQpOgorICAgIGltcG9ydCByZQorCisgICAgdmFsaWRfYXJjaHMgPSBkLmdldFZhcigndmFsaWRfYXJjaHMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICBpZiAgIHJlLm1hdGNoKCcoaS44NnxhdGhsb258eDg2LjY0KSQnLCBhKTogIHJldHVybiAneDg2JworICAgIGVsaWYgcmUubWF0Y2goJ2FybWViJCcsIGEpOiAgICAgICAgICAgICAgICAgcmV0dXJuICdhcm0nCisgICAgZWxpZiByZS5tYXRjaCgnYWFyY2g2NCQnLCBhKTogICAgICAgICAgICAgICByZXR1cm4gJ2FybTY0JworICAgIGVsaWYgcmUubWF0Y2goJ2FhcmNoNjRfYmUkJywgYSk6ICAgICAgICAgICAgcmV0dXJuICdhcm02NCcKKyAgICBlbGlmIHJlLm1hdGNoKCdtaXBzKGVsfDY0fDY0ZWwpJCcsIGEpOiAgICAgIHJldHVybiAnbWlwcycKKyAgICBlbGlmIHJlLm1hdGNoKCdwKHBjfG93ZXJwYykofDY0KScsIGEpOiAgICAgIHJldHVybiAncG93ZXJwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdzaCgzfDQpJCcsIGEpOiAgICAgICAgICAgICAgIHJldHVybiAnc2gnCisgICAgZWxpZiByZS5tYXRjaCgnYmZpbicsIGEpOiAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2JsYWNrZmluJworICAgIGVsaWYgcmUubWF0Y2goJ21pY3JvYmxhemVlW2JsXScsIGEpOiAgICAgICAgcmV0dXJuICdtaWNyb2JsYXplJworICAgIGVsaWYgYSBpbiB2YWxpZF9hcmNoczogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiY2Fubm90IG1hcCAnJXMnIHRvIGEgbGludXgga2VybmVsIGFyY2hpdGVjdHVyZSIgJSBhKQorCitleHBvcnQgQVJDSCA9ICIke0BtYXBfa2VybmVsX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Ym9vdF9hcmNoKGEsIGQpOgorICAgIGltcG9ydCByZQorCisgICAgaWYgICByZS5tYXRjaCgncChwY3xvd2VycGMpKHw2NCknLCBhKTogcmV0dXJuICdwcGMnCisgICAgZWxpZiByZS5tYXRjaCgnaS44NiQnLCBhKTogcmV0dXJuICd4ODYnCisgICAgcmV0dXJuIGEKKworZXhwb3J0IFVCT09UX0FSQ0ggPSAiJHtAbWFwX3Vib290X2FyY2goZC5nZXRWYXIoJ0FSQ0gnLCBUcnVlKSwgZCl9IgorCisjIFNldCBUQVJHRVRfPz9fS0VSTkVMX0FSQ0ggaW4gdGhlIG1hY2hpbmUgLmNvbmYgdG8gc2V0IGFyY2hpdGVjdHVyZQorIyBzcGVjaWZpYyBvcHRpb25zIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgdGhlIGtlcm5lbCBhbmQgbW9kdWxlcy4KK1RBUkdFVF9DQ19LRVJORUxfQVJDSCA/PSAiIgorSE9TVF9DQ19LRVJORUxfQVJDSCA/PSAiJHtUQVJHRVRfQ0NfS0VSTkVMX0FSQ0h9IgorVEFSR0VUX0xEX0tFUk5FTF9BUkNIID89ICIiCitIT1NUX0xEX0tFUk5FTF9BUkNIID89ICIke1RBUkdFVF9MRF9LRVJORUxfQVJDSH0iCitUQVJHRVRfQVJfS0VSTkVMX0FSQ0ggPz0gIiIKK0hPU1RfQVJfS0VSTkVMX0FSQ0ggPz0gIiR7VEFSR0VUX0FSX0tFUk5FTF9BUkNIfSIKKworS0VSTkVMX0NDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19LRVJORUxfQVJDSH0gLWZ1c2UtbGQ9YmZkIgorS0VSTkVMX0xEID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9bGQuYmZkICR7SE9TVF9MRF9LRVJORUxfQVJDSH0iCitLRVJORUxfQVIgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1hciAke0hPU1RfQVJfS0VSTkVMX0FSQ0h9IgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLWZpdGltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1NmE1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIzNCBAQAoraW5oZXJpdCBrZXJuZWwtdWJvb3QKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorICAgIGlmIGtlcm5lbHR5cGUgPT0gJ2ZpdEltYWdlJzoKKyAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCJERVBFTkRTIiwgVHJ1ZSkKKyAgICAgICAgZGVwZW5kcyA9ICIlcyB1LWJvb3QtbWtpbWFnZS1uYXRpdmUgZHRjLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKworCSMgT3ZlcnJpZGUgS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSB2YXJpYWJsZSwgd2hpY2ggaXMgaW50ZXJuYWwKKwkjIHRvIGtlcm5lbC5iYmNsYXNzIC4gV2UgaGF2ZSB0byBvdmVycmlkZSBpdCwgc2luY2Ugd2UgcGFjayB6SW1hZ2UKKwkjIChhdCBsZWFzdCBmb3Igbm93KSBpbnRvIHRoZSBmaXRJbWFnZSAuCisgICAgICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgInpJbWFnZSIpCisKKyAgICAgICAgaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgaWYgaW1hZ2U6CisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2Fzc2VtYmxlX2ZpdGltYWdlJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX0lNQUdFfTpkb19yb290ZnMnKQorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBoZWFkZXIKKyMKK2ZpdGltYWdlX2VtaXRfZml0X2hlYWRlcigpIHsKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKy9kdHMtdjEvOworCisvIHsKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiVS1Cb290IGZpdEltYWdlIGZvciAke0RJU1RST19OQU1FfS8ke1BWfS8ke01BQ0hJTkV9IjsKKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBzZWN0aW9uIGJpdHMKKyMKKyMgJDEgLi4uIFNlY3Rpb24gYml0IHR5cGU6IGltYWdlc3RhcnQgLSBpbWFnZSBzZWN0aW9uIHN0YXJ0CisjICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mc3RhcnQgIC0gY29uZmlndXJhdGlvbiBzZWN0aW9uIHN0YXJ0CisjICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0ZW5kICAgIC0gc2VjdGlvbiBlbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGZpdGVuZCAgICAgLSBmaXRpbWFnZSBlbmQKKyMKK2ZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCgpIHsKKwljYXNlICQxIGluCisJaW1hZ2VzdGFydCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisKKyAgICAgICAgaW1hZ2VzIHsKK0VPRgorCTs7CisJY29uZnN0YXJ0KQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKworICAgICAgICBjb25maWd1cmF0aW9ucyB7CitFT0YKKwk7OworCXNlY3RlbmQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworCX07CitFT0YKKwk7OworCWZpdGVuZCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCit9OworRU9GCisJOzsKKwllc2FjCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIGtlcm5lbCBzZWN0aW9uCisjCisjICQxIC4uLiBJbWFnZSBjb3VudGVyCisjICQyIC4uLiBQYXRoIHRvIGtlcm5lbCBpbWFnZQorIyAkMyAuLi4gQ29tcHJlc3Npb24gdHlwZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbCgpIHsKKworCWtlcm5lbF9jc3VtPSJzaGExIgorCisJRU5UUllQT0lOVD0ke1VCT09UX0VOVFJZUE9JTlR9CisJaWYgdGVzdCAtbiAiJHtVQk9PVF9FTlRSWVNZTUJPTH0iOyB0aGVuCisJCUVOVFJZUE9JTlQ9YCR7SE9TVF9QUkVGSVh9bm0gJHtTfS92bWxpbnV4IHwgXAorCQkJYXdrICckMz09IiR7VUJPT1RfRU5UUllTWU1CT0x9IiB7cHJpbnQgJDF9J2AKKwlmaQorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAga2VybmVsQCR7MX0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiTGludXgga2VybmVsIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAvaW5jYmluLygiJHsyfSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJrZXJuZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zID0gImxpbnV4IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIiR7M30iOworICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IDwke1VCT09UX0xPQURBRERSRVNTfT47CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IDwke0VOVFJZUE9JTlR9PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtrZXJuZWxfY3N1bX0iOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworRU9GCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIERUQiBzZWN0aW9uCisjCisjICQxIC4uLiBJbWFnZSBjb3VudGVyCisjICQyIC4uLiBQYXRoIHRvIERUQiBpbWFnZQorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YigpIHsKKworCWR0Yl9jc3VtPSJzaGExIgorCisJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisgICAgICAgICAgICAgICAgZmR0QCR7MX0geworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiRmxhdHRlbmVkIERldmljZSBUcmVlIGJsb2IiOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC9pbmNiaW4vKCIkezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gImZsYXRfZHQiOworICAgICAgICAgICAgICAgICAgICAgICAgYXJjaCA9ICIke1VCT09UX0FSQ0h9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uID0gIm5vbmUiOworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2R0Yl9jc3VtfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgY29uZmlndXJhdGlvbiBzZWN0aW9uCisjCisjICQxIC4uLiBMaW51eCBrZXJuZWwgSUQKKyMgJDIgLi4uIERUQiBpbWFnZSBJRAorZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZygpIHsKKworCWNvbmZfY3N1bT0ic2hhMSIKKworCSMgVGVzdCBpZiB3ZSBoYXZlIGFueSBEVEJzIGF0IGFsbAorCWlmIFsgLXogIiR7Mn0iIF0gOyB0aGVuCisJCWNvbmZfZGVzYz0iQm9vdCBMaW51eCBrZXJuZWwiCisJCWZkdF9saW5lPSIiCisJZWxzZQorCQljb25mX2Rlc2M9IkJvb3QgTGludXgga2VybmVsIHdpdGggRkRUIGJsb2IiCisJCWZkdF9saW5lPSJmZHQgPSBcImZkdEAkezJ9XCI7IgorCWZpCisJa2VybmVsX2xpbmU9Imtlcm5lbCA9IFwia2VybmVsQCR7MX1cIjsiCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBkZWZhdWx0ID0gImNvbmZAMSI7CisgICAgICAgICAgICAgICAgY29uZkAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIiR7Y29uZl9kZXNjfSI7CisJCQkke2tlcm5lbF9saW5lfQorCQkJJHtmZHRfbGluZX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ28gPSAiJHtjb25mX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCitkb19hc3NlbWJsZV9maXRpbWFnZSgpIHsKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieGZpdEltYWdlIiA7IHRoZW4KKwkJa2VybmVsY291bnQ9MQorCQlkdGJjb3VudD0iIgorCQlybSAtZiBmaXQtaW1hZ2UuaXRzCisKKwkJZml0aW1hZ2VfZW1pdF9maXRfaGVhZGVyCisKKwkJIworCQkjIFN0ZXAgMTogUHJlcGFyZSBhIGtlcm5lbCBpbWFnZSBzZWN0aW9uLgorCQkjCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBpbWFnZXN0YXJ0CisKKwkJdWJvb3RfcHJlcF9raW1hZ2UKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbCAiJHtrZXJuZWxjb3VudH0iIGxpbnV4LmJpbiAiJHtsaW51eF9jb21wfSIKKworCQkjCisJCSMgU3RlcCAyOiBQcmVwYXJlIGEgRFRCIGltYWdlIHNlY3Rpb24KKwkJIworCQlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJCWR0YmNvdW50PTEKKwkJCWZvciBEVEIgaW4gJHtLRVJORUxfREVWSUNFVFJFRX07IGRvCisJCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCQlEVEI9YGJhc2VuYW1lICR7RFRCfSB8IHNlZCAncyxcLmR0cyQsLmR0YixnJ2AKKwkJCQlmaQorCQkJCURUQl9QQVRIPSJhcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQkJRFRCX1BBVEg9ImFyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCQlmaQorCisJCQkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YiAke2R0YmNvdW50fSAke0RUQl9QQVRIfQorCQkJCWR0YmNvdW50PWBleHByICR7ZHRiY291bnR9ICsgMWAKKwkJCWRvbmUKKwkJZmkKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgc2VjdGVuZAorCisJCSMgRm9yY2UgdGhlIGZpcnN0IEtlcm5lbCBhbmQgRFRCIGluIHRoZSBkZWZhdWx0IGNvbmZpZworCQlrZXJuZWxjb3VudD0xCisJCWR0YmNvdW50PTEKKworCQkjCisJCSMgU3RlcCAzOiBQcmVwYXJlIGEgY29uZmlndXJhdGlvbnMgc2VjdGlvbgorCQkjCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBjb25mc3RhcnQKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnICR7a2VybmVsY291bnR9ICR7ZHRiY291bnR9CisKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IHNlY3RlbmQKKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgZml0ZW5kCisKKwkJIworCQkjIFN0ZXAgNDogQXNzZW1ibGUgdGhlIGltYWdlCisJCSMKKwkJdWJvb3QtbWtpbWFnZSAtZiBmaXQtaW1hZ2UuaXRzIGFyY2gvJHtBUkNIfS9ib290L2ZpdEltYWdlCisJZmkKK30KKworYWRkdGFzayBhc3NlbWJsZV9maXRpbWFnZSBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19jb21waWxlCisKK2tlcm5lbF9kb19kZXBsb3lfYXBwZW5kKCkgeworCSMgVXBkYXRlIGRlcGxveSBkaXJlY3RvcnkKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieGZpdEltYWdlIiA7IHRoZW4KKwkJY2QgJHtCfQorCQllY2hvICJDb3B5aW5nIGZpdC1pbWFnZS5pdHMgc291cmNlIGZpbGUuLi4iCisJCWl0c19iYXNlX25hbWU9IiR7S0VSTkVMX0lNQUdFVFlQRX0taXRzLSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCisJCWl0c19zeW1saW5rX25hbWU9JHtLRVJORUxfSU1BR0VUWVBFfS1pdHMtJHtNQUNISU5FfQorCQlpbnN0YWxsIC1tIDA2NDQgZml0LWltYWdlLml0cyAke0RFUExPWURJUn0vJHtpdHNfYmFzZV9uYW1lfS5pdHMKKwkJbGludXhfYmluX2Jhc2VfbmFtZT0iJHtLRVJORUxfSU1BR0VUWVBFfS1saW51eC5iaW4tJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKwkJbGludXhfYmluX3N5bWxpbmtfbmFtZT0ke0tFUk5FTF9JTUFHRVRZUEV9LWxpbnV4LmJpbi0ke01BQ0hJTkV9CisJCWluc3RhbGwgLW0gMDY0NCBsaW51eC5iaW4gJHtERVBMT1lESVJ9LyR7bGludXhfYmluX2Jhc2VfbmFtZX0uYmluCisKKwkJY2QgJHtERVBMT1lESVJ9CisJCWxuIC1zZiAke2l0c19iYXNlX25hbWV9Lml0cyAke2l0c19zeW1saW5rX25hbWV9Lml0cworCQlsbiAtc2YgJHtsaW51eF9iaW5fYmFzZV9uYW1lfS5iaW4gJHtsaW51eF9iaW5fc3ltbGlua19uYW1lfS5iaW4KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNmNDgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC1ncnViLmJiY2xhc3MKQEAgLTAsMCArMSw5MSBAQAorIworIyBXaGlsZSBpbnN0YWxsaW5nIGEgcnBtIHRvIHVwZGF0ZSBrZXJuZWwgb24gYSBkZXBsb3llZCB0YXJnZXQsIGl0IHdpbGwgdXBkYXRlCisjIHRoZSBib290IGFyZWEgYW5kIHRoZSBib290IG1lbnUgd2l0aCB0aGUga2VybmVsIGFzIHRoZSBwcmlvcml0eSBidXQgYWxsb3cKKyMgeW91IHRvIGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwga2VybmVsIGFzIHdlbGwuCisjCisjIC0gSW4ga2VybmVsLWltYWdlJ3MgcHJlaW5zdGFsbCBzY3JpcHRsZXQsIGl0IGJhY2tzIHVwIG9yaWdpbmFsIGtlcm5lbCB0byBhdm9pZAorIyAgIHByb2JhYmxlIGNvbmZsaWN0aW9uIHdpdGggdGhlIG5ldyBvbmUuCisjCisjIC0gSW4ga2VybmVsLWltYWdlJ3MgcG9zdGluc3RhbGwgc2NyaXB0bGV0LCBpdCBtb2RpZmllcyBncnViJ3MgY29uZmlnIGZpbGUgdG8KKyMgICB1cGRhdGVzIHRoZSBuZXcga2VybmVsIGFzIHRoZSBib290IHByaW9yaXR5LgorIworCitwa2dfcHJlaW5zdF9rZXJuZWwtaW1hZ2VfYXBwZW5kICgpIHsKKwkjIFBhcnNpbmcgY29uZmxpY3Rpb24KKwlbIC1mICIkRC9ib290L2dydWIvbWVudS5saXN0IiBdICYmIGdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiCisJWyAtZiAiJEQvYm9vdC9ncnViL2dydWIuY2ZnIiBdICYmIGdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKwlpZiBbIC1uICIkZ3J1YmNmZyIgXTsgdGhlbgorCQkjIERlcmVmZXJlbmNlIHN5bWxpbmsgdG8gYXZvaWQgY29uZmxpY3Rpb24gd2l0aCBuZXcga2VybmVsIG5hbWUuCisJCWlmIGdyZXAgLXEgIi8ke0tFUk5FTF9JTUFHRVRZUEV9IFwrcm9vdD0iICRncnViY2ZnOyB0aGVuCisJCQlpZiBbIC1MICIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0iIF07IHRoZW4KKwkJCQlraW1hZ2U9YHJlYWxwYXRoICREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSAyPi9kZXYvbnVsbGAKKwkJCQlpZiBbIC1mICIkRCRraW1hZ2UiIF07IHRoZW4KKwkJCQkJc2VkIC1pICJzOiR7S0VSTkVMX0lNQUdFVFlQRX0gXCtyb290PToke2tpbWFnZSMjKi99IHJvb3Q9OiIgJGdydWJjZmcKKwkJCQlmaQorCQkJZmkKKwkJZmkKKworCQkjIFJlbmFtZSBvbGQga2VybmVsIGlmIGl0IGNvbmZsaWN0cyB3aXRoIG5ldyBrZXJuZWwgbmFtZS4KKwkJaWYgZ3JlcCAtcSAiLyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gXCtyb290PSIgJGdydWJjZmc7IHRoZW4KKwkJCWlmIFsgLWYgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSIgXTsgdGhlbgorCQkJCXRpbWVzdGFtcD1gZGF0ZSArJXNgCisJCQkJa2ltYWdlPSIkRC9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0tJHRpbWVzdGFtcC1iYWNrIgorCQkJCXNlZCAtaSAiczoke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IFwrcm9vdD06JHtraW1hZ2UjIyovfSByb290PToiICRncnViY2ZnCisJCQkJbXYgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSIgIiRraW1hZ2UiCisJCQlmaQorCQlmaQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtaW1hZ2VfcHJlcGVuZCAoKSB7CisJZ2V0X25ld19ncnViX2NmZygpIHsKKwkJZ3J1YmNmZz0iJDEiCisJCW9sZF9pbWFnZT0iJDIiCisJCXRpdGxlPSJVcGRhdGUgJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfS0ke1BWfSIKKwkJaWYgWyAiJHtncnViY2ZnIyMqL30iID0gImdydWIuY2ZnIiBdOyB0aGVuCisJCQlyb290ZnM9YGdyZXAgIiAqbGludXggXCtbXiBdXCsgXCtyb290PSIgJGdydWJjZmcgLW0gMSB8IFwKKwkJCQkgc2VkICJzIyR7b2xkX2ltYWdlfSMke29sZF9pbWFnZSUvKn0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSMiYAorCisJCQllY2hvICJtZW51ZW50cnkgXCIkdGl0bGVcIiB7IgorCQkJZWNobyAiICAgIHNldCByb290PShoZDAsMSkiCisJCQllY2hvICIkcm9vdGZzIgorCQkJZWNobyAifSIKKwkJZWxpZiBbICIke2dydWJjZmcjIyovfSIgPSAibWVudS5saXN0IiBdOyB0aGVuCisJCQlyb290ZnM9YGdyZXAgImtlcm5lbCBcK1teIF1cKyBcK3Jvb3Q9IiAkZ3J1YmNmZyAtbSAxIHwgXAorCQkJCSBzZWQgInMjJHtvbGRfaW1hZ2V9IyR7b2xkX2ltYWdlJS8qfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IyJgCisKKwkJCWVjaG8gImRlZmF1bHQgMCIKKwkJCWVjaG8gInRpbWVvdXQgMzAiCisJCQllY2hvICJ0aXRsZSAkdGl0bGUiCisJCQllY2hvICJyb290ICAoaGQwLDApIgorCQkJZWNobyAiJHJvb3RmcyIKKwkJZmkKKwl9CisKKwlnZXRfb2xkX2dydWJfY2ZnKCkgeworCQlncnViY2ZnPSIkMSIKKwkJaWYgWyAiJHtncnViY2ZnIyMqL30iID0gImdydWIuY2ZnIiBdOyB0aGVuCisJCQljYXQgIiRncnViY2ZnIgorCQllbGlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJtZW51Lmxpc3QiIF07IHRoZW4KKwkJCXNlZCAtZSAnL15kZWZhdWx0L2QnIC1lICcvXnRpbWVvdXQvZCcgIiRncnViY2ZnIgorCQlmaQorCX0KKworCWlmIFsgLWYgIiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIgXTsgdGhlbgorCQlncnViY2ZnPSIkRC9ib290L2dydWIvZ3J1Yi5jZmciCisJCW9sZF9pbWFnZT1gZ3JlcCAnICpsaW51eCBcK1teIF1cKyBcK3Jvb3Q9JyAtbSAxICIkZ3J1YmNmZyIgfCBhd2sgJ3twcmludCAkMn0nYAorCWVsaWYgWyAtZiAiJEQvYm9vdC9ncnViL21lbnUubGlzdCIgXTsgdGhlbgorCQlncnViY2ZnPSIkRC9ib290L2dydWIvbWVudS5saXN0IgorCQlvbGRfaW1hZ2U9YGdyZXAgJ15rZXJuZWwgXCtbXiBdXCsgXCtyb290PScgLW0gMSAiJGdydWJjZmciIHwgYXdrICd7cHJpbnQgJDJ9J2AKKwlmaQorCisJIyBEb24ndCB1cGRhdGUgZ3J1YmNmZyBhdCBmaXJzdCBpbnN0YWxsIHdoaWxlIG9sZCBiekltYWdlIGRvZXNuJ3QgZXhpc3QuCisJaWYgWyAtZiAiJEQvYm9vdC8ke29sZF9pbWFnZSMjKi99IiBdOyB0aGVuCisJCWdydWJjZmd0bXA9IiRncnViY2ZnLnRtcCIKKwkJZ2V0X25ld19ncnViX2NmZyAiJGdydWJjZmciICIkb2xkX2ltYWdlIiAgPiAkZ3J1YmNmZ3RtcAorCQlnZXRfb2xkX2dydWJfY2ZnICIkZ3J1YmNmZyIgPj4gJGdydWJjZmd0bXAKKwkJbXYgJGdydWJjZmd0bXAgJGdydWJjZmcKKwkJZWNobyAiQ2F1dGlvbiEgVXBkYXRlIGtlcm5lbCBtYXkgYWZmZWN0IGtlcm5lbC1tb2R1bGUhIgorCWZpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTcwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLW1vZHVsZS1zcGxpdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjAzIEBACitwa2dfcG9zdGluc3RfbW9kdWxlcyAoKSB7CitpZiBbIC16ICIkRCIgXTsgdGhlbgorCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorZWxzZQorCSMgaW1hZ2UuYmJjbGFzcyB3aWxsIGNhbGwgZGVwbW9kd3JhcHBlciBhZnRlciBldmVyeXRoaW5nIGlzIGluc3RhbGxlZCwKKwkjIG5vIG5lZWQgdG8gZG8gaXQgaGVyZSBhcyB3ZWxsCisJOgorZmkKK30KKworcGtnX3Bvc3RybV9tb2R1bGVzICgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CitlbHNlCisJZGVwbW9kd3JhcHBlciAtYSAtYiAkRCAke0tFUk5FTF9WRVJTSU9OfQorZmkKK30KKworYXV0b2xvYWRfcG9zdGluc3RfZnJhZ21lbnQoKSB7CitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKwltb2Rwcm9iZSAlcyB8fCB0cnVlCitmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kLyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kLworfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInNwbGl0X2tlcm5lbF9tb2R1bGVfcGFja2FnZXMgIgorCitLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UgPz0gImtlcm5lbC1tb2R1bGVzIgorCitweXRob24gc3BsaXRfa2VybmVsX21vZHVsZV9wYWNrYWdlcyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBtb2RpbmZvZXhwID0gcmUuY29tcGlsZSgiKFtePV0rKT0oLiopIikKKyAgICBrZXJ2ZXJyZXhwID0gcmUuY29tcGlsZSgnXiguKi1oaC4qKVtcLlwrXS4qJCcpCisgICAgZGVwbW9kcGF0MCA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6Li4qJCIpCisgICAgZGVwbW9kcGF0MSA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqJCIpCisgICAgZGVwbW9kcGF0MiA9IHJlLmNvbXBpbGUoIl4oLipcLms/byk6XHMqKC4qXC5rP28pXHMqXFxcJCIpCisgICAgZGVwbW9kcGF0MyA9IHJlLmNvbXBpbGUoIl5cdCguKlwuaz9vKVxzKlxcXCQiKQorICAgIGRlcG1vZHBhdDQgPSByZS5jb21waWxlKCJeXHQoLipcLms/bylccyokIikKKworICAgIGRlZiBleHRyYWN0X21vZGluZm8oZmlsZSk6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZSwgc3VicHJvY2VzcworICAgICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgICAgICB0ZiA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0bXBmaWxlID0gdGZbMV0KKyAgICAgICAgY21kID0gIiVzb2JqY29weSAtaiAubW9kaW5mbyAtTyBiaW5hcnkgJXMgJXMiICUgKGQuZ2V0VmFyKCJIT1NUX1BSRUZJWCIsIFRydWUpIG9yICIiLCBmaWxlLCB0bXBmaWxlKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBmID0gb3Blbih0bXBmaWxlKQorICAgICAgICBsID0gZi5yZWFkKCkuc3BsaXQoIlwwMDAiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MuY2xvc2UodGZbMF0pCisgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQorICAgICAgICB2YWxzID0ge30KKyAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgIG0gPSBtb2RpbmZvZXhwLm1hdGNoKGkpCisgICAgICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsc1ttLmdyb3VwKDEpXSA9IG0uZ3JvdXAoMikKKyAgICAgICAgcmV0dXJuIHZhbHMKKworICAgIGRlZiBwYXJzZV9kZXBtb2QoKToKKworICAgICAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgICAgIGtlcm5lbHZlciA9IGQuZ2V0VmFyKCdLRVJORUxfVkVSU0lPTicsIFRydWUpCisgICAgICAgIGtlcm5lbHZlcl9zdHJpcHBlZCA9IGtlcm5lbHZlcgorICAgICAgICBtID0ga2VydmVycmV4cC5tYXRjaChrZXJuZWx2ZXIpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBrZXJuZWx2ZXJfc3RyaXBwZWQgPSBtLmdyb3VwKDEpCisgICAgICAgIHN0YWdpbmdfa2VybmVsX2RpciA9IGQuZ2V0VmFyKCJTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiIsIFRydWUpCisgICAgICAgIHN5c3RlbV9tYXBfZmlsZSA9ICIlcy9ib290L1N5c3RlbS5tYXAtJXMiICUgKGR2YXIsIGtlcm5lbHZlcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN5c3RlbV9tYXBfZmlsZSk6CisgICAgICAgICAgICBzeXN0ZW1fbWFwX2ZpbGUgPSAiJXMvU3lzdGVtLm1hcC0lcyIgJSAoc3RhZ2luZ19rZXJuZWxfZGlyLCBrZXJuZWx2ZXIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzdGVtX21hcF9maWxlKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiU3lzdGVtLm1hcC0lcyBkb2VzIG5vdCBleGlzdCBpbiAnJXMvYm9vdCcgbm9yIFNUQUdJTkdfS0VSTkVMX0JVSUxERElSICclcyciICUgKGtlcm5lbHZlciwgZHZhciwgc3RhZ2luZ19rZXJuZWxfZGlyKSkKKworICAgICAgICBjbWQgPSAiZGVwbW9kIC1uIC1hIC1iICVzIC1GICVzICVzIiAlIChkdmFyLCBzeXN0ZW1fbWFwX2ZpbGUsIGtlcm5lbHZlcl9zdHJpcHBlZCkKKyAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCwgJ3InKQorCisgICAgICAgIGRlcHMgPSB7fQorICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICBpZiBub3QgZGVwbW9kcGF0MC5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG0xID0gZGVwbW9kcGF0MS5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYgbTE6CisgICAgICAgICAgICAgICAgZGVwc1ttMS5ncm91cCgxKV0gPSBtMS5ncm91cCgyKS5zcGxpdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG0yID0gZGVwbW9kcGF0Mi5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG0yOgorICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXSA9IG0yLmdyb3VwKDIpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBtMyA9IGRlcG1vZHBhdDMubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgbTM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXS5leHRlbmQobTMuZ3JvdXAoMSkuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG0zID0gZGVwbW9kcGF0My5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBtNCA9IGRlcG1vZHBhdDQubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZGVwc1ttMi5ncm91cCgxKV0uZXh0ZW5kKG00Lmdyb3VwKDEpLnNwbGl0KCkpCisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZGVwcworCisgICAgZGVmIGdldF9kZXBlbmRlbmNpZXMoZmlsZSwgcGF0dGVybiwgZm9ybWF0KToKKyAgICAgICAgIyBmaWxlIG5vIGxvbmdlciBpbmNsdWRlcyBQS0dECisgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSBvciAnJywgJycsIDEpCisgICAgICAgICMgaW5zdGVhZCBpcyBwcmVmaXhlZCB3aXRoIC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfQorICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCIvbGliL21vZHVsZXMvJXMvIiAlIGQuZ2V0VmFyKCdLRVJORUxfVkVSU0lPTicsIFRydWUpIG9yICcnLCAnJywgMSkKKworICAgICAgICBpZiBmaWxlIGluIG1vZHVsZV9kZXBzOgorICAgICAgICAgICAgZGVwZW5kZW5jaWVzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIG1vZHVsZV9kZXBzW2ZpbGVdOgorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBvcy5wYXRoLmJhc2VuYW1lKGkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9uID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBkZXBlbmRlbmN5X3BrZyA9IGZvcm1hdCAlIG9uCisgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBlbmRlbmN5X3BrZykKKyAgICAgICAgICAgIHJldHVybiBkZXBlbmRlbmNpZXMKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgZnJvYl9tZXRhZGF0YShmaWxlLCBwa2csIHBhdHRlcm4sIGZvcm1hdCwgYmFzZW5hbWUpOgorICAgICAgICB2YWxzID0gZXh0cmFjdF9tb2RpbmZvKGZpbGUpCisKKyAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICAgICAjIElmIGF1dG9sb2FkaW5nIGlzIHJlcXVlc3RlZCwgb3V0cHV0IC9ldGMvbW9kdWxlcy1sb2FkLmQvPG5hbWU+LmNvbmYgYW5kIGFwcGVuZAorICAgICAgICAjIGFwcHJvcHJpYXRlIG1vZHByb2JlIGNvbW1hbmRzIHRvIHRoZSBwb3N0aW5zdAorICAgICAgICBhdXRvbG9hZGxpc3QgPSAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfQVVUT0xPQUQiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBhdXRvbG9hZCA9IGQuZ2V0VmFyKCdtb2R1bGVfYXV0b2xvYWRfJXMnICUgYmFzZW5hbWUsIFRydWUpCisgICAgICAgIGlmIGF1dG9sb2FkIGFuZCBhdXRvbG9hZCA9PSBiYXNlbmFtZToKKyAgICAgICAgICAgIGJiLndhcm4oIm1vZHVsZV9hdXRvbG9hZF8lcyB3YXMgcmVwbGFjZWQgYnkgS0VSTkVMX01PRFVMRV9BVVRPTE9BRCBmb3IgY2FzZXMgd2hlcmUgYmFzZW5hbWUgPT0gbW9kdWxlIG5hbWUsIHBsZWFzZSBkcm9wIGl0IiAlIGJhc2VuYW1lKQorICAgICAgICBpZiBhdXRvbG9hZCBhbmQgYmFzZW5hbWUgbm90IGluIGF1dG9sb2FkbGlzdDoKKyAgICAgICAgICAgIGJiLndhcm4oIm1vZHVsZV9hdXRvbG9hZF8lcyBpcyBkZWZpbmVkIGJ1dCAnJXMnIGlzbid0IGluY2x1ZGVkIGluIEtFUk5FTF9NT0RVTEVfQVVUT0xPQUQsIHBsZWFzZSBhZGQgaXQgdGhlcmUiICUgKGJhc2VuYW1lLCBiYXNlbmFtZSkpCisgICAgICAgIGlmIGJhc2VuYW1lIGluIGF1dG9sb2FkbGlzdDoKKyAgICAgICAgICAgIG5hbWUgPSAnJXMvZXRjL21vZHVsZXMtbG9hZC5kLyVzLmNvbmYnICUgKGR2YXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgaWYgYXV0b2xvYWQ6CisgICAgICAgICAgICAgICAgZm9yIG0gaW4gYXV0b2xvYWQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIGJhc2VuYW1lKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJwa2dfcG9zdGluc3RfJXMgbm90IGRlZmluZWQiICUgcGtnKQorICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ2F1dG9sb2FkX3Bvc3RpbnN0X2ZyYWdtZW50JywgVHJ1ZSkgJSAoYXV0b2xvYWQgb3IgYmFzZW5hbWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgIyBXcml0ZSBvdXQgYW55IG1vZGNvbmYgZnJhZ21lbnQKKyAgICAgICAgbW9kY29uZmxpc3QgPSAoZC5nZXRWYXIoIktFUk5FTF9NT0RVTEVfUFJPQkVDT05GIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgbW9kY29uZiA9IGQuZ2V0VmFyKCdtb2R1bGVfY29uZl8lcycgJSBiYXNlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbW9kY29uZiBhbmQgYmFzZW5hbWUgaW4gbW9kY29uZmxpc3Q6CisgICAgICAgICAgICBuYW1lID0gJyVzL2V0Yy9tb2Rwcm9iZS5kLyVzLmNvbmYnICUgKGR2YXIsIGJhc2VuYW1lKQorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiJXNcbiIgJSBtb2Rjb25mKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGVsaWYgbW9kY29uZjoKKyAgICAgICAgICAgIGJiLmVycm9yKCJQbGVhc2UgZW5zdXJlIG1vZHVsZSAlcyBpcyBsaXN0ZWQgaW4gS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYgc2luY2UgbW9kdWxlX2NvbmZfJXMgaXMgc2V0IiAlIChiYXNlbmFtZSwgYmFzZW5hbWUpKQorCisgICAgICAgIGZpbGVzID0gZC5nZXRWYXIoJ0ZJTEVTXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgZmlsZXMgPSAiJXMgL2V0Yy9tb2R1bGVzLWxvYWQuZC8lcy5jb25mIC9ldGMvbW9kcHJvYmUuZC8lcy5jb25mIiAlIChmaWxlcywgYmFzZW5hbWUsIGJhc2VuYW1lKQorICAgICAgICBkLnNldFZhcignRklMRVNfJXMnICUgcGtnLCBmaWxlcykKKworICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIHZhbHM6CisgICAgICAgICAgICBvbGRfZGVzYyA9IGQuZ2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZC5zZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIG9sZF9kZXNjICsgIjsgIiArIHZhbHNbImRlc2NyaXB0aW9uIl0pCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIGdldF9kZXBlbmRlbmNpZXMoZmlsZSwgcGF0dGVybiwgZm9ybWF0KToKKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXSA9IFtdCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgICAgICAjIEF2b2lkIGF1dG9tYXRpYyAtZGV2IHJlY29tbWVuZGF0aW9ucyBmb3IgbW9kdWxlcyBlbmRpbmcgd2l0aCAtZGV2LgorICAgICAgICBkLnNldFZhckZsYWcoJ1JSRUNPTU1FTkRTXycgKyBwa2csICdub2RlcHJyZWNzJywgMSkKKworICAgIG1vZHVsZV9kZXBzID0gcGFyc2VfZGVwbW9kKCkKKyAgICBtb2R1bGVfcmVnZXggPSAnXiguKilcLms/byQnCisgICAgbW9kdWxlX3BhdHRlcm4gPSAna2VybmVsLW1vZHVsZS0lcycKKworICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF9tb2R1bGVzJywgVHJ1ZSkKKyAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV9tb2R1bGVzJywgVHJ1ZSkKKworICAgIG1vZHVsZXMgPSBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290PScvbGliL21vZHVsZXMnLCBmaWxlX3JlZ2V4PW1vZHVsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm49bW9kdWxlX3BhdHRlcm4sIGRlc2NyaXB0aW9uPSclcyBrZXJuZWwgbW9kdWxlJywgcG9zdGluc3Q9cG9zdGluc3QsIHBvc3RybT1wb3N0cm0sIHJlY3Vyc2l2ZT1UcnVlLCBob29rPWZyb2JfbWV0YWRhdGEsIGV4dHJhX2RlcGVuZHM9J2tlcm5lbC0lcycgJSAoZC5nZXRWYXIoIktFUk5FTF9WRVJTSU9OIiwgVHJ1ZSkpKQorICAgIGlmIG1vZHVsZXM6CisgICAgICAgIG1ldGFwa2cgPSBkLmdldFZhcignS0VSTkVMX01PRFVMRVNfTUVUQV9QQUNLQUdFJywgVHJ1ZSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBtZXRhcGtnLCAnICcrJyAnLmpvaW4obW9kdWxlcykpCisKKyAgICAjIElmIG1vZHVsZXMtbG9hZC5kIGFuZCBtb2Rwcm9iZS5kIGFyZSBlbXB0eSBhdCB0aGlzIHBvaW50LCByZW1vdmUgdGhlbSB0bworICAgICMgYXZvaWQgd2FybmluZ3MuIHJlbW92ZWRpcnMgb25seSByYWlzZXMgYW4gT1NFcnJvciBpZiBhbiBlbXB0eQorICAgICMgZGlyZWN0b3J5IGNhbm5vdCBiZSByZW1vdmVkLgorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIGRpciBpbiBbIiVzL2V0Yy9tb2Rwcm9iZS5kIiAlIChkdmFyKSwgIiVzL2V0Yy9tb2R1bGVzLWxvYWQuZCIgJSAoZHZhciksICIlcy9ldGMiICUgKGR2YXIpXToKKyAgICAgICAgaWYgbGVuKG9zLmxpc3RkaXIoZGlyKSkgPT0gMDoKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKK30KKworZG9fcGFja2FnZVt2YXJkZXBzXSArPSAnJHtAIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAibW9kdWxlX2NvbmZfIiArIHMsIChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkpfScKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWJvb3QuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWJvb3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVlN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjAgQEAKK3Vib290X3ByZXBfa2ltYWdlKCkgeworCWlmIHRlc3QgLWUgYXJjaC8ke0FSQ0h9L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4IDsgdGhlbgorCQl2bWxpbnV4X3BhdGg9ImFyY2gvJHtBUkNIfS9ib290L2NvbXByZXNzZWQvdm1saW51eCIKKwkJbGludXhfc3VmZml4PSIiCisJCWxpbnV4X2NvbXA9Im5vbmUiCisJZWxzZQorCQl2bWxpbnV4X3BhdGg9InZtbGludXgiCisJCWxpbnV4X3N1ZmZpeD0iLmd6IgorCQlsaW51eF9jb21wPSJnemlwIgorCWZpCisKKwkke09CSkNPUFl9IC1PIGJpbmFyeSAtUiAubm90ZSAtUiAuY29tbWVudCAtUyAiJHt2bWxpbnV4X3BhdGh9IiBsaW51eC5iaW4KKworCWlmIFsgIiR7bGludXhfY29tcH0iICE9ICJub25lIiBdIDsgdGhlbgorCQlnemlwIC05IGxpbnV4LmJpbgorCQltdiAtZiAibGludXguYmluJHtsaW51eF9zdWZmaXh9IiBsaW51eC5iaW4KKwlmaQorCisJZWNobyAiJHtsaW51eF9jb21wfSIKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Mzk2NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLXVpbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKK2luaGVyaXQga2VybmVsLXVib290CisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAga2VybmVsdHlwZSA9IGQuZ2V0VmFyKCdLRVJORUxfSU1BR0VUWVBFJywgVHJ1ZSkKKyAgICBpZiBrZXJuZWx0eXBlID09ICd1SW1hZ2UnOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoIkRFUEVORFMiLCBUcnVlKQorICAgICAgICBkZXBlbmRzID0gIiVzIHUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKworCSMgT3ZlcnJpZGUgS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSB2YXJpYWJsZSwgd2hpY2ggaXMgaW50ZXJuYWwKKwkjIHRvIGtlcm5lbC5iYmNsYXNzIC4gV2Ugb3ZlcnJpZGUgdGhlIHZhcmlhYmxlIGhlcmUsIHNpbmNlIHdlIG5lZWQKKwkjIHRvIGJ1aWxkIHVJbWFnZSB1c2luZyB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpZiBhbmQgb25seSBpZgorCSMgS0VFUFVJTUFHRSA9PSB5ZXMuIE90aGVyd2lzZSwgd2UgcGFjayBjb21wcmVzc2VkIHZtbGludXggaW50bworCSMgdGhlIHVJbWFnZSAuCisJaWYgZC5nZXRWYXIoIktFRVBVSU1BR0UiLCBUcnVlKSAhPSAneWVzJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIiwgInpJbWFnZSIpCit9CisKK2RvX3Vib290X21raW1hZ2UoKSB7CisJaWYgdGVzdCAieCR7S0VSTkVMX0lNQUdFVFlQRX0iID0gInh1SW1hZ2UiIDsgdGhlbgorCQlpZiB0ZXN0ICJ4JHtLRUVQVUlNQUdFfSIgIT0gInh5ZXMiIDsgdGhlbgorCQkJdWJvb3RfcHJlcF9raW1hZ2UKKworCQkJRU5UUllQT0lOVD0ke1VCT09UX0VOVFJZUE9JTlR9CisJCQlpZiB0ZXN0IC1uICIke1VCT09UX0VOVFJZU1lNQk9MfSI7IHRoZW4KKwkJCQlFTlRSWVBPSU5UPWAke0hPU1RfUFJFRklYfW5tICR7U30vdm1saW51eCB8IFwKKwkJCQkJYXdrICckMz09IiR7VUJPT1RfRU5UUllTWU1CT0x9IiB7cHJpbnQgJDF9J2AKKwkJCWZpCisKKwkJCXVib290LW1raW1hZ2UgLUEgJHtVQk9PVF9BUkNIfSAtTyBsaW51eCAtVCBrZXJuZWwgLUMgIiR7bGludXhfY29tcH0iIC1hICR7VUJPT1RfTE9BREFERFJFU1N9IC1lICRFTlRSWVBPSU5UIC1uICIke0RJU1RST19OQU1FfS8ke1BWfS8ke01BQ0hJTkV9IiAtZCBsaW51eC5iaW4gYXJjaC8ke0FSQ0h9L2Jvb3QvdUltYWdlCisJCQlybSAtZiBsaW51eC5iaW4KKwkJZmkKKwlmaQorfQorCithZGR0YXNrIHVib290X21raW1hZ2UgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC15b2N0by5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNWY5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKQEAgLTAsMCArMSwzNjggQEAKKyMgcmVtb3ZlIHRhc2tzIHRoYXQgbW9kaWZ5IHRoZSBzb3VyY2UgdHJlZSBpbiBjYXNlIGV4dGVybmFsc3JjIGlzIGluaGVyaXRlZAorU1JDVFJFRUNPVkVSRURUQVNLUyArPSAiZG9fa2VybmVsX2xpbmtfdm1saW51eCBkb19rZXJuZWxfY29uZmlnbWUgZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fa2VybmVsX2NvbmZpZ2NoZWNrIGRvX2tlcm5lbF9jaGVja291dCBkb19zaGFyZWRfd29ya2RpciBkb19mZXRjaCBkb191bnBhY2sgZG9fcGF0Y2giCisKKyMgcmV0dXJucyBsb2NhbCAoYWJzb2x1dGUpIHBhdGggbmFtZXMgZm9yIGFsbCB2YWxpZCBwYXRjaGVzIGluIHRoZQorIyBzcmNfdXJpCitkZWYgZmluZF9wYXRjaGVzKGQpOgorICAgIHBhdGNoZXMgPSBzcmNfcGF0Y2hlcyhkKQorICAgIHBhdGNoX2xpc3Q9W10KKyAgICBmb3IgcCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgXyA9IGJiLmZldGNoLmRlY29kZXVybChwKQorICAgICAgICBwYXRjaF9saXN0LmFwcGVuZChsb2NhbCkKKworICAgIHJldHVybiBwYXRjaF9saXN0CisKKyMgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNyYyB1cmkgdGhhdCBhcmUgLnNjYyBmaWxlcworZGVmIGZpbmRfc2NjcyhkKToKKyAgICBzb3VyY2VzPXNyY19wYXRjaGVzKGQsIFRydWUpCisgICAgc291cmNlc19saXN0PVtdCisgICAgZm9yIHMgaW4gc291cmNlczoKKyAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHMpKQorICAgICAgICBpZiBleHQgYW5kIGV4dCBpbiBbIi5zY2MiLCAiLmNmZyJdOgorICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQorICAgICAgICBlbGlmIGJhc2UgYW5kIGJhc2UgaW4gJ2RlZmNvbmZpZyc6CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisKKyAgICByZXR1cm4gc291cmNlc19saXN0CisKKyMgY2hlY2sgdGhlIFNSQ19VUkkgZm9yICJrbWV0YSIgdHlwZSdkIGdpdCByZXBvc2l0b3JpZXMuIFJldHVybiB0aGUgbmFtZSBvZgorIyB0aGUgcmVwb3NpdG9yeSBhcyBpdCB3aWxsIGJlIGZvdW5kIGluIFdPUktESVIKK2RlZiBmaW5kX2tlcm5lbF9mZWF0dXJlX2RpcnMoZCk6CisgICAgZmVhdHVyZV9kaXJzPVtdCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCisgICAgICAgIHR5cGU9IiIKKyAgICAgICAgaWYgInR5cGUiIGluIHBhcm06CisgICAgICAgICAgICB0eXBlID0gcGFybVsidHlwZSJdCisgICAgICAgIGlmICJkZXN0c3VmZml4IiBpbiBwYXJtOgorICAgICAgICAgICAgZGVzdGRpciA9IHBhcm1bImRlc3RzdWZmaXgiXQorICAgICAgICAgICAgaWYgdHlwZSA9PSAia21ldGEiOgorICAgICAgICAgICAgICAgIGZlYXR1cmVfZGlycy5hcHBlbmQoZGVzdGRpcikKKwkgICAgCisgICAgcmV0dXJuIGZlYXR1cmVfZGlycworCisjIGZpbmQgdGhlIG1hc3Rlci9tYWNoaW5lIHNvdXJjZSBicmFuY2guIEluIHRoZSBzYW1lIHdheSB0aGF0IHRoZSBmZXRjaGVyIHByb2Nlc2VzCisjIGdpdCByZXBvc2l0b3JpZXMgaW4gdGhlIFNSQ19VUkkgd2UgdGFrZSB0aGUgZmlyc3QgcmVwbyBmb3VuZCwgZmlyc3QgYnJhbmNoLgorZGVmIGdldF9tYWNoaW5lX2JyYW5jaChkLCBkZWZhdWx0KToKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgIHBhcm0gPSB1cmxkYXRhLnBhcm0KKyAgICAgICAgaWYgImJyYW5jaCIgaW4gcGFybToKKyAgICAgICAgICAgIGJyYW5jaGVzID0gdXJsZGF0YS5wYXJtLmdldCgiYnJhbmNoIikuc3BsaXQoJywnKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaGVzWzBdCisJICAgIAorICAgIHJldHVybiBkZWZhdWx0CisKK2RvX2tlcm5lbF9tZXRhZGF0YSgpIHsKKwlzZXQgK2UKKwljZCAke1N9CisJZXhwb3J0IEtNRVRBPSR7S01FVEF9CisKKwkjIGlmIGtlcm5lbCB0b29scyBhcmUgYXZhaWxhYmxlIGluLXRyZWUsIHRoZXkgYXJlIHByZWZlcnJlZAorCSMgYW5kIGFyZSBwbGFjZWQgb24gdGhlIHBhdGggYmVmb3JlIGFueSBleHRlcm5hbCB0b29scy4gVW5sZXNzCisJIyB0aGUgZXh0ZXJuYWwgdG9vbHMgZmxhZyBpcyBzZXQsIGluIHRoYXQgY2FzZSB3ZSBkbyBub3RoaW5nLgorCWlmIFsgLWYgIiR7U30vc2NyaXB0cy91dGlsL2NvbmZpZ21lIiBdOyB0aGVuCisJCWlmIFsgLXogIiR7RVhURVJOQUxfS0VSTkVMX1RPT0xTfSIgXTsgdGhlbgorCQkJUEFUSD0ke1N9L3NjcmlwdHMvdXRpbDoke1BBVEh9CisJCWZpCisJZmkKKworCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKwltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZfbWFjaGluZX0iCisJaWYgWyAteiAiJHttYWNoaW5lX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBmYWxsYmFjayB0byBTUkNSRVYgaWYgYSBub24gbWFjaGluZV9tZXRhIHRyZWUgaXMgYmVpbmcgYnVpbHQKKwkJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwlmaQorCisJIyBJbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRoZSBrZXJuZWwgaXRzZWxmOgorCSMKKwkjICAgZGVmY29uZmlnOiAkKG9iaikvY29uZgorCSMgICBpZmVxICgkKEtCVUlMRF9ERUZDT05GSUcpLCkKKwkjCSQ8IC0tZGVmY29uZmlnICQoS2NvbmZpZykKKwkjICAgZWxzZQorCSMJQGVjaG8gIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gJyQoS0JVSUxEX0RFRkNPTkZJRyknIgorCSMJJChRKSQ8IC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChLY29uZmlnKQorCSMgICBlbmRpZgorCSMKKwkjIElmIGEgZGVmY29uZmlnIGlzIHNwZWNpZmllZCB2aWEgdGhlIEtCVUlMRF9ERUZDT05GSUcgdmFyaWFibGUsIHdlIGNvcHkgaXQKKwkjIGZyb20gdGhlIHNvdXJjZSB0cmVlLCBpbnRvIGEgY29tbW9uIGxvY2F0aW9uIGFuZCBub3JtYWxpemVkICJkZWZjb25maWciIG5hbWUsCisJIyB3aGVyZSB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyB3aWxsIGluY2x1ZGUgYW5kIGluY29yb3BvcmF0ZSBpdCBpbnRvIHRoZSBidWlsZAorCSMKKwkjIElmIHRoZSBmZXRjaGVyIGhhcyBhbHJlYWR5IHBsYWNlZCBhIGRlZmNvbmZpZyBpbiBXT1JLRElSIChmcm9tIHRoZSBTUkNfVVJJKSwKKwkjIHdlIGRvbid0IG92ZXJ3cml0ZSBpdCwgYnV0IGluc3RlYWQgd2FybiB0aGUgdXNlciB0aGF0IFNSQ19VUkkgZGVmY29uZmlncyB0YWtlCisJIyBwcmVjZW5kZW5jZS4KKwkjCisJaWYgWyAtbiAiJHtLQlVJTERfREVGQ09ORklHfSIgXTsgdGhlbgorCQlpZiBbIC1mICIke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30iIF07IHRoZW4KKwkJCWlmIFsgLWYgIiR7V09SS0RJUn0vZGVmY29uZmlnIiBdOyB0aGVuCisJCQkJIyBJZiB0aGUgdHdvIGRlZmNvbmZpZydzIGFyZSBkaWZmZXJlbnQsIHdhcm4gdGhhdCB3ZSBkaWRuJ3Qgb3ZlcndyaXRlIHRoZQorCQkJCSMgb25lIGFscmVhZHkgcGxhY2VkIGluIFdPUktESVIgYnkgdGhlIGZldGNoZXIuCisJCQkJY21wICIke1dPUktESVJ9L2RlZmNvbmZpZyIgIiR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSIKKwkJCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCQkJYmJ3YXJuICJkZWZjb25maWcgZGV0ZWN0ZWQgaW4gV09SS0RJUi4gJHtLQlVJTERfREVGQ09ORklHfSBza2lwcGVkIgorCQkJCWZpCisJCQllbHNlCisJCQkJY3AgLWYgJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9ICR7V09SS0RJUn0vZGVmY29uZmlnCisJCQkJc2Njcz0iJHtXT1JLRElSfS9kZWZjb25maWciCisJCQlmaQorCQllbHNlCisJCQliYmZhdGFsICJBIEtCVUlMRF9ERUNPTkZJRyAnJHtLQlVJTERfREVGQ09ORklHfScgd2FzIHNwZWNpZmllZCwgYnV0IG5vdCBwcmVzZW50IGluIHRoZSBzb3VyY2UgdHJlZSIKKwkJZmkKKwlmaQorCisJc2Njcz0iJHNjY3MgJHtAIiAiLmpvaW4oZmluZF9zY2NzKGQpKX0iCisJcGF0Y2hlcz0iJHtAIiAiLmpvaW4oZmluZF9wYXRjaGVzKGQpKX0iCisJZmVhdF9kaXJzPSIke0AiICIuam9pbihmaW5kX2tlcm5lbF9mZWF0dXJlX2RpcnMoZCkpfSIKKworCSMgYWRkIGFueSBleHBsaWNpdGx5IHJlZmVyZW5jZWQgZmVhdHVyZXMgb250byB0aGUgZW5kIG9mIHRoZSBmZWF0dXJlCisJIyBsaXN0IHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgYnVpbGQgc2NyaXB0cy4KKwlpZiBbIC1uICIke0tFUk5FTF9GRUFUVVJFU30iIF07IHRoZW4KKwkJZm9yIGZlYXQgaW4gJHtLRVJORUxfRkVBVFVSRVN9OyBkbworCQkJYWRkb25fZmVhdHVyZXM9IiRhZGRvbl9mZWF0dXJlcyAtLWZlYXR1cmUgJGZlYXQiCisJCWRvbmUKKwlmaQorCisJIyBjaGVjayBmb3IgZmVhdHVyZSBkaXJlY3Rvcmllcy9yZXBvcy9icmFuY2hlcyB0aGF0IHdlcmUgcGFydCBvZiB0aGUKKwkjIFNSQ19VUkkuIElmIHRoZXkgd2VyZSBzdXBwbGllZCwgd2UgY29udmVydCB0aGVtIGludG8gaW5jbHVkZSBkaXJlY3RpdmVzCisJIyBmb3IgdGhlIHVwZGF0ZSBwYXJ0IG9mIHRoZSBwcm9jZXNzCisJaWYgWyAtbiAiJHtmZWF0X2RpcnN9IiBdOyB0aGVuCisJICAgIGZvciBmIGluICR7ZmVhdF9kaXJzfTsgZG8KKwkJaWYgWyAtZCAiJHtXT1JLRElSfS8kZi9tZXRhIiBdOyB0aGVuCisJCSAgICBpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJHtXT1JLRElSfS8kZi9tZXRhIgorCQllbGlmIFsgLWQgIiR7V09SS0RJUn0vJGYiIF07IHRoZW4KKwkJICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkke1dPUktESVJ9LyRmIgorCQlmaQorCSAgICBkb25lCisJZmkKKworCSMgdXBkYXRlcyBvciBnZW5lcmF0ZXMgdGhlIHRhcmdldCBkZXNjcmlwdGlvbgorCXVwZGF0ZW1lICR7dXBkYXRlbWVfZmxhZ3N9IC1ES0RFU0M9JHtLTUFDSElORX06JHtMSU5VWF9LRVJORUxfVFlQRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZXN9ICR7YWRkb25fZmVhdHVyZXN9ICR7QVJDSH0gJHtLTUFDSElORX0gJHtzY2NzfSAke3BhdGNoZXN9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgdXBkYXRlICR7bWFjaGluZV9icmFuY2h9IgorCWZpCit9CisKK2RvX3BhdGNoKCkgeworCWNkICR7U30KKworCSMgZXhlY3V0ZXMgYW5kIG1vZGlmaWVzIHRoZSBzb3VyY2UgdHJlZSBhcyByZXF1aXJlZAorCXBhdGNobWUgJHtLTUFDSElORX0KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJlcnJvciAiQ291bGQgbm90IGFwcGx5IHBhdGNoZXMgZm9yICR7S01BQ0hJTkV9LiIKKwkJYmJmYXRhbF9sb2cgIlBhdGNoIGZhaWx1cmVzIGNhbiBiZSByZXNvbHZlZCBpbiB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeSAke1N9KSIKKwlmaQorCisJIyBjaGVjayB0byBzZWUgaWYgdGhlIHNwZWNpZmllZCBTUkNSRVYgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGZpbmFsIGJyYW5jaC4KKwkjIGlmIGl0IHdhc24ndCBzb21ldGhpbmcgd3JvbmcgaGFzIGhhcHBlbmVkLCBhbmQgd2Ugc2hvdWxkIGVycm9yLgorCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKKwlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgorCQkjIGZhbGxiYWNrIHRvIFNSQ1JFViBpZiBhIG5vbiBtYWNoaW5lX21ldGEgdHJlZSBpcyBiZWluZyBidWlsdAorCQltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZ9IgorCQkjIGlmIFNSQ1JFViBjYW5ub3QgYmUgcmVhY2hlZCBzb21ldGhpbmcgaXMgd3JvbmcuCisJCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCisJCQliYmZhdGFsICJOZWl0aGVyIFNSQ1JFVl9tYWNoaW5lIG9yIFNSQ1JFViB3YXMgc3BlY2lmaWVkISIKKwkJZmkKKwlmaQorCisJaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iICE9ICJBVVRPSU5DIiBdOyB0aGVuCisJCWlmICEgWyAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICR7bWFjaGluZV9zcmNyZXZ9fjApIiA9ICIkKGdpdCBtZXJnZS1iYXNlICR7bWFjaGluZV9zcmNyZXZ9IEhFQUQpIiBdOyB0aGVuCisJCQliYmVycm9yICJTUkNSRVYgJHttYWNoaW5lX3NyY3Jldn0gd2FzIHNwZWNpZmllZCwgYnV0IGlzIG5vdCByZWFjaGFibGUiCisJCQliYmZhdGFsICJDaGVjayB0aGUgQlNQIGRlc2NyaXB0aW9uIGZvciBpbmNvcnJlY3QgYnJhbmNoIHNlbGVjdGlvbiwgb3Igb3RoZXIgZXJyb3JzLiIKKwkJZmkKKwlmaQorfQorCitkb19rZXJuZWxfY2hlY2tvdXQoKSB7CisJc2V0ICtlCisKKwlzb3VyY2VfZGlyPWBlY2hvICR7U30gfCBzZWQgJ3MlLyQlJSdgCisJc291cmNlX3dvcmtkaXI9IiR7V09SS0RJUn0vZ2l0IgorCWlmIFsgLWQgIiR7V09SS0RJUn0vZ2l0LyIgXTsgdGhlbgorCQkjIGNhc2U6IGdpdCByZXBvc2l0b3J5IChiYXJlIG9yIG5vbi1iYXJlKQorCQkjIGlmIFMgaXMgV09SS0RJUi9naXQsIHRoZW4gd2Ugc2hvdWxkbid0IGJlIG1vdmluZyBvciBkZWxldGluZyB0aGUgdHJlZS4KKwkJaWYgWyAiJHtzb3VyY2VfZGlyfSIgIT0gIiR7c291cmNlX3dvcmtkaXJ9IiBdOyB0aGVuCisJCQlybSAtcmYgJHtTfQorCQkJbXYgJHtXT1JLRElSfS9naXQgJHtTfQorCQlmaQorCQljZCAke1N9CisJZWxzZQorCQkjIGNhc2U6IHdlIGhhdmUgbm8gZ2l0IHJlcG9zaXRvcnkgYXQgYWxsLiAKKwkJIyBUbyBzdXBwb3J0IGxvdyBiYW5kd2lkdGggb3B0aW9ucyBmb3IgYnVpbGRpbmcgdGhlIGtlcm5lbCwgd2UnbGwganVzdCAKKwkJIyBjb252ZXJ0IHRoZSB0cmVlIHRvIGEgZ2l0IHJlcG8gYW5kIGxldCB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyB3b3JrIHVuY2hhbmdlZAorCQkKKwkJIyBpZiAke1N9IGhhc24ndCBiZWVuIHNldCB0byB0aGUgcHJvcGVyIHN1YmRpcmVjdG9yeSBhIGRlZmF1bHQgb2YgImxpbnV4IiBpcyAKKwkJIyB1c2VkLCBidXQgd2UgY2FuJ3QgaW5pdGlhbGl6ZSB0aGF0IGVtcHR5IGRpcmVjdG9yeS4gU28gY2hlY2sgaXQgYW5kIHRocm93IGEKKwkJIyBjbGVhciBlcnJvcgorCisJICAgICAgICBjZCAke1N9CisJCWlmIFsgISAtZiAiTWFrZWZpbGUiIF07IHRoZW4KKwkJCWJiZXJyb3IgIlMgaXMgbm90IHNldCB0byB0aGUgbGludXggc291cmNlIGRpcmVjdG9yeS4gQ2hlY2sgIgorCQkJYmJmYXRhbCAidGhlIHJlY2lwZSBhbmQgc2V0IFMgdG8gdGhlIHByb3BlciBleHRyYWN0ZWQgc3ViZGlyZWN0b3J5IgorCQlmaQorCQlybSAtZiAuZ2l0aWdub3JlCisJCWdpdCBpbml0CisJCWdpdCBhZGQgLgorCQlnaXQgY29tbWl0IC1xIC1tICJiYXNlbGluZSBjb21taXQ6IGNyZWF0aW5nIHJlcG8gZm9yICR7UE59LSR7UFZ9IgorCQlnaXQgY2xlYW4gLWQgLWYKKwlmaQorCisJIyBjb252ZXJ0IGFueSByZW1vdGUgYnJhbmNoZXMgdG8gbG9jYWwgdHJhY2tpbmcgb25lcworCWZvciBpIGluIGBnaXQgYnJhbmNoIC1hIC0tbm8tY29sb3IgfCBncmVwIHJlbW90ZXMgfCBncmVwIC12IEhFQURgOyBkbworCQliPWBlY2hvICRpIHwgY3V0IC1kJyAnIC1mMiB8IHNlZCAncyVyZW1vdGVzL29yaWdpbi8lJSdgOworCQlnaXQgc2hvdy1yZWYgLS1xdWlldCAtLXZlcmlmeSAtLSAicmVmcy9oZWFkcy8kYiIKKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQlnaXQgYnJhbmNoICRiICRpID4gL2Rldi9udWxsCisJCWZpCisJZG9uZQorCisJIyBDcmVhdGUgYSB3b3JraW5nIHRyZWUgY29weSBvZiB0aGUga2VybmVsIGJ5IGNoZWNraW5nIG91dCBhIGJyYW5jaAorCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKworCSMgY2hlY2tvdXQgYW5kIGNsb2JiZXIgYW55IHVuaW1wb3J0YW50IGZpbGVzCisJZ2l0IGNoZWNrb3V0IC1mICR7bWFjaGluZV9icmFuY2h9Cit9Citkb19rZXJuZWxfY2hlY2tvdXRbZGlyc10gPSAiJHtTfSIKKworYWRkdGFzayBrZXJuZWxfY2hlY2tvdXQgYmVmb3JlIGRvX2tlcm5lbF9tZXRhZGF0YSBhZnRlciBkb191bnBhY2sKK2FkZHRhc2sga2VybmVsX21ldGFkYXRhIGFmdGVyIGRvX3ZhbGlkYXRlX2JyYW5jaGVzIGRvX3VucGFjayBiZWZvcmUgZG9fcGF0Y2gKK2RvX2tlcm5lbF9tZXRhZGF0YVtkZXBlbmRzXSA9ICJrZXJuLXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19rZXJuZWxfY29uZmlnbWVbZGlyc10gKz0gIiR7U30gJHtCfSIKK2RvX2tlcm5lbF9jb25maWdtZSgpIHsKKwliYm5vdGUgImtlcm5lbCBjb25maWdtZSIKKwlleHBvcnQgS01FVEE9JHtLTUVUQX0KKworCWlmIFsgLW4gIiR7S0NPTkZJR19NT0RFfSIgXTsgdGhlbgorCQljb25maWdtZWZsYWdzPSR7S0NPTkZJR19NT0RFfQorCWVsc2UKKwkJIyBJZiBhIGRlZmNvbmZpZyB3YXMgcGFzc2VkLCB1c2UgPW4gYXMgdGhlIGJhc2VsaW5lLCB3aGljaCBpcyBhY2hpZXZlZAorCQkjIHZpYSAtLWFsbG5vY29uZmlnCisJCWlmIFsgLWYgJHtXT1JLRElSfS9kZWZjb25maWcgXTsgdGhlbgorCQkJY29uZmlnbWVmbGFncz0iLS1hbGxub2NvbmZpZyIKKwkJZmkKKwlmaQorCisJY2QgJHtTfQorCVBBVEg9JHtQQVRIfToke1N9L3NjcmlwdHMvdXRpbAorCWNvbmZpZ21lICR7Y29uZmlnbWVmbGFnc30gLS1yZWNvbmZpZyAtLW91dHB1dCAke0J9ICR7TElOVVhfS0VSTkVMX1RZUEV9ICR7S01BQ0hJTkV9CisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWJiZmF0YWxfbG9nICJDb3VsZCBub3QgY29uZmlndXJlICR7S01BQ0hJTkV9LSR7TElOVVhfS0VSTkVMX1RZUEV9IgorCWZpCisJCisJZWNobyAiIyBHbG9iYWwgc2V0dGluZ3MgZnJvbSBsaW51eCByZWNpcGUiID4+ICR7Qn0vLmNvbmZpZworCWVjaG8gIkNPTkZJR19MT0NBTFZFUlNJT049IlwiJHtMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTn1cIiA+PiAke0J9Ly5jb25maWcKK30KKworYWRkdGFzayBrZXJuZWxfY29uZmlnbWUgYmVmb3JlIGRvX2NvbmZpZ3VyZSBhZnRlciBkb19wYXRjaAorCitweXRob24gZG9fa2VybmVsX2NvbmZpZ2NoZWNrKCkgeworICAgIGltcG9ydCByZSwgc3RyaW5nLCBzeXMKKworICAgICMgaWYgS01FVEEgaXNuJ3Qgc2V0IGdsb2JhbGx5IGJ5IGEgcmVjaXBlIHVzaW5nIHRoaXMgcm91dGluZSwgd2UgbmVlZCB0bworICAgICMgc2V0IHRoZSBkZWZhdWx0IHRvICdtZXRhJy4gT3RoZXJ3aXNlLCBrY29uZl9jaGVjayBpcyBub3QgcGFzc2VkIGEgdmFsaWQKKyAgICAjIG1ldGEtc2VyaWVzIGZvciBwcm9jZXNzaW5nCisgICAga21ldGEgPSBkLmdldFZhciggIktNRVRBIiwgVHJ1ZSApIG9yICJtZXRhIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrbWV0YSk6CisgICAgICAgIGttZXRhID0gIi4iICsga21ldGEKKworICAgIHBhdGhwcmVmaXggPSAiZXhwb3J0IFBBVEg9JXM6JXM7ICIgJSAoZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSwgIiR7U30vc2NyaXB0cy91dGlsLyIpCisgICAgY21kID0gZC5leHBhbmQoImNkICR7U307IGtjb25mX2NoZWNrIC1jb25maWcgJXMvbWV0YS1zZXJpZXMgJHtTfSAke0J9IiAlIGttZXRhKQorICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIlcyVzIiAlIChwYXRocHJlZml4LCBjbWQpKQorCisgICAgY29uZmlnX2NoZWNrX3Zpc2liaWxpdHkgPSBpbnQoZC5nZXRWYXIoICJLQ09ORl9BVURJVF9MRVZFTCIsIFRydWUgKSBvciAwKQorICAgIGJzcF9jaGVja192aXNpYmlsaXR5ID0gaW50KGQuZ2V0VmFyKCAiS0NPTkZfQlNQX0FVRElUX0xFVkVMIiwgVHJ1ZSApIG9yIDApCisKKyAgICAjIGlmIGNvbmZpZyBjaGVjayB2aXNpYmlsaXR5IGlzIG5vbi16ZXJvLCByZXBvcnQgZHJvcHBlZCBjb25maWd1cmF0aW9uIHZhbHVlcworICAgIG1pc21hdGNoX2ZpbGUgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAibWlzbWF0Y2guY2ZnIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1pc21hdGNoX2ZpbGUpOgorICAgICAgICBpZiBjb25maWdfY2hlY2tfdmlzaWJpbGl0eToKKyAgICAgICAgICAgIHdpdGggb3BlbiAobWlzbWF0Y2hfZmlsZSwgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbCBjb25maWddOiBzcGVjaWZpZWQgdmFsdWVzIGRpZCBub3QgbWFrZSBpdCBpbnRvIHRoZSBrZXJuZWwncyBmaW5hbCBjb25maWd1cmF0aW9uOlxuXG4lcyIgJSByZXN1bHRzKQorCisgICAgIyBpZiBjb25maWcgY2hlY2sgdmlzaWJpbGl0eSBpcyBsZXZlbCAyIG9yIGhpZ2hlciwgcmVwb3J0IG5vbi1oYXJkd2FyZSBvcHRpb25zCisgICAgbm9uaHdfZmlsZSA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJub25od19yZXBvcnQuY2ZnIgorICAgIGlmIG9zLnBhdGguZXhpc3RzKG5vbmh3X2ZpbGUpOgorICAgICAgICBpZiBjb25maWdfY2hlY2tfdmlzaWJpbGl0eSA+IDE6CisgICAgICAgICAgICB3aXRoIG9wZW4gKG5vbmh3X2ZpbGUsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBteWZpbGUucmVhZCgpCisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWwgY29uZmlnXTogQlNQIHNwZWNpZmllZCBub24taHcgY29uZmlndXJhdGlvbjpcblxuJXMiICUgcmVzdWx0cykKKworICAgIGJzcF9kZXNjID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgInRvcF90Z3QiCisgICAgaWYgb3MucGF0aC5leGlzdHMoYnNwX2Rlc2MpIGFuZCBic3BfY2hlY2tfdmlzaWJpbGl0eSA+IDE6CisgICAgICAgIHdpdGggb3BlbiAoYnNwX2Rlc2MsICJyIikgYXMgbXlmaWxlOgorICAgICAgICAgICAgYnNwX3RndCA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXiguKilzY3JhdGNoLm9iaiguKikkIiwgYnNwX3RndCkKKyAgICAgICAgICAgIGlmIG5vdCBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYmIud2FybiggIltrZXJuZWxdOiBBbiBhdXRvIGdlbmVyYXRlZCBCU1AgZGVzY3JpcHRpb24gd2FzIHVzZWQsIHRoaXMgbm9ybWFsbHkgaW5kaWNhdGVzIGEgbWlzY29uZmlndXJhdGlvbi5cbiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVjayB0aGF0IHlvdXIgbWFjaGluZSAoJXMpIGhhcyBhbiBhc3NvY2lhdGVkIGtlcm5lbCBkZXNjcmlwdGlvbi4iICUgIiR7TUFDSElORX0iICkKK30KKworIyBFbnN1cmUgdGhhdCB0aGUgYnJhbmNoZXMgKEJTUCBhbmQgbWV0YSkgYXJlIG9uIHRoZSBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5CisjIHRoZWlyIFNSQ1JFViB2YWx1ZXMuIElmIHRoZXkgYXJlIE5PVCBvbiB0aGUgcmlnaHQgY29tbWl0cywgdGhlIGJyYW5jaGVzCisjIGFyZSBjb3JyZWN0ZWQgdG8gdGhlIHByb3BlciBjb21taXQuCitkb192YWxpZGF0ZV9icmFuY2hlcygpIHsKKwlzZXQgK2UKKwljZCAke1N9CisKKwltYWNoaW5lX2JyYW5jaD0iJHtAIGdldF9tYWNoaW5lX2JyYW5jaChkLCAiJHtLQlJBTkNIfSIgKX0iCisJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWX21hY2hpbmV9IgorCisJIyBpZiBTUkNSRVYgaXMgQVVUT1JFViBpdCBzaG93cyB1cCBhcyBBVVRPSU5DIHRoZXJlJ3Mgbm90aGluZyB0bworCSMgY2hlY2sgYW5kIHdlIGNhbiBleGl0IGVhcmx5CisJaWYgWyAiJHttYWNoaW5lX3NyY3Jldn0iID0gIkFVVE9JTkMiIF07IHRoZW4KKwkJYmJub3RlICJTUkNSRVYgdmFsaWRhdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIEFVVE9SRVYiCisJZWxpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgPSAiIiBdOyB0aGVuCisJCWlmIFsgIiR7U1JDUkVWfSIgIT0gIkFVVE9JTkMiIF0gJiYgWyAiJHtTUkNSRVZ9IiAhPSAiSU5WQUxJRCIgXTsgdGhlbgorCQkgICAgICAgIyBTUkNSRVZfbWFjaGluZV88TUFDSElORT4gd2FzIG5vdCBzZXQuIFRoaXMgbWVhbnMgdGhhdCBhIGN1c3RvbSByZWNpcGUKKwkJICAgICAgICMgdGhhdCBkb2Vzbid0IHVzZSB0aGUgU1JDUkVWX0ZPUk1BVCAibWFjaGluZV9tZXRhIiBpcyBiZWluZyBidWlsdC4gSW4KKwkJICAgICAgICMgdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHJlc2V0IHRvIHRoZSBnaXZlIFNSQ1JFViBiZWZvcmUgaGVhZGluZyB0byBwYXRjaGluZworCQkgICAgICAgYmJub3RlICJjdXN0b20gcmVjaXBlIGlzIGJlaW5nIGJ1aWx0LCBmb3JjaW5nIFNSQ1JFViB0byAke1NSQ1JFVn0iCisJCSAgICAgICBmb3JjZV9zcmNyZXY9IiR7U1JDUkVWfSIKKwkJZmkKKwllbHNlCisJCWdpdCBjYXQtZmlsZSAtdCAke21hY2hpbmVfc3JjcmV2fSA+IC9kZXYvbnVsbAorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWJiZXJyb3IgIiR7bWFjaGluZV9zcmNyZXZ9IGlzIG5vdCBhIHZhbGlkIGNvbW1pdCBJRC4iCisJCQliYmZhdGFsX2xvZyAiVGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBtYXkgYmUgb3V0IG9mIHN5bmMiCisJCWZpCisJCWZvcmNlX3NyY3Jldj0ke21hY2hpbmVfc3JjcmV2fQorCWZpCisKKwlnaXQgY2hlY2tvdXQgLXEgLWYgJHttYWNoaW5lX2JyYW5jaH0KKwlpZiBbIC1uICIke2ZvcmNlX3NyY3Jldn0iIF07IHRoZW4KKwkJIyBzZWUgaWYgdGhlIGJyYW5jaCB3ZSBhcmUgYWJvdXQgdG8gcGF0Y2ggaGFzIGJlZW4gcHJvcGVybHkgcmVzZXQgdG8gdGhlIGRlZmluZWQKKwkJIyBTUkNSRVYgLi4gaWYgbm90LCB3ZSByZXNldCBpdC4KKwkJYnJhbmNoX2hlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAKKwkJaWYgWyAiJHtmb3JjZV9zcmNyZXZ9IiAhPSAiJHticmFuY2hfaGVhZH0iIF07IHRoZW4KKwkJCWN1cnJlbnRfYnJhbmNoPWBnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEYAorCQkJZ2l0IGJyYW5jaCAiJGN1cnJlbnRfYnJhbmNoLW9yaWciCisJCQlnaXQgcmVzZXQgLS1oYXJkICR7Zm9yY2Vfc3JjcmV2fQorCQlmaQorCWZpCit9CisKKyMgTWFueSBzY3JpcHRzIHdhbnQgdG8gbG9vayBpbiBhcmNoLyRhcmNoL2Jvb3QgZm9yIHRoZSBib290YWJsZQorIyBpbWFnZS4gVGhpcyBwb3NlcyBhIHByb2JsZW0gZm9yIHZtbGludXggYmFzZWQgYm9vdGluZy4gVGhpcyAKKyMgdGFzayBhcnJhbmdlcyB0byBoYXZlIHZtbGludXggYXBwZWFyIGluIHRoZSBub3JtYWxpemVkIGRpcmVjdG9yeQorIyBsb2NhdGlvbi4KK2RvX2tlcm5lbF9saW5rX3ZtbGludXgoKSB7CisJaWYgWyAhIC1kICIke0J9L2FyY2gvJHtBUkNIfS9ib290IiBdOyB0aGVuCisJCW1rZGlyICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKKwlmaQorCWNkICR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QKKwlsbiAtc2YgLi4vLi4vLi4vdm1saW51eAorfQorCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJLQlVJTERfT1VUUFVUIgorS0JVSUxEX09VVFBVVCA9ICIke0J9IgorCitweXRob24gKCkgeworICAgICMgSWYgZGlmZmNvbmZpZyBpcyBhdmFpbGFibGUsIGVuc3VyZSBpdCBydW5zIGFmdGVyIGtlcm5lbF9jb25maWdtZQorICAgIGlmICdkb19kaWZmY29uZmlnJyBpbiBkOgorICAgICAgICBiYi5idWlsZC5hZGR0YXNrKCdkb19kaWZmY29uZmlnJywgTm9uZSwgJ2RvX2tlcm5lbF9jb25maWdtZScsIGQpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiZGZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpAQCAtMCwwICsxLDQ5MCBAQAoraW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZSBrZXJuZWwtbW9kdWxlLXNwbGl0CisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKK0RFUEVORFMgKz0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyBrbW9kLW5hdGl2ZSBkZXBtb2R3cmFwcGVyLWNyb3NzIGJjLW5hdGl2ZSIKKworUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCitLQlVJTERfT1VUUFVUID0gIiR7Qn0iCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJLQlVJTERfT1VUUFVUIgorCisjIHdlIGluY2x1ZGUgZ2NjIGFib3ZlLCB3ZSBkb250IG5lZWQgdmlydHVhbC9saWJjCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitLRVJORUxfSU1BR0VUWVBFID89ICJ6SW1hZ2UiCitJTklUUkFNRlNfSU1BR0UgPz0gIiIKK0lOSVRSQU1GU19UQVNLID89ICIiCitJTklUUkFNRlNfSU1BR0VfQlVORExFID89ICIiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorCisgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCByZS5zdWIocidcLmd6JCcsICcnLCBrZXJuZWx0eXBlKSkKKworICAgIGltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpCisgICAgaWYgaW1hZ2U6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYnVuZGxlX2luaXRyYW1mcycsICdkZXBlbmRzJywgJyAke0lOSVRSQU1GU19JTUFHRX06ZG9fcm9vdGZzJykKKworICAgICMgTk9URTogc2V0dGluZyBJTklUUkFNRlNfVEFTSyBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICAgICMgICAgICAgVGhlIHByZWZlcnJlZCBtZXRob2QgaXMgdG8gc2V0IElOSVRSQU1GU19JTUFHRSwgYmVjYXVzZQorICAgICMgICAgICAgdGhpcyBJTklUUkFNRlNfVEFTSyBoYXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBwcm9ibGVtcworICAgICMgICAgICAgaWYgdGhlIGluaXRyYW1mcyByZXF1aXJlcyBrZXJuZWwgbW9kdWxlcworICAgIGltYWdlX3Rhc2sgPSBkLmdldFZhcignSU5JVFJBTUZTX1RBU0snLCBUcnVlKQorICAgIGlmIGltYWdlX3Rhc2s6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29uZmlndXJlJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX1RBU0t9JykKK30KKworIyBIZXJlIHdlIHB1bGwgaW4gYWxsIHZhcmlvdXMga2VybmVsIGltYWdlIHR5cGVzIHdoaWNoIHdlIHN1cHBvcnQuCisjCisjIEluIGNhc2UgeW91J3JlIHdvbmRlcmluZyB3aHkga2VybmVsLmJiY2xhc3MgaW5oZXJpdHMgdGhlIG90aGVyIGltYWdlCisjIHR5cGVzIGluc3RlYWQgb2YgdGhlIG90aGVyIHdheSBhcm91bmQsIHRoZSByZWFzb24gZm9yIHRoYXQgaXMgdG8KKyMgbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIHZhcmlvdXMgY3VycmVudGx5IGV4aXN0aW5nIG1ldGEtbGF5ZXJzLgorIyBCeSBwdWxsaW5nIGluIHRoZSB2YXJpb3VzIGtlcm5lbCBpbWFnZSB0eXBlcyBoZXJlLCB3ZSByZXRhaW4gdGhlCisjIG9yaWdpbmFsIGJlaGF2aW9yIG9mIGtlcm5lbC5iYmNsYXNzLCBzbyBubyBtZXRhLWxheWVycyBzaG91bGQgZ2V0CisjIGJyb2tlbi4KKyMKKyMgS0VSTkVMX0NMQVNTRVMgYnkgZGVmYXVsdCBwdWxscyBpbiBrZXJuZWwtdWltYWdlLmJiY2xhc3MsIHNpbmNlIHRoaXMKKyMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG9ubHkgdUltYWdlIHdhcyBzdXBwb3J0ZWQuIFRoaXMKKyMgdmFyaWFibGUgY2FuIGJlIGFwcGVuZGVkIGJ5IHVzZXJzIHdobyBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgbmV3IGtlcm5lbAorIyBpbWFnZSB0eXBlcy4KKworS0VSTkVMX0NMQVNTRVMgPz0gIiBrZXJuZWwtdWltYWdlICIKK2luaGVyaXQgJHtLRVJORUxfQ0xBU1NFU30KKworIyBPbGQgc3R5bGUga2VybmVscyBtYXkgc2V0ICR7U30gPSAke1dPUktESVJ9L2dpdCBmb3IgZXhhbXBsZQorIyBXZSBuZWVkIHRvIG1vdmUgdGhlc2Ugb3ZlciB0byBTVEFHSU5HX0tFUk5FTF9ESVIuIFdlIGNhbid0IGp1c3QKKyMgY3JlYXRlIHRoZSBzeW1saW5rIGluIGFkdmFuY2UgYXMgdGhlIGdpdCBmZXRjaGVyIGNhbid0IGNvcGUgd2l0aAorIyB0aGUgc3ltbGluay4KK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIgJHtTfSAke1NUQUdJTkdfS0VSTkVMX0RJUn0gJHtCfSAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKK2RvX2NsZWFuW2NsZWFuZGlyc10gKz0gIiAke1N9ICR7U1RBR0lOR19LRVJORUxfRElSfSAke0J9ICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorYmFzZV9kb191bnBhY2tfYXBwZW5kICgpIHsKKyAgICBzID0gZC5nZXRWYXIoIlMiLCBUcnVlKQorICAgIGlmIHNbLTFdID09ICcvJzoKKyAgICAgICAgIyBkcm9wIHRyYWlsaW5nIHNsYXNoLCBzbyB0aGF0IG9zLnN5bWxpbmsoa2VybnNyYywgcykgZG9lc24ndCB1c2UgcyBhcyBkaXJlY3RvcnkgbmFtZSBhbmQgZmFpbAorICAgICAgICBzPXNbOi0xXQorICAgIGtlcm5zcmMgPSBkLmdldFZhcigiU1RBR0lOR19LRVJORUxfRElSIiwgVHJ1ZSkKKyAgICBpZiBzICE9IGtlcm5zcmM6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihrZXJuc3JjKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoa2VybnNyYywgcmVjdXJzZT1UcnVlKQorICAgICAgICBpZiBkLmdldFZhcigiRVhURVJOQUxTUkMiLCBUcnVlKToKKyAgICAgICAgICAgICMgV2l0aCBFWFRFUk5BTFNSQyBTIHdpbGwgbm90IGJlIHdpcGVkIHNvIHdlIGNhbiBzeW1saW5rIHRvIGl0CisgICAgICAgICAgICBvcy5zeW1saW5rKHMsIGtlcm5zcmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgICAgICBzaHV0aWwubW92ZShzLCBrZXJuc3JjKQorICAgICAgICAgICAgb3Muc3ltbGluayhrZXJuc3JjLCBzKQorfQorCitpbmhlcml0IGtlcm5lbC1hcmNoIGRlcGxveQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtaW1hZ2UtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWZpcm13YXJlLS4qIgorCitleHBvcnQgT1MgPSAiJHtUQVJHRVRfT1N9IgorZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKKworS0VSTkVMX1BSSU9SSVRZID89ICIke0BpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVswXSkgKiAxMDAwMCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy0nKVswXS5zcGxpdCgnKycpWzBdLnNwbGl0KCcuJylbMV0pICogMTAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVstMV0pfSIKKworS0VSTkVMX1JFTEVBU0UgPz0gIiR7S0VSTkVMX1ZFUlNJT059IgorCisjIFdoZXJlIGJ1aWx0IGtlcm5lbCBsaWVzIGluIHRoZSBrZXJuZWwgdHJlZQorS0VSTkVMX09VVFBVVCA/PSAiYXJjaC8ke0FSQ0h9L2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSIKK0tFUk5FTF9JTUFHRURFU1QgPSAiYm9vdCIKKworIworIyBjb25maWd1cmF0aW9uCisjCitleHBvcnQgQ01ETElORV9DT05TT0xFID0gImNvbnNvbGU9JHtAZC5nZXRWYXIoIktFUk5FTF9DT05TT0xFIiwxKSBvciAidHR5UzAifSIKKworS0VSTkVMX1ZFUlNJT04gPSAiJHtAZ2V0X2tlcm5lbHZlcnNpb25faGVhZGVycygnJHtCfScpfSIKKworS0VSTkVMX0xPQ0FMVkVSU0lPTiA/PSAiIgorCisjIGtlcm5lbHMgYXJlIGdlbmVyYWxseSBtYWNoaW5lIHNwZWNpZmljCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisjIFUtQm9vdCBzdXBwb3J0CitVQk9PVF9FTlRSWVBPSU5UID89ICIyMDAwODAwMCIKK1VCT09UX0xPQURBRERSRVNTID89ICIke1VCT09UX0VOVFJZUE9JTlR9IgorCisjIFNvbWUgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUKK0tFUk5FTF9FWFRSQV9BUkdTID89ICIiCisKKyMgRm9yIHRoZSBrZXJuZWwsIHdlIGRvbid0IHdhbnQgdGhlICctZSBNQUtFRkxBR1M9JyBpbiBFWFRSQV9PRU1BS0UuCisjIFdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUga2VybmVsIE1ha2VmaWxlIHZhcmlhYmxlcyBmcm9tIHRoZSBlbnZpcm9ubWVudAorRVhUUkFfT0VNQUtFID0gIiIKKworS0VSTkVMX0FMVF9JTUFHRVRZUEUgPz89ICIiCisKKyMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQorIyB0aGV5IGFyZSBzdGFnZWQuCitLRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgorCitjb3B5X2luaXRyYW1mcygpIHsKKwllY2hvICJDb3B5aW5nIGluaXRyYW1mcyBpbnRvIC4vdXNyIC4uLiIKKwkjIEluIGNhc2UgdGhlIGRpcmVjdG9yeSBpcyBub3QgY3JlYXRlZCB5ZXQgZnJvbSB0aGUgZmlyc3QgcGFzcyBjb21waWxlOgorCW1rZGlyIC1wICR7Qn0vdXNyCisJIyBGaW5kIGFuZCB1c2UgdGhlIGZpcnN0IGluaXRyYW1mcyBpbWFnZSBhcmNoaXZlIHR5cGUgd2UgZmluZAorCXJtIC1mICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8KKwlmb3IgaW1nIGluIGNwaW8uZ3ogY3Bpby5sejQgY3Bpby5sem8gY3Bpby5sem1hIGNwaW8ueHo7IGRvCisJCWlmIFsgLWUgIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZyIgXTsgdGhlbgorCQkJY3AgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nICR7Qn0vdXNyLy4KKwkJCWNhc2UgJGltZyBpbgorCQkJKmd6KQorCQkJCWVjaG8gImd6aXAgZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlndW56aXAgLWYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSpsejQpCisJCQkJZWNobyAibHo0IGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJbHo0IC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6bykKKwkJCQllY2hvICJsem8gZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlsem9wIC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6bWEpCisJCQkJZWNobyAibHptYSBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWx6bWEgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqeHopCisJCQkJZWNobyAieHogZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQl4eiAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCWVzYWMKKwkJZmkKKwlkb25lCisJZWNobyAiRmluaXNoZWQgY29weSBvZiBpbml0cmFtZnMgaW50byAuL3VzciIKK30KKworSU5JVFJBTUZTX0JBU0VfTkFNRSA9ICIke0tFUk5FTF9JTUFHRVRZUEV9LWluaXRyYW1mcy0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorSU5JVFJBTUZTX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitkb19idW5kbGVfaW5pdHJhbWZzICgpIHsKKwlpZiBbICEgLXogIiR7SU5JVFJBTUZTX0lNQUdFfSIgLWEgeCIke0lOSVRSQU1GU19JTUFHRV9CVU5ETEV9IiA9IHgxIF07IHRoZW4KKwkJZWNobyAiQ3JlYXRpbmcgYSBrZXJuZWwgaW1hZ2Ugd2l0aCBhIGJ1bmRsZWQgaW5pdHJhbWZzLi4uIgorCQljb3B5X2luaXRyYW1mcworCQlpZiBbIC1lICR7S0VSTkVMX09VVFBVVH0gXSA7IHRoZW4KKwkJCW12IC1mICR7S0VSTkVMX09VVFBVVH0gJHtLRVJORUxfT1VUUFVUfS5iYWsKKwkJZmkKKwkJdXNlX2FsdGVybmF0ZV9pbml0cmQ9Q09ORklHX0lOSVRSQU1GU19TT1VSQ0U9JHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uY3BpbworCQlrZXJuZWxfZG9fY29tcGlsZQorCQltdiAtZiAke0tFUk5FTF9PVVRQVVR9ICR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzCisJCW12IC1mICR7S0VSTkVMX09VVFBVVH0uYmFrICR7S0VSTkVMX09VVFBVVH0KKwkJIyBVcGRhdGUgaW5zdGFsbCBhcmVhCisJCWVjaG8gIlRoZXJlIGlzIGtlcm5lbCBpbWFnZSBidW5kbGVkIHdpdGggaW5pdHJhbWZzOiAke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIgorCQlpbnN0YWxsIC1tIDA2NDQgJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyAke0R9L2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS1pbml0cmFtZnMtJHtNQUNISU5FfS5iaW4KKwkJZWNobyAiJHtCfS8ke0tFUk5FTF9PVVRQVVR9LmluaXRyYW1mcyIKKwlmaQorfQorCitweXRob24gZG9fZGV2c2hlbGxfcHJlcGVuZCAoKSB7CisgICAgb3MuZW52aXJvblsiTERGTEFHUyJdID0gJycKK30KKworYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQorCitrZXJuZWxfZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJIyBUaGUgJHVzZV9hbHRlcm5hdGVfaW5pdHJkIGlzIG9ubHkgc2V0IGZyb20KKwkjIGRvX2J1bmRsZV9pbml0cmFtZnMoKSBUaGlzIHZhcmlhYmxlIGlzIHNwZWNpZmljYWxseSBmb3IgdGhlCisJIyBjYXNlIHdoZXJlIHdlIGFyZSBtYWtpbmcgYSBzZWNvbmQgcGFzcyBhdCB0aGUga2VybmVsCisJIyBjb21waWxhdGlvbiBhbmQgd2Ugd2FudCB0byBmb3JjZSB0aGUga2VybmVsIGJ1aWxkIHRvIHVzZSBhCisJIyBkaWZmZXJlbnQgaW5pdHJhbWZzIGltYWdlLiAgVGhlIHdheSB0byBkbyB0aGF0IGluIHRoZSBrZXJuZWwKKwkjIGlzIHRvIHNwZWNpZnk6CisJIyBtYWtlIC4uLmFyZ3MuLi4gQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9c29tZV9vdGhlcl9pbml0cmFtZnMuY3BpbworCWlmIFsgIiR1c2VfYWx0ZXJuYXRlX2luaXRyZCIgPSAiIiBdICYmIFsgIiR7SU5JVFJBTUZTX1RBU0t9IiAhPSAiIiBdIDsgdGhlbgorCQkjIFRoZSBvbGQgc3R5bGUgd2F5IG9mIGNvcHlpbmcgYW4gcHJlYnVpbHQgaW1hZ2UgYW5kIGJ1aWxkaW5nIGl0CisJCSMgaXMgdHVybmVkIG9uIHZpYSBJTlRJUkFNRlNfVEFTSyAhPSAiIgorCQljb3B5X2luaXRyYW1mcworCQl1c2VfYWx0ZXJuYXRlX2luaXRyZD1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0ke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS5jcGlvCisJZmkKKwlvZV9ydW5tYWtlICR7S0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRX0gJHtLRVJORUxfQUxUX0lNQUdFVFlQRX0gQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgJHtLRVJORUxfRVhUUkFfQVJHU30gJHVzZV9hbHRlcm5hdGVfaW5pdHJkCisJaWYgdGVzdCAiJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfS5neiIgPSAiJHtLRVJORUxfSU1BR0VUWVBFfSI7IHRoZW4KKwkJZ3ppcCAtOWMgPCAiJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfSIgPiAiJHtLRVJORUxfT1VUUFVUfSIKKwlmaQorfQorCitkb19jb21waWxlX2tlcm5lbG1vZHVsZXMoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnICR7Qn0vLmNvbmZpZyk7IHRoZW4KKwkJb2VfcnVubWFrZSAtQyAke0J9ICR7UEFSQUxMRUxfTUFLRX0gbW9kdWxlcyBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfQorCWVsc2UKKwkJYmJub3RlICJubyBtb2R1bGVzIHRvIGNvbXBpbGUiCisJZmkKK30KK2FkZHRhc2sgY29tcGlsZV9rZXJuZWxtb2R1bGVzIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX3N0cmlwCisKK2tlcm5lbF9kb19pbnN0YWxsKCkgeworCSMKKwkjIEZpcnN0IGluc3RhbGwgdGhlIG1vZHVsZXMKKwkjCisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgTUFDSElORQorCWlmIChncmVwIC1xIC1pIC1lICdeQ09ORklHX01PRFVMRVM9eSQnIC5jb25maWcpOyB0aGVuCisJCW9lX3J1bm1ha2UgREVQTU9EPWVjaG8gSU5TVEFMTF9NT0RfUEFUSD0iJHtEfSIgbW9kdWxlc19pbnN0YWxsCisJCXJtICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2J1aWxkIgorCQlybSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9zb3VyY2UiCisJCSMgSWYgdGhlIGtlcm5lbC8gZGlyZWN0b3J5IGlzIGVtcHR5IHJlbW92ZSBpdCB0byBwcmV2ZW50IFFBIGlzc3VlcworCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfS9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9rZXJuZWwiCisJZWxzZQorCQliYm5vdGUgIm5vIG1vZHVsZXMgdG8gaW5zdGFsbCIKKwlmaQorCisJIworCSMgSW5zdGFsbCB2YXJpb3VzIGtlcm5lbCBvdXRwdXQgKHpJbWFnZSwgbWFwIGZpbGUsIGNvbmZpZywgbW9kdWxlIHN1cHBvcnQgZmlsZXMpCisJIworCWluc3RhbGwgLWQgJHtEfS8ke0tFUk5FTF9JTUFHRURFU1R9CisJaW5zdGFsbCAtZCAke0R9L2Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCBTeXN0ZW0ubWFwICR7RH0vYm9vdC9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IC5jb25maWcgJHtEfS9ib290L2NvbmZpZy0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLW0gMDY0NCB2bWxpbnV4ICR7RH0vYm9vdC92bWxpbnV4LSR7S0VSTkVMX1ZFUlNJT059CisJWyAtZSBNb2R1bGUuc3ltdmVycyBdICYmIGluc3RhbGwgLW0gMDY0NCBNb2R1bGUuc3ltdmVycyAke0R9L2Jvb3QvTW9kdWxlLnN5bXZlcnMtJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCit9Citkb19pbnN0YWxsW3ByZWZ1bmNzXSArPSAicGFja2FnZV9nZXRfYXV0b19wciIKKworYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19jb21waWxlX2tlcm5lbG1vZHVsZXMKK2FkZHRhc2sgc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUKKworZG9fc2hhcmVkX3dvcmtkaXJfc2V0c2NlbmUgKCkgeworCWV4aXQgMQorfQorCitlbWl0X2RlcG1vZF9wa2dkYXRhKCkgeworCSMgU3Rhc2ggZGF0YSBmb3IgZGVwbW9kCisJaW5zdGFsbCAtZCAke1BLR0RFU1RXT1JLfS9rZXJuZWwtZGVwbW9kLworCWVjaG8gIiR7S0VSTkVMX1ZFUlNJT059IiA+ICR7UEtHREVTVFdPUkt9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24KKwljcCAke0J9L1N5c3RlbS5tYXAgJHtQS0dERVNUV09SS30va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLSR7S0VSTkVMX1ZFUlNJT059Cit9CisKK1BBQ0tBR0VGVU5DUyArPSAiZW1pdF9kZXBtb2RfcGtnZGF0YSIKKworZG9fc2hhcmVkX3dvcmtkaXIgKCkgeworCWNkICR7Qn0KKworCWtlcm5lbGRpcj0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfQorCWluc3RhbGwgLWQgJGtlcm5lbGRpcgorCisJIworCSMgU3RvcmUgdGhlIGtlcm5lbCB2ZXJzaW9uIGluIHN5c3Jvb3RzIGZvciBtb2R1bGUtYmFzZS5iYmNsYXNzCisJIworCisJZWNobyAiJHtLRVJORUxfVkVSU0lPTn0iID4gJGtlcm5lbGRpci9rZXJuZWwtYWJpdmVyc2lvbgorCisJIyBDb3B5IGZpbGVzIHJlcXVpcmVkIGZvciBtb2R1bGUgYnVpbGRzCisJY3AgU3lzdGVtLm1hcCAka2VybmVsZGlyL1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KKwljcCBNb2R1bGUuc3ltdmVycyAka2VybmVsZGlyLworCWNwIC5jb25maWcgJGtlcm5lbGRpci8KKwlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvY29uZmlnCisJY3AgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgJGtlcm5lbGRpci9pbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZQorCisJIyBXZSBjYW4gYWxzbyBjb3B5IG92ZXIgYWxsIHRoZSBnZW5lcmF0ZWQgZmlsZXMgYW5kIGF2b2lkIHNwZWNpYWwgY2FzZXMKKwkjIGxpa2UgdmVyc2lvbi5oLCBidXQgd2UndmUgb3B0ZWQgdG8ga2VlcCB0aGlzIHNtYWxsIHVudGlsIGZpbGUgY3JlZXAgc3RhcnRzCisJIyB0byBoYXBwZW4KKwlpZiBbIC1lIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2xpbnV4CisJCWNwIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oICRrZXJuZWxkaXIvaW5jbHVkZS9saW51eC92ZXJzaW9uLmgKKwlmaQorCisJIyBBcyBvZiBMaW51eCBrZXJuZWwgdmVyc2lvbiAzLjAuMSwgdGhlIGNsZWFuIHRhcmdldCByZW1vdmVzCisJIyBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vIHdoaWNoIGlzIHByZXNlbnQgaW4KKwkjIEtCVUlMRF9MREZMQUdTX01PRFVMRSwgbWFraW5nIGl0IHJlcXVpcmVkIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMuCisJaWYgWyAke0FSQ0h9ID0gInBvd2VycGMiIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliLworCQljcCBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubworCWZpCisKKwlpZiBbIC1kIGluY2x1ZGUvZ2VuZXJhdGVkIF07IHRoZW4KKwkJbWtkaXIgLXAgJGtlcm5lbGRpci9pbmNsdWRlL2dlbmVyYXRlZC8KKwkJY3AgLWZSIGluY2x1ZGUvZ2VuZXJhdGVkLyogJGtlcm5lbGRpci9pbmNsdWRlL2dlbmVyYXRlZC8KKwlmaQorCisJaWYgWyAtZCBhcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2FyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8KKwkJY3AgLWZSIGFyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZC8qICRrZXJuZWxkaXIvYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLworCWZpCit9CisKKyMgV2UgZG9uJ3QgbmVlZCB0byBzdGFnZSBhbnl0aGluZywgbm90IHRoZSBtb2R1bGVzL2Zpcm13YXJlIHNpbmNlIHRob3NlIHdvdWxkIGNsYXNoIHdpdGggbGludXgtZmlybXdhcmUKK3N5c3Jvb3Rfc3RhZ2VfYWxsICgpIHsKKwk6Cit9CisKK0tFUk5FTF9DT05GSUdfQ09NTUFORCA/PSAib2VfcnVubWFrZV9jYWxsIC1DICR7U30gTz0ke0J9IG9sZG5vY29uZmlnIHx8IHllcyAnJyB8IG9lX3J1bm1ha2UgLUMgJHtTfSBPPSR7Qn0gb2xkY29uZmlnIgorCitrZXJuZWxfZG9fY29uZmlndXJlKCkgeworCSMgZml4ZXMgZXh0cmEgKyBpbiAvbGliL21vZHVsZXMvMi42LjM3KworCSMgJCBzY3JpcHRzL3NldGxvY2FsdmVyc2lvbiAuID0+ICsKKwkjICQgbWFrZSBrZXJuZWx2ZXJzaW9uID0+IDIuNi4zNworCSMgJCBtYWtlIGtlcm5lbHJlbGVhc2UgPT4gMi42LjM3KworCXRvdWNoICR7Qn0vLnNjbXZlcnNpb24gJHtTfS8uc2NtdmVyc2lvbgorCisJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF0gJiYgWyAtZiAiJHtTfS8uY29uZmlnIiBdICYmIFsgISAtZiAiJHtCfS8uY29uZmlnIiBdOyB0aGVuCisJCW12ICIke1N9Ly5jb25maWciICIke0J9Ly5jb25maWciCisJZmkKKworCSMgQ29weSBkZWZjb25maWcgdG8gLmNvbmZpZyBpZiAuY29uZmlnIGRvZXMgbm90IGV4aXN0LiBUaGlzIGFsbG93cworCSMgcmVjaXBlcyB0byBtYW5hZ2UgdGhlIC5jb25maWcgdGhlbXNlbHZlcyBpbiBkb19jb25maWd1cmVfcHJlcGVuZCgpLgorCWlmIFsgLWYgIiR7V09SS0RJUn0vZGVmY29uZmlnIiBdICYmIFsgISAtZiAiJHtCfS8uY29uZmlnIiBdOyB0aGVuCisJCWNwICIke1dPUktESVJ9L2RlZmNvbmZpZyIgIiR7Qn0vLmNvbmZpZyIKKwlmaQorCWV2YWwgJHtLRVJORUxfQ09ORklHX0NPTU1BTkR9Cit9CisKK2RvX3NhdmVkZWZjb25maWcoKSB7CisJb2VfcnVubWFrZSAtQyAke0J9IHNhdmVkZWZjb25maWcKK30KK2RvX3NhdmVkZWZjb25maWdbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgc2F2ZWRlZmNvbmZpZyBhZnRlciBkb19jb25maWd1cmUKKworaW5oZXJpdCBjbWwxCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsIGRvX2NvbmZpZ3VyZQorCisjIGtlcm5lbC1iYXNlIGJlY29tZXMga2VybmVsLSR7S0VSTkVMX1ZFUlNJT059CisjIGtlcm5lbC1pbWFnZSBiZWNvbWVzIGtlcm5lbC1pbWFnZS0ke0tFUk5FTF9WRVJJU09OfQorUEFDS0FHRVMgPSAia2VybmVsIGtlcm5lbC1iYXNlIGtlcm5lbC12bWxpbnV4IGtlcm5lbC1pbWFnZSBrZXJuZWwtZGV2IGtlcm5lbC1tb2R1bGVzIgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfa2VybmVsLWJhc2UgPSAiL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L21vZHVsZXMub3JkZXIgL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L21vZHVsZXMuYnVpbHRpbiIKK0ZJTEVTX2tlcm5lbC1pbWFnZSA9ICIvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9KiIKK0ZJTEVTX2tlcm5lbC1kZXYgPSAiL2Jvb3QvU3lzdGVtLm1hcCogL2Jvb3QvTW9kdWxlLnN5bXZlcnMqIC9ib290L2NvbmZpZyogJHtLRVJORUxfU1JDX1BBVEh9IC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfS9idWlsZCIKK0ZJTEVTX2tlcm5lbC12bWxpbnV4ID0gIi9ib290L3ZtbGludXgqIgorRklMRVNfa2VybmVsLW1vZHVsZXMgPSAiIgorUkRFUEVORFNfa2VybmVsID0gImtlcm5lbC1iYXNlIgorIyBBbGxvdyBtYWNoaW5lcyB0byBvdmVycmlkZSB0aGlzIGRlcGVuZGVuY3kgaWYga2VybmVsIGltYWdlIGZpbGVzIGFyZSAKKyMgbm90IHdhbnRlZCBpbiBpbWFnZXMgYXMgc3RhbmRhcmQKK1JERVBFTkRTX2tlcm5lbC1iYXNlID89ICJrZXJuZWwtaW1hZ2UiCitQS0dfa2VybmVsLWltYWdlID0gImtlcm5lbC1pbWFnZS0ke0BsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJHtLRVJORUxfVkVSU0lPTn0nKX0iCitSREVQRU5EU19rZXJuZWwtaW1hZ2UgKz0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ0tFUk5FTF9JTUFHRVRZUEUnLCAndm1saW51eCcsICdrZXJuZWwtdm1saW51eCcsICcnLCBkKX0iCitQS0dfa2VybmVsLWJhc2UgPSAia2VybmVsLSR7QGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCcke0tFUk5FTF9WRVJTSU9OfScpfSIKK1JQUk9WSURFU19rZXJuZWwtYmFzZSArPSAia2VybmVsLSR7S0VSTkVMX1ZFUlNJT059IgorQUxMT1dfRU1QVFlfa2VybmVsID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtYmFzZSA9ICIxIgorQUxMT1dfRU1QVFlfa2VybmVsLWltYWdlID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgorREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgorCitwa2dfcG9zdGluc3Rfa2VybmVsLWJhc2UgKCkgeworCWlmIFsgISAtZSAiJEQvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0iIF07IHRoZW4KKwkJbWtkaXIgLXAgJEQvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0KKwlmaQorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCWRlcG1vZHdyYXBwZXIgLWEgLWIgJEQgJHtLRVJORUxfVkVSU0lPTn0KKwllbHNlCisJCWRlcG1vZCAtYSAke0tFUk5FTF9WRVJTSU9OfQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtaW1hZ2UgKCkgeworCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsIC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7S0VSTkVMX0lNQUdFVFlQRX0gJHtLRVJORUxfSU1BR0VUWVBFfSAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059ICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCit9CisKK3BrZ19wb3N0cm1fa2VybmVsLWltYWdlICgpIHsKKwl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICR7S0VSTkVMX0lNQUdFVFlQRX0gJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSB8fCB0cnVlCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3BsaXRfa2VybmVsX3BhY2thZ2VzICIKKworcHl0aG9uIHNwbGl0X2tlcm5lbF9wYWNrYWdlcyAoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcm9vdD0nL2xpYi9maXJtd2FyZScsIGZpbGVfcmVnZXg9J14oLiopXC4oYmlufGZ3fGNpc3xkc3ApJCcsIG91dHB1dF9wYXR0ZXJuPSdrZXJuZWwtZmlybXdhcmUtJXMnLCBkZXNjcmlwdGlvbj0nRmlybXdhcmUgZm9yICVzJywgcmVjdXJzaXZlPVRydWUsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX3N0cmlwKCkgeworCWlmIFsgLW4gIiR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfSIgXTsgdGhlbgorCQlpZiBbICIke0tFUk5FTF9JTUFHRVRZUEV9IiAhPSAidm1saW51eCIgXTsgdGhlbgorCQkJYmJ3YXJuICJpbWFnZSB0eXBlIHdpbGwgbm90IGJlIHN0cmlwcGVkIChub3Qgc3VwcG9ydGVkKTogJHtLRVJORUxfSU1BR0VUWVBFfSIKKwkJCXJldHVybgorCQlmaQorCisJCWNkICR7Qn0KKwkJaGVhZGVycz1gIiRDUk9TU19DT01QSUxFInJlYWRlbGYgLVMgJHtLRVJORUxfT1VUUFVUfSB8IFwKKwkJCSAgZ3JlcCAiXiBcezEsXH1cW1swLTkgXVx7MSxcfVxdIFteIF0iIHwgXAorCQkJICBzZWQgInMvXiBcezEsXH1cW1swLTkgXVx7MSxcfVxdIC8vIiB8IFwKKwkJCSAgZ2F3ayAne3ByaW50ICQxfSdgCisKKwkJZm9yIHN0ciBpbiAke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU307IGRvIHsKKwkJCWlmIFsgIiRoZWFkZXJzIiAhPSAqIiRzdHIiKiBdOyB0aGVuCisJCQkJYmJ3YXJuICJTZWN0aW9uIG5vdCBmb3VuZDogJHN0ciI7CisJCQlmaQorCisJCQkiJENST1NTX0NPTVBJTEUic3RyaXAgLXMgLVIgJHN0ciAke0tFUk5FTF9PVVRQVVR9CisJCX07IGRvbmUKKworCQliYm5vdGUgIktFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OUyBpcyBzZXQsIHN0cmlwcGluZyBzZWN0aW9uczoiIFwKKwkJCSIke0tFUk5FTF9JTUFHRV9TVFJJUF9FWFRSQV9TRUNUSU9OU30iCisJZmk7Cit9Citkb19zdHJpcFtkaXJzXSA9ICIke0J9IgorCithZGR0YXNrIGRvX3N0cmlwIGJlZm9yZSBkb19zaXplY2hlY2sgYWZ0ZXIgZG9fa2VybmVsX2xpbmtfdm1saW51eAorCisjIFN1cHBvcnQgY2hlY2tpbmcgdGhlIGtlcm5lbCBzaXplIHNpbmNlIHNvbWUga2VybmVscyBuZWVkIHRvIHJlc2lkZSBpbiBwYXJ0aXRpb25zCisjIHdpdGggYSBmaXhlZCBsZW5ndGggb3IgdGhlcmUgaXMgYSBsaW1pdCBpbiB0cmFuc2ZlcnJpbmcgdGhlIGtlcm5lbCB0byBtZW1vcnkKK2RvX3NpemVjaGVjaygpIHsKKwlpZiBbICEgLXogIiR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IiBdOyB0aGVuCisJCWludmFsaWQ9YGVjaG8gJHtLRVJORUxfSU1BR0VfTUFYU0laRX0gfCBzZWQgJ3MvWzAtOV0vL2cnYAorCQlpZiBbIC1uICIkaW52YWxpZCIgXTsgdGhlbgorCQkJZGllICJJbnZhbGlkIEtFUk5FTF9JTUFHRV9NQVhTSVpFOiAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSwgc2hvdWxkIGJlIGFuIGludGVnZXJ4IChUaGUgdW5pdCBpcyBLYnl0ZXMpIgorCQlmaQorCQlzaXplPWBkdSAta3MgJHtCfS8ke0tFUk5FTF9PVVRQVVR9IHwgYXdrICd7IHByaW50ICQxfSdgCisJCWlmIFsgJHNpemUgLWdlICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9IF07IHRoZW4KKwkJCWRpZSAiVGhpcyBrZXJuZWwgKHNpemU9JHNpemUoSykgPiAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfShLKSkgaXMgdG9vIGJpZyBmb3IgeW91ciBkZXZpY2UuIFBsZWFzZSByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBtYWtpbmcgbW9yZSBvZiBpdCBtb2R1bGFyLiIKKwkJZmkKKwlmaQorfQorZG9fc2l6ZWNoZWNrW2RpcnNdID0gIiR7Qn0iCisKK2FkZHRhc2sgc2l6ZWNoZWNrIGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX3N0cmlwCisKK0tFUk5FTF9JTUFHRV9CQVNFX05BTUUgPz0gIiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtQS0dFfS0ke1BLR1Z9LSR7UEtHUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKyMgRG9uJ3QgaW5jbHVkZSB0aGUgREFURVRJTUUgdmFyaWFibGUgaW4gdGhlIHNzdGF0ZSBwYWNrYWdlIHNpZ25hdHVyZXMKK0tFUk5FTF9JTUFHRV9CQVNFX05BTUVbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorS0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke01BQ0hJTkV9IgorTU9EVUxFX0lNQUdFX0JBU0VfTkFNRSA/PSAibW9kdWxlcy0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorTU9EVUxFX0lNQUdFX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitNT0RVTEVfVEFSQkFMTF9CQVNFX05BTUUgPz0gIiR7TU9EVUxFX0lNQUdFX0JBU0VfTkFNRX0udGd6IgorIyBEb24ndCBpbmNsdWRlIHRoZSBEQVRFVElNRSB2YXJpYWJsZSBpbiB0aGUgc3N0YXRlIHBhY2thZ2Ugc2lnbmF0dXJlcworTU9EVUxFX1RBUkJBTExfU1lNTElOS19OQU1FID89ICJtb2R1bGVzLSR7TUFDSElORX0udGd6IgorTU9EVUxFX1RBUkJBTExfREVQTE9ZID89ICIxIgorCitrZXJuZWxfZG9fZGVwbG95KCkgeworCWluc3RhbGwgLW0gMDY0NCAke0tFUk5FTF9PVVRQVVR9ICR7REVQTE9ZRElSfS8ke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbgorCWlmIFsgJHtNT0RVTEVfVEFSQkFMTF9ERVBMT1l9ID0gIjEiIF0gJiYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgLmNvbmZpZyk7IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS9saWIKKwkJdGFyIC1jdnpmICR7REVQTE9ZRElSfS8ke01PRFVMRV9UQVJCQUxMX0JBU0VfTkFNRX0gLUMgJHtEfSBsaWIKKwkJbG4gLXNmICR7TU9EVUxFX1RBUkJBTExfQkFTRV9OQU1FfSAke0RFUExPWURJUn0vJHtNT0RVTEVfVEFSQkFMTF9TWU1MSU5LX05BTUV9CisJZmkKKworCWxuIC1zZiAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbiAke0RFUExPWURJUn0vJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfS5iaW4KKwlsbiAtc2YgJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfS5iaW4gJHtERVBMT1lESVJ9LyR7S0VSTkVMX0lNQUdFVFlQRX0KKworCWNwICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgJHtERVBMT1lESVJ9L1JFQURNRV8tX0RPX05PVF9ERUxFVEVfRklMRVNfSU5fVEhJU19ESVJFQ1RPUlkudHh0CisKKwljZCAke0J9CisJIyBVcGRhdGUgZGVwbG95IGRpcmVjdG9yeQorCWlmIFsgLWUgIiR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIiBdOyB0aGVuCisJCWVjaG8gIkNvcHlpbmcgZGVwbG95IGtlcm5lbC1pbml0cmFtZnMgaW1hZ2UgYW5kIHNldHRpbmcgdXAgbGlua3MuLi4iCisJCWluaXRyYW1mc19iYXNlX25hbWU9JHtJTklUUkFNRlNfQkFTRV9OQU1FfQorCQlpbml0cmFtZnNfc3ltbGlua19uYW1lPSR7S0VSTkVMX0lNQUdFVFlQRX0taW5pdHJhbWZzLSR7TUFDSElORX0KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzICR7REVQTE9ZRElSfS8ke2luaXRyYW1mc19iYXNlX25hbWV9LmJpbgorCQljZCAke0RFUExPWURJUn0KKwkJbG4gLXNmICR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluICR7aW5pdHJhbWZzX3N5bWxpbmtfbmFtZX0uYmluCisJZmkKK30KK2RvX2RlcGxveVtkaXJzXSA9ICIke0RFUExPWURJUn0gJHtCfSIKK2RvX2RlcGxveVtwcmVmdW5jc10gKz0gInBhY2thZ2VfZ2V0X2F1dG9fcHIiCisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19kZXBsb3kKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbHNyYy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2tlcm5lbHNyYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZmQ0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MKQEAgLTAsMCArMSwxMCBAQAorUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BhdGNoIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9maWxlKCIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIpfSIKKworaW5oZXJpdCBsaW51eC1rZXJuZWwtYmFzZQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NDlmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGliX3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKKyMKKyMgJHtQTn0tYmluIGlzIGRlZmluZWQgaW4gYml0YmFrZS5jb25mCisjCisjIFdlIG5lZWQgdG8gYWxsb3cgdGhlIG90aGVyIHBhY2thZ2VzIHRvIGJlIGdyZWVkeSB3aXRoIHdoYXQgdGhleQorIyB3YW50IG91dCBvZiAvdXNyL2JpbiBhbmQgL3Vzci9zYmluIGJlZm9yZSAke1BOfS1iaW4gZ2V0cyBncmVlZHkuCisjIAorUEFDS0FHRV9CRUZPUkVfUE4gPSAiJHtQTn0tYmluIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM4MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2xpYmMtY29tbW9uLmJiY2xhc3MKQEAgLTAsMCArMSw0MyBAQAorZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGxfcm9vdD0ke0R9IGluc3RhbGwKKwlmb3IgciBpbiAke3JwY3N2Y307IGRvCisJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zdW5ycGMvcnBjc3ZjLyRoICR7RH0vJHtpbmNsdWRlZGlyfS9ycGNzdmMvCisJZG9uZQorCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9LyAKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ldGMvbGQuc28uY29uZiAke0R9LyR7c3lzY29uZmRpcn0vCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbGVkaXJ9CisJbWFrZSAtZiAke1dPUktESVJ9L2dlbmVyYXRlLXN1cHBvcnRlZC5tayBJTj0iJHtTfS9sb2NhbGVkYXRhL1NVUFBPUlRFRCIgT1VUPSIke1dPUktESVJ9L1NVUFBPUlRFRCIKKwkjIGdldCByaWQgb2Ygc29tZSBicm9rZW4gZmlsZXMuLi4KKwlmb3IgaSBpbiAke0dMSUJDX0JST0tFTl9MT0NBTEVTfTsgZG8KKwkJZ3JlcCAtdiAkaSAke1dPUktESVJ9L1NVUFBPUlRFRCA+ICR7V09SS0RJUn0vU1VQUE9SVEVELnRtcAorCQltdiAke1dPUktESVJ9L1NVUFBPUlRFRC50bXAgJHtXT1JLRElSfS9TVVBQT1JURUQKKwlkb25lCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vcnBjCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisJcm0gLXJmICR7RH0ke2xpYmV4ZWNkaXJ9L2dldGNvbmYKK30KKworZGVmIGdldF9saWJjX2ZwdV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnLCAncHBjLWVmZCcgXToKKyAgICAgICAgcmV0dXJuICItLXdpdGhvdXQtZnAiCisgICAgcmV0dXJuICIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgICAgICBwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgICAgICAjIFNldCB0aGUgYmFzZSBwYWNrYWdlLi4uCisgICAgICAgIGQuc2V0VmFyKCdQS0dfJyArIHByZWZpeCArIGJwbiwgcHJlZml4ICsgJ2xpYmM2JykKKyAgICAgICAgbGliY3ByZWZpeCA9IHByZWZpeCArIGJwbiArICctJworICAgICAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICAgICAgIyBBbmQgYWxsIHRoZSBzdWJwYWNrYWdlcy4KKyAgICAgICAgICAgIGlmIHAuc3RhcnRzd2l0aChsaWJjcHJlZml4KToKKyAgICAgICAgICAgICAgICByZW5hbWVkID0gcC5yZXBsYWNlKGJwbiwgJ2xpYmM2JywgMSkKKyAgICAgICAgICAgICAgICBkLnNldFZhcignUEtHXycgKyBwLCByZW5hbWVkKQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkIC1kYmcgcGFja2FnZQorICAgICAgICBkLmFwcGVuZFZhcignUlBST1ZJREVTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSQ09ORkxJQ1RTXycgKyBsaWJjcHJlZml4ICsgJ2RiZycsICcgJyArIHByZWZpeCArICdsaWJjLWRiZycpCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUkVQTEFDRVNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saWJjLXBhY2thZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9saWJjLXBhY2thZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2JlNjkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzg4IEBACisjCisjIFRoaXMgY2xhc3Mga25vd3MgaG93IHRvIHBhY2thZ2UgdXAgW2VdZ2xpYmMuIEl0cyBzaGFyZWQgc2luY2UgcHJlYnVpbGQgYmluYXJ5IHRvb2xjaGFpbnMKKyMgbWF5IG5lZWQgcGFja2FnaW5nIGFuZCBpdHMgcG9pbnRsZXNzIHRvIGR1cGxpY2F0ZSB0aGlzIGNvZGUuCisjCisjIENhbGxlciBzaG91bGQgc2V0IEdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIHRvIG9uZSBvZjoKKyMgICJjb21waWxlIiAtIFVzZSBRRU1VIHRvIGdlbmVyYXRlIHRoZSBiaW5hcnkgbG9jYWxlIGZpbGVzCisjICAicHJlY29tcGlsZWQiIC0gVGhlIGJpbmFyeSBsb2NhbGUgZmlsZXMgYXJlIHByZWdlbmVyYXRlZCBhbmQgYWxyZWFkeSBwcmVzZW50CisjICAib25kZXZpY2UiIC0gVGhlIGRldmljZSB3aWxsIGJ1aWxkIHRoZSBsb2NhbGUgZmlsZXMgdXBvbiBmaXJzdCBib290IHRocm91Z2ggdGhlIHBvc3RpbnN0CisKK0dMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFID89ICJvbmRldmljZSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBlbmFibGVkID0gZC5nZXRWYXIoIkVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04iLCBUcnVlKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIHBuLmVuZHN3aXRoKCItaW5pdGlhbCIpOgorICAgICAgICBlbmFibGVkID0gRmFsc2UKKworICAgIGlmIGVuYWJsZWQgYW5kIGludChlbmFibGVkKToKKyAgICAgICAgaW1wb3J0IHJlCisKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgICAgICBiaW5hcnlfYXJjaGVzID0gZC5nZXRWYXIoIkJJTkFSWV9MT0NBTEVfQVJDSEVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9IGQuZ2V0VmFyKCJMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiIsIFRydWUpIG9yICIiCisKKyAgICAgICAgZm9yIHJlZ2V4cCBpbiBiaW5hcnlfYXJjaGVzLnNwbGl0KCIgIik6CisgICAgICAgICAgICByID0gcmUuY29tcGlsZShyZWdleHApCisKKyAgICAgICAgICAgIGlmIHIubWF0Y2godGFyZ2V0X2FyY2gpOgorICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcigiREVQRU5EUyIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9PSAiMSIgOgorICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gIiVzIGNyb3NzLWxvY2FsZWRlZi1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSAiJXMgcWVtdS1uYXRpdmUiICUgZGVwZW5kcworICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJERVBFTkRTIiwgZGVwZW5kcykKKyAgICAgICAgICAgICAgICBkLnNldFZhcigiR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUiLCAiY29tcGlsZSIpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICMgdHJ5IHRvIGZpeCBkaXNhYmxlIGNoYXJzZXRzL2xvY2FsZXMvbG9jYWxlLWNvZGUgY29tcGlsZSBmYWlsCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNoYXJzZXRzJywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgICAgICBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlcycsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICAgICAgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZS1jb2RlJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9OT19HQ09OVicsICcwJykKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRV9OT19HQ09OVicsICcxJykKK30KKworT1ZFUlJJREVTX2FwcGVuZCA9ICI6JHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgaWYgWyAtZSAke1N9L2VsZi9sZGQuYmFzaC5pbiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc2VkIC1lICJzI0BCQVNIQCMvYmluL3NoIyIgLWkgJHtTfS9lbGYvbGRkLmJhc2guaW4KKyAgICAgICAgZmkKK30KKworCisKKyMgaW5kZW50YXRpb24gcmVtb3ZlZCBvbiBwdXJwb3NlCitsb2NhbGVfYmFzZV9wb3N0aW5zdCgpIHsKKyMhL2Jpbi9zaAorCitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJZXhpdCAxCitmaQorCitybSAtcmYgJHtUTVBfTE9DQUxFfQorbWtkaXIgLXAgJHtUTVBfTE9DQUxFfQoraWYgWyAtZiAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgXTsgdGhlbgorICAgICAgICBjcCAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgJHtUTVBfTE9DQUxFfS8KK2ZpCitsb2NhbGVkZWYgLS1pbnB1dGZpbGU9JHtkYXRhZGlyfS9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzIC0tcHJlZml4PS90bXAvbG9jYWxlICVzCitta2RpciAtcCAke2xvY2FsZWRpcn0vCittdiAke1RNUF9MT0NBTEV9L2xvY2FsZS1hcmNoaXZlICR7bG9jYWxlZGlyfS8KK3JtIC1yZiAke1RNUF9MT0NBTEV9Cit9CisKKyMgaW5kZW50YXRpb24gcmVtb3ZlZCBvbiBwdXJwb3NlCitsb2NhbGVfYmFzZV9wb3N0cm0oKSB7CisjIS9iaW4vc2gKKworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK21rZGlyIC1wICR7VE1QX0xPQ0FMRX0KK2lmIFsgLWYgJHtsb2NhbGVkaXJ9L2xvY2FsZS1hcmNoaXZlIF07IHRoZW4KKwljcCAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgJHtUTVBfTE9DQUxFfS8KK2ZpCitsb2NhbGVkZWYgLS1kZWxldGUtZnJvbS1hcmNoaXZlIC0taW5wdXRmaWxlPSR7ZGF0YWRpcn0vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgLS1wcmVmaXg9L3RtcC9sb2NhbGUgJXMKK212ICR7VE1QX0xPQ0FMRX0vbG9jYWxlLWFyY2hpdmUgJHtsb2NhbGVkaXJ9Lworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK30KKworCitUTVBfTE9DQUxFPSIvdG1wL2xvY2FsZSR7bG9jYWxlZGlyfSIKK0xPQ0FMRVRSRUVTUkMgPz0gIiR7UEtHRH0iCisKK2RvX3ByZXBfbG9jYWxlX3RyZWUoKSB7CisJdHJlZWRpcj0ke1dPUktESVJ9L2xvY2FsZS10cmVlCisJcm0gLXJmICR0cmVlZGlyCisJbWtkaXIgLXAgJHRyZWVkaXIvJHtiYXNlX2JpbmRpcn0gJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0gJHRyZWVkaXIvJHtkYXRhZGlyfSAkdHJlZWRpci8ke2xvY2FsZWRpcn0KKwl0YXIgLWNmIC0gLUMgJHtMT0NBTEVUUkVFU1JDfSR7ZGF0YWRpcn0gLXAgaTE4biB8IHRhciAteGYgLSAtQyAkdHJlZWRpci8ke2RhdGFkaXJ9CisJIyB1bnppcCB0byBhdm9pZCBwYXJzaW5nIGVycm9ycworCWZvciBpIGluICR0cmVlZGlyLyR7ZGF0YWRpcn0vaTE4bi9jaGFybWFwcy8qZ3o7IGRvIAorCQlndW56aXAgJGkKKwlkb25lCisJdGFyIC1jZiAtIC1DICR7TE9DQUxFVFJFRVNSQ30ke2Jhc2VfbGliZGlyfSAtcCAuIHwgdGFyIC14ZiAtIC1DICR0cmVlZGlyLyR7YmFzZV9saWJkaXJ9CisJaWYgWyAtZiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2xpYi9saWJnY2Nfcy4qIF07IHRoZW4KKwkJdGFyIC1jZiAtIC1DICR7U1RBR0lOR19ESVJfTkFUSVZFfS8ke3ByZWZpeF9uYXRpdmV9LyR7YmFzZV9saWJkaXJ9IC1wIGxpYmdjY19zLiogfCB0YXIgLXhmIC0gLUMgJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke0xPQ0FMRVRSRUVTUkN9JHtiaW5kaXJ9L2xvY2FsZWRlZiAkdHJlZWRpci8ke2Jhc2VfYmluZGlyfQorfQorCitkb19jb2xsZWN0X2JpbnNfZnJvbV9sb2NhbGVfdHJlZSgpIHsKKwl0cmVlZGlyPSR7V09SS0RJUn0vbG9jYWxlLXRyZWUKKworCXBhcmVudD0kKGRpcm5hbWUgJHtsb2NhbGVkaXJ9KQorCW1rZGlyIC1wICR7UEtHRH0vJHBhcmVudAorCXRhciAtY2YgLSAtQyAkdHJlZWRpci8kcGFyZW50IC1wICQoYmFzZW5hbWUgJHtsb2NhbGVkaXJ9KSB8IHRhciAteGYgLSAtQyAke1BLR0R9JHBhcmVudAorfQorCitpbmhlcml0IHFlbXUKKworcHl0aG9uIHBhY2thZ2VfZG9fc3BsaXRfZ2NvbnZzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VfTk9fR0NPTlYnLCBUcnVlKSA9PSAnMScpOgorICAgICAgICBiYi5ub3RlKCJwYWNrYWdlIHJlcXVlc3RlZCBub3Qgc3BsaXR0aW5nIGdjb252cyIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpOgorICAgICAgICByZXR1cm4KKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkgb3IgIiIKKworICAgIGJwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorICAgIGlmIG5vdCBsaWJkaXI6CisgICAgICAgIGJiLmVycm9yKCJsaWJkaXIgbm90IGRlZmluZWQiKQorICAgICAgICByZXR1cm4KKyAgICBkYXRhZGlyID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKQorICAgIGlmIG5vdCBkYXRhZGlyOgorICAgICAgICBiYi5lcnJvcigiZGF0YWRpciBub3QgZGVmaW5lZCIpCisgICAgICAgIHJldHVybgorCisgICAgZ2NvbnZfbGliZGlyID0gYmFzZV9wYXRoX2pvaW4obGliZGlyLCAiZ2NvbnYiKQorICAgIGNoYXJtYXBfZGlyID0gYmFzZV9wYXRoX2pvaW4oZGF0YWRpciwgImkxOG4iLCAiY2hhcm1hcHMiKQorICAgIGxvY2FsZXNfZGlyID0gYmFzZV9wYXRoX2pvaW4oZGF0YWRpciwgImkxOG4iLCAibG9jYWxlcyIpCisgICAgYmluYXJ5X2xvY2FsZXNfZGlyID0gZC5nZXRWYXIoJ2xvY2FsZWRpcicsIFRydWUpCisKKyAgICBkZWYgY2FsY19nY29udl9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcyVzLWdjb252LSVzJyAlIChtbHByZWZpeCwgYnBuLCBtLmdyb3VwKDEpKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnY29udl9saWJkaXIsIGZpbGVfcmVnZXg9J14oLiopXC5zbyQnLCBvdXRwdXRfcGF0dGVybj1icG4rJy1nY29udi0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2djb252IG1vZHVsZSBmb3IgY2hhcmFjdGVyIHNldCAlcycsIGhvb2s9Y2FsY19nY29udl9kZXBzLCBcCisgICAgICAgIGV4dHJhX2RlcGVuZHM9YnBuKyctZ2NvbnYnKQorCisgICAgZGVmIGNhbGNfY2hhcm1hcF9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCclcyVzLWNoYXJtYXAtJXMnICUgKG1scHJlZml4LCBicG4sIG0uZ3JvdXAoMSkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGNoYXJtYXBfZGlyLCBmaWxlX3JlZ2V4PSdeKC4qKVwuZ3okJywgb3V0cHV0X3BhdHRlcm49YnBuKyctY2hhcm1hcC0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2NoYXJhY3RlciBtYXAgZm9yICVzIGVuY29kaW5nJywgaG9vaz1jYWxjX2NoYXJtYXBfZGVwcywgZXh0cmFfZGVwZW5kcz0nJykKKworICAgIGRlZiBjYWxjX2xvY2FsZV9kZXBzKGZuLCBwa2csIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBncm91cCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBmID0gb3BlbihmbiwgInJiIikKKyAgICAgICAgY19yZSA9IHJlLmNvbXBpbGUoJ15jb3B5ICIoLiopIicpCisgICAgICAgIGlfcmUgPSByZS5jb21waWxlKCdeaW5jbHVkZSAiKFx3KykiLionKQorICAgICAgICBmb3IgbCBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgbSA9IGNfcmUubWF0Y2gobCkgb3IgaV9yZS5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkcCA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG1scHJlZml4K2JwbisnLWxvY2FsZWRhdGEtJXMnICUgbS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZHApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBkZXBzICE9IFtdOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGlmIGJwbiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2csIHBrZy5yZXBsYWNlKGJwbiwgJ2dsaWJjJykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIG91dHB1dF9wYXR0ZXJuPWJwbisnLWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgIGRlc2NyaXB0aW9uPSdsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBob29rPWNhbGNfbG9jYWxlX2RlcHMsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgRmFsc2UpICsgJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgYnBuICsgJy1nY29udicpCisKKyAgICB1c2VfYmluID0gZC5nZXRWYXIoIkdMSUJDX0lOVEVSTkFMX1VTRV9CSU5BUllfTE9DQUxFIiwgVHJ1ZSkKKworICAgIGRvdF9yZSA9IHJlLmNvbXBpbGUoIiguKilcLiguKikiKQorCisgICAgIyBSZWFkIGluIHN1cHBvcnRlZCBsb2NhbGVzIGFuZCBhc3NvY2lhdGVkIGVuY29kaW5ncworICAgIHN1cHBvcnRlZCA9IHt9CisgICAgd2l0aCBvcGVuKGJhc2VfcGF0aF9qb2luKGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksICJTVVBQT1JURUQiKSkgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhbGUsIGNoYXJzZXQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdXBwb3J0ZWRbbG9jYWxlXSA9IGNoYXJzZXQKKworICAgICMgR0xJQkNfR0VORVJBVEVfTE9DQUxFUyB2YXIgc3BlY2lmaWVzIHdoaWNoIGxvY2FsZXMgdG8gYmUgZ2VuZXJhdGVkLiBlbXB0eSBvciAiYWxsIiBtZWFucyBhbGwgbG9jYWxlcworICAgIHRvX2dlbmVyYXRlID0gZC5nZXRWYXIoJ0dMSUJDX0dFTkVSQVRFX0xPQ0FMRVMnLCBUcnVlKQorICAgIGlmIG5vdCB0b19nZW5lcmF0ZSBvciB0b19nZW5lcmF0ZSA9PSAnYWxsJzoKKyAgICAgICAgdG9fZ2VuZXJhdGUgPSBzdXBwb3J0ZWQua2V5cygpCisgICAgZWxzZToKKyAgICAgICAgdG9fZ2VuZXJhdGUgPSB0b19nZW5lcmF0ZS5zcGxpdCgpCisgICAgICAgIGZvciBsb2NhbGUgaW4gdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICBpZiBsb2NhbGUgbm90IGluIHN1cHBvcnRlZDoKKyAgICAgICAgICAgICAgICBpZiAnLicgaW4gbG9jYWxlOgorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gbG9jYWxlLnNwbGl0KCcuJylbMV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gJ1VURi04JworICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJVbnN1cHBvcnRlZCBsb2NhbGUgJyVzJywgYXNzdW1pbmcgZW5jb2RpbmcgJyVzJyIgJSAobG9jYWxlLCBjaGFyc2V0KSkKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWRbbG9jYWxlXSA9IGNoYXJzZXQKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX3NvdXJjZShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBrZ25hbWUsICdsb2NhbGVkZWYgJXMtbG9jYWxlZGF0YS0lcyAlcy1jaGFybWFwLSVzJyAlIFwKKyAgICAgICAgKG1scHJlZml4K2JwbiwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobG9jYWxlKSwgbWxwcmVmaXgrYnBuLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShlbmNvZGluZykpKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZ25hbWUsIGQuZ2V0VmFyKCdsb2NhbGVfYmFzZV9wb3N0aW5zdCcsIFRydWUpIFwKKyAgICAgICAgJSAobG9jYWxlLCBlbmNvZGluZywgbG9jYWxlKSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnbmFtZSwgZC5nZXRWYXIoJ2xvY2FsZV9iYXNlX3Bvc3RybScsIFRydWUpICUgXAorICAgICAgICAobG9jYWxlLCBlbmNvZGluZywgbG9jYWxlKSkKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgbSA9IHJlLm1hdGNoKCIoLiopXC4oLiopIiwgbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGxpYmNfbmFtZSA9ICIlcy4lcyIgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKS5sb3dlcigpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGliY19uYW1lID0gbmFtZQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnbmFtZSwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzLWJpbmFyeS1sb2NhbGVkYXRhLSVzJyBcCisgICAgICAgICAgICAlIChtbHByZWZpeCticG4sIGxpYmNfbmFtZSkpKQorCisgICAgY29tbWFuZHMgPSB7fQorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfYmluYXJ5KG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICB0cmVlZGlyID0gYmFzZV9wYXRoX2pvaW4oZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSwgImxvY2FsZS10cmVlIikKKyAgICAgICAgbGRsaWJkaXIgPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBkLmdldFZhcigiYmFzZV9saWJkaXIiLCBUcnVlKSkKKyAgICAgICAgcGF0aCA9IGQuZ2V0VmFyKCJQQVRIIiwgVHJ1ZSkKKyAgICAgICAgaTE4bnBhdGggPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBkYXRhZGlyLCAiaTE4biIpCisgICAgICAgIGdjb252cGF0aCA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsICJpY29udmRhdGEiKQorICAgICAgICBvdXRwdXRwYXRoID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgYmluYXJ5X2xvY2FsZXNfZGlyKQorCisgICAgICAgIHVzZV9jcm9zc19sb2NhbGVkZWYgPSBkLmdldFZhcigiTE9DQUxFX0dFTkVSQVRJT05fV0lUSF9DUk9TUy1MT0NBTEVERUYiLCBUcnVlKSBvciAiMCIKKyAgICAgICAgaWYgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9PSAiMSI6CisgICAgICAgICAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgICAgICAgICBsb2NhbGVfYXJjaF9vcHRpb25zID0geyBcCisgICAgICAgICAgICAgICAgImFybSI6ICAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJhYXJjaDY0IjogIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAic2g0IjogICAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJwb3dlcnBjIjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgInBvd2VycGM2NCI6ICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgIFwKKyAgICAgICAgICAgICAgICAibWlwcyI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgIm1pcHNlbCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJpNTg2IjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgImk2ODYiOiAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAieDg2XzY0IjogICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiAgfQorCisgICAgICAgICAgICBpZiB0YXJnZXRfYXJjaCBpbiBsb2NhbGVfYXJjaF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzID0gbG9jYWxlX2FyY2hfb3B0aW9uc1t0YXJnZXRfYXJjaF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoImxvY2FsZV9hcmNoX29wdGlvbnMgbm90IGZvdW5kIGZvciB0YXJnZXRfYXJjaD0iICsgdGFyZ2V0X2FyY2gpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5rbm93biBhcmNoOiIgKyB0YXJnZXRfYXJjaCArICIgZm9yIGxvY2FsZV9hcmNoX29wdGlvbnMiKQorCisgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyArPSAiIC0tZm9yY2UgLS1vbGQtc3R5bGUgLS1uby1hcmNoaXZlIC0tcHJlZml4PSVzIFwKKyAgICAgICAgICAgICAgICAtLWlucHV0ZmlsZT0lcy8lcy9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzICVzLyVzIiBcCisgICAgICAgICAgICAgICAgJSAodHJlZWRpciwgdHJlZWRpciwgZGF0YWRpciwgbG9jYWxlLCBlbmNvZGluZywgb3V0cHV0cGF0aCwgbmFtZSkKKworICAgICAgICAgICAgY21kID0gIlBBVEg9XCIlc1wiIEkxOE5QQVRIPVwiJXNcIiBHQ09OVl9QQVRIPVwiJXNcIiBjcm9zcy1sb2NhbGVkZWYgJXMiICUgXAorICAgICAgICAgICAgICAgIChwYXRoLCBpMThucGF0aCwgZ2NvbnZwYXRoLCBsb2NhbGVkZWZfb3B0cykKKyAgICAgICAgZWxzZTogIyBlYXJsaWVyIHNsb3dlciBxZW11IHdheSAKKyAgICAgICAgICAgIHFlbXUgPSBxZW11X3RhcmdldF9iaW5hcnkoZCkgCisgICAgICAgICAgICBsb2NhbGVkZWZfb3B0cyA9ICItLWZvcmNlIC0tb2xkLXN0eWxlIC0tbm8tYXJjaGl2ZSAtLXByZWZpeD0lcyBcCisgICAgICAgICAgICAgICAgLS1pbnB1dGZpbGU9JXMvaTE4bi9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAlcyIgXAorICAgICAgICAgICAgICAgICUgKHRyZWVkaXIsIGRhdGFkaXIsIGxvY2FsZSwgZW5jb2RpbmcsIG5hbWUpCisKKyAgICAgICAgICAgIHFlbXVfb3B0aW9ucyA9IGQuZ2V0VmFyKCdRRU1VX09QVElPTlMnLCBUcnVlKQorCisgICAgICAgICAgICBjbWQgPSAiUFNFVURPX1JFTE9BREVEPVlFUyBQQVRIPVwiJXNcIiBJMThOUEFUSD1cIiVzXCIgJXMgLUwgJXMgXAorICAgICAgICAgICAgICAgIC1FIExEX0xJQlJBUllfUEFUSD0lcyAlcyAlcy9iaW4vbG9jYWxlZGVmICVzIiAlIFwKKyAgICAgICAgICAgICAgICAocGF0aCwgaTE4bnBhdGgsIHFlbXUsIHRyZWVkaXIsIGxkbGliZGlyLCBxZW11X29wdGlvbnMsIHRyZWVkaXIsIGxvY2FsZWRlZl9vcHRzKQorCisgICAgICAgIGNvbW1hbmRzWyIlcy8lcyIgJSAob3V0cHV0cGF0aCwgbmFtZSldID0gY21kCisKKyAgICAgICAgYmIubm90ZSgiZ2VuZXJhdGluZyBsb2NhbGUgJXMgKCVzKSIgJSAobG9jYWxlLCBlbmNvZGluZykpCisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZShuYW1lLCBsb2NhbGUsIGVuY29kaW5nKToKKyAgICAgICAgcGtnbmFtZSA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdsb2NhbGUtYmFzZS0nICsgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobmFtZSkKKyAgICAgICAgZC5zZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZ25hbWUsICcxJykKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyVzICVzJyAlIChwa2duYW1lLCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSkpCisgICAgICAgIHJwcm92aWRlcyA9ICcgJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG5hbWUpKQorICAgICAgICBtID0gcmUubWF0Y2goIiguKilfKC4qKSIsIG5hbWUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBycHJvdmlkZXMgKz0gJyAlc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbS5ncm91cCgxKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18lcycgJSBwa2duYW1lLCBycHJvdmlkZXMpCisKKyAgICAgICAgaWYgdXNlX2JpbiA9PSAiY29tcGlsZSI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9iaW5hcnkobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKyAgICAgICAgZWxpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeV9yZGVwZW5kcyhuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZV9zb3VyY2UobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZykKKworICAgIGlmIHVzZV9iaW4gPT0gImNvbXBpbGUiOgorICAgICAgICBiYi5ub3RlKCJwcmVwYXJpbmcgdHJlZSBmb3IgYmluYXJ5IGxvY2FsZSBnZW5lcmF0aW9uIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wcmVwX2xvY2FsZV90cmVlIiwgZCkKKworICAgIHV0Zjhfb25seSA9IGludChkLmdldFZhcignTE9DQUxFX1VURjhfT05MWScsIFRydWUpIG9yIDApCisgICAgZW5jb2RpbmdzID0ge30KKyAgICBmb3IgbG9jYWxlIGluIHRvX2dlbmVyYXRlOgorICAgICAgICBjaGFyc2V0ID0gc3VwcG9ydGVkW2xvY2FsZV0KKyAgICAgICAgaWYgdXRmOF9vbmx5IGFuZCBjaGFyc2V0ICE9ICdVVEYtOCc6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG0gPSBkb3RfcmUubWF0Y2gobG9jYWxlKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgYmFzZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2UgPSBsb2NhbGUKKworICAgICAgICAjIFByZWNvbXBpbGVkIGxvY2FsZXMgYXJlIGtlcHQgYXMgaXMsIG9iZXlpbmcgU1VQUE9SVEVELCB3aGlsZQorICAgICAgICAjIG90aGVycyBhcmUgYWRqdXN0ZWQsIGVuc3VyaW5nIHRoYXQgdGhlIG5vbi1zdWZmaXhlZCBsb2NhbGVzCisgICAgICAgICMgYXJlIHV0Zi04LCB3aGlsZSB0aGUgc3VmZml4ZWQgYXJlIG5vdC4KKyAgICAgICAgaWYgdXNlX2JpbiA9PSAicHJlY29tcGlsZWQiOgorICAgICAgICAgICAgb3V0cHV0X2xvY2FsZShsb2NhbGUsIGJhc2UsIGNoYXJzZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBjaGFyc2V0ID09ICdVVEYtOCc6CisgICAgICAgICAgICAgICAgb3V0cHV0X2xvY2FsZShiYXNlLCBiYXNlLCBjaGFyc2V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKCclcy4lcycgJSAoYmFzZSwgY2hhcnNldCksIGJhc2UsIGNoYXJzZXQpCisKKyAgICBpZiB1c2VfYmluID09ICJjb21waWxlIjoKKyAgICAgICAgbWFrZWZpbGUgPSBiYXNlX3BhdGhfam9pbihkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCAibG9jYWxlLXRyZWUiLCAiTWFrZWZpbGUiKQorICAgICAgICBtID0gb3BlbihtYWtlZmlsZSwgInciKQorICAgICAgICBtLndyaXRlKCJhbGw6ICVzXG5cbiIgJSAiICIuam9pbihjb21tYW5kcy5rZXlzKCkpKQorICAgICAgICBmb3IgY21kIGluIGNvbW1hbmRzOgorICAgICAgICAgICAgbS53cml0ZShjbWQgKyAiOlxuIikKKyAgICAgICAgICAgIG0ud3JpdGUoIlx0IiArIGNvbW1hbmRzW2NtZF0gKyAiXG5cbiIpCisgICAgICAgIG0uY2xvc2UoKQorICAgICAgICBkLnNldFZhcigiRVhUUkFfT0VNQUtFIiwgIi1DICVzICR7UEFSQUxMRUxfTUFLRX0iICUgKG9zLnBhdGguZGlybmFtZShtYWtlZmlsZSkpKQorICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgYmluYXJ5IGxvY2FsZSBnZW5lcmF0aW9uIG1ha2VmaWxlIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgYmIubm90ZSgiY29sbGVjdGluZyBiaW5hcnkgbG9jYWxlcyBmcm9tIGxvY2FsZSB0cmVlIikKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19jb2xsZWN0X2JpbnNfZnJvbV9sb2NhbGVfdHJlZSIsIGQpCisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJpbmFyeV9sb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIFwKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPWJwbisnLWJpbmFyeS1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICAgICAgZGVzY3JpcHRpb249J2JpbmFyeSBsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19kaXJzPVRydWUpCisgICAgZWxpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJpbmFyeV9sb2NhbGVzX2RpciwgZmlsZV9yZWdleD0nKC4qKScsIFwKKyAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPWJwbisnLWJpbmFyeS1sb2NhbGVkYXRhLSVzJywgXAorICAgICAgICAgICAgZGVzY3JpcHRpb249J2JpbmFyeSBsb2NhbGUgZGVmaW5pdGlvbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19kaXJzPVRydWUpCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiZ2VuZXJhdGlvbiBvZiBiaW5hcnkgbG9jYWxlcyBkaXNhYmxlZC4gdGhpcyBtYXkgYnJlYWsgaTE4biEiKQorCit9CisKKyMgV2Ugd2FudCB0byBkbyB0aGlzIGluZGlyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIHNhZmVseSAncmV0dXJuJworIyBmcm9tIHRoZSBjYWxsZWQgZnVuY3Rpb24gZXZlbiB0aG91Z2ggd2UncmUgcHJlcGVuZGluZworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygncGFja2FnZV9kb19zcGxpdF9nY29udnMnLCBkKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE2YTIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2xpY2Vuc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQ4MyBAQAorIyBQb3B1bGF0ZXMgTElDRU5TRV9ESVJFQ1RPUlkgYXMgc2V0IGluIGRpc3RybyBjb25maWcgd2l0aCB0aGUgbGljZW5zZSBmaWxlcyBhcyBzZXQgYnkKKyMgTElDX0ZJTEVTX0NIS1NVTS4KKyMgVE9ETzoKKyMgLSBUaGVyZSBpcyBhIHJlYWwgaXNzdWUgcmV2b2x2aW5nIGFyb3VuZCBsaWNlbnNlIG5hbWluZyBzdGFuZGFyZHMuCisKK0xJQ0VOU0VfRElSRUNUT1JZID8/PSAiJHtERVBMT1lfRElSfS9saWNlbnNlcyIKK0xJQ1NTVEFURURJUiA9ICIke1dPUktESVJ9L2xpY2Vuc2UtZGVzdGRpci8iCisKKyMgQ3JlYXRlIGV4dHJhIHBhY2thZ2Ugd2l0aCBsaWNlbnNlIHRleHRzIGFuZCBhZGQgaXQgdG8gUlJFQ09NTUVORFNfJHtQTn0KK0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0VbdHlwZV0gPSAiYm9vbGVhbiIKK0xJQ0VOU0VfQ1JFQVRFX1BBQ0tBR0UgPz89ICIwIgorTElDRU5TRV9QQUNLQUdFX1NVRkZJWCA/Pz0gIi1saWMiCitMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWSA/Pz0gIiR7ZGF0YWRpcn0vbGljZW5zZXMvIgorCithZGR0YXNrIHBvcHVsYXRlX2xpYyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fYnVpbGQKK2RvX3BvcHVsYXRlX2xpY1tkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0vJHtQTn0iCitkb19wb3B1bGF0ZV9saWNbY2xlYW5kaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCisKK3B5dGhvbiB3cml0ZV9wYWNrYWdlX21hbmlmZXN0KCkgeworICAgICMgR2V0IGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzCisgICAgbGljZW5zZV9pbWFnZV9kaXIgPSBkLmV4cGFuZCgnJHtMSUNFTlNFX0RJUkVDVE9SWX0vJHtJTUFHRV9OQU1FfScpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGxpY2Vuc2VfaW1hZ2VfZGlyKQorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIG9wZW4ob3MucGF0aC5qb2luKGxpY2Vuc2VfaW1hZ2VfZGlyLCAncGFja2FnZS5tYW5pZmVzdCcpLAorICAgICAgICAndysnKS53cml0ZShpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkKSkKK30KKworcHl0aG9uIGxpY2Vuc2VfY3JlYXRlX21hbmlmZXN0KCkgeworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcworCisgICAgYmFkX2xpY2Vuc2VzID0gKGQuZ2V0VmFyKCJJTkNPTVBBVElCTEVfTElDRU5TRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFkX2xpY2Vuc2VzID0gbWFwKGxhbWJkYSBsOiBjYW5vbmljYWxfbGljZW5zZShkLCBsKSwgYmFkX2xpY2Vuc2VzKQorICAgIGJhZF9saWNlbnNlcyA9IGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCBiYWRfbGljZW5zZXMpCisKKyAgICBidWlsZF9pbWFnZXNfZnJvbV9mZWVkcyA9IGQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpCisgICAgaWYgYnVpbGRfaW1hZ2VzX2Zyb21fZmVlZHMgPT0gIjEiOgorICAgICAgICByZXR1cm4gMAorCisgICAgcGtnX2RpYyA9IHt9CisgICAgZm9yIHBrZyBpbiBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkKS5zcGxpdGxpbmVzKCk6CisgICAgICAgIHBrZ19pbmZvID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZS1yZXZlcnNlJywgcGtnKQorICAgICAgICBwa2dfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocGtnX2luZm8pKQorCisgICAgICAgIHBrZ19kaWNbcGtnX25hbWVdID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhZmlsZShwa2dfaW5mbykKKyAgICAgICAgaWYgbm90ICJMSUNFTlNFIiBpbiBwa2dfZGljW3BrZ19uYW1lXS5rZXlzKCk6CisgICAgICAgICAgICBwa2dfbGljX25hbWUgPSAiTElDRU5TRV8iICsgcGtnX25hbWUKKyAgICAgICAgICAgIHBrZ19kaWNbcGtnX25hbWVdWyJMSUNFTlNFIl0gPSBwa2dfZGljW3BrZ19uYW1lXVtwa2dfbGljX25hbWVdCisKKyAgICBsaWNlbnNlX21hbmlmZXN0ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKSwgJ2xpY2Vuc2UubWFuaWZlc3QnKQorICAgIHdpdGggb3BlbihsaWNlbnNlX21hbmlmZXN0LCAidyIpIGFzIGxpY2Vuc2VfZmlsZToKKyAgICAgICAgZm9yIHBrZyBpbiBzb3J0ZWQocGtnX2RpYyk6CisgICAgICAgICAgICBpZiBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAocGtnX2RpY1twa2ddWyJMSUNFTlNFIl0sIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSkgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBvZS5saWNlbnNlLm1hbmlmZXN0X2xpY2Vuc2VzKHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFkX2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgb2UubGljZW5zZS5MaWNlbnNlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUCcsIFRydWUpLCBleGMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSByZS5zdWIoJ1t8JigpKl0nLCAnJywgcGtnX2RpY1twa2ddWyJMSUNFTlNFIl0pCisgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdID0gcmUuc3ViKCcgIConLCAnICcsIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSkKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0uc3BsaXQoKQorCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlBBQ0tBR0UgTkFNRTogJXNcbiIgJSBwa2cpCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlBBQ0tBR0UgVkVSU0lPTjogJXNcbiIgJSBwa2dfZGljW3BrZ11bIlBWIl0pCisgICAgICAgICAgICBsaWNlbnNlX2ZpbGUud3JpdGUoIlJFQ0lQRSBOQU1FOiAlc1xuIiAlIHBrZ19kaWNbcGtnXVsiUE4iXSkKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiTElDRU5TRTogJXNcblxuIiAlIHBrZ19kaWNbcGtnXVsiTElDRU5TRSJdKQorCisgICAgICAgICAgICAjIElmIHRoZSBwYWNrYWdlIGRvZXNuJ3QgY29udGFpbiBhbnkgZmlsZSwgdGhhdCBpcywgaXRzIHNpemUgaXMgMCwgdGhlIGxpY2Vuc2UKKyAgICAgICAgICAgICMgaXNuJ3QgcmVsZXZhbnQgYXMgZmFyIGFzIHRoZSBmaW5hbCBpbWFnZSBpcyBjb25jZXJuZWQuIFNvIGRvaW5nIGxpY2Vuc2UgY2hlY2sKKyAgICAgICAgICAgICMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIHNraXAgaXQuCisgICAgICAgICAgICBpZiBwa2dfZGljW3BrZ11bIlBLR1NJWkVfJXMiICUgcGtnXSA9PSAiMCI6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIGxpYyBpbiBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl06CisgICAgICAgICAgICAgICAgbGljX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2RpY1twa2ddWyJQTiJdLCAiZ2VuZXJpY18lcyIgJSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5zdWIoJ1wrJywgJycsIGxpYykpCisgICAgICAgICAgICAgICAgIyBhZGQgZXhwbGljaXR5IGF2b2lkIG9mIENMT1NFRCBsaWNlbnNlIGJlY2F1c2UgaXNuJ3QgZ2VuZXJpYworICAgICAgICAgICAgICAgIGlmIGxpYyA9PSAiQ0xPU0VEIjoKKyAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxpY19maWxlKToKKyAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgbGljZW5zZSBsaXN0ZWQgJXMgd2FzIG5vdCBpbiB0aGUgIlwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpY2Vuc2VzIGNvbGxlY3RlZCBmb3IgcmVjaXBlICVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChsaWMsIHBrZ19kaWNbcGtnXVsiUE4iXSkpCisKKyAgICAjIFR3byBvcHRpb25zIGhlcmU6CisgICAgIyAtIEp1c3QgY29weSB0aGUgbWFuaWZlc3QKKyAgICAjIC0gQ29weSB0aGUgbWFuaWZlc3QgYW5kIHRoZSBsaWNlbnNlIGRpcmVjdG9yaWVzCisgICAgIyBXaXRoIGJvdGggb3B0aW9ucyBzZXQgd2Ugc2VlIGEgLjUgTSBpbmNyZWFzZSBpbiBjb3JlLWltYWdlLW1pbmltYWwKKyAgICBjb3B5X2xpY19tYW5pZmVzdCA9IGQuZ2V0VmFyKCdDT1BZX0xJQ19NQU5JRkVTVCcsIFRydWUpCisgICAgY29weV9saWNfZGlycyA9IGQuZ2V0VmFyKCdDT1BZX0xJQ19ESVJTJywgVHJ1ZSkKKyAgICBpZiBjb3B5X2xpY19tYW5pZmVzdCA9PSAiMSI6CisgICAgICAgIHJvb3Rmc19saWNlbnNlX2RpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignSU1BR0VfUk9PVEZTJywgJ1RydWUnKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c3InLCAnc2hhcmUnLCAnY29tbW9uLWxpY2Vuc2VzJykKKyAgICAgICAgb3MubWFrZWRpcnMocm9vdGZzX2xpY2Vuc2VfZGlyKQorICAgICAgICByb290ZnNfbGljZW5zZV9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihyb290ZnNfbGljZW5zZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGljZW5zZS5tYW5pZmVzdCcpCisgICAgICAgIG9zLmxpbmsobGljZW5zZV9tYW5pZmVzdCwgcm9vdGZzX2xpY2Vuc2VfbWFuaWZlc3QpCisKKyAgICAgICAgaWYgY29weV9saWNfZGlycyA9PSAiMSI6CisgICAgICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChwa2dfZGljKToKKyAgICAgICAgICAgICAgICBwa2dfcm9vdGZzX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKHJvb3Rmc19saWNlbnNlX2RpciwgcGtnKQorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHBrZ19yb290ZnNfbGljZW5zZV9kaXIpCisgICAgICAgICAgICAgICAgcGtnX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNFTlNFX0RJUkVDVE9SWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIlBOIl0pIAorICAgICAgICAgICAgICAgIGxpY2Vuc2VzID0gb3MubGlzdGRpcihwa2dfbGljZW5zZV9kaXIpCisgICAgICAgICAgICAgICAgZm9yIGxpYyBpbiBsaWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocm9vdGZzX2xpY2Vuc2VfZGlyLCBsaWMpCisgICAgICAgICAgICAgICAgICAgIHBrZ19saWNlbnNlID0gb3MucGF0aC5qb2luKHBrZ19saWNlbnNlX2RpciwgbGljKQorICAgICAgICAgICAgICAgICAgICBwa2dfcm9vdGZzX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocGtnX3Jvb3Rmc19saWNlbnNlX2RpciwgbGljKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCJeZ2VuZXJpY18uKiQiLCBsaWMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19saWMgPSByZS5zZWFyY2goIl5nZW5lcmljXyguKikkIiwgbGljKS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19saWMpLCBiYWRfbGljZW5zZXMpID09IEZhbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyb290ZnNfbGljZW5zZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhwa2dfbGljZW5zZSwgcm9vdGZzX2xpY2Vuc2UpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKCcuLicsIGxpYyksIHBrZ19yb290ZnNfbGljZW5zZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYyksIGJhZF9saWNlbnNlcykgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhwa2dfbGljZW5zZSwgcGtnX3Jvb3Rmc19saWNlbnNlKQorfQorCitweXRob24gZG9fcG9wdWxhdGVfbGljKCkgeworICAgICIiIgorICAgIFBvcHVsYXRlIExJQ0VOU0VfRElSRUNUT1JZIHdpdGggbGljZW5zZXMuCisgICAgIiIiCisgICAgbGljX2ZpbGVzX3BhdGhzID0gZmluZF9saWNlbnNlX2ZpbGVzKGQpCisKKyAgICAjIFRoZSBiYXNlIGRpcmVjdG9yeSB3ZSB3cmFuZ2xlIGxpY2Vuc2VzIHRvCisgICAgZGVzdGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDU1NUQVRFRElSJywgVHJ1ZSksIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpCit9CisKKyMgaXQgd291bGQgYmUgYmV0dGVyIHRvIGNvcHkgdGhlbSBpbiBkb19pbnN0YWxsX2FwcGVuZCwgYnV0IGZpbmRfbGljZW5zZV9maWxlc2EgaXMgcHl0aG9uCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weV9wcmVwZW5kICgpIHsKKyAgICBlbmFibGVkID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnTElDRU5TRV9DUkVBVEVfUEFDS0FHRScsIGQpCisgICAgaWYgZC5nZXRWYXIoJ0NMQVNTT1ZFUlJJREUnLCBUcnVlKSA9PSAnY2xhc3MtdGFyZ2V0JyBhbmQgZW5hYmxlZDoKKyAgICAgICAgbGljX2ZpbGVzX3BhdGhzID0gZmluZF9saWNlbnNlX2ZpbGVzKGQpCisKKyAgICAgICAgIyBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWSBzdGFydHMgd2l0aCAnLycgc28gb3MucGF0aC5qb2luIGNhbm5vdCBiZSB1c2VkIHRvIGpvaW4gRCBhbmQgTElDRU5TRV9GSUxFU19ESVJFQ1RPUlkKKyAgICAgICAgZGVzdGRpciA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRklMRVNfRElSRUNUT1JZJywgVHJ1ZSksIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgICAgICBjb3B5X2xpY2Vuc2VfZmlsZXMobGljX2ZpbGVzX3BhdGhzLCBkZXN0ZGlyKQorICAgICAgICBhZGRfcGFja2FnZV9hbmRfZmlsZXMoZCkKK30KKworZGVmIGFkZF9wYWNrYWdlX2FuZF9maWxlcyhkKToKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgZmlsZXMgPSBkLmdldFZhcignTElDRU5TRV9GSUxFU19ESVJFQ1RPUlknLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBwbl9saWMgPSAiJXMlcyIgJSAocG4sIGQuZ2V0VmFyKCdMSUNFTlNFX1BBQ0tBR0VfU1VGRklYJywgRmFsc2UpKQorICAgIGlmIHBuX2xpYyBpbiBwYWNrYWdlczoKKyAgICAgICAgYmIud2FybigiJXMgcGFja2FnZSBhbHJlYWR5IGV4aXN0ZWQgaW4gJXMuIiAlIChwbl9saWMsIHBuKSkKKyAgICBlbHNlOgorICAgICAgICAjIGZpcnN0IGluIFBBQ0tBR0VTIHRvIGJlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2UgZ2V0cyBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWQorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAiJXMgJXMiICUgKHBuX2xpYywgcGFja2FnZXMpKQorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBuX2xpYywgZmlsZXMpCisgICAgICAgIHJyZWNvbW1lbmRzX3BuID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgcnJlY29tbWVuZHNfcG46CisgICAgICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCAiJXMgJXMiICUgKHBuX2xpYywgcnJlY29tbWVuZHNfcG4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwbiwgIiVzIiAlIChwbl9saWMpKQorCitkZWYgY29weV9saWNlbnNlX2ZpbGVzKGxpY19maWxlc19wYXRocywgZGVzdGRpcik6CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RkaXIpCisgICAgZm9yIChiYXNlbmFtZSwgcGF0aCkgaW4gbGljX2ZpbGVzX3BhdGhzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcmMgPSBwYXRoCisgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3Moc3JjLCBvcy5XX09LKSBhbmQgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgorICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIud2FybigiQ291bGQgbm90IGNvcHkgbGljZW5zZSBmaWxlICVzIHRvICVzOiAlcyIgJSAoc3JjLCBkc3QsIGUpKQorCitkZWYgZmluZF9saWNlbnNlX2ZpbGVzKGQpOgorICAgICIiIgorICAgIENyZWF0ZXMgbGlzdCBvZiBmaWxlcyB1c2VkIGluIExJQ19GSUxFU19DSEtTVU0gYW5kIGdlbmVyaWMgTElDRU5TRSBmaWxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IG9lLmxpY2Vuc2UKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBmb3IgcGFja2FnZSBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0xJQ0VOU0VfJyArIHBhY2thZ2UsIFRydWUpOgorICAgICAgICAgICAgbGljZW5zZV90eXBlcyA9IGxpY2Vuc2VfdHlwZXMgKyAnICYgJyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignTElDRU5TRV8nICsgcGFja2FnZSwgVHJ1ZSkKKworICAgICNJZiB3ZSBnZXQgaGVyZSB3aXRoIG5vIGxpY2Vuc2UgdHlwZXMsIHRoZW4gdGhhdCBtZWFucyB3ZSBoYXZlIGEgcmVjaXBlIAorICAgICNsZXZlbCBsaWNlbnNlLiBJZiBzbywgd2UgZ3JhYiBvbmx5IHRob3NlLgorICAgIHRyeToKKyAgICAgICAgbGljZW5zZV90eXBlcworICAgIGV4Y2VwdCBOYW1lRXJyb3I6ICAgICAgICAKKyAgICAgICAgIyBBbGwgdGhlIGxpY2Vuc2UgdHlwZXMgYXQgdGhlIHJlY2lwZSBsZXZlbAorICAgICAgICBsaWNlbnNlX3R5cGVzID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorIAorICAgICMgQWxsIHRoZSBsaWNlbnNlIGZpbGVzIGZvciB0aGUgcGFja2FnZQorICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCdMSUNfRklMRVNfQ0hLU1VNJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgIyBUaGUgbGljZW5zZSBmaWxlcyBhcmUgbG9jYXRlZCBpbiBTL0xJQ19GSUxFX0NIRUNLU1VNLgorICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAjIERpcmVjdG9yeSB3ZSBzdG9yZSB0aGUgZ2VuZXJpYyBsaWNlbnNlcyBhcyBzZXQgaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uCisgICAgZ2VuZXJpY19kaXJlY3RvcnkgPSBkLmdldFZhcignQ09NTU9OX0xJQ0VOU0VfRElSJywgVHJ1ZSkKKyAgICAjIExpc3Qgb2YgYmFzZW5hbWUsIHBhdGggdHVwbGVzCisgICAgbGljX2ZpbGVzX3BhdGhzID0gW10KKyAgICBsaWNlbnNlX3NvdXJjZV9kaXJzID0gW10KKyAgICBsaWNlbnNlX3NvdXJjZV9kaXJzLmFwcGVuZChnZW5lcmljX2RpcmVjdG9yeSkKKyAgICB0cnk6CisgICAgICAgIGFkZGl0aW9uYWxfbGljX2RpcnMgPSBkLmdldFZhcignTElDRU5TRV9QQVRIJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBmb3IgbGljX2RpciBpbiBhZGRpdGlvbmFsX2xpY19kaXJzOgorICAgICAgICAgICAgbGljZW5zZV9zb3VyY2VfZGlycy5hcHBlbmQobGljX2RpcikKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIEZpbmRWaXNpdG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgorICAgICAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBVbnRpbCBJIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoCisgICAgICAgICAgICAjIHRoZSB0d28gbW9kaWZpZXJzIEkgc3VwcG9ydCAob3IgZ3JlYXRlciA9ICsKKyAgICAgICAgICAgICMgYW5kICJ3aXRoIGV4Y2VwdGlvbnMiIGJlaW5nICoKKyAgICAgICAgICAgICMgd2UnbGwganVzdCBzdHJpcCBvdXQgdGhlIG1vZGlmaWVyIGFuZCBwdXQKKyAgICAgICAgICAgICMgdGhlIGJhc2UgbGljZW5zZS4KKyAgICAgICAgICAgIGZpbmRfbGljZW5zZShub2RlLnMucmVwbGFjZSgiKyIsICIiKS5yZXBsYWNlKCIqIiwgIiIpKQorICAgICAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKKyAgICBkZWYgZmluZF9saWNlbnNlKGxpY2Vuc2VfdHlwZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihnZW5fbGljX2Rlc3QpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3BkeF9nZW5lcmljID0gTm9uZQorICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IE5vbmUKKyAgICAgICAgIyBJZiB0aGUgZ2VuZXJpYyBkb2VzIG5vdCBleGlzdCB3ZSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBTUERYIG1hcHBpbmcgdG8gaXQsCisgICAgICAgICMgdW5sZXNzIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQuCisKKyAgICAgICAgZm9yIGxpY19kaXIgaW4gbGljZW5zZV9zb3VyY2VfZGlyczoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBHcmVhdCwgdGhlcmUgaXMgYW4gU1BEWExJQ0VOU0VNQVAuIFdlIGNhbiBjb3B5IQorICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiV2UgbmVlZCB0byB1c2UgYSBTUERYTElDRU5TRU1BUCBmb3IgJXMiICUgKGxpY2Vuc2VfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHNwZHhfZ2VuZXJpYyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gbGljX2RpcgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGljX2RpciwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICAgICAgc3BkeF9nZW5lcmljID0gbGljZW5zZV90eXBlCisgICAgICAgICAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBsaWNfZGlyCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBzcGR4X2dlbmVyaWMgYW5kIGxpY2Vuc2Vfc291cmNlOgorICAgICAgICAgICAgIyB3ZSByZWFsbHkgc2hvdWxkIGNvcHkgdG8gZ2VuZXJpY18gKyBzcGR4X2dlbmVyaWMsIGhvd2V2ZXIsIHRoYXQgZW5kcyB1cCBtZXNzaW5nIHRoZSBtYW5pZmVzdAorICAgICAgICAgICAgIyBhdWRpdCB1cC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gZW1pdF9wa2dkYXRhIChvciwgd2UgYWN0dWFsbHkgZ290IGFuZCBmaXggYWxsIHRoZSByZWNpcGVzKQorCisgICAgICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKCgiZ2VuZXJpY18iICsgbGljZW5zZV90eXBlLCBvcy5wYXRoLmpvaW4obGljZW5zZV9zb3VyY2UsIHNwZHhfZ2VuZXJpYykpKQorCisgICAgICAgICAgICAjIFRoZSB1c2VyIG1heSBhdHRlbXB0IHRvIHVzZSBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIGEgZ2VuZXJpYyBsaWNlbnNlIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZQorICAgICAgICAgICAgIyBhbmQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLCB3YXJuIHRoZSB1c2VyIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgaXMgYSBnZW5lcmljIGxpY2Vuc2UsIHBsZWFzZSBkb24ndCB1c2UgTk9fR0VORVJJQ19MSUNFTlNFIGZvciBpdC4iICUgKHBuLCBsaWNlbnNlX3R5cGUpKQorCisgICAgICAgIGVsaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpOgorICAgICAgICAgICAgIyBpZiBOT19HRU5FUklDX0xJQ0VOU0UgaXMgc2V0LCB3ZSBjb3B5IHRoZSBsaWNlbnNlIGZpbGVzIGZyb20gdGhlIGZldGNoZWQgc291cmNlCisgICAgICAgICAgICAjIG9mIHRoZSBwYWNrYWdlIHJhdGhlciB0aGFuIHRoZSBsaWNlbnNlX3NvdXJjZV9kaXJzLgorICAgICAgICAgICAgZm9yIChiYXNlbmFtZSwgcGF0aCkgaW4gbGljX2ZpbGVzX3BhdGhzOgorICAgICAgICAgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnTk9fR0VORVJJQ19MSUNFTlNFJywgbGljZW5zZV90eXBlKSA9PSBiYXNlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgoImdlbmVyaWNfIiArIGxpY2Vuc2VfdHlwZSwgcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFkZCBleHBsaWNpdHkgYXZvaWQgb2YgQ0xPU0VEIGxpY2Vuc2UgYmVjYXVzZSB0aGlzIGlzbid0IGdlbmVyaWMKKyAgICAgICAgICAgIGlmIGxpY2Vuc2VfdHlwZSAhPSAnQ0xPU0VEJzoKKyAgICAgICAgICAgICAgICAjIEFuZCBoZXJlIGlzIHdoZXJlIHdlIHdhcm4gcGVvcGxlIHRoYXQgdGhlaXIgbGljZW5zZXMgYXJlIGxvdXN5CisgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IE5vIGdlbmVyaWMgbGljZW5zZSBmaWxlIGV4aXN0cyBmb3I6ICVzIGluIGFueSBwcm92aWRlciIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCisgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBub3QgZ2VuZXJpY19kaXJlY3Rvcnk6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkNPTU1PTl9MSUNFTlNFX0RJUiBpcyB1bnNldC4gUGxlYXNlIHNldCB0aGlzIGluIHlvdXIgZGlzdHJvIGNvbmZpZyIpCisKKyAgICBpZiBub3QgbGljX2ZpbGVzOgorICAgICAgICAjIE5vIHJlY2lwZSBzaG91bGQgaGF2ZSBhbiBpbnZhbGlkIGxpY2Vuc2UgZmlsZS4gVGhpcyBpcyBjaGVja2VkIGVsc2UKKyAgICAgICAgIyB3aGVyZSwgYnV0IGxldCdzIGJlIHBlZGFudGljCisgICAgICAgIGJiLm5vdGUocG4gKyAiOiBSZWNpcGUgZmlsZSBkb2VzIG5vdCBoYXZlIGxpY2Vuc2UgZmlsZSBpbmZvcm1hdGlvbi4iKQorICAgICAgICByZXR1cm4gbGljX2ZpbGVzX3BhdGhzCisKKyAgICBmb3IgdXJsIGluIGxpY19maWxlcy5zcGxpdCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICAlcyIgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHVybCkpCisgICAgICAgICMgV2Ugd2FudCB0aGUgbGljZW5zZSBmaWxlbmFtZSBhbmQgcGF0aAorICAgICAgICBzcmNsaWNmaWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgcGF0aCkKKyAgICAgICAgbGljX2ZpbGVzX3BhdGhzLmFwcGVuZCgob3MucGF0aC5iYXNlbmFtZShwYXRoKSwgc3JjbGljZmlsZSkpCisKKyAgICB2ID0gRmluZFZpc2l0b3IoKQorICAgIHRyeToKKyAgICAgICAgdi52aXNpdF9zdHJpbmcobGljZW5zZV90eXBlcykKKyAgICBleGNlcHQgb2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpLCBleGMpKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgYmIud2FybigiJXM6IEZhaWxlZCB0byBwYXJzZSBpdCdzIExJQ0VOU0UgZmllbGQuIiAlIChkLmdldFZhcignUEYnLCBUcnVlKSkpCisKKyAgICByZXR1cm4gbGljX2ZpbGVzX3BhdGhzCisKK2RlZiByZXR1cm5fc3BkeChkLCBsaWNlbnNlKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNwZHggbWFwcGluZyBvZiBhIGxpY2Vuc2UgaWYgaXQgZXhpc3RzLgorICAgICAiIiIKKyAgICByZXR1cm4gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UsIFRydWUpCisKK2RlZiBjYW5vbmljYWxfbGljZW5zZShkLCBsaWNlbnNlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGNhbm9uaWNhbCAoU1BEWCkgZm9ybSBvZiB0aGUgbGljZW5zZSBpZiBhdmFpbGFibGUgKHNvIEdQTHYzCisgICAgYmVjb21lcyBHUEwtMy4wKSwgZm9yIHRoZSBsaWNlbnNlIG5hbWVkICdYKycsIHJldHVybiBjYW5vbmljYWwgZm9ybSBvZgorICAgICdYJyBpZiBhdmFpbGFiZWwgYW5kIHRoZSB0YWlsaW5nICcrJyAoc28gR1BMdjMrIGJlY29tZXMgR1BMLTMuMCspLCAKKyAgICBvciB0aGUgcGFzc2VkIGxpY2Vuc2UgaWYgdGhlcmUgaXMgbm8gY2Fub25pY2FsIGZvcm0uCisgICAgIiIiCisgICAgbGljID0gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2UsIFRydWUpIG9yICIiCisgICAgaWYgbm90IGxpYyBhbmQgbGljZW5zZS5lbmRzd2l0aCgnKycpOgorICAgICAgICBsaWMgPSBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZS5yc3RyaXAoJysnKSwgVHJ1ZSkKKyAgICAgICAgaWYgbGljOgorICAgICAgICAgICAgbGljICs9ICcrJworICAgIHJldHVybiBsaWMgb3IgbGljZW5zZQorCitkZWYgZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIHdpbGRjYXJkX2xpY2Vuc2VzKToKKyAgICAiIiIKKyAgICBSZXR1cm4gYWN0dWFsIHNwZHggZm9ybWF0IGxpY2Vuc2UgbmFtZXMgaWYgd2lsZGNhcmQgdXNlZC4gV2UgZXhwYW5kCisgICAgd2lsZGNhcmRzIGZyb20gU1BEWExJQ0VOU0VNQVAgZmxhZ3MgYW5kIFNSQ19ESVNUUklCVVRFX0xJQ0VOU0VTIHZhbHVlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZm5tYXRjaAorICAgIGxpY2Vuc2VzID0gW10KKyAgICBzcGR4bWFwa2V5cyA9IGQuZ2V0VmFyRmxhZ3MoJ1NQRFhMSUNFTlNFTUFQJykua2V5cygpCisgICAgZm9yIHdsZF9saWMgaW4gd2lsZGNhcmRfbGljZW5zZXM6CisgICAgICAgIHNwZHhmbGFncyA9IGZubWF0Y2guZmlsdGVyKHNwZHhtYXBrZXlzLCB3bGRfbGljKQorICAgICAgICBsaWNlbnNlcyArPSBbZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGZsYWcpIGZvciBmbGFnIGluIHNwZHhmbGFnc10KKworICAgIHNwZHhfbGljcyA9IChkLmdldFZhcignU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMnLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICBmb3Igd2xkX2xpYyBpbiB3aWxkY2FyZF9saWNlbnNlczoKKyAgICAgICAgbGljZW5zZXMgKz0gZm5tYXRjaC5maWx0ZXIoc3BkeF9saWNzLCB3bGRfbGljKQorCisgICAgbGljZW5zZXMgPSBsaXN0KHNldChsaWNlbnNlcykpCisgICAgcmV0dXJuIGxpY2Vuc2VzCisKK2RlZiBpbmNvbXBhdGlibGVfbGljZW5zZV9jb250YWlucyhsaWNlbnNlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGxpY2Vuc2UgPSBjYW5vbmljYWxfbGljZW5zZShkLCBsaWNlbnNlKQorICAgIGJhZF9saWNlbnNlcyA9IChkLmdldFZhcignSU5DT01QQVRJQkxFX0xJQ0VOU0UnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGJhZF9saWNlbnNlcyA9IGV4cGFuZF93aWxkY2FyZF9saWNlbnNlcyhkLCBiYWRfbGljZW5zZXMpCisgICAgcmV0dXJuIHRydWV2YWx1ZSBpZiBsaWNlbnNlIGluIGJhZF9saWNlbnNlcyBlbHNlIGZhbHNldmFsdWUKKworZGVmIGluY29tcGF0aWJsZV9saWNlbnNlKGQsIGRvbnRfd2FudF9saWNlbnNlcywgcGFja2FnZT1Ob25lKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHJlY2lwZSBoYXMgb25seSBpbmNvbXBhdGlibGUgbGljZW5zZXMuIEl0IGFsc28KKyAgICB0YWtlIGludG8gY29uc2lkZXJhdGlvbiAnb3InIG9wZXJhbmQuICBkb250X3dhbnRfbGljZW5zZXMgc2hvdWxkIGJlIHBhc3NlZAorICAgIGFzIGNhbm9uaWNhbCAoU1BEWCkgbmFtZXMuCisgICAgIiIiCisgICAgaW1wb3J0IG9lLmxpY2Vuc2UKKyAgICBsaWNlbnNlID0gZC5nZXRWYXIoIkxJQ0VOU0VfJXMiICUgcGFja2FnZSwgVHJ1ZSkgaWYgcGFja2FnZSBlbHNlIE5vbmUKKyAgICBpZiBub3QgbGljZW5zZToKKyAgICAgICAgbGljZW5zZSA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKworICAgICMgSGFuZGxlcyBhbiAib3IiIG9yIHR3byBsaWNlbnNlIHNldHMgcHJvdmlkZWQgYnkKKyAgICAjIGZsYXR0ZW5lZF9saWNlbnNlcygpLCBwaWNrIG9uZSB0aGF0IHdvcmtzIGlmIHBvc3NpYmxlLgorICAgIGRlZiBjaG9vc2VfbGljX3NldChhLCBiKToKKyAgICAgICAgcmV0dXJuIGEgaWYgYWxsKG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLCBsaWMpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X3dhbnRfbGljZW5zZXMpIGZvciBsaWMgaW4gYSkgZWxzZSBiCisKKyAgICB0cnk6CisgICAgICAgIGxpY2Vuc2VzID0gb2UubGljZW5zZS5mbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZSwgY2hvb3NlX2xpY19zZXQpCisgICAgZXhjZXB0IG9lLmxpY2Vuc2UuTGljZW5zZUVycm9yIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1AnLCBUcnVlKSwgZXhjKSkKKyAgICByZXR1cm4gYW55KG5vdCBvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwgbCksIFwKKwkJZG9udF93YW50X2xpY2Vuc2VzKSBmb3IgbCBpbiBsaWNlbnNlcykKKworZGVmIGNoZWNrX2xpY2Vuc2VfZmxhZ3MoZCk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSByZWNpcGUgaGFzIGFueSBMSUNFTlNFX0ZMQUdTIHRoYXQKKyAgICBhcmVuJ3Qgd2hpdGVsaXN0ZWQuCisKKyAgICBJZiBpdCBkb2VzLCBpdCByZXR1cm5zIHRoZSBmaXJzdCBMSUNFTlNFX0ZMQUdTIGl0ZW0gbWlzc2luZyBmcm9tIHRoZQorICAgIHdoaXRlbGlzdCwgb3IgYWxsIG9mIHRoZSBMSUNFTlNFX0ZMQUdTIGlmIHRoZXJlIGlzIG5vIHdoaXRlbGlzdC4KKworICAgIElmIGV2ZXJ5dGhpbmcgaXMgaXMgcHJvcGVybHkgd2hpdGVsaXN0ZWQsIGl0IHJldHVybnMgTm9uZS4KKyAgICAiIiIKKworICAgIGRlZiBsaWNlbnNlX2ZsYWdfbWF0Y2hlcyhmbGFnLCB3aGl0ZWxpc3QsIHBuKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIGZsYWcgbWF0Y2hlcyBzb21ldGhpbmcgaW4gd2hpdGVsaXN0LCBOb25lIGlmIG5vdC4KKworICAgICAgICBCZWZvcmUgd2UgdGVzdCBhIGZsYWcgYWdhaW5zdCB0aGUgd2hpdGVsaXN0LCB3ZSBhcHBlbmQgXyR7UE59CisgICAgICAgIHRvIGl0LiAgV2UgdGhlbiB0cnkgdG8gbWF0Y2ggdGhhdCBzdHJpbmcgYWdhaW5zdCB0aGUKKyAgICAgICAgd2hpdGVsaXN0LiAgVGhpcyBjb3ZlcnMgdGhlIG5vcm1hbCBjYXNlLCB3aGVyZSB3ZSBleHBlY3QKKyAgICAgICAgTElDRU5TRV9GTEFHUyB0byBiZSBhIHNpbXBsZSBzdHJpbmcgbGlrZSAnY29tbWVyY2lhbCcsIHdoaWNoCisgICAgICAgIHRoZSB1c2VyIHR5cGljYWxseSBtYXRjaGVzIGV4YWN0bHkgaW4gdGhlIHdoaXRlbGlzdCBieQorICAgICAgICBleHBsaWNpdGx5IGFwcGVuZGluZyB0aGUgcGFja2FnZSBuYW1lIGUuZyAnY29tbWVyY2lhbF9mb28nLgorICAgICAgICBJZiB3ZSBmYWlsIHRoZSBtYXRjaCBob3dldmVyLCB3ZSB0aGVuIHNwbGl0IHRoZSBmbGFnIGFjcm9zcworICAgICAgICAnXycgYW5kIGFwcGVuZCBlYWNoIGZyYWdtZW50IGFuZCB0ZXN0IHVudGlsIHdlIGVpdGhlciBtYXRjaCBvcgorICAgICAgICBydW4gb3V0IG9mIGZyYWdtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIGZsYWdfcG4gPSAoIiVzXyVzIiAlIChmbGFnLCBwbikpCisgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgaWYgZmxhZ19wbiA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZmxhZ19jdXIgPSAiIgorICAgICAgICBmbGFnbWVudHMgPSBmbGFnX3BuLnNwbGl0KCJfIikKKyAgICAgICAgZmxhZ21lbnRzLnBvcCgpICMgd2UndmUgYWxyZWFkeSB0ZXN0ZWQgdGhlIGZ1bGwgc3RyaW5nCisgICAgICAgIGZvciBmbGFnbWVudCBpbiBmbGFnbWVudHM6CisgICAgICAgICAgICBpZiBmbGFnX2N1cjoKKyAgICAgICAgICAgICAgICBmbGFnX2N1ciArPSAiXyIKKyAgICAgICAgICAgIGZsYWdfY3VyICs9IGZsYWdtZW50CisgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIHdoaXRlbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmbGFnX2N1ciA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFsbF9saWNlbnNlX2ZsYWdzX21hdGNoKGxpY2Vuc2VfZmxhZ3MsIHdoaXRlbGlzdCk6CisgICAgICAgICIiIiBSZXR1cm4gZmlyc3QgdW5tYXRjaGVkIGZsYWcsIE5vbmUgaWYgYWxsIGZsYWdzIG1hdGNoICIiIgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHNwbGl0X3doaXRlbGlzdCA9IHdoaXRlbGlzdC5zcGxpdCgpCisgICAgICAgIGZvciBmbGFnIGluIGxpY2Vuc2VfZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaWNlbnNlX2ZsYWdfbWF0Y2hlcyhmbGFnLCBzcGxpdF93aGl0ZWxpc3QsIHBuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxhZworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgbGljZW5zZV9mbGFncyA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZMQUdTJywgVHJ1ZSkKKyAgICBpZiBsaWNlbnNlX2ZsYWdzOgorICAgICAgICB3aGl0ZWxpc3QgPSBkLmdldFZhcignTElDRU5TRV9GTEFHU19XSElURUxJU1QnLCBUcnVlKQorICAgICAgICBpZiBub3Qgd2hpdGVsaXN0OgorICAgICAgICAgICAgcmV0dXJuIGxpY2Vuc2VfZmxhZ3MKKyAgICAgICAgdW5tYXRjaGVkX2ZsYWcgPSBhbGxfbGljZW5zZV9mbGFnc19tYXRjaChsaWNlbnNlX2ZsYWdzLCB3aGl0ZWxpc3QpCisgICAgICAgIGlmIHVubWF0Y2hlZF9mbGFnOgorICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZF9mbGFnCisgICAgcmV0dXJuIE5vbmUKKworZGVmIGNoZWNrX2xpY2Vuc2VfZm9ybWF0KGQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIExJQ0VOU0UgaXMgd2VsbCBkZWZpbmVkLAorICAgICAgICBWYWxpZGF0ZSBvcGVyYXRvcnMgaW4gTElDRU5TRVMuCisgICAgICAgIE5vIHNwYWNlcyBhcmUgYWxsb3dlZCBiZXR3ZWVuIExJQ0VOU0VTLgorICAgICIiIgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsaWNlbnNlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBmcm9tIG9lLmxpY2Vuc2UgaW1wb3J0IGxpY2Vuc2Vfb3BlcmF0b3IsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMsIGxpY2Vuc2VfcGF0dGVybgorCisgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlcykpCisgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgorICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICBpZiBwb3MgPiAwIGFuZCBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudHNbcG9zIC0gMV0pOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBMSUNFTlNFIHZhbHVlICIlcyIgaGFzIGFuIGludmFsaWQgZm9ybWF0IC0gbGljZW5zZSBuYW1lcyAnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHNlcGFyYXRlZCBieSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgdG8gaW5kaWNhdGUgJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGxpY2Vuc2Ugc2VsZWN0aW9uOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBuLCBsaWNlbnNlcywgbGljZW5zZV9vcGVyYXRvcl9jaGFycykpCisgICAgICAgIGVsaWYgbm90IGxpY2Vuc2Vfb3BlcmF0b3IubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICBiYi53YXJuKCclczogTElDRU5TRSB2YWx1ZSAiJXMiIGhhcyBhbiBpbnZhbGlkIHNlcGFyYXRvciAiJXMiIHRoYXQgaXMgbm90ICcgXAorICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHZhbGlkIGxpc3Qgb2Ygc2VwYXJhdG9ycyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgIChwbiwgbGljZW5zZXMsIGVsZW1lbnQsIGxpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMpKQorCitTU1RBVEVUQVNLUyArPSAiZG9fcG9wdWxhdGVfbGljIgorZG9fcG9wdWxhdGVfbGljW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKK2RvX3BvcHVsYXRlX2xpY1tzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtMSUNFTlNFX0RJUkVDVE9SWX0vIgorCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORF9wcmVwZW5kID0gIndyaXRlX3BhY2thZ2VfbWFuaWZlc3Q7IGxpY2Vuc2VfY3JlYXRlX21hbmlmZXN0OyAiCisKK2RvX3BvcHVsYXRlX2xpY19zZXRzY2VuZVtkaXJzXSA9ICIke0xJQ1NTVEFURURJUn0vJHtQTn0iCitkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmVbY2xlYW5kaXJzXSA9ICIke0xJQ1NTVEFURURJUn0iCitweXRob24gZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Y2U3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDQxIEBACisjIHBhcnNlIGtlcm5lbCBBQkkgdmVyc2lvbiBvdXQgb2YgPGxpbnV4L3ZlcnNpb24uaD4KK2RlZiBnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKHApOgorICAgIGltcG9ydCByZQorCisgICAgZm4gPSBwICsgJy9pbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCcKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAjIGFmdGVyIDIuNi4zMy1yYzEKKyAgICAgICAgZm4gPSBwICsgJy9pbmNsdWRlL2dlbmVyYXRlZC91dHNyZWxlYXNlLmgnCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgZm4gPSBwICsgJy9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCcKKworICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oZm4sICdyJykKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGwgPSBmLnJlYWRsaW5lcygpCisgICAgZi5jbG9zZSgpCisgICAgciA9IHJlLmNvbXBpbGUoIiNkZWZpbmUgVVRTX1JFTEVBU0UgXCIoLiopXCIiKQorICAgIGZvciBzIGluIGw6CisgICAgICAgIG0gPSByLm1hdGNoKHMpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKworZGVmIGdldF9rZXJuZWx2ZXJzaW9uX2ZpbGUocCk6CisgICAgZm4gPSBwICsgJy9rZXJuZWwtYWJpdmVyc2lvbicKKworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi5yZWFkbGluZXMoKVswXS5zdHJpcCgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBsaW51eF9tb2R1bGVfcGFja2FnZXMocywgZCk6CisJc3VmZml4ID0gIiIKKwlyZXR1cm4gIiAiLmpvaW4obWFwKGxhbWJkYSBzOiAia2VybmVsLW1vZHVsZS0lcyVzIiAlIChzLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykucmVwbGFjZSgnQCcsICcrJyksIHN1ZmZpeCksIHMuc3BsaXQoKSkpCisKKyMgdGhhdCdzIGFsbAorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xvZ2dpbmcuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM3YzMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2xvZ2dpbmcuYmJjbGFzcwpAQCAtMCwwICsxLDEwMSBAQAorIyBUaGUgZm9sbG93aW5nIGxvZ2dpbmcgbWVjaGFuaXNtcyBhcmUgdG8gYmUgdXNlZCBpbiBiYXNoIGZ1bmN0aW9ucyBvZiByZWNpcGVzLgorIyBUaGV5IGFyZSBpbnRlbmRlZCB0byBtYXAgb25lIHRvIG9uZSBpbiBpbnRlbnRpb24gYW5kIG91dHB1dCBmb3JtYXQgd2l0aCB0aGUKKyMgcHl0aG9uIHJlY2lwZSBsb2dnaW5nIGZ1bmN0aW9ucyBvZiBhIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb246IGJiLnBsYWluKCksCisjIGJiLm5vdGUoKSwgZXRjLgorCitMT0dGSUZPID0gIiR7VH0vZmlmby4ke0Bvcy5nZXRwaWQoKX0iCisKKyMgUHJpbnQgdGhlIG91dHB1dCBleGFjdGx5IGFzIGl0IGlzIHBhc3NlZCBpbi4gVHlwaWNhbGx5IHVzZWQgZm9yIG91dHB1dCBvZgorIyB0YXNrcyB0aGF0IHNob3VsZCBiZSBzZWVuIG9uIHRoZSBjb25zb2xlLiBVc2Ugc3BhcmluZ2x5LgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJwbGFpbigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJwbGFpbiAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICIkKiIKKwlmaQorfQorCisjIE5vdGlmeSB0aGUgdXNlciBvZiBhIG5vdGV3b3J0aHkgY29uZGl0aW9uLiAKKyMgT3V0cHV0OiBsb2dzCitiYm5vdGUoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJibm90ZSAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJOT1RFOiAkKiIKKwlmaQorfQorCisjIFByaW50IGEgd2FybmluZyB0byB0aGUgbG9nLiBXYXJuaW5ncyBhcmUgbm9uLWZhdGFsLCBhbmQgZG8gbm90CisjIGluZGljYXRlIGEgYnVpbGQgZmFpbHVyZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2Jid2FybigpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJ3YXJuICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIldBUk5JTkc6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYW4gZXJyb3IgdG8gdGhlIGxvZy4gRXJyb3JzIGFyZSBub24tZmF0YWwgaW4gdGhhdCB0aGUgYnVpbGQgY2FuCisjIGNvbnRpbnVlLCBidXQgdGhleSBkbyBpbmRpY2F0ZSBhIGJ1aWxkIGZhaWx1cmUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYmVycm9yKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmVycm9yICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorfQorCisjIFByaW50IGEgZmF0YWwgZXJyb3IgdG8gdGhlIGxvZy4gRmF0YWwgZXJyb3JzIGluZGljYXRlIGJ1aWxkIGZhaWx1cmUKKyMgYW5kIGhhbHQgdGhlIGJ1aWxkLCBleGl0aW5nIHdpdGggYW4gZXJyb3IgY29kZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JiZmF0YWwoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZmF0YWwgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCisJZXhpdCAxCit9CisKKyMgTGlrZSBiYmZhdGFsLCBleGNlcHQgcHJldmVudHMgdGhlIHN1cHByZXNzaW9uIG9mIHRoZSBlcnJvciBsb2cgYnkKKyMgYml0YmFrZSdzIFVJLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJmYXRhbF9sb2coKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZmF0YWxfbG9nICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkVSUk9SOiAkKiIKKwlmaQorCWV4aXQgMQorfQorCisjIFByaW50IGRlYnVnIG1lc3NhZ2VzLiBUaGVzZSBhcmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyZXNzIGNoZWNrcG9pbnQKKyMgbWVzc2FnZXMgdG8gdGhlIGxvZ3MuIERlcGVuZGluZyBvbiB0aGUgZGVidWcgbG9nIGxldmVsLCB0aGV5IG1heSBhbHNvCisjIGdvIHRvIHRoZSBjb25zb2xlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorIyBVc2FnZTogYmJkZWJ1ZyAxICJmaXJzdCBsZXZlbCBkZWJ1ZyBtZXNzYWdlIgorIyAgICAgICAgYmJkZWJ1ZyAyICJzZWNvbmQgbGV2ZWwgZGVidWcgbWVzc2FnZSIKK2JiZGVidWcoKSB7CisJVVNBR0U9J1VzYWdlOiBiYmRlYnVnIFsxMjNdICJtZXNzYWdlIicKKwlpZiBbICQjIC1sdCAyIF07IHRoZW4KKwkJYmJmYXRhbCAiJFVTQUdFIgorCWZpCisJCisJIyBTdHJpcCBvZmYgdGhlIGRlYnVnIGxldmVsIGFuZCBlbnN1cmUgaXQgaXMgYW4gaW50ZWdlcgorCURCR0xWTD0kMTsgc2hpZnQKKwlOT05ESUdJVFM9JChlY2hvICIkREJHTFZMIiB8IHRyIC1kIFs6ZGlnaXQ6XSkKKwlpZiBbICIkTk9ORElHSVRTIiBdOyB0aGVuCisJCWJiZmF0YWwgIiRVU0FHRSIKKwlmaQorCisJIyBBbGwgZGVidWcgb3V0cHV0IGlzIHByaW50ZWQgdG8gdGhlIGxvZ3MKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJkZWJ1ZyAkREJHTFZMICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIkRFQlVHOiAkKiIKKwlmaQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL21ldGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTY4OTAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21ldGEuYmJjbGFzcwpAQCAtMCwwICsxLDQgQEAKKworUEFDS0FHRVMgPSAiIgorCitkb19idWlsZFtyZWNyZGVwdGFza10gPSAiZG9fYnVpbGQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbWV0YWRhdGFfc2NtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbWV0YWRhdGFfc2NtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3ZTYxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcwpAQCAtMCwwICsxLDgyIEBACitNRVRBREFUQV9CUkFOQ0ggPz0gIiR7QGJhc2VfZGV0ZWN0X2JyYW5jaChkKX0iCitNRVRBREFUQV9SRVZJU0lPTiA/PSAiJHtAYmFzZV9kZXRlY3RfcmV2aXNpb24oZCl9IgorCitkZWYgYmFzZV9kZXRlY3RfcmV2aXNpb24oZCk6CisgICAgcGF0aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCisKKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbiwgXAorICAgICAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfc3ZuX3JldmlzaW9uXQorCisgICAgZm9yIHNjbSBpbiBzY21zOgorICAgICAgICByZXYgPSBzY20ocGF0aCwgZCkKKyAgICAgICAgaWYgcmV2ICE9ICI8dW5rbm93bj4iOgorICAgICAgICAgICAgcmV0dXJuIHJldgorCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2RldGVjdF9icmFuY2goZCk6CisgICAgcGF0aCA9IGJhc2VfZ2V0X3NjbWJhc2VwYXRoKGQpCisKKyAgICBzY21zID0gW2Jhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2hdCisKKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHJldiA9IHNjbShwYXRoLCBkKQorICAgICAgICBpZiByZXYgIT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICByZXR1cm4gcmV2LnN0cmlwKCkKKworICAgIHJldHVybiAiPHVua25vd24+IgorCitkZWYgYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCAnQ09SRUJBU0UnLCBUcnVlKQorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfYnJhbmNoKHBhdGgsIGQpOgorICAgIG1vbm90b25lX2JyYW5jaCA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzL19NVE4vb3B0aW9ucyIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbW9ub3RvbmVfYnJhbmNoLnN0YXJ0c3dpdGgoICJkYXRhYmFzZSIgKToKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9icmFuY2hfd29yZHMgPSBtb25vdG9uZV9icmFuY2guc3BsaXQoKQorICAgICAgICAgICAgICAgIG1vbm90b25lX2JyYW5jaCA9IG1vbm90b25lX2JyYW5jaF93b3Jkc1sgbW9ub3RvbmVfYnJhbmNoX3dvcmRzLmluZGV4KCAiYnJhbmNoIiApKzFdWzE6LTFdCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vbm90b25lX2JyYW5jaAorCitkZWYgYmFzZV9nZXRfbWV0YWRhdGFfbW9ub3RvbmVfcmV2aXNpb24ocGF0aCwgZCk6CisgICAgbW9ub3RvbmVfcmV2aXNpb24gPSAiPHVua25vd24+IgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9fTVROL3JldmlzaW9uIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG1vbm90b25lX3JldmlzaW9uLnN0YXJ0c3dpdGgoICJmb3JtYXRfdmVyc2lvbiIgKToKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbl93b3JkcyA9IG1vbm90b25lX3JldmlzaW9uLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBtb25vdG9uZV9yZXZpc2lvbiA9IG1vbm90b25lX3JldmlzaW9uX3dvcmRzWyBtb25vdG9uZV9yZXZpc2lvbl93b3Jkcy5pbmRleCggIm9sZF9yZXZpc2lvbiIgKSsxXVsxOi0xXQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vbm90b25lX3JldmlzaW9uCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb24ocGF0aCwgZCk6CisgICAgIyBUaGlzIG9ubHkgd29ya3Mgd2l0aCBvbGRlciBzdWJ2ZXJzaW9uLiBGb3IgbmV3ZXIgdmVyc2lvbnMgCisgICAgIyB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSBmaXhlZCBieSBzb21lb25lIGludGVyZXN0ZWQKKyAgICByZXZpc2lvbiA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzLy5zdm4vZW50cmllcyIgJSBwYXRoKSBhcyBmOgorICAgICAgICAgICAgcmV2aXNpb24gPSBmLnJlYWRsaW5lcygpWzNdLnN0cmlwKCkKKyAgICBleGNlcHQgKElPRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIHJldmlzaW9uCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfYnJhbmNoKHBhdGgsIGQpOgorICAgIGJyYW5jaCA9IG9zLnBvcGVuKCdjZCAlczsgZ2l0IGJyYW5jaCAyPiYxIHwgZ3JlcCAiXiogIiB8IHRyIC1kICIqICInICUgcGF0aCkucmVhZCgpCisKKyAgICBpZiBsZW4oYnJhbmNoKSAhPSAwOgorICAgICAgICByZXR1cm4gYnJhbmNoCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9naXRfcmV2aXNpb24ocGF0aCwgZCk6CisgICAgZiA9IG9zLnBvcGVuKCJjZCAlczsgZ2l0IGxvZyAtbiAxIC0tcHJldHR5PW9uZWxpbmUgLS0gMj4mMSIgJSBwYXRoKQorICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIGlmIGYuY2xvc2UoKSBpcyBOb25lOiAgICAgICAgCisgICAgICAgIHJldiA9IGRhdGEuc3BsaXQoIiAiKVswXQorICAgICAgICBpZiBsZW4ocmV2KSAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHJldgorICAgIHJldHVybiAiPHVua25vd24+IgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbWlncmF0ZV9sb2NhbGNvdW50LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbWlncmF0ZV9sb2NhbGNvdW50LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwZGY4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcwpAQCAtMCwwICsxLDQ2IEBACitQUlNFUlZfRFVNUERJUiA/Pz0gIiR7TE9HX0RJUn0vZGIiCitMT0NBTENPVU5UX0RVTVBGSUxFID8/PSAiJHtQUlNFUlZfRFVNUERJUn0vcHJzZXJ2LWxvY2FsY291bnQtZXhwb3J0cy5pbmMiCisKK3B5dGhvbiBtaWdyYXRlX2xvY2FsY291bnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBwdiA9IGUuZGF0YS5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpZiBub3QgJ0FVVE9JTkMnIGluIHB2OgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsY291bnRzID0gYmIucGVyc2lzdF9kYXRhLnBlcnNpc3QoJ0JCX1VSSV9MT0NBTENPVU5UJywgZS5kYXRhKQorICAgIHBuID0gZS5kYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgIHJldnMgPSBsb2NhbGNvdW50cy5nZXRfYnlfcGF0dGVybignJSUtJXNfcmV2JyAlIHBuKQorICAgIGNvdW50cyA9IGxvY2FsY291bnRzLmdldF9ieV9wYXR0ZXJuKCclJS0lc19jb3VudCcgJSBwbikKKyAgICBpZiBub3QgcmV2cyBvciBub3QgY291bnRzOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGxlbihyZXZzKSAhPSBsZW4oY291bnRzKToKKyAgICAgICAgYmIud2FybigiVGhlIG51bWJlciBvZiByZXZzIGFuZCBsb2NhbGNvdW50cyBkb24ndCBtYXRjaCBpbiAlcyIgJSBwbikKKyAgICAgICAgcmV0dXJuCisKKyAgICB2ZXJzaW9uID0gZS5kYXRhLmdldFZhcignUFJBVVRPSU5YJywgVHJ1ZSkKKyAgICBzcmNyZXYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihlLmRhdGEpCisgICAgYmFzZV92ZXIgPSAnQVVUT0lOQy0lcycgJSB2ZXJzaW9uWzp2ZXJzaW9uLmZpbmQoc3JjcmV2KV0KKyAgICBwa2dhcmNoID0gZS5kYXRhLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKyAgICB2YWx1ZSA9IG1heChpbnQoY291bnQpIGZvciBjb3VudCBpbiBjb3VudHMpCisKKyAgICBpZiBsZW4ocmV2cykgPT0gMToKKyAgICAgICAgaWYgc3JjcmV2ICE9ICgnQVVUT0lOQyslcycgJSByZXZzWzBdKToKKyAgICAgICAgICAgIHZhbHVlICs9IDEKKyAgICBlbHNlOgorICAgICAgICB2YWx1ZSArPSAxCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZS5kYXRhLmdldFZhcignUFJTRVJWX0RVTVBESVInLCBUcnVlKSkKKyAgICBkZiA9IGUuZGF0YS5nZXRWYXIoJ0xPQ0FMQ09VTlRfRFVNUEZJTEUnLCBUcnVlKQorICAgIGZsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgZGYpCisgICAgd2l0aCBvcGVuKGRmLCAnYScpIGFzIGZkOgorICAgICAgICBmZC53cml0ZSgnUFJBVVRPJCVzJCVzJCVzID0gIiVzIlxuJyAlCisgICAgICAgICAgICAgICAgKGJhc2VfdmVyLCBwa2dhcmNoLCBzcmNyZXYsIHN0cih2YWx1ZSkpKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoZmxvY2spCit9CisKK2FkZGhhbmRsZXIgbWlncmF0ZV9sb2NhbGNvdW50X2hhbmRsZXIKK21pZ3JhdGVfbG9jYWxjb3VudF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUGFyc2VkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9taW1lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxYzczZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9taW1lLmJiY2xhc3MKQEAgLTAsMCArMSw1NiBAQAorREVQRU5EUyArPSAic2hhcmVkLW1pbWUtaW5mby1uYXRpdmUgc2hhcmVkLW1pbWUtaW5mbyIKKworbWltZV9wb3N0aW5zdCgpIHsKK2lmIFsgIiQxIiA9IGNvbmZpZ3VyZSBdOyB0aGVuCisJVVBEQVRFTUlNRURCPWB3aGljaCB1cGRhdGUtbWltZS1kYXRhYmFzZWAKKwlpZiBbIC14ICIkVVBEQVRFTUlNRURCIiBdIDsgdGhlbgorCQllY2hvICJVcGRhdGluZyBNSU1FIGRhdGFiYXNlLi4uIHRoaXMgbWF5IHRha2UgYSB3aGlsZS4iCisJCSRVUERBVEVNSU1FREIgJEQke2RhdGFkaXJ9L21pbWUKKwllbHNlCisJCWVjaG8gIk1pc3NpbmcgdXBkYXRlLW1pbWUtZGF0YWJhc2UsIHVwZGF0ZSBvZiBtaW1lIGRhdGFiYXNlIGZhaWxlZCEiCisJCWV4aXQgMQorCWZpCitmaQorfQorCittaW1lX3Bvc3RybSgpIHsKK2lmIFsgIiQxIiA9IHJlbW92ZSBdIHx8IFsgIiQxIiA9IHVwZ3JhZGUgXTsgdGhlbgorCVVQREFURU1JTUVEQj1gd2hpY2ggdXBkYXRlLW1pbWUtZGF0YWJhc2VgCisJaWYgWyAteCAiJFVQREFURU1JTUVEQiIgXSA7IHRoZW4KKwkJZWNobyAiVXBkYXRpbmcgTUlNRSBkYXRhYmFzZS4uLiB0aGlzIG1heSB0YWtlIGEgd2hpbGUuIgorCQkkVVBEQVRFTUlNRURCICREJHtkYXRhZGlyfS9taW1lCisJZWxzZQorCQllY2hvICJNaXNzaW5nIHVwZGF0ZS1taW1lLWRhdGFiYXNlLCB1cGRhdGUgb2YgbWltZSBkYXRhYmFzZSBmYWlsZWQhIgorCQlleGl0IDEKKwlmaQorZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtnZGVzdCA9ICBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBtaW1lX2RpciA9ICclcy8lcy91c3Ivc2hhcmUvbWltZS9wYWNrYWdlcycgJSAocGtnZGVzdCwgcGtnKQorICAgICAgICBtaW1lcyA9IFtdCisgICAgICAgIG1pbWVfcmUgPSByZS5jb21waWxlKCIuKlwueG1sJCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG1pbWVfZGlyKToKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIobWltZV9kaXIpOgorICAgICAgICAgICAgICAgIGlmIG1pbWVfcmUubWF0Y2goZik6CisgICAgICAgICAgICAgICAgICAgIG1pbWVzLmFwcGVuZChmKQorICAgICAgICBpZiBtaW1lczoKKyAgICAgICAgICAgIGJiLm5vdGUoImFkZGluZyBtaW1lIHBvc3RpbnN0IGFuZCBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisgICAgICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdGluc3QgKz0gZC5nZXRWYXIoJ21pbWVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ21pbWVfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIHNoYXJlZC1taW1lLWluZm8tZGF0YSBkZXBlbmRlbmN5IHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAiIHNoYXJlZC1taW1lLWluZm8tZGF0YSIpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL21pcnJvcnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTZjMDcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21pcnJvcnMuYmJjbGFzcwpAQCAtMCwwICsxLDY3IEBACitNSVJST1JTICs9ICJcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAxMjAzMjhUMDkyNzUyWi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAxMTAxMjdUMDg0MjU3Wi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLWFyY2hpdmUvMjAwOTA4MDJUMDA0MTUzWi9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmF1LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuY2wuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5oci5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmZpLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaGsuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5odS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmllLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaXQuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5qcC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLm5vLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAucGwuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5yby5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnNpLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuZXMuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5zZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnRyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtHTlVfTUlSUk9SfQlmdHA6Ly9taXJyb3JzLmtlcm5lbC5vcmcvZ251IFxuIFwKKyR7S0VSTkVMT1JHX01JUlJPUn0JaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1YiBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGZ0cDovL2Z0cC5mcmFua2VuLmRlL3B1Yi9jcnlwdC9taXJyb3IvZnRwLmdudXBnLm9yZy9nY3J5cHQvIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLnN1cmZuZXQubmwvcHViL3NlY3VyaXR5L2dudXBnLyBcbiBcCitmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC8gICAgIGh0dHA6Ly9ndWx1cy5VU2hlcmJyb29rZS5jYS9wdWIvYXBwbC9HbnVQRy8gXG4gXAorZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS90ZXgvQ1RBTiBcbiBcCitmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBodHRwOi8vc3Vuc2l0ZS5zdXQuYWMuanAvcHViL2FyY2hpdmVzL2N0YW4vIFxuIFwKK2Z0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9jdGFuLnVuc3cuZWR1LmF1LyBcbiBcCitmdHA6Ly9mdHAuZ251dGxzLm9yZy9nY3J5cHQvZ251dGxzIGZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dudXRscy8gXG4gXAoraHR0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjLyBodHRwOi8vbWlycm9yLnN3aXRjaC5jaC9mdHAvbWlycm9yL2luZm96aXAvc3JjLyBcbiBcCitodHRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvIGZ0cDovL3N1bnNpdGUuaWNtLmVkdS5wbC9wdWIvdW5peC9hcmNoaXZpbmcvaW5mby16aXAvc3JjLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcmlhcy5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L3N5c3V0aWxzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudGF1LmFjLmlsL3B1Yi91bml4L2FkbWluLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmNlcnQuZGZuLmRlL3B1Yi90b29scy9hZG1pbi9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmZ1LWJlcmxpbi5kZS9wdWIvdW5peC90b29scy9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLmthaXpvLm9yZy9wdWIvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dS1kYXJtc3RhZHQuZGUvcHViL3N5c2FkbWluL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvc2l0ZXMvdmljLmNjLnB1cmR1ZS5lZHUvdG9vbHMvdW5peC9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZ2QudHV3aWVuLmFjLmF0L3V0aWxzL2FkbWluLXRvb2xzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9zdW5zaXRlLnVhbGJlcnRhLmNhL3B1Yi9NaXJyb3IvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3RoZS53aXJldGFwcGVkLm5ldC9wdWIvc2VjdXJpdHkvaG9zdC1zZWN1cml0eS9sc29mLyBcbiBcCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCAgaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0IFxuIFwKK2h0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3dhdGNoZG9nLyBodHRwOi8vZm9zc2llcy5vcmcvbGludXgvbWlzYy8gXG4gXAorJHtTQVZBTk5BSF9HTlVfTUlSUk9SfSBodHRwOi8vZG93bmxvYWQtbWlycm9yLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMgXG4gXAorJHtTQVZBTk5BSF9OT05HTlVfTUlSUk9SfSBodHRwOi8vZG93bmxvYWQtbWlycm9yLnNhdmFubmFoLm5vbmdudS5vcmcvcmVsZWFzZXMgXG4gXAorY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZ2l0Oi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorYnpyOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorcDQ6Ly8uKi8uKiAgICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorb3NjOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAoraHR0cHM/JDovLy4qLy4qIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorZnRwOi8vLiovLiogICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9taXJyb3Ivc291cmNlcy8gXG4gXAorY3ZzOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK3N2bjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitnaXQ6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAoraGc6Ly8uKi8uKiAgICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2J6cjovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitwNDovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorb3NjOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2h0dHBzPyQ6Ly8uKi8uKiBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitmdHA6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorJHtDUEFOX01JUlJPUn0gIGh0dHA6Ly9jcGFuLm1ldGFjcGFuLm9yZy8gXG4gXAorJHtDUEFOX01JUlJPUn0gIGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi8gXG4gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmUyNmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21vZHVsZS1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyNyBAQAoraW5oZXJpdCBrZXJuZWwtYXJjaAorCisjIFRoaXMgaXMgaW5zdGVhZCBvZiBERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworZXhwb3J0IE9TID0gIiR7VEFSR0VUX09TfSIKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCisKKyMgVGhpcyBwb2ludHMgdG8gdGhlIGJ1aWxkIGFydGVmYWN0cyBmcm9tIHRoZSBtYWluIGtlcm5lbCBidWlsZAorIyBzdWNoIGFzIC5jb25maWcgYW5kIFN5c3RlbS5tYXAKKyMgQ29uZnVzaW5nbHkgaXQgaXMgbm90IHRoZSBtb2R1bGUgYnVpbGQgb3V0cHV0ICh3aGljaCBpcyAke0J9KSBidXQKKyMgd2UgZGlkbid0IHBpY2sgdGhlIG5hbWUuCitleHBvcnQgS0JVSUxEX09VVFBVVCA9ICIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKKworZXhwb3J0IEtFUk5FTF9WRVJTSU9OID0gIiR7QGJhc2VfcmVhZF9maWxlKCcke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfS9rZXJuZWwtYWJpdmVyc2lvbicpfSIKK0tFUk5FTF9PQkpFQ1RfU1VGRklYID0gIi5rbyIKKworIyBrZXJuZWwgbW9kdWxlcyBhcmUgZ2VuZXJhbGx5IG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgRnVuY3Rpb24gdG8gZW5zdXJlIHRoZSBrZXJuZWwgc2NyaXB0cyBhcmUgY3JlYXRlZC4gRXhwZWN0ZWQgdG8KKyMgYmUgY2FsbGVkIGJlZm9yZSBkb19jb21waWxlLiBTZWUgbW9kdWxlLmJiY2xhc3MgZm9yIGFuIGV4bWFwbGUuCitkb19tYWtlX3NjcmlwdHMoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MgCisJbWFrZSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBBUj0iJHtLRVJORUxfQVJ9IiBcCisJICAgICAgICAgICAtQyAke1NUQUdJTkdfS0VSTkVMX0RJUn0gTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBzY3JpcHRzCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbW9kdWxlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1MmMwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpAQCAtMCwwICsxLDMyIEBACitpbmhlcml0IG1vZHVsZS1iYXNlIGtlcm5lbC1tb2R1bGUtc3BsaXQKKworYWRkdGFzayBtYWtlX3NjcmlwdHMgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbXBpbGUKK2RvX21ha2Vfc2NyaXB0c1tsb2NrZmlsZXNdID0gIiR7VE1QRElSfS9rZXJuZWwtc2NyaXB0cy5sb2NrIgorZG9fbWFrZV9zY3JpcHRzW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworRVhUUkFfT0VNQUtFICs9ICJLRVJORUxfU1JDPSR7U1RBR0lOR19LRVJORUxfRElSfSIKKworbW9kdWxlX2RvX2NvbXBpbGUoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIEtFUk5FTF9QQVRIPSR7U1RBR0lOR19LRVJORUxfRElSfSAgIFwKKwkJICAgS0VSTkVMX1ZFUlNJT049JHtLRVJORUxfVkVSU0lPTn0gICAgXAorCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCQkgICAke01BS0VfVEFSR0VUU30KK30KKworbW9kdWxlX2RvX2luc3RhbGwoKSB7CisJdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKwlvZV9ydW5tYWtlIERFUE1PRD1lY2hvIElOU1RBTExfTU9EX1BBVEg9IiR7RH0iIFwKKwkgICAgICAgICAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkgICAgICAgICAgIE89JHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0gXAorCSAgICAgICAgICAgbW9kdWxlc19pbnN0YWxsCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29tcGlsZSBkb19pbnN0YWxsCisKKyMgYWRkIGFsbCBzcGxpdHRlZCBtb2R1bGVzIHRvIFBOIFJERVBFTkRTLCBQTiBjYW4gYmUgZW1wdHkgbm93CitLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYxZDhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL211bHRpbGliLmJiY2xhc3MKQEAgLTAsMCArMSwxNTEgQEAKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgY2xzID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRDVVJSIiwgVHJ1ZSkKKyAgICB2YXJpYW50ID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKyAgICBpZiBjbHMgIT0gIm11bHRpbGliIiBvciBub3QgdmFyaWFudDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBlLmRhdGEuc2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBlLmRhdGEuZ2V0VmFyKCdTVEFHSU5HX0tFUk5FTF9ESVInLCBUcnVlKSkKKworICAgICMgVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIGtlcm5lbCBpbiBtdWx0aWxpYiBjb25maWdzCisgICAgIyBXZSBhbHNvIHNraXAgbXVsdGlsaWIgc2V0dXAgZm9yIG1vZHVsZSBwYWNrYWdlcy4KKyAgICBwcm92aWRlcyA9IChlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgInZpcnR1YWwva2VybmVsIiBpbiBwcm92aWRlcyBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJXZSBzaG91bGRuJ3QgaGF2ZSBtdWx0aWxpYiB2YXJpYW50cyBmb3IgdGhlIGtlcm5lbCIpCisKKyAgICBzYXZlX3Zhcl9uYW1lPWUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1NBVkVfVkFSTkFNRSIsIFRydWUpIG9yICIiCisgICAgZm9yIG5hbWUgaW4gc2F2ZV92YXJfbmFtZS5zcGxpdCgpOgorICAgICAgICB2YWw9ZS5kYXRhLmdldFZhcihuYW1lLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKG5hbWUgKyAiX01VTFRJTElCX09SSUdJTkFMIiwgdmFsKQorCisgICAgb3ZlcnJpZGVzID0gZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIEZhbHNlKQorICAgIG92ZXJyaWRlcyA9IG92ZXJyaWRlcy5yZXBsYWNlKCJwbi0ke1BOfSIsICJwbi0ke1BOfTpwbi0iICsgcG4pCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBlLmRhdGEpOgorICAgICAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIHZhcmlhbnQgKyAiLSIpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgdmFyaWFudCArICItIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpKQorICAgICAgICB0YXJnZXRfdmVuZG9yID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUl8iICsgInZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudCwgRmFsc2UpCisgICAgICAgIGlmIHRhcmdldF92ZW5kb3I6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgdGFyZ2V0X3ZlbmRvcikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGUuZGF0YSk6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKKyAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudAorICAgICAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShlLmRhdGEpCisgICAgICAgIHJldHVybgorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIGNhbid0IGV4dGVuZCBuYXRpdmUgcmVjaXBlcyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBlLmRhdGEpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIGNhbid0IGV4dGVuZCBuYXRpdmVzZGsgcmVjaXBlcyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZS5kYXRhKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGUuZGF0YSk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJEb24ndCBleHRlbmQgYWxsYXJjaCByZWNpcGVzIHdoaWNoIGFyZSBub3QgcGFja2FnZWdyb3VwcyIpCisKKworICAgICMgRXhwYW5kIHRoaXMgc2luY2UgdGhpcyB3b24ndCB3b3JrIGNvcnJlY3RseSBvbmNlIHdlIHNldCBhIG11bHRpbGliIGludG8gcGxhY2UKKyAgICBlLmRhdGEuc2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIGUuZGF0YS5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisgCisgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudAorCisgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCB2YXJpYW50ICsgIi0iKQorICAgIGUuZGF0YS5zZXRWYXIoIlBOIiwgdmFyaWFudCArICItIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpKQorICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorCisgICAgIyBFeHBhbmQgdGhlIFdISVRFTElTVHMgd2l0aCBtdWx0aWxpYiBwcmVmaXgKKyAgICBmb3Igd2hpdGVsaXN0IGluIFsiSE9TVFRPT0xTX1dISVRFTElTVF9HUEwtMy4wIiwgIldISVRFTElTVF9HUEwtMy4wIiwgIkxHUEx2Ml9XSElURUxJU1RfR1BMLTMuMCJdOgorICAgICAgICBwa2dzID0gZS5kYXRhLmdldFZhcih3aGl0ZWxpc3QsIFRydWUpCisgICAgICAgIGZvciBwa2cgaW4gcGtncy5zcGxpdCgpOgorICAgICAgICAgICAgcGtncyArPSAiICIgKyB2YXJpYW50ICsgIi0iICsgcGtnCisgICAgICAgIGUuZGF0YS5zZXRWYXIod2hpdGVsaXN0LCBwa2dzKQorCisgICAgIyBERUZBVUxUVFVORSBjYW4gY2hhbmdlIFRBUkdFVF9BUkNIIG92ZXJyaWRlIHNvIGV4cGFuZCB0aGlzIG5vdyBiZWZvcmUgdXBkYXRlX2RhdGEKKyAgICBuZXd0dW5lID0gZS5kYXRhLmdldFZhcigiREVGQVVMVFRVTkVfIiArICJ2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHZhcmlhbnQsIEZhbHNlKQorICAgIGlmIG5ld3R1bmU6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgbmV3dHVuZSkKKyAgICAgICAgZS5kYXRhLnNldFZhcignREVGQVVMVFRVTkVfTUxfJXMnICUgdmFyaWFudCwgbmV3dHVuZSkKK30KKworYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcgorbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSIKKworU1RBR0lOR0NDX3ByZXBlbmQgPSAiJHtCQkVYVEVORFZBUklBTlR9LSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICB2YXJpYW50ID0gZC5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKworICAgIGNsc2V4dGVuZCA9IG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZCkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiUEFDS0FHRV9JTlNUQUxMIikKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJMSU5HVUFTX0lOU1RBTEwiKQorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJERVBFTkRTIikKKyAgICAgICAgcGluc3RhbGwgPSBkLmdldFZhcigiTElOR1VBU19JTlNUQUxMIiwgVHJ1ZSkgKyAiICIgKyBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfSU5TVEFMTCIsIHBpbnN0YWxsKQorICAgICAgICBkLnNldFZhcigiTElOR1VBU19JTlNUQUxMIiwgIiIpCisgICAgICAgICMgRklYTUUsIHdlIG5lZWQgdG8gbWFwIHRoaXMgdG8gc29tZXRoaW5nLCBub3QgZGVsZXRlIGl0IQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgIiIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwb3B1bGF0ZV9zZGtfYmFzZScsIGQpOgorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIpCisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2ltYWdlJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJERVBFTkRTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZXMoKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgY2xzZXh0ZW5kLm1hcF9wYWNrYWdldmFycygpCisgICAgY2xzZXh0ZW5kLm1hcF9yZWdleHBfdmFyaWFibGUoIlBBQ0tBR0VTX0RZTkFNSUMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBBQ0tBR0VfSU5TVEFMTCIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiSU5JVFNDUklQVF9QQUNLQUdFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiVVNFUkFERF9QQUNLQUdFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiU1lTVEVNRF9QQUNLQUdFUyIpCit9CisKK1BBQ0tBR0VGVU5DU19hcHBlbmQgPSAiIGRvX3BhY2thZ2VfcWFfbXVsdGlsaWIiCisKK3B5dGhvbiBkb19wYWNrYWdlX3FhX211bHRpbGliKCkgeworCisgICAgZGVmIGNoZWNrX21scHJlZml4KHBrZywgdmFyLCBtbHByZWZpeCk6CisgICAgICAgIHZhbHVlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkgb3IgZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikKKyAgICAgICAgY2FuZGlkYXRlcyA9IFtdCisgICAgICAgIGZvciBpIGluIHZhbHVlczoKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICBpID0gaVtsZW4oJ3ZpcnR1YWwvJyk6XQorICAgICAgICAgICAgaWYgKG5vdCBpLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUnKSkgYW5kIChub3QgaS5zdGFydHN3aXRoKG1scHJlZml4KSkgYW5kIFwKKyAgICAgICAgICAgICAgICAobm90ICdjcm9zcy1jYW5hZGlhbicgaW4gaSkgYW5kIChub3QgaS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikpIGFuZCBcCisgICAgICAgICAgICAgICAgKG5vdCBpLnN0YXJ0c3dpdGgoInJ0bGQiKSkgYW5kIChub3QgaS5zdGFydHN3aXRoKCdrZXJuZWwtdm1saW51eCcpKToKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChpKQorICAgICAgICBpZiBsZW4oY2FuZGlkYXRlcykgPiAwOgorICAgICAgICAgICAgbXNnID0gIiVzIHBhY2thZ2UgJXMgLSBzdXNwaWNpb3VzIHZhbHVlcyAnJXMnIGluICVzIiBcCisgICAgICAgICAgICAgICAgICAgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgJyAnLmpvaW4oY2FuZGlkYXRlcyksIHZhcikKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJtdWx0aWxpYiIsIG1zZywgZCkKKworICAgIG1sID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKyAgICBpZiBub3QgbWw6CisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUkRFUEVORFMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlBST1ZJREVTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JSRUNPTU1FTkRTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JTVUdHRVNUUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSUkVQTEFDRVMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUkNPTkZMSUNUUycsIG1sKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL211bHRpbGliX2dsb2JhbC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL211bHRpbGliX2dsb2JhbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmNmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKQEAgLTAsMCArMSwxNjIgQEAKK2RlZiBwcmVmZXJyZWRfbWxfdXBkYXRlcyhkKToKKyAgICAjIElmIGFueSBQUkVGRVJSRURfUFJPVklERVIgb3IgUFJFRkVSUkVEX1ZFUlNJT04gYXJlIHNldCwKKyAgICAjIHdlIG5lZWQgdG8gbWlycm9yIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgbXVsdGlsaWIgY2FzZTsKKyAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiBub3QgbXVsdGlsaWJzOgorICAgICAgICByZXR1cm4KKworICAgIHByZWZpeGVzID0gW10KKyAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KCc6JykKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKGVleHRbMV0pCisKKyAgICB2ZXJzaW9ucyA9IFtdCisgICAgcHJvdmlkZXJzID0gW10KKyAgICBmb3IgdiBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJQUkVGRVJSRURfVkVSU0lPTl8iKToKKyAgICAgICAgICAgIHZlcnNpb25zLmFwcGVuZCh2KQorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9QUk9WSURFUl8iKToKKyAgICAgICAgICAgIHByb3ZpZGVycy5hcHBlbmQodikKKworICAgIGZvciB2IGluIHZlcnNpb25zOgorICAgICAgICB2YWwgPSBkLmdldFZhcih2LCBGYWxzZSkKKyAgICAgICAgcGtnID0gdi5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiIikKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zc3Nkay0iIGluIHBrZyBvciBwa2cuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgJy1jcm9zcy0nIGluIHBrZyBhbmQgJyR7JyBpbiBwa2c6CisgICAgICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBwCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgaWYgIi1jYW5hZGlhbi0iIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQodikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCh2KS5yZXBsYWNlKCJQUkVGRVJSRURfVkVSU0lPTl8iLCAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHAgKyAnLScpCisgICAgICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSB2OgorICAgICAgICAgICAgICAgICAgICBuZXd2YWwgPSBsb2NhbGRhdGEuZXhwYW5kKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbmV3dmFsKQorICAgICAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICAgICAgdmV4cCA9IGQuZXhwYW5kKHYpCisgICAgICAgICAgICBpZiB2ICE9IHZleHAgYW5kIGQuZ2V0VmFyKHYsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnJlbmFtZVZhcih2LCB2ZXhwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBuZXduYW1lID0gIlBSRUZFUlJFRF9WRVJTSU9OXyIgKyBwICsgIi0iICsgcGtnCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIHZhbCkKKworICAgIGZvciBwcm92IGluIHByb3ZpZGVyczoKKyAgICAgICAgdmFsID0gZC5nZXRWYXIocHJvdiwgRmFsc2UpCisgICAgICAgIHBrZyA9IHByb3YucmVwbGFjZSgiUFJFRkVSUkVEX1BST1ZJREVSXyIsICIiKQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3Nzc2RrLSIgaW4gcGtnIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAnY3Jvc3MtY2FuYWRpYW4nIGluIHBrZzoKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZChwcm92KQorICAgICAgICAgICAgICAgIGlmIG5ld25hbWUgIT0gcHJvdjoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsID0gbG9jYWxkYXRhLmV4cGFuZCh2YWwpCisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIG5ld3ZhbCkKKyAgICAgICAgICAgICMgQXZvaWQgZnV0dXJlIHZhcmlhYmxlIGtleSBleHBhbnNpb24KKyAgICAgICAgICAgIHByb3ZleHAgPSBkLmV4cGFuZChwcm92KQorICAgICAgICAgICAgaWYgcHJvdiAhPSBwcm92ZXhwIGFuZCBkLmdldFZhcihwcm92LCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5yZW5hbWVWYXIocHJvdiwgcHJvdmV4cCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZpcnQgPSAiIgorICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHBrZyA9IHBrZy5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQorICAgICAgICAgICAgdmlydCA9ICJ2aXJ0dWFsLyIKKyAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBpZiBwa2cgIT0gImtlcm5lbCI6CisgICAgICAgICAgICAgICAgbmV3dmFsID0gcCArICItIiArIHZhbAorCisgICAgICAgICAgICAjIGltcGxlbWVudCB2YXJpYWJsZSBrZXlzCisgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZChwcm92KQorICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSBwcm92IGFuZCBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIGxvY2FsZGF0YS5leHBhbmQobmV3dmFsKSkKKworICAgICAgICAgICAgIyBpbXBsZW1lbnQgYWx0ZXJuYXRpdmUgbXVsdGlsaWIgbmFtZQorICAgICAgICAgICAgbmV3bmFtZSA9IGxvY2FsZGF0YS5leHBhbmQoIlBSRUZFUlJFRF9QUk9WSURFUl8iICsgdmlydCArIHAgKyAiLSIgKyBwa2cpCisgICAgICAgICAgICBpZiBub3QgZC5nZXRWYXIobmV3bmFtZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKG5ld25hbWUsIGxvY2FsZGF0YS5leHBhbmQobmV3dmFsKSkKKyAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICBwcm92ZXhwID0gZC5leHBhbmQocHJvdikKKyAgICAgICAgaWYgcHJvdiAhPSBwcm92ZXhwIGFuZCBkLmdldFZhcihwcm92LCBGYWxzZSk6CisgICAgICAgICAgICBkLnJlbmFtZVZhcihwcm92LCBwcm92ZXhwKQorCisKKyAgICBtcCA9IChkLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBleHRyYW1wID0gW10KKyAgICBmb3IgcCBpbiBtcDoKKyAgICAgICAgaWYgcC5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3NzZGstIiBpbiBwIG9yIHAuc3RhcnRzd2l0aCgoIm5hdGl2ZXNkay0iLCAidmlydHVhbC9uYXRpdmVzZGstIikpIG9yICdjcm9zcy1jYW5hZGlhbicgaW4gcDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZpcnQgPSAiIgorICAgICAgICBpZiBwLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBwID0gcC5yZXBsYWNlKCJ2aXJ0dWFsLyIsICIiKQorICAgICAgICAgICAgdmlydCA9ICJ2aXJ0dWFsLyIKKyAgICAgICAgZm9yIHByZWYgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBleHRyYW1wLmFwcGVuZCh2aXJ0ICsgcHJlZiArICItIiArIHApCisgICAgZC5zZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsICIgIi5qb2luKG1wICsgZXh0cmFtcCkpCisKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3IgKCkgeworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQ29uZmlnUGFyc2VkKToKKyAgICAgICAgZm9yIHYgaW4gZS5kYXRhLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZS5kYXRhLmdldFZhcigiVEFSR0VUX1ZFTkRPUl92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHYsIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlRBUkdFVF9WRU5ET1JfdmlydGNsYXNzLW11bHRpbGliLSIgKyB2LCBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgRmFsc2UpICsgIm1sIiArIHYpCisgICAgICAgIHByZWZlcnJlZF9tbF91cGRhdGVzKGUuZGF0YSkKK30KK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfdmVuZG9yCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3JbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCisKK3B5dGhvbiBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWwgKCkgeworICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgdmFyaWFudCA9IGUuZGF0YS5nZXRWYXIoIkJCRVhURU5EVkFSSUFOVCIsIFRydWUpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCkgYW5kIG5vdCB2YXJpYW50OgorICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBlLmRhdGEpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZS5kYXRhKSBvciBcCisgICAgICAgICAgICAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGUuZGF0YSkgYW5kXAorICAgICAgICAgICAgIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBlLmRhdGEpKToKKyAgICAgICAgICAgIHZhcmlhbnRzID0gKGUuZGF0YS5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICAgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisgICAgICAgICAgICBjbHNleHRlbmRzID0gW10KKyAgICAgICAgICAgIGZvciB2YXJpYW50IGluIHZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGNsc2V4dGVuZHMuYXBwZW5kKG9lLmNsYXNzZXh0ZW5kLkNsYXNzRXh0ZW5kZXIodmFyaWFudCwgZS5kYXRhKSkKKworICAgICAgICAgICAgIyBQcm9jZXNzIFBST1ZJREVTCisgICAgICAgICAgICBvcmlncHJvdnMgPSBwcm92cyA9IGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICBwcm92cyA9IHByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJQUk9WSURFUyIsIHByb3ZzKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgUlBST1ZJREVTCisgICAgICAgICAgICBvcmlncnByb3ZzID0gcnByb3ZzID0gZS5kYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICBycHJvdnMgPSBycHJvdnMgKyAiICIgKyBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJSUFJPVklERVMiLCBzZXR2YXI9RmFsc2UpCisgICAgICAgICAgICBpZiBycHJvdnMuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJSUFJPVklERVMiLCBycHJvdnMpCisKKwkgICAgIyBQcm9jZXNzIFJQUk9WSURFU18ke1BOfS4uLgorICAgICAgICAgICAgZm9yIHBrZyBpbiAoZS5kYXRhLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBvcmlncnByb3ZzID0gcnByb3ZzID0gZS5kYXRhLmdldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgICAgICBmb3IgY2xzZXh0ZW5kIGluIGNsc2V4dGVuZHM6CisgICAgICAgICAgICAgICAgICAgIHJwcm92cyA9IHJwcm92cyArICIgIiArIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlJQUk9WSURFU18lcyIgJSBwa2csIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcnByb3ZzID0gcnByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLmV4dG5hbWUgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBycHJvdnMpCit9CisKK2FkZGhhbmRsZXIgbXVsdGlsaWJfdmlydGNsYXNzX2hhbmRsZXJfZ2xvYmFsCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWxbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSBiYi5ldmVudC5SZWNpcGVQYXJzZWQiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9oZWFkZXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9oZWFkZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUwYTJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCkBAIC0wLDAgKzEsNTQgQEAKK2luaGVyaXQgc2l0ZWluZm8KKworIyBJZiBhcHBsaWNhYmxlIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoaXMgcm91dGluZSB3aWxsIHJlbmFtZSB0aGUgaGVhZGVyIGFuZAorIyBhZGQgYSB1bmlxdWUgaWRlbnRpZmllciB0byB0aGUgbmFtZSBmb3IgdGhlIEFCSS9iaXRzaXplIHRoYXQgaXMgYmVpbmcgdXNlZC4KKyMgQSB3cmFwcGVyIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQga25vd3MgaG93IHRvIGNhbGwKKyMgYWxsIG9mIHRoZSBBQkkgdmFyaWFudHMgZm9yIHRoYXQgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorIworb2VfbXVsdGlsaWJfaGVhZGVyKCkgeworCisJY2FzZSAke0hPU1RfT1N9IGluCisJKi1tdXNsKikKKwkJcmV0dXJuCisJCTs7CisJKikKKwllc2FjCisgICAgICAgICMgV2UgdXNlCisgICAgICAgICMgRm9yIEFSTTogV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aWxpYiBidWlsZHMuCisgICAgICAgICMgRm9yIE1JUFM6ICJuMzIiIGlzIGEgc3BlY2lhbCBjYXNlLCB3aGljaCBuZWVkcyB0byBiZQorICAgICAgICAjIGRpc3RpbmN0IGZyb20gYm90aCA2NC1iaXQgYW5kIDMyLWJpdC4KKyAgICAgICAgY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorICAgICAgICBhcm0qKSAgIHJldHVybgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIG1pcHMqKSAgY2FzZSAiJHtNSVBTUEtHU0ZYX0FCSX0iIGluCisgICAgICAgICAgICAgICAgIi1uMzIiKQorICAgICAgICAgICAgICAgICAgICAgICBpZGVudD1uMzIgICAKKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGlkZW50PSR7U0lURUlORk9fQklUU30KKyAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgKikgICAgICBpZGVudD0ke1NJVEVJTkZPX0JJVFN9CisgICAgICAgIGVzYWMKKwlpZiBlY2hvICR7VEFSR0VUX0FSQ0h9IHwgZ3JlcCAtcSBhcm07IHRoZW4KKwkgICAgcmV0dXJuCisJZmkKKwlmb3IgZWFjaF9oZWFkZXIgaW4gIiRAIiA7IGRvCisJICAgaWYgWyAhIC1mICIke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyIiBdOyB0aGVuCisJICAgICAgYmJlcnJvciAib2VfbXVsdGlsaWJfaGVhZGVyOiBVbmFibGUgdG8gZmluZCBoZWFkZXIgJGVhY2hfaGVhZGVyLiIKKwkgICAgICBjb250aW51ZQorCSAgIGZpCisJICAgc3RlbT0kKGVjaG8gJGVhY2hfaGVhZGVyIHwgc2VkICdzI1wuaCQjIycpCisJICAgIyBpZiBtaXBzNjQvbjMyIHNldCBpZGVudCB0byBuMzIKKwkgICBtdiAke0R9LyR7aW5jbHVkZWRpcn0vJGVhY2hfaGVhZGVyICR7RH0vJHtpbmNsdWRlZGlyfS8ke3N0ZW19LSR7aWRlbnR9LmgKKworCSAgIHNlZCAtZSAicyNFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRSMke3N0ZW19I2ciICR7Q09SRUJBU0V9L3NjcmlwdHMvbXVsdGlsaWJfaGVhZGVyX3dyYXBwZXIuaCA+ICR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIKKwlkb25lCit9CisKKyMgRGVwZW5kZW5jaWVzIG9uIGFyY2ggdmFyaWFibGVzIGxpa2UgTUlQU1BLR1NGWF9BQkkgY2FuIGJlIHByb2JsZW1hdGljLgorIyBXZSBkb24ndCBuZWVkIG11bHRpbGliIGhlYWRlcnMgZm9yIG5hdGl2ZSBidWlsZHMgc28gYnJ1dGUgZm9yY2UgdGhpbmdzLgorb2VfbXVsdGlsaWJfaGVhZGVyX2NsYXNzLW5hdGl2ZSAoKSB7CisJcmV0dXJuCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiY2Q2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDE4MyBAQAorIyBXZSB3YW50IG5hdGl2ZSBwYWNrYWdlcyB0byBiZSByZWxvY2F0YWJsZQoraW5oZXJpdCByZWxvY2F0YWJsZQorCisjIE5hdGl2ZSBwYWNrYWdlcyBhcmUgYnVpbHQgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeSwKKyMgbm8gbmVlZCBmb3IgdGhlbSB0byBiZSBhIGRpcmVjdCB0YXJnZXQgb2YgJ3dvcmxkJworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorCisjIHVzZWQgYnkgY21ha2UgY2xhc3MKK09FQ01BS0VfUlBBVEggPSAiJHtsaWJkaXJ9IgorT0VDTUFLRV9SUEFUSF9jbGFzcy1uYXRpdmUgPSAiJHtsaWJkaXJ9IgorCisjIFdoZW4gdGhpcyBjbGFzcyBoYXMgcGFja2FnaW5nIGVuYWJsZWQsIHNldHRpbmcgCisjIFJQUk9WSURFUyBiZWNvbWVzIHVubmVjZXNzYXJ5LgorUlBST1ZJREVTID0gIiR7UE59IgorCitUQVJHRVRfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorVEFSR0VUX09TID0gIiR7QlVJTERfT1N9IgorVEFSR0VUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitUQVJHRVRfUFJFRklYID0gIiR7QlVJTERfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7QlVJTERfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKK1RBUkdFVF9DUFBGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSIKK1RBUkdFVF9DRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorVEFSR0VUX0NYWEZMQUdTID0gIiR7QlVJTERfQ1hYRkxBR1N9IgorVEFSR0VUX0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK1RBUkdFVF9GUFUgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK0hPU1RfT1MgPSAiJHtCVUlMRF9PU30iCitIT1NUX1ZFTkRPUiA9ICIke0JVSUxEX1ZFTkRPUn0iCitIT1NUX1BSRUZJWCA9ICIke0JVSUxEX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCisKK0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0xERkxBR1NfYnVpbGQtZGFyd2luID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9ICIKKworU1RBR0lOR19CSU5ESVIgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IgorU1RBR0lOR19CSU5ESVJfQ1JPU1MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IgorCisjIG5hdGl2ZSBwa2cgZG9lc24ndCBuZWVkIHRoZSBUT09MQ0hBSU5fT1BUSU9OUy4KK1RPT0xDSEFJTl9PUFRJT05TID0gIiIKKworREVQRU5EU19HRVRURVhUID0gImdldHRleHQtbmF0aXZlIgorCisjIERvbid0IGJ1aWxkIHB0ZXN0IG5hdGl2ZWx5CitQVEVTVF9FTkFCTEVEID0gIjAiCisKKyMgRG9uJ3QgdXNlIHNpdGUgZmlsZXMgZm9yIG5hdGl2ZSBidWlsZHMKK2V4cG9ydCBDT05GSUdfU0lURSA9ICIke0NPUkVCQVNFfS9tZXRhL3NpdGUvbmF0aXZlIgorCisjIHNldCB0aGUgY29tcGlsZXIgYXMgd2VsbC4gSXQgY291bGQgaGF2ZSBiZWVuIHNldCB0byBzb21ldGhpbmcgZWxzZQorZXhwb3J0IENDID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENYWCA9ICIke0JVSUxEX0NYWH0iCitleHBvcnQgRkMgPSAiJHtCVUlMRF9GQ30iCitleHBvcnQgQ1BQID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBMRCA9ICIke0JVSUxEX0xEfSIKK2V4cG9ydCBDQ0xEID0gIiR7QlVJTERfQ0NMRH0iCitleHBvcnQgQVIgPSAiJHtCVUlMRF9BUn0iCitleHBvcnQgQVMgPSAiJHtCVUlMRF9BU30iCitleHBvcnQgUkFOTElCID0gIiR7QlVJTERfUkFOTElCfSIKK2V4cG9ydCBTVFJJUCA9ICIke0JVSUxEX1NUUklQfSIKK2V4cG9ydCBOTSA9ICIke0JVSUxEX05NfSIKKworIyBQYXRoIHByZWZpeGVzCitiYXNlX3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0iCitwcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKK2V4ZWNfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCisKK2JpbmRpciA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCitzYmluZGlyID0gIiR7U1RBR0lOR19TQklORElSX05BVElWRX0iCitsaWJkaXIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgoraW5jbHVkZWRpciA9ICIke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitzeXNjb25mZGlyID0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfSIKK2RhdGFkaXIgPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfSIKKworYmFzZWxpYiA9ICJsaWIiCisKKyMgTGlidG9vbCdzIGRlZmF1bHQgcGF0aHMgYXJlIGNvcnJlY3QgZm9yIHRoZSBuYXRpdmUgbWFjaGluZQorbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNbdW5leHBvcnRdID0gIjEiCisKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID89ICIiCitiaW5kaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorbGliZGlyIC49ICIke05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYfSIKK2xpYmV4ZWNkaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX05BVElWRX0vIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKKworIyBTaW5jZSB3ZSBhY3R1YWxseSBpbnN0YWxsIHRoZXNlIGludG8gc2l0dSB0aGVyZSBpcyBubyBzdGFnaW5nIHByZWZpeAorU1RBR0lOR19ESVJfSE9TVCA9ICIiCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiIgorUEtHX0NPTkZJR19ESVIgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyIKKworRVhUUkFfTkFUSVZFX1BLR0NPTkZJR19QQVRIID89ICIiCitQS0dfQ09ORklHX1BBVEggLj0gIiR7RVhUUkFfTkFUSVZFX1BLR0NPTkZJR19QQVRIfSIKK1BLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiIgorCisjIHdlIGRvbnQgd2FudCBsaWJjLXVjbGliYyBvciBsaWJjLWdsaWJjIHRvIGtpY2sgaW4gZm9yIG5hdGl2ZSByZWNpcGVzCitMSUJDT1ZFUlJJREUgPSAiIgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmUiCitNQUNISU5FT1ZFUlJJREVTID0gIiIKKworUEFUSF9wcmVwZW5kID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdDoiCisKK3B5dGhvbiBuYXRpdmVfdmlydGNsYXNzX2hhbmRsZXIgKCkgeworICAgIGNsYXNzZXh0ZW5kID0gZS5kYXRhLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpIG9yICIiCisgICAgaWYgIm5hdGl2ZSIgbm90IGluIGNsYXNzZXh0ZW5kOgorICAgICAgICByZXR1cm4KKworICAgIHBuID0gZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIG5vdCBwbi5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBtYXBfZGVwZW5kZW5jaWVzKHZhcm5hbWUsIGQsIHN1ZmZpeCA9ICIiKToKKyAgICAgICAgaWYgc3VmZml4OgorICAgICAgICAgICAgdmFybmFtZSA9IHZhcm5hbWUgKyAiXyIgKyBzdWZmaXgKKyAgICAgICAgZGVwcyA9IGQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCBkZXBzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMoZGVwcykKKyAgICAgICAgbmV3ZGVwcyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIGRlcCA9PSBwbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAiLWNyb3NzLSIgaW4gZGVwOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcC5yZXBsYWNlKCItY3Jvc3MiLCAiLW5hdGl2ZSIpKQorICAgICAgICAgICAgZWxpZiBub3QgZGVwLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwICsgIi1uYXRpdmUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXApCisgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsICIgIi5qb2luKG5ld2RlcHMpKQorCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbmF0aXZlIikKKworICAgIG1hcF9kZXBlbmRlbmNpZXMoIkRFUEVORFMiLCBlLmRhdGEpCisgICAgZm9yIHBrZyBpbiBbZS5kYXRhLmdldFZhcigiUE4iLCBUcnVlKSwgIiIsICIke1BOfSJdOgorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSREVQRU5EUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSUkVDT01NRU5EUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSU1VHR0VTVFMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlBST1ZJREVTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJSRVBMQUNFUyIsIGUuZGF0YSwgcGtnKQorCisgICAgcHJvdmlkZXMgPSBlLmRhdGEuZ2V0VmFyKCJQUk9WSURFUyIsIFRydWUpCisgICAgbnByb3ZpZGVzID0gW10KKyAgICBmb3IgcHJvdiBpbiBwcm92aWRlcy5zcGxpdCgpOgorICAgICAgICBpZiBwcm92LmZpbmQocG4pICE9IC0xOgorICAgICAgICAgICAgbnByb3ZpZGVzLmFwcGVuZChwcm92KQorICAgICAgICBlbGlmIG5vdCBwcm92LmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICBucHJvdmlkZXMuYXBwZW5kKHByb3YucmVwbGFjZShwcm92LCBwcm92ICsgIi1uYXRpdmUiKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5wcm92aWRlcy5hcHBlbmQocHJvdikKKyAgICBlLmRhdGEuc2V0VmFyKCJQUk9WSURFUyIsICcgJy5qb2luKG5wcm92aWRlcykpCisKKworfQorCithZGRoYW5kbGVyIG5hdGl2ZV92aXJ0Y2xhc3NfaGFuZGxlcgorbmF0aXZlX3ZpcnRjbGFzc19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UiCisKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorZGVsdGFzayBwYWNrYWdlX3FhCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfaXBrCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtCitkZWx0YXNrIHBhY2thZ2Vfd3JpdGUKKworZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKK1VTRV9OTFMgPSAibm8iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbmF0aXZlc2RrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbmF0aXZlc2RrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0ZGE2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwpAQCAtMCwwICsxLDk3IEBACisjIFNESyBwYWNrYWdlcyBhcmUgYnVpbHQgZWl0aGVyIGV4cGxpY2l0bHkgYnkgdGhlIHVzZXIsCisjIG9yIGluZGlyZWN0bHkgdmlhIGRlcGVuZGVuY3kuICBObyBuZWVkIHRvIGJlIGluICd3b3JsZCcuCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtTREtfQVJDSH0ke1NES19WRU5ET1J9LSR7U0RLX09TfSIKKworIyBsaWJjIGZvciB0aGUgU0RLIGNhbiBiZSBkaWZmZXJlbnQgdG8gdGhhdCBvZiB0aGUgdGFyZ2V0CitOQVRJVkVTREtMSUJDID89ICJsaWJjLWdsaWJjIgorTElCQ09WRVJSSURFID0gIjoke05BVElWRVNES0xJQkN9IgorQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1uYXRpdmVzZGsiCitNQUNISU5FT1ZFUlJJREVTID0gIiIKKworIworIyBVcGRhdGUgUEFDS0FHRV9BUkNIIGFuZCBQQUNLQUdFX0FSQ0hTCisjCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IgorUEFDS0FHRV9BUkNIUyA9ICIke1NES19QQUNLQUdFX0FSQ0hTfSIKKworIworIyBXZSBuZWVkIGNocnBhdGggPj0gMC4xNCB0byBlbnN1cmUgd2UgY2FuIGRlYWwgd2l0aCAzMiBhbmQgNjQgYml0CisjIGJpbmFyaWVzCisjCitERVBFTkRTX2FwcGVuZCA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitFWFRSQU5BVElWRVBBVEggKz0gImNocnBhdGgtbmF0aXZlIgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YSIKKworSE9TVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorSE9TVF9WRU5ET1IgPSAiJHtTREtfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtTREtfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1NES19DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKKyNIT1NUX1NZUyA9ICIke0hPU1RfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKK1RBUkdFVF9BUkNIID0gIiR7U0RLX0FSQ0h9IgorVEFSR0VUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorVEFSR0VUX09TID0gIiR7U0RLX09TfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtTREtfUFJFRklYfSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtTREtfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke1NES19BU19BUkNIfSIKK1RBUkdFVF9GUFUgPSAiIgorRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA9ICIiCisKK0NQUEZMQUdTID0gIiR7QlVJTERTREtfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERTREtfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERTREtfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRFNES19MREZMQUdTfSIKKworIyBDaGFuZ2UgdG8gcGxhY2UgZmlsZXMgaW4gU0RLUEFUSAorYmFzZV9wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSIKK3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfSIKK2V4ZWNfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorYmFzZWxpYiA9ICJsaWIiCitzYmluZGlyID0gIiR7YmluZGlyfSIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworcHl0aG9uIG5hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgbm90IChwbi5lbmRzd2l0aCgiLW5hdGl2ZXNkayIpIG9yIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSk6CisgICAgICAgIHJldHVybgorCisgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCAibmF0aXZlc2RrLSIpCisgICAgZS5kYXRhLnNldFZhcigiUE4iLCAibmF0aXZlc2RrLSIgKyBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLnJlcGxhY2UoIi1uYXRpdmVzZGsiLCAiIikucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKSkKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1uYXRpdmVzZGsiKQorfQorCitweXRob24gKCkgeworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICByZXR1cm4KKworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorCisgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuTmF0aXZlc2RrQ2xhc3NFeHRlbmRlcigibmF0aXZlc2RrIiwgZCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VzKCkKKyAgICBjbHNleHRlbmQucmVuYW1lX3BhY2thZ2VfdmFyaWFibGVzKChkLmdldFZhcigiUEFDS0FHRVZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKworICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiREVQRU5EUyIpCisgICAgY2xzZXh0ZW5kLm1hcF9wYWNrYWdldmFycygpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUFJPVklERVMiKQorICAgIGNsc2V4dGVuZC5tYXBfcmVnZXhwX3ZhcmlhYmxlKCJQQUNLQUdFU19EWU5BTUlDIikKK30KKworYWRkaGFuZGxlciBuYXRpdmVzZGtfdmlydGNsYXNzX2hhbmRsZXIKK25hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIgorCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworVVNFX05MUyA9ICIke1NES1VTRV9OTFN9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL29lbGludC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL29lbGludC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDUxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKQEAgLTAsMCArMSw4NCBAQAorYWRkdGFzayBsaW50IGJlZm9yZSBkb19idWlsZAorZG9fbGludFtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2xpbnQoKSB7CisgICAgcGtnbmFtZSA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFRlc3QgdGhhdCBERVNDUklQVElPTiBleGlzdHMKKyAgICAjCisgICAgZGVzY3JpcHRpb24gPSBkLmdldFZhcigiREVTQ1JJUFRJT04iLCBGYWxzZSkKKyAgICBpZiBkZXNjcmlwdGlvblsxOjEwXSA9PSAne1NVTU1BUll9JzoKKyAgICAgICAgYmIud2FybigiJXM6IERFU0NSSVBUSU9OIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0IHRoYXQgSE9NRVBBR0UgZXhpc3RzCisgICAgIworICAgIGhvbWVwYWdlID0gZC5nZXRWYXIoIkhPTUVQQUdFIiwgRmFsc2UpCisgICAgaWYgaG9tZXBhZ2UgPT0gJyc6CisgICAgICAgIGJiLndhcm4oIiVzOiBIT01FUEFHRSBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisgICAgZWxpZiBub3QgaG9tZXBhZ2Uuc3RhcnRzd2l0aCgiaHR0cDovLyIpIGFuZCBub3QgaG9tZXBhZ2Uuc3RhcnRzd2l0aCgiaHR0cHM6Ly8iKToKKyAgICAgICAgYmIud2FybigiJXM6IEhPTUVQQUdFIGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vIiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgVGVzdCBmb3IgdmFsaWQgU0VDVElPTgorICAgICMKKyAgICBzZWN0aW9uID0gZC5nZXRWYXIoIlNFQ1RJT04iLCBGYWxzZSkKKyAgICBpZiBzZWN0aW9uID09ICcnOgorICAgICAgICBiYi53YXJuKCIlczogU0VDVElPTiBpcyBub3Qgc2V0IiAlIHBrZ25hbWUpCisgICAgZWxpZiBub3Qgc2VjdGlvbi5pc2xvd2VyKCk6CisgICAgICAgIGJiLndhcm4oIiVzOiBTRUNUSU9OIHNob3VsZCBvbmx5IHVzZSBsb3dlciBjYXNlIiAlIHBrZ25hbWUpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgdGhhdCBhbGwgcGF0Y2hlcyBoYXZlIFNpZ25lZC1vZmYtYnkgYW5kIFVwc3RyZWFtLVN0YXR1cworICAgICMKKyAgICBzcmN1cmkgPSBkLmdldFZhcigiU1JDX1VSSSIsIEZhbHNlKS5zcGxpdCgpCisgICAgZnBhdGhzID0gKGQuZ2V0VmFyKCdGSUxFU1BBVEgnLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKQorCisgICAgZGVmIGZpbmRQYXRjaChwYXRjaG5hbWUpOgorICAgICAgICBmb3IgZGlyIGluIGZwYXRoczoKKyAgICAgICAgICAgIHBhdGNocGF0aCA9IGRpciArIHBhdGNobmFtZQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0Y2hwYXRoKToKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNocGF0aAorCisgICAgZGVmIGZpbmRLZXkocGF0aCwga2V5KToKKyAgICAgICAgcmV0ID0gVHJ1ZQorICAgICAgICBmID0gZmlsZSgnJXMnICUgcGF0aCwgbW9kZSA9ICdyJykKKyAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKGtleSkgIT0gLTE6CisgICAgICAgICAgICAgICAgcmV0ID0gRmFsc2UKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBjaGVja1BOKHBrZ25hbWUsIHZhcm5hbWUsIHN0cik6CisgICAgICAgIGlmIHN0ci5maW5kKCJ7UE59IikgIT0gLTE6CisgICAgICAgICAgICBiYi53YXJuKCIlczogc2hvdWxkIHVzZSBCUE4gaW5zdGVhZCBvZiBQTiBpbiAlcyIgJSAocGtnbmFtZSwgdmFybmFtZSkpCisgICAgICAgIGlmIHN0ci5maW5kKCJ7UH0iKSAhPSAtMToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzOiBzaG91bGQgdXNlIEJQIGluc3RlYWQgb2YgUCBpbiAlcyIgJSAocGtnbmFtZSwgdmFybmFtZSkpCisKKyAgICBsZW5ndGggPSBsZW4oImZpbGU6Ly8iKQorICAgIGZvciBpdGVtIGluIHNyY3VyaToKKyAgICAgICAgaWYgaXRlbS5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBpdGVtID0gaXRlbVtsZW5ndGg6XQorICAgICAgICAgICAgaWYgaXRlbS5lbmRzd2l0aCgiLnBhdGNoIikgb3IgaXRlbS5lbmRzd2l0aCgiLmRpZmYiKToKKyAgICAgICAgICAgICAgICBwYXRoID0gZmluZFBhdGNoKGl0ZW0pCisgICAgICAgICAgICAgICAgaWYgZmluZEtleShwYXRoLCAiU2lnbmVkLW9mZi1ieSIpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgZG9lc24ndCBoYXZlIFNpZ25lZC1vZmYtYnkiICUgKHBrZ25hbWUsIGl0ZW0pKQorICAgICAgICAgICAgICAgIGlmIGZpbmRLZXkocGF0aCwgIlVwc3RyZWFtLVN0YXR1cyIpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogJXMgZG9lc24ndCBoYXZlIFVwc3RyZWFtLVN0YXR1cyIgJSAocGtnbmFtZSwgaXRlbSkpCisKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgZm9yICR7UE59IG9yICR7UH0gdXNhZ2UgaW4gU1JDX1VSSSBvciBTCisgICAgIyBTaG91bGQgdXNlICR7QlBOfSBvciAke0JQfSBpbnN0ZWFkIHRvIGF2b2lkIGJyZWFraW5nIG11bHRpbGliCisgICAgIworICAgIGZvciBzIGluIHNyY3VyaToKKyAgICAgICAgaWYgbm90IHMuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgorICAgICAgICAgICAgY2hlY2tQTihwa2duYW1lLCAnU1JDX1VSSScsIHMpCisKKyAgICBjaGVja1BOKHBrZ25hbWUsICdTJywgZC5nZXRWYXIoJ1MnLCBGYWxzZSkpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMzUyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvb3duLW1pcnJvcnMuYmJjbGFzcwpAQCAtMCwwICsxLDEyIEBACitQUkVNSVJST1JTKCkgeworY3ZzOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Citzdm46Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2dpdDovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorZ2l0c206Ly8uKi8uKiAgICR7U09VUkNFX01JUlJPUl9VUkx9CitoZzovLy4qLy4qICAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2J6cjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorcDQ6Ly8uKi8uKiAgICAgICR7U09VUkNFX01JUlJPUl9VUkx9Citvc2M6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2h0dHBzPyQ6Ly8uKi8uKiAke1NPVVJDRV9NSVJST1JfVVJMfQorZnRwOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9Cit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkyYmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDIwODYgQEAKKyMKKyMgUGFja2FnaW5nIHByb2Nlc3MKKyMKKyMgRXhlY3V0aXZlIHN1bW1hcnk6IFRoaXMgY2xhc3MgaXRlcmF0ZXMgb3ZlciB0aGUgZnVuY3Rpb25zIGxpc3RlZCBpbiBQQUNLQUdFRlVOQ1MKKyMgVGFraW5nIEQgYW5kIHNwbGl0dGluZyBpdCB1cCBpbnRvIHRoZSBwYWNrYWdlcyBsaXN0ZWQgaW4gUEFDS0FHRVMsIHBsYWNpbmcgdGhlCisjIHJlc3VsdGluZyBvdXRwdXQgaW4gUEtHREVTVC4KKyMKKyMgVGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBzdGVwcyBidXQgUEFDS0FHRUZVTkNTIGNhbiBiZSBleHRlbmRlZDoKKyMKKyMgYSkgcGFja2FnZV9nZXRfYXV0b19wciAtIGdldCBQUkFVVE8gZnJvbSByZW1vdGUgUFIgc2VydmljZQorIworIyBiKSBwZXJmb3JtX3BhY2thZ2Vjb3B5IC0gQ29weSBEIGludG8gUEtHRAorIworIyBjKSBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMgLSBTcGxpdCBvdXQgdGhlIGxvY2FsZSBmaWxlcywgdXBkYXRlcyBGSUxFUyBhbmQgUEFDS0FHRVMKKyMKKyMgZCkgc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIC0gc3BsaXQgdGhlIGZpbGVzIGludG8gcnVudGltZSBhbmQgZGVidWcgYW5kIHN0cmlwIHRoZW0uCisjICAgIERlYnVnIGZpbGVzIGluY2x1ZGUgZGVidWcgaW5mbyBzcGxpdCwgYW5kIGFzc29jaWF0ZWQgc291cmNlcyB0aGF0IGVuZCB1cCBpbiAtZGJnIHBhY2thZ2VzCisjCisjIGUpIGZpeHVwX3Blcm1zIC0gRml4IHVwIHBlcm1pc3Npb25zIGluIHRoZSBwYWNrYWdlIGJlZm9yZSB3ZSBzcGxpdCBpdC4KKyMKKyMgZikgcG9wdWxhdGVfcGFja2FnZXMgLSBTcGxpdCB0aGUgZmlsZXMgaW4gUEtHRCBpbnRvIHNlcGFyYXRlIHBhY2thZ2VzIGluIFBLR0RFU1QvPHBrZ25hbWU+CisjICAgIEFsc28gdHJpZ2dlcnMgdGhlIGJpbmFyeSBzdHJpcHBpbmcgY29kZSB0byBwdXQgZmlsZXMgaW4gLWRiZyBwYWNrYWdlcy4KKyMKKyMgZykgcGFja2FnZV9kb19maWxlZGVwcyAtIENvbGxlY3QgcGVyZmlsZSBydW4tdGltZSBkZXBlbmRlbmN5IG1ldGFkYXRhCisjICAgIFRoZSBkYXRhIGlzIHN0b3JlcyBpbiBGSUxFUntQUk9WSURFUyxERVBFTkRTfV9maWxlX3BrZyB2YXJpYWJsZXMgd2l0aAorIyAgICBhIGxpc3Qgb2YgYWZmZWN0ZWQgZmlsZXMgaW4gRklMRVJ7UFJPVklERVMsREVQRU5EU31GTElTVF9wa2cKKyMKKyMgaCkgcGFja2FnZV9kb19zaGxpYnMgLSBMb29rIGF0IHRoZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCBhbmQgYXV0b3RtYXRpY2FsbHkgYWRkIGFueQorIyAgICBkZXBlbmVkZW5jaWVzIGZvdW5kLiBBbHNvIHN0b3JlcyB0aGUgcGFja2FnZSBuYW1lIHNvIGFueW9uZSBlbHNlIHVzaW5nIHRoaXMgbGlicmFyeQorIyAgICBrbm93cyB3aGljaCBwYWNrYWdlIHRvIGRlcGVuZCBvbi4KKyMKKyMgaSkgcGFja2FnZV9kb19wa2djb25maWcgLSBLZWVwIHRyYWNrIG9mIHdoaWNoIHBhY2thZ2VzIG5lZWQgYW5kIHByb3ZpZGUgd2hpY2ggLnBjIGZpbGVzCisjCisjIGopIHJlYWRfc2hsaWJkZXBzIC0gUmVhZHMgdGhlIHN0b3JlZCBzaGxpYnMgaW5mb3JtYXRpb24gaW50byB0aGUgbWV0YWRhdGEKKyMKKyMgaykgcGFja2FnZV9kZXBjaGFpbnMgLSBBZGRzIGF1dG9tYXRpYyBkZXBlbmRlbmNpZXMgdG8gLWRiZyBhbmQgLWRldiBwYWNrYWdlcworIworIyBsKSBlbWl0X3BrZ2RhdGEgLSBzYXZlcyB0aGUgcGFja2FnaW5nIGRhdGEgaW50byBQS0dEQVRBX0RJUiBmb3IgdXNlIGluIGxhdGVyCisjICAgIHBhY2thZ2luZyBzdGVwcworCitpbmhlcml0IHBhY2thZ2VkYXRhCitpbmhlcml0IHByc2VydgoraW5oZXJpdCBjaHJwYXRoCisKKyMgTmVlZCB0aGUgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoKSBpbiBpbnNhbmUuYmJjbGFzcworaW5oZXJpdCBpbnNhbmUKKworUEtHRCAgICA9ICIke1dPUktESVJ9L3BhY2thZ2UiCitQS0dERVNUID0gIiR7V09SS0RJUn0vcGFja2FnZXMtc3BsaXQiCisKK0xPQ0FMRV9TRUNUSU9OID89ICcnCisKK0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTID0gIiR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnUEFDS0FHRV9BUkNIUycpfSIKKworIyBycG0gaXMgdXNlZCBmb3IgdGhlIHBlci1maWxlIGRlcGVuZGVuY3kgaWRlbnRpZmljYXRpb24KK1BBQ0tBR0VfREVQRU5EUyArPSAicnBtLW5hdGl2ZSIKKworZGVmIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKHMpOgorICAgICIiIgorICAgIE1ha2Ugc3VyZSBwYWNrYWdlIG5hbWVzIGFyZSBsZWdpdGltYXRlIHN0cmluZ3MKKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKworICAgIGRlZiBmaXh1dGYobSk6CisgICAgICAgIGNwID0gbS5ncm91cCgxKQorICAgICAgICBpZiBjcDoKKyAgICAgICAgICAgIHJldHVybiAoJ1x1JXMnICUgY3ApLmRlY29kZSgndW5pY29kZV9lc2NhcGUnKS5lbmNvZGUoJ3V0Zi04JykKKworICAgICMgSGFuZGxlIHVuaWNvZGUgY29kZXBvaW50cyBlbmNvZGVkIGFzIDxVMDEyMz4sIGFzIGluIGdsaWJjIGxvY2FsZSBmaWxlcy4KKyAgICBzID0gcmUuc3ViKCc8VShbMC05QS1GYS1mXXsxLDR9KT4nLCBmaXh1dGYsIHMpCisKKyAgICAjIFJlbWFpbmluZyBwYWNrYWdlIG5hbWUgdmFsaWRpdHkgZml4ZXMKKyAgICByZXR1cm4gcy5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpLnJlcGxhY2UoJ0AnLCAnKycpLnJlcGxhY2UoJywnLCAnKycpLnJlcGxhY2UoJy8nLCAnLScpCisKK2RlZiBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290LCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgZGVzY3JpcHRpb24sIHBvc3RpbnN0PU5vbmUsIHJlY3Vyc2l2ZT1GYWxzZSwgaG9vaz1Ob25lLCBleHRyYV9kZXBlbmRzPU5vbmUsIGF1eF9maWxlc19wYXR0ZXJuPU5vbmUsIHBvc3RybT1Ob25lLCBhbGxvd19kaXJzPUZhbHNlLCBwcmVwZW5kPUZhbHNlLCBtYXRjaF9wYXRoPUZhbHNlLCBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbT1Ob25lLCBhbGxvd19saW5rcz1GYWxzZSwgc3VtbWFyeT1Ob25lKToKKyAgICAiIiIKKyAgICBVc2VkIGluIC5iYiBmaWxlcyB0byBzcGxpdCB1cCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3VicGFja2FnZXMgb2YgYQorICAgIGdpdmVuIHBhY2thZ2UsIHVzdWFsbHkgcGx1Z2lucyBvciBtb2R1bGVzLgorCisgICAgQXJndW1lbnRzOgorICAgIHJvb3QgICAgICAgICAgIC0tIHRoZSBwYXRoIGluIHdoaWNoIHRvIHNlYXJjaAorICAgIGZpbGVfcmVnZXggICAgIC0tIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBzZWFyY2hlZCBmaWxlcy4gVXNlCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50aGVzZXMgKCkgdG8gbWFyayB0aGUgcGFydCBvZiB0aGlzIGV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgICB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRlcml2ZSB0aGUgbW9kdWxlIG5hbWUgKHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgd2hlcmUgJXMgaXMgdXNlZCBpbiBvdGhlciBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcyBub3RlZCBiZWxvdykKKyAgICBvdXRwdXRfcGF0dGVybiAtLSBwYXR0ZXJuIHRvIHVzZSBmb3IgdGhlIHBhY2thZ2UgbmFtZXMuIE11c3QgaW5jbHVkZSAlcy4KKyAgICBkZXNjcmlwdGlvbiAgICAtLSBkZXNjcmlwdGlvbiB0byBzZXQgZm9yIGVhY2ggcGFja2FnZS4gTXVzdCBpbmNsdWRlICVzLgorICAgIHBvc3RpbnN0ICAgICAgIC0tIHBvc3RpbnN0YWxsIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYQorICAgICAgICAgICAgICAgICAgICAgIHN0cmluZykKKyAgICByZWN1cnNpdmUgICAgICAtLSBUcnVlIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgc2VhcmNoIC0gZGVmYXVsdCBGYWxzZQorICAgIGhvb2sgICAgICAgICAgIC0tIGEgaG9vayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5IG1hdGNoLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgKGluIHRoZSBvcmRlciBsaXN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZjogZnVsbCBwYXRoIHRvIHRoZSBmaWxlL2RpcmVjdG9yeSBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgcGtnOiB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3JlZ2V4OiBhcyBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm46IGFzIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVuYW1lOiB0aGUgbW9kdWxlIG5hbWUgZGVyaXZlZCB1c2luZyBmaWxlX3JlZ2V4CisgICAgZXh0cmFfZGVwZW5kcyAgLS0gZXh0cmEgcnVudGltZSBkZXBlbmRlbmNpZXMgKFJERVBFTkRTKSB0byBiZSBzZXQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgYWxsIHBhY2thZ2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBOb25lIGNhdXNlcyBhCisgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBwYWNrYWdlICgke1BOfSkgLSBpZiB5b3UgZG8KKyAgICAgICAgICAgICAgICAgICAgICBub3Qgd2FudCB0aGlzLCBwYXNzICcnIGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICBhdXhfZmlsZXNfcGF0dGVybiAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvciBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiAgTXVzdCBpbmNsdWRlICVzLgorICAgIHBvc3RybSAgICAgICAgIC0tIHBvc3RybSBzY3JpcHQgdG8gdXNlIGZvciBhbGwgcGFja2FnZXMgKGFzIGEgc3RyaW5nKQorICAgIGFsbG93X2RpcnMgICAgIC0tIFRydWUgYWxsb3cgZGlyZWN0b3JpZXMgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQgRmFsc2UKKyAgICBwcmVwZW5kICAgICAgICAtLSBpZiBUcnVlLCBwcmVwZW5kIGNyZWF0ZWQgcGFja2FnZXMgdG8gUEFDS0FHRVMgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZWZhdWx0IEZhbHNlIHdoaWNoIGFwcGVuZHMgdGhlbQorICAgIG1hdGNoX3BhdGggICAgIC0tIG1hdGNoIGZpbGVfcmVnZXggb24gdGhlIHdob2xlIHJlbGF0aXZlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgcm9vdCByYXRoZXIgdGhhbiBqdXN0IHRoZSBmaWxlIG5hbWUKKyAgICBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSAtLSBleHRyYSBpdGVtKHMpIHRvIGJlIGFkZGVkIHRvIEZJTEVTIGZvcgorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggcGFja2FnZSwgdXNpbmcgdGhlIGFjdHVhbCBkZXJpdmVkIG1vZHVsZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gY29udmVydGluZyBpdCB0byBzb21ldGhpbmcgbGVnYWwgZm9yIGEKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlIG5hbWUuIENhbiBiZSBhIHNpbmdsZSBzdHJpbmcgaXRlbSBvciBhIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBpdGVtcy4gTXVzdCBpbmNsdWRlICVzLgorICAgIGFsbG93X2xpbmtzICAgIC0tIFRydWUgdG8gYWxsb3cgc3ltbGlua3MgdG8gYmUgbWF0Y2hlZCAtIGRlZmF1bHQgRmFsc2UKKyAgICBzdW1tYXJ5ICAgICAgICAtLSBTdW1tYXJ5IHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXM7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gZGVzY3JpcHRpb24gaWYgbm90IHNldC4KKworICAgICIiIgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICMgSWYgdGhlIHJvb3QgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsIGRvbid0IGVycm9yIG91dCBsYXRlciBidXQgc2lsZW50bHkgZG8KKyAgICAjIG5vIHNwbGl0dGluZy4KKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHZhciArIHJvb3QpOgorICAgICAgICByZXR1cm4gW10KKworICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBtbDoKKyAgICAgICAgaWYgbm90IG91dHB1dF9wYXR0ZXJuLnN0YXJ0c3dpdGgobWwpOgorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm4gPSBtbCArIG91dHB1dF9wYXR0ZXJuCisKKyAgICAgICAgbmV3ZGVwcyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gKGV4dHJhX2RlcGVuZHMgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aChtbCk6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChtbCArIGRlcCkKKyAgICAgICAgaWYgbmV3ZGVwczoKKyAgICAgICAgICAgIGV4dHJhX2RlcGVuZHMgPSAiICIuam9pbihuZXdkZXBzKQorCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxpdF9wYWNrYWdlcyA9IFtdCisKKyAgICBpZiBwb3N0aW5zdDoKKyAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nICsgcG9zdGluc3QgKyAnXG4nCisgICAgaWYgcG9zdHJtOgorICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nICsgcG9zdHJtICsgJ1xuJworICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgIG9ianMgPSBvcy5saXN0ZGlyKGR2YXIgKyByb290KQorICAgIGVsc2U6CisgICAgICAgIG9ianMgPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZHZhciArIHJvb3QpOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkucmVwbGFjZShkdmFyICsgcm9vdCArICcvJywgJycsIDEpCisgICAgICAgICAgICAgICAgaWYgcmVscGF0aDoKKyAgICAgICAgICAgICAgICAgICAgb2Jqcy5hcHBlbmQocmVscGF0aCkKKworICAgIGlmIGV4dHJhX2RlcGVuZHMgPT0gTm9uZToKKyAgICAgICAgZXh0cmFfZGVwZW5kcyA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBpZiBub3Qgc3VtbWFyeToKKyAgICAgICAgc3VtbWFyeSA9IGRlc2NyaXB0aW9uCisKKyAgICBmb3IgbyBpbiBzb3J0ZWQob2Jqcyk6CisgICAgICAgIGltcG9ydCByZSwgc3RhdAorICAgICAgICBpZiBtYXRjaF9wYXRoOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKGZpbGVfcmVnZXgsIG8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goZmlsZV9yZWdleCwgb3MucGF0aC5iYXNlbmFtZShvKSkKKworICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oZHZhciArIHJvb3QsIG8pCisgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTUkVHKG1vZGUpIG9yIChhbGxvd19saW5rcyBhbmQgc3RhdC5TX0lTTE5LKG1vZGUpKSBvciAoYWxsb3dfZGlycyBhbmQgc3RhdC5TX0lTRElSKG1vZGUpKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvbiA9IGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgIHBrZyA9IG91dHB1dF9wYXR0ZXJuICUgb24KKyAgICAgICAgc3BsaXRfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgaWYgbm90IHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIHByZXBlbmQ6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBbcGtnXSArIHBhY2thZ2VzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgIG9sZGZpbGVzID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwa2csIFRydWUpCisgICAgICAgIG5ld2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgbykKKyAgICAgICAgIyBUaGVzZSBuYW1lcyB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIGdsb2IoKSBzbyBpZiB0aGUgZmlsZW5hbWUgYWN0dWFsbHkKKyAgICAgICAgIyBjb250YWlucyAqIG9yID8gKHJhcmUsIGJ1dCBwb3NzaWJsZSkgd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBzcGVjaWFsbHkKKyAgICAgICAgbmV3ZmlsZSA9IG5ld2ZpbGUucmVwbGFjZSgnKicsICdbKl0nKQorICAgICAgICBuZXdmaWxlID0gbmV3ZmlsZS5yZXBsYWNlKCc/JywgJ1s/XScpCisgICAgICAgIGlmIG5vdCBvbGRmaWxlczoKKyAgICAgICAgICAgIHRoZV9maWxlcyA9IFtuZXdmaWxlXQorICAgICAgICAgICAgaWYgYXV4X2ZpbGVzX3BhdHRlcm46CisgICAgICAgICAgICAgICAgaWYgdHlwZShhdXhfZmlsZXNfcGF0dGVybikgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZwIGluIGF1eF9maWxlc19wYXR0ZXJuOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChmcCAlIG9uKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoYXV4X2ZpbGVzX3BhdHRlcm4gJSBvbikKKyAgICAgICAgICAgIGlmIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0pIGlzIGxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGZvciBmcCBpbiBhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoZnAgJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRoZV9maWxlcy5hcHBlbmQoYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW0gJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csICIgIi5qb2luKHRoZV9maWxlcykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgb2xkZmlsZXMgKyAiICIgKyBuZXdmaWxlKQorICAgICAgICBpZiBleHRyYV9kZXBlbmRzICE9ICcnOgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJyArIGV4dHJhX2RlcGVuZHMpCisgICAgICAgIGlmIG5vdCBkLmdldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgZGVzY3JpcHRpb24gJSBvbikKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCdTVU1NQVJZXycgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgc3VtbWFyeSAlIG9uKQorICAgICAgICBpZiBwb3N0aW5zdDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJyArIHBrZywgcG9zdGluc3QpCisgICAgICAgIGlmIHBvc3RybToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXycgKyBwa2csIHBvc3RybSkKKyAgICAgICAgaWYgY2FsbGFibGUoaG9vayk6CisgICAgICAgICAgICBob29rKGYsIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIG0uZ3JvdXAoMSkpCisKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCisgICAgcmV0dXJuIHNwbGl0X3BhY2thZ2VzCisKK1BBQ0tBR0VfREVQRU5EUyArPSAiZmlsZS1uYXRpdmUiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAiIgorICAgICAgICBmb3IgZGVwIGluIChkLmdldFZhcignUEFDS0FHRV9ERVBFTkRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgICAgICMgc2hsaWJzIHJlcXVpcmVzIGFueSBERVBFTkRTIHRvIGhhdmUgYWxyZWFkeSBwYWNrYWdlZCBmb3IgdGhlICoubGlzdCBmaWxlcworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwdGFzaycsICIgZG9fcGFja2FnZWRhdGEiKQorfQorCisjIEdldCBhIGxpc3Qgb2YgZmlsZXMgZnJvbSBmaWxlIHZhcnMgYnkgc2VhcmNoaW5nIGZpbGVzIHVuZGVyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyMgVGhlIGxpc3QgY29udGFpbnMgc3ltbGlua3MsIGRpcmVjdG9yaWVzIGFuZCBub3JtYWwgZmlsZXMuCitkZWYgZmlsZXNfZnJvbV9maWxldmFycyhmaWxldmFycyk6CisgICAgaW1wb3J0IG9zLGdsb2IKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgZmlsZXMgPSBbXQorICAgIGZvciBmIGluIGZpbGV2YXJzOgorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGYpOgorICAgICAgICAgICAgZiA9ICcuJyArIGYKKyAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLi8iKToKKyAgICAgICAgICAgIGYgPSAnLi8nICsgZgorICAgICAgICBnbG9iYmVkID0gZ2xvYi5nbG9iKGYpCisgICAgICAgIGlmIGdsb2JiZWQ6CisgICAgICAgICAgICBpZiBbIGYgXSAhPSBnbG9iYmVkOgorICAgICAgICAgICAgICAgIGZpbGVzICs9IGdsb2JiZWQKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaWxlcy5hcHBlbmQoZikKKworICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBpZiBub3QgY3BhdGguaXNsaW5rKGYpOgorICAgICAgICAgICAgaWYgY3BhdGguaXNkaXIoZik6CisgICAgICAgICAgICAgICAgbmV3ZmlsZXMgPSBbIG9zLnBhdGguam9pbihmLHgpIGZvciB4IGluIG9zLmxpc3RkaXIoZikgXQorICAgICAgICAgICAgICAgIGlmIG5ld2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmaWxlcyArPSBuZXdmaWxlcworCisgICAgcmV0dXJuIGZpbGVzCisKKyMgQ2FsbGVkIGluIHBhY2thZ2VfPHJwbSxpcGssZGViPi5iYmNsYXNzIHRvIGdldCB0aGUgY29ycmVjdCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMKK2RlZiBnZXRfY29uZmZpbGVzKHBrZywgZCk6CisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICByb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgIG9zLmNoZGlyKHJvb3QpCisKKyAgICBjb25mZmlsZXMgPSBkLmdldFZhcignQ09ORkZJTEVTXyVzJyAlIHBrZywgVHJ1ZSk7CisgICAgaWYgY29uZmZpbGVzID09IE5vbmU6CisgICAgICAgIGNvbmZmaWxlcyA9IGQuZ2V0VmFyKCdDT05GRklMRVMnLCBUcnVlKQorICAgIGlmIGNvbmZmaWxlcyA9PSBOb25lOgorICAgICAgICBjb25mZmlsZXMgPSAiIgorICAgIGNvbmZmaWxlcyA9IGNvbmZmaWxlcy5zcGxpdCgpCisgICAgY29uZl9vcmlnX2xpc3QgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKGNvbmZmaWxlcykKKworICAgICMgUmVtb3ZlIGxpbmtzIGFuZCBkaXJlY3RvcmllcyBmcm9tIGNvbmZfb3JpZ19saXN0IHRvIGdldCBjb25mX2xpc3Qgd2hpY2ggb25seSBjb250YWlucyBub3JtYWwgZmlsZXMKKyAgICBjb25mX2xpc3QgPSBbXQorICAgIGZvciBmIGluIGNvbmZfb3JpZ19saXN0OgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGYpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBjb25mX2xpc3QuYXBwZW5kKGYpCisKKyAgICAjIFJlbW92ZSB0aGUgbGVhZGluZyAnLi8nCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbmZfbGlzdCkpOgorICAgICAgICBjb25mX2xpc3RbaV0gPSBjb25mX2xpc3RbaV1bMTpdCisKKyAgICBvcy5jaGRpcihjd2QpCisgICAgcmV0dXJuIGNvbmZfbGlzdAorCitkZWYgc3BsaXRkZWJ1Z2luZm8oZmlsZSwgZGVidWdmaWxlLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZCk6CisgICAgIyBGdW5jdGlvbiB0byBzcGxpdCBhIHNpbmdsZSBmaWxlIGludG8gdHdvIGNvbXBvbmVudHMsIG9uZSBpcyB0aGUgc3RyaXBwZWQKKyAgICAjIHRhcmdldCBzeXN0ZW0gYmluYXJ5LCB0aGUgb3RoZXIgY29udGFpbnMgYW55IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gVGhlCisgICAgIyB0d28gZmlsZXMgYXJlIGxpbmtlZCB0byByZWZlcmVuY2UgZWFjaCBvdGhlci4KKyAgICAjCisgICAgIyBzb3VyY2VmaWxlIGlzIGFsc28gZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGRlYnVnc291cmNlcworCisgICAgaW1wb3J0IHN0YXQKKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgb2JqY29weSA9IGQuZ2V0VmFyKCJPQkpDT1BZIiwgVHJ1ZSkKKyAgICBkZWJ1Z2VkaXQgPSBkLmV4cGFuZCgiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vZGVidWdlZGl0IikKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKQorICAgIHdvcmtwYXJlbnRkaXIgPSBkLmdldFZhcigiREVCVUdTUkNfT1ZFUlJJREVfUEFUSCIsIFRydWUpIG9yIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpCisKKyAgICAjIFdlIGlnbm9yZSBrZXJuZWwgbW9kdWxlcywgd2UgZG9uJ3QgZ2VuZXJhdGUgZGVidWcgaW5mbyBmaWxlcy4KKyAgICBpZiBmaWxlLmZpbmQoIi9saWIvbW9kdWxlcy8iKSAhPSAtMSBhbmQgZmlsZS5lbmRzd2l0aCgiLmtvIik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBuZXdtb2RlID0gTm9uZQorICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuV19PSykgb3Igb3MuYWNjZXNzKGZpbGUsIG9zLlJfT0spOgorICAgICAgICBvcmlnbW9kZSA9IG9zLnN0YXQoZmlsZSlbc3RhdC5TVF9NT0RFXQorICAgICAgICBuZXdtb2RlID0gb3JpZ21vZGUgfCBzdGF0LlNfSVdSSVRFIHwgc3RhdC5TX0lSRUFECisgICAgICAgIG9zLmNobW9kKGZpbGUsIG5ld21vZGUpCisKKyAgICAjIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgZGVidWcgc3JjIGluZm9ybWF0aW9uIGhlcmUuLi4KKyAgICBpZiBkZWJ1Z3NyY2RpcjoKKyAgICAgICAgY21kID0gIiclcycgLWIgJyVzJyAtZCAnJXMnIC1pIC1sICclcycgJyVzJyIgJSAoZGVidWdlZGl0LCB3b3JrcGFyZW50ZGlyLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZmlsZSkKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJkZWJ1Z2VkaXQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRlYnVnZmlsZSkpCisKKyAgICBjbWQgPSAiJyVzJyAtLW9ubHkta2VlcC1kZWJ1ZyAnJXMnICclcyciICUgKG9iamNvcHksIGZpbGUsIGRlYnVnZmlsZSkKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgIyBTZXQgdGhlIGRlYnVnbGluayB0byBoYXZlIHRoZSB2aWV3IG9mIHRoZSBmaWxlIHBhdGggb24gdGhlIHRhcmdldAorICAgIGNtZCA9ICInJXMnIC0tYWRkLWdudS1kZWJ1Z2xpbms9JyVzJyAnJXMnIiAlIChvYmpjb3B5LCBkZWJ1Z2ZpbGUsIGZpbGUpCisgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgaWYgcmV0dmFsOgorICAgICAgICBiYi5mYXRhbCgib2JqY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgIGlmIG5ld21vZGU6CisgICAgICAgIG9zLmNobW9kKGZpbGUsIG9yaWdtb2RlKQorCisgICAgcmV0dXJuIDAKKworZGVmIGNvcHlkZWJ1Z3NvdXJjZXMoZGVidWdzcmNkaXIsIGQpOgorICAgICMgVGhlIGRlYnVnIHNyYyBpbmZvcm1hdGlvbiB3cml0dGVuIG91dCB0byBzb3VyY2VmaWxlIGlzIGZ1cnRoZXIgcHJvY2VjZXNzZWQKKyAgICAjIGFuZCBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGhlcmUuCisKKyAgICBpbXBvcnQgc3RhdAorCisgICAgc291cmNlZmlsZSA9IGQuZXhwYW5kKCIke1dPUktESVJ9L2RlYnVnc291cmNlcy5saXN0IikKKyAgICBpZiBkZWJ1Z3NyY2RpciBhbmQgb3MucGF0aC5pc2ZpbGUoc291cmNlZmlsZSk6CisgICAgICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgICAgIHN0cmlwID0gZC5nZXRWYXIoIlNUUklQIiwgVHJ1ZSkKKyAgICAgICAgb2JqY29weSA9IGQuZ2V0VmFyKCJPQkpDT1BZIiwgVHJ1ZSkKKyAgICAgICAgZGVidWdlZGl0ID0gZC5leHBhbmQoIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0vYmluL2RlYnVnZWRpdCIpCisgICAgICAgIHdvcmtkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgICAgIHdvcmtwYXJlbnRkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKQorICAgICAgICB3b3JrYmFzZWRpciA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKHdvcmtkaXIpKSArICIvIiArIG9zLnBhdGguYmFzZW5hbWUod29ya2RpcikKKworICAgICAgICBub3N1Y2hkaXIgPSBbXQorICAgICAgICBiYXNlcGF0aCA9IGR2YXIKKyAgICAgICAgZm9yIHAgaW4gZGVidWdzcmNkaXIuc3BsaXQoIi8iKToKKyAgICAgICAgICAgIGJhc2VwYXRoID0gYmFzZXBhdGggKyAiLyIgKyBwCisgICAgICAgICAgICBpZiBub3QgY3BhdGguZXhpc3RzKGJhc2VwYXRoKToKKyAgICAgICAgICAgICAgICBub3N1Y2hkaXIuYXBwZW5kKGJhc2VwYXRoKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYmFzZXBhdGgpCisgICAgICAgIGNwYXRoLnVwZGF0ZWNhY2hlKGJhc2VwYXRoKQorCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyA9ICAiTENfQUxMPUMgOyBzb3J0IC16IC11ICclcycgfCBlZ3JlcCAtdiAteiAnKDxpbnRlcm5hbD58PGJ1aWx0LWluPikkJyB8ICIKKyAgICAgICAgIyBXZSBuZWVkIHRvIGlnbm9yZSBmaWxlcyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgb3VycworICAgICAgICAjIHdlIGRvIHRoaXMgYnkgb25seSBwYXlpbmcgYXR0ZW50aW9uIHRvIGl0ZW1zIGZyb20gdGhpcyBwYWNrYWdlCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyArPSAiZmdyZXAgLXp3ICclcycgfCAiCisgICAgICAgIHByb2Nlc3NkZWJ1Z3NyYyArPSAiKGNkICclcycgOyBjcGlvIC1wZDBtbEwgLS1uby1wcmVzZXJ2ZS1vd25lciAnJXMlcycgMj4vZGV2L251bGwpIgorCisgICAgICAgIGNtZCA9IHByb2Nlc3NkZWJ1Z3NyYyAlIChzb3VyY2VmaWxlLCB3b3JrYmFzZWRpciwgd29ya3BhcmVudGRpciwgZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAjIENhbiAiZmFpbCIgaWYgaW50ZXJuYWwgaGVhZGVycy90cmFuc2llbnQgc291cmNlcyBhcmUgYXR0ZW1wdGVkCisgICAgICAgICNpZiByZXR2YWw6CisgICAgICAgICMgICAgYmIuZmF0YWwoImRlYnVnIHNvdXJjZSBjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcykiICUgKHJldHZhbCwgY21kKSkKKworICAgICAgICAjIGNwaW8gc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB3aXRoIC1sTCB0b2dldGhlciBhbmQgc3ltYm9saWMgbGlua3MgYXJlIGp1c3QgY29waWVkLCBub3QgZGVyZWZlcmVuY2VkLgorICAgICAgICAjIFdvcmsgYXJvdW5kIHRoaXMgYnkgbWFudWFsbHkgZmluZGluZyBhbmQgY29weWluZyBhbnkgc3ltYm9saWMgbGlua3MgdGhhdCBtYWRlIGl0IHRocm91Z2guCisgICAgICAgIGNtZCA9ICJmaW5kICVzJXMgLXR5cGUgbCAtcHJpbnQwIC1kZWxldGUgfCBzZWQgcyMlcyVzLyMjZyB8IChjZCAnJXMnIDsgY3BpbyAtcGQwbUwgLS1uby1wcmVzZXJ2ZS1vd25lciAnJXMlcycgMj4vZGV2L251bGwpIiAlIChkdmFyLCBkZWJ1Z3NyY2RpciwgZHZhciwgZGVidWdzcmNkaXIsIHdvcmtwYXJlbnRkaXIsIGR2YXIsIGRlYnVnc3JjZGlyKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoImRlYnVnc3JjIHN5bWxpbmsgZml4dXAgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSIgJSAocmV0dmFsLCBjbWQpKQorCisgICAgICAgICMgVGhlIGNvcHkgYnkgY3BpbyBtYXkgaGF2ZSByZXN1bHRlZCBpbiBzb21lIGVtcHR5IGRpcmVjdG9yaWVzISAgUmVtb3ZlIHRoZXNlCisgICAgICAgIGNtZCA9ICJmaW5kICVzJXMgLWVtcHR5IC10eXBlIGQgLWRlbGV0ZSIgJSAoZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgiZW1wdHkgZGlyZWN0b3J5IHJlbW92YWwgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAgICAgIyBBbHNvIHJlbW92ZSBkZWJ1Z3NyY2RpciBpZiBpdHMgZW1wdHkKKyAgICAgICAgZm9yIHAgaW4gbm9zdWNoZGlyWzo6LTFdOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCkgYW5kIG5vdCBvcy5saXN0ZGlyKHApOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKHApCisKKyMKKyMgUGFja2FnZSBkYXRhIGhhbmRsaW5nIHJvdXRpbmVzCisjCisKK2RlZiBnZXRfcGFja2FnZV9tYXBwaW5nIChwa2csIGJhc2Vwa2csIGQpOgorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCisgICAga2V5ID0gIlBLR18lcyIgJSBwa2cKKworICAgIGlmIGtleSBpbiBkYXRhOgorICAgICAgICAjIEhhdmUgdG8gYXZvaWQgdW5kb2luZyB0aGUgd3JpdGVfZXh0cmFfcGtncyhnbG9iYWxfdmFyaWFudHMuLi4pCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgZGF0YVtrZXldID09IGJhc2Vwa2c6CisgICAgICAgICAgICByZXR1cm4gcGtnCisgICAgICAgIHJldHVybiBkYXRhW2tleV0KKworICAgIHJldHVybiBwa2cKKworZGVmIGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEgKHBrZ190eXBlLCBkKToKKyAgICBiYXNlX2tleSA9ICJQQUNLQUdFX0FERF9NRVRBREFUQSIKKyAgICBmb3Iga2V5IGluICgiJXNfJXMiICUgKGJhc2Vfa2V5LCBwa2dfdHlwZS51cHBlcigpKSwgYmFzZV9rZXkpOgorICAgICAgICBpZiBkLmdldFZhcihrZXksIEZhbHNlKSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZC5zZXRWYXJGbGFnKGtleSwgInR5cGUiLCAibGlzdCIpCisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZyhrZXksICJzZXBhcmF0b3IiKSBpcyBOb25lOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKGtleSwgInNlcGFyYXRvciIsICJcXG4iKQorICAgICAgICBtZXRhZGF0YV9maWVsZHMgPSBbZmllbGQuc3RyaXAoKSBmb3IgZmllbGQgaW4gb2UuZGF0YS50eXBlZF92YWx1ZShrZXksIGQpXQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKG1ldGFkYXRhX2ZpZWxkcykuc3RyaXAoKQorCitkZWYgcnVudGltZV9tYXBwaW5nX3JlbmFtZSAodmFybmFtZSwgcGtnLCBkKToKKyAgICAjYmIubm90ZSgiJXMgYmVmb3JlOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgbmV3X2RlcGVuZHMgPSB7fQorICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkgb3IgIiIpCisgICAgZm9yIGRlcGVuZCBpbiBkZXBzOgorICAgICAgICBuZXdfZGVwZW5kID0gZ2V0X3BhY2thZ2VfbWFwcGluZyhkZXBlbmQsIHBrZywgZCkKKyAgICAgICAgbmV3X2RlcGVuZHNbbmV3X2RlcGVuZF0gPSBkZXBzW2RlcGVuZF0KKworICAgIGQuc2V0VmFyKHZhcm5hbWUsIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdfZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorCisgICAgI2JiLm5vdGUoIiVzIGFmdGVyOiAlcyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQorCisjCisjIFBhY2thZ2UgZnVuY3Rpb25zIHN1aXRhYmxlIGZvciBpbmNsdXNpb24gaW4gUEFDS0FHRUZVTkNTCisjCisKK3B5dGhvbiBwYWNrYWdlX2dldF9hdXRvX3ByKCkgeworICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICBpbXBvcnQgcmUKKworICAgICMgU3VwcG9ydCBwZXIgcmVjaXBlIFBSU0VSVl9IT1NUCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGhvc3QgPSBkLmdldFZhcigiUFJTRVJWX0hPU1RfIiArIHBuLCBUcnVlKQorICAgIGlmIG5vdCAoaG9zdCBpcyBOb25lKToKKyAgICAgICAgZC5zZXRWYXIoIlBSU0VSVl9IT1NUIiwgaG9zdCkKKworICAgIHBrZ3YgPSBkLmdldFZhcigiUEtHViIsIFRydWUpCisKKyAgICAjIFBSIFNlcnZlciBub3QgYWN0aXZlLCBoYW5kbGUgQVVUT0lOQworICAgIGlmIG5vdCBkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKToKKyAgICAgICAgaWYgJ0FVVE9JTkMnIGluIHBrZ3Y6CisgICAgICAgICAgICBkLnNldFZhcigiUEtHViIsIHBrZ3YucmVwbGFjZSgiQVVUT0lOQyIsICIwIikpCisgICAgICAgIHJldHVybgorCisgICAgYXV0b19wciA9IE5vbmUKKyAgICBwdiA9IGQuZ2V0VmFyKCJQViIsIFRydWUpCisgICAgdmVyc2lvbiA9IGQuZ2V0VmFyKCJQUkFVVE9JTlgiLCBUcnVlKQorICAgIHBrZ2FyY2ggPSBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkKKyAgICBjaGVja3N1bSA9IGQuZ2V0VmFyKCJCQl9UQVNLSEFTSCIsIFRydWUpCisKKyAgICBpZiBkLmdldFZhcignUFJTRVJWX0xPQ0tET1dOJywgVHJ1ZSk6CisgICAgICAgIGF1dG9fcHIgPSBkLmdldFZhcignUFJBVVRPXycgKyB2ZXJzaW9uICsgJ18nICsgcGtnYXJjaCwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1BSQVVUT18nICsgdmVyc2lvbiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBpZiBhdXRvX3ByIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPIGZyb20gbG9ja2Rvd24gZXhwb3J0ZWQgZmlsZSIpCisgICAgICAgIGQuc2V0VmFyKCdQUkFVVE8nLHN0cihhdXRvX3ByKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgICAgIGNvbm4gPSBvZS5wcnNlcnZpY2UucHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgIkFVVE9JTkMiIGluIHBrZ3Y6CisgICAgICAgICAgICAgICAgc3JjcHYgPSBiYi5mZXRjaDIuZ2V0X3NyY3JldihkKQorICAgICAgICAgICAgICAgIGJhc2VfdmVyID0gIkFVVE9JTkMtJXMiICUgdmVyc2lvbls6dmVyc2lvbi5maW5kKHNyY3B2KV0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbm4uZ2V0UFIoYmFzZV92ZXIsIHBrZ2FyY2gsIHNyY3B2KQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJQS0dWIiwgcGtndi5yZXBsYWNlKCJBVVRPSU5DIiwgc3RyKHZhbHVlKSkpCisKKyAgICAgICAgICAgIGF1dG9fcHIgPSBjb25uLmdldFBSKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgYmIuZmF0YWwoIkNhbiBOT1QgZ2V0IFBSQVVUTywgZXhjZXB0aW9uICVzIiAlICBzdHIoZSkpCisgICAgaWYgYXV0b19wciBpcyBOb25lOgorICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPIGZyb20gcmVtb3RlIFBSIHNlcnZpY2UiKQorICAgIGQuc2V0VmFyKCdQUkFVVE8nLHN0cihhdXRvX3ByKSkKK30KKworTE9DQUxFQkFTRVBOID8/PSAiJHtQTn0iCisKK3B5dGhvbiBwYWNrYWdlX2RvX3NwbGl0X2xvY2FsZXMoKSB7CisgICAgaWYgKGQuZ2V0VmFyKCdQQUNLQUdFX05PX0xPQ0FMRScsIFRydWUpID09ICcxJyk6CisgICAgICAgIGJiLmRlYnVnKDEsICJwYWNrYWdlIHJlcXVlc3RlZCBub3Qgc3BsaXR0aW5nIGxvY2FsZXMiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBkYXRhZGlyID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKQorICAgIGlmIG5vdCBkYXRhZGlyOgorICAgICAgICBiYi5ub3RlKCJkYXRhZGlyIG5vdCBkZWZpbmVkIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ0xPQ0FMRUJBU0VQTicsIFRydWUpCisKKyAgICBpZiBwbiArICctbG9jYWxlJyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGFja2FnZXMucmVtb3ZlKHBuICsgJy1sb2NhbGUnKQorCisgICAgbG9jYWxlZGlyID0gb3MucGF0aC5qb2luKGR2YXIgKyBkYXRhZGlyLCAnbG9jYWxlJykKKworICAgIGlmIG5vdCBjcGF0aC5pc2Rpcihsb2NhbGVkaXIpOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbG9jYWxlIGZpbGVzIGluIHRoaXMgcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxlcyA9IG9zLmxpc3RkaXIobG9jYWxlZGlyKQorCisgICAgc3VtbWFyeSA9IGQuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgcG4KKyAgICBkZXNjcmlwdGlvbiA9IGQuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIiCisgICAgbG9jYWxlX3NlY3Rpb24gPSBkLmdldFZhcignTE9DQUxFX1NFQ1RJT04nLCBUcnVlKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgbCBpbiBzb3J0ZWQobG9jYWxlcyk6CisgICAgICAgIGxuID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobCkKKyAgICAgICAgcGtnID0gcG4gKyAnLWxvY2FsZS0nICsgbG4KKyAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwa2csIG9zLnBhdGguam9pbihkYXRhZGlyLCAnbG9jYWxlJywgbCkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCAnJXN2aXJ0dWFsLWxvY2FsZS0lcycgJSAobWxwcmVmaXgsIGxuKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCAnJXMtbG9jYWxlICVzJXMtdHJhbnNsYXRpb24nICUgKHBuLCBtbHByZWZpeCwgbG4pKQorICAgICAgICBkLnNldFZhcignU1VNTUFSWV8nICsgcGtnLCAnJXMgLSAlcyB0cmFuc2xhdGlvbnMnICUgKHN1bW1hcnksIGwpKQorICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgJyVzICBUaGlzIHBhY2thZ2UgY29udGFpbnMgbGFuZ3VhZ2UgdHJhbnNsYXRpb24gZmlsZXMgZm9yIHRoZSAlcyBsb2NhbGUuJyAlIChkZXNjcmlwdGlvbiwgbCkpCisgICAgICAgIGlmIGxvY2FsZV9zZWN0aW9uOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1NFQ1RJT05fJyArIHBrZywgbG9jYWxlX3NlY3Rpb24pCisKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcykpCisKKyAgICAjIERpc2FibGVkIGJ5IFJQIDE4LzA2LzA3CisgICAgIyBXaWxkY2FyZHMgYXJlbid0IHN1cHBvcnRlZCBpbiBkZWJpYW4KKyAgICAjIFRoZXkgYnJlYWsgd2l0aCBpcGtnIHNpbmNlIGdsaWJjLWxvY2FsZSogd2lsbCBtZWFuIHRoYXQKKyAgICAjIGdsaWJjLWxvY2FsZWRhdGEtdHJhbnNsaXQqIHdvbid0IGluc3RhbGwgYXMgYSBkZXBlbmRlbmN5CisgICAgIyBmb3Igc29tZSBvdGhlciBwYWNrYWdlIHdoaWNoIGJyZWFrcyBtZXRhLXRvb2xjaGFpbgorICAgICMgUHJvYmFibHkgYnJlYWtzIHNpbmNlIHZpcnR1YWwtbG9jYWxlLSBpc24ndCBwcm92aWRlZCBhbnl3aGVyZQorICAgICNyZGVwID0gKGQuZ2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAjcmRlcC5hcHBlbmQoJyVzLWxvY2FsZSonICUgcG4pCisgICAgI2Quc2V0VmFyKCdSREVQRU5EU18lcycgJSBwbiwgJyAnLmpvaW4ocmRlcCkpCit9CisKK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5ICgpIHsKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAjIFN0YXJ0IGJ5IHBhY2thZ2UgcG9wdWxhdGlvbiBieSB0YWtpbmcgYSBjb3B5IG9mIHRoZSBpbnN0YWxsZWQKKyAgICAjIGZpbGVzIHRvIG9wZXJhdGUgb24KKyAgICAjIFByZXNlcnZlIHNwYXJzZSBmaWxlcyBhbmQgaGFyZCBsaW5rcworICAgIGNtZCA9ICd0YXIgLWNmIC0gLUMgJXMgLXAgLiB8IHRhciAteGYgLSAtQyAlcycgJSAoZGVzdCwgZHZhcikKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJmaWxlIGNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAjIHJlcGxhY2UgUlBBVEhzIGZvciB0aGUgbmF0aXZlc2RrIGJpbmFyaWVzLCB0byBtYWtlIHRoZW0gcmVsb2NhdGFibGUKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBycGF0aF9yZXBsYWNlIChkdmFyLCBkKQorfQorcGVyZm9ybV9wYWNrYWdlY29weVtjbGVhbmRpcnNdID0gIiR7UEtHRH0iCitwZXJmb3JtX3BhY2thZ2Vjb3B5W2RpcnNdID0gIiR7UEtHRH0iCisKKyMgV2UgZ2VuZXJhdGUgYSBtYXN0ZXIgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBwcm9jZXNzLCB3ZSBzdGFydCBieQorIyBzZWVkaW5nIHRoaXMgbGlzdCB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMsIHRoZW4gbG9hZCBmcm9tCisjIHRoZSBmcy1wZXJtcy50eHQgZmlsZXMKK3B5dGhvbiBmaXh1cF9wZXJtcyAoKSB7CisgICAgaW1wb3J0IHB3ZCwgZ3JwCisKKyAgICAjIGluaXQgdXNpbmcgYSBzdHJpbmcgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYSBsaW5lIGFzIGRvY3VtZW50ZWQgaW4KKyAgICAjIHRoZSBmcy1wZXJtcy50eHQgZmlsZQorICAgICMgPHBhdGg+IDxtb2RlPiA8dWlkPiA8Z2lkPiA8d2Fsaz4gPGZtb2RlPiA8ZnVpZD4gPGZnaWQ+CisgICAgIyA8cGF0aD4gbGluayA8bGluayB0YXJnZXQ+CisgICAgIworICAgICMgX19zdHJfXyBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgYW4gZW50cnkgaW4gdGhlIGlucHV0IGZvcm1hdAorICAgICMKKyAgICAjIGlmIGZzX3Blcm1zX2VudHJ5LnBhdGggaXMgTm9uZToKKyAgICAjICAgIGFuIGVycm9yIG9jY3VyZWQKKyAgICAjIGlmIGZzX3Blcm1zX2VudHJ5LmxpbmssIHlvdSBjYW4gcmV0cmlldmU6CisgICAgIyAgICBmc19wZXJtc19lbnRyeS5wYXRoID0gcGF0aAorICAgICMgICAgZnNfcGVybXNfZW50cnkubGluayA9IHRhcmdldCBvZiBsaW5rCisgICAgIyBpZiBub3QgZnNfcGVybXNfZW50cnkubGluaywgeW91IGNhbiByZXRyaWV2ZToKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LnBhdGggPSBwYXRoCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5tb2RlID0gZXhwZWN0ZWQgZGlyIG1vZGUgb3IgTm9uZQorICAgICMgICAgZnNfcGVybXNfZW50cnkudWlkID0gZXhwZWN0ZWQgdWlkIG9yIC0xCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5naWQgPSBleHBlY3RlZCBnaWQgb3IgLTEKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LndhbGsgPSAndHJ1ZScgb3Igc29tZXRoaW5nIGVsc2UKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmZtb2RlID0gZXhwZWN0ZWQgZmlsZSBtb2RlIG9yIE5vbmUKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmZ1aWQgPSBleHBlY3RlZCBmaWxlIHVpZCBvciAtMQorICAgICMgICAgZnNfcGVybXNfZW50cnlfZmdpZCA9IGV4cGVjdGVkIGZpbGUgZ2lkIG9yIC0xCisgICAgY2xhc3MgZnNfcGVybXNfZW50cnkoKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgbHNwbGl0ID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSA9PSAzIGFuZCBsc3BsaXRbMV0ubG93ZXIoKSA9PSAibGluayI6CisgICAgICAgICAgICAgICAgc2VsZi5fc2V0bGluayhsc3BsaXRbMF0sIGxzcGxpdFsyXSkKKyAgICAgICAgICAgIGVsaWYgbGVuKGxzcGxpdCkgPT0gODoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRkaXIobHNwbGl0WzBdLCBsc3BsaXRbMV0sIGxzcGxpdFsyXSwgbHNwbGl0WzNdLCBsc3BsaXRbNF0sIGxzcGxpdFs1XSwgbHNwbGl0WzZdLCBsc3BsaXRbN10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBQZXJtczogaW52YWxpZCBjb25maWcgbGluZSAlcyIgJSBsaW5lCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBlcm0tY29uZmlnIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmxpbmsgPSBOb25lCisKKyAgICAgICAgZGVmIF9zZXRkaXIoc2VsZiwgcGF0aCwgbW9kZSwgdWlkLCBnaWQsIHdhbGssIGZtb2RlLCBmdWlkLCBmZ2lkKToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKyAgICAgICAgICAgIHNlbGYubGluayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYubW9kZSA9IHNlbGYuX3Byb2Ntb2RlKG1vZGUpCisgICAgICAgICAgICBzZWxmLnVpZCAgPSBzZWxmLl9wcm9jdWlkKHVpZCkKKyAgICAgICAgICAgIHNlbGYuZ2lkICA9IHNlbGYuX3Byb2NnaWQoZ2lkKQorICAgICAgICAgICAgc2VsZi53YWxrID0gd2Fsay5sb3dlcigpCisgICAgICAgICAgICBzZWxmLmZtb2RlID0gc2VsZi5fcHJvY21vZGUoZm1vZGUpCisgICAgICAgICAgICBzZWxmLmZ1aWQgPSBzZWxmLl9wcm9jdWlkKGZ1aWQpCisgICAgICAgICAgICBzZWxmLmZnaWQgPSBzZWxmLl9wcm9jZ2lkKGZnaWQpCisKKyAgICAgICAgZGVmIF9zZXRsaW5rKHNlbGYsIHBhdGgsIGxpbmspOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICAgICAgc2VsZi5saW5rID0gbGluaworCisgICAgICAgIGRlZiBfcHJvY21vZGUoc2VsZiwgbW9kZSk6CisgICAgICAgICAgICBpZiBub3QgbW9kZSBvciAobW9kZSBhbmQgbW9kZSA9PSAiLSIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQobW9kZSw4KQorCisgICAgICAgICMgTm90ZSB1aWQvZ2lkIC0xIGhhcyBzcGVjaWFsIHNpZ25pZmljYW5jZSBpbiBvcy5sY2hvd24KKyAgICAgICAgZGVmIF9wcm9jdWlkKHNlbGYsIHVpZCk6CisgICAgICAgICAgICBpZiB1aWQgaXMgTm9uZSBvciB1aWQgPT0gIi0iOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxpZiB1aWQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQodWlkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHdkLmdldHB3bmFtKHVpZCkucHdfdWlkCisKKyAgICAgICAgZGVmIF9wcm9jZ2lkKHNlbGYsIGdpZCk6CisgICAgICAgICAgICBpZiBnaWQgaXMgTm9uZSBvciBnaWQgPT0gIi0iOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgZWxpZiBnaWQuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoZ2lkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JwLmdldGdybmFtKGdpZCkuZ3JfZ2lkCisKKyAgICAgICAgIyBVc2UgZm9yIGRlYnVnZ2luZyB0aGUgZW50cmllcworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYubGluazoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzIGxpbmsgJXMiICUgKHNlbGYucGF0aCwgc2VsZi5saW5rKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtb2RlID0gIi0iCisgICAgICAgICAgICAgICAgaWYgc2VsZi5tb2RlOgorICAgICAgICAgICAgICAgICAgICBtb2RlID0gIjAlbyIgJSBzZWxmLm1vZGUKKyAgICAgICAgICAgICAgICBmbW9kZSA9ICItIgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZm1vZGU6CisgICAgICAgICAgICAgICAgICAgIGZtb2RlID0gIjAlbyIgJSBzZWxmLmZtb2RlCisgICAgICAgICAgICAgICAgdWlkID0gc2VsZi5fbWFwdWdpZChzZWxmLnVpZCkKKyAgICAgICAgICAgICAgICBnaWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZ2lkKQorICAgICAgICAgICAgICAgIGZ1aWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZnVpZCkKKyAgICAgICAgICAgICAgICBmZ2lkID0gc2VsZi5fbWFwdWdpZChzZWxmLmZnaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuICIlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyIgJSAoc2VsZi5wYXRoLCBtb2RlLCB1aWQsIGdpZCwgc2VsZi53YWxrLCBmbW9kZSwgZnVpZCwgZmdpZCkKKworICAgICAgICBkZWYgX21hcHVnaWQoc2VsZiwgaWQpOgorICAgICAgICAgICAgaWYgaWQgaXMgTm9uZSBvciBpZCA9PSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gIi0iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJWQiICUgaWQKKworICAgICMgRml4IHRoZSBwZXJtaXNzaW9uLCBvd25lciBhbmQgZ3JvdXAgb2YgcGF0aAorICAgIGRlZiBmaXhfcGVybXMocGF0aCwgbW9kZSwgdWlkLCBnaWQsIGRpcik6CisgICAgICAgIGlmIG1vZGUgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICNiYi5ub3RlKCJGaXh1cCBQZXJtczogY2htb2QgMCVvICVzIiAlIChtb2RlLCBkaXIpKQorICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKKyAgICAgICAgIyAtMSBpcyBhIHNwZWNpYWwgdmFsdWUgdGhhdCBtZWFucyBkb24ndCBjaGFuZ2UgdGhlIHVpZC9naWQKKyAgICAgICAgIyBpZiB0aGV5IGFyZSBCT1RIIC0xLCBkb24ndCBib3RoZXIgdG8gbGNob3duCisgICAgICAgIGlmIG5vdCAodWlkID09IC0xIGFuZCBnaWQgPT0gLTEpOgorICAgICAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBsY2hvd24gJWQ6JWQgJXMiICUgKHVpZCwgZ2lkLCBkaXIpKQorICAgICAgICAgICAgb3MubGNob3duKHBhdGgsIHVpZCwgZ2lkKQorCisgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgIyBmaWxlcy9mcy1wZXJtcy50eHQgb3IgdGhlIGNvbnRlbnRzIG9mIEZJTEVTWVNURU1fUEVSTVNfVEFCTEVTCisgICAgIyBwYXRocyBhcmUgcmVzb2x2ZWQgdmlhIEJCUEFUSAorICAgIGRlZiBnZXRfZnNfcGVybXNfbGlzdChkKToKKyAgICAgICAgc3RyID0gIiIKKyAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgIGZzX3Blcm1zX3RhYmxlcyA9IGQuZ2V0VmFyKCdGSUxFU1lTVEVNX1BFUk1TX1RBQkxFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBmc19wZXJtc190YWJsZXM6CisgICAgICAgICAgICBmc19wZXJtc190YWJsZXMgPSAnZmlsZXMvZnMtcGVybXMudHh0JworICAgICAgICBmb3IgY29uZl9maWxlIGluIGZzX3Blcm1zX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgc3RyICs9ICIgJXMiICUgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjb25mX2ZpbGUpCisgICAgICAgIHJldHVybiBzdHIKKworCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgZnNfcGVybXNfdGFibGUgPSB7fQorCisgICAgIyBCeSBkZWZhdWx0IGFsbCBvZiB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluCisgICAgIyBiaXRiYWtlLmNvbmYgd2lsbCBnZXQgMDc1NSByb290OnJvb3QuCisgICAgdGFyZ2V0X3BhdGhfdmFycyA9IFsgICAgJ2Jhc2VfcHJlZml4JywKKyAgICAgICAgICAgICAgICAncHJlZml4JywKKyAgICAgICAgICAgICAgICAnZXhlY19wcmVmaXgnLAorICAgICAgICAgICAgICAgICdiYXNlX2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2Jhc2Vfc2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2Jhc2VfbGliZGlyJywKKyAgICAgICAgICAgICAgICAnZGF0YWRpcicsCisgICAgICAgICAgICAgICAgJ3N5c2NvbmZkaXInLAorICAgICAgICAgICAgICAgICdzZXJ2aWNlZGlyJywKKyAgICAgICAgICAgICAgICAnc2hhcmVkc3RhdGVkaXInLAorICAgICAgICAgICAgICAgICdsb2NhbHN0YXRlZGlyJywKKyAgICAgICAgICAgICAgICAnaW5mb2RpcicsCisgICAgICAgICAgICAgICAgJ21hbmRpcicsCisgICAgICAgICAgICAgICAgJ2RvY2RpcicsCisgICAgICAgICAgICAgICAgJ2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ3NiaW5kaXInLAorICAgICAgICAgICAgICAgICdsaWJleGVjZGlyJywKKyAgICAgICAgICAgICAgICAnbGliZGlyJywKKyAgICAgICAgICAgICAgICAnaW5jbHVkZWRpcicsCisgICAgICAgICAgICAgICAgJ29sZGluY2x1ZGVkaXInIF0KKworICAgIGZvciBwYXRoIGluIHRhcmdldF9wYXRoX3ZhcnM6CisgICAgICAgIGRpciA9IGQuZ2V0VmFyKHBhdGgsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGRpciA9PSAiIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZzX3Blcm1zX3RhYmxlW2Rpcl0gPSBmc19wZXJtc19lbnRyeShiYi5kYXRhLmV4cGFuZCgiJXMgMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iICUgKGRpciksIGQpKQorCisgICAgIyBOb3cgd2UgYWN0dWFsbHkgbG9hZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgZm9yIGNvbmYgaW4gZ2V0X2ZzX3Blcm1zX2xpc3QoZCkuc3BsaXQoKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICBmID0gb3Blbihjb25mKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsc3BsaXQgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4obHNwbGl0KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpICE9IDggYW5kIG5vdCAobGVuKGxzcGxpdCkgPT0gMyBhbmQgbHNwbGl0WzFdLmxvd2VyKCkgPT0gImxpbmsiKToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gIkZpeHVwIHBlcm1zOiAlcyBpbnZhbGlkIGxpbmU6ICVzIiAlIChjb25mLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGVybS1saW5lIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVudHJ5ID0gZnNfcGVybXNfZW50cnkoZC5leHBhbmQobGluZSkpCisgICAgICAgICAgICAgICAgaWYgZW50cnkgYW5kIGVudHJ5LnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGZzX3Blcm1zX3RhYmxlW2VudHJ5LnBhdGhdID0gZW50cnkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgIyBEZWJ1ZyAtLSBsaXN0IG91dCBpbi1tZW1vcnkgdGFibGUKKyAgICAjZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAjICAgIGJiLm5vdGUoIkZpeHVwIFBlcm1zOiAlczogJXMiICUgKGRpciwgc3RyKGZzX3Blcm1zX3RhYmxlW2Rpcl0pKSkKKworICAgICMgV2UgcHJvY2VzcyBsaW5rcyBmaXJzdCwgc28gd2UgY2FuIGdvIGJhY2sgYW5kIGZpeHVwIGRpcmVjdG9yeSBvd25lcnNoaXAKKyAgICAjIGZvciBhbnkgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcmllcworICAgIGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgICAgIGlmIG5vdCBmc19wZXJtc190YWJsZVtkaXJdLmxpbms6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG9yaWdpbiA9IGR2YXIgKyBkaXIKKyAgICAgICAgaWYgbm90IChjcGF0aC5leGlzdHMob3JpZ2luKSBhbmQgY3BhdGguaXNkaXIob3JpZ2luKSBhbmQgbm90IGNwYXRoLmlzbGluayhvcmlnaW4pKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbGluayA9IGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluaworICAgICAgICBpZiBsaW5rWzBdID09ICIvIjoKKyAgICAgICAgICAgIHRhcmdldCA9IGR2YXIgKyBsaW5rCisgICAgICAgICAgICBwdGFyZ2V0ID0gbGluaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcmlnaW4pLCBsaW5rKQorICAgICAgICAgICAgcHRhcmdldCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZGlyKSwgbGluaykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyZ2V0KToKKyAgICAgICAgICAgIG1zZyA9ICJGaXh1cCBQZXJtczogVW5hYmxlIHRvIGNvcnJlY3QgZGlyZWN0b3J5IGxpbmssIHRhcmdldCBhbHJlYWR5IGV4aXN0czogJXMgLT4gJXMiICUgKGRpciwgcHRhcmdldCkKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwZXJtLWxpbmsiLCBtc2csIGQpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgQ3JlYXRlIHBhdGggdG8gbW92ZSBkaXJlY3RvcnkgdG8sIG1vdmUgaXQsIGFuZCB0aGVuIHNldHVwIHRoZSBzeW1saW5rCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUodGFyZ2V0KSkKKyAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBSZW5hbWUgJXMgLT4gJXMiICUgKGRpciwgcHRhcmdldCkpCisgICAgICAgIG9zLnJlbmFtZShvcmlnaW4sIHRhcmdldCkKKyAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBMaW5rICVzIC0+ICVzIiAlIChkaXIsIGxpbmspKQorICAgICAgICBvcy5zeW1saW5rKGxpbmssIG9yaWdpbikKKworICAgIGZvciBkaXIgaW4gZnNfcGVybXNfdGFibGU6CisgICAgICAgIGlmIGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluazoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgb3JpZ2luID0gZHZhciArIGRpcgorICAgICAgICBpZiBub3QgKGNwYXRoLmV4aXN0cyhvcmlnaW4pIGFuZCBjcGF0aC5pc2RpcihvcmlnaW4pKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZml4X3Blcm1zKG9yaWdpbiwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKKworICAgICAgICBpZiBmc19wZXJtc190YWJsZVtkaXJdLndhbGsgPT0gJ3RydWUnOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3JpZ2luKToKKyAgICAgICAgICAgICAgICBmb3IgZHIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZWFjaF9kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZHIpCisgICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2RpciwgZnNfcGVybXNfdGFibGVbZGlyXS5tb2RlLCBmc19wZXJtc190YWJsZVtkaXJdLnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5naWQsIGRpcikKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgZWFjaF9maWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgICAgIGZpeF9wZXJtcyhlYWNoX2ZpbGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0uZnVpZCwgZnNfcGVybXNfdGFibGVbZGlyXS5mZ2lkLCBkaXIpCit9CisKK3B5dGhvbiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgKCkgeworICAgIGltcG9ydCBzdGF0LCBlcnJubworCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICAjIFdlIGRlZmF1bHQgdG8gJy5kZWJ1Zycgc3R5bGUKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1maWxlLWRpcmVjdG9yeSc6CisgICAgICAgICMgU2luZ2xlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IHN0eWxlIGRlYnVnIGluZm8KKyAgICAgICAgZGVidWdhcHBlbmQgPSAiLmRlYnVnIgorICAgICAgICBkZWJ1Z2RpciA9ICIiCisgICAgICAgIGRlYnVnbGliZGlyID0gIi91c3IvbGliL2RlYnVnIgorICAgICAgICBkZWJ1Z3NyY2RpciA9ICIvdXNyL3NyYy9kZWJ1ZyIKKyAgICBlbGlmIGQuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJywgVHJ1ZSkgPT0gJ2RlYnVnLXdpdGhvdXQtc3JjJzoKKyAgICAgICAgIyBPcmlnaW5hbCBPRS1jb3JlLCBhLmsuYS4gIi5kZWJ1ZyIsIHN0eWxlIGRlYnVnIGluZm8sIGJ1dCB3aXRob3V0IHNvdXJjZXMgaW4gL3Vzci9zcmMvZGVidWcKKyAgICAgICAgZGVidWdhcHBlbmQgPSAiIgorICAgICAgICBkZWJ1Z2RpciA9ICIvLmRlYnVnIgorICAgICAgICBkZWJ1Z2xpYmRpciA9ICIiCisgICAgICAgIGRlYnVnc3JjZGlyID0gIiIKKyAgICBlbHNlOgorICAgICAgICAjIE9yaWdpbmFsIE9FLWNvcmUsIGEuay5hLiAiLmRlYnVnIiwgc3R5bGUgZGVidWcgaW5mbworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCisgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCisgICAgICAgIGRlYnVnbGliZGlyID0gIiIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiL3Vzci9zcmMvZGVidWciCisKKyAgICBzb3VyY2VmaWxlID0gZC5leHBhbmQoIiR7V09SS0RJUn0vZGVidWdzb3VyY2VzLmxpc3QiKQorICAgIGJiLnV0aWxzLnJlbW92ZShzb3VyY2VmaWxlKQorCisgICAgb3MuY2hkaXIoZHZhcikKKworICAgICMgUmV0dXJuIHR5cGUgKGJpdHMpOgorICAgICMgMCAtIG5vdCBlbGYKKyAgICAjIDEgLSBFTEYKKyAgICAjIDIgLSBzdHJpcHBlZAorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisgICAgZGVmIGlzRUxGKHBhdGgpOgorICAgICAgICB0eXBlID0gMAorICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiZmlsZSBcIiVzXCIiICUgcGF0aC5yZXBsYWNlKCJcIiIsICJcXFwiIikpCisKKyAgICAgICAgaWYgcmV0OgorICAgICAgICAgICAgbXNnID0gInNwbGl0X2FuZF9zdHJpcF9maWxlczogJ2ZpbGUgJXMnIGZhaWxlZCIgJSBwYXRoCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigic3BsaXQtc3RyaXAiLCBtc2csIGQpCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgICMgTm90IHN0cmlwcGVkCisgICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHR5cGUgfD0gMQorICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA0CisgICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA4CisgICAgICAgIHJldHVybiB0eXBlCisKKworICAgICMKKyAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MgLi4uIGRvIHRoaXMgb25seSBvbmNlIQorICAgICMKKyAgICBlbGZmaWxlcyA9IHt9CisgICAgc3ltbGlua3MgPSB7fQorICAgIGtlcm5tb2RzID0gW10KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIsIFRydWUpKQorICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoZHZhcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLmtvIikgYW5kIGZpbGUuZmluZCgiL2xpYi9tb2R1bGVzLyIpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBrZXJubW9kcy5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICMgU2tpcCBkZWJ1ZyBmaWxlcworICAgICAgICAgICAgICAgIGlmIGRlYnVnYXBwZW5kIGFuZCBmaWxlLmVuZHN3aXRoKGRlYnVnYXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkZWJ1Z2RpciBhbmQgZGVidWdkaXIgaW4gb3MucGF0aC5kaXJuYW1lKGZpbGVbbGVuKGR2YXIpOl0pOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsdGFyZ2V0ID0gY3BhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHMgPSBjcGF0aC5sc3RhdChsdGFyZ2V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQorICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpZiBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNFTEYobHRhcmdldCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlN5bTogJXMgKCVkKSIgJSAobHRhcmdldCwgaXNFTEYobHRhcmdldCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzW2ZpbGVdID0gdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICMgSXQncyBhIGZpbGUgKG9yIGhhcmRsaW5rKSwgbm90IGEgbGluaworICAgICAgICAgICAgICAgICAgICAjIC4uLmJ1dCBpcyBpdCBFTEYsIGFuZCBpcyBpdCBhbHJlYWR5IHN0cmlwcGVkPworICAgICAgICAgICAgICAgICAgICBlbGZfZmlsZSA9IGlzRUxGKGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVsZl9maWxlICYgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnYWxyZWFkeS1zdHJpcHBlZCcgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJTa2lwcGluZyBmaWxlICVzIGZyb20gJXMgZm9yIGFscmVhZHktc3RyaXBwZWQgUUEgdGVzdCIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJGaWxlICclcycgZnJvbSAlcyB3YXMgYWxyZWFkeSBzdHJpcHBlZCwgdGhpcyB3aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEiICUgKGZpbGVbbGVuKGR2YXIpOl0sIHBuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiYWxyZWFkeS1zdHJpcHBlZCIsIG1zZywgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiB1bnN0cmlwcGVkIGVsZiBmaWxlLiBXZSBuZWVkIHRvOgorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYSkgTWFrZSBzdXJlIGFueSBmaWxlIHdlIHN0cmlwIGlzIG5vdCBoYXJkbGlua2VkIHRvIGFueXRoaW5nIGVsc2Ugb3V0c2lkZSB0aGlzIHRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGIpIE9ubHkgc3RyaXAgYW55IGhhcmRsaW5rZWQgZmlsZSBvbmNlIChubyByYWNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICMgIGMpIFRyYWNrIGFueSBoYXJkbGlua3MgYmV0d2VlbiBmaWxlcyBzbyB0aGF0IHdlIGNhbiByZWNvbnN0cnVjdCBtYXRjaGluZyBkZWJ1ZyBmaWxlIGhhcmRsaW5rcworCisgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZSBhIHJlZmVyZW5jZSBvZiBkZXZpY2UgSUQgYW5kIGlub2RlIG51bWJlciB0byBpbmRlbnRpZnkgZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcmVmZXJlbmNlID0gIiVkXyVkIiAlIChzLnN0X2Rldiwgcy5zdF9pbm8pCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWxlX3JlZmVyZW5jZSBpbiBpbm9kZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluayhpbm9kZXNbZmlsZV9yZWZlcmVuY2VdWzBdLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tmaWxlX3JlZmVyZW5jZV0uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tmaWxlX3JlZmVyZW5jZV0gPSBbZmlsZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIGhhcmRsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAjIE1vZGlmaWVkIHRoZSBmaWxlIHNvIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgY3BhdGgudXBkYXRlY2FjaGUoZmlsZSkKKworICAgICMKKyAgICAjIEZpcnN0IGxldHMgcHJvY2VzcyBkZWJ1ZyBzcGxpdHRpbmcKKyAgICAjCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorCisgICAgICAgICAgICAjIFNwbGl0IHRoZSBmaWxlLi4uCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICNiYi5ub3RlKCJTcGxpdCAlcyAtPiAlcyIgJSAoZmlsZSwgZnBhdGgpKQorICAgICAgICAgICAgIyBPbmx5IHN0b3JlIG9mZiB0aGUgaGFyZCBsaW5rIHJlZmVyZW5jZSBpZiB3ZSBzdWNjZXNzZnVsbHkgc3BsaXQhCisgICAgICAgICAgICBzcGxpdGRlYnVnaW5mbyhmaWxlLCBmcGF0aCwgZGVidWdzcmNkaXIsIHNvdXJjZWZpbGUsIGQpCisKKyAgICAgICAgIyBIYXJkbGluayBvdXIgZGVidWcgc3ltYm9scyB0byB0aGUgb3RoZXIgaGFyZGxpbmsgY29waWVzCisgICAgICAgIGZvciByZWYgaW4gaW5vZGVzOgorICAgICAgICAgICAgaWYgbGVuKGlub2Rlc1tyZWZdKSA9PSAxOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBpbm9kZXNbcmVmXVsxOl06CisgICAgICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgICAgIGZwYXRoID0gZHZhciArIGRlc3QKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBpbm9kZXNbcmVmXVswXVtsZW4oZHZhcik6XQorICAgICAgICAgICAgICAgIGZ0YXJnZXQgPSBkdmFyICsgZGVidWdsaWJkaXIgKyBvcy5wYXRoLmRpcm5hbWUodGFyZ2V0KSArIGRlYnVnZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZSh0YXJnZXQpICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGZwYXRoKSkKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiTGluayAlcyAtPiAlcyIgJSAoZnBhdGgsIGZ0YXJnZXQpKQorICAgICAgICAgICAgICAgIG9zLmxpbmsoZnRhcmdldCwgZnBhdGgpCisKKyAgICAgICAgIyBDcmVhdGUgc3ltbGlua3MgZm9yIGFsbCBjYXNlcyB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc3ltYm9scworICAgICAgICBmb3IgZmlsZSBpbiBzeW1saW5rczoKKyAgICAgICAgICAgIHNyYyA9IGZpbGVbbGVuKGR2YXIpOl0KKyAgICAgICAgICAgIGRlc3QgPSBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZShzcmMpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHNyYykgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorICAgICAgICAgICAgIyBTa2lwIGl0IGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAoZXJyLCBzdHJlcnJvcikgPSBlLmFyZ3MKKyAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGx0YXJnZXQgPSBzeW1saW5rc1tmaWxlXQorICAgICAgICAgICAgbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUobHRhcmdldCkKKyAgICAgICAgICAgIGxiYXNlID0gb3MucGF0aC5iYXNlbmFtZShsdGFyZ2V0KQorICAgICAgICAgICAgZnRhcmdldCA9ICIiCisgICAgICAgICAgICBpZiBscGF0aCBhbmQgbHBhdGggIT0gIi4iOgorICAgICAgICAgICAgICAgIGZ0YXJnZXQgKz0gbHBhdGggKyBkZWJ1Z2RpciArICIvIgorICAgICAgICAgICAgZnRhcmdldCArPSBsYmFzZSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBpZiBscGF0aC5zdGFydHN3aXRoKCIuLiIpOgorICAgICAgICAgICAgICAgIGZ0YXJnZXQgPSBvcy5wYXRoLmpvaW4oIi4uIiwgZnRhcmdldCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN5bWxpbmsgJXMgLT4gJXMiICUgKGZwYXRoLCBmdGFyZ2V0KSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoZnRhcmdldCwgZnBhdGgpCisKKyAgICAgICAgIyBQcm9jZXNzIHRoZSBkZWJ1Z3NyY2RpciBpZiByZXF1ZXN0ZWQuLi4KKyAgICAgICAgIyBUaGlzIGNvcGllcyBhbmQgcGxhY2VzIHRoZSByZWZlcmVuY2VkIHNvdXJjZXMgZm9yIGxhdGVyIGRlYnVnZ2luZy4uLgorICAgICAgICBjb3B5ZGVidWdzb3VyY2VzKGRlYnVnc3JjZGlyLCBkKQorICAgICMKKyAgICAjIEVuZCBvZiBkZWJ1ZyBzcGxpdHRpbmcKKyAgICAjCisKKyAgICAjCisgICAgIyBOb3cgbGV0cyBnbyBiYWNrIG92ZXIgdGhpbmdzIGFuZCBzdHJpcCB0aGVtCisgICAgIworICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9QQUNLQUdFX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBzZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN0cmlwICVzIiAlIGZpbGUpCisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXApKQorICAgICAgICBmb3IgZiBpbiBrZXJubW9kczoKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGYsIDE2LCBzdHJpcCkpCisKKyAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoc2ZpbGVzLCBvZS5wYWNrYWdlLnJ1bnN0cmlwKQorCisgICAgIworICAgICMgRW5kIG9mIHN0cmlwCisgICAgIworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXMgKCkgeworICAgIGltcG9ydCBnbG9iLCByZQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG91dGRpcikKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBTYW5pdHkgY2hlY2sgUEFDS0FHRVMgZm9yIGR1cGxpY2F0ZXMKKyAgICAjIFNhbml0eSBzaG91bGQgYmUgbW92ZWQgdG8gc2FuaXR5LmJiY2xhc3Mgb25jZSB3ZSBoYXZlIHRoZSBpbmZyYXN0dWN0dXJlCisgICAgcGFja2FnZV9saXN0ID0gW10KKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgICAgIG1zZyA9ICIlcyBpcyBsaXN0ZWQgaW4gUEFDS0FHRVMgbXVsdGlwbGUgdGltZXMsIHRoaXMgbGVhZHMgdG8gcGFja2FnaW5nIGVycm9ycy4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGFja2FnZXMtbGlzdCIsIG1zZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfbGlzdC5hcHBlbmQocGtnKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VfbGlzdCkpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHNlZW4gPSBbXQorCisgICAgIyBvcy5ta2RpciBtYXNrcyB0aGUgcGVybWlzc2lvbnMgd2l0aCB1bWFzayBzbyB3ZSBoYXZlIHRvIHVuc2V0IGl0IGZpcnN0CisgICAgb2xkdW1hc2sgPSBvcy51bWFzaygwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlX2xpc3Q6CisgICAgICAgIHJvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocm9vdCkKKworICAgICAgICBmaWxlc3ZhciA9IGQuZ2V0VmFyKCdGSUxFU18lcycgJSBwa2csIFRydWUpIG9yICIiCisgICAgICAgIGlmICIvLyIgaW4gZmlsZXN2YXI6CisgICAgICAgICAgICBtc2cgPSAiRklMRVMgdmFyaWFibGUgZm9yIHBhY2thZ2UgJXMgY29udGFpbnMgJy8vJyB3aGljaCBpcyBpbnZhbGlkLiBBdHRlbXB0aW5nIHRvIGZpeCB0aGlzIGJ1dCB5b3Ugc2hvdWxkIGNvcnJlY3QgdGhlIG1ldGFkYXRhLlxuIiAlIHBrZworICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImZpbGVzLWludmFsaWQiLCBtc2csIGQpCisgICAgICAgICAgICBmaWxlc3Zhci5yZXBsYWNlKCIvLyIsICIvIikKKworICAgICAgICBvcmlnZmlsZXMgPSBmaWxlc3Zhci5zcGxpdCgpCisgICAgICAgIGZpbGVzID0gZmlsZXNfZnJvbV9maWxldmFycyhvcmlnZmlsZXMpCisKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiAobm90IGNwYXRoLmlzbGluayhmaWxlKSkgYW5kIChub3QgY3BhdGguZXhpc3RzKGZpbGUpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWVuLmFwcGVuZChmaWxlKQorCisgICAgICAgICAgICBkZWYgbWtkaXIoc3JjLCBkZXN0LCBwKToKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oc3JjLCBwKQorICAgICAgICAgICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oZGVzdCwgcCkKKyAgICAgICAgICAgICAgICBmc3RhdCA9IGNwYXRoLnN0YXQoc3JjKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRlc3QsIGZzdGF0LnN0X21vZGUpCisgICAgICAgICAgICAgICAgb3MuY2hvd24oZGVzdCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCisgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICBjcGF0aC51cGRhdGVjYWNoZShkZXN0KQorCisgICAgICAgICAgICBkZWYgbWtkaXJfcmVjdXJzZShzcmMsIGRlc3QsIHBhdGhzKToKKyAgICAgICAgICAgICAgICBpZiBjcGF0aC5leGlzdHMoZGVzdCArICcvJyArIHBhdGhzKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgd2hpbGUgcGF0aHMuc3RhcnRzd2l0aCgiLi8iKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBwYXRoc1syOl0KKyAgICAgICAgICAgICAgICBwID0gIi4iCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcGF0aHMuc3BsaXQoIi8iKToKKyAgICAgICAgICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihwLCBjKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3BhdGguZXhpc3RzKG9zLnBhdGguam9pbihkZXN0LCBwKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBta2RpcihzcmMsIGRlc3QsIHApCisKKyAgICAgICAgICAgIGlmIGNwYXRoLmlzZGlyKGZpbGUpIGFuZCBub3QgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgIG1rZGlyX3JlY3Vyc2UoZHZhciwgcm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBta2Rpcl9yZWN1cnNlKGR2YXIsIHJvb3QsIG9zLnBhdGguZGlybmFtZShmaWxlKSkKKyAgICAgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgb3MubGluayhmaWxlLCBmcGF0aCkKKyAgICAgICAgICAgICAgICBmc3RhdCA9IGNwYXRoLnN0YXQoZmlsZSkKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChmcGF0aCwgZnN0YXQuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICBvcy5jaG93bihmcGF0aCwgZnN0YXQuc3RfdWlkLCBmc3RhdC5zdF9naWQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJldCA9IGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZwYXRoKQorICAgICAgICAgICAgaWYgcmV0IGlzIEZhbHNlIG9yIHJldCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkZpbGUgcG9wdWxhdGlvbiBmYWlsZWQiKQorCisgICAgb3MudW1hc2sob2xkdW1hc2spCisgICAgb3MuY2hkaXIod29ya2RpcikKKworICAgICMgSGFuZGxlIExJQ0VOU0VfRVhDTFVTSU9OCisgICAgcGFja2FnZV9saXN0ID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdMSUNFTlNFX0VYQ0xVU0lPTi0nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIG1zZyA9ICIlcyBoYXMgYW4gaW5jb21wYXRpYmxlIGxpY2Vuc2UuIEV4Y2x1ZGluZyBmcm9tIHBhY2thZ2luZy4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5jb21wYXRpYmxlLWxpY2Vuc2UiLCBtc2csIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYWNrYWdlX2xpc3QuYXBwZW5kKHBrZykKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlX2xpc3QpKQorCisgICAgdW5zaGlwcGVkID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhkdmFyKToKKyAgICAgICAgZGlyID0gcm9vdFtsZW4oZHZhcik6XQorICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgZGlyID0gb3Muc2VwCisgICAgICAgIGZvciBmIGluIChmaWxlcyArIGRpcnMpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXIsIGYpCisgICAgICAgICAgICBpZiAoJy4nICsgcGF0aCkgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgdW5zaGlwcGVkLmFwcGVuZChwYXRoKQorCisgICAgaWYgdW5zaGlwcGVkICE9IFtdOgorICAgICAgICBtc2cgPSBwbiArICI6IEZpbGVzL2RpcmVjdG9yaWVzIHdlcmUgaW5zdGFsbGVkIGJ1dCBub3Qgc2hpcHBlZCBpbiBhbnkgcGFja2FnZToiCisgICAgICAgIGlmICJpbnN0YWxsZWQtdnMtc2hpcHBlZCIgaW4gKGQuZ2V0VmFyKCdJTlNBTkVfU0tJUF8nICsgcG4sIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBRQSB0ZXN0czogaW5zdGFsbGVkLXZzLXNoaXBwZWQiICUgcG4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgZiBpbiB1bnNoaXBwZWQ6CisgICAgICAgICAgICAgICAgbXNnID0gbXNnICsgIlxuICAiICsgZgorICAgICAgICAgICAgbXNnID0gbXNnICsgIlxuUGxlYXNlIHNldCBGSUxFUyBzdWNoIHRoYXQgdGhlc2UgaXRlbXMgYXJlIHBhY2thZ2VkLiBBbHRlcm5hdGl2ZWx5IGlmIHRoZXkgYXJlIHVubmVlZGVkLCBhdm9pZCBpbnN0YWxsaW5nIHRoZW0gb3IgZGVsZXRlIHRoZW0gd2l0aGluIGRvX2luc3RhbGwuIgorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImluc3RhbGxlZC12cy1zaGlwcGVkIiwgbXNnLCBkKQorfQorcG9wdWxhdGVfcGFja2FnZXNbZGlyc10gPSAiJHtEfSIKKworcHl0aG9uIHBhY2thZ2VfZml4c3ltbGlua3MgKCkgeworICAgIGltcG9ydCBlcnJubworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRVMiLCBGYWxzZSkuc3BsaXQoKQorCisgICAgZGFuZ2xpbmdfbGlua3MgPSB7fQorICAgIHBrZ19maWxlcyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgZGFuZ2xpbmdfbGlua3NbcGtnXSA9IFtdCisgICAgICAgIHBrZ19maWxlc1twa2ddID0gW10KKyAgICAgICAgaW5zdF9yb290ID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgZm9yIHBhdGggaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgICAgICBycGF0aCA9IHBhdGhbbGVuKGluc3Rfcm9vdCk6XQorICAgICAgICAgICAgICAgIHBrZ19maWxlc1twa2ddLmFwcGVuZChycGF0aCkKKyAgICAgICAgICAgICAgICBydGFyZ2V0ID0gY3BhdGgucmVhbHBhdGgocGF0aCwgaW5zdF9yb290LCBUcnVlLCBhc3N1bWVfZGlyID0gVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY3BhdGgubGV4aXN0cyhydGFyZ2V0KToKKyAgICAgICAgICAgICAgICAgICAgZGFuZ2xpbmdfbGlua3NbcGtnXS5hcHBlbmQob3MucGF0aC5ub3JtcGF0aChydGFyZ2V0W2xlbihpbnN0X3Jvb3QpOl0pKQorCisgICAgbmV3cmRlcGVuZHMgPSB7fQorICAgIGZvciBwa2cgaW4gZGFuZ2xpbmdfbGlua3M6CisgICAgICAgIGZvciBsIGluIGRhbmdsaW5nX2xpbmtzW3BrZ106CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXMgY29udGFpbnMgZGFuZ2xpbmcgbGluayAlcyIgJSAocGtnLCBsKSkKKyAgICAgICAgICAgIGZvciBwIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgIGlmIGwgaW4gcGtnX2ZpbGVzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAidGFyZ2V0IGZvdW5kIGluICVzIiAlIHApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwID09IHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBuZXdyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZGVwZW5kc1twa2ddID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JkZXBlbmRzW3BrZ10uYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZm91bmQgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgY29udGFpbnMgZGFuZ2xpbmcgc3ltbGluayB0byAlcyIgJSAocGtnLCBsKSkKKworICAgIGZvciBwa2cgaW4gbmV3cmRlcGVuZHM6CisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKyAgICAgICAgZm9yIHAgaW4gbmV3cmRlcGVuZHNbcGtnXToKKyAgICAgICAgICAgIGlmIHAgbm90IGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIHJkZXBlbmRzW3BdID0gW10KKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorfQorCisKK3B5dGhvbiBwYWNrYWdlX3BhY2thZ2VfbmFtZV9ob29rKCkgeworICAgICIiIgorICAgIEEgcGFja2FnZV9uYW1lX2hvb2sgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmV3cml0ZSB0aGUgcGFja2FnZSBuYW1lcyBieQorICAgIGNoYW5naW5nIFBLRy4gIEZvciBhbiBleGFtcGxlLCBzZWUgZGViaWFuLmJiY2xhc3MuCisgICAgIiIiCisgICAgcGFzcworfQorCitFWFBPUlRfRlVOQ1RJT05TIHBhY2thZ2VfbmFtZV9ob29rCisKKworUEtHREVTVFdPUksgPSAiJHtXT1JLRElSfS9wa2dkYXRhIgorCitweXRob24gZW1pdF9wa2dkYXRhKCkgeworICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCBqc29uCisKKyAgICBkZWYgd3JpdGVfaWZfZXhpc3RzKGYsIHBrZywgdmFyKToKKyAgICAgICAgZGVmIGVuY29kZShzdHIpOgorICAgICAgICAgICAgaW1wb3J0IGNvZGVjcworICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXRlbmNvZGVyKCJzdHJpbmdfZXNjYXBlIikKKyAgICAgICAgICAgIHJldHVybiBjKHN0cilbMF0KKworICAgICAgICB2YWwgPSBkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZi53cml0ZSgnJXNfJXM6ICVzXG4nICUgKHZhciwgcGtnLCBlbmNvZGUodmFsKSkpCisgICAgICAgICAgICByZXR1cm4gdmFsCisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKCclcycgJSAodmFyKSwgVHJ1ZSkKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgZi53cml0ZSgnJXM6ICVzXG4nICUgKHZhciwgZW5jb2RlKHZhbCkpKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICBkZWYgd3JpdGVfZXh0cmFfcGtncyh2YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKToKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzLyVzLSVzIiAlIChwa2dkYXRhZGlyLCB2YXJpYW50LCBwbiksICd3JykgYXMgZmQ6CisgICAgICAgICAgICAgICAgZmQud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlICcgJy5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChsYW1iZGEgcGtnOiAnJXMtJXMnICUgKHZhcmlhbnQsIHBrZyksIHBhY2thZ2VzLnNwbGl0KCkpKSkKKworICAgIGRlZiB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3ModmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKToKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgbWxfcGtnID0gIiVzLSVzIiAlICh2YXJpYW50LCBwa2cpCisgICAgICAgICAgICAgICAgc3ViZGF0YV9maWxlID0gIiVzL3J1bnRpbWUvJXMiICUgKHBrZ2RhdGFkaXIsIG1sX3BrZykKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3ViZGF0YV9maWxlLCAndycpIGFzIGZkOgorICAgICAgICAgICAgICAgICAgICBmZC53cml0ZSgiUEtHXyVzOiAlcyIgJSAobWxfcGtnLCBwa2cpKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dERVNUV09SSycsIFRydWUpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IiksIFRydWUpCisKKyAgICBkYXRhX2ZpbGUgPSBwa2dkYXRhZGlyICsgZC5leHBhbmQoIi8ke1BOfSIgKQorICAgIGYgPSBvcGVuKGRhdGFfZmlsZSwgJ3cnKQorICAgIGYud3JpdGUoIlBBQ0tBR0VTOiAlc1xuIiAlIHBhY2thZ2VzKQorICAgIGYuY2xvc2UoKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGdsb2JhbF92YXJpYW50cyA9IChkLmdldFZhcignTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJpYW50cyA9IChkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcGtncyh2YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgaWYgKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcGtncyhnbG9iYWxfdmFyaWFudHMsIHBuLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ3ZhbCA9IGQuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBwa2d2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHBrZ3ZhbCA9IHBrZworICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18lcycgJSBwa2csIHBrZykKKworICAgICAgICBwa2dkZXN0cGtnID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICB0b3RhbF9zaXplID0gMAorICAgICAgICBmb3IgZiBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgcmVscHRoID0gb3MucGF0aC5yZWxwYXRoKGYsIHBrZ2Rlc3Rwa2cpCisgICAgICAgICAgICBmc3RhdCA9IG9zLmxzdGF0KGYpCisgICAgICAgICAgICB0b3RhbF9zaXplICs9IGZzdGF0LnN0X3NpemUKKyAgICAgICAgICAgIGZpbGVzW29zLnNlcCArIHJlbHB0aF0gPSBmc3RhdC5zdF9zaXplCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU19JTkZPJywganNvbi5kdW1wcyhmaWxlcykpCisKKyAgICAgICAgc3ViZGF0YV9maWxlID0gcGtnZGF0YWRpciArICIvcnVudGltZS8lcyIgJSBwa2cKKyAgICAgICAgc2YgPSBvcGVuKHN1YmRhdGFfZmlsZSwgJ3cnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BOJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQRScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUFYnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BSJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dWJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQS0dSJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdMSUNFTlNFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdERVNDUklQVElPTicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnU1VNTUFSWScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUkRFUEVORFMnKQorICAgICAgICBycHJvdiA9IHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlBST1ZJREVTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUkVDT01NRU5EUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUlNVR0dFU1RTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUkVQTEFDRVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JDT05GTElDVFMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1NFQ1RJT04nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLRycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnQUxMT1dfRU1QVFknKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcG9zdGluc3QnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wb3N0cm0nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wcmVpbnN0JykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdwa2dfcHJlcm0nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSUFJPVklERVNGTElTVCcpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVNfSU5GTycpCisgICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVSUFJPVklERVNGTElTVF8nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJQUk9WSURFU18nICsgZGZpbGUpCisKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNGTElTVCcpCisgICAgICAgIGZvciBkZmlsZSBpbiAoZC5nZXRWYXIoJ0ZJTEVSREVQRU5EU0ZMSVNUXycgKyBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUkRFUEVORFNfJyArIGRmaWxlKQorCisgICAgICAgIHNmLndyaXRlKCclc18lczogJWRcbicgJSAoJ1BLR1NJWkUnLCBwa2csIHRvdGFsX3NpemUpKQorICAgICAgICBzZi5jbG9zZSgpCisKKyAgICAgICAgIyBTeW1saW5rcyBuZWVkZWQgZm9yIHJwcm92aWRlcyBsb29rdXAKKyAgICAgICAgaWYgcnByb3Y6CisgICAgICAgICAgICBmb3IgcCBpbiBycHJvdi5zdHJpcCgpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3ViZGF0YV9zeW0gPSBwa2dkYXRhZGlyICsgIi9ydW50aW1lLXJwcm92aWRlcy8lcy8lcyIgJSAocCwgcGtnKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc3ViZGF0YV9zeW0pKQorICAgICAgICAgICAgICAgIG9lLnBhdGguc3ltbGluaygiLi4vLi4vcnVudGltZS8lcyIgJSBwa2csIHN1YmRhdGFfc3ltLCBUcnVlKQorCisgICAgICAgIGFsbG93X2VtcHR5ID0gZC5nZXRWYXIoJ0FMTE9XX0VNUFRZXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGFsbG93X2VtcHR5OgorICAgICAgICAgICAgYWxsb3dfZW1wdHkgPSBkLmdldFZhcignQUxMT1dfRU1QVFknLCBUcnVlKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGcgPSBnbG9iKCcqJykKKyAgICAgICAgaWYgZyBvciBhbGxvd19lbXB0eSA9PSAiMSI6CisgICAgICAgICAgICAjIFN5bWxpbmtzIG5lZWRlZCBmb3IgcmV2ZXJzZSBsb29rdXBzIChmcm9tIHRoZSBmaW5hbCBwYWNrYWdlIG5hbWUpCisgICAgICAgICAgICBzdWJkYXRhX3N5bSA9IHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUtcmV2ZXJzZS8lcyIgJSBwa2d2YWwKKyAgICAgICAgICAgIG9lLnBhdGguc3ltbGluaygiLi4vcnVudGltZS8lcyIgJSBwa2csIHN1YmRhdGFfc3ltLCBUcnVlKQorCisgICAgICAgICAgICBwYWNrYWdlZGZpbGUgPSBwa2dkYXRhZGlyICsgJy9ydW50aW1lLyVzLnBhY2thZ2VkJyAlIHBrZworICAgICAgICAgICAgb3BlbihwYWNrYWdlZGZpbGUsICd3JykuY2xvc2UoKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBkKToKKyAgICAgICAgd3JpdGVfZXh0cmFfcnVudGltZV9wa2dzKHZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3MoZ2xvYmFsX3ZhcmlhbnRzLCBwYWNrYWdlcywgcGtnZGF0YWRpcikKKworICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CitlbWl0X3BrZ2RhdGFbZGlyc10gPSAiJHtQS0dERVNUV09SS30vcnVudGltZSAke1BLR0RFU1RXT1JLfS9ydW50aW1lLXJldmVyc2UgJHtQS0dERVNUV09SS30vcnVudGltZS1ycHJvdmlkZXMiCisKK2xkY29uZmlnX3Bvc3RpbnN0X2ZyYWdtZW50KCkgeworaWYgWyB4IiREIiA9ICJ4IiBdOyB0aGVuCisJaWYgWyAteCAvc2Jpbi9sZGNvbmZpZyBdOyB0aGVuIC9zYmluL2xkY29uZmlnIDsgZmkKK2ZpCit9CisKK1JQTURFUFMgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgLS1tYWNyb3MgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9tYWNyb3MgLS1kZWZpbmUgJ19ycG1mY19tYWdpY19wYXRoICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L21pc2MvbWFnaWMubWdjJyAtLXJwbXBvcHQgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9ycG1wb3B0IgorCisjIENvbGxlY3QgcGVyZmlsZSBydW4tdGltZSBkZXBlbmRlbmN5IG1ldGFkYXRhCisjIE91dHB1dDoKKyMgIEZJTEVSUFJPVklERVNGTElTVF9wa2cgLSBsaXN0IG9mIGFsbCBmaWxlcyB3LyBkZXBzCisjICBGSUxFUlBST1ZJREVTX2ZpbGVwYXRoX3BrZyAtIHBlciBmaWxlIGRlcAorIworIyAgRklMRVJERVBFTkRTRkxJU1RfcGtnIC0gbGlzdCBvZiBhbGwgZmlsZXMgdy8gZGVwcworIyAgRklMRVJERVBFTkRTX2ZpbGVwYXRoX3BrZyAtIHBlciBmaWxlIGRlcAorCitweXRob24gcGFja2FnZV9kb19maWxlZGVwcygpIHsKKyAgICBpZiBkLmdldFZhcignU0tJUF9GSUxFREVQUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBycG1kZXBzID0gZC5nZXRWYXIoJ1JQTURFUFMnLCBUcnVlKQorCisgICAgZGVmIGNodW5rcyhmaWxlcywgbik6CisgICAgICAgIHJldHVybiBbZmlsZXNbaTppK25dIGZvciBpIGluIHJhbmdlKDAsIGxlbihmaWxlcyksIG4pXQorCisgICAgcGtnbGlzdCA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBkLmdldFZhcignU0tJUF9GSUxFREVQU18nICsgcGtnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKSBvciBwa2cuZW5kc3dpdGgoJy1kb2MnKSBvciBwa2cuZmluZCgnLWxvY2FsZS0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWxvY2FsZWRhdGEtJykgIT0gLTEgb3IgcGtnLmZpbmQoJy1nY29udi0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWNoYXJtYXAtJykgIT0gLTEgb3IgcGtnLnN0YXJ0c3dpdGgoJ2tlcm5lbC1tb2R1bGUtJyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZXMgaW4gY2h1bmtzKHBrZ2ZpbGVzW3BrZ10sIDEwMCk6CisgICAgICAgICAgICBwa2dsaXN0LmFwcGVuZCgocGtnLCBmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkpCisKKyAgICBwcm9jZXNzZWQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyggcGtnbGlzdCwgb2UucGFja2FnZS5maWxlZGVwcnVubmVyKQorCisgICAgcHJvdmlkZXNfZmlsZXMgPSB7fQorICAgIHJlcXVpcmVzX2ZpbGVzID0ge30KKworICAgIGZvciByZXN1bHQgaW4gcHJvY2Vzc2VkOgorICAgICAgICAocGtnLCBwcm92aWRlcywgcmVxdWlyZXMpID0gcmVzdWx0CisKKyAgICAgICAgaWYgcGtnIG5vdCBpbiBwcm92aWRlc19maWxlczoKKyAgICAgICAgICAgIHByb3ZpZGVzX2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBpZiBwa2cgbm90IGluIHJlcXVpcmVzX2ZpbGVzOgorICAgICAgICAgICAgcmVxdWlyZXNfZmlsZXNbcGtnXSA9IFtdCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlc19maWxlc1twa2ddLmFwcGVuZChmaWxlKQorICAgICAgICAgICAga2V5ID0gIkZJTEVSUFJPVklERVNfIiArIGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgIiAiLmpvaW4ocHJvdmlkZXNbZmlsZV0pKQorCisgICAgICAgIGZvciBmaWxlIGluIHJlcXVpcmVzOgorICAgICAgICAgICAgcmVxdWlyZXNfZmlsZXNbcGtnXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgIGtleSA9ICJGSUxFUkRFUEVORFNfIiArIGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgIiAiLmpvaW4ocmVxdWlyZXNbZmlsZV0pKQorCisgICAgZm9yIHBrZyBpbiByZXF1aXJlc19maWxlczoKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVSREVQRU5EU0ZMSVNUXyIgKyBwa2csICIgIi5qb2luKHJlcXVpcmVzX2ZpbGVzW3BrZ10pKQorICAgIGZvciBwa2cgaW4gcHJvdmlkZXNfZmlsZXM6CisgICAgICAgIGQuc2V0VmFyKCJGSUxFUlBST1ZJREVTRkxJU1RfIiArIHBrZywgIiAiLmpvaW4ocHJvdmlkZXNfZmlsZXNbcGtnXSkpCit9CisKK1NITElCU0RJUlMgPSAiJHtQS0dEQVRBX0RJUn0vJHtNTFBSRUZJWH1zaGxpYnMyIgorU0hMSUJTV09SS0RJUiA9ICIke1BLR0RFU1RXT1JLfS8ke01MUFJFRklYfXNobGliczIiCisKK3B5dGhvbiBwYWNrYWdlX2RvX3NobGlicygpIHsKKyAgICBpbXBvcnQgcmUsIHBpcGVzCisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBleGNsdWRlX3NobGlicyA9IGQuZ2V0VmFyKCdFWENMVURFX0ZST01fU0hMSUJTJywgMCkKKyAgICBpZiBleGNsdWRlX3NobGliczoKKyAgICAgICAgYmIubm90ZSgibm90IGdlbmVyYXRpbmcgc2hsaWJzIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBsaWJfcmUgPSByZS5jb21waWxlKCJeLipcLnNvIikKKyAgICBsaWJkaXJfcmUgPSByZS5jb21waWxlKCIuKi8lcyQiICUgZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKSkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICB0YXJnZXRvcyA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIHZlciA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkKKyAgICBpZiBub3QgdmVyOgorICAgICAgICBtc2cgPSAiUEtHViBub3QgZGVmaW5lZCIKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ3YtdW5kZWZpbmVkIiwgbXNnLCBkKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBzaGxpYnN3b3JrX2RpciA9IGQuZ2V0VmFyKCdTSExJQlNXT1JLRElSJywgVHJ1ZSkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSkKKworICAgIGRlZiBsaW51eF9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3Zlcik6CisgICAgICAgIG5lZWRzX2xkY29uZmlnID0gRmFsc2UKKyAgICAgICAgbGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKS5yZXBsYWNlKHBrZ2Rlc3QgKyAiLyIgKyBwa2csICcnKQorICAgICAgICBjbWQgPSBkLmdldFZhcignT0JKRFVNUCcsIFRydWUpICsgIiAtcCAiICsgcGlwZXMucXVvdGUoZmlsZSkgKyAiIDI+L2Rldi9udWxsIgorICAgICAgICBmZCA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIHJwYXRoID0gW10KKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK1JQQVRIXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBycGF0aHMgPSBtLmdyb3VwKDEpLnJlcGxhY2UoIiRPUklHSU4iLCBsZGlyKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgcnBhdGggPSBtYXAob3MucGF0aC5ub3JtcGF0aCwgcnBhdGhzKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrTkVFREVEXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkZXAgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBuZWVkZWRbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkW3BrZ10uYXBwZW5kKChkZXAsIGZpbGUsIHJwYXRoKSkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrU09OQU1FXHMrKFteXHNdKikiLCBsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICB0aGlzX3NvbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwcm92ID0gKHRoaXNfc29uYW1lLCBsZGlyLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgaWYgbm90IHByb3YgaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgIyBpZiBsaWJyYXJ5IGlzIHByaXZhdGUgKG9ubHkgdXNlZCBieSBwYWNrYWdlKSB0aGVuIGRvIG5vdCBidWlsZCBzaGxpYiBmb3IgaXQKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByaXZhdGVfbGlicyBvciB0aGlzX3NvbmFtZSBub3QgaW4gcHJpdmF0ZV9saWJzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29uYW1lcy5hcHBlbmQocHJvdikKKyAgICAgICAgICAgICAgICBpZiBsaWJkaXJfcmUubWF0Y2gob3MucGF0aC5kaXJuYW1lKGZpbGUpKToKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNfbGRjb25maWcgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc25hcF9zeW1saW5rcyBhbmQgKG9zLnBhdGguYmFzZW5hbWUoZmlsZSkgIT0gdGhpc19zb25hbWUpOgorICAgICAgICAgICAgICAgICAgICByZW5hbWVzLmFwcGVuZCgoZmlsZSwgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmaWxlKSwgdGhpc19zb25hbWUpKSkKKyAgICAgICAgcmV0dXJuIG5lZWRzX2xkY29uZmlnCisKKyAgICBkZWYgZGFyd2luX3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGxkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAnJykKKworICAgICAgICBkZWYgZ2V0X2NvbWJpbmF0aW9ucyhiYXNlKToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgR2l2ZW4gYSBiYXNlIGxpYnJhcnkgbmFtZSwgZmluZCBhbGwgY29tYmluYXRpb25zIG9mIHRoaXMgc3BsaXQgYnkgIi4iIGFuZCAiLSIKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGNvbWJvcyA9IFtdCisgICAgICAgICAgICBvcHRpb25zID0gYmFzZS5zcGxpdCgiLiIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ob3B0aW9ucykgKyAxKToKKyAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCIuIi5qb2luKG9wdGlvbnNbMDppXSkpCisgICAgICAgICAgICBvcHRpb25zID0gYmFzZS5zcGxpdCgiLSIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ob3B0aW9ucykgKyAxKToKKyAgICAgICAgICAgICAgICBjb21ib3MuYXBwZW5kKCItIi5qb2luKG9wdGlvbnNbMDppXSkpCisgICAgICAgICAgICByZXR1cm4gY29tYm9zCisKKyAgICAgICAgaWYgKGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5zbycpKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRldicpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAjIERyb3Agc3VmZml4CisgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlKS5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICAjIEZpbmQgYWxsIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgY29tYm9zID0gZ2V0X2NvbWJpbmF0aW9ucyhuYW1lKQorICAgICAgICAgICAgZm9yIGNvbWJvIGluIGNvbWJvczoKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tYm8gaW4gc29uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcHJvdiA9IChjb21ibywgbGRpciwgcGtndmVyKQorICAgICAgICAgICAgICAgICAgICBzb25hbWVzLmFwcGVuZChwcm92KQorICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcuZHlsaWInKSBvciBmaWxlLmVuZHN3aXRoKCcuc28nKToKKyAgICAgICAgICAgIHJwYXRoID0gW10KKyAgICAgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctbCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICAgICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorICAgICAgICAgICAgICAgIGZvciBsIGluIGVyci5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ3BhdGggJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBycGF0aC5hcHBlbmQobC5zcGxpdCgpWzFdKQorCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfW90b29sIiksICctTCcsIGZpbGVdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgSWYgcmV0dXJuZWQgc3VjY2VzZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCisgICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorICAgICAgICAgICAgZm9yIGwgaW4gZXJyLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIGwgPSBsLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbCBvciBsLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgImlzIG5vdCBhbiBvYmplY3QgZmlsZSIgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShsLnNwbGl0KClbMF0pLnJzcGxpdCgiLiIsIDEpWzBdCisgICAgICAgICAgICAgICAgaWYgbmFtZSBhbmQgbmFtZSBub3QgaW4gbmVlZGVkW3BrZ106CisgICAgICAgICAgICAgICAgICAgICBuZWVkZWRbcGtnXS5hcHBlbmQoKG5hbWUsIGZpbGUsIFtdKSkKKworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX1NOQVBfTElCX1NZTUxJTktTJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBzbmFwX3N5bWxpbmtzID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHNuYXBfc3ltbGlua3MgPSBGYWxzZQorCisgICAgaWYgKGQuZ2V0VmFyKCdVU0VfTERDT05GSUcnLCBUcnVlKSBvciAiMSIpID09ICIxIjoKKyAgICAgICAgdXNlX2xkY29uZmlnID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHVzZV9sZGNvbmZpZyA9IEZhbHNlCisKKyAgICBuZWVkZWQgPSB7fQorICAgIHNobGliX3Byb3ZpZGVyID0gb2UucGFja2FnZS5yZWFkX3NobGliX3Byb3ZpZGVycyhkKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwcml2YXRlX2xpYnMgPSBkLmdldFZhcignUFJJVkFURV9MSUJTXycgKyBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdQUklWQVRFX0xJQlMnLCBUcnVlKSBvciAiIgorICAgICAgICBwcml2YXRlX2xpYnMgPSBwcml2YXRlX2xpYnMuc3BsaXQoKQorICAgICAgICBuZWVkc19sZGNvbmZpZyA9IEZhbHNlCisgICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiBwcm92aWRlcyBmb3IgJXMiICUgcGtnKQorCisgICAgICAgIHBrZ3ZlciA9IGQuZ2V0VmFyKCdQS0dWXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2d2ZXI6CisgICAgICAgICAgICBwa2d2ZXIgPSBkLmdldFZhcignUFZfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ3ZlcjoKKyAgICAgICAgICAgIHBrZ3ZlciA9IHZlcgorCisgICAgICAgIG5lZWRlZFtwa2ddID0gW10KKyAgICAgICAgc29uYW1lcyA9IGxpc3QoKQorICAgICAgICByZW5hbWVzID0gbGlzdCgpCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICAgICAgc29uYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiB0YXJnZXRvcyA9PSAiZGFyd2luIiBvciB0YXJnZXRvcyA9PSAiZGFyd2luOCI6CisgICAgICAgICAgICAgICAgICAgIGRhcndpbl9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmFjY2VzcyhmaWxlLCBvcy5YX09LKSBvciBsaWJfcmUubWF0Y2goZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGxkY29uZmlnID0gbGludXhfc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgICAgIG5lZWRzX2xkY29uZmlnID0gbmVlZHNfbGRjb25maWcgb3IgbGRjb25maWcKKyAgICAgICAgZm9yIChvbGQsIG5ldykgaW4gcmVuYW1lczoKKyAgICAgICAgICAgIGJiLm5vdGUoIlJlbmFtaW5nICVzIHRvICVzIiAlIChvbGQsIG5ldykpCisgICAgICAgICAgICBvcy5yZW5hbWUob2xkLCBuZXcpCisgICAgICAgICAgICBwa2dmaWxlc1twa2ddLnJlbW92ZShvbGQpCisJICAgIAorICAgICAgICBzaGxpYnNfZmlsZSA9IG9zLnBhdGguam9pbihzaGxpYnN3b3JrX2RpciwgcGtnICsgIi5saXN0IikKKyAgICAgICAgaWYgbGVuKHNvbmFtZXMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKHNobGlic19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgcyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gc2hsaWJfcHJvdmlkZXIgYW5kIHNbMV0gaW4gc2hsaWJfcHJvdmlkZXJbc1swXV06CisgICAgICAgICAgICAgICAgICAgIChvbGRfcGtnLCBvbGRfcGtndmVyKSA9IHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dCisgICAgICAgICAgICAgICAgICAgIGlmIG9sZF9wa2cgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybignJXMtJXMgd2FzIHJlZ2lzdGVyZWQgYXMgc2hsaWIgcHJvdmlkZXIgZm9yICVzLCBjaGFuZ2luZyBpdCB0byAlcy0lcyBiZWNhdXNlIGl0IHdhcyBidWlsdCBsYXRlcicgJSAob2xkX3BrZywgb2xkX3BrZ3Zlciwgc1swXSwgcGtnLCBwa2d2ZXIpKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICdyZWdpc3RlcmluZyAlcy0lcyBhcyBzaGxpYiBwcm92aWRlciBmb3IgJXMnICUgKHBrZywgcGtndmVyLCBzWzBdKSkKKyAgICAgICAgICAgICAgICBmZC53cml0ZShzWzBdICsgJzonICsgc1sxXSArICc6JyArIHNbMl0gKyAnXG4nKQorICAgICAgICAgICAgICAgIGlmIHNbMF0gbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXSA9IHt9CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV1bc1sxXV0gPSAocGtnLCBwa2d2ZXIpCisgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIGlmIG5lZWRzX2xkY29uZmlnIGFuZCB1c2VfbGRjb25maWc6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIGxkY29uZmlnIGNhbGwgdG8gcG9zdGluc3QgZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignbGRjb25maWdfcG9zdGluc3RfZnJhZ21lbnQnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorICAgICAgICBiYi5kZWJ1ZygxLCAnTElCTkFNRVM6IHBrZyAlcyBzb25hbWVzICVzJyAlIChwa2csIHNvbmFtZXMpKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworICAgIGFzc3VtZWRfbGlicyA9IGQuZ2V0VmFyKCdBU1NVTUVfU0hMSUJTJywgVHJ1ZSkKKyAgICBpZiBhc3N1bWVkX2xpYnM6CisgICAgICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKQorICAgICAgICBmb3IgZSBpbiBhc3N1bWVkX2xpYnMuc3BsaXQoKToKKyAgICAgICAgICAgIGwsIGRlcF9wa2cgPSBlLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGxpYl92ZXIgPSBOb25lCisgICAgICAgICAgICBkZXBfcGtnID0gZGVwX3BrZy5yc3BsaXQoIl8iLCAxKQorICAgICAgICAgICAgaWYgbGVuKGRlcF9wa2cpID09IDI6CisgICAgICAgICAgICAgICAgbGliX3ZlciA9IGRlcF9wa2dbMV0KKyAgICAgICAgICAgIGRlcF9wa2cgPSBkZXBfcGtnWzBdCisgICAgICAgICAgICBpZiBsIG5vdCBpbiBzaGxpYl9wcm92aWRlcjoKKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltsXSA9IHt9CisgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltsXVtsaWJkaXJdID0gKGRlcF9wa2csIGxpYl92ZXIpCisKKyAgICBsaWJzZWFyY2hwYXRoID0gW2QuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2Jhc2VfbGliZGlyJywgVHJ1ZSldCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGJiLmRlYnVnKDIsICJjYWxjdWxhdGluZyBzaGxpYiByZXF1aXJlbWVudHMgZm9yICVzIiAlIHBrZykKKworICAgICAgICBkZXBzID0gbGlzdCgpCisgICAgICAgIGZvciBuIGluIG5lZWRlZFtwa2ddOgorICAgICAgICAgICAgIyBpZiBuIGlzIGluIHByaXZhdGUgbGlicmFyaWVzLCBkb24ndCB0cnkgdG8gc2VhcmNoIHByb3ZpZGVyIGZvciBpdAorICAgICAgICAgICAgIyB0aGlzIGNvdWxkIGNhdXNlIHByb2JsZW0gaW4gY2FzZSBzb21lIGFiYy5iYiBwcm92aWRlcyBwcml2YXRlCisgICAgICAgICAgICAjIC9vcHQvYWJjL2xpYi9saWJmb28uc28uMSBhbmQgY29udGFpbnMgL3Vzci9iaW4vYWJjIGRlcGVuZGluZyBvbiBzeXN0ZW0gbGlicmFyeSBsaWJmb28uc28uMQorICAgICAgICAgICAgIyBidXQgc2tpcHBpbmcgaXQgaXMgc3RpbGwgYmV0dGVyIGFsdGVybmF0aXZlIHRoYW4gcHJvdmlkaW5nIG93bgorICAgICAgICAgICAgIyB2ZXJzaW9uIGFuZCB0aGVuIGFkZGluZyBydW50aW1lIGRlcGVuZGVuY3kgZm9yIHRoZSBzYW1lIHN5c3RlbSBsaWJyYXJ5CisgICAgICAgICAgICBpZiBwcml2YXRlX2xpYnMgYW5kIG5bMF0gaW4gcHJpdmF0ZV9saWJzOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICclczogRGVwZW5kZW5jeSAlcyBjb3ZlcmVkIGJ5IFBSSVZBVEVfTElCUycgJSAocGtnLCBuWzBdKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgblswXSBpbiBzaGxpYl9wcm92aWRlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aCA9IGxpc3QoKQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNobGliX3Byb3ZpZGVyW25bMF1dLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJfcGF0aC5hcHBlbmQoaykKKyAgICAgICAgICAgICAgICBtYXRjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBuWzJdICsgc2hsaWJfcHJvdmlkZXJfcGF0aCArIGxpYnNlYXJjaHBhdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIHAgaW4gc2hsaWJfcHJvdmlkZXJbblswXV06CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIChkZXBfcGtnLCB2ZXJfbmVlZGVkKSA9IHNobGliX3Byb3ZpZGVyW25bMF1dW21hdGNoXQorCisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICclczogRGVwZW5kZW5jeSAlcyByZXF1aXJlcyBwYWNrYWdlICVzICh1c2VkIGJ5IGZpbGVzOiAlcyknICUgKHBrZywgblswXSwgZGVwX3BrZywgblsxXSkpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwX3BrZyA9PSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcl9uZWVkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSAiJXMgKD49ICVzKSIgJSAoZGVwX3BrZywgdmVyX25lZWRlZCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGRlcF9wa2cKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZGVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYmIubm90ZSgiQ291bGRuJ3QgZmluZCBzaGFyZWQgbGlicmFyeSBwcm92aWRlciBmb3IgJXMsIHVzZWQgYnkgZmlsZXM6ICVzIiAlIChuWzBdLCBuWzFdKSkKKworICAgICAgICBkZXBzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnICsgIi5zaGxpYmRlcHMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXBzX2ZpbGUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGRlcHNfZmlsZSkKKyAgICAgICAgaWYgbGVuKGRlcHMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGZkLndyaXRlKGRlcCArICdcbicpCisgICAgICAgICAgICBmZC5jbG9zZSgpCit9CisKK3B5dGhvbiBwYWNrYWdlX2RvX3BrZ2NvbmZpZyAoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgc2hsaWJzX2RpcnMgPSBkLmdldFZhcignU0hMSUJTRElSUycsIFRydWUpLnNwbGl0KCkKKyAgICBzaGxpYnN3b3JrX2RpciA9IGQuZ2V0VmFyKCdTSExJQlNXT1JLRElSJywgVHJ1ZSkKKworICAgIHBjX3JlID0gcmUuY29tcGlsZSgnKC4qKVwucGMkJykKKyAgICB2YXJfcmUgPSByZS5jb21waWxlKCcoLiopPSguKiknKQorICAgIGZpZWxkX3JlID0gcmUuY29tcGlsZSgnKC4qKTogKC4qKScpCisKKyAgICBwa2djb25maWdfcHJvdmlkZWQgPSB7fQorICAgIHBrZ2NvbmZpZ19uZWVkZWQgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gPSBbXQorICAgICAgICBwa2djb25maWdfbmVlZGVkW3BrZ10gPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgICAgIG0gPSBwY19yZS5tYXRjaChmaWxlKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHBkID0gYmIuZGF0YS5pbml0KCkKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10uYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihmaWxlLCAncicpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gdmFyX3JlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbS5ncm91cCgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkLnNldFZhcihuYW1lLCBwZC5leHBhbmQodmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGZpZWxkX3JlLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkciA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHAgPSBiYi5kYXRhLmV4cGFuZChtLmdyb3VwKDIpLCBwZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoZHIgPT0gJ1JlcXVpcmVzJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnY29uZmlnX25lZWRlZFtwa2ddICs9IGV4cC5yZXBsYWNlKCcsJywgJyAnKS5zcGxpdCgpCisKKyAgICAjIFRha2Ugc2hhcmVkIGxvY2sgc2luY2Ugd2UncmUgb25seSByZWFkaW5nLCBub3Qgd3JpdGluZworICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoZC5leHBhbmQoIiR7UEFDS0FHRUxPQ0t9IikpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihzaGxpYnN3b3JrX2RpciwgcGtnICsgIi5wY2xpc3QiKQorICAgICAgICBpZiBwa2djb25maWdfcHJvdmlkZWRbcGtnXSAhPSBbXToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBrZ3NfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIHAgaW4gcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ106CisgICAgICAgICAgICAgICAgZi53cml0ZSgnJXNcbicgJSBwKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjIEdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYyBzaW5jZSB0aGUgbGFzdCBvbmUgZm91bmQgd2lucworICAgIGZvciBkaXIgaW4gcmV2ZXJzZWQoc2hsaWJzX2RpcnMpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoZGlyKToKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnXiguKilcLnBjbGlzdCQnLCBmaWxlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2cgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKG9zLnBhdGguam9pbihkaXIsIGZpbGUpKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgcGtnY29uZmlnX3Byb3ZpZGVkW3BrZ10gPSBbXQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXS5hcHBlbmQobC5yc3RyaXAoKSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGZvciBuIGluIHBrZ2NvbmZpZ19uZWVkZWRbcGtnXToKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBrIGluIHBrZ2NvbmZpZ19wcm92aWRlZC5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgbiBpbiBwa2djb25maWdfcHJvdmlkZWRba106CisgICAgICAgICAgICAgICAgICAgIGlmIGsgIT0gcGtnIGFuZCBub3QgKGsgaW4gZGVwcyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGlmIGZvdW5kID09IEZhbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoImNvdWxkbid0IGZpbmQgcGtnY29uZmlnIG1vZHVsZSAnJXMnIGluIGFueSBwYWNrYWdlIiAlIG4pCisgICAgICAgIGRlcHNfZmlsZSA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cgKyAiLnBjZGVwcyIpCisgICAgICAgIGlmIGxlbihkZXBzKToKKyAgICAgICAgICAgIGZkID0gb3BlbihkZXBzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBmZC53cml0ZShkZXAgKyAnXG4nKQorICAgICAgICAgICAgZmQuY2xvc2UoKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKworZGVmIHJlYWRfbGliZGVwX2ZpbGVzKGQpOgorICAgIHBrZ2xpYmRlcHMgPSB7fQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2xpYmRlcHNbcGtnXSA9IHt9CisgICAgICAgIGZvciBleHRlbnNpb24gaW4gIi5zaGxpYmRlcHMiLCAiLnBjZGVwcyIsICIuY2xpbGliZGVwcyI6CisgICAgICAgICAgICBkZXBzZmlsZSA9IGQuZXhwYW5kKCIke1BLR0RFU1R9LyIgKyBwa2cgKyBleHRlbnNpb24pCisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MoZGVwc2ZpbGUsIG9zLlJfT0spOgorICAgICAgICAgICAgICAgIGZkID0gb3BlbihkZXBzZmlsZSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBsLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBwa2dsaWJkZXBzW3BrZ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnbGliZGVwc1twa2ddW2RlcF0gPSBkZXBzW2RlcF0KKyAgICByZXR1cm4gcGtnbGliZGVwcworCitweXRob24gcmVhZF9zaGxpYmRlcHMgKCkgeworICAgIHBrZ2xpYmRlcHMgPSByZWFkX2xpYmRlcF9maWxlcyhkKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICMgQWRkIHRoZSBkZXAgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZSwgb3IgaWYgbm8gY29tcGFyaXNvbiBpcyBzZXQKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbZGVwXSA9IFtdCisgICAgICAgICAgICBmb3IgdiBpbiBwa2dsaWJkZXBzW3BrZ11bZGVwXToKKyAgICAgICAgICAgICAgICBpZiB2IG5vdCBpbiByZGVwZW5kc1tkZXBdOgorICAgICAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdLmFwcGVuZCh2KQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCit9CisKK3B5dGhvbiBwYWNrYWdlX2RlcGNoYWlucygpIHsKKyAgICAiIiIKKyAgICBGb3IgYSBnaXZlbiBzZXQgb2YgcHJlZml4IGFuZCBwb3N0Zml4IG1vZGlmaWVycywgbWFrZSB0aG9zZSBwYWNrYWdlcworICAgIFJSRUNPTU1FTkRTIG9uIHRoZSBjb3JyZXNwb25kaW5nIHBhY2thZ2VzIGZvciBpdHMgUkRFUEVORFMuCisKKyAgICBFeGFtcGxlOiAgSWYgcGFja2FnZSBBIGRlcGVuZHMgdXBvbiBwYWNrYWdlIEIsIGFuZCBBJ3MgLmJiIGVtaXRzIGFuCisgICAgQS1kZXYgcGFja2FnZSwgdGhpcyB3b3VsZCBtYWtlIEEtZGV2IFJlY29tbWVuZHM6IEItZGV2LgorCisgICAgSWYgb25seSBvbmUgb2YgYSBnaXZlbiBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdCB3aWxsIHRha2UgdGhlIFJSRUNPTU1FTkRTCisgICAgYmFzZWQgb24gdGhlIFJERVBFTkRTIG9mICphbGwqIG90aGVyIHBhY2thZ2VzLiBJZiBtb3JlIHRoYW4gb25lIG9mIGEgZ2l2ZW4KKyAgICBzdWZmaXggaXMgc3BlY2lmaWVkLCBpdHMgd2lsbCBvbmx5IHVzZSB0aGUgUkRFUEVORFMgb2YgdGhlIHNpbmdsZSBwYXJlbnQKKyAgICBwYWNrYWdlLgorICAgICIiIgorCisgICAgcGFja2FnZXMgID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwb3N0Zml4ZXMgPSAoZC5nZXRWYXIoJ0RFUENIQUlOX1BPU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIHByZWZpeGVzICA9IChkLmdldFZhcignREVQQ0hBSU5fUFJFJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKworICAgIGRlZiBwa2dfYWRkZGVwcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGdldG5hbWUsIGRlcGVuZHMsIGQpOgorCisgICAgICAgICNiYi5ub3RlKCdkZXBlbmRzIGZvciAlcyBpcyAlcycgJSAoYmFzZSwgZGVwZW5kcykpCisgICAgICAgIHJyZWNsaXN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKworICAgICAgICBmb3IgZGVwZW5kIGluIGRlcGVuZHM6CisgICAgICAgICAgICBpZiBkZXBlbmQuZmluZCgnLW5hdGl2ZScpICE9IC0xIG9yIGRlcGVuZC5maW5kKCctY3Jvc3MnKSAhPSAtMSBvciBkZXBlbmQuc3RhcnRzd2l0aCgndmlydHVhbC8nKToKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgiU2tpcHBpbmcgJXMiICUgZGVwZW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGJnJyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIHBrZ25hbWUgPSBnZXRuYW1lKGRlcGVuZCwgc3VmZml4KQorICAgICAgICAgICAgI2JiLm5vdGUoIkFkZGluZyAlcyBmb3IgJXMiICUgKHBrZ25hbWUsIGRlcGVuZCkpCisgICAgICAgICAgICBpZiBwa2duYW1lIG5vdCBpbiBycmVjbGlzdCBhbmQgcGtnbmFtZSAhPSBwa2c6CisgICAgICAgICAgICAgICAgcnJlY2xpc3RbcGtnbmFtZV0gPSBbXQorCisgICAgICAgICNiYi5ub3RlKCdzZXR0aW5nOiBSUkVDT01NRU5EU18lcz0lcycgJSAocGtnLCAnICcuam9pbihycmVjbGlzdCkpKQorICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJXMnICUgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocnJlY2xpc3QsIGNvbW1hc2VwPUZhbHNlKSkKKworICAgIGRlZiBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGdldG5hbWUsIHJkZXBlbmRzLCBkKToKKworICAgICAgICAjYmIubm90ZSgncmRlcGVuZHMgZm9yICVzIGlzICVzJyAlIChiYXNlLCByZGVwZW5kcykpCisgICAgICAgIHJyZWNsaXN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGQuZ2V0VmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCBUcnVlKSBvciAiIikKKworICAgICAgICBmb3IgZGVwZW5kIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgaWYgZGVwZW5kLmZpbmQoJ3ZpcnR1YWwtbG9jYWxlLScpICE9IC0xOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTa2lwcGluZyAlcyIgJSBkZXBlbmQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRldicpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgcGtnbmFtZSA9IGdldG5hbWUoZGVwZW5kLCBzdWZmaXgpCisgICAgICAgICAgICAjYmIubm90ZSgiQWRkaW5nICVzIGZvciAlcyIgJSAocGtnbmFtZSwgZGVwZW5kKSkKKyAgICAgICAgICAgIGlmIHBrZ25hbWUgbm90IGluIHJyZWNsaXN0IGFuZCBwa2duYW1lICE9IHBrZzoKKyAgICAgICAgICAgICAgICBycmVjbGlzdFtwa2duYW1lXSA9IFtdCisKKyAgICAgICAgI2JiLm5vdGUoJ3NldHRpbmc6IFJSRUNPTU1FTkRTXyVzPSVzJyAlIChwa2csICcgJy5qb2luKHJyZWNsaXN0KSkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjbGlzdCwgY29tbWFzZXA9RmFsc2UpKQorCisgICAgZGVmIGFkZF9kZXAobGlzdCwgZGVwKToKKyAgICAgICAgaWYgZGVwIG5vdCBpbiBsaXN0OgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoZGVwKQorCisgICAgZGVwZW5kcyA9IFtdCisgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIik6CisgICAgICAgIGFkZF9kZXAoZGVwZW5kcywgZGVwKQorCisgICAgcmRlcGVuZHMgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIGRlcCBpbiBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgIGFkZF9kZXAocmRlcGVuZHMsIGRlcCkKKworICAgICNiYi5ub3RlKCdyZGVwZW5kcyBpcyAlcycgJSByZGVwZW5kcykKKworICAgIGRlZiBwb3N0X2dldG5hbWUobmFtZSwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChuYW1lLCBzdWZmaXgpCisgICAgZGVmIHByZV9nZXRuYW1lKG5hbWUsIHN1ZmZpeCk6CisgICAgICAgIHJldHVybiAnJXMlcycgJSAoc3VmZml4LCBuYW1lKQorCisgICAgcGtncyA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgcG9zdGZpeCBpbiBwb3N0Zml4ZXM6CisgICAgICAgICAgICBpZiBwa2cuZW5kc3dpdGgocG9zdGZpeCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHBvc3RmaXggaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgcGtnc1twb3N0Zml4XSA9IHt9CisgICAgICAgICAgICAgICAgcGtnc1twb3N0Zml4XVtwa2ddID0gKHBrZ1s6LWxlbihwb3N0Zml4KV0sIHBvc3RfZ2V0bmFtZSkKKworICAgICAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzOgorICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJlZml4IGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcHJlZml4XSA9IHt9CisgICAgICAgICAgICAgICAgcGtnc1twcmVmaXhdW3BrZ10gPSAocGtnWzotbGVuKHByZWZpeCldLCBwcmVfZ2V0bmFtZSkKKworICAgIGlmICItZGJnIiBpbiBwa2dzOgorICAgICAgICBwa2dsaWJkZXBzID0gcmVhZF9saWJkZXBfZmlsZXMoZCkKKyAgICAgICAgcGtnbGliZGVwbGlzdCA9IFtdCisgICAgICAgIGZvciBwa2cgaW4gcGtnbGliZGVwczoKKyAgICAgICAgICAgIGZvciBrIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICAgICBhZGRfZGVwKHBrZ2xpYmRlcGxpc3QsIGspCisgICAgICAgICMgRklYTUUgdGhpcyBzaG91bGQgbm90IGxvb2sgYXQgUE4gb25jZSBhbGwgdGFzayByZWNpcGVzIGluaGVyaXQgZnJvbSB0YXNrLmJiY2xhc3MKKyAgICAgICAgZGJnZGVmYXVsdGRlcHMgPSAoKGQuZ2V0VmFyKCdERVBDSEFJTl9EQkdERUZBVUxUREVQUycsIFRydWUpID09ICcxJykgb3IgKGQuZ2V0VmFyKCdQTicsIFRydWUpIG9yICcnKS5zdGFydHN3aXRoKCdwYWNrYWdlZ3JvdXAtJykpCisKKyAgICBmb3Igc3VmZml4IGluIHBrZ3M6CisgICAgICAgIGZvciBwa2cgaW4gcGtnc1tzdWZmaXhdOgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdSUkVDT01NRU5EU18nICsgcGtnLCAnbm9kZXBycmVjcycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAoYmFzZSwgZnVuYykgPSBwa2dzW3N1ZmZpeF1bcGtnXQorICAgICAgICAgICAgaWYgc3VmZml4ID09ICItZGV2IjoKKyAgICAgICAgICAgICAgICBwa2dfYWRkZGVwcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIGRlcGVuZHMsIGQpCisgICAgICAgICAgICBlbGlmIHN1ZmZpeCA9PSAiLWRiZyI6CisgICAgICAgICAgICAgICAgaWYgbm90IGRiZ2RlZmF1bHRkZXBzOgorICAgICAgICAgICAgICAgICAgICBwa2dfYWRkcnJlY3MocGtnLCBiYXNlLCBzdWZmaXgsIGZ1bmMsIHBrZ2xpYmRlcGxpc3QsIGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsZW4ocGtnc1tzdWZmaXhdKSA9PSAxOgorICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcGVuZHMsIGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJkZXBzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIGJhc2UsIFRydWUpIG9yICIiKToKKyAgICAgICAgICAgICAgICAgICAgYWRkX2RlcChyZGVwcywgZGVwKQorICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcmRlcHMsIGQpCit9CisKKyMgU2luY2UgYml0YmFrZSBjYW4ndCBkZXRlcm1pbmUgd2hpY2ggdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBkdXJpbmcgcGFja2FnZQorIyBpdGVyYXRpb24sIHdlIG5lZWQgdG8gbGlzdCB0aGVtIGhlcmU6CitQQUNLQUdFVkFSUyA9ICJGSUxFUyBSREVQRU5EUyBSUkVDT01NRU5EUyBTVU1NQVJZIERFU0NSSVBUSU9OIFJTVUdHRVNUUyBSUFJPVklERVMgUkNPTkZMSUNUUyBQS0cgQUxMT1dfRU1QVFkgcGtnX3Bvc3RpbnN0IHBrZ19wb3N0cm0gSU5JVFNDUklQVF9OQU1FIElOSVRTQ1JJUFRfUEFSQU1TIERFQklBTl9OT0FVVE9OQU1FIEFMVEVSTkFUSVZFIFBLR0UgUEtHViBQS0dSIFVTRVJBRERfUEFSQU0gR1JPVVBBRERfUEFSQU0gQ09ORkZJTEVTIFNZU1RFTURfU0VSVklDRSBMSUNFTlNFIFNFQ1RJT04gcGtnX3ByZWluc3QgcGtnX3ByZXJtIFJSRVBMQUNFUyBHUk9VUE1FTVNfUEFSQU0gU1lTVEVNRF9BVVRPX0VOQUJMRSIKKworZGVmIGdlbl9wYWNrYWdldmFyKGQpOgorICAgIHJldCA9IFtdCisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlBBQ0tBR0VWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl8iICsgcCkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IGNoYW5nZXMgdG8gSU5DT01QQVRJQkxFX0xJQ0VOU0UgcmUtcnVuIGRvX3BhY2thZ2UgZm9yCisgICAgICAgICMgYWZmZWN0ZWQgcmVjaXBlcy4KKyAgICAgICAgcmV0LmFwcGVuZCgnTElDRU5TRV9FWENMVVNJT04tJXMnICUgcCkKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgPz0gIiIKKyMgRnVuY3Rpb25zIGZvciBzZXR0aW5nIHVwIFBLR0QKK1BBQ0tBR0VCVUlMRFBLR0QgPz0gIiBcCisgICAgICAgICAgICAgICAgcGVyZm9ybV9wYWNrYWdlY29weSBcCisgICAgICAgICAgICAgICAgJHtQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1N9IFwKKyAgICAgICAgICAgICAgICBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgXAorICAgICAgICAgICAgICAgIGZpeHVwX3Blcm1zIFwKKyAgICAgICAgICAgICAgICAiCisjIEZ1bmN0aW9ucyB3aGljaCBzcGxpdCBQS0dEIHVwIGludG8gc2VwYXJhdGUgcGFja2FnZXMKK1BBQ0tBR0VTUExJVEZVTkNTID89ICIgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcyBcCisgICAgICAgICAgICAgICAgcG9wdWxhdGVfcGFja2FnZXMiCisjIEZ1bmN0aW9ucyB3aGljaCBwcm9jZXNzIG1ldGFkYXRhIGJhc2VkIG9uIHNwbGl0IHBhY2thZ2VzCitQQUNLQUdFRlVOQ1MgKz0gIiBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9maXhzeW1saW5rcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9uYW1lX2hvb2sgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fZmlsZWRlcHMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fc2hsaWJzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2RvX3BrZ2NvbmZpZyBcCisgICAgICAgICAgICAgICAgcmVhZF9zaGxpYmRlcHMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZGVwY2hhaW5zIFwKKyAgICAgICAgICAgICAgICBlbWl0X3BrZ2RhdGEiCisKK3B5dGhvbiBkb19wYWNrYWdlICgpIHsKKyAgICAjIENoYW5nZSB0aGUgZm9sbG93aW5nIHZlcnNpb24gdG8gY2F1c2Ugc3N0YXRlIHRvIGludmFsaWRhdGUgdGhlIHBhY2thZ2UKKyAgICAjIGNhY2hlLiAgVGhpcyBpcyB1c2VmdWwgaWYgYW4gaXRlbSB0aGlzIGNsYXNzIGRlcGVuZHMgb24gY2hhbmdlcyBpbiBhCisgICAgIyB3YXkgdGhhdCB0aGUgb3V0cHV0IG9mIHRoaXMgY2xhc3MgY2hhbmdlcy4gIHJwbWRlcHMgaXMgYSBnb29kIGV4YW1wbGUKKyAgICAjIGFzIGFueSBjaGFuZ2UgdG8gcnBtZGVwcyByZXF1aXJlcyB0aGlzIHRvIGJlIHJlcnVuLgorICAgICMgUEFDS0FHRV9CQkNMQVNTX1ZFUlNJT04gPSAiMSIKKworICAgICMgSW5pdCBjYWNoZWRwYXRoCisgICAgZ2xvYmFsIGNwYXRoCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTYW5pdHkgdGVzdCB0aGUgc2V0dXAKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHBhY2thZ2VzKSA8IDE6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlcyB0byBidWlsZCwgc2tpcHBpbmcgZG9fcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpCisgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IGRlc3Qgb3Igbm90IGR2YXIgb3Igbm90IHBuOgorICAgICAgICBtc2cgPSAiV09SS0RJUiwgREVQTE9ZX0RJUiwgRCwgUE4gYW5kIFBLR0QgYWxsIG11c3QgYmUgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiCisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ2YXItdW5kZWZpbmVkIiwgbXNnLCBkKQorICAgICAgICByZXR1cm4KKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicGFja2FnZV9nZXRfYXV0b19wciIsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIE9wdGltaXNhdGlvbnMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgQ29udGludWFsbHkgZXhwYW5kaW5nIGNvbXBsZXggZXhwcmVzc2lvbnMgaXMgaW5lZmZpY2llbnQsIHBhcnRpY3VsYXJseQorICAgICMgd2hlbiB3ZSB3cml0ZSB0byB0aGUgZGF0YXN0b3JlIGFuZCBpbnZhbGlkYXRlIHRoZSBleHBhbnNpb24gY2FjaGUuIFRoaXMKKyAgICAjIGNvZGUgcHJlLWV4cGFuZHMgc29tZSBmcmVxdWVudGx5IHVzZWQgdmFyaWFibGVzCisKKyAgICBkZWYgZXhwYW5kVmFyKHgsIGQpOgorICAgICAgICBkLnNldFZhcih4LCBkLmdldFZhcih4LCBUcnVlKSkKKworICAgIGZvciB4IGluICdQTicsICdQVicsICdCUE4nLCAnVEFSR0VUX1NZUycsICdFWFRFTkRQUkFVVE8nOgorICAgICAgICBleHBhbmRWYXIoeCwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgU2V0dXAgUEtHRCAoZnJvbSBEKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFQlVJTERQS0dEJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTcGxpdCB1cCBQS0dEIGludG8gUEtHREVTVAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFU1BMSVRGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgUHJvY2VzcyBQS0dERVNUCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIEJ1aWxkIGdsb2JhbCBsaXN0IG9mIGZpbGVzIGluIGVhY2ggc3BsaXQgcGFja2FnZQorICAgIGdsb2JhbCBwa2dmaWxlcworICAgIHBrZ2ZpbGVzID0ge30KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsocGtnZGVzdCArICIvIiArIHBrZyk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwa2dmaWxlc1twa2ddLmFwcGVuZCh3YWxrcm9vdCArIG9zLnNlcCArIGZpbGUpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKK30KKworZG9fcGFja2FnZVtkaXJzXSA9ICIke1NITElCU1dPUktESVJ9ICR7UEtHREVTVFdPUkt9ICR7RH0iCitkb19wYWNrYWdlW3ZhcmRlcHNdICs9ICIke1BBQ0tBR0VCVUlMRFBLR0R9ICR7UEFDS0FHRVNQTElURlVOQ1N9ICR7UEFDS0FHRUZVTkNTfSAke0BnZW5fcGFja2FnZXZhcihkKX0iCithZGR0YXNrIHBhY2thZ2UgYWZ0ZXIgZG9faW5zdGFsbAorCitQQUNLQUdFTE9DSyA9ICIke1NUQUdJTkdfRElSfS9wYWNrYWdlLW91dHB1dC5sb2NrIgorU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2UiCitkb19wYWNrYWdlW2NsZWFuZGlyc10gPSAiJHtQS0dERVNUfSAke1BLR0RFU1RXT1JLfSIKK2RvX3BhY2thZ2Vbc3N0YXRlLXBsYWluZGlyc10gPSAiJHtQS0dEfSAke1BLR0RFU1R9ICR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSA9ICIke1BBQ0tBR0VMT0NLfSIKK2RvX3BhY2thZ2Vfc2V0c2NlbmVbZGlyc10gPSAiJHtTVEFHSU5HX0RJUn0iCisKK3B5dGhvbiBkb19wYWNrYWdlX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV9zZXRzY2VuZQorCitkb19wYWNrYWdlZGF0YSAoKSB7CisJOgorfQorCithZGR0YXNrIHBhY2thZ2VkYXRhIGJlZm9yZSBkb19idWlsZCBhZnRlciBkb19wYWNrYWdlCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2VkYXRhW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7UEtHREFUQV9ESVJ9IgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLWxvY2tmaWxlLXNoYXJlZF0gPSAiJHtQQUNLQUdFTE9DS30iCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIke01BQ0hJTkV9IgorCitweXRob24gZG9fcGFja2FnZWRhdGFfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlZGF0YV9zZXRzY2VuZQorCisjCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBwYWNrYWdlIHdyaXRpbmcgY2xhc3NlcworIworCitkZWYgbWFwcGluZ19yZW5hbWVfaG9vayhkKToKKyAgICAiIiIKKyAgICBSZXdyaXRlIHZhcmlhYmxlcyB0byBhY2NvdW50IGZvciBwYWNrYWdlIHJlbmFtaW5nIGluIHRoaW5ncworICAgIGxpa2UgZGViaWFuLmJiY2xhc3Mgb3IgbWFudWFsIFBLRyB2YXJpYWJsZSBuYW1lIGNoYW5nZXMKKyAgICAiIiIKKyAgICBwa2cgPSBkLmdldFZhcigiUEtHIiwgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSREVQRU5EUyIsIHBrZywgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSUkVDT01NRU5EUyIsIHBrZywgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJSU1VHR0VTVFMiLCBwa2csIGQpCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmZWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX2RlYi5iYmNsYXNzCkBAIC0wLDAgKzEsMzM4IEBACisjCisjIENvcHlyaWdodCAyMDA2LTIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJkZWIiCisKK0RQS0dfQVJDSCA/PSAiJHtUQVJHRVRfQVJDSH0iIAorCitQS0dXUklURURJUkRFQiA9ICIke1dPUktESVJ9L2RlcGxveS1kZWJzIgorCitBUFRDT05GX1RBUkdFVCA9ICIke1dPUktESVJ9IgorCitBUFRfQVJHUyA9ICIke0BbJycsICctLW5vLWluc3RhbGwtcmVjb21tZW5kcyddW2QuZ2V0VmFyKCJOT19SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSA9PSAiMSJdfSIKKworIworIyBpbnN0YWxsIGEgYnVuY2ggb2YgcGFja2FnZXMgdXNpbmcgYXB0CisjIHRoZSBmb2xsb3dpbmcgc2hlbGwgdmFyaWFibGVzIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmM6CisjIElOU1RBTExfUk9PVEZTX0RFQiAtIGluc3RhbGwgcm9vdCBkaXIKKyMgSU5TVEFMTF9CQVNFQVJDSF9ERUIgLSBpbnN0YWxsIGJhc2UgYXJjaGl0ZWN1dHJlCisjIElOU1RBTExfQVJDSFNfREVCIC0gbGlzdCBvZiBhdmFpbGFibGUgYXJjaHMKKyMgSU5TVEFMTF9QQUNLQUdFU19OT1JNQUxfREVCIC0gcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkCisjIElOU1RBTExfUEFDS0FHRVNfQVRURU1QVE9OTFlfREVCIC0gcGFja2FnZXMgYXR0ZW1wZWQgdG8gYmUgaW5zdGFsbGVkIG9ubHkKKyMgSU5TVEFMTF9QQUNLQUdFU19MSU5HVUFTX0RFQiAtIGFkZGl0aW9uYWwgcGFja2FnZXMgZm9yIHVjbGliYworIyBJTlNUQUxMX1RBU0tfREVCIC0gdGFzayBuYW1lCisKK3B5dGhvbiBkb19wYWNrYWdlX2RlYiAoKSB7CisgICAgaW1wb3J0IHJlLCBjb3B5CisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ1BLR1dSSVRFRElSREVCJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0ZGlyOgorICAgICAgICBiYi5lcnJvcigiUEtHV1JJVEVESVJERUIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiUEFDS0FHRVMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJERUJfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgaWYgcGFja2FnZXMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGRlZiBjbGVhbnVwY29udHJvbChyb290KToKKyAgICAgICAgZm9yIHAgaW4gWydDT05UUk9MJywgJ0RFQklBTiddOgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihyb290LCBwKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIocCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyb290KSkKKworICAgICAgICBwa2dvdXRkaXIgPSBvcy5wYXRoLmpvaW4ob3V0ZGlyLCBsb2NhbGRhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ291dGRpcikKKworICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNvbnRyb2xkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ0RFQklBTicpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb250cm9sZGlyKQorICAgICAgICBvcy5jaG1vZChjb250cm9sZGlyLCAwNzU1KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBjdHJsZmlsZSA9IGNvZGVjcy5vcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29udHJvbCcpLCAndycsICd1dGYtOCcpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbnRyb2wgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIHBlID0gZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKQorICAgICAgICBpZiBwZSBhbmQgaW50KHBlKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXM6JXMtJXNcbiIsIFsnUEtHRScsICdQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXMtJXNcbiIsIFsnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiRGVzY3JpcHRpb246ICVzXG4iLCBbJ0RFU0NSSVBUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiU2VjdGlvbjogJXNcbiIsIFsnU0VDVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlByaW9yaXR5OiAlc1xuIiwgWydQUklPUklUWSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk1haW50YWluZXI6ICVzXG4iLCBbJ01BSU5UQUlORVInXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJBcmNoaXRlY3R1cmU6ICVzXG4iLCBbJ0RQS0dfQVJDSCddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk9FOiAlc1xuIiwgWydQTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlBhY2thZ2VBcmNoOiAlc1xuIiwgWydQQUNLQUdFX0FSQ0gnXV0pCisgICAgICAgIGlmIGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIkhvbWVwYWdlOiAlc1xuIiwgWydIT01FUEFHRSddXSkKKworICAgICAgICAjIFBhY2thZ2UsIFZlcnNpb24sIE1haW50YWluZXIsIERlc2NyaXB0aW9uIC0gbWFuZGF0b3J5CisgICAgICAgICMgU2VjdGlvbiwgUHJpb3JpdHksIEVzc2VudGlhbCwgQXJjaGl0ZWN0dXJlLCBTb3VyY2UsIERlcGVuZHMsIFByZS1EZXBlbmRzLCBSZWNvbW1lbmRzLCBTdWdnZXN0cywgQ29uZmxpY3RzLCBSZXBsYWNlcywgUHJvdmlkZXMgLSBPcHRpb25hbAorCisKKyAgICAgICAgZGVmIHB1bGxEYXRhKGwsIGQpOgorICAgICAgICAgICAgbDIgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gbDoKKyAgICAgICAgICAgICAgICBkYXRhID0gZC5nZXRWYXIoaSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGYpCisgICAgICAgICAgICAgICAgaWYgaSA9PSAnRFBLR19BUkNIJyBhbmQgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gJ2FsbCcKKyAgICAgICAgICAgICAgICBlbGlmIGkgPT0gJ1BBQ0tBR0VfQVJDSCcgb3IgaSA9PSAnRFBLR19BUkNIJzoKKyAgICAgICAgICAgICAgICAgICAjIFRoZSBwYXJhbXMgaW4gZGViIHBhY2thZ2UgY29udHJvbCBkb24ndCBhbGxvdyBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAjIGBfJywgc28gY2hhbmdlIHRoZSBhcmNoJ3MgYF8nIHRvIGAtJy4gU3VjaCBhcyBgeDg2XzY0JworICAgICAgICAgICAgICAgICAgICMgLS0+YHg4Ni02NCcKKyAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgICAgIGwyLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGwyCisKKyAgICAgICAgY3RybGZpbGUud3JpdGUoIlBhY2thZ2U6ICVzXG4iICUgcGtnbmFtZSkKKyAgICAgICAgIyBjaGVjayBmb3IgcmVxdWlyZWQgZmllbGRzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciAoYywgZnMpIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoZiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoZikKKyAgICAgICAgICAgICAgICAjIFNwZWNpYWwgYmVoYXZpb3IgZm9yIGRlc2NyaXB0aW9uLi4uCisgICAgICAgICAgICAgICAgaWYgJ0RFU0NSSVBUSU9OJyBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSB1bmljb2RlKHN1bW1hcnksJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRleHR3cmFwLmRlZGVudChkZXNjcmlwdGlvbikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgaWYgJ1xcbicgaW4gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYW51YWxseSBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBkZXNjcmlwdGlvbi5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgbGltaXQgdGhlIHdpZHRoIHdoZW4gbWFudWFsbHkgaW5kZW50LCBidXQgd2UgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSB0ZXh0d3JhcC5maWxsKCkgdG8gc2V0IHRoZSBpbml0aWFsX2luZGVudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdWJzZXF1ZW50X2luZGVudCwgc28gc2V0IGEgbGFyZ2Ugd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdW5pY29kZSh0ZXh0d3JhcC5maWxsKHQsIHdpZHRoPTEwMDAwMCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpLCd1dGYtOCcpKQorICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIEF1dG8gaW5kZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdW5pY29kZSh0ZXh0d3JhcC5maWxsKGRlc2NyaXB0aW9uLnN0cmlwKCksIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJyksJ3V0Zi04JykpCisKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUodW5pY29kZShjICUgdHVwbGUocHVsbERhdGEoZnMsIGxvY2FsZGF0YSkpLCd1dGYtOCcpKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk1pc3NpbmcgZmllbGQgZm9yIGRlYiBnZW5lcmF0aW9uOiAlcyIgJSB2YWx1ZSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJOb24gVVRGLTggY2hhcmFjdGVycyBmb3VuZCBpbiBvbmUgb2YgdGhlIGZpZWxkcyIpCisKKyAgICAgICAgIyBtb3JlIGZpZWxkcworCisgICAgICAgIGN1c3RvbV9maWVsZHNfY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJkZWIiLCBsb2NhbGRhdGEpCisgICAgICAgIGlmIGN1c3RvbV9maWVsZHNfY2h1bmsgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSh1bmljb2RlKGN1c3RvbV9maWVsZHNfY2h1bmspKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlxuIikKKworICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBkZWYgZGViaWFuX2NtcF9yZW1hcCh2YXIpOgorICAgICAgICAgICAgIyBkcGtnIGRvZXMgbm90IGFsbG93IGZvciAnKCcgb3IgJyknIGluIGEgZGVwZW5kZW5jeSBuYW1lCisgICAgICAgICAgICAjIHJlcGxhY2UgdGhlc2UgaW5zdGFuY2VzIHdpdGggJ19fJyBhbmQgJ19fJworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJbiBkZWJpYW4gJz4nIGFuZCAnPCcgZG8gbm90IG1lYW4gd2hhdCBpdCBhcHBlYXJzIHRoZXkgbWVhbgorICAgICAgICAgICAgIyAgICc8JyA9IGxlc3Mgb3IgZXF1YWwKKyAgICAgICAgICAgICMgICAnPicgPSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgICAgICAjIGFkanVzdCB0aGVzZSB0byB0aGUgJzw8JyBhbmQgJz4+JyBlcXVpdmFsZW50cworICAgICAgICAgICAgIworICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgaWYgJygnIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgbmV3ZGVwID0gZGVwLnJlcGxhY2UoJygnLCAnX18nKQorICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSBuZXdkZXAucmVwbGFjZSgnKScsICdfXycpCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld2RlcCAhPSBkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbbmV3ZGVwXSA9IHZhcltkZXBdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgdmFyW2RlcF0KKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZSh2YXJbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI8ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI8ICIsICI8PCAiKQorICAgICAgICAgICAgICAgICAgICBlbGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI+ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI+ICIsICI+PiAiKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCisgICAgICAgIGZvciBkZXAgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgaWYgJyonIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCByZGVwZW5kc1tkZXBdCisgICAgICAgIHJyZWNvbW1lbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRUNPTU1FTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlY29tbWVuZHMpCisgICAgICAgIGZvciBkZXAgaW4gcnJlY29tbWVuZHM6CisgICAgICAgICAgICAgICAgaWYgJyonIGluIGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBycmVjb21tZW5kc1tkZXBdCisgICAgICAgIHJzdWdnZXN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSU1VHR0VTVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyc3VnZ2VzdHMpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRyb3AgdmVyc2lvbiBpbmZvcm1hdGlvbiBoZXJlLCBub3Qgd2FudGVkL3N1cHBvcnRlZCBieSBkZWIKKyAgICAgICAgcnByb3ZpZGVzID0gZGljdC5mcm9ta2V5cyhiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLCBbXSkKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCisgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCisgICAgICAgIGlmIHJkZXBlbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkRlcGVuZHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKSkKKyAgICAgICAgaWYgcnN1Z2dlc3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlN1Z2dlc3RzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJzdWdnZXN0cykpKQorICAgICAgICBpZiBycmVjb21tZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZWNvbW1lbmRzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkpCisgICAgICAgIGlmIHJwcm92aWRlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQcm92aWRlczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKSkKKyAgICAgICAgaWYgcnJlcGxhY2VzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlcGxhY2VzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpKQorICAgICAgICBpZiByY29uZmxpY3RzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIkNvbmZsaWN0czogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyY29uZmxpY3RzKSkpCisgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKworICAgICAgICBmb3Igc2NyaXB0IGluIFsicHJlaW5zdCIsICJwb3N0aW5zdCIsICJwcmVybSIsICJwb3N0cm0iXToKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ18lcycgJSBzY3JpcHQsIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2NyaXB0dmFyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzY3JpcHR2YXIgPSBzY3JpcHR2YXIuc3RyaXAoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuICVzIHNjcmlwdCBmaWxlIGZvciB3cml0aW5nLiIgJSBzY3JpcHQpCisKKyAgICAgICAgICAgIGlmIHNjcmlwdHZhci5zdGFydHN3aXRoKCIjISIpOgorICAgICAgICAgICAgICAgIHBvcyA9IHNjcmlwdHZhci5maW5kKCJcbiIpICsgMQorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyWzpwb3NdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZSgiIyEvYmluL3NoXG4iKQorCisgICAgICAgICAgICAjIFByZXZlbnQgdGhlIHByZXJtL3Bvc3RybSBzY3JpcHRzIGZyb20gYmVpbmcgcnVuIGR1cmluZyBhbiB1cGdyYWRlCisgICAgICAgICAgICBpZiBzY3JpcHQgaW4gKCdwcmVybScsICdwb3N0cm0nKToKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKCdbICIkMSIgIT0gInVwZ3JhZGUiIF0gfHwgZXhpdCAwXG4nKQorCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcltwb3M6XSkKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisKKyAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKKyAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29uZmZpbGVzJyksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBmb3IgZiBpbiBjb25mZmlsZXNfc3RyLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKHJvb3QsIGYpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVzLndyaXRlKCclc1xuJyAlIGYpCisgICAgICAgICAgICBjb25mZmlsZXMuY2xvc2UoKQorCisgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgZHBrZy1kZWIgLWIgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwgcm9vdCwgcGtnb3V0ZGlyKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiZHBrZy1kZWIgZXhlY3V0aW9uIGZhaWxlZCIpCisKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorZG9fcGFja2FnZV9kZWJbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV93cml0ZV9kZWIiCitkb19wYWNrYWdlX3dyaXRlX2RlYltzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfREVCfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfZGViX3NldHNjZW5lICgpIHsKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIiksb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV93cml0ZV9kZWJfc2V0c2NlbmUKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICcgZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RlcGVuZHMnLCBkZXBzKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2Zha2Vyb290JywgIjEiKQorCisgICAgIyBNYXAgVEFSR0VUX0FSQ0ggdG8gRGViaWFuJ3MgaWRlYXMgYWJvdXQgYXJjaGl0ZWN0dXJlcworICAgIGRhcmNoID0gZC5nZXRWYXIoJ0RQS0dfQVJDSCcsIFRydWUpCisgICAgaWYgZGFyY2ggaW4gWyJ4ODYiLCAiaTQ4NiIsICJpNTg2IiwgImk2ODYiLCAicGVudGl1bSJdOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdpMzg2JykKKyAgICBlbGlmIGRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdhbWQ2NCcpCisgICAgZWxpZiBkYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgIGQuc2V0VmFyKCdEUEtHX0FSQ0gnLCAnYXJtZWwnKQorfQorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9kZWIgKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3BhY2thZ2VfZGViIiwgZCkKK30KK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbY2xlYW5kaXJzXSA9ICIke1BLR1dSSVRFRElSREVCfSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3VtYXNrXSA9ICIwMjIiCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfZGViIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKKworCitQQUNLQUdFSU5ERVhERVBTICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAiYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ3YTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfaXBrLmJiY2xhc3MKQEAgLTAsMCArMSwyODkgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJpcGsiCisKK0lQS0dDT05GX1RBUkdFVCA9ICIke1dPUktESVJ9L29wa2cuY29uZiIKK0lQS0dDT05GX1NESyA9ICAiJHtXT1JLRElSfS9vcGtnLXNkay5jb25mIgorCitQS0dXUklURURJUklQSyA9ICIke1dPUktESVJ9L2RlcGxveS1pcGtzIgorCisjIFByb2dyYW0gdG8gYmUgdXNlZCB0byBidWlsZCBvcGtnIHBhY2thZ2VzCitPUEtHQlVJTERDTUQgPz89ICJvcGtnLWJ1aWxkIgorCitPUEtHX0FSR1MgPSAiLS1mb3JjZV9wb3N0aW5zdGFsbCAtLXByZWZlci1hcmNoLXRvLXZlcnNpb24iCitPUEtHX0FSR1MgKz0gIiR7QFsnJywgJy0tbm8taW5zdGFsbC1yZWNvbW1lbmRzJ11bZC5nZXRWYXIoIk5PX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpID09ICIxIl19IgorT1BLR19BUkdTICs9ICIke0BbJycsICctLWFkZC1leGNsdWRlICcgKyAnIC0tYWRkLWV4Y2x1ZGUgJy5qb2luKChkLmdldFZhcignUEFDS0FHRV9FWENMVURFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpXVsoZC5nZXRWYXIoIlBBQ0tBR0VfRVhDTFVERSIsIFRydWUpIG9yICIiKSAhPSAiIl19IgorCitPUEtHTElCRElSID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliIgorCitweXRob24gZG9fcGFja2FnZV9pcGsgKCkgeworICAgIGltcG9ydCByZSwgY29weQorICAgIGltcG9ydCB0ZXh0d3JhcAorICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdQS0dXUklURURJUklQSycsIFRydWUpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpciBvciBub3Qgb3V0ZGlyIG9yIG5vdCB0bXBkaXI6CisgICAgICAgIGJiLmVycm9yKCJWYXJpYWJsZXMgaW5jb3JyZWN0bHkgc2V0LCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIFdlJ3JlIGFib3V0IHRvIGFkZCBuZXcgcGFja2FnZXMgc28gdGhlIGluZGV4IG5lZWRzIHRvIGJlIGNoZWNrZWQKKyAgICAjIHNvIHJlbW92ZSB0aGUgYXBwcm9wcmlhdGUgc3RhbXAgZmlsZS4KKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLCBvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIGRlZiBjbGVhbnVwY29udHJvbChyb290KToKKyAgICAgICAgZm9yIHAgaW4gWydDT05UUk9MJywgJ0RFQklBTiddOgorICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihyb290LCBwKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucHJ1bmVkaXIocCkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKworICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKHJvb3QgKyAiLmxvY2siKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShyb290KSkKKyAgICAgICAgYXJjaCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpCisKKyAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcignSVBLX0hJRVJBUkNISUNBTF9GRUVEJywgRmFsc2UpID09ICIxIjoKKyAgICAgICAgICAgICMgU3ByZWFkIHBhY2thZ2VzIGFjcm9zcyBzdWJkaXJlY3RvcmllcyBzbyBlYWNoIGlzbid0IHRvbyBjcm93ZGVkCisgICAgICAgICAgICBpZiBwa2duYW1lLnN0YXJ0c3dpdGgoJ2xpYicpOgorICAgICAgICAgICAgICAgIHBrZ19wcmVmaXggPSAnbGliJyArIHBrZ25hbWVbM10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX3ByZWZpeCA9IHBrZ25hbWVbMF0KKworICAgICAgICAgICAgIyBLZWVwIC1kYmcsIC1kZXYsIC1kb2MsIC1zdGF0aWNkZXYsIC1sb2NhbGUgYW5kIC1sb2NhbGUtKiBwYWNrYWdlcworICAgICAgICAgICAgIyB0b2dldGhlci4gVGhlc2UgcGFja2FnZSBzdWZmaXhlcyBhcmUgdGFrZW4gZnJvbSB0aGUgZGVmaW5pdGlvbnMgb2YKKyAgICAgICAgICAgICMgUEFDS0FHRVMgYW5kIFBBQ0tBR0VTX0RZTkFNSUMgaW4gbWV0YS9jb25mL2JpdGJha2UuY29uZgorICAgICAgICAgICAgaWYgcGtnbmFtZVstNDpdIGluICgnLWRiZycsICctZGV2JywgJy1kb2MnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTRdCisgICAgICAgICAgICBlbGlmIHBrZ25hbWUuZW5kc3dpdGgoJy1zdGF0aWNkZXYnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTEwXQorICAgICAgICAgICAgZWxpZiBwa2duYW1lLmVuZHN3aXRoKCctbG9jYWxlJyk6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOi03XQorICAgICAgICAgICAgZWxpZiAnLWxvY2FsZS0nIGluIHBrZ25hbWU6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWVbOnBrZ25hbWUuZmluZCgnLWxvY2FsZS0nKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnX3N1YmRpciA9IHBrZ25hbWUKKworICAgICAgICAgICAgcGtnb3V0ZGlyID0gIiVzLyVzLyVzLyVzIiAlIChvdXRkaXIsIGFyY2gsIHBrZ19wcmVmaXgsIHBrZ19zdWJkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dvdXRkaXIgPSAiJXMvJXMiICUgKG91dGRpciwgYXJjaCkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnb3V0ZGlyKQorICAgICAgICBvcy5jaGRpcihyb290KQorICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBub3QgZyBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IGFyY2hpdmUgZm9yICVzLSVzLSVzIiAlIChwa2csIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSwgbG9jYWxkYXRhLmdldFZhcignUEtHUicsIFRydWUpKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGNvbnRyb2xkaXIgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ0NPTlRST0wnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoY29udHJvbGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3RybGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29udHJvbCcpLCAndycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIGNvbnRyb2wgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgIHBlID0gZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKQorICAgICAgICBpZiBwZSBhbmQgaW50KHBlKSA+IDA6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXM6JXMtJXNcbiIsIFsnUEtHRScsICdQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiVmVyc2lvbjogJXMtJXNcbiIsIFsnUEtHVicsICdQS0dSJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiRGVzY3JpcHRpb246ICVzXG4iLCBbJ0RFU0NSSVBUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiU2VjdGlvbjogJXNcbiIsIFsnU0VDVElPTiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIlByaW9yaXR5OiAlc1xuIiwgWydQUklPUklUWSddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk1haW50YWluZXI6ICVzXG4iLCBbJ01BSU5UQUlORVInXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJMaWNlbnNlOiAlc1xuIiwgWydMSUNFTlNFJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiQXJjaGl0ZWN0dXJlOiAlc1xuIiwgWydQQUNLQUdFX0FSQ0gnXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJPRTogJXNcbiIsIFsnUE4nXV0pCisgICAgICAgIGlmIGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChbIkhvbWVwYWdlOiAlc1xuIiwgWydIT01FUEFHRSddXSkKKworICAgICAgICBkZWYgcHVsbERhdGEobCwgZCk6CisgICAgICAgICAgICBsMiA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgICAgIGwyLmFwcGVuZChkLmdldFZhcihpLCBUcnVlKSkKKyAgICAgICAgICAgIHJldHVybiBsMgorCisgICAgICAgIGN0cmxmaWxlLndyaXRlKCJQYWNrYWdlOiAlc1xuIiAlIHBrZ25hbWUpCisgICAgICAgICMgY2hlY2sgZm9yIHJlcXVpcmVkIGZpZWxkcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgKGMsIGZzKSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoZiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihmKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBiZWhhdmlvciBmb3IgZGVzY3JpcHRpb24uLi4KKyAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIGZzOgorICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gbG9jYWxkYXRhLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCdEZXNjcmlwdGlvbjogJXNcbicgJSBzdW1tYXJ5KQorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGV4dHdyYXAuZGVkZW50KGRlc2NyaXB0aW9uKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmICdcXG4nIGluIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBNYW51YWxseSBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIGRlc2NyaXB0aW9uLnNwbGl0KCdcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGxpbWl0IHRoZSB3aWR0aCB3aGVuIG1hbnVhbGx5IGluZGVudCwgYnV0IHdlIGRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWVkIHRoZSB0ZXh0d3JhcC5maWxsKCkgdG8gc2V0IHRoZSBpbml0aWFsX2luZGVudCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwodC5zdHJpcCgpLCB3aWR0aD0xMDAwMDAsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0byBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCclc1xuJyAlIHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24sIHdpZHRoPTc0LCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJykpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoYyAlIHR1cGxlKHB1bGxEYXRhKGZzLCBsb2NhbGRhdGEpKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJNaXNzaW5nIGZpZWxkIGZvciBpcGsgZ2VuZXJhdGlvbjogJXMiICUgdmFsdWUpCisgICAgICAgICMgbW9yZSBmaWVsZHMKKworICAgICAgICBjdXN0b21fZmllbGRzX2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgiaXBrIiwgbG9jYWxkYXRhKQorICAgICAgICBpZiBjdXN0b21fZmllbGRzX2NodW5rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoY3VzdG9tX2ZpZWxkc19jaHVuaykKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJcbiIpCisKKyAgICAgICAgbWFwcGluZ19yZW5hbWVfaG9vayhsb2NhbGRhdGEpCisKKyAgICAgICAgZGVmIGRlYmlhbl9jbXBfcmVtYXAodmFyKToKKyAgICAgICAgICAgICMgSW4gZGViaWFuICc+JyBhbmQgJzwnIGRvIG5vdCBtZWFuIHdoYXQgaXQgYXBwZWFycyB0aGV5IG1lYW4KKyAgICAgICAgICAgICMgICAnPCcgPSBsZXNzIG9yIGVxdWFsCisgICAgICAgICAgICAjICAgJz4nID0gZ3JlYXRlciBvciBlcXVhbAorICAgICAgICAgICAgIyBhZGp1c3QgdGhlc2UgdG8gdGhlICc8PCcgYW5kICc+PicgZXF1aXZhbGVudHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGZvciBkZXAgaW4gdmFyOgorICAgICAgICAgICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZSh2YXJbZGVwXSk6CisgICAgICAgICAgICAgICAgICAgIGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI8ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI8ICIsICI8PCAiKQorICAgICAgICAgICAgICAgICAgICBlbGlmICh2IG9yICIiKS5zdGFydHN3aXRoKCI+ICIpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyW2RlcF1baV0gPSB2YXJbZGVwXVtpXS5yZXBsYWNlKCI+ICIsICI+PiAiKQorCisgICAgICAgIHJkZXBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJERVBFTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmRlcGVuZHMpCisgICAgICAgIHJyZWNvbW1lbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRUNPTU1FTkRTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocnJlY29tbWVuZHMpCisgICAgICAgIHJzdWdnZXN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSU1VHR0VTVFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyc3VnZ2VzdHMpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRyb3AgdmVyc2lvbiBpbmZvcm1hdGlvbiBoZXJlLCBub3Qgd2FudGVkL3N1cHBvcnRlZCBieSBpcGsKKyAgICAgICAgcnByb3ZpZGVzID0gZGljdC5mcm9ta2V5cyhiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLCBbXSkKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycHJvdmlkZXMpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUkVQTEFDRVMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVwbGFjZXMpCisgICAgICAgIHJjb25mbGljdHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkNPTkZMSUNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJjb25mbGljdHMpCisKKyAgICAgICAgaWYgcmRlcGVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiRGVwZW5kczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMpKQorICAgICAgICBpZiByc3VnZ2VzdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU3VnZ2VzdHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJzdWdnZXN0cykpCisgICAgICAgIGlmIHJyZWNvbW1lbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlY29tbWVuZHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNvbW1lbmRzKSkKKyAgICAgICAgaWYgcnByb3ZpZGVzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMpKQorICAgICAgICBpZiBycmVwbGFjZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJyZXBsYWNlcykpCisgICAgICAgIGlmIHJjb25mbGljdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiQ29uZmxpY3RzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyY29uZmxpY3RzKSkKKyAgICAgICAgc3JjX3VyaSA9IGxvY2FsZGF0YS5nZXRWYXIoIlNSQ19VUkkiLCBUcnVlKS5zdHJpcCgpIG9yICJOb25lIgorICAgICAgICBpZiBzcmNfdXJpOgorICAgICAgICAgICAgc3JjX3VyaSA9IHJlLnN1YigiXHMrIiwgIiAiLCBzcmNfdXJpKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlNvdXJjZTogJXNcbiIgJSAiICIuam9pbihzcmNfdXJpLnNwbGl0KCkpKQorICAgICAgICBjdHJsZmlsZS5jbG9zZSgpCisKKyAgICAgICAgZm9yIHNjcmlwdCBpbiBbInByZWluc3QiLCAicG9zdGluc3QiLCAicHJlcm0iLCAicG9zdHJtIl06CisgICAgICAgICAgICBzY3JpcHR2YXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfJXMnICUgc2NyaXB0LCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHNjcmlwdHZhcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCBzY3JpcHQpLCAndycpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuICVzIHNjcmlwdCBmaWxlIGZvciB3cml0aW5nLiIgJSBzY3JpcHQpCisgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNjcmlwdGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksIDA3NTUpCisKKyAgICAgICAgY29uZmZpbGVzX3N0ciA9ICcgJy5qb2luKGdldF9jb25mZmlsZXMocGtnLCBkKSkKKyAgICAgICAgaWYgY29uZmZpbGVzX3N0cjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25mZmlsZXMgPSBvcGVuKG9zLnBhdGguam9pbihjb250cm9sZGlyLCAnY29uZmZpbGVzJyksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29uZmZpbGVzIGZvciB3cml0aW5nLiIpCisgICAgICAgICAgICBmb3IgZiBpbiBjb25mZmlsZXNfc3RyLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKHJvb3QsIGYpKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmZpbGVzLndyaXRlKCclc1xuJyAlIGYpCisgICAgICAgICAgICBjb25mZmlsZXMuY2xvc2UoKQorCisgICAgICAgIG9zLmNoZGlyKGJhc2VkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiUEFUSD1cIiVzXCIgJXMgJXMgJXMiICUgKGxvY2FsZGF0YS5nZXRWYXIoIlBBVEgiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcigiT1BLR0JVSUxEQ01EIiwxKSwgcGtnLCBwa2dvdXRkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJvcGtnLWJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQiKQorCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisKK30KKyMgT3RoZXJ3aXNlIGFsbGFyY2ggcGFja2FnZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gb3ZlcnJpZGUgY29uZmlndXJhdGlvbgorZG9fcGFja2FnZV9pcGtbdmFyZGVwc2V4Y2x1ZGVdID0gIk9WRVJSSURFUyIKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgorZG9fcGFja2FnZV93cml0ZV9pcGtbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1tzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX0lQS30iCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2lwa19zZXRzY2VuZSAoKSB7CisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisKKyAgICBpZiBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpLCBvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiSVBLX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwa19zZXRzY2VuZQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZGVwZW5kcycsIGRlcHMpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZmFrZXJvb3QnLCAiMSIpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2lwayAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9pcGsiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV9pcGtbZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1tjbGVhbmRpcnNdID0gIiR7UEtHV1JJVEVESVJJUEt9IgorZG9fcGFja2FnZV93cml0ZV9pcGtbdW1hc2tdID0gIjAyMiIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV9pcGsgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQorCitQQUNLQUdFSU5ERVhERVBTICs9ICJvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhMTYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNzc0IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAicnBtIgorCitSUE09InJwbSIKK1JQTUJVSUxEPSJycG1idWlsZCIKKworUEtHV1JJVEVESVJSUE0gPSAiJHtXT1JLRElSfS9kZXBsb3ktcnBtcyIKKworIyBNYWludGFpbmluZyB0aGUgcGVyZmlsZSBkZXBlbmRlbmNpZXMgaGFzIHNpbmdpZmljYW50IG92ZXJoZWFkIHdoZW4gd3JpdGluZyB0aGUgCisjIHBhY2thZ2VzLiBXaGVuIHNldCwgdGhpcyB2YWx1ZSBtZXJnZXMgdGhlbSBmb3IgZWZmaWNpZW5jeS4KK01FUkdFUEVSRklMRURFUFMgPSAiMSIKKworIyBDb25zdHJ1Y3QgcGVyIGZpbGUgZGVwZW5kZW5jaWVzIGZpbGUKK2RlZiB3cml0ZV9ycG1fcGVyZmlsZWRhdGEoc3JjbmFtZSwgZCk6CisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgIGRlZiBkdW1wX2ZpbGVyZGVwcyh2YXJuYW1lLCBvdXRmaWxlLCBkKToKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiIyEvdXNyL2Jpbi9lbnYgcHl0aG9uXG5cbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIiMgRGVwZW5kZW5jeSB0YWJsZVxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgnZGVwcyA9IHtcbicpCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGRlcGVuZHNmbGlzdF9rZXkgPSAnRklMRScgKyB2YXJuYW1lICsgJ0ZMSVNUJyArICJfIiArIHBrZworICAgICAgICAgICAgZGVwZW5kc2ZsaXN0ID0gKGQuZ2V0VmFyKGRlcGVuZHNmbGlzdF9rZXksIFRydWUpIG9yICIiKQorICAgICAgICAgICAgZm9yIGRmaWxlIGluIGRlcGVuZHNmbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGtleSA9ICJGSUxFIiArIHZhcm5hbWUgKyAiXyIgKyBkZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zKGQuZ2V0VmFyKGtleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGRmaWxlLnJlcGxhY2UoIkB1bmRlcnNjb3JlQCIsICJfIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAY2xvc2VicmFjZUAiLCAiXSIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQG9wZW5icmFjZUAiLCAiWyIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQHRhYkAiLCAiXHQiKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBzcGFjZUAiLCAiICIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQGF0QCIsICJAIikKKyAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCciJyArIHBrZ2QgKyBmaWxlICsgJyIgOiAiJykKKyAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGFuZCB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgiKCIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgiKSIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGRlcCArICIgIiArIHZlciArICIgIikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoZGVwICsgIiAiKQorICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoJyIsXG4nKQorICAgICAgICBvdXRmaWxlLndyaXRlKCd9XG5cbicpCisgICAgICAgIG91dGZpbGUud3JpdGUoImltcG9ydCBzeXNcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIndoaWxlIDE6XG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGlmIG5vdCBsaW5lOlxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRcdHN5cy5leGl0KDApXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdGlmIGxpbmUgaW4gZGVwczpcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0XHRwcmludChkZXBzW2xpbmVdICsgJ1xcbicpXG4iKQorCisgICAgIyBPRS1jb3JlIGRlcGVuZGVuY2llcyBhLmsuYS4gUlBNIHJlcXVpcmVzCisgICAgb3V0ZGVwZW5kcyA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5yZXF1aXJlcyIKKworICAgIHRyeToKKyAgICAgICAgZGVwZW5kc2ZpbGUgPSBvcGVuKG91dGRlcGVuZHMsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICBkdW1wX2ZpbGVyZGVwcygnUkRFUEVORFMnLCBkZXBlbmRzZmlsZSwgZCkKKworICAgIGRlcGVuZHNmaWxlLmNsb3NlKCkKKyAgICBvcy5jaG1vZChvdXRkZXBlbmRzLCAwNzU1KQorCisgICAgIyBPRS1jb3JlIC8gUlBNIFByb3ZpZGVzCisgICAgb3V0cHJvdmlkZXMgPSB3b3JrZGlyICsgIi8iICsgc3JjbmFtZSArICIucHJvdmlkZXMiCisKKyAgICB0cnk6CisgICAgICAgIHByb3ZpZGVzZmlsZSA9IG9wZW4ob3V0cHJvdmlkZXMsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICBkdW1wX2ZpbGVyZGVwcygnUlBST1ZJREVTJywgcHJvdmlkZXNmaWxlLCBkKQorCisgICAgcHJvdmlkZXNmaWxlLmNsb3NlKCkKKyAgICBvcy5jaG1vZChvdXRwcm92aWRlcywgMDc1NSkKKworICAgIHJldHVybiAob3V0ZGVwZW5kcywgb3V0cHJvdmlkZXMpCisKKworcHl0aG9uIHdyaXRlX3NwZWNmaWxlICgpIHsKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKworICAgICMgYXBwZW5kIGluZm9ybWF0aW9uIGZvciBsb2dzIGFuZCBwYXRjaGVzIHRvICVwcmVwCisgICAgZGVmIGFkZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJSVwcmVwIC1uICVzJyAlIGQuZ2V0VmFyKCdQTicsIFRydWUpICkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJXMnICUgImVjaG8gXCJpbmNsdWRlIGxvZ3MgYW5kIHBhdGNoZXMsIFBsZWFzZSBjaGVjayB0aGVtIGluIFNPVVJDRVNcIiIpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAjIGFwcGVuZCB0aGUgbmFtZSBvZiB0YXJiYWxsIHRvIGtleSB3b3JkICdTT1VSQ0UnIGluIHh4eC5zcGVjLgorICAgIGRlZiB0YWlsX3NvdXJjZShkKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgICAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcl9vdXRkaXIpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc291cmNlX2xpc3QgPSBvcy5saXN0ZGlyKGFyX291dGRpcikKKyAgICAgICAgICAgIHNvdXJjZV9udW1iZXIgPSAwCisgICAgICAgICAgICBmb3Igc291cmNlIGluIHNvdXJjZV9saXN0OgorICAgICAgICAgICAgICAgICMgVGhlIHJwbWJ1aWxkIGRvZXNuJ3QgbmVlZCB0aGUgcm9vdCBwZXJtaXNzaW9uLCBidXQgaXQgbmVlZHMKKyAgICAgICAgICAgICAgICAjIHRvIGtub3cgdGhlIGZpbGUncyB1c2VyIGFuZCBncm91cCBuYW1lLCB0aGUgb25seSB1c2VyIGFuZAorICAgICAgICAgICAgICAgICMgZ3JvdXAgaW4gZmFrZXJvb3QgaXMgInJvb3QiIHdoZW4gd29ya2luZyBpbiBmYWtlcm9vdC4KKyAgICAgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgc291cmNlKQorICAgICAgICAgICAgICAgIG9zLmNob3duKGYsIDAsIDApCisgICAgICAgICAgICAgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdTb3VyY2UlczogJXMnICUgKHNvdXJjZV9udW1iZXIsIHNvdXJjZSkpCisgICAgICAgICAgICAgICAgc291cmNlX251bWJlciArPSAxCisgICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0byByZW1vdmUgdGhlIE1MUFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKKyAgICAjIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLi4uCisgICAgZGVmIHN0cmlwX211bHRpbGliKG5hbWUsIGQpOgorICAgICAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIGV4dCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInIGFuZCBuYW1lIGFuZCBuYW1lLmZpbmQoZWV4dFsxXSArICctJykgPj0gMDoKKyAgICAgICAgICAgICAgICBuYW1lID0gIiIuam9pbihuYW1lLnNwbGl0KGVleHRbMV0gKyAnLScpKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIHN0cmlwX211bHRpbGliX2RlcHMoZGVwcywgZCk6CisgICAgICAgIGRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwcyBvciAiIikKKyAgICAgICAgbmV3ZGVwcyA9IHt9CisgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kczoKKyAgICAgICAgICAgIG5ld2RlcHNbc3RyaXBfbXVsdGlsaWIoZGVwLCBkKV0gPSBkZXBlbmRzW2RlcF0KKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzKQorCisjICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisjICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVuKG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID09IDA6CisjICAgICAgICAgICAgcmV0dXJuIG1sLmpvaW4obmFtZS5zcGxpdChtbCwgMSlbMTpdKQorIyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgICMgSW4gUlBNLCBkZXBlbmRlbmNpZXMgYXJlIG9mIHRoZSBmb3JtYXQ6IHBrZyA8Pj0gRXBvY2g6VmVyc2lvbi1SZWxlYXNlCisgICAgIyBUaGlzIGZvcm1hdCBpcyBzaW1pbGFyIHRvIE9FLCBob3dldmVyIHRoZXJlIGFyZSByZXN0cmljdGlvbnMgb24gdGhlCisgICAgIyBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGluIGEgZmllbGQuICBJbiB0aGUgVmVyc2lvbiBmaWVsZCwgIi0iCisgICAgIyBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZC4gICItIiBpcyBhbGxvd2VkIGluIHRoZSBSZWxlYXNlIGZpZWxkLgorICAgICMKKyAgICAjIFdlIHRyYW5zbGF0ZSB0aGUgIi0iIGluIHRoZSB2ZXJzaW9uIHRvIGEgIisiLCBieSBsb2FkaW5nIHRoZSBQS0dWCisgICAgIyBmcm9tIHRoZSBkZXBlbmRlbnQgcmVjaXBlLCByZXBsYWNpbmcgdGhlIC0gd2l0aCBhICssIGFuZCB0aGVuIHVzaW5nCisgICAgIyB0aGF0IHZhbHVlIHRvIGRvIGEgcmVwbGFjZSBpbnNpZGUgb2YgdGhpcyByZWNpcGUncyBkZXBlbmRlbmNpZXMuCisgICAgIyBUaGlzIHByZXNlcnZlcyB0aGUgIi0iIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB2ZXJzaW9uIGFuZCByZWxlYXNlLCBhcworICAgICMgd2VsbCBhcyBhbnkgIi0iIGNoYXJhY3RlcnMgaW5zaWRlIG9mIHRoZSByZWxlYXNlIGZpZWxkLgorICAgICMKKyAgICAjIEFsbCBvZiB0aGlzIGhhcyB0byBoYXBwZW4gQkVGT1JFIHRoZSBtYXBwaW5nX3JlbmFtZV9ob29rIGFzCisgICAgIyBhZnRlciByZW5hbWluZyB3ZSBjYW5ub3QgbG9vayB1cCB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBwYWNrYWdlZGF0YQorICAgICMgc3RvcmUuCisgICAgZGVmIHRyYW5zbGF0ZV92ZXJzKHZhcm5hbWUsIGQpOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgZGVwZW5kczoKKyAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBlbmRzKQorICAgICAgICAgICAgbmV3ZGVwc19kaWN0ID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIHZlcmxpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciB2ZXIgaW4gZGVwZW5kc19kaWN0W2RlcF06CisgICAgICAgICAgICAgICAgICAgIGlmICctJyBpbiB2ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJkID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhX2RpY3QoZGVwLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ1BLR1YnIGluIHN1YmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHYgPSBzdWJkWydQViddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtndiA9IHN1YmRbJ1BLR1YnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHB2ID0gcGtndi5yZXBsYWNlKCctJywgJysnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKHB2LCByZXBwdikucmVwbGFjZShwa2d2LCByZXBwdikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdQS0dSJyBpbiBzdWJkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIFBLR1IgcmF0aGVyIHRoYW4gUFIgaW4gdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIgPSAnLScgKyBzdWJkWydQUiddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnciA9ICctJyArIHN1YmRbJ1BLR1InXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ3Igbm90IGluIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UocHIsIHBrZ3IpCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJsaXN0LmFwcGVuZCh2ZXIpCisgICAgICAgICAgICAgICAgbmV3ZGVwc19kaWN0W2RlcF0gPSB2ZXJsaXN0CisgICAgICAgICAgICBkZXBlbmRzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgICAgIGQuc2V0VmFyKHZhcm5hbWUsIGRlcGVuZHMuc3RyaXAoKSkKKworICAgICMgV2UgbmVlZCB0byBjaGFuZ2UgdGhlIHN0eWxlIHRoZSBkZXBlbmRlbmN5IGZyb20gQkIgdG8gUlBNCisgICAgIyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBBRlRFUiB0aGUgbWFwcGluZ19yZW5hbWVfaG9vaworICAgIGRlZiBwcmludF9kZXBzKHZhcmlhYmxlLCB0YWcsIGFycmF5LCBkKToKKyAgICAgICAgZGVwZW5kcyA9IHZhcmlhYmxlCisgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZGVwZW5kcykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIGZvciB2ZXIgaW4gZGVwZW5kc19kaWN0W2RlcF06CisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcoJywgJycpCisgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCcpJywgJycpCisgICAgICAgICAgICAgICAgICAgIGFycmF5LmFwcGVuZCgiJXM6ICVzICVzIiAlICh0YWcsIGRlcCwgdmVyKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGVuKGRlcGVuZHNfZGljdFtkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMiICUgKHRhZywgZGVwKSkKKworICAgIGRlZiB3YWxrX2ZpbGVzKHdhbGtwYXRoLCB0YXJnZXQsIGNvbmZmaWxlcywgZGlyZmlsZXMpOgorICAgICAgICAjIFdlIGNhbiByYWNlIGFnYWluc3QgdGhlIGlway9kZWIgYmFja2VuZHMgd2hpY2ggY3JlYXRlIENPTlRST0wgb3IgREVCSUFOIGRpcmVjdG9yaWVzCisgICAgICAgICMgd2hlbiBwYWNrYWdpbmcuIFdlIGp1c3QgaWdub3JlIHRoZXNlIGZpbGVzIHdoaWNoIGFyZSBjcmVhdGVkIGluIAorICAgICAgICAjIHBhY2thZ2VzLXNwbGl0LyBhbmQgbm90IHBhY2thZ2UvCisgICAgICAgICMgV2UgaGF2ZSB0aGUgb2RkIHNpdHVhdGlvbiB3aGVyZSB0aGUgQ09OVFJPTC9ERUJJQU4gZGlyZWN0b3J5IGNhbiBiZSByZW1vdmVkIGluIHRoZSBtaWRkbGUgb2YKKyAgICAgICAgIyBvZiB0aGUgd2FsaywgdGhlIGlzZGlyKCkgdGVzdCB3b3VsZCB0aGVuIGZhaWwgYW5kIHRoZSB3YWxrIGNvZGUgd291bGQgYXNzdW1lIGl0cyBhIGZpbGUKKyAgICAgICAgIyBoZW5jZSB3ZSBjaGVjayBmb3IgdGhlIG5hbWVzIGluIGZpbGVzIHRvby4KKyAgICAgICAgZm9yIHJvb3RwYXRoLCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtwYXRoKToKKyAgICAgICAgICAgIHBhdGggPSByb290cGF0aC5yZXBsYWNlKHdhbGtwYXRoLCAiIikKKyAgICAgICAgICAgIGlmIHBhdGguZW5kc3dpdGgoIkRFQklBTiIpIG9yIHBhdGguZW5kc3dpdGgoIkNPTlRST0wiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisKKyAgICAgICAgICAgICMgVHJlYXQgYWxsIHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVzIGFzIG5vcm1hbCBmaWxlcy4KKyAgICAgICAgICAgICMgb3Mud2FsaygpIGxpc3RzIHRoZW0gYXMgZGlyZWN0b3JpZXMuCisgICAgICAgICAgICBkZWYgbW92ZV90b19maWxlcyhkaXIpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG9zLnBhdGguam9pbihyb290cGF0aCwgZGlyKSk6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChkaXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkaXJzWzpdID0gW2RpciBmb3IgZGlyIGluIGRpcnMgaWYgbm90IG1vdmVfdG9fZmlsZXMoZGlyKV0KKworICAgICAgICAgICAgIyBEaXJlY3RvcnkgaGFuZGxpbmcgY2FuIGhhcHBlbiBpbiB0d28gd2F5cywgZWl0aGVyIERJUkZJTEVTIGlzIG5vdCBzZXQgYXQgYWxsCisgICAgICAgICAgICAjIGluIHdoaWNoIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHRoZSBvbGRlciBiZWhhdmlvdXIgb2YgcGFja2FnZXMgb3duaW5nIGFsbCB0aGVpcgorICAgICAgICAgICAgIyBkaXJlY3RvcmllcworICAgICAgICAgICAgaWYgZGlyZmlsZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGRpciA9PSAiQ09OVFJPTCIgb3IgZGlyID09ICJERUJJQU4iOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZGlyID0gZGlyLnJlcGxhY2UoIiUiLCAiJSUlJSUlJSUiKQorICAgICAgICAgICAgICAgICAgICAjIEFsbCBwYWNrYWdlcyBvd24gdGhlIGRpcmVjdG9yaWVzIHRoZWlyIGZpbGVzIGFyZSBpbi4uLgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclZGlyICInICsgcGF0aCArICcvJyArIGRpciArICciJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBwYWNrYWdlcyBvd24gb25seSBlbXB0eSBkaXJlY3RvcmllcyBvciBleHBsaWN0IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBvdmVybGFwcGluZyBvZiBzZWN1cml0eSBwZXJtaXNzaW9uLgorICAgICAgICAgICAgICAgIGlmIHBhdGggYW5kIG5vdCBmaWxlcyBhbmQgbm90IGRpcnM6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVkaXIgIicgKyBwYXRoICsgJyInKQorICAgICAgICAgICAgICAgIGVsaWYgcGF0aCBhbmQgcGF0aCBpbiBkaXJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWRpciAiJyArIHBhdGggKyAnIicpCisKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpbGUgPT0gIkNPTlRST0wiIG9yIGZpbGUgPT0gIkRFQklBTiI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisgICAgICAgICAgICAgICAgaWYgY29uZmZpbGVzLmNvdW50KHBhdGggKyAnLycgKyBmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWNvbmZpZyAiJyArIHBhdGggKyAnLycgKyBmaWxlICsgJyInKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyInICsgcGF0aCArICcvJyArIGZpbGUgKyAnIicpCisKKyAgICAjIFByZXZlbnQgdGhlIHByZXJtL3Bvc3RybSBzY3JpcHRzIGZyb20gYmVpbmcgcnVuIGR1cmluZyBhbiB1cGdyYWRlCisgICAgZGVmIHdyYXBfdW5pbnN0YWxsKHNjcmlwdHZhcik6CisgICAgICAgIHNjciA9IHNjcmlwdHZhci5zdHJpcCgpCisgICAgICAgIGlmIHNjci5zdGFydHN3aXRoKCIjISIpOgorICAgICAgICAgICAgcG9zID0gc2NyLmZpbmQoIlxuIikgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgIHNjciA9IHNjcls6cG9zXSArICdpZiBbICIkMSIgPSAiMCIgXSA7IHRoZW5cbicgKyBzY3JbcG9zOl0gKyAnXG5maScKKyAgICAgICAgcmV0dXJuIHNjcgorCisgICAgZGVmIGdldF9wZXJmaWxlKHZhcm5hbWUsIHBrZywgZCk6CisgICAgICAgIGRlcHMgPSBbXQorICAgICAgICBkZXBlbmRzZmxpc3Rfa2V5ID0gJ0ZJTEUnICsgdmFybmFtZSArICdGTElTVCcgKyAiXyIgKyBwa2cKKyAgICAgICAgZGVwZW5kc2ZsaXN0ID0gKGQuZ2V0VmFyKGRlcGVuZHNmbGlzdF9rZXksIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgZGZpbGUgaW4gZGVwZW5kc2ZsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICBrZXkgPSAiRklMRSIgKyB2YXJuYW1lICsgIl8iICsgZGZpbGUgKyAiXyIgKyBwa2cKKyAgICAgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRlcGVuZHMpCisgICAgICAgIHJldHVybiAiICIuam9pbihkZXBzKQorCisgICAgZGVmIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlLCB0ZXh0KToKKyAgICAgICAgIiIiCisgICAgICAgIEFkZCB0aGUgZGVzY3JpcHRpb24gdG8gdGhlIHNwZWMgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0ZXh0d3JhcAorICAgICAgICBkZWRlbnRfdGV4dCA9IHRleHR3cmFwLmRlZGVudCh0ZXh0KS5zdHJpcCgpCisgICAgICAgICMgQml0YmFrZSBzYXZlcyAiXG4iIGFzICJcXG4iCisgICAgICAgIGlmICdcXG4nIGluIGRlZGVudF90ZXh0OgorICAgICAgICAgICAgZm9yIHQgaW4gZGVkZW50X3RleHQuc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgICAgIHNwZWNfcHJlYW1ibGUuYXBwZW5kKHQuc3RyaXAoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGUuYXBwZW5kKCclcycgJSB0ZXh0d3JhcC5maWxsKGRlZGVudF90ZXh0LCB3aWR0aD03NSkpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaWYgbm90IHBrZ2Rlc3Q6CisgICAgICAgIGJiLmZhdGFsKCJObyBQS0dERVNUIikKKworICAgIG91dHNwZWNmaWxlID0gZC5nZXRWYXIoJ09VVFNQRUNGSUxFJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3V0c3BlY2ZpbGU6CisgICAgICAgIGJiLmZhdGFsKCJObyBPVVRTUEVDRklMRSIpCisKKyAgICAjIENvbnN0cnVjdCB0aGUgU1BFQyBmaWxlLi4uCisgICAgc3JjbmFtZSAgICA9IHN0cmlwX211bHRpbGliKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkKQorICAgIHNyY3N1bW1hcnkgPSAoZC5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgc3JjdmVyc2lvbiA9IGQuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkucmVwbGFjZSgnLScsICcrJykKKyAgICBzcmNyZWxlYXNlID0gZC5nZXRWYXIoJ1BLR1InLCBUcnVlKQorICAgIHNyY2Vwb2NoICAgPSAoZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKSBvciAiIikKKyAgICBzcmNsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIHNyY3NlY3Rpb24gPSBkLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgc3JjbWFpbnRhaW5lciAgPSBkLmdldFZhcignTUFJTlRBSU5FUicsIFRydWUpCisgICAgc3JjaG9tZXBhZ2UgICAgPSBkLmdldFZhcignSE9NRVBBR0UnLCBUcnVlKQorICAgIHNyY2Rlc2NyaXB0aW9uID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIi4iCisgICAgc3JjY3VzdG9tdGFnc2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgicnBtIiwgZCkKKworICAgIHNyY2RlcGVuZHMgICAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpLCBkKQorICAgIHNyY3JkZXBlbmRzICAgID0gW10KKyAgICBzcmNycmVjb21tZW5kcyA9IFtdCisgICAgc3JjcnN1Z2dlc3RzICAgPSBbXQorICAgIHNyY3Jwcm92aWRlcyAgID0gW10KKyAgICBzcmNycmVwbGFjZXMgICA9IFtdCisgICAgc3JjcmNvbmZsaWN0cyAgPSBbXQorICAgIHNyY3JvYnNvbGV0ZXMgID0gW10KKworICAgIHNyY3JwcmVpbnN0ICA9IFtdCisgICAgc3JjcnBvc3RpbnN0ID0gW10KKyAgICBzcmNycHJlcm0gICAgPSBbXQorICAgIHNyY3Jwb3N0cm0gICA9IFtdCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcCA9IFtdCisgICAgc3BlY19wcmVhbWJsZV9ib3R0b20gPSBbXQorCisgICAgc3BlY19zY3JpcHRsZXRzX3RvcCA9IFtdCisgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbSA9IFtdCisKKyAgICBzcGVjX2ZpbGVzX3RvcCA9IFtdCisgICAgc3BlY19maWxlc19ib3R0b20gPSBbXQorCisgICAgcGVyZmlsZWRlcHMgPSAoZC5nZXRWYXIoIk1FUkdFUEVSRklMRURFUFMiLCBUcnVlKSBvciAiMCIpID09ICIwIgorICAgIGV4dHJhX3BrZ2RhdGEgPSAoZC5nZXRWYXIoIlJQTV9FWFRSQV9QS0dEQVRBIiwgVHJ1ZSkgb3IgIjAiKSA9PSAiMSIKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1JPT1QnLCAnJykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVF8lcycgJSBwa2csIHJvb3QpCisgICAgICAgIHBrZ25hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnbmFtZToKKyAgICAgICAgICAgIHBrZ25hbWUgPSBwa2cKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUEtHJywgcGtnbmFtZSkKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjoiICsgcGtnKQorCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGNvbmZmaWxlcyA9IGdldF9jb25mZmlsZXMocGtnLCBkKQorICAgICAgICBkaXJmaWxlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RJUkZJTEVTJywgVHJ1ZSkKKyAgICAgICAgaWYgZGlyZmlsZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkaXJmaWxlcyA9IGRpcmZpbGVzLnNwbGl0KCkKKworICAgICAgICBzcGxpdG5hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihwa2duYW1lLCBkKQorCisgICAgICAgIHNwbGl0c3VtbWFyeSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgICAgIHNwbGl0dmVyc2lvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnKycpCisgICAgICAgIHNwbGl0cmVsZWFzZSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0ZXBvY2ggICA9IChsb2NhbGRhdGEuZ2V0VmFyKCdQS0dFJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0bGljZW5zZSA9IChsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0c2VjdGlvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIHNwbGl0ZGVzY3JpcHRpb24gPSAobG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIpCisgICAgICAgIHNwbGl0Y3VzdG9tdGFnc2NodW5rID0gZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSgicnBtIiwgbG9jYWxkYXRhKQorCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSREVQRU5EUycsIGxvY2FsZGF0YSkKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JSRUNPTU1FTkRTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlNVR0dFU1RTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlBST1ZJREVTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlJFUExBQ0VTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUkNPTkZMSUNUUycsIGxvY2FsZGF0YSkKKworICAgICAgICAjIE1hcCB0aGUgZGVwZW5kZW5jaWVzIGludG8gdGhlaXIgZmluYWwgZm9ybQorICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBzcGxpdHJkZXBlbmRzICAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSREVQRU5EUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJyZWNvbW1lbmRzID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUkVDT01NRU5EUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJzdWdnZXN0cyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSU1VHR0VTVFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRycHJvdmlkZXMgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlBST1ZJREVTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnJlcGxhY2VzICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JSRVBMQUNFUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJjb25mbGljdHMgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSQ09ORkxJQ1RTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cm9ic29sZXRlcyAgPSBbXQorCisgICAgICAgIHNwbGl0cnByZWluc3QgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBzcGxpdHJwb3N0aW5zdCA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIHNwbGl0cnByZXJtICAgID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgc3BsaXRycG9zdHJtICAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKworCisgICAgICAgIGlmIG5vdCBwZXJmaWxlZGVwczoKKyAgICAgICAgICAgICMgQWRkIGluIHN1bW1hcnkgb2YgcGVyIGZpbGUgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBzcGxpdHJkZXBlbmRzID0gc3BsaXRyZGVwZW5kcyArICIgIiArIGdldF9wZXJmaWxlKCdSREVQRU5EUycsIHBrZywgZCkKKyAgICAgICAgICAgIHNwbGl0cnByb3ZpZGVzID0gc3BsaXRycHJvdmlkZXMgKyAiICIgKyBnZXRfcGVyZmlsZSgnUlBST1ZJREVTJywgcGtnLCBkKQorCisgICAgICAgICMgR2F0aGVyIHNwZWNpYWwgc3JjL2ZpcnN0IHBhY2thZ2UgZGF0YQorICAgICAgICBpZiBzcmNuYW1lID09IHNwbGl0bmFtZToKKyAgICAgICAgICAgIHNyY3JkZXBlbmRzICAgID0gc3BsaXRyZGVwZW5kcworICAgICAgICAgICAgc3JjcnJlY29tbWVuZHMgPSBzcGxpdHJyZWNvbW1lbmRzCisgICAgICAgICAgICBzcmNyc3VnZ2VzdHMgICA9IHNwbGl0cnN1Z2dlc3RzCisgICAgICAgICAgICBzcmNycHJvdmlkZXMgICA9IHNwbGl0cnByb3ZpZGVzCisgICAgICAgICAgICBzcmNycmVwbGFjZXMgICA9IHNwbGl0cnJlcGxhY2VzCisgICAgICAgICAgICBzcmNyY29uZmxpY3RzICA9IHNwbGl0cmNvbmZsaWN0cworCisgICAgICAgICAgICBzcmNycHJlaW5zdCAgICA9IHNwbGl0cnByZWluc3QKKyAgICAgICAgICAgIHNyY3Jwb3N0aW5zdCAgID0gc3BsaXRycG9zdGluc3QKKyAgICAgICAgICAgIHNyY3JwcmVybSAgICAgID0gc3BsaXRycHJlcm0KKyAgICAgICAgICAgIHNyY3Jwb3N0cm0gICAgID0gc3BsaXRycG9zdHJtCisKKyAgICAgICAgICAgIGZpbGVfbGlzdCA9IFtdCisgICAgICAgICAgICB3YWxrX2ZpbGVzKHJvb3QsIGZpbGVfbGlzdCwgY29uZmZpbGVzLCBkaXJmaWxlcykKKyAgICAgICAgICAgIGlmIG5vdCBmaWxlX2xpc3QgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgUlBNIHBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJyVmaWxlcycpCisgICAgICAgICAgICAgICAgaWYgZXh0cmFfcGtnZGF0YToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9ycG1fZXh0cmFfcGtnZGF0YShzcGxpdG5hbWUsIHNwZWNfZmlsZXNfdG9wLCBsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCclZGVmYXR0cigtLC0sLSwtKScpCisgICAgICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5leHRlbmQoZmlsZV9saXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIEVNUFRZIFJQTSBQYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc190b3AuYXBwZW5kKCcnKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFByb2Nlc3Mgc3VicGFja2FnZSBkYXRhCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJSVwYWNrYWdlIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcGxpdHN1bW1hcnkpCisgICAgICAgIGlmIHNyY3ZlcnNpb24gIT0gc3BsaXR2ZXJzaW9uOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdWZXJzaW9uOiAlcycgJSBzcGxpdHZlcnNpb24pCisgICAgICAgIGlmIHNyY3JlbGVhc2UgIT0gc3BsaXRyZWxlYXNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdSZWxlYXNlOiAlcycgJSBzcGxpdHJlbGVhc2UpCisgICAgICAgIGlmIHNyY2Vwb2NoICE9IHNwbGl0ZXBvY2g6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcGxpdGVwb2NoKQorICAgICAgICBpZiBzcmNsaWNlbnNlICE9IHNwbGl0bGljZW5zZToKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnTGljZW5zZTogJXMnICUgc3BsaXRsaWNlbnNlKQorICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ0dyb3VwOiAlcycgJSBzcGxpdHNlY3Rpb24pCisKKyAgICAgICAgaWYgc3JjY3VzdG9tdGFnc2NodW5rICE9IHNwbGl0Y3VzdG9tdGFnc2NodW5rOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKHNwbGl0Y3VzdG9tdGFnc2NodW5rKQorCisgICAgICAgICMgUmVwbGFjZXMgPT0gT2Jzb2xldGVzICYmIFByb3ZpZGVzCisgICAgICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRyb2Jzb2xldGVzIG9yICIiKQorICAgICAgICBycHJvdmlkZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRycHJvdmlkZXMgb3IgIiIpCisgICAgICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJyZXBsYWNlcyBvciAiIikKKyAgICAgICAgZm9yIGRlcCBpbiBycmVwbGFjZXM6CisgICAgICAgICAgICBpZiBub3QgZGVwIGluIHJvYnNvbGV0ZXM6CisgICAgICAgICAgICAgICAgcm9ic29sZXRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcnByb3ZpZGVzOgorICAgICAgICAgICAgICAgIHJwcm92aWRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgc3BsaXRyb2Jzb2xldGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJvYnNvbGV0ZXMsIGNvbW1hc2VwPUZhbHNlKQorICAgICAgICBzcGxpdHJwcm92aWRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhycHJvdmlkZXMsIGNvbW1hc2VwPUZhbHNlKQorCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnByZWluc3Q6CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwcmUpIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIGlmIHNwbGl0cnBvc3RpbnN0OgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocG9zdCkiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycHJlcm06CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwcmV1bikiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycG9zdHJtOgorICAgICAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMocG9zdHVuKSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgICMgU3VnZ2VzdHMgaW4gUlBNIGFyZSBsaWtlIHJlY29tbWVuZHMgaW4gT0UtY29yZSEKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJyZWNvbW1lbmRzLCAiU3VnZ2VzdHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgIyBXaGlsZSB0aGVyZSBpcyBubyBhbmFsb2cgZm9yIHN1Z2dlc3RzLi4uIChTbyBjYWxsIHRoZW0gcmVjb21tZW5kcyBmb3Igbm93KQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnN1Z2dlc3RzLCAgIlJlY29tbWVuZHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJwcm92aWRlcywgICJQcm92aWRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cm9ic29sZXRlcywgIk9ic29sZXRlcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgICMgY29uZmxpY3RzIGNhbiBub3QgYmUgaW4gYSBwcm92aWRlISAgV2Ugd2lsbCBuZWVkIHRvIGZpbHRlciBpdC4KKyAgICAgICAgaWYgc3BsaXRyY29uZmxpY3RzOgorICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cmNvbmZsaWN0cykKKyAgICAgICAgICAgIG5ld2RlcHNfZGljdCA9IHt9CisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIHNwbGl0cnByb3ZpZGVzOgorICAgICAgICAgICAgICAgICAgICBuZXdkZXBzX2RpY3RbZGVwXSA9IGRlcGVuZHNfZGljdFtkZXBdCisgICAgICAgICAgICBpZiBuZXdkZXBzX2RpY3Q6CisgICAgICAgICAgICAgICAgc3BsaXRyY29uZmxpY3RzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BsaXRyY29uZmxpY3RzID0gIiIKKworICAgICAgICBwcmludF9kZXBzKHNwbGl0cmNvbmZsaWN0cywgICJDb25mbGljdHMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKworICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCclJWRlc2NyaXB0aW9uIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGVfYm90dG9tLCBzcGxpdGRlc2NyaXB0aW9uKQorCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICAjIE5vdyBwcm9jZXNzIHNjcmlwdGxldHMKKyAgICAgICAgaWYgc3BsaXRycHJlaW5zdDoKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXByZSAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHByZWluc3QnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc3BsaXRycHJlaW5zdCkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwb3N0aW5zdDoKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXBvc3QgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwb3N0aW5zdCcgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzcGxpdHJwb3N0aW5zdCkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwcmVybToKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCclJXByZXVuIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcHJlcm0nICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3BsaXRycHJlcm0pCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJykKKyAgICAgICAgaWYgc3BsaXRycG9zdHJtOgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcG9zdHVuIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcG9zdHJtJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IHdyYXBfdW5pbnN0YWxsKHNwbGl0cnBvc3RybSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgICMgTm93IHByb2Nlc3MgZmlsZXMKKyAgICAgICAgZmlsZV9saXN0ID0gW10KKyAgICAgICAgd2Fsa19maWxlcyhyb290LCBmaWxlX2xpc3QsIGNvbmZmaWxlcywgZGlyZmlsZXMpCisgICAgICAgIGlmIG5vdCBmaWxlX2xpc3QgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ0FMTE9XX0VNUFRZJywgRmFsc2UpICE9ICIxIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclJWZpbGVzIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIGlmIGV4dHJhX3BrZ2RhdGE6CisgICAgICAgICAgICAgICAgcGFja2FnZV9ycG1fZXh0cmFfcGtnZGF0YShzcGxpdG5hbWUsIHNwZWNfZmlsZXNfYm90dG9tLCBsb2NhbGRhdGEpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyVkZWZhdHRyKC0sLSwtLC0pJykKKyAgICAgICAgICAgIGlmIGZpbGVfbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmV4dGVuZChmaWxlX2xpc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIEVNUFRZIFJQTSBQYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgZGVsIGxvY2FsZGF0YQorICAgIAorICAgIGFkZF9wcmVwKGQsc3BlY19maWxlc19ib3R0b20pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdTdW1tYXJ5OiAlcycgJSBzcmNzdW1tYXJ5KQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnTmFtZTogJXMnICUgc3JjbmFtZSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1ZlcnNpb246ICVzJyAlIHNyY3ZlcnNpb24pCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdSZWxlYXNlOiAlcycgJSBzcmNyZWxlYXNlKQorICAgIGlmIHNyY2Vwb2NoIGFuZCBzcmNlcG9jaC5zdHJpcCgpICE9ICIiOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0Vwb2NoOiAlcycgJSBzcmNlcG9jaCkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0xpY2Vuc2U6ICVzJyAlIHNyY2xpY2Vuc2UpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdHcm91cDogJXMnICUgc3Jjc2VjdGlvbikKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1BhY2thZ2VyOiAlcycgJSBzcmNtYWludGFpbmVyKQorICAgIGlmIHNyY2hvbWVwYWdlOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1VSTDogJXMnICUgc3JjaG9tZXBhZ2UpCisgICAgaWYgc3JjY3VzdG9tdGFnc2NodW5rOgorICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoc3JjY3VzdG9tdGFnc2NodW5rKQorICAgIHRhaWxfc291cmNlKGQpCisKKyAgICAjIFJlcGxhY2VzID09IE9ic29sZXRlcyAmJiBQcm92aWRlcworICAgIHJvYnNvbGV0ZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3Jjcm9ic29sZXRlcyBvciAiIikKKyAgICBycHJvdmlkZXMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3JjcnByb3ZpZGVzIG9yICIiKQorICAgIHJyZXBsYWNlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNycmVwbGFjZXMgb3IgIiIpCisgICAgZm9yIGRlcCBpbiBycmVwbGFjZXM6CisgICAgICAgIGlmIG5vdCBkZXAgaW4gcm9ic29sZXRlczoKKyAgICAgICAgICAgIHJvYnNvbGV0ZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgICAgIGlmIG5vdCBkZXAgaW4gcnByb3ZpZGVzOgorICAgICAgICAgICAgcnByb3ZpZGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgIHNyY3JvYnNvbGV0ZXMgPSBiYi51dGlscy5qb2luX2RlcHMocm9ic29sZXRlcywgY29tbWFzZXA9RmFsc2UpCisgICAgc3JjcnByb3ZpZGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcywgY29tbWFzZXA9RmFsc2UpCisKKyAgICBwcmludF9kZXBzKHNyY2RlcGVuZHMsICJCdWlsZFJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnByZWluc3Q6CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwcmUpIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgaWYgc3JjcnBvc3RpbnN0OgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocG9zdCkiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycHJlcm06CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwcmV1bikiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycG9zdHJtOgorICAgICAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMocG9zdHVuKSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorCisgICAgIyBTdWdnZXN0cyBpbiBSUE0gYXJlIGxpa2UgcmVjb21tZW5kcyBpbiBPRS1jb3JlIQorICAgIHByaW50X2RlcHMoc3JjcnJlY29tbWVuZHMsICJTdWdnZXN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgICMgV2hpbGUgdGhlcmUgaXMgbm8gYW5hbG9nIGZvciBzdWdnZXN0cy4uLiAoU28gY2FsbCB0aGVtIHJlY29tbWVuZHMgZm9yIG5vdykKKyAgICBwcmludF9kZXBzKHNyY3JzdWdnZXN0cywgIlJlY29tbWVuZHMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3Jwcm92aWRlcywgIlByb3ZpZGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgcHJpbnRfZGVwcyhzcmNyb2Jzb2xldGVzLCAiT2Jzb2xldGVzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgCisgICAgIyBjb25mbGljdHMgY2FuIG5vdCBiZSBpbiBhIHByb3ZpZGUhICBXZSB3aWxsIG5lZWQgdG8gZmlsdGVyIGl0LgorICAgIGlmIHNyY3Jjb25mbGljdHM6CisgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNyY29uZmxpY3RzKQorICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQorICAgICAgICBmb3IgZGVwIGluIGRlcGVuZHNfZGljdDoKKyAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc3JjcnByb3ZpZGVzOgorICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgaWYgbmV3ZGVwc19kaWN0OgorICAgICAgICAgICAgc3JjcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzX2RpY3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmNyY29uZmxpY3RzID0gIiIKKworICAgIHByaW50X2RlcHMoc3JjcmNvbmZsaWN0cywgIkNvbmZsaWN0cyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCcnKQorCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCclZGVzY3JpcHRpb24nKQorICAgIGFwcGVuZF9kZXNjcmlwdGlvbihzcGVjX3ByZWFtYmxlX3RvcCwgc3JjZGVzY3JpcHRpb24pCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJycpCisKKyAgICBpZiBzcmNycHJlaW5zdDoKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmUnKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHByZWluc3QnICUgc3JjbmFtZSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc3JjcnByZWluc3QpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3Jwb3N0aW5zdDoKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwb3N0JykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwb3N0aW5zdCcgJSBzcmNuYW1lKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzcmNycG9zdGluc3QpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3JwcmVybToKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwcmV1bicpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcHJlcm0nICUgc3JjbmFtZSkKKyAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcnByZXJtKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorICAgIGlmIHNyY3Jwb3N0cm06CisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCclcG9zdHVuJykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwb3N0cm0nICUgc3JjbmFtZSkKKyAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3JjcnBvc3RybSkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJykKKworICAgICMgV3JpdGUgdGhlIFNQRUMgZmlsZQorICAgIHRyeToKKyAgICAgICAgc3BlY2ZpbGUgPSBvcGVuKG91dHNwZWNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoInVuYWJsZSB0byBvcGVuIHNwZWMgZmlsZSBmb3Igd3JpdGluZy4iKQorCisgICAgIyBSUE1TUEVDX1BSRUFNQkxFIGlzIGEgd2F5IHRvIGFkZCBhcmJpdHJhcnkgdGV4dCB0byB0aGUgdG9wCisgICAgIyBvZiB0aGUgZ2VuZXJhdGVkIHNwZWMgZmlsZQorICAgIGV4dGVybmFsX3ByZWFtYmxlID0gZC5nZXRWYXIoIlJQTVNQRUNfUFJFQU1CTEUiLCBUcnVlKQorICAgIGlmIGV4dGVybmFsX3ByZWFtYmxlOgorICAgICAgICBzcGVjZmlsZS53cml0ZShleHRlcm5hbF9wcmVhbWJsZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3ByZWFtYmxlX3RvcDoKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3ByZWFtYmxlX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX3NjcmlwdGxldHNfdG9wOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfc2NyaXB0bGV0c19ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19maWxlc190b3A6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19maWxlc19ib3R0b206CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgc3BlY2ZpbGUuY2xvc2UoKQorfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCit3cml0ZV9zcGVjZmlsZVt2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCitweXRob24gZG9fcGFja2FnZV9ycG0gKCkgeworICAgICMgV2UgbmVlZCBhIHNpbXBsZSB3YXkgdG8gcmVtb3ZlIHRoZSBNTFBSRUZJWCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUsCisgICAgIyBhbmQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4uLgorICAgIGRlZiBzdHJpcF9tdWx0aWxpYihuYW1lLCBkKToKKyAgICAgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgICAgICBpZiBtbCBhbmQgbmFtZSBhbmQgbGVuKG1sKSAhPSAwIGFuZCBuYW1lLmZpbmQobWwpID49IDA6CisgICAgICAgICAgICByZXR1cm4gIiIuam9pbihuYW1lLnNwbGl0KG1sKSkKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgcGtnZCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBwa2dkIG9yIG5vdCB0bXBkaXI6CisgICAgICAgIGJiLmVycm9yKCJWYXJpYWJsZXMgaW5jb3JyZWN0bHkgc2V0LCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlcyBvciBwYWNrYWdlcyA9PSAnJzoKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIENvbnN0cnVjdCB0aGUgc3BlYyBmaWxlLi4uCisgICAgIyBJZiB0aGUgc3BlYyBmaWxlIGFscmVhZHkgZXhpc3QsIGFuZCBoYXMgbm90IGJlZW4gc3RvcmVkIGludG8gCisgICAgIyBwc2V1ZG8ncyBmaWxlcy5kYiwgaXQgbWF5YmUgY2F1c2UgcnBtYnVpbGQgc3JjLnJwbSBmYWlsLAorICAgICMgc28gcmVtb3ZlIGl0IGJlZm9yZSBkb2luZyBycG1idWlsZCBzcmMucnBtLgorICAgIHNyY25hbWUgICAgPSBzdHJpcF9tdWx0aWxpYihkLmdldFZhcignUE4nLCBUcnVlKSwgZCkKKyAgICBvdXRzcGVjZmlsZSA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5zcGVjIgorICAgIGlmIG9zLnBhdGguaXNmaWxlKG91dHNwZWNmaWxlKToKKyAgICAgICAgb3MucmVtb3ZlKG91dHNwZWNmaWxlKQorICAgIGQuc2V0VmFyKCdPVVRTUEVDRklMRScsIG91dHNwZWNmaWxlKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnd3JpdGVfc3BlY2ZpbGUnLCBkKQorCisgICAgcGVyZmlsZWRlcHMgPSAoZC5nZXRWYXIoIk1FUkdFUEVSRklMRURFUFMiLCBUcnVlKSBvciAiMCIpID09ICIwIgorICAgIGlmIHBlcmZpbGVkZXBzOgorICAgICAgICBvdXRkZXBlbmRzLCBvdXRwcm92aWRlcyA9IHdyaXRlX3JwbV9wZXJmaWxlZGF0YShzcmNuYW1lLCBkKQorCisgICAgIyBTZXR1cCB0aGUgcnBtYnVpbGQgYXJndW1lbnRzLi4uCisgICAgcnBtYnVpbGQgPSBkLmdldFZhcignUlBNQlVJTEQnLCBUcnVlKQorICAgIHRhcmdldHN5cyA9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkKKyAgICB0YXJnZXR2ZW5kb3IgPSBkLmdldFZhcignSE9TVF9WRU5ET1InLCBUcnVlKQorICAgIHBhY2thZ2VfYXJjaCA9IChkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgc2RrcGtnc3VmZml4ID0gKGQuZ2V0VmFyKCdTREtQS0dTVUZGSVgnLCBUcnVlKSBvciAibmF0aXZlc2RrIikucmVwbGFjZSgiLSIsICJfIikKKyAgICBpZiBwYWNrYWdlX2FyY2ggbm90IGluICJhbGwgYW55IG5vYXJjaCIuc3BsaXQoKSBhbmQgbm90IHBhY2thZ2VfYXJjaC5lbmRzd2l0aChzZGtwa2dzdWZmaXgpOgorICAgICAgICBtbF9wcmVmaXggPSAoZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgbWxfcHJlZml4ICsgcGFja2FnZV9hcmNoKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0hfRVhURU5EJywgcGFja2FnZV9hcmNoKQorICAgIHBrZ3dyaXRlZGlyID0gZC5leHBhbmQoJyR7UEtHV1JJVEVESVJSUE19LyR7UEFDS0FHRV9BUkNIX0VYVEVORH0nKQorICAgIGQuc2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBwa2d3cml0ZWRpcikKKyAgICBiYi5kZWJ1ZygxLCAnUEtHV1JJVEVESVI6ICVzJyAlIGQuZ2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBUcnVlKSkKKyAgICBwa2dhcmNoID0gZC5leHBhbmQoJyR7UEFDS0FHRV9BUkNIX0VYVEVORH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9JykKKyAgICBtYWdpY2ZpbGUgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5tZ2MnKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2d3cml0ZWRpcikKKyAgICBvcy5jaG1vZChwa2d3cml0ZWRpciwgMDc1NSkKKworICAgIGNtZCA9IHJwbWJ1aWxkCisgICAgY21kID0gY21kICsgIiAtLW5vZGVwcyAtLXNob3J0LWNpcmN1aXQgLS10YXJnZXQgIiArIHBrZ2FyY2ggKyAiIC0tYnVpbGRyb290ICIgKyBwa2dkCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3RvcGRpciAiICsgd29ya2RpciArICInIC0tZGVmaW5lICdfcnBtZGlyICIgKyBwa2d3cml0ZWRpciArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19idWlsZGRpciAiICsgZC5nZXRWYXIoJ1MnLCBUcnVlKSArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19idWlsZF9uYW1lX2ZtdCAlJXtOQU1FfS0lJXtWRVJTSU9OfS0lJXtSRUxFQVNFfS4lJXtBUkNIfS5ycG0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ191c2VfaW50ZXJuYWxfZGVwZW5kZW5jeV9nZW5lcmF0b3IgMCciCisgICAgaWYgcGVyZmlsZWRlcHM6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9yZXF1aXJlcyAiICsgb3V0ZGVwZW5kcyArICInIgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcHJvdmlkZXMgIiArIG91dHByb3ZpZGVzICsgIiciCisgICAgZWxzZToKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3JlcXVpcmVzICV7bmlsfSciCisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9wcm92aWRlcyAle25pbH0nIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ191bnBhY2thZ2VkX2ZpbGVzX3Rlcm1pbmF0ZV9idWlsZCAwJyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdkZWJ1Z19wYWNrYWdlICV7bmlsfSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3JwbWZjX21hZ2ljX3BhdGggIiArIG1hZ2ljZmlsZSArICInIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ190bXBwYXRoICIgKyB3b3JrZGlyICsgIiciCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKSA9PSAnMScgYW5kIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FyY2hpdmVyJywgZCk6CisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19zb3VyY2VkaXIgIiArIGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKSArICInIgorICAgICAgICBjbWRzcnBtID0gY21kICsgIiAtLWRlZmluZSAnX3NyY3JwbWRpciAiICsgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpICsgIiciCisgICAgICAgIGNtZHNycG0gPSBjbWRzcnBtICsgIiAtYnMgIiArIG91dHNwZWNmaWxlCisgICAgICAgICMgQnVpbGQgdGhlIC5zcmMucnBtCisgICAgICAgIGQuc2V0VmFyKCdTQlVJTERTUEVDJywgY21kc3JwbSArICJcbiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnU0JVSUxEU1BFQycsICdmdW5jJywgJzEnKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ1NCVUlMRFNQRUMnLCBkKQorICAgIGNtZCA9IGNtZCArICIgLWJiICIgKyBvdXRzcGVjZmlsZQorCisgICAgIyBCdWlsZCB0aGUgcnBtIHBhY2thZ2UhCisgICAgZC5zZXRWYXIoJ0JVSUxEU1BFQycsIGNtZCArICJcbiIpCisgICAgZC5zZXRWYXJGbGFnKCdCVUlMRFNQRUMnLCAnZnVuYycsICcxJykKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ0JVSUxEU1BFQycsIGQpCisKKyAgICBpZiBkLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygic2lnbl9ycG0iLCBkKQorfQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBycG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgZGVwcykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdmYWtlcm9vdCcsIDEpCit9CisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJSUE19IgorZG9fcGFja2FnZV93cml0ZV9ycG1bc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9SUE19IgorIyBUYWtlIGEgc2hhcmVkIGxvY2ssIHdlIGNhbiB3cml0ZSBtdWx0aXBsZSBwYWNrYWdlcyBhdCB0aGUgc2FtZSB0aW1lLi4uCisjIGJ1dCB3ZSBuZWVkIHRvIHN0b3AgdGhlIHJvb3Rmcy9zb2x2ZXIgZnJvbSBydW5uaW5nIHdoaWxlIHdlIGRvLi4uCitkb19wYWNrYWdlX3dyaXRlX3JwbVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3JwbV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfcnBtX3NldHNjZW5lCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3JwbSAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9ycG0iLCBkKQorfQorCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkaXJzXSA9ICIke1BLR1dSSVRFRElSUlBNfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2NsZWFuZGlyc10gPSAiJHtQS0dXUklURURJUlJQTX0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVt1bWFza10gPSAiMDIyIgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX3JwbSBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gInJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK1BBQ0tBR0VJTkRFWERFUFMgKz0gImNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTIyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV90YXIuYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACitpbmhlcml0IHBhY2thZ2UKKworSU1BR0VfUEtHVFlQRSA/PSAidGFyIgorCitweXRob24gZG9fcGFja2FnZV90YXIgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBvdXRkaXIgPSBkLmdldFZhcignREVQTE9ZX0RJUl9UQVInLCBUcnVlKQorICAgIGlmIG5vdCBvdXRkaXI6CisgICAgICAgIGJiLmVycm9yKCJERVBMT1lfRElSX1RBUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIGR2YXIgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgaWYgbm90IGR2YXI6CisgICAgICAgIGJiLmVycm9yKCJEIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIGlmIG5vdCBwYWNrYWdlczoKKyAgICAgICAgYmIuZGVidWcoMSwgIlBBQ0tBR0VTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkdmFyKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIEZhbHNlKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAnJXM6JXMnICUgKG92ZXJyaWRlcywgcGtnKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJvb3QpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUocm9vdCkKKyAgICAgICAgdGFyZm4gPSBsb2NhbGRhdGEuZXhwYW5kKCIke0RFUExPWV9ESVJfVEFSfS8ke1BLR30tJHtQS0dWfS0ke1BLR1J9LnRhci5neiIpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGRsaXN0ID0gb3MubGlzdGRpcihyb290KQorICAgICAgICBpZiBub3QgZGxpc3Q6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYXJncyA9ICJ0YXIgLWN6IC0tZXhjbHVkZT1DT05UUk9MIC0tZXhjbHVkZT1ERUJJQU4gLWYiLnNwbGl0KCkKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGFyZ3MgKyBbdGFyZm5dICsgZGxpc3QpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgYmIuZXJyb3IoIkNyZWF0aW9uIG9mIHRhciAlcyBmYWlsZWQuIiAlIHRhcmZuKQorfQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gKGQuZ2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZGVwZW5kcycpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGRlcHMuYXBwZW5kKCd0YXItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkZXBzLmFwcGVuZCgndmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZGVwZW5kcycsICIgIi5qb2luKGRlcHMpKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfdGFyJywgJ2Zha2Vyb290JywgIjEiKQorfQorCisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX3RhciAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV90YXIiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV90YXJbZGlyc10gPSAiJHtEfSIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV90YXIgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5N2YxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlZGF0YS5iYmNsYXNzCkBAIC0wLDAgKzEsMzQgQEAKK3B5dGhvbiByZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEgKCkgeworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgdmFycyA9IHsKKyAgICAgICAgIlBOIiA6IGQuZ2V0VmFyKCdQTicsIFRydWUpLCAKKyAgICAgICAgIlBFIiA6IGQuZ2V0VmFyKCdQRScsIFRydWUpLCAKKyAgICAgICAgIlBWIiA6IGQuZ2V0VmFyKCdQVicsIFRydWUpLAorICAgICAgICAiUFIiIDogZC5nZXRWYXIoJ1BSJywgVHJ1ZSksCisgICAgfQorCisgICAgZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YSh2YXJzWyJQTiJdLCBkKQorCisgICAgZm9yIGtleSBpbiBkYXRhLmtleXMoKToKKyAgICAgICAgZC5zZXRWYXIoa2V5LCBkYXRhW2tleV0pCisKKyAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHNkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICAgICAgZm9yIGtleSBpbiBzZGF0YS5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgaW4gdmFyczoKKyAgICAgICAgICAgICAgICBpZiBzZGF0YVtrZXldICE9IHZhcnNba2V5XToKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJQTiI6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiUmVjaXBlICVzIGlzIHRyeWluZyB0byBjcmVhdGUgcGFja2FnZSAlcyB3aGljaCB3YXMgYWxyZWFkeSB3cml0dGVuIGJ5IHJlY2lwZSAlcy4gVGhpcyB3aWxsIGNhdXNlIGNvcnJ1cHRpb24sIHBsZWFzZSByZXNvbHZlIHRoaXMgYW5kIG9ubHkgcHJvdmlkZSB0aGUgcGFja2FnZSBmcm9tIG9uZSByZWNpcGUgb3IgdGhlIG90aGVyIG9yIG9ubHkgYnVpbGQgb25lIG9mIHRoZSByZWNpcGVzLiIgJSAodmFyc1trZXldLCBwa2csIHNkYXRhW2tleV0pKQorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiUmVjaXBlICVzIGlzIHRyeWluZyB0byBjaGFuZ2UgJXMgZnJvbSAnJXMnIHRvICclcycuIFRoaXMgd2lsbCBjYXVzZSBkb19wYWNrYWdlX3dyaXRlXyogZmFpbHVyZXMgc2luY2UgdGhlIGluY29ycmVjdCBkYXRhIHdpbGwgYmUgdXNlZCBhbmQgdGhleSB3aWxsIGJlIHVuYWJsZSB0byBmaW5kIHRoZSByaWdodCB3b3JrZGlyLiIgJSAodmFyc1siUE4iXSwga2V5LCB2YXJzW2tleV0sIHNkYXRhW2tleV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHdlIHNldCB1bnN1ZmZpeGVkIHZhcmlhYmxlcyBoZXJlIHRoZXJlIGlzIGEgY2hhbmNlIHRoZXkgY291bGQgY2xvYmJlciBvdmVycmlkZSB2ZXJzaW9ucworICAgICAgICAgICAgIyBvZiB0aGF0IHZhcmlhYmxlLCBlLmcuIERFU0NSSVBUSU9OIGNvdWxkIGNsb2JiZXIgREVTQ1JJUFRJT05fPHBrZ25hbWU+CisgICAgICAgICAgICAjIFdlIHRoZXJlZm9yZSBkb24ndCBjbG9iYmVyIGZvciB0aGUgdW5zdWZmaXhlZCB2YXJpYWJsZSB2ZXJzaW9ucworICAgICAgICAgICAgIworICAgICAgICAgICAgaWYga2V5LmVuZHN3aXRoKCJfIiArIHBrZyk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCBzZGF0YVtrZXldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihrZXksIHNkYXRhW2tleV0sIHBhcnNpbmc9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlZ3JvdXAuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlZ3JvdXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNmZWFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCkBAIC0wLDAgKzEsNTIgQEAKKyMgQ2xhc3MgZm9yIHBhY2thZ2Vncm91cCAocGFja2FnZSBncm91cCkgcmVjaXBlcworCisjIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIHBhY2thZ2Vncm91cCBwYWNrYWdlIGl0c2VsZiBpcyBpbiBQQUNLQUdFUy4KKyMgLWRiZyBhbmQgLWRldiBmbGF2b3VycyBhcmUgaGFuZGxlZCBieSB0aGUgYW5vbmZ1bmMgYmVsb3cuCisjIFRoaXMgbWVhbnMgdGhhdCBwYWNrYWdlZ3JvdXAgcmVjaXBlcyB1c2VkIHRvIGJ1aWxkIG11bHRpcGxlIHBhY2thZ2Vncm91cAorIyBwYWNrYWdlcyBoYXZlIHRvIG1vZGlmeSBQQUNLQUdFUyBhZnRlciBpbmhlcml0aW5nIHBhY2thZ2Vncm91cC5iYmNsYXNzLgorUEFDS0FHRVMgPSAiJHtQTn0iCisKKyMgQnkgZGVmYXVsdCwgcGFja2FnZWdyb3VwIHBhY2thZ2VzIGRvIG5vdCBkZXBlbmQgb24gYSBjZXJ0YWluIGFyY2hpdGVjdHVyZS4KKyMgT25seSBpZiBkZXBlbmRlbmNpZXMgYXJlIG1vZGlmaWVkIGJ5IE1BQ0hJTkVfRkVBVFVSRVMsIHBhY2thZ2VzCisjIG5lZWQgdG8gYmUgc2V0IHRvIE1BQ0hJTkVfQVJDSCBhZnRlciBpbmhlcml0aW5nIHBhY2thZ2Vncm91cC5iYmNsYXNzCitQQUNLQUdFX0FSQ0ggPz0gImFsbCIKKworIyBGdWxseSBleHBhbmRlZCAtIHNvIGl0IGFwcGxpZXMgdGhlIG92ZXJyaWRlcyBhcyB3ZWxsCitQQUNLQUdFX0FSQ0hfRVhQQU5ERUQgOj0gIiR7UEFDS0FHRV9BUkNIfSIKKworaW5oZXJpdCAke0BvZS51dGlscy5pZmVsc2UoZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFBBTkRFRCcsIFRydWUpID09ICdhbGwnLCAnYWxsYXJjaCcsICcnKX0KKworIyBUaGlzIGF1dG9tYXRpY2FsbHkgYWRkcyAtZGJnIGFuZCAtZGV2IGZsYXZvdXJzIG9mIGFsbCBQQUNLQUdFUworIyB0byB0aGUgbGlzdC4gVGhlaXIgZGVwZW5kZW5jaWVzIChSUkVDT01NRU5EUykgYXJlIGhhbmRsZWQgYXMgdXN1YWwKKyMgYnkgcGFja2FnZV9kZXBjaGFpbnMgaW4gYSBmb2xsb3dpbmcgc3RlcC4KKyMgQWxzbyBtYXJrIGFsbCBwYWNrYWdlcyBhcyBBTExPV19FTVBUWQorcHl0aG9uICgpIHsKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBnZW5wYWNrYWdlcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgZC5zZXRWYXIoIkFMTE9XX0VNUFRZXyVzIiAlIHBrZywgIjEiKQorICAgICAgICBmb3IgcG9zdGZpeCBpbiBbJy1kYmcnLCAnLWRldicsICctcHRlc3QnXToKKyAgICAgICAgICAgIGdlbnBhY2thZ2VzLmFwcGVuZChwa2crcG9zdGZpeCkKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWScsIFRydWUpICE9ICcxJzoKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZXMrZ2VucGFja2FnZXMpKQorfQorCisjIFdlIGRvbid0IHdhbnQgdG8gbG9vayBhdCBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIHRoZQorIyBkYmcgcGFja2FnZXMKK0RFUENIQUlOX0RCR0RFRkFVTFRERVBTID0gIjEiCisKKyMgV2Ugb25seSBuZWVkIHRoZSBwYWNrYWdpbmcgdGFza3MgLSBkaXNhYmxlIHRoZSByZXN0Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9faW5zdGFsbFtub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworcHl0aG9uICgpIHsKKyAgICBpbml0bWFuID0gZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKQorICAgIGlmIGluaXRtYW4gYW5kIGluaXRtYW4gaW4gWydzeXN2aW5pdCcsICdzeXN0ZW1kJ10gYW5kIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgaW5pdG1hbiwgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGVuc3VyZSB0aGF0IHlvdXIgc2V0dGluZyBvZiBWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyICglcykgbWF0Y2hlcyB0aGUgZW50cmllcyBlbmFibGVkIGluIERJU1RST19GRUFUVVJFUyIgJSBpbml0bWFuKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjBhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZWluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDIyIEBACitweXRob24gcGFja2FnZWluZm9faGFuZGxlciAoKSB7CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisgICAgcGtnaW5mb2xpc3QgPSBbXQorCisgICAgcGtnZGF0YV9kaXIgPSBlLmRhdGEuZ2V0VmFyKCJQS0dEQVRBX0RJUiIsIFRydWUpICsgJy9ydW50aW1lLycKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhX2Rpcik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBrZ2RhdGFfZGlyKToKKyAgICAgICAgICAgIGZvciBwa2duYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIHBrZ25hbWUuZW5kc3dpdGgoJy5wYWNrYWdlZCcpOgorICAgICAgICAgICAgICAgICAgICBwa2duYW1lID0gcGtnbmFtZVs6LTldCisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFmaWxlID0gcm9vdCArIHBrZ25hbWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3BrZ2RhdGFmaWxlKHBrZ2RhdGFmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhdGFbJ1BLRyddID0gcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgcGtnaW5mb2xpc3QuYXBwZW5kKHNkYXRhKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJGYWlsZWQgdG8gcmVhZCBwa2dkYXRhIGZpbGUgJXM6ICVzOiAlcyIgJSAocGtnZGF0YWZpbGUsIGUuX19jbGFzc19fLCBzdHIoZSkpKQorICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuUGFja2FnZUluZm8ocGtnaW5mb2xpc3QpLCBlLmRhdGEpCit9CisKK2FkZGhhbmRsZXIgcGFja2FnZWluZm9faGFuZGxlcgorcGFja2FnZWluZm9faGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlcXVlc3RQYWNrYWdlSW5mbyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyYWFiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYXRjaC5iYmNsYXNzCkBAIC0wLDAgKzEsMTg4IEBACisjIENvcHlyaWdodCAoQykgMjAwNiAgT3BlbmVkSGFuZCBMVEQKKworIyBQb2ludCB0byBhbiBlbXB0eSBmaWxlIHNvIGFueSB1c2VyJ3MgY3VzdG9tIHNldHRpbmdzIGRvbid0IGJyZWFrIHRoaW5ncworUVVJTFRSQ0ZJTEUgPz0gIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9xdWlsdHJjIgorCitQQVRDSERFUEVOREVOQ1kgPSAiJHtQQVRDSFRPT0x9LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitpbmhlcml0IHRlcm1pbmFsCisKK2RlZiBzcmNfcGF0Y2hlcyhkLCBhbGwgPSBGYWxzZSApOgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgZmV0Y2ggPSBiYi5mZXRjaDIuRmV0Y2goW10sIGQpCisgICAgcGF0Y2hlcyA9IFtdCisgICAgc291cmNlcyA9IFtdCisgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICBsb2NhbCA9IHBhdGNoX3BhdGgodXJsLCBmZXRjaCwgd29ya2RpcikKKyAgICAgICAgaWYgbm90IGxvY2FsOgorICAgICAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkKKyAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZChsb2NhbCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICAgICAgcGFybSA9IHVybGRhdGEucGFybQorICAgICAgICBwYXRjaG5hbWUgPSBwYXJtLmdldCgncG5hbWUnKSBvciBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKQorCisgICAgICAgIGFwcGx5LCByZWFzb24gPSBzaG91bGRfYXBwbHkocGFybSwgZCkKKyAgICAgICAgaWYgbm90IGFwcGx5OgorICAgICAgICAgICAgaWYgcmVhc29uOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhdGNoICVzICVzIiAlIChwYXRjaG5hbWUsIHJlYXNvbikpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhdGNocGFybSA9IHsncGF0Y2huYW1lJzogcGF0Y2huYW1lfQorICAgICAgICBpZiAic3RyaXBsZXZlbCIgaW4gcGFybToKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSBwYXJtWyJzdHJpcGxldmVsIl0KKyAgICAgICAgZWxpZiAicG51bSIgaW4gcGFybToKKyAgICAgICAgICAgICNiYi5tc2cud2FybihOb25lLCAiRGVwcmVjYXRlZCB1c2FnZSBvZiAncG51bScgdXJsIHBhcmFtZXRlciBpbiAnJXMnLCBwbGVhc2UgdXNlICdzdHJpcGxldmVsJyIgJSB1cmwpCisgICAgICAgICAgICBzdHJpcGxldmVsID0gcGFybVsicG51bSJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJpcGxldmVsID0gJzEnCisgICAgICAgIHBhdGNocGFybVsnc3RyaXBsZXZlbCddID0gc3RyaXBsZXZlbAorCisgICAgICAgIHBhdGNoZGlyID0gcGFybS5nZXQoJ3BhdGNoZGlyJykKKyAgICAgICAgaWYgcGF0Y2hkaXI6CisgICAgICAgICAgICBwYXRjaHBhcm1bJ3BhdGNoZGlyJ10gPSBwYXRjaGRpcgorCisgICAgICAgIGxvY2FsdXJsID0gYmIuZmV0Y2guZW5jb2RldXJsKCgnZmlsZScsICcnLCBsb2NhbCwgJycsICcnLCBwYXRjaHBhcm0pKQorICAgICAgICBwYXRjaGVzLmFwcGVuZChsb2NhbHVybCkKKworICAgIGlmIGFsbDoKKyAgICAgICAgcmV0dXJuIHNvdXJjZXMKKworICAgIHJldHVybiBwYXRjaGVzCisKK2RlZiBwYXRjaF9wYXRoKHVybCwgZmV0Y2gsIHdvcmtkaXIpOgorICAgICIiIlJldHVybiB0aGUgbG9jYWwgcGF0aCBvZiBhIHBhdGNoLCBvciBOb25lIGlmIHRoaXMgaXNuJ3QgYSBwYXRjaCIiIgorCisgICAgbG9jYWwgPSBmZXRjaC5sb2NhbHBhdGgodXJsKQorICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShsb2NhbCkpCisgICAgaWYgZXh0IGluICgnLmd6JywgJy5iejInLCAnLlonKToKKyAgICAgICAgbG9jYWwgPSBvcy5wYXRoLmpvaW4od29ya2RpciwgYmFzZSkKKyAgICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlKVsxXQorCisgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICBpZiAiYXBwbHkiIGluIHVybGRhdGEucGFybToKKyAgICAgICAgYXBwbHkgPSBvZS50eXBlcy5ib29sZWFuKHVybGRhdGEucGFybVsiYXBwbHkiXSkKKyAgICAgICAgaWYgbm90IGFwcGx5OgorICAgICAgICAgICAgcmV0dXJuCisgICAgZWxpZiBleHQgbm90IGluICgiLmRpZmYiLCAiLnBhdGNoIik6CisgICAgICAgIHJldHVybgorCisgICAgcmV0dXJuIGxvY2FsCisKK2RlZiBzaG91bGRfYXBwbHkocGFybSwgZCk6CisgICAgIiIiRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhcHBseSB0aGUgZ2l2ZW4gcGF0Y2giIiIKKworICAgIGlmICJtaW5kYXRlIiBpbiBwYXJtIG9yICJtYXhkYXRlIiBpbiBwYXJtOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignU1JDREFURV8lcycgJSBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHNyY2RhdGU6CisgICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ1NSQ0RBVEUnLCBUcnVlKQorCisgICAgICAgIGlmIHNyY2RhdGUgPT0gIm5vdyI6CisgICAgICAgICAgICBzcmNkYXRlID0gZC5nZXRWYXIoJ0RBVEUnLCBUcnVlKQorCisgICAgICAgIGlmICJtYXhkYXRlIiBpbiBwYXJtIGFuZCBwYXJtWyJtYXhkYXRlIl0gPCBzcmNkYXRlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnaXMgb3V0ZGF0ZWQnCisKKyAgICAgICAgaWYgIm1pbmRhdGUiIGluIHBhcm0gYW5kIHBhcm1bIm1pbmRhdGUiXSA+IHNyY2RhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdpcyBwcmVkYXRlZCcKKworCisgICAgaWYgIm1pbnJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgc3JjcmV2IDwgcGFybVsibWlucmV2Il06CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdhcHBsaWVzIHRvIGxhdGVyIHJldmlzaW9ucycKKworICAgIGlmICJtYXhyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHNyY3JldiA+IHBhcm1bIm1heHJldiJdOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAnYXBwbGllcyB0byBlYXJsaWVyIHJldmlzaW9ucycKKworICAgIGlmICJyZXYiIGluIHBhcm06CisgICAgICAgIHNyY3JldiA9IGQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKQorICAgICAgICBpZiBzcmNyZXYgYW5kIHBhcm1bInJldiJdIG5vdCBpbiBzcmNyZXY6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJkb2Vzbid0IGFwcGx5IHRvIHJldmlzaW9uIgorCisgICAgaWYgIm5vdHJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgcGFybVsibm90cmV2Il0gaW4gc3JjcmV2OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiZG9lc24ndCBhcHBseSB0byByZXZpc2lvbiIKKworICAgIHJldHVybiBUcnVlLCBOb25lCisKK3Nob3VsZF9hcHBseVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURSBTUkNEQVRFIgorCitweXRob24gcGF0Y2hfZG9fcGF0Y2goKSB7CisgICAgaW1wb3J0IG9lLnBhdGNoCisKKyAgICBwYXRjaHNldG1hcCA9IHsKKyAgICAgICAgInBhdGNoIjogb2UucGF0Y2guUGF0Y2hUcmVlLAorICAgICAgICAicXVpbHQiOiBvZS5wYXRjaC5RdWlsdFRyZWUsCisgICAgICAgICJnaXQiOiBvZS5wYXRjaC5HaXRBcHBseVRyZWUsCisgICAgfQorCisgICAgY2xzID0gcGF0Y2hzZXRtYXBbZC5nZXRWYXIoJ1BBVENIVE9PTCcsIFRydWUpIG9yICdxdWlsdCddCisKKyAgICByZXNvbHZlcm1hcCA9IHsKKyAgICAgICAgIm5vb3AiOiBvZS5wYXRjaC5OT09QUmVzb2x2ZXIsCisgICAgICAgICJ1c2VyIjogb2UucGF0Y2guVXNlclJlc29sdmVyLAorICAgIH0KKworICAgIHJjbHMgPSByZXNvbHZlcm1hcFtkLmdldFZhcignUEFUQ0hSRVNPTFZFJywgVHJ1ZSkgb3IgJ3VzZXInXQorCisgICAgY2xhc3NlcyA9IHt9CisKKyAgICBzID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorCisgICAgcGF0aCA9IG9zLmdldGVudignUEFUSCcpCisgICAgb3MucHV0ZW52KCdQQVRIJywgZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKSkKKworICAgICMgV2UgbXVzdCB1c2Ugb25lIFRNUERJUiBwZXIgcHJvY2VzcyBzbyB0aGF0IHRoZSAicGF0Y2giIHByb2Nlc3NlcworICAgICMgZG9uJ3QgZ2VuZXJhdGUgdGhlIHNhbWUgdGVtcCBmaWxlIG5hbWUuCisKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICBwcm9jZXNzX3RtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIG9zLmVudmlyb25bJ1RNUERJUiddID0gcHJvY2Vzc190bXBkaXIKKworICAgIGZvciBwYXRjaCBpbiBzcmNfcGF0Y2hlcyhkKToKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisKKyAgICAgICAgaWYgInBhdGNoZGlyIiBpbiBwYXJtOgorICAgICAgICAgICAgcGF0Y2hkaXIgPSBwYXJtWyJwYXRjaGRpciJdCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhwYXRjaGRpcik6CisgICAgICAgICAgICAgICAgcGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4ocywgcGF0Y2hkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRjaGRpciA9IHMKKworICAgICAgICBpZiBub3QgcGF0Y2hkaXIgaW4gY2xhc3NlczoKKyAgICAgICAgICAgIHBhdGNoc2V0ID0gY2xzKHBhdGNoZGlyLCBkKQorICAgICAgICAgICAgcmVzb2x2ZXIgPSByY2xzKHBhdGNoc2V0LCBvZV90ZXJtaW5hbCkKKyAgICAgICAgICAgIGNsYXNzZXNbcGF0Y2hkaXJdID0gKHBhdGNoc2V0LCByZXNvbHZlcikKKyAgICAgICAgICAgIHBhdGNoc2V0LkNsZWFuKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGNoc2V0LCByZXNvbHZlciA9IGNsYXNzZXNbcGF0Y2hkaXJdCisKKyAgICAgICAgYmIubm90ZSgiQXBwbHlpbmcgcGF0Y2ggJyVzJyAoJXMpIiAlIChwYXJtWydwYXRjaG5hbWUnXSwgb2UucGF0aC5mb3JtYXRfZGlzcGxheShsb2NhbCwgZCkpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaHNldC5JbXBvcnQoeyJmaWxlIjpsb2NhbCwgInN0cmlwcGF0aCI6IHBhcm1bJ3N0cmlwbGV2ZWwnXX0sIFRydWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHByb2Nlc3NfdG1wZGlyLCBUcnVlKQorICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGV4YykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc29sdmVyLlJlc29sdmUoKQorICAgICAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgICAgICAgICBiYi5mYXRhbChzdHIoZSkpCisKKyAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgZGVsIG9zLmVudmlyb25bJ1RNUERJUiddCit9CitwYXRjaF9kb19wYXRjaFt2YXJkZXBzZXhjbHVkZV0gPSAiUEFUQ0hSRVNPTFZFIgorCithZGR0YXNrIHBhdGNoIGFmdGVyIGRvX3VucGFjaworZG9fcGF0Y2hbZGlyc10gPSAiJHtXT1JLRElSfSIKK2RvX3BhdGNoW2RlcGVuZHNdID0gIiR7UEFUQ0hERVBFTkRFTkNZfSIKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19wYXRjaApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wZXJsbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4ZGU4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wZXJsbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSwzIEBACitFWFRSQU5BVElWRVBBVEggKz0gInBlcmwtbmF0aXZlIgorREVQRU5EUyArPSAicGVybC1uYXRpdmUiCitPRUNNQUtFX1BFUkxOQVRJVkVfRElSID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5OTY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9waXhidWZjYWNoZS5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIGdlbmVyYXRlIHRoZSBwcm9wZXIgcG9zdGluc3QvcG9zdHJtIHNjcmlwdGxldHMgZm9yIHBpeGJ1ZgorIyBwYWNrYWdlcy4KKyMKKworREVQRU5EUyArPSAicWVtdS1uYXRpdmUiCitpbmhlcml0IHFlbXUKKworUElYQlVGX1BBQ0tBR0VTID8/PSAiJHtQTn0iCisKK3BpeGJ1ZmNhY2hlX2NvbW1vbigpIHsKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkkSU5URVJDRVBUX0RJUi9wb3N0aW5zdF9pbnRlcmNlcHQgdXBkYXRlX3BpeGJ1Zl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJpbmRpcj0ke2JpbmRpcn0gYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0KK2Vsc2UKKworCSMgVXBkYXRlIHRoZSBwaXhidWYgbG9hZGVycyBpbiBjYXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0CisJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzIGdkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCisJaWYgWyAteCAke2JpbmRpcn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIF0gJiYgWyAtZCAke2RhdGFkaXJ9L2ljb25zIF07IHRoZW4KKwkJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qOyBkbworCQkJaWYgWyAtZCAke2ljb25kaXJ9IF07IHRoZW4KKwkJCQlndGstdXBkYXRlLWljb24tY2FjaGUgLXQgLXEgJHtpY29uZGlyfQorCQkJZmkKKwkJZG9uZQorCWZpCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kKCkgeworICAgIHBpeGJ1Zl9wa2dzID0gZC5nZXRWYXIoJ1BJWEJVRl9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKworICAgIGZvciBwa2cgaW4gcGl4YnVmX3BrZ3M6CisgICAgICAgIGJiLm5vdGUoImFkZGluZyBwaXhidWYgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcigncGl4YnVmY2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0cm0nLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ3BpeGJ1ZmNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCitnZGtwaXhidWZfY29tcGxldGUoKSB7CisJR0RLX1BJWEJVRl9GQVRBTF9MT0FERVI9MSAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIC0tdXBkYXRlLWNhY2hlIHx8IGV4aXQgMQorfQorCisjCisjIEFkZCBhbiBzc3RhdGUgcG9zdGluc3QgaG9vayB0byB1cGRhdGUgdGhlIGNhY2hlIGZvciBuYXRpdmUgcGFja2FnZXMuCisjIEFuIGVycm9yIGV4aXQgZHVyaW5nIHBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgYWxsb3dzIGJpdGJha2UgdG8KKyMgdHJ5IHRvIHJlY292ZXIgYnkgcmUtYnVpbGRpbmcgdGhlIHBhY2thZ2UuCisjCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHBpeGJ1ZmNhY2hlX3NzdGF0ZV9wb3N0aW5zdCIKKworIyBTZWUgYmFzZS5iYmNsYXNzIGZvciB0aGUgb3RoZXIgaGFsZiBvZiB0aGlzCitwaXhidWZjYWNoZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIF07IHRoZW4KKwkJJHtnZGtwaXhidWZfY29tcGxldGV9CisJZWxpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXTsgdGhlbgorCQllY2hvICIke2dka3BpeGJ1Zl9jb21wbGV0ZX0iID4+ICR7U1RBR0lOR19ESVJ9L3NzdGF0ZWNvbXBsZXRpb25zCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BrZ2NvbmZpZy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BrZ2NvbmZpZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMWY4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSwyIEBACitERVBFTkRTX3ByZXBlbmQgPSAicGtnY29uZmlnLW5hdGl2ZSAiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjRhOTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAorIyBUaGUgbWFqb3JpdHkgb2YgcG9wdWxhdGVfc2RrIGlzIGxvY2F0ZWQgaW4gcG9wdWxhdGVfc2RrX2Jhc2UKKyMgVGhpcyBjaHVuayBzaW1wbHkgZmFjaWxpdGF0ZXMgY29tcGF0aWJpbGl0eSB3aXRoIFNESyBvbmx5IHJlY2lwZXMuCisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2Jhc2UKKworYWRkdGFzayBwb3B1bGF0ZV9zZGsgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fYnVpbGQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdhOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyMDMgQEAKK2luaGVyaXQgbWV0YQorCisjIFdpbGRjYXJkcyBzcGVjaWZ5aW5nIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgdG8gaW5zdGFsbCBmb3IgZXZlcnkgcGFja2FnZSB0aGF0IGhhcyBiZWVuIGV4cGxpY2l0bHkKKyMgaW5zdGFsbGVkIGludG8gdGhlIHJvb3RmcworQ09NUExFTUVOVEFSWV9HTE9CW2Rldi1wa2dzXSA9ICcqLWRldicKK0NPTVBMRU1FTlRBUllfR0xPQltzdGF0aWNkZXYtcGtnc10gPSAnKi1zdGF0aWNkZXYnCitDT01QTEVNRU5UQVJZX0dMT0JbZG9jLXBrZ3NdID0gJyotZG9jJworQ09NUExFTUVOVEFSWV9HTE9CW2RiZy1wa2dzXSA9ICcqLWRiZycKK0NPTVBMRU1FTlRBUllfR0xPQltwdGVzdC1wa2dzXSA9ICcqLXB0ZXN0JworCitkZWYgY29tcGxlbWVudGFyeV9nbG9icyhmZWF0dXJldmFyLCBkKToKKyAgICBhbGxfZ2xvYnMgPSBkLmdldFZhckZsYWdzKCdDT01QTEVNRU5UQVJZX0dMT0InKQorICAgIGdsb2JzID0gW10KKyAgICBmZWF0dXJlcyA9IHNldCgoZC5nZXRWYXIoZmVhdHVyZXZhciwgVHJ1ZSkgb3IgJycpLnNwbGl0KCkpCisgICAgZm9yIG5hbWUsIGdsb2IgaW4gYWxsX2dsb2JzLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgaW4gZmVhdHVyZXM6CisgICAgICAgICAgICBnbG9icy5hcHBlbmQoZ2xvYikKKyAgICByZXR1cm4gJyAnLmpvaW4oZ2xvYnMpCisKK1NES0lNQUdFX0ZFQVRVUkVTID8/PSAiZGV2LXBrZ3MgZGJnLXBrZ3MiCitTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlkgPSAnJHtAY29tcGxlbWVudGFyeV9nbG9icygiU0RLSU1BR0VfRkVBVFVSRVMiLCBkKX0nCisKK2luaGVyaXQgcm9vdGZzXyR7SU1BR0VfUEtHVFlQRX0KKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES19ERVBMT1kgPSAiJHtERVBMT1lfRElSfS9zZGsiCisKK0JfdGFzay1wb3B1bGF0ZS1zZGsgPSAiJHtTREtfRElSfSIKKworU0RLVEFSR0VUU1lTUk9PVCA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gIm5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZID89ICIiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiBcCisgICAgJHtAbXVsdGlsaWJfcGtnX2V4dGVuZChkLCAncGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0Jyl9IFwKKyAgICAke0BtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsICdwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQtZGJnJyl9IFwKKyAgICAiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkgPz0gIiIKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS10b29sY2hhaW4tJHtTREtfVkVSU0lPTn0iCisKK1NES19SREVQRU5EUyA9ICIke1RPT0xDSEFJTl9UQVJHRVRfVEFTS30gJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKK1NES19ERVBFTkRTID0gInZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlIHBiemlwMi1uYXRpdmUiCisKKyMgV2Ugd2FudCB0aGUgTVVMVElBUkNIX1RBUkdFVF9TWVMgdG8gcG9pbnQgdG8gdGhlIFRVTkVfUEtHQVJDSCwgbm90IFBBQ0tBR0VfQVJDSCBhcyBpdAorIyBjb3VsZCBiZSBzZXQgdG8gdGhlIE1BQ0hJTkVfQVJDSAorUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA9ICIke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworUElEID0gIiR7QG9zLmdldHBpZCgpfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK1NES19QQUNLQUdJTkdfRlVOQyA/PSAiY3JlYXRlX3NoYXIiCitTREtfUFJFX0lOU1RBTExfQ09NTUFORCA/PSAiIgorU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EID89ICIiCitTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTCA/PSAiMSIKKworU0RLRVhUUEFUSCA/PSAifi8ke0BkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9X3NkayIKK1NES19USVRMRSA/PSAiJHtAZC5nZXRWYXIoJ0RJU1RST19OQU1FJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpfSBTREsiCisKK1NES19UQVJHRVRfTUFOSUZFU1QgPSAiJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXJnZXQubWFuaWZlc3QiCitTREtfSE9TVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9Lmhvc3QubWFuaWZlc3QiCitweXRob24gd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHNka21hbmlmZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCJTREtfVEFSR0VUX01BTklGRVNUIiwgVHJ1ZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNka21hbmlmZXN0ZGlyKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNka21hbmlmZXN0ZGlyKQorICAgIHdpdGggb3BlbihkLmdldFZhcignU0RLX1RBUkdFVF9NQU5JRkVTVCcsIFRydWUpLCAndycpIGFzIG91dHB1dDoKKyAgICAgICAgb3V0cHV0LndyaXRlKHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBUcnVlLCAndmVyJykpCit9CisKK3B5dGhvbiB3cml0ZV9ob3N0X3Nka19tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcworICAgIHNka21hbmlmZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCJTREtfSE9TVF9NQU5JRkVTVCIsIFRydWUpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZGttYW5pZmVzdGRpcik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZGttYW5pZmVzdGRpcikKKyAgICB3aXRoIG9wZW4oZC5nZXRWYXIoJ1NES19IT1NUX01BTklGRVNUJywgVHJ1ZSksICd3JykgYXMgb3V0cHV0OgorICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIEZhbHNlLCAndmVyJykpCit9CisKK1BPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EX2FwcGVuZCA9ICIgd3JpdGVfdGFyZ2V0X3Nka19tYW5pZmVzdCA7ICIKK1BPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORF9hcHBlbmQgPSAiIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0OyAiCisKKyMgU29tZSBhcmNocyBvdmVycmlkZSB0aGlzLCB3ZSBuZWVkIHRoZSBuYXRpdmVzZGsgdmVyc2lvbgorIyB0dXJucyBvdXQgdGhpcyBpcyBoYXJkIHRvIGdldCBmcm9tIHRoZSBkYXRhc3RvcmUgZHVlIHRvIFRSQU5TTEFURURfVEFSR0VUX0FSQ0gKKyMgbWFuaXB1bGF0aW9uLgorU0RLX09MREVTVF9LRVJORUwgPSAiMi42LjMyIgorCitmYWtlcm9vdCBweXRob24gZG9fcG9wdWxhdGVfc2RrKCkgeworICAgIGZyb20gb2Uuc2RrIGltcG9ydCBwb3B1bGF0ZV9zZGsKKyAgICBmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCBjcmVhdGVfbWFuaWZlc3QsIE1hbmlmZXN0CisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIiwgcG4sIGQpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIiwgcG4sIGQpCisKKyAgICBsZCA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxkLnNldFZhcigiUEtHREFUQV9ESVIiLCAiJHtTVEFHSU5HX0RJUn0vJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtTREtfVkVORE9SfS0ke1NES19PU30vcGtnZGF0YSIpCisgICAgcnVudGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX0hPU1RfVEFTSyIsIHBuLCBsZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZIiwgcG4sIGxkKQorICAgIGQuc2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgbGQuZ2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgVHJ1ZSkpCisgICAgZC5zZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBsZC5nZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBUcnVlKSkKKyAgICAKKyAgICAjIGNyZWF0ZSB0YXJnZXQvaG9zdCBTREsgbWFuaWZlc3RzCisgICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcignU0RLX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisgICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcignU0RLX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCkKKworICAgIHBvcHVsYXRlX3NkayhkKQorCisgICAgIyBQcm9jZXNzIERFRkFVTFRUVU5FCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgZCkKKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygidGFyX3NkayIsIGQpCisKKyAgICBzZGtfcGFja2FnaW5nX2Z1bmMgPSBkLmdldFZhcigiU0RLX1BBQ0tBR0lOR19GVU5DIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBzZGtfcGFja2FnaW5nX2Z1bmMuc3RyaXAoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGQuZ2V0VmFyKCJTREtfUEFDS0FHSU5HX0ZVTkMiLCBUcnVlKSwgZCkKK30KKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfSB8c2VkIC1lICJzOltcK1wuXTpcXFxcXFxcXFwwOmciKQorCXNlZCAtaSAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3JlbG9jYXRlX3Nkay5weQorfQorCitTREtUQVJPUFRTID0gIi0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QiCisKK2Zha2Vyb290IHRhcl9zZGsoKSB7CisJIyBQYWNrYWdlIGl0IHVwCisJbWtkaXIgLXAgJHtTREtfREVQTE9ZfQorCWNkICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCXRhciAke1NES1RBUk9QVFN9IC1jZiAtIC4gfCBwYnppcDIgPiAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIKK30KKworZmFrZXJvb3QgY3JlYXRlX3NoYXIoKSB7CisJIyBjb3B5IGluIHRoZSB0ZW1wbGF0ZSBzaGFyIGV4dHJhY3RvciBzY3JpcHQKKwljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJcm0gLWYgJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQKKworCWlmIFsgJHtTREtfUkVMT0NBVEVfQUZURVJfSU5TVEFMTH0gLWVxIDEgXSA7IHRoZW4KKwkJY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kCisJZmkKKwljYXQgPDwgIkVPRiIgPj4gJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kCiske1NES19QUkVfSU5TVEFMTF9DT01NQU5EfQorRU9GCisKKwljYXQgPDwgIkVPRiIgPj4gJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAorJHtTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkR9CitFT0YKKwlzZWQgLWkgLWUgJy9AU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRAL3IgJHtUfS9wcmVfaW5zdGFsbF9jb21tYW5kJyBcCisJCS1lICcvQFNES19QT1NUX0lOU1RBTExfQ09NTUFOREAvciAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kJyBcCisJCSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgc3Vic3RpdHV0ZSB2YXJpYWJsZXMKKwlzZWQgLWkgLWUgJ3MjQFNES19BUkNIQCMke1NES19BUkNIfSNnJyBcCisJCS1lICdzI0BTREtQQVRIQCMke1NES1BBVEh9I2cnIFwKKwkJLWUgJ3MjQFNES0VYVFBBVEhAIyR7U0RLRVhUUEFUSH0jZycgXAorCQktZSAncyNAT0xERVNUX0tFUk5FTEAjJHtTREtfT0xERVNUX0tFUk5FTH0jZycgXAorCQktZSAncyNAUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU0AjJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfSNnJyBcCisJCS1lICdzI0BTREtfVElUTEVAIyR7U0RLX1RJVExFfSNnJyBcCisJCS1lICdzI0BTREtfVkVSU0lPTkAjJHtTREtfVkVSU0lPTn0jZycgXAorCQktZSAnL0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAvZCcgXAorCQktZSAnL0BTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRAL2QnIFwKKwkJJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBhZGQgZXhlY3V0aW9uIHBlcm1pc3Npb24KKwljaG1vZCAreCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIGFwcGVuZCB0aGUgU0RLIHRhcmJhbGwKKwljYXQgJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyID4+ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgZGVsZXRlIHRoZSBvbGQgdGFyYmFsbCwgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlCisJcm0gJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyCit9CisKK3BvcHVsYXRlX3Nka19sb2dfY2hlY2soKSB7CisJZm9yIHRhcmdldCBpbiAkKgorCWRvCisJCWxmX3BhdGg9ImBkaXJuYW1lICR7QkJfTE9HRklMRX1gL2xvZy5kb18kdGFyZ2V0LiR7UElEfSIKKworCQllY2hvICJsb2dfY2hlY2s6IFVzaW5nICRsZl9wYXRoIGFzIGxvZ2ZpbGUiCisKKwkJaWYgdGVzdCAtZSAiJGxmX3BhdGgiCisJCXRoZW4KKwkJCSR7SU1BR0VfUEtHVFlQRX1fbG9nX2NoZWNrICR0YXJnZXQgJGxmX3BhdGgKKwkJZWxzZQorCQkJZWNobyAiQ2Fubm90IGZpbmQgbG9nZmlsZSBbJGxmX3BhdGhdIgorCQlmaQorCQllY2hvICJMb2dmaWxlIGlzIGNsZWFuIgorCWRvbmUKK30KKworZG9fcG9wdWxhdGVfc2RrW2RpcnNdID0gIiR7VE9QRElSfSIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX3BvcHVsYXRlX3N5c3Jvb3QnIGZvciB4IGluIGQuZ2V0VmFyKCdTREtfREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX0gICR7QGQuZ2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ2RlcGVuZHMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrW3JkZXBlbmRzXSA9ICIke0AnICcuam9pbihbeCArICc6ZG9fcG9wdWxhdGVfc3lzcm9vdCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19SREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX0iCitkb19wb3B1bGF0ZV9zZGtbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlX3dyaXRlX3JwbSBkb19wYWNrYWdlX3dyaXRlX2lwayBkb19wYWNrYWdlX3dyaXRlX2RlYiIKK2FkZHRhc2sgcG9wdWxhdGVfc2RrCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWY4ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nka19leHQuYmJjbGFzcwpAQCAtMCwwICsxLDI3NSBAQAorIyBFeHRlbnNpYmxlIFNESworCitpbmhlcml0IHBvcHVsYXRlX3Nka19iYXNlCisKKyMgTk9URTogbm9ybWFsbHkgeW91IGNhbm5vdCB1c2UgdGFzayBvdmVycmlkZXMgZm9yIHRoaXMga2luZCBvZiB0aGluZyAtIHRoaXMKKyMgb25seSB3b3JrcyBiZWNhdXNlIG9mIGdldF9zZGtfZXh0X3JkZXBlbmRzKCkKKworVE9PTENIQUlOX0hPU1RfVEFTS190YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIFwKKyAgICBtZXRhLWVudmlyb25tZW50LWV4dHNkay0ke01BQ0hJTkV9IFwKKyAgICAiCisKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS190YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiIgorCitTREtfUkRFUEVORFNfYXBwZW5kX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIgJHtTREtfVEFSR0VUU30iCisKK1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIwIgorCitTREtfTE9DQUxfQ09ORl9XSElURUxJU1QgPz0gIiIKK1NES19MT0NBTF9DT05GX0JMQUNLTElTVCA/PSAiQ09ORl9WRVJTSU9OIEJCX05VTUJFUl9USFJFQURTIFBBUkFMTEVMX01BS0UgUFJTRVJWX0hPU1QiCitTREtfSU5IRVJJVF9CTEFDS0xJU1QgPz0gImJ1aWxkaGlzdG9yeSBpY2VjYyIKK1NES19VUERBVEVfVVJMID89ICIiCisKK1NES19UQVJHRVRTID89ICIke1BOfSIKK09FX0lOSVRfRU5WX1NDUklQVCA/PSAib2UtaW5pdC1idWlsZC1lbnYiCisKKyMgVGhlIGZpbGVzIGZyb20gQ09SRUJBU0UgdGhhdCB5b3Ugd2FudCBwcmVzZXJ2ZWQgaW4gdGhlIENPUkVCQVNFIGNvcGllZAorIyBpbnRvIHRoZSBzZGsuIFRoaXMgYWxsb3dzIHNvbWVvbmUgdG8gaGF2ZSB0aGVpciBvd24gc2V0dXAgc2NyaXB0cyBpbgorIyBDT1JFQkFTRSBiZSBwcmVzZXJ2ZWQgYXMgd2VsbCBhcyB1bnRyYWNrZWQgZmlsZXMuCitDT1JFQkFTRV9GSUxFUyA/PSAiIFwKKyAgICBvZS1pbml0LWJ1aWxkLWVudiBcCisgICAgb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzIFwKKyAgICBzY3JpcHRzIFwKKyAgICBMSUNFTlNFIFwKKyAgICAudGVtcGxhdGVjb25mIFwKKyIKKworU0RLX0RJUl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtXT1JLRElSfS9zZGstZXh0IgorQl90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtTREtfRElSfSIKK1RPT0xDSEFJTl9PVVRQVVROQU1FX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1NES19OQU1FfS10b29sY2hhaW4tZXh0LSR7U0RLX1ZFUlNJT059IgorCitTREtfVElUTEVfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7QGQuZ2V0VmFyKCdESVNUUk9fTkFNRScsIFRydWUpIG9yIGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX0gRXh0ZW5zaWJsZSBTREsiCisKK3B5dGhvbiBjb3B5X2J1aWxkc3lzdGVtICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgb2UuY29weV9idWlsZHN5c3RlbQorCisgICAgb2VfaW5pdF9lbnZfc2NyaXB0ID0gZC5nZXRWYXIoJ09FX0lOSVRfRU5WX1NDUklQVCcsIFRydWUpCisKKyAgICBjb25mX2JicGF0aCA9ICcnCisgICAgY29uZl9pbml0cGF0aCA9ICcnCisgICAgY29yZV9tZXRhX3N1YmRpciA9ICcnCisKKyAgICAjIENvcHkgaW4gYWxsIG1ldGFkYXRhIGxheWVycyArIGJpdGJha2UgKGFzIHJlcG9zaXRvcmllcykKKyAgICBidWlsZHN5c3RlbSA9IG9lLmNvcHlfYnVpbGRzeXN0ZW0uQnVpbGRTeXN0ZW0oZCkKKyAgICBiYXNlb3V0cGF0aCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkgKyAnLycgKyBkLmdldFZhcignU0RLUEFUSCcsIFRydWUpCisgICAgbGF5ZXJzX2NvcGllZCA9IGJ1aWxkc3lzdGVtLmNvcHlfYml0YmFrZV9hbmRfbGF5ZXJzKGJhc2VvdXRwYXRoICsgJy9sYXllcnMnKQorCisgICAgc2RrYmJsYXllcnMgPSBbXQorICAgIGNvcmViYXNlID0gb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKSkKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzX2NvcGllZDoKKyAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5iYXNlbmFtZShsYXllcik6CisgICAgICAgICAgICBjb25mX2JicGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgbGF5ZXIsICdiaXRiYWtlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNka2JibGF5ZXJzLmFwcGVuZChsYXllcikKKworICAgIGZvciBwYXRoIGluIG9zLmxpc3RkaXIoYmFzZW91dHBhdGggKyAnL2xheWVycycpOgorICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCBvZV9pbml0X2Vudl9zY3JpcHQpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgcmVscGF0aCkpOgorICAgICAgICAgICAgY29uZl9pbml0cGF0aCA9IHJlbHBhdGgKKworICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCAnc2NyaXB0cycsICdkZXZ0b29sJykKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCByZWxwYXRoKSk6CisgICAgICAgICAgICBzY3JpcHRyZWxwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlbHBhdGgpCisKKyAgICAgICAgcmVscGF0aCA9IG9zLnBhdGguam9pbignbGF5ZXJzJywgcGF0aCwgJ21ldGEnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsIHJlbHBhdGgsICdsaWInLCAnb2UnKSk6CisgICAgICAgICAgICBjb3JlX21ldGFfc3ViZGlyID0gcmVscGF0aAorCisgICAgZC5zZXRWYXIoJ29lX2luaXRfYnVpbGRfZW52X3BhdGgnLCBjb25mX2luaXRwYXRoKQorICAgIGQuc2V0VmFyKCdzY3JpcHRyZWxwYXRoJywgc2NyaXB0cmVscGF0aCkKKworICAgICMgV3JpdGUgb3V0IGNvbmZpZyBmaWxlIGZvciBkZXZ0b29sCisgICAgaW1wb3J0IENvbmZpZ1BhcnNlcgorICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKCkKKyAgICBjb25maWcuYWRkX3NlY3Rpb24oJ0dlbmVyYWwnKQorICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnYml0YmFrZV9zdWJkaXInLCBjb25mX2JicGF0aCkKKyAgICBjb25maWcuc2V0KCdHZW5lcmFsJywgJ2luaXRfcGF0aCcsIGNvbmZfaW5pdHBhdGgpCisgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdjb3JlX21ldGFfc3ViZGlyJywgY29yZV9tZXRhX3N1YmRpcikKKyAgICBjb25maWcuYWRkX3NlY3Rpb24oJ1NESycpCisgICAgY29uZmlnLnNldCgnU0RLJywgJ3Nka190YXJnZXRzJywgZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkpCisgICAgdXBkYXRldXJsID0gZC5nZXRWYXIoJ1NES19VUERBVEVfVVJMJywgVHJ1ZSkKKyAgICBpZiB1cGRhdGV1cmw6CisgICAgICAgIGNvbmZpZy5zZXQoJ1NESycsICd1cGRhdGVzZXJ2ZXInLCB1cGRhdGV1cmwpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ2NvbmYnKSkKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnY29uZicsICdkZXZ0b29sLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBjb25maWcud3JpdGUoZikKKworICAgICMgQ3JlYXRlIGEgbGF5ZXIgZm9yIG5ldyByZWNpcGVzIC8gYXBwZW5kcworICAgIGJicGF0aCA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKQorICAgIGJiLnByb2Nlc3MucnVuKFsnZGV2dG9vbCcsICctLWJicGF0aCcsIGJicGF0aCwgJy0tYmFzZXBhdGgnLCBiYXNlb3V0cGF0aCwgJ2NyZWF0ZS13b3Jrc3BhY2UnLCAnLS1jcmVhdGUtb25seScsIG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgJ3dvcmtzcGFjZScpXSkKKworICAgICMgQ3JlYXRlIGJibGF5ZXJzLmNvbmYKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYmFzZW91dHBhdGggKyAnL2NvbmYnKQorICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi9iYmxheWVycy5jb25mJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcjIFdBUk5JTkc6IHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgaW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgbW9zdCBjYXNlcyBzaG91bGQgbm90IGJlIGVkaXRlZC4gSWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4nKQorICAgICAgICBmLndyaXRlKCcjIHRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcywgaXQgaXMgc3Ryb25nbHkgc3VnZ2VzdGVkIHRoYXQgeW91IHNldFxuJykKKyAgICAgICAgZi53cml0ZSgnIyB1cCBhIHByb3BlciBpbnN0YW5jZSBvZiB0aGUgZnVsbCBidWlsZCBzeXN0ZW0gYW5kIHVzZSB0aGF0IGluc3RlYWQuXG5cbicpCisKKyAgICAgICAgZi53cml0ZSgnTENPTkZfVkVSU0lPTiA9ICIlcyJcblxuJyAlIGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgRmFsc2UpKQorICAgICAgICBmLndyaXRlKCdCQlBBVEggPSAiJCcgKyAne1RPUERJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdTREtCQVNFTUVUQVBBVEggPSAiJCcgKyAne1RPUERJUn0iXG4nKQorICAgICAgICBmLndyaXRlKCdCQkxBWUVSUyA6PSAiIFxcXG4nKQorICAgICAgICBmb3IgbGF5ZXJyZWxwYXRoIGluIHNka2JibGF5ZXJzOgorICAgICAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L2xheWVycy8lcyBcXFxuJyAlIGxheWVycmVscGF0aCkKKyAgICAgICAgZi53cml0ZSgnICAgICQnICsgJ3tTREtCQVNFTUVUQVBBVEh9L3dvcmtzcGFjZSBcXFxuJykKKyAgICAgICAgZi53cml0ZSgnICAgICJcbicpCisKKyAgICAjIENyZWF0ZSBsb2NhbC5jb25mCisgICAgbG9jYWxfY29uZl93aGl0ZWxpc3QgPSAoZC5nZXRWYXIoJ1NES19MT0NBTF9DT05GX1dISVRFTElTVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgbG9jYWxfY29uZl9ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ1NES19MT0NBTF9DT05GX0JMQUNLTElTVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgZGVmIGhhbmRsZV92YXIodmFybmFtZSwgb3JpZ3ZhbHVlLCBvcCwgbmV3bGluZXMpOgorICAgICAgICBpZiB2YXJuYW1lIGluIGxvY2FsX2NvbmZfYmxhY2tsaXN0IG9yIChvcmlndmFsdWUuc3RyaXAoKS5zdGFydHN3aXRoKCcvJykgYW5kIG5vdCB2YXJuYW1lIGluIGxvY2FsX2NvbmZfd2hpdGVsaXN0KToKKyAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnIyBSZW1vdmVkIG9yaWdpbmFsIHNldHRpbmcgb2YgJXNcbicgJSB2YXJuYW1lKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIG9wLCAwLCBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb3JpZ3ZhbHVlLCBvcCwgMCwgVHJ1ZQorICAgIHZhcmxpc3QgPSBbJ1teIz0rIF0qJ10KKyAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKQorICAgIHdpdGggb3BlbihidWlsZGRpciArICcvY29uZi9sb2NhbC5jb25mJywgJ3InKSBhcyBmOgorICAgICAgICBvbGRsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAodXBkYXRlZCwgbmV3bGluZXMpID0gYmIudXRpbHMuZWRpdF9tZXRhZGF0YShvbGRsaW5lcywgdmFybGlzdCwgaGFuZGxlX3ZhcikKKworICAgIHdpdGggb3BlbihiYXNlb3V0cGF0aCArICcvY29uZi9sb2NhbC5jb25mJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcjIFdBUk5JTkc6IHRoaXMgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgaW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgbW9zdCBjYXNlcyBzaG91bGQgbm90IGJlIGVkaXRlZC4gSWYgeW91IG5lZWQgbW9yZSBmbGV4aWJpbGl0eSB0aGFuXG4nKQorICAgICAgICBmLndyaXRlKCcjIHRoaXMgY29uZmlndXJhdGlvbiBwcm92aWRlcywgaXQgaXMgc3Ryb25nbHkgc3VnZ2VzdGVkIHRoYXQgeW91IHNldFxuJykKKyAgICAgICAgZi53cml0ZSgnIyB1cCBhIHByb3BlciBpbnN0YW5jZSBvZiB0aGUgZnVsbCBidWlsZCBzeXN0ZW0gYW5kIHVzZSB0aGF0IGluc3RlYWQuXG5cbicpCisgICAgICAgIGZvciBsaW5lIGluIG5ld2xpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCisgICAgICAgIGYud3JpdGUoJ0lOSEVSSVQgKz0gIiVzIlxuXG4nICUgJ3VuaW5hdGl2ZScpCisgICAgICAgIGYud3JpdGUoJ0NPTkZfVkVSU0lPTiA9ICIlcyJcblxuJyAlIGQuZ2V0VmFyKCdDT05GX1ZFUlNJT04nLCBGYWxzZSkpCisKKyAgICAgICAgIyBTb21lIGNsYXNzZXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgU0RLLCByZW1vdmUgdGhlbSBmcm9tIElOSEVSSVQKKyAgICAgICAgZi53cml0ZSgnSU5IRVJJVF9yZW1vdmUgPSAiJXMiXG4nICUgZC5nZXRWYXIoJ1NES19JTkhFUklUX0JMQUNLTElTVCcpKQorCisgICAgICAgICMgQnlwYXNzIHRoZSBkZWZhdWx0IGNvbm5lY3Rpdml0eSBjaGVjayBpZiBhbnkKKyAgICAgICAgZi53cml0ZSgnQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgPSAiIlxuXG4nKQorCisgICAgICAgICMgQW5vdGhlciBoYWNrLCBidXQgd2Ugd2FudCB0aGUgbmF0aXZlIHBhcnQgb2Ygc3N0YXRlIHRvIGJlIGtlcHQgdGhlIHNhbWUKKyAgICAgICAgIyByZWdhcmRsZXNzIG9mIHRoZSBob3N0IGRpc3RybworICAgICAgICBmaXhlZGxzYnN0cmluZyA9ICdTREstRml4ZWQnCisgICAgICAgIGYud3JpdGUoJ05BVElWRUxTQlNUUklOR19mb3JjZXZhcmlhYmxlID0gIiVzIlxuXG4nICUgZml4ZWRsc2JzdHJpbmcpCisKKyAgICAgICAgIyBFbnN1cmUgbG9ja2VkIHNzdGF0ZSBjYWNoZSBvYmplY3RzIGFyZSByZS11c2VkIHdpdGhvdXQgZXJyb3IKKyAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfQ0hFQ0tfTEVWRUwgPSAid2FybiJcblxuJykKKworICAgICAgICBmLndyaXRlKCdyZXF1aXJlIGNvbmYvbG9ja2VkLXNpZ3MuaW5jXG4nKQorICAgICAgICBmLndyaXRlKCdyZXF1aXJlIGNvbmYvd29yay1jb25maWcuaW5jXG4nKQorCisgICAgc2lnZmlsZSA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkgKyAnL2xvY2tlZC1zaWdzLmluYycKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpCisKKyAgICAjIEZpbHRlciB0aGUgbG9ja2VkIHNpZ25hdHVyZXMgZmlsZSB0byBqdXN0IHRoZSBzc3RhdGUgdGFza3Mgd2UgYXJlIGludGVyZXN0ZWQgaW4KKyAgICBhbGxvd2VkX3Rhc2tzID0gWydkb19wb3B1bGF0ZV9saWMnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCcsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3FhJywgJ2RvX2RlcGxveSddCisgICAgZXhjbHVkZWRfdGFyZ2V0cyA9IGQuZ2V0VmFyKCdTREtfVEFSR0VUUycsIFRydWUpCisgICAgbG9ja2Vkc2lnc19wcnVuZWQgPSBiYXNlb3V0cGF0aCArICcvY29uZi9sb2NrZWQtc2lncy5pbmMnCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5wcnVuZV9sb2NrZWRzaWdzKGFsbG93ZWRfdGFza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkX3RhcmdldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZHNpZ3NfcHJ1bmVkKQorCisgICAgc3N0YXRlX291dCA9IGJhc2VvdXRwYXRoICsgJy9zc3RhdGUtY2FjaGUnCisgICAgYmIudXRpbHMucmVtb3ZlKHNzdGF0ZV9vdXQsIFRydWUpCisgICAgb2UuY29weV9idWlsZHN5c3RlbS5jcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzX3BydW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3RhdGVfb3V0LCBkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRsc2JzdHJpbmcpCisKKyAgICAjIENyZWF0ZSBhIGR1bW15IGNvbmZpZyBmaWxlIGZvciBhZGRpdGlvbmFsIHNldHRpbmdzCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL3dvcmstY29uZmlnLmluYycsICd3JykgYXMgZjoKKyAgICAgICAgcGFzcworfQorCitkZWYgZXh0c2RrX2dldF9idWlsZHRvb2xzX2ZpbGVuYW1lKGQpOgorICAgICMgVGhpcyBpcyBzb21ld2hhdCBvZiBhIGhhY2sKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsICdidWlsZHRvb2xzLXRhcmJhbGwnKQorICAgIHJldHVybiBsb2NhbGRhdGEuZXhwYW5kKCcke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSouc2gnKQorCitpbnN0YWxsX3Rvb2xzKCkgeworCWluc3RhbGwgLWQgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfQorCWxuciAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vJHtzY3JpcHRyZWxwYXRofS9kZXZ0b29sICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vZGV2dG9vbAorCWxuciAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vJHtzY3JpcHRyZWxwYXRofS9yZWNpcGV0b29sICR7U0RLX09VVFBVVH0vJHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka30vcmVjaXBldG9vbAorCXRvdWNoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8uZGV2dG9vbGJhc2UKKworCSMgZmluZCBsYXRlc3QgYnVpbGR0b29scy10YXJiYWxsIGFuZCBpbnN0YWxsIGl0CisJYnVpbGR0b29sc19wYXRoPWBscyAtdDEgJHtTREtfREVQTE9ZfS8ke0BleHRzZGtfZ2V0X2J1aWxkdG9vbHNfZmlsZW5hbWUoZCl9IHwgaGVhZCAtbjFgCisJaW5zdGFsbCAkYnVpbGR0b29sc19wYXRoICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorCisJaW5zdGFsbCAke1NES19ERVBMT1l9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KK30KKworIyBTaW5jZSBiaXRiYWtlIHdvbid0IHJ1biBhcyByb290IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgYW5kIGluc3RhbGwKKyMgdGhlIGV4dGVuc2libGUgc2RrIGFzIHJvb3QuCitzZGtfZXh0X3ByZWluc3QoKSB7CisJaWYgWyAiYGlkIC11YCIgPSAiMCIgXTsgdGhlbgorCQllY2hvICJFUlJPUjogVGhlIGV4dGVuc2libGUgc2RrIGNhbm5vdCBiZSBpbnN0YWxsZWQgYXMgcm9vdC4iCisJCWV4aXQgMQorCWZpCisJU0RLX0VYVEVOU0lCTEU9IjEiCit9CitTREtfUFJFX0lOU1RBTExfQ09NTUFORF90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtzZGtfZXh0X3ByZWluc3R9IgorCisjIEZJWE1FIHRoaXMgcHJlcGFyYXRpb24gc2hvdWxkIGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgU0RLIGNvbnN0cnVjdGlvbgorc2RrX2V4dF9wb3N0aW5zdCgpIHsKKwlwcmludGYgIlxuRXh0cmFjdGluZyBidWlsZHRvb2xzLi4uXG4iCisJY2QgJHRhcmdldF9zZGtfZGlyCisJcHJpbnRmICJidWlsZHRvb2xzXG55IiB8IC4vKmJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUqID4gL2Rldi9udWxsCisKKwkjIE1ha2Ugc3VyZSB3aGVuIHRoZSB1c2VyIHNldHMgdXAgdGhlIGVudmlyb25tZW50LCB0aGV5IGFsc28gZ2V0CisJIyB0aGUgYnVpbGR0b29scy10YXJiYWxsIHRvb2xzIGluIHRoZWlyIHBhdGguCisJZWNobyAiLiAkdGFyZ2V0X3Nka19kaXIvYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cCoiID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgQWxsb3cgYml0YmFrZSBlbnZpcm9ubWVudCBzZXR1cCB0byBiZSByYW4gYXMgcGFydCBvZiB0aGlzIHNkay4KKwllY2hvICJleHBvcnQgT0VfU0tJUF9TREtfQ0hFQ0s9MSIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBBIGJpdCBvZiBhbm90aGVyIGhhY2ssIGJ1dCB3ZSBuZWVkIHRoaXMgaW4gdGhlIHBhdGggb25seSBmb3IgZGV2dG9vbAorCSMgc28gcHV0IGl0IGF0IHRoZSBlbmQgb2YgJFBBVEguCisJZWNobyAiZXhwb3J0IFBBVEg9XCRQQVRIOiR0YXJnZXRfc2RrX2Rpci9zeXNyb290cy8ke1NES19TWVN9LyR7YmluZGlyX25hdGl2ZXNka30iID4+ICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cCoKKworCSMgRm9yIG5vdyB0aGlzIGlzIHdoZXJlIHVuaW5hdGl2ZS5iYmNsYXNzIGV4cGVjdHMgdGhlIHRhcmJhbGwKKwltdiAqLW5hdGl2ZXNkay1saWJjLnRhci4qICR0YXJnZXRfc2RrX2Rpci9gZGlybmFtZSAke29lX2luaXRfYnVpbGRfZW52X3BhdGh9YAorCisJaWYgWyAiJHByZXBhcmVfYnVpbGRzeXN0ZW0iICE9ICJubyIgXTsgdGhlbgorCSAgICBwcmludGYgIlByZXBhcmluZyBidWlsZCBzeXN0ZW0uLi5cbiIKKwkgICAgIyBkYXNoIHdoaWNoIGlzIC9iaW4vc2ggb24gVWJ1bnR1IHdpbGwgbm90IHByZXNlcnZlIHRoZQorCSAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBmaXJzdCByYW4sIG5vciB3aWxsIGl0IHNldCAkMSB3aGVuCisJICAgICMgc291cmNpbmcgYSBzY3JpcHQuIFRoYXQgaXMgd2h5IHRoaXMgaGFzIHRvIGxvb2sgc28gdWdseS4KKwkgICAgc2ggLWMgIi4gYnVpbGR0b29scy9lbnZpcm9ubWVudC1zZXR1cCogPiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyAmJiBjZCAkdGFyZ2V0X3Nka19kaXIvYGRpcm5hbWUgJHtvZV9pbml0X2J1aWxkX2Vudl9wYXRofWAgJiYgc2V0ICR0YXJnZXRfc2RrX2RpciAmJiAuICR0YXJnZXRfc2RrX2Rpci8ke29lX2luaXRfYnVpbGRfZW52X3BhdGh9ICR0YXJnZXRfc2RrX2RpciA+PiBwcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyAmJiBiaXRiYWtlICR7U0RLX1RBUkdFVFN9ID4+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nIiB8fCB7IGVjaG8gIlNESyBwcmVwYXJhdGlvbiBmYWlsZWQ6IHNlZSBgcHdkYC9wcmVwYXJpbmdfYnVpbGRfc3lzdGVtLmxvZyIgOyBleGl0IDEgOyB9CisJZmkKKwllY2hvIGRvbmUKK30KKworU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke3Nka19leHRfcG9zdGluc3R9IgorCitTREtfUE9TVFBST0NFU1NfQ09NTUFORF9wcmVwZW5kX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICJjb3B5X2J1aWxkc3lzdGVtOyBpbnN0YWxsX3Rvb2xzOyAiCisKK2Zha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGtfZXh0KCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcG9wdWxhdGVfc2RrIiwgZCkKK30KKworZGVmIGdldF9zZGtfZXh0X3JkZXBlbmRzKGQpOgorICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgbG9jYWxkYXRhLmFwcGVuZFZhcignT1ZFUlJJREVTJywgJzp0YXNrLXBvcHVsYXRlLXNkay1leHQnKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHJldHVybiBsb2NhbGRhdGEuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JkZXBlbmRzJywgVHJ1ZSkKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtkaXJzXSA9ICIke0BkLmdldFZhckZsYWcoJ2RvX3BvcHVsYXRlX3NkaycsICdkaXJzJywgRmFsc2UpfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbZGVwZW5kc10gKz0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ2RlcGVuZHMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZGVwZW5kc10gPSAiJHtAZ2V0X3Nka19leHRfcmRlcGVuZHMoZCl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZWNyZGVwdGFza10gKz0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ3JlY3JkZXB0YXNrJywgRmFsc2UpfSIKKworCitkb19wb3B1bGF0ZV9zZGtfZXh0W2RlcGVuZHNdICs9ICJidWlsZHRvb2xzLXRhcmJhbGw6ZG9fcG9wdWxhdGVfc2RrIHVuaW5hdGl2ZS10YXJiYWxsOmRvX3BvcHVsYXRlX3NkayIKKworZG9fcG9wdWxhdGVfc2RrX2V4dFtyZGVwZW5kc10gKz0gIiR7QCcgJy5qb2luKFt4ICsgJzpkb19idWlsZCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkuc3BsaXQoKV0pfSIKK2RvX3BvcHVsYXRlX3Nka19leHRbcmVjcmRlcHRhc2tdICs9ICJkb19wb3B1bGF0ZV9saWMgZG9fcGFja2FnZV9xYSBkb19wb3B1bGF0ZV9zeXNyb290IGRvX2RlcGxveSIKKworIyBNYWtlIHN1cmUgY29kZXMgY2hhbmdlIGluIGNvcHlfYnVpbGRzeXN0ZW0gY2FuIHJlc3VsdCBpbiByZWJ1aWx0Citkb19wb3B1bGF0ZV9zZGtfZXh0W3ZhcmRlcHNdICs9ICJjb3B5X2J1aWxkc3lzdGVtIgorCithZGR0YXNrIHBvcHVsYXRlX3Nka19leHQKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExY2IzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wcmV4cG9ydC5iYmNsYXNzCkBAIC0wLDAgKzEsNTggQEAKK1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04gPSAiJHtQUkFVVE9JTlh9IgorUFJTRVJWX0RVTVBPUFRfUEtHQVJDSCAgPSAiIgorUFJTRVJWX0RVTVBPUFRfQ0hFQ0tTVU0gPSAiIgorUFJTRVJWX0RVTVBPUFRfQ09MID0gIjAiCisKK1BSU0VSVl9EVU1QRElSID8/PSAiJHtMT0dfRElSfS9kYiIKK1BSU0VSVl9EVU1QRklMRSA/Pz0gIiR7UFJTRVJWX0RVTVBESVJ9L3Byc2Vydi5pbmMiCisKK3B5dGhvbiBwcmV4cG9ydF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUGFyc2VkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjZ2V0IGFsbCBQUiB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IFBSQVVUT0lOWAorICAgICAgICB2ZXIgPSBlLmRhdGEuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJyUnLCctJykKKyAgICAgICAgcmV0dmFsID0gb2UucHJzZXJ2aWNlLnByc2Vydl9kdW1wX2RiKGUuZGF0YSkKKyAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgIChtZXRhaW5mbywgZGF0YWluZm8pID0gcmV0dmFsCisgICAgICAgIGlmIG5vdCBkYXRhaW5mbzoKKyAgICAgICAgICAgIGJiLndhcm4oInByZXhwb3J0X2hhbmRsZXI6IE5vIEFVVE9QUiB2YWx1ZXMgZm91bmQgZm9yICVzIiAlIHZlcikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2V4cG9ydF90b2ZpbGUoZS5kYXRhLCBOb25lLCBkYXRhaW5mbywgRmFsc2UpCisgICAgICAgIGlmICdBVVRPSU5DJyBpbiB2ZXI6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIHNyY3B2ID0gIGJiLmZldGNoMi5nZXRfc3JjcmV2KGUuZGF0YSkKKyAgICAgICAgICAgIGJhc2VfdmVyID0gIkFVVE9JTkMtJXMiICUgdmVyWzp2ZXIuZmluZChzcmNwdildCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgYmFzZV92ZXIpCisgICAgICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZS5kYXRhKQorICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgicHJleHBvcnRfaGFuZGxlcjogZXhwb3J0IGZhaWxlZCEiKQorICAgICAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfZXhwb3J0X3RvZmlsZShlLmRhdGEsIE5vbmUsIGRhdGFpbmZvLCBGYWxzZSkKKyAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VTdGFydGVkKToKKyAgICAgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9jaGVja19hdmFpbChlLmRhdGEpCisgICAgICAgICNyZW1vdmUgZHVtcGZpbGUKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGUuZGF0YS5nZXRWYXIoJ1BSU0VSVl9EVU1QRklMRScsIFRydWUpKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgI2R1bXAgbWV0YSBpbmZvIG9mIHRhYmxlcworICAgICAgICBkID0gZS5kYXRhLmNyZWF0ZUNvcHkoKQorICAgICAgICBkLnNldFZhcignUFJTRVJWX0RVTVBPUFRfQ09MJywgIjEiKQorICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZCkKKyAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9leHBvcnRfdG9maWxlKGQsIG1ldGFpbmZvLCBOb25lLCBUcnVlKQorCit9CisKK2FkZGhhbmRsZXIgcHJleHBvcnRfaGFuZGxlcgorcHJleHBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVBhcnNlZCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDQ1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcHJpbXBvcnQuYmJjbGFzcwpAQCAtMCwwICsxLDIxIEBACitweXRob24gcHJpbXBvcnRfaGFuZGxlciAoKSB7CisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjaW1wb3J0IGFsbCBleHBvcnRlZCBBVVRPUFIgdmFsdWVzCisgICAgICAgIGltcG9ydGVkID0gb2UucHJzZXJ2aWNlLnByc2Vydl9pbXBvcnRfZGIoZS5kYXRhKQorICAgICAgICBpZiBpbXBvcnRlZCBpcyBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwoImltcG9ydCBmYWlsZWQhIikKKworICAgICAgICBmb3IgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkgaW4gaW1wb3J0ZWQ6CisgICAgICAgICAgICBiYi5ub3RlKCJpbXBvcnRlZCAoJXMsJXMsJXMsJWQpIiAlICh2ZXJzaW9uLCBwa2dhcmNoLCBjaGVja3N1bSwgdmFsdWUpKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfY2hlY2tfYXZhaWwoZS5kYXRhKQorfQorCithZGRoYW5kbGVyIHByaW1wb3J0X2hhbmRsZXIKK3ByaW1wb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHJzZXJ2LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcHJzZXJ2LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5NTk3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKKworCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTQ5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcHRlc3QtZ25vbWUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgcHRlc3QKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnLS1lbmFibGUtaW5zdGFsbGVkLXRlc3RzJywgJy0tZGlzYWJsZS1pbnN0YWxsZWQtdGVzdHMnLCBkKX0iCisKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8gXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaW5zdGFsbGVkLXRlc3RzLyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImdub21lLWRlc2t0b3AtdGVzdGluZyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmNDcwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wdGVzdC5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUllfJHtQTn0tcHRlc3QgPz0gIiR7U1VNTUFSWX0gLSBQYWNrYWdlIHRlc3QgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1wdGVzdCA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBhIHRlc3QgZGlyZWN0b3J5ICR7UFRFU1RfUEFUSH0gZm9yIHBhY2thZ2UgdGVzdCBwdXJwb3Nlcy4iCisKK1BURVNUX1BBVEggPz0gIiR7bGliZGlyfS8ke1BOfS9wdGVzdCIKK0ZJTEVTXyR7UE59LXB0ZXN0ID0gIiR7UFRFU1RfUEFUSH0iCitTRUNUSU9OXyR7UE59LXB0ZXN0ID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tcHRlc3QgPSAiMSIKK1BURVNUX0VOQUJMRUQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICcxJywgJzAnLCBkKX0iCitQVEVTVF9FTkFCTEVEX2NsYXNzLW5hdGl2ZSA9ICIiCitQVEVTVF9FTkFCTEVEX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitQVEVTVF9FTkFCTEVEX2NsYXNzLWNyb3NzLWNhbmFkaWFuID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3QgKz0gInB0ZXN0LXJ1bm5lciIKKworUEFDS0FHRVMgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQVEVTVF9FTkFCTEVEJywgJzEnLCAnJHtQTn0tcHRlc3QnLCAnJywgZCl9IgorCitkb19jb25maWd1cmVfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19jb25maWd1cmVfcHRlc3RfYmFzZSgpIHsKKyAgICBkb19jb25maWd1cmVfcHRlc3QKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZSgpIHsKKyAgICBkb19jb21waWxlX3B0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisgICAgOgorfQorCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2UoKSB7CisgICAgaWYgWyAtZiAke1dPUktESVJ9L3J1bi1wdGVzdCBdOyB0aGVuCisgICAgICAgIGluc3RhbGwgLUQgJHtXT1JLRElSfS9ydW4tcHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0CisgICAgICAgIGlmIGdyZXAgLXEgaW5zdGFsbC1wdGVzdDogTWFrZWZpbGU7IHRoZW4KKyAgICAgICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBpbnN0YWxsLXB0ZXN0CisgICAgICAgIGZpCisgICAgICAgIGRvX2luc3RhbGxfcHRlc3QKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0ke1BURVNUX1BBVEh9CisgICAgZmkKK30KKworZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2VbZGlyc10gPSAiJHtCfSIKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZVtkaXJzXSA9ICIke0J9IgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2RpcnNdID0gIiR7Qn0iCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbY2xlYW5kaXJzXSA9ICIke0R9JHtQVEVTVF9QQVRIfSIKKworYWRkdGFzayBjb25maWd1cmVfcHRlc3RfYmFzZSBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKK2FkZHRhc2sgY29tcGlsZV9wdGVzdF9iYXNlICAgYWZ0ZXIgZG9fY29tcGlsZSAgIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIGluc3RhbGxfcHRlc3RfYmFzZSAgIGFmdGVyIGRvX2luc3RhbGwgICBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19pbnN0YWxsX3B0ZXN0X2Jhc2UnLCAnZmFrZXJvb3QnLCAxKQorCisgICAgIyBSZW1vdmUgYWxsICcqcHRlc3RfYmFzZScgdGFza3Mgd2hlbiBwdGVzdCBpcyBub3QgZW5hYmxlZAorICAgIGlmIG5vdChkLmdldFZhcignUFRFU1RfRU5BQkxFRCcsIFRydWUpID09ICIxIik6CisgICAgICAgIGZvciBpIGluIFsnZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2UnLCAnZG9fY29tcGlsZV9wdGVzdF9iYXNlJywgJ2RvX2luc3RhbGxfcHRlc3RfYmFzZSddOgorICAgICAgICAgICAgYmIuYnVpbGQuZGVsdGFzayhpLCBkKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmYTRiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9weXRob24tZGlyLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACitQWVRIT05fQkFTRVZFUlNJT04gPz0gIjIuNyIKK1BZVEhPTl9BQkkgPz0gIiIKK1BZVEhPTl9ESVIgPSAicHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IgorUFlUSE9OX1BOID0gInB5dGhvbiR7QCcnIGlmICcke1BZVEhPTl9CQVNFVkVSU0lPTn0nLnN0YXJ0c3dpdGgoJzInKSBlbHNlICczJ30iCitQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiA9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9weXRob24zbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4MzAxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9weXRob24zbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACitQWVRIT05fQkFTRVZFUlNJT04gPSAiMy40IgorCitpbmhlcml0IHB5dGhvbi1kaXIKKworUFlUSE9OPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0iCitFWFRSQU5BVElWRVBBVEggKz0gIiR7UFlUSE9OX1BOfS1uYXRpdmUiCitERVBFTkRTICs9ICIgJHtQWVRIT05fUE59LW5hdGl2ZSAiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHl0aG9ubmF0aXZlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcHl0aG9ubmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwMjlkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKKworaW5oZXJpdCBweXRob24tZGlyCisKK1BZVEhPTj0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IgorIyBQWVRIT05fRVhFQ1VUQUJMRSBpcyB1c2VkIGJ5IGNtYWtlCitQWVRIT05fRVhFQ1VUQUJMRT0iJHtQWVRIT059IgorRVhUUkFOQVRJVkVQQVRIICs9ICIke1BZVEhPTl9QTn0tbmF0aXZlIgorREVQRU5EUyArPSAiICR7UFlUSE9OX1BOfS1uYXRpdmUgIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjU4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9xZW11LmJiY2xhc3MKQEAgLTAsMCArMSw1MSBAQAorIworIyBUaGlzIGNsYXNzIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgcmVjaXBlcyB0aGF0IG5lZWQgUUVNVSBvciB0ZXN0IGZvciBpdHMKKyMgZXhpc3RlbmNlLgorIworCitkZWYgcWVtdV90YXJnZXRfYmluYXJ5KGRhdGEpOgorICAgIHRhcmdldF9hcmNoID0gZGF0YS5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkKKyAgICBpZiB0YXJnZXRfYXJjaCBpbiAoImk0ODYiLCAiaTU4NiIsICJpNjg2Iik6CisgICAgICAgIHRhcmdldF9hcmNoID0gImkzODYiCisgICAgZWxpZiB0YXJnZXRfYXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgIHRhcmdldF9hcmNoID0gInBwYyIKKyAgICBlbGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjNjQiOgorICAgICAgICB0YXJnZXRfYXJjaCA9ICJwcGM2NCIKKworICAgIHJldHVybiAicWVtdS0iICsgdGFyZ2V0X2FyY2gKKyMKKyMgTmV4dCBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tYW5kIHRoYXQgaXMgbmVlZGVkIHRvCisjIHRvIHJ1biBhIGNlcnRhaW4gYmluYXJ5IHRocm91Z2ggcWVtdS4gRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIG1ha2UgYSBjZXJ0YWluCisjIHBvc3RpbnN0YWxsIHNjcmlwdGxldCBydW4gYXQgZG9fcm9vdGZzIHRpbWUgYW5kIHJ1bm5pbmcgdGhlIHBvc3RpbnN0YWxsIGlzCisjIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQsIHdlIGNhbiBydW4gaXQgdGhyb3VnaCBxZW11LiBGb3IgZXhhbXBsZSwgaW4gdGhlCisjIHBvc3RpbnN0YWxsIHNjcmlwdGxldCwgd2UgY291bGQgdXNlIHRoZSBmb2xsb3dpbmc6CisjCisjICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnL3Vzci9iaW4vdGVzdF9hcHAnKX0gW3Rlc3RfYXBwIGFyZ3VtZW50c10KKyMKK2RlZiBxZW11X3J1bl9iaW5hcnkoZGF0YSwgcm9vdGZzX3BhdGgsIGJpbmFyeSk6CisgICAgcWVtdV9iaW5hcnkgPSBxZW11X3RhcmdldF9iaW5hcnkoZGF0YSkKKyAgICBpZiBxZW11X2JpbmFyeSA9PSAicWVtdS1hbGxhcmNoIjoKKyAgICAgICAgcWVtdV9iaW5hcnkgPSAicWVtdXdyYXBwZXIiCisKKyAgICBsaWJkaXIgPSByb290ZnNfcGF0aCArIGRhdGEuZ2V0VmFyKCJsaWJkaXIiLCBGYWxzZSkKKyAgICBiYXNlX2xpYmRpciA9IHJvb3Rmc19wYXRoICsgZGF0YS5nZXRWYXIoImJhc2VfbGliZGlyIiwgRmFsc2UpCisgICAgcWVtdV9vcHRpb25zID0gZGF0YS5nZXRWYXIoIlFFTVVfT1BUSU9OUyIsIFRydWUpCisKKyAgICByZXR1cm4gIlBTRVVET19VTkxPQUQ9MSAiICsgcWVtdV9iaW5hcnkgKyAiICIgKyBxZW11X29wdGlvbnMgKyAiIC1MICIgKyByb290ZnNfcGF0aFwKKyAgICAgICAgICAgICsgIiAtRSBMRF9MSUJSQVJZX1BBVEg9IiArIGxpYmRpciArICI6IiArIGJhc2VfbGliZGlyICsgIiAiXAorICAgICAgICAgICAgKyByb290ZnNfcGF0aCArIGJpbmFyeQorCisjIFFFTVVfRVhUUkFPUFRJT05TIGlzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSB1c2VkLCB0aGUgZXh0ZW5zaW9ucyBhcmUgCisjIFBBQ0tBR0VfQVJDSCwgbm90IG92ZXJyaWRlcyBhbmQgaGVuY2UgaGF2ZSB0byBkbyB0aGlzIGRhbmNlLiBTaW1wbHkgYmVpbmcgYXJjaCAKKyMgc3BlY2lmaWMgaXNuJ3QgZ29vZCBlbm91Z2guCitRRU1VX09QVElPTlMgPSAiLXIgJHtPTERFU1RfS0VSTkVMfSAke0BkLmdldFZhcigiUUVNVV9FWFRSQU9QVElPTlNfJXMiICUgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpLCBUcnVlKSBvciAiIn0iCitRRU1VX0VYVFJBT1BUSU9OU19pd21teHQgICAgPSAiIC1jcHUgcHhhMjcwLWM1IgorUUVNVV9FWFRSQU9QVElPTlNfYXJtdjYgICAgID0gIiAtY3B1IGFybTExMzYiCitRRU1VX0VYVFJBT1BUSU9OU19hcm12N2EgICAgPSAiIC1jcHUgY29ydGV4LWE4IgorUUVNVV9FWFRSQU9QVElPTlNfZTUwMHYyICAgID0gIiAtY3B1IGU1MDB2MiIKK1FFTVVfRVhUUkFPUFRJT05TX2U1MDBtYyAgICA9ICIgLWNwdSBlNTAwbWMiCitRRU1VX0VYVFJBT1BUSU9OU19lNTUwMCAgICAgPSAiIC1jcHUgZTU1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNTUwMC02NGIgPSAiIC1jcHUgZTU1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNjUwMCAgICAgPSAiIC1jcHUgZTY1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19lNjUwMC02NGIgPSAiIC1jcHUgZTY1MDAiCitRRU1VX0VYVFJBT1BUSU9OU19wcGM3NDAwICAgPSAiIC1jcHUgNzQwMCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9xbWFrZTIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xbWFrZTIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTczYWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzCkBAIC0wLDAgKzEsMjcgQEAKKyMKKyMgUU1ha2UgdmFyaWFibGVzIGZvciBRdDQKKyMKK2luaGVyaXQgcW1ha2VfYmFzZQorCitERVBFTkRTX3ByZXBlbmQgPSAicXQ0LXRvb2xzLW5hdGl2ZSAiCisKK2V4cG9ydCBRTUFLRVNQRUMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9L3F0NC9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCitleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHID0gIiR7U1RBR0lOR19EQVRBRElSfS9xdDQvbWtzcGVjcy9xY29uZmlnLnByaSIKK2V4cG9ydCBPRV9RTUFLRV9VSUMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3VpYzQiCitleHBvcnQgT0VfUU1BS0VfVUlDMyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljMzQiCitleHBvcnQgT0VfUU1BS0VfTU9DID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9tb2M0IgorZXhwb3J0IE9FX1FNQUtFX1JDQyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcmNjNCIKK2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUwgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FkYnVzY3BwMnhtbDQiCitleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xZGJ1c3htbDJjcHA0IgorZXhwb3J0IE9FX1FNQUtFX1FNQUtFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIiCitleHBvcnQgT0VfUU1BS0VfTElOSyA9ICIke0NYWH0iCitleHBvcnQgT0VfUU1BS0VfQ1hYRkxBR1MgPSAiJHtDWFhGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUID0gIiR7U1RBR0lOR19JTkNESVJ9L3F0NCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQgPSAiJHtTVEFHSU5HX0xJQkRJUn0iCitleHBvcnQgT0VfUU1BS0VfTElCU19RVCA9ICJxdCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMSA9ICItbFhleHQgLWxYMTEgLWxtIgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExU00gPSAiLWxTTSAtbElDRSIKK2V4cG9ydCBPRV9RTUFLRV9MQ09OVkVSVCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbGNvbnZlcnQ0IgorZXhwb3J0IE9FX1FNQUtFX0xSRUxFQVNFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9scmVsZWFzZTQiCitleHBvcnQgT0VfUU1BS0VfTFVQREFURSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbHVwZGF0ZTQiCitleHBvcnQgT0VfUU1BS0VfWE1MUEFUVEVSTlMgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3htbHBhdHRlcm5zNCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcW1ha2VfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTg3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcW1ha2VfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTE5IEBACitRTUFLRV9NS1NQRUNfUEFUSCA/PSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9xbWFrZSIKKworT0VfUU1BS0VfUExBVEZPUk0gPSAiJHtUQVJHRVRfT1N9LW9lLWcrKyIKK1FNQUtFU1BFQyA6PSAiJHtRTUFLRV9NS1NQRUNfUEFUSH0vJHtPRV9RTUFLRV9QTEFURk9STX0iCisKKyMgV2Ugb3ZlcnJpZGUgdGhpcyBjb21wbGV0ZWx5IHRvIGVsaW1pbmF0ZSB0aGUgLWUgbm9ybWFsbHkgcGFzc2VkIGluCitFWFRSQV9PRU1BS0UgPSAiIgorCitleHBvcnQgT0VfUU1BS0VfQ0M9IiR7Q0N9IgorZXhwb3J0IE9FX1FNQUtFX0NGTEFHUz0iJHtDRkxBR1N9IgorZXhwb3J0IE9FX1FNQUtFX0NYWD0iJHtDWFh9IgorZXhwb3J0IE9FX1FNQUtFX0xERkxBR1M9IiR7TERGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfQVI9IiR7QVJ9IgorZXhwb3J0IE9FX1FNQUtFX1NUUklQPSJlY2hvIgorZXhwb3J0IE9FX1FNQUtFX1JQQVRIPSItV2wsLXJwYXRoLWxpbmssIgorCisjIGRlZmF1bHQgdG8gcXRlMiB2aWEgYmIuY29uZiwgaW5oZXJpdCBxdDN4MTEgdG8gY29uZmlndXJlIGZvciBxdDN4MTEKKworb2VfcW1ha2VfbWtzcGVjcyAoKSB7CisgICAgbWtkaXIgLXAgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfQorICAgIGZvciBmIGluICR7UU1BS0VfTUtTUEVDX1BBVEh9LyR7T0VfUU1BS0VfUExBVEZPUk19Lyo7IGRvCisgICAgICAgIGlmIFsgLUwgJGYgXTsgdGhlbgorICAgICAgICAgICAgbG5rPWByZWFkbGluayAkZmAKKyAgICAgICAgICAgIGlmIFsgLWYgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS8kbG5rIF07IHRoZW4KKyAgICAgICAgICAgICAgICBsbiAtcyAkbG5rIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vYGJhc2VuYW1lICRmYAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNwICRmIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vCisgICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjcCAkZiBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19LworICAgICAgICBmaQorICAgIGRvbmUKK30KKworZG9fZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUoKSB7CisJZXhwb3J0IFFUX0NPTkZfUEFUSD0ke1dPUktESVJ9L3F0LmNvbmYKKwljYXQgPiAke1dPUktESVJ9L3F0LmNvbmYgPDxFT0YKK1tQYXRoc10KK1ByZWZpeCA9CitCaW5hcmllcyA9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfQorSGVhZGVycyA9ICR7U1RBR0lOR19JTkNESVJ9LyR7UVRfRElSX05BTUV9CitQbHVnaW5zID0gJHtTVEFHSU5HX0xJQkRJUn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8KK01rc3BlY3MgPSAke1NUQUdJTkdfREFUQURJUn0vJHtRVF9ESVJfTkFNRX0vbWtzcGVjcy8KK0VPRgorfQorCithZGR0YXNrIGdlbmVyYXRlX3F0X2NvbmZpZ19maWxlIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworcW1ha2VfYmFzZV9kb19jb25maWd1cmUoKSB7CisJY2FzZSAke1FNQUtFU1BFQ30gaW4KKwkqbGludXgtb2UtZysrfCpsaW51eC11Y2xpYmMtb2UtZysrfCpsaW51eC1nbnVlYWJpLW9lLWcrK3wqbGludXgtdWNsaWJjZWFiaS1vZS1nKyt8KmxpbnV4LWdudXNwZS1vZS1nKyt8KmxpbnV4LXVjbGliY3NwZS1vZS1nKyt8KmxpbnV4LWdudW4zMi1vZS1nKyspCisJCTs7CisJKi1vZS1nKyspCisJCWRpZSBVbnN1cHBvcnRlZCB0YXJnZXQgJHtUQVJHRVRfT1N9IGZvciBvZS1nKysgcW1ha2Ugc3BlYworCQk7OworCSopCisJCWJibm90ZSBTZWFyY2hpbmcgZm9yIHFtYWtlIHNwZWMgZmlsZQorCQlwYXRocz0iJHtRTUFLRV9NS1NQRUNfUEFUSH0vcXdzLyR7VEFSR0VUX09TfS0ke1RBUkdFVF9BUkNIfS1nKysiCisJCXBhdGhzPSIke1FNQUtFX01LU1BFQ19QQVRIfS8ke1RBUkdFVF9PU30tZysrICRwYXRocyIKKworCQlpZiAoZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgLXEgJ2kuODYnKTsgdGhlbgorCQkJcGF0aHM9IiR7UU1BS0VfTUtTUEVDX1BBVEh9L3F3cy8ke1RBUkdFVF9PU30teDg2LWcrKyAkcGF0aHMiCisJCWZpCisJCWZvciBpIGluICRwYXRoczsgZG8KKwkJCWlmIHRlc3QgLWUgJGk7IHRoZW4KKwkJCQlleHBvcnQgUU1BS0VTUEVDPSRpCisJCQkJYnJlYWsKKwkJCWZpCisJCWRvbmUKKwkJOzsKKwllc2FjCisKKwliYm5vdGUgInVzaW5nIHFtYWtlIHNwZWMgaW4gJHtRTUFLRVNQRUN9LCB1c2luZyBwcm9maWxlcyAnJHtRTUFLRV9QUk9GSUxFU30nIgorCisJaWYgWyAteiAiJHtRTUFLRV9QUk9GSUxFU30iIF07IHRoZW4gCisJCVBST0ZJTEVTPSJgbHMgKi5wcm9gIgorCWVsc2UKKwkJUFJPRklMRVM9IiR7UU1BS0VfUFJPRklMRVN9IgorCWZpCisKKwlpZiBbIC16ICIkUFJPRklMRVMiIF07IHRoZW4KKwkJZGllICJRTUFLRV9QUk9GSUxFUyBub3Qgc2V0IGFuZCBubyBwcm9maWxlcyBmb3VuZCBpbiAkUFdEIgorICAgICAgICBmaQorCisJaWYgWyAhIC16ICIke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIgXTsgdGhlbgorCQlBRlRFUj0iLWFmdGVyIgorCQlRTUFLRV9WQVJTVUJTVF9QT1NUPSIke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIKKwkJYmJub3RlICJxbWFrZSBwb3N0dmFyIHN1YnN0aXR1dGlvbjogJHtFWFRSQV9RTUFLRVZBUlNfUE9TVH0iCisJZmkKKworCWlmIFsgISAteiAiJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIgXTsgdGhlbgorCQlRTUFLRV9WQVJTVUJTVF9QUkU9IiR7RVhUUkFfUU1BS0VWQVJTX1BSRX0iCisJCWJibm90ZSAicW1ha2UgcHJldmFyIHN1YnN0aXR1dGlvbjogJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIKKwlmaQorCisJIyBIYWNrIC5wcm8gZmlsZXMgdG8gdXNlIE9FIHV0aWxpdGllcworCUxDT05WRVJUX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xDT05WRVJUfSkKKwlMUkVMRUFTRV9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MUkVMRUFTRX0pCisJTFVQREFURV9OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9MVVBEQVRFfSkKKwlYTUxQQVRURVJOU19OQU1FPSQoYmFzZW5hbWUgJHtPRV9RTUFLRV9YTUxQQVRURVJOU30pCisJZmluZCAtbmFtZSAnKi5wcm8nIFwKKwkgICAgIC1leGVjIHNlZCAtaSAtZSAic3xcKD1ccyouKlwpLyRMQ09OVkVSVF9OQU1FfFwxL2xjb252ZXJ0fGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRMUkVMRUFTRV9OQU1FfFwxL2xyZWxlYXNlfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRMVVBEQVRFX05BTUV8XDEvbHVwZGF0ZXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS8kWE1MUEFUVEVSTlNfTkFNRXxcMS94bWxwYXR0ZXJuc3xnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9sY29udmVydHxcMS8kTENPTlZFUlRfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9scmVsZWFzZXxcMS8kTFJFTEVBU0VfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS9sdXBkYXRlfFwxLyRMVVBEQVRFX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkveG1scGF0dGVybnN8XDEvJFhNTFBBVFRFUk5TX05BTUV8ZyIgXAorCSAgICAgICAgICAgICAgICAgICd7fScgJzsnCisKKyNiYm5vdGUgIkNhbGxpbmcgJyR7T0VfUU1BS0VfUU1BS0V9IC1tYWtlZmlsZSAtc3BlYyAke1FNQUtFU1BFQ30gLW8gTWFrZWZpbGUgJFFNQUtFX1ZBUlNVQlNUX1BSRSAkQUZURVIgJFBST0ZJTEVTICRRTUFLRV9WQVJTVUJTVF9QT1NUJyIKKwl1bnNldCBRTUFLRVNQRUMgfHwgdHJ1ZQorCSR7T0VfUU1BS0VfUU1BS0V9IC1tYWtlZmlsZSAtc3BlYyAke1FNQUtFU1BFQ30gLW8gTWFrZWZpbGUgJFFNQUtFX1ZBUlNVQlNUX1BSRSAkQUZURVIgJFBST0ZJTEVTICRRTUFLRV9WQVJTVUJTVF9QT1NUIHx8IGRpZSAiRXJyb3IgY2FsbGluZyAke09FX1FNQUtFX1FNQUtFfSBvbiAkUFJPRklMRVMiCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlCisKK2FkZHRhc2sgY29uZmlndXJlIGFmdGVyIGRvX3VucGFjayBkb19wYXRjaCBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xdDRlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiMTA1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9xdDRlLmJiY2xhc3MKQEAgLTAsMCArMSwyMSBAQAorUVQ0RURFUEVORFMgPz0gInF0NC1lbWJlZGRlZCAiCitERVBFTkRTX3ByZXBlbmQgPSAiJHtRVDRFREVQRU5EU30iCisKK2luaGVyaXQgcW1ha2UyCisKK1FUX0JBU0VfTkFNRSA9ICJxdDQtZW1iZWRkZWQiCitRVF9ESVJfTkFNRSA9ICJxdG9waWEiCitRVF9MSUJJTkZJWCA9ICJFIgorIyBvdmVycmlkZSB2YXJpYWJsZXMgc2V0IGJ5IHFtYWtlLWJhc2UgdG8gY29tcGlsZSBRdC9FbWJlZGRlZCBhcHBzCisjCitleHBvcnQgUU1BS0VTUEVDID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysiCitleHBvcnQgT0VfUU1BS0VfUVRfQ09ORklHID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpIgorZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVCA9ICIke1NUQUdJTkdfSU5DRElSfS8ke1FUX0RJUl9OQU1FfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJESVJfUVQgPSAiJHtTVEFHSU5HX0xJQkRJUn0iCitleHBvcnQgT0VfUU1BS0VfTElCU19RVCA9ICJxdCIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1gxMSA9ICIiCitleHBvcnQgT0VfUU1BS0VfRVhUUkFfTU9EVUxFUyA9ICJuZXR3b3JrIgorRVhUUkFfUU1BS0VWQVJTX1BSRSArPSAiIFFUX0xJQklORklYPSR7UVRfTElCSU5GSVh9ICIKKworIyBRdDQgdXNlcyBhdG9taWMgaW5zdHJ1Y3Rpb25zIG5vdCBzdXBwb3J0ZWQgaW4gdGh1bWIgbW9kZQorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcXQ0eDExLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcXQ0eDExLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwNmQzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcwpAQCAtMCwwICsxLDE0IEBACitRVDRERVBFTkRTID89ICJxdDQteDExICIKK0RFUEVORFNfcHJlcGVuZCA9ICIke1FUNERFUEVORFN9IgorCisjIGRlcGVuZHMgb24gcXQ0LXgxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTICs9ICJ4MTEiCisKK2luaGVyaXQgcW1ha2UyIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitRVF9CQVNFX05BTUUgPSAicXQ0IgorUVRfRElSX05BTUUgPSAicXQ0IgorUVRfTElCSU5GSVggPSAiIgorCisjIFF0NCB1c2VzIGF0b21pYyBpbnN0cnVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aHVtYiBtb2RlCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcmVjaXBlX3Nhbml0eS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMDRlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcmVjaXBlX3Nhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsMTY3IEBACitkZWYgX19ub3RlKG1zZywgZCk6CisgICAgYmIubm90ZSgiJXM6IHJlY2lwZV9zYW5pdHk6ICVzIiAlIChkLmdldFZhcigiUCIsIFRydWUpLCBtc2cpKQorCitfX3JlY2lwZV9zYW5pdHlfYmFkcnVudGltZXZhcnMgPSAiUkRFUEVORFMgUlBST1ZJREVTIFJSRUNPTU1FTkRTIFJDT05GTElDVFMiCitkZWYgYmFkX3J1bnRpbWVfdmFycyhjZmdkYXRhLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICByZXR1cm4KKworICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9iYWRydW50aW1ldmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgaWYgdmFsIGFuZCB2YWwgIT0gY2ZnZGF0YS5nZXQodmFyKToKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlICVzXyR7UE59IiAlICh2YXIsIHZhciksIGQpCisKK19fcmVjaXBlX3Nhbml0eV9yZXF2YXJzID0gIkRFU0NSSVBUSU9OIgorX19yZWNpcGVfc2FuaXR5X3JlcWRpZmZ2YXJzID0gIiIKK2RlZiByZXFfdmFycyhjZmdkYXRhLCBkKToKKyAgICBmb3IgdmFyIGluIGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVxdmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBkLmdldFZhcih2YXIsIDApOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgc2V0IiAlIHZhciwgZCkKKworICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZXFkaWZmdmFycyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHZhciwgMCkKKyAgICAgICAgY2ZndmFsID0gY2ZnZGF0YS5nZXQodmFyKQorCisgICAgICAgIGlmIG5vdCB2YWw6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBzZXQiICUgdmFyLCBkKQorICAgICAgICBlbGlmIHZhbCA9PSBjZmd2YWw6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBkZWZpbmVkIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGRlZmF1bHQgKCVzKSIgJSAodmFyLCBjZmd2YWwpLCBkKQorCitkZWYgdmFyX3JlbmFtZXNfb3ZlcndyaXRlKGNmZ2RhdGEsIGQpOgorICAgIHJlbmFtZXMgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCAwKQorICAgIGlmIHJlbmFtZXM6CisgICAgICAgIGZvciAoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSkgaW4gcmVuYW1lczoKKyAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlIGFuZCBvbGR2YWx1ZSAhPSBjZmdkYXRhLmdldChuZXdrZXkpOgorICAgICAgICAgICAgICAgIF9fbm90ZSgicmVuYW1lIG9mIHZhcmlhYmxlICclcycgdG8gJyVzJyBvdmVyd3JvdGUgZXhpc3RpbmcgdmFsdWUgJyVzJyB3aXRoICclcycuIiAlIChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSwgZCkKKworZGVmIGluY29ycmVjdF9ub25lbXB0eV9QQUNLQUdFUyhjZmdkYXRhLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBcCisgICAgICAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICBpZiBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKK2RlZiBjYW5fdXNlX2F1dG90b29sc19iYXNlKGNmZ2RhdGEsIGQpOgorICAgIGNmZyA9IGQuZ2V0VmFyKCJkb19jb25maWd1cmUiLCBUcnVlKQorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJhdXRvdG9vbHMiLCBkKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBmb3IgaSBpbiBbImF1dG9yZWNvbmYiXSArIFsiJXNfZG9fY29uZmlndXJlIiAlIGNscyBmb3IgY2xzIGluIFsiZ25vbWViYXNlIiwgImdub21lIiwgImUiLCAiYXV0b3Rvb2xzIiwgImVmbCIsICJncGVwaG9uZSIsICJvcGVubW9rbyIsICJvcGVubW9rbzIiLCAieGZjZSIsICJ4bGlicyJdXToKKyAgICAgICAgaWYgY2ZnLmZpbmQoaSkgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGZvciBjbHNmaWxlIGluIGQuZ2V0VmFyKCJfX2luaGVyaXRfY2FjaGUiLCAwKToKKyAgICAgICAgKGJhc2UsIF8pID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGNsc2ZpbGUpKQorICAgICAgICBpZiBjZmcuZmluZCgiJXNfZG9fY29uZmlndXJlIiAlIGJhc2UpICE9IC0xOgorICAgICAgICAgICAgX19ub3RlKCJhdXRvdG9vbHNfYmFzZSB1c2FnZSBuZWVkcyB2ZXJpZmljYXRpb24sIHNwb3R0ZWQgJXNfZG9fY29uZmlndXJlIiAlIGJhc2UsIGQpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgY2FuX2RlbGV0ZV9GSUxFU1BBVEgoY2ZnZGF0YSwgZCk6CisgICAgZXhwZWN0ZWQgPSBjZmdkYXRhLmdldCgiRklMRVNQQVRIIikKKyAgICBleHBlY3RlZHBhdGhzID0gZC5leHBhbmQoZXhwZWN0ZWQpCisgICAgdW5leHBhbmRlZCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCAwKQorICAgIGZpbGVzcGF0aCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZmlsZXNwYXRoID0gW29zLnBhdGgubm9ybXBhdGgoZikgZm9yIGYgaW4gZmlsZXNwYXRoIGlmIG9zLnBhdGguZXhpc3RzKGYpXQorICAgIGZvciBmcCBpbiBmaWxlc3BhdGg6CisgICAgICAgIGlmIG5vdCBmcCBpbiBleHBlY3RlZHBhdGhzOgorICAgICAgICAgICAgIyBfX25vdGUoIlBhdGggJXMgaW4gRklMRVNQQVRIIG5vdCBpbiB0aGUgZXhwZWN0ZWQgcGF0aHMgJXMiICUKKyAgICAgICAgICAgICMgKGZwLCBleHBlY3RlZHBhdGhzKSwgZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBleHBlY3RlZCAhPSB1bmV4cGFuZGVkCisKK2RlZiBjYW5fZGVsZXRlX0ZJTEVTRElSKGNmZ2RhdGEsIGQpOgorICAgIGV4cGVjdGVkID0gY2ZnZGF0YS5nZXQoIkZJTEVTRElSIikKKyAgICAjZXhwZWN0ZWQgPSAiJHtAYmIudXRpbHMud2hpY2goZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpLCAnLicpfSIKKyAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoIkZJTEVTRElSIiwgMCkKKyAgICBpZiB1bmV4cGFuZGVkIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZXhwYW5kZWQgPSBvcy5wYXRoLm5vcm1wYXRoKGQuZ2V0VmFyKCJGSUxFU0RJUiIsIFRydWUpKQorICAgIGZpbGVzcGF0aCA9IGQuZ2V0VmFyKCJGSUxFU1BBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgZmlsZXNwYXRoID0gW29zLnBhdGgubm9ybXBhdGgoZikgZm9yIGYgaW4gZmlsZXNwYXRoIGlmIG9zLnBhdGguZXhpc3RzKGYpXQorCisgICAgcmV0dXJuIHVuZXhwYW5kZWQgIT0gZXhwZWN0ZWQgYW5kIFwKKyAgICAgICAgICAgb3MucGF0aC5leGlzdHMoZXhwYW5kZWQpIGFuZCBcCisgICAgICAgICAgIChleHBhbmRlZCBpbiBmaWxlc3BhdGggb3IKKyAgICAgICAgICAgIGV4cGFuZGVkID09IGQuZXhwYW5kKGV4cGVjdGVkKSkKKworZGVmIGNhbl9kZWxldGVfb3RoZXJzKHAsIGNmZ2RhdGEsIGQpOgorICAgIGZvciBrIGluIFsiUyIsICJQViIsICJQTiIsICJERVNDUklQVElPTiIsICJERVBFTkRTIiwKKyAgICAgICAgICAgICAgIlNFQ1RJT04iLCAiUEFDS0FHRVMiLCAiRVhUUkFfT0VDT05GIiwgIkVYVFJBX09FTUFLRSJdOgorICAgICNmb3IgayBpbiBjZmdkYXRhOgorICAgICAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoaywgMCkKKyAgICAgICAgY2ZndW5leHBhbmRlZCA9IGNmZ2RhdGEuZ2V0KGspCisgICAgICAgIGlmIG5vdCBjZmd1bmV4cGFuZGVkOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBhbmRlZCA9IGQuZ2V0VmFyKGssIFRydWUpCisgICAgICAgICAgICBjZmdleHBhbmRlZCA9IGQuZXhwYW5kKGNmZ3VuZXhwYW5kZWQpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5QYXJhbWV0ZXJFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdW5leHBhbmRlZCAhPSBjZmd1bmV4cGFuZGVkIGFuZCBcCisgICAgICAgICAgIGNmZ2V4cGFuZGVkID09IGV4cGFuZGVkOgorICAgICAgICAgICBfX25vdGUoImNhbmRpZGF0ZSBmb3IgcmVtb3ZhbCBvZiAlcyIgJSBrLCBkKQorICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IHJlY2lwZV9zYW5pdHk6ICAgY2ZnJ3MgJyVzJyBhbmQgZCdzICclcycgYm90aCBleHBhbmQgdG8gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgKHAsIGNmZ3VuZXhwYW5kZWQsIHVuZXhwYW5kZWQsIGV4cGFuZGVkKSkKKworcHl0aG9uIGRvX3JlY2lwZV9zYW5pdHkgKCkgeworICAgIHAgPSBkLmdldFZhcigiUCIsIFRydWUpCisgICAgcCA9ICIlcyAlcyAlcyIgJSAoZC5nZXRWYXIoIlBOIiwgVHJ1ZSksIGQuZ2V0VmFyKCJQViIsIFRydWUpLCBkLmdldFZhcigiUFIiLCBUcnVlKSkKKworICAgIHNhbml0eWNoZWNrcyA9IFsKKyAgICAgICAgKGNhbl9kZWxldGVfRklMRVNESVIsICJjYW5kaWRhdGUgZm9yIHJlbW92YWwgb2YgRklMRVNESVIiKSwKKyAgICAgICAgKGNhbl9kZWxldGVfRklMRVNQQVRILCAiY2FuZGlkYXRlIGZvciByZW1vdmFsIG9mIEZJTEVTUEFUSCIpLAorICAgICAgICAjKGNhbl91c2VfYXV0b3Rvb2xzX2Jhc2UsICJjYW5kaWRhdGUgZm9yIHVzZSBvZiBhdXRvdG9vbHNfYmFzZSIpLAorICAgICAgICAoaW5jb3JyZWN0X25vbmVtcHR5X1BBQ0tBR0VTLCAibmF0aXZlIG9yIGNyb3NzIHJlY2lwZSB3aXRoIG5vbi1lbXB0eSBQQUNLQUdFUyIpLAorICAgIF0KKyAgICBjZmdkYXRhID0gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgMCkKKworICAgIGZvciAoZnVuYywgbXNnKSBpbiBzYW5pdHljaGVja3M6CisgICAgICAgIGlmIGZ1bmMoY2ZnZGF0YSwgZCk6CisgICAgICAgICAgICBfX25vdGUobXNnLCBkKQorCisgICAgY2FuX2RlbGV0ZV9vdGhlcnMocCwgY2ZnZGF0YSwgZCkKKyAgICB2YXJfcmVuYW1lc19vdmVyd3JpdGUoY2ZnZGF0YSwgZCkKKyAgICByZXFfdmFycyhjZmdkYXRhLCBkKQorICAgIGJhZF9ydW50aW1lX3ZhcnMoY2ZnZGF0YSwgZCkKK30KK2RvX3JlY2lwZV9zYW5pdHlbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcmVjaXBlX3Nhbml0eQorCitkb19yZWNpcGVfc2FuaXR5X2FsbFtub3N0YW1wXSA9ICIxIgorZG9fcmVjaXBlX3Nhbml0eV9hbGxbcmVjcmRlcHRhc2tdID0gImRvX3JlY2lwZV9zYW5pdHlfYWxsIGRvX3JlY2lwZV9zYW5pdHkiCitkb19yZWNpcGVfc2FuaXR5X2FsbCAoKSB7CisgICAgOgorfQorYWRkdGFzayByZWNpcGVfc2FuaXR5X2FsbCBhZnRlciBkb19yZWNpcGVfc2FuaXR5CisKK3B5dGhvbiByZWNpcGVfc2FuaXR5X2VoICgpIHsKKyAgICBkID0gZS5kYXRhCisKKyAgICBjZmdkYXRhID0ge30KKyAgICBmb3IgayBpbiBkLmtleXMoKToKKyAgICAjZm9yIGsgaW4gWyJTIiwgIlBSIiwgIlBWIiwgIlBOIiwgIkRFU0NSSVBUSU9OIiwgIkxJQ0VOU0UiLCAiREVQRU5EUyIsCisgICAgIyAgICAgICAgICAiU0VDVElPTiJdOgorICAgICAgICBjZmdkYXRhW2tdID0gZC5nZXRWYXIoaywgMCkKKworICAgIGQuc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIGNmZ2RhdGEpCisgICAgI2Quc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfY2ZnZGF0YSIsIGQpCisKKyAgICAjIFNpY2ssIHZlcnkgc2ljay4uCisgICAgZnJvbSBiYi5kYXRhX3NtYXJ0IGltcG9ydCBEYXRhU21hcnQKKyAgICBvbGQgPSBEYXRhU21hcnQucmVuYW1lVmFyCisgICAgZGVmIG15cmVuYW1lKHNlbGYsIGtleSwgbmV3a2V5KToKKyAgICAgICAgb2xkdmFsdWUgPSBzZWxmLmdldFZhcihuZXdrZXksIDApCisgICAgICAgIG9sZChzZWxmLCBrZXksIG5ld2tleSkKKyAgICAgICAgbmV3dmFsdWUgPSBzZWxmLmdldFZhcihuZXdrZXksIDApCisgICAgICAgIGlmIG9sZHZhbHVlOgorICAgICAgICAgICAgcmVuYW1lcyA9IHNlbGYuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIDApIG9yIHNldCgpCisgICAgICAgICAgICByZW5hbWVzLmFkZCgoa2V5LCBuZXdrZXksIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLnNldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlbmFtZXMiLCByZW5hbWVzKQorICAgIERhdGFTbWFydC5yZW5hbWVWYXIgPSBteXJlbmFtZQorfQorYWRkaGFuZGxlciByZWNpcGVfc2FuaXR5X2VoCityZWNpcGVfc2FuaXR5X2VoW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2E5OTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3JlbG9jYXRhYmxlLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACitpbmhlcml0IGNocnBhdGgKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJyZWxvY2F0YWJsZV9iaW5hcmllc19wcmVwcm9jZXNzIgorCitweXRob24gcmVsb2NhdGFibGVfYmluYXJpZXNfcHJlcHJvY2VzcygpIHsKKyAgICBycGF0aF9yZXBsYWNlKGQuZXhwYW5kKCcke1NZU1JPT1RfREVTVERJUn0nKSwgZCkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yZXBvcnQtZXJyb3IuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDBjMjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCkBAIC0wLDAgKzEsOTIgQEAKKyMKKyMgQ29sbGVjdHMgZGVidWcgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gY3JlYXRlIGVycm9yIHJlcG9ydCBmaWxlcy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogQW5kcmVlYSBCcmFuZHVzYSBQcm9jYSA8YW5kcmVlYS5iLnByb2NhQGludGVsLmNvbT4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLCBzZWUgQ09QWUlORy5NSVQgZm9yIGRldGFpbHMKKworRVJSX1JFUE9SVF9ESVIgPz0gIiR7TE9HX0RJUn0vZXJyb3ItcmVwb3J0IgorCitkZWYgZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKToKKyAgICBsb2dwYXRoID0gZS5kYXRhLmdldFZhcignRVJSX1JFUE9SVF9ESVInLCBUcnVlKQorICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKKyAgICB3aXRoIG9wZW4oZGF0YWZpbGUpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBuZXdkYXRhLCBmaWxlKToKKyAgICBpbXBvcnQganNvbgorICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgZmlsZSkKKyAgICB3aXRoIG9wZW4oZGF0YWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAganNvbi5kdW1wKG5ld2RhdGEsIGYsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKyAgICByZXR1cm4gZGF0YWZpbGUKKworcHl0aG9uIGVycm9ycmVwb3J0X2hhbmRsZXIgKCkgeworICAgICAgICBpbXBvcnQganNvbgorCisgICAgICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgICAgIGRhdGFmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJlcnJvci1yZXBvcnQudHh0IikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobG9ncGF0aCkKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgbWFjaGluZSA9IGUuZGF0YS5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnbWFjaGluZSddID0gbWFjaGluZQorICAgICAgICAgICAgZGF0YVsnYnVpbGRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJCVUlMRF9TWVMiLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnbmF0aXZlbHNiJ10gPSBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsnZGlzdHJvJ10gPSBlLmRhdGEuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKQorICAgICAgICAgICAgZGF0YVsndGFyZ2V0X3N5cyddID0gZS5kYXRhLmdldFZhcigiVEFSR0VUX1NZUyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydmYWlsdXJlcyddID0gW10KKyAgICAgICAgICAgIGRhdGFbJ2NvbXBvbmVudCddID0gZS5nZXRQa2dzKClbMF0KKyAgICAgICAgICAgIGRhdGFbJ2JyYW5jaF9jb21taXQnXSA9IGJhc2VfZGV0ZWN0X2JyYW5jaChlLmRhdGEpICsgIjogIiArIGJhc2VfZGV0ZWN0X3JldmlzaW9uKGUuZGF0YSkKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBkYXRhLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICAgICAgdGFzayA9IGUudGFzaworICAgICAgICAgICAgdGFza2RhdGE9e30KKyAgICAgICAgICAgIGxvZyA9IGUuZGF0YS5nZXRWYXIoJ0JCX0xPR0ZJTEUnLCBUcnVlKQorICAgICAgICAgICAgdGFza2RhdGFbJ3BhY2thZ2UnXSA9IGUuZGF0YS5leHBhbmQoIiR7UEZ9IikKKyAgICAgICAgICAgIHRhc2tkYXRhWyd0YXNrJ10gPSB0YXNrCisgICAgICAgICAgICBpZiBsb2c6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2dGaWxlID0gb3Blbihsb2csICdyJykKKyAgICAgICAgICAgICAgICAgICAgbG9nZGF0YSA9IGxvZ0ZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgICAgICBsb2dGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGxvZ2RhdGEgPSAiVW5hYmxlIHRvIHJlYWQgbG9nIGZpbGUiCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICJObyBMb2ciCisKKyAgICAgICAgICAgICMgc2VydmVyIHdpbGwgcmVmdXNlIGZhaWx1cmVzIGxvbmdlciB0aGFuIHBhcmFtIHNwZWNpZmllZCBpbiBwcm9qZWN0LnNldHRpbmdzLnB5CisgICAgICAgICAgICAjIE1BWF9VUExPQURfU0laRSA9ICI1MjQyODgwIgorICAgICAgICAgICAgIyB1c2UgbG93ZXIgdmFsdWUsIGJlY2F1c2UgNjUwIGNoYXJzIGNhbiBiZSBzcGVudCBpbiB0YXNrLCBwYWNrYWdlLCB2ZXJzaW9uCisgICAgICAgICAgICBtYXhfbG9nZGF0YV9zaXplID0gNTI0MjAwMAorICAgICAgICAgICAgIyB1cGxvYWQgbGFzdCBtYXhfbG9nZGF0YV9zaXplIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGlmIGxlbihsb2dkYXRhKSA+IG1heF9sb2dkYXRhX3NpemU6CisgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICIuLi4iICsgbG9nZGF0YVstbWF4X2xvZ2RhdGFfc2l6ZTpdCisgICAgICAgICAgICB0YXNrZGF0YVsnbG9nJ10gPSBsb2dkYXRhCisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGVycm9ycmVwb3J0X2dldGRhdGEoZSkpCisgICAgICAgICAgICBqc29uZGF0YVsnZmFpbHVyZXMnXS5hcHBlbmQodGFza2RhdGEpCisgICAgICAgICAgICBlcnJvcnJlcG9ydF9zYXZlZGF0YShlLCBqc29uZGF0YSwgImVycm9yLXJlcG9ydC50eHQiKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZGF0YWZpbGUgKyAnLmxvY2snKQorICAgICAgICAgICAganNvbmRhdGEgPSBqc29uLmxvYWRzKGVycm9ycmVwb3J0X2dldGRhdGEoZSkpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisgICAgICAgICAgICBmYWlsdXJlcyA9IGpzb25kYXRhWydmYWlsdXJlcyddCisgICAgICAgICAgICBpZihsZW4oZmFpbHVyZXMpID4gMCk6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSAiZXJyb3JfcmVwb3J0XyIgKyBlLmRhdGEuZ2V0VmFyKCJCVUlMRE5BTUUiLCBUcnVlKSsiLnR4dCIKKyAgICAgICAgICAgICAgICBkYXRhZmlsZSA9IGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGpzb25kYXRhLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJUaGUgZXJyb3JzIGZvciB0aGlzIGJ1aWxkIGFyZSBzdG9yZWQgaW4gJXNcbllvdSBjYW4gc2VuZCB0aGUgZXJyb3JzIHRvIGEgcmVwb3J0cyBzZXJ2ZXIgYnkgcnVubmluZzpcbiAgc2VuZC1lcnJvci1yZXBvcnQgJXMgWy1zIHNlcnZlcl0iICUgKGRhdGFmaWxlLCBkYXRhZmlsZSkpCisgICAgICAgICAgICAgICAgYmIubm90ZSgiVGhlIGNvbnRlbnRzIG9mIHRoZXNlIGxvZ3Mgd2lsbCBiZSBwb3N0ZWQgaW4gcHVibGljIGlmIHlvdSB1c2UgdGhlIGFib3ZlIGNvbW1hbmQgd2l0aCB0aGUgZGVmYXVsdCBzZXJ2ZXIuIFBsZWFzZSBlbnN1cmUgeW91IHJlbW92ZSBhbnkgaWRlbnRpZnlpbmcgb3IgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gd2hlbiBwcm9tcHRlZCBiZWZvcmUgc2VuZGluZy4iKQorfQorCithZGRoYW5kbGVyIGVycm9ycmVwb3J0X2hhbmRsZXIKK2Vycm9ycmVwb3J0X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm1fd29yay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOWVmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm1fd29yay5iYmNsYXNzCkBAIC0wLDAgKzEsMTIwIEBACisjCisjIFJlbW92ZXMgc291cmNlIGFmdGVyIGJ1aWxkCisjCisjIFRvIHVzZSBpdCBhZGQgdGhhdCBsaW5lIHRvIGNvbmYvbG9jYWwuY29uZjoKKyMKKyMgSU5IRVJJVCArPSAicm1fd29yayIKKyMKKyMgVG8gaW5oaWJpdCBybV93b3JrIGZvciBzb21lIHJlY2lwZXMsIHNwZWNpZnkgdGhlbSBpbiBSTV9XT1JLX0VYQ0xVREUuCisjIEZvciBleGFtcGxlLCBpbiBjb25mL2xvY2FsLmNvbmY6CisjCisjIFJNX1dPUktfRVhDTFVERSArPSAiaWN1LW5hdGl2ZSBpY3UgYnVzeWJveCIKKyMKKworIyBVc2UgdGhlIGNvbXBsZXRpb24gc2NoZWR1bGVyIGJ5IGRlZmF1bHQgd2hlbiBybV93b3JrIGlzIGFjdGl2ZQorIyB0byB0cnkgYW5kIHJlZHVjZSBkaXNrIHVzYWdlCitCQl9TQ0hFRFVMRVIgPz0gImNvbXBsZXRpb24iCisKK1JNV09SS19PUklHX1RBU0sgOj0gIiR7QkJfREVGQVVMVF9UQVNLfSIKK0JCX0RFRkFVTFRfVEFTSyA9ICJybV93b3JrX2FsbCIKKworZG9fcm1fd29yayAoKSB7CisgICAgIyBJZiB0aGUgcmVjaXBlIG5hbWUgaXMgaW4gdGhlIFJNX1dPUktfRVhDTFVERSwgc2tpcCB0aGUgcmVjaXBlLgorICAgIGZvciBwIGluICR7Uk1fV09SS19FWENMVURFfTsgZG8KKyAgICAgICAgaWYgWyAiJHAiID0gIiR7UE59IiBdOyB0aGVuCisgICAgICAgICAgICBiYm5vdGUgInJtX3dvcms6IFNraXBwaW5nICR7UE59IHNpbmNlIGl0IGlzIGluIFJNX1dPUktfRVhDTFVERSIKKyAgICAgICAgICAgIGV4aXQgMAorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGNkICR7V09SS0RJUn0KKyAgICBmb3IgZGlyIGluICoKKyAgICBkbworICAgICAgICAjIFJldGFpbiBvbmx5IGxvZ3MgYW5kIG90aGVyIGZpbGVzIGluIHRlbXAsIHNhZmVseSBpZ25vcmUKKyAgICAgICAgIyBmYWlsdXJlcyBvZiByZW1vdmluZyBwc2V1ZG8gZm9sZXJzIG9uIE5GUzIvMyBzZXJ2ZXIuCisgICAgICAgIGlmIFsgJGRpciA9ICdwc2V1ZG8nIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1yZiAkZGlyIDI+IC9kZXYvbnVsbCB8fCB0cnVlCisgICAgICAgIGVsaWYgWyAkZGlyICE9ICd0ZW1wJyBdOyB0aGVuCisgICAgICAgICAgICBybSAtcmYgJGRpcgorICAgICAgICBmaQorICAgIGRvbmUKKworICAgICMgTmVlZCB0byBhZGQgcHNldWRvIGJhY2sgb3Igc3Vic3FldWVudCB3b3JrIGluIHRoaXMgd29ya2RpcgorICAgICMgbWlnaHQgZmFpbCBzaW5jZSBzZXRzY2VuZSBtYXkgbm90IHJlcnVuIHRvIHJlY3JlYXRlIGl0CisgICAgbWtkaXIgLXAgJHtXT1JLRElSfS9wc2V1ZG8vCisKKyAgICAjIENoYW5nZSBub3JtYWwgc3RhbXBzIGludG8gc2V0c2NlbmUgc3RhbXBzIGFzIHRoZXkgYmV0dGVyIHJlZmxlY3QgdGhlCisgICAgIyBmYWN0IFdPUktESVIgaXMgbm93IGVtcHR5CisgICAgIyBBbHNvIGxlYXZlIG5vZXhlYyBzdGFtcHMgc2luY2Ugc2V0c2NlbmUgc3RhbXBzIGRvbid0IGNvdmVyIHRoZW0KKyAgICBjZCBgZGlybmFtZSAke1NUQU1QfWAKKyAgICBmb3IgaSBpbiBgYmFzZW5hbWUgJHtTVEFNUH1gKgorICAgIGRvCisgICAgICAgIGZvciBqIGluICR7U1NUQVRFVEFTS1N9IGRvX3NoYXJlZF93b3JrZGlyCisgICAgICAgIGRvCisgICAgICAgICAgICBjYXNlICRpIGluCisgICAgICAgICAgICAqZG9fc2V0c2NlbmUqKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpzaWdkYXRhKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKmRvX3BhY2thZ2Vfd3JpdGUqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqZG9fYnVpbGQqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAjIFdlIHJlbW92ZSBkb19wYWNrYWdlIGVudGlyZWx5LCBpbmNsdWRpbmcgYW55CisgICAgICAgICAgICAjIHNzdGF0ZSB2ZXJzaW9uIHNpbmNlIG90aGVyd2lzZSB3ZSdkIG5lZWQgdG8gbGVhdmUgJ3BsYWluZGlycycgYXJvdW5kCisgICAgICAgICAgICAjIHN1Y2ggYXMgJ3BhY2thZ2VzJyBhbmQgJ3BhY2thZ2VzLXNwbGl0JyBhbmQgdGhlc2UgY2FuIGJlIGxhcmdlLiBObyBlbmQKKyAgICAgICAgICAgICMgb2YgY2hhaW4gdGFza3MgZGVwZW5kIGRpcmVjdGx5IG9uIGRvX3BhY2thZ2UgYW55bW9yZS4KKyAgICAgICAgICAgICpkb19wYWNrYWdlfCpkb19wYWNrYWdlLip8KmRvX3BhY2thZ2Vfc2V0c2NlbmUuKikKKyAgICAgICAgICAgICAgICBybSAtZiAkaTsKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKl9zZXRzY2VuZSopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICokanwqJGouKikKKyAgICAgICAgICAgICAgICBtdiAkaSBgZWNobyAkaSB8IHNlZCAtZSAicyMke2p9IyR7an1fc2V0c2NlbmUjImAKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKKyAgICAgICAgcm0gLWYgJGkKKyAgICBkb25lCit9CithZGR0YXNrIHJtX3dvcmsgYWZ0ZXIgZG9fJHtSTVdPUktfT1JJR19UQVNLfQorCitkb19ybV93b3JrX2FsbCAoKSB7CisgICAgOgorfQorZG9fcm1fd29ya19hbGxbcmVjcmRlcHRhc2tdID0gImRvX3JtX3dvcmsiCithZGR0YXNrIHJtX3dvcmtfYWxsIGFmdGVyIGRvX3JtX3dvcmsKKworZG9fcG9wdWxhdGVfc2RrW3Bvc3RmdW5jc10gKz0gInJtX3dvcmtfcG9wdWxhdGVzZGsiCitybV93b3JrX3BvcHVsYXRlc2RrICgpIHsKKyAgICA6Cit9CitybV93b3JrX3BvcHVsYXRlc2RrW2NsZWFuZGlyc10gPSAiJHtXT1JLRElSfS9zZGsiCisKK2RvX3Jvb3Rmc1twb3N0ZnVuY3NdICs9ICJybV93b3JrX3Jvb3RmcyIKK3JtX3dvcmtfcm9vdGZzICgpIHsKKyAgICA6Cit9CitybV93b3JrX3Jvb3Rmc1tjbGVhbmRpcnNdID0gIiR7V09SS0RJUn0vcm9vdGZzIgorCitweXRob24gKCkgeworICAgICMgSWYgdGhlIHJlY2lwZSBuYW1lIGlzIGluIHRoZSBSTV9XT1JLX0VYQ0xVREUsIHNraXAgdGhlIHJlY2lwZS4KKyAgICBleGNsdWRlcyA9IChkLmdldFZhcigiUk1fV09SS19FWENMVURFIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgcG4gaW4gZXhjbHVkZXM6CisgICAgICAgIGQuZGVsVmFyRmxhZygncm1fd29ya19yb290ZnMnLCAnY2xlYW5kaXJzJykKKyAgICAgICAgZC5kZWxWYXJGbGFnKCdybV93b3JrX3BvcHVsYXRlc2RrJywgJ2NsZWFuZGlycycpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3Jvb3Rmc19kZWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTFiNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Jvb3Rmc19kZWIuYmJjbGFzcwpAQCAtMCwwICsxLDM5IEBACisjCisjIENvcHlyaWdodCAyMDA2LTIwMDcgT3BlbmVkaGFuZCBMdGQuCisjCisKK1JPT1RGU19QS0dNQU5BR0UgPSAiZHBrZyBhcHQiCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCAgPSAicnVuLXBvc3RpbnN0cyIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGFwdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiZHBrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhcHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYnppcDItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKK3Jvb3Rmc19kZWJfZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKKworZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9ERUJ9L2RlYi5sb2NrIgorZG9fcG9wdWxhdGVfc2RrW2xvY2tmaWxlc10gKz0gIiR7REVQTE9ZX0RJUl9ERUJ9L2RlYi5sb2NrIgorCitweXRob24gcm9vdGZzX2RlYl9iYWRfcmVjb21tZW5kYXRpb25zKCkgeworICAgIGlmIGQuZ2V0VmFyKCJCQURfUkVDT01NRU5EQVRJT05TIiwgVHJ1ZSk6CisgICAgICAgIGJiLndhcm4oIkRlYmlhbiBwYWNrYWdlIGluc3RhbGwgZG9lcyBub3Qgc3VwcG9ydCBCQURfUkVDT01NRU5EQVRJT05TIikKK30KK2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gInJvb3Rmc19kZWJfYmFkX3JlY29tbWVuZGF0aW9ucyIKKworREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworb3BrZ2xpYmRpciA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9vcGtnIgorCitweXRob24gKCkgeworICAgICMgTWFwIFRBUkdFVF9BUkNIIHRvIERlYmlhbidzIGlkZWFzIGFib3V0IGFyY2hpdGVjdHVyZXMKKyAgICBkYXJjaCA9IGQuZ2V0VmFyKCdTREtfQVJDSCcsIFRydWUpCisgICAgaWYgZGFyY2ggaW4gWyJ4ODYiLCAiaTQ4NiIsICJpNTg2IiwgImk2ODYiLCAicGVudGl1bSJdOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdpMzg2JykKKyAgICBlbGlmIGRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdhbWQ2NCcpCisgICAgZWxpZiBkYXJjaCA9PSAiYXJtIjoKKyAgICAgICAgIGQuc2V0VmFyKCdERUJfU0RLX0FSQ0gnLCAnYXJtZWwnKQorfQorCisjIFRoaXMgd2lsbCBvZiBjb3Vyc2Ugb25seSB3b3JrIGFmdGVyIHJvb3Rmc19kZWJfZG9fcm9vdGZzIG9yIHBvcHVsYXRlX3Nka19kZWIgaGFzIGJlZW4gY2FsbGVkCitEUEtHX1FVRVJZX0NPTU1BTkQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2Rwa2ctcXVlcnkgLS1hZG1pbmRpcj0kSU5TVEFMTF9ST09URlNfREVCL3Zhci9saWIvZHBrZyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX2lway5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTQ0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX2lway5iYmNsYXNzCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ3JlYXRlcyBhIHJvb3QgZmlsZXN5c3RlbSBvdXQgb2YgSVBLcworIworIyBUaGlzIHJvb3RmcyBjYW4gYmUgbW91bnRlZCB2aWEgcm9vdC1uZnMgb3IgaXQgY2FuIGJlIHB1dCBpbnRvIGFuIGNyYW1mcy9qZmZzIGV0Yy4KKyMgU2VlIGltYWdlLmJiY2xhc3MgZm9yIGEgdXNhZ2Ugb2YgdGhpcy4KKyMKKworRVhUUkFPUEtHQ09ORklHID89ICIiCitST09URlNfUEtHTUFOQUdFID0gIm9wa2cgJHtFWFRSQU9QS0dDT05GSUd9IgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgID0gInJ1bi1wb3N0aW5zdHMiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAib3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBvcGtnLXV0aWxzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX2lwayIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCityb290ZnNfaXBrX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKKworZG9fcm9vdGZzW2xvY2tmaWxlc10gKz0gIiR7V09SS0RJUn0vaXBrLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtXT1JLRElSfS9pcGsubG9jayIKKworT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUyA9ICIiCisKK09QS0dMSUJESVIgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIiCisKK01VTFRJTElCUkVfQUxMT1dfUkVQID0gIiR7T1BLR0xJQkRJUn0vb3BrZ3wvdXNyL2xpYi9vcGtnIgorCitweXRob24gKCkgeworCisgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BhY2thZ2Vfd3JpdGVfaXBrIiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fZGVwbG95IiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcG9wdWxhdGVfc3lzcm9vdCIsICIiKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsIGZsYWdzKQorICAgICAgICBkLnNldFZhcignT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgIiIpCisgICAgICAgIGQuc2V0VmFyKCdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJycpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3Jvb3Rmc19ycG0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODVkMDAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Jvb3Rmc19ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDQ3IEBACisjCisjIENyZWF0ZXMgYSByb290IGZpbGVzeXN0ZW0gb3V0IG9mIHJwbSBwYWNrYWdlcworIworCitST09URlNfUEtHTUFOQUdFID0gInJwbSBzbWFydHBtIgorUk9PVEZTX1BLR01BTkFHRV9CT09UU1RSQVAgPSAicnVuLXBvc3RpbnN0cyIKKworIyBBZGQgNTBNZWcgb2YgZXh0cmEgc3BhY2UgZm9yIFNtYXJ0CitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJQQUNLQUdFX0lOU1RBTEwiLCAic21hcnRwbSIsICIgKyA1MTIwMCIsICIiICxkKX0iCisKKyMgU21hcnQgaXMgcHl0aG9uIGJhc2VkLCBzbyBiZSBzdXJlIHB5dGhvbi1uYXRpdmUgaXMgYXZhaWxhYmxlIHRvIHVzLgorRVhUUkFOQVRJVkVQQVRIICs9ICJweXRob24tbmF0aXZlIgorCisjIG9wa2cgaXMgbmVlZGVkIGZvciB1cGRhdGUtYWx0ZXJuYXRpdmVzCitSUE1ST09URlNERVBFTkRTID0gInJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgcnBtcmVzb2x2ZS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgcHl0aG9uLXNtYXJ0cG0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIGNyZWF0ZXJlcG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgIG9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiJHtSUE1ST09URlNERVBFTkRTfSIKK2RvX3BvcHVsYXRlX3Nka1tkZXBlbmRzXSArPSAiJHtSUE1ST09URlNERVBFTkRTfSIKKworZG9fcm9vdGZzW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9ycG0iCityb290ZnNfcnBtX2RvX3Jvb3Rmc1t2YXJkZXBzZXhjbHVkZV0gKz0gIkJVSUxETkFNRSIKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiUEFDS0FHRV9GRUVEX1VSSVMiCisKKyMgUlBNIGRvZXNuJ3Qgd29yayB3aXRoIG11bHRpcGxlIHJvb3RmcyBnZW5lcmF0aW9uIGF0IG9uY2UgZHVlIHRvIGNvbGxpc2lvbnMgaW4gdGhlIHVzZSBvZiBmaWxlcyAKKyMgaW4gJHtERVBMT1lfRElSX1JQTX0uIFRoaXMgY2FuIGJlIHJlbW92ZWQgaWYgcGFja2FnZV91cGRhdGVfaW5kZXhfcnBtIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5Citkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX1JQTX0vcnBtLmxvY2siCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSk6CisgICAgICAgIGZsYWdzID0gZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAncmVjcmRlcHRhc2snKQorICAgICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoImRvX3BhY2thZ2Vfd3JpdGVfcnBtIiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fZGVwbG95IiwgIiIpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcG9wdWxhdGVfc3lzcm9vdCIsICIiKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycsIGZsYWdzKQorICAgICAgICBkLnNldFZhcignUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnJykKKyAgICAgICAgZC5zZXRWYXIoJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsICcnKQorCit9CisjIFNtYXJ0IGlzIHB5dGhvbiBiYXNlZCwgc28gYmUgc3VyZSBweXRob24tbmF0aXZlIGlzIGF2YWlsYWJsZSB0byB1cy4KK0VYVFJBTkFUSVZFUEFUSCArPSAicHl0aG9uLW5hdGl2ZSIKKworcnBtbGliZGlyID0gIi92YXIvbGliL3JwbSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm9vdGZzZGVidWdmaWxlcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NTg4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm9vdGZzZGVidWdmaWxlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMzYgQEAKKyMgVGhpcyBjbGFzcyBpbnN0YWxscyBhZGRpdGlvbmFsIGZpbGVzIGZvdW5kIG9uIHRoZSBidWlsZCBob3N0CisjIGRpcmVjdGx5IGludG8gdGhlIHJvb3Rmcy4KKyMKKyMgT25lIHVzZSBjYXNlIGlzIHRvIGluc3RhbGwgYSBjb25zdGFudCBzc2ggaG9zdCBrZXkgaW4KKyMgYW4gaW1hZ2UgdGhhdCBnZXRzIGNyZWF0ZWQgZm9yIGp1c3Qgb25lIG1hY2hpbmUuIFRoaXMKKyMgc29sdmVzIHR3byBpc3N1ZXM6CisjIC0gaG9zdCBrZXkgZ2VuZXJhdGlvbiBvbiB0aGUgZGV2aWNlIGNhbiBzdGFsbCB3aGVuIHRoZQorIyAgIGtlcm5lbCBoYXMgbm90IGdhdGhlcmVkIGVub3VnaCBlbnRyb3B5IHlldCAoc2VlbiBpbiBwcmFjdGljZQorIyAgIHVuZGVyIHFlbXUpCisjIC0gc3NoIGNvbXBsYWlucyBieSBkZWZhdWx0IHdoZW4gdGhlIGhvc3Qga2V5IGNoYW5nZXMKKyMKKyMgRm9yIGRyb3BiZWFyLCB3aXRoIHRoZSBzc2ggaG9zdCBrZXkgc3RvcmUgYWxvbmcgc2lkZSB0aGUgbG9jYWwuY29uZjoKKyMgMS4gRXh0ZW5kIGxvY2FsLmNvbmY6CisjICAgIElOSEVSSVQgKz0gInJvb3Rmc2RlYnVnZmlsZXMiCisjICAgIFJPT1RGU19ERUJVR19GSUxFUyArPSAiJHtUT1BESVJ9L2NvbmYvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5ICR7SU1BR0VfUk9PVEZTfS9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IDsiCisjIDIuIEJvb3QgdGhlIGltYWdlIG9uY2UsIGNvcHkgdGhlIGRyb3BiZWFyX3JzYV9ob3N0X2tleSBmcm9tCisjICAgIHRoZSBkZXZpY2UgaW50byB5b3VyIGJ1aWxkIGNvbmYgZGlyZWN0b3J5LgorIworIyBEbyBub3QgdXNlIGZvciBwcm9kdWN0aW9uIGltYWdlcyEgSXQgYnlwYXNzZXMgc2V2ZXJhbAorIyBjb3JlIGJ1aWxkIG1lY2hhbmlzbXMgKHVwZGF0aW5nIHRoZSBpbWFnZSB3aGVuIG9uZQorIyBvZiB0aGUgZmlsZXMgY2hhbmdlcywgbGljZW5zZSB0cmFja2luZyBpbiB0aGUgaW1hZ2UKKyMgbWFuaWZlc3QsIC4uLikuCisKK1JPT1RGU19ERUJVR19GSUxFUyA/PSAiIgorUk9PVEZTX0RFQlVHX0ZJTEVTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBmaWxlcyBvciBkaXJlY3RvcmllcyB0byBiZSBpbnN0YWxsZWQgd2l0aCAnY3AgLWEnIGluIHRoZSBmb3JtYXQgJ3NvdXJjZTEgdGFyZ2V0MTtzb3VyY2UyIHRhcmdldDI7Li4uJyIKKworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gInJvb3Rmc19kZWJ1Z19maWxlcyA7Igorcm9vdGZzX2RlYnVnX2ZpbGVzICgpIHsKKyAgICMhL2Jpbi9zaCAtZQorICAgZWNobyAiJHtST09URlNfREVCVUdfRklMRVN9IiB8IHNlZCAtZSAncy87L1xuL2cnIHwgd2hpbGUgcmVhZCBzb3VyY2UgdGFyZ2V0OyBkbworICAgICAgaWYgWyAtZSAiJHNvdXJjZSIgXTsgdGhlbgorICAgICAgICAgbWtkaXIgLXAgJChkaXJuYW1lICR0YXJnZXQpCisgICAgICAgICBjcCAtYSAkc291cmNlICR0YXJnZXQKKyAgICAgIGZpCisgICBkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2FuaXR5LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNzQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwpAQCAtMCwwICsxLDk0NSBAQAorIworIyBTYW5pdHkgY2hlY2sgdGhlIHVzZXJzIHNldHVwIGZvciBjb21tb24gbWlzY29uZmlndXJhdGlvbnMKKyMKKworU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUyA/PSAicGF0Y2ggZGlmZnN0YXQgbWFrZWluZm8gZ2l0IGJ6aXAyIHRhciBcCisgICAgZ3ppcCBnYXdrIGNocnBhdGggd2dldCBjcGlvIHBlcmwiCisKK2RlZiBiYmxheWVyc19jb25mX2ZpbGUoZCk6CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihkLmdldFZhcignVE9QRElSJywgVHJ1ZSksICdjb25mL2JibGF5ZXJzLmNvbmYnKQorCitkZWYgc2FuaXR5X2NvbmZfcmVhZChmbik6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIHJldHVybiBsaW5lcworCitkZWYgc2FuaXR5X2NvbmZfZmluZF9saW5lKHBhdHRlcm4sIGxpbmVzKToKKyAgICBpbXBvcnQgcmUKKyAgICByZXR1cm4gbmV4dCgoKGluZGV4LCBsaW5lKQorICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKQorICAgICAgICBpZiByZS5zZWFyY2gocGF0dGVybiwgbGluZSkpLCAoTm9uZSwgTm9uZSkpCisKK2RlZiBzYW5pdHlfY29uZl91cGRhdGUoZm4sIGxpbmVzLCB2ZXJzaW9uX3Zhcl9uYW1lLCBuZXdfdmVyc2lvbik6CisgICAgaW5kZXgsIGxpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUodmVyc2lvbl92YXJfbmFtZSwgbGluZXMpCisgICAgbGluZXNbaW5kZXhdID0gJyVzID0gIiVkIlxuJyAlICh2ZXJzaW9uX3Zhcl9uYW1lLCBuZXdfdmVyc2lvbikKKyAgICB3aXRoIG9wZW4oZm4sICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnJy5qb2luKGxpbmVzKSkKKworIyBGdW5jdGlvbnMgYWRkZWQgdG8gdGhpcyB2YXJpYWJsZSBNVVNUIHRocm93IGFuIGV4Y2VwdGlvbiAob3Igc3lzLmV4aXQoKSkgdW5sZXNzIHRoZXkKKyMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQgTENPTkZfVkVSU0lPTiBpbiBiYmxheWVycy5jb25mCitCQkxBWUVSU19DT05GX1VQREFURV9GVU5DUyArPSAib2Vjb3JlX3VwZGF0ZV9iYmxheWVycyIKKworcHl0aG9uIG9lY29yZV91cGRhdGVfYmJsYXllcnMoKSB7CisgICAgIyBiYmxheWVycy5jb25mIGlzIG91dCBvZiBkYXRlLCBzbyBzZWUgaWYgd2UgY2FuIHJlc29sdmUgdGhhdAorCisgICAgY3VycmVudF9sY29uZiA9IGludChkLmdldFZhcignTENPTkZfVkVSU0lPTicsIFRydWUpKQorICAgIGlmIG5vdCBjdXJyZW50X2xjb25mOgorICAgICAgICBzeXMuZXhpdCgpCisgICAgbGNvbmZfdmVyc2lvbiA9IGludChkLmdldFZhcignTEFZRVJfQ09ORl9WRVJTSU9OJywgVHJ1ZSkpCisgICAgbGluZXMgPSBbXQorCisgICAgaWYgY3VycmVudF9sY29uZiA8IDQ6CisgICAgICAgIHN5cy5leGl0KCkKKworICAgIGJibGF5ZXJzX2ZuID0gYmJsYXllcnNfY29uZl9maWxlKGQpCisgICAgbGluZXMgPSBzYW5pdHlfY29uZl9yZWFkKGJibGF5ZXJzX2ZuKQorCisgICAgaWYgY3VycmVudF9sY29uZiA9PSA0IGFuZCBsY29uZl92ZXJzaW9uID4gNDoKKyAgICAgICAgdG9wZGlyX3ZhciA9ICckJyArICd7VE9QRElSfScKKyAgICAgICAgaW5kZXgsIGJicGF0aF9saW5lID0gc2FuaXR5X2NvbmZfZmluZF9saW5lKCdCQlBBVEgnLCBsaW5lcykKKyAgICAgICAgaWYgYmJwYXRoX2xpbmU6CisgICAgICAgICAgICBzdGFydCA9IGJicGF0aF9saW5lLmZpbmQoJyInKQorICAgICAgICAgICAgaWYgc3RhcnQgIT0gLTEgYW5kIChsZW4oYmJwYXRoX2xpbmUpICE9IChzdGFydCArIDEpKToKKyAgICAgICAgICAgICAgICBpZiBiYnBhdGhfbGluZVtzdGFydCArIDFdID09ICciJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZXNbaW5kZXhdID0gKGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRpcl92YXIgKyBiYnBhdGhfbGluZVtzdGFydCArIDE6XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgdG9wZGlyX3ZhciBpbiBiYnBhdGhfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2luZGV4XSA9IChiYnBhdGhfbGluZVs6c3RhcnQgKyAxXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BkaXJfdmFyICsgJzonICsgYmJwYXRoX2xpbmVbc3RhcnQgKyAxOl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZGV4LCBiYmZpbGVzX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ0JCRklMRVMnLCBsaW5lcykKKyAgICAgICAgICAgIGlmIGJiZmlsZXNfbGluZToKKyAgICAgICAgICAgICAgICBsaW5lcy5pbnNlcnQoaW5kZXgsICdCQlBBVEggPSAiJyArIHRvcGRpcl92YXIgKyAnIlxuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQorCisgICAgICAgIGN1cnJlbnRfbGNvbmYgKz0gMQorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfbGNvbmYpCisgICAgICAgIHJldHVybgorCisgICAgZWxpZiBjdXJyZW50X2xjb25mID09IDUgYW5kIGxjb25mX3ZlcnNpb24gPiA1OgorICAgICAgICAjIE51bGwgdXBkYXRlLCB0byBhdm9pZCBpc3N1ZXMgd2l0aCBwZW9wbGUgc3dpdGNoaW5nIGJldHdlZW4gcG9reSBhbmQgb3RoZXIgZGlzdHJvcworICAgICAgICBjdXJyZW50X2xjb25mID0gNgorICAgICAgICBzYW5pdHlfY29uZl91cGRhdGUoYmJsYXllcnNfZm4sIGxpbmVzLCAnTENPTkZfVkVSU0lPTicsIGN1cnJlbnRfbGNvbmYpCisgICAgICAgIHJldHVybgorCisgICAgc3lzLmV4aXQoKQorfQorCitkZWYgcmFpc2Vfc2FuaXR5X2Vycm9yKG1zZywgZCwgbmV0d29ya19lcnJvcj1GYWxzZSk6CisgICAgaWYgZC5nZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKG1zZywgbmV0d29ya19lcnJvciksIGQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrRmFpbGVkKG1zZyksIGQpCisgICAgICAgIHJldHVybgorCisgICAgYmIuZmF0YWwoIiIiIE9FLWNvcmUncyBjb25maWcgc2FuaXR5IGNoZWNrZXIgZGV0ZWN0ZWQgYSBwb3RlbnRpYWwgbWlzY29uZmlndXJhdGlvbi4KKyAgICBFaXRoZXIgZml4IHRoZSBjYXVzZSBvZiB0aGlzIGVycm9yIG9yIGF0IHlvdXIgb3duIHJpc2sgZGlzYWJsZSB0aGUgY2hlY2tlciAoc2VlIHNhbml0eS5jb25mKS4KKyAgICBGb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgcG90ZW50aWFsIHByb2JsZW1zIC8gYWR2aXNvcmllczoKKyAgICAKKyAgICAlcyIiIiAlIG1zZykKKworIyBDaGVjayBmbGFncyBhc3NvY2lhdGVkIHdpdGggYSB0dW5pbmcuCitkZWYgY2hlY2tfdG9vbGNoYWluX3R1bmVfYXJncyhkYXRhLCB0dW5lLCBtdWx0aWxpYiwgZXJycyk6CisgICAgZm91bmRfZXJyb3JzID0gRmFsc2UKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnQ0NBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnQVNBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKyAgICBpZiBjaGVja190b29sY2hhaW5fYXJnc19wcmVzZW50KGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzLCAnTERBUkdTJyk6CisgICAgICAgIGZvdW5kX2Vycm9ycyA9IFRydWUKKworICAgIHJldHVybiBmb3VuZF9lcnJvcnMKKworZGVmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIHR1bmVfZXJyb3JzLCB3aGljaCk6CisgICAgYXJnc19zZXQgPSAoZGF0YS5nZXRWYXIoIlRVTkVfJXMiICUgd2hpY2gsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYXJnc193YW50ZWQgPSAoZGF0YS5nZXRWYXIoIlRVTkVBQklfUkVRVUlSRURfJXNfdHVuZS0lcyIgJSAod2hpY2gsIHR1bmUpLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGFyZ3NfbWlzc2luZyA9IFtdCisKKyAgICAjIElmIG5vIGFyZ3MgYXJlIGxpc3RlZC9yZXF1aXJlZCwgd2UgYXJlIGRvbmUuCisgICAgaWYgbm90IGFyZ3Nfd2FudGVkOgorICAgICAgICByZXR1cm4KKyAgICBmb3IgYXJnIGluIGFyZ3Nfd2FudGVkOgorICAgICAgICBpZiBhcmcgbm90IGluIGFyZ3Nfc2V0OgorICAgICAgICAgICAgYXJnc19taXNzaW5nLmFwcGVuZChhcmcpCisKKyAgICBmb3VuZF9lcnJvcnMgPSBGYWxzZQorICAgIGlmIGFyZ3NfbWlzc2luZzoKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIlRVTkVBQkkgZm9yICVzIHJlcXVpcmVzICclcycgaW4gVFVORV8lcyAoJXMpLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAodHVuZSwgJyAnLmpvaW4oYXJnc19taXNzaW5nKSwgd2hpY2gsICcgJy5qb2luKGFyZ3Nfc2V0KSkpCisgICAgcmV0dXJuIGZvdW5kX2Vycm9ycworCisjIENoZWNrIGEgc2luZ2xlIHR1bmUgZm9yIHZhbGlkaXR5LgorZGVmIGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIHR1bmUsIG11bHRpbGliKToKKyAgICB0dW5lX2Vycm9ycyA9IFtdCisgICAgaWYgbm90IHR1bmU6CisgICAgICAgIHJldHVybiAiTm8gdHVuaW5nIGZvdW5kIGZvciAlcyBtdWx0aWxpYi4iICUgbXVsdGlsaWIKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZGF0YSkKKyAgICBpZiBtdWx0aWxpYiAhPSAiZGVmYXVsdCI6CisgICAgICAgICMgQXBwbHkgdGhlIG92ZXJyaWRlcyBzbyB3ZSBjYW4gbG9vayBhdCB0aGUgZGV0YWlscy4KKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIG11bHRpbGliCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICBiYi5kZWJ1ZygyLCAiU2FuaXR5LWNoZWNraW5nIHR1bmluZyAnJXMnICglcykgZmVhdHVyZXM6IiAlICh0dW5lLCBtdWx0aWxpYikpCisgICAgZmVhdHVyZXMgPSAobG9jYWxkYXRhLmdldFZhcigiVFVORV9GRUFUVVJFU190dW5lLSVzIiAlIHR1bmUsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IGZlYXR1cmVzOgorICAgICAgICByZXR1cm4gIlR1bmluZyAnJXMnIGhhcyBubyBkZWZpbmVkIGZlYXR1cmVzLCBhbmQgY2Fubm90IGJlIHVzZWQuIiAlIHR1bmUKKyAgICB2YWxpZF90dW5lcyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncygnVFVORVZBTElEJykgb3Ige30KKyAgICBjb25mbGljdHMgPSBsb2NhbGRhdGEuZ2V0VmFyRmxhZ3MoJ1RVTkVDT05GTElDVFMnKSBvciB7fQorICAgICMgW2RvY10gaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB2YXJpYWJsZSwgbm90IGEgcmVhbCBmZWF0dXJlCisgICAgaWYgJ2RvYycgaW4gdmFsaWRfdHVuZXM6CisgICAgICAgIGRlbCB2YWxpZF90dW5lc1snZG9jJ10KKyAgICBpZiAnZG9jJyBpbiBjb25mbGljdHM6CisgICAgICAgIGRlbCBjb25mbGljdHNbJ2RvYyddCisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIGlmIGZlYXR1cmUgaW4gY29uZmxpY3RzOgorICAgICAgICAgICAgZm9yIGNvbmZsaWN0IGluIGNvbmZsaWN0c1tmZWF0dXJlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGNvbmZsaWN0IGluIGZlYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIkZlYXR1cmUgJyVzJyBjb25mbGljdHMgd2l0aCAnJXMnLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGZlYXR1cmUsIGNvbmZsaWN0KSkKKyAgICAgICAgaWYgZmVhdHVyZSBpbiB2YWxpZF90dW5lczoKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICIgICVzOiAlcyIgJSAoZmVhdHVyZSwgdmFsaWRfdHVuZXNbZmVhdHVyZV0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHVuZV9lcnJvcnMuYXBwZW5kKCJGZWF0dXJlICclcycgaXMgbm90IGRlZmluZWQuIiAlIGZlYXR1cmUpCisgICAgd2hpdGVsaXN0ID0gbG9jYWxkYXRhLmdldFZhcigiVFVORUFCSV9XSElURUxJU1QiLCBUcnVlKQorICAgIGlmIHdoaXRlbGlzdDoKKyAgICAgICAgdHVuZWFiaSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRVTkVBQklfdHVuZS0lcyIgJSB0dW5lLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZWFiaToKKyAgICAgICAgICAgIHR1bmVhYmkgPSB0dW5lCisgICAgICAgIGlmIFRydWUgbm90IGluIFt4IGluIHdoaXRlbGlzdC5zcGxpdCgpIGZvciB4IGluIHR1bmVhYmkuc3BsaXQoKV06CisgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIlR1bmluZyAnJXMnICglcykgY2Fubm90IGJlIHVzZWQgd2l0aCBhbnkgc3VwcG9ydGVkIHR1bmluZy9BQkkuIiAlCisgICAgICAgICAgICAgICAgKHR1bmUsIHR1bmVhYmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrX3Rvb2xjaGFpbl90dW5lX2FyZ3MobG9jYWxkYXRhLCB0dW5lYWJpLCBtdWx0aWxpYiwgdHVuZV9lcnJvcnMpOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTYW5pdHkgY2hlY2s6IENvbXBpbGVyIGFyZ3MgT0sgZm9yICVzLiIgJSB0dW5lKQorICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICByZXR1cm4gIlR1bmluZyAnJXMnIGhhcyB0aGUgZm9sbG93aW5nIGVycm9yczpcbiIgJSB0dW5lICsgJ1xuJy5qb2luKHR1bmVfZXJyb3JzKQorCitkZWYgY2hlY2tfdG9vbGNoYWluKGRhdGEpOgorICAgIHR1bmVfZXJyb3Jfc2V0ID0gW10KKyAgICBkZWZ0dW5lID0gZGF0YS5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICB0dW5lX2Vycm9ycyA9IGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIGRlZnR1bmUsICdkZWZhdWx0JykKKyAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKHR1bmVfZXJyb3JzKQorCisgICAgbXVsdGlsaWJzID0gKGRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZ2xvYmFsX211bHRpbGlicyA9IChkYXRhLmdldFZhcigiTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGlmIG11bHRpbGliczoKKyAgICAgICAgc2Vlbl9saWJzID0gW10KKyAgICAgICAgc2Vlbl90dW5lcyA9IFtdCisgICAgICAgIGZvciBsaWIgaW4gbXVsdGlsaWJzOgorICAgICAgICAgICAgaWYgbGliIGluIHNlZW5fbGliczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIlRoZSBtdWx0aWxpYiAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UuIiAlIGxpYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZChsaWIpCisgICAgICAgICAgICBpZiBub3QgbGliIGluIGdsb2JhbF9tdWx0aWxpYnM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJNdWx0aWxpYiAlcyBpcyBub3QgcHJlc2VudCBpbiBNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMiICUgbGliKQorICAgICAgICAgICAgdHVuZSA9IGRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMiICUgbGliLCBUcnVlKQorICAgICAgICAgICAgaWYgdHVuZSBpbiBzZWVuX3R1bmVzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiVGhlIHR1bmluZyAnJXMnIGFwcGVhcnMgaW4gbW9yZSB0aGFuIG9uZSBtdWx0aWxpYi4iICUgdHVuZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2Vlbl9saWJzLmFwcGVuZCh0dW5lKQorICAgICAgICAgICAgaWYgdHVuZSA9PSBkZWZ0dW5lOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiTXVsdGlsaWIgJyVzJyAoJXMpIGlzIGFsc28gdGhlIGRlZmF1bHQgdHVuaW5nLiIgJSAobGliLCBkZWZ0dW5lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcnMgPSBjaGVja190b29sY2hhaW5fdHVuZShkYXRhLCB0dW5lLCBsaWIpCisgICAgICAgICAgICBpZiB0dW5lX2Vycm9yczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCisgICAgaWYgdHVuZV9lcnJvcl9zZXQ6CisgICAgICAgIHJldHVybiAiVG9vbGNoYWluIHR1bmluZ3MgaW52YWxpZDpcbiIgKyAnXG4nLmpvaW4odHVuZV9lcnJvcl9zZXQpICsgIlxuIgorCisgICAgcmV0dXJuICIiCisKK2RlZiBjaGVja19jb25mX2V4aXN0cyhmbiwgZGF0YSk6CisgICAgYmJwYXRoID0gW10KKyAgICBmbiA9IGRhdGEuZXhwYW5kKGZuKQorICAgIHZiYnBhdGggPSBkYXRhLmdldFZhcigiQkJQQVRIIiwgRmFsc2UpCisgICAgaWYgdmJicGF0aDoKKyAgICAgICAgYmJwYXRoICs9IHZiYnBhdGguc3BsaXQoIjoiKQorICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgY3Vycm5hbWUgPSBvcy5wYXRoLmpvaW4oZGF0YS5leHBhbmQocCksIGZuKQorICAgICAgICBpZiBvcy5hY2Nlc3MoY3Vycm5hbWUsIG9zLlJfT0spOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKGZpbGVwYXRoLCBwYXRobmFtZSk6CisgICAgaW1wb3J0IHN0cmluZywgcmFuZG9tCisgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4oZmlsZXBhdGgsICcnLmpvaW4ocmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykgZm9yIHggaW4gcmFuZ2UoMjAwKSkpCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGZpbGVwYXRoKQorICAgICAgICBmID0gb3Blbih0ZXN0ZmlsZSwgInciKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKHRlc3RmaWxlKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBlcnIsIHN0cmVycm9yID0gZS5hcmdzCisgICAgICAgIGlmIGVyciA9PSBlcnJuby5FTkFNRVRPT0xPTkc6CisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgYSBmaWxlIHdpdGggYSBsb25nIG5hbWUgaW4gJXMuIFBsZWFzZSB1c2UgYSBmaWxlc3lzdGVtIHRoYXQgZG9lcyBub3QgdW5yZWFzb25hYmx5IGxpbWl0IGZpbGVuYW1lIGxlbmd0aC5cbiIgJSBwYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlIGEgZmlsZSBpbiAlczogJXMuXG4iICUgKHBhdGhuYW1lLCBzdHJlcnJvcikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBlcnJubywgc3RyZXJyb3IgPSBlLmFyZ3MKKyAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY3JlYXRlICVzIGRpcmVjdG9yeSBpbiB3aGljaCB0byBydW4gbG9uZyBuYW1lIHNhbml0eSBjaGVjazogJXMuXG4iICUgKHBhdGhuYW1lLCBzdHJlcnJvcikKKyAgICByZXR1cm4gIiIKKworZGVmIGNoZWNrX3BhdGhfbGVuZ3RoKGZpbGVwYXRoLCBwYXRobmFtZSwgbGltaXQpOgorICAgIGlmIGxlbihmaWxlcGF0aCkgPiBsaW1pdDoKKyAgICAgICAgcmV0dXJuICJUaGUgbGVuZ3RoIG9mICVzIGlzIGxvbmdlciB0aGFuIDQxMCwgdGhpcyB3b3VsZCBjYXVzZSB1bmV4cGVjdGVkIGVycm9ycywgcGxlYXNlIHVzZSBhIHNob3J0ZXIgcGF0aC5cbiIgJSBwYXRobmFtZQorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2ZpbGVzeXN0ZW1faWQocGF0aCk6CisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInN0YXQgLWYgLWMgJyVzJyAlcyIgJSAoIiV0IiwgcGF0aCkpCisgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBlbHNlOgorICAgICAgICBiYi53YXJuKCJDYW4ndCBnZXQgdGhlIGZpbGVzeXN0ZW0gaWQgb2Y6ICVzIiAlIHBhdGgpCisgICAgICAgIHJldHVybiBOb25lCisKKyMgQ2hlY2sgdGhhdCB0aGUgcGF0aCBpc24ndCBsb2NhdGVkIG9uIG5mcy4KK2RlZiBjaGVja19ub3RfbmZzKHBhdGgsIG5hbWUpOgorICAgICMgVGhlIG5mcycgZmlsZXN5c3RlbSBpZCBpcyA2OTY5CisgICAgaWYgZ2V0X2ZpbGVzeXN0ZW1faWQocGF0aCkgPT0gIjY5NjkiOgorICAgICAgICByZXR1cm4gIlRoZSAlczogJXMgY2FuJ3QgYmUgbG9jYXRlZCBvbiBuZnMuXG4iICUgKG5hbWUsIHBhdGgpCisgICAgcmV0dXJuICIiCisKKyMgQ2hlY2sgdGhhdCBwYXRoIGlzbid0IGEgYnJva2VuIHN5bWxpbmsKK2RlZiBjaGVja19zeW1saW5rKGxuaywgZGF0YSk6CisgICAgaWYgb3MucGF0aC5pc2xpbmsobG5rKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGxuayk6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiJXMgaXMgYSBicm9rZW4gc3ltbGluay4iICUgbG5rLCBkYXRhKQorCitkZWYgY2hlY2tfY29ubmVjdGl2aXR5KGQpOgorICAgICMgVVJJJ3MgdG8gY2hlY2sgY2FuIGJlIHNldCBpbiB0aGUgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgdmFyaWFibGUKKyAgICAjIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhcyBmb3IgU1JDX1VSSS4gSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQKKyAgICAjIHRoZSBjaGVjayBpcyBza2lwcGVkCisgICAgdGVzdF91cmlzID0gKGQuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgcmV0dmFsID0gIiIKKworICAgICMgT25seSBjaGVjayBjb25uZWN0aXZpdHkgaWYgbmV0d29yayBlbmFibGVkIGFuZCB0aGUKKyAgICAjIENPTk5FQ1RJVklUWV9DSEVDS19VUklTIGFyZSBzZXQKKyAgICBuZXR3b3JrX2VuYWJsZWQgPSBub3QgZC5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKQorICAgIGNoZWNrX2VuYWJsZWQgPSBsZW4odGVzdF91cmlzKQorICAgICMgVGFrZSBhIGNvcHkgb2YgdGhlIGRhdGEgc3RvcmUgYW5kIHVuc2V0IE1JUlJPUlMgYW5kIFBSRU1JUlJPUlMKKyAgICBkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgZGF0YS5kZWxWYXIoJ1BSRU1JUlJPUlMnKQorICAgIGRhdGEuZGVsVmFyKCdNSVJST1JTJykKKyAgICBpZiBjaGVja19lbmFibGVkIGFuZCBuZXR3b3JrX2VuYWJsZWQ6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2godGVzdF91cmlzLCBkYXRhKQorICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgIyBBbGxvdyB0aGUgbWVzc2FnZSB0byBiZSBjb25maWd1cmVkIHNvIHRoYXQgdXNlcnMgY2FuIGJlCisgICAgICAgICAgICAjIHBvaW50ZWQgdG8gYSBzdXBwb3J0IG1lY2hhbmlzbS4KKyAgICAgICAgICAgIG1zZyA9IGRhdGEuZ2V0VmFyKCdDT05ORUNUSVZJVFlfQ0hFQ0tfTVNHJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGlmIGxlbihtc2cpID09IDA6CisgICAgICAgICAgICAgICAgbXNnID0gIiVzLiBQbGVhc2UgZW5zdXJlIHlvdXIgbmV0d29yayBpcyBjb25maWd1cmVkIGNvcnJlY3RseS5cbiIgJSBlcnIKKyAgICAgICAgICAgIHJldHZhbCA9IG1zZworCisgICAgcmV0dXJuIHJldHZhbAorCitkZWYgY2hlY2tfc3VwcG9ydGVkX2Rpc3RybyhzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCisKKyAgICB0ZXN0ZWRfZGlzdHJvcyA9IHNhbml0eV9kYXRhLmdldFZhcignU0FOSVRZX1RFU1RFRF9ESVNUUk9TJywgVHJ1ZSkKKyAgICBpZiBub3QgdGVzdGVkX2Rpc3Ryb3M6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBkaXN0cm8gPSBvZS5sc2IuZGlzdHJvX2lkZW50aWZpZXIoKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGRpc3RybyA9IE5vbmUKKworICAgIGlmIG5vdCBkaXN0cm86CisgICAgICAgIGJiLndhcm4oJ0hvc3QgZGlzdHJpYnV0aW9uIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkOyB5b3UgbWF5IHBvc3NpYmx5IGV4cGVyaWVuY2UgdW5leHBlY3RlZCBmYWlsdXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgdGVzdGVkIGRpc3RyaWJ1dGlvbi4nKQorCisgICAgZm9yIHN1cHBvcnRlZCBpbiBbeC5zdHJpcCgpIGZvciB4IGluIHRlc3RlZF9kaXN0cm9zLnNwbGl0KCdcXG4nKV06CisgICAgICAgIGlmIGZubWF0Y2goZGlzdHJvLCBzdXBwb3J0ZWQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBiYi53YXJuKCdIb3N0IGRpc3RyaWJ1dGlvbiAiJXMiIGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgdGhlIGJ1aWxkIHN5c3RlbTsgeW91IG1heSBwb3NzaWJseSBleHBlcmllbmNlIHVuZXhwZWN0ZWQgZmFpbHVyZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhIHRlc3RlZCBkaXN0cmlidXRpb24uJyAlIGRpc3RybykKKworIyBDaGVja3Mgd2Ugc2hvdWxkIG9ubHkgbWFrZSBpZiBNQUNISU5FIGlzIHNldCBjb3JyZWN0bHkKK2RlZiBjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKHNhbml0eV9kYXRhKToKKyAgICBtZXNzYWdlcyA9ICIiCisKKyAgICAjIENoZWNrIFRVTkVfQVJDSCBpcyBzZXQKKyAgICBpZiBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RVTkVfQVJDSCcsIFRydWUpID09ICdJTlZBTElEJzoKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICdUVU5FX0FSQ0ggaXMgdW5zZXQuIFBsZWFzZSBlbnN1cmUgeW91ciBNQUNISU5FIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYSB2YWxpZCB0dW5lIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGljaCB3aWxsIHNldCB0aGlzIGNvcnJlY3RseS5cbicKKworICAgICMgQ2hlY2sgVEFSR0VUX09TIGlzIHNldAorICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgPT0gJ0lOVkFMSUQnOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1BsZWFzZSBzZXQgVEFSR0VUX09TIGRpcmVjdGx5LCBvciBjaG9vc2UgYSBNQUNISU5FIG9yIERJU1RSTyB0aGF0IGRvZXMgc28uXG4nCisKKyAgICAjIENoZWNrIHRoYXQgd2UgZG9uJ3QgaGF2ZSBkdXBsaWNhdGUgZW50cmllcyBpbiBQQUNLQUdFX0FSQ0hTICYgdGhhdCBUVU5FX1BLR0FSQ0ggaXMgaW4gUEFDS0FHRV9BUkNIUworICAgIHBrZ2FyY2hzID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgVHJ1ZSkKKyAgICB0dW5lcGtnID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKQorICAgIHR1bmVmb3VuZCA9IEZhbHNlCisgICAgc2VlbiA9IHt9CisgICAgZHVwcyA9IFtdCisKKyAgICBmb3IgcGEgaW4gcGtnYXJjaHMuc3BsaXQoKToKKyAgICAgICAgaWYgc2Vlbi5nZXQocGEsIDApID09IDE6CisgICAgICAgICAgICBkdXBzLmFwcGVuZChwYSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlZW5bcGFdID0gMQorICAgICAgICBpZiBwYSA9PSB0dW5lcGtnOgorICAgICAgICAgICAgdHVuZWZvdW5kID0gVHJ1ZQorCisgICAgaWYgbGVuKGR1cHMpOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgIkVycm9yLCB0aGUgUEFDS0FHRV9BUkNIUyB2YXJpYWJsZSBjb250YWlucyBkdXBsaWNhdGVzLiBUaGUgZm9sbG93aW5nIGFyY2hzIGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2U6ICVzIiAlICIgIi5qb2luKGR1cHMpCisKKyAgICBpZiB0dW5lZm91bmQgPT0gRmFsc2U6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiRXJyb3IsIHRoZSBQQUNLQUdFX0FSQ0hTIHZhcmlhYmxlIGRvZXMgbm90IGNvbnRhaW4gVFVORV9QS0dBUkNIICglcykuIiAlIHR1bmVwa2cKKworICAgIHJldHVybiBtZXNzYWdlcworCisjIENoZWNrcyBpZiBuZWNlc3NhcnkgdG8gYWRkIG9wdGlvbiBtYXJjaCB0byBob3N0IGdjYworZGVmIGNoZWNrX2djY19tYXJjaChzYW5pdHlfZGF0YSk6CisgICAgcmVzdWx0ID0gVHJ1ZQorICAgIG1lc3NhZ2UgPSAiIgorCisgICAgIyBDaGVjayBpZiAtbWFyY2ggbm90IGluIEJVSUxEX0NGTEFHUworICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcigiQlVJTERfQ0ZMQUdTIixUcnVlKS5maW5kKCItbWFyY2giKSA8IDA6CisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKKyAgICAgICAgZiA9IG9wZW4oImdjY190ZXN0LmMiLCAidyIpCisgICAgICAgIGYud3JpdGUoImludCBtYWluICgpeyB2b2xhdGlsZSBpbnQgYXRvbWljID0gMjsgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCAoJmF0b21pYywgMiwgMyk7IHJldHVybiAwOyB9XG4iKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIENoZWNrIGlmIEdDQyBjb3VsZCB3b3JrIHdpdGhvdXQgbWFyY2gKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHN0YXR1cyxyZXMgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiR7QlVJTERfUFJFRklYfWdjYyAtbWFyY2g9bmF0aXZlIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJCVUlMRF9DRkxBR1NfYXBwZW5kID0gXCIgLW1hcmNoPW5hdGl2ZVwiIgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWU7CisKKyAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIGJ1aWxkX2FyY2ggPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ0JVSUxEX0FSQ0gnLCBUcnVlKQorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIC1tYXJjaD0lcyBnY2NfdGVzdC5jIC1vIGdjY190ZXN0IiAlIGJ1aWxkX2FyY2gpCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9JXNcIiIgJSBidWlsZF9hcmNoCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBvcy5yZW1vdmUoImdjY190ZXN0LmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiZ2NjX3Rlc3QiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiZ2NjX3Rlc3QiKQorCisgICAgcmV0dXJuIChyZXN1bHQsIG1lc3NhZ2UpCisKKyMgVW5wYXRjaGVkIHZlcnNpb25zIG9mIG1ha2UgMy44MiBhcmUga25vd24gdG8gYmUgYnJva2VuLiAgU2VlIEdOVSBTYXZhbm5haCBCdWcgMzA2MTIuCisjIFVzZSBhIG1vZGlmaWVkIHJlcHJvZHVjZXIgZnJvbSBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz8zMDYxMiB0byB2YWxpZGF0ZS4KK2RlZiBjaGVja19tYWtlX3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJtYWtlIC0tdmVyc2lvbiIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgbWFrZSAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVsyXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA9PSBMb29zZVZlcnNpb24oIjMuODIiKToKKyAgICAgICAgIyBDb25zdHJ1Y3QgYSB0ZXN0IGZpbGUKKyAgICAgICAgZiA9IG9wZW4oIm1ha2VmaWxlX3Rlc3QiLCAidyIpCisgICAgICAgIGYud3JpdGUoIm1ha2VmaWxlX3Rlc3QuYTogbWFrZWZpbGVfdGVzdF9hLmMgbWFrZWZpbGVfdGVzdF9iLmMgbWFrZWZpbGVfdGVzdC5hKCBtYWtlZmlsZV90ZXN0X2EuYyBtYWtlZmlsZV90ZXN0X2IuYylcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdF9hLmM6XG4iKQorICAgICAgICBmLndyaXRlKCIJdG91Y2ggJEBcbiIpCisgICAgICAgIGYud3JpdGUoIlxuIikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdF9iLmM6XG4iKQorICAgICAgICBmLndyaXRlKCIJdG91Y2ggJEBcbiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgaWYgbWFrZSAzLjgyIGhhcyBiZWVuIHBhdGNoZWQKKyAgICAgICAgc3RhdHVzLHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgibWFrZSAtZiBtYWtlZmlsZV90ZXN0IikKKworICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3QiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdF9hLmMiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdF9hLmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdF9iLmMiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdF9iLmMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygibWFrZWZpbGVfdGVzdC5hIik6CisgICAgICAgICAgICBvcy5yZW1vdmUoIm1ha2VmaWxlX3Rlc3QuYSIpCisKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiBtYWtlIDMuODIgaXMgYnJva2VuLiBQbGVhc2UgcmV2ZXJ0IHRvIDMuODEgb3IgaW5zdGFsbCBhIHBhdGNoZWQgdmVyc2lvbi5cbiIKKyAgICByZXR1cm4gTm9uZQorCisKKyMgVGFyIHZlcnNpb24gMS4yNCBhbmQgb253YXJkcyBoYW5kbGUgb3ZlcndyaXRpbmcgc3ltbGlua3MgY29ycmVjdGx5CisjIGJ1dCBlYXJsaWVyIHZlcnNpb25zIGRvIG5vdDsgdGhpcyBuZWVkcyB0byB3b3JrIHByb3Blcmx5IGZvciBzc3RhdGUKK2RlZiBjaGVja190YXJfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoInRhciAtLXZlcnNpb24iKQorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBleGVjdXRlIHRhciAtLXZlcnNpb24sIGV4aXQgY29kZSAlc1xuIiAlIHN0YXR1cworICAgIHZlcnNpb24gPSByZXN1bHQuc3BsaXQoKVszXQorICAgIGlmIExvb3NlVmVyc2lvbih2ZXJzaW9uKSA8IExvb3NlVmVyc2lvbigiMS4yNCIpOgorICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiB0YXIgaXMgb2xkZXIgdGhhbiAxLjI0IGFuZCBoYXMgYnVncyB3aGljaCB3aWxsIGJyZWFrIGJ1aWxkcy4gUGxlYXNlIGluc3RhbGwgYSBuZXdlciB2ZXJzaW9uIG9mIHRhci5cbiIKKyAgICByZXR1cm4gTm9uZQorCisjIFdlIHVzZSBnaXQgcGFyYW1ldGVycyBhbmQgZnVuY3Rpb25hbGl0eSBvbmx5IGZvdW5kIGluIDEuNy44IG9yIGxhdGVyCitkZWYgY2hlY2tfZ2l0X3ZlcnNpb24oc2FuaXR5X2RhdGEpOgorICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJnaXQgLS12ZXJzaW9uIDI+IC9kZXYvbnVsbCIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgZ2l0IC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzJdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pIDwgTG9vc2VWZXJzaW9uKCIxLjcuOCIpOgorICAgICAgICByZXR1cm4gIllvdXIgdmVyc2lvbiBvZiBnaXQgaXMgb2xkZXIgdGhhbiAxLjcuOCBhbmQgaGFzIGJ1Z3Mgd2hpY2ggd2lsbCBicmVhayBidWlsZHMuIFBsZWFzZSBpbnN0YWxsIGEgbmV3ZXIgdmVyc2lvbiBvZiBnaXQuXG4iCisgICAgcmV0dXJuIE5vbmUKKworIyBDaGVjayB0aGUgcmVxdWlyZWQgcGVybCBtb2R1bGVzIHdoaWNoIG1heSBub3QgYmUgaW5zdGFsbGVkIGJ5IGRlZmF1bHQKK2RlZiBjaGVja19wZXJsX21vZHVsZXMoc2FuaXR5X2RhdGEpOgorICAgIHJldCA9ICIiCisgICAgbW9kdWxlcyA9ICggIlRleHQ6OlBhcnNlV29yZHMiLCAiVGhyZWFkOjpRdWV1ZSIsICJEYXRhOjpEdW1wZXIiICkKKyAgICBmb3IgbSBpbiBtb2R1bGVzOgorICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgicGVybCAtZSAndXNlICVzJyAyPiAvZGV2L251bGwiICUgbSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByZXQgKz0gIiVzICIgJSBtCisgICAgaWYgcmV0OgorICAgICAgICByZXR1cm4gIlJlcXVpcmVkIHBlcmwgbW9kdWxlKHMpIG5vdCBmb3VuZDogJXNcbiIgJSByZXQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgc2FuaXR5X2NoZWNrX2NvbmZmaWxlcyhzdGF0dXMsIGQpOgorICAgICMgQ2hlY2sgd2UgYXJlIHVzaW5nIGEgdmFsaWQgbG9jYWwuY29uZgorICAgIGN1cnJlbnRfY29uZiAgPSBkLmdldFZhcignQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBjb25mX3ZlcnNpb24gPSAgZC5nZXRWYXIoJ0xPQ0FMQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKworICAgIGlmIGN1cnJlbnRfY29uZiAhPSBjb25mX3ZlcnNpb246CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBsb2NhbC5jb25mIHdhcyBnZW5lcmF0ZWQgZnJvbSBhbiBvbGRlci9uZXdlciB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYuc2FtcGxlIGFuZCB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlcyBtYWRlIHRvIHRoaXMgZmlsZS4gUGxlYXNlIGNvbXBhcmUgdGhlIHR3byBmaWxlcyBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5NYXRjaGluZyB0aGUgdmVyc2lvbiBudW1iZXJzIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS5cblwibWVsZCBjb25mL2xvY2FsLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9sb2NhbC5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2VzLlxuIikKKworICAgICMgQ2hlY2sgYmJsYXllcnMuY29uZiBpcyB2YWxpZAorICAgIGN1cnJlbnRfbGNvbmYgPSBkLmdldFZhcignTENPTkZfVkVSU0lPTicsIFRydWUpCisgICAgbGNvbmZfdmVyc2lvbiA9IGQuZ2V0VmFyKCdMQVlFUl9DT05GX1ZFUlNJT04nLCBUcnVlKQorICAgIGlmIGN1cnJlbnRfbGNvbmYgIT0gbGNvbmZfdmVyc2lvbjoKKyAgICAgICAgZnVuY3MgPSBkLmdldFZhcignQkJMQVlFUlNfQ09ORl9VUERBVEVfRlVOQ1MnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBmdW5jIGluIGZ1bmNzOgorICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZnVuYywgZCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBpZiBzdWNjZXNzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIllvdXIgY29uZi9iYmxheWVycy5jb25mIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgdXBkYXRlZC4iKQorICAgICAgICAgICAgICAgIHN0YXR1cy5yZXBhcnNlID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc3RhdHVzLnJlcGFyc2U6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIHZlcnNpb24gb2YgYmJsYXllcnMuY29uZiBoYXMgdGhlIHdyb25nIExDT05GX1ZFUlNJT04gKGhhcyAlcywgZXhwZWN0aW5nICVzKS5cblBsZWFzZSBjb21wYXJlIHRoZSB5b3VyIGZpbGUgYWdhaW5zdCBiYmxheWVycy5jb25mLnNhbXBsZSBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5cIm1lbGQgY29uZi9iYmxheWVycy5jb25mICR7Q09SRUJBU0V9L21ldGEqL2NvbmYvYmJsYXllcnMuY29uZi5zYW1wbGVcIiBpcyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIgJSAoY3VycmVudF9sY29uZiwgbGNvbmZfdmVyc2lvbikpCisKKyAgICAjIElmIHdlIGhhdmUgYSBzaXRlLmNvbmYsIGNoZWNrIGl0J3MgdmFsaWQKKyAgICBpZiBjaGVja19jb25mX2V4aXN0cygiY29uZi9zaXRlLmNvbmYiLCBkKToKKyAgICAgICAgY3VycmVudF9zY29uZiA9IGQuZ2V0VmFyKCdTQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgc2NvbmZfdmVyc2lvbiA9IGQuZ2V0VmFyKCdTSVRFX0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIGN1cnJlbnRfc2NvbmYgIT0gc2NvbmZfdmVyc2lvbjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBzaXRlLmNvbmYgd2FzIGdlbmVyYXRlZCBmcm9tIGFuIG9sZGVyIHZlcnNpb24gb2Ygc2l0ZS5jb25mLnNhbXBsZSBhbmQgdGhlcmUgaGF2ZSBiZWVuIHVwZGF0ZXMgbWFkZSB0byB0aGlzIGZpbGUuIFBsZWFzZSBjb21wYXJlIHRoZSB0d28gZmlsZXMgYW5kIG1lcmdlIGFueSBjaGFuZ2VzIGJlZm9yZSBjb250aW51aW5nLlxuTWF0Y2hpbmcgdGhlIHZlcnNpb24gbnVtYmVycyB3aWxsIHJlbW92ZSB0aGlzIG1lc3NhZ2UuXG5cIm1lbGQgY29uZi9zaXRlLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9zaXRlLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNoYW5nZXMuXG4iKQorCisKK2RlZiBzYW5pdHlfaGFuZGxlX2FiaWNoYW5nZXMoc3RhdHVzLCBkKToKKyAgICAjCisgICAgIyBDaGVjayB0aGUgJ0FCSScgb2YgVE1QRElSCisgICAgIworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBjdXJyZW50X2FiaSA9IGQuZ2V0VmFyKCdPRUxBWU9VVF9BQkknLCBUcnVlKQorICAgIGFiaWZpbGUgPSBkLmdldFZhcignU0FOSVRZX0FCSUZJTEUnLCBUcnVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGFiaWZpbGUpOgorICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgYWJpID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICBpZiBub3QgYWJpLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjIiIGFuZCBjdXJyZW50X2FiaSA9PSAiMyI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgZnJvbSBsYXlvdXQgdmVyc2lvbiAyIHRvIGxheW91dCB2ZXJzaW9uIDMiKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1RNUERJUn0vc3RhZ2luZyAke1RNUERJUn0vc3lzcm9vdHMiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibG4gLXMgc3lzcm9vdHMgJHtUTVBESVJ9L3N0YWdpbmciKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgiY2QgJHtUTVBESVJ9L3N0YW1wczsgZm9yIGkgaW4gKi8qZG9fcG9wdWxhdGVfc3RhZ2luZzsgZG8gbmV3PWBlY2hvICRpIHwgc2VkIC1lICdzL2RvX3BvcHVsYXRlX3N0YWdpbmcvZG9fcG9wdWxhdGVfc3lzcm9vdC8nYDsgbXYgJGkgJG5ldzsgZG9uZSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMyIgYW5kIGN1cnJlbnRfYWJpID09ICI0IjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBsYXlvdXQgZnJvbSB2ZXJzaW9uIDMgdG8gbGF5b3V0IHZlcnNpb24gNCIpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmV4cGFuZCgiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iKSk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSAke1NUQUdJTkdfQklORElSX0NST1NTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibG4gLXMgJHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke01VTFRJTUFDSF9IT1NUX1NZU30iKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiBhYmkgPT0gIjQiOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiU3RhZ2luZyBsYXlvdXQgaGFzIGNoYW5nZWQuIFRoZSBjcm9zcyBkaXJlY3RvcnkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgY3Jvc3MgcGFja2FnZXMgYXJlIG5vdyBidWlsdCB1bmRlciB0aGUgbmF0aXZlIHN5c3Jvb3QuXG5UaGlzIHJlcXVpcmVzIGEgcmVidWlsZC5cbiIpCisgICAgICAgIGVsaWYgYWJpID09ICI1IiBhbmQgY3VycmVudF9hYmkgPT0gIjYiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gNSB0byBsYXlvdXQgdmVyc2lvbiA2IikKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgibXYgJHtUTVBESVJ9L3BzdGFnZWxvZ3MgJHtTU1RBVEVfTUFOSUZFU1RTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiNyIgYW5kIGN1cnJlbnRfYWJpID09ICI4IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyBzdGFtcCBmaWxlcyBpbmNsdWRpbmcgdGhlIHNzdGF0ZSBoYXNoIGJ1dCB5b3VyIGJ1aWxkIGRpcmVjdG9yeSB3YXMgYnVpbHQgd2l0aCBzdGFtcCBmaWxlcyB0aGF0IGRvIG5vdCBpbmNsdWRlIHRoaXMuXG5UbyBjb250aW51ZSwgZWl0aGVyIHJlYnVpbGQgb3Igc3dpdGNoIGJhY2sgdG8gdGhlIE9FQmFzaWMgc2lnbmF0dXJlIGhhbmRsZXIgd2l0aCBCQl9TSUdOQVRVUkVfSEFORExFUiA9ICdPRUJhc2ljJy5cbiIpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSBhbmQgY3VycmVudF9hYmkgPT0gIjkiKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRoZSBsYXlvdXQgb2YgdGhlIFRNUERJUiBTVEFNUFMgZGlyZWN0b3J5IGhhcyBjaGFuZ2VkLiBQbGVhc2UgY2xlYW4gb3V0IFRNUERJUiBhbmQgcmVidWlsZCAoc3N0YXRlIHdpbGwgYmUgc3RpbGwgYmUgdmFsaWQgYW5kIHJldXNlZClcbiIpCisgICAgICAgIGVsaWYgKGFiaSAhPSBjdXJyZW50X2FiaSBhbmQgY3VycmVudF9hYmkgPT0gIjEwIiBhbmQgKGFiaSA9PSAiOCIgb3IgYWJpID09ICI5IikpOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gOC85IHRvIGxheW91dCB2ZXJzaW9uIDEwIikKKyAgICAgICAgICAgIGNtZCA9IGQuZXhwYW5kKCJncmVwIC1yIC1sIHN5c3Jvb3QtcHJvdmlkZXJzL3ZpcnR1YWxfa2VybmVsICR7U1NUQVRFX01BTklGRVNUU30iKQorICAgICAgICAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJVbmluc3RhbGxpbmcgbWFuaWZlc3QgZmlsZSAlcyIgJSBmKQorICAgICAgICAgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChmLCBkKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMTAiIGFuZCBjdXJyZW50X2FiaSA9PSAiMTEiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gMTAgdG8gbGF5b3V0IHZlcnNpb24gMTEiKQorICAgICAgICAgICAgIyBGaWxlcyBpbiB4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIG1vdmVkIHRvIHhzZXJ2ZXIteG9yZyBhbmQgYml0YmFrZSBjYW4ndCBjdXJyZW50bHkgaGFuZGxlIHRoYXQ6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoInJtICR7VE1QRElSfS9zeXNyb290cy8qL3Vzci9saWIveG9yZy9tb2R1bGVzL2RyaXZlcnMvbW9kZXNldHRpbmdfZHJ2LnNvICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvcnVudGltZS94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3J1bnRpbWUtcmV2ZXJzZS94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiAke1RNUERJUn0vc3lzcm9vdHMvKi9wa2dkYXRhL3NobGliczIveGY4Ni12aWRlby1tb2Rlc2V0dGluZyoiKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpKToKKyAgICAgICAgICAgICMgQ29kZSB0byBjb252ZXJ0IGZyb20gb25lIEFCSSB0byBhbm90aGVyIGNvdWxkIGdvIGhlcmUgaWYgcG9zc2libGUuCisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGl0cyBsYXlvdXQgdmVyc2lvbiBudW1iZXIgKCVzIHRvICVzKSBhbmQgeW91IG5lZWQgdG8gZWl0aGVyIHJlYnVpbGQsIHJldmVydCBvciBhZGp1c3QgaXQgYXQgeW91ciBvd24gcmlzay5cbiIgJSAoYWJpLCBjdXJyZW50X2FiaSkpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisKK2RlZiBjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2RpciwgZGF0YSk6CisgICAgIyBTYW5pdHkgY2hlY2tzIHRvIGJlIGRvbmUgd2hlbiB0aGUgdmFsdWUgb2YgU1NUQVRFX0RJUiBjaGFuZ2VzCisKKyAgICAjIENoZWNrIHRoYXQgU1NUQVRFX0RJUiBpc24ndCBvbiBhIGZpbGVzeXN0ZW0gd2l0aCBsaW1pdGVkIGZpbGVuYW1lIGxlbmd0aCAoZWcuIGVDcnlwdEZTKQorICAgIHRlc3Rtc2cgPSAiIgorICAgIGlmIHNzdGF0ZV9kaXIgIT0gIiI6CisgICAgICAgIHRlc3Rtc2cgPSBjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZShzc3RhdGVfZGlyLCAiU1NUQVRFX0RJUiIpCisgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBTU1RBVEVfRElSLCBzdWdnZXN0IHRoZSB1c2VyIHNldCBpdCBhcyBhbiBTU1RBVEVfTUlSUk9SUworICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnIgPSB0ZXN0bXNnLnNwbGl0KCc6ICcpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGVyciA9PSAiUGVybWlzc2lvbiBkZW5pZWQuIjoKKyAgICAgICAgICAgICAgICB0ZXN0bXNnID0gdGVzdG1zZyArICJZb3UgY291bGQgdHJ5IHVzaW5nICVzIGluIFNTVEFURV9NSVJST1JTIHJhdGhlciB0aGFuIGFzIGFuIFNTVEFURV9DQUNIRS5cbiIgJSAoc3N0YXRlX2RpcikKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIHRlc3Rtc2cKKyAgICAgICAKK2RlZiBjaGVja19zYW5pdHlfdmVyc2lvbl9jaGFuZ2Uoc3RhdHVzLCBkKToKKyAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIFNBTklUWV9WRVJTSU9OIGNoYW5nZXMKKyAgICAjIEluIG90aGVyIHdvcmRzLCB0aGVzZSB0ZXN0cyBydW4gb25jZSBpbiBhIGdpdmVuIGJ1aWxkIGRpcmVjdG9yeSBhbmQgdGhlbiAKKyAgICAjIG5ldmVyIGFnYWluIHVudGlsIHRoZSBzYW5pdHkgdmVyc2lvbiBjaGFuZ2VzLgorCisgICAgIyBDaGVjayB0aGUgcHl0aG9uIGluc3RhbGwgaXMgY29tcGxldGUuIGdsaWItMi4wLW5hdGl2ZXMgcmVxdXJpZXMKKyAgICAjIHhtbC5wYXJzZXJzLmV4cGF0CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgeG1sLnBhcnNlcnMuZXhwYXQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1lvdXIgcHl0aG9uIGlzIG5vdCBhIGZ1bGwgaW5zdGFsbC4gUGxlYXNlIGluc3RhbGwgdGhlIG1vZHVsZSB4bWwucGFyc2Vycy5leHBhdCAocHl0aG9uLXhtbCBvbiBvcGVuU1VTRSBhbmQgU1VTRSBMaW51eCkuXG4nKQorICAgIGltcG9ydCBzdGF0CisKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX21ha2VfdmVyc2lvbihkKSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Rhcl92ZXJzaW9uKGQpKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfZ2l0X3ZlcnNpb24oZCkpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19wZXJsX21vZHVsZXMoZCkpCisKKyAgICBtaXNzaW5nID0gIiIKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCIke01BS0V9IiwgZCk6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nICsgIkdOVSBtYWtlLCIKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nY2MnLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQyBDb21waWxlciAoJXNnY2MpLCIgJSBkLmdldFZhcigiQlVJTERfUFJFRklYIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCcke0JVSUxEX1BSRUZJWH1nKysnLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiQysrIENvbXBpbGVyICglc2crKyksIiAlIGQuZ2V0VmFyKCJCVUlMRF9QUkVGSVgiLCBUcnVlKQorCisgICAgcmVxdWlyZWRfdXRpbGl0aWVzID0gZC5nZXRWYXIoJ1NBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMnLCBUcnVlKQorCisgICAgZm9yIHV0aWwgaW4gcmVxdWlyZWRfdXRpbGl0aWVzLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKHV0aWwsIGQpOgorICAgICAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiJXMsIiAlIHV0aWwKKworICAgIGlmIG1pc3Npbmc6CisgICAgICAgIG1pc3NpbmcgPSBtaXNzaW5nLnJzdHJpcCgnLCcpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBsZWFzZSBpbnN0YWxsIHRoZSBmb2xsb3dpbmcgbWlzc2luZyB1dGlsaXRpZXM6ICVzXG4iICUgbWlzc2luZykKKworICAgIGFzc3VtZV9wcm92aWRlZCA9IGQuZ2V0VmFyKCdBU1NVTUVfUFJPVklERUQnLCBUcnVlKS5zcGxpdCgpCisgICAgIyBDaGVjayB1c2VyIGRvZXNuJ3QgaGF2ZSBBU1NVTUVfUFJPVklERUQgPSBpbnN0ZWFkIG9mICs9IGluIGxvY2FsLmNvbmYKKyAgICBpZiAiZGlmZnN0YXQtbmF0aXZlIiBub3QgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2UgdXNlIEFTU1VNRV9QUk9WSURFRCArPSwgbm90IEFTU1VNRV9QUk9WSURFRCA9IGluIHlvdXIgbG9jYWwuY29uZlxuJykKKworICAgIGlmICJxZW11LW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygicWVtdS1hcm0iLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoInFlbXUtbmF0aXZlIHdhcyBpbiBBU1NVTUVfUFJPVklERUQgYnV0IHRoZSBRRU1VIGJpbmFyaWVzIChxZW11LWFybSkgY2FuJ3QgYmUgZm91bmQgaW4gUEFUSCIpCisKKyAgICBpZiAibGlic2RsLW5hdGl2ZSIgaW4gYXNzdW1lX3Byb3ZpZGVkOgorICAgICAgICBpZiBub3QgY2hlY2tfYXBwX2V4aXN0cygic2RsLWNvbmZpZyIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgibGlic2RsLW5hdGl2ZSBpcyBzZXQgdG8gYmUgQVNTVU1FX1BST1ZJREVEIGJ1dCBzZGwtY29uZmlnIGNhbid0IGJlIGZvdW5kIGluIFBBVEguIFBsZWFzZSBlaXRoZXIgaW5zdGFsbCBpdCwgb3IgY29uZmlndXJlIHFlbXUgbm90IHRvIHJlcXVpcmUgc2RsLiIpCisKKyAgICAocmVzdWx0LCBtZXNzYWdlKSA9IGNoZWNrX2djY19tYXJjaChkKQorICAgIGlmIHJlc3VsdCBhbmQgbWVzc2FnZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBnY2MgdmVyc2lvbiBpcyBvbGRlciB0aGFuIDQuNSwgcGxlYXNlIGFkZCB0aGUgZm9sbG93aW5nIHBhcmFtIHRvIGxvY2FsLmNvbmZcbiBcCisgICAgICAgICVzXG4iICUgbWVzc2FnZSkKKyAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIGdjYyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gNC41IG9yIGlzIG5vdCB3b3JraW5nIHByb3Blcmx5LiAgUGxlYXNlIHZlcmlmeSB5b3UgY2FuIGJ1aWxkIikKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiIGFuZCBsaW5rIHNvbWV0aGluZyB0aGF0IHVzZXMgYXRvbWljIG9wZXJhdGlvbnMsIHN1Y2ggYXM6IFxuIikKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiICAgICAgICBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwICgmYXRvbWljLCAyLCAzKTtcbiIpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGlzbid0IG9uIGEgZmlsZXN5c3RlbSB3aXRoIGxpbWl0ZWQgZmlsZW5hbWUgbGVuZ3RoIChlZy4gZUNyeXB0RlMpCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19jcmVhdGVfbG9uZ19maWxlbmFtZSh0bXBkaXIsICJUTVBESVIiKSkKKyAgICB0bXBkaXJtb2RlID0gb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUKKyAgICBpZiAodG1wZGlybW9kZSAmIHN0YXQuU19JU0dJRCk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlRNUERJUiBpcyBzZXRnaWQsIHBsZWFzZSBkb24ndCBidWlsZCBpbiBhIHNldGdpZCBkaXJlY3RvcnkiKQorICAgIGlmICh0bXBkaXJtb2RlICYgc3RhdC5TX0lTVUlEKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVE1QRElSIGlzIHNldHVpZCwgcGxlYXNlIGRvbid0IGJ1aWxkIGluIGEgc2V0dWlkIGRpcmVjdG9yeSIpCisKKyAgICAjIFNvbWUgdGhpcmQtcGFydHkgc29mdHdhcmUgYXBwYXJlbnRseSByZWxpZXMgb24gY2htb2QgZXRjLiBiZWluZyBzdWlkIHJvb3QgKCEhKQorICAgIGltcG9ydCBzdGF0CisgICAgc3VpZF9jaGVja19iaW5zID0gImNob3duIGNobW9kIG1rbm9kIi5zcGxpdCgpCisgICAgZm9yIGJpbl9jbWQgaW4gc3VpZF9jaGVja19iaW5zOgorICAgICAgICBiaW5fcGF0aCA9IGJiLnV0aWxzLndoaWNoKG9zLmVudmlyb25bIlBBVEgiXSwgYmluX2NtZCkKKyAgICAgICAgaWYgYmluX3BhdGg6CisgICAgICAgICAgICBiaW5fc3RhdCA9IG9zLnN0YXQoYmluX3BhdGgpCisgICAgICAgICAgICBpZiBiaW5fc3RhdC5zdF91aWQgPT0gMCBhbmQgYmluX3N0YXQuc3RfbW9kZSAmIHN0YXQuU19JU1VJRDoKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCclcyBoYXMgdGhlIHNldHVpZCBiaXQgc2V0LiBUaGlzIGludGVyZmVyZXMgd2l0aCBwc2V1ZG8gYW5kIG1heSBjYXVzZSBvdGhlciBpc3N1ZXMgdGhhdCBicmVhayB0aGUgYnVpbGQgcHJvY2Vzcy5cbicgJSBiaW5fcGF0aCkKKworICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4gZmV0Y2ggZnJvbSB2YXJpb3VzIG5ldHdvcmsgdHJhbnNwb3J0cworICAgIG5ldGNoZWNrID0gY2hlY2tfY29ubmVjdGl2aXR5KGQpCisgICAgc3RhdHVzLmFkZHJlc3VsdChuZXRjaGVjaykKKyAgICBpZiBuZXRjaGVjazoKKyAgICAgICAgc3RhdHVzLm5ldHdvcmtfZXJyb3IgPSBUcnVlCisKKyAgICBub2xpYnMgPSBkLmdldFZhcignTk8zMkxJQlMnLCBUcnVlKQorICAgIGlmIG5vdCBub2xpYnM6CisgICAgICAgIGxpYjMycGF0aCA9ICcvbGliJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2xpYjY0JykgYW5kICggb3MucGF0aC5pc2xpbmsoJy9saWI2NCcpIG9yIG9zLnBhdGguaXNsaW5rKCcvbGliJykgKToKKyAgICAgICAgICAgbGliMzJwYXRoID0gJy9saWIzMicKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvbGliYy5zby42JyAlIGxpYjMycGF0aCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cygnL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oJyk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3UgaGF2ZSBhIDMyLWJpdCBsaWJjLCBidXQgbm8gMzItYml0IGhlYWRlcnMuICBZb3UgbXVzdCBpbnN0YWxsIHRoZSAzMi1iaXQgbGliYyBoZWFkZXJzLlxuIikKKworICAgIGJicGF0aHMgPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGlmICgiLiIgaW4gYmJwYXRocyBvciAiLi8iIGluIGJicGF0aHMgb3IgIiIgaW4gYmJwYXRocykgYW5kIG5vdCBzdGF0dXMucmVwYXJzZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiQkJQQVRIIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBlaXRoZXIgdGhyb3VnaCAiICAgIFwKKyAgICAgICAgICAgICAgICAiYW4gZW1wdHkgZW50cnksIGEgJy4vJyBvciBhICcuJy5cblx0IFRoaXMgaXMgdW5zYWZlIGFuZCBtZWFucyB5b3VyICJcCisgICAgICAgICAgICAgICAgImxheWVyIGNvbmZpZ3VyYXRpb24gaXMgYWRkaW5nIGVtcHR5IGVsZW1lbnRzIHRvIEJCUEFUSC5cblx0ICJcCisgICAgICAgICAgICAgICAgIlBsZWFzZSBjaGVjayB5b3VyIGxheWVyLmNvbmYgZmlsZXMgYW5kIG90aGVyIEJCUEFUSCAiICAgICAgICBcCisgICAgICAgICAgICAgICAgInNldHRpbmdzIHRvIHJlbW92ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAiICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgInJlZmVyZW5jZXMuXG4iIFwKKyAgICAgICAgICAgICAgICAiUGFyc2VkIEJCUEFUSCBpcyIgKyBzdHIoYmJwYXRocykpOworCisgICAgb2VzX2JiX2NvbmYgPSBkLmdldFZhciggJ09FU19CSVRCQUtFX0NPTkYnLCBUcnVlKQorICAgIGlmIG5vdCBvZXNfYmJfY29uZjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnWW91IGFyZSBub3QgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCB2ZXJzaW9uIG9mIGNvbmYvYml0YmFrZS5jb25mLiBUaGlzIG1lYW5zIHlvdXIgZW52aXJvbm1lbnQgaXMgbWlzY29uZmlndXJlZCwgaW4gcGFydGljdWxhciBjaGVjayBCQlBBVEguXG4nKQorCisgICAgIyBUaGUgbGVuZ3RoIG9mIFRNUERJUiBjYW4ndCBiZSBsb25nZXIgdGhhbiA0MTAKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3BhdGhfbGVuZ3RoKHRtcGRpciwgIlRNUERJUiIsIDQxMCkpCisKKyAgICAjIENoZWNrIHRoYXQgVE1QRElSIGlzbid0IGxvY2F0ZWQgb24gbmZzCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19ub3RfbmZzKHRtcGRpciwgIlRNUERJUiIpKQorCitkZWYgY2hlY2tfc2FuaXR5X2V2ZXJ5YnVpbGQoc3RhdHVzLCBkKToKKyAgICBpbXBvcnQgb3MsIHN0YXQKKyAgICAjIFNhbml0eSB0ZXN0cyB3aGljaCB0ZXN0IHRoZSB1c2VycyBlbnZpcm9ubWVudCBzbyBuZWVkIHRvIHJ1biBhdCBlYWNoIGJ1aWxkIChvciBhcmUgc28gY2hlYXAKKyAgICAjIGl0IG1ha2VzIHNlbnNlIHRvIGFsd2F5cyBydW4gdGhlbS4KKworICAgIGlmIDAgPT0gb3MuZ2V0dWlkKCk6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiRG8gbm90IHVzZSBCaXRiYWtlIGFzIHJvb3QuIiwgZCkKKworICAgICMgQ2hlY2sgdGhlIFB5dGhvbiB2ZXJzaW9uLCB3ZSBub3cgaGF2ZSBhIG1pbmltdW0gb2YgUHl0aG9uIDIuNy4zCisgICAgaW1wb3J0IHN5cworICAgIGlmIHN5cy5oZXh2ZXJzaW9uIDwgMHgwMjA3MDNGMDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnVGhlIHN5c3RlbSByZXF1aXJlcyBhdCBsZWFzdCBQeXRob24gMi43LjMgdG8gcnVuLiBQbGVhc2UgdXBkYXRlIHlvdXIgUHl0aG9uIGludGVycHJldGVyLlxuJykKKworICAgICMgQ2hlY2sgdGhlIGJpdGJha2UgdmVyc2lvbiBtZWV0cyBtaW5pbXVtIHJlcXVpcmVtZW50cworICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorICAgIG1pbnZlcnNpb24gPSBkLmdldFZhcignQkJfTUlOX1ZFUlNJT04nLCBUcnVlKQorICAgIGlmIChMb29zZVZlcnNpb24oYmIuX192ZXJzaW9uX18pIDwgTG9vc2VWZXJzaW9uKG1pbnZlcnNpb24pKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnQml0YmFrZSB2ZXJzaW9uICVzIGlzIHJlcXVpcmVkIGFuZCB2ZXJzaW9uICVzIHdhcyBmb3VuZFxuJyAlIChtaW52ZXJzaW9uLCBiYi5fX3ZlcnNpb25fXykpCisKKyAgICBzYW5pdHlfY2hlY2tfY29uZmZpbGVzKHN0YXR1cywgZCkKKworICAgIHBhdGhzID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgaWYgIi4iIGluIHBhdGhzIG9yICIuLyIgaW4gcGF0aHMgb3IgIiIgaW4gcGF0aHM6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIlBBVEggY29udGFpbnMgJy4nLCAnLi8nIG9yICcnIChlbXB0eSBlbGVtZW50KSwgd2hpY2ggd2lsbCBicmVhayB0aGUgYnVpbGQsIHBsZWFzZSByZW1vdmUgdGhpcy5cblBhcnNlZCBQQVRIIGlzICIgKyBzdHIocGF0aHMpICsgIlxuIikKKworICAgICMgQ2hlY2sgdGhhdCB0aGUgRElTVFJPIGlzIHZhbGlkLCBpZiBzZXQKKyAgICAjIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgRElTVFJPIHJlbmFtaW5nIERJU1RSTworICAgIGRpc3RybyA9IGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKQorICAgIGlmIGRpc3RybyBhbmQgZGlzdHJvICE9ICJub2Rpc3RybyI6CisgICAgICAgIGlmIG5vdCAoIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL2Rpc3Ryby8ke0RJU1RST30uY29uZiIsIGQpIG9yIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL2Rpc3Ryby9pbmNsdWRlLyR7RElTVFJPfS5pbmMiLCBkKSApOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRElTVFJPICclcycgbm90IGZvdW5kLiBQbGVhc2Ugc2V0IGEgdmFsaWQgRElTVFJPIGluIHlvdXIgbG9jYWwuY29uZlxuIiAlIGQuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKSkKKworICAgICMgQ2hlY2sgdGhhdCBETF9ESVIgaXMgc2V0LCBleGlzdHMgYW5kIGlzIHdyaXRhYmxlLiBJbiB0aGVvcnksIHdlIHNob3VsZCBuZXZlciBldmVuIGhpdCB0aGUgY2hlY2sgaWYgRExfRElSIGlzbid0IAorICAgICMgc2V0LCBzaW5jZSBzbyBtdWNoIHJlbGllcyBvbiBpdCBiZWluZyBzZXQuCisgICAgZGxkaXIgPSBkLmdldFZhcignRExfRElSJywgVHJ1ZSkKKyAgICBpZiBub3QgZGxkaXI6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkRMX0RJUiBpcyBub3Qgc2V0LiBZb3VyIGVudmlyb25tZW50IGlzIG1pc2NvbmZpZ3VyZWQsIGNoZWNrIHRoYXQgRExfRElSIGlzIHNldCwgYW5kIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCB0aGF0IGl0IGlzIHdyaXRhYmxlLiBcbiIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoZGxkaXIpIGFuZCBub3Qgb3MuYWNjZXNzKGRsZGlyLCBvcy5XX09LKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRExfRElSOiAlcyBleGlzdHMgYnV0IHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGl0LiBcbiIgJSBkbGRpcikKKyAgICBjaGVja19zeW1saW5rKGRsZGlyLCBkKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBNQUNISU5FIGlzIHZhbGlkLCBpZiBpdCBpcyBzZXQKKyAgICBtYWNoaW5ldmFsaWQgPSBUcnVlCisgICAgaWYgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKToKKyAgICAgICAgaWYgbm90IGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL21hY2hpbmUvJHtNQUNISU5FfS5jb25mIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdQbGVhc2Ugc2V0IGEgdmFsaWQgTUFDSElORSBpbiB5b3VyIGxvY2FsLmNvbmYgb3IgZW52aXJvbm1lbnRcbicpCisgICAgICAgICAgICBtYWNoaW5ldmFsaWQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfdmFsaWRtYWNoaW5lKGQpKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSBzZXQgYSBNQUNISU5FIGluIHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJykKKyAgICAgICAgbWFjaGluZXZhbGlkID0gRmFsc2UKKyAgICBpZiBtYWNoaW5ldmFsaWQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfdG9vbGNoYWluKGQpKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBTREtNQUNISU5FIGlzIHZhbGlkLCBpZiBpdCBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpOgorICAgICAgICBpZiBub3QgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvbWFjaGluZS1zZGsvJHtTREtNQUNISU5FfS5jb25mIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdTcGVjaWZpZWQgU0RLTUFDSElORSB2YWx1ZSBpcyBub3QgdmFsaWRcbicpCisgICAgICAgIGVsaWYgZC5nZXRWYXIoJ1NES19BUkNIJywgRmFsc2UpID09ICIke0JVSUxEX0FSQ0h9IjoKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1NES01BQ0hJTkUgaXMgc2V0LCBidXQgU0RLX0FSQ0ggaGFzIG5vdCBiZWVuIGNoYW5nZWQgYXMgYSByZXN1bHQgLSBTREtNQUNISU5FIG1heSBoYXZlIGJlZW4gc2V0IHRvbyBsYXRlIChlLmcuIGluIHRoZSBkaXN0cm8gY29uZmlndXJhdGlvbilcbicpCisKKyAgICBjaGVja19zdXBwb3J0ZWRfZGlzdHJvKGQpCisKKyAgICAjIENoZWNrIGlmIERJU1BMQVkgaXMgc2V0IGlmIFRFU1RfSU1BR0UgaXMgc2V0CisgICAgaWYgZC5nZXRWYXIoJ1RFU1RfSU1BR0UnLCBUcnVlKSA9PSAnMScgb3IgZC5nZXRWYXIoJ0RFRkFVTFRfVEVTVF9TVUlURVMnLCBUcnVlKToKKyAgICAgICAgdGVzdHRhcmdldCA9IGQuZ2V0VmFyKCdURVNUX1RBUkdFVCcsIFRydWUpCisgICAgICAgIGlmIHRlc3R0YXJnZXQgPT0gJ3FlbXUnIG9yIHRlc3R0YXJnZXQgPT0gJ1FlbXVUYXJnZXQnOgorICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgZGlzcGxheToKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCd0ZXN0aW1hZ2UgbmVlZHMgYW4gWCBkZXNrdG9wIHRvIHN0YXJ0IHFlbXUsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MS4wKVxuJykKKworICAgIG9tYXNrID0gb3MudW1hc2soMDIyKQorICAgIGlmIG9tYXNrICYgMDc1NToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUGxlYXNlIHVzZSBhIHVtYXNrIHdoaWNoIGFsbG93cyBhK3J4IGFuZCB1K3J3eFxuIikKKyAgICBvcy51bWFzayhvbWFzaykKKworICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpID09ICJhcm0iOgorICAgICAgICAjIFRoaXMgcGF0aCBpcyBubyBsb25nZXIgdXNlci1yZWFkYWJsZSBpbiBtb2Rlcm4gKHZlcnkgcmVjZW50KSBMaW51eAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIiKToKKyAgICAgICAgICAgICAgICBmID0gb3BlbigiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIiLCAiciIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiAoaW50KGYucmVhZCgpLnN0cmlwKCkpID4gNjU1MzYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgaXMgbm90IDw9IDY1NTM2LiBUaGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aCBxZW11IHNvIHBsZWFzZSBmaXggdGhlIHZhbHVlIChhcyByb290KS5cblxuVG8gZml4IHRoaXMgaW4gbGF0ZXIgcmVib290cywgc2V0IHZtLm1tYXBfbWluX2FkZHIgPSA2NTUzNiBpbiAvZXRjL3N5c2N0bC5jb25mLlxuIikKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgb2Vyb290ID0gZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkKKyAgICBpZiBvZXJvb3QuZmluZCgnKycpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKCspIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGFueSArIGNoYXJhY3RlcnMuIikKKyAgICBpZiBvZXJvb3QuZmluZCgnQCcpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYW4gaW52YWxpZCBjaGFyYWN0ZXIgKEApIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGFueSBAIGNoYXJhY3RlcnMuIikKKyAgICBpZiBvZXJvb3QuZmluZCgnICcpICE9IC0xOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgeW91IGhhdmUgYSBzcGFjZSBpbiB5b3VyIENPUkVCQVNFIGRpcmVjdG9yeSBwYXRoLiBQbGVhc2UgbW92ZSB0aGUgaW5zdGFsbGF0aW9uIHRvIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSBhIHNwYWNlIHNpbmNlIGF1dG90b29scyBkb2Vzbid0IHN1cHBvcnQgdGhpcy4iKQorCisgICAgIyBDaGVjayB0aGUgZm9ybWF0IG9mIE1JUlJPUlMsIFBSRU1JUlJPUlMgYW5kIFNTVEFURV9NSVJST1JTCisgICAgaW1wb3J0IHJlCisgICAgbWlycm9yX3ZhcnMgPSBbJ01JUlJPUlMnLCAnUFJFTUlSUk9SUycsICdTU1RBVEVfTUlSUk9SUyddCisgICAgcHJvdG9jb2xzID0gWydodHRwJywgJ2Z0cCcsICdmaWxlJywgJ2h0dHBzJywgXAorICAgICAgICAgICAgICAgICAnZ2l0JywgJ2dpdHNtJywgJ2hnJywgJ29zYycsICdwNCcsICdzdm4nLCBcCisgICAgICAgICAgICAgICAgICdienInLCAnY3ZzJ10KKyAgICBmb3IgbWlycm9yX3ZhciBpbiBtaXJyb3JfdmFyczoKKyAgICAgICAgbWlycm9ycyA9IChkLmdldFZhcihtaXJyb3JfdmFyLCBUcnVlKSBvciAnJykucmVwbGFjZSgnXFxuJywgJ1xuJykuc3BsaXQoJ1xuJykKKyAgICAgICAgZm9yIG1pcnJvcl9lbnRyeSBpbiBtaXJyb3JzOgorICAgICAgICAgICAgbWlycm9yX2VudHJ5ID0gbWlycm9yX2VudHJ5LnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBtaXJyb3JfZW50cnk6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgYmxhbmsgbGluZXMKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybiwgbWlycm9yID0gbWlycm9yX2VudHJ5LnNwbGl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgJXM6ICVzLCBzaG91bGQgYmUgMiBtZW1iZXJzLicgJSAobWlycm9yX3ZhciwgbWlycm9yX2VudHJ5LnN0cmlwKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlY29kZWQgPSBiYi5mZXRjaDIuZGVjb2RldXJsKHBhdHRlcm4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGF0dGVybl9zY2hlbWUgPSByZS5jb21waWxlKGRlY29kZWRbMF0pCisgICAgICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgc2NoZW1lIHJlZ2V4ICglcykgaW4gJXM7ICVzJyAlIChwYXR0ZXJuLCBtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocGF0dGVybl9zY2hlbWUubWF0Y2gocHJvdG9jb2wpIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHMpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgcHJvdG9jb2wgKCVzKSBpbiAlczogJXMnICUgKGRlY29kZWRbMF0sIG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGFueShtaXJyb3Iuc3RhcnRzd2l0aChwcm90b2NvbCArICc6Ly8nKSBmb3IgcHJvdG9jb2wgaW4gcHJvdG9jb2xzKToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdJbnZhbGlkIHByb3RvY29sIGluICVzOiAlcycgJSAobWlycm9yX3ZhciwgbWlycm9yX2VudHJ5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBtaXJyb3Iuc3RhcnRzd2l0aCgnZmlsZTovLycpOgorICAgICAgICAgICAgICAgIGltcG9ydCB1cmxwYXJzZQorICAgICAgICAgICAgICAgIGNoZWNrX3N5bWxpbmsodXJscGFyc2UudXJscGFyc2UobWlycm9yKS5wYXRoLCBkKQorICAgICAgICAgICAgICAgICMgU1NUQVRFX01JUlJPUiBlbmRzIHdpdGggYSAvUEFUSCBzdHJpbmcKKyAgICAgICAgICAgICAgICBpZiBtaXJyb3IuZW5kc3dpdGgoJy9QQVRIJyk6CisgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIC9QQVRIJCBmcm9tIFNTVEFURV9NSVJST1IgdG8gZ2V0IGEgd29ya2luZworICAgICAgICAgICAgICAgICAgICAjIGJhc2UgZGlyZWN0b3J5IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgbWlycm9yX2Jhc2UgPSB1cmxwYXJzZS51cmxwYXJzZShtaXJyb3JbOi0xKmxlbignL1BBVEgnKV0pLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tfc3ltbGluayhtaXJyb3JfYmFzZSwgZCkKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaGFzbid0IGNoYW5nZWQgbG9jYXRpb24gc2luY2UgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIHJ1bgorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGNoZWNrZmlsZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJzYXZlZF90bXBkaXIiKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGNoZWNrZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNhdmVkX3RtcGRpciA9IGYucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIChzYXZlZF90bXBkaXIgIT0gdG1wZGlyKToKKyAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgVE1QRElSIGhhcyBjaGFuZ2VkIGxvY2F0aW9uLiBZb3UgbmVlZCB0byBlaXRoZXIgbW92ZSBpdCBiYWNrIHRvICVzIG9yIHJlYnVpbGRcbiIgJSBzYXZlZF90bXBkaXIpCisgICAgZWxzZToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRtcGRpcikKKyAgICAgICAgIyBSZW1vdmUgc2V0dWlkLCBzZXRnaWQgYW5kIHN0aWNreSBiaXRzIGZyb20gVE1QRElSCisgICAgICAgIG9zLmNobW9kKHRtcGRpciwgb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUgJiB+IHN0YXQuU19JU1VJRCkKKyAgICAgICAgb3MuY2htb2QodG1wZGlyLCBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZSAmIH4gc3RhdC5TX0lTR0lEKQorICAgICAgICBvcy5jaG1vZCh0bXBkaXIsIG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlICYgfiBzdGF0LlNfSVNWVFgpCisgICAgICAgIHdpdGggb3BlbihjaGVja2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodG1wZGlyKQorCisgICAgIyBDaGVjayB2bWRrIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICd2bWRrJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIGFuZCAnbGl2ZScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIElNQUdFX0ZTVFlQRVMgdm1kayBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlclxuIikKKworICAgICMgQ2hlY2sgdmRpIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICd2ZGknIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgYW5kICdsaXZlJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgSU1BR0VfRlNUWVBFUyB2ZGkgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXJcbiIpCisKKyAgICAjIENoZWNrIHFjb3cyIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyLgorICAgIGlmICdxY293MicgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBhbmQgJ2xpdmUnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBJTUFHRV9GU1RZUEVTIHFjb3cyIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyXG4iKQorCisgICAgIyBDaGVjayAvYmluL3NoIGxpbmtzIHRvIGRhc2ggb3IgYmFzaAorICAgIHJlYWxfc2ggPSBvcy5wYXRoLnJlYWxwYXRoKCcvYmluL3NoJykKKyAgICBpZiBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Rhc2gnKSBhbmQgbm90IHJlYWxfc2guZW5kc3dpdGgoJy9iYXNoJyk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCAvYmluL3NoIGxpbmtzIHRvICVzLCBtdXN0IGJlIGRhc2ggb3IgYmFzaFxuIiAlIHJlYWxfc2gpCisKK2RlZiBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpOgorICAgIGNsYXNzIFNhbml0eVN0YXR1cyhvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzID0gIiIKKyAgICAgICAgICAgIHNlbGYubmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnJlcGFyc2UgPSBGYWxzZQorCisgICAgICAgIGRlZiBhZGRyZXN1bHQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZXMgPSBzZWxmLm1lc3NhZ2VzICsgbWVzc2FnZQorCisgICAgc3RhdHVzID0gU2FuaXR5U3RhdHVzKCkKKworICAgIHRtcGRpciA9IHNhbml0eV9kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBzc3RhdGVfZGlyID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSkKKworICAgIGNoZWNrX3N5bWxpbmsoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpCisKKyAgICAjIENoZWNrIHNhdmVkIHNhbml0eSBpbmZvCisgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IDAKKyAgICBsYXN0X3RtcGRpciA9ICIiCisgICAgbGFzdF9zc3RhdGVfZGlyID0gIiIKKyAgICBzYW5pdHl2ZXJmaWxlID0gc2FuaXR5X2RhdGEuZXhwYW5kKCIke1RPUERJUn0vY29uZi9zYW5pdHlfaW5mbyIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoc2FuaXR5dmVyZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihzYW5pdHl2ZXJmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU0FOSVRZX1ZFUlNJT04nKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9zYW5pdHlfdmVyc2lvbiA9IGludChsaW5lLnNwbGl0KClbMV0pCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdUTVBESVInKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF90bXBkaXIgPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NTVEFURV9ESVInKToKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9zc3RhdGVfZGlyID0gbGluZS5zcGxpdCgpWzFdCisKKyAgICBjaGVja19zYW5pdHlfZXZlcnlidWlsZChzdGF0dXMsIHNhbml0eV9kYXRhKQorICAgIAorICAgIHNhbml0eV92ZXJzaW9uID0gaW50KHNhbml0eV9kYXRhLmdldFZhcignU0FOSVRZX1ZFUlNJT04nLCBUcnVlKSBvciAxKQorICAgIG5ldHdvcmtfZXJyb3IgPSBGYWxzZQorICAgIGlmIGxhc3Rfc2FuaXR5X3ZlcnNpb24gPCBzYW5pdHlfdmVyc2lvbjogCisgICAgICAgIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZShzdGF0dXMsIHNhbml0eV9kYXRhKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkpCisgICAgZWxzZTogCisgICAgICAgIGlmIGxhc3Rfc3N0YXRlX2RpciAhPSBzc3RhdGVfZGlyOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19zYW5pdHlfc3N0YXRlX2Rpcl9jaGFuZ2Uoc3N0YXRlX2Rpciwgc2FuaXR5X2RhdGEpKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKHNhbml0eXZlcmZpbGUpKSBhbmQgbm90IHN0YXR1cy5tZXNzYWdlczoKKyAgICAgICAgd2l0aCBvcGVuKHNhbml0eXZlcmZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIlNBTklUWV9WRVJTSU9OICVzXG4iICUgc2FuaXR5X3ZlcnNpb24pIAorICAgICAgICAgICAgZi53cml0ZSgiVE1QRElSICVzXG4iICUgdG1wZGlyKSAKKyAgICAgICAgICAgIGYud3JpdGUoIlNTVEFURV9ESVIgJXNcbiIgJSBzc3RhdGVfZGlyKSAKKworICAgIHNhbml0eV9oYW5kbGVfYWJpY2hhbmdlcyhzdGF0dXMsIHNhbml0eV9kYXRhKQorCisgICAgaWYgc3RhdHVzLm1lc3NhZ2VzICE9ICIiOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3Ioc2FuaXR5X2RhdGEuZXhwYW5kKHN0YXR1cy5tZXNzYWdlcyksIHNhbml0eV9kYXRhLCBzdGF0dXMubmV0d29ya19lcnJvcikKKyAgICByZXR1cm4gc3RhdHVzLnJlcGFyc2UKKworIyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBkYXRhc3RvcmUgYW5kIGZpbmFsaXNlIGl0IHRvIGVuc3VyZSBhcHBlbmRzIGFuZCAKKyMgb3ZlcnJpZGVzIGFyZSBzZXQgLSB0aGUgZGF0YXN0b3JlIGhhcyB5ZXQgdG8gYmUgZmluYWxpc2VkIGF0IENvbmZpZ1BhcnNlZAorZGVmIGNvcHlfZGF0YShlKToKKyAgICBzYW5pdHlfZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShlLmRhdGEpCisgICAgc2FuaXR5X2RhdGEuZmluYWxpemUoKQorICAgIHJldHVybiBzYW5pdHlfZGF0YQorCithZGRoYW5kbGVyIGNoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXIKK2NoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5TYW5pdHlDaGVjayBiYi5ldmVudC5OZXR3b3JrVGVzdCIKK3B5dGhvbiBjaGVja19zYW5pdHlfZXZlbnRoYW5kbGVyKCkgeworICAgIGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIlNhbml0eUNoZWNrIjoKKyAgICAgICAgc2FuaXR5X2RhdGEgPSBjb3B5X2RhdGEoZSkKKyAgICAgICAgaWYgZS5nZW5lcmF0ZWV2ZW50czoKKyAgICAgICAgICAgIHNhbml0eV9kYXRhLnNldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCAiMSIpCisgICAgICAgIHJlcGFyc2UgPSBjaGVja19zYW5pdHkoc2FuaXR5X2RhdGEpCisgICAgICAgIGUuZGF0YS5zZXRWYXIoIkJCX0lOVkFMSURDT05GIiwgcmVwYXJzZSkKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5TYW5pdHlDaGVja1Bhc3NlZCgpLCBlLmRhdGEpCisgICAgZWxpZiBiYi5ldmVudC5nZXROYW1lKGUpID09ICJOZXR3b3JrVGVzdCI6CisgICAgICAgIHNhbml0eV9kYXRhID0gY29weV9kYXRhKGUpCisgICAgICAgIGlmIGUuZ2VuZXJhdGVldmVudHM6CisgICAgICAgICAgICBzYW5pdHlfZGF0YS5zZXRWYXIoIlNBTklUWV9VU0VfRVZFTlRTIiwgIjEiKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk5ldHdvcmtUZXN0RmFpbGVkKCkgaWYgY2hlY2tfY29ubmVjdGl2aXR5KHNhbml0eV9kYXRhKSBlbHNlIGJiLmV2ZW50Lk5ldHdvcmtUZXN0UGFzc2VkKCksIGUuZGF0YSkKKworICAgIHJldHVybgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGRlODIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Njb25zLmJiY2xhc3MKQEAgLTAsMCArMSwxNSBAQAorREVQRU5EUyArPSAicHl0aG9uLXNjb25zLW5hdGl2ZSIKKworRVhUUkFfT0VTQ09OUyA/PSAiIgorCitzY29uc19kb19jb21waWxlKCkgeworICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vc2NvbnMgJHtQQVJBTExFTF9NQUtFfSBQUkVGSVg9JHtwcmVmaXh9IHByZWZpeD0ke3ByZWZpeH0gJHtFWFRSQV9PRVNDT05TfSB8fCBcCisgICAgICAgIGRpZSAic2NvbnMgYnVpbGQgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK3Njb25zX2RvX2luc3RhbGwoKSB7CisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyBQUkVGSVg9JHtEfSR7cHJlZml4fSBwcmVmaXg9JHtEfSR7cHJlZml4fSBpbnN0YWxsICR7RVhUUkFfT0VTQ09OU318fCBcCisgICAgICAgIGRpZSAic2NvbnMgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zZGwuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zZGwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzMxMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzCkBAIC0wLDAgKzEsNiBAQAorIworIyAoQykgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QFZhbmlsbGUuZGU+CisjCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlic2RsIGxpYnNkbC1taXhlciBsaWJzZGwtaW1hZ2UiCitTRUNUSU9OID0gIngxMS9nYW1lcyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc2V0dXB0b29scy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzQzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2V0dXB0b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBkaXN0dXRpbHMKKworREVQRU5EUyArPSAicHl0aG9uLWRpc3RyaWJ1dGUtbmF0aXZlIgorCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID0gIi0tcm9vdD0ke0R9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNmRkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2V0dXB0b29sczMuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK2luaGVyaXQgZGlzdHV0aWxzMworCitERVBFTkRTICs9ICJweXRob24zLXNldHVwdG9vbHMtbmF0aXZlIgorCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTID0gIi0tcm9vdD0ke0R9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1saWI9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTRjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2lnbl9ycG0uYmJjbGFzcwpAQCAtMCwwICsxLDc1IEBACisjIENsYXNzIGZvciBnZW5lcmF0aW5nIHNpZ25lZCBSUE0gcGFja2FnZXMuCisjCisjIENvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHVzZWQgYnkgdGhpcyBjbGFzczoKKyMgUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUKKyMgICAgICAgICAgIFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHBhc3NwaHJhc2Ugb2YgdGhlIHNpZ25pbmcga2V5LgorIyBSUE1fR1BHX05BTUUKKyMgICAgICAgICAgIE5hbWUgb2YgdGhlIGtleSB0byBzaWduIHdpdGguIEFsdGVybmF0aXZlbHkgeW91IGNhbiBkZWZpbmUKKyMgICAgICAgICAgICVfZ3BnX25hbWUgbWFjcm8gaW4geW91ciB+Ly5vZXJwbW1hY3JvcyBmaWxlLgorIyBSUE1fR1BHX1BVQktFWQorIyAgICAgICAgICAgUGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgcHVibGljIGtleSAoaW4gImFybW9yIiBmb3JtYXQpCisjICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRoZSBzaWduaW5nIGtleS4KKyMgR1BHX0JJTgorIyAgICAgICAgICAgT3B0aW9uYWwgdmFyaWFibGUgZm9yIHNwZWNpZnlpbmcgdGhlIGdwZyBiaW5hcnkvd3JhcHBlciB0byB1c2UgZm9yCisjICAgICAgICAgICBzaWduaW5nLgorIworaW5oZXJpdCBzYW5pdHkKKworUlBNX1NJR05fUEFDS0FHRVM9JzEnCisKKworX2NoZWNrX2dwZ19uYW1lICgpIHsKKyAgICBtYWNyb2RlZj1gcnBtIC1FICclX2dwZ19uYW1lJ2AKKyAgICBbICIkbWFjcm9kZWYiID09ICIlX2dwZ19uYW1lIiBdICYmIHJldHVybiAxIHx8IHJldHVybiAwCit9CisKKworZGVmIHJwbXNpZ25fd3JhcHBlcihkLCBmaWxlcywgcGFzc3BocmFzZSwgZ3BnX25hbWU9Tm9uZSk6CisgICAgaW1wb3J0IHBleHBlY3QKKworICAgICMgRmluZCB0aGUgY29ycmVjdCBycG0gYmluYXJ5CisgICAgcnBtX2Jpbl9wYXRoID0gZC5nZXRWYXIoJ1NUQUdJTkdfQklORElSX05BVElWRScsIFRydWUpICsgJy9ycG0nCisgICAgY21kID0gcnBtX2Jpbl9wYXRoICsgIiAtLWFkZHNpZ24gIgorICAgIGlmIGdwZ19uYW1lOgorICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICclJV9ncGdfbmFtZSAlcycgIiAlIGdwZ19uYW1lCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdfY2hlY2tfZ3BnX25hbWUnLCBkKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZDoKKyAgICAgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIFJQTV9HUEdfTkFNRSBpbiBiaXRiYWtlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmlnIG9yIHRoZSAlX2dwZ19uYW1lIFJQTSBtYWNybyBkZWZpbmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGUuZy4gaW4gIH4vLm9lcnBtbWFjcm9zIiwgZCkKKyAgICBpZiBkLmdldFZhcignR1BHX0JJTicsIFRydWUpOgorICAgICAgICBjbWQgKz0gIi0tZGVmaW5lICclJV9fZ3BnICVzJyAiICUgZC5nZXRWYXIoJ0dQR19CSU4nLCBUcnVlKQorICAgIGNtZCArPSAnICcuam9pbihmaWxlcykKKworICAgICMgTmVlZCB0byB1c2UgcGV4cGVjdCBmb3IgZmVlZGluZyB0aGUgcGFzc3BocmFzZQorICAgIHByb2MgPSBwZXhwZWN0LnNwYXduKGNtZCkKKyAgICB0cnk6CisgICAgICAgIHByb2MuZXhwZWN0X2V4YWN0KCdFbnRlciBwYXNzIHBocmFzZTonLCB0aW1lb3V0PTE1KQorICAgICAgICBwcm9jLnNlbmRsaW5lKHBhc3NwaHJhc2UpCisgICAgICAgIHByb2MuZXhwZWN0KHBleHBlY3QuRU9GLCB0aW1lb3V0PTkwMCkKKyAgICAgICAgcHJvYy5jbG9zZSgpCisgICAgZXhjZXB0IHBleHBlY3QuVElNRU9VVCBhcyBlcnI6CisgICAgICAgIGJiLmRlYnVnKCdycG1zaWduIHRpbWVvdXQ6ICVzJyAlIGVycikKKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKQorICAgIHJldHVybiBwcm9jLmV4aXRzdGF0dXMKKworCitweXRob24gc2lnbl9ycG0gKCkgeworICAgIGltcG9ydCBnbG9iCisKKyAgICBycG1fZ3BnX3Bhc3NfZmlsZSA9IChkLmdldFZhcigiUlBNX0dQR19QQVNTUEhSQVNFX0ZJTEUiLCBUcnVlKSBvciAiIikKKyAgICBpZiBycG1fZ3BnX3Bhc3NfZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKHJwbV9ncGdfcGFzc19maWxlKSBhcyBmb2JqOgorICAgICAgICAgICAgcnBtX2dwZ19wYXNzcGhyYXNlID0gZm9iai5yZWFkbGluZXMoKVswXS5yc3RyaXAoJ1xuJykKKyAgICBlbHNlOgorICAgICAgICByYWlzZV9zYW5pdHlfZXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSBSUE1fR1BHX1BBU1NQSFJBU0VfRklMRSBpbiB0aGUgY29uZmlnIiwgZCkKKworICAgIHJwbV9ncGdfbmFtZSA9IChkLmdldFZhcigiUlBNX0dQR19OQU1FIiwgVHJ1ZSkgb3IgIiIpCisKKyAgICBycG1zID0gZ2xvYi5nbG9iKGQuZ2V0VmFyKCdSUE1fUEtHV1JJVEVESVInLCBUcnVlKSArICcvKicpCisKKyAgICBpZiBycG1zaWduX3dyYXBwZXIoZCwgcnBtcywgcnBtX2dwZ19wYXNzcGhyYXNlLCBycG1fZ3BnX25hbWUpICE9IDA6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlJQTSBzaWduaW5nIGZhaWxlZCIpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2lwLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc2lwLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkMmExMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcwpAQCAtMCwwICsxLDYxIEBACisjIEJ1aWxkIENsYXNzIGZvciBTaXAgYmFzZWQgUHl0aG9uIEJpbmRpbmdzCisjIChDKSBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMKK1NUQUdJTkdfU0lQRElSID89ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3NpcCIKKworREVQRU5EUyAgPSsgInNpcC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNpcCIKKworIyBkZWZhdWx0IHN0dWZmLCBkbyBub3QgdW5jb21tZW50CisjIEVYVFJBX1NJUFRBR1MgPSAiLXRXU19YMTEgLXRRdF80XzNfMCIKKworIyBkb19nZW5lcmF0ZSBpcyBiZWZvcmUgZG9fY29uZmlndXJlIHNvIGVuc3VyZSB0aGF0IHNpcF9uYXRpdmUgaXMgcG9wdWxhdGVkIGluIHN5c3Jvb3QgYmVmb3JlIGV4ZWN1dGluZyBpdAorZG9fZ2VuZXJhdGVbZGVwZW5kc10gKz0gInNpcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworc2lwX2RvX2dlbmVyYXRlKCkgeworCWlmIFsgLXogIiR7U0lQX01PRFVMRVN9IiBdOyB0aGVuIAorCQlNT0RVTEVTPSJgbHMgc2lwLyptb2Quc2lwYCIKKwllbHNlCisJCU1PRFVMRVM9IiR7U0lQX01PRFVMRVN9IgorCWZpCisKKwlpZiBbIC16ICIkTU9EVUxFUyIgXTsgdGhlbgorCQlkaWUgIlNJUF9NT0RVTEVTIG5vdCBzZXQgYW5kIG5vIG1vZHVsZXMgZm91bmQgaW4gJFBXRCIKKyAgICAgICAgZWxzZQorCQliYm5vdGUgInVzaW5nIG1vZHVsZXMgJyR7U0lQX01PRFVMRVN9JyBhbmQgdGFncyAnJHtFWFRSQV9TSVBUQUdTfSciCisJZmkKKworCWlmIFsgLXogIiR7RVhUUkFfU0lQVEFHU30iIF07IHRoZW4KKwkJZGllICJFWFRSQV9TSVBUQUdTIG5lZWRzIHRvIGJlIHNldCEiCisJZWxzZQorCQlTSVBUQUdTPSIke0VYVFJBX1NJUFRBR1N9IgorCWZpCisKKwlpZiBbICEgLXogIiR7U0lQX0ZFQVRVUkVTfSIgXTsgdGhlbgorCQlGRUFUVVJFUz0iLXogJHtTSVBfRkVBVFVSRVN9IgorCQliYm5vdGUgInNpcCBmZWF0dXJlIGZpbGU6ICR7U0lQX0ZFQVRVUkVTfSIKKwlmaQorCisJZm9yIG1vZHVsZSBpbiAkTU9EVUxFUworCWRvCisJCWluc3RhbGwgLWQgJHttb2R1bGV9LworCQllY2hvICJjYWxsaW5nICdzaXA0IC1JIHNpcCAtSSAke1NUQUdJTkdfU0lQRElSfSAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnByby5pbiBzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAnIgorCQlzaXA0IC1JICR7U1RBR0lOR19TSVBESVJ9IC1JIHNpcCAke1NJUFRBR1N9ICR7RkVBVFVSRVN9IC1jICR7bW9kdWxlfSAtYiAke21vZHVsZX0vJHttb2R1bGV9LnNiZiBcCisJCQlzaXAvJHttb2R1bGV9LyR7bW9kdWxlfW1vZC5zaXAgfHwgZGllICJFcnJvciBjYWxsaW5nIHNpcCBvbiAke21vZHVsZX0iCisJCXNlZCAtZSAncyx0YXJnZXQsVEFSR0VULCcgLWUgJ3Msc291cmNlcyxTT1VSQ0VTLCcgLWUgJ3MsaGVhZGVycyxIRUFERVJTLCcgXAorCQkJJHttb2R1bGV9LyR7bW9kdWxlfS5zYmYgfCBzZWQgcywibW9jX0hFQURFUlMgPSIsIkhFQURFUlMgKz0iLCBcCisJCQk+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJZWNobyAiVEVNUExBVEU9bGliIiA+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXQiIF0gCQkmJiBlY2hvICIiIAkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0Y2FudmFzIiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXR0YWJsZSIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF3dCIgXSAJJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0cGUiIF0gICAgICAgICYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdHBlIiBdICAgICAgICAmJiBlY2hvICJMSUJTKz0tbHFwZSIJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQl0cnVlCisJZG9uZQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2dlbmVyYXRlCisKK2FkZHRhc2sgZ2VuZXJhdGUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc2l0ZWNvbmZpZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZGNlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2l0ZWNvbmZpZy5iYmNsYXNzCkBAIC0wLDAgKzEsMzMgQEAKK3B5dGhvbiBzaXRlY29uZmlnX2RvX3NpdGVjb25maWcgKCkgeworCXNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorCWlmIHNoYXJlZF9zdGF0ZVsndGFzayddICE9ICdwb3B1bGF0ZV9zeXNyb290JzoKKwkJcmV0dXJuCisJaWYgbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdGSUxFX0RJUk5BTUUnLCBUcnVlKSwgJ3NpdGVfY29uZmlnJykpOgorCQliYi5kZWJ1ZygxLCAiTm8gc2l0ZV9jb25maWcgZGlyZWN0b3J5LCBza2lwcGluZyBkb19zaXRlY29uZmlnIikKKwkJcmV0dXJuCisJYmIuYnVpbGQuZXhlY19mdW5jKCdkb19zaXRlY29uZmlnX2dlbmNhY2hlJywgZCkKKwlzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQorCXNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkKK30KKworRVhUUkFTSVRFQ09ORklHID89ICIiCisKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZSAoKSB7CisJbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9CisJZ2VuLXNpdGUtY29uZmlnICR7RklMRV9ESVJOQU1FfS9zaXRlX2NvbmZpZyBcCisJCT4ke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0vY29uZmlndXJlLmFjCisJY2QgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ18ke01BQ0hJTkV9CisJYXV0b2NvbmYKKwlybSAtZiAke0JQTn1fY2FjaGUKKwlDT05GSUdfU0lURT0iIiAke0VYVFJBU0lURUNPTkZJR30gLi9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAtLWNhY2hlLWZpbGUgJHtCUE59X2NhY2hlCisJc2VkIC1uIC1lICIvYWNfY3ZfY19iaWdlbmRpYW4vcCIgLWUgIi9hY19jdl9zaXplb2ZfL3AiIFwKKwkJLWUgIi9hY19jdl90eXBlXy9wIiAtZSAiL2FjX2N2X2hlYWRlcl8vcCIgLWUgIi9hY19jdl9mdW5jXy9wIiBcCisJCTwgJHtCUE59X2NhY2hlID4gJHtCUE59X2NvbmZpZworCW1rZGlyIC1wICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kCisJY3AgJHtCUE59X2NvbmZpZyAke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZAorCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWludGVyY2VwdGZ1bmNzXSArPSAiZG9fc2l0ZWNvbmZpZyAiCisKK0VYUE9SVF9GVU5DVElPTlMgZG9fc2l0ZWNvbmZpZyBkb19zaXRlY29uZmlnX2dlbmNhY2hlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNmVhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2l0ZWluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDE3MSBAQAorIyBUaGlzIGNsYXNzIGV4aXN0cyB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXRzIHRoYXQKKyMgbWF5IGJlIG5lZWRlZCBieSBvdGhlciBjbGFzc2VzIGFuZC9vciByZWNpcGVzLiBJZiB5b3UgYWRkIGEgbmV3CisjIHRhcmdldCB0aGlzIHdpbGwgcHJvYmFibHkgbmVlZCB0byBiZSB1cGRhdGVkLgorCisjCisjIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgJ3doYXQnIGZvciB0aGUgbmFtZWQgdGFyZ2V0ICd0YXJnZXQnCisjIHdoZXJlICd0YXJnZXQnID09ICI8YXJjaD4tPG9zPiIKKyMKKyMgJ3doYXQnIGNhbiBiZSBvbmUgb2YKKyMgKiB0YXJnZXQ6IFJldHVybnMgdGhlIHRhcmdldCBuYW1lICgiPGFyY2g+LTxvcz4iKQorIyAqIGVuZGlhbmVzczogUmV0dXJuICJiZSIgZm9yIGJpZyBlbmRpYW4gdGFyZ2V0cywgImxlIiBmb3IgbGl0dGxlIGVuZGlhbgorIyAqIGJpdHM6IFJldHVybnMgdGhlIGJpdCBzaXplIG9mIHRoZSB0YXJnZXQsIGVpdGhlciAiMzIiIG9yICI2NCIKKyMgKiBsaWJjOiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjIGxpYnJhcnkgdXNlZCBieSB0aGUgdGFyZ2V0CisjCisjIEl0IGlzIGFuIGVycm9yIGZvciB0aGUgdGFyZ2V0IG5vdCB0byBleGlzdC4KKyMgSWYgJ3doYXQnIGRvZXNuJ3QgZXhpc3QgdGhlbiBhbiBlbXB0eSB2YWx1ZSBpcyByZXR1cm5lZAorIworZGVmIHNpdGVpbmZvX2RhdGEoZCk6CisgICAgYXJjaGluZm8gPSB7CisgICAgICAgICJhbGxhcmNoIjogImVuZGlhbi1saXR0bGUgYml0LTMyIiwgIyBib2d1cywgYnV0IGJldHRlciB0aGFuIHNwZWNpYWwtY2FzaW5nIHRoZSBjaGVja3MgYmVsb3cgZm9yIGFsbGFyY2gKKyAgICAgICAgImFhcmNoNjQiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQgYXJtLWNvbW1vbiBhcm0tNjQiLAorICAgICAgICAiYWFyY2g2NF9iZSI6ICJlbmRpYW4tYmlnIGJpdC02NCBhcm0tY29tbW9uIGFybS02NCIsCisgICAgICAgICJhcm0iOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgYXJtLWNvbW1vbiBhcm0tMzIiLAorICAgICAgICAiYXJtZWIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgYXJtLWNvbW1vbiBhcm0tMzIiLAorICAgICAgICAiYXZyMzIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgYXZyMzItY29tbW9uIiwKKyAgICAgICAgImJmaW4iOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgYmZpbi1jb21tb24iLAorICAgICAgICAiZXBpcGhhbnkiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIiLAorICAgICAgICAiaTM4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpNDg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImk1ODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaTY4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpYTY0IjogImVuZGlhbi1saXR0bGUgYml0LTY0IiwKKyAgICAgICAgIm1pY3JvYmxhemUiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWljcm9ibGF6ZS1jb21tb24iLAorICAgICAgICAibWljcm9ibGF6ZWViIjogImVuZGlhbi1iaWcgYml0LTMyIG1pY3JvYmxhemUtY29tbW9uIiwKKyAgICAgICAgIm1pY3JvYmxhemVlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBtaWNyb2JsYXplLWNvbW1vbiIsCisgICAgICAgICJtaXBzIjogImVuZGlhbi1iaWcgYml0LTMyIG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzNjRlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCBtaXBzLWNvbW1vbiIsCisgICAgICAgICJtaXBzZWwiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAicG93ZXJwYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJuaW9zMiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBuaW9zMi1jb21tb24iLAorICAgICAgICAicG93ZXJwYzY0IjogImVuZGlhbi1iaWcgYml0LTY0IHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInBwYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJwcGM2NCI6ICJlbmRpYW4tYmlnIGJpdC02NCBwb3dlcnBjLWNvbW1vbiIsCisgICAgICAgICJzaDMiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgc2gtY29tbW9uIiwKKyAgICAgICAgInNoNCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBzaC1jb21tb24iLAorICAgICAgICAic3BhcmMiOiAiZW5kaWFuLWJpZyBiaXQtMzIiLAorICAgICAgICAidmlhYzMiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAieDg2XzY0IjogImVuZGlhbi1saXR0bGUiLCAjIGJpdGluZm8gc3BlY2lmaWVkIGluIHRhcmdldGluZm8KKyAgICB9CisgICAgb3NpbmZvID0geworICAgICAgICAiZGFyd2luIjogImNvbW1vbi1kYXJ3aW4iLAorICAgICAgICAiZGFyd2luOSI6ICJjb21tb24tZGFyd2luIiwKKyAgICAgICAgImxpbnV4IjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251IjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251eDMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251bjMyIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251ZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LWdudXNwZSI6ICJjb21tb24tbGludXggY29tbW9uLWdsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliYyI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC11Y2xpYmNlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliY3NwZSI6ICJjb21tb24tbGludXggY29tbW9uLXVjbGliYyIsCisgICAgICAgICJsaW51eC1tdXNsIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJsaW51eC1tdXNsZWFiaSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAibGludXgtbXVzbHNwZSI6ICJjb21tb24tbGludXggY29tbW9uLW11c2wiLAorICAgICAgICAidWNsaW51eC11Y2xpYmMiOiAiY29tbW9uLXVjbGliYyIsCisgICAgICAgICJjeWd3aW4iOiAiY29tbW9uLWN5Z3dpbiIsCisgICAgICAgICJtaW5ndzMyIjogImNvbW1vbi1taW5ndyIsCisgICAgfQorICAgIHRhcmdldGluZm8gPSB7CisgICAgICAgICJhYXJjaDY0LWxpbnV4LWdudSI6ICJhYXJjaDY0LWxpbnV4IiwKKyAgICAgICAgImFhcmNoNjRfYmUtbGludXgtZ251IjogImFhcmNoNjRfYmUtbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LWdudWVhYmkiOiAiYXJtLWxpbnV4IiwKKyAgICAgICAgImFybS1saW51eC1tdXNsZWFiaSI6ICJhcm0tbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LXVjbGliY2VhYmkiOiAiYXJtLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJhcm1lYi1saW51eC1nbnVlYWJpIjogImFybWViLWxpbnV4IiwKKyAgICAgICAgImFybWViLWxpbnV4LXVjbGliY2VhYmkiOiAiYXJtZWItbGludXgtdWNsaWJjIiwKKyAgICAgICAgImFybWViLWxpbnV4LW11c2xlYWJpIjogImFybWViLWxpbnV4IiwKKyAgICAgICAgIm1pcHMtbGludXgtbXVzbCI6ICJtaXBzLWxpbnV4IiwKKyAgICAgICAgIm1pcHNlbC1saW51eC1tdXNsIjogIm1pcHNlbC1saW51eCIsCisgICAgICAgICJtaXBzNjQtbGludXgtbXVzbCI6ICJtaXBzLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NGVsLWxpbnV4LW11c2wiOiAibWlwc2VsLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NC1saW51eC1nbnVuMzIiOiAibWlwcy1saW51eCBiaXQtMzIiLAorICAgICAgICAibWlwczY0ZWwtbGludXgtZ251bjMyIjogIm1pcHNlbC1saW51eCBiaXQtMzIiLAorICAgICAgICAicG93ZXJwYy1saW51eCI6ICJwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1tdXNsIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtdWNsaWJjIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtZ251c3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtbXVzbHNwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LXVjbGliY3NwZSI6ICJwb3dlcnBjLWxpbnV4IHBvd2VycGMzMi1saW51eCBwb3dlcnBjLWxpbnV4LXVjbGliYyIsCisgICAgICAgICJwb3dlcnBjNjQtbGludXgtZ251c3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzY0LWxpbnV4IiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eC1tdXNsc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzY0LWxpbnV4IiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eCI6ICJwb3dlcnBjLWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1jeWd3aW4iOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1kYXJ3aW4iOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1kYXJ3aW45IjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1tdXNsIjogIng4Nl82NC1saW51eCBiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LXVjbGliYyI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWVsZiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LWdudSI6ICJiaXQtNjQgeDg2XzY0LWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1saW51eC1nbnV4MzIiOiAiYml0LTMyIGl4ODYtY29tbW9uIHgzMi1saW51eCIsCisgICAgICAgICJ4ODZfNjQtbWluZ3czMiI6ICJiaXQtNjQiLAorICAgIH0KKworICAgIGhvc3RhcmNoID0gZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpCisgICAgaG9zdG9zID0gZC5nZXRWYXIoIkhPU1RfT1MiLCBUcnVlKQorICAgIHRhcmdldCA9ICIlcy0lcyIgJSAoaG9zdGFyY2gsIGhvc3RvcykKKworICAgIHNpdGVkYXRhID0gW10KKyAgICBpZiBob3N0YXJjaCBpbiBhcmNoaW5mbzoKKyAgICAgICAgc2l0ZWRhdGEuZXh0ZW5kKGFyY2hpbmZvW2hvc3RhcmNoXS5zcGxpdCgpKQorICAgIGlmIGhvc3RvcyBpbiBvc2luZm86CisgICAgICAgIHNpdGVkYXRhLmV4dGVuZChvc2luZm9baG9zdG9zXS5zcGxpdCgpKQorICAgIGlmIHRhcmdldCBpbiB0YXJnZXRpbmZvOgorICAgICAgICBzaXRlZGF0YS5leHRlbmQodGFyZ2V0aW5mb1t0YXJnZXRdLnNwbGl0KCkpCisgICAgc2l0ZWRhdGEuYXBwZW5kKHRhcmdldCkKKyAgICBzaXRlZGF0YS5hcHBlbmQoImNvbW1vbiIpCisKKyAgICBiYi5kZWJ1ZygxLCAiU0lURSBmaWxlcyAlcyIgJSBzaXRlZGF0YSk7CisgICAgcmV0dXJuIHNpdGVkYXRhCisKK3B5dGhvbiAoKSB7CisgICAgc2l0ZWRhdGEgPSBzZXQoc2l0ZWluZm9fZGF0YShkKSkKKyAgICBpZiAiZW5kaWFuLWxpdHRsZSIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19FTkRJQU5ORVNTIiwgImxlIikKKyAgICBlbGlmICJlbmRpYW4tYmlnIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0VORElBTk5FU1MiLCAiYmUiKQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIGVuZGlhbm5lc3MgZm9yIGFyY2hpdGVjdHVyZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJIT1NUX0FSQ0giLCBUcnVlKSkKKyAgICAgICAgYmIuZmF0YWwoIlBsZWFzZSBhZGQgeW91ciBhcmNoaXRlY3R1cmUgdG8gc2l0ZWluZm8uYmJjbGFzcyIpCisKKyAgICBpZiAiYml0LTMyIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0JJVFMiLCAiMzIiKQorICAgIGVsaWYgImJpdC02NCIgaW4gc2l0ZWRhdGE6CisgICAgICAgIGQuc2V0VmFyKCJTSVRFSU5GT19CSVRTIiwgIjY0IikKKyAgICBlbHNlOgorICAgICAgICBiYi5lcnJvcigiVW5hYmxlIHRvIGRldGVybWluZSBiaXQgc2l6ZSBmb3IgYXJjaGl0ZWN0dXJlICclcyciICUKKyAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpKQorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGFkZCB5b3VyIGFyY2hpdGVjdHVyZSB0byBzaXRlaW5mby5iYmNsYXNzIikKK30KKworZGVmIHNpdGVpbmZvX2dldF9maWxlcyhkLCBub19jYWNoZSA9IEZhbHNlKToKKyAgICBzaXRlZGF0YSA9IHNpdGVpbmZvX2RhdGEoZCkKKyAgICBzaXRlZmlsZXMgPSAiIgorICAgIGZvciBwYXRoIGluIGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgiOiIpOgorICAgICAgICBmb3IgZWxlbWVudCBpbiBzaXRlZGF0YToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsICJzaXRlIiwgZWxlbWVudCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBzaXRlZmlsZXMgKz0gZmlsZW5hbWUgKyAiICIKKworICAgIGlmIG5vX2NhY2hlOiByZXR1cm4gc2l0ZWZpbGVzCisKKyAgICAjIE5vdyBjaGVjayBmb3Igc2l0ZWNvbmZpZyBjYWNoZSBmaWxlcworICAgICMgVXNlIHRoZSBmaWxlcyBjb3BpZWQgdG8gdGhlIGFjbG9jYWwgY2FjaGUgZ2VuZXJhdGVkIGJ5IGF1dG90b29scy5iYmNsYXNzCisgICAgIyB0byBhdm9pZCByYWNlcworICAgIHBhdGhfc2l0ZWNvbmZpZyA9IGQuZ2V0VmFyKCdBQ0xPQ0FMRElSJywgVHJ1ZSkKKyAgICBpZiBwYXRoX3NpdGVjb25maWcgYW5kIG9zLnBhdGguaXNkaXIocGF0aF9zaXRlY29uZmlnKToKKyAgICAgICAgZm9yIGkgaW4gb3MubGlzdGRpcihwYXRoX3NpdGVjb25maWcpOgorICAgICAgICAgICAgaWYgbm90IGkuZW5kc3dpdGgoIl9jb25maWciKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aF9zaXRlY29uZmlnLCBpKQorICAgICAgICAgICAgc2l0ZWZpbGVzICs9IGZpbGVuYW1lICsgIiAiCisKKyAgICByZXR1cm4gc2l0ZWZpbGVzCisKKyMKKyMgTWFrZSBzb21lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB2aWEgdmFyaWFibGVzCisjCitTSVRFQ09ORklHX1NZU1JPT1RDQUNIRSA9ICIke1NUQUdJTkdfREFUQURJUn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zcGR4LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0YzUzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zcGR4LmJiY2xhc3MKQEAgLTAsMCArMSwzNjUgQEAKKyMgVGhpcyBjbGFzcyBpbnRlZ3JhdGVzIHJlYWwtdGltZSBsaWNlbnNlIHNjYW5uaW5nLCBnZW5lcmF0aW9uIG9mIFNQRFggc3RhbmRhcmQKKyMgb3V0cHV0IGFuZCB2ZXJpZml5aW5nIGxpY2Vuc2UgaW5mbyBkdXJpbmcgdGhlIGJ1aWxkaW5nIHByb2Nlc3MuCisjIEl0IGlzIGEgY29tYmluYXRpb24gb2YgZWZmb3J0cyBmcm9tIHRoZSBPRS1Db3JlLCBTUERYIGFuZCBGb3Nzb2xvZ3kgcHJvamVjdHMuCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEZPU1NvbG9neToKKyMgICBodHRwOi8vd3d3LmZvc3NvbG9neS5vcmcKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5U1BEWCBjb21tYW5kbGluZToKKyMgICBodHRwczovL2dpdGh1Yi5jb20vc3BkeC10b29scy9mb3Nzb2xvZ3ktc3BkeC93aWtpL0Zvc3NvbG9neS1TUERYLVdlYi1BUEkKKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gU1BEWDoKKyMgICBodHRwOi8vd3d3LnNwZHgub3JnCisjCisKKyMgU1BEWCBmaWxlIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBwYXRoIHdoaWNoIGlzIGRlZmluZWQgYXNbU1BEWF9NQU5JRkVTVF9ESVJdIAorIyBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLgorCitTUERYU1NUQVRFRElSID0gIiR7V09SS0RJUn0vc3BkeF9zc3RhdGVfZGlyIgorCisjIElmICR7U30gaXNuJ3QgYWN0dWFsbHkgdGhlIHRvcC1sZXZlbCBzb3VyY2UgZGlyZWN0b3J5LCBzZXQgU1BEWF9TIHRvIHBvaW50IGF0CisjIHRoZSByZWFsIHRvcC1sZXZlbCBkaXJlY3RvcnkuCitTUERYX1MgPz0gIiR7U30iCisKK3B5dGhvbiBkb19zcGR4ICgpIHsKKyAgICBpbXBvcnQgb3MsIHN5cworICAgIGltcG9ydCBqc29uLCBzaHV0aWwKKworICAgIGluZm8gPSB7fSAKKyAgICBpbmZvWyd3b3JrZGlyJ10gPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaW5mb1snc291cmNlZGlyJ10gPSBkLmdldFZhcignU1BEWF9TJywgVHJ1ZSkKKyAgICBpbmZvWydwbiddID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBpbmZvWydwdiddID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBpbmZvWydzcGR4X3ZlcnNpb24nXSA9IGQuZ2V0VmFyKCdTUERYX1ZFUlNJT04nLCBUcnVlKQorICAgIGluZm9bJ2RhdGFfbGljZW5zZSddID0gZC5nZXRWYXIoJ0RBVEFfTElDRU5TRScsIFRydWUpCisKKyAgICBzc3RhdGVkaXIgPSBkLmdldFZhcignU1BEWFNTVEFURURJUicsIFRydWUpCisgICAgc3N0YXRlZmlsZSA9IG9zLnBhdGguam9pbihzc3RhdGVkaXIsIGluZm9bJ3BuJ10gKyBpbmZvWydwdiddICsgIi5zcGR4IikKKworICAgIG1hbmlmZXN0X2RpciA9IGQuZ2V0VmFyKCdTUERYX01BTklGRVNUX0RJUicsIFRydWUpCisgICAgaW5mb1snb3V0ZmlsZSddID0gb3MucGF0aC5qb2luKG1hbmlmZXN0X2RpciwgaW5mb1sncG4nXSArICIuc3BkeCIgKQorCisgICAgaW5mb1snc3BkeF90ZW1wX2RpciddID0gZC5nZXRWYXIoJ1NQRFhfVEVNUF9ESVInLCBUcnVlKQorICAgIGluZm9bJ3Rhcl9maWxlJ10gPSBvcy5wYXRoLmpvaW4oaW5mb1snd29ya2RpciddLCBpbmZvWydwbiddICsgIi50YXIuZ3oiICkKKworICAgICMgTWFrZSBzdXJlIGltcG9ydGFudCBkaXJzIGV4aXN0CisgICAgdHJ5OgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWFuaWZlc3RfZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoaW5mb1snc3BkeF90ZW1wX2RpciddKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmVycm9yKCJTUERYOiBDb3VsZCBub3Qgc2V0IHVwIHJlcXVpcmVkIGRpcmVjdG9yaWVzOiAiICsgc3RyKGUpKQorICAgICAgICByZXR1cm4KKworICAgICMjIGdldCBldmVyeXRoaW5nIGZyb20gY2FjaGUuICB1c2UgaXQgdG8gZGVjaWRlIGlmIAorICAgICMjIHNvbWV0aGluZyBuZWVkcyB0byBiZSByZXJ1biAKKyAgICBjdXJfdmVyX2NvZGUgPSBnZXRfdmVyX2NvZGUoaW5mb1snc291cmNlZGlyJ10pCisgICAgY2FjaGVfY3VyID0gRmFsc2UKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzc3RhdGVmaWxlKToKKyAgICAgICAgIyMgY2FjaGUgZm9yIHRoaXMgcGFja2FnZSBleGlzdHMuIHJlYWQgaXQgaW4KKyAgICAgICAgY2FjaGVkX3NwZHggPSBnZXRfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSkKKworICAgICAgICBpZiBjYWNoZWRfc3BkeFsnUGFja2FnZVZlcmlmaWNhdGlvbkNvZGUnXSA9PSBjdXJfdmVyX2NvZGU6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBWZXJpZmljYXRpb24gY29kZSBmb3IgIiArIGluZm9bJ3BuJ10KKyAgICAgICAgICAgICAgICAgICsgImlzIHNhbWUgYXMgY2FjaGUncy4gZG8gbm90aGluZyIpCisgICAgICAgICAgICBjYWNoZV9jdXIgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2NhbF9maWxlX2luZm8gPSBzZXR1cF9mb3NzX3NjYW4oaW5mbywgVHJ1ZSwgY2FjaGVkX3NwZHhbJ0ZpbGVzJ10pCisgICAgZWxzZToKKyAgICAgICAgbG9jYWxfZmlsZV9pbmZvID0gc2V0dXBfZm9zc19zY2FuKGluZm8sIEZhbHNlLCBOb25lKQorCisgICAgaWYgY2FjaGVfY3VyOgorICAgICAgICBzcGR4X2ZpbGVfaW5mbyA9IGNhY2hlZF9zcGR4WydGaWxlcyddCisgICAgICAgIGZvc3NfcGFja2FnZV9pbmZvID0gY2FjaGVkX3NwZHhbJ1BhY2thZ2UnXQorICAgICAgICBmb3NzX2xpY2Vuc2VfaW5mbyA9IGNhY2hlZF9zcGR4WydMaWNlbnNlcyddCisgICAgZWxzZToKKyAgICAgICAgIyMgc2V0dXAgZm9zc29sb2d5IGNvbW1hbmQKKyAgICAgICAgZm9zc19zZXJ2ZXIgPSBkLmdldFZhcignRk9TU19TRVJWRVInLCBUcnVlKQorICAgICAgICBmb3NzX2ZsYWdzID0gZC5nZXRWYXIoJ0ZPU1NfV0dFVF9GTEFHUycsIFRydWUpCisgICAgICAgIGZvc3NfZnVsbF9zcGR4ID0gZC5nZXRWYXIoJ0ZPU1NfRlVMTF9TUERYJywgVHJ1ZSkgPT0gInRydWUiIG9yIEZhbHNlCisgICAgICAgIGZvc3NfY29tbWFuZCA9ICJ3Z2V0ICVzIC0tcG9zdC1maWxlPSVzICVzIlwKKyAgICAgICAgICAgICUgKGZvc3NfZmxhZ3MsIGluZm9bJ3Rhcl9maWxlJ10sIGZvc3Nfc2VydmVyKQorICAgICAgICAKKyAgICAgICAgZm9zc19yZXN1bHQgPSBydW5fZm9zc29sb2d5KGZvc3NfY29tbWFuZCwgZm9zc19mdWxsX3NwZHgpCisgICAgICAgIGlmIGZvc3NfcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgKGZvc3NfcGFja2FnZV9pbmZvLCBmb3NzX2ZpbGVfaW5mbywgZm9zc19saWNlbnNlX2luZm8pID0gZm9zc19yZXN1bHQKKyAgICAgICAgICAgIHNwZHhfZmlsZV9pbmZvID0gY3JlYXRlX3NwZHhfZG9jKGxvY2FsX2ZpbGVfaW5mbywgZm9zc19maWxlX2luZm8pCisgICAgICAgICAgICAjIyB3cml0ZSB0byBjYWNoZQorICAgICAgICAgICAgd3JpdGVfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSwgY3VyX3Zlcl9jb2RlLCBmb3NzX3BhY2thZ2VfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZHhfZmlsZV9pbmZvLCBmb3NzX2xpY2Vuc2VfaW5mbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJTUERYOiBDb3VsZCBub3QgY29tbXVuaWNhdGUgd2l0aCBGT1NTb2xvZ3kgc2VydmVyLiBDb21tYW5kIHdhczogIiArIGZvc3NfY29tbWFuZCkKKyAgICAgICAgICAgIHJldHVybgorICAgIAorICAgICMjIEdldCBkb2N1bWVudCBhbmQgcGFja2FnZSBsZXZlbCBpbmZvcm1hdGlvbgorICAgIHNwZHhfaGVhZGVyX2luZm8gPSBnZXRfaGVhZGVyX2luZm8oaW5mbywgY3VyX3Zlcl9jb2RlLCBmb3NzX3BhY2thZ2VfaW5mbykKKyAgICAKKyAgICAjIyBDUkVBVEUgTUFOSUZFU1QKKyAgICBjcmVhdGVfbWFuaWZlc3QoaW5mbywgc3BkeF9oZWFkZXJfaW5mbywgc3BkeF9maWxlX2luZm8sIGZvc3NfbGljZW5zZV9pbmZvKQorCisgICAgIyMgY2xlYW4gdXAgdGhlIHRlbXAgc3R1ZmYKKyAgICBzaHV0aWwucm10cmVlKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGluZm9bJ3Rhcl9maWxlJ10pOgorICAgICAgICByZW1vdmVfZmlsZShpbmZvWyd0YXJfZmlsZSddKQorfQorYWRkdGFzayBzcGR4IGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworZGVmIGNyZWF0ZV9tYW5pZmVzdChpbmZvLCBoZWFkZXIsIGZpbGVzLCBsaWNlbnNlcyk6CisgICAgaW1wb3J0IGNvZGVjcworICAgIHdpdGggY29kZWNzLm9wZW4oaW5mb1snb3V0ZmlsZSddLCBtb2RlPSd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgIyBXcml0ZSBoZWFkZXIKKyAgICAgICAgZi53cml0ZShoZWFkZXIgKyAnXG4nKQorCisgICAgICAgICMgV3JpdGUgZmlsZSBkYXRhCisgICAgICAgIGZvciBjaGtzdW0sIGJsb2NrIGluIGZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgiRmlsZU5hbWU6ICIgKyBibG9ja1snRmlsZU5hbWUnXSArICdcbicpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBibG9jay5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qga2V5ID09ICdGaWxlTmFtZSc6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIHZhbHVlICsgJ1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKKworICAgICAgICAjIFdyaXRlIGxpY2Vuc2UgZGF0YQorICAgICAgICBmb3IgaWQsIGJsb2NrIGluIGxpY2Vuc2VzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgiTGljZW5zZUlEOiAiICsgaWQgKyAnXG4nKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYmxvY2suaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgdmFsdWUgKyAnXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG4nKQorCitkZWYgZ2V0X2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGNvZGVjcworICAgIGNhY2hlZF9zcGR4X2luZm8gPSB7fQorICAgIHdpdGggY29kZWNzLm9wZW4oc3N0YXRlZmlsZSwgbW9kZT0ncicsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlZF9zcGR4X2luZm8gPSBqc29uLmxvYWQoZikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGNhY2hlZF9zcGR4X2luZm8gPSBOb25lCisgICAgcmV0dXJuIGNhY2hlZF9zcGR4X2luZm8KKworZGVmIHdyaXRlX2NhY2hlZF9zcGR4KHNzdGF0ZWZpbGUsIHZlcl9jb2RlLCBwYWNrYWdlX2luZm8sIGZpbGVzLCBsaWNlbnNlX2luZm8pOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IGNvZGVjcworICAgIHNwZHhfZG9jID0ge30KKyAgICBzcGR4X2RvY1snUGFja2FnZVZlcmlmaWNhdGlvbkNvZGUnXSA9IHZlcl9jb2RlCisgICAgc3BkeF9kb2NbJ0ZpbGVzJ10gPSB7fQorICAgIHNwZHhfZG9jWydGaWxlcyddID0gZmlsZXMKKyAgICBzcGR4X2RvY1snUGFja2FnZSddID0ge30KKyAgICBzcGR4X2RvY1snUGFja2FnZSddID0gcGFja2FnZV9pbmZvCisgICAgc3BkeF9kb2NbJ0xpY2Vuc2VzJ10gPSB7fQorICAgIHNwZHhfZG9jWydMaWNlbnNlcyddID0gbGljZW5zZV9pbmZvCisgICAgd2l0aCBjb2RlY3Mub3Blbihzc3RhdGVmaWxlLCBtb2RlPSd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShqc29uLmR1bXBzKHNwZHhfZG9jKSkKKworZGVmIHNldHVwX2Zvc3Nfc2NhbihpbmZvLCBjYWNoZSwgY2FjaGVkX2ZpbGVzKToKKyAgICBpbXBvcnQgZXJybm8sIHNodXRpbAorICAgIGltcG9ydCB0YXJmaWxlCisgICAgZmlsZV9pbmZvID0ge30KKyAgICBjYWNoZV9kaWN0ID0ge30KKworICAgIGZvciBmX2RpciwgZiBpbiBsaXN0X2ZpbGVzKGluZm9bJ3NvdXJjZWRpciddKToKKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKGZfZGlyLCBmKQorICAgICAgICBhYnNfcGF0aCA9IG9zLnBhdGguam9pbihpbmZvWydzb3VyY2VkaXInXSwgZnVsbF9wYXRoKQorICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGguam9pbihpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGZfZGlyKQorICAgICAgICBkZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4oaW5mb1snc3BkeF90ZW1wX2RpciddLCBmdWxsX3BhdGgpCisKKyAgICAgICAgY2hlY2tzdW0gPSBoYXNoX2ZpbGUoYWJzX3BhdGgpCisgICAgICAgIGlmIG5vdCBjaGVja3N1bSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXSA9IHt9CisgICAgICAgICAgICAjIyByZXRhaW4gY2FjaGUgaW5mb3JtYXRpb24gaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBpZiBjYWNoZSBhbmQgY2hlY2tzdW0gaW4gY2FjaGVkX2ZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV0gPSBjYWNoZWRfZmlsZXNbY2hlY2tzdW1dCisgICAgICAgICAgICAjIyBoYXZlIHRoZSBmaWxlIGluY2x1ZGVkIGluIHdoYXQncyBzZW50IHRvIHRoZSBGT1NTb2xvZ3kgc2VydmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpbGVfaW5mb1tjaGVja3N1bV1bJ0ZpbGVOYW1lJ10gPSBmdWxsX3BhdGgKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGFic19wYXRoLCBkZXN0X3BhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU1BEWDogbWtkaXJoaWVyIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc2h1dGlsLkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IGNvcHlmaWxlIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBjb3B5ZmlsZSBmYWlsZWQ6ICIgKyBzdHIoZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBDb3VsZCBub3QgZ2V0IGNoZWNrc3VtIGZvciBmaWxlOiAiICsgZikKKyAgICAKKyAgICB3aXRoIHRhcmZpbGUub3BlbihpbmZvWyd0YXJfZmlsZSddLCAidzpneiIpIGFzIHRhcjoKKyAgICAgICAgdGFyLmFkZChpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZShpbmZvWydzcGR4X3RlbXBfZGlyJ10pKQorICAgIAorICAgIHJldHVybiBmaWxlX2luZm8KKworZGVmIHJlbW92ZV9maWxlKGZpbGVfbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUoZmlsZV9uYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHBhc3MKKworZGVmIGxpc3RfZmlsZXMoZGlyKToKKyAgICBmb3Igcm9vdCwgc3ViRm9sZGVycywgZmlsZXMgaW4gb3Mud2FsayhkaXIpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIHJlbF9yb290ID0gb3MucGF0aC5yZWxwYXRoKHJvb3QsIGRpcikKKyAgICAgICAgICAgIHlpZWxkIHJlbF9yb290LCBmCisgICAgcmV0dXJuCisKK2RlZiBoYXNoX2ZpbGUoZmlsZV9uYW1lKToKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlX25hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhX3N0cmluZyA9IGYucmVhZCgpCisgICAgICAgICAgICBzaGExID0gaGFzaF9zdHJpbmcoZGF0YV9zdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gc2hhMQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGhhc2hfc3RyaW5nKGRhdGEpOgorICAgIGltcG9ydCBoYXNobGliCisgICAgc2hhMSA9IGhhc2hsaWIuc2hhMSgpCisgICAgc2hhMS51cGRhdGUoZGF0YSkKKyAgICByZXR1cm4gc2hhMS5oZXhkaWdlc3QoKQorCitkZWYgcnVuX2Zvc3NvbG9neShmb3NzX2NvbW1hbmQsIGZ1bGxfc3BkeCk6CisgICAgaW1wb3J0IHN0cmluZywgcmUKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIAorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGZvc3NfY29tbWFuZC5zcGxpdCgpLAorICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIGZvc3Nfb3V0cHV0LCBmb3NzX2Vycm9yID0gcC5jb21tdW5pY2F0ZSgpCisgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmb3NzX291dHB1dCA9IHVuaWNvZGUoZm9zc19vdXRwdXQsICJ1dGYtOCIpCisgICAgZm9zc19vdXRwdXQgPSBzdHJpbmcucmVwbGFjZShmb3NzX291dHB1dCwgJ1xyJywgJycpCisKKyAgICAjIFBhY2thZ2UgaW5mbworICAgIHBhY2thZ2VfaW5mbyA9IHt9CisgICAgaWYgZnVsbF9zcGR4OgorICAgICAgICAjIEFsbCBtYW5kYXRvcnksIG9ubHkgb25lIG9jY3VyYW5jZQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10gPSByZS5maW5kYWxsKCdQYWNrYWdlQ29weXJpZ2h0VGV4dDogKC4qPzwvdGV4dD4pJywgZm9zc19vdXRwdXQsIHJlLlMpWzBdCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VEZWNsYXJlZCddID0gcmUuZmluZGFsbCgnUGFja2FnZUxpY2Vuc2VEZWNsYXJlZDogKC4qKScsIGZvc3Nfb3V0cHV0KVswXQorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZUNvbmNsdWRlZDogKC4qKScsIGZvc3Nfb3V0cHV0KVswXQorICAgICAgICAjIFRoZXNlIG1heSBiZSBtb3JlIHRoYW4gb25lCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXM6ICguKiknLCBmb3NzX291dHB1dCkKKyAgICBlbHNlOgorICAgICAgICBERUZBVUxUID0gIk5PQVNTRVJUSU9OIgorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10gPSAiPHRleHQ+IiArIERFRkFVTFQgKyAiPC90ZXh0PiIKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10gPSBERUZBVUxUCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQnXSA9IERFRkFVTFQKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXMnXSA9IFtdCisKKyAgICAjIEZpbGUgaW5mbworICAgIGZpbGVfaW5mbyA9IHt9CisgICAgcmVjb3JkcyA9IFtdCisgICAgIyBGaWxlTmFtZSBpcyBhbHNvIGluIFBhY2thZ2VGaWxlTmFtZSwgc28gd2UgbWF0Y2ggb24gRmlsZVR5cGUgYXMgd2VsbC4KKyAgICByZWNvcmRzID0gcmUuZmluZGFsbCgnRmlsZU5hbWU6Lio/RmlsZVR5cGU6Lio/PC90ZXh0PicsIGZvc3Nfb3V0cHV0LCByZS5TKQorICAgIGZvciByZWMgaW4gcmVjb3JkczoKKyAgICAgICAgY2hrc3VtID0gcmUuZmluZGFsbCgnRmlsZUNoZWNrc3VtOiBTSEExOiAoLiopXG4nLCByZWMpWzBdCisgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dID0ge30KKyAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0ZpbGVDb3B5cmlnaHRUZXh0J10gPSByZS5maW5kYWxsKCdGaWxlQ29weXJpZ2h0VGV4dDogJworICAgICAgICAgICAgKyAnKC4qPzwvdGV4dD4pJywgcmVjLCByZS5TIClbMF0KKyAgICAgICAgZmllbGRzID0gWydGaWxlTmFtZScsICdGaWxlVHlwZScsICdMaWNlbnNlQ29uY2x1ZGVkJywgJ0xpY2Vuc2VJbmZvSW5GaWxlJ10KKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dW2ZpZWxkXSA9IHJlLmZpbmRhbGwoZmllbGQgKyAnOiAoLiopJywgcmVjKVswXQorCisgICAgIyBMaWNlbnNlcworICAgIGxpY2Vuc2VfaW5mbyA9IHt9CisgICAgbGljZW5zZXMgPSBbXQorICAgIGxpY2Vuc2VzID0gcmUuZmluZGFsbCgnTGljZW5zZUlEOi4qP0xpY2Vuc2VOYW1lOi4qP1xuJywgZm9zc19vdXRwdXQsIHJlLlMpCisgICAgZm9yIGxpYyBpbiBsaWNlbnNlczoKKyAgICAgICAgbGljZW5zZV9pZCA9IHJlLmZpbmRhbGwoJ0xpY2Vuc2VJRDogKC4qKVxuJywgbGljKVswXQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF0gPSB7fQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF1bJ0V4dHJhY3RlZFRleHQnXSA9IHJlLmZpbmRhbGwoJ0V4dHJhY3RlZFRleHQ6ICguKj88L3RleHQ+KScsIGxpYywgcmUuUylbMF0KKyAgICAgICAgbGljZW5zZV9pbmZvW2xpY2Vuc2VfaWRdWydMaWNlbnNlTmFtZSddID0gcmUuZmluZGFsbCgnTGljZW5zZU5hbWU6ICguKiknLCBsaWMpWzBdCisKKyAgICByZXR1cm4gKHBhY2thZ2VfaW5mbywgZmlsZV9pbmZvLCBsaWNlbnNlX2luZm8pCisKK2RlZiBjcmVhdGVfc3BkeF9kb2MoZmlsZV9pbmZvLCBzY2FubmVkX2ZpbGVzKToKKyAgICBpbXBvcnQganNvbgorICAgICMjIHB1c2ggZm9zcyBjaGFuZ2VzIGJhY2sgaW50byBjYWNoZQorICAgIGZvciBjaGtzdW0sIGxpY19pbmZvIGluIHNjYW5uZWRfZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGlmIGNoa3N1bSBpbiBmaWxlX2luZm86CisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZVR5cGUnXSA9IGxpY19pbmZvWydGaWxlVHlwZSddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNoZWNrc3VtOiBTSEExJ10gPSBjaGtzdW0KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydMaWNlbnNlSW5mb0luRmlsZSddID0gbGljX2luZm9bJ0xpY2Vuc2VJbmZvSW5GaWxlJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydMaWNlbnNlQ29uY2x1ZGVkJ10gPSBsaWNfaW5mb1snTGljZW5zZUNvbmNsdWRlZCddCisgICAgICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNvcHlyaWdodFRleHQnXSA9IGxpY19pbmZvWydGaWxlQ29weXJpZ2h0VGV4dCddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiAiICsgbGljX2luZm9bJ0ZpbGVOYW1lJ10gKyAiIDogIiArIGNoa3N1bQorICAgICAgICAgICAgICAgICsgIiA6IGlzIG5vdCBpbiB0aGUgbG9jYWwgZmlsZSBpbmZvOiAiCisgICAgICAgICAgICAgICAgKyBqc29uLmR1bXBzKGxpY19pbmZvLCBpbmRlbnQ9MSkpCisgICAgcmV0dXJuIGZpbGVfaW5mbworCitkZWYgZ2V0X3Zlcl9jb2RlKGRpcm5hbWUpOgorICAgIGNoa3N1bXMgPSBbXQorICAgIGZvciBmX2RpciwgZiBpbiBsaXN0X2ZpbGVzKGRpcm5hbWUpOgorICAgICAgICBoYXNoID0gaGFzaF9maWxlKG9zLnBhdGguam9pbihkaXJuYW1lLCBmX2RpciwgZikpCisgICAgICAgIGlmIG5vdCBoYXNoIGlzIE5vbmU6CisgICAgICAgICAgICBjaGtzdW1zLmFwcGVuZChoYXNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIud2FybigiU1BEWDogQ291bGQgbm90IGhhc2ggZmlsZTogIiArIHBhdGgpCisgICAgdmVyX2NvZGVfc3RyaW5nID0gJycuam9pbihjaGtzdW1zKS5sb3dlcigpCisgICAgdmVyX2NvZGUgPSBoYXNoX3N0cmluZyh2ZXJfY29kZV9zdHJpbmcpCisgICAgcmV0dXJuIHZlcl9jb2RlCisKK2RlZiBnZXRfaGVhZGVyX2luZm8oaW5mbywgc3BkeF92ZXJpZmljYXRpb25fY29kZSwgcGFja2FnZV9pbmZvKToKKyAgICAiIiIKKyAgICAgICAgUHV0IHRvZ2V0aGVyIHRoZSBoZWFkZXIgU1BEWCBpbmZvcm1hdGlvbi4KKyAgICAgICAgRXZlbnR1YWxseSB0aGlzIG5lZWRzIHRvIGJlY29tZSBhIGxvdCBsZXNzCisgICAgICAgIG9mIGEgaGFyZGNvZGVkIHRoaW5nLgorICAgICIiIgorICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisgICAgaW1wb3J0IG9zCisgICAgaGVhZCA9IFtdCisgICAgREVGQVVMVCA9ICJOT0FTU0VSVElPTiIKKworICAgIHBhY2thZ2VfY2hlY2tzdW0gPSBoYXNoX2ZpbGUoaW5mb1sndGFyX2ZpbGUnXSkKKyAgICBpZiBwYWNrYWdlX2NoZWNrc3VtIGlzIE5vbmU6CisgICAgICAgIHBhY2thZ2VfY2hlY2tzdW0gPSBERUZBVUxUCisKKyAgICAjIyBkb2N1bWVudCBsZXZlbCBpbmZvcm1hdGlvbgorICAgIGhlYWQuYXBwZW5kKCIjIyBTUERYIERvY3VtZW50IEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiU1BEWFZlcnNpb246ICIgKyBpbmZvWydzcGR4X3ZlcnNpb24nXSkKKyAgICBoZWFkLmFwcGVuZCgiRGF0YUxpY2Vuc2U6ICIgKyBpbmZvWydkYXRhX2xpY2Vuc2UnXSkKKyAgICBoZWFkLmFwcGVuZCgiRG9jdW1lbnRDb21tZW50OiA8dGV4dD5TUERYIGZvciAiCisgICAgICAgICsgaW5mb1sncG4nXSArICIgdmVyc2lvbiAiICsgaW5mb1sncHYnXSArICI8L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgICMjIENyZWF0b3IgaW5mb3JtYXRpb24KKyAgICAjIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBnaXZlIHRpbWUgaW4gVVRDLgorICAgIG5vdyA9IGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQorICAgIGhlYWQuYXBwZW5kKCIjIyBDcmVhdGlvbiBJbmZvcm1hdGlvbiIpCisgICAgIyMgVG9vbHMgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSB2ZXJzaW9uLCBidXQgRk9TU29sb2d5K1NQRFggcHJvdmlkZXMgbm9uZS4KKyAgICBoZWFkLmFwcGVuZCgiQ3JlYXRvcjogVG9vbDogRk9TU29sb2d5K1NQRFgiKQorICAgIGhlYWQuYXBwZW5kKCJDcmVhdGVkOiAiICsgbm93KQorICAgIGhlYWQuYXBwZW5kKCJDcmVhdG9yQ29tbWVudDogPHRleHQ+VU5PPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisKKyAgICAjIyBwYWNrYWdlIGxldmVsIGluZm9ybWF0aW9uCisgICAgaGVhZC5hcHBlbmQoIiMjIFBhY2thZ2UgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTmFtZTogIiArIGluZm9bJ3BuJ10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VWZXJzaW9uOiAiICsgaW5mb1sncHYnXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUZpbGVOYW1lOiAiICsgb3MucGF0aC5iYXNlbmFtZShpbmZvWyd0YXJfZmlsZSddKSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVN1cHBsaWVyOiBQZXJzb246IiArIERFRkFVTFQpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VEb3dubG9hZExvY2F0aW9uOiAiICsgREVGQVVMVCkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVN1bW1hcnk6IDx0ZXh0PjwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlT3JpZ2luYXRvcjogUGVyc29uOiIgKyBERUZBVUxUKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlQ2hlY2tzdW06IFNIQTE6ICIgKyBwYWNrYWdlX2NoZWNrc3VtKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZTogIiArIHNwZHhfdmVyaWZpY2F0aW9uX2NvZGUpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VEZXNjcmlwdGlvbjogPHRleHQ+IiArIGluZm9bJ3BuJ10KKyAgICAgICAgKyAiIHZlcnNpb24gIiArIGluZm9bJ3B2J10gKyAiPC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VDb3B5cmlnaHRUZXh0OiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlQ29weXJpZ2h0VGV4dCddKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTGljZW5zZURlY2xhcmVkOiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkOiAiCisgICAgICAgICsgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUNvbmNsdWRlZCddKQorCisgICAgZm9yIGxpY3JlZiBpbiBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlcyddOgorICAgICAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzOiAiICsgbGljcmVmKQorICAgIGhlYWQuYXBwZW5kKCIiKQorICAgIAorICAgICMjIGhlYWRlciBmb3IgZmlsZSBsZXZlbAorICAgIGhlYWQuYXBwZW5kKCIjIyBGaWxlIEluZm9ybWF0aW9uIikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgIHJldHVybiAnXG4nLmpvaW4oaGVhZCkKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zc3RhdGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWFkNmRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCkBAIC0wLDAgKzEsOTUxIEBACitTU1RBVEVfVkVSU0lPTiA9ICIzIgorCitTU1RBVEVfTUFOSUZFU1RTID89ICIke1RNUERJUn0vc3N0YXRlLWNvbnRyb2wiCitTU1RBVEVfTUFORklMRVBSRUZJWCA9ICIke1NTVEFURV9NQU5JRkVTVFN9L21hbmlmZXN0LSR7U1NUQVRFX01BTk1BQ0h9LSR7UE59IgorCitkZWYgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgaGFzaCwgZCk6CisgICAgaWYgbm90IGhhc2g6CisgICAgICAgIGhhc2ggPSAiSU5WQUxJRCIKKyAgICByZXR1cm4gaGFzaFs6Ml0gKyAiLyIgKyBzcGVjICsgaGFzaAorCitTU1RBVEVfUEtHQVJDSCAgICA9ICIke1BBQ0tBR0VfQVJDSH0iCitTU1RBVEVfUEtHU1BFQyAgICA9ICJzc3RhdGU6JHtQTn06JHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU306JHtQVn06JHtQUn06JHtTU1RBVEVfUEtHQVJDSH06JHtTU1RBVEVfVkVSU0lPTn06IgorU1NUQVRFX1NXU1BFQyAgICAgPSAic3N0YXRlOiR7QlBOfTo6JHtQVn06JHtQUn06OiR7U1NUQVRFX1ZFUlNJT059OiIKK1NTVEFURV9QS0dOQU1FICAgID0gIiR7U1NUQVRFX0VYVFJBUEFUSH0ke0BnZW5lcmF0ZV9zc3RhdGVmbihkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKSwgZC5nZXRWYXIoJ0JCX1RBU0tIQVNIJywgVHJ1ZSksIGQpfSIKK1NTVEFURV9QS0cgICAgICAgID0gIiR7U1NUQVRFX0RJUn0vJHtTU1RBVEVfUEtHTkFNRX0iCitTU1RBVEVfRVhUUkFQQVRIICAgPSAiIgorU1NUQVRFX0VYVFJBUEFUSFdJTERDQVJEID0gIiIKK1NTVEFURV9QQVRIU1BFQyAgID0gIiR7U1NUQVRFX0RJUn0vJHtTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkR9Ki8ke1NTVEFURV9QS0dTUEVDfSIKKworIyBXZSBkb24ndCB3YW50IHRoZSBzc3RhdGUgdG8gZGVwZW5kIG9uIHRoaW5ncyBsaWtlIHRoZSBkaXN0cm8gc3RyaW5nCisjIG9mIHRoZSBzeXN0ZW0sIHdlIGxldCB0aGUgc3N0YXRlIHBhdGhzIHRha2UgY2FyZSBvZiB0aGlzLgorU1NUQVRFX0VYVFJBUEFUSFt2YXJkZXB2YWx1ZV0gPSAiIgorCisjIEZvciBtdWx0aWxpYiBycG0gdGhlIGFsbGFyY2ggcGFja2FnZWdyb3VwIGZpbGVzIGNhbiBvdmVyd3JpdGUgKGluIHRoZW9yeSB0aGV5J3JlIGlkZW50aWNhbCkKK1NTVEFURV9EVVBXSElURUxJU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8gJHtERVBMT1lfRElSfS9saWNlbnNlcy8gJHtERVBMT1lfRElSX1JQTX0vYWxsLyIKKyMgQXZvaWQgZG9jYm9vay9zZ21sIGNhdGFsb2cgd2FybmluZ3MgZm9yIG5vdworU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3NnbWwgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9zZ21sIgorIyBBcmNoaXZlIHRoZSBzb3VyY2VzIGZvciBtYW55IGFyY2hpdGVjdHVyZXMgaW4gb25lIGRlcGxveSBmb2xkZXIKK1NTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7REVQTE9ZX0RJUl9TUkN9IgorCitTU1RBVEVfU0NBTl9GSUxFUyA/PSAiKi5sYSAqLWNvbmZpZyAqX2NvbmZpZyIKK1NTVEFURV9TQ0FOX0NNRCA/PSAnZmluZCAke1NTVEFURV9CVUlMRERJUn0gXCggLW5hbWUgIiR7QCJcIiAtbyAtbmFtZSBcIiIuam9pbihkLmdldFZhcigiU1NUQVRFX1NDQU5fRklMRVMiLCBUcnVlKS5zcGxpdCgpKX0iIFwpIC10eXBlIGYnCisKK0JCX0hBU0hGSUxFTkFNRSA9ICIke1NTVEFURV9FWFRSQVBBVEh9ICR7U1NUQVRFX1BLR1NQRUN9ICR7U1NUQVRFX1NXU1BFQ30iCisKK1NTVEFURV9BUkNIUyA9ICIgXAorICAgICR7QlVJTERfQVJDSH0gXAorICAgICR7QlVJTERfQVJDSH1fJHtTREtfQVJDSH1fJHtTREtfT1N9IFwKKyAgICAke0JVSUxEX0FSQ0h9XyR7VEFSR0VUX0FSQ0h9IFwKKyAgICAke1NES19BUkNIfV8ke1NES19PU30gXAorICAgICR7U0RLX0FSQ0h9XyR7UEFDS0FHRV9BUkNIfSBcCisgICAgYWxsYXJjaCBcCisgICAgJHtQQUNLQUdFX0FSQ0h9IFwKKyAgICAke01BQ0hJTkV9IgorCitTU1RBVEVfTUFOTUFDSCA/PSAiJHtTU1RBVEVfUEtHQVJDSH0iCisKK1NTVEFURUNSRUFURUZVTkNTID0gInNzdGF0ZV9oYXJkY29kZV9wYXRoIgorU1NUQVRFUE9TVENSRUFURUZVTkNTID0gIiIKK1NTVEFURVBSRUlOU1RGVU5DUyA9ICIiCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1MgPSAic3N0YXRlX2hhcmRjb2RlX3BhdGhfdW5wYWNrIgorU1NUQVRFUE9TVElOU1RGVU5DUyA9ICIiCitFWFRSQV9TVEFHSU5HX0ZJWE1FUyA/PSAiIgorCitTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCA/PSAnZXJyb3InCisKKyMgVGhlIEdudVBHIGtleSBJRCBhbmQgcGFzc3BocmFzZSB0byB1c2UgdG8gc2lnbiBzc3RhdGUgYXJjaGl2ZXMgKG9yIHVuc2V0IHRvCisjIG5vdCBzaWduKQorU1NUQVRFX1NJR19LRVkgPz0gIiIKK1NTVEFURV9TSUdfUEFTU1BIUkFTRSA/PSAiIgorIyBXaGV0aGVyIHRvIHZlcmlmeSB0aGUgR25VUEcgc2lnbmF0dXJlcyB3aGVuIGV4dHJhY3Rpbmcgc3N0YXRlIGFyY2hpdmVzCitTU1RBVEVfVkVSSUZZX1NJRyA/PSAiMCIKKworIyBTcGVjaWZ5IGRpcnMgaW4gd2hpY2ggdGhlIHNoZWxsIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGFuZCBkb24ndCB1c2UgJHtCfQorIyBhcyBkZWZhdWx0IGRpcnMgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBhYm91dCAke0J9IHdpdGggb3RoZXIgdGFzay4KK3NzdGF0ZV9jcmVhdGVfcGFja2FnZVtkaXJzXSA9ICIke1NTVEFURV9CVUlMRERJUn0iCitzc3RhdGVfdW5wYWNrX3BhY2thZ2VbZGlyc10gPSAiJHtTU1RBVEVfSU5TVERJUn0iCisKKyMgRG8gbm90IHJ1biBzc3RhdGVfaGFyZGNvZGVfcGF0aCgpIGluICR7Qn06CisjIHRoZSAke0J9IG1heWJlIHJlbW92ZWQgYnkgY21ha2VfZG9fY29uZmlndXJlKCkgd2hpbGUKKyMgc3N0YXRlX2hhcmRjb2RlX3BhdGgoKSBydW5uaW5nLgorc3N0YXRlX2hhcmRjb2RlX3BhdGhbZGlyc10gPSAiJHtTU1RBVEVfQlVJTERESVJ9IgorCitweXRob24gKCkgeworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmdldFZhcignQlVJTERfQVJDSCcsIEZhbHNlKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke0JVSUxEX0FSQ0h9XyR7U0RLX0FSQ0h9XyR7U0RLX09TfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7QlVJTERfQVJDSH1fJHtUQVJHRVRfQVJDSH0iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtTREtfQVJDSH1fJHtTREtfT1N9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtTREtfQVJDSH1fJHtQQUNLQUdFX0FSQ0h9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBUcnVlKSA9PSAiYWxsIjoKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgImFsbGFyY2giKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfTUFOTUFDSCcsIGQuZXhwYW5kKCIke1BBQ0tBR0VfQVJDSH0iKSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9FWFRSQVBBVEgnLCAiJHtOQVRJVkVMU0JTVFJJTkd9LyIpCisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkQnLCAiKi8iKQorCisgICAgIyBUaGVzZSBjbGFzc2VzIGVuY29kZSBzdGFnaW5nIHBhdGhzIGludG8gdGhlaXIgc2NyaXB0cyBkYXRhIHNvIGNhbiBvbmx5IGJlCisgICAgIyByZXVzZWQgaWYgd2UgbWFuaXB1bGF0ZSB0aGUgcGF0aHMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCk6CisgICAgICAgIHNjYW5fY21kID0gImdyZXAgLUlybCAke1NUQUdJTkdfRElSfSAke1NTVEFURV9CVUlMRERJUn0iCisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfU0NBTl9DTUQnLCBzY2FuX2NtZCkKKworICAgIHVuaXF1ZV90YXNrcyA9IHNldCgoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgZC5zZXRWYXIoJ1NTVEFURVRBU0tTJywgIiAiLmpvaW4odW5pcXVlX3Rhc2tzKSkKKyAgICBmb3IgdGFzayBpbiB1bmlxdWVfdGFza3M6CisgICAgICAgIGQucHJlcGVuZFZhckZsYWcodGFzaywgJ3ByZWZ1bmNzJywgInNzdGF0ZV90YXNrX3ByZWZ1bmMgIikKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKHRhc2ssICdwb3N0ZnVuY3MnLCAiIHNzdGF0ZV90YXNrX3Bvc3RmdW5jIikKK30KKworZGVmIHNzdGF0ZV9pbml0KHRhc2ssIGQpOgorICAgIHNzID0ge30KKyAgICBzc1sndGFzayddID0gdGFzaworICAgIHNzWydkaXJzJ10gPSBbXQorICAgIHNzWydwbGFpbmRpcnMnXSA9IFtdCisgICAgc3NbJ2xvY2tmaWxlcyddID0gW10KKyAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gW10KKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCB0YXNrID0gTm9uZSk6CisgICAgaWYgdGFzayBpcyBOb25lOgorICAgICAgICB0YXNrID0gZC5nZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHRhc2s6CisgICAgICAgICAgICBiYi5mYXRhbCgic3N0YXRlIGNvZGUgcnVubmluZyB3aXRob3V0IHRhc2sgY29udGV4dD8hIikKKyAgICAgICAgdGFzayA9IHRhc2sucmVwbGFjZSgiX3NldHNjZW5lIiwgIiIpCisKKyAgICBpZiB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgorICAgICAgICB0YXNrID0gdGFza1szOl0KKyAgICBpbnB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG91dHB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1vdXRwdXRkaXJzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBwbGFpbmRpcnMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1wbGFpbmRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGxvY2tmaWxlcyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBsb2NrZmlsZXNzaGFyZWQgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGludGVyY2VwdGZ1bmNzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtaW50ZXJjZXB0ZnVuY3MnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIG5vdCB0YXNrIG9yIGxlbihpbnB1dHMpICE9IGxlbihvdXRwdXRzKToKKyAgICAgICAgYmIuZmF0YWwoInNzdGF0ZSB2YXJpYWJsZXMgbm90IHNldHVwIGNvcnJlY3RseT8hIikKKworICAgIGlmIHRhc2sgPT0gInBvcHVsYXRlX2xpYyI6CisgICAgICAgIGQuc2V0VmFyKCJTU1RBVEVfUEtHU1BFQyIsICIke1NTVEFURV9TV1NQRUN9IikKKyAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9FWFRSQVBBVEgiLCAiIikKKworICAgIHNzID0gc3N0YXRlX2luaXQodGFzaywgZCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW4oaW5wdXRzKSk6CisgICAgICAgIHNzdGF0ZV9hZGQoc3MsIGlucHV0c1tpXSwgb3V0cHV0c1tpXSwgZCkKKyAgICBzc1snbG9ja2ZpbGVzJ10gPSBsb2NrZmlsZXMKKyAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gbG9ja2ZpbGVzc2hhcmVkCisgICAgc3NbJ3BsYWluZGlycyddID0gcGxhaW5kaXJzCisgICAgc3NbJ2ludGVyY2VwdGZ1bmNzJ10gPSBpbnRlcmNlcHRmdW5jcworICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX2FkZChzcywgc291cmNlLCBkZXN0LCBkKToKKyAgICBpZiBub3Qgc291cmNlLmVuZHN3aXRoKCIvIik6CisgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAiLyIKKyAgICBpZiBub3QgZGVzdC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgZGVzdCA9IGRlc3QgKyAiLyIKKyAgICBzb3VyY2UgPSBvcy5wYXRoLm5vcm1wYXRoKHNvdXJjZSkKKyAgICBkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChkZXN0KQorICAgIHNyY2Jhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKHNvdXJjZSkKKyAgICBzc1snZGlycyddLmFwcGVuZChbc3JjYmFzZSwgc291cmNlLCBkZXN0XSkKKyAgICByZXR1cm4gc3MKKworZGVmIHNzdGF0ZV9pbnN0YWxsKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorICAgIGltcG9ydCBvZS5zc3RhdGVzaWcKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgc2hhcmVkZmlsZXMgPSBbXQorICAgIHNoYXJlZGRpcnMgPSBbXQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfSIpKQorCisgICAgbWFuaWZlc3QsIGQyID0gb2Uuc3N0YXRlc2lnLnNzdGF0ZV9nZXRfbWFuaWZlc3RfZmlsZW5hbWUoc3NbJ3Rhc2snXSwgZCkKKworICAgIGlmIG9zLmFjY2VzcyhtYW5pZmVzdCwgb3MuUl9PSyk6CisgICAgICAgIGJiLmZhdGFsKCJQYWNrYWdlIGFscmVhZHkgc3RhZ2VkICglcyk/ISIgJSBtYW5pZmVzdCkKKworICAgIGxvY2tzID0gW10KKyAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzLXNoYXJlZCddOgorICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaywgVHJ1ZSkpCisgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcyddOgorICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgYmIuZGVidWcoMiwgIlN0YWdpbmcgZmlsZXMgZnJvbSAlcyB0byAlcyIgJSAoc3RhdGVbMV0sIHN0YXRlWzJdKSkKKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHN0YXRlWzFdKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNwYXRoLCBkc3RwYXRoKSkKKyAgICAgICAgICAgICAgICBzaGFyZWRmaWxlcy5hcHBlbmQoZHN0cGF0aCkKKyAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKKyAgICAgICAgICAgICAgICBkc3RkaXIgPSBzcmNkaXIucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNkaXIsIGRzdGRpcikpCisgICAgICAgICAgICAgICAgaWYgbm90IGRzdGRpci5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBkc3RkaXIgPSBkc3RkaXIgKyAiLyIKKyAgICAgICAgICAgICAgICBzaGFyZWRkaXJzLmFwcGVuZChkc3RkaXIpCisKKyAgICAjIENoZWNrIHRoZSBmaWxlIGxpc3QgZm9yIGNvbmZsaWN0cyBhZ2FpbnN0IGZpbGVzIHdoaWNoIGFscmVhZHkgZXhpc3QKKyAgICB3aGl0ZWxpc3QgPSAoZC5nZXRWYXIoIlNTVEFURV9EVVBXSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1hdGNoID0gW10KKyAgICBmb3IgZiBpbiBzaGFyZWRmaWxlczoKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBmID0gb3MucGF0aC5ub3JtcGF0aChmKQorICAgICAgICAgICAgcmVhbG1hdGNoID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHcgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aCh3KToKKyAgICAgICAgICAgICAgICAgICAgcmVhbG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHJlYWxtYXRjaDoKKyAgICAgICAgICAgICAgICBtYXRjaC5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBzc3RhdGVfc2VhcmNoX2NtZCA9ICJncmVwIC1ybCAnJXMnICVzIC0tZXhjbHVkZT1tYXN0ZXIubGlzdCB8IHNlZCAtZSAnczpeLiovOjonIC1lICdzOlwucG9wdWxhdGUtc3lzcm9vdDo6JyIgJSAoZiwgZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30iKSkKKyAgICAgICAgICAgICAgICBzZWFyY2hfb3V0cHV0ID0gc3VicHJvY2Vzcy5Qb3Blbihzc3RhdGVfc2VhcmNoX2NtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgICAgIGlmIHNlYXJjaF9vdXRwdXQgIT0gIiI6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoLmFwcGVuZCgiTWF0Y2hlZCBpbiAlcyIgJSBzZWFyY2hfb3V0cHV0LnJzdHJpcCgpKQorICAgIGlmIG1hdGNoOgorICAgICAgICBiYi5lcnJvcigiVGhlIHJlY2lwZSAlcyBpcyB0cnlpbmcgdG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgc2hhcmVkICIgXAorICAgICAgICAgICJhcmVhIHdoZW4gdGhvc2UgZmlsZXMgYWxyZWFkeSBleGlzdC4gVGhvc2UgZmlsZXMgYW5kIHRoZWlyIG1hbmlmZXN0ICIgXAorICAgICAgICAgICJsb2NhdGlvbiBhcmU6XG4gICAlc1xuUGxlYXNlIHZlcmlmeSB3aGljaCByZWNpcGUgc2hvdWxkIHByb3ZpZGUgdGhlICIgXAorICAgICAgICAgICJhYm92ZSBmaWxlcy5cblRoZSBidWlsZCBoYXMgc3RvcHBlZCBhcyBjb250aW51aW5nIGluIHRoaXMgc2NlbmFyaW8gV0lMTCAiIFwKKyAgICAgICAgICAiYnJlYWsgdGhpbmdzLCBpZiBub3Qgbm93LCBwb3NzaWJseSBpbiB0aGUgZnV0dXJlICh3ZSd2ZSBzZWVuIGJ1aWxkcyBmYWlsICIgXAorICAgICAgICAgICJzZXZlcmFsIG1vbnRocyBsYXRlcikuIElmIHRoZSBzeXN0ZW0ga25ldyBob3cgdG8gcmVjb3ZlciBmcm9tIHRoaXMgIiBcCisgICAgICAgICAgImF1dG9tYXRpY2FsbHkgaXQgd291bGQgaG93ZXZlciB0aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zICIgXAorICAgICAgICAgICJ3aGljaCBjYW4gcmVzdWx0IGluIHRoaXMgYW5kIHdlIGRvbid0IGtub3cgd2hpY2ggb25lIHRoaXMgaXMuIEl0IG1heSBiZSAiIFwKKyAgICAgICAgICAieW91IGhhdmUgc3dpdGNoZWQgcHJvdmlkZXJzIG9mIHNvbWV0aGluZyBsaWtlIHZpcnR1YWwva2VybmVsIChlLmcuIGZyb20gIiBcCisgICAgICAgICAgImxpbnV4LXlvY3RvIHRvIGxpbnV4LXlvY3RvLWRldiksIGluIHRoYXQgY2FzZSB5b3UgbmVlZCB0byBleGVjdXRlIHRoZSAiIFwKKyAgICAgICAgICAiY2xlYW4gdGFzayBmb3IgYm90aCByZWNpcGVzIGFuZCBpdCB3aWxsIHJlc29sdmUgdGhpcyBlcnJvci4gSXQgbWF5IGJlICIgXAorICAgICAgICAgICJ5b3UgY2hhbmdlZCBESVNUUk9fRkVBVFVSRVMgZnJvbSBzeXN0ZW1kIHRvIHVkZXYgb3IgdmljZSB2ZXJzYS4gQ2xlYW5pbmcgIiBcCisgICAgICAgICAgInRob3NlIHJlY2lwZXMgc2hvdWxkIGFnYWluIHJlc29sdmUgdGhpcyBlcnJvciBob3dldmVyIHN3aXRjaGluZyAiIFwKKyAgICAgICAgICAiRElTVFJPX0ZFQVRVUkVTIG9uIGFuIGV4aXN0aW5nIGJ1aWxkIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkLCB5b3UgIiBcCisgICAgICAgICAgInNob3VsZCByZWFsbHkgY2xlYW4gb3V0IHRtcCBhbmQgcmVidWlsZCAocmV1c2luZyBzc3RhdGUgc2hvdWxkIGJlIHNhZmUpLiAiIFwKKyAgICAgICAgICAiSXQgY291bGQgYmUgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGRldGVjdGVkIGFyZSBoYXJtbGVzcyBpbiB3aGljaCBjYXNlICIgXAorICAgICAgICAgICJhZGRpbmcgdGhlbSB0byBTU1RBVEVfRFVQV0hJVEVMSVNUIG1heSBiZSB0aGUgY29ycmVjdCBzb2x1dGlvbi4gSXQgY291bGQgIiBcCisgICAgICAgICAgImFsc28gYmUgeW91ciBidWlsZCBpcyBpbmNsdWRpbmcgdHdvIGRpZmZlcmVudCBjb25mbGljdGluZyB2ZXJzaW9ucyBvZiAiIFwKKyAgICAgICAgICAidGhpbmdzIChlLmcuIGJsdWV6IDQgYW5kIGJsdWV6IDUgYW5kIHRoZSBjb3JyZWN0IHNvbHV0aW9uIGZvciB0aGF0IHdvdWxkICIgXAorICAgICAgICAgICJiZSB0byByZXNvbHZlIHRoZSBjb25mbGljdC4gSWYgaW4gZG91YnQsIHBsZWFzZSBhc2sgb24gdGhlIG1haWxpbmcgbGlzdCwgIiBcCisgICAgICAgICAgInNoYXJpbmcgdGhlIGVycm9yIGFuZCBmaWxlbGlzdCBhYm92ZS4iICUgXAorICAgICAgICAgIChkLmdldFZhcignUE4nLCBUcnVlKSwgIlxuICIuam9pbihtYXRjaCkpKQorICAgICAgICBiYi5mYXRhbCgiSWYgdGhlIGFib3ZlIG1lc3NhZ2UgaXMgdG9vIG11Y2gsIHRoZSBzaW1wbGVyIHZlcnNpb24gaXMgeW91J3JlIGFkdmlzZWQgdG8gd2lwZSBvdXQgdG1wIGFuZCByZWJ1aWxkIChyZXVzaW5nIHNzdGF0ZSBpcyBmaW5lKS4gVGhhdCB3aWxsIGxpa2VseSBmaXggdGhpbmdzIGluIG1vc3QgKGJ1dCBub3QgYWxsKSBjYXNlcy4iKQorCisgICAgIyBXcml0ZSBvdXQgdGhlIG1hbmlmZXN0CisgICAgZiA9IG9wZW4obWFuaWZlc3QsICJ3IikKKyAgICBmb3IgZmlsZSBpbiBzaGFyZWRmaWxlczoKKyAgICAgICAgZi53cml0ZShmaWxlICsgIlxuIikKKworICAgICMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBkaXJlY3RvcmllcyBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgbWFuaWZlc3QKKyAgICAjIHNvIHRoYXQgd2hlbiB3ZSB0ZXN0IHRvIHNlZSBpZiB0aGV5IHNob3VsZCBiZSBkZWxldGVkIGFueSBjb250ZW50cworICAgICMgYWRkZWQgYnkgdGhlIHRhc2sgd2lsbCBoYXZlIGJlZW4gcmVtb3ZlZCBmaXJzdC4KKyAgICBkaXJzID0gc29ydGVkKHNoYXJlZGRpcnMsIGtleT1sZW4pCisgICAgIyBNdXN0IHJlbW92ZSBjaGlsZHJlbiBmaXJzdCwgd2hpY2ggd2lsbCBoYXZlIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgcGFyZW50CisgICAgZm9yIGRpIGluIHJldmVyc2VkKGRpcnMpOgorICAgICAgICBmLndyaXRlKGRpICsgIlxuIikKKyAgICBmLmNsb3NlKCkKKworICAgICMgQXBwZW5kIHRvIHRoZSBsaXN0IG9mIG1hbmlmZXN0cyBmb3IgdGhpcyBQQUNLQUdFX0FSQ0gKKworICAgIGkgPSBkMi5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vaW5kZXgtJHtTU1RBVEVfTUFOTUFDSH0iKQorICAgIGwgPSBiYi51dGlscy5sb2NrZmlsZShpICsgIi5sb2NrIikKKyAgICBmaWxlZGF0YSA9IGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpICsgIiAiICsgZDIuZ2V0VmFyKCJTU1RBVEVfTUFORklMRVBSRUZJWCIsIFRydWUpICsgIiAiICsgZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSArICJcbiIKKyAgICBtYW5pZmVzdHMgPSBbXQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGkpOgorICAgICAgICB3aXRoIG9wZW4oaSwgInIiKSBhcyBmOgorICAgICAgICAgICAgbWFuaWZlc3RzID0gZi5yZWFkbGluZXMoKQorICAgIGlmIGZpbGVkYXRhIG5vdCBpbiBtYW5pZmVzdHM6CisgICAgICAgIHdpdGggb3BlbihpLCAiYSsiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlZGF0YSkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGwpCisKKyAgICAjIFJ1biB0aGUgYWN0dWFsIGZpbGUgaW5zdGFsbAorICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6CisgICAgICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3RhdGVbMV0sIHN0YXRlWzJdKQorCisgICAgZm9yIHBvc3RpbnN0IGluIChkLmdldFZhcignU1NUQVRFUE9TVElOU1RGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMocG9zdGluc3QsIGQpCisKKyAgICBmb3IgbG9jayBpbiBsb2NrczoKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCitzc3RhdGVfaW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gIlNTVEFURV9EVVBXSElURUxJU1QgU1RBVEVfTUFOTUFDSCBTU1RBVEVfTUFORklMRVBSRUZJWCIKK3NzdGF0ZV9pbnN0YWxsW3ZhcmRlcHNdICs9ICIke1NTVEFURVBPU1RJTlNURlVOQ1N9IgorCitkZWYgc3N0YXRlX2luc3RhbGxwa2coc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGRlZiBwcmVwZGlyKGRpcik6CisgICAgICAgICMgcmVtb3ZlIGRpciBpZiBpdCBleGlzdHMsIGVuc3VyZSBhbnkgcGFyZW50IGRpcmVjdG9yaWVzIGRvIGV4aXN0CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkaXIpCisgICAgICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKworICAgIHNzdGF0ZWluc3QgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9zc3RhdGUtaW5zdGFsbC0lcy8iICUgc3NbJ3Rhc2snXSkKKyAgICBzc3RhdGVmZXRjaCA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHTkFNRScsIFRydWUpICsgJ18nICsgc3NbJ3Rhc2snXSArICIudGd6IgorICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkgKyAnXycgKyBzc1sndGFzayddICsgIi50Z3oiCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3N0YXRlcGtnKToKKyAgICAgICAgcHN0YWdpbmdfZmV0Y2goc3N0YXRlZmV0Y2gsIHNzdGF0ZXBrZywgZCkKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzc3RhdGVwa2cpOgorICAgICAgICBiYi5ub3RlKCJTdGFnaW5nIHBhY2thZ2UgJXMgZG9lcyBub3QgZXhpc3QiICUgc3N0YXRlcGtnKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHNzdGF0ZV9jbGVhbihzcywgZCkKKworICAgIGQuc2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIHNzdGF0ZWluc3QpCisgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0cnLCBzc3RhdGVwa2cpCisKKyAgICBpZiBiYi51dGlscy50b19ib29sZWFuKGQuZ2V0VmFyKCJTU1RBVEVfVkVSSUZZX1NJRyIsIFRydWUpLCBGYWxzZSk6CisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChbImdwZyIsICItLXZlcmlmeSIsIHNzdGF0ZXBrZyArICIuc2lnIiwgc3N0YXRlcGtnXSkgIT0gMDoKKyAgICAgICAgICAgIGJiLndhcm4oIkNhbm5vdCB2ZXJpZnkgc2lnbmF0dXJlIG9uIHNzdGF0ZSBwYWNrYWdlICVzIiAlIHNzdGF0ZXBrZykKKworICAgIGZvciBmIGluIChkLmdldFZhcignU1NUQVRFUFJFSU5TVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgKyBbJ3NzdGF0ZV91bnBhY2tfcGFja2FnZSddICsgKGQuZ2V0VmFyKCdTU1RBVEVQT1NUVU5QQUNLRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisKKyAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKKyAgICAgICAgcHJlcGRpcihzdGF0ZVsxXSkKKyAgICAgICAgb3MucmVuYW1lKHNzdGF0ZWluc3QgKyBzdGF0ZVswXSwgc3RhdGVbMV0pCisgICAgc3N0YXRlX2luc3RhbGwoc3MsIGQpCisKKyAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgorICAgICAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgICAgICBzcmMgPSBzc3RhdGVpbnN0ICsgIi8iICsgcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCAnJykKKyAgICAgICAgZGVzdCA9IHBsYWluCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzcmMpCisgICAgICAgIHByZXBkaXIoZGVzdCkKKyAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKworICAgIHJldHVybiBUcnVlCisKK3B5dGhvbiBzc3RhdGVfaGFyZGNvZGVfcGF0aF91bnBhY2sgKCkgeworICAgICMgRml4dXAgaGFyZGNvZGVkIHBhdGhzCisgICAgIworICAgICMgTm90ZTogVGhlIGxvZ2ljIGJlbG93IG11c3QgbWF0Y2ggdGhlIHJldmVyc2UgbG9naWMgaW4KKyAgICAjIHNzdGF0ZV9oYXJkY29kZV9wYXRoKGQpCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHNzdGF0ZWluc3QgPSBkLmdldFZhcignU1NUQVRFX0lOU1RESVInLCBUcnVlKQorICAgIGZpeG1lZm4gPSAgc3N0YXRlaW5zdCArICJmaXhtZXBhdGgiCisgICAgaWYgb3MucGF0aC5pc2ZpbGUoZml4bWVmbik6CisgICAgICAgIHN0YWdpbmcgPSBkLmdldFZhcignU1RBR0lOR19ESVInLCBUcnVlKQorICAgICAgICBzdGFnaW5nX3RhcmdldCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBzdGFnaW5nX2hvc3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCisKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUjolczpnJyIgJSAoc3RhZ2luZykKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOkZJWE1FU1RBR0lOR0RJUlRBUkdFVDolczpnOyBzOkZJWE1FU1RBR0lOR0RJUjolczpnJyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSSE9TVDolczpnJyIgJSAoc3RhZ2luZ19ob3N0KQorCisgICAgICAgIGV4dHJhX3N0YWdpbmdfZml4bWVzID0gZC5nZXRWYXIoJ0VYVFJBX1NUQUdJTkdfRklYTUVTJywgVHJ1ZSkgb3IgJycKKyAgICAgICAgZm9yIGZpeG1ldmFyIGluIGV4dHJhX3N0YWdpbmdfZml4bWVzLnNwbGl0KCk6CisgICAgICAgICAgICBmaXhtZV9wYXRoID0gZC5nZXRWYXIoZml4bWV2YXIsIFRydWUpCisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCArPSAiIC1lICdzOkZJWE1FXyVzOiVzOmcnIiAlIChmaXhtZXZhciwgZml4bWVfcGF0aCkKKworICAgICAgICAjIEFkZCBzc3RhdGVpbnN0IHRvIGVhY2ggZmlsZW5hbWUgaW4gZml4bWVwYXRoLCB1c2UgeGFyZ3MgdG8gZWZmaWNpZW50bHkgY2FsbCBzZWQKKyAgICAgICAgc3N0YXRlX2hhcmRjb2RlX2NtZCA9ICJzZWQgLWUgJ3M6XjolczpnJyAlcyB8IHhhcmdzICVzIiAlIChzc3RhdGVpbnN0LCBmaXhtZWZuLCBzc3RhdGVfc2VkX2NtZCkKKworICAgICAgICBiYi5ub3RlKCJSZXBsYWNpbmcgZml4bWUgcGF0aHMgaW4gc3N0YXRlIHBhY2thZ2U6ICVzIiAlIChzc3RhdGVfaGFyZGNvZGVfY21kKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBOZWVkIHRvIHJlbW92ZSB0aGlzIG9yIHdlJ2QgY29weSBpdCBpbnRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBtYXkgCisgICAgICAgICMgY29uZmxpY3Qgd2l0aCBhbm90aGVyIHdyaXRlcgorICAgICAgICBvcy5yZW1vdmUoZml4bWVmbikKK30KKworZGVmIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGUoc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisKKyAgICBzc3RhdGVwa2dmaWxlID0gZC5nZXRWYXIoJ1NTVEFURV9QQVRIU1BFQycsIFRydWUpICsgIipfIiArIHNzWyd0YXNrJ10gKyAiLnRneioiCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgJXMiICUgc3N0YXRlcGtnZmlsZSkKKyAgICBvZS5wYXRoLnJlbW92ZShzc3RhdGVwa2dmaWxlKQorCitkZWYgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZXMoZCk6CisgICAgZm9yIHRhc2sgaW4gKGQuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBsZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIHNzID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGxkLCB0YXNrKQorICAgICAgICBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlKHNzLCBsZCkKKworZGVmIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtYW5pZmVzdCwgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIG1maWxlID0gb3BlbihtYW5pZmVzdCkKKyAgICBlbnRyaWVzID0gbWZpbGUucmVhZGxpbmVzKCkKKyAgICBtZmlsZS5jbG9zZSgpCisKKyAgICBmb3IgZW50cnkgaW4gZW50cmllczoKKyAgICAgICAgZW50cnkgPSBlbnRyeS5zdHJpcCgpCisgICAgICAgIGJiLmRlYnVnKDIsICJSZW1vdmluZyBtYW5pZmVzdDogJXMiICUgZW50cnkpCisgICAgICAgICMgV2UgY2FuIHJhY2UgYWdhaW5zdCBhbm90aGVyIHBhY2thZ2UgcG9wdWxhdGluZyBkaXJlY3RvcmllcyBhcyB3ZSdyZSByZW1vdmluZyB0aGVtCisgICAgICAgICMgc28gd2UgaWdub3JlIGVycm9ycyBoZXJlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBlbnRyeS5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGVudHJ5WzotMV0pOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZW50cnlbOi0xXSkKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGVudHJ5KSBhbmQgbGVuKG9zLmxpc3RkaXIoZW50cnkpKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihlbnRyeVs6LTFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShlbnRyeSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBvZS5wYXRoLnJlbW92ZShtYW5pZmVzdCkKKworZGVmIHNzdGF0ZV9jbGVhbihzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgZDIgPSBkLmNyZWF0ZUNvcHkoKQorICAgIHN0YW1wX2NsZWFuID0gZC5nZXRWYXIoIlNUQU1QQ0xFQU4iLCBUcnVlKQorICAgIGV4dHJhaW5mID0gZC5nZXRWYXJGbGFnKCJkb18iICsgc3NbJ3Rhc2snXSwgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKQorICAgIGlmIGV4dHJhaW5mOgorICAgICAgICBkMi5zZXRWYXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCisgICAgICAgIHdpbGRjYXJkX3N0ZmlsZSA9ICIlcy5kb18lcyouJXMiICUgKHN0YW1wX2NsZWFuLCBzc1sndGFzayddLCBleHRyYWluZikKKyAgICBlbHNlOgorICAgICAgICB3aWxkY2FyZF9zdGZpbGUgPSAiJXMuZG9fJXMqIiAlIChzdGFtcF9jbGVhbiwgc3NbJ3Rhc2snXSkKKworICAgIG1hbmlmZXN0ID0gZDIuZXhwYW5kKCIke1NTVEFURV9NQU5GSUxFUFJFRklYfS4lcyIgJSBzc1sndGFzayddKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMobWFuaWZlc3QpOgorICAgICAgICBsb2NrcyA9IFtdCisgICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CisgICAgICAgICAgICBsb2Nrcy5hcHBlbmQoYmIudXRpbHMubG9ja2ZpbGUobG9jaykpCisgICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMnXToKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKworICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobWFuaWZlc3QsIGQpCisKKyAgICAgICAgZm9yIGxvY2sgaW4gbG9ja3M6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAjIFJlbW92ZSB0aGUgY3VycmVudCBhbmQgcHJldmlvdXMgc3RhbXBzLCBidXQga2VlcCB0aGUgc2lnZGF0YS4KKyAgICAjCisgICAgIyBUaGUgZ2xvYigpIG1hdGNoZXMgZG9fdGFzayogd2hpY2ggbWF5IG1hdGNoIG11bHRpcGxlIHRhc2tzLCBmb3IKKyAgICAjIGV4YW1wbGU6IGRvX3BhY2thZ2UgYW5kIGRvX3BhY2thZ2Vfd3JpdGVfaXBrLCBzbyB3ZSBuZWVkIHRvCisgICAgIyBleGFjdGx5IG1hdGNoICouZG9fdGFzay4qIGFuZCAqLmRvX3Rhc2tfc2V0c2NlbmUuKgorICAgIHJtX3N0YW1wID0gJy5kb18lcy4nICUgc3NbJ3Rhc2snXQorICAgIHJtX3NldHNjZW5lID0gJy5kb18lc19zZXRzY2VuZS4nICUgc3NbJ3Rhc2snXQorICAgICMgRm9yIEJCX1NJR05BVFVSRV9IQU5ETEVSID0gIm5vb3AiCisgICAgcm1fbm9oYXNoID0gIi5kb18lcyIgJSBzc1sndGFzayddCisgICAgZm9yIHN0ZmlsZSBpbiBnbG9iLmdsb2Iod2lsZGNhcmRfc3RmaWxlKToKKyAgICAgICAgIyBLZWVwIHRoZSBzaWdkYXRhCisgICAgICAgIGlmICIuc2lnZGF0YS4iIGluIHN0ZmlsZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBkaXJlY3RvcnkKKyAgICAgICAgaWYgc3RmaWxlLmVuZHN3aXRoKCcudGFpbnQnKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJtX3N0YW1wIGluIHN0ZmlsZSBvciBybV9zZXRzY2VuZSBpbiBzdGZpbGUgb3IgXAorICAgICAgICAgICAgICAgIHN0ZmlsZS5lbmRzd2l0aChybV9ub2hhc2gpOgorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUoc3RmaWxlKQorCitzc3RhdGVfY2xlYW5bdmFyZGVwc2V4Y2x1ZGVdID0gIlNTVEFURV9NQU5GSUxFUFJFRklYIgorCitDTEVBTkZVTkNTICs9ICJzc3RhdGVfY2xlYW5hbGwiCisKK3B5dGhvbiBzc3RhdGVfY2xlYW5hbGwoKSB7CisgICAgYmIubm90ZSgiUmVtb3Zpbmcgc2hhcmVkIHN0YXRlIGZvciBwYWNrYWdlICVzIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorCisgICAgbWFuaWZlc3RfZGlyID0gZC5nZXRWYXIoJ1NTVEFURV9NQU5JRkVTVFMnLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdF9kaXIpOgorICAgICAgICByZXR1cm4KKworICAgIHRhc2tzID0gZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBuYW1lIGluIHRhc2tzOgorICAgICAgICBsZCA9IGQuY3JlYXRlQ29weSgpCisgICAgICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhsZCwgbmFtZSkKKyAgICAgICAgc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgbGQpCit9CisKK3B5dGhvbiBzc3RhdGVfaGFyZGNvZGVfcGF0aCAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MsIHBsYXRmb3JtCisKKyAgICAjIE5lZWQgdG8gcmVtb3ZlIGhhcmRjb2RlZCBwYXRocyBhbmQgZml4IHRoZXNlIHdoZW4gd2UgaW5zdGFsbCB0aGUKKyAgICAjIHN0YWdpbmcgcGFja2FnZXMuCisgICAgIworICAgICMgTm90ZTogdGhlIGxvZ2ljIGluIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gbWF0Y2ggdGhlIHJldmVyc2UgbG9naWMKKyAgICAjIGluIHNzdGF0ZV9pbnN0YWxscGtnKHNzLCBkKQorCisgICAgc3RhZ2luZyA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUicsIFRydWUpCisgICAgc3RhZ2luZ190YXJnZXQgPSBkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSkKKyAgICBzdGFnaW5nX2hvc3QgPSBkLmdldFZhcignU1RBR0lOR19ESVJfSE9TVCcsIFRydWUpCisgICAgc3N0YXRlX2J1aWxkZGlyID0gZC5nZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIFRydWUpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcyciICUgKHN0YWdpbmcpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVI6ZyciICUgKHN0YWdpbmcpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIC1lICclcyciICUgKHN0YWdpbmdfdGFyZ2V0LCBzdGFnaW5nKQorICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6JXM6RklYTUVTVEFHSU5HRElSVEFSR0VUOmc7IHM6JXM6RklYTUVTVEFHSU5HRElSOmcnIiAlIChzdGFnaW5nX3RhcmdldCwgc3RhZ2luZykKKyAgICBlbHNlOgorICAgICAgICBzc3RhdGVfZ3JlcF9jbWQgPSAiZ3JlcCAtbCAtZSAnJXMnIiAlIChzdGFnaW5nX2hvc3QpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVJIT1NUOmcnIiAlIChzdGFnaW5nX2hvc3QpCisKKyAgICBleHRyYV9zdGFnaW5nX2ZpeG1lcyA9IGQuZ2V0VmFyKCdFWFRSQV9TVEFHSU5HX0ZJWE1FUycsIFRydWUpIG9yICcnCisgICAgZm9yIGZpeG1ldmFyIGluIGV4dHJhX3N0YWdpbmdfZml4bWVzLnNwbGl0KCk6CisgICAgICAgIGZpeG1lX3BhdGggPSBkLmdldFZhcihmaXhtZXZhciwgVHJ1ZSkKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgKz0gIiAtZSAnczolczpGSVhNRV8lczpnJyIgJSAoZml4bWVfcGF0aCwgZml4bWV2YXIpCisKKyAgICBmaXhtZWZuID0gIHNzdGF0ZV9idWlsZGRpciArICJmaXhtZXBhdGgiCisKKyAgICBzc3RhdGVfc2Nhbl9jbWQgPSBkLmdldFZhcignU1NUQVRFX1NDQU5fQ01EJywgVHJ1ZSkKKyAgICBzc3RhdGVfZmlsZWxpc3RfY21kID0gInRlZSAlcyIgJSAoZml4bWVmbikKKworICAgICMgZml4bWVwYXRoIGZpbGUgbmVlZHMgcmVsYXRpdmUgcGF0aHMsIGRyb3Agc3N0YXRlX2J1aWxkZGlyIHByZWZpeAorICAgIHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQgPSAic2VkIC1pIC1lICdzOl4lczo6ZycgJXMiICUgKHNzdGF0ZV9idWlsZGRpciwgZml4bWVmbikKKworICAgIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQgPSAnLS1uby1ydW4taWYtZW1wdHknCisgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ0Rhcndpbic6CisgICAgICAgIHhhcmdzX25vX2VtcHR5X3J1bl9jbWQgPSAnJworCisgICAgIyBMaW1pdCB0aGUgZml4cGF0aHMgYW5kIHNlZCBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZSBpbml0aWFsIGdyZXAgc2VhcmNoCisgICAgIyBUaGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFraW5nIHN1cmUgdGhlIHZmcyBjYWNoZSBpcyBob3QKKyAgICBzc3RhdGVfaGFyZGNvZGVfY21kID0gIiVzIHwgeGFyZ3MgJXMgfCAlcyB8IHhhcmdzICVzICVzIiAlIChzc3RhdGVfc2Nhbl9jbWQsIHNzdGF0ZV9ncmVwX2NtZCwgc3N0YXRlX2ZpbGVsaXN0X2NtZCwgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCwgc3N0YXRlX3NlZF9jbWQpCisKKyAgICBiYi5ub3RlKCJSZW1vdmluZyBoYXJkY29kZWQgcGF0aHMgZnJvbSBzc3RhdGUgcGFja2FnZTogJyVzJyIgJSAoc3N0YXRlX2hhcmRjb2RlX2NtZCkpCisgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9oYXJkY29kZV9jbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBJZiB0aGUgZml4bWVmbiBpcyBlbXB0eSwgcmVtb3ZlIGl0Li4KKyAgICBpZiBvcy5zdGF0KGZpeG1lZm4pLnN0X3NpemUgPT0gMDoKKyAgICAgICAgb3MucmVtb3ZlKGZpeG1lZm4pCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiUmVwbGFjaW5nIGFic29sdXRlIHBhdGhzIGluIGZpeG1lcGF0aCBmaWxlOiAnJXMnIiAlIChzc3RhdGVfZmlsZWxpc3RfcmVsYXRpdmVfY21kKSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQsIHNoZWxsPVRydWUpCit9CisKK2RlZiBzc3RhdGVfcGFja2FnZShzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIGRlZiBtYWtlX3JlbGF0aXZlX3N5bWxpbmsocGF0aCwgb3V0cHV0cGF0aCwgZCk6CisgICAgICAgICMgUmVwbGFjZSBvdXQgYWJzb2x1dGUgVE1QRElSIHBhdGhzIGluIHN5bWxpbmtzIHdpdGggcmVsYXRpdmUgb25lcworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmspOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBsaW5rLnN0YXJ0c3dpdGgodG1wZGlyKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlcHRoID0gb3V0cHV0cGF0aC5ycGFydGl0aW9uKHRtcGRpcilbMl0uY291bnQoJy8nKQorICAgICAgICBiYXNlID0gbGluay5wYXJ0aXRpb24odG1wZGlyKVsyXS5zdHJpcCgpCisgICAgICAgIHdoaWxlIGRlcHRoID4gMToKKyAgICAgICAgICAgIGJhc2UgPSAiLy4uIiArIGJhc2UKKyAgICAgICAgICAgIGRlcHRoIC09IDEKKyAgICAgICAgYmFzZSA9ICIuIiArIGJhc2UKKworICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nIGFic29sdXRlIHBhdGggJXMgd2l0aCByZWxhdGl2ZSBwYXRoICVzIGZvciAlcyIgJSAobGluaywgYmFzZSwgb3V0cHV0cGF0aCkpCisgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgICAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCisKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIHNzdGF0ZWJ1aWxkID0gZC5leHBhbmQoIiR7V09SS0RJUn0vc3N0YXRlLWJ1aWxkLSVzLyIgJSBzc1sndGFzayddKQorICAgIHNzdGF0ZXBrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkgKyAnXycrIHNzWyd0YXNrJ10gKyAiLnRneiIKKyAgICBiYi51dGlscy5yZW1vdmUoc3N0YXRlYnVpbGQsIHJlY3Vyc2U9VHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlYnVpbGQpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzc3RhdGVwa2cpKQorICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0pOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc3JjYmFzZSA9IHN0YXRlWzBdLnJzdHJpcCgiLyIpLnJzcGxpdCgnLycsIDEpWzBdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzdGF0ZVsxXSk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKKyAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICBtYWtlX3JlbGF0aXZlX3N5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgZCkKKyAgICAgICAgYmIuZGVidWcoMiwgIlByZXBhcmluZyB0cmVlICVzIGZvciBwYWNrYWdpbmcgYXQgJXMiICUgKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKSkKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgorICAgICAgICBwZGlyID0gcGxhaW4ucmVwbGFjZSh3b3JrZGlyLCBzc3RhdGVidWlsZCkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBsYWluKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGRpcikKKyAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0cmVlKHBsYWluLCBwZGlyKQorCisgICAgZC5zZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIHNzdGF0ZWJ1aWxkKQorICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHJywgc3N0YXRlcGtnKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTU1RBVEVDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpICsgWydzc3RhdGVfY3JlYXRlX3BhY2thZ2UnXSArIFwKKyAgICAgICAgICAgICAoZC5nZXRWYXIoJ1NTVEFURVBPU1RDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKyAgCisgICAgYmIuc2lnZ2VuLmR1bXBfdGhpc190YXNrKHNzdGF0ZXBrZyArICIuc2lnaW5mbyIsIGQpCisKKyAgICByZXR1cm4KKworZGVmIHBzdGFnaW5nX2ZldGNoKHNzdGF0ZWZldGNoLCBzc3RhdGVwa2csIGQpOgorICAgIGltcG9ydCBiYi5mZXRjaDIKKworICAgICMgT25seSB0cnkgYW5kIGZldGNoIGlmIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGEgbWlycm9yCisgICAgbWlycm9ycyA9IGQuZ2V0VmFyKCdTU1RBVEVfTUlSUk9SUycsIFRydWUpCisgICAgaWYgbm90IG1pcnJvcnM6CisgICAgICAgIHJldHVybgorCisgICAgIyBDb3B5IHRoZSBkYXRhIG9iamVjdCBhbmQgb3ZlcnJpZGUgRExfRElSIGFuZCBTUkNfVVJJCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICBkbGRpciA9IGxvY2FsZGF0YS5leHBhbmQoIiR7U1NUQVRFX0RJUn0iKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkbGRpcikKKworICAgIGxvY2FsZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0ZJTEVTUEFUSCcsIGRsZGlyKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0RMX0RJUicsIGRsZGlyKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQorCisgICAgIyBpZiBCQl9OT19ORVRXT1JLIGlzIHNldCBidXQgd2UgYWxzbyBoYXZlIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSywKKyAgICAjIHdlJ2xsIHdhbnQgdG8gYWxsb3cgbmV0d29yayBhY2Nlc3MgZm9yIHRoZSBjdXJyZW50IHNldCBvZiBmZXRjaGVzLgorICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSIgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSycsIFRydWUpID09ICIxIjoKKyAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignQkJfTk9fTkVUV09SSycpCisKKyAgICAjIFRyeSBhIGZldGNoIGZyb20gdGhlIHNzdGF0ZSBtaXJyb3IsIGlmIGl0IGZhaWxzIGp1c3QgcmV0dXJuIGFuZAorICAgICMgd2Ugd2lsbCBidWlsZCB0aGUgcGFja2FnZQorICAgIHVyaXMgPSBbJ2ZpbGU6Ly97MH0nLmZvcm1hdChzc3RhdGVmZXRjaCksCisgICAgICAgICAgICAnZmlsZTovL3swfS5zaWdpbmZvJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorICAgIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoIlNTVEFURV9WRVJJRllfU0lHIiwgVHJ1ZSksIEZhbHNlKToKKyAgICAgICAgdXJpcyArPSBbJ2ZpbGU6Ly97MH0uc2lnJy5mb3JtYXQoc3N0YXRlZmV0Y2gpXQorCisgICAgZm9yIHNyY3VyaSBpbiB1cmlzOgorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTUkNfVVJJJywgc3JjdXJpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFtzcmN1cmldLCBsb2NhbGRhdGEsIGNhY2hlPUZhbHNlKQorICAgICAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisKKyAgICAgICAgICAgICMgTmVlZCB0byBvcHRpbWlzZSB0aGlzLCBpZiB1c2luZyBmaWxlOi8vIHVybHMsIHRoZSBmZXRjaGVyIGp1c3QgY2hhbmdlcyB0aGUgbG9jYWwgcGF0aAorICAgICAgICAgICAgIyBGb3Igbm93IHdvcmsgYXJvdW5kIGJ5IHN5bWxpbmtpbmcKKyAgICAgICAgICAgIGxvY2FscGF0aCA9IGJiLmRhdGEuZXhwYW5kKGZldGNoZXIubG9jYWxwYXRoKHNyY3VyaSksIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGlmIGxvY2FscGF0aCAhPSBzc3RhdGVwa2cgYW5kIG9zLnBhdGguZXhpc3RzKGxvY2FscGF0aCkgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVwa2cpOgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsobG9jYWxwYXRoLCBzc3RhdGVwa2cpCisKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uOgorICAgICAgICAgICAgYnJlYWsKKworZGVmIHNzdGF0ZV9zZXRzY2VuZShkKToKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBhY2NlbGVyYXRlID0gc3N0YXRlX2luc3RhbGxwa2coc2hhcmVkX3N0YXRlLCBkKQorICAgIGlmIG5vdCBhY2NlbGVyYXRlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJObyBzdWl0YWJsZSBzdGFnaW5nIHBhY2thZ2UgZm91bmQiKQorCitweXRob24gc3N0YXRlX3Rhc2tfcHJlZnVuYyAoKSB7CisgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisgICAgc3N0YXRlX2NsZWFuKHNoYXJlZF9zdGF0ZSwgZCkKK30KKworcHl0aG9uIHNzdGF0ZV90YXNrX3Bvc3RmdW5jICgpIHsKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBzc3RhdGVfaW5zdGFsbChzaGFyZWRfc3RhdGUsIGQpCisgICAgZm9yIGludGVyY2VwdCBpbiBzaGFyZWRfc3RhdGVbJ2ludGVyY2VwdGZ1bmNzJ106CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhpbnRlcmNlcHQsIGQpCisgICAgb21hc2sgPSBvcy51bWFzaygwMDIpCisgICAgaWYgb21hc2sgIT0gMDAyOgorICAgICAgIGJiLm5vdGUoIlVzaW5nIHVtYXNrIDAwMiAobm90ICUwbykgZm9yIHNzdGF0ZSBwYWNrYWdpbmciICUgb21hc2spCisgICAgc3N0YXRlX3BhY2thZ2Uoc2hhcmVkX3N0YXRlLCBkKQorICAgIG9zLnVtYXNrKG9tYXNrKQorfQorICAKKworIworIyBTaGVsbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHNzdGF0ZSBwYWNrYWdlIGZyb20gYSBkaXJlY3RvcnkKKyMgc2V0IGFzIFNTVEFURV9CVUlMRERJUi4gV2lsbCBiZSBydW4gZnJvbSB3aXRoaW4gU1NUQVRFX0JVSUxERElSLgorIworc3N0YXRlX2NyZWF0ZV9wYWNrYWdlICgpIHsKKwlURklMRT1gbWt0ZW1wICR7U1NUQVRFX1BLR30uWFhYWFhYWFhgCisJIyBOZWVkIHRvIGhhbmRsZSBlbXB0eSBkaXJlY3RvcmllcworCWlmIFsgIiQobHMgLUEpIiBdOyB0aGVuCisJCXNldCArZQorCQl0YXIgLWN6ZiAkVEZJTEUgKgorCQlyZXQ9JD8KKwkJaWYgWyAkcmV0IC1uZSAwIF0gJiYgWyAkcmV0IC1uZSAxIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQlzZXQgLWUKKwllbHNlCisJCXRhciAtY3ogLS1maWxlPSRURklMRSAtLWZpbGVzLWZyb209L2Rldi9udWxsCisJZmkKKwljaG1vZCAwNjY0ICRURklMRSAKKwltdiAtZiAkVEZJTEUgJHtTU1RBVEVfUEtHfQorCisJaWYgWyAtbiAiJHtTU1RBVEVfU0lHX0tFWX0iIF07IHRoZW4KKwkJcm0gLWYgJHtTU1RBVEVfUEtHfS5zaWcKKwkJZWNobyAke1NTVEFURV9TSUdfUEFTU1BIUkFTRX0gfCBncGcgLS1iYXRjaCAtLXBhc3NwaHJhc2UtZmQgMCAtLWRldGFjaC1zaWduIC0tbG9jYWwtdXNlciAke1NTVEFURV9TSUdfS0VZfSAtLW91dHB1dCAke1NTVEFURV9QS0d9LnNpZyAke1NTVEFURV9QS0d9CisJZmkKKworCWNkICR7V09SS0RJUn0KKwlybSAtcmYgJHtTU1RBVEVfQlVJTERESVJ9Cit9CisKKyMKKyMgU2hlbGwgZnVuY3Rpb24gdG8gZGVjb21wcmVzcyBhbmQgcHJlcGFyZSBhIHBhY2thZ2UgZm9yIGluc3RhbGxhdGlvbgorIyBXaWxsIGJlIHJ1biBmcm9tIHdpdGhpbiBTU1RBVEVfSU5TVERJUi4KKyMKK3NzdGF0ZV91bnBhY2tfcGFja2FnZSAoKSB7CisJdGFyIC14bXZ6ZiAke1NTVEFURV9QS0d9CisJIyBVc2UgIiEgLXcgfHwiIHRvIHJldHVybiB0cnVlIGZvciByZWFkIG9ubHkgZmlsZXMKKwlbICEgLXcgJHtTU1RBVEVfUEtHfSBdIHx8IHRvdWNoIC0tbm8tZGVyZWZlcmVuY2UgJHtTU1RBVEVfUEtHfQorfQorCitCQl9IQVNIQ0hFQ0tfRlVOQ1RJT04gPSAic3N0YXRlX2NoZWNraGFzaGVzIgorCitkZWYgc3N0YXRlX2NoZWNraGFzaGVzKHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQsIHNpZ2luZm89RmFsc2UpOgorCisgICAgcmV0ID0gW10KKyAgICBtaXNzZWQgPSBbXQorICAgIGV4dGVuc2lvbiA9ICIudGd6IgorICAgIGlmIHNpZ2luZm86CisgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbiArICIuc2lnaW5mbyIKKworICAgIGRlZiBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKToKKyAgICAgICAgIyBNYWdpYyBkYXRhIGZyb20gQkJfSEFTSEZJTEVOQU1FCisgICAgICAgIHNwbGl0aGFzaGZuID0gc3FfaGFzaGZuW3Rhc2tdLnNwbGl0KCIgIikKKyAgICAgICAgc3BlYyA9IHNwbGl0aGFzaGZuWzFdCisgICAgICAgIGV4dHJhcGF0aCA9IHNwbGl0aGFzaGZuWzBdCisKKyAgICAgICAgdG5hbWUgPSBzcV90YXNrW3Rhc2tdWzM6XQorCisgICAgICAgIGlmIHRuYW1lIGluIFsiZmV0Y2giLCAidW5wYWNrIiwgInBhdGNoIiwgInBvcHVsYXRlX2xpYyIsICJwcmVjb25maWd1cmUiXSBhbmQgc3BsaXRoYXNoZm5bMl06CisgICAgICAgICAgICBzcGVjID0gc3BsaXRoYXNoZm5bMl0KKyAgICAgICAgICAgIGV4dHJhcGF0aCA9ICIiCisKKyAgICAgICAgcmV0dXJuIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUKKworCisgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisKKyAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisKKyAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKCIke1NTVEFURV9ESVJ9LyIgKyBleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgZXh0ZW5zaW9uKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNzdGF0ZWZpbGUpOgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogRm91bmQgdmFsaWQgc3N0YXRlIGZpbGUgJXMiICUgc3N0YXRlZmlsZSkKKyAgICAgICAgICAgIHJldC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBMb29rZWQgZm9yIGJ1dCBkaWRuJ3QgZmluZCBmaWxlICVzIiAlIHNzdGF0ZWZpbGUpCisKKyAgICBtaXJyb3JzID0gZC5nZXRWYXIoIlNTVEFURV9NSVJST1JTIiwgVHJ1ZSkKKyAgICBpZiBtaXJyb3JzOgorICAgICAgICAjIENvcHkgdGhlIGRhdGEgb2JqZWN0IGFuZCBvdmVycmlkZSBETF9ESVIgYW5kIFNSQ19VUkkKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGRsZGlyID0gbG9jYWxkYXRhLmV4cGFuZCgiJHtTU1RBVEVfRElSfSIpCisgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdGSUxFU1BBVEgnLCBkbGRpcikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignRExfRElSJywgZGxkaXIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSRU1JUlJPUlMnLCBtaXJyb3JzKQorCisgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGUgdXNpbmcgcHJlbWlycm9yIG9mOiAlcyIgJSBtaXJyb3JzKQorCisgICAgICAgICMgaWYgQkJfTk9fTkVUV09SSyBpcyBzZXQgYnV0IHdlIGFsc28gaGF2ZSBTU1RBVEVfTUlSUk9SX0FMTE9XX05FVFdPUkssCisgICAgICAgICMgd2UnbGwgd2FudCB0byBhbGxvdyBuZXR3b3JrIGFjY2VzcyBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIGZldGNoZXMuCisgICAgICAgIGlmIGxvY2FsZGF0YS5nZXRWYXIoJ0JCX05PX05FVFdPUksnLCBUcnVlKSA9PSAiMSIgYW5kIGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSycsIFRydWUpID09ICIxIjoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5kZWxWYXIoJ0JCX05PX05FVFdPUksnKQorCisgICAgICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBGZXRjaENvbm5lY3Rpb25DYWNoZQorICAgICAgICBkZWYgY2hlY2tzdGF0dXNfaW5pdCh0aHJlYWRfd29ya2VyKToKKyAgICAgICAgICAgIHRocmVhZF93b3JrZXIuY29ubmVjdGlvbl9jYWNoZSA9IEZldGNoQ29ubmVjdGlvbkNhY2hlKCkKKworICAgICAgICBkZWYgY2hlY2tzdGF0dXNfZW5kKHRocmVhZF93b3JrZXIpOgorICAgICAgICAgICAgdGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlLmNsb3NlX2Nvbm5lY3Rpb25zKCkKKworICAgICAgICBkZWYgY2hlY2tzdGF0dXModGhyZWFkX3dvcmtlciwgYXJnKToKKyAgICAgICAgICAgICh0YXNrLCBzc3RhdGVmaWxlKSA9IGFyZworCisgICAgICAgICAgICBsb2NhbGRhdGEyID0gYmIuZGF0YS5jcmVhdGVDb3B5KGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNyY3VyaSA9ICJmaWxlOi8vIiArIHNzdGF0ZWZpbGUKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ19VUkknLCBzcmN1cmkpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBBdHRlbXB0aW5nIHRvIGZldGNoICVzIiAlIHNyY3VyaSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjdXJpLnNwbGl0KCksIGxvY2FsZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9jYWNoZT10aHJlYWRfd29ya2VyLmNvbm5lY3Rpb25fY2FjaGUpCisgICAgICAgICAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogU3VjY2Vzc2Z1bCBmZXRjaCB0ZXN0IGZvciAlcyIgJSBzcmN1cmkpCisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGlmIHRhc2sgaW4gbWlzc2VkOgorICAgICAgICAgICAgICAgICAgICBtaXNzZWQucmVtb3ZlKHRhc2spCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbWlzc2VkLmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IFVuc3VjY2Vzc2Z1bCBmZXRjaCB0ZXN0IGZvciAlcyIgJSBzcmN1cmkpCisgICAgICAgICAgICAgICAgcGFzcyAgICAgCisKKyAgICAgICAgdGFza2xpc3QgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc3FfZm4pKToKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gcmV0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgdGFza2xpc3QuYXBwZW5kKCh0YXNrLCBzc3RhdGVmaWxlKSkKKworICAgICAgICBpZiB0YXNrbGlzdDoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNoZWNraW5nIHNzdGF0ZSBtaXJyb3Igb2JqZWN0IGF2YWlsYWJpbGl0eSAoZm9yICVzIG9iamVjdHMpIiAlIGxlbih0YXNrbGlzdCkpCisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICAgICBucHJvYyA9IG1pbihtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCksIGxlbih0YXNrbGlzdCkpCisKKyAgICAgICAgICAgIHBvb2wgPSBvZS51dGlscy5UaHJlYWRlZFBvb2wobnByb2MsIGxlbih0YXNrbGlzdCksCisgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9pbml0PWNoZWNrc3RhdHVzX2luaXQsIHdvcmtlcl9lbmQ9Y2hlY2tzdGF0dXNfZW5kKQorICAgICAgICAgICAgZm9yIHQgaW4gdGFza2xpc3Q6CisgICAgICAgICAgICAgICAgcG9vbC5hZGRfdGFzayhjaGVja3N0YXR1cywgdCkKKyAgICAgICAgICAgIHBvb2wuc3RhcnQoKQorICAgICAgICAgICAgcG9vbC53YWl0X2NvbXBsZXRpb24oKQorCisgICAgaW5oZXJpdGxpc3QgPSBkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpCisgICAgaWYgInRvYXN0ZXIiIGluIGluaGVyaXRsaXN0OgorICAgICAgICBldmRhdGEgPSB7J21pc3NlZCc6IFtdLCAnZm91bmQnOiBbXX07CisgICAgICAgIGZvciB0YXNrIGluIG1pc3NlZDoKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyAiLnRneiIpCisgICAgICAgICAgICBldmRhdGFbJ21pc3NlZCddLmFwcGVuZCggKHNxX2ZuW3Rhc2tdLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdLCBzc3RhdGVmaWxlICkgKQorICAgICAgICBmb3IgdGFzayBpbiByZXQ6CisgICAgICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKyAgICAgICAgICAgIHNzdGF0ZWZpbGUgPSBkLmV4cGFuZChleHRyYXBhdGggKyBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBzcV9oYXNoW3Rhc2tdLCBkKSArICJfIiArIHRuYW1lICsgIi50Z3oiKQorICAgICAgICAgICAgZXZkYXRhWydmb3VuZCddLmFwcGVuZCggKHNxX2ZuW3Rhc2tdLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdLCBzc3RhdGVmaWxlICkgKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk1pc3NlZFNzdGF0ZSIsIGV2ZGF0YSksIGQpCisKKyAgICBpZiBoYXNhdHRyKGJiLnBhcnNlLnNpZ2dlbiwgImNoZWNraGFzaGVzIik6CisgICAgICAgIGJiLnBhcnNlLnNpZ2dlbi5jaGVja2hhc2hlcyhtaXNzZWQsIHJldCwgc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCkKKworICAgIHJldHVybiByZXQKKworQkJfU0VUU0NFTkVfREVQVkFMSUQgPSAic2V0c2NlbmVfZGVwdmFsaWQiCisKK2RlZiBzZXRzY2VuZV9kZXB2YWxpZCh0YXNrLCB0YXNrZGVwZW5kZWVzLCBub3RuZWVkZWQsIGQpOgorICAgICMgdGFza2RlcGVuZGVlcyBpcyBhIGRpY3Qgb2YgdGFza3Mgd2hpY2ggZGVwZW5kIG9uIHRhc2ssIGVhY2ggYmVpbmcgYSAzIGl0ZW0gbGlzdCBvZiBbUE4sIFRBU0tOQU1FLCBGSUxFTkFNRV0KKyAgICAjIHRhc2sgaXMgaW5jbHVkZWQgaW4gdGFza2RlcGVuZGVlcyB0b28KKworICAgIGJiLmRlYnVnKDIsICJDb25zaWRlcmluZyBzZXRzY2VuZSB0YXNrOiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbdGFza10pKSkKKworICAgIGRlZiBpc05hdGl2ZUNyb3NzKHgpOgorICAgICAgICByZXR1cm4geC5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3MtIiBpbiB4IG9yICItY3Jvc3NzZGsiIGluIHgKKworICAgIGRlZiBpc1Bvc3RJbnN0RGVwKHgpOgorICAgICAgICBpZiB4IGluIFsicWVtdS1uYXRpdmUiLCAiZ2RrLXBpeGJ1Zi1uYXRpdmUiLCAicWVtdXdyYXBwZXItY3Jvc3MiLCAiZGVwbW9kd3JhcHBlci1jcm9zcyIsICJzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUiLCAiZ3RrLWljb24tdXRpbHMtbmF0aXZlIl06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgV2Ugb25seSBuZWVkIHRvIHRyaWdnZXIgcG9wdWxhdGVfbGljIHRocm91Z2ggZGlyZWN0IGRlcGVuZGVuY2llcworICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BvcHVsYXRlX2xpYyI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBlbmRlZXM6CisgICAgICAgIGJiLmRlYnVnKDIsICIgIGNvbnNpZGVyaW5nIGRlcGVuZGVuY3k6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1tkZXBdKSkpCisgICAgICAgIGlmIHRhc2sgPT0gZGVwOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgZGVwIGluIG5vdG5lZWRlZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgZG9fcGFja2FnZV93cml0ZV8qIGFuZCBkb19wYWNrYWdlIGRvZXNuJ3QgbmVlZCBkb19wYWNrYWdlCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BhY2thZ2UiIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgZG9fcGFja2FnZV93cml0ZV8qIGFuZCBkb19wYWNrYWdlIGRvZXNuJ3QgbmVlZCBkb19wb3B1bGF0ZV9zeXNyb290LCB1bmxlc3MgaXMgYSBwb3N0aW5zdGFsbCBkZXBlbmRlbmN5CisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGlmIGlzUG9zdEluc3REZXAodGFza2RlcGVuZGVlc1t0YXNrXVswXSkgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJ106CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIE5hdGl2ZS9Dcm9zcyBwYWNrYWdlcyBkb24ndCBleGlzdCBhbmQgYXJlIG5vZXhlYyBhbnl3YXkKKyAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gaW4gWydkb19wYWNrYWdlX3dyaXRlX2RlYicsICdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkb19wYWNrYWdlZGF0YScsICdkb19wYWNrYWdlJywgJ2RvX3BhY2thZ2VfcWEnXToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDb25zaWRlciBzeXNyb290IGRlcGVuZGluZyBvbiBzeXNyb290IHRhc2tzCisgICAgICAgIGlmIHRhc2tkZXBlbmRlZXNbdGFza11bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnOgorICAgICAgICAgICAgIyBiYXNlLXBhc3N3ZC9zaGFkb3ctc3lzcm9vdCBkb24ndCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgdGFza2RlcGVuZGVlc1tkZXBdWzBdLmVuZHN3aXRoKCgiYmFzZS1wYXNzd2QiLCAic2hhZG93LXN5c3Jvb3QiKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgTm90aGluZyBuZWVkIGRlcGVuZCBvbiBsaWJjLWluaXRpYWwvZ2NjLWNyb3NzLWluaXRpYWwKKyAgICAgICAgICAgIGlmICItaW5pdGlhbCIgaW4gdGFza2RlcGVuZGVlc1t0YXNrXVswXToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBOYXRpdmUvQ3Jvc3MgcG9wdWxhdGVfc3lzcm9vdCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKSBhbmQgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyBUYXJnZXQgcG9wdWxhdGVfc3lzcm9vdCBkZXBlbmRlZCBvbiBieSBjcm9zcyB0b29scyBuZWVkIHRvIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW2RlcF1bMF0pOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgIyBOYXRpdmUvY3Jvc3MgdG9vbHMgZGVwZW5kZWQgdXBvbiBieSB0YXJnZXQgc3lzcm9vdCBhcmUgbm90IG5lZWRlZAorICAgICAgICAgICAgaWYgaXNOYXRpdmVDcm9zcyh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBUYXJnZXQgcG9wdWxhdGVfc3lzcm9vdCBuZWVkIHRoZWlyIGRlcGVuZGVuY2llcworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fc2hhcmVkX3dvcmtkaXInOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFRoaXMgaXMgZHVlIHRvIHRoZSBbZGVwZW5kc10gaW4gdXNlcmFkZC5iYmNsYXNzIGNvbXBsaWNhdGluZyBtYXR0ZXJzCisgICAgICAgICMgVGhlIGxvZ2ljICppcyogcmV2ZXJzZWQgaGVyZSBkdWUgdG8gdGhlIHdheSBoYXJkIHNldHNjZW5lIGRlcGVuZGVuY2llcyBhcmUgaW5qZWN0ZWQKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fcGFja2FnZScgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVswXS5lbmRzd2l0aCgoJ3NoYWRvdy1uYXRpdmUnLCAnc2hhZG93LXN5c3Jvb3QnLCAnYmFzZS1wYXNzd2QnLCAncHNldWRvLW5hdGl2ZScpKSBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdID09ICdkb19wb3B1bGF0ZV9zeXNyb290JzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBTYWZlIGZhbGx0aHJvdWdoIGRlZmF1bHQKKyAgICAgICAgYmIuZGVidWcoMiwgIiBEZWZhdWx0IHNldHNjZW5lIGRlcGVuZGVuY3kgZmFsbCB0aHJvdWdoIGR1ZSB0byBkZXBlbmRlbmN5OiAlcyIgJSAoc3RyKHRhc2tkZXBlbmRlZXNbZGVwXSkpKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCithZGRoYW5kbGVyIHNzdGF0ZV9ldmVudGhhbmRsZXIKK3NzdGF0ZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5idWlsZC5UYXNrU3VjY2VlZGVkIgorcHl0aG9uIHNzdGF0ZV9ldmVudGhhbmRsZXIoKSB7CisgICAgZCA9IGUuZGF0YQorICAgICMgV2hlbiB3ZSB3cml0ZSBhbiBzc3RhdGUgcGFja2FnZSB3ZSByZXdyaXRlIHRoZSBTU1RBVEVfUEtHCisgICAgc3BrZyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSkKKyAgICBpZiBub3Qgc3BrZy5lbmRzd2l0aCgiLnRneiIpOgorICAgICAgICB0YXNrbmFtZSA9IGQuZ2V0VmFyKCJCQl9SVU5UQVNLIiwgVHJ1ZSlbMzpdCisgICAgICAgIHNwZWMgPSBkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKQorICAgICAgICBzd3NwZWMgPSBkLmdldFZhcignU1NUQVRFX1NXU1BFQycsIFRydWUpCisgICAgICAgIGlmIHRhc2tuYW1lIGluIFsiZmV0Y2giLCAidW5wYWNrIiwgInBhdGNoIiwgInBvcHVsYXRlX2xpYyIsICJwcmVjb25maWd1cmUiXSBhbmQgc3dzcGVjOgorICAgICAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9QS0dTUEVDIiwgIiR7U1NUQVRFX1NXU1BFQ30iKQorICAgICAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9FWFRSQVBBVEgiLCAiIikKKyAgICAgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKQorICAgICAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0YXRlcGtnICsgJ18nICsgdGFza25hbWUgKyAiLnRneiIgIi5zaWdpbmZvIiwgZCkKK30KKworU1NUQVRFX1BSVU5FX09CU09MRVRFV09SS0RJUiA9ICIxIgorCisjIEV2ZW50IGhhbmRsZXIgd2hpY2ggcmVtb3ZlcyBtYW5pZmVzdHMgYW5kIHN0YW1wcyBmaWxlIGZvcgorIyByZWNpcGVzIHdoaWNoIGFyZSBubyBsb25nZXIgcmVhY2hhYmxlIGluIGEgYnVpbGQgd2hlcmUgdGhleQorIyBvbmNlIHdlcmUuCisjIEFsc28gb3B0aW9uYWxseSByZW1vdmVzIHRoZSB3b3JrZGlyIG9mIHRob3NlIHRhc2tzL3JlY2lwZXMKKyMKK2FkZGhhbmRsZXIgc3N0YXRlX2V2ZW50aGFuZGxlcjIKK3NzdGF0ZV9ldmVudGhhbmRsZXIyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVhY2hhYmxlU3RhbXBzIgorcHl0aG9uIHNzdGF0ZV9ldmVudGhhbmRsZXIyKCkgeworICAgIGltcG9ydCBnbG9iCisgICAgZCA9IGUuZGF0YQorICAgIHN0YW1wcyA9IGUuc3RhbXBzLnZhbHVlcygpCisgICAgcmVtb3Zld29ya2RpciA9IChkLmdldFZhcigiU1NUQVRFX1BSVU5FX09CU09MRVRFV09SS0RJUiIsIEZhbHNlKSA9PSAiMSIpCisgICAgc2VlbiA9IFtdCisgICAgZm9yIGEgaW4gZC5nZXRWYXIoIlNTVEFURV9BUkNIUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIHRvcmVtb3ZlID0gW10KKyAgICAgICAgaSA9IGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9L2luZGV4LSIgKyBhKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aXRoIG9wZW4oaSwgInIiKSBhcyBmOgorICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAoc3RhbXAsIG1hbmlmZXN0LCB3b3JrZGlyKSA9IGwuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzdGFtcHM6CisgICAgICAgICAgICAgICAgICAgIHRvcmVtb3ZlLmFwcGVuZChsKQorICAgICAgICAgICAgICAgICAgICBpZiBzdGFtcCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlN0YW1wICVzIGlzIG5vdCByZWFjaGFibGUsIHJlbW92aW5nIHJlbGF0ZWQgbWFuaWZlc3RzIiAlIHN0YW1wKQorICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc3RhbXApCisgICAgICAgIGZvciByIGluIHRvcmVtb3ZlOgorICAgICAgICAgICAgKHN0YW1wLCBtYW5pZmVzdCwgd29ya2RpcikgPSByLnNwbGl0KCkKKyAgICAgICAgICAgIGZvciBtIGluIGdsb2IuZ2xvYihtYW5pZmVzdCArICIuKiIpOgorICAgICAgICAgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtLCBkKQorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHN0YW1wICsgIioiKQorICAgICAgICAgICAgaWYgcmVtb3Zld29ya2RpcjoKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUod29ya2RpciwgcmVjdXJzZSA9IFRydWUpCisgICAgICAgICAgICBsaW5lcy5yZW1vdmUocikKKyAgICAgICAgd2l0aCBvcGVuKGksICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUobCkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2VkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc3RhZ2luZy5iYmNsYXNzCkBAIC0wLDAgKzEsMjE4IEBACisKK3N5c3Jvb3Rfc3RhZ2VfZGlyKCkgeworCXNyYz0iJDEiCisJZGVzdD0iJDIiCisJIyBpZiB0aGUgc3JjIGRvZXNuJ3QgZXhpc3QgZG9uJ3QgZG8gYW55dGhpbmcKKwlpZiBbICEgLWQgIiRzcmMiIF07IHRoZW4KKwkJIHJldHVybgorCWZpCisKKwlta2RpciAtcCAiJGRlc3QiCisJKAorCQljZCAkc3JjCisJCWZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGRlc3QKKwkpCit9CisKK3N5c3Jvb3Rfc3RhZ2VfbGliZGlyKCkgeworCXNyYz0iJDEiCisJZGVzdD0iJDIiCisKKwlzeXNyb290X3N0YWdlX2RpciAkc3JjICRkZXN0Cit9CisKK3N5c3Jvb3Rfc3RhZ2VfZGlycygpIHsKKwlmcm9tPSIkMSIKKwl0bz0iJDIiCisKKwlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7aW5jbHVkZWRpcn0gJHRvJHtpbmNsdWRlZGlyfQorCWlmIFsgIiR7QlVJTERfU1lTfSIgPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2JpbmRpcn0gJHRvJHtiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzYmluZGlyfSAkdG8ke3NiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtiYXNlX2JpbmRpcn0gJHRvJHtiYXNlX2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2Jhc2Vfc2JpbmRpcn0gJHRvJHtiYXNlX3NiaW5kaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsaWJleGVjZGlyfSAkdG8ke2xpYmV4ZWNkaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtzeXNjb25mZGlyfSAkdG8ke3N5c2NvbmZkaXJ9CisJCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtsb2NhbHN0YXRlZGlyfSAkdG8ke2xvY2Fsc3RhdGVkaXJ9CisJZmkKKwlpZiBbIC1kICRmcm9tJHtsaWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtsaWJkaXJ9ICR0byR7bGliZGlyfQorCWZpCisJaWYgWyAtZCAkZnJvbSR7YmFzZV9saWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtiYXNlX2xpYmRpcn0gJHRvJHtiYXNlX2xpYmRpcn0KKwlmaQorCWlmIFsgLWQgJGZyb20ke25vbmFyY2hfYmFzZV9saWJkaXJ9IF0KKwl0aGVuCisJCXN5c3Jvb3Rfc3RhZ2VfbGliZGlyICRmcm9tJHtub25hcmNoX2Jhc2VfbGliZGlyfSAkdG8ke25vbmFyY2hfYmFzZV9saWJkaXJ9CisJZmkKKwlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7ZGF0YWRpcn0gJHRvJHtkYXRhZGlyfQorCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBkb2NzL2luZm8vbWFucGFnZXMvbG9jYWxlcworCXJtIC1yZiAkdG8ke21hbmRpcn0vICR0byR7ZG9jZGlyfS8gJHRvJHtpbmZvZGlyfS8gJHt0b30ke2RhdGFkaXJ9L2xvY2FsZS8KKwlybSAtcmYgJHRvJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvICR0byR7ZGF0YWRpcn0vZm9udHMvICR0byR7ZGF0YWRpcn0vcGl4bWFwcy8KK30KKworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXJzICR7RH0gJHtTWVNST09UX0RFU1RESVJ9Cit9CisKK3B5dGhvbiBzeXNyb290X3N0cmlwICgpIHsKKyAgICBpbXBvcnQgc3RhdCwgZXJybm8KKworICAgIGR2YXIgPSBkLmdldFZhcignU1lTUk9PVF9ERVNURElSJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6CisgICAgIyAwIC0gbm90IGVsZgorICAgICMgMSAtIEVMRgorICAgICMgMiAtIHN0cmlwcGVkCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKyAgICBkZWYgaXNFTEYocGF0aCk6CisgICAgICAgIHR5cGUgPSAwCisgICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKKworICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBiYi5lcnJvcigic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgpCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgICMgTm90IHN0cmlwcGVkCisgICAgICAgIGlmICJFTEYiIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHR5cGUgfD0gMQorICAgICAgICAgICAgaWYgIm5vdCBzdHJpcHBlZCIgbm90IGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDIKKyAgICAgICAgICAgIGlmICJleGVjdXRhYmxlIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA0CisgICAgICAgICAgICBpZiAic2hhcmVkIiBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgdHlwZSB8PSA4CisgICAgICAgIHJldHVybiB0eXBlCisKKworICAgIGVsZmZpbGVzID0ge30KKyAgICBpbm9kZXMgPSB7fQorICAgIGxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImxpYmRpciIsIFRydWUpKQorICAgIGJhc2VsaWJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZHZhciArIG9zLnNlcCArIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgIGlmIChkLmdldFZhcignSU5ISUJJVF9TWVNST09UX1NUUklQJywgVHJ1ZSkgIT0gJzEnKToKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0IGxldHMgZmlndXJlIG91dCBhbGwgb2YgdGhlIGZpbGVzIHdlIG1heSBoYXZlIHRvIHByb2Nlc3MKKyAgICAgICAgIworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbHRhcmdldCA9IG9lLnBhdGgucmVhbHBhdGgoZmlsZSwgZHZhciwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHMgPSBvcy5sc3RhdChsdGFyZ2V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgICAgICBpZiBlcnIgIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBTa2lwIGJyb2tlbiBzeW1saW5rcworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgQ2hlY2sgaXRzIGFuIGV4Y3V0YWJsZQorICAgICAgICAgICAgICAgIGlmIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoZmlsZS5zdGFydHN3aXRoKGxpYmRpcikgb3IgZmlsZS5zdGFydHN3aXRoKGJhc2VsaWJkaXIpKSBhbmQgIi5zbyIgaW4gZik6CisgICAgICAgICAgICAgICAgICAgICMgSWYgaXQncyBhIHN5bWxpbmssIGFuZCBwb2ludHMgdG8gYW4gRUxGIGZpbGUsIHdlIGNhcHR1cmUgdGhlIHJlYWRsaW5rIHRhcmdldAorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCisgICAgICAgICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBwZWQ/CisgICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkZpbGUgJyVzJyBmcm9tICVzIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMuc3RfaW5vIGluIGlub2RlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKGlub2Rlc1tzLnN0X2lub10sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlub2Rlc1tzLnN0X2lub10gPSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBicmVhayBoYXJkbGluaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZpbGUsIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxmZmlsZXNbZmlsZV0gPSBlbGZfZmlsZQorCisgICAgICAgICMKKyAgICAgICAgIyBOb3cgc3RyaXAgdGhlbSAoaW4gcGFyYWxsZWwpCisgICAgICAgICMKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBzZmlsZXMgPSBbXQorICAgICAgICBmb3IgZmlsZSBpbiBlbGZmaWxlczoKKyAgICAgICAgICAgIGVsZl9maWxlID0gaW50KGVsZmZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgI2JiLm5vdGUoIlN0cmlwICVzIiAlIGZpbGUpCisgICAgICAgICAgICBzZmlsZXMuYXBwZW5kKChmaWxlLCBlbGZfZmlsZSwgc3RyaXApKQorCisgICAgICAgIG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHNmaWxlcywgb2UucGFja2FnZS5ydW5zdHJpcCkKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0iCitkb19wb3B1bGF0ZV9zeXNyb290W3VtYXNrXSA9ICIwMjIiCisKK2FkZHRhc2sgcG9wdWxhdGVfc3lzcm9vdCBhZnRlciBkb19pbnN0YWxsCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyA/PSAiIgorU1lTUk9PVF9ERVNURElSID0gIiR7V09SS0RJUn0vc3lzcm9vdC1kZXN0ZGlyLyIKK1NZU1JPT1RfTE9DSyA9ICIke1NUQUdJTkdfRElSfS9zdGFnaW5nLmxvY2siCisKKyMgV2UgY2xlYW4gb3V0IGFueSBleGlzdGluZyBzc3RhdGUgZnJvbSB0aGUgc3lzcm9vdCBpZiB3ZSByZXJ1biBjb25maWd1cmUKK3B5dGhvbiBzeXNyb290X2NsZWFuc3N0YXRlICgpIHsKKyAgICBzcyA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkLCAicG9wdWxhdGVfc3lzcm9vdCIpCisgICAgc3N0YXRlX2NsZWFuKHNzLCBkKQorfQorZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAic3lzcm9vdF9jbGVhbnNzdGF0ZSIKKworCitCQl9TRVRTQ0VORV9WRVJJRllfRlVOQ1RJT04gPSAic3lzcm9vdF9jaGVja2hhc2hlcyIKKworZGVmIHN5c3Jvb3RfY2hlY2toYXNoZXMoY292ZXJlZCwgdGFza25hbWVzLCBmbmlkcywgZm5zLCBkLCBpbnZhbGlkdGFza3MgPSBOb25lKToKKyAgICBwcm9ibGVtcyA9IHNldCgpCisgICAgY29uZmlndXJlZm5pZHMgPSBzZXQoKQorICAgIGlmIG5vdCBpbnZhbGlkdGFza3M6CisgICAgICAgIGludmFsaWR0YXNrcyA9IHhyYW5nZShsZW4odGFza25hbWVzKSkKKyAgICBmb3IgdGFzayBpbiBpbnZhbGlkdGFza3M6CisgICAgICAgIGlmIHRhc2tuYW1lc1t0YXNrXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgdGFzayBub3QgaW4gY292ZXJlZDoKKyAgICAgICAgICAgIGNvbmZpZ3VyZWZuaWRzLmFkZChmbmlkc1t0YXNrXSkKKyAgICBmb3IgdGFzayBpbiBjb3ZlcmVkOgorICAgICAgICBpZiB0YXNrbmFtZXNbdGFza10gPT0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiIGFuZCBmbmlkc1t0YXNrXSBpbiBjb25maWd1cmVmbmlkczoKKyAgICAgICAgICAgIHByb2JsZW1zLmFkZCh0YXNrKQorICAgIHJldHVybiBwcm9ibGVtcworCitweXRob24gZG9fcG9wdWxhdGVfc3lzcm9vdCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzeXNyb290X3N0YWdlX2FsbCIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzeXNyb290X3N0cmlwIiwgZCkKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgbXVsdGlwcm92ID0gZC5nZXRWYXIoIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIsIFRydWUpLnNwbGl0KCkKKyAgICBwcm92ZGlyID0gZC5leHBhbmQoIiR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9wcmVmaXh9L3N5c3Jvb3QtcHJvdmlkZXJzLyIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHByb3ZkaXIpCisgICAgZm9yIHAgaW4gZC5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgcCBpbiBtdWx0aXByb3Y6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBwID0gcC5yZXBsYWNlKCIvIiwgIl8iKQorICAgICAgICB3aXRoIG9wZW4ocHJvdmRpciArIHAsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUocG4pCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdmFyZGVwc10gKz0gIiR7U1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdmFyZGVwc2V4Y2x1ZGVdICs9ICJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiCisKK1NTVEFURVRBU0tTICs9ICJkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtjbGVhbmRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0iCisKK3B5dGhvbiBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZQorCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlZjlhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zeXNsaW51eC5iYmNsYXNzCkBAIC0wLDAgKzEsMTkwIEBACisjIHN5c2xpbnV4LmJiY2xhc3MKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworIyBQcm92aWRlIHN5c2xpbnV4IHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorCisjIEV4dGVybmFsIHZhcmlhYmxlcworIyAke0lOSVRSRH0gLSBpbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdHJkIChvcHRpb25hbCkKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorIyAke0FVVE9fU1lTTElOVVhNRU5VfSAtIHNldCB0aGlzIHRvIDEgdG8gZW5hYmxlIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51CisjICR7TEFCRUxTfSAtIGEgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgYXV0b21hdGljIGNvbmZpZworIyAke0FQUEVORH0gLSBhbiBvdmVycmlkZSBsaXN0IG9mIGFwcGVuZCBzdHJpbmdzIGZvciBlYWNoIGxhYmVsCisjICR7U1lTTElOVVhfT1BUU30gLSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlICc7JyBkZWxpbWl0ZWQKKyMgJHtTWVNMSU5VWF9TUExBU0h9IC0gQSBiYWNrZ3JvdW5kIGZvciB0aGUgdmdhIGJvb3QgbWVudSBpZiB1c2luZyB0aGUgYm9vdCBtZW51CisjICR7U1lTTElOVVhfREVGQVVMVF9DT05TT0xFfSAtIHNldCB0byAiY29uc29sZT10dHlYIiB0byBjaGFuZ2Uga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlCisjICR7U1lTTElOVVhfU0VSSUFMfSAtIFNldCBhbiBhbHRlcm5hdGUgc2VyaWFsIHBvcnQgb3IgdHVybiBvZmYgc2VyaWFsIHdpdGggZW1wdHkgc3RyaW5nCisjICR7U1lTTElOVVhfU0VSSUFMX1RUWX0gLSBTZXQgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50CisjICR7U1lTTElOVVhfS0VSTkVMX0FSR1N9IC0gQWRkIGFkZGl0aW9uYWwga2VybmVsIGFyZ3VtZW50cworCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke01MUFJFRklYfXN5c2xpbnV4OmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzbGludXgtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK1NZU0xJTlVYQ0ZHICA9ICIke1N9L3N5c2xpbnV4LmNmZyIKKworSVNPTElOVVhESVIgPSAiL2lzb2xpbnV4IgorU1lTTElOVVhESVIgPSAiLyIKKyMgVGhlIGtlcm5lbCBoYXMgYW4gaW50ZXJuYWwgZGVmYXVsdCBjb25zb2xlLCB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIHdpdGgKKyMgYSBjb25zb2xlPS4uLnNvbWVfdHR5Li4uCitTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUgPz0gIiIKK1NZU0xJTlVYX1NFUklBTCA/PSAiMCAxMTUyMDAiCitTWVNMSU5VWF9TRVJJQUxfVFRZID89ICJjb25zb2xlPXR0eVMwLDExNTIwMCIKK0lTT19CT09USU1HID0gImlzb2xpbnV4L2lzb2xpbnV4LmJpbiIKK0lTT19CT09UQ0FUID0gImlzb2xpbnV4L2Jvb3QuY2F0IgorTUtJU09GU19PUFRJT05TID0gIi1uby1lbXVsLWJvb3QgLWJvb3QtbG9hZC1zaXplIDQgLWJvb3QtaW5mby10YWJsZSIKK0FQUEVORF9wcmVwZW5kID0gIiAke1NZU0xJTlVYX1JPT1R9ICIKKworIyBOZWVkIFVVSUQgdXRpbGl0eSBjb2RlLgoraW5oZXJpdCBmcy11dWlkCisKK3N5c2xpbnV4X3BvcHVsYXRlKCkgeworCURFU1Q9JDEKKwlCT09URElSPSQyCisJQ0ZHTkFNRT0kMworCisJaW5zdGFsbCAtZCAke0RFU1R9JHtCT09URElSfQorCisJIyBJbnN0YWxsIHRoZSBjb25maWcgZmlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtTWVNMSU5VWENGR30gJHtERVNUfSR7Qk9PVERJUn0vJHtDRkdOQU1FfQorCWlmIFsgIiR7QVVUT19TWVNMSU5VWE1FTlV9IiA9IDEgXSA7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC92ZXNhbWVudS5jMzIgJHtERVNUfSR7Qk9PVERJUn0vdmVzYW1lbnUuYzMyCisJCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGliY29tMzIuYzMyICR7REVTVH0ke0JPT1RESVJ9L2xpYmNvbTMyLmMzMgorCQlpbnN0YWxsIC1tIDA0NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2xpYnV0aWwuYzMyICR7REVTVH0ke0JPT1RESVJ9L2xpYnV0aWwuYzMyCisJCWlmIFsgIiR7U1lTTElOVVhfU1BMQVNIfSIgIT0gIiIgXSA7IHRoZW4KKwkJCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYX1NQTEFTSH0gJHtERVNUfSR7Qk9PVERJUn0vc3BsYXNoLmxzcworCQlmaQorCWZpCit9CisKK3N5c2xpbnV4X2lzb19wb3B1bGF0ZSgpIHsKKwlpc29fZGlyPSQxCisJc3lzbGludXhfcG9wdWxhdGUgJGlzb19kaXIgJHtJU09MSU5VWERJUn0gaXNvbGludXguY2ZnCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9pc29saW51eC5iaW4gJGlzb19kaXIke0lTT0xJTlVYRElSfQorCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGRsaW51eC5jMzIgJGlzb19kaXIke0lTT0xJTlVYRElSfQorfQorCitzeXNsaW51eF9oZGRpbWdfcG9wdWxhdGUoKSB7CisJaGRkX2Rpcj0kMQorCXN5c2xpbnV4X3BvcHVsYXRlICRoZGRfZGlyICR7U1lTTElOVVhESVJ9IHN5c2xpbnV4LmNmZworCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGRsaW51eC5zeXMgJGhkZF9kaXIke1NZU0xJTlVYRElSfS9sZGxpbnV4LnN5cworfQorCitzeXNsaW51eF9oZGRpbWdfaW5zdGFsbCgpIHsKKwlzeXNsaW51eCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkaW1nCit9CisKK3N5c2xpbnV4X2hkZGRpcmVjdF9pbnN0YWxsKCkgeworCURFU1Q9JDEKKwlzeXNsaW51eCAkREVTVAorfQorCitweXRob24gYnVpbGRfc3lzbGludXhfY2ZnICgpIHsKKyAgICBpbXBvcnQgY29weQorICAgIGltcG9ydCBzeXMKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisgICAgCisgICAgaWYgbGFiZWxzID09IFtdOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gbGFiZWxzLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBjZmlsZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWENGRycsIFRydWUpCisgICAgaWYgbm90IGNmaWxlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdVbmFibGUgdG8gcmVhZCBTWVNMSU5VWENGRycpCisKKyAgICB0cnk6CisgICAgICAgIGNmZ2ZpbGUgPSBmaWxlKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKworICAgIG9wdHMgPSBkLmdldFZhcignU1lTTElOVVhfT1BUUycsIFRydWUpCisKKyAgICBpZiBvcHRzOgorICAgICAgICBmb3Igb3B0IGluIG9wdHMuc3BsaXQoJzsnKToKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzXG4nICUgb3B0KQorCisgICAgY2ZnZmlsZS53cml0ZSgnQUxMT1dPUFRJT05TIDFcbicpOworICAgIHN5c2xpbnV4X2RlZmF1bHRfY29uc29sZSA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEUnLCBUcnVlKQorICAgIHN5c2xpbnV4X3NlcmlhbF90dHkgPSBkLmdldFZhcignU1lTTElOVVhfU0VSSUFMX1RUWScsIFRydWUpCisgICAgc3lzbGludXhfc2VyaWFsID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1NFUklBTCcsIFRydWUpCisgICAgaWYgc3lzbGludXhfc2VyaWFsOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdTRVJJQUwgJXNcbicgJSBzeXNsaW51eF9zZXJpYWwpCisKKyAgICBtZW51ID0gZC5nZXRWYXIoJ0FVVE9fU1lTTElOVVhNRU5VJywgVHJ1ZSkKKworICAgIGlmIG1lbnUgYW5kIHN5c2xpbnV4X3NlcmlhbDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnREVGQVVMVCBHcmFwaGljcyBjb25zb2xlICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdERUZBVUxUICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKworICAgIHRpbWVvdXQgPSBkLmdldFZhcignU1lTTElOVVhfVElNRU9VVCcsIFRydWUpCisKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCdUSU1FT1VUICVzXG4nICUgdGltZW91dCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdUSU1FT1VUIDUwXG4nKQorCisgICAgcHJvbXB0ID0gZC5nZXRWYXIoJ1NZU0xJTlVYX1BST01QVCcsIFRydWUpCisgICAgaWYgcHJvbXB0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCdQUk9NUFQgJXNcbicgJSBwcm9tcHQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnUFJPTVBUIDFcbicpCisKKyAgICBpZiBtZW51OgorICAgICAgICBjZmdmaWxlLndyaXRlKCd1aSB2ZXNhbWVudS5jMzJcbicpCisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ21lbnUgdGl0bGUgU2VsZWN0IGtlcm5lbCBvcHRpb25zIGFuZCBib290IGtlcm5lbFxuJykKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSB0YWJtc2cgUHJlc3MgW1RhYl0gdG8gZWRpdCwgW1JldHVybl0gdG8gc2VsZWN0XG4nKQorICAgICAgICBzcGxhc2ggPSBkLmdldFZhcignU1lTTElOVVhfU1BMQVNIJywgVHJ1ZSkKKyAgICAgICAgaWYgc3BsYXNoOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5sc3NcbicpCisgICAgCisgICAgZm9yIGxhYmVsIGluIGxhYmVscy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsYWJlbCArICc6JyArIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgCisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIiwgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlIF0gXQorICAgICAgICBpZiBtZW51IGFuZCBzeXNsaW51eF9zZXJpYWw6CisgICAgICAgICAgICBidHlwZXMgPSBbIFsgIkdyYXBoaWNzIGNvbnNvbGUgIiwgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlICBdLAorICAgICAgICAgICAgICAgIFsgIlNlcmlhbCBjb25zb2xlICIsIHN5c2xpbnV4X3NlcmlhbF90dHkgXSBdCisKKyAgICAgICAgZm9yIGJ0eXBlIGluIGJ0eXBlczoKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0xBQkVMICVzJXNcbktFUk5FTCAvdm1saW51elxuJyAlIChidHlwZVswXSwgbGFiZWwpKQorCisgICAgICAgICAgICBleGFyZ3MgPSBkLmdldFZhcignU1lTTElOVVhfS0VSTkVMX0FSR1MnLCBUcnVlKQorICAgICAgICAgICAgaWYgZXhhcmdzOgorICAgICAgICAgICAgICAgIGJ0eXBlWzFdICs9ICIgIiArIGV4YXJncworCisgICAgICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICAgICAgaW5pdHJkID0gbG9jYWxkYXRhLmdldFZhcignSU5JVFJEJywgVHJ1ZSkKKworICAgICAgICAgICAgaWYgYXBwZW5kOgorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0FQUEVORCAnKQorCisgICAgICAgICAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdpbml0cmQ9L2luaXRyZCAnKQorCisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUw9JXMgJyUgKGxhYmVsKSkKKyAgICAgICAgICAgICAgICBhcHBlbmQgPSByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIGFwcGVuZCkKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCclcyAlc1xuJyAlIChhcHBlbmQsIGJ0eXBlWzFdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnQVBQRU5EICVzXG4nICUgYnR5cGVbMV0pCisKKyAgICBjZmdmaWxlLmNsb3NlKCkKK30KK2J1aWxkX3N5c2xpbnV4X2NmZ1t2YXJkZXBzXSArPSAiQVBQRU5EIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zeXN0ZW1kLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlNzJjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zeXN0ZW1kLmJiY2xhc3MKQEAgLTAsMCArMSwxOTMgQEAKKyMgVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBzaG91bGQgaGF2ZSBzeXN0ZW1kIHBhY2thZ2luZyBzY3JpcHRzIGFkZGVkLiAgRm9yCisjIGVhY2ggZW50cnksIG9wdGlvbmFsbHkgaGF2ZSBhIFNZU1RFTURfU0VSVklDRV9bcGFja2FnZV0gdGhhdCBsaXN0cyB0aGUgc2VydmljZQorIyBmaWxlcyBpbiB0aGlzIHBhY2thZ2UuICBJZiB0aGlzIHZhcmlhYmxlIGlzbid0IHNldCwgW3BhY2thZ2VdLnNlcnZpY2UgaXMgdXNlZC4KK1NZU1RFTURfUEFDS0FHRVMgPz0gIiR7UE59IgorU1lTVEVNRF9QQUNLQUdFU19jbGFzcy1uYXRpdmUgPz0gIiIKK1NZU1RFTURfUEFDS0FHRVNfY2xhc3MtbmF0aXZlc2RrID89ICIiCisKKyMgV2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgc2VydmljZXMgb24gaW5zdGFsbGF0aW9uLgorU1lTVEVNRF9BVVRPX0VOQUJMRSA/Pz0gImVuYWJsZSIKKworIyBUaGlzIGNsYXNzIHdpbGwgYmUgaW5jbHVkZWQgaW4gYW55IHJlY2lwZSB0aGF0IHN1cHBvcnRzIHN5c3RlbWQgaW5pdCBzY3JpcHRzLAorIyBldmVuIGlmIHN5c3RlbWQgaXMgbm90IGluIERJU1RST19GRUFUVVJFUy4gIEFzIHN1Y2ggZG9uJ3QgbWFrZSBhbnkgY2hhbmdlcworIyBkaXJlY3RseSBidXQgY2hlY2sgdGhlIERJU1RST19GRUFUVVJFUyBmaXJzdC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICAjIElmIHRoZSBkaXN0cm8gZmVhdHVyZXMgaGF2ZSBzeXN0ZW1kIGJ1dCBub3Qgc3lzdmluaXQsIGluaGliaXQgdXBkYXRlLXJjZAorICAgICMgZnJvbSBkb2luZyBhbnkgd29yayBzbyB0aGF0IHB1cmUtc3lzdGVtZCBpbWFnZXMgZG9uJ3QgaGF2ZSByZWR1bmRhbnQgaW5pdAorICAgICMgZmlsZXMuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLmFwcGVuZFZhcigiREVQRU5EUyIsICIgc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlIikKKyAgICAgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworc3lzdGVtZF9wb3N0aW5zdCgpIHsKK09QVFM9IiIKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICBPUFRTPSItLXJvb3Q9JEQiCitmaQorCitpZiB0eXBlIHN5c3RlbWN0bCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJc3lzdGVtY3RsICRPUFRTICR7U1lTVEVNRF9BVVRPX0VOQUJMRX0gJHtTWVNURU1EX1NFUlZJQ0V9CisKKwlpZiBbIC16ICIkRCIgLWEgIiR7U1lTVEVNRF9BVVRPX0VOQUJMRX0iID0gImVuYWJsZSIgXTsgdGhlbgorCQlzeXN0ZW1jdGwgcmVzdGFydCAke1NZU1RFTURfU0VSVklDRX0KKwlmaQorZmkKK30KKworc3lzdGVtZF9wcmVybSgpIHsKK09QVFM9IiIKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICBPUFRTPSItLXJvb3Q9JEQiCitmaQorCitpZiB0eXBlIHN5c3RlbWN0bCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAteiAiJEQiIF07IHRoZW4KKwkJc3lzdGVtY3RsIHN0b3AgJHtTWVNURU1EX1NFUlZJQ0V9CisJZmkKKworCXN5c3RlbWN0bCAkT1BUUyBkaXNhYmxlICR7U1lTVEVNRF9TRVJWSUNFfQorZmkKK30KKworCitzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNdICs9ICJzeXN0ZW1kX3ByZXJtIHN5c3RlbWRfcG9zdGluc3QiCitzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNleGNsdWRlXSArPSAiT1ZFUlJJREVTIgorCisKK3B5dGhvbiBzeXN0ZW1kX3BvcHVsYXRlX3BhY2thZ2VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldF9wYWNrYWdlX3ZhcihkLCB2YXIsIHBrZyk6CisgICAgICAgIHZhbCA9IChkLmdldFZhcignJXNfJXMnICUgKHZhciwgcGtnKSwgVHJ1ZSkgb3IgIiIpLnN0cmlwKCkKKyAgICAgICAgaWYgdmFsID09ICIiOgorICAgICAgICAgICAgdmFsID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgIyBDaGVjayBpZiBzeXN0ZW1kLXBhY2thZ2VzIGFscmVhZHkgaW5jbHVkZWQgaW4gUEFDS0FHRVMKKyAgICBkZWYgc3lzdGVtZF9jaGVja19wYWNrYWdlKHBrZ19zeXN0ZW1kKToKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtnX3N5c3RlbWQgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGJiLmVycm9yKCclcyBkb2VzIG5vdCBhcHBlYXIgaW4gcGFja2FnZSBsaXN0LCBwbGVhc2UgYWRkIGl0JyAlIHBrZ19zeXN0ZW1kKQorCisKKyAgICBkZWYgc3lzdGVtZF9nZW5lcmF0ZV9wYWNrYWdlX3NjcmlwdHMocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyBzeXN0ZW1kIGNhbGxzIHRvIHBvc3RpbnN0L3Bvc3RybSBmb3IgJXMnICUgcGtnKQorCisgICAgICAgICMgQWRkIHBrZyB0byB0aGUgb3ZlcnJpZGVzIHNvIHRoYXQgaXQgZmluZHMgdGhlIFNZU1RFTURfU0VSVklDRV9wa2cKKyAgICAgICAgIyB2YXJpYWJsZS4KKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgbG9jYWxkYXRhLnByZXBlbmRWYXIoIk9WRVJSSURFUyIsIHBrZyArICI6IikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3N5c3RlbWRfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgcHJlcm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZXJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3N5c3RlbWRfcHJlcm0nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCisKKworICAgICMgQWRkIGZpbGVzIHRvIEZJTEVTXyotc3lzdGVtZCBpZiBleGlzdGVudCBhbmQgbm90IGFscmVhZHkgZG9uZQorICAgIGRlZiBzeXN0ZW1kX2FwcGVuZF9maWxlKHBrZ19zeXN0ZW1kLCBmaWxlX2FwcGVuZCk6CisgICAgICAgIGFwcGVuZGVkID0gRmFsc2UKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIGZpbGVfYXBwZW5kKSk6CisgICAgICAgICAgICB2YXJfbmFtZSA9ICJGSUxFU18iICsgcGtnX3N5c3RlbWQKKyAgICAgICAgICAgIGZpbGVzID0gZC5nZXRWYXIodmFyX25hbWUsIEZhbHNlKSBvciAiIgorICAgICAgICAgICAgaWYgZmlsZV9hcHBlbmQgbm90IGluIGZpbGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIodmFyX25hbWUsICIgIiArIGZpbGVfYXBwZW5kKQorICAgICAgICAgICAgICAgIGFwcGVuZGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gYXBwZW5kZWQKKworICAgICMgQWRkIHN5c3RlbWQgZmlsZXMgdG8gRklMRVNfKi1zeXN0ZW1kLCBwYXJzZSBmb3IgQWxzbz0gYW5kIGZvbGxvdyByZWN1cnNpdmUKKyAgICBkZWYgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlLCBrZXlzKToKKyAgICAgICAgIyBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24KKyAgICAgICAgaWYgc3lzdGVtZF9hcHBlbmRfZmlsZShwa2dfc3lzdGVtZCwgb2UucGF0aC5qb2luKHBhdGgsIHNlcnZpY2UpKToKKyAgICAgICAgICAgIGZ1bGxwYXRoID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCJEIiwgVHJ1ZSksIHBhdGgsIHNlcnZpY2UpCisgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJy5zZXJ2aWNlJykgIT0gLTE6CisgICAgICAgICAgICAgICAgIyBmb3IgKi5zZXJ2aWNlIGFkZCAqQC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VydmljZV9iYXNlID0gc2VydmljZS5yZXBsYWNlKCcuc2VydmljZScsICcnKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJ0Auc2VydmljZScsIGtleXMpCisgICAgICAgICAgICBpZiBzZXJ2aWNlLmZpbmQoJy5zb2NrZXQnKSAhPSAtMToKKyAgICAgICAgICAgICAgICAjIGZvciAqLnNvY2tldCBhZGQgKi5zZXJ2aWNlIGFuZCAqQC5zZXJ2aWNlCisgICAgICAgICAgICAgICAgc2VydmljZV9iYXNlID0gc2VydmljZS5yZXBsYWNlKCcuc29ja2V0JywgJycpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnLnNlcnZpY2UnLCBrZXlzKQorICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgc2VydmljZV9iYXNlICsgJ0Auc2VydmljZScsIGtleXMpCisgICAgICAgICAgICBmb3Iga2V5IGluIGtleXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAjIHJlY3Vyc2UgYWxsIGRlcGVuZGVuY2llcyBmb3VuZCBpbiBrZXlzICgnQWxzbyc7J0NvbmZsaWN0cyc7Li4pIGFuZCBhZGQgdG8gZmlsZXMKKyAgICAgICAgICAgICAgICBjbWQgPSAiZ3JlcCAlcyAlcyB8IHNlZCAncywlcz0sLGcnIHwgdHIgJywnICdcXG4nIiAlIChrZXksIGZ1bGxwYXRoLCBrZXkpCisgICAgICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICAgICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcbicsICcnKQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIGxpbmUsIGtleXMpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBwaXBlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKworICAgICMgQ2hlY2sgc2VydmljZS1maWxlcyBhbmQgY2FsbCBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UgZm9yIGVhY2ggZW50cnkKKyAgICBkZWYgc3lzdGVtZF9jaGVja19zZXJ2aWNlcygpOgorICAgICAgICBzZWFyY2hwYXRocyA9IFtvZS5wYXRoLmpvaW4oZC5nZXRWYXIoInN5c2NvbmZkaXIiLCBUcnVlKSwgInN5c3RlbWQiLCAic3lzdGVtIiksXQorICAgICAgICBzZWFyY2hwYXRocy5hcHBlbmQoZC5nZXRWYXIoInN5c3RlbWRfc3lzdGVtX3VuaXRkaXIiLCBUcnVlKSkKKyAgICAgICAgc3lzdGVtZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgICAgICBrZXlzID0gJ0Fsc28nCisgICAgICAgICMgc2NhbiBmb3IgYWxsIGluIFNZU1RFTURfU0VSVklDRVtdCisgICAgICAgIGZvciBwa2dfc3lzdGVtZCBpbiBzeXN0ZW1kX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc2VydmljZSBpbiBnZXRfcGFja2FnZV92YXIoZCwgJ1NZU1RFTURfU0VSVklDRScsIHBrZ19zeXN0ZW1kKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBhdGhfZm91bmQgPSAnJworICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNlYXJjaHBhdGhzOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgcGF0aCwgc2VydmljZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9mb3VuZCA9IHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgcGF0aF9mb3VuZCAhPSAnJzoKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoX2ZvdW5kLCBzZXJ2aWNlLCBrZXlzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIlNZU1RFTURfU0VSVklDRV8lcyB2YWx1ZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAocGtnX3N5c3RlbWQsIHNlcnZpY2UpKQorCisgICAgIyBSdW4gYWxsIG1vZGlmaWNhdGlvbnMgb25jZSB3aGVuIGNyZWF0aW5nIHBhY2thZ2UKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkLmdldFZhcigiRCIsIFRydWUpKToKKyAgICAgICAgZm9yIHBrZyBpbiBkLmdldFZhcignU1lTVEVNRF9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBzeXN0ZW1kX2NoZWNrX3BhY2thZ2UocGtnKQorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1NZU1RFTURfU0VSVklDRV8nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2dlbmVyYXRlX3BhY2thZ2Vfc2NyaXB0cyhwa2cpCisgICAgICAgIHN5c3RlbWRfY2hlY2tfc2VydmljZXMoKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInN5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXMgIgorCitweXRob24gcm1fc3lzdGVtZF91bml0ZGlyICgpeworICAgIGltcG9ydCBzaHV0aWwKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBzeXN0ZW1kX3VuaXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c3RlbWRfdW5pdGRpcicsIFRydWUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX3VuaXRkaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzeXN0ZW1kX3VuaXRkaXIpCisgICAgICAgIHN5c3RlbWRfbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5c3RlbWRfdW5pdGRpcikKKyAgICAgICAgaWYgKG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfbGliZGlyKSBhbmQgbm90IG9zLmxpc3RkaXIoc3lzdGVtZF9saWJkaXIpKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHN5c3RlbWRfbGliZGlyKQorfQorZG9faW5zdGFsbFtwb3N0ZnVuY3NdICs9ICJybV9zeXN0ZW1kX3VuaXRkaXIgIgorCitweXRob24gcm1fc3lzdmluaXRfaW5pdGRkaXIgKCl7CisgICAgaW1wb3J0IHNodXRpbAorICAgIHN5c3ZfaW5pdGRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgKGQuZ2V0VmFyKCdJTklUX0RfRElSJywgVHJ1ZSkgb3IgIi9ldGMvaW5pdC5kIikpCisKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgb3MucGF0aC5leGlzdHMoc3lzdl9pbml0ZGRpcik6CisgICAgICAgIHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZC5nZXRWYXIoJ3N5c3RlbWRfc3lzdGVtX3VuaXRkaXInLCBUcnVlKSkKKworICAgICAgICAjIElmIHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgY29udGFpbnMgYW55dGhpbmcsIGRlbGV0ZSBzeXN2X2luaXRkZGlyCisgICAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhzeXN0ZW1kX3N5c3RlbV91bml0ZGlyKSBhbmQgb3MubGlzdGRpcihzeXN0ZW1kX3N5c3RlbV91bml0ZGlyKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN5c3ZfaW5pdGRkaXIpCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gInJtX3N5c3Zpbml0X2luaXRkZGlyICIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3N2M2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90ZXJtaW5hbC5iYmNsYXNzCkBAIC0wLDAgKzEsOTQgQEAKK09FX1RFUk1JTkFMID89ICdhdXRvJworT0VfVEVSTUlOQUxbdHlwZV0gPSAnY2hvaWNlJworT0VfVEVSTUlOQUxbY2hvaWNlc10gPSAnYXV0byBub25lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7QCIgIi5qb2luKG8ubmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbyBpbiBvZS50ZXJtaW5hbC5wcmlvcml0aXplZCgpKX0nCisKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gJ0VYVFJBX09FTUFLRScKK09FX1RFUk1JTkFMX0VYUE9SVFNbdHlwZV0gPSAnbGlzdCcKKworWEFVVEhPUklUWSA/PSAiJHtIT01FfS8uWGF1dGhvcml0eSIKK1NIRUxMID89ICJiYXNoIgorCisKK2RlZiBlbWl0X3Rlcm1pbmFsX2Z1bmMoY29tbWFuZCwgZW52ZGF0YSwgZCk6CisgICAgY21kX2Z1bmMgPSAnZG9fdGVybWluYWwnCisKKyAgICBlbnZkYXRhLnNldFZhcihjbWRfZnVuYywgJ2V4ZWMgJyArIGNvbW1hbmQpCisgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGNtZF9mdW5jLCAnZnVuYycsIDEpCisKKyAgICBydW5mbXQgPSBkLmdldFZhcignQkJfUlVORk1UJywgVHJ1ZSkgb3IgInJ1bi57ZnVuY30ue3BpZH0iCisgICAgcnVuZmlsZSA9IHJ1bmZtdC5mb3JtYXQoZnVuYz1jbWRfZnVuYywgdGFzaz1jbWRfZnVuYywgdGFza2Z1bmM9Y21kX2Z1bmMsIHBpZD1vcy5nZXRwaWQoKSkKKyAgICBydW5maWxlID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdUJywgVHJ1ZSksIHJ1bmZpbGUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShydW5maWxlKSkKKworICAgIHdpdGggb3BlbihydW5maWxlLCAndycpIGFzIHNjcmlwdDoKKyAgICAgICAgc2NyaXB0LndyaXRlKCcjIS9iaW4vc2ggLWVcbicpCisgICAgICAgIGJiLmRhdGEuZW1pdF9mdW5jKGNtZF9mdW5jLCBzY3JpcHQsIGVudmRhdGEpCisgICAgICAgIHNjcmlwdC53cml0ZShjbWRfZnVuYykKKyAgICAgICAgc2NyaXB0LndyaXRlKCJcbiIpCisgICAgb3MuY2htb2QocnVuZmlsZSwgMDc1NSkKKworICAgIHJldHVybiBydW5maWxlCisKK2RlZiBvZV90ZXJtaW5hbChjb21tYW5kLCB0aXRsZSwgZCk6CisgICAgaW1wb3J0IG9lLmRhdGEKKyAgICBpbXBvcnQgb2UudGVybWluYWwKKworICAgIGVudmRhdGEgPSBiYi5kYXRhLmluaXQoKQorCisgICAgZm9yIHYgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZW52ZGF0YS5zZXRWYXIodiwgb3MuZW52aXJvblt2XSkKKyAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKHYsICdleHBvcnQnLCAxKQorCisgICAgZm9yIGV4cG9ydCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdPRV9URVJNSU5BTF9FWFBPUlRTJywgZCk6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIoZXhwb3J0LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bZXhwb3J0XSA9IHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyKGV4cG9ydCwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyhleHBvcnQsICdleHBvcnQnLCAxKQorICAgICAgICBpZiBleHBvcnQgPT0gIlBTRVVET19ESVNBQkxFRCI6CisgICAgICAgICAgICBpZiAiUFNFVURPX1VOTE9BRCIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvblsiUFNFVURPX1VOTE9BRCJdCisgICAgICAgICAgICBlbnZkYXRhLmRlbFZhcigiUFNFVURPX1VOTE9BRCIpCisKKyAgICAjIEFkZCBpbiBhbGwgdmFyaWFibGVzIGZyb20gdGhlIHVzZXIncyBvcmlnaW5hbCBlbnZpcm9ubWVudCB3aGljaAorICAgICMgaGF2ZW4ndCBzdWJzZXF1bnRseSBiZWVuIHNldC9jaGFuZ2VkCisgICAgb3JpZ2JiZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkgb3Ige30KKyAgICBmb3Iga2V5IGluIG9yaWdiYmVudjoKKyAgICAgICAgaWYga2V5IGluIGVudmRhdGE6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB2YWx1ZSA9IG9yaWdiYmVudi5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHN0cih2YWx1ZSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyKGtleSwgc3RyKHZhbHVlKSkKKyAgICAgICAgICAgIGVudmRhdGEuc2V0VmFyRmxhZyhrZXksICdleHBvcnQnLCAxKQorCisgICAgIyBBIGNvbXBsZXggUFMxIG1pZ2h0IG5lZWQgbW9yZSBlc2NhcGluZyBvZiBjaGFycy4KKyAgICAjIExldHMgbm90IGV4cG9ydCBQUzEgaW5zdGVhZC4KKyAgICBlbnZkYXRhLmRlbFZhcigiUFMxIikKKworICAgICMgUmVwbGFjZSBjb21tYW5kIHdpdGggYW4gZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdAorICAgIGNvbW1hbmQgPSBlbWl0X3Rlcm1pbmFsX2Z1bmMoY29tbWFuZCwgZW52ZGF0YSwgZCkKKworICAgIHRlcm1pbmFsID0gb2UuZGF0YS50eXBlZF92YWx1ZSgnT0VfVEVSTUlOQUwnLCBkKS5sb3dlcigpCisgICAgaWYgdGVybWluYWwgPT0gJ25vbmUnOgorICAgICAgICBiYi5mYXRhbCgnRGV2c2hlbGwgdXNhZ2UgZGlzYWJsZWQgd2l0aCBPRV9URVJNSU5BTCcpCisgICAgZWxpZiB0ZXJtaW5hbCAhPSAnYXV0byc6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9lLnRlcm1pbmFsLnNwYXduKHRlcm1pbmFsLCBjb21tYW5kLCB0aXRsZSwgTm9uZSwgZCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgb2UudGVybWluYWwuVW5zdXBwb3J0ZWRUZXJtaW5hbDoKKyAgICAgICAgICAgIGJiLndhcm4oJ1Vuc3VwcG9ydGVkIHRlcm1pbmFsICIlcyIsIGRlZmF1bHRpbmcgdG8gImF1dG8iJyAlCisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsKQorICAgICAgICBleGNlcHQgb2UudGVybWluYWwuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgYmIuZmF0YWwoJ1VuYWJsZSB0byBzcGF3biB0ZXJtaW5hbCAlczogJXMnICUgKHRlcm1pbmFsLCBleGMpKQorCisgICAgdHJ5OgorICAgICAgICBvZS50ZXJtaW5hbC5zcGF3bl9wcmVmZXJyZWQoY29tbWFuZCwgdGl0bGUsIE5vbmUsIGQpCisgICAgZXhjZXB0IG9lLnRlcm1pbmFsLk5vU3VwcG9ydGVkVGVybWluYWxzOgorICAgICAgICBiYi5mYXRhbCgnTm8gdmFsaWQgdGVybWluYWwgZm91bmQsIHVuYWJsZSB0byBvcGVuIGRldnNoZWxsJykKKyAgICBleGNlcHQgb2UudGVybWluYWwuRXhlY3V0aW9uRXJyb3IgYXMgZXhjOgorICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHNwYXduIHRlcm1pbmFsICVzOiAlcycgJSAodGVybWluYWwsIGV4YykpCisKK29lX3Rlcm1pbmFsW3ZhcmRlcHNleGNsdWRlXSA9ICJCQl9PUklHRU5WIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjA1OTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS1hdXRvLmJiY2xhc3MKQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKworIyBSdW4gdGVzdHMgYXV0b21hdGljYWxseSBvbiBhbiBpbWFnZSBhZnRlciB0aGUgaW1hZ2UgaXMgY29uc3RydWN0ZWQKKyMgKGFzIG9wcG9zZWQgdG8gdGVzdGltYWdlLmJiY2xhc3MgYWxvbmUgd2hlcmUgdGVzdHMgbXVzdCBiZSBjYWxsZWQKKyMgbWFudWFsbHkgdXNpbmcgYml0YmFrZSAtYyB0ZXN0aW1hZ2UgPGltYWdlPikuCisjCisjIE5PVEU6IHRvIHVzZSB0aGlzIGNsYXNzLCBzaW1wbHkgc2V0IFRFU1RfSU1BR0UgPSAiMSIgLSBubyBuZWVkIHRvCisjIGluaGVyaXQgaXQgc2luY2UgdGhhdCB3aWxsIGJlIGRvbmUgaW4gaW1hZ2UuYmJjbGFzcyB3aGVuIHRoaXMgdmFyaWFibGUKKyMgaGFzIGJlZW4gc2V0LgorIworIyBTZWUgdGVzdGltYWdlLmJiY2xhc3MgZm9yIHRoZSB0ZXN0IGltcGxlbWVudGF0aW9uLgorCitpbmhlcml0IHRlc3RpbWFnZQorCitweXRob24gZG9fdGVzdGltYWdlX2F1dG8oKSB7CisgICAgdGVzdGltYWdlX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdGltYWdlX2F1dG8gYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3Jvb3RmcworZG9fdGVzdGltYWdlX2F1dG9bZGVwZW5kc10gKz0gIiR7VEVTVElNQUdFREVQRU5EU30iCitkb190ZXN0aW1hZ2VfYXV0b1tsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3Rlc3RpbWFnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTE4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSw0MjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisKKyMgdGVzdGltYWdlLmJiY2xhc3MgZW5hYmxlcyB0ZXN0aW5nIG9mIHFlbXUgaW1hZ2VzIHVzaW5nIHB5dGhvbiB1bml0dGVzdHMuCisjIE1vc3Qgb2YgdGhlIHRlc3RzIGFyZSBjb21tYW5kcyBydW4gb24gdGFyZ2V0IGltYWdlIG92ZXIgc3NoLgorIyBUbyB1c2UgaXQgYWRkIHRlc3RpbWFnZSB0byBnbG9iYWwgaW5oZXJpdCBhbmQgY2FsbCB5b3VyIHRhcmdldCBpbWFnZSB3aXRoIC1jIHRlc3RpbWFnZQorIyBZb3UgY2FuIHRyeSBpdCBvdXQgbGlrZSB0aGlzOgorIyAtIGZpcnN0IGJ1aWxkIGEgcWVtdSBjb3JlLWltYWdlLXNhdG8KKyMgLSBhZGQgSU5IRVJJVCArPSAidGVzdGltYWdlIiBpbiBsb2NhbC5jb25mCisjIC0gdGhlbiBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UuIFRoYXQgd2lsbCBydW4gYSBzdGFuZGFyZCBzdWl0ZSBvZiB0ZXN0cy4KKworIyBZb3UgY2FuIHNldCAob3IgYXBwZW5kIHRvKSBURVNUX1NVSVRFUyBpbiBsb2NhbC5jb25mIHRvIHNlbGVjdCB0aGUgdGVzdHMKKyMgd2hpY2ggeW91IHdhbnQgdG8gcnVuIGZvciB5b3VyIHRhcmdldC4KKyMgVGhlIHRlc3QgbmFtZXMgYXJlIHRoZSBtb2R1bGUgbmFtZXMgaW4gbWV0YS9saWIvb2VxYS9ydW50aW1lLgorIyBFYWNoIG5hbWUgaW4gVEVTVF9TVUlURVMgcmVwcmVzZW50cyBhIHJlcXVpcmVkIHRlc3QgZm9yIHRoZSBpbWFnZS4gKG5vIHNraXBwaW5nIGFsbG93ZWQpCisjIEFwcGVuZGluZyAiYXV0byIgbWVhbnMgdGhhdCBpdCB3aWxsIHRyeSB0byBydW4gYWxsIHRlc3RzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciB0aGUgaW1hZ2UgKGVhY2ggdGVzdCBkZWNpZGVzIHRoYXQgb24gaXQncyBvd24pLgorIyBOb3RlIHRoYXQgb3JkZXIgaW4gVEVTVF9TVUlURVMgaXMgcmVsZXZhbnQ6IHRlc3RzIGFyZSBydW4gaW4gYW4gb3JkZXIgc3VjaCB0aGF0CisjIHRlc3RzIG1lbnRpb25lZCBpbiBAc2tpcFVubGVzc1Bhc3NlZCBydW4gYmVmb3JlIHRoZSB0ZXN0cyB0aGF0IGRlcGVuZCBvbiB0aGVtLAorIyBidXQgd2l0aG91dCBzdWNoIGRlcGVuZGVuY2llcywgdGVzdHMgcnVuIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBsaXN0ZWQKKyMgaW4gVEVTVF9TVUlURVMuCisjCisjIEEgbGF5ZXIgY2FuIGFkZCBpdHMgb3duIHRlc3RzIGluIGxpYi9vZXFhL3J1bnRpbWUsIHByb3ZpZGVkIGl0IGV4dGVuZHMgQkJQQVRIIGFzIG5vcm1hbCBpbiBpdHMgbGF5ZXIuY29uZi4KKworIyBURVNUX0xPR19ESVIgY29udGFpbnMgYSBjb21tYW5kIHNzaCBsb2cgYW5kIG1heSBjb250YWluIGluZnJvbWF0aW9uIGFib3V0IHdoYXQgY29tbWFuZCBpcyBydW5uaW5nLCBvdXRwdXQgYW5kIHJldHVybiBjb2RlcyBhbmQgZm9yIHFlbXUgYSBib290IGxvZyB0aWxsIGxvZ2luLgorIyBCb290aW5nIGlzIGhhbmRsZWQgYnkgdGhpcyBjbGFzcywgYW5kIGl0J3Mgbm90IGEgdGVzdCBpbiBpdHNlbGYuCisjIFRFU1RfUUVNVUJPT1RfVElNRU9VVCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gdGltZSBpbiBzZWNvbmRzIHRoZSBsYXVuY2ggY29kZSB3aWxsIHdhaXQgZm9yIHRoZSBsb2dpbiBwcm9tcHQuCisKK1RFU1RfTE9HX0RJUiA/PSAiJHtXT1JLRElSfS90ZXN0aW1hZ2UiCisKK1RFU1RfRVhQT1JUX0RJUiA/PSAiJHtUTVBESVJ9L3Rlc3RpbWFnZS8ke1BOfSIKK1RFU1RfRVhQT1JUX09OTFkgPz0gIjAiCisKK1JQTVRFU1RTVUlURSA9ICIke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAnc21hcnQgcnBtJywgJycsIGQpfSIKKworREVGQVVMVF9URVNUX1NVSVRFUyA9ICJwaW5nIGF1dG8iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJwaW5nIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLXNhdG8gPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgZG1lc2cgcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX1BLR1RZUEUnLCAncnBtJywgJ3B5dGhvbicsICcnLCBkKX0iCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgeG9yZyBzY3Agdm5jIGRhdGUgcGVybCBsZGQgZ2NjIGtlcm5lbG1vZHVsZSBkbWVzZyBweXRob24gcGFyc2Vsb2dzICR7UlBNVEVTVFNVSVRFfSIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1sc2Itc2RrID0gInBpbmcgYnVpbGRjdnMgYnVpbGRpcHRhYmxlcyBidWlsZHN1ZG9rdSBjb25ubWFuIGRhdGUgZGYgZ2NjIGtlcm5lbG1vZHVsZSBsZGQgcGFtIHBhcnNlbG9ncyBwZXJsIHB5dGhvbiBzY3AgJHtSUE1URVNUU1VJVEV9IHNzaCBzeXNsb2cgbG9ncm90YXRlIgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJhdXRvIgorCisjIGFhcmNoNjQgaGFzIG5vIGdyYXBoaWNzCitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9hYXJjaDY0ID0gInhvcmcgdm5jIgorCisjcWVtdW1pcHMgaXMgdG9vIHNsb3cgZm9yIGJ1aWxkc3Vkb2t1CitERUZBVUxUX1RFU1RfU1VJVEVTX3JlbW92ZV9xZW11bWlwcyA9ICJidWlsZHN1ZG9rdSIKKworVEVTVF9TVUlURVMgPz0gIiR7REVGQVVMVF9URVNUX1NVSVRFU30iCisKK1RFU1RfUUVNVUJPT1RfVElNRU9VVCA/PSAiMTAwMCIKK1RFU1RfVEFSR0VUID89ICJxZW11IgorVEVTVF9UQVJHRVRfSVAgPz0gIiIKK1RFU1RfU0VSVkVSX0lQID89ICIiCisKK1RFU1RJTUFHRURFUEVORFMgPSAiIgorVEVTVElNQUdFREVQRU5EU19xZW11YWxsID0gInFlbXUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgcWVtdS1oZWxwZXItbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK1RFU1RJTUFHRUxPQ0sgPSAiJHtUTVBESVJ9L3Rlc3RpbWFnZS5sb2NrIgorVEVTVElNQUdFTE9DS19xZW11YWxsID0gIiIKKworVEVTVElNQUdFX0RVTVBfRElSID89ICIvdG1wL29lLXNhdmVkLXRlc3RzLyIKKwordGVzdGltYWdlX2R1bXBfdGFyZ2V0ICgpIHsKKyAgICB0b3AgLWJuMQorICAgIHBzCisgICAgZnJlZQorICAgIGRmCisgICAgIyBUaGUgbmV4dCBjb21tYW5kIHdpbGwgZXhwb3J0IHRoZSBkZWZhdWx0IGdhdGV3YXkgSVAKKyAgICBleHBvcnQgREVGQVVMVF9HQVRFV0FZPSQoaXAgcm91dGUgfCBhd2sgJy9kZWZhdWx0LyB7IHByaW50ICQzfScpCisgICAgcGluZyAtYzMgJERFRkFVTFRfR0FURVdBWQorICAgIGRtZXNnCisgICAgbmV0c3RhdCAtYW4KKyAgICBpcCBhZGRyZXNzCisgICAgIyBOZXh0IGNvbW1hbmQgd2lsbCBkdW1wIGxvZ3MgZnJvbSAvdmFyL2xvZy8KKyAgICBmaW5kIC92YXIvbG9nLyAtdHlwZSBmIDI+L2Rldi9udWxsIC1leGVjIGVjaG8gIj09PT09PT09PT09PT09PT09PT09IiBcOyAtZXhlYyBlY2hvIHt9IFw7IC1leGVjIGVjaG8gIj09PT09PT09PT09PT09PT09PT09IiBcOyAtZXhlYyBjYXQge30gXDsgLWV4ZWMgZWNobyAiIiBcOworfQorCit0ZXN0aW1hZ2VfZHVtcF9ob3N0ICgpIHsKKyAgICB0b3AgLWJuMQorICAgIHBzIC1lZgorICAgIGZyZWUKKyAgICBkZgorICAgIG1lbXN0YXQKKyAgICBkbWVzZworICAgIG5ldHN0YXQgLWFuCit9CisKK3B5dGhvbiBkb190ZXN0aW1hZ2UoKSB7CisgICAgdGVzdGltYWdlX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdGltYWdlCitkb190ZXN0aW1hZ2Vbbm9zdGFtcF0gPSAiMSIKK2RvX3Rlc3RpbWFnZVtkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RpbWFnZVtsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgorCitweXRob24gZG9fdGVzdHNkaygpIHsKKyAgICB0ZXN0c2RrX21haW4oZCkKK30KK2FkZHRhc2sgdGVzdHNkaworZG9fdGVzdHNka1tub3N0YW1wXSA9ICIxIgorZG9fdGVzdHNka1tkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RzZGtbbG9ja2ZpbGVzXSArPSAiJHtURVNUSU1BR0VMT0NLfSIKKworIyBnZXQgdGVzdGNhc2UgbGlzdCBmcm9tIHNwZWNpZmllZCBmaWxlCisjIGlmIHBhdGggaXMgYSByZWxhdGl2ZSBwYXRoLCB0aGVuIHJlbGF0aXZlIHRvIGJ1aWxkL2NvbmYvCitkZWYgcmVhZF90ZXN0bGlzdChkLCBmcGF0aCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZnBhdGgpOgorICAgICAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCJUT1BESVIiLCBUcnVlKQorICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYiLCBmcGF0aCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZnBhdGgpOgorICAgICAgICBiYi5mYXRhbCgiTm8gc3VjaCBtYW5pZmVzdCBmaWxlOiAiLCBmcGF0aCkKKyAgICB0Y3MgPSBbXQorICAgIGZvciBsaW5lIGluIG9wZW4oZnBhdGgpLnJlYWRsaW5lcygpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmUgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgIHRjcy5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gIiAiLmpvaW4odGNzKQorCitkZWYgZ2V0X3Rlc3RzX2xpc3QoZCwgdHlwZT0icnVudGltZSIpOgorICAgIHRlc3RzdWl0ZXMgPSBbXQorICAgIHRlc3RzbGlzdCA9IFtdCisgICAgbWFuaWZlc3RzID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTX01BTklGRVNUIiwgVHJ1ZSkKKyAgICBpZiBtYW5pZmVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgIG1hbmlmZXN0cyA9IG1hbmlmZXN0cy5zcGxpdCgpCisgICAgICAgIGZvciBtYW5pZmVzdCBpbiBtYW5pZmVzdHM6CisgICAgICAgICAgICB0ZXN0c3VpdGVzLmV4dGVuZChyZWFkX3Rlc3RsaXN0KGQsIG1hbmlmZXN0KS5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIHRlc3RzdWl0ZXMgPSBkLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpCisgICAgaWYgdHlwZSA9PSAic2RrIjoKKyAgICAgICAgdGVzdHN1aXRlcyA9IChkLmdldFZhcigiVEVTVF9TVUlURVNfU0RLIiwgVHJ1ZSkgb3IgImF1dG8iKS5zcGxpdCgpCisgICAgYmJwYXRoID0gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCc6JykKKworICAgICMgVGhpcyByZWxpZXMgb24gbGliLyB1bmRlciBlYWNoIGRpcmVjdG9yeSBpbiBCQlBBVEggYmVpbmcgYWRkZWQgdG8gc3lzLnBhdGgKKyAgICAjIChhcyBkb25lIGJ5IGRlZmF1bHQgaW4gYmFzZS5iYmNsYXNzKQorICAgIGZvciB0ZXN0bmFtZSBpbiB0ZXN0c3VpdGVzOgorICAgICAgICBpZiB0ZXN0bmFtZSAhPSAiYXV0byI6CisgICAgICAgICAgICBpZiB0ZXN0bmFtZS5zdGFydHN3aXRoKCJvZXFhLiIpOgorICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQodGVzdG5hbWUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocCwgJ2xpYicsICdvZXFhJywgdHlwZSwgdGVzdG5hbWUgKyAnLnB5JykpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0c2xpc3QuYXBwZW5kKCJvZXFhLiIgKyB0eXBlICsgIi4iICsgdGVzdG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdUZXN0ICVzIHNwZWNpZmllZCBpbiBURVNUX1NVSVRFUyBjb3VsZCBub3QgYmUgZm91bmQgaW4gbGliL29lcWEvcnVudGltZSB1bmRlciBCQlBBVEgnICUgdGVzdG5hbWUpCisKKyAgICBpZiAiYXV0byIgaW4gdGVzdHN1aXRlczoKKyAgICAgICAgZGVmIGFkZF9hdXRvX2xpc3QocGF0aCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHBhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgnVGVzdHMgZGlyZWN0b3J5ICVzIGV4aXN0cyBidXQgaXMgbWlzc2luZyBfX2luaXRfXy5weScgJSBwYXRoKQorICAgICAgICAgICAgZmlsZXMgPSBzb3J0ZWQoW2YgZm9yIGYgaW4gb3MubGlzdGRpcihwYXRoKSBpZiBmLmVuZHN3aXRoKCcucHknKSBhbmQgbm90IGYuc3RhcnRzd2l0aCgnXycpXSkKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9ICdvZXFhLicgKyB0eXBlICsgJy4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQobW9kdWxlKQorCisgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgIHRlc3RwYXRoID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsIHR5cGUpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnU2VhcmNoaW5nIGZvciB0ZXN0cyBpbiAlcycgJSB0ZXN0cGF0aCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRlc3RwYXRoKToKKyAgICAgICAgICAgICAgICBhZGRfYXV0b19saXN0KHRlc3RwYXRoKQorCisgICAgcmV0dXJuIHRlc3RzbGlzdAorCisKK2RlZiBleHBvcnRUZXN0cyhkLHRjKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgcGtndXRpbAorCisgICAgZXhwb3J0cGF0aCA9IGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKQorCisgICAgc2F2ZWRhdGEgPSB7fQorICAgIHNhdmVkYXRhWyJkIl0gPSB7fQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXSA9IHt9CisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl0gPSB7fQorICAgIGZvciBrZXkgaW4gdGMuX19kaWN0X186CisgICAgICAgICMgc3BlY2lhbCBjYXNlcworICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgorICAgICAgICAgICAgc2F2ZWRhdGFba2V5XSA9IGdldGF0dHIodGMsIGtleSkKKyAgICBzYXZlZGF0YVsidGFyZ2V0Il1bImlwIl0gPSB0Yy50YXJnZXQuaXAgb3IgZC5nZXRWYXIoIlRFU1RfVEFSR0VUX0lQIiwgVHJ1ZSkKKyAgICBzYXZlZGF0YVsidGFyZ2V0Il1bInNlcnZlcl9pcCJdID0gdGMudGFyZ2V0LnNlcnZlcl9pcCBvciBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorCisgICAga2V5cyA9IFsga2V5IGZvciBrZXkgaW4gZC5rZXlzKCkgaWYgbm90IGtleS5zdGFydHN3aXRoKCJfIikgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiQkIiKSBcCisgICAgICAgICAgICBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJCX3BuIikgYW5kIG5vdCBrZXkuc3RhcnRzd2l0aCgiZG9fIikgYW5kIG5vdCBkLmdldFZhckZsYWcoa2V5LCAiZnVuYyIpXQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2F2ZWRhdGFbImQiXVtrZXldID0gZC5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICBleGNlcHQgYmIuZGF0YV9zbWFydC5FeHBhbnNpb25FcnJvcjoKKyAgICAgICAgICAgICMgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBhbnl3YXkKKyAgICAgICAgICAgIHBhc3MKKworICAgIHNhdmVkYXRhWyJob3N0X2R1bXBlciJdWyJwYXJlbnRfZGlyIl0gPSB0Yy5ob3N0X2R1bXBlci5wYXJlbnRfZGlyCisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl1bImNtZHMiXSA9IHRjLmhvc3RfZHVtcGVyLmNtZHMKKworICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgInRlc3RkYXRhLmpzb24iKSwgInciKSBhcyBmOgorICAgICAgICAgICAganNvbi5kdW1wKHNhdmVkYXRhLCBmLCBza2lwa2V5cz1UcnVlLCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUpCisKKyAgICAjIG5vdyBzdGFydCBjb3B5aW5nIGZpbGVzCisgICAgIyB3ZSdsbCBiYXNpY2FsbHkgY29weSBldmVyeXRoaW5nIHVuZGVyIG1ldGEvbGliL29lcWEsIHdpdGggdGhlc2UgZXhjZXB0aW9ucworICAgICMgIC0gb2VxYS90YXJnZXRjb250cm9sLnB5IC0gbm90IG5lZWRlZAorICAgICMgIC0gb2VxYS9zZWxmdGVzdCAtIHNvbWV0aGluZyBlbHNlCisgICAgIyBUaGF0IG1lYW5zOgorICAgICMgICAtIGFsbCB0ZXN0cyBmcm9tIG9lcWEvcnVudGltZSBkZWZpbmVkIGluIFRFU1RfU1VJVEVTIChpbmNsdWRpbmcgZnJvbSBvdGhlciBsYXllcnMpCisgICAgIyAgIC0gdGhlIGNvbnRlbnRzIG9mIG9lcWEvdXRpbHMgYW5kIG9lcWEvcnVudGltZS9maWxlcworICAgICMgICAtIG9lcWEvb2V0ZXN0LnB5IGFuZCBvZXFhL3J1bmV4cG9ydC5weSAodGhpcyB3aWxsIGdldCBjb3BpZWQgdG8gZXhwb3J0cGF0aCBub3QgZXhwb3J0cGF0aC9vZXFhKQorICAgICMgICAtIF9faW5pdF9fLnB5IGZpbGVzCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lL2ZpbGVzIikpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS91dGlscyIpKQorICAgICMgY29weSB0ZXN0IG1vZHVsZXMsIHRoaXMgc2hvdWxkIGNvdmVyIHRlc3RzIGluIG90aGVyIGxheWVycyB0b28KKyAgICBmb3IgdCBpbiB0Yy50ZXN0c2xpc3Q6CisgICAgICAgIG1vZCA9IHBrZ3V0aWwuZ2V0X2xvYWRlcih0KQorICAgICAgICBzaHV0aWwuY29weTIobW9kLmZpbGVuYW1lLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQorICAgICMgY29weSBfX2luaXRfXy5weSBmaWxlcworICAgIG9lcWFkaXIgPSBwa2d1dGlsLmdldF9sb2FkZXIoIm9lcWEiKS5maWxlbmFtZQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgIl9faW5pdF9fLnB5IiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYSIpKQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bnRpbWUvX19pbml0X18ucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUiKSkKKyAgICAjIGNvcHkgb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0ZWQucHkKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJvZXRlc3QucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhIikpCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVuZXhwb3J0ZWQucHkiKSwgZXhwb3J0cGF0aCkKKyAgICAjIGNvcHkgb2VxYS91dGlscy8qLnB5CisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKG9lcWFkaXIsICJ1dGlscyIpKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKHJvb3QsIGYpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvdXRpbHMiKSkKKyAgICAjIGNvcHkgb2VxYS9ydW50aW1lL2ZpbGVzLyoKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ob2VxYWRpciwgInJ1bnRpbWUvZmlsZXMiKSk6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihyb290LCBmKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUvZmlsZXMiKSkKKworICAgIGJiLnBsYWluKCJFeHBvcnRlZCB0ZXN0cyB0bzogJXMiICUgZXhwb3J0cGF0aCkKKworCitkZWYgdGVzdGltYWdlX21haW4oZCk6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IG9lcWEucnVudGltZQorICAgIGltcG9ydCB0aW1lCisgICAgaW1wb3J0IHNpZ25hbAorICAgIGZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IGxvYWRUZXN0cywgcnVuVGVzdHMKKyAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgZ2V0X3RhcmdldF9jb250cm9sbGVyCisgICAgZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGV4cG9ydCA9IG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJURVNUX0VYUE9SVF9PTkxZIiwgIjEiLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQorICAgIGlmIGV4cG9ydDoKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGQuZ2V0VmFyKCJURVNUX0VYUE9SVF9ESVIiLCBUcnVlKSwgcmVjdXJzZT1UcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpKQorCisgICAgIyB0ZXN0cyBpbiBURVNUX1NVSVRFUyBiZWNvbWUgcmVxdWlyZWQgdGVzdHMKKyAgICAjIHRoZXkgd29uJ3QgYmUgc2tpcHBlZCBldmVuIGlmIHRoZXkgYXJlbid0IHN1aXRhYmxlIGZvciBhIGltYWdlIChsaWtlIHhvcmcgZm9yIG1pbmltYWwpCisgICAgIyB0ZXN0c2xpc3QgaXMgd2hhdCB3ZSdsbCBhY3R1YWxseSBwYXNzIHRvIHRoZSB1bml0dGVzdCBsb2FkZXIKKyAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHNfbGlzdChkKQorICAgIHRlc3RzcmVxdWlyZWQgPSBbdCBmb3IgdCBpbiBkLmdldFZhcigiVEVTVF9TVUlURVMiLCBUcnVlKS5zcGxpdCgpIGlmIHQgIT0gImF1dG8iXQorCisgICAgdGFnZXhwID0gZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1RBR1MiLCBUcnVlKQorCisgICAgIyB3ZSBuZWVkIHRoZSBob3N0IGR1bXBlciBpbiB0ZXN0IGNvbnRleHQKKyAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQorCisgICAgIyB0aGUgcm9ib3QgZGFuY2UKKyAgICB0YXJnZXQgPSBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIoZCkKKworICAgIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgICAgIHNlbGYudGVzdHNsaXN0ID0gdGVzdHNsaXN0CisgICAgICAgICAgICBzZWxmLnRhZ2V4cCA9IHRhZ2V4cAorICAgICAgICAgICAgc2VsZi50ZXN0c3JlcXVpcmVkID0gdGVzdHNyZXF1aXJlZAorICAgICAgICAgICAgc2VsZi5maWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKG9lcWEucnVudGltZS5fX2ZpbGVfXykpLCJmaWxlcyIpCisgICAgICAgICAgICBzZWxmLnRhcmdldCA9IHRhcmdldAorICAgICAgICAgICAgc2VsZi5ob3N0X2R1bXBlciA9IGhvc3RfZHVtcGVyCisgICAgICAgICAgICBzZWxmLmltYWdlZmVhdHVyZXMgPSBkLmdldFZhcigiSU1BR0VfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmRpc3Ryb2ZlYXR1cmVzID0gZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICIubWFuaWZlc3QiKQorICAgICAgICAgICAgc2VsZi5zaWd0ZXJtID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYub3JpZ3NpZ3Rlcm1oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNlbGYuc2lndGVybV9leGNlcHRpb24pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgaW1hZ2U/XG4lcyIgJSBlKQorCisgICAgICAgIGRlZiBzaWd0ZXJtX2V4Y2VwdGlvbihzZWxmLCBzaWdudW0sIHN0YWNrZnJhbWUpOgorICAgICAgICAgICAgYmIud2FybigiVGVzdEltYWdlIHJlY2VpdmVkIFNJR1RFUk0sIHNodXR0aW5nIGRvd24uLi4iKQorICAgICAgICAgICAgc2VsZi5zaWd0ZXJtID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50YXJnZXQuc3RvcCgpCisKKyAgICAjIHRlc3QgY29udGV4dAorICAgIHRjID0gVGVzdENvbnRleHQoKQorCisgICAgIyB0aGlzIGlzIGEgZHVtbXkgbG9hZCBvZiB0ZXN0cworICAgICMgd2UgYXJlIGRvaW5nIHRoYXQgdG8gZmluZCBjb21waWxlIGVycm9ycyBpbiB0aGUgdGVzdHMgdGhlbXNlbHZlcworICAgICMgYmVmb3JlIGJvb3RpbmcgdGhlIGltYWdlCisgICAgdHJ5OgorICAgICAgICBsb2FkVGVzdHModGMpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICB0YXJnZXQuZGVwbG95KCkKKworICAgIHRyeToKKyAgICAgICAgdGFyZ2V0LnN0YXJ0KCkKKyAgICAgICAgaWYgZXhwb3J0OgorICAgICAgICAgICAgZXhwb3J0VGVzdHMoZCx0YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHQgPSBydW5UZXN0cyh0YykKKyAgICAgICAgICAgIHN0b3B0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQorICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgc3NoIGxvZyIgJSBwbiApCisgICAgZmluYWxseToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgdGMub3JpZ3NpZ3Rlcm1oYW5kbGVyKQorICAgICAgICB0YXJnZXQuc3RvcCgpCisKK3Rlc3RpbWFnZV9tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKKworCitkZWYgdGVzdHNka19tYWluKGQpOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIGltcG9ydCBvcworICAgIGltcG9ydCBnbG9iCisgICAgaW1wb3J0IG9lcWEucnVudGltZQorICAgIGltcG9ydCBvZXFhLnNkaworICAgIGltcG9ydCB0aW1lCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBsb2FkVGVzdHMsIHJ1blRlc3RzCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLCBUcnVlKSkKKworICAgICMgdGVzdHMgaW4gVEVTVF9TVUlURVMgYmVjb21lIHJlcXVpcmVkIHRlc3RzCisgICAgIyB0aGV5IHdvbid0IGJlIHNraXBwZWQgZXZlbiBpZiB0aGV5IGFyZW4ndCBzdWl0YWJsZS4KKyAgICAjIHRlc3RzbGlzdCBpcyB3aGF0IHdlJ2xsIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHVuaXR0ZXN0IGxvYWRlcgorICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0c19saXN0KGQsICJzZGsiKQorICAgIHRlc3RzcmVxdWlyZWQgPSBbdCBmb3IgdCBpbiAoZC5nZXRWYXIoIlRFU1RfU1VJVEVTX1NESyIsIFRydWUpIG9yICJhdXRvIikuc3BsaXQoKSBpZiB0ICE9ICJhdXRvIl0KKworICAgIHRjbmFtZSA9IGQuZXhwYW5kKCIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoIikKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGNuYW1lKToKKyAgICAgICAgYmIuZmF0YWwoIlRoZSB0b29sY2hhaW4gaXMgbm90IGJ1aWx0LiBCdWlsZCBpdCBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHM6ICdiaXRiYWtlIDxpbWFnZT4gLWMgcG9wdWxhdGVfc2RrJyAuIikKKworICAgIGNsYXNzIFRlc3RDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgICAgIHNlbGYudGVzdHNsaXN0ID0gdGVzdHNsaXN0CisgICAgICAgICAgICBzZWxmLnRlc3RzcmVxdWlyZWQgPSB0ZXN0c3JlcXVpcmVkCisgICAgICAgICAgICBzZWxmLmZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgob2VxYS5ydW50aW1lLl9fZmlsZV9fKSksImZpbGVzIikKKyAgICAgICAgICAgIHNlbGYuc2RrdGVzdGRpciA9IHNka3Rlc3RkaXIKKyAgICAgICAgICAgIHNlbGYuc2RrZW52ID0gc2RrZW52CisgICAgICAgICAgICBzZWxmLmltYWdlZmVhdHVyZXMgPSBkLmdldFZhcigiSU1BR0VfRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmRpc3Ryb2ZlYXR1cmVzID0gZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZC5nZXRWYXIoIlNES19UQVJHRVRfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihtYW5pZmVzdCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dtYW5pZmVzdCA9IGYucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIHNkayBpbWFnZT9cbiVzIiAlIGUpCisgICAgICAgICAgICBob3N0bWFuaWZlc3QgPSBkLmdldFZhcigiU0RLX0hPU1RfTUFOSUZFU1QiLCBUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihob3N0bWFuaWZlc3QpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaG9zdHBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGhvc3QgcGFja2FnZSBtYW5pZmVzdCBmaWxlIGZvdW5kLiBEaWQgeW91IGJ1aWxkIHRoZSBzZGsgaW1hZ2U/XG4lcyIgJSBlKQorCisgICAgc2RrdGVzdGRpciA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3Rlc3RpbWFnZS1zZGsvIikKKyAgICBiYi51dGlscy5yZW1vdmUoc2RrdGVzdGRpciwgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc2RrdGVzdGRpcikKKyAgICB0cnk6CisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJjZCAlczsgJXMgPDxFT0Zcbi4vdGNcbllcbkVPRiIgJSAoc2RrdGVzdGRpciwgdGNuYW1lKSwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZmF0YWwoIkNvdWxkbid0IGluc3RhbGwgdGhlIFNESzpcbiVzIiAlIGUub3V0cHV0KQorCisgICAgdHJ5OgorICAgICAgICB0YXJnZXRzID0gZ2xvYi5nbG9iKGQuZXhwYW5kKHNka3Rlc3RkaXIgKyAiL3RjL2Vudmlyb25tZW50LXNldHVwLSoiKSkKKyAgICAgICAgYmIud2FybihzdHIodGFyZ2V0cykpCisgICAgICAgIGZvciBzZGtlbnYgaW4gdGFyZ2V0czoKKyAgICAgICAgICAgIGJiLnBsYWluKCJUZXN0aW5nICVzIiAlIHNka2VudikKKyAgICAgICAgICAgICMgdGVzdCBjb250ZXh0CisgICAgICAgICAgICB0YyA9IFRlc3RDb250ZXh0KCkKKworICAgICAgICAgICAgIyB0aGlzIGlzIGEgZHVtbXkgbG9hZCBvZiB0ZXN0cworICAgICAgICAgICAgIyB3ZSBhcmUgZG9pbmcgdGhhdCB0byBmaW5kIGNvbXBpbGUgZXJyb3JzIGluIHRoZSB0ZXN0cyB0aGVtc2VsdmVzCisgICAgICAgICAgICAjIGJlZm9yZSBib290aW5nIHRoZSBpbWFnZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvYWRUZXN0cyh0YywgInNkayIpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJMb2FkaW5nIHRlc3RzIGZhaWxlZDpcbiVzIiAlIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisKKyAgICAKKyAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHQgPSBydW5UZXN0cyh0YywgInNkayIpCisgICAgICAgICAgICBzdG9wdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgICAgIGJiLnBsYWluKCIlcyBTREsoJXMpOiVzIC0gUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJSAocG4sIG9zLnBhdGguYmFzZW5hbWUodGNuYW1lKSwgb3MucGF0aC5iYXNlbmFtZShzZGtlbnYpLHJlc3VsdC50ZXN0c1J1biwgcmVzdWx0LnRlc3RzUnVuICE9IDEgYW5kICJzIiBvciAiIiwgc3RvcHRpbWUgLSBzdGFydHRpbWUpKQorICAgICAgICAgICAgICAgIG1zZyA9ICIlcyAtIE9LIC0gQWxsIHJlcXVpcmVkIHRlc3RzIHBhc3NlZCIgJSBwbgorICAgICAgICAgICAgICAgIHNraXBwZWQgPSBsZW4ocmVzdWx0LnNraXBwZWQpCisgICAgICAgICAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgbXNnICs9ICIgKHNraXBwZWQ9JWQpIiAlIHNraXBwZWQKKyAgICAgICAgICAgICAgICBiYi5wbGFpbihtc2cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIC0gY2hlY2sgdGhlIHRhc2sgbG9nIGFuZCB0aGUgY29tbWFuZHMgbG9nIiAlIHBuICkKKyAgICBmaW5hbGx5OgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2RrdGVzdGRpciwgVHJ1ZSkKKwordGVzdHNka19tYWluW3ZhcmRlcHNleGNsdWRlXSA9KyAiQkJfT1JJR0VOViIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90ZXhpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlZmJjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90ZXhpbmZvLmJiY2xhc3MKQEAgLTAsMCArMSwxNSBAQAorIyBUaGlzIGNsYXNzIGlzIGluaGVyaXRlZCBieSByZWNpcGVzIHdob3NlIHVwc3RyZWFtIHBhY2thZ2VzIGludm9rZSB0aGUKKyMgdGV4aW5mbyB1dGlsaXRpZXMgYXQgYnVpbGQtdGltZS4gTmF0aXZlIGFuZCBjcm9zcyByZWNpcGVzIGFyZSBtYWRlIHRvIHVzZSB0aGUKKyMgZHVtbXkgc2NyaXB0cyBwcm92aWRlZCBieSB0ZXhpbmZvLWR1bW15LW5hdGl2ZSwgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLiAKKyMgVGFyZ2V0IGFyY2hpdGVjdHVyZSByZWNpcGVzIHVzZSB0aGUgZ2VudWluZSBUZXhpbmZvIHV0aWxpdGllcy4gQnkgZGVmYXVsdCwgCisjIHRoZXkgdXNlIHRoZSBUZXhpbmZvIHV0aWxpdGllcyBvbiB0aGUgaG9zdCBzeXN0ZW0uIElmIHlvdSB3YW50IHRvIHVzZSB0aGUKKyMgVGV4aW5mbyByZWNpcGUgc2hpcHBlZCB3aXRoIHlvY28sIHlvdSBjYW4gcmVtb3ZlIHRleGluZm8tbmF0aXZlIGZyb20gCisjIEFTU1VNRV9QUk9WSURFRCBhbmQgbWFrZWluZm8gZnJvbSBTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTLgorCitURVhERVAgPSAidGV4aW5mby1uYXRpdmUiCitURVhERVBfY2xhc3MtbmF0aXZlID0gInRleGluZm8tZHVtbXktbmF0aXZlIgorVEVYREVQX2NsYXNzLWNyb3NzID0gInRleGluZm8tZHVtbXktbmF0aXZlIgorREVQRU5EU19hcHBlbmQgPSAiICR7VEVYREVQfSIKK1BBVEhfcHJlcGVuZF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3RleGluZm8tZHVtbXktbmF0aXZlOiIKK1BBVEhfcHJlcGVuZF9jbGFzcy1jcm9zcyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdGV4aW5mby1kdW1teS1uYXRpdmU6IgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGluZGVyY2xpZW50LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdGluZGVyY2xpZW50LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4NGVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcwpAQCAtMCwwICsxLDM2OCBAQAorZGVmIHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLCBzZWxlY3RvciwgY29udGVudF90eXBlLCBib2R5KToKKyAgICBpbXBvcnQgaHR0cGxpYgorICAgICMgbm93IHBvc3QgaXQKKyAgICBmb3IgaSBpbiByYW5nZSgwLDUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaHR0cGxpYi5IVFRQKHNlcnZlcikKKyAgICAgICAgICAgIGgucHV0cmVxdWVzdCgnUE9TVCcsIHNlbGVjdG9yKQorICAgICAgICAgICAgaC5wdXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRfdHlwZSkKKyAgICAgICAgICAgIGgucHV0aGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIHN0cihsZW4oYm9keSkpKQorICAgICAgICAgICAgaC5lbmRoZWFkZXJzKCkKKyAgICAgICAgICAgIGguc2VuZChib2R5KQorICAgICAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzID0gaC5nZXRyZXBseSgpCisgICAgICAgICAgICAjcHJpbnQgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzCisgICAgICAgICAgICByZXR1cm4gKGVycmNvZGUsZXJybXNnLCBoZWFkZXJzLCBoLmZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHByaW50ICJFcnJvciBzZW5kaW5nIHRoZSByZXBvcnQhIgorICAgICAgICAgICAgIyB0cnkgYWdhaW4KKyAgICAgICAgICAgIHBhc3MKKworICAgICMgcmV0dXJuIHNvbWUgZ2FyYmFnZQorICAgIHJldHVybiAoLTEsICJ1bmtub3duIiwgInVua25vd24iLCBOb25lKQorCitkZWYgdGluZGVyX2Zvcm1fZGF0YShib3VuZCwgZGljdCwgbG9nKToKKyAgICBvdXRwdXQgPSBbXQorICAgICMgZm9yIGVhY2gga2V5IGluIHRoZSBkaWN0aW9uYXJ5CisgICAgZm9yIG5hbWUgaW4gZGljdDoKKyAgICAgICAgYXNzZXJ0IGRpY3RbbmFtZV0KKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIi0tIiArIGJvdW5kICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iJXMiJyAlIG5hbWUgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiIiApCisgICAgICAgIG91dHB1dC5hcHBlbmQoIGRpY3RbbmFtZV0gKQorICAgIGlmIGxvZzoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggIi0tIiArIGJvdW5kICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibG9nIjsgZmlsZW5hbWU9ImxvZy50eHQiJyApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICcnICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggbG9nICkKKyAgICBvdXRwdXQuYXBwZW5kKCAnLS0nICsgYm91bmQgKyAnLS0nICkKKyAgICBvdXRwdXQuYXBwZW5kKCAnJyApCisKKyAgICByZXR1cm4gIlxyXG4iLmpvaW4ob3V0cHV0KQorCitkZWYgdGluZGVyX3RpbWVfc3RyaW5nKCk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB0aW1lIGFzIEdNVAorICAgICIiIgorICAgIHJldHVybiAiIgorCitkZWYgdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxzdGF0dXMsbG9nKToKKyAgICAiIiIKKyAgICBGb3JtYXQgdGhlIFRpbmRlcmJveCBIVFRQIHBvc3Qgd2l0aCB0aGUgZGF0YSBuZWVkZWQKKyAgICBmb3IgdGhlIHRpbmRlcmJveCB0byBiZSBoYXBweS4KKyAgICAiIiIKKworICAgIGltcG9ydCByYW5kb20KKworICAgICMgdGhlIHZhcmlhYmxlcyB3ZSB3aWxsIG5lZWQgdG8gc2VuZCBvbiB0aGlzIGZvcm0gcG9zdAorICAgIHZhcmlhYmxlcyA9ICB7CisgICAgICAgICJ0cmVlIiAgICAgICAgIDogZC5nZXRWYXIoJ1RJTkRFUl9UUkVFJywgVHJ1ZSksCisgICAgICAgICJtYWNoaW5lX25hbWUiIDogZC5nZXRWYXIoJ1RJTkRFUl9NQUNISU5FJywgVHJ1ZSksCisgICAgICAgICJvcyIgICAgICAgICAgIDogb3MudW5hbWUoKVswXSwKKyAgICAgICAgIm9zX3ZlcnNpb24iICAgOiBvcy51bmFtZSgpWzJdLAorICAgICAgICAiY29tcGlsZXIiICAgICA6ICJnY2MiLAorICAgICAgICAiY2xvYmJlciIgICAgICA6IGQuZ2V0VmFyKCdUSU5ERVJfQ0xPQkJFUicsIFRydWUpIG9yICIwIiwKKyAgICAgICAgInNyY2RhdGUiICAgICAgOiBkLmdldFZhcignU1JDREFURScsIFRydWUpLAorICAgICAgICAiUE4iICAgICAgICAgICA6IGQuZ2V0VmFyKCdQTicsIFRydWUpLAorICAgICAgICAiUFYiICAgICAgICAgICA6IGQuZ2V0VmFyKCdQVicsIFRydWUpLAorICAgICAgICAiUFIiICAgICAgICAgICA6IGQuZ2V0VmFyKCdQUicsIFRydWUpLAorICAgICAgICAiRklMRSIgICAgICAgICA6IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkgb3IgIk4vQSIsCisgICAgICAgICJUQVJHRVRBUkNIIiAgIDogZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksCisgICAgICAgICJUQVJHRVRGUFUiICAgIDogZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJUQVJHRVRPUyIgICAgIDogZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIk1BQ0hJTkUiICAgICAgOiBkLmdldFZhcignTUFDSElORScsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiBkLmdldFZhcignRElTVFJPJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiemVja2Utcm9ja3MiICA6ICJzdXJlIiwKKyAgICB9CisKKyAgICAjIG9wdGlvbmFsbHkgYWRkIHRoZSBzdGF0dXMKKyAgICBpZiBzdGF0dXM6CisgICAgICAgIHZhcmlhYmxlc1sic3RhdHVzIl0gPSBzdHIoc3RhdHVzKQorCisgICAgIyB0cnkgdG8gbG9hZCB0aGUgbWFjaGluZSBpZAorICAgICMgd2Ugb25seSBuZWVkIG9uIGJ1aWxkX3N0YXR1cy5wbCBidXQgc2VuZGluZyBpdAorICAgICMgYWx3YXlzIGRvZXMgbm90IGh1cnQKKyAgICB0cnk6CisgICAgICAgIGYgPSBmaWxlKGQuZ2V0VmFyKCdUTVBESVInLFRydWUpKycvdGluZGVyLW1hY2hpbmUuaWQnLCAncicpCisgICAgICAgIGlkID0gZi5yZWFkKCkKKyAgICAgICAgdmFyaWFibGVzWydtYWNoaW5lX2lkJ10gPSBpZAorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgIyB0aGUgYm91bmRhcnkgd2Ugd2lsbCBuZWVkCisgICAgYm91bmRhcnkgPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSVkIiAlIGludChyYW5kb20ucmFuZG9tKCkqMTAwMDAwMDAwMDAwMCkKKworICAgICMgbm93IGZvcm1hdCB0aGUgYm9keQorICAgIGJvZHkgPSB0aW5kZXJfZm9ybV9kYXRhKCBib3VuZGFyeSwgdmFyaWFibGVzLCBsb2cgKQorCisgICAgcmV0dXJuICgibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JXMiICUgYm91bmRhcnkpLGJvZHkKKworCitkZWYgdGluZGVyX2J1aWxkX3N0YXJ0KGQpOgorICAgICIiIgorICAgIEluZm9ybSB0aGUgdGluZGVyYm94IHRoYXQgYSBidWlsZCBpcyBzdGFydGluZy4gV2UgZG8gdGhpcworICAgIGJ5IHBvc3Rpbmcgb3VyIG5hbWUgYW5kIHRyZWUgdG8gdGhlIGJ1aWxkX3N0YXJ0LnBsIHNjcmlwdAorICAgIG9uIHRoZSBzZXJ2ZXIuCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgYm9keSBhbmQgdHlwZQorICAgIGNvbnRlbnRfdHlwZSwgYm9keSA9IHRpbmRlcl9mb3JtYXRfaHR0cF9wb3N0KGQsTm9uZSxOb25lKQorICAgIHNlcnZlciA9IGQuZ2V0VmFyKCdUSU5ERVJfSE9TVCcsIFRydWUgKQorICAgIHVybCAgICA9IGQuZ2V0VmFyKCdUSU5ERVJfVVJMJywgVHJ1ZSApCisKKyAgICBzZWxlY3RvciA9IHVybCArICIveG1sL2J1aWxkX3N0YXJ0LnBsIgorCisgICAgI3ByaW50ICJzZWxlY3RvciAlcyBhbmQgdXJsICVzIiAlIChzZWxlY3RvciwgdXJsKQorCisgICAgIyBub3cgcG9zdCBpdAorICAgIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywgaF9maWxlID0gdGluZGVyX2h0dHBfcG9zdChzZXJ2ZXIsc2VsZWN0b3IsY29udGVudF90eXBlLCBib2R5KQorICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICByZXBvcnQgPSBoX2ZpbGUucmVhZCgpCisKKyAgICAjIG5vdyBsZXQgdXMgZmluZCB0aGUgbWFjaGluZSBpZCB0aGF0IHdhcyBhc3NpZ25lZCB0byB1cworICAgIHNlYXJjaCA9ICI8bWFjaGluZSBpZD0nIgorICAgIHJlcG9ydCA9IHJlcG9ydFtyZXBvcnQuZmluZChzZWFyY2gpK2xlbihzZWFyY2gpOl0KKyAgICByZXBvcnQgPSByZXBvcnRbMDpyZXBvcnQuZmluZCgiJyIpXQorCisgICAgYmIubm90ZSgiTWFjaGluZSBJRCBhc3NpZ25lZCBieSB0aW5kZXJib3g6ICVzIiAlIHJlcG9ydCApCisKKyAgICAjIG5vdyB3ZSB3aWxsIG5lZWQgdG8gc2F2ZSB0aGUgbWFjaGluZSBudW1iZXIKKyAgICAjIHdlIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIG51bWJlcnMKKyAgICBmID0gZmlsZShkLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItbWFjaGluZS5pZCIsICd3JykKKyAgICBmLndyaXRlKHJlcG9ydCkKKworCitkZWYgdGluZGVyX3NlbmRfaHR0cChkLCBzdGF0dXMsIF9sb2cpOgorICAgICIiIgorICAgIFNlbmQgdGhpcyBsb2cgYXMgYnVpbGQgc3RhdHVzCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgYm9keSBhbmQgdHlwZQorICAgIHNlcnZlciA9IGQuZ2V0VmFyKCdUSU5ERVJfSE9TVCcsIFRydWUpCisgICAgdXJsICAgID0gZC5nZXRWYXIoJ1RJTkRFUl9VUkwnLCBUcnVlKQorCisgICAgc2VsZWN0b3IgPSB1cmwgKyAiL3htbC9idWlsZF9zdGF0dXMucGwiCisKKyAgICAjIG5vdyBwb3N0IGl0IC0gaW4gY2h1bmtzIG9mIDEwLjAwMCBjaGFyYWNodGVycworICAgIG5ld19sb2cgPSBfbG9nCisgICAgd2hpbGUgbGVuKG5ld19sb2cpID4gMDoKKyAgICAgICAgY29udGVudF90eXBlLCBib2R5ID0gdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxzdGF0dXMsbmV3X2xvZ1swOjE4MDAwXSkKKyAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBoX2ZpbGUgPSB0aW5kZXJfaHR0cF9wb3N0KHNlcnZlcixzZWxlY3Rvcixjb250ZW50X3R5cGUsIGJvZHkpCisgICAgICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICAgICAgI3ByaW50IGguZmlsZS5yZWFkKCkKKyAgICAgICAgbmV3X2xvZyA9IG5ld19sb2dbMTgwMDA6XQorCisKK2RlZiB0aW5kZXJfcHJpbnRfaW5mbyhkKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgVGluZGVyQm94IEluZm8KKyAgICAgICAgSW5jbHVkaW5nIGluZm9ybWF0aW9ucyBvZiB0aGUgQmFzZVN5c3RlbSBhbmQgdGhlIFRyZWUKKyAgICAgICAgd2UgdXNlLgorICAgICIiIgorCisgICAgIyBnZXQgdGhlIGxvY2FsIHZhcnMKKyAgICB0aW1lICAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBvcHMgICAgID0gb3MudW5hbWUoKVswXQorICAgIHZlcnNpb24gPSBvcy51bmFtZSgpWzJdCisgICAgdXJsICAgICA9IGQuZ2V0VmFyKCAnVElOREVSX1VSTCcgLCBUcnVlICkKKyAgICB0cmVlICAgID0gZC5nZXRWYXIoICdUSU5ERVJfVFJFRScsIFRydWUgKQorICAgIGJyYW5jaCAgPSBkLmdldFZhciggJ1RJTkRFUl9CUkFOQ0gnLCBUcnVlICkKKyAgICBzcmNkYXRlID0gZC5nZXRWYXIoICdTUkNEQVRFJywgVHJ1ZSApCisgICAgbWFjaGluZSA9IGQuZ2V0VmFyKCAnTUFDSElORScsIFRydWUgKQorICAgIGRpc3RybyAgPSBkLmdldFZhciggJ0RJU1RSTycsIFRydWUgKQorICAgIGJiZmlsZXMgPSBkLmdldFZhciggJ0JCRklMRVMnLCBUcnVlICkKKyAgICB0YXJjaCAgID0gZC5nZXRWYXIoICdUQVJHRVRfQVJDSCcsIFRydWUgKQorICAgIGZwdSAgICAgPSBkLmdldFZhciggJ1RBUkdFVF9GUFUnLCBUcnVlICkKKyAgICBvZXJldiAgID0gZC5nZXRWYXIoICdPRV9SRVZJU0lPTicsIFRydWUgKSBvciAidW5rbm93biIKKworICAgICMgdGhlcmUgaXMgYSBidWcgd2l0aCB0aXBwbGUgcXVvdGVkIHN0cmluZ3MKKyAgICAjIGkgd2lsbCB3b3JrIGFyb3VuZCBidXQgd2lsbCBmaXggdGhlIG9yaWdpbmFsCisgICAgIyBidWcgYXMgd2VsbAorICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCgiPT0gVGluZGVyYm94IEluZm8iICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW1lOiAlKHRpbWUpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIk9TOiAlKG9wcylzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiJSh2ZXJzaW9uKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb21waWxlcjogZ2NjIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IENsaWVudDogMC4xIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVGluZGVyYm94IENsaWVudCBMYXN0IE1vZGlmaWVkOiB5ZXN0ZXJkYXkiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggUHJvdG9jb2w6IDAuMSIgKQorICAgIG91dHB1dC5hcHBlbmQoIlVSTDogJSh1cmwpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRyZWU6ICUodHJlZSlzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiQ29uZmlnOiIgKQorICAgIG91dHB1dC5hcHBlbmQoImJyYW5jaCA9ICclKGJyYW5jaClzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRBUkdFVF9BUkNIID0gJyUodGFyY2gpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUQVJHRVRfRlBVID0gJyUoZnB1KXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiU1JDREFURSA9ICclKHNyY2RhdGUpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJNQUNISU5FID0gJyUobWFjaGluZSlzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkRJU1RSTyA9ICclKGRpc3RybylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkJCRklMRVMgPSAnJShiYmZpbGVzKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiT0VSRVYgPSAnJShvZXJldilzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIj09IEVuZCBUaW5kZXJib3ggQ2xpZW50IEluZm8iICkKKworICAgICMgbm93IGNyZWF0ZSB0aGUgcmVhbCBvdXRwdXQKKyAgICByZXR1cm4gIlxuIi5qb2luKG91dHB1dCkgJSB2YXJzKCkKKworCitkZWYgdGluZGVyX3ByaW50X2VudigpOgorICAgICIiIgorICAgIFByaW50IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb2YgdGhpcyBidWlsZAorICAgICIiIgorICAgIHRpbWVfc3RhcnQgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIHRpbWVfZW5kICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorCisgICAgIyBidWlsZCB0aGUgZW52aXJvbm1lbnQKKyAgICBlbnYgPSAiIgorICAgIGZvciB2YXIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgZW52ICs9ICIlcz0lc1xuIiAlICh2YXIsIG9zLmVudmlyb25bdmFyXSkKKworICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIFJVTk5JTkcgZW52ICUodGltZV9zdGFydClzIiApCisgICAgb3V0cHV0LmFwcGVuZCggZW52ICkKKyAgICBvdXRwdXQuYXBwZW5kKCAiPC0tLSBUSU5ERVJCT1ggRklOSVNIRUQgKFNVQ0NFU1MpICUodGltZV9lbmQpcyIgKQorCisgICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICUgdmFycygpCisKK2RlZiB0aW5kZXJfdGluZGVyX3N0YXJ0KGQsIGV2ZW50KToKKyAgICAiIiIKKyAgICBQUklOVCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIGJ1aWxkCisgICAgIiIiCisKKyAgICB0aW1lX3N0YXJ0ID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBjb25maWcgPSB0aW5kZXJfcHJpbnRfaW5mbyhkKQorICAgICNlbnYgICAgPSB0aW5kZXJfcHJpbnRfZW52KCkKKyAgICB0aW1lX2VuZCAgID0gdGluZGVyX3RpbWVfc3RyaW5nKCkKKyAgICBwYWNrYWdlcyA9ICIgIi5qb2luKCBldmVudC5nZXRQa2dzKCkgKSAKKworICAgIG91dHB1dCA9IFtdCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIFBSSU5USU5HIENPTkZJR1VSQVRJT04gJSh0aW1lX3N0YXJ0KXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCBjb25maWcgKQorICAgICNvdXRwdXQuYXBwZW5kKCBlbnYgICAgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBGSU5JU0hFRCBQUklOVElORyBDT05GSUdVUkFUSU9OICUodGltZV9lbmQpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoICItLS0+IFRJTkRFUkJPWCBCVUlMRElORyAnJShwYWNrYWdlcylzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBTVEFSVElORyBCVUlMRCBOT1ciICkKKworICAgIG91dHB1dC5hcHBlbmQoICIiICkKKworICAgIHJldHVybiAiXG4iLmpvaW4ob3V0cHV0KSAlIHZhcnMoKQorCitkZWYgdGluZGVyX2RvX3RpbmRlcl9yZXBvcnQoZXZlbnQpOgorICAgICIiIgorICAgIFJlcG9ydCB0byB0aGUgdGluZGVyYm94OgorICAgICAgICBPbiB0aGUgQnVpbGRTdGFydCB3ZSB3aWxsIGluZm9ybSB0aGUgYm94IGRpcmVjdGx5CisgICAgICAgIE9uIHRoZSBvdGhlciBldmVudHMgd2Ugd2lsbCB3cml0ZSB0byB0aGUgVElOREVSX0xPRyBhbmQKKyAgICAgICAgd2hlbiB0aGUgVGFzayBpcyBmaW5pc2hlZCB3ZSB3aWxsIHNlbmQgdGhlIHJlcG9ydC4KKworICAgIFRoZSBhYm92ZSBpcyBub3QgeWV0IGZ1bGx5IGltcGxlbWVudGVkLiBDdXJyZW50bHkgd2Ugc2VuZAorICAgIGluZm9ybWF0aW9uIGltbWVkaWF0ZWx5LiBUaGUgY2FjaGluZy9xdWV1aW5nIG5lZWRzIHRvIGJlCisgICAgaW1wbGVtZW50ZWQuIEFsc28gc2VuZGluZyBtb3JlIG9yIGxlc3MgaW5mb3JtYXRpb24gaXMgbm90CisgICAgaW1wbGVtZW50ZWQgeWV0LgorCisgICAgV2UgaGF2ZSB0d28gdGVtcG9yYXJ5IGZpbGVzIHN0b3JlZCBpbiB0aGUgVE1QIGRpcmVjdG9yeS4gT25lIGZpbGUKKyAgICBjb250YWlucyB0aGUgYXNzaWduZWQgbWFjaGluZSBpZCBmb3IgdGhlIHRpbmRlcmNsaWVudC4gVGhpcyBpZCBnZXRzCisgICAgYXNzaWduZWQgd2hlbiB3ZSBjb25uZWN0IHRoZSBib3ggYW5kIHN0YXJ0IHRoZSBidWlsZCBwcm9jZXNzIHRoZSBzZWNvbmQKKyAgICBmaWxlIGlzIHVzZWQgdG8gd29ya2Fyb3VuZCBhbiBFdmVudEhhbmRsZXIgbGltaXRhdGlvbi4gSWYgQml0QmFrZSBpcyByYW4KKyAgICB3aXRoIHRoZSBjb250aW51ZSBvcHRpb24gd2Ugd2FudCB0aGUgQnVpbGQgdG8gZmFpbCBldmVuIGlmIHdlIGdldCB0aGUKKyAgICBCdWlsZENvbXBsZXRlZCBFdmVudC4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gbG9vayB1cCB0aGUgc3RhdHVzIGFuZAorICAgIHNlbmQgaXQgaW5zdGVhZCBvZiAxMDAvc3VjY2Vzcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgIyB2YXJpYWJsZXMKKyAgICBuYW1lID0gYmIuZXZlbnQuZ2V0TmFtZShldmVudCkKKyAgICBsb2cgID0gIiIKKyAgICBzdGF0dXMgPSAxCisgICAgIyBDaGVjayB3aGF0IHdlIG5lZWQgdG8gZG8gQnVpbGQqIHNob3dzIHdlIHN0YXJ0IG9yIGFyZSBkb25lCisgICAgaWYgbmFtZSA9PSAiQnVpbGRTdGFydGVkIjoKKyAgICAgICAgdGluZGVyX2J1aWxkX3N0YXJ0KGV2ZW50LmRhdGEpCisgICAgICAgIGxvZyA9IHRpbmRlcl90aW5kZXJfc3RhcnQoZXZlbnQuZGF0YSxldmVudCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHRydW5jYXRlIHRoZSB0aW5kZXIgbG9nIGZpbGUKKyAgICAgICAgICAgIGYgPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUSU5ERVJfTE9HJywgVHJ1ZSksICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoIiIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgd3JpdGUgYSBzdGF0dXMgdG8gdGhlIGZpbGUuIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgLWsgb3B0aW9uCisgICAgICAgICAgICAjIG9mIEJpdEJha2UKKyAgICAgICAgICAgIGcgPSBmaWxlKGV2ZW50LmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1zdGF0dXMiLCAndycpCisgICAgICAgICAgICBnLndyaXRlKCIiKQorICAgICAgICAgICAgZy5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBBcHBlbmQgdGhlIFRhc2stTG9nIChjb21waWxlLGNvbmZpZ3VyZS4uLikgdG8gdGhlIGxvZyBmaWxlCisgICAgIyB3ZSB3aWxsIHNlbmQgdG8gdGhlIHNlcnZlcgorICAgIGlmIG5hbWUgPT0gIlRhc2tTdWNjZWVkZWQiIG9yIG5hbWUgPT0gIlRhc2tGYWlsZWQiOgorICAgICAgICBsb2dfZmlsZSA9IGdsb2IuZ2xvYigiJXMvbG9nLiVzLioiICUgKGV2ZW50LmRhdGEuZ2V0VmFyKCdUJywgVHJ1ZSksIGV2ZW50LnRhc2spKQorCisgICAgICAgIGlmIGxlbihsb2dfZmlsZSkgIT0gMDoKKyAgICAgICAgICAgIHRvX2ZpbGUgID0gZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKQorICAgICAgICAgICAgbG9nICAgICArPSAiIi5qb2luKG9wZW4obG9nX2ZpbGVbMF0sICdyJykucmVhZGxpbmVzKCkpCisKKyAgICAjIHNldCB0aGUgcmlnaHQgJ0hFQURFUicvU3VtbWFyeSBmb3IgdGhlIFRpbmRlckJveAorICAgIGlmIG5hbWUgPT0gIlRhc2tTdGFydGVkIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBUYXNrICVzIHN0YXJ0ZWRcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJUYXNrU3VjY2VlZGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBUYXNrICVzIGRvbmUgKFNVQ0NFU1MpXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiVGFza0ZhaWxlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggVGFzayAlcyBmYWlsZWQgKEZBSUxVUkUpXG4iICUgZXZlbnQudGFzaworICAgIGVsaWYgbmFtZSA9PSAiUGtnU3RhcnRlZCI6CisgICAgICAgIGxvZyArPSAiLS0tPiBUSU5ERVJCT1ggUGFja2FnZSAlcyBzdGFydGVkXG4iICUgZXZlbnQuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBlbGlmIG5hbWUgPT0gIlBrZ1N1Y2NlZWRlZCI6CisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggUGFja2FnZSAlcyBkb25lIChTVUNDRVNTKVxuIiAlIGV2ZW50LmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpCisgICAgZWxpZiBuYW1lID09ICJQa2dGYWlsZWQiOgorICAgICAgICBpZiBub3QgZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9BVVRPQlVJTEQnLCBUcnVlKSA9PSAiMCI6CisgICAgICAgICAgICBidWlsZC5leGVjX3Rhc2soJ2RvX2NsZWFuJywgZXZlbnQuZGF0YSkKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBQYWNrYWdlICVzIGZhaWxlZCAoRkFJTFVSRSlcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKKyAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaC53cml0ZSgiMjAwIikKKyAgICBlbGlmIG5hbWUgPT0gIkJ1aWxkQ29tcGxldGVkIjoKKyAgICAgICAgbG9nICs9ICJCdWlsZCBDb21wbGV0ZWRcbiIKKyAgICAgICAgc3RhdHVzID0gMTAwCisgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBhIG9sZCBzdGF0dXMuLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItc3RhdHVzJywgJ3InKQorICAgICAgICAgICAgc3RhdHVzID0gaW50KGgucmVhZCgpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBlbGlmIG5hbWUgPT0gIk11bHRpcGxlUHJvdmlkZXJzIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBNdWx0aXBsZSBQcm92aWRlcnNcbiIKKyAgICAgICAgbG9nICs9ICJtdWx0aXBsZSBwcm92aWRlcnMgYXJlIGF2YWlsYWJsZSAoJXMpO1xuIiAlICIsICIuam9pbihldmVudC5nZXRDYW5kaWRhdGVzKCkpCisgICAgICAgIGxvZyArPSAiY29uc2lkZXIgZGVmaW5pbmcgUFJFRkVSUkVEX1BST1ZJREVSXyVzXG4iICUgZXZlbnQuZ2V0SXRlbSgpCisgICAgICAgIGxvZyArPSAiaXMgcnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIE11bHRpcGxlIFByb3ZpZGVyc1xuIgorICAgIGVsaWYgbmFtZSA9PSAiTm9Qcm92aWRlciI6CisgICAgICAgIGxvZyArPSAiRXJyb3I6IE5vIFByb3ZpZGVyIGZvcjogJXNcbiIgJSBldmVudC5nZXRJdGVtKCkKKyAgICAgICAgbG9nICs9ICJFcnJvcjpXYXMgUnVudGltZTogJWRcbiIgJSBldmVudC5pc1J1bnRpbWUoKQorICAgICAgICBzdGF0dXMgPSAyMDAKKyAgICAgICAgIyByZW1lbWJlciB0aGUgZmFpbHVyZSBmb3IgdGhlIC1rIGNhc2UKKyAgICAgICAgaCA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgaC53cml0ZSgiMjAwIikKKworICAgICMgbm93IHBvc3QgdGhlIGxvZworICAgIGlmIGxlbihsb2cpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgIyBmb3Igbm93IHdlIHdpbGwgdXNlIHRoZSBodHRwIHBvc3QgbWV0aG9kIGFzIGl0IGlzIHRoZSBvbmx5IG9uZQorICAgIGxvZ19wb3N0X21ldGhvZCA9IHRpbmRlcl9zZW5kX2h0dHAKKyAgICBsb2dfcG9zdF9tZXRob2QoZXZlbnQuZGF0YSwgc3RhdHVzLCBsb2cpCisKKworIyB3ZSB3YW50IHRvIGJlIGFuIGV2ZW50IGhhbmRsZXIKK2FkZGhhbmRsZXIgdGluZGVyY2xpZW50X2V2ZW50aGFuZGxlcgorcHl0aG9uIHRpbmRlcmNsaWVudF9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgZS5kYXRhIGlzIE5vbmUgb3IgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiTXNnTm90ZSI6CisgICAgICAgIHJldHVybgorCisgICAgZG9fdGluZGVyX3JlcG9ydCA9IGUuZGF0YS5nZXRWYXIoJ1RJTkRFUl9SRVBPUlQnLCBUcnVlKQorICAgIGlmIGRvX3RpbmRlcl9yZXBvcnQgYW5kIGRvX3RpbmRlcl9yZXBvcnQgPT0gIjEiOgorICAgICAgICB0aW5kZXJfZG9fdGluZGVyX3JlcG9ydChlKQorCisgICAgcmV0dXJuCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNjZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3RvYXN0ZXIuYmJjbGFzcwpAQCAtMCwwICsxLDM1NSBAQAorIworIyBUb2FzdGVyIGhlbHBlciBjbGFzcworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisjCisjIFRoaXMgYmJjbGFzcyBpcyBkZXNpZ25lZCB0byBleHRyYWN0IGRhdGEgdXNlZCBieSBPRS1Db3JlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywKKyMgZm9yIHJlY29yZGluZyBpbiB0aGUgVG9hc3RlciBzeXN0ZW0uCisjIFRoZSBkYXRhIGFjY2VzcyBpcyBzeW5jaHJvbm91cywgcHJlc2VydmluZyB0aGUgYnVpbGQgZGF0YSBpbnRlZ3JpdHkgYWNyb3NzCisjIGRpZmZlcmVudCBidWlsZHMuCisjCisjIFRoZSBkYXRhIGlzIHRyYW5zZmVycmVkIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbSwgdXNpbmcgdGhlIE1ldGFkYXRhRXZlbnQgb2JqZWN0cy4KKyMKKyMgVGhlIG1vZGVsIGlzIHRvIGVuYWJsZSB0aGUgZGF0YWR1bXAgZnVuY3Rpb25zIGFzIHBvc3RmdW5jcywgYW5kIGhhdmUgdGhlIGR1bXAKKyMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlYWwgdGFza2Z1bmMgaGFzIGJlZW4gZXhlY3V0ZWQuIFRoaXMgcHJldmVudHMgdGFzayBzaWduYXR1cmUgY2hhbmdpbmcKKyMgaXMgdG9hc3RlciBpcyBlbmFibGVkIG9yIG5vdC4gQnVpbGQgcGVyZm9ybWFuY2UgaXMgbm90IGFmZmVjdGVkIGlmIFRvYXN0ZXIgaXMgbm90IGVuYWJsZWQuCisjCisjIFRvIGVuYWJsZSwgdXNlIElOSEVSSVQgaW4gbG9jYWwuY29uZjoKKyMKKyMgICAgICAgSU5IRVJJVCArPSAidG9hc3RlciIKKyMKKyMKKyMKKyMKKworIyBGaW5kIGFuZCBkdW1wIGxheWVyIGluZm8gd2hlbiB3ZSBnb3QgdGhlIGxheWVycyBwYXJzZWQKKworCisKK3B5dGhvbiB0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YSgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgZGVmIF9nZXRfZ2l0X2JyYW5jaChsYXllcl9wYXRoKToKKyAgICAgICAgYnJhbmNoID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIGJyYW5jaCA9IGJyYW5jaC5yZXBsYWNlKCdyZWZzL2hlYWRzLycsICcnKS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gYnJhbmNoCisKKyAgICBkZWYgX2dldF9naXRfcmV2aXNpb24obGF5ZXJfcGF0aCk6CisgICAgICAgIHJldmlzaW9uID0gc3VicHJvY2Vzcy5Qb3BlbigiZ2l0IHJldi1wYXJzZSBIRUFEIDI+L2Rldi9udWxsICIsIGN3ZD1sYXllcl9wYXRoLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdLnJzdHJpcCgpCisgICAgICAgIHJldHVybiByZXZpc2lvbgorCisgICAgZGVmIF9nZXRfdXJsX21hcF9uYW1lKGxheWVyX25hbWUpOgorICAgICAgICAiIiIgU29tZSBsYXllcnMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lIG9uIG9wZW5lbWJlZGRlZC5vcmcgc2l0ZSwKKyAgICAgICAgICAgIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2UgaW4gdGhlIFVSTAorICAgICAgICAiIiIKKworICAgICAgICB1cmxfbmFtZSA9IGxheWVyX25hbWUKKyAgICAgICAgdXJsX21hcHBpbmcgPSB7J21ldGEnOiAnb3BlbmVtYmVkZGVkLWNvcmUnfQorCisgICAgICAgIGZvciBrZXkgaW4gdXJsX21hcHBpbmcua2V5cygpOgorICAgICAgICAgICAgaWYga2V5ID09IGxheWVyX25hbWU6CisgICAgICAgICAgICAgICAgdXJsX25hbWUgPSB1cmxfbWFwcGluZ1trZXldCisKKyAgICAgICAgcmV0dXJuIHVybF9uYW1lCisKKyAgICBkZWYgX2dldF9sYXllcl92ZXJzaW9uX2luZm9ybWF0aW9uKGxheWVyX3BhdGgpOgorCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mbyA9IHt9CisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1snYnJhbmNoJ10gPSBfZ2V0X2dpdF9icmFuY2gobGF5ZXJfcGF0aCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydjb21taXQnXSA9IF9nZXRfZ2l0X3JldmlzaW9uKGxheWVyX3BhdGgpCisgICAgICAgIGxheWVyX3ZlcnNpb25faW5mb1sncHJpb3JpdHknXSA9IDAKKworICAgICAgICByZXR1cm4gbGF5ZXJfdmVyc2lvbl9pbmZvCisKKworICAgIGRlZiBfZ2V0X2xheWVyX2RpY3QobGF5ZXJfcGF0aCk6CisKKyAgICAgICAgbGF5ZXJfaW5mbyA9IHt9CisgICAgICAgIGxheWVyX25hbWUgPSBsYXllcl9wYXRoLnNwbGl0KCcvJylbLTFdCisgICAgICAgIGxheWVyX3VybCA9ICdodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9sYXllci97bGF5ZXJ9LycKKyAgICAgICAgbGF5ZXJfdXJsX25hbWUgPSBfZ2V0X3VybF9tYXBfbmFtZShsYXllcl9uYW1lKQorCisgICAgICAgIGxheWVyX2luZm9bJ25hbWUnXSA9IGxheWVyX3VybF9uYW1lCisgICAgICAgIGxheWVyX2luZm9bJ2xvY2FsX3BhdGgnXSA9IGxheWVyX3BhdGgKKyAgICAgICAgbGF5ZXJfaW5mb1snbGF5ZXJfaW5kZXhfdXJsJ10gPSBsYXllcl91cmwuZm9ybWF0KGxheWVyPWxheWVyX3VybF9uYW1lKQorICAgICAgICBsYXllcl9pbmZvWyd2ZXJzaW9uJ10gPSBfZ2V0X2xheWVyX3ZlcnNpb25faW5mb3JtYXRpb24obGF5ZXJfcGF0aCkKKworICAgICAgICByZXR1cm4gbGF5ZXJfaW5mbworCisKKyAgICBiYmxheWVycyA9IGUuZGF0YS5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkKKworICAgIGxsYXllcmluZm8gPSB7fQorCisgICAgZm9yIGxheWVyIGluIHsgbCBmb3IgbCBpbiBiYmxheWVycy5zdHJpcCgpLnNwbGl0KCIgIikgaWYgbGVuKGwpIH06CisgICAgICAgIGxsYXllcmluZm9bbGF5ZXJdID0gX2dldF9sYXllcl9kaWN0KGxheWVyKQorCisKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkxheWVySW5mbyIsIGxsYXllcmluZm8pLCBlLmRhdGEpCit9CisKKyMgRHVtcCBwYWNrYWdlIGZpbGUgaW5mbyBkYXRhCisKK2RlZiBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKGRpcnBhdGgsIGZpbGVwYXRoKToKKyAgICBpbXBvcnQganNvbgorICAgIGltcG9ydCByZQorICAgIHBrZ2RhdGEgPSB7fQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGlycGF0aCwgZmlsZXBhdGgpLCAiciIpIGFzIGZpbjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtuLCBrdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOiAiLCAxKQorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaChyIl5QS0dfKFteQS1aOl0qKSIsIGtuKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFbJ09QS0dOJ10gPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAga24gPSAiXyIuam9pbihbeCBmb3IgeCBpbiBrbi5zcGxpdCgiXyIpIGlmIHguaXN1cHBlcigpXSkKKyAgICAgICAgICAgICAgICBwa2dkYXRhW2tuXSA9IGt2LnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBrbiA9PSAnRklMRVNfSU5GTyc6CisgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGFba25dID0ganNvbi5sb2FkcyhrdikKKworICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAgICAjIGlnbm9yZSBsaW5lcyB3aXRob3V0IHZhbGlkIGtleTogdmFsdWUgcGFpcnMKKyAgICByZXR1cm4gcGtnZGF0YQorCisKK3B5dGhvbiB0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEoKSB7CisgICAgIiIiCisgICAgRHVtcHMgdGhlIGRhdGEgY3JlYXRlZCBieSBlbWl0X3BrZ2RhdGEKKyAgICAiIiIKKyAgICAjIHJlcGxpY2F0ZSB2YXJpYWJsZXMgZnJvbSB0aGUgcGFja2FnZS5iYmNsYXNzCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcignUEtHREVTVFdPUksnLCBUcnVlKQorCisgICAgIyBzY2FuIGFuZCBzZW5kIGRhdGEgZm9yIGVhY2ggcGFja2FnZQorCisgICAgbHBrZ2RhdGEgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKworICAgICAgICBscGtnZGF0YSA9IF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUocGtnZGF0YWRpciArICIvcnVudGltZS8iLCBwa2cpCisKKyAgICAgICAgIyBGaXJlIGFuIGV2ZW50IGNvbnRhaW5pbmcgdGhlIHBrZyBkYXRhCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiU2luZ2xlUGFja2FnZUluZm8iLCBscGtnZGF0YSksIGQpCit9CisKKyMgMi4gRHVtcCBvdXRwdXQgaW1hZ2UgZmlsZXMgaW5mb3JtYXRpb24KKworcHl0aG9uIHRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEoKSB7CisgICAgIiIiCisgICAgSW1hZ2UgZmlsZW5hbWUgZm9yIG91dHB1dCBpbWFnZXMgaXMgbm90IHN0YW5kYXJkaXplZC4KKyAgICBpbWFnZV90eXBlcy5iYmNsYXNzIHdpbGwgc3BlbGwgb3V0IElNQUdFX0NNRF94eHggdmFyaWFibGVzIHRoYXQgYWN0dWFsbHkKKyAgICBoYXZlIGhhcmRjb2RlZCB3YXlzIHRvIGNyZWF0ZSBpbWFnZSBmaWxlIG5hbWVzIGluIHRoZW0uCisgICAgU28gd2UgbG9vayBmb3IgZmlsZXMgc3RhcnRpbmcgd2l0aCB0aGUgc2V0IG5hbWUuCisgICAgIiIiCisKKyAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoJ0RFUExPWV9ESVJfSU1BR0UnLCBUcnVlKTsKKyAgICBpbWFnZV9uYW1lID0gZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKTsKKworICAgIGltYWdlX2luZm9fZGF0YSA9IHt9CisgICAgYXJ0aWZhY3RfaW5mb19kYXRhID0ge30KKworICAgICMgY29sbGVjdCBhbGwgYXJ0aWZhY3RzCisgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhkZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKGltYWdlX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBpbWFnZV9vdXRwdXQgPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICAgICAgICAgIGltYWdlX2luZm9fZGF0YVtpbWFnZV9vdXRwdXRdID0gb3Muc3RhdChpbWFnZV9vdXRwdXQpLnN0X3NpemUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3RhdAorICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9wYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZuKQorICAgICAgICAgICAgICAgICAgICBmaWxlc3RhdCA9IG9zLnN0YXQoYXJ0aWZhY3RfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNsaW5rKGFydGlmYWN0X3BhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJ0aWZhY3RfaW5mb19kYXRhW2FydGlmYWN0X3BhdGhdID0gZmlsZXN0YXQuc3Rfc2l6ZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIk9TRXJyb3JFeGNlcHRpb24iLCBlKSwgZCkKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VGaWxlU2l6ZSIsaW1hZ2VfaW5mb19kYXRhKSwgZCkKKyAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkFydGlmYWN0RmlsZVNpemUiLGFydGlmYWN0X2luZm9fZGF0YSksIGQpCit9CisKKworCisjIGNvbGxlY3QgbGlzdCBvZiBidWlsZHN0YXRzIGZpbGVzIGJhc2VkIG9uIGZpcmVkIGV2ZW50czsgd2hlbiB0aGUgYnVpbGQgY29tcGxldGVzLCBjb2xsZWN0IGFsbCBzdGF0cyBhbmQgZmlyZSBhbiBldmVudCB3aXRoIGNvbGxlY3RlZCBkYXRhCisKK3B5dGhvbiB0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0cygpIHsKKyAgICBpbXBvcnQgYmIuYnVpbGQKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGltcG9ydCBiYi51dGlscworICAgIGltcG9ydCBvcworCisgICAgaWYgbm90IGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpOgorICAgICAgICByZXR1cm4gICMgaWYgd2UgZG9uJ3QgaGF2ZSBidWlsZHN0YXRzLCB3ZSBjYW5ub3QgY29sbGVjdCBzdGF0cworCisgICAgZGVmIF9hcHBlbmRfcmVhZF9saXN0KHYpOgorICAgICAgICBsb2NrID0gYmIudXRpbHMubG9ja2ZpbGUoZS5kYXRhLmV4cGFuZCgiJHtUT1BESVJ9L3RvYXN0ZXIubG9jayIpLCBGYWxzZSwgVHJ1ZSkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IiksICJhIikgYXMgZm91dDoKKyAgICAgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZXhwYW5kKCIke1BGfSIpKQorICAgICAgICAgICAgZm91dC53cml0ZSgiJXM6OiVzOjolczo6JXNcbiIgJSAoZS50YXNrZmlsZSwgZS50YXNrbmFtZSwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGUuZGF0YS5leHBhbmQoIiR7UE59IikpKQorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgIGRlZiBfcmVhZF9zdGF0cyhmaWxlbmFtZSk6CisgICAgICAgIGNwdV91c2FnZSA9IDAKKyAgICAgICAgZGlza19pbyA9IDAKKyAgICAgICAgc3RhcnRpbyA9ICcwJworICAgICAgICBlbmRpbyA9ICcwJworICAgICAgICBzdGFydGVkID0gJzAnCisgICAgICAgIGVuZGVkID0gJzAnCisgICAgICAgIHBuID0gJycKKyAgICAgICAgdGFza25hbWUgPSAnJworICAgICAgICBzdGF0aW5mbyA9IHt9CisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIHRhc2tfYnM6CisgICAgICAgICAgICBmb3IgbGluZSBpbiB0YXNrX2JzLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGssdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiOiAiLCAxKQorICAgICAgICAgICAgICAgIHN0YXRpbmZvW2tdID0gdgorCisgICAgICAgIGlmICJDUFUgdXNhZ2UiIGluIHN0YXRpbmZvOgorICAgICAgICAgICAgY3B1X3VzYWdlID0gc3RyKHN0YXRpbmZvWyJDUFUgdXNhZ2UiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIkVuZFRpbWVJTyIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBlbmRpbyA9IHN0cihzdGF0aW5mb1siRW5kVGltZUlPIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJTdGFydFRpbWVJTyIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBzdGFydGlvID0gc3RyKHN0YXRpbmZvWyJTdGFydFRpbWVJTyJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiU3RhcnRlZCIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBzdGFydGVkID0gc3RyKHN0YXRpbmZvWyJTdGFydGVkIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJFbmRlZCIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBlbmRlZCA9IHN0cihzdGF0aW5mb1siRW5kZWQiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgZGlza19pbyA9IGludChlbmRpbykgLSBpbnQoc3RhcnRpbykKKworICAgICAgICBlbGFwc2VkX3RpbWUgPSBmbG9hdChlbmRlZCkgLSBmbG9hdChzdGFydGVkKQorCisgICAgICAgIGNwdV91c2FnZSA9IGZsb2F0KGNwdV91c2FnZSkKKworICAgICAgICByZXR1cm4geydjcHVfdXNhZ2UnOiBjcHVfdXNhZ2UsICdkaXNrX2lvJzogZGlza19pbywgJ2VsYXBzZWRfdGltZSc6IGVsYXBzZWRfdGltZX0KKworCisgICAgaWYgaXNpbnN0YW5jZShlLCAoYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCwgYmIuYnVpbGQuVGFza0ZhaWxlZCkpOgorICAgICAgICBfYXBwZW5kX3JlYWRfbGlzdChlKQorICAgICAgICBwYXNzCisKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQpIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSk6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSwgInIiKSBhcyBmaW46CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgKHRhc2tmaWxlLCB0YXNrbmFtZSwgZmlsZW5hbWUsIHJlY2lwZW5hbWUpID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6OiIpCisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgodGFza2ZpbGUsIHRhc2tuYW1lLCBfcmVhZF9zdGF0cyhmaWxlbmFtZSksIHJlY2lwZW5hbWUpKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50Lk1ldGFkYXRhRXZlbnQoIkJ1aWxkU3RhdHNMaXN0IiwgZXZlbnRzKSwgZS5kYXRhKQorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCAidG9hc3RlcnN0YXRsaXN0IikpCit9CisKKyMgZHVtcCByZWxldmFudCBidWlsZCBoaXN0b3J5IGRhdGEgYXMgYW4gZXZlbnQgd2hlbiB0aGUgYnVpbGQgaXMgY29tcGxldGVkCisKK3B5dGhvbiB0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wKCkgeworICAgIGltcG9ydCByZQorICAgIEJVSUxESElTVE9SWV9ESVIgPSBlLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vYnVpbGRoaXN0b3J5IikKKyAgICBCVUlMREhJU1RPUllfRElSX0lNQUdFX0JBU0UgPSBlLmRhdGEuZXhwYW5kKCIlcy9pbWFnZXMvJHtNQUNISU5FX0FSQ0h9LyR7VENMSUJDfS8iJSBCVUlMREhJU1RPUllfRElSKQorICAgIHBrZ2RhdGFfZGlyID0gZS5kYXRhLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorCisKKyAgICAjIHNjYW4gdGhlIGJ1aWxkIHRhcmdldHMgZm9yIHRoaXMgYnVpbGQKKyAgICBpbWFnZXMgPSB7fQorICAgIGFsbHBrZ3MgPSB7fQorICAgIGZpbGVzID0ge30KKyAgICBmb3IgdGFyZ2V0IGluIGUuX3BrZ3M6CisgICAgICAgIGluc3RhbGxlZF9pbWdfcGF0aCA9IGUuZGF0YS5leHBhbmQob3MucGF0aC5qb2luKEJVSUxESElTVE9SWV9ESVJfSU1BR0VfQkFTRSwgdGFyZ2V0KSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW5zdGFsbGVkX2ltZ19wYXRoKToKKyAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdID0ge30KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF0gPSB7fQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZGlycyddID0gW10KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXSA9IFtdCisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydmaWxlcyddID0gW10KKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudHh0IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoIjsiKQorICAgICAgICAgICAgICAgICAgICBwc2l6ZSwgcHggPSBsaW5lLnNwbGl0KCJcdCIpCisgICAgICAgICAgICAgICAgICAgIHB1bml0LCBwbmFtZSA9IHB4LnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHNpemUgaXMgImluc3RhbGxlZC1zaXplIiBhcyBpdCBtZWFzdXJlcyBob3cgbXVjaCBzcGFjZSBpdCB0YWtlcyBvbiBkaXNrCisgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lLnN0cmlwKCldID0geydzaXplJzppbnQocHNpemUpKjEwMjQsICdkZXBlbmRzJyA6IFtdfQorCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2RlcGVuZHMuZG90IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgcCA9IHJlLmNvbXBpbGUocicgLT4gJykKKyAgICAgICAgICAgICAgICBkb3QgPSByZS5jb21waWxlKHInLipzdHlsZT1kb3R0ZWQnKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCc7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gcC5zcGxpdChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXNwbGl0KSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcG5hbWUgPSBsaW5lc3BsaXRbMF0ucnN0cmlwKCciJykuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kc25hbWUgPSBsaW5lc3BsaXRbMV0uc3BsaXQoIiAiKVswXS5zdHJpcCgpLnN0cmlwKCI7Iikuc3RyaXAoJyInKS5yc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVwdHlwZSA9ICJkZXBlbmRzIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG90Lm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHR5cGUgPSAicmVjb21tZW5kcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtwbmFtZV0gPSB7J3NpemUnOiAwLCAnZGVwZW5kcycgOiBbXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXBlbmRzbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNbdGFyZ2V0XVtkZXBlbmRzbmFtZV0gPSB7J3NpemUnOiAwLCAnZGVwZW5kcycgOiBbXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lXVsnZGVwZW5kcyddLmFwcGVuZCgoZGVwZW5kc25hbWUsIGRlcHR5cGUpKQorCisgICAgICAgICAgICB3aXRoIG9wZW4oIiVzL2ZpbGVzLWluLWltYWdlLnR4dCIgJSBpbnN0YWxsZWRfaW1nX3BhdGgsICJyIikgYXMgZmluOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAgICAgbGMgPSBbIHggZm9yIHggaW4gbGluZS5zdHJpcCgpLnNwbGl0KCIgIikgaWYgbGVuKHgpID4gMCBdCisgICAgICAgICAgICAgICAgICAgIGlmIGxjWzBdLnN0YXJ0c3dpdGgoImwiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ3N5bXMnXS5hcHBlbmQobGMpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGNbMF0uc3RhcnRzd2l0aCgiZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZGlycyddLmFwcGVuZChsYykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2ZpbGVzJ10uYXBwZW5kKGxjKQorCisgICAgICAgICAgICBmb3IgcG5hbWUgaW4gaW1hZ2VzW3RhcmdldF06CisgICAgICAgICAgICAgICAgaWYgbm90IHBuYW1lIGluIGFsbHBrZ3M6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2RhdGEgPSBfdG9hc3Rlcl9sb2FkX3BrZ2RhdGFmaWxlKCIlcy9ydW50aW1lLXJldmVyc2UvIiAlIHBrZ2RhdGFfZGlyLCBwbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBleHBlY3QgdGhpcyBlLmcuIGZvciBSUkVDT01NRU5EUyB0aGF0IGFyZSB1bnNhdGlzZmllZCBhdCBydW50aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgYWxscGtnc1twbmFtZV0gPSBwa2dkYXRhCisKKworICAgIGRhdGEgPSB7ICdwa2dkYXRhJyA6IGFsbHBrZ3MsICdpbWdkYXRhJyA6IGltYWdlcywgJ2ZpbGVkYXRhJyA6IGZpbGVzIH0KKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiSW1hZ2VQa2dMaXN0IiwgZGF0YSksIGUuZGF0YSkKKworfQorCisjIGR1bXAgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBsaWNlbnNlIG1hbmlmZXN0IHBhdGgKKworcHl0aG9uIHRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAoKSB7CisgICAgZGVwbG95X2RpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSk7CisgICAgaW1hZ2VfbmFtZSA9IGQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSk7CisKKyAgICBkYXRhID0geyAnZGVwbG95X2RpcicgOiBkZXBsb3lfZGlyLCAnaW1hZ2VfbmFtZScgOiBpbWFnZV9uYW1lIH0KKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTGljZW5zZU1hbmlmZXN0UGF0aCIsIGRhdGEpLCBkKQorfQorCisjIHNldCBldmVudCBoYW5kbGVycworYWRkaGFuZGxlciB0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YQordG9hc3Rlcl9sYXllcmluZm9fZHVtcGRhdGFbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5UcmVlRGF0YVByZXBhcmF0aW9uQ29tcGxldGVkIgorCithZGRoYW5kbGVyIHRvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzCit0b2FzdGVyX2NvbGxlY3RfdGFza19zdGF0c1tldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIGJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQgYmIuYnVpbGQuVGFza0ZhaWxlZCIKKworYWRkaGFuZGxlciB0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wCit0b2FzdGVyX2J1aWxkaGlzdG9yeV9kdW1wW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQiCitkb19wYWNrYWdlW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSAiCitkb19wYWNrYWdlW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKKworZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfaW1hZ2VfZHVtcGRhdGEgIgorZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAgIgorZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAidG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSB0b2FzdGVyX2xpY2Vuc2VtYW5pZmVzdF9kdW1wIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGIyYjkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Rvb2xjaGFpbi1zY3JpcHRzLmJiY2xhc3MKQEAgLTAsMCArMSwxNTQgQEAKK2luaGVyaXQgc2l0ZWluZm8ga2VybmVsLWFyY2gKKworIyBXZSB3YW50IHRvIGJlIGFibGUgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiBNVUxUSU1BQ0hfVEFSR0VUX1NZUywgYmVjYXVzZSBpdAorIyBkb2Vzbid0IGFsd2F5cyBtYXRjaCBvdXIgZXhwZWN0YXRpb25zLi4uIGJ1dCB3ZSBkZWZhdWx0IHRvIHRoZSBzdG9jayB2YWx1ZQorUkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZUyA/PSAiJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1tdWNsaWJjIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLW1tdXNsIgorCisjIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnZpcm9ubWVudC1zZXR1cC1zY3JpcHQgZm9yIHVzZSBpbiBhIGRlcGxveWFibGUgU0RLCit0b29sY2hhaW5fY3JlYXRlX3Nka19lbnZfc2NyaXB0ICgpIHsKKwkjIENyZWF0ZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQKKwlzZGtwYXRobmF0aXZlPSR7NzotJHtTREtQQVRITkFUSVZFfX0KKwlwcmVmaXg9JHs2Oi0ke3ByZWZpeF9uYXRpdmVzZGt9fQorCWJpbmRpcj0kezU6LSR7YmluZGlyX25hdGl2ZXNka319CisJbGliZGlyPSR7NDotJHtsaWJkaXJ9fQorCXN5c3Jvb3Q9JHszOi0ke1NES1RBUkdFVFNZU1JPT1R9fQorCW11bHRpbWFjaF90YXJnZXRfc3lzPSR7MjotJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfX0KKwlzY3JpcHQ9JHsxOi0ke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJG11bHRpbWFjaF90YXJnZXRfc3lzfQorCXJtIC1mICRzY3JpcHQKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFNES1RBUkdFVFNZU1JPT1Q9JyIkc3lzcm9vdCIgPj4gJHNjcmlwdAorCUVYVFJBUEFUSD0iIgorCWZvciBpIGluICR7Q0FOQURJQU5FWFRSQU9TfTsgZG8KKwkJRVhUUkFQQVRIPSIkRVhUUkFQQVRIOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJGkiCisJZG9uZQorCWVjaG8gImV4cG9ydCBQQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRQQVRIJyA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IENDQUNIRV9QQVRIPSRzZGtwYXRobmF0aXZlJGJpbmRpcjokc2RrcGF0aG5hdGl2ZSRiaW5kaXIvLi4vJHtIT1NUX1NZU30vYmluOiRzZGtwYXRobmF0aXZlJGJpbmRpci8ke1RBUkdFVF9TWVN9IiRFWFRSQVBBVEgnOiRDQ0FDSEVfUEFUSCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSRTREtUQVJHRVRTWVNST09UJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kU0RLVEFSR0VUU1lTUk9PVCciJGxpYmRpciInL3BrZ2NvbmZpZycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdfU0lURT0ke1NES1BBVEh9L3NpdGUtY29uZmlnLSciJHttdWx0aW1hY2hfdGFyZ2V0X3N5c30iID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgT0VDT1JFX05BVElWRV9TWVNST09UPVwiJHNka3BhdGhuYXRpdmVcIiIgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfVEFSR0VUX1NZU1JPT1Q9IiRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBPRUNPUkVfQUNMT0NBTF9PUFRTPVwiLUkgJHNka3BhdGhuYXRpdmUvdXNyL3NoYXJlL2FjbG9jYWxcIiIgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBQWVRIT05IT01FPSRzZGtwYXRobmF0aXZlJHByZWZpeCIgPj4gJHNjcmlwdAorCisJdG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0Cit9CisKKyMgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudmlyb25tZW50LXNldHVwLXNjcmlwdCBpbiB0aGUgVE1QRElSIHdoaWNoIGVuYWJsZXMKKyMgYSBPRS1jb3JlIElERSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgYnVpbGQgdHJlZQordG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQgKCkgeworCXNjcmlwdD0ke1RNUERJUn0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCXJtIC1mICRzY3JpcHQKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBBVEg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9L3Vzci9iaW46JHtQQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDQ0FDSEVfUEFUSD0ke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL2Jpbjoke0NDQUNIRV9QQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19QQVRIPSR7UEtHX0NPTkZJR19QQVRIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdfU0lURT0iJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQpfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgU0RLVEFSR0VUU1lTUk9PVD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NUQUdJTkdfRElSX05BVElWRX0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9UQVJHRVRfU1lTUk9PVD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfQUNMT0NBTF9PUFRTPSItSSAke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL3NoYXJlL2FjbG9jYWwiJyA+PiAkc2NyaXB0CisKKwl0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQKK30KKwordG9vbGNoYWluX3NoYXJlZF9lbnZfc2NyaXB0ICgpIHsKKwllY2hvICdleHBvcnQgQ0M9IiR7VEFSR0VUX1BSRUZJWH1nY2MgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDWFg9IiR7VEFSR0VUX1BSRUZJWH1nKysgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUFA9IiR7VEFSR0VUX1BSRUZJWH1nY2MgLUUgJHtUQVJHRVRfQ0NfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUz0iJHtUQVJHRVRfUFJFRklYfWFzICR7VEFSR0VUX0FTX0FSQ0h9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBMRD0iJHtUQVJHRVRfUFJFRklYfWxkICR7VEFSR0VUX0xEX0FSQ0h9IC0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgR0RCPSR7VEFSR0VUX1BSRUZJWH1nZGInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgU1RSSVA9JHtUQVJHRVRfUFJFRklYfXN0cmlwJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFJBTkxJQj0ke1RBUkdFVF9QUkVGSVh9cmFubGliJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9CSkNPUFk9JHtUQVJHRVRfUFJFRklYfW9iamNvcHknID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0JKRFVNUD0ke1RBUkdFVF9QUkVGSVh9b2JqZHVtcCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBBUj0ke1RBUkdFVF9QUkVGSVh9YXInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTk09JHtUQVJHRVRfUFJFRklYfW5tJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE00PW00JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFRBUkdFVF9QUkVGSVg9JHtUQVJHRVRfUFJFRklYfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDT05GSUdVUkVfRkxBR1M9Ii0tdGFyZ2V0PSR7VEFSR0VUX1NZU30gLS1ob3N0PSR7VEFSR0VUX1NZU30gLS1idWlsZD0ke1NES19BUkNIfS1saW51eCAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDRkxBR1M9IiR7VEFSR0VUX0NGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENYWEZMQUdTPSIke1RBUkdFVF9DWFhGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IExERkxBR1M9IiR7VEFSR0VUX0xERkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUFBGTEFHUz0iJHtUQVJHRVRfQ1BQRkxBR1N9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBLQ0ZMQUdTPSItLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9ESVNUUk9fVkVSU0lPTj0iJHtESVNUUk9fVkVSU0lPTn0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9TREtfVkVSU0lPTj0iJHtTREtfVkVSU0lPTn0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFSQ0g9JHtBUkNIfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0nID4+ICRzY3JpcHQKKworICAgIGNhdCA+PiAkc2NyaXB0IDw8RU9GCisKKyMgQXBwZW5kIGVudmlyb25tZW50IHN1YnNjcmlwdHMKK2lmIFsgLWQgIlwkT0VDT1JFX1RBUkdFVF9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQiIF07IHRoZW4KKyAgICBmb3IgZW52ZmlsZSBpbiBcJE9FQ09SRV9UQVJHRVRfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kLyouc2g7IGRvCisJICAgIHNvdXJjZSBcJGVudmZpbGUKKyAgICBkb25lCitmaQoraWYgWyAtZCAiXCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZCIgXTsgdGhlbgorICAgIGZvciBlbnZmaWxlIGluIFwkT0VDT1JFX05BVElWRV9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQvKi5zaDsgZG8KKwkgICAgc291cmNlIFwkZW52ZmlsZQorICAgIGRvbmUKK2ZpCitFT0YKK30KKworI3dlIGdldCB0aGUgY2FjaGVkIHNpdGUgY29uZmlnIGluIHRoZSBydW50aW1lCitUT09MQ0hBSU5fQ09ORklHU0lURV9OT0NBQ0hFID0gIiR7QHNpdGVpbmZvX2dldF9maWxlcyhkLCBUcnVlKX0iCitUT09MQ0hBSU5fQ09ORklHU0lURV9TWVNST09UQ0FDSEUgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9LyR7dGFyZ2V0X2RhdGFkaXJ9LyR7VEFSR0VUX1NZU31fY29uZmlnX3NpdGUuZCIKK1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEUgPz89ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYyBuY3Vyc2VzIgorCisjVGhpcyBmdW5jdGlvbiBjcmVhdGUgYSBzaXRlIGNvbmZpZyBmaWxlCit0b29sY2hhaW5fY3JlYXRlX3Nka19zaXRlY29uZmlnICgpIHsKKwlsb2NhbCBzaXRlY29uZmlnPSQxCisKKwlybSAtZiAkc2l0ZWNvbmZpZworCXRvdWNoICRzaXRlY29uZmlnCisKKwlmb3Igc2l0ZWZpbGUgaW4gJHtUT09MQ0hBSU5fQ09ORklHU0lURV9OT0NBQ0hFfSA7IGRvCisJCWNhdCAkc2l0ZWZpbGUgPj4gJHNpdGVjb25maWcKKwlkb25lCisKKwkjZ2V0IGNhY2hlZCBzaXRlIGNvbmZpZworCWZvciBzaXRlZmlsZSBpbiAke1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEV9OyBkbworCQkjIFJlc29sdmUgdmlydHVhbC8qIG5hbWVzIHRvIHRoZSByZWFsIHJlY2lwZSBuYW1lIHVzaW5nIHN5c3Jvb3QtcHJvdmlkZXJzIGluZm8KKwkJY2FzZSAkc2l0ZWZpbGUgaW4gdmlydHVhbC8qKQorCQkJc2l0ZWZpbGU9YGVjaG8gJHNpdGVmaWxlIHwgdHIgLyBfYAorCQkJc2l0ZWZpbGU9YGNhdCAke1NUQUdJTkdfRElSX1RBUkdFVH0vc3lzcm9vdC1wcm92aWRlcnMvJHNpdGVmaWxlYAorCQllc2FjCisKKwkJaWYgWyAtciAke1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRX0vJHtzaXRlZmlsZX1fY29uZmlnIF07IHRoZW4KKwkJCWNhdCAke1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRX0vJHtzaXRlZmlsZX1fY29uZmlnID4+ICRzaXRlY29uZmlnCisJCWZpCisJZG9uZQorfQorIyBUaGUgaW1tZWRpYXRlIGV4cGFuc2lvbiBhYm92ZSBjYW4gcmVzdWx0IGluIHVud2FudGVkIHBhdGggZGVwZW5kZW5jaWVzIGhlcmUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3NpdGVjb25maWdbdmFyZGVwc2V4Y2x1ZGVdID0gIlRPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRSIKKworI1RoaXMgZnVuY3Rpb24gY3JlYXRlIGEgdmVyc2lvbiBpbmZvcm1hdGlvbiBmaWxlCit0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uICgpIHsKKwlsb2NhbCB2ZXJzaW9uZmlsZT0kMQorCXJtIC1mICR2ZXJzaW9uZmlsZQorCXRvdWNoICR2ZXJzaW9uZmlsZQorCWVjaG8gJ0Rpc3RybzogJHtESVNUUk99JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdEaXN0cm8gVmVyc2lvbjogJHtESVNUUk9fVkVSU0lPTn0nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ01ldGFkYXRhIFJldmlzaW9uOiAke01FVEFEQVRBX1JFVklTSU9OfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnVGltZXN0YW1wOiAke0RBVEVUSU1FfScgPj4gJHZlcnNpb25maWxlCit9Cit0b29sY2hhaW5fY3JlYXRlX3Nka192ZXJzaW9uW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKyAgICBkZXBzID0gIiIKKyAgICBmb3IgZGVwIGluIChkLmdldFZhcignVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRScsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBkKQorICAgICAgICAgICAgbmV3ZGVwID0gY2xzZXh0ZW5kLmV4dGVuZF9uYW1lKGRlcCkKKyAgICAgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIG5ld2RlcAorICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29uZmlndXJlJywgJ2RlcGVuZHMnLCBkZXBzKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3R5cGVjaGVjay5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3R5cGVjaGVjay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGE5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MKQEAgLTAsMCArMSwxMiBAQAorIyBDaGVjayB0eXBlcyBvZiBiaXRiYWtlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjCisjIFNlZSBvZS50eXBlcyBmb3IgZGV0YWlscy4KKworcHl0aG9uIGNoZWNrX3R5cGVzKCkgeworICAgIGltcG9ydCBvZS50eXBlcworICAgIGZvciBrZXkgaW4gZS5kYXRhLmtleXMoKToKKyAgICAgICAgaWYgZS5kYXRhLmdldFZhckZsYWcoa2V5LCAidHlwZSIpOgorICAgICAgICAgICAgb2UuZGF0YS50eXBlZF92YWx1ZShrZXksIGUuZGF0YSkKK30KK2FkZGhhbmRsZXIgY2hlY2tfdHlwZXMKK2NoZWNrX3R5cGVzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3Vib290LWNvbmZpZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDYxYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSw0OSBAQAorIyBIYW5kbGUgVS1Cb290IGNvbmZpZyBmb3IgYSBtYWNoaW5lCisjCisjIFRoZSBmb3JtYXQgdG8gc3BlY2lmeSBpdCwgaW4gdGhlIG1hY2hpbmUsIGlzOgorIworIyBVQk9PVF9DT05GSUcgPz89IDxkZWZhdWx0PgorIyBVQk9PVF9DT05GSUdbZm9vXSA9ICJjb25maWcsaW1hZ2VzIgorIworIyBvcgorIworIyBVQk9PVF9NQUNISU5FID0gImNvbmZpZyIKKyMKKyMgQ29weXJpZ2h0IDIwMTMsIDIwMTQgKEMpIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitweXRob24gKCkgeworICAgIHVib290bWFjaGluZSA9IGQuZ2V0VmFyKCJVQk9PVF9NQUNISU5FIiwgVHJ1ZSkKKyAgICB1Ym9vdGNvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygnVUJPT1RfQ09ORklHJykKKyAgICAjIFRoZSAiZG9jIiB2YXJmbGFnIGlzIHNwZWNpYWwsIHdlIGRvbid0IHdhbnQgdG8gc2VlIGl0IGhlcmUKKyAgICB1Ym9vdGNvbmZpZ2ZsYWdzLnBvcCgnZG9jJywgTm9uZSkKKworICAgIGlmIG5vdCB1Ym9vdG1hY2hpbmUgYW5kIG5vdCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICBQTiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIEZJTEUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSkpCisgICAgICAgIGJiLmRlYnVnKDEsICJUbyBidWlsZCAlcywgc2VlICVzIGZvciBpbnN0cnVjdGlvbnMgb24gXAorICAgICAgICAgICAgICAgICBzZXR0aW5nIHVwIHlvdXIgbWFjaGluZSBjb25maWciICUgKFBOLCBGSUxFKSkKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIkVpdGhlciBVQk9PVF9NQUNISU5FIG9yIFVCT09UX0NPTkZJRyBtdXN0IGJlIHNldCBpbiB0aGUgJXMgbWFjaGluZSBjb25maWd1cmF0aW9uLiIgJSBkLmdldFZhcigiTUFDSElORSIsIFRydWUpKQorCisgICAgaWYgdWJvb3RtYWNoaW5lIGFuZCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiWW91IGNhbm5vdCB1c2UgVUJPT1RfTUFDSElORSBhbmQgVUJPT1RfQ09ORklHIGF0IHRoZSBzYW1lIHRpbWUuIikKKworICAgIGlmIG5vdCB1Ym9vdGNvbmZpZ2ZsYWdzOgorICAgICAgICByZXR1cm4KKworICAgIHVib290Y29uZmlnID0gKGQuZ2V0VmFyKCdVQk9PVF9DT05GSUcnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbih1Ym9vdGNvbmZpZykgPiAwOgorICAgICAgICBmb3IgY29uZmlnIGluIHVib290Y29uZmlnOgorICAgICAgICAgICAgZm9yIGYsIHYgaW4gdWJvb3Rjb25maWdmbGFncy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNvbmZpZyA9PSBmOiAKKyAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSB2LnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgaWYgaXRlbXNbMF0gYW5kIGxlbihpdGVtcykgPiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoJ09ubHkgY29uZmlnLGltYWdlcyBjYW4gYmUgc3BlY2lmaWVkIScpCisgICAgICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdVQk9PVF9NQUNISU5FJywgJyAnICsgaXRlbXNbMF0pCisgICAgICAgICAgICAgICAgICAgICMgSU1BR0VfRlNUWVBFUyBhcHBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA+IDEgYW5kIGl0ZW1zWzFdOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFwcGVuZGluZyAnJXMnIHRvIElNQUdFX0ZTVFlQRVMuIiAlIGl0ZW1zWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCAnICcgKyBpdGVtc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBlbGlmIGxlbih1Ym9vdGNvbmZpZykgPT0gMDoKKyAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnWW91IG11c3Qgc2V0IGEgZGVmYXVsdCBpbiBVQk9PVF9DT05GSUcuJykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91bmluYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91bmluYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTM5MWRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDQgQEAKK05BVElWRUxTQlNUUklORyA9ICJ1bml2ZXJzYWwiCisKK1VOSU5BVElWRV9MT0FERVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9L2xpYi9sZC1saW51eC14ODYtNjQuc28uMiIKKworYWRkaGFuZGxlciB1bmluYXRpdmVfZXZlbnRoYW5kbGVyCit1bmluYXRpdmVfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorCitweXRob24gdW5pbmF0aXZlX2V2ZW50aGFuZGxlcigpIHsKKyAgICBsb2FkZXIgPSBlLmRhdGEuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9hZGVyKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgY21kID0gZS5kYXRhLmV4cGFuZCgibWtkaXIgLXAgJHtTVEFHSU5HX0RJUn07IGNkICR7U1RBR0lOR19ESVJ9OyB0YXIgLXhqZiAke0NPUkVCQVNFfS8ke0JVSUxEX0FSQ0h9LW5hdGl2ZXNkay1saWJjLnRhci5iejI7ICR7U1RBR0lOR19ESVJ9L3JlbG9jYXRlX3Nkay5weSAke1NUQUdJTkdfRElSX05BVElWRX0gJHtVTklOQVRJVkVfTE9BREVSfSAke1VOSU5BVElWRV9MT0FERVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wYXRjaGVsZi11bmluYXRpdmUiKQorICAgICAgICAjYmIud2FybigibmF0aXZlc2RrIGxpYiBleHRyYWN0aW9uOiAiICsgY21kKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorfQorCitTU1RBVEVQT1NUVU5QQUNLRlVOQ1NfYXBwZW5kID0gIiB1bmluYXRpdmVfY2hhbmdlaW50ZXJwIgorCitweXRob24gdW5pbmF0aXZlX2NoYW5nZWludGVycCAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBpbXBvcnQgc3RhdAorICAgIGltcG9ydCBvZS5xYQorCisgICAgaWYgbm90IChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkpOgorICAgICAgICByZXR1cm4KKworICAgIHNzdGF0ZWluc3QgPSBkLmdldFZhcignU1NUQVRFX0lOU1RESVInLCBUcnVlKQorICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhzc3RhdGVpbnN0KToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGYpCisgICAgICAgICAgICBpZiBub3QgKChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhVU1IpIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhHUlApIG9yIChzW3N0YXQuU1RfTU9ERV0gJiBzdGF0LlNfSVhPVEgpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxmID0gb2UucWEuRUxGRmlsZShmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZi5vcGVuKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjYmIud2FybigicGF0Y2hlbGYtdW5pbmF0aXZlIC0tc2V0LWludGVycHJldGVyICVzICVzIiAlIChkLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpLCBmKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgicGF0Y2hlbGYtdW5pbmF0aXZlIC0tc2V0LWludGVycHJldGVyICVzICVzIiAlIChkLmdldFZhcigiVU5JTkFUSVZFX0xPQURFUiIsIFRydWUpLCBmKSwgc2hlbGw9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzE2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXBkYXRlLWFsdGVybmF0aXZlcy5iYmNsYXNzCkBAIC0wLDAgKzEsMjY3IEBACisjIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBoZWxwIHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHdoaWNoIGlzIHVzZWZ1bCB3aGVuCisjIG11bHRpcGxlIHNvdXJjZXMgcHJvdmlkZSBzYW1lIGNvbW1hbmQuIFlvdSBjYW4gdXNlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKyMgY29tbWFuZCBkaXJlY3RseSBpbiB5b3VyIHJlY2lwZSwgYnV0IGluIG1vc3QgY2FzZXMgdGhpcyBjbGFzcyBzaW1wbGlmaWVzCisjIHRoYXQgam9iLgorIworIyBUbyB1c2UgdGhpcyBjbGFzcyBhIG51bWJlciBvZiB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlZmluZWQ6CisjCisjIExpc3QgYWxsIG9mIHRoZSBhbHRlcm5hdGl2ZXMgbmVlZGVkIGJ5IGEgcGFja2FnZToKKyMgQUxURVJOQVRJVkVfPHBrZz4gPSAibmFtZTEgbmFtZTIgbmFtZTMgLi4uIgorIworIyAgIGkuZS4gQUxURVJOQVRJVkVfYnVzeWJveCA9ICJzaCBzZWQgdGVzdCBicmFja2V0IgorIworIyBUaGUgcGF0aG5hbWUgb2YgdGhlIGxpbmsKKyMgQUxURVJOQVRJVkVfTElOS19OQU1FW25hbWVdID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb25jZSBpdCdzIGJlZW4gaW5zdGFsbGVkIG9udG8gdGhlIHJ1bnRpbWUuCisjICAgVGhpcyBuYW1lIGlzIGdsb2JhbCB0byBhbGwgc3BsaXQgcGFja2FnZXMgaW4gdGhpcyByZWNpcGUsIGFuZCBzaG91bGQgbWF0Y2gKKyMgICBvdGhlciByZWNpcGVzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KKyMgICBpLmUuIEFMVEVSTkFUSVZFX0xJTktfTkFNRVticmFja2V0XSA9ICIvdXNyL2Jpbi9bIgorIworIyBOT1RFOiBJZiBBTFRFUk5BVElWRV9MSU5LX05BTUUgaXMgbm90IGRlZmluZWQsIGl0IGRlZmF1bHRzIHRvICR7YmluZGlyfS9uYW1lCisjCisjIFRoZSBkZWZhdWx0IGxpbmsgdG8gY3JlYXRlIGZvciBhbGwgdGFyZ2V0cworIyBBTFRFUk5BVElWRV9UQVJHRVQgPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdXNlZnVsIGluIGEgbXVsdGljYWxsIGJpbmFyeSBjYXNlCisjICAgaS5lLiBBTFRFUk5BVElWRV9UQVJHRVQgPSAiL2Jpbi9idXN5Ym94IgorIworIyBBIG5vbi1kZWZhdWx0IGxpbmsgdG8gY3JlYXRlIGZvciBhIHRhcmdldAorIyBBTFRFUk5BVElWRV9UQVJHRVRbbmFtZV0gPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBhcyBpdCdzIGJlZW4gaW5zdGFsbCBieSBkb19pbnN0YWxsCisjICAgaS5lLiBBTFRFUk5BVElWRV9UQVJHRVRbc2hdID0gIi9iaW4vYmFzaCIKKyMKKyMgQSBwYWNrYWdlIHNwZWNpZmljIGxpbmsgZm9yIGEgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1RBUkdFVF88cGtnPltuYW1lXSA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB1c2VmdWwgd2hlbiBhIHJlY2lwZSBwcm92aWRlcyBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMgZm9yIHRoZQorIyAgIHNhbWUgaXRlbS4KKyMKKyMgTk9URTogSWYgQUxURVJOQVRJVkVfVEFSR0VUIGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGluaGVyaXQgdGhlIHZhbHVlCisjIGZyb20gQUxURVJOQVRJVkVfTElOS19OQU1FLgorIworIyBOT1RFOiBJZiB0aGUgQUxURVJOQVRJVkVfTElOS19OQU1FIGFuZCBBTFRFUk5BVElWRV9UQVJHRVQgYXJlIHRoZSBzYW1lLAorIyBBTFRFUk5BVElWRV9UQVJHRVQgd2lsbCBoYXZlICcue0JQTn0nIGFwcGVuZGVkIHRvIGl0LiAgSWYgdGhlIGZpbGUKKyMgcmVmZXJlbmNlZCBoYXMgbm90IGJlZW4gcmVuYW1lZCwgaXQgd2lsbCBhbHNvIGJlIHJlbmFtZWQuICAoVGhpcyBhdm9pZHMKKyMgdGhlIG5lZWQgdG8gcmVuYW1lIGFsdGVybmF0aXZlIGZpbGVzIGluIHRoZSBkb19pbnN0YWxsIHN0ZXAsIGJ1dCBzdGlsbAorIyBzdXBwb3J0cyBpdCBpZiBuZWNlc3NhcnkgZm9yIHNvbWUgcmVhc29uLikKKyMKKyMgVGhlIGRlZmF1bHQgcHJpb3JpdHkgZm9yIGFueSBhbHRlcm5hdGl2ZXMKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAicHJpb3JpdHkiCisjCisjICAgaS5lLiBkZWZhdWx0IGlzIEFMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgorIworIyBUaGUgbm9uLWRlZmF1bHQgcHJpb3JpdHkgZm9yIGEgc3BlY2lmaWMgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1BSSU9SSVRZW25hbWVdID0gInByaW9yaXR5IgorIworIyBUaGUgcGFja2FnZSBwcmlvcml0eSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFlfPHBrZz5bbmFtZV0gPSAicHJpb3JpdHkiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwIgorCisjIFdlIG5lZWQgc3BlY2lhbCBwcm9jZXNzaW5nIGZvciB2YXJkZXBzIGJlY2F1c2UgaXQgY2FuIG5vdCB3b3JrIG9uCisjIG1vZGlmaWVkIGZsYWcgdmFsdWVzLiAgU28gd2UgYWdyZWdhdGUgdGhlIGZsYWdzIGludG8gYSBuZXcgdmFyaWFibGUKKyMgYW5kIGluY2x1ZGUgdGhhdCB2YWlyYWJsZSBpbiB0aGUgc2V0LgorVVBEQUxUVkFSUyAgPSAiQUxURVJOQVRJVkUgQUxURVJOQVRJVkVfTElOS19OQU1FIEFMVEVSTkFUSVZFX1RBUkdFVCBBTFRFUk5BVElWRV9QUklPUklUWSIKKworZGVmIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJkZXBzKGQpOgorICAgIHBrZ3MgPSAoZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICB2YXJzID0gKGQuZ2V0VmFyKCJVUERBTFRWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICMgRmlyc3QgY29tcHV0ZSB0aGVtIGZvciBub25fcGtnIHZlcnNpb25zCisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgZm9yIGZsYWcgaW4gKGQuZ2V0VmFyRmxhZ3Modikgb3Ige30pOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAiZG9jIiBvciBmbGFnID09ICJ2YXJkZXBzIiBvciBmbGFnID09ICJ2YXJkZXBzZXhwIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFMnICUgKHYpLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcodiwgZmxhZywgRmFsc2UpKSkKKworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICBmb3IgZmxhZyBpbiAoZC5nZXRWYXJGbGFncygiJXNfJXMiICUgKHYscCkpIG9yIHt9KToKKyAgICAgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiIG9yIGZsYWcgPT0gInZhcmRlcHMiIG9yIGZsYWcgPT0gInZhcmRlcHNleHAiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCclc19WQVJERVBTXyVzJyAlICh2LHApLCAnICVzOiVzJyAlIChmbGFnLCBkLmdldFZhckZsYWcoJyVzXyVzJyAlICh2LHApLCBmbGFnLCBGYWxzZSkpKQorCitkZWYgdWFfZXh0ZW5kX2RlcGVuZHMoZCk6CisgICAgaWYgbm90ICd2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMnIGluIGQuZ2V0VmFyKCdQUk9WSURFUycsIFRydWUpOgorICAgICAgICBkLmFwcGVuZFZhcignREVQRU5EUycsICcgdmlydHVhbC8ke01MUFJFRklYfXVwZGF0ZS1hbHRlcm5hdGl2ZXMnKQorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgIyBVcGRhdGUgQWx0ZXJuYXRpdmVzIG9ubHkgd29ya3Mgb24gdGFyZ2V0IHBhY2thZ2VzLi4uCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgXAorICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBcCisgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIGNvbXB1dGUgc3BlY2lhbCB2YXJkZXBzCisgICAgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcmRlcHMoZCkKKworICAgICMgZXh0ZW5kIHRoZSBkZXBlbmRzIHRvIGluY2x1ZGUgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzCisgICAgdWFfZXh0ZW5kX2RlcGVuZHMoZCkKK30KKworZGVmIGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJzKGQpOgorICAgIHJldCA9IFtdCisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlVQREFMVFZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl9WQVJERVBTIikKKworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiXyIgKyBwKQorICAgICAgICAgICAgcmV0LmFwcGVuZCh2ICsgIl9WQVJERVBTXyIgKyBwKQorICAgIHJldHVybiAiICIuam9pbihyZXQpCisKKyMgTm93IHRoZSBuZXcgc3R1ZmYsIHdlIHVzZSBhIGN1c3RvbSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgcmlnaHQgdmFsdWVzCitwb3B1bGF0ZV9wYWNrYWdlc1t2YXJkZXBzXSArPSAiJHtVUERBTFRWQVJTfSAke0BnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFycyhkKX0iCisKKyMgV2UgbmVlZCB0byBkbyB0aGUgcmVuYW1lIGFmdGVyIHRoZSBpbWFnZSBjcmVhdGlvbiBzdGVwLCBidXQgYmVmb3JlCisjIHRoZSBzcGxpdCBhbmQgc3RyaXAgc3RlcHMuLiAgcGFja2FnZWNvcHkgc2VlbXMgdG8gYmUgdGhlIGVhcmxpZXN0IHJlYXNvbmFibGUKKyMgcGxhY2UuCitweXRob24gcGVyZm9ybV9wYWNrYWdlY29weV9hcHBlbmQgKCkgeworICAgICMgQ2hlY2sgZm9yIGRlcHJlY2F0ZWQgdXNhZ2UuLi4KKyAgICBwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorICAgIGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9MSU5LUycsIFRydWUpICE9IE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCclczogVXNlIG9mIEFMVEVSTkFUSVZFX0xJTktTL0FMVEVSTkFUSVZFX1BBVEgvQUxURVJOQVRJVkVfTkFNRSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCBwbGVhc2UgY29udmVydCB0byB0aGUgdXBkYXRlZCBzeW50YXgsIHNlZSB1cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MgZm9yIG1vcmUgaW5mby4nICUgcG4pCisKKyAgICAjIERvIGFjdHVhbCB1cGRhdGUgYWx0ZXJuYXRpdmVzIHByb2Nlc3NpbmcKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAjIElmIHRoZSBzcmMgPT0gZGVzdCwgd2Uga25vdyB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgZGVzdCBieSBhcHBlbmRpbmcgJHtCUE59CisgICAgICAgIGxpbmtfcmVuYW1lID0ge30KKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgYWx0X2xpbms6CisgICAgICAgICAgICAgICAgYWx0X2xpbmsgPSAiJXMvJXMiICUgKGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSwgYWx0X25hbWUpCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgYWx0X2xpbmspCisKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgYWx0X2xpbmsKKyAgICAgICAgICAgICMgU29tZXRpbWVzIGFsdF90YXJnZXQgaXMgc3BlY2lmaWVkIGFzIHJlbGF0aXZlIHRvIHRoZSBsaW5rIG5hbWUuCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGFsdF9saW5rKSwgYWx0X3RhcmdldCkKKworICAgICAgICAgICAgIyBJZiB0aGUgbGluayBhbmQgdGFyZ2V0IGFyZSB0aGUgc2FtZSBuYW1lLCB3ZSBuZWVkIHRvIHJlbmFtZSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBzcmMgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXQpCisgICAgICAgICAgICAgICAgYWx0X3RhcmdldF9yZW5hbWUgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorICAgICAgICAgICAgICAgIGRlc3QgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGFsdF90YXJnZXRfcmVuYW1lKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IEFscmVhZHkgcmVuYW1lZDogJXMnICUgKHBuLCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoc3JjKToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRGVsYXkgcmVuYW1lIG9mIGxpbmtzCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSA9IGFsdF90YXJnZXRfcmVuYW1lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogUmVuYW1lICVzIC0+ICVzJyAlIChwbiwgYWx0X3RhcmdldCwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogYWx0ZXJuYXRpdmUgdGFyZ2V0ICglcyBvciAlcykgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nLi4uIiAlIChwbiwgYWx0X3RhcmdldCwgYWx0X3RhcmdldF9yZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIGFsdF90YXJnZXRfcmVuYW1lKQorCisgICAgICAgICMgUHJvY2VzcyBkZWxheWVkIGxpbmsgbmFtZXMKKyAgICAgICAgIyBEbyB0aGVzZSBhZnRlciBvdGhlciByZW5hbWVzIHNvIHdlIGNhbiBjb3JyZWN0IGJyb2tlbiBsaW5rcworICAgICAgICBmb3IgYWx0X3RhcmdldCBpbiBsaW5rX3JlbmFtZToKKyAgICAgICAgICAgIHNyYyA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkKKyAgICAgICAgICAgIGRlc3QgPSAnJXMvJXMnICUgKHBrZ2Rlc3QsIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdKQorICAgICAgICAgICAgbGluayA9IG9zLnJlYWRsaW5rKHNyYykKKyAgICAgICAgICAgIGxpbmtfdGFyZ2V0ID0gb2UucGF0aC5yZWFscGF0aChzcmMsIHBrZ2Rlc3QsIFRydWUpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhsaW5rX3RhcmdldCk6CisgICAgICAgICAgICAgICAgIyBPaywgdGhlIGxpbmtfdGFyZ2V0IGV4aXN0cywgd2UgY2FuIHJlbmFtZQorICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBSZW5hbWUgKGxpbmspICVzIC0+ICVzJyAlIChwbiwgYWx0X3RhcmdldCwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0pKQorICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRlc3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVHJ5IHRvIHJlc29sdmUgdGhlIGJyb2tlbiBsaW5rIHRvIGxpbmsuJHtCUE59CisgICAgICAgICAgICAgICAgbGlua19tYXliZSA9ICclcy4lcycgJSAob3MucmVhZGxpbmsoc3JjKSwgcG4pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3JjKSwgbGlua19tYXliZSkpOgorICAgICAgICAgICAgICAgICAgICAjIE9rLCB0aGUgcmVuYW1lZCBsaW5rIHRhcmdldCBleGlzdHMuLiBjcmVhdGUgYSBuZXcgbGluaywgYW5kIHJlbW92ZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IENyZWF0aW5nIG5ldyBsaW5rICVzIC0+ICVzJyAlIChwbiwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0sIGxpbmtfbWF5YmUpKQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmtfbWF5YmUsIGRlc3QpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybignJXM6IFVuYWJsZSB0byByZXNvbHZlIGRhbmdsaW5nIHN5bWxpbms6ICVzJyAlIChwbiwgYWx0X3RhcmdldCkpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAicG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlYWx0ZXJuYXRpdmVzICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZWFsdGVybmF0aXZlcyAoKSB7CisgICAgcG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKworICAgICMgRG8gYWN0dWFsIHVwZGF0ZSBhbHRlcm5hdGl2ZXMgcHJvY2Vzc2luZworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICMgQ3JlYXRlIHBvc3QgaW5zdGFsbC9yZW1vdmFsIHNjcmlwdHMKKyAgICAgICAgYWx0X3NldHVwX2xpbmtzID0gIiIKKyAgICAgICAgYWx0X3JlbW92ZV9saW5rcyA9ICIiCisgICAgICAgIGZvciBhbHRfbmFtZSBpbiAoZC5nZXRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhbHRfbGluayAgICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGFsdF90YXJnZXQgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBUcnVlKSBvciBhbHRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgYWx0X3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYWx0X2xpbmspLCBhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICBhbHRfcHJpb3JpdHkgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZXyVzJyAlIHBrZywgIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZJywgIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3ByaW9yaXR5ID0gYWx0X3ByaW9yaXR5IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9QUklPUklUWV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9QUklPUklUWScsIFRydWUpCisKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgdHJpZ2dlciwgYXMgaXQgc2hvdWxkIGhhdmUgYmVlbiByZXNvbHZlZCBlYXJsaWVyIQorICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdhbHRfbGluayA9PSBhbHRfdGFyZ2V0OiAlcyA9PSAlcyAtLSBjb3JyZWN0aW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuIScgJSAoYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGFsdF90YXJnZXQgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKCclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJyVzOiBOT1QgYWRkaW5nIGFsdGVybmF0aXZlIHByb3ZpZGUgJXM6ICVzIGRvZXMgbm90IGV4aXN0JyAlIChwbiwgYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGVmYXVsdCB0byBnZW5lcmF0ZSBzaGVsbCBzY3JpcHQuLiBldmVudHVhbGx5IHdlIG1heSB3YW50IHRvIGNoYW5nZSB0aGlzLi4uCisgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICBhbHRfc2V0dXBfbGlua3MgICs9ICdcdHVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsICVzICVzICVzICVzXG4nICUgKGFsdF9saW5rLCBhbHRfbmFtZSwgYWx0X3RhcmdldCwgYWx0X3ByaW9yaXR5KQorICAgICAgICAgICAgYWx0X3JlbW92ZV9saW5rcyArPSAnXHR1cGRhdGUtYWx0ZXJuYXRpdmVzIC0tcmVtb3ZlICAlcyAlc1xuJyAlIChhbHRfbmFtZSwgYWx0X3RhcmdldCkKKworICAgICAgICBpZiBhbHRfc2V0dXBfbGlua3M6CisgICAgICAgICAgICAjIFJERVBFTkRTIHNldHVwCisgICAgICAgICAgICBwcm92aWRlciA9IGQuZ2V0VmFyKCdWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlcycsIFRydWUpCisgICAgICAgICAgICBpZiBwcm92aWRlcjoKKyAgICAgICAgICAgICAgICAjYmIubm90ZSgnYWRkaW5nIHJ1bnRpbWUgcmVxdWlyZW1lbnQgZm9yIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyBwcm92aWRlcikKKworICAgICAgICAgICAgYmIubm90ZSgnYWRkaW5nIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMgdG8gcG9zdGluc3QvcHJlcm0gZm9yICVzJyAlIHBrZykKKyAgICAgICAgICAgIGJiLm5vdGUoJyVzJyAlIGFsdF9zZXR1cF9saW5rcykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpIG9yICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGFsdF9zZXR1cF9saW5rcworICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgICAgICBiYi5ub3RlKCclcycgJSBhbHRfcmVtb3ZlX2xpbmtzKQorICAgICAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkgb3IgJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcHJlcm0gKz0gYWx0X3JlbW92ZV9saW5rcworICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQorfQorCitweXRob24gcGFja2FnZV9kb19maWxlZGVwc19hcHBlbmQgKCkgeworICAgIHBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gYWx0X3RhcmdldCBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIGFsdF9saW5rCisKKyAgICAgICAgICAgIGlmIGFsdF9saW5rID09IGFsdF90YXJnZXQ6CisgICAgICAgICAgICAgICAgYmIud2FybignYWx0X2xpbmsgPT0gYWx0X3RhcmdldDogJXMgPT0gJXMnICUgKGFsdF9saW5rLCBhbHRfdGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBhbHRfdGFyZ2V0ID0gJyVzLiVzJyAlIChhbHRfdGFyZ2V0LCBwbikKKworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cygnJXMvJXMvJXMnICUgKHBrZ2Rlc3QsIHBrZywgYWx0X3RhcmdldCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgQWRkIGZpbGUgcHJvdmlkZQorICAgICAgICAgICAgdHJhbnNfdGFyZ2V0ID0gb2UucGFja2FnZS5maWxlX3RyYW5zbGF0ZShhbHRfdGFyZ2V0KQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0ZJTEVSUFJPVklERVNfJXNfJXMnICUgKHRyYW5zX3RhcmdldCwgcGtnKSwgIiAiICsgYWx0X2xpbmspCisgICAgICAgICAgICBpZiBub3QgdHJhbnNfdGFyZ2V0IGluIChkLmdldFZhcignRklMRVJQUk9WSURFU0ZMSVNUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdGSUxFUlBST1ZJREVTRkxJU1RfJXMnICUgcGtnLCAiICIgKyB0cmFuc190YXJnZXQpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwYTc0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91cGRhdGUtcmMuZC5iYmNsYXNzCkBAIC0wLDAgKzEsMTMzIEBACitVUERBVEVSQ1BOID89ICIke1BOfSIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiB1cGRhdGUtcmMuZC1uYXRpdmUgdXBkYXRlLXJjLmQgaW5pdHNjcmlwdHMiCitVUERBVEVSQ0QgPSAidXBkYXRlLXJjLmQiCitVUERBVEVSQ0RfY2xhc3MtY3Jvc3MgPSAiIgorVVBEQVRFUkNEX2NsYXNzLW5hdGl2ZSA9ICIiCitVUERBVEVSQ0RfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworSU5JVFNDUklQVF9QQVJBTVMgPz0gImRlZmF1bHRzIgorCitJTklUX0RfRElSID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kIgorCit1cGRhdGVyY2RfcHJlaW5zdCgpIHsKK2lmIFsgLXogIiREIiAtYSAtZiAiJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iIF07IHRoZW4KKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wCitmaQoraWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItZiAtciAkRCIKKwllbHNlCisJCU9QVD0iLWYiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSByZW1vdmUKK2ZpCit9CisKK3VwZGF0ZXJjZF9wb3N0aW5zdCgpIHsKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1zIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gJHtJTklUU0NSSVBUX1BBUkFNU30KK2ZpCit9CisKK3VwZGF0ZXJjZF9wcmVybSgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJJHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0gc3RvcAorZmkKK30KKwordXBkYXRlcmNkX3Bvc3RybSgpIHsKK2lmIHR5cGUgdXBkYXRlLXJjLmQgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVD0iLWYgLXIgJEQiCisJZWxzZQorCQlPUFQ9Ii1mIgorCWZpCisJdXBkYXRlLXJjLmQgJE9QVCAke0lOSVRTQ1JJUFRfTkFNRX0gcmVtb3ZlCitmaQorfQorCisKK2RlZiB1cGRhdGVfcmNfYWZ0ZXJfcGFyc2UoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFDS0FHRVMnLCBGYWxzZSkgPT0gTm9uZToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfTkFNRScsIEZhbHNlKSA9PSBOb25lOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXBkYXRlLXJjLmQgYnV0IGRvZXNuJ3Qgc2V0IElOSVRTQ1JJUFRfTkFNRSIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0lOSVRTQ1JJUFRfUEFSQU1TJywgRmFsc2UpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1cGRhdGUtcmMuZCBidXQgZG9lc24ndCBzZXQgSU5JVFNDUklQVF9QQVJBTVMiICUgZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICB1cGRhdGVfcmNfYWZ0ZXJfcGFyc2UoZCkKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgIgorUEFDS0FHRVNQTElURlVOQ1NfcmVtb3ZlX2NsYXNzLW5hdGl2ZXNkayA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2QgIgorCitwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVyY2RbdmFyZGVwc10gKz0gInVwZGF0ZXJjZF9wcmVybSB1cGRhdGVyY2RfcG9zdHJtIHVwZGF0ZXJjZF9wcmVpbnN0IHVwZGF0ZXJjZF9wb3N0aW5zdCIKK3BvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZFt2YXJkZXBzZXhjbHVkZV0gKz0gIk9WRVJSSURFUyIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAoKSB7CisgICAgZGVmIHVwZGF0ZV9yY2RfYXV0b19kZXBlbmQocGtnKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHBhdGggPSBkLmV4cGFuZCgiJHtEfSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1xIC13ICcvZXRjL2luaXQuZC9mdW5jdGlvbnMnICVzIiAlIHBhdGgKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnICVzaW5pdHNjcmlwdHMtZnVuY3Rpb25zJyAlIChtbHByZWZpeCkpCisKKyAgICBkZWYgdXBkYXRlX3JjZF9wYWNrYWdlKHBrZyk6CisgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgdXBkYXRlLXJjLmQgY2FsbHMgdG8gcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0gZm9yICVzJyAlIHBrZykKKworICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgVHJ1ZSkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgIiVzOiVzIiAlIChwa2csIG92ZXJyaWRlcykpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIHVwZGF0ZV9yY2RfYXV0b19kZXBlbmQocGtnKQorCisgICAgICAgIHByZWluc3QgPSBkLmdldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlaW5zdDoKKyAgICAgICAgICAgIHByZWluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZWluc3QgKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBwcmVpbnN0KQorCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcHJlcm0gPSBkLmdldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgcHJlcm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHByZXJtICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wcmVybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKworICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3Bvc3RybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUkVDT01NRU5EU18nICsgcGtnLCAiICR7TUxQUkVGSVh9JHtVUERBVEVSQ0R9IikKKworICAgICMgQ2hlY2sgdGhhdCB0aGlzIGNsYXNzIGlzbid0IGJlaW5nIGluaGliaXRlZCAoZ2VuZXJhbGx5LCBieQorICAgICMgc3lzdGVtZC5iYmNsYXNzKSBiZWZvcmUgZG9pbmcgYW55IHdvcmsuCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKSBvciBcCisgICAgICAgbm90IGQuZ2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgVHJ1ZSk6CisgICAgICAgIHBrZ3MgPSBkLmdldFZhcignSU5JVFNDUklQVF9QQUNLQUdFUycsIFRydWUpCisgICAgICAgIGlmIHBrZ3MgPT0gTm9uZToKKyAgICAgICAgICAgIHBrZ3MgPSBkLmdldFZhcignVVBEQVRFUkNQTicsIFRydWUpCisgICAgICAgICAgICBwYWNrYWdlcyA9IChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IHBrZ3MgaW4gcGFja2FnZXMgYW5kIHBhY2thZ2VzICE9IFtdOgorICAgICAgICAgICAgICAgIHBrZ3MgPSBwYWNrYWdlc1swXQorICAgICAgICBmb3IgcGtnIGluIHBrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHVwZGF0ZV9yY2RfcGFja2FnZShwa2cpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMWE3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZC1zdGF0aWNpZHMuYmJjbGFzcwpAQCAtMCwwICsxLDI3NiBAQAorIyBJbiBvcmRlciB0byBzdXBwb3J0IGEgZGV0ZXJtaW5pc3RpYyBzZXQgb2YgJ2R5bmFtaWMnIHVzZXJzL2dyb3VwcywKKyMgd2UgbmVlZCBhIGZ1bmN0aW9uIHRvIHJlZm9ybWF0IHRoZSBwYXJhbXMgYmFzZWQgb24gYSBzdGF0aWMgZmlsZQorZGVmIHVwZGF0ZV91c2VyYWRkX3N0YXRpY19jb25maWcoZCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgaW1wb3J0IHJlCisKKyAgICBjbGFzcyBteUFyZ3VtZW50UGFyc2VyKCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciApOgorICAgICAgICBkZWYgX3ByaW50X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZmlsZT1Ob25lKToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIC0gJXM6ICVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBtZXNzYWdlKSkKKworICAgICAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4uLgorICAgICAgICBkZWYgZXhpdChzZWxmLCBzdGF0dXM9MCwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlIG9yICgiJXMgLSAlczogdXNlcmFkZC5iYmNsYXNzOiBBcmd1bWVudCBwYXJzaW5nIGV4aXRlZCIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZykpCisgICAgICAgICAgICBlcnJvcihtZXNzYWdlKQorCisgICAgICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQobWVzc2FnZSkKKworICAgICMgV2UgcGFyc2UgYW5kIHJld3JpdGUgdGhlIHVzZXJhZGQgY29tcG9uZW50cworICAgIGRlZiByZXdyaXRlX3VzZXJhZGQocGFyYW1zKToKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGNvbWVzIGZyb20gLS1oZWxwIG9uIHVzZXJhZGQgZnJvbSBzaGFkb3cKKyAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSd1c2VyYWRkJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWIiLCAiLS1iYXNlLWRpciIsIG1ldGF2YXI9IkJBU0VfRElSIiwgaGVscD0iYmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYyIsICItLWNvbW1lbnQiLCBtZXRhdmFyPSJDT01NRU5UIiwgaGVscD0iR0VDT1MgZmllbGQgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWQiLCAiLS1ob21lLWRpciIsIG1ldGF2YXI9IkhPTUVfRElSIiwgaGVscD0iaG9tZSBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUQiLCAiLS1kZWZhdWx0cyIsIGhlbHA9InByaW50IG9yIGNoYW5nZSBkZWZhdWx0IHVzZXJhZGQgY29uZmlndXJhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1lIiwgIi0tZXhwaXJlZGF0ZSIsIG1ldGF2YXI9IkVYUElSRV9EQVRFIiwgaGVscD0iZXhwaXJhdGlvbiBkYXRlIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0taW5hY3RpdmUiLCBtZXRhdmFyPSJJTkFDVElWRSIsIGhlbHA9InBhc3N3b3JkIGluYWN0aXZpdHkgcGVyaW9kIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR1JPVVAiLCBoZWxwPSJuYW1lIG9yIElEIG9mIHRoZSBwcmltYXJ5IGdyb3VwIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1HIiwgIi0tZ3JvdXBzIiwgbWV0YXZhcj0iR1JPVVBTIiwgaGVscD0ibGlzdCBvZiBzdXBwbGVtZW50YXJ5IGdyb3VwcyBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItayIsICItLXNrZWwiLCBtZXRhdmFyPSJTS0VMX0RJUiIsIGhlbHA9InVzZSB0aGlzIGFsdGVybmF0aXZlIHNrZWxldG9uIGRpcmVjdG9yeSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWwiLCAiLS1uby1sb2ctaW5pdCIsIGhlbHA9ImRvIG5vdCBhZGQgdGhlIHVzZXIgdG8gdGhlIGxhc3Rsb2cgYW5kIGZhaWxsb2cgZGF0YWJhc2VzIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW0iLCAiLS1jcmVhdGUtaG9tZSIsIGhlbHA9ImNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLU0iLCAiLS1uby1jcmVhdGUtaG9tZSIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1OIiwgIi0tbm8tdXNlci1ncm91cCIsIGhlbHA9ImRvIG5vdCBjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbyIsICItLW5vbi11bmlxdWUiLCBoZWxwPSJhbGxvdyB0byBjcmVhdGUgdXNlcnMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUgVUlEKSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9ImVuY3J5cHRlZCBwYXNzd29yZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItUiIsICItLXJvb3QiLCBtZXRhdmFyPSJDSFJPT1RfRElSIiwgaGVscD0iZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXIiLCAiLS1zeXN0ZW0iLCBoZWxwPSJjcmVhdGUgYSBzeXN0ZW0gYWNjb3VudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1zIiwgIi0tc2hlbGwiLCBtZXRhdmFyPSJTSEVMTCIsIGhlbHA9ImxvZ2luIHNoZWxsIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi11IiwgIi0tdWlkIiwgbWV0YXZhcj0iVUlEIiwgaGVscD0idXNlciBJRCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItVSIsICItLXVzZXItZ3JvdXAiLCBoZWxwPSJjcmVhdGUgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJMT0dJTiIsIGhlbHA9IkxvZ2luIG5hbWUgb2YgdGhlIG5ldyB1c2VyIikKKworICAgICAgICAjIFJldHVybiBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBmaWxlcy9wYXNzd2Qgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfVUlEX1RBQkxFUworICAgICAgICAjIHBhdGhzIGFyZSByZXN1bHZlZCB2aWEgQkJQQVRICisgICAgICAgIGRlZiBnZXRfcGFzc3dkX2xpc3QoZCk6CisgICAgICAgICAgICBzdHIgPSAiIgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgICAgICBwYXNzd2RfdGFibGVzID0gZC5nZXRWYXIoJ1VTRVJBRERfVUlEX1RBQkxFUycsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcGFzc3dkX3RhYmxlczoKKyAgICAgICAgICAgICAgICBwYXNzd2RfdGFibGVzID0gJ2ZpbGVzL3Bhc3N3ZCcKKyAgICAgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gcGFzc3dkX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQorICAgICAgICAgICAgcmV0dXJuIHN0cgorCisgICAgICAgIG5ld3BhcmFtcyA9IFtdCisgICAgICAgIGZvciBwYXJhbSBpbiByZS5zcGxpdCgnJydbIFx0XSo7WyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zKToKKyAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdWFhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MocmUuc3BsaXQoJycnWyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW0pKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzOiBVbmFibGUgdG8gcGFyc2UgYXJndW1lbnRzIGZvciBVU0VSQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCisKKyAgICAgICAgICAgICMgZmlsZXMvcGFzc3dkIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX1VJRF9UQUJMRVMKKyAgICAgICAgICAgICMgVXNlIHRoZSBzdGFuZGFyZCBwYXNzd2QgbGF5b3V0OgorICAgICAgICAgICAgIyAgdXNlcm5hbWU6cGFzc3dvcmQ6dXNlcl9pZDpncm91cF9pZDpjb21tZW50OmhvbWVfZGlyZWN0b3J5OmxvZ2luX3NoZWxsCisgICAgICAgICAgICAjICh3ZSB3YW50IHRvIHByb2Nlc3MgaW4gcmV2ZXJzZSBvcmRlciwgYXMgJ2xhc3QgZm91bmQnIGluIHRoZSBsaXN0IHdpbnMpCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIGEgZmllbGQgaXMgbGVmdCBibGFuaywgdGhlIG9yaWdpbmFsIHZhbHVlIHdpbGwgYmUgdXNlZC4gIFRoZSAndXNlcm5hbWUnCisgICAgICAgICAgICAjIGZpZWxkIGlzIHJlcXVpcmVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOb3RlOiB3ZSBpZ25vcmUgdGhlIHBhc3N3b3JkIGZpZWxkLCBhcyBpbmNsdWRpbmcgZXZlbiB0aGUgaGFzaGVkIHBhc3N3b3JkCisgICAgICAgICAgICAjIGluIHRoZSB1c2VyYWRkIGNvbW1hbmQgbWF5IGludHJvZHVjZSBhIHNlY3VyaXR5IGhvbGUuICBJdCdzIGFzc3VtZWQgdGhhdAorICAgICAgICAgICAgIyBhbGwgbmV3IHVzZXJzIGdldCB0aGUgZGVmYXVsdCAoJyonIHdoaWNoIHByZXZlbnRzIGxvZ2luKSB1bnRpbCB0aGUgdXNlciBpcworICAgICAgICAgICAgIyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBieSB0aGUgc3lzdGVtIGFkbWluLgorICAgICAgICAgICAgZm9yIGNvbmYgaW4gZ2V0X3Bhc3N3ZF9saXN0KGQpLnNwbGl0KClbOjotMV06CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYsICJyIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRbMF0gPT0gdWFhcmdzLkxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVhYXJncy51aWQgYW5kIGZpZWxkWzJdIGFuZCAodWFhcmdzLnVpZCAhPSBmaWVsZFsyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyB1c2VybmFtZSAlcydzIHVpZCBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgdWFhcmdzLkxPR0lOLCB1YWFyZ3MudWlkLCBmaWVsZFsyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVpZCA9IFtmaWVsZFsyXSwgdWFhcmdzLnVpZF1bbm90IGZpZWxkWzJdXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIHBvc3NpYmxlIGdyb3VwbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVW5sZXNzIHRoZSBncm91cCBuYW1lIChvciBnaWQpIGlzIHNwZWNpZmllZCwgd2UgYXNzdW1lIHRoYXQgdGhlIExPR0lOIGlzIHRoZSBncm91cG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCeSBkZWZhdWx0IHRoZSBzeXN0ZW0gaGFzIGNyZWF0aW9uIG9mIHRoZSBtYXRjaGluZyBncm91cHMgZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU28gaWYgdGhlIGltcGxpY2l0IHVzZXJuYW1lLWdyb3VwIGNyZWF0aW9uIGlzIG9uLCB0aGVuIHRoZSBpbXBsaWNpdCBncm91cG5hbWUgKExPR0lOKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdXNlZCwgYW5kIHdlIGRpc2FibGUgdGhlIHVzZXJfZ3JvdXAgb3B0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBuYW1lID0gW3VhYXJncy5naWQsIHVhYXJncy5MT0dJTl1bbm90IHVhYXJncy5naWQgb3IgdWFhcmdzLnVzZXJfZ3JvdXBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwaWQgPSBbdWFhcmdzLmdpZCwgdWFhcmdzLmdyb3VwbmFtZV1bbm90IHVhYXJncy5naWRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdyb3VwaWQgPSBbZmllbGRbM10sIHVhYXJncy5ncm91cGlkXVtub3QgZmllbGRbM11dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdWFhcmdzLmdpZCBvciB1YWFyZ3MuZ2lkICE9IHVhYXJncy5ncm91cGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWFhcmdzLmdyb3VwaWQgYW5kIHVhYXJncy5ncm91cGlkLmlzZGlnaXQoKSkgYW5kICh1YWFyZ3MuZ3JvdXBuYW1lIGFuZCB1YWFyZ3MuZ3JvdXBuYW1lLmlzZGlnaXQoKSkgYW5kICh1YWFyZ3MuZ3JvdXBpZCAhPSB1YWFyZ3MuZ3JvdXBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2Ugd2FudCB0byBhZGQgYSBncm91cCwgYnV0IHdlIGRvbid0IGtub3cgaXQncyBuYW1lLi4uIHNvIHdlIGNhbid0IGFkZCB0aGUgZ3JvdXAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSB0byBhc3N1bWUgdGhlIGdyb3VwIGhhcyBwcmV2aW91c2x5IGJlZW4gYWRkZWQgb3Igd2UnbGwgZmFpbCBvbiB0aGUgYWRkdXNlci4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3RlOiBzcGVjaWZ5aW5nIHRoZSBhY3R1YWwgZ2lkIGlzIHZlcnkgcmFyZSBpbiBPRSwgdXN1YWxseSB0aGUgZ3JvdXAgbmFtZSBpcyBzcGVjaWZpZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ2lkIGZvciBsb2dpbiAlcyBmcm9tICglcykgdG8gKCVzKSwgdmVyaWZ5IGNvbmZpZ3VyYXRpb24gZmlsZXMhIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgdWFhcmdzLkxPR0lOLCB1YWFyZ3MuZ3JvdXBuYW1lLCB1YWFyZ3MuZ2lkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAodWFhcmdzLmdyb3VwaWQgYW5kIG5vdCB1YWFyZ3MuZ3JvdXBpZC5pc2RpZ2l0KCkpIGFuZCB1YWFyZ3MuZ3JvdXBpZCA9PSB1YWFyZ3MuZ3JvdXBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBoYXZlIGEgbnVtYmVyLCBzbyB3ZSBoYXZlIHRvIGFkZCBhIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJBZGRpbmcgZ3JvdXAgJXMhIiAlICh1YWFyZ3MuZ3JvdXBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5naWQgPSB1YWFyZ3MuZ3JvdXBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVzZXJfZ3JvdXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBhZGQgPSBkLmdldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSAiJXMgJXMiICUgKFsnJywgJyAtLXN5c3RlbSddW3VhYXJncy5zeXN0ZW1dLCB1YWFyZ3MuZ3JvdXBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBhZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgIiVzIDsgJXMiICUgKGdyb3VwYWRkLCBuZXdncm91cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIG5ld2dyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHVhYXJncy5ncm91cG5hbWUgYW5kICh1YWFyZ3MuZ3JvdXBpZCBhbmQgdWFhcmdzLmdyb3VwaWQuaXNkaWdpdCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGdyb3VwIG5hbWUgYW5kIGEgZ3JvdXAgbnVtYmVyIHRvIGFzc2lnbiBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFkZGluZyBncm91cCAlcyAgZ2lkICglcykhIiAlICh1YWFyZ3MuZ3JvdXBuYW1lLCB1YWFyZ3MuZ3JvdXBpZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ2lkID0gdWFhcmdzLmdyb3VwaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy51c2VyX2dyb3VwID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwYWRkID0gZC5nZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gIi1nICVzICVzIiAlICh1YWFyZ3MuZ2lkLCB1YWFyZ3MuZ3JvdXBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBhZGQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgIiVzIDsgJXMiICUgKGdyb3VwYWRkLCBuZXdncm91cCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIG5ld2dyb3VwKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmNvbW1lbnQgPSBbIiclcyciICUgZmllbGRbNF0sIHVhYXJncy5jb21tZW50XVtub3QgZmllbGRbNF1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmhvbWVfZGlyID0gW2ZpZWxkWzVdLCB1YWFyZ3MuaG9tZV9kaXJdW25vdCBmaWVsZFs1XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3Muc2hlbGwgPSBbZmllbGRbNl0sIHVhYXJncy5zaGVsbF1bbm90IGZpZWxkWzZdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgU2hvdWxkIGJlIGFuIGVycm9yIGlmIGEgc3BlY2lmaWMgb3B0aW9uIGlzIHNldC4uLgorICAgICAgICAgICAgaWYgZC5nZXRWYXIoJ1VTRVJBRERfRVJST1JfRFlOQU1JQycsIFRydWUpID09ICcxJyBhbmQgbm90ICgodWFhcmdzLnVpZCBhbmQgdWFhcmdzLnVpZC5pc2RpZ2l0KCkpIGFuZCB1YWFyZ3MuZ2lkKToKKyAgICAgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzIHVzZXJuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgdWlkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgIHBrZywgdWFhcmdzLkxPR0lOKSkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtICVzOiBVc2VybmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIHVpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIHBrZywgdWFhcmdzLkxPR0lOKSkKKworICAgICAgICAgICAgIyBSZWNvbnN0cnVjdCB0aGUgYXJncy4uLgorICAgICAgICAgICAgbmV3cGFyYW0gID0gWycnLCAnIC0tZGVmYXVsdHMnXVt1YWFyZ3MuZGVmYXVsdHNdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1iYXNlLWRpciAlcycgJSB1YWFyZ3MuYmFzZV9kaXJdW3VhYXJncy5iYXNlX2RpciAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tY29tbWVudCAlcycgJSB1YWFyZ3MuY29tbWVudF1bdWFhcmdzLmNvbW1lbnQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWhvbWUtZGlyICVzJyAlIHVhYXJncy5ob21lX2Rpcl1bdWFhcmdzLmhvbWVfZGlyICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1leHBpcmVkYXRhICVzJyAlIHVhYXJncy5leHBpcmVkYXRlXVt1YWFyZ3MuZXhwaXJlZGF0ZSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0taW5hY3RpdmUgJXMnICUgdWFhcmdzLmluYWN0aXZlXVt1YWFyZ3MuaW5hY3RpdmUgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdpZCAlcycgJSB1YWFyZ3MuZ2lkXVt1YWFyZ3MuZ2lkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ncm91cHMgJXMnICUgdWFhcmdzLmdyb3Vwc11bdWFhcmdzLmdyb3VwcyAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc2tlbCAlcycgJSB1YWFyZ3Muc2tlbF1bdWFhcmdzLnNrZWwgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWtleSAlcycgJSB1YWFyZ3Mua2V5XVt1YWFyZ3Mua2V5ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby1sb2ctaW5pdCddW3VhYXJncy5ub19sb2dfaW5pdF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWNyZWF0ZS1ob21lJ11bdWFhcmdzLmNyZWF0ZV9ob21lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm8tY3JlYXRlLWhvbWUnXVt1YWFyZ3Mubm9fY3JlYXRlX2hvbWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby11c2VyLWdyb3VwJ11bdWFhcmdzLm5vX3VzZXJfZ3JvdXBdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ub24tdW5pcXVlJ11bdWFhcmdzLm5vbl91bmlxdWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1wYXNzd29yZCAlcycgJSB1YWFyZ3MucGFzc3dvcmRdW3VhYXJncy5wYXNzd29yZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcm9vdCAlcycgJSB1YWFyZ3Mucm9vdF1bdWFhcmdzLnJvb3QgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXN5c3RlbSddW3VhYXJncy5zeXN0ZW1dCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zaGVsbCAlcycgJSB1YWFyZ3Muc2hlbGxdW3VhYXJncy5zaGVsbCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tdWlkICVzJyAlIHVhYXJncy51aWRdW3VhYXJncy51aWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXVzZXItZ3JvdXAnXVt1YWFyZ3MudXNlcl9ncm91cF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9ICcgJXMnICUgdWFhcmdzLkxPR0lOCisKKyAgICAgICAgICAgIG5ld3BhcmFtcy5hcHBlbmQobmV3cGFyYW0pCisKKyAgICAgICAgcmV0dXJuICIgOyIuam9pbihuZXdwYXJhbXMpLnN0cmlwKCkKKworICAgICMgV2UgcGFyc2UgYW5kIHJld3JpdGUgdGhlIGdyb3VwYWRkIGNvbXBvbmVudHMKKyAgICBkZWYgcmV3cml0ZV9ncm91cGFkZChwYXJhbXMpOgorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gZ3JvdXBhZGQgZnJvbSBzaGFkb3cKKyAgICAgICAgcGFyc2VyID0gbXlBcmd1bWVudFBhcnNlcihwcm9nPSdncm91cGFkZCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBoZWxwPSJleGl0IHN1Y2Nlc3NmdWxseSBpZiB0aGUgZ3JvdXAgYWxyZWFkeSBleGlzdHMsIGFuZCBjYW5jZWwgLWcgaWYgdGhlIEdJRCBpcyBhbHJlYWR5IHVzZWQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZyIsICItLWdpZCIsIG1ldGF2YXI9IkdJRCIsIGhlbHA9InVzZSBHSUQgZm9yIHRoZSBuZXcgZ3JvdXAiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItSyIsICItLWtleSIsIG1ldGF2YXI9IktFWT1WQUxVRSIsIGhlbHA9Im92ZXJyaWRlIC9ldGMvbG9naW4uZGVmcyBkZWZhdWx0cyIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIEdJRCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1wIiwgIi0tcGFzc3dvcmQiLCBtZXRhdmFyPSJQQVNTV09SRCIsIGhlbHA9InVzZSB0aGlzIGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1SIiwgIi0tcm9vdCIsIG1ldGF2YXI9IkNIUk9PVF9ESVIiLCBoZWxwPSJkaXJlY3RvcnkgdG8gY2hyb290IGludG8iKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItciIsICItLXN5c3RlbSIsIGhlbHA9ImNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiR1JPVVAiLCBoZWxwPSJHcm91cCBuYW1lIG9mIHRoZSBuZXcgZ3JvdXAiKQorCisgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICAgICAjIGZpbGVzL2dyb3VwIG9yIHRoZSBjb250ZW50cyBvZiBVU0VSQUREX0dJRF9UQUJMRVMKKyAgICAgICAgIyBwYXRocyBhcmUgcmVzdWx2ZWQgdmlhIEJCUEFUSAorICAgICAgICBkZWYgZ2V0X2dyb3VwX2xpc3QoZCk6CisgICAgICAgICAgICBzdHIgPSAiIgorICAgICAgICAgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgICAgICAgICBncm91cF90YWJsZXMgPSBkLmdldFZhcignVVNFUkFERF9HSURfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBncm91cF90YWJsZXM6CisgICAgICAgICAgICAgICAgZ3JvdXBfdGFibGVzID0gJ2ZpbGVzL2dyb3VwJworICAgICAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBncm91cF90YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKKyAgICAgICAgICAgIHJldHVybiBzdHIKKworICAgICAgICBuZXdwYXJhbXMgPSBbXQorICAgICAgICBmb3IgcGFyYW0gaW4gcmUuc3BsaXQoJycnWyBcdF0qO1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtcyk6CisgICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgSWYgd2UncmUgcHJvY2Vzc2luZyBtdWx0aXBsZSBsaW5lcywgd2UgY291bGQgaGF2ZSBsZWZ0IG92ZXIgdmFsdWVzIGhlcmUuLi4KKyAgICAgICAgICAgICAgICBnYWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyZS5zcGxpdCgnJydbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbSkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIEdST1VQQUREX1BBUkFNXyVzOiAnJXMnIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBwYXJhbSkpCisKKyAgICAgICAgICAgICMgTmVlZCB0byBpdGVyYXRlIG92ZXIgbGF5ZXJzIGFuZCBvcGVuIHRoZSByaWdodCBmaWxlKHMpCisgICAgICAgICAgICAjIFVzZSB0aGUgc3RhbmRhcmQgZ3JvdXAgbGF5b3V0OgorICAgICAgICAgICAgIyAgZ3JvdXBuYW1lOnBhc3N3b3JkOmdyb3VwX2lkOmdyb3VwX21lbWJlcnMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgYSBmaWVsZCBpcyBsZWZ0IGJsYW5rLCB0aGUgb3JpZ2luYWwgdmFsdWUgd2lsbCBiZSB1c2VkLiBUaGUgJ2dyb3VwbmFtZScgZmllbGQKKyAgICAgICAgICAgICMgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE5vdGU6IHNpbWlsYXIgdG8gdGhlIHBhc3N3ZCBmaWxlLCB0aGUgJ3Bhc3N3b3JkJyBmaWxlZCBpcyBpZ25vcmVkCisgICAgICAgICAgICAjIE5vdGU6IGdyb3VwX21lbWJlcnMgaXMgaWdub3JlZCwgZ3JvdXAgbWVtYmVycyBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgR1JPVVBNRU1TX1BBUkFNCisgICAgICAgICAgICBmb3IgY29uZiBpbiBnZXRfZ3JvdXBfbGlzdChkKS5zcGxpdCgpWzo6LTFdOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbmYpOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihjb25mLCAiciIpCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnJzdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpZWxkWzBdID09IGdhYXJncy5HUk9VUCBhbmQgZmllbGRbMl06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ2FhcmdzLmdpZCBhbmQgKGdhYXJncy5naWQgIT0gZmllbGRbMl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogQ2hhbmdpbmcgZ3JvdXBuYW1lICVzJ3MgZ2lkIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBnYWFyZ3MuR1JPVVAsIGdhYXJncy5naWQsIGZpZWxkWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWFyZ3MuZ2lkID0gZmllbGRbMl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBkLmdldFZhcignVVNFUkFERF9FUlJPUl9EWU5BTUlDJywgVHJ1ZSkgPT0gJzEnIGFuZCBub3QgKGdhYXJncy5naWQgYW5kIGdhYXJncy5naWQuaXNkaWdpdCgpKToKKyAgICAgICAgICAgICAgICAjYmIuZXJyb3IoIlNraXBwaW5nIHJlY2lwZSAlcywgcGFja2FnZSAlcyB3aGljaCBhZGRzIGdyb3VwbmFtZSAlcyBkb2VzIG5vdCBoYXZlIGEgc3RhdGljIGdpZCBkZWZpbmVkLiIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksICBwa2csIGdhYXJncy5HUk9VUCkpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSAlczogR3JvdXBuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgZ2lkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCBnYWFyZ3MuR1JPVVApKQorCisgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCisgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1mb3JjZSddW2dhYXJncy5mb3JjZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdpZCAlcycgJSBnYWFyZ3MuZ2lkXVtnYWFyZ3MuZ2lkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1rZXkgJXMnICUgZ2FhcmdzLmtleV1bZ2FhcmdzLmtleSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tbm9uLXVuaXF1ZSddW2dhYXJncy5ub25fdW5pcXVlXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcGFzc3dvcmQgJXMnICUgZ2FhcmdzLnBhc3N3b3JkXVtnYWFyZ3MucGFzc3dvcmQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXJvb3QgJXMnICUgZ2FhcmdzLnJvb3RdW2dhYXJncy5yb290ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1zeXN0ZW0nXVtnYWFyZ3Muc3lzdGVtXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gJyAlcycgJSBnYWFyZ3MuR1JPVVAKKworICAgICAgICAgICAgbmV3cGFyYW1zLmFwcGVuZChuZXdwYXJhbSkKKworICAgICAgICByZXR1cm4gIiA7Ii5qb2luKG5ld3BhcmFtcykuc3RyaXAoKQorCisgICAgIyBMb2FkIGFuZCBwcm9jZXNzIHRoZSB1c2VycyBhbmQgZ3JvdXBzLCByZXdyaXRpbmcgdGhlIGFkZHVzZXIvYWRkZ3JvdXAgcGFyYW1zCisgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAjIEdyb3VwbWVtcyBkb2Vzbid0IGhhdmUgYW55dGhpbmcgd2UgbWlnaHQgd2FudCB0byBjaGFuZ2UsIHNvIHNpbXBseSB2YWxpZGF0aW5nCisgICAgICAgICMgaXMgYSBiaXQgb2YgYSB3YXN0ZSAtLSBvbmx5IHByb2Nlc3MgdXNlcmFkZC9ncm91cGFkZAorICAgICAgICB1c2VyYWRkX3BhcmFtID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiB1c2VyYWRkX3BhcmFtOgorICAgICAgICAgICAgI2JiLndhcm4oIkJlZm9yZTogJ1VTRVJBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCB1c2VyYWRkX3BhcmFtKSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgcmV3cml0ZV91c2VyYWRkKHVzZXJhZGRfcGFyYW0pKQorICAgICAgICAgICAgI2JiLndhcm4oIkFmdGVyOiAgJ1VTRVJBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpKSkKKworICAgICAgICBncm91cGFkZF9wYXJhbSA9IGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIGdyb3VwYWRkX3BhcmFtOgorICAgICAgICAgICAgI2JiLndhcm4oIkJlZm9yZTogJ0dST1VQQUREX1BBUkFNXyVzJyAtICclcyciICUgKHBrZywgZ3JvdXBhZGRfcGFyYW0pKQorICAgICAgICAgICAgZC5zZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgcmV3cml0ZV9ncm91cGFkZChncm91cGFkZF9wYXJhbSkpCisgICAgICAgICAgICAjYmIud2FybigiQWZ0ZXI6ICAnR1JPVVBBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBkLmdldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSkpCisKKworCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIFwKKyAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXBkYXRlX3VzZXJhZGRfc3RhdGljX2NvbmZpZyhkKQorICAgICAgICBleGNlcHQgYmIuYnVpbGQuRnVuY0ZhaWxlZCBhcyBmOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNraXBwaW5nIHJlY2lwZSAlczogJXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBmKSkKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKGYpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTc3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGQuYmJjbGFzcwpAQCAtMCwwICsxLDIyMyBAQAoraW5oZXJpdCB1c2VyYWRkX2Jhc2UKKworIyBiYXNlLXBhc3N3ZC1jcm9zcyBwcm92aWRlcyB0aGUgZGVmYXVsdCBwYXNzd2QgYW5kIGdyb3VwIGZpbGVzIGluIHRoZQorIyB0YXJnZXQgc3lzcm9vdCwgYW5kIHNoYWRvdyAtbmF0aXZlIGFuZCAtc3lzcm9vdCBwcm92aWRlIHRoZSB1dGlsaXRpZXMKKyMgYW5kIHN1cHBvcnQgZmlsZXMgbmVlZGVkIHRvIGFkZCBhbmQgbW9kaWZ5IHVzZXIgYW5kIGdyb3VwIGFjY291bnRzCitERVBFTkRTX2FwcGVuZCA9ICIke1VTRVJBRERERVBFTkRTfSIKK1VTRVJBRERERVBFTkRTID0gIiBiYXNlLWZpbGVzIHNoYWRvdy1uYXRpdmUgc2hhZG93LXN5c3Jvb3Qgc2hhZG93IgorVVNFUkFERERFUEVORFNfY2xhc3MtY3Jvc3MgPSAiIgorVVNFUkFERERFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1VTRVJBRERERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKKyMgVGhpcyBwcmVpbnN0YWxsIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gZm91ciBkaWZmZXJlbnQgY29udGV4dHM6CisjCisjIGEpIEJlZm9yZSBkb19pbnN0YWxsCisjIGIpIEF0IGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgd2hlbiBpbnN0YWxsaW5nIGZyb20gc3N0YXRlIHBhY2thZ2VzCisjIGMpIEFzIHRoZSBwcmVpbnN0IHNjcmlwdCBpbiB0aGUgdGFyZ2V0IHBhY2thZ2UgYXQgZG9fcm9vdGZzIHRpbWUKKyMgZCkgQXMgdGhlIHByZWluc3Qgc2NyaXB0IGluIHRoZSB0YXJnZXQgcGFja2FnZSBvbiBkZXZpY2UgYXMgYSBwYWNrYWdlIHVwZ3JhZGUKKyMKK3VzZXJhZGRfcHJlaW5zdCAoKSB7CitPUFQ9IiIKK1NZU1JPT1Q9IiIKKworaWYgdGVzdCAieCREIiAhPSAieCI7IHRoZW4KKwkjIEluc3RhbGxpbmcgaW50byBhIHN5c3Jvb3QKKwlTWVNST09UPSIkRCIKKwlPUFQ9Ii0tcm9vdCAkRCIKKworCSMgTWFrZSBzdXJlIGxvZ2luLmRlZnMgaXMgdGhlcmUsIHRoaXMgaXMgdG8gbWFrZSBkZWJpYW4gcGFja2FnZSBiYWNrZW5kIHdvcmsKKwkjIGNvcnJlY3RseSB3aGlsZSBkb2luZyByb290ZnMuCisJIyBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgL2V0Yy9sb2dpbi5kZWZzIGlzIHRyZWF0ZWQgYXMgYSBjb25maWcgZmlsZSBmb3IKKwkjIHNoYWRvdyBwYWNrYWdlLCB0aGVuIHdoaWxlIHBlcmZvcm1pbmcgcHJlaW5zdHMgZm9yIHBhY2thZ2VzIHRoYXQgZGVwZW5kIG9uCisJIyBzaGFkb3csIHRoZXJlIG1pZ2h0IG9ubHkgYmUgL2V0Yy9sb2dpbi5kZWYuZHBrZy1uZXcgdGhlcmUgaW4gcm9vdCBmaWxlc3lzdGVtLgorCWlmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcyAtYSAtZSAkRCR7c3lzY29uZmRpcn0vbG9naW4uZGVmcy5kcGtnLW5ldyBdOyB0aGVuCisJICAgIGNwICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzLmRwa2ctbmV3ICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisJZmkKKworCSMgdXNlci9ncm91cCBsb29rdXBzIHNob3VsZCBtYXRjaCB1c2VyYWRkL2dyb3VwYWRkIC0tcm9vdAorCWV4cG9ydCBQU0VVRE9fUEFTU1dEPSIkU1lTUk9PVDoke1NUQUdJTkdfRElSX05BVElWRX0iCitmaQorCisjIElmIHdlJ3JlIG5vdCBkb2luZyBhIHNwZWNpYWwgU1NUQVRFL1NZU1JPT1QgaW5zdGFsbAorIyB0aGVuIHNldCB0aGUgdmFsdWVzLCBvdGhlcndpc2UgdXNlIHRoZSBlbnZpcm9ubWVudAoraWYgdGVzdCAieCRVQV9TWVNST09UIiA9ICJ4IjsgdGhlbgorCSMgSW5zdGFsbGluZyBvbnRvIGEgdGFyZ2V0CisJIyBBZGQgZ3JvdXBzIGFuZCB1c2VycyBkZWZpbmVkIG9ubHkgZm9yIHRoaXMgcGFja2FnZQorCUdST1VQQUREX1BBUkFNPSIke0dST1VQQUREX1BBUkFNfSIKKwlVU0VSQUREX1BBUkFNPSIke1VTRVJBRERfUEFSQU19IgorCUdST1VQTUVNU19QQVJBTT0iJHtHUk9VUE1FTVNfUEFSQU19IgorZmkKKworIyBQZXJmb3JtIGdyb3VwIGFkZGl0aW9ucyBmaXJzdCwgc2luY2UgdXNlciBhZGRpdGlvbnMgbWF5IGRlcGVuZAorIyBvbiB0aGVzZSBncm91cHMgZXhpc3RpbmcKK2lmIHRlc3QgIngkR1JPVVBBRERfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgZ3JvdXBhZGQgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGdyb3VwYWRkIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJEdST1VQQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fZ3JvdXBhZGQgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaSAKKworaWYgdGVzdCAieCRVU0VSQUREX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIHVzZXJhZGQgY29tbWFuZHMuLi4iCisJIyBJbnZva2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHVzZXJhZGQgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRVU0VSQUREX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJd2hpbGUgdGVzdCAieCRvcHRzIiAhPSAieCI7IGRvCisJCXBlcmZvcm1fdXNlcmFkZCAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpCisKK2lmIHRlc3QgIngkR1JPVVBNRU1TX1BBUkFNIiAhPSAieCI7IHRoZW4KKwllY2hvICJSdW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZ3JvdXBtZW1zIGZvciBwYXJhbWV0ZXIgbGlzdHMKKwkjIHNlcGFyYXRlZCBieSAnOycKKwlvcHRzPWBlY2hvICIkR1JPVVBNRU1TX1BBUkFNIiB8IGN1dCAtZCAnOycgLWYgMWAKKwlyZW1haW5pbmc9YGVjaG8gIiRHUk9VUE1FTVNfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV9ncm91cG1lbXMgIiRTWVNST09UIiAiJE9QVCAkb3B0cyIgMTAKKwkJaWYgdGVzdCAieCRvcHRzIiA9ICJ4JHJlbWFpbmluZyI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJCW9wdHM9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAxYAorCQlyZW1haW5pbmc9YGVjaG8gIiRyZW1haW5pbmciIHwgY3V0IC1kICc7JyAtZiAyLWAKKwlkb25lCitmaQorfQorCit1c2VyYWRkX3N5c3Jvb3QgKCkgeworCSMgUHNldWRvIG1heSAoZG9faW5zdGFsbCkgb3IgbWF5IG5vdCAoZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSkgYmUgcnVubmluZyAKKwkjIGF0IHRoaXMgcG9pbnQgc28gd2UncmUgZXhwbGljaXQgYWJvdXQgdGhlIGVudmlyb25tZW50IHNvIHBzZXVkbyBjYW4gbG9hZCBpZiAKKwkjIG5vdCBhbHJlYWR5IHByZXNlbnQuCisJZXhwb3J0IFBTRVVETz0iJHtGQUtFUk9PVEVOVn0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsb2NhbHN0YXRlZGlyfS9wc2V1ZG8gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJ9L3BzZXVkbyIKKworCSMgRXhwbGljaXRseSBzZXQgJEQgc2luY2UgaXQgaXNuJ3Qgc2V0IHRvIGFueXRoaW5nCisJIyBiZWZvcmUgZG9faW5zdGFsbAorCUQ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9CisKKwkjIEFkZCBncm91cHMgYW5kIHVzZXJzIGRlZmluZWQgZm9yIGFsbCByZWNpcGUgcGFja2FnZXMKKwlHUk9VUEFERF9QQVJBTT0iJHtAZ2V0X2FsbF9jbWRfcGFyYW1zKGQsICdncm91cGFkZCcpfSIKKwlVU0VSQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ3VzZXJhZGQnKX0iCisJR1JPVVBNRU1TX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ2dyb3VwbWVtcycpfSIKKworCSMgVGVsbCB0aGUgc3lzdGVtIHRvIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFycworCVVBX1NZU1JPT1Q9MQorCisJdXNlcmFkZF9wcmVpbnN0Cit9CisKK3VzZXJhZGRfc3lzcm9vdF9zc3RhdGUgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwYWNrYWdlX3NldHNjZW5lIiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCXVzZXJhZGRfc3lzcm9vdAorCWZpCit9CisKK2RvX2luc3RhbGxbcHJlZnVuY3NdICs9ICIke1NZU1JPT1RGVU5DfSIKK1NZU1JPT1RGVU5DID0gInVzZXJhZGRfc3lzcm9vdCIKK1NZU1JPT1RGVU5DX2NsYXNzLWNyb3NzID0gIiIKK1NZU1JPT1RGVU5DX2NsYXNzLW5hdGl2ZSA9ICIiCitTWVNST09URlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorU1NUQVRFUFJFSU5TVEZVTkNTICs9ICIke1NZU1JPT1RQT1NURlVOQ30iCitTWVNST09UUE9TVEZVTkMgPSAidXNlcmFkZF9zeXNyb290X3NzdGF0ZSIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1jcm9zcyA9ICIiCitTWVNST09UUE9TVEZVTkNfY2xhc3MtbmF0aXZlID0gIiIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitVU0VSQUREU0VUU0NFTkVERVBTID0gIiR7TUxQUkVGSVh9YmFzZS1wYXNzd2Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBwc2V1ZG8tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgc2hhZG93LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lICR7TUxQUkVGSVh9c2hhZG93LXN5c3Jvb3Q6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKK1VTRVJBRERTRVRTQ0VORURFUFNfY2xhc3MtY3Jvc3MgPSAiIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1uYXRpdmUgPSAiIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorZG9fcGFja2FnZV9zZXRzY2VuZVtkZXBlbmRzXSArPSAiJHtVU0VSQUREU0VUU0NFTkVERVBTfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmVbZGVwZW5kc10gKz0gIiR7VVNFUkFERFNFVFNDRU5FREVQU30iCisKKyMgUmVjaXBlIHBhcnNlLXRpbWUgc2FuaXR5IGNoZWNrcworZGVmIHVwZGF0ZV91c2VyYWRkX2FmdGVyX3BhcnNlKGQpOgorICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpCisKKyAgICBpZiBub3QgdXNlcmFkZF9wYWNrYWdlczoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgaW5oZXJpdHMgdXNlcmFkZCBidXQgZG9lc24ndCBzZXQgVVNFUkFERF9QQUNLQUdFUyIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKworICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBub3QgZC5nZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCBUcnVlKSBhbmQgbm90IGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpIGFuZCBub3QgZC5nZXRWYXIoJ0dST1VQTUVNU19QQVJBTV8lcycgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGluaGVyaXRzIHVzZXJhZGQgYnV0IGRvZXNuJ3Qgc2V0IFVTRVJBRERfUEFSQU0sIEdST1VQQUREX1BBUkFNIG9yIEdST1VQTUVNU19QQVJBTSBmb3IgcGFja2FnZSAlcyIgJSAoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksIHBrZykpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICB1cGRhdGVfdXNlcmFkZF9hZnRlcl9wYXJzZShkKQorfQorCisjIFJldHVybiBhIHNpbmdsZSBbR1JPVVB8VVNFUl1BRERfUEFSQU0gZm9ybWF0dGVkIHN0cmluZyB3aGljaCBpbmNsdWRlcyB0aGUKKyMgW2dyb3VwfHVzZXJdYWRkIHBhcmFtZXRlcnMgZm9yIGFsbCBVU0VSQUREX1BBQ0tBR0VTIGluIHRoaXMgcmVjaXBlCitkZWYgZ2V0X2FsbF9jbWRfcGFyYW1zKGQsIGNtZF90eXBlKToKKyAgICBpbXBvcnQgc3RyaW5nCisgICAgCisgICAgcGFyYW1fdHlwZSA9IGNtZF90eXBlLnVwcGVyKCkgKyAiX1BBUkFNXyVzIgorICAgIHBhcmFtcyA9IFtdCisKKyAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKSBvciAiIgorICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwYXJhbSA9IGQuZ2V0VmFyKHBhcmFtX3R5cGUgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHBhcmFtOgorICAgICAgICAgICAgcGFyYW1zLmFwcGVuZChwYXJhbSkKKworICAgIHJldHVybiAiOyAiLmpvaW4ocGFyYW1zKQorCisjIEFkZHMgdGhlIHByZWluc3Qgc2NyaXB0IGludG8gZ2VuZXJhdGVkIHBhY2thZ2VzCitmYWtlcm9vdCBweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZGVmIHVwZGF0ZV91c2VyYWRkX3BhY2thZ2UocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyB1c2VyL2dyb3VwIGNhbGxzIHRvIHByZWluc3QgZm9yICVzJyAlIHBrZykKKworICAgICAgICAiIiIKKyAgICAgICAgdXNlcmFkZCBwcmVpbnN0IGlzIGFwcGVuZGVkIGhlcmUgYmVjYXVzZSBwa2dfcHJlaW5zdCBtYXkgYmUKKyAgICAgICAgcmVxdWlyZWQgdG8gZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0LiBOb3QgZG9pbmcgc28gbWF5IGNhdXNlCisgICAgICAgIHVzZXJhZGQgcHJlaW5zdCB0byBiZSBpbnZva2VkIHR3aWNlLCBjYXVzaW5nIHVud2FudGVkIHdhcm5pbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgcHJlaW5zdCA9IGQuZ2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVpbnN0OgorICAgICAgICAgICAgcHJlaW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlaW5zdCArPSAnYmJub3RlICgpIHtcblx0ZWNobyAiTk9URTogJCoiXG59XG4nCisgICAgICAgIHByZWluc3QgKz0gJ2Jid2FybiAoKSB7XG5cdGVjaG8gIldBUk5JTkc6ICQqIlxufVxuJworICAgICAgICBwcmVpbnN0ICs9ICdiYmZhdGFsICgpIHtcblx0ZWNobyAiRVJST1I6ICQqIlxuXHRleGl0IDFcbn1cbicKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV9ncm91cGFkZCAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV9ncm91cGFkZCcsIFRydWUpCisgICAgICAgIHByZWluc3QgKz0gJ3BlcmZvcm1fdXNlcmFkZCAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV91c2VyYWRkJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV9ncm91cG1lbXMgKCkge1xuJXN9XG4nICUgZC5nZXRWYXIoJ3BlcmZvcm1fZ3JvdXBtZW1zJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSBkLmdldFZhcigndXNlcmFkZF9wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgcHJlaW5zdCkKKworICAgICAgICAjIFJERVBFTkRTIHNldHVwCisgICAgICAgIHJkZXBlbmRzID0gZC5nZXRWYXIoIlJERVBFTkRTXyVzIiAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgcmRlcGVuZHMgKz0gJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2Jhc2UtcGFzc3dkJworICAgICAgICByZGVwZW5kcyArPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnc2hhZG93JworICAgICAgICAjIGJhc2UtZmlsZXMgaXMgd2hlcmUgdGhlIGRlZmF1bHQgL2V0Yy9za2VsIGlzIHBhY2thZ2VkCisgICAgICAgIHJkZXBlbmRzICs9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdiYXNlLWZpbGVzJworICAgICAgICBkLnNldFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCByZGVwZW5kcykKKworICAgICMgQWRkIHRoZSB1c2VyL2dyb3VwIHByZWluc3RhbGwgc2NyaXB0cyBhbmQgUkRFUEVORFMgcmVxdWlyZW1lbnRzCisgICAgIyB0byBwYWNrYWdlcyBzcGVjaWZpZWQgYnkgVVNFUkFERF9QQUNLQUdFUworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBwa2cgaW4gdXNlcmFkZF9wYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgdXBkYXRlX3VzZXJhZGRfcGFja2FnZShwa2cpCit9CisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgdG8gZXh0ZW5kIHRoZSB1c2VyYWRkIHdpdGggY3VzdG9tIGZ1bmN0aW9ucworVVNFUkFEREVYVEVOU0lPTiA/PSAiIgorCitpbmhlcml0ICR7VVNFUkFEREVYVEVOU0lPTn0KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91c2VyYWRkX2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91c2VyYWRkX2Jhc2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJmM2ExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjMwIEBACisjIFRoaXMgYmJjbGFzcyBwcm92aWRlcyBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvciB1c2VyL2dyb3VwIHNldHRpbmdzLgorIyBUaGlzIGJiY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgaW5oZXJpdGVkIGJ5IHVzZXJhZGQuYmJjbGFzcyBhbmQKKyMgZXh0cmF1c2Vycy5iYmNsYXNzLgorCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGJhc2ljYWxseSBoYXZlIHNpbWlsYXIgbG9naWMuCisjICopIFBlcmZvcm0gbmVjZXNzYXJ5IGNoZWNrcyBiZWZvcmUgaW52b2tpbmcgdGhlIGFjdHVhbCBjb21tYW5kCisjICopIEludm9rZSB0aGUgYWN0dWFsIGNvbW1hbmQsIG1ha2UgcmV0cmllcyBpZiBuZWNlc3NhcnkKKyMgKikgRXJyb3Igb3V0IGlmIGFuIGVycm9yIG9jY3Vycy4KKworIyBOb3RlIHRoYXQgYmVmb3JlIGludm9raW5nIHRoZXNlIGZ1bmN0aW9ucywgbWFrZSBzdXJlIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgUFNFVURPIGlzIHNldCB1cCBjb3JyZWN0bHkuCisKK3BlcmZvcm1fZ3JvdXBhZGQgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBhZGQgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cGFkZCAkb3B0cyB8fCB0cnVlCisJCQlncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwkJCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwYWRkIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBhZGQgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJub3RlICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBhbHJlYWR5IGV4aXN0cywgbm90IHJlLWNyZWF0aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fdXNlcmFkZCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyB1c2VyYWRkIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcmFkZCAkb3B0cyB8fCB0cnVlCisJCSAgICAgICB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCQkgICAgICAgaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VyYWRkIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcmFkZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYm5vdGUgIiR7UE59OiB1c2VyICR1c2VybmFtZSBhbHJlYWR5IGV4aXN0cywgbm90IHJlLWNyZWF0aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBtZW1zICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwbWVtcyB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IGZvciAoaSA9IDE7IGkgPCBORjsgaSsrKSBpZiAoJGkgPT0gIi1nIiB8fCAkaSA9PSAiLS1ncm91cCIpIHByaW50ICQoaSsxKSB9J2AKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IGZvciAoaSA9IDE7IGkgPCBORjsgaSsrKSBpZiAoJGkgPT0gIi1hIiB8fCAkaSA9PSAiLS1hZGQiKSBwcmludCAkKGkrMSkgfSdgCisJYmJub3RlICIke1BOfTogUnVubmluZyBncm91cG1lbXMgY29tbWFuZCB3aXRoIGdyb3VwICRncm91cG5hbWUgYW5kIHVzZXIgJHVzZXJuYW1lIgorCSMgZ3JvdXBtZW1zIGZhaWxzIGlmIC9ldGMvZ3NoYWRvdyBkb2VzIG5vdCBleGlzdAorCWxvY2FsIGdzaGFkb3c9IiIKKwlpZiBbIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93IF07IHRoZW4KKwkJZ3NoYWRvdz0ieWVzIgorCWVsc2UKKwkJZ3NoYWRvdz0ibm8iCisJCXRvdWNoICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJZmkKKwlsb2NhbCBtZW1fZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XChbXixdKixcKSokdXNlcm5hbWVcKCxbXixdKlwpKiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkbWVtX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwbWVtcyAkb3B0cyB8fCB0cnVlCisJCQltZW1fZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6W146XSo6W146XSo6XChbXixdKixcKSokdXNlcm5hbWVcKCxbXixdKlwpKiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCQkJaWYgdGVzdCAieCRtZW1fZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwbWVtcyBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWlmIHRlc3QgIngkZ3NoYWRvdyIgPSAieG5vIjsgdGhlbgorCQkJCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdworCQkJCQlybSAtZiAkcm9vdGRpciR7c3lzY29uZmRpcn0vZ3NoYWRvdy0KKwkJCQlmaQorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGFscmVhZHkgY29udGFpbnMgJHVzZXJuYW1lLCBub3QgcmUtYWRkaW5nIGl0IgorCWZpCisJaWYgdGVzdCAieCRnc2hhZG93IiA9ICJ4bm8iOyB0aGVuCisJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93LQorCWZpCit9CisKK3BlcmZvcm1fZ3JvdXBkZWwgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBkZWwgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBkZWwgJG9wdHMgfHwgdHJ1ZQorCQkJZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJCQlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBkZWwgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cGRlbCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKwkJCXNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGRvZXNuJ3QgZXhpc3QsIG5vdCByZW1vdmluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX3VzZXJkZWwgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgdXNlcmRlbCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VyZGVsICRvcHRzIHx8IHRydWUKKwkJICAgICAgIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJCSAgICAgICBpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VyZGVsIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcmRlbCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiB1c2VyICR1c2VybmFtZSBkb2Vzbid0IGV4aXN0LCBub3QgcmVtb3ZpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV9ncm91cG1vZCAoKSB7CisJIyBPdGhlciB0aGFuIHRoZSByZXR1cm4gdmFsdWUgb2YgZ3JvdXBtb2QsIHRoZXJlJ3Mgbm8gc2ltcGxlIHdheSB0byBqdWRnZSB3aGV0aGVyIHRoZSBjb21tYW5kCisJIyBzdWNjZWVkcywgc28gd2UgZGlzYWJsZSAtZSBvcHRpb24gdGVtcG9yYXJpbHkKKwlzZXQgK2UKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIGdyb3VwbW9kIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIGdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwbW9kICRvcHRzCisJCQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cG1vZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwbW9kIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgZG9lc24ndCBleGlzdCwgdW5hYmxlIHRvIG1vZGlmeSBpdCIKKwlmaQorCXNldCAtZQorfQorCitwZXJmb3JtX3VzZXJtb2QgKCkgeworCSMgU2FtZSByZWFzb24gd2l0aCBncm91cG1vZCwgdGVtcG9yYXJpbHkgZGlzYWJsZSAtZSBvcHRpb24KKwlzZXQgK2UKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIHVzZXJtb2Qgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCWlmIHRlc3QgIngkdXNlcl9leGlzdHMiICE9ICJ4IjsgdGhlbgorCSAgICAgICBsb2NhbCBjb3VudD0wCisJICAgICAgIHdoaWxlIHRydWU7IGRvCisJCSAgICAgICBldmFsICRQU0VVRE8gdXNlcm1vZCAkb3B0cworCQkgICAgICAgaWYgdGVzdCAkPyAhPSAwOyB0aGVuCisJCQkgICAgICAgYmJ3YXJuICIke1BOfTogdXNlcm1vZCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCSAgICAgICBlbHNlCisJCQkgICAgICAgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkgICAgICAgaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIHVzZXJtb2QgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJICAgICAgIGZpCisJCSAgICAgICBzbGVlcCAkY291bnQKKwkgICAgICAgZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogdXNlciAkdXNlcm5hbWUgZG9lc24ndCBleGlzdCwgdW5hYmxlIHRvIG1vZGlmeSBpdCIKKwlmaQorCXNldCAtZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91dGlsaXR5LXRhc2tzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxN2I4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91dGlsaXR5LXRhc2tzLmJiY2xhc3MKQEAgLTAsMCArMSw2OSBAQAorYWRkdGFzayBsaXN0dGFza3MKK2RvX2xpc3R0YXNrc1tub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2xpc3R0YXNrcygpIHsKKyAgICB0YXNrZGVzY3MgPSB7fQorICAgIG1heGxlbiA9IDAKKyAgICBmb3IgZSBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGUsICd0YXNrJyk6CisgICAgICAgICAgICBtYXhsZW4gPSBtYXgobWF4bGVuLCBsZW4oZSkpCisgICAgICAgICAgICBpZiBlLmVuZHN3aXRoKCdfc2V0c2NlbmUnKToKKyAgICAgICAgICAgICAgICBkZXNjID0gIiVzIChzZXRzY2VuZSB2ZXJzaW9uKSIgJSAoZC5nZXRWYXJGbGFnKGVbOi05XSwgJ2RvYycpIG9yICcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXNjID0gZC5nZXRWYXJGbGFnKGUsICdkb2MnKSBvciAnJworICAgICAgICAgICAgdGFza2Rlc2NzW2VdID0gZGVzYworCisgICAgdGFza3MgPSBzb3J0ZWQodGFza2Rlc2NzLmtleXMoKSkKKyAgICBmb3IgdGFza25hbWUgaW4gdGFza3M6CisgICAgICAgIGJiLnBsYWluKCIlcyAgJXMiICUgKHRhc2tuYW1lLmxqdXN0KG1heGxlbiksIHRhc2tkZXNjc1t0YXNrbmFtZV0pKQorfQorCitDTEVBTkZVTkNTID89ICIiCisKK1RfdGFzay1jbGVhbiA9ICIke0xPR19ESVJ9L2NsZWFubG9ncy8ke1BOfSIKK2FkZHRhc2sgY2xlYW4KK2RvX2NsZWFuW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2xlYW4oKSB7CisgICAgIiIiY2xlYXIgdGhlIGJ1aWxkIGFuZCB0ZW1wIGRpcmVjdG9yaWVzIiIiCisgICAgZGlyID0gZC5leHBhbmQoIiR7V09SS0RJUn0iKQorICAgIGJiLm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCisgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgZGlyID0gIiVzLioiICUgYmIuZGF0YS5leHBhbmQoZC5nZXRWYXIoJ1NUQU1QJywgRmFsc2UpLCBkKQorICAgIGJiLm5vdGUoIlJlbW92aW5nICIgKyBkaXIpCisgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdDTEVBTkZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorfQorCithZGR0YXNrIGNoZWNrdXJpCitkb19jaGVja3VyaVtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2NoZWNrdXJpKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGxvY2FsZGF0YSkKKyAgICAgICAgZmV0Y2hlci5jaGVja3N0YXR1cygpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uLCBlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKGUpCit9CisKK2FkZHRhc2sgY2hlY2t1cmlhbGwgYWZ0ZXIgZG9fY2hlY2t1cmkKK2RvX2NoZWNrdXJpYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja3VyaWFsbCBkb19jaGVja3VyaSIKK2RvX2NoZWNrdXJpYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja3VyaWFsbFtub3N0YW1wXSA9ICIxIgorZG9fY2hlY2t1cmlhbGwoKSB7CisJOgorfQorCithZGR0YXNrIGZldGNoYWxsIGFmdGVyIGRvX2ZldGNoCitkb19mZXRjaGFsbFtyZWNyZGVwdGFza10gPSAiZG9fZmV0Y2hhbGwgZG9fZmV0Y2giCitkb19mZXRjaGFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZmV0Y2hhbGwoKSB7CisJOgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWI5MmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3V0aWxzLmJiY2xhc3MKQEAgLTAsMCArMSwzODAgQEAKKyMgRm9yIGNvbXBhdGliaWxpdHkKK2RlZiBiYXNlX3BhdGhfam9pbihhLCAqcCk6CisgICAgcmV0dXJuIG9lLnBhdGguam9pbihhLCAqcCkKKworZGVmIGJhc2VfcGF0aF9yZWxhdGl2ZShzcmMsIGRlc3QpOgorICAgIHJldHVybiBvZS5wYXRoLnJlbGF0aXZlKHNyYywgZGVzdCkKKworZGVmIGJhc2VfcGF0aF9vdXQocGF0aCwgZCk6CisgICAgcmV0dXJuIG9lLnBhdGguZm9ybWF0X2Rpc3BsYXkocGF0aCwgZCkKKworZGVmIGJhc2VfcmVhZF9maWxlKGZpbGVuYW1lKToKKyAgICByZXR1cm4gb2UudXRpbHMucmVhZF9maWxlKGZpbGVuYW1lKQorCitkZWYgYmFzZV9pZmVsc2UoY29uZGl0aW9uLCBpZnRydWUgPSBUcnVlLCBpZmZhbHNlID0gRmFsc2UpOgorICAgIHJldHVybiBvZS51dGlscy5pZmVsc2UoY29uZGl0aW9uLCBpZnRydWUsIGlmZmFsc2UpCisKK2RlZiBiYXNlX2NvbmRpdGlvbmFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5jb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKQorCitkZWYgYmFzZV9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX3ZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMudmVyc2lvbl9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2NvbnRhaW5zKHZhcmlhYmxlLCBjaGVja3ZhbHVlcywgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXR1cm4gYmIudXRpbHMuY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2JvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmJvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCkKKworZGVmIGJhc2VfcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5wcnVuZV9zdWZmaXgodmFyLCBzdWZmaXhlcywgZCkKKworZGVmIG9lX2ZpbHRlcihmLCBzdHIsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5zdHJfZmlsdGVyKGYsIHN0ciwgZCkKKworZGVmIG9lX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuc3RyX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKQorCitkZWYgbWFjaGluZV9wYXRocyhkKToKKyAgICAiIiJMaXN0IGFueSBleGlzdGluZyBtYWNoaW5lIHNwZWNpZmljIGZpbGVzcGF0aCBkaXJlY3RvcmllcyIiIgorICAgIG1hY2hpbmUgPSBkLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgZmlsZXNwYXRocGtnID0gZC5nZXRWYXIoIkZJTEVTUEFUSFBLRyIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmb3IgYmFzZXBhdGggaW4gZC5nZXRWYXIoIkZJTEVTUEFUSEJBU0UiLCBUcnVlKS5zcGxpdCgiOiIpOgorICAgICAgICBmb3IgcGtncGF0aCBpbiBmaWxlc3BhdGhwa2c6CisgICAgICAgICAgICBtYWNoaW5lcGF0aCA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgcGtncGF0aCwgbWFjaGluZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobWFjaGluZXBhdGgpOgorICAgICAgICAgICAgICAgIHlpZWxkIG1hY2hpbmVwYXRoCisKK2RlZiBpc19tYWNoaW5lX3NwZWNpZmljKGQpOgorICAgICIiIkRldGVybWluZSB3aGV0aGVyIHRoZSBjdXJyZW50IHJlY2lwZSBpcyBtYWNoaW5lIHNwZWNpZmljIiIiCisgICAgbWFjaGluZXBhdGhzID0gc2V0KG1hY2hpbmVfcGF0aHMoZCkpCisgICAgc3JjdXJpID0gZC5nZXRWYXIoIlNSQ19VUkkiLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHVybCBpbiBzcmN1cmk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NyY3VyaV0sIGQpCisgICAgICAgIGlmIHVybC5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBpZiBhbnkoZmV0Y2hlci5sb2NhbHBhdGgodXJsKS5zdGFydHN3aXRoKG1wICsgIi8iKSBmb3IgbXAgaW4gbWFjaGluZXBhdGhzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCitvZV9zb2luc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIHNoYXJlZCBsaWJyYXJ5IGZpbGUgYW5kCisJIyAgICAgICAgICBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBsaW5rcworCSMgRXhhbXBsZToKKwkjCisJIyBvZV8KKwkjCisJI2Jibm90ZSBpbnN0YWxsaW5nIHNoYXJlZCBsaWJyYXJ5ICQxIHRvICQyCisJIworCWxpYm5hbWU9YGJhc2VuYW1lICQxYAorCWluc3RhbGwgLW0gNzU1ICQxICQyLyRsaWJuYW1lCisJc29uYW1lbGluaz1gJHtIT1NUX1BSRUZJWH1yZWFkZWxmIC1kICQxIHxncmVwICdMaWJyYXJ5IHNvbmFtZTonIHxzZWQgLWUgJ3MvLipcW1woLipcKVxdLiovXDEvJ2AKKwlzb2xpbms9YGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXC5zb1wuLiovLnNvLydgCisJbG4gLXNmICRsaWJuYW1lICQyLyRzb25hbWVsaW5rCisJbG4gLXNmICRsaWJuYW1lICQyLyRzb2xpbmsKK30KKworb2VfbGliaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgYSBsaWJyYXJ5LCBpbiBhbGwgaXRzIGZvcm1zCisJIyBFeGFtcGxlCisJIworCSMgb2VfbGliaW5zdGFsbCBsaWJsdGRsICR7U1RBR0lOR19MSUJESVJ9LworCSMgb2VfbGliaW5zdGFsbCAtQyBzcmMvbGliYmxhaCBsaWJibGFoICR7RH0vJHtsaWJkaXJ9LworCWRpcj0iIgorCWxpYnRvb2w9IiIKKwlzaWxlbnQ9IiIKKwlyZXF1aXJlX3N0YXRpYz0iIgorCXJlcXVpcmVfc2hhcmVkPSIiCisJc3RhZ2luZ19pbnN0YWxsPSIiCisJd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisJCWNhc2UgIiQxIiBpbgorCQktQykKKwkJCXNoaWZ0CisJCQlkaXI9IiQxIgorCQkJOzsKKwkJLXMpCisJCQlzaWxlbnQ9MQorCQkJOzsKKwkJLWEpCisJCQlyZXF1aXJlX3N0YXRpYz0xCisJCQk7OworCQktc28pCisJCQlyZXF1aXJlX3NoYXJlZD0xCisJCQk7OworCQktKikKKwkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVua25vd24gb3B0aW9uOiAkMSIKKwkJCTs7CisJCSopCisJCQlicmVhazsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlsaWJuYW1lPSIkMSIKKwlzaGlmdAorCWRlc3RwYXRoPSIkMSIKKwlpZiBbIC16ICIkZGVzdHBhdGgiIF07IHRoZW4KKwkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogbm8gZGVzdGluYXRpb24gcGF0aCBzcGVjaWZpZWQiCisJZmkKKwlpZiBlY2hvICIkZGVzdHBhdGgvIiB8IGVncmVwICdeJHtTVEFHSU5HX0xJQkRJUn0vJyA+L2Rldi9udWxsCisJdGhlbgorCQlzdGFnaW5nX2luc3RhbGw9MQorCWZpCisKKwlfX3J1bmNtZCAoKSB7CisJCWlmIFsgLXogIiRzaWxlbnQiIF07IHRoZW4KKwkJCWVjaG8gPiYyICJvZV9saWJpbnN0YWxsOiAkKiIKKwkJZmkKKwkJJCoKKwl9CisKKwlpZiBbIC16ICIkZGlyIiBdOyB0aGVuCisJCWRpcj1gcHdkYAorCWZpCisKKwlkb3RsYWk9JGxpYm5hbWUubGFpCisKKwkjIFNhbml0eSBjaGVjayB0aGF0IHRoZSBsaWJuYW1lLmxhaSBpcyB1bmlxdWUKKwludW1iZXJfb2ZfZmlsZXM9YChjZCAkZGlyOyBmaW5kIC4gLW5hbWUgIiRkb3RsYWkiKSB8IHdjIC1sYAorCWlmIFsgJG51bWJlcl9vZl9maWxlcyAtZ3QgMSBdOyB0aGVuCisJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6ICRkb3RsYWkgaXMgbm90IHVuaXF1ZSBpbiAkZGlyIgorCWZpCisKKworCWRpcj0kZGlyYChjZCAkZGlyO2ZpbmQgLiAtbmFtZSAiJGRvdGxhaSIpIHwgc2VkICJzL15cLi8vO3MvXC8kZG90bGFpXCQvLztxImAKKwlvbGRkaXI9YHB3ZGAKKwlfX3J1bmNtZCBjZCAkZGlyCisKKwlsYWZpbGU9JGxpYm5hbWUubGEKKworCSMgSWYgc3VjaCBmaWxlIGRvZXNuJ3QgZXhpc3QsIHRyeSB0byBjdXQgdmVyc2lvbiBzdWZmaXgKKwlpZiBbICEgLWYgIiRsYWZpbGUiIF07IHRoZW4KKwkJbGlibmFtZTE9YGVjaG8gIiRsaWJuYW1lIiB8IHNlZCAncy8tWzAtOS5dKiQvLydgCisJCWxhZmlsZTE9JGxpYm5hbWUubGEKKwkJaWYgWyAtZiAiJGxhZmlsZTEiIF07IHRoZW4KKwkJCWxpYm5hbWU9JGxpYm5hbWUxCisJCQlsYWZpbGU9JGxhZmlsZTEKKwkJZmkKKwlmaQorCisJaWYgWyAtZiAiJGxhZmlsZSIgXTsgdGhlbgorCQkjIGxpYnRvb2wgYXJjaGl2ZQorCQlldmFsIGBjYXQgJGxhZmlsZXxncmVwICJebGlicmFyeV9uYW1lcz0iYAorCQlsaWJ0b29sPTEKKwllbHNlCisJCWxpYnJhcnlfbmFtZXM9IiRsaWJuYW1lLnNvKiAkbGlibmFtZS5kbGwuYSAkbGlibmFtZS4qLmR5bGliIgorCWZpCisKKwlfX3J1bmNtZCBpbnN0YWxsIC1kICRkZXN0cGF0aC8KKwlkb3RhPSRsaWJuYW1lLmEKKwlpZiBbIC1mICIkZG90YSIgLW8gLW4gIiRyZXF1aXJlX3N0YXRpYyIgXTsgdGhlbgorCQlybSAtZiAkZGVzdHBhdGgvJGRvdGEKKwkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RhICRkZXN0cGF0aC8KKwlmaQorCWlmIFsgLWYgIiRkb3RsYWkiIC1hIC1uICIkbGlidG9vbCIgXTsgdGhlbgorCQlybSAtZiAkZGVzdHBhdGgvJGxpYm5hbWUubGEKKwkJX19ydW5jbWQgaW5zdGFsbCAtbSAwNjQ0ICRkb3RsYWkgJGRlc3RwYXRoLyRsaWJuYW1lLmxhCisJZmkKKworCWZvciBuYW1lIGluICRsaWJyYXJ5X25hbWVzOyBkbworCQlmaWxlcz1gZXZhbCBlY2hvICRuYW1lYAorCQlmb3IgZiBpbiAkZmlsZXM7IGRvCisJCQlpZiBbICEgLWUgIiRmIiBdOyB0aGVuCisJCQkJaWYgWyAtbiAiJGxpYnRvb2wiIF07IHRoZW4KKwkJCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogJGRpci8kZiBub3QgZm91bmQuIgorCQkJCWZpCisJCQllbGlmIFsgLUwgIiRmIiBdOyB0aGVuCisJCQkJX19ydW5jbWQgY3AgLVAgIiRmIiAkZGVzdHBhdGgvCisJCQllbGlmIFsgISAtTCAiJGYiIF07IHRoZW4KKwkJCQlsaWJmaWxlPSIkZiIKKwkJCQlybSAtZiAkZGVzdHBhdGgvJGxpYmZpbGUKKwkJCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA3NTUgJGxpYmZpbGUgJGRlc3RwYXRoLworCQkJZmkKKwkJZG9uZQorCWRvbmUKKworCWlmIFsgLXogIiRsaWJmaWxlIiBdOyB0aGVuCisJCWlmICBbIC1uICIkcmVxdWlyZV9zaGFyZWQiIF07IHRoZW4KKwkJCWJiZmF0YWwgIm9lX2xpYmluc3RhbGw6IHVuYWJsZSB0byBsb2NhdGUgc2hhcmVkIGxpYnJhcnkiCisJCWZpCisJZWxpZiBbIC16ICIkbGlidG9vbCIgXTsgdGhlbgorCQkjIHNwZWNpYWwgY2FzZSBoYWNrIGZvciBub24tbGlidG9vbCAuc28uIy4jLiMgbGlua3MKKwkJYmFzZWxpYmZpbGU9YGJhc2VuYW1lICIkbGliZmlsZSJgCisJCWlmIChlY2hvICRiYXNlbGliZmlsZSB8IGdyZXAgLXFFICdebGliLipcLnNvXC5bMC05Ll0qJCcpOyB0aGVuCisJCQlzb25hbWVsaW5rPWAke0hPU1RfUFJFRklYfXJlYWRlbGYgLWQgJGxpYmZpbGUgfGdyZXAgJ0xpYnJhcnkgc29uYW1lOicgfHNlZCAtZSAncy8uKlxbXCguKlwpXF0uKi9cMS8nYAorCQkJc29saW5rPWBlY2hvICRiYXNlbGliZmlsZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKKwkJCWlmIFsgLW4gIiRzb25hbWVsaW5rIiAtYSB4IiRiYXNlbGliZmlsZSIgIT0geCIkc29uYW1lbGluayIgXTsgdGhlbgorCQkJCV9fcnVuY21kIGxuIC1zZiAkYmFzZWxpYmZpbGUgJGRlc3RwYXRoLyRzb25hbWVsaW5rCisJCQlmaQorCQkJX19ydW5jbWQgbG4gLXNmICRiYXNlbGliZmlsZSAkZGVzdHBhdGgvJHNvbGluaworCQlmaQorCWZpCisKKwlfX3J1bmNtZCBjZCAiJG9sZGRpciIKK30KKworb2VfbWFjaGluc3RhbGwoKSB7CisJIyBQdXJwb3NlOiBJbnN0YWxsIG1hY2hpbmUgZGVwZW5kZW50IGZpbGVzLCBpZiBhdmFpbGFibGUKKwkjICAgICAgICAgIElmIG5vdCBhdmFpbGFibGUsIGNoZWNrIGlmIHRoZXJlIGlzIGEgZGVmYXVsdAorCSMgICAgICAgICAgSWYgbm8gZGVmYXVsdCwganVzdCB0b3VjaCB0aGUgZGVzdGluYXRpb24KKwkjIEV4YW1wbGU6CisJIyAgICAgICAgICAgICAgICAkMSAgJDIgICAkMyAgICAgICAgICQ0CisJIyBvZV9tYWNoaW5zdGFsbCAtbSAwNjQ0IGZzdGFiICR7RH0vZXRjL2ZzdGFiCisJIworCSMgVE9ETzogQ2hlY2sgYXJndW1lbnQgbnVtYmVyPworCSMKKwlmaWxlbmFtZT1gYmFzZW5hbWUgJDNgCisJZGlybmFtZT1gZGlybmFtZSAkM2AKKworCWZvciBvIGluIGBlY2hvICR7T1ZFUlJJREVTfSB8IHRyICc6JyAnICdgOyBkbworCQlpZiBbIC1lICRkaXJuYW1lLyRvLyRmaWxlbmFtZSBdOyB0aGVuCisJCQliYm5vdGUgJGRpcm5hbWUvJG8vJGZpbGVuYW1lIHByZXNlbnQsIGluc3RhbGxpbmcgdG8gJDQKKwkJCWluc3RhbGwgJDEgJDIgJGRpcm5hbWUvJG8vJGZpbGVuYW1lICQ0CisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisjCWJibm90ZSBvdmVycmlkZXMgc3BlY2lmaWMgZmlsZSBOT1QgcHJlc2VudCwgdHJ5aW5nIGRlZmF1bHQ9JDMuLi4KKwlpZiBbIC1lICQzIF07IHRoZW4KKwkJYmJub3RlICQzIHByZXNlbnQsIGluc3RhbGxpbmcgdG8gJDQKKwkJaW5zdGFsbCAkMSAkMiAkMyAkNAorCWVsc2UKKwkJYmJub3RlICQzIE5PVCBwcmVzZW50LCB0b3VjaGluZyBlbXB0eSAkNAorCQl0b3VjaCAkNAorCWZpCit9CisKK2NyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgKCkgeworCSMgQ3JlYXRlIGEgd3JhcHBlciBzY3JpcHQgd2hlcmUgY29tbWFuZGxpbmUgb3B0aW9ucyBhcmUgbmVlZGVkCisJIworCSMgVGhlc2UgYXJlIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCByZWxvY2F0aW9uIGlzc3VlcywgYnkgcGFzc2luZyBleHRyYSBvcHRpb25zIAorCSMgdG8gYSBwcm9ncmFtCisJIworCSMgVXNhZ2U6IGNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgRklMRU5BTUUgPGV4dHJhLW9wdGlvbnM+CisKKwljbWQ9JDEKKwlzaGlmdAorCisJZWNobyAiR2VuZXJhdGluZyB3cmFwcGVyIHNjcmlwdCBmb3IgJGNtZCIKKworCW12ICRjbWQgJGNtZC5yZWFsCisJY21kbmFtZT1gYmFzZW5hbWUgJGNtZGAKKwljYXQgPDxFTkQgPiRjbWQKKyMhL2Jpbi9iYXNoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhlYyAtYSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUucmVhbCAkQCAiXCRAIgorRU5ECisJY2htb2QgK3ggJGNtZAorfQorCitjcmVhdGVfd3JhcHBlciAoKSB7CisJIyBDcmVhdGUgYSB3cmFwcGVyIHNjcmlwdCB3aGVyZSBleHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5lZWRlZAorCSMKKwkjIFRoZXNlIGFyZSB1c2VmdWwgdG8gd29yayBhcm91bmQgcmVsb2NhdGlvbiBpc3N1ZXMsIGJ5IHNldHRpbmcgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlcyB3aGljaCBwb2ludCB0byBwYXRocyBpbiB0aGUgZmlsZXN5c3RlbS4KKwkjCisJIyBVc2FnZTogY3JlYXRlX3dyYXBwZXIgRklMRU5BTUUgW1tWQVI9VkFMVUVdLi5dCisKKwljbWQ9JDEKKwlzaGlmdAorCisJZWNobyAiR2VuZXJhdGluZyB3cmFwcGVyIHNjcmlwdCBmb3IgJGNtZCIKKworCW12ICRjbWQgJGNtZC5yZWFsCisJY21kbmFtZT1gYmFzZW5hbWUgJGNtZGAKKwljYXQgPDxFTkQgPiRjbWQKKyMhL2Jpbi9iYXNoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhwb3J0ICRACitleGVjIC1hIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZS5yZWFsICJcJEAiCitFTkQKKwljaG1vZCAreCAkY21kCit9CisKKyMgQ29weSBmaWxlcy9kaXJlY3RvcmllcyBmcm9tICQxIHRvICQyIGJ1dCB1c2luZyBoYXJkbGlua3MKKyMgKHByZXNlcnZlIHN5bWxpbmtzKQoraGFyZGxpbmtkaXIgKCkgeworCWZyb209JDEKKwl0bz0kMgorCShjZCAkZnJvbTsgZmluZCAuIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAkdG8pCit9CisKKworZGVmIGNoZWNrX2FwcF9leGlzdHMoYXBwLCBkKToKKyAgICBhcHAgPSBkLmV4cGFuZChhcHApCisgICAgcGF0aCA9IGQuZ2V0VmFyKCdQQVRIJywgZCwgVHJ1ZSkKKyAgICByZXR1cm4gYm9vbChiYi51dGlscy53aGljaChwYXRoLCBhcHApKQorCitkZWYgZXhwbG9kZV9kZXBzKHMpOgorICAgIHJldHVybiBiYi51dGlscy5leHBsb2RlX2RlcHMocykKKworZGVmIGJhc2Vfc2V0X2ZpbGVzcGF0aChwYXRoLCBkKToKKyAgICBmaWxlc3BhdGggPSBbXQorICAgIGV4dHJhcGF0aHMgPSAoZC5nZXRWYXIoIkZJTEVTRVhUUkFQQVRIUyIsIFRydWUpIG9yICIiKQorICAgICMgUmVtb3ZlIGRlZmF1bHQgZmxhZyB3aGljaCB3YXMgdXNlZCBmb3IgY2hlY2tpbmcKKyAgICBleHRyYXBhdGhzID0gZXh0cmFwYXRocy5yZXBsYWNlKCJfX2RlZmF1bHQ6IiwgIiIpCisgICAgIyBEb24ndCBwcmVwZW5kIGVtcHR5IHN0cmluZ3MgdG8gdGhlIHBhdGggbGlzdAorICAgIGlmIGV4dHJhcGF0aHMgIT0gIiI6CisgICAgICAgIHBhdGggPSBleHRyYXBhdGhzLnNwbGl0KCI6IikgKyBwYXRoCisgICAgIyBUaGUgIjoiIGVuc3VyZXMgd2UgaGF2ZSBhbiAnZW1wdHknIG92ZXJyaWRlCisgICAgb3ZlcnJpZGVzID0gKCI6IiArIChkLmdldFZhcigiRklMRVNPVkVSUklERVMiLCBUcnVlKSBvciAiIikpLnNwbGl0KCI6IikKKyAgICBvdmVycmlkZXMucmV2ZXJzZSgpCisgICAgZm9yIG8gaW4gb3ZlcnJpZGVzOgorICAgICAgICBmb3IgcCBpbiBwYXRoOgorICAgICAgICAgICAgaWYgcCAhPSAiIjogCisgICAgICAgICAgICAgICAgZmlsZXNwYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4ocCwgbykpCisgICAgcmV0dXJuICI6Ii5qb2luKGZpbGVzcGF0aCkKKworZGVmIGV4dGVuZF92YXJpYW50cyhkLCB2YXIsIGV4dGVuZCwgZGVsaW09JzonKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsIGJiIGNsYXNzIGV4dGVuZCB2YXJpYW50cyBmb3IgdGhlIGdpdmVuIGV4dGVuZCIiIgorICAgIHZhcmlhbnRzID0gW10KKyAgICB3aG9sZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgZXh0IGluIHdob2xlLnNwbGl0KCk6CisgICAgICAgIGVleHQgPSBleHQuc3BsaXQoZGVsaW0pCisgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gZXh0ZW5kOgorICAgICAgICAgICAgdmFyaWFudHMuYXBwZW5kKGVleHRbMV0pCisgICAgcmV0dXJuICIgIi5qb2luKHZhcmlhbnRzKQorCitkZWYgbXVsdGlsaWJfcGtnX2V4dGVuZChkLCBwa2cpOgorICAgIHZhcmlhbnRzID0gKGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IHZhcmlhbnRzOgorICAgICAgICByZXR1cm4gcGtnCisgICAgcGtncyA9IHBrZworICAgIGZvciB2IGluIHZhcmlhbnRzOgorICAgICAgICBwa2dzID0gcGtncyArICIgIiArIHYgKyAiLSIgKyBwa2cKKyAgICByZXR1cm4gcGtncworCitkZWYgYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsIHZhciwgdW5pcXVlID0gVHJ1ZSwgbmVlZF9zcGxpdCA9IFRydWUsIGRlbGltID0gJyAnKToKKyAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsICR7dmFyfSBpbiBhbGwgbXVsdGlsaWIgdHVuZSBjb25maWd1cmF0aW9uIiIiCisgICAgdmFsdWVzID0gW10KKyAgICB2YWx1ZSA9IGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIKKyAgICBpZiB2YWx1ZSAhPSAiIjoKKyAgICAgICAgaWYgbmVlZF9zcGxpdDoKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHZhbHVlLnNwbGl0KGRlbGltKToKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIGl0ZW0gKyAiLSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICB2YWx1ZSA9IGxvY2FsZGF0YS5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiB2YWx1ZSAhPSAiIjoKKyAgICAgICAgICAgIGlmIG5lZWRfc3BsaXQ6CisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWUuc3BsaXQoZGVsaW0pOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgaWYgdW5pcXVlOgorICAgICAgICAjd2UgZG8gdGhpcyB0byBrZWVwIG9yZGVyIGFzIG11Y2ggYXMgcG9zc2libGUKKyAgICAgICAgcmV0ID0gW10KKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlczoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBpbiByZXQ6CisgICAgICAgICAgICAgICAgcmV0LmFwcGVuZCh2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXQgPSB2YWx1ZXMKKyAgICByZXR1cm4gIiAiLmpvaW4ocmV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy92YWxhLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmNjY0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy92YWxhLmJiY2xhc3MKQEAgLTAsMCArMSwxOCBAQAorIyBFdmVyeW9uZSBuZWVkcyB2YWxhLW5hdGl2ZSBhbmQgdGFyZ2V0cyBuZWVkIHZhbGEsIHRvbywKKyMgYmVjYXVzZSB0aGF0IGlzIHdoZXJlIHRhcmdldCBidWlsZHMgbG9vayBmb3IgLnZhcGkgZmlsZXMuCisjCitWQUxBREVQRU5EUyA9ICIiCitWQUxBREVQRU5EU19jbGFzcy10YXJnZXQgPSAidmFsYSIKK0RFUEVORFNfYXBwZW5kID0gIiB2YWxhLW5hdGl2ZSAke1ZBTEFERVBFTkRTfSIKKworIyBPdXIgcGF0Y2hlZCB2ZXJzaW9uIG9mIFZhbGEgbG9va3MgaW4gU1RBR0lOR19EQVRBRElSIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFNUQUdJTkdfREFUQURJUgorIyBVcHN0cmVhbSBWYWxhID49IDAuMTEgbG9va3MgaW4gWERHX0RBVEFfRElSUyBmb3IgLnZhcGkgZmlsZXMKK2V4cG9ydCBYREdfREFUQV9ESVJTID0gIiR7U1RBR0lOR19EQVRBRElSfSIKKworIyBQYWNrYWdlIGFkZGl0aW9uYWwgZmlsZXMKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAgICR7ZGF0YWRpcn0vdmFsYS92YXBpLyoudmFwaSBcCisgICAgJHtkYXRhZGlyfS92YWxhL3ZhcGkvKi5kZXBzIFwKKyAgICAke2RhdGFkaXJ9L2dpci0xLjAgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3dhZi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3dhZi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjIxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKQEAgLTAsMCArMSwxMyBAQAord2FmX2RvX2NvbmZpZ3VyZSgpIHsKKwkke1N9L3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9ICR7RVhUUkFfT0VDT05GfQorfQorCit3YWZfZG9fY29tcGlsZSgpICB7CisJJHtTfS93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCit3YWZfZG9faW5zdGFsbCgpIHsKKwkke1N9L3dhZiBpbnN0YWxsIC0tZGVzdGRpcj0ke0R9Cit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYgYi9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODI5Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2FiaV92ZXJzaW9uLmNvbmYKQEAgLTAsMCArMSw3IEBACisjCisjIE9FTEFZT1VUX0FCSSBhbGxvd3MgdXMgdG8gbm90aWZ5IHVzZXJzIHdoZW4gdGhlIGZvcm1hdCBvZiBUTVBESVIgY2hhbmdlcyBpbiAKKyMgYW4gaW5jb21wYXRpYmxlIHdheS4gU3VjaCBjaGFuZ2VzIHNob3VsZCB1c3VhbGx5IGJlIGRldGFpbGVkIGluIHRoZSBjb21taXQKKyMgdGhhdCBicmVha3MgdGhlIGZvcm1hdCBhbmQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QgCisjIHdpdGggZ2VuZXJhbCBhZ3JlZW1lbnQgZnJvbSB0aGUgY29yZSB0ZWFtLgorIworT0VMQVlPVVRfQUJJID0gIjExIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2JpdGJha2UuY29uZiBiL21ldGEvY29uZi9iaXRiYWtlLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNjZmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9iaXRiYWtlLmNvbmYKQEAgLTAsMCArMSw4MTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdGFuZGFyZCB0YXJnZXQgZmlsZXN5c3RlbSBwYXRocy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBJZiBjaGFuZ2luZyB0aGVzZSB2YWx1ZXMsIGJld2FyZSB0aGF0IG5hdGl2ZS9jcm9zcy9uYXRpdmVzZGsgYmJjbGFzcworIyBmaWxlcyBtYXkgYWxzbyBuZWVkIGNoYW5nZXMgdG8ga2VlcCBpbiBzeW5jLgorIworCisjIFVzZWQgYnkgbXVsdGlsaWIgY29kZSB0byBjaGFuZ2UgdGhlIGxpYnJhcnkgcGF0aHMKK2Jhc2VsaWIgPSAiJHtCQVNFTElCfSIKK2Jhc2VsaWJbdmFyZGVwdmFsdWVdID0gIiR7YmFzZWxpYn0iCitCQVNFTElCID0gImxpYiIKK0JBU0VMSUJfcG93ZXJwYzY0ID0gImxpYjY0IgorCisjIFBhdGggcHJlZml4ZXMKK2V4cG9ydCBiYXNlX3ByZWZpeCA9ICIiCitleHBvcnQgcHJlZml4ID0gIi91c3IiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL3VzciIKKworIyBCYXNlIHBhdGhzCitleHBvcnQgYmFzZV9iaW5kaXIgPSAiJHtiYXNlX3ByZWZpeH0vYmluIgorZXhwb3J0IGJhc2Vfc2JpbmRpciA9ICIke2Jhc2VfcHJlZml4fS9zYmluIgorZXhwb3J0IGJhc2VfbGliZGlyID0gIiR7YmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbm9uYXJjaF9iYXNlX2xpYmRpciA9ICIke2Jhc2VfcHJlZml4fS9saWIiCisKKyMgQXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHBhdGhzCitleHBvcnQgc3lzY29uZmRpciA9ICIke2Jhc2VfcHJlZml4fS9ldGMiCitleHBvcnQgc2VydmljZWRpciA9ICIke2Jhc2VfcHJlZml4fS9zcnYiCitleHBvcnQgc2hhcmVkc3RhdGVkaXIgPSAiJHtiYXNlX3ByZWZpeH0vY29tIgorZXhwb3J0IGxvY2Fsc3RhdGVkaXIgPSAiJHtiYXNlX3ByZWZpeH0vdmFyIgorZXhwb3J0IGRhdGFkaXIgPSAiJHtwcmVmaXh9L3NoYXJlIgorZXhwb3J0IGluZm9kaXIgPSAiJHtkYXRhZGlyfS9pbmZvIgorZXhwb3J0IG1hbmRpciA9ICIke2RhdGFkaXJ9L21hbiIKK2V4cG9ydCBkb2NkaXIgPSAiJHtkYXRhZGlyfS9kb2MiCitleHBvcnQgc3lzdGVtZF91bml0ZGlyID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vc3lzdGVtZCIKK2V4cG9ydCBzeXN0ZW1kX3N5c3RlbV91bml0ZGlyID0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vc3lzdGVtZC9zeXN0ZW0iCitleHBvcnQgbm9uYXJjaF9saWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliIgorZXhwb3J0IHN5c3RlbWRfdXNlcl91bml0ZGlyID0gIiR7bm9uYXJjaF9saWJkaXJ9L3N5c3RlbWQvdXNlciIKKworIyBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IHBhdGhzCitleHBvcnQgYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L2JpbiIKK2V4cG9ydCBzYmluZGlyID0gIiR7ZXhlY19wcmVmaXh9L3NiaW4iCitleHBvcnQgbGliZGlyID0gIiR7ZXhlY19wcmVmaXh9LyR7YmFzZWxpYn0iCitleHBvcnQgbGliZXhlY2RpciA9ICIke2xpYmRpcn0vJHtCUE59IgorZXhwb3J0IGluY2x1ZGVkaXIgPSAiJHtleGVjX3ByZWZpeH0vaW5jbHVkZSIKK2V4cG9ydCBvbGRpbmNsdWRlZGlyID0gIiR7ZXhlY19wcmVmaXh9L2luY2x1ZGUiCitsb2NhbGVkaXIgPSAiJHtsaWJkaXJ9L2xvY2FsZSIKKworIyBMaW5rYWdlIGJldHdlZW4gbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayBsYXlvdXRzCitiYXNlX2JpbmRpcl9uYXRpdmUgPSAiL2JpbiIKK2Jhc2Vfc2JpbmRpcl9uYXRpdmUgPSAiL3NiaW4iCitzeXNjb25mZGlyX25hdGl2ZSA9ICIvZXRjIgorcHJlZml4X25hdGl2ZSA9ICIvdXNyIgorYmluZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L2JpbiIKK3NiaW5kaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vc2JpbiIKK2luY2x1ZGVkaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vaW5jbHVkZSIKK2xpYmRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9saWIiCitsaWJleGVjZGlyX25hdGl2ZSA9ICIke2xpYmRpcl9uYXRpdmV9LyR7QlBOfSIKK2Jhc2VfbGliZGlyX25hdGl2ZSA9ICIvbGliIgorZGF0YWRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9zaGFyZSIKK2JpbmRpcl9jcm9zcyA9ICIvYmluIgorYmluZGlyX2Nyb3Nzc2NyaXB0cyA9ICIke2JpbmRpcn0vY3Jvc3NzY3JpcHRzIgorcHJlZml4X25hdGl2ZXNkayA9ICIvdXNyIgorYmluZGlyX25hdGl2ZXNkayA9ICIke3ByZWZpeF9uYXRpdmVzZGt9L2JpbiIKK2luY2x1ZGVkaXJfbmF0aXZlc2RrID0gIiR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK2xpYmRpcl9uYXRpdmVzZGsgPSAiJHtwcmVmaXhfbmF0aXZlc2RrfS9saWIiCitiYXNlX2xpYmRpcl9uYXRpdmVzZGsgPSAiL2xpYiIKK2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrID0gIi92YXIiCisKKyMKKyMgQ3Jvc3MgcmVjaXBlcyBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIHRhcmdldCBsYXlvdXQKKyMgOj0gaXMgdXNlZCBjYXJlZnVsbHkgaGVyZQorIwordGFyZ2V0X2RhdGFkaXIgOj0gIiR7ZGF0YWRpcn0iCisjIFVzZWQgdG8gZmluZCBlbnYvcGVybC9weXRob24KK1VTUkJJTlBBVEggPSAiJHtiaW5kaXJ9IgorVVNSQklOUEFUSF9jbGFzcy1uYXRpdmUgPSAiL3Vzci9iaW4iCitVU1JCSU5QQVRIX2NsYXNzLW5hdGl2ZXNkayA9ICIvdXNyL2JpbiIKKworIyBSb290IGhvbWUgZGlyZWN0b3J5CitST09UX0hPTUUgPz89ICIvaG9tZS9yb290IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWlsZCB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBJbW1lZGlhdGUgZXhwYW5zaW9uIHNpbmNlIHRoZXJlIGlzIG5vIHBvaW50IGluIHJlYXBlYXRlZGx5IGNhbGxpbmcKKyMgb3MudW5hbWUoKSB0aHJvdWdob3V0IHBhcnNpbmcKK0JVSUxEX0FSQ0ggOj0gIiR7QG9zLnVuYW1lKClbNF19IgorQlVJTERfT1MgOj0gIiR7QG9zLnVuYW1lKClbMF0ubG93ZXIoKX0iCitCVUlMRF9WRU5ET1IgPSAiIgorQlVJTERfU1lTID0gIiR7QlVJTERfQVJDSH0ke0JVSUxEX1ZFTkRPUn0tJHtCVUlMRF9PU30iCitCVUlMRF9QUkVGSVggPSAiIgorQlVJTERfQ0NfQVJDSCA9ICIiCitCVUlMRF9MRF9BUkNIID0gIiIKK0JVSUxEX0FTX0FSQ0ggPSAiIgorQlVJTERfRVhFRVhUID0gIiIKKworSE9TVF9BUkNIID0gIiR7VEFSR0VUX0FSQ0h9IgorSE9TVF9PUyA9ICIke1RBUkdFVF9PU30iCitIT1NUX1ZFTkRPUiA9ICIke1RBUkdFVF9WRU5ET1J9IgorSE9TVF9TWVMgPSAiJHtIT1NUX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKK0hPU1RfUFJFRklYID0gIiR7VEFSR0VUX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtUQVJHRVRfQ0NfQVJDSH0iCitIT1NUX0xEX0FSQ0ggPSAiJHtUQVJHRVRfTERfQVJDSH0iCitIT1NUX0FTX0FSQ0ggPSAiJHtUQVJHRVRfQVNfQVJDSH0iCitIT1NUX0VYRUVYVCA9ICIiCisKK1RVTkVfQVJDSCA/Pz0gIklOVkFMSUQiCitUVU5FX0NDQVJHUyA/Pz0gIiIKK1RVTkVfQ0NBUkdTW3ZhcmRlcHZhbHVlXSA9ICIke1RVTkVfQ0NBUkdTfSIKK1RVTkVfTERBUkdTID8/PSAiIgorVFVORV9BU0FSR1MgPz89ICIiCitUVU5FX0ZFQVRVUkVTID8/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtJHtERUZBVUxUVFVORX19IgorTElCQ0VYVEVOU0lPTiA/Pz0gIiIKK0FCSUVYVEVOU0lPTiA/Pz0gIiIKK1VTRV9OTFMgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCAneWVzJywgJ25vJywgZCl9IgorU0RLVVNFX05MUyA/Pz0gInllcyIKKworVEFSR0VUX0FSQ0ggPSAiJHtUVU5FX0FSQ0h9IgorVEFSR0VUX09TID0gImxpbnV4JHtMSUJDRVhURU5TSU9OfSR7QUJJRVhURU5TSU9OfSIKK1RBUkdFVF9WRU5ET1IgPSAiLW9lIgorVEFSR0VUX1NZUyA9ICIke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0ke0BbJy0nICsgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpLCAnJ11bZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpID09ICgnJyBvciAnY3VzdG9tJyldfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtUQVJHRVRfU1lTfS0iCitUQVJHRVRfQ0NfQVJDSCA9ICIke1RVTkVfQ0NBUkdTfSIKK1RBUkdFVF9MRF9BUkNIID0gIiR7VFVORV9MREFSR1N9IgorVEFSR0VUX0FTX0FSQ0ggPSAiJHtUVU5FX0FTQVJHU30iCisKK1NES19BUkNIID0gIiR7QlVJTERfQVJDSH0iCitTREtfT1MgPSAiJHtCVUlMRF9PU30iCitTREtfVkVORE9SID0gIi1vZXNkayIKK1NES19TWVMgPSAiJHtTREtfQVJDSH0ke1NES19WRU5ET1J9JHtAWyctJyArIGQuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSA9PSAoJycgb3IgJ2N1c3RvbScpXX0iCitTREtfUFJFRklYID0gIiR7U0RLX1NZU30tIgorU0RLX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK1NES1BLR1NVRkZJWCA9ICJuYXRpdmVzZGsiCitTREtfUEFDS0FHRV9BUkNIUyA9ICJhbGwgYW55IG5vYXJjaCAke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iCitTREtfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorU0RLX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKKworVFVORV9QS0dBUkNIID8/PSAiIgorUEFDS0FHRV9BUkNIID8/PSAiJHtUVU5FX1BLR0FSQ0h9IgorTUFDSElORV9BUkNIID0gIiR7QFtkLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSksIGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSldW2Jvb2woZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldLnJlcGxhY2UoJy0nLCAnXycpfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFMgPz89ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitQQUNLQUdFX0FSQ0hTID0gImFsbCBhbnkgbm9hcmNoICR7UEFDS0FHRV9FWFRSQV9BUkNIU30gJHtNQUNISU5FX0FSQ0h9IgorIyBNQUNISU5FX0FSQ0ggc2hvdWxkbid0IGJlIGluY2x1ZGVkIGhlcmUgYXMgYSB2YXJpYWJsZSBkZXBlbmRlbmN5CisjIHNpbmNlIG1hY2hpbmUgc3BlY2lmaWMgcGFja2FnZXMgYXJlIGhhbmRsZWQgdXNpbmcgbXVsdGltYWNoaW5lCitQQUNLQUdFX0FSQ0hTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FX0FSQ0giCisKK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorTVVMVElNQUNIX0hPU1RfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEYXRlL3RpbWUgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RBVEUgOj0gIiR7QHRpbWUuc3RyZnRpbWUoJyVZJW0lZCcsdGltZS5nbXRpbWUoKSl9IgorVElNRSA6PSAiJHtAdGltZS5zdHJmdGltZSgnJUglTSVTJyx0aW1lLmdtdGltZSgpKX0iCitEQVRFVElNRSA9ICIke0RBVEV9JHtUSU1FfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9wZW5lbWJlZGRlZCBTb2Z0d2FyZSBQcmVyZXF1aXNpdGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgcHl0aG9uLW5hdGl2ZSBzaG91bGQgYmUgaGVyZSBidXQgcHl0aG9uIHJlbGllcyBvbiBidWlsZGluZworIyBpdHMgb3duIGluIHN0YWdpbmcKK0FTU1VNRV9QUk9WSURFRCA9ICJcCisgICAgYnppcDItbmF0aXZlIFwKKyAgICBjaHJwYXRoLW5hdGl2ZSBcCisgICAgZ2l0LW5hdGl2ZSBcCisgICAgZ3JlcC1uYXRpdmUgXAorICAgIGRpZmZzdGF0LW5hdGl2ZSBcCisgICAgcGF0Y2gtbmF0aXZlIFwKKyAgICBwZXJsLW5hdGl2ZS1ydW50aW1lIFwKKyAgICBweXRob24tbmF0aXZlLXJ1bnRpbWUgXAorICAgIHRhci1uYXRpdmUgXAorICAgIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgXAorICAgIHRleGluZm8tbmF0aXZlIFwKKyAgICBiYXNoLW5hdGl2ZSBcCisgICAgc2VkLW5hdGl2ZSBcCisgICAgIgorIyBnemlwLW5hdGl2ZSBzaG91bGQgYmUgbGlzdGVkIGFib3ZlPworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGFja2FnZSBkZWZhdWx0IHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQTiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMF0gb3IgJ2RlZmF1bHRwa2duYW1lJ30iCitQViA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMV0gb3IgJzEuMCd9IgorUFIgPSAiJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzJdIG9yICdyMCd9IgorUEYgPSAiJHtQTn0tJHtFWFRFTkRQRX0ke1BWfS0ke1BSfSIKK0VYVEVORFBFID0gIiR7QFsnJywnJHtQRVx4N2RfJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19IgorUCA9ICIke1BOfS0ke1BWfSIKKworRVhURU5EUFJBVVRPID0gIiR7QFsnLiR7UFJBVVRPXHg3ZCcsJyddW2QuZ2V0VmFyKCdQUkFVVE8nLCBUcnVlKSBpcyBOb25lXX0iCitQUkFVVE9JTlggPSAiJHtQRn0iCisKK1BLR1YgPz0gIiR7UFZ9IgorUEtHUiA/PSAiJHtQUn0ke0VYVEVORFBSQVVUT30iCitQS0dFID89ICIke0BbJycsJyR7UEVceDdkJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19IgorRVhURU5EUEtHRVZFUiA9ICIke0BbJycsJyR7UEtHRVx4N2Q6J11bZC5nZXRWYXIoJ1BLR0UnLCBUcnVlKS5zdHJpcCgpICE9ICcnXX0iCitFWFRFTkRQS0dWID89ICIke0VYVEVORFBLR0VWRVJ9JHtQS0dWfS0ke1BLR1J9IgorCisjIEJhc2UgcGFja2FnZSBuYW1lCisjIEF1dG9tYXRpY2FsbHkgZGVyaXZlcyAiZm9vIiBmcm9tICJmb28tbmF0aXZlIiwgImZvby1jcm9zcyIgb3IgImZvby1pbml0aWFsIgorIyBvdGhlcndpc2UgaXQgaXMgdGhlIHNhbWUgYXMgUE4gYW5kIFAKK1NQRUNJQUxfUEtHU1VGRklYID0gIi1uYXRpdmUgLWNyb3NzIC1pbml0aWFsIC1pbnRlcm1lZGlhdGUgLWNyb3Nzc2RrIC1jcm9zcy1jYW5hZGlhbiIKK0JQTiA9ICIke0BiYXNlX3BydW5lX3N1ZmZpeChkLmdldFZhcignUE4nLCBUcnVlKSwgZC5nZXRWYXIoJ1NQRUNJQUxfUEtHU1VGRklYJywgVHJ1ZSkuc3BsaXQoKSwgZCl9IgorQlAgPSAiJHtCUE59LSR7UFZ9IgorCisjIFBhY2thZ2UgaW5mby4KKworU0VDVElPTiA9ICJiYXNlIgorUFJJT1JJVFkgPSAib3B0aW9uYWwiCitTVU1NQVJZID89ICIke1BOfSB2ZXJzaW9uICR7UFZ9LSR7UFJ9IgorREVTQ1JJUFRJT04gPz0gIiR7U1VNTUFSWX0uIgorCisjIFRoZSBmb2xsb3dpbmcgdHdvIGFyZSBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhleSByZXN1bHQgaW4gYSByZWN1cnNpdmUKKyMgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaWFibGUgaW4gc29tZSBjb3JuZXIgY2FzZXMuICBUaGVzZSBhcmUgbGVmdCBpbgorIyB0byBpbGx1c3RyYXRlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4KKyNTVU1NQVJZXyR7UE59ID89ICIke1NVTU1BUll9IgorI0RFU0NSSVBUSU9OXyR7UE59ID89ICIke0RFU0NSSVBUSU9OfSIKKworU1VNTUFSWV8ke1BOfS1kYmcgPz0gIiR7U1VNTUFSWX0gLSBEZWJ1Z2dpbmcgZmlsZXMiCitERVNDUklQVElPTl8ke1BOfS1kYmcgPz0gIiR7REVTQ1JJUFRJT059ICBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgRUxGIHN5bWJvbHMgYW5kIHJlbGF0ZWQgc291cmNlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIKKworU1VNTUFSWV8ke1BOfS1kZXYgPz0gIiR7U1VNTUFSWX0gLSBEZXZlbG9wbWVudCBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBzeW1ib2xpYyBsaW5rcywgaGVhZGVyIGZpbGVzLCBhbmQgXAorcmVsYXRlZCBpdGVtcyBuZWNlc3NhcnkgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50LiIKKworU1VNTUFSWV8ke1BOfS1zdGF0aWNkZXYgPz0gIiR7U1VNTUFSWX0gLSBEZXZlbG9wbWVudCBmaWxlcyAoU3RhdGljIExpYnJhcmllcykiCitERVNDUklQVElPTl8ke1BOfS1zdGF0aWNkZXY/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBzdGF0aWMgbGlicmFyaWVzIGZvciBzb2Z0d2FyZSBkZXZlbG9wbWVudC4iCisKK1NVTU1BUllfJHtQTn0tZG9jID89ICIke1NVTU1BUll9IC0gRG9jdW1lbnRhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRvYyA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKKworTElDRU5TRSA9ICJJTlZBTElEIgorTUFJTlRBSU5FUiA9ICJPRS1Db3JlIERldmVsb3BlcnMgPG9wZW5lbWJlZGRlZC1jb3JlQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmc+IgorSE9NRVBBR0UgPSAiIgorCisjIFBhY2thZ2UgZGVwZW5kZW5jaWVzIGFuZCBwcm92aWRlcy4KKworIyBFbnN1cmUgdGhhdCAtZGV2IHBhY2thZ2VzIHJlY29tbWVuZCB0aGUgY29ycmVzcG9uZGluZyAtZGV2IHBhY2thZ2VzIG9mIHRoZWlyCisjIGRlcHMsIGFuZCB0aGUgc2FtZSBmb3IgLWRiZy4KK0RFUENIQUlOX1BSRSAgPSAiIgorREVQQ0hBSU5fUE9TVCA9ICItZGV2IC1kYmciCisKK0RFUEVORFMgPSAiIgorUkRFUEVORFMgPSAiIgorUFJPVklERVMgPSAiIgorUFJPVklERVNfcHJlcGVuZCA9ICIke1BOfSAiCitSUFJPVklERVMgPSAiIgorCitNVUxUSV9QUk9WSURFUl9XSElURUxJU1QgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvbGliaW50bC1uYXRpdmUgdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCB2aXJ0dWFsL3hzZXJ2ZXIgdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1NPTElCUyA9ICIuc28uKiIKK1NPTElCU19kYXJ3aW4gPSAiLmR5bGliIgorCitTT0xJQlNERVYgPSAiLnNvIgorIyBEdWUgdG8gdGhlIG9yZGVyaW5nIG9mIFBBQ0tBR0VTIGFuZCB0aGUgbmFtaW5nIG9mIHRoZSBkZXYgc3ltbGlua3Mgb24gZGFyd2luLAorIyB3ZSBjYW4ndCBtYWtlIHRoZSBzeW1saW5rcyBlbmQgdXAgaW4gdGhlIC1kZXYgcGFja2FnZXMgZWFzaWx5IGF0IHRoaXMgcG9pbnQuIFRoaXMgaGFjaworIyBhdCBsZWFzdCBtZWFucyBidWlsZHMgYXJlbid0IGNvbXBsZXRlbHkgYnJva2VuIGFuZCBzeW1saW5rcyBkb24ndCB0YWtlIHVwIG11Y2ggc3BhY2UuCitTT0xJQlNERVZfZGFyd2luID0gIi5keWxpYmJyb2tlbiIKKworUEFDS0FHRV9CRUZPUkVfUE4gPz0gIiIKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZGV2ICR7UE59LWRvYyAke1BOfS1sb2NhbGUgJHtQQUNLQUdFX0JFRk9SRV9QTn0gJHtQTn0iCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS1sb2NhbGUtLioiCitGSUxFUyA9ICIiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiAke2xpYmV4ZWNkaXJ9LyogJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorICAgICAgICAgICAgJHtzeXNjb25mZGlyfSAke3NoYXJlZHN0YXRlZGlyfSAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9LyogJHtiYXNlX3NiaW5kaXJ9LyogXAorICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vKiR7U09MSUJTfSBcCisgICAgICAgICAgICAke2Jhc2VfcHJlZml4fS9saWIvdWRldi9ydWxlcy5kICR7cHJlZml4fS9saWIvdWRldi9ydWxlcy5kIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59ICR7bGliZGlyfS8ke0JQTn0vKiBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMgXAorICAgICAgICAgICAgJHtkYXRhZGlyfS9pZGwgJHtkYXRhZGlyfS9vbWYgJHtkYXRhZGlyfS9zb3VuZHMgXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Jvbm9iby9zZXJ2ZXJzIgorCitGSUxFU18ke1BOfS1iaW4gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorCitGSUxFU18ke1BOfS1kb2MgPSAiJHtkb2NkaXJ9ICR7bWFuZGlyfSAke2luZm9kaXJ9ICR7ZGF0YWRpcn0vZ3RrLWRvYyBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L2dub21lL2hlbHAiCitTRUNUSU9OXyR7UE59LWRvYyA9ICJkb2MiCisKK0ZJTEVTX1NPTElCU0RFViA/PSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9ICR7RklMRVNfU09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FjbG9jYWwgJHtiYXNlX2xpYmRpcn0vKi5vIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSIKK1NFQ1RJT05fJHtQTn0tZGV2ID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSAke2xpYmRpcn0vJHtCUE59LyouYSIKK1NFQ1RJT05fJHtQTn0tc3RhdGljZGV2ID0gImRldmVsIgorUkRFUEVORFNfJHtQTn0tc3RhdGljZGV2ID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworRE9UREVCVUctZGJnID0gIiR7YmluZGlyfS8uZGVidWcgJHtzYmluZGlyfS8uZGVidWcgJHtsaWJleGVjZGlyfS8uZGVidWcgJHtsaWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAke2Jhc2VfYmluZGlyfS8uZGVidWcgJHtiYXNlX3NiaW5kaXJ9Ly5kZWJ1ZyAke2Jhc2VfbGliZGlyfS8uZGVidWcgJHtsaWJkaXJ9LyR7QlBOfS8uZGVidWcgXAorICAgICAgICAgICAgJHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLy5kZWJ1ZyAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8uZGVidWcgL3Vzci9zcmMvZGVidWciCisKK0RFQlVHRklMRURJUkVDVE9SWS1kYmcgPSAiL3Vzci9saWIvZGVidWcgL3Vzci9zcmMvZGVidWciCisKK0ZJTEVTXyR7UE59LWRiZyA9ICIke0BkLmdldFZhcihbJ0RPVERFQlVHLWRiZycsICdERUJVR0ZJTEVESVJFQ1RPUlktZGJnJ11bZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnLCBUcnVlKSA9PSAnZGVidWctZmlsZS1kaXJlY3RvcnknXSwgVHJ1ZSl9IgorCitTRUNUSU9OXyR7UE59LWRiZyA9ICJkZXZlbCIKK0FMTE9XX0VNUFRZXyR7UE59LWRiZyA9ICIxIgorCitGSUxFU18ke1BOfS1sb2NhbGUgPSAiJHtkYXRhZGlyfS9sb2NhbGUiCisKKyMgRmlsZSBtYW5pZmVzdAorCitGSUxFX0RJUk5BTUUgPSAiJHtAb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKX0iCisjIEZJTEVTUEFUSCBpcyBzZXQgaW4gYmFzZS5iYmNsYXNzCisjRklMRVNQQVRIID0gIiR7RklMRV9ESVJOQU1FfS8ke1BGfToke0ZJTEVfRElSTkFNRX0vJHtQfToke0ZJTEVfRElSTkFNRX0vJHtQTn06JHtGSUxFX0RJUk5BTUV9LyR7QlB9OiR7RklMRV9ESVJOQU1FfS8ke0JQTn06JHtGSUxFX0RJUk5BTUV9L2ZpbGVzOiR7RklMRV9ESVJOQU1FfSIKKyMgVGhpcyBkZWZhdWx0IHdhcyBvbmx5IHVzZWQgZm9yIGNoZWNraW5nCitGSUxFU0VYVFJBUEFUSFMgPz0gIl9fZGVmYXVsdDoiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHZW5lcmFsIHdvcmsgYW5kIG91dHB1dCBkaXJlY3RvcmllcyBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUTVBESVIgPz0gIiR7VE9QRElSfS90bXAiCitDQUNIRSA9ICIke1RNUERJUn0vY2FjaGUke0BbJycsICcvJyArIHN0cihkLmdldFZhcignTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignTUFDSElORScsIFRydWUpKV19JHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ1NES01BQ0hJTkUnLCBUcnVlKSldfSIKKyMgVGhlIHBlcnNpc3RlbnQgY2FjaGUgc2hvdWxkIGJlIHNoYXJlZCBieSBhbGwgYnVpbGRzCitQRVJTSVNURU5UX0RJUiA9ICIke1RPUERJUn0vY2FjaGUiCitMT0dfRElSID0gIiR7VE1QRElSfS9sb2ciCitDT19ESVIgPSAiJHtETF9ESVJ9IgorQ1ZTRElSID0gIiR7Q09fRElSfS9jdnMiCitTVk5ESVIgPSAiJHtDT19ESVJ9L3N2biIKK0dJVERJUiA9ICIke0NPX0RJUn0vZ2l0MiIKK0JaUkRJUiA9ICIke0NPX0RJUn0vYnpyIgorSEdESVIgPSAiJHtDT19ESVJ9L2hnIgorCitTVEFNUFNfRElSID89ICIke1RNUERJUn0vc3RhbXBzIgorU1RBTVAgPSAiJHtTVEFNUFNfRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorU1RBTVBDTEVBTiA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyotKiIKK0JBU0VfV09SS0RJUiA/PSAiJHtUTVBESVJ9L3dvcmsiCitXT1JLRElSID0gIiR7QkFTRV9XT1JLRElSfS8ke01VTFRJTUFDSF9UQVJHRVRfU1lTfS8ke1BOfS8ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorVCA9ICIke1dPUktESVJ9L3RlbXAiCitEID0gIiR7V09SS0RJUn0vaW1hZ2UiCitTID0gIiR7V09SS0RJUn0vJHtCUH0iCitCID0gIiR7U30iCisKK1NUQUdJTkdfRElSID0gIiR7VE1QRElSfS9zeXNyb290cyIKKworU1RBR0lOR19ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJ9LyR7QlVJTERfU1lTfSIKK1NUQUdJTkdfQklORElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9IgorU1RBR0lOR19CSU5ESVJfQ1JPU1MgPSAiJHtTVEFHSU5HX0JJTkRJUn0vY3Jvc3NzY3JpcHRzIgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK1NUQUdJTkdfTElCRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmRpcl9uYXRpdmV9IgorU1RBR0lOR19MSUJFWEVDRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmV4ZWNkaXJfbmF0aXZlfSIKK1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlfSIKK1NUQUdJTkdfU0JJTkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0iCitTVEFHSU5HX0lOQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtpbmNsdWRlZGlyX25hdGl2ZX0iCitTVEFHSU5HX0VUQ0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0iCitTVEFHSU5HX0RBVEFESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9IgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0iCitTVEFHSU5HX0JJTkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtiaW5kaXJ9IgorU1RBR0lOR19MSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZGlyfSIKK1NUQUdJTkdfTElCRVhFQ0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSIKK1NUQUdJTkdfQkFTRUxJQkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0iCitTVEFHSU5HX0lOQ0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtpbmNsdWRlZGlyfSIKK1NUQUdJTkdfREFUQURJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtkYXRhZGlyfSIKK1NUQUdJTkdfRVhFQ1BSRUZJWERJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtleGVjX3ByZWZpeH0iCitTVEFHSU5HX0xPQURFUl9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9sb2FkZXIiCitTVEFHSU5HX0ZJUk1XQVJFX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L2Zpcm13YXJlIgorCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSIKK1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQID0gIiR7U1RBR0lOR19ESVJfVEFSR0VUfS10Y2Jvb3RzdHJhcCIKKworIyBTZXR0aW5nIERFUExPWV9ESVIgb3V0c2lkZSBvZiBUTVBESVIgaXMgaGVscGZ1bCwgd2hlbiB5b3UgYXJlIHVzaW5nCisjIHBhY2thZ2VkIHN0YWdpbmcgYW5kL29yIG11bHRpbWFjaGluZS4KK0RFUExPWV9ESVIgPz0gIiR7VE1QRElSfS9kZXBsb3kiCitERVBMT1lfRElSX1RBUiA9ICIke0RFUExPWV9ESVJ9L3RhciIKK0RFUExPWV9ESVJfSVBLID0gIiR7REVQTE9ZX0RJUn0vaXBrIgorREVQTE9ZX0RJUl9SUE0gPSAiJHtERVBMT1lfRElSfS9ycG0iCitERVBMT1lfRElSX0RFQiA9ICIke0RFUExPWV9ESVJ9L2RlYiIKK0RFUExPWV9ESVJfSU1BR0UgPz0gIiR7REVQTE9ZX0RJUn0vaW1hZ2VzLyR7TUFDSElORX0iCitERVBMT1lfRElSX1RPT0xTID0gIiR7REVQTE9ZX0RJUn0vdG9vbHMiCisKK1BLR0RBVEFfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vcGtnZGF0YSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNESyB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0RLX05BTUVfUFJFRklYID89ICJvZWNvcmUiCitTREtfTkFNRSA9ICIke1NES19OQU1FX1BSRUZJWH0tJHtTREtfQVJDSH0tJHtUVU5FX1BLR0FSQ0h9IgorU0RLUEFUSCA9ICIvdXNyL2xvY2FsLyR7U0RLX05BTUVfUFJFRklYfS0ke1NES19BUkNIfSIKK1NES1BBVEhOQVRJVkUgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgS2VybmVsIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworT0xERVNUX0tFUk5FTCA9ICIyLjYuMzIiCitPTERFU1RfS0VSTkVMX2FhcmNoNjQgPSAiMy4xNCIKK1NUQUdJTkdfS0VSTkVMX0RJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvJHtNQUNISU5FfS9rZXJuZWwtc291cmNlIgorU1RBR0lOR19LRVJORUxfQlVJTERESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkLyR7TUFDSElORX0va2VybmVsLWJ1aWxkLWFydGlmYWN0cyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNwZWNpZmljIGltYWdlIGNyZWF0aW9uIGFuZCByb290ZnMgcG9wdWxhdGlvbiBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0lNQUdFX1JPT1RGUyA9ICIke1dPUktESVJ9L3Jvb3RmcyIKK0lNQUdFX0JBU0VOQU1FID0gIiR7UE59IgorSU1BR0VfTkFNRSA9ICIke0lNQUdFX0JBU0VOQU1FfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorSU1BR0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gKz0gIkRBVEVUSU1FIgorSU1BR0VfTElOS19OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0iCisKKyMgVGhpcyBvcHRpb24gYWxsb3dzIGZvciBhIHBlcmNlbnRhZ2Ugb3ZlcmFnZSBvZiB0aGUgYWN0dWFsIGltYWdlIHNpemUgcmF0aGVyIHRoYW4gYQorIyBmaXhlZCBleHRyYSBzcGFjZSwgdGhpcyBpcyBzcGFjZSBuZWVkZWQgZm9yIGluaXRpYWwgc3RhcnR1cCBhbmQgYmFzaWMgb3BlcmF0aW9ucy4KK0lNQUdFX09WRVJIRUFEX0ZBQ1RPUiA/PSAiMS4zIgorIyBUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIGFkZGluZyBhZGRpdGlvbmFsIHNwYWNlIGluIEsgYWJvdmUgYW5kIGJleW9uZCB3aGF0IHRoZQorIyBJTUFHRV9PVkVSSEVBRF9GQUNUT1IgbWlnaHQgYWRkLiBUaGlzIHNwYWNlIGlzIGZvciBhZGRpdGlvbmFsIHBhY2thZ2VzLCB1c2VyIGRhdGEsIC4uLgorIyBUbyBzZXQgYSBmaXhlZCBzaXplIHRoZW4gb3ZlcnJpZGluZyBJTUFHRV9ST09URlNfU0laRSB3aXRoIHRoZSBtYXggc2l6ZSBvbmUgd2FudHMKKyMgc2hvdWxkIGRvIHRoZSB0cmljaworSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID89ICIwIgorCitFWFRSQV9JTUFHRURFUEVORFMgPSAiIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVG9vbGNoYWluIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUEFUSF9wcmVwZW5kID0gIiR7Q09SRUJBU0V9L3NjcmlwdHM6JHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59OiR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke1NUQUdJTkdfRElSX05BVElWRX0ke2Jhc2Vfc2JpbmRpcl9uYXRpdmV9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9iaW5kaXJfbmF0aXZlfToiCitleHBvcnQgUEFUSAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgdXRpbGl0eSBpbmZvLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0NDQUNIRSA/Pz0gIiIKKyMgRGlzYWJsZSBjY2FjaGUgZXhwbGljaXRseSBpZiBDQ0FDSEUgaXMgbnVsbCBzaW5jZSBnY2MgbWF5IGJlIGEgc3ltbGluaworIyBvZiBjY2FjaGUgc29tZSBkaXN0cmlidXRpb25zIChlLmcuLCBGZWRvcmEgMTcpLgorZXhwb3J0IENDQUNIRV9ESVNBQkxFID8/PSAiJHtAWzAsMV1bZC5nZXRWYXIoJ0NDQUNIRScsIFRydWUpID09ICcnXX0iCisjIEFzc2lnbiBDQ0FDSEVfRElSIGEgZGVmYXVsdCB2YWx1ZSB0byBmaXggYSBidWcgb2YgY2NhY2hlIDMuMS43LAorIyBzaW5jZSBpdCB3b3VsZCBhbHdheXMgY3JlYXRlIENDQUNIRV9ESVIvLmNjYWNoZSBldmVuIGlmCisjIENDQUNIRV9ESVNBQkxFID0gMS4KK2V4cG9ydCBDQ0FDSEVfRElSID8/PSAiJHtAb3MuZ2V0ZW52KCdIT01FJyl9IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworZXhwb3J0IENDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IENYWCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWcrKyAke0hPU1RfQ0NfQVJDSH0ke1RPT0xDSEFJTl9PUFRJT05TfSIKK2V4cG9ydCBGQyA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdmb3J0cmFuICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IENQUCA9ICIke0hPU1RfUFJFRklYfWdjYyAtRSR7VE9PTENIQUlOX09QVElPTlN9ICR7SE9TVF9DQ19BUkNIfSIKK2V4cG9ydCBMRCA9ICIke0hPU1RfUFJFRklYfWxkJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtIT1NUX0xEX0FSQ0h9IgorZXhwb3J0IENDTEQgPSAiJHtDQ30iCitleHBvcnQgQVIgPSAiJHtIT1NUX1BSRUZJWH1hciIKK2V4cG9ydCBBUyA9ICIke0hPU1RfUFJFRklYfWFzICR7SE9TVF9BU19BUkNIfSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtIT1NUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgU1RSSVAgPSAiJHtIT1NUX1BSRUZJWH1zdHJpcCIKK2V4cG9ydCBPQkpDT1BZID0gIiR7SE9TVF9QUkVGSVh9b2JqY29weSIKK2V4cG9ydCBPQkpEVU1QID0gIiR7SE9TVF9QUkVGSVh9b2JqZHVtcCIKK2V4cG9ydCBTVFJJTkdTID0gIiR7SE9TVF9QUkVGSVh9c3RyaW5ncyIKK2V4cG9ydCBOTSA9ICIke0hPU1RfUFJFRklYfW5tIgorUFlUSE9OID0gIiR7QHN5cy5leGVjdXRhYmxlfSIKKworZXhwb3J0IEJVSUxEX0NDID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NYWCA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nKysgJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9GQyA9ICIke0NDQUNIRX0ke0JVSUxEX1BSRUZJWH1nZm9ydHJhbiAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NQUCA9ICIke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSAtRSIKK2V4cG9ydCBCVUlMRF9MRCA9ICIke0JVSUxEX1BSRUZJWH1sZCAke0JVSUxEX0xEX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0NDTEQgPSAiJHtCVUlMRF9QUkVGSVh9Z2NjICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQVIgPSAiJHtCVUlMRF9QUkVGSVh9YXIiCitleHBvcnQgQlVJTERfQVMgPSAiJHtCVUlMRF9QUkVGSVh9YXMgJHtCVUlMRF9BU19BUkNIfSIKK2V4cG9ydCBCVUlMRF9SQU5MSUIgPSAiJHtCVUlMRF9QUkVGSVh9cmFubGliIgorZXhwb3J0IEJVSUxEX1NUUklQID0gIiR7QlVJTERfUFJFRklYfXN0cmlwIgorZXhwb3J0IEJVSUxEX05NID0gIiR7QlVJTERfUFJFRklYfW5tIgorCitleHBvcnQgTUFLRSA9ICJtYWtlIgorRVhUUkFfT0VNQUtFID0gIi1lIE1BS0VGTEFHUz0iCitFWFRSQV9PRUNPTkYgPSAiIgorZXhwb3J0IExDX0FMTCA9ICJDIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGF0Y2ggaGFuZGxpbmcuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1BBVENIVE9PTCA9ICJxdWlsdCIKK1BBVENIUkVTT0xWRSA9ICJub29wIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgZmxhZ3MgYW5kIG9wdGlvbnMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZXhwb3J0IEJVSUxEX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorQlVJTERTREtfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBDUFBGTEFHUyA9ICIke1RBUkdFVF9DUFBGTEFHU30iCitleHBvcnQgVEFSR0VUX0NQUEZMQUdTID0gIiIKKyNleHBvcnQgVEFSR0VUX0NQUEZMQUdTID0gIi1pc3lzdGVtJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworZXhwb3J0IEJVSUxEX0NGTEFHUyA9ICIke0JVSUxEX0NQUEZMQUdTfSAke0JVSUxEX09QVElNSVpBVElPTn0iCitCVUlMRFNES19DRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30gJHtCVUlMRF9PUFRJTUlaQVRJT059IgorZXhwb3J0IENGTEFHUyA9ICIke1RBUkdFVF9DRkxBR1N9IgorZXhwb3J0IFRBUkdFVF9DRkxBR1MgPSAiJHtUQVJHRVRfQ1BQRkxBR1N9ICR7U0VMRUNURURfT1BUSU1JWkFUSU9OfSIKKworZXhwb3J0IEJVSUxEX0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK2V4cG9ydCBDWFhGTEFHUyA9ICIke1RBUkdFVF9DWFhGTEFHU30iCitleHBvcnQgVEFSR0VUX0NYWEZMQUdTID0gIiR7VEFSR0VUX0NGTEFHU30iCisKK2V4cG9ydCBCVUlMRF9MREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1MJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0JBU0VfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLU8xIgorCitCVUlMRFNES19MREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7bGliZGlyfSAtV2wsLU8xIFwKKyAgICAgICAgICAgICAgICAgICAgLUwke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0RJUl9IT1NUfSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aCwke2Jhc2VfbGliZGlyfSAtV2wsLU8xIgorCitMSU5LRVJfSEFTSF9TVFlMRSA/Pz0gImdudSIKKyMgbWlwcyBkb2VzIG5vdCBzdXBwb3J0IEdOVSBoYXNoIHN0eWxlIHRoZXJlZm9yZSB3ZSBvdmVycmlkZQorTElOS0VSX0hBU0hfU1RZTEVfbWlwcyA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwc2VsID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjQgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzNjRuMzIgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NGVsbjMyID0gInN5c3YiCitUQVJHRVRfTElOS19IQVNIX1NUWUxFID89ICIke0BbJy1XbCwtLWhhc2gtc3R5bGU9Z251JywnJ11bZC5nZXRWYXIoJ0xJTktFUl9IQVNIX1NUWUxFJywgVHJ1ZSkgIT0gJ2dudSddfSIKKworZXhwb3J0IExERkxBR1MgPSAiJHtUQVJHRVRfTERGTEFHU30iCitleHBvcnQgVEFSR0VUX0xERkxBR1MgPSAiLVdsLC1PMSAke1RBUkdFVF9MSU5LX0hBU0hfU1RZTEV9IgorI2V4cG9ydCBUQVJHRVRfTERGTEFHUyA9ICItTCR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bGliZGlyfSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xpYmRpcn0gXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLU8xIgorCisjIFdoaWNoIGZsYWdzIHRvIGxlYXZlIGJ5IHN0cmlwLWZsYWdzKCkgaW4gYmluL2J1aWxkL29lYnVpbGQuc2ggPworQUxMT1dFRF9GTEFHUyA9ICItTyAtbWNwdSAtbWFyY2ggLXBpcGUiCisKKyMgUGFzcyBwYXJhbGxlbCBtYWtlIG9wdGlvbnMgdG8gdGhlIGNvbXBpbGUgdGFzaworRVhUUkFfT0VNQUtFX3ByZXBlbmRfdGFzay1jb21waWxlID0gIiR7UEFSQUxMRUxfTUFLRX0gIgorUEFSQUxMRUxfTUFLRUlOU1QgPz89ICIke1BBUkFMTEVMX01BS0V9IgorIyBQYXNzIHBhcmFsbGVsIG1ha2Ugb3B0aW9ucyB0byB0aGUgaW5zdGFsbCB0YXNrCitFWFRSQV9PRU1BS0VfcHJlcGVuZF90YXNrLWluc3RhbGwgPSAiJHtQQVJBTExFTF9NQUtFSU5TVH0gIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3B0aW1pemF0aW9uIGZsYWdzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitERUJVR19GTEFHUyA/PSAiLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIgorIyBEaXNhYmxlZCB1bnRpbCB0aGUgb3B0aW9uIHdvcmtzIHByb3Blcmx5IC1mZWxpbWluYXRlLWR3YXJmMi1kdXBzCitGVUxMX09QVElNSVpBVElPTiA9ICItTzIgLXBpcGUgJHtERUJVR19GTEFHU30iCitERUJVR19PUFRJTUlaQVRJT04gPSAiLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJHtERUJVR19GTEFHU30gLXBpcGUiCitTRUxFQ1RFRF9PUFRJTUlaQVRJT04gPSAiJHtAZC5nZXRWYXIoWydGVUxMX09QVElNSVpBVElPTicsICdERUJVR19PUFRJTUlaQVRJT04nXVtkLmdldFZhcignREVCVUdfQlVJTEQnLCBUcnVlKSA9PSAnMSddLCBUcnVlKX0iCitTRUxFQ1RFRF9PUFRJTUlaQVRJT05bdmFyZGVwc10gKz0gIkZVTExfT1BUSU1JWkFUSU9OIERFQlVHX09QVElNSVpBVElPTiIKK0JVSUxEX09QVElNSVpBVElPTiA9ICItTzIgLXBpcGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTZXR0aW5ncyB1c2VkIGJ5IGJpdGJha2UtbGF5ZXJzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitCQkxBWUVSU19MQVlFUklOREVYX1VSTCA/Pz0gImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4LyIKK0JCTEFZRVJTX0ZFVENIX0RJUiA/Pz0gIiR7Q09SRUJBU0V9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRG93bmxvYWQgbG9jYXRpb25zIGFuZCB1dGlsaXRpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQVBBQ0hFX01JUlJPUiA9ICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZGlzdCIKK0RFQklBTl9NSVJST1IgPSAiZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wiCitHRU5UT09fTUlSUk9SID0gImh0dHA6Ly9kaXN0ZmlsZXMuZ2VudG9vLm9yZy9kaXN0ZmlsZXMiCitHTk9NRV9HSVQgPSAiZ2l0Oi8vZ2l0Lmdub21lLm9yZyIKK0dOT01FX01JUlJPUiA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcyIKK0dOVV9NSVJST1IgPSAiaHR0cDovL2Z0cC5nbnUub3JnL2dudSIKK0dQRV9NSVJST1IgPSAiaHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZSIKK0tFUk5FTE9SR19NSVJST1IgPSAiaHR0cDovL2tlcm5lbC5vcmcvcHViIgorU09VUkNFRk9SR0VfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0IgorWExJQlNfTUlSUk9SID0gImh0dHA6Ly94bGlicy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZSIKK1hPUkdfTUlSUk9SID0gImh0dHA6Ly94b3JnLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcyIKK1NBVkFOTkFIX0dOVV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLmdudS5vcmcvcmVsZWFzZXMiCitTQVZBTk5BSF9OT05HTlVfTUlSUk9SID0gImh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5ub25nbnUub3JnL3JlbGVhc2VzIgorQ1BBTl9NSVJST1IgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOIgorCitTUkNfVVJJW3ZhcmRlcHNleGNsdWRlXSArPSAiXAorICAgIEFQQUNIRV9NSVJST1IgXAorICAgIENQQU5fTUlSUk9SIFwKKyAgICBERUJJQU5fTUlSUk9SIFwKKyAgICBHRU5UT09fTUlSUk9SIFwKKyAgICBHTk9NRV9HSVQgXAorICAgIEdOT01FX01JUlJPUiBcCisgICAgR05VX01JUlJPUiBcCisgICAgR1BFX01JUlJPUiBcCisgICAgS0VSTkVMT1JHX01JUlJPUiBcCisgICAgU0FWQU5OQUhfR05VX01JUlJPUiBcCisgICAgU0FWQU5OQUhfTk9OR05VX01JUlJPUiBcCisgICAgU09VUkNFRk9SR0VfTUlSUk9SIFwKKyAgICBYTElCU19NSVJST1IgXAorICAgIFhPUkdfTUlSUk9SIFwKKyIKKworIyBZb3UgY2FuIHVzZSB0aGUgbWlycm9yIG9mIHlvdXIgY291bnRyeSB0byBnZXQgZmFzdGVyIGRvd25sb2FkcyBieSBwdXR0aW5nCisjICBleHBvcnQgREVCSUFOX01JUlJPUiA9ICJmdHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCIKKyMgICAgIGludG8geW91ciBsb2NhbC5jb25mCisKK0ZFVENIQ01EX3N2biA9ICIvdXNyL2Jpbi9lbnYgc3ZuIC0tbm9uLWludGVyYWN0aXZlIC0tdHJ1c3Qtc2VydmVyLWNlcnQiCitGRVRDSENNRF9jdnMgPSAiL3Vzci9iaW4vZW52IGN2cyIKK0ZFVENIQ01EX3dnZXQgPSAiL3Vzci9iaW4vZW52IHdnZXQgLXQgMiAtVCAzMCAtbnYgLS1wYXNzaXZlLWZ0cCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIgorRkVUQ0hDTURfYnpyID0gIi91c3IvYmluL2VudiBienIiCitGRVRDSENNRF9oZyA9ICIvdXNyL2Jpbi9lbnYgaGciCisKK1NSQ0RBVEUgPSAiJHtEQVRFfSIKK1NSQ1JFViA/Pz0gIklOVkFMSUQiCitBVVRPUkVWID0gIiR7QGJiLmZldGNoMi5nZXRfYXV0b3JldihkKX0iCitTUkNQViA9ICIke0BiYi5mZXRjaDIuZ2V0X3NyY3JldihkKX0iCitTUkNQVlt2YXJkZXB2YWx1ZV0gPSAiJHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiIgorCisjIFVzZSBwc2V1ZG8gYXMgdGhlIGZha2Vyb290IGltcGxlbWVudGF0aW9uCitQU0VVRE9fTE9DQUxTVEFURURJUiA/PSAiJHtXT1JLRElSfS9wc2V1ZG8vIgorUFNFVURPX1BBU1NXRCA/PSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2V4cG9ydCBQU0VVRE9fRElTQUJMRUQgPSAiMSIKKyNleHBvcnQgUFNFVURPX1BSRUZJWCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorI2V4cG9ydCBQU0VVRE9fQklORElSID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0iCisjZXhwb3J0IFBTRVVET19MSUJESVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JFBTRVVET0JJTkRJUi8uLi9saWIvcHNldWRvL2xpYgorRkFLRVJPT1RCQVNFRU5WID0gIlBTRVVET19CSU5ESVI9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFBTRVVET19MSUJESVI9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Ly4uL2xpYi9wc2V1ZG8vbGliIFBTRVVET19QUkVGSVg9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9Ly4uLy4uLyBQU0VVRE9fRElTQUJMRUQ9MSIKK0ZBS0VST09UQ01EID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wc2V1ZG8iCitGQUtFUk9PVEVOViA9ICJQU0VVRE9fUFJFRklYPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0gUFNFVURPX0xPQ0FMU1RBVEVESVI9JHtQU0VVRE9fTE9DQUxTVEFURURJUn0gUFNFVURPX1BBU1NXRD0ke1BTRVVET19QQVNTV0R9IFBTRVVET19OT1NZTUxJTktFWFA9MSBQU0VVRE9fRElTQUJMRUQ9MCIKK0ZBS0VST09UTk9FTlYgPSAiUFNFVURPX1VOTE9BRD0xIgorRkFLRVJPT1RESVJTID0gIiR7UFNFVURPX0xPQ0FMU1RBVEVESVJ9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlID89ICJwc2V1ZG8tbmF0aXZlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBHTlUgcGF0Y2ggdHJpZXMgdG8gYmUgaW50ZWxsZ2VudCBhYm91dCBjaGVja2luZyBvdXQgcmVhZC1vbmx5IGZpbGVzIGZyb20KKyMgYSBSQ1MsIHdoaWNoIGZyZWFrcyBvdXQgdGhvc2Ugc3BlY2lhbCBmb2xrcyB3aXRoIGFjdGl2ZSBQZXJmb3JjZSBjbGllbnRzCisjIHRoZSBmb2xsb3dpbmcgbWFrZXMgcGF0Y2ggaWdub3JlIFJDUzoKKworZXhwb3J0IFBBVENIX0dFVD0iMCIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5vdCBzdXJlIGFib3V0IHRoZSByZXN0IG9mIHRoaXMgeWV0LgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgUHJlLWJ1aWxkIGNvbmZpZ3VyYXRpb24gb3V0cHV0CitCVUlMRENGR19IRUFERVIgPSAiQnVpbGQgQ29uZmlndXJhdGlvbjoiCitCVUlMRENGR19WQVJTID0gIkJCX1ZFUlNJT04gQlVJTERfU1lTIE5BVElWRUxTQlNUUklORyBUQVJHRVRfU1lTIE1BQ0hJTkUgRElTVFJPIERJU1RST19WRVJTSU9OIFRVTkVfRkVBVFVSRVMgVEFSR0VUX0ZQVSIKK0JVSUxEQ0ZHX1ZBUlNbdHlwZV0gPSAibGlzdCIKK0JVSUxEQ0ZHX05FRURFRFZBUlMgPSAiVEFSR0VUX0FSQ0ggVEFSR0VUX09TIgorQlVJTERDRkdfTkVFREVEVkFSU1t0eXBlXSA9ICJsaXN0IgorCisjIE90aGVyCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJkaXJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1BBVEggPSAiJHtQS0dfQ09ORklHX0RJUn06JHtTVEFHSU5HX0RBVEFESVJ9L3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX0xJQkRJUiA9ICIke1BLR19DT05GSUdfRElSfSIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0iCitleHBvcnQgUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEID0gInllcyIKKworIyMjCisjIyMgQ29uZmlnIGZpbGUgcHJvY2Vzc2luZworIyMjCisKKyMgQW4gZW1wdHkgZGlzdHJvIGxlYWRzIHRvIDo6IGVudHJpZXMgaW4gT1ZFUlJJREVTIGFuZCBGSUxFT1ZFUlJJREVTIHdoaWNoCisjIGlzIGEgYmFkIGlkZWEuIFNldHRpbmcgYSBkdW1teSB2YWx1ZSBpcyBiZXR0ZXIgdGhhbiBhIHRvbiBvZiBhbm9ueW1vdXMgcHl0aG9uLgorRElTVFJPID8/PSAibm9kaXN0cm8iCitESVNUUk9fTkFNRSA/Pz0gIk9wZW5FbWJlZGRlZCIKKyMgT3ZlcnJpZGVzIGFyZSBwcm9jZXNzZWQgbGVmdCB0byByaWdodCwgc28gdGhlIG9uZXMgdGhhdCBhcmUgbmFtZWQgbGF0ZXIgdGFrZSBwcmVjZWRlbmNlLgorIyBZb3UgZ2VuZXJhbGx5IHdhbnQgdGhlbSB0byBnbyBmcm9tIGxlYXN0IHRvIG1vc3Qgc3BlY2lmaWMuCisjCisjIFRoaXMgbWVhbnMgdGhhdCBhbiBlbnZpb25tZW50IHZhcmlhYmxlIG5hbWVkICc8Zm9vPl9hcm0nIG92ZXJyaWRlcyBhbgorIyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnPGZvbz4nICh3aGVuICR7VEFSR0VUX0FSQ0h9IGlzIGFybSkuCisjIEFuIGVudmlyb25tZW50IHZhcmlhYmxlICc8Zm9vPl9xZW11YXJtJyBvdmVycmlkZXMgJzxmb28+JyBhbmQgb3ZlcnJpZGVzCisjICc8Zm9vPl9hcm0nIHdoZW4gJHtNQUNISU5FfSBpcyAncWVtdWFybScuCisjIElmIHlvdSB1c2UgY29tYmluYXRpb24gaWUgJzxmb28+X3FlbXVhcm1fYXJtJywgdGhlbiAnPGZvbz5fcWVtdWFybV9hcm0nIHdpbGwgb3ZlcnJpZGUKKyMgJzxmb28+X3FlbXVhcm0nIGFuZCB0aGVuICc8Zm9vPicgd2lsbCBiZSBvdmVycmlkZW4gd2l0aCB0aGF0IHZhbHVlIGZyb20gJzxmb28+X3FlbXVhcm0nLgorIyBBbmQgZmluYWxseSAnPGZvbz5fZm9yY2V2YXJpYWJsZScgb3ZlcnJpZGVzIGFueSBzdGFuZGFyZCB2YXJpYWJsZSwgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eS4KKyMKKyMgVGhpcyB3b3JrcyBmb3IgIGZ1bmN0aW9ucyBhcyB3ZWxsLCB0aGV5IGFyZSByZWFsbHkganVzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisjIERlZmF1bHQgT1ZFUlJJREVTIHRvIG1ha2UgY29tcGlsYXRpb24gZmFpbCBmYXN0IGluIGNhc2Ugb2YgYnVpbGQgc3lzdGVtIG1pc2NvbmZpZ3VyYXRpb24uCitPVkVSUklERVMgPSAiJHtUQVJHRVRfT1N9OiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06YnVpbGQtJHtCVUlMRF9PU306cG4tJHtQTn06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU306JHtDTEFTU09WRVJSSURFfTpmb3JjZXZhcmlhYmxlIgorT1ZFUlJJREVTW3ZhcmRlcHNleGNsdWRlXSA9ICJNQUNISU5FT1ZFUlJJREVTIgorQ0xBU1NPVkVSUklERSA/PSAiY2xhc3MtdGFyZ2V0IgorRElTVFJPT1ZFUlJJREVTID89ICIke0BkLmdldFZhcignRElTVFJPJywgVHJ1ZSkgb3IgJyd9IgorTUFDSElORU9WRVJSSURFUyA/PSAiJHtNQUNISU5FfSIKK01BQ0hJTkVPVkVSUklERVNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkUiCisKK0ZJTEVTT1ZFUlJJREVTID0gIiR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06JHtNQUNISU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbmNsdWRlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgZmlsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVxdWlyZSBjb25mL2FiaV92ZXJzaW9uLmNvbmYKK2luY2x1ZGUgY29uZi9zaXRlLmNvbmYKK2luY2x1ZGUgY29uZi9hdXRvLmNvbmYKK2luY2x1ZGUgY29uZi9sb2NhbC5jb25mCitpbmNsdWRlIGNvbmYvYnVpbGQvJHtCVUlMRF9TWVN9LmNvbmYKK2luY2x1ZGUgY29uZi90YXJnZXQvJHtUQVJHRVRfU1lTfS5jb25mCitpbmNsdWRlIGNvbmYvbWFjaGluZS8ke01BQ0hJTkV9LmNvbmYKK2luY2x1ZGUgY29uZi9tYWNoaW5lLXNkay8ke1NES01BQ0hJTkV9LmNvbmYKK2luY2x1ZGUgY29uZi9kaXN0cm8vJHtESVNUUk99LmNvbmYKK2luY2x1ZGUgY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYKK2luY2x1ZGUgY29uZi9kb2N1bWVudGF0aW9uLmNvbmYKK2luY2x1ZGUgY29uZi9saWNlbnNlcy5jb25mCityZXF1aXJlIGNvbmYvc2FuaXR5LmNvbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdlYWsgdmFyaWFibGVzICh1c3VhbGx5IHRvIHJldGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitETF9ESVIgPz0gIiR7VE9QRElSfS9kb3dubG9hZHMiCitTU1RBVEVfRElSID89ICIke1RPUERJUn0vc3N0YXRlLWNhY2hlIgorSU1BR0VfRlNUWVBFUyA/PSAidGFyLmd6IgorSU5JVFJBTUZTX0ZTVFlQRVMgPz0gImNwaW8uZ3oiCitERUZBVUxUX1RBU0tfUFJPVklERVIgPz0gInBhY2thZ2Vncm91cC1iYXNlIgorTUFDSElORV9UQVNLX1BST1ZJREVSID89ICIke0RFRkFVTFRfVEFTS19QUk9WSURFUn0iCisKKyMgVGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlIGlmIGl0IGlzIGxhcmdlciB0aGFuCisjIHRoZSByZXF1aXJlZCBzaXplIChkdSAta3MgSU1BR0VfUk9PVEZTICogSU1BR0VfT1ZFUkhFQURfRkFDVE9SKSwKKyMgYW5kIG5vIGVmZmVjdCBpZiBsZXNzIHRoYW4gaXQuCitJTUFHRV9ST09URlNfU0laRSA/Pz0gIjY1NTM2IgorCisjIEZvcmNlZnVsbHkgc2V0IENBQ0hFIG5vdyBzbyBmdXR1cmUgY2hhbmdlcyB0byB0aGluZ3MgbGlrZQorIyBNQUNISU5FIGRvbid0IGNoYW5nZSB0aGUgcGF0aCB0byB0aGUgY2FjaGUKK0NBQ0hFIDo9ICIke0NBQ0hFfSIKKworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKK0JCX05VTUJFUl9USFJFQURTID89ICIke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisKKyMgRGVmYXVsdCB0byBzZXR0aW5nIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gY3B1IGNvdW50CitQQVJBTExFTF9NQUtFID89ICItaiAke0BvZS51dGlscy5jcHVfY291bnQoKX0iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNYWdpYyBDb29raWUgZm9yIFNBTklUWSBDSEVDSworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitPRVNfQklUQkFLRV9DT05GID0gIjEiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNYWNoaW5lIHByb3BlcnRpZXMgYW5kIHBhY2thZ2Vncm91cC1iYXNlIHN0dWZmCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTUFDSElORV9GRUFUVVJFUyA/PSAiIgorRElTVFJPX0ZFQVRVUkVTID89ICIiCisKK0RJU1RST19FWFRSQV9SREVQRU5EUyA/PSAiIgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCitNQUNISU5FX0VYVFJBX1JERVBFTkRTID89ICIiCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID89ICIiCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworRVhUUkFfSU1BR0VfRkVBVFVSRVMgPz89ICIiCitJTUFHRV9GRUFUVVJFUyArPSAiJHtFWFRSQV9JTUFHRV9GRUFUVVJFU30iCisKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTCA9ICJwdWxzZWF1ZGlvIHN5c3Zpbml0IGJsdWV6NSIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgPSAicnRjIgorCitDT01CSU5FRF9GRUFUVVJFUyA9ICIke0BvZS51dGlscy5zZXRfaW50ZXJzZWN0KCdESVNUUk9fRkVBVFVSRVMnLCAnTUFDSElORV9GRUFUVVJFUycsIGQpfSIKK0NPTUJJTkVEX0ZFQVRVUkVTW3ZhcmRlcHNdICs9ICJESVNUUk9fRkVBVFVSRVMgTUFDSElORV9GRUFUVVJFUyIKKworU0VSSUFMX0NPTlNPTEUgPz89ICIiCitTRVJJQUxfQ09OU09MRVMgPz89ICIke0BkLmdldFZhcignU0VSSUFMX0NPTlNPTEUnLCBUcnVlKS5yZXBsYWNlKCcgJywgJzsnKX0iCisKK05PX1JFQ09NTUVOREFUSU9OUyA/PSAiIgorQkFEX1JFQ09NTUVOREFUSU9OUyA/PSAiIgorCisjIE1ha2Ugc3VyZSBNQUNISU5FIGlzbid0IGV4cG9ydGVkCisjIChicmVha3MgYmludXRpbHMgYXQgbGVhc3QpCitNQUNISU5FW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBUQVJHRVRfQVJDSCBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIE1ha2VmaWxlcyB1c2luZyBpbXBsaWNpdCBydWxlcywgZS5nLiBxdWlsdCwgYXMgR05VIG1ha2UgaGFzIHRoaXMKKyMgaW4gdGhlbSwgdW5kb2N1bWVudGVkKQorVEFSR0VUX0FSQ0hbdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIERJU1RSTyBpc24ndCBleHBvcnRlZAorIyAoYnJlYWtzIHN5c3Zpbml0IGF0IGxlYXN0KQorRElTVFJPW3VuZXhwb3J0XSA9ICIxIgorCisjIE1ha2Ugc3VyZSBTSEVMTCBpc24ndCBleHBvcnRlZAorIyAoY2FuIGJyZWFrIGFueSBudW1iZXIgb2YgdGhpbmdzIGlmIHRoZSB1c2VyJ3Mgc2hlbGwgaXNuJ3QgUE9TSVgtY29tcGxpYW50LAorIyBpbmNsdWRpbmcgdGhlIGZsb2NrIGNvbW1hbmQpLiBUaGUgdXNlcidzIHNoZWxsIHNob3VsZG4ndCBhZmZlY3Qgb3VyIGJ1aWxkcy4KK1NIRUxMW3VuZXhwb3J0XSA9ICIxIgorCisjIFVzZWQgYnkgY2FuYWRpYW4tY3Jvc3MgdG8gaGFuZGxlIHN0cmluZyBjb252ZXJzaW9ucyBvbiBUQVJHRVRfQVJDSCB3aGVyZSBuZWVkZWQKK1RSQU5TTEFURURfVEFSR0VUX0FSQ0ggPz89ICIke0BkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKS5yZXBsYWNlKCJfIiwgIi0iKX0iCisKKyMgQ29tcGxldGUgb3V0cHV0IGZyb20gYml0YmFrZQorQkJfQ09OU09MRUxPRyA/PSAiJHtMT0dfRElSfS9jb29rZXIvJHtNQUNISU5FfS8ke0RBVEVUSU1FfS5sb2ciCisKKyMgU2V0dXAgb3VyIGRlZmF1bHQgaGFzaCBwb2xpY3kKK0JCX1NJR05BVFVSRV9IQU5ETEVSID89ICJPRUJhc2ljSGFzaCIKK0JCX0hBU0hCQVNFX1dISVRFTElTVCA/PSAiVE1QRElSIEZJTEUgUEFUSCBQV0QgQkJfVEFTS0hBU0ggQkJQQVRIIERMX0RJUiBcCisgICAgU1NUQVRFX0RJUiBUSElTRElSIEZJTEVTRVhUUkFQQVRIUyBGSUxFX0RJUk5BTUUgSE9NRSBMT0dOQU1FIFNIRUxMIFRFUk0gXAorICAgIFVTRVIgRklMRVNQQVRIIFNUQUdJTkdfRElSX0hPU1QgU1RBR0lOR19ESVJfVEFSR0VUIENPUkVCQVNFIFBSU0VSVl9IT1NUIFwKKyAgICBQUlNFUlZfRFVNUERJUiBQUlNFUlZfRFVNUEZJTEUgUFJTRVJWX0xPQ0tET1dOIFBBUkFMTEVMX01BS0UgXAorICAgIENDQUNIRV9ESVIgRVhURVJOQUxfVE9PTENIQUlOIENDQUNIRSBDQ0FDSEVfRElTQUJMRSBMSUNFTlNFX1BBVEggU0RLUEtHU1VGRklYIFwKKyAgICBXQVJOX1FBIEVSUk9SX1FBIFdPUktESVIgU1RBTVBDTEVBTiBQS0dEQVRBX0RJUiBCVUlMRF9BUkNIIFNTVEFURV9QS0dBUkNIIgorQkJfSEFTSENPTkZJR19XSElURUxJU1QgPz0gIiR7QkJfSEFTSEJBU0VfV0hJVEVMSVNUfSBEQVRFIFRJTUUgU1NIX0FHRU5UX1BJRCBcCisgICAgU1NIX0FVVEhfU09DSyBQU0VVRE9fQlVJTEQgQkJfRU5WX0VYVFJBV0hJVEUgRElTQUJMRV9TQU5JVFlfQ0hFQ0tTIFwKKyAgICBQQVJBTExFTF9NQUtFIEJCX05VTUJFUl9USFJFQURTIEJCX09SSUdFTlYgQkJfSU5WQUxJRENPTkYgQkJJTkNMVURFRCIKK0JCX1NJR05BVFVSRV9FWENMVURFX0ZMQUdTID89ICJkb2MgZGVwcyBkZXBlbmRzIFwKKyAgICBsb2NrZmlsZXMgdHlwZSB2YXJkZXBzZXhjbHVkZSB2YXJkZXBzIHZhcmRlcHZhbHVlIHZhcmRlcHZhbHVlZXhjbHVkZSBcCisgICAgZmlsZS1jaGVja3N1bXMgcHl0aG9uIGZ1bmMgdGFzayBleHBvcnQgdW5leHBvcnQgbm9leGVjIG5vc3RhbXAgZGlycyBjbGVhbmRpcnMgXAorICAgIHNzdGF0ZS1sb2NrZmlsZS1zaGFyZWQgcHJlZnVuY3MgcG9zdGZ1bmNzIGV4cG9ydF9mdW5jIGRlcHRhc2sgcmRlcHRhc2sgXAorICAgIHJlY3JkZXB0YXNrIG5vZGVwcnJlY3Mgc3RhbXAtYmFzZSBzdGFtcC1leHRyYS1pbmZvIgorCitNTFBSRUZJWCA/Pz0gIiIKK01VTFRJTElCX1ZBUklBTlRTID8/PSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2NvbmYtbm90ZXMudHh0IGIvbWV0YS9jb25mL2NvbmYtbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTYzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKQEAgLTAsMCArMSw4IEBACitDb21tb24gdGFyZ2V0cyBhcmU6CisgICAgY29yZS1pbWFnZS1taW5pbWFsCisgICAgY29yZS1pbWFnZS1zYXRvCisgICAgbWV0YS10b29sY2hhaW4KKyAgICBhZHQtaW5zdGFsbGVyCisgICAgbWV0YS1pZGUtc3VwcG9ydAorCitZb3UgY2FuIGFsc28gcnVuIGdlbmVyYXRlZCBxZW11IGltYWdlcyB3aXRoIGEgY29tbWFuZCBsaWtlICdydW5xZW11IHFlbXV4ODYnCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mIGIvbWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWM2NWIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZgpAQCAtMCwwICsxLDIzIEBACitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYworCitUQ01PREUgPz0gImRlZmF1bHQiCityZXF1aXJlIGNvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLSR7VENNT0RFfS5pbmMKKworVENMSUJDID89ICJnbGliYyIKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtJHtUQ0xJQkN9LmluYworCisjIEFsbG93IHNpbmdsZSBsaWJjIGRpc3Ryb3MgdG8gZGlzYWJsZSB0aGlzIGNvZGUKK1RDTElCQ0FQUEVORCA/PSAiLSR7VENMSUJDfSIKK1RNUERJUiAuPSAiJHtUQ0xJQkNBUFBFTkR9IgorCitDQUNIRSA9ICIke1RNUERJUn0vY2FjaGUvJHtUQ01PREV9LSR7VENMSUJDfSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXX0ke0BbJycsICcvJyArIHN0cihkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV19IgorCitVU0VSX0NMQVNTRVMgPz0gIiIKK1BBQ0tBR0VfQ0xBU1NFUyA/PSAicGFja2FnZV9pcGsiCitJTkhFUklUX0JMQUNLTElTVCA9ICJibGFja2xpc3QiCitJTkhFUklUX0RJU1RSTyA/PSAiZGViaWFuIGRldnNoZWxsIHNzdGF0ZSBsaWNlbnNlIgorSU5IRVJJVCArPSAiJHtQQUNLQUdFX0NMQVNTRVN9ICR7VVNFUl9DTEFTU0VTfSAke0lOSEVSSVRfRElTVFJPfSAke0lOSEVSSVRfQkxBQ0tMSVNUfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjI0OWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKQEAgLTAsMCArMSwxNyBAQAorCitBU05FRURFRCA9ICItV2wsLS1hcy1uZWVkZWQiCisKK0FTTkVFREVEX3BuLWJhYmVsdHJhY2UgPSAiIgorQVNORUVERURfcG4tY29uc29sZS10b29scyA9ICIiCitBU05FRURFRF9wbi1kaXN0Y2MgPSAiIgorQVNORUVERURfcG4tb3Blbm9iZXggPSAiIgorQVNORUVERURfcG4taWN1ID0gIiIKK0FTTkVFREVEX3BuLXhzZXJ2ZXIta2RyaXZlLXhvbWFwID0gIiIKK0FTTkVFREVEX3BuLW1pbmltbyA9ICIiCitBU05FRURFRF9wbi1wY2l1dGlscyA9ICIiCitBU05FRURFRF9wbi1wdXp6bGVzID0gIiIKK0FTTkVFREVEX3BuLWRpYWxlciA9ICIiCitBU05FRURFRF9wbi1wdWxzZWF1ZGlvID0gIiIKK0FTTkVFREVEX3BuLXJwbSA9ICIiCisKK1RBUkdFVF9MREZMQUdTICs9ICIke0FTTkVFREVEfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliNzYyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LWRpc3Ryb3ZhcnMuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1FBX0xPR0ZJTEUgPSAiJHtUTVBESVJ9L3FhLmxvZyIKKworT0VJTkNMVURFTE9HUyA/PSAieWVzIgorS0VSTkVMX0NPTlNPTEUgPz0gInR0eVMwIgorS0VFUFVJTUFHRSA/Pz0gInllcyIKKworSU1BR0VfTElOR1VBUyA/PSAiZW4tdXMgZW4tZ2IiCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OID89ICIxIgorTE9DQUxFX1VURjhfT05MWSA/PSAiMCIKKworRElTVFJPX0ZFQVRVUkVTX0RFRkFVTFQgPz0gImFsc2EgYXJncCBibHVldG9vdGggZXh0MiBpcmRhIGxhcmdlZmlsZSBwY21jaWEgdXNiZ2FkZ2V0IHVzYmhvc3Qgd2lmaSB4YXR0ciBuZnMgemVyb2NvbmYgcGNpIDNnIG5mYyB4MTEiCitESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUID89ICJpcHY0IGlwdjYgbGliYy1iYWNrdHJhY2UgbGliYy1iaWctbWFjcm9zIGxpYmMtYnNkIGxpYmMtY3h4LXRlc3RzIGxpYmMtY2F0Z2V0cyBsaWJjLWNoYXJzZXRzIGxpYmMtY3J5cHQgXAorCQkJCQlsaWJjLWNyeXB0LXVmYyBsaWJjLWRiLWFsaWFzZXMgbGliYy1lbnZ6IGxpYmMtZmN2dCBsaWJjLWZtdG1zZyBsaWJjLWZzdGFiIGxpYmMtZnRyYXZlcnNlIFwKKwkJCQkJbGliYy1nZXRsb2dpbiBsaWJjLWlkbiBsaWJjLWluZXQtYW5sIGxpYmMtbGlibSBsaWJjLWxvY2FsZXMgbGliYy1sb2NhbGUtY29kZSBcCisJCQkJCWxpYmMtbWVtdXNhZ2UgbGliYy1uaXMgbGliYy1uc3N3aXRjaCBsaWJjLXJjbWQgbGliYy1ydGxkLWRlYnVnIGxpYmMtc3Bhd24gbGliYy1zdHJlYW1zIGxpYmMtc3VucnBjIFwKKwkJCQkJbGliYy11dG1wIGxpYmMtdXRtcHggbGliYy13b3JkZXhwIGxpYmMtcG9zaXgtY2xhbmctd2NoYXIgbGliYy1wb3NpeC1yZWdleHAgbGliYy1wb3NpeC1yZWdleHAtZ2xpYmMgXAorCQkJCQlsaWJjLXBvc2l4LXdjaGFyLWlvIgorRElTVFJPX0ZFQVRVUkVTX0xJQkMgPz0gIiR7RElTVFJPX0ZFQVRVUkVTX0xJQkNfREVGQVVMVH0iCitESVNUUk9fRkVBVFVSRVNfTElCQ19jbGFzcy1uYXRpdmVzZGsgPSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUfSIKK0RJU1RST19GRUFUVVJFUyA/PSAiJHtESVNUUk9fRkVBVFVSRVNfREVGQVVMVH0gJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKK0lNQUdFX0ZFQVRVUkVTID89ICIiCisKKyMgVGhpcyBpcyBhIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSBkaXN0cmlidXRpb24sIHRoZXkgYXJlIG5vdAorIyBkaXJlY3RseSBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24uIAorSE9TVFRPT0xTX1dISVRFTElTVF9HUEwtMy4wID89ICIiCitXSElURUxJU1RfR1BMLTMuMCA/PSAibGVzcyIKK0xHUEx2Ml9XSElURUxJU1RfR1BMLTMuMCA/PSAibGliYXNzdWFuIGdudXRscyBsaWJ0YXNuMSBsaWJpZG4iCisKK0NPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA/PSAiIgorIyBDT01NRVJDSUFMX0FVRElPX1BMVUdJTlMgPz0gImdzdC1wbHVnaW5zLXVnbHktbWFkIGdzdC1wbHVnaW5zLXVnbHktbXBlZ2F1ZGlvcGFyc2UiCitDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPz0gIiIKKyMgQ09NTUVSQ0lBTF9WSURFT19QTFVHSU5TID89ICJnc3QtcGx1Z2lucy11Z2x5LW1wZWcyZGVjIGdzdC1wbHVnaW5zLXVnbHktbXBlZ3N0cmVhbSBnc3QtcGx1Z2lucy1iYWQtbXBlZ3ZpZGVvcGFyc2UiCitDT01NRVJDSUFMX1FUID89ICIiCisjIENPTU1FUkNJQUxfUVQgPz0gInFtbXAiCisjIFNldCBvZiBjb21tb24gbGljZW5zZXMgdXNlZCBmb3IgbGljZW5zZS5iYmNsYXNzCitDT01NT05fTElDRU5TRV9ESVIgPz89ICIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcyIKKworQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTID8/PSAiMCIKKworTk8zMkxJQlMgPz89ICIxIgorCisjIERlZmF1bHQgdG8gZW1pdHRpbmcgbG9nZmlsZXMgaWYgYSBidWlsZCBmYWlscy4KK0JCSU5DTFVERUxPR1MgPz89ICJ5ZXMiCitTREtfVkVSU0lPTiA/Pz0gIm5vZGlzdHJvLjAiCitESVNUUk9fVkVSU0lPTiA/Pz0gIm5vZGlzdHJvLjAiCisKKyMgTWlzc2luZyBjaGVja3N1bXMgc2hvdWxkIHJhaXNlIGFuIGVycm9yCitCQl9TVFJJQ1RfQ0hFQ0tTVU0gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmODRkNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1wcm92aWRlcnMuaW5jCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgRGVmYXVsdCB2aXJ0dWFsIHByb3ZpZGVycworIworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIgPz0gImRiIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGItbmF0aXZlID89ICJkYi1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyLXhmODYgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2VnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL21lc2EgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzID89ICJvcGtnLXV0aWxzIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUgPz0gIm9wa2ctdXRpbHMtbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGlieDExID89ICJsaWJ4MTEiCitQUkVGRVJSRURfUFJPVklERVJfeGY4Ni12aWRlby1pbnRlbCA/PSAieGY4Ni12aWRlby1pbnRlbCIKKworIworIyBEZWZhdWx0IHZpcnR1YWwgcnVudGltZSBwcm92aWRlcnMKKyMKK1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzID89ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2ciCitWSVJUVUFMLVJVTlRJTUVfYXBtID89ICJhcG0iCitWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZSA/PSAiYWxzYS1zdGF0ZSIKK1ZJUlRVQUwtUlVOVElNRV9nZXRvcHQgPz0gInV0aWwtbGludXgtZ2V0b3B0IgorVklSVFVBTC1SVU5USU1FX3dpcmVsZXNzLXRvb2xzID89ICJpdyB3aXJlbGVzcy10b29scyIKKworIworIyBEZWZhdWx0IHJlY2lwZSBwcm92aWRlcnMKKyMKK1BSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWIgPz0gImRidXMtZ2xpYiIKK1BSRUZFUlJFRF9QUk9WSURFUl9kYnVzLWdsaWItbmF0aXZlID89ICJkYnVzLWdsaWItbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX2dkay1waXhidWYgPz0gImdkay1waXhidWYiCitQUkVGRVJSRURfUFJPVklERVJfbGliZ2NjID89ICJsaWJnY2MiCitQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLWxpYmdjYyA/PSAibmF0aXZlc2RrLWxpYmdjYyIKK1BSRUZFUlJFRF9QUk9WSURFUl9saW51eC1saWJjLWhlYWRlcnMgPz0gImxpbnV4LWxpYmMtaGVhZGVycyIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzID89ICJuYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzIgorUFJFRkVSUkVEX1BST1ZJREVSX21hdGNoYm94LXBhbmVsID89ICJtYXRjaGJveC1wYW5lbC0yIgorUFJFRkVSUkVEX1BST1ZJREVSX29wa2cgPz0gIm9wa2ciCitQUkVGRVJSRURfUFJPVklERVJfb3BrZy1uYXRpdmUgPz0gIm9wa2ctbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1vcGtnID89ICJuYXRpdmVzZGstb3BrZyIKK1BSRUZFUlJFRF9QUk9WSURFUl9jb25zb2xlLXRvb2xzID89ICJrYmQiCitQUkVGRVJSRURfUFJPVklERVJfZ3ppcC1uYXRpdmUgPz0gInBpZ3otbmF0aXZlIgorUFJFRkVSUkVEX1BST1ZJREVSX21ha2UgPz0gIm1ha2UiCitQUkVGRVJSRURfUFJPVklERVJfdWRldiA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kJywndWRldicsZCl9IgorIyBUaGVyZSBhcmUgaXNzdWVzIHdpdGggcnVudGltZSBwYWNrYWdlcyBhbmQgUFJFRkVSUkVEX1BST1ZJREVSLCBzZWUgWU9DVE8gIzUwNDQgZm9yIGRldGFpbHMKKyMgb24gdGhpcyByYXRoZXIgc3RyYW5nZSBlbnRyeS4KK1BSRUZFUlJFRF9QUk9WSURFUl9ibHVlejQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdibHVldG9vdGggYmx1ZXo1JywnYmx1ZXo1JywnYmx1ZXo0JyxkKX0iCitQUkVGRVJSRURfUFJPVklERVJfYmx1ZXotaGNpZHVtcCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlei1oY2lkdW1wJyxkKX0iCisjIEFsdGVybmF0aXZlIGlzIGx0cC1kZHQgaW4gbWV0YS1vZTogbWV0YS1vZS9yZWNpcGVzLWRldnRvb2xzL2x0cC1kZHQvbHRwLWRkdF8wLjAuNC5iYgorUFJFRkVSUkVEX1BST1ZJREVSX2x0cCA/PSAibHRwIgorUFJFRkVSUkVEX1BST1ZJREVSX2dldG9wdCA/PSAidXRpbC1saW51eC1nZXRvcHQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC12ZXJzaW9ucy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczMDYzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpAQCAtMCwwICsxLDE1IEBACisjCisjIERlZmF1bHQgcHJlZmVycmVkIHZlcnNpb25zCisjCisKKyMgRm9yY2UgdGhlIHB5dGhvbiB2ZXJzaW9ucyBpbiBvbmUgcGxhY2UKK1BZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgorUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uID89ICIyLjcuOSIKK1BSRUZFUlJFRF9WRVJTSU9OX3B5dGhvbi1uYXRpdmUgPz0gIjIuNy45IgorCisjIEZvcmNlIHRoZSBvbGRlciB2ZXJzaW9uIG9mIGxpYmVyYXRpb24tZm9udHMgdW50aWwgd2UgZml4IHRoZSBmb250Zm9yZ2UgaXNzdWUKK1BSRUZFUlJFRF9WRVJTSU9OX2xpYmVyYXRpb24tZm9udHMgPz0gIjEuMDQiCisKKyMgRm9yY2UgZGItbmF0aXZlJ3MgdmVyc2lvbiB0byBrZWVwIHN5bmMgd2l0aCBkYiB3aGlsZQorIyAnQUdQTC0zLjAnIGluICR7SU5DT01QQVRJQkxFX0xJQ0VOU0V9IGJsYWNrbGlzdAorUFJFRkVSUkVEX1ZFUlNJT05fZGItbmF0aXZlID0gIiR7QGluY29tcGF0aWJsZV9saWNlbnNlX2NvbnRhaW5zKCdBR1BMLTMuMCcsICc1LiUnLCAnNi4lJywgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNkYTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2Rpc3Ryb19hbGlhcy5pbmMKQEAgLTAsMCArMSw1MzYgQEAKKyMKKyMgVGhpcyBpcyBhIGxpc3QgZm9yIHRyYWNraW5nIHN0YXR1cyBvZiBwYWNrYWdlIHJlbGF0aXZlIHRvIE1ham9yCisjIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBGZWRvcmEsIFVidW50dSwgRGViaWFuLCAuLi4gVGhlIHBhY2thZ2UKKyMgbmFtZSBpcyB0aGUgbWFqb3IgZGlzdHJpYnV0aW9uIGVxdWl2YWxlbnQgdG8gdGhlIG5hbWUgdXNlZCBpbiBvZS1jb3JlCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIyAgICAgICBESVNUUk9fUE5fQUxJQVNfcG4tPHJlY2lwZSBuYW1lPiA9ICJEaXN0cm8xPTxwa2duYW1lPiBEaXN0cm8yPTxwa2duYW1lPiIKKyMKKyMgUGxlYXNlIGtlZXAgdGhpcyBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyMKK0RJU1RST19QTl9BTElBU19wbi1hYWluYSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1hYml3b3JkLWVtYmVkZGVkID0gIkZlZG9yYT1hYml3b3JkIFVidW50dT1hYml3b3JkIgorRElTVFJPX1BOX0FMSUFTX3BuLWFkdC1pbnN0YWxsZXIgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tYWxzYS1zdGF0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWFsc2EtdXRpbHMtYWxzYWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1hdGsgPSAiRmVkb3JhPWF0ayBPcGVuU3VTRT1hdGsiCitESVNUUk9fUE5fQUxJQVNfcG4tYXVnZWFzID0gIlVidW50dT1saWJhdWdlYXMwIERlYmlhbj1saWJhdWdlYXMwIgorRElTVFJPX1BOX0FMSUFTX3BuLWF2YWhpLXVpID0gIlVidW50dT1hdmFoaS1kaXNjb3ZlciBEZWJpYW49YXZhaGktZGlzY292ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tYmFiZWx0cmFjZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1iZHdnYyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1iaWdyZXFzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tYmlncmVxc3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWJqYW0gPSAiT3BlblN1U0U9Ym9vc3QtamFtIERlYmluYT1iamFtIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsa3Rvb2wgPSAiRGViaWFuPWJsa3Rvb2wgTWFuZHJpdmE9YmxrdG9vbCIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlejQgPSAiVWJ1bnR1PWJsdWV6IERlYmlhbj1ibHVlei11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlejUgPSAiRmVkb3JhPWJsdWV6ICBPcGVuc3VzZT1ibHVleiIKK0RJU1RST19QTl9BTElBU19wbi1ibHVlei1kdGwxLXdvcmthcm91bmQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1ib290Y2hhcnQyID0gIkZlZG9yYT1ib290Y2hhcnQyIE9wZW5zdXNlPWJvb3RjaGFydCIKK0RJU1RST19QTl9BTElBU19wbi1idHJmcy10b29scyA9ICJEZWJpYW49YnRyZnMtdG9vbHMgRmVkb3JhPWJ0cmZzLXByb2dzIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkLWFwcGxpYW5jZS1pbWFnZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZC1jb21wYXJlID0gIk9wZW5zdXNlPWJ1aWxkLWNvbXBhcmUgRmVkb3JhPWJ1aWxkLWNvbXBhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGRlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkdG9vbHMtdGFyYmFsbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNhbGlicmF0ZXByb3RvID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL3Byb3RvL2NhbGlicmF0ZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWNkcnRvb2xzID0gIk9wZW5TVVNFPWNkcnRvb2xzIE9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMgPSAiTWFuZHJpdmE9Y2hrY29uZmlnIERlYmlhbj1jaGtjb25maWciCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLWd0a2h0bWwyLXZpZXdlciA9ICJGZWRvcmE9Y2xhd3MtbWFpbC1wbHVnaW5zIE9wZW5TdVNFPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyBEZWJpYW49Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsYXdzLXBsdWdpbi1tYWlsZGlyID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLW1haWxtYm94ID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLXJzc3lsID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xpcGJvYXJkLW1hbmFnZXIgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyID0gIkZlZG9yYT1jbHV0dGVyIE9wZW5TdXNlPWNsdXR0ZXIgVWJ1bnR1PWNsdXR0ZXItMS4wIE1hbmRyaXZhPWNsdXR0ZXIgRGViaWFuPWNsdXR0ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci0xLjggPSAiRmVkb3JhPWNsdXR0ZXIgT3BlblN1c2U9Y2x1dHRlciBVYnVudHU9Y2x1dHRlci0xLjAgTWFuZHJpdmE9Y2x1dHRlciBEZWJpYW49Y2x1dHRlciIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWdzdC0xLjAgPSAiRGViaWFuPWNsdXR0ZXItZ3N0IFVidW50dT1jbHV0dGVyLWdzdCBGZWRvcmE9Y2x1dHRlci1nc3QiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1nc3QtMS44ID0gIkZlZG9yYT1jbHV0dGVyLWdzdCBEZWJpYW49bGliY2x1dHRlci1nc3QiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1ndGstMS4wID0gIkRlYmlhbj1jbHV0dGVyLWd0ayBVYnVudHU9Y2x1dHRlci1ndGsgRmVkb3JhPWNsdXR0ZXItZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3RrLTEuOCA9ICJGZWRvcmE9Y2x1dHRlci1ndGsgT3BlblN1U0U9Y2x1dHRlci1ndGsgVWJ1bnR1PWNsdXR0ZXItZ3RrLTAuMTAgTWFuZHJpdmE9Y2x1dHRlci1ndGsgRGViaWFuPWNsdXR0ZXItZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvZ2wtMS4wID0gIkRlYmlhbj1jb2dsIFVidW50dT1jb2dsIEZlZG9yYT1jb2dsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvZ2wgPSAiRmVkb3JhPWNvZ2wgT3BlblN1c2U9Y29nbCBVYnVudHU9Y29nbCBNYW5kcml2YT1jb2dsIERlYmlhbj1jb2dsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbXBvc2l0ZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWNvbXBvc2l0ZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4gPSAiTWVlZ289Y29ubm1hbiIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuLWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb25ubWFuLWdub21lID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbnNvbGUtdG9vbHMgPSAiRGViaWFuPWNvbnNvbGUtdG9vbHMgVWJ1bnR1PWNvbnNvbGUtdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1jbHV0dGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1kaXJlY3RmYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1rZXJuZWwtZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1sc2IgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1xdDMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwtZGV2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtcnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXJ0LXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0by1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXNhdG8tc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS10ZXN0bWFzdGVyLWluaXRyYW1mcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utd2VzdG9uID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcm9zcy1sb2NhbGVkZWYgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LWxpbnV4ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LW1vZHVsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyeXB0b2Rldi10ZXN0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWN3YXV0b21hY3JvcyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY3dhdXRvbWFjcm9zLmJlcmxpb3MuZGUvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRhbWFnZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRhbWFnZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRiID0gIkRlYmlhbj1kYjUuMSBVYnVudHU9ZGI1LjEiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy1wdGVzdCA9ICJGZWRvcmE9ZGJ1cyBVYnVudHU9ZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXRlc3QgPSAiRmVkb3JhPWRidXMgVWJ1bnR1PWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZGJ1cy13YWl0ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZGVwbW9kd3JhcHBlci1jcm9zcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWRpcmVjdGZiLWV4YW1wbGVzID0gIkRlYmlhbj1kaXJlY3RmYiBGZWRvcmE9ZGlyZWN0ZmIiCitESVNUUk9fUE5fQUxJQVNfcG4tZGlzdGNjID0gIkRlYmlhbj1kaXN0Y2MgRmVkb3JhPWRpc3RjYyIKK0RJU1RST19QTl9BTElBU19wbi1kaXN0Y2MtY29uZmlnID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZG14cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZG14cHJvdG8gVWJ1bnR1PXgxMXByb3RvLWRteCBEZWJpYW49eDExcHJvdG8tZG14IgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiRmVkb3JhPWRvY2Jvb2stc3R5bGUtZHNzc2wgVWJ1bnR1PWRvY2Jvb2stZHNzc2wiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDMxLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDQxLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjUgPSAiRmVkb3JhPWRvY2Jvb2stZHRkcyBNYW5kcml2YT1kb2Nib29rLWR0ZDQyLXNnbWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay14bWwtZHRkNCA9ICJVYnVudHU9ZG9jYm9vay14bWwgRmVkb3JhPWRvY2Jvb2stZHRkcyIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSA9ICJVYnVudHU9ZG9jYm9vay14bWwgRmVkb3JhPWRvY2Jvb2stZHRkcyIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJGZWRvcmE9ZG9jYm9vay14c2wtc3R5bGVzaGVldHMgT3BlbnN1c2U9ZG9jYm9vay14c2wtc3R5bGVzaGVldHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZHJpMnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWRyaTJwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1kcmkzcHJvdG8gPSAiRmVkb3JhPWRyaTNwcm90byBPcGVuc3VzZT1kcmkzcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tZHJvcGJlYXIgPSAiRGViaWFuPWRyb3BiZWFyIFVidW50dT1kcm9wYmVhciIKK0RJU1RST19QTl9BTElBU19wbi1kdGMgPSAiRmVkb3JhPWR0YyBVYnVudHU9ZHRjIgorRElTVFJPX1BOX0FMSUFTX3BuLWVkcy10b29scyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWVlZS1hY3BpLXNjcmlwdHMgPSAiRGViaWFuPWVlZXBjLWFjcGktc2NyaXB0cyBVYnVudHU9ZWVlcGMtYWNwaS1zY3JpcHRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLWxvY2FsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1tdHJhY2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtc2NyaXB0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGluZm8tZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpbmZvLXgxMSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVtZ2QtZHJpdmVyLWJpbiA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1lbmNvZGluZ3MgPSAiVWJ1bnR1PXhmb250cy1lbmNvZGluZ3MgTWFuZHJpdmE9eDExLWZvbnQtZW5jb2RpbmdzIERlYmlhbj14Zm9udHMtZW5jb2RpbmdzIgorRElTVFJPX1BOX0FMSUFTX3BuLWV2aWVleHQgPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZXZpZWV4dCBEZWJpYW49eDExcHJvdG8tZXZpZSIKK0RJU1RST19QTl9BTElBU19wbi1maXhlc3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZpeGVzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udC1hbGlhcyA9ICJGZWRvcmE9eG9yZy14MTEtZm9udHMtYmFzZSBNYW5kcml2YT14MTEtZm9udC1hbGlhcyBNZWVnbz14b3JnLXgxMS1mb250cyIKK0RJU1RST19QTl9BTElBU19wbi1mb250Y2FjaGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1mb250Y2FjaGVwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250c3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZvbnRzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZm9udC11dGlsID0gIk1lZWdvPXhvcmcteDExLWZvbnQtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMgVWJ1bnR1PXhmb250cy11dGlscyBNYW5kcml2YT14MTEtZm9udC11dGlsIERlYmlhbj14Zm9udHMtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZm9ybWZhY3RvciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvdG93YWxsID0gIkZlZG9yYT1mb3Rvd2FsbCBVYnVudHU9Zm90b3dhbGwiCitESVNUUk9fUE5fQUxJQVNfcG4tZnN0ZXN0cyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdhaWwgPSAiRmVkb3JhPWdhaWwgVWJ1bnR1PWxpYmdhaWwtMy0wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdha3UgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1nYWxhZ28tZGFlbW9uID0gIkRlYmlhbj1nYWxhZ28tZGFlbW9uIFVidW50dT1nYWxhZ28tZGFlbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zcy1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3NzLWluaXRpYWwtaTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1jcm9zc3Nkay1pbml0aWFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjbWFrZWRlcCA9ICJNYW5kcml2YT1nY2NtYWtlZGVwIFVidW50dT14dXRpbHMtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1ydW50aW1lID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY2Mtc2FuaXRpemVycyA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLXNvdXJjZSA9ICJVYnVudHU9Z2NjIEZlZG9yYT1nY2MiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NvbmYtZGJ1cyA9ICJNZWVnbz1HQ29uZi1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWdkay1waXhidWYgPSAiRGViaWFuPWxpYmdkay1waXhidWYyLjAgRmVkb3JhPWdkay1waXhidWYiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2RrLXBpeGJ1Zi1jc291cmNlID0gIkRlYmlhbj1saWJnZGstcGl4YnVmMi4wLTAgRmVkb3JhPWdkay1waXhidWYyIgorRElTVFJPX1BOX0FMSUFTX3BuLWdldHRleHQtbWluaW1hbCA9ICJEZWJpYW49Z2V0dGV4dCBGZWRvcmE9Z2V0dGV4dCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliLTIuMCA9ICJNZWVnbz1nbGliMiBGZWRvcmE9Z2xpYjIgT3BlblN1U0U9Z2xpYjIgVWJ1bnR1PWdsaWIyLjAgTWFuZHJpdmE9Z2xpYjIuMCBEZWJpYW49Z2xpYjIuMCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1sb2NhbGUgPSAiT3BlblN1U0U9Z2xpYmMtbG9jYWxlIEZlZG9yYT1nbGliYy1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1tdHJhY2UgPSAiRmVkb3JhPWdsaWJjLXV0aWxzIFVidW50dT1saWJjLWRldi1iaW4iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xpYmMtc2NyaXB0cyA9ICJGZWRvcmE9Z2xpYmMgVWJ1bnR1PWxpYmMtYmluIgorRElTVFJPX1BOX0FMSUFTX3BuLWdscHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZ2xwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1nbm9tZS1kZXNrdG9wLXRlc3RpbmcgPSAiRGViaWFuPWdub21lLWRlc2t0b3AtdGVzdGluZyBGZWRvcmE9Z25vbWUtZGVza3RvcC10ZXN0aW5nIgorRElTVFJPX1BOX0FMSUFTX3BuLWdudS1jb25maWcgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ncHRmZGlzayA9ICJGZWRvcmE9Z2Rpc2sgVWJ1bnR1PWdkaXNrIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdydWItZWZpLWk1ODYgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmkteDg2LTY0ID0gIkRlYmlhbj1ncnViLWVmaSBGZWRvcmE9Z3J1YjItZWZpIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdC1wbGF5ZXIgPSAiVWJ1bnR1PWdzdC1wbGF5ZXIgRmVkb3JhPWdzdHJlYW1lci1wbGF5ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0LXBsdWdpbi1ibHVldG9vdGggPSAiVWJ1bnR1PWxpYmdzdHJlYW1lci1wbHVnaW5zLWJhc2UgRmVkb3JhPWdzdHJlYW1lci1wbHVnaW5zLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAgVWJ1bnR1PWdzdHJlYW1lcjEuMCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtbWV0YS1iYXNlID0gIk1lZWdvPWdzdHJlYW1lciBGZWRvcmE9Z3N0cmVhbWVyIE9wZW5TdVNFPWdzdHJlYW1lciBVYnVudHU9Z3N0cmVhbWVyMC4xMCIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiRGViaWFuPWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgVWJ1bnR1PWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICJVYnVudHU9Z3N0cmVhbWVyMC4xMC1ydHNwIEZlZG9yYT1nc3RyZWFtZXItcnRzcCIKK0RJU1RST19QTl9BTElBU19wbi1ndGsrID0gIk1lZWdvPWd0azIgRmVkb3JhPWd0azIgT3BlblN1U0U9Z3RrMiBVYnVudHU9Z3RrKzIuMCBNYW5kcml2YT1ndGsrMi4wIERlYmlhbj1ndGsrMi4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ayszID0gIlVidW50dT1ndGsrMy4wIERlYmlhbj1ndGsrMy4wIEZlZG9yYT1ndGszIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1kb2Mtc3R1YiA9ICJGZWRvcmE9Z3RrLWRvYyBVYnVudHU9Z3RrLWRvYyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstZW5naW5lcyA9ICJGZWRvcmE9Z3RrMi1lbmdpbmVzIE9wZW5TdVNFPWd0azItZW5naW5lcyBVYnVudHU9Z3RrMi1lbmdpbmVzIE1hbmRyaXZhPWd0ay1lbmdpbmVzMiBEZWJpYW49Z3RrMi1lbmdpbmVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1zYXRvLWVuZ2luZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay10aGVtZS10b3J0dXJlciA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd2lraS5sYXB0b3Aub3JnL2dvL0dUS19mb3JfT0xQQyIKK0RJU1RST19QTl9BTElBU19wbi1ndGstaWNvbi11dGlscy1uYXRpdmUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3VtbWlib290ID0gIkRlYmlhbj1ndW1taWJvb3QgRmVkb3JhPWd1bW1pYm9vdCIKK0RJU1RST19QTl9BTElBU19wbi1oZWxsby1tb2QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1ob3N0YXAtY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWh3bGF0ZGV0ZWN0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWljZWNjLWNyZWF0ZS1lbnYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0LWlmdXBkb3duID0gIkRlYmlhbj1pZnVwZG93biBVYnVudHU9aWZ1cGRvd24iCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWJvb3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtZnJhbWV3b3JrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtYm9vdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHNjcmlwdHMgPSAiRmVkb3JhPWluaXRzY3JpcHRzIE1hbmRyYXZpYT1pbml0c2NyaXB0cyIKK0RJU1RST19QTl9BTElBU19wbi1pbnB1dHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWlucHV0cHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4taXByb3V0ZTIgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tanBlZyA9ICJPcGVuU3VTRT1saWJqcGVnIFVidW50dT1saWJqcGVnNjIiCitESVNUUk9fUE5fQUxJQVNfcG4ta2Jwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1rYnByb3RvIFVidW50dT14MTFwcm90by1rYi1kZXYgRGViaWFuPXgxMXByb3RvLWtiLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1rY29uZmlnLWZyb250ZW5kcyA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuZWwtZGV2c3JjID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuZWxzaGFyayA9ICJNYW5kcml2YT1rZXJuZWxzaGFyayBVYnVudHU9a2VybmVsc2hhcmsiCitESVNUUk9fUE5fQUxJQVNfcG4ta2Vybi10b29scy1uYXRpdmUgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWtleW1hcHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1rZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1sYW1lID0gIkRlYmlhbj1sYW1lIFVidW50dT1sYW1lIgorRElTVFJPX1BOX0FMSUFTX3BuLWxhdGVuY3l0b3AgPSAiTWVlZ289bGF0ZW5jeXRvcCBGZWRvcmE9bGF0ZW5jeXRvcCBEZWJpYW49bGF0ZW5jeXRvcCBPcGVuU3VTRT1sYXRlbmN5dG9wIgorRElTVFJPX1BOX0FMSUFTX3BuLWxkY29uZmlnLW5hdGl2ZSA9ICJVYnVudHU9bGliYy1iaW4gRmVkb3JhPWdsaWJjIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmE1MiA9ICJNYW5kcml2YT1hNTJkZWMgRGViaWFuPWE1MmRlYyIKK0RJU1RST19QTl9BTElBU19wbi1saWJhY3BpID0gIlVidW50dT1saWJhY3BpIE1hbmRyaXZhPWxpYmFjcGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliYXRvbWljcy1vcHMgPSAiTWVlZ289bGliYXRvbWljLW9wcyBEZWJpYW49bGliYXRvbWljLW9wcyBVYnVudHU9bGliYXRvbWljLW9wcyBPcGVuU3VTRT1saWJhdG9taWMtb3BzIE1hbmRyaXZhPWxpYmF0b21pYy1vcHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2dyb3VwID0gIlVidW50dT1saWJjZ3JvdXAxIERlYmlhbj1saWJjZ3JvdXAxIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmNoZWNrID0gIlVidW50dT1jaGVjayBGZWRvcmE9Y2hlY2sgT3BlblN1U0U9Y2hlY2siCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2xhc3MtaXNhLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZHJtLXBvdWxzYm8gPSAiRGViaWFuPWxpYmRybS1pbnRlbDEgVWJ1bnR1PWxpYmRybS1pbnRlbDEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZHVtcHZhbHVlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZW52LXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZXJhdGlvbi1mb250cyA9ICJVYnVudHU9Zm9udHMtbGliZXJhdGlvbiBGZWRvcmE9bGliZXJhdGlvbi1mb250cy10dGYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZmFrZWtleSA9ICJNZWVnbzEuMD1saWJmYWtla2V5IERlYmlhbj1saWJmYWtla2V5IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmZpbGUtY2hlY2t0cmVlLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZm0tZXh0cmEgPSAiT3BlbnN1c2U9bGliZm0tZXh0cmE0IFVidW50dT1saWJmbS1leHRyYTQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZnJpYmlkaSA9ICJPcGVuU3VTRT1mcmliaWRpIFVidW50dT1mcmliaWRpIE1hbmRyaXZhPWZyaWJpZGkgRGViaWFuPWZyaWJpZGkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2NjID0gIkRlYmlhbj1saWJnY2M0IFVidW50dT1saWJnY2MxIE9wZW5TdVNFPWxpYmdjYzQ2IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdkYnVzID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdsYWRlID0gIk1lZWdvPWxpYmdsYWRlMiBGZWRvcmE9bGliZ2xhZGUyIE9wZW5TdVNFPWxpYmdsYWRlMiBVYnVudHU9bGliZ2xhZGUyIE1hbmRyaXZhPWxpYmdsYWRlMi4wIERlYmlhbj1saWJnbGFkZTIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2x1ID0gIkRlYmlhbj1saWJnbHUgVWJ1bnR1PWxpYmdsdSBPcGVuc3VzZT1tZXNhLWxpYmdsdSIKK0RJU1RST19QTl9BTElBU19wbi1saWJnc21kID0gIkZlZG9yYT1nc20gVWJ1bnR1PWxpYmdzbSBEZWJpYW49bGliZ3NtIE9wZW5zdXNlPWxpYmdzbSIKK0RJU1RST19QTl9BTElBU19wbi1saWJndGtzdHlsdXMgPSAiRGViaWFuPWxpYmd0a3N0eWx1cyBVYnVudHU9bGliZ3Rrc3R5bHVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmd1ID0gIk9wZW5TdVNFPWdsdSBPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpMThuLWNvbGxhdGUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJpY2FsID0gIlVidW50dT1saWJpY2FsIEZlZG9yYT1saWJpY2FsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmljb252ID0gIkZlZG9yYT1taW5ndy1saWJpY29udiBPcGVuc3VzZT1jcm9zcy1taW5ndy1saWJpY29udiIKK0RJU1RST19QTl9BTElBU19wbi1saWJpbnB1dCA9ICJVYnVudHU9bGliaW5wdXQwIEZlZG9yYT1saWJpbnB1dDAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlianNvbiA9ICJVYnVudHU9bGlianNvbjAtZGV2IERlYmlhbj1saWJqc29uMC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlia3NiYSA9ICJGZWRvcmE9bGlia3NiYSBEZWJpYW49bGlia3NiYTggVWJ1bnR1PWxpYmtzYmEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibGJ4dXRpbCA9ICJNYW5kcml2YT1saWJsYnh1dGlsIE9wZW5TdXNlPXhvcmcteDExLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm1hdGNoYm94ID0gIlVidW50dT1saWJtYXRjaGJveCBGZWRvcmE9bGlibWF0Y2hib3giCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibXBjID0gIkZlZG9yYT1saWJtcGMgT3BlblN1c2U9bGlibXBjMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJuZXd0ID0gIkRlYmlhbj1saWJuZXd0MC41MiBGZWRvcmE9bmV3dCIKK0RJU1RST19QTl9BTElBU19wbi1saWJuZXd0LXB5dGhvbiA9ICJVYnVudHU9cHl0aG9uLW5ld3QgRmVkb3JhPW5ld3QtcHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5zcy1tZG5zID0gIk1lZWdvPW5zcy1tZG5zIE9wZW5TdVNFPW5zcy1tZG5zIFVidW50dT1uc3MtbWRucyBNYW5kcml2YT1uc3NfbWRucyBEZWJpYW49bnNzLW1kbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib214aWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL29teGlsLnNvdXJjZWZvcmdlLm5ldC8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlib3dsID0gIkRlYmlhbj1vd2wgT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1saWJvd2wtYXYgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1saWJwYW0gPSAiTWVlZ289cGFtIEZlZG9yYT1wYW0gT3BlblN1U0U9cGFtIFVidW50dT1wYW0gTWFuZHJpdmE9cGFtIERlYmlhbj1wYW0iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicGNyZSA9ICJNYW5kcml2YT1saWJwY3JlMCBGZWRvcmE9cGNyZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJwbmcxMiA9ICJEZWJpYW49bGlicG5nMTItMCBGZWRvcmE9bGlicG5nIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBvZC1wbGFpbmVyLXBlcmwgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2FtcGxlcmF0ZTAgPSAiTWVlZ289bGlic2FtcGxlcmF0ZSBGZWRvcmE9bGlic2FtcGxlcmF0ZSBPcGVuU3VTRT1saWJzYW1wbGVyYXRlIFVidW50dT1saWJzYW1wbGVyYXRlIE1hbmRyaXZhPWxpYnNhbXBsZXJhdGUgRGViaWFuPWxpYnNhbXBsZXJhdGUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2RsID0gIkZlZG9yYT1TREwgT3BlbnN1c2U9U0RMIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNkbDIgPSAiRmVkb3JhPXNkbDIgT3BlbnN1c2U9bGlic2RsMiBVYnVudHU9bGlic2RsMiBEZWJpYW49bGlic2RsMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJzbmRmaWxlMSA9ICJNZWVnbz1saWJzbmRmaWxlIEZlZG9yYT1saWJzbmRmaWxlIE9wZW5TdVNFPWxpYnNuZGZpbGUgVWJ1bnR1PWxpYnNuZGZpbGUgTWFuZHJpdmE9bGlic25kZmlsZSBEZWJpYW49bGlic25kZmlsZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJzb3VwLTIuNCA9ICJNZWVnbz1saWJzb3VwIEZlZG9yYT1saWJzb3VwIE9wZW5TdVNFPWxpYnNvdXAgVWJ1bnR1PWxpYnNvdXAyLjQgTWFuZHJpdmE9bGlic291cCBEZWJpYW49bGlic291cDIuNCIKK0RJU1RST19QTl9BTElBU19wbi1saWJzeW5jID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnRlbGVwYXRoeSA9ICJEZWJpYW49bGlidGVsZXBhdGh5MiBVYnVudHU9bGlidGVsZXBhdGh5MiIKK0RJU1RST19QTl9BTElBU19wbi1saWJ0aW1lZGF0ZS1wZXJsID0gIkRlYmlhbj1saWJ0aW1lZGF0ZS1wZXJsIFVidW50dT1saWJ0aW1lZGF0ZS1wZXJsIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVyY3UgPSAiRmVkb3JhPXVzZXJzcGFjZS1yY3UgVWJ1bnR1PWxpYnVyY3UwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVzYjEgPSAiRGViaWFuPWxpYnVzYi0xLjAtMCBGZWRvcmE9bGlidXNiMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ1c2ItY29tcGF0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYngxMSA9ICJEZWJpYW49bGlieDExLTYgRmVkb3JhPWxpYlgxMSBVYnVudHU9bGlieDExLTYgT3BlblN1U0U9eG9yZy14MTEtbGliWDExIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYngxMS1kaWV0ID0gIkRlYmlhbj1saWJ4MTEtNiBGZWRvcmE9bGliWDExIFVidW50dT1saWJ4MTEtNiBPcGVuU3VTRT14b3JnLXgxMS1saWJYMTEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGNhbGlicmF0ZSA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcveG9yZy9saWIvbGliWENhbGlicmF0ZS8iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGZvbnRjYWNoZSA9ICJNYW5kcml2YT1saWJ4Zm9udGNhY2hlIERlYmlhbj1saWJ4Zm9udGNhY2hlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhmdCA9ICJNYW5kcml2YT1saWJ4ZnQgRGViaWFuPWxpYnhmdDIgVWJ1bnR1PWxpYnhmdDIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGkgPSAiVWJ1bnR1PWxpYnhpIEZlZG9yYT1saWJYaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4a2Jjb21tb24gPSAiRmVkb3JhPWxpYnhrYmNvbW1vbiBEZWJpYW49bGlieGtiY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhwcmludGFwcHV0aWwgPSAiRGViaWFuPWxpYnhwcmludGFwcHV0aWwgVWJ1bnR1PWxpYnhwcmludGFwcHV0aWwxIE1hbmRyaXZhPWxpYnhwcmludGFwcHV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHNjcm5zYXZlciA9ICJGZWRvcmE9bGliWFNjcm5TYXZlciBVYnVudHU9bGlieHNzMSBNYW5kcml2YT1saWJ4c2NybnNhdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhzZXR0aW5ncy1jbGllbnQgPSAiRGViaWFuPWxpYnhzZXR0aW5ncy1jbGllbnQwIFVidW50dT1saWJ4c2V0dGluZ3MtY2xpZW50MCBNYW5kcml2YT1saWJYc2V0dGluZ3MtY2xpZW50MCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4dHJhcCA9ICJEZWJpYW49bGlieHRyYXA2IEZlZG9yYT1saWJYVHJhcCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4eGY4Nm1pc2MgPSAiTWFuZHJpdmE9bGlieHhmODZtaXNjIEZlZG9yYT1saWJYeGY4Nm1pc2MiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtZHVtbXkgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgtZmlybXdhcmUgPSAiRmVkb3JhPWxpbnV4LWZpcm13YXJlIFVidW50dT1saW51eC1maXJtd2FyZSIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1saWJjLWhlYWRlcnMgPSAiRGViaWFuPWxpbnV4LWtlcm5lbC1oZWFkZXJzIFVidW50dT1saW51eC1rZXJuZWwtaGVhZGVycyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1saWJjLWhlYWRlcnMteW9jdG8gPSAiRGViaWFuPWxpbnV4LWtlcm5lbC1oZWFkZXJzIFVidW50dT1saW51eC1rZXJuZWwtaGVhZGVycyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC15b2N0byA9ICJEZWJpYW49bGludXgtYmFzZSBVYnVudHU9bGludXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgteW9jdG8tcnQgPSAiRGViaWFuPWxpbnV4LWJhc2UgVWJ1bnR1PWxpbnV4IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LXlvY3RvLXRpbnkgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbHNiaW5pdHNjcmlwdHMgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxzYnNldHVwID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sc2J0ZXN0ID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1sdHAgPSAiTWFuZHJpdmE9bHRwIFVidW50dT1sdHAiCitESVNUUk9fUE5fQUxJQVNfcG4tbHR0bmctbW9kdWxlcyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy10b29scyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy11c3QgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2x0dG5nLm9yZy8iCitESVNUUk9fUE5fQUxJQVNfcG4tbHo0ID0gIkRlYmlhbj1sejQgRmVkb3JhPWx6NCIKK0RJU1RST19QTl9BTElBU19wbi1sem8gPSAiRGViaWFuPWxpYmx6byBVYnVudHU9bGlibHpvIEZlZG9yYT1senAiCitESVNUUk9fUE5fQUxJQVNfcG4tbWFpbHggPSAiRGViaWFuPWJzZC1tYWlseCBVYnVudHU9YnNkLW1haWx4IgorRElTVFJPX1BOX0FMSUFTX3BuLW1ha2VkZXBlbmQgPSAiTWFuZHJpdmE9bWFrZWRlcGVuZCBVYnVudHU9eHV0aWxzLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1tYWtlZGV2cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWNvbmZpZy1ndGsgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1kZXNrdG9wID0gIk1hbmRyaXZhPW1hdGNoYm94LWRlc2t0b3AgVWJ1bnR1PW1hdGNoYm94LWRlc2t0b3AiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtZGVza3RvcC1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gta2V5Ym9hcmQgPSAiRGViaWFuPW1hdGNoYm94LWtleWJvYXJkIEZlZG9yYT1tYXRjaGJveC1rZXlib2FyZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1wYW5lbC0yID0gIkRlYmlhbj1tYXRjaGJveC1wYW5lbCBNYW5kcml2YT1tYXRjaGJveC1wYW5lbCBVYnVudHU9bWF0Y2hib3gtcGFuZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtc2Vzc2lvbiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXNlc3Npb24tc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRlcm1pbmFsID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWUtc2F0byA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lLXNhdG8tMiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lcy1leHRyYSA9ICJVYnVudHU9bWF0Y2hib3gtdGhlbWVzLWV4dHJhIE1hbmRyaXZhPW1hdGNoYm94LXRoZW1lcy1leHRyYSIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZXMtZ3RrID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtd20gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC13bS0yID0gIk1hbmRyaXZhPW1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIERlYmlhbj1tYXRjaGJveC13aW5kb3ctbWFuYWdlciIKK0RJU1RST19QTl9BTElBU19wbi1tZW51LWNhY2hlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lc2EgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXNhLWdsID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVzYS1nbHNsID0gIkZlZG9yYT1tZXNhIFVidW50dT1saWJnbDEtbWVzYS1kcmkiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1leHRzZGstcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtaTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtcWVtdXg4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtZW52aXJvbm1lbnQtcWVtdXg4Ni02NCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtaWRlLXN1cHBvcnQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLXRvb2xjaGFpbiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtdG9vbGNoYWluLXF0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS10b29sY2hhaW4tcXRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWluaS14LXNlc3Npb24gPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtlbGZpbWFnZSA9ICJVYnVudHU9bWtlbGZpbWFnZSBGZWRvcmE9bWtlbGZpbWFnZSIKK0RJU1RST19QTl9BTElBU19wbi1ta2ZvbnRkaXIgPSAiTWFuZHJpdmE9bWtmb250ZGlyIFVidW50dT14Zm9udHMtdXRpbHMgRmVkb3JhPXhvcmcteDExLWZvbnQtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tbWtmb250c2NhbGUgPSAiTWFuZHJpdmE9bWtmb250c2NhbGUgVWJ1bnR1PXhmb250cy11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ta3RlbXAgPSAiTWFuZHJpdmE9bWt0ZW1wIEZlZG9yYT1ta3RlbXAiCitESVNUUk9fUE5fQUxJQVNfcG4tbW1jLXV0aWxzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9ibGluLXByb3RvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9kdXRpbHMtY29sbGF0ZXJhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1vZHV0aWxzLWluaXRzY3JpcHRzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbXN5bmN0b29sID0gIk9wZW5TdXNlPW1zeW5jdG9vbCBNYW5kcml2YT1tc3luY3Rvb2wiCitESVNUUk9fUE5fQUxJQVNfcG4tbXRkLXV0aWxzID0gIkRlYmlhbj1tdGQtdXRpbHMgVWJ1bnR1PW10ZC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1teC0xLjAgPSAiVWJ1bnR1PW14IERlYmlhbj1teCBGZWRvcmE9bXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbjQ1MC1hdWRpbyA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1uZWFyZCA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1uZW9uID0gIkZlZG9yYT1uZW9uIE9wZW5zdXNlPW5lb24iCitESVNUUk9fUE5fQUxJQVNfcG4tbmV0d29yay1zdXNwZW5kLXNjcmlwdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1uZnMtZXhwb3J0LXJvb3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1ucHRoID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW5zcy1teWhvc3RuYW1lID0gIk1lZWdvPW5zcy1tZG5zIE9wZW5TdVNFPW5zcy1tZG5zIFVidW50dT1uc3MtbWRucyBNYW5kcml2YT1uc3NfbWRucyBEZWJpYW49bnNzLW1kbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tb2NmLWxpbnV4ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLW9mb25vID0gIkRlYmlhbj1vZm9ubyBVYnVudHU9b2Zvbm8iCitESVNUUk9fUE5fQUxJQVNfcG4tb2gtcHV6emxlcyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2cgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3N2bi5vcGVubW9rby5vcmcvdHJ1bmsvc3JjL3RhciIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWFyY2gtY29uZmlnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1jb2xsYXRlcmFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1rZXlyaW5ncyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctbm9ncGcgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLXV0aWxzID0gIk9TUERUIHVwc3RyZWFtPWdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tb3Byb2ZpbGUgPSAiRGViaWFuPW9wcm9maWxlIEZlZG9yYT1vcHJvZmlsZSIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZXVpID0gIkZlZG9yYT1vcHJvZmlsZXVpIFVidW50dT1vcHJvZmlsZS1ndWkgRGViaWFuPW9wcm9maWxlLWd1aSIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZXVpLXNlcnZlciA9ICJGZWRvcmE9b3Byb2ZpbGV1aSBVYnVudHU9b3Byb2ZpbGUtZ3VpIERlYmlhbj1vcHJvZmlsZS1ndWkiCitESVNUUk9fUE5fQUxJQVNfcG4tb3MtcmVsZWFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW93bC12aWRlbyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1iYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1ib290ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtbmZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtcXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdDRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtbWluaSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4taTU4NiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLXFlbXV4ODYtNjQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQ0ZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlLWluZGV4ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGF0Y2hlbGYgPSAiT3BlbnN1c2U9cGF0Y2hlbGYgRmVkb3JhPXBhdGNoZWxmIgorRElTVFJPX1BOX0FMSUFTX3BuLXBlcmYgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcGlnbGl0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGtnY29uZmlnID0gIlVidW50dT1wa2ctY29uZmlnIEZlZG9yYT1wa2djb25maWciCitESVNUUk9fUE5fQUxJQVNfcG4tcG9pbnRlcmNhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvaW50ZXJjYWwteGlucHV0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9reS1mZWVkLWNvbmZpZy1vcGtnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9uZy1jbG9jayA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXBvcnRtYXAgPSAiRGViaWFuPXJwY2JpbmQgRmVkb3JhPXJwY2JpbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9zdGluc3QtaW50ZXJjZXB0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG93ZXJ0b3AgPSAiTWVlZ289cG93ZXJ0b3AgRmVkb3JhPXBvd2VydG9wIERlYmlhbj1wb3dlcnRvcCBPcGVuU3VTRT1wb3dlcnRvcCBNYW5kcml2YT1wb3dlcnRvcCIKK0RJU1RST19QTl9BTElBU19wbi1wcHAtZGlhbGluID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcHJlc2VudHByb3RvID0gIkRlYmlhbj14MTFwcm90by1wcmVzZW50LWRldiBGZWRvcmE9eG9yZy14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHJpbnRwcm90byA9ICJEZWJpYW49eDExcHJvdG8tcHJpbnQtZGV2IFVidW50dT14MTFwcm90by1wcmludC1kZXYgTWFuZHJpdmE9eDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXBzZXVkbyA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tcHNwbGFzaCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXB0ZXN0LXJ1bm5lciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXB1enpsZXMgPSAiRGViaWFuPXNndC1wdXp6bGVzIEZlZG9yYT1wdXp6bGVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbjMgPSAiRmVkb3JhPXB5dGhvbjMgRGViaWFuPXB5dGhvbjMuMiIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24zLWRpc3RyaWJ1dGUgPSAiRGViaWFuPXB5dGhvbjMtc2V0dXB0b29scyBGZWRvcmE9cHl0aG9uMy1zZXR1cHRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1aU0kgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tYXJncGFyc2UgPSAiRmVkb3JhPXB5dGhvbi1hcmdwYXJzZSBPcGVuU3VTRT1weXRob24tYXJncGFyc2UiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWRidXMgPSAiVWJ1bnR1PXB5dGhvbi1kYnVzIERlYmlhbj1weXRob24tZGJ1cyBNYW5kcml2YT1weXRob24tZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJPcGVuc3VzZT1weXRob24tc2V0dXB0b29scyBGZWRvcmE9cHl0aG9uLXNldHVwdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLWdpdCA9ICJEZWJpYW49cHl0aG9uLWdpdCBGZWRvcmE9R2l0UHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1tYWtvID0gIkZlZG9yYT1weXRob24tbWFrbyBPcGVuc3VzZT1weXRob24tTWFrbyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHljYWlybyA9ICJNZWVnbz1weWNhaXJvIEZlZG9yYT1weWNhaXJvIFVidW50dT1weWNhaXJvIERlYmlhbj1weWNhaXJvIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWN1cmwgPSAiRGViaWFuPXB5dGhvbi1weWN1cmwgVWJ1bnR1PXB5dGhvbi1weWN1cmwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Z29iamVjdCA9ICJNZWVnbz1weWdvYmplY3QyIEZlZG9yYT1weWdvYmplY3QyIFVidW50dT1weWdvYmplY3QgRGViaWFuPXB5Z29iamVjdCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlndGsgPSAiRGViaWFuPXB5dGhvbi1ndGsyIEZlZG9yYT1weWd0azIgT3BlblN1U0U9cHl0aG9uLWd0ayIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlyZXggPSAiTWFuZHJpdmE9cHl0aG9uLXB5cmV4IFVidW50dT1weXRob24tcHlyZXgiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNjb25zID0gIkZlZG9yYT1zY29ucyBPcGVuU3VTRT1zY29ucyBVYnVudHU9c2NvbnMgTWFuZHJpdmE9c2NvbnMgRGViaWFuPXNjb25zIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zZXR1cHRvb2xzID0gIk1hbmRyaXZhPXB5dGhvbi1zZXR1cCBPcGVuU3VTRT1weXRob24tc2V0dXAtZ2l0IgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1zbWFydHBtID0gIkRlYmlhbj1zbWFydCBPcGVuU3VTRT1zbWFydCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11LWNvbmZpZyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXVnbCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXUtaGVscGVyID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdXdyYXBwZXItY3Jvc3MgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xbW1wID0gIkZlZG9yYT1xbW1wIERlYmlhbj1xbW1wIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NCA9ICJNYW5kcml2YT1saWJxdDQtZGV2ZWwgVWJ1bnR1PWxpYnF0NC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0ZS1kZW1vLWltYWdlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LWVtYmVkZGVkID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC1ncmFwaGljcy1zeXN0ZW0gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xdDQtdG9vbHMgPSAiTWFuZHJpdmE9bGlicXQ0LWRldmVsIFVidW50dT1saWJxdDQtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC14MTEtZnJlZSA9ICJVYnVudHU9cXQteDExLWZyZWUgRGViaWFuPXF0LXgxMS1mcmVlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0LWRlbW8taW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF1aWNreSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1yYW5kcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJhbmRycHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVhZGxpbmUgPSAiRmVkb3JhPXJlYWRsaW5lIERlYmlhbj1yZWFkbGluZS1jb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVjb3JkcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVjb3JkcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVtYWtlID0gIk1hbmRyaXZhPXJlbWFrZSBEZWJpYW49cmVtYWtlIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlbmRlcnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXJlbmRlcnByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJlc291cmNlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVzb3VyY2Vwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZ2IgPSAiRmVkb3JhPXhvcmctWDExLXNlcnZlci11dGlscyBEZWJpYW49eDExLXhzZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcnBtcmVzb2x2ZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ydC10ZXN0cyA9ICJEZWJpYW49cnQtdGVzdHMgVWJ1bnR1PXJ0LXRlc3RzIgorRElTVFJPX1BOX0FMSUFTX3BuLXJ1bi1wb3N0aW5zdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zYXRvLWljb24tdGhlbWUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zYXRvLXNjcmVlbnNob3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zYmMgPSAiRmVkb3JhPXNiYyBEZWJpYW49bGlic2JjMSIKK0RJU1RST19QTl9BTElBU19wbi1zY3JlZW5zaG90ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2NybnNhdmVycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tc2NybnNhdmVycHJvdG8gVWJ1bnR1PXgxMXByb3RvLXNjcm5zYXZlci1kZXYgRGViaWFuPXgxMXByb3RvLXNjcm5zYXZlci1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tc2V0dGluZ3MtZGFlbW9uID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tc2dtbC1jb21tb24gPSAiT3BlblN1U0U9c2dtbC1jb21tb24gRmVkb3JhPXNnbWwtY29tbW9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXNnbWxzcGwgPSAiRGViaWFuPXNnbWxzcGwgVWJ1bnR1PXNnbWxzcGwiCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhZG93LXNlY3VyZXR0eSA9ICJVYnVudHU9c2hhZG93IEZlZG9yYT1zaGFkb3ciCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhZG93LXN5c3Jvb3QgPSAiVWJ1bnR1PXNoYWRvdyBGZWRvcmE9c2hhZG93IgorRElTVFJPX1BOX0FMSUFTX3BuLXNoYXN1bSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXNodXRkb3duLWRlc2t0b3AgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zaWduZ3AgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zdGF0ID0gIkRlYmlhbj1jb3JldXRpbHMgRmVkb3JhPWNvcmV1dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1zd2FiYmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lza2xvZ2QgPSAiRGViaWFuPXN5c2tsb2dkIE1hbmRyaXZhPXN5c2tsb2dkIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3Byb2YgPSAiRmVkb3JhPXN5c3Byb2YgRGViaWFuPXN5c3Byb2YiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1jb21wYXQtdW5pdHMgPSAiRmVkb3JhPXN5c3RlbWQgVWJ1bnR1PXN5c3RlbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtZC1zeXN0ZW1jdGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLXN5c3RlbWRjdGwgPSAiRmVkb3JhPXN5c3RlbWQgVWJ1bnR1PXN5c3RlbWQiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdGVtdGFwLXVwcm9iZXMgPSAiVWJ1bnR1PXN5c3RlbXRhcCBEZWJpYW49c3lzdGVtdGFwIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3Zpbml0LWluaXR0YWIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi10YWJsZSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi10YXItcmVwbGFjZW1lbnQgPSAiRmVkb3JhPXRhciBVYnVudHU9dGFyIgorRElTVFJPX1BOX0FMSUFTX3BuLXRjZi1hZ2VudCA9ICJXaW5kcml2ZXIgdXBzdHJlYW09aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9kc2RwL3RtLyIKK0RJU1RST19QTl9BTElBU19wbi10ZWxlcGF0aHktcHl0aG9uID0gIkRlYmlhbj10ZWxlcGF0aHktcHl0aG9uIFVidW50dT10ZWxlcGF0aHktcHl0aG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXRleGluZm8tZHVtbXktbmF0aXZlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdGlueS1pbml0ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXRpbnlsb2dpbiA9ICJEZWJpYW49YnVzeWJveCBVYnVudHU9YnVzeWJveCBNYW5kcml2YT1idXN5Ym94IgorRElTVFJPX1BOX0FMSUFTX3BuLXRyYWNlLWNtZCA9ICJNYW5kcml2YT10cmFjZS1jbWQgVWJ1bnR1PXRyYWNlLWNtZCIKK0RJU1RST19QTl9BTElBU19wbi10cmFwcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tdHJhcHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXRyZW1vciA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd3d3LnhpcGgub3JnL3ZvcmJpcy8iCitESVNUUk9fUE5fQUxJQVNfcG4tdHNsaWIgPSAiRGViaWFuPXRzbGliIFVidW50dT10c2xpYiIKK0RJU1RST19QTl9BTElBU19wbi10dGYtYml0c3RyZWFtLXZlcmEgPSAiRGViaWFuPXR0Zi1iaXRzdHJlYW0tdmVyYSBVYnVudHU9dHRmLWJpdHN0cmVhbS12ZXJhIgorRElTVFJPX1BOX0FMSUFTX3BuLXR6Y29kZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi11LWJvb3QtZnctdXRpbHMgPSAiVWJ1bnR1PXUtYm9vdC10b29scyBEZWJpYW49dS1ib290LXRvb2xzIgorRElTVFJPX1BOX0FMSUFTX3BuLXUtYm9vdC1ta2ltYWdlID0gIlVidW50dT11Ym9vdC1ta2ltYWdlIERlYmlhbj11Ym9vdC1ta2ltYWdlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVkZXYtZXh0cmFjb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdW5mczMgPSAiRGViaWFuPXVuZnMzIEZlZG9yYT11bmZzMyIKK0RJU1RST19QTl9BTElBU19wbi11bmZzLXNlcnZlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVuaW5hdGl2ZS10YXJiYWxsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnID0gIk9wZW5zdXNlPXVwZGF0ZS1hbHRlcm5hdGl2ZXMgTWFuZHJpdmE9dXBkYXRlLWFsdGVybmF0aXZlcyIKK0RJU1RST19QTl9BTElBU19wbi11cGRhdGUtcmMuZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXVzYmluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11dGlsLW1hY3JvcyA9ICJNZWVnbz14b3JnLXgxMS11dGlsLW1hY3JvcyBGZWRvcmE9eG9yZy14MTEtdXRpbC1tYWNyb3MgTWFuZHJpdmE9eDExLXV0aWwtbWFjcm9zIgorRElTVFJPX1BOX0FMSUFTX3BuLXY4NmQgPSAiRGViaWFuPXY4NmQgVWJ1bnR1PXY4NmQiCitESVNUUk9fUE5fQUxJQVNfcG4tdmlkZW9wcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by12aWRlb3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXdhZmZsZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXdhdGNoZG9nID0gIkRlYmlhbj13YXRjaGRvZyBVYnVudHU9d2F0Y2hkb2cgTWFuZHJpdmE9d2F0Y2hkb2ciCitESVNUUk9fUE5fQUxJQVNfcG4td2Via2l0Z3RrID0gIkZlZG9yYT13ZWJraXRndGsgVWJ1bnR1PWxpYndlYmtpdCIKK0RJU1RST19QTl9BTElBU19wbi13ZWItd2Via2l0ID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4td2VzdG9uID0gIkZlZG9yYT13ZXN0b24gT3BlblN1U0U9d2VzdG9uIgorRElTVFJPX1BOX0FMSUFTX3BuLXdlc3Rvbi1pbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4td2hpY2ggPSAiTWFuZHJpdmE9d2hpY2ggRmVkb3JhPXdoaWNoIgorRElTVFJPX1BOX0FMSUFTX3BuLXdwYS1zdXBwbGljYW50ID0gIk1lZWdvPXdwYV9zdXBwbGljYW50IEZlZG9yYT13cGFfc3VwcGxpY2FudCBPcGVuU3VTRT13cGFfc3VwcGxpY2FudCBVYnVudHU9d3Bhc3VwcGxpY2FudCBNYW5kcml2YT13cGFfc3VwcGxpY2FudCBEZWJpYW49d3Bhc3VwcGxpY2FudCIKK0RJU1RST19QTl9BTElBU19wbi14MTEtY29tbW9uID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teDExcGVyZiA9ICJGZWRvcmE9eG9yZy14MTEtYXBwcyBVYnVudHU9eDExLWFwcHMiCitESVNUUk9fUE5fQUxJQVNfcG4teDExdm5jID0gIkZlZG9yYT14MTF2bmMgVWJ1bnR1PXgxMXZuYyIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC1pbWFnZSA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLWtleXN5bXMgPSAiRGViaWFuPXhjYi11dGlsIEZlZG9yYT14Y2ItdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi14Y2ItdXRpbC13bSA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjbWlzY3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhjbWlzY3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi14ZHB5aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14ZXYgPSAiRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGV4dHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhleHRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14ZXllcyA9ICJVYnVudHU9eDExLWFwcHMgRmVkb3JhPXhvcmcteDExLWFwcHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmJpZ2ZvbnRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2YmlnZm9udHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZkZ2Fwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2ZGdhcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmRyaXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZkcmlwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LWV2ZGV2ID0gIlVidW50dT14c2VydmVyLXhvcmctaW5wdXQtZXZkZXYgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1ldmRldiBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LWV2ZGV2IEZlZG9yYT14b3JnLXgxMS1kcnYtZXZkZXYgTWVlZ289eG9yZy14MTEtZHJ2LWV2ZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQta2V5Ym9hcmQgPSAiTWVlZ289eG9yZy14MTEtZHJ2LWtleWJvYXJkIEZlZG9yYT14b3JnLXgxMS1kcnYta2V5Ym9hcmQgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC1rZXlib2FyZCBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LWtleWJvYXJkIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtbW91c2UgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC1tb3VzZSBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LW1vdXNlIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtbW91c2UiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1zeW5hcHRpY3MgPSAiTWVlZ289eG9yZy14MTEtZHJ2LXN5bmFwdGljcyBGZWRvcmE9eG9yZy14MTEtZHJ2LXN5bmFwdGljcyBVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LXN5bmFwdGljcyBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LXN5bmFwdGljcyBEZWJpYW49eGZyZWU4Ni1kcml2ZXItc3luYXB0aWNzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtdm1tb3VzZSA9ICJGZWRvcmE9eG9yZy14MTEtZHJ2LXZtbW91c2UgVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC12bW1vdXNlIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtdm1tb3VzZSBEZWJpYW49eHNlcnZlci14b3JnLWlucHV0LXZtbW91c2UiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Nm1pc2Nwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2bWlzY3Byb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODZydXNocHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NnJ1c2hwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWNpcnJ1cyA9ICJPcGVuc3VzZT14Zjg2LXZpZGVvLWNpcnJ1cyBEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLWNpcnJ1cyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIlVidW50dT14c2VydmVyLXhvcmctdmlkZW8tZmJkZXYgRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1mYmRldiIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLWludGVsID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8taW50ZWwgRmVkb3JhPXhvcmcteDExLWRydi1pbnRlbCBNYW5kcml2YT14MTEtZHJpdmVyLXZpZGVvLWludGVsIE1lZWdvPXhvcmcteDExLWRydi1pbnRlbCBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLWludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1tb2Rlc2V0dGluZyBGZWRvcmE9eGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLW9tYXAgPSAiVWJ1bnR1PXhmODYtdmlkZW8tb21hcCBEZWJpYW49eGY4Ni12aWRlby1vbWFwIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tdmVzYSA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLXZlc2EgRmVkb3JhPXhvcmcteDExLWRydi12ZXNhIE1hbmRyaXZhPXgxMS1kcml2ZXItdmlkZW8tdmVzYSBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLXZlc2EiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby12bXdhcmUgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby12bXdhcmUgRmVkb3JhPXhvcmcteDExLWRydi12bXdhcmUgTWFuZHJpdmE9eDExLWRyaXZlci12aWRlby12bXdhcmUgVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby12bXdhcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NnZpZG1vZGVwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2dmlkbW9kZXByb3RvIFVidW50dT14MTFwcm90by14Zjg2dmlkbW9kZSBEZWJpYW49eDExcHJvdG8teGY4NnZpZG1vZGUiCitESVNUUk9fUE5fQUxJQVNfcG4teGhvc3QgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teGluZXJhbWFwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14aW5lcmFtYXByb3RvIFVidW50dT14MTFwcm90by14aW5lcmFtYSBEZWJpYW49eDExcHJvdG8teGluZXJhbWEiCitESVNUUk9fUE5fQUxJQVNfcG4teGlucHV0LWNhbGlicmF0b3IgPSAiRmVkb3JhPXhpbnB1dC1jYWxpYnJhdG9yIE1hbmRyYXZpYT14aW5wdXQtY2FsaWJyYXRvciBVYnVudHU9eGlucHV0LWNhbGlicmF0b3IiCitESVNUUk9fUE5fQUxJQVNfcG4teGtiY29tcCA9ICJVYnVudHU9eDExLXhrYi11dGlscyBGZWRvcmE9eG9yZy14MTEteGtiLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhtb2RtYXAgPSAiTWVlZ289eG9yZy14MTEtdXRpbHMteG1vZG1hcCBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIFVidW50dT14MTEteHNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14b3JnLW1pbmltYWwtZm9udHMgPSAiVWJ1bnR1PXhmb250cy1iYXNlIEZlZG9yYT14b3JnLXgxMS1mb250cy1iYXNlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm9wID0gIk1lZWdvPXhvcmcteDExLXV0aWxzLXhwcm9wIEZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14cHJvdG8gRmVkb3JhPXhvcmcteDExLXByb3RvLWRldmVsIFVidW50dT14MTFwcm90by1jb3JlLWRldiBEZWJpYW49eDExcHJvdG8tY29yZS1kZXYgT3BlbnN1c2U9eG9yZy14MTEtcHJvdG8tZGV2ZWwgTWFuZHJpdmE9eDExLXByb3RvLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhwcm94eW1hbmFnZW1lbnRwcm90b2NvbCA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14cHJveHltYW5hZ2VtZW50cHJvdG9jb2wiCitESVNUUk9fUE5fQUxJQVNfcG4teHJhbmRyID0gIlVidW50dT14MTEteHNlcnZlci11dGlscyBGZWRvcmE9eG9yZy14MTEtc2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhyZGIgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci1ub2RtLWluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtY29uZmlnID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14Zjg2LWRyaS1saXRlID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtbGl0ZSA9ICJGZWRvcmE9eG9yZy14MTEtc2VydmVyIFVidW50dT14c2VydmVyLXhvcmciCitESVNUUk9fUE5fQUxJQVNfcG4teHNlcnZlci14b3JnID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2V0ID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMgVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIERlYmlhbj14MTEteHNlcnZlci11dGlscyBPcGVuc3VzZT14b3JnLXgxMSIKK0RJU1RST19QTl9BTElBU19wbi14dHNjYWwgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2dwZS5saW51eHRvZ28ub3JnL2Rvd25sb2FkL3NvdXJjZS8iCitESVNUUk9fUE5fQUxJQVNfcG4teHVzZXItYWNjb3VudCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXh2aWRlby10ZXN0cyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXh2aW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14d2luaW5mbyA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi15YWZmczItdXRpbHMgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3d3dy55YWZmcy5uZXQiCitESVNUUk9fUE5fQUxJQVNfcG4temF1cnVzZCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXplcm9jb25mID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cucHJvZ3NvYy5vcmcvfndpbGRmaXJlL3plcm9jb25mLyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9wYWNrYWdlX3JlZ2V4LmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9wYWNrYWdlX3JlZ2V4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTI5OTliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCkBAIC0wLDAgKzEsMjc4IEBACisjIHBhY2thZ2VfcmVnZXguaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MKKyMgdXBzdHJlYW0gcHJvamVjdCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiByZWNpcGUuIFRoaXMgbGlzdCBpcyBuZWVkZWQKKyMgZm9yIHJlY2lwZXMgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhbiBub3QgYmUgYXV0b21hZ2ljYWxseSBkaXNjb3ZlcmVkLgorIyBBcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nLCB0aGlzIGZpbGUgd2lsbCBzbG93bHkgYmUgcmVkdWNlZC4KKyMiCisjIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCisjIgorIyBUaGUgZm9ybWF0IGlzIGFzIGEgYml0YmFrZSB2YXJpYWJsZSBvdmVycmlkZSBmb3IgZWFjaCByZWNpcGUKKyMiCisjICAgICAgIFJFR0VYX1VSSV9wbi08cmVjaXBlIG5hbWU+ID0gInJlY2lwZV91cmwiCisjCSAtIFRoaXMgaXMgdGhlIHVybCB1c2VkIGJ5IHRoZSBwYWNrYWdlIGNoZWNraW5nIHN5c3RlbSB0bworIwkgICBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlCisjICAgICAgIFJFR0VYX3BuLTxyZWNpcGUgbmFtZT4gPSAicGFja2FnZV9yZWdleCIKKyMJIC0gVGhpcyBpcyB0aGUgcmVnZXggdGhlIHBhY2thZ2UgY2hlY2tpbmcgc3lzdGVtIHVzZXMgdG8KKyMJICAgcGFyc2UgdGhlIHBhZ2UgZm91bmQgYXQgUkVHRVhfVVJJX3BuLTxyZWNpcGUgbmFtZT4KKyMJR0lUVEFHUkVHRVhfcG4tPHJlY2lwZSBuYW1lPiA9ICJnaXRfdGFnX3JlZ2V4IgorIwkgLSBXaGVuIHNvdXJjZSBjb2RlIGlzIGZldGNoZWQgZnJvbSBnaXQsIGdpdCB0YWdzIGFyZSB1c2VkIHRvCisjCSAgIGRldGVybWluZSB0aGUgdXBzdHJlYW0gcmVsZWFzZSB2ZXJzaW9uLiBUaGlzIHJlZ2V4IGNhbiBiZSB1c2VkCisjCSAgIHRvIGZpbHRlciBvbmx5IHJlbGV2YW50IHRhZ3MuCisjCisKK0NPTU1PTl9SRUdFWCA9ICIoP1A8cHZlcj4oXGQrW1wuXC1fXSopKykiCisKKyMgR2VuZXJpYyByZWdleCBkb24ndCBtYXRjaAorUkVHRVhfVVJJX3BuLXdpcmVsZXNzLXRvb2xzID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK1JFR0VYX3BuLXdpcmVsZXNzLXRvb2xzID0gIndpcmVsZXNzX3Rvb2xzXC4oP1A8cHZlcj4oXGQrKShcLi4qfCkpXC50YXJcLmd6IgorCitSRUdFWF9VUklfcG4tc3FsaXRlMz0iaHR0cDovL3d3dy5zcWxpdGUub3JnLyIKK1JFR0VYX3BuLXNxbGl0ZTM9InJlbGVhc2Vsb2cvJHtDT01NT05fUkVHRVh9Lmh0bWwiCisKK1JFR0VYX1VSSV9wbi1kaGNwID0gImZ0cDovL2Z0cC5pc2Mub3JnL2lzYy9kaGNwLyIKK1JFR0VYX3BuLWRoY3A9Iig/UDxwdmVyPlxkK1wuXGQrXC4oXGQrPykpLyIKKworUkVHRVhfcG4tZm9vbWF0aWMtZmlsdGVycyA9ICJmb29tYXRpYy1maWx0ZXJzLSg/UDxwdmVyPigoXGR8XGRcZClcLiopKylcLnRhclwuZ3oiCitSRUdFWF9wbi14ZGctdXRpbHMgPSAieGRnLXV0aWxzLSg/UDxwdmVyPigoXGQrW1wuXC1fXSopKykoKHJjfGFscGhhfGJldGEpXGQrKT8pXC4odGFyXC5nenx0Z3opIgorUkVHRVhfcG4tcnBtPSJycG0tJHtDT01NT05fUkVHRVh9LS4qJCIKK1JFR0VYX3BuLWxpYnRoZW9yYSA9ICJsaWJ0aGVvcmEtKD9QPHB2ZXI+XGQrKFwuXGQpKylcLih0YXJcLmd6fHRneikiCisKK1JFR0VYX3BuLWlwdXRpbHM9ImlwdXRpbHMtKD9QPHB2ZXI+c1xkKykudGFyIgorUkVHRVhfcG4tbmV0dGxlID0gIm5ldHRsZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworUkVHRVhfcG4tY2Fpcm8gPSAiY2Fpcm8tKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1jbWFrZSA9ICJjbWFrZS0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWxpYnNkbCA9ICJTREwtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCitSRUdFWF9wbi1saWJ4c2x0ID0gImxpYnhzbHQtKD9QPHB2ZXI+XGQrKFwuXGQrKSspXC50YXIiCisKKyMgRXhjbHVkZSBOQyB2ZXJzaW9ucyB3aGljaCBsYWNrIEFFUyBlbmNyeXB0aW9uCitSRUdFWF9wbi1kYiA9ICJkYi0oP1A8cHZlcj5cZCtcLlxkKyhcLlxkKyk/KS50YXIiCisKK1JFR0VYX1VSSV9wbi1hdXRvZ2VuID0gImh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYXV0b2dlbi8iCitSRUdFWF9wbi1hdXRvZ2VuID0gInJlbCg/UDxwdmVyPlxkKyhcLlxkKykrKS8iCisKKyMgcHl0aG9uIHJlY2lwZSBpcyBhY3R1YWxseSBweXRob24gMi54CisjIGFsc28sIGV4Y2x1ZGUgcHJlLXJlbGVhc2VzIGZvciBib3RoIHB5dGhvbiAyLnggYW5kIDMueAorUkVHRVhfcG4tcHl0aG9uID0gIltQcF15dGhvbi0oP1A8cHZlcj4yKFwuXGQrKSspLnRhciIKK1JFR0VYX3BuLXB5dGhvbjMgPSAiW1BwXXl0aG9uLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKKyMgZXhjbHVkZSBiZXRhcworUkVHRVhfcG4tdGlmZiA9ICJ0aWZmLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisKKyMgZXhjbHVkZSB2ZXJzaW9uIDUuNS4yIHdoaWNoIHRyaWdnZXJzIGEgZmFsc2UgcG9zaXRpdmUKK1JFR0VYX3BuLXVuemlwID0gInVuemlwKD9QPHB2ZXI+KD8hNTUyKS4rKVwudGd6IgorIyBzaW1pbGFyIGZvciB6aXAKK1JFR0VYX3BuLXppcCA9ICJeemlwKD9QPHB2ZXI+KD8hMjMyKS4rKVwudGd6IgorCisjIElzbid0IHBvc3NpYmxlIHRvIGRvd25sb2FkIHdpdGggdGhlIGRlZmF1bHQgVVJJIHdlYiBzZXJ2ZXIgcmV0dXJucworIyAoNDAzLCA0MDQsIDU1MCkKK1JFR0VYX1VSSV9wbi1kb3Nmc3Rvb2xzID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvcmVsZWFzZXMiCitSRUdFWF9wbi1qc29uLWMgPSAianNvbi1jLSg/UDxwdmVyPlxkKyhcLlxkKykrKS50YXIiCisjIGpzb24tYyByZWxlYXNlcyBwYWdlIGlzIGZldGNoaW5nIHRoZSBsaXN0IG9mIHJlbGVhc2VzIGluIHNvbWUgd2VpcmQgWE1MIGZvcm1hdAorIyBmcm9tIGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMgYW5kIHByb2Nlc3NlcyBpdCB3aXRoIGphdmFzY3JpcHQgOi0vCisjUkVHRVhfVVJJX3BuLWpzb24tYyA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzL2luZGV4Lmh0bWwiCitSRUdFWF9VUklfcG4tY2hycGF0aCA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMTA1MiIKKworUkVHRVhfVVJJX3BuLXBvd2VydG9wID0gImh0dHBzOi8vMDEub3JnL3Bvd2VydG9wL2Rvd25sb2FkcyIKK1JFR0VYX1VSSV9wbi1saWJzYW1wbGVyYXRlMCA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vU1JDL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGlieGtiY29tbW9uID0gImh0dHA6Ly94a2Jjb21tb24ub3JnLyIKK1JFR0VYX1VSSV9wbi10c2xpYiA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcyIKK1JFR0VYX1VSSV9wbi13YWZmbGU9Imh0dHA6Ly93d3cud2FmZmxlLWdsLm9yZy9yZWxlYXNlcy5odG1sIgorUkVHRVhfVVJJX3BuLWxyenN6ID0gImh0dHA6Ly9vaHNlLmRlL3V3ZS9zb2Z0d2FyZS9scnpzei5odG1sIgorUkVHRVhfVVJJX3BuLWxpYmFjcGkgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorUkVHRVhfVVJJX3BuLWxlc3MgID0gImh0dHA6Ly93d3cuZ3JlZW53b29kc29mdHdhcmUuY29tL2xlc3MvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1jdXBzID0gImh0dHA6Ly93d3cuY3Vwcy5vcmcvc29mdHdhcmUucGhwIgorUkVHRVhfcG4tY3VwcyA9ICJjdXBzLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLXNvdXJjZS50YXIiCitSRUdFWF9VUklfcG4tYnppcDIgPSAiaHR0cDovL3d3dy5iemlwLm9yZy9kb3dubG9hZHMuaHRtbCIKK1JFR0VYX1VSSV9wbi1taW5pY29tID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzLz9ncm91cF9pZD0zMDAxOCIKK1JFR0VYX1VSSV9wbi1zeXNzdGF0ID0gImh0dHA6Ly9zZWJhc3RpZW4uZ29kYXJkLnBhZ2VzcGVyc28tb3JhbmdlLmZyL2Rvd25sb2FkLmh0bWwiCitSRUdFWF9VUklfcG4tbGliaWNhbCA9ICJodHRwczovL2dpdGh1Yi5jb20vbGliaWNhbC9saWJpY2FsL3JlbGVhc2VzLyIKK1JFR0VYX1VSSV9wbi1saWJtcGMgPSAiaHR0cDovL3d3dy5tdWx0aXByZWNpc2lvbi5vcmcvaW5kZXgucGhwP3Byb2c9bXBjJnBhZ2U9ZG93bmxvYWQiCitSRUdFWF9VUklfcG4tdGFnbGliID0gImh0dHA6Ly9naXRodWIuY29tL3RhZ2xpYi90YWdsaWIvcmVsZWFzZXMvIgorUkVHRVhfVVJJX3BuLWxpYmV2ZW50ID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgorUkVHRVhfVVJJX3BuLWRiID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9wcm9kdWN0cy9iZXJrZWxleWRiL2Rvd25sb2Fkcy9pbmRleC0wODI5NDQuaHRtbCIKK1JFR0VYX1VSSV9wbi1weXRob24tc21hcnRwbT0iaHR0cHM6Ly9sYXVuY2hwYWQubmV0L3NtYXJ0L3RydW5rLyIKK1JFR0VYX1VSSV9wbi1sc29mID0gImZ0cDovL3N1bnNpdGUudWFsYmVydGEuY2EvcHViL01pcnJvci9sc29mLyIKK1JFR0VYX1VSSV9wbi1wYnppcDIgPSAiaHR0cDovL2NvbXByZXNzaW9uLmNhL3BiemlwMi8iCitSRUdFWF9VUklfcG4tcXVpY2t5ID0gImh0dHA6Ly9xdC1hcHBzLm9yZy9jb250ZW50L2Rvd25sb2FkLnBocD9jb250ZW50PTgwMzI1JmlkPTEmdGFuPTEwNDE3NDgyIgorUkVHRVhfVVJJX3BuLWxpYndlYnAgPSAiaHR0cDovL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvcmVsZWFzZXMvd2VicC9pbmRleC5odG1sIgorCisjIFRoZSBlbmdpbmUgdHJpZXMgdG8gdXNlIGRpcmVjdG9yeSB2ZXJzaW9uaW5nIGJ1dCBpcyBhIGZhbHNlLXBvc2l0aXZlCitSRUdFWF9VUklfcG4taW50bHRvb2wgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2ludGx0b29sL3RydW5rLyIKK1JFR0VYX1VSSV9wbi1saWJuZnNpZG1hcCA9ICJodHRwOi8vd3d3LmNpdGkudW1pY2guZWR1L3Byb2plY3RzL25mc3Y0L2xpbnV4L2xpYm5mc2lkbWFwLyIKK1JFR0VYX1VSSV9wbi1tcGZyID0gImh0dHA6Ly93d3cubXBmci5vcmcvbXBmci1jdXJyZW50LyIKK1JFR0VYX1VSSV9wbi1uc3MgPSAiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL05TUy9OU1NfUmVsZWFzZXMiCitSRUdFWF9wbi1uc3MgPSAiTlNTXyg/UDxwdmVyPi4rKV9yZWxlYXNlX25vdGVzIgorCitSRUdFWF9VUklfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKK1JFR0VYX3BuLWRvY2Jvb2stc2dtbC1kdGQtMy4xID0gIig/UDxwdmVyPjNcLi4rKS8iCitSRUdFWF9VUklfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLyIKK1JFR0VYX3BuLWRvY2Jvb2stc2dtbC1kdGQtNC4xID0gIig/UDxwdmVyPjRcLjEoXC5cZCspKikvIgorCisjIFF0IHJlY2lwZXMgc2hvdWxkIGJlIGtlcHQgYXQgNC54CitSRUdFWF9VUklfcG4tcXQ0LWVtYmVkZGVkID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LWVtYmVkZGVkID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tcXQ0LXgxMS1mcmVlID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LXgxMS1mcmVlID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCitSRUdFWF9VUklfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICJodHRwOi8vZG93bmxvYWQucXQuaW8vb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyIKK1JFR0VYX3BuLW5hdGl2ZXNkay1xdDQtdG9vbHMgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1xdDQtbmF0aXZlID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tcXQ0LW5hdGl2ZSA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorCisjIFB5UEkgc2l0ZXMKK1JFR0VYX1VSSV9wbi1weXRob24tbm9zZSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL25vc2UvIgorUkVHRVhfcG4tcHl0aG9uLW5vc2UgPSAiL25vc2UvJHtDT01NT05fUkVHRVh9IgorIyBweXRob24tZGlzdHJpYnV0ZSAwLjcueCBpcyBhIHNpbXBsZSBjb21wYXRpYmlsaXR5IGxheWVyIHRoYXQgaW5zdGFsbHMgU2V0dXB0b29scyAwLjcrLgorIyBzbyB3ZSBzdGljayB0byAwLjYueCBzZXJpZXMKK1JFR0VYX1VSSV9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2Rpc3RyaWJ1dGUvIgorUkVHRVhfcG4tcHl0aG9uLWRpc3RyaWJ1dGUgPSAiL2Rpc3RyaWJ1dGUvKD9QPHB2ZXI+XGQrLjYuXGQrKSIKK1JFR0VYX1VSSV9wbi1weXRob24tZ2l0ZGIgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9naXRkYi8iCitSRUdFWF9VUklfcG4tcHl0aG9uLWFzeW5jID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvYXN5bmMvIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1zbW1hcCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NtbWFwLyIKK1JFR0VYX3BuLXB5dGhvbi1zbW1hcCA9ICIvc21tYXAvJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1naXQgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9HaXRQeXRob24vIgorUkVHRVhfcG4tcHl0aG9uLWdpdCA9ICIvR2l0UHl0aG9uLyR7Q09NTU9OX1JFR0VYfSIKK1JFR0VYX1VSSV9wbi1weXRob24tbWFrbyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL21ha28vIgorUkVHRVhfcG4tcHl0aG9uLW1ha28gPSAiL01ha28vJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1wZXhwZWN0ID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGV4cGVjdCIKK1JFR0VYX1VSSV9wbi1weXRob24zLXBpcCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKK1JFR0VYX1VSSV9wbi1weXRob24zLXNldHVwdG9vbHMgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zZXR1cHRvb2xzIgorCisjIFNvdXJjZWZvcmdlIHNpdGVzCitSRUdFWF9VUklfcG4tcHl0aG9uLXNjb25zID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc2NvbnMvZmlsZXMvc2NvbnMvIgorUkVHRVhfcG4tcHl0aG9uLXNjb25zID0gIi9zY29ucy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWV4cGVjdCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGVjdC9maWxlcy9FeHBlY3QvIgorUkVHRVhfcG4tZXhwZWN0ID0gIi9FeHBlY3QvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2RvY2Jvb2svZmlsZXMvZG9jYm9vay14c2wvIgorUkVHRVhfcG4tZG9jYm9vay14c2wtc3R5bGVzaGVldHMgPSAiL2RvY2Jvb2steHNsLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZ2xldyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dsZXcvZmlsZXMvZ2xldyIKK1JFR0VYX3BuLWdsZXcgPSAiL2dsZXcvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1tZW51LWNhY2hlID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbHhkZS9maWxlcy9tZW51LWNhY2hlLzEuMC8iCitSRUdFWF9VUklfcG4teDExdm5jID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlidm5jc2VydmVyL2ZpbGVzL3gxMXZuYy8iCitSRUdFWF9wbi14MTF2bmMgPSAiL3gxMXZuYy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLXF1b3RhID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS9maWxlcy9xdW90YS10b29scy8iCitSRUdFWF9wbi1xdW90YSA9ICIvcXVvdGEtdG9vbHMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1sc2IgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sc2IvZmlsZXMvbHNiX3JlbGVhc2UvIgorUkVHRVhfcG4tbHNiID0gIi9sc2JfcmVsZWFzZS8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnBjcmUgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wY3JlL2ZpbGVzL3BjcmUvIgorUkVHRVhfcG4tbGlicGNyZSA9ICIvcGNyZS8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnVzYi1jb21wYXQgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ1c2IvZmlsZXMvbGlidXNiLWNvbXBhdC0wLjEvIgorUkVHRVhfcG4tbGlidXNiLWNvbXBhdCA9ICIvbGlidXNiLWNvbXBhdC0ke0NPTU1PTl9SRUdFWH0vJCIKK1JFR0VYX1VSSV9wbi1zeXNmc3V0aWxzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXgtZGlhZy9maWxlcy9zeXNmc3V0aWxzLyIKK1JFR0VYX3BuLXN5c2ZzdXRpbHMgPSAiL3N5c2ZzdXRpbHMvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1jb25zb2xlLXRvb2xzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGN0L2ZpbGVzL2NvbnNvbGUtdG9vbHMtZGV2ZWwvIgorUkVHRVhfcG4tY29uc29sZS10b29scyA9ICIvY29uc29sZS10b29scy1kZXZlbC8oP1A8cHZlcj4oXGRcZD9cLikrXGRcZD8pLyIKK1JFR0VYX1VSSV9wbi13YXRjaGRvZyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3dhdGNoZG9nL2ZpbGVzL3dhdGNoZG9nLyIKK1JFR0VYX3BuLXdhdGNoZG9nID0gIi93YXRjaGRvZy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWNyYWNrbGliID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3JhY2tsaWIvZmlsZXMvY3JhY2tsaWIvIgorUkVHRVhfcG4tY3JhY2tsaWIgPSAiL2NyYWNrbGliLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZ3B0ZmRpc2sgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ncHRmZGlzay9maWxlcy9ncHRmZGlzay8iCitSRUdFWF9wbi1ncHRmZGlzayA9ICIvZ3B0ZmRpc2svJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1saWJwbmcxMiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnBuZy9maWxlcy9saWJwbmcxMi8iCitSRUdFWF9wbi1saWJwbmcxMiA9ICIvbGlicG5nMTIvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZG9jYm9vay9maWxlcy9kb2Nib29rLWRzc3NsLyIKK1JFR0VYX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiL2RvY2Jvb2stZHNzc2wvJHtDT01NT05fUkVHRVh9LyIKKworUkVHRVhfVVJJX3BuLW9wZW5qYWRlID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJwZm00ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGVyZm1vbjIvZmlsZXMvbGlicGZtNC8iCitSRUdFWF9VUklfcG4tbGliYTUyID0gImh0dHA6Ly9saWJhNTIuc291cmNlZm9yZ2UubmV0L2Rvd25sb2Fkcy5odG1sIgorUkVHRVhfVVJJX3BuLW1wZWcyZGVjID0gImh0dHA6Ly9saWJtcGVnMi5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwiCitSRUdFWF9VUklfcG4tcGNtYW5mbSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BjbWFuZm0vZmlsZXMvUENNYW5GTSUyMCUyQiUyMExpYmZtJTIwJTI4dGFyYmFsbCUyMHJlbGVhc2UlMjkvUENNYW5GTS8iCitSRUdFWF9VUklfcG4tbGliY2dyb3VwID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliY2cvZmlsZXMvbGliY2dyb3VwLyIKK1JFR0VYX1VSSV9wbi1jZHJ0b29scyA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NkcnRvb2xzL2ZpbGVzL2FscGhhLyIKKworIyBHSVQKK0dJVFRBR1JFR0VYX0NPTU1PTiA9ICIoP1A8cHZlcj5cZCtcLlxkKyhcLlxkKykqKSIKKworR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8gPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tbGludXgteW9jdG8tdGlueSA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0by1kZXYgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tdWNsaWJjID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWdsaWJjID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWNyb3NzLWxvY2FsZWRlZiA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1iaW51dGlscyA9ICJiaW51dGlscy0oP1A8cHZlcj5cZCtfKFxkXz8pKikiCitHSVRUQUdSRUdFWF9wbi1ib290Y2hhcnQyID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLXJlbWFrZSA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspXCtkYmcuKykiCitHSVRUQUdSRUdFWF9wbi10Y2YtYWdlbnQgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCitHSVRUQUdSRUdFWF9wbi1jaGtjb25maWctYWx0ZXJuYXRpdmVzID0gImNoa2NvbmZpZy0oP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKK0dJVFRBR1JFR0VYX3BuLXNnbWxzcGwgPSAiKD9QPHB2ZXI+KFxkKyhcLlxkKykrKSkiCisKKyMgRXhjbHVkZSB4Ljk5LnggdmVyc2lvbnMKK0dJVFRBR1JFR0VYX3BuLW14LTEuMCA9ICIoP1A8cHZlcj5eXGQrKFwuKD8hOTkpXGQrKSspIgorCisjIEJsYWNrbGlzdCBhIGJvZ3VzIHRhZworR0lUVEFHUkVHRVhfcG4tZmlsZSA9ICJGSUxFKD9QPHB2ZXI+KD8hNl8yMykuKykiCitHSVRUQUdSRUdFWF9wbi14aW5ldGQgPSAieGluZXRkLSg/UDxwdmVyPig/ITIwMDMwMTIyKS4rKSIKKworIyBCbGFja2xpc3QgZGViaWFuLXNwZWNpZmljIHRhZ3MKK0dJVFRBR1JFR0VYX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKSg/IS0pIgorCisjIEdOT01FIHJlbGF0ZWQuCisjCisjIEdOT01FMl9TVEFCTEUgcGlja3Mgc3RhYmxlIHJlbGVhc2VzIGluIHRoZSAyLnggc2VyaWVzIChzbyBub3QgMi45MCBvbndhcmRzLAorIyB3aGljaCB3ZXJlIEdOT01FIDMgYmV0YXMuCisjCisjIEdOT01FX1NUQUJMRSBwaWNrcyB0aGUgbGF0ZXN0IHN0YWJsZSByZWxlYXNlLgorCitHTk9NRTJfU1RBQkxFID0gIig/UDxwdmVyPjJcLihbMC04XSpbMDI0NjhdKSsoXC5cZCspKykiCitHTk9NRV9TVEFCTEUgPSAiKD9QPHB2ZXI+XGQrXC4oXGQqWzAyNDY4XSkrKFwuXGQrKSspIgorCitSRUdFWF9wbi1nbGliLTIuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hdGsgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYXQtc3BpMi1jb3JlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWF0LXNwaTItYXRrID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdkay1waXhidWYgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tcGFuZ28gPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrKyA9ICIke0dOT01FMl9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrKzMgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3RrLWVuZ2luZXMgPSAiJHtHTk9NRTJfU1RBQkxFfSIKK1JFR0VYX3BuLWdsaWItbmV0d29ya2luZyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1saWJyc3ZnID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWxpYnNvdXAtMi40ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXZhbGEgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci0xLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci1ndGstMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNsdXR0ZXItZ3N0LTMuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jb2dsLTEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hZHdhaXRhLWljb24tdGhlbWUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tdnRlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWVwaXBoYW55ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXdlYmtpdGd0ayA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1wMTEta2l0ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdub21lLWRlc2t0b3AzID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBub3QgR05PTUUgcmVsYXRlZCBidXQgdXNlcyBzYW1lIGV2ZW4tbWlub3ItcmVsZWFzZS1pcy1zdGFibGUgbG9naWMKK1JFR0VYX3BuLWRidXMgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZGJ1cy10ZXN0ID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gZ3N0cmVhbWVyIHJlbGVhc2VzCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLWxpYmF2ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIGFuZCBwZXJsCitSRUdFWF9wbi1wZXJsID0gIiR7R05PTUVfU1RBQkxFfSIKKworIyBLZWVwIG9sZCBnY2MgdmVyc2lvbnMgYXQgdGhlaXIgbWFqb3IgdmVyc2lvbnMKK1JFR0VYX3BuLWdjYy1zb3VyY2UtNC45LjMgPSAiZ2NjLSg/UDxwdmVyPjRcLjlcLlxkKykudGFyIgorUkVHRVhfcG4tZ2NjLXNvdXJjZS00LjguNCA9ICJnY2MtKD9QPHB2ZXI+NFwuOFwuXGQrKS50YXIiCisKKyMgdGhlc2UgcGFja2FnZXMgYXJlIHRha2VuIGZyb20gc25hcHNob3RzLmRlYmlhbi5vcmc7IHRoYXQgc291cmNlIGlzIHN0YXRpYyBhbmQgZ29lcyBzdGFsZQorIyBzbyB3ZSBjaGVjayB0aGUgbGF0ZXN0IHVwc3RyZWFtIGZyb20gYSBkaXJlY3RvcnkgdGhhdCBkb2VzIGdldCB1cGRhdGVkCitSRUdFWF9VUklfcG4tYXB0ID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwdC8iCitSRUdFWF9VUklfcG4tcmVzb2x2Y29uZiA9ICIke0RFQklBTl9NSVJST1J9L21haW4vci9yZXNvbHZjb25mLyIKK1JFR0VYX1VSSV9wbi1uZXQtdG9vbHMgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL24vbmV0LXRvb2xzLyIKKworIyBzYW1lIGZvciBwYWNrYWdlcyBmcm9tIGxhdW5jaHBhZAorUkVHRVhfVVJJX3BuLWJhc2UtcGFzc3dkID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9iL2Jhc2UtcGFzc3dkLyIKKworIyBmb3IgdGhlc2UgcGFja2FnZXMgd2UncmUgbW9zdGx5IGludGVyZXN0ZWQgaW4gdHJhY2tpbmcgZGViaWFuIHBhdGNoZXMsCisjIGFuZCBub3QgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gd2hlcmUgYWxsIGRldmVsb3BtZW50IGhhcyBlZmZlY3RpdmVseSBzdG9wcGVkCitERUJJQU5fUEFUQ0hfUkVHRVggPSAiKD9QPHB2ZXI+KChcZCtcLiopKyktKChcZCtcLiopKykpXC4oZGlmZnxkZWJpYW5cLnRhcilcLihnenx4eikiCitSRUdFWF9wbi1uZXQtdG9vbHMgPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgorUkVHRVhfcG4tYXBtZCA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCitSRUdFWF9wbi1ibGt0b29sID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKK1JFR0VYX3BuLW1haWx4ID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWMwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvc2VjdXJpdHlfZmxhZ3MuaW5jCkBAIC0wLDAgKzEsMTAzIEBACisjIFNldHVwIGV4dHJhIENGTEFHUyBhbmQgTERGTEFHUyB3aGljaCBoYXZlICdzZWN1cml0eScgYmVuZWZpdHMuIFRoZXNlIAorIyBkb24ndCB3b3JrIHVuaXZlcnNhbGx5LCB0aGVyZSBhcmUgcmVjaXBlcyB3aGljaCBjYW4ndCB1c2Ugb25lLCB0aGUgb3RoZXIKKyMgb3IgYm90aCBzbyBhIGJsYWNrbGlzdCBpcyBtYWludGFpbmVkIGhlcmUuIFRoZSBpZGVhIHdvdWxkIGJlIG92ZXIKKyMgdGltZSB0byByZWR1Y2UgdGhpcyBsaXN0IHRvIG5vdGhpbmcuCisjIEZyb20gYSBZb2N0byBQcm9qZWN0IHBlcnNwZWN0aXZlLCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYW5kIHRlc3RlZAorIyBpbiB0aGUgRElTVFJPPSJwb2t5LWxzYiIgY29uZmlndXJhdGlvbi4KKworIyBfRk9SVElGWV9TT1VSQ0UgcmVxdWlyZXMgLU8xIG9yIGhpZ2hlciwgc28gZGlzYWJsZSBpbiBkZWJ1ZyBidWlsZHMgYXMgdGhleSB1c2UKKyMgLU8wIHdoaWNoIHRoZW4gcmVzdWx0cyBpbiBhIGNvbXBpbGVyIHdhcm5pbmcuCitsY2xfbWF5YmVfZm9ydGlmeSA9ICIke0BiYXNlX2NvbmRpdGlvbmFsKCdERUJVR19CVUlMRCcsJzEnLCcnLCctRF9GT1JUSUZZX1NPVVJDRT0yJyxkKX0iCisKK1NFQ1VSSVRZX0NGTEFHUyA/PSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1waWUgLWZwaWUgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCitTRUNVUklUWV9OT19QSUVfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisKK1NFQ1VSSVRZX0xERkxBR1MgPz0gIi1XbCwteixyZWxybywteixub3ciCitTRUNVUklUWV9YX0xERkxBR1MgPz0gIi1XbCwteixyZWxybyIKKworIyBwb3dlcnBjIGRvZXMgbm90IGdldCBvbiB3aXRoIHBpZSBmb3IgcmVhc29ucyBub3QgbG9va2VkIGludG8gYXMgeWV0CitTRUNVUklUWV9DRkxBR1NfcG93ZXJwYyA9ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgJHtsY2xfbWF5YmVfZm9ydGlmeX0iCisjIERlYWwgd2l0aCBwcGMgc3BlY2lmaWMgbGlua2VyIGZhaWx1cmVzIHdoZW4gdXNpbmcgdGhlIGNmbGFncworU0VDVVJJVFlfQ0ZMQUdTX3BuLWRidXNfcG93ZXJwYyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZGJ1cy1wdGVzdF9wb3dlcnBjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJtYXRjaGJveF9wb3dlcnBjID0gIiIKKworIyBhcm0gc3BlY2lmaWMgc2VjdXJpdHkgZmxhZyBpc3N1ZXMKK1NFQ1VSSVRZX0NGTEFHU19wbi1sdHRuZy10b29sc19hcm0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1hc3BlbGwgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1iZWVjcnlwdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWJsa3RyYWNlID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tY29yZXV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCisjIEN1cmwgc2VlbXMgdG8gY2hlY2sgZm9yIEZPUlRJRllfU09VUkNFIGluIENGTEFHUywgYnV0IGV2ZW4gYXNzaWduZWQKKyMgdG8gQ1BQRkxBR1MgaXQgZ2V0cyBwaWNrZWQgaW50byBDRkxBR1MgaW4gYml0YmFrZS4KKyNUQVJHRVRfQ1BQRkxBR1NfcG4tY3VybCArPSAiLURfRk9SVElGWV9TT1VSQ0U9MiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jdXBzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tY3VybCA9ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgLXBpZSAtZnBpZSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1kYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWRpcmVjdGZiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2xpYmMgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdsaWJjLWluaXRpYWwgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWVsZnV0aWxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZW5jaGFudCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWV4cGVjdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWZsYWMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1mbGV4ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2NjLXJ1bnRpbWUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2Mtc2FuaXRpemVycyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdkYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdtcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdudXRscyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWIgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLXg4Ni1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLWk1ODYtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1ncnViLWVmaS14ODYtNjQtbmF0aXZlID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3QtcGx1Z2lucy1iYWQgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nc3QtcGx1Z2lucy1nbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1oYXJmYnV6eiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWtleGVjLXRvb2xzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4taXB0YWJsZXMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJhaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJjYXAgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJnY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJpZDN0YWcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJuZXd0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGliZ2x1ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlicGNhcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnBjcmUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJwcm94eSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0dG5nLXVzdCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW1lc2EgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1tZXNhLWdsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tb3BlbnNzbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW9wZW5zcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXBwcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1pbWFnaW5nID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLXB5Y3VybCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB5dGhvbi1zbWFydHBtID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLW51bXB5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uMyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXRjbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXRpZmYgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi12YWxncmluZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXpsaWIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKworIyBUaGVzZSAyIGhhdmUgdGV4dCByZWxjbyBlcnJvcnMgd2l0aCB0aGUgcGllIG9wdGlvbnMgZW5hYmxlZAorU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0cCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXB1bHNlYXVkaW8gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKworVEFSR0VUX0NGTEFHU19hcHBlbmQgPSAiICR7U0VDVVJJVFlfQ0ZMQUdTfSIKK1RBUkdFVF9MREZMQUdTX2FwcGVuZCA9ICIgJHtTRUNVUklUWV9MREZMQUdTfSIKKworU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWZiZGV2ID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1pbnRlbCA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tb21hcGZiID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1vbWFwID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby12ZXNhID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby12bXdhcmUgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14c2VydmVyLXhvcmcgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1iYXJlbWV0YWwuaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1iYXJlbWV0YWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2U2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMKQEAgLTAsMCArMSwzMiBAQAorIworIyBiYXJlbWV0YWwgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIiIKKworIyBBZGQgYmFyZW1ldGFsIGxpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtYmFyZW1ldGFsIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK0FTU1VNRV9QUk9WSURFRCArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvbGliaWNvbnYiCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gImdldHRleHQiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaW50bCA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmljb252ID89ICJuYXRpdmVzZGstZ2xpYmMiCisKK1VTRV9OTFMgPz0gIm5vIgorSU1BR0VfTElOR1VBUyA9ICIiCitMSUJDX0RFUEVOREVOQ0lFUyA9ICIiCisKK0VYVFJBX09FQ09ORl9wbi1nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH1fYXBwZW5kID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0RFUEVORFNfcmVtb3ZlX3BuLW1ldGEtdG9vbGNoYWluID0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiCisKK1RBUkdFVF9PUyA9ICJlbGYiCitUQVJHRVRfT1NfYXJtID0gImVhYmkiCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPz0gInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0ke01BQ0hJTkV9IgorVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSA/PSAiIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLID89ICJsaWJnY2MtZGV2IgorVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRV9yZW1vdmUgPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmMgemxpYiBuY3Vyc2VzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDk5MThmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1nbGliYy5pbmMKQEAgLTAsMCArMSw0MCBAQAorIworIyBnbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiJHtAWycnLCAnLWdudSddWyhkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSkgb3IgJycpICE9ICcnXX0iCisKKyMgQWRkIGdsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzIGZvciBnbGliYy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy1nbGliYyIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAiZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMgPz0gImdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmMgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmMtbG9jYWxlID89ICJnbGliYy1sb2NhbGUiCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0xJQkNfREVQRU5ERU5DSUVTID0gImxpYnNlZ2ZhdWx0IFwKKwkJICAgICBnbGliYyBcCisJCSAgICAgZ2xpYmMtZGJnIFwKKwkJICAgICBnbGliYy1kZXYgXAorCQkgICAgIGdsaWJjLXV0aWxzIFwKKwkJICAgICBnbGliYy10aHJlYWQtZGIgXAorCQkgICAgICR7QGdldF9saWJjX2xvY2FsZXNfZGVwZW5kZW5jaWVzKGQpfSIKKworTElCQ19MT0NBTEVfREVQRU5ERU5DSUVTID0gIlwKKwlnbGliYy1sb2NhbGVkYXRhLWkxOG4gXAorCWdsaWJjLWdjb252LWlibTg1MCBcCisJZ2xpYmMtZ2NvbnYtY3AxMjUyIFwKKwlnbGliYy1nY29udi1pc284ODU5LTEgXAorCWdsaWJjLWdjb252LWlzbzg4NTktMTUiCisKK2RlZiBnZXRfbGliY19sb2NhbGVzX2RlcGVuZGVuY2llcyhkKToKKyAgICBpZiAnbGliYy1sb2NhbGVzJyBpbiAoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycsIFRydWUpIG9yICcnKS5zcGxpdCgpIDoKKyAgICAgICAgcmV0dXJuIGQuZ2V0VmFyKCdMSUJDX0xPQ0FMRV9ERVBFTkRFTkNJRVMnLCBUcnVlKSBvciAnJworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtbXVzbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkZDU4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtbXVzbC5pbmMKQEAgLTAsMCArMSwyNyBAQAorIworIyBtdXNsIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICItbXVzbCIKKworIyBBZGQgdWNsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgorTElCQ09WRVJSSURFID0gIjpsaWJjLW11c2wiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworI1VTRV9OTFMgPz0gIm5vIgorCitDWFhGTEFHUyArPSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElCQ19ERVBFTkRFTkNJRVMgPSAiXAorICAgIG11c2wgXAorICAgIG11c2wtZGJnIFwKKyAgICBtdXNsLWRldiBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy11Y2xpYmMuaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy11Y2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzNjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKQEAgLTAsMCArMSwyOCBAQAorIworIyB1Y2xpYmMgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIi11Y2xpYmMiCisKKyMgQWRkIHVjbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy11Y2xpYmMiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAidWNsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gImxpYmljb252IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAiZ2V0dGV4dCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworVVNFX05MUyA/PSAibm8iCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0lNQUdFX0xJTkdVQVMgPSAiIgorCitMSUJDX0RFUEVOREVOQ0lFUyA9ICJcCisgICAgdWNsaWJjIFwKKyAgICB1Y2xpYmMtZGJnIFwKKyAgICB1Y2xpYmMtZGV2IFwKKyAgICB1Y2xpYmMtdGhyZWFkLWRiIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS1kZWZhdWx0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjA1NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbW9kZS1kZWZhdWx0LmluYwpAQCAtMCwwICsxLDc1IEBACisjCisjIERlZmF1bHQgdG9vbGNoYWluIGNvbmZpZ3VyYXRpb24KKyMKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzID0gImJpbnV0aWxzLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyA9ICJnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgPSAiZ2NjLXJ1bnRpbWUiCitQUkVGRVJSRURfUFJPVklERVJfZ2RiID0gImdkYiIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrID89ICJiaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MtaW5pdGlhbCA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1nY2MgPSAiZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWcrKyA9ICJnY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9Y29tcGlsZXJsaWJzID0gIm5hdGl2ZXNkay1nY2MtcnVudGltZSIKKworIyBEZWZhdWx0IGxpYmMgY29uZmlnCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjID0gIiR7VENMSUJDfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay0ke1NES19QUkVGSVh9bGliYy1mb3ItZ2NjID89ICJuYXRpdmVzZGstJHtUQ0xJQkN9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCA9ICIke1RDTElCQ30taW5pdGlhbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay0ke1NES19QUkVGSVh9bGliYy1pbml0aWFsID0gIm5hdGl2ZXNkay0ke1RDTElCQ30taW5pdGlhbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2dldHRleHQgPz89ICJnZXR0ZXh0IgorCitHQ0NWRVJTSU9OID89ICI1LiUiCitTREtHQ0NWRVJTSU9OID89ICIke0dDQ1ZFUlNJT059IgorQklOVVZFUlNJT04gPz0gIjIuMjUlIgorR0RCVkVSU0lPTiA/PSAiNy45JSIKK0dMSUJDVkVSU0lPTiA/PSAiMi4yMiIKK1VDTElCQ1ZFUlNJT04gPz0gIjAuOS4zMytnaXQlIgorTElOVVhMSUJDVkVSU0lPTiA/PSAiNC4xIgorCitQUkVGRVJSRURfVkVSU0lPTl9nY2MgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9ID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtcnVudGltZSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1zYW5pdGl6ZXJzID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYy1ydW50aW1lID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdjYy1zYW5pdGl6ZXJzID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbGliZ2NjID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbGliZ2NjLWluaXRpYWwgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpYmdjYyA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saWJnY2MtaW5pdGlhbCA/PSAiJHtTREtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLW5hdGl2ZSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zc3Nkay0ke1NES19BUkNIfSA/PSAiJHtCSU5VVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYiA/PSAiJHtHREJWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHREJWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9ID89ICIke0dEQlZFUlNJT059IgorCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC1saWJjLWhlYWRlcnMgPz0gIiR7TElOVVhMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstbGludXgtbGliYy1oZWFkZXJzID89ICIke0xJTlVYTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMgICAgICAgICAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1sb2NhbGUgICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLW10cmFjZSAgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtc2NyaXB0cyAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2xpYmMgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLWluaXRpYWwgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWdsaWJjLWluaXRpYWwgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX3VjbGliYyAgICAgICAgICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX3VjbGliYy1pbml0aWFsICAgICAgICAgICA/PSAiJHtVQ0xJQkNWRVJTSU9OfSIKKyMgZG9uJ3QgdXNlIHZlcnNpb24gZWFybGllciB0aGFuIDEuNCBmb3IgZ3ppcC1uYXRpdmUsIGFzIGl0J3MgbmVjZXNzYXJ5IGZvcgorIyBzb21lIHBhY2thZ2VzIHVzaW5nIGFuIGFyY2hpdmUgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgZ3ppcAorUFJFRkVSUkVEX1ZFUlNJT05fZ3ppcC1uYXRpdmUgPz0gIjEuNiIKKworIyBTZXR1cCBzdWl0YWJsZSB0b29sY2hhaW4gZmxhZ3MKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTVlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdXBzdHJlYW1fdHJhY2tpbmcuaW5jCkBAIC0wLDAgKzEsMjQgQEAKKyMgTk9URTogVEhJUyBGSUxFIElTIERFUFJFQ0FURUQuIFBsZWFzZSBhZGQgbmV3IGVudHJpZXMgdG8gdGhlIHJlY2lwZXMgdGhlbXNlbHZlcy4KKyMKKyMgdXBzdHJlYW1fdHJhY2tpbmcuaW5jIC0gVGhpcyBmaWxlIGNvbnRhaW5zIGRhdGEgdGhhdCB0cmFja3MgdGhlCisjIHVwc3RyZWFtIHByb2plY3QgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gcmVjaXBlLiBUaGlzIGxpc3QgaXMgbmVlZGVkCisjIGZvciByZWNpcGVzIHRoYXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYW4gbm90IGJlIGF1dG9tYWdpY2FsbHkgZGlzY292ZXJlZC4KKyMgQXMgd2UgYXV0b21hdGUgdGhpcyBjaGVja2luZywgdGhpcyBmaWxlIHdpbGwgc2xvd2VkIGJlIHJlZHVjZWQuCisjCisjIFRoaXMgZGF0YSBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdlIHJlcG9ydGluZyBzeXN0ZW0gKHBhY2thZ2VzLnlvY3RvcHJvamVjdC5vcmcpCisjCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIworIyAgICAgICBSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTl9wbi08cmVjaXBlIG5hbWU+ID0gIjx2ZXJzaW9uPiIKKyMgICAgICAgUkVDSVBFX1VQU1RSRUFNX0RBVEVfcG4tPHJlY2lwZSBuYW1lPiA9ICJNbW0gZGQsIFlZWVkiCisjCSAtIFRoaXMgaXMgdGhlIGxhdGVzdCB1cHN0cmVhbSB2ZXJzaW9uIGFuZCBkYXRlCisjICAgICAgIFJFQ0lQRV9OT19VUERBVEVfUkVBU09OX3BuLTxyZWNpcGUgbmFtZT4gPSAiPGZyZWUgZm9ybSB0ZXh0PiIKKyMgICAgICAgIC0gVXNlZCB0byBub3RlIHdoeSBhIHJlY2lwZSBzaG91bGQgbm90IGJlIHVwZ3JhZGVkIHRvIGEgbmV3ZXIgdmVyc29pbgorIyAgICAgICBDSEVDS19EQVRFX3BuLTxyZWNpcGUgbmFtZT4gPSAiTW1tIGRkLCBZWVlZIgorIyAgICAgICAgLSBUaGlzIGlzIHRoZSBkYXRlIHRoYXQgdXBzdHJlYW0gd2FzIGxhc3QgbWFudWFsbHkgY2hlY2tlZCBvdmVyIHRpbWUKKyMgICAgICAgICAgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBhcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nCisjCisjIFRoZXNlIGVudHJpZXMgd2lsbCBzbG93bHkgYmUgcmVtb3ZlZCBhcyB3ZSBjYW4gYXV0b21hdGljYWxseSBkZXRlcm1pbmUKKyMgdGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZmlsZS4gIFNvIGZvciBleGlzdGluZyByZWNpcGVzIHRoYXQgd2UgY2FuIGdldCAKKyMgZnJvbSB0aGUgUmVjaXBlIHJlcG9ydGluZyBzeXN0ZW0sIHRoZSBlbnRyaWVzIGhlcmUgY2FuIGJlIHJlbW92ZWQuCisjCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGMyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvd29ybGQtYnJva2VuLmluYwpAQCAtMCwwICsxLDUgQEAKKyMKKyMgRXhjbHVkZSBrbm93biBicm9rZW4gcGFja2FnZXMKKyMKKworCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mIGIvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzVhYjZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2RvY3VtZW50YXRpb24uY29uZgpAQCAtMCwwICsxLDQ1OSBAQAorIyB0aGlzIGZpbGUgaG9sZHMgZG9jdW1lbnRhdGlvbiBmb3Iga25vd24ga2V5cywgcG9zc2libGUgdmFsdWVzIGFuZAorIyB0aGVpciBtZWFuaW5ncy4gUGxlYXNlIHVwZGF0ZSwgY29ycmVjdCBhbmQgZXh0ZW5kIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyMgTWFpbCB5b3VyIGNoYW5nZXMgdG8gb3BlbmVtYmVkZGVkLWRldmVsQG9wZW5lbWJlZGRlZC5vcmcKKworIyBERVNDUklQVElPTlMgRk9SIFRBU0tTICMKKworZG9fYm9vdGltZ1tkb2NdID0gIkNyZWF0ZXMgYSBib290YWJsZSBsaXZlIGltYWdlIgorZG9fYnVpbGRbZG9jXSA9ICJEZWZhdWx0IHRhc2sgZm9yIGEgcmVjaXBlIC0gZGVwZW5kcyBvbiBhbGwgb3RoZXIgbm9ybWFsIHRhc2tzIHJlcXVpcmVkIHRvICdidWlsZCcgYSByZWNpcGUiCitkb19idW5kbGVfaW5pdHJhbWZzW2RvY10gPSAiQ29tYmluZXMgYW4gaW5pdGlhbCByYW1kaXNrIGltYWdlIGFuZCBrZXJuZWwgdG9nZXRoZXIgdG8gZm9ybSBhIHNpbmdsZSBpbWFnZSIKK2RvX2NoZWNrdXJpW2RvY10gPSAiVmFsaWRhdGVzIHRoZSBTUkNfVVJJIHZhbHVlIgorZG9fY2hlY2t1cmlhbGxbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIFNSQ19VUkkgdmFsdWUgZm9yIGFsbCByZWNpcGVzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdGFyZ2V0IgorZG9fY2xlYW5bZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgZm9yIGEgdGFyZ2V0IgorZG9fY2xlYW5hbGxbZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMsIHNoYXJlZCBzdGF0ZSBjYWNoZSwgYW5kIGRvd25sb2FkZWQgc291cmNlIGZpbGVzIGZvciBhIHRhcmdldCIKK2RvX2NsZWFuc3N0YXRlW2RvY10gPSAiUmVtb3ZlcyBhbGwgb3V0cHV0IGZpbGVzIGFuZCBzaGFyZWQgc3RhdGUgY2FjaGUgZm9yIGEgdGFyZ2V0IgorZG9fY29tcGlsZVtkb2NdID0gIkNvbXBpbGVzIHRoZSBzb3VyY2UgaW4gdGhlIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSIKK2RvX2NvbXBpbGVfa2VybmVsbW9kdWxlc1tkb2NdID0gIkNvbXBpbGVzIGxvYWRhYmxlIG1vZHVsZXMgZm9yIHRoZSBMaW51eCBrZXJuZWwiCitkb19jb21waWxlX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb21waWxlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2NvbmZpZ3VyZVtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIHNvdXJjZSBieSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIGFueSBidWlsZC10aW1lIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgcnVudGltZSB0ZXN0IHN1aXRlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCIKK2RvX2RlcGxveVtkb2NdID0gIldyaXRlcyBkZXBsb3lhYmxlIG91dHB1dCBmaWxlcyB0byB0aGUgZGVwbG95IGRpcmVjdG9yeSIKK2RvX2RldnB5c2hlbGxbZG9jXSA9ICJTdGFydHMgYW4gaW50ZXJhY3RpdmUgUHl0aG9uIHNoZWxsIGZvciBkZXZlbG9wbWVudC9kZWJ1Z2dpbmciCitkb19kZXZzaGVsbFtkb2NdID0gIlN0YXJ0cyBhIHNoZWxsIHdpdGggdGhlIGVudmlyb25tZW50IHNldCB1cCBmb3IgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIgorZG9fZGlmZmNvbmZpZ1tkb2NdID0gIkNvbXBhcmVzIHRoZSBvbGQgYW5kIG5ldyBjb25maWcgZmlsZXMgYWZ0ZXIgcnVubmluZyBkb19tZW51Y29uZmlnIGZvciB0aGUga2VybmVsIgorZG9fZmV0Y2hbZG9jXSA9ICJGZXRjaGVzIHRoZSBzb3VyY2UgY29kZSIKK2RvX2ZldGNoYWxsW2RvY10gPSAiRmV0Y2hlcyBhbGwgcmVtb3RlIHNvdXJjZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQiCitkb19nZW5lcmF0ZV9xdF9jb25maWdfZmlsZVtkb2NdID0gIldyaXRlcyBhIHF0LmNvbmYgZmlsZSBmb3IgYnVpbGRpbmcgYSBRdC1iYXNlZCBhcHBsaWNhdGlvbiIKK2RvX2luc3RhbGxbZG9jXSA9ICJDb3BpZXMgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IHRvIGEgaG9sZGluZyBhcmVhIgorZG9faW5zdGFsbF9wdGVzdF9iYXNlW2RvY10gPSAiQ29waWVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgZmlsZXMgZnJvbSB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IHRvIGEgaG9sZGluZyBhcmVhIgorZG9fa2VybmVsX2NoZWNrb3V0W2RvY10gPSAiQ2hlY2tzIG91dCBzb3VyY2UvbWV0YSBicmFuY2hlcyBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb19rZXJuZWxfY29uZmlnY2hlY2tbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX2tlcm5lbF9jb25maWdtZVtkb2NdID0gIkFzc2VtYmxlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fa2VybmVsX2xpbmtfdm1saW51eFtkb2NdID0gIkNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGluIGFyY2gvJGFyY2gvYm9vdCBmb3Igdm1saW51eCBrZXJuZWwgaW1hZ2VzIgorZG9fbGlzdHRhc2tzW2RvY10gPSAiTGlzdHMgYWxsIGRlZmluZWQgdGFza3MgZm9yIGEgdGFyZ2V0IgorZG9fbWVudWNvbmZpZ1tkb2NdID0gIlJ1bnMgJ21ha2UgbWVudWNvbmZpZycgZm9yIHRoZSBrZXJuZWwiCitkb19wYWNrYWdlW2RvY10gPSAiQW5hbHl6ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGhvbGRpbmcgYXJlYSBhbmQgc3BsaXRzIGl0IGludG8gc3Vic2V0cyBiYXNlZCBvbiBhdmFpbGFibGUgcGFja2FnZXMgYW5kIGZpbGVzIgorZG9fcGFja2FnZV9pbmRleFtkb2NdID0gIkNyZWF0ZXMgb3IgdXBkYXRlcyB0aGUgaW5kZXggaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV9xYVtkb2NdID0gIlJ1bnMgUUEgY2hlY2tzIG9uIHBhY2thZ2VkIGZpbGVzIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZG9jXSA9ICJDcmVhdGVzIHRoZSBhY3R1YWwgREVCIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkb2NdID0gIkNyZWF0ZXMgdGhlIGFjdHVhbCBJUEsgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RvY10gPSAiQ3JlYXRlcyB0aGUgYWN0dWFsIFJQTSBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV93cml0ZV90YXJbZG9jXSA9ICJDcmVhdGVzIHRhciBhcmNoaXZlcyBmb3IgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2VkYXRhW2RvY10gPSAiQ3JlYXRlcyBwYWNrYWdlIG1ldGFkYXRhIHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbSB0byBnZW5lcmF0ZSB0aGUgZmluYWwgcGFja2FnZXMiCitkb19wYXRjaFtkb2NdID0gIkxvY2F0ZXMgcGF0Y2ggZmlsZXMgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgc291cmNlIGNvZGUiCitkb19wb3B1bGF0ZV9saWNbZG9jXSA9ICJXcml0ZXMgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlY2lwZSB0aGF0IGlzIGNvbGxlY3RlZCBsYXRlciB3aGVuIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZCIKK2RvX3BvcHVsYXRlX3Nka1tkb2NdID0gIkNyZWF0ZXMgdGhlIGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGFuIGluc3RhbGxhYmxlIFNESyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbZG9jXSA9ICJDb3BpZXMgYSBzdWJzZXQgb2YgZmlsZXMgaW5zdGFsbGVkIGJ5IGRvX2luc3RhbGwgaW50byB0aGUgc3lzcm9vdCBpbiBvcmRlciB0byBtYWtlIHRoZW0gYXZhaWxhYmxlIHRvIG90aGVyIHJlY2lwZXMiCitkb19ybV93b3JrW2RvY10gPSAiUmVtb3ZlcyB3b3JrIGZpbGVzIGFmdGVyIHRoZSBidWlsZCBzeXN0ZW0gaGFzIGZpbmlzaGVkIHdpdGggdGhlbSIKK2RvX3JtX3dvcmtfYWxsW2RvY10gPSAiVG9wLWxldmVsIHRhc2sgZm9yIHJlbW92aW5nIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgZmluaXNoZWQgd2l0aCB0aGVtIgorZG9fcm9vdGZzW2RvY10gPSAiQ3JlYXRlcyB0aGUgcm9vdCBmaWxlc3lzdGVtIChmaWxlIGFuZCBkaXJlY3Rvcnkgc3RydWN0dXJlKSBmb3IgYW4gaW1hZ2UiCitkb19zYXZlZGVmY29uZmlnW2RvY10gPSAiQ3JlYXRlcyBhIG1pbmltYWwgTGludXgga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSIKK2RvX3NpemVjaGVja1tkb2NdID0gIkNoZWNrcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGltYWdlIGFnYWluc3QgS0VSTkVMX0lNQUdFX01BWFNJWkUgKGlmIHNldCkiCitkb19zcGR4W2RvY10gPSAiQSBidWlsZCBzdGFnZSB0aGF0IHRha2VzIHRoZSBzb3VyY2UgY29kZSBhbmQgc2NhbnMgaXQgb24gYSByZW1vdGUgRk9TU09MT0dZIHNlcnZlciBpbiBvcmRlciB0byBwcm9kdWNlIGFuIFNQRFggZG9jdW1lbnQiCitkb19zdHJpcFtkb2NdID0gIlN0cmlwcyB1bm5lZWRlZCBzZWN0aW9ucyBvdXQgb2YgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSIKK2RvX3Rlc3RpbWFnZVtkb2NdID0gIkJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UiCitkb190ZXN0aW1hZ2VfYXV0b1tkb2NdID0gIkJvb3RzIGFuIGltYWdlIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIHdpdGhpbiB0aGUgaW1hZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gYnVpbHQiCitkb190ZXN0c2RrW2RvY10gPSAiSW5zdGFsbHMgYW4gU0RLIGFuZCBwZXJmb3JtcyBydW50aW1lIHRlc3RzIG9uIHRoZSB0b29scyBpbnN0YWxsZWQgYnkgaXQiCitkb191Ym9vdF9ta2ltYWdlW2RvY10gPSAiQ3JlYXRlcyBhIHVJbWFnZSBmaWxlIGZyb20gdGhlIGtlcm5lbCBmb3IgdGhlIFUtQm9vdCBib290bG9hZGVyIgorZG9fdW5wYWNrW2RvY10gPSAiVW5wYWNrcyB0aGUgc291cmNlIGNvZGUgaW50byBhIHdvcmtpbmcgZGlyZWN0b3J5IgorZG9fdmFsaWRhdGVfYnJhbmNoZXNbZG9jXSA9ICJFbnN1cmVzIHRoYXQgdGhlIHNvdXJjZS9tZXRhIGJyYW5jaGVzIGFyZSBvbiB0aGUgbG9jYXRpb25zIHNwZWNpZmllZCBieSB0aGVpciBTUkNSRVYgdmFsdWVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX3ZtaW1nW2RvY10gPSAiQ3JlYXRlcyBhbiBpbWFnZSBmb3IgdXNlIHdpdGggVk13YXJlIG9yIFZpcnR1YWxCb3ggY29tcGF0aWJsZSB2aXJ0dWFsIG1hY2hpbmUgaG9zdHMgKGJhc2VkIG9uIElNQUdFX0ZTVFlQRVMgZWl0aGVyIC52bWRrIG9yIC52ZGkpIgorCisjIERFU0NSSVBUSU9OUyBGT1IgVkFSSUFCTEVTICMKKworI0EKKworQUxMT1dfRU1QVFlbZG9jXSA9ICJTcGVjaWZpZXMgaWYgYW4gb3V0cHV0IHBhY2thZ2Ugc2hvdWxkIHN0aWxsIGJlIHByb2R1Y2VkIGlmIGl0IGlzIGVtcHR5LiIKK0FMVEVSTkFUSVZFW2RvY10gPSAiTGlzdHMgY29tbWFuZHMgaW4gYSBwYWNrYWdlIHRoYXQgbmVlZCBhbiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtaW5nIHNjaGVtZS4iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIG1hcCBkdXBsaWNhdGVkIGNvbW1hbmRzIHRvIGFjdHVhbCBsb2NhdGlvbnMuIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IHByaW9yaXRpZXMgZm9yIGR1cGxpY2F0ZWQgY29tbWFuZHMuIgorQUxURVJOQVRJVkVfVEFSR0VUW2RvY10gPSAiVXNlZCBieSB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSB0byBjcmVhdGUgZGVmYXVsdCBsaW5rIGxvY2F0aW9ucyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCitBU1NVTUVfUFJPVklERURbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIChyZWNpcGVzIGFjdHVhbGx5KSB0aGF0IGFyZSBhc3N1bWVkIHRvIGJlIGltcGxpY2l0bHkgYXZhaWxhYmxlLiBCaXRCYWtlIGRvZXMgbm90IGJ1aWxkIHRoZXNlIHBhY2thZ2VzLiIKK0FTU1VNRV9TSExJQlNbZG9jXSA9ICJMaXN0IG9mIHNobGliOnBhY2thZ2VbX3ZlcnNpb25dIG1hcHBpbmdzLiBVc2VmdWwgZm9yIGxpYiBwYWNrYWdlcyBpbiBBU1NVTUVfUFJPVklERUQsIGZvciB3aGljaCBhdXRvbWF0aWMgc2hsaWIgZGVwZW5kZW5jeSB0cmFja2luZyBkb2VzIG5vdCB3b3JrLiIKK0FVVEhPUltkb2NdID0gIkVtYWlsIGFkZHJlc3MgdXNlZCB0byBjb250YWN0IHRoZSBvcmlnaW5hbCBhdXRob3IocykgaW4gb3JkZXIgdG8gc2VuZCBwYXRjaGVzIGFuZCBmb3J3YXJkIGJ1Z3MuIgorQVVUT19TWVNMSU5VWE1FTlVbZG9jXSA9ICJFbmFibGVzIGNyZWF0aW5nIGFuIGF1dG9tYXRpYyBtZW51IGZvciB0aGUgc3lzbGludXggYm9vdGxvYWRlci4iCitBVVRPUkVWW2RvY10gPSAiV2hlbiBTUkNSRVYgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlLCBpdCBzcGVjaWZpZXMgdG8gdXNlIHRoZSBsYXRlc3Qgc291cmNlIHJldmlzaW9uIGluIHRoZSByZXBvc2l0b3J5LiIKKworI0IKKworQltkb2NdID0gIlRoZSBCdWlsZCBEaXJlY3RvcnkuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHBsYWNlcyBnZW5lcmF0ZWQgb2JqZWN0cyBpbnRvIHRoZSBCdWlsZCBEaXJlY3RvcnkgZHVyaW5nIGEgcmVjaXBlJ3MgYnVpbGQgcHJvY2Vzcy4iCitCQURfUkVDT01NRU5EQVRJT05TW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIG5vdCB0byBpbnN0YWxsIGRlc3BpdGUgYmVpbmcgcmVjb21tZW5kZWQgYnkgYSByZWNpcGUuIFN1cHBvcnQgZm9yIHRoaXMgdmFyaWFibGUgZXhpc3RzIG9ubHkgd2hlbiB1c2luZyB0aGUgSVBLIG9yIFJQTSBwYWNrYWdpbmcgYmFja2VuZHMuIgorQkJfREFOR0xJTkdBUFBFTkRTX1dBUk5PTkxZW2RvY10gPSAiRGVmaW5lcyBob3cgQml0QmFrZSBoYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgYW4gYXBwZW5kIGZpbGUgKC5iYmFwcGVuZCkgaGFzIG5vIGNvcnJlc3BvbmRpbmcgcmVjaXBlIGZpbGUgKC5iYikuIgorQkJfRElTS01PTl9ESVJTW2RvY10gPSAiTW9uaXRvcnMgZGlzayBzcGFjZSBhbmQgYXZhaWxhYmxlIGlub2RlcyBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlIGJ1aWxkIGJhc2VkIG9uIHRoZXNlIHBhcmFtZXRlcnMuIgorQkJfRElTS01PTl9XQVJOSU5URVJWQUxbZG9jXSA9ICJEZWZpbmVzIHRoZSBkaXNrIHNwYWNlIGFuZCBmcmVlIGlub2RlIHdhcm5pbmcgaW50ZXJ2YWxzLiBUbyBzZXQgdGhlc2UgaW50ZXJ2YWxzLCBkZWZpbmUgdGhlIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0JCX0dFTkVSQVRFX01JUlJPUl9UQVJCQUxMU1tkb2NdID0gIkNhdXNlcyB0YXJiYWxscyBvZiB0aGUgR2l0IHJlcG9zaXRvcmllcyB0byBiZSBwbGFjZWQgaW4gdGhlIERMX0RJUiBkaXJlY3RvcnkuIgorQkJfTlVNQkVSX1RIUkVBRFNbZG9jXSA9ICJUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgQml0QmFrZSBzaG91bGQgcnVuIGluIHBhcmFsbGVsIGF0IGFueSBvbmUgdGltZS4gQSBnb29kIHJ1bGUgb2YgdGh1bWIgaXMgdG8gc2V0IHRoaXMgdmFyaWFibGUgdG8gdHdpY2UgdGhlIG51bWJlciBvZiBjb3Jlcy4iCitCQkNMQVNTRVhURU5EW2RvY10gPSAiQWxsb3dzIHlvdSB0byBleHRlbmQgYSByZWNpcGUgc28gdGhhdCBpdCBidWlsZHMgdmFyaWFudHMgb2YgdGhlIHNvZnR3YXJlLiBDb21tb24gdmFyaWFudHMgZm9yIHJlY2lwZXMgYXJlICduYXRpdmUnLCAnY3Jvc3MnLCAnbmF0aXZlc2RrJyBhbmQgbXVsdGlsaWJzLiIKK0JCRklMRV9DT0xMRUNUSU9OU1tkb2NdID0gIkxpc3RzIHRoZSBuYW1lcyBvZiBjb25maWd1cmVkIGxheWVycy4gVGhlc2UgbmFtZXMgYXJlIHVzZWQgdG8gZmluZCB0aGUgb3RoZXIgQkJGSUxFXyogdmFyaWFibGVzLiIKK0JCRklMRV9QQVRURVJOW2RvY10gPSAiVmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIG1hdGNoIGZpbGVzIGZyb20gQkJGSUxFUyBpbiBhIHBhcnRpY3VsYXIgbGF5ZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgYSBsYXllci4iCitCQkZJTEVfUFJJT1JJVFlbZG9jXSA9ICJBc3NpZ25zIHRoZSBwcmlvcml0eSBmb3IgcmVjaXBlIGZpbGVzIGluIGVhY2ggbGF5ZXIuIFNldHRpbmcgdGhpcyB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHByaW9yaXRpemUgYSBsYXllciBhZ2FpbnN0IG90aGVyIGxheWVycyB0aGF0IGNvbnRhaW4gdGhlIHNhbWUgcmVjaXBlLiIKK0JCRklMRVNbZG9jXSA9ICJMaXN0IG9mIHJlY2lwZSBmaWxlcyB1c2VkIGJ5IEJpdEJha2UgdG8gYnVpbGQgc29mdHdhcmUuIgorQkJJTkNMVURFTE9HU1tkb2NdID0gIlZhcmlhYmxlIHRoYXQgY29udHJvbHMgaG93IEJpdEJha2UgZGlzcGxheXMgbG9ncyBvbiBidWlsZCBmYWlsdXJlLiIKK0JCSU5DTFVERUxPR1NfTElORVNbZG9jXSA9ICJBbW91bnQgb2YgbG9nIGxpbmVzIHByaW50ZWQgb24gZmFpbHVyZS4iCitCQkxBWUVSU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMgdG8gZW5hYmxlIGR1cmluZyB0aGUgYnVpbGQuIFRoaXMgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0aGUgYmJsYXllcnMuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuIgorQkJMQVlFUlNfTk9OX1JFTU9WQUJMRVtkb2NdID0gIkxpc3RzIGNvcmUgbGF5ZXJzIHRoYXQgY2Fubm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgYmJsYXllcnMuY29uZiBmaWxlLiIKK0JCTUFTS1tkb2NdID0gIlByZXZlbnRzIEJpdEJha2UgZnJvbSBwcm9jZXNzaW5nIHNwZWNpZmljIHJlY2lwZXMgb3IgcmVjaXBlIGFwcGVuZCBmaWxlcy4gVXNlIHRoZSBCQk1BU0sgdmFyaWFibGUgZnJvbSB3aXRoaW4gY29uZi9sb2NhbC5jb25mLiIKK0JCUEFUSFtkb2NdID0gIlVzZWQgYnkgQml0QmFrZSB0byBsb2NhdGUgLmJiY2xhc3MgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFRoaXMgdmFyaWFibGUgaXMgYW5hbG9nb3VzIHRvIHRoZSBQQVRIIHZhcmlhYmxlLiIKK0JCU0VSVkVSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBzZXJ2ZXIgdGhhdCBydW5zIG1lbW9yeS1yZXNpZGVudCBCaXRCYWtlLiIKK0JJTkNPTkZJR19HTE9CW2RvY10gPSAiV2hlbiBpbmhlcml0aW5nIGJpbmNvbmZpZy5iYmNsYXNzIGZyb20gYSByZWNpcGUsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgd2lsZGNhcmQgZm9yIGNvbmZpZ3VyYXRpb24gc2NyaXB0cyB0aGF0IG5lZWQgZWRpdGluZy4iCitCUFtkb2NdID0gIlRoZSBiYXNlIHJlY2lwZSBuYW1lIGFuZCB2ZXJzaW9uIGJ1dCB3aXRob3V0IGFueSBzcGVjaWFsIHJlY2lwZSBuYW1lIHN1ZmZpeCAoaS5lLiAtbmF0aXZlLCBsaWI2NC0sIGFuZCBzbyBmb3J0aCkuIEJQIGlzIGNvbXByaXNlZCBvZiAke0JQTn0tJHtQVn0iCitCUE5bZG9jXSA9ICJUaGUgYmFyZSBuYW1lIG9mIHRoZSByZWNpcGUuIFRoaXMgdmFyaWFibGUgaXMgYSB2ZXJzaW9uIG9mIHRoZSBQTiB2YXJpYWJsZSBidXQgcmVtb3ZlcyBjb21tb24gc3VmZml4ZXMgYW5kIHByZWZpeGVzLiIKK0JVR1RSQUNLRVJbZG9jXSA9ICJTcGVjaWZpZXMgYSBVUkwgZm9yIGFuIHVwc3RyZWFtIGJ1ZyB0cmFja2luZyB3ZWJzaXRlIGZvciBhIHJlY2lwZS4iCitCVUlMRF9BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIGJ1aWxkaW5nIGFyY2hpdGVjdHVyZSAoZS5nLiBpNjg2KS4iCitCVUlMRF9PU1tkb2NdID0gIlRoZSBvcGVyYXRpbmcgc3lzdGVtIChpbiBsb3dlciBjYXNlKSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGxpbnV4KS4iCitCVUlMRERJUltkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitCVUlMRFNUQVRTX0JBU0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyBidWlsZCBzdGF0aXN0aWNzIHdoZW4geW91IHVzZSBhbmQgZW5hYmxlIHRoZSBidWlsZHN0YXRzIGNsYXNzLiIKK0JVU1lCT1hfU1BMSVRfU1VJRFtkb2NdID0gIkZvciB0aGUgQnVzeUJveCByZWNpcGUsIHNwZWNpZmllcyB3aGV0aGVyIHRvIHNwbGl0IHRoZSBvdXRwdXQgZXhlY3V0YWJsZSBmaWxlIGludG8gdHdvIHBhcnRzOiBvbmUgZm9yIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBzZXR1aWQgcm9vdCwgYW5kIG9uZSBmb3IgdGhlIHJlbWFpbmluZyBmZWF0dXJlcy4iCisKKyNDCisKK0NBQ0hFW2RvY10gID0gIlRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgY2FjaGUgb2YgdGhlIG1ldGFkYXRhLiIKK0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIFRBUkdFVF9DRkxBR1MuIgorQ0xBU1NPVkVSUklERVtkb2NdID0gIkFuIGludGVybmFsIHZhcmlhYmxlIHNwZWNpZnlpbmcgdGhlIHNwZWNpYWwgY2xhc3Mgb3ZlcnJpZGUgdGhhdCBzaG91bGQgY3VycmVudGx5IGFwcGx5IChlLmcuICJjbGFzcy10YXJnZXQiLCAiY2xhc3MtbmF0aXZlIiwgYW5kIHNvIGZvcnRoKS4iCitDTEVBTkJST0tFTltkb2NdID0gIlNwZWNpZmllcyBpZiAnbWFrZSBjbGVhbicgZG9lcyBub3Qgd29yayBmb3IgYSByZWNpcGUgKGFuZCB0aGVyZWZvcmUgdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgbm90IHRyeSB0byB1c2UgaXQgZHVyaW5nIGRvX2NvbmZpZ3VyZSkiCitDT01CSU5FRF9GRUFUVVJFU1tkb2NdID0gIkEgc2V0IG9mIGZlYXR1cmVzIGNvbW1vbiBiZXR3ZWVuIE1BQ0hJTkVfRkVBVFVSRVMgYW5kIERJU1RST19GRUFUVVJFUy4iCitDT01NT05fTElDRU5TRV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMgaW4gdGhlIFNvdXJjZSBEaXJlY3RvcnksIHdoaWNoIGlzIHdoZXJlIGdlbmVyaWMgbGljZW5zZSBmaWxlcyByZXNpZGUuIgorQ09NUEFUSUJMRV9IT1NUW2RvY10gPSAiQSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCByZXNvbHZlcyB0byBvbmUgb3IgbW9yZSBob3N0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5hdGl2ZSkgb3Igb25lIG9yIG1vcmUgdGFyZ2V0cyAod2hlbiB0aGUgcmVjaXBlIGlzIG5vbi1uYXRpdmUpIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCitDT01QQVRJQkxFX01BQ0hJTkVbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIHRhcmdldCBtYWNoaW5lcyB3aXRoIHdoaWNoIGEgcmVjaXBlIGlzIGNvbXBhdGlibGUuIgorQ09NUExFTUVOVEFSWV9HTE9CW2RvY10gPSAiRGVmaW5lcyB3aWxkY2FyZHMgdG8gbWF0Y2ggd2hlbiBpbnN0YWxsaW5nIGEgbGlzdCBvZiBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGZvciBhbGwgdGhlIHBhY2thZ2VzIGluc3RhbGxlZCBpbiBhbiBpbWFnZS4iCitDT05GRklMRVNbZG9jXSA9ICJJZGVudGlmaWVzIGVkaXRhYmxlIG9yIGNvbmZpZ3VyYWJsZSBmaWxlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgcGFja2FnZS4iCitDT05GSUdfU0lURVtkb2NdID0gIkEgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5zIGF1dG9jb25mIHRlc3QgcmVzdWx0cyByZWxldmFudCB0byB0aGUgY3VycmVudCBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSBBdXRvdG9vbHMgdXRpbGl0aWVzIHdoZW4gcnVubmluZyBjb25maWd1cmUuIgorQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgZGlzdHJpYnV0aW9uIGZlYXR1cmVzIHRoYXQgd291bGQgYmUgaW4gY29uZmxpY3Qgc2hvdWxkIHRoZSByZWNpcGUgYmUgYnVpbHQuIgorQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGFkZGVkIHRvIHRoZSBpbWFnZS4gWW91IHNob3VsZCBvbmx5IHNldCB0aGlzIHZhcmlhYmxlIGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0NPUkVCQVNFW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBPcGVuRW1iZWRkZWQgQ29yZSBNZXRhZGF0YSBsYXllciAoaS5lLiBtZXRhKS4iCitDT05GX1ZFUlNJT05bZG9jXSA9ICJUcmFja3MgdGhlIHZlcnNpb24gb2YgbG9jYWwuY29uZi4gIEluY3JlYXNlZCBlYWNoIHRpbWUgYnVpbGQvY29uZi8gY2hhbmdlcyBpbmNvbXBhdGlibHkuIgorQ1ZTRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBjdnMgY2hlY2tvdXRzIHdpbGwgYmUgc3RvcmVkIGluLiIKKworI0QKKworRFtkb2NdID0gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuIgorREFURVtkb2NdID0gIlRoZSBkYXRlIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBZTUQgZm9ybWF0LiIKK0RBVEVUSU1FW2RvY10gPSAiVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkLiIKK0RFQlVHX0JVSUxEW2RvY10gPSAiU3BlY2lmaWVzIHRvIGJ1aWxkIHBhY2thZ2VzIHdpdGggZGVidWdnaW5nIGluZm9ybWF0aW9uLiBUaGlzIGluZmx1ZW5jZXMgdGhlIHZhbHVlIG9mIHRoZSBTRUxFQ1RFRF9PUFRJTUlaQVRJT04gdmFyaWFibGUuIgorREVCVUdfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYSBzeXN0ZW0gZm9yIGRlYnVnZ2luZy4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLU8gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcnLiIKK0RFRkFVTFRfUFJFRkVSRU5DRVtkb2NdID0gIlNwZWNpZmllcyBhIHdlYWsgYmlhcyBmb3IgcmVjaXBlIHNlbGVjdGlvbiBwcmlvcml0eS4iCitERVBFTkRTW2RvY10gPSAiTGlzdHMgYSByZWNpcGUncyBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciByZWNpcGUgZmlsZXMpLiIKK0RFUExPWV9ESVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYWwgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzLCBwYWNrYWdlcywgU0RLcyBhbmQgb3RoZXIgb3V0cHV0IGZpbGVzIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtLiIKK0RFUExPWV9ESVJfSU1BR0VbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGFyZWEgdGhhdCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRvIHBsYWNlIGltYWdlcyBhbmQgb3RoZXIgYXNzb2NpYXRlZCBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgZGVwbG95ZWQgb250byB0aGUgdGFyZ2V0IG1hY2hpbmUuIgorREVQTE9ZRElSW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBkZXBsb3kgY2xhc3MsIHRoZSBERVBMT1lESVIgcG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSBmb3IgZGVwbG95ZWQgZmlsZXMuIgorREVTQ1JJUFRJT05bZG9jXSA9ICJUaGUgcGFja2FnZSBkZXNjcmlwdGlvbiB1c2VkIGJ5IHBhY2thZ2UgbWFuYWdlcnMuIElmIG5vdCBzZXQsIERFU0NSSVBUSU9OIHRha2VzIHRoZSB2YWx1ZSBvZiB0aGUgU1VNTUFSWSB2YXJpYWJsZS4iCitESVNUUk9bZG9jXSA9ICJUaGUgc2hvcnQgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgdmFyaWFibGUgaXMgYmxhbmssIG1ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgd2lsbCBiZSB1c2VkLiIKK0RJU1RST19FWFRSQV9SREVQRU5EU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZGlzdHJvLXNwZWNpZmljIHBhY2thZ2VzIHRvIGFkZCB0byBhbGwgaW1hZ2VzLiBUaGUgdmFyaWFibGUgb25seSBhcHBsaWVzIHRvIHRoZSBpbWFnZXMgdGhhdCBpbmNsdWRlIHBhY2thZ2Vncm91cC1iYXNlLiIKK0RJU1RST19FWFRSQV9SUkVDT01NRU5EU1tkb2NdID0gIlNwZWNpZmllcyBhIGxpc3Qgb2YgZGlzdHJvLXNwZWNpZmljIHBhY2thZ2VzIHRvIGFkZCB0byBhbGwgaW1hZ2VzIGlmIHRoZSBwYWNrYWdlcyBleGlzdC4gVGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJ1dCB5b3UgY2FuIHJlbW92ZSB0aGVtLiIKK0RJU1RST19GRUFUVVJFU1tkb2NdID0gIlRoZSBmZWF0dXJlcyBlbmFibGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST19GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTF9DT05TSURFUkVELiBUaGlzIHZhcmlhYmxlIGlzIHNldCBpbiB0aGUgbWV0YS9jb25mL2JpdGJha2UuY29uZiBmaWxlIGFuZCBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlci1jb25maWd1cmFibGUuIgorRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIERJU1RST19GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBESVNUUk9fRkVBVFVSRVMpIGR1cmluZyB0aGUgYnVpbGQuIgorRElTVFJPX05BTUVbZG9jXSA9ICJUaGUgbG9uZyBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPX1BOX0FMSUFTW2RvY10gPSAiQWxpYXMgbmFtZXMgdXNlZCBmb3IgdGhlIHJlY2lwZSBpbiB2YXJpb3VzIExpbnV4IGRpc3RyaWJ1dGlvbnMuIgorRElTVFJPX1ZFUlNJT05bZG9jXSA9ICJUaGUgdmVyc2lvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiIKK0RJU1RST09WRVJSSURFU1tkb2NdID0gIkxpc3RzIG92ZXJyaWRlcyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBkaXN0cmlidXRpb24uIEJ5IGRlZmF1bHQsIHRoZSB2YXJpYWJsZSBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiB0aGUgRElTVFJPIHZhcmlhYmxlLiIKK0RMX0RJUltkb2NdID0gIlRoZSBjZW50cmFsIGRvd25sb2FkIGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIHN0b3JlIGRvd25sb2Fkcy4gQnkgZGVmYXVsdCwgdGhlIGRpcmVjdG9yeSBpcyAnZG93bmxvYWRzJyBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKKworI0UKKworRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTltkb2NdID0gIkNvbnRyb2xzIHdoaWNoIGxvY2FsZXMgZm9yIGdsaWJjIGFyZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBidWlsZC4gVGhlIHZhcmlhYmxlIGlzIHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IGRldmljZSBoYXMgNjRNYnl0ZXMgb2YgUkFNIG9yIGxlc3MuIgorRVJST1JfUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgZXJyb3JzIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYQ0xVREVfRlJPTV9XT1JMRFtkb2NdID0gIkRpcmVjdHMgQml0QmFrZSB0byBleGNsdWRlIGEgcmVjaXBlIGZyb20gd29ybGQgYnVpbGRzIChpLmUuIGJpdGJha2Ugd29ybGQpLiIKK0VYVEVORFBFW2RvY10gPSAiVXNlZCB3aXRoIGZpbGUgYW5kIHBhdGhuYW1lcyB0byBjcmVhdGUgYSBwcmVmaXggZm9yIGEgcmVjaXBlJ3MgdmVyc2lvbiBiYXNlZCBvbiB0aGUgcmVjaXBlJ3MgUEUgdmFsdWUuIElmIFBFIGlzIHNldCBhbmQgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGEgcmVjaXBlLCBFWFRFTkRQRSBiZWNvbWVzIHRoYXQgdmFsdWUuIgorRVhURU5EUEtHVltkb2NdID0gIlRoZSBmdWxsIHBhY2thZ2UgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGFzIGl0IGFwcGVhcnMgb24gdGhlIGZpbmFsIHBhY2thZ2VzIHByb2R1Y2VkIGJ5IGEgcmVjaXBlLiIKK0VYVEVSTkFMU1JDW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzb3VyY2UgdHJlZSwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWFRFUk5BTFNSQ19CVUlMRFtkb2NdID0gIklmIGV4dGVybmFsc3JjLmJiY2xhc3MgaXMgaW5oZXJpdGVkLCB0aGlzIHZhcmlhYmxlIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSByZWNpcGUncyBzb3VyY2UgY29kZSBpcyBidWlsdCwgd2hpY2ggaXMgb3V0c2lkZSBvZiB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitFWFRSQV9JTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorRVhUUkFfSU1BR0VERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZXMgdG8gYnVpbGQgdGhhdCBkbyBub3QgcHJvdmlkZSBwYWNrYWdlcyBmb3IgaW5zdGFsbGluZyBpbnRvIHRoZSByb290IGZpbGVzeXN0ZW0uIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGxpc3QgcmVjaXBlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgaW1hZ2UsIGJ1dCBub3QgbmVlZGVkIGluIHRoZSByb290IGZpbGVzeXN0ZW0uIgorRVhUUkFfT0VDTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgY21ha2Ugb3B0aW9ucy4iCitFWFRSQV9PRUNPTkZbZG9jXSA9ICJBZGRpdGlvbmFsIGNvbmZpZ3VyZSBzY3JpcHQgb3B0aW9ucy4iCitFWFRSQV9PRU1BS0VbZG9jXSA9ICJBZGRpdGlvbmFsIEdOVSBtYWtlIG9wdGlvbnMuIgorRVhUUkFfT0VTQ09OU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHNjb25zIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZSBzY29ucyBjb21tYW5kIGxpbmUuIgorRVhUUkFfUU1BS0VWQVJTX1BPU1RbZG9jXSA9ICJDb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvciBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gcW1ha2Ugd2hlbiB0aGUgYXJndW1lbnRzIG5lZWQgdG8gYmUgYWZ0ZXIgdGhlIC5wcm8gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIgorRVhUUkFfUU1BS0VWQVJTX1BSRVtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBiZWZvcmUgdGhlIC5wcm8gZmlsZSBsaXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIgorRVhUUkFfVVNFUlNfUEFSQU1TW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZXh0cmF1c2VycyBjbGFzcywgdGhpcyB2YXJpYWJsZSBwcm92aWRlcyBpbWFnZSBsZXZlbCB1c2VyIGFuZCBncm91cCBvcGVyYXRpb25zLiIKKworI0YKKworRkVFRF9ERVBMT1lESVJfQkFTRV9VUklbZG9jXSA9ICJBbGxvdyB0byBzZXJ2ZSBpcGsgZGVwbG95IGRpcmVjdG9yeSBhcyBhbiBhZCBob2MgZmVlZCAoYm9nb2ZlZWQpLiBTZXQgdG8gYmFzZSBVUkwgb2YgdGhlIGRpcmVjdG9yeSBhcyBleHBvcnRlZCBieSBIVFRQLiBTZXQgb2YgYWQgaG9jIGZlZWQgY29uZmlncyB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgaW1hZ2UuIgorRklMRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBkaXJlY3RvcmllcyBvciBmaWxlcyB0aGF0IGFyZSBwbGFjZWQgaW4gcGFja2FnZXMuIgorRklMRVNFWFRSQVBBVEhTW2RvY10gPSAiRXh0ZW5kcyB0aGUgc2VhcmNoIHBhdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGxvb2tpbmcgZm9yIGZpbGVzIGFuZCBwYXRjaGVzIGFzIGl0IHByb2Nlc3NlcyByZWNpcGVzIGFuZCBhcHBlbmQgZmlsZXMuIgorRklMRVNPVkVSUklERVNbZG9jXSA9ICJBIHN1YnNldCBvZiBPVkVSUklERVMgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBmb3IgY3JlYXRpbmcgRklMRVNQQVRILiIKK0ZJTEVTUEFUSFtkb2NdID0gIlRoZSBkZWZhdWx0IHNldCBvZiBkaXJlY3RvcmllcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gc2VhcmNoaW5nIGZvciBwYXRjaGVzIGFuZCBmaWxlcy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgYmFzZS5iYmNsYXNzIGNsYXNzIGZvdW5kIGluIG1ldGEvY2xhc3NlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeS4gRG8gbm90IGhhbmQtZWRpdCB0aGUgRklMRVNQQVRIIHZhcmlhYmxlLiIKK0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTW2RvY10gPSAiQWxsb3dzIHlvdSB0byBkZWZpbmUgeW91ciBvd24gZmlsZSBwZXJtaXNzaW9ucyBzZXR0aW5ncyB0YWJsZSBhcyBwYXJ0IG9mIHlvdXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBhY2thZ2luZyBwcm9jZXNzLiIKK0ZPTlRfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBmb250IHBhY2thZ2VzLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICdmb250Y29uZmlnLXV0aWxzJy4iCitGT05UX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgZm9udGNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGlkZW50aWZpZXMgcGFja2FnZXMgY29udGFpbmluZyBmb250IGZpbGVzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgYnkgRm9udGNvbmZpZy4iCitGVUxMX09QVElNSVpBVElPTltkb2NdPSAiVGhlIG9wdGlvbnMgdG8gcGFzcyBpbiBUQVJHRVRfQ0ZMQUdTIGFuZCBDRkxBR1Mgd2hlbiBjb21waWxpbmcgYW4gb3B0aW1pemVkIHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yJy4iCisKKyNHCisKK0dJVERJUltkb2NdID0gIlRoZSBkaXJlY3Rvcnkgd2hlcmUgR2l0IGNsb25lcyB3aWxsIGJlIHN0b3JlZC4iCitHUk9VUEFERF9QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgZ3JvdXAgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCitHUk9VUE1FTVNfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBncm91cG1lbXMgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIG1lbWJlcnMgb2YgYSBncm91cCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCitHUlVCX0dGWFNFUklBTFtkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpIHRvIGhhdmUgZ3JhcGhpY3MgYW5kIHNlcmlhbCBpbiB0aGUgYm9vdCBtZW51LiIKK0dSVUJfT1BUU1tkb2NdID0gIkFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpIGNvbmZpZ3VyYXRpb24uIgorR1JVQl9USU1FT1VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlZmF1bHQgTEFCRUwgaW4gdGhlIEdOVSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIgKEdSVUIpLiIKK0dUS0lNTU9EVUxFU19QQUNLQUdFU1tkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgZ3RrLWltbW9kdWxlcy1jYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgR1RLKyBpbnB1dCBtZXRob2QgbW9kdWxlcyBiZWluZyBpbnN0YWxsZWQgd2hlbiB0aGUgbW9kdWxlcyBhcmUgaW4gcGFja2FnZXMgb3RoZXIgdGhhbiB0aGUgbWFpbiBwYWNrYWdlLiIKKworI0gKKworSE9NRVBBR0VbZG9jXSA9ICJXZWJzaXRlIHdoZXJlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvZnR3YXJlIHRoZSByZWNpcGUgaXMgYnVpbGRpbmcgY2FuIGJlIGZvdW5kLiIKK0hPU1RfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBOb3JtYWxseSBzYW1lIGFzIHRoZSBUQVJHRVRfQVJDSC4iCitIT1NUX0NDX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9DQ19BUkNILiIKK0hPU1RfT1NbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG9wZXJhdGluZyBzeXN0ZW0uIE5vcm1hbGx5IHRoZSBzYW1lIGFzIHRoZSBUQVJHRVRfT1MuIgorSE9TVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MgY29tcGlsZSB0b29sY2hhaW4uIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9QUkVGSVguIgorSE9TVF9TWVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBmb3Igd2l0aCB0aGUgYnVpbGQgaXMgb2NjdXJyaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHJlY2lwZS4iCitIT1NUX1ZFTkRPUltkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB2ZW5kb3IuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9WRU5ET1IuIgorCisjSQorCitJQ0VDQ19FTlZfRVhFQ1tkb2NdID0gIlBvaW50cyB0byB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCB5b3UgcHJvdmlkZS4iCitJQ0VDQ19QQVRIW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSBpY2VjYyBiaW5hcnkuIgorSUNFQ0NfVVNFUl9DTEFTU19CTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciBjbGFzc2VzIHRoYXQgeW91IGRvIG5vdCB3YW50IHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQgdG8gY29uc2lkZXIuIgorSUNFQ0NfVVNFUl9QQUNLQUdFX0JMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIHJlY2lwZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4iCitJQ0VDQ19VU0VSX1BBQ0tBR0VfV0xbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHVzZSBhbiBlbXB0eSBQQVJBTExFTF9NQUtFIHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZm9yY2UgcmVtb3RlIGRpc3RyaWJ1dGVkIGNvbXBpbGF0aW9uIG9uIHVzaW5nIHRoZSBJY2VjcmVhbSBkaXN0cmlidXRlZCBjb21waWxlIHN1cHBvcnQuIgorSU1BR0VfQkFTRU5BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIG9mIGltYWdlIG91dHB1dCBmaWxlcy4iCitJTUFHRV9CT09UX0ZJTEVTW2RvY10gPSAiV2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyBmcm9tICR7REVQTE9ZX0RJUl9JTUFHRX0gdG8gcGxhY2UgaW4gYm9vdCBwYXJ0aXRpb24uIEVudHJpZXMgd2lsbCBiZSBpbnN0YWxsZWQgdW5kZXIgYSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSBmaWxlLiBUbyBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgcGFzcyBhIGRlc2lyZWQgbmFtZSBhZnRlciBhIHNlbWljb2xvbiAoZWcuIHUtYm9vdC5pbWc7dWJvb3QpLiIKK0lNQUdFX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGFsbCBpbWFnZXMgc2hvdWxkIGluaGVyaXQuIgorSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJUaGUgcHJpbWFyeSBsaXN0IG9mIGZlYXR1cmVzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2UuIENvbmZpZ3VyZSB0aGlzIHZhcmlhYmxlIGluIGFuIGltYWdlIHJlY2lwZS4iCitJTUFHRV9GU1RZUEVTW2RvY10gPSAiRm9ybWF0cyBvZiByb290IGZpbGVzeXN0ZW0gaW1hZ2VzIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBjcmVhdGVkLiIKK0lNQUdFX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZS4gSW1hZ2UgcmVjaXBlcyBzZXQgSU1BR0VfSU5TVEFMTCB0byBzcGVjaWZ5IHRoZSBwYWNrYWdlcyB0byBpbnN0YWxsIGludG8gYW4gaW1hZ2UgdGhyb3VnaCBpbWFnZS5iYmNsYXNzLiIKK0lNQUdFX0xJTkdVQVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgbG9jYWxlcyB0byBpbnN0YWxsIGludG8gdGhlIGltYWdlIGR1cmluZyB0aGUgcm9vdCBmaWxlc3lzdGVtIGNvbnN0cnVjdGlvbiBwcm9jZXNzLiIKK0lNQUdFX05BTUVbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGltYWdlIGZpbGVzIG1pbnVzIHRoZSBleHRlbnNpb24uIgorSU1BR0VfT1ZFUkhFQURfRkFDVE9SW2RvY10gPSAiRGVmaW5lcyBhIG11bHRpcGxpZXIgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgaW1hZ2Ugc2l6ZSBmb3IgY2FzZXMgd2hlbiB0aGUgbXVsdGlwbGllciB0aW1lcyB0aGUgcmV0dXJuZWQgZGlzayB1c2FnZSB2YWx1ZSBmb3IgdGhlIGltYWdlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3VtIG9mIElNQUdFX1JPT1RGU19TSVpFIGFuZCBJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UuIgorSU1BR0VfUEtHVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIHBhY2thZ2UgdHlwZSAoREVCLCBSUE0sIElQSywgb3IgVEFSKSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJBZGRlZCBieSBjbGFzc2VzIHRvIHJ1biBwb3N0IHByb2Nlc3NpbmcgY29tbWFuZHMgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgaW1hZ2UuIgorSU1BR0VfUk9PVEZTW2RvY10gPSAiVGhlIGxvY2F0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gd2hpbGUgaXQgaXMgdW5kZXIgY29uc3RydWN0aW9uIChpLmUuIGR1cmluZyBkb19yb290ZnMpLiIKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRVtkb2NdID0gIkRlZmluZXMgYWRkaXRpb25hbCBmcmVlIGRpc2sgc3BhY2UgY3JlYXRlZCBpbiB0aGUgaW1hZ2UgaW4gS2J5dGVzLiBCeSBkZWZhdWx0LCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAnMCcuIgorSU1BR0VfUk9PVEZTX1NJWkVbZG9jXSA9ICJEZWZpbmVzIHRoZSBzaXplIGluIEtieXRlcyBmb3IgdGhlIGdlbmVyYXRlZCBpbWFnZS4iCitJTUFHRV9UWVBFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYnkgZGVmYXVsdC4iCitJTkNfUFJbZG9jXSA9ICJIZWxwcyBkZWZpbmUgdGhlIHJlY2lwZSByZXZpc2lvbiBmb3IgcmVjaXBlcyB0aGF0IHNoYXJlIGEgY29tbW9uIGluY2x1ZGUgZmlsZS4iCitJTkNPTVBBVElCTEVfTElDRU5TRVtkb2NdID0gIlNwZWNpZmllcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpY2Vuc2UgbmFtZXMgKGFzIHRoZXkgd291bGQgYXBwZWFyIGluIExJQ0VOU0UpIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBXaWxkY2FyZCBpcyBzdXBwb3J0ZWQsIHN1Y2ggYXMgJypHUEx2MyciCitJTkhJQklUX0RFRkFVTFRfREVQU1tkb2NdID0gIlByZXZlbnRzIHRoZSBkZWZhdWx0IGRlcGVuZGVuY2llcywgbmFtZWx5IHRoZSBDIGNvbXBpbGVyIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpLCBmcm9tIGJlaW5nIGFkZGVkIHRvIERFUEVORFMuIgorSU5ISUJJVF9QQUNLQUdFX1NUUklQW2RvY10gPSAiSWYgc2V0IHRvICIxIiwgY2F1c2VzIHRoZSBidWlsZCB0byBub3Qgc3RyaXAgYmluYXJpZXMgaW4gcmVzdWx0aW5nIHBhY2thZ2VzLiIKK0lOSEVSSVRbZG9jXSA9ICJDYXVzZXMgdGhlIG5hbWVkIGNsYXNzIHRvIGJlIGluaGVyaXRlZCBhdCB0aGlzIHBvaW50IGR1cmluZyBwYXJzaW5nLiBUaGUgdmFyaWFibGUgaXMgb25seSB2YWxpZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLiIKK0lOSEVSSVRfRElTVFJPW2RvY10gPSAiTGlzdHMgY2xhc3NlcyB0aGF0IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHRoZSBkaXN0cmlidXRpb24gbGV2ZWwuIEl0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gZWRpdCB0aGlzIHZhcmlhYmxlLiIKK0lOSVRSQU1GU19GU1RZUEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgZm9ybWF0IGZvciB0aGUgb3V0cHV0IGltYWdlIG9mIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyYW1mcyksIHdoaWNoIGlzIHVzZWQgZHVyaW5nIGJvb3QuIgorSU5JVFJEW2RvY10gPSAiSW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRpYWwgUkFNIGRpc2sgKGluaXRyZCkuIgorSU5JVFNDUklQVF9OQU1FW2RvY10gPSAiVGhlIGZpbGVuYW1lIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQgYXMgaW5zdGFsbGVkIHRvICR7c3lzY29uZmRpcn0vaW5pdC5kLiIKK0lOSVRTQ1JJUFRfUEFDS0FHRVNbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRoYXQgY29udGFpbiBpbml0c2NyaXB0cy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiBUaGUgdmFyaWFibGUgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIHRoZSBQTiB2YXJpYWJsZS4iCitJTklUU0NSSVBUX1BBUkFNU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIHVwZGF0ZS1yYy5kLiBUaGUgdmFyaWFibGUgaXMgbWFuZGF0b3J5IGFuZCBpcyB1c2VkIGluIHJlY2lwZXMgd2hlbiB1c2luZyB1cGRhdGUtcmMuZC5iYmNsYXNzLiIKK0lOU0FORV9TS0lQW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBRQSBjaGVja3MgdG8gc2tpcCBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlIHdpdGhpbiBhIHJlY2lwZS4iCitJUEtfRkVFRF9VUklTW2RvY10gPSAiTGlzdCBvZiBpcGtnIGZlZWQgcmVjb3JkcyB0byBwdXQgaW50byBnZW5lcmF0ZWQgaW1hZ2UuIgorCisjSworCitLQVJDSFtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCBhcmNoaXRlY3R1cmUgdXNlZCB3aGVuIGFzc2VtYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIFlvdSBkZWZpbmUgdGhlIEtBUkNIIHZhcmlhYmxlIGluIHRoZSBCU1AgRGVzY3JpcHRpb25zLiIKK0tCUkFOQ0hbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgdGhlIGtlcm5lbCBicmFuY2ggdGhhdCBpcyB2YWxpZGF0ZWQsIHBhdGNoZWQgYW5kIGNvbmZpZ3VyZWQgZHVyaW5nIGEgYnVpbGQuIgorS0JSQU5DSF9ERUZBVUxUW2RvY10gPSAiRGVmaW5lcyB0aGUgTGludXgga2VybmVsIHNvdXJjZSByZXBvc2l0b3J5J3MgZGVmYXVsdCBicmFuY2ggdXNlZCB0byBidWlsZCB0aGUgTGludXgga2VybmVsLiBVbmxlc3MgeW91IHNwZWNpZnkgb3RoZXJ3aXNlLCB0aGUgdmFyaWFibGUgaW5pdGlhbGl6ZXMgdG8gJ21hc3RlcicuIgorS0VSTkVMX0NMQVNTRVNbZG9jXSA9ICJBIGxpc3Qgb2YgY2xhc3NlcyBkZWZpbmluZyBrZXJuZWwgaW1hZ2UgdHlwZXMgdGhhdCBrZXJuZWwgY2xhc3Mgc2hvdWxkIGluaGVyaXQuIgorS0VSTkVMX0VYVFJBX0FSR1NbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBtYWtlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGFzc2VzIG9uIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuIgorS0VSTkVMX0ZFQVRVUkVTW2RvY10gPSAiSW5jbHVkZXMgYWRkaXRpb25hbCBtZXRhZGF0YSBmcm9tIHRoZSBZb2N0byBQcm9qZWN0IGtlcm5lbCBHaXQgcmVwb3NpdG9yeS4gVGhlIG1ldGFkYXRhIHlvdSBhZGQgdGhyb3VnaCB0aGlzIHZhcmlhYmxlIGluY2x1ZGVzIGNvbmZpZyBmcmFnbWVudHMgYW5kIGZlYXR1cmVzIGRlc2NyaXB0aW9ucy4iCitLRVJORUxfSU1BR0VUWVBFW2RvY10gPSAiVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGZvciBhIGRldmljZSwgdXN1YWxseSBzZXQgYnkgdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgZGVmYXVsdHMgdG8gJ3pJbWFnZScuIgorS0VSTkVMX01PRFVMRV9BVVRPTE9BRFtkb2NdID0gIkxpc3RzIGtlcm5lbCBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBhdXRvLWxvYWRlZCBkdXJpbmcgYm9vdCIKK0tFUk5FTF9NT0RVTEVfUFJPQkVDT05GW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgZm9yIHdoaWNoIHRoZSBidWlsZCBzeXN0ZW0gZXhwZWN0cyB0byBmaW5kIG1vZHVsZV9jb25mXyogdmFsdWVzIHRoYXQgc3BlY2lmeSBjb25maWd1cmF0aW9uIGZvciBlYWNoIG9mIHRoZSBtb2R1bGVzIgorS0VSTkVMX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKK0tFUk5FTF9TUkNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIFNUQUdJTkdfS0VSTkVMX0RJUiB3aXRoaW4gdGhlIG1vZHVsZSBjbGFzcyAobW9kdWxlLmJiY2xhc3MpLiIKK0tGRUFUVVJFX0RFU0NSSVBUSU9OW2RvY10gPSAiUHJvdmlkZXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBhIGNvbmZpZ3VyYXRpb24gZnJhZ21lbnQuIFlvdSB1c2UgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLnNjYyBmaWxlIHRoYXQgZGVzY3JpYmVzIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudCBmaWxlLiIKK0tNQUNISU5FW2RvY10gPSAiVGhlIG1hY2hpbmUgYXMga25vd24gYnkgdGhlIGtlcm5lbC4iCitLVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCisKKyNMCisKK0xBWUVSREVQRU5EU1tkb2NdID0gIkxpc3RzIHRoZSBsYXllcnMsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHVwb24gd2hpY2ggdGhpcyByZWNpcGUgZGVwZW5kcy4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBjb25mL2xheWVyLmNvbmYgZmlsZSBhbmQgbXVzdCBiZSBzdWZmaXhlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpYyBsYXllci4iCitMQVlFUkRJUltkb2NdID0gIldoZW4gdXNlZCBpbnNpZGUgdGhlIGxheWVyLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IGxheWVyLiIKK0xBWUVSVkVSU0lPTltkb2NdID0gIk9wdGlvbmFsbHkgc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIGEgbGF5ZXIgYXMgYSBzaW5nbGUgbnVtYmVyLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKK0xFQURfU09OQU1FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsZWFkIChvciBwcmltYXJ5KSBjb21waWxlZCBsaWJyYXJ5IGZpbGUgKC5zbykgdGhhdCB0aGUgZGViaWFuIGNsYXNzIGFwcGxpZXMgaXRzIG5hbWluZyBwb2xpY3kgdG8gZ2l2ZW4gYSByZWNpcGUgdGhhdCBwYWNrYWdlcyBtdWx0aXBsZSBsaWJyYXJpZXMuIgorTElDX0ZJTEVTX0NIS1NVTVtkb2NdID0gIkNoZWNrc3VtcyBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIHRoZSByZWNpcGUgc291cmNlIGNvZGUuIgorTElDRU5TRVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBsaWNlbnNlcyBmb3IgdGhlIHJlY2lwZS4gTG9naWNhbCBvcGVyYXRvcnMgJyYnIG9yICd8JyBhbmQgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQuIgorTElDRU5TRV9QQVRIW2RvY10gPSAiUGF0aCB0byBhZGRpdGlvbmFsIGxpY2Vuc2VzIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4iCitMSU5VWF9LRVJORUxfVFlQRVtkb2NdID0gIkRlZmluZXMgdGhlIGtlcm5lbCB0eXBlIHRvIGJlIHVzZWQgaW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4iCitMSU5VWF9WRVJTSU9OW2RvY10gPSAiVGhlIExpbnV4IHZlcnNpb24gZnJvbSBrZXJuZWwub3JnIG9uIHdoaWNoIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgYmVpbmcgYnVpbHQgdXNpbmcgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaXMgYmFzZWQuIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCitMSU5VWF9WRVJTSU9OX0VYVEVOU0lPTltkb2NdID0gIkEgc3RyaW5nIGV4dGVuc2lvbiBjb21waWxlZCBpbnRvIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgTGludXgga2VybmVsIGJ1aWx0IHdpdGggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIFlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUga2VybmVsIHJlY2lwZS4iCitMT0dfRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd3JpdGVzIG92ZXJhbGwgbG9nIGZpbGVzLiBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMgJHtUTVBESVJ9L2xvZyIKKworI00KKworTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGRldmljZSBmb3Igd2hpY2ggdGhlIGltYWdlIGlzIGJ1aWx0LiBZb3UgZGVmaW5lIE1BQ0hJTkUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVxdWlyZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHJlY29tbWVuZGVkIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdC4gQmVjYXVzZSB0aGlzIGlzIGEgJ21hY2hpbmUgZXNzZW50aWFsJyB2YXJpYWJsZSwgdGhlIGxpc3Qgb2YgcGFja2FnZXMgYXJlIGVzc2VudGlhbCBmb3IgdGhlIG1hY2hpbmUgdG8gYm9vdC4iCitNQUNISU5FX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiBIb3dldmVyLCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgbW9yZSBmdWxseS1mZWF0dXJlZCBpbWFnZXMgZGVwZW5kcyBvbiB0aGUgcGFja2FnZXMgYmVpbmcgcHJlc2VudC4iCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcGFja2FnZXMgdG8gaW5zdGFsbCBhcyBwYXJ0IG9mIHRoZSBpbWFnZSBiZWluZyBidWlsdCB0aGF0IGFyZSBub3QgZXNzZW50aWFsIGZvciBib290aW5nIHRoZSBtYWNoaW5lLiBUaGUgaW1hZ2UgYmVpbmcgYnVpbHQgaGFzIG5vIGJ1aWxkIGRlcGVuZGVuY2llcyBvbiB0aGUgcGFja2FnZXMgaW4gdGhpcyBsaXN0LiIKK01BQ0hJTkVfRkVBVFVSRVNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgaGFyZHdhcmUgZmVhdHVyZXMgdGhlIE1BQ0hJTkUgc3VwcG9ydHMuIgorTUFDSElORV9GRUFUVVJFU19CQUNLRklMTFtkb2NdID0gIkZlYXR1cmVzIHRvIGJlIGFkZGVkIHRvIE1BQ0hJTkVfRkVBVFVSRVMgaWYgbm90IGFsc28gcHJlc2VudCBpbiBNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRURbZG9jXSA9ICJGZWF0dXJlcyBmcm9tIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTEwgdGhhdCBzaG91bGQgbm90IGJlIGJhY2tmaWxsZWQgKGkuZS4gYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCitNQUNISU5FT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG1hY2hpbmUuIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBpbmNsdWRlcyB0aGUgdmFsdWUgb2YgTUFDSElORS4iCitNQUlOVEFJTkVSW2RvY10gPSAiVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIGRpc3RyaWJ1dGlvbiBtYWludGFpbmVyLiIKK01JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorTUxQUkVGSVhbZG9jXSA9ICJTcGVjaWZpZXMgYSBwcmVmaXggaGFzIGJlZW4gYWRkZWQgdG8gUE4gdG8gY3JlYXRlIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGEgcmVjaXBlIG9yIHBhY2thZ2UsIHN1Y2ggYXMgYSBNdWx0aWxpYiB2ZXJzaW9uLiIKK01PRFVMRV9UQVJCQUxMX0RFUExPWVtkb2NdID0gIkNvbnRyb2xzIGNyZWF0aW9uIG9mIHRoZSBtb2R1bGVzLSoudGd6IGZpbGUuIFNldCB0aGlzIHZhcmlhYmxlIHRvICIwIiB0byBkaXNhYmxlIGNyZWF0aW9uIG9mIHRoaXMgZmlsZSwgd2hpY2ggY29udGFpbnMgYWxsIG9mIHRoZSBrZXJuZWwgbW9kdWxlcyByZXN1bHRpbmcgZnJvbSBhIGtlcm5lbCBidWlsZC4iCitNVUxUSU1BQ0hfVEFSR0VUX1NZU1tkb2NdID0gIlNlcGFyYXRlcyBmaWxlcyBmb3IgZGlmZmVyZW50IG1hY2hpbmVzIHN1Y2ggdGhhdCB5b3UgY2FuIGJ1aWxkIGZvciBtdWx0aXBsZSB0YXJnZXQgbWFjaGluZXMgdXNpbmcgdGhlIHNhbWUgb3V0cHV0IGRpcmVjdG9yaWVzLiIKKworI04KKworTkFUSVZFTFNCU1RSSU5HW2RvY10gPSAiQSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGhvc3QgZGlzdHJpYnV0aW9uLiIKK05PX1JFQ09NTUVOREFUSU9OU1tkb2NdID0gIldoZW4gc2V0IHRvICcxJywgbm8gcmVjb21tZW5kZWQgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQuIFJlYWxpemUgdGhhdCBzb21lIHJlY29tbWVuZGVkIHBhY2thZ2VzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBjZXJ0YWluIHN5c3RlbSBmdW5jdGlvbmFsaXR5LCBzdWNoIGFzIGtlcm5lbC1tb2R1bGVzLiBJdCBpcyB1cCB0byB0aGUgdXNlciB0byBhZGQgcGFja2FnZXMgdG8gSU1BR0VfSU5TVEFMTCBhcyBuZWVkZWQuIgorTk9IRERbZG9jXSA9ICJDYXVzZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2tpcCBidWlsZGluZyB0aGUgLmhkZGltZyBpbWFnZS4iCitOT0lTT1tkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSBJU08gaW1hZ2UuIgorCisjTworCitPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgYmluY29uZmlnLmJiY2xhc3MgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgInNlZCIgY29tbWFuZC4iCitPRV9JTVBPUlRTW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgdXNlZCB0byB0ZWxsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoYXQgUHl0aG9uIG1vZHVsZXMgdG8gaW1wb3J0IGZvciBldmVyeSBQeXRob24gZnVuY3Rpb24gcnVuIGJ5IHRoZSBzeXN0ZW0uIgorT0VfVEVSTUlOQUxbZG9jXSA9ICJDb250cm9scyBob3cgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3Bhd25zIGludGVyYWN0aXZlIHRlcm1pbmFscyBvbiB0aGUgaG9zdCBkZXZlbG9wbWVudCBzeXN0ZW0uIgorT0VST09UW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSB0b3AtbGV2ZWwgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGlzIHNvdXJjZWQuIgorT0xERVNUX0tFUk5FTFtkb2NdID0gIkRlY2xhcmVzIHRoZSBvbGRlc3QgdmVyc2lvbiBvZiB0aGUgTGludXgga2VybmVsIHRoYXQgdGhlIHByb2R1Y2VkIGJpbmFyaWVzIG11c3Qgc3VwcG9ydC4iCitPVkVSUklERVNbZG9jXSA9ICJCaXRCYWtlIHVzZXMgT1ZFUlJJREVTIHRvIGNvbnRyb2wgd2hhdCB2YXJpYWJsZXMgYXJlIG92ZXJyaWRkZW4gYWZ0ZXIgQml0QmFrZSBwYXJzZXMgcmVjaXBlcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4iCisKKyNQCisKK1BbZG9jXSA9ICJUaGUgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24uIFAgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7UFZ9LiIKK1BBQ0tBR0VfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHJlc3VsdGluZyBwYWNrYWdlIG9yIHBhY2thZ2VzLiIKK1BBQ0tBR0VfQVJDSFNbZG9jXSA9ICJBIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIHRhcmdldCBpbiBvcmRlciBvZiBwcmlvcml0eS4iCitQQUNLQUdFX0JFRk9SRV9QTltkb2NdID0gIkVuYWJsZXMgZWFzaWx5IGFkZGluZyBwYWNrYWdlcyB0byBQQUNLQUdFUyBiZWZvcmUgJHtQTn0gc28gdGhhdCB0aGUgcGFja2FnZXMgY2FuIHBpY2sgdXAgZmlsZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBpbmNsdWRlZCBpbiB0aGUgZGVmYXVsdCBwYWNrYWdlLiIKK1BBQ0tBR0VfQ0xBU1NFU1tkb2NdID0gIlRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlIHdoZW4gcGFja2FnaW5nIGRhdGEuIEl0IGlzIHNldCBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitQQUNLQUdFX0VYQ0xVREVbZG9jXSA9ICJQYWNrYWdlcyB0byBleGNsdWRlIGZyb20gdGhlIGluc3RhbGxhdGlvbi4gSWYgYSBsaXN0ZWQgcGFja2FnZSBpcyByZXF1aXJlZCwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSBDUFUuIFRoaXMgdmFyaWFibGUgaXMgdXNlZnVsIHdoZW4geW91IGJ1aWxkIGZvciBzZXZlcmFsIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29ycy4iCitQQUNLQUdFX0dST1VQW2RvY10gPSAiRGVmaW5lcyBvbmUgb3IgbW9yZSBwYWNrYWdlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlIHdoZW4gYSBzcGVjaWZpYyBpdGVtIGlzIGluY2x1ZGVkIGluIElNQUdFX0ZFQVRVUkVTLiIKK1BBQ0tBR0VfSU5TVEFMTFtkb2NdID0gIkxpc3Qgb2YgdGhlIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBpbWFnZS4gVGhlIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkIGFuZCB1c2VzIElNQUdFX0lOU1RBTEwgYXMgcGFydCBvZiB0aGUgbGlzdC4iCitQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFlbZG9jXSA9ICJMaXN0IG9mIHBhY2thZ2VzIGF0dGVtcHRlZCB0byBiZSBpbnN0YWxsZWQuIElmIGEgbGlzdGVkIHBhY2thZ2UgZmFpbHMgdG8gaW5zdGFsbCwgdGhlIGJ1aWxkIHN5c3RlbSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBlcnJvci4gVGhpcyB2YXJpYWJsZSBpcyBnZW5lcmFsbHkgbm90IHVzZXItZGVmaW5lZC4iCitQQUNLQUdFQ09ORklHW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBwcm92aWRlcyBhIG1lYW5zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBmZWF0dXJlcyBvZiBhIHJlY2lwZSBvbiBhIHBlci1yZWNpcGUgYmFzaXMuIgorUEFDS0FHRVNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0byBiZSBjcmVhdGVkIGZyb20gdGhlIHJlY2lwZS4iCitQQUNLQUdFU19EWU5BTUlDW2RvY10gPSAiQSBwcm9taXNlIHRoYXQgeW91ciByZWNpcGUgc2F0aXNmaWVzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGZvciBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlIGZvdW5kIGluIG90aGVyIHJlY2lwZXMuIgorUEFSQUxMRUxfTUFLRVtkb2NdID0gIlNwZWNpZmllcyBleHRyYSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbWFrZSBjb21tYW5kIGR1cmluZyB0aGUgY29tcGlsZSB0YXNrcy4gVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIC1qIDQsIHdoZXJlIHRoZSBudW1iZXIgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwgdGhyZWFkcyBtYWtlIGNhbiBydW4uIgorUEFSQUxMRUxfTUFLRUlOU1RbZG9jXSA9ICJFeHRyYSBvcHRpb25zIHBhc3NlZCB0byB0aGUgbWFrZSBpbnN0YWxsIGNvbW1hbmQgZHVyaW5nIHRoZSBkb19pbnN0YWxsIHRhc2sgaW4gb3JkZXIgdG8gc3BlY2lmeSBwYXJhbGxlbCBpbnN0YWxsYXRpb24uIgorUEFUQ0hSRVNPTFZFW2RvY10gPSAiRW5hYmxlIG9yIGRpc2FibGUgaW50ZXJhY3RpdmUgcGF0Y2ggcmVzb2x1dGlvbi4iCitQQVRDSFRPT0xbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHV0aWxpdHkgdXNlZCB0byBhcHBseSBwYXRjaGVzIGZvciBhIHJlY2lwZSBkdXJpbmcgZG9fcGF0Y2guIgorUEVbZG9jXSA9ICJUaGUgZXBvY2ggb2YgdGhlIHJlY2lwZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJzAnLiBUaGUgZmllbGQgaXMgdXNlZCB0byBtYWtlIHVwZ3JhZGVzIHBvc3NpYmxlIHdoZW4gdGhlIHZlcnNpb25pbmcgc2NoZW1lIGNoYW5nZXMgaW4gc29tZSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIHdheS4iCitQRltkb2NdID0gIlNwZWNpZmllcyB0aGUgcmVjaXBlIG9yIHBhY2thZ2UgbmFtZSBhbmQgaW5jbHVkZXMgYWxsIHZlcnNpb24gYW5kIHJldmlzaW9uIG51bWJlcnMuIFRoaXMgdmFyaWFibGUgaXMgY29tcHJpc2VkIG9mICR7UE59LSR7RVhURU5EUEV9JHtQVn0tJHtQUn0uIgorUElYQlVGX1BBQ0tBR0VTW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgcGl4YnVmY2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyB0aGF0IGNvbnRhaW4gdGhlIHBpeGJ1ZiBsb2FkZXJzIHVzZWQgd2l0aCBnZGstcGl4YnVmLiIKK1BLR0RbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYmVmb3JlIHRoZXkgYXJlIHNwbGl0IGludG8gaW5kaXZpZHVhbCBwYWNrYWdlcy4iCitQS0dEQVRBX0RJUltkb2NdID0gIlBvaW50cyB0byBhIHNoYXJlZCwgZ2xvYmFsLXN0YXRlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGRhdGEgZ2VuZXJhdGVkIGR1cmluZyB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorUEtHREVTVFtkb2NdID0gIlBvaW50cyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBmb3IgZmlsZXMgdG8gYmUgcGFja2FnZWQgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKK1BLR0RFU1RXT1JLW2RvY10gPSAiUG9pbnRzIHRvIGEgdGVtcG9yYXJ5IHdvcmsgYXJlYSB1c2VkIGJ5IHRoZSBkb19wYWNrYWdlIHRhc2sgdG8gd3JpdGUgb3V0cHV0IGZyb20gdGhlIGRvX3BhY2thZ2VkYXRhIHRhc2suIgorUE5bZG9jXSA9ICJQTiByZWZlcnMgdG8gYSByZWNpcGUgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhcyBpbnB1dCB0byBjcmVhdGUgYSBwYWNrYWdlLiBJdCByZWZlcnMgdG8gYSBwYWNrYWdlIG5hbWUgaW4gdGhlIGNvbnRleHQgb2YgYSBmaWxlIGNyZWF0ZWQgb3IgcHJvZHVjZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorUE5CTEFDS0xJU1RbZG9jXSA9ICJMaXN0cyByZWNpcGVzIHlvdSBkbyBub3Qgd2FudCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBidWlsZC4iCitQUltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyAncjAnLiIKK1BSRUZFUlJFRF9QUk9WSURFUltkb2NdID0gIklmIG11bHRpcGxlIHJlY2lwZXMgcHJvdmlkZSBhbiBpdGVtLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKK1BSRUZFUlJFRF9WRVJTSU9OW2RvY10gPSAiSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIG9mIHJlY2lwZXMgYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgd2hpY2ggcmVjaXBlIHNob3VsZCBiZSBnaXZlbiBwcmVmZXJlbmNlLiIKK1BSRU1JUlJPUlNbZG9jXSA9ICJTcGVjaWZpZXMgYWRkaXRpb25hbCBwYXRocyBmcm9tIHdoaWNoIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGdldHMgc291cmNlIGNvZGUuIgorUFJJTkNbZG9jXSA9ICJDYXVzZXMgdGhlIFBSIHZhcmlhYmxlIG9mIC5iYmFwcGVuZCBmaWxlcyB0byBkeW5hbWljYWxseSBpbmNyZW1lbnQuIFRoaXMgaW5jcmVtZW50IG1pbmltaXplcyB0aGUgaW1wYWN0IG9mIGxheWVyIG9yZGVyaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICcwJy4iCitQUklPUklUWVtkb2NdID0gIkluZGljYXRlcyB0aGUgaW1wb3J0YW5jZSBvZiBhIHBhY2thZ2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnb3B0aW9uYWwnLiAgT3RoZXIgc3RhbmRhcmQgdmFsdWVzIGFyZSAncmVxdWlyZWQnLCAnc3RhbmRhcmQnIGFuZCAnZXh0cmEnLiIKK1BST1ZJREVTW2RvY10gPSAiQSBsaXN0IG9mIGFsaWFzZXMgdGhhdCBhIHJlY2lwZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHJlY2lwZXMgZHVyaW5nIHRoZSBidWlsZCBhcyBzcGVjaWZpZWQgYnkgREVQRU5EUy4iCitQUlNFUlZfSE9TVFtkb2NdID0gIlRoZSBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UgaG9zdCBhbmQgcG9ydC4iCitQVltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSB2ZXJzaW9uIGlzIG5vcm1hbGx5IGV4dHJhY3RlZCBmcm9tIHRoZSByZWNpcGUgZmlsZW5hbWUuIgorCisjUQorCitRTUFLRV9QUk9GSUxFU1tkb2NdID0gIlNwZWNpZmllcyB5b3VyIG93biBzdWJzZXQgb2YgLnBybyBmaWxlcyB0byBiZSBidWlsdCBmb3IgdXNlIHdpdGggcW1ha2UuIgorCisjUgorCitSQ09ORkxJQ1RTW2RvY10gPSAiVGhlIGxpc3Qgb2YgcGFja2FnZXMgdGhhdCBjb25mbGljdCB3aXRoIGFub3RoZXIgcGFja2FnZS4gTm90ZSB0aGF0IHRoZSBwYWNrYWdlIHdpbGwgbm90IGJlIGluc3RhbGxlZCBpZiB0aGUgY29uZmxpY3RpbmcgcGFja2FnZXMgYXJlIG5vdCBmaXJzdCByZW1vdmVkLiIKK1JERVBFTkRTW2RvY10gPSAiTGlzdHMgYSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgKGkuZS4gb3RoZXIgcGFja2FnZXMpIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgZm9yIHRoZSBwYWNrYWdlIHRvIGJlIGJ1aWx0LiBUaGV5IG11c3QgYmUgdGhlIG5hbWVzIG9mIG90aGVyIHBhY2thZ2VzIGFzIGxpc3RlZCBpbiB0aGUgUEFDS0FHRVMgdmFyaWFibGUsIG5vdCByZWNpcGUgbmFtZXMgKFBOKS4iCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkIHRoZSByZWNpcGUuIgorUk1fT0xEX0lNQUdFW2RvY10gPSAiUmVjbGFpbXMgZGlzayBzcGFjZSBieSByZW1vdmluZyBwcmV2aW91c2x5IGJ1aWx0IHZlcnNpb25zIG9mIHRoZSBzYW1lIGltYWdlIGZyb20gdGhlIGltYWdlcyBkaXJlY3RvcnkgcG9pbnRlZCB0byBieSB0aGUgREVQTE9ZX0RJUiB2YXJpYWJsZS4iCitSTV9XT1JLX0VYQ0xVREVbZG9jXSA9ICJXaXRoIHJtX3dvcmsgZW5hYmxlZCwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHdob3NlIHdvcmsgZGlyZWN0b3JpZXMgc2hvdWxkIG5vdCBiZSByZW1vdmVkLiIKK1JPT1RGU1tkb2NdID0gIkluZGljYXRlcyBhIGZpbGVzeXN0ZW0gaW1hZ2UgdG8gaW5jbHVkZSBhcyB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EW2RvY10gPSAiQWRkZWQgYnkgY2xhc3NlcyB0byBydW4gcG9zdCBwcm9jZXNzaW5nIGNvbW1hbmRzIG9uY2UgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gaGFzIGNyZWF0ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4iCitSUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZSBuYW1lIGFsaWFzZXMgdGhhdCBhIHBhY2thZ2UgYWxzbyBwcm92aWRlcy4gVGhlc2UgYWxpYXNlcyBhcmUgdXNlZnVsIGZvciBzYXRpc2Z5aW5nIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9mIG90aGVyIHBhY2thZ2VzIGJvdGggZHVyaW5nIHRoZSBidWlsZCBhbmQgb24gdGhlIHRhcmdldC4iCitSUkVDT01NRU5EU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGV4dGVuZHMgdGhlIHVzYWJpbGl0eSBvZiBhIHBhY2thZ2UgYmVpbmcgYnVpbHQuIFRoZSBwYWNrYWdlIGJlaW5nIGJ1aWx0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGlzIGxpc3Qgb2YgcGFja2FnZXMgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGJ1aWxkLCBidXQgbmVlZHMgdGhlbSBmb3IgdGhlIGV4dGVuZGVkIHVzYWJpbGl0eS4iCitSUkVQTEFDRVNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgcmVwbGFjZWQgYnkgYSBwYWNrYWdlLiBUaGUgcGFja2FnZSBtYW5hZ2VyIHVzZXMgdGhpcyB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHJlcGxhY2Ugb3RoZXIgcGFja2FnZShzKSBkdXJpbmcgYW4gdXBncmFkZS4iCitSU1VHR0VTVFNbZG9jXSA9ICJBIGxpc3Qgb2YgYWRkaXRpb25hbCBwYWNrYWdlcyB0aGF0IHlvdSBjYW4gc3VnZ2VzdCBmb3IgaW5zdGFsbGF0aW9uIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgYXQgdGhlIHRpbWUgYSBwYWNrYWdlIGlzIGluc3RhbGxlZC4gTm90IGFsbCBwYWNrYWdlIG1hbmFnZXJzIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LiIKKworI1MKKworU1tkb2NdID0gIlRoZSBsb2NhdGlvbiBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZXJlIHVucGFja2VkIHBhY2thZ2Ugc291cmNlIGNvZGUgcmVzaWRlcy4iCitTQU5JVFlfVEVTVEVEX0RJU1RST1NbZG9jXSA9ICJBIGxpc3Qgb2YgdGhlIGhvc3QgZGlzdHJpYnV0aW9uIGlkZW50aWZpZXJzIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdC4iCitTREtfQVJDSFtkb2NdID0gIlRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGZvciB0aGUgU0RLLiIKK1NES19ERVBMT1lbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHNldCB1cCBhbmQgdXNlZCBieSB0aGUgcG9wdWxhdGVfc2RrX2Jhc2UgdG8gd2hpY2ggdGhlIFNESyBpcyBkZXBsb3llZC4iCitTREtfRElSW2RvY10gPSAiVGhlIHBhcmVudCBkaXJlY3RvcnkgdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorU0RLX05BTUVbZG9jXSA9ICJUaGUgYmFzZSBuYW1lIGZvciBTREsgb3V0cHV0IGZpbGVzLiIKK1NES19PVVRQVVRbZG9jXSA9ICJUaGUgbG9jYXRpb24gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGVuIGNyZWF0aW5nIFNESyBvdXRwdXQuIgorU0RLSU1BR0VfRkVBVFVSRVNbZG9jXSA9ICJFcXVpdmFsZW50IHRvIElNQUdFX0ZFQVRVUkVTLiBIb3dldmVyLCB0aGlzIHZhcmlhYmxlIGFwcGxpZXMgdG8gdGhlIFNESyBnZW5lcmF0ZWQgZnJvbSBhbiBpbWFnZSB1c2luZyB0aGUgY29tbWFuZCAnYml0YmFrZSAtYyBwb3B1bGF0ZV9zZGsgaW1hZ2VuYW1lJy4iCitTREtNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBhcmNoaXRlY3R1cmUgKGkuZS4gaTY4NiBvciB4ODZfNjQpIGZvciB3aGljaCB0byBidWlsZCBTREsgYW5kIEFEVCBpdGVtcy4iCitTRUNUSU9OW2RvY10gPSAiVGhlIHNlY3Rpb24gaW4gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGNhdGVnb3JpemVkLiBQYWNrYWdlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIGNhbiBtYWtlIHVzZSBvZiB0aGlzIHZhcmlhYmxlLiIKK1NFTEVDVEVEX09QVElNSVpBVElPTltkb2NdID0gIlRoZSB2YXJpYWJsZSB0YWtlcyB0aGUgdmFsdWUgb2YgRlVMTF9PUFRJTUlaQVRJT04gdW5sZXNzIERFQlVHX0JVSUxEID0gJzEnLiBJbiB0aGlzIGNhc2UsIHRoZSB2YWx1ZSBvZiBERUJVR19PUFRJTUlaQVRJT04gaXMgdXNlZC4iCitTRVJJQUxfQ09OU09MRVtkb2NdID0gIlRoZSBzcGVlZCBhbmQgZGV2aWNlIGZvciB0aGUgc2VyaWFsIHBvcnQgdXNlZCB0byBhdHRhY2ggdGhlIHNlcmlhbCBjb25zb2xlLiBUaGlzIHZhcmlhYmxlIGlzIGdpdmVuIHRvIHRoZSBrZXJuZWwgYXMgdGhlICdjb25zb2xlJyBwYXJhbWV0ZXIuIEFmdGVyIGJvb3Rpbmcgb2NjdXJzLCBnZXR0eSBpcyBzdGFydGVkIG9uIHRoYXQgcG9ydCBzbyByZW1vdGUgbG9naW4gaXMgcG9zc2libGUuIgorU0VSSUFMX0NPTlNPTEVTW2RvY10gPSAiRGVmaW5lcyB0aGUgc2VyaWFsIGNvbnNvbGVzIChUVFlzKSB0byBlbmFibGUgdXNpbmcgZ2V0dHkuIgorU0VSSUFMX0NPTlNPTEVTX0NIRUNLW2RvY10gPSAiU2ltaWxhciB0byBTRVJJQUxfQ09OU09MRVMgZXhjZXB0IHRoZSBkZXZpY2UgaXMgY2hlY2tlZCBmb3IgZXhpc3RlbmNlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVuYWJsZSBpdC4gU3VwcG9ydGVkIG9ubHkgYnkgU3lzVmluaXQuIgorU0lHR0VOX0VYQ0xVREVfU0FGRV9SRUNJUEVfREVQU1tkb2NdID0gIkEgbGlzdCBvZiByZWNpcGUgZGVwZW5kZW5jaWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRldGVybWluZSBzaWduYXR1cmVzIG9mIHRhc2tzIGZyb20gb25lIHJlY2lwZSB3aGVuIHRoZXkgZGVwZW5kIG9uIHRhc2tzIGZyb20gYW5vdGhlciByZWNpcGUuIgorU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkVbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHN0YWJsZSBhbmQgd2lsbCBuZXZlciBjaGFuZ2UuIgorU0lURUlORk9fQklUU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIENQVS4iCitTSVRFSU5GT19FTkRJQU5ORVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBlbmRpYW4gYnl0ZSBvcmRlciBvZiB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhlIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgJ2xlJyBmb3IgJ2xpdHRsZS1lbmRpYW4nIG9yICdiZScgZm9yICdiaWctZW5kaWFuJy4iCitTT0NfRkFNSUxZW2RvY10gPSAiR3JvdXBzIHRvZ2V0aGVyIG1hY2hpbmVzIGJhc2VkIHVwb24gdGhlIHNhbWUgZmFtaWx5IG9mIFNPQyAoU3lzdGVtIE9uIENoaXApLiBZb3UgdHlwaWNhbGx5IHNldCB0aGlzIHZhcmlhYmxlIGluIGEgY29tbW9uIC5pbmMgZmlsZSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mIGFsbCB0aGUgbWFjaGluZXMuIgorU09MSUJTW2RvY10gPSAiRGVmaW5lcyB0aGUgc3VmZml4IGZvciBzaGFyZWQgbGlicmFyaWVzIHVzZWQgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4iCitTT0xJQlNERVZbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHRoZSBkZXZlbG9wbWVudCBzeW1ib2xpYyBsaW5rIChzeW1saW5rKSBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKK1NPVVJDRV9NSVJST1JfRkVUQ0hbZG9jXSA9ICJTd2l0Y2ggbWFya2luZyBidWlsZCBhcyBzb3VyY2UgZmV0Y2hlci4gVXNlZCB0byBza2lwIENPTVBBVElCTEVfKiBjaGVja2luZy4iCitTT1VSQ0VfTUlSUk9SX1VSTFtkb2NdID0gIlVSTCB0byBzb3VyY2UgbWlycm9yIHRoYXQgd2lsbCBiZSB1c2VkIGJlZm9yZSBmZXRjaGluZyBmcm9tIG9yaWdpbmFsIFNSQ19VUkkuIgorU1BFQ0lBTF9QS0dTVUZGSVhbZG9jXSA9ICJBIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIFBOIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gY3JlYXRlIHZhcmlhbnRzIG9mIHJlY2lwZXMgb3IgcGFja2FnZXMuIFRoZSBsaXN0IHNwZWNpZmllcyB0aGUgcHJlZml4ZXMgdG8gc3RyaXAgb2ZmIGR1cmluZyBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgc3VjaCBhcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQlBOIHZhcmlhYmxlLiIKK1NSQ19VUklbZG9jXSA9ICJUaGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgLSBsb2NhbCBvciByZW1vdGUuIFRoaXMgdmFyaWFibGUgdGVsbHMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBiaXRzIHRvIHB1bGwgaW4gZm9yIHRoZSBidWlsZCBhbmQgaG93IHRvIHB1bGwgdGhlbSBpbi4iCitTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0hbZG9jXSA9ICJCeSBkZWZhdWx0LCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hldGhlciBTUkNfVVJJIGNvbnRhaW5zIGZpbGVzIHRoYXQgYXJlIG1hY2hpbmUtc3BlY2lmaWMuIElmIHNvLCB0aGUgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBQQUNLQUdFX0FSQ0guIFNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byAnMCcgZGlzYWJsZXMgdGhpcyBiZWhhdmlvci4iCitTUkNEQVRFW2RvY10gPSAiVGhlIGRhdGUgb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyBvbmx5IGlmIHRoZSBzb3VyY2Ugd2FzIGZldGNoZWQgZnJvbSBhIFNvdXJjZSBDb2RlIE1hbmFnZXIgKFNDTSkuIgorU1JDUFZbZG9jXSA9ICJSZXR1cm5zIHRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgY3VycmVudCBwYWNrYWdlLiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIGhlbHAgZGVmaW5lIHRoZSB2YWx1ZSBvZiBQVi4iCitTUkNSRVZbZG9jXSA9ICJUaGUgcmV2aXNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIHVzZWQgdG8gYnVpbGQgdGhlIHBhY2thZ2UuIFRoaXMgdmFyaWFibGUgYXBwbGllcyB0byBTdWJ2ZXJzaW9uLCBHaXQsIE1lcmN1cmlhbCBhbmQgQmF6YWFyIG9ubHkuIgorU1NUQVRFX0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgZm9yIHRoZSBzaGFyZWQgc3RhdGUgY2FjaGUuIgorU1NUQVRFX01JUlJPUlNbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNlYXJjaCBvdGhlciBtaXJyb3IgbG9jYXRpb25zIGZvciBwcmVidWlsdCBjYWNoZSBkYXRhIG9iamVjdHMgYmVmb3JlIGJ1aWxkaW5nIG91dCB0aGUgZGF0YS4gWW91IGNhbiBzcGVjaWZ5IGEgZmlsZXN5c3RlbSBkaXJlY3Rvcnkgb3IgYSByZW1vdGUgVVJMIHN1Y2ggYXMgSFRUUCBvciBGVFAuIgorU1RBR0lOR19LRVJORUxfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aXRoIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMuIgorU1RBTVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGJhc2UgcGF0aCB1c2VkIHRvIGNyZWF0ZSByZWNpcGUgc3RhbXAgZmlsZXMuIFRoZSBwYXRoIHRvIGFuIGFjdHVhbCBzdGFtcCBmaWxlIGlzIGNvbnN0cnVjdGVkIGJ5IGV2YWx1YXRpbmcgdGhpcyBzdHJpbmcgYW5kIHRoZW4gYXBwZW5kaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIgorU1RBTVBTX0RJUltkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIHN0YW1wcy4iCitTVU1NQVJZW2RvY10gPSAiVGhlIHNob3J0ICg4MCBjaGFyYWN0ZXJzIG9yIGxlc3MpIHN1bW1hcnkgb2YgdGhlIGJpbmFyeSBwYWNrYWdlIGZvciBwYWNrYWdpbmcgc3lzdGVtcyBzdWNoIGFzIG9wa2csIHJwbSBvciBkcGtnLiBCeSBkZWZhdWx0LCBTVU1NQVJZIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBERVNDUklQVElPTiB2YXJpYWJsZSBpZiBERVNDUklQVElPTiBpcyBub3Qgc2V0IGluIHRoZSByZWNpcGUuIgorU1ZORElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBTdWJ2ZXJzaW9uIGNoZWNrb3V0cyB3aWxsIGJlIHN0b3JlZC4iCitTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGtlcm5lbCBib290IGRlZmF1bHQgY29uc29sZS4iCitTWVNMSU5VWF9PUFRTW2RvY10gPSAiTGlzdHMgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgc3lzbGludXggZmlsZS4iCitTWVNMSU5VWF9TRVJJQUxbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJucyBpdCBvZmYuIgorU1lTTElOVVhfU1BMQVNIW2RvY10gPSAiQW4gLkxTUyBmaWxlIHVzZWQgYXMgdGhlIGJhY2tncm91bmQgZm9yIHRoZSBWR0EgYm9vdCBtZW51IHdoZW4geW91IGFyZSB1c2luZyB0aGUgYm9vdCBtZW51LiIKK1NZU0xJTlVYX1NFUklBTF9UVFlbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFsdGVybmF0ZSBjb25zb2xlPXR0eS4uLiBrZXJuZWwgYm9vdCBhcmd1bWVudC4iCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NbZG9jXSA9ICJBIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgYWZ0ZXIgZmlsZXMgYXJlIHN0YWdlZCBpbnRvIHRoZSBzeXNyb290LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCB0byBhcHBseSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb24gdGhlIHN0YWdlZCBmaWxlcywgb3IgdG8gc3RhZ2UgYWRkaXRpb25hbCBmaWxlcy4iCitTWVNURU1EX0FVVE9fRU5BQkxFW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzZXJ2aWNlIHlvdSBoYXZlIHNwZWNpZmllZCBpbiBTWVNURU1EX1NFUlZJQ0Ugc2hvdWxkIGJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSBvciBub3QuIgorU1lTVEVNRF9QQUNLQUdFU1tkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgc3lzdGVtZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBsb2NhdGVzIHRoZSBzeXN0ZW1kIHVuaXQgZmlsZXMgd2hlbiB0aGV5IGFyZSBub3QgZm91bmQgaW4gdGhlIG1haW4gcmVjaXBlJ3MgcGFja2FnZS4iCitTWVNURU1EX1NFUlZJQ0VbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBzeXN0ZW1kIHNlcnZpY2UgbmFtZSBmb3IgYSBwYWNrYWdlLiIKK1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTW2RvY10gPSAiU3BlY2lmaWVzIHdoaWNoIHZpcnR1YWwgdGVybWluYWxzIHNob3VsZCBiZSBydW5uaW5nIGEgZ2V0dHksIHRoZSBkZWZhdWx0IGlzICcxJy4iCisKKyNUCisKK1RbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHBvaW50cyB0byBhIGRpcmVjdG9yeSB3ZXJlIEJpdEJha2UgcGxhY2VzIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggY29uc2lzdCBtb3N0bHkgb2YgdGFzayBsb2dzIGFuZCBzY3JpcHRzLCB3aGVuIGJ1aWxkaW5nIGEgcGFydGljdWxhciByZWNpcGUuIgorVEFSR0VUX0FSQ0hbZG9jXSA9ICJUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBkZXZpY2UgYmVpbmcgYnVpbHQuIFRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlczogYXJtLCBtaXBzLCBwcGMsIHg4NiwgeDg2LTY0LiIKK1RBUkdFVF9DRkxBR1NbZG9jXSA9ICJGbGFncyBwYXNzZWQgdG8gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGV2YWx1YXRlcyB0byB0aGUgc2FtZSBhcyBDRkxBR1MuIgorVEFSR0VUX0ZQVVtkb2NdID0gIlNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBoYW5kbGluZyBGUFUgY29kZS4gRm9yIEZQVS1sZXNzIHRhcmdldHMsIHdoaWNoIGluY2x1ZGUgbW9zdCBBUk0gQ1BVcywgdGhlIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvICdzb2Z0Jy4gSWYgbm90LCB0aGUga2VybmVsIGVtdWxhdGlvbiBnZXRzIHVzZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5LiIKK1RBUkdFVF9PU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0J3Mgb3BlcmF0aW5nIHN5c3RlbS4iCitUQVJHRVRfUFJFRklYW2RvY10gPSAiVGhlIHByZWZpeCBmb3IgdGhlIGNyb3NzLWNvbXBpbGUgdG9vbGNoYWluIChlLmcuIGFybS1saW51eC0pLiIKK1RBUkdFVF9TWVNbZG9jXSA9ICJUaGUgdGFyZ2V0IHN5c3RlbSBpcyBjb21wcmlzZWQgb2YgVEFSR0VUX0FSQ0gsVEFSR0VUX1ZFTkRPUiBhbmQgVEFSR0VUX09TLiIKK1RDTElCQ1tkb2NdID0gIlNwZWNpZmllcyBHTlUgc3RhbmRhcmQgQyBsaWJyYXJ5IChsaWJjKSB2YXJpYW50IHRvIHVzZSBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIFlvdSBjYW4gc2VsZWN0ICdnbGliYycgb3IgJ3VjbGliYycuIgorVENNT0RFW2RvY10gPSAiRW5hYmxlcyBhbiBleHRlcm5hbCB0b29sY2hhaW4gKHdoZXJlIHByb3ZpZGVkIGJ5IGFuIGFkZGl0aW9uYWwgbGF5ZXIpIGlmIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gJ2RlZmF1bHQnLiIKK1RFU1RfSU1BR0VbZG9jXSA9ICJFbmFibGVzIHRlc3QgYm9vdGluZyBvZiB2aXJ0dWFsIG1hY2hpbmUgaW1hZ2VzIHVuZGVyIHRoZSBRRU1VIGVtdWxhdG9yIGFmdGVyIGFueSByb290IGZpbGVzeXN0ZW1zIGFyZSBjcmVhdGVkIGFuZCBydW5zIHRlc3RzIGFnYWluc3QgdGhvc2UgaW1hZ2VzLiIKK1RFU1RfUUVNVUJPT1RfVElNRU9VVFtkb2NdID0gIlRoZSB0aW1lIGluIHNlY29uZHMgYWxsb3dlZCBmb3IgYW4gaW1hZ2UgdG8gYm9vdCBiZWZvcmUgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgYmVnaW4gdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2UuIgorVEVTVF9TVUlURVNbZG9jXSA9ICJBbiBvcmRlcmVkIGxpc3Qgb2YgdGVzdHMgKG1vZHVsZXMpIHRvIHJ1biBhZ2FpbnN0IGFuIGltYWdlIHdoZW4gcGVyZm9ybWluZyBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0aW5nLiIKK1RFU1RfUE9XRVJDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb250cm9sIHRoZSBwb3dlciBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKK1RFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1NbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGluIFRFU1RfUE9XRVJDT05UUk9MX0NNRCIKK1RFU1RfU0VSSUFMQ09OVFJPTF9DTURbZG9jXSA9ICJGb3IgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgY29tbWFuZCB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgc2VyaWFsIGNvbnNvbGUgb2YgdGhlIHRhcmdldCBtYWNoaW5lIHVuZGVyIHRlc3QiCitURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9TRVJJQUxDT05UUk9MX0NNRCIKK1RFU1RfVEFSR0VUW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcsIHNwZWNpZmllcyB0aGUgbWV0aG9kIG9mIGRlcGxveWluZyB0aGUgaW1hZ2UgYW5kIHJ1bm5pbmcgdGVzdHMgb24gdGhlIHRhcmdldCBtYWNoaW5lIgorVEhJU0RJUltkb2NdID0gIlRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGZpbGUgQml0QmFrZSBpcyBjdXJyZW50bHkgcGFyc2luZyBpcyBsb2NhdGVkLiIKK1RJTUVbZG9jXSA9ICJUaGUgdGltZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQgdXNpbmcgSE1TIGZvcm1hdC4iCitUTVBESVJbZG9jXSA9ICJUaGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgZG9lcyBpdHMgd29yayBidWlsZGluZyBpbWFnZXMuIEJ5IGRlZmF1bHQsIHRoZSBUTVBESVIgdmFyaWFibGUgaXMgbmFtZWQgdG1wIHdpdGhpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK1RPT0xDSEFJTl9IT1NUX1RBU0tbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBidWlsZGluZyBhbiBTREssIHdoaWNoIGNvbnRhaW5zIGEgY3Jvc3MtZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIgorVE9PTENIQUlOX1RBUkdFVF9UQVNLW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBsaXN0cyBwYWNrYWdlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gaXQgY3JlYXRlcyB0aGUgdGFyZ2V0IHBhcnQgb2YgYW4gU0RLLCB3aGljaCBpbmNsdWRlcyBsaWJyYXJpZXMgYW5kIGhlYWRlcnMuIgorVE9QRElSW2RvY10gPSAiVGhlIEJ1aWxkIERpcmVjdG9yeS4gQml0QmFrZSBhdXRvbWF0aWNhbGx5IHNldHMgdGhpcyB2YXJpYWJsZS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0aGUgQnVpbGQgRGlyZWN0b3J5IHdoZW4gYnVpbGRpbmcgaW1hZ2VzLiIKK1RSQU5TTEFURURfVEFSR0VUX0FSQ0hbZG9jXSA9ICJBIHNhbml0aXplZCB2ZXJzaW9uIG9mIFRBUkdFVF9BUkNILiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZSBpcyBuZWVkZWQgaW4gYSB2YWx1ZSB3aGVyZSB1bmRlcnNjb3JlcyBhcmUgbm90IGFsbG93ZWQuIgorVFVORV9QS0dBUkNIW2RvY10gPSAiVGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlIHVuZGVyc3Rvb2QgYnkgdGhlIHBhY2thZ2luZyBzeXN0ZW0gdG8gZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUsIEFCSSwgYW5kIHR1bmluZyBvZiBvdXRwdXQgcGFja2FnZXMuIgorVFVORUFCSVtkb2NdID0gIkFuIHVuZGVybHlpbmcgQUJJIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIHR1bmluZyBpbiBhIGdpdmVuIHRvb2xjaGFpbiBsYXllci4gVGhpcyBmZWF0dXJlIGFsbG93cyBwcm92aWRlcnMgdXNpbmcgcHJlYnVpbHQgbGlicmFyaWVzIHRvIGNoZWNrIGNvbXBhdGliaWxpdHkgb2YgYSB0dW5pbmcgYWdhaW5zdCB0aGVpciBzZWxlY3Rpb24gb2YgbGlicmFyaWVzLiIKK1RVTkVBQklfT1ZFUlJJREVbZG9jXSA9ICJJZiBzZXQsIGlnbm9yZXMgVFVORUFCSV9XSElURUxJU1QuIgorVFVORUFCSV9XSElURUxJU1RbZG9jXSA9ICJBIHdoaXRlbGlzdCBvZiBwZXJtaXNzaWJsZSBUVU5FQUJJIHZhbHVlcy4gIElmIHRoZSB2YXJpYWJsZSBpcyBub3Qgc2V0LCBhbGwgdmFsdWVzIGFyZSBhbGxvd2VkLiIKK1RVTkVDT05GTElDVFNbZG9jXSA9ICJMaXN0IG9mIGNvbmZsaWN0aW5nIGZlYXR1cmVzIGZvciBhIGdpdmVuIGZlYXR1cmUuIgorVFVORVZBTElEW2RvY10gPSAiRGVzY3JpcHRpb25zLCBzdG9yZWQgYXMgZmxhZ3MsIG9mIHZhbGlkIHR1bmluZyBmZWF0dXJlcy4iCisKKyNVCisKK1VCT09UX0NPTkZJR1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIFVCT09UX01BQ0hJTkUgYW5kIGNhbiBhbHNvIGRlZmluZSBJTUFHRV9GU1RZUEVTIGZvciBpbmRpdmlkdWFsIGNhc2VzLiIKK1VCT09UX0VOVFJZUE9JTlRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX0xPQURBRERSRVNTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTE9DQUxWRVJTSU9OW2RvY10gPSAiQXBwZW5kcyBhIHN0cmluZyB0byB0aGUgbmFtZSBvZiB0aGUgbG9jYWwgdmVyc2lvbiBvZiB0aGUgVS1Cb290IGltYWdlLiIKK1VCT09UX01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHZhbHVlIHBhc3NlZCBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgd2hlbiBidWlsZGluZyBhIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9NQUtFX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IGNhbGxlZCBpbiB0aGUgTWFrZWZpbGUuIgorVUJPT1RfU1VGRklYW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBnZW5lcmF0ZWQgVS1Cb290IGV4dGVuc2lvbi4iCitVQk9PVF9UQVJHRVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRhcmdldCB1c2VkIGZvciBidWlsZGluZyBVLUJvb3QuIgorVVNFX0RFVkZTW2RvY10gPSAiV2hlbiBidWlsZGluZyBpbWFnZXMsIHNwZWNpZmllcyB0byBwb3B1bGF0ZSBvciBub3QgL2Rldi4gVGhpcyB2YXJpYWJsZSBkZWZhdWx0cyB0byAnMScgKGxlYXZlIGRpcmVjdG9yeSBlbXB0eSwgc3VyZWx5IGJlY2F1c2UgZGV2dG1wZnMgZG8gdGhlIGpvYikuIFNldCBpdCB0byAnMCcgdG8gdXNlIG1ha2VkZXZzIChvciBjb25zaWRlciB1c2luZyBhIGN1c3RvbSBmaWxlIHdpdGggSU1BR0VfREVWSUNFX1RBQkxFUykuIgorVVNFUl9DTEFTU0VTW2RvY10gPSAiTGlzdCBvZiBhZGRpdGlvbmFsIGNsYXNzZXMgdG8gdXNlIHdoZW4gYnVpbGRpbmcgaW1hZ2VzIHRoYXQgZW5hYmxlIGV4dHJhIGZlYXR1cmVzLiIKK1VTRVJBRERfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgaW5kaXZpZHVhbCBwYWNrYWdlcyB3aXRoaW4gdGhlIHJlY2lwZSB0aGF0IHJlcXVpcmUgdXNlcnMgYW5kL29yIGdyb3VwcyB0byBiZSBhZGRlZC4iCitVU0VSQUREX1BBUkFNW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgdXNlcmFkZCBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIGFkZCBhIHVzZXIgdG8gdGhlIHN5c3RlbSB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4iCisKKyNXCisKK1dBUk5fUUFbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHF1YWxpdHkgYXNzdXJhbmNlIGNoZWNrcyB3aG9zZSBmYWlsdXJlcyBhcmUgcmVwb3J0ZWQgYXMgd2FybmluZ3MgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorV09SS0RJUltkb2NdID0gIlRoZSBwYXRobmFtZSBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gYnVpbGRzIGEgcmVjaXBlLiBUaGlzIGRpcmVjdG9yeSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgVE1QRElSIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgYW5kIGNoYW5nZXMgYXMgZGlmZmVyZW50IHBhY2thZ2VzIGFyZSBidWlsdC4iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbGF5ZXIuY29uZiBiL21ldGEvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODAwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDYwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisjIFdlIGhhdmUgcmVjaXBlcy0qIGRpcmVjdG9yaWVzLCBhZGQgdG8gQkJGSUxFUworQkJGSUxFUyArPSAiJHtMQVlFUkRJUn0vcmVjaXBlcy0qLyovKi5iYiIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJjb3JlIgorQkJGSUxFX1BBVFRFUk5fY29yZSA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX2NvcmUgPSAiNSIKKworIyBUaGlzIHNob3VsZCBvbmx5IGJlIGluY3JlbWVudGVkIG9uIHNpZ25pZmljYW50IGNoYW5nZXMgdGhhdCB3aWxsCisjIGNhdXNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggb3RoZXIgbGF5ZXJzCitMQVlFUlZFUlNJT05fY29yZSA9ICI2IgorCitCQkxBWUVSU19MQVlFUklOREVYX05BTUVfY29yZSA9ICJvcGVuZW1iZWRkZWQtY29yZSIKKworIyBTZXQgYSB2YXJpYWJsZSB0byBnZXQgdG8gdGhlIHRvcCBvZiB0aGUgbWV0YWRhdGEgbG9jYXRpb24KK0NPUkVCQVNFID0gJyR7QG9zLnBhdGgubm9ybXBhdGgoIiR7TEFZRVJESVJ9Ly4uLyIpfScKKworIyBvcGtnLXV0aWxzIGlzIGZvciB1cGRhdGUtYWx0bmVybmF0aXZlcyA6KAorU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUgKz0gIiBcCisgIHN5c3Zpbml0LWluaXR0YWIgXAorICBzaGFkb3ctc2VjdXJldHR5IFwKKyAgb3BrZy1hcmNoLWNvbmZpZyBcCisgIG5ldGJhc2UgXAorICBpbml0LWlmdXBkb3duIFwKKyAgY29ubm1hbi1jb25mIFwKKyAgZm9ybWZhY3RvciBcCisgIHhzZXJ2ZXIteGY4Ni1jb25maWcgXAorICBwb2ludGVyY2FsIFwKKyAgcG9pbnRlcmNhbC14aW5wdXQgXAorICBiYXNlLWZpbGVzIFwKKyAga2V5bWFwcyBcCisgIHVkZXYtZXh0cmFjb25mIFwKKyAgcGFja2FnZWdyb3VwLXgxMS14c2VydmVyIFwKKyAgc3lzdGVtZC1zZXJpYWxnZXR0eSBcCisgIGluaXRzY3JpcHRzIFwKKyAgc2hhZG93IFwKKyAgc2hhZG93LXN5c3Jvb3QgXAorICBiYXNlLXBhc3N3ZCBcCisgIG9wa2ctdXRpbHMgXAorIgorCitTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTICs9ICIgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPmdsaWJjIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT5tdXNsIFwKKyAgZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9LT51Y2xpYmMgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPmxpbnV4LWxpYmMtaGVhZGVycyBcCisgIHBwcC1kaWFsaW4tPnBwcCBcCisgIHJlc29sdmNvbmYtPmJhc2ggXAorICBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy0+cGVybCBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPmJ1c3lib3ggXAorICBpbml0cmFtZnMtZnJhbWV3b3JrLT5zeXN0ZW1kIFwKKyAgaW5pdHJhbWZzLWZyYW1ld29yay0+dWRldiBcCisgIGxpYmVyYXRpb24tZm9udHMtPmZvbnRjb25maWcgXAorICBnbm9tZS1pY29uLXRoZW1lLT5saWJyc3ZnIFwKKyAgZm9udC1hbGlhcy0+Zm9udC11dGlsIFwKKyAgd2VzdG9uLWluaXQtPndlc3RvbiBcCisgIHdlc3Rvbi1pbml0LT5rYmQgXAorIgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbGljZW5zZXMuY29uZiBiL21ldGEvY29uZi9saWNlbnNlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MTdjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbGljZW5zZXMuY29uZgpAQCAtMCwwICsxLDE4OSBAQAorIyBUaGVzZSBhcmVuJ3QgYWN0dWFsbHkgdXNlZCBhbnl3aGVyZSB0aGF0IEkgY2FuIHRlbGwKKyMgVGhleSBtYXkgYmUgaW4gdGhlIGZ1dHVyZSAob3IgYXJlIHVzZWQgYnkgc29tZW9uZSBlbHNlCisjIEZvciBjb21wbGV0aW9uIHNha2UsIEkndmUgdXBkYXRlZCB0aGVtCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQUFMIEFkb2JlIEFGTC0xLjIgQUZMLTIuMCBBRkwtMi4xIEFGTC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQUdQTC0zLjAgQU5UTFItUEQgQXBhY2hlLTEuMCBBcGFjaGUtMS4xIEFwYWNoZS0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQVBMLTEuMCBBUFNMLTEuMCBBUFNMLTEuMSBBUFNMLTEuMiBBUFNMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBcnRpc3RpYy0xLjAgQXJ0aXN0aWMtMi4wIEJpdHN0cmVhbVZlcmEgQlNEIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkJTRC0yLUNsYXVzZSBCU0QtMy1DbGF1c2UgQlNELTQtQ2xhdXNlIEJTTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0FUT1NMLTEuMSBDQzAtMS4wIENDLUJZLTEuMCBDQy1CWS0yLjAgQ0MtQlktMi41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLTMuMCBDQy1CWS1OQy0xLjAgQ0MtQlktTkMtMi4wIENDLUJZLU5DLTIuNSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy0zLjAgQ0MtQlktTkMtTkQtMS4wIENDLUJZLU5DLU5ELTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy1ORC0yLjUgQ0MtQlktTkMtTkQtMy4wIENDLUJZLU5DLVNBLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1OQy1TQS0yLjAgQ0MtQlktTkMtU0EtMi41IENDLUJZLU5DLVNBLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1ORC0xLjAgQ0MtQlktTkQtMi4wIENDLUJZLU5ELTIuNSBDQy1CWS1ORC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktU0EtMS4wIENDLUJZLVNBLTIuMCBDQy1CWS1TQS0yLjUgQ0MtQlktU0EtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNEREwtMS4wIENFQ0lMTC0xLjAgQ0VDSUxMLTIuMCBDRUNJTEwtQiBDRUNJTEwtQyIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDbEFydGlzdGljIENQQUwtMS4wIENQTC0xLjAgQ1VBLU9QTC0xLjAgRFNTU0wiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRUNMLTEuMCBFQ0wtMi4wIGVDb3MtMi4wIEVETC0xLjAgRUZMLTEuMCBFRkwtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVsZnV0aWxzLUV4Y2VwdGlvbiBFbnRlc3NhIEVQTC0xLjAgRXJsUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkVVRGF0YWdyaWQgRVVQTC0xLjAgRVVQTC0xLjEgRmFpciBGcmFtZXdvcngtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkZyZWVUeXBlIEdGREwtMS4xIEdGREwtMS4yIEdGREwtMS4zIEdQTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMCBHUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbiBHUEwtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiZ1NPQVAtMSBnU09BUC0xLjNiIEhQTkQgSVBBIElQTC0xLjAgSVNDIExHUEwtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkxHUEwtMi4xIExHUEwtMy4wIExpYnBuZyBMUEwtMS4wMiBMUFBMLTEuMCBMUFBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJMUFBMLTEuMiBMUFBMLTEuM2MgTWlyT1MgTUlUIE1vdG9zb3RvIE1QTC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTVBMLTEuMSBNUy1QTCBNUy1STCBNdWx0aWNzIE5BU0EtMS4zIE5hdW1hbiBOQ1NBIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk5HUEwgTm9raWEgTlBPU0wtMy4wIE5UUCBPQVNJUyBPQ0xDLTIuMCBPRGJMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJPRkwtMS4xIE9HVFNMIE9MREFQLTIuOCBPcGVuU1NMIE9TTC0xLjAgT1NMLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJPU0wtMy4wIFBEIFBIUC0zLjAgUG9zdGdyZVNRTCBQcm9wcmlldGFyeSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJQeXRob24tMi4wIFFQTC0xLjAgUkhlQ29zLTEgUkhlQ29zLTEuMSBSUEwtMS41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlJQU0wtMS4wIFJTQ1BMIFJ1YnkgU0FYLVBEIFNHSS0xIFNpbXBsZS0yLjAgU2xlZXB5Y2F0IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlNQTC0xLjAgU3VnYXJDUk0tMSBTdWdhckNSTS0xLjEuMyBVQ0IgVlNMLTEuMCBXM0MiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiV2F0Y29tLTEuMCBXWHdpbmRvd3MgWEZyZWU4Ni0xLjAgWEZyZWU4Ni0xLjEgWG5ldCBYU0wgWVBMLTEuMSIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJaaW1icmEtMS4zIFpsaWIgWlBMLTEuMSBaUEwtMi4wIFpQTC0yLjEiCisKKyMgU3RhbmRhcmRzIGFyZSBncmVhdCEgRXZlcnlvbmUgaGFzIHRoZWlyIG93bi4gSW4gYW4gZWZmb3J0IHRvIHN0YW5kYXJkaXplIGxpY2Vuc2luZworIyBuYW1lcywgY29tbW9uLWxpY2Vuc2VzIHdpbGwgdXNlIHRoZSBTUERYIHN0YW5kYXJkIGxpY2Vuc2UgbmFtZXMuIEluIG9yZGVyIHRvIG5vdAorIyBicmVhayB0aGUgbm9uLXN0YW5kYXJkaXplZCBsaWNlbnNlIG5hbWVzIHRoYXQgd2UgZmluZCBpbiBMSUNFTlNFLCB3ZSdsbCBzZXQKKyMgdXAgYSBidW5jaCBvZiBWYXJGbGFncyB0byBhY2NvbW9kYXRlIG5vbi1TUERYIGxpY2Vuc2UgbmFtZXMuCisjCisjIFdlIHNob3VsZCByZWFsbHkgZGlzY3VzcyBzdGFuZGFyZGl6aW5nIHRoaXMgZmllbGQsIGJ1dCB0aGF0J3MgYSBsb25nZXIgdGVybSBnb2FsLgorIyBGb3Igbm93LCB3ZSBjYW4gZG8gdGhpcyBhbmQgaXQgc2hvdWxkIGdyYWIgdGhlIG1vc3QgY29tbW9uIExJQ0VOU0UgbmFtaW5nIHZhcmlhdGlvbnMuCisjCisjIFdlIHNob3VsZCBORVZFUiBoYXZlIGEgR1BML0xHUEwgd2l0aG91dCBhIHZlcnNpb24hISEhCisjIEFueSBtYXBwaW5nIHRvIE1QTC9MR1BML0dQTCBzaG91bGQgYmUgZml4ZWQKKworIyBBR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FHUEwtM10gPSAiQUdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtBR1BMdjNdID0gIkFHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbQUdQTHYzLjBdID0gIkFHUEwtMy4wIgorCisjIEdQTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtHUEwtMV0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYxXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjEuMF0gPSAiR1BMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTC0yXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjJdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEx2Mi4wXSA9ICJHUEwtMi4wIgorU1BEWExJQ0VOU0VNQVBbR1BMLTNdID0gIkdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtHUEx2M10gPSAiR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYzLjBdID0gIkdQTC0zLjAiCisKKyNMR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Ml0gPSAiTEdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtMR1BMdjIuMF0gPSAiTEdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtMR1BMMi4xXSA9ICJMR1BMLTIuMSIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Mi4xXSA9ICJMR1BMLTIuMSIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2M10gPSAiTEdQTC0zLjAiCisKKyNNUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbTVBMLTFdID0gIk1QTC0xLjAiCitTUERYTElDRU5TRU1BUFtNUEx2MV0gPSAiTVBMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW01QTHYxLjFdID0gIk1QTC0xLjEiCitTUERYTElDRU5TRU1BUFtNUEx2Ml0gPSAiTVBMLTIuMCIKKworI01JVCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtNSVQtWF0gPSAiTUlUIgorU1BEWExJQ0VOU0VNQVBbTUlULXN0eWxlXSA9ICJNSVQiCisKKyNPcGVuc3NsIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW29wZW5zc2xdID0gIk9wZW5TU0wiCisKKyNQeXRob24gdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbUFNGXSA9ICJQeXRob24tMi4wIgorU1BEWExJQ0VOU0VNQVBbUFNGdjJdID0gIlB5dGhvbi0yLjAiCitTUERYTElDRU5TRU1BUFtQeXRob24tMl0gPSAiUHl0aG9uLTIuMCIKKworI0FwYWNoZSB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBcGFjaGV2Ml0gPSAiQXBhY2hlLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0FwYWNoZS0yXSA9ICJBcGFjaGUtMi4wIgorCisjQXJ0aXN0aWMgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQXJ0aXN0aWN2MV0gPSAiQXJ0aXN0aWMtMS4wIgorU1BEWExJQ0VOU0VNQVBbQXJ0aXN0aWMtMV0gPSAiQXJ0aXN0aWMtMS4wIgorCisjQWNhZGVtaWMgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQUZMLTJdID0gIkFGTC0yLjAiCitTUERYTElDRU5TRU1BUFtBRkwtMV0gPSAiQUZMLTEuMiIKK1NQRFhMSUNFTlNFTUFQW0FGTHYyXSA9ICJBRkwtMi4wIgorU1BEWExJQ0VOU0VNQVBbQUZMdjFdID0gIkFGTC0xLjIiCisKKyNPdGhlciB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtFUEx2MS4wXSA9ICJFUEwtMS4wIgorCisjU2lsaWNvbiBHcmFwaGljcyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtTR0l2MV0gPSAiU0dJLTEiCisKKyMgQWRkaXRpb25hbCBsaWNlbnNlIGRpcmVjdG9yaWVzLiBBZGQgeW91ciBjdXN0b20gbGljZW5zZXMgZGlyZWN0b3JpZXMgdGhpcyBwYXRoLgorIyBMSUNFTlNFX1BBVEggKz0gIiR7Q09SRUJBU0V9L2N1c3RvbS1saWNlbnNlcyIKKworIyBTZXQgaWYgeW91IHdhbnQgdGhlIGxpY2Vuc2UubWFuaWZlc3QgY29waWVkIHRvIHRoZSBpbWFnZQorI0NPUFlfTElDX01BTklGRVNUID0gIjEiCisKKyMgSWYgeW91IHdhbnQgdGhlIHBrZyBsaWNlbnNlcyBjb3BpZWQgb3ZlciBhcyB3ZWxsIHlvdSBtdXN0IHNldAorIyBib3RoIENPUFlfTElDX01BTklGRVNUIGFuZCBDT1BZX0xJQ19ESVJTCisjQ09QWV9MSUNfRElSUyA9ICIxIgorCisjIyBTUERYIHRlbXBvcmFyeSBkaXJlY3RvcnkKK1NQRFhfVEVNUF9ESVIgPSAiJHtXT1JLRElSfS9zcGR4X3RlbXAiCitTUERYX01BTklGRVNUX0RJUiA9ICIvaG9tZS95b2N0by9mb3Nzb2xvZ3lfc2NhbnMiCisKKyMjIFNQRFggRm9ybWF0IGluZm8KK1NQRFhfVkVSU0lPTiA9ICJTUERYLTEuMSIKK0RBVEFfTElDRU5TRSA9ICJDQzAtMS4wIgorCisjIyBGb3Nzb2xvZ3kgc2NhbiBpbmZvcm1hdGlvbgorIyBZb3UgY2FuIHNldCBvcHRpb24gdG8gY29udHJvbCBpZiB0aGUgY29weXJpZ2h0IGluZm9ybWF0aW9uIHdpbGwgYmUgc2tpcHBlZAorIyBkdXJpbmcgdGhlIGlkZW50aWZpY2F0aW9uIHByb2Nlc3MuCisjCisjIEl0IGlzIGRlZmluZWQgYXMgW0ZPU1NfQ09QWVJJR0hUXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLgorIyBGT1NTX0NPUFlSSUdIVCA9ICJ0cnVlIgorIyAgIE5PIGNvcHlyaWdodCB3aWxsIGJlIHByb2Nlc3NlZC4gVGhhdCBtZWFucyBvbmx5IGxpY2Vuc2UgaW5mb3JtYXRpb24gd2lsbCBiZQorIyAgIGlkZW50aWZpZWQgYW5kIG91dHB1dCB0byBTUERYIGZpbGUKKyMgRk9TU19DT1BZUklHSFQgPSAiZmFsc2UiCisjICAgQ29weXJpZ2h0IHdpbGwgYmUgaWRlbnRpZmllZCBhbmQgb3V0cHV0IHRvIFNQRFggZmlsZSBhbG9uZyB3aXRoIGxpY2Vuc2UKKyMgICBpbmZvcm1hdGlvbi4gVGhlIHByb2Nlc3Mgd2lsbCB0YWtlIG1vcmUgdGltZSB0aGFuIG5vdCBwcm9jZXNzaW5nIGNvcHlyaWdodAorIyAgIGluZm9ybWF0aW9uLgorIworCitGT1NTX05PX0NPUFlSSUdIVCA9ICJ0cnVlIgorCisjIEEgb3B0aW9uIGRlZmluZWQgYXNbRk9TU19SRUNVUlNJVkVfVU5QQUNLXSBpbiAuL21ldGEvY29uZi9saWNlbnNlcy5jb25mLiBpcworIyB1c2VkIHRvIGNvbnRyb2wgaWYgRk9TU29sb2d5IHNlcnZlciBuZWVkIHJlY3Vyc2l2ZWx5IHVucGFjayB0YXIuZ3ogZmlsZSB3aGljaAorIyBpcyBzZW50IGZyb20gZG9fc3BkeCB0YXNrLgorIworIyBGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAiZmFsc2UiOgorIyAgICBGT1NTb2xvZ3kgc2VydmVyIGRvZXMgTk9UIHJlY3Vyc2l2ZWx5IHVucGFjay4gSW4gdGhlIGN1cnJlbnQgcmVsZWFzZSwgdGhpcworIyAgICBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgYmVjYXVzZSByZWN1cnNpdmVseSB1bnBhY2sgd2lsbCBub3QgbmVjZXNzYXJpbHkgYnJlYWsKKyMgICAgZG93biBvcmlnaW5hbCBjb21wcmVzc2VkIGZpbGVzLgorIyBGT1NTX1JFQ1VSU0lWRV9VTlBBQ0sgPSAidHJ1ZSI6CisjICAgIEZPU1NvbG9neSBzZXJ2ZXIgcmVjdXJzaXZlbHkgdW5wYWNrIGNvbXBvbmVudHMuCisjCisKK0ZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJmYWxzZSIKKworIyBBbiBvcHRpb24gZGVmaW5lZCBhcyBbRk9TU19GVUxMX1NQRFhdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYgaXMgdXNlZCB0bworIyBjb250cm9sIHdoYXQga2luZCBvZiBTUERYIG91dHB1dCB0byBnZXQgZnJvbSB0aGUgRk9TU29sb2d5IHNlcnZlci4KKyMKKyMgRk9TU19GVUxMX1NQRFggPSAidHJ1ZSI6CisjICAgVGVsbCBGT1NTb2xvZ3kgc2VydmVyIHRvIHJldHVybiBmdWxsIFNQRFggb3V0cHV0LCBsaWtlIGlmIHRoZSBwcm9ncmFtIHdhcworIyAgIHJ1biBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGdldCBsaWNlbnNlIHJlZnMgZm9yCisjICAgdGhlIGZ1bGwgcGFja2FnZSByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGZpbGVzIG9ubHkuCisjCisjIEZPU1NfRlVMTF9TUERYID0gImZhbHNlIjoKKyMgICBUZWxsIEZPU1NvbG9neSB0byBvbmx5IHByb2Nlc3MgbGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgZmlsZXMuIEFsbCBwYWNrYWdlCisjICAgbGljZW5zZSB0YWdzIGluIHRoZSByZXBvcnQgd2lsbCBiZSAiTk9BU1NFUlRJT04iCisjCisKK0ZPU1NfRlVMTF9TUERYID0gInRydWUiCisKKyMgRk9TU29sb2d5U1BEWCBpbnN0YW5jZSBzZXJ2ZXIuIGh0dHA6Ly9sb2NhbGhvc3QvcmVwbyBpcyB0aGUgZGVmYXVsdAorIyBpbnN0YWxsYXRpb24gbG9jYXRpb24gZm9yIEZPU1NvbG9neS4KKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5U1BEWCBjb21tYW5kbGluZToKKyMgICBodHRwczovL2dpdGh1Yi5jb20vc3BkeC10b29scy9mb3Nzb2xvZ3ktc3BkeC93aWtpL0Zvc3NvbG9neS1TUERYLVdlYi1BUEkKKyMKKworRk9TU19CQVNFX1VSTCA9ICJodHRwOi8vbG9jYWxob3N0L3JlcG8vP21vZD1zcGR4X2xpY2Vuc2Vfb25jZSIKK0ZPU1NfU0VSVkVSID0gIiR7Rk9TU19CQVNFX1VSTH0mZnVsbFNQRFhGbGFnPSR7Rk9TU19GVUxMX1NQRFh9Jm5vQ29weXJpZ2h0PSR7Rk9TU19OT19DT1BZUklHSFR9JnJlY3Vyc2l2ZVVucGFjaz0ke0ZPU1NfUkVDVVJTSVZFX1VOUEFDS30iCisKK0ZPU1NfV0dFVF9GTEFHUyA9ICItcU8gLSAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC0tdGltZW91dD0wIgorCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYWNjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTU4Ni5jb25mCkBAIC0wLDAgKzEsMyBAQAorU0RLX0FSQ0ggPSAiaTU4NiIKK1NES19DQ19BUkNIID0gIi1tYXJjaD1pNTg2IgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k2ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmRiNDYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k2ODYuY29uZgpAQCAtMCwwICsxLDIgQEAKK1NES19BUkNIID0gImk2ODYiCitTREtfQ0NfQVJDSCA9ICItbWFyY2g9aTY4NiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lLXNkay94ODZfNjQuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lLXNkay94ODZfNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTJkNjdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCkBAIC0wLDAgKzEgQEAKK1NES19BUkNIID0gIng4Nl82NCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2MTMwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvUkVBRE1FCkBAIC0wLDAgKzEsMTAwIEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCBSZXZpc2lvbgorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGUgaW5kaXZpZHVhbCBDUFUsIGFuZCBBQkkgdHVuaW5ncyBhcmUgY29udGFpbmVkIGluIHRoaXMgZGlyZWN0b3J5LiAgQQorbnVtYmVyIG9mIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHdheSB0aGUKK3R1bmluZ3MgYXJlIHNldHVwIGFuZCBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIHRvIHNwZWNpZnkgYW4gb3B0aW1pemVkCitjb25maWd1cmF0aW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGdlbmVyaWMgY29tcG9uZW50cyB0aGF0IGFyZSB1c2VkCitpbiB0aGVzZSB0dW5pbmdzLgorCitBVkFJTFRVTkVTIC0gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSB0dW5pbmcgZGVmaW5pdGlvbnMgY3VycmVudGx5CithdmFpbGFibGUgaW4gdGhlIHN5c3RlbS4gIE5vdCBhbGwgdHVuZXMgaW4gdGhpcyBsaXN0IG1heSBiZSBjb21wYXRpYmxlCit3aXRoIHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24sIG9yIGVhY2ggb3RoZXIgaW4gYSBtdWx0aWxpYgorY29uZmlndXJhdGlvbi4gIEVhY2ggdHVuaW5nIGZpbGUgY2FuIGFkZCB0byB0aGlzIGxpc3QgdXNpbmcgIis9IiwgYnV0CitzaG91bGQgbmV2ZXIgcmVwbGFjZSB0aGUgbGlzdCB1c2luZyAiPSIuCisKK0RFRkFVTFRUVU5FIC0gVGhpcyBzcGVjaWZpZXMgdGhlIHR1bmUgdG8gdXNlIGZvciBhIHBhcnRpY3VsYXIgYnVpbGQuCitFYWNoIHR1bmUgc2hvdWxkIHNwZWNpZnkgYSByZWFzb25hYmxlIGRlZmF1bHQsIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4gYnkKK2EgbWFjaGluZSBvciBtdWx0aWxpYiBjb25maWd1cmF0aW9uLiAgVGhlIHNwZWNpZmllZCB0dW5lIG11c3QgYmUgbGlzdGVkCitpbiB0aGUgQVZBSUxUVU5FUy4KKworVFVORVZBTElEW2ZlYXR1cmVdIC0gVGhlIDxmZWF0dXJlPiBpcyBkZWZpbmVkIHdpdGggYSBodW1hbiByZWFkYWJsZQorZXhwbGFuYXRpb24gZm9yIHdoYXQgaXQgZG9lcy4gIEFsbCBhcmNoaXRlY3R1cmFsLCBjcHUsIGFiaSwgZXRjIHR1bmluZworZmVhdHVyZXMgbXVzdCBiZSBkZWZpbmVkIHVzaW5nIFRVTkVWQUxJRC4KKworVFVORUNPTkZMSUNUU1tmZWF0dXJlXSAtIEEgbGlzdCBvZiBmZWF0dXJlcyB3aGljaCBjb25mbGljdCB3aXRoIDxmZWF0dXJlPi4KK05ldyBzYW5pdHkgY2hlY2tzIHdpbGwgdHJ5IHRvIHJlamVjdCBjb21iaW5hdGlvbnMgaW4gd2hpY2ggYSBzaW5nbGUKK3R1bmluZyBlbmRzIHVwIHdpdGggZmVhdHVyZXMgd2hpY2ggY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyLgorCitUVU5FX0ZFQVRVUkVTIC0gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYXMgVFVORV9GRUFUVVJFU190dW5lLTx0dW5lPi4KK1NlZSBUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+IC0gU3BlY2lmeSB0aGUgZmVhdHVyZXMgdXNlZCB0byBkZXNjcmliZSBhCitzcGVjaWZpYyB0dW5lLiAgVGhpcyBpcyBhIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBhIHR1bmUgc3VwcG9ydCwgZWFjaAorZmVhdHVyZSBtdXN0IGJlIGluIHRoZSBUVU5FVkFMSUQgbGlzdC4gIE5vdGU6IHRoZSB0dW5lIGFuZCBhIGdpdmVuCitmZWF0dXJlIG5hbWUgbWF5IGJlIHRoZSBzYW1lLCBidXQgdGhleSBoYXZlIGRpZmZlcmVudCBwdXJwb3Nlcy4gIE9ubHkKK2ZlYXR1cmVzIG1heSBiZSB1c2VkIHRvIGNoYW5nZSBiZWhhdmlvciwgd2hpbGUgdHVuZXMgYXJlIHVzZWQgdG8KK2Rlc2NyaWJlIGFuIG92ZXJhbGwgc2V0IG9mIGZlYXR1cmVzLgorCitBQklFWFRFTlNJT04gLSBBbiBBQkkgZXh0ZW5zaW9uIG1heSBiZSBzcGVjaWZpZWQgYnkgYSBzcGVjaWZpYyBmZWF0dXJlCitvciBvdGhlciB0dW5pbmcgc2V0dGluZywgc3VjaCBhcyBUQVJHRVRfRlBVLiAgQW55IEFCSSBleHRlbnNpb25zIGVpdGhlcgorbmVlZCB0byBiZSBkZWZpbmVkIGluIHRoZSBhcmNoaXRlY3R1cmVzIGJhc2UgYXJjaCBmaWxlLCBpLmUuCitBQklFWFRFTlNJT04gPSAiZWFiaSIgaW4gdGhlIGFybSBjYXNlLCBvciBhcHBlbmRlZCB0byBpbiBzcGVjaWZpYyB0dW5lCitmaWxlcyB3aXRoIGEgIi49Ii4gIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gdGhpcyB2YXJpYWJsZS4KKworVFVORV9DQ0FSR1MgLSBTZXR1cCB0aGUgY2ZsYWdzIGJhc2VkIG9uIHRoZSBUVU5FX0ZFQVRVUkVTIHNldHRpbmdzLgorVGhlc2Ugc2hvdWxkIGJlIGFkZGl0aXZlIHdoZW4gZGVmaW5lZCB1c2luZyAiKz0iLiAgQWxsIGl0ZW1zIGluIHRoaXMKK2xpc3Qgc2hvdWxkIGJlIGR5bmFtaWMhIGkuZS4KKyR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZlYXR1cmUiLCAiY2ZsYWciLCAiIWNmbGFnIiwgZCl9CisKK1RVTkVfQVJDSCAtIFRoZSBHTlUgY2Fub25pY2FsIGFyY2ggZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLiAgaS5lLgorYXJtLCBhcm1lYiwgbWlwcywgbWlwczY0LCBldGMuICBUaGlzIHZhbHVlIGlzIHVzZWQgYnkgYml0YmFrZSB0byBzZXR1cAorY29uZmlndXJlLiBUVU5FX0FSQ0ggZGVmaW5pdGlvbnMgYXJlIHNwZWNpZmljIHRvIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlLgorVGhleSBtYXkgYmUgYSBzaW5nbGUgc3RhdGljIGRlZmluaXRpb24sIG9yIG1heSBiZSBkeW5hbWljYWxseSBhZGp1c3RlZC4KK1NlZSBlYWNoIGFyY2hpdGVjdHVyZSdzIFJFQURNRSBmb3IgZGV0YWlscyBmb3IgdGhhdCBDUFUgZmFtaWx5LgorCitUVU5FX1BLR0FSQ0ggLSBUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdXNlZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbXMgdG8KK2RlZmluZSB0aGUgYXJjaGl0ZWN0dXJlLCBhYmkgYW5kIHR1bmluZyBvZiBhIHBhcnRpY3VsYXIgcGFja2FnZS4KK1NpbWlsYXJseSB0byBUVU5FX0FSQ0gsIHRoZSBkZWZpbml0aW9uIG9mIFRVTkVfUEtHQVJDSCBpcyBzcGVjaWZpYyB0bworZWFjaCBhcmNoaXRlY3R1cmUuIFNlZSBlYWNoIGFyY2hpdGVjdHVyZXMgUkVBRE1FIGZvciBkZXRhaWxzIGZvciB0aGF0CitDUFUgZmFtaWx5LgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTIC0gTGlzdHMgYWxsIHJ1bnRpbWUgY29tcGF0aWJsZSBwYWNrYWdlCithcmNoaXRlY3R1cmVzLiAgQnkgZGVmYXVsdCB0aGlzIGlzIGVxdWFsIHRvCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtPHR1bmU+LiAgSWYgYW4gYXJjaGl0ZWN0dXJlIGRldmlhdGVzIGZyb20gdGhlCitkZWZhdWx0IGl0IHdpbGwgYmUgbGlzdGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgUkVBRE1FLgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtPHR1bmU+IC0gTGlzdCBhbGwgb2YgdGhlIHBhY2thZ2UgYXJjaGl0ZWN0dXJlcwordGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3BlY2lmaWMgdHVuZS4gIFRoZSBwYWNrYWdlIGFyY2ggb2YgdGhpcwordHVuZSBtdXN0IGJlIGluIHRoZSBsaXN0LgorCitUQVJHRVRfRlBVIC0gVGhlIEZQVSBzZXR0aW5nIGZvciBhIGdpdmVuIHR1bmUsIGhhcmQgKGdlbmVyYXRlIGZsb2F0aW5nCitwb2ludCBpbnN0cnVjdGlvbnMpLCBzb2Z0IChnZW5lcmF0ZSBpbnRlcm5hbCBnY2MgY2FsbHMpLCAib3RoZXIiCithcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmxvYXRpbmcgcG9pbnQuICBUaGlzIGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZQorY29tcGlsZXIgYW5kIG90aGVyIHRvb2xjaGFpbiBpdGVtcy4gIFRoaXMgc2hvdWxkIGJlIGR5bmFtaWNhbGx5Citjb25maWd1cmVkIGluIHRoZSBzYW1lIHdheSB0aGF0IFRVTkVfQ0NBUkdTIGlzLgorCitCQVNFX0xJQl90dW5lLTx0dW5lPiAtIFRoZSAiL2xpYiIgbG9jYXRpb24gZm9yIGEgc3BlY2lmaWMgQUJJLiAgVGhpcyBpcwordXNlZCBpbiBhIG11bHRpbGliIGNvbmZpZ3VyYXRpb24gdG8gcGxhY2UgdGhlIGxpYnJhcmllcyBpbiB0aGUgY29ycmVjdCwKK25vbi1jb25mbGljdGluZyBsb2NhdGlvbnMuCisKKworQmVzdCBQcmFjdGljZQorPT09PT09PT09PT09PQorVGhlIHR1bmUgaW5mcmFzdHJ1Y3R1cmUgaXMgZGVzaWduZWQgdG8gYmUgaGllcmFyY2hpY2FsLiBXaGVuIHdyaXRpbmcgYQorbmV3IHR1bmUgZmlsZSBmb3IgYSAiZmFzdC1mb3J3YXJkIiBDUFUgYXJjaGl0ZWN0dXJlIChvbmUgdGhhdCBzdXBwb3J0cworZXZlcnl0aGluZyBmcm9tIGEgcHJldmlvdXMgZ2VuZXJhdGlvbiksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlcXVpcmUgdGhlCitwcmV2aW91cyBnZW5lcmF0aW9uIHR1bmUgZmlsZSBhbmQgc3BlY2lmeSBQQUNLQUdFX0VYVFJBX0FSQ0hTIHVzaW5nIHRoZQorcHJldmlvdXMgZ2VuZXJhdGlvbidzIG92ZXJyaWRlIGFuZCBhcHBlbmRpbmcgdGhlIG5ldyB0dW5lLiBOb3RlIHRoYXQKK29ubHkgb25lIHByZXZpb3VzIHR1bmUgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgdG8gYXZvaWQgbXV0aXBsZSBpbmNsdWRlcworb2YgdGhlIGJhc2UgYXJjaCB3aGljaCBjb3VsZCBsZWFkIHRvIGEgYnJva2VuIGNvbmZpZ3VyYXRpb24gZHVlIHRvCittdWx0aXBsZSBwcmVwZW5kIGFuZCBhcHBlbmQgYXNzaWdubWVudHMuCisKK0ZvciBleGFtcGxlLCBmb3IgeDg2LCB0aGVyZSBpcyBhIGNvbW1vbiB4ODYvYXJjaC14ODYuaW5jIHdoaWNoIGlzCitpbmNsdWRlZCBpbiB0aGUgYmFzZSBpNTg2IHR1bmUgZmlsZS4gVGhlIGNvcmUyIHR1bmUgYnVpbGRzCitvbiB0aGF0LCBhbmQgY29yZWk3IGJ1aWxkcyBvbiBjb3JlMi4KZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL1JFQURNRSBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJlYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FCkBAIC0wLDAgKzEsNDAgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIFJldmlzaW9uCisKK1RoZSBBUk0gYXJjaGl0ZWN0dXJlIGRlZmluaXRpb25zIGFyZSBzcGxpdCBhbW9uZyBhIG51bWJlciBvZiBmaWxlcy4KK1RoZSBwcmltYXJ5IGRlZmluaXRpb25zIGZvciB0aGUgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjb3JlCithcmNoLWFybS5pbmMgZmlsZS4KKworVFVORV9BUkNIIGlzIHNldCB0byBlaXRoZXIgImFybSIgb3IgImFybWViIiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlCitvZiB0aGUgZXhpc3RlbmNlIG9mIHRoZSAiYmlnZW5kaWFuIiBmZWF0dXJlIGluIGEgZ2l2ZW4gdHVuZS4KKworQSBzbWFsbCBzZXQgb2YgQVJNIHNwZWNpZmljIHZhcmlhYmxlcyBoYXZlIGJlZW4gZGVmaW5lZCB0byBhbGxvdyAKK1RVTkVfUEtHQVJDSCB0byBiZSBhdXRvbWF0aWNhbGx5IGRlZmluZWQuICBPcHRpbWl6ZWQgdHVuaW5ncyBtdXN0IE5PVCAKK2NoYW5nZSB0aGUgZGVmaW5pdG9uIG9mIFRVTkVfUEtHQVJDSC4gIFRVTkVfUEtHQUNIX3R1bmUtPHR1bmU+IHdpbGwgYmUgCitpZ25vcmVkLiAgVGhlIGZvcm1hdCBvZiB0aGUgcGFja2FnZSBhcmNoIGlzIGVuZm9yY2VkIGJ5IHRoZSBUVU5FX1BLR0FSQ0gKK2RlZmF1bHQuICBUaGUgZm9ybWF0IG11c3QgYmUgb2YgdGhlIGZvcm06Cis8YXJtdmVyc2lvbj5bdF1bZV1baGZdW2JdWy12ZnBdWy1uZW9uXQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhczoKKyR7QVJNUEtHQVJDSH0ke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9JHtBUk1QS0dTRlhfRUFCSX0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRlBVfQorCitBUk1QS0dBUkNIIC0gVGhpcyBpcyB0aGUgY29yZSBwYWNrYWdlIGFyY2ggY29tcG9uZW50IHNwZWNpZmllZCBieSBlYWNoIAordHVuaW5nLiAgVGhpcyBpcyB0aGUgcHJpbWFyeSBpZGVudGlmaWVyIG9mIGEgdHVuaW5nLiAgVXN1YWwgdmFsdWVzIGFyZToKK2FybSwgYXJtdjQsIGFybXY1LCBhcm12NiwgYXJtdjdhLCBldGMuCisKK0FSTVBLR1NGWF9USFVNQiAtIFRoaXMgaXMgdGhlIHRodW1iIHNwZWNpZmljIHN1ZmZpeC4gIEN1cmVudGx5IGl0IGlzIAorZGVmaW5lZCBpbiBmZWF0dXJlLWFybS10aHVtYi5pbmMuCisKK0FSTVBLR1NGWF9EU1AgLSBUaGlzIGlzIHRoZSBEU1Agc3BlY2lmaWMgc3VmZml4LiAgQ3VycmVudGx5IHRoaXMgaXMgc2V0IAordG8gJ2UnIHdoZW4gb24gYXJtdjUgYW5kIHRoZSBkc3AgZmVhdHVyZSBpcyBlbmFibGVkLgorCitBUk1QS0dTRlhfRUFCSSAtIFRoaXMgaXMgdGhlIGVhYmkgc3BlY2lmaWMgc3VmZml4LiAgVGhlcmUgYXJlIGN1cnJlbnRseSAKK3R3byBkZWZpbmVkIEFCSXMgc3BlY2lmaWNlZCwgc3RhbmRhcmQgRUFCSSBhbmQgSGFyZCBGbG9hdCAoVkZQKSBFQUJJLiAgCitXaGVuIHRoZSBjYWxsY29udmVudGlvbi1oYXJkIGlzIGVuYWJsZWQsICJoZiIgaXMgc3BlY2lmaWVkLCBvdGhlcndpc2UgaXQgCitpcyBibGFuay4KKworQVJNUEtHU0ZYX0VORElBTiAtIFRoaXMgaXMgdGhlIGVuZGlhbiBzcGVjaWZpYyBzdWZmaXguICBJdCBpcyBkZWZpbmVkIGluIAordGhlIGNvcmUgYXJjaC1hcm0uaW5jIGZpbGUuCisKK0FSTVBLR1NGWF9GUFUgLSBUaGlzIGlzIHRoZSBGUFUgc3BlY2lmaWMgc3VmZml4LiAgVGhlIHN1ZmZpeCBpbmRpY2F0ZXMgCitzcGVjaWZpYyBGUFUgb3B0aW1pemF0aW9ucy4gICd2ZnAnIGFuZCAnbmVvbicgYXJlIGJvdGggZGVmaW5lZC4KZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI4MGM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCkBAIC0wLDAgKzEsMTcgQEAKKworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZS4iCisKK0FSTVBLR0FSQ0ggPSAiJHtBUk1QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorQVJNUEtHU0ZYX0VORElBTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiYiIsICIiLCBkKX0iCitBUk1QS0dTRlhfRlBVID8/PSAiIgorQVJNUEtHU0ZYX0RTUCA/Pz0gIiIKK0FSTVBLR1NGWF9FQUJJID8/PSAiIgorQVJNUEtHU0ZYX1RIVU1CID8/PSAiIgorCitUVU5FX0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgImFybWViIiwgImFybSIsIGQpfSIKK1RVTkVfUEtHQVJDSCA9ICIke0FSTVBLR0FSQ0h9JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSR7QVJNUEtHU0ZYX0VBQkl9JHtBUk1QS0dTRlhfRU5ESUFOfSR7QVJNUEtHU0ZYX0ZQVX0iCisKK0FCSUVYVEVOU0lPTiA9ICJlYWJpIgorCitUQVJHRVRfRlBVID0gIiR7QGQuZ2V0VmFyKCdBUk1QS0dTRlhfRlBVJywgVHJ1ZSkuc3RyaXAoJy0nKSBvciAnc29mdCd9IgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzZiODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybTY0LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYWFyY2g2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFthYXJjaDY0XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBhYXJjaDY0IgorCitNQUNISU5FT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIjphYXJjaDY0IiwgIiIgLGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiYWFyY2g2NCBhYXJjaDY0X2JlIgorQVJNUEtHQVJDSF90dW5lLWFhcmNoNjQgPz0gImFhcmNoNjQiCitBUk1QS0dBUkNIX3R1bmUtYWFyY2g2NF9iZSA/PSAiYWFyY2g2NF9iZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hYXJjaDY0ID89ICJhYXJjaDY0IgorVFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjRfYmUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjR9IGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtYWFyY2g2NCA9ICJsaWI2NCIKK0JBU0VfTElCX3R1bmUtYWFyY2g2NF9iZSA9ICJsaWI2NCIKKworUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFhcmNoNjQgPSAiYWFyY2g2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hYXJjaDY0X2JlID0gImFhcmNoNjRfYmUiCisKK0FSTVBLR1NGWF9FTkRJQU5fNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIl9iZSIsICIiLCBkKX0iCitUVU5FX0FSQ0hfNjQgPSAiYWFyY2g2NCR7QVJNUEtHU0ZYX0VORElBTl82NH0iCitUVU5FX1BLR0FSQ0hfNjQgPSAiYWFyY2g2NCR7QVJNUEtHU0ZYX0VORElBTl82NH0iCitBQklFWFRFTlNJT05fNjQgPSAiIgorVEFSR0VUX0ZQVV82NCA9ICIiCisKKyMgRHVwbGljYXRlZCBmcm9tIGFyY2gtYXJtLmluYworVFVORV9BUkNIXzMyID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJhcm1lYiIsICJhcm0iLCBkKX0iCitUVU5FX1BLR0FSQ0hfMzIgPSAiJHtBUk1QS0dBUkNIfSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0ke0FSTVBLR1NGWF9FQUJJfSR7QVJNUEtHU0ZYX0VORElBTn0ke0FSTVBLR1NGWF9GUFV9IgorQUJJRVhURU5TSU9OXzMyID0gImVhYmkiCitUQVJHRVRfRlBVXzMyID0gIiR7QGQuZ2V0VmFyKCdBUk1QS0dTRlhfRlBVJywgVHJ1ZSkuc3RyaXAoJy0nKSBvciAnc29mdCd9IgorCitUVU5FX0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RVTkVfQVJDSF82NH0iLCAiJHtUVU5FX0FSQ0hfMzJ9IiAsZCl9IgorVFVORV9QS0dBUkNIID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUVU5FX1BLR0FSQ0hfNjR9IiwgIiR7VFVORV9QS0dBUkNIXzMyfSIgLGQpfSIKK0FCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7QUJJRVhURU5TSU9OXzY0fSIsICIke0FCSUVYVEVOU0lPTl8zMn0iICxkKX0iCitUQVJHRVRfRlBVID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtUQVJHRVRfRlBVXzY0fSIsICIke1RBUkdFVF9GUFVfMzJ9IiAsZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmMwN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKQEAgLTAsMCArMSwzNCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0IgorCitUVU5FVkFMSURbYXJtXSA9ICJFbmFibGUgQVJNIGluc3RydWN0aW9uIHNldCIKK1RVTkVWQUxJRFthcm12NF0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiIC1tYXJjaD1hcm12NCR7QVJNUEtHU0ZYX1RIVU1CfSIsICIiLCBkKX0iCisjIGVuYWJsZSAtLWZpeC12NGJ4IHdoZW4gd2UgaGF2ZSBhcm12NCBpbiBUVU5FX0ZFQVRVUkVTLCBidXQgdGhlbiBkaXNhYmxlIGl0IHdoZW4gd2UgaGF2ZSBhbHNvIGFybXY1IG9yIHRodW1iCisjIG1heWJlIHdlIHNob3VsZCBleHRlbmQgYmIudXRpbHMuY29udGFpbnMgdG8gc3VwcG9ydCBjaGVjayBmb3IgYW55IGNoZWNrdmFsdWVzIGluIHZhbHVlLCBub3cgaXQgZG9lcyAKKyMgY2hlY2t2YWx1ZXMuaXNzdWJzZXQodmFsKSB3aGljaCBjYW5ub3QgYmUgdXNlZCBmb3IgbmVnYXRpdmUgdGVzdCBvZiBmb28gbmVpdGhlciBiYXIgaW4gdmFsdWUKK0ZJWF9WNEJYX0FSTVY0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgIi0tZml4LXY0YngiLCAiIiwgZCl9IgorRklYX1Y0QlhfQVJNVjUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiIiwgIiR7RklYX1Y0QlhfQVJNVjR9IiwgZCl9IgorRklYX1Y0QlggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidGh1bWIiLCAiIiwgIiR7RklYX1Y0QlhfQVJNVjV9IiwgZCl9IgorVEFSR0VUX0xEX0tFUk5FTF9BUkNIICs9ICIke0ZJWF9WNEJYfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY0IiwgImFybXY0OiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtLmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjQgYXJtdjR0IgorQVJNUEtHQVJDSF90dW5lLWFybXY0ID89ICJhcm12NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NHQgPz0gImFybXY0IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0ID89ICJhcm0gYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjQgPSAiYXJtIGFybXY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NH0gYXJtdjR0IgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY0YiBhcm12NHRiIgorQVJNUEtHQVJDSF90dW5lLWFybXY0YiA/PSAiYXJtdjQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjR0YiA/PSAiYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY0dGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0YiA9ICJhcm1lYiBhcm12NGIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NGJ9IGFybXY0dGIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0YTYyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYwpAQCAtMCwwICsxLDUyIEBACitBUk1QS0dTRlhfRFNQID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiYXJtdjUiLCAiZHNwIiBdLCAiZSIsICIiLCBkKX0iCitUVU5FVkFMSURbZHNwXSA9ICJBUk0gRFNQIGZ1bmN0aW9uYWxpdHkiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjVlIGFybXY1dGUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSBkc3AiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSBkc3AiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1fSBhcm12NWUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXR9IGFybXY1ZSBhcm12NXRlIgorCisjIExpdHRsZSBFbmRpYW4gKyBWRlAvRFNQCitBVkFJTFRVTkVTICs9ICJhcm12NWUtdmZwIGFybXY1dGUtdmZwIGFybXY1ZWhmLXZmcCBhcm12NXRlaGYtdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGUtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWVoZi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGVoZi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZS12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZX0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlaGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjUtdmZwfSBhcm12NWUgYXJtdjVlLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQtdmZwfSBhcm12NWUgYXJtdjV0ZSBhcm12NWUtdmZwIGFybXY1dGUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmLXZmcH0gYXJtdjVlaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwfSBhcm12NWVoZi12ZnAgYXJtdjV0ZWhmLXZmcCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWViIGFybXY1dGViIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWIgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGViID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWViID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWV9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVifSBhcm12NWViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGJ9IGFybXY1ZWIgYXJtdjV0ZWIiCisKKyMgQmlnIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1ZWItdmZwIGFybXY1dGViLXZmcCBhcm12NWVoZmItdmZwIGFybXY1dGVoZmItdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRlYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWhmYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGVoZmItdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZi12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlaGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWhmLXZmcH0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yi12ZnB9IGFybXY1ZWIgYXJtdjVlYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGItdmZwfSBhcm12NWViIGFybXY1dGViIGFybXY1ZWItdmZwIGFybXY1dGViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZmItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGZiLXZmcH0gYXJtdjVlaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGZiLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZmItdmZwfSBhcm12NWVoZmItdmZwIGFybXY1dGVoZmItdmZwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2NlYWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKQEAgLTAsMCArMSw2MCBAQAorREVGQVVMVFRVTkUgPz0gImFybXY1IgorCitUVU5FVkFMSURbYXJtdjVdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIEFSTXY1IgorVFVORUNPTkZMSUNUU1thcm12NV0gPSAiYXJtdjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiIC1tYXJjaD1hcm12NSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0iLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjUiLCAiYXJtdjU6IiwgIiIgLGQpfSIKKworQVJNUEtHU0ZYX0RTUCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgImFybXY1IiwgImRzcCIgXSwgImUiLCAiIiwgZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1IGFybXY1dCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NSA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NSA/PSAiYXJtIGFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IHRodW1iIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0fSBhcm12NSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBhcm12NSBhcm12NXQiCisKKyMgTGl0dGxlIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1LXZmcCBhcm12NXQtdmZwIGFybXY1aGYtdmZwIGFybXY1dGhmLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dC12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1aGYtdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRoZi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1LXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0LXZmcH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NS12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV9IGFybXY1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXQtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dH0gYXJtdjUtdmZwIGFybXY1dC12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZi12ZnAgPSAiYXJtdjVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwID0gImFybXY1aGYtdmZwIGFybXY1dGhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGYtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmLXZmcH0gYXJtdjVlaGYtdmZwIGFybXY1dGVoZi12ZnAiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjViIGFybXY1dGIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjViID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRiID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0fSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0Yn0gYXJtdjViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0Yn0gYXJtdjViIGFybXY1dGIiCisKKyMgQmlnIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1Yi12ZnAgYXJtdjV0Yi12ZnAgYXJtdjVoZmItdmZwIGFybXY1dGhmYi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjViLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0Yi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1aGZiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0aGZiLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjViLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0Yi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dC12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1aGYtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGYtdmZwfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWJ9IGFybXY1Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yn0gYXJtdjViLXZmcCBhcm12NXRiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmYi12ZnAgPSAiYXJtdjVoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmYi12ZnAgPSAiYXJtdjVoZmItdmZwIGFybXY1dGhmYi12ZnAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMGM1YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYwpAQCAtMCwwICsxLDUwIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjYiCisKK1RVTkVWQUxJRFthcm12Nl0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjYiCitUVU5FQ09ORkxJQ1RTW2FybXY2XSA9ICJhcm12NCBhcm12NSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NiIsICIgLW1hcmNoPWFybXY2IiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY2IiwgImFybXY2OiIsICIiICxkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCisjIExpdHRsZSBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY2LW5vdmZwIGFybXY2dC1ub3ZmcCBhcm12NiBhcm12NnQgYXJtdjZoZiBhcm12NnRoZiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12Ni1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0LW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0ID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmhmID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRoZiA/PSAiYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnAgPz0gImFybSBhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQtbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwfSB0aHVtYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnB9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnR9IGNhbGxjb252ZW50aW9uLWhhcmQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjYtbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlfSBhcm12NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnQtbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gYXJtdjYgYXJtdjZ0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZS12ZnB9IGFybXY2IGFybXY2LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZS12ZnB9IGFybXY2IGFybXY2dCBhcm12Ni12ZnAgYXJtdjZ0LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmLXZmcH0gYXJtdjZoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmLXZmcH0gYXJtdjZoZi12ZnAgYXJtdjZ0aGYtdmZwIgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY2Yi1ub3ZmcCBhcm12NnRiLW5vdmZwIGFybXY2YiBhcm12NnRiIGFybXY2aGZiIGFybXY2dGhmYiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmItbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGItbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2YiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0YiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZoZmIgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGhmYiA/PSAiYXJtdjYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZiLW5vdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGItbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZoZn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGZ9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmItbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYn0gYXJtdjZiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGItbm92ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWJ9IGFybXY2YiBhcm12NnRiIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWViLXZmcH0gYXJtdjZiIGFybXY2Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYi12ZnB9IGFybXY2YiBhcm12NnRiIGFybXY2Yi12ZnAgYXJtdjZ0Yi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGZiLXZmcH0gYXJtdjZoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGZiLXZmcH0gYXJtdjZoZmItdmZwIGFybXY2dGhmYi12ZnAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiNmY2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYwpAQCAtMCwwICsxLDEyMyBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YSIKKworVFVORVZBTElEW2FybXY3YV0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjctYSIKK1RVTkVDT05GTElDVFNbYXJtdjdhXSA9ICJhcm12NCBhcm12NSBhcm12NiBhcm12NyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N2EiLCAiIC1tYXJjaD1hcm12Ny1hIiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3YSIsICJhcm12N2E6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImFybXY3YSBhcm12N2F0IGFybXY3YS12ZnB2M2QxNiBhcm12N2F0LXZmcHYzZDE2IGFybXY3YS12ZnB2MyBhcm12N2F0LXZmcHYzIGFybXY3YS1uZW9uIGFybXY3YXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YS12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EtbmVvbj89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhID89ICJhcm0gYXJtdjdhIHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IHRodW1iIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSB2ZnB2M2QxNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSB2ZnB2M2QxNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gdmZwdjMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gdmZwdjMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gbmVvbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IG5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2fSBhcm12N2EgYXJtdjdhLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBhcm12N2EtdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGFybXY3YS12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBhcm12N2EtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnR9IGFybXY3YSBhcm12N2EtdmZwIGFybXY3YXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3YS12ZnAtdmZwdjNkMTYgYXJtdjdhdDItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gYXJtdjdhLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0Mi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3YS12ZnAtbmVvbiBhcm12N2F0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImFybXY3YWhmIGFybXY3YXRoZiBhcm12N2FoZi12ZnB2M2QxNiBhcm12N2F0aGYtdmZwdjNkMTYgYXJtdjdhaGYtdmZwdjMgYXJtdjdhdGhmLXZmcHYzIGFybXY3YWhmLW5lb24gYXJtdjdhdGhmLW5lb24gYXJtdjdhaGYtbmVvbi12ZnB2NCBhcm12N2F0aGYtbmVvbi12ZnB2NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtbmVvbiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjN9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzfSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjYWxsY29udmVudGlvbi1oYXJkIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gdmZwdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSB2ZnB2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmfSBhcm12N2FoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmfSBhcm12N2FoZi12ZnAgYXJtdjdhdDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBhcm12N2FoZi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJoZi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2fSBhcm12N2FoZi12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDJoZi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gYXJtdjdhaGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBhcm12N2FoZi12ZnAtbmVvbiBhcm12N2F0MmhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gYXJtdjdhaGYtdmZwLW5lb24tdmZwdjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGFybXY3YWhmLXZmcC1uZW9uLXZmcHY0IGFybXY3YXQyaGYtdmZwLW5lb24tdmZwdjQiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjdhYiBhcm12N2F0YiBhcm12N2FiLXZmcHYzZDE2IGFybXY3YXRiLXZmcHYzZDE2IGFybXY3YWItdmZwdjMgYXJtdjdhdGItdmZwdjMgYXJtdjdhYi1uZW9uIGFybXY3YXRiLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhYi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0Yi1uZW9uID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtdmZwdjNkMTZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0Yi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZifSBhcm12N2FiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRifSBhcm12N2FiLXZmcCBhcm12N2F0MmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTZ9IGFybXY3YWItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjNkMTZ9IGFybXY3YWItdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWJ9IGFybXY3YWItdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yn0gYXJtdjdhYi12ZnAtbmVvbiBhcm12N2F0MmItdmZwLW5lb24iCisKKyMgQmlnIEVuZGlhbiArIFZGUAorQVZBSUxUVU5FUyArPSAiYXJtdjdhaGZiIGFybXY3YXRoZmIgYXJtdjdhaGZiLXZmcHYzZDE2IGFybXY3YXRoZmItdmZwdjNkMTYgYXJtdjdhaGZiLXZmcHYzIGFybXY3YXRoZmItdmZwdjMgYXJtdjdhaGZiLW5lb24gYXJtdjdhdGhmYi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYi1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZoZmJ9IGFybXY3YWhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZmJ9IGFybXY3YWhmYi12ZnAgYXJtdjdhdDJoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmJ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZifSBhcm12N2FoZmItdmZwLXZmcHYzZDE2IGFybXY3YXQyaGZiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2fSBhcm12N2FoZmItdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0MmhmYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZifSBhcm12N2FoZmItdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmJ9IGFybXY3YWhmYi12ZnAtbmVvbiBhcm12N2F0MmhmYi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4MzJmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjJiODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS1uZW9uLmluYwpAQCAtMCwwICsxLDMgQEAKK1RVTkVWQUxJRFtuZW9uXSA9ICJFbmFibGUgTmVvbiBTSU1EIGFjY2VsZXJhdG9yIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCBiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2NCIsICIgLW1mcHU9bmVvbi12ZnB2NCIsICIgLW1mcHU9bmVvbiIsIGQpLCAiIiAsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiLW5lb24iLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdGh1bWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzIxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKQEAgLTAsMCArMSw0OSBAQAorIyBUaGUgaW5zdHJ1Y3Rpb24gc2V0IHRoZSBjb21waWxlciBzaG91bGQgdXNlIHdoZW4gZ2VuZXJhdGluZyBhcHBsaWNhdGlvbgorIyBjb2RlLiBUaGUga2VybmVsIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGFybSBjb2RlIGF0IHByZXNlbnQuIGFybSBjb2RlCisjIGlzIHRoZSBvcmlnaW5hbCAzMiBiaXQgQVJNIGluc3RydWN0aW9uIHNldCwgdGh1bWIgY29kZSBpcyB0aGUgMTYgYml0CisjIGVuY29kZWQgUklTQyBzdWItc2V0LiBUaHVtYiBjb2RlIGlzIHNtYWxsZXIgKG1heWJlIDcwJSBvZiB0aGUgQVJNIHNpemUpCisjIGJ1dCByZXF1aXJlcyBtb3JlIGluc3RydWN0aW9ucyAoMTQwJSBmb3IgNzAlIHNtYWxsZXIgY29kZSkgc28gbWF5IGJlCisjIHNsb3dlci4KK1RVTkVWQUxJRFt0aHVtYl0gPSAiVXNlIHRodW1iIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mIEFSTSIKK0FSTV9USFVNQl9PUFQgPSAiJHtAWydhcm0nLCAndGh1bWInXVtkLmdldFZhcignQVJNX0lOU1RSVUNUSU9OX1NFVCcsIFRydWUpID09ICd0aHVtYiddfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY0JywgICd0JywgICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12NScsICAndCcsICAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjYnLCAgJ3QnLCAgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY3YScsICd0MicsICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12N3InLCAndDInLCAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjdtJywgJ3QyJywgJycsIGQpfSIKKworIyBJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIEFSTSwgdGhlbiByZXNwZWN0IEFSTV9USFVNQl9PUFQgKHdoaWNoIGNhbiBiZSAiYXJtIiBvciAidGh1bWIiKQorIyBJZiB0aGUgZGVmaWNlIGRvZXNuJ3Qgc3VwcG9ydCBBUk0sIHRoZW4gYWx3YXlzIHNldCAidGh1bWIiIGV2ZW4gd2hlbgorIyBzb21lIHJlY2lwZSBleHBsaWNpdGx5IHNldHMgQVJNX0lOU1RSVUNUSU9OX1NFVCB0byAiYXJtIgorQVJNX01fT1BUID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybScsICcke0FSTV9USFVNQl9PUFR9JywgJ3RodW1iJywgZCl9IgorcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICdGYWxzZScsICdUcnVlJywgZCk6CisgICAgICAgIHJldHVybgorICAgIHNlbGVjdGVkID0gZC5nZXRWYXIoJ0FSTV9JTlNUUlVDVElPTl9TRVQnLCBUcnVlKQorICAgIGlmIHNlbGVjdGVkID09IE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHVzZWQgPSBkLmdldFZhcignQVJNX01fT1BUJywgVHJ1ZSkKKyAgICBpZiBzZWxlY3RlZCAhPSB1c2VkOgorICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIGJiLndhcm4oIlJlY2lwZSAnJXMnIHNlbGVjdHMgQVJNX0lOU1RSVUNUSU9OX1NFVCB0byBiZSAnJXMnLCBidXQgdHVuZSBjb25maWd1cmF0aW9uIG92ZXJyaWRlcyBpdCB0byAnJXMnIiAlIChwbiwgc2VsZWN0ZWQsIHVzZWQpKQorfQorCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnIC1tJHtBUk1fTV9PUFR9JywgJycsIGQpfSIKK09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnOnRodW1iJywgJycsIGQpfSIKKworIyBBZGQgc3VmZml4IGZyb20gQVJNX1RIVU1CX1NVRkZJWCBvbmx5IGlmIGFmdGVyIGFsbCB0aGlzIHdlIHN0aWxsIHNldCBBUk1fTV9PUFQgdG8gdGh1bWIKK0FSTVBLR1NGWF9USFVNQiAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnJHtBUk1fVEhVTUJfU1VGRklYfScsICcnLCBkKSBpZiBkLmdldFZhcignQVJNX01fT1BUJywgVHJ1ZSkgPT0gJ3RodW1iJyBlbHNlICcnfSIKKworIyBXaGV0aGVyIHRvIGNvbXBpbGUgd2l0aCBjb2RlIHRvIGFsbG93IGludGVyd29ya2luZyBiZXR3ZWVuIHRoZSB0d28KKyMgaW5zdHJ1Y3Rpb24gc2V0cy4gVGhpcyBhbGxvd3MgdGh1bWIgY29kZSB0byBiZSBleGVjdXRlZCBvbiBhIHByaW1hcmlseQorIyBhcm0gc3lzdGVtIGFuZCB2aWNlIHZlcnNhLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IERJU1RST3Mgbm90CisjIHR1cm4gdGhpcyBvZmYgLSB0aGUgYWN0dWFsIGNvc3QgaXMgdmVyeSBzbWFsbC4KK1RVTkVWQUxJRFtuby10aHVtYi1pbnRlcndvcmtdID0gIkRpc2FibGUgbWl4aW5nIG9mIHRodW1iIGFuZCBBUk0gZnVuY3Rpb25zIgorVEhVTUJfVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ25vLXRodW1iLWludGVyd29yaycsICcgLW1uby10aHVtYi1pbnRlcndvcmsnLCAnIC1tdGh1bWItaW50ZXJ3b3JrJywgZCl9IgorVEhVTUJfT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICduby10aHVtYi1pbnRlcndvcmsnLCAnOnRodW1iLWludGVyd29yaycsICcnLCBkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnICR7VEhVTUJfVFVORV9DQ0FSR1N9JywgJycsIGQpfSIKK09WRVJSSURFUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnJHtUSFVNQl9PVkVSUklERVN9JywgJycsIGQpfSIKKworIyB3aGF0IGFib3V0IGFybXY3bSBkZXZpY2VzIHdoaWNoIGRvbid0IHN1cHBvcnQgLW1hcm0gKGUuZy4gQ29ydGV4LU0zKT8KK1RBUkdFVF9DQ19LRVJORUxfQVJDSCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAndGh1bWInLCAnLW1uby10aHVtYi1pbnRlcndvcmsgLW1hcm0nLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXZmcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmYmVhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXZmcC5pbmMKQEAgLTAsMCArMSwxNyBAQAorVFVORVZBTElEW3ZmcF0gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCAodmZwKSB1bml0LiIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcCIsICItdmZwIiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHYzZDE2XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDE2IHJlZ2lzdGVycyAodmZwdjMtZDE2KSB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2M2QxNiIsICIgLW1mcHU9dmZwdjMtZDE2IiwgIiIsIGQpfSIKK0FSTVBLR1NGWF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzZDE2IiwgIi12ZnB2M2QxNiIsICIiICxkKX0iCisKK1RVTkVWQUxJRFt2ZnB2M10gPSAiRW5hYmxlIFZlY3RvciBGbG9hdGluZyBQb2ludCBWZXJzaW9uIDMgd2l0aCAzMiByZWdpc3RlcnMgKHZmcHYzKSB1bml0LiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2MyIsICIgLW1mcHU9dmZwdjMiLCAiIiwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjMiLCAiLXZmcHYzIiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHY0XSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gNCAodmZwdjQpIHVuaXQuIgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjQiLCAiLXZmcHY0IiwgIiIgLGQpfSIKKworVFVORVZBTElEW2NhbGxjb252ZW50aW9uLWhhcmRdID0gIkVuYWJsZSBFQUJJIGhhcmQgZmxvYXQgY2FsbCBjb252ZW50aW9uLCByZXF1aXJlcyBWRlAuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcCIsIGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNhbGxjb252ZW50aW9uLWhhcmQiLCAiIC1tZmxvYXQtYWJpPWhhcmQiLCAiIC1tZmxvYXQtYWJpPXNvZnRmcCIsIGQpLCAiIiAsZCl9IgorQVJNUEtHU0ZYX0VBQkkgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiY2FsbGNvbnZlbnRpb24taGFyZCIsICJ2ZnAiIF0sICJoZiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzc1ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL1JFQURNRQpAQCAtMCwwICsxLDM2IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorICAtIEluaXRpYWwgVmVyc2lvbgorCitNSVBTIGN1cnJlbnRseSBkZWZpbmVzIDEyIEFCSXMuICBDb21iaW5hdGlvbnMgb2Y6CisgKikgQmlnL0xpdHRsZSBFbmRpYW4KKyAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAorICopIG8zMiwgbjMyLCBuNjQgQUJJCisKK1RVTkVfQVJDSCwgdGhlIEdOVSBjYW5vbmljYWwgYXJjaCwgaXMgZGVmaW5lZCBhczoKKworbWlwcyR7TUlQU1BLR1NGWF9CWVRFfSR7TUlQU1BLR1NGWF9FTkRJQU59CisKK1RoZSBwYWNrYWdlIGFyY2ggaXMgZGVmaW5lZCBpbiBzdWNoIGEgd2F5IHRvIGdlbmVyYXRlZCBhIHN0YW5kYXJkIG5hbWluZworc2NoZW1lLiAgVGhlIHNjaGVtZSBpczogPG1pcHMgdmFyaWFudD5bLW5mXVstbjMyXQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhczoKKworJHtNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS0ke0RFRkFVTFRUVU5FfX0ke01JUFNQS0dTRlhfRlBVfSR7TUlQU1BLR1NGWF9BQkl9CisKK1RoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIE1JUFMgc3BlY2lmaWMgdmFyaWFibGVzOgorCitNSVBTUEtHU0ZYX0JZVEUgLSBUaGlzIGlzIGRlZmluZWQgYXMgZWl0aGVyIGJsYW5rIGFuZCAiNjQiIGZvciBNSVBTNjQgQ1BVcy4KKworTUlQU1BLR1NGWF9FTkRJQU4gLSBGb3IgYmlnZW5kaWFuIGhhcmR3YXJlIHRoaXMgaXMgYmxhbmssIG90aGVyd2lzZSBpdCdzCitkZWZpbmVkIGFzICJlbCIuCisKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLTx0dW5lPiAtIEluIHRoZSBkZWZhdWx0IHR1bmluZ3MgaXQgaXMgc2V0IHRvIHRoZQorc2FtZSB2YWx1ZSBhcyBUVU5FX0FSQ0guICBJbiBjdXN0b20sIG9wdGltaXplZCB0dW5pbmdzLCB0aGUgdmFsdWUgc2hvdWxkCitiZSBtb2RpZmllZCB0byBtb3JlIHByZWNpc2VseSBkZXNjcmliZSB0aGUgdHVuaW5nLgorCitNSVBTUEtHU0ZYX0ZQVSAtIFRoZSB2YWx1ZSBpcyBzZXQgdG8gIiIgb3IgIi1uZiIsIHdoZXJlICItbmYiIGluZGljYXRlcyAKK3RoYXQgdGhlIHR1bmUgaXMgdXNpbmcgYSBub24tZmxvYXRpbmcgcG9pbnQgQUJJLgorCitNSVBTUEtHU0ZYX0FCSSAtIFRoaXMgaXMgdXNlZCB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIEFCSSB3aGVuIHRoZSBwcmV2aW91cwordmFsdWVzIGFyZSBub3QgZW5vdWdoIHRvIGRpc3RyaW5ndWlzaCB0aGUgcGFja2FnZS4gICItbjMyIiBpcyBhZGRlZCB3aGVuCitidWlsZGluZyBmb3IgTjMyIEFCSS4KZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2MjZkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCkBAIC0wLDAgKzEsMTAyIEBACisjIE1JUFMgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKyMgMTIgZGVmaW5lZCBBQklzLCBhbGwgY29tYmluYXRpb25zIG9mOgorIyAqKSBCaWcvTGl0dGxlIEVuZGlhbgorIyAqKSBIYXJkd2FyZS9Tb2Z0d2FyZSBGbG9hdGluZyBQb2ludAorIyAqKSBvMzIsIG4zMiwgbjY0IEFCSQorCitERUZBVUxUVFVORSA/PSAibWlwcyIKKworIyBFbmRpYW5lc3MKK1RVTkVWQUxJRFtiaWdlbmRpYW5dID0gIkVuYWJsZSBiaWctZW5kaWFuIG1vZGUiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiAtbWViIiwgIiAtbWVsIiwgZCl9IgorCisjIEFCSSBmbGFncworVFVORVZBTElEW28zMl0gPSAiTUlQUyBvMzIgQUJJIgorVFVORUNPTkZMSUNUU1tvMzJdID0gIm4zMiBuNjQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibzMyIiwgIiAtbWFiaT0zMiIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtuMzJdID0gIk1JUFM2NCBuMzIgQUJJIgorVFVORUNPTkZMSUNUU1tuMzJdID0gIm8zMiBuNjQiCitBQklFWFRFTlNJT04gLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICJuMzIiLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICIgLW1hYmk9bjMyIiwgIiIsIGQpfSIKKworVFVORVZBTElEW242NF0gPSAiTUlQUzY0IG42NCBBQkkiCitUVU5FQ09ORkxJQ1RTW242NF0gPSAibzMyIG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuNjQiLCAiIC1tYWJpPTY0IiwgIiIsIGQpfSIKKworIyBGbG9hdGluZyBwb2ludAorVFVORVZBTElEW2ZwdS1oYXJkXSA9ICJVc2UgaGFyZHdhcmUgRlBVIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiwgIiAtbWhhcmQtZmxvYXQiLCAiIC1tc29mdC1mbG9hdCIsIGQpfSIKK1RBUkdFVF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiLCAiIiwgInNvZnQiLCBkKX0iCisKKyMgUGFja2FnZSBuYW1pbmcKK01JUFNQS0dTRlhfRU5ESUFOID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIiLCAiZWwiLCBkKX0iCitNSVBTUEtHU0ZYX0JZVEUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjY0IiAsICI2NCIsICIiLCBkKX0iCitNSVBTUEtHU0ZYX0JZVEUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIgLCAiNjQiLCAiIiwgZCl9IgorTUlQU1BLR1NGWF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiICwgIiIsICItbmYiLCBkKX0iCitNSVBTUEtHU0ZYX0FCSSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuMzIiLCAiLW4zMiIsICIiLCBkKX0iCisKK1RVTkVfQVJDSCA9ICJtaXBzJHtNSVBTUEtHU0ZYX0JZVEV9JHtNSVBTUEtHU0ZYX0VORElBTn0iCitUVU5FX1BLR0FSQ0ggPSAiJHtNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS0ke0RFRkFVTFRUVU5FfX0ke01JUFNQS0dTRlhfRlBVfSR7TUlQU1BLR1NGWF9BQkl9IgorCisjIEJhc2UgdHVuZXMKK0FWQUlMVFVORVMgKz0gIm1pcHMgbWlwczY0LW4zMiBtaXBzNjQgbWlwc2VsIG1pcHM2NGVsLW4zMiBtaXBzNjRlbCBtaXBzLW5mIG1pcHM2NC1uZi1uMzIgbWlwczY0LW5mIG1pcHNlbC1uZiBtaXBzNjRlbC1uZi1uMzIgbWlwczY0ZWwtbmYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcyA9ICJvMzIgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMgPSAibWlwcyIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzIgPSAibjMyIGJpZ2VuZGlhbiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uMzIgPSAibWlwczY0LW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NCA9ICJuNjQgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NCA9ICJtaXBzNjQiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwgPSAibzMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzZWwgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2VsID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzZWwgPSAibWlwc2VsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbjMyID0gIm4zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uMzIgPSAibWlwczY0ZWwtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwgPSAibjY0IGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbCA9ICJtaXBzNjRlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMtbmYgPSAibzMyIGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwcy1uZiA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzLW5mID0gIm1pcHMtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYtbjMyID0gIm4zMiBiaWdlbmRpYW4iCitCQVNFX0xJQl90dW5lLW1pcHM2NC1uZi1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYtbjMyID0gIm1pcHM2NC1uZi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjQtbmYgPSAibjY0IGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW5mID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0LW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjQtbmYgPSAibWlwczY0LW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsLW5mID0gIm8zMiIKK0JBU0VfTElCX3R1bmUtbWlwc2VsLW5mID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHNlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwc2VsLW5mID0gIm1pcHNlbC1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJuMzIiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW5mLW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIm1pcHM2NGVsLW5mLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NGVsLW5mID0gIm42NCIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbmYgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uZiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ZWwtbmYgPSAibWlwczY0ZWwtbmYiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdmYjUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL1JFQURNRQpAQCAtMCwwICsxLDE3IEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorICAtIEluaXRpYWwgcmV2aXNpb24KKworVGhlcmUgYXJlIDQgcHJpbWFyeSBQb3dlclBDIEFCSXMuCisjICopIEhhcmQvU29mdCBGbG9hdGluZyBQb2ludAorIyAqKSAzMi1iaXQvNjQtYml0CisKK1RVTkVfQVJDSCBpcyBkZWZpbmVkIGFzIGVpdGhlciAicG93ZXJwYyIgb3IgInBvd2VycGM2NCIgYmFzZWQgb24gdGhlIG0zMiAKK29yIG02NCBmZWF0dXJlLgorCitNYXkgb2YgdGhlIFBvd2VyUEMgcGFja2FnZSBhcmNoaWN0dXJlcyBhcmUgYmFzZWQgb24gbGVnYWN5IExpbnV4IG5hbWVzLgorSG93ZXZlciwgYSBnZW5lcmFsIG5hbWluZyBzY2hlbWUgc2hvdWxkIGJlIHNpbWlsYXIgdG86IHBwY1s2NF1bPGZhbWlseT5dWy1uZl0uCisoTm90ZTogdGhlIGRlZmF1bHQgcGFja2FnZSBhcmNoaXRlY3R1cmVzIGFyZSAicG93ZXJwYyIgYW5kICJwb3dlcnBjNjQiLikKKworVFVORV9QS0dBUkNIIGlzIGRlZmluZWQgYXMgVFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX0uICBBbGwgCitQb3dlclBDIHR1bmluZ3MgYXJlIHJlcXVpcmVkIHRvIGRlZmluZSBUVU5FX1BLR0FSQ0hfdHVuZS08dHVuZT4uCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2Y2EzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCkBAIC0wLDAgKzEsMzQgQEAKKyMgUG93ZXIgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24KKyMgRm91ciBkZWZpbmVkIEFCSXMsIGFsbCBjb21iaW5hdGlvbnMgb2Y6CisjICopIEhhcmQvU29mdCBGbG9hdGluZyBQb2ludAorIyAqKSAzMi1iaXQvNjQtYml0CisKK0RFRkFVTFRUVU5FID89ICJwb3dlcnBjIgorCitUVU5FX1BLR0FSQ0ggPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitBQklFWFRFTlNJT04gPz0gIiIKKworVFVORVZBTElEW20zMl0gPSAiUG93ZXIgRUxGMzIgc3RhbmRhcmQgQUJJIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIgLW0zMiIsICIiLCBkKX0iCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICJwb3dlcnBjIiwgIiIsIGQpfSIKKworVFVORVZBTElEW2ZwdS1oYXJkXSA9ICJVc2UgaGFyZHdhcmUgRlBVLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIsICIgLW1oYXJkLWZsb2F0IiwgIiIsIGQpfSIKKworVFVORVZBTElEW2ZwdS1zb2Z0XSA9ICJVc2Ugc29mdHdhcmUgRlBVLiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtc29mdCIsICIgLW1zb2Z0LWZsb2F0IiwgIiIsIGQpfSIKK1RBUkdFVF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1zb2Z0IiwgInNvZnQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYWx0aXZlY10gPSAiQWx0aXZlYyIKKworIyBCYXNpYyB0dW5lIGRlZmluaXRpb25zCitBVkFJTFRVTkVTICs9ICJwb3dlcnBjIHBvd2VycGMtbmYiIAorVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMtbmYgPSAibTMyIGZwdS1zb2Z0IgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjLW5mID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBvd2VycGMtbmYgPSAicG93ZXJwYy1uZiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjLW5mID0gInBvd2VycGMtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjID0gIm0zMiBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYyA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wb3dlcnBjID0gInBvd2VycGMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYyA9ICJwb3dlcnBjIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3NmRlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBvd2VycGM2NCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW202NF0gPSAiUG93ZXIgRUxGNjQgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttNjRdID0gIm0zMiBuZiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiIC1tNjQiLCAiIiwgZCl9IgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgIm02NCIgXSwgInBvd2VycGM2NCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBvd2VycGM2NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjNjQgPz0gIm02NCBmcHUtaGFyZCIKK0JBU0VfTElCX3R1bmUtcG93ZXJwYzY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcG93ZXJwYzY0ID0gInBvd2VycGM2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjQgPSAicG93ZXJwYzY0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjMGIzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKQEAgLTAsMCArMSwyOSBAQAorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZWdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIgorCitNQUNISU5FX0ZFQVRVUkVTID0gImFsc2EgYmx1ZXRvb3RoIHVzYmdhZGdldCBzY3JlZW4iCisKK01BQ0hJTkVPVkVSUklERVMgPS4gInFlbXVhbGw6IgorCitJTUFHRV9GU1RZUEVTICs9ICJ0YXIuYnoyIGV4dDQiCisKKyMgRG9uJ3QgaW5jbHVkZSBrZXJuZWxzIGluIHN0YW5kYXJkIGltYWdlcworUkRFUEVORFNfa2VybmVsLWJhc2UgPSAiIgorCisjIFVzZSBhIGNvbW1vbiBrZXJuZWwgcmVjaXBlIGZvciBhbGwgUUVNVSBtYWNoaW5lcworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJsaW51eC15b2N0byIKKworRVhUUkFfSU1BR0VERVBFTkRTICs9ICJxZW11LW5hdGl2ZSBxZW11LWhlbHBlci1uYXRpdmUiCisKKyMgUHJvdmlkZSB0aGUgbmZzIHNlcnZlciBrZXJuZWwgbW9kdWxlIGZvciBhbGwgcWVtdSBpbWFnZXMKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcG4tbGludXgteW9jdG8gPSAiIGZlYXR1cmVzL25mc2QvbmZzZC1lbmFibGUuc2NjIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzUxYWNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgUmV2aXNpb24KKworQm90aCBiaWcgZW5kaWFuIGFuZCBsaXR0bGUgZW5kaWFuIGFyZSBkZWZpbmVkIGZvciBTSC4KKworRXhwZXJpbWVudGFsIC0tIFNIIHR1bmluZ3MgaGF2ZSBub3QgYmVlbiB2YWxpZGF0ZWQuCisKK1RoZSBUVU5FX0FSQ0ggaXMgZGVmaW5lZCBhcyAke1RVTkVfQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fS4KKworVGhlIFRVTkVfUEtHQVJDSCBpcyBkZWZpbmQgYXMgJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0uCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL2FyY2gtc2guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZDRjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL2FyY2gtc2guaW5jCkBAIC0wLDAgKzEsOSBAQAorIyBTSCBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorCitERUZBVUxUVFVORSA/PSAic2giCisKK1RVTkVfQVJDSCA9ICIke1RVTkVfQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKK1RVTkVfUEtHQVJDSCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKKworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlZCBiaWctZW5kaWFuIG1vZGUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICIgLW1iIiwgIiAtbWwiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zb2MtZmFtaWx5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmYwODk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zb2MtZmFtaWx5LmluYwpAQCAtMCwwICsxLDMgQEAKKyMgQWRkIFNPQ19GQU1JTFkgdG8gbWFjaGluZSBvdmVycmlkZXMgc28gd2UgZ2V0IGFjY2VzcyB0byBlLmcuICdvbWFwMycgYW5kICd0aTMzNXgnCitTT0NfRkFNSUxZID8/PSAiIgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAWycnLCAnJHtTT0NfRkFNSUxZfTonXVsnJHtTT0NfRkFNSUxZfScgIT0gJyddfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMTMxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKKworVFVORVZBTElEW2FybTExMzZqZnNdID0gIkVuYWJsZSBhcm0xMTM2amZzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTExMzZqZnMiLCAiIC1tdHVuZT1hcm0xMTM2amYtcyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTExMzZqZnMiCitBUk1QS0dBUkNIX3R1bmUtYXJtMTEzNmpmcyA9ICJhcm0xMTM2amZzIgorVFVORV9GRUFUVVJFU190dW5lLWFybTExMzZqZnMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGFybTExMzZqZnMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtMTEzNmpmcyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12Nn0gYXJtMTEzNmpmcy12ZnAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTIwdC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTIwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyZWFlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjR0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbYXJtOTIwdF0gPSAiRW5hYmxlIGFybTkyMHQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtOTIwdCIsICIgLW10dW5lPWFybTkyMHQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05MjB0IgorQVJNUEtHQVJDSF90dW5lLWFybTkyMHQgPSAiYXJtOTIwdCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05MjB0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0dH0gYXJtOTIwdCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05MjB0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gYXJtOTIwdCBhcm05MjB0dCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1ZTRlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NXRlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW2FybTkyNmVqc10gPSAiRW5hYmxlIGFybTkyNmVqcyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05MjZlanMiLCAiIC1tdHVuZT1hcm05MjZlai1zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOTI2ZWpzIgorQVJNUEtHQVJDSF90dW5lLWFybTkyNmVqcyA9ICJhcm05MjZlanMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOTI2ZWpzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IGFybTkyNmVqcyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05MjZlanMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZX0gYXJtOTI2ZWpzdGUiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTl0ZG1pLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWU1N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTl0ZG1pLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjR0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbYXJtOXRkbWldID0gIkVuYWJsZSBhcm05dGRtaSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05dGRtaSIsICIgLW10dW5lPWFybTl0ZG1pIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtOXRkbWkiCitBUk1QS0dBUkNIX3R1bmUtYXJtOXRkbWkgPSAiYXJtOXRkbWkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtOXRkbWkgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBhcm05dGRtaSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm05dGRtaSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGFybTl0ZG1pdCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hdG9tLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hdG9tLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTFiYjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCkBAIC0wLDAgKzEsMiBAQAorIyBBdG9tIHR1bmluZ3MgYXJlIHRoZSBzYW1lIGFzIGNvcmUyIGZvciBub3cuLi4KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYzMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmMyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYzMuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCitUVU5FVkFMSURbYzNdID0gIlZJQSBDeXJpeCBJSUkgb3IgVklBIEMzIHNwZWNpZmljIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW2MzXSA9ICJtNjQgbXgzMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjMyIsICIgLW1hcmNoPWMzIC1tdHVuZT1jMyIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImMzIgorVFVORV9GRUFUVVJFU190dW5lLWMzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gYzMiCitCQVNFX0xJQlNfdHVuZS1jMyA9ICIke0JBU0VfTElCX3R1bmUteDg2fSIKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgbGlrZWx5IGJlIHNvbWV0aGluZyBvdGhlciB0aGVuIGk1ODYuLi4KK1RVTkVfUEtHQVJDSF90dW5lLWMzID0gImk1ODYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYzMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2fSBpMzg2IGk0ODYgaTU4NiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNGNiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCkBAIC0wLDAgKzEsMzggQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgImNvcmUyIjoKKyMKKyMgICAgICBJbnRlbCBDb3JlMiBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMgYW5kIFNTU0UzCisjICAgICAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisjCisjIFRoaXMgdHVuZSBpcyByZWNvbW1lbmRlZCBmb3IgdGhlIEludGVsIENvcmUgMiBDUFUgZmFtaWx5LCBpbmNsdWRpbmcgQ29ucm9lLAorIyBNZXJvbSBhbmQgYmV5b25kLCBhcyB3ZWxsIGFzIHRoZSBmaXJzdCBBdG9tIENQVXMsIERpYW1vbmR2aWxsZSwgYW5kIGJleW9uZC4KKyMKK0RFRkFVTFRUVU5FID89ICJjb3JlMi0zMiIKKworIyBTZXQgeDg2IHRhcmdldCBhcmNoIHRvIGk2ODYsIHNvIHRoYXQgZ2xpYmMgZW5hYmxlcyBTU0Ugb3B0aW1pc2VkIG1lbWNweSwgZXRjLgorWDg2QVJDSDMyID89ICJpNjg2IgorCisjIEluY2x1ZGUgdGhlIHByZXZpb3VzIHR1bmUgdG8gcHVsbCBpbiBQQUNLQUdFX0VYVFJBX0FSQ0hTCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKKworIyBFeHRyYSB0dW5lIGZlYXR1cmVzCitUVU5FVkFMSURbY29yZTJdID0gIkVuYWJsZSBjb3JlMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlMiIsICIgLW1hcmNoPWNvcmUyIC1tdHVuZT1jb3JlMiAtbXNzZTMgLW1mcG1hdGg9c3NlIiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImNvcmUyLTMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTMyID0gImNvcmUyLTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODZ9IGNvcmUyLTMyIgorCitBVkFJTFRVTkVTICs9ICJjb3JlMi02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjR9IGNvcmUyIgorQkFTRV9MSUJfdHVuZS1jb3JlMi02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTY0ID0gImNvcmUyLTY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NH0gY29yZTItNjQiCisKK0FWQUlMVFVORVMgKz0gImNvcmUyLTY0LXgzMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlMi02NC14MzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMn0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTY0LXgzMiA9ICJsaWJ4MzIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlMi02NC14MzIgPSAiY29yZTItNjQteDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0LXgzMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyfSBjb3JlMi02NC14MzIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2Y5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZWk3LmluYwpAQCAtMCwwICsxLDM1IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJjb3JlaTciOgorIworIyAgICAgSW50ZWwgQ29yZSBpNyBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMsIFNTU0UzLCBTU0U0LjEKKyMgICAgIGFuZCBTU0U0LjIgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisjCisjIFRoaXMgdHVuZSBpcyByZWNvbW1lbmRlZCBmb3IgSW50ZWwgTmVoYWxlbSBhbmQgU2lsdmVybW9udCAoZS5nLiBCYXkgVHJhaWwpIENQVXMKKyMgKGFuZCBiZXlvbmQpLgorIworREVGQVVMVFRVTkUgPz0gImNvcmVpNy02NCIKKworIyBQdWxsIGluIHRoZSBwcmV2aW91cyB0dW5lIGluIHRvIHB1bGwgaW4gUEFDS0FHRV9FWFRSQV9BUkNIUworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtjb3JlaTddID0gIkVuYWJsZSBjb3JlaTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZWk3IiwgIiAtbWFyY2g9Y29yZWk3IC1tdHVuZT1jb3JlaTcgLW1mcG1hdGg9c3NlIC1tc3NlNC4yIiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImNvcmVpNy0zMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlaTctMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy0zMiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctMzIgPSAiY29yZWk3LTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy0zMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMn0gY29yZWk3LTMyIgorCitBVkFJTFRVTkVTICs9ICJjb3JlaTctNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZWk3LTY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NH0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1jb3JlaTctNjQgPSAiY29yZWk3LTY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy02NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlMi02NH0gY29yZWk3LTY0IgorCitBVkFJTFRVTkVTICs9ICJjb3JlaTctNjQteDMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmVpNy02NC14MzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMn0gY29yZWk3IgorQkFTRV9MSUJfdHVuZS1jb3JlaTctNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy02NC14MzIgPSAiY29yZWk3LTY0LXgzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3JlaTctNjQteDMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0LXgzMn0gY29yZWk3LTY0LXgzMiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyOTc3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTUuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhMTVdID0gIkVuYWJsZSBDb3J0ZXgtQTE1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGExNSIsICIgLW10dW5lPWNvcnRleC1hMTUiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTUgY29ydGV4YTE1dCBjb3J0ZXhhMTUtbmVvbiBjb3J0ZXhhMTV0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1ID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0ID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTUtbmVvbiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dC1uZW9uID0gImNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTE1LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGExNS12ZnAgY29ydGV4YTE1dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhMTUtdmZwIGNvcnRleGExNS12ZnAtbmVvbiBjb3J0ZXhhMTV0Mi12ZnAgY29ydGV4YTE1dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhMTVoZiBjb3J0ZXhhMTV0aGYgY29ydGV4YTE1aGYtbmVvbiBjb3J0ZXhhMTV0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTVoZiA9ICJjb3J0ZXhhMTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE1dGhmID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA9ICJjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhMTVoZi12ZnAgY29ydGV4YTE1aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTVoZi12ZnAtbmVvbiBjb3J0ZXhhMTV0MmhmLXZmcCBjb3J0ZXhhMTV0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmM3MTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNy5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGExN10gPSAiRW5hYmxlIENvcnRleC1BMTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTE3IiwgIiAtbXR1bmU9Y29ydGV4LWExNyIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNyBjb3J0ZXhhMTd0IGNvcnRleGExNy1uZW9uIGNvcnRleGExN3QtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTcgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3QgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNy1uZW9uID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0LW5lb24gPSAiY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTctbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3QtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTctdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3QgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTd0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNy12ZnAgY29ydGV4YTE3LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3QtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNy12ZnAgY29ydGV4YTE3LXZmcC1uZW9uIGNvcnRleGExN3QyLXZmcCBjb3J0ZXhhMTd0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGExN2hmIGNvcnRleGExN3RoZiBjb3J0ZXhhMTdoZi1uZW9uIGNvcnRleGExN3RoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN2hmID0gImNvcnRleGExNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTd0aGYgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN2hmLW5lb24gPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3RoZi1uZW9uID0gImNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTdoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN2hmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTdoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE3aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3RoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTd0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTdoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExN2hmLXZmcCBjb3J0ZXhhMTdoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTd0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN2hmLXZmcC1uZW9uIGNvcnRleGExN3QyaGYtdmZwIGNvcnRleGExN3QyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzllNjVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE1LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTVdID0gIkVuYWJsZSBDb3J0ZXgtQTUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTUiLCAiIC1tdHVuZT1jb3J0ZXgtYTUiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNSBjb3J0ZXhhNXQgY29ydGV4YTUtbmVvbiBjb3J0ZXhhNXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNSA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXQgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTUtbmVvbiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICJjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNS1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNS12ZnAgY29ydGV4YTV0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTUtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTUtdmZwIGNvcnRleGE1LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTUtdmZwIGNvcnRleGE1LXZmcC1uZW9uIGNvcnRleGE1dDItdmZwIGNvcnRleGE1dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNWhmIGNvcnRleGE1dGhmIGNvcnRleGE1aGYtbmVvbiBjb3J0ZXhhNXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1aGYgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0aGYgPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTVoZi1uZW9uID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dGhmLW5lb24gPSAiY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTVoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE1aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTV0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTVoZi12ZnAgY29ydGV4YTVoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNWhmLXZmcC1uZW9uIGNvcnRleGE1dDJoZi12ZnAgY29ydGV4YTV0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNjkxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNy5pbmMKQEAgLTAsMCArMSw0MiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE3XSA9ICJFbmFibGUgQ29ydGV4LUE3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE3IiwgIiAtbXR1bmU9Y29ydGV4LWE3IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTcgY29ydGV4YTd0IGNvcnRleGE3LW5lb24gY29ydGV4YTd0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTcgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0ID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3LW5lb24gPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTcgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3QgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTctbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE3LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3QgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTctdmZwIGNvcnRleGE3dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE3LXZmcCBjb3J0ZXhhNy12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE3LXZmcCBjb3J0ZXhhNy12ZnAtbmVvbiBjb3J0ZXhhN3QyLXZmcCBjb3J0ZXhhN3QyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTdoZiBjb3J0ZXhhN3RoZiBjb3J0ZXhhN2hmLW5lb24gY29ydGV4YTd0aGYtbmVvbiBjb3J0ZXhhN2hmLW5lb24tdmZwdjQgY29ydGV4YTd0aGYtbmVvbi12ZnB2NCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN2hmID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYtbmVvbiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uLXZmcHY0ID0gImNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3RoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb24tdmZwdjR9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhN2hmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3RoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTdoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwIGNvcnRleGE3dDJoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NH0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN2hmLXZmcC12ZnB2NC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjR9IGNvcnRleGE3aGYtdmZwIGNvcnRleGE3aGYtdmZwLW5lb24gY29ydGV4YTd0MmhmLXZmcCBjb3J0ZXhhN3QyaGYtdmZwLW5lb24gY29ydGV4YTdoZi12ZnAtdmZwdjQtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwLXZmcHY0LW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE1MzdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE4LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YThdID0gIkVuYWJsZSBDb3J0ZXgtQTggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTgiLCAiIC1tdHVuZT1jb3J0ZXgtYTgiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOCBjb3J0ZXhhOHQgY29ydGV4YTgtbmVvbiBjb3J0ZXhhOHQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOCA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHQgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTgtbmVvbiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICJjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE4IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTgtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOC12ZnAgY29ydGV4YTh0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTgtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTgtdmZwIGNvcnRleGE4LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTgtdmZwIGNvcnRleGE4LXZmcC1uZW9uIGNvcnRleGE4dDItdmZwIGNvcnRleGE4dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOGhmIGNvcnRleGE4dGhmIGNvcnRleGE4aGYtbmVvbiBjb3J0ZXhhOHRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4aGYgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0aGYgPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YThoZi1uZW9uID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dGhmLW5lb24gPSAiY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YThoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE4IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE4aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YThoZi12ZnAgY29ydGV4YTh0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YThoZi12ZnAgY29ydGV4YThoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOHRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOGhmLXZmcC1uZW9uIGNvcnRleGE4dDJoZi12ZnAgY29ydGV4YTh0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMzk0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOS5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGE5XSA9ICJFbmFibGUgQ29ydGV4LUE5IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleGE5IiwgIiAtbXR1bmU9Y29ydGV4LWE5IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTkgY29ydGV4YTl0IGNvcnRleGE5LW5lb24gY29ydGV4YTl0LW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTkgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0ID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5LW5lb24gPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTkgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTktbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGE5LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTktdmZwIGNvcnRleGE5dDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE5LXZmcCBjb3J0ZXhhOS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE5LXZmcCBjb3J0ZXhhOS12ZnAtbmVvbiBjb3J0ZXhhOXQyLXZmcCBjb3J0ZXhhOXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTloZiBjb3J0ZXhhOXRoZiBjb3J0ZXhhOWhmLW5lb24gY29ydGV4YTl0aGYtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOWhmID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dGhmID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5aGYtbmVvbiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXRoZi1uZW9uID0gImNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXRoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhOWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5dDJoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTloZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGE5aGYtdmZwIGNvcnRleGE5aGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTl0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTloZi12ZnAtbmVvbiBjb3J0ZXhhOXQyaGYtdmZwIGNvcnRleGE5dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNjUyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTEuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4bTFdID0gIkVuYWJsZSBDb3J0ZXgtTTEgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4bTEiLCAiIC1tdHVuZT1jb3J0ZXgtbTEiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhtMSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhtMSA9ICJjb3J0ZXhtMSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhtMSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleG0xIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleG0xID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleG0xLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzRjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4bTMuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhtMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhtM10gPSAiRW5hYmxlIENvcnRleC1NMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhtMyIsICIgLW10dW5lPWNvcnRleC1tMyIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthcm12N21dID0gIkVuYWJsZSBDb3J0ZXgtTTMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdtIiwgIiAtbWFyY2g9YXJtdjctbSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleG0zIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleG0zID0gImFybXY3bSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhtMyA9ICJhcm12N20gdmZwIGNvcnRleG0zIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleG0zID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGFybXY3bS12ZnAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleHI0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU2NDlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleHI0LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAiY29ydGV4cjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4cjRdID0gIkVuYWJsZSBDb3J0ZXgtUjQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4cjQiLCAiIC1tdHVuZT1jb3J0ZXgtcjQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbYXJtdjdyXSA9ICJFbmFibGUgQ29ydGV4LVI0IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3ciIsICIgLW1hcmNoPWFybXY3LXIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhyNCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhyNCA9ICJhcm12N3IiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4cjQgPSAiYXJtdjdyIHZmcCBjb3J0ZXhyNCBhcm0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4cjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdyLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YjQzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK0RFRkFVTFRUVU5FID89ICJlcDkzMTIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFtlcDkzMTJdID0gIkVuYWJsZSBJbnRlbCBQWEEyN3ggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZXA5MzEyIiwgIiAtbWFyY2g9ZXA5MzEyIC1tdHVuZT1lcDkzMTIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJlcDkzMTIiCitBUk1QS0dBUkNIX3R1bmUtZXA5MzEyID0gImVwOTMxMiIKKyMgdGhpcyB0dW5lIGRvZXMgbm90IGluY2x1ZGUgVFVORV9GRUFUVVJFU190dW5lLWFybXY0dCwgc28gdGhlcmUgaXMgbm8gYXJtdjQgVFVORV9GRUFUVVJFUyA9PiBubyAndCcgaW4gQVJNUEtHU0ZYX1RIVU1CCitUVU5FX0ZFQVRVUkVTX3R1bmUtZXA5MzEyID0gInRodW1iIGVwOTMxMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1lcDkzMTIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBlcDkzMTIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYtbmxwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzA2MDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYtbmxwLmluYwpAQCAtMCwwICsxLDE5IEBACisjIFNldHRpbmdzIGZvciB0aGUgR0NDKDEpIGNwdS10eXBlICJxdWFyayI6CisjCisjCisjCitERUZBVUxUVFVORSA/PSAiaTU4Ni1ubHAtMzIiCisKKyMgSW5jbHVkZSB0aGUgcHJldmlvdXMgdHVuZSB0byBwdWxsIGluIFBBQ0tBR0VfRVhUUkFfQVJDSFMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCisjIHg4NiB3aXRoIG5vIGxvY2sgcHJlZml4CitUVU5FVkFMSURbaTU4Ni1ubHBdID0gIklBMzIgd2l0aCBMb2NrIFByZWZpeCBvbWl0dGVkIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImk1ODYtbmxwIiwgIiAtbWFyY2g9aTU4NiAtV2EsLW1vbWl0LWxvY2stcHJlZml4PXllcyIsICIiLCBkKX0iCisKKyMgUXVhcmsgdHVuZSBmZWF0dXJlCitBVkFJTFRVTkVTID0gImk1ODYtbmxwLTMyIgorVFVORV9GRUFUVVJFU190dW5lLWk1ODYtbmxwLTMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Nn0gaTU4Ni1ubHAiCitCQVNFX0xJQl90dW5lLWk1ODYtbmxwLTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWk1ODYtbmxwLTMyID0gImk1ODYtbmxwLTMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODYtbmxwLTMyID0gImk1ODYtbmxwLTMyIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYmIzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gImk1ODYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtpNTg2XSA9ICJFbmFibGUgaTU4NiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpNTg2IiwgIiAtbWFyY2g9aTU4NiIsICIiLCBkKX0iCisKKyMgRXh0cmEgdHVuZSBzZWxlY3Rpb25zCitBVkFJTFRVTkVTICs9ICJpNTg2IgorVFVORV9GRUFUVVJFU190dW5lLWk1ODYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBpNTg2IgorQkFTRV9MSUJfdHVuZS1pNTg2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWk1ODYgPSAiaTU4NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1pNTg2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Nn0gaTU4NiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4Y2EwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pd21teHQuaW5jCkBAIC0wLDAgKzEsMTQgQEAKKyMgQ29uZmlndXJhdGlvbnMgZm9yIHRoZSBJbnRlbCBQWEEyN3ggQXBwaWNhdGlvbnMgUHJvY2Vzc29yIEZhbWlseS4gCisjIFBsZWFzZSB1c2UgdHVuZS14c2NhbGUgZm9yIFBYQTI1NS9QWEEyNnggYmFzZWQgcHJvY2Vzc29ycy4KKworREVGQVVMVFRVTkUgPz0gIml3bW14dCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFtpd21teHRdID0gIkVuYWJsZSBJbnRlbCBQWEEyN3ggc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiaXdtbXh0IiwgIiAtbWFyY2g9aXdtbXh0IC1tdHVuZT1pd21teHQiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJpd21teHQiCitBUk1QS0dBUkNIX3R1bmUtaXdtbXh0ID0gIml3bW14dCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1pd21teHQgPSAidGh1bWIgaXdtbXh0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWl3bW14dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBpd21teHQgaXdtbXh0dCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzMjZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCkBAIC0wLDAgKzEsMjUgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzMzIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9hcmNoLW1pcHMuaW5jCisKK1RVTkVWQUxJRFttaXBzMzJdID0gIkVuYWJsZSBtaXBzMzIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHMzMl0gPSAibjY0IG4zMiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtaXBzMzIiLCAiIC1tYXJjaD1taXBzMzIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJtaXBzMzIgbWlwczMyZWwgbWlwczMyLW5mIG1pcHMzMmVsLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHN9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMiA9ICJtaXBzMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyID0gIm1pcHMgbWlwczMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJlbCA9ICJtaXBzMzJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJlbCA9ICJtaXBzZWwgbWlwczMyZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzItbmYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcy1uZn0gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyLW5mID0gIm1pcHMzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzItbmYgPSAibWlwcy1uZiBtaXBzMzItbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJlbC1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwtbmZ9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMmVsLW5mID0gIm1pcHMzMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMmVsLW5mID0gIm1pcHNlbC1uZiBtaXBzMzJlbC1uZiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZGVmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzMzJyMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKKworVFVORVZBTElEW21pcHMzMnIyXSA9ICJFbmFibGUgbWlwczMycjIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FQ09ORkxJQ1RTW21pcHMzMnIyXSA9ICJuNjQgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm1pcHMzMnIyIiwgIiAtbWFyY2g9bWlwczMycjIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJtaXBzMzJyMiBtaXBzMzJyMmVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc30gbWlwczMycjIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzJyMiA9ICJtaXBzMzJyMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMiA9ICJtaXBzIG1pcHMzMiBtaXBzMzJyMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMnIyZWwgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc2VsfSBtaXBzMzJyMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyZWwgPSAibWlwczMycjJlbCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzJyMmVsID0gIm1pcHNlbCBtaXBzMzJlbCBtaXBzMzJyMmVsIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmUwZTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKQEAgLTAsMCArMSwzIEBACitERUZBVUxUVFVORSA/PSAibWlwczY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMycjIuaW5jCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGQ5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtb2N0ZW9uLmluYwpAQCAtMCwwICsxLDMyIEBACitERUZBVUxUVFVORSA/PSJvY3Rlb24yIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYworCitBVkFJTFRVTkVTICs9ICJvY3Rlb24yIG9jdGVvbjJfNjQgb2N0ZW9uMyBvY3Rlb24zXzY0IgorCitUVU5FVkFMSURbb2N0ZW9uMl0gPSAiRW5hYmxlIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG9jdGVvbjIgc3VwcG9ydCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvY3Rlb24yIiwgIiAtbWFyY2g9b2N0ZW9uMiAiLCAiIixkKX0iCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24yID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzJ9IG9jdGVvbjIiCitCQVNFX0xJQl90dW5lLW9jdGVvbjIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24yID0gIm9jdGVvbjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMiA9ICJtaXBzNjQtbjMyIG9jdGVvbjItbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uMl82NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjR9IG9jdGVvbjIiCitCQVNFX0xJQl90dW5lLW9jdGVvbjJfNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24yXzY0ID0gIm9jdGVvbjJfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMl82NCA9ICJtaXBzNjQgb2N0ZW9uMl82NCIKKworCitUVU5FVkFMSURbb2N0ZW9uM10gPSAiRW5hYmxlIG9wdGltaXphdGlvbiByZWxhdGVkIHRvIG9jdGVvbjMgc3VwcG9ydCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvY3Rlb24zIiwgIiAtbWFyY2g9b2N0ZW9uMyAiLCAiIixkKX0iCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24zID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uMzJ9IG9jdGVvbjMiCitCQVNFX0xJQl90dW5lLW9jdGVvbjMgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24zID0gIm9jdGVvbjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uMyA9ICJtaXBzNjQtbjMyIG9jdGVvbjMtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtb2N0ZW9uM182NCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjR9IG9jdGVvbjMiCitCQVNFX0xJQl90dW5lLW9jdGVvbjNfNjQgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1vY3Rlb24zXzY0ID0gIm9jdGVvbjNfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtb2N0ZW9uM182NCA9ICJtaXBzNjQgb2N0ZW9uM182NCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiZTg2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjUuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM2NHA1IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjVdID0gIkVuYWJsZSBJQk0gUG93ZXI1IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICIgLW1jcHU9cG93ZXI1IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDUgcHBjNjRwNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNSA9ICJtMzIgZnB1LWhhcmQgcG93ZXI1IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A1ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A1ID0gInBwY3A1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A1IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNSA9ICJtNjQgZnB1LWhhcmQgcG93ZXI1IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDUgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA1ID0gInBwYzY0cDUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDUiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNSBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjUiLCAiLS13aXRoLWNwdT1wb3dlcjUiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICItLXdpdGgtY3B1PXBvd2VyNSIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjM3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI2LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjcHI2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjZdID0gIkVuYWJsZSBJQk0gUG93ZXI2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICIgLW1jcHU9cG93ZXI2IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDYgcHBjNjRwNiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNiA9ICJtMzIgZnB1LWhhcmQgcG93ZXI2IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A2ID0gInBwY3A2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A2IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNiA9ICJtNjQgZnB1LWhhcmQgcG93ZXI2IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDYgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA2ID0gInBwYzY0cDYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDYiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNiBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjYiLCAiLS13aXRoLWNwdT1wb3dlcjYiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICItLXdpdGgtY3B1PXBvd2VyNiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjllNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI3LmluYwpAQCAtMCwwICsxLDIxIEBACitERUZBVUxUVFVORSA/PSAicHBjcHI3IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtwb3dlcjddID0gIkVuYWJsZSBJQk0gUG93ZXI3IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICIgLW1jcHU9cG93ZXI3IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjcDcgcHBjNjRwNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNwNyA9ICJtMzIgZnB1LWhhcmQgcG93ZXI3IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwY3A3ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY3A3ID0gInBwY3A3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY3A3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY3A3IgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRwNyA9ICJtNjQgZnB1LWhhcmQgcG93ZXI3IGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0cDcgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NHA3ID0gInBwYzY0cDciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRwNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0cDciCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IHBvd2VyNyBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwb3dlcjciLCAiLS13aXRoLWNwdT1wb3dlcjciLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICItLXdpdGgtY3B1PXBvd2VyNyIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDE4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNDc2LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjNDc2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNDc2XSA9ICJFbmFibGUgcHBjNDc2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzQ3NiIsICIgLW1jcHU9NDc2IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNDc2IgorVFVORV9GRUFUVVJFU190dW5lLXBwYzQ3NiA9ICJtMzIgZnB1LWhhcmQgcHBjNDc2IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNDc2ID0gInBwYzQ3NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM0NzYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjNDc2IgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA0NzYgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzQ3NiIsICItd2l0aC1jcHU9NDc2IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM2MDNlLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM2MDNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ0YTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM2MDNlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjNjAzZV0gPSAiRW5hYmxlIHBwYzYwM2Ugc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNjAzZSIsICIgLW1jcHU9NjAzZSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInBwYzYwM2UiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjAzZSA9ICJtMzIgZnB1LWhhcmQgcHBjNjAzZSIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzYwM2UgPSAicHBjNjAzZSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2MDNlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwYzYwM2UiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDYwM2Ugc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzYwM2UiLCAiLXdpdGgtY3B1PTYwM2UiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzA0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwYzc0MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM3NDAwXSA9ICJFbmFibGUgcHBjNzQwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM3NDAwIiwgIiAtbWNwdT03NDAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNzQwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM3NDAwID0gIm0zMiBmcHUtaGFyZCBwcGM3NDAwIGFsdGl2ZWMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM3NDAwID0gInBwYzc0MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNzQwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGM3NDAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCA3NDAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorI0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNzQwMCIsICItLXdpdGgtY3B1PXBvd2VyNCIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTk1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAicHBjZTMwMGMyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTMwMGMyXSA9ICJFbmFibGUgcHBjZTMwMGMyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMiIsICIgLW1jcHU9ZTMwMGMyIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTMwMGMyIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMiA9ICJtMzIgZnB1LXNvZnQgcHBjZTMwMGMyIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTMwMGMyID0gInBwY2UzMDBjMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlMzAwYzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMyIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTljZjIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMy5pbmMKQEAgLTAsMCArMSwyMyBAQAorREVGQVVMVFRVTkUgPz0gInBwY2UzMDBjMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworQVZBSUxUVU5FUyArPSAicHBjZTMwMGMzIHBwY2UzMDBjMy1uZiIKKworIyBoYXJkLWZsb2F0CitUVU5FVkFMSURbcHBjZTMwMGMzXSA9ICJFbmFibGUgcHBjZTMwMGMzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2UzMDBjMyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1wb3dlcnBjfSBwcGNlMzAwYzMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlMzAwYzMgPSAicHBjZTMwMGMzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2UzMDBjMyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlMzAwYzMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMzIiwgIiAtbWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCisjIGdsaWJjIGNvbmZpZyBvcHRpb25zIHRvIG1ha2UgdXNlIG9mIGUzMDBjMyAoNjAzZSkgc3BlY2lmaWMgc3FydC9zcXJ0ZiByb3V0aW5lcworR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMiLCAiLS13aXRoLWNwdT1lMzAwYzMiLCAiIiwgZCl9IgorCisjIHNvZnQtZmxvYXQKK1RVTkVWQUxJRFtwcGNlMzAwYzMtbmZdID0gIkVuYWJsZSBwcGNlMzAwYzMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMgKG5vIGZwdSkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMzLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMy1uZiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2UzMDBjMy1uZiA9ICJwcGNlMzAwYzMtbmYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTMwMGMzLW5mID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMtbmZ9IHBwY2UzMDBjMy1uZiIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMtbmYiLCAiIC1tY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGMxZjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMF0gPSAiRW5hYmxlIHBwY2U1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMCIsICIgLW1jcHU9ODU0MCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFtzcGVdID0gIkVuYWJsZSBTUEUgQUJJIGV4dGVuc2lvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwIiwgInNwZSIgXSwgIiAtbWFiaT1zcGUgLW1zcGUgLW1mbG9hdC1ncHJzPXNpbmdsZSIsICIiLCBkKX0iCitUQVJHRVRfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDAiICwgInNwZSIgXSwgInBwYy1lZnMiLCAiIiwgZCl9IgorCisjIHNwZSBpcyBkZWZpbmVkIHBvdGVudGlhbGx5IGluIHR3byBwbGFjZXMsIHNvIHdlIHdhbnQgdG8gYmUgc3VyZSBpdCB3aWxsCisjIG9ubHkgd3JpdGUgc3BlIG9uY2UgdG8gdGhlIEFCSUVYVEVOU0lPTlMgZmllbGQuCitTUEVBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgInNwZSIsICIiLCBkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7U1BFQUJJRVhURU5TSU9OfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTAwID0gIm0zMiBzcGUgcHBjZTUwMCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDAgPSAicHBjZTUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwID0gInBwY2U1MDAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NGQ4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMG1jLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjZTUwMG1jIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbcHBjZTUwMG1jXSA9ICJFbmFibGUgcHBjZTUwMG1jIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDBtYyIsICIgLW1jcHU9ZTUwMG1jIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMG1jIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDBtYyA9ICJtMzIgZnB1LWhhcmQgcHBjZTUwMG1jIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMG1jID0gInBwY2U1MDBtYyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwbWMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTUwMG1jIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNTAwbWMgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2U1MDBtYyIsICItd2l0aC1jcHU9ZTUwMG1jIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxNGQ3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwdjIuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwdjIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwdjJdID0gIkVuYWJsZSBwcGNlNTAwdjIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMHYyIiwgIiAtbWNwdT04NTQ4IiwgIiIsIGQpfSIKKworVFVORVZBTElEW3NwZV0gPSAiRW5hYmxlIFNQRSBBQkkgZXh0ZW5zaW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDB2MiIsICJzcGUiIF0sICIgLW1hYmk9c3BlIC1tc3BlIC1tZmxvYXQtZ3Bycz1kb3VibGUiLCAiIiwgZCl9IgorVEFSR0VUX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJwcGNlNTAwdjIiICwgInNwZSIgXSwgInBwYy1lZmQiLCAiIiwgZCl9IgorCisjIHNwZSBpcyBkZWZpbmVkIHBvdGVudGlhbGx5IGluIHR3byBwbGFjZXMsIHNvIHdlIHdhbnQgdG8gYmUgc3VyZSBpdCB3aWxsCisjIG9ubHkgd3JpdGUgc3BlIG9uY2UgdG8gdGhlIEFCSUVYVEVOU0lPTlMgZmllbGQuCitTUEVBQklFWFRFTlNJT04gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3BlIiwgInNwZSIsICIiLCBkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7U1BFQUJJRVhURU5TSU9OfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTUwMHYyIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDB2MiA9ICJtMzIgc3BlIHBwY2U1MDB2MiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1MDB2MiA9ICJwcGNlNTAwdjIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTUwMHYyID0gInBwY2U1MDB2MiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MjMxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTU1MDAuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbZTU1MDBdID0gIkVuYWJsZSBGcmVlc2NhbGUgZTU1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTU1MDAiLCAiIC1tY3B1PWU1NTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTU1MDAgcHBjNjRlNTUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNTUwMCA9ICJtMzIgZnB1LWhhcmQgZTU1MDAiCitCQVNFX0xJQl90dW5lLXBwY2U1NTAwID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2U1NTAwID0gInBwY2U1NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2U1NTAwIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNjRlNTUwMCA9ICJtNjQgZnB1LWhhcmQgZTU1MDAiCitCQVNFX0xJQl90dW5lLXBwYzY0ZTU1MDAgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NGU1NTAwID0gInBwYzY0ZTU1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRlNTUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0ZTU1MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1NTAwIHNwZWNpZmljIGxpYnJhcnkgKGZvciBzcXJ0KQorR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNTUwMCIsICItLXdpdGgtY3B1PWU1NTAwIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTY1MDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzQzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTY1MDAuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNjUwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYworCitUVU5FVkFMSURbZTY1MDBdID0gIkVuYWJsZSBGcmVlc2NhbGUgZTY1MDAgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZTY1MDAiLCAiIC1tY3B1PWU2NTAwIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjZTY1MDAgcHBjNjRlNjUwMCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlNjUwMCA9ICJtMzIgZnB1LWhhcmQgZTY1MDAgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjZTY1MDAgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTY1MDAgPSAicHBjZTY1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTY1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTY1MDAiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NGU2NTAwID0gIm02NCBmcHUtaGFyZCBlNjUwMCBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGM2NGU2NTAwID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjRlNjUwMCA9ICJwcGM2NGU2NTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzY0ZTY1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYzY0fSBwcGM2NGU2NTAwIgorCisjIGdsaWJjIGNvbmZpZ3VyZSBvcHRpb25zIHRvIGdldCBlNjUwMCBzcGVjaWZpYyBsaWJyYXJ5CitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYzY0ICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICItLXdpdGgtY3B1PWU2NTAwIiwgIiIsIGQpfSIKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICItLXdpdGgtY3B1PWU2NTAwIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlZDdiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDMuaW5jCkBAIC0wLDAgKzEsMTcgQEAKK0RFRkFVTFRUVU5FID89ICJzaDMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKKworVFVORVZBTElEW3NoM10gPSAiRW5hYmxlIFNIMyBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoMyIsICIgLW0zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAic2gzIHNoM2ViIgorVFVORV9GRUFUVVJFU190dW5lLXNoMyA9ICJzaDMiCitUVU5FX0FSQ0hfdHVuZS1zaDMgPSAic2gzIgorVFVORV9QS0dBUkNIX3R1bmUtc2gzID0gInNoMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDMgPSAic2ggc2gzIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2gzZWIgPSAic2gzIGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoM2ViID0gInNoM2ViIgorVFVORV9QS0dBUkNIX3R1bmUtc2gzZWIgPSAic2gzZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2gzZWIgPSAic2hlYiBzaDNlYiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlMjNiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zaDQuaW5jCkBAIC0wLDAgKzEsMzQgQEAKK0RFRkFVTFRUVU5FID89ICJzaDQiCisKKyMgUHVsbCBpbiBzaDQgZm9yIGNvbXBhdGliaWxpdHkuLi4KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKKworVFVORVZBTElEW3NoNF0gPSAiRW5hYmxlIFNINCBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoNCIsICIgLW00IiwgIiIsIGQpfSIKKworIyBOT1RFOiBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSB0byBzaDRhLCBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNGEuaW5jLgorIyBCdXQgaXQgaXMgbm90IGNvbXBhdGlibGUgZm9yIHNoNC4KKyMgVGhlIGJpbmFyeSBvcHRpbWl6ZWQgYnkgbTRhIGRvZXNuJ3Qgb3BlcmF0ZSBvbiBzaDQuIEl0IHdvcmtzIG9uIHNoNGEgb25seS4KK1RVTkVWQUxJRFtzaDRhXSA9ICJFbmFibGUgU0g0YSBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInNoNGEiLCAiIC1tNGEiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzaDQgc2g0ZWIgc2g0YSBzaDRhZWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0ID0gInNoNCIKK1RVTkVfQVJDSF90dW5lLXNoNCA9ICJzaDQiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDQgPSAic2g0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNCA9ICJzaCBzaDQiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDRlYiA9ICJzaDQgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2g0ZWIgPSAic2g0ZWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRlYiA9ICJzaDRlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRlYiA9ICJzaGViIHNoNGViIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0YSA9ICJzaDRhIgorVFVORV9BUkNIX3R1bmUtc2g0YSA9ICJzaDQiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDRhID0gInNoNGEiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0YSA9ICJzaCBzaDQgc2g0YSIKKworVFVORV9GRUFUVVJFU190dW5lLXNoNGFlYiA9ICJzaDRhIGJpZ2VuZGlhbiIKK1RVTkVfQVJDSF90dW5lLXNoNGFlYiA9ICJzaDRlYiIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGFlYiA9ICJzaDRhZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0YWViID0gInNoZWIgc2g0ZWIgc2g0YWViIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN0cm9uZ2FybTExMDAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN0cm9uZ2FybTExMDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmZiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYworCitUVU5FVkFMSURbc3Ryb25nYXJtXSA9ICJFbmFibGUgU3Ryb25nYXJtIDExMDAgc2VyaWVzIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInN0cm9uZ2FybSIsICIgLW10dW5lPXN0cm9uZ2FybTExMDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzdHJvbmdhcm0iCitBUk1QS0dBUkNIX3R1bmUtc3Ryb25nYXJtID0gInN0cm9uZ2FybSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1zdHJvbmdhcm0gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR9IHN0cm9uZ2FybSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zdHJvbmdhcm0gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR9IHN0cm9uZ2FybSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdXBlcnNwYXJjLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdXBlcnNwYXJjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFhMzYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jCkBAIC0wLDAgKzEsNCBAQAorVFVORV9BUkNIID0gInNwYXJjIgorCitUVU5FX0NDQVJHUyA9ICItbWNwdT1zdXBlcnNwYXJjIgorVFVORV9QS0dBUkNIID0gInN1cGVyc3BhcmMiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWNhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUteHNjYWxlLmluYwpAQCAtMCwwICsxLDE2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjV0ZSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKK1RVTkVWQUxJRFt4c2NhbGVdID0gIkVuYWJsZSBQWEEyNTUvUFhBMjZ4IFhzY2FsZSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ4c2NhbGUiLCAiIC1tdHVuZT14c2NhbGUiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJ4c2NhbGUiCitBUk1QS0dBUkNIX3R1bmUteHNjYWxlID0gInhzY2FsZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS14c2NhbGUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0geHNjYWxlIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXhzY2FsZSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSB4c2NhbGUgeHNjYWxldCB4c2NhbGVlIHhzY2FsZXRlIgorCitBVkFJTFRVTkVTICs9ICJ4c2NhbGUtYmUiCitBUk1QS0dBUkNIX3R1bmUteHNjYWxlLWJlID0gInhzY2FsZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS14c2NhbGUtYmUgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWJ9IHhzY2FsZSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteHNjYWxlLWJlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVifSB4c2NhbGViIHhzY2FsZXRiIHhzY2FsZWViIHhzY2FsZXRlYiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjOGE0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgQmFzZSBtYWNoaW5lIHNldHRpbmdzIGZvciBYODYgYXJjaGl0ZWN0dXJlIEJTUHMKKyMKKworIworIyBjb21tb24gc2V0dGluZ3MgZm9yIFg4NiBtYWNoaW5lcworIworTUFDSElORV9GRUFUVVJFUyArPSAic2NyZWVuIGtleWJvYXJkIHBjaSB1c2Job3N0IGV4dDIgZXh0MyB4ODYgXAorICAgICAgICAgICAgICAgICAgICAgYWNwaSBzZXJpYWwgdXNiZ2FkZ2V0IGFsc2EiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgKz0gImtlcm5lbC1tb2R1bGVzIgorCitJTUFHRV9GU1RZUEVTICs9ICJsaXZlIgorCitLRVJORUxfSU1BR0VUWVBFID89ICJiekltYWdlIgorCitTRVJJQUxfQ09OU09MRSA/PSAiMTE1MjAwIHR0eVMwIgorCisjCisjIGtlcm5lbC1yZWxhdGVkIHZhcmlhYmxlcworIworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID8/PSAibGludXgteW9jdG8iCitQUkVGRVJSRURfVkVSU0lPTl9saW51eC15b2N0byA/Pz0gIjMuMCUiCisKKyMKKyMgWFNFUlZFUiBzdWJjb21wb25lbnRzLCB1c2VkIHRvIGJ1aWxkIHRoZSBYU0VSVkVSIHZhcmlhYmxlCisjCitYU0VSVkVSX1g4Nl9CQVNFID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQtc3luYXB0aWNzIFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9FWFQgPSAiIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAneHNlcnZlci14b3JnLWV4dGVuc2lvbi1nbHgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgeHNlcnZlci14b3JnLW1vZHVsZS1saWJpbnQxMCBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfSTkxNSA9ICJ4Zjg2LXZpZGVvLWludGVsIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItaTkxNScsICcnLCBkKX0gXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X0k5NjUgPSAieGY4Ni12aWRlby1pbnRlbCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLWk5NjUnLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9WRVNBID0gInhmODYtdmlkZW8tdmVzYSIKKworWFNFUlZFUl9YODZfRkJERVYgPSAieGY4Ni12aWRlby1mYmRldiIKKworWFNFUlZFUl9YODZfTU9ERVNFVFRJTkcgPSAieGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L1JFQURNRSBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjZjNDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FCkBAIC0wLDAgKzEsMjQgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIHZlcnNpb24KKworTW9zdCBvZiB0aGUgaXRlbXMgZm9yIHRoZSBYODYgYXJjaGl0ZWN0dXJlcyBhcmUgZGVmaW5lZCBpbiB0aGUgc2luZ2xlCithcmNoLXg4NiBmaWxlLgorCitUaHJlZSBBQklzIGFyZSBkZWZpbmUsIG0zMiwgbXgzMiBhbmQgbTY0LgorCitUaGUgZm9sbG93aW5nIGlzIHRoZSBsaXN0IG9mIFg4NiBzcGVjaWZpYyB2YXJpYWJsZXM6CisKK1g4NkFSQ0gzMiAtIFRoaXMgaXMgdGhlIDMyLWJpdCBhcmNoaXRlY3R1cmUgR05VIGNhbm9uaWNhbCBhcmNoLCBUVU5FX0FSQ0guCisKK1g4NkFSQ0g2NCAtIFRoaXMgaXMgdGhlIDY0LWJpdCBhcmNoaXRlY3R1cmUgR05VIGNhbm9uaWNhbCBhcmNoLCBUVU5FX0FSQ0guCisKK1RoZSBUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorCitUVU5FX1BLR0FSQ0ggPSAke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fQorCitUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgZm9yIDMyLWJpdCB0YXJnZXRzIGlzIGhpc3RvcmljYWwgYW5kIGdlbmVyYWxseQorc2V0IHRvIHRvIG1hdGNoIHRoZSBjb3JlIGNvbXBhdGlibGUgcHJvY2Vzc29yIHR5cGUsIGkuZS4gaTM4Ni4KKworRm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzLCB0aGUgYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIGVuZCBpbiAnXzY0Jy4KKworSWYgdGhlIHgzMiBBQkkgaXMgdXNlZCwgdGhlbiB0aGUgXzY0IGlzIGZ1cnRoZXIgZXh0ZW5kZWQgd2l0aCBhICdfeDMyJy4KZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2L2FyY2gteDg2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOThiZGRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgWDg2IEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uIChJQTMyLCBYODZfNjQsIGFuZCBYMzIpCisjCisKK0RFRkFVTFRUVU5FID89ICJ4ODYiCitUQVJHRVRfRlBVID89ICIiCitYODZBUkNIMzIgPz0gImk1ODYiCitYODZBUkNINjQgPz0gIng4Nl82NCIKKworVFVORV9QS0dBUkNIID0gIiR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorCisjIEVMRjMyIEFCSQorVFVORVZBTElEW20zMl0gPSAiSUEzMiBFTEYzMiBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW20zMl0gPSAibTY0IG14MzIiCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIke1g4NkFSQ0gzMn0iLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICIgLW0zMiIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtMzIiLCAieDg2OiIsICIiICxkKX0iCisKKyMgeDMyIEFCSQorVFVORVZBTElEW214MzJdID0gIklBMzJlICh4ODZfNjQpIEVMRjMyIHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbXgzMl0gPSAibTY0IG0zMiIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIke1g4NkFSQ0g2NH0iLCAiIiAsZCl9IgorQUJJRVhURU5TSU9OIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIngzMiIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgLW14MzIiLCAiIiwgZCl9IgorVFVORV9MREFSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLW0gZWxmMzJfeDg2XzY0IiwgIiIsIGQpfSIKK1RVTkVfQVNBUkdTICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIi14MzIiLCAiIiwgZCl9IgorCisjIEVMRjY0IEFCSQorVFVORVZBTElEW202NF0gPSAiSUEzMmUgKHg4Nl82NCkgRUxGNjQgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1ttNjRdID0gIm0zMiBteDMyIgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiJHtYODZBUkNINjR9IiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJtNjQiLCAiIC1tNjQiLCAiIiwgZCl9IgorCisjIERlZmF1bHQgVHVuZSBjb25maWd1cmF0aW9ucworQVZBSUxUVU5FUyArPSAieDg2IgorVFVORV9GRUFUVVJFU190dW5lLXg4NiA9ICJtMzIiCitCQVNFX0xJQl90dW5lLXg4NiA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYgPSAieDg2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4NiA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Nn0iCisKK0FWQUlMVFVORVMgKz0gIng4Ni02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQgPSAibTY0IgorQkFTRV9MSUJfdHVuZS14ODYtNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQgPSAieDg2XzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NH0iCisKK0FWQUlMVFVORVMgKz0gIng4Ni02NC14MzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0LXgzMiA9ICJteDMyIgorQkFTRV9MSUJfdHVuZS14ODYtNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NC14MzIgPSAieDg2XzY0X3gzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODYtNjQteDMyID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2LTY0LXgzMn0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtLmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhZDAzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgpAQCAtMCwwICsxLDEyIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogYXJtX3ZlcnNhdGlsZV85MjZlanMKKyNAREVTQ1JJUFRJT046IGFybV92ZXJzYXRpbGVfOTI2ZWpzCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjZlanMuaW5jCisjcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlBTUEwIDExNTIwMDt0dHlBTUExIgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTlkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11YXJtNjQuY29uZgpAQCAtMCwwICsxLDEyIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogZ2VuZXJpYyBhcm12OCBtYWNoaW5lCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBnZW5lcmljIGFybXY4CisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjguaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAiIgorCitLRVJORUxfSU1BR0VUWVBFID0gIkltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMzg0MDA7dHR5QU1BMCAzODQwMDtodmMwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmODEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IG10aV9tYWx0YTMyX2JlIE1JUFMKKyNAREVTQ1JJUFRJT046IG10aV9tYWx0YTMyX2JlCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzNjQuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVtaXBzNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzNmMWZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBtdGktbWFsdGE2NC1iZSBNSVBTNjQKKyNAREVTQ1JJUFRJT046IG10aS1tYWx0YTY0LWJlCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eVMwIDExNTIwMDt0dHlTMSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11cHBjLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjYmJmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpAQCAtMCwwICsxLDExIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogcWVtdSBQUEMgRW11bGF0b3Igc2V0dXAKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhbiBQUEMgc3lzdGVtIHVuZGVyIHFlbXUgZW11bGF0aW9uCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LTY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmZDQzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpAQCAtMCwwICsxLDI5IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogY29tbW9uX3BjCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBjb21tb24geDg2CisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworREVGQVVMVFRVTkUgPz0gImNvcmUyLTY0IgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCisKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJ2ODZkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Y2VhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKQEAgLTAsMCArMSwyOCBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IGNvbW1vbl9wYworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGEgY29tbW9uIHg4NgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYworCitLRVJORUxfSU1BR0VUWVBFID0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitYU0VSVkVSID0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ21lc2EtZHJpdmVyLXN3cmFzdCcsICcnLCBkKX0gXAorICAgICAgICAgICB4Zjg2LWlucHV0LXZtbW91c2UgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWtleWJvYXJkIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tY2lycnVzIFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiBcCisgICAgICAgICAgIHhmODYtdmlkZW8tdm13YXJlIgorCitNQUNISU5FX0ZFQVRVUkVTICs9ICJ4ODYiCisKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTICs9ICJ2ODZkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21pZ3JhdGVfbG9jYWxjb3VudC5jb25mIGIvbWV0YS9jb25mL21pZ3JhdGVfbG9jYWxjb3VudC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODZlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAibWlncmF0ZV9sb2NhbGNvdW50IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL211bHRpbGliLmNvbmYgYi9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWE4ZTkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL211bHRpbGliLmNvbmYKQEAgLTAsMCArMSwyNiBAQAorCitiYXNlbGliID0gIiR7QGQuZ2V0VmFyKCdCQVNFX0xJQl90dW5lLScgKyAoZC5nZXRWYXIoJ0RFRkFVTFRUVU5FJywgVHJ1ZSkgb3IgJ0lOVkFMSUQnKSwgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0JBU0VMSUInLCBUcnVlKX0iCisKK01VTFRJTElCX1ZBUklBTlRTID0gIiR7QGV4dGVuZF92YXJpYW50cyhkLCdNVUxUSUxJQlMnLCdtdWx0aWxpYicpfSIKK01VTFRJTElCX1NBVkVfVkFSTkFNRSA9ICJERUZBVUxUVFVORSBUQVJHRVRfQVJDSCBUQVJHRVRfU1lTIgorCitNVUxUSUxJQlMgPz89ICJtdWx0aWxpYjpsaWIzMiIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0iCitTVEFHSU5HX0RJUl9UQVJHRVQgPSAiJHtTVEFHSU5HX0RJUn0vJHtNTFBSRUZJWH0ke01BQ0hJTkV9IgorUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfS9wa2dkYXRhIgorCitJTkhFUklUICs9ICJtdWx0aWxpYl9nbG9iYWwiCisKK0JCQ0xBU1NFWFRFTkRfYXBwZW5kID0gIiAke01VTFRJTElCU30iCisKK01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUyA/PSAibGliMzIgbGliNjQgbGlieDMyIgorCitPUEtHX0FSR1NfYXBwZW5kID0gIiAtLWZvcmNlLW1haW50YWluZXIgLS1mb3JjZS1vdmVyd3JpdGUiCisKKyMgV2hlbiBtdWx0aWxpYiBpcyBlbmFibGVkLCBhbGxhcmNoIHJlY2lwZXMgd2lsbCBiZSBpbnN0YWxsZWQgaW50byB0aGUgTUFDSElORQorIyBzeXNyb290LCBub3QgTUxQUkVGSVhNQUNISU5FLiAgVGhpcyBtZWFucyB0aGF0IGFueXRoaW5nIHVzaW5nIHBrZy1jb25maWcgdG8KKyMgZmluZCBhbiBhbGxhcmNoIHBrZ2NvbmZpZyBmaWxlIHdpbGwgZmFpbCBhcyB0aGUgUEtHX0NPTkZJR19QQVRIIG9ubHkgbG9va3MKKyMgaW5zaWRlIHRoZSBtdWx0aWxpYiBzeXNyb290LiAgRml4IHRoaXMgYnkgZXhwbGljaXRseSBhZGRpbmcgdGhlIE1BQ0hJTkUncworIyBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcGtnY29uZmlnIGxvY2F0aW9uIHRvIFBLR19DT05GSUdfUEFUSC4KK1BLR19DT05GSUdfUEFUSCAuPSAiOiR7U1RBR0lOR19ESVJ9LyR7TUFDSElORX0ke2RhdGFkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9wcmV4cG9ydC5jb25mIGIvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmM2FjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9wcmV4cG9ydC5jb25mCkBAIC0wLDAgKzEgQEAKK0lOSEVSSVQgKz0gInByZXhwb3J0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYgYi9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRlYTFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3ByaW1wb3J0LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAicHJpbXBvcnQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvc2FuaXR5LmNvbmYgYi9tZXRhL2NvbmYvc2FuaXR5LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxNTZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zYW5pdHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIFNhbml0eSBjaGVja3MgZm9yIGNvbW1vbiB1c2VyIG1pc2NvbmZpZ3VyYXRpb25zCisjCisjIFNlZSBzYW5pdHkuYmJjbGFzcworIworIyBFeHBlcnQgdXNlcnMgY2FuIGNvbmZpcm0gdGhlaXIgc2FuaXR5IHdpdGggInRvdWNoIGNvbmYvc2FuaXR5LmNvbmYiCitCQl9NSU5fVkVSU0lPTiA9ICIxLjI3LjEiCisKK1NBTklUWV9BQklGSUxFID0gIiR7VE1QRElSfS9hYmlfdmVyc2lvbiIKKworU0FOSVRZX1ZFUlNJT04gPz0gIjEiCitMT0NBTENPTkZfVkVSU0lPTiAgPz0gIjEiCitMQVlFUl9DT05GX1ZFUlNJT04gPz0gIjYiCitTSVRFX0NPTkZfVkVSU0lPTiAgPz0gIjEiCisKK0lOSEVSSVQgKz0gInNhbml0eSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvYmxhY2tsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvYmxhY2tsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGI4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QKQEAgLTAsMCArMSw2IEBACitsaWJuZW9uMjctZ251dGxzCitvcGVuamRrLTYtanJlLWhlYWRsZXNzCitvcGVuamRrLTYtanJlLWxpYgorb3Blbmpkay02LWpyZQorbGliZGJ1cy0xLTMKK2xpYm5lb24yNy1nbnV0bHMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NDdmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9maWx0ZXJzCkBAIC0wLDAgKzEsNyBAQAorL3Vzci9sb2NhbC9saWIvcHl0aG9uMi42CisvdXNyL2xpYi9weXRob24yLjYKKy91c3IvbGliL3B5bW9kdWxlcy9weXRob24yLjYKKy91c3IvbGliL3BlcmwvNS4xMAorIyB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkZWJpYW51dGlscyBwYWNrYWdlcywgYnV0IHdlIGRvbid0IHdhbnQgdG8gcHV0IHRoZSBlbnRpcmUKKyMgZGViaWFudXRpbHMgcGFja2FnZSBpbiB0aGUgd2hpdGVsaXN0LgorL3Vzci9iaW4vd2hpY2gKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L3doaXRlbGlzdCBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L3doaXRlbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGZlOTYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0CkBAIC0wLDAgKzEsMjMgQEAKK2Jhc2UtZmlsZXMKK2Rhc2gKK2xpYmFjbDEKK2xpYmF0dHIxCitsaWJiejItMS4wCitsaWJjNgorbGliYy1iaW4KK2xpYmdsaWIyLjAtMAorbGlibmN1cnNlczUKK2xpYnNlbGludXgxCitsaWJzcWxpdGUzLTAKK2xpYnNzbDAuOS44CittaW1lLXN1cHBvcnQKK3BlcmwtYmFzZQorcHl0aG9uMi42CitweXRob24yLjYtbWluaW1hbAorcHl0aG9uLWFwcG9ydAorcHl0aG9uLWdzdDAuMTAKK3B5dGhvbi1pbWFnaW5nCitweXRob24tbWluaW1hbAorcHl0aG9uLXN1cHBvcnQKK3B5dGhvbi16b3BlLmludGVyZmFjZQoremxpYjFnCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdCBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NmJjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2JsYWNrbGlzdApAQCAtMCwwICsxLDIgQEAKK3VkZXYKK2RrcGcKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvZmlsdGVycyBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjEwZmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCkBAIC0wLDAgKzEsMTAgQEAKKy90bXAKKy9ldGMvbG9jYWx0aW1lCisvZXRjL2xkLnNvLmNhY2hlCisvZXRjL2xkLnNvLmNvbmYKKy9ldGMvcGFzc3dkCisvZXRjL2dyb3VwCisvZXRjL25zc3dpdGNoLmNvbmYKKy9wcm9jCisvZGV2L251bGwKKy9kZXYvdHR5CmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdCBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZWMyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL3doaXRlbGlzdApAQCAtMCwwICsxLDE1IEBACitiYXNoCitiemlwMgorY2NhY2hlCitjb3JldXRpbHMKK2NwcAorZmlsZQorZmluZHV0aWxzCitnYXdrCitncmVwCitob3N0bmFtZQorbWFrZQorc2VkCit0YXIKK3V0aWwtbGludXgKK3psaWIxZwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24gYi9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGU0MmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3RvYXN0ZXJjb25mLmpzb24KQEAgLTAsMCArMSwxMDYgQEAKK3sKKyAgICAiY29uZmlnIjogeworICAgICAgICAiTUFDSElORSIgICAgICA6ICJxZW11eDg2IiwKKyAgICAgICAgIkRJU1RSTyIgICAgICAgOiAicG9reSIsCisgICAgICAgICJJTUFHRV9GU1RZUEVTIjogImV4dDMgamZmczIgdGFyLmJ6MiIsCisgICAgICAgICJJTUFHRV9JTlNUQUxMX2FwcGVuZCI6ICIiLAorICAgICAgICAiUEFDS0FHRV9DTEFTU0VTIjogInBhY2thZ2VfcnBtIiwKKyAgICAgICAgIlNES01BQ0hJTkUiICAgOiAieDg2XzY0IgorICAgIH0sCisgICAgImxheWVyc291cmNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiTG9jYWwgT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxvY2FsIiwKKyAgICAgICAgICAgICJhcGl1cmwiOiAiLi4vLi4vIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsiSEVBRCIsICJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdLAorICAgICAgICAgICAgImxheWVycyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIm9wZW5lbWJlZGRlZC1jb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgImxvY2FsX3BhdGgiOiAibWV0YSIsCisgICAgICAgICAgICAgICAgICAgICJ2Y3NfdXJsIjogInJlbW90ZTpvcmlnaW4iLAorICAgICAgICAgICAgICAgICAgICAiZGlycGF0aCI6ICJtZXRhIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJzb3VyY2V0eXBlIjogImxheWVyaW5kZXgiLAorICAgICAgICAgICAgImFwaXVybCI6ICJodHRwOi8vbGF5ZXJzLm9wZW5lbWJlZGRlZC5vcmcvbGF5ZXJpbmRleC9hcGkvIiwKKyAgICAgICAgICAgICJicmFuY2hlcyI6IFsibWFzdGVyIiwgImZpZG8iLCAiZGl6enkiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJJbXBvcnRlZCBsYXllcnMiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAiaW1wb3J0ZWQiLAorICAgICAgICAgICAgImFwaXVybCI6ICIiLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSIsICJIRUFEIl0KKworICAgICAgICB9CisgICAgXSwKKyAgICAiYml0YmFrZSIgOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIjEuMjYiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICIxLjI0IiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSEVBRCIsCisgICAgICAgICAgICAiZ2l0dXJsIjogImdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL2JpdGJha2UiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICJkaXJwYXRoIjogIiIKKyAgICAgICAgfQorICAgIF0sCisKKyAgICAiZGVmYXVsdHJlbGVhc2UiOiAibWFzdGVyIiwKKworICAgICJyZWxlYXNlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgbWFzdGVyIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIm1hc3RlciIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgdXNpbmcgdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nL1wiPk9wZW5FbWJlZGRlZCBtYXN0ZXI8L2E+IGJyYW5jaCwgd2hlcmUgYWN0aXZlIGRldmVsb3BtZW50IHRha2VzIHBsYWNlLiBUaGlzIGlzIG5vdCBhIHN0YWJsZSBicmFuY2gsIHNvIHlvdXIgYnVpbGRzIG1pZ2h0IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIEZpZG8iLAorICAgICAgICAgICAgImJpdGJha2UiOiAiZmlkbyIsCisgICAgICAgICAgICAiYnJhbmNoIjogImZpZG8iLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nLz9oPWZpZG9cIj5PcGVuRW1iZWRkZWQgXCJGaWRvXCI8L2E+IGJyYW5jaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGl6enkiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBEaXp6eSIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiYnJhbmNoIjogImRpenp5IiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB0aXAgb2YgdGhlIDxhIGhyZWY9XCJodHRwOi8vY2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlL2xvZy8/aD1kaXp6eVwiPk9wZW5FbWJlZGRlZCBcIkRpenp5XCI8L2E+IGJyYW5jaCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9jYWwiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIE9wZW5FbWJlZGRlZCIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiSEVBRCIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdmVyc2lvbiBvZiBPcGVuRW1iZWRkZWQgdGhhdCB5b3UgaGF2ZSBjbG9uZWQgb3IgZG93bmxvYWRlZCB0byB5b3VyIGNvbXB1dGVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FBTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FBTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDg0MjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMCkBAIC0wLDAgKzEsNTEgQEAKKworQXR0cmlidXRpb24gQXNzdXJhbmNlIExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMjAwMiBieSBBVVRIT1IKK1BST0ZFU1NJT05BTCBJREVOVElGSUNBVElPTiAqIFVSTAorIlBST01PVElPTkFMIFNMT0dBTiBGT1IgQVVUSE9SYFMgUFJPRkVTU0lPTkFMIFBSQUNUSUNFIgorCitBbGwgUmlnaHRzIFJlc2VydmVkCitBVFRSSUJVVElPTiBBU1NVUkFOQ0UgTElDRU5TRSAoYWRhcHRlZCBmcm9tIHRoZSBvcmlnaW5hbCBCU0QgbGljZW5zZSkKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgYXJlIG1ldC4KK1RoZXNlIGNvbmRpdGlvbnMgcmVxdWlyZSBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byA8QVVUSE9SPiAodGhlCisiQXV0aG9yIiksIHdobyBob3BlcyB0aGF0IGl0cyBwcm9tb3Rpb25hbCB2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZQordGhvdXNhbmRzIG9mIGRvbGxhcnMgaW4gb3RoZXJ3aXNlIGJpbGxhYmxlIHRpbWUgaW52ZXN0ZWQgaW4gd3JpdGluZwordGhpcyBhbmQgb3RoZXIgZnJlZWx5IGF2YWlsYWJsZSwgb3Blbi1zb3VyY2Ugc29mdHdhcmUuCisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSwgaW4gd2hvbGUgb3IgcGFydCBhbmQgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24gKHRoZSAiQ29kZSIpLCBtdXN0IHByb21pbmVudGx5IGRpc3BsYXkgdGhpcyBHUEctc2lnbmVkCit0ZXh0IGluIHZlcmlmaWFibGUgZm9ybS4KKzIuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ29kZSBpbiBiaW5hcnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5Cit0aGlzIEdQRy1zaWduZWQgdGV4dCBpbiBhbnkgZG9jdW1lbnRhdGlvbiBhbmQsIGVhY2ggdGltZSB0aGUgcmVzdWx0aW5nCitleGVjdXRhYmxlIHByb2dyYW0gb3IgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uIGlzIGxhdW5jaGVkLCBhCitwcm9taW5lbnQgZGlzcGxheSAoZS5nLiwgc3BsYXNoIHNjcmVlbiBvciBiYW5uZXIgdGV4dCkgb2YgdGhlIEF1dGhvcmBzCithdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiwgd2hpY2ggaW5jbHVkZXM6CisoYSkgTmFtZSAoIkFVVEhPUiIpLAorKGIpIFByb2Zlc3Npb25hbCBpZGVudGlmaWNhdGlvbiAoIlBST0ZFU1NJT05BTCBJREVOVElGSUNBVElPTiIpLCBhbmQKKyhjKSBVUkwgKCJVUkwiKS4KKzMuIE5laXRoZXIgdGhlIG5hbWUgbm9yIGFueSB0cmFkZW1hcmsgb2YgdGhlIEF1dGhvciBtYXkgYmUgdXNlZCB0bworZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKzQuIFVzZXJzIGFyZSBlbnRpcmVseSByZXNwb25zaWJsZSwgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgQXV0aG9yIGFuZAorYW55IG90aGVyIHBlcnNvbnMsIGZvciBjb21wbGlhbmNlIHdpdGggKDEpIHJlZ3VsYXRpb25zIHNldCBieSBvd25lcnMgb3IKK2FkbWluaXN0cmF0b3JzIG9mIGVtcGxveWVkIGVxdWlwbWVudCwgKDIpIGxpY2Vuc2luZyB0ZXJtcyBvZiBhbnkgb3RoZXIKK3NvZnR3YXJlLCBhbmQgKDMpIGxvY2FsIHJlZ3VsYXRpb25zIHJlZ2FyZGluZyB1c2UsIGluY2x1ZGluZyB0aG9zZQorcmVnYXJkaW5nIGltcG9ydCwgZXhwb3J0LCBhbmQgdXNlIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuCisKK1RISVMgRlJFRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorRUZGRUNUUyBPRiBVTkFVVEhPUklaRUQgT1IgTUFMSUNJT1VTIE5FVFdPUksgQUNDRVNTOworUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLUVuZCBvZiBMaWNlbnNlCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MTMxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMS4yCkBAIC0wLDAgKzEsMTIzIEBACisKKyAgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCisgIFZlcnNpb24gMS4yCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAKKyh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIAorZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSAKK09yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAxLjIKKworR3JhbnQgb2YgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIAorY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayAoIllvdSIpIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCAKK25vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgKDEpIHRvIHVzZSwgY29weSwgCittb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgCitPcmlnaW5hbCBXb3JrIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YsIGFuZCAoMikgdW5kZXIgcGF0ZW50IGNsYWltcyAKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCAKK1dvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3IgCitzYWxlIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YsIHN1YmplY3QgdG8gdGhlIAorZm9sbG93aW5nIGNvbmRpdGlvbnMuCisKK0F0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IAorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgCitub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSAKK25vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gCisiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSAKK1dvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSAKK2NhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworRXhjbHVzaW9ucyBmcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIAorbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciAKK3RyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIAorZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIAorb2YgdGhlIExpY2Vuc29yLgorCitXYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IAoraW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciB0aGF0IHRoZSBPcmlnaW5hbCAKK1dvcmsgaXMgZGlzdHJpYnV0ZWQgYnkgTGljZW5zb3IgdW5kZXIgYSB2YWxpZCBjdXJyZW50IGxpY2Vuc2UgZnJvbSB0aGUgCitjb3B5cmlnaHQgb3duZXIuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIAorc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIAorQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCAKK2xpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIAorRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIAorV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IAorb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IAordW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCAKK3doZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgCitMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIAoraW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCAKK29mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCAKK2xpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgCitvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyAKK2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIAoraW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IAorcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIAorbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIAorbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworTGljZW5zZSB0byBTb3VyY2UgQ29kZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgCit0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgCitkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IAorYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCAKK1dvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gCitMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIAorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IAorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciAKK2FzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSAKK3B1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IAorZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIAorYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgCitieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZyB0aGF0IGFueSBPU0kgCitDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkgbGljZW5zZSBjb250YWluaW5nIAordGhpcyAiTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uIiBjbGF1c2UgaW5mcmluZ2VzIGFueSBwYXRlbnQgCitjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLgorCitSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgCityZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyAKK25vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMiBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgCittb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiAKK3Blcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKworLS0gCitFTkQgT0YgTElDRU5TRS4gVGhlIGZvbGxvd2luZyBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSB0aGUgZXNzZW50aWFsIAorZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIChBRkwpIHZlcnNpb24gMS4wIGFuZCBvdGhlciAKK29wZW4gc291cmNlIGxpY2Vuc2VzOgorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIGlzIHNpbWlsYXIgdG8gdGhlIEJTRCwgTUlULCBVb0kvTkNTQSBhbmQgQXBhY2hlIAorbGljZW5zZXMgaW4gbWFueSByZXNwZWN0cyBidXQgaXQgaXMgaW50ZW5kZWQgdG8gc29sdmUgYSBmZXcgcHJvYmxlbXMgd2l0aCAKK3Rob3NlIGxpY2Vuc2VzLgorICAgIAorKiBUaGUgQUZMIGlzIHdyaXR0ZW4gc28gYXMgdG8gbWFrZSBpdCBjbGVhciB3aGF0IHNvZnR3YXJlIGlzIGJlaW5nIAorbGljZW5zZWQgKGJ5IHRoZSBpbmNsdXNpb24gb2YgYSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIAoraW4gdGhlIHNvZnR3YXJlKS4gVGhpcyB3YXksIHRoZSBsaWNlbnNlIGZ1bmN0aW9ucyBiZXR0ZXIgdGhhbiBhIHRlbXBsYXRlIAorbGljZW5zZS4gVGhlIEJTRCwgTUlUIGFuZCBVb0kvTkNTQSBsaWNlbnNlcyBhcHBseSB0byB1bmlkZW50aWZpZWQgc29mdHdhcmUuCisgICAgCisqIFRoZSBBRkwgY29udGFpbnMgYSBjb21wbGV0ZSBjb3B5cmlnaHQgZ3JhbnQgdG8gdGhlIHNvZnR3YXJlLiBUaGUgQlNEIAorYW5kIEFwYWNoZSBsaWNlbnNlcyBhcmUgdmFndWUgYW5kIGluY29tcGxldGUgaW4gdGhhdCByZXNwZWN0LgorICAgIAorKiBUaGUgQUZMIGNvbnRhaW5zIGEgY29tcGxldGUgcGF0ZW50IGdyYW50IHRvIHRoZSBzb2Z0d2FyZS4gVGhlIEJTRCwgTUlULCAKK1VvSS9OQ1NBIGFuZCBBcGFjaGUgbGljZW5zZXMgcmVseSBvbiBhbiBpbXBsaWVkIHBhdGVudCBsaWNlbnNlIGFuZCBjb250YWluIAorbm8gZXhwbGljaXQgcGF0ZW50IGdyYW50LgorICAgIAorKiBUaGUgQUZMIG1ha2VzIGl0IGNsZWFyIHRoYXQgbm8gdHJhZGVtYXJrIHJpZ2h0cyBhcmUgZ3JhbnRlZCB0byB0aGUgCitsaWNlbnNvcmBzIHRyYWRlbWFya3MuIFRoZSBBcGFjaGUgbGljZW5zZSBjb250YWlucyBzdWNoIGEgcHJvdmlzaW9uLCBidXQgdGhlIAorQlNELCBNSVQgYW5kIFVvSS9OQ1NBIGxpY2Vuc2VzIGRvIG5vdC4KKyAgICAKKyogVGhlIEFGTCBpbmNsdWRlcyB0aGUgd2FycmFudHkgYnkgdGhlIGxpY2Vuc29yIHRoYXQgaXQgZWl0aGVyIG93bnMgdGhlIAorY29weXJpZ2h0IG9yIHRoYXQgaXQgaXMgZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSB1bmRlciBhIGxpY2Vuc2UuIE5vbmUgb2YgCit0aGUgb3RoZXIgbGljZW5zZXMgY29udGFpbiB0aGF0IHdhcnJhbnR5LiBBbGwgb3RoZXIgd2FycmFudGllcyBhcmUgZGlzY2xhaW1lZCwgCithcyBpcyB0aGUgY2FzZSBmb3IgdGhlIG90aGVyIGxpY2Vuc2VzLgorCisqIFRoZSBBRkwgaXMgaXRzZWxmIGNvcHlyaWdodGVkICh3aXRoIHRoZSByaWdodCBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgCit3aXRob3V0IG1vZGlmaWNhdGlvbikuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBvd25lciBvZiB0aGUgY29weXJpZ2h0IHRvIHRoZSAKK2xpY2Vuc2Ugd2lsbCBjb250cm9sIGNoYW5nZXMuIFRoZSBBcGFjaGUgbGljZW5zZSBjb250YWlucyBhIGNvcHlyaWdodCBub3RpY2UsIAorYnV0IHRoZSBCU0QsIE1JVCBhbmQgVW9JL05DU0EgbGljZW5zZXMgZG8gbm90LiAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyN2EyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjAKQEAgLTAsMCArMSw0OCBAQAorCitUaGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlCisgdi4gMi4wCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOiAgIAorTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOiAKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7IAorCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsgCisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWM7IAorCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQgCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuICAgCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuICAKKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiAgTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiAgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4gICAgCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiAgTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuICBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuICAKKworNSkgVGhpcyBzZWN0aW9uIGludGVudGlvbmFsbHkgb21pdHRlZC4gIAorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiAgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLiAgCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuICBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiAgTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuICAKKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuICBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiAgU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LiAgCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSAgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiAgVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgICAKKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpKSBhZ2FpbnN0IExpY2Vuc29yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIG9yIChpaSkgYWdhaW5zdCBhbnkgZW50aXR5IHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIChidXQgZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKS4gICAgCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiAgQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiDCpCAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICAKKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiAgICAKKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiAgIAorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4gICAgCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgTGF3cmVuY2UgRS4gUm9zZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuIAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjg0ZTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMQpAQCAtMCwwICsxLDUwIEBACisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKK3YuIDIuMQorCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMQorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYzsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIFRoaXMgc2VjdGlvbiBpbnRlbnRpb25hbGx5IG9taXR0ZWQuCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuICYjMTk0OyYjMTY3OyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNmMyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMy4wCkBAIC0wLDAgKzEsMjcgQEAKKworQWNhZGVtaWMgRnJlZSBMaWNlbnNlICgmIzgyMjA7QUZMJiM4MjIxOykgdi4gMy4wCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgbm90aWNlIGFkamFjZW50IHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzLCBlaXRoZXIgYWxvbmUgb3IgYXMgcGFydCBvZiBhIGNvbGxlY3RpdmUgd29yazsKK2IpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB1bmRlciBhbnkgbGljZW5zZSBvZiB5b3VyIGNob2ljZSB0aGF0IGRvZXMgbm90IGNvbnRyYWRpY3QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBpbmNsdWRpbmcgTGljZW5zb3ImIzgyMTc7cyByZXNlcnZlZCByaWdodHMgYW5kIHJlbWVkaWVzLCBpbiB0aGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZTsKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsuCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3ImIzgyMTc7cyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLgorOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgJiM4MjIwO2ZhaXIgdXNlJiM4MjIxOyBvciAmIzgyMjA7ZmFpciBkZWFsaW5nJiM4MjIxOykuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgY29weXJpZ2h0IG9yIHBhdGVudCBsYXcgaW4gdGhlIGFwcHJvcHJpYXRlIGp1cmlzZGljdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEyKSBBdHRvcm5leXMmIzgyMTc7IEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiQWNhZGVtaWMgRnJlZSBMaWNlbnNlIiBvciAiQUZMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTEzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BR1BMLTMuMApAQCAtMCwwICsxLDY2MSBAQAorICAgICAgICAgICAgICAgICAgICBHTlUgQUZGRVJPIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAxOSBOb3ZlbWJlciAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgorc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZW5zdXJlCitjb29wZXJhdGlvbiB3aXRoIHRoZSBjb21tdW5pdHkgaW4gdGhlIGNhc2Ugb2YgbmV0d29yayBzZXJ2ZXIgc29mdHdhcmUuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCitvdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8KK3NoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQorc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIG91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBwcm90ZWN0IHlvdXIgcmlnaHRzCit3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyCit5b3UgdGhpcyBMaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUKK2FuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEEgc2Vjb25kYXJ5IGJlbmVmaXQgb2YgZGVmZW5kaW5nIGFsbCB1c2VycycgZnJlZWRvbSBpcyB0aGF0CitpbXByb3ZlbWVudHMgbWFkZSBpbiBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgdGhlIHByb2dyYW0sIGlmIHRoZXkKK3JlY2VpdmUgd2lkZXNwcmVhZCB1c2UsIGJlY29tZSBhdmFpbGFibGUgZm9yIG90aGVyIGRldmVsb3BlcnMgdG8KK2luY29ycG9yYXRlLiAgTWFueSBkZXZlbG9wZXJzIG9mIGZyZWUgc29mdHdhcmUgYXJlIGhlYXJ0ZW5lZCBhbmQKK2VuY291cmFnZWQgYnkgdGhlIHJlc3VsdGluZyBjb29wZXJhdGlvbi4gIEhvd2V2ZXIsIGluIHRoZSBjYXNlIG9mCitzb2Z0d2FyZSB1c2VkIG9uIG5ldHdvcmsgc2VydmVycywgdGhpcyByZXN1bHQgbWF5IGZhaWwgdG8gY29tZSBhYm91dC4KK1RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1ha2luZyBhIG1vZGlmaWVkIHZlcnNpb24gYW5kCitsZXR0aW5nIHRoZSBwdWJsaWMgYWNjZXNzIGl0IG9uIGEgc2VydmVyIHdpdGhvdXQgZXZlciByZWxlYXNpbmcgaXRzCitzb3VyY2UgY29kZSB0byB0aGUgcHVibGljLgorCisgIFRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvCitlbnN1cmUgdGhhdCwgaW4gc3VjaCBjYXNlcywgdGhlIG1vZGlmaWVkIHNvdXJjZSBjb2RlIGJlY29tZXMgYXZhaWxhYmxlCit0byB0aGUgY29tbXVuaXR5LiAgSXQgcmVxdWlyZXMgdGhlIG9wZXJhdG9yIG9mIGEgbmV0d29yayBzZXJ2ZXIgdG8KK3Byb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uIHJ1bm5pbmcgdGhlcmUgdG8gdGhlCit1c2VycyBvZiB0aGF0IHNlcnZlci4gIFRoZXJlZm9yZSwgcHVibGljIHVzZSBvZiBhIG1vZGlmaWVkIHZlcnNpb24sIG9uCithIHB1YmxpY2x5IGFjY2Vzc2libGUgc2VydmVyLCBnaXZlcyB0aGUgcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlCitjb2RlIG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uLgorCisgIEFuIG9sZGVyIGxpY2Vuc2UsIGNhbGxlZCB0aGUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCitwdWJsaXNoZWQgYnkgQWZmZXJvLCB3YXMgZGVzaWduZWQgdG8gYWNjb21wbGlzaCBzaW1pbGFyIGdvYWxzLiAgVGhpcyBpcworYSBkaWZmZXJlbnQgbGljZW5zZSwgbm90IGEgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCwgYnV0IEFmZmVybyBoYXMKK3JlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFmZmVybyBHUEwgd2hpY2ggcGVybWl0cyByZWxpY2Vuc2luZyB1bmRlcgordGhpcyBsaWNlbnNlLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgMC4gRGVmaW5pdGlvbnMuCisKKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCit3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCisgICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kCisicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKKyAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCitleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUKK2VhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLgorCisgIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbS4KKworICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0CitwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCitpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKK2NvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCitkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQorcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCisgIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKK3BhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAorYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KKworICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKK3RvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KKworICAxLiBTb3VyY2UgQ29kZS4KKworICBUaGUgInNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yaworZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQorZm9ybSBvZiBhIHdvcmsuCisKKyAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKK3N0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YKK2ludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0CitpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworICBUaGUgIlN5c3RlbSBMaWJyYXJpZXMiIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcgordGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKK3BhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IKK0NvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdAorTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCitpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiAgQQorIk1ham9yIENvbXBvbmVudCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50Cisoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCisoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bworcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCisKKyAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAordGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQord29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bworY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzCitTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlCitwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKK3doaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQoraW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKK3RoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQorbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsCitzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQorc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMKK2NhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZworU291cmNlLgorCisgIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdAorc2FtZSB3b3JrLgorCisgIDIuIEJhc2ljIFBlcm1pc3Npb25zLgorCisgIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCitjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZAorY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZAorcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEKK2NvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cworY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIKK3JpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgorCisgIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QKK2NvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zCitpbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCitvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3UKK3dpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCitub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzCitmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uCithbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKK3lvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCisKKyAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKK3RoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAorbWFrZXMgaXQgdW5uZWNlc3NhcnkuCisKKyAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKK21lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQorMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCitzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCittZWFzdXJlcy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCitjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24KK2lzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzCit1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YKK3RlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCisKKyAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KKworICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UKK3JlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkKK25vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCityZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCithbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgorCisgIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKKyAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bworcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKK3Rlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCisgICAgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorCisgICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKKyAgICByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24KKyAgICA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvCisgICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KKworICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzCisgICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCisgICAgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcKKyAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLAorICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCisgICAgcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdAorICAgIGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisKKyAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQorICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQorICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCisgICAgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisKKyAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAord29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywKK2FuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sCitpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCisiYWdncmVnYXRlIiBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKK3VzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKK2JleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yaworaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIKK3BhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCisKKyAgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKK29mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQorbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisgICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhCisgICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKKyAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QKKyAgICBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhCisgICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCisgICAgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwKKyAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vCisgICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCisgICAgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisKKyAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQorICAgIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzCisgICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKKyAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQKKyAgICB3aXRoIHN1YnNlY3Rpb24gNmIuCisKKyAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAorICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCisgICAgZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8KKyAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKKyAgICBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkKKyAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4KKyAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMKKyAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorCisgICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZAorICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCisgICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubworICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLgorCisgIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZAorZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUKK2luY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworICBBICJVc2VyIFByb2R1Y3QiIGlzIGVpdGhlciAoMSkgYSAiY29uc3VtZXIgcHJvZHVjdCIsIHdoaWNoIG1lYW5zIGFueQordGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKK29yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24KK2ludG8gYSBkd2VsbGluZy4gIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwKK2RvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgorcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgIm5vcm1hbGx5IHVzZWQiIHJlZmVycyB0byBhCit0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMKK29mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCithY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QKK2lzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsCitjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAordGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKKyAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLAorcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsCithbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tCithIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKK3N1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0Citjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQorbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKKyAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKK3NwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCitwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKK1VzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKK2ZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAorYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CitpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAorbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCityZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMKK2ZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCit0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gIEFjY2VzcyB0byBhCituZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZAorYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCitwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgorCisgIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisKKyAgNy4gQWRkaXRpb25hbCBUZXJtcy4KKworICAiQWRkaXRpb25hbCBwZXJtaXNzaW9ucyIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgorQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAorYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAordGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKK2FwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKK3VuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCityZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKK2l0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KK3JlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQorYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLAorZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQorYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZgordGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKKyAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKKyAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgorCisgICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yCisgICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbAorICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisKKyAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCisgICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KKyAgICByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisKKyAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCisgICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisKKyAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCisgICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCisKKyAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CisgICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKKyAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yCisgICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgorICAgIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgorcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQorcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgorcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucworYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCitMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKK29mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCitub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91CittdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUKK2FkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZword2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsKK3RoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKworICA4LiBUZXJtaW5hdGlvbi4KKworICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKK3Byb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgordGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZAorcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgorCisgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCitsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKK3Byb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQKK2ZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKK2hvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zCitwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQorbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KKworICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KKworICBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3IKK3J1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK29jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCit0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuICBIb3dldmVyLAorbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbworbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhCitjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgorCisgIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4KKworICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CityZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKK2ZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisgIEFuICJlbnRpdHkgdHJhbnNhY3Rpb24iIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4KK29yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4KK29yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkCit3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdAordHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCitsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQKK2dpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKK3RoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KKworICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKK3JpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5Citub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YKK3JpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CithbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3IKK3NhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KKworICAxMS4gUGF0ZW50cy4KKworICBBICJjb250cmlidXRvciIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzCitMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQord29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCisKKyAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zCitvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQKK2J5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKK2J1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCitjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvcgorcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50CitwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKK3RoaXMgTGljZW5zZS4KKworICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvCittYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCisKKyAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhICJwYXRlbnQgbGljZW5zZSIgaXMgYW55IGV4cHJlc3MKK2FncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAorKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bworc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvICJncmFudCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEKK3BhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCitwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCisKKyAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKK2FuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lCit0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhCitwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAordGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbworYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQorcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKK2NvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQKK2xpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQorYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCitjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrCitpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQKK2NvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCisKKyAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcgorYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQorY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzCityZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkKK29yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKK3lvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkCit3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKworICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KK3RoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzCitjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKK3NwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQKK3dvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzCitpbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50Cit0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZwordGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlCitwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKK3BhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2NvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5Citmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdAorY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LAorb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKworICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nCithbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQorb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgorCisgIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgorCisgIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCitjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5Citub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKK3RvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQordGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzCitMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisKKyAgMTMuIFJlbW90ZSBOZXR3b3JrIEludGVyYWN0aW9uOyBVc2Ugd2l0aCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBpZiB5b3UgbW9kaWZ5IHRoZQorUHJvZ3JhbSwgeW91ciBtb2RpZmllZCB2ZXJzaW9uIG11c3QgcHJvbWluZW50bHkgb2ZmZXIgYWxsIHVzZXJzCitpbnRlcmFjdGluZyB3aXRoIGl0IHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrIChpZiB5b3VyIHZlcnNpb24KK3N1cHBvcnRzIHN1Y2ggaW50ZXJhY3Rpb24pIGFuIG9wcG9ydHVuaXR5IHRvIHJlY2VpdmUgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZSBvZiB5b3VyIHZlcnNpb24gYnkgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2Zyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UsIHRocm91Z2ggc29tZSBzdGFuZGFyZCBvciBjdXN0b21hcnkKK21lYW5zIG9mIGZhY2lsaXRhdGluZyBjb3B5aW5nIG9mIHNvZnR3YXJlLiAgVGhpcyBDb3JyZXNwb25kaW5nIFNvdXJjZQorc2hhbGwgaW5jbHVkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFueSB3b3JrIGNvdmVyZWQgYnkgdmVyc2lvbiAzCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhhdCBpcyBpbmNvcnBvcmF0ZWQgcHVyc3VhbnQgdG8gdGhlCitmb2xsb3dpbmcgcGFyYWdyYXBoLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHdvcmsgd2l0aCB3aGljaCBpdCBpcyBjb21iaW5lZCB3aWxsIHJlbWFpbiBnb3Zlcm5lZCBieSB2ZXJzaW9uCiszIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucword2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlCitvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZAordmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlCitHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUworVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKK0RBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECitQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKK0VWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCisgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAorYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCityZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKK2FuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKK1Byb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKK2NvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgeW91ciBzb2Z0d2FyZSBjYW4gaW50ZXJhY3Qgd2l0aCB1c2VycyByZW1vdGVseSB0aHJvdWdoIGEgY29tcHV0ZXIKK25ldHdvcmssIHlvdSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhhdCBpdCBwcm92aWRlcyBhIHdheSBmb3IgdXNlcnMgdG8KK2dldCBpdHMgc291cmNlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgcHJvZ3JhbSBpcyBhIHdlYiBhcHBsaWNhdGlvbiwgaXRzCitpbnRlcmZhY2UgY291bGQgZGlzcGxheSBhICJTb3VyY2UiIGxpbmsgdGhhdCBsZWFkcyB1c2VycyB0byBhbiBhcmNoaXZlCitvZiB0aGUgY29kZS4gIFRoZXJlIGFyZSBtYW55IHdheXMgeW91IGNvdWxkIG9mZmVyIHNvdXJjZSwgYW5kIGRpZmZlcmVudAorc29sdXRpb25zIHdpbGwgYmUgYmV0dGVyIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXM7IHNlZSBzZWN0aW9uIDEzIGZvciB0aGUKK3NwZWNpZmljIHJlcXVpcmVtZW50cy4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEFHUEwsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjAyYThjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQU5UTFItUEQKQEAgLTAsMCArMSwzMiBAQAorCitBTlRMUiBTT0ZUV0FSRSBSSUdIVFMKKworQU5UTFIgMTk4OS0yMDA2IERldmVsb3BlZCBieSBUZXJlbmNlIFBhcnIKK1BhcnRpYWxseSBzdXBwb3J0ZWQgYnkgVW5pdmVyc2l0eSBvZiBTYW4gRnJhbmNpc2NvICZhbXA7IGpHdXJ1LmNvbQorCitXZSByZXNlcnZlIG5vIGxlZ2FsIHJpZ2h0cyB0byB0aGUgQU5UTFItLWl0IGlzIGZ1bGx5IGluIHRoZQorcHVibGljIGRvbWFpbi4gQW4gaW5kaXZpZHVhbCBvciBjb21wYW55IG1heSBkbyB3aGF0ZXZlcgordGhleSB3aXNoIHdpdGggc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgd2l0aCBBTlRMUiBvciB0aGUKK2NvZGUgZ2VuZXJhdGVkIGJ5IEFOVExSLCBpbmNsdWRpbmcgdGhlIGluY29ycG9yYXRpb24gb2YKK0FOVExSLCBvciBpdHMgb3V0cHV0LCBpbnRvIGNvbW1lcmljYWwgc29mdHdhcmUuCisKK1dlIGVuY291cmFnZSB1c2VycyB0byBkZXZlbG9wIHNvZnR3YXJlIHdpdGggQU5UTFIuIEhvd2V2ZXIsCit3ZSBkbyBhc2sgdGhhdCBjcmVkaXQgaXMgZ2l2ZW4gdG8gdXMgZm9yIGRldmVsb3BpbmcKK0FOVExSLiBCeSAiY3JlZGl0Iiwgd2UgbWVhbiB0aGF0IGlmIHlvdSB1c2UgQU5UTFIgb3IKK2luY29ycG9yYXRlIGFueSBzb3VyY2UgY29kZSBpbnRvIG9uZSBvZiB5b3VyIHByb2dyYW1zCisoY29tbWVyY2lhbCBwcm9kdWN0LCByZXNlYXJjaCBwcm9qZWN0LCBvciBvdGhlcndpc2UpIHRoYXQKK3lvdSBhY2tub3dsZWRnZSB0aGlzIGZhY3Qgc29tZXdoZXJlIGluIHRoZSBkb2N1bWVudGF0aW9uLAorcmVzZWFyY2ggcmVwb3J0LCBldGMuLi4gSWYgeW91IGxpa2UgQU5UTFIgYW5kIGhhdmUKK2RldmVsb3BlZCBhIG5pY2UgdG9vbCB3aXRoIHRoZSBvdXRwdXQsIHBsZWFzZSBtZW50aW9uIHRoYXQKK3lvdSBkZXZlbG9wZWQgaXQgdXNpbmcgQU5UTFIuIEluIGFkZGl0aW9uLCB3ZSBhc2sgdGhhdCB0aGUKK2hlYWRlcnMgcmVtYWluIGludGFjdCBpbiBvdXIgc291cmNlIGNvZGUuIEFzIGxvbmcgYXMgdGhlc2UKK2d1aWRlbGluZXMgYXJlIGtlcHQsIHdlIGV4cGVjdCB0byBjb250aW51ZSBlbmhhbmNpbmcgdGhpcworc3lzdGVtIGFuZCBleHBlY3QgdG8gbWFrZSBvdGhlciB0b29scyBhdmFpbGFibGUgYXMgdGhleSBhcmUKK2NvbXBsZXRlZC4KKworVGhlIHByaW1hcnkgQU5UTFIgZ3V5OgorCitUZXJlbmNlIFBhcnIKK3BhcnJ0QGNzLnVzZmNhLmVkdQorcGFycnRAYW50bHIub3JnCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MDViMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUEwtMS4wCkBAIC0wLDAgKzEsMjE4IEBACisKK0FEQVBUSVZFIFBVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMAorVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQURBUFRJVkUgUFVCTElDIExJQ0VOU0UgKCJMSUNFTlNFIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFdPUksgQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UgQU5EIElUUyBURVJNUywgV0hFVEhFUiBPUiBOT1QgU1VDSCBSRUNJUElFTlQgUkVBRFMgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gIkxJQ0VOU0VEIFdPUksiIEFORCAiUkVDSVBJRU5UIiBBUkUgREVGSU5FRCBCRUxPVy4KKworSU1QT1JUQU5UIE5PVEU6IFRoaXMgTGljZW5zZSBpcyAiYWRhcHRpdmUiLCBhbmQgdGhlIGdlbmVyaWMgdmVyc2lvbiBvciBhbm90aGVyIHZlcnNpb24gb2YgYW4gQWRhcHRpdmUgUHVibGljIExpY2Vuc2Ugc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbiB0byBkZXRlcm1pbmUgeW91ciByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZS4gWW91IG11c3QgcmVhZCB0aGUgc3BlY2lmaWMgQWRhcHRpdmUgUHVibGljIExpY2Vuc2UgdGhhdCB5b3UgcmVjZWl2ZSB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrLCBhcyBjZXJ0YWluIHRlcm1zIGFyZSBkZWZpbmVkIGF0IHRoZSBvdXRzZXQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKK1NlZSBTZWN0aW9uIDIuMiBiZWxvdywgRXhoaWJpdCBBIGF0dGFjaGVkLCBhbmQgYW55IFN1cHBmaWxlLnR4dCBhY2NvbXBhbnlpbmcgdGhpcyBMaWNlbnNlIHRvIGRldGVybWluZSB0aGUgc3BlY2lmaWMgYWRhcHRpdmUgZmVhdHVyZXMgYXBwbGljYWJsZSB0byB0aGlzIExpY2Vuc2UuIEZvciBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIChhKSBmb3Igc2VsZWN0ZWQgY2hvaWNlIG9mIGxhdyBhbmQganVyaXNkaWN0aW9uIHNlZSBQYXJ0IDMgb2YgRXhoaWJpdCBBOyAoYikgZm9yIHRoZSBzZWxlY3RlZCBkZWZpbml0aW9uIG9mIFRoaXJkIFBhcnR5IHNlZSBQYXJ0IDQgb2YgRXhoaWJpdCBBOyBhbmQgKGMpIGZvciBzZWxlY3RlZCBwYXRlbnQgbGljZW5zaW5nIHRlcm1zIChpZiBhbnkpIHNlZSBTZWN0aW9uIDIuMiBiZWxvdyBhbmQgUGFydCA2IG9mIEV4aGliaXQgQS4KKworMS4gREVGSU5JVElPTlMuCisKKzEuMS4gIkNPTlRSSUJVVElPTiIgbWVhbnM6CisKKyhhKSBJbiB0aGUgY2FzZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGFuZAorCisoYikgSW4gdGhlIGNhc2Ugb2YgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCB0aGUgU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gYW5kIGRpc3RyaWJ1dGVkIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvci4KKworMS4yLiAiREVTSUdOQVRFRCBXRUIgU0lURSIgbWVhbnMgdGhlIHdlYiBzaXRlIGhhdmluZyB0aGUgVVJMIGlkZW50aWZpZWQgaW4gUGFydCAxIG9mIEV4aGliaXQgQSwgd2hpY2ggVVJMIG1heSBiZSBjaGFuZ2VkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGJ5IHBvc3Rpbmcgb24gdGhlIGN1cnJlbnQgRGVzaWduYXRlZCBXZWIgU2l0ZSB0aGUgbmV3IFVSTCBmb3IgYXQgbGVhc3Qgc2l4dHkgKDYwKSBkYXlzLgorCisxLjMuICJESVNUUklCVVRPUiIgbWVhbnMgYW55IFBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YgdG8gYXQgbGVhc3Qgb25lIFRoaXJkIFBhcnR5LgorCisxLjQuICJFTEVDVFJPTklDIERJU1RSSUJVVElPTiBNRUNIQU5JU00iIG1lYW5zIGFueSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkVYRUNVVEFCTEUiIG1lYW5zIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gIkdPVkVSTklORyBKVVJJU0RJQ1RJT04iIG1lYW5zIHRoZSBzdGF0ZSwgcHJvdmluY2Ugb3Igb3RoZXIgbGVnYWwganVyaXNkaWN0aW9uIGlkZW50aWZpZWQgaW4gUGFydCAzIG9mIEV4aGliaXQgQS4KKworMS43LiAiSU5ERVBFTkRFTlQgTU9EVUxFIiBtZWFucyBhIHNlcGFyYXRlIG1vZHVsZSBvZiBzb2Z0d2FyZSBhbmQvb3IgZGF0YSB0aGF0IGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiBvciBjb3BpZWQgZnJvbSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiBJbiBhZGRpdGlvbiwgYSBtb2R1bGUgZG9lcyBub3QgcXVhbGlmeSBhcyBhbiBJbmRlcGVuZGVudCBNb2R1bGUgYnV0IGluc3RlYWQgZm9ybXMgcGFydCBvZiB0aGUgTGljZW5zZWQgV29yayBpZiB0aGUgbW9kdWxlOiAoYSkgaXMgZW1iZWRkZWQgaW4gdGhlIExpY2Vuc2VkIFdvcms7IChiKSBpcyBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhlIExpY2Vuc2VkIFdvcmsgb3RoZXIgdGhhbiBieSBhIGZ1bmN0aW9uIGNhbGwgb3IgYSBjbGFzcyByZWZlcmVuY2U7IG9yIChjKSBtdXN0IGJlIGluY2x1ZGVkIG9yIGNvbnRhaW5lZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aGluIGEgZmlsZSBkaXJlY3Rvcnkgb3Igc3ViZGlyZWN0b3J5IGFjdHVhbGx5IGNvbnRhaW5pbmcgZmlsZXMgbWFraW5nIHVwIHRoZSBMaWNlbnNlZCBXb3JrLgorCisxLjguICJJTklUSUFMIENPTlRSSUJVVE9SIiBtZWFucyB0aGUgUGVyc29uIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgcmVxdWlyZWQgYnkgUGFydCAxIG9mIEV4aGliaXQgQS4KKworMS45LiAiSU5JVElBTCBXT1JLIiBtZWFucyB0aGUgaW5pdGlhbCBTb3VyY2UgQ29kZSwgb2JqZWN0IGNvZGUgKGlmIGFueSkgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjb21wdXRlciBwcm9ncmFtIGlkZW50aWZpZWQgaW4gUGFydCAyIG9mIEV4aGliaXQgQSwgYXMgc3VjaCBTb3VyY2UgQ29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisxLjEwLiAiTEFSR0VSIFdPUksiIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIHRoZSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJMSUNFTlNFRCBXT1JLIiBtZWFucyB0aGUgSW5pdGlhbCBXb3JrIGFuZC9vciBhbnkgU3Vic2VxdWVudCBXb3JrLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuMTIuICJMSUNFTlNFIE5PVElDRSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNSBvZiBFeGhpYml0IEEuCisKKzEuMTMuICJNT0RJRklDQVRJT04iIG9yICJNT0RJRklDQVRJT05TIiBtZWFucyBhbnkgY2hhbmdlIHRvIGFuZC9vciBhZGRpdGlvbiB0byB0aGUgTGljZW5zZWQgV29yay4KKworMS4xNC4gIlBFUlNPTiIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBvdGhlciBsZWdhbCBlbnRpdHksIGluY2x1ZGluZyBhIGNvcnBvcmF0aW9uLCBwYXJ0bmVyc2hpcCBvciBvdGhlciBib2R5LgorCisxLjE1LiAiUkVDSVBJRU5UIiBtZWFucyBhbnkgUGVyc29uIHdobyByZWNlaXZlcyBvciBvYnRhaW5zIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoaXMgTGljZW5zZSAoYnkgd2F5IG9mIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IFN1YnNlcXVlbnQgQ29udHJpYnV0b3Igb3IgRGlzdHJpYnV0b3IpLgorCisxLjE2LiAiU09VUkNFIENPREUiIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYSBjb21wdXRlciBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBhbmQgY29tcG9uZW50cyBvZiB0aGUgY29tcHV0ZXIgcHJvZ3JhbSwgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgYW5kIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZS4KKworMS4xNy4gIlNVQlNFUVVFTlQgQ09OVFJJQlVUT1IiIG1lYW5zIGFueSBQZXJzb24gdGhhdCBtYWtlcyBvciBjb250cmlidXRlcyB0byB0aGUgbWFraW5nIG9mIGFueSBTdWJzZXF1ZW50IFdvcmsgYW5kIHRoYXQgZGlzdHJpYnV0ZXMgdGhhdCBTdWJzZXF1ZW50IFdvcmsgdG8gYXQgbGVhc3Qgb25lIFRoaXJkIFBhcnR5LgorCisxLjE4LiAiU1VCU0VRVUVOVCBXT1JLIiBtZWFucyBhIHdvcmsgdGhhdCBoYXMgcmVzdWx0ZWQgb3IgYXJpc2VzIGZyb20gY2hhbmdlcyB0byBhbmQvb3IgYWRkaXRpb25zIHRvOgorCisoYSkgdGhlIEluaXRpYWwgV29yazsKKworKGIpIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcms7IG9yCisKKyhjKSB0byBhbnkgY29tYmluYXRpb24gb2YgdGhlIEluaXRpYWwgV29yayBhbmQgYW55IHN1Y2ggb3RoZXIgU3Vic2VxdWVudCBXb3JrOworCit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBvcmlnaW5hdGUgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IuIEEgU3Vic2VxdWVudCBXb3JrIHdpbGwgIm9yaWdpbmF0ZSIgZnJvbSBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaWYgdGhlIFN1YnNlcXVlbnQgV29yayB3YXMgYSByZXN1bHQgb2YgZWZmb3J0cyBieSBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgYmVoYWxmLCBzdWNoIGFzLCBhIGNvbnRyYWN0b3Igb3Igb3RoZXIgZW50aXR5IHRoYXQgaXMgZW5nYWdlZCBieSBvciB1bmRlciB0aGUgZGlyZWN0aW9uIG9mIHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBhIFN1YnNlcXVlbnQgV29yayBleHByZXNzbHkgZXhjbHVkZXMgYW5kIHNoYWxsIG5vdCBjYXB0dXJlIHdpdGhpbiBpdHMgbWVhbmluZyBhbnkgSW5kZXBlbmRlbnQgTW9kdWxlLgorCisxLjE5LiAiU1VQUExFTUVOVCBGSUxFIiBtZWFucyBhIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBoYXZpbmcgYSBmaWxlIG5hbWUgInN1cHBmaWxlLnR4dCIuCisKKzEuMjAuICJUSElSRCBQQVJUWSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNCBvZiBFeGhpYml0IEEuCisKKzIuIExJQ0VOU0UuCisKKzIuMS4gQ09QWVJJR0hUIExJQ0VOU0UgRlJPTSBJTklUSUFMIEFORCBTVUJTRVFVRU5UIENPTlRSSUJVVE9SUy4KKworKGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBlYWNoIFJlY2lwaWVudCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBjb3B5cmlnaHQgbGljZW5zZSB0bzoKKworKGkpIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBJbml0aWFsIFdvcms7IGFuZAorCisoaWkpIHJlcHJvZHVjZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgYW55IGRlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCitpbiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtLCBlaXRoZXIgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisKKyhiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGVhY2ggUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOgorCisoaSkgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIFN1YnNlcXVlbnQgV29yayBvZiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3I7IGFuZAorCisoaWkpIHJlcHJvZHVjZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2UgYW55IGRlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCitpbiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtLCBlaXRoZXIgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisyLjIuIFBBVEVOVCBMSUNFTlNFIEZST00gSU5JVElBTCBBTkQgU1VCU0VRVUVOVCBDT05UUklCVVRPUlMuCisKKyhhKSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgaW5jbHVkZSBvciBncmFudCBhbnkgcGF0ZW50IGxpY2Vuc2Ugd2hhdHNvZXZlciBmcm9tIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBhbnkgRGlzdHJpYnV0b3IgdW5sZXNzLCBhdCB0aGUgdGltZSB0aGUgSW5pdGlhbCBXb3JrIGlzIGZpcnN0IGRpc3RyaWJ1dGVkIG9yIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGFzIHNlbGVjdGVkIHB1cnN1YW50IHRvIFBhcnQgNiBvZiBFeGhpYml0IEEgdGhlIHBhdGVudCB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLiBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZW4gdGhlIEluaXRpYWwgV29yayBhbmQgYW55IG90aGVyIFN1YnNlcXVlbnQgV29yayBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSB3aXRob3V0IGFueSBwYXRlbnQgbGljZW5zZSAodGhlICJQQVRFTlRTLUVYQ0xVREVEIExJQ0VOU0UiKS4KKworKGIpIEhvd2V2ZXIsIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBzdWJzZXF1ZW50bHkgZGlzdHJpYnV0ZSBvciBtYWtlIGF2YWlsYWJsZSAoYXMgdGhlIGNhc2UgbWF5IGJlKSBmdXR1cmUgY29waWVzIG9mOiAoMSkgdGhlIEluaXRpYWwgV29yazsgb3IgKDIpIGFueSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoaWNoIGluY2x1ZGVzIHRoZSBJbml0aWFsIFdvcmsgKG9yIGFueSBwb3J0aW9uIHRoZXJlb2YpIGFuZC9vciBhbnkgTW9kaWZpY2F0aW9uIG1hZGUgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IGF2YWlsYWJsZSB1bmRlciBhIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgYSBwYXRlbnQgbGljZW5zZSAodGhlICJQQVRFTlRTLUlOQ0xVREVEIExJQ0VOU0UiKSBieSBzZWxlY3RpbmcgcHVyc3VhbnQgdG8gUGFydCA2IG9mIEV4aGliaXQgQSB0aGUgcGF0ZW50IHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEsIHdoZW4gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgZGlzdHJpYnV0ZXMgb3IgbWFrZXMgYXZhaWxhYmxlIChhcyB0aGUgY2FzZSBtYXkgYmUpIHN1Y2ggZnV0dXJlIGNvcGllcyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyhjKSBJZiBhbnkgUmVjaXBpZW50IHJlY2VpdmVzIG9yIG9idGFpbnMgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhlIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSwgdGhlbiBhbGwgbGljZW5zaW5nIG9mIHN1Y2ggY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBIGFuZCB0aGF0IFJlY2lwaWVudCBzaGFsbCBub3QgYmUgYWJsZSB0byByZWx5IHVwb24gdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBmb3IgYW55IHN1Y2ggY29waWVzLiBIb3dldmVyLCBhbGwgUmVjaXBpZW50cyB0aGF0IHJlY2VpdmUgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdoaWNoIGluY2x1ZGVzIHRoZSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2Ugc2hhbGwgaGF2ZSBubyBwYXRlbnQgbGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjb3BpZXMgcmVjZWl2ZWQgdW5kZXIgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBhbmQgYXZhaWxhYmlsaXR5IGFuZCBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3BpZXMsIGluY2x1ZGluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBSZWNpcGllbnQgdG8gc3VjaCBjb3BpZXMsIHNoYWxsIGJlIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSB3aXRob3V0IGFueSBwYXRlbnQgbGljZW5zZS4KKworKGQpIFdoZXJlIGEgUmVjaXBpZW50IHVzZXMgaW4gY29tYmluYXRpb24gb3IgY29tYmluZXMgYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgbGljZW5zZWQgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGhhdmluZyBhIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSB3aXRoIGFueSBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIChvciBwb3J0aW9uIHRoZXJlb2YpIGxpY2Vuc2VkIHVuZGVyIGEgY29weSBvZiB0aGUgTGljZW5zZSBoYXZpbmcgYSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2UsIHRoZSBjb21iaW5hdGlvbiAoYW5kIGFueSBwb3J0aW9uIHRoZXJlb2YpIHNoYWxsLCBmcm9tIHRoZSBmaXJzdCB0aW1lIHN1Y2ggUmVjaXBpZW50IHVzZXMsIG1ha2VzIGF2YWlsYWJsZSBvciBkaXN0cmlidXRlcyB0aGUgY29tYmluYXRpb24gKGFzIHRoZSBjYXNlIG1heSBiZSksIGJlIHN1YmplY3QgdG8gb25seSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIHRoZSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2Ugd2hpY2ggc2hhbGwgaW5jbHVkZSB0aGUgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQS4KKworMi4zLiBBQ0tOT1dMRURHRU1FTlQgQU5EIERJU0NMQUlNRVIuCisKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyBhbmQgYWdyZWVzIHRoYXQgYWx0aG91Z2ggSW5pdGlhbCBDb250cmlidXRvciBhbmQgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gcmVwcmVzZW50YXRpb24sIHdhcnJhbnR5LCBndWFyYW50ZWUgb3IgYXNzdXJhbmNlIGlzIHByb3ZpZGVkIGJ5IGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBEaXN0cmlidXRvciB0aGF0IHRoZSBMaWNlbnNlZCBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgZWFjaCBEaXN0cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLCBpbiByZWxhdGlvbiB0byB0aGUgTGljZW5zZWQgV29ya3MuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nIGRpc2NsYWltZXJzLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBXb3JrLgorCisyLjQuIFJFU0VSVkFUSU9OLgorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgSW5pdGlhbCBDb250cmlidXRvciwgU3Vic2VxdWVudCBDb250cmlidXRvciwgb3IgRGlzdHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMS4gRElTVFJJQlVUSU9OIEdFTkVSQUxMWS4KKworKGEpIEEgU3Vic2VxdWVudCBDb250cmlidXRvciBzaGFsbCBtYWtlIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcmBzIFN1YnNlcXVlbnQgV29yayhzKSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGZvciBhIHBlcmlvZCBvZiBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMuIFRoZSBhZm9yZXNhaWQgdHdlbHZlICgxMikgbW9udGggcGVyaW9kIHNoYWxsIGJlZ2luIHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSBhZnRlciB0aGUgY3JlYXRpb24gb2YgdGhlIFN1YnNlcXVlbnQgV29yayBhbmQgbm8gbGF0ZXIgdGhhbiBzaXh0eSAoNjApIGRheXMgYWZ0ZXIgZmlyc3QgZGlzdHJpYnV0aW9uIG9mIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcmBzIFN1YnNlcXVlbnQgV29yay4KKworKGIpIEFsbCBEaXN0cmlidXRvcnMgbXVzdCBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UsIGFuZCBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBFeGhpYml0IEEgYW5kIHRoZSBhY2NvbXBhbnlpbmcgU3VwcGxlbWVudCBGaWxlKSB3aXRoIGVhY2ggY29weSBvZiB0aGUgTGljZW5zZWQgV29yayBkaXN0cmlidXRlZC4gSW4gcGFydGljdWxhciwgdGhpcyBMaWNlbnNlIG11c3QgYmUgcHJvbWluZW50bHkgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBpbiBhIGZpbGUgY2FsbGVkICJsaWNlbnNlLnR4dC4iIEluIGFkZGl0aW9uLCB0aGUgTGljZW5zZSBOb3RpY2UgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBtdXN0IGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYWxsIFNvdXJjZSBDb2RlIGZpbGVzLCBhbmQgdmlld2FibGUgdG8gYSB1c2VyIGluIGFueSBleGVjdXRhYmxlIHN1Y2ggdGhhdCB0aGUgTGljZW5zZSBOb3RpY2UgaXMgcmVhc29uYWJseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgYW55IHBhcnR5IHVzaW5nIHRoZSBMaWNlbnNlZCBXb3JrLgorCiszLjIuIEVYRUNVVEFCTEUgRElTVFJJQlVUSU9OUyBPRiBUSEUgTElDRU5TRUQgV09SSy4KKworQSBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmssIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGluIEV4ZWN1dGFibGUgZm9ybSAoYW4gIkVYRUNVVEFCTEUgRElTVFJJQlVUSU9OIikgdG8gYW55IHRoaXJkIHBhcnR5LCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAyIG9mIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFuZCBhY2NvbXBhbmllZCBieSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBBTkQgcHJvdmlkZWQgYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBmdWxmaWxsZWQ6CisKKyhhKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIGFuZCB0aGUgU291cmNlIENvZGUgbXVzdCBiZSBkaXN0cmlidXRlZCBvbiB0aGUgc2FtZSBtZWRpYSBhcyB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gb3IgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtOyBvcgorCisoYikgVGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aGlydHkgc2l4ICgzNikgbW9udGhzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIHRvIGJlIGF2YWlsYWJsZSBhbmQgZGlzdHJpYnV0ZWQgdXNpbmcgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBhbmQgc3VjaCBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IHJlbWFpbiBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB0byBhbnkgdGhpcmQgcGFydHkgdmlhIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gKG9yIGFueSByZXBsYWNlbWVudCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdGhlIHBhcnRpY3VsYXIgRGlzdHJpYnV0b3IgbWF5IHJlYXNvbmFibHkgbmVlZCB0byB0dXJuIHRvIGFzIGEgc3Vic3RpdHV0ZSkgZm9yIHNhaWQgYXQgbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocy4KKworRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgYWJvdmUtbm90ZWQgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIGFueSBMaWNlbnNlZCBXb3JrIG9yIHBvcnRpb24gdGhlcmVvZiBkaXN0cmlidXRlZCB0byBhbnkgdGhpcmQgcGFydHkgaW4gRXhlY3V0YWJsZSBmb3JtLCB3aGV0aGVyIHN1Y2ggZGlzdHJpYnV0aW9uIGlzIG1hZGUgYWxvbmUsIGluIGNvbWJpbmF0aW9uIHdpdGggYSBMYXJnZXIgV29yayBvciBJbmRlcGVuZGVudCBNb2R1bGVzLCBvciBpbiBzb21lIG90aGVyIGNvbWJpbmF0aW9uLgorCiszLjMuIFNPVVJDRSBDT0RFIERJU1RSSUJVVElPTlMuCisKK1doZW4gYSBEaXN0cmlidXRvciBtYWtlcyB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgYXZhaWxhYmxlIHRvIGFueSBQZXJzb24gaW4gU291cmNlIENvZGUgZm9ybSwgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgU291cmNlIENvZGUsIHNpdHVhdGVkIHNvIHRoYXQgdGhlIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgY29uc3BpY3VvdXNseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhhdCBQZXJzb24uIEZvciBncmVhdGVyIGNsYXJpZmljYXRpb24sIHRoaXMgU2VjdGlvbiAzLjMgYXBwbGllcyB0byBhbGwgZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFueSBTb3VyY2UgQ29kZSBmb3JtLiBBIERpc3RyaWJ1dG9yIG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgd2hpY2ggY2hhcmdlIHNoYWxsIGJlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworMy40LiBSRVFVSVJFRCBOT1RJQ0VTIElOIFNPVVJDRSBDT0RFLgorCitFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbm90aWNlIHNldCBvdXQgaW4gUGFydCA1IG9mIEV4aGliaXQgQSBpcyBpbmNsdWRlZCBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciBlYWNoIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgcGFydGljdWxhciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBpZiBzdWNoIG5vdGljZSBpcyBub3QgYWxyZWFkeSBpbmNsdWRlZCBpbiBlYWNoIHN1Y2ggZmlsZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZmlsZSBpcyBzdG9yZWQpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4KKworMy41LiBOTyBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTIEZPUiBJTlRFUk5BTExZIFVTRUQgTU9ESUZJQ0FUSU9OUy4KKworTm90d2l0aHN0YW5kaW5nIFNlY3Rpb25zIDMuMiwgMy4zIGFuZCAzLjQsIFJlY2lwaWVudCBtYXksIGludGVybmFsbHkgd2l0aGluIGl0cyBvd24gY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIHVzZSB0aGUgTGljZW5zZWQgV29yaywgaW5jbHVkaW5nIHRoZSBJbml0aWFsIFdvcmsgYW5kIFN1YnNlcXVlbnQgV29ya3MsIGFuZCBtYWtlIE1vZGlmaWNhdGlvbnMgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gUmVjaXBpZW50YHMgb3duIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbiAoY29sbGVjdGl2ZWx5LCAiSU5URVJOQUwgVVNFIE1PRElGSUNBVElPTlMiKS4gVGhlIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIG9ibGlnYXRpb24gdG8gZGlzdHJpYnV0ZSwgaW4gZWl0aGVyIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSwgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBSZWNpcGllbnQgaW4gdGhlIGNvdXJzZSBvZiBzdWNoIGludGVybmFsIHVzZSwgZXhjZXB0IHdoZXJlIHJlcXVpcmVkIGJlbG93IGluIHRoaXMgU2VjdGlvbiAzLjUuIEFsbCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBkaXN0cmlidXRlZCB0byBhbnkgUGVyc29uLCB3aGV0aGVyIG9yIG5vdCBhIFRoaXJkIFBhcnR5LCBzaGFsbCBiZSBkaXN0cmlidXRlZCBwdXJzdWFudCB0byBhbmQgYmUgYWNjb21wYW5pZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIFJlY2lwaWVudCBjaG9vc2VzIHRvIGRpc3RyaWJ1dGUgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgdG8gYW55IFRoaXJkIFBhcnR5LCB0aGVuIHRoZSBSZWNpcGllbnQgc2hhbGwgYmUgZGVlbWVkIGEgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIGRpc3RyaWJ1dGVkIHRvIGFueSBUaGlyZCBQYXJ0eSBzaGFsbCBiZSBkZWVtZWQgYSBTdWJzZXF1ZW50IFdvcmsgb3JpZ2luYXRpbmcgZnJvbSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBzaGFsbCBmcm9tIHRoZSBmaXJzdCBzdWNoIGluc3RhbmNlIGJlY29tZSBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrIHRoYXQgbXVzdCB0aGVyZWFmdGVyIGJlIGRpc3RyaWJ1dGVkIGFuZCBtYWRlIGF2YWlsYWJsZSB0byB0aGlyZCBwYXJ0aWVzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMy4xIHRvIDMuNCBpbmNsdXNpdmUuCisKKzMuNi4gSU5ERVBFTkRFTlQgTU9EVUxFUy4KKworVGhpcyBMaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBJbmRlcGVuZGVudCBNb2R1bGVzIG9mIGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBEaXN0cmlidXRvciBvciBhbnkgUmVjaXBpZW50LCBhbmQgc3VjaCBJbmRlcGVuZGVudCBNb2R1bGVzIG1heSBiZSBsaWNlbnNlZCBvciBtYWRlIGF2YWlsYWJsZSB1bmRlciBvbmUgb3IgbW9yZSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudHMuCisKKzMuNy4gTEFSR0VSIFdPUktTLgorCitBbnkgRGlzdHJpYnV0b3Igb3IgUmVjaXBpZW50IG1heSBjcmVhdGUgb3IgY29udHJpYnV0ZSB0byBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIG9uZSBvciBtb3JlIHByb2R1Y3RzLiBIb3dldmVyLCBpbiBhbnkgc3VjaCBjYXNlLCBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgKGFzIHRoZSBjYXNlIG1heSBiZSkgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgTGljZW5zZWQgV29yayBwb3J0aW9uIG9mIHRoZSBMYXJnZXIgV29yay4KKworMy44LiBERVNDUklQVElPTiBPRiBESVNUUklCVVRFRCBNT0RJRklDQVRJT05TLgorCisoYSkgRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hlcmUgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYWxzbyBxdWFsaWZpZXMgYXMgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKSBtdXN0IGNhdXNlIGVhY2ggU3Vic2VxdWVudCBXb3JrIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhhdCBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgbWFkZSBpbiB0aGUgY3JlYXRpb24gb3IgY29udHJpYnV0aW9uIHRvIHRoYXQgU3Vic2VxdWVudCBXb3JrLiBJZiBubyBTdXBwbGVtZW50IEZpbGUgZXhpc3RzIG9yIG5vIHJlcXVpcmVtZW50cyBhcmUgc2V0IG91dCBpbiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyB0byBkb2N1bWVudCBjaGFuZ2VzIHRoYXQgdGhleSBtYWtlIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzLgorCisoYikgVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IGF0IGFueSB0aW1lIGludHJvZHVjZSByZXF1aXJlbWVudHMgb3IgYWRkIHRvIG9yIGNoYW5nZSBlYXJsaWVyIHJlcXVpcmVtZW50cyAoaW4gZWFjaCBjYXNlLCB0aGUgIkVBUkxJRVIgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTIikgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MgYnkgcmV2aXNpbmcgUGFydCAxIG9mIGVhY2ggY29weSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdpdGggZnV0dXJlIGNvcGllcyBvZiB0aGUgTGljZW5zZWQgV29yayBzbyB0aGF0IFBhcnQgMSB0aGVuIGNvbnRhaW5zIG5ldyByZXF1aXJlbWVudHMgKHRoZSAiTkVXIERFU0NSSVBUSU9OIFJFUVVJUkVNRU5UUyIpIGZvciBkb2N1bWVudGluZyBzdWNoIGNoYW5nZXMuCisKKyhjKSBBbnkgUmVjaXBpZW50IHJlY2VpdmluZyBhdCBhbnkgdGltZSBhbnkgY29weSBvZiBhbiBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbiBlYWNoIGNhc2UsIGFuICJFYXJsaWVyIExJQ0VOU0VEIENPUFkiKSBoYXZpbmcgdGhlIEVhcmxpZXIgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzIG1heSBjaG9vc2UsIHdpdGggcmVzcGVjdCB0byBlYWNoIHN1Y2ggRWFybGllciBMaWNlbnNlZCBDb3B5LCB0byBjb21wbHkgd2l0aCB0aGUgRWFybGllciBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMgb3IgdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMuIFdoZXJlIGEgUmVjaXBpZW50IGNob29zZXMgdG8gY29tcGx5IHdpdGggdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMsIHRoYXQgUmVjaXBpZW50IHdpbGwsIHdoZW4gdGhlcmVhZnRlciBkaXN0cmlidXRpbmcgYW55IGNvcGllcyBvZiBhbnkgc3VjaCBFYXJsaWVyIExpY2Vuc2VkIENvcHksIGluY2x1ZGUgYSBTdXBwbGVtZW50IEZpbGUgaGF2aW5nIGEgc2VjdGlvbiBlbnRpdGxlZCBQYXJ0IDEgdGhhdCBjb250YWlucyBhIGNvcHkgb2YgdGhlIE5ldyBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMuCisKKyhkKSBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBpbnRlbnQgb2YgUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgaXMgdG8gcHJvdmlkZSBhIG1lY2hhbmlzbSAoaWYgYW55KSBieSB3aGljaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyBtdXN0IGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgdG8gdGhlIExpY2Vuc2VkIFdvcmsgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCBGaWxlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIGluY3JlYXNlIG9yIHJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBBcnRpY2xlIDIgb2YgdGhpcyBMaWNlbnNlIG9yIGluIGFueSBvdGhlciB3YXkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgYW55IFJlY2lwaWVudCwgYW5kIHNoYWxsIGF0IG5vIHRpbWUgc2VydmUgYXMgdGhlIGJhc2lzIGZvciB0ZXJtaW5hdGluZyB0aGUgTGljZW5zZS4gRnVydGhlciwgYSBSZWNpcGllbnQgY2FuIGJlIHJlcXVpcmVkIHRvIGNvcnJlY3QgYW5kIGNoYW5nZSBpdHMgZG9jdW1lbnRhdGlvbiBwcm9jZWR1cmVzIHRvIGNvbXBseSB3aXRoIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCBidXQgY2Fubm90IGJlIHBlbmFsaXNlZCB3aXRoIGRhbWFnZXMuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCBGaWxlIGlzIG9ubHkgYmluZGluZyBvbiBlYWNoIFJlY2lwaWVudCBvZiBhbnkgTGljZW5zZWQgV29yayB0byB0aGUgZXh0ZW50IFBhcnQgMSBzZXRzIG91dCB0aGUgcmVxdWlyZW1lbnRzIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIHRvIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yay4KKworKGUpIEFuIGV4YW1wbGUgb2YgYSBzZXQgb2YgcmVxdWlyZW1lbnRzIGZvciBkb2N1bWVudGluZyBjaGFuZ2VzIGFuZCBjb250cmlidXRpb25zIG1hZGUgYnkgU3Vic2VxdWVudCBDb250cmlidXRvciBpcyBzZXQgb3V0IGluIFBhcnQgNyBvZiBFeGhpYml0IEEgb2YgdGhpcyBMaWNlbnNlLiBQYXJ0IDcgaXMgYSBzYW1wbGUgb25seSBhbmQgaXMgbm90IGJpbmRpbmcgb24gUmVjaXBpZW50cywgdW5sZXNzIChzdWJqZWN0IHRvIHRoZSBlYXJsaWVyIHBhcmFncmFwaHMgb2YgdGhpcyBTZWN0aW9uIDMuOCkgdGhvc2UgYXJlIHRoZSByZXF1aXJlbWVudHMgdGhhdCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBpbmNsdWRlcyBpbiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSB3aXRoIHRoZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuOS4gVVNFIE9GIERJU1RSSUJVVE9SIE5BTUUuCisKK1RoZSBuYW1lIG9mIGEgRGlzdHJpYnV0b3IgbWF5IG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBEaXN0cmlidXRvciB0byBlbmRvcnNlIG9yIHByb21vdGUgdGhlIExpY2Vuc2VkIFdvcmsgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBMaWNlbnNlZCBXb3JrLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMy4xMC4gTElNSVRFRCBSRUNPR05JVElPTiBPRiBJTklUSUFMIENPTlRSSUJVVE9SLgorCisoYSkgQXMgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIGluIHRoZSBob3BlIHRoYXQgaXRzIHByb21vdGlvbmFsIHZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlIHRpbWUsIG1vbmV5IGFuZCBlZmZvcnQgaW52ZXN0ZWQgaW4gd3JpdGluZyB0aGUgSW5pdGlhbCBXb3JrLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgaW5jbHVkZSBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCB0aW1lIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSByZXN1bHRpbmcgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmssIG9yIGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbiwgaXMgbGF1bmNoZWQgb3IgcnVuLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yYHMgYXR0cmlidXRpb24gaW5mb3JtYXRpb24gbXVzdCBvY2N1ciAodGhlICJBVFRSSUJVVElPTiBJTkZPUk1BVElPTiIpLiBUaGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gbXVzdCBiZSBpbmNsdWRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggU291cmNlIENvZGUgZmlsZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgc3BlY2lmeSBpbiB0aGUgU3VwcGxlbWVudCBGaWxlIHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBleGVjdXRhYmxlIHByb2dyYW0gcmVzdWx0aW5nIGZyb20gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLCBidXQgbm90IGEgcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbi4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBub3QgcmVxdWlyZSBSZWNpcGllbnRzIHRvIGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIGZvbGxvd2luZyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbjogKGEpIGEgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I7IChiKSBhIHdvcmQgb3Igb25lIHBocmFzZSAobm90IGV4Y2VlZGluZyAxMCB3b3Jkcyk7IChjKSBvbmUgZGlnaXRhbCBpbWFnZSBvciBncmFwaGljIHByb3ZpZGVkIHdpdGggdGhlIEluaXRpYWwgV29yazsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgIkFUVFJJQlVUSU9OIExJTUlUUyIpLgorCisoYikgSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cywgb3Igbm8gQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgc2V0IG91dCBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBSZWNpcGllbnRzIHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisoYykgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gUGFydCAyIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBvciB1bmRlciBjaXJjdW1zdGFuY2VzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3LCBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuCisKKzMuMTEuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgYW55IGRlc2NyaXB0aW9uIG9yIGF0dHJpYnV0aW9uIHByb3Zpc2lvbnMgY29udGFpbmVkIHdpdGhpbiBhIFN1cHBsZW1lbnQgRmlsZSBtYXkgb25seSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hdHVyZSBvZiB0aGUgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcmVxdWlyZW1lbnRzLCBhcyB0aGUgY2FzZSBtYXkgYmUuIEFueSBwcm92aXNpb24gaW4gYSBTdXBwbGVtZW50IEZpbGUgdGhhdCBvdGhlcndpc2UgcHVycG9ydHMgdG8gbW9kaWZ5LCB2YXJ5LCBudWxsaWZ5IG9yIGFtZW5kIGFueSByaWdodCwgb2JsaWdhdGlvbiBvciByZXByZXNlbnRhdGlvbiBjb250YWluZWQgaGVyZWluIHNoYWxsIGJlIGRlZW1lZCB2b2lkIHRvIHRoYXQgZXh0ZW50LCBhbmQgc2hhbGwgYmUgb2Ygbm8gZm9yY2Ugb3IgZWZmZWN0LgorCis0LiBDT01NRVJDSUFMIFVTRSBBTkQgSU5ERU1OSVRZLgorCis0LjEuIENPTU1FUkNJQUwgU0VSVklDRVMuCisKK0EgUmVjaXBpZW50ICgiQ09NTUVSQ0lBTCBSRUNJUElFTlQiKSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgKGNvbGxlY3RpdmVseSwgIlNFUlZJQ0VTIikgdG8gb25lIG9yIG1vcmUgb3RoZXIgUmVjaXBpZW50cyBvciBEaXN0cmlidXRvcnMuIEhvd2V2ZXIsIHN1Y2ggQ29tbWVyY2lhbCBSZWNpcGllbnQgbWF5IGRvIHNvIG9ubHkgb24gdGhhdCBDb21tZXJjaWFsIFJlY2lwaWVudGBzIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBEaXN0cmlidXRvciBvciBSZWNpcGllbnQsIGFuZCBDb21tZXJjaWFsIFJlY2lwaWVudCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uKHMpIGlzL2FyZSBvZmZlcmVkIGJ5IENvbW1lcmNpYWwgUmVjaXBpZW50IGFsb25lLiBBdCBubyB0aW1lIG1heSBDb21tZXJjaWFsIFJlY2lwaWVudCB1c2UgYW55IFNlcnZpY2VzIHRvIGRlbnkgYW55IHBhcnR5IHRoZSBMaWNlbnNlZCBXb3JrIGluIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSB3aGVuIHNvIHJlcXVpcmVkIHVuZGVyIGFueSBvZiB0aGUgb3RoZXIgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoaXMgU2VjdGlvbiA0LjEgZG9lcyBub3QgZGltaW5pc2ggYW55IG9mIHRoZSBvdGhlciB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIG9ibGlnYXRpb24gb2YgdGhlIENvbW1lcmNpYWwgUmVjaXBpZW50IGFzIGEgRGlzdHJpYnV0b3IsIHdoZW4gZGlzdHJpYnV0aW5nIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGZvcm0sIHRvIG1ha2Ugc3VjaCBkaXN0cmlidXRpb24gcm95YWx0eS1mcmVlIChzdWJqZWN0IHRvIHRoZSByaWdodCB0byBjaGFyZ2UgYSBmZWUgb2Ygbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBTb3VyY2UgQ29kZSBvciBFeGVjdXRhYmxlIGRpc3RyaWJ1dGlvbiAoYXMgdGhlIGNhc2UgbWF5IGJlKSkuCisKKzQuMi4gSU5ERU1OSVRZLgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgTGljZW5zZWQgV29yaywgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBEaXN0cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBEaXN0cmlidXRvciBpbmNsdWRlcyB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBvciBvZmZlcnMgYW55IFNlcnZpY2VzLCBzdWNoIERpc3RyaWJ1dG9yICgiQ09NTUVSQ0lBTCBESVNUUklCVVRPUiIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgRGlzdHJpYnV0b3Igb3IgU3Vic2VxdWVudCBDb250cmlidXRvciAoaW4gZWFjaCBjYXNlIGFuICJJTkRFTU5JRklFRCBQQVJUWSIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTE9TU0VTIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIFBhcnR5IHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgU2VydmljZXMuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBQYXJ0eSBtdXN0OiAoYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbTsgYW5kIChiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0byBjb250cm9sLCBhbmQgY28tb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBQYXJ0eSBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCis1LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworNS4xLiBORVcgVkVSU0lPTlMuCisKK1RoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNS4yLiBFRkZFQ1QgT0YgTkVXIFZFUlNJT05TLgorCitPbmNlIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YgaGFzIGJlZW4gcHVibGlzaGVkIGJ5IEluaXRpYWwgQ29udHJpYnV0b3IgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBIb3dldmVyLCBpZiBhIFJlY2lwaWVudCBjaG9vc2VzIHRvIHVzZSB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIHRoZW4gZnJvbSB0aGUgZGF0ZSBvZiBtYWtpbmcgdGhpcyBjaG9pY2UsIHRoZSBSZWNpcGllbnQgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBzdWJzZXF1ZW50IHZlcnNpb24gd2l0aCByZXNwZWN0IHRvIGFsbCBmdXJ0aGVyIHJlcHJvZHVjdGlvbiwgcHJlcGFyYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcywgcHVibGljIGRpc3BsYXkgb2YsIHB1YmxpYyBwZXJmb3JtYW5jZSBvZiwgZGlzdHJpYnV0aW9uIGFuZCBzdWJsaWNlbnNpbmcgYnkgdGhlIFJlY2lwaWVudCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBMaWNlbnNlZCBXb3JrCisKKzYuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKzYuMS4gR0VORVJBTCBESVNDTEFJTUVSLgorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIFRIRSBMSUNFTlNFRCBXT1JLIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIEFOWSBSRVBSRVNFTlRBVElPTiwgV0FSUkFOVFksIEdVQVJBTlRFRSwgQVNTVVJBTkNFIE9SIENPTkRJVElPTiBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIFdPUksgSVMgV0lUSCBSRUNJUElFTlQuIFNIT1VMRCBBTlkgTElDRU5TRUQgV09SSyBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFJFQ0lQSUVOVCAoTk9UIFRIRSBJTklUSUFMIENPTlRSSUJVVE9SIE9SIEFOWSBTVUJTRVFVRU5UIENPTlRSSUJVVE9SKSBBU1NVTUVTIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRISVMgRElTQ0xBSU1FUi4KKworNi4yLiBSRVNQT05TSUJJTElUWSBPRiBSRUNJUElFTlRTLgorCitFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgV29yayBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis3LiBURVJNSU5BVElPTi4KKworNy4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgY29udGludWUgdW50aWwgdGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGV4cHJlc3MgdGVybXMgaGVyZWluLgorCis3LjIuIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSBhdCBhbnkgdGltZS4KKworNy4zLiBUaGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHN1Y2ggUmVjaXBpZW50IGlzIGluIG1hdGVyaWFsIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gc2l4dHkgKDYwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IG1hdGVyaWFsIGJyZWFjaCBieSBzdWNoIFJlY2lwaWVudCBvZiBhbnkgdGVybSBvZiBhbnkgb3RoZXIgTGljZW5zZSB1bmRlciB3aGljaCBzdWNoIFJlY2lwaWVudCBpcyBncmFudGVkIGFueSByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFdvcmsgc2hhbGwgY29uc3RpdHV0ZSBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIExpY2Vuc2UuCisKKzcuNC4gVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQgZm9yIGFueSByZWFzb24sIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgYW5kIHVuZGVyIGFueSBvdGhlciBMaWNlbnNlIHRvIHRoYXQgUmVjaXBpZW50IHNoYWxsIHRlcm1pbmF0ZS4gSG93ZXZlciwgYWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHdoaWNoIHdlcmUgcHJldmlvdXNseSBwcm9wZXJseSBncmFudGVkIGJ5IHN1Y2ggUmVjaXBpZW50IHVuZGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluIGVhY2ggY2FzZSwgYW4gIk90aGVyIExpY2Vuc2UiIGFuZCBpbiBwbHVyYWwsICJPdGhlciBMaWNlbnNlcyIpIHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHN1Y2ggT3RoZXIgTGljZW5zZXMgYXMgc2V0IG91dCBpbiB0aGVpciByZXNwZWN0aXZlIFNlY3Rpb25zIDIsIDMsIDQsIDUsIDYsIDcgYW5kIDgsIG11dGF0aXMgbXV0YW5kaXMsIGZvciBzbyBsb25nIGFzIHRoZSByZXNwZWN0aXZlIHN1YmxpY2Vuc2VlcyAoaS5lLiBvdGhlciBSZWNpcGllbnRzKSByZW1haW4gaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UgdW5kZXIgd2hpY2ggc3VjaCBzdWJsaWNlbnNlZXMgcmVjZWl2ZWQgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBXb3JrLiBBbnkgdGVybWluYXRpb24gb2Ygc3VjaCBPdGhlciBMaWNlbnNlcyBzaGFsbCBiZSBwdXJzdWFudCB0byB0aGVpciByZXNwZWN0aXZlIFNlY3Rpb24gNywgbXV0YXRpcyBtdXRhbmRpcy4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworNy41LiBVcG9uIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgYnkgb3Igd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQsIFNlY3Rpb25zIDQuMSwgNC4yLCA2LjEsIDYuMiwgNy40LCA3LjUsIDguMSwgYW5kIDguMiwgdG9nZXRoZXIgd2l0aCBhbGwgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbmVjZXNzYXJ5IGZvciB0aGUgaW50ZXJwcmV0YXRpb24gYW5kIGVuZm9yY2VtZW50IG9mIHNhbWUsIHNoYWxsIGV4cHJlc3NseSBzdXJ2aXZlIHN1Y2ggdGVybWluYXRpb24uCisKKzguIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCis4LjEuIElOIE5PIEVWRU5UIFNIQUxMIEFOWSBPRiBJTklUSUFMIENPTlRSSUJVVE9SLCBJVFMgU1VCU0lESUFSSUVTLCBPUiBBRkZJTElBVEVTLCBPUiBBTlkgT0YgSVRTIE9SIFRIRUlSIFJFU1BFQ1RJVkUgT0ZGSUNFUlMsIERJUkVDVE9SUywgRU1QTE9ZRUVTLCBBTkQvT1IgQUdFTlRTIChBUyBUSEUgQ0FTRSBNQVkgQkUpLCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QgREFNQUdFUywgSU5ESVJFQ1QgREFNQUdFUywgUFVOSVRJVkUgREFNQUdFUywgSU5DSURFTlRBTCBEQU1BR0VTLCBTUEVDSUFMIERBTUFHRVMsIEVYRU1QTEFSWSBEQU1BR0VTLCBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIE9USEVSIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBBTlkgT1RIRVIgTE9TUyBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFVTRSwgSU5BQklMSVRZIFRPIFVTRSwgVU5BVVRIT1JJWkVEIFVTRSwgUEVSRk9STUFOQ0UsIE9SIE5PTi1QRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBBTlkgUEFSVCBUSEVSRU9GIE9SIFRIRSBQUk9WSVNJT04gT0YgT1IgRkFJTFVSRSBUTyBQUk9WSURFIFNVUFBPUlQgU0VSVklDRVMsIE9SIFRIQVQgUkVTVUxUIEZST00gRVJST1JTLCBERUZFQ1RTLCBPTUlTU0lPTlMsIERFTEFZUyBJTiBPUEVSQVRJT04gT1IgVFJBTlNNSVNTSU9OLCBPUiBBTlkgT1RIRVIgRkFJTFVSRSBPRiBQRVJGT1JNQU5DRSksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBJTiBSRUxBVElPTiBUTyBPUiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gVEhJUyBDTEFVU0UgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIExJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRIRSBMSU1JVEFUSU9OUyBTRVQgRk9SVEggSU4gVEhJUyBTRUNUSU9OIDguMS4KKworOC4yLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIEVBQ0ggUkVDSVBJRU5UIFNIQUxMIE5PVCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4KKworOS4gR09WRVJOSU5HIExBVyBBTkQgTEVHQUwgQUNUSU9OLgorCis5LjEuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB3aXRob3V0IHJlZ2FyZCB0byBpdHMgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vIHBhcnR5IG1heSBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiB0aGUgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIChpZiBhbnkpIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgbGl0aWdhdGlvbiBhcmlzaW5nIHVuZGVyIHRoaXMgTGljZW5zZS4gTm90ZSB0aGF0IGlmIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIGlzIG5vdCBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB0aGVuIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIHNoYWxsIGJlIHRoZSBTdGF0ZSBvZiBOZXcgWW9yay4KKworOS4yLiBUaGUgY291cnRzIG9mIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIHNoYWxsIGhhdmUganVyaXNkaWN0aW9uLCBidXQgbm90IGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24sIHRvIGVudGVydGFpbiBhbmQgZGV0ZXJtaW5lIGFsbCBkaXNwdXRlcyBhbmQgY2xhaW1zLCB3aGV0aGVyIGZvciBzcGVjaWZpYyBwZXJmb3JtYW5jZSwgaW5qdW5jdGlvbiwgZGFtYWdlcyBvciBvdGhlcndpc2UsIAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNGY4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMApAQCAtMCwwICsxLDM3MiBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMS4wIC0gTWFyY2ggMTYsIDE5OTkKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIGFuZCB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIHB1YmxpY2x5IGFubm91bmNlcyBhcworc3ViamVjdCB0byB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBhbmQgd2hpY2ggY29udGFpbnMgYQorbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwKK0NvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4wIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZiksIGFzIGl0IG1heQorYmUgcmV2aXNlZCBmcm9tIHRpbWUgdG8gdGltZSBieSBBcHBsZSAoIkxpY2Vuc2UiKS4gQXMgdXNlZCBpbiB0aGlzCitMaWNlbnNlOgorCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZQorZ3JhbnRvciBvZiByaWdodHMsIChpKSBwYXRlbnRzIG9yIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm93CitvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHdob3NlCitjbGFpbXMgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seQordG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlCitPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdQorYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdAorYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKQord2hvc2UgY2xhaW1zIGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUKK29yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUKK2NvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55CityZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuMyAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIKK3RoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSwgYW5kIGluY2x1ZGVzCit3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YKK0NvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSwKK2FzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZAorQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworMS40ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucwordGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNSAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UKK3RvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgQ292ZXJlZCBDb2RlLiBXaGVuIGNvZGUgaXMKK3JlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bworb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOworYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbQorc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS42ICJPcmlnaW5hbCBDb2RlIiBtZWFucyB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsKK2FzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcKK3RoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzCittYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuCitleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoCit3b3JrLgorCisxLjcgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsCitzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUKKyhvYmplY3QgY29kZSkuCisKKzEuOCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbgordGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZgorQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsCitDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlLCB3aXRoIG9yCit3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQKK2RldmVsb3BtZW50LCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodAorYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyCitpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlCit0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsKKworKGIpIGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YKK0NvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyCitvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyCitTZWN0aW9uIDY7IGFuZAorCisoYykgY29tcGxldGVseSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudCBhbGwgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBoYXZlCittYWRlIGFuZCB0aGUgZGF0ZSBvZiBlYWNoIHN1Y2ggTW9kaWZpY2F0aW9uLCBkZXNpZ25hdGUgdGhlIHZlcnNpb24gb2YKK3RoZSBPcmlnaW5hbCBDb2RlIHlvdSB1c2VkLCBwcm9taW5lbnRseSBpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoCitpbmZvcm1hdGlvbiB3aXRoIHRoZSBNb2RpZmljYXRpb25zLCBhbmQgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4KK0V4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBzdWNoIE1vZGlmaWNhdGlvbnMuCisKKzIuMiBZb3UgbWF5IERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaAoraW5zdGFuY2U6CisKKyhhKSBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlCitTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgbWFrZSBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB2aWEgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24gKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudHMgc2V0Citmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBZb3UgbWF5IGNob29zZSB0bworb2ZmZXIgdW5kZXIgU2VjdGlvbiA2LiBZb3UgbXVzdCBjb250aW51ZSB0byBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZgorWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZQorQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwKK0RlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXI7CisKKyhjKSBtdXN0IG5vdGlmeSBBcHBsZSBhbmQgb3RoZXIgdGhpcmQgcGFydGllcyBvZiBob3cgdG8gb2J0YWluIFlvdXIKK0RlcGxveWVkIE1vZGlmaWNhdGlvbnMgYnkgZmlsbGluZyBvdXQgYW5kIHN1Ym1pdHRpbmcgdGhlIHJlcXVpcmVkCitpbmZvcm1hdGlvbiBmb3VuZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlL21vZGlmaWNhdGlvbnMuaHRtbDsgYW5kCisKKyhkKSBpZiB5b3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksCitpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMKK2F2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZAord2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZQorbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnRzIGFuZCBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLAorcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlCitzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsKK2FuZAorCisoYikgWW91IGhlcmVieSBncmFudCB0byBBcHBsZSBhbmQgaXRzIHN1YnNpZGlhcmllcyBhIG5vbi1leGNsdXNpdmUsCit3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyCitBcHBsaWNhYmxlIFBhdGVudHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IKK2NvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZXhlY3V0ZSwgY29tcGlsZSwgZGlzcGxheSwKK3BlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtLCB0aHJvdWdoCittdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2gKK2luc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlCitmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluCitTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQKK2J5IEFwcGxlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMKK3NvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUKK2Zvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yCitvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbgorKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyCitzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZS4gWW91IG11c3Qgb2J0YWluIHRoZQorcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieQorWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZQoraGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QKK0FwcGxlIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlCitnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4KK3B1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkKK2NvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudAordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZQoraGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQKK3VuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IKK2luIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUKK09yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcworb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UKK2V4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yCithbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgT1JJR0lOQUwKK0NPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVAorT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GCitTRUNUSU9OUyA4IEFORCA5LCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSBBUkUgQ09MTEVDVElWRUxZCitSRUZFUlJFRCBUTyBBUyAiQVBQTEUiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SCitDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IKK1NBVElTRkFDVE9SWSBRVUFMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIEFQUExFIERPRVMgTk9UIFdBUlJBTlQgVEhBVAorVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBNRUVUIFlPVVIKK1JFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUKK1VOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBPUklHSU5BTCBDT0RFCitXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTgorQlkgQVBQTEUgT1IgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQQorV0FSUkFOVFkgT1IgSU4gQU5ZIFdBWSBJTkNSRUFTRSBUSEUgU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gWW91CithY2tub3dsZWRnZSB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZQorb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbgorc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlCitvZiB0aGUgT3JpZ2luYWwgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZQorcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExpYWJpbGl0eS4KKworOS4xIEluZnJpbmdlbWVudC4gSWYgYW55IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGJlY29tZXMgdGhlIHN1YmplY3Qgb2YKK2EgY2xhaW0gb2YgaW5mcmluZ2VtZW50ICgiQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSIpLCBBcHBsZSBtYXksIGF0CitpdHMgc29sZSBkaXNjcmV0aW9uIGFuZCBvcHRpb246IChhKSBhdHRlbXB0IHRvIHByb2N1cmUgdGhlIHJpZ2h0cworbmVjZXNzYXJ5IGZvciBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKQorbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCitpbmZyaW5naW5nOyBvciAoYykgdGVybWluYXRlIFlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgQWZmZWN0ZWQKK09yaWdpbmFsIENvZGUsIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSB1cG9uIEFwcGxlYHMgcG9zdGluZyBvZiBhCitub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlIHRoYXQgaXMgdXNlZCBmb3IKK2ltcGxlbWVudGF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworOS4yIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEFQUExFIEJFCitMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUgorSU5BQklMSVRZIFRPIFVTRSBUSEUgT1JJR0lOQUwgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUgorVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksCitQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRgorRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbAorbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUKK2Ftb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZQordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAiQXBwbGUiLCAiQXBwbGUgQ29tcHV0ZXIiLCAiTWFjIE9TIFgiLAorIk1hYyBPUyBYIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nCit0byBBcHBsZSAoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIGFuZCBubyBBcHBsZSBNYXJrcyBtYXkgYmUKK3VzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZQorb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgYnkgYW5kIGluIHN0cmljdCBjb21wbGlhbmNlIGF0IGFsbCB0aW1lcword2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZQorcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0bwordGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mCitBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsCitub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMKK3NvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyCit0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzCitMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuIEFwcGxlYHMKK2RldmVsb3BtZW50LCB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kCitkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpbGwgbm90IGJlIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gVGVybWluYXRpb24uCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCit0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZgordGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb25zIDkuMSBhbmQvb3IgMTMuNihiKTsgb3IgKGMpCithdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlCit0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50CithZ2FpbnN0IEFwcGxlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvCitpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSBpbiB0aGUKK2Nhc2Ugb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA5LjEsIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YKK3RoZSBDb3ZlcmVkIENvZGUgb3IgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSAoaW4gdGhlIGNhc2Ugb2YKK3Rlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb24gOS4xKSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IKK2NvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbgorcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbgorb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4KK2luIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLAoraW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kCisxMy4gTmVpdGhlciBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byB0aGUgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwKK2luZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZwordGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZgorZWl0aGVyIHBhcnR5LgorCisxMy4gTWlzY2VsbGFuZW91cy4KKworMTMuMSBFeHBvcnQgTGF3IEFzc3VyYW5jZXMuIFlvdSBtYXkgbm90IHVzZSBvciBvdGhlcndpc2UgZXhwb3J0IG9yCityZS1leHBvcnQgdGhlIE9yaWdpbmFsIENvZGUgZXhjZXB0IGFzIGF1dGhvcml6ZWQgYnkgVW5pdGVkIFN0YXRlcworbGF3IGFuZCB0aGUgbGF3cyBvZiB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBPcmlnaW5hbCBDb2RlIHdhcworb2J0YWluZWQuIEluIHBhcnRpY3VsYXIsIGJ1dCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBPcmlnaW5hbCBDb2RlCittYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIChhKSBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yCityZXNpZGVudCBvZikgYW55IFUuUy4gZW1iYXJnb2VkIGNvdW50cnkgb3IgKGIpIHRvIGFueW9uZSBvbiB0aGUKK1UuUy4gVHJlYXN1cnkgRGVwYXJ0bWVudGBzIGxpc3Qgb2YgU3BlY2lhbGx5IERlc2lnbmF0ZWQgTmF0aW9uYWxzCitvciB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlYHMgVGFibGUgb2YgRGVuaWFsIE9yZGVycy4gQnkKK3VzaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgWW91IGFyZSBub3QKK2xvY2F0ZWQgaW4sIHVuZGVyIGNvbnRyb2wgb2YsIG9yIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YgYW55IHN1Y2gKK2NvdW50cnkgb3Igb24gYW55IHN1Y2ggbGlzdC4KKworMTMuMiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzCitkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEKK3JpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkKK3Byb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5Citjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluCithY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyCitTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUgorMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMworKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlCitEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUKK0NvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjMgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMKK2NyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YKK2xlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQKK3RvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yCitvdGhlcndpc2UuCisKKzEzLjQgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyCitBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yCitpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtCit0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwKK01vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkKK2RldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy41IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IEFwcGxlIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbgorb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQKK29mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoCitwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0Cit0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjYgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbgordGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZQorZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUKK2Vjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mCit0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKQorTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvcgorcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGgKK1NlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZgordGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91CittdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQKK2Rlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNyBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluCit0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5Citjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlCithbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMKK0xpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuCisKKzEzLjggRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YKK0NhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZworY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZAordGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcworcGFydGllcyBvbnQgZXhpZ2UgcXVlIGxlIHByZXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMKK2Nvbm5leGVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzCitSZXNlcnZlZC4gVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YKK09yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZQorTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nCit0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCitkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKK0VYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjVlNDZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjEKQEAgLTAsMCArMSwzNzQgQEAKKworQVBQTEUgUFVCTElDIFNPVVJDRSBMSUNFTlNFCitWZXJzaW9uIDEuMSAtIEFwcmlsIDE5LDE5OTkKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIGFuZCB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kCitieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWdyZWUgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHBsZWFzZSBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBzb2Z0d2FyZS4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlcgord29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgcHVibGljbHkgYW5ub3VuY2VzIGFzCitzdWJqZWN0IHRvIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIGFuZCB3aGljaCBjb250YWlucyBhCitub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbAorQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjEgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSwgYXMgaXQgbWF5CitiZSByZXZpc2VkIGZyb20gdGltZSB0byB0aW1lIGJ5IEFwcGxlICgiTGljZW5zZSIpLiAgQXMgdXNlZCBpbiB0aGlzCitMaWNlbnNlOgorCisxLjEgIkFmZmVjdGVkIE9yaWdpbmFsIENvZGUiIG1lYW5zIG9ubHkgdGhvc2Ugc3BlY2lmaWMgcG9ydGlvbnMgb2YKK09yaWdpbmFsIENvZGUgdGhhdCBhbGxlZ2VkbHkgaW5mcmluZ2UgdXBvbiBhbnkgcGFydHlgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBhcmUgb3RoZXJ3aXNlIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YKK2luZnJpbmdlbWVudC4KKworMS4yICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcwordGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlcgorYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdAorbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlCit3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mCityaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLAorb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91cgorTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZQorY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlcgordGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpLCBhbmQgaW5jbHVkZXMKK3dpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZgorQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlLAorYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCitDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZQordG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiBDb3ZlcmVkIENvZGUuICBXaGVuIGNvZGUgaXMKK3JlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogKGEpIGFueSBhZGRpdGlvbiB0bworb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOworYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbQorc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4KKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcworb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbgorZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaAord29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZAorb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuOCAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbAorbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywKK3NjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZQorKG9iamVjdCBjb2RlKS4KKworMS45ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gIFN1YmplY3QgdG8gdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24KK3RoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tIGV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCitBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwKK0NvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZAorZGV2ZWxvcG1lbnQsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0CithbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIKK2luIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUKK3RoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZgorQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIKK29yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIKK1NlY3Rpb24gNjsgYW5kCisKKyhjKSBjb21wbGV0ZWx5IGFuZCBhY2N1cmF0ZWx5IGRvY3VtZW50IGFsbCBNb2RpZmljYXRpb25zIHRoYXQgeW91IGhhdmUKK21hZGUgYW5kIHRoZSBkYXRlIG9mIGVhY2ggc3VjaCBNb2RpZmljYXRpb24sIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZgordGhlIE9yaWdpbmFsIENvZGUgeW91IHVzZWQsIHByb21pbmVudGx5IGluY2x1ZGUgYSBmaWxlIGNhcnJ5aW5nIHN1Y2gKK2luZm9ybWF0aW9uIHdpdGggdGhlIE1vZGlmaWNhdGlvbnMsIGFuZCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbgorRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIHN1Y2ggTW9kaWZpY2F0aW9ucy4KKworMi4yIFlvdSBtYXkgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoCisgIGluc3RhbmNlOgorCisoYSkgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZQorU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsKKworKGIpIG1ha2UgYWxsIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgaW4gU291cmNlCitDb2RlIGZvcm0gdmlhIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uIChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldAorZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBhbmQgYW55IGFkZGl0aW9uYWwgdGVybXMgWW91IG1heSBjaG9vc2UgdG8KK29mZmVyIHVuZGVyIFNlY3Rpb24gNi4gIFlvdSBtdXN0IGNvbnRpbnVlIHRvIG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mCitZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlCitDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbAorRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlcjsKKworKGMpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFlvdSwKK2luZm9ybSBvdGhlcnMgb2YgaG93IHRvIG9idGFpbiB0aG9zZSBNb2RpZmljYXRpb25zIGJ5IGZpbGxpbmcgb3V0IGFuZAorc3VibWl0dGluZyB0aGUgaW5mb3JtYXRpb24gZm91bmQgYXQKK2h0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZS9tb2RpZmljYXRpb25zLmh0bWwsIGlmIGF2YWlsYWJsZTsKK2FuZAorCisoZCkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LAoraW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzCithdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQKK3doZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlCitsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsCityZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUKK3NhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOworYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3dvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIKK0FwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZAorb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBleGVjdXRlLCBjb21waWxlLCBkaXNwbGF5LAorcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2gKK211bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworNC4gTGFyZ2VyIFdvcmtzLiAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiAgSW4gZWFjaCBzdWNoCitpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZQorZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4KK1NlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieQorQXBwbGUgaGVyZWluLiAgTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlCithZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMKK3NvbGUgZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlCitmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vcgorb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4KKygiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlCityZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUuIFlvdSBtdXN0IG9idGFpbiB0aGUKK3JlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUKK2hhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0CitBcHBsZSBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuICBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2ggdmVyc2lvbiB3aWxsIGJlCitnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuCitwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlCit0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UKK3N1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzCitMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiAgVGhlIE9yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IKK2luIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiAgVGhlCitPcmlnaW5hbCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YKK2RhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gIFlvdSBleHByZXNzbHkKK2Fja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgYW55IHBvcnRpb24KK3RoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suICBUSEUgT1JJR0lOQUwgQ09ERSBJUworUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORAorQU5EIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIChGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5ECis5LCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSBBUkUgQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTCisiQVBQTEUiKSBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgU0FUSVNGQUNUT1JZIFFVQUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZCitSSUdIVFMuICBBUFBMRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFCitPUklHSU5BTCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GCitUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItIEZSRUUsIE9SIFRIQVQKK0RFRkVDVFMgSU4gVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRSBDT1JSRUNURUQuICBOTyBPUkFMIE9SIFdSSVRURU4KK0lORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSBPUiBBTiBBUFBMRSBBVVRIT1JJWkVECitSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRQorU0NPUEUgT0YgVEhJUyBXQVJSQU5UWS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBPcmlnaW5hbCBDb2RlIGlzIG5vdAoraW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQKK25hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbgord2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLAorcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExpYWJpbGl0eS4KKworOS4xIEluZnJpbmdlbWVudC4gIElmIGFueSBwb3J0aW9uIG9mLCBvciBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGVkIGJ5LAordGhlIE9yaWdpbmFsIENvZGUgYmVjb21lcyB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCwKK0FwcGxlIG1heSwgYXQgaXRzIG9wdGlvbjogKGEpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzIG5lY2Vzc2FyeQorZm9yIEFwcGxlIGFuZCBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGU7IChiKQorbW9kaWZ5IHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIGluZnJpbmdpbmc7CitvciAoYykgc3VzcGVuZCBZb3VyIHJpZ2h0cyB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSB1bnRpbCBhIGZpbmFsIGRldGVybWluYXRpb24gb2YKK3RoZSBjbGFpbSBpcyBtYWRlIGJ5IGEgY291cnQgb3IgZ292ZXJubWVudGFsIGFkbWluaXN0cmF0aXZlIGFnZW5jeSBvZgorY29tcGV0ZW50IGp1cmlzZGljdGlvbiBhbmQgQXBwbGUgbGlmdHMgdGhlIHN1c3BlbnNpb24gYXMgc2V0IGZvcnRoCitiZWxvdy4gIFN1Y2ggc3VzcGVuc2lvbiBvZiByaWdodHMgd2lsbCBiZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkgdXBvbgorQXBwbGVgcyBwb3N0aW5nIG9mIGEgbm90aWNlIHRvIHN1Y2ggZWZmZWN0IG9uIHRoZSBBcHBsZSB3ZWIgc2l0ZSB0aGF0CitpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuICBVcG9uIHN1Y2ggZmluYWwKK2RldGVybWluYXRpb24gYmVpbmcgbWFkZSwgaWYgQXBwbGUgaXMgbGVnYWxseSBhYmxlLCB3aXRob3V0IHRoZQorcGF5bWVudCBvZiBhIGZlZSBvciByb3lhbHR5LCB0byByZXN1bWUgdXNlLCByZXByb2R1Y3Rpb24sCittb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBBZmZlY3RlZCBPcmlnaW5hbAorQ29kZSwgQXBwbGUgd2lsbCBsaWZ0IHRoZSBzdXNwZW5zaW9uIG9mIHJpZ2h0cyB0byB0aGUgQWZmZWN0ZWQKK09yaWdpbmFsIENvZGUgYnkgcG9zdGluZyBhIG5vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUKK3RoYXQgaXMgdXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgSWYgQXBwbGUgc3VzcGVuZHMKK1lvdXIgcmlnaHRzIHRvIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUsIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsCitiZSBjb25zdHJ1ZWQgdG8gcmVzdHJpY3QgWW91LCBhdCBZb3VyIG9wdGlvbiBhbmQgc3ViamVjdCB0byBhcHBsaWNhYmxlCitsYXcsIGZyb20gcmVwbGFjaW5nIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHdpdGggbm9uLWluZnJpbmdpbmcKK2NvZGUgb3IgaW5kZXBlbmRlbnRseSBuZWdvdGlhdGluZyBmb3IgbmVjZXNzYXJ5IHJpZ2h0cyBmcm9tIHN1Y2ggdGhpcmQKK3BhcnR5LgorCis5LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEFQUExFIEJFCitMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8KK1VTRSBUSEUgT1JJR0lOQUwgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWQorT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWQorT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRgorQU5ZIFJFTUVEWS4gIEluIG5vIGV2ZW50IHNoYWxsIEFwcGxlYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsCitkYW1hZ2VzIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzCisoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuICBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsICJNYWMKK09TIFggU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUKKyhjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgYW5kIG5vIEFwcGxlIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK29yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMKK3Blcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZAorcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0bwordGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIEFwcGxlCisoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZQorYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUKK2Rpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yCittYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiAgQXBwbGVgcyBkZXZlbG9wbWVudCwgdXNlLAorcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQKK0NvZGUgd2lsbCBub3QgYmUgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCisgICB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsgKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZgordGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IgKGMpIGF1dG9tYXRpY2FsbHkKK3dpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcworTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGUuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvCitpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sCitzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbAorY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCitBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZAorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlCit0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZAordG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gIE5laXRoZXIgcGFydHkgd2lsbCBiZQorbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydAorc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzCit0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvCithbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGVpdGhlciBwYXJ0eS4KKworMTMuICBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzCitkZWZpbmVkIGluIEZBUiAyLjEwMS4gIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cworaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvCit0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsCitsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGgKK0ZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IKK0RlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLQorQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyCitTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gIEFjY29yZGluZ2x5LCBhbGwgVS5TLgorR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQKK2ZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMKK2NyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YKK2xlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8KK3RoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yCitvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpcgorQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvcgoraXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUKK3NhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsCitNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5CitkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gIEZhaWx1cmUgYnkgQXBwbGUgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uCitvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZgordGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzCit0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyCit3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAgKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwKK3RvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8KK3RoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzCithbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbAorY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAgKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLAoraWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3IKK3NwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZQorZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbAoraW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mCit0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91cgorcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZQorTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8KK3RoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsCitjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZQorSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiAgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mCitDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCisKK1doZXJlIFlvdSBhcmUgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcKK2NsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQKK3RoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMKK3BhcnRpZXMgb250IGV4aWdlIHF1ZSBsZSBwcmVzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzCitjb25uZXhlcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIFJpZ2h0cworUmVzZXJ2ZWQuICBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUKK0xpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZwordGhpcyBmaWxlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSCitFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tIElORlJJTkdFTUVOVC4gIFBsZWFzZSBzZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGUzNTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjIKQEAgLTAsMCArMSwxMDUgQEAKKworQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlci4gMS4yCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSBBcHBsZSBpZGVudGlmeWluZyBzdWNoIHByb2dyYW0gb3Igd29yayBhcyAiT3JpZ2luYWwgQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMiAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpICgiTGljZW5zZSIpLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNCAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS44ICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBDb3ZlcmVkIENvZGUgYnkgYW4gaW5kaXZpZHVhbCBzb2xlbHkgZm9yIGhpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlIG9mIENvdmVyZWQgQ29kZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsIGluZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIChjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsKSBkb2VzIG5vdCBxdWFsaWZ5IGFzIFBlcnNvbmFsIFVzZS4KKworMS45ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuMTAgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy5TdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIEFwcGxlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIEFwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmQKKworKGIpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworMi4yIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOworCisoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgYW5kCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4KKworMi4zIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gQXBwbGUgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgQXBwbGUgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCis0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiQVBQTEUiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBUFBMRSwgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsICJNYWMgT1MgWCBTZXJ2ZXIiLCAiUXVpY2tUaW1lIiwgIlF1aWNrVGltZSBTdHJlYW1pbmcgU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gTm8gQXBwbGUgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uIFVwb24gdGVybWluYXRpb24sIFlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSBzdG9wIGFueSBmdXJ0aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSIDI1Mi4yMjctNzAxNSAoVGVjaG5pY2FsIERhdGEgLS0gQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZ1lvdSwgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEzLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNlcHQgdGhhdCBib2R5IG9mIENhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCitFWEhJQklUIEEuCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMiAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMmU4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTIuMApAQCAtMCwwICsxLDEwMiBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMi4wIC0gIEF1Z3VzdCA2LCAyMDAzCisKK1BsZWFzZSByZWFkIHRoaXMgTGljZW5zZSBjYXJlZnVsbHkgYmVmb3JlIGRvd25sb2FkaW5nIHRoaXMgc29mdHdhcmUuICBCeSBkb3dubG9hZGluZyBvciB1c2luZyB0aGlzIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKK0FwcGxlIE5vdGU6ICBJbiBKYW51YXJ5IDIwMDcsIEFwcGxlIGNoYW5nZWQgaXRzIGNvcnBvcmF0ZSBuYW1lIGZyb20gIkFwcGxlIENvbXB1dGVyLCBJbmMuIiB0byAiQXBwbGUgSW5jLiIgIFRoaXMgY2hhbmdlIGhhcyBiZWVuIHJlZmxlY3RlZCBiZWxvdyBhbmQgY29weXJpZ2h0IHllYXJzIHVwZGF0ZWQsIGJ1dCBubyBvdGhlciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBBUFNMIDIuMC4KKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIEFwcGxlIEluYy4gKCJBcHBsZSIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMi4wICgiTGljZW5zZSIpLiAgQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogIChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBBcHBsZSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQgIkV4dGVybmFsbHkgRGVwbG95IiBtZWFuczogKGEpIHRvIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gYW55b25lIG90aGVyIHRoYW4gWW91OyBhbmQvb3IgKGIpIHRvIHVzZSBDb3ZlcmVkIENvZGUsIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yaywgaW4gYW55IHdheSB0byBwcm92aWRlIGEgc2VydmljZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkZWxpdmVyeSBvZiBjb250ZW50LCB0aHJvdWdoIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbiB3aXRoIGEgY2xpZW50IG90aGVyIHRoYW4gWW91LgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiAgV2hlbiBjb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczogIChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuIAorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZQorCisxLjggIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS45ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBVbm1vZGlmaWVkIENvZGUuICBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgdmVyYmF0aW0sIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcywgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZAorCisoYikgIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlIG9yIEV4dGVybmFsbHkgRGVwbG95LCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworMi4yIE1vZGlmaWVkIENvZGUuICBZb3UgbWF5IG1vZGlmeSBDb3ZlcmVkIENvZGUgYW5kIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIGFuZCBDb3ZlcmVkIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2UgWW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsgCisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisoYykgSWYgWW91IEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucywgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWl0aGVyIGF2YWlsYWJsZSB0byB0aG9zZSB0byB3aG9tIFlvdSBoYXZlIEV4dGVybmFsbHkgRGVwbG95ZWQgWW91ciBNb2RpZmljYXRpb25zLCBvciBwdWJsaWNseSBhdmFpbGFibGUuICBTb3VyY2UgQ29kZSBvZiBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBtdXN0IGJlIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBFeHRlcm5hbGx5IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRXh0ZXJuYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSkuCisKKzIuMyBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gIEluIGFkZGl0aW9uLCBpZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgQ292ZXJlZCBDb2RlIChPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zKSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4gIAorCisyLjQgVGhpcmQgUGFydHkgUmlnaHRzLiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS4KKworMy4gWW91ciBHcmFudHMuICBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gYW55IHBlcnNvbiBvciBlbnRpdHkgcmVjZWl2aW5nIG9yIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgYW5kIEV4dGVybmFsbHkgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIgYWJvdmUuICAKKworNC4gTGFyZ2VyIFdvcmtzLiAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4gCisKKzUuIExpbWl0YXRpb25zIG9uIFBhdGVudCBMaWNlbnNlLiAgIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBBcHBsZSBoZXJlaW4uICBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBBcHBsZSB3aGljaCBBcHBsZSBtYXkgZ3JhbnQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gIAorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgQXBwbGUgb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4gCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiAgQXBwbGUgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuICBObyBvbmUgb3RoZXIgdGhhbiBBcHBsZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICAKKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuICBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiQVBQTEUiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gIEFQUExFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuICBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFLCBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgQU5ZIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSElTIExJQ0VOU0UgT1IgWU9VUiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgQ09WRVJFRCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIEFQUExFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyAgIkFwcGxlIiwgIk1hYyIsICJNYWMgT1MiLCAiUXVpY2tUaW1lIiwgIlF1aWNrVGltZSBTdHJlYW1pbmcgU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIEFwcGxlIChjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gIFlvdSBhZ3JlZSBub3QgdG8gdXNlIGFueSBBcHBsZSBNYXJrcyBpbiBvciBhcyBwYXJ0IG9mIHRoZSBuYW1lIG9mIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggQXBwbGVgcyB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL2xlZ2FsL2d1aWRlbGluZXNmb3IzcmRwYXJ0aWVzLmh0bWwuICAKKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gIEFwcGxlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIEFwcGxlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLiAgCisKKzEyLiBUZXJtaW5hdGlvbi4gIAorCisxMi4xIFRlcm1pbmF0aW9uLiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvcgorKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlOyBwcm92aWRlZCB0aGF0IEFwcGxlIGRpZCBub3QgZmlyc3QgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgWW91IGluIHRoYXQgaW5zdGFuY2UuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZS4gIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiAgTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisxMy4gIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiAgR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuICBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiAgVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgWW91LCBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yIGl0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yIG90aGVyd2lzZSBjb21wZXRlIHdpdGgsIE1vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uICBGYWlsdXJlIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy41IFNldmVyYWJpbGl0eS4gIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuICAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiAgQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBBcHBsZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuICBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LiAKKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogIFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4gCisKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBBcHBsZSBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlIGBMaWNlbnNlYCkuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL2Fwc2wvIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlIGRpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBBUFBMRSBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULiAgUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIgCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3NzlkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0Fkb2JlCkBAIC0wLDAgKzEsMTQgQEAKK0NvcHlyaWdodCAxOTkwLTE5OTggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCitBbGwgUmlnaHRzIFJlc2VydmVkLgorICAKK1BhdGVudHMgUGVuZGluZworCitOT1RJQ0U6IEFsbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZG9iZQorU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCBmb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlIHByb3ZpZGVkCit0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMgbWFpbnRhaW5lZCBpbnRhY3QgYW5kIHRoYXQgdGhlIGNvbnRlbnRzCitvZiB0aGlzIGZpbGUgYXJlIG5vdCBhbHRlcmVkIGluIGFueSB3YXkgZnJvbSBpdHMgb3JpZ2luYWwgZm9ybS4KKworUG9zdFNjcmlwdCBhbmQgRGlzcGxheSBQb3N0U2NyaXB0IGFyZSB0cmFkZW1hcmtzIG9mIEFkb2JlIFN5c3RlbXMKK0luY29ycG9yYXRlZCB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBpbiBjZXJ0YWluIGp1cmlzZGljdGlvbnMuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmU5MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMApAQCAtMCwwICsxLDYxIEBACisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBUaGUgQXBhY2hlIEdyb3VwLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAKKyAqICAgIGZvciB1c2UgaW4gdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0IChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKgorICogNC4gVGhlIG5hbWVzICJBcGFjaGUgU2VydmVyIiBhbmQgIkFwYWNoZSBHcm91cCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBHcm91cC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgR3JvdXAKKyAqICAgIGZvciB1c2UgaW4gdGhlIEFwYWNoZSBIVFRQIHNlcnZlciBwcm9qZWN0IChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVBBQ0hFIEdST1VQIGBgQVMgSVNgYCBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIEdST1VQIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKKyAqIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIEdyb3VwIGFuZCB3YXMgb3JpZ2luYWxseSBiYXNlZAorICogb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZSB3cml0dGVuIGF0IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yCisgKiBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMsIFVyYmFuYS1DaGFtcGFpZ24uCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIEdyb3VwIGFuZCB0aGUgQXBhY2hlIEhUVFAgc2VydmVyCisgKiBwcm9qZWN0LCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKi8KKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1ZWMwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjEKQEAgLTAsMCArMSw2MCBAQAorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKKyAqICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgorICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAorICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyAqCisgKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAorICogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiLAorICogICAgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKKyAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBiYXNlZCB1cG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUKKyAqIG9yaWdpbmFsbHkgd3JpdHRlbiBhdCB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMsCisgKiBVbml2ZXJzaXR5IG9mIElsbGlub2lzLCBVcmJhbmEtQ2hhbXBhaWduLgorICovCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyMDFhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0yLjAKQEAgLTAsMCArMSwyMDQgQEAKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbmB0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwN2U0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAKQEAgLTAsMCArMSw1MCBAQAorCitUaGUgQXJ0aXN0aWMgTGljZW5zZQorUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4KKyJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKyJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGlzIFBhY2thZ2UuCisiUmVhc29uYWJsZSBjb3B5aW5nIGZlZSIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcyBvZiBtZWRpYSBjb3N0LCBkdXBsaWNhdGlvbiBjaGFyZ2VzLCB0aW1lIG9mIHBlb3BsZSBpbnZvbHZlZCwgYW5kIHNvIG9uLiAoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKQorIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtIGl0c2VsZiwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBpdGVtLiBJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4KKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZSBzaXRlIHN1Y2ggYXMgZnRwLnV1Lm5ldCwgb3IgYnkgYWxsb3dpbmcgdGhlIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UuCisKK2IpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCitkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuCisKK2MpIGFjY29tcGFueSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzLCBnaXZpbmcgdGhlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2QpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcyBQYWNrYWdlLiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuIEhvd2V2ZXIsIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcyBQYWNrYWdlLgorCis3LiBDIG9yIHBlcmwgc3Vicm91dGluZXMgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuCisKKzguIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzkuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworVGhlIEVuZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmOGQxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMApAQCAtMCwwICsxLDIwMyBAQAorCisgICAgICAgICBUaGUgQXJ0aXN0aWMgTGljZW5zZSAyLjAKKworICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgVGhlIFBlcmwgRm91bmRhdGlvbi4KKworICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitQcmVhbWJsZQorCitUaGlzIGxpY2Vuc2UgZXN0YWJsaXNoZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIGEgZ2l2ZW4gZnJlZSBzb2Z0d2FyZQorUGFja2FnZSBtYXkgYmUgY29waWVkLCBtb2RpZmllZCwgZGlzdHJpYnV0ZWQsIGFuZC9vciByZWRpc3RyaWJ1dGVkLgorVGhlIGludGVudCBpcyB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lIGFydGlzdGljCitjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoYXQgUGFja2FnZSB3aGlsZSBzdGlsbCBrZWVwaW5nIHRoZQorUGFja2FnZSBhdmFpbGFibGUgYXMgb3BlbiBzb3VyY2UgYW5kIGZyZWUgc29mdHdhcmUuCisKK1lvdSBhcmUgYWx3YXlzIHBlcm1pdHRlZCB0byBtYWtlIGFycmFuZ2VtZW50cyB3aG9sbHkgb3V0c2lkZSBvZiB0aGlzCitsaWNlbnNlIGRpcmVjdGx5IHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIgb2YgYSBnaXZlbiBQYWNrYWdlLiAgSWYgdGhlCit0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgZG8gbm90IHBlcm1pdCB0aGUgZnVsbCB1c2UgdGhhdCB5b3UgcHJvcG9zZSB0bworbWFrZSBvZiB0aGUgUGFja2FnZSwgeW91IHNob3VsZCBjb250YWN0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFuZCBzZWVrCithIGRpZmZlcmVudCBsaWNlbnNpbmcgYXJyYW5nZW1lbnQuIAorCitEZWZpbml0aW9ucworCisgICAgIkNvcHlyaWdodCBIb2xkZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsKHMpIG9yIG9yZ2FuaXphdGlvbihzKQorICAgIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgZW50aXJlIFBhY2thZ2UuCisKKyAgICAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwYXJ0eSB0aGF0IGhhcyBjb250cmlidXRlZCBjb2RlIG9yIG90aGVyCisgICAgbWF0ZXJpYWwgdG8gdGhlIFBhY2thZ2UsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlcmBzCisgICAgcHJvY2VkdXJlcy4KKworICAgICJZb3UiIGFuZCAieW91ciIgbWVhbnMgYW55IHBlcnNvbiB3aG8gd291bGQgbGlrZSB0byBjb3B5LAorICAgIGRpc3RyaWJ1dGUsIG9yIG1vZGlmeSB0aGUgUGFja2FnZS4KKworICAgICJQYWNrYWdlIiBtZWFucyB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyAgICBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIGFuZC9vciBvZgorICAgIHRob3NlIGZpbGVzLiBBIGdpdmVuIFBhY2thZ2UgbWF5IGNvbnNpc3Qgb2YgZWl0aGVyIHRoZSBTdGFuZGFyZAorICAgIFZlcnNpb24sIG9yIGEgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICJEaXN0cmlidXRlIiBtZWFucyBwcm92aWRpbmcgYSBjb3B5IG9mIHRoZSBQYWNrYWdlIG9yIG1ha2luZyBpdAorICAgIGFjY2Vzc2libGUgdG8gYW55b25lIGVsc2UsIG9yIGluIHRoZSBjYXNlIG9mIGEgY29tcGFueSBvcgorICAgIG9yZ2FuaXphdGlvbiwgdG8gb3RoZXJzIG91dHNpZGUgb2YgeW91ciBjb21wYW55IG9yIG9yZ2FuaXphdGlvbi4KKworICAgICJEaXN0cmlidXRvciBGZWUiIG1lYW5zIGFueSBmZWUgdGhhdCB5b3UgY2hhcmdlIGZvciBEaXN0cmlidXRpbmcKKyAgICB0aGlzIFBhY2thZ2Ugb3IgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSB0byBhbm90aGVyCisgICAgcGFydHkuICBJdCBkb2VzIG5vdCBtZWFuIGxpY2Vuc2luZyBmZWVzLgorCisgICAgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byB0aGUgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgb25seSBpbiB3YXlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICAiTW9kaWZpZWQgVmVyc2lvbiIgbWVhbnMgdGhlIFBhY2thZ2UsIGlmIGl0IGhhcyBiZWVuIGNoYW5nZWQsIGFuZAorICAgIHN1Y2ggY2hhbmdlcyB3ZXJlIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSB0aGUgQ29weXJpZ2h0CisgICAgSG9sZGVyLiAKKworICAgICJPcmlnaW5hbCBMaWNlbnNlIiBtZWFucyB0aGlzIEFydGlzdGljIExpY2Vuc2UgYXMgRGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBQYWNrYWdlLCBpbiBpdHMgY3VycmVudCB2ZXJzaW9uIG9yIGFzCisgICAgaXQgbWF5IGJlIG1vZGlmaWVkIGJ5IFRoZSBQZXJsIEZvdW5kYXRpb24gaW4gdGhlIGZ1dHVyZS4KKworICAgICJTb3VyY2UiIGZvcm0gbWVhbnMgdGhlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kCisgICAgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIFBhY2thZ2UuCisKKyAgICAiQ29tcGlsZWQiIGZvcm0gbWVhbnMgdGhlIGNvbXBpbGVkIGJ5dGVjb2RlLCBvYmplY3QgY29kZSwgYmluYXJ5LAorICAgIG9yIGFueSBvdGhlciBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IKKyAgICB0cmFuc2xhdGlvbiBvZiB0aGUgU291cmNlIGZvcm0uCisKKworUGVybWlzc2lvbiBmb3IgVXNlIGFuZCBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKworKDEpICBZb3UgYXJlIHBlcm1pdHRlZCB0byB1c2UgdGhlIFN0YW5kYXJkIFZlcnNpb24gYW5kIGNyZWF0ZSBhbmQgdXNlCitNb2RpZmllZCBWZXJzaW9ucyBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdAoreW91IGRvIG5vdCBEaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisKK1Blcm1pc3Npb25zIGZvciBSZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbgorCisoMikgIFlvdSBtYXkgRGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJlc3RyaWN0aW9uLAorZWl0aGVyIGdyYXRpcyBvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZQorYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4gIEF0Cit5b3VyIGRpc2NyZXRpb24sIHN1Y2ggdmVyYmF0aW0gY29waWVzIG1heSBvciBtYXkgbm90IGluY2x1ZGUgYQorQ29tcGlsZWQgZm9ybSBvZiB0aGUgUGFja2FnZS4KKworKDMpICBZb3UgbWF5IGFwcGx5IGFueSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGNoYW5nZXMsIGFuZCBvdGhlcgorbW9kaWZpY2F0aW9ucyBtYWRlIGF2YWlsYWJsZSBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiAgVGhlIHJlc3VsdGluZworUGFja2FnZSB3aWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24sIGFuZCBhcyBzdWNoCit3aWxsIGJlIHN1YmplY3QgdG8gdGhlIE9yaWdpbmFsIExpY2Vuc2UuCisKKworRGlzdHJpYnV0aW9uIG9mIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBQYWNrYWdlIGFzIFNvdXJjZSAKKworKDQpICBZb3UgbWF5IERpc3RyaWJ1dGUgeW91ciBNb2RpZmllZCBWZXJzaW9uIGFzIFNvdXJjZSAoZWl0aGVyIGdyYXRpcworb3IgZm9yIGEgRGlzdHJpYnV0b3IgRmVlLCBhbmQgd2l0aCBvciB3aXRob3V0IGEgQ29tcGlsZWQgZm9ybSBvZiB0aGUKK01vZGlmaWVkIFZlcnNpb24pIHByb3ZpZGVkIHRoYXQgeW91IGNsZWFybHkgZG9jdW1lbnQgaG93IGl0IGRpZmZlcnMKK2Zyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24sIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBkb2N1bWVudGluZworYW55IG5vbi1zdGFuZGFyZCBmZWF0dXJlcywgZXhlY3V0YWJsZXMsIG9yIG1vZHVsZXMsIGFuZCBwcm92aWRlZCB0aGF0Cit5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAoYSkgIG1ha2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXZhaWxhYmxlIHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyCisgICAgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24sIHVuZGVyIHRoZSBPcmlnaW5hbCBMaWNlbnNlLCBzbyB0aGF0IHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgbWF5IGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZAorICAgIFZlcnNpb24uCisKKyAgICAoYikgIGVuc3VyZSB0aGF0IGluc3RhbGxhdGlvbiBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gZG9lcyBub3QKKyAgICBwcmV2ZW50IHRoZSB1c2VyIGluc3RhbGxpbmcgb3IgcnVubmluZyB0aGUgU3RhbmRhcmQgVmVyc2lvbi4gSW4KKyAgICBhZGRpdGlvbiwgdGhlIE1vZGlmaWVkIFZlcnNpb24gbXVzdCBiZWFyIGEgbmFtZSB0aGF0IGlzIGRpZmZlcmVudAorICAgIGZyb20gdGhlIG5hbWUgb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICAoYykgIGFsbG93IGFueW9uZSB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvCisgICAgbWFrZSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXZhaWxhYmxlIHRvIG90aGVycworICAgIHVuZGVyCisgIAorIChpKSAgdGhlIE9yaWdpbmFsIExpY2Vuc2Ugb3IKKworIChpaSkgIGEgbGljZW5zZSB0aGF0IHBlcm1pdHMgdGhlIGxpY2Vuc2VlIHRvIGZyZWVseSBjb3B5LAorIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVzaW5nIHRoZSBzYW1lCisgbGljZW5zaW5nIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhlIGNvcHkgdGhhdCB0aGUgbGljZW5zZWUKKyByZWNlaXZlZCwgYW5kIHJlcXVpcmVzIHRoYXQgdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBNb2RpZmllZAorIFZlcnNpb24sIGFuZCBvZiBhbnkgd29ya3MgZGVyaXZlZCBmcm9tIGl0LCBiZSBtYWRlIGZyZWVseQorIGF2YWlsYWJsZSBpbiB0aGF0IGxpY2Vuc2UgZmVlcyBhcmUgcHJvaGliaXRlZCBidXQgRGlzdHJpYnV0b3IKKyBGZWVzIGFyZSBhbGxvd2VkLgorCisKK0Rpc3RyaWJ1dGlvbiBvZiBDb21waWxlZCBGb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiAKK29yIE1vZGlmaWVkIFZlcnNpb25zIHdpdGhvdXQgdGhlIFNvdXJjZQorCisoNSkgIFlvdSBtYXkgRGlzdHJpYnV0ZSBDb21waWxlZCBmb3JtcyBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiB3aXRob3V0Cit0aGUgU291cmNlLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGNvbXBsZXRlIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2dldCB0aGUgU291cmNlIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uLiAgU3VjaCBpbnN0cnVjdGlvbnMgbXVzdCBiZQordmFsaWQgYXQgdGhlIHRpbWUgb2YgeW91ciBkaXN0cmlidXRpb24uICBJZiB0aGVzZSBpbnN0cnVjdGlvbnMsIGF0IGFueQordGltZSB3aGlsZSB5b3UgYXJlIGNhcnJ5aW5nIG91dCBzdWNoIGRpc3RyaWJ1dGlvbiwgYmVjb21lIGludmFsaWQsIHlvdQorbXVzdCBwcm92aWRlIG5ldyBpbnN0cnVjdGlvbnMgb24gZGVtYW5kIG9yIGNlYXNlIGZ1cnRoZXIgZGlzdHJpYnV0aW9uLgorSWYgeW91IHByb3ZpZGUgdmFsaWQgaW5zdHJ1Y3Rpb25zIG9yIGNlYXNlIGRpc3RyaWJ1dGlvbiB3aXRoaW4gdGhpcnR5CitkYXlzIGFmdGVyIHlvdSBiZWNvbWUgYXdhcmUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBpbnZhbGlkLCB0aGVuCit5b3UgZG8gbm90IGZvcmZlaXQgYW55IG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworKDYpICBZb3UgbWF5IERpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIGluIENvbXBpbGVkIGZvcm0gd2l0aG91dAordGhlIFNvdXJjZSwgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggU2VjdGlvbiA0IHdpdGggcmVzcGVjdCB0bwordGhlIFNvdXJjZSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworCitBZ2dyZWdhdGluZyBvciBMaW5raW5nIHRoZSBQYWNrYWdlIAorCisoNykgIFlvdSBtYXkgYWdncmVnYXRlIHRoZSBQYWNrYWdlIChlaXRoZXIgdGhlIFN0YW5kYXJkIFZlcnNpb24gb3IKK01vZGlmaWVkIFZlcnNpb24pIHdpdGggb3RoZXIgcGFja2FnZXMgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZworYWdncmVnYXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGNoYXJnZSBhIGxpY2Vuc2luZyBmZWUgZm9yIHRoZQorUGFja2FnZS4gIERpc3RyaWJ1dG9yIEZlZXMgYXJlIHBlcm1pdHRlZCwgYW5kIGxpY2Vuc2luZyBmZWVzIGZvciBvdGhlcgorY29tcG9uZW50cyBpbiB0aGUgYWdncmVnYXRpb24gYXJlIHBlcm1pdHRlZC4gVGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZQorYXBwbHkgdG8gdGhlIHVzZSBhbmQgRGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBvciBNb2RpZmllZCBWZXJzaW9ucworYXMgaW5jbHVkZWQgaW4gdGhlIGFnZ3JlZ2F0aW9uLgorCisoOCkgWW91IGFyZSBwZXJtaXR0ZWQgdG8gbGluayBNb2RpZmllZCBhbmQgU3RhbmRhcmQgVmVyc2lvbnMgd2l0aAorb3RoZXIgd29ya3MsIHRvIGVtYmVkIHRoZSBQYWNrYWdlIGluIGEgbGFyZ2VyIHdvcmsgb2YgeW91ciBvd24sIG9yIHRvCitidWlsZCBzdGFuZC1hbG9uZSBiaW5hcnkgb3IgYnl0ZWNvZGUgdmVyc2lvbnMgb2YgYXBwbGljYXRpb25zIHRoYXQKK2luY2x1ZGUgdGhlIFBhY2thZ2UsIGFuZCBEaXN0cmlidXRlIHRoZSByZXN1bHQgd2l0aG91dCByZXN0cmljdGlvbiwKK3Byb3ZpZGVkIHRoZSByZXN1bHQgZG9lcyBub3QgZXhwb3NlIGEgZGlyZWN0IGludGVyZmFjZSB0byB0aGUgUGFja2FnZS4KKworCitJdGVtcyBUaGF0IGFyZSBOb3QgQ29uc2lkZXJlZCBQYXJ0IG9mIGEgTW9kaWZpZWQgVmVyc2lvbiAKKworKDkpIFdvcmtzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbW9kdWxlcyBhbmQgc2NyaXB0cykgdGhhdAorbWVyZWx5IGV4dGVuZCBvciBtYWtlIHVzZSBvZiB0aGUgUGFja2FnZSwgZG8gbm90LCBieSB0aGVtc2VsdmVzLCBjYXVzZQordGhlIFBhY2thZ2UgdG8gYmUgYSBNb2RpZmllZCBWZXJzaW9uLiAgSW4gYWRkaXRpb24sIHN1Y2ggd29ya3MgYXJlIG5vdAorY29uc2lkZXJlZCBwYXJ0cyBvZiB0aGUgUGFja2FnZSBpdHNlbGYsIGFuZCBhcmUgbm90IHN1YmplY3QgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKworR2VuZXJhbCBQcm92aXNpb25zCisKKygxMCkgIEFueSB1c2UsIG1vZGlmaWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3RhbmRhcmQgb3IKK01vZGlmaWVkIFZlcnNpb25zIGlzIGdvdmVybmVkIGJ5IHRoaXMgQXJ0aXN0aWMgTGljZW5zZS4gQnkgdXNpbmcsCittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQYWNrYWdlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gRG8gbm90Cit1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSwgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcworbGljZW5zZS4KKworKDExKSAgSWYgeW91ciBNb2RpZmllZCBWZXJzaW9uIGhhcyBiZWVuIGRlcml2ZWQgZnJvbSBhIE1vZGlmaWVkCitWZXJzaW9uIG1hZGUgYnkgc29tZW9uZSBvdGhlciB0aGFuIHlvdSwgeW91IGFyZSBuZXZlcnRoZWxlc3MgcmVxdWlyZWQKK3RvIGVuc3VyZSB0aGF0IHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBjb21wbGllcyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKK3RoaXMgbGljZW5zZS4KKworKDEyKSAgVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSB0aGUgcmlnaHQgdG8gdXNlIGFueSB0cmFkZW1hcmssCitzZXJ2aWNlIG1hcmssIHRyYWRlbmFtZSwgb3IgbG9nbyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworKDEzKSAgVGhpcyBsaWNlbnNlIGluY2x1ZGVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsCitmcmVlLW9mLWNoYXJnZSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwKK3NlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBQYWNrYWdlIHdpdGggcmVzcGVjdCB0byBhbnkKK3BhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciB0aGF0IGFyZSBuZWNlc3NhcmlseQoraW5mcmluZ2VkIGJ5IHRoZSBQYWNrYWdlLiBJZiB5b3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltKSBhZ2FpbnN0IGFueSBwYXJ0eSBhbGxlZ2luZwordGhhdCB0aGUgUGFja2FnZSBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudAoraW5mcmluZ2VtZW50LCB0aGVuIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSB0byB5b3Ugc2hhbGwgdGVybWluYXRlIG9uIHRoZQorZGF0ZSB0aGF0IHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworKDE0KSAgRGlzY2xhaW1lciBvZiBXYXJyYW50eToKK1RIRSBQQUNLQUdFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIEFORCBDT05UUklCVVRPUlMgIkFTCitJU2AgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLiBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBZT1VSIExPQ0FMCitMQVcuIFVOTEVTUyBSRVFVSVJFRCBCWSBMQVcsIE5PIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1IgV0lMTAorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFBBQ0tBR0UsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhMGFhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRApAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgKGMpIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTAtQ2xhdXNlIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTAtQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOGJkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UKQEAgLTAsMCArMSwxMiBAQAorQ29weXJpZ2h0IChDKSA8WUVBUj4gYnkgPE9XTkVSPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0yLUNsYXVzZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0yLUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGUwZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlCkBAIC0wLDAgKzEsMTMgQEAKKworVGhlIEZyZWVCU0QgQ29weXJpZ2h0CisKK0NvcHlyaWdodCAxOTkyLTIwMTAgVGhlIEZyZWVCU0QgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBGUkVFQlNEIFBST0pFQ1QgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGUkVFQlNEIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiB0aGUgRnJlZUJTRCBQcm9qZWN0LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMy1DbGF1c2UgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMy1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzODY1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZQpAQCAtMCwwICsxLDExIEBACisKK0NvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxPUkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtNC1DbGF1c2UgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtNC1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNjJkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZQpAQCAtMCwwICsxLDI5IEBACisKK0NvcHlyaWdodCAoYykgPHllYXI+LCA8Y29weXJpZ2h0IGhvbGRlcj4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIDxvcmdhbml6YXRpb24+LgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPG9yZ2FuaXphdGlvbj4gbm9yIHRoZQorICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDxDT1BZUklHSFQgSE9MREVSPiBgYEFTIElTYGAgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE4ZWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNMLTEuMApAQCAtMCwwICsxLDI1IEBACisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQml0c3RyZWFtVmVyYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYwM2FhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQml0c3RyZWFtVmVyYQpAQCAtMCwwICsxLDE2MCBAQAorQml0c3RyZWFtIFZlcmEgRm9udHMgQ29weXJpZ2h0CisKK1RoZSBmb250cyBoYXZlIGEgZ2VuZXJvdXMgY29weXJpZ2h0LCBhbGxvd2luZyBkZXJpdmF0aXZlIHdvcmtzIChhcworbG9uZyBhcyAiQml0c3RyZWFtIiBvciAiVmVyYSIgYXJlIG5vdCBpbiB0aGUgbmFtZXMpLCBhbmQgZnVsbAorcmVkaXN0cmlidXRpb24gKHNvIGxvbmcgYXMgdGhleSBhcmUgbm90ICpzb2xkKiBieSB0aGVtc2VsdmVzKS4gVGhleQorY2FuIGJlIGJlIGJ1bmRsZWQsIHJlZGlzdHJpYnV0ZWQgYW5kIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUuCisKK1RoZSBmb250cyBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisKK0NvcHlyaWdodAorPT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMyBieSBCaXRzdHJlYW0sIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQml0c3RyZWFtCitWZXJhIGlzIGEgdHJhZGVtYXJrIG9mIEJpdHN0cmVhbSwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGUgZm9udHMgYWNjb21wYW55aW5nIHRoaXMgbGljZW5zZSAoIkZvbnRzIikgYW5kIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiRm9udCBTb2Z0d2FyZSIpLCB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBGb250IFNvZnR3YXJlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgRm9udAorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBGb250IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAordG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IGFuZCB0cmFkZW1hcmsgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgRm9udCBTb2Z0d2FyZQordHlwZWZhY2VzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQsIGFsdGVyZWQsIG9yIGFkZGVkIHRvLCBhbmQgaW4KK3BhcnRpY3VsYXIgdGhlIGRlc2lnbnMgb2YgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgaW4gdGhlIEZvbnRzIG1heSBiZQorbW9kaWZpZWQgYW5kIGFkZGl0aW9uYWwgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgbWF5IGJlIGFkZGVkIHRvIHRoZQorRm9udHMsIG9ubHkgaWYgdGhlIGZvbnRzIGFyZSByZW5hbWVkIHRvIG5hbWVzIG5vdCBjb250YWluaW5nIGVpdGhlcgordGhlIHdvcmRzICJCaXRzdHJlYW0iIG9yIHRoZSB3b3JkICJWZXJhIi4KKworVGhpcyBMaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgdG8gRm9udHMKK29yIEZvbnQgU29mdHdhcmUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCisiQml0c3RyZWFtIFZlcmEiIG5hbWVzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgc29sZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2UgYnV0CitubyBjb3B5IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBGb250IFNvZnR3YXJlIHR5cGVmYWNlcyBtYXkgYmUgc29sZCBieQoraXRzZWxmLgorCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTAorQklUU1RSRUFNIE9SIFRIRSBHTk9NRSBGT1VOREFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCitPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVAorU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIEdub21lLCB0aGUgR25vbWUKK0ZvdW5kYXRpb24sIGFuZCBCaXRzdHJlYW0gSW5jLiwgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK290aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBGb250CitTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBHbm9tZSBGb3VuZGF0aW9uCitvciBCaXRzdHJlYW0gSW5jLiwgcmVzcGVjdGl2ZWx5LiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgY29udGFjdDoKK2ZvbnRzIGF0IGdub21lIGRvdCBvcmcuCisKK0NvcHlyaWdodCBGQVEKKz09PT09PT09PT09PT0KKworMS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoZSByZXNhbGUgcmVzdHJpY3Rpb24uLi4gV2hhdCBnaXZlcz8KKworQml0c3RyZWFtIGlzIGdpdmluZyBhd2F5IHRoZXNlIGZvbnRzLCBidXQgd2lzaGVzIHRvIGVuc3VyZSBpdHMKK2NvbXBldGl0b3JzIGNhbid0IGp1c3QgZHJvcCB0aGUgZm9udHMgYXMgaXMgaW50byBhIGZvbnQgc2FsZSBzeXN0ZW0KK2FuZCBzZWxsIHRoZW0gYXMgaXMuIEl0IHNlZW1zIGZhaXIgdGhhdCBpZiBCaXRzdHJlYW0gY2FuJ3QgbWFrZSBtb25leQorZnJvbSB0aGUgQml0c3RyZWFtIFZlcmEgZm9udHMsIHRoZWlyIGNvbXBldGl0b3JzIHNob3VsZCBub3QgYmUgYWJsZSB0bworZG8gc28gZWl0aGVyLiBZb3UgY2FuIHNlbGwgdGhlIGZvbnRzIGFzIHBhcnQgb2YgYW55IHNvZnR3YXJlIHBhY2thZ2UsCitob3dldmVyLgorCisyLiBJIHdhbnQgdG8gcGFja2FnZSB0aGVzZSBmb250cyBzZXBhcmF0ZWx5IGZvciBkaXN0cmlidXRpb24gYW5kCitzYWxlIGFzIHBhcnQgb2YgYSBsYXJnZXIgc29mdHdhcmUgcGFja2FnZSBvciBzeXN0ZW0uIENhbiBJIGRvIHNvPworCitZZXMuIEEgUlBNIG9yIERlYmlhbiBwYWNrYWdlIGlzIGEgImxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIiB0byBiZWdpbgord2l0aCwgYW5kIHlvdSBhcmVuJ3Qgc2VsbGluZyB0aGVtIGluZGVwZW5kZW50bHkgYnkgdGhlbXNlbHZlcy4KK1NlZSAxLiBhYm92ZS4KKworMy4gQXJlIGRlcml2YXRpdmUgd29ya3MgYWxsb3dlZD8KK1llcyEKKworNC4gQ2FuIEkgY2hhbmdlIG9yIGFkZCB0byB0aGUgZm9udChzKT8KK1llcywgYnV0IHlvdSBtdXN0IGNoYW5nZSB0aGUgbmFtZShzKSBvZiB0aGUgZm9udChzKS4KKworNS4gVW5kZXIgd2hhdCB0ZXJtcyBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBhbGxvd2VkPworCitZb3UgbXVzdCBjaGFuZ2UgdGhlIG5hbWUocykgb2YgdGhlIGZvbnRzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGUKK3F1YWxpdHkgb2YgdGhlIGZvbnRzLCBib3RoIHRvIHByb3RlY3QgQml0c3RyZWFtIGFuZCBHbm9tZS4gV2Ugd2FudCB0bworZW5zdXJlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gaGFzIG9wZW5lZCBhIGZvbnQgc3BlY2lmaWNhbGx5IG9mIHRoZXNlCituYW1lcywgaXQgZ2V0cyB3aGF0IGl0IGV4cGVjdHMgKHRob3VnaCBvZiBjb3Vyc2UsIHVzaW5nIGZvbnRjb25maWcsCitzdWJzdGl0dXRpb25zIGNvdWxkIHN0aWxsIGNvdWxkIGhhdmUgb2NjdXJyZWQgZHVyaW5nIGZvbnQKK29wZW5pbmcpLiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBCaXRzdHJlYW0gY29weXJpZ2h0LiBBZGRpdGlvbmFsCitjb3B5cmlnaHRzIGNhbiBiZSBhZGRlZCwgYXMgcGVyIGNvcHlyaWdodCBsYXcuIEhhcHB5IEZvbnQgSGFja2luZyEKKworNi4gSWYgSSBoYXZlIGltcHJvdmVtZW50cyBmb3IgQml0c3RyZWFtIFZlcmEsIGlzIGl0IHBvc3NpYmxlIHRoZXkgbWlnaHQgZ2V0CithZG9wdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucz8KKworWWVzLiBUaGUgY29udHJhY3QgYmV0d2VlbiB0aGUgR25vbWUgRm91bmRhdGlvbiBhbmQgQml0c3RyZWFtIGhhcworcHJvdmlzaW9ucyBmb3Igd29ya2luZyB3aXRoIEJpdHN0cmVhbSB0byBlbnN1cmUgcXVhbGl0eSBhZGRpdGlvbnMgdG8KK3RoZSBCaXRzdHJlYW0gVmVyYSBmb250IGZhbWlseS4gUGxlYXNlIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgc3VjaAorYWRkaXRpb25zLiBOb3RlLCB0aGF0IGluIGdlbmVyYWwsIHdlIHdpbGwgd2FudCBzdWNoIGFkZGl0aW9ucyBmb3IgdGhlCitlbnRpcmUgZmFtaWx5LCBub3QganVzdCBhIHNpbmdsZSBmb250LCBhbmQgdGhhdCB5b3UnbGwgaGF2ZSB0byBrZWVwCitib3RoIEdub21lIGFuZCBKaW0gTHlsZXMsIFZlcmEncyBkZXNpZ25lciwgaGFwcHkhIFRvIG1ha2Ugc2Vuc2UgdG8gYWRkCitnbHlwaHMgdG8gdGhlIGZvbnQsIHRoZXkgbXVzdCBiZSBzdHlsaXN0aWNhbGx5IGluIGtlZXBpbmcgd2l0aCBWZXJhJ3MKK2Rlc2lnbi4gVmVyYSBjYW5ub3QgYmVjb21lIGEgInJhbnNvbSBub3RlIiBmb250LiBKaW0gTHlsZXMgd2lsbCBiZQorcHJvdmlkaW5nIGEgZG9jdW1lbnQgZGVzY3JpYmluZyB0aGUgZGVzaWduIGVsZW1lbnRzIHVzZWQgaW4gVmVyYSwgYXMgYQorZ3VpZGUgYW5kIGFpZCBmb3IgcGVvcGxlIGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nIHRvIFZlcmEuCisKKzcuIEkgd2FudCB0byBzZWxsIGEgc29mdHdhcmUgcGFja2FnZSB0aGF0IHVzZXMgdGhlc2UgZm9udHM6IENhbiBJIGRvIHNvPworCitTdXJlLiBCdW5kbGUgdGhlIGZvbnRzIHdpdGggeW91ciBzb2Z0d2FyZSBhbmQgc2VsbCB5b3VyIHNvZnR3YXJlCit3aXRoIHRoZSBmb250cy4gVGhhdCBpcyB0aGUgaW50ZW50IG9mIHRoZSBjb3B5cmlnaHQuCisKKzguIElmIGFwcGxpY2F0aW9ucyBoYXZlIGJ1aWx0IHRoZSBuYW1lcyAiQml0c3RyZWFtIFZlcmEiIGludG8gdGhlbSwKK2NhbiBJIG92ZXJyaWRlIHRoaXMgc29tZWhvdyB0byB1c2UgZm9udHMgb2YgbXkgY2hvb3Npbmc/CisKK1RoaXMgZGVwZW5kcyBvbiBleGFjdCBkZXRhaWxzIG9mIHRoZSBzb2Z0d2FyZS4gTW9zdCBvcGVuIHNvdXJjZQorc3lzdGVtcyBhbmQgc29mdHdhcmUgKGUuZy4sIEdub21lLCBLREUsIGV0Yy4pIGFyZSBub3cgY29udmVydGluZyB0bwordXNlIGZvbnRjb25maWcgKHNlZSB3d3cuZm9udGNvbmZpZy5vcmcpIHRvIGhhbmRsZSBmb250IGNvbmZpZ3VyYXRpb24sCitzZWxlY3Rpb24gYW5kIHN1YnN0aXR1dGlvbjsgaXQgaGFzIHByb3Zpc2lvbnMgZm9yIG92ZXJyaWRpbmcgZm9udAorbmFtZXMgYW5kIHN1YnNpdHV0aW5nIGFsdGVybmF0aXZlcy4gQW4gZXhhbXBsZSBpcyBwcm92aWRlZCBieSB0aGUKK3N1cHBsaWVkIGxvY2FsLmNvbmYgZmlsZSwgd2hpY2ggY2hvb3NlcyB0aGUgZmFtaWx5IEJpdHN0cmVhbSBWZXJhIGZvcgorInNhbnMiLCAic2VyaWYiIGFuZCAibW9ub3NwYWNlIi4gT3RoZXIgc29mdHdhcmUgKGUuZy4sIHRoZSBYRnJlZTg2Citjb3JlIHNlcnZlcikgaGFzIG90aGVyIG1lY2hhbmlzbXMgZm9yIGZvbnQgc3Vic3RpdHV0aW9uLgorCitTaG93IGRldGFpbHMgSGlkZSBkZXRhaWxzCisKK0NoYW5nZSBsb2cKK3IyMDExIGJ5IG1hcmsubmlja2VsIG9uIE1hciAzLCAyMDExICAgRGlmZgorCitNYWpvcml0eSBvZiBNdWx0aS1MaW5lIHRleHQgZWRpdGluZyBpcyBpbgordGhlIGNvbW1pdC4gIEFsc28gYWRkZWQgc29tZSBzcGVjaWZpYyBmcmVlCitmb250cyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBzZXQgYXMgd2UKK25lZWQgc29tZSBhZGRpdGlvbmFsIGZvbnQgbWV0cmljcyB0aGF0IHdlCit1c2UgaW4gdGhlIFRleHQgRWRpdGluZyByZW5kZXJpbmcKK3BpcGVsaW5lLgorCitZb3UgY2FuIHNlZSB0aGUgZm9udCBsaWNlbnNlcyBpbiB0aGUKK2VkaXRvci9mb250cyBmb2xkZXIgdW5kZXIgZWFjaCBmb250LgorCitTdGlsbCBoYXZlIHNvbWUgY2xlYW51cCB0byBkbyB0byBhZGQgdGhlCit0ZXh0IGZvcm1hdHRpbmcgKGxlZnQscmlnaHQsY2VudGVyKSBhcworLi4uCisKK0dvIHRvOiAJCitIaWRlIGNvbW1lbnRzCitTaG93IGNvbW1lbnRzCisKK09sZGVyIHJldmlzaW9ucworQWxsIHJldmlzaW9ucyBvZiB0aGlzIGZpbGUKKworRmlsZSBpbmZvCitTaXplOiA1OTUzIGJ5dGVzLCAxMjMgbGluZXMKK1ZpZXcgcmF3IGZpbGUKKworRmlsZSBwcm9wZXJ0aWVzCisKK3N2bjpleGVjdXRhYmxlCisgICAgKgorCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQVRPU0wtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZThhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQVRPU0wtMS4xCkBAIC0wLDAgKzEsMTE2IEBACisKK0NvbXB1dGVyIEFzc29jaWF0ZXMgVHJ1c3RlZCBPcGVuIFNvdXJjZSBMaWNlbnNlCitWZXJzaW9uIDEuMQorCisKKyh0ZXh0KQorCitQTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWSBBTkQgSU4gSVRTIEVOVElSRVRZLiBUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NUFVURVIgQVNTT0NJQVRFUyBUUlVTVEVEIE9QRU4gU09VUkNFIExJQ0VOU0UgKCJMSUNFTlNFIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBUSEUgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UuCisKK0xpY2Vuc2UgQmFja2dyb3VuZAorQ29tcHV0ZXIgQXNzb2NpYXRlcyBJbnRlcm5hdGlvbmFsLCBJbmMuIChDQSkgYmVsaWV2ZXMgaW4gb3BlbiBzb3VyY2UuIFdlIGJlbGlldmUgdGhhdCB0aGUgb3BlbiBzb3VyY2UgZGV2ZWxvcG1lbnQgYXBwcm9hY2ggY2FuIHRha2UgYXBwcm9wcmlhdGUgc29mdHdhcmUgcHJvZ3JhbXMgdG8gdW5wcmVjZWRlbnRlZCBsZXZlbHMgb2YgcXVhbGl0eSwgZ3Jvd3RoLCBhbmQgaW5ub3ZhdGlvbi4gVG8gZGVtb25zdHJhdGUgb3VyIGNvbnRpbnVpbmcgY29tbWl0bWVudCB0byBvcGVuIHNvdXJjZSwgd2UgYXJlIHJlbGVhc2luZyB0aGUgUHJvZ3JhbSAoYXMgZGVmaW5lZCBiZWxvdykgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcGVybWl0IGNvbnRyaWJ1dG9ycyBhbmQgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSB0byB1c2UgdGhlIFByb2dyYW0sIGluY2x1ZGluZyBpdHMgc291cmNlIGNvZGUsIGZyZWVseSBhbmQgd2l0aG91dCBtYW55IG9mIHRoZSBjb25jZXJucyBvZiBzb21lIG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2VzLiBBbHRob3VnaCB3ZSBleHBlY3QgdGhlIHVuZGVybHlpbmcgUHJvZ3JhbSwgYW5kIENvbnRyaWJ1dGlvbnMgKGFzIGRlZmluZWQgYmVsb3cpIG1hZGUgdG8gc3VjaCBQcm9ncmFtLCB0byByZW1haW4gb3BlbiwgdGhpcyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIHBlcm1pdCB5b3UgdG8gbWFpbnRhaW4geW91ciBvd24gc29mdHdhcmUgcHJvZ3JhbXMgZnJlZSBvZiB0aGlzIExpY2Vuc2UgdW5sZXNzIHlvdSBjaG9vc2UgdG8gZG8gc28uIFRodXMsIG9ubHkgeW91ciBDb250cmlidXRpb25zIHRvIHRoZSBQcm9ncmFtIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworVGhlIHByb3Zpc2lvbnMgdGhhdCBmb2xsb3cgc2V0IGZvcnRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB5b3UgbWF5IHVzZSB0aGUgUHJvZ3JhbS4KKworMS4gREVGSU5JVElPTlMKKworMS4xIENvbnRyaWJ1dGlvbiBtZWFucyAoYSkgaW4gdGhlIGNhc2Ugb2YgQ0EsIHRoZSBPcmlnaW5hbCBQcm9ncmFtOyBhbmQgKGIpIGluIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IgKGluY2x1ZGluZyBDQSksIGNoYW5nZXMgYW5kIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSwgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IgdG8gdW5hZmZpbGlhdGVkIHRoaXJkIHBhcnRpZXMuIEEgQ29udHJpYnV0aW9uIG9yaWdpbmF0ZXMgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6ICh4KSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kICh5KSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKzEuMiBDb250cmlidXRvciBtZWFucyBDQSBhbmQgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworMS4zIENvbnRyaWJ1dG9yIFZlcnNpb24gbWVhbnMgYXMgdG8gYSBDb250cmlidXRvciwgdGhhdCB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIHRoYXQgaW5jbHVkZXMgdGhlIENvbnRyaWJ1dG9ycyBDb250cmlidXRpb24gYnV0IG5vdCBhbnkgQ29udHJpYnV0aW9ucyBtYWRlIHRvIHRoZSBQcm9ncmFtIHRoZXJlYWZ0ZXIuCisKKzEuNCBMYXJnZXIgV29yayBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyB0aGUgUHJvZ3JhbSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS41IExpY2Vuc2VkIFBhdGVudHMgbWVhbiBwYXRlbnRzIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisxLjYgT3JpZ2luYWwgUHJvZ3JhbSBtZWFucyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgdG8gd2hpY2ggdGhpcyBMaWNlbnNlIGlzIGF0dGFjaGVkIGFuZCBhcyByZWxlYXNlZCBieSBDQSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisxLjcgUHJvZ3JhbSBtZWFucyB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgQ29udHJpYnV0aW9ucy4KKworMS44IFJlY2lwaWVudCBtZWFucyBhbnlvbmUgd2hvIG1vZGlmaWVzLCBjb3BpZXMsIHVzZXMgb3IgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCisyLjEgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGFuIGlycmV2b2NhYmxlLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoZSBsaWNlbnNlIHByb3ZpZGVkIGluIHRoaXMgU2VjdGlvbiAyLjEgc2hhbGwgbm90IGluY2x1ZGUgYSBsaWNlbnNlIHRvIGFueSBMaWNlbnNlZCBQYXRlbnRzIG9mIGEgQ29udHJpYnV0b3IuCisKKzIuMiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYW4gaXJyZXZvY2FibGUsIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gdGhlIExpY2Vuc2VkIFBhdGVudHMgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGUgbGljZW5zZSBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjIgc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyB0aGUgTGljZW5zZWQgUGF0ZW50cyB0byBiZSBpbmZyaW5nZWQgYnkgc3VjaCBjb21iaW5hdGlvbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIG5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIFNlY3Rpb24gMi4yOiAoYSkgZm9yIGFueSBjb2RlIG9yIHdvcmtzIHRoYXQgZG8gbm90IGluY2x1ZGUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24sIGFzIGl0IGV4aXN0cyBhbmQgaXMgdXNlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGhlcmVvZjsgKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIENvbnRyaWJ1dGlvbnMgbWFkZSBieSBlYWNoIHN1Y2ggQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIChjKSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgUGF0ZW50cyBpbmZyaW5nZWQgYnkgdGhlIFByb2dyYW0gaW4gdGhlIGFic2VuY2Ugb2YgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKzIuMyBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMi40LCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LgorCisyLjQgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0IGl0IGhhcyBhbGwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiB0aGUgY29weXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9ucywgYW5kIGhhcyB0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgorCiszLiBESVNUUklCVVRJT04gUkVRVUlSRU1FTlRTCisKKzMuMSBJZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBvYmplY3QgY29kZSBmb3JtLCB0aGVuIGEgcHJvbWluZW50IG5vdGljZSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBDb250cmlidXRvciB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHRoZSBzb3VyY2UgY29kZS4gQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2U7IGFuZAoraXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdzsKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3Oworc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggYXJlIGluY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yIGF0IHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lci4KKzMuMiBXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQKK2EgY29weSBvZiB0aGlzIExpY2Vuc2UgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKzMuMyBUaGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYW55IENvbnRyaWJ1dG9yLiBIb3dldmVyLCBDb250cmlidXRvcnMgbWF5IG9ubHkgY2hhcmdlIFJlY2lwaWVudHMgYSBvbmUtdGltZSwgdXBmcm9udCBmZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBtYXkgbm90IGNoYXJnZSBSZWNpcGllbnRzIGFueSByZWN1cnJpbmcgY2hhcmdlLCBsaWNlbnNlIGZlZSwgb3IgYW55IG9uZ29pbmcgcm95YWx0eSBmb3IgdGhlIFJlY2lwaWVudHMgZXhlcmNpc2Ugb2YgaXRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgdG8gdGhlIFByb2dyYW0uIENvbnRyaWJ1dG9ycyBzaGFsbCBtYWtlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gdGhleSBkaXN0cmlidXRlIGF2YWlsYWJsZSBhdCBhIGNvc3QsIGlmIGFueSwgZXF1YWwgdG8gdGhlIGNvc3QgdG8gdGhlIENvbnRyaWJ1dG9yIHRvIHBoeXNpY2FsbHkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgd29yay4gSXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBMaWNlbnNlIHRvIHByb2hpYml0IGEgQ29udHJpYnV0b3IgZnJvbSBjaGFyZ2luZyBmZWVzIGZvciBhbnkgc2VydmljZSBvciBtYWludGVuYW5jZSB0aGF0IGEgQ29udHJpYnV0b3IgbWF5IGNoYXJnZSB0byBhIFJlY2lwaWVudCwgc28gbG9uZyBhcyBzdWNoIGZlZXMgYXJlIG5vdCBhbiBhdHRlbXB0IHRvIGNpcmN1bXZlbnQgdGhlIGZvcmVnb2luZyByZXN0cmljdGlvbnMgb24gY2hhcmdpbmcgcm95YWx0aWVzIG9yIG90aGVyIHJlY3VycmluZyBmZWVzIGZvciB0aGUgUHJvZ3JhbSBpdHNlbGYuCisKKzMuNCBBIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIHRoZSBDb250cmlidXRvciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBQcm9ncmFtLiBBbnkgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBpbmNsdWRpbmcgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBtYXkgc3ViamVjdCBpdHNlbGYsIGJ1dCBub3QgYW55IG90aGVyIENvbnRyaWJ1dG9yLCB0byBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcGVyZm9ybWFuY2Ugd2FycmFudGllcyBhbmQgbm9uLWluZnJpbmdlbWVudCByZXByZXNlbnRhdGlvbnMgb24gc3VjaENvbnRyaWJ1dG9ycyBiZWhhbGYuIE5vIENvbnRyaWJ1dG9yIG1heSBjcmVhdGUgYW55IGFkZGl0aW9uYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoQ29tbWVyY2lhbCBDb250cmlidXRvcikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IpIHdobyBtYWRlIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2dyYW0gZGlzdHJpYnV0ZWQgYnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5IExvc3NlcykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucywgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIGNvbnRyYWN0dWFsIGNvbW1pdG1lbnRzLCBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorCiszLjUgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgKGEpIGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIC4uL0lQX0lTU1VFUywgYW5kIChiKSBub3RpZnkgQ0EgaW4gd3JpdGluZyBhdCBDb21wdXRlciBBc3NvY2lhdGVzIEludGVybmF0aW9uYWwsIEluYy4sIE9uZSBDb21wdXRlciBBc3NvY2lhdGVzIFBsYXphLCBJc2xhbmRpYSwgTmV3IFlvcmsgMTE3NDksIEF0dG46IE9wZW4gU291cmNlIEdyb3VwIG9yIGJ5IGVtYWlsIGF0IG9wZW5zb3VyY2VAY2EuY29tLCBib3RoIGRlc2NyaWJpbmcgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgUmVjaXBpZW50IGFuZCBDQSB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0IHdpdGggcmVnYXJkIHRvIHN1Y2ggbWF0dGVyLiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBDb250cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUsIENvbnRyaWJ1dG9yIHNoYWxsIGFsc28gcHJvbXB0bHkgbW9kaWZ5IHRoZSBJUF9JU1NVRVMgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBQcm9ncmFtIHRoYXQgc3VjaCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCiszLjYgUmVjaXBpZW50IHNoYWxsIG5vdCByZW1vdmUsIG9ic2N1cmUsIG9yIG1vZGlmeSBhbnkgQ0Egb3Igb3RoZXIgQ29udHJpYnV0b3IgY29weXJpZ2h0IG9yIHBhdGVudCBwcm9wcmlldGFyeSBub3RpY2VzIGFwcGVhcmluZyBpbiB0aGUgUHJvZ3JhbSwgd2hldGhlciBpbiB0aGUgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIG9yIGluIGFueSBkb2N1bWVudGF0aW9uLiBJbiBhZGRpdGlvbiB0byB0aGUgb2JsaWdhdGlvbnMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNCwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTlRSSUJVVElPTiBSRVNUUklDVElPTlMKKworNC4xIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBjYXVzZSB0aGUgUHJvZ3JhbSB0byB3aGljaCB0aGUgQ29udHJpYnV0b3IgcHJvdmlkZXMgYSBDb250cmlidXRpb24gdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgdGhlIENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIGl0cyB2ZXJzaW9uIG9mIHRoZSBQcm9ncmFtIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBDb250cmlidXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSB0aGUgUHJvZ3JhbSBkaXN0cmlidXRlZCBieSBhIHByaW9yIENvbnRyaWJ1dG9yLCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHByaW9yIENvbnRyaWJ1dG9yIGZyb20gd2hpY2ggc3VjaCBDb250cmlidXRpb24gd2FzIGRlcml2ZWQsIGluIChhKSB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIGV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggdGhlIENvbnRyaWJ1dG9yIGRlc2NyaWJlcyB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgUHJvZ3JhbS4KKworNS4gTk8gV0FSUkFOVFkKKworNS4xIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMgSVMgQU5EIElOIElUUyBQUkVTRU5UIFNUQVRFIEFORCBDT05ESVRJT04uIE5PIFdBUlJBTlRZLCBSRVBSRVNFTlRBVElPTiwgQ09ORElUSU9OLCBVTkRFUlRBS0lORyBPUiBURVJNLCBFWFBSRVNTIE9SIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIEFTIFRPIFRIRSBDT05ESVRJT04sIFFVQUxJVFksIERVUkFCSUxJVFksIFBFUkZPUk1BTkNFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSBPRiBUSEUgUFJPR1JBTSBJUyBHSVZFTiBPUiBBU1NVTUVEIEJZIEFOWSBDT05UUklCVVRPUiBBTkQgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TLCBDT05ESVRJT05TLCBVTkRFUlRBS0lOR1MgQU5EIFRFUk1TIEFSRSBIRVJFQlkgRVhDTFVERUQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuCisKKzUuMiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis1LjMgRWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlIG9wZXJhdGlvbiBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBQcm9ncmFtIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCis2LjEgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBBTkQgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBOTyBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRSQURFTUFSS1MgQU5EIEJSQU5ESU5HCisKKzcuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IFJlY2lwaWVudCBvciBhbnkgdGhpcmQgcGFydHkgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgbm93IG9yIHN1YnNlcXVlbnRseSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5jYS5jb20vY2F0cmRtcmsuaHRtLCBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIENBIChjb2xsZWN0aXZlbHkgQ0EgTWFya3MpIG9yIHRvIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgbG9nbyBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIFJlY2lwaWVudCBhZ3JlZXMgbm90IHRvIHVzZSBhbnkgQ0EgTWFya3MgaW4gb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0gb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbS4KKworNy4yIFN1YmplY3QgdG8gU2VjdGlvbiA3LjEsIFJlY2lwaWVudHMgbWF5IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgdHJhZGVtYXJrcywgbG9nb3MsIGFuZCBwcm9kdWN0IG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgUmVjaXBpZW50IHByb3ZpZGVkIHRoYXQgYWxsIGNvcHlyaWdodCBhbmQgb3RoZXIgYXR0cmlidXRpb24gbm90aWNlcyByZW1haW4gaW4gdGhlIFByb2dyYW0uCisKKzguIFBBVEVOVCBMSVRJR0FUSU9OCisKKzguMSBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBwZXJzb24gb3IgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyLjIgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworOS4gT1dORVJTSElQCisKKzkuMSBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpbiBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IENvbnRyaWJ1dGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBDQSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIGFueSBDb250cmlidXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIENBIChDQSBDb250cmlidXRpb25zKSwgYW5kIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBDQSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQ0EgQ29udHJpYnV0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTAuIFRFUk1JTkFUSU9OCisKKzEwLjEgQWxsIG9mIFJlY2lwaWVudHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgUmVjaXBpZW50cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgYXMgYSBDb250cmlidXRvciByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworMTEuIEdFTkVSQUwKKworMTEuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCisxMS4yIENBIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lIG90aGVyIHRoYW4gQ0EgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLgorCisxMS4zIElmIGl0IGlzIGltcG9zc2libGUgZm9yIFJlY2lwaWVudCB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIFByb2dyYW0gZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIFJlY2lwaWVudCBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBJUF9JU1NVRVMgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgUHJvZ3JhbSBzb3VyY2UgY29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgUmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworMTEuNCBUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLiBObyBSZWNpcGllbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggUmVjaXBpZW50IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIGEgUmVjaXBpZW50IGFuZCBDQSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIGFuZCBSZWNpcGllbnQgYW5kIENBIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBkaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTEuNSBXaGVyZSBSZWNpcGllbnQgaXMgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZSBmb2xsb3dpbmcgY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzIHBhcnRpZXMgY29udHJhY3RhbnRlcyBjb25maXJtZW50IHF1YGVsbGVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBhc3NvY2llcyBzb2llbnQgcmVkaWdlcyBlbiBhbmdsYWlzLgorCisxMS42IFRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gYWxsIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MsIHJlc3RyaWN0aW9ucyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggUmVjaXBpZW50IHJlY2VpdmVzIHRoZSBQcm9ncmFtLiBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBjb21wbHlpbmcgd2l0aCBhbmQgZW5zdXJpbmcgdGhhdCBSZWNpcGllbnQgZG9lcyBub3QgZXhwb3J0LCByZS1leHBvcnQsIG9yIGltcG9ydCB0aGUgUHJvZ3JhbSBpbiB2aW9sYXRpb24gb2Ygc3VjaCBsYXdzLCByZXN0cmljdGlvbnMgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYW55IG5lY2Vzc2FyeSBsaWNlbnNlcyBhbmQgYXV0aG9yaXphdGlvbnMuCisKKzExLjcgVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBiNzUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wCkBAIC0wLDAgKzEsNjAgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxN2E0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTNkMTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41CkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZDU2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMApAQCAtMCwwICsxLDcwIEBACisKK0NyZWF0aXZlIENvbW1vbnMKK0F0dHJpYnV0aW9uIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIChpdikgLCBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQgKGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWQyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzUxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAKQEAgLTAsMCArMSw2NiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU2MWUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41CkBAIC0wLDAgKzEsNjYgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzQyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAKQEAgLTAsMCArMSw3MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQoZCkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kLCAoaXYpIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdXIgZXhlcmNpc2Ugb2Ygc3VjaCByaWdodHMgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGIpIGFuZCBvdGhlcndpc2Ugd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxN2Q4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAKQEAgLTAsMCArMSw1IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9EZXJpdnMtTm9uQ29tbWVyY2lhbCAxLjAgIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4gTGljZW5zZSAgVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLiAgMS4gRGVmaW5pdGlvbnMgICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiAiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLiAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6ICB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7IHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7IFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLiAgNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOiAgWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4gNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyICBCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6IExpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsgVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICA3LiBUZXJtaW5hdGlvbiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuIDguIE1pc2NlbGxhbmVvdXMgIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuIENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLiAgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiAgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NmMxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cyAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZiB0aGF0IHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggY292ZXIgdmVyc2lvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3YWE1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNQpAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzk1NGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wCkBAIC0wLDAgKzEsNjkgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIEFkYXB0YXRpb25zLiBTdWJqZWN0IHRvIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbiA0KGQpLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIDQoYSksIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyAoaWlpKSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVUkksIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3VyIGV4ZXJjaXNlIG9mIHN1Y2ggcmlnaHRzIGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKSBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgdGhhdCBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ZmQ2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMApAQCAtMCwwICsxLDY0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwN2Y4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMApAQCAtMCwwICsxLDY4IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGUpIGFuZCA0KGYpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNWNjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUKQEAgLTAsMCArMSw2OCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChlKSBhbmQgNChmKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChkKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2IxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAKQEAgLTAsMCArMSw3NCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGcpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXI6IChpKSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDMuMCBVUykgKCJBcHBsaWNhYmxlIExpY2Vuc2UiKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVUkksIGZvciBBcHBsaWNhYmxlIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIGVhY2ggQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgYXMgaW5jbHVkZWQgaW4gdGhlIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbi1uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGQpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORyBBTkQgVE8gVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBUSElTIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTgxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAKQEAgLTAsMCArMSw1OSBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmM5NzRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wCkBAIC0wLDAgKzEsNjIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU0NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41CkBAIC0wLDAgKzEsNjIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjY0ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wCkBAIC0wLDAgKzEsNjggQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIEFkYXB0YXRpb25zLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGIpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxMzk0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODI0MzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wCkBAIC0wLDAgKzEsNjcgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIERlcml2YXRpdmUgV29ya3MgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZGQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNQpAQCAtMCwwICsxLDY3IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBzb2NpZXR5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiYmQ2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMApAQCAtMCwwICsxLDc0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2UiIG1lYW5zIGEgbGljZW5zZSB0aGF0IGlzIGxpc3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9jb21wYXRpYmxlbGljZW5zZXMgdGhhdCBoYXMgYmVlbiBhcHByb3ZlZCBieSBDcmVhdGl2ZSBDb21tb25zIGFzIGJlaW5nIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcsIGF0IGEgbWluaW11bSwgYmVjYXVzZSB0aGF0IGxpY2Vuc2U6IChpKSBjb250YWlucyB0ZXJtcyB0aGF0IGhhdmUgdGhlIHNhbWUgcHVycG9zZSwgbWVhbmluZyBhbmQgZWZmZWN0IGFzIHRoZSBMaWNlbnNlIEVsZW1lbnRzIG9mIHRoaXMgTGljZW5zZTsgYW5kLCAoaWkpIGV4cGxpY2l0bHkgcGVybWl0cyB0aGUgcmVsaWNlbnNpbmcgb2YgYWRhcHRhdGlvbnMgb2Ygd29ya3MgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlIHVuZGVyIHRoaXMgTGljZW5zZSBvciBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mOiAoaSkgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVVMpKTsgKGl2KSBhIENyZWF0aXZlIENvbW1vbnMgQ29tcGF0aWJsZSBMaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciBvbmUgb2YgdGhlIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiAoaXYpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciB0aGUgdGVybXMgb2YgYW55IG9mIHRoZSBsaWNlbnNlcyBtZW50aW9uZWQgaW4gKGkpLCAoaWkpIG9yIChpaWkpICh0aGUgIkFwcGxpY2FibGUgTGljZW5zZSIpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBnZW5lcmFsbHkgYW5kIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9uczogKEkpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJIGZvciwgdGhlIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJSSkgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlOyAoSUlJKSBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGFzIGluY2x1ZGVkIGluIHRoZSBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJVikgd2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgKGl2KSAsIGNvbnNpc3RlbnQgd2l0aCBTc2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQzAtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyY2Y4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQzAtMS4wCkBAIC0wLDAgKzEsMzIgQEAKKworQ3JlYXRpdmUgQ29tbW9ucyBaZXJvIDEuMCBVbml2ZXJzYWwgKENDMCkKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRE9DVU1FTlQgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MgUFJPVklERUQgSEVSRVVOREVSLCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFIElORk9STUFUSU9OIE9SIFdPUktTIFBST1ZJREVEIEhFUkVVTkRFUi4KK1N0YXRlbWVudCBvZiBQdXJwb3NlCisKK1RoZSBsYXdzIG9mIG1vc3QganVyaXNkaWN0aW9ucyB0aHJvdWdob3V0IHRoZSB3b3JsZCBhdXRvbWF0aWNhbGx5IGNvbmZlciBleGNsdXNpdmUgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyAoZGVmaW5lZCBiZWxvdykgdXBvbiB0aGUgY3JlYXRvciBhbmQgc3Vic2VxdWVudCBvd25lcihzKSAoZWFjaCBhbmQgYWxsLCBhbiAib3duZXIiKSBvZiBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgYW5kL29yIGEgZGF0YWJhc2UgKGVhY2gsIGEgIldvcmsiKS4KKworQ2VydGFpbiBvd25lcnMgd2lzaCB0byBwZXJtYW5lbnRseSByZWxpbnF1aXNoIHRob3NlIHJpZ2h0cyB0byBhIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyB0byBhIGNvbW1vbnMgb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzICgiQ29tbW9ucyIpIHRoYXQgdGhlIHB1YmxpYyBjYW4gcmVsaWFibHkgYW5kIHdpdGhvdXQgZmVhciBvZiBsYXRlciBjbGFpbXMgb2YgaW5mcmluZ2VtZW50IGJ1aWxkIHVwb24sIG1vZGlmeSwgaW5jb3Jwb3JhdGUgaW4gb3RoZXIgd29ya3MsIHJldXNlIGFuZCByZWRpc3RyaWJ1dGUgYXMgZnJlZWx5IGFzIHBvc3NpYmxlIGluIGFueSBmb3JtIHdoYXRzb2V2ZXIgYW5kIGZvciBhbnkgcHVycG9zZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCBwdXJwb3Nlcy4gVGhlc2Ugb3duZXJzIG1heSBjb250cmlidXRlIHRvIHRoZSBDb21tb25zIHRvIHByb21vdGUgdGhlIGlkZWFsIG9mIGEgZnJlZSBjdWx0dXJlIGFuZCB0aGUgZnVydGhlciBwcm9kdWN0aW9uIG9mIGNyZWF0aXZlLCBjdWx0dXJhbCBhbmQgc2NpZW50aWZpYyB3b3Jrcywgb3IgdG8gZ2FpbiByZXB1dGF0aW9uIG9yIGdyZWF0ZXIgZGlzdHJpYnV0aW9uIGZvciB0aGVpciBXb3JrIGluIHBhcnQgdGhyb3VnaCB0aGUgdXNlIGFuZCBlZmZvcnRzIG9mIG90aGVycy4KKworRm9yIHRoZXNlIGFuZC9vciBvdGhlciBwdXJwb3NlcyBhbmQgbW90aXZhdGlvbnMsIGFuZCB3aXRob3V0IGFueSBleHBlY3RhdGlvbiBvZiBhZGRpdGlvbmFsIGNvbnNpZGVyYXRpb24gb3IgY29tcGVuc2F0aW9uLCB0aGUgcGVyc29uIGFzc29jaWF0aW5nIENDMCB3aXRoIGEgV29yayAodGhlICJBZmZpcm1lciIpLCB0byB0aGUgZXh0ZW50IHRoYXQgaGUgb3Igc2hlIGlzIGFuIG93bmVyIG9mIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmssIHZvbHVudGFyaWx5IGVsZWN0cyB0byBhcHBseSBDQzAgdG8gdGhlIFdvcmsgYW5kIHB1YmxpY2x5IGRpc3RyaWJ1dGUgdGhlIFdvcmsgdW5kZXIgaXRzIHRlcm1zLCB3aXRoIGtub3dsZWRnZSBvZiBoaXMgb3IgaGVyIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgYW5kIHRoZSBtZWFuaW5nIGFuZCBpbnRlbmRlZCBsZWdhbCBlZmZlY3Qgb2YgQ0MwIG9uIHRob3NlIHJpZ2h0cy4KKworMS4gQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cy4gQSBXb3JrIG1hZGUgYXZhaWxhYmxlIHVuZGVyIENDMCBtYXkgYmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgKCJDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIikuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgdGhlIGZvbGxvd2luZzoKKwordGhlIHJpZ2h0IHRvIHJlcHJvZHVjZSwgYWRhcHQsIGRpc3RyaWJ1dGUsIHBlcmZvcm0sIGRpc3BsYXksIGNvbW11bmljYXRlLCBhbmQgdHJhbnNsYXRlIGEgV29yazsKK21vcmFsIHJpZ2h0cyByZXRhaW5lZCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGFuZC9vciBwZXJmb3JtZXIocyk7CitwdWJsaWNpdHkgYW5kIHByaXZhY3kgcmlnaHRzIHBlcnRhaW5pbmcgdG8gYSBwZXJzb25gcyBpbWFnZSBvciBsaWtlbmVzcyBkZXBpY3RlZCBpbiBhIFdvcms7CityaWdodHMgcHJvdGVjdGluZyBhZ2FpbnN0IHVuZmFpciBjb21wZXRpdGlvbiBpbiByZWdhcmRzIHRvIGEgV29yaywgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgaW4gcGFyYWdyYXBoIDQoYSksIGJlbG93OworcmlnaHRzIHByb3RlY3RpbmcgdGhlIGV4dHJhY3Rpb24sIGRpc3NlbWluYXRpb24sIHVzZSBhbmQgcmV1c2Ugb2YgZGF0YSBpbiBhIFdvcms7CitkYXRhYmFzZSByaWdodHMgKHN1Y2ggYXMgdGhvc2UgYXJpc2luZyB1bmRlciBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4gUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbiBvZiBkYXRhYmFzZXMsIGFuZCB1bmRlciBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFueSBhbWVuZGVkIG9yIHN1Y2Nlc3NvciB2ZXJzaW9uIG9mIHN1Y2ggZGlyZWN0aXZlKTsgYW5kCitvdGhlciBzaW1pbGFyLCBlcXVpdmFsZW50IG9yIGNvcnJlc3BvbmRpbmcgcmlnaHRzIHRocm91Z2hvdXQgdGhlIHdvcmxkIGJhc2VkIG9uIGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSwgYW5kIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgdGhlcmVvZi4KKzIuIFdhaXZlci4gVG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnksIGJ1dCBub3QgaW4gY29udHJhdmVudGlvbiBvZiwgYXBwbGljYWJsZSBsYXcsIEFmZmlybWVyIGhlcmVieSBvdmVydGx5LCBmdWxseSwgcGVybWFuZW50bHksIGlycmV2b2NhYmx5IGFuZCB1bmNvbmRpdGlvbmFsbHkgd2FpdmVzLCBhYmFuZG9ucywgYW5kIHN1cnJlbmRlcnMgYWxsIG9mIEFmZmlybWVyYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBhbmQgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24sIHdoZXRoZXIgbm93IGtub3duIG9yIHVua25vd24gKGluY2x1ZGluZyBleGlzdGluZyBhcyB3ZWxsIGFzIGZ1dHVyZSBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24pLCBpbiB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0gZHVyYXRpb24gcHJvdmlkZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5IChpbmNsdWRpbmcgZnV0dXJlIHRpbWUgZXh0ZW5zaW9ucyksIChpaWkpIGluIGFueSBjdXJyZW50IG9yIGZ1dHVyZSBtZWRpdW0gYW5kIGZvciBhbnkgbnVtYmVyIG9mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgKHRoZSAiV2FpdmVyIikuIEFmZmlybWVyIG1ha2VzIHRoZSBXYWl2ZXIgZm9yIHRoZSBiZW5lZml0IG9mIGVhY2ggbWVtYmVyIG9mIHRoZSBwdWJsaWMgYXQgbGFyZ2UgYW5kIHRvIHRoZSBkZXRyaW1lbnQgb2YgQWZmaXJtZXJgcyBoZWlycyBhbmQgc3VjY2Vzc29ycywgZnVsbHkgaW50ZW5kaW5nIHRoYXQgc3VjaCBXYWl2ZXIgc2hhbGwgbm90IGJlIHN1YmplY3QgdG8gcmV2b2NhdGlvbiwgcmVzY2lzc2lvbiwgY2FuY2VsbGF0aW9uLCB0ZXJtaW5hdGlvbiwgb3IgYW55IG90aGVyIGxlZ2FsIG9yIGVxdWl0YWJsZSBhY3Rpb24gdG8gZGlzcnVwdCB0aGUgcXVpZXQgZW5qb3ltZW50IG9mIHRoZSBXb3JrIGJ5IHRoZSBwdWJsaWMgYXMgY29udGVtcGxhdGVkIGJ5IEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworMy4gUHVibGljIExpY2Vuc2UgRmFsbGJhY2suIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgV2FpdmVyIGZvciBhbnkgcmVhc29uIGJlIGp1ZGdlZCBsZWdhbGx5IGludmFsaWQgb3IgaW5lZmZlY3RpdmUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoZW4gdGhlIFdhaXZlciBzaGFsbCBiZSBwcmVzZXJ2ZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCB0YWtpbmcgaW50byBhY2NvdW50IEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4gSW4gYWRkaXRpb24sIHRvIHRoZSBleHRlbnQgdGhlIFdhaXZlciBpcyBzbyBqdWRnZWQgQWZmaXJtZXIgaGVyZWJ5IGdyYW50cyB0byBlYWNoIGFmZmVjdGVkIHBlcnNvbiBhIHJveWFsdHktZnJlZSwgbm9uIHRyYW5zZmVyYWJsZSwgbm9uIHN1YmxpY2Vuc2FibGUsIG5vbiBleGNsdXNpdmUsIGlycmV2b2NhYmxlIGFuZCB1bmNvbmRpdGlvbmFsIGxpY2Vuc2UgdG8gZXhlcmNpc2UgQWZmaXJtZXJgcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIChpKSBpbiBhbGwgdGVycml0b3JpZXMgd29ybGR3aWRlLCAoaWkpIGZvciB0aGUgbWF4aW11bSBkdXJhdGlvbiBwcm92aWRlZCBieSBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHkgKGluY2x1ZGluZyBmdXR1cmUgdGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIgb2YgY29waWVzLCBhbmQgKGl2KSBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsLCBhZHZlcnRpc2luZyBvciBwcm9tb3Rpb25hbCBwdXJwb3NlcyAodGhlICJMaWNlbnNlIikuIFRoZSBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgQ0MwIHdhcyBhcHBsaWVkIGJ5IEFmZmlybWVyIHRvIHRoZSBXb3JrLiBTaG91bGQgYW55IHBhcnQgb2YgdGhlIExpY2Vuc2UgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgc3VjaCBwYXJ0aWFsIGludmFsaWRpdHkgb3IgaW5lZmZlY3RpdmVuZXNzIHNoYWxsIG5vdCBpbnZhbGlkYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIExpY2Vuc2UsIGFuZCBpbiBzdWNoIGNhc2UgQWZmaXJtZXIgaGVyZWJ5IGFmZmlybXMgdGhhdCBoZSBvciBzaGUgd2lsbCBub3QgKGkpIGV4ZXJjaXNlIGFueSBvZiBoaXMgb3IgaGVyIHJlbWFpbmluZyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrIG9yIChpaSkgYXNzZXJ0IGFueSBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIGluIGVpdGhlciBjYXNlIGNvbnRyYXJ5IHRvIEFmZmlybWVyYHMgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworNC4gTGltaXRhdGlvbnMgYW5kIERpc2NsYWltZXJzLgorCitObyB0cmFkZW1hcmsgb3IgcGF0ZW50IHJpZ2h0cyBoZWxkIGJ5IEFmZmlybWVyIGFyZSB3YWl2ZWQsIGFiYW5kb25lZCwgc3VycmVuZGVyZWQsIGxpY2Vuc2VkIG9yIG90aGVyd2lzZSBhZmZlY3RlZCBieSB0aGlzIGRvY3VtZW50LgorQWZmaXJtZXIgb2ZmZXJzIHRoZSBXb3JrIGFzLWlzIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBleHByZXNzLCBpbXBsaWVkLCBzdGF0dXRvcnkgb3Igb3RoZXJ3aXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHdhcnJhbnRpZXMgb2YgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbiBpbmZyaW5nZW1lbnQsIG9yIHRoZSBhYnNlbmNlIG9mIGxhdGVudCBvciBvdGhlciBkZWZlY3RzLCBhY2N1cmFjeSwgb3IgdGhlIHByZXNlbnQgb3IgYWJzZW5jZSBvZiBlcnJvcnMsIHdoZXRoZXIgb3Igbm90IGRpc2NvdmVyYWJsZSwgYWxsIHRvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFyaW5nIHJpZ2h0cyBvZiBvdGhlciBwZXJzb25zIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBXb3JrIG9yIGFueSB1c2UgdGhlcmVvZiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcGVyc29uYHMgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yay4gRnVydGhlciwgQWZmaXJtZXIgZGlzY2xhaW1zIHJlc3BvbnNpYmlsaXR5IGZvciBvYnRhaW5pbmcgYW55IG5lY2Vzc2FyeSBjb25zZW50cywgcGVybWlzc2lvbnMgb3Igb3RoZXIgcmlnaHRzIHJlcXVpcmVkIGZvciBhbnkgdXNlIG9mIHRoZSBXb3JrLgorQWZmaXJtZXIgdW5kZXJzdGFuZHMgYW5kIGFja25vd2xlZGdlcyB0aGF0IENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBkb2N1bWVudCBhbmQgaGFzIG5vIGR1dHkgb3Igb2JsaWdhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhpcyBDQzAgb3IgdXNlIG9mIHRoZSBXb3JrLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MTk4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRERMLTEuMApAQCAtMCwwICsxLDEzMSBAQAorCitDT01NT04gREVWRUxPUE1FTlQgQU5EIERJU1RSSUJVVElPTiBMSUNFTlNFIChDRERMKQorVmVyc2lvbiAxLjAKKzEuIERlZmluaXRpb25zLgorCisxLjEuICYjODIyMDtDb250cmlidXRvciYjODIyMTsgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gJiM4MjIwO0NvbnRyaWJ1dG9yIFZlcnNpb24mIzgyMjE7IG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yIChpZiBhbnkpLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gJiM4MjIwO0NvdmVyZWQgU29mdHdhcmUmIzgyMjE7IG1lYW5zIChhKSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChiKSBNb2RpZmljYXRpb25zLCBvciAoYykgdGhlIGNvbWJpbmF0aW9uIG9mIGZpbGVzIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAmIzgyMjA7RXhlY3V0YWJsZSYjODIyMTsgbWVhbnMgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS41LiAmIzgyMjA7SW5pdGlhbCBEZXZlbG9wZXImIzgyMjE7IG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGZpcnN0IG1ha2VzIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuNi4gJiM4MjIwO0xhcmdlciBXb3JrJiM4MjIxOyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS43LiAmIzgyMjA7TGljZW5zZSYjODIyMTsgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LiAmIzgyMjA7TGljZW5zYWJsZSYjODIyMTsgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gJiM4MjIwO01vZGlmaWNhdGlvbnMmIzgyMjE7IG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCitBLiBBbnkgZmlsZSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnM7CisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb247IG9yCisKK0MuIEFueSBuZXcgZmlsZSB0aGF0IGlzIGNvbnRyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjEwLiAmIzgyMjA7T3JpZ2luYWwgU29mdHdhcmUmIzgyMjE7IG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgdGhhdCBpcyBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS4xMS4gJiM4MjIwO1BhdGVudCBDbGFpbXMmIzgyMjE7IG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjEyLiAmIzgyMjA7U291cmNlIENvZGUmIzgyMjE7IG1lYW5zIChhKSB0aGUgY29tbW9uIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSBpbiB3aGljaCBtb2RpZmljYXRpb25zIGFyZSBtYWRlIGFuZCAoYikgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIG9yIHdpdGggc3VjaCBjb2RlLgorCisxLjEzLiAmIzgyMjA7WW91JiM4MjIxOyAob3IgJiM4MjIwO1lvdXImIzgyMjE7KSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICYjODIyMDtZb3UmIzgyMjE7IGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAmIzgyMjA7Y29udHJvbCYjODIyMTsgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogKDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kICgyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247ICgyKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24sIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoMykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworQW55IENvdmVyZWQgU29mdHdhcmUgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgaW4gRXhlY3V0YWJsZSBmb3JtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIGFuZCB0aGF0IFNvdXJjZSBDb2RlIGZvcm0gbXVzdCBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZiBhbnkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSBhcyB0byBob3cgdGhleSBjYW4gb2J0YWluIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBmb3JtIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworMy4yLiBNb2RpZmljYXRpb25zLgorCitUaGUgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSByZXByZXNlbnQgdGhhdCBZb3UgYmVsaWV2ZSBZb3VyIE1vZGlmaWNhdGlvbnMgYXJlIFlvdXIgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIFlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjMuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgaW4gZWFjaCBvZiBZb3VyIE1vZGlmaWNhdGlvbnMgdGhhdCBpZGVudGlmaWVzIFlvdSBhcyB0aGUgQ29udHJpYnV0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4gWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLCBvciBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgb3IgYW55IGRlc2NyaXB0aXZlIHRleHQgZ2l2aW5nIGF0dHJpYnV0aW9uIHRvIGFueSBDb250cmlidXRvciBvciB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuCisKKzMuNC4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcy4KKworWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIGhlcmV1bmRlci4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgU29mdHdhcmUuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy41LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgZm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQmIzgyMTc7cyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIGZvcm0gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworNC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzQuMS4gTmV3IFZlcnNpb25zLgorCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGlzIHRoZSBpbml0aWFsIGxpY2Vuc2Ugc3Rld2FyZCBhbmQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZSBzdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZS4KKworNC4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluY2x1ZGVzIGEgbm90aWNlIGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm9oaWJpdGluZyBpdCBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbXVzdCBkaXN0cmlidXRlIGFuZCBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuIE90aGVyd2lzZSwgWW91IG1heSBhbHNvIGNob29zZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZSBzdGV3YXJkLgorCis0LjMuIE1vZGlmaWVkIFZlcnNpb25zLgorCitXaGVuIFlvdSBhcmUgYW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIFlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaWYgWW91OiAoYSkgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKTsgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4KKworNS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gJiM4MjIwO0FTIElTJiM4MjIxOyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworNi4gVEVSTUlOQVRJT04uCisKKzYuMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworNi4yLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgYXNzZXJ0IHN1Y2ggY2xhaW0gaXMgcmVmZXJyZWQgdG8gYXMgJiM4MjIwO1BhcnRpY2lwYW50JiM4MjIxOykgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgKG1lYW5pbmcgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIGEgQ29udHJpYnV0b3Igb3IgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkgYW5kIGFsbCBDb250cmlidXRvcnMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc3VjaCA2MCBkYXkgbm90aWNlIHBlcmlvZCwgdW5sZXNzIGlmIHdpdGhpbiBzdWNoIDYwIGRheSBwZXJpb2QgWW91IHdpdGhkcmF3IFlvdXIgY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseSBvciBwdXJzdWFudCB0byBhIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggUGFydGljaXBhbnQuCisKKzYuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDYuMSBvciA2LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlcyB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gKGV4Y2x1ZGluZyBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSBieSBhbnkgZGlzdHJpYnV0b3IpIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NUIFBST0ZJVFMsIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSYjODIxNztTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzguIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKK1RoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGEgJiM4MjIwO2NvbW1lcmNpYWwgaXRlbSwmIzgyMjE7IGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSYjODIyMTsgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiAmIzE2NzsgMjUyLjIyNy03MDE0KGEpKDEpKSBhbmQgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiYjODIyMTsgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4gVGhpcyBVLlMuIEdvdmVybm1lbnQgUmlnaHRzIGNsYXVzZSBpcyBpbiBsaWV1IG9mLCBhbmQgc3VwZXJzZWRlcywgYW55IG90aGVyIEZBUiwgREZBUiwgb3Igb3RoZXIgY2xhdXNlIG9yIHByb3Zpc2lvbiB0aGF0IGFkZHJlc3NlcyBHb3Zlcm5tZW50IHJpZ2h0cyBpbiBjb21wdXRlciBzb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzkuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUganVyaXNkaWN0aW9uIHNwZWNpZmllZCBpbiBhIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIHN1Y2gganVyaXNkaWN0aW9uJiM4MjE3O3MgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBsb2NhdGVkIGluIHRoZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIHNwZWNpZmllZCBpbiBhIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyYjODIxNzsgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLiBZb3UgYWdyZWUgdGhhdCBZb3UgYWxvbmUgYXJlIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHJlZ3VsYXRpb24gb2YgYW55IG90aGVyIGNvdW50cmllcykgd2hlbiBZb3UgdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZSBhbnkgQ292ZXJlZCBTb2Z0d2FyZS4KKworMTAuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzMTc0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0xLjAKQEAgLTAsMCArMSwyNDIgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTAorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGQmIzgyMTc7dW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkJiM4MjE3O3VuZSBwYXJ0LCBzYSBjb25mb3JtaXQmIzIzMzsgYXUgZHJvaXQgZnJhbiYjMjMxO2FpcywgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdSYjODIxNztpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK2QmIzgyMTc7YXV0cmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycy4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGwmIzgyMTc7RW5lcmdpZSBBdG9taXF1ZSAmIzgyMTE7IENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzMS0zMyBydWUgZGUgbGEgRiYjMjMzO2QmIzIzMztyYXRpb24sIDc1NzUyIFBBUklTIGNlZGV4IDE1LgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAmIzgyMTE7IENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgJiM4MjExOyBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUFJFQU1CVUxFCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZGB1biBtb2QmIzIzMjtsZSBkZSBkaWZmdXNpb24gJiMxNzE7b3BlbiBzb3VyY2UmIzE4NzsuCisKK0xgZXhlcmNpY2UgZGUgY2VzIGxpYmVydCYjMjMzO3MgZXN0IGFzc29ydGkgZGUgY2VydGFpbnMgZGV2b2lycyAmIzIyNDsgbGEgY2hhcmdlIGRlcyB1dGlsaXNhdGV1cnMgYWZpbiBkZSBwciYjMjMzO3NlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHQmIzIzMztyaWV1cmVzLgorCitMJiM4MjE3O2FjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGVuIGQmIzIzMztjb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuJiM4MjE3O29mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1JiM4MjE3O3VuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGwmIzgyMTc7YXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1JiM4MjE3O3VuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbCYjODIxNzthdHRlbnRpb24gZGUgbCYjODIxNzt1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsJiM4MjE3O3V0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsJiM4MjE3O3V0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIGV0IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGwmIzgyMTc7YWQmIzIzMztxdWF0aW9uIGR1IExvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQgb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZSBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGwmIzgyMTc7JiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHMmIzgyMTc7YXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsJiM4MjE3O2V4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1JiM4MjE3O2lsIGNvbnRpZW50LgorCitBcnRpY2xlIDFlciAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1JiM4MjE3O2lscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsJiM4MjE3O2FjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsJiM4MjE3O2Vuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGwmIzgyMTc7YWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlIDogZCYjMjMzO3NpZ25lIGxlIGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzgyMTc7YXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7KHMpOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVyKHMpIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkJiM4MjE3O2F1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbnM6IGQmIzIzMztzaWduZSBsJiM4MjE3O2Vuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLCBhaW5zaSBxdWUgbGVzIE1vZHVsZXMgU3RhdGlxdWVzLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpLCB1bmUgZm9pcyBjb21waWwmIzIzMzsgc291cyBmb3JtZSBleCYjMjMzO2N1dGFibGUsIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIER5bmFtaXF1ZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBjciYjMjMzOyYjMjMzOyBwYXIgbGUgQ29udHJpYnV0ZXVyLCBpbmQmIzIzMztwZW5kYW50IGR1IExvZ2ljaWVsLCB0ZWwgcXVlIGNlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBzb250IHNvdXMgZm9ybWUgZGUgZGV1eCBleCYjMjMzO2N1dGFibGVzIGluZCYjMjMzO3BlbmRhbnRzIHF1aSBzJiM4MjE3O2V4JiMyMzM7Y3V0ZW50IGRhbnMgdW4gZXNwYWNlIGQmIzgyMTc7YWRyZXNzYWdlIGluZCYjMjMzO3BlbmRhbnQsIGwmIzgyMTc7dW4gYXBwZWxhbnQgbCYjODIxNzthdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIFN0YXRpcXVlOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUgY3ImIzIzMzsmIzIzMzsgcGFyIGxlIENvbnRyaWJ1dGV1ciBldCBsaSYjMjMzOyBhdSBMb2dpY2llbCBwYXIgdW4gbGllbiBzdGF0aXF1ZSByZW5kYW50IGxldXIgY29kZSBvYmpldCBkJiMyMzM7cGVuZGFudCBsYHVuIGRlIGxgYXV0cmUuIENlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBhdXF1ZWwgaWwgZXN0IGxpJiMyMzM7LCBzb250IHJlZ3JvdXAmIzIzMztzIGVuIHVuIHNldWwgZXgmIzIzMztjdXRhYmxlLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzJiM4MjE3O2VudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkJiM4MjE3O3VuZSBMaWNlbmNlIG5vbiBleGNsdXNpdmUsIHRyYW5zZiYjMjMzO3JhYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xLiBMJiM4MjE3O2FjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGQmIzgyMTc7dW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZCYjODIxNzt1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGwmIzgyMTc7dW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMi4gVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZXMuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMS5FTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIuIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBsZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOyAmIzIyNDsgdGl0cmUgZ3JhY2lldXggbGVzIGRyb2l0cyBkJiM4MjE3O2V4cGxvaXRhdGlvbiBkdSBvdSBkZXMgYnJldmV0cyBxdSYjODIxNztpbCBkJiMyMzM7dGllbnQgc3VyIHRvdXQgb3UgcGFydGllIGRlcyBpbnZlbnRpb25zIGltcGwmIzIzMzttZW50JiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbC4KKworNS4xLiBEUk9JVFMgRCYjODIxNztVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZCYjODIxNzthcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGwmIzgyMTc7YWZmaWNoYWdlLCBsJiM4MjE3O2V4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGQmIzgyMTc7ZW4gb2JzZXJ2ZXIsIGQmIzgyMTc7ZW4gJiMyMzM7dHVkaWVyLCBvdSBkJiM4MjE3O2VuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbiYjODIxNztpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkJiM4MjE3O2FmZmljaGFnZSwgZCYjODIxNztleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1JiM4MjE3O2lsIGVzdCBlbiBkcm9pdCBkJiM4MjE3O2VmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIuIERST0lUIEQmIzgyMTc7QVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZCYjODIxNzthcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZCYjODIxNzthZGFwdGVyLCBkJiM4MjE3O2FycmFuZ2VyIG91IGQmIzgyMTc7YXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGR1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgTG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1JiM4MjE3O2F1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMuIERST0lUUyBERSBESVNUUklCVVRJT04gRVQgREUgRElGRlVTSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBldCBkZSBkaWZmdXNpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xLiBSRURJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgcmVkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZCYjODIxNzt1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2QmIzgyMTc7dW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZCYjODIxNzthY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZCYjODIxNzthY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkJiM4MjE3O2FjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIuIFJFRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGwmIzgyMTc7aW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSByZWRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkJiM4MjE3O3VuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZCYjODIxNzt1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgY29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZCYjODIxNzthY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGQmIzgyMTc7YWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZCYjODIxNzthY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zLiBSRURJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBEWU5BTUlRVUVTCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIER5bmFtaXF1ZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHMmIzgyMTc7YXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBEeW5hbWlxdWUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQuIENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIEdQTAorCitEYW5zIGxlIGNhcyBvJiMyNDk7IGxlIExvZ2ljaWVsLCBNb2RpZmkmIzIzMzsgb3Ugbm9uLCBlc3QgaW50JiMyMzM7Z3ImIzIzMzsgJiMyMjQ7IHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGUgbGEgbGljZW5jZSBHUEwsIGxlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBsJiM4MjE3O2Vuc2VtYmxlIHNvdXMgbGEgbGljZW5jZSBHUEwuCisKK0RhbnMgbGUgY2FzIG8mIzI0OTsgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGludCYjMjMyO2dyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRlIGxhIGxpY2VuY2UgR1BMLCBsZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNvdXMgbGEgbGljZW5jZSBHUEwuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEuIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiAmIzMzOTt1dnJlIGV0IG51bCBhdXRyZSBuJiM4MjE3O2EgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IG1haW50ZW5pciBsYSBkaWZmdXNpb24gZHUgTG9naWNpZWwgaW5pdGlhbCBzb3VzIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIuIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBDb250cmlidXRpb25zIHNvbnQgYXR0YWNoJiMyMzM7cyBhdSB0aXR1bGFpcmUgZGUgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7c2lnbiYjMjMzOyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMuIFNVUiBMRVMgTU9EVUxFUyBEWU5BTUlRVUVTCisKK0xlIExpY2VuY2kmIzIzMzsgYXlhbnQgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRHluYW1pcXVlIGVzdCB0aXR1bGFpcmUgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBjZSBNb2R1bGUgRHluYW1pcXVlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQuIERJU1BPU0lUSU9OUyBDT01NVU5FUworCis2LjQuMS4gTGUgTGljZW5jaSYjMjMzOyBzJiM4MjE3O2VuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsJiM4MjE3O2lkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsLgorCis2LjQuMi4gTGUgTGljZW5jaSYjMjMzOyBzJiM4MjE3O2VuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbCYjODIxNzsmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEuIExlIENvbnRyYXQgbiYjODIxNztvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGQmIzgyMTc7YXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZCYjODIxNzt1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZCYjODIxNzt1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbiYjODIxNztlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yLiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbiYjODIxNztlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdSYjODIxNztpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsJiM4MjE3O29iamV0IGQmIzgyMTc7dW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMS4gU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsJiM4MjE3O2FydGljbGUgOC4yLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBuJiM4MjE3O2V4JiMyMzM7Y3V0ZSBwYXMgdG91dCBvdSBwYXJ0aWUgZGVzIG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1JiM4MjE3O2lsIHN1Yml0IGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yLiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDooaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbCYjODIxNztpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGwmIzgyMTc7dXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBsb3JzcXUmIzgyMTc7aWwgcyYjODIxNzthZ2l0IGQmIzgyMTc7dW4gcHJvZmVzc2lvbm5lbCB1dGlsaXNhbnQgbGUgTG9naWNpZWwgJiMyMjQ7IGRlcyBmaW5zIHByb2Zlc3Npb25uZWxsZXMgZXQgKGlpaSkgZGVzIGRvbW1hZ2VzIGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGQmIzgyMTc7ZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG4mIzgyMTc7b3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEuIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGwmIzgyMTc7JiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkJiM4MjE3O2VuIHRlc3RlciBldCBkJiM4MjE3O2VuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsJiM4MjE3O2V4aXN0ZW5jZSBkJiM4MjE3OyYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTCYjODIxNzthdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbCYjODIxNzt1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbCYjODIxNzthZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1JiM4MjE3O2lsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMuIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgJiMxNzE7ZW4gbGAmIzIzMzt0YXQmIzE4NzsgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsJiM4MjE3O2FydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1JiM4MjE3O2lsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXUmIzgyMTc7aWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbCYjODIxNzsmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXUmIzgyMTc7aWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40LiBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkJiM4MjE3O3VuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsJiM4MjE3O3V0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZCYjODIxNzt1biBwcm90b2NvbGUgZCYjODIxNzthY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGwmIzgyMTc7dXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuJiM4MjE3O2VzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsJiM4MjE3O2V4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGwmIzgyMTc7ZXhpc3RlbmNlIGQmIzgyMTc7dW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEuIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yLiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbiYjODIxNztlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1JiM4MjE3O2lsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXUmIzgyMTc7ZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xLiBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGQmIzgyMTc7dW4gcmV0YXJkIG91IGQmIzgyMTc7dW5lIGQmIzIzMztmYWlsbGFuY2UgZCYjODIxNztleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbCYjODIxNztpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbCYjODIxNzsmIzIzMzt0YXQgZGUgZ3VlcnJlJiM4MjMwOworCisxMS4yLiBMZSBmYWl0LCBwYXIgbCYjODIxNzt1bmUgb3UgbCYjODIxNzthdXRyZSBkZXMgUGFydGllcywgZCYjODIxNztvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGQmIzgyMTc7dW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHMmIzgyMTc7ZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMy4gTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsJiM4MjE3O2FjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbiYjODIxNzthdXJhIGQmIzgyMTc7ZWZmZXQgJiMyMjQ7IGwmIzgyMTc7JiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZCYjODIxNzsmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNC4gRGFucyBsJiM4MjE3O2h5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgcyYjODIxNzthdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZCYjODIxNzt1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGwmIzgyMTc7ZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNS4gTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZS4gRW4gY2FzIGRlIGRpdmVyZ2VuY2UgZCYjODIxNztpbnRlcnByJiMyMzM7dGF0aW9uLCBzZXVsZSBsYSB2ZXJzaW9uIGZyYW4mIzIzMTthaXNlIGZhaXQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMS4gVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIuIEFmaW4gZCYjODIxNztlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMjtkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMy4gVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLCBzb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA1LjMuNC4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEuIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGwmIzgyMTc7YW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGwmIzgyMTc7b2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMi4gQSBkJiMyMzM7ZmF1dCBkJiM4MjE3O2FjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkJiM4MjE3O3VuZSBwcm9jJiMyMzM7ZHVyZSBkJiM4MjE3O3VyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2U6IENFQSwgQzogQ05SUywgSTogSU5SSUEsIExMOiBMb2dpY2llbCBMaWJyZQorCisKK1ZlcnNpb24gMSBkdSAyMS8wNi8yMDA0CisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzE0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMi4wCkBAIC0wLDAgKzEsMjQzIEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMMSBzb250OgorCitDb21taXNzYXJpYXQgJiMyMjQ7IGxgRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyBkZSByZWNoZXJjaGUgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSwgdGVjaG5pcXVlIGV0IGluZHVzdHJpZWwsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMyBydWUgTWljaGVsLUFuZ2UsIDc1Nzk0IFBhcmlzIGNlZGV4IDE2LgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0gSU5SSUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgJiMyMjQ7IGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSBldCB0ZWNobm9sb2dpcXVlLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUCAxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXguCisKK1ByJiMyMzM7YW1idWxlCisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGRvbnQgbGBvYmplY3RpZiBlc3QgZGUgY29uZiYjMjMzO3JlciBhdXggdXRpbGlzYXRldXJzIGxhIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlIGRhbnMgbGUgY2FkcmUgZGB1biBtb2QmIzIzMjtsZSBkZSBkaWZmdXNpb24gZW4gbG9naWNpZWwgbGlicmUuCisKK0xgZXhlcmNpY2UgZGUgY2VzIGxpYmVydCYjMjMzO3MgZXN0IGFzc29ydGkgZGUgY2VydGFpbnMgZGV2b2lycyAmIzIyNDsgbGEgY2hhcmdlIGRlcyB1dGlsaXNhdGV1cnMgYWZpbiBkZSBwciYjMjMzO3NlcnZlciBjZSBzdGF0dXQgYXUgY291cnMgZGVzIHJlZGlzdHJpYnV0aW9ucyB1bHQmIzIzMztyaWV1cmVzLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGVuIGQmIzIzMztjb3VsZW50IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsYGFjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyBkJiMyMzM7dGVudGV1cnMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZGBhdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXJzIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkYGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24uCisKK0NvbmMmIzIzMztkYW50OiBkJiMyMzM7c2lnbmUgbGUgVGl0dWxhaXJlIG91IHRvdXRlIHBlcnNvbm5lIHBoeXNpcXVlIG91IG1vcmFsZSBkaXN0cmlidWFudCBsZSBMb2dpY2llbCBzb3VzIGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGlvbjogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbCBwYXIgdG91dCBDb250cmlidXRldXIsIGFpbnNpIHF1ZSB0b3V0IE1vZHVsZSBJbnRlcm5lLgorCitNb2R1bGU6IGQmIzIzMztzaWduZSB1biBlbnNlbWJsZSBkZSBmaWNoaWVycyBzb3VyY2VzIHkgY29tcHJpcyBsZXVyIGRvY3VtZW50YXRpb24gcXVpIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTW9kdWxlIEV4dGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSwgbm9uIGQmIzIzMztyaXYmIzIzMzsgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNgZXgmIzIzMztjdXRlbnQgZGFucyBkZXMgZXNwYWNlcyBkYGFkcmVzc2FnZSBkaWZmJiMyMzM7cmVudHMsIGxgdW4gYXBwZWxhbnQgbGBhdXRyZSBhdSBtb21lbnQgZGUgbGV1ciBleCYjMjMzO2N1dGlvbi4KKworTW9kdWxlIEludGVybmU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSBsaSYjMjMzOyBhdSBMb2dpY2llbCBkZSB0ZWxsZSBzb3J0ZSBxdWBpbHMgc2BleCYjMjMzO2N1dGVudCBkYW5zIGxlIG0mIzIzNDttZSBlc3BhY2UgZGBhZHJlc3NhZ2UuCisKK0dOVSBHUEw6IGQmIzIzMztzaWduZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkYW5zIHNhIHZlcnNpb24gMiBvdSB0b3V0ZSB2ZXJzaW9uIHVsdCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlIHB1YmxpJiMyMzM7ZSBwYXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIEluYy4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERgQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZGBhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZGBhY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZGBhY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGVzIGNvbmRpdGlvbnMgZGUgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiByJiMyMzM7c3VsdGFudCBzb250IGFsb3JzIHNvdW1pc2VzICYjMjI0OyBsYGludCYjMjMzO2dyYWxpdCYjMjMzOyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBzb3VzIGZvcm1lIGRlIGNvZGUgc291cmNlIG91IGRlIGNvZGUgb2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIGNvZGUgb2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIGF1eCBmdXR1cnMgTGljZW5jaSYjMjMzO3MgZGBhY2MmIzIzMztkZXIgZmFjaWxlbWVudCBhdSBjb2RlIHNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlbiBpbmRpcXVhbnQgbGVzIG1vZGFsaXQmIzIzMztzIGRgYWNjJiMyMzI7cywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zIERJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBFWFRFUk5FUworCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgc2BhcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIEV4dGVybmUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQgQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgR05VIEdQTAorCitMZSBMaWNlbmNpJiMyMzM7IHBldXQgaW5jbHVyZSB1biBjb2RlIHNvdW1pcyBhdXggZGlzcG9zaXRpb25zIGRgdW5lIGRlcyB2ZXJzaW9ucyBkZSBsYSBsaWNlbmNlIEdOVSBHUEwgZGFucyBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uIGV0IGRpc3RyaWJ1ZXIgbGBlbnNlbWJsZSBzb3VzIGxlcyBjb25kaXRpb25zIGRlIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGRlIGxhIGxpY2VuY2UgR05VIEdQTC4KKworTGUgTGljZW5jaSYjMjMzOyBwZXV0IGluY2x1cmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbiBkYW5zIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGB1bmUgZGVzIHZlcnNpb25zIGRlIGxhIGxpY2VuY2UgR05VIEdQTCBldCBkaXN0cmlidWVyIGxgZW5zZW1ibGUgc291cyBsZXMgY29uZGl0aW9ucyBkZSBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkZSBsYSBsaWNlbmNlIEdOVSBHUEwuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIGVzdCB0aXR1bGFpcmUgc3VyIGNlbGxlLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zIFNVUiBMRVMgTU9EVUxFUyBFWFRFUk5FUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgZXN0IHRpdHVsYWlyZSBzdXIgY2VsdWktY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQgRElTUE9TSVRJT05TIENPTU1VTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uLgorCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIHN1ciBsZSBMb2dpY2llbCBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEgTGUgQ29udHJhdCBuYG9ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZGBhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkYHVuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkYHVuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuYGVuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIgRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG5gZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXVgaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbGBvYmpldCBkYHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEgU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgOC4yLCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdWBpbCBzdWJpcmFpdCBkdSBmYWl0IGR1IExvZ2ljaWVsIGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OiAoaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbGBpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGxgdXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBldCAoaWlpKSBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQgZGB1biBxdWVsY29ucXVlIGRvbW1hZ2UgaW5kaXJlY3QuIEVuIHBhcnRpY3VsaWVyLCBsZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkYGV4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuYG91dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxgJiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkYGVuIHRlc3RlciBldCBkYGVuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsYGV4aXN0ZW5jZSBkYCYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTGBhdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbGBhZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1YGlsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIgTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMyBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICJlbiBsYCYjMjMzO3RhdCIgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsYGFydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1YGlsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXVgaWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbGAmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXVgaWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40IExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRgdW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGxgdXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkYHVuIHByb3RvY29sZSBkYGFjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbGB1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG5gZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGxgZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbGBleGlzdGVuY2UgZGB1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMSBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbmBlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1YGlsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXVgZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZGB1biByZXRhcmQgb3UgZGB1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkYGV4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsYGludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsYCYjMjMzO3RhdCBkZSBndWVycmUuLi4KKworMTEuMiBMZSBmYWl0LCBwYXIgbGB1bmUgb3UgbGBhdXRyZSBkZXMgUGFydGllcywgZGBvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGRgdW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHNgZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMyBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGxgYWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuYGF1cmEgZGBlZmZldCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkYCYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40IERhbnMgbGBoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHNgYXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGRgdW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsYGVuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUgTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZSwgY2VzIGRldXggdmVyc2lvbnMgZmFpc2FudCAmIzIzMztnYWxlbWVudCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yIEFmaW4gZGBlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMztkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMyBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUsIHNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDIuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzI0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQgpAQCAtMCwwICsxLDI0NyBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMLUIKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMLUIxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgdW5lIHRyJiMyMzI7cyBsYXJnZSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIGR1IGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZS4KKworTGBleGVyY2ljZSBkZSBjZXR0ZSBsaWJlcnQmIzIzMzsgZXN0IGFzc29ydGkgZGB1bmUgb2JsaWdhdGlvbiBmb3J0ZSBkZSBjaXRhdGlvbiAmIzIyNDsgbGEgY2hhcmdlIGRlIGNldXggcXVpIGRpc3RyaWJ1ZXJhaWVudCB1biBsb2dpY2llbCBpbmNvcnBvcmFudCB1biBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGxhIHByJiMyMzM7c2VudGUgbGljZW5jZSBhZmluIGRgYXNzdXJlciBxdWUgbGVzIGNvbnRyaWJ1dGlvbnMgZGUgdG91cyBzb2llbnQgY29ycmVjdGVtZW50IGlkZW50aWZpJiMyMzM7ZXMgZXQgcmVjb25udWVzLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGQmIzIzMztjb3VsZW50IGRlIGNlIGNvbnRyYXQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGxgYWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIGQmIzIzMzt0ZW50ZXVycyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkYGF1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cnMgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGRgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0IENvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIHRvdXQgTW9kdWxlIEludGVybmUuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWkgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRXh0ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBub24gZCYjMjMzO3JpdiYjMjMzOyBkdSBMb2dpY2llbCwgdGVsIHF1ZSBjZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgc2BleCYjMjMzO2N1dGVudCBkYW5zIGRlcyBlc3BhY2VzIGRgYWRyZXNzYWdlIGRpZmYmIzIzMztyZW50cywgbGB1biBhcHBlbGFudCBsYGF1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgSW50ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlIGxpJiMyMzM7IGF1IExvZ2ljaWVsIGRlIHRlbGxlIHNvcnRlIHF1YGlscyBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgbGUgbSYjMjM0O21lIGVzcGFjZSBkYGFkcmVzc2FnZS4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERgQVBQT1JURVIgREVTIENPTlRSSUJVVElPTlMKKworTGUgZHJvaXQgZGBhcHBvcnRlciBkZXMgQ29udHJpYnV0aW9ucyBjb21wb3J0ZSBsZSBkcm9pdCBkZSB0cmFkdWlyZSwgZGBhZGFwdGVyLCBkYGFycmFuZ2VyIG91IGRgYXBwb3J0ZXIgdG91dGUgYXV0cmUgbW9kaWZpY2F0aW9uIGF1IExvZ2ljaWVsIGV0IGxlIGRyb2l0IGRlIHJlcHJvZHVpcmUgbGUgbG9naWNpZWwgZW4gciYjMjMzO3N1bHRhbnQuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBDb250cmlidXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBhdSBMb2dpY2llbCwgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGF1dHJlIHF1ZSBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCBzb3VzIHImIzIzMztzZXJ2ZSBkdSByZXNwZWN0IGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCis1LjMuMyBESVNUUklCVVRJT04gREVTIE1PRFVMRVMgRVhURVJORVMKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBsZXMgY29uZGl0aW9ucyBkdSBDb250cmF0IG5lIHNgYXBwbGlxdWVudCBwYXMgJiMyMjQ7IGNlIE1vZHVsZSBFeHRlcm5lLCBxdWkgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgZGlmZiYjMjMzO3JlbnQuCisKKzUuMy40IENJVEFUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBkaXN0cmlidWUgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgaW5kaXF1ZXIgZGFucyBzYSBkb2N1bWVudGF0aW9uIHF1YGlsIGEgJiMyMzM7dCYjMjMzOyByJiMyMzM7YWxpcyYjMjMzOyAmIzIyNDsgcGFydGlyIGR1IExvZ2ljaWVsIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCwgZW4gcmVwcm9kdWlzYW50IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IExvZ2ljaWVsLAorCismIzIyNDsgZmFpcmUgZW4gc29ydGUgcXVlIGxgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwsIHNlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGxlIGZhaXQgcXVgaWwgZXN0IHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBzb2llbnQgaW5kaXF1JiMyMzM7cyBkYW5zIHVuIHRleHRlIGZhY2lsZW1lbnQgYWNjZXNzaWJsZSBkZXB1aXMgbGBpbnRlcmZhY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LAorCismIzIyNDsgbWVudGlvbm5lciwgc3VyIHVuIHNpdGUgV2ViIGxpYnJlbWVudCBhY2Nlc3NpYmxlIGQmIzIzMztjcml2YW50IGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgZXQgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiwgcXVgaWwgYSAmIzIzMzt0JiMyMzM7IHImIzIzMzthbGlzJiMyMzM7ICYjMjI0OyBwYXJ0aXIgZHUgTG9naWNpZWwgciYjMjMzO2dpIHBhciBsZSBDb250cmF0LCBlbiByZXByb2R1aXNhbnQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgTG9naWNpZWwsCisKK2xvcnNxdWBpbCBsZSBkaXN0cmlidWUgJiMyMjQ7IHVuIHRpZXJzIHN1c2NlcHRpYmxlIGRlIGRpc3RyaWJ1ZXIgbHVpLW0mIzIzNDttZSB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHNhbnMgYXZvaXIgJiMyMjQ7IGVuIGRpc3RyaWJ1ZXIgbGUgY29kZSBzb3VyY2UsICYjMjI0OyBmYWlyZSBzZXMgbWVpbGxldXJzIGVmZm9ydHMgcG91ciBxdWUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhcnRpY2xlIDUuMy40IHNvaWVudCByZXByaXNlcyBwYXIgbGUgZGl0IHRpZXJzLgorCitMb3JzcXVlIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24gZXN0IGRpc3RyaWJ1JiMyMzM7IGF2ZWMgdW4gTW9kdWxlIEV4dGVybmUgcXVpIGEgJiMyMzM7dCYjMjMzOyBjb24mIzIzMTt1IHBvdXIgbGB1dGlsaXNlciwgbGUgTGljZW5jaSYjMjMzOyBkb2l0IHNvdW1ldHRyZSBsZSBkaXQgTW9kdWxlIEV4dGVybmUgYXV4IG9ibGlnYXRpb25zIHByJiMyMzM7YyYjMjMzO2RlbnRlcy4KKworNS4zLjUgQ09NUEFUSUJJTElURSBBVkVDIExFUyBMSUNFTkNFUyBDZUNJTEwgZXQgQ2VDSUxMLUMKKworTG9yc3F1YHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBjb250aWVudCB1bmUgQ29udHJpYnV0aW9uIHNvdW1pc2UgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgbGVzIHN0aXB1bGF0aW9ucyBwciYjMjMzO3Z1ZXMgJiMyMjQ7IGxgYXJ0aWNsZSA1LjMuNCBzb250IGZhY3VsdGF0aXZlcy4KKworVW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgbGUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTC1DLiBMZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyAmIzIyNDsgbGBhcnRpY2xlIDUuMy40IHNvbnQgYWxvcnMgZmFjdWx0YXRpdmVzLgorCitBcnRpY2xlIDYgLSBQUk9QUklFVEUgSU5URUxMRUNUVUVMTEUKKworNi4xIFNVUiBMRSBMT0dJQ0lFTCBJTklUSUFMCisKK0xlIFRpdHVsYWlyZSBlc3QgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuIFRvdXRlIHV0aWxpc2F0aW9uIGR1IExvZ2ljaWVsIEluaXRpYWwgZXN0IHNvdW1pc2UgYXUgcmVzcGVjdCBkZXMgY29uZGl0aW9ucyBkYW5zIGxlc3F1ZWxsZXMgbGUgVGl0dWxhaXJlIGEgY2hvaXNpIGRlIGRpZmZ1c2VyIHNvbiBvZXV2cmUgZXQgbnVsIGF1dHJlIG5gYSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlIGxlIExvZ2ljaWVsIEluaXRpYWwgcmVzdGUgYXUgbW9pbnMgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IGV0IGNlLCBwb3VyIGxhIGR1ciYjMjMzO2UgdmlzJiMyMzM7ZSAmIzIyNDsgbGBhcnRpY2xlIDQuMi4KKworNi4yIFNVUiBMRVMgQ09OVFJJQlVUSU9OUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBlc3QgdGl0dWxhaXJlIHN1ciBjZWxsZS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMyBTVVIgTEVTIE1PRFVMRVMgRVhURVJORVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGVzdCB0aXR1bGFpcmUgc3VyIGNlbHVpLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbi4KKworNi40IERJU1BPU0lUSU9OUyBDT01NVU5FUworCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGxgaWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbi4KKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBzdXIgbGUgTG9naWNpZWwgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xIExlIENvbnRyYXQgbmBvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGRgYXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZGB1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZGB1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbmBlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuYGVuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1YGlsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGxgb2JqZXQgZGB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDguMiwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXVgaWwgc3ViaXJhaXQgZHUgZmFpdCBkdSBMb2dpY2llbCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDogKGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGxgaW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsYHV0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgZXQgKGlpaSkgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50IGRgdW4gcXVlbGNvbnF1ZSBkb21tYWdlIGluZGlyZWN0LiBFbiBwYXJ0aWN1bGllciwgbGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZGBleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbmBvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMSBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsYCYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZGBlbiB0ZXN0ZXIgZXQgZGBlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbGBleGlzdGVuY2UgZGAmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIExgYXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGxgYWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdWBpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAiZW4gbGAmIzIzMzt0YXQiIHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbGBhcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdWBpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1YGlsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGxgJiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1YGlsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNCBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYHVuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsYHV0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZGB1biBwcm90b2NvbGUgZGBhY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGxgdXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuYGVzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsYGV4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGxgZXhpc3RlbmNlIGRgdW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEgRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIgTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG5gZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdWBpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1YGVsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMSBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGRgdW4gcmV0YXJkIG91IGRgdW5lIGQmIzIzMztmYWlsbGFuY2UgZGBleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbGBpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbGAmIzIzMzt0YXQgZGUgZ3VlcnJlLi4uCisKKzExLjIgTGUgZmFpdCwgcGFyIGxgdW5lIG91IGxgYXV0cmUgZGVzIFBhcnRpZXMsIGRgb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkYHVuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzYGVuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMgTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsYGFjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbmBhdXJhIGRgZWZmZXQgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZGAmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNCBEYW5zIGxgaHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzYGF2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkYHVuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbGBlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41IExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UsIGNlcyBkZXV4IHZlcnNpb25zIGZhaXNhbnQgJiMyMzM7Z2FsZW1lbnQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMSBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMiBBZmluIGRgZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzM7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMgVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDEuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGVmODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtQwpAQCAtMCwwICsxLDI0MSBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMLUMKKworQXZlcnRpc3NlbWVudAorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBpc3N1ZSBkYHVuZSBjb25jZXJ0YXRpb24gZW50cmUgc2VzIGF1dGV1cnMgYWZpbiBxdWUgbGUgcmVzcGVjdCBkZSBkZXV4IGdyYW5kcyBwcmluY2lwZXMgcHImIzIzMztzaWRlICYjMjI0OyBzYSByJiMyMzM7ZGFjdGlvbjoKKworZGB1bmUgcGFydCwgbGUgcmVzcGVjdCBkZXMgcHJpbmNpcGVzIGRlIGRpZmZ1c2lvbiBkZXMgbG9naWNpZWxzIGxpYnJlczogYWNjJiMyMzI7cyBhdSBjb2RlIHNvdXJjZSwgZHJvaXRzICYjMjMzO3RlbmR1cyBjb25mJiMyMzM7ciYjMjMzO3MgYXV4IHV0aWxpc2F0ZXVycywKK2RgYXV0cmUgcGFydCwgbGEgZCYjMjMzO3NpZ25hdGlvbiBkYHVuIGRyb2l0IGFwcGxpY2FibGUsIGxlIGRyb2l0IGZyYW4mIzIzMTthaXMsIGF1cXVlbCBlbGxlIGVzdCBjb25mb3JtZSwgdGFudCBhdSByZWdhcmQgZHUgZHJvaXQgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBjaXZpbGUgcXVlIGR1IGRyb2l0IGRlIGxhIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgZGUgbGEgcHJvdGVjdGlvbiBxdWBpbCBvZmZyZSBhdXggYXV0ZXVycyBldCB0aXR1bGFpcmVzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciB1biBsb2dpY2llbC4KK0xlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UgQ2VDSUxMLUMxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWVyIGV0IGRlIHImIzIzMzt1dGlsaXNlciBsZSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UuCisKK0xgZXhlcmNpY2UgZGUgY2V0dGUgbGliZXJ0JiMyMzM7IGVzdCBhc3NvcnRpIGRgdW5lIG9ibGlnYXRpb24gZGUgcmVtZXR0cmUgJiMyMjQ7IGxhIGRpc3Bvc2l0aW9uIGRlIGxhIGNvbW11bmF1dCYjMjMzOyBsZXMgbW9kaWZpY2F0aW9ucyBhcHBvcnQmIzIzMztlcyBhdSBjb2RlIHNvdXJjZSBkdSBsb2dpY2llbCBhZmluIGRlIGNvbnRyaWJ1ZXIgJiMyMjQ7IHNvbiAmIzIzMzt2b2x1dGlvbi4KKworTGBhY2Nlc3NpYmlsaXQmIzIzMzsgYXUgY29kZSBzb3VyY2UgZXQgbGVzIGRyb2l0cyBkZSBjb3BpZSwgZGUgbW9kaWZpY2F0aW9uIGV0IGRlIHJlZGlzdHJpYnV0aW9uIHF1aSBkJiMyMzM7Y291bGVudCBkZSBjZSBjb250cmF0IG9udCBwb3VyIGNvbnRyZXBhcnRpZSBkZSBuYG9mZnJpciBhdXggdXRpbGlzYXRldXJzIHF1YHVuZSBnYXJhbnRpZSBsaW1pdCYjMjMzO2UgZXQgZGUgbmUgZmFpcmUgcGVzZXIgc3VyIGxgYXV0ZXVyIGR1IGxvZ2ljaWVsLCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZXQgbGVzIGNvbmMmIzIzMztkYW50cyBzdWNjZXNzaWZzIHF1YHVuZSByZXNwb25zYWJpbGl0JiMyMzM7IHJlc3RyZWludGUuCisKK0EgY2V0ICYjMjMzO2dhcmQgbGBhdHRlbnRpb24gZGUgbGB1dGlsaXNhdGV1ciBlc3QgYXR0aXImIzIzMztlIHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCAmIzIyNDsgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IGxvZ2ljaWVsIHBhciBsYHV0aWxpc2F0ZXVyICYjMjMzO3RhbnQgZG9ubiYjMjMzOyBzYSBzcCYjMjMzO2NpZmljaXQmIzIzMzsgZGUgbG9naWNpZWwgbGlicmUsIHF1aSBwZXV0IGxlIHJlbmRyZSBjb21wbGV4ZSAmIzIyNDsgbWFuaXB1bGVyIGV0IHF1aSBsZSByJiMyMzM7c2VydmUgZG9uYyAmIzIyNDsgZGVzIGQmIzIzMzt2ZWxvcHBldXJzIG91IGRlcyBwcm9mZXNzaW9ubmVscyBhdmVydGlzIHBvc3MmIzIzMztkYW50IGRlcyBjb25uYWlzc2FuY2VzIGluZm9ybWF0aXF1ZXMgYXBwcm9mb25kaWVzLiBMZXMgdXRpbGlzYXRldXJzIHNvbnQgZG9uYyBpbnZpdCYjMjMzO3MgJiMyMjQ7IGNoYXJnZXIgZXQgdGVzdGVyIGxgYWQmIzIzMztxdWF0aW9uIGR1IGxvZ2ljaWVsICYjMjI0OyBsZXVycyBiZXNvaW5zIGRhbnMgZGVzIGNvbmRpdGlvbnMgcGVybWV0dGFudCBkYGFzc3VyZXIgbGEgcyYjMjMzO2N1cml0JiMyMzM7IGRlIGxldXJzIHN5c3QmIzIzMjttZXMgZXQvb3UgZGUgbGV1cnMgZG9ubiYjMjMzO2VzIGV0LCBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQsICYjMjI0OyBsYHV0aWxpc2VyIGV0IGxgZXhwbG9pdGVyIGRhbnMgbGVzIG0mIzIzNDttZXMgY29uZGl0aW9ucyBkZSBzJiMyMzM7Y3VyaXQmIzIzMzsuIENlIGNvbnRyYXQgcGV1dCAmIzIzNDt0cmUgcmVwcm9kdWl0IGV0IGRpZmZ1cyYjMjMzOyBsaWJyZW1lbnQsIHNvdXMgciYjMjMzO3NlcnZlIGRlIGxlIGNvbnNlcnZlciBlbiBsYCYjMjMzO3RhdCwgc2FucyBham91dCBuaSBzdXBwcmVzc2lvbiBkZSBjbGF1c2VzLgorCitDZSBjb250cmF0IGVzdCBzdXNjZXB0aWJsZSBkZSBzYGFwcGxpcXVlciAmIzIyNDsgdG91dCBsb2dpY2llbCBkb250IGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkJiMyMzM7Y2lkZSBkZSBzb3VtZXR0cmUgbGBleHBsb2l0YXRpb24gYXV4IGRpc3Bvc2l0aW9ucyBxdWBpbCBjb250aWVudC4KKworQXJ0aWNsZSAxIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXVgaWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxgYWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgJiMyMzM7dmVudHVlbGxlbWVudCBkZSBDb2RlIE9iamV0IGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsZXVyIHByZW1pJiMyMzI7cmUgZGlmZnVzaW9uIHNvdXMgbGVzIHRlcm1lcyBkdSBDb250cmF0LgorCitMb2dpY2llbCBNb2RpZmkmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgcGFyIGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbGBhY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmU6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgZCYjMjMzO3RlbnRldXJzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGRgYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVycyBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZGBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZS4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBDb2RlIFNvdXJjZSBwYXIgdG91dCBDb250cmlidXRldXIuCisKK01vZHVsZSBMaSYjMjMzOzogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWksIHNhbnMgbW9kaWZpY2F0aW9uIGR1IENvZGUgU291cmNlLCBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK0xvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzs6IGQmIzIzMztzaWduZSB0b3V0ZSBjb21iaW5haXNvbiBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgZXQgZGB1biBNb2R1bGUgTGkmIzIzMzsuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHNgZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGRgdW5lIGxpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgY2Vzc2libGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEgTGBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZXMgdGVybWVzIGR1IENvbnRyYXQgZXN0IHImIzIzMztwdXQmIzIzMztlIGFjcXVpc2UgZHUgZmFpdCBkdSBwcmVtaWVyIGRlcyBmYWl0cyBzdWl2YW50czoKKworKGkpIGxlIGNoYXJnZW1lbnQgZHUgTG9naWNpZWwgcGFyIHRvdXQgbW95ZW4gbm90YW1tZW50IHBhciB0JiMyMzM7bCYjMjMzO2NoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHNlcnZldXIgZGlzdGFudCBvdSBwYXIgY2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc3VwcG9ydCBwaHlzaXF1ZTsKKyhpaSkgbGUgcHJlbWllciBleGVyY2ljZSBwYXIgbGUgTGljZW5jaSYjMjMzOyBkZSBsYHVuIHF1ZWxjb25xdWUgZGVzIGRyb2l0cyBjb25jJiMyMzM7ZCYjMjMzO3MgcGFyIGxlIENvbnRyYXQuCiszLjIgVW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LCBjb250ZW5hbnQgbm90YW1tZW50IHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiBhdXggc3AmIzIzMztjaWZpY2l0JiMyMzM7cyBkdSBMb2dpY2llbCwgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0ICYjMjI0OyBsYSBsaW1pdGF0aW9uICYjMjI0OyB1biB1c2FnZSBwYXIgZGVzIHV0aWxpc2F0ZXVycyBleHAmIzIzMztyaW1lbnQmIzIzMztzIGEgJiMyMzM7dCYjMjMzOyBtaXMgJiMyMjQ7IGRpc3Bvc2l0aW9uIGR1IExpY2VuY2kmIzIzMzsgcHImIzIzMzthbGFibGVtZW50ICYjMjI0OyBzb24gYWNjZXB0YXRpb24gdGVsbGUgcXVlIGQmIzIzMztmaW5pZSAmIzIyNDsgbGBhcnRpY2xlIDMuMSBjaSBkZXNzdXMgZXQgbGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBlbiBhdm9pciBwcmlzIGNvbm5haXNzYW5jZS4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xIEVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMiBEVVJFRQorCitMZSBDb250cmF0IHByb2R1aXJhIHNlcyBlZmZldHMgcGVuZGFudCB0b3V0ZSBsYSBkdXImIzIzMztlIGwmIzIzMztnYWxlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggcG9ydGFudCBzdXIgbGUgTG9naWNpZWwuCisKK0FydGljbGUgNSAtIEVURU5EVUUgREVTIERST0lUUyBDT05DRURFUworCitMZSBDb25jJiMyMzM7ZGFudCBjb25jJiMyMzI7ZGUgYXUgTGljZW5jaSYjMjMzOywgcXVpIGFjY2VwdGUsIGxlcyBkcm9pdHMgc3VpdmFudHMgc3VyIGxlIExvZ2ljaWVsIHBvdXIgdG91dGVzIGRlc3RpbmF0aW9ucyBldCBwb3VyIGxhIGR1ciYjMjMzO2UgZHUgQ29udHJhdCBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKK1BhciBhaWxsZXVycywgc2kgbGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO3RpZW50IG91IHZlbmFpdCAmIzIyNDsgZCYjMjMzO3RlbmlyIHVuIG91IHBsdXNpZXVycyBicmV2ZXRzIGRgaW52ZW50aW9uIHByb3QmIzIzMztnZWFudCB0b3V0IG91IHBhcnRpZSBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgZHUgTG9naWNpZWwgb3UgZGUgc2VzIGNvbXBvc2FudHMsIGlsIHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgb3Bwb3NlciBsZXMgJiMyMzM7dmVudHVlbHMgZHJvaXRzIGNvbmYmIzIzMztyJiMyMzM7cyBwYXIgY2VzIGJyZXZldHMgYXV4IExpY2VuY2kmIzIzMztzIHN1Y2Nlc3NpZnMgcXVpIHV0aWxpc2VyYWllbnQsIGV4cGxvaXRlcmFpZW50IG91IG1vZGlmaWVyYWllbnQgbGUgTG9naWNpZWwuIEVuIGNhcyBkZSBjZXNzaW9uIGRlIGNlcyBicmV2ZXRzLCBsZSBDb25jJiMyMzM7ZGFudCBzYGVuZ2FnZSAmIzIyNDsgZmFpcmUgcmVwcmVuZHJlIGxlcyBvYmxpZ2F0aW9ucyBkdSBwciYjMjMzO3NlbnQgYWxpbiYjMjMzO2EgYXV4IGNlc3Npb25uYWlyZXMuCisKKzUuMSBEUk9JVCBEYFVUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkYGFwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbGBhZmZpY2hhZ2UsIGxgZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZGBlbiBvYnNlcnZlciwgZGBlbiAmIzIzMzt0dWRpZXIsIG91IGRgZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuYGltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGRgYWZmaWNoYWdlLCBkYGV4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXVgaWwgZXN0IGVuIGRyb2l0IGRgZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMiBEUk9JVCBERSBNT0RJRklDQVRJT04KKworTGUgZHJvaXQgZGUgbW9kaWZpY2F0aW9uIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4gSWwgY29tcHJlbmQgZW4gcGFydGljdWxpZXIgbGUgZHJvaXQgZGUgY3ImIzIzMztlciB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBhcHBvcnRlciB0b3V0ZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgc291cyByJiMyMzM7c2VydmUgZGUgbWVudGlvbm5lciwgZGUgZmEmIzIzMTtvbiBleHBsaWNpdGUsIHNvbiBub20gZW4gdGFudCBxdWBhdXRldXIgZGUgY2V0dGUgbW9kaWZpY2F0aW9uIGV0IGxhIGRhdGUgZGUgY3ImIzIzMzthdGlvbiBkZSBjZWxsZS1jaS4KKworNS4zIERST0lUIERFIERJU1RSSUJVVElPTgorCitMZSBkcm9pdCBkZSBkaXN0cmlidXRpb24gY29tcG9ydGUgbm90YW1tZW50IGxlIGRyb2l0IGRlIGRpZmZ1c2VyLCBkZSB0cmFuc21ldHRyZSBldCBkZSBjb21tdW5pcXVlciBsZSBMb2dpY2llbCBhdSBwdWJsaWMgc3VyIHRvdXQgc3VwcG9ydCBldCBwYXIgdG91dCBtb3llbiBhaW5zaSBxdWUgbGUgZHJvaXQgZGUgbWV0dHJlIHN1ciBsZSBtYXJjaCYjMjMzOyAmIzIyNDsgdGl0cmUgb24mIzIzMztyZXV4IG91IGdyYXR1aXQsIHVuIG91IGRlcyBleGVtcGxhaXJlcyBkdSBMb2dpY2llbCBwYXIgdG91dCBwcm9jJiMyMzM7ZCYjMjMzOy4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBjb25mb3JtZXMgZHUgTG9naWNpZWwsIHNvdXMgZm9ybWUgZGUgQ29kZSBTb3VyY2Ugb3UgZGUgQ29kZSBPYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmIGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgcGVuZGFudCBhdSBtb2lucyB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHNhIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCwgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBDb2RlIFNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4yIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBNT0RJRklFCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhcHBvcnRlIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIHImIzIzMztzdWx0YW50IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGxgaW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc291cyBmb3JtZSBkZSBjb2RlIHNvdXJjZSBvdSBkZSBjb2RlIG9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBjb2RlIG9iamV0IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBlc3QgcmVkaXN0cmlidSYjMjMzOywgbGUgTGljZW5jaSYjMjMzOyBwZXJtZXR0ZSB1biBhY2MmIzIzMjtzIGVmZmVjdGlmICYjMjI0OyBzb24gY29kZSBzb3VyY2UgY29tcGxldCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBuZSBkZXZyYSBwYXMgZXhjJiMyMzM7ZGVyIGxlIHNpbXBsZSBjbyYjMjUxO3QgZGUgdHJhbnNmZXJ0IGRlcyBkb25uJiMyMzM7ZXMuCisKKzUuMy4zIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBERVJJVkUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGNyJiMyMzM7ZSB1biBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LCBjZSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGF1dHJlIHF1ZSBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCAmIzIyNDsgY29uZGl0aW9uIGRlIHJlc3BlY3RlciBsZXMgb2JsaWdhdGlvbnMgZGUgbWVudGlvbiBkZXMgZHJvaXRzIHN1ciBsZSBMb2dpY2llbCB0ZWxsZXMgcXVlIGQmIzIzMztmaW5pZXMgJiMyMjQ7IGxgYXJ0aWNsZSA2LjQuIERhbnMgbGUgY2FzIG8mIzI0OTsgbGEgY3ImIzIzMzthdGlvbiBkdSBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7IGEgbiYjMjMzO2Nlc3NpdCYjMjMzOyB1bmUgbW9kaWZpY2F0aW9uIGR1IENvZGUgU291cmNlIGxlIGxpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZToKKworbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvcnJlc3BvbmRhbnQgJiMyMjQ7IGNldHRlIG1vZGlmaWNhdGlvbiBzb2l0IHImIzIzMztnaSBwYXIgbGUgcHImIzIzMztzZW50IENvbnRyYXQsCitsZXMgQ29udHJpYnV0aW9ucyBJbnQmIzIzMztnciYjMjMzO2VzIGRvbnQgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IHImIzIzMztzdWx0ZSBzb2llbnQgY2xhaXJlbWVudCBpZGVudGlmaSYjMjMzO2VzIGV0IGRvY3VtZW50JiMyMzM7ZXMsCitsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgY29kZSBzb3VyY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgbGEgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzssIGRlIHRlbGxlIHNvcnRlIHF1ZSBjZXMgbW9kaWZpY2F0aW9ucyBwdWlzc2VudCAmIzIzNDt0cmUgcmVwcmlzZXMgZGFucyB1bmUgdmVyc2lvbiB1bHQmIzIzMztyaWV1cmUgZHUgTG9naWNpZWwsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgY29kZSBzb3VyY2UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkdSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKzUuMy40IENPTVBBVElCSUxJVEUgQVZFQyBMQSBMSUNFTkNFIENlQ0lMTAorCitMb3JzcXVgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvbnRpZW50IHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlIHNvdW1pc2UgYXUgY29udHJhdCBkZSBsaWNlbmNlIENlQ0lMTCwgb3UgbG9yc3F1YHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgY29udGllbnQgdW4gTW9kdWxlIExpJiMyMzM7IHNvdW1pcyBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBsZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyBhdSB0cm9pc2kmIzIzMjttZSBpdGVtIGRlIGxgYXJ0aWNsZSA2LjQgc29udCBmYWN1bHRhdGl2ZXMuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TIElOVEVHUkVFUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UgZXN0IHRpdHVsYWlyZSBzdXIgY2VsbGUtY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMgU1VSIExFUyBNT0RVTEVTIExJRVMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBMaSYjMjMzOyBlc3QgdGl0dWxhaXJlIHN1ciBjZWx1aS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24gZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzICYjMjI0OyBsYGFydGljbGUgNS4zLjMuCisKKzYuNCBNRU5USU9OUyBERVMgRFJPSVRTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uOworCismIzIyNDsgZmFpcmUgZW4gc29ydGUgcXVlIGxgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwsIHNlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGV0IGxlIGZhaXQgcXVgaWwgZXN0IHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBzb2llbnQgaW5kaXF1JiMyMzM7cyBkYW5zIHVuIHRleHRlIGZhY2lsZW1lbnQgYWNjZXNzaWJsZSBub3RhbW1lbnQgZGVwdWlzIGxgaW50ZXJmYWNlIGRlIHRvdXQgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOy4KK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgc3VyIGxlIExvZ2ljaWVsIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsYCYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMSBMZSBDb250cmF0IG5gb2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkYGFzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRgdW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGRgdW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG5gZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbmBlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdWBpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsYG9iamV0IGRgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMSBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA4LjIsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1YGlsIHN1YmlyYWl0IGR1IGZhaXQgZHUgTG9naWNpZWwgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIgTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6IChpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsYGluZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbGB1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGV0IChpaWkpIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCBkYHVuIHF1ZWxjb25xdWUgZG9tbWFnZSBpbmRpcmVjdC4gRW4gcGFydGljdWxpZXIsIGxlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGRgZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG5gb3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGAmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGRgZW4gdGVzdGVyIGV0IGRgZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGxgZXhpc3RlbmNlIGRgJiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMYGF0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsYGFkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXVgaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgImVuIGxgJiMyMzM7dGF0IiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGxgYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXVgaWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdWBpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsYCYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdWBpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQgTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGB1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbGB1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGRgdW4gcHJvdG9jb2xlIGRgYWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsYHV0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbmBlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbGBleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsYGV4aXN0ZW5jZSBkYHVuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuYGVzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXVgaWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdWBlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEgQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkYHVuIHJldGFyZCBvdSBkYHVuZSBkJiMyMzM7ZmFpbGxhbmNlIGRgZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGxgaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGxgJiMyMzM7dGF0IGRlIGd1ZXJyZS4uLgorCisxMS4yIExlIGZhaXQsIHBhciBsYHVuZSBvdSBsYGF1dHJlIGRlcyBQYXJ0aWVzLCBkYG9tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZGB1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgc2BlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbGBhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG5gYXVyYSBkYGVmZmV0ICYjMjI0OyBsYCYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGRgJiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQgRGFucyBsYGh5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgc2BhdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZGB1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGxgZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNSBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLCBjZXMgZGV1eCB2ZXJzaW9ucyBmYWlzYW50ICYjMjMzO2dhbGVtZW50IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEgVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIgQWZpbiBkYGVuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMzO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZS4KKworQXJ0aWNsZSAxMyAtIExPSSBBUFBMSUNBQkxFIEVUIENPTVBFVEVOQ0UgVEVSUklUT1JJQUxFCisKKzEzLjEgTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbGBhbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbGBvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yIEEgZCYjMjMzO2ZhdXQgZGBhY2NvcmQgYW1pYWJsZSBkYW5zIHVuIGQmIzIzMztsYWkgZGUgZGV1eCAoMikgbW9pcyAmIzIyNDsgY29tcHRlciBkZSBsZXVyIHN1cnZlbmFuY2UgZXQgc2F1ZiBzaXR1YXRpb24gcmVsZXZhbnQgZGB1bmUgcHJvYyYjMjMzO2R1cmUgZGB1cmdlbmNlLCBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgc2Vyb250IHBvcnQmIzIzMztzIHBhciBsYSBQYXJ0aWUgbGEgcGx1cyBkaWxpZ2VudGUgZGV2YW50IGxlcyBUcmlidW5hdXggY29tcCYjMjMzO3RlbnRzIGRlIFBhcmlzLgorCisxIENlQ0lMTCBlc3QgcG91ciBDZShhKSBDKG5ycykgSShucmlhKSBMKG9naWNpZWwpIEwoaWJyZSkKKworVmVyc2lvbiAxLjAgZHUgMjAwNi0wOS0wNS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWZiMGUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BBTC0xLjAKQEAgLTAsMCArMSwxMDkgQEAKKworQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChDUEFMKQorMS4gJiM4MjIwO0RlZmluaXRpb25zJiM4MjIxOworMS4wLjEgJiM4MjIwO0NvbW1lcmNpYWwgVXNlJiM4MjIxOyBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xICYjODIyMDtDb250cmlidXRvciYjODIyMTsgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yICYjODIyMDtDb250cmlidXRvciBWZXJzaW9uJiM4MjIxOyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMgJiM4MjIwO0NvdmVyZWQgQ29kZSYjODIyMTsgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNCAmIzgyMjA7RWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJiM4MjIxOyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNSAmIzgyMjA7RXhlY3V0YWJsZSYjODIyMTsgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYgJiM4MjIwO0luaXRpYWwgRGV2ZWxvcGVyJiM4MjIxOyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcgJiM4MjIwO0xhcmdlciBXb3JrJiM4MjIxOyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44ICYjODIyMDtMaWNlbnNlJiM4MjIxOyBtZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEgJiM4MjIwO0xpY2Vuc2FibGUmIzgyMjE7IG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45ICYjODIyMDtNb2RpZmljYXRpb25zJiM4MjIxOyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorMS4xMCAmIzgyMjA7T3JpZ2luYWwgQ29kZSYjODIyMTsgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMSAmIzgyMjA7UGF0ZW50IENsYWltcyYjODIyMTsgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExICYjODIyMDtTb3VyY2UgQ29kZSYjODIyMTsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3ImIzgyMTc7cyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyICYjODIyMDtZb3UmIzgyMjE7IChvciAmIzgyMjA7WW91ciYjODIyMTspIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICYjODIyMDtZb3UmIzgyMjE7IGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAmIzgyMjA7Y29udHJvbCYjODIyMTsgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorMi4yIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCiszLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorMy4zIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCiszLjQgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkmIzgyMTc7cyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICYjODIyMDtMRUdBTCYjODIyMTsgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3ImIzgyMTc7cyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvciYjODIxNztzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJiM4MjE3O3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKzMuNSBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKzMuNiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCYjODIxNztzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCiszLjcgTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMSBOZXcgVmVyc2lvbnMuCitTb2NpYWx0ZXh0LCBJbmMuICgmIzgyMjA7U29jaWFsdGV4dCYjODIyMTspIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKzYuMiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFNvY2lhbHRleHQuIE5vIG9uZSBvdGhlciB0aGFuIFNvY2lhbHRleHQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorNi4zIERlcml2YXRpdmUgV29ya3MuCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAmIzgyMjA7U29jaWFsdGV4dCYjODIyMTssICYjODIyMDtDUEFMJiM4MjIxOyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIENQQUwuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gJiM4MjIwO0FTIElTJiM4MjIxOyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIE9SSUdJTkFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4LiBURVJNSU5BVElPTi4KKzguMSBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICYjODIyMDtQYXJ0aWNpcGFudCYjODIyMTspIGFsbGVnaW5nIHRoYXQ6CisoYSkgc3VjaCBQYXJ0aWNpcGFudCYjODIxNztzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCis4LjQgSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgT1JJR0lOQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJiM4MjE3O1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhICYjODIyMDtjb21tZXJjaWFsIGl0ZW0sJiM4MjIxOyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJiM4MjIwO2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUmIzgyMjE7IGFuZCAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCYjODIyMTsgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMmIzgyMTc7IGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzIE11bHRpcGxlLUxpY2Vuc2VkLiBNdWx0aXBsZS1MaWNlbnNlZCBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIENQQUwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKzE0LiBBRERJVElPTkFMIFRFUk06IEFUVFJJQlVUSU9OCisoYSkgQXMgYSBtb2Rlc3QgYXR0cmlidXRpb24gdG8gdGhlIG9yZ2FuaXplciBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgKCYjODIyMDtPcmlnaW5hbCBEZXZlbG9wZXImIzgyMjE7KSwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBpbmNsdWRlIGluIEV4aGliaXQgQiAoJiM4MjIwO0F0dHJpYnV0aW9uIEluZm9ybWF0aW9uJiM4MjIxOykgYSByZXF1aXJlbWVudCB0aGF0IGVhY2ggdGltZSBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBvciBhIExhcmdlciBXb3JrIGlzIGxhdW5jaGVkIG9yIGluaXRpYWxseSBydW4gKHdoaWNoIGluY2x1ZGVzIGluaXRpYXRpbmcgYSBzZXNzaW9uKSwgYSBwcm9taW5lbnQgZGlzcGxheSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyJiM4MjE3O3MgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gKGFzIGRlZmluZWQgYmVsb3cpIG11c3Qgb2NjdXIgb24gdGhlIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgZW1wbG95ZWQgYnkgdGhlIGVuZCB1c2VyIHRvIGFjY2VzcyBzdWNoIENvdmVyZWQgQ29kZSAod2hpY2ggbWF5IGluY2x1ZGUgZGlzcGxheSBvbiBhIHNwbGFzaCBzY3JlZW4pLCBpZiBhbnkuIFRoZSBzaXplIG9mIHRoZSBncmFwaGljIGltYWdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG90aGVyIGVsZW1lbnRzIG9mIHRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbi4gSWYgdGhlIGFjY2VzcyBieSB0aGUgZW5kIHVzZXIgdG8gdGhlIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGRvZXMgbm90IGNyZWF0ZSBhIGdyYXBoaWMgdXNlciBpbnRlcmZhY2UgZm9yIGFjY2VzcyB0byB0aGUgQ292ZXJlZCBDb2RlLCB0aGlzIG9ibGlnYXRpb24gc2hhbGwgbm90IGFwcGx5LiBJZiB0aGUgT3JpZ2luYWwgQ29kZSBkaXNwbGF5cyBzdWNoIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGluIGEgcGFydGljdWxhciBmb3JtIChzdWNoIGFzIGluIHRoZSBmb3JtIG9mIGEgc3BsYXNoIHNjcmVlbiwgbm90aWNlIGF0IGxvZ2luLCBhbiAmIzgyMjA7YWJvdXQmIzgyMjE7IGRpc3BsYXksIG9yIGRlZGljYXRlZCBhdHRyaWJ1dGlvbiBhcmVhIG9uIHVzZXIgaW50ZXJmYWNlIHNjcmVlbnMpLCBjb250aW51ZWQgdXNlIG9mIHN1Y2ggZm9ybSBmb3IgdGhhdCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBvbmUgd2F5IG9mIG1lZXRpbmcgdGhpcyByZXF1aXJlbWVudCBmb3Igbm90aWNlLgorKGIpIEF0dHJpYnV0aW9uIGluZm9ybWF0aW9uIG1heSBvbmx5IGluY2x1ZGUgYSBjb3B5cmlnaHQgbm90aWNlLCBhIGJyaWVmIHBocmFzZSwgZ3JhcGhpYyBpbWFnZSBhbmQgYSBVUkwgKCYjODIyMDtBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiYjODIyMTspIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSBBdHRyaWJ1dGlvbiBMaW1pdHMgYXMgZGVmaW5lZCBiZWxvdy4gRm9yIHRoZXNlIHB1cnBvc2VzLCBwcm9taW5lbnQgc2hhbGwgbWVhbiBkaXNwbGF5IGZvciBzdWZmaWNpZW50IGR1cmF0aW9uIHRvIGdpdmUgcmVhc29uYWJsZSBub3RpY2UgdG8gdGhlIHVzZXIgb2YgdGhlIGlkZW50aXR5IG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIHRoYXQgaWYgWW91IGluY2x1ZGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb3Igc2ltaWxhciBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgcGFydGllcywgWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGZvciB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIHNoYWxsIGJlIG5vIGxlc3MgcHJvbWluZW50IHRoYW4gc3VjaCBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvciBzaW1pbGFyIGluZm9ybWF0aW9uIGZvciB0aGUgb3RoZXIgcGFydHkuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIE9yaWdpbmFsIERldmVsb3BlciBtYXkgY2hvb3NlIHRvIHNwZWNpZnkgaW4gRXhoaWJpdCBCIGJlbG93IHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSByZXN1bHRpbmcgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgTW9kaWZpY2F0aW9uLCBidXQgbm90IGEgTGFyZ2VyIFdvcmsuIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIHRoZXJlZm9yZSB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGNhbm5vdCByZXF1aXJlIHRoYXQgWW91IGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbjogKGEpIGEgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgKGIpIGEgd29yZCBvciBvbmUgcGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTsgKGMpIG9uZSBncmFwaGljIGltYWdlIHByb3ZpZGVkIGJ5IHRoZSBPcmlnaW5hbCBEZXZlbG9wZXI7IGFuZCAoZCkgYSBVUkwgKGNvbGxlY3RpdmVseSwgdGhlICYjODIyMDtBdHRyaWJ1dGlvbiBMaW1pdHMmIzgyMjE7KS4KKyhjKSBJZiBFeGhpYml0IEIgZG9lcyBub3QgaW5jbHVkZSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24sIHRoZW4gdGhlcmUgYXJlIG5vIHJlcXVpcmVtZW50cyBmb3IgWW91IHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuCisoZCkgWW91IGFja25vd2xlZGdlIHRoYXQgYWxsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MgYW5kL29yIHRyYWRlIG5hbWVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGRpc3RyaWJ1dGVkIHdpdGggdGhlIENvdmVyZWQgQ29kZSBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGVpciBvd25lcnMgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGVpciBvd25lcnMsIG9yIHVuZGVyIGNpcmN1bXN0YW5jZXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBsYXcgb3IgYXMgZXhwcmVzc2x5IHNldCBvdXQgaW4gdGhpcyBMaWNlbnNlLgorMTUuIEFERElUSU9OQUwgVEVSTTogTkVUV09SSyBVU0UuCitUaGUgdGVybSAmIzgyMjA7RXh0ZXJuYWwgRGVwbG95bWVudCYjODIyMTsgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDMuMSBhbmQgbWFrZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgdW5kZXIgU2VjdGlvbiAzLjIuCisKKyBFWEhJQklUIEEuIENvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMC4KKyYjODIyMDtUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAmIzgyMjA7TGljZW5zZSYjODIyMTspOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBfX19fX19fX19fX19fLiBUaGUgTGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSBidXQgU2VjdGlvbnMgMTQgYW5kIDE1IGhhdmUgYmVlbiBhZGRlZCB0byBjb3ZlciB1c2Ugb2Ygc29mdHdhcmUgb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsgYW5kIHByb3ZpZGUgZm9yIGxpbWl0ZWQgYXR0cmlidXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuIEluIGFkZGl0aW9uLCBFeGhpYml0IEEgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIEV4aGliaXQgQi4KK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICYjODIyMDtBUyBJUyYjODIyMTsgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgaXNfX19fX19fX19fX19fX19fX19fX19fLgorVGhlIE9yaWdpbmFsIERldmVsb3BlciBpcyBub3QgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpcyBfX19fX19fX19fLiBJZiBsZWZ0IGJsYW5rLCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIHRoZSBJbml0aWFsIERldmVsb3Blci4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX18uIEFsbCBwb3J0aW9ucyBvZiB0aGUgY29kZSB3cml0dGVuIGJ5IF9fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKGMpIF9fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3IgX19fX19fX19fX19fX19fX19fX19fXy4KK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgW19fX10gTGljZW5zZSksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLgorSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBDUEFMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgQ1BBTCBvciB0aGUgW19fX10gTGljZW5zZS4mIzgyMjE7CitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKKyBFWEhJQklUIEIuIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uCitBdHRyaWJ1dGlvbiBDb3B5cmlnaHQgTm90aWNlOiBfX19fX19fX19fX19fX19fX19fX19fXworQXR0cmlidXRpb24gUGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTogX19fX19fX19fX19fX19fX19fX19fX18KK0F0dHJpYnV0aW9uIFVSTDogX19fX19fX19fX19fX19fX19fX19fX18KK0dyYXBoaWMgSW1hZ2UgYXMgcHJvdmlkZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgaWYgYW55LgorRGlzcGxheSBvZiBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBbcmVxdWlyZWQvbm90IHJlcXVpcmVkXSBpbiBMYXJnZXIgV29ya3Mgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIENQQUwgYXMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBDUEFMLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdjMjBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1BMLTEuMApAQCAtMCwwICsxLDIxNSBAQAorCitDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENPTU1PTiBQVUJMSUMKK0xJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTQorQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZAorZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCisKK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjoKKworaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCisKK2lpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07CisKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gYG9yaWdpbmF0ZXNgIGZyb20gYQorQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZQorYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvCit0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluCitjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdAorZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlCituZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbgorY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwKK2luY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8KK3JlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLAorZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2gKK2Rlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZAorUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZQorQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUKK1Byb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlCitMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMKK3doaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzCit0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkKK0NvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvCitSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUKK3JpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUKK3Jlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4KK0ZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0bworZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UKK2JlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCisKK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKK2NvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0Citmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMy4gUkVRVUlSRU1FTlRTCisKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzCitvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2EpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorCitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZAorbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworCitpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IKK2RhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsCitkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZAorYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCisKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaAorQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IKK3Rocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworYSkgaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorCitDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlCitQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmCithbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZQorb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoCityZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvCitpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIKK3doaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYKK2EgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2gKK0NvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkKK2V2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMKK2FuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwKK2FjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZQorZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8KK2NvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueQorcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbgorYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0CitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcworcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaAorQ29tbWVyY2lhbCBDb250cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIKK0NvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQKK3JlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaAorUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZgorcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YKK3Byb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZCitDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QKK1BST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZQorbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZQordGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoCitwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvCithIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYQorbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQKK3VuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluCithZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbQoraXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpCitpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnRgcyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnRgcyByaWdodHMgZ3JhbnRlZCB1bmRlcgorU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvCitjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMKK25vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YKK3N1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsCitSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMKK3JlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50CithbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZAorc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4KK29yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUKK21vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCitwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuCitObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuCitJQk0gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZQorYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZworQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3VuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAoraXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cworQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucworMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMKK0FncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhcgorYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4KK2FueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmY1OWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ1VBLU9QTC0xLjAKQEAgLTAsMCArMSw0NzEgQEAKKworQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorKHBsYWluIHRleHQpCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCitDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zCittYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKK2FzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCitzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZQorY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywKK2FuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKK2FueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZQorZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIKK3dlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUKK1NvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlCithcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlCitmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcworY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZgordGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LAordG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5Citjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaAorZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsCittb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsCitDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yCithcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCitzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwKK3NlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZQorT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlCitlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMKK09yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKQorc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCitieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKK2hlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zCitjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgordW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUKK2FuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yCitzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZQorYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCitvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZQorbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUKK2VmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZgordGhlIENvdmVyZWQgQ29kZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCitDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOworMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mCitDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlCitieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcworaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKK3RoYXQgQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK1NlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlCitkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhCitjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUKK3ZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlCithbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK2VpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKKyg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsCitDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUKK2Rpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUKK3BhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsCitrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlcgordGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsCitDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcworQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMKKyhzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZAorQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaAorYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdAorYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0bworU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcworTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IKK0NvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5Cit0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlCitDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhCitsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseQordG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpCitZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24KK2ZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAKK3JpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5CitvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91CittYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbgorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcworb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heQorY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCitMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50CitsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIKK2Zyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQordGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CitiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKK3N1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorQ1VBIE9mZmljZSBQcm9qZWN0IG1heSBwdWJsaXNoIHJldmlzZWQKK2FuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbgord2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgQ1VBIE9mZmljZSBQcm9qZWN0LiBObyBvbmUKK290aGVyIHRoYW4gQ1VBIE9mZmljZSBQcm9qZWN0IGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCitDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkKK29ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQKK3RoZSBwaHJhc2VzICJDVUEgT2ZmaWNlIiwgIkNVQSIsICJDVUFQTCIsIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIKK2xpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpCithbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCitjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mCit0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCitJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULAorWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRQorQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKK0FOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCitzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwKK3N1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKK25hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlCitzaGFsbCBzdXJ2aXZlLgorCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQKK2NsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KK1lvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5CitpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoCitQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlCitzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LAordW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKQorYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZQorcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvCit0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzCitvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QKK211dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0KK2lzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCit0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgorYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQorYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsCitzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50CithbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMKK2J5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKK2dyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuCitpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwKK2FsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKK3doaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCitPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCitJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyCitzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoCit0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4CitDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksCithbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UKK3JpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCithbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwKK29yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkCitTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybgorRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZAorZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KK0FueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0CitzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcworTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKK3Jlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCit3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKK3Jlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCisiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwKK0RldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKK1lvdXIgY2hvaWNlIG9mIHRoZSBOUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZAorYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisKK0VYSElCSVQgQSAtIENVQSBPZmZpY2UgUHVibGljIExpY2Vuc2UuCisKK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly9jdWFvZmZpY2Uuc291cmNlZm9yZ2UubmV0LworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCitfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlIHRoZQorcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UKK2Fib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQoreW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgQ1VBUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKK2RlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUKK3RoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKK3VuZGVyIGVpdGhlciB0aGUgQ1VBUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mCit0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQKK3VzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKK09yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DbEFydGlzdGljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNWE0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DbEFydGlzdGljCkBAIC0wLDAgKzEsMTM4IEBACisKKyAgICAgICBUaGUgQ2xhcmlmaWVkIEFydGlzdGljIExpY2Vuc2UKKworICAgIFByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZQorc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsCit3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlCityZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisgIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKyBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorCisgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyBtb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMKKyBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBhcyBzcGVjaWZpZWQgYmVsb3cuCisKKyAiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yCisgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisKKyAiWW91IiBpcyB5b3UsIGlmIHlvdWByZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZworIHRoaXMgUGFja2FnZS4KKworICJEaXN0cmlidXRpb24gZmVlIiBpcyBhIGZlZSB5b3UgY2hhcmdlIGZvciBwcm92aWRpbmcgYSBjb3B5CisgICAgICAgIG9mIHRoaXMgUGFja2FnZSB0byBhbm90aGVyIHBhcnR5LgorCisgIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSByaWdodCB0bworICAgICAgICB1c2UgdGhlIGl0ZW0sIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUKKyAgICAgICAgaXRlbS4gIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUKKyAgICAgICAgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UKK2R1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMKK2Rlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiwgb3IgdGhvc2UgbWFkZSBGcmVlbHkgQXZhaWxhYmxlLCBvciBmcm9tCit0aGUgQ29weXJpZ2h0IEhvbGRlci4gIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlCitjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZAordGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQKK3doZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZQorZm9sbG93aW5nOgorCisgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KKyAgICBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbgorICAgIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgbmV0d29yaworICAgIGFyY2hpdmUgc2l0ZSBhbGxvd2luZyB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIHRoZW0sIG9yIGJ5IGFsbG93aW5nIHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24KKyAgICBvZiB0aGUgUGFja2FnZS4KKworICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlCisgICAgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkKKyAgICBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgcGVybWl0IGFuZCBlbmNvdXJnZSBhbnlvbmUgd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgUGFja2FnZQorICAgICAgIHBlcm1pc3Npb24gdG8gbWFrZSB5b3VyIG1vZGlmaWNhdGlvbnMgRnJlZWx5IEF2YWlsYWJsZQorICAgICAgIGluIHNvbWUgc3BlY2lmaWMgd2F5LgorCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yCitleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLAorICAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUKKyAgICB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorICAgIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLgorCisgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseQorICAgIGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlcgorICAgIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgb2ZmZXIgdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlLCB3aXRoIHlvdXIKKyAgICAgICBtb2RpZmljYXRpb25zLCBieSBtYWlsIG9yZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorSWYgeW91IG9mZmVyIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSwgeW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlCitmb3IgdGhhdCBzdXBwb3J0LiAgWW91IG1heSBub3QgY2hhcmdlIGEgbGljZW5zZSBmZWUgZm9yIHRoZSByaWdodCB0byB1c2UKK3RoaXMgUGFja2FnZSBpdHNlbGYuICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoCitvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCBhbmQgcG9zc2libHkgbm9uZnJlZSkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhCitsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK2FuZCBjaGFyZ2UgbGljZW5zZSBmZWVzIGZvciBvdGhlciBwYXJ0cyBvZiB0aGF0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK3Byb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KK0lmIHRoZSBQYWNrYWdlIGluY2x1ZGVzIGFuIGludGVycHJldGVyLCBZb3UgbWF5IGVtYmVkIHRoaXMgUGFja2FnZWBzCitpbnRlcnByZXRlciB3aXRoaW4gYW4gZXhlY3V0YWJsZSBvZiB5b3VycyAoYnkgbGlua2luZyk7IHRoaXMgc2hhbGwgYmUKK2NvbnN0cnVlZCBhcyBhIG1lcmUgZm9ybSBvZiBhZ2dyZWdhdGlvbiwgcHJvdmlkZWQgdGhhdCB0aGUgY29tcGxldGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIHNvIGVtYmVkZGVkLgorCis2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcworb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsCit1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9ldmVyIGdlbmVyYXRlZAordGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZS4gIElmIHN1Y2ggc2NyaXB0cyBvciBsaWJyYXJ5IGZpbGVzIGFyZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZSB2aWEgdGhlIHNvLWNhbGxlZCAidW5kdW1wIiBvciAidW5leGVjIiBtZXRob2RzIG9mIHByb2R1Y2luZyBhCitiaW5hcnkgZXhlY3V0YWJsZSBpbWFnZSwgdGhlbiBkaXN0cmlidXRpb24gb2Ygc3VjaCBhbiBpbWFnZSBzaGFsbAorbmVpdGhlciBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlIG5vciBzaGFsbCBpdAorZmFsbCB1bmRlciB0aGUgcmVzdHJpY3Rpb25zIG9mIFBhcmFncmFwaHMgMyBhbmQgNCwgcHJvdmlkZWQgdGhhdCB5b3UgZG8KK25vdCByZXByZXNlbnQgc3VjaCBhbiBleGVjdXRhYmxlIGltYWdlIGFzIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzCitQYWNrYWdlLgorCis3LiBDIHN1YnJvdXRpbmVzIChvciBjb21wYXJhYmx5IGNvbXBpbGVkIHN1YnJvdXRpbmVzIGluIG90aGVyCitsYW5ndWFnZXMpIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIGluIG9yZGVyIHRvCitlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcworUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGFyZSB0aGUKK2VxdWl2YWxlbnQgb2YgaW5wdXQgYXMgaW4gUGFyYWdyYXBoIDYsIHByb3ZpZGVkIHRoZXNlIHN1YnJvdXRpbmVzIGRvCitub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUKK3JlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBsYW5ndWFnZS4KKworOC4gQWdncmVnYXRpb24gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2Ugd2l0aCBhIGNvbW1lcmNpYWwKK2Rpc3RyaWJ1dGlvbiBpcyBhbHdheXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIHVzZSBvZiB0aGlzIFBhY2thZ2UKK2lzIGVtYmVkZGVkOyB0aGF0IGlzLCB3aGVuIG5vIG92ZXJ0IGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHRoaXMgUGFja2FnZWBzCitpbnRlcmZhY2VzIHZpc2libGUgdG8gdGhlIGVuZCB1c2VyIG9mIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4KK1N1Y2ggdXNlIHNoYWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorCis5LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMTAuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisgICAgVGhlIEVuZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTlkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9EU1NTTApAQCAtMCwwICsxLDQ5IEBACitDb3B5cmlnaHQKKy0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBOb3JtYW4gV2Fsc2gKKworVGhlIG9yaWdpbmFsIGluc3BpcmF0aW9uIGZvciB0aGVzZSBzdHlsZXNoZWV0cyBjYW1lIGZyb20gdGhlCit3b3JrIG9mIEpvbiBCb3NhaywgQW5kZXJzIEJlcmdsdW5kLCBUb255IEdyYWhhbSwgVGVycnkgQWxsZW4sCitKYW1lcyBDbGFyaywgYW5kIG1hbnkgb3RoZXJzLiAgSSBhbSBpbmRlYnRlZCB0byB0aGVtIGFuZCB0byB0aGUKK2NvbW11bml0eSBvZiB1c2VycyBvbiBkc3NzbGlzdEBtdWxiZXJyeXRlY2guY29tIGZvciBtYWtpbmcKK3N1YnN0YW50aWFsIGNvbnRyaWJ1dGlvbnMgdG8gdGhpcyB3b3JrIGFuZCBmb3IgYW5zd2VyaW5nIG15IG1hbnkKK3F1ZXN0aW9ucy4KKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSmFkZToKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCitzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIGluZGl2aWR1YWxzCitjcmVkaXRlZCB3aXRoIGNvbnRyaWJ1dGlvbiB0byB0aGlzIHNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyCitkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitmcm9tIHRoZSBpbmRpdmlkdWFscyBpbiBxdWVzdGlvbi4KKworQW55IHN0eWxlc2hlZXQgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgdGhhdCBpcyBwdWJsaWNhbGx5CitkaXN0cmlidXRlZCB3aWxsIGJlIGlkZW50aWZpZWQgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCB0aGUKK3ZlcnNpb24gc3RyaW5ncyBpbiBhbnkgZGVyaXZlZCBTb2Z0d2FyZSB3aWxsIGJlIGNoYW5nZWQgc28gdGhhdAorbm8gcG9zc2liaWxpdHkgb2YgY29uZnVzaW9uIGJldHdlZW4gdGhlIGRlcml2ZWQgcGFja2FnZSBhbmQgdGhpcworU29mdHdhcmUgd2lsbCBleGlzdC4KKworV2FycmFudHkKKy0tLS0tLS0tCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTk9STUFOIFdBTFNIIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM4YmUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTEuMApAQCAtMCwwICsxLDU1IEBACisKK1RoaXMgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMKK3RvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyCisodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0NvcHlyaWdodCAoYykgPHllYXI+IDxjb3B5cmlnaHQgaG9sZGVycz4KKworTGljZW5zZWQgdW5kZXIgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHZlcnNpb24gMS4wCisKK1RoaXMgT3JpZ2luYWwgV29yaywgaW5jbHVkaW5nIHNvZnR3YXJlLCBzb3VyY2UgY29kZSwgZG9jdW1lbnRzLAorb3Igb3RoZXIgcmVsYXRlZCBpdGVtcywgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIocykKK3N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZS4gQnkKK29idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyBPcmlnaW5hbCBXb3JrLCB5b3UgYWdyZWUgdGhhdCB5b3UKK2hhdmUgcmVhZCwgdW5kZXJzdGFuZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlOgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kCitzdWJsaWNlbnNlIHRoaXMgT3JpZ2luYWwgV29yayBhbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UsIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IHRvIHRoZQorY29weXJpZ2h0IGhvbGRlcihzKSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUKK2ZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHBvcnRpb25zIHRoZXJlb2YsCitpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aXZlcywgdGhhdCB5b3UgbWFrZToKKworCitUaGUgZnVsbCB0ZXh0IG9mIHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvCit1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCisKKworQW55IHByZS1leGlzdGluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGlzY2xhaW1lcnMsIG5vdGljZXMsIG9yIHRlcm1zIGFuZAorY29uZGl0aW9ucy4KKworCisKK05vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgdGhlCitkYXRlIHRoZSBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCitBbnkgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayBtdXN0IGJlIGRpc3RyaWJ1dGVkIGluIHN1Y2ggYSBtYW5uZXIgYXMKK3RvIGF2b2lkIGFueSBjb25mdXNpb24gd2l0aCB0aGUgT3JpZ2luYWwgV29yayBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcihzKSBtYXkgTk9UIGJlIHVzZWQKK2luIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBPcmlnaW5hbCBvciBEZXJpdmF0aXZlCitXb3JrcyB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbgordGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgdGltZXMKK3JlbWFpbiB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjOTllNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0yLjAKQEAgLTAsMCArMSw5OSBAQAorCitFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyhwbGFpbiB0ZXh0KQorRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UKKworVmVyc2lvbiAyLjAsIEFwcmlsIDIwMDcKKworaHR0cDovL3d3dy5vc2VkdS5vcmcvbGljZW5zZXMvCisKK1RoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB2ZXJzaW9uIDIuMCAoIkVDTCIpIGNvbnNpc3RzIG9mIHRoZSBBcGFjaGUgMi4wIGxpY2Vuc2UsIG1vZGlmaWVkIHRvIGNoYW5nZSB0aGUgc2NvcGUgb2YgdGhlIHBhdGVudCBncmFudCBpbiBzZWN0aW9uIDMgdG8gYmUgc3BlY2lmaWMgdG8gdGhlIG5lZWRzIG9mIHRoZSBlZHVjYXRpb24gY29tbXVuaXRpZXMgdXNpbmcgdGhpcyBsaWNlbnNlLiBUaGUgb3JpZ2luYWwgQXBhY2hlIDIuMCBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisxLiBEZWZpbml0aW9ucy4KKworIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbCBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yayAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucyByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4gc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLCB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZiB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudCB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLCBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZSBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCiszLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yayBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEFueSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGhlcmVieSB3aXRoIHJlc3BlY3QgdG8gY29udHJpYnV0aW9ucyBieSBhbiBpbmRpdmlkdWFsIGVtcGxveWVkIGJ5IGFuIGluc3RpdHV0aW9uIG9yIG9yZ2FuaXphdGlvbiBpcyBsaW1pdGVkIHRvIHBhdGVudCBjbGFpbXMgd2hlcmUgdGhlIGluZGl2aWR1YWwgdGhhdCBpcyB0aGUgYXV0aG9yIG9mIHRoZSBXb3JrIGlzIGFsc28gdGhlIGludmVudG9yIG9mIHRoZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2VkLCBhbmQgd2hlcmUgdGhlIG9yZ2FuaXphdGlvbiBvciBpbnN0aXR1dGlvbiBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHN1Y2ggbGljZW5zZSB1bmRlciBhcHBsaWNhYmxlIGdyYW50IGFuZCByZXNlYXJjaCBmdW5kaW5nIGFncmVlbWVudHMuIE5vIG90aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCBsaWNlbnNlcyBhcmUgZ3JhbnRlZC4KKworNC4gUmVkaXN0cmlidXRpb24uCisKK1lvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91IG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCitZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCitZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdCBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLCB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cyBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZCB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKzUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4KKworVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworNi4gVHJhZGVtYXJrcy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5IG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LgorCitXaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdG8geW91ciB3b3JrCisKK1RvIGFwcGx5IHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaAordGhlIGZvbGxvd2luZyBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieQorYnJhY2tldHMgIltdIiByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLgorKERvbmB0IGluY2x1ZGUgdGhlIGJyYWNrZXRzISkgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZQorYXBwcm9wcmlhdGUgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQKK3RoYXQgYSBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24KK3RoZSBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKK2lkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXSBMaWNlbnNlZCB1bmRlciB0aGUKKyBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5Cisgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heQorIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyBodHRwOi8vd3d3Lm9zZWR1Lm9yZy9saWNlbnNlcy9FQ0wtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3MKKyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FREwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjFlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FREwtMS4wCkBAIC0wLDAgKzEsMTMgQEAKK0VjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSB2IDEuMAorCitDb3B5cmlnaHQgKGMpIDIwMDcsIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGxpY2Vuc29ycy4KKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTk2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMS4wCkBAIC0wLDAgKzEsMjUgQEAKKworRWlmZmVsIEZvcnVtIExpY2Vuc2UsIHZlcnNpb24gMQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZC9vciBkaXN0cmlidXRlCit0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6CisKKyAgLSBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgdW5jaGFuZ2VkCisKKyAgLSBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSwgd2hldGhlciBtb2RpZmllZCBvciBub3QsCisgICAgaW5jbHVkZXMgdGhpcyBmaWxlCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28gZ3JhbnRlZCB0byBkaXN0cmlidXRlIGJpbmFyeSBwcm9ncmFtcyB3aGljaAorZGVwZW5kIG9uIHRoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKKworICAtIGlmIHRoZSBiaW5hcnkgcHJvZ3JhbSBkZXBlbmRzIG9uIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzCisgICAgcGFja2FnZSwgeW91IG11c3QgcHVibGljbHkgcmVsZWFzZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzCisgICAgcGFja2FnZQorCitUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBQQUNLQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTM3ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTIuMApAQCAtMCwwICsxLDEyIEBACisKK0VpZmZlbCBGb3J1bSBMaWNlbnNlLCB2ZXJzaW9uIDIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHBhY2thZ2UsIHByb3ZpZGVkIHRoYXQ6Citjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgdW5jaGFuZ2VkLAorYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBhY2thZ2UsIHdoZXRoZXIgbW9kaWZpZWQgb3Igbm90LCBpbmNsdWRlcyB0aGlzIGxpY2Vuc2UgdGV4dC4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGFsc28gZ3JhbnRlZCB0byBkaXN0cmlidXRlIGJpbmFyeSBwcm9ncmFtcyB3aGljaCBkZXBlbmQgb24gdGhpcyBwYWNrYWdlLiBJZiB0aGUgYmluYXJ5IHByb2dyYW0gZGVwZW5kcyBvbiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gcHVibGljbHkgcmVsZWFzZSB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuCisqKioqKioqKioqKioqKioqKioqKioqKgorCitUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS4gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgUEFDS0FHRS4gCisqKioqKioqKioqKioqKioqKioqKioqKgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDc2ZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVBMLTEuMApAQCAtMCwwICsxLDcyIEBACisKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCithKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2lpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gYG9yaWdpbmF0ZXNgIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK2EpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCitiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCithKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKK2IpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcmBzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVURhdGFncmlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NmU1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVURhdGFncmlkCkBAIC0wLDAgKzEsMjkgQEAKKworRVUgRGF0YUdyaWQgU29mdHdhcmUgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDEgRVUgRGF0YUdyaWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgc29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSB0byB0aGUgRVUgRGF0YUdyaWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBFVSBEYXRhR3JpZCwgcGxlYXNlIHNlZSBodHRwOi8vd3d3LmV1LWRhdGFncmlkLm9yZy8uCisKK0luc3RhbGxhdGlvbiwgdXNlLCByZXByb2R1Y3Rpb24sIGRpc3BsYXksIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBzb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGFyZSBwZXJtaXR0ZWQuIEFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IHlvdSBvciB5b3VyIHN1Yi1saWNlbnNlZXMgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFib3ZlIGxpY2Vuc2Ugc3RhdGVtZW50IGFzIHdlbGwgYXMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGluIHRoZSBzb2Z0d2FyZSwgdGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBhbmQgYW55IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBzb2Z0d2FyZS4KKworMi4gVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiwgaWYgYW55LCBpbmNsdWRlZCB3aXRoIGEgcmVkaXN0cmlidXRpb24sIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG5vdGljZToKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBFVSBEYXRhR3JpZCAoaHR0cDovL3d3dy5ldS1kYXRhZ3JpZC5vcmcvKS4iCisKK0FsdGVybmF0aXZlbHksIGlmIHRoYXQgaXMgd2hlcmUgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhciwgdGhpcyBhY2tub3dsZWRnbWVudCBtdXN0IGJlIHJlcHJvZHVjZWQgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZi4KKworMy4gVGhlIG5hbWVzICJFREciLCAiRURHIFRvb2xraXQiLCAmIzgyMjA7RVUgRGF0YUdyaWQmIzgyMjE7IGFuZCAiRVUgRGF0YUdyaWQgUHJvamVjdCIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBzb2Z0d2FyZSwgb3IgcHJvZHVjdHMgZGVyaXZlZAordGhlcmVmcm9tLCBleGNlcHQgd2l0aCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gYnkgaGVwLXByb2plY3QtZ3JpZC1lZGctbGljZW5zZUBjZXJuLmNoLgorCis0LiBZb3UgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gcHJvdmlkZSBhbnlvbmUgd2l0aCBhbnkgYnVnIGZpeGVzLCBwYXRjaGVzLCB1cGdyYWRlcyBvciBvdGhlciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZXMgb2YgdGhlIGZlYXR1cmVzLGZ1bmN0aW9uYWxpdHkgb3IgcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZSB0aGF0IHlvdSBtYXkgZGV2ZWxvcC4gSG93ZXZlciwgaWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIHdvcmtzIHdpdGhvdXQgY29udGVtcG9yYW5lb3VzbHkgcmVxdWlyaW5nIHVzZXJzIHRvIGVudGVyIGludG8gYSBzZXBhcmF0ZSB3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50LCB0aGVuIHlvdSBhcmUgZGVlbWVkIHRvIGhhdmUgZ3JhbnRlZCBwYXJ0aWNpcGFudHMgaW4gdGhlIEVVIERhdGFHcmlkIGEgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBsaWNlbnNlIHRvIGluc3RhbGwsIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBtb2RpZnksIHJlZGlzdHJpYnV0ZSBhbmQgc3ViLWxpY2Vuc2UgeW91ciBtb2RpZmljYXRpb25zLCBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZSB3b3Jrcywgd2hldGhlciBpbiBiaW5hcnkgb3Igc291cmNlIGNvZGUgZm9ybSwgdW5kZXIgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMuCisKKzUuIERJU0NMQUlNRVIgCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVVNFIEFSRSBESVNDTEFJTUVELiBUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OIFRIQVQgVEhFIFNPRlRXQVJFLCBNT0RJRklDQVRJT05TLCBFTkhBTkNFTUVOVFMgT1IgREVSSVZBVElWRSBXT1JLUyBUSEVSRU9GLCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVC4gCisKKzYuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1RIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFRPIExJQ0VOU0VFIE9SIE9USEVSIFBFUlNPTlMgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIEVYRU1QTEFSWSwgT1IgUFVOSVRJVkUgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlY2JmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4wCkBAIC0wLDAgKzEsMTg0IEBACisKK0V1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlIAorVi4xLjAgCitFVVBMICYjMTY5OyB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5IDIwMDcgCitUaGlzIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlICh0aGUgJiM4MjIwO0VVUEwmIzgyMjE7KSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlIChhcyAKK2RlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlIFdvcmssIG90aGVyIAordGhhbiBhcyBhdXRob3Jpc2VkIHVuZGVyIHRoaXMgTGljZW5jZSBpcyBwcm9oaWJpdGVkICh0byB0aGUgZXh0ZW50IHN1Y2ggdXNlIGlzIGNvdmVyZWQgYnkgYSByaWdodCAKK29mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS4gCitUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIHdoZW4gdGhlIExpY2Vuc29yIChhcyBkZWZpbmVkIAorYmVsb3cpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgCitPcmlnaW5hbCBXb3JrOiAKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMIFYuMS4wIAorb3IgaGFzIGV4cHJlc3NlZCBieSBhbnkgb3RoZXIgbWVhbiBoaXMgd2lsbGluZ25lc3MgdG8gbGljZW5zZSB1bmRlciB0aGUgRVVQTC4gCisxLiBEZWZpbml0aW9ucworSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOiAKKyYjODcyMjsgVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4gCismIzg3MjI7IFRoZSBPcmlnaW5hbCBXb3JrIG9yIHRoZSBTb2Z0d2FyZTogdGhlIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGFuZC9vciBjb21tdW5pY2F0ZWQgYnkgCit0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZSAKK0NvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLiAKKyYjODcyMjsgRGVyaXZhdGl2ZSBXb3JrczogdGhlIHdvcmtzIG9yIHNvZnR3YXJlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBieSB0aGUgTGljZW5zZWUsIGJhc2VkIAordXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YuIFRoaXMgTGljZW5jZSBkb2VzIG5vdCBkZWZpbmUgdGhlIAorZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvIAorY2xhc3NpZnkgYSB3b3JrIGFzIGEgRGVyaXZhdGl2ZSBXb3JrOyB0aGlzIGV4dGVudCBpcyBkZXRlcm1pbmVkIGJ5IGNvcHlyaWdodCBsYXcgCithcHBsaWNhYmxlIGluIHRoZSBjb3VudHJ5IG1lbnRpb25lZCBpbiBBcnRpY2xlIDE1LiAgCismIzg3MjI7IFRoZSBXb3JrOiB0aGUgT3JpZ2luYWwgV29yayBhbmQvb3IgaXRzIERlcml2YXRpdmUgV29ya3MuIAorJiM4NzIyOyBUaGUgU291cmNlIENvZGU6IHRoZSBodW1hbi1yZWFkYWJsZSBmb3JtIG9mIHRoZSBXb3JrIHdoaWNoIGlzIHRoZSBtb3N0IAorY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuIAorJiM4NzIyOyBUaGUgRXhlY3V0YWJsZSBDb2RlOiBhbnkgY29kZSB3aGljaCBoYXMgZ2VuZXJhbGx5IGJlZW4gY29tcGlsZWQgYW5kIHdoaWNoIGlzIAorbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uIAorJiM4NzIyOyBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0ICBkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzIHRoZSAKK1dvcmsgdW5kZXIgdGhlIExpY2VuY2UuIAorJiM4NzIyOyBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUgCitMaWNlbmNlLCBvciBvdGhlcndpc2UgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLiAKKyYjODcyMjsgVGhlIExpY2Vuc2VlIG9yICYjODIyMDtZb3UmIzgyMjE7OiAgYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtYWtlcyBhbnkgdXNhZ2Ugb2YgdGhlIAorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAmIzg3MjI7IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbjogYW55IGFjdCBvZiBzZWxsaW5nLCAgZ2l2aW5nLCBsZW5kaW5nLCByZW50aW5nLCAKK2Rpc3RyaWJ1dGluZywgY29tbXVuaWNhdGluZywgdHJhbnNtaXR0aW5nLCBvciBvdGhlcndpc2UgbWFraW5nIGF2YWlsYWJsZSwgb24tbGluZSBvciAKK29mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgYXQgdGhlIGRpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi4gCisyLiBTY29wZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UKK1RoZSBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsICByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1Yi1saWNlbnNhYmxlIAorbGljZW5jZSB0byBkbyB0aGUgZm9sbG93aW5nLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlyaWdodCB2ZXN0ZWQgaW4gdGhlIE9yaWdpbmFsIFdvcms6IAorJiM4NzIyOyB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSwgCismIzg3MjI7IHJlcHJvZHVjZSB0aGUgV29yaywgCismIzg3MjI7IG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLCAKKyYjODcyMjsgY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZSBXb3JrIAorb3IgY29waWVzIHRoZXJlb2YgdG8gdGhlIHB1YmxpYyBhbmQgcGVyZm9ybSBwdWJsaWNseSwgYXMgdGhlIGNhc2UgbWF5IGJlLCB0aGUgV29yaywgCismIzg3MjI7IGRpc3RyaWJ1dGUgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsIAorJiM4NzIyOyBsZW5kIGFuZCByZW50IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLCAKKyYjODcyMjsgc3ViLWxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLiAKK1Rob3NlIHJpZ2h0cyBjYW4gYmUgZXhlcmNpc2VkIG9uIGFueSBtZWRpYSwgIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdyBrbm93biBvciAKK2xhdGVyIGludmVudGVkLCBhcyBmYXIgYXMgdGhlIGFwcGxpY2FibGUgbGF3IHBlcm1pdHMgc28uIAorSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcyBtb3JhbCAKK3JpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlIGVjb25vbWljIHJpZ2h0cyAKK2hlcmUgYWJvdmUgbGlzdGVkLiAKK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIHJveWFsdHktZnJlZSwgbm9uIGV4Y2x1c2l2ZSB1c2FnZSByaWdodHMgdG8gYW55IHBhdGVudHMgCitoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9uIHRoZSBXb3JrIAordW5kZXIgdGhpcyBMaWNlbmNlLiAKKzMuIENvbW11bmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlCitUaGUgTGljZW5zb3IgbWF5IHByb3ZpZGUgdGhlIFdvcmsgZWl0aGVyIGluIGl0cyBTb3VyY2UgQ29kZSBmb3JtLCBvciBhcyBFeGVjdXRhYmxlIENvZGUuIElmIAordGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCAgdGhlIExpY2Vuc29yIHByb3ZpZGVzIGluIGFkZGl0aW9uIGEgbWFjaGluZXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBXb3JrIHRoYXQgdGhlIAorTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgYXR0YWNoZWQgdG8gdGhlIAorV29yaywgYSByZXBvc2l0b3J5IHdoZXJlIHRoZSBTb3VyY2UgQ29kZSBpcyBlYXNpbHkgYW5kIGZyZWVseSBhY2Nlc3NpYmxlIGZvciBhcyBsb25nIGFzIHRoZSAKK0xpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4gCis0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHQKK05vdGhpbmcgaW4gdGhpcyBMaWNlbmNlIGlzIGludGVuZGVkIHRvIGRlcHJpdmUgdGhlIExpY2Vuc2VlIG9mIHRoZSBiZW5lZml0cyBmcm9tIGFueSBleGNlcHRpb24gCitvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbCBXb3JrIG9yIFNvZnR3YXJlLCBvZiAKK3RoZSBleGhhdXN0aW9uIG9mIHRob3NlIHJpZ2h0cyBvciBvZiBvdGhlciBhcHBsaWNhYmxlIGxpbWl0YXRpb25zIHRoZXJldG8uIAorNS4gT2JsaWdhdGlvbnMgb2YgdGhlIExpY2Vuc2VlCitUaGUgZ3JhbnQgb2YgdGhlIHJpZ2h0cyBtZW50aW9uZWQgYWJvdmUgaXMgc3ViamVjdCB0byBzb21lIHJlc3RyaWN0aW9ucyBhbmQgb2JsaWdhdGlvbnMgCitpbXBvc2VkIG9uIHRoZSBMaWNlbnNlZS4gVGhvc2Ugb2JsaWdhdGlvbnMgYXJlIHRoZSBmb2xsb3dpbmc6IEF0dHJpYnV0aW9uIHJpZ2h0OiB0aGUgTGljZW5zZWUgc2hhbGwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFya3Mgbm90aWNlcyAKK2FuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBUaGUgTGljZW5zZWUgbXVzdCAKK2luY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBoZS9zaGUgCitkaXN0cmlidXRlcyBhbmQvb3IgY29tbXVuaWNhdGVzLiBUaGUgTGljZW5zZWUgbXVzdCBjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IAorcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBtb2RpZmljYXRpb24uIAorQ29weWxlZnQgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgZGlzdHJpYnV0ZXMgYW5kL29yICBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZSBPcmlnaW5hbCAKK1dvcmtzIG9yIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIAorQ29tbXVuaWNhdGlvbiB3aWxsIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zICBvZiB0aGlzIExpY2VuY2UuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgCitMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZSBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciAgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciAKK0Rlcml2YXRpdmUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4gCitDb21wYXRpYmlsaXR5IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIERpc3RyaWJ1dGVzIGFuZC9vciBDb21tdW5pY2F0ZXMgRGVyaXZhdGl2ZSBXb3JrcyBvciAKK2NvcGllcyB0aGVyZW9mIGJhc2VkIHVwb24gYm90aCB0aGUgT3JpZ2luYWwgV29yayBhbmQgYW5vdGhlciB3b3JrIGxpY2Vuc2VkIHVuZGVyIGEgCitDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiAKK3RoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsICYjODIyMDtDb21wYXRpYmxlIExpY2VuY2UmIzgyMjE7IHJlZmVycyB0byB0aGUgCitsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvICB0aGlzIExpY2VuY2UuIFNob3VsZCB0aGUgIExpY2Vuc2VlJiM4MjE3O3Mgb2JsaWdhdGlvbnMgCit1bmRlciB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIGNvbmZsaWN0IHdpdGggaGlzL2hlciAgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgCitvYmxpZ2F0aW9ucyBvZiB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIHNoYWxsIHByZXZhaWwuICAKK1Byb3Zpc2lvbiBvZiBTb3VyY2UgQ29kZTogV2hlbiBkaXN0cmlidXRpbmcgYW5kL29yIGNvbW11bmljYXRpbmcgY29waWVzIG9mIHRoZSBXb3JrLCB0aGUgCitMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yICBpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgCit3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgTGljZW5zZWUgY29udGludWVzIHRvIAorZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuIAorTGVnYWwgUHJvdGVjdGlvbjogVGhpcyBMaWNlbmNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgCitzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSAKK2luIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuIAorNi4gQ2hhaW4gb2YgQXV0aG9yc2hpcAorVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkIGhlcmV1bmRlciBpcyAKK293bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQgYXV0aG9yaXR5IHRvIGdyYW50IAordGhlIExpY2VuY2UuIAorRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUgV29yayAKK2FyZSBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIgYW5kIGF1dGhvcml0eSB0byAKK2dyYW50IHRoZSBMaWNlbmNlLiAKK0VhY2ggdGltZSBZb3UsIGFzIGEgTGljZW5zZWUsICByZWNlaXZlIHRoZSBXb3JrLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgCitDb250cmlidXRvcnMgZ3JhbnQgWW91IGEgbGljZW5jZSB0byB0aGVpciBjb250cmlidXRpb25zIHRvIHRoZSBXb3JrLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyAKK0xpY2VuY2UuIAorNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorVGhlIFdvcmsgaXMgYSB3b3JrIGluIHByb2dyZXNzLCB3aGljaCBpcyBjb250aW51b3VzbHkgaW1wcm92ZWQgYnkgbnVtZXJvdXMgY29udHJpYnV0b3JzLiBJdCAKK2lzIG5vdCBhIGZpbmlzaGVkIHdvcmsgYW5kIG1heSB0aGVyZWZvcmUgY29udGFpbiBkZWZlY3RzIG9yICYjODIyMDtidWdzJiM4MjIxOyBpbmhlcmVudCB0byB0aGlzIHR5cGUgb2YgCitzb2Z0d2FyZSBkZXZlbG9wbWVudC4gCitGb3IgdGhlIGFib3ZlIHJlYXNvbiwgdGhlIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIExpY2VuY2Ugb24gYW4gJiM4MjIwO2FzIGlzJiM4MjIxOyBiYXNpcyBhbmQgd2l0aG91dCAKK3dhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gbWVyY2hhbnRhYmlsaXR5LCAKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLCBhY2N1cmFjeSwgbm9uLWluZnJpbmdlbWVudCBvZiAKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3RoZXIgdGhhbiBjb3B5cmlnaHQgYXMgc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGUgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZSBncmFudCBvZiAKK2FueSByaWdodHMgdG8gdGhlIFdvcmsuIAorOC4gRGlzY2xhaW1lciBvZiBMaWFiaWxpdHkKK0V4Y2VwdCBpbiB0aGUgY2FzZXMgb2Ygd2lsZnVsIG1pc2NvbmR1Y3Qgb3IgZGFtYWdlcyBkaXJlY3RseSBjYXVzZWQgdG8gbmF0dXJhbCBwZXJzb25zLCB0aGUgCitMaWNlbnNvciB3aWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCwgbWF0ZXJpYWwgb3IgbW9yYWwsIGRhbWFnZXMgb2YgCithbnkga2luZCwgYXJpc2luZyBvdXQgb2YgIHRoZSBMaWNlbmNlIG9yIG9mIHRoZSB1c2Ugb2YgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIAorZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgbG9zcyBvZiBkYXRhIG9yIAorYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSAgcG9zc2liaWxpdHkgb2Ygc3VjaCAKK2RhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUgbGlhYmxlIHVuZGVyIHN0YXR1dG9yeSBwcm9kdWN0IGxpYWJpbGl0eSBsYXdzIGFzIGZhciBzdWNoIAorbGF3cyBhcHBseSB0byB0aGUgV29yay4gCis5LiBBZGRpdGlvbmFsIGFncmVlbWVudHMKK1doaWxlIGRpc3RyaWJ1dGluZyB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzLCBZb3UgbWF5IGNob29zZSB0byBjb25jbHVkZSBhbiAKK2FkZGl0aW9uYWwgYWdyZWVtZW50IHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSAgb2Ygc3VwcG9ydCwgd2FycmFudHksIAoraW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHNlcnZpY2VzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2VuY2UuIAorSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24gYmVoYWxmIGFuZCBvbiB5b3VyIAorc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiAKK1lvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCAKK2J5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIAord2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuIAorMTAuIEFjY2VwdGFuY2Ugb2YgdGhlIExpY2VuY2UKK1RoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5jZSBjYW4gYmUgYWNjZXB0ZWQgYnkgY2xpY2tpbmcgb24gYW4gaWNvbiAmIzgyMjA7SSBhZ3JlZSYjODIyMTsgcGxhY2VkIHVuZGVyIAordGhlIGJvdHRvbSBvZiBhIHdpbmRvdyBkaXNwbGF5aW5nIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5jZSBvciBieSBhZmZpcm1pbmcgY29uc2VudCBpbiBhbnkgCitvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlIGxhdy4gQ2xpY2tpbmcgb24gdGhhdCBpY29uIAoraW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbmNlIGFuZCAgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgCitjb25kaXRpb25zLiAgCitTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5IAorZXhlcmNpc2luZyBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UsIHN1Y2ggYXMgdGhlIHVzZSBvZiB0aGUgV29yaywgCit0aGUgY3JlYXRpb24gYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIHRoZSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gYnkgWW91IAorb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuICAKKzExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljCitJbiBjYXNlIG9mIGFueSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gb2YgdGhlIFdvcmsgYnkgbWVhbnMgb2YgZWxlY3Ryb25pYyAKK2NvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhIHJlbW90ZSAKK2xvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQgbGVhc3QgcHJvdmlkZSB0byAKK3RoZSBwdWJsaWMgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYWJsZSBsYXcgcmVnYXJkaW5nIHRoZSBpZGVudGlmaWNhdGlvbiBhbmQgCithZGRyZXNzIG9mIHRoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZCAKK3JlcHJvZHVjZWQgYnkgdGhlIExpY2Vuc2VlLiAKKzEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZQorVGhlIExpY2VuY2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgCit0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAKK1N1Y2ggYSB0ZXJtaW5hdGlvbiB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2VuY2VzIG9mIGFueSBwZXJzb24gd2hvIGhhcyByZWNlaXZlZCB0aGUgV29yayAKK2Zyb20gdGhlIExpY2Vuc2VlIHVuZGVyIHRoZSBMaWNlbmNlLCBwcm92aWRlZCBzdWNoIHBlcnNvbnMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIAordGhlIExpY2VuY2UuICAxMy4gTWlzY2VsbGFuZW91cworV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgYmV0d2VlbiAKK3RoZSBQYXJ0aWVzIGFzIHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmV1bmRlci4gCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbmNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhpcyB3aWxsIG5vdCAKK2FmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24gd2lsbCBiZSAKK2NvbnN0cnVlZCBhbmQvb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLiAKK1RoZSBFdXJvcGVhbiBDb21taXNzaW9uIG1heSBwdXQgaW50byBmb3JjZSB0cmFuc2xhdGlvbnMgYW5kL29yIGJpbmRpbmcgbmV3IHZlcnNpb25zIG9mIAordGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZS4gTmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbmNlIHdpbGwgYmUgCitwdWJsaXNoZWQgd2l0aCBhIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4gVGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbmNlIGJlY29tZXMgYmluZGluZyBmb3IgCitZb3UgYXMgc29vbiBhcyBZb3UgYmVjb21lIGF3YXJlIG9mIGl0cyBwdWJsaWNhdGlvbi4gCisxNC4gSnVyaXNkaWN0aW9uCitBbnkgbGl0aWdhdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhcmlzaW5nIGJldHdlZW4gdGhlIEV1cm9wZWFuIAorQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IAorb2YgSnVzdGljZSBvZiB0aGUgRXVyb3BlYW4gQ29tbXVuaXRpZXMsIGFzIGxhaWQgZG93biBpbiBhcnRpY2xlIDIzOCBvZiB0aGUgVHJlYXR5IGVzdGFibGlzaGluZyAKK3RoZSBFdXJvcGVhbiBDb21tdW5pdHkuIAorQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyICB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhbmQgcmVzdWx0aW5nIAorZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIAorY29tcGV0ZW50IGNvdXJ0IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLiAKKzE1LiBBcHBsaWNhYmxlIExhdworVGhpcyBMaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkgd2hlcmUgdGhlIExpY2Vuc29yIAorcmVzaWRlcyBvciBoYXMgaGlzIHJlZ2lzdGVyZWQgb2ZmaWNlLiAKK1RoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6IAorJiM4NzIyOyBhIGxpdGlnYXRpb24gYXJpc2VzIGJldHdlZW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgCitMaWNlbnNlZTsgCismIzg3MjI7IHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvciByZWdpc3RlcmVkIAorb2ZmaWNlIGluc2lkZSBhIEV1cm9wZWFuIFVuaW9uIGNvdW50cnkuICAKKyA9PT1BcHBlbmRpeAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZXMmIzgyMjE7IGFjY29yZGluZyB0byBhcnRpY2xlIDUgRVVQTCBhcmU6IAorJiM4NzIyOyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHYuIDIgCismIzg3MjI7IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMKSB2LiAyLjEsIHYuIDMuMCAKKyYjODcyMjsgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMCAKKyYjODcyMjsgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAxLjAgCismIzg3MjI7IENlY2lsbCB2LiAyLjAgCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxZDg0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVUEwtMS4xCkBAIC0wLDAgKzEsMjA0IEBACisKK0V1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlCitWLiAxLjEKK0VVUEwgJiMxNjk7IHRoZSBFdXJvcGVhbiBDb21tdW5pdHkgMjAwNworVGhpcyBFdXJvcGVhbiBVbmlvbiBQdWJsaWMgTGljZW5jZSAodGhlICYjODIyMDtFVVBMJiM4MjIxOykgYXBwbGllcyB0byB0aGUgV29yayBvciBTb2Z0d2FyZQorKGFzIGRlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlCitXb3JrLCBvdGhlciB0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UKK2lzIGNvdmVyZWQgYnkgYSByaWdodCBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgV29yaykuCitUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlIHdoZW4gdGhlIExpY2Vuc29yIChhcworZGVmaW5lZCBiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKK0xpY2Vuc2VkIHVuZGVyIHRoZSBFVVBMIFYuMS4xCitvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLgorMS4gRGVmaW5pdGlvbnMKK0luIHRoaXMgTGljZW5jZSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKy0gVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4KKy0gVGhlIE9yaWdpbmFsIFdvcmsgb3IgdGhlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYW5kL29yIGNvbW11bmljYXRlZAorYnkgdGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5jZSwgYXZhaWxhYmxlIGFzIFNvdXJjZSBDb2RlIGFuZCBhbHNvIGFzIEV4ZWN1dGFibGUKK0NvZGUgYXMgdGhlIGNhc2UgbWF5IGJlLgorLSBEZXJpdmF0aXZlIFdvcmtzOiB0aGUgd29ya3Mgb3Igc29mdHdhcmUgdGhhdCBjb3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNlZSwKK2Jhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZGVmaW5lCit0aGUgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvciBkZXBlbmRlbmNlIG9uIHRoZSBPcmlnaW5hbCBXb3JrIHJlcXVpcmVkIGluIG9yZGVyIHRvCitjbGFzc2lmeSBhIHdvcmsgYXMgYSBEZXJpdmF0aXZlIFdvcms7IHRoaXMgZXh0ZW50IGlzIGRldGVybWluZWQgYnkgY29weXJpZ2h0IGxhdworYXBwbGljYWJsZSBpbiB0aGUgY291bnRyeSBtZW50aW9uZWQgaW4gQXJ0aWNsZSAxNS4KKy0gVGhlIFdvcms6IHRoZSBPcmlnaW5hbCBXb3JrIGFuZC9vciBpdHMgRGVyaXZhdGl2ZSBXb3Jrcy4KKy0gVGhlIFNvdXJjZSBDb2RlOiB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSBvZiB0aGUgV29yayB3aGljaCBpcyB0aGUgbW9zdAorY29udmVuaWVudCBmb3IgcGVvcGxlIHRvIHN0dWR5IGFuZCBtb2RpZnkuCistIFRoZSBFeGVjdXRhYmxlIENvZGU6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMKK21lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IGEgY29tcHV0ZXIgYXMgYSBwcm9ncmFtLgorLSBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlCitXb3JrIHVuZGVyIHRoZSBMaWNlbmNlLgorLSBDb250cmlidXRvcihzKTogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtb2RpZmllcyB0aGUgV29yayB1bmRlciB0aGUKK0xpY2VuY2UsIG9yIG90aGVyd2lzZSBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYSBEZXJpdmF0aXZlIFdvcmsuCistIFRoZSBMaWNlbnNlZSBvciAmIzgyMjA7WW91JiM4MjIxOzogYW55IG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHdobyBtYWtlcyBhbnkgdXNhZ2Ugb2YgdGhlCitTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuCistIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbjogYW55IGFjdCBvZiBzZWxsaW5nLCBnaXZpbmcsIGxlbmRpbmcsIHJlbnRpbmcsCitkaXN0cmlidXRpbmcsIGNvbW11bmljYXRpbmcsIHRyYW5zbWl0dGluZywgb3Igb3RoZXJ3aXNlIG1ha2luZyBhdmFpbGFibGUsIG9uLWxpbmUgb3IKK29mZi1saW5lLCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgcHJvdmlkaW5nIGFjY2VzcyB0byBpdHMgZXNzZW50aWFsIGZ1bmN0aW9uYWxpdGllcyBhdCB0aGUKK2Rpc3Bvc2FsIG9mIGFueSBvdGhlciBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbi4KKzIuIFNjb3BlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZQorVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlCitsaWNlbmNlIHRvIGRvIHRoZSBmb2xsb3dpbmcsIGZvciB0aGUgZHVyYXRpb24gb2YgY29weXJpZ2h0IHZlc3RlZCBpbiB0aGUKK09yaWdpbmFsIFdvcms6CistIHVzZSB0aGUgV29yayBpbiBhbnkgY2lyY3Vtc3RhbmNlIGFuZCBmb3IgYWxsIHVzYWdlLAorLSByZXByb2R1Y2UgdGhlIFdvcmssCistIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIG1ha2UgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBXb3JrLAorLSBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IHRvIG1ha2UgYXZhaWxhYmxlIG9yIGRpc3BsYXkgdGhlCitXb3JrIG9yIGNvcGllcyB0aGVyZW9mIHRvIHRoZSBwdWJsaWMgYW5kIHBlcmZvcm0gcHVibGljbHksIGFzIHRoZSBjYXNlIG1heSBiZSwKK3RoZSBXb3JrLAorLSBkaXN0cmlidXRlIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLAorLSBsZW5kIGFuZCByZW50IHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLAorLSBzdWItbGljZW5zZSByaWdodHMgaW4gdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuCitUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdwora25vd24gb3IgbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby4KK0luIHRoZSBjb3VudHJpZXMgd2hlcmUgbW9yYWwgcmlnaHRzIGFwcGx5LCB0aGUgTGljZW5zb3Igd2FpdmVzIGhpcyByaWdodCB0byBleGVyY2lzZSBoaXMKK21vcmFsIHJpZ2h0IHRvIHRoZSBleHRlbnQgYWxsb3dlZCBieSBsYXcgaW4gb3JkZXIgdG8gbWFrZSBlZmZlY3RpdmUgdGhlIGxpY2VuY2Ugb2YgdGhlCitlY29ub21pYyByaWdodHMgaGVyZSBhYm92ZSBsaXN0ZWQuCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSByb3lhbHR5LWZyZWUsIG5vbiBleGNsdXNpdmUgdXNhZ2UgcmlnaHRzIHRvIGFueQorcGF0ZW50cyBoZWxkIGJ5IHRoZSBMaWNlbnNvciwgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkCitvbiB0aGUgV29yayB1bmRlciB0aGlzIExpY2VuY2UuCiszLiBDb21tdW5pY2F0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZQorVGhlIExpY2Vuc29yIG1heSBwcm92aWRlIHRoZSBXb3JrIGVpdGhlciBpbiBpdHMgU291cmNlIENvZGUgZm9ybSwgb3IgYXMgRXhlY3V0YWJsZQorQ29kZS4gSWYgdGhlIFdvcmsgaXMgcHJvdmlkZWQgYXMgRXhlY3V0YWJsZSBDb2RlLCB0aGUgTGljZW5zb3IgcHJvdmlkZXMgaW4gYWRkaXRpb24gYQorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUKK1dvcmsgdGhhdCB0aGUgTGljZW5zb3IgZGlzdHJpYnV0ZXMgb3IgaW5kaWNhdGVzLCBpbiBhIG5vdGljZSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGF0dGFjaGVkIHRvIHRoZSBXb3JrLCBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlIFNvdXJjZSBDb2RlIGlzIGVhc2lseSBhbmQgZnJlZWx5CithY2Nlc3NpYmxlIGZvciBhcyBsb25nIGFzIHRoZSBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlCitXb3JrLgorNC4gTGltaXRhdGlvbnMgb24gY29weXJpZ2h0CitOb3RoaW5nIGluIHRoaXMgTGljZW5jZSBpcyBpbnRlbmRlZCB0byBkZXByaXZlIHRoZSBMaWNlbnNlZSBvZiB0aGUgYmVuZWZpdHMgZnJvbSBhbnkKK2V4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbAorV29yayBvciBTb2Z0d2FyZSwgb2YgdGhlIGV4aGF1c3Rpb24gb2YgdGhvc2UgcmlnaHRzIG9yIG9mIG90aGVyIGFwcGxpY2FibGUgbGltaXRhdGlvbnMKK3RoZXJldG8uCis1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWUKK1RoZSBncmFudCBvZiB0aGUgcmlnaHRzIG1lbnRpb25lZCBhYm92ZSBpcyBzdWJqZWN0IHRvIHNvbWUgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucworaW1wb3NlZCBvbiB0aGUgTGljZW5zZWUuIFRob3NlIG9ibGlnYXRpb25zIGFyZSB0aGUgZm9sbG93aW5nOgorQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcworbm90aWNlcyBhbmQgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgTGljZW5jZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KK1RoZSBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0CitjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgV29yayBoYXMgYmVlbgorbW9kaWZpZWQgYW5kIHRoZSBkYXRlIG9mIG1vZGlmaWNhdGlvbi4KK0NvcHlsZWZ0IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgY29waWVzIG9mIHRoZQorT3JpZ2luYWwgV29ya3Mgb3IgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGlzIERpc3RyaWJ1dGlvbgorYW5kL29yIENvbW11bmljYXRpb24gd2lsbCBiZSBkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugb3Igb2YgYSBsYXRlcgordmVyc2lvbiBvZiB0aGlzIExpY2VuY2UgdW5sZXNzIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGV4cHJlc3NseSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyCit0aGlzIHZlcnNpb24gb2YgdGhlIExpY2VuY2UuIFRoZSBMaWNlbnNlZSAoYmVjb21pbmcgTGljZW5zb3IpIGNhbm5vdCBvZmZlciBvciBpbXBvc2UKK2FueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb24gdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrIHRoYXQgYWx0ZXIgb3IKK3Jlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KK0NvbXBhdGliaWxpdHkgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgRGlzdHJpYnV0ZXMgYW5kL29yIENvbW11bmljYXRlcyBEZXJpdmF0aXZlCitXb3JrcyBvciBjb3BpZXMgdGhlcmVvZiBiYXNlZCB1cG9uIGJvdGggdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGFub3RoZXIgd29yaworbGljZW5zZWQgdW5kZXIgYSBDb21wYXRpYmxlIExpY2VuY2UsIHRoaXMgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIGNhbiBiZQorZG9uZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBDb21wYXRpYmxlIExpY2VuY2UuIEZvciB0aGUgc2FrZSBvZiB0aGlzIGNsYXVzZSwKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2UmIzgyMjE7IHJlZmVycyB0byB0aGUgbGljZW5jZXMgbGlzdGVkIGluIHRoZSBhcHBlbmRpeCBhdHRhY2hlZCB0byB0aGlzCitMaWNlbmNlLiBTaG91bGQgdGhlIExpY2Vuc2VlJiM4MjE3O3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhlIENvbXBhdGlibGUgTGljZW5jZSBjb25mbGljdAord2l0aCBoaXMvaGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5jZSwgdGhlIG9ibGlnYXRpb25zIG9mIHRoZSBDb21wYXRpYmxlIExpY2VuY2UKK3NoYWxsIHByZXZhaWwuCitQcm92aXNpb24gb2YgU291cmNlIENvZGU6IFdoZW4gZGlzdHJpYnV0aW5nIGFuZC9vciBjb21tdW5pY2F0aW5nIGNvcGllcyBvZiB0aGUKK1dvcmssIHRoZSBMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yCitpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBTb3VyY2Ugd2lsbCBiZSBlYXNpbHkgYW5kIGZyZWVseSBhdmFpbGFibGUgZm9yIGFzIGxvbmcKK2FzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuCitMZWdhbCBQcm90ZWN0aW9uOiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLAordHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgbmFtZXMgb2YgdGhlIExpY2Vuc29yLCBleGNlcHQgYXMgcmVxdWlyZWQgZm9yCityZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcKK3RoZSBjb250ZW50IG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlLgorNi4gQ2hhaW4gb2YgQXV0aG9yc2hpcAorVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkCitoZXJldW5kZXIgaXMgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyCithbmQgYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorRWFjaCBDb250cmlidXRvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gdGhlIG1vZGlmaWNhdGlvbnMgaGUvc2hlIGJyaW5ncyB0byB0aGUKK1dvcmsgYXJlIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQKK2F1dGhvcml0eSB0byBncmFudCB0aGUgTGljZW5jZS4KK0VhY2ggdGltZSBZb3UgYWNjZXB0IHRoZSBMaWNlbmNlLCB0aGUgb3JpZ2luYWwgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnQgQ29udHJpYnV0b3JzCitncmFudCBZb3UgYSBsaWNlbmNlIHRvIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFdvcmssIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbmNlLgorNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorVGhlIFdvcmsgaXMgYSB3b3JrIGluIHByb2dyZXNzLCB3aGljaCBpcyBjb250aW51b3VzbHkgaW1wcm92ZWQgYnkgbnVtZXJvdXMKK2NvbnRyaWJ1dG9ycy4gSXQgaXMgbm90IGEgZmluaXNoZWQgd29yayBhbmQgbWF5IHRoZXJlZm9yZSBjb250YWluIGRlZmVjdHMgb3IgJiM4MjIwO2J1Z3MmIzgyMjE7CitpbmhlcmVudCB0byB0aGlzIHR5cGUgb2Ygc29mdHdhcmUgZGV2ZWxvcG1lbnQuCitGb3IgdGhlIGFib3ZlIHJlYXNvbiwgdGhlIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIExpY2VuY2Ugb24gYW4gJiM4MjIwO2FzIGlzJiM4MjIxOyBiYXNpcyBhbmQKK3dpdGhvdXQgd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCittZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLAorYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcworc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuCitUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhlIExpY2VuY2UgYW5kIGEgY29uZGl0aW9uIGZvciB0aGUKK2dyYW50IG9mIGFueSByaWdodHMgdG8gdGhlIFdvcmsuCis4LiBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eQorRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsCitwZXJzb25zLCB0aGUgTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yCittb3JhbCwgZGFtYWdlcyBvZiBhbnkga2luZCwgYXJpc2luZyBvdXQgb2YgdGhlIExpY2VuY2Ugb3Igb2YgdGhlIHVzZSBvZiB0aGUgV29yaywKK2luY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyCitmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvcgoraGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuIEhvd2V2ZXIsIHRoZSBMaWNlbnNvciB3aWxsIGJlCitsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggbGF3cyBhcHBseSB0byB0aGUgV29yay4KKzkuIEFkZGl0aW9uYWwgYWdyZWVtZW50cworV2hpbGUgZGlzdHJpYnV0aW5nIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MsIFlvdSBtYXkgY2hvb3NlIHRvCitjb25jbHVkZSBhbiBhZGRpdGlvbmFsIGFncmVlbWVudCB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwKK3dhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMKK0xpY2VuY2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIHlvdXIgb3duCitiZWhhbGYgYW5kIG9uIHlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiB0aGUgb3JpZ2luYWwgTGljZW5zb3Igb3IgYW55CitvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoCitDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3Qgc3VjaAorQ29udHJpYnV0b3IgYnkgdGhlIGZhY3QgWW91IGhhdmUgYWNjZXB0ZWQgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZQorVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbmNlIGNhbiBiZSBhY2NlcHRlZCBieSBjbGlja2luZyBvbiBhbiBpY29uICYjODIyMDtJIGFncmVlJiM4MjIxOworcGxhY2VkIHVuZGVyIHRoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkKK2FmZmlybWluZyBjb25zZW50IGluIGFueSBvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlCitsYXcuIENsaWNraW5nIG9uIHRoYXQgaWNvbiBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzCitMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorU2ltaWxhcmx5LCB5b3UgaXJyZXZvY2FibHkgYWNjZXB0IHRoaXMgTGljZW5jZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBieQorZXhlcmNpc2luZyBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IEFydGljbGUgMiBvZiB0aGlzIExpY2VuY2UsIHN1Y2ggYXMgdGhlIHVzZSBvZgordGhlIFdvcmssIHRoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IKK0NvbW11bmljYXRpb24gYnkgWW91IG9mIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLgorMTEuIEluZm9ybWF0aW9uIHRvIHRoZSBwdWJsaWMKK0luIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljCitjb21tdW5pY2F0aW9uIGJ5IFlvdSAoZm9yIGV4YW1wbGUsIGJ5IG9mZmVyaW5nIHRvIGRvd25sb2FkIHRoZSBXb3JrIGZyb20gYQorcmVtb3RlIGxvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQKK2xlYXN0IHByb3ZpZGUgdG8gdGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcKK3RoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZAorcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuCisxMi4gVGVybWluYXRpb24gb2YgdGhlIExpY2VuY2UKK1RoZSBMaWNlbmNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkKK2JyZWFjaCBieSB0aGUgTGljZW5zZWUgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorU3VjaCBhIHRlcm1pbmF0aW9uIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5jZXMgb2YgYW55IHBlcnNvbiB3aG8gaGFzIHJlY2VpdmVkIHRoZQorV29yayBmcm9tIHRoZSBMaWNlbnNlZSB1bmRlciB0aGUgTGljZW5jZSwgcHJvdmlkZWQgc3VjaCBwZXJzb25zIHJlbWFpbiBpbiBmdWxsCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2VuY2UuCisxMy4gTWlzY2VsbGFuZW91cworV2l0aG91dCBwcmVqdWRpY2Ugb2YgQXJ0aWNsZSA5IGFib3ZlLCB0aGUgTGljZW5jZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQKK2JldHdlZW4gdGhlIFBhcnRpZXMgYXMgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZXVuZGVyLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5jZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoaXMKK3dpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIExpY2VuY2UgYXMgYSB3aG9sZS4gU3VjaCBwcm92aXNpb24KK3dpbGwgYmUgY29uc3RydWVkIGFuZC9vciByZWZvcm1lZCBzbyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitUaGUgRXVyb3BlYW4gQ29tbWlzc2lvbiBtYXkgcHVibGlzaCBvdGhlciBsaW5ndWlzdGljIHZlcnNpb25zIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoaXMgTGljZW5jZSwgc28gZmFyIHRoaXMgaXMgcmVxdWlyZWQgYW5kIHJlYXNvbmFibGUsIHdpdGhvdXQgcmVkdWNpbmcgdGhlIHNjb3BlIG9mCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIExpY2VuY2UuIE5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5jZSB3aWxsIGJlIHB1Ymxpc2hlZCB3aXRoCithIHVuaXF1ZSB2ZXJzaW9uIG51bWJlci4KK0FsbCBsaW5ndWlzdGljIHZlcnNpb25zIG9mIHRoaXMgTGljZW5jZSwgYXBwcm92ZWQgYnkgdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhdmUKK2lkZW50aWNhbCB2YWx1ZS4gUGFydGllcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxpbmd1aXN0aWMgdmVyc2lvbiBvZiB0aGVpciBjaG9pY2UuCisxNC4gSnVyaXNkaWN0aW9uCitBbnkgbGl0aWdhdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhcmlzaW5nIGJldHdlZW4gdGhlCitFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IExpY2Vuc2VlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlCitqdXJpc2RpY3Rpb24gb2YgdGhlIENvdXJ0IG9mIEp1c3RpY2Ugb2YgdGhlIEV1cm9wZWFuIENvbW11bml0aWVzLCBhcyBsYWlkIGRvd24gaW4KK2FydGljbGUgMjM4IG9mIHRoZSBUcmVhdHkgZXN0YWJsaXNoaW5nIHRoZSBFdXJvcGVhbiBDb21tdW5pdHkuCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGJldHdlZW4gUGFydGllcywgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYW5kCityZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBMaWNlbnNlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZQoranVyaXNkaWN0aW9uIG9mIHRoZSBjb21wZXRlbnQgY291cnQgd2hlcmUgdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgY29uZHVjdHMgaXRzIHByaW1hcnkKK2J1c2luZXNzLgorMTUuIEFwcGxpY2FibGUgTGF3CitUaGlzIExpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUgRXVyb3BlYW4gVW5pb24gY291bnRyeSB3aGVyZSB0aGUKK0xpY2Vuc29yIHJlc2lkZXMgb3IgaGFzIGhpcyByZWdpc3RlcmVkIG9mZmljZS4KK1RoaXMgbGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgQmVsZ2lhbiBsYXcgaWY6CistIGEgbGl0aWdhdGlvbiBhcmlzZXMgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueQorTGljZW5zZWU7CistIHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvcgorcmVnaXN0ZXJlZCBvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS4KKz09PQorQXBwZW5kaXgKKyYjODIyMDtDb21wYXRpYmxlIExpY2VuY2VzJiM4MjIxOyBhY2NvcmRpbmcgdG8gYXJ0aWNsZSA1IEVVUEwgYXJlOgorLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR05VIEdQTCkgdi4gMgorLSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCkgdi4gMi4xLCB2LiAzLjAKKy0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBDZWNpbGwgdi4gMi4wCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VsZnV0aWxzLUV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VsZnV0aWxzLUV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjdkNzY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uCkBAIC0wLDAgKzEsMTIgQEAKKyAgIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGxpbWl0cyBvZiB0aGUgRXhjZXB0aW9uIHVuZGVyIHdoaWNoIHlvdSBhcmUgYWxsb3dlZAorICAgdG8gZGlzdHJpYnV0ZSBOb24tR1BMIENvZGUgaW4gbGlua2VkIGNvbWJpbmF0aW9uIHdpdGggUmVkIEhhdCBlbGZ1dGlscy4KKyAgIEZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlLCBwbGVhc2Ugc2VlIG9uZSBvZiB0aGUgaGVhZGVyIGZpbGVzCisgICBpbmNsdWRlZCB3aXRoIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIG9yIHRoZSBmaWxlIENPUFlJTkcgZm91bmQgaW4gdGhlCisgICB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UuCisKKyAgIFRoZSBBcHByb3ZlZCBJbnRlcmZhY2VzIGFyZSB0aGUgZnVuY3Rpb25zIGRlY2xhcmVkIGluIHRoZSBmaWxlczoKKworICAgbGliZWxmLmgKKyAgIGxpYmR3LmgKKyAgIGxpYmR3ZmwuaAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRW50ZXNzYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGRhZGQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRW50ZXNzYQpAQCAtMCwwICsxLDIwIEBACisKK0VudGVzc2EgUHVibGljIExpY2Vuc2UgVmVyc2lvbi4gMS4wCitDb3B5cmlnaHQgKGMpIDIwMDMgRW50ZXNzYSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1RoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgb3BlbiBzb3VyY2Ugc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IG9wZW5TRUFMIChodHRwOi8vd3d3Lm9wZW5zZWFsLm9yZy8pLiIKKworQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorCitUaGUgbmFtZXMgIm9wZW5TRUFMIiBhbmQgIkVudGVzc2EiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBlcGxAZW50ZXNzYS5jb20uCitQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAib3BlblNFQUwiLCBub3IgbWF5ICJvcGVuU0VBTCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEVudGVzc2EuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVOVEVTU0EsIExMQywgT1BFTlNFQUwgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2Ygb3BlblNFQUwgYW5kIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIGJ5IEVudGVzc2EsIExMQywgaHR0cDovL3d3dy5lbnRlc3NhLmNvbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9wZW5TRUFMLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3Lm9wZW5zZWFsLm9yZy8+LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FcmxQTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FcmxQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2MWNjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMQpAQCAtMCwwICsxLDI4OCBAQAorCitFUkxBTkcgUFVCTElDIExJQ0VOU0UKK1ZlcnNpb24gMS4xCisKKzEuIERlZmluaXRpb25zLgorCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbmBgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKK2luY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiBgYEV4ZWN1dGFibGVgYCBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkCithcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CitBLgorCisxLjcuIGBgTGFyZ2VyIFdvcmtgYCBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKKyAgIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCisgICBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UKK2NvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMKK2Nob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcword2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiBgYFlvdWBgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwKK2VudGl0aWVzLGBgWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwKK29yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorYGBjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKK2RpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCitvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0CisgICAgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsCisgICAgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoYGBVdGlsaXplYGApIHRoZQorICAgIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdAorICAgIGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUKKyAgICB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlcgorICAgIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IKKyAgICBjb21iaW5hdGlvbnMuIAorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yCisgICAgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIKKyAgICBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwKKyAgICB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0CisgICAgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkKKyAgICB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCisgICAgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworICAgIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4gCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvcgoraW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMKK3RoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMKK2hlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcKK3RoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuIAorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcworYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7CithbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdAorcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0Citpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYQorc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAordGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCitmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKK3RoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbAorQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCitvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKyAgICBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uCisgICAgdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UKKyAgICBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgYGBMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kCisgICAgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudAorICAgIHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91CisgICAgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3UKKyAgICBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZQorICAgIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZworICAgIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvCisgICAgaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMKKyAgICBiZWVuIG9idGFpbmVkLiAKKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisgICAgSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorICAgIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworICAgIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgTEVHQUwgZmlsZS4gCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZQorWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdQorY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhCitDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdAorcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2gKK2FzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKK3N1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwKK3dhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlCityZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwKK2FuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IKK3N1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQKK2Zyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMKK25vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UKK2Rpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0CittYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55CitDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCitvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3RvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kCit0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTAorZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwKK2Rpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5CitzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQKK2ZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBDT05ORUNUSU9OIFRPIE1PWklMTEEgUFVCTElDIExJQ0VOU0UKKworVGhpcyBFcmxhbmcgTGljZW5zZSBpcyBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTW96aWxsYSBQdWJsaWMKK0xpY2Vuc2UsIFZlcnNpb24gMS4wLiBJdCBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgTW96aWxsYQorUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVNgYCBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCitERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GCitUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUKK0lOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVAorT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUgorRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzkuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCitBbnkgdXRpbGl6YXRpb24gb2YgQ292ZXJlZCBDb2RlIHNoYWxsIG5vdCBjYXVzZSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGFueSBDb250cmlidXRvciB0byBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIChuZWl0aGVyIGRpcmVjdCBub3IKK2luZGlyZWN0KS4KKworMTAuIE1JU0NFTExBTkVPVVMKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGJ5IGFuZCBpbiBhY2NvcmRhbmNlIHdpdGgKK3RoZSBzdWJzdGFudGl2ZSBsYXdzIG9mIFN3ZWRlbi4gQW55IGRpc3B1dGUsIGNvbnRyb3ZlcnN5IG9yIGNsYWltCithcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UsIG9yIHRoZSBicmVhY2gsIHRlcm1pbmF0aW9uCitvciBpbnZhbGlkaXR5IHRoZXJlb2YsIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24KK29mIFN3ZWRpc2ggY291cnRzLCB3aXRoIHRoZSBTdG9ja2hvbG0gQ2l0eSBDb3VydCBhcyB0aGUgZmlyc3QKK2luc3RhbmNlLgorIAorRVhISUJJVCBBLgorCitgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEVybGFuZyBQdWJsaWMgTGljZW5zZSwKK1ZlcnNpb24gMS4xLCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlCitFcmxhbmcgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLiBJZiBub3QsIGl0IGNhbiBiZQorcmV0cmlldmVkIHZpYSB0aGUgd29ybGQgd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5lcmxhbmcub3JnLy4KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQordGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBFcmljc3NvbiBVdHZlY2tsaW5ncyBBQi4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgRXJpY3Nzb24gYXJlIENvcHlyaWdodCAxOTk5LCBFcmljc3NvbiBVdHZlY2tsaW5ncworQUIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuYGAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZTRi1VbmxpbWl0ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwYTk4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZTRi1VbmxpbWl0ZWQKQEAgLTAsMCArMSw0IEBACitDb3B5cmlnaHQgKEMpIDE5OTctMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpciBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZhaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1YjAxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZhaXIKQEAgLTAsMCArMSwxMSBAQAorCitGYWlyIExpY2Vuc2UKKyhwbGFpbiB0ZXh0KQorPENvcHlyaWdodCBJbmZvcm1hdGlvbj4KKworVXNhZ2Ugb2YgdGhlIHdvcmtzIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgaW5zdHJ1bWVudCBpcyByZXRhaW5lZCB3aXRoIHRoZSB3b3Jrcywgc28gdGhhdCBhbnkgZW50aXR5IHRoYXQgdXNlcyB0aGUgd29ya3MgaXMgbm90aWZpZWQgb2YgdGhpcyBpbnN0cnVtZW50LgorCitESVNDTEFJTUVSOiBUSEUgV09SS1MgQVJFIFdJVEhPVVQgV0FSUkFOVFkuCisKK1syMDA0LCBGYWlyIExpY2Vuc2U6IHJoaWQuY29tL2ZhaXIgKHRoaXMgVVJMIG5vIGxvbmdlciB3b3JrcyldCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmFtZXdvcngtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYmIxODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmFtZXdvcngtMS4wCkBAIC0wLDAgKzEsNjkgQEAKKworVEhFIEZSQU1FV09SWCBPUEVOIExJQ0VOU0UgMS4wCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50LCBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSAxLjAsIGhhcyBiZWVuIGVudGVyZWQgaW50byBiZXR3ZWVuIFRoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgeW91LCB0aGUgbGljZW5zZWUgaGVyZXVuZGVyLCBlZmZlY3RpdmUgYXMgb2YgWW91ciBhY2NlcHRhbmNlIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChlYWNoIGFzIGRlZmluZWQgYmVsb3cpLgorCitBR1JFRU1FTlQgQkFDS0dST1VORAorVGhlIEZyYW1ld29yeCBDb21wYW55IGlzIGNvbW1pdHRlZCB0byB0aGUgYmVsaWVmIHRoYXQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgcmVzdWx0cyBpbiBiZXR0ZXIgcXVhbGl0eSwgZ3JlYXRlciB0ZWNobmljYWwgYW5kIHByb2R1Y3QgaW5ub3ZhdGlvbiBpbiB0aGUgbWFya2V0IHBsYWNlIGFuZCBhIG1vcmUgZW1wb3dlcmVkIGFuZCBwcm9kdWN0aXZlIGRldmVsb3BlciBhbmQgZW5kLXVzZXIgY29tbXVuaXR5LiBPdXIgb2JqZWN0aXZlIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBpbXByb3ZlbWVudHMgYW5kIGlubm92YXRpb25zIHRvIGl0LCByZW1haW4gZnJlZSBhbmQgb3BlbiB0byB0aGUgY29tbXVuaXR5LlRvIGZ1cnRoZXIgdGhlc2UgYmVsaWVmcyBhbmQgb2JqZWN0aXZlcywgd2UgYXJlIGRpc3RyaWJ1dGluZyB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgd2l0aG91dCByb3lhbHRpZXMgYW5kIGluIHNvdXJjZSBjb2RlIGZvcm0sIHRvIHRoZSBjb21tdW5pdHkgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworQUdSRUVNRU5UIFRFUk1TCitUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIFlvdSBoYXZlIGFncmVlZCBhcyBmb2xsb3dzOgorMS5EZWZpbml0aW9ucy5UaGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyByZXNwZWN0aXZlIG1lYW5pbmdzOgorCisoYSkgICAgIEZyYW1ld29yeCBDb2RlIEJhc2UgbWVhbnMgdGhlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgRnJhbWV3b3J4IENvbXBhbnkgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQKKworKGIpICAgICBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtZWFucyBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IHJlbGVhc2UsIGRpc3RyaWJ1dGlvbiBvciByZW1vdGUgYXZhaWxhYmlsaXR5IG9mIHNvZnR3YXJlIChpKSB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY29udGFpbnMsIG9yIGRlcGVuZHMgZm9yIGl0cyBpbnRlbmRlZCBmdW5jdGlvbmluZyBvbiwgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2Ugb3IgYW55IHBvcnRpb24gb3IgZWxlbWVudCB0aGVyZW9mIGFuZCAoaWkpIGluIHdoaWNoIHJpZ2h0cyB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgc3VjaCBGcmFtZXdvcnggQ29kZSBCYXNlIHNvZnR3YXJlIGRlcGVuZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb24gdGhlIExpY2Vuc2UgcHJvdmlkZWQgaW4gU2VjdGlvbiAyIGJlbG93LgorCisoYykgICAgICJTb3VyY2UgQ29kZSIgdG8gYW55IHNvZnR3YXJlIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhhdCBzb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFuZCBjb21waWxhdGlvbiBvciBpbnN0YWxsYXRpb24gc2NyaXB0cywgb3IgYW55IHZlcnNpb24gdGhlcmVvZiB0aGF0IGhhcyBiZWVuIGNvbXByZXNzZWQgb3IgYXJjaGl2ZWQsIGFuZCBjYW4gYmUgcmVjb25zdGl0dXRlZCwgdXNpbmcgYW4gYXBwcm9wcmlhdGUgYW5kIGdlbmVyYWxseSBhdmFpbGFibGUgYXJjaGl2YWwgb3IgY29tcHJlc3Npb24gdGVjaG5vbG9neS4KKworKGQpICAgICBWYWx1ZS1BZGRlZCBTZXJ2aWNlcyBtZWFucyBhbnkgY29tbWVyY2lhbCBvciBmZWUtYmFzZWQgc29mdHdhcmUtcmVsYXRlZCBzZXJ2aWNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uOiBzeXN0ZW0gb3IgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgb3IgY29uc3VsdGluZzsgdGVjaG5pY2FsIG9yIGVuZC11c2VyIHN1cHBvcnQgb3IgdHJhaW5pbmc7IGRpc3RyaWJ1dGlvbiBtYWludGVuYW5jZSwgY29uZmlndXJhdGlvbiBvciB2ZXJzaW9uaW5nOyBvciBvdXRzb3VyY2VkLCBob3N0ZWQgb3IgbmV0d29yay1iYXNlZCBhcHBsaWNhdGlvbiBzZXJ2aWNlcy4KKworMi4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mLCBUaGUgRnJhbWV3b3J4IENvbXBhbnkgaGVyZWJ5IGdyYW50cyBZb3UgYSBub24tZXhjbHVzaXZlIGxpY2Vuc2UgKHRoZSBMaWNlbnNlKSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBhbmQgZm9yIG5vIGZlZSBvdGhlciB0aGFuIGEgbm9taW5hbCBjaGFyZ2UgcmVmbGVjdGluZyB0aGUgY29zdHMgb2YgcGh5c2ljYWwgZGlzdHJpYnV0aW9uLCB0bzoKKworKGEpICAgICB1c2UgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIGluIGVpdGhlciBTb3VyY2UgQ29kZSBvciBtYWNoaW5lLXJlYWRhYmxlIGZvcm07CisKKyhiKSAgICAgbWFrZSBtb2RpZmljYXRpb25zLCBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucyB0byB0aGUgY29udGVudCBvciBzdHJ1Y3R1cmUgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2U7IG9yCisKKyhjKSAgICAgY3JlYXRlIGxhcmdlciB3b3JrcyBvciBkZXJpdmF0aXZlIHdvcmtzIGluY2x1ZGluZyB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2Y7IGFuZAorCisoZCkgICAgIHJlbGVhc2UsIGRpc3RyaWJ1dGUgb3IgbWFrZSBhdmFpbGFibGUsIGVpdGhlciBnZW5lcmFsbHkgb3IgdG8gYW55IHNwZWNpZmljIHRoaXJkLXBhcnR5LCBhbnkgb2YgdGhlIGZvcmVnb2luZyBpbiBTb3VyY2UgQ29kZSBvciBiaW5hcnkgZm9ybS4KKworMy4gTGljZW5zZSBDb25kaXRpb25zLiBUaGUgZ3JhbnQgb2YgdGhlIExpY2Vuc2UgdW5kZXIgU2VjdGlvbiAxIGhlcmVvZiwgYW5kIHlvdXIgZXhlcmNpc2Ugb2YgYWxsIHJpZ2h0cyBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgd2lsbCByZW1haW4gc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhcyB3ZWxsIGFzIHRvIHRoZSBvdGhlciBwcm92aXNpb25zIGhlcmVvZjoKKworKGEpICAgICBDb21wbGV0ZSBTb3VyY2UgQ29kZSBmb3IgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBieSBZb3UgdGhhdCBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgb24sIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YsIHNoYWxsIGJlIG1hZGUgZnJlZWx5IGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgdGhlcmVvZiBvbiB0ZXJtcyBhbmQgY29uZGl0aW9ucyBubyBtb3JlIHJlc3RyaWN0aXZlLCBhbmQgbm8gbGVzcyBmYXZvcmFibGUgZm9yIGFueSB1c2VyIChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgd2l0aCByZWdhcmQgdG8gU291cmNlIENvZGUgYXZhaWxhYmlsaXR5IGFuZCByb3lhbHR5LWZyZWUgdXNlKSB0aGFuIHRob3NlIHRlcm1zIGFuZCBjb25kaXRpb25zIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKyhiKSAgICAgQW55IFZhbHVlLUFkZGVkIFNlcnZpY2VzIHRoYXQgeW91IG9mZmVyIG9yIHByb3ZpZGUsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGluIHJlbGF0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBzaGFsbCBiZSBvZmZlcmVkIGFuZCBwcm92aWRlZCBvbiBjb21tZXJjaWFsIHRlcm1zIHRoYXQgYXJlIHJlYXNvbmFibHkgY29tbWVuc3VyYXRlIHRvIHRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiBzdWNoIFZhbHVlLUFkZGVkIFNlcnZpY2VzLiBJbiBhZGRpdGlvbiwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9uIHdoaWNoIGFueSBzdWNoIFZhbHVlIEFkZGVkIFNlcnZpY2VzIGFyZSBzbyBvZmZlcmVkIG9yIHByb3ZpZGVkIHNoYWxsIGJlIGNvbnNpc3RlbnQgd2l0aCwgYW5kIHNoYWxsIGZ1bGx5IHN1cHBvcnQsIHRoZSBpbnRlbnQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworKGMpICAgICBBbGwgRG93bnN0cmVhbSBEaXN0cmlidXRpb25zIHNoYWxsOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkpICAgICAgICAgICAgaW5jbHVkZSBhbGwgcG9ydGlvbnMgYW5kIGVsZW1lbnRzIG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBTb3VyY2UgQ29kZSBvZiBzdWNoIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGludG8gYSBmdWxseSBmdW5jdGlvbmFsIG1hY2hpbmUtZXhlY3V0YWJsZSBzeXN0ZW0sIG9yIGFkZGl0aW9uYWwgYnVpbGQgc2NyaXB0cyBvciBjb21wYXJhYmxlIHNvZnR3YXJlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCBmb3Igc3VjaCBwdXJwb3NlczsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWkpICAgICAgICAgICAgaW5jbHVkZSwgaW4gZWFjaCBmaWxlIGNvbnRhaW5pbmcgYW55IHBvcnRpb24gb3IgZWxlbWVudCBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgdGhlIGZvbGxvd2luZyBpZGVudGlmeWluZyBsZWdlbmQ6IFRoaXMgZmlsZSBjb250YWlucyBzb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHVuZGVyIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIDEuMC4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGFyZSBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIHRoZXJlaW4uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWlpKSAgICAgICAgICAgIGluY2x1ZGUgYWxsIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLCBhdXRob3JzaGlwIGNyZWRpdHMsIHdhcnJhbnR5IGRpc2NsYWltZXJzIChpbmNsdWRpbmcgdGhhdCBwcm92aWRlZCBpbiBTZWN0aW9uIDYgYmVsb3cpLCBsZWdlbmRzLCBkb2N1bWVudGF0aW9uLCBhbm5vdGF0aW9ucyBhbmQgY29tbWVudHMgY29udGFpbmVkIGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIGFzIHByb3ZpZGVkIHRvIFlvdSBoZXJldW5kZXI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXYpICAgICAgICAgICAgY29udGFpbiBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGUgaHRtbCBmaWxlIG5hbWVkIGZyYW1ld29yeF9jb21tdW5pdHlfaW52aXRhdGlvbi5odG1sIGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGFja25vd2xlZGdlcyBuZXcgdXNlcnMgYW5kIHByb3ZpZGVzIHRoZW0gd2l0aCBpbmZvcm1hdGlvbiBvbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBjb21tdW5pdHk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2KSAgICAgICAgICAgIGNvbnRhaW4gYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhlIHRleHQgZmlsZSBuYW1lZCB0aGVfZnJhbWV3b3J4X2xpY2Vuc2UudHh0IGluY2x1ZGVkIHdpdGhpbiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSB0aGF0IGluY2x1ZGVzIGEgdGV4dCBjb3B5IG9mIHRoZSBmb3JtIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQ7IGFuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpKSAgICAgICAgICAgIHByb21pbmVudGx5IGRpc3BsYXkgdG8gYW55IHZpZXdlciBvciB1c2VyIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBzdWNoIE9wZW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb24sIGluIHRoZSBwbGFjZSBhbmQgbWFubmVyIG5vcm1hbGx5IHVzZWQgZm9yIHN1Y2ggZGlzcGxheXMsIHRoZSBmb2xsb3dpbmcgbGVnZW5kOgorCitTb3VyY2UgY29kZSBsaWNlbnNlZCB1bmRlciBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueSBpcyBjb250YWluZWQgaGVyZWluLCBhbmQgc3VjaCBzb3VyY2UgY29kZSBoYXMgYmVlbiBvYnRhaW5lZCBlaXRoZXIgdW5kZXIgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UsIG9yIGFub3RoZXIgbGljZW5zZSBncmFudGVkIGJ5IFRoZSBGcmFtZXdvcnggQ29tcGFueS4gVXNlIGFuZCBkaXN0cmlidXRpb24gaGVyZW9mIGlzIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBwcm92aWRlZCBpbiB0aGUgcmVsZXZhbnQgc3VjaCBsaWNlbnNlIGFuZCB0byB0aGUgY29weXJpZ2h0cyBvZiB0aGUgbGljZW5zb3IgdGhlcmV1bmRlci4gQSBjb3B5IG9mIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIGlzIHByb3ZpZGVkIGluIGEgZmlsZSBuYW1lZCB0aGVfZnJhbWV3b3J4X2xpY2Vuc2UudHh0IGFuZCBpbmNsdWRlZCBoZXJlaW4sIGFuZCBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb24gYXQgaHR0cDovL3d3dy5mcmFtZXdvcnguY29tLgorCis0LiBSZXN0cmljdGlvbnMgb24gT3BlbiBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbnMuIEVhY2ggRG93bnN0cmVhbSBEaXN0cmlidXRpb24gbWFkZSBieSBZb3UsIGFuZCBieSBhbnkgcGFydHkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBvYnRhaW5pbmcgcmlnaHRzIHRvIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRocm91Z2ggWW91LCBzaGFsbCBiZSBtYWRlIHN1YmplY3QgdG8gYSBsaWNlbnNlIGdyYW50IG9yIGFncmVlbWVudCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSBzbyB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhhdCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIG9uIHJlLWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFzIGFyZSBiaW5kaW5nIG9uIFlvdSBoZXJldW5kZXIuIFlvdSBtYXkgc2F0aXNmeSB0aGlzIGxpY2Vuc2luZyByZXF1aXJlbWVudCBlaXRoZXIgYnk6CisKKyhhKSAgICAgcmVxdWlyaW5nIGFzIGEgY29uZGl0aW9uIHRvIGFueSBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtYWRlIGJ5IHlvdSwgb3IgYnkgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkaXN0cmlidXRlZSBvZiBZb3VyIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIChvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YpLCB0aGF0IGVhY2ggZGlzdHJpYnV0ZWUgdW5kZXIgdGhlIHJlbGV2YW50IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG9idGFpbiBhIGRpcmVjdCBsaWNlbnNlIChvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aG9zZSBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50KSBmcm9tIFRoZSBGcmFtZXdvcnggQ29tcGFueTsgb3IKKworKGIpICAgICBzdWItbGljZW5zaW5nIGFsbCAoYW5kIG5vdCBsZXNzIHRoYW4gYWxsKSBvZiBZb3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHRvIHRoYXQgZGlzdHJpYnV0ZWUsIGluY2x1ZGluZyAod2l0aG91dCBsaW1pdGF0aW9uKSBZb3VyIG9ibGlnYXRpb24gdG8gcmVxdWlyZSBkaXN0cmlidXRlZXMgdG8gYmUgYm91bmQgYnkgbGljZW5zZSByZXN0cmljdGlvbnMgYXMgY29udGVtcGxhdGVkIGJ5IHRoaXMgU2VjdGlvbiA0IGFib3ZlLgorCitUaGUgRnJhbWV3b3J4IENvbXBhbnkgaGVyZWJ5IGdyYW50cyB0byB5b3UgYWxsIHJpZ2h0cyB0byBzdWItbGljZW5zZSB5b3VyIHJpZ2h0cyBoZXJldW5kZXIgYXMgbmVjZXNzYXJ5IHRvIGZ1bGx5IGVmZmVjdCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlIG9mIHRoaXMgU2VjdGlvbiA0IGFib3ZlLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB5b3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHNoYWxsIGJlIHVuYWZmZWN0ZWQgYnkgYW55IHN1Y2ggc3VibGljZW5zaW5nLiBJbiBhZGRpdGlvbiwgVGhlIEZyYW1ld29yeCBDb21wYW55IGV4cHJlc3NseSByZXRhaW5zIGFsbCByaWdodHMgdG8gdGFrZSBhbGwgYXBwcm9wcmlhdGUgYWN0aW9uIChpbmNsdWRpbmcgbGVnYWwgYWN0aW9uKSBhZ2FpbnN0IGFueSBzdWNoIGRpcmVjdCBvciBpbmRpcmVjdCBzdWItbGljZW5zZWUgdG8gZW5zdXJlIGl0cyBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGUgaW50ZW50IGFuZCBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCis1LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaGVyZWluLCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHByZXNlcnZlcyBhbmQgcmVzcGVjdHMgWW91ciBhbmQgVGhlIEZyYW1ld29yeCBDb21wYW55cyByZXNwZWN0aXZlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIGluY2x1ZGluZywgaW4gdGhlIGNhc2Ugb2YgVGhlIEZyYW1ld29yeCBDb21wYW55LCBpdHMgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZS4KKworNi4gV2FycmFudHkgRGlzY2xhaW1lci4gVEhFIFNPRlRXQVJFIExJQ0VOU0VEIEhFUkVVTkRFUiBJUyBQUk9WSURFRCBgYEFTIElTLmBgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIExJQ0VOU09SIE9GIFRISVMgU09GVFdBUkUsIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIElOQ0xVRElORyAoQlVUIE5PVCBMSU1JVEVEIFRPKSBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFkgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworNy4gTGljZW5zZSBWaW9sYXRpb24uIFRoZSBMaWNlbnNlLCBhbmQgYWxsIG9mIHlvdXIgcmlnaHRzIHRoZXJldW5kZXIsIHNoYWxsIGJlIGRlZW1lZCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQgYW5kIHZvaWQgYXMgb2YgYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbWFkZSBvciBmYWNpbGl0YXRlZCBieSBZb3UgdGhhdCB2aW9sYXRlcyB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIHN1cnZpdmUgYW55IHN1Y2ggdGVybWluYXRpb24gaW4gb3JkZXIgdG8gcmVtZWR5IHRoZSBlZmZlY3RzIG9mIHN1Y2ggdmlvbGF0aW9uLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGJpbmRpbmcgb24gdGhlIGxlZ2FsIHN1Y2Nlc3NvcnMgYW5kIGFzc2lnbnMgb2YgdGhlIHBhcnRpZXMgaGVyZXRvLgorCitZb3VyIGFncmVlbWVudCB0byB0aGUgZm9yZWdvaW5nIGFzIG9mIHRoZSBkYXRlIGhlcmVvZiBoYXMgYmVlbiBldmlkZW5jZWQgYnkgeW91ciBhY2NlcHRhbmNlIG9mIHRoZSByZWxldmFudCBzb2Z0d2FyZSBkaXN0cmlidXRpb24gaGVyZXVuZGVyLgorCisoQykgVEhFIEZSQU1FV09SWCBDT01QQU5ZIDIwMDMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Q0ZDExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJlZVR5cGUKQEAgLTAsMCArMSwxNzAgQEAKKyAgICAgICAgICAgICAgICAgICAgVGhlIEZyZWVUeXBlIFByb2plY3QgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA2LUphbi0yNworCisgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAxOTk2LTIwMDIsIDIwMDYgYnkKKyAgICAgICAgICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcKKworCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGRpc3RyaWJ1dGVkIGluICBzZXZlcmFsIGFyY2hpdmUgcGFja2FnZXM7CisgIHNvbWUgb2YgdGhlbSBtYXkgY29udGFpbiwgaW4gYWRkaXRpb24gdG8gdGhlIEZyZWVUeXBlIGZvbnQgZW5naW5lLAorICB2YXJpb3VzIHRvb2xzIGFuZCAgY29udHJpYnV0aW9ucyB3aGljaCByZWx5IG9uLCBvciAgcmVsYXRlIHRvLCB0aGUKKyAgRnJlZVR5cGUgUHJvamVjdC4KKworICBUaGlzICBsaWNlbnNlIGFwcGxpZXMgIHRvIGFsbCAgZmlsZXMgZm91bmQgIGluIHN1Y2ggIHBhY2thZ2VzLCBhbmQKKyAgd2hpY2ggZG8gbm90ICBmYWxsIHVuZGVyIHRoZWlyIG93biBleHBsaWNpdCAgbGljZW5zZS4gIFRoZSBsaWNlbnNlCisgIGFmZmVjdHMgIHRodXMgIHRoZSAgRnJlZVR5cGUgICBmb250ICBlbmdpbmUsICB0aGUgIHRlc3QgIHByb2dyYW1zLAorICBkb2N1bWVudGF0aW9uIGFuZCBtYWtlZmlsZXMsIGF0IHRoZSB2ZXJ5IGxlYXN0LgorCisgIFRoaXMgIGxpY2Vuc2UgICB3YXMgIGluc3BpcmVkICBieSAgdGhlICBCU0QsICAgQXJ0aXN0aWMsICBhbmQgIElKRworICAoSW5kZXBlbmRlbnQgSlBFRyAgR3JvdXApIGxpY2Vuc2VzLCB3aGljaCAgYWxsIGVuY291cmFnZSBpbmNsdXNpb24KKyAgYW5kICB1c2Ugb2YgIGZyZWUgIHNvZnR3YXJlIGluICBjb21tZXJjaWFsICBhbmQgZnJlZXdhcmUgIHByb2R1Y3RzCisgIGFsaWtlLiAgQXMgYSBjb25zZXF1ZW5jZSwgaXRzIG1haW4gcG9pbnRzIGFyZSB0aGF0OgorCisgICAgbyBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gSG93ZXZlciwgd2Ugd2lsbCBiZQorICAgICAgaW50ZXJlc3RlZCBpbiBhbnkga2luZCBvZiBidWcgcmVwb3J0cy4gKGBhcyBpcycgZGlzdHJpYnV0aW9uKQorCisgICAgbyBZb3UgY2FuICB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91ICB3YW50LCBpbiBwYXJ0cyBvcgorICAgICAgZnVsbCBmb3JtLCB3aXRob3V0IGhhdmluZyB0byBwYXkgdXMuIChgcm95YWx0eS1mcmVlJyB1c2FnZSkKKworICAgIG8gWW91IG1heSBub3QgcHJldGVuZCB0aGF0ICB5b3Ugd3JvdGUgdGhpcyBzb2Z0d2FyZS4gIElmIHlvdSB1c2UKKyAgICAgIGl0LCBvciAgb25seSBwYXJ0cyBvZiBpdCwgIGluIGEgcHJvZ3JhbSwgIHlvdSBtdXN0IGFja25vd2xlZGdlCisgICAgICBzb21ld2hlcmUgIGluICB5b3VyICBkb2N1bWVudGF0aW9uICB0aGF0ICB5b3UgIGhhdmUgIHVzZWQgIHRoZQorICAgICAgRnJlZVR5cGUgY29kZS4gKGBjcmVkaXRzJykKKworICBXZSAgc3BlY2lmaWNhbGx5ICBwZXJtaXQgIGFuZCAgZW5jb3VyYWdlICB0aGUgIGluY2x1c2lvbiAgb2YgIHRoaXMKKyAgc29mdHdhcmUsIHdpdGggIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgIGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuCisgIFdlICBkaXNjbGFpbSAgYWxsIHdhcnJhbnRpZXMgIGNvdmVyaW5nICBUaGUgIEZyZWVUeXBlIFByb2plY3QgIGFuZAorICBhc3N1bWUgbm8gbGlhYmlsaXR5IHJlbGF0ZWQgdG8gVGhlIEZyZWVUeXBlIFByb2plY3QuCisKKworICBGaW5hbGx5LCAgbWFueSAgcGVvcGxlICBhc2tlZCAgdXMgIGZvciAgYSAgcHJlZmVycmVkICBmb3JtICBmb3IgIGEKKyAgY3JlZGl0L2Rpc2NsYWltZXIgdG8gdXNlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2UuICBXZSB0aHVzCisgIGVuY291cmFnZSB5b3UgdG8gdXNlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworICAgIiIiICAKKyAgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBjb3B5cmlnaHQg77+9IDx5ZWFyPiBUaGUgRnJlZVR5cGUKKyAgICBQcm9qZWN0ICh3d3cuZnJlZXR5cGUub3JnKS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAiIiIKKworICBQbGVhc2UgcmVwbGFjZSA8eWVhcj4gd2l0aCB0aGUgdmFsdWUgZnJvbSB0aGUgRnJlZVR5cGUgdmVyc2lvbiB5b3UKKyAgYWN0dWFsbHkgdXNlLgorCisKK0xlZ2FsIFRlcm1zCis9PT09PT09PT09PQorCiswLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworICBUaHJvdWdob3V0IHRoaXMgbGljZW5zZSwgIHRoZSB0ZXJtcyBgcGFja2FnZScsIGBGcmVlVHlwZSBQcm9qZWN0JywKKyAgYW5kICBgRnJlZVR5cGUgIGFyY2hpdmUnIHJlZmVyICB0byAgdGhlICBzZXQgIG9mIGZpbGVzICBvcmlnaW5hbGx5CisgIGRpc3RyaWJ1dGVkICBieSB0aGUgIGF1dGhvcnMgIChEYXZpZCBUdXJuZXIsICBSb2JlcnQgV2lsaGVsbSwgIGFuZAorICBXZXJuZXIgTGVtYmVyZykgYXMgdGhlIGBGcmVlVHlwZSBQcm9qZWN0JywgYmUgdGhleSBuYW1lZCBhcyBhbHBoYSwKKyAgYmV0YSBvciBmaW5hbCByZWxlYXNlLgorCisgIGBZb3UnIHJlZmVycyB0byAgdGhlIGxpY2Vuc2VlLCBvciBwZXJzb24gdXNpbmcgIHRoZSBwcm9qZWN0LCB3aGVyZQorICBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UKKyAgY29kZSBhcyAgd2VsbCBhcyBsaW5raW5nIGl0ICB0byBmb3JtIGEgIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuCisgIFRoaXMgIHByb2dyYW0gaXMgIHJlZmVycmVkIHRvICBhcyAgYGEgcHJvZ3JhbSAgdXNpbmcgdGhlICBGcmVlVHlwZQorICBlbmdpbmUnLgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBkaXN0cmlidXRlZCAgaW4gIHRoZSBvcmlnaW5hbAorICBGcmVlVHlwZSAgUHJvamVjdCwgICBpbmNsdWRpbmcgIGFsbCAgc291cmNlICAgY29kZSwgIGJpbmFyaWVzICBhbmQKKyAgZG9jdW1lbnRhdGlvbiwgIHVubGVzcyAgb3RoZXJ3aXNlICBzdGF0ZWQgICBpbiAgdGhlICBmaWxlICBpbiAgaXRzCisgIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZvcm0gYXMgIGRpc3RyaWJ1dGVkIGluIHRoZSBvcmlnaW5hbCBhcmNoaXZlLgorICBJZiB5b3UgYXJlICB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyICBmaWxlIGlzIGNvdmVyZWQgYnkKKyAgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBjb250YWN0IHVzIHRvIHZlcmlmeSB0aGlzLgorCisgIFRoZSBGcmVlVHlwZSAgUHJvamVjdCBpcyBjb3B5cmlnaHQgKEMpIDE5OTYtMjAwMCAgYnkgRGF2aWQgVHVybmVyLAorICBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMKKyAgc3BlY2lmaWVkIGJlbG93LgorCisxLiBObyBXYXJyYW50eQorLS0tLS0tLS0tLS0tLS0KKworICBUSEUgRlJFRVRZUEUgUFJPSkVDVCAgSVMgUFJPVklERUQgYEFTIElTJyBXSVRIT1VUICBXQVJSQU5UWSBPRiBBTlkKKyAgS0lORCwgRUlUSEVSICBFWFBSRVNTIE9SIElNUExJRUQsICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgVE8sCisgIFdBUlJBTlRJRVMgIE9GICBNRVJDSEFOVEFCSUxJVFkgICBBTkQgIEZJVE5FU1MgIEZPUiAgQSAgUEFSVElDVUxBUgorICBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgV0lMTCBBTlkgT0YgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFICBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEICBCWSBUSEUgVVNFIE9SICBUSEUgSU5BQklMSVRZIFRPCisgIFVTRSwgT0YgVEhFIEZSRUVUWVBFIFBST0pFQ1QuCisKKzIuIFJlZGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgIGxpY2Vuc2UgIGdyYW50cyAgYSAgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsICBwZXJwZXR1YWwgIGFuZAorICBpcnJldm9jYWJsZSByaWdodCAgYW5kIGxpY2Vuc2UgdG8gdXNlLCAgZXhlY3V0ZSwgcGVyZm9ybSwgY29tcGlsZSwKKyAgZGlzcGxheSwgIGNvcHksICAgY3JlYXRlICBkZXJpdmF0aXZlICB3b3JrcyAgIG9mLCAgZGlzdHJpYnV0ZSAgYW5kCisgIHN1YmxpY2Vuc2UgdGhlICBGcmVlVHlwZSBQcm9qZWN0IChpbiAgYm90aCBzb3VyY2UgYW5kICBvYmplY3QgY29kZQorICBmb3JtcykgIGFuZCAgZGVyaXZhdGl2ZSB3b3JrcyAgdGhlcmVvZiAgZm9yICBhbnkgIHB1cnBvc2U7IGFuZCAgdG8KKyAgYXV0aG9yaXplIG90aGVycyAgdG8gZXhlcmNpc2UgIHNvbWUgb3IgYWxsICBvZiB0aGUgIHJpZ2h0cyBncmFudGVkCisgIGhlcmVpbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIG9mICBzb3VyY2UgY29kZSAgbXVzdCByZXRhaW4gdGhpcyAgbGljZW5zZSBmaWxlCisgICAgICAoYEZUTC5UWFQnKSB1bmFsdGVyZWQ7IGFueSAgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcyB0bworICAgICAgdGhlIG9yaWdpbmFsICBmaWxlcyBtdXN0IGJlIGNsZWFybHkgIGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcKKyAgICAgIGRvY3VtZW50YXRpb24uICAgVGhlICBjb3B5cmlnaHQgICBub3RpY2VzICBvZiAgdGhlICB1bmFsdGVyZWQsCisgICAgICBvcmlnaW5hbCAgZmlsZXMgbXVzdCAgYmUgIHByZXNlcnZlZCBpbiAgYWxsICBjb3BpZXMgb2YgIHNvdXJjZQorICAgICAgZmlsZXMuCisKKyAgICBvIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcHJvdmlkZSBhICBkaXNjbGFpbWVyICB0aGF0CisgICAgICBzdGF0ZXMgIHRoYXQgIHRoZSBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9mIHRoZSB3b3JrIG9mIHRoZQorICAgICAgRnJlZVR5cGUgVGVhbSwgIGluICB0aGUgIGRpc3RyaWJ1dGlvbiAgZG9jdW1lbnRhdGlvbi4gIFdlIGFsc28KKyAgICAgIGVuY291cmFnZSB5b3UgdG8gcHV0IGFuIFVSTCB0byB0aGUgRnJlZVR5cGUgd2ViIHBhZ2UgIGluICB5b3VyCisgICAgICBkb2N1bWVudGF0aW9uLCB0aG91Z2ggdGhpcyBpc24ndCBtYW5kYXRvcnkuCisKKyAgVGhlc2UgY29uZGl0aW9ucyAgYXBwbHkgdG8gYW55ICBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgIGJhc2VkIG9uCisgIHRoZSBGcmVlVHlwZSBQcm9qZWN0LCAgbm90IGp1c3QgdGhlIHVubW9kaWZpZWQgZmlsZXMuICAgSWYgeW91IHVzZQorICBvdXIgd29yaywgeW91ICBtdXN0IGFja25vd2xlZGdlIHVzLiAgSG93ZXZlciwgbm8gIGZlZSBuZWVkIGJlIHBhaWQKKyAgdG8gdXMuCisKKzMuIEFkdmVydGlzaW5nCistLS0tLS0tLS0tLS0tLQorCisgIE5laXRoZXIgdGhlICBGcmVlVHlwZSBhdXRob3JzIGFuZCAgY29udHJpYnV0b3JzIG5vciB5b3UgIHNoYWxsIHVzZQorICB0aGUgbmFtZSBvZiB0aGUgIG90aGVyIGZvciBjb21tZXJjaWFsLCBhZHZlcnRpc2luZywgb3IgcHJvbW90aW9uYWwKKyAgcHVycG9zZXMgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgV2Ugc3VnZ2VzdCwgIGJ1dCBkbyBub3QgcmVxdWlyZSwgdGhhdCAgeW91IHVzZSBvbmUgb3IgIG1vcmUgb2YgdGhlCisgIGZvbGxvd2luZyBwaHJhc2VzIHRvIHJlZmVyICB0byB0aGlzIHNvZnR3YXJlIGluIHlvdXIgZG9jdW1lbnRhdGlvbgorICBvciBhZHZlcnRpc2luZyAgbWF0ZXJpYWxzOiBgRnJlZVR5cGUgUHJvamVjdCcsICBgRnJlZVR5cGUgRW5naW5lJywKKyAgYEZyZWVUeXBlIGxpYnJhcnknLCBvciBgRnJlZVR5cGUgRGlzdHJpYnV0aW9uJy4KKworICBBcyAgeW91IGhhdmUgIG5vdCBzaWduZWQgIHRoaXMgbGljZW5zZSwgIHlvdSBhcmUgIG5vdCAgcmVxdWlyZWQgdG8KKyAgYWNjZXB0ICBpdC4gICBIb3dldmVyLCAgYXMgIHRoZSBGcmVlVHlwZSAgUHJvamVjdCAgaXMgIGNvcHlyaWdodGVkCisgIG1hdGVyaWFsLCBvbmx5ICB0aGlzIGxpY2Vuc2UsIG9yICBhbm90aGVyIG9uZSBjb250cmFjdGVkICB3aXRoIHRoZQorICBhdXRob3JzLCBncmFudHMgeW91ICB0aGUgcmlnaHQgdG8gdXNlLCBkaXN0cmlidXRlLCAgYW5kIG1vZGlmeSBpdC4KKyAgVGhlcmVmb3JlLCAgYnkgIHVzaW5nLCAgZGlzdHJpYnV0aW5nLCAgb3IgbW9kaWZ5aW5nICB0aGUgIEZyZWVUeXBlCisgIFByb2plY3QsIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgYWxsIHRoZSB0ZXJtcworICBvZiB0aGlzIGxpY2Vuc2UuCisKKzQuIENvbnRhY3RzCistLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbGluZyBsaXN0cyByZWxhdGVkIHRvIEZyZWVUeXBlOgorCisgICAgbyBmcmVldHlwZUBub25nbnUub3JnCisKKyAgICAgIERpc2N1c3NlcyBnZW5lcmFsIHVzZSBhbmQgYXBwbGljYXRpb25zIG9mIEZyZWVUeXBlLCBhcyB3ZWxsIGFzCisgICAgICBmdXR1cmUgYW5kICB3YW50ZWQgYWRkaXRpb25zIHRvIHRoZSAgbGlicmFyeSBhbmQgZGlzdHJpYnV0aW9uLgorICAgICAgSWYgIHlvdSBhcmUgbG9va2luZyAgZm9yIHN1cHBvcnQsICBzdGFydCBpbiAgdGhpcyBsaXN0ICBpZiB5b3UKKyAgICAgIGhhdmVuJ3QgZm91bmQgYW55dGhpbmcgdG8gaGVscCB5b3UgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAgICBvIGZyZWV0eXBlLWRldmVsQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGJ1Z3MsICBhcyB3ZWxsICBhcyBlbmdpbmUgaW50ZXJuYWxzLCAgZGVzaWduIGlzc3VlcywKKyAgICAgIHNwZWNpZmljIGxpY2Vuc2VzLCBwb3J0aW5nLCBldGMuCisKKyAgT3VyIGhvbWUgcGFnZSBjYW4gYmUgZm91bmQgYXQKKworICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnCisKKworLS0tIGVuZCBvZiBGVEwuVFhUIC0tLQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGZlMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMQpAQCAtMCwwICsxLDM5NyBAQAorCQlHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKwkJICBWZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMgorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0Cisob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkKK3dpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCit0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CittYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQKK2FzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IG90aGVyIGF0dGVtcHQgdG8KK2NvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwKK3BhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMgorICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4NzJjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4yCkBAIC0wLDAgKzEsMzk5IEBACisKKyAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4yLCBOb3ZlbWJlciAyMDAyCisKKworIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnRgcyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQord2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrYHMgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50YHMgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbmBzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbmBzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50YHMgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMTFhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMwpAQCAtMCwwICsxLDQ1MyBAQAorCisKKyAgICAgICAgICAgICAgICBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwOAorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnRgcyBvdmVyYWxsCitzdWJqZWN0IChvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbAorZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbgorcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbgorYW55IG1hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrYHMgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworVGhlICJwdWJsaXNoZXIiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzIG9mCit0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vCitvdGhlciBjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8KK2dpdmUgdGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUKK0RvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKKyAgIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KK0MuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCisgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCitFLiBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCisgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCitGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKKyAgIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCitHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworICAgYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlLgorSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCitJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIsIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAorICAgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsCisgICB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uYHMgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK0VudGl0bGVkICJFbmRvcnNlbWVudHMiLgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlcgorZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwKK2NvcGllcyBvZiB0aGlzIExpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weQordGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcworb2YgdGhpcyBMaWNlbnNlIGZvciB2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwKK290aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kCitkaXN0cmlidXRlIGl0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYQorY29weSBvZiB0aGlzIExpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMKK0xpY2Vuc2UgaW4gYWxsIG90aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQKK2RvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb25gcyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudGBzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUKK0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCit3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluCitkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHlgcyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisxMS4gUkVMSUNFTlNJTkcKKworIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlIiAob3IgIk1NQyBTaXRlIikgbWVhbnMgYW55CitXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgdGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQgYWxzbworcHJvdmlkZXMgcHJvbWluZW50IGZhY2lsaXRpZXMgZm9yIGFueWJvZHkgdG8gZWRpdCB0aG9zZSB3b3Jrcy4gIEEKK3B1YmxpYyB3aWtpIHRoYXQgYW55Ym9keSBjYW4gZWRpdCBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBzZXJ2ZXIuICBBCisiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIiAob3IgIk1NQyIpIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZQorbWVhbnMgYW55IHNldCBvZiBjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMgcHVibGlzaGVkIG9uIHRoZSBNTUMgc2l0ZS4KKworIkNDLUJZLVNBIiBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAgCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0IAorY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLCAKK0NhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZSAKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisiSW5jb3Jwb3JhdGUiIG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yIGluIAorcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgorCitBbiBNTUMgaXMgImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZyIgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcyAKK0xpY2Vuc2UsIGFuZCBpZiBhbGwgd29ya3MgdGhhdCB3ZXJlIGZpcnN0IHB1Ymxpc2hlZCB1bmRlciB0aGlzIExpY2Vuc2UgCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUgb3IgCitpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsIGFuZCAKKygyKSB3ZXJlIHRodXMgaW5jb3Jwb3JhdGVkIHByaW9yIHRvIE5vdmVtYmVyIDEsIDIwMDguCisKK1RoZSBvcGVyYXRvciBvZiBhbiBNTUMgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIE1NQyBjb250YWluZWQgaW4gdGhlIHNpdGUKK3VuZGVyIENDLUJZLVNBIG9uIHRoZSBzYW1lIHNpdGUgYXQgYW55IHRpbWUgYmVmb3JlIEF1Z3VzdCAxLCAyMDA5LAorcHJvdmlkZWQgdGhlIE1NQyBpcyBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcuCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDRlZjkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTEuMApAQCAtMCwwICsxLDI1MiBAQAorCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxCisKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMSwgRmVicnVhcnkgMTk4OQorCisgQ29weXJpZ2h0IChDKSAxOTg5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIHRyeSB0byBrZWVwIHVzZXJzCithdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiAgQnkgY29udHJhc3QsIG91ciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoZQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcworc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvIHVzaW5nIGl0LgorWW91IGNhbiB1c2UgaXQgZm9yIHlvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIFNwZWNpZmljYWxseSwgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgZGVzaWduZWQgdG8gbWFrZQorc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGdpdmUgYXdheSBvciBzZWxsIGNvcGllcyBvZiBmcmVlCitzb2Z0d2FyZSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LAordGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZQorcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBhIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnNgIHJlcHV0YXRpb25zLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUKKyJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucy4gIEVhY2gKK2xpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtYHMgc291cmNlCitjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mCit0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YKK2l0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaAorMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdAorICAgIHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0CisgICAgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCBlaXRoZXIKKyAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbAorICAgIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoZXhjZXB0CisgICAgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsCisgICAgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuCisgICAgcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlCisgICAgaW4gdGhlIHNpbXBsZXN0IGFuZCBtb3N0IHVzdWFsIHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UKKyAgICB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhCisgICAgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UKKyAgICBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UuCisKKyAgICBkKSBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYQorICAgIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4KKyAgICBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciBpbmRlcGVuZGVudCB3b3JrIHdpdGggdGhlIFByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mCitpdCwgdW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbCBjaGFyZ2UKKyAgICBmb3IgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uKSBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYykgYWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB3aGVyZSB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZC4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKQorCitTb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zOyBidXQsIGFzIGEgc3BlY2lhbAorZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGZvciBtb2R1bGVzIHdoaWNoIGFyZSBzdGFuZGFyZAorbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlCitmaWxlIHJ1bnMsIG9yIGZvciBzdGFuZGFyZCBoZWFkZXIgZmlsZXMgb3IgZGVmaW5pdGlvbnMgZmlsZXMgdGhhdAorYWNjb21wYW55IHRoYXQgb3BlcmF0aW5nIHN5c3RlbS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgdGhlCitQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlcgordGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdG8gdXNlCit0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkCitjb3BpZXMsIG9yIHJpZ2h0cyB0byB1c2UgY29waWVzLCBmcm9tIHlvdSB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcworcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBCeSBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0pIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlIHRvIGRvIHNvLAorYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwKK2xpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UKK3Rlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUKK3JlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKKyAgNy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoZSBsaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICA4LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQorCisgIDkuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMC4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byBodW1hbml0eSwgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZQordGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QgdG8KK2F0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5Cit0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eHggbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgd2AuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjYCBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3YCBhbmQgYHNob3cgY2Agc2hvdWxkIHNob3cgdGhlCithcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlCitjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgd2AgYW5kIGBzaG93CitjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyCitwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBwcm9ncmFtIGBHbm9tb3Zpc2lvbmAgKGEgcHJvZ3JhbSB0byBkaXJlY3QgY29tcGlsZXJzIHRvIG1ha2UgcGFzc2VzCisgIGF0IGFzc2VtYmxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0YHMgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzQyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi13aXRoLWJpc29uLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDcgQEAKKworaW5zZXJ0IEdQTCB2MiB0ZXh0IGhlcmUKKworQmlzb24gRXhjZXB0aW9uCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbmB0IGl0c2VsZiBhIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mIGFzIGEgcGFyc2VyIHNrZWxldG9uLiBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZSB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZyBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KK1RoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4gdmVyc2lvbiAyLjIgb2YgQmlzb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWFiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wCkBAIC0wLDAgKzEsMTMyIEBACisKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzYCByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lYHMgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2IpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2MpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHl5eXkgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHdgLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIAorZm9yIGRldGFpbHMuCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cgY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodAoraW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uYAorKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gCitieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhkZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLUdDQy1leGNlcHRpb24KQEAgLTAsMCArMSwxNyBAQAorCitpbnNlcnQgR1BMIHYyIHRleHQgaGVyZQorCitHQ0MgTGlua2luZyBFeGNlcHRpb24KK0luIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZSBjb21waWxlZCB2ZXJzaW9uCitvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcywgYW5kIHRvIGRpc3RyaWJ1dGUgdGhvc2UKK2NvbWJpbmF0aW9ucyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgZmlsZS4gKFRoZQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByZXN0cmljdGlvbnMgZG8gYXBwbHkgaW4gb3RoZXIgcmVzcGVjdHM7IGZvciBleGFtcGxlLAordGhleSBjb3ZlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3QgbGlua2VkIGludG8gYQorY29tYmluZSBleGVjdXRhYmxlLikKKworCisKKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1PcGVuU1NMLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1PcGVuU1NMLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg2YzYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjg1IEBACisKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKK0NvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gIAorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3JgcyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzYCByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lYHMgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiBUaGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2IpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbSB3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKK2MpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCitvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtYHMgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCitDb3B5cmlnaHQgKEMpIHl5eXkgIG5hbWUgb2YgYXV0aG9yCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCitHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzCit0eXBlIGBzaG93IHdgLiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lCit0byByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIAorZm9yIGRldGFpbHMuCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cgY2A7IHRoZXkgY291bGQgZXZlbiBiZSBtb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodAoraW50ZXJlc3QgaW4gdGhlIHByb2dyYW0gYEdub21vdmlzaW9uYAorKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gCitieSBKYW1lcyBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworCitJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXIKK2dpdmVzIHBlcm1pc3Npb24gdG8gbGluayB0aGUgY29kZSBvZiB0aGlzIHByb2dyYW0gd2l0aAorYW55IHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeSB3aGljaCBpcyBkaXN0cmlidXRlZAordW5kZXIgYSBsaWNlbnNlIGlkZW50aWNhbCB0byB0aGF0IGxpc3RlZCBpbiB0aGUgaW5jbHVkZWQKK0NPUFlJTkcuT3BlblNTTCBmaWxlLCBhbmQgZGlzdHJpYnV0ZSBsaW5rZWQgY29tYmluYXRpb25zCitpbmNsdWRpbmcgdGhlIHR3by4gWW91IG11c3Qgb2JleSB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluIGFsbCByZXNwZWN0cyBmb3IgYWxsIG9mIHRoZSBjb2RlIHVzZWQgb3RoZXIKK3RoYW4gT3BlblNTTC4gSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUsIHlvdSBtYXkgZXh0ZW5kIHRoaXMKK2V4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlIGZpbGUsIGJ1dCB5b3UgYXJlIG5vdAorb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZQordGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKyAgTElDRU5TRSBJU1NVRVMKKyAgPT09PT09PT09PT09PT0KKworICBUaGUgT3BlblNTTCB0b29sa2l0IHN0YXlzIHVuZGVyIGEgZHVhbCBsaWNlbnNlLCBpLmUuIGJvdGggdGhlIGNvbmRpdGlvbnMgb2YKKyAgdGhlIE9wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LgorICBTZWUgYmVsb3cgZm9yIHRoZSBhY3R1YWwgbGljZW5zZSB0ZXh0cy4gQWN0dWFsbHkgYm90aCBsaWNlbnNlcyBhcmUgQlNELXN0eWxlCisgIE9wZW4gU291cmNlIGxpY2Vuc2VzLiBJbiBjYXNlIG9mIGFueSBsaWNlbnNlIGlzc3VlcyByZWxhdGVkIHRvIE9wZW5TU0wKKyAgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCisgIE9wZW5TU0wgTGljZW5zZQorICAtLS0tLS0tLS0tLS0tLS0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAyIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyBPcmlnaW5hbCBTU0xlYXkgTGljZW5zZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMmFhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCkBAIC0wLDAgKzEsNiBAQAorCitpbnNlcnQgR1BMIHYyIGxpY2Vuc2UgdGV4dCBoZXJlCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvYHMgY29weXJpZ2h0IG93bmVyIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGUgY29uZmlndXJlIHNjcmlwdHMgdGhhdCBhcmUgdGhlIG91dHB1dCBvZiBBdXRvY29uZiB3aGVuIHByb2Nlc3NpbmcgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2hlbiB1c2luZyAgb3IgCitUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUgQXV0b2NvbmYgTWFjcm8gcmVsZWFzZWQgYnkgdGhlIEF1dG9jb25mIEFyY2hpdmUuIFdoZW4geW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91IG1heSBleHRlbmQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkM2U5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDcgQEAKKworaW5zZXJ0IEdQTCB2MiBsaWNlbnNlIHRleHQgaGVyZQorCitMaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcyBtYWtpbmcgYSBjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjb3ZlciB0aGUgd2hvbGUgY29tYmluYXRpb24uCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZSB5b3UgcGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCByZWdhcmRsZXNzIG9mIHRoZSBsaWNlbnNlIHRlcm1zIG9mIHRoZXNlIGluZGVwZW5kZW50IG1vZHVsZXMsIGFuZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2Ugb2YgdGhhdCBtb2R1bGUuIEFuIGluZGVwZW5kZW50IG1vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtZm9udC1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtZm9udC1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiNDJmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbgpAQCAtMCwwICsxLDE4IEBACisKK2luc2VydCBHUEwgdjIgdGV4dCBoZXJlCisKK0ZvbnQgRXhjZXB0aW9uCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2ggdXNlcyB0aGlzIGZvbnQsIGFuZAorZW1iZWQgdGhpcyBmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyBvZiB0aGlzIGZvbnQgaW50byB0aGUgZG9jdW1lbnQsIHRoaXMgZm9udAorZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyCityZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIElmCit5b3UgbW9kaWZ5IHRoaXMgZm9udCwgeW91IG1heSBleHRlbmQgdGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZQorZm9udCwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUKK3RoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KKworCisKKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjY1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wCkBAIC0wLDAgKzEsMjI1IEBACitHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCitDb3B5cmlnaHQgwqkgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorUHJlYW1ibGUKKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3Igc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8gYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UgdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXJlZm9yZSwgeW91IGhhdmUgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK0RldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UgZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gRm9yIGJvdGggdXNlcnMnIGFuZCBhdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzIGNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0byBhdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLgorCitTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlciBjYW4gZG8gc28uIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gVGhlIHN5c3RlbWF0aWMgcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuIFRoZXJlZm9yZSwgd2UgaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlIHByb2R1Y3RzLiBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2Ugc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLgorCitGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2Ygc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8gYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkIG1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQgcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuCitURVJNUyBBTkQgQ09ORElUSU9OUworMC4gRGVmaW5pdGlvbnMuCisKK+KAnFRoaXMgTGljZW5zZeKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwor4oCcQ29weXJpZ2h04oCdIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mIHdvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKK+KAnFRoZSBQcm9ncmFt4oCdIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMg4oCceW914oCdLiDigJxMaWNlbnNlZXPigJ0gYW5kIOKAnHJlY2lwaWVudHPigJ0gbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKK1RvIOKAnG1vZGlmeeKAnSBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrIGluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbiBleGFjdCBjb3B5LiBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEg4oCcbW9kaWZpZWQgdmVyc2lvbuKAnSBvZiB0aGUgZWFybGllciB3b3JrIG9yIGEgd29yayDigJxiYXNlZCBvbuKAnSB0aGUgZWFybGllciB3b3JrLgorCitBIOKAnGNvdmVyZWQgd29ya+KAnSBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK1RvIOKAnHByb3BhZ2F0ZeKAnSBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0IHBlcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IgaW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhIGNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywgZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUgcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCitUbyDigJxjb252ZXnigJ0gYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlciBwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCitBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyDigJxBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2Vz4oCdIHRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUgZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpIHRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlIGV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUgd29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYSBtZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorMS4gU291cmNlIENvZGUuCisKK1RoZSDigJxzb3VyY2UgY29kZeKAnSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIOKAnE9iamVjdCBjb2Rl4oCdIG1lYW5zIGFueSBub24tc291cmNlIGZvcm0gb2YgYSB3b3JrLgorCitBIOKAnFN0YW5kYXJkIEludGVyZmFjZeKAnSBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwgc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZiBpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdCBpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworVGhlIOKAnFN5c3RlbSBMaWJyYXJpZXPigJ0gb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyIHRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mIHBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0IE1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiBBIOKAnE1ham9yIENvbXBvbmVudOKAnSwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQgKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbSAoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0byBwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworVGhlIOKAnENvcnJlc3BvbmRpbmcgU291cmNl4oCdIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZSB3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvIGNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzIFN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUgcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0IHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlIGluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yIHRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseSBsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwgc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2Ugc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCitUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzIGNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKK1RoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdCBzYW1lIHdvcmsuCisyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YgY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQgY29uZGl0aW9ucyBhcmUgbWV0LiBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEgY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzIGNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIgcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKK1lvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QgY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMgaW4gZm9yY2UuIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdSB3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvIG5vdCBjb250cm9sIGNvcHlyaWdodC4gVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcyBmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uIGFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZiB5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCitDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMCBtYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKzMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKK05vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUgMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yIHNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2ggbWVhc3VyZXMuCisKK1doZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncyB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKzQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKK1lvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueSBub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsIHJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksIGFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCis1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCitZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvIHByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgKiBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorICAgICogYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uIDcuIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0byDigJxrZWVwIGludGFjdCBhbGwgbm90aWNlc+KAnS4KKyAgICAqIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiBUaGlzIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorICAgICogZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCitBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssIGFuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4g4oCcYWdncmVnYXRl4oCdIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrIGluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyIHBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCis2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlIG1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gb25lIG9mIHRoZXNlIHdheXM6CisKKyAgICAqIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKyAgICAqIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisgICAgKiBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIHN1YnNlY3Rpb24gNmIuCisgICAgKiBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8gZnVydGhlciBjaGFyZ2UuIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuIElmIHRoZSBwbGFjZSB0byBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbiBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisgICAgKiBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8gY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKK0Egc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZSBpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKK0Eg4oCcVXNlciBQcm9kdWN04oCdIGlzIGVpdGhlciAoMSkgYSDigJxjb25zdW1lciBwcm9kdWN04oCdLCB3aGljaCBtZWFucyBhbnkgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuIEZvciBhIHBhcnRpY3VsYXIgcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwg4oCcbm9ybWFsbHkgdXNlZOKAnSByZWZlcnMgdG8gYSB0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiBBIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQgdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKK+KAnEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbuKAnSBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsIHByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoZSBpbmZvcm1hdGlvbiBtdXN0IHN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0IGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlIG1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCitJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvciBzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcyBwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUgVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYSBmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseSBpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbCBtb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzIGJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKK1RoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzIGZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yIHRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiBBY2Nlc3MgdG8gYSBuZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZCBhZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQgcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkgZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yIHVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorNy4gQWRkaXRpb25hbCBUZXJtcy4KKwor4oCcQWRkaXRpb25hbCBwZXJtaXNzaW9uc+KAnSBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4gQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbCBiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50IHRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseSB1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbiByZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YgaXQuIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duIHJlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSBZb3UgbWF5IHBsYWNlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywgZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCitOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UgYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgICogYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisgICAgKiBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorICAgICogYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvciByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbiByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisgICAgKiBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorICAgICogZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKyAgICAqIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvciBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKworQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQg4oCcZnVydGhlciByZXN0cmljdGlvbnPigJ0gd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuIElmIHRoZSBQcm9ncmFtIGFzIHlvdSByZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcyBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIgcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zIGEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMgbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKK0lmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UgbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlIGFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZyB3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCitBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZSBmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOyB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCis4LiBUZXJtaW5hdGlvbi4KKworWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZCBwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKK0hvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUgcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0IGNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1Rlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UuIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkgcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZSBtYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKK1lvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvciBydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24gdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiBIb3dldmVyLCBub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IgbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYSBjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLgorMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCitFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKK0FuIOKAnGVudGl0eSB0cmFuc2FjdGlvbuKAnSBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuIG9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4gb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdCB0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIgbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkIGdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZiB0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKK1lvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IGFueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvciBzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisxMS4gUGF0ZW50cy4KKworQSDigJxjb250cmlidXRvcuKAnSBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMgTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuIFRoZSB3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzIOKAnGNvbnRyaWJ1dG9yIHZlcnNpb27igJ0uCisKK0EgY29udHJpYnV0b3IncyDigJxlc3NlbnRpYWwgcGF0ZW50IGNsYWltc+KAnSBhcmUgYWxsIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQgYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYSBjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwg4oCcY29udHJvbOKAnSBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQgcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZS4KKworRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCitJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEg4oCccGF0ZW50IGxpY2Vuc2XigJ0gaXMgYW55IGV4cHJlc3MgYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IChzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8gc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gVG8g4oCcZ3JhbnTigJ0gc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGEgcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCitJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLCBhbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZSB0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhIHB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsIHRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28gYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZSBwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50IGxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiDigJxLbm93aW5nbHkgcmVseWluZ+KAnSBtZWFucyB5b3UgaGF2ZSBhY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQgY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvciBhcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhIGNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcyByZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkgb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZSB5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZCB3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKworQSBwYXRlbnQgbGljZW5zZSBpcyDigJxkaXNjcmltaW5hdG9yeeKAnSBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbiB0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcyBjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzIGluIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQgdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcgdGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlIHBhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeSBwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrIGNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5IGZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0IGNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwgb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZyBhbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heSBvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBjb252ZXkgaXQgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91IHRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleSB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK05vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUgcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZCB1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlIGNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiBUaGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywgYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIGFzIHN1Y2guCisxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug4oCcb3IgYW55IGxhdGVyIHZlcnNpb27igJ0gYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK0lmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgcGVybWlzc2lvbnMuIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55IGF1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEgbGF0ZXIgdmVyc2lvbi4KKzE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0g4oCcQVMgSVPigJ0gV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKzE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKzE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKK0lmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZCBhYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywgcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIGFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYSBjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdCBmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IHN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlIOKAnGNvcHlyaWdodOKAnSBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuIOKAnGFib3V0IGJveOKAnS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEg4oCcY29weXJpZ2h0IGRpc2NsYWltZXLigJ0gZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQgPGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sPi4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5NjhiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjcgQEAKKworaW5zZXJ0IEdQTCB2MyB0ZXh0IGhlcmUKKworR0NDIFJVTlRJTUUgTElCUkFSWSBFWENFUFRJT04KK1ZlcnNpb24gMy4xLCAzMSBNYXJjaCAyMDA5CisKK0dlbmVyYWwgaW5mb3JtYXRpb246CitodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ2NjLWV4Y2VwdGlvbi5odG1sCitDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitUaGlzIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uICgiRXhjZXB0aW9uIikgaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlICh0aGUgIlJ1bnRpbWUgTGlicmFyeSIpIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLgorV2hlbiB5b3UgdXNlIEdDQyB0byBjb21waWxlIGEgcHJvZ3JhbSwgR0NDIG1heSBjb21iaW5lIHBvcnRpb25zIG9mIGNlcnRhaW4gR0NDIGhlYWRlciBmaWxlcyBhbmQgcnVudGltZSBsaWJyYXJpZXMgd2l0aCB0aGUgY29tcGlsZWQgcHJvZ3JhbS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBFeGNlcHRpb24gaXMgdG8gYWxsb3cgY29tcGlsYXRpb24gb2Ygbm9uLUdQTCAoaW5jbHVkaW5nIHByb3ByaWV0YXJ5KSBwcm9ncmFtcyB0byB1c2UsIGluIHRoaXMgd2F5LCB0aGUgaGVhZGVyIGZpbGVzIGFuZCBydW50aW1lIGxpYnJhcmllcyBjb3ZlcmVkIGJ5IHRoaXMgRXhjZXB0aW9uLgorCiswLiBEZWZpbml0aW9ucy4KK0EgZmlsZSBpcyBhbiAiSW5kZXBlbmRlbnQgTW9kdWxlIiBpZiBpdCBlaXRoZXIgcmVxdWlyZXMgdGhlIFJ1bnRpbWUgTGlicmFyeSBmb3IgZXhlY3V0aW9uIGFmdGVyIGEgQ29tcGlsYXRpb24gUHJvY2Vzcywgb3IgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgUnVudGltZSBMaWJyYXJ5LCBidXQgaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgUnVudGltZSBMaWJyYXJ5LgorIkdDQyIgbWVhbnMgYSB2ZXJzaW9uIG9mIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGdvdmVybmVkIGJ5IHZlcnNpb24gMyAob3IgYSBzcGVjaWZpZWQgbGF0ZXIgdmVyc2lvbikgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHdpdGggdGhlIG9wdGlvbiBvZiB1c2luZyBhbnkgc3Vic2VxdWVudCB2ZXJzaW9ucyBwdWJsaXNoZWQgYnkgdGhlIEZTRi4KKyJHUEwtY29tcGF0aWJsZSBTb2Z0d2FyZSIgaXMgc29mdHdhcmUgd2hvc2UgY29uZGl0aW9ucyBvZiBwcm9wYWdhdGlvbiwgbW9kaWZpY2F0aW9uIGFuZCB1c2Ugd291bGQgcGVybWl0IGNvbWJpbmF0aW9uIHdpdGggR0NDIGluIGFjY29yZCB3aXRoIHRoZSBsaWNlbnNlIG9mIEdDQy4KKyJUYXJnZXQgQ29kZSIgcmVmZXJzIHRvIG91dHB1dCBmcm9tIGFueSBjb21waWxlciBmb3IgYSByZWFsIG9yIHZpcnR1YWwgdGFyZ2V0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUsIGluIGV4ZWN1dGFibGUgZm9ybSBvciBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gYW4gYXNzZW1ibGVyLCBsb2FkZXIsIGxpbmtlciBhbmQvb3IgZXhlY3V0aW9uIHBoYXNlLiBOb3R3aXRoc3RhbmRpbmcgdGhhdCwgVGFyZ2V0IENvZGUgZG9lcyBub3QgaW5jbHVkZSBkYXRhIGluIGFueSBmb3JtYXQgdGhhdCBpcyB1c2VkIGFzIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBvciB1c2VkIGZvciBwcm9kdWNpbmcgYSBjb21waWxlciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCitUaGUgIkNvbXBpbGF0aW9uIFByb2Nlc3MiIHRyYW5zZm9ybXMgY29kZSBlbnRpcmVseSByZXByZXNlbnRlZCBpbiBub24taW50ZXJtZWRpYXRlIGxhbmd1YWdlcyBkZXNpZ25lZCBmb3IgaHVtYW4td3JpdHRlbiBjb2RlLCBhbmQvb3IgaW4gSmF2YSBWaXJ0dWFsIE1hY2hpbmUgYnl0ZSBjb2RlLCBpbnRvIFRhcmdldCBDb2RlLiBUaHVzLCBmb3IgZXhhbXBsZSwgdXNlIG9mIHNvdXJjZSBjb2RlIGdlbmVyYXRvcnMgYW5kIHByZXByb2Nlc3NvcnMgbmVlZCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzLCBzaW5jZSB0aGUgQ29tcGlsYXRpb24gUHJvY2VzcyBjYW4gYmUgdW5kZXJzdG9vZCBhcyBzdGFydGluZyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGdlbmVyYXRvcnMgb3IgcHJlcHJvY2Vzc29ycy4KK0EgQ29tcGlsYXRpb24gUHJvY2VzcyBpcyAiRWxpZ2libGUiIGlmIGl0IGlzIGRvbmUgdXNpbmcgR0NDLCBhbG9uZSBvciB3aXRoIG90aGVyIEdQTC1jb21wYXRpYmxlIHNvZnR3YXJlLCBvciBpZiBpdCBpcyBkb25lIHdpdGhvdXQgdXNpbmcgYW55IHdvcmsgYmFzZWQgb24gR0NDLiBGb3IgZXhhbXBsZSwgdXNpbmcgbm9uLUdQTC1jb21wYXRpYmxlIFNvZnR3YXJlIHRvIG9wdGltaXplIGFueSBHQ0MgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9ucyB3b3VsZCBub3QgcXVhbGlmeSBhcyBhbiBFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzLgorCisxLiBHcmFudCBvZiBBZGRpdGlvbmFsIFBlcm1pc3Npb24uCitZb3UgaGF2ZSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBhIHdvcmsgb2YgVGFyZ2V0IENvZGUgZm9ybWVkIGJ5IGNvbWJpbmluZyB0aGUgUnVudGltZSBMaWJyYXJ5IHdpdGggSW5kZXBlbmRlbnQgTW9kdWxlcywgZXZlbiBpZiBzdWNoIHByb3BhZ2F0aW9uIHdvdWxkIG90aGVyd2lzZSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiBHUEx2MywgcHJvdmlkZWQgdGhhdCBhbGwgVGFyZ2V0IENvZGUgd2FzIGdlbmVyYXRlZCBieSBFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzZXMuIFlvdSBtYXkgdGhlbiBjb252ZXkgc3VjaCBhIGNvbWJpbmF0aW9uIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBjb25zaXN0ZW50IHdpdGggdGhlIGxpY2Vuc2luZyBvZiB0aGUgSW5kZXBlbmRlbnQgTW9kdWxlcy4KKworMi4gTm8gV2Vha2VuaW5nIG9mIEdDQyBDb3B5bGVmdC4KK1RoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwgcHJlc3VtcHRpb24gdGhhdCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpcyB1bmFmZmVjdGVkIGJ5IHRoZSBjb3B5bGVmdCByZXF1aXJlbWVudHMgb2YgdGhlIGxpY2Vuc2Ugb2YgR0NDLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZmMGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDI4IEBACisKK2luc2VydCBHUEwgdjMgdGV4dCBoZXJlCisKK0FVVE9DT05GIENPTkZJR1VSRSBTQ1JJUFQgRVhDRVBUSU9OCisKK1ZlcnNpb24gMy4wLCAxOCBBdWd1c3QgMjAwOQorCitDb3B5cmlnaHQgJiMxNjk7IDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuIEl0IGFwcGxpZXMgdG8gYSBnaXZlbiBmaWxlIHRoYXQgYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdCB0aGUgZmlsZSBpcyBnb3Zlcm5lZCBieSBHUEx2MyBhbG9uZyB3aXRoIHRoaXMgRXhjZXB0aW9uLgorCitUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBkaXN0cmlidXRpb24gb2YgQXV0b2NvbmZgcyB0eXBpY2FsIG91dHB1dCB1bmRlciB0ZXJtcyBvZiB0aGUgcmVjaXBpZW50YHMgY2hvaWNlIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpLgorCiswLiBEZWZpbml0aW9ucy4KKyJDb3ZlcmVkIENvZGUiIGlzIHRoZSBzb3VyY2Ugb3Igb2JqZWN0IGNvZGUgb2YgYSB2ZXJzaW9uIG9mIEF1dG9jb25mIHRoYXQgaXMgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisiTm9ybWFsbHkgQ29waWVkIENvZGUiIGZvciBhIHZlcnNpb24gb2YgQXV0b2NvbmYgbWVhbnMgYWxsIHBhcnRzIG9mIGl0cyBDb3ZlcmVkIENvZGUgd2hpY2ggdGhhdCB2ZXJzaW9uIGNhbiBjb3B5IGZyb20gaXRzIGNvZGUgKGkuZS4sIG5vdCBmcm9tIGl0cyBpbnB1dCBmaWxlKSBpbnRvIGl0cyBtaW5pbWFsbHkgdmVyYm9zZSwgbm9uLWRlYnVnZ2luZyBhbmQgbm9uLXRyYWNpbmcgb3V0cHV0LgorCisiSW5lbGlnaWJsZSBDb2RlIiBpcyBDb3ZlcmVkIENvZGUgdGhhdCBpcyBub3QgTm9ybWFsbHkgQ29waWVkIENvZGUuCisKKzEuIEdyYW50IG9mIEFkZGl0aW9uYWwgUGVybWlzc2lvbi4KK1lvdSBoYXZlIHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG91dHB1dCBvZiBBdXRvY29uZiwgZXZlbiBpZiBzdWNoIHByb3BhZ2F0aW9uIHdvdWxkIG90aGVyd2lzZSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiBHUEx2My4gSG93ZXZlciwgaWYgYnkgbW9kaWZ5aW5nIEF1dG9jb25mIHlvdSBjYXVzZSBhbnkgSW5lbGlnaWJsZSBDb2RlIG9mIHRoZSB2ZXJzaW9uIHlvdSByZWNlaXZlZCB0byBiZWNvbWUgTm9ybWFsbHkgQ29waWVkIENvZGUgb2YgeW91ciBtb2RpZmllZCB2ZXJzaW9uLCB0aGVuIHlvdSB2b2lkIHRoaXMgRXhjZXB0aW9uIGZvciB0aGUgcmVzdWx0aW5nIGNvdmVyZWQgd29yay4gSWYgeW91IGNvbnZleSB0aGF0IHJlc3VsdGluZyBjb3ZlcmVkIHdvcmssIHlvdSBtdXN0IHJlbW92ZSB0aGlzIEV4Y2VwdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNlY29uZCBwYXJhZ3JhcGggb2YgU2VjdGlvbiA3IG9mIEdQTHYzLgorCisyLiBObyBXZWFrZW5pbmcgb2YgQXV0b2NvbmYgQ29weWxlZnQuCitUaGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgRXhjZXB0aW9uIGRvZXMgbm90IGltcGx5IGFueSBnZW5lcmFsIHByZXN1bXB0aW9uIHRoYXQgdGhpcmQtcGFydHkgc29mdHdhcmUgaXMgdW5hZmZlY3RlZCBieSB0aGUgY29weWxlZnQgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaWNlbnNlIG9mIEF1dG9jb25mLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5EIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSFBORApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzRiYmRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSFBORApAQCAtMCwwICsxLDExIEBACisKK0hpc3RvcmljYWwgUGVybWlzc2lvbiBOb3RpY2UgYW5kIERpc2NsYWltZXIKKworPGNvcHlyaWdodCBub3RpY2U+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllc1ssXSBbYW5kXSB0aGF0IGJvdGggW3RoYXRdIFt0aGVdIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvblssIGFuZCB0aGF0IHRoZSBuYW1lIFtvZl0gPGNvcHlyaWdodCBob2xkZXI+IFtvciA8cmVsYXRlZCBlbnRpdGllcz5dIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uXS4gWzxjb3B5cmlnaHQgaG9sZGVyPiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5Ll0KKworWzxjb3B5cmlnaHQgaG9sZGVyPiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTWyxdWy5dIElOIE5PIEVWRU5UIFNIQUxMIDxjb3B5cmlnaHQgaG9sZGVyPiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXQorCistLS0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSUNVIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSUNVCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOWI2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UKQEAgLTAsMCArMSwxMyBAQAorQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAxMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIHRoYXQgYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlciBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLiAKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQQSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY1YjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBCkBAIC0wLDAgKzEsOTUgQEAKKworSVBBIEZvbnQgTGljZW5zZSBBZ3JlZW1lbnQgdjEuMCAKKyAKKworVGhlIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIChhcyBkZWZpbmVkIGluIEFydGljbGUgMSBiZWxvdykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4gIEFueSB1c2UsIHJlcHJvZHVjdGlvbiBvciBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0sIG9yIGFueSBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYnkgYSBSZWNpcGllbnQgKGFzIGRlZmluZWQgaW4gQXJ0aWNsZSAxIGJlbG93KSBjb25zdGl0dXRlcyB0aGUgUmVjaXBpZW50YHMgYWNjZXB0YW5jZSBvZiB0aGlzIEFncmVlbWVudC4KKworCitBcnRpY2xlIDEgKERlZmluaXRpb25zKQorCisxLiAgICAgICAgICJEaWdpdGFsIEZvbnQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIGNvbXB1dGVyIHByb2dyYW0gY29udGFpbmluZywgb3IgdXNlZCB0byByZW5kZXIgb3IgZGlzcGxheSBmb250cy4KKworMi4gICAgICAgICAiTGljZW5zZWQgUHJvZ3JhbSIgc2hhbGwgbWVhbiBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMy4gICAgICAgICAiRGVyaXZlZCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgRGlnaXRhbCBGb250IFByb2dyYW0gY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiBhIG1vZGlmaWNhdGlvbiwgYWRkaXRpb24sIGRlbGV0aW9uLCByZXBsYWNlbWVudCBvciBhbnkgb3RoZXIgYWRhcHRhdGlvbiB0byBvciBvZiBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCBhbmQgaW5jbHVkZXMgYSBjYXNlIHdoZXJlIGEgRGlnaXRhbCBGb250IFByb2dyYW0gbmV3bHkgY3JlYXRlZCBieSByZXRyaWV2aW5nIGZvbnQgaW5mb3JtYXRpb24gZnJvbSBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIEVtYmVkZGVkIEZvbnRzIGZyb20gYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcmV0cmlldmVkIGZvbnQgaW5mb3JtYXRpb24uIAorCis0LiAgICAgICAgICJEaWdpdGFsIENvbnRlbnQiIHNoYWxsIG1lYW4gcHJvZHVjdHMgcHJvdmlkZWQgdG8gZW5kIHVzZXJzIGluIHRoZSBmb3JtIG9mIGRpZ2l0YWwgZGF0YSwgaW5jbHVkaW5nIHZpZGVvIGNvbnRlbnQsIG1vdGlvbiBhbmQvb3Igc3RpbGwgcGljdHVyZXMsIFRWIHByb2dyYW1zIG9yIG90aGVyIGJyb2FkY2FzdGluZyBjb250ZW50IGFuZCBwcm9kdWN0cyBjb25zaXN0aW5nIG9mIGNoYXJhY3RlciB0ZXh0LCBwaWN0dXJlcywgcGhvdG9ncmFwaGljIGltYWdlcywgZ3JhcGhpYyBzeW1ib2xzIGFuZC9vciB0aGUgbGlrZS4KKworNS4gICAgICAgICAiRGlnaXRhbCBEb2N1bWVudCBGaWxlIiBzaGFsbCBtZWFuIGEgUERGIGZpbGUgb3Igb3RoZXIgRGlnaXRhbCBDb250ZW50IGNyZWF0ZWQgYnkgdmFyaW91cyBzb2Z0d2FyZSBwcm9ncmFtcyBpbiB3aGljaCBhIHBhcnQgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGJlY29tZXMgZW1iZWRkZWQgb3IgY29udGFpbmVkIGluIHRoZSBmaWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgZm9udCAoIkVtYmVkZGVkIEZvbnRzIikuICBFbWJlZGRlZCBGb250cyBhcmUgdXNlZCBvbmx5IGluIHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHdpdGhpbiB3aGljaCB0aGV5IGFyZSBlbWJlZGRlZCwgYW5kIHNoYWxsIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aG9zZSBpbiBhbnkgRGlnaXRhbCBGb250IFByb2dyYW0sIHdoaWNoIG1heSBiZSB1c2VkIGZvciBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGF0IHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlLgorCis2LiAgICAgICAgICJDb21wdXRlciIgc2hhbGwgaW5jbHVkZSBhIHNlcnZlciBpbiB0aGlzIEFncmVlbWVudC4KKworNy4gICAgICAgICAiUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24iIHNoYWxsIG1lYW4gcmVwcm9kdWN0aW9uLCB0cmFuc2ZlciwgZGlzdHJpYnV0aW9uLCBsZWFzZSwgcHVibGljIHRyYW5zbWlzc2lvbiwgcHJlc2VudGF0aW9uLCBleGhpYml0aW9uLCBhZGFwdGF0aW9uIGFuZCBhbnkgb3RoZXIgZXhwbG9pdGF0aW9uLgorCis4LiAgICAgICAgICJSZWNpcGllbnQiIHNoYWxsIG1lYW4gYW55b25lIHdobyByZWNlaXZlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIG9uZSB0aGF0IHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZyb20gYSBSZWNpcGllbnQuCisKKyAKKworQXJ0aWNsZSAyIChHcmFudCBvZiBMaWNlbnNlKQorCitUaGUgTGljZW5zb3IgZ3JhbnRzIHRvIHRoZSBSZWNpcGllbnQgYSBsaWNlbnNlIHRvIHVzZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgYW5kIGFsbCBjb3VudHJpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIGVhY2ggb2YgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LiBIb3dldmVyLCBhbnkgYW5kIGFsbCByaWdodHMgdW5kZXJseWluZyBpbiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBzaGFsbCBiZSBoZWxkIGJ5IHRoZSBMaWNlbnNvci4gSW4gbm8gc2Vuc2UgaXMgdGhpcyBBZ3JlZW1lbnQgaW50ZW5kZWQgdG8gdHJhbnNmZXIgYW55IHJpZ2h0IHJlbGF0aW5nIHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGhlbGQgYnkgdGhlIExpY2Vuc29yIGV4Y2VwdCBhcyBzcGVjaWZpY2FsbHkgc2V0IGZvcnRoIGhlcmVpbiBvciBhbnkgcmlnaHQgcmVsYXRpbmcgdG8gYW55IHRyYWRlbWFyaywgdHJhZGUgbmFtZSwgb3Igc2VydmljZSBtYXJrIHRvIHRoZSBSZWNpcGllbnQuCisKKyAKKworMS4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBpbnN0YWxsIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9uIGFueSBudW1iZXIgb2YgQ29tcHV0ZXJzIGFuZCB1c2UgdGhlIHNhbWUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworMi4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2dyYW0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24gaW4gcHJpbnRlZCBtYXRlcmlhbHMgb3IgaW4gRGlnaXRhbCBDb250ZW50IGFzIGFuIGV4cHJlc3Npb24gb2YgY2hhcmFjdGVyIHRleHRzIG9yIHRoZSBsaWtlLgorCiszLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IGNvbmR1Y3QgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIHByaW50ZWQgbWF0ZXJpYWxzIGFuZCBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByZWNlZGluZyBQYXJhZ3JhcGgsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGFuZCBpbiBhbnkgZm9ybSBvZiBtZWRpYSBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGJyb2FkY2FzdGluZywgY29tbXVuaWNhdGlvbiBhbmQgdmFyaW91cyByZWNvcmRpbmcgbWVkaWEuCisKKzQuICAgICAgICAgSWYgYW55IFJlY2lwaWVudCBleHRyYWN0cyBFbWJlZGRlZCBGb250cyBmcm9tIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRvIGNyZWF0ZSBhIERlcml2ZWQgUHJvZ3JhbSwgc3VjaCBEZXJpdmVkIFByb2dyYW0gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuICAKKworNS4gICAgICAgICBJZiBhbnkgUmVjaXBpZW50IHBlcmZvcm1zIFJlcHJvZHVjdGlvbiBvciBPdGhlciBFeHBsb2l0YXRpb24gb2YgYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgaW4gd2hpY2ggRW1iZWRkZWQgRm9udHMgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXJlIHVzZWQgb25seSBmb3IgcmVuZGVyaW5nIHRoZSBEaWdpdGFsIENvbnRlbnQgd2l0aGluIHN1Y2ggRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRoZW4gc3VjaCBSZWNpcGllbnQgc2hhbGwgaGF2ZSBubyBmdXJ0aGVyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGluIHJlbGF0aW9uIHRvIHN1Y2ggYWN0aW9ucy4KKworNi4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSByZXByb2R1Y2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgaXMgd2l0aG91dCBtb2RpZmljYXRpb24gYW5kIHRyYW5zZmVyIHN1Y2ggY29waWVzLCBwdWJsaWNseSB0cmFuc21pdCBvciBvdGhlcndpc2UgcmVkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHRvIGEgdGhpcmQgcGFydHkgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgKCJSZWRpc3RyaWJ1dGUiKSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMgUGFyYWdyYXBoIDIuCisKKzcuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgY3JlYXRlLCB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgUmVkaXN0cmlidXRlIGEgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBzdGF0ZWQgYWJvdmUgZm9yIHRoZSBMaWNlbnNlZCBQcm9ncmFtOiBwcm92aWRlZCwgdGhhdCB0aGUgUmVjaXBpZW50IHNoYWxsIGZvbGxvdyB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzIFBhcmFncmFwaCAxIHdoZW4gUmVkaXN0cmlidXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbS4gCisKKworQXJ0aWNsZSAzIChSZXN0cmljdGlvbikKKworVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGUgcHJlY2VkaW5nIEFydGljbGUgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworCisxLiAgICAgICAgIElmIGEgRGVyaXZlZCBQcm9ncmFtIGlzIFJlZGlzdHJpYnV0ZWQgcHVyc3VhbnQgdG8gUGFyYWdyYXBoIDQgYW5kIDcgb2YgdGhlIHByZWNlZGluZyBBcnRpY2xlLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSBtZXQgOgorCisoMSkgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtdXN0IGJlIGFsc28gUmVkaXN0cmlidXRlZCB0b2dldGhlciB3aXRoIHRoZSBEZXJpdmVkIFByb2dyYW0sIG9yIGJlIG1hZGUgYXZhaWxhYmxlIG9ubGluZSBvciBieSBtZWFucyBvZiBtYWlsaW5nIG1lY2hhbmlzbXMgaW4gZXhjaGFuZ2UgZm9yIGEgY29zdCB3aGljaCBkb2VzIG5vdCBleGNlZWQgdGhlIHRvdGFsIGNvc3RzIG9mIHBvc3RhZ2UsIHN0b3JhZ2UgbWVkaXVtIGFuZCBoYW5kbGluZyBmZWVzOgorCisoYSkgICAgYSBjb3B5IG9mIHRoZSBEZXJpdmVkIFByb2dyYW07IGFuZAorCisoYikgICAgYW55IGFkZGl0aW9uYWwgZmlsZSBjcmVhdGVkIGJ5IHRoZSBmb250IGRldmVsb3BpbmcgcHJvZ3JhbSBpbiB0aGUgY291cnNlIG9mIGNyZWF0aW5nIHRoZSBEZXJpdmVkIFByb2dyYW0gdGhhdCBjYW4gYmUgdXNlZCBmb3IgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIERlcml2ZWQgUHJvZ3JhbSwgaWYgYW55LgorCisoMikgICAgICAgICAgICAgICAgSXQgaXMgcmVxdWlyZWQgdG8gYWxzbyBSZWRpc3RyaWJ1dGUgbWVhbnMgdG8gZW5hYmxlIHJlY2lwaWVudHMgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbSB0byByZXBsYWNlIHRoZSBEZXJpdmVkIFByb2dyYW0gd2l0aCB0aGUgTGljZW5zZWQgUHJvZ3JhbSBmaXJzdCByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgKHRoZSAiT3JpZ2luYWwgUHJvZ3JhbSIpLiAgU3VjaCBtZWFucyBtYXkgYmUgdG8gcHJvdmlkZSBhIGRpZmZlcmVuY2UgZmlsZSBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBvciBpbnN0cnVjdGlvbnMgc2V0dGluZyBvdXQgYSBtZXRob2QgdG8gcmVwbGFjZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHdpdGggdGhlIE9yaWdpbmFsIFByb2dyYW0uCisKKygzKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG11c3QgbGljZW5zZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworKDQpICAgICAgICAgICAgICAgIE5vIG9uZSBtYXkgdXNlIG9yIGluY2x1ZGUgdGhlIG5hbWUgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgYSBwcm9ncmFtIG5hbWUsIGZvbnQgbmFtZSBvciBmaWxlIG5hbWUgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbS4KKworKDUpICAgICAgICAgICAgICAgIEFueSBtYXRlcmlhbCB0byBiZSBtYWRlIGF2YWlsYWJsZSBvbmxpbmUgb3IgYnkgbWVhbnMgb2YgbWFpbGluZyBhIG1lZGl1bSB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBwYXJhZ3JhcGggbWF5IGJlIHByb3ZpZGVkLCB2ZXJiYXRpbSwgYnkgYW55IHBhcnR5IHdpc2hpbmcgdG8gZG8gc28uCisKKzIuICAgICAgICAgSWYgdGhlIFJlY2lwaWVudCBSZWRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHB1cnN1YW50IHRvIFBhcmFncmFwaCA2IG9mIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSwgdGhlIFJlY2lwaWVudCBzaGFsbCBtZWV0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKygxKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBub3QgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLgorCisoMikgICAgICAgICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgbm90IGFsdGVyIG9yIG90aGVyd2lzZSBtb2RpZnkgdGhlIExpY2Vuc2VkIFByb2dyYW0uCisKKygzKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG11c3QgYXR0YWNoIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCB0byB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKworMy4gICAgICAgICBUSElTIExJQ0VOU0VEIFBST0dSQU0gSVMgUFJPVklERUQgQlkgVEhFIExJQ0VOU09SICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5UWSBBUyBUTyBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhURU5ERUQsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTzsgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURUQgR09PRFMgT1IgU0VSVklDRTsgREFNQUdFUyBBUklTSU5HIEZST00gU1lTVEVNIEZBSUxVUkU7IExPU1MgT1IgQ09SUlVQVElPTiBPRiBFWElTVElORyBEQVRBIE9SIFBST0dSQU07IExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIElOU1RBTExBVElPTiwgVVNFLCBUSEUgUkVQUk9EVUNUSU9OIE9SIE9USEVSIEVYUExPSVRBVElPTiBPRiBUSEUgTElDRU5TRUQgUFJPR1JBTSBPUiBBTlkgREVSSVZFRCBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNC4gICAgICAgICBUaGUgTGljZW5zb3IgaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byByZXNwb25kIHRvIGFueSB0ZWNobmljYWwgcXVlc3Rpb25zIG9yIGlucXVpcmllcywgb3IgcHJvdmlkZSBhbnkgb3RoZXIgdXNlciBzdXBwb3J0IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgaW5zdGFsbGF0aW9uLCB1c2Ugb3IgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIERlcml2ZWQgUHJvZ3JhbXMgdGhlcmVvZi4KKworCitBcnRpY2xlIDQgKFRlcm1pbmF0aW9uIG9mIEFncmVlbWVudCkKKworMS4gICAgICAgICBUaGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZWdpbiBmcm9tIHRoZSB0aW1lIG9mIHJlY2VpcHQgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYnkgdGhlIFJlY2lwaWVudCBhbmQgc2hhbGwgY29udGludWUgYXMgbG9uZyBhcyB0aGUgUmVjaXBpZW50IHJldGFpbnMgYW55IHN1Y2ggTGljZW5zZWQgUHJvZ3JhbSBpbiBhbnkgd2F5LgorCisyLiAgICAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgcHJvdmlzaW9uIHNldCBmb3J0aCBpbiB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgaW4gdGhlIGV2ZW50IG9mIHRoZSBicmVhY2ggb2YgYW55IG9mIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCBieSB0aGUgUmVjaXBpZW50LCB0aGlzIEFncmVlbWVudCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB3aXRob3V0IGFueSBub3RpY2UuIEluIHRoZSBjYXNlIG9mIHN1Y2ggdGVybWluYXRpb24sIHRoZSBSZWNpcGllbnQgbWF5IG5vdCB1c2Ugb3IgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbTogcHJvdmlkZWQgdGhhdCBzdWNoIHRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvZiBhbnkgb3RoZXIgUmVjaXBpZW50IHJlY2VpdmluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciB0aGUgRGVyaXZlZCBQcm9ncmFtIGZyb20gc3VjaCBSZWNpcGllbnQgd2hvIGJyZWFjaGVkIHRoaXMgQWdyZWVtZW50LgorCisKK0FydGljbGUgNSAoR292ZXJuaW5nIExhdykKKworMS4gICAgICAgICBJUEEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gIEluIHN1Y2ggYW4gZXZlbnQsIHRoZSBSZWNpcGllbnQgbWF5IHNlbGVjdCBlaXRoZXIgdGhpcyBBZ3JlZW1lbnQgb3IgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGluIHVzaW5nLCBjb25kdWN0aW5nIHRoZSBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiwgb3IgUmVkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgYSBEZXJpdmVkIFByb2dyYW0uIE90aGVyIG1hdHRlcnMgbm90IHNwZWNpZmllZCBhYm92ZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBDb3B5cmlnaHQgTGF3IG9mIEphcGFuIGFuZCBvdGhlciByZWxhdGVkIGxhd3MgYW5kIHJlZ3VsYXRpb25zIG9mIEphcGFuLgorCisyLiAgICAgICAgIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB1bmRlciB0aGUgbGF3cyBvZiBKYXBhbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxMzZjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lQTC0xLjAKQEAgLTAsMCArMSwyMTMgQEAKKworSUJNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBJQk0KK1BVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04KK09GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworaW4gdGhlIGNhc2Ugb2YgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiAoIklCTSIpLCB0aGUgT3JpZ2luYWwgUHJvZ3JhbSwgYW5kCitpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLAorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07Cit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQKK2FyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uCitgb3JpZ2luYXRlc2AgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieQorc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMKK2JlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6CisoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aAordGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90CitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIElCTSBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEKK0NvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cworQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZQorYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IElCTSwgaW5jbHVkaW5nIHNvdXJjZQorY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMKK0FncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0CitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LAorcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZAorb2JqZWN0IGNvZGUgZm9ybS4KK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudAorbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwKK2ltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKK2lmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2UKK3NoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbQoraWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkKK3RoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQorb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZQorbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKK3Byb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4KK0VhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKK2Jyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZQorcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMKK3NvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCituZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMKK3JlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcworUmVjaXBpZW50YHMgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcworc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlCitjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCiszLiBSRVFVSVJFTUVOVFMKK0EgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsCitwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMKK2FuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eQorZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZAorY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZQorb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKworc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKK0NvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUKK21hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKK2EgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorUHJvZ3JhbS4KK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3IKK29mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4KK3Jlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZQorbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwKK3VzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhCitjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90CitjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEKK0NvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLAorc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZAorYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikKK2FnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZworZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZAorcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlCithY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoCitpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLgorVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkKK25vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKQorYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKK25lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkKK3N1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsCitDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCitjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcmBzCityZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgord291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvCit0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueQorb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUworUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZCitPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cworZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCit0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZQorbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQKK3VuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UCitOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKK1RIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKK3RoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyCithY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGgKK3Jlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0KK29yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieQordGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbAordGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmCitSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZworYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgoraGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzCityaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKK2xpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0CitmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcworQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCit0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZQorYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuCitIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55CitsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZQorYW5kIHN1cnZpdmUuCisKK0lCTSBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50Citmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykKK21heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50Cit1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lCitvdGhlciB0aGFuIElCTSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gRXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcworbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yCit1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvcgorb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlcgordGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8KK3BhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoCitwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JU0MgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JU0MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhZjEwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQwpAQCAtMCwwICsxLDEwIEBACisKK0lTQyBMaWNlbnNlOgorCitDb3B5cmlnaHQgJiMxNjk7IDIwMDQtMjAxMCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0ICYjMTY5OyAxOTk1LTIwMDMgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTMxZDQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjAKQEAgLTAsMCArMSwzNDIgQEAKK0dOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworCisKK1ZlcnNpb24gMiwgSnVuZSAxOTkxCisKKworCitDb3B5cmlnaHQgKEMpIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisKKyBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworUHJlYW1ibGUKKworCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworCisKK1RoaXMgbGljZW5zZSwgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueSBvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCBmb3IgeW91ciBsaWJyYXJpZXMsIHRvby4KKworCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUgeW91LiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIElmIHlvdSBsaW5rIGEgcHJvZ3JhbSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisKKworT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIGxpYnJhcnksIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKworCitBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIGxpYnJhcnkuIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorCisKKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgY29tcGFuaWVzIGRpc3RyaWJ1dGluZyBmcmVlIHNvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0IHRyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisKKworTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gVGhpcyBsaWNlbnNlLCB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLiBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IG9uZTsgYmUgc3VyZSB0byByZWFkIGl0IGluIGZ1bGwsIGFuZCBkb24ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBpbiBpdCBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworCisKK1RoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0IHRoZXkgYmx1ciB0aGUgZGlzdGluY3Rpb24gd2UgdXN1YWxseSBtYWtlIGJldHdlZW4gbW9kaWZ5aW5nIG9yIGFkZGluZyB0byBhIHByb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGxpYnJhcnksIGlzIGluIHNvbWUgc2Vuc2Ugc2ltcGx5IHVzaW5nIHRoZSBsaWJyYXJ5LCBhbmQgaXMgYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gSG93ZXZlciwgaW4gYSB0ZXh0dWFsIGFuZCBsZWdhbCBzZW5zZSwgdGhlIGxpbmtlZCBleGVjdXRhYmxlIGlzIGEgY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdHJlYXRzIGl0IGFzIHN1Y2guCisKKworCitCZWNhdXNlIG9mIHRoaXMgYmx1cnJlZCBkaXN0aW5jdGlvbiwgdXNpbmcgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUgc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gV2UgY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworCisKK0hvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlIHVzZXJzIG9mIHRob3NlIHByb2dyYW1zIG9mIGFsbCBiZW5lZml0IGZyb20gdGhlIGZyZWUgc3RhdHVzIG9mIHRoZSBsaWJyYXJpZXMgdGhlbXNlbHZlcy4gVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcGVybWl0IGRldmVsb3BlcnMgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgdG8gdXNlIGZyZWUgbGlicmFyaWVzLCB3aGlsZSBwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUgbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAoV2UgaGF2ZSBub3Qgc2VlbiBob3cgdG8gYWNoaWV2ZSB0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pIFRoZSBob3BlIGlzIHRoYXQgdGhpcyB3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisKKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4gUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seSB3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisKKworTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciBhIGxpYnJhcnkgdG8gYmUgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorCisKKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKworCiswLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKworCitBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisKKworVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsgd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuIEEgIndvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKworCisiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKworCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisKKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIExpYnJhcnkuCisKKworCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworCisKK2EpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK2MpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eSBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKKworCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKKworCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCisKKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworCisKKzMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvIHRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkgdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluIHRoZXNlIG5vdGljZXMuCisKKworCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKworCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisKKworNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKworCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisKKworSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4gU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKworCitXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworCisKK0lmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisKKworT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuIEFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisKKworCis2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvciBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYSB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworCisKK1lvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCisKKworYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuIChJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZSBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworYikgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCitjKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCitkKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKK0ZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKKworCitJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZSByZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91IGRpc3RyaWJ1dGUuCisKKworCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisKKworYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLiBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTZWN0aW9ucyBhYm92ZS4KKworYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCis4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKworOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisKKworMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKworCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCisKKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCisKKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisKKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhIGxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworCisxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisKKworTk8gV0FSUkFOVFkKKworCisKKzE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIExJQlJBUlkgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisKKworMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisKKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKKworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKKworCitUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKworCitvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYW4gaWRlYSBvZiB3aGF0IGl0IGRvZXMuCisKK0NvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKworCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKworbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorCitMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAorCitCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCisKKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKworCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCisKK3RoZSBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbgorCitieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisKKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk5MAorCitUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTczNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMQpAQCAtMCwwICsxLDE3NiBAQAorCitHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZSBzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gWW91IGNhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIgdGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIgc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlIHJpZ2h0cy4gVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlIGNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbSB3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZyBpdC4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlIGxpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCitUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwgYXV0aG9yYHMgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgb3RoZXJzLgorCitGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZiBhbnkgZnJlZSBwcm9ncmFtLiBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QgZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhIHJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQgYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFdlIHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlIGxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCitXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZyBhIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEgY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiBUaGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUgZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uIFRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeS4KKworV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdCBkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcmBzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcyBvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuIFRoZXNlIGRpc2FkdmFudGFnZXMgYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55IGxpYnJhcmllcy4gSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKK0ZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvIGVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzIGEgZGUtZmFjdG8gc3RhbmRhcmQuIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZSBhbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUgbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuIEluIHRoaXMgY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlIHNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0luIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YgZnJlZSBzb2Z0d2FyZS4gRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluIG5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZyBzeXN0ZW0uCisKK0FsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlIHVzZXJzYCBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1biB0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LiBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSAid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QgYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIgcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCitUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbSBzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5YHMgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0byBleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeSB3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KKworT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvciB0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCis0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCitJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8gZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yIGxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiBTdWNoIGEgd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZCB0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCitIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LiBXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZSBsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gVGhlIHRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKK0lmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZSBmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0IGZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUgd29yay4gKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCitPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKworNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IgbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEgd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdCBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcmBzIG93biB1c2UgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlIHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXJgcyBjb21wdXRlciBzeXN0ZW0sIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKSB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KK2MpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KK2QpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCitlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCitGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QgdXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdSBkaXN0cmlidXRlLgorCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLgorYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nIHRoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworTk8gV0FSUkFOVFkKKworMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElCUkFSWSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKzE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQgZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcgcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCitUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnlgcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluCit0aGUgbGlicmFyeSBgRnJvYmAgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4KK2J5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKK3NpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5OTAKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCitUaGF0YHMgYWxsIHRoZXJlIGlzIHRvIGl0IQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZTI5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTMuMApAQCAtMCwwICsxLDY1IEBACitHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworQ29weXJpZ2h0IMKpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworVGhpcyB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzdXBwbGVtZW50ZWQgYnkgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlzdGVkIGJlbG93LgorMC4gQWRkaXRpb25hbCBEZWZpbml0aW9ucy4KKworQXMgdXNlZCBoZXJlaW4sIOKAnHRoaXMgTGljZW5zZeKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUg4oCcR05VIEdQTOKAnSByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwor4oCcVGhlIExpYnJhcnnigJ0gcmVmZXJzIHRvIGEgY292ZXJlZCB3b3JrIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdvcmsgYXMgZGVmaW5lZCBiZWxvdy4KKworQW4g4oCcQXBwbGljYXRpb27igJ0gaXMgYW55IHdvcmsgdGhhdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5LCBidXQgd2hpY2ggaXMgbm90IG90aGVyd2lzZSBiYXNlZCBvbiB0aGUgTGlicmFyeS4gRGVmaW5pbmcgYSBzdWJjbGFzcyBvZiBhIGNsYXNzIGRlZmluZWQgYnkgdGhlIExpYnJhcnkgaXMgZGVlbWVkIGEgbW9kZSBvZiB1c2luZyBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnkuCisKK0Eg4oCcQ29tYmluZWQgV29ya+KAnSBpcyBhIHdvcmsgcHJvZHVjZWQgYnkgY29tYmluaW5nIG9yIGxpbmtpbmcgYW4gQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gVGhlIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB3aXRoIHdoaWNoIHRoZSBDb21iaW5lZCBXb3JrIHdhcyBtYWRlIGlzIGFsc28gY2FsbGVkIHRoZSDigJxMaW5rZWQgVmVyc2lvbuKAnS4KKworVGhlIOKAnE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2XigJ0gZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIHRoZSBDb21iaW5lZCBXb3JrLCBleGNsdWRpbmcgYW55IHNvdXJjZSBjb2RlIGZvciBwb3J0aW9ucyBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0LCBjb25zaWRlcmVkIGluIGlzb2xhdGlvbiwgYXJlIGJhc2VkIG9uIHRoZSBBcHBsaWNhdGlvbiwgYW5kIG5vdCBvbiB0aGUgTGlua2VkIFZlcnNpb24uCisKK1RoZSDigJxDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGXigJ0gZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlIGZvciB0aGUgQXBwbGljYXRpb24sIGluY2x1ZGluZyBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3JrIGZyb20gdGhlIEFwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0gTGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLgorMS4gRXhjZXB0aW9uIHRvIFNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKworWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2Ugd2l0aG91dCBiZWluZyBib3VuZCBieSBzZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisyLiBDb252ZXlpbmcgTW9kaWZpZWQgVmVyc2lvbnMuCisKK0lmIHlvdSBtb2RpZnkgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5LCBhbmQsIGluIHlvdXIgbW9kaWZpY2F0aW9ucywgYSBmYWNpbGl0eSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIEFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHkgKG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQpLCB0aGVuIHlvdSBtYXkgY29udmV5IGEgY29weSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbjoKKworICAgICogYSkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlIGZ1bmN0aW9uIG9yIGRhdGEsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcgorICAgICogYikgdW5kZXIgdGhlIEdOVSBHUEwsIHdpdGggbm9uZSBvZiB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuCisKKzMuIE9iamVjdCBDb2RlIEluY29ycG9yYXRpbmcgTWF0ZXJpYWwgZnJvbSBMaWJyYXJ5IEhlYWRlciBGaWxlcy4KKworVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnkuIFlvdSBtYXkgY29udmV5IHN1Y2ggb2JqZWN0IGNvZGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQgbWF0ZXJpYWwgaXMgbm90IGxpbWl0ZWQgdG8gbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZXMgKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5ndGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisgICAgKiBiKSBBY2NvbXBhbnkgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisKKzQuIENvbWJpbmVkIFdvcmtzLgorCitZb3UgbWF5IGNvbnZleSBhIENvbWJpbmVkIFdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UgdGhhdCwgdGFrZW4gdG9nZXRoZXIsIGVmZmVjdGl2ZWx5IGRvIG5vdCByZXN0cmljdCBtb2RpZmljYXRpb24gb2YgdGhlIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IGNvbnRhaW5lZCBpbiB0aGUgQ29tYmluZWQgV29yayBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucywgaWYgeW91IGFsc28gZG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKyAgICAqIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorICAgICogYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZyBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZXNlIG5vdGljZXMsIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKyAgICAqIGQpIERvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgICAgICAgIG8gMCkgQ29udmV5IHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8gcmVjb21iaW5lIG9yIHJlbGluayB0aGUgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBDb21iaW5lZCBXb3JrLCBpbiB0aGUgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKyAgICAgICAgICBvIDEpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZSBMaWJyYXJ5LiBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoYSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSB0aGF0IGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIExpbmtlZCBWZXJzaW9uLgorICAgICogZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIHVuZGVyIHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCwgYW5kIG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0IHN1Y2ggaW5mb3JtYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBDb21iaW5lZCBXb3JrIHByb2R1Y2VkIGJ5IHJlY29tYmluaW5nIG9yIHJlbGlua2luZyB0aGUgQXBwbGljYXRpb24gd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpbmtlZCBWZXJzaW9uLiAoSWYgeW91IHVzZSBvcHRpb24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55IHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIGFuZCBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUuIElmIHlvdSB1c2Ugb3B0aW9uIDRkMSwgeW91IG11c3QgcHJvdmlkZSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLikKKworNS4gQ29tYmluZWQgTGlicmFyaWVzLgorCitZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgbm90IEFwcGxpY2F0aW9ucyBhbmQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGNvbnZleSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgICogYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLCBjb252ZXllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgICogYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCis2LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug4oCcb3IgYW55IGxhdGVyIHZlcnNpb27igJ0gYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGV0aGVyIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNoYWxsIGFwcGx5LCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGFueSB2ZXJzaW9uIGlzIHBlcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIExpYnJhcnkuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MzM3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUEwtMS4wMgpAQCAtMCwwICsxLDc2IEBACisKK0x1Y2VudCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMDIgCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVGBTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworaW4gdGhlIGNhc2Ugb2YgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuICgiTFVDRU5UIiksIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBhbmQKK2luIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IsCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdlcmUgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yYHMgYmVoYWxmLCBhbmQgdGhlIENvbnRyaWJ1dG9yIGV4cGxpY2l0bHkgY29uc2VudHMsIGluIGFjY29yZGFuY2Ugd2l0aCBTZWN0aW9uIDNDLCB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgYXMgQ29udHJpYnV0aW9ucy4KKyJDb250cmlidXRvciIgbWVhbnMgTFVDRU5UIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgaGFzIENvbnRyaWJ1dGVkIGEgQ29udHJpYnV0aW9uIHRvIHRoZSBQcm9ncmFtLgorCisiRGlzdHJpYnV0b3IiIG1lYW5zIGEgUmVjaXBpZW50IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0sIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFByb2dyYW0sIG9yIGFueSBwYXJ0IHRoZXJlb2YuCisKKyJMaWNlbnNlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiT3JpZ2luYWwgUHJvZ3JhbSIgbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIEFncmVlbWVudCBhcyByZWxlYXNlZCBieSBMVUNFTlQsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zIG9yIGFueSBwYXJ0IHRoZXJlb2YKKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIG9mIHRoYXQgQ29udHJpYnV0b3IgYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkIGJ5IGEgQ29udHJpYnV0b3Igc2hhbGwgbm90IGFwcGx5IHRvIChpKSBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbiwgbm9yIHRvIChpaSkgQ29udHJpYnV0aW9ucyBvZiBvdGhlciBDb250cmlidXRvcnMuIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworCitBLiBEaXN0cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYW55IGZvcm0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7CitpZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBvciBvdGhlciB0YW5naWJsZSBmb3JtLCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgRGlzdHJpYnV0b3JgcyBvd24gbGljZW5zZSBhZ3JlZW1lbnQgaXMgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW07IGFuZAoraWYgZGlzdHJpYnV0ZWQgdW5kZXIgRGlzdHJpYnV0b3JgcyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHN1Y2ggbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7IGFuZAorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eS4KK0IuIEVhY2ggRGlzdHJpYnV0b3IgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBpbiB0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IChDKSAyMDAzLCBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0MuIEluIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gQWxzbywgZWFjaCBDb250cmlidXRvciBtdXN0IGFncmVlIHRoYXQgdGhlIGFkZGl0aW9ucyBhbmQvb3IgY2hhbmdlcyBhcmUgaW50ZW5kZWQgdG8gYmUgYSBDb250cmlidXRpb24uIE9uY2UgYSBDb250cmlidXRpb24gaXMgY29udHJpYnV0ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIERpc3RyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIERpc3RyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIERpc3RyaWJ1dG9yICgiQ29tbWVyY2lhbCBEaXN0cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBEaXN0cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgRGlzdHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gRVhQT1JUIENPTlRST0wKKworUmVjaXBpZW50IGFncmVlcyB0aGF0IFJlY2lwaWVudCBhbG9uZSBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpLgorCis4LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworTFVDRU5UIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUgb3RoZXIgdGhhbiBMVUNFTlQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmMzVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjAKQEAgLTAsMCArMSwyMTMgQEAKKworTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorTFBQTCBWZXJzaW9uIDEuMCAgMTk5OS0wMy0wMQorCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBpcyBub3QgYWxsb3dlZC4KKworCitQcmVhbWJsZQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuIEFzIGRlc2NyaWJlZCBiZWxvdyB5b3UgbWF5IHVzZQordGhpcyBsaWNlbmNlIGZvciBhbnkgc29mdHdhcmUgdGhhdCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAKKworSXQgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyIHNvZnR3YXJlIGlzIFRlWCByZWxhdGVkIChzdWNoCithcyBhIExhVGVYIHBhY2thZ2UgZmlsZSkgYnV0IGl0IG1heSBiZSB1c2VkIGZvciBhbnkgc29mdHdhcmUsIGV2ZW4gaWYKK2l0IGlzIHVucmVsYXRlZCB0byBUZVguCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHRoZSBmaWxlcyBvZiB5b3VyIGRpc3RyaWJ1dGlvbiBzaG91bGQgaGF2ZSBhbgorZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBnaXZpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciwgdG9nZXRoZXIKK3dpdGggYSByZWZlcmVuY2UgdG8gdGhpcyBsaWNlbnNlLgorCitBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZQorCisgICAlJSBwaWcuc3R5CisgICAlJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lCisKKyAgICUgVGhpcyBwcm9ncmFtIGNhbiByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMKKyAgICUgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgRGlzdHJpYnV0ZWQgZnJvbSBDVEFOCisgICAlIGFyY2hpdmVzIGluIGRpcmVjdG9yeSBtYWNyb3MvbGF0ZXgvYmFzZS9scHBsLnR4dDsgZWl0aGVyCisgICAlIHZlcnNpb24gMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBpbiB0aGUgZmlsZSwgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBkb2N1bWVudCB3b3VsZAorYXBwbHksIHdpdGg6CisKK2BUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZSBzb2Z0d2FyZSBgcGlnLnN0eWAgIGFuZCAKK2BUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nIHRvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCitUbyBzZWUgYSByZWFsIGV4YW1wbGUsIHNlZSB0aGUgZmlsZSBsZWdhbC50eHQgd2hpY2ggY2FycmllcyB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBiYXNlIGxhdGV4IGRpc3RyaWJ1dGlvbi4KKworVGhpcyBsaWNlbnNlIGdpdmVzIHRlcm1zIHVuZGVyIHdoaWNoIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkLiBJbmRpdmlkdWFsIGZpbGVzIG1heSBoYXZlIHNwZWNpZmljIGZ1cnRoZXIKK2NvbnN0cmFpbnRzIG9uIG1vZGlmaWNhdGlvbiwgYnV0IG5vIGZpbGUgc2hvdWxkIGhhdmUgcmVzdHJpY3Rpb25zIG9uCitkaXN0cmlidXRpb24gb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgYmVsb3cuIAorVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhIGRpc3RyaWJ1dG9yIHdpc2hpbmcgdG8gZGlzdHJpYnV0ZSBhIGNvbXBsZXRlCit1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gbmVlZCBvbmx5IGNoZWNrIHRoZSBjb25kaXRpb25zIGluIHRoaXMKK2ZpbGUsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGNoZWNrIGV2ZXJ5IGZpbGUgaW4gVGhlIFByb2dyYW0gZm9yIGV4dHJhCityZXN0cmljdGlvbnMuIElmIHlvdSBkbyBuZWVkIHRvIG1vZGlmeSB0aGUgZGlzdHJpYnV0aW9uIHRlcm1zIG9mIHNvbWUKK2ZpbGVzLCBkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlLCBpbnN0ZWFkIGRpc3RyaWJ1dGUgVGhlIFByb2dyYW0KK3VuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuIFlvdSBtYXkgdXNlIHRoZSBwYXJ0cyBvZiB0aGUgdGV4dCBvZiBMUFBMIGFzCithIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgZGlyZWN0bHkgcmVmZXIKK3RvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgVGhlIFByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLiAKKworCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGVybXMgQW5kIENvbmRpdGlvbnMgRm9yIENvcHlpbmcsIERpc3RyaWJ1dGlvbiBBbmQgTW9kaWZpY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitXQVJSQU5UWQorPT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieQorYXBwbGljYWJsZSBsYXcuICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcsIFRoZQorQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXNgIHdpdGhvdXQgd2FycmFudHkgb2YgYW55CitraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUKK2ltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlCitwcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKK3dpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIGFueSBvZiB0aGUgaW5kaXZpZHVhbCBhdXRob3JzIG5hbWVkIGluCit0aGUgc291cmNlIGZvciBUaGUgUHJvZ3JhbSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nCithbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQKK29mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mIGluYWJpbGl0eSB0byB1c2UgVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkCitpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIGJ5IHRoaXJkIHBhcnRpZXMgYXMgYSByZXN1bHQKK29mIGEgZmFpbHVyZSBvZiBUaGUgUHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyIHByb2dyYW1zKSwgZXZlbgoraWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YKK3N1Y2ggZGFtYWdlcy4KKworCitESVNUUklCVVRJT04KKz09PT09PT09PT09PQorCitSZWRpc3RyaWJ1dGlvbiBvZiB1bmNoYW5nZWQgZmlsZXMgaXMgYWxsb3dlZCBwcm92aWRlZCB0aGF0IGFsbCBmaWxlcwordGhhdCBtYWtlIHVwIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0gYXJlIGRpc3RyaWJ1dGVkLgorSW4gcGFydGljdWxhciB0aGlzIG1lYW5zIHRoYXQgVGhlIFByb2dyYW0gaGFzIHRvIGJlIGRpc3RyaWJ1dGVkCitpbmNsdWRpbmcgaXRzIGRvY3VtZW50YXRpb24gaWYgZG9jdW1lbnRhdGlvbiB3YXMgcGFydCBvZiB0aGUgb3JpZ2luYWwKK2Rpc3RyaWJ1dGlvbi4KKworVGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUgUHJvZ3JhbSB3aWxsIGNvbnRhaW4gYSBwcm9taW5lbnQgZmlsZQorbGlzdGluZyBhbGwgdGhlIGZpbGVzIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlLgorCitJZiB5b3UgcmVjZWl2ZSBvbmx5IHNvbWUgb2YgdGhlc2UgZmlsZXMgZnJvbSBzb21lb25lLCBjb21wbGFpbiEKKworVGhlIGRpc3RyaWJ1dGlvbiBvZiBjaGFuZ2VkIHZlcnNpb25zIG9mIGNlcnRhaW4gZmlsZXMgaW5jbHVkZWQgaW4gdGhlCitUaGUgUHJvZ3JhbSwgYW5kIHRoZSByZXVzZSBvZiBjb2RlIGZyb20gVGhlIFByb2dyYW0sIGFyZSBhbGxvd2VkCit1bmRlciB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICogSXQgaXMgYWxsb3dlZCBvbmx5IGlmIHRoZSBsZWdhbCBub3RpY2UgaW4gdGhlIGZpbGUgZG9lcyBub3QKKyAgIGV4cHJlc3NseSBmb3JiaWQgaXQuCisgICBTZWUgbm90ZSBiZWxvdywgdW5kZXIgIkNvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcyIuCisgCisgKiBZb3UgcmVuYW1lIHRoZSBmaWxlIGJlZm9yZSB5b3UgbWFrZSBhbnkgY2hhbmdlcyB0byBpdCwgdW5sZXNzIHRoZQorICAgZmlsZSBleHBsaWNpdGx5IHNheXMgdGhhdCByZW5hbWluZyBpcyBub3QgcmVxdWlyZWQuICBBbnkgc3VjaCBjaGFuZ2VkCisgICBmaWxlcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMgZGlzdHJpYnV0aW9uCisgICBvZiB0aG9zZSBmaWxlcywgYW5kIGFueSBmaWxlcyBkZXJpdmVkIGZyb20gdGhlbSwgdW5kZXIgdGhlIG5hbWVzIHVzZWQKKyAgIGJ5IHRoZSBvcmlnaW5hbCBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtLgorCisgKiBZb3UgY2hhbmdlIGFueSBgaWRlbnRpZmljYXRpb24gc3RyaW5nYCBpbiBUaGUgUHJvZ3JhbSB0byBjbGVhcmx5IAorICAgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBpcyBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgc3lzdGVtLgorCisgKiBJZiBUaGUgUHJvZ3JhbSBpbmNsdWRlcyBhbiBgZXJyb3IgcmVwb3J0IGFkZHJlc3NgIHNvIHRoYXQgZXJyb3JzCisgICBtYXkgYmUgcmVwb3J0ZWQgdG8gVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIG90aGVyIHNwZWNpZmllZAorICAgYWRkcmVzc2VzLCB0aGlzIGFkZHJlc3MgbXVzdCBiZSBjaGFuZ2VkIGluIGFueSBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgVGhlIFByb2dyYW0sIHNvIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm90IG1haW50YWluZWQgYnkgdGhlCisgICBvcmlnaW5hbCBwcm9ncmFtIG1haW50YWluZXJzIGFyZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlCisgICBjaGFuZ2VkIGZpbGVzLiAKKworICogWW91IGFja25vd2xlZGdlIHRoZSBzb3VyY2UgYW5kIGF1dGhvcnNoaXAgb2YgdGhlIG9yaWdpbmFsIHZlcnNpb24KKyAgIGluIHRoZSBtb2RpZmllZCBmaWxlLgorCisgKiBZb3UgYWxzbyBkaXN0cmlidXRlIHRoZSB1bm1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgb3IKKyAgIGFsdGVybmF0aXZlbHkgcHJvdmlkZSBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlCisgICB1c2VyIG9mIHlvdXIgbW9kaWZpZWQgZmlsZSBjYW4gYmUgcmVhc29uYWJseSBleHBlY3RlZCB0byBiZQorICAgYWJsZSB0byBvYnRhaW4gYW4gb3JpZ2luYWwsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KKyAgIEZvciBleGFtcGxlLCB5b3UgbWF5IHNwZWNpZnkgYSBVUkwgdG8gYSBzaXRlIHRoYXQgeW91IGV4cGVjdAorICAgd2lsbCBmcmVlbHkgcHJvdmlkZSB0aGUgdXNlciB3aXRoIGEgY29weSBvZiBUaGUgUHJvZ3JhbSAoZWl0aGVyCisgICB0aGUgdmVyc2lvbiBvbiB3aGljaCB5b3VyIG1vZGlmaWNhdGlvbiBpcyBiYXNlZCwgb3IgcGVyaGFwcyBhCisgICBsYXRlciB2ZXJzaW9uKS4KKworICogSWYgVGhlIFByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoLCBvciBpcyBiYXNlZCBvbiwgTGFUZVgsCisgICB0aGVuIGZpbGVzIHdpdGggdGhlIGZvbGxvd2luZyBmaWxlIGV4dGVuc2lvbnMgd2hpY2ggaGF2ZSBzcGVjaWFsCisgICBtZWFuaW5nIGluIExhVGVYIFNvZnR3YXJlLCBoYXZlIHNwZWNpYWwgbW9kaWZpY2F0aW9uIHJ1bGVzIHVuZGVyIHRoZQorICAgbGljZW5zZToKKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuaW5zYCAoaW5zdGFsbGF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMgbWF5CisgICAgICBub3QgYmUgbW9kaWZpZWQgYXQgYWxsIGJlY2F1c2UgdGhleSBjb250YWluIHRoZSBsZWdhbCBub3RpY2VzCisgICAgICB0aGF0IGFyZSBwbGFjZWQgaW4gdGhlIGdlbmVyYXRlZCBmaWxlcy4KKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb25zIGZpbGVzKTogdGhlc2UKKyAgICAgIGZpbGVzIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG5hbWUsIGJ1dAorICAgICAgb25seSB0byBlbmFibGUgdXNlIG9mIGFsbCBhdmFpbGFibGUgZm9udHMgYW5kIHRvIHByZXZlbnQgYXR0ZW1wdHMKKyAgICAgIHRvIGFjY2VzcyB1bmF2YWlsYWJsZSBmb250cy4gSG93ZXZlciwgbW9kaWZpZWQgZmlsZXMgYXJlIG5vdAorICAgICAgYWxsb3dlZCB0byBiZSBkaXN0cmlidXRlZCBpbiBwbGFjZSBvZiBvcmlnaW5hbCBmaWxlcy4KKyAKKyAgICAtIEZpbGVzIHdpdGggZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcyk6IHRoZXNlIGZpbGVzCisgICAgICBjYW4gYmUgY3JlYXRlZCBvciBtb2RpZmllZCB0byBlbmFibGUgZWFzeSBjb25maWd1cmF0aW9uIG9mIHRoZQorICAgICAgc3lzdGVtLiAgVGhlIGRvY3VtZW50YXRpb24gaW4gY2ZnZ3VpZGUudGV4IGluIHRoZSBiYXNlIExhVGVYCisgICAgICBkaXN0cmlidXRpb24gZGVzY3JpYmVzIHdoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gbW9kaWZ5IG9yIGdlbmVyYXRlCisgICAgICBzdWNoIGZpbGVzLgorIAorCitUaGUgYWJvdmUgcmVzdHJpY3Rpb25zIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbworbm90IGFwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0CitiZWNvbWVzIGlkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIGluIFRoZSBQcm9ncmFtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTk9URVMKKz09PT09CisKK1dlIGJlbGlldmUgdGhhdCB0aGVzZSByZXF1aXJlbWVudHMgZ2l2ZSB5b3UgdGhlIGZyZWVkb20geW91IHRvIG1ha2UKK21vZGlmaWNhdGlvbnMgdGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdQord2lzaCwgd2hpbHN0IG1haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxzdAorYWRoZXJpbmcgdG8gdGhlc2UgcmVxdWlyZW1lbnRzIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgY2ZnZ3VpZGUudGV4CitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLiAKKworQmVjYXVzZSBvZiB0aGUgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBhc3BlY3RzIG9mIHN5c3RlbXMKK2xpa2UgTGFUZVgsIFRoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YKK25vbi1zdGFuZGFyZCB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUKK2NvbnRyaWJ1dGVkIGNvZGUgZm9yIHRoZW0gYnV0IHN1Y2ggZGlzdHJpYnV0aW9ucyBhcmUgcGVybWl0dGVkIHVuZGVyIHRoZQorYWJvdmUgcmVzdHJpY3Rpb25zLgorCitUaGUgZG9jdW1lbnQgbW9kZ3VpZGUudGV4IGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBkZXRhaWxzCit0aGUgcmVhc29ucyBmb3IgdGhlIGxlZ2FsIHJlcXVpcmVtZW50cyBkZXRhaWxlZCBhYm92ZS4KK0V2ZW4gaWYgVGhlIFByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgYXJndW1lbnQgaW4KK21vZGd1aWRlLnRleCBtYXkgc3RpbGwgYXBwbHksIGFuZCBzaG91bGQgYmUgcmVhZCBiZWZvcmUKK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBUaGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZC4KKworCitDb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaW5kaXZpZHVhbCBmaWxlcyBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgd2hpY2ggc3VwZXJzZWRlCit0aGUgZ2VuZXJhbCBjb25kaXRpb25zIG9uIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGNvbnRhaW5lZCBpbgordGhpcyBmaWxlLiBJZiB0aGVyZSBhcmUgYW55IHN1Y2ggZmlsZXMsIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlCitQcm9ncmFtIHdpbGwgY29udGFpbiBhIHByb21pbmVudCBmaWxlIHRoYXQgbGlzdHMgYWxsIHRoZSBleGNlcHRpb25hbAorZmlsZXMuCisKK1R5cGljYWwgZXhhbXBsZXMgb2YgZmlsZXMgd2l0aCBtb3JlIHJlc3RyaWN0aXZlIG1vZGlmaWNhdGlvbgorY29uZGl0aW9ucyB3b3VsZCBiZSBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIHRleHQgb2YgY29weXJpZ2h0IG5vdGljZXMuCisKKyAqIFRoZSBjb25kaXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMgZGlmZmVyIG9ubHkgaW4gdGhlCisgICBleHRlbnQgb2YgKm1vZGlmaWNhdGlvbiogdGhhdCBpcyBhbGxvd2VkLgorCisgKiBUaGUgY29uZGl0aW9ucyBvbiAqZGlzdHJpYnV0aW9uKiBhcmUgdGhlIHNhbWUgZm9yIGFsbCB0aGUgZmlsZXMuCisgICBUaHVzIGEgKHJlKWRpc3RyaWJ1dG9yIG9mIGEgY29tcGxldGUsIHVuY2hhbmdlZCBjb3B5IG9mIFRoZSBQcm9ncmFtCisgICBuZWVkIG1lZXQgb25seSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGZpbGU7IGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KKyAgIGNoZWNrIHRoZSBoZWFkZXIgb2YgZXZlcnkgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIHRvIGNoZWNrIHRoYXQgYQorICAgZGlzdHJpYnV0aW9uIG1lZXRzIHRoZXNlIHJlcXVpcmVtZW50cy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgzMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjEKQEAgLTAsMCArMSwzMTYgQEAKKworCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworTFBQTCBWZXJzaW9uIDEuMSAgMTk5OS0wNy0xMAorCitDb3B5cmlnaHQgMTk5OSBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0aGUKK2Jhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGlzIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSBwcm9ncmFtIHRoYXQgeW91IGhhdmUgd3JpdHRlbiBhbmQgd2lzaAordG8gZGlzdHJpYnV0ZS4gIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIKK3Byb2dyYW0gaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0IHlvdSBtYXkgdXNlIGl0CitldmVuIGlmIHlvdXIgcHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gVGVYLiAgVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVworVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0VgLCBiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLAorZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZworZGlzdHJpYnV0aW5nIHRoZWlyIHByb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBgVGhlIFByb2dyYW1gIHJlZmVycyB0byBhbnkgcHJvZ3JhbQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBUaGUgUHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQKK2FuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtIG1heSBiZQorZGlzdHJpYnV0ZWQuICBJbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkKK2FuZC9vciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIG1vZGlmaWNhdGlvbiBvZiB0aGVtc2VsdmVzIGFuZCBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGVtc2VsdmVzLCBidXQgKm5vKiBmaWxlIG9mIFRoZQorUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5IG9yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gdGhlCitkaXN0cmlidXRpb24gb2YgYW4gdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBmaWxlLiAgQSBkaXN0cmlidXRvciB3aXNoaW5nCit0byBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUKK25lZWRzIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIG9ubHkgaW4gdGhpcyBsaWNlbnNlIGFuZCBub3doZXJlIGVsc2UuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiBUaGUgUHJvZ3JhbQorYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBJbgorcGFydGljdWxhciwgdGhlIGFjdCBvZiBydW5uaW5nIFRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLgorCitXZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UKK3RoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0KK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK1RoZSBQcm9ncmFtLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlIAorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCitpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLgorCisKK0NPTkRJVElPTlMgT04gRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbS4KK0Rpc3RyaWJ1dGlvbiBvZiBvbmx5IHBhcnQgb2YgVGhlIFByb2dyYW0gaXMgbm90IGFsbG93ZWQuCisKK1lvdSBtYXkgbm90IG1vZGlmeSBpbiBhbnkgd2F5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSB0aGF0IGJlYXJzIGEgbGVnYWwKK25vdGljZSBmb3JiaWRkaW5nIG1vZGlmaWNhdGlvbiBvZiB0aGF0IGZpbGUuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIGZpbGUgb2YgVGhlIFByb2dyYW0gaWYsIGFuZCBvbmx5IGlmLCB0aGUKK2ZvbGxvd2luZyBlaWdodCBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgMS4gWW91IG11c3QgbWVldCBhbnkgYWRkaXRpb25hbCBjb25kaXRpb25zIGJvcm5lIGJ5IHRoZSBmaWxlIG9uIHRoZQorICAgICBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGFzIGRlc2NyaWJlZCBiZWxvdworICAgICBpbiB0aGUgc3Vic2VjdGlvbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YKKyAgICAgVGhlIFByb2dyYW1gLgorIAorICAyLiBJZiB0aGUgZmlsZSBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUsIHRoZW4geW91IG11c3QgbWVldCBhbnkKKyAgICAgYXBwbGljYWJsZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkCisgICAgIHZlcnNpb24gb2YgdGhlIGZpbGUgdGhhdCBhcmUgZGVzY3JpYmVkIGJlbG93IGluIHRoZSBzdWJzZWN0aW9uCisgICAgIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXNgLgorIAorICAzLiBZb3UgbXVzdCBub3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUKKyAgICAgb3JpZ2luYWwgZmlsZS4KKyAKKyAgNC4gSW4gdGhlIG1vZGlmaWVkIGZpbGUsIHlvdSBtdXN0IGFja25vd2xlZGdlIHRoZSBhdXRob3JzaGlwIGFuZAorICAgICBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdGhlIG5hbWUgKGlmIGFueSkgb2YgdGhlIHByb2dyYW0KKyAgICAgd2hpY2ggY29udGFpbnMgaXQuCisgCisgIDUuIFlvdSBtdXN0IGNoYW5nZSBhbnkgaWRlbnRpZmljYXRpb24gc3RyaW5nIGluIHRoZSBmaWxlIHRvIGluZGljYXRlCisgICAgIGNsZWFybHkgdGhhdCB0aGUgbW9kaWZpZWQgZmlsZSBpcyBub3QgcGFydCBvZiBUaGUgUHJvZ3JhbS4KKyAKKyAgNi4gWW91IG11c3QgY2hhbmdlIGFueSBhZGRyZXNzZXMgaW4gdGhlIG1vZGlmaWVkIGZpbGUgZm9yIHRoZQorICAgICByZXBvcnRpbmcgb2YgZXJyb3JzIGluIHRoZSBmaWxlIG9yIGluIFRoZSBQcm9ncmFtIGdlbmVyYWxseSB0bworICAgICBlbnN1cmUgdGhhdCByZXBvcnRzIGZvciBmaWxlcyBubyBsb25nZXIgbWFpbnRhaW5lZCBieSB0aGUgb3JpZ2luYWwKKyAgICAgbWFpbnRhaW5lcnMgd2lsbCBiZSBkaXJlY3RlZCB0byB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIG1vZGlmaWVkCisgICAgIGZpbGVzLgorIAorICA3LiBZb3UgbXVzdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHVuZGVyIGEgbGljZW5zZSB0aGF0IGZvcmJpZHMKKyAgICAgZGlzdHJpYnV0aW9uIGJvdGggb2YgdGhlIG1vZGlmaWVkIGZpbGUgYW5kIG9mIGFueSBmaWxlcyBkZXJpdmVkCisgICAgIGZyb20gdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisgCisgIDguIFlvdSBtdXN0IGRvIGVpdGhlciAoQSkgb3IgKEIpOgorCisgICAgICAgKEEpIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIFRoZSBQcm9ncmFtICh0aGF0IGlzLCBhIGNvbXBsZXRlLAorICAgICAgICAgICB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0pIHRvZ2V0aGVyIHdpdGggdGhlIG1vZGlmaWVkCisgICAgICAgICAgIGZpbGU7IGlmIHlvdXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBtb2RpZmllZCBmaWxlIGlzIG1hZGUgYnkKKyAgICAgICAgICAgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGZpbGUgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICAgICAgICAgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSBUaGUgUHJvZ3JhbQorICAgICAgICAgICBmcm9tIHRoZSBzYW1lIHBsYWNlIG1lZXRzIHRoaXMgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZAorICAgICAgICAgICBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgVGhlIFByb2dyYW0gYWxvbmcgd2l0aCB0aGUKKyAgICAgICAgICAgbW9kaWZpZWQgZmlsZTsKKworICAgICAgIChCKSBwcm92aWRlIHRvIHRob3NlIHdobyByZWNlaXZlIHRoZSBtb2RpZmllZCBmaWxlIGluZm9ybWF0aW9uCisgICAgICAgICAgIHRoYXQgaXMgc3VmZmljaWVudCBmb3IgdGhlbSB0byBvYnRhaW4gYSBjb3B5IG9mIFRoZSBQcm9ncmFtOworICAgICAgICAgICBmb3IgZXhhbXBsZSwgeW91IG1heSBwcm92aWRlIGEgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwpCisgICAgICAgICAgIGZvciBhIHNpdGUgdGhhdCB5b3UgZXhwZWN0IHdpbGwgcHJvdmlkZSB0aGVtIHdpdGggYSBjb3B5IG9mIAorICAgICAgICAgICBUaGUgUHJvZ3JhbSBmcmVlIG9mIGNoYXJnZSAoZWl0aGVyIHRoZSB2ZXJzaW9uIGZyb20gd2hpY2gKKyAgICAgICAgICAgeW91ciBtb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgb3IgcGVyaGFwcyBhIGxhdGVyIHZlcnNpb24pLgorCitOb3RlIHRoYXQgaW4gdGhlIGFib3ZlLCBgZGlzdHJpYnV0aW9uYCBvZiBhIGZpbGUgbWVhbnMgbWFraW5nIHRoZQorZmlsZSBhdmFpbGFibGUgdG8gb3RoZXJzIGJ5IGFueSBtZWFucy4gIFRoaXMgaW5jbHVkZXMsIGZvciBpbnN0YW5jZSwKK2luc3RhbGxpbmcgdGhlIGZpbGUgb24gYW55IG1hY2hpbmUgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBmaWxlIGlzCithY2Nlc3NpYmxlIGJ5IHVzZXJzIG90aGVyIHRoYW4geW91cnNlbGYuICBgTW9kaWZpY2F0aW9uYCBvZiBhIGZpbGUKK21lYW5zIGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIGRlcml2YXRpdmUgZmlsZSB1bmRlciBhbnkKK2FwcGxpY2FibGUgbGF3IC0tIHRoYXQgaXMsIGEgZmlsZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlIG9yCithIHNpZ25pZmljYW50IHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMKK2FuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQ2hhbmdpbmcgdGhlIG5hbWUgb2YgYSBmaWxlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBtb2RpZmljYXRpb24gb2YKK3RoZSBmaWxlLgorCitUaGUgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGRvIG5vdCBoYXZlIHRvIGJlCithcHBsaWVkIHRvIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK2Fib3ZlIGNvbmRpdGlvbnMuICBOb3RlLCBob3dldmVyLCB0aGF0IENvbmRpdGlvbiA3LiBkb2VzIGFwcGx5IHRvCithbnkgc3VjaCBtb2RpZmllZCBmaWxlLgorCitUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90CithcHBseSB0bywgdGhlIHVwZGF0aW5nLCBieSBhbnkgbWV0aG9kLCBvZiBhIGZpbGUgc28gdGhhdCBpdCBiZWNvbWVzCitpZGVudGljYWwgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoYXQgZmlsZSBvZiBUaGUgUHJvZ3JhbS4KKworIAorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtLCBldmVuIGZvciB5b3VyIG93bgorcGVyc29uYWwgdXNlLCB3aXRob3V0IGFsc28gbWVldGluZyB0aGUgYWJvdmUgZWlnaHQgY29uZGl0aW9ucyBmb3IKK2Rpc3RyaWJ1dGluZyB0aGUgbW9kaWZpZWQgZmlsZS4gIFdoaWxlIHlvdSBtaWdodCBpbnRlbmQgdGhhdCBzdWNoCittb2RpZmllZCBmaWxlcyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBmaWxlOyBvciBpdCBtYXkKK25vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZCBmaWxlCit0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucyBvZgordGhpcyBsaWNlbnNlLiAgSXQgaXMgdXN1YWxseSBpbiB5b3VyIGJlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkKK29mIFRoZSBQcm9ncmFtIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMgb25lLiAgTWFueSBwcm9ncmFtcyBwcm92aWRlCit3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgcHJvZ3JhbSB3aXRob3V0IGFsdGVyaW5nIGl0cworbGljZW5zZWQgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIEluZGl2aWR1YWwgRmlsZXMgb2YgVGhlIFByb2dyYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGluZGl2aWR1YWwgZmlsZSBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgdGhhdAorc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBpZiwgYW5kIG9ubHkKK2lmLCBzdWNoIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBleGNsdXNpdmVseSBjb25jZXJuIG1vZGlmaWNhdGlvbiBvZiB0aGUKK2ZpbGUgb3IgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZSBjb25kaXRpb25zCitvbiBpbmRpdmlkdWFsIGZpbGVzIG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZSBtYXkgZGlmZmVyIG9ubHkgd2l0aAorcmVzcGVjdCB0byB0aGUga2luZCBhbmQgZXh0ZW50IG9mIG1vZGlmaWNhdGlvbiBvZiB0aG9zZSBmaWxlcyB0aGF0CitpcyBhbGxvd2VkLCBhbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMKK29mIHRob3NlIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggTGFUZVggKHRoYXQgaXMsCitpZiBpdCBpcyBhIExhVGVYIHNvZnR3YXJlIGZpbGUpLCB0aGVuIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbAorY29uZGl0aW9ucywgd2hpY2ggc3VwcGxlbWVudCBhbmQvb3Igc3VwZXJzZWRlIHRoZSBjb25kaXRpb25zCithYm92ZSwgYXBwbHkgdG8gdGhlIGZpbGUgYWNjb3JkaW5nIHRvIGl0cyBmaWxlbmFtZSBleHRlbnNpb246CisKKyAgLSBZb3UgbWF5IG5vdCBtb2RpZnkgYW55IGZpbGUgd2l0aCBmaWxlbmFtZSBleHRlbnNpb24gYC5pbnNgIHNpbmNlCisgICAgdGhlc2UgYXJlIGluc3RhbGxhdGlvbiBmaWxlcyBjb250YWluaW5nIHRoZSBsZWdhbCBub3RpY2VzIHRoYXQgYXJlCisgICAgcGxhY2VkIGluIHRoZSBmaWxlcyB0aGV5IGdlbmVyYXRlLgorIAorICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuZmRgIChMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMpIHVuZGVyIHRoZSBzdGFuZGFyZAorICAgIGNvbmRpdGlvbnMgb2YgdGhlIExQUEwgYXMgZGVzY3JpYmVkIGFib3ZlLiAgWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUKKyAgICBzdWNoIG1vZGlmaWVkIExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcyB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzCisgICAgcHJvdmlkZWQgdGhhdDoKKyAgICAoMSkgdGhlIG9ubHkgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgZmlsZXMgZWl0aGVyIGVuYWJsZSB1c2Ugb2YKKyAgICAgICAgYXZhaWxhYmxlIGZvbnRzIG9yIHByZXZlbnQgYXR0ZW1wdHMgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzOworICAgICgyKSB5b3UgYWxzbyBkaXN0cmlidXRlIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBmaWxlcyAoVGVYIGlucHV0CisgICAgICAgIHBhdGhzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgd2hpY2ggc2V0IG9mIExhVGVYIGZvbnQgZGVmaW5pdGlvbgorICAgICAgICBmaWxlcyBpcyBhY3R1YWxseSB1c2VkIGJ5IFRlWCkuCisKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmNmZ2AgKGNvbmZpZ3VyYXRpb24gZmlsZXMpIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMuCisgICAgVGhlIFByb2dyYW0gbWF5IChhbmQgdXN1YWxseSB3aWxsKSBzcGVjaWZ5IHRoZSByYW5nZSBvZiBjb21tYW5kcworICAgIHRoYXQgYXJlIGFsbG93ZWQgaW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAKK0JlY2F1c2Ugb2YgcG9ydGFiaWxpdHkgYW5kIGV4Y2hhbmdlYWJpbGl0eSBpc3N1ZXMgaW4gTGFUZVggc29mdHdhcmUsCitUaGUgTGFUZVgzIFByb2plY3QgZGVwcmVjYXRlcyB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mCitjb21wb25lbnRzIG9mIExhVGVYIG9yIG9mIGdlbmVyYWxseSBhdmFpbGFibGUgY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSwKK2J1dCBzdWNoIGRpc3RyaWJ1dGlvbiBjYW4gbWVldCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBUaGUgUHJvZ3JhbS4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIFRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIFRoZSBQcm9ncmFtIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCithIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIFRoZSBQcm9ncmFtIGlzIHdpdGggeW91LiAgU2hvdWxkIFRoZSBQcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91Cithc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yCithbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBmaWxlcyBvZiBUaGUgUHJvZ3JhbSwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBUaGUgUHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYmVsb3csIGJlIGxpYWJsZSB0bworeW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIFRoZSBQcm9ncmFtIG9yIG91dCBvZgoraW5hYmlsaXR5IHRvIHVzZSBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxvc3Mgb2YKK2RhdGEsIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSwgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSBhbnlvbmUgYXMKK2EgcmVzdWx0IG9mIGFueSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIKK3Byb2dyYW1zKSwgZXZlbiBpZiBUaGUgQ29weXJpZ2h0IEhvbGRlciBvciBzYWlkIGF1dGhvciBvciBzYWlkIG90aGVyCitwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKworV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGltcG9ydGFudCBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQKK3JlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpcgorcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlc2UgYXV0aG9ycyBhcmUgYWRkcmVzc2VkIGFzIGB5b3VgIGluCit0aGlzIHNlY3Rpb24uCisKKworQ2hvb3NpbmcgVGhpcyBMaWNlbnNlIG9yIEFub3RoZXIgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBmb3IgYW55IHBhcnQgb2YgeW91ciBwcm9ncmFtIHlvdSB3YW50IG9yIG5lZWQgdG8gdXNlICpkaXN0cmlidXRpb24qCitjb25kaXRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhvc2UgaW4gdGhpcyBsaWNlbnNlLCB0aGVuIGRvIG5vdCByZWZlciB0bwordGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgcHJvZ3JhbSBidXQgaW5zdGVhZCBkaXN0cmlidXRlIHlvdXIKK3Byb2dyYW0gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgbGljZW5zZQorYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZSBzaG91bGQgbm90IHJlZmVyIHRvCit0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHlvdXIgcHJvZ3JhbSBpcworZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciBwcm9ncmFtIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHByb2dyYW1zIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBmaWxlcyBvZiB5b3VyIHByb2dyYW0gYm90aAorYW4gZXhwbGljaXQgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgeW91ciBuYW1lIGFuZCB0aGUgeWVhciBhbmQgYWxzbworYSBzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbGUgaXMKK2NvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMQorICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjEgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWCAKKyAgJSB2ZXJzaW9uIDE5OTkvMDYvMDEgb3IgbGF0ZXIuCisgICUKKyAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgdGhlIGZpbGVzIHBpZy5kdHggYW5kIHBpZy5pbnMKKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMgZ2l2ZW4gaW4KK3RoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCBgVGhlIFByb2dyYW1gIHJlZmVycmluZyB0byB0aGUKK3R3byBmaWxlcyBgcGlnLmR0eGAgYW5kIGBwaWcuaW5zYCwgYW5kIGBUaGUgQ29weXJpZ2h0IEhvbGRlcmAgcmVmZXJyaW5nCit0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIFRoZSBQcm9ncmFtCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiBUaGUgUHJvZ3JhbSBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIFRoZSBQcm9ncmFtLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIGxpa2UKKworICAgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LgorCisgICBpbiB0aGF0IHBsYWNlLiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZQorICAgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91CisgICB0byBjb21wcmlzZSBUaGUgUHJvZ3JhbS4KKworIE5vdGluZyBFeGNlcHRpb25hbCBGaWxlcworICAKKyAgIElmIFRoZSBQcm9ncmFtIGNvbnRhaW5zIGFueSBmaWxlcyBiZWFyaW5nIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLCBvciBvbiBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMsIG9mIHRob3NlCisgICBmaWxlcyAob3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWAorICAgU29mdHdhcmUgRmlsZXNgKSwgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IFRoZSBQcm9ncmFtIGNvbnRhaW4gYQorICAgcHJvbWluZW50IGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBleGNlcHRpb25hbCBjb25kaXRpb25zLCBhbmQgZWl0aGVyCisgICBsaXN0cyB0aGUgZXhjZXB0aW9uYWwgZmlsZXMgb3IgZGVmaW5lcyBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIG9mCisgICBleGNlcHRpb25hbCBmaWxlcy4KKworICAgRmlsZXMgY29udGFpbmluZyB0aGUgdGV4dCBvZiBhIGxpY2Vuc2UgKHN1Y2ggYXMgdGhpcyBmaWxlKSBhcmUKKyAgIG9mdGVuIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbW9yZSByZXN0cmljdGl2ZSBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24uICBMYVRlWCBjb25maWd1cmF0aW9uIGZpbGVzICh3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgYC5jZmdgKSBhcmUgZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBsZXNzIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMKKyAgIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlCisgICBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24gTGFUZVggc29mdHdhcmUgZ2l2ZW4gYWJvdmUgYXJlIGV4YW1wbGVzIAorICAgb2YgZGVjbGFyaW5nIGEgY2F0ZWdvcnkgb2YgZmlsZXMgYmVhcmluZyBleGNlcHRpb25hbCBhZGRpdGlvbmFsCisgICBjb25kaXRpb25zLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTFhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMgpAQCAtMCwwICsxLDMyMCBAQAorCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4yICAxOTk5LTA5LTAzCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoCit0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91cgorcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQKK2V2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguICBUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XCitUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRWAsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsCitleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nCitkaXN0cmlidXRpbmcgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGBUaGUgUHJvZ3JhbWAgcmVmZXJzIHRvIGFueSBwcm9ncmFtCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZC4gIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeQorYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZW1zZWx2ZXMsIGJ1dCAqbm8qIGZpbGUgb2YgVGhlCitQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuICBBIGRpc3RyaWJ1dG9yIHdpc2hpbmcKK3RvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZQorbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbQordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC4KKworWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbAorbm90aWNlIGZvcmJpZGRpbmcgbW9kaWZpY2F0aW9uIG9mIHRoYXQgZmlsZS4KKworWW91IG1heSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpZiwgYW5kIG9ubHkgaWYsIHRoZQorZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiBZb3UgbXVzdCBtZWV0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYm9ybmUgYnkgdGhlIGZpbGUgb24gdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGJlbG93CisgICAgIGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZgorICAgICBUaGUgUHJvZ3JhbWAuCisgCisgIDIuIElmIHRoZSBmaWxlIGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSwgdGhlbiB5b3UgbXVzdCBtZWV0IGFueQorICAgICBhcHBsaWNhYmxlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQKKyAgICAgdmVyc2lvbiBvZiB0aGUgZmlsZSB0aGF0IGFyZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc2AuCisgCisgIDMuIFlvdSBtdXN0IG5vdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICBvcmlnaW5hbCBmaWxlLgorIAorICA0LiBJbiB0aGUgbW9kaWZpZWQgZmlsZSwgeW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIGF1dGhvcnNoaXAgYW5kCisgICAgIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmFtZSAoaWYgYW55KSBvZiB0aGUgcHJvZ3JhbQorICAgICB3aGljaCBjb250YWlucyBpdC4KKyAKKyAgNS4gWW91IG11c3QgY2hhbmdlIGFueSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgaW4gdGhlIGZpbGUgdG8gaW5kaWNhdGUKKyAgICAgY2xlYXJseSB0aGF0IHRoZSBtb2RpZmllZCBmaWxlIGlzIG5vdCBwYXJ0IG9mIFRoZSBQcm9ncmFtLgorIAorICA2LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGFkZHJlc3NlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBmb3IgdGhlCisgICAgIHJlcG9ydGluZyBvZiBlcnJvcnMgaW4gdGhlIGZpbGUgb3IgaW4gVGhlIFByb2dyYW0gZ2VuZXJhbGx5IHRvCisgICAgIGVuc3VyZSB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vIGxvbmdlciBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICBtYWludGFpbmVycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUgbW9kaWZpZWQKKyAgICAgZmlsZXMuCisgCisgIDcuIFlvdSBtdXN0IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcworICAgICBkaXN0cmlidXRpb24gYm90aCBvZiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgb2YgYW55IGZpbGVzIGRlcml2ZWQKKyAgICAgZnJvbSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAKKyAgOC4gWW91IG11c3QgZG8gZWl0aGVyIChBKSBvciAoQik6CisKKyAgICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsCisgICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQKKyAgICAgICAgICAgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieQorICAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZAorICAgICAgICAgICBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtCisgICAgICAgICAgIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkCisgICAgICAgICAgIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICBtb2RpZmllZCBmaWxlOworCisgICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07CisgICAgICAgICAgIGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKKyAgICAgICAgICAgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgCisgICAgICAgICAgIFRoZSBQcm9ncmFtIGZyZWUgb2YgY2hhcmdlIChlaXRoZXIgdGhlIHZlcnNpb24gZnJvbSB3aGljaAorICAgICAgICAgICB5b3VyIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBvciBwZXJoYXBzIGEgbGF0ZXIgdmVyc2lvbikuCisKK05vdGUgdGhhdCBpbiB0aGUgYWJvdmUsIGBkaXN0cmlidXRpb25gIG9mIGEgZmlsZSBtZWFucyBtYWtpbmcgdGhlCitmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiAgVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLAoraW5zdGFsbGluZyB0aGUgZmlsZSBvbiBhbnkgbWFjaGluZSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGZpbGUgaXMKK2FjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gIGBNb2RpZmljYXRpb25gIG9mIGEgZmlsZQorbWVhbnMgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgZGVyaXZhdGl2ZSBmaWxlIHVuZGVyIGFueQorYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IKK2Egc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGZpbGUgKG90aGVyIHRoYW4gYXMgbmVjZXNzaXRhdGVkIGJ5IHRoZSBmaWxlCitjb252ZW50aW9ucyBvZiB0aGUgdGFyZ2V0IGZpbGUgc3lzdGVtcykgaXMgY29uc2lkZXJlZCB0byBiZSBhCittb2RpZmljYXRpb24gb2YgdGhlIGZpbGUuCisKK1RoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUKK2FwcGxpZWQgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWJvdmUgY29uZGl0aW9ucy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8KK2FueSBzdWNoIG1vZGlmaWVkIGZpbGUuCisKK1RoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0IGJlY29tZXMKK2lkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLgorCisgCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBlaWdodCBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBmaWxlLiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWVkIGZpbGVzIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGU7IG9yIGl0IG1heQorbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUKK3RoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mCit0aGlzIGxpY2Vuc2UuICBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weQorb2YgVGhlIFByb2dyYW0gaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuICBNYW55IHByb2dyYW1zIHByb3ZpZGUKK3dheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzCitsaWNlbnNlZCBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gaW5kaXZpZHVhbCBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB0aGF0CitzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGlmLCBhbmQgb25seQoraWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZQorZmlsZSBvciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlIGNvbmRpdGlvbnMKK29uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoCityZXNwZWN0IHRvIHRoZSBraW5kIGFuZCBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9mIHRob3NlIGZpbGVzIHRoYXQKK2lzIGFsbG93ZWQsIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucworb2YgdGhvc2UgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywKK2lmIGl0IGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSksIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25kaXRpb25zLCB3aGljaCBzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMKK2Fib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjoKKworICAtIFlvdSBtYXkgbm90IG1vZGlmeSBhbnkgZmlsZSB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmluc2Agc2luY2UKKyAgICB0aGVzZSBhcmUgaW5zdGFsbGF0aW9uIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUKKyAgICBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuCisgCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcykgdW5kZXIgdGhlIHN0YW5kYXJkCisgICAgY29uZGl0aW9ucyBvZiB0aGUgTFBQTCBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgIHN1Y2ggbW9kaWZpZWQgTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMKKyAgICBwcm92aWRlZCB0aGF0OgorICAgICgxKSB0aGUgb25seSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcyBlaXRoZXIgZW5hYmxlIHVzZSBvZgorICAgICAgICBhdmFpbGFibGUgZm9udHMgb3IgcHJldmVudCBhdHRlbXB0cyB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHM7CisgICAgKDIpIHlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZpbGVzIChUZVggaW5wdXQKKyAgICAgICAgcGF0aHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBzZXQgb2YgTGFUZVggZm9udCBkZWZpbml0aW9uCisgICAgICAgIGZpbGVzIGlzIGFjdHVhbGx5IHVzZWQgYnkgVGVYKS4KKworICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcykgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcy4KKyAgICBUaGUgUHJvZ3JhbSBtYXkgKGFuZCB1c3VhbGx5IHdpbGwpIHNwZWNpZnkgdGhlIHJhbmdlIG9mIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorIAorQmVjYXVzZSBvZiBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGlzc3VlcyBpbiBMYVRlWCBzb2Z0d2FyZSwKK1RoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YKK2NvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLAorYnV0IHN1Y2ggZGlzdHJpYnV0aW9uIGNhbiBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKK2EgcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgVGhlIFByb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UKK2Fzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IKK2FueSBhdXRob3IgbmFtZWQgaW4gdGhlIGZpbGVzIG9mIFRoZSBQcm9ncmFtLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCitwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdWAgaW4KK3RoaXMgc2VjdGlvbi4KKworCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHByb2dyYW0geW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvCit0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciBwcm9ncmFtIGJ1dCBpbnN0ZWFkIGRpc3RyaWJ1dGUgeW91cgorcHJvZ3JhbSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlCithcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8KK3RoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciBwcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHByb2dyYW0gaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGZpbGVzIG9mIHlvdXIgcHJvZ3JhbSBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvCithIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpcworY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4yCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMiBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYIAorICAlIHZlcnNpb24gMTk5OS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbgordGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIGBUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZQordHdvIGZpbGVzIGBwaWcuZHR4YCBhbmQgYHBpZy5pbnNgLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcKK3RvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgVGhlIFByb2dyYW0KKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIFRoZSBQcm9ncmFtIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0uICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgVGhlIFByb2dyYW0uCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgbGlrZQorCisgICAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLgorCisgTm90aW5nIEV4Y2VwdGlvbmFsIEZpbGVzCisgIAorICAgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24sIG9yIG9uIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgb2YgdGhvc2UKKyAgIGZpbGVzIChvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYCisgICBTb2Z0d2FyZSBGaWxlc2ApLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhCisgICBwcm9taW5lbnQgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMsIGFuZCBlaXRoZXIKKyAgIGxpc3RzIHRoZSBleGNlcHRpb25hbCBmaWxlcyBvciBkZWZpbmVzIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgb2YKKyAgIGV4Y2VwdGlvbmFsIGZpbGVzLgorCisgICBGaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZQorICAgb2Z0ZW4gZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbi4gIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uCisgICBgLmNmZ2ApIGFyZSBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIGxlc3MgcmVzdHJpY3RpdmUgY29uZGl0aW9ucworICAgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUKKyAgIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiBMYVRlWCBzb2Z0d2FyZSBnaXZlbiBhYm92ZSBhcmUgZXhhbXBsZXMgCisgICBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwKKyAgIGNvbmRpdGlvbnMuCisKKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4zYyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4zYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVlM2JiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjCkBAIC0wLDAgKzEsNDE4IEBACisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4zYyAgMjAwOC0wNS0wNAorCitDb3B5cmlnaHQgMTk5OSAyMDAyLTIwMDggTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIHByaW1hcnkgbGljZW5zZSB1bmRlcgord2hpY2ggdGhlIExhVGVYIGtlcm5lbCBhbmQgdGhlIGJhc2UgTGFUZVggcGFja2FnZXMgYXJlIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSB3b3JrIG9mIHdoaWNoIHlvdSBob2xkIHRoZSBjb3B5cmlnaHQKK2FuZCB3aGljaCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkKK3N1aXRhYmxlIGlmIHlvdXIgd29yayBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgCitpdCBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCB5b3UgY2FuIHVzZSBpdCBldmVuIGlmIHlvdXIgd29yayBpcyAKK3VucmVsYXRlZCB0byBUZVguCisKK1RoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0VgLAorYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMKK3dobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHdvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB3b3JrIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIG1vZGlmaWVkLCBhcyB3ZWxsIGFzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YKK3RoYXQgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB5b3VyIHdvcmsKK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK3RoYXQgd29yay4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZQorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXhgCithbmQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitERUZJTklUSU9OUworPT09PT09PT09PT0KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQ6CisKKyAgIGBXb3JrYAorICAgIEFueSB3b3JrIGJlaW5nIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICAKKyAgIGBEZXJpdmVkIFdvcmtgCisgICAgQW55IHdvcmsgdGhhdCB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgaXMgZGVyaXZlZCBmcm9tIHRoZSBXb3JrLgorCisgICBgTW9kaWZpY2F0aW9uYCAKKyAgICBBbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55IGFwcGxpY2FibGUKKyAgICBsYXcgLS0gZm9yIGV4YW1wbGUsIHRoZSBwcm9kdWN0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIGFuCisgICAgb3JpZ2luYWwgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmsgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mCisgICAgc3VjaCBhIGZpbGUsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yCisgICAgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKKyAgIGBNb2RpZnlgCisgICAgVG8gYXBwbHkgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueQorICAgIGFwcGxpY2FibGUgbGF3LgorICAgIAorICAgYERpc3RyaWJ1dGlvbmAKKyAgICBNYWtpbmcgY29waWVzIG9mIHRoZSBXb3JrIGF2YWlsYWJsZSBmcm9tIG9uZSBwZXJzb24gdG8gYW5vdGhlciwgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0LiAgRGlzdHJpYnV0aW9uIGluY2x1ZGVzIChidXQgaXMgbm90IGxpbWl0ZWQgdG8pCisgICAgbWFraW5nIGFueSBlbGVjdHJvbmljIGNvbXBvbmVudHMgb2YgdGhlIFdvcmsgYWNjZXNzaWJsZSBieQorICAgIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQIG9yIEhUVFAgb3IgYnkgc2hhcmVkIGZpbGUKKyAgICBzeXN0ZW1zIHN1Y2ggYXMgU3VuYHMgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKS4KKworICAgYENvbXBpbGVkIFdvcmtgCisgICAgQSB2ZXJzaW9uIG9mIHRoZSBXb3JrIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBmb3JtIHdoZXJlIGl0CisgICAgaXMgZGlyZWN0bHkgdXNhYmxlIG9uIGEgY29tcHV0ZXIgc3lzdGVtLiAgVGhpcyBwcm9jZXNzaW5nIG1heQorICAgIGluY2x1ZGUgdXNpbmcgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmssCisgICAgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBXb3JrLCBjb3B5aW5nIG9mIGNvbXBvbmVudHMgb2YgdGhlIFdvcmssIG9yCisgICAgb3RoZXIgYWN0aXZpdGllcy4gIE5vdGUgdGhhdCBtb2RpZmljYXRpb24gb2YgYW55IGluc3RhbGxhdGlvbgorICAgIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmsgY29uc3RpdHV0ZXMgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLgorCisgICBgQ3VycmVudCBNYWludGFpbmVyYAorICAgIEEgcGVyc29uIG9yIHBlcnNvbnMgbm9taW5hdGVkIGFzIHN1Y2ggd2l0aGluIHRoZSBXb3JrLiAgSWYgdGhlcmUgaXMKKyAgICBubyBzdWNoIGV4cGxpY2l0IG5vbWluYXRpb24gdGhlbiBpdCBpcyB0aGUgYENvcHlyaWdodCBIb2xkZXJgIHVuZGVyCisgICAgYW55IGFwcGxpY2FibGUgbGF3LgorCisgICBgQmFzZSBJbnRlcnByZXRlcmAgCisgICAgQSBwcm9ncmFtIG9yIHByb2Nlc3MgdGhhdCBpcyBub3JtYWxseSBuZWVkZWQgZm9yIHJ1bm5pbmcgb3IKKyAgICBpbnRlcnByZXRpbmcgYSBwYXJ0IG9yIHRoZSB3aG9sZSBvZiB0aGUgV29yay4gICAgCisKKyAgICBBIEJhc2UgSW50ZXJwcmV0ZXIgbWF5IGRlcGVuZCBvbiBleHRlcm5hbCBjb21wb25lbnRzIGJ1dCB0aGVzZQorICAgIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBCYXNlIEludGVycHJldGVyIHByb3ZpZGVkIHRoYXQgZWFjaAorICAgIGV4dGVybmFsIGNvbXBvbmVudCBjbGVhcmx5IGlkZW50aWZpZXMgaXRzZWxmIHdoZW5ldmVyIGl0IGlzIHVzZWQKKyAgICBpbnRlcmFjdGl2ZWx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gYXBwbHlpbmcgdGhlCisgICAgbGljZW5zZSB0byB0aGUgV29yaywgdGhlIG9ubHkgYXBwbGljYWJsZSBCYXNlIEludGVycHJldGVyIGlzIGEKKyAgICBgTGFUZVgtRm9ybWF0YCBvciBpbiB0aGUgY2FzZSBvZiBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIAorICAgIGBMYVRlWC1mb3JtYXRgIGEgcHJvZ3JhbSBpbXBsZW1lbnRpbmcgdGhlIGBUZVggbGFuZ3VhZ2VgLgorCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFdvcmsgaXMgbm90IHJlc3RyaWN0ZWQgYW5kIG5vCityZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLgorCisyLiAgWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UKK3JlY2VpdmVkIGl0LiAgRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkCittb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkCitXb3JrIG1heSBiZSBhc3N1bWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZS4KKworMy4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhCitjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyCithYm92ZSwgYXMgbG9uZyBhcyB0aGF0IENvbXBpbGVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseQorYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIFdvcmsuCisKKzQuICBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuICBZb3UgbWF5CithbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK0NvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuICBEZXJpdmVkIFdvcmtzCitkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvCitiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLgorCis1LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBtb2RpZnkKK3lvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywKK2FuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbgordGhlIERlcml2ZWQgV29yay4KKworNi4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQKK2ZvciBldmVyeSBjb21wb25lbnQgb2YgdGhlIFdvcmsgdW5sZXNzIHRoYXQgY29tcG9uZW50IGNsZWFybHkgc3RhdGVzCitpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiAgT25seQordGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBhbGxvd2VkIHRvIGFkZCBzdWNoIHN0YXRlbWVudHMgb2YgZXhlbXB0aW9uIAordG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuIAorCisgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudAorICAgICBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlCisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrCisgICAgIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrCisgICAgIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLgorICAgICAKKyAgYi4gRXZlcnkgY29tcG9uZW50IG9mIHRoZSBEZXJpdmVkIFdvcmsgY29udGFpbnMgcHJvbWluZW50IG5vdGljZXMKKyAgICAgZGV0YWlsaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgdG8gdGhhdCBjb21wb25lbnQsIG9yIGEKKyAgICAgcHJvbWluZW50IHJlZmVyZW5jZSB0byBhbm90aGVyIGZpbGUgdGhhdCBpcyBkaXN0cmlidXRlZCBhcyBwYXJ0CisgICAgIG9mIHRoZSBEZXJpdmVkIFdvcmsgYW5kIHRoYXQgY29udGFpbnMgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgbG9nCisgICAgIG9mIHRoZSBjaGFuZ2VzLgorICAKKyAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsCisgICAgIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgICBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUKKyAgICAgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdAorICAgICB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLgorCisgIGQuIFlvdSBkaXN0cmlidXRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggdGhlIERlcml2ZWQgV29yazoKKworICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgCisgICAgICAgICAgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieQorICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBjb21wb25lbnQgZnJvbSBhCisgICAgICAgICAgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgICAgICAgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcworICAgICAgICAgIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0bworICAgICAgICAgIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50OworCisgICAgICAgMi4gSW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGNvbXBsZXRlLAorICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yay4KKworNy4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzCit0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZAorV29yaywgYW5kIGFzIGxvbmcgYXMgdGhlIGNvbmRpdGlvbnMgb2YgQ2xhdXNlIDYsIGFib3ZlLCBhcmUgbWV0IHdpdGgKK3JlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLgorCis4LiAgVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSBtb2RpZmljYXRpb24sIGJ5IGFueSBtZXRob2QsIG9mIGFueSBjb21wb25lbnQgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoYXQgY29tcG9uZW50IG9mIHRoZSBXb3JrIGFzCitpdCBpcyBkaXN0cmlidXRlZCBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVuZGVyIENsYXVzZSA0LCBhYm92ZS4KKworOS4gIERpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvciBhbnkgRGVyaXZlZCBXb3JrIGluIGFuIGFsdGVybmF0aXZlCitmb3JtYXQsIHdoZXJlIHRoZSBXb3JrIG9yIHRoYXQgRGVyaXZlZCBXb3JrIChpbiB3aG9sZSBvciBpbiBwYXJ0KSBpcwordGhlbiBwcm9kdWNlZCBieSBhcHBseWluZyBzb21lIHByb2Nlc3MgdG8gdGhhdCBmb3JtYXQsIGRvZXMgbm90IHJlbGF4IG9yCitudWxsaWZ5IGFueSBzZWN0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXMgdGhleSBwZXJ0YWluIHRvIHRoZSByZXN1bHRzIG9mCithcHBseWluZyB0aGF0IHByb2Nlc3MuCisgICAgIAorMTAuIGEuIEEgRGVyaXZlZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlCisgICAgICAgcHJvdmlkZWQgdGhhdCBsaWNlbnNlIGl0c2VsZiBob25vcnMgdGhlIGNvbmRpdGlvbnMgbGlzdGVkIGluCisgICAgICAgQ2xhdXNlIDYgYWJvdmUsIGluIHJlZ2FyZCB0byB0aGUgV29yaywgdGhvdWdoIGl0IGRvZXMgbm90IGhhdmUKKyAgICAgICB0byBob25vciB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisgICAgICAKKyAgICBiLiBJZiBhIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCB0aGF0CisgICAgICAgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZgorICAgICAgIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgCisgICAgICAgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay4KKworMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0bwordGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nCitzdWNoIHdvcmtzIHdpdGggdGhlIFdvcmsgYnkgYW55IG1lYW5zLgorCisxMi4gIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudAorY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpc2AsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIHRoZSBXb3JrIGlzIHdpdGggeW91LiAgU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nCit3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBjb21wb25lbnRzIG9mIHRoZQorV29yaywgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzCitwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwKK3NwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YKK3RoZSBXb3JrIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZAordG8sIGxvc3Mgb2YgZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5CithbnlvbmUgYXMgYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgdGhlIFdvcmsgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitNQUlOVEVOQU5DRSBPRiBUSEUgV09SSworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkYCBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlcgorZXhwbGljaXRseSBhbmQgcHJvbWluZW50bHkgc3RhdGVzIG5lYXIgdGhlIHByaW1hcnkgY29weXJpZ2h0IG5vdGljZSBpbgordGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyCitvciBzaW1wbHkgdGhhdCBpdCBpcyBgYXV0aG9yLW1haW50YWluZWRgLgorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZGAgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIKK3dobyBoYXMgaW5kaWNhdGVkIGluIHRoZSBXb3JrIHRoYXQgdGhleSBhcmUgd2lsbGluZyB0byByZWNlaXZlIGVycm9yCityZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbAorYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZQorb3IgYWN0IHVwb24gdGhlc2UgZXJyb3IgcmVwb3J0cy4KKworVGhlIFdvcmsgY2hhbmdlcyBmcm9tIHN0YXR1cyBgbWFpbnRhaW5lZGAgdG8gYHVubWFpbnRhaW5lZGAgaWYgdGhlcmUKK2lzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudAorTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMKK29mIGNvbW11bmljYXRpb24gZm9yIGEgcGVyaW9kIG9mIHNpeCBtb250aHMsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKK3NpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS4KKworWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aAorYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLgorCitJZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YKK3RoZSBXb3JrIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczoKKworIDEuICBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZAorICAgICB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mCisgICAgIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLgorCisgMi4gIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrCisgICAgIGlzIHN0aWxsIG1haW50YWluZWQuCisKKyAgYS4gSWYgaXQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgdGhlbiBhc2sgdGhlIEN1cnJlbnQgTWFpbnRhaW5lcgorICAgICB0byB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisgICAgIAorICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZQorICAgICBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlCisgICAgIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIKKyAgICAgbWFpbnRlbmFuY2UuICAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlCisgICAgIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKQorCisgM2EuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgcmVhY2hhYmxlIGFuZCBhZ3JlZXMgdG8gcGFzcworICAgICBtYWludGVuYW5jZSBvZiB0aGUgV29yayB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QKKyAgICAgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuCisgICAgIAorICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQKKyAgICAgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsCisgICAgIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuICAKKyAgICAKKyA0LiAgSWYgeW91IG1ha2UgYW4gYGludGVudGlvbiBhbm5vdW5jZW1lbnRgIGFzIGRlc2NyaWJlZCBpbiAyYi4gYWJvdmUKKyAgICAgYW5kIGFmdGVyIHRocmVlIG1vbnRocyB5b3VyIGludGVudGlvbiBpcyBjaGFsbGVuZ2VkIG5laXRoZXIgYnkKKyAgICAgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBub3IgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgbm9yIGJ5IG90aGVyCisgICAgIHBlb3BsZSwgdGhlbiB5b3UgbWF5IGFycmFuZ2UgZm9yIHRoZSBXb3JrIHRvIGJlIGNoYW5nZWQgc28gYXMKKyAgICAgdG8gbmFtZSB5b3UgYXMgdGhlIChuZXcpIEN1cnJlbnQgTWFpbnRhaW5lci4KKyAgICAgCisgNS4gIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzCisgICAgIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0CisgICAgIGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQKKyAgICAgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKworQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdAordGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLgorCitJZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQKK2ltbWVkaWF0ZWx5IHByb3ZpZGUsIHdpdGhpbiB0aGUgV29yaywgYSBwcm9taW5lbnQgYW5kIHVuYW1iaWd1b3VzCitzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiAgWW91IHNob3VsZCBhbHNvCithbm5vdW5jZSB5b3VyIG5ldyBzdGF0dXMgdG8gdGhlIHNhbWUgcGVydGluZW50IGNvbW11bml0eSBhcworaW4gMmIpIGFib3ZlLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3dvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91YCBpbgordGhpcyBzZWN0aW9uLgorCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHdvcmsgeW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbgorZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLAorZGlzdHJpYnV0ZSB5b3VyIHdvcmsgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZQorc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0Cit5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciB3b3JrIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXhgIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBjb21wb25lbnQuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoYXQgY29tcG9uZW50OyBvcgoraXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZAordmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucworb2YgdGhpcyBsaWNlbnNlIGluIHdheXMgdGhhdCBjb3VsZCBoYXZlIGxlZ2FsIGltcGxpY2F0aW9ucyBhbmQsIHdvcnNlLAorY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuICBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyCitiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5IG9mIHRoZSBXb3JrIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMKK29uZS4gIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yaword2l0aG91dCBhbHRlcmluZyBhbnkgb2YgaXRzIGxpY2Vuc2VkIGNvbXBvbmVudHMuCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrCit3YXMgYXV0aG9yZWQgYW5kL29yIGxhc3Qgc3Vic3RhbnRpYWxseSBtb2RpZmllZC4gIEluY2x1ZGUgYWxzbyBhCitzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdAorY29tcG9uZW50IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDA1IE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMworICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAorICAlIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzIGBtYWludGFpbmVkYC4KKyAgJSAKKyAgJSBUaGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoaXMgd29yayBpcyBNLiBZLiBOYW1lLgorICAlCisgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisgICUgYW5kIHRoZSBkZXJpdmVkIGZpbGUgcGlnLnN0eS4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMKK2dpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCB0aGUgYFdvcmtgIHJlZmVycmluZwordG8gdGhlIHRocmVlIGZpbGVzIGBwaWcuZHR4YCwgYHBpZy5pbnNgLCBhbmQgYHBpZy5zdHlgICh0aGUgbGFzdCBiZWluZworZ2VuZXJhdGVkIGZyb20gYHBpZy5kdHhgIHVzaW5nIGBwaWcuaW5zYCksIHRoZSBgQmFzZSBJbnRlcnByZXRlcmAKK3JlZmVycmluZyB0byBhbnkgYExhVGVYLUZvcm1hdGAsIGFuZCBib3RoIGBDb3B5cmlnaHQgSG9sZGVyYCBhbmQKK2BDdXJyZW50IE1haW50YWluZXJgIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lYC4KKworSWYgeW91IGRvIG5vdCB3YW50IHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIG9mIExQUEwgdG8gYXBwbHkgdG8geW91cgorV29yaywgY2hhbmdlIGBtYWludGFpbmVkYCBhYm92ZSBpbnRvIGBhdXRob3ItbWFpbnRhaW5lZGAuICAKK0hvd2V2ZXIsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYG1haW50YWluZWRgLCBhcyB0aGUgTWFpbnRlbmFuY2UKK3NlY3Rpb24gd2FzIGFkZGVkIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHlvdXIgV29yayByZW1haW5zIHVzZWZ1bCB0bwordGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQKK3lvdXJzZWxmLgorCitEZXJpdmVkIFdvcmtzIFRoYXQgQXJlIE5vdCBSZXBsYWNlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIGNsYXVzZXMgb2YgdGhlIExQUEwgc3BlY2lmeSBtZWFucyB0byBwcm92aWRlIHJlbGlhYmlsaXR5IGFuZAorc3RhYmlsaXR5IGZvciB0aGUgdXNlciBjb21tdW5pdHkuIFRoZXkgdGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcword2l0aCB0aGUgY2FzZSB0aGF0IGEgRGVyaXZlZCBXb3JrIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYQorKGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlKSByZXBsYWNlbWVudCBvZiB0aGUgb3JpZ2luYWwgV29yay4gSWYKK3RoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuLCBpZiBhIGZldyBsaW5lcyBvZiBjb2RlIGFyZSByZXVzZWQgZm9yIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHRhc2spLCB0aGVuIGNsYXVzZXMgNmIgYW5kIDZkIHNoYWxsIG5vdCBhcHBseS4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yayBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6CisKKyAgICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKyAgIAorICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlCisgICBlbnRpdGxlZCB0byBtYWtlIHJlYXNvbmFibGUgY29uamVjdHVyZXMgYXMgdG8gd2hpY2ggZmlsZXMgY29tcHJpc2UKKyAgIHRoZSBXb3JrLgorCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xpYnBuZyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xpYnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWQ1YjAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nCkBAIC0wLDAgKzEsMTEyIEBACisKK1RoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mCithbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGlzIGNvcHkgYW5kIHRoZSBub3RpY2VzIGluIHRoZSBmaWxlIHBuZy5oIHRoYXQgaXMKK2luY2x1ZGVkIGluIHRoZSBsaWJwbmcgZGlzdHJpYnV0aW9uLCB0aGUgbGF0dGVyIHNoYWxsIHByZXZhaWwuCisKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjQuNSwgRGVjZW1iZXIgOSwgMjAxMCwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYtMjAxMCBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjIuNQord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWwgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgQ29zbWluIFRydXRhCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi41IC0gT2N0b2JlciAzLCAyMDAyLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwMC0yMDAyIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKKworICAgU2ltb24tUGllcnJlIENhZGlldXgKKyAgIEVyaWMgUy4gUmF5bW9uZAorICAgR2lsbGVzIFZvbGxhbnQKKworYW5kIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbnMgdG8gdGhlIGRpc2NsYWltZXI6CisKKyAgIFRoZXJlIGlzIG5vIHdhcnJhbnR5IGFnYWluc3QgaW50ZXJmZXJlbmNlIHdpdGggeW91ciBlbmpveW1lbnQgb2YgdGhlCisgICBsaWJyYXJ5IG9yIGFnYWluc3QgaW5mcmluZ2VtZW50LiAgVGhlcmUgaXMgbm8gd2FycmFudHkgdGhhdCBvdXIKKyAgIGVmZm9ydHMgb3IgdGhlIGxpYnJhcnkgd2lsbCBmdWxmaWxsIGFueSBvZiB5b3VyIHBhcnRpY3VsYXIgcHVycG9zZXMKKyAgIG9yIG5lZWRzLiAgVGhpcyBsaWJyYXJ5IGlzIHByb3ZpZGVkIHdpdGggYWxsIGZhdWx0cywgYW5kIHRoZSBlbnRpcmUKKyAgIHJpc2sgb2Ygc2F0aXNmYWN0b3J5IHF1YWxpdHksIHBlcmZvcm1hbmNlLCBhY2N1cmFjeSwgYW5kIGVmZm9ydCBpcyB3aXRoCisgICB0aGUgdXNlci4KKworbGlicG5nIHZlcnNpb25zIDAuOTcsIEphbnVhcnkgMTk5OCwgdGhyb3VnaCAxLjAuNiwgTWFyY2ggMjAsIDIwMDAsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTAuOTYsCit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnM6CisKKyAgIFRvbSBMYW5lCisgICBHbGVubiBSYW5kZXJzLVBlaHJzb24KKyAgIFdpbGxlbSB2YW4gU2NoYWlrCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjg5LCBKdW5lIDE5OTYsIHRocm91Z2ggMC45NiwgTWF5IDE5OTcsIGFyZQorQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyCitEaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC44OCwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgSm9obiBCb3dsZXIKKyAgIEtldmluIEJyYWNleQorICAgU2FtIEJ1c2hlbGwKKyAgIE1hZ251cyBIb2xtZ3JlbgorICAgR3JlZyBSb2Vsb2ZzCisgICBUb20gVGFubmVyCisKK2xpYnBuZyB2ZXJzaW9ucyAwLjUsIE1heSAxOTk1LCB0aHJvdWdoIDAuODgsIEphbnVhcnkgMTk5NiwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJDb250cmlidXRpbmcgQXV0aG9ycyIKK2lzIGRlZmluZWQgYXMgdGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CisKKyAgIEFuZHJlYXMgRGlsZ2VyCisgICBEYXZlIE1hcnRpbmRhbGUKKyAgIEd1eSBFcmljIFNjaGFsbmF0CisgICBQYXVsIFNjaG1pZHQKKyAgIFRpbSBXZWduZXIKKworVGhlIFBORyBSZWZlcmVuY2UgTGlicmFyeSBpcyBzdXBwbGllZCAiQVMgSVMiLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzCithbmQgR3JvdXAgNDIsIEluYy4gZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLAoraW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgb2YKK2ZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLiAgVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLgorYXNzdW1lIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LAorb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGljaCBtYXkgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgUE5HCitSZWZlcmVuY2UgTGlicmFyeSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KKworMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAorZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bworc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlIHRoaXMKK3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQorYXBwcmVjaWF0ZWQuCisKKworQSAicG5nX2dldF9jb3B5cmlnaHQiIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgZm9yIGNvbnZlbmllbnQgdXNlIGluICJhYm91dCIKK2JveGVzIGFuZCB0aGUgbGlrZToKKworICAgcHJpbnRmKCIlcyIscG5nX2dldF9jb3B5cmlnaHQoTlVMTCkpOworCitBbHNvLCB0aGUgUE5HIGxvZ28gKGluIFBORyBmb3JtYXQsIG9mIGNvdXJzZSkgaXMgc3VwcGxpZWQgaW4gdGhlCitmaWxlcyAicG5nYmFyLnBuZyIgYW5kICJwbmdiYXIuanBnICg4OHgzMSkgYW5kICJwbmdub3cucG5nIiAoOTh4MzEpLgorCitMaWJwbmcgaXMgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gIE9TSSBDZXJ0aWZpZWQgT3BlbiBTb3VyY2UgaXMgYQorY2VydGlmaWNhdGlvbiBtYXJrIG9mIHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlLgorCitHbGVubiBSYW5kZXJzLVBlaHJzb24KK2dsZW5ucnAgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0CitEZWNlbWJlciA5LCAyMDEwCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01JVCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y4YmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUCkBAIC0wLDAgKzEsMjMgQEAKKworTUlUIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSA8eWVhcj4gPGNvcHlyaWdodCBob2xkZXJzPgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkYzNmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjAKQEAgLTAsMCArMSwxMDkgQEAKKworTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjAKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZWBgIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gYGBZb3VgYCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCBgYFlvdWBgIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBgYGNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemVgYCkgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LiAKK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiAKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIAorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgYGBMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4gCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4gCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuIAorTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gKGBgTmV0c2NhcGVgYCkgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiAKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBOZXRzY2FwZS4gTm8gb25lIG90aGVyIHRoYW4gTmV0c2NhcGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuIAorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgYGBNb3ppbGxhYGAsIGBgTU9aSUxMQVBMYGAsIGBgTU9aUExgYCwgYGBOZXRzY2FwZWBgLCBgYE5QTGBgIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBgYEFTIElTYGAgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzguIFRFUk1JTkFUSU9OLgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhIGBgY29tbWVyY2lhbCBpdGVtLGBgIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVgYCBhbmQgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sYGAgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZyBhcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkgYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KK0VYSElCSVQgQS4KK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uYGAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhOGM0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0xLjEKQEAgLTAsMCArMSwxODUgQEAKKworTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMQorCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIKK21lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMuICJDb3ZlcmVkIENvZGUiCittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUuICJFeGVjdXRhYmxlIgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYuICJJbml0aWFsIERldmVsb3BlciIKK21lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKwordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKK3VuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMSAoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMSAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCit1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yIChhKSBhbmQgMi4yIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIgKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcworCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMKKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQgKGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9ucyAzLjEsIDMuMiwgMy4zLCAzLjQgYW5kIDMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucworCitOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoIk5ldHNjYXBlIikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMKKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3JrcworCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAiTW96aWxsYSIsICJNT1pJTExBUEwiLCAiTU9aUEwiLCAiTmV0c2NhcGUiLCAiTVBMIiwgIk5QTCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBUZXJtaW5hdGlvbgorCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCitzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCithbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gZ292ZXJubWVudCBlbmQgdXNlcnMKKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTWlzY2VsbGFuZW91cworCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBjbGFpbXMKKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTXVsdGlwbGUtbGljZW5zZWQgY29kZQorCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIE1QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFeGhpYml0IEEgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCitQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCitfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUKK3Byb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlCithYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKK3lvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCitvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQordGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQordW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlMmY3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01QTC0yLjAKQEAgLTAsMCArMSwzNzMgQEAKK01vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gRGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tLS0tCisKKzEuMS4gIkNvbnRyaWJ1dG9yIgorICAgIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgdGhhdCBjcmVhdGVzLCBjb250cmlidXRlcyB0bworICAgIHRoZSBjcmVhdGlvbiBvZiwgb3Igb3ducyBDb3ZlcmVkIFNvZnR3YXJlLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorICAgIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9ucyBvZiBvdGhlcnMgKGlmIGFueSkgdXNlZAorICAgIGJ5IGEgQ29udHJpYnV0b3IgYW5kIHRoYXQgcGFydGljdWxhciBDb250cmlidXRvcidzIENvbnRyaWJ1dGlvbi4KKworMS4zLiAiQ29udHJpYnV0aW9uIgorICAgIG1lYW5zIENvdmVyZWQgU29mdHdhcmUgb2YgYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjQuICJDb3ZlcmVkIFNvZnR3YXJlIgorICAgIG1lYW5zIFNvdXJjZSBDb2RlIEZvcm0gdG8gd2hpY2ggdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkCisgICAgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIHRoZSBFeGVjdXRhYmxlIEZvcm0gb2Ygc3VjaCBTb3VyY2UgQ29kZQorICAgIEZvcm0sIGFuZCBNb2RpZmljYXRpb25zIG9mIHN1Y2ggU291cmNlIENvZGUgRm9ybSwgaW4gZWFjaCBjYXNlCisgICAgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNS4gIkluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeSBMaWNlbnNlcyIKKyAgICBtZWFucworCisgICAgKGEpIHRoYXQgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgZGVzY3JpYmVkCisgICAgICAgIGluIEV4aGliaXQgQiB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZTsgb3IKKworICAgIChiKSB0aGF0IHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHdhcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAgICAgICAgdmVyc2lvbiAxLjEgb3IgZWFybGllciBvZiB0aGUgTGljZW5zZSwgYnV0IG5vdCBhbHNvIHVuZGVyIHRoZQorICAgICAgICB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlLgorCisxLjYuICJFeGVjdXRhYmxlIEZvcm0iCisgICAgbWVhbnMgYW55IGZvcm0gb2YgdGhlIHdvcmsgb3RoZXIgdGhhbiBTb3VyY2UgQ29kZSBGb3JtLgorCisxLjcuICJMYXJnZXIgV29yayIKKyAgICBtZWFucyBhIHdvcmsgdGhhdCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgbWF0ZXJpYWwsIGluIAorICAgIGEgc2VwYXJhdGUgZmlsZSBvciBmaWxlcywgdGhhdCBpcyBub3QgQ292ZXJlZCBTb2Z0d2FyZS4KKworMS44LiAiTGljZW5zZSIKKyAgICBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuICJMaWNlbnNhYmxlIgorICAgIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwKKyAgICB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSwgYW55IGFuZAorICAgIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4gIk1vZGlmaWNhdGlvbnMiCisgICAgbWVhbnMgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAoYSkgYW55IGZpbGUgaW4gU291cmNlIENvZGUgRm9ybSB0aGF0IHJlc3VsdHMgZnJvbSBhbiBhZGRpdGlvbiB0bywKKyAgICAgICAgZGVsZXRpb24gZnJvbSwgb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250ZW50cyBvZiBDb3ZlcmVkCisgICAgICAgIFNvZnR3YXJlOyBvcgorCisgICAgKGIpIGFueSBuZXcgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgY29udGFpbnMgYW55IENvdmVyZWQKKyAgICAgICAgU29mdHdhcmUuCisKKzEuMTEuICJQYXRlbnQgQ2xhaW1zIiBvZiBhIENvbnRyaWJ1dG9yCisgICAgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLAorICAgIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgc3VjaAorICAgIENvbnRyaWJ1dG9yIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkLCBidXQgZm9yIHRoZSBncmFudCBvZiB0aGUKKyAgICBMaWNlbnNlLCBieSB0aGUgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGhhdmluZworICAgIG1hZGUsIGltcG9ydCwgb3IgdHJhbnNmZXIgb2YgZWl0aGVyIGl0cyBDb250cmlidXRpb25zIG9yIGl0cworICAgIENvbnRyaWJ1dG9yIFZlcnNpb24uCisKKzEuMTIuICJTZWNvbmRhcnkgTGljZW5zZSIKKyAgICBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMCwgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMSwgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAorICAgIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDMuMCwgb3IgYW55IGxhdGVyIHZlcnNpb25zIG9mIHRob3NlCisgICAgbGljZW5zZXMuCisKKzEuMTMuICJTb3VyY2UgQ29kZSBGb3JtIgorICAgIG1lYW5zIHRoZSBmb3JtIG9mIHRoZSB3b3JrIHByZWZlcnJlZCBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMuCisKKzEuMTQuICJZb3UiIChvciAiWW91ciIpCisgICAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCisgICAgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQKKyAgICBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvcgorICAgIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorICAgIG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCisgICAgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuCisgICAgZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKKyAgICBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzIGFuZCBDb25kaXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyLjEuIEdyYW50cworCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKQorICAgIExpY2Vuc2FibGUgYnkgc3VjaCBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbWFrZSBhdmFpbGFibGUsCisgICAgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIGV4cGxvaXQgaXRzCisgICAgQ29udHJpYnV0aW9ucywgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggTW9kaWZpY2F0aW9ucywgb3IKKyAgICBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBvZiBzdWNoIENvbnRyaWJ1dG9yIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIKKyAgICBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgZWl0aGVyIGl0cworICAgIENvbnRyaWJ1dGlvbnMgb3IgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24uCisKKzIuMi4gRWZmZWN0aXZlIERhdGUKKworVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIGFueSBDb250cmlidXRpb24KK2JlY29tZSBlZmZlY3RpdmUgZm9yIGVhY2ggQ29udHJpYnV0aW9uIG9uIHRoZSBkYXRlIHRoZSBDb250cmlidXRvciBmaXJzdAorZGlzdHJpYnV0ZXMgc3VjaCBDb250cmlidXRpb24uCisKKzIuMy4gTGltaXRhdGlvbnMgb24gR3JhbnQgU2NvcGUKKworVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIgYXJlIHRoZSBvbmx5IHJpZ2h0cyBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2UuIE5vIGFkZGl0aW9uYWwgcmlnaHRzIG9yIGxpY2Vuc2VzIHdpbGwgYmUgaW1wbGllZCBmcm9tIHRoZQorZGlzdHJpYnV0aW9uIG9yIGxpY2Vuc2luZyBvZiBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCBieSBhCitDb250cmlidXRvcjoKKworKGEpIGZvciBhbnkgY29kZSB0aGF0IGEgQ29udHJpYnV0b3IgaGFzIHJlbW92ZWQgZnJvbSBDb3ZlcmVkIFNvZnR3YXJlOworICAgIG9yCisKKyhiKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSBZb3VyIGFuZCBhbnkgb3RoZXIgdGhpcmQgcGFydHkncworICAgIG1vZGlmaWNhdGlvbnMgb2YgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgaXRzCisgICAgQ29udHJpYnV0aW9ucyB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiBpdHMgQ29udHJpYnV0b3IKKyAgICBWZXJzaW9uKTsgb3IKKworKGMpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlIGFic2VuY2Ugb2YKKyAgICBpdHMgQ29udHJpYnV0aW9ucy4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgaW4gdGhlIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsCitvciBsb2dvcyBvZiBhbnkgQ29udHJpYnV0b3IgKGV4Y2VwdCBhcyBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoCit0aGUgbm90aWNlIHJlcXVpcmVtZW50cyBpbiBTZWN0aW9uIDMuNCkuCisKKzIuNC4gU3Vic2VxdWVudCBMaWNlbnNlcworCitObyBDb250cmlidXRvciBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyBhcyBhIHJlc3VsdCBvZiBZb3VyIGNob2ljZSB0bworZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIChzZWUgU2VjdGlvbiAxMC4yKSBvciB1bmRlciB0aGUgdGVybXMgb2YgYSBTZWNvbmRhcnkgTGljZW5zZSAoaWYKK3Blcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAzLjMpLgorCisyLjUuIFJlcHJlc2VudGF0aW9uCisKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRoZSBDb250cmlidXRvciBiZWxpZXZlcyBpdHMKK0NvbnRyaWJ1dGlvbnMgYXJlIGl0cyBvcmlnaW5hbCBjcmVhdGlvbihzKSBvciBpdCBoYXMgc3VmZmljaWVudCByaWdodHMKK3RvIGdyYW50IHRoZSByaWdodHMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisyLjYuIEZhaXIgVXNlCisKK1RoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gbGltaXQgYW55IHJpZ2h0cyBZb3UgaGF2ZSB1bmRlcgorYXBwbGljYWJsZSBjb3B5cmlnaHQgZG9jdHJpbmVzIG9mIGZhaXIgdXNlLCBmYWlyIGRlYWxpbmcsIG9yIG90aGVyCitlcXVpdmFsZW50cy4KKworMi43LiBDb25kaXRpb25zCisKK1NlY3Rpb25zIDMuMSwgMy4yLCAzLjMsIGFuZCAzLjQgYXJlIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQKK2luIFNlY3Rpb24gMi4xLgorCiszLiBSZXNwb25zaWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuMS4gRGlzdHJpYnV0aW9uIG9mIFNvdXJjZSBGb3JtCisKK0FsbCBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBTb2Z0d2FyZSBpbiBTb3VyY2UgQ29kZSBGb3JtLCBpbmNsdWRpbmcgYW55CitNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSwgbXVzdCBiZSB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgdGhhdCB0aGUgU291cmNlCitDb2RlIEZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGFuZCBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgbm90CithdHRlbXB0IHRvIGFsdGVyIG9yIHJlc3RyaWN0IHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlCitGb3JtLgorCiszLjIuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIEZvcm0KKworSWYgWW91IGRpc3RyaWJ1dGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIEZvcm0gdGhlbjoKKworKGEpIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUKKyAgICBGb3JtLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjEsIGFuZCBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZgorICAgIHRoZSBFeGVjdXRhYmxlIEZvcm0gaG93IHRoZXkgY2FuIG9idGFpbiBhIGNvcHkgb2Ygc3VjaCBTb3VyY2UgQ29kZQorICAgIEZvcm0gYnkgcmVhc29uYWJsZSBtZWFucyBpbiBhIHRpbWVseSBtYW5uZXIsIGF0IGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiB0byB0aGUgcmVjaXBpZW50OyBhbmQKKworKGIpIFlvdSBtYXkgZGlzdHJpYnV0ZSBzdWNoIEV4ZWN1dGFibGUgRm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgIExpY2Vuc2UsIG9yIHN1YmxpY2Vuc2UgaXQgdW5kZXIgZGlmZmVyZW50IHRlcm1zLCBwcm92aWRlZCB0aGF0IHRoZQorICAgIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIEZvcm0gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlcgorICAgIHRoZSByZWNpcGllbnRzJyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjMuIERpc3RyaWJ1dGlvbiBvZiBhIExhcmdlciBXb3JrCisKK1lvdSBtYXkgY3JlYXRlIGFuZCBkaXN0cmlidXRlIGEgTGFyZ2VyIFdvcmsgdW5kZXIgdGVybXMgb2YgWW91ciBjaG9pY2UsCitwcm92aWRlZCB0aGF0IFlvdSBhbHNvIGNvbXBseSB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGZvcgordGhlIENvdmVyZWQgU29mdHdhcmUuIElmIHRoZSBMYXJnZXIgV29yayBpcyBhIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQKK1NvZnR3YXJlIHdpdGggYSB3b3JrIGdvdmVybmVkIGJ5IG9uZSBvciBtb3JlIFNlY29uZGFyeSBMaWNlbnNlcywgYW5kIHRoZQorQ292ZXJlZCBTb2Z0d2FyZSBpcyBub3QgSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzLCB0aGlzCitMaWNlbnNlIHBlcm1pdHMgWW91IHRvIGFkZGl0aW9uYWxseSBkaXN0cmlidXRlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2ggU2Vjb25kYXJ5IExpY2Vuc2UocyksIHNvIHRoYXQgdGhlIHJlY2lwaWVudCBvZgordGhlIExhcmdlciBXb3JrIG1heSwgYXQgdGhlaXIgb3B0aW9uLCBmdXJ0aGVyIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhpcyBMaWNlbnNlIG9yIHN1Y2ggU2Vjb25kYXJ5CitMaWNlbnNlKHMpLgorCiszLjQuIE5vdGljZXMKKworWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIHRoZSBzdWJzdGFuY2Ugb2YgYW55IGxpY2Vuc2Ugbm90aWNlcworKGluY2x1ZGluZyBjb3B5cmlnaHQgbm90aWNlcywgcGF0ZW50IG5vdGljZXMsIGRpc2NsYWltZXJzIG9mIHdhcnJhbnR5LAorb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5KSBjb250YWluZWQgd2l0aGluIHRoZSBTb3VyY2UgQ29kZSBGb3JtIG9mCit0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgZXhjZXB0IHRoYXQgWW91IG1heSBhbHRlciBhbnkgbGljZW5zZSBub3RpY2VzIHRvCit0aGUgZXh0ZW50IHJlcXVpcmVkIHRvIHJlbWVkeSBrbm93biBmYWN0dWFsIGluYWNjdXJhY2llcy4KKworMy41LiBBcHBsaWNhdGlvbiBvZiBBZGRpdGlvbmFsIFRlcm1zCisKK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZAorU29mdHdhcmUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24KK2JlaGFsZiBvZiBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueQorc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5LCBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciBmb3IgYW55CitsaWFiaWxpdHkgaW5jdXJyZWQgYnkgc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLiBZb3UgbWF5IGluY2x1ZGUgYWRkaXRpb25hbAorZGlzY2xhaW1lcnMgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBzcGVjaWZpYyB0byBhbnkKK2p1cmlzZGljdGlvbi4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHBsYWNlZCBpbiBhIHRleHQgZmlsZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZQorb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYQorcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gVGVybWluYXRpb24KKy0tLS0tLS0tLS0tLS0tCisKKzUuMS4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgb2YgaXRzIHRlcm1zLiBIb3dldmVyLCBpZiBZb3UgYmVjb21lCitjb21wbGlhbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBmcm9tIGEgcGFydGljdWxhcgorQ29udHJpYnV0b3IgYXJlIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgc3VjaAorQ29udHJpYnV0b3IgZXhwbGljaXRseSBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIFlvdXIgZ3JhbnRzLCBhbmQgKGIpIG9uIGFuCitvbmdvaW5nIGJhc2lzLCBpZiBzdWNoIENvbnRyaWJ1dG9yIGZhaWxzIHRvIG5vdGlmeSBZb3Ugb2YgdGhlCitub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciBZb3UgaGF2ZQorY29tZSBiYWNrIGludG8gY29tcGxpYW5jZS4gTW9yZW92ZXIsIFlvdXIgZ3JhbnRzIGZyb20gYSBwYXJ0aWN1bGFyCitDb250cmlidXRvciBhcmUgcmVpbnN0YXRlZCBvbiBhbiBvbmdvaW5nIGJhc2lzIGlmIHN1Y2ggQ29udHJpYnV0b3IKK25vdGlmaWVzIFlvdSBvZiB0aGUgbm9uLWNvbXBsaWFuY2UgYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZQorZmlyc3QgdGltZSBZb3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2Ygbm9uLWNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UKK2Zyb20gc3VjaCBDb250cmlidXRvciwgYW5kIFlvdSBiZWNvbWUgY29tcGxpYW50IHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK1lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCis1LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSBieSBhc3NlcnRpbmcgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMsCitjb3VudGVyLWNsYWltcywgYW5kIGNyb3NzLWNsYWltcykgYWxsZWdpbmcgdGhhdCBhIENvbnRyaWJ1dG9yIFZlcnNpb24KK2RpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gdGhlIHJpZ2h0cyBncmFudGVkIHRvCitZb3UgYnkgYW55IGFuZCBhbGwgQ29udHJpYnV0b3JzIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciBTZWN0aW9uCisyLjEgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZS4KKworNS4zLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgNS4xIG9yIDUuMiBhYm92ZSwgYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2gKK2hhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIFlvdXIgZGlzdHJpYnV0b3JzIHVuZGVyIHRoaXMgTGljZW5zZQorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIDYuIERpc2NsYWltZXIgb2YgV2FycmFudHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIENvdmVyZWQgU29mdHdhcmUgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJhcyBpcyIgICAgICAgKgorKiAgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQsIGltcGxpZWQsIG9yICAqCisqICBzdGF0dXRvcnksIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIHRoYXQgdGhlICAgICAgICoKKyogIENvdmVyZWQgU29mdHdhcmUgaXMgZnJlZSBvZiBkZWZlY3RzLCBtZXJjaGFudGFibGUsIGZpdCBmb3IgYSAgICAgICAgKgorKiAgcGFydGljdWxhciBwdXJwb3NlIG9yIG5vbi1pbmZyaW5naW5nLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlICAgICAqCisqICBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyB3aXRoIFlvdS4gICAgICAgICoKKyogIFNob3VsZCBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBwcm92ZSBkZWZlY3RpdmUgaW4gYW55IHJlc3BlY3QsIFlvdSAgICAgKgorKiAgKG5vdCBhbnkgQ29udHJpYnV0b3IpIGFzc3VtZSB0aGUgY29zdCBvZiBhbnkgbmVjZXNzYXJ5IHNlcnZpY2luZywgICAqCisqICByZXBhaXIsIG9yIGNvcnJlY3Rpb24uIFRoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBjb25zdGl0dXRlcyBhbiAgICoKKyogIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gdXNlIG9mIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGlzICAgKgorKiAgYXV0aG9yaXplZCB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4gICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgNy4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIHRvcnQgICAgICAqCisqICAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCBhbnkgICAgICAgICAgICoKKyogIENvbnRyaWJ1dG9yLCBvciBhbnlvbmUgd2hvIGRpc3RyaWJ1dGVzIENvdmVyZWQgU29mdHdhcmUgYXMgICAgICAgICAgKgorKiAgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8gWW91IGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgICAgICAgICAqCisqICBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciAgICAgICoKKyogIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3N0IHByb2ZpdHMsIGxvc3Mgb2YgICAgKgorKiAgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSAgICAqCisqICBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMsIGV2ZW4gaWYgc3VjaCBwYXJ0eSAgICAgICoKKyogIHNoYWxsIGhhdmUgYmVlbiBpbmZvcm1lZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBUaGlzICAgKgorKiAgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgICAqCisqICBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gc3VjaCBwYXJ0eSdzIG5lZ2xpZ2VuY2UgdG8gdGhlICAgICAgICoKKyogIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lICAgICAgICAgICAgICAgKgorKiAganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mICAgICAgICAgICAqCisqICBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kICAgICAgICAgICoKKyogIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOC4gTGl0aWdhdGlvbgorLS0tLS0tLS0tLS0tLQorCitBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUKK2NvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZSB0aGUgZGVmZW5kYW50IG1haW50YWlucyBpdHMgcHJpbmNpcGFsCitwbGFjZSBvZiBidXNpbmVzcyBhbmQgc3VjaCBsaXRpZ2F0aW9uIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGxhd3Mgb2YgdGhhdAoranVyaXNkaWN0aW9uLCB3aXRob3V0IHJlZmVyZW5jZSB0byBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitOb3RoaW5nIGluIHRoaXMgU2VjdGlvbiBzaGFsbCBwcmV2ZW50IGEgcGFydHkncyBhYmlsaXR5IHRvIGJyaW5nCitjcm9zcy1jbGFpbXMgb3IgY291bnRlci1jbGFpbXMuCisKKzkuIE1pc2NlbGxhbmVvdXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMKK3RoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIKK3NoYWxsIG5vdCBiZSB1c2VkIHRvIGNvbnN0cnVlIHRoaXMgTGljZW5zZSBhZ2FpbnN0IGEgQ29udHJpYnV0b3IuCisKKzEwLiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEwLjEuIE5ldyBWZXJzaW9ucworCitNb3ppbGxhIEZvdW5kYXRpb24gaXMgdGhlIGxpY2Vuc2Ugc3Rld2FyZC4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24KKzEwLjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgb3IKK3B1Ymxpc2ggbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzEwLjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMKKworWW91IG1heSBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbgorb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUsCitvciB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIGxpY2Vuc2UKK3N0ZXdhcmQuCisKKzEwLjMuIE1vZGlmaWVkIFZlcnNpb25zCisKK0lmIHlvdSBjcmVhdGUgc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3YW50IHRvCitjcmVhdGUgYSBuZXcgbGljZW5zZSBmb3Igc3VjaCBzb2Z0d2FyZSwgeW91IG1heSBjcmVhdGUgYW5kIHVzZSBhCittb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiB5b3UgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUKK2FueSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIHN0ZXdhcmQgKGV4Y2VwdCB0byBub3RlIHRoYXQKK3N1Y2ggbW9kaWZpZWQgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKS4KKworMTAuNC4gRGlzdHJpYnV0aW5nIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkKK0xpY2Vuc2VzCisKK0lmIFlvdSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgaXMgSW5jb21wYXRpYmxlIFdpdGgKK1NlY29uZGFyeSBMaWNlbnNlcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCB0aGUKK25vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBCIG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGF0dGFjaGVkLgorCitFeGhpYml0IEEgLSBTb3VyY2UgQ29kZSBGb3JtIExpY2Vuc2UgTm90aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisgIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCisKK0lmIGl0IGlzIG5vdCBwb3NzaWJsZSBvciBkZXNpcmFibGUgdG8gcHV0IHRoZSBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyCitmaWxlLCB0aGVuIFlvdSBtYXkgaW5jbHVkZSB0aGUgbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSBMSUNFTlNFCitmaWxlIGluIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vaworZm9yIHN1Y2ggYSBub3RpY2UuCisKK1lvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLgorCitFeGhpYml0IEIgLSAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIiBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIiwgYXMKKyAgZGVmaW5lZCBieSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTBkNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUEwKQEAgLTAsMCArMSwxOSBAQAorCitNaWNyb3NvZnQgUHVibGljIExpY2Vuc2UgKE1zLVBMKQorIAorCitUaGlzIGxpY2Vuc2UgZ292ZXJucyB1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGUgc29mdHdhcmUsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBJZiB5b3UgZG8gbm90IGFjY2VwdCB0aGUgbGljZW5zZSwgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgCisKK0RlZmluaXRpb25zCitUaGUgdGVybXMgInJlcHJvZHVjZSwiICJyZXByb2R1Y3Rpb24sIiAiZGVyaXZhdGl2ZSB3b3JrcywiIGFuZCAiZGlzdHJpYnV0aW9uIiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgaGVyZSBhcyB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcuIEEgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLiBBICJjb250cmlidXRvciIgaXMgYW55IHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGl0cyBjb250cmlidXRpb24gdW5kZXIgdGhpcyBsaWNlbnNlLiAiTGljZW5zZWQgcGF0ZW50cyIgYXJlIGEgY29udHJpYnV0b3JgcyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLgorR3JhbnQgb2YgUmlnaHRzCisoQSkgQ29weXJpZ2h0IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBpdHMgY29udHJpYnV0aW9uLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXRzIGNvbnRyaWJ1dGlvbiwgYW5kIGRpc3RyaWJ1dGUgaXRzIGNvbnRyaWJ1dGlvbiBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUuCisoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLgorQ29uZGl0aW9ucyBhbmQgTGltaXRhdGlvbnMKKyhBKSBObyBUcmFkZW1hcmsgTGljZW5zZS0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSByaWdodHMgdG8gdXNlIGFueSBjb250cmlidXRvcnNgIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MuIAorKEIpIElmIHlvdSBicmluZyBhIHBhdGVudCBjbGFpbSBhZ2FpbnN0IGFueSBjb250cmlidXRvciBvdmVyIHBhdGVudHMgdGhhdCB5b3UgY2xhaW0gYXJlIGluZnJpbmdlZCBieSB0aGUgc29mdHdhcmUsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZnJvbSBzdWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuIAorKEMpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgeW91IG11c3QgcmV0YWluIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBzb2Z0d2FyZS4gCisoRCkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHlvdSBtYXkgZG8gc28gb25seSB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgaW5jbHVkaW5nIGEgY29tcGxldGUgY29weSBvZiB0aGlzIGxpY2Vuc2Ugd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm0sIHlvdSBtYXkgb25seSBkbyBzbyB1bmRlciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyB3aXRoIHRoaXMgbGljZW5zZS4gCisoRSkgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkICJhcy1pcy4iIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUgY29udHJpYnV0b3JzIGdpdmUgbm8gZXhwcmVzcyB3YXJyYW50aWVzLCBndWFyYW50ZWVzLCBvciBjb25kaXRpb25zLiBZb3UgbWF5IGhhdmUgYWRkaXRpb25hbCBjb25zdW1lciByaWdodHMgdW5kZXIgeW91ciBsb2NhbCBsYXdzIHdoaWNoIHRoaXMgbGljZW5zZSBjYW5ub3QgY2hhbmdlLiBUbyB0aGUgZXh0ZW50IHBlcm1pdHRlZCB1bmRlciB5b3VyIGxvY2FsIGxhd3MsIHRoZSBjb250cmlidXRvcnMgZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwM2MwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVJMCkBAIC0wLDAgKzEsMjMgQEAKKworTWljcm9zb2Z0IFJlY2lwcm9jYWwgTGljZW5zZSAoTXMtUkwpCisgCisKK1RoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAKKworRGVmaW5pdGlvbnMKK1RoZSB0ZXJtcyAicmVwcm9kdWNlLCIgInJlcHJvZHVjdGlvbiwiICJkZXJpdmF0aXZlIHdvcmtzLCIgYW5kICJkaXN0cmlidXRpb24iIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4KK0EgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLiAKK0EgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIGxpY2Vuc2UuIAorIkxpY2Vuc2VkIHBhdGVudHMiIGFyZSBhIGNvbnRyaWJ1dG9yYHMgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkgb24gaXRzIGNvbnRyaWJ1dGlvbi4KK0dyYW50IG9mIFJpZ2h0cworKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLgorKEIpIFBhdGVudCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIGl0cyBsaWNlbnNlZCBwYXRlbnRzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgaXRzIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZS4KK0NvbmRpdGlvbnMgYW5kIExpbWl0YXRpb25zCisoQSkgUmVjaXByb2NhbCBHcmFudHMtIEZvciBhbnkgZmlsZSB5b3UgZGlzdHJpYnV0ZSB0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSB0aGUgc29mdHdhcmUgKGluIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBmb3JtYXQpLCB5b3UgbXVzdCBwcm92aWRlIHJlY2lwaWVudHMgdGhlIHNvdXJjZSBjb2RlIHRvIHRoYXQgZmlsZSBhbG9uZyB3aXRoIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UsIHdoaWNoIGxpY2Vuc2Ugd2lsbCBnb3Zlcm4gdGhhdCBmaWxlLiBZb3UgbWF5IGxpY2Vuc2Ugb3RoZXIgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgeW91ciBvd24gd29yayBhbmQgZG8gbm90IGNvbnRhaW4gY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSB1bmRlciBhbnkgdGVybXMgeW91IGNob29zZS4gCisoQikgTm8gVHJhZGVtYXJrIExpY2Vuc2UtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCB5b3UgcmlnaHRzIHRvIHVzZSBhbnkgY29udHJpYnV0b3JzYCBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLiAKKyhDKSBJZiB5b3UgYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBwYXRlbnRzIHRoYXQgeW91IGNsYWltIGFyZSBpbmZyaW5nZWQgYnkgdGhlIHNvZnR3YXJlLCB5b3VyIHBhdGVudCBsaWNlbnNlIGZyb20gc3VjaCBjb250cmlidXRvciB0byB0aGUgc29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5LiAKKyhEKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUsIHlvdSBtdXN0IHJldGFpbiBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc29mdHdhcmUuIAorKEUpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBzb3VyY2UgY29kZSBmb3JtLCB5b3UgbWF5IGRvIHNvIG9ubHkgdW5kZXIgdGhpcyBsaWNlbnNlIGJ5IGluY2x1ZGluZyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBsaWNlbnNlIHdpdGggeW91ciBkaXN0cmlidXRpb24uIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtLCB5b3UgbWF5IG9ubHkgZG8gc28gdW5kZXIgYSBsaWNlbnNlIHRoYXQgY29tcGxpZXMgd2l0aCB0aGlzIGxpY2Vuc2UuIAorKEYpIFRoZSBzb2Z0d2FyZSBpcyBsaWNlbnNlZCAiYXMtaXMuIiBZb3UgYmVhciB0aGUgcmlzayBvZiB1c2luZyBpdC4gVGhlIGNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcywgb3IgY29uZGl0aW9ucy4gWW91IG1heSBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgY2Fubm90IGNoYW5nZS4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgeW91ciBsb2NhbCBsYXdzLCB0aGUgY29udHJpYnV0b3JzIGV4Y2x1ZGUgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0Njc2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NaXJPUwpAQCAtMCwwICsxLDU4IEBACisKK01pck9TIExpY2Vuc2UKKworLyotCisqIENvcHlyaWdodCAmIzE2OTsgeWVhciwgeWVhciwgeWVhciwgJiM4MjMwOworKiBGaXJzdCBNLiBMYXN0IDx1c2VyQGhvc3QuZG9tYWluPgorKgorKiBQcm92aWRlZCB0aGF0IHRoZXNlIHRlcm1zIGFuZCBkaXNjbGFpbWVyIGFuZCBhbGwgY29weXJpZ2h0IG5vdGljZXMKKyogYXJlIHJldGFpbmVkIG9yIHJlcHJvZHVjZWQgaW4gYW4gYWNjb21wYW55aW5nIGRvY3VtZW50LCBwZXJtaXNzaW9uCisqIGlzIGdyYW50ZWQgdG8gZGVhbCBpbiB0aGlzIHdvcmsgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHVuJiM4MjA4OworKiBsaW1pdGVkIHJpZ2h0cyB0byB1c2UsIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwKKyogbWVyZ2UsIGdpdmUgYXdheSwgb3Igc3VibGljZW5jZS4KKyoKKyogVGhpcyB3b3JrIGlzIHByb3ZpZGVkICJBUyBJUyIgYW5kIFdJVEhPVVQgV0FSUkFOVFkgb2YgYW55IGtpbmQsIHRvCisqIHRoZSB1dG1vc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgbmVpdGhlciBleHByZXNzIG5vcgorKiBpbXBsaWVkOyB3aXRob3V0IG1hbGljaW91cyBpbnRlbnQgb3IgZ3Jvc3MgbmVnbGlnZW5jZS4gSW4gbm8gZXZlbnQKKyogbWF5IGEgbGljZW5zb3IsIGF1dGhvciBvciBjb250cmlidXRvciBiZSBoZWxkIGxpYWJsZSBmb3IgaW5kaXJlY3QsCisqIGRpcmVjdCwgb3RoZXIgZGFtYWdlLCBsb3NzLCBvciBvdGhlciBpc3N1ZXMgYXJpc2luZyBpbiBhbnkgd2F5IG91dAorKiBvZiBkZWFsaW5nIGluIHRoZSB3b3JrLCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2gKKyogZGFtYWdlIG9yIGV4aXN0ZW5jZSBvZiBhIGRlZmVjdCwgZXhjZXB0IHByb3ZlbiB0aGF0IGl0IHJlc3VsdHMgb3V0CisqIG9mIHNhaWQgcGVyc29uYHMgaW1tZWRpYXRlIGZhdWx0IHdoZW4gdXNpbmcgdGhlIHdvcmsgYXMgaW50ZW5kZWQuCisqLworCitJX05fU19UX1JfVV9DX1RfSV9PX05fU186XworVG8gYXBwbHkgdGhlIHRlbXBsYXRlKCYjMTg1Oykgc3BlY2lmeSB0aGUgeWVhcnMgb2YgY29weXJpZ2h0IChzZXBhcmF0ZWQgYnkKK2NvbW1hLCBub3QgYXMgYSByYW5nZSksIHRoZSBsZWdhbCBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMsIGFuZAordGhlIHJlYWwgbmFtZXMgb2YgdGhlIGF1dGhvcnMgaWYgZGlmZmVyZW50LiBBdm9pZCBhZGRpbmcgdGV4dC4KKworUl9BX1RfSV9PX05fQV9MX0VfOl8KK1RoaXMgbGljZW5jZSBpcyBhcHQgZm9yIGFueSBraW5kIG9mIHdvcmsgKHN1Y2ggYXMgc291cmNlIGNvZGUsIGZvbnRzLAorZG9jdW1lbnRhdGlvbiwgZ3JhcGhpY3MsIHNvdW5kIGV0Yy4pIGFuZCB0aGUgcHJlZmVycmVkIHRlcm1zIGZvciB3b3JrCithZGRlZCB0byBNaXJCU0QuIEl0IGhhcyBiZWVuIGRyYWZ0ZWQgYXMgdW5pdmVyc2FsbHkgdXNhYmxlIGVxdWl2YWxlbnQKK29mIHRoZSAiaGlzdG9yaWMgcGVybWlzc2lvbiBub3RpY2UiJiM4MzE3OyYjMTc4OyYjODMxODsgYWRhcHRlZCB0byBFdXJvcGVuIGxhdyBiZWNhdXNlCitpbiBzb21lIChkcm9pdCBkYGF1dGV1cikgY291bnRyaWVzIGF1dGhvcnMgY2Fubm90IGRpc2NsYWltIGFsbCBsaWFiaSYjODIwODsKK2xpdGllcy4gQ29tcGxpYW5jZSB0byBERlNHJiM4MzE3OyYjMTc5OyYjODMxODsgMS4xIGlzIGVuc3VyZWQsIGFuZCBHUEx2MiBjb21wYXRpYmlsaXR5CitpcyBhc3NlcnRlZCB1bmxlc3MgYWR2ZXJ0aXNpbmcgY2xhdXNlcyBhcmUgdXNlZC4gVGhlIE1pck9TIExpY2VuY2UgaXMKK2NlcnRpZmllZCB0byBjb25mb3JtIHRvIE9LRCYjODMxNzsmIzgzMDg7JiM4MzE4OyAxLjAgYW5kIE9TRCYjODMxNzsmIzgzMDk7JiM4MzE4OyAxLjksIGFuZCBxdWFsaWZpZXMgYXMgYQorRnJlZSBTb2Z0d2FyZSYjODMxNzsmIzgzMTA7JiM4MzE4OyBhbmQgYWxzbyBGcmVlIERvY3VtZW50YXRpb24mIzgzMTc7JiM4MzExOyYjODMxODsgbGljZW5jZSBhbmQgaXMgaW5jbHUmIzgyMDg7CitkZWQgaW4gc29tZSByZWxldmFudCBsaXN0cyYjODMxNzsmIzgzMTI7JiM4MzE4OyYjODMxNzsmIzgzMTM7JiM4MzE4OyYjODMxNzsmIzE4NTsmIzgzMDQ7JiM4MzE4Oy4KKworV2UgYmVsaWV2ZSB5b3UgYXJlIG5vdCBsaWFibGUgZm9yIHdvcmsgaW5zZXJ0ZWQgd2hpY2ggaXMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBvZiB0aGlyZCBwYXJ0aWVzLCBpZiB5b3Ugd2VyZSBub3QgYXdhcmUgb2YgdGhlIGZhY3QsIGFjdCBhcCYjODIwODsKK3Byb3ByaWF0ZWx5IGFzIHNvb24gYXMgeW91IGJlY29tZSBhd2FyZSBvZiB0aGF0IHByb2JsZW0sIHNlZWsgYW4gYW1pJiM4MjA4OworY2FibGUgc29sdXRpb24gZm9yIGFsbCBwYXJ0aWVzLCBhbmQgbmV2ZXIga25vd2luZ2x5IGRpc3RyaWJ1dGUgYSB3b3JrCit3aXRob3V0IGJlaW5nIGF1dGhvcmlzZWQgdG8gZG8gc28gYnkgaXRzIGxpY2Vuc29ycy4KKworUl9FX0ZfRV9SX0VfTl9DX0VfU186XworJiM5MzEyOyBhbHNvIGF0IGh0dHA6Ly9taXJic2QuZGUvTWlyT1MtTGljZW5jZQorJiM5MzEzOyBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2hpc3RvcmljYWwucGhwCismIzkzMTQ7IGh0dHA6Ly93d3cuZGViaWFuLm9yZy9zb2NpYWxfY29udHJhY3QjZ3VpZGVsaW5lcworJiM5MzE1OyBodHRwOi8vd3d3Lm9wZW5kZWZpbml0aW9uLm9yZy8xLjAKKyYjOTMxNjsgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9kb2NzL29zZAorJiM5MzE3OyBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWwKKyYjOTMxODsgaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvZnJlZS1kb2MuaHRtbAorJiM5MzE5OyBodHRwOi8vd3d3Lmlmcm9zcy5kZS9pZnJvc3NfaHRtbC9saXplbnpjZW50ZXIuaHRtbAorJiM5MzIwOyBodHRwOi8vd3d3Lm9wZW5kZWZpbml0aW9uLm9yZy9saWNlbnNlcworJiM5MzIxOyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWlyb3MuaHRtbAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290byBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNTI0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Nb3Rvc290bwpAQCAtMCwwICsxLDQyMiBAQAorCitNT1RPU09UTyBPUEVOIFNPVVJDRSBMSUNFTlNFIC0gVmVyc2lvbiAwLjkuMQorVGhpcyBNb3Rvc290byBPcGVuIFNvdXJjZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvICJDb21tdW5pdHkKK1BvcnRhbCBTZXJ2ZXIiIGFuZCByZWxhdGVkIHNvZnR3YXJlIHByb2R1Y3RzIGFzIHdlbGwgYXMgYW55IHVwZGF0ZXNvcgorbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhhdCBzb2Z0d2FyZSAoIk1vdG9zb3RvIFByb2R1Y3RzIikgdGhhdCBhcmUKK2Rpc3RyaWJ1dGVkIGJ5IE1vdG9zb3RvLkNvbSBCLlYuICgiTGljZW5zb3IiKS4gQW55IE1vdG9zb3RvCitQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBpcyBhICJMaWNlbnNlZCBQcm9kdWN0LiIgTGljZW5zZWQKK1Byb2R1Y3QsIGluIGl0cyBlbnRpcmV0eSwgaXMgcHJvdGVjdGVkIGJ5IER1dGNoIGNvcHlyaWdodCBsYXcuCitUaGlzCitMaWNlbnNlIGlkZW50aWZpZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIHlvdSBtYXkgdXNlLCBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeQorTGljZW5zZWQgUHJvZHVjdCBhbmQgaGFzIGJlZW4gc3VibWl0dGVkIHRvIHRoZSBPcGVuIFNvZnR3YXJlIEluaXRpYXRpdmUgKE9TSSkKK2ZvciBhcHByb3ZhbC4KKworUHJlYW1ibGUKKworVGhpcyBQcmVhbWJsZSBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSwgaW4gcGxhaW4gRW5nbGlzaCwgdGhlIG5hdHVyZSBhbmQgc2NvcGUgb2YKK3RoaXMgTGljZW5zZS4gSG93ZXZlciwgdGhpcyBQcmVhbWJsZSBpcyBub3QgYSBwYXJ0IG9mIHRoaXMgbGljZW5zZS4gVGhlIGxlZ2FsCitlZmZlY3Qgb2YgdGhpcyBMaWNlbnNlIGlzIGRlcGVuZGVudCBvbmx5IHVwb24gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGFuZCBub3QKK3RoaXMgUHJlYW1ibGUuCitUaGlzIExpY2Vuc2UgY29tcGxpZXMgd2l0aCB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhbmQgaGFzIGJlZW4gYXBwcm92ZWQgYnkKK09wZW4gU291cmNlIEluaXRpYXRpdmUuIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYmUgbWFya2VkCithcyAiT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4iCisKK1RoaXMgTGljZW5zZSBwcm92aWRlcyB0aGF0OgorCisxLiBZb3UgbWF5IHVzZSwgc2VsbCBvciBnaXZlIGF3YXkgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFsb25lIG9yIGFzIGEKK2NvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcKK3Byb2dyYW1zIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgc291cmNlcy4gTm8gcm95YWx0eSBvciBvdGhlciBmZWUgaXMKK3JlcXVpcmVkLgorCisyLiBCb3RoIFNvdXJjZSBDb2RlIGFuZCBleGVjdXRhYmxlIHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LAoraW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBwcmV2aW91cyBDb250cmlidXRvcnMsIGFyZQorYXZhaWxhYmxlIGZvciB5b3VyIHVzZS4gKFRoZSB0ZXJtcyAiTGljZW5zZWQgUHJvZHVjdCwiICJNb2RpZmljYXRpb25zLCIKKyJDb250cmlidXRvcnMiIGFuZCAiU291cmNlIENvZGUiIGFyZSBkZWZpbmVkIGluIHRoZSBMaWNlbnNlLikKKworMy4gWW91IGFyZSBhbGxvd2VkIHRvIG1ha2UgTW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIHlvdQorY2FuIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGZyb20gaXQuIChUaGUgdGVybSAiRGVyaXZhdGl2ZQorV29ya3MiIGlzIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKQorCis0LiBCeSBhY2NlcHRpbmcgdGhlIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlLAoreW91IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMgeW91IG1ha2UgdG8gdGhlIExpY2Vuc2VkCitQcm9kdWN0IGFuZCB0aGVuIGRpc3RyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSBwcm92aXNpb25zIG9mIHRoaXMKK0xpY2Vuc2UuIEluIHBhcnRpY3VsYXIsIHlvdSBtdXN0IG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mIHlvdXIKK01vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIG90aGVycy4KKworNS4gWW91IG1heSB1c2UgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZm9yIGFueSBwdXJwb3NlLCBidXQgdGhlIExpY2Vuc29yIGlzCitub3QgcHJvdmlkaW5nIHlvdSBhbnkgd2FycmFudHkgd2hhdHNvZXZlciwgbm9yIGlzIHRoZSBMaWNlbnNvcgorYWNjZXB0aW5nIGFueSBsaWFiaWxpdHkgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZG9lc25gdAord29yayBwcm9wZXJseSBvciBjYXVzZXMgeW91IGFueSBpbmp1cnkgb3IgZGFtYWdlcy4KKworNi4gSWYgeW91IHN1YmxpY2Vuc2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgRGVyaXZhdGl2ZSBXb3JrcywgeW91IG1heQorY2hhcmdlIGZlZXMgZm9yIHdhcnJhbnR5IG9yIHN1cHBvcnQsIG9yIGZvciBhY2NlcHRpbmcgaW5kZW1uaXR5CitvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8geW91ciBjdXN0b21lcnMuIFlvdSBjYW5ub3QgY2hhcmdlIGZvciB0aGUKK1NvdXJjZSBDb2RlLgorCis3LiBJZiB5b3UgYXNzZXJ0IGFueSBwYXRlbnQgY2xhaW1zIGFnYWluc3QgdGhlIExpY2Vuc29yIHJlbGF0aW5nIHRvIHRoZQorTGljZW5zZWQgUHJvZHVjdCwgb3IgaWYgeW91IGJyZWFjaCBhbnkgdGVybXMgb2YgdGhlIExpY2Vuc2UsIHlvdXIKK3JpZ2h0cyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseQordGVybWluYXRlLgorCitZb3UgbWF5IHVzZSB0aGlzIExpY2Vuc2UgdG8gZGlzdHJpYnV0ZSB5b3VyIG93biBEZXJpdmF0aXZlIFdvcmtzLCBpbiB3aGljaAorY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBhcHBseSB0byB5b3VyIERlcml2YXRpdmUKK1dvcmtzIGp1c3QgYXMgdGhleSBkbyB0byB0aGUgb3JpZ2luYWwgTGljZW5zZWQgUHJvZHVjdC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBkaXN0cmlidXRlIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyB1bmRlciBhbnkgb3RoZXIKK09TSS1hcHByb3ZlZCBPcGVuIFNvdXJjZSBsaWNlbnNlLCBvciB1bmRlciBhIHByb3ByaWV0YXJ5IGxpY2Vuc2Ugb2YKK3lvdXIgY2hvaWNlLiBJZiB5b3UgdXNlIGFueSBsaWNlbnNlIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlLCBob3dldmVyLCB5b3UgbXVzdAorY29udGludWUgdG8gZnVsZmlsbCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHRoZQorcHJvdmlzaW9ucyByZWxhdGluZyB0byBwdWJsaXNoaW5nIHRoZSBTb3VyY2UgQ29kZSkgZm9yIHRob3NlIHBvcnRpb25zIG9mIHlvdXIKK0Rlcml2YXRpdmUgV29ya3MgdGhhdCBjb25zaXN0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcKK3RoZSBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMuCisKK05ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgbWF5IGJlIHB1Ymxpc2hlZCBmcm9tIHRpbWUgdG8gdGltZS4gWW91IG1heQorY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSB0aGUgbGljZW5zZSB0ZXJtcyBpbiB0aGlzIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlIG9yIHRob3NlIGZyb20gdGhlIG5ldyB2ZXJzaW9uLiBIb3dldmVyLCBvbmx5IHRoZSBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0Cit0byBjaGFuZ2UgdGhlIExpY2Vuc2UgdGVybXMgYXMgdGhleSBhcHBseSB0byB0aGUgTGljZW5zZWQKK1Byb2R1Y3QuCitUaGlzIExpY2Vuc2UgcmVsaWVzIG9uIHByZWNpc2UgZGVmaW5pdGlvbnMgZm9yIGNlcnRhaW4gdGVybXMuIFRob3NlIHRlcm1zIGFyZQorZGVmaW5lZCB3aGVuIHRoZXkgYXJlIGZpcnN0IHVzZWQsIGFuZCB0aGUgZGVmaW5pdGlvbnMgYXJlIHJlcGVhdGVkIGZvcgoreW91ciBjb252ZW5pZW5jZSBpbiBhIEdsb3NzYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIExpY2Vuc2UuCisKK0xpY2Vuc2UgVGVybXMKKworMS4gR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLgorCitMaWNlbnNvcgoraGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0bwordGhpcmQKK3BhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiAoaW5jbHVkaW5nCitNb2RpZmljYXRpb25zIGFzIGhlcmVpbmFmdGVyIGRlZmluZWQpLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzCithbiBleGVjdXRhYmxlIHByb2dyYW0uICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZAorZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZworYWxsIG1vZHVsZXMgY29udGFpbmVkIHRoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIHByb2dyYW0sIG9yIGEgbGlzdCBvZgorZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdC4KKworYi4gQ3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIHVuZGVyIER1dGNoCitjb3B5cmlnaHQgbGF3KSBvZiBMaWNlbnNlZCBQcm9kdWN0IGJ5IGFkZGluZyB0byBvciBkZWxldGluZworZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3QuCisKK2MuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZAorYnkgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwKK2FuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2YsCitidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisyLiBHcmFudCBvZiBMaWNlbnNlIHRvIE1vZGlmaWNhdGlvbnMgRnJvbQorQ29udHJpYnV0b3IuCisKKyJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb25zIHRvIG9yCitkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBjb250YWluaW5nIExpY2Vuc2VkIFByb2R1Y3QsIG9yIChpaSkgYW55IG5ldyBmaWxlCit0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhlcmVpbmFmdGVyIGluIHRoaXMKK0xpY2Vuc2UsIHRoZSB0ZXJtICJMaWNlbnNlZCBQcm9kdWN0IiBzaGFsbCBpbmNsdWRlIGFsbCBwcmV2aW91cworTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSByZWNlaXZlIGZyb20gYW55IENvbnRyaWJ1dG9yLiBCeQorYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA0KGEpIGJlbG93LCBlYWNoIHBlcnNvbiBvcgorZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZSBjcmVhdGlvbiBvZiwgYW5kIGRpc3RyaWJ1dGVkLAorYSBNb2RpZmljYXRpb24gKGEgIkNvbnRyaWJ1dG9yIikgaGVyZWJ5IGdyYW50cyB5b3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIGFueSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciBvcgorcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UgQ29kZSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sCitlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcyBwYXJ0IG9mIERlcml2YXRpdmUKK1dvcmtzLgorCitiLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKK0NvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsCithbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQKK3NvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgeW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yCitvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2Ygb3IKK0Rlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworMy4gRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuCisKK05vdGhpbmcgaW4KK3RoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLAorcGF0ZW50cywKK3RyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkKK0NvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgZm9yIGNvZGUgdGhhdCB5b3UgZGVsZXRlIGZyb20KK3RoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBmb3IgY29tYmluYXRpb25zIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZQordHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZQoraW5jbHVkZWQgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQKK3Rlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYQorcmlnaHQgdG8gbGljZW5zZS4KKworNC4gWW91ciBPYmxpZ2F0aW9ucyBSZWdhcmRpbmcgRGlzdHJpYnV0aW9uLgorCithLiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UgdG8gWW91cgorTW9kaWZpY2F0aW9ucy4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCwgeW91CitoZXJlYnkgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2gKK3lvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91IGRpc3RyaWJ1dGUsIGFyZSBnb3Zlcm5lZCBieSB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiAyLgorQW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlCittYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEKK2Z1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDcuIFlvdSBtdXN0CitpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZQorTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZS4gWW91IGFncmVlIG5vdCB0byBvZmZlciBvciBpbXBvc2UgYW55Cit0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgb3IgZXhlY3V0YWJsZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIGFwcGxpY2FibGUKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLgorSG93ZXZlciwgeW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlCithZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGUpLgorCitiLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UKK2F2YWlsYWJsZSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBhbmQgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgZWl0aGVyIG9uIHRoZQorc2FtZSBtZWRpYSBhcyB5b3UgZGlzdHJpYnV0ZSBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtCitvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgdmlhIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbgordGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEgKGFuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iKS4gVGhlCitTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gb2YgTGljZW5zZWQgUHJvZHVjdCBvcgorTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQKK2xlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lCithdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uCitvZiBzYWlkIExpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlCit2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCitjLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbnkKK01vZGlmaWNhdGlvbnMgdGhhdCB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2gKK3lvdSBkaXN0cmlidXRlLCB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgYWRkaXRpb25zLAorY2hhbmdlcyBvciBkZWxldGlvbnMgeW91IG1hZGUgdG8gY3JlYXRlIG9yIGNvbnRyaWJ1dGUgdG8gdGhvc2UKK01vZGlmaWNhdGlvbnMsIGFuZCB0aGUgZGF0ZXMgb2YgYW55IHN1Y2ggYWRkaXRpb25zLCBjaGFuZ2VzIG9yCitkZWxldGlvbnMuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlCitNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHRoZQorTGljZW5zZWQgUHJvZHVjdCBhbmQgaW5jbHVkZSB0aGUgbmFtZXMgb2YgdGhlIExpY2Vuc29yIGFuZCBhbnkKK0NvbnRyaWJ1dG9yIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGluIChpKSB0aGUgU291cmNlIENvZGUgYW5kCisoaWkpIGluIGFueSBub3RpY2UgZGlzcGxheWVkIGJ5IGEgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQKK1Byb2R1Y3QgeW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIHlvdQorZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuCitZb3UgbWF5IG5vdCBtb2RpZnkgb3IgZGVsZXRlIGFueSBwcmVleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBpbgordGhlIExpY2Vuc2VkIFByb2R1Y3QuCisKK2QuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCitpLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIHlvdSBoYXZlCitrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdG8gYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpcworcmVxdWlyZWQKK3RvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UsIHlvdSBtdXN0CitpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQKKyJMRUdBTCIgdGhhdCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZQorY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cKK3dob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciB5b3UgbWFrZQorYW55IE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uCis0KGIpLCB5b3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMKK3lvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyCitzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvcgorbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8KK3JlY2VpdmVkIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGZyb20geW91IHRoYXQgbmV3IGtub3dsZWRnZQoraGFzIGJlZW4gb2J0YWluZWQuCisKK2lpLiBDb250cmlidXRvciBBUElzLiBJZiB5b3VyCitNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlICgiQVBJIikgYW5kIHlvdSBoYXZlCitrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHRoYXQgYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzCitpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworaWlpLiBSZXByZXNlbnRhdGlvbnMuIFlvdSByZXByZXNlbnQgdGhhdCwKK2V4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNChkKShpKSBhYm92ZSwgeW91IGJlbGlldmUgdGhhdCBhbnkKK01vZGlmaWNhdGlvbnMgeW91IGRpc3RyaWJ1dGUgYXJlIHlvdXIgb3JpZ2luYWwgY3JlYXRpb25zIGFuZAordGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzCitjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKK2UuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzCitMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIHlvdSBwcm92aWRlIGFsb25nIHdpdGggdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorTW9kaWZpY2F0aW9ucyB5b3UgY3JlYXRlIG9yIHRvIHdoaWNoIHlvdSBjb250cmlidXRlLCBhbmQgd2hpY2ggeW91CitkaXN0cmlidXRlLCB3aGVyZXZlciB5b3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzCityZWxhdGluZyB0byBMaWNlbnNlZCBQcm9kdWN0LiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZQorY29udGFpbmVkIGluIEV4aGliaXQgQSAodGhlICJOb3RpY2UiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZQorQ29kZSBvZiBhbnkgY29weSB5b3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gSWYgeW91CitjcmVhdGVkIGEgTW9kaWZpY2F0aW9uLCB5b3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYQorQ29udHJpYnV0b3IgdG8gdGhlIE5vdGljZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgTm90aWNlCitpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbgoreW91IG11c3QgaW5jbHVkZSBzdWNoIE5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQKK2RpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZQorcmVjaXBpZW50cyBvZiBMaWNlbnNlZCBQcm9kdWN0LiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24KK3lvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IHlvdQorYWxvbmUsIGFuZCB5b3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaAorQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IHRlcm1zIHlvdSBvZmZlci4KKworZi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIFlvdSBtYXkKK2Rpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0gdW5kZXIgYSBsaWNlbnNlIG9mCit5b3VyIGNob2ljZSB0aGF0IG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZQorcHJvdmlkZWQgKGkpIHlvdSBoYXZlIHNhdGlzZmllZCB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zCis0KGEpIHRocm91Z2ggNChlKSBmb3IgdGhhdCBkaXN0cmlidXRpb24sIChpaSkgeW91IGluY2x1ZGUgYQorY29uc3BpY3VvdXMgbm90aWNlIGluIHRoZSBleGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgorYW5kIGNvbGxhdGVyYWwgbWF0ZXJpYWxzIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIHlvdSBoYXZlCitmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gNChiKSwgKGlpaSkgeW91IHJldGFpbiBhbGwKK2V4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbmQgKGl2KSB5b3UKK21ha2UgaXQgY2xlYXIgdGhhdCBhbnkgdGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlCitvZmZlcmVkIGJ5IHlvdSBhbG9uZSwgbm90IGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4gWW91CitoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IKK2ZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IExpY2Vuc29yIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYQorcmVzdWx0IG9mIGFueSB0ZXJtcyB5b3Ugb2ZmZXIuCisKK2cuIERpc3RyaWJ1dGlvbiBvZiBEZXJpdmF0aXZlIFdvcmtzLiBZb3UgbWF5CitjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoZS5nLiwgY29tYmluYXRpb25zIG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB3aXRoIG90aGVyIGNvZGUpIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmtzIGFzCitwcm9kdWN0cyB1bmRlciBhbnkgb3RoZXIgbGljZW5zZSB5b3Ugc2VsZWN0LCB3aXRoIHRoZQorcHJvdmlzbyB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yCit0aG9zZSBwb3J0aW9ucyBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlCitMaWNlbnNlZCBQcm9kdWN0IG9yIGFueSBNb2RpZmljYXRpb25zIHRoZXJldG8uCisKKzUuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IKK1JlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIHlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aAorcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwKK29yZGVyLCBvciByZWd1bGF0aW9uLCB0aGVuIHlvdSBtdXN0IChpKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIChpaSkgY2l0ZSB0aGUgc3RhdHV0ZSBvcgorcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgTGljZW5zZSwgYW5kCisoaWlpKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZCksCithbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvCit0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoCitkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkKK3NraWxsIGF0IGNvbXB1dGVyIHByb2dyYW1taW5nIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNi4gQXBwbGljYXRpb24gb2YgVGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UKK2FwcGxpZXMgdG8gY29kZSB0byB3aGljaCBMaWNlbnNvciBvciBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIE5vdGljZSBpbgorRXhoaWJpdCBBLAord2hpY2ggaXMgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSB0aGlzIHJlZmVyZW5jZS4KKworNy4gVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLgorCithLiBWZXJzaW9uLiBUaGUgTW90b3NvdG8gT3BlbiBTb3VyY2UgTGljZW5zZSBpcworZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZS4gQWxsIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8KK2FwcGxpY2FibGUgbGF3IGFuZCB0aGUgbG9jYXRpb24gb2YgY291cnQuCisKK2IuIE5ldyBWZXJzaW9ucy4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggZnJvbSB0aW1lIHRvCit0aW1lIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworYy4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBMaWNlbnNlZCBQcm9kdWN0CitoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzCitjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGUgdGVybXMgb2YgYW55CitzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObyBvbmUKK290aGVyIHRoYW4gTGljIGVuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcworYXBwbGljYWJsZSB0byBMaWNlbnNlZCBQcm9kdWN0IGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitkLiBEZXJpdmF0aXZlIFdvcmtzIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91CitjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIHlvdSBtYXkgZG8gb25seSBpbgorb3JkZXIgdG8KK2FwcGx5IGl0IHRvIHNvZnR3YXJlIHRoYXQgaXMgbm90IGFscmVhZHkgYSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyCit0aGlzIExpY2Vuc2UsIHlvdSBtdXN0IHJlbmFtZSB5b3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QKK2NvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQKK3lvdXIgbGljZW5zZSBjb250YWlucyB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4gSW4KK3NvIG5hbWluZyB5b3VyIGxpY2Vuc2UsIHlvdSBtYXkgbm90IHVzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yCitvciBhbnkgQ29udHJpYnV0b3IuCisKKzguIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK0xJQ0VOU0VEIFBST0RVQ1QgSVMKK1BST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTCitUSEFUIFRIRSBMSUNFTlNFRCBQUk9EVUNUIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUNFTlNFRCBQUk9EVUNUIElTCitXSVRIIFlPVS4gU0hPVUxEIExJQ0VOU0VEIFBST0RVQ1QgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UKKyhBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUgorQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUgorT1IgQ09SUkVDVElPTi4gVEhJUworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PCitVU0UgT0YgTElDRU5TRUQKK1BST0RVQ1QgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOS4gVGVybWluYXRpb24uCisKK2EuIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcworbGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHlvdQorZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2gKK3dpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guCitBbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgdGhhdCBhcmUgcHJvcGVybHkgZ3JhbnRlZAorc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlLiBQcm92aXNpb25zCit0aGF0LCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlCit0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHNoYWxsIHN1cnZpdmUuCisKK2IuIFRlcm1pbmF0aW9uIFVwb24gQXNzZXJ0aW9uIG9mIFBhdGVudAorSW5mcmluZ2VtZW50LiBJZiB5b3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEKK0NvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20geW91IGZpbGUKK3N1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAiUmVzcG9uZGVudCIpIGFsbGVnaW5nCit0aGF0IExpY2Vuc2VkIFByb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIHlvdQordW5kZXIgU2VjdGlvbnMgMSBvciAyIG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUKK3Byb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlIGZyb20gUmVzcG9uZGVudCAodGhlCisiTm90aWNlIFBlcmlvZCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIHlvdQorZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlCityZWFzb25hYmx5IHJveWFsdHkgZm9yIHlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkCitQcm9kdWN0IG1hZGUgYnkgc3VjaCBSZXNwb25kZW50LCBvciAoaWkpIHdpdGhkcmF3IHlvdXIgbGl0aWdhdGlvbgorY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkIFByb2R1Y3QgYWdhaW5zdCBzdWNoCitSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZAorcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluCit3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgTGljZW5zb3IgdG8geW91IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHNhaWQgTm90aWNlCitQZXJpb2QuCisKK2MuIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiBJZiB5b3UgYXNzZXJ0IGEKK3BhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nIHRoYXQgTGljZW5zZWQKK1Byb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoCitjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlCityZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHNhaWQgUmVzcG9uZGVudCB1bmRlcgorU2VjdGlvbnMgMSBhbmQgMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlCithbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworZC4gTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUKK2V2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDkoYSkgb3IgOShiKSBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UKK2FncmVlbWVudHMgKGV4Y2x1ZGluZyBsaWNlbnNlcyB0byBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGUgcnMpCit0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgeW91IG9yIGFueSBkaXN0cmlidXRvcgoraGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUKK3Rlcm1pbmF0aW9uLgorCisxMC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1VOREVSIE5PCitDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIExJQ0VOU09SLCBBTlkKK0NPTlRSSUJVVE9SLCBPUiBBTlkKK0RJU1RSSUJVVE9SIE9GIExJQ0VOU0VEIFBST0RVQ1QsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLAorQkUgTElBQkxFIFRPIEFOWSBQRVJTT04KK0ZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSCitGQUlMVVJFIE9SCitNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRgorU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVAorQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSAorUEFSVFkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL011bHRpY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NzY0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL011bHRpY3MKQEAgLTAsMCArMSw0MCBAQAorCitNdWx0aWNzIExpY2Vuc2UKKworSGlzdG9yaWNhbCBCYWNrZ3JvdW5kCisKK1RoaXMgZWRpdGlvbiBvZiB0aGUgTXVsdGljcyBzb2Z0d2FyZSBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gaXMKK3Byb3ZpZGVkIGFuZCBkb25hdGVkIHRvIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgYnkgR3JvdXAKK0JVTEwgaW5jbHVkaW5nIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuIGFzIGEgY29udHJpYnV0aW9uIHRvCitjb21wdXRlciBzY2llbmNlIGtub3dsZWRnZS4gVGhpcyBkb25hdGlvbiBpcyBtYWRlIGFsc28gdG8gZ2l2ZSBldmlkZW5jZQorb2YgdGhlIGNvbW1vbiBjb250cmlidXRpb25zIG9mIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksCitCZWxsIExhYm9yYXRvcmllcywgR2VuZXJhbCBFbGVjdHJpYywgSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMKK0luYy4sIEhvbmV5d2VsbCBCVUxMIEluYy4sIEdyb3VwZSBCVUxMIGFuZCBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMKK0luYy4gdG8gdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgb3BlcmF0aW5nIHN5c3RlbS4gTXVsdGljcyBkZXZlbG9wbWVudAord2FzIGluaXRpYXRlZCBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IFByb2plY3QgTUFDCisoMTk2My0xOTcwKSwgcmVuYW1lZCB0aGUgTUlUIExhYm9yYXRvcnkgZm9yIENvbXB1dGVyIFNjaWVuY2UgYW5kCitBcnRpZmljaWFsIEludGVsbGlnZW5jZSBpbiB0aGUgbWlkIDE5NzBzLCB1bmRlciB0aGUgbGVhZGVyc2hpcCBvZgorUHJvZmVzc29yIEZlcm5hbmRvIEpvc2UgQ29yYmF0by4gVXNlcnMgY29uc2lkZXIgdGhhdCBNdWx0aWNzIHByb3ZpZGVkIHRoZQorYmVzdCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUgZm9yIG1hbmFnaW5nIGNvbXB1dGVyIGhhcmR3YXJlIHByb3Blcmx5IGFuZAorZm9yIGV4ZWN1dGluZyBwcm9ncmFtcy4gTWFueSBzdWJzZXF1ZW50IG9wZXJhdGluZyBzeXN0ZW1zIGluY29ycG9yYXRlZAorTXVsdGljcyBwcmluY2lwbGVzLiBNdWx0aWNzIHdhcyBkaXN0cmlidXRlZCBpbiAxOTc1IHRvIDIwMDAgYnkgR3JvdXAKK0J1bGwgaW4gRXVyb3BlICwgYW5kIGluIHRoZSBVLlMuIGJ5IEJ1bGwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcyBJbmMuLCBhcworc3VjY2Vzc29yIGluIGludGVyZXN0IGJ5IGNoYW5nZSBpbiBuYW1lIG9ubHkgdG8gSG9uZXl3ZWxsIEJ1bGwgSW5jLiBhbmQKK0hvbmV5d2VsbCBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4gLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGVzZSBwcm9ncmFtcyBhbmQgdGhlaXIKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCxwcm92aWRlZAordGhhdCB0aGUgYmVsb3cgY29weXJpZ2h0IG5vdGljZSBhbmQgaGlzdG9yaWNhbCBiYWNrZ3JvdW5kIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBoaXN0b3JpY2FsIGJhY2tncm91bmQgYW5kCit0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0Cit0aGUgbmFtZXMgb2YgTUlULCBISVMsIEJVTEwgb3IgQlVMTCBITiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtcyB3aXRob3V0IHNwZWNpZmljCitwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitDb3B5cmlnaHQgMTk3MiBieSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5IGFuZCBIb25leXdlbGwgSW5mb3JtYXRpb24KK1N5c3RlbXMgSW5jLgorQ29weXJpZ2h0IDIwMDYgYnkgQlVMTCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4KK0NvcHlyaWdodCAyMDA2IGJ5IEJ1bGwgU0FTCitBbGwgUmlnaHRzIFJlc2VydmVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzMTgyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05BU0EtMS4zCkBAIC0wLDAgKzEsNzkgQEAKKworQVNBIE9QRU4gU09VUkNFIEFHUkVFTUVOVCBWRVJTSU9OIDEuMworCitUSElTIE9QRU4gU09VUkNFIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpIERFRklORVMgVEhFIFJJR0hUUyBPRiBVU0UsIFJFUFJPRFVDVElPTiwgRElTVFJJQlVUSU9OLCBNT0RJRklDQVRJT04gQU5EIFJFRElTVFJJQlVUSU9OIE9GIENFUlRBSU4gQ09NUFVURVIgU09GVFdBUkUgT1JJR0lOQUxMWSBSRUxFQVNFRCBCWSBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5UIEFTIFJFUFJFU0VOVEVEIEJZIFRIRSBHT1ZFUk5NRU5UIEFHRU5DWSBMSVNURUQgQkVMT1cgKCJHT1ZFUk5NRU5UIEFHRU5DWSIpLiBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBBUyBSRVBSRVNFTlRFRCBCWSBHT1ZFUk5NRU5UIEFHRU5DWSwgSVMgQU4gSU5URU5ERUQgVEhJUkQtUEFSVFkgQkVORUZJQ0lBUlkgT0YgQUxMIFNVQlNFUVVFTlQgRElTVFJJQlVUSU9OUyBPUiBSRURJU1RSSUJVVElPTlMgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuIEFOWU9ORSBXSE8gVVNFUywgUkVQUk9EVUNFUywgRElTVFJJQlVURVMsIE1PRElGSUVTIE9SIFJFRElTVFJJQlVURVMgVEhFIFNVQkpFQ1QgU09GVFdBUkUsIEFTIERFRklORUQgSEVSRUlOLCBPUiBBTlkgUEFSVCBUSEVSRU9GLCBJUywgQlkgVEhBVCBBQ1RJT04sIEFDQ0VQVElORyBJTiBGVUxMIFRIRSBSRVNQT05TSUJJTElUSUVTIEFORCBPQkxJR0FUSU9OUyBDT05UQUlORUQgSU4gVEhJUyBBR1JFRU1FTlQuCisKK0dvdmVybm1lbnQgQWdlbmN5OiBfX19fXyBHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBEZXNpZ25hdGlvbjogX18gR292ZXJubWVudCBBZ2VuY3kgT3JpZ2luYWwgU29mdHdhcmUgVGl0bGU6IF9fX19fIFVzZXIgUmVnaXN0cmF0aW9uIFJlcXVlc3RlZC4gUGxlYXNlIFZpc2l0IGh0dHA6Ly9fX18gR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBmb3IgT3JpZ2luYWwgU29mdHdhcmU6IF9fX19fCisKK0RFRklOSVRJT05TCitBLiAiQ29udHJpYnV0b3IiIG1lYW5zIEdvdmVybm1lbnQgQWdlbmN5LCBhcyB0aGUgZGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgYW5kIGFueSBlbnRpdHkgdGhhdCBtYWtlcyBhIE1vZGlmaWNhdGlvbi4gQi4gIkNvdmVyZWQgUGF0ZW50cyIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBNb2RpZmljYXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBDLiAiRGlzcGxheSIgbWVhbnMgdGhlIHNob3dpbmcgb2YgYSBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlaXRoZXIgZGlyZWN0bHkgb3IgYnkgbWVhbnMgb2YgYW4gaW1hZ2UsIG9yIGFueSBvdGhlciBkZXZpY2UuIEQuICJEaXN0cmlidXRpb24iIG1lYW5zIGNvbnZleWFuY2Ugb3IgdHJhbnNmZXIgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIHJlZ2FyZGxlc3Mgb2YgbWVhbnMsIHRvIGFub3RoZXIuIEUuICJMYXJnZXIgV29yayIgbWVhbnMgY29tcHV0ZXIgc29mdHdhcmUgdGhhdCBjb21iaW5lcyBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB3aXRoIHNvZnR3YXJlIHNlcGFyYXRlIGZyb20gdGhlIFN1YmplY3QgU29mdHdhcmUgdGhhdCBpcyBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBGLiAiTW9kaWZpY2F0aW9uIiBtZWFucyBhbnkgYWx0ZXJhdGlvbiBvZiwgaW5jbHVkaW5nIGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20sIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgU3ViamVjdCBTb2Z0d2FyZSwgYW5kIGluY2x1ZGVzIGRlcml2YXRpdmUgd29ya3MsIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIHRoZSBDb3B5cmlnaHQgU3RhdHV0ZSwgMTcgVVNDIDEwMS4gSG93ZXZlciwgdGhlIGFjdCBvZiBpbmNsdWRpbmcgU3ViamVjdCBTb2Z0d2FyZSBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsgZG9lcyBub3QgaW4gYW5kIG9mIGl0c2VsZiBjb25zdGl0dXRlIGEgTW9kaWZpY2F0aW9uLiBHLiAiT3JpZ2luYWwgU29mdHdhcmUiIG1lYW5zIHRoZSBjb21wdXRlciBzb2Z0d2FyZSBmaXJzdCByZWxlYXNlZCB1bmRlciB0aGlzIEFncmVlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGRlc2lnbmF0aW9uIF9fIGFuZCBlbnRpdGxlZCBfX19fX19fX18sIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBpZiBhbnkuIEguICJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gYWNxdWlyZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLiBJLiAiUmVkaXN0cmlidXRpb24iIG1lYW5zIERpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhZnRlciBhIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLiBKLiAiUmVwcm9kdWN0aW9uIiBtZWFucyB0aGUgbWFraW5nIG9mIGEgY291bnRlcnBhcnQsIGltYWdlIG9yIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEsuICJTYWxlIiBtZWFucyB0aGUgZXhjaGFuZ2Ugb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgZm9yIG1vbmV5IG9yIGVxdWl2YWxlbnQgdmFsdWUuIEwuICJTdWJqZWN0IFNvZnR3YXJlIiBtZWFucyB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueSByZXNwZWN0aXZlIHBhcnRzIHRoZXJlb2YuIE0uICJVc2UiIG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBvciBlbXBsb3ltZW50IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4KKworR1JBTlQgT0YgUklHSFRTCitBLiBVbmRlciBOb24tUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUgZm9sbG93aW5nIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworVXNlCitEaXN0cmlidXRpb24KK1JlcHJvZHVjdGlvbgorTW9kaWZpY2F0aW9uCitSZWRpc3RyaWJ1dGlvbgorRGlzcGxheQorQi4gVW5kZXIgUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IsIHdpdGggcmVzcGVjdCB0byBpdHMgb3duIGNvbnRyaWJ1dGlvbiB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaGVyZWJ5IGdyYW50cyB0byBlYWNoIFJlY2lwaWVudCB1bmRlciBDb3ZlcmVkIFBhdGVudHMgYSBub24tZXhjbHVzaXZlLCB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBlbmdhZ2UgaW4gdGhlIGZvbGxvd2luZyBhY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1VzZQorRGlzdHJpYnV0aW9uCitSZXByb2R1Y3Rpb24KK1NhbGUKK09mZmVyIGZvciBTYWxlCitDLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgUGFyYWdyYXBoIEIuIGFsc28gYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIGEgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb24gYW5kIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGlmLCBhdCB0aGUgdGltZSB0aGUgTW9kaWZpY2F0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgdGhlIGFkZGl0aW9uIG9mIHN1Y2ggTW9kaWZpY2F0aW9uIGNhdXNlcyB0aGUgY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgQ292ZXJlZCBQYXRlbnRzLiBJdCBkb2VzIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHRoYXQgaW5jbHVkZSBhIE1vZGlmaWNhdGlvbi4KKworRC4gVGhlIHJpZ2h0cyBncmFudGVkIGluIFBhcmFncmFwaHMgQS4gYW5kIEIuIGFsbG93IHRoZSBSZWNpcGllbnQgdG8gc3VibGljZW5zZSB0aG9zZSBzYW1lIHJpZ2h0cy4gU3VjaCBzdWJsaWNlbnNlIG11c3QgYmUgdW5kZXIgdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK09CTElHQVRJT05TIE9GIFJFQ0lQSUVOVAorQS4gRGlzdHJpYnV0aW9uIG9yIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIG11c3QgYmUgbWFkZSB1bmRlciB0aGlzIEFncmVlbWVudCBleGNlcHQgZm9yIGFkZGl0aW9ucyBjb3ZlcmVkIHVuZGVyIHBhcmFncmFwaCAzSC4KKworV2hlbmV2ZXIgYSBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmU7IGFuZAorSWYgUmVjaXBpZW50IGRpc3RyaWJ1dGVzIG9yIHJlZGlzdHJpYnV0ZXMgdGhlIFN1YmplY3QgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBzb3VyY2UgY29kZSwgUmVjaXBpZW50IG11c3QgYWxzbyBtYWtlIHRoZSBzb3VyY2UgY29kZSBmcmVlbHkgYXZhaWxhYmxlLCBhbmQgbXVzdCBwcm92aWRlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KK0IuIEVhY2ggUmVjaXBpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgcHJvbWluZW50bHkgaW4gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKK1tHb3Zlcm5tZW50IEFnZW5jeSB3aWxsIGluc2VydCB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgbm90aWNlIGluIGVhY2ggYWdyZWVtZW50IGFjY29tcGFueWluZyB0aGUgaW5pdGlhbCBkaXN0cmlidXRpb24gb2Ygb3JpZ2luYWwgc29mdHdhcmUgYW5kIHJlbW92ZSB0aGlzIGJyYWNrZXRlZCBsYW5ndWFnZS5dCisKK1tUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2Ugd2lsbCBiZSB1c2VkIGlmIGNyZWF0ZWQgYnkgYSBjb250cmFjdG9yIHB1cnN1YW50IHRvIEdvdmVybm1lbnQgQWdlbmN5IGNvbnRyYWN0IGFuZCByaWdodHMgb2J0YWluZWQgZnJvbSBjcmVhdG9yIGJ5IGFzc2lnbm1lbnQuIEdvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSB5ZWFyIGFuZCBpdHMgQWdlbmN5IGRlc2lnbmF0aW9uIGFuZCByZW1vdmUgdGhlIGJyYWNrZXRlZCBsYW5ndWFnZS5dIENvcHlyaWdodCAmIzY1NTMzOyB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fXyBfX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitbVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIHdpbGwgYmUgdXNlZCBpZiBjcmVhdGVkIGJ5IGNpdmlsIHNlcnZhbnRzIG9ubHkuIEdvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSB5ZWFyIGFuZCBpdHMgQWdlbmN5IGRlc2lnbmF0aW9uIGFuZCByZW1vdmUgdGhlIGJyYWNrZXRlZCBsYW5ndWFnZS5dIENvcHlyaWdodCAmIzY1NTMzOyB7WUVBUn0gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IF9fX18gX19fXy4gTm8gY29weXJpZ2h0IGlzIGNsYWltZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgdW5kZXIgVGl0bGUgMTcsIFUuUy5Db2RlLiBBbGwgT3RoZXIgUmlnaHRzIFJlc2VydmVkLgorCitDLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgY2hhcmFjdGVyaXplIGl0cyBhbHRlcmF0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFzIGEgTW9kaWZpY2F0aW9uIGFuZCBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgTW9kaWZpY2F0aW9uIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBNb2RpZmljYXRpb24uIEluIGZ1bGZpbGxtZW50IG9mIHRoZXNlIHJlcXVpcmVtZW50cywgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgZmlsZSAoZS5nLiwgYSBjaGFuZ2UgbG9nIGZpbGUpIHRoYXQgZGVzY3JpYmVzIHRoZSBhbHRlcmF0aW9ucyBtYWRlIGFuZCB0aGUgZGF0ZSBvZiB0aGUgYWx0ZXJhdGlvbnMsIGlkZW50aWZpZXMgQ29udHJpYnV0b3IgYXMgb3JpZ2luYXRvciBvZiB0aGUgYWx0ZXJhdGlvbnMsIGFuZCBjb25zZW50cyB0byBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBhbHRlcmF0aW9ucyBhcyBhIE1vZGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGJ5IGluY2x1ZGluZyBhIHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZSBwcm92aWRlZCBieSBHb3Zlcm5tZW50IEFnZW5jeS4gT25jZSBjb25zZW50IGlzIGdyYW50ZWQsIGl0IG1heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCitELiBBIENvbnRyaWJ1dG9yIG1heSBhZGQgaXRzIG93biBjb3B5cmlnaHQgbm90aWNlIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBPbmNlIGEgY29weXJpZ2h0IG5vdGljZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgYSBSZWNpcGllbnQgbWF5IG5vdCByZW1vdmUgaXQgd2l0aG91dCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIHRoZSBDb250cmlidXRvciB3aG8gYWRkZWQgdGhlIG5vdGljZS4KKworRS4gQSBSZWNpcGllbnQgbWF5IG5vdCBtYWtlIGFueSByZXByZXNlbnRhdGlvbiBpbiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBvciBpbiBhbnkgcHJvbW90aW9uYWwsIGFkdmVydGlzaW5nIG9yIG90aGVyIG1hdGVyaWFsIHRoYXQgbWF5IGJlIGNvbnN0cnVlZCBhcyBhbiBlbmRvcnNlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSBvciBieSBhbnkgcHJpb3IgUmVjaXBpZW50IG9mIGFueSBwcm9kdWN0IG9yIHNlcnZpY2UgcHJvdmlkZWQgYnkgUmVjaXBpZW50LCBvciB0aGF0IG1heSBzZWVrIHRvIG9idGFpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBieSB0aGUgZmFjdCBvZiBHb3Zlcm5tZW50IEFnZW5jeWBzIG9yIGEgcHJpb3IgUmVjaXBpZW50YHMgcGFydGljaXBhdGlvbiBpbiB0aGlzIEFncmVlbWVudC4KKworRi4gSW4gYW4gZWZmb3J0IHRvIHRyYWNrIHVzYWdlIGFuZCBtYWludGFpbiBhY2N1cmF0ZSByZWNvcmRzIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBlYWNoIFJlY2lwaWVudCwgdXBvbiByZWNlaXB0IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBpcyByZXF1ZXN0ZWQgdG8gcmVnaXN0ZXIgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBieSB2aXNpdGluZyB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IF9fX19fXy4gUmVjaXBpZW50YHMgbmFtZSBhbmQgcGVyc29uYWwgaW5mb3JtYXRpb24gc2hhbGwgYmUgdXNlZCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMgb25seS4gT25jZSBhIFJlY2lwaWVudCBtYWtlcyBhIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUsIGl0IGlzIHJlcXVlc3RlZCB0aGF0IHRoZSBSZWNpcGllbnQgaW5mb3JtIEdvdmVybm1lbnQgQWdlbmN5IGF0IHRoZSB3ZWIgc2l0ZSBwcm92aWRlZCBhYm92ZSBob3cgdG8gYWNjZXNzIHRoZSBNb2RpZmljYXRpb24uCisKK1tBbHRlcm5hdGl2ZSBwYXJhZ3JhcGggZm9yIHVzZSB3aGVuIGEgd2ViIHNpdGUgZm9yIHJlbGVhc2UgYW5kIG1vbml0b3Jpbmcgb2Ygc3ViamVjdCBzb2Z0d2FyZSB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYnkgcmVsZWFzaW5nIEdvdmVybm1lbnQgQWdlbmN5XSBJbiBhbiBlZmZvcnQgdG8gdHJhY2sgdXNhZ2UgYW5kIG1haW50YWluIGFjY3VyYXRlIHJlY29yZHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVhY2ggUmVjaXBpZW50LCB1cG9uIHJlY2VpcHQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGlzIHJlcXVlc3RlZCB0byBwcm92aWRlIEdvdmVybm1lbnQgQWdlbmN5LCBieSBlLW1haWwgdG8gdGhlIEdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgbGlzdGVkIGluIGNsYXVzZSA1LkYuLCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiBfX19fX18uIFJlY2lwaWVudGBzIG5hbWUgYW5kIHBlcnNvbmFsIGluZm9ybWF0aW9uIHNoYWxsIGJlIHVzZWQgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzIG9ubHkuIE9uY2UgYSBSZWNpcGllbnQgbWFrZXMgYSBNb2RpZmljYXRpb24gYXZhaWxhYmxlLCBpdCBpcyByZXF1ZXN0ZWQgdGhhdCB0aGUgUmVjaXBpZW50IGluZm9ybSBHb3Zlcm5tZW50IEFnZW5jeSwgYnkgZS1tYWlsIHRvIHRoZSBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGxpc3RlZCBpbiBjbGF1c2UgNS5GLiwgaG93IHRvIGFjY2VzcyB0aGUgTW9kaWZpY2F0aW9uLgorCitHLiBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0aGF0IGl0cyBNb2RpZmljYXRpb24gaXMgYmVsaWV2ZWQgdG8gYmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbiBhbmQgZG9lcyBub3QgdmlvbGF0ZSBhbnkgZXhpc3RpbmcgYWdyZWVtZW50cywgcmVndWxhdGlvbnMsIHN0YXR1dGVzIG9yIHJ1bGVzLCBhbmQgZnVydGhlciB0aGF0IENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgQWdyZWVtZW50LgorCitILiBBIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUuIEEgUmVjaXBpZW50IG1heSBkbyBzbywgaG93ZXZlciwgb25seSBvbiBpdHMgb3duIGJlaGFsZiBhbmQgbm90IG9uIGJlaGFsZiBvZiBHb3Zlcm5tZW50IEFnZW5jeSBvciBhbnkgb3RoZXIgUmVjaXBpZW50LiBTdWNoIGEgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSB0aGF0IFJlY2lwaWVudCBhbG9uZS4gRnVydGhlciwgc3VjaCBSZWNpcGllbnQgYWdyZWVzIHRvIGluZGVtbmlmeSBHb3Zlcm5tZW50IEFnZW5jeSBhbmQgZXZlcnkgb3RoZXIgUmVjaXBpZW50IGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZW0gYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9mZmVyZWQgYnkgc3VjaCBSZWNpcGllbnQuCisKK0kuIEEgUmVjaXBpZW50IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgU3ViamVjdCBTb2Z0d2FyZSB3aXRoIHNlcGFyYXRlIHNvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggY2FzZSwgdGhlIFJlY2lwaWVudCBtdXN0IG1ha2Ugc3VyZSBTdWJqZWN0IFNvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRlZCBpbiB0aGUgTGFyZ2VyIFdvcmsgaXMgc3ViamVjdCB0byB0aGlzIEFncmVlbWVudC4KKworSi4gTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb25zIGNvbnRhaW5lZCBoZXJlaW4sIFJlY2lwaWVudCBpcyBoZXJlYnkgcHV0IG9uIG5vdGljZSB0aGF0IGV4cG9ydCBvZiBhbnkgZ29vZHMgb3IgdGVjaG5pY2FsIGRhdGEgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBtYXkgcmVxdWlyZSBzb21lIGZvcm0gb2YgZXhwb3J0IGxpY2Vuc2UgZnJvbSB0aGUgVS5TLiBHb3Zlcm5tZW50LiBGYWlsdXJlIHRvIG9idGFpbiBuZWNlc3NhcnkgZXhwb3J0IGxpY2Vuc2VzIG1heSByZXN1bHQgaW4gY3JpbWluYWwgbGlhYmlsaXR5IHVuZGVyIFUuUy4gbGF3cy4gR292ZXJubWVudCBBZ2VuY3kgbmVpdGhlciByZXByZXNlbnRzIHRoYXQgYSBsaWNlbnNlIHNoYWxsIG5vdCBiZSByZXF1aXJlZCBub3IgdGhhdCwgaWYgcmVxdWlyZWQsIGl0IHNoYWxsIGJlIGlzc3VlZC4gTm90aGluZyBncmFudGVkIGhlcmVpbiBwcm92aWRlcyBhbnkgc3VjaCBleHBvcnQgbGljZW5zZS4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTIEFORCBMSUFCSUxJVElFUzsgV0FJVkVSIEFORCBJTkRFTU5JRklDQVRJT04KK0EuIE5vIFdhcnJhbnR5OiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VELCBJTVBMSUVELCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIENPTkZPUk0gVE8gU1BFQ0lGSUNBVElPTlMsIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgRlJFRURPTSBGUk9NIElORlJJTkdFTUVOVCwgQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFNVQkpFQ1QgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFLCBPUiBBTlkgV0FSUkFOVFkgVEhBVCBET0NVTUVOVEFUSU9OLCBJRiBQUk9WSURFRCwgV0lMTCBDT05GT1JNIFRPIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBUSElTIEFHUkVFTUVOVCBET0VTIE5PVCwgSU4gQU5ZIE1BTk5FUiwgQ09OU1RJVFVURSBBTiBFTkRPUlNFTUVOVCBCWSBHT1ZFUk5NRU5UIEFHRU5DWSBPUiBBTlkgUFJJT1IgUkVDSVBJRU5UIE9GIEFOWSBSRVNVTFRTLCBSRVNVTFRJTkcgREVTSUdOUywgSEFSRFdBUkUsIFNPRlRXQVJFIFBST0RVQ1RTIE9SIEFOWSBPVEhFUiBBUFBMSUNBVElPTlMgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFLiBGVVJUSEVSLCBHT1ZFUk5NRU5UIEFHRU5DWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUSUVTIFJFR0FSRElORyBUSElSRC1QQVJUWSBTT0ZUV0FSRSwgSUYgUFJFU0VOVCBJTiBUSEUgT1JJR0lOQUwgU09GVFdBUkUsIEFORCBESVNUUklCVVRFUyBJVCAiQVMgSVMuIgorCitCLiBXYWl2ZXIgYW5kIEluZGVtbml0eTogUkVDSVBJRU5UIEFHUkVFUyBUTyBXQUlWRSBBTlkgQU5EIEFMTCBDTEFJTVMgQUdBSU5TVCBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBJVFMgQ09OVFJBQ1RPUlMgQU5EIFNVQkNPTlRSQUNUT1JTLCBBUyBXRUxMIEFTIEFOWSBQUklPUiBSRUNJUElFTlQuIElGIFJFQ0lQSUVOVGBTIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBSRVNVTFRTIElOIEFOWSBMSUFCSUxJVElFUywgREVNQU5EUywgREFNQUdFUywgRVhQRU5TRVMgT1IgTE9TU0VTIEFSSVNJTkcgRlJPTSBTVUNIIFVTRSwgSU5DTFVESU5HIEFOWSBEQU1BR0VTIEZST00gUFJPRFVDVFMgQkFTRUQgT04sIE9SIFJFU1VMVElORyBGUk9NLCBSRUNJUElFTlRgUyBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUsIFJFQ0lQSUVOVCBTSEFMTCBJTkRFTU5JRlkgQU5EIEhPTEQgSEFSTUxFU1MgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgSVRTIENPTlRSQUNUT1JTIEFORCBTVUJDT05UUkFDVE9SUywgQVMgV0VMTCBBUyBBTlkgUFJJT1IgUkVDSVBJRU5ULCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcuIFJFQ0lQSUVOVGBTIFNPTEUgUkVNRURZIEZPUiBBTlkgU1VDSCBNQVRURVIgU0hBTEwgQkUgVEhFIElNTUVESUFURSwgVU5JTEFURVJBTCBURVJNSU5BVElPTiBPRiBUSElTIEFHUkVFTUVOVC4KKworR0VORVJBTCBURVJNUworQS4gVGVybWluYXRpb246IFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgYSBSZWNpcGllbnQgZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCBmYWlscyB0byBjdXJlIHN1Y2ggbm9uY29tcGxpYW5jZSB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIFVwb24gdGVybWluYXRpb24sIGEgUmVjaXBpZW50IGFncmVlcyB0byBpbW1lZGlhdGVseSBjZWFzZSB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHByb3Blcmx5IGdyYW50ZWQgYnkgdGhlIGJyZWFjaGluZyBSZWNpcGllbnQgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworQi4gU2V2ZXJhYmlsaXR5OiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0MuIEFwcGxpY2FibGUgTGF3OiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbCBsYXcgb25seSBmb3IgYWxsIHB1cnBvc2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZGV0ZXJtaW5pbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgbWVhbmluZyBvZiBpdHMgcHJvdmlzaW9ucyBhbmQgdGhlIHJpZ2h0cywgb2JsaWdhdGlvbnMgYW5kIHJlbWVkaWVzIG9mIHRoZSBwYXJ0aWVzLgorCitELiBFbnRpcmUgVW5kZXJzdGFuZGluZzogVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSB1bmRlcnN0YW5kaW5nIGFuZCBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gcmVsZWFzZSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBhbmQgbWF5IG5vdCBiZSBzdXBlcnNlZGVkLCBtb2RpZmllZCBvciBhbWVuZGVkIGV4Y2VwdCBieSBmdXJ0aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGR1bHkgZXhlY3V0ZWQgYnkgdGhlIHBhcnRpZXMuCisKK0UuIEJpbmRpbmcgQXV0aG9yaXR5OiBCeSBhY2NlcHRpbmcgYW5kIHVzaW5nIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhIFJlY2lwaWVudCBhZmZpcm1zIGl0cyBhdXRob3JpdHkgdG8gYmluZCB0aGUgUmVjaXBpZW50IHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhhdCB0aGF0IFJlY2lwaWVudCBoZXJlYnkgYWdyZWVzIHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlaW4uCisKK0YuIFBvaW50IG9mIENvbnRhY3Q6IEFueSBSZWNpcGllbnQgY29udGFjdCB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGlzIHRvIGJlIGRpcmVjdGVkIHRvIHRoZSBkZXNpZ25hdGVkIHJlcHJlc2VudGF0aXZlIGFzIGZvbGxvd3M6IF9fX19fX19fX19fLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkNTQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGRkYzliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkNTQQpAQCAtMCwwICsxLDM0IEBACisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlCitDb3B5cmlnaHQgKGMpIDxZZWFyPiA8T3duZXIgT3JnYW5pemF0aW9uIE5hbWU+IAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OiAgIDxOYW1lIG9mIERldmVsb3BtZW50IEdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICA8TmFtZSBvZiBJbnN0aXR1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxVUkwgZm9yIERldmVsb3BtZW50IEdyb3VwL0luc3RpdHV0aW9uPgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGggdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycworaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZXMgb2YgPE5hbWUgb2YgRGV2ZWxvcG1lbnQgR3JvdXAsIE5hbWUgb2YKK0luc3RpdHV0aW9uPiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK29yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgord3JpdHRlbiBwZXJtaXNzaW9uLgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKK09SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgorQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRSBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5NmVhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05HUEwKQEAgLTAsMCArMSw0NSBAQAorCisKK05FVEhBQ0sgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCisoQ29weXJpZ2h0IDE5ODkgTS4gU3RlcGhlbnNvbikgCisoQmFzZWQgb24gdGhlIEJJU09OIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UsIGNvcHlyaWdodCAxOTg4IFJpY2hhcmQgTS4gU3RhbGxtYW4pCisKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyBrZWVwIHlvdSBhdCB0aGUgbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgTmV0SGFjay4gVG8gbWFrZSBzdXJlIHRoYXQgeW91IGdldCB0aGUgcmlnaHRzIHdlIHdhbnQgeW91IHRvIGhhdmUsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LgorCitTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUgYXdheSBjb3BpZXMgb2YgTmV0SGFjaywgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgTmV0SGFjayBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gbWFrZSBzdXJlIHRoYXQgZXZlcnlvbmUgaGFzIHN1Y2ggcmlnaHRzLCB3ZSBoYXZlIHRvIGZvcmJpZCB5b3UgdG8gZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgTmV0SGFjaywgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCitBbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIGZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBOZXRIYWNrLiBJZiBOZXRIYWNrIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3Qgd2hhdCB3ZSBkaXN0cmlidXRlZC4KKworVGhlcmVmb3JlIHdlIChNaWtlIFN0ZXBoZW5zb24gYW5kIG90aGVyIGhvbGRlcnMgb2YgTmV0SGFjayBjb3B5cmlnaHRzKSBtYWtlIHRoZSBmb2xsb3dpbmcgdGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIG9yIGNoYW5nZSBOZXRIYWNrLgorCitDT1BZSU5HIFBPTElDSUVTCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgTmV0SGFjayBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3Uga2VlcCBpbnRhY3QgdGhlIG5vdGljZXMgb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gY29weXJpZ2h0cywgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIE5ldEhhY2sgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLgorWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiBOZXRIYWNrIG9yIGFueSBwb3J0aW9uIG9mIGl0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaCAxIGFib3ZlIChpbmNsdWRpbmcgZGlzdHJpYnV0aW5nIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQpLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CithKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKK2IpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBhIGRlcml2YXRpdmUgb2YgTmV0SGFjayBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgb24gdGVybXMgaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCBtb3JlIGV4dGVuc2l2ZSB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKQorCitjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBOZXRIYWNrIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CithKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworYikgYWNjb21wYW55IGl0IHdpdGggZnVsbCBpbmZvcm1hdGlvbiBhcyB0byBob3cgdG8gb2J0YWluIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZyb20gYW4gYXBwcm9wcmlhdGUgYXJjaGl2ZSBzaXRlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLikKKworRm9yIHRoZXNlIHB1cnBvc2VzLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBlaXRoZXIgdGhlIGZ1bGwgc291cmNlIGRpc3RyaWJ1dGlvbiBhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIG92ZXIgVXNlbmV0IG9yIHVwZGF0ZWQgY29waWVzIG9mIHRoZSBmaWxlcyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZS4KKworWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBOZXRIYWNrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBpcyB2b2lkIGFuZCB5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIgc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorU3RhdGVkIHBsYWlubHk6IFlvdSBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBOZXRIYWNrLCBvciBvdGhlcndpc2UgdXNlIHBhcnRzIG9mIE5ldEhhY2ssIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBhYm92ZTsgaW4gcGFydGljdWxhciwgeW91ciBtb2RpZmllZCBOZXRIYWNrIG9yIHByb2dyYW0gY29udGFpbmluZyBwYXJ0cyBvZiBOZXRIYWNrIG11c3QgcmVtYWluIGZyZWVseSBhdmFpbGFibGUgYXMgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gSW4gb3RoZXIgd29yZHMsIGdvIGFoZWFkIGFuZCBzaGFyZSBOZXRIYWNrLCBidXQgZG9uYHQgdHJ5IHRvIHN0b3AgYW55b25lIGVsc2UgZnJvbSBzaGFyaW5nIGl0IGZhcnRoZXIuIAorWyAgSG9tZSAgfCAgVmVyc2lvbiAzLjQuMyAgfCAgQ29udGFjdCBVcyAgXQorCisKKworSG9zdGVkIGJ5OiAgICAgICAKK05ldEhhY2sgaXMgQ29weXJpZ2h0IDE5ODUtMjAwMyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gYW5kIE0uIFN0ZXBoZW5zb24uIFNlZSBvdXIgbGljZW5zZSBmb3IgZGV0YWlscy4KK1RoaXMgc2l0ZSBpcyBDb3B5cmlnaHQgMTk5OS0yMDA5IGJ5IEtlbm5ldGggTG9yYmVyLCBLZW5zaW5ndG9uLCBNYXJ5bGFuZC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlBPU0wtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlBPU0wtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMmE2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAKQEAgLTAsMCArMSw2MSBAQAorCitOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk5vbi1Qcm9maXQgT1NMIikgMy4wCisKK1RoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJOb24tUHJvZml0IE9TTCIpIHZlcnNpb24gMy4wICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAzLjAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworCitiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugb3IgYXMgcHJvdmlkZWQgaW4gc2VjdGlvbiAxNyhkKTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yYHMgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICJmYWlyIHVzZSIgb3IgImZhaXIgZGVhbGluZyIpLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzYCBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIiBvciAiT1NMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCisxNykgTm9uLVByb2ZpdCBBbWVuZG1lbnQuIFRoZSBuYW1lIG9mIHRoaXMgYW1lbmRlZCB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCJPU0wgMy4wIikgaXMgIk5vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIDMuMCIuIFRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UgaGFzIGJlZW4gYW1lbmRlZCBhcyBmb2xsb3dzOgorCisoYSkgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgZGVjbGFyZXMgdGhhdCBpdCBpcyBhIG5vdC1mb3ItcHJvZml0IG9yZ2FuaXphdGlvbiB0aGF0IGRlcml2ZXMgbm8gcmV2ZW51ZSB3aGF0c29ldmVyIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIG9yIGZyb20gc3VwcG9ydCBvciBzZXJ2aWNlcyByZWxhdGluZyB0aGVyZXRvLgorCisoYikgVGhlIGZpcnN0IHNlbnRlbmNlIG9mIFNlY3Rpb24gNyBbIldhcnJhbnR5IG9mIFByb3ZlbmFuY2UiXSBvZiBPU0wgMy4wIGhhcyBiZWVuIHN0cmlja2VuLiBGb3IgT3JpZ2luYWwgV29ya3MgbGljZW5zZWQgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAsIExJQ0VOU09SIE9GRkVSUyBOTyBXQVJSQU5USUVTIFdIQVRTT0VWRVIuCisKKyhjKSBJbiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgU2VjdGlvbiA4IFsiTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkiXSBvZiB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCwgdGhlIGxpc3Qgb2YgZGFtYWdlcyBmb3Igd2hpY2ggTElBQklMSVRZIElTIExJTUlURUQgbm93IGluY2x1ZGVzICJkaXJlY3QiIGRhbWFnZXMuCisKKyhkKSBUaGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgb2YgdGhpcyBMaWNlbnNlIG5vdyByZWZlcnMgdG8gdGhpcyAiTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UiIHJhdGhlciB0aGFuIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIi4gWW91IG1heSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCBsaWNlbnNlIG9ubHkgaWYgWW91IG1ha2UgdGhlIHJlcHJlc2VudGF0aW9uIGFuZCBkZWNsYXJhdGlvbiBpbiBwYXJhZ3JhcGggKGEpIG9mIHRoaXMgU2VjdGlvbiAxNy4gT3RoZXJ3aXNlLCBZb3Ugc2hhbGwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2Ygb25seSB1bmRlciB0aGUgT1NMIDMuMCBsaWNlbnNlIGFuZCBZb3Ugc2hhbGwgcHVibGlzaCBjbGVhciBsaWNlbnNpbmcgbm90aWNlcyBzbyBzdGF0aW5nLiBBbHNvIGJ5IHdheSBvZiBjbGFyaWZpY2F0aW9uLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgYXV0aG9yaXplIFlvdSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHdvcmtzIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wIGlmIFlvdSByZWNlaXZlZCB0aGVtIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuCisKKyhlKSBPcmlnaW5hbCBXb3JrcyBsaWNlbnNlZCB1bmRlciB0aGlzIGxpY2Vuc2Ugc2hhbGwgcmVmZXJlbmNlICJOb24tUHJvZml0IE9TTCAzLjAiIGluIGxpY2Vuc2luZyBub3RpY2VzIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB3b3JrcyBsaWNlbnNlZCB1bmRlciB0aGUgb3JpZ2luYWwgT1NMIDMuMCBsaWNlbnNlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OVFAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OVFAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NzJiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUApAQCAtMCwwICsxLDcgQEAKKworTlRQIExpY2Vuc2UgKE5UUCkKKworQ29weXJpZ2h0IChjKSAoQ29weXJpZ2h0SG9sZGVyc05hbWUpIChGcm9tIDQtZGlnaXQteWVhciktKFRvIDQtZGlnaXQteWVhcikKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgKFRyYWRlbWFya2VkTmFtZSkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIChUcmFkZW1hcmtlZE5hbWUpIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05hdW1hbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05hdW1hbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWNlNzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuCkBAIC0wLDAgKzEsNTAgQEAKKworTkFVTUVOIFB1YmxpYyBMaWNlbnNlCitUaGlzIHNvZnR3YXJlIGlzIENvcHlyaWdodCAoYykgTkFVTUVOICh0bSkgYW5kIENvbnRyaWJ1dG9ycy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKK2Rpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIE5BVU1FTiAodG0pIG11c3Qgbm90IGJlIHVzZWQgdG8KK2VuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBOQVVNRU4uCisKKzQuIFRoZSByaWdodCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgb3IgdG8gdXNlIGl0IGZvciBhbnkKK3B1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKQorb3IgVHJhZGVtYXJrcyAodG0pIG9mIE5BVU1FTi4KKworNS4gSWYgYW55IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gTkFVTUVOIG9yIENvbnRyaWJ1dG9ycyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0CitjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZwordGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK0Rpc2NsYWltZXI6CisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkFVTUVOICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBOQVVNRU4KK09SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKK0dPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgTkFVTUVOCithbmQgQ29udHJpYnV0b3JzLiBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUKK2FjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzNzcxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05va2lhCkBAIC0wLDAgKzEsNDIzIEBACisKK05va2lhIE9wZW4gU291cmNlIExpY2Vuc2UgKE5PS09TCitMaWNlbnNlKSBWZXJzaW9uIDEuMGEKKyAxLiBERUZJTklUSU9OUy4KKworIkFmZmlsaWF0ZXMiIG9mIGEgcGFydHkgc2hhbGwgbWVhbiBhbiBlbnRpdHkKKworYSkgd2hpY2ggaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250cm9sbGluZyBzdWNoIHBhcnR5OworCitiKSB3aGljaCBpcyB1bmRlciB0aGUgc2FtZSBkaXJlY3Qgb3IgaW5kaXJlY3Qgb3duZXJzaGlwIG9yIGNvbnRyb2wKK2FzIHN1Y2ggcGFydHk7IG9yCisKK2MpIHdoaWNoIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb3duZWQgb3IgY29udHJvbGxlZCBieSBzdWNoIHBhcnR5LgorCitGb3IgdGhlc2UgcHVycG9zZXMsIGFuIGVudGl0eSBzaGFsbCBiZSB0cmVhdGVkIGFzIGJlaW5nIGNvbnRyb2xsZWQKK2J5IGFub3RoZXIgaWYgdGhhdCBvdGhlciBlbnRpdHkgaGFzIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKK3ZvdGVzIGluIHN1Y2ggZW50aXR5LCBpcyBhYmxlIHRvIGRpcmVjdCBpdHMgYWZmYWlycyBhbmQvb3IgdG8gY29udHJvbCB0aGUKK2NvbXBvc2l0aW9uIG9mIGl0cyBib2FyZCBvZiBkaXJlY3RvcnMgb3IgZXF1aXZhbGVudCBib2R5LgorCisiQ29tbWVyY2lhbCBVc2UiIHNoYWxsIG1lYW4gZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCitgYENvbnRyaWJ1dG9yYGAgc2hhbGwgbWVhbiBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMKK3RvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBzaGFsbCBtZWFuIGluIGNhc2Ugb2YgYW55IENvbnRyaWJ1dG9yCit0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYQorQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvciAKK2FuZCBpbiBjYXNlIG9mIE5va2lhIGluIGFkZGl0aW9uIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSwgaW5jbHVkaW5nCit0aGUgZm9ybSBhcyBFeGNldXRhYmxlLgorCitgYENvdmVyZWQgU29mdHdhcmVgYCBzaGFsbCBtZWFuIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zCitvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoCitjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCitgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIHNoYWxsIG1lYW4gYSBtZWNoYW5pc20KK2dlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YS4KKworYGBFeGVjdXRhYmxlYGAgc2hhbGwgbWVhbiBDb3ZlcmVkIFNvZnR3YXJlIGluIGFueSBmb3JtIG90aGVyCit0aGFuIFNvdXJjZSBDb2RlLgorCitgYE5va2lhYGAgc2hhbGwgbWVhbiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIEFmZmlsaWF0ZXMuCisKK2BgTGFyZ2VyIFdvcmtgYCBzaGFsbCBtZWFuIGEgd29yaywgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZQorb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKK2BgTGljZW5zZWBgIHNoYWxsIG1lYW4gdGhpcyBkb2N1bWVudC4KKworIkxpY2Vuc2FibGUiIHNoYWxsIG1lYW4gaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkKK2FjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworYGBNb2RpZmljYXRpb25zYGAgc2hhbGwgbWVhbiBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbQordGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBTb2Z0d2FyZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywKK2EgTW9kaWZpY2F0aW9uIGlzOgorCithKSBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKK09yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK2IpIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvcgorcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworYGBPcmlnaW5hbCBTb2Z0d2FyZWBgIHNoYWxsIG1lYW4gdGhlIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyCitzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5CitFeGhpYml0IEEgYXMgT3JpZ2luYWwgU29mdHdhcmUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIKK3RoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIFNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworIlBhdGVudCBDbGFpbXMiIHNoYWxsIG1lYW4gYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkCitvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworYGBTb3VyY2UgQ29kZWBgIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkCitTb2Z0d2FyZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywKK3BsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbAorY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGFub3RoZXIgd2VsbCBrbm93biwKK2F2YWlsYWJsZSBDb3ZlcmVkIFNvZnR3YXJlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlCitjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uCitvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisiWW91YGAgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwKK2VudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsCit0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91YGAgaW5jbHVkZXMgQWZmaWxpYXRlcyBvZiBzdWNoIGVudGl0eS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xIE5va2lhIEdyYW50LgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIE5va2lhIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbAorcHJvcGVydHkgY2xhaW1zOgorCithKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgTm9raWEgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucwordGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7CisKK2IpIGFuZCB1bmRlciBQYXRlbnRzIENsYWltcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcKK29yIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwKK2FuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpLgorCitjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgTm9raWEgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UuCisKK2QpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDoKKzEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZTsgMikgc2VwYXJhdGUgZnJvbQordGhlIE9yaWdpbmFsIFNvZnR3YXJlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24KK29mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZQord2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIgQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZQorCithKSB1bmRlciBjb3B5cmlnaHRzIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkKK3N1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoCitvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7CithbmQKKworYikgdW5kZXIgUGF0ZW50IENsYWltcyBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsCitvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IKK2luIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLAordG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2UKK29mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZAorMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKK2QpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDoKKzEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CisyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6CitpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbgorb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzCitwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCitpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQKK2J5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuCitUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkCit1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5Citjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueQordGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91CittYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQKK2luIFNlY3Rpb24gMy41LgorCiszLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlcgorb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbgorYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwKK211c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0Citpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50Cit2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaAorcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbgorcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQKK2J5IGEgdGhpcmQgcGFydHkuCisKKzMuMyBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBTb2Z0d2FyZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluCithIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBTb2Z0d2FyZQorYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKK3RoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBTb2Z0d2FyZQorcHJvdmlkZWQgYnkgTm9raWEgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBOb2tpYSBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLAorYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworMy40ICBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlCitTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTGBgIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kCit0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdword2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24KK2lzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkKK21vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyCithbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cworb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZQorYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeQordG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluCit0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24KKzMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlCitDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMKK3RvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUgUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZQorZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24KKyhzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yCitzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91cgorbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbworZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdQorZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBTb2Z0d2FyZS4KK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eQorb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZS4KK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIE5va2lhCitvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQKK1lvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IE5va2lhIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgTm9raWEgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgU29mdHdhcmUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZQorQ292ZXJlZCBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nCithIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uCiszLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZQordmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgCityaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgU29mdHdhcmUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZQordmVyc2lvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0CitZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlCitmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgorSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdQorbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSBOb2tpYSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUKK3RvIGluZGVtbmlmeSBOb2tpYSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK05va2lhIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcgTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIKK3NvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzCitvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgU29mdHdhcmUuCisKKzQuIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgU29mdHdhcmUgZHVlIHRvIHN0YXR1dGUsCitqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucworYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMCitmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zCitvZiB0aGUgU291cmNlIENvZGUuCisKK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZQordG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIE5va2lhIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlCitpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBTb2Z0d2FyZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKworNi4xIE5ldyBWZXJzaW9ucy4KKworTm9raWEgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZQordG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KK29mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMKK29mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5va2lhLiBObyBvbmUgb3RoZXIKK3RoYW4gTm9raWEgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBTb2Z0d2FyZQorY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZCitDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgTk9LSUEsIElUUyBMSUNFTlNPUlMKK09SIEFGRklMSUFURVMgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWQorU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GICBXQVJSQU5UWSBDT05TVElUVVRFUworQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRAorSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCis4LjEgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbgorMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQKK1NvZnR3YXJlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZAordGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbQorKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBOb2tpYSBvciBhIENvbnRyaWJ1dG9yIChOb2tpYQorb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpCithbGxlZ2luZyB0aGF0OgorCithKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdQordW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlCitmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIKK3JlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhCittdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucworbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QKK3RvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseQorYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLAordGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMgorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZAorYWJvdmUuCisKK2IpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KK2FueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kCisyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLAorZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcKK3RoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMKK2FueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpCitwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUKK3ZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yCisyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55CitwYXltZW50IG9yIGxpY2Vuc2UuCisKKzguNCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2gKK2hhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8KK3Rlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBOT0tJQSwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLAorT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSAorUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTgorT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMKK1NVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04KK09GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBCVVQgTUFZIEFMTE9XIExJQUJJTElUWSBUTyBCRSBMSU1JVEVEOworSU4gU1VDSCBDQVNFUywgQSBQQVJUWWBzLCBJVFMgRU1QTE9ZRUVTLCBMSUNFTlNPUlMgT1IgQUZGSUxJQVRFU2AgTElBQklMSVRZCitTSEFMTCBCRSBMSU1JVEVEIFRPIFUuUy4gJDUwLiBOb3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgcHJlanVkaWNlCit0aGUgc3RhdHV0b3J5IHJpZ2h0cyBvZiBhbnkgcGFydHkgZGVhbGluZyBhcyBhIGNvbnN1bWVyLgorCisxMC4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIEFsbCByaWdodHMgaW4gdGhlIENvdmVyZWQgU29mdHdhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2UgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBncmFudCBZb3UgYW55CityaWdodHMgdG8gdXNlIGFueSBvZiB0aGUgdHJhZGVtYXJrcyBvZiBOb2tpYSBvciBhbnkgb2YgaXRzIEFmZmlsaWF0ZXMsCitldmVuIGlmIGFueSBvZiBzdWNoIHRyYWRlbWFya3MgYXJlIGluY2x1ZGVkIGluIGFueSBwYXJ0IG9mIENvdmVyZWQgU29mdHdhcmUKK2FuZC9vciBkb2N1bWVudGF0aW9uIHRvIGl0LgorCitUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgRmlubGFuZCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdworcHJvdmlzaW9ucy4gQWxsIGRpc3B1dGVzIGFyaXNpbmcgZnJvbSBvciByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbAorYmUgc2V0dGxlZCBieSBhIHNpbmdsZSBhcmJpdHJhdG9yIGFwcG9pbnRlZCBieSB0aGUgQ2VudHJhbCBDaGFtYmVyIG9mIENvbW1lcmNlCitvZiBGaW5sYW5kLiBUaGUgYXJiaXRyYXRpb24gcHJvY2VkdXJlIHNoYWxsIHRha2UgcGxhY2UgaW4gSGVsc2lua2ksIEZpbmxhbmQKK2luIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiBJZiBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB2b2lkIGFuZAordW5lbmZvcmNlYWJsZSwgaXQgd2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgYmFsYW5jZSBvZiB0aGUgQWdyZWVtZW50LAord2hpY2ggc2hhbGwgcmVtYWluIHZhbGlkIGFuZCBlbmZvcmNlYWJsZSBhY2NvcmRpbmcgdG8gaXRzIHRlcm1zLgorCisxMS4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBOb2tpYSBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IKK2NsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIE5va2lhIGFuZCBDb250cmlidXRvcnMKK3RvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluCitpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworIAorCitFWEhJQklUIEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTk9LT1MgTGljZW5zZSBWZXJzaW9uIDEuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCitMaWNlbnNlLgorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiAgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQordGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpcworCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQ29weXJpZ2h0ICYjMTY5OyA8eWVhcj4gTm9raWEgYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2RmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQVNJUwpAQCAtMCwwICsxLDEzIEBACisgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgRFREIGFuZAorICBpdHMgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworICBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKKyAgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGUgRFREIGZvcgorICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAorICB3YXJyYW50eS4KKworICBJZiB5b3UgbW9kaWZ5IHRoZSBEb2NCb29rIERURCBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZyBhbmQKKyAgcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworICBhZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKKyAgdGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5ZTNmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09DTEMtMi4wCkBAIC0wLDAgKzEsNzggQEAKKworT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSAyLjAKK1Rlcm1zICZhbXA7IENvbmRpdGlvbnMgT2YgVXNlCitNYXksIDIwMDIKK0NvcHlyaWdodCAmIzE2OTsgMjAwMi4gT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQTEVBU0UgUkVBRCBUSElTIERPQ1VNRU5UIENBUkVGVUxMWS4gQlkgRE9XTkxPQURJTkcgT1IgVVNJTkcgVEhFIENPREUgQkFTRSBBTkQvT1IgRE9DVU1FTlRBVElPTiBBQ0NPTVBBTllJTkcgVEhJUyBMSUNFTlNFIChUSEUgIkxpY2Vuc2UiKSwgWU9VIEFHUkVFIFRPIFRIRSBGT0xMT1dJTkcgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFLgorCitTZWN0aW9uIDEuIFlvdXIgUmlnaHRzCisKK1N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgT0NMQyBPZmZpY2Ugb2YgUmVzZWFyY2ggKHRoZSAiT3JpZ2luYWwgQ29udHJpYnV0b3IiKSBhbmQgZWFjaCBzdWJzZXF1ZW50IGNvbnRyaWJ1dG9yIChjb2xsZWN0aXZlbHkgd2l0aCB0aGUgT3JpZ2luYWwgQ29udHJpYnV0b3IsIHRoZSAiQ29udHJpYnV0b3JzIikgaGVyZWJ5IGdyYW50IHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgbm8tY2hhcmdlLCB0cmFuc2ZlcmFibGUgbGljZW5zZSB0byBleGVjdXRlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGFuZCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSwgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbmNvbW1lcmNpYWwgcHVycG9zZXMsIHRoZSBvcmlnaW5hbCBjb2RlIGNvbnRyaWJ1dGVkIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZCBhbGwgTW9kaWZpY2F0aW9ucyAoY29sbGVjdGl2ZWx5IGNhbGxlZCB0aGUgIlByb2dyYW0iKS4KKworU2VjdGlvbiAyLiBEZWZpbml0aW9ucworCitBICJNb2RpZmljYXRpb24iIHRvIHRoZSBQcm9ncmFtIGlzIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhbnkgZmlsZSBvZiB0aGUgUHJvZ3JhbSBhbmQgYW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIFByb2dyYW0uIElmIHlvdSBtYWtlIGEgTW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4dGVybmFsbHkgeW91IGFyZSBhICJDb250cmlidXRvci4iIFRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gbXVzdCBiZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGluY2x1ZGluZyB0aG9zZSBpbiBTZWN0aW9uIDMgYmVsb3cuCisKK0EgIkNvbWJpbmVkIFdvcmsiIHJlc3VsdHMgZnJvbSBjb21iaW5pbmcgYW5kIGludGVncmF0aW5nIGFsbCBvciBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIGNvZGUuIEEgQ29tYmluZWQgV29yayBtYXkgYmUgdGhvdWdodCBvZiBhcyBoYXZpbmcgbXVsdGlwbGUgcGFyZW50cyBvciBiZWluZyByZXN1bHQgb2YgbXVsdGlwbGUgbGluZXMgb2YgY29kZSBkZXZlbG9wbWVudC4KKworU2VjdGlvbiAzLiBEaXN0cmlidXRpb24gTGljZW5zaW5nIFRlcm1zCisKK0EuIEdlbmVyYWwgUmVxdWlyZW1lbnRzCitFeGNlcHQgYXMgbmVjZXNzYXJ5IHRvIHJlY29nbml6ZSB0aGlyZC1wYXJ0eSByaWdodHMgb3IgdGhpcmQtcGFydHkgcmVzdHJpY3Rpb24gKHNlZSBiZWxvdyksIGEgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGFueSBvZiB0aGUgZm9ybXMgbGlzdGVkIGJlbG93IG11c3Qgbm90IHB1dCBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudCYjODIxNztzIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKK0FzIGEgQ29udHJpYnV0b3IsIHlvdSByZXByZXNlbnQgdGhhdCB5b3VyIE1vZGlmaWNhdGlvbihzKSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBubyB0aGlyZCBwYXJ0eSBoYXMgYW55IGNsYWltIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMpIHJlbGF0aW5nIHRvIHlvdXIgTW9kaWZpY2F0aW9uKHMpLiBZb3UgcmVwcmVzZW50IHRoYXQgZWFjaCBvZiB5b3VyIE1vZGlmaWNhdGlvbnMgaW5jbHVkZXMgY29tcGxldGUgZGV0YWlscyBvZiBhbnkgdGhpcmQtcGFydHkgcmlnaHQgb3Igb3RoZXIgdGhpcmQtcGFydHkgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIHlvdXIgTW9kaWZpY2F0aW9uIChpbmNsdWRpbmcgYSBjb3B5IG9mIGFueSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50KS4KKworVGhlIFByb2dyYW0gbXVzdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIHBoeXNpY2FsbHkgdHJhbnNmZXJyaW5nIHRoZSBmaWxlcyB0byB0aGUgcmVjaXBpZW50LgorCitUaGlzIFdhcnJhbnR5IERpc2NsYWltZXIvTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgbXVzdCBiZSBwcm9taW5lbnRseSBkaXNwbGF5ZWQgd2l0aCBldmVyeSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYW55IGZvcm06CisKK1lPVSBBR1JFRSBUSEFUIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5EIChFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEKS4gQUNDT1JESU5HTFksIE9DTEMgTUFLRVMgTk8gV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TIE9SIEdVQVJBTlRFRVMsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgUkVQUkVTRU5UQVRJT05TIE9SIEdVQVJBTlRFRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQVMgVE86IChBKSBUSEUgRlVOQ1RJT05BTElUWSBPUiBOT05JTkZSSU5HRU1FTlQgT0YgUFJPR1JBTSwgQU5ZIE1PRElGSUNBVElPTiwgQSBDT01CSU5FRCBXT1JLIE9SIEFOIEFHR1JFR0FURSBXT1JLOyBPUiAoQikgVEhFIFJFU1VMVFMgT0YgQU5ZIFBST0pFQ1QgVU5ERVJUQUtFTiBVU0lORyBUSEUgUFJPR1JBTSwgQU5ZIE1PRElGSUNBVElPTiwgQSBDT01CSU5FRCBXT1JLIE9SIEFOIEFHR1JFR0FURSBXT1JLLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgQ09OU0VRVUVOVElBTCBPUiBBTlkgT1RIRVIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFBST0dSQU0sIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBZT1UgSEVSRUJZIFdBSVZFIEFOWSBDTEFJTVMgRk9SIERBTUFHRVMgT0YgQU5ZIEtJTkQgQUdBSU5TVCBDT05UUklCVVRPUlMgV0hJQ0ggTUFZIFJFU1VMVCBGUk9NIFlPVVIgVVNFIE9GIFRIRSBQUk9HUkFNLgorCitCLiBSZXF1aXJlbWVudHMgZm9yIGEgRGlzdHJpYnV0aW9uIG9mIE1vZGlmaWFibGUgQ29kZQorSWYgeW91IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gYSBmb3JtIHRvIHdoaWNoIHRoZSByZWNpcGllbnQgY2FuIG1ha2UgTW9kaWZpY2F0aW9ucyAoZS5nLiBzb3VyY2UgY29kZSksIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8gdXNlIGJ5IHJlY2lwaWVudC4gSW4gYWRkaXRpb24sIGVhY2ggc291cmNlIGFuZCBkYXRhIGZpbGUgb2YgdGhlIFByb2dyYW0gYW5kIGFueSBNb2RpZmljYXRpb24geW91IGRpc3RyaWJ1dGUgbXVzdCBjb250YWluIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorCisiQ29weXJpZ2h0IChjKSAyMDAwLSAoaW5zZXJ0IHRoZW4gY3VycmVudCB5ZWFyKSBPQ0xDIE9ubGluZSBDb21wdXRlciBMaWJyYXJ5IENlbnRlciwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBhcyB1cGRhdGVkIGZyb20gdGltZSB0byB0aW1lIGJ5IHRoZSBPQ0xDIE9mZmljZSBvZiBSZXNlYXJjaCwgYXJlIHN1YmplY3QgdG8gT0NMQyBSZXNlYXJjaCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjdXJyZW50IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3B1cmwub2NsYy5vcmcvb2NsYy9yZXNlYXJjaC9PUlBMLy4gU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBPQ0xDIFJlc2VhcmNoLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0xDIFJlc2VhcmNoLCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cub2NsYy5vcmcvcmVzZWFyY2gvLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fXyBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiIKKworQy4gUmVxdWlyZW1lbnRzIGZvciBhIERpc3RyaWJ1dGlvbiBvZiBOb24tbW9kaWZpYWJsZSBDb2RlCitJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhIGZvcm0gdG8gd2hpY2ggdGhlIHJlY2lwaWVudCBjYW5ub3QgbWFrZSBNb2RpZmljYXRpb25zIChlLmcuIG9iamVjdCBjb2RlKSwgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhcHBseSB0byB1c2UgYnkgcmVjaXBpZW50IGFuZCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IGluIGFwcHJvcHJpYXRlIGFuZCBjb25zcGljdW91cyBsb2NhdGlvbnM6CisKKyJDb3B5cmlnaHQgKGMpIDIwMDAtIChpbnNlcnQgdGhlbiBjdXJyZW50IHllYXIpIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorCitJbiBhZGRpdGlvbiwgdGhlIHNvdXJjZSBjb2RlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCB0aGUgb2JqZWN0IGNvZGUgZGlzdHJpYnV0aW9uIG9yIHRoZSBkaXN0cmlidXRvciBtdXN0IHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIHRvIHRoZSByZWNpcGllbnQgdXBvbiByZXF1ZXN0LgorCitELiBSZXF1aXJlbWVudHMgZm9yIGEgQ29tYmluZWQgV29yayBEaXN0cmlidXRpb24KK0Rpc3RyaWJ1dGlvbnMgb2YgQ29tYmluZWQgV29ya3MgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhbmQgbXVzdCBiZSBtYWRlIGF0IG5vIGNoYXJnZSB0byB0aGUgcmVjaXBpZW50IGJleW9uZCB0aGUgY29zdHMgb2YgcGh5c2ljYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGVzIHRvIHJlY2lwaWVudC4KKworQSBDb21iaW5lZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCBhcyBlaXRoZXIgbW9kaWZpYWJsZSBvciBub24tbW9kaWZpYWJsZSBjb2RlLiBUaGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy5CIG9yIDMuQyBhYm92ZSAoYXMgYXBwcm9wcmlhdGUpIGFwcGx5IHRvIHN1Y2ggZGlzdHJpYnV0aW9ucy4KKworQW4gIkFnZ3JlZ2F0ZSBXb3JrIiBpcyB3aGVuIHRoZSBQcm9ncmFtIGV4aXN0cywgd2l0aG91dCBpbnRlZ3JhdGlvbiwgd2l0aCBvdGhlciBwcm9ncmFtcyBvbiBhIHN0b3JhZ2UgbWVkaXVtLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gcG9ydGlvbnMgb2YgYW4gQWdncmVnYXRlIFdvcmsgd2hpY2ggYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkZWZpbml0aW9uIG9mICJQcm9ncmFtIiBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IGZvcmJpZGRlbiBmcm9tIHNlbGxpbmcgYW4gQWdncmVnYXRlIFdvcmsuIEhvd2V2ZXIsIHRoZSBQcm9ncmFtIGNvbnRhaW5lZCBpbiBhbiBBZ2dyZWdhdGUgV29yayBpcyBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gQWxzbywgc2hvdWxkIHRoZSBQcm9ncmFtIGJlIGV4dHJhY3RlZCBmcm9tIGFuIEFnZ3JlZ2F0ZSBXb3JrLCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgdXNlIG9mIHRoZSBQcm9ncmFtIGFwYXJ0IGZyb20gdGhlIEFnZ3JlZ2F0ZSBXb3JrLgorCitTZWN0aW9uIDQuIExpY2Vuc2UgR3JhbnQKKworRm9yIHB1cnBvc2VzIG9mIHBlcm1pdHRpbmcgdXNlIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBieSBPQ0xDIGFuZCBvdGhlciBsaWNlbnNlZXMgaGVyZXVuZGVyLCB5b3UgaGVyZWJ5IGdyYW50IHRvIE9DTEMgYW5kIHN1Y2ggb3RoZXIgbGljZW5zZWVzIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgdHJhbnNmZXJhYmxlLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGV4ZWN1dGUsIGNvcHksIGFsdGVyLCBkZWxldGUsIG1vZGlmeSwgYWRhcHQsIGNoYW5nZSwgcmV2aXNlLCBlbmhhbmNlLCBkZXZlbG9wLCBwdWJsaWNseSBkaXNwbGF5LCBkaXN0cmlidXRlIChpbnRlcm5hbGx5IGFuZCBleHRlcm5hbGx5KSBhbmQvb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24geW91ciBNb2RpZmljYXRpb25zIChhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mKSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlc2UgVGVybXMuIFRoaXMgU2VjdGlvbiA0IHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZvciBhbnkgcmVhc29uLgorCitTZWN0aW9uIDUuIFRlcm1pbmF0aW9uIG9mIFJpZ2h0cworCitUaGlzIG5vbi1leGNsdXNpdmUgbGljZW5zZSAod2l0aCByZXNwZWN0IHRvIHRoZSBncmFudCBmcm9tIGEgcGFydGljdWxhciBDb250cmlidXRvcikgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIGZvciBhbnkgZW50aXR5IHRoYXQgaW5pdGlhdGVzIGxlZ2FsIGFjdGlvbiBmb3IgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCAod2l0aCByZXNwZWN0IHRvIHRoZSBQcm9ncmFtKSBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYXMgb2YgdGhlIGluaXRpYXRpb24gb2Ygc3VjaCBhY3Rpb24uCisKK0lmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgTGljZW5zZSwgeW91ciByaWdodHMgKGJ1dCBub3QgeW91ciBvYmxpZ2F0aW9ucykgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVubGVzcyB5b3UgY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgbm9uY29tcGxpYW5jZS4gQWxsIHN1YmxpY2Vuc2VzIGdyYW50ZWQgYnkgeW91IHdoaWNoIHByZWV4aXN0IHN1Y2ggdGVybWluYXRpb24gYW5kIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworU2VjdGlvbiA2LiBPdGhlciBUZXJtcworCitFeGNlcHQgZm9yIHRoZSBjb3B5cmlnaHQgbm90aWNlcyByZXF1aXJlZCBhYm92ZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgYW55IG9mIHRoZSBDb250cmlidXRvcnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSByZWxldmFudCBDb250cmlidXRvci4gWW91IGFncmVlIG5vdCB0byByZW1vdmUsIGFsdGVyIG9yIG9ic2N1cmUgYW55IGNvcHlyaWdodCBvciBvdGhlciBwcm9wcmlldGFyeSByaWdodHMgbm90aWNlIGNvbnRhaW5lZCBpbiB0aGUgUHJvZ3JhbS4KKworQWxsIHRyYW5zZmVycyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIHNoYWxsIGJlIG1hZGUgaW4gY29tcGxpYW5jZSB3aXRoIFUuUy4gaW1wb3J0L2V4cG9ydCByZWd1bGF0aW9ucyBvciBvdGhlciByZXN0cmljdGlvbnMgb2YgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSwgYXMgd2VsbCBhcyBvdGhlciBzaW1pbGFyIHRyYWRlIG9yIGNvbW1lcmNlIHJlc3RyaWN0aW9ucyB3aGljaCBtaWdodCBhcHBseS4KKworQW55IHBhdGVudCBvYnRhaW5lZCBieSBhbnkgcGFydHkgY292ZXJpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiBtdXN0IGluY2x1ZGUgYSBwcm92aXNpb24gcHJvdmlkaW5nIGZvciB0aGUgZnJlZSwgcGVycGV0dWFsIGFuZCB1bnJlc3RyaWN0ZWQgY29tbWVyY2lhbCBhbmQgbm9uY29tbWVyY2lhbCB1c2UgYnkgYW55IHRoaXJkIHBhcnR5LgorCitJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIHNldHRsZW1lbnQgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCBvciBhbnkgb3RoZXIgY2F1c2Ugb2YgYWN0aW9uLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBzdWNoIGNvbmRpdGlvbnMgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSBjb21wbGlhbmNlIHdpdGggdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gc28gYXMgdG8gc2ltdWx0YW5lb3VzbHkgc2F0aXNmeSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgc3VjaCBvdGhlciBjb25kaXRpb25zLCB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB5b3UgY291bGQgbm90IHNhdGlzZnkgYm90aCB0aGUgcGF0ZW50IGxpY2Vuc2UgYW5kIHRoaXMgTGljZW5zZSwgYW5kIHlvdSB3b3VsZCBiZSByZXF1aXJlZCB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiB5b3UgbGVhcm4gb2YgYSB0aGlyZCBwYXJ0eSBjbGFpbSBvciBvdGhlciByZXN0cmljdGlvbiByZWxhdGluZyB0byBhIFByb2dyYW0geW91IGhhdmUgYWxyZWFkeSBkaXN0cmlidXRlZCB5b3Ugc2hhbGwgcHJvbXB0bHkgcmVkbyB5b3VyIFByb2dyYW0gdG8gYWRkcmVzcyB0aGUgaXNzdWUgYW5kIHRha2UgYWxsIHJlYXNvbmFibGUgc3RlcHMgdG8gaW5mb3JtIHRob3NlIHdobyBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgUHJvZ3JhbSBhdCBpc3N1ZS4gQW4gZXhhbXBsZSBvZiBhbiBhcHByb3ByaWF0ZSByZWFzb25hYmxlIHN0ZXAgdG8gaW5mb3JtIHdvdWxkIGJlIHBvc3RpbmcgYW4gYW5ub3VuY2VtZW50IG9uIGFuIGFwcHJvcHJpYXRlIHdlYiBidWxsZXRpbiBib2FyZC4KKworVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGFyZSBkZWVtZWQgdG8gYmUgc2V2ZXJhYmxlLCBhbmQgdGhlIGludmFsaWRpdHkgb3IgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgcHJvdmlzaW9uIHNoYWxsIG5vdCBhZmZlY3Qgb3IgaW1wYWlyIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyB3aGljaCBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIEluIHN1YnN0aXR1dGlvbiBmb3IgYW55IHByb3Zpc2lvbiBoZWxkIHVubGF3ZnVsLCB0aGVyZSBzaGFsbCBiZSBzdWJzdGl0dXRlZCBhIHByb3Zpc2lvbiBvZiBzaW1pbGFyIGltcG9ydCByZWZsZWN0aW5nIHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHRvIHRoZSBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgbGF3LgorCitUaGUgT3JpZ2luYWwgQ29udHJpYnV0b3IgZnJvbSB0aW1lIHRvIHRpbWUgbWF5IGNoYW5nZSB0aGlzIExpY2Vuc2UsIGFuZCB0aGUgYW1lbmRlZCBsaWNlbnNlIHdpbGwgYXBwbHkgdG8gYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBkb3dubG9hZGVkIGFmdGVyIHRoZSBuZXcgbGljZW5zZSBpcyBwb3N0ZWQuIFRoaXMgTGljZW5zZSBncmFudHMgb25seSB0aGUgcmlnaHRzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluIGFuZCBwcm92aWRlcyB5b3Ugd2l0aCBubyBpbXBsaWVkIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvci4KKworVGhpcyBMaWNlbnNlIGlzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudCBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIGFuZCBtYXkgbm90IGJlIGFtZW5kZWQgZXhjZXB0IGJ5IHRoZSB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgcGFydGllcy4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBPaGlvIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBwcmluY2lwbGVzIG9mIGNvbmZsaWN0cyBvZiBsYXcuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlmMTQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09EYkwtMS4wCkBAIC0wLDAgKzEsNTQzIEBACisKKyMjIE9EQyBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpCisKKyMjIyBQcmVhbWJsZQorCitUaGUgT3BlbiBEYXRhYmFzZSBMaWNlbnNlIChPRGJMKSBpcyBhIGxpY2Vuc2UgYWdyZWVtZW50IGludGVuZGVkIHRvCithbGxvdyB1c2VycyB0byBmcmVlbHkgc2hhcmUsIG1vZGlmeSwgYW5kIHVzZSB0aGlzIERhdGFiYXNlIHdoaWxlCittYWludGFpbmluZyB0aGlzIHNhbWUgZnJlZWRvbSBmb3Igb3RoZXJzLiBNYW55IGRhdGFiYXNlcyBhcmUgY292ZXJlZCBieQorY29weXJpZ2h0LCBhbmQgdGhlcmVmb3JlIHRoaXMgZG9jdW1lbnQgbGljZW5zZXMgdGhlc2UgcmlnaHRzLiBTb21lCitqdXJpc2RpY3Rpb25zLCBtYWlubHkgaW4gdGhlIEV1cm9wZWFuIFVuaW9uLCBoYXZlIHNwZWNpZmljIHJpZ2h0cyB0aGF0Citjb3ZlciBkYXRhYmFzZXMsIGFuZCBzbyB0aGUgT0RiTCBhZGRyZXNzZXMgdGhlc2UgcmlnaHRzLCB0b28uIEZpbmFsbHksCit0aGUgT0RiTCBpcyBhbHNvIGFuIGFncmVlbWVudCBpbiBjb250cmFjdCBmb3IgdXNlcnMgb2YgdGhpcyBEYXRhYmFzZSB0bworYWN0IGluIGNlcnRhaW4gd2F5cyBpbiByZXR1cm4gZm9yIGFjY2Vzc2luZyB0aGlzIERhdGFiYXNlLgorCitEYXRhYmFzZXMgY2FuIGNvbnRhaW4gYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgY29udGVudCAoaW1hZ2VzLAorYXVkaW92aXN1YWwgbWF0ZXJpYWwsIGFuZCBzb3VuZHMgYWxsIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSksCithbmQgc28gdGhlIE9EYkwgb25seSBnb3Zlcm5zIHRoZSByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UsIGFuZCBub3QgdGhlCitjb250ZW50cyBvZiB0aGUgRGF0YWJhc2UgaW5kaXZpZHVhbGx5LiBMaWNlbnNvcnMgc2hvdWxkIHVzZSB0aGUgT0RiTAordG9nZXRoZXIgd2l0aCBhbm90aGVyIGxpY2Vuc2UgZm9yIHRoZSBjb250ZW50cywgaWYgdGhlIGNvbnRlbnRzIGhhdmUgYQorc2luZ2xlIHNldCBvZiByaWdodHMgdGhhdCB1bmlmb3JtbHkgY292ZXJzIGFsbCBvZiB0aGUgY29udGVudHMuIElmIHRoZQorY29udGVudHMgaGF2ZSBtdWx0aXBsZSBzZXRzIG9mIGRpZmZlcmVudCByaWdodHMsIExpY2Vuc29ycyBzaG91bGQKK2Rlc2NyaWJlIHdoYXQgcmlnaHRzIGdvdmVybiB3aGF0IGNvbnRlbnRzIHRvZ2V0aGVyIGluIHRoZSBpbmRpdmlkdWFsCityZWNvcmQgb3IgaW4gc29tZSBvdGhlciB3YXkgdGhhdCBjbGFyaWZpZXMgd2hhdCByaWdodHMgYXBwbHkuIAorCitTb21ldGltZXMgdGhlIGNvbnRlbnRzIG9mIGEgZGF0YWJhc2UsIG9yIHRoZSBkYXRhYmFzZSBpdHNlbGYsIGNhbiBiZQorY292ZXJlZCBieSBvdGhlciByaWdodHMgbm90IGFkZHJlc3NlZCBoZXJlIChzdWNoIGFzIHByaXZhdGUgY29udHJhY3RzLAordHJhZGUgbWFyayBvdmVyIHRoZSBuYW1lLCBvciBwcml2YWN5IHJpZ2h0cyAvIGRhdGEgcHJvdGVjdGlvbiByaWdodHMKK292ZXIgaW5mb3JtYXRpb24gaW4gdGhlIGNvbnRlbnRzKSwgYW5kIHNvIHlvdSBhcmUgYWR2aXNlZCB0aGF0IHlvdSBtYXkKK2hhdmUgdG8gY29uc3VsdCBvdGhlciBkb2N1bWVudHMgb3IgY2xlYXIgb3RoZXIgcmlnaHRzIGJlZm9yZSBkb2luZworYWN0aXZpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisKKy0tLS0tLQorCitUaGUgTGljZW5zb3IgKGFzIGRlZmluZWQgYmVsb3cpIAorCithbmQgCisKK1lvdSAoYXMgZGVmaW5lZCBiZWxvdykgCisKK2FncmVlIGFzIGZvbGxvd3M6IAorCisjIyMgMS4wIERlZmluaXRpb25zIG9mIENhcGl0YWxpc2VkIFdvcmRzCisKKyJDb2xsZWN0aXZlIERhdGFiYXNlIiAmIzgyMTE7IE1lYW5zIHRoaXMgRGF0YWJhc2UgaW4gdW5tb2RpZmllZCBmb3JtIGFzIHBhcnQKK29mIGEgY29sbGVjdGlvbiBvZiBpbmRlcGVuZGVudCBkYXRhYmFzZXMgaW4gdGhlbXNlbHZlcyB0aGF0IHRvZ2V0aGVyIGFyZQorYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUKK0RhdGFiYXNlIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIERhdGFiYXNlLgorCisiQ29udmV5IiAmIzgyMTE7IEFzIGEgdmVyYiwgbWVhbnMgVXNpbmcgdGhlIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsCitvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgaW4gYW55IHdheSB0aGF0IGVuYWJsZXMKK2EgUGVyc29uIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2UuICBDb252ZXlpbmcgZG9lcyBub3QgaW5jbHVkZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEKK2NvbXB1dGVyIG5ldHdvcmssIG9yIGNyZWF0aW5nIGFuZCBVc2luZyBhIFByb2R1Y2VkIFdvcmssIHdoZXJlIG5vCit0cmFuc2ZlciBvZiBhIGNvcHkgb2YgdGhlIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvY2N1cnMuCisiQ29udGVudHMiICYjODIxMTsgVGhlIGNvbnRlbnRzIG9mIHRoaXMgRGF0YWJhc2UsIHdoaWNoIGluY2x1ZGVzIHRoZQoraW5mb3JtYXRpb24sIGluZGVwZW5kZW50IHdvcmtzLCBvciBvdGhlciBtYXRlcmlhbCBjb2xsZWN0ZWQgaW50byB0aGUKK0RhdGFiYXNlLiBGb3IgZXhhbXBsZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBjb3VsZCBiZSBmYWN0dWFsCitkYXRhIG9yIHdvcmtzIHN1Y2ggYXMgaW1hZ2VzLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwgb3Igc291bmRzLgorCisiRGF0YWJhc2UiICYjODIxMTsgQSBjb2xsZWN0aW9uIG9mIG1hdGVyaWFsICh0aGUgQ29udGVudHMpIGFycmFuZ2VkIGluIGEKK3N5c3RlbWF0aWMgb3IgbWV0aG9kaWNhbCB3YXkgYW5kIGluZGl2aWR1YWxseSBhY2Nlc3NpYmxlIGJ5IGVsZWN0cm9uaWMKK29yIG90aGVyIG1lYW5zIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworIkRhdGFiYXNlIERpcmVjdGl2ZSIgJiM4MjExOyBNZWFucyBEaXJlY3RpdmUgOTYvOS9FQyBvZiB0aGUgRXVyb3BlYW4KK1BhcmxpYW1lbnQgYW5kIG9mIHRoZSBDb3VuY2lsIG9mIDExIE1hcmNoIDE5OTYgb24gdGhlIGxlZ2FsIHByb3RlY3Rpb24KK29mIGRhdGFiYXNlcywgYXMgYW1lbmRlZCBvciBzdWNjZWVkZWQuCisKKyJEYXRhYmFzZSBSaWdodCIgJiM4MjExOyBNZWFucyByaWdodHMgcmVzdWx0aW5nIGZyb20gdGhlIENoYXB0ZXIgSUlJICgic3VpCitnZW5lcmlzIikgcmlnaHRzIGluIHRoZSBEYXRhYmFzZSBEaXJlY3RpdmUgKGFzIGFtZW5kZWQgYW5kIGFzIHRyYW5zcG9zZWQKK2J5IG1lbWJlciBzdGF0ZXMpLCB3aGljaCBpbmNsdWRlcyB0aGUgRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YKK3RoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBhcyB3ZWxsIGFzIGFueSBzaW1pbGFyCityaWdodHMgYXZhaWxhYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbiAxMC40LiAKKworIkRlcml2YXRpdmUgRGF0YWJhc2UiICYjODIxMTsgTWVhbnMgYSBkYXRhYmFzZSBiYXNlZCB1cG9uIHRoZSBEYXRhYmFzZSwgYW5kCitpbmNsdWRlcyBhbnkgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGFycmFuZ2VtZW50LCBtb2RpZmljYXRpb24sIG9yIGFueQorb3RoZXIgYWx0ZXJhdGlvbiBvZiB0aGUgRGF0YWJhc2Ugb3Igb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgRXh0cmFjdGluZyBvcgorUmUtdXRpbGlzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGluIGEgbmV3CitEYXRhYmFzZS4KKworIkV4dHJhY3Rpb24iICYjODIxMTsgTWVhbnMgdGhlIHBlcm1hbmVudCBvciB0ZW1wb3JhcnkgdHJhbnNmZXIgb2YgYWxsIG9yIGEKK1N1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIHRvIGFub3RoZXIgbWVkaXVtIGJ5IGFueSBtZWFucyBvciBpbgorYW55IGZvcm0uCisKKyJMaWNlbnNlIiAmIzgyMTE7IE1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIGlzIGJvdGggYSBsaWNlbnNlIG9mIHJpZ2h0cworc3VjaCBhcyBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cyBhbmQgYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0LgorCisiTGljZW5zb3IiICYjODIxMTsgTWVhbnMgdGhlIFBlcnNvbiB0aGF0IG9mZmVycyB0aGUgRGF0YWJhc2UgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UuIAorCisiUGVyc29uIiAmIzgyMTE7IE1lYW5zIGEgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gb3IgYSBib2R5IG9mIHBlcnNvbnMKK2NvcnBvcmF0ZSBvciBpbmNvcnBvcmF0ZS4KKworIlByb2R1Y2VkIFdvcmsiICYjODIxMTsgIGEgd29yayAoc3VjaCBhcyBhbiBpbWFnZSwgYXVkaW92aXN1YWwgbWF0ZXJpYWwsIHRleHQsCitvciBzb3VuZHMpIHJlc3VsdGluZyBmcm9tIHVzaW5nIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cyAodmlhIGEgc2VhcmNoIG9yIG90aGVyIHF1ZXJ5KSBmcm9tIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZQorRGF0YWJhc2UsIG9yIHRoaXMgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UuICAKKworIlB1YmxpY2x5IiAmIzgyMTE7IG1lYW5zIHRvIFBlcnNvbnMgb3RoZXIgdGhhbiBZb3Ugb3IgdW5kZXIgWW91ciBjb250cm9sIGJ5CitlaXRoZXIgbW9yZSB0aGFuIDUwJSBvd25lcnNoaXAgb3IgYnkgdGhlIHBvd2VyIHRvIGRpcmVjdCB0aGVpcgorYWN0aXZpdGllcyAoc3VjaCBhcyBjb250cmFjdGluZyB3aXRoIGFuIGluZGVwZW5kZW50IGNvbnN1bHRhbnQpLiAKKworIlJlLXV0aWxpc2F0aW9uIiAmIzgyMTE7IG1lYW5zIGFueSBmb3JtIG9mIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBhbGwKK29yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgYnkgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb3BpZXMsIGJ5CityZW50aW5nLCBieSBvbmxpbmUgb3Igb3RoZXIgZm9ybXMgb2YgdHJhbnNtaXNzaW9uLgorCisiU3Vic3RhbnRpYWwiICYjODIxMTsgTWVhbnMgc3Vic3RhbnRpYWwgaW4gdGVybXMgb2YgcXVhbnRpdHkgb3IgcXVhbGl0eSBvciBhCitjb21iaW5hdGlvbiBvZiBib3RoLiBUaGUgcmVwZWF0ZWQgYW5kIHN5c3RlbWF0aWMgRXh0cmFjdGlvbiBvcgorUmUtdXRpbGlzYXRpb24gb2YgaW5zdWJzdGFudGlhbCBwYXJ0cyBvZiB0aGUgQ29udGVudHMgbWF5IGFtb3VudCB0byB0aGUKK0V4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cy4KKworIlVzZSIgJiM4MjExOyBBcyBhIHZlcmIsIG1lYW5zIGRvaW5nIGFueSBhY3QgdGhhdCBpcyByZXN0cmljdGVkIGJ5IGNvcHlyaWdodAorb3IgRGF0YWJhc2UgUmlnaHRzIHdoZXRoZXIgaW4gdGhlIG9yaWdpbmFsIG1lZGl1bSBvciBhbnkgb3RoZXI7IGFuZAoraW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uIGRpc3RyaWJ1dGluZywgY29weWluZywgcHVibGljbHkgcGVyZm9ybWluZywKK3B1YmxpY2x5IGRpc3BsYXlpbmcsIGFuZCBwcmVwYXJpbmcgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRGF0YWJhc2UsIGFzCit3ZWxsIGFzIG1vZGlmeWluZyB0aGUgRGF0YWJhc2UgYXMgbWF5IGJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byB1c2UgaXQKK2luIGEgZGlmZmVyZW50IG1vZGUgb3IgZm9ybWF0LiAKKworIllvdSIgJiM4MjExOyBNZWFucyBhIFBlcnNvbiBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QKK3ByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlCitEYXRhYmFzZSwgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8KK2V4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKworV29yZHMgaW4gdGhlIHNpbmd1bGFyIGluY2x1ZGUgdGhlIHBsdXJhbCBhbmQgdmljZSB2ZXJzYS4KKworIyMjIDIuMCBXaGF0IHRoaXMgTGljZW5zZSBjb3ZlcnMKKworMi4xLiBMZWdhbCBlZmZlY3Qgb2YgdGhpcyBkb2N1bWVudC4gVGhpcyBMaWNlbnNlIGlzOgorCisgIGEuIEEgbGljZW5zZSBvZiBhcHBsaWNhYmxlIGNvcHlyaWdodCBhbmQgbmVpZ2hib3VyaW5nIHJpZ2h0czsKKworICBiLiBBIGxpY2Vuc2Ugb2YgdGhlIERhdGFiYXNlIFJpZ2h0OyBhbmQKKworICBjLiBBbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QgYmV0d2VlbiBZb3UgYW5kIHRoZSBMaWNlbnNvci4KKworMi4yIExlZ2FsIHJpZ2h0cyBjb3ZlcmVkLiBUaGlzIExpY2Vuc2UgY292ZXJzIHRoZSBsZWdhbCByaWdodHMgaW4gdGhlCitEYXRhYmFzZSwgaW5jbHVkaW5nOgorCisgIGEuIENvcHlyaWdodC4gQW55IGNvcHlyaWdodCBvciBuZWlnaGJvdXJpbmcgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4KKyAgVGhlIGNvcHlyaWdodCBsaWNlbnNlZCBpbmNsdWRlcyBhbnkgaW5kaXZpZHVhbCBlbGVtZW50cyBvZiB0aGUKKyAgRGF0YWJhc2UsIGJ1dCBkb2VzIG5vdCBjb3ZlciB0aGUgY29weXJpZ2h0IG92ZXIgdGhlIENvbnRlbnRzCisgIGluZGVwZW5kZW50IG9mIHRoaXMgRGF0YWJhc2UuIFNlZSBTZWN0aW9uIDIuNCBmb3IgZGV0YWlscy4gQ29weXJpZ2h0CisgIGxhdyB2YXJpZXMgYmV0d2VlbiBqdXJpc2RpY3Rpb25zLCBidXQgaXMgbGlrZWx5IHRvIGNvdmVyOiB0aGUgRGF0YWJhc2UKKyAgbW9kZWwgb3Igc2NoZW1hLCB3aGljaCBpcyB0aGUgc3RydWN0dXJlLCBhcnJhbmdlbWVudCwgYW5kIG9yZ2FuaXNhdGlvbgorICBvZiB0aGUgRGF0YWJhc2UsIGFuZCBjYW4gYWxzbyBpbmNsdWRlIHRoZSBEYXRhYmFzZSB0YWJsZXMgYW5kIHRhYmxlCisgIGluZGV4ZXM7IHRoZSBkYXRhIGVudHJ5IGFuZCBvdXRwdXQgc2hlZXRzOyBhbmQgdGhlIEZpZWxkIG5hbWVzIG9mCisgIENvbnRlbnRzIHN0b3JlZCBpbiB0aGUgRGF0YWJhc2U7CisKKyAgYi4gRGF0YWJhc2UgUmlnaHRzLiBEYXRhYmFzZSBSaWdodHMgb25seSBleHRlbmQgdG8gdGhlIEV4dHJhY3Rpb24gYW5kCisgIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLgorICBEYXRhYmFzZSBSaWdodHMgY2FuIGFwcGx5IGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjb3B5cmlnaHQgb3ZlciB0aGUKKyAgRGF0YWJhc2UuIERhdGFiYXNlIFJpZ2h0cyBjYW4gYWxzbyBhcHBseSB3aGVuIHRoZSBDb250ZW50cyBhcmUgcmVtb3ZlZAorICBmcm9tIHRoZSBEYXRhYmFzZSBhbmQgYXJlIHNlbGVjdGVkIGFuZCBhcnJhbmdlZCBpbiBhIHdheSB0aGF0IHdvdWxkCisgIG5vdCBpbmZyaW5nZSBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQ7IGFuZAorCisgIGMuIENvbnRyYWN0LiBUaGlzIGlzIGFuIGFncmVlbWVudCBiZXR3ZWVuIFlvdSBhbmQgdGhlIExpY2Vuc29yIGZvcgorICBhY2Nlc3MgdG8gdGhlIERhdGFiYXNlLiBJbiByZXR1cm4geW91IGFncmVlIHRvIGNlcnRhaW4gY29uZGl0aW9ucyBvZgorICB1c2Ugb24gdGhpcyBhY2Nlc3MgYXMgb3V0bGluZWQgaW4gdGhpcyBMaWNlbnNlLiAKKworMi4zIFJpZ2h0cyBub3QgY292ZXJlZC4gCisKKyAgYS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGNvbXB1dGVyIHByb2dyYW1zIHVzZWQgaW4gdGhlIG1ha2luZworICBvciBvcGVyYXRpb24gb2YgdGhlIERhdGFiYXNlOyAKKworICBiLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHBhdGVudHMgb3ZlciB0aGUgQ29udGVudHMgb3IgdGhlCisgIERhdGFiYXNlOyBhbmQKKworICBjLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHRyYWRlbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoZQorICBEYXRhYmFzZS4gCisKKzIuNCBSZWxhdGlvbnNoaXAgdG8gQ29udGVudHMgaW4gdGhlIERhdGFiYXNlLiBUaGUgaW5kaXZpZHVhbCBpdGVtcyBvZgordGhlIENvbnRlbnRzIGNvbnRhaW5lZCBpbiB0aGlzIERhdGFiYXNlIG1heSBiZSBjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cywKK2luY2x1ZGluZyBjb3B5cmlnaHQsIHBhdGVudCwgZGF0YSBwcm90ZWN0aW9uLCBwcml2YWN5LCBvciBwZXJzb25hbGl0eQorcmlnaHRzLCBhbmQgdGhpcyBMaWNlbnNlIGRvZXMgbm90IGNvdmVyIGFueSByaWdodHMgKG90aGVyIHRoYW4gRGF0YWJhc2UKK1JpZ2h0cyBvciBpbiBjb250cmFjdCkgaW4gaW5kaXZpZHVhbCBDb250ZW50cyBjb250YWluZWQgaW4gdGhlIERhdGFiYXNlLgorRm9yIGV4YW1wbGUsIGlmIHVzZWQgb24gYSBEYXRhYmFzZSBvZiBpbWFnZXMgKHRoZSBDb250ZW50cyksIHRoaXMKK0xpY2Vuc2Ugd291bGQgbm90IGFwcGx5IHRvIGNvcHlyaWdodCBvdmVyIGluZGl2aWR1YWwgaW1hZ2VzLCB3aGljaCBjb3VsZAoraGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgbGljZW5zZXMsIG9yIG9uZSBzaW5nbGUgbGljZW5zZSBjb3ZlcmluZyBhbGwgb2YKK3RoZSByaWdodHMgb3ZlciB0aGUgaW1hZ2VzLiAgCisKKyMjIyAzLjAgUmlnaHRzIGdyYW50ZWQKKworMy4xIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIExpY2Vuc29yCitncmFudHMgdG8gWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHRlcm1pbmFibGUgKGJ1dAorb25seSB1bmRlciBTZWN0aW9uIDkpIGxpY2Vuc2UgdG8gVXNlIHRoZSBEYXRhYmFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mCithbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgYW5kIERhdGFiYXNlIFJpZ2h0cy4gVGhlc2UgcmlnaHRzIGV4cGxpY2l0bHkKK2luY2x1ZGUgY29tbWVyY2lhbCB1c2UsIGFuZCBkbyBub3QgZXhjbHVkZSBhbnkgZmllbGQgb2YgZW5kZWF2b3VyLiBUbwordGhlIGV4dGVudCBwb3NzaWJsZSBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uLCB0aGVzZSByaWdodHMgbWF5IGJlCitleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGNyZWF0ZWQgaW4gdGhlCitmdXR1cmUuIAorCitUaGUgcmlnaHRzIGdyYW50ZWQgY292ZXIsIGZvciBleGFtcGxlOgorCisgIGEuIEV4dHJhY3Rpb24gYW5kIFJlLXV0aWxpc2F0aW9uIG9mIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YKKyAgdGhlIENvbnRlbnRzOworCisgIGIuIENyZWF0aW9uIG9mIERlcml2YXRpdmUgRGF0YWJhc2VzOworCisgIGMuIENyZWF0aW9uIG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzOworCisgIGQuIENyZWF0aW9uIG9mIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQgcmVwcm9kdWN0aW9ucyBieSBhbnkgbWVhbnMgYW5kCisgIGluIGFueSBmb3JtLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBpbmNsdWRpbmcgb2YgYW55IERlcml2YXRpdmUKKyAgRGF0YWJhc2VzIG9yIGFzIGEgcGFydCBvZiBDb2xsZWN0aXZlIERhdGFiYXNlczsgYW5kCisKKyAgZS4gRGlzdHJpYnV0aW9uLCBjb21tdW5pY2F0aW9uLCBkaXNwbGF5LCBsZW5kaW5nLCBtYWtpbmcgYXZhaWxhYmxlLCBvcgorICBwZXJmb3JtYW5jZSB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBhbmQgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluCisgIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvciBhcyBhIHBhcnQgb2YgQ29sbGVjdGl2ZQorICBEYXRhYmFzZXMuCisKKzMuMiBDb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKKyAgYS4gTm9uLXdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluCisgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcworICB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3UKKyAgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKKworICBiLiBXYWl2YWJsZSBjb21wdWxzb3J5IGxpY2Vuc2Ugc2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbgorICB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yCisgIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZQorICBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZgorICB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOyBhbmQsCisKKyAgYy4gVm9sdW50YXJ5IGxpY2Vuc2Ugc2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdAorICByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMKKyAgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nCisgIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzCisgIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCiszLjMgVGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcywgb3IgdG8gc3RvcAorZGlzdHJpYnV0aW5nIG9yIG1ha2luZyBhdmFpbGFibGUgdGhlIERhdGFiYXNlLCBpcyByZXNlcnZlZC4gTm90ZSB0aGF0Cit0aGlzIERhdGFiYXNlIG1heSBiZSBtdWx0aXBsZS1saWNlbnNlZCwgYW5kIHNvIFlvdSBtYXkgaGF2ZSB0aGUgY2hvaWNlCitvZiB1c2luZyBhbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgdGhpcyBEYXRhYmFzZS4gU3ViamVjdCB0byBTZWN0aW9uCisxMC40LCBhbGwgb3RoZXIgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgcmVzZXJ2ZWQuCisKKyMjIyA0LjAgQ29uZGl0aW9ucyBvZiBVc2UKKworNC4xIFRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgYXJlIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8KK1lvdXIgY29tcGx5aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG9mIHVzZS4gVGhlc2UgYXJlIGltcG9ydGFudAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBpZiBZb3UgZmFpbCB0byBmb2xsb3cgdGhlbSwgWW91IHdpbGwgYmUKK2luIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMuCisKKzQuMiBOb3RpY2VzLiBJZiBZb3UgUHVibGljbHkgQ29udmV5IHRoaXMgRGF0YWJhc2UsIGFueSBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCB0aGVuIFlvdQorbXVzdDogCisKKyAgYS4gRG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGFub3RoZXIgbGljZW5zZQorICBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0LjQ7CisKKyAgYi4gSW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChvciwgYXMgYXBwbGljYWJsZSwgYSBsaWNlbnNlCisgIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQuNCkgb3IgaXRzIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKQorICB3aXRoIHRoZSBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlLCBpbmNsdWRpbmcgYm90aCBpbiB0aGUKKyAgRGF0YWJhc2Ugb3IgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgaW4gYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb247IGFuZAorCisgIGMuIEtlZXAgaW50YWN0IGFueSBjb3B5cmlnaHQgb3IgRGF0YWJhc2UgUmlnaHQgbm90aWNlcyBhbmQgbm90aWNlcworICB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZS4KKworICBkLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSByZXF1aXJlZCBub3RpY2VzIGluIGEgcGFydGljdWxhcgorICBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgdGhlIG5vdGljZXMgaW4gYQorICBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgdXNlcnMgd291bGQgYmUgbGlrZWx5IHRvCisgIGxvb2sgZm9yIGl0LgorCis0LjMgTm90aWNlIGZvciB1c2luZyBvdXRwdXQgKENvbnRlbnRzKS4gQ3JlYXRpbmcgYW5kIFVzaW5nIGEgUHJvZHVjZWQKK1dvcmsgZG9lcyBub3QgcmVxdWlyZSB0aGUgbm90aWNlIGluIFNlY3Rpb24gNC4yLiBIb3dldmVyLCBpZiB5b3UKK1B1YmxpY2x5IFVzZSBhIFByb2R1Y2VkIFdvcmssIFlvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgYXNzb2NpYXRlZCB3aXRoCit0aGUgUHJvZHVjZWQgV29yayByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gbWFrZSBhbnkgUGVyc29uIHRoYXQgdXNlcywKK3ZpZXdzLCBhY2Nlc3NlcywgaW50ZXJhY3RzIHdpdGgsIG9yIGlzIG90aGVyd2lzZSBleHBvc2VkIHRvIHRoZSBQcm9kdWNlZAorV29yayBhd2FyZSB0aGF0IENvbnRlbnQgd2FzIG9idGFpbmVkIGZyb20gdGhlIERhdGFiYXNlLCBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhlIERhdGFiYXNlIGFzIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlLCBhbmQgdGhhdCBpdAoraXMgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICBhLiBFeGFtcGxlIG5vdGljZS4gVGhlIGZvbGxvd2luZyB0ZXh0IHdpbGwgc2F0aXNmeSBub3RpY2UgdW5kZXIKKyAgU2VjdGlvbiA0LjM6CisKKyAgICAgICAgQ29udGFpbnMgaW5mb3JtYXRpb24gZnJvbSBEQVRBQkFTRSBOQU1FLCB3aGljaCBpcyBtYWRlIGF2YWlsYWJsZQorICAgICAgICBoZXJlIHVuZGVyIHRoZSBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpLgorCitEQVRBQkFTRSBOQU1FIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBEYXRhYmFzZSBhbmQgYQoraHlwZXJsaW5rIHRvIHRoZSBVUkkgb2YgdGhlIERhdGFiYXNlLiAiT3BlbiBEYXRhYmFzZSBMaWNlbnNlIiBzaG91bGQKK2NvbnRhaW4gYSBoeXBlcmxpbmsgdG8gdGhlIFVSSSBvZiB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UuIElmCitoeXBlcmxpbmtzIGFyZSBub3QgcG9zc2libGUsIFlvdSBzaG91bGQgaW5jbHVkZSB0aGUgcGxhaW4gdGV4dCBvZiB0aGUKK3JlcXVpcmVkIFVSSWBzIHdpdGggdGhlIGFib3ZlIG5vdGljZS4KKyAKKzQuNCBTaGFyZSBhbGlrZS4gCisKKyAgYS4gQW55IERlcml2YXRpdmUgRGF0YWJhc2UgdGhhdCBZb3UgUHVibGljbHkgVXNlIG11c3QgYmUgb25seSB1bmRlcgorICB0aGUgdGVybXMgb2Y6IAorCisgICAgaS4gVGhpcyBMaWNlbnNlOworCisgICAgaWkuIEEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhpcworICAgICAgTGljZW5zZTsgb3IKKworICAgIGlpaS4gQSBjb21wYXRpYmxlIGxpY2Vuc2UuIAorCisgIElmIFlvdSBsaWNlbnNlIHRoZSBEZXJpdmF0aXZlIERhdGFiYXNlIHVuZGVyIG9uZSBvZiB0aGUgbGljZW5zZXMKKyAgbWVudGlvbmVkIGluIChpaWkpLCBZb3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiAKKworICBiLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiB0aGUKKyAgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBpbnRvIGEgbmV3IGRhdGFiYXNlIGlzIGEKKyAgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhbmQgbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC4gCisKKyAgYy4gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgYW5kIFByb2R1Y2VkIFdvcmtzLiAgQSBEZXJpdmF0aXZlIERhdGFiYXNlIGlzCisgIFB1YmxpY2x5IFVzZWQgYW5kIHNvIG11c3QgY29tcGx5IHdpdGggU2VjdGlvbiA0LjQuIGlmIGEgUHJvZHVjZWQgV29yaworICBjcmVhdGVkIGZyb20gdGhlIERlcml2YXRpdmUgRGF0YWJhc2UgaXMgUHVibGljbHkgVXNlZC4KKworICBkLiBTaGFyZSBBbGlrZSBhbmQgYWRkaXRpb25hbCBDb250ZW50cy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsCisgIFlvdSBtdXN0IG5vdCBhZGQgQ29udGVudHMgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMgdW5kZXIgU2VjdGlvbiA0LjQgYQorICB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAKKworICBlLiBDb21wYXRpYmxlIGxpY2Vuc2VzLiBMaWNlbnNvcnMgbWF5IGF1dGhvcmlzZSBhIHByb3h5IHRvIGRldGVybWluZQorICBjb21wYXRpYmxlIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb24gNC40IGEgaWlpLiBJZiB0aGV5IGRvIHNvLCB0aGUKKyAgYXV0aG9yaXNlZCBwcm94eWBzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIGNvbXBhdGlibGUKKyAgbGljZW5zZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlIHRoZSBjb21wYXRpYmxlIGxpY2Vuc2UuCisKKworNC41IExpbWl0cyBvZiBTaGFyZSBBbGlrZS4gIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiA0LjQgZG8gbm90IGFwcGx5CitpbiB0aGUgZm9sbG93aW5nOgorCisgIGEuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBsaWNlbnNlCisgIENvbGxlY3RpdmUgRGF0YWJhc2VzIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3UgaW5jb3Jwb3JhdGUgdGhpcworICBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gdGhlIGNvbGxlY3Rpb24sIGJ1dCB0aGlzIExpY2Vuc2UKKyAgc3RpbGwgYXBwbGllcyB0byB0aGlzIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBhcyBhIHBhcnQgb2YKKyAgdGhlIENvbGxlY3RpdmUgRGF0YWJhc2U7IAorCisgIGIuIFVzaW5nIHRoaXMgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcworICBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSB0byBjcmVhdGUgYSBQcm9kdWNlZCBXb3JrIGRvZXMgbm90CisgIGNyZWF0ZSBhIERlcml2YXRpdmUgRGF0YWJhc2UgZm9yIHB1cnBvc2VzIG9mICBTZWN0aW9uIDQuNDsgYW5kCisKKyAgYy4gVXNlIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbnRlcm5hbGx5IHdpdGhpbiBhbiBvcmdhbmlzYXRpb24gaXMKKyAgbm90IHRvIHRoZSBwdWJsaWMgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByZXF1aXJlbWVudHMKKyAgb2YgU2VjdGlvbiA0LjQuCisKKzQuNiBBY2Nlc3MgdG8gRGVyaXZhdGl2ZSBEYXRhYmFzZXMuIElmIFlvdSBQdWJsaWNseSBVc2UgYSBEZXJpdmF0aXZlCitEYXRhYmFzZSBvciBhIFByb2R1Y2VkIFdvcmsgZnJvbSBhIERlcml2YXRpdmUgRGF0YWJhc2UsIFlvdSBtdXN0IGFsc28KK29mZmVyIHRvIHJlY2lwaWVudHMgb2YgdGhlIERlcml2YXRpdmUgRGF0YWJhc2Ugb3IgUHJvZHVjZWQgV29yayBhIGNvcHkKK2luIGEgbWFjaGluZSByZWFkYWJsZSBmb3JtIG9mOgorCisgIGEuIFRoZSBlbnRpcmUgRGVyaXZhdGl2ZSBEYXRhYmFzZTsgb3IKKworICBiLiBBIGZpbGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGFsdGVyYXRpb25zIG1hZGUgdG8gdGhlIERhdGFiYXNlIG9yCisgIHRoZSBtZXRob2Qgb2YgbWFraW5nIHRoZSBhbHRlcmF0aW9ucyB0byB0aGUgRGF0YWJhc2UgKHN1Y2ggYXMgYW4KKyAgYWxnb3JpdGhtKSwgaW5jbHVkaW5nIGFueSBhZGRpdGlvbmFsIENvbnRlbnRzLCB0aGF0IG1ha2UgdXAgYWxsIHRoZQorICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBEYXRhYmFzZSBhbmQgdGhlIERlcml2YXRpdmUgRGF0YWJhc2UuCisKK1RoZSBEZXJpdmF0aXZlIERhdGFiYXNlICh1bmRlciBhLikgb3IgYWx0ZXJhdGlvbiBmaWxlICh1bmRlciBiLikgbXVzdCBiZQorYXZhaWxhYmxlIGF0IG5vIG1vcmUgdGhhbiBhIHJlYXNvbmFibGUgcHJvZHVjdGlvbiBjb3N0IGZvciBwaHlzaWNhbAorZGlzdHJpYnV0aW9ucyBhbmQgZnJlZSBvZiBjaGFyZ2UgaWYgZGlzdHJpYnV0ZWQgb3ZlciB0aGUgaW50ZXJuZXQuCisKKzQuNyBUZWNobm9sb2dpY2FsIG1lYXN1cmVzIGFuZCBhZGRpdGlvbmFsIHRlcm1zCisKKyAgYS4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFsbG93IFlvdSB0byBpbXBvc2UgKGV4Y2VwdCBzdWJqZWN0IHRvCisgIFNlY3Rpb24gNC43IGIuKSAgYW55IHRlcm1zIG9yIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZQorICBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mCisgIHRoZSBDb250ZW50cyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIG9yIGFueQorICByaWdodHMgZ3JhbnRlZCB1bmRlciBpdCwgb3IgaGF2ZSB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZworICB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cy4KKworICBiLiBQYXJhbGxlbCBkaXN0cmlidXRpb24uIFlvdSBtYXkgaW1wb3NlIHRlcm1zIG9yIHRlY2hub2xvZ2ljYWwKKyAgbWVhc3VyZXMgb24gdGhlIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSB3aG9sZSBvciBhCisgIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIChhICJSZXN0cmljdGVkIERhdGFiYXNlIikgaW4KKyAgY29udHJhdmVudGlvbiBvZiBTZWN0aW9uIDQuNzQgYS4gb25seSBpZiBZb3UgYWxzbyBtYWtlIGEgY29weSBvZiB0aGUKKyAgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGF2YWlsYWJsZSB0byB0aGUgcmVjaXBpZW50IG9mIHRoZQorICBSZXN0cmljdGVkIERhdGFiYXNlOgorCisgICAgaS4gVGhhdCBpcyBhdmFpbGFibGUgd2l0aG91dCBhZGRpdGlvbmFsIGZlZTsKKworICAgIGlpLiBUaGF0IGlzIGF2YWlsYWJsZSBpbiBhIG1lZGl1bSB0aGF0IGRvZXMgbm90IGFsdGVyIG9yIHJlc3RyaWN0CisgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgb3IgYW55IHJpZ2h0cyBncmFudGVkIHVuZGVyIGl0LCBvciBoYXZlCisgICAgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcgdGhlIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0bworICAgIGV4ZXJjaXNlIHRob3NlIHJpZ2h0cyAoYW4gIlVucmVzdHJpY3RlZCBEYXRhYmFzZSIpOyBhbmQKKworICAgIGlpaS4gVGhlIFVucmVzdHJpY3RlZCBEYXRhYmFzZSBpcyBhdCBsZWFzdCBhcyBhY2Nlc3NpYmxlIHRvIHRoZQorICAgIHJlY2lwaWVudCBhcyBhIHByYWN0aWNhbCBtYXR0ZXIgYXMgdGhlIFJlc3RyaWN0ZWQgRGF0YWJhc2UuCisKKyAgYy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgcGxhY2UgdGhpcyBEYXRhYmFzZSBvciBhCisgIERlcml2YXRpdmUgRGF0YWJhc2UgaW4gYW4gYXV0aGVudGljYXRlZCBlbnZpcm9ubWVudCwgYmVoaW5kIGEKKyAgcGFzc3dvcmQsIG9yIHdpdGhpbiBhIHNpbWlsYXIgYWNjZXNzIGNvbnRyb2wgc2NoZW1lIHByb3ZpZGVkIHRoYXQgWW91CisgIGRvIG5vdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGFueSByaWdodHMKKyAgZ3JhbnRlZCB1bmRlciBpdCBvciBoYXZlIHRoZSBlZmZlY3Qgb3IgaW50ZW50IG9mIHJlc3RyaWN0aW5nIHRoZQorICBhYmlsaXR5IG9mIGFueSBwZXJzb24gdG8gZXhlcmNpc2UgdGhvc2UgcmlnaHRzLiAKKworNC44IExpY2Vuc2luZyBvZiBvdGhlcnMuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIERhdGFiYXNlLiBFYWNoIHRpbWUKK1lvdSBjb21tdW5pY2F0ZSB0aGUgRGF0YWJhc2UsIHRoZSB3aG9sZSBvciBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMsIG9yIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIHRvIGFueW9uZSBlbHNlIGluIGFueSB3YXksIHRoZQorTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBEYXRhYmFzZSBvbiB0aGUgc2FtZQordGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhpcyBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IKK2VuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UsIGJ1dCBZb3UgbWF5CitlbmZvcmNlIGFueSByaWdodHMgdGhhdCBZb3UgaGF2ZSBvdmVyIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZS4gWW91IGFyZQorc29sZWx5IHJlc3BvbnNpYmxlIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvZiBhIERlcml2YXRpdmUgRGF0YWJhc2UgbWFkZQorYnkgWW91IG9yIGFub3RoZXIgUGVyc29uIGF0IFlvdXIgZGlyZWN0aW9uLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55CitmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkCit1bmRlciB0aGlzIExpY2Vuc2UuCisKKyMjIyA1LjAgTW9yYWwgcmlnaHRzCisKKzUuMSBNb3JhbCByaWdodHMuIFRoaXMgc2VjdGlvbiBjb3ZlcnMgbW9yYWwgcmlnaHRzLCBpbmNsdWRpbmcgYW55IHJpZ2h0cwordG8gYmUgaWRlbnRpZmllZCBhcyB0aGUgYXV0aG9yIG9mIHRoZSBEYXRhYmFzZSBvciB0byBvYmplY3QgdG8gdHJlYXRtZW50Cit0aGF0IHdvdWxkIG90aGVyd2lzZSBwcmVqdWRpY2UgdGhlIGF1dGhvcmBzIGhvbm91ciBhbmQgcmVwdXRhdGlvbiwgb3IKK2FueSBvdGhlciBkZXJvZ2F0b3J5IHRyZWF0bWVudDoKKworICBhLiBGb3IganVyaXNkaWN0aW9ucyBhbGxvd2luZyB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzLCBMaWNlbnNvciB3YWl2ZXMKKyAgYWxsIG1vcmFsIHJpZ2h0cyB0aGF0IExpY2Vuc29yIG1heSBoYXZlIGluIHRoZSBEYXRhYmFzZSB0byB0aGUgZnVsbGVzdAorICBleHRlbnQgcG9zc2libGUgYnkgdGhlIGxhdyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyIFNlY3Rpb24KKyAgMTAuNDsgCisKKyAgYi4gSWYgd2FpdmVyIG9mIG1vcmFsIHJpZ2h0cyB1bmRlciBTZWN0aW9uIDUuMSBhIGluIHRoZSByZWxldmFudAorICBqdXJpc2RpY3Rpb24gaXMgbm90IHBvc3NpYmxlLCBMaWNlbnNvciBhZ3JlZXMgbm90IHRvIGFzc2VydCBhbnkgbW9yYWwKKyAgcmlnaHRzIG92ZXIgdGhlIERhdGFiYXNlIGFuZCB3YWl2ZXMgYWxsIGNsYWltcyBpbiBtb3JhbCByaWdodHMgdG8gdGhlCisgIGZ1bGxlc3QgZXh0ZW50IHBvc3NpYmxlIGJ5IHRoZSBsYXcgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlcgorICBTZWN0aW9uIDEwLjQ7IGFuZAorCisgIGMuIEZvciBqdXJpc2RpY3Rpb25zIG5vdCBhbGxvd2luZyB3YWl2ZXIgb3IgYW4gYWdyZWVtZW50IG5vdCB0byBhc3NlcnQKKyAgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgYW5kIGIsIHRoZSBhdXRob3IgbWF5IHJldGFpbiB0aGVpcgorICBtb3JhbCByaWdodHMgb3ZlciBjZXJ0YWluIGFzcGVjdHMgb2YgdGhlIERhdGFiYXNlLgorCitQbGVhc2Ugbm90ZSB0aGF0IHNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgZm9yIHRoZSB3YWl2ZXIgb2YgbW9yYWwKK3JpZ2h0cywgYW5kIHNvIG1vcmFsIHJpZ2h0cyBtYXkgc3RpbGwgc3Vic2lzdCBvdmVyIHRoZSBEYXRhYmFzZSBpbiBzb21lCitqdXJpc2RpY3Rpb25zLgorCisjIyMgNi4wIEZhaXIgZGVhbGluZywgRGF0YWJhc2UgZXhjZXB0aW9ucywgYW5kIG90aGVyIHJpZ2h0cyBub3QgYWZmZWN0ZWQgCisKKzYuMSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodHMgdGhhdCBZb3Ugb3IgYW55b25lIGVsc2UgbWF5CitpbmRlcGVuZGVudGx5IGhhdmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IHRvIG1ha2UgYW55IHVzZSBvZiB0aGlzCitEYXRhYmFzZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbjoKKworICBhLiBFeGNlcHRpb25zIHRvIHRoZSBEYXRhYmFzZSBSaWdodCBpbmNsdWRpbmc6IEV4dHJhY3Rpb24gb2YgQ29udGVudHMKKyAgZnJvbSBub24tZWxlY3Ryb25pYyBEYXRhYmFzZXMgZm9yIHByaXZhdGUgcHVycG9zZXMsIEV4dHJhY3Rpb24gZm9yCisgIHB1cnBvc2VzIG9mIGlsbHVzdHJhdGlvbiBmb3IgdGVhY2hpbmcgb3Igc2NpZW50aWZpYyByZXNlYXJjaCwgYW5kCisgIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gZm9yIHB1YmxpYyBzZWN1cml0eSBvciBhbiBhZG1pbmlzdHJhdGl2ZQorICBvciBqdWRpY2lhbCBwcm9jZWR1cmUuIAorCisgIGIuIEZhaXIgZGVhbGluZywgZmFpciB1c2UsIG9yIGFueSBvdGhlciBsZWdhbGx5IHJlY29nbmlzZWQgbGltaXRhdGlvbgorICBvciBleGNlcHRpb24gdG8gaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodCBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuIAorCis2LjIgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9mIGxhd2Z1bCB1c2VycyB0byBFeHRyYWN0CithbmQgUmUtdXRpbGlzZSBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cywgZXZhbHVhdGVkCitxdWFudGl0YXRpdmVseSBvciBxdWFsaXRhdGl2ZWx5LCBmb3IgYW55IHB1cnBvc2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZworY3JlYXRpbmcgYSBEZXJpdmF0aXZlIERhdGFiYXNlIChzdWJqZWN0IHRvIG90aGVyIHJpZ2h0cyBvdmVyIHRoZQorQ29udGVudHMsIHNlZSBTZWN0aW9uIDIuNCkuIFRoZSByZXBlYXRlZCBhbmQgc3lzdGVtYXRpYyBFeHRyYWN0aW9uIG9yCitSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgaG93ZXZlciBhbW91bnQKK3RvIHRoZSBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzLgorCisjIyMgNy4wIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworNy4xIFRoZSBEYXRhYmFzZSBpcyBsaWNlbnNlZCBieSB0aGUgTGljZW5zb3IgImFzIGlzIiBhbmQgd2l0aG91dCBhbnkKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzcywgaW1wbGllZCwgb3IgYXJpc2luZyBieSBzdGF0dXRlLAorY3VzdG9tLCBjb3Vyc2Ugb2YgZGVhbGluZywgb3IgdHJhZGUgdXNhZ2UuIExpY2Vuc29yIHNwZWNpZmljYWxseQorZGlzY2xhaW1zIGFueSBhbmQgYWxsIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlLAorbm9uLWluZnJpbmdlbWVudCwgYWNjdXJhY3kgb3IgY29tcGxldGVuZXNzLCB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZgorZXJyb3JzLCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbWVyY2hhbnRhYmlsaXR5LCBvciBvdGhlcndpc2UuCitTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzLCBzbwordGhpcyBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKyMjIyA4LjAgTGltaXRhdGlvbiBvZiBsaWFiaWxpdHkKKworOC4xIFN1YmplY3QgdG8gYW55IGxpYWJpbGl0eSB0aGF0IG1heSBub3QgYmUgZXhjbHVkZWQgb3IgbGltaXRlZCBieSBsYXcsCit0aGUgTGljZW5zb3IgaXMgbm90IGxpYWJsZSBmb3IsIGFuZCBleHByZXNzbHkgZXhjbHVkZXMsIGFsbCBsaWFiaWxpdHkKK2ZvciBsb3NzIG9yIGRhbWFnZSBob3dldmVyIGFuZCB3aGVuZXZlciBjYXVzZWQgdG8gYW55b25lIGJ5IGFueSB1c2UKK3VuZGVyIHRoaXMgTGljZW5zZSwgd2hldGhlciBieSBZb3Ugb3IgYnkgYW55b25lIGVsc2UsIGFuZCB3aGV0aGVyIGNhdXNlZAorYnkgYW55IGZhdWx0IG9uIHRoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvciBvciBub3QuIFRoaXMgZXhjbHVzaW9uIG9mCitsaWFiaWxpdHkgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgYW55IHNwZWNpYWwsIGluY2lkZW50YWwsCitjb25zZXF1ZW50aWFsLCBwdW5pdGl2ZSwgb3IgZXhlbXBsYXJ5IGRhbWFnZXMgc3VjaCBhcyBsb3NzIG9mIHJldmVudWUsCitkYXRhLCBhbnRpY2lwYXRlZCBwcm9maXRzLCBhbmQgbG9zdCBidXNpbmVzcy4gVGhpcyBleGNsdXNpb24gYXBwbGllcworZXZlbiBpZiB0aGUgTGljZW5zb3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaAorZGFtYWdlcy4KKworOC4yIElmIGxpYWJpbGl0eSBtYXkgbm90IGJlIGV4Y2x1ZGVkIGJ5IGxhdywgaXQgaXMgbGltaXRlZCB0byBhY3R1YWwgYW5kCitkaXJlY3QgZmluYW5jaWFsIGxvc3MgdG8gdGhlIGV4dGVudCBpdCBpcyBjYXVzZWQgYnkgcHJvdmVkIG5lZ2xpZ2VuY2Ugb24KK3RoZSBwYXJ0IG9mIHRoZSBMaWNlbnNvci4KKworIyMjIDkuMCBUZXJtaW5hdGlvbiBvZiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UKKworOS4xIEFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlcyB0aGlzIExpY2Vuc2Ugd2l0aCBpbW1lZGlhdGUgZWZmZWN0IGFuZCB3aXRob3V0Citub3RpY2UgdG8gWW91LiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgUGVyc29ucyB3aG8gaGF2ZSByZWNlaXZlZCB0aGUKK0RhdGFiYXNlLCB0aGUgd2hvbGUgb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cywgRGVyaXZhdGl2ZQorRGF0YWJhc2VzLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UgZnJvbSBZb3UKK3VuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQKK3RoZWlyIHVzZSBpcyBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2Ugb3IgYSBsaWNlbnNlIGdyYW50ZWQKK3VuZGVyIFNlY3Rpb24gNC44IG9mIHRoaXMgTGljZW5zZS4gIFNlY3Rpb25zIDEsIDIsIDcsIDgsIDkgYW5kIDEwIHdpbGwKK3N1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworOS4yIElmIFlvdSBhcmUgbm90IGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3IKK3dpbGwgbm90IHRlcm1pbmF0ZSBZb3VyIHJpZ2h0cyB1bmRlciBpdC4gCisKKzkuMyBVbmxlc3MgdGVybWluYXRlZCB1bmRlciBTZWN0aW9uIDkuMSwgdGhpcyBMaWNlbnNlIGlzIGdyYW50ZWQgdG8gWW91Citmb3IgdGhlIGR1cmF0aW9uIG9mIGFwcGxpY2FibGUgcmlnaHRzIGluIHRoZSBEYXRhYmFzZS4gCisKKzkuNCBSZWluc3RhdGVtZW50IG9mIHJpZ2h0cy4gSWYgeW91IGNlYXNlIGFueSBicmVhY2ggb2YgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBmdWxsIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UKK3dpbGwgYmUgcmVpbnN0YXRlZDoKKworICBhLiBQcm92aXNpb25hbGx5IGFuZCBzdWJqZWN0IHRvIHBlcm1hbmVudCB0ZXJtaW5hdGlvbiB1bnRpbCB0aGUgNjB0aAorICBkYXkgYWZ0ZXIgY2Vzc2F0aW9uIG9mIGJyZWFjaDsgCisKKyAgYi4gUGVybWFuZW50bHkgb24gdGhlIDYwdGggZGF5IGFmdGVyIGNlc3NhdGlvbiBvZiBicmVhY2ggdW5sZXNzCisgIG90aGVyd2lzZSByZWFzb25hYmx5IG5vdGlmaWVkIGJ5IHRoZSBMaWNlbnNvcjsgb3IKKworICBjLiAgUGVybWFuZW50bHkgaWYgcmVhc29uYWJseSBub3RpZmllZCBieSB0aGUgTGljZW5zb3Igb2YgdGhlCisgIHZpb2xhdGlvbiwgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBZb3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2YKKyAgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSBmcm9tICB0aGUgTGljZW5zb3IsIGFuZCBZb3UgY3VyZSB0aGUKKyAgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIgeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1BlcnNvbnMgc3ViamVjdCB0byBwZXJtYW5lbnQgdGVybWluYXRpb24gb2YgcmlnaHRzIGFyZSBub3QgZWxpZ2libGUgdG8KK2JlIGEgcmVjaXBpZW50IGFuZCByZWNlaXZlIGEgbGljZW5zZSB1bmRlciBTZWN0aW9uIDQuOC4KKworOS41IE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlCit0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgb3IKK21ha2luZyBhdmFpbGFibGUgdGhlIERhdGFiYXNlLiBSZWxlYXNpbmcgdGhlIERhdGFiYXNlIHVuZGVyIGRpZmZlcmVudAorbGljZW5zZSB0ZXJtcyBvciBzdG9wcGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBEYXRhYmFzZSB3aWxsIG5vdAord2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcworcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzCitzdGF0ZWQgYWJvdmUuCisKKyMjIyAxMC4wIEdlbmVyYWwKKworMTAuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIGludmFsaWQgb3IKK3VuZW5mb3JjZWFibGUsIHRoYXQgbXVzdCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgordGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCBlYWNoCityZW1haW5pbmcgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSB2YWxpZCBhbmQgZW5mb3JjZWQgdG8gdGhlCitmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiAKKworMTAuMiBUaGlzIExpY2Vuc2UgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoCityZXNwZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlIG92ZXIgdGhlIERhdGFiYXNlLiBJdCByZXBsYWNlcyBhbnkKK2VhcmxpZXIgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0bwordGhlIERhdGFiYXNlLiAKKworMTAuMyBJZiBZb3UgYXJlIGluIGJyZWFjaCBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBZb3Ugd2lsbCBub3QgYmUKK2VudGl0bGVkIHRvIHJlbHkgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0byBjb21wbGFpbiBvZiBhbnkKK2JyZWFjaCBieSB0aGUgTGljZW5zb3IuIAorCisxMC40IENob2ljZSBvZiBsYXcuIFRoaXMgTGljZW5zZSB0YWtlcyBlZmZlY3QgaW4gYW5kIHdpbGwgYmUgZ292ZXJuZWQgYnkKK3RoZSBsYXdzIG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlCitzb3VnaHQgdG8gYmUgZW5mb3JjZWQuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlcgorYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGFuZCBEYXRhYmFzZSBSaWdodHMgaW4gdGhlIHJlbGV2YW50CitqdXJpc2RpY3Rpb24gaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLAordGhlc2UgYWRkaXRpb25hbCByaWdodHMgYXJlIGdyYW50ZWQgaW4gdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIG1lZXQgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09GTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0NGJjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09GTC0xLjEKQEAgLTAsMCArMSw4OCBAQAorCitTSUwgT1BFTiBGT05UIExJQ0VOU0UKKworVmVyc2lvbiAxLjEgLSAyNiBGZWJydWFyeSAyMDA3CisKK1BSRUFNQkxFCitUaGUgZ29hbHMgb2YgdGhlIE9wZW4gRm9udCBMaWNlbnNlIChPRkwpIGFyZSB0byBzdGltdWxhdGUgd29ybGR3aWRlCitkZXZlbG9wbWVudCBvZiBjb2xsYWJvcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24KK2VmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZSBhbmQKK29wZW4gZnJhbWV3b3JrIGluIHdoaWNoIGZvbnRzIG1heSBiZSBzaGFyZWQgYW5kIGltcHJvdmVkIGluIHBhcnRuZXJzaGlwCit3aXRoIG90aGVycy4KKworVGhlIE9GTCBhbGxvd3MgdGhlIGxpY2Vuc2VkIGZvbnRzIHRvIGJlIHVzZWQsIHN0dWRpZWQsIG1vZGlmaWVkIGFuZAorcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUKK2ZvbnRzLCBpbmNsdWRpbmcgYW55IGRlcml2YXRpdmUgd29ya3MsIGNhbiBiZSBidW5kbGVkLCBlbWJlZGRlZCwgCityZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkCituYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywKK2hvd2V2ZXIsIGNhbm5vdCBiZSByZWxlYXNlZCB1bmRlciBhbnkgb3RoZXIgdHlwZSBvZiBsaWNlbnNlLiBUaGUKK3JlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5Cit0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgZm9udHMgb3IgdGhlaXIgZGVyaXZhdGl2ZXMuCisKK0RFRklOSVRJT05TCisiRm9udCBTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodAorSG9sZGVyKHMpIHVuZGVyIHRoaXMgbGljZW5zZSBhbmQgY2xlYXJseSBtYXJrZWQgYXMgc3VjaC4gVGhpcyBtYXkKK2luY2x1ZGUgc291cmNlIGZpbGVzLCBidWlsZCBzY3JpcHRzIGFuZCBkb2N1bWVudGF0aW9uLgorCisiUmVzZXJ2ZWQgRm9udCBOYW1lIiByZWZlcnMgdG8gYW55IG5hbWVzIHNwZWNpZmllZCBhcyBzdWNoIGFmdGVyIHRoZQorY29weXJpZ2h0IHN0YXRlbWVudChzKS4KKworIk9yaWdpbmFsIFZlcnNpb24iIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMgYXMKK2Rpc3RyaWJ1dGVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpLgorCisiTW9kaWZpZWQgVmVyc2lvbiIgcmVmZXJzIHRvIGFueSBkZXJpdmF0aXZlIG1hZGUgYnkgYWRkaW5nIHRvLCBkZWxldGluZywKK29yIHN1YnN0aXR1dGluZyAtLSBpbiBwYXJ0IG9yIGluIHdob2xlIC0tIGFueSBvZiB0aGUgY29tcG9uZW50cyBvZiB0aGUKK09yaWdpbmFsIFZlcnNpb24sIGJ5IGNoYW5naW5nIGZvcm1hdHMgb3IgYnkgcG9ydGluZyB0aGUgRm9udCBTb2Z0d2FyZSB0byBhCituZXcgZW52aXJvbm1lbnQuCisKKyJBdXRob3IiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwKK3dyaXRlciBvciBvdGhlciBwZXJzb24gd2hvIGNvbnRyaWJ1dGVkIHRvIHRoZSBGb250IFNvZnR3YXJlLgorCitQRVJNSVNTSU9OICYgQ09ORElUSU9OUworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhlIEZvbnQgU29mdHdhcmUsIHRvIHVzZSwgc3R1ZHksIGNvcHksIG1lcmdlLCBlbWJlZCwgbW9kaWZ5LAorcmVkaXN0cmlidXRlLCBhbmQgc2VsbCBtb2RpZmllZCBhbmQgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIEZvbnQKK1NvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsCitpbiBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucywgbWF5IGJlIHNvbGQgYnkgaXRzZWxmLgorCisyKSBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgYnVuZGxlZCwKK3JlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgZWFjaCBjb3B5Citjb250YWlucyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLiBUaGVzZSBjYW4gYmUKK2luY2x1ZGVkIGVpdGhlciBhcyBzdGFuZC1hbG9uZSB0ZXh0IGZpbGVzLCBodW1hbi1yZWFkYWJsZSBoZWFkZXJzIG9yCitpbiB0aGUgYXBwcm9wcmlhdGUgbWFjaGluZS1yZWFkYWJsZSBtZXRhZGF0YSBmaWVsZHMgd2l0aGluIHRleHQgb3IKK2JpbmFyeSBmaWxlcyBhcyBsb25nIGFzIHRob3NlIGZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci4KKworMykgTm8gTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgdXNlIHRoZSBSZXNlcnZlZCBGb250CitOYW1lKHMpIHVubGVzcyBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZworQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIHByaW1hcnkgZm9udCBuYW1lIGFzCitwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLgorCis0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250CitTb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCB0byBwcm9tb3RlLCBlbmRvcnNlIG9yIGFkdmVydGlzZSBhbnkKK01vZGlmaWVkIFZlcnNpb24sIGV4Y2VwdCB0byBhY2tub3dsZWRnZSB0aGUgY29udHJpYnV0aW9uKHMpIG9mIHRoZQorQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4KK3Blcm1pc3Npb24uCisKKzUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLAorbXVzdCBiZSBkaXN0cmlidXRlZCBlbnRpcmVseSB1bmRlciB0aGlzIGxpY2Vuc2UsIGFuZCBtdXN0IG5vdCBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8KK3JlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQKK3VzaW5nIHRoZSBGb250IFNvZnR3YXJlLgorCitURVJNSU5BVElPTgorVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlCitub3QgbWV0LgorCitESVNDTEFJTUVSCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00KK09USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGNhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PR1RTTApAQCAtMCwwICsxLDEyMCBAQAorCitUaGUgT3BlbiBHcm91cCBUZXN0IFN1aXRlIExpY2Vuc2UKKworUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoCithIFBhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucworc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUKK3BhY2thZ2UsIHdoaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMKK3RoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworVGVzdGluZyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2Ugb2YKK3N0YW5kYXJkcy1iYXNlZCBwcm9kdWN0cy4KKworRm9yIGJ1eWVyczogYWRlcXVhdGUgY29uZm9ybWFuY2UgdGVzdGluZyBsZWFkcyB0byByZWR1Y2VkCitpbnRlZ3JhdGlvbiBjb3N0cyBhbmQgcHJvdGVjdGlvbiBvZiBpbnZlc3RtZW50cyBpbiBhcHBsaWNhdGlvbnMsCitzb2Z0d2FyZSBhbmQgcGVvcGxlLgorCitGb3Igc29mdHdhcmUgZGV2ZWxvcGVyczogY29uZm9ybWFuY2UgdGVzdGluZyBvZiBwbGF0Zm9ybXMgYW5kCittaWRkbGV3YXJlIGdyZWF0bHkgcmVkdWNlcyB0aGUgY29zdCBvZiBkZXZlbG9waW5nIGFuZCBtYWludGFpbmluZworbXVsdGktcGxhdGZvcm0gYXBwbGljYXRpb24gc29mdHdhcmUuCisKK0ZvciBzdXBwbGllcnM6IEluLWRlcHRoIHRlc3RpbmcgaW5jcmVhc2VzIGN1c3RvbWVyIHNhdGlzZmFjdGlvbiBhbmQKK2tlZXBzIGRldmVsb3BtZW50IGFuZCBzdXBwb3J0IGNvc3RzIGluIGNoZWNrLiBBUEkgY29uZm9ybWFuY2UgaXMKK2hpZ2hseSBtZWFzdXJhYmxlIGFuZCBzdXBwbGllcnMgd2hvIGNsYWltIGl0IG11c3QgYmUgYWJsZSB0bworc3Vic3RhbnRpYXRlIHRoYXQgY2xhaW0uCisKK0FzIHN1Y2gsIHNpbmNlIHRoZXNlIGFyZSBiZW5jaG1hcmsgbWVhc3VyZXMgb2YgY29uZm9ybWFuY2UsIHdlIGZlZWwKK3RoZSBpbnRlZ3JpdHkgb2YgdGVzdCB0b29scyBpcyBvZiBpbXBvcnRhbmNlLiBJbiBvcmRlciB0byBwcmVzZXJ2ZQordGhlIGludGVncml0eSBvZiB0aGUgZXhpc3RpbmcgY29uZm9ybWFuY2UgbW9kZXMgb2YgdGhpcyB0ZXN0CitwYWNrYWdlIGFuZCB0byBwZXJtaXQgcmVjaXBpZW50cyBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzCitwYWNrYWdlIHRvIHJ1biB0aGUgb3JpZ2luYWwgdGVzdCBtb2RlcywgdGhpcyBsaWNlbnNlIHJlcXVpcmVzIHRoYXQKK3RoZSBvcmlnaW5hbCB0ZXN0IG1vZGVzIGJlIHByZXNlcnZlZC4KKworSWYgeW91IGZpbmQgYSBidWcgaW4gb25lIG9mIHRoZSBzdGFuZGFyZHMgbW9kZSB0ZXN0IGNhc2VzLCBwbGVhc2UKK2xldCB1cyBrbm93IHNvIHdlIGNhbiBmZWVkIHRoaXMgYmFjayBpbnRvIHRoZSBvcmlnaW5hbCwgYW5kIGFsc28KK3JhaXNlIGFueSBzcGVjaWZpY2F0aW9uIGlzc3VlcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBib2RpZXMgKGZvcgorZXhhbXBsZSB0aGUgUE9TSVggY29tbWl0dGVlcykuCisKK0RlZmluaXRpb25zOiAKKworICAgICAiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorICAgICBDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisgICAgIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4gCisgICAgICJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcworICAgICBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4gCisgICAgICJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IKKyAgICAgY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuICJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nCisgICAgIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS4gCisgICAgICJSZWFzb25hYmxlIGNvcHlpbmcgZmVlIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlCisgICAgIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlCisgICAgIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdAorICAgICB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkKKyAgICAgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pIAorICAgICAiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0KKyAgICAgaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlCisgICAgIGl0ZW0uIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heQorICAgICByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LiAKKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZgordGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkCit0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQKK2Fzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIKK21vZGlmaWNhdGlvbnMgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodAorSG9sZGVyLiBBIFBhY2thZ2UgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkCit0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwKK3Byb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUKK3N0YXRpbmcgaG93IGFuZCB3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91CitkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOgorCisgICAgIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMgc28gdGhlCisgICAgIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYQorICAgICBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSBhbmQKKyAgICAgdGVzdGNhc2UgdGhhdCBjbGVhcmx5IGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZQorICAgICBTdGFuZGFyZCBWZXJzaW9uLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZQorb3IgZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nOiAKKworICAgICBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBhbmQgdGVzdGNhc2VzIHdpdGgKKyAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBTdGFuZGFyZCBWZXJzaW9uIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZAorICAgICB0ZXN0Y2FzZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseSBkb2N1bWVudGluZyB0aGUKKyAgICAgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aAorICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YKK3RoaXMgUGFja2FnZS4gWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMKK1BhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwKK3lvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5Citjb21tZXJjaWFsKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKQorc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcworUGFja2FnZSBhcyBhIHByb2R1Y3Qgb2YgeW91ciBvd24uCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkCithcyBvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5CitmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyCitnZW5lcmF0ZWQgdGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkCit3aXRoIHRoaXMgUGFja2FnZS4KKworNy5TdWJyb3V0aW5lcyBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBzaGFsbAorbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UuIAorCis4LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvcgorcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24uCisKKzkuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitUaGUgRW5kCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09MREFQLTIuOCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09MREFQLTIuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI1M2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44CkBAIC0wLDAgKzEsNDkgQEAKKworVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlCisgIFZlcnNpb24gMi44LCAxNyBBdWd1c3QgMjAwMworCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorKCJTb2Z0d2FyZSIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkCit0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGZvcm0gbXVzdCByZXRhaW4gY29weXJpZ2h0IHN0YXRlbWVudHMKKyAgIGFuZCBub3RpY2VzLAorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXBwbGljYWJsZSBjb3B5cmlnaHQKKyAgIHN0YXRlbWVudHMgYW5kIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZAorCiszLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBjb250YWluIGEgdmVyYmF0aW0gY29weSBvZiB0aGlzIGRvY3VtZW50LgorCitUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiBtYXkgcmV2aXNlIHRoaXMgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK0VhY2ggcmV2aXNpb24gaXMgZGlzdGluZ3Vpc2hlZCBieSBhIHZlcnNpb24gbnVtYmVyLiAgWW91IG1heSB1c2UKK3RoaXMgU29mdHdhcmUgdW5kZXIgdGVybXMgb2YgdGhpcyBsaWNlbnNlIHJldmlzaW9uIG9yIHVuZGVyIHRoZQordGVybXMgb2YgYW55IHN1YnNlcXVlbnQgcmV2aXNpb24gb2YgdGhlIGxpY2Vuc2UuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9QRU5MREFQIEZPVU5EQVRJT04gQU5EIElUUworQ09OVFJJQlVUT1JTIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiwgSVRTIENPTlRSSUJVVE9SUywgT1IgVEhFIEFVVEhPUihTKQorT1IgT1dORVIoUykgT0YgVEhFIFNPRlRXQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIGFuZCBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIGluCithZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmcKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGl0bGUKK3RvIGNvcHlyaWdodCBpbiB0aGlzIFNvZnR3YXJlIHNoYWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQKK2hvbGRlcnMuCisKK09wZW5MREFQIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIE9wZW5MREFQIEZvdW5kYXRpb24uCisKK0NvcHlyaWdodCAxOTk5LTIwMDMgVGhlIE9wZW5MREFQIEZvdW5kYXRpb24sIFJlZHdvb2QgQ2l0eSwKK0NhbGlmb3JuaWEsIFVTQS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kCitkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YWQwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMS4wCkBAIC0wLDAgKzEsMTY0IEBACisKK1RoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UKK3YuIDEuMAorCitUaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwKK3dvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKQoraGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodAorbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazogIkxpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlCitMaWNlbnNlIHZlcnNpb24gMS4wIgorCitMaWNlbnNlIFRlcm1zCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlCitsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZQorT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MKK3RvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZQorT3BlbiBTb2Z0d2FyZSBMaWNlbnNlOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSwKK3VuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUKK2VtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IgKCJMaWNlbnNlZAorQ2xhaW1zIikgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yay4KK0xpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLAorcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSB1bmRlciB0aGUgTGljZW5zZWQgQ2xhaW1zIHRvCittYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlCitwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kCithbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gYWNjZXNzIGFuZCBtb2RpZnkgdGhlCitPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlCitjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZgordGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlCityaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mCit0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8KK3Blcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzCitMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcKK3RoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseQorZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZQorc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIGV4Y2VwdCBhcworZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLAorc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlCitMaWNlbnNlZCBDbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlCit0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsCitXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdAorTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueQorT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UKK29yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkKK3N1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSBhY2Nlc3NlZCBvcgordXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZQorV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuCithcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLCBvciB1c2VkIHRvCitwcm92aWRlIHNlcnZpY2VzIG9yIG90aGVyd2lzZSBkZWxpdmVyIGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4KK1lvdS4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdQorYWdyZWUgdGhhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugc2hhbGwgYmUgZGVlbWVkIGEKK2Rpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzYpIFdhcnJhbnR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMSUNFTlNPUiBXQVJSQU5UUyBUSEFUIFRIRQorQ09QWVJJR0hUIElOIEFORCBUTyBUSEUgT1JJR0lOQUwgV09SSyBJUyBPV05FRCBCWSBUSEUgTElDRU5TT1IgT1IgVEhBVAorVEhFIE9SSUdJTkFMIFdPUksgSVMgRElTVFJJQlVURUQgQlkgTElDRU5TT1IgVU5ERVIgQSBWQUxJRCBDVVJSRU5UCitMSUNFTlNFIEZST00gVEhFIENPUFlSSUdIVCBPV05FUi4gRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhFCitJTU1FRElBVEVMWSBQUkVDRUVESU5HIFNFTlRFTkNFLCBUSEUgT1JJR0lOQUwgV09SSyBJUyBQUk9WSURFRCBVTkRFUgorVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFksIEVJVEhFUiBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIFdBUlJBTlRZIE9GCitOT04tSU5GUklOR0VNRU5UIEFORCBXQVJSQU5USUVTIFRIQVQgVEhFIE9SSUdJTkFMIFdPUksgSVMgTUVSQ0hBTlRBQkxFCitPUiBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YKK1RIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMKK0FOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gTElDRU5TRSBUTyBPUklHSU5BTCBXT1JLIElTCitHUkFOVEVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis3KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwKK1RIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsCitTSEFMTCBUSEUgTElDRU5TT1IgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORworQVMgQSBSRVNVTFQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIE9SSUdJTkFMIFdPUksgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLAorQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTAorREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQRVJTT04gU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVAorQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSAorUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUgorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04KK0FORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis4KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yCithbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdQorcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLAorYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvcgorYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseQorcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIKK2NvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55CitvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb25zIDEgYW5kIDIgaGVyZWluLCBZb3UgaW5kaWNhdGUKK1lvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitUaGlzIGxpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlcgorZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91cgorZmFpbHVyZSB0byBob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLgorCis5KSBNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQKK3RvIFlvdSBieSB0aGlzIExpY2Vuc2UgaWYgWW91IGZpbGUgYSBsYXdzdWl0IGluIGFueSBjb3VydCBhbGxlZ2luZwordGhhdCBhbnkgT1NJIENlcnRpZmllZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIGFueQorbGljZW5zZSBjb250YWluaW5nIHRoaXMgIk11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbiIgY2xhdXNlCitpbmZyaW5nZXMgYW55IHBhdGVudCBjbGFpbXMgdGhhdCBhcmUgZXNzZW50aWFsIHRvIHVzZSB0aGF0IHNvZnR3YXJlLgorCisxMCkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gWW91IGFncmVlIHRoYXQgYW55IGxhd3N1aXQKK2FyaXNpbmcgdW5kZXIgb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIG1haW50YWluZWQgaW4gdGhlCitjb3VydHMgb2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoCitMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQKK2p1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24KK29mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKK1NhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrCitvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LAorMTcgVS5TLkMuICYjMTY3OyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZAoraW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZgordGhpcyBMaWNlbnNlLgorCisxMSkgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUKK2VudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0CitsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4KK2Nvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMKK3NlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZQoraXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvCit0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxMykgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcworTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEKK2xlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUKK3Rlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eQordGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuCitGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAKK29mIHN1Y2ggZW50aXR5LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzCityZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMKK2xpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQKK3RoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmU1YzllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTIuMApAQCAtMCwwICsxLDQ4IEBACisKK09wZW4gU29mdHdhcmUgTGljZW5zZQordi4gMi4wCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMi4wCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBhZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBzaGFsbCBiZSBkZWVtZWQgYSBkaXN0cmlidXRpb24gYW5kIHNoYWxsIGJlIGxpY2Vuc2VkIHRvIGFsbCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhcyBwcmVzY3JpYmVkIGluIHNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgeW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCAoaSkgYWdhaW5zdCBMaWNlbnNvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSBvciAoaWkpIGFnYWluc3QgYW55IGVudGl0eSB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byB0aGUgT3JpZ2luYWwgV29yayAoYnV0IGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMykgTWlzY2VsbGFuZW91cy4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMyBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1Nzc0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0zLjAKQEAgLTAsMCArMSwyNyBAQAorCitPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKCYjODIyMDtPU0wmIzgyMjE7KSB2LiAzLjAKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGF0ZW50cywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzLgorMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLgorNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3IgcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIGFueSBsaWNlbnNlIHRvIExpY2Vuc29yJiM4MjE3O3MgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgb3IgaW1wb3J0IGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yayBhcyBhIGRpc3RyaWJ1dGlvbiB1bmRlciBzZWN0aW9uIDEoYykuCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBub24taW5mcmluZ2VtZW50LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byB0aGUgT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiwgYXQgYW55IHRpbWUsIFlvdSBleHByZXNzbHkgYXNzZW50ZWQgdG8gdGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIFlvdSBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBhIERlcml2YXRpdmUgV29yaywgWW91IG11c3QgbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhc3NlbnQgb2YgcmVjaXBpZW50cyB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgY29uZGl0aW9ucyB5b3VyIHJpZ2h0cyB0byB1bmRlcnRha2UgdGhlIGFjdGl2aXRpZXMgbGlzdGVkIGluIFNlY3Rpb24gMSwgaW5jbHVkaW5nIHlvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGRvaW5nIHNvIHdpdGhvdXQgaG9ub3JpbmcgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgaXMgcHJvaGliaXRlZCBieSBjb3B5cmlnaHQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nICYjODIyMDtmYWlyIHVzZSYjODIyMTsgb3IgJiM4MjIwO2ZhaXIgZGVhbGluZyYjODIyMTspLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiB5b3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIGNvbmRpdGlvbnMgaW4gU2VjdGlvbiAxKGMpLgorMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMikgQXR0b3JuZXlzJiM4MjE3OyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisxMykgTWlzY2VsbGFuZW91cy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisxNikgTW9kaWZpY2F0aW9uIG9mIFRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGlzIENvcHlyaWdodCAmIzE2OTsgMjAwNSBMYXdyZW5jZSBSb3Nlbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUsIG9yIGNvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgcGVybWl0cyBZb3UgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZSBhcyBhcHBsaWVkIHRvIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIERlcml2YXRpdmUgV29ya3MuIEhvd2V2ZXIsIFlvdSBtYXkgbW9kaWZ5IHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZSBhbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSAiTW9kaWZpZWQgTGljZW5zZSIpIGFuZCBhcHBseSBpdCB0byBvdGhlciBvcmlnaW5hbCB3b3JrcyBvZiBhdXRob3JzaGlwIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiAoaSkgWW91IG1heSBub3QgaW5kaWNhdGUgaW4gYW55IHdheSB0aGF0IHlvdXIgTW9kaWZpZWQgTGljZW5zZSBpcyB0aGUgIk9wZW4gU29mdHdhcmUgTGljZW5zZSIgb3IgIk9TTCIgYW5kIHlvdSBtYXkgbm90IHVzZSB0aG9zZSBuYW1lcyBpbiB0aGUgbmFtZSBvZiB5b3VyIE1vZGlmaWVkIExpY2Vuc2U7IChpaSkgWW91IG11c3QgcmVwbGFjZSB0aGUgbm90aWNlIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGFib3ZlIHdpdGggdGhlIG5vdGljZSAiTGljZW5zZWQgdW5kZXIgPGluc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlPiIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyIG93biB0aGF0IGlzIG5vdCBjb25mdXNpbmdseSBzaW1pbGFyIHRvIHRoZSBub3RpY2UgaW4gdGhpcyBMaWNlbnNlOyBhbmQgKGlpaSkgWW91IG1heSBub3QgY2xhaW0gdGhhdCB5b3VyIG9yaWdpbmFsIHdvcmtzIGFyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkgYW5kIFlvdSBjb21wbHkgd2l0aCBpdHMgbGljZW5zZSByZXZpZXcgYW5kIGNlcnRpZmljYXRpb24gcHJvY2Vzcy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09wZW5TU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNzBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09wZW5TU0wKQEAgLTAsMCArMSwxMDcgQEAKKworT3BlblNTTCBMaWNlbnNlCisKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorIAorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgIGRpc3RyaWJ1dGlvbi4KKyAKKyAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAKKyAgNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAgICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorIAorICA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAgICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgCisgIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgICAgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAgICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTYGAgQU5EIEFOWQorICBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAgKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAKKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCitBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAgYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAgbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAgZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgCisgIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmdgcywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAgSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAgaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgICAgIFRoZSB3b3JkIGBjcnlwdG9ncmFwaGljYCBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAgNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20KKyAgICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIAorICBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvciBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUgY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorIAorCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZiODc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEQKQEAgLTAsMCArMSBAQAorVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgUHVibGljIERvbWFpbiBMaWNlbnNlCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEhQLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjBiMjAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUEhQLTMuMApAQCAtMCwwICsxLDcwIEBACisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgVGhlIFBIUCBMaWNlbnNlLCB2ZXJzaW9uIDMuMDEKK0NvcHlyaWdodCAoYykgMTk5OSAtIDIwMTAgVGhlIFBIUCBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgZGlzdHJpYnV0aW9uLgorIAorICAzLiBUaGUgbmFtZSAiUEhQIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgZ3JvdXBAcGhwLm5ldC4KKyAgCisgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJQSFAiLCBub3IKKyAgICAgbWF5ICJQSFAiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICAgICBmcm9tIGdyb3VwQHBocC5uZXQuICBZb3UgbWF5IGluZGljYXRlIHRoYXQgeW91ciBzb2Z0d2FyZSB3b3JrcyBpbgorICAgICBjb25qdW5jdGlvbiB3aXRoIFBIUCBieSBzYXlpbmcgIkZvbyBmb3IgUEhQIiBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAgICAgaXQgIlBIUCBGb28iIG9yICJwaHBmb28iCisgCisgIDUuIFRoZSBQSFAgR3JvdXAgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorICAgICBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCisgICAgIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorICAgICBPbmNlIGNvdmVyZWQgY29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KKyAgICAgb2YgdGhlIGxpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIGNvdmVyZWQgY29kZQorICAgICB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZQorICAgICBwdWJsaXNoZWQgYnkgdGhlIFBIUCBHcm91cC4gTm8gb25lIG90aGVyIHRoYW4gdGhlIFBIUCBHcm91cCBoYXMKKyAgICAgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBjb3ZlcmVkIGNvZGUgY3JlYXRlZAorICAgICB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBQSFAgc29mdHdhcmUsIGZyZWVseSBhdmFpbGFibGUgZnJvbQorICAgICA8aHR0cDovL3d3dy5waHAubmV0L3NvZnR3YXJlLz4iLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBgYEFTIElTYGAgQU5EIAorQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUEhQCitERVZFTE9QTUVOVCBURUFNIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgUEhQIEdyb3VwLgorCitUaGUgUEhQIEdyb3VwIGNhbiBiZSBjb250YWN0ZWQgdmlhIEVtYWlsIGF0IGdyb3VwQHBocC5uZXQuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQSFAgR3JvdXAgYW5kIHRoZSBQSFAgcHJvamVjdCwgCitwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LnBocC5uZXQ+LgorCitQSFAgaW5jbHVkZXMgdGhlIFplbmQgRW5naW5lLCBmcmVlbHkgYXZhaWxhYmxlIGF0Cis8aHR0cDovL3d3dy56ZW5kLmNvbT4uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qb3N0Z3JlU1FMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjU4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qb3N0Z3JlU1FMCkBAIC0wLDAgKzEsMTQgQEAKKworUG9zdGdyZVNRTCBEYXRhYmFzZSBNYW5hZ2VtZW50IFN5c3RlbQorKGZvcm1lcmx5IGtub3duIGFzIFBvc3RncmVzLCB0aGVuIGFzIFBvc3RncmVzOTUpCisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDEwLCBUaGUgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIGFuZCB3aXRob3V0IGEgd3JpdHRlbiBhZ3JlZW1lbnQgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgSU5DTFVESU5HIExPU1QgUFJPRklUUywgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIE5PIE9CTElHQVRJT05TIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjE4NzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHJvcHJpZXRhcnkKQEAgLTAsMCArMSBAQAorUHJvcHJpZXRhcnkgbGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QeXRob24tMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkM2U4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QeXRob24tMi4wCkBAIC0wLDAgKzEsMTkyIEBACisKK1BZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisoIlBTRiIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kCitvdGhlcndpc2UgdXNpbmcgdGhpcyBzb2Z0d2FyZSAoIlB5dGhvbiIpIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQKK2l0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRgoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0ZgcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRmBzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzCitSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uCitwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24uCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQU0YgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBQU0YgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OCitGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCitBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiwKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55CityZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQKK0xpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIFBTRgordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gQmVPcGVuLmNvbSAoIkJlT3BlbiIpLCBoYXZpbmcgYW4KK29mZmljZSBhdCAxNjAgU2FyYXRvZ2EgQXZlbnVlLCBTYW50YSBDbGFyYSwgQ0EgOTUwNTEsIGFuZCB0aGUKK0luZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZwordGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkCitkb2N1bWVudGF0aW9uICgidGhlIFNvZnR3YXJlIikuCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQmVPcGVuIFB5dGhvbiBMaWNlbnNlCitBZ3JlZW1lbnQsIEJlT3BlbiBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybQorYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kCitvdGhlcndpc2UgdXNlIHRoZSBTb2Z0d2FyZSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLAorcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJlT3BlbiBQeXRob24gTGljZW5zZSBpcyByZXRhaW5lZCBpbiB0aGUKK1NvZnR3YXJlLCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiBCZU9wZW4gaXMgbWFraW5nIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNC4gQkVPUEVOIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRQorU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUworQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkKK0RFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis1LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKK3Jlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgorbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8KK2NyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUKK2JldHdlZW4gQmVPcGVuIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAorcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsKK3NlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55Cit0aGlyZCBwYXJ0eS4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUKK3Blcm1pc3Npb25zIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS4KKworNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworQ05SSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwKK1Jlc2VhcmNoIEluaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwKK1Jlc3RvbiwgVkEgMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24KKygiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEgc29mdHdhcmUgaW4KK3NvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSQoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNi4xCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJYHMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBDTlJJYHMgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykKKzE5OTUtMjAwMSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXM7IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCit2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLiBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJYHMgTGljZW5zZQorQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZQorcXVvdGVzKTogIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgaW4gQ05SSWBzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCB0b2dldGhlciB3aXRoCitQeXRob24gMS42LjEgbWF5IGJlIGxvY2F0ZWQgb24gdGhlIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcKK3VuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6IDE4OTUuMjIvMTAxMy4gVGhpcworQWdyZWVtZW50IG1heSBhbHNvIGJlIG9idGFpbmVkIGZyb20gYSBwcm94eSBzZXJ2ZXIgb24gdGhlIEludGVybmV0Cit1c2luZyB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2hkbC5oYW5kbGUubmV0LzE4OTUuMjIvMTAxMyIuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIDEuNi4xIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlCit0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuCitMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YKK3RoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uIDEuNi4xLgorCis0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42LjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBDTlJJIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiAxLjYuMSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gQ05SSSBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KKzEuNi4xIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDEuNi4xLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBmZWRlcmFsCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3IG9mIHRoZSBVbml0ZWQgU3RhdGVzLCBpbmNsdWRpbmcgd2l0aG91dAorbGltaXRhdGlvbiB0aGUgZmVkZXJhbCBjb3B5cmlnaHQgbGF3LCBhbmQsIHRvIHRoZSBleHRlbnQgc3VjaAorVS5TLiBmZWRlcmFsIGxhdyBkb2VzIG5vdCBhcHBseSwgYnkgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mCitWaXJnaW5pYSwgZXhjbHVkaW5nIFZpcmdpbmlhYHMgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuCitOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2l0aCByZWdhcmQgdG8gZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZAorb24gUHl0aG9uIDEuNi4xIHRoYXQgaW5jb3Jwb3JhdGUgbm9uLXNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IHdhcworcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHRoZQorbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YgVmlyZ2luaWEgc2hhbGwgZ292ZXJuIHRoaXMgTGljZW5zZQorQWdyZWVtZW50IG9ubHkgYXMgdG8gaXNzdWVzIGFyaXNpbmcgdW5kZXIgb3Igd2l0aCByZXNwZWN0IHRvCitQYXJhZ3JhcGhzIDQsIDUsIGFuZCA3IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIE5vdGhpbmcgaW4gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mCithZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuIFRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvcgordHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3IKK3NlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLAoraW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUKK2JvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCitBQ0NFUFQKKworQ1dJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMC45LjAgVEhST1VHSCAxLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sCitUaGUgTmV0aGVybGFuZHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCitzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKK0NlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK1NUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KK1RISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKK0ZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQzM2FiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUVBMLTEuMApAQCAtMCwwICsxLDQ4IEBACisKK1RIRSBRIFBVQkxJQyBMSUNFTlNFIHZlcnNpb24gMS4wCisKK0NvcHlyaWdodCAoQykgMTk5OS0yMDA1IFRyb2xsdGVjaCBBUywgTm9yd2F5LgorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorVGhlIGludGVudCBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gZXN0YWJsaXNoIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgc29mdHdhcmUgcmVndWxhdGVkIGJ5IHRoaXMgbGljZW5zZSB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbW9kZWwuCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBjb250YWluaW5nIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgdGhhdCBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBRIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wLiBTdWNoIHNvZnR3YXJlIGlzIGhlcmVpbiByZWZlcnJlZCB0byBhcyB0aGUgU29mdHdhcmUuIFRoaXMgbGljZW5zZSBjb3ZlcnMgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCB1c2Ugb2YgdGhpcmQtcGFydHkgYXBwbGljYXRpb24gcHJvZ3JhbXMgYmFzZWQgb24gdGhlIFNvZnR3YXJlLCBhbmQgZGV2ZWxvcG1lbnQgb2YgZnJlZSBzb2Z0d2FyZSB3aGljaCB1c2VzIHRoZSBTb2Z0d2FyZS4KKworR3JhbnRlZCBSaWdodHMKKworMS4gWW91IGFyZSBncmFudGVkIHRoZSBub24tZXhjbHVzaXZlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuIFdob2xlIG9yIHBhcnRpYWwgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgb3Igc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UuCisKKzIuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gdW5tb2RpZmllZCBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZSBwYWNrYWdlLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBjb3B5cmlnaHQsIHRyYWRlbWFyayBub3RpY2VzIGFuZCBkaXNjbGFpbWVycywgYXMgcmVsZWFzZWQgYnkgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSwgaXMgZGlzdHJpYnV0ZWQuCisKKzMuIFlvdSBtYXkgbWFrZSBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBhbmQgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGluIGEgZm9ybSB0aGF0IGlzIHNlcGFyYXRlIGZyb20gdGhlIFNvZnR3YXJlLCBzdWNoIGFzIHBhdGNoZXMuIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG1vZGlmaWNhdGlvbnM6CisKK2EuIE1vZGlmaWNhdGlvbnMgbXVzdCBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUuCitiLiBXaGVuIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFyZSByZWxlYXNlZCB1bmRlciB0aGlzIGxpY2Vuc2UsIGEgbm9uLWV4Y2x1c2l2ZSByb3lhbHR5LWZyZWUgcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHRvIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24gaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBzdWNoIHZlcnNpb25zIHJlbWFpbiBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGxpY2Vuc2Uocykgb2YgdGhlIGluaXRpYWwgZGV2ZWxvcGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvciBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZXNlIHJlc3RyaWN0aW9uczoKKworYS4gWW91IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KK2IuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWNpcGllbnRzIG9mIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBkaXN0cmlidXRlZCBTb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBtb2RpZmljYXRpb25zLCB3aXRob3V0IGFueSBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLCBhbmQgcGxhY2UgcHJvbWluZW50IG5vdGljZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBleHBsYWluaW5nIHRoaXMuCisKK2MuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCBtb2RpZmljYXRpb25zIGluY2x1ZGVkIGluIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLgorCis1LiBZb3UgbWF5IHVzZSB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHRvIGNvbXBpbGUsIGxpbmsgYW5kIHJ1biBhcHBsaWNhdGlvbiBwcm9ncmFtcyBsZWdhbGx5IGRldmVsb3BlZCBieSB5b3Ugb3IgYnkgb3RoZXJzLgorCis2LiBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgYW5kIG90aGVyIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUuIFRoZXNlIGl0ZW1zLCB3aGVuIGRpc3RyaWJ1dGVkLCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKworYS4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZXNlIGl0ZW1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSBhbmQgdXNlIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBpdGVtcyB3aXRob3V0IGFueSBjaGFyZ2UgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLgorYi4gWW91IG11c3QgZXhwbGljaXRseSBsaWNlbnNlIGFsbCByZWNpcGllbnRzIG9mIHlvdXIgaXRlbXMgdG8gdXNlIGFuZCByZS1kaXN0cmlidXRlIG9yaWdpbmFsIGFuZCBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgaXRlbXMgaW4gYm90aCBtYWNoaW5lLWV4ZWN1dGFibGUgYW5kIHNvdXJjZSBjb2RlIGZvcm1zLiBUaGUgcmVjaXBpZW50cyBtdXN0IGJlIGFibGUgdG8gZG8gc28gd2l0aG91dCBhbnkgY2hhcmdlcyB3aGF0c29ldmVyLCBhbmQgdGhleSBtdXN0IGJlIGFibGUgdG8gcmUtZGlzdHJpYnV0ZSB0byBhbnlvbmUgdGhleSBjaG9vc2UuCisKK2MuIElmIHRoZSBpdGVtcyBhcmUgbm90IGF2YWlsYWJsZSB0byB0aGUgZ2VuZXJhbCBwdWJsaWMsIGFuZCB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHJlcXVlc3RzIGEgY29weSBvZiB0aGUgaXRlbXMsIHRoZW4geW91IG11c3Qgc3VwcGx5IG9uZS4KKworTGltaXRhdGlvbnMgb2YgTGlhYmlsaXR5CisKK0luIG5vIGV2ZW50IHNoYWxsIHRoZSBpbml0aWFsIGRldmVsb3BlcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBsb3N0IHJldmVudWUgb3IgcHJvZml0cyBvciBvdGhlciBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IGludmFyaWFibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZS4KKworTm8gV2FycmFudHkKKworVGhlIFNvZnR3YXJlIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYXJlIHByb3ZpZGVkIEFTIElTIHdpdGggTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIElOQ0xVRElORyBUSEUgV0FSUkFOVFkgT0YgREVTSUdOLCBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitDaG9pY2Ugb2YgTGF3CisKK1RoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgTGF3cyBvZiBOb3J3YXkuIERpc3B1dGVzIHNoYWxsIGJlIHNldHRsZWQgYnkgT3NsbyBDaXR5IENvdXJ0LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYjQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMQpAQCAtMCwwICsxLDQwMSBAQAorCitSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UgdjEuMQorCisxLiBERUZJTklUSU9OUworCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5Cit0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nCitwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YKK2RhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCitwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKK3doaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbAorQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkKK0NvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kCitpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbAorY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUKK0NvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYQorY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS0KK2FyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIKK2luY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbgorY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zCisoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoCitlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMS4xMy4gIlJlZCBIYXQgQnJhbmRlZCBDb2RlIiBpcyBjb2RlIHRoYXQgUmVkIEhhdCBkaXN0cmlidXRlcyBhbmQvb3IKK3Blcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMKK0xpY2Vuc2UuIFJlZCBIYXQncyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRQorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCitPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydAorb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoZSBPcmlnaW5hbCBDb2RlIChvcgorcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5CituZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQKK25vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlcgorTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZQorTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgordW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8KK1V0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQKK3RoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0CittYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZQorYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB2aWEgYW4gYWNjZXB0ZWQKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlCit2ZXJzaW9uIGF2YWlsYWJsZSBhbmQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlCisoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KQorbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZQorYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzCittYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9mIHRoZSBNb2RpZmljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgU291cmNlIGlmIGEgY29udGFjdCBtZWFucworaXMgcHJvdmlkZWQuIFJlZCBIYXQgd2lsbCBiZSBhY3RpbmcgYXMgbWFpbnRhaW5lciBvZiB0aGUgU291cmNlIGFuZCBtYXkgcHJvdmlkZQorYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gbWVjaGFuaXNtIGZvciB0aGUgTW9kaWZpY2F0aW9uIHRvIGJlIG1hZGUgYXZhaWxhYmxlLgorWW91IGNhbiBjb250YWN0IFJlZCBIYXQgdG8gbWFrZSB0aGUgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhbmQgdG8gbm90aWZ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIuIChodHRwOi8vc291cmNld2FyZS5jeWdudXMuY29tL2Vjb3MvKQorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4KK3BhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91CittdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbgorc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluCitzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlCithdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUKK21haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQKK3RoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvcgorY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZAordGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZQorcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUKK01vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4KKworSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0Cithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91CithbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoCitDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3UKK29mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhCitub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdQoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseQoraW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCitDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlCitvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZAordGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlCitmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZgorWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UKK2l0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkCitieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlCit0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworSWYgeW91IGRpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSwgeW91IG11c3QKK3JlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbgordGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50Citwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZwordG8gdGhlIGxpY2Vuc2U7IGFuZCAoYykgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaAorZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kCittdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCitleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdQord2lsbCBub3QgYmUgYWJsZSB1c2UgdGhlIGNvdmVyZWQgY29kZSBpbiBhbnkgbWVhbnMgdW50aWwgcGVybWlzc2lvbiBpcyBncmFudGVkCitmcm9tIFJlZCBIYXQgdG8gYWxsb3cgZm9yIHRoZSBpbmFiaWxpdHkgdG8gY29tcGx5IGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24uCisKKzUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRQorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKK1JlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzCitiZWNvbWluZyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIGFkZGl0aW9uYWwKK3Byb2R1Y3RzIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKK1JlZCBIYXQgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIFJlZCBIYXQgQnJhbmRlZCBDb2RlIHdpdGhvdXQgUmVkIEhhdAorQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZAorSGF0IEJyYW5kZWQgQ29kZSBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorQ29udGFjdCBSZWQgSGF0IGZvciBkZXRhaWxzIG9mIGFsdGVybmF0ZSBsaWNlbnNpbmcgdGVybXMgYXZhaWxhYmxlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRQorCis2LjEuIE5ldyBWZXJzaW9ucy4KK1JlZCBIYXQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0bwordGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJlZCBIYXQuIE5vIG9uZSBvdGhlciB0aGFuIFJlZCBIYXQgaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBiZXlvbmQgd2hhdCBpcyBncmFudGVkIHVuZGVyIHRoaXMKK2FuZCBzdWJzZXF1ZW50IExpY2Vuc2VzLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8KK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UpLCB5b3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzCisiRUNPUyIsICJlQ29zIiwgIlJlZCBIYXQiLCAiUkhFUEwiIG9yCithbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKQorb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2gKK2RpZmZlciBmcm9tIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzCitMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQKK0NPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZCitPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYKK1lvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSAorUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsCitJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IKK01BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0gKK1BBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTCitMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTAorSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUgorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5ECitMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUworCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzCitzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuCisxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4KK0dvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoCitoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucworKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZworaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lCitwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwKK3RoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwKK2Rpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nCithcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkKK2FyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbgorcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsCitDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEKK0NvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsCitTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQKK3RoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdAorYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUworCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24KKzMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YKK1lvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YKK0NvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaAorcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvCitkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworMTMuIEFERElUSU9OQUwgVEVSTVMgQVBQTElDQUJMRSBUTyBUSEUgUkVEIEhBVCBFQ09TIFBVQkxJQyBMSUNFTlNFCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IFJlZCBIYXQgZnJvbSBsaWNlbnNpbmcKK3VuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoaXMgTGljZW5zZSBhbnkgY29kZSB3aGljaCBSZWQgSGF0IG90aGVyd2lzZSB3b3VsZAoraGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKK1JlZCBIYXQgYW5kIGxvZ28gLSBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFyaworUmVkIEhhdCwgdGhlIFJlZCBIYXQgbG9nbywgZUNvcyBsb2dvLCBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZQorT3JpZ2luYWwgQ29kZS4gWW91IG1heSBjb250YWN0IFJlZCBIYXQgZm9yIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgUmVkIEhhdAorYW5kIGVDb3MgbWFya3MgaW4gZWl0aGVyIHRoZSBkb2N1bWVudGF0aW9uIG9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gYmV5b25kCit0aGF0IHJlcXVpcmVkIGluIEV4aGliaXQgQi4KKworSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gQ29udHJhY3R1YWwgT2JsaWdhdGlvbiAtIFRvIHRoZSBleHRlbnQgdGhhdCBSZWQgSGF0CitpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgdGhpcmQgcGFydHkgY29kZSBhdmFpbGFibGUgdW5kZXIgdGhpcworTGljZW5zZSwgUmVkIEhhdCBtYXkgY2hvb3NlIHRvIGludGVncmF0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW50byBDb3ZlcmVkCitDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW4gU291cmNlIENvZGUKK2Zvcm0sIGV2ZW4gaWYgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIHdvdWxkIG90aGVyd2lzZSBiZSBjb25zaWRlcmVkCisiTW9kaWZpY2F0aW9ucyIgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitFWEhJQklUIEEKKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovLword3d3LnJlZGhhdC5jb20vCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKK2ZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgcmVsZWFzZWQKK1NlcHRlbWJlciAzMCwgMTk5OC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJlZCBIYXQuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuCitBbGwgUmlnaHRzIFJlc2VydmVkLiIKKworRVhISUJJVCBCCisKK1BhcnQgb2YgdGhlIHNvZnR3YXJlIGVtYmVkZGVkIGluIHRoaXMgcHJvZHVjdCBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlCitPcGVyYXRpbmcgU3lzdGVtLCBhIHRyYWRlbWFyayBvZiBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbAorUmlnaHRzIFJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIFJFRCBIQVQgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCitPRiBTVUNIIERBTUFHRS4KKworCisKKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODkwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SSGVDb3MtMS4xCkBAIC0wLDAgKzEsMTUxIEBACisKK1JlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSB2MS4xCisKKzEuIERFRklOSVRJT05TCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxLjEzLiAiUmVkIEhhdCBCcmFuZGVkIENvZGUiIGlzIGNvZGUgdGhhdCBSZWQgSGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIFJlZCBIYXRgcyBCcmFuZGVkIENvZGUgbWF5IGNvbnRhaW4gcGFydCBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMi4gU09VUkNFIENPREUgTElDRU5TRQorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUworCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlIGFuZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXI7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgTW9kaWZpY2F0aW9uIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFNvdXJjZSBpZiBhIGNvbnRhY3QgbWVhbnMgaXMgcHJvdmlkZWQuIFJlZCBIYXQgd2lsbCBiZSBhY3RpbmcgYXMgbWFpbnRhaW5lciBvZiB0aGUgU291cmNlIGFuZCBtYXkgcHJvdmlkZSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBtZWNoYW5pc20gZm9yIHRoZSBNb2RpZmljYXRpb24gdG8gYmUgbWFkZSBhdmFpbGFibGUuIFlvdSBjYW4gY29udGFjdCBSZWQgSGF0IHRvIG1ha2UgdGhlIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYW5kIHRvIG5vdGlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIChodHRwOi8vc291cmNld2FyZS5jeWdudXMuY29tL2Vjb3MvKQorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIAorSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24gdW5kZXIgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuCisKK0hvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCitJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlLCB5b3UgbXVzdCByZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgKGIpIGNpdGUgdGhlIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGF0IHByb2hpYml0cyB5b3UgZnJvbSBhZGhlcmluZyB0byB0aGUgbGljZW5zZTsgYW5kIChjKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LiBZb3UgbXVzdCBzdWJtaXQgdGhpcyBMRUdBTCBmaWxlIHRvIFJlZCBIYXQgZm9yIHJldmlldywgYW5kIFlvdSB3aWxsIG5vdCBiZSBhYmxlIHVzZSB0aGUgY292ZXJlZCBjb2RlIGluIGFueSBtZWFucyB1bnRpbCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgZnJvbSBSZWQgSGF0IHRvIGFsbG93IGZvciB0aGUgaW5hYmlsaXR5IHRvIGNvbXBseSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uLgorCis1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKK1JlZCBIYXQgbWF5IGluY2x1ZGUgQ292ZXJlZCBDb2RlIGluIHByb2R1Y3RzIHdpdGhvdXQgc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorCitSZWQgSGF0IG1heSBsaWNlbnNlIHRoZSBTb3VyY2UgQ29kZSBvZiBSZWQgSGF0IEJyYW5kZWQgQ29kZSB3aXRob3V0IFJlZCBIYXQgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIFJlZCBIYXQgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuIENvbnRhY3QgUmVkIEhhdCBmb3IgZGV0YWlscyBvZiBhbHRlcm5hdGUgbGljZW5zaW5nIHRlcm1zIGF2YWlsYWJsZS4KKworNi4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UKKworNi4xLiBOZXcgVmVyc2lvbnMuCitSZWQgSGF0IG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJlZCBIYXQuIE5vIG9uZSBvdGhlciB0aGFuIFJlZCBIYXQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGJleW9uZCB3aGF0IGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBhbmQgc3Vic2VxdWVudCBMaWNlbnNlcy4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgIkVDT1MiLCAiZUNvcyIsICJSZWQgSGF0IiwgIlJIRVBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBhbnl3aGVyZSBpbiB5b3VyIGxpY2Vuc2UgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMKKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55IGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUworCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKzEzLiBBRERJVElPTkFMIFRFUk1TIEFQUExJQ0FCTEUgVE8gVEhFIFJFRCBIQVQgRUNPUyBQVUJMSUMgTElDRU5TRQorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBSZWQgSGF0IGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyB0aGFuIHRoaXMgTGljZW5zZSBhbnkgY29kZSB3aGljaCBSZWQgSGF0IG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworUmVkIEhhdCBhbmQgbG9nbyAtIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrIFJlZCBIYXQsIHRoZSBSZWQgSGF0IGxvZ28sIGVDb3MgbG9nbywgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IG1heSBjb250YWN0IFJlZCBIYXQgZm9yIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgUmVkIEhhdCBhbmQgZUNvcyBtYXJrcyBpbiBlaXRoZXIgdGhlIGRvY3VtZW50YXRpb24gb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBiZXlvbmQgdGhhdCByZXF1aXJlZCBpbiBFeGhpYml0IEIuCisKK0luYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24gLSBUbyB0aGUgZXh0ZW50IHRoYXQgUmVkIEhhdCBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcgdGhpcmQgcGFydHkgY29kZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLCBSZWQgSGF0IG1heSBjaG9vc2UgdG8gaW50ZWdyYXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbnRvIENvdmVyZWQgQ29kZSB3aXRob3V0IGJlaW5nIHJlcXVpcmVkIHRvIGRpc3RyaWJ1dGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGluIFNvdXJjZSBDb2RlIGZvcm0sIGV2ZW4gaWYgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIHdvdWxkIG90aGVyd2lzZSBiZSBjb25zaWRlcmVkICJNb2RpZmljYXRpb25zIiB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5yZWRoYXQuY29tLworCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCByZWxlYXNlZCBTZXB0ZW1iZXIgMzAsIDE5OTguIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIgorCitFWEhJQklUIEIKKworUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbSwgYSB0cmFkZW1hcmsgb2YgUmVkIEhhdC4gUG9ydGlvbnMgY3JlYXRlZCBieSBSZWQgSGF0IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmVkIEhhdCwgSW5jLiAoaHR0cDovL3d3dy5yZWRoYXQuY29tLykuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgUkVEIEhBVCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBMLTEuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkwODc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBMLTEuNQpAQCAtMCwwICsxLDU0NiBAQAorCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIDEuNSAoUlBMMS41KQorCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIChSUEwpCisKK1ZlcnNpb24gMS41LCBKdWx5IDE1LCAyMDA3CisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDA3CitUZWNobmljYWwgUHVyc3VpdCBJbmMuLAorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUFJFQU1CTEUKKworVGhlIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgKFJQTCkgaXMgYmFzZWQgb24gdGhlIGNvbmNlcHQgb2YgcmVjaXByb2NpdHkgb3IsCitpZiB5b3UgcHJlZmVyLCBmYWlybmVzcy4KKworSW4gc2hvcnQsIHRoaXMgbGljZW5zZSBncmV3IG91dCBvZiBhIGRlc2lyZSB0byBjbG9zZSBsb29waG9sZXMgaW4gcHJldmlvdXMgb3Blbgorc291cmNlIGxpY2Vuc2VzLCBsb29waG9sZXMgdGhhdCBhbGxvd2VkIHBhcnRpZXMgdG8gYWNxdWlyZSBvcGVuIHNvdXJjZSBzb2Z0d2FyZQorYW5kIGRlcml2ZSBmaW5hbmNpYWwgYmVuZWZpdCBmcm9tIGl0IHdpdGhvdXQgaGF2aW5nIHRvIHJlbGVhc2UgdGhlaXIKK2ltcHJvdmVtZW50cyBvciBkZXJpdmF0aXZlcyB0byB0aGUgY29tbXVuaXR5IHdoaWNoIGVuYWJsZWQgdGhlbS4gVGhpcyBvY2N1cnJlZAorYW55IHRpbWUgYW4gZW50aXR5IGRpZCBub3QgcmVsZWFzZSB0aGVpciBhcHBsaWNhdGlvbiB0byBhICJ0aGlyZCBwYXJ0eSIuCisKK1doaWxlIHRoZXJlIGlzIGEgY2VydGFpbiBmcmVlZG9tIGluIHRoaXMgbW9kZWwgb2YgbGljZW5zaW5nLCBpdCBzdHJ1Y2sgdGhlCithdXRob3JzIG9mIHRoZSBSUEwgYXMgYmVpbmcgdW5mYWlyIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXQgbGFyZ2UgYW5kIHRvCit0aGUgb3JpZ2luYWwgYXV0aG9ycyBvZiB0aGUgd29ya3MgaW4gcGFydGljdWxhci4gQWZ0ZXIgYWxsLCBidWcgZml4ZXMsCitleHRlbnNpb25zLCBhbmQgbWVhbmluZ2Z1bCBhbmQgdmFsdWFibGUgZGVyaXZhdGl2ZXMgd2VyZSBub3QgY29uc2lzdGVudGx5CitmaW5kaW5nIHRoZWlyIHdheSBiYWNrIGludG8gdGhlIGNvbW11bml0eSB3aGVyZSB0aGV5IGNvdWxkIGZ1ZWwgZnVydGhlciwgYW5kCitmYXN0ZXIsIGdyb3d0aCBhbmQgZXhwYW5zaW9uIG9mIHRoZSBvdmVyYWxsIG9wZW4gc291cmNlIHNvZnR3YXJlIGJhc2UuCisKK1doaWxlIHlvdSBzaG91bGQgY2xlYXJseSByZWFkIGFuZCB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgbGljZW5zZSwgdGhlIGVzc2VuY2Ugb2YKK3RoZSBSUEwgaXMgZm91bmQgaW4gdHdvIGRlZmluaXRpb25zOiAiRGVwbG95IiBhbmQgIlJlcXVpcmVkIENvbXBvbmVudHMiLgorCitSZWdhcmRpbmcgZGVwbG95bWVudCwgdW5kZXIgdGhlIFJQTCB5b3VyIGNoYW5nZXMsIGJ1ZyBmaXhlcywgZXh0ZW5zaW9ucywgZXRjLgorbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGF0IGxhcmdlIHdoZW4geW91IERlcGxveSBpbgorYW55IGZvcm0gLS0gZWl0aGVyIGludGVybmFsbHkgb3IgdG8gYW4gb3V0c2lkZSBwYXJ0eS4gT25jZSB5b3Ugc3RhcnQgcnVubmluZwordGhlIHNvZnR3YXJlIHlvdSBoYXZlIHRvIHN0YXJ0IHNoYXJpbmcgdGhlIHNvZnR3YXJlLgorCitGdXJ0aGVyLCB1bmRlciB0aGUgUlBMIGFsbCBjb21wb25lbnRzIHlvdSBhdXRob3IgaW5jbHVkaW5nIHNjaGVtYXMsIHNjcmlwdHMsCitzb3VyY2UgY29kZSwgZXRjLiAtLSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleWByZSBjb21waWxlZCBpbnRvIGEgc2luZ2xlCitiaW5hcnkgb3IgdXNlZCBhcyB0d28gaGFsdmVzIG9mIGNsaWVudC9zZXJ2ZXIgYXBwbGljYXRpb24gLS0gbXVzdCBiZSBzaGFyZWQuCitZb3UgaGF2ZSB0byBzaGFyZSB0aGUgd2hvbGUgcGllLCBub3QgYW4gaXNvbGF0ZWQgc2xpY2Ugb2YgaXQuCisKK0luIGFkZGl0aW9uIHRvIHRoZXNlIGdvYWxzLCB0aGUgUlBMIHdhcyBhdXRob3JlZCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YKK3RoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFzIG1haW50YWluZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgKE9TSSkuCisKK1RoZSBzcGVjaWZpYyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBhcmUgZGVmaW5lZCBpbiB0aGUgcmVtYWluZGVyCitvZiB0aGlzIGRvY3VtZW50LgorCitMSUNFTlNFIFRFUk1TCisKKzEuMCBHZW5lcmFsOyBBcHBsaWNhYmlsaXR5ICZhbXA7IERlZmluaXRpb25zLiBUaGlzIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UKK1ZlcnNpb24gMS41ICgiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IHByb2dyYW1zIG9yIG90aGVyIHdvcmtzIGFzIHdlbGwgYXMgYW55CithbmQgYWxsIHVwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2Ygc2FpZCBwcm9ncmFtcyBvciB3b3JrcyAoIlNvZnR3YXJlIikKK25vdCBhbHJlYWR5IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdoaWNoIHRoZSBTb2Z0d2FyZSBjb3B5cmlnaHQgaG9sZGVyCisoIkxpY2Vuc29yIikgbWFrZXMgYXZhaWxhYmxlIGNvbnRhaW5pbmcgYSBMaWNlbnNlIE5vdGljZSAoaGVyZWluYWZ0ZXIgZGVmaW5lZCkKK2Zyb20gdGhlIExpY2Vuc29yIHNwZWNpZnlpbmcgb3IgYWxsb3dpbmcgdXNlIG9yIGRpc3RyaWJ1dGlvbiB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHdobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZQorY3JlYXRpb24gb2YgYW4gRXh0ZW5zaW9uLgorCisxLjIgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBTZXJ2ZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlCitvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIFJlc2VhcmNoIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcword2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIExpY2Vuc2VkCitTb2Z0d2FyZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gb3RoZXIgdGhhbiBmb3IgUmVzZWFyY2ggYW5kL29yCitQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YKK0xpY2Vuc2VkIFNvZnR3YXJlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjMgIkRlcml2YXRpdmUgV29ya3MiIGFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQKK2xhdy4KKworMS40ICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZAoraW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YSBzdWNoCithcyBkb3dubG9hZCBmcm9tIGFuIEZUUCBzZXJ2ZXIgb3Igd2ViIHNpdGUsIHdoZXJlIHN1Y2ggbWVjaGFuaXNtIGlzIHB1YmxpY2x5CithY2Nlc3NpYmxlLgorCisxLjUgIkV4dGVuc2lvbnMiIG1lYW5zIGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBvciBSZXF1aXJlZAorQ29tcG9uZW50cyBhcyB0aG9zZSB0ZXJtcyBhcmUgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTGljZW5zZSIgbWVhbnMgdGhpcyBSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlLgorCisxLjcgIkxpY2Vuc2UgTm90aWNlIiBtZWFucyBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbiBFWEhJQklUIEEuCisKKzEuOCAiTGljZW5zZWQgU29mdHdhcmUiIG1lYW5zIGFueSBTb2Z0d2FyZSBsaWNlbnNlZCBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuCitMaWNlbnNlZCBTb2Z0d2FyZSBhbHNvIGluY2x1ZGVzIGFsbCBwcmV2aW91cyBFeHRlbnNpb25zIGZyb20gYW55IENvbnRyaWJ1dG9yCit0aGF0IFlvdSByZWNlaXZlLgorCisxLjkgIkxpY2Vuc29yIiBtZWFucyB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiBhbnkgU29mdHdhcmUgcHJldmlvdXNseSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIHdobyByZWxlYXNlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UuCisKKzEuMTAgIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IgZGVsZXRpb25zIGZyb20gdGhlIHN1YnN0YW5jZSBvcgorc3RydWN0dXJlIG9mIChpKSBhIGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBjb250YWluaW5nIExpY2Vuc2VkIFNvZnR3YXJlLCBvciAoaWkpCithbnkgbmV3IGZpbGUgb3Igc3RvcmFnZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIExpY2Vuc2VkIFNvZnR3YXJlLCBvciAoaWlpKQorYW55IGZpbGUgb3Igc3RvcmFnZSB3aGljaCByZXBsYWNlcyBvciBvdGhlcndpc2UgYWx0ZXJzIHRoZSBvcmlnaW5hbAorZnVuY3Rpb25hbGl0eSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBhdCBydW50aW1lLgorCisxLjExICJQZXJzb25hbCBVc2UiIG1lYW5zIHVzZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IKK2hpcyBvciBoZXIgcGVyc29uYWwsIHByaXZhdGUgYW5kIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBBbiBpbmRpdmlkdWFsYHMgdXNlCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBpbiBoaXMgb3IgaGVyIGNhcGFjaXR5IGFzIGFuIG9mZmljZXIsIGVtcGxveWVlLCBtZW1iZXIsCitpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbgorKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjEyICJSZXF1aXJlZCBDb21wb25lbnRzIiBtZWFucyBhbnkgdGV4dCwgcHJvZ3JhbXMsIHNjcmlwdHMsIHNjaGVtYSwKK2ludGVyZmFjZSBkZWZpbml0aW9ucywgY29udHJvbCBmaWxlcywgb3Igb3RoZXIgd29ya3MgY3JlYXRlZCBieSBZb3Ugd2hpY2ggYXJlCityZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gc3VjY2Vzc2Z1bGx5IGluc3RhbGwgYW5kIHJ1bgorTGljZW5zZWQgU29mdHdhcmUgY29udGFpbmluZyBZb3VyIE1vZGlmaWNhdGlvbnMsIG9yIHRvIGluc3RhbGwgYW5kIHJ1biBZb3VyCitEZXJpdmF0aXZlIFdvcmtzLgorCisxLjEzICJSZXNlYXJjaCIgbWVhbnMgaW52ZXN0aWdhdGlvbiBvciBleHBlcmltZW50YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mCit1bmRlcnN0YW5kaW5nIHRoZSBuYXR1cmUgYW5kIGxpbWl0cyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIGl0cyBwb3RlbnRpYWwKK3VzZXMuCisKKzEuMTQgIlNlcnZlIiBtZWFucyB0byBkZWxpdmVyIExpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMgYnkKK21lYW5zIG9mIGEgY29tcHV0ZXIgbmV0d29yayB0byBvbmUgb3IgbW9yZSBjb21wdXRlcnMgZm9yIHB1cnBvc2VzIG9mIGV4ZWN1dGlvbgorb2YgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucy4KKworMS4xNSAiU29mdHdhcmUiIG1lYW5zIGFueSBjb21wdXRlciBwcm9ncmFtcyBvciBvdGhlciB3b3JrcyBhcyB3ZWxsIGFzIGFueQordXBkYXRlcyBvciBtYWludGVuYW5jZSByZWxlYXNlcyBvZiB0aG9zZSBwcm9ncmFtcyBvciB3b3JrcyB3aGljaCBhcmUKK2Rpc3RyaWJ1dGVkIHB1YmxpY2x5IGJ5IExpY2Vuc29yLgorCisxLjE2ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUKK0xpY2Vuc2VkIFNvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBjb250YWluZWQKK3RoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQgdGV4dCwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBvciBvdGhlcgorY29tcG9uZW50cyByZXF1aXJlZCBieSBhIHRoaXJkIHBhcnR5IG9mIGF2ZXJhZ2Ugc2tpbGwgdG8gYnVpbGQgYSBydW5uaW5nCit2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBZb3VyIEV4dGVuc2lvbnMuCisKKzEuMTcgIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UiIG1lYW5zIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQi4KKworMS4xOCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5Cit3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZQorImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvcgorbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAKK29mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKK293bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4wIEFjY2VwdGFuY2UgT2YgTGljZW5zZS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBzaW5jZQoreW91IGhhdmUgbm90IHNpZ25lZCBpdCwgaG93ZXZlciBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHVzZSwKK2NvcHksIGRpc3RyaWJ1dGUsIG1vZGlmeSwgb3IgY3JlYXRlIGRlcml2YXRpdmVzIG9mIGVpdGhlciB0aGUgU29mdHdhcmUgb3IgYW55CitFeHRlbnNpb25zIGNyZWF0ZWQgYnkgYSBDb250cmlidXRvci4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYKK3lvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBwZXJmb3JtaW5nIGFueSBvZiB0aGVzZSBhY3Rpb25zCitZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgWW91ciBhZ3JlZW1lbnQgdG8gYmUgYm91bmQgYnkKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElGIFlPVSBETyBOT1QgQUdSRUUgV0lUSCBBTEwgVEhFIFRFUk1TIEFORAorQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UgRE8gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUgREVSSVZBVElWRVMsIE9SCitESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS4gSUYgSVQgSVMgSU1QT1NTSUJMRSBGT1IgWU9VIFRPIENPTVBMWSBXSVRIIEFMTCBUSEUKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBUSEVOIFlPVSBDQU4gTk9UIFVTRSwgTU9ESUZZLCBDUkVBVEUKK0RFUklWQVRJVkVTLCBPUiBESVNUUklCVVRFIFRIRSBTT0ZUV0FSRS4KKworMy4wIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKK3RoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIExpY2Vuc29yYHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgYW5kIGFueQordGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBkZXJpdmVkIGZyb20gdGhlIExpY2Vuc2VkIFNvZnR3YXJlCit1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzMuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlCitMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zIGluIGJvdGggU291cmNlIENvZGUgZm9ybSBvciBhcyBhbgorZXhlY3V0YWJsZSBwcm9ncmFtLgorCiszLjIgQ3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdykKK29mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5IGFkZGluZyB0byBvciBkZWxldGluZyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlCitvZiBzYWlkIExpY2Vuc2VkIFNvZnR3YXJlLgorCiszLjMgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IExpY2Vuc29yLAordG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBvcgorcG9ydGlvbnMgdGhlcmVvZiwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvCitlbmFibGUgWW91IHRvIG1ha2UsIHVzZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQKK1NvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2YuCisKKzMuNCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSBuZXcgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHdpdGgKK2RpZmZlcmVudCBmZWF0dXJlcywgc3BlY2lmaWNhdGlvbnMsIGNhcGFiaWxpdGllcywgZnVuY3Rpb25zLCBsaWNlbnNpbmcgdGVybXMsCitnZW5lcmFsIGF2YWlsYWJpbGl0eSBvciBvdGhlciBjaGFyYWN0ZXJpc3RpY3MuIFRpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gYW5kIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBzaGFsbCByZW1haW4gaW4KK0xpY2Vuc29yIGFuZC9vciBpdHMgQ29udHJpYnV0b3JzLgorCis0LjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIENvbnRyaWJ1dG9yLiBCeSBhcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbgorU2VjdGlvbiA2IGJlbG93LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS0KK2ZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byBzYWlkIENvbnRyaWJ1dG9yYHMgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMsIGFuZCBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBkZXJpdmVkIGZyb20KK3RoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIExpY2Vuc2UsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzQuMSBVc2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIGFueQorRXh0ZW5zaW9ucyBEZXBsb3llZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlCitDb2RlIGZvcm0gb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcworcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLgorCis0LjIgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5CitDb250cmlidXRvciwgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBFeHRlbnNpb25zCitvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkKK3RvIGVuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZgorTGljZW5zZWQgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZi4KKworNS4wIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8KK2dyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkKK290aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseQorc3RhdGVkIGhlcmVpbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMyBhbmQgNCwgbm8gb3RoZXIgcGF0ZW50CityaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgaGVyZWluLiBZb3VyIEV4dGVuc2lvbnMgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igb3IgQ29udHJpYnV0b3JzIHdoaWNoIGVhY2ggbWF5IGdyYW50CitpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIG9yCithbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUuCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tCitsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3IKK290aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNS4xIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2gKK0NvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgTGljZW5zZWQKK1NvZnR3YXJlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlcgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBMaWNlbnNvciBhbmQgZWFjaAorQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlcgorZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMKK2EgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdQoraGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzCityZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgU29mdHdhcmUsIGl0IGlzIFlvdXIKK3Jlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZS4KKworNi4wIFlvdXIgT2JsaWdhdGlvbnMgQW5kIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGFuIGV4cHJlc3MKK2NvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBZb3UgaGVyZWJ5IGFncmVlCit0aGF0IGFueSBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCBvciBSZXF1aXJlZCBDb21wb25lbnRzIChjb2xsZWN0aXZlbHkKK0V4dGVuc2lvbnMpIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gNC4gQW55IEV4dGVuc2lvbnMKK3RoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIERlcGxveWVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNy4gWW91CitoZXJlYnkgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgd29ybGQtd2lkZSwgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIHRob3NlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgWW91IG93biBvcgorY29udHJvbCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZXMsCitzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaW4gYW55IGZvcm0uIEFueSBFeHRlbnNpb25zIFlvdQorbWFrZSBhbmQgRGVwbG95IG11c3QgaGF2ZSBhIGRpc3RpbmN0IHRpdGxlIHNvIGFzIHRvIHJlYWRpbHkgdGVsbCBhbnkKK3N1YnNlcXVlbnQgdXNlciBvciBDb250cmlidXRvciB0aGF0IHRoZSBFeHRlbnNpb25zIGFyZSBieSBZb3UuIFlvdSBtdXN0CitpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugb3IgZGlyZWN0aW9ucyBvbiBob3cgdG8gb2J0YWluIGEgY29weSB3aXRoCitldmVyeSBjb3B5IG9mIHRoZSBFeHRlbnNpb25zIFlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZQorYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSBvciBleGVjdXRhYmxlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlLAorb3IgaXRzIEV4dGVuc2lvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuCisKKzYuMSBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIFlvdSBtdXN0IG1ha2UgYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBFeHRlbnNpb25zIHRoYXQgWW91IERlcGxveSwgdmlhIGFuCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20uIFRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IHZlcnNpb24gdGhhdCBZb3UKK0RlcGxveSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHdoZW4geW91IERlcGxveSBhbmQgbXVzdAorcmVtYWluIGF2YWlsYWJsZSBmb3Igbm8gbGVzcyB0aGFuIHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBZb3UgY2Vhc2UKK3RvIERlcGxveS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdG8gZWFjaAordmVyc2lvbiBZb3UgRGVwbG95IHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIGFueQorY29weSBvZiB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBTZWN0aW9uIGluIGV4Y2VzcyBvZiBZb3VyCithY3R1YWwgY29zdCBvZiBkdXBsaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHNhaWQgY29weS4KKworNi4yIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFueSBNb2RpZmljYXRpb25zIHRoYXQgWW91CitjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gYmUgZG9jdW1lbnRlZCBpbiB0aGUgU291cmNlIENvZGUsIGNsZWFybHkKK2Rlc2NyaWJpbmcgdGhlIGFkZGl0aW9ucywgY2hhbmdlcyBvciBkZWxldGlvbnMgWW91IG1hZGUuIFlvdSBtdXN0IGluY2x1ZGUgYQorcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb25zIGFyZSBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIGluY2x1ZGUgdGhlIG5hbWVzIG9mIHRoZSBMaWNlbnNvciBhbmQgYW55CitDb250cmlidXRvciB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQgKGlpKSBpbiBhbnkKK25vdGljZSBkaXNwbGF5ZWQgYnkgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlIG9yIGluIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBMaWNlbnNlZAorU29mdHdhcmUuIFlvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZS1leGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcywKK2NoYW5nZSBub3RpY2VzIG9yIExpY2Vuc2UgdGV4dCBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUgd2l0aG91dCB3cml0dGVuCitwZXJtaXNzaW9uIG9mIHRoZSByZXNwZWN0aXZlIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yLgorCis2LjMgSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKK2EuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHRvIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGlzCitMaWNlbnNlLCBZb3UgbXVzdCBpbmNsdWRlIGEgaHVtYW4tcmVhZGFibGUgZmlsZSB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uIHRoYXQKK2Rlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYQorcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuCisKK2IuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgRXh0ZW5zaW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKCJBUEkiKSBhbmQgWW91IGhhdmUga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB0aGF0IGFyZQorcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcworaW5mb3JtYXRpb24gaW4gYSBodW1hbi1yZWFkYWJsZSBmaWxlIHN1cHBsaWVkIHdpdGggWW91ciBkaXN0cmlidXRpb24uCisKK2MuIFJlcHJlc2VudGF0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIDYuMyhhKQorYWJvdmUsIFlvdSBiZWxpZXZlIHRoYXQgYW55IEV4dGVuc2lvbnMgWW91IGRpc3RyaWJ1dGUgYXJlIFlvdXIgb3JpZ2luYWwKK2NyZWF0aW9ucyBhbmQgdGhhdCBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5Cit0aGlzIExpY2Vuc2UuCisKKzYuNCBSZXF1aXJlZCBOb3RpY2VzLgorCithLiBMaWNlbnNlIFRleHQuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2Ugb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworYWNxdWlyZSBhIGNvcHkgaW4gYW55IGRvY3VtZW50YXRpb24gWW91IHByb3ZpZGUgYWxvbmcgd2l0aCB0aGUgU291cmNlIENvZGUgb2YKK2FueSBFeHRlbnNpb25zIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIHdoZXJldmVyIFlvdSBkZXNjcmliZQorcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIExpY2Vuc2VkIFNvZnR3YXJlLgorCitiLiBMaWNlbnNlIE5vdGljZS4gWW91IG11c3QgZHVwbGljYXRlIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQSAodGhlCisiTGljZW5zZSBOb3RpY2UiKSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBjb3B5IFlvdSBkaXN0cmlidXRlCitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucy4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sIFlvdQorbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUgYW5kIGFjY29tcGFueWluZworZG9jdW1lbnRhdGlvbiBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbi4gSWYgaXQgaXMgbm90Citwb3NzaWJsZSB0byBwdXQgdGhlIExpY2Vuc2UgTm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMKK3N0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggTGljZW5zZSBOb3RpY2UgaW4gYSBsb2NhdGlvbiB3aGVyZSBhCit1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLgorCitjLiBTb3VyY2UgQ29kZSBBdmFpbGFiaWxpdHkuIFlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHRoZQorYXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlIHRvIFlvdXIgRXh0ZW5zaW9ucyB3aXRoaW4gb25lICgxKSBtb250aCBvZiB0aGUgZGF0ZQorWW91IGluaXRpYWxseSBEZXBsb3kgYW5kIGluY2x1ZGUgaW4gc3VjaCBub3RpZmljYXRpb24gYSBkZXNjcmlwdGlvbiBvZiB0aGUKK0V4dGVuc2lvbnMsIGFuZCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFjcXVpcmUgdGhlIFNvdXJjZSBDb2RlLiBTaG91bGQgc3VjaAoraW5zdHJ1Y3Rpb25zIGNoYW5nZSB5b3UgbXVzdCBub3RpZnkgdGhlIHNvZnR3YXJlIGNvbW11bml0eSBvZiByZXZpc2VkCitpbnN0cnVjdGlvbnMgd2l0aGluIG9uZSAoMSkgbW9udGggb2YgdGhlIGRhdGUgb2YgY2hhbmdlLiBZb3UgbXVzdCBwcm92aWRlCitub3RpZmljYXRpb24gYnkgcG9zdGluZyB0byBhcHByb3ByaWF0ZSBuZXdzIGdyb3VwcywgbWFpbGluZyBsaXN0cywgd2VibG9ncywgb3IKK290aGVyIHNpdGVzIHdoZXJlIGEgcHVibGljbHkgYWNjZXNzaWJsZSBzZWFyY2ggZW5naW5lIHdvdWxkIHJlYXNvbmFibHkgYmUKK2V4cGVjdGVkIHRvIGluZGV4IHlvdXIgcG9zdCBpbiByZWxhdGlvbnNoaXAgdG8gcXVlcmllcyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLgorCitkLiBVc2VyLVZpc2libGUgQXR0cmlidXRpb24uIFlvdSBtdXN0IGR1cGxpY2F0ZSBhbnkgbm90aWNlIGNvbnRhaW5lZCBpbgorRVhISUJJVCBCICh0aGUgIlVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UiKSBpbiBlYWNoIHVzZXItdmlzaWJsZSBkaXNwbGF5CitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIFlvdXIgRXh0ZW5zaW9ucyB3aGljaCBkZWxpbmVhdGVzIGNvcHlyaWdodCwKK293bmVyc2hpcCwgb3Igc2ltaWxhciBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gSWYgWW91IGNyZWF0ZSBhbiBFeHRlbnNpb24sCitZb3UgbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciwgYW5kIGFkZCBZb3VyIGF0dHJpYnV0aW9uIG5vdGljZSwgYXMgYW4KK2VxdWFsbHkgdmlzaWJsZSBhbmQgZnVuY3Rpb25hbCBlbGVtZW50IG9mIGFueSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlCitjb250ZW50LiBUbyBlbnN1cmUgcHJvcGVyIGF0dHJpYnV0aW9uLCBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgc3VjaCBVc2VyLVZpc2libGUKK0F0dHJpYnV0aW9uIE5vdGljZSBpbiBhdCBsZWFzdCBvbmUgbG9jYXRpb24gaW4gdGhlIFNvZnR3YXJlIGRvY3VtZW50YXRpb24KK3doZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBub3RpY2UuCisKKzYuNSBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mCitMaWNlbnNlZCBTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBvdGhlcgorYWdyZWVtZW50cyBiZXR3ZWVuIHlvdSBhbmQgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdAorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdQorYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvcgorYW55IGxpYWJpbGl0eSBwbHVzIGF0dG9ybmV5IGZlZXMsIGNvc3RzLCBhbmQgcmVsYXRlZCBleHBlbnNlcyBkdWUgdG8gYW55IHN1Y2gKK2FjdGlvbiBvciBjbGFpbSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZgord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCis2LjYgQ29uZmxpY3RzIFdpdGggT3RoZXIgTGljZW5zZXMuIFdoZXJlIGFueSBwb3J0aW9uIG9mIFlvdXIgRXh0ZW5zaW9ucywgYnkKK3ZpcnR1ZSBvZiBiZWluZyBEZXJpdmF0aXZlIFdvcmtzIG9mIGFub3RoZXIgcHJvZHVjdCBvciBzaW1pbGFyIGNpcmN1bXN0YW5jZSwKK2ZhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIGFub3RoZXIgbGljZW5zZSwgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSBzaG91bGQgYmUKK2hvbm9yZWQgaG93ZXZlciBZb3UgbXVzdCBhbHNvIG1ha2UgWW91ciBFeHRlbnNpb25zIGF2YWlsYWJsZSB1bmRlciB0aGlzCitMaWNlbnNlLiBJZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGNvbnRpbnVlIHRvIGNvbmZsaWN0IHdpdGggdGhlIHRlcm1zIG9mCit0aGUgb3RoZXIgbGljZW5zZSB5b3UgbWF5IHdyaXRlIHRoZSBMaWNlbnNvciBmb3IgcGVybWlzc2lvbiB0byByZXNvbHZlIHRoZQorY29uZmxpY3QgaW4gYSBmYXNoaW9uIHRoYXQgcmVtYWlucyBjb25zaXN0ZW50IHdpdGggdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UuCitTdWNoIHBlcm1pc3Npb24gd2lsbCBiZSBncmFudGVkIGF0IHRoZSBzb2xlIGRpc2NyZXRpb24gb2YgdGhlIExpY2Vuc29yLgorCis3LjAgVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLiBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8gdGltZSByZXZpc2VkCit2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gT25jZSBMaWNlbnNlZCBTb2Z0d2FyZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYQorcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggTGljZW5zZWQgU29mdHdhcmUgdW5kZXIKK3RoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8KK29uZSBvdGhlciB0aGFuIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCitMaWNlbnNlZCBTb2Z0d2FyZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNy4xIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHdoaWNoIFlvdSBtYXkgZG8KK29ubHkgaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBMaWNlbnNlZCBTb2Z0d2FyZQordW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbXVzdCByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgaXQgaXMgbm90IGNvbmZ1c2luZ2x5CitzaW1pbGFyIHRvIHRoaXMgTGljZW5zZSwgYW5kIG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgbGljZW5zZSBjb250YWlucwordGVybXMgdGhhdCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuIEluIHNvIG5hbWluZyBZb3VyIGxpY2Vuc2UsIFlvdSBtYXkgbm90Cit1c2UgYW55IHRyYWRlbWFyayBvZiBMaWNlbnNvciBvciBvZiBhbnkgQ29udHJpYnV0b3IuIFNob3VsZCBZb3VyIG1vZGlmaWNhdGlvbnMKK3RvIHRoaXMgTGljZW5zZSBiZSBsaW1pdGVkIHRvIGFsdGVyYXRpb24gb2YgYSkgU2VjdGlvbiAxMy44IHNvbGVseSB0byBtb2RpZnkKK3RoZSBsZWdhbCBKdXJpc2RpY3Rpb24gb3IgVmVudWUgZm9yIGRpc3B1dGVzLCBiKSBFWEhJQklUIEEgc29sZWx5IHRvIGRlZmluZQorTGljZW5zZSBOb3RpY2UgdGV4dCwgb3IgYykgdG8gRVhISUJJVCBCIHNvbGVseSB0byBkZWZpbmUgYSBVc2VyLVZpc2libGUKK0F0dHJpYnV0aW9uIE5vdGljZSwgWW91IG1heSBjb250aW51ZSB0byByZWZlciB0byBZb3VyIExpY2Vuc2UgYXMgdGhlCitSZWNpcHJvY2FsIFB1YmxpYyBMaWNlbnNlIG9yIHNpbXBseSB0aGUgUlBMLgorCis4LjAgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTElDRU5TRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFCitPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgRlJFRQorT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorRlVSVEhFUiBUSEVSRSBJUyBOTyBXQVJSQU5UWSBNQURFIEFORCBBTEwgSU1QTElFRCBXQVJSQU5USUVTIEFSRSBESVNDTEFJTUVECitUSEFUIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBNRUVUUyBPUiBDT01QTElFUyBXSVRIIEFOWSBERVNDUklQVElPTiBPRgorUEVSRk9STUFOQ0UgT1IgT1BFUkFUSU9OLCBTQUlEIENPTVBBVElCSUxJVFkgQU5EIFNVSVRBQklMSVRZIEJFSU5HIFlPVVIKK1JFU1BPTlNJQklMSVRZLiBMSUNFTlNPUiBESVNDTEFJTVMgQU5ZIFdBUlJBTlRZLCBJTVBMSUVEIE9SIEVYUFJFU1NFRCwgVEhBVAorQU5ZIENPTlRSSUJVVE9SYFMgRVhURU5TSU9OUyBNRUVUIEFOWSBTVEFOREFSRCBPRiBDT01QQVRJQklMSVRZIE9SIERFU0NSSVBUSU9OCitPRiBQRVJGT1JNQU5DRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQ0VOU0VEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWQorUkVTUEVDVCwgWU9VIChBTkQgTk9UIFRIRSBMSUNFTlNPUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVAorT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUworTElDRU5TT1IgV0lMTCBOT1QgU1VQUE9SVCBUSElTIFNPRlRXQVJFIEFORCBJUyBVTkRFUiBOTyBPQkxJR0FUSU9OIFRPIElTU1VFCitVUERBVEVTIFRPIFRISVMgU09GVFdBUkUuIExJQ0VOU09SIEhBUyBOTyBLTk9XTEVER0UgT0YgRVJSQU5UIENPREUgT1IgVklSVVMgSU4KK1RISVMgU09GVFdBUkUsIEJVVCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIElTIEZSRUUgRlJPTSBTVUNIIEVSUk9SUworT1IgVklSVVNFUy4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOS4wIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksCitXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFCitMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgU09GVFdBUkUsIE9SIEFOWQorU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIKK0ZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsCitFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRICitPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVAorQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTCitFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLjAgSGlnaCBSaXNrIEFjdGl2aXRpZXMuIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBOT1QgRkFVTFQtVE9MRVJBTlQgQU5EIElTCitOT1QgREVTSUdORUQsIE1BTlVGQUNUVVJFRCwgT1IgSU5URU5ERUQgRk9SIFVTRSBPUiBESVNUUklCVVRJT04gQVMgT04tTElORQorQ09OVFJPTCBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUyBSRVFVSVJJTkcgRkFJTC1TQUZFIFBFUkZPUk1BTkNFLAorU1VDSCBBUyBJTiBUSEUgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUgorQ09NTVVOSUNBVElPTlMgU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTCwgRElSRUNUIExJRkUgU1VQUE9SVCBNQUNISU5FUywgT1IKK1dFQVBPTlMgU1lTVEVNUywgSU4gV0hJQ0ggVEhFIEZBSUxVUkUgT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIENPVUxEIExFQUQKK0RJUkVDVExZIFRPIERFQVRILCBQRVJTT05BTCBJTkpVUlksIE9SIFNFVkVSRSBQSFlTSUNBTCBPUiBFTlZJUk9OTUVOVEFMIERBTUFHRQorKCJISUdIIFJJU0sgQUNUSVZJVElFUyIpLiBMSUNFTlNPUiBBTkQgQ09OVFJJQlVUT1JTIFNQRUNJRklDQUxMWSBESVNDTEFJTSBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBPRiBGSVRORVNTIEZPUiBISUdIIFJJU0sgQUNUSVZJVElFUy4KKworMTEuMCBSZXNwb25zaWJpbGl0eSBmb3IgQ2xhaW1zLiBBcyBiZXR3ZWVuIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMsIGVhY2gKK3BhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aGljaCBzcGVjaWZpY2FsbHkKK2Rpc2NsYWltcyB3YXJyYW50aWVzIGFuZCBsaW1pdHMgYW55IGxpYWJpbGl0eSBvZiB0aGUgTGljZW5zb3IuIFRoaXMgcGFyYWdyYXBoCitpcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW5kIGNvbnRyb2xsZWQgYnkgdGhlIERpc2NsYWltZXIgT2YKK1dhcnJhbnRpZXMgb2YgU2VjdGlvbiA4LCB0aGUgTGltaXRhdGlvbiBPZiBEYW1hZ2VzIGluIFNlY3Rpb24gOSwgYW5kIHRoZQorZGlzY2xhaW1lciBhZ2FpbnN0IHVzZSBmb3IgSGlnaCBSaXNrIEFjdGl2aXRpZXMgaW4gU2VjdGlvbiAxMC4gVGhlIExpY2Vuc29yCitoYXMgdGhlcmVieSBkaXNjbGFpbWVkIGFsbCB3YXJyYW50aWVzIGFuZCBsaW1pdGVkIGFueSBkYW1hZ2VzIHRoYXQgaXQgaXMgb3IKK21heSBiZSBsaWFibGUgZm9yLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIExpY2Vuc29yIGFuZCBDb250cmlidXRvcnMgdG8KK2Rpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMgY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyBTZWN0aW9ucyA4LCA5LCBhbmQgMTAuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTIuMCBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCitpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNiBvciBpZgorYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQgb3Igc3BlY2lmaWNhbGx5Citjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAzLCA0IGFuZC9vciA2LCBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgYW55CitvZiB0aG9zZSBTZWN0aW9ucywgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgTGljZW5zZWQKK1NvZnR3YXJlLgorCisxMi4xIEF1dG9tYXRpYyBUZXJtaW5hdGlvbiBVcG9uIEJyZWFjaC4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQKK2hlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcworaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUKK29mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgdGhhdCBhcmUgcHJvcGVybHkKK2dyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHRoYXQsIGJ5Cit0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwKK3NoYWxsIHN1cnZpdmUuCisKKzEyLjIgVGVybWluYXRpb24gVXBvbiBBc3NlcnRpb24gb2YgUGF0ZW50IEluZnJpbmdlbWVudC4gSWYgWW91IGluaXRpYXRlCitsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeQoranVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBMaWNlbnNvciBvciBhIENvbnRyaWJ1dG9yIChMaWNlbnNvciBvciBDb250cmlidXRvcgorYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYW4gYWN0aW9uIGlzIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAiUmVzcG9uZGVudCIpCithbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsCit0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUmVzcG9uZGVudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMyBvcgorNCBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgdXBvbiBzaXh0eSAoNjApIGRheXMgbm90aWNlCitmcm9tIFJlc3BvbmRlbnQgKHRoZSAiTm90aWNlIFBlcmlvZCIpIHVubGVzcyB3aXRoaW4gdGhhdCBOb3RpY2UgUGVyaW9kIFlvdQorZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibHkKK3JveWFsdHkgZm9yIFlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG1hZGUgYnkgc3VjaAorUmVzcG9uZGVudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIExpY2Vuc2VkCitTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUmVzcG9uZGVudC4gSWYgd2l0aGluIHNhaWQgTm90aWNlIFBlcmlvZCBhIHJlYXNvbmFibGUKK3JveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZQorcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkKK0xpY2Vuc29yIHRvIFlvdSB1bmRlciBTZWN0aW9ucyAzIGFuZCA0IGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZQorZXhwaXJhdGlvbiBvZiBzYWlkIE5vdGljZSBQZXJpb2QuCisKKzEyLjMgUmVhc29uYWJsZSBWYWx1ZSBvZiBUaGlzIExpY2Vuc2UuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50CitjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5CitsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQKK2xpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZAorUmVzcG9uZGVudCB1bmRlciBTZWN0aW9ucyAzIGFuZCA0IHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZwordGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCisxMi40IE5vIFJldHJvYWN0aXZlIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyCit0aGlzIFNlY3Rpb24gYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGxpY2Vuc2VzIHRvCitkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgdGhhdCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkKK2Rpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisxMy4wIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiCithcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YKKyJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUKK2RvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLgorQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNAorKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgTGljZW5zZWQgU29mdHdhcmUgd2l0aCBvbmx5Cit0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZworYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSwgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24KK2JldHdlZW4gb3IgYW1vbmcgWW91LCBMaWNlbnNvciwgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudAordG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2UsIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3JgcworcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgc3ViY29udHJhY3QsIG1hcmtldCwgb3IgZGlzdHJpYnV0ZQordGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlIHNhbWUgb3Igc2ltaWxhciBmdW5jdGlvbnMgYXMsIG9yCitvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBFeHRlbnNpb25zIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQsIG9yCitkaXN0cmlidXRlLgorCisxMy40IENvbnNlbnQgVG8gQnJlYWNoIE5vdCBXYWl2ZXIuIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IgdG8KK2VuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudAorb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLgorCisxMy41IFNldmVyYWJpbGl0eS4gVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nCit0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5Cit0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxMy42IEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IKK1lvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvcgorYWxsIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24sCit0aGVuIFlvdSBjYW5ub3QgdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlLgorCisxMy43IEV4cG9ydCBSZXN0cmljdGlvbnMuIFlvdSBtYXkgYmUgcmVzdHJpY3RlZCB3aXRoIHJlc3BlY3QgdG8gZG93bmxvYWRpbmcgb3IKK290aGVyd2lzZSBhY3F1aXJpbmcsIGV4cG9ydGluZywgb3IgcmVleHBvcnRpbmcgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIGFueQordW5kZXJseWluZyBpbmZvcm1hdGlvbiBvciB0ZWNobm9sb2d5IGJ5IFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyIGFwcGxpY2FibGUKK2xhd3MgYW5kIHJlZ3VsYXRpb25zLiBCeSBkb3dubG9hZGluZyBvciBieSBvdGhlcndpc2Ugb2J0YWluaW5nIHRoZSBMaWNlbnNlZAorU29mdHdhcmUsIFlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCBhbGwKK2FwcGxpY2FibGUgbGF3cyBhbmQgcmVndWxhdGlvbnMuCisKKzEzLjggQXJiaXRyYXRpb24sIEp1cmlzZGljdGlvbiAmYW1wOyBWZW51ZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CitDb2xvcmFkbyBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMKK290aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFlvdSBleHByZXNzbHkgYWdyZWUgdGhhdAorYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1Ym1pdHRlZCB0byBiaW5kaW5nIGFyYml0cmF0aW9uCit1bmRlciB0aGUgcnVsZXMgdGhlbiBwcmV2YWlsaW5nIG9mIHRoZSBBbWVyaWNhbiBBcmJpdHJhdGlvbiBBc3NvY2lhdGlvbi4gWW91CitmdXJ0aGVyIGFncmVlIHRoYXQgQWRhbXMgQ291bnR5LCBDb2xvcmFkbyBVU0EgaXMgcHJvcGVyIHZlbnVlIGFuZCBncmFudCBzdWNoCithcmJpdHJhdGlvbiBwcm9jZWVkaW5nIGp1cmlzZGljdGlvbiBhcyBtYXkgYmUgYXBwcm9wcmlhdGUgZm9yIHB1cnBvc2VzIG9mCityZXNvbHZpbmcgYW55IGRpc3B1dGUgdW5kZXIgdGhpcyBMaWNlbnNlLiBKdWRnZW1lbnQgdXBvbiBhbnkgYXdhcmQgbWFkZSBpbgorYXJiaXRyYXRpb24gbWF5IGJlIGVudGVyZWQgYW5kIGVuZm9yY2VkIGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbi4gVGhlIGFyYml0cmF0b3Igc2hhbGwgYXdhcmQgYXR0b3JuZXlgcyBmZWVzIGFuZCBjb3N0cyBvZgorYXJiaXRyYXRpb24gdG8gdGhlIHByZXZhaWxpbmcgcGFydHkuIFNob3VsZCBlaXRoZXIgcGFydHkgZmluZCBpdCBuZWNlc3NhcnkgdG8KK2VuZm9yY2UgaXRzIGFyYml0cmF0aW9uIGF3YXJkIG9yIHNlZWsgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb2Ygc3VjaCBhd2FyZCBpbiBhCitjaXZpbCBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZAordG8gcmVhc29uYWJsZSBhdHRvcm5leWBzIGZlZXMgYW5kIGNvc3RzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkKK2V4Y2x1ZGVkLiBZb3UgYW5kIExpY2Vuc29yIGV4cHJlc3NseSB3YWl2ZSBhbnkgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkKK2xpdGlnYXRpb24gY29uY2VybmluZyBMaWNlbnNlZCBTb2Z0d2FyZSBvciB0aGlzIExpY2Vuc2UuIEFueSBsYXcgb3IgcmVndWxhdGlvbgordGhhdCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZQorZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMy45IEVudGlyZSBBZ3JlZW1lbnQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuCit0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4KKworRVhISUJJVCBBCisKK1RoZSBMaWNlbnNlIE5vdGljZSBiZWxvdyBtdXN0IGFwcGVhciBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorY29weSBZb3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55IEV4dGVuc2lvbnMgdGhlcmV0bzoKKworVW5sZXNzIGV4cGxpY2l0bHkgYWNxdWlyZWQgYW5kIGxpY2Vuc2VkIGZyb20gTGljZW5zb3IgdW5kZXIgYW5vdGhlcgorbGljZW5zZSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVjaXByb2NhbCBQdWJsaWMKK0xpY2Vuc2UgKCJSUEwiKSBWZXJzaW9uIDEuNSwgb3Igc3Vic2VxdWVudCB2ZXJzaW9ucyBhcyBhbGxvd2VkIGJ5IHRoZSBSUEwsCithbmQgWW91IG1heSBub3QgY29weSBvciB1c2UgdGhpcyBmaWxlIGluIGVpdGhlciBzb3VyY2UgY29kZSBvciBleGVjdXRhYmxlCitmb3JtLCBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgUlBMLgorCitBbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFJQTCBpcyBwcm92aWRlZCBzdHJpY3RseSBvbiBhbiAiQVMKK0lTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5ECitMSUNFTlNPUiBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUCitMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5ULCBPUiBOT04tSU5GUklOR0VNRU5ULiBTZWUgdGhlIFJQTCBmb3Igc3BlY2lmaWMKK2xhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBSUEwuCisKK0VYSElCSVQgQgorCitUaGUgVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSBiZWxvdywgd2hlbiBwcm92aWRlZCwgbXVzdCBhcHBlYXIgaW4gZWFjaAordXNlci12aXNpYmxlIGRpc3BsYXkgYXMgZGVmaW5lZCBpbiBTZWN0aW9uIDYuNCAoZCk6CisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4MTRmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQU0wtMS4wCkBAIC0wLDAgKzEsMTgyIEBACisKK1JlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworKFJldi4gRGF0ZSBPY3RvYmVyIDI4LCAyMDAyKQorCitBbHNvIGF2YWlsYWJsZSBpbiB0ZXh0IGZvcm1hdC4KKworMS4gR2VuZXJhbCBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBSZWFsTmV0d29ya3MsIEluYy4sIG9yIGFueSBvdGhlciBlbnRpdHkgdGhhdCBlbGVjdHMgdG8gdXNlIHRoaXMgbGljZW5zZSwgKCJMaWNlbnNvciIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IExpY2Vuc29yIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMCAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpICgiTGljZW5zZSIpLiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiBZb3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nLCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBzb2Z0d2FyZSksIFlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSW4gYWRkaXRpb24sIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGJ5IGNsaWNraW5nIHRoZSBBY2NlcHQgYnV0dG9uIG9yIGRvd25sb2FkaW5nIHRoZSBzb2Z0d2FyZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgTGljZW5zb3IgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IChpKSBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gTGljZW5zb3IgYW5kIChpaSkgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB1c2luZyBvciBtYWtpbmcgdGhlIE9yaWdpbmFsIENvZGUgYWxvbmUgYW5kIG5vdCBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlOyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IChpKSBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIGFyZSBpbmZyaW5nZWQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGJ5IHVzaW5nIG9yIG1ha2luZyBZb3VyIE1vZGlmaWNhdGlvbnMsIHRha2VuIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggT3JpZ2luYWwgQ29kZS4KKworMS4yICJDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIiBtZWFucyBhbnkgb25lIG9mIHRoZSBsaWNlbnNlcyBsaXN0ZWQgb24gRXhoaWJpdCBCIG9yIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L2NvbXBsaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2VzIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGJ5IExpY2Vuc29yIGluIHdyaXRpbmcuIE5vdHdpdGhzdGFuZGluZyBhbnkgdGVybSB0byB0aGUgY29udHJhcnkgaW4gYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UsIGFueSBjb2RlIGNvdmVyZWQgYnkgYW55IENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UgdGhhdCBpcyB1c2VkIHdpdGggQ292ZXJlZCBDb2RlIG11c3QgYmUgbWFkZSByZWFkaWx5IGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtYXQgZm9yIHJveWFsdHktZnJlZSB1c2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIG9yIHRoaXMgTGljZW5zZS4KKworMS4zICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjQgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNSAiRGVwbG95IiBtZWFucyB0byB1c2UsIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgb3RoZXIgdGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpIGFuZC9vciBQZXJzb25hbCBVc2UsIGFuZCBpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlIGFuZC9vciBQZXJzb25hbCBVc2UsIGFzIHdlbGwgYXMgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpb24gb2YgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjYgIkRlcml2YXRpdmUgV29yayIgbWVhbnMgZWl0aGVyIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXcsIGFuZCBpbmNsdWRpbmcgYW55IHdvcmsgY29udGFpbmluZyBvciBpbmNsdWRpbmcgYW55IHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBvciBNb2RpZmljYXRpb25zLCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gRGVyaXZhdGl2ZSBXb3JrIGFsc28gaW5jbHVkZXMgYW55IHdvcmsgd2hpY2ggY29tYmluZXMgYW55IHBvcnRpb24gb2YgQ292ZXJlZCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgd2l0aCBjb2RlIG5vdCBvdGhlcndpc2UgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS43ICJFeHRlcm5hbGx5IERlcGxveSIgbWVhbnMgdG8gRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgaW4gYW55IHdheSB0aGF0IG1heSBiZSBhY2Nlc3NlZCBvciB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgdXNlZCB0byBwcm92aWRlIGFueSBzZXJ2aWNlcyB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIG9yIHVzZWQgaW4gYW55IHdheSB0byBkZWxpdmVyIGFueSBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgQ292ZXJlZCBDb2RlIGlzIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBhcnRpZXMsIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIHVzZWQgdG8gcHJvdmlkZSBzZXJ2aWNlcyBvciBvdGhlcndpc2UgZGVsaXZlciBjb250ZW50IHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdS4KKworMS44LiAiSW50ZXJmYWNlIiBtZWFucyBpbnRlcmZhY2VzLCBmdW5jdGlvbnMsIHByb3BlcnRpZXMsIGNsYXNzIGRlZmluaXRpb25zLCBBUElzLCBoZWFkZXIgZmlsZXMsIEdVSURzLCBWLVRhYmxlcywgYW5kL29yIHByb3RvY29scyBhbGxvd2luZyBvbmUgcGllY2Ugb2Ygc29mdHdhcmUsIGZpcm13YXJlIG9yIGhhcmR3YXJlIHRvIGNvbW11bmljYXRlIG9yIGludGVyb3BlcmF0ZSB3aXRoIGFub3RoZXIgcGllY2Ugb2Ygc29mdHdhcmUsIGZpcm13YXJlIG9yIGhhcmR3YXJlLgorCisxLjkgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjEwICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MgbWFkZSBhdmFpbGFibGUgYnkgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBMaWNlbnNvciBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzEuMTEgIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjEyICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKzEuMTMgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICZhbXA7IFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIExpY2Vuc29yYHMgY29weXJpZ2h0cyBjb3ZlciB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBMaWNlbnNvciBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2OworCisoYykgWW91IG11c3QgZHVwbGljYXRlLCB0byB0aGUgZXh0ZW50IGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOworCisoZCkgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyBhbmQKKworKGUpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLiBZb3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhlIE9iamVjdCBDb2RlIE5vdGljZSBzZXQgZm9ydGggaW4gRXhoaWJpdCBBIGluIHRoZSAiYWJvdXQiIGJveCBvciBvdGhlciBhcHByb3ByaWF0ZSBwbGFjZSB3aGVyZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcGxhY2VkLCBpbmNsdWRpbmcgYW55IHBhY2thZ2luZyBtYXRlcmlhbHMuCisKKzIuMiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIExpY2Vuc29yIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIGltcG9ydCBvciBvZmZlciBmb3Igc2FsZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgc3VjaCBsaWNlbnNlKHMpLgorCisyLjMgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlICh2aWEgZG93bmxvYWRpbmcgb3IgdXNpbmcgQ292ZXJlZCBDb2RlIG9yIG90aGVyd2lzZSBpbmRpY2F0aW5nIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UpLCBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIG5vbi1leGNsdXNpdmUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zb3JgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSBhbmQgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZSB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBncmFudCB0byBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIGlycmV2b2NhYmxlLCByb3lhbHR5IGZyZWUgbGljZW5zZSB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gbWFrZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIHVzZSwgaW1wb3J0LCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIExpY2Vuc29yYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7IGFuZAorCisoYikgWW91IGdyYW50IHRvIExpY2Vuc29yIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIExpY2Vuc29yIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGluIGFueSBmb3JtIGFuZCBmb3IgYW55IHB1cnBvc2UsIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCisoYykgWW91IGFncmVlIG5vdCB1c2UgYW55IGluZm9ybWF0aW9uIGRlcml2ZWQgZnJvbSBZb3VyIHVzZSBhbmQgcmV2aWV3IG9mIHRoZSBDb3ZlcmVkIENvZGUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYW55IGFsZ29yaXRobXMgb3IgaW52ZW50aW9ucyB0aGF0IG1heSBiZSBjb250YWluZWQgaW4gdGhlIENvdmVyZWQgQ29kZSwgZm9yIHRoZSBwdXJwb3NlIG9mIGFzc2VydGluZyBhbnkgb2YgWW91ciBwYXRlbnQgcmlnaHRzLCBvciBhc3Npc3RpbmcgYSB0aGlyZCBwYXJ0eSB0byBhc3NlcnQgYW55IG9mIGl0cyBwYXRlbnQgcmlnaHRzLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvci4KKworNC4gRGVyaXZhdGl2ZSBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IG90aGVyd2lzZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgYW4gaW50ZWdyYXRlZCBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGluY2x1ZGluZyBhbGwgTW9kaWZpY2F0aW9ucy4KKworNC4xIFlvdSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgcHVibGlzaCBvciBFeHRlcm5hbGx5IERlcGxveSwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIG5vIG90aGVyIGxpY2Vuc2UgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4yLiBZb3UgYWxzbyBtdXN0IG1ha2UgU291cmNlIENvZGUgYXZhaWxhYmxlIGZvciB0aGUgRGVyaXZhdGl2ZSBXb3JrIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIE1vZGlmaWNhdGlvbnMsIGRlc2NyaWJlZCBpbiBTZWN0aW9ucyAyIGFuZCAzLCBhYm92ZS4KKworNC4yIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzLiBTb2Z0d2FyZSBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHdpdGhvdXQgYW55IHVzZSBvZiBDb3ZlcmVkIENvZGUgYW5kIHdoaWNoIGNvbnRhaW4gbm8gcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLCBNb2RpZmljYXRpb25zIG9yIG90aGVyIERlcml2YXRpdmUgV29ya3MsIGJ1dCBhcmUgdXNlZCBvciBjb21iaW5lZCBpbiBhbnkgd2F5IHdpdGggdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGZvcm0gYSBsYXJnZXIgRGVyaXZhdGl2ZSBXb3JrLCBhcmUgZXhlbXB0IGZyb20gdGhlIGNvbmRpdGlvbnMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNC4xIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdDogdGhlIHNvZnR3YXJlIG1vZHVsZSwgaW5jbHVkaW5nIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGxpbmtlZCB0bywgaW50ZWdyYXRlZCB3aXRoLCBvciBwYXJ0IG9mIHRoZSBzYW1lIGFwcGxpY2F0aW9ucyBhcywgdGhlIHNvZnR3YXJlIG1vZHVsZSBieSBhbnkgbWV0aG9kIG11c3QgYmUgd2hvbGx5IHN1YmplY3QgdG8gb25lIG9mIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGFsbCBDb3ZlcmVkIENvZGUgbXVzdCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRodXMsIHRoZSBlbnRpcmUgRGVyaXZhdGl2ZSBXb3JrIG11c3QgYmUgbGljZW5zZWQgdW5kZXIgYSBjb21iaW5hdGlvbiBvZiB0aGUgUlBTTCAoZm9yIENvdmVyZWQgQ29kZSkgYW5kIGEgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSBmb3IgYW55IGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHNvZnR3YXJlIG1vZHVsZXMgd2l0aGluIHRoZSBEZXJpdmF0aXZlIFdvcmsuIFRoZSBmb3JlZ29pbmcgcmVxdWlyZW1lbnQgYXBwbGllcyBldmVuIGlmIHRoZSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIHdvdWxkIG9yZGluYXJpbHkgYWxsb3cgdGhlIHNvZnR3YXJlIG1vZHVsZSB0byBsaW5rIHdpdGgsIG9yIGZvcm0gbGFyZ2VyIHdvcmtzIHdpdGgsIG90aGVyIHNvZnR3YXJlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UuIEZvciBleGFtcGxlLCBhbHRob3VnaCB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSB2MS4xIGFsbG93cyBNb3ppbGxhIGNvZGUgdG8gYmUgY29tYmluZWQgd2l0aCBwcm9wcmlldGFyeSBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBNUEwsIGlmIE1QTC1saWNlbnNlZCBjb2RlIGlzIHVzZWQgd2l0aCBDb3ZlcmVkIENvZGUgdGhlIE1QTC1saWNlbnNlZCBjb2RlIGNvdWxkIG5vdCBiZSBjb21iaW5lZCBvciBsaW5rZWQgd2l0aCBhbnkgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIE1QTC4gVGhlIGdlbmVyYWwgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiA0LjIgaXMgdG8gZW5hYmxlIHVzZSBvZiBDb3ZlcmVkIENvZGUgd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgd2hvbGx5IHN1YmplY3QgdG8gYW4gYWNjZXB0YWJsZSBvcGVuIHNvdXJjZSBsaWNlbnNlLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHlvdXIgdXNlIG9mIHNvZnR3YXJlIHdpdGggQ292ZXJlZCBDb2RlIGlzIGFsbG93ZWQgdW5kZXIgWW91ciBsaWNlbnNlIHRvIHN1Y2ggc29mdHdhcmUuCisKKzQuMyBNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIENvdmVyZWQgQ29kZSB3aXRoIHRoZSBDb3ZlcmVkIENvZGUgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBDb3ZlcmVkIENvZGUpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkZWxpdmVyIHRoZSBDb3ZlcmVkIENvZGUgZm9yIGNvbWJpbmF0aW9uIGFuZC9vciBpbnRlZ3JhdGlvbiB3aXRoIGFuIGFwcGxpY2F0aW9uIHByZXZpb3VzbHkgcHJvdmlkZWQgYnkgWW91IChmb3IgZXhhbXBsZSwgdmlhIGF1dG9tYXRpYyB1cGRhdGluZyB0ZWNobm9sb2d5KSwgc3VjaCBjb21iaW5hdGlvbiBhbmQvb3IgaW50ZWdyYXRpb24gY29uc3RpdHV0ZXMgYSBEZXJpdmF0aXZlIFdvcmsgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCis1LiBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvIGdyYW50IGFueSByaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIENvdmVyZWQgQ29kZS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLiBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzIGFuZC9vciBhbnkgdXNlIG9yIGNvbWJpbmF0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIHRlY2hub2xvZ3kgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgdGhpcmQgcGFydGllcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIExpY2Vuc29yIHdoaWNoIExpY2Vuc29yIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzUuMS4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIG93bmVkIGJ5IExpY2Vuc29yICgiTGljZW5zb3IgTWFya3MiIGRlZmluZWQgaW4gRXhoaWJpdCBDKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gTm8gTGljZW5zb3IgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSB0aGUgTGljZW5zb3IgVHJhZGVtYXJrIFBvbGljeSBkZWZpbmVkIGluIEV4aGliaXQgQy4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4gKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudGBzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBMaWNlbnNvci4gTm8gb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluIHBhcnQgcHJlLXJlbGVhc2UsIHVudGVzdGVkLCBvciBub3QgZnVsbHkgdGVzdGVkIHdvcmtzLiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGVycm9ycyB0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiBUSEUgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIExJQ0VOU09SIEFORCBMSUNFTlNPUmBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIkxJQ0VOU09SIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT05TIDggQU5EIDkpIEFORCBBTEwgQ09OVFJJQlVUT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIExJQ0VOU09SIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgTElDRU5TT1IsIEEgTElDRU5TT1IgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgQ1JFQVRFIEEgV0FSUkFOVFkuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gaGlnaCByaXNrIGFjdGl2aXRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBudWNsZWFyIGZhY2lsaXRpZXMsIGFpcmNyYWZ0IG5hdmlnYXRpb24sIGFpcmNyYWZ0IGNvbW11bmljYXRpb24gc3lzdGVtcywgb3IgYWlyIHRyYWZmaWMgY29udHJvbCBtYWNoaW5lcyBpbiB3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuIExpY2Vuc29yIGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBMSUNFTlNPUiBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBTVFJJQ1QgTElBQklMSVRZKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBMSUNFTlNPUiBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIExpY2Vuc29yYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgdGVuIGRvbGxhcnMgKCQxMC4wMCkuCisKKzEwLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIExpY2Vuc29yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgTGljZW5zb3IgKCJMaWNlbnNvciBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gTGljZW5zb3IgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIExpY2Vuc29yIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzExLiBUZXJtaW5hdGlvbi4KKworMTEuMSBUZXJtIGFuZCBUZXJtaW5hdGlvbi4gVGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlIGlzIHBlcnBldHVhbCB1bmxlc3MgdGVybWluYXRlZCBhcyBwcm92aWRlZCBiZWxvdy4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisoYSkgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEyLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBMaWNlbnNvciAoaW5jbHVkaW5nIGJ5IGNyb3NzLWNsYWltIG9yIGNvdW50ZXIgY2xhaW0gaW4gYSBsYXdzdWl0KTsKKworKGQpIHVwb24gd3JpdHRlbiBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IGFueSB0aGlyZCBwYXJ0eSBhbGxlZ2luZyB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBhbnkgcGF0ZW50IChpbmNsdWRpbmcgYnkgY3Jvc3MtY2xhaW0gb3IgY291bnRlciBjbGFpbSBpbiBhIGxhd3N1aXQpLgorCisxMS4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworMTIuIE1pc2NlbGxhbmVvdXMuCisKKzEyLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEyLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIFlvdSwgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKzEyLjMgSW5kZXBlbmRlbnQgRGV2ZWxvcG1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIExpY2Vuc29yYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgRGVyaXZhdGl2ZSBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkgZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEyLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTIuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgTGljZW5zb3IgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIFNlYXR0bGUsIFdhc2hpbmd0b24sIGFuZCBZb3UgYW5kIExpY2Vuc29yIGhlcmVieSBjb25zZW50IHRvIHRoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTIuNyBFeHBvcnQvSW1wb3J0IExhd3MuIFRoaXMgc29mdHdhcmUgaXMgc3ViamVjdCB0byBhbGwgZXhwb3J0IGFuZCBpbXBvcnQgbGF3cyBhbmQgcmVzdHJpY3Rpb25zIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCB5b3UgcmVjZWl2ZSB0aGUgQ292ZXJlZCBDb2RlIGFuZCBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBZb3UgZG8gbm90IGV4cG9ydCwgcmUtZXhwb3J0IG9yIGltcG9ydCB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBkaXJlY3QgcHJvZHVjdCB0aGVyZW9mIGluIHZpb2xhdGlvbiBvZiBhbnkgc3VjaCByZXN0cmljdGlvbnMsIGxhd3Mgb3IgcmVndWxhdGlvbnMsIG9yIHdpdGhvdXQgYWxsIG5lY2Vzc2FyeSBhdXRob3JpemF0aW9ucy4KKworMTIuOCBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgV2FzaGluZ3Rvbi4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMzOyBxdWUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzM7ZGlnJiMyMzM7cyBlbiBhbmdsYWlzLgorCisKK0VYSElCSVQgQS4KKworIkNvcHlyaWdodCAmIzE2OTsgMTk5NS0yMDAyIFJlYWxOZXR3b3JrcywgSW5jLiBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgYXJlIHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJSUFNMIikgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L3Jwc2wgdW5sZXNzIHlvdSBoYXZlIGxpY2Vuc2VkIHRoZSBmaWxlIHVuZGVyIHRoZSBSZWFsTmV0d29ya3MgQ29tbXVuaXR5IFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIlJDU0wiKSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvcmNzbCwgaW4gd2hpY2ggY2FzZSB0aGUgUkNTTCB3aWxsIGFwcGx5LiBZb3UgbWF5IGFsc28gb2J0YWluIHRoZSBsaWNlbnNlIHRlcm1zIGRpcmVjdGx5IGZyb20gUmVhbE5ldHdvcmtzLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIFJQU0wgb3IsIGlmIHlvdSBoYXZlIGEgdmFsaWQgUkNTTCB3aXRoIFJlYWxOZXR3b3JrcyBhcHBsaWNhYmxlIHRvIHRoaXMgZmlsZSwgdGhlIFJDU0wuIFBsZWFzZSBzZWUgdGhlIGFwcGxpY2FibGUgUlBTTCBvciBSQ1NMIGZvciB0aGUgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgbGltaXRhdGlvbnMgZ292ZXJuaW5nIHVzZSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIZWxpeCBETkEgVGVjaG5vbG9neS4gUmVhbE5ldHdvcmtzIGlzIHRoZSBkZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIGNvZGUgYW5kIG93bnMgdGhlIGNvcHlyaWdodHMgaW4gdGhlIHBvcnRpb25zIGl0IGNyZWF0ZWQuCisKK1RoaXMgZmlsZSwgYW5kIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMgZmlsZSwgaXMgZGlzdHJpYnV0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIEFORCBSRUFMTkVUV09SS1MgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IFRlc3QgU3VpdGUocykgTG9jYXRpb24gKGlmIGxpY2Vuc2VkIHVuZGVyIHRoZSBSQ1NMKToKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iCisKK09iamVjdCBDb2RlIE5vdGljZTogSGVsaXggRE5BIENsaWVudCB0ZWNobm9sb2d5IGluY2x1ZGVkLiBDb3B5cmlnaHQgJiMxNjk7IFJlYWxOZXR3b3JrcywgSW5jLiwgMTk5NS0yMDAyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitFWEhJQklUIEIKKworQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMgZm9yIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlLiBUaGUgZm9sbG93aW5nIGxpc3QgYXBwbGllcyB0byB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBhcyBvZiBPY3RvYmVyIDI1LCAyMDAyLCB1bmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZC4KKworQWNhZGVtaWMgRnJlZSBMaWNlbnNlCitBcGFjaGUgU29mdHdhcmUgTGljZW5zZQorQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlCitBcnRpc3RpYyBsaWNlbnNlCitBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZXMKK0JTRCBsaWNlbnNlCitDb21tb24gUHVibGljIExpY2Vuc2UxCitFaWZmZWwgRm9ydW0gTGljZW5zZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkxCitHTlUgTGlicmFyeSBvciAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKTEKK0lCTSBQdWJsaWMgTGljZW5zZQorSW50ZWwgT3BlbiBTb3VyY2UgTGljZW5zZQorSmFiYmVyIE9wZW4gU291cmNlIExpY2Vuc2UKK01JVCBsaWNlbnNlCitNSVRSRSBDb2xsYWJvcmF0aXZlIFZpcnR1YWwgV29ya3NwYWNlIExpY2Vuc2UgKENWVyBMaWNlbnNlKQorTW90b3NvdG8gTGljZW5zZQorTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjAgKE1QTCkKK01vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIChNUEwpCitOb2tpYSBPcGVuIFNvdXJjZSBMaWNlbnNlCitPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZQorUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gTGljZW5zZQorUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UKK1N1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2UgKFNJU1NMKQorU3VuIFB1YmxpYyBMaWNlbnNlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EgT3BlbiBTb3VyY2UgTGljZW5zZQorVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wCitXM0MgTGljZW5zZQorWC5OZXQgTGljZW5zZQorWm9wZSBQdWJsaWMgTGljZW5zZQoremxpYi9saWJwbmcgbGljZW5zZQorMU5vdGU6IGJlY2F1c2UgdGhpcyBsaWNlbnNlIGNvbnRhaW5zIGNlcnRhaW4gcmVjaXByb2NhbCBsaWNlbnNpbmcgdGVybXMgdGhhdCBwdXJwb3J0IHRvIGV4dGVuZCB0byBpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBjb2RlLCBZb3UgbWF5IGJlIHByb2hpYml0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgb3RoZXJ3aXNlIGNvbXBhdGlibGUgbGljZW5zZSBmcm9tIHVzaW5nIGNvZGUgbGljZW5zZWQgdW5kZXIgaXRzIHRlcm1zIHdpdGggQ292ZXJlZCBDb2RlIGJlY2F1c2UgQ292ZXJlZCBDb2RlIG1heSBvbmx5IGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlLiBBbnkgYXR0ZW1wdCB0byBhcHBseSBub24gUlBTTCBsaWNlbnNlIHRlcm1zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBHUEwsIHRvIENvdmVyZWQgQ29kZSBpcyBleHByZXNzbHkgZm9yYmlkZGVuLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IFlvdXIgdXNlIG9mIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VkIGNvZGUgZG9lcyBub3QgdmlvbGF0ZSBlaXRoZXIgdGhlIFJQU0wgb3IgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2UuCisKK1RoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpc3QgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9jb21wbGljZW5zZQorCitFWEhJQklUIEMKKworUmVhbE5ldHdvcmtzYCBUcmFkZW1hcmsgcG9saWN5LgorCitSZWFsTmV0d29ya3MgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHRyYWRlbWFya3MgY29sbGVjdGl2ZWx5IGFzICJMaWNlbnNvciBUcmFkZW1hcmtzIjogIlJlYWxOZXR3b3JrcyIsICJSZWFsUGxheWVyIiwgIlJlYWxKdWtlYm94IiwgIlJlYWxTeXN0ZW0iLCAiUmVhbEF1ZGlvIiwgIlJlYWxWaWRlbyIsICJSZWFsT25lIFBsYXllciIsICJSZWFsTWVkaWEiLCAiSGVsaXgiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBSZWFsTmV0d29ya3MuCisKK1JlYWxOZXR3b3JrcyAiTGljZW5zb3IgVHJhZGVtYXJrIFBvbGljeSIgZm9yYmlkcyBhbnkgdXNlIG9mIExpY2Vuc29yIFRyYWRlbWFya3MgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzIHdpdGggUmVhbE5ldHdvcmtzYCB0aGlyZCBwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0IHd3dy5yZWFsbmV0d29ya3MuY29tL2luZm8vaGVsaXhsb2dvLmh0bWwuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkYmJjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JTQ1BMCkBAIC0wLDAgKzEsMTkzIEBACisKK1JpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4wCisKKworMS4gRGVmaW5pdGlvbnMuCisKKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKworMS4zLiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIHdlYnNpdGUgb3IgYW55IG90aGVyIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworCisxLjQuICJFeGVjdXRhYmxlIENvZGUiIG1lYW5zIEdvdmVybmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworCisxLjUuICJHb3Zlcm5lZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisKKzEuNi4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgR292ZXJuZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCisxLjcuICJMaWNlbnNhYmxlIiBtZWFucyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIEdvdmVybmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCisKKyhhKSBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisoYikgQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyB0aGUgIlBsYXRmb3JtIGZvciBJbmZvcm1hdGlvbiBBcHBsaWNhdGlvbnMiIFNvdXJjZSBDb2RlIGFzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBieSBSU1YuCisKKworMS4xMSAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IHRoZSBncmFudG9yIG9mIGEgbGljZW5zZSB0aGVyZXRvLgorCisxLjEyLiAiUlNWIiBtZWFucyBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiwgYSBDYWxpZm9ybmlhIGNvcnBvcmF0aW9uIHdpdGggb2ZmaWNlcyBhdCAyODgyIFNhbmQgSGlsbCBSb2FkLCBTdWl0ZSAxMTUsIE1lbmxvIFBhcmssIENBIDk0MDI1LTcwMjIuCisKKzEuMTMuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIEV4ZWN1dGFibGUgQ29kZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBHb3Zlcm5lZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworCisxLjE0LiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gR3JhbnQgZnJvbSBSU1YuIFJTViBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIEVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgR292ZXJuZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IChpKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgR292ZXJuZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9yIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiBZb3UgbXVzdCBjYXVzZSBhbGwgR292ZXJuZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBHb3Zlcm5lZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IFJTViBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIFJTViBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgR292ZXJuZWQgQ29kZS4KKworCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCiszLjQuMS4gVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBSU1YgYW5kIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIEdvdmVybmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLiBJbiB0aGUgZXZlbnQgdGhhdCBZb3UgYXJlIGEgQ29udHJpYnV0b3IsIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBpbiB0aGUgTEVHQUwgZmlsZSwgeW91ciBNb2RpZmljYXRpb25zIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9ucyBhbmQsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBubyB0aGlyZCBwYXJ0eSBoYXMgYW55IGNsYWltIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMpIHJlbGF0aW5nIHRvIHlvdXIgTW9kaWZpY2F0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0IHRoZSBMRUdBTCBmaWxlIGluY2x1ZGVzIGNvbXBsZXRlIGRldGFpbHMgb2YgYW55IGxpY2Vuc2Ugb3Igb3RoZXIgcmVzdHJpY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0IG9mIHlvdXIgTW9kaWZpY2F0aW9ucy4KKworMy40LjIuIENvbnRyaWJ1dG9yIEFQSXMuIElmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIEdvdmVybmVkIENvZGUuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBHb3Zlcm5lZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiBSU1Ygb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBDb2RlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgR292ZXJuZWQgQ29kZSBpbiBFeGVjdXRhYmxlIENvZGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgR292ZXJuZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIEdvdmVybmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgR292ZXJuZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgUlNWIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgUlNWIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBSU1Ygb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKworMy43LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIEdvdmVybmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBHb3Zlcm5lZCBDb2RlLgorCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGV0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBHb3Zlcm5lZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKworNS4gVHJhZGVtYXJrIFVzYWdlLgorCisKKworNS4xLiBBZHZlcnRpc2luZyBNYXRlcmlhbHMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhlIEdvdmVybmVkIENvZGUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OiAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiIKKworCis1LjIuIEVuZG9yc2VtZW50cy4gVGhlIG5hbWVzICJSaWNvaCwiICJSaWNvaCBTaWxpY29uIFZhbGxleSwiIGFuZCAiUlNWIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBDb250cmlidXRvciBWZXJzaW9ucyBvciBMYXJnZXIgV29ya3Mgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFJTVi4KKworCis1LjMuIFByb2R1Y3QgTmFtZXMuIENvbnRyaWJ1dG9yIFZlcnNpb25zIGFuZCBMYXJnZXIgV29ya3MgbWF5IG5vdCBiZSBjYWxsZWQgIlJpY29oIiBub3IgbWF5IHRoZSB3b3JkICJSaWNvaCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBSU1YuCisKKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKworCis2LjEuIE5ldyBWZXJzaW9ucy4gUlNWIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgR292ZXJuZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIEdvdmVybmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFJTVi4gTm8gb25lIG90aGVyIHRoYW4gUlNWIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIEdvdmVybmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworR09WRVJORUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBHT1ZFUk5FRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBHT1ZFUk5FRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIEdPVkVSTkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBSU1YgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIEdPVkVSTkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworCis4LiBUZXJtaW5hdGlvbi4KKworCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBHb3Zlcm5lZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworCis4LjIuIElmIFlvdSBpbml0aWF0ZSBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24gYWdhaW5zdCBSU1Ygb3IgYSBDb250cmlidXRvciAoUlNWIG9yIHRoZSBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlIHByb3ZpZGVkIHRvIFlvdSBieSB0aGUgUGFydGljaXBhbnQsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE9yaWdpbmFsIENvZGUgb3IgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCisKKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKworOS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFJTViwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgR09WRVJORUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBUTyBUSEUgRVhURU5UIFRIQVQgQU5ZIEVYQ0xVU0lPTiBPRiBEQU1BR0VTIEFCT1ZFIElTIE5PVCBWQUxJRCwgWU9VIEFHUkVFIFRIQVQgSU4gTk8gRVZFTlQgV0lMTCBSU1ZTIExJQUJJTElUWSBVTkRFUiBPUiBSRUxBVEVEIFRPIFRISVMgQUdSRUVNRU5UIEVYQ0VFRCBGSVZFIFRIT1VTQU5EIERPTExBUlMgKCQ1LDAwMCkuIFRIRSBHT1ZFUk5FRCBDT0RFIElTIE5PVCBJTlRFTkRFRCBGT1IgVVNFIElOIENPTk5FQ1RJT04gV0lUSCBBTlkgTlVDTEVSLCBBVklBVElPTiwgTUFTUyBUUkFOU0lUIE9SIE1FRElDQUwgQVBQTElDQVRJT04gT1IgQU5ZIE9USEVSIElOSEVSRU5UTFkgREFOR0VST1VTIEFQUExJQ0FUSU9OIFRIQVQgQ09VTEQgUkVTVUxUIElOIERFQVRILCBQRVJTT05BTCBJTkpVUlksIENBVEFTVFJPUEhJQyBEQU1BR0UgT1IgTUFTUyBERVNUUlVDVElPTiwgQU5EIFlPVSBBR1JFRSBUSEFUIE5FSVRIRVIgUlNWIE5PUiBBTlkgQ09OVFJJQlVUT1IgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIE9GIEFOWSBOQVRVUkUgQVMgQSBSRVNVTFQgT0YgQU5ZIFNVQ0ggVVNFIE9GIFRIRSBHT1ZFUk5FRCBDT0RFLgorCisKKzEwLiBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLgorCitUaGUgR292ZXJuZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBHb3Zlcm5lZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworCisxMS4gTWlzY2VsbGFuZW91cy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgcGFydGllcyBzdWJtaXQgdG8gcGVyc29uYWwganVyaXNkaWN0aW9uIGluIENhbGlmb3JuaWEgYW5kIGZ1cnRoZXIgYWdyZWUgdGhhdCBhbnkgY2F1c2Ugb2YgYWN0aW9uIGFyaXNpbmcgdW5kZXIgb3IgcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBicm91Z2h0IGluIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIFRoZSBsb3NpbmcgcGFydHkgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIE5vdHdpdGhzdGFuZGluZyBhbnl0aGluZyB0byB0aGUgY29udHJhcnkgaGVyZWluLCBSU1YgbWF5IHNlZWsgaW5qdW5jdGl2ZSByZWxpZWYgcmVsYXRlZCB0byBhIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBpbiBhbnkgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbi4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKworMTIuIFJlc3BvbnNpYmlsaXR5IGZvciBDbGFpbXMuCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgR292ZXJuZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZSByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZSByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKKworCisgCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnJpc291cmNlLm9yZy9SUEwKKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoaXMgY29kZSB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBSaWNvaCBTaWxpY29uIFZhbGxleSwgSW5jLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1J1YnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyZTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1J1YnkKQEAgLTAsMCArMSw2MCBAQAorCitSdWJ5IGlzIGNvcHlyaWdodGVkIGZyZWUgc29mdHdhcmUgYnkgWXVraWhpcm8gTWF0c3Vtb3RvIDxtYXR6QG5ldGxhYi5jby5qcD4uCitZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIGVpdGhlciB0aGUgdGVybXMgb2YgdGhlIEdQTAorKHNlZSBDT1BZSU5HLnR4dCBmaWxlKSwgb3IgdGhlIGNvbmRpdGlvbnMgYmVsb3c6CisKKyAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKKyAgICAgc29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUKKyAgICAgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0CisgICAgIHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UKKyAgICAgICAgICBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQKKyAgIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBieSBhbGxvd2luZworICAgdGhlIGF1dGhvciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc29mdHdhcmUuCisKKyAgICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3IKKyAgICAgICAgICBvcmdhbml6YXRpb24uCisKKyAgICAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0CisgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQuCisKKyAgICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLgorCisgIDMuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZQorICAgICBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIGRpc3RyaWJ1dGUgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzIG9mIHRoZSBzb2Z0d2FyZSwKKyAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkKKyAgIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgZGlzdHJpYnV0aW9uLgorCisgICAgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YKKyAgIHRoZSBzb2Z0d2FyZS4KKworICAgICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgd2l0aAorICAgICAgICAgIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuCisKKyAgNC4gWW91IG1heSBtb2RpZnkgYW5kIGluY2x1ZGUgdGhlIHBhcnQgb2YgdGhlIHNvZnR3YXJlIGludG8gYW55IG90aGVyCisgICAgIHNvZnR3YXJlIChwb3NzaWJseSBjb21tZXJjaWFsKS4gIEJ1dCBzb21lIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24KKyAgICAgYXJlIG5vdCB3cml0dGVuIGJ5IHRoZSBhdXRob3IsIHNvIHRoYXQgdGhleSBhcmUgbm90IHVuZGVyIHRoaXMgdGVybXMuCisKKyAgICAgVGhleSBhcmUgZ2MuYyhwYXJ0bHkpLCB1dGlscy5jKHBhcnRseSksIHJlZ2V4LltjaF0sIHN0LltjaF0gYW5kIHNvbWUKKyAgICAgZmlsZXMgdW5kZXIgdGhlIC4vbWlzc2luZyBkaXJlY3RvcnkuICBTZWUgZWFjaCBmaWxlIGZvciB0aGUgY29weWluZworICAgICBjb25kaXRpb24uCisKKyAgNS4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgCisgICAgIG91dHB1dCBmcm9tIHRoZSBzb2Z0d2FyZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZQorICAgICBjb3B5cmlnaHQgb2YgdGhlIHNvZnR3YXJlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCAKKyAgICAgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworICAgICBzb2Z0d2FyZS4KKworICA2LiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAgICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICBQVVJQT1NFLgorCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NBWC1QRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NBWC1QRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWZkMTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBECkBAIC0wLDAgKzEsMzMgQEAKKworQ29weXJpZ2h0IFN0YXR1cyBmb3IgU0FYCisKK1NBWCBpcyBmcmVlIQorCitJbiBmYWN0LCBpdGBzIG5vdCBwb3NzaWJsZSB0byBvd24gYSBsaWNlbnNlIHRvIFNBWCwgc2luY2UgaXRgcyBiZWVuIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworTm8gV2FycmFudHkKKworQmVjYXVzZSBTQVggaXMgcmVsZWFzZWQgdG8gdGhlIHB1YmxpYyBkb21haW4sIHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZGVzaWduIG9yIGZvciB0aGUgc29mdHdhcmUgaW1wbGVtZW50YXRpb24sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluIHdyaXRpbmcgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZC9vciBvdGhlciBwYXJ0aWVzIHByb3ZpZGUgU0FYICJhcyBpcyIgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIFNBWCBpcyB3aXRoIHlvdS4gU2hvdWxkIFNBWCBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vciByZWRpc3RyaWJ1dGUgU0FYLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSBTQVggKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IHlvdSBvciB0aGlyZCBwYXJ0aWVzIG9yIGEgZmFpbHVyZSBvZiB0aGUgU0FYIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworQ29weXJpZ2h0IERpc2NsYWltZXJzCisKK1RoaXMgcGFnZSBpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIHRoYXQgZWZmZWN0IGJ5IERhdmlkIE1lZ2dpbnNvbiwgd2hvIHdvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIGNsYWltIGNvcHlyaWdodCBmb3IgdGhlIG9yaWdpbmFsIHdvcmsuCisKK1NBWCAxLjAKKworVmVyc2lvbiAxLjAgb2YgdGhlIFNpbXBsZSBBUEkgZm9yIFhNTCAoU0FYKSwgY3JlYXRlZCBjb2xsZWN0aXZlbHkgYnkgdGhlIG1lbWJlcnNoaXAgb2YgdGhlIFhNTC1ERVYgbWFpbGluZyBsaXN0LCBpcyBoZXJlYnkgcmVsZWFzZWQgaW50byB0aGUgcHVibGljIGRvbWFpbi4KKworTm8gb25lIG93bnMgU0FYOiB5b3UgbWF5IHVzZSBpdCBmcmVlbHkgaW4gYm90aCBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGJ1bmRsZSBpdCB3aXRoIHlvdXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGl0IG9uIGEgQ0QtUk9NLCBsaXN0IHRoZSBzb3VyY2UgY29kZSBpbiBhIGJvb2ssIG1pcnJvciB0aGUgZG9jdW1lbnRhdGlvbiBhdCB5b3VyIG93biB3ZWIgc2l0ZSwgb3IgdXNlIGl0IGluIGFueSBvdGhlciB3YXkgeW91IHNlZSBmaXQuCisKK0RhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuCisxOTk4LTA1LTExCisKK1NBWCAyLjAKKworSSBoZXJlYnkgYWJhbmRvbiBhbnkgcHJvcGVydHkgcmlnaHRzIHRvIFNBWCAyLjAgKHRoZSBTaW1wbGUgQVBJIGZvciBYTUwpLCBhbmQgcmVsZWFzZSBhbGwgb2YgdGhlIFNBWCAyLjAgc291cmNlIGNvZGUsIGNvbXBpbGVkIGNvZGUsIGFuZCBkb2N1bWVudGF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLiBTQVggY29tZXMgd2l0aCBOTyBXQVJSQU5UWSBvciBndWFyYW50ZWUgb2YgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisKK0RhdmlkIE1lZ2dpbnNvbiwgTWVnZ2luc29uIFRlY2hub2xvZ2llcyBMdGQuCisyMDAwLTA1LTA1CisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5OTg1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NHSS0xCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIEFMTCBSSUdIVFMgUkVTRVJWRUQgCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciAKKyAqIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZQorICogYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgCisgKiB0aGUgbmFtZSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nCisgKiBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIAorICoKKyAqIFRIRSBNQVRFUklBTCBFTUJPRElFRCBPTiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIFRPIFlPVSAiQVMtSVMiCisgKiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsCisgKiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIFNJTElDT04KKyAqIEdSQVBISUNTLCBJTkMuICBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWU9ORSBFTFNFIEZPUiBBTlkgRElSRUNULAorICogU1BFQ0lBTCwgSU5DSURFTlRBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorICogS0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwKKyAqIExPU1MgT0YgUFJPRklULCBMT1NTIE9GIFVTRSwgU0FWSU5HUyBPUiBSRVZFTlVFLCBPUiBUSEUgQ0xBSU1TIE9GCisgKiBUSElSRCBQQVJUSUVTLCBXSEVUSEVSIE9SIE5PVCBTSUxJQ09OIEdSQVBISUNTLCBJTkMuICBIQVMgQkVFTgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBMT1NTLCBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBQT1NTRVNTSU9OLCBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqIAorICogVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAKKyAqIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0bworICogcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiBGQVIgNTIuMjI3LjE5KGMpKDIpIG9yIHN1YnBhcmFncmFwaAorICogKGMpKDEpKGlpKSBvZiB0aGUgUmlnaHRzIGluIFRlY2huaWNhbCBEYXRhIGFuZCBDb21wdXRlciBTb2Z0d2FyZQorICogY2xhdXNlIGF0IERGQVJTIDI1Mi4yMjctNzAxMyBhbmQvb3IgaW4gc2ltaWxhciBvciBzdWNjZXNzb3IKKyAqIGNsYXVzZXMgaW4gdGhlIEZBUiBvciB0aGUgRE9EIG9yIE5BU0EgRkFSIFN1cHBsZW1lbnQuCisgKiBVbnB1Ymxpc2hlZC0tIHJpZ2h0cyByZXNlcnZlZCB1bmRlciB0aGUgY29weXJpZ2h0IGxhd3Mgb2YgdGhlCisgKiBVbml0ZWQgU3RhdGVzLiAgQ29udHJhY3Rvci9tYW51ZmFjdHVyZXIgaXMgU2lsaWNvbiBHcmFwaGljcywKKyAqIEluYy4sIDIwMTEgTi4gIFNob3JlbGluZSBCbHZkLiwgTW91bnRhaW4gVmlldywgQ0EgOTQwMzktNzMxMS4KKyAqCisgKiBPcGVuR0woVE0pIGlzIGEgdHJhZGVtYXJrIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU01BSUxfR1BMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU01BSUxfR1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYzNmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwKQEAgLTAsMCArMSwxNjQgQEAKK1RoaXMgaXMgdGhlIERlYmlhbiBHTlUvTGludXggcGFja2FnZSBkZWJpYW51dGlscy4KKworSXQgaXMgYW4gb3JpZ2luYWwgRGViaWFuIHBhY2thZ2UuICBQcm9ncmFtcyBpbiBpdCB3ZXJlIG1haW50YWluZWQgYnkKK0d1eSBNYW9yIDxtYW9yQGRlYmlhbi5vcmc+LCBhbmQgYXJlIG5vdyBtYWludGFpbmVkIGJ5IENsaW50IEFkYW1zCis8c2NoaXpvQGRlYmlhbi5vcmc+LgorCitBbGwgaXRzIHByb2dyYW1zIGV4Y2VwdCByZWFkbGluaywgc2F2ZWxvZywgYW5kIHdoaWNoIG1heSBiZQorcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIFZlcnNpb24gMiBvciBsYXRlciwKK2ZvdW5kIG9uIERlYmlhbiBzeXN0ZW1zIGluIHRoZSBmaWxlIC91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0dQTC4KKword2hpY2ggaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK3JlYWRsaW5rIGlzIENvcHlyaWdodCAoYykgMTk5NyBLZW5uZXRoIFN0YWlsZXksIGFuZCBtYXkgYWxzbyBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgY29weXJpZ2h0LgorCitzYXZlbG9nIG1heSBiZSByZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6IChUaGUgcmVzdCBvZgordGhpcyBmaWxlIGNvbnNpc3RzIG9mIHNhdmVsb2cncyBkaXN0cmlidXRpb24gdGVybXMuKQorCisjaWRlbnQJIkAoIylzbWFpbDpSRUxFQVNFLTNfMjpDT1BZSU5HLHYgMS4yIDE5OTYvMDYvMTQgMTg6NTk6MTAgd29vZHMgRXhwIgorCisJCSAgICAgU01BSUwgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgKENsYXJpZmllZCAxMSBGZWIgMTk4OCkKKworIENvcHlyaWdodCAoQykgIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyCisgQ29weXJpZ2h0IChDKSAgMTk5MiBSb25hbGQgUy4gS2FycgorIENvcHlsZWZ0IChHTlUpIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyCisKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gIFlvdSBjYW4gYWxzbworIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorCisgIFRoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCB5b3UgYXQgdGhlCittZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuICBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGdpdmUgZXZlcnlvbmUgdGhlIHJpZ2h0IHRvIHNoYXJlIFNNQUlMLiAgVG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBnZXQgdGhlIHJpZ2h0cyB3ZSB3YW50IHlvdSB0byBoYXZlLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zCit0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyCit0aGUgcmlnaHRzLiAgSGVuY2UgdGhpcyBsaWNlbnNlIGFncmVlbWVudC4KKworICBTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGdpdmUKK2F3YXkgY29waWVzIG9mIFNNQUlMLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGVsc2UgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgU01BSUwgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5b25lIGhhcyBzdWNoIHJpZ2h0cywgd2UgaGF2ZSB0byBmb3JiaWQgeW91IHRvCitkZXByaXZlIGFueW9uZSBlbHNlIG9mIHRoZXNlIHJpZ2h0cy4gIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZQorY29waWVzIG9mIFNNQUlMLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91CitoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLgorCisgIEFsc28sIGZvciBvdXIgb3duIHByb3RlY3Rpb24sIHdlIG11c3QgbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUKK2ZpbmRzIG91dCB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciBTTUFJTC4gIElmIFNNQUlMIGlzIG1vZGlmaWVkIGJ5Citzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdAordGhleSBoYXZlIGlzIG5vdCB3aGF0IHdlIGRpc3RyaWJ1dGVkLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkCitieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiBvdXIgcmVwdXRhdGlvbi4KKworICBUaGVyZWZvcmUgd2UgKExhbmRvbiBDdXJ0IE5vbGwgYW5kIFJvbmFsZCBTLiBLYXJyKSBtYWtlIHRoZSBmb2xsb3dpbmcgCit0ZXJtcyB3aGljaCBzYXkgd2hhdCB5b3UgbXVzdCBkbyB0byBiZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgb3IgY2hhbmdlIAorU01BSUwuCisKKworCQkJQ09QWUlORyBQT0xJQ0lFUworCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgU01BSUwgc291cmNlIGNvZGUKK2FzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhIHZhbGlkIGNvcHlyaWdodCBub3RpY2UgIkNvcHlyaWdodAorKEMpIDE5ODggTGFuZG9uIEN1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyIiAob3Igd2l0aCB3aGF0ZXZlciB5ZWFyIGlzCithcHByb3ByaWF0ZSk7IGtlZXAgaW50YWN0IHRoZSBub3RpY2VzIG9uIGFsbCBmaWxlcyB0aGF0IHJlZmVyIHRvIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgU01BSUwgcHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgYWxvbmcgd2l0aCB0aGUgcHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZQorZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIFNNQUlMIG9yIGFueSBwb3J0aW9uIG9mIGl0LAorYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBoIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCisgICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwKKyAgICB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIFNNQUlMIG9yCisgICAgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgb24gdGVybXMgaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UKKyAgICBBZ3JlZW1lbnQgKGV4Y2VwdCB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IG1vcmUgZXh0ZW5zaXZlCisgICAgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbCB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbikuCisKKyAgICBjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKKyAgICB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eQorICAgIHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCitNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgdW5yZWxhdGVkIHByb2dyYW0gd2l0aCB0aGlzIHByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciBwcm9ncmFtIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgU01BSUwgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LAordW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbAorICAgIHNoaXBwaW5nIGNoYXJnZSkgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uLWNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSBhbG9uZS4pCisKK0ZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yCithbGwgbW9kdWxlcyBpdCBjb250YWluczsgYnV0LCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlCitzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyB3aGljaCBhcmUgc3RhbmRhcmQgbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBmaWxlIHJ1bnMuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBTTUFJTAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNNQUlMIGlzIHZvaWQgYW5kCit5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIHByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZQorYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlcgorc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUKK3RoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiBTTUFJTCBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIExhbmRvbgorQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIgdmlhIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYXQgNTEKK0ZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBXZSBoYXZlIG5vdCB5ZXQKK3dvcmtlZCBvdXQgYSBzaW1wbGUgcnVsZSB0aGF0IGNhbiBiZSBzdGF0ZWQgaGVyZSwgYnV0IHdlIHdpbGwgb2Z0ZW4KK3Blcm1pdCB0aGlzLiAgV2Ugd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZQorZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcKK3RoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZS4KKworWW91ciBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgYWJvdXQgb3VyIGxpY2Vuc2luZyBwb2xpY2llcyBhbmQgb3VyCitzb2Z0d2FyZSBhcmUgd2VsY29tZSEgIFRoaXMgY29udHJhY3Qgd2FzIGJhc2VkIG9uIHRoZSBjb250cmFjdCBtYWRlIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgUGxlYXNlIGNvbnRhY3QgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorVVNBLCBvciBjYWxsICg2MTcpIDU0Mi01OTQyIGZvciBkZXRhaWxzIG9uIGNvcHlsZWZ0ZWQgbWF0ZXJpYWwgaW4KK2dlbmVyYWwuCisKKwkJICAgICAgIE5PIFdBUlJBTlRZCisKKyAgQkVDQVVTRSBTTUFJTCBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgV0UgUFJPVklERSBBQlNPTFVURUxZIE5PCitXQVJSQU5UWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBTVEFURSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HLCBMQU5ET04gQ1VSVCBOT0xMICYgUk9OQUxEIFMuIEtBUlIgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgU01BSUwgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgU01BSUwgSVMgV0lUSAorWU9VLiAgU0hPVUxEIFNNQUlMIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwKK05FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBXSUxMIExBTkRPTiBDVVJUIE5PTEwgJgorUk9OQUxEIFMuIEtBUlIgQU5EL09SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQgUkVESVNUUklCVVRFCitTTUFJTCBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0xPU1QgUFJPRklUUywgTE9TVCBNT05JRVMsIE9SIE9USEVSIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UKKyhJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVECitJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFCitQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpIFNNQUlMLCBFVkVOIElGIFlPVSBIQVZFCitCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWQorQU5ZIE9USEVSIFBBUlRZLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0OGIzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NQTC0xLjAKQEAgLTAsMCArMSw1MDcgQEAKKworU1VOIFBVQkxJQyBMSUNFTlNFIFZlcnNpb24gMS4wCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwKK3ByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZQorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZiBhbmQgY29ycmVzcG9uZGluZyBkb2N1bWVudGF0aW9uIHJlbGVhc2VkCit3aXRoIHRoZSBzb3VyY2UgY29kZS4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcwordGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCitzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nCitPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIuLi8gbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gIlNvdXJjZSBDb2RlIi4uLyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZQorZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzCithbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkCit0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlCitjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzCitjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCitwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMKK3dpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4KK0ZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMKK2NvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YKK3RoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiLi4vIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwKK3RvCitjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3QKK29yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUKK291dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IKK3BvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhCitMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mCitPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3IKK3NhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMKK3RoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCitncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikKK3NlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZAorYnk6CisKK2kpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUKK09yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLgorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKK2hlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50CitvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkCitieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZAorYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4KK2NvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKK2NvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IKK3BvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQordGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoCitjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZAorQ29kZS4KKworKGQpIG5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCitDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IKK2luZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yCitWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvcgorVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkKK0NvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUKK2Rpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQordmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUKK2FuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCitlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikKK21vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4CisoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KK2hhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IKK2Vuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KKworSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yCittdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIi4uL0xFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4KK3N1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYKK0NvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlCithdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseQorbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlCit0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZQorbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobworcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworaW50ZXJmYWNlICgiQVBJIi4uLykgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzCit3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24KKzMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMKK2FyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMKK3N1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcworTGljZW5zZQorCisuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKK0NvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEKK2xvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5Cit0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykKK1lvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcAorcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKK29ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UKK21heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzCitvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK3RoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUKK29ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZAoraW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZQorQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkCitDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkKK2NvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcworcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcworTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudAorbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyCitmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlCitJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKK3RoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoCit0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlcgorY29kZQorbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvCitzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpCitkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCittdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdAorYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUKK2V4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCitzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCithdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKK2Rpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZgordGhlCitMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKK3ZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VuLiBObyBvbmUKK290aGVyIHRoYW4gU3VuIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQKK0NvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91CittYXkKK29ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0OiAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0Cit0aGUgcGhyYXNlcyAiU3VuLCIgIlN1biBQdWJsaWMgTGljZW5zZSwiIG9yICJTUEwiLi4vIG9yIGFueSBjb25mdXNpbmdseQorc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91cgorbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyCit0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUKK1N1biBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLAorT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEKK3NoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMKK0xpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICIuLi9BUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KK1RIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERQorSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwKK1lPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKK0NPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIKK09GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GCitBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCitvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tCitZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZwordGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKK2luZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2gKK1BhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCit1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpCithZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlCityb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdAorbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQoraXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YKK3RoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCithbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpCithbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKK3NvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK1BhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKK2FsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcworYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcworZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KK2ludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCitsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLAorYWxsCitlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykKK3doaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKK3ByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCitPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKK0NIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCitJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKK1BST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08KK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorNDgKK0MuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIKK2FuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIuLi8gYXMgc3VjaCB0ZXJtcyBhcmUKK3VzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4KKzEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwKK1UuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cworc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKK0NhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgorYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLgorV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsCitvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4KK0Rpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQKK2V4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK0NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCitBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKK0xpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzCityZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0bword29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoCityZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCitzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCisKK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworP011bHRpcGxlLUxpY2Vuc2VkPy4gP011bHRpcGxlLUxpY2Vuc2VkPyBtZWFucyB0aGF0IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCitZb3VyIGNob2ljZSBvZiB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRXhoaWJpdCBBIC1TdW4gUHVibGljIExpY2Vuc2UgTm90aWNlLgorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTdW4gUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKworY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0CisKK2h0dHA6Ly93d3cuc3VuLmNvbS8KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX18uIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUKKworT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX18gYXJlIENvcHlyaWdodAorCisoQylfX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKworb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSA/W19fX10gTGljZW5zZT8pLCBpbiB3aGljaCBjYXNlIHRoZQorCitwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4KKworSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUKKwordGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisKK3ZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBTUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcKKwordGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyCisKK3Byb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQorCitwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKworZWl0aGVyIHRoZSBTUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mCisKK3RoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZAorCit1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlCisKK09yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TaW1wbGUtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODM1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TaW1wbGUtMi4wCkBAIC0wLDAgKzEsMjcgQEAKKworU2ltcGxlIFB1YmxpYyBMaWNlbnNlIChTaW1QTCkKKworUHJlYW1ibGUKK1RoaXMgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIDIuMCAoU2ltUEwgMi4wIGZvciBzaG9ydCkgaXMgYSBwbGFpbiBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbiBvZiBHUEwgMi4wLiAgVGhlIHdvcmRzIGFyZSBkaWZmZXJlbnQsIGJ1dCB0aGUgZ29hbCBpcyB0aGUgc2FtZSAtIHRvIGd1YXJhbnRlZSBmb3IgYWxsIHVzZXJzIHRoZSBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2Ugc29mdHdhcmUuICBJZiBhbnlvbmUgd29uZGVycyBhYm91dCB0aGUgbWVhbmluZyBvZiB0aGUgU2ltUEwsIHRoZXkgc2hvdWxkIGludGVycHJldCBpdCBhcyBjb25zaXN0ZW50IHdpdGggR1BMIDIuMC4KK1NpbXBsZSBQdWJsaWMgTGljZW5zZSAoU2ltUEwpIDIuMAorVGhlIFNpbVBMIGFwcGxpZXMgdG8gdGhlIHNvZnR3YXJlYHMgc291cmNlIGFuZCBvYmplY3QgY29kZSBhbmQgY29tZXMgd2l0aCBhbnkgcmlnaHRzIHRoYXQgSSBoYXZlIGluIGl0IChvdGhlciB0aGFuIHRyYWRlbWFya3MpLiBZb3UgYWdyZWUgdG8gdGhlIFNpbVBMIGJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZywgb3IgbWFraW5nIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBzb2Z0d2FyZS4KKworWW91IGdldCB0aGUgcm95YWx0eSBmcmVlIHJpZ2h0IHRvOgorVXNlIHRoZSBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2U7CitNYWtlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXQgKHRoaXMgaXMgY2FsbGVkIGEgIkRlcml2ZWQgV29yayIpOworQ29weSBhbmQgZGlzdHJpYnV0ZSBpdCBhbmQgYW55IERlcml2ZWQgV29yay4KK0lmIHlvdSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBvciBhIERlcml2ZWQgV29yaywgeW91IG11c3QgZ2l2ZSBiYWNrIHRvIHRoZSBjb21tdW5pdHkgYnk6CitQcm9taW5lbnRseSBub3RpbmcgdGhlIGRhdGUgb2YgYW55IGNoYW5nZXMgeW91IG1ha2U7CitMZWF2aW5nIG90aGVyIHBlb3BsZWBzIGNvcHlyaWdodCBub3RpY2VzLCB3YXJyYW50eSBkaXNjbGFpbWVycywgYW5kIGxpY2Vuc2UgdGVybXMgIGluIHBsYWNlOworUHJvdmlkaW5nIHRoZSBzb3VyY2UgY29kZSwgYnVpbGQgc2NyaXB0cywgaW5zdGFsbGF0aW9uIHNjcmlwdHMsIGFuZCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgaW4gYSBmb3JtIHRoYXQgaXMgZWFzeSB0byBnZXQgYW5kIGJlc3QgdG8gbW9kaWZ5OworTGljZW5zaW5nIGl0IHRvIGV2ZXJ5b25lIHVuZGVyIFNpbVBMLCBvciBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdGVybXMgKHN1Y2ggYXMgR1BMIDIuMCksIHdpdGhvdXQgYWRkaW5nIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIHRvIHRoZSByaWdodHMgcHJvdmlkZWQ7CitDb25zcGljdW91c2x5IGFubm91bmNpbmcgdGhhdCBpdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlLgorVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgeW91IG11c3Qgc2hvdWxkZXI6CitZb3UgZ2V0IE5PIFdBUlJBTlRJRVMuIE5vbmUgb2YgYW55IGtpbmQ7CitJZiB0aGUgc29mdHdhcmUgZGFtYWdlcyB5b3UgaW4gYW55IHdheSwgeW91IG1heSBvbmx5IHJlY292ZXIgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGFtb3VudCB5b3UgcGFpZCBmb3IgaXQgKHRoYXQgaXMgemVybyBpZiB5b3UgZGlkIG5vdCBwYXkgYW55dGhpbmcpLiBZb3UgbWF5IG5vdCByZWNvdmVyIGFueSBvdGhlciBkYW1hZ2VzLCBpbmNsdWRpbmcgdGhvc2UgY2FsbGVkICJjb25zZXF1ZW50aWFsIGRhbWFnZXMuIiAoVGhlIHN0YXRlIG9yIGNvdW50cnkgd2hlcmUgeW91IGxpdmUgbWF5IG5vdCBhbGxvdyB5b3UgdG8gbGltaXQgeW91ciBsaWFiaWxpdHkgaW4gdGhpcyB3YXksIHNvIHRoaXMgbWF5IG5vdCBhcHBseSB0byB5b3UpOworVGhlIFNpbVBMIGNvbnRpbnVlcyBwZXJwZXR1YWxseSwgZXhjZXB0IHRoYXQgeW91ciBsaWNlbnNlIHJpZ2h0cyBlbmQgYXV0b21hdGljYWxseSBpZjoKK1lvdSBkbyBub3QgYWJpZGUgYnkgdGhlICJnaXZlIGJhY2sgdG8gdGhlIGNvbW11bml0eSIgdGVybXMgKHlvdXIgbGljZW5zZWVzIGdldCB0byBrZWVwIHRoZWlyIHJpZ2h0cyBpZiB0aGV5IGFiaWRlKTsKK0FueW9uZSBwcmV2ZW50cyB5b3UgZnJvbSBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2ltUEwuCitMaWNlbnNlIGZvciB0aGUgTGljZW5zZQorWW91IG1heSBkbyBhbnl0aGluZyB0aGF0IHlvdSB3YW50IHdpdGggdGhlIFNpbVBMIHRleHQ7IGl0YHMgYSBsaWNlbnNlIGZvcm0gdG8gdXNlIGluIGFueSB3YXkgdGhhdCB5b3UgZmluZCBoZWxwZnVsLiAgVG8gYXZvaWQgY29uZnVzaW9uLCBob3dldmVyLCBpZiB5b3UgY2hhbmdlIHRoZSB0ZXJtcyBpbiBhbnkgd2F5IHRoZW4geW91IG1heSBub3QgY2FsbCB5b3VyIGxpY2Vuc2UgdGhlIFNpbXBsZSBQdWJsaWMgTGljZW5zZSBvciB0aGUgU2ltUEwgKGJ1dCBmZWVsIGZyZWUgdG8gYWNrbm93bGVkZ2UgdGhhdCB5b3VyIGxpY2Vuc2UgaXMgImJhc2VkIG9uIHRoZSBTaW1wbGUgUHVibGljIExpY2Vuc2UiKS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2xlZXB5Y2F0IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2xlZXB5Y2F0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTlkODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQKQEAgLTAsMCArMSw5MCBAQAorCitUaGUgU2xlZXB5Y2F0IExpY2Vuc2UKK0NvcHlyaWdodCAoYykgMTk5MC0xOTk5CitTbGVlcHljYXQgU29mdHdhcmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbgoraG93IHRvIG9idGFpbiBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhlIERCIHNvZnR3YXJlIGFuZCBhbnkKK2FjY29tcGFueWluZyBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIERCIHNvZnR3YXJlLiBUaGUgc291cmNlIGNvZGUKK211c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubworbW9yZSB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiBwbHVzIGEgbm9taW5hbCBmZWUsIGFuZCBtdXN0IGJlCitmcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgY29uZGl0aW9ucy4gRm9yIGFuCitleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsCittb2R1bGVzIGl0IGNvbnRhaW5zLiBJdCBkb2VzIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGZvciBtb2R1bGVzIG9yCitmaWxlcyB0aGF0IHR5cGljYWxseSBhY2NvbXBhbnkgdGhlIG1ham9yIGNvbXBvbmVudHMgb2YgdGhlIG9wZXJhdGluZworc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgU0xFRVBZQ0FUIFNPRlRXQVJFIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitOT04tSU5GUklOR0VNRU5ULCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgU0xFRVBZQ0FUIFNPRlRXQVJFCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0LCAxOTk1CitUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK21heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQord2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJU2BgIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NgorVGhlIFByZXNpZGVudCBhbmQgRmVsbG93cyBvZiBIYXJ2YXJkIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSEFSVkFSRCBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTYGAgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSEFSVkFSRCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiYjRlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEKQEAgLTAsMCArMSw0MzEgQEAKKworU1VHQVJDUk0gUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAxLjEuMworCitUaGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAoIlNQTCIpIGNvbnNpc3RzIG9mIHRoZSBNb3ppbGxhCitQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgbW9kaWZpZWQgdG8gYmUgc3BlY2lmaWMgdG8gU3VnYXJDUk0sIHdpdGggdGhlCitBZGRpdGlvbmFsIFRlcm1zIGluIEV4aGliaXQgQi4gVGhlIG9yaWdpbmFsIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIGNhbiBiZQorZm91bmQgYXQ6IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbAorCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gJydDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUKK2NyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gJydDb250cmlidXRvciBWZXJzaW9uJycgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvcgorTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK3BhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gJydDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcKK3BvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gJydFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQKK2luIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gJydFeGVjdXRhYmxlJycgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gJydJbml0aWFsIERldmVsb3BlcicnIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gJydMYXJnZXIgV29yaycnIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMKK3RoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICcnTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOC4xLiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KK2V4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkKK2FjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAnJ01vZGlmaWNhdGlvbnMnJyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuCitDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzCitNb2RpZmljYXRpb25zLgorMS4xMC4gJydPcmlnaW5hbCBDb2RlJycgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcworZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZAord2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkCitDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZAorYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuICcnU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nCittb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQKK2luc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdAorZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUKK0NvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLAorcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseQorYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UnJyAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZQorb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwKK2VudGl0aWVzLCAiWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IKK2lzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24KK29yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikKK293bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yCitiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykKK0xpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwKK0NvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZQorZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yCitjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbAorQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IKK2RldmljZXMuCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCitMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yCitwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcworQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGgKK2l0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLAorb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUKK2J5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvcgorcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZQorZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IKK2FueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgc2VwYXJhdGUKK2Zyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkKK21vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IKK1ZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZQoraW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieQordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZQorQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdQorbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24KK3RoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUKK3JlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50CitvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlCithdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUKK3NhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbgorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZgorbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvcgorYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdAorbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZwordGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZQorQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eQorbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvCitjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQorYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZQorTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlCitvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldwora25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCitDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KK2ltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwKK2ZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpCithYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3MKK29yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlCityaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYKK1lvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvcgordG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4KK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvcgorb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZQorb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0CittYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhCitub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdQoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseQoraW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCitDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwCityaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbQordGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8KK2xpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUKK3JpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uCit1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcword2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90Citnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsCitvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZQorbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5CithZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLgorRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4KK1N1Z2FyQ1JNIEluYy4gKCcnU3VnYXJDUk0nJykgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCitudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VnYXJDUk0uIE5vIG9uZSBvdGhlciB0aGFuIFN1Z2FyQ1JNIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbworaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgJydTdWdhckNSTScnLAorJydTUEwnJyBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdAordG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0CitjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsCitPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YKK3RoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTJycgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsCitGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQKK0NPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZCitPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IKK0NPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CitpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2gKK2FyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucword2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEKK0NvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2gKK2FjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIKK1NlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tCitQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2YKK25vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUKK3JlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCitQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYQorcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4KK3dyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cworZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseQordGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueQorcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlCityZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yCitoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZwordGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkKK3ByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZQordmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yCitzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudAorb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuCit2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwKK3N1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkKK09USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZCitPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwKK0RBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sCitPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwKK0hBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HCitGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0gKK0xJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVAorQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAnJ2NvbW1lcmNpYWwgaXRlbSwnJyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4KKzIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICcnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZScnIGFuZAorJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJycgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OAorQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4KKzIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycworYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlcgoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2gKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKK2VuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucworKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZworaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lCitwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbgordGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZgorQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZworcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQKK3JlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucworQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5CitleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKK3NoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZQorZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uCitvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZAorQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcKK2hlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyJNdWx0aXBsZS1MaWNlbnNlZCIuICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgorWW91ciBjaG9pY2Ugb2YgdGhlIFNQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKzEuMS4zCisoIkxpY2Vuc2UiKTsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tL1NQTAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yCit0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGlzOiBTdWdhckNSTSBPcGVuIFNvdXJjZQorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgU3VnYXJDUk0sIEluYy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgU3VnYXJDUk0gYXJlIENvcHlyaWdodCAoQykgMjAwNCBTdWdhckNSTSwgSW5jLjsKK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZQorbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZQorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBCCisKK0FkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuCisKK0kuIEVmZmVjdC4KK1RoZXNlIGFkZGl0aW9uYWwgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgJm5kYXNoOworQWRkaXRpb25hbCBUZXJtcyBzaGFsbCBhcHBseSB0byB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSUkuIFN1Z2FyQ1JNIGFuZCBsb2dvLgorVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzCisiU3VnYXJDUk0iIGFuZCB0aGUgIlN1Z2FyQ1JNIiBsb2dvcyBldmVuIGlmIHN1Y2ggbWFya3MgYXJlCitpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zLgorCitIb3dldmVyLCBpbiBhZGRpdGlvbiB0byB0aGUgb3RoZXIgbm90aWNlIG9ibGlnYXRpb25zLCBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkCitDb2RlIGluIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGZvcm0gZGlzdHJpYnV0ZWQgbXVzdCwgYXMgYSBmb3JtIG9mCithdHRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBpbmNsdWRlIG9uIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuIChpKQordGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGFuZCAoaWkpIHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZQorc2FtZSBmb3JtIGFzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IFN1Z2FyQ1JNLAorSW5jLiBhdCB0aGUgdGltZSBvZiBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3B5LiBJbiBhZGRpdGlvbiwgdGhlICJQb3dlcmVkCitieSBTdWdhckNSTSIgbG9nbyBtdXN0IGJlIHZpc2libGUgdG8gYWxsIHVzZXJzIGFuZCBiZSBsb2NhdGVkIGF0IHRoZSB2ZXJ5Citib3R0b20gY2VudGVyIG9mIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB0aGUKK2RpbWVuc2lvbnMgb2YgdGhlICJQb3dlcmVkIEJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgYXQgbGVhc3QgMTA2IHgKKzIzIHBpeGVscy4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gaXQgbXVzdAorZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyZm9yZ2Uub3JnLiBJbiBhZGRpdGlvbiwgdGhlIGNvcHlyaWdodAorbm90aWNlIG11c3QgcmVtYWluIHZpc2libGUgdG8gYWxsIHVzZXJzIGF0IGFsbCB0aW1lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB1c2VyCitpbnRlcmZhY2Ugc2NyZWVuLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSBjb3B5cmlnaHQgbm90aWNlLCBpdCBtdXN0IGRpcmVjdCB0aGVtCitiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tCisKKworCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTY4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xLjEuMwpAQCAtMCwwICsxLDE2MCBAQAorCitTVUdBUkNSTSBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDEuMS4zCisKK1RoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uICgiU1BMIikgY29uc2lzdHMgb2YgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIG1vZGlmaWVkIHRvIGJlIHNwZWNpZmljIHRvIFN1Z2FyQ1JNLCB3aXRoIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGluIEV4aGliaXQgQi4gVGhlIG9yaWdpbmFsIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sCisKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEuIGBgQ29udHJpYnV0b3JgYCBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuIGBgQ292ZXJlZCBDb2RlYGAgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiBgYEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbWBgIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXJgYCBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gYGBMaWNlbnNlYGAgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiBgYE1vZGlmaWNhdGlvbnNgYCBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorMS4xMC4gYGBPcmlnaW5hbCBDb2RlYGAgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3VgYCAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sYGAgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLiAKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIAorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIAorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiAKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLiAKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4gCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuIAorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4gCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xLiBOZXcgVmVyc2lvbnMuIAorU3VnYXJDUk0gSW5jLiAoYGBTdWdhckNSTWBgKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIAorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFN1Z2FyQ1JNLiBObyBvbmUgb3RoZXIgdGhhbiBTdWdhckNSTSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBgYFN1Z2FyQ1JNYGAsIGBgU1BMYGAgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVNgYCBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSBgYGNvbW1lcmNpYWwgaXRlbSxgYCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlYGAgYW5kIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLGBgIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzICYjODIyMDtNdWx0aXBsZS1MaWNlbnNlZCYjODIyMTsuICYjODIyMDtNdWx0aXBsZS1MaWNlbnNlZCYjODIyMTsgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoZSBTUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KK1N1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIDEuMS4zIC0gRXhoaWJpdCBBCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLjMKKygiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIAorTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tL1NQTAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IKK3RoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXM6IFN1Z2FyQ1JNIE9wZW4gU291cmNlCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBTdWdhckNSTSwgSW5jLgorUG9ydGlvbnMgY3JlYXRlZCBieSBTdWdhckNSTSBhcmUgQ29weXJpZ2h0IChDKSAyMDA0IFN1Z2FyQ1JNLCBJbmMuOworQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEIKKworQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4KKworSS4gRWZmZWN0LgorVGhlc2UgYWRkaXRpb25hbCB0ZXJtcyBkZXNjcmliZWQgaW4gdGhpcyBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAmIzgyMTE7IEFkZGl0aW9uYWwgVGVybXMgc2hhbGwgYXBwbHkgdG8gdGhlIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0lJLiBTdWdhckNSTSBhbmQgbG9nby4KK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyAiU3VnYXJDUk0iIGFuZCB0aGUgIlN1Z2FyQ1JNIiBsb2dvcyBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMuCisKK0hvd2V2ZXIsIGluIGFkZGl0aW9uIHRvIHRoZSBvdGhlciBub3RpY2Ugb2JsaWdhdGlvbnMsIGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBmb3JtIGRpc3RyaWJ1dGVkIG11c3QsIGFzIGEgZm9ybSBvZiBhdHRyaWJ1dGlvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBpbmNsdWRlIG9uIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuIChpKSB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gYW5kIChpaSkgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlIHNhbWUgZm9ybSBhcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBkaXN0cmlidXRlZCBieSBTdWdhckNSTSwgSW5jLiBhdCB0aGUgdGltZSBvZiBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3B5LiBJbiBhZGRpdGlvbiwgdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgYW5kIGJlIGxvY2F0ZWQgYXQgdGhlIHZlcnkgYm90dG9tIGNlbnRlciBvZiBlYWNoIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdGhlIGRpbWVuc2lvbnMgb2YgdGhlICJQb3dlcmVkIEJ5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgYXQgbGVhc3QgMTA2IHggMjMgcGl4ZWxzLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBpdCBtdXN0IGRpcmVjdCB0aGVtIGJhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmZvcmdlLm9yZy4gSW4gYWRkaXRpb24sIHRoZSBjb3B5cmlnaHQgbm90aWNlIG11c3QgcmVtYWluIHZpc2libGUgdG8gYWxsIHVzZXJzIGF0IGFsbCB0aW1lcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB1c2VyIGludGVyZmFjZSBzY3JlZW4uIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlIGNvcHlyaWdodCBub3RpY2UsIGl0IG11c3QgZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyY3JtLmNvbQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9VQ0IgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9VQ0IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhNzU3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQgpAQCAtMCwwICsxLDI2IEBACisgICBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQKKyAgICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAgIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICAgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICAgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICAgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVlNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJhZTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVlNMLTEuMApAQCAtMCwwICsxLDQ5IEBACisKK1ZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlIHYuIDEuMAorCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgc29mdHdhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSAiVm92aWRhCitPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSIgZXhjZXB0IGZvciB0aG9zZSBwb3J0aW9ucworaW5jb3Jwb3JhdGluZyB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyBiZWluZworbGljZW5zZWQgdW5kZXIgc2VwYXJhdGUgbGljZW5zZS4KKworVGhlIFZvdmlkYSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorQ29weXJpZ2h0IChjKSAyMDAwIFZvdmlkYSBOZXR3b3JrcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgordGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorCiszLiBUaGUgbmFtZXMgIlZPQ0FMIiwgIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSIsCithbmQgIlZvdmlkYSBPcGVuIENvbW11bmljYXRpb24gQXBwbGljYXRpb24gTGlicmFyeSAoVk9DQUwpIiBtdXN0Citub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK3NvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3Qgdm9jYWxAdm92aWRhLm9yZy4KKworNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIlZPQ0FMIiwgbm9yCittYXkgIlZPQ0FMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuCitwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORAorTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVk9WSURBCitORVRXT1JLUywgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMKK0lOIEVYQ0VTUyBPRiAkMSwwMDAsIE5PUiBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XM0MgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XM0MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiOGM0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQwpAQCAtMCwwICsxLDE3IEBACisKK1czQyBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKK1RoaXMgd29yayAoYW5kIGluY2x1ZGVkIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgUkVBRE1Fcywgb3Igb3RoZXIgcmVsYXRlZCBpdGVtcykgaXMgYmVpbmcgcHJvdmlkZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZS4KK0xpY2Vuc2UKK0J5IG9idGFpbmluZywgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLgorUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczoKK1RoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuCitBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIG5vbmUgZXhpc3QsIHRoZSBXM0MgU29mdHdhcmUgU2hvcnQgTm90aWNlIHNob3VsZCBiZSBpbmNsdWRlZCAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHdpdGhpbiB0aGUgYm9keSBvZiBhbnkgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIGNvZGUuCitOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMsIGluY2x1ZGluZyB0aGUgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBjb2RlIGlzIGRlcml2ZWQuKQorRGlzY2xhaW1lcnMKK1RISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLgorQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KK1RoZSBuYW1lIGFuZCB0cmFkZW1hcmtzIG9mIGNvcHlyaWdodCBob2xkZXJzIG1heSBOT1QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KK05vdGVzCitUaGlzIHZlcnNpb246IGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKK1RoaXMgZm9ybXVsYXRpb24gb2YgVzNDYHMgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gRGVjZW1iZXIgMzEgMjAwMi4gVGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIGNvcHlyaWdodCBvd25lcnNoaXAgbm90aWNlIHN1Y2ggdGhhdCB0aGlzIGxpY2Vuc2UgY2FuIGJlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLCByZWZsZWN0cyB0aGF0IEVSQ0lNIGlzIG5vdyBhIGhvc3Qgb2YgdGhlIFczQywgaW5jbHVkZXMgcmVmZXJlbmNlcyB0byB0aGlzIHNwZWNpZmljIGRhdGVkIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgInVzZSIuIE90aGVyd2lzZSwgdGhpcyB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIGFuZCBpcyB3cml0dGVuIHNvIGFzIHRvIHByZXNlcnZlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb25gcyBhc3Nlc3NtZW50IG9mIEdQTCBjb21wYXRpYmlsaXR5IGFuZCBPU0lgcyBjZXJ0aWZpY2F0aW9uIHVuZGVyIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XWHdpbmRvd3MgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XWHdpbmRvd3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlMDk0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cwpAQCAtMCwwICsxLDU1IEBACisKKyAgICAgICAgICAgICAgICB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBWZXJzaW9uIDMuMQorICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgSnVsaWFuIFNtYXJ0LCBSb2JlcnQgUm9lYmxpbmcgZXQgYWwKKworICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgb2YgdGhpcyBsaWNlbmNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV1hXSU5ET1dTIExJQlJBUlkgTElDRU5DRQorICAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0CisgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMaWJyYXJ5CisgIEdlbmVyYWwgUHVibGljIExpY2VuY2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZSwgdXN1YWxseSBpbiBhIGZpbGUgbmFtZWQgQ09QWUlORy5MSUIuICBJZiBub3QsCisgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorCisgIEVYQ0VQVElPTiBOT1RJQ0UKKworICAxLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUKKyAgcGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCB1c2VzIG9mIHRoZSB0ZXh0IGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2Ugb2YKKyAgdGhlIGxpYnJhcnkgYXMgbGljZW5jZWQgdW5kZXIgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIGFwcGx5aW5nCisgIGVpdGhlciB2ZXJzaW9uIDMuMSBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiBvZgorICB0aGUgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHZlcnNpb24KKyAgMy4xIG9mIHRoZSBMaWNlbmNlIGRvY3VtZW50LgorCisgIDIuIFRoZSBleGNlcHRpb24gaXMgdGhhdCB5b3UgbWF5IHVzZSwgY29weSwgbGluaywgbW9kaWZ5IGFuZCBkaXN0cmlidXRlCisgIHVuZGVyIHlvdXIgb3duIHRlcm1zLCBiaW5hcnkgb2JqZWN0IGNvZGUgdmVyc2lvbnMgb2Ygd29ya3MgYmFzZWQKKyAgb24gdGhlIExpYnJhcnkuCisKKyAgMy4gSWYgeW91IGNvcHkgY29kZSBmcm9tIGZpbGVzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgIEdlbmVyYWwgUHVibGljIExpY2VuY2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UgaW50byBhCisgIGNvcHkgb2YgdGhpcyBsaWJyYXJ5LCBhcyB0aGlzIGxpY2VuY2UgcGVybWl0cywgdGhlIGV4Y2VwdGlvbiBkb2VzIG5vdAorICBhcHBseSB0byB0aGUgY29kZSB0aGF0IHlvdSBhZGQgaW4gdGhpcyB3YXkuICBUbyBhdm9pZCBtaXNsZWFkaW5nIGFueW9uZSBhcworICB0byB0aGUgc3RhdHVzIG9mIHN1Y2ggbW9kaWZpZWQgZmlsZXMsIHlvdSBtdXN0IGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbgorICBub3RpY2UgZnJvbSBzdWNoIGNvZGUgYW5kL29yIGFkanVzdCB0aGUgbGljZW5zaW5nIGNvbmRpdGlvbnMgbm90aWNlCisgIGFjY29yZGluZ2x5LgorCisgIDQuIElmIHlvdSB3cml0ZSBtb2RpZmljYXRpb25zIG9mIHlvdXIgb3duIGZvciB0aGlzIGxpYnJhcnksIGl0IGlzIHlvdXIKKyAgY2hvaWNlIHdoZXRoZXIgdG8gcGVybWl0IHRoaXMgZXhjZXB0aW9uIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpY2F0aW9ucy4gCisgIElmIHlvdSBkbyBub3Qgd2lzaCB0aGF0LCB5b3UgbXVzdCBkZWxldGUgdGhlIGV4Y2VwdGlvbiBub3RpY2UgZnJvbSBzdWNoCisgIGNvZGUgYW5kL29yIGFkanVzdCB0aGUgbGljZW5zaW5nIGNvbmRpdGlvbnMgbm90aWNlIGFjY29yZGluZ2x5LgorCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dhdGNvbS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNjE5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dhdGNvbS0xLjAKQEAgLTAsMCArMSwxNDAgQEAKKworU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wCisKK1VTRSBPRiBUSEUgU1lCQVNFIE9QRU4gV0FUQ09NIFNPRlRXQVJFIERFU0NSSUJFRCBCRUxPVyAoIlNPRlRXQVJFIikgSVMgU1VCSkVDVCBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgU0VUIEZPUlRIIElOIFRIRSBTWUJBU0UgT1BFTiBXQVRDT00gUFVCTElDIExJQ0VOU0UgU0VUIEZPUlRIIEJFTE9XICgiTElDRU5TRSIpLiBZT1UgTUFZIE5PVCBVU0UgVEhFIFNPRlRXQVJFIElOIEFOWSBNQU5ORVIgVU5MRVNTIFlPVSBBQ0NFUFQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBZT1UgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIEJZIElOIEFOWSBNQU5ORVIgVVNJTkcgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQlkgUkVQUk9EVUNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcpIFRIRSBTT0ZUV0FSRS4gSUYgWU9VIERPIE5PVCBBQ0NFUFQgQUxMIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgTElDRU5TRSwgRE8gTk9UIFVTRSBUSEUgU09GVFdBUkUgSU4gQU5ZIE1BTk5FUi4KKworU3liYXNlIE9wZW4gV2F0Y29tIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMS4wCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aGUgZm9sbG93aW5nIHNvZnR3YXJlIHByb2dyYW1zOiB0aGUgb3BlbiBzb3VyY2UgdmVyc2lvbnMgb2YgU3liYXNlYHMgV2F0Y29tIEMvQysrIGFuZCBGb3J0cmFuIGNvbXBpbGVyIHByb2R1Y3RzICgiU29mdHdhcmUiKSwgd2hpY2ggYXJlIG1vZGlmaWVkIHZlcnNpb25zIG9mLCB3aXRoIHNpZ25pZmljYW50IGNoYW5nZXMgZnJvbSwgdGhlIGxhc3QgdmVyc2lvbnMgbWFkZSBjb21tZXJjaWFsbHkgYXZhaWxhYmxlIGJ5IFN5YmFzZS4gQXMgdXNlZCBpbiB0aGlzIExpY2Vuc2U6CisKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBTeWJhc2UgaXMgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gU3liYXNlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisKKzEuMiAiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKworMS41ICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlIHRvLCB0aGUgc3Vic3RhbmNlIGFuZC9vciBzdHJ1Y3R1cmUgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLiBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsgYW5kL29yIChiKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbSBzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgdGhhdCBoYXMgYmVlbiBleHByZXNzbHkgaWRlbnRpZmllZCBieSBTeWJhc2UgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworCisxLjggIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisKKzEuOSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisKKzEuMTAgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLlN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgU3liYXNlIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIFN5YmFzZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworCisyLjEgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGFuZC9vciBQZXJzb25hbCBVc2UsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBTeWJhc2UgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kIAorCisoYikgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgU291cmNlIENvZGUgb2YgQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLCBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNi4KKworKGMpIFdoZW5ldmVyIHJlYXNvbmFibHkgZmVhc2libGUgeW91IHNob3VsZCBpbmNsdWRlIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZSBpbiBhIGNsaWNrLXdyYXAgZm9ybWF0LCB3aGljaCByZXF1aXJlcyBhZmZpcm1hdGl2ZSBhY2NlcHRhbmNlIGJ5IGNsaWNraW5nIG9uIGFuICJJIGFjY2VwdCIgYnV0dG9uIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBJZiBhIGNsaWNrLXdyYXAgZm9ybWF0IGlzIG5vdCBpbmNsdWRlZCwgeW91IG11c3QgaW5jbHVkZSBhIHN0YXRlbWVudCB0aGF0IGFueSB1c2UgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24gb3IgZGlzdHJpYnV0aW9uKSBvZiB0aGUgU29mdHdhcmUsIGFuZCBhbnkgb3RoZXIgYWZmaXJtYXRpdmUgYWN0IHRoYXQgeW91IGRlZmluZSwgY29uc3RpdHV0ZXMgYWNjZXB0YW5jZSBvZiB0aGUgTGljZW5zZSwgYW5kIGluc3RydWN0aW5nIHRoZSB1c2VyIG5vdCB0byB1c2UgdGhlIENvdmVyZWQgQ29kZSBpbiBhbnkgbWFubmVyIGlmIHRoZSB1c2VyIGRvZXMgbm90IGFjY2VwdCBhbGwgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLgorCisKKzIuMiBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIERlcGxveSBDb3ZlcmVkIENvZGUsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIFlvdSBtdXN0IHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsgCisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IAorCisoYykgWW91IG11c3QgbWFrZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsIERlcGxveW1lbnQsIHdoaWNoZXZlciBpcyBsb25nZXIuIFlvdSBzaG91bGQgcHJlZmVyYWJseSBkaXN0cmlidXRlIHRoZSBTb3VyY2UgQ29kZSBvZiBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKTsgCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24sIHN0YXRpbmcgdGhhdCBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZTsgYW5kIAorCisoZSkgdGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgWW91ciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQgc3VjaCBsaWNlbnNlIGFncmVlbWVudCBjb250YWlucyB0ZXJtcyBubyBsZXNzIHByb3RlY3RpdmUgb2YgU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIHRoYW4gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHN0YXRpbmcgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LgorCisKKzIuMyBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIFN5YmFzZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLgorCisKKzMuIFlvdXIgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYSBjb25kaXRpb24gdG8sIHRoZSBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBoZXJlYnkgZ3JhbnQgdG8gU3liYXNlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgU3liYXNlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIuCisKKworNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuCisKKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBieSBTeWJhc2UgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBTeWJhc2Ugd2hpY2ggU3liYXNlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIFN5YmFzZSBhbmQgZXZlcnkgQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgU3liYXNlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFN5YmFzZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3liYXNlLiBObyBvbmUgb3RoZXIgdGhhbiBTeWJhc2UgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgU1lCQVNFIEFORCBTWUJBU0VgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJTWUJBU0UiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gU1lCQVNFIEFORCBFQUNIIENPTlRSSUJVVE9SIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgQ09WRVJFRCBDT0RFLCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBDT1JSRUNURUQuIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgU1lCQVNFLCBBIFNZQkFTRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIFNZQkFTRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBLSU5EIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgU1lCQVNFIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBSRU1FRFkuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgTElBQklMSVRZIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBLSU5ELCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIEluIG5vIGV2ZW50IHNoYWxsIFN5YmFzZWBzIG9yIGFueSBDb250cmlidXRvcmBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpdmUgaHVuZHJlZCBkb2xsYXJzICgkNTAwLjAwKS4KKworCisxMC4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJTeWJhc2UiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBTeWJhc2UgKGNvbGxlY3RpdmVseSAiU3liYXNlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyayBvciB0cmFkZSBuYW1lIGJlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IoIkNvbnRyaWJ1dG9yIE1hcmtzIikuIE5vIFN5YmFzZSBNYXJrcyBvciBDb250cmlidXRvciBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIHdpdGggdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBTeWJhc2Ugb3IgdGhlIENvbnRyaWJ1dG9yLCBhcyBhcHBsaWNhYmxlLgorCisKKzExLiBPd25lcnNoaXAuIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIFN5YmFzZSByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgb3Igb24gYmVoYWxmIG9mIFN5YmFzZSAoIlN5YmFzZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIFN5YmFzZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIFN5YmFzZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggU3liYXNlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworCisxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOworCisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisKKyhjKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpbmNsdWRpbmcgYXMgYSBjcm9zcyBjbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgU3liYXNlIG9yIGFueSBDb250cmlidXRvci4KKworCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKworMTMuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgeW91LCBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSBvciBvdGhlcndpc2UuCisKKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgU3liYXNlYHMgb3IgYW55IENvbnRyaWJ1dG9yYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbiBiZXR3ZWVuIFlvdSBhbmQgU3liYXNlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBTeWJhc2UgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBvbnQgZXhpZyYjMjMyOyBxdWUgbGUgcHImIzIzMjtzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByJiMyMzI7ZGkmIzIzMjtzIGVuIGFuZ2xhaXMuCisKKworRVhISUJJVCBBLiAKKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk4My0yMDAyIFN5YmFzZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVGhpcyBmaWxlIGNvbnRhaW5zIE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMgb2YgT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAgKHRoZSBgTGljZW5zZWApLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIEJZIFVTSU5HIFRISVMgRklMRSBZT1UgQUdSRUUgVE8gQUxMIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgcHJvdmlkZWQgd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IHd3dy5zeWJhc2UuY29tL2RldmVsb3Blci9vcGVuc291cmNlLiAKKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIFNZQkFTRSBBTkQgQUxMIENPTlRSSUJVVE9SUyBIRVJFQlkgRElTQ0xBSU0gQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmM2JmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4wCkBAIC0wLDAgKzEsMjIgQEAKK0NvcHlyaWdodCAoQykgMTk5NC0yMDAzIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK1hGUkVFODYgUFJPSkVDVCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0FOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWEZyZWU4NiBQcm9qZWN0IHNoYWxsIG5vdAorYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFhGcmVlODYgUHJvamVjdC4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhNWNiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hGcmVlODYtMS4xCkBAIC0wLDAgKzEsMTggQEAKKworWEZyZWU4NiBMaWNlbnNlICh2ZXJzaW9uIDEuMSkKKworQ29weXJpZ2h0IChDKSAxOTk0LTIwMDYgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIGluIHRoZSBzYW1lIHBsYWNlIGFuZCBmb3JtIGFzIG90aGVyIGNvcHlyaWdodCwgbGljZW5zZSBhbmQgZGlzY2xhaW1lciBpbmZvcm1hdGlvbi4KKworMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYyAoaHR0cDovL3d3dy54ZnJlZTg2Lm9yZy8pIGFuZCBpdHMgY29udHJpYnV0b3JzIiwgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLiBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGluIHRoZSBzYW1lIGZvcm0gYW5kIGxvY2F0aW9uIGFzIG90aGVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzLgorCis0LiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBYRlJFRTg2IFBST0pFQ1QsIElOQyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YU0wgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4MmQ2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTApAQCAtMCwwICsxLDQ4IEBACitDb3B5cmlnaHQKKy0tLS0tLS0tLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMDcgTm9ybWFuIFdhbHNoCitDb3B5cmlnaHQgKEMpIDIwMDMgSmnFmcOtIEtvc2VrCitDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBTdGV2ZSBCYWxsCitDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUaGUgRG9jQm9vayBQcm9qZWN0CitDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBPJ1JlaWxseSBNZWRpYQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KK2ZpbGVzICh0aGUgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgaW5kaXZpZHVhbHMKK2NyZWRpdGVkIHdpdGggY29udHJpYnV0aW9uIHRvIHRoaXMgc29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIKK2RlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK2Zyb20gdGhlIGluZGl2aWR1YWxzIGluIHF1ZXN0aW9uLgorCitBbnkgc3R5bGVzaGVldCBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB0aGF0IGlzIHB1YmxpY2FsbHkKK2Rpc3RyaWJ1dGVkIHdpbGwgYmUgaWRlbnRpZmllZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIHRoZQordmVyc2lvbiBzdHJpbmdzIGluIGFueSBkZXJpdmVkIFNvZnR3YXJlIHdpbGwgYmUgY2hhbmdlZCBzbyB0aGF0CitubyBwb3NzaWJpbGl0eSBvZiBjb25mdXNpb24gYmV0d2VlbiB0aGUgZGVyaXZlZCBwYWNrYWdlIGFuZCB0aGlzCitTb2Z0d2FyZSB3aWxsIGV4aXN0LgorCitXYXJyYW50eQorLS0tLS0tLS0KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgTk9STUFOIFdBTFNIIE9SIEFOWSBPVEhFUgorQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCitPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0NvbnRhY3RpbmcgdGhlIEF1dGhvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgRG9jQm9vayBYU0wgc3R5bGVzaGVldHMgYXJlIG1haW50YWluZWQgYnkgTm9ybWFuIFdhbHNoLAorPG5kd0Bud2Fsc2guY29tPiwgYW5kIG1lbWJlcnMgb2YgdGhlIERvY0Jvb2sgUHJvamVjdCwKKzxkb2Nib29rLWRldmVsb3BlcnNAc2YubmV0PgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1huZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0NGVkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1huZXQKQEAgLTAsMCArMSwyNyBAQAorCitUaGUgWC5OZXQsIEluYy4gTGljZW5zZQorVGhpcyBMaWNlbnNlIGhhcyBiZWVuIHZvbHVudGFyaWx5IGRlcHJlY2F0ZWQgYnkgaXRzIGF1dGhvci4KKworQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgWC5OZXQsIEluYy4gTGFmYXlldHRlLCBDYWxpZm9ybmlhLCBVU0EKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKK1RoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGluIGFsbCByZXNwZWN0cyBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YKK0NhbGlmb3JuaWEgYW5kIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9ZUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMTg4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9ZUEwtMS4xCkBAIC0wLDAgKzEsMzAgQEAKKworWWFob28hIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMSAoWVBMKQorVGhpcyBZYWhvbyEgUHVibGljIExpY2Vuc2UgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBZYWhvbyEgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCA3MDEgRmlyc3QgQXZlbnVlLCBTdW5ueXZhbGUsIENhbGlmb3JuaWEgOTQwODkgKCJZYWhvbyEiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKCJTb2Z0d2FyZSIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKCJZb3UiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOgorCitHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZQorMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlhaG9vISBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgIk1vZGlmaWNhdGlvbjsiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgIk1vZGlmaWNhdGlvbi4iCisxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4KKzEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFlhaG9vISB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgWWFob28hIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBZYWhvbyEsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuCisxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFlhaG9vISwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgWWFob28hIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuCisxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS4KK1N1cHBvcnQKK1lhaG9vISBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFlhaG9vISB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuCitJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCiszLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLgorMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS4KKzMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHlgcyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi4KK0Rpc2NsYWltZXIgb2YgV2FycmFudGllcworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFlBSE9PISBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFlBSE9PISBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFlBSE9PISBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBZQUhPTyEgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLgorTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK0lOIE5PIEVWRU5UIFdJTEwgWUFIT08hIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBZQUhPTyEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorVGVybSBhbmQgVGVybWluYXRpb24KKzYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LgorNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgWWFob28hIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuCis2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBZYWhvbyEgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgWWFob28hYHMgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCitNaXNjZWxsYW5lb3VzCitUaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cywgZWl0aGVyIG9yYWwgb3Igd3JpdHRlbiwgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc2FpZCBzdWJqZWN0IG1hdHRlci4gVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBoZXJldW5kZXIgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycywgYW5kIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCBvciB1bmVuZm9yY2VhYmxlIHRvIGFueSBleHRlbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHRoYXQgbW9zdCBjbG9zZWx5IGVmZmVjdHVhdGVzIHRoZSBpbnRlbnQgb2YgdGhpcyBBZ3JlZW1lbnQuIFN1Y2ggaW52YWxpZCB0ZXJtLCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIHdpbGwgYmUgc2V2ZXJlZCBmcm9tIHRoZSByZW1haW5pbmcgdGVybXMsIGNvbmRpdGlvbnMgYW5kIHByb3Zpc2lvbnMsIHdoaWNoIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGludGVycHJldGVkIGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFlhaG9vISBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcyBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBObyByaWdodHMgbWF5IGJlIGFzc2lnbmVkLCBubyBvYmxpZ2F0aW9ucyBtYXkgYmUgZGVsZWdhdGVkLCBhbmQgdGhpcyBBZ3JlZW1lbnQgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCBieSBZb3UsIGluIHdob2xlIG9yIGluIHBhcnQsIHdoZXRoZXIgdm9sdW50YXJ5IG9yIGJ5IG9wZXJhdGlvbiBvZiBsYXcsIGluY2x1ZGluZyBieSB3YXkgb2Ygc2FsZSBvZiBhc3NldHMsIG1lcmdlciBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgWWFob28hLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uIG9yIHRyYW5zZmVyIHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGJlIHZvaWQgYWIgaW5pdGlvLiBBbnkgd2FpdmVyIG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIG9mIGEgcGFydHlgcyByaWdodHMgb3IgcmVtZWRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbiB3cml0aW5nIHRvIGJlIGVmZmVjdGl2ZS4gRmFpbHVyZSwgbmVnbGVjdCBvciBkZWxheSBieSBhIHBhcnR5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgaXRzIHJpZ2h0cyBvciByZW1lZGllcyBhdCBhbnkgdGltZSwgd2lsbCBub3QgYmUgY29uc3RydWVkIG9yIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlciBvZiBzdWNoIHBhcnR5YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHByZWp1ZGljZSBzdWNoIHBhcnR5YHMgcmlnaHQgdG8gdGFrZSBzdWJzZXF1ZW50IGFjdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhYWJlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0xLjEKQEAgLTAsMCArMSwyOCBAQAorCitab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMS4xCisKK0NvcHlyaWdodCAoYykgWm9wZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK0FsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gbWVudGlvbmluZyBmZWF0dXJlcyBkZXJpdmVkIGZyb20gb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgWm9wZSBDb3Jwb3JhdGlvbiBmb3IgdXNlIGluIHRoZSBaIE9iamVjdCBQdWJsaXNoaW5nIEVudmlyb25tZW50IChodHRwOi8vd3d3LnpvcGUuY29tLykuIgorCitJbiB0aGUgZXZlbnQgdGhhdCB0aGUgcHJvZHVjdCBiZWluZyBhZHZlcnRpc2VkIGluY2x1ZGVzIGFuIGludGFjdCBab3BlIGRpc3RyaWJ1dGlvbiAod2l0aCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5jbHVkZWQpIHRoZW4gdGhpcyBjbGF1c2UgaXMgd2FpdmVkLgorCitOYW1lcyBhc3NvY2lhdGVkIHdpdGggWm9wZSBvciBab3BlIENvcnBvcmF0aW9uIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gWm9wZSBDb3Jwb3JhdGlvbi4KK01vZGlmaWVkIHJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBab3BlIENvcnBvcmF0aW9uIGZvciB1c2UgaW4gdGhlIFogT2JqZWN0IFB1Ymxpc2hpbmcgRW52aXJvbm1lbnQgKGh0dHA6Ly93d3cuem9wZS5jb20vKS4iCisKK0ludGFjdCAocmUtKWRpc3RyaWJ1dGlvbnMgb2YgYW55IG9mZmljaWFsIFpvcGUgcmVsZWFzZSBkbyBub3QgcmVxdWlyZSBhbiBleHRlcm5hbCBhY2tub3dsZWRnZW1lbnQuCisKK01vZGlmaWNhdGlvbnMgYXJlIGVuY291cmFnZWQgYnV0IG11c3QgYmUgcGFja2FnZWQgc2VwYXJhdGVseSBhcyBwYXRjaGVzIHRvIG9mZmljaWFsIFpvcGUgcmVsZWFzZXMuIERpc3RyaWJ1dGlvbnMgdGhhdCBkbyBub3QgY2xlYXJseSBzZXBhcmF0ZSB0aGUgcGF0Y2hlcyBmcm9tIHRoZSBvcmlnaW5hbCB3b3JrIG11c3QgYmUgY2xlYXJseSBsYWJlbGVkIGFzIHVub2ZmaWNpYWwgZGlzdHJpYnV0aW9ucy4gTW9kaWZpY2F0aW9ucyB3aGljaCBkbyBub3QgY2FycnkgdGhlIG5hbWUgWm9wZSBtYXkgYmUgcGFja2FnZWQgaW4gYW55IGZvcm0sIGFzIGxvbmcgYXMgdGhleSBjb25mb3JtIHRvIGFsbCBvZiB0aGUgY2xhdXNlcyBhYm92ZS4KK0Rpc2NsYWltZXIKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgWk9QRSBDT1JQT1JBVElPTiBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBaT1BFIENPUlBPUkFUSU9OIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFpvcGUgQ29ycG9yYXRpb24gYW5kIG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIFpvcGUgQ29ycG9yYXRpb24uIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZSBhY2NvbXBhbnlpbmcgY3JlZGl0cyBmaWxlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWUyMDgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMApAQCAtMCwwICsxLDYxIEBACisKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc29mdHdhcmUgaXMgQ29weXJpZ2h0IChjKSBab3BlIENvcnBvcmF0aW9uICh0bSkgYW5kCitDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuIEl0IGhhcyBhbHNvCitiZWVuIGRlc2lnbmF0ZWQgYXMgR1BMIGNvbXBhdGlibGUgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24gKEZTRikuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lIFpvcGUgQ29ycG9yYXRpb24gKHRtKSBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gWm9wZSBDb3Jwb3JhdGlvbi4KKworNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yCisgICBhbnkgcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcworICAgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgWm9wZSBDb3Jwb3JhdGlvbi4gVXNlIG9mIHRoZW0gaXMKKyAgIGNvdmVyZWQgaW4gYSBzZXBhcmF0ZSBhZ3JlZW1lbnQgKHNlZQorICAgaHR0cDovL3d3dy56b3BlLmNvbS9NYXJrcykuCisKKzUuIElmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZAorICAgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkCisgICB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKK0Rpc2NsYWltZXIKKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFpPUEUgQ09SUE9SQVRJT04gYGBBUyBJU2BgCisgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQKKyAgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgIE5PIEVWRU5UIFNIQUxMIFpPUEUgQ09SUE9SQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRQorICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgIERBTUFHRS4KKworCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBab3BlCitDb3Jwb3JhdGlvbiBhbmQgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgWm9wZQorQ29ycG9yYXRpb24uICBTcGVjaWZpYyBhdHRyaWJ1dGlvbnMgYXJlIGxpc3RlZCBpbiB0aGUKK2FjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWQ0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4xCkBAIC0wLDAgKzEsMTggQEAKKworWlBMIDIuMQorWm9wZSBQdWJsaWMgTGljZW5zZSAoWlBMKSBWZXJzaW9uIDIuMQorCitBIGNvcHlyaWdodCBub3RpY2UgYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKK1RoaXMgbGljZW5zZSBoYXMgYmVlbiBjZXJ0aWZpZWQgYXMgb3BlbiBzb3VyY2UuIEl0IGhhcyBhbHNvIGJlZW4gZGVzaWduYXRlZCBhcyBHUEwgY29tcGF0aWJsZSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChGU0YpLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWNjb21wYW55aW5nIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCitUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBTZXJ2aWNlbWFya3MgKHNtKSBvciBUcmFkZW1hcmtzICh0bSkgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLiBVc2Ugb2YgdGhlbSBpcyBjb3ZlcmVkIGJ5IHNlcGFyYXRlIGFncmVlbWVudCB3aXRoIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KK0lmIGFueSBmaWxlcyBhcmUgbW9kaWZpZWQsIHlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorRGlzY2xhaW1lcgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmltYnJhLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI3YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmltYnJhLTEuMwpAQCAtMCwwICsxLDMwIEBACisKK1ppbWJyYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjMgKFpQTCkKK1RoaXMgWmltYnJhIFB1YmxpYyBMaWNlbnNlICh0aGlzICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCB0aGF0IGRlc2NyaWJlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggVk13YXJlLCBJbmMuLCBhIERlbGF3YXJlIGNvcnBvcmF0aW9uIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDM0MDEgSGlsbHZpZXcgQXZlbnVlLCBQYWxvIEFsdG8sIENhbGlmb3JuaWEgOTQzMDQgKCJWTXdhcmUiKSB3aWxsIHByb3ZpZGUgc29mdHdhcmUgdG8geW91IHZpYSBkb3dubG9hZCBvciBvdGhlcndpc2UgKCJTb2Z0d2FyZSIpLiBCeSB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSwgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHkgKCJZb3UiKSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0luIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBhbmQgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCB0aGUgcGFydGllcyBhZ3JlZSBhcyBmb2xsb3dzOgorCisxLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZQorMS4xIC0gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFZNd2FyZSBoZXJlYnkgZ3JhbnRzIHRvIFlvdSwgdW5kZXIgYW55IGFuZCBhbGwgb2YgaXRzIGNvcHlyaWdodCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBhIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGNvcHksIG1vZGlmeSwgY29tcGlsZSwgZXhlY3V0ZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgY2hhbmdlIHRvLCBhZGRpdGlvbiB0bywgb3IgYWJyaWRnZW1lbnQgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgWW91IGlzIGEgIk1vZGlmaWNhdGlvbjsiIGhvd2V2ZXIsIGFueSBmaWxlIFlvdSBhZGQgdG8gdGhlIFNvZnR3YXJlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgaXMgbm90IGEgIk1vZGlmaWNhdGlvbi4iCisxLjIgLSBJZiBZb3UgYXJlIGFuIGluZGl2aWR1YWwgYWN0aW5nIG9uIGJlaGFsZiBvZiBhIGNvcnBvcmF0aW9uIG9yIG90aGVyIGVudGl0eSwgWW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gaXMgc3ViamVjdCB0byBZb3VyIGhhdmluZyB0aGUgYXV0aG9yaXR5IHRvIGJpbmQgc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFByb3ZpZGluZyBjb3BpZXMgdG8gcGVyc29ucyB3aXRoaW4gc3VjaCBjb3Jwb3JhdGlvbiBvciBlbnRpdHkgaXMgbm90IGNvbnNpZGVyZWQgZGlzdHJpYnV0aW9uIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4KKzEuMyAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGRvIHNvIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4gV2l0aCByZXNwZWN0IHRvIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gc291cmNlIGNvZGUgZm9ybWF0LCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBZb3UgaW4gdGhlIHNhbWUgd2F5IHRob3NlIHRlcm1zIGFwcGx5IHRvIFZNd2FyZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLiBJbiBvdGhlciB3b3Jkcywgd2hlbiBZb3UgYXJlIGRpc3RyaWJ1dGluZyBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBZb3UgInN0YW5kIGluIHRoZSBzaG9lcyIgb2YgVk13YXJlIGluIHRlcm1zIG9mIHRoZSByaWdodHMgWW91IGdyYW50IGFuZCBob3cgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGFwcGx5IHRvIFlvdSBhbmQgdGhlIGxpY2Vuc2VlcyBvZiBZb3VyIE1vZGlmaWNhdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aGVuIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBWTXdhcmUsIFlvdSBhcmUgbm90IHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBwcm92aXNpb24gdW5kZXIgU2VjdGlvbiA3LCB3aGljaCByZXF1aXJlcyBhbGwgZGlzcHV0ZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEuCisxLjQgLSBGb3IgdGhlIFNvZnR3YXJlIG9yIGFueSBNb2RpZmljYXRpb24gWW91IGRpc3RyaWJ1dGUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybWF0LCBZb3UgbXVzdCBhbHNvIHByb3ZpZGUgcmVjaXBpZW50cyB3aXRoIGFjY2VzcyB0byB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIGluIHNvdXJjZSBjb2RlIGZvcm1hdCBhbG9uZyB3aXRoIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudC4gVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9ucyBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQgbWF5IGJlIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEluIGFkZGl0aW9uLCBZb3UgbXVzdCBtYWtlIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgbGljZW5zZSB0ZXJtcyBhcHBseWluZyB0byBzdWNoIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbiB0aGF0IGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSBhbmQgbm90IGJ5IFZNd2FyZSwgYW5kIHRoYXQgc3VjaCBsaWNlbnNlIGRvZXMgbm90IHJlc3RyaWN0IHJlY2lwaWVudHMgZnJvbSBleGVyY2lzaW5nIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gdGhlIFNvZnR3YXJlIGdyYW50ZWQgYnkgVk13YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50IG9yIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdG8gYW55IE1vZGlmaWNhdGlvbiBncmFudGVkIGJ5IFlvdSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxLjMuCisxLjUgLSBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgZmlsZXMgdGhhdCBhcmUgZW50aXJlbHkgWW91ciBvd24gd29yayAoaS5lLiwgd2hpY2ggZG8gbm90IGluY29ycG9yYXRlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYXJlIG5vdCBNb2RpZmljYXRpb25zKSB1bmRlciBhbnkgdGVybXMgWW91IGNob29zZS4KKzIuIFN1cHBvcnQKK1ZNd2FyZSBoYXMgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIHRlY2huaWNhbCBzdXBwb3J0IG9yIHVwZGF0ZXMgdG8gWW91LiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHJlcXVpcmVzIFZNd2FyZSB0byBlbnRlciBpbnRvIGFueSBsaWNlbnNlIHdpdGggWW91IGZvciBhbnkgb3RoZXIgZWRpdGlvbiBvZiB0aGUgU29mdHdhcmUuCiszLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCiszLjEgLSBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIGNvcHlyaWdodCBpbiBTZWN0aW9uIDEuMSwgbm8gcmlnaHRzLCBsaWNlbnNlcyBvciBmb3JiZWFyYW5jZXMgYXJlIGdyYW50ZWQgb3IgbWF5IGFyaXNlIGluIHJlbGF0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXhoYXVzdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzLCBpbmNsdWRpbmcgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMsIHRoYXQgYXJlIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgaGVyZWJ5IHJlc2VydmVkLgorMy4yIC0gSW4gYW55IGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9yIGluIGFueSBNb2RpZmljYXRpb24geW91IGNyZWF0ZSwgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UsIGFueSBhbmQgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBTb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyB0aGUgcHJlc2VydmF0aW9uIG9mIGF0dHJpYnV0aW9uIG5vdGljZXMgaW4gdGhlIGZvcm0gb2YgdHJhZGVtYXJrcyBvciBsb2dvcyB0aGF0IGV4aXN0IHdpdGhpbiBhIHVzZXIgaW50ZXJmYWNlIG9mIHRoZSBTb2Z0d2FyZS4KKzMuMyAtIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgcmlnaHRzIHRvIHVzZSBhbnkgcGFydHlgcyBuYW1lLCBsb2dvLCBvciB0cmFkZW1hcmtzLCBleGNlcHQgc29sZWx5IGFzIG5lY2Vzc2FyeSB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuMi4KKzQuIERpc2NsYWltZXIgb2YgV2FycmFudGllcworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFZNV0FSRSBNQUtFUyBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSBSRUdBUkRJTkcgT1IgUkVMQVRJTkcgVE8gVEhFIFNPRlRXQVJFLiBTUEVDSUZJQ0FMTFksIFZNV0FSRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgQkUgRVJST1IgRlJFRSBPUiBXSUxMIFBFUkZPUk0gSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIFRPIFRIRSBHUkVBVEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIFZNV0FSRSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSAoRVZFTiBJRiBWTVdBUkUgSEFEIEJFRU4gSU5GT1JNRUQgT0YgU1VDSCBQVVJQT1NFKSwgQU5EIE5PTklORlJJTkdFTUVOVCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFORCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFVTRSBPRiBUSEUgRk9SRUdPSU5HLgorNS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK0lOIE5PIEVWRU5UIFdJTEwgVk1XQVJFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgUFJPRklUUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBDT1NUIE9GIENPVkVSKSBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFIEZVUk5JU0hJTkcsIFBFUkZPUk1BTkNFIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIE9USEVSIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgV0hFVEhFUiBBTExFR0VEIEFTIEEgQlJFQUNIIE9GIENPTlRSQUNUIE9SIFRPUlRJT1VTIENPTkRVQ1QsIElOQ0xVRElORyBORUdMSUdFTkNFLCBBTkQgRVZFTiBJRiBWTVdBUkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorNi4gVGVybSBhbmQgVGVybWluYXRpb24KKzYuMSAtIFRoaXMgQWdyZWVtZW50IHdpbGwgY29udGludWUgaW4gZWZmZWN0IHVubGVzcyBhbmQgdW50aWwgdGVybWluYXRlZCBlYXJsaWVyIHB1cnN1YW50IHRvIHRoaXMgU2VjdGlvbiA2LgorNi4yIC0gSW4gdGhlIGV2ZW50IFlvdSB2aW9sYXRlIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgVk13YXJlIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQuCis2LjMgLSBBbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlIHVwb24gdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBUZXJtaW5hdGlvbiB3aWxsIGJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgYW5kIHJlbWVkaWVzIGF2YWlsYWJsZSB0byBWTXdhcmUgYXQgbGF3IG9yIGVxdWl0eSBvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzYuNCAtIFRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB0aGUgcHJvdmlzaW9ucyByZWdhcmRpbmcgcmVzZXJ2YXRpb24gb2YgcmlnaHRzIChTZWN0aW9uIDMuMSksIHByb3Zpc2lvbnMgZGlzY2xhaW1pbmcgb3IgbGltaXRpbmcgVk13YXJlYHMgbGlhYmlsaXR5IChTZWN0aW9ucyA0IGFuZCA1KSwgVGVybWluYXRpb24gKFNlY3Rpb24gNikgb3IgTWlzY2VsbGFuZW91cyAoU2VjdGlvbiA3KSwgd2hpY2ggcHJvdmlzaW9ucyB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCis3LiBNaXNjZWxsYW5lb3VzCitUaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cywgZWl0aGVyIG9yYWwgb3Igd3JpdHRlbiwgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc2FpZCBzdWJqZWN0IG1hdHRlci4gVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBoZXJldW5kZXIgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycywgYW5kIHRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMuIElmIGFueSB0ZXJtLCBjb25kaXRpb24sIG9yIHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkLCB1bmxhd2Z1bCBvciB1bmVuZm9yY2VhYmxlIHRvIGFueSBleHRlbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHRoYXQgbW9zdCBjbG9zZWx5IGVmZmVjdHVhdGVzIHRoZSBpbnRlbnQgb2YgdGhpcyBBZ3JlZW1lbnQuIFN1Y2ggaW52YWxpZCB0ZXJtLCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIHdpbGwgYmUgc2V2ZXJlZCBmcm9tIHRoZSByZW1haW5pbmcgdGVybXMsIGNvbmRpdGlvbnMgYW5kIHByb3Zpc2lvbnMsIHdoaWNoIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGludGVycHJldGVkIGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIGFuZCB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gVGhlIFUuTi4gQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgaW52b2x2aW5nIFZNd2FyZSBvciBhbnkgb2YgaXRzIHN1YnNpZGlhcmllcyBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgb3Igc3RhdGUgY291cnRzIG9mIG5vcnRoZXJuIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLiBObyByaWdodHMgbWF5IGJlIGFzc2lnbmVkLCBubyBvYmxpZ2F0aW9ucyBtYXkgYmUgZGVsZWdhdGVkLCBhbmQgdGhpcyBBZ3JlZW1lbnQgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCBieSBZb3UsIGluIHdob2xlIG9yIGluIHBhcnQsIHdoZXRoZXIgdm9sdW50YXJ5IG9yIGJ5IG9wZXJhdGlvbiBvZiBsYXcsIGluY2x1ZGluZyBieSB3YXkgb2Ygc2FsZSBvZiBhc3NldHMsIG1lcmdlciBvciBjb25zb2xpZGF0aW9uLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgVk13YXJlLCBhbmQgYW55IHB1cnBvcnRlZCBhc3NpZ25tZW50LCBkZWxlZ2F0aW9uIG9yIHRyYW5zZmVyIHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGJlIHZvaWQgYWIgaW5pdGlvLiBBbnkgd2FpdmVyIG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IG9yIG9mIGEgcGFydHlgcyByaWdodHMgb3IgcmVtZWRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbiB3cml0aW5nIHRvIGJlIGVmZmVjdGl2ZS4gRmFpbHVyZSwgbmVnbGVjdCBvciBkZWxheSBieSBhIHBhcnR5IHRvIGVuZm9yY2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgaXRzIHJpZ2h0cyBvciByZW1lZGllcyBhdCBhbnkgdGltZSwgd2lsbCBub3QgYmUgY29uc3RydWVkIG9yIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlciBvZiBzdWNoIHBhcnR5YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHByZWp1ZGljZSBzdWNoIHBhcnR5YHMgcmlnaHQgdG8gdGFrZSBzdWJzZXF1ZW50IGFjdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1psaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhiMzg4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1psaWIKQEAgLTAsMCArMSwyMSBAQAorCit6bGliIExpY2Vuc2UKKworCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGFzLWlzYCwgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisgIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9iemlwMgpAQCAtMCwwICsxLDQxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHByb2dyYW0sICJiemlwMiIsIHRoZSBhc3NvY2lhdGVkIGxpYnJhcnkgImxpYmJ6aXAyIiwgYW5kIGFsbAorZG9jdW1lbnRhdGlvbiwgYXJlIGNvcHlyaWdodCAoQykgMTk5Ni0yMDEwIEp1bGlhbiBSIFNld2FyZC4gIEFsbAorcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdAorICAgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcworICAgc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdAorICAgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorCiszLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0CisgICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCis0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0p1bGlhbiBTZXdhcmQsIGpzZXdhcmRAYnppcC5vcmcKK2J6aXAyL2xpYmJ6aXAyIHZlcnNpb24gMS4wLjYgb2YgNiBTZXB0ZW1iZXIgMjAxMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI1ZDYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZUNvcy0yLjAKQEAgLTAsMCArMSwxOCBAQAorCitUaGUgZUNvcyBsaWNlbnNlIHZlcnNpb24gMi4wCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGVDb3MsIHRoZSBFbWJlZGRlZCBDb25maWd1cmFibGUgT3BlcmF0aW5nIFN5c3RlbS4gQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KK2VDb3MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK2VDb3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggZUNvczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoaXMgZmlsZSwgdGhpcyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitBbHRlcm5hdGl2ZSBsaWNlbnNlcyBmb3IgZUNvcyBtYXkgYmUgYXJyYW5nZWQgYnkgY29udGFjdGluZyBSZWQgSGF0LCBJbmMuIGF0IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9lY29zLWxpY2Vuc2UvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMjI0VDT1NHUExDT1BZUklHSFRFTkQjIyMjCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODYzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xCkBAIC0wLDAgKzEsMzgwIEBACisKK2dTT0FQIFB1YmxpYyBMaWNlbnNlCisKK1ZlcnNpb24gMS4zYgorCitUaGUgZ1NPQVAgcHVibGljIGxpY2Vuc2UgaXMgZGVyaXZlZCBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIChNUEwxLjEpLgorVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBkZWxldGVkIGZyb20gdGhlIG9yaWdpbmFsIE1QTDEuMSB0ZXh0IGFyZSAxLjAuMSwgMi4xLgorKGMpLChkKSwgMi4yLihjKSwoZCksIDguMi4oYiksIDEwLCBhbmQgMTEuIFNlY3Rpb24gMy44IHdhcyBhZGRlZC4gVGhlIG1vZGlmaWVkCitzZWN0aW9ucyBhcmUgMi4xLihiKSwgMi4yLihiKSwgMy4yIChzaW1wbGlmaWVkKSwgMy41IChkZWxldGVkIHRoZSBsYXN0CitzZW50ZW5jZSksIGFuZCAzLjYgKHNpbXBsaWZpZWQpLgorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKK3NvYXBjcHAyIGFuZCB3c2RsMmggc291cmNlIGNvZGUgbG9jYXRlZCBpbiBnc29hcC9zcmMgYW5kIGdzb2FwL3dzZGwsIGFsbCBjb2RlCitnZW5lcmF0ZWQgYnkgc29hcGNwcDIgYW5kIHdzZGwyaCwgdGhlIFVEREkgc291cmNlIGNvZGUgZ3NvYXAvdWRkaTIsIGFuZCB0aGUgV2ViCitzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzCithbmQgY29tcG9uZW50cyBjb21tZXJjaWFsbHksIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIHJlcXVpcmVkIGFuZCBjYW4gYmUKK29idGFpbmVkIGZyb20gd3d3Lmdlbml2aWEuY29tLgorMSBERUZJTklUSU9OUy4KKworMS4wLjEuCisxLjEuICJDb250cmlidXRvciIKK21lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCittZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhCitDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zLiAiQ292ZXJlZCBDb2RlIgorbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvcgordGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNS4gIkV4ZWN1dGFibGUiCittZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZQorU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUKK3RpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzCitjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZQorT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYQorc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0EuCitBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKK0NvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UKK0NvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mCitpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQKK2xpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieQorZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwKK2luY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbgorZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwKK29yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlCitTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZQorZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcKK3dpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlCitpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55CitlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LgorRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsCitkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50CisoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMiBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUKK2J5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UKK2FuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQKK01vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8KK21ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlCitPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQKK3RoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IKK2luIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBhbnkKK2NvbWJpbmF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YuCisoYykKKyhkKQorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlCitieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKQorZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vcgorYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsCitoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBDb250cmlidXRvcgorVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcworcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoCitvdGhlciBzb2Z0d2FyZSwgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpCisoZCkKKzMgRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIGNyZWF0ZWQgYnkgWW91IHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluCitTb3VyY2UgQ29kZSBmb3JtIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZQorQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24KK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlCitDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUKK3BhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0bworY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUKK0xFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZQorb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcKK2tub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCitpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMCitmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKQorYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzCitvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZQorcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYKK2l0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYKK1lvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvcgordG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4KK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvcgorb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KK2NoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZQorb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZgorU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdQorYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4KK3RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UKK2Rpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQKK2Fic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBJZiB5b3UgZGlzdHJpYnV0ZQorZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSBhcyBwYXJ0IG9mIGEgcHJvZHVjdCwgeW91IG11c3QKK3JlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCitwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LgorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjguIFJlc3RyaWN0aW9ucy4KKworWW91IG1heSBub3QgcmVtb3ZlIGFueSBwcm9kdWN0IGlkZW50aWZpY2F0aW9uLCBjb3B5cmlnaHQsIHByb3ByaWV0YXJ5IG5vdGljZXMKK29yIGxhYmVscyBmcm9tIGdTT0FQLgorNCBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQord2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLAorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUKK21heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleQorYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4KK0V4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QKK2JlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKzUgQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitHcmFudG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8KK3RpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLAorWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZgordGhlIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKworSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlICJnU09BUCIKK29yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUKK3RoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIKK3RoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBnU09BUAorUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvcgorQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlCitkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkKK1JJR0hUUywgQU5EIEFOWSBXQVJSQU5UWSBUSEFUIE1BWSBBUklTRSBCWSBSRUFTT04gT0YgVFJBREUgVVNBR0UsIENVU1RPTSwgT1IKK0NPVVJTRSBPRiBERUFMSU5HLiBXSVRIT1VUIExJTUlUSU5HIFRIRSBGT1JFR09JTkcsIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFRIRQorU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhBVCBUSEUgQVVUSE9SUyBETyBOT1QgV0FSUkFOVCBUSEUKK1NPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRQorUklTSyBBUyBUTyBSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQVNTVU1FRCBCWSBZT1UuIFVOREVSIE5PCitDSVJDVU1TVEFOQ0VTIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitFWEVNUExBUlkgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIE9SIE5BVFVSRSBXSEFUU09FVkVSLCBXSEVUSEVSCitCQVNFRCBPTiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUgorT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBFVkVOIElGIFRIRQorQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPTiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UgT1IgSUYgU1VDSCBEQU1BR0UKK0NPVUxEIEhBVkUgQkVFTiBSRUFTT05BQkxZIEZPUkVTRUVOLCBBTkQgTk9UV0lUSFNUQU5ESU5HIEFOWSBGQUlMVVJFIE9GCitFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgRVhDTFVTSVZFIFJFTUVEWSBQUk9WSURFRC4gU1VDSCBMSU1JVEFUSU9OIE9OIERBTUFHRVMKK0lOQ0xVREVTLCBCVVQgSVMgTk9UIExJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIExPU1QgUFJPRklUUywKK0xPU1MgT0YgREFUQSBPUiBTT0ZUV0FSRSwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiBPUgorSU1QQUlSTUVOVCBPRiBPVEhFUiBHT09EUy4gSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIFRIRSBDT1NUUworT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gWU9VIEFDS05PV0xFREdFIFRIQVQgVEhJUworU09GVFdBUkUgSVMgTk9UIERFU0lHTkVEIEZPUiBVU0UgSU4gT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTIEVOVklST05NRU5UUworU1VDSCBBUyBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTlRST0wsIE9SCitMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OUy4gVEhFIEFVVEhPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkKK1JFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gQU5ZIFNVQ0ggT04tTElORSBFUVVJUE1FTlQgSU4gSEFaQVJET1VTCitFTlZJUk9OTUVOVFMgQU5EIEFDQ0VQVFMgTk8gTElBQklMSVRZIElOIFJFU1BFQ1QgT0YgQU5ZIEFDVElPTlMgT1IgQ0xBSU1TIEJBU0VECitPTiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMKK0VOVklST05NRU5UUyBCWSBZT1UuIEZPUiBQVVJQT1NFUyBPRiBUSElTIFBBUkFHUkFQSCwgVEhFIFRFUk0gIkxJRkUtCitDUklUSUNBTCBBUFBMSUNBVElPTiIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SCitNQUxGVU5DVElPTklORyBPRiBUSEUgU09GVFdBUkUgTUFZIFJFU1VMVCBESVJFQ1RMWSBPUiBJTkRJUkVDVExZIElOIFBIWVNJQ0FMCitJTkpVUlkgT1IgTE9TUyBPRiBIVU1BTiBMSUZFLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4KK0VTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRAorSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4IFRFUk1JTkFUSU9OLgorCis4LjEuCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZgorWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMKK3doaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4KKzguMy4KK0lmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdAorc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YKK3RoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZQordGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKK2xpY2Vuc2UuCis4LjQuCitJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuCit2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwKK3N1cnZpdmUgdGVybWluYXRpb24uCis5IExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkKK09GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcKK0ZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UCitBUFBMWSBUTyBZT1UuCisxMCBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisxMSBNSVNDRUxMQU5FT1VTLgorCisxMiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlCitmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZworaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorRVhISUJJVCBBLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZ1NPQVAgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4zICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3LmNzLmZzdS5lZHUvIGVuZ2VsZW4vc29hcGxpY2Vuc2UuaHRtbAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczogc3Rkc29hcC5oLCBzdGRzb2FwMi5oLCBzdGRzb2FwLmMsCitzdGRzb2FwMi5jLCBzdGRzb2FwLmNwcCwgc3Rkc29hcDIuY3BwLCBzb2FwY3BwMi5oLCBzb2FwY3BwMi5jLCBzb2FwY3BwMl9sZXgubCwKK3NvYXBjcHAyX3lhY2MueSwgZXJyb3IyLmgsIGVycm9yMi5jLCBzeW1ib2wyLmMsIGluaXQyLmMsIHNvYXBkb2MyLmh0bWwsIGFuZAorc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsCitzdGxzZXQuaC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4uIFBvcnRpb25zCitjcmVhdGVkIGJ5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgUm9iZXJ0IEEuIHZhbgorRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKToKKyJfX19fX19fX19fX19fX19fX19fX19fX18uIgorW05vdGU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZm9ybSB0aGUgdGV4dCBvZiB0aGUKK25vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBjb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dAorb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUKK2ZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorRVhISUJJVCBCLgorCisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorUG9ydGlvbnMgY3JlYXRlZCBieSBnU09BUCBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLAorR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUSEUgU09GVFdBUkUgSU4gVEhJUyBQUk9EVUNUIFdBUyBJTiBQQVJUIFBST1ZJREVEIEJZIEdFTklWSUEgSU5DIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEuM2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjOTQyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEuM2IKQEAgLTAsMCArMSwxNTcgQEAKKworZ1NPQVAgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjNiCisKK1RoZSBnU09BUCBwdWJsaWMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTDEuMSkuIFRoZSBzZWN0aW9ucyB0aGF0IHdlcmUgZGVsZXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBNUEwxLjEgdGV4dCBhcmUgMS4wLjEsIDIuMS4oYyksKGQpLCAyLjIuKGMpLChkKSwgOC4yLihiKSwgMTAsIGFuZCAxMS4gU2VjdGlvbiAzLjggd2FzIGFkZGVkLiBUaGUgbW9kaWZpZWQgc2VjdGlvbnMgYXJlIDIuMS4oYiksIDIuMi4oYiksIDMuMiAoc2ltcGxpZmllZCksIDMuNSAoZGVsZXRlZCB0aGUgbGFzdCBzZW50ZW5jZSksIGFuZCAzLjYgKHNpbXBsaWZpZWQpLgorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGdTT0FQIHNvZnR3YXJlIHBhY2thZ2UsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgc29hcGNwcDIgYW5kIHdzZGwyaCBzb3VyY2UgY29kZSBsb2NhdGVkIGluIGdzb2FwL3NyYyBhbmQgZ3NvYXAvd3NkbCwgYWxsIGNvZGUgZ2VuZXJhdGVkIGJ5IHNvYXBjcHAyIGFuZCB3c2RsMmgsIHRoZSBVRERJIHNvdXJjZSBjb2RlIGdzb2FwL3VkZGkyLCBhbmQgdGhlIFdlYiBzZXJ2ZXIgc2FtcGxlIHNvdXJjZSBjb2RlIHNhbXBsZXMvd2Vic2VydmVyLiBUbyB1c2UgYW55IG9mIHRoZXNlIHNvZnR3YXJlIHRvb2xzIGFuZCBjb21wb25lbnRzIGNvbW1lcmNpYWxseSwgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgcmVxdWlyZWQgYW5kIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHd3dy5nZW5pdmlhLmNvbS4KKzEgIERFRklOSVRJT05TLgorCisxLjAuMS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMy4gIkNvdmVyZWQgQ29kZSIKK21lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIKK21lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41LiAiRXhlY3V0YWJsZSIKK21lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiCittZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcuICJMYXJnZXIgV29yayIKK21lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjguICJMaWNlbnNlIgorbWVhbnMgdGhpcyBkb2N1bWVudC4KKzEuOC4xLiAiTGljZW5zYWJsZSIKK21lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45LiAiTW9kaWZpY2F0aW9ucyIKK21lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4KK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLgorQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUsIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIKK21lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIgorbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExLiAiU291cmNlIENvZGUiCittZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIuICJZb3UiIChvciAiWW91ciIpCittZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorMiAgU09VUkNFIENPREUgTElDRU5TRS4KKworMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlLCB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgb3IgYW55IGNvbWJpbmF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YuCisoYykKKyhkKQorCisyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIm9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCIpIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gdXRpbGl6ZSwgYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpCisoZCkKKzMgIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4gCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgTW9kaWZpY2F0aW9uIGNyZWF0ZWQgYnkgWW91IHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLiAKKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorKGMpIFJlcHJlc2VudGF0aW9ucy4KK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlIGFzIHBhcnQgb2YgYSBwcm9kdWN0LCB5b3UgbXVzdCByZXByb2R1Y2UgdGhlIG5vdGljZSBpbiBFeGhpYml0IEIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBwcm9kdWN0LiAKKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4gCisKKzMuOC4gUmVzdHJpY3Rpb25zLgorCitZb3UgbWF5IG5vdCByZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCwgcHJvcHJpZXRhcnkgbm90aWNlcyBvciBsYWJlbHMgZnJvbSBnU09BUC4KKzQgIElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKzUgIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYgIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCis2LjEuIE5ldyBWZXJzaW9ucy4KKworR3JhbnRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLiAKKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlICJnU09BUCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBnU09BUCBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNyAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUywgQU5EIEFOWSBXQVJSQU5UWSBUSEFUIE1BWSBBUklTRSBCWSBSRUFTT04gT0YgVFJBREUgVVNBR0UsIENVU1RPTSwgT1IgQ09VUlNFIE9GIERFQUxJTkcuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIQVQgVEhFIEFVVEhPUlMgRE8gTk9UIFdBUlJBTlQgVEhFIFNPRlRXQVJFIFdJTEwgUlVOIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBFWEVNUExBUlkgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIE9SIE5BVFVSRSBXSEFUU09FVkVSLCBXSEVUSEVSIEJBU0VEIE9OIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPTiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UgT1IgSUYgU1VDSCBEQU1BR0UgQ09VTEQgSEFWRSBCRUVOIFJFQVNPTkFCTFkgRk9SRVNFRU4sIEFORCBOT1RXSVRIU1RBTkRJTkcgQU5ZIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIEVYQ0xVU0lWRSBSRU1FRFkgUFJPVklERUQuIFNVQ0ggTElNSVRBVElPTiBPTiBEQU1BR0VTIElOQ0xVREVTLCBCVVQgSVMgTk9UIExJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIExPU1QgUFJPRklUUywgTE9TUyBPRiBEQVRBIE9SIFNPRlRXQVJFLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OIE9SIElNUEFJUk1FTlQgT0YgT1RIRVIgR09PRFMuIElOIE5PIEVWRU5UIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBUSEUgQ09TVFMgT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gWU9VIEFDS05PV0xFREdFIFRIQVQgVEhJUyBTT0ZUV0FSRSBJUyBOT1QgREVTSUdORUQgRk9SIFVTRSBJTiBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIFNVQ0ggQVMgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUiBDT05UUk9MLCBPUiBMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OUy4gVEhFIEFVVEhPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEFORCBBQ0NFUFRTIE5PIExJQUJJTElUWSBJTiBSRVNQRUNUIE9GIEFOWSBBQ1RJT05TIE9SIENMQUlNUyBCQVNFRCBPTiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEJZIFlPVS4gRk9SIFBVUlBPU0VTIE9GIFRISVMgUEFSQUdSQVBILCBUSEUgVEVSTSAiTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTiIgTUVBTlMgQU4gQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZVTkNUSU9OSU5HIE9SIE1BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwgSU5KVVJZIE9SIExPU1MgT0YgSFVNQU4gTElGRS4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzggIFRFUk1JTkFUSU9OLgorCis4LjEuCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuCis4LjMuCitJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorOC40LgorSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorOSAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwICBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisxMSAgTUlTQ0VMTEFORU9VUy4KKworMTIgIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KK0VYSElCSVQgQS4KKworIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4zICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cuY3MuZnN1LmVkdS8gZW5nZWxlbi9zb2FwbGljZW5zZS5odG1sCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczogc3Rkc29hcC5oLCBzdGRzb2FwMi5oLCBzdGRzb2FwLmMsIHN0ZHNvYXAyLmMsIHN0ZHNvYXAuY3BwLCBzdGRzb2FwMi5jcHAsIHNvYXBjcHAyLmgsIHNvYXBjcHAyLmMsIHNvYXBjcHAyX2xleC5sLCBzb2FwY3BwMl95YWNjLnksIGVycm9yMi5oLCBlcnJvcjIuYywgc3ltYm9sMi5jLCBpbml0Mi5jLCBzb2FwZG9jMi5odG1sLCBhbmQgc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsIHN0bHNldC5oLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJvYmVydCBBLiB2YW4gRW5nZWxlbi4gUG9ydGlvbnMgY3JlYXRlZCBieSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4gYXJlIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IFJvYmVydCBBLiB2YW4gRW5nZWxlbiwgR2VuaXZpYSBpbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvcihzKToKKyJfX19fX19fX19fX19fX19fX19fX19fX18uIgorW05vdGU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZm9ybSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIGNvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorRVhISUJJVCBCLgorCisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorUG9ydGlvbnMgY3JlYXRlZCBieSBnU09BUCBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgR0VOSVZJQSBJTkMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3RjbCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3RjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA0OWNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsCkBAIC0wLDAgKzEsNDAgQEAKK1RoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYnkgdGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKK0NhbGlmb3JuaWEsIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIFNjcmlwdGljcyBDb3Jwb3JhdGlvbiwgQWN0aXZlU3RhdGUKK0NvcnBvcmF0aW9uIGFuZCBvdGhlciBwYXJ0aWVzLiAgVGhlIGZvbGxvd2luZyB0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgc29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbgoraW5kaXZpZHVhbCBmaWxlcy4KKworVGhlIGF1dGhvcnMgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsCithbmQgbGljZW5zZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkCit0aGF0IGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMKK25vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gTm8gd3JpdHRlbiBhZ3JlZW1lbnQsCitsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuCitNb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMKK2FuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcyBkZXNjcmliZWQgaGVyZSwgcHJvdmlkZWQgdGhhdAordGhlIG5ldyB0ZXJtcyBhcmUgY2xlYXJseSBpbmRpY2F0ZWQgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlCit0aGV5IGFwcGx5LgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBESVNUUklCVVRPUlMgQkUgTElBQkxFIFRPIEFOWSBQQVJUWQorRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBJVFMgRE9DVU1FTlRBVElPTiwgT1IgQU5ZCitERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiAgVEhJUyBTT0ZUV0FSRQorSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgSEFWRQorTk8gT0JMSUdBVElPTiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SCitNT0RJRklDQVRJT05TLgorCitHT1ZFUk5NRU5UIFVTRTogSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhpcyBzb2Z0d2FyZSBvbiBiZWhhbGYgb2YgdGhlCitVLlMuIGdvdmVybm1lbnQsIHRoZSBHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSAiUmVzdHJpY3RlZCBSaWdodHMiCitpbiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhcyBkZWZpbmVkIGluIHRoZSBGZWRlcmFsCitBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucyAoRkFScykgaW4gQ2xhdXNlIDUyLjIyNy4xOSAoYykgKDIpLiAgSWYgeW91CithcmUgYWNxdWlyaW5nIHRoZSBzb2Z0d2FyZSBvbiBiZWhhbGYgb2YgdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSwgdGhlCitzb2Z0d2FyZSBzaGFsbCBiZSBjbGFzc2lmaWVkIGFzICJDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIiBhbmQgdGhlCitHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSAiUmVzdHJpY3RlZCBSaWdodHMiIGFzIGRlZmluZWQgaW4gQ2xhdXNlCisyNTIuMjI3LTcwMTQgKGIpICgzKSBvZiBERkFScy4gIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB0aGUKK2F1dGhvcnMgZ3JhbnQgdGhlIFUuUy4gR292ZXJubWVudCBhbmQgb3RoZXJzIGFjdGluZyBpbiBpdHMgYmVoYWxmCitwZXJtaXNzaW9uIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQordGVybXMgc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyYjUzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL3VuZnMzCkBAIC0wLDAgKzEsMjQgQEAKK1VORlMzIHVzZXItc3BhY2UgTkZTdjMgc2VydmVyCisoQykgMjAwMywgUGFzY2FsIFNjaG1pZHQgPHVuZnMzLXNlcnZlckBld2V0ZWwubmV0PgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KK0VWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0IGIvbWV0YS9maWxlcy9kZXBsb3lkaXJfcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2VjMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9kZXBsb3lkaXJfcmVhZG1lLnR4dApAQCAtMCwwICsxLDggQEAKK0ZpbGVzIGluIHRoZSBkZXBsb3kgZGlyZWN0b3J5IHdpbGwgbm90IGJlIHJlLWNyZWF0ZWQgYXV0b21hdGljYWxseSBpZiB5b3UKK2RlbGV0ZSB0aGVtLiBJZiB5b3UgZG8gZGVsZXRlIGEgZmlsZSwgeW91IHdpbGwgbmVlZCB0byBydW46CisKKyAgYml0YmFrZSAtYyBjbGVhbiBUQVJHRVQKKyAgYml0YmFrZSBUQVJHRVQKKword2hlcmUgVEFSR0VUIGlzIHRoZSBuYW1lIG9mIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlIG9yIHRhcmdldCBlLmcuCisidmlydHVhbC9rZXJuZWwiIGZvciB0aGUga2VybmVsLCBhbiBpbWFnZSwgZXRjLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQgYi9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDg5MWNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQKQEAgLTAsMCArMSwzNSBAQAorIzxwYXRoPgk8dHlwZT4gPG1vZGU+CTx1aWQ+CTxnaWQ+CTxtYWpvcj4JPG1pbm9yPgk8c3RhcnQ+CTxpbmM+CTxjb3VudD4KKyMvZGV2L21lbSAgICBjICAgICAgNjQwICAgICAgMCAgICAgICAwICAgICAgIDEgICAgICAgMSAgICAgICAwICAgICAgICAwICAgICAgICAtCisjCisjdHlwZSBjYW4gYmUgb25lIG9mOiAKKyMgICAgZglBIHJlZ3VsYXIgZmlsZQorIyAgICBkCURpcmVjdG9yeQorIyAgICBjCUNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlCisjICAgIGIJQmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZQorIyAgICBwCUZpZm8gKG5hbWVkIHBpcGUpCisKKy9kZXYJCWQJNzU1CXJvb3QJcm9vdAktCS0JLQktCS0KKy9kZXYvY29uc29sZQljCTY2Mglyb290CXR0eQk1CTEJLQktCS0KKy9kZXYvZmIwCWMJNjAwCXJvb3QJcm9vdAkyOQkwCS0JLQktCisvZGV2L2hkYQliCTY2MAlyb290CWRpc2sJMwkwCS0JLQktCisvZGV2L2hkYQliCTY2MAlyb290CWRpc2sJMwkxCTEJMQk0CisvZGV2L2ttZW0JYwk2NDAJcm9vdAlrbWVtCTEJMgktCS0JLQorL2Rldi9rbXNnCWMJNjAwCXJvb3QJcm9vdAkxCTExCS0JLQktCisvZGV2L21lbQljCTY0MAlyb290CWttZW0JMQkxCS0JLQktCisvZGV2L21tY2JsazAJYgk2NjAJcm9vdAlkaXNrCTE3OQkwCS0JLQktCisvZGV2L21tY2JsazBwCWIJNjYwCXJvb3QJZGlzawkxNzkJMQkxCTEJNAorL2Rldi9tdGQJYwk2NjAJcm9vdAlkaXNrCTkwCTAJMAkyCTgKKy9kZXYvbXRkYmxvY2sJYgk2NDAJcm9vdAlyb290CTMxCTAJMAkxCTgKKy9kZXYvbnVsbAljCTY2Nglyb290CXJvb3QJMQkzCS0JLQktCisvZGV2L3JhbQliCTY0MAlyb290CXJvb3QJMQkwCTAJMQk0CisvZGV2L3JhbmRvbQljCTY0NAlyb290CXJvb3QJMQk4CS0JLQktCisvZGV2L3J0YwljCTY0NAlyb290CXJvb3QJMjU0CTAJMAkxCTIKKy9kZXYvc2RhCWIJNjYwCXJvb3QJZGlzawk4CTAJLQktCS0KKy9kZXYvc2RhCWIJNjYwCXJvb3QJZGlzawk4CTEJMQkxCTQKKy9kZXYvc2RiCWIJNjYwCXJvb3QJZGlzawk4CTE2CS0JLQktCisvZGV2L3NkYgliCTY2MAlyb290CWRpc2sJOAkxNwkxCTEJNAorL2Rldi90dHkJYwk2NjIJcm9vdAl0dHkJNQkwCS0JLQktCisvZGV2L3R0eQljCTY2Nglyb290CXR0eQk0CTAJMAkxCTgKKy9kZXYvdHR5UwljCTY0MAlyb290CXR0eQk0CTY0CTAJMQkyCisvZGV2L3VyYW5kb20JYwk2NDQJcm9vdAlyb290CTEJOQktCS0JLQorL2Rldi96ZXJvCWMJNjQ0CXJvb3QJcm9vdAkxCTUJLQktCS0KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvZnMtcGVybXMudHh0IGIvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5Y2JlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvZnMtcGVybXMudHh0CkBAIC0wLDAgKzEsNjcgQEAKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCBrbm93biBwZXJtaXNzaW9ucy4KKyMgSXQgaXMgdXNlZCBieSB0aGUgcGFja2FnaW5nIGNsYXNzIHRvIGVuc3VyZSB0aGF0IHRoZSBwZXJtaXNzaW9ucywgb3duZXJzIGFuZAorIyBncm91cCBvZiBsaXN0ZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBpbiBzeW5jIGFjcm9zcyB0aGUgc3lzdGVtLgorIworIyBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSAKKyMKKyM8cGF0aD4JPG1vZGU+CTx1aWQ+CTxnaWQ+CTx3YWxrPgk8Zm1vZGU+CTxmdWlkPgk8ZmdpZD4KKyMKKyMgb3IKKyMKKyM8cGF0aD4gbGluayA8dGFyZ2V0PgorIworIyA8cGF0aD46IGRpcmVjdG9yeSBwYXRoCisjIDxtb2RlPjogbW9kZSBmb3IgZGlyZWN0b3J5CisjIDx1aWQ+OiAgdWlkIGZvciBkaXJlY3RvcnkKKyMgPGdpZD46ICBnaWQgZm9yIGRpcmVjdG9yeQorIyA8d2Fsaz46IHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGRpcmVjdG9yeT8gIHRydWUgb3IgZmFsc2UKKyMgPGZtb2RlPjogaWYgd2Fsa2luZywgbmV3IG1vZGUgZm9yIGZpbGVzCisjIDxmdWlkPjogIGlmIHdhbGtpbmcsIG5ldyB1aWQgZm9yIGZpbGVzCisjIDxmZ2lkPjogIGlmIHdhbGtpbmcsIG5ldyBnaWQgZm9yIGZpbGVzCisjIDx0YXJnZXQ+OiB0dXJuIHRoZSBkaXJlY3RvcnkgaW50byBhIHN5bWxpbmsgcG9pbnQgdG8gdGFyZ2V0CisjCisjIGluIG1vZGUsIHVpZCBvciBnaWQsIGEgIi0iIG1lYW5zIGRvbid0IGNoYW5nZSBhbnkgZXhpc3RpbmcgdmFsdWVzCisjCisjIC91c3Ivc3JjCQkwNzU1CXJvb3QJcm9vdAlmYWxzZQktCS0JLQorIyAvdXNyL3NoYXJlL21hbgkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgTm90ZTogYWxsIHN0YW5kYXJkIGNvbmZpZyBkaXJlY3RvcmllcyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCAiMDc1NSByb290IHJvb3QgZmFsc2UgLSAtIC0iCisKKyMgRG9jdW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3RlZAorJHttYW5kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2luZm9kaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske2RvY2Rpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7ZGF0YWRpcn0vZ3RrLWRvYwkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgRml4dXAgbG9jYWxlcworJHtkYXRhZGlyfS9sb2NhbGUJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorCisjIENsZWFudXAgaGVhZGVycworJHtpbmNsdWRlZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtvbGRpbmNsdWRlZGlyfQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgQ2xlYW51cCBkZWJ1ZyBzcmMKKy91c3Ivc3JjL2RlYnVnCQkwNzU1CXJvb3QJcm9vdAl0cnVlCS0Jcm9vdAlyb290CisKKyMgSXRlbXMgZnJvbSBiYXNlLWZpbGVzCisjIExpbmtzCiske2xvY2Fsc3RhdGVkaXJ9L3J1bglsaW5rCS9ydW4KKyR7bG9jYWxzdGF0ZWRpcn0vbG9nCWxpbmsJdm9sYXRpbGUvbG9nCiske2xvY2Fsc3RhdGVkaXJ9L2xvY2sJbGluawkvcnVuL2xvY2sKKyR7bG9jYWxzdGF0ZWRpcn0vdG1wCWxpbmsJdm9sYXRpbGUvdG1wCisKKy9ob21lCQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisvc3J2CQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske3ByZWZpeH0vc3JjCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisKKyMgU3BlY2lhbCBwZXJtaXNzaW9ucyBmcm9tIGJhc2UtZmlsZXMKKyMgU2V0IDE3NzcKKy90bXAJCQkJMDE3NzcJcm9vdAlyb290CWZhbHNlIC0gLSAtCiske2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlL3RtcAkwMTc3Nwlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTZXQgNzU1LWxzYgorL3NydgkJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCAyNzc1LWxzYgorL3Zhci9tYWlsCQkJMDI3NzUJcm9vdAltYWlsCWZhbHNlIC0gLSAtCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2ggYi9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLWV4dHJhY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwYTU0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApAQCAtMCwwICsxLDE4OSBAQAorIyEvYmluL2Jhc2gKKworSU5TVF9BUkNIPSQodW5hbWUgLW0gfCBzZWQgLWUgInMvaVszLTZdODYvaXg4Ni8iIC1lICJzL3g4NlstX102NC94ODZfNjQvIikKK1NES19BUkNIPSQoZWNobyBAU0RLX0FSQ0hAIHwgc2VkIC1lICJzL2lbMy02XTg2L2l4ODYvIiAtZSAicy94ODZbLV9dNjQveDg2XzY0LyIpCisKK3Zlcmx0ZSAoKSB7CisJWyAgIiQxIiA9ICJgcHJpbnRmICIkMVxuJDIiIHwgc29ydCAtViB8IGhlYWQgLW4xYCIgXQorfQorCit2ZXJsdCgpIHsKKwlbICIkMSIgPSAiJDIiIF0gJiYgcmV0dXJuIDEgfHwgdmVybHRlICQxICQyCit9CisKK3Zlcmx0IGB1bmFtZSAtcmAgQE9MREVTVF9LRVJORUxACitpZiBbICQ/ID0gMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoZSBTREsgbmVlZHMgYSBrZXJuZWwgPiBAT0xERVNUX0tFUk5FTEAiCisJZXhpdCAxCitmaQorCitpZiBbICIkSU5TVF9BUkNIIiAhPSAiJFNES19BUkNIIiBdOyB0aGVuCisJIyBBbGxvdyBmb3IgaW5zdGFsbGF0aW9uIG9mIGl4ODYgU0RLIG9uIHg4Nl82NCBob3N0CisJaWYgWyAiJElOU1RfQVJDSCIgIT0geDg2XzY0IC1vICIkU0RLX0FSQ0giICE9IGl4ODYgXTsgdGhlbgorCQllY2hvICJFcnJvcjogSW5zdGFsbGF0aW9uIG1hY2hpbmUgbm90IHN1cHBvcnRlZCEiCisJCWV4aXQgMQorCWZpCitmaQorCitERUZBVUxUX0lOU1RBTExfRElSPSJAU0RLUEFUSEAiCitTVURPX0VYRUM9IiIKK3RhcmdldF9zZGtfZGlyPSIiCithbnN3ZXI9IiIKK3JlbG9jYXRlPTEKK3NhdmVzY3JpcHRzPTAKK3ZlcmJvc2U9MAord2hpbGUgZ2V0b3B0cyAiOnlkOm5EUlMiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwl5KQorCQlhbnN3ZXI9IlkiCisJCTs7CisJZCkKKwkJdGFyZ2V0X3Nka19kaXI9JE9QVEFSRworCQk7OworCW4pCisJCXByZXBhcmVfYnVpbGRzeXN0ZW09Im5vIgorCQk7OworCUQpCisJCXZlcmJvc2U9MQorCQk7OworCVIpCisJCXJlbG9jYXRlPTAKKwkJc2F2ZXNjcmlwdHM9MQorCQk7OworCVMpCisJCXNhdmVzY3JpcHRzPTEKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogJChiYXNlbmFtZSAkMCkgWy15XSBbLWQgPGRpcj5dIgorCQllY2hvICIgIC15ICAgICAgICAgQXV0b21hdGljIHllcyB0byBhbGwgcHJvbXB0cyIKKwkJZWNobyAiICAtZCA8ZGlyPiAgIEluc3RhbGwgdGhlIFNESyB0byA8ZGlyPiIKKwkJZWNobyAiPT09PT09PT0gRXh0ZW5zaWJsZSBTREsgb25seSBvcHRpb25zID09PT09PT09PT09PSIKKwkJZWNobyAiICAtbiAgICAgICAgIERvIG5vdCBwcmVwYXJlIHRoZSBidWlsZCBzeXN0ZW0iCisJCWVjaG8gIj09PT09PT09IEFkdmFuY2VkIERFQlVHR0lORyBPTkxZIE9QVElPTlMgPT09PT09PT0iCisJCWVjaG8gIiAgLVMgICAgICAgICBTYXZlIHJlbG9jYXRpb24gc2NyaXB0cyIKKwkJZWNobyAiICAtUiAgICAgICAgIERvIG5vdCByZWxvY2F0ZSBleGVjdXRhYmxlcyIKKwkJZWNobyAiICAtRCAgICAgICAgIHVzZSBzZXQgLXggdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24iCisJCWV4aXQgMQorCQk7OworCWVzYWMKK2RvbmUKKworZWNobyAiQFNES19USVRMRUAgaW5zdGFsbGVyIHZlcnNpb24gQFNES19WRVJTSU9OQCIKK2VjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorCitpZiBbICR2ZXJib3NlID0gMSBdIDsgdGhlbgorCXNldCAteAorZmkKKworQFNES19QUkVfSU5TVEFMTF9DT01NQU5EQAorCisjIFNES19FWFRFTlNJQkxFIGlzIGV4cG9zZWQgZnJvbSB0aGUgU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkQgYWJvdmUKK2lmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCURFRkFVTFRfSU5TVEFMTF9ESVI9IkBTREtFWFRQQVRIQCIKK2ZpCisKK2lmIFsgIiR0YXJnZXRfc2RrX2RpciIgPSAiIiBdOyB0aGVuCisJaWYgWyAiJGFuc3dlciIgPSAiWSIgXTsgdGhlbgorCQl0YXJnZXRfc2RrX2Rpcj0iJERFRkFVTFRfSU5TVEFMTF9ESVIiCisJZWxzZQorCQlyZWFkIC1lIC1wICJFbnRlciB0YXJnZXQgZGlyZWN0b3J5IGZvciBTREsgKGRlZmF1bHQ6ICRERUZBVUxUX0lOU1RBTExfRElSKTogIiB0YXJnZXRfc2RrX2RpcgorCQlbICIkdGFyZ2V0X3Nka19kaXIiID0gIiIgXSAmJiB0YXJnZXRfc2RrX2Rpcj0kREVGQVVMVF9JTlNUQUxMX0RJUgorCWZpCitmaQorCitldmFsIHRhcmdldF9zZGtfZGlyPSQoZWNobyAiJHRhcmdldF9zZGtfZGlyInxzZWQgJ3MvIC9cXCAvZycpCitpZiBbIC1kICIkdGFyZ2V0X3Nka19kaXIiIF07IHRoZW4KKwl0YXJnZXRfc2RrX2Rpcj0kKGNkICIkdGFyZ2V0X3Nka19kaXIiOyBwd2QpCitlbHNlCisJdGFyZ2V0X3Nka19kaXI9JChyZWFkbGluayAtbSAiJHRhcmdldF9zZGtfZGlyIikKK2ZpCisKK2lmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCSMgV2UncmUgZ29pbmcgdG8gYmUgcnVubmluZyB0aGUgYnVpbGQgc3lzdGVtLCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBhcHBseQorCWlmIGVjaG8gIiR0YXJnZXRfc2RrX2RpciIgfCBncmVwIC1xICdbK1wgQF0nOyB0aGVuCisJCWVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggKCR0YXJnZXRfc2RrX2RpcikgY29udGFpbnMgaWxsZWdhbCIgXAorCQkgICAgICJjaGFyYWN0ZXJzIHN1Y2ggYXMgc3BhY2VzLCBAIG9yICsuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKK2Vsc2UKKwlpZiBbIC1uICIkKGVjaG8gJHRhcmdldF9zZGtfZGlyfGdyZXAgJyAnKSIgXTsgdGhlbgorCQllY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkdGFyZ2V0X3Nka19kaXIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorZmkKKworaWYgWyAtZSAiJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLUBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCIgXTsgdGhlbgorCWVjaG8gIlRoZSBkaXJlY3RvcnkgXCIkdGFyZ2V0X3Nka19kaXJcIiBhbHJlYWR5IGNvbnRhaW5zIGEgU0RLIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4iCisJcHJpbnRmICJJZiB5b3UgY29udGludWUsIGV4aXN0aW5nIGZpbGVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4hIFByb2NlZWRbeS9OXT8gIgorCisJZGVmYXVsdF9hbnN3ZXI9Im4iCitlbHNlCisJcHJpbnRmICJZb3UgYXJlIGFib3V0IHRvIGluc3RhbGwgdGhlIFNESyB0byBcIiR0YXJnZXRfc2RrX2RpclwiLiBQcm9jZWVkW1kvbl0/ICIKKworCWRlZmF1bHRfYW5zd2VyPSJ5IgorZmkKKworaWYgWyAiJGFuc3dlciIgPSAiIiBdOyB0aGVuCisJcmVhZCBhbnN3ZXIKKwlbICIkYW5zd2VyIiA9ICIiIF0gJiYgYW5zd2VyPSIkZGVmYXVsdF9hbnN3ZXIiCitlbHNlCisJZWNobyAkYW5zd2VyCitmaQorCitpZiBbICIkYW5zd2VyIiAhPSAiWSIgLWEgIiRhbnN3ZXIiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiSW5zdGFsbGF0aW9uIGFib3J0ZWQhIgorCWV4aXQgMQorZmkKKworIyBUcnkgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgKHRoaXMgd2lsbCBub3Qgc3VjY2VlZCBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSByaWdodHMpCitta2RpciAtcCAkdGFyZ2V0X3Nka19kaXIgPi9kZXYvbnVsbCAyPiYxCisKKyMgaWYgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgdG8gYWNjZXNzIGRpciwgZ2FpbiBieSBzdWRvIAoraWYgWyAhIC14ICR0YXJnZXRfc2RrX2RpciAtbyAhIC13ICR0YXJnZXRfc2RrX2RpciAtbyAhIC1yICR0YXJnZXRfc2RrX2RpciBdOyB0aGVuIAorCWlmIFsgIiRTREtfRVhURU5TSUJMRSIgPSAiMSIgXTsgdGhlbgorCQllY2hvICJVbmFibGUgdG8gYWNjZXNzIFwiJHRhcmdldF9zZGtfZGlyXCIsIHdpbGwgbm90IGF0dGVtcHQgdG8gdXNlIiBcCisJCSAgICAgInN1ZG8gYXMgYXMgZXh0ZW5zaWJsZSBTREsgY2Fubm90IGJlIHVzZWQgYXMgcm9vdC4iCisJCWV4aXQgMQorCWZpCisKKwlTVURPX0VYRUM9JCh3aGljaCAic3VkbyIpCisJaWYgWyAteiAkU1VET19FWEVDIF07IHRoZW4KKwkJZWNobyAiTm8gY29tbWFuZCAnc3VkbycgZm91bmQsIHBsZWFzZSBpbnN0YWxsIHN1ZG8gZmlyc3QuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKKworCSMgdGVzdCBzdWRvIGNvdWxkIGdhaW4gcm9vdCByaWdodAorCSRTVURPX0VYRUMgcHdkID4vZGV2L251bGwgMj4mMQorCVsgJD8gLW5lIDAgXSAmJiBlY2hvICJTb3JyeSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byBleGVjdXRlIGFzIHJvb3QuIiAmJiBleGl0IDEKKworCSMgbm93IHRoYXQgd2UgaGF2ZSBzdWRvIHJpZ2h0cywgY3JlYXRlIHRoZSBkaXJlY3RvcnkKKwkkU1VET19FWEVDIG1rZGlyIC1wICR0YXJnZXRfc2RrX2RpciA+L2Rldi9udWxsIDI+JjEKK2ZpCisKK3BheWxvYWRfb2Zmc2V0PSQoKCQoZ3JlcCAtbmEgLW0xICJeTUFSS0VSOiQiICQwfGN1dCAtZCc6JyAtZjEpICsgMSkpCisKK3ByaW50ZiAiRXh0cmFjdGluZyBTREsuLi4iCit0YWlsIC1uICskcGF5bG9hZF9vZmZzZXQgJDB8ICRTVURPX0VYRUMgdGFyIHhqIC1DICR0YXJnZXRfc2RrX2RpcgorZWNobyAiZG9uZSIKKworcHJpbnRmICJTZXR0aW5nIGl0IHVwLi4uIgorIyBmaXggZW52aXJvbm1lbnQgcGF0aHMKK2ZvciBlbnZfc2V0dXBfc2NyaXB0IGluIGBscyAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtKmA7IGRvCisJJFNVRE9fRVhFQyBzZWQgLWUgInM6QFNES1BBVEhAOiR0YXJnZXRfc2RrX2RpcjpnIiAtaSAkZW52X3NldHVwX3NjcmlwdAorZG9uZQorCitAU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQAorCisjIGRlbGV0ZSB0aGUgcmVsb2NhdGluZyBzY3JpcHQsIHNvIHRoYXQgdXNlciBpcyBmb3JjZWQgdG8gcmUtcnVuIHRoZSBpbnN0YWxsZXIKKyMgaWYgaGUvc2hlIHdhbnRzIGFub3RoZXIgbG9jYXRpb24gZm9yIHRoZSBzZGsKK2lmIFsgJHNhdmVzY3JpcHRzID0gMCBdIDsgdGhlbgorCSRTVURPX0VYRUMgcm0gLWYgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsucHkgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKK2ZpCisKK2VjaG8gIlNESyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2V0IHVwIGFuZCBpcyByZWFkeSB0byBiZSB1c2VkLiIKK2VjaG8gIkVhY2ggdGltZSB5b3Ugd2lzaCB0byB1c2UgdGhlIFNESyBpbiBhIG5ldyBzaGVsbCBzZXNzaW9uLCB5b3UgbmVlZCB0byBzb3VyY2UgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBlLmcuIgorZWNobyAiIFwkIC4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwLUBSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCIKKworZXhpdCAwCisKK01BUktFUjoKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2ggYi9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjhlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMgZml4IGR5bmFtaWMgbG9hZGVyIHBhdGhzIGluIGFsbCBFTEYgU0RLIGJpbmFyaWVzCituYXRpdmVfc3lzcm9vdD0kKCRTVURPX0VYRUMgY2F0ICRlbnZfc2V0dXBfc2NyaXB0IHxncmVwICdPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9J3xjdXQgLWQnPScgLWYyfHRyIC1kICciJykKK2RsX3BhdGg9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290L2xpYiAtbmFtZSAibGQtbGludXgqIikKK2lmIFsgIiRkbF9wYXRoIiA9ICIiIF0gOyB0aGVuCisJZWNobyAiU0RLIGNvdWxkIG5vdCBiZSBzZXQgdXAuIFJlbG9jYXRlIHNjcmlwdCB1bmFibGUgdG8gZmluZCBsZC1saW51eC5zby4gQWJvcnQhIgorCWV4aXQgMQorZmkKK2V4ZWN1dGFibGVfZmlsZXM9JCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGYgXAorCVwoIC1wZXJtIC0wMTAwIC1vIC1wZXJtIC0wMDEwIC1vIC1wZXJtIC0wMDAxIFwpIC1wcmludGYgIiclaC8lZicgIikKKwordGRpcj1gbWt0ZW1wIC1kYAoraWYgWyB4JHRkaXIgPSB4IF0gOyB0aGVuCisgICBlY2hvICJTREsgcmVsb2NhdGUgZmFpbGVkLCBjb3VsZCBub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSIKKyAgIGV4aXQgMQorZmkKK2VjaG8gIiMhL2Jpbi9iYXNoIiA+ICR0ZGlyL3JlbG9jYXRlX3Nkay5zaAorZWNobyBleGVjICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnB5ICR0YXJnZXRfc2RrX2RpciAkZGxfcGF0aCAkZXhlY3V0YWJsZV9maWxlcyA+PiAkdGRpci9yZWxvY2F0ZV9zZGsuc2gKKyRTVURPX0VYRUMgbXYgJHRkaXIvcmVsb2NhdGVfc2RrLnNoICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCiskU1VET19FWEVDIGNobW9kIDc1NSAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorcm0gLXJmICR0ZGlyCitpZiBbICRyZWxvY2F0ZSA9IDEgXSA7IHRoZW4KKwkkU1VET19FWEVDICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCisJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCWVjaG8gIlNESyBjb3VsZCBub3QgYmUgc2V0IHVwLiBSZWxvY2F0ZSBzY3JpcHQgZmFpbGVkLiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCitmaQorCisjIHJlcGxhY2UgQFNES1BBVEhAIHdpdGggdGhlIG5ldyBwcmVmaXggaW4gYWxsIHRleHQgZmlsZXM6IGNvbmZpZ3Mvc2NyaXB0cy9ldGMKK2ZvciByZXBsYWNlIGluICIkdGFyZ2V0X3Nka19kaXIgLW1heGRlcHRoIDEiICIkbmF0aXZlX3N5c3Jvb3QiOyBkbworCSRTVURPX0VYRUMgZmluZCAkcmVwbGFjZSAtdHlwZSBmIC1leGVjIGZpbGUgJ3t9JyBcOyB8IFwKKwkJZ3JlcCAiOi4qXChBU0NJSVx8c2NyaXB0XHxzb3VyY2VcKS4qdGV4dCIgfCBcCisJCWF3ayAtRic6JyAne3ByaW50ZiAiXCIlc1wiXG4iLCAkMX0nIHwgXAorCQlncmVwIC12ICIkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtKiIgfCBcCisJCSRTVURPX0VYRUMgeGFyZ3MgLW4zMiBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9ESVI6JHRhcmdldF9zZGtfZGlyOmciCitkb25lCisKKyMgY2hhbmdlIGFsbCBzeW1saW5rcyBwb2ludGluZyB0byBAU0RLUEFUSEAKK2ZvciBsIGluICQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBsKTsgZG8KKwkkU1VET19FWEVDIGxuIC1zZm4gJChyZWFkbGluayAkbHwkU1VET19FWEVDIHNlZCAtZSAiczokREVGQVVMVF9JTlNUQUxMX0RJUjokdGFyZ2V0X3Nka19kaXI6IikgJGwKK2RvbmUKKworIyBmaW5kIG91dCBhbGwgcGVybCBzY3JpcHRzIGluICRuYXRpdmVfc3lzcm9vdCBhbmQgbW9kaWZ5IHRoZW0gcmVwbGFjaW5nIHRoZQorIyBob3N0IHBlcmwgd2l0aCBTREsgcGVybC4KK2ZvciBwZXJsX3NjcmlwdCBpbiAkKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QgLXR5cGUgZiAtZXhlYyBncmVwIC1sICJeIyEuKnBlcmwiICd7fScgXDspOyBkbworCSRTVURPX0VYRUMgc2VkIC1pIC1lICJzOl4jISAqL3Vzci9iaW4vcGVybC4qOiMhIC91c3IvYmluL2VudiBwZXJsOmciIC1lIFwKKwkJInM6IC91c3IvYmluL3Blcmw6IC91c3IvYmluL2VudiBwZXJsOmciICRwZXJsX3NjcmlwdAorZG9uZQorCitlY2hvIGRvbmUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2UvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkOTUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkgYi9tZXRhL2xpYi9vZS9idWlsZGhpc3RvcnlfYW5hbHlzaXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5NWM3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpAQCAtMCwwICsxLDQ1NiBAQAorIyBSZXBvcnQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gdGhlIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5IHNpbmNlIGEgc3BlY2lmaWMgcmV2aXNpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIE5vdGU6IHJlcXVpcmVzIEdpdFB5dGhvbiAwLjMuMSsKKyMKKyMgWW91IGNhbiB1c2UgdGhpcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnkgcnVubmluZyBzY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGdpdAoraW1wb3J0IHJlCitpbXBvcnQgYmIudXRpbHMKKworCisjIEhvdyB0byBkaXNwbGF5IGZpZWxkcworbGlzdF9maWVsZHMgPSBbJ0RFUEVORFMnLCAnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdGSUxFUycsICdGSUxFTElTVCcsICdVU0VSX0NMQVNTRVMnLCAnSU1BR0VfQ0xBU1NFUycsICdJTUFHRV9GRUFUVVJFUycsICdJTUFHRV9MSU5HVUFTJywgJ0lNQUdFX0lOU1RBTEwnLCAnQkFEX1JFQ09NTUVOREFUSU9OUycsICdQQUNLQUdFX0VYQ0xVREUnXQorbGlzdF9vcmRlcl9maWVsZHMgPSBbJ1BBQ0tBR0VTJ10KK2RlZmF1bHR2YWxfbWFwID0geydQS0cnOiAnUEtHJywgJ1BLR0UnOiAnUEUnLCAnUEtHVic6ICdQVicsICdQS0dSJzogJ1BSJ30KK251bWVyaWNfZmllbGRzID0gWydQS0dTSVpFJywgJ0lNQUdFU0laRSddCisjIEZpZWxkcyB0byBtb25pdG9yCittb25pdG9yX2ZpZWxkcyA9IFsnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ1BBQ0tBR0VTJywgJ0ZJTEVMSVNUJywgJ1BLR1NJWkUnLCAnSU1BR0VTSVpFJywgJ1BLRyddCit2ZXJfbW9uaXRvcl9maWVsZHMgPSBbJ1BLR0UnLCAnUEtHVicsICdQS0dSJ10KKyMgUGVyY2VudGFnZSBjaGFuZ2UgdG8gYWxlcnQgZm9yIG51bWVyaWMgZmllbGRzCittb25pdG9yX251bWVyaWNfdGhyZXNob2xkID0gMTAKKyMgSW1hZ2UgZmlsZXMgdG8gbW9uaXRvciAobm90ZSB0aGF0IGltYWdlLWluZm8udHh0IGlzIGhhbmRsZWQgc2VwYXJhdGVseSkKK2ltZ19tb25pdG9yX2ZpbGVzID0gWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnLCAnZmlsZXMtaW4taW1hZ2UudHh0J10KKyMgUmVsYXRlZCBjb250ZXh0IGZpZWxkcyBmb3IgcmVwb3J0aW5nIChub3RlOiBQRSwgUFYgJiBQUiBhcmUgYWx3YXlzIHJlcG9ydGVkIGZvciBtb25pdG9yZWQgcGFja2FnZSBmaWVsZHMpCityZWxhdGVkX2ZpZWxkcyA9IHt9CityZWxhdGVkX2ZpZWxkc1snUkRFUEVORFMnXSA9IFsnREVQRU5EUyddCityZWxhdGVkX2ZpZWxkc1snUlJFQ09NTUVORFMnXSA9IFsnREVQRU5EUyddCityZWxhdGVkX2ZpZWxkc1snRklMRUxJU1QnXSA9IFsnRklMRVMnXQorcmVsYXRlZF9maWVsZHNbJ1BLR1NJWkUnXSA9IFsnRklMRUxJU1QnXQorcmVsYXRlZF9maWVsZHNbJ2ZpbGVzLWluLWltYWdlLnR4dCddID0gWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnLCAnVVNFUl9DTEFTU0VTJywgJ0lNQUdFX0NMQVNTRVMnLCAnUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCAnSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCddCityZWxhdGVkX2ZpZWxkc1snaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0J10gPSBbJ0lNQUdFX0ZFQVRVUkVTJywgJ0lNQUdFX0xJTkdVQVMnLCAnSU1BR0VfSU5TVEFMTCcsICdCQURfUkVDT01NRU5EQVRJT05TJywgJ05PX1JFQ09NTUVOREFUSU9OUycsICdQQUNLQUdFX0VYQ0xVREUnXQorCisKK2NsYXNzIENoYW5nZVJlY29yZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmllbGRuYW1lLCBvbGR2YWx1ZSwgbmV3dmFsdWUsIG1vbml0b3JlZCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5maWVsZG5hbWUgPSBmaWVsZG5hbWUKKyAgICAgICAgc2VsZi5vbGR2YWx1ZSA9IG9sZHZhbHVlCisgICAgICAgIHNlbGYubmV3dmFsdWUgPSBuZXd2YWx1ZQorICAgICAgICBzZWxmLm1vbml0b3JlZCA9IG1vbml0b3JlZAorICAgICAgICBzZWxmLnJlbGF0ZWQgPSBbXQorICAgICAgICBzZWxmLmZpbGVjaGFuZ2VzID0gTm9uZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdHJfaW50ZXJuYWwoVHJ1ZSkKKworICAgIGRlZiBfc3RyX2ludGVybmFsKHNlbGYsIG91dGVyKToKKyAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICBpZiAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHNlbGYucGF0aC5zcGxpdCgnL2ltYWdlLWZpbGVzLycpWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZWZpeCA9ICclczogJyAlIHNlbGYucGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKworICAgICAgICBkZWYgcGtnbGlzdF9jb21iaW5lKGRlcHZlcik6CisgICAgICAgICAgICBwa2dsaXN0ID0gW10KKyAgICAgICAgICAgIGZvciBrLHYgaW4gZGVwdmVyLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHY6CisgICAgICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKCIlcyAoJXMpIiAlIChrLHYpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKGspCisgICAgICAgICAgICByZXR1cm4gcGtnbGlzdAorCisgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lIGluIGxpc3RfZmllbGRzIG9yIHNlbGYuZmllbGRuYW1lIGluIGxpc3Rfb3JkZXJfZmllbGRzOgorICAgICAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgaW4gWydSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJ106CisgICAgICAgICAgICAgICAgKGRlcHZlcmEsIGRlcHZlcmIpID0gY29tcGFyZV9wa2dfbGlzdHMoc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgICAgICAgICBhaXRlbXMgPSBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyYSkKKyAgICAgICAgICAgICAgICBiaXRlbXMgPSBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWl0ZW1zID0gc2VsZi5vbGR2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgYml0ZW1zID0gc2VsZi5uZXd2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICByZW1vdmVkID0gbGlzdChzZXQoYWl0ZW1zKSAtIHNldChiaXRlbXMpKQorICAgICAgICAgICAgYWRkZWQgPSBsaXN0KHNldChiaXRlbXMpIC0gc2V0KGFpdGVtcykpCisKKyAgICAgICAgICAgIGlmIHJlbW92ZWQgb3IgYWRkZWQ6CisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlZCBhbmQgbm90IGJpdGVtczoKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gJyVzOiByZW1vdmVkIGFsbCBpdGVtcyAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgJyAnLmpvaW4ocmVtb3ZlZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gJyVzOiVzJXMnICUgKHNlbGYuZmllbGRuYW1lLCAnIHJlbW92ZWQgIiVzIicgJSAnICcuam9pbihyZW1vdmVkKSBpZiByZW1vdmVkIGVsc2UgJycsICcgYWRkZWQgIiVzIicgJSAnICcuam9pbihhZGRlZCkgaWYgYWRkZWQgZWxzZSAnJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgb3JkZXInICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBudW1lcmljX2ZpZWxkczoKKyAgICAgICAgICAgIGF2YWwgPSBpbnQoc2VsZi5vbGR2YWx1ZSBvciAwKQorICAgICAgICAgICAgYnZhbCA9IGludChzZWxmLm5ld3ZhbHVlIG9yIDApCisgICAgICAgICAgICBpZiBhdmFsICE9IDA6CisgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9ICgoYnZhbCAtIGF2YWwpIC8gZmxvYXQoYXZhbCkpICogMTAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAxMDAKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMgKCVzJWQlJSknICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlIG9yICInJyIsIHNlbGYubmV3dmFsdWUgb3IgIicnIiwgJysnIGlmIHBlcmNlbnRjaGcgPiAwIGVsc2UgJycsIHBlcmNlbnRjaGcpCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gZGVmYXVsdHZhbF9tYXA6CisgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBmcm9tICVzIHRvICVzJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuZmllbGRuYW1lID09ICdQS0cnIGFuZCAnW2RlZmF1bHRdJyBpbiBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCArPSAnIC0gbWF5IGluZGljYXRlIGRlYmlhbiByZW5hbWluZyBmYWlsdXJlJworICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIFsncGtnX3ByZWluc3QnLCAncGtnX3Bvc3RpbnN0JywgJ3BrZ19wcmVybScsICdwa2dfcG9zdHJtJ106CisgICAgICAgICAgICBpZiBzZWxmLm9sZHZhbHVlIGFuZCBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5uZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgYWRkZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgZWxpZiBzZWxmLm9sZHZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBjbGVhcmVkOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBibGluZXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGFsaW5lcywgYmxpbmVzLCBzZWxmLmZpZWxkbmFtZSwgc2VsZi5maWVsZG5hbWUsIGxpbmV0ZXJtPScnKQorICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKGxpc3QoZGlmZilbMjpdKQorICAgICAgICAgICAgb3V0ICs9ICdcbiAgLS0nCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gaW1nX21vbml0b3JfZmlsZXMgb3IgJy9pbWFnZS1maWxlcy8nIGluIHNlbGYucGF0aDoKKyAgICAgICAgICAgIGZpZWxkbmFtZSA9IHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBpZiAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgICAgIGZpZWxkbmFtZSA9IG9zLnBhdGguam9pbignLycgKyBzZWxmLnBhdGguc3BsaXQoJy9pbWFnZS1maWxlcy8nKVsxXSwgc2VsZi5maWVsZG5hbWUpCisgICAgICAgICAgICAgICAgb3V0ID0gJ0NoYW5nZXMgdG8gJXM6XG4gICcgJSBmaWVsZG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3V0ZXI6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICdDaGFuZ2VzIHRvICVzICcgJSBzZWxmLnBhdGgKKyAgICAgICAgICAgICAgICBvdXQgPSAnKCVzKTpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBpZiBzZWxmLmZpbGVjaGFuZ2VzOgorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihbJyVzJyAlIGkgZm9yIGkgaW4gc2VsZi5maWxlY2hhbmdlc10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFsaW5lcyA9IHNlbGYub2xkdmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgYmxpbmVzID0gc2VsZi5uZXd2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoYWxpbmVzLCBibGluZXMsIGZpZWxkbmFtZSwgZmllbGRuYW1lLCBsaW5ldGVybT0nJykKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4obGlzdChkaWZmKSkKKyAgICAgICAgICAgICAgICBvdXQgKz0gJ1xuICAtLScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gIiVzIiB0byAiJXMiJyAlIChzZWxmLmZpZWxkbmFtZSwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKworICAgICAgICBpZiBzZWxmLnJlbGF0ZWQ6CisgICAgICAgICAgICBmb3IgY2hnIGluIHNlbGYucmVsYXRlZDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3V0ZXIgYW5kIGNoZy5maWVsZG5hbWUgaW4gWydQRScsICdQVicsICdQUiddOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNoZy5fc3RyX2ludGVybmFsKEZhbHNlKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICogJXMnICUgbGluZQorCisgICAgICAgIHJldHVybiAnJXMlcycgJSAocHJlZml4LCBvdXQpCisKK2NsYXNzIEZpbGVDaGFuZ2U6CisgICAgY2hhbmdldHlwZV9hZGQgPSAnQScKKyAgICBjaGFuZ2V0eXBlX3JlbW92ZSA9ICdSJworICAgIGNoYW5nZXR5cGVfdHlwZSA9ICdUJworICAgIGNoYW5nZXR5cGVfcGVybXMgPSAnUCcKKyAgICBjaGFuZ2V0eXBlX293bmVyZ3JvdXAgPSAnTycKKyAgICBjaGFuZ2V0eXBlX2xpbmsgPSAnTCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBjaGFuZ2V0eXBlLCBvbGR2YWx1ZSA9IE5vbmUsIG5ld3ZhbHVlID0gTm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5jaGFuZ2V0eXBlID0gY2hhbmdldHlwZQorICAgICAgICBzZWxmLm9sZHZhbHVlID0gb2xkdmFsdWUKKyAgICAgICAgc2VsZi5uZXd2YWx1ZSA9IG5ld3ZhbHVlCisKKyAgICBkZWYgX2Z0eXBlX3N0cihzZWxmLCBmdHlwZSk6CisgICAgICAgIGlmIGZ0eXBlID09ICctJzoKKyAgICAgICAgICAgIHJldHVybiAnZmlsZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnZCc6CisgICAgICAgICAgICByZXR1cm4gJ2RpcmVjdG9yeScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnbCc6CisgICAgICAgICAgICByZXR1cm4gJ3N5bWxpbmsnCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ2MnOgorICAgICAgICAgICAgcmV0dXJuICdjaGFyIGRldmljZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnYic6CisgICAgICAgICAgICByZXR1cm4gJ2Jsb2NrIGRldmljZScKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAncCc6CisgICAgICAgICAgICByZXR1cm4gJ2ZpZm8nCisgICAgICAgIGVsaWYgZnR5cGUgPT0gJ3MnOgorICAgICAgICAgICAgcmV0dXJuICdzb2NrZXQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ3Vua25vd24gKCVzKScgJSBmdHlwZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfYWRkOgorICAgICAgICAgICAgcmV0dXJuICclcyB3YXMgYWRkZWQnICUgc2VsZi5wYXRoCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9yZW1vdmU6CisgICAgICAgICAgICByZXR1cm4gJyVzIHdhcyByZW1vdmVkJyAlIHNlbGYucGF0aAorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfdHlwZToKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCB0eXBlIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5fZnR5cGVfc3RyKHNlbGYub2xkdmFsdWUpLCBzZWxmLl9mdHlwZV9zdHIoc2VsZi5uZXd2YWx1ZSkpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9wZXJtczoKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCBwZXJtaXNzaW9ucyBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9vd25lcmdyb3VwOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIG93bmVyL2dyb3VwIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX2xpbms6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgc3ltbGluayB0YXJnZXQgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkICh1bmtub3duKScgJSBzZWxmLnBhdGgKKworCitkZWYgYmxvYl90b19kaWN0KGJsb2IpOgorICAgIGFsaW5lcyA9IGJsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgIGFkaWN0ID0ge30KKyAgICBmb3IgbGluZSBpbiBhbGluZXM6CisgICAgICAgIHNwbGl0diA9IFtpLnN0cmlwKCkgZm9yIGkgaW4gbGluZS5zcGxpdCgnPScsMSldCisgICAgICAgIGlmIGxlbihzcGxpdHYpID4gMToKKyAgICAgICAgICAgIGFkaWN0W3NwbGl0dlswXV0gPSBzcGxpdHZbMV0KKyAgICByZXR1cm4gYWRpY3QKKworCitkZWYgZmlsZV9saXN0X3RvX2RpY3QobGluZXMpOgorICAgIGFkaWN0ID0ge30KKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgIyBMZWF2ZSB0aGUgbGFzdCBmZXcgZmllbGRzIGludGFjdCBzbyB3ZSBoYW5kbGUgZmlsZSBuYW1lcyBjb250YWluaW5nIHNwYWNlcworICAgICAgICBzcGxpdHYgPSBsaW5lLnNwbGl0KE5vbmUsNCkKKyAgICAgICAgIyBHcmFiIHRoZSBwYXRoIGFuZCByZW1vdmUgdGhlIGxlYWRpbmcgLgorICAgICAgICBwYXRoID0gc3BsaXR2WzRdWzE6XS5zdHJpcCgpCisgICAgICAgICMgSGFuZGxlIHN5bWxpbmtzCisgICAgICAgIGlmKCcgLT4gJyBpbiBwYXRoKToKKyAgICAgICAgICAgIHRhcmdldCA9IHBhdGguc3BsaXQoJyAtPiAnKVsxXQorICAgICAgICAgICAgcGF0aCA9IHBhdGguc3BsaXQoJyAtPiAnKVswXQorICAgICAgICAgICAgYWRpY3RbcGF0aF0gPSBzcGxpdHZbMDozXSArIFt0YXJnZXRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhZGljdFtwYXRoXSA9IHNwbGl0dlswOjNdCisgICAgcmV0dXJuIGFkaWN0CisKKworZGVmIGNvbXBhcmVfZmlsZV9saXN0cyhhbGluZXMsIGJsaW5lcyk6CisgICAgYWRpY3QgPSBmaWxlX2xpc3RfdG9fZGljdChhbGluZXMpCisgICAgYmRpY3QgPSBmaWxlX2xpc3RfdG9fZGljdChibGluZXMpCisgICAgZmlsZWNoYW5nZXMgPSBbXQorICAgIGZvciBwYXRoLCBzcGxpdHYgaW4gYWRpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgIG5ld3NwbGl0diA9IGJkaWN0LnBvcChwYXRoLCBOb25lKQorICAgICAgICBpZiBuZXdzcGxpdHY6CisgICAgICAgICAgICAjIENoZWNrIHR5cGUKKyAgICAgICAgICAgIG9sZHZhbHVlID0gc3BsaXR2WzBdWzBdCisgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlswXVswXQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3R5cGUsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIHBlcm1pc3Npb25zCisgICAgICAgICAgICBvbGR2YWx1ZSA9IHNwbGl0dlswXVsxOl0KKyAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzBdWzE6XQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3Blcm1zLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICAgICAgIyBDaGVjayBvd25lci9ncm91cAorICAgICAgICAgICAgb2xkdmFsdWUgPSAnJXMvJXMnICUgKHNwbGl0dlsxXSwgc3BsaXR2WzJdKQorICAgICAgICAgICAgbmV3dmFsdWUgPSAnJXMvJXMnICUgKG5ld3NwbGl0dlsxXSwgbmV3c3BsaXR2WzJdKQorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX293bmVyZ3JvdXAsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIHN5bWxpbmsgdGFyZ2V0CisgICAgICAgICAgICBpZiBuZXdzcGxpdHZbMF1bMF0gPT0gJ2wnOgorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHYpID4gMzoKKyAgICAgICAgICAgICAgICAgICAgb2xkdmFsdWUgPSBzcGxpdHZbM10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvbGR2YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3NwbGl0dlszXQorICAgICAgICAgICAgICAgIGlmIG9sZHZhbHVlICE9IG5ld3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfbGluaywgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9yZW1vdmUpKQorCisgICAgIyBXaGF0ZXZlciBpcyBsZWZ0IG92ZXIgaGFzIGJlZW4gYWRkZWQKKyAgICBmb3IgcGF0aCBpbiBiZGljdDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX2FkZCkpCisKKyAgICByZXR1cm4gZmlsZWNoYW5nZXMKKworCitkZWYgY29tcGFyZV9saXN0cyhhbGluZXMsIGJsaW5lcyk6CisgICAgcmVtb3ZlZCA9IGxpc3Qoc2V0KGFsaW5lcykgLSBzZXQoYmxpbmVzKSkKKyAgICBhZGRlZCA9IGxpc3Qoc2V0KGJsaW5lcykgLSBzZXQoYWxpbmVzKSkKKworICAgIGZpbGVjaGFuZ2VzID0gW10KKyAgICBmb3IgcGtnIGluIHJlbW92ZWQ6CisgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBrZywgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3JlbW92ZSkpCisgICAgZm9yIHBrZyBpbiBhZGRlZDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGtnLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfYWRkKSkKKworICAgIHJldHVybiBmaWxlY2hhbmdlcworCisKK2RlZiBjb21wYXJlX3BrZ19saXN0cyhhc3RyLCBic3RyKToKKyAgICBkZXB2ZXJhID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGFzdHIpCisgICAgZGVwdmVyYiA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihic3RyKQorCisgICAgIyBTdHJpcCBvdXQgY2hhbmdlcyB3aGVyZSB0aGUgdmVyc2lvbiBoYXMgaW5jcmVhc2VkCisgICAgcmVtb3ZlID0gW10KKyAgICBmb3IgayBpbiBkZXB2ZXJhOgorICAgICAgICBpZiBrIGluIGRlcHZlcmI6CisgICAgICAgICAgICBkdmEgPSBkZXB2ZXJhW2tdCisgICAgICAgICAgICBkdmIgPSBkZXB2ZXJiW2tdCisgICAgICAgICAgICBpZiBkdmEgYW5kIGR2YiBhbmQgbGVuKGR2YSkgPT0gbGVuKGR2Yik6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBsZW5ndGggaXMgdGhlIHNhbWUsIHNvcnQgc28gdGhhdCBwcmVmaXhlcyAoZS5nLiA+PSkgd2lsbCBsaW5lIHVwCisgICAgICAgICAgICAgICAgZHZhLnNvcnQoKQorICAgICAgICAgICAgICAgIGR2Yi5zb3J0KCkKKyAgICAgICAgICAgICAgICByZW1vdmVpdCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgZHZhaSwgZHZiaSBpbiB6aXAoZHZhLCBkdmIpOgorICAgICAgICAgICAgICAgICAgICBpZiBkdmFpICE9IGR2Ymk6CisgICAgICAgICAgICAgICAgICAgICAgICBhaXByZWZpeCA9IGR2YWkuc3BsaXQoJyAnKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgYmlwcmVmaXggPSBkdmJpLnNwbGl0KCcgJylbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFpcHJlZml4ID09IGJpcHJlZml4IGFuZCBhaXByZWZpeCBpbiBbJz49JywgJz0nXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYi51dGlscy52ZXJjbXAoYmIudXRpbHMuc3BsaXRfdmVyc2lvbihkdmFpKSwgYmIudXRpbHMuc3BsaXRfdmVyc2lvbihkdmJpKSkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVpdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIHJlbW92ZWl0OgorICAgICAgICAgICAgICAgICAgICByZW1vdmUuYXBwZW5kKGspCisKKyAgICBmb3IgayBpbiByZW1vdmU6CisgICAgICAgIGRlcHZlcmEucG9wKGspCisgICAgICAgIGRlcHZlcmIucG9wKGspCisKKyAgICByZXR1cm4gKGRlcHZlcmEsIGRlcHZlcmIpCisKKworZGVmIGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBhYmxvYiwgYmJsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpOgorICAgIGFkaWN0ID0gYmxvYl90b19kaWN0KGFibG9iKQorICAgIGJkaWN0ID0gYmxvYl90b19kaWN0KGJibG9iKQorCisgICAgcGtnbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKKworICAgIGRlZmF1bHR2YWxzID0ge30KKyAgICBkZWZhdWx0dmFsc1snUEtHJ10gPSBwa2duYW1lCisgICAgZGVmYXVsdHZhbHNbJ1BLR0UnXSA9ICcwJworCisgICAgY2hhbmdlcyA9IFtdCisgICAga2V5cyA9IGxpc3Qoc2V0KGFkaWN0LmtleXMoKSkgfCBzZXQoYmRpY3Qua2V5cygpKSB8IHNldChkZWZhdWx0dmFsX21hcC5rZXlzKCkpKQorICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgYXN0ciA9IGFkaWN0LmdldChrZXksICcnKQorICAgICAgICBic3RyID0gYmRpY3QuZ2V0KGtleSwgJycpCisgICAgICAgIGlmIGtleSBpbiB2ZXJfbW9uaXRvcl9maWVsZHM6CisgICAgICAgICAgICBtb25pdG9yZWQgPSByZXBvcnRfdmVyIG9yIGFzdHIgb3IgYnN0cgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9uaXRvcmVkID0ga2V5IGluIG1vbml0b3JfZmllbGRzCisgICAgICAgIG1hcHBlZF9rZXkgPSBkZWZhdWx0dmFsX21hcC5nZXQoa2V5LCAnJykKKyAgICAgICAgaWYgbWFwcGVkX2tleToKKyAgICAgICAgICAgIGlmIG5vdCBhc3RyOgorICAgICAgICAgICAgICAgIGFzdHIgPSAnJXMgW2RlZmF1bHRdJyAlIGFkaWN0LmdldChtYXBwZWRfa2V5LCBkZWZhdWx0dmFscy5nZXQoa2V5LCAnJykpCisgICAgICAgICAgICBpZiBub3QgYnN0cjoKKyAgICAgICAgICAgICAgICBic3RyID0gJyVzIFtkZWZhdWx0XScgJSBiZGljdC5nZXQobWFwcGVkX2tleSwgZGVmYXVsdHZhbHMuZ2V0KGtleSwgJycpKQorCisgICAgICAgIGlmIGFzdHIgIT0gYnN0cjoKKyAgICAgICAgICAgIGlmIChub3QgcmVwb3J0X2FsbCkgYW5kIGtleSBpbiBudW1lcmljX2ZpZWxkczoKKyAgICAgICAgICAgICAgICBhdmFsID0gaW50KGFzdHIgb3IgMCkKKyAgICAgICAgICAgICAgICBidmFsID0gaW50KGJzdHIgb3IgMCkKKyAgICAgICAgICAgICAgICBpZiBhdmFsICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAoKGJ2YWwgLSBhdmFsKSAvIGZsb2F0KGF2YWwpKSAqIDEwMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRjaGcgPSAxMDAKKyAgICAgICAgICAgICAgICBpZiBhYnMocGVyY2VudGNoZykgPCBtb25pdG9yX251bWVyaWNfdGhyZXNob2xkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiAobm90IHJlcG9ydF9hbGwpIGFuZCBrZXkgaW4gbGlzdF9maWVsZHM6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJGSUxFTElTVCIgYW5kIHBhdGguZW5kc3dpdGgoIi1kYmciKSBhbmQgYnN0ci5zdHJpcCgpICE9ICcnOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBbJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnXToKKyAgICAgICAgICAgICAgICAgICAgKGRlcHZlcmEsIGRlcHZlcmIpID0gY29tcGFyZV9wa2dfbGlzdHMoYXN0ciwgYnN0cikKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwdmVyYSA9PSBkZXB2ZXJiOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBhbGlzdCA9IGFzdHIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGFsaXN0LnNvcnQoKQorICAgICAgICAgICAgICAgIGJsaXN0ID0gYnN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgYmxpc3Quc29ydCgpCisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZW1vdmFsIG9mIHNlbGYtZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAgICAgaWYgcGtnbmFtZSBpbiBhbGlzdCBhbmQgbm90IHBrZ25hbWUgaW4gYmxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGFsaXN0LnJlbW92ZShwa2duYW1lKQorICAgICAgICAgICAgICAgIGlmICcgJy5qb2luKGFsaXN0KSA9PSAnICcuam9pbihibGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBrZXksIGFzdHIsIGJzdHIsIG1vbml0b3JlZCkKKyAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICByZXR1cm4gY2hhbmdlcworCisKK2RlZiBwcm9jZXNzX2NoYW5nZXMocmVwb3BhdGgsIHJldmlzaW9uMSwgcmV2aXNpb24yPSdIRUFEJywgcmVwb3J0X2FsbD1GYWxzZSwgcmVwb3J0X3Zlcj1GYWxzZSk6CisgICAgcmVwbyA9IGdpdC5SZXBvKHJlcG9wYXRoKQorICAgIGFzc2VydCByZXBvLmJhcmUgPT0gRmFsc2UKKyAgICBjb21taXQgPSByZXBvLmNvbW1pdChyZXZpc2lvbjEpCisgICAgZGlmZiA9IGNvbW1pdC5kaWZmKHJldmlzaW9uMikKKworICAgIGNoYW5nZXMgPSBbXQorICAgIGZvciBkIGluIGRpZmYuaXRlcl9jaGFuZ2VfdHlwZSgnTScpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdsYXRlc3QnOgorICAgICAgICAgICAgICAgIGNoYW5nZXMuZXh0ZW5kKGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBkLmFfYmxvYiwgZC5iX2Jsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgIGVsaWYgcGF0aC5zdGFydHN3aXRoKCdpbWFnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIGluIGltZ19tb25pdG9yX2ZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdmaWxlcy1pbi1pbWFnZS50eHQnOgorICAgICAgICAgICAgICAgICAgICBhbGluZXMgPSBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGJsaW5lcyA9IGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWNoYW5nZXMgPSBjb21wYXJlX2ZpbGVfbGlzdHMoYWxpbmVzLGJsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIE5vbmUsIE5vbmUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGcuZmlsZWNoYW5nZXMgPSBmaWxlY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCc6CisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxpbmVzID0gZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcyA9IGNvbXBhcmVfbGlzdHMoYWxpbmVzLGJsaW5lcykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIE5vbmUsIE5vbmUsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGcuZmlsZWNoYW5nZXMgPSBmaWxlY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUgPT0gJ2ltYWdlLWluZm8udHh0JzoKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmV4dGVuZChjb21wYXJlX2RpY3RfYmxvYnMocGF0aCwgZC5hX2Jsb2IsIGQuYl9ibG9iLCByZXBvcnRfYWxsLCByZXBvcnRfdmVyKSkKKyAgICAgICAgICAgIGVsaWYgJy9pbWFnZS1maWxlcy8nIGluIHBhdGg6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExvb2sgZm9yIGFkZGVkIHByZWluc3QvcG9zdGluc3QvcHJlcm0vcG9zdHJtCisgICAgIyAod2l0aG91dCByZXBvcnRpbmcgbmV3bHkgYWRkZWQgcmVjaXBlcykKKyAgICBhZGRlZHBrZ3MgPSBbXQorICAgIGFkZGVkY2hhbmdlcyA9IFtdCisgICAgZm9yIGQgaW4gZGlmZi5pdGVyX2NoYW5nZV90eXBlKCdBJyk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZC5iX2Jsb2IucGF0aCkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmJfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2xhdGVzdCc6CisgICAgICAgICAgICAgICAgYWRkZWRwa2dzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lWzc6XSwgJycsIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBhZGRlZGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICBmb3IgY2hnIGluIGFkZGVkY2hhbmdlczoKKyAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgcGtnIGluIGFkZGVkcGtnczoKKyAgICAgICAgICAgIGlmIGNoZy5wYXRoLnN0YXJ0c3dpdGgocGtnKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExvb2sgZm9yIGNsZWFyZWQgcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0KKyAgICBmb3IgZCBpbiBkaWZmLml0ZXJfY2hhbmdlX3R5cGUoJ0QnKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSAhPSAnbGF0ZXN0JyBhbmQgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbGF0ZXN0LicpOgorICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZVs3Ol0sIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgJycsIFRydWUpCisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorCisgICAgIyBMaW5rIHJlbGF0ZWQgY2hhbmdlcworICAgIGZvciBjaGcgaW4gY2hhbmdlczoKKyAgICAgICAgaWYgY2hnLm1vbml0b3JlZDoKKyAgICAgICAgICAgIGZvciBjaGcyIGluIGNoYW5nZXM6CisgICAgICAgICAgICAgICAgIyAoQ2hlY2sgZGlybmFtZSBpbiB0aGUgY2FzZSBvZiBmaWVsZHMgZnJvbSByZWNpcGUgaW5mbyBmaWxlcykKKyAgICAgICAgICAgICAgICBpZiBjaGcucGF0aCA9PSBjaGcyLnBhdGggb3Igb3MucGF0aC5kaXJuYW1lKGNoZy5wYXRoKSA9PSBjaGcyLnBhdGg6CisgICAgICAgICAgICAgICAgICAgIGlmIGNoZzIuZmllbGRuYW1lIGluIHJlbGF0ZWRfZmllbGRzLmdldChjaGcuZmllbGRuYW1lLCBbXSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcucmVsYXRlZC5hcHBlbmQoY2hnMikKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjaGcucGF0aCA9PSBjaGcyLnBhdGggYW5kIGNoZy5wYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpIGFuZCBjaGcyLmZpZWxkbmFtZSBpbiBbJ1BFJywgJ1BWJywgJ1BSJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjaGcucmVsYXRlZC5hcHBlbmQoY2hnMikKKworICAgIGlmIHJlcG9ydF9hbGw6CisgICAgICAgIHJldHVybiBjaGFuZ2VzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFtjaGcgZm9yIGNoZyBpbiBjaGFuZ2VzIGlmIGNoZy5tb25pdG9yZWRdCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5IGIvbWV0YS9saWIvb2UvY2FjaGVkcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQwY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvY2FjaGVkcGF0aC5weQpAQCAtMCwwICsxLDIzMyBAQAorIworIyBCYXNlZCBvbiBzdGFuZGFyZCBweXRob24gbGlicmFyeSBmdW5jdGlvbnMgYnV0IGF2b2lkCisjIHJlcGVhdGVkIHN0YXQgY2FsbHMuIEl0cyBhc3N1bWVkIHRoZSBmaWxlcyB3aWxsIG5vdCBjaGFuZ2UgZnJvbSB1bmRlciB1cworIyBzbyB3ZSBjYW4gY2FjaGUgc3RhdCBjYWxscy4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzdGF0IGFzIHN0YXRtb2QKKworY2xhc3MgQ2FjaGVkUGF0aChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdGF0Y2FjaGUgPSB7fQorICAgICAgICBzZWxmLmxzdGF0Y2FjaGUgPSB7fQorICAgICAgICBzZWxmLm5vcm1wYXRoY2FjaGUgPSB7fQorICAgICAgICByZXR1cm4KKworICAgIGRlZiB1cGRhdGVjYWNoZShzZWxmLCB4KToKKyAgICAgICAgeCA9IHNlbGYubm9ybXBhdGgoeCkKKyAgICAgICAgaWYgeCBpbiBzZWxmLnN0YXRjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLnN0YXRjYWNoZVt4XQorICAgICAgICBpZiB4IGluIHNlbGYubHN0YXRjYWNoZToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxzdGF0Y2FjaGVbeF0KKworICAgIGRlZiBub3JtcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLm5vcm1wYXRoY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ub3JtcGF0aGNhY2hlW3BhdGhdCisgICAgICAgIG5ld3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIHNlbGYubm9ybXBhdGhjYWNoZVtwYXRoXSA9IG5ld3BhdGgKKyAgICAgICAgcmV0dXJuIG5ld3BhdGgKKworICAgIGRlZiBfY2FsbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5zdGF0Y2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0Y2FjaGVbcGF0aF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IHN0CisgICAgICAgICAgICByZXR1cm4gc3QKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIFdlIG1pZ2h0IGFzIHdlbGwgY2FsbCBsc3RhdCBhbmQgdGhlbiBvbmx5IAorICAgICMgY2FsbCBzdGF0IGFzIHdlbGwgaW4gdGhlIHN5bWJvbGljIGxpbmsgY2FzZQorICAgICMgc2luY2UgdGhpcyB0dXJucyBvdXQgdG8gYmUgbXVjaCBtb3JlIG9wdGltYWwKKyAgICAjIGluIHJlYWwgd29ybGQgdXNhZ2Ugb2YgdGhpcyBjYWNoZQorICAgIGRlZiBjYWxsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCA9IHNlbGYubm9ybXBhdGgocGF0aCkKKyAgICAgICAgc2VsZi5jYWxsbHN0YXQocGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGNhY2hlW3BhdGhdCisKKyAgICBkZWYgY2FsbGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gc2VsZi5ub3JtcGF0aChwYXRoKQorICAgICAgICBpZiBwYXRoIGluIHNlbGYubHN0YXRjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0KKyAgICAgICAgI2JiLmVycm9yKCJMU3RhdHBhdGg6IiArIHBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxzdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgICAgICAgICBzZWxmLmxzdGF0Y2FjaGVbcGF0aF0gPSBsc3QKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0bW9kLlNfSVNMTksobHN0LnN0X21vZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gbHN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxzdGF0KHBhdGgpCisgICAgICAgICAgICByZXR1cm4gbHN0CisgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubHN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgVGhpcyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzLCBzbyBib3RoIGlzbGluaygpIGFuZCBpc2RpcigpIGNhbiBiZSB0cnVlCisgICAgIyBmb3IgdGhlIHNhbWUgcGF0aCBvbm8gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltbGlua3MKKyAgICBkZWYgaXNmaWxlKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIiIiCisgICAgICAgIHN0ID0gc2VsZi5jYWxsc3RhdChwYXRoKQorICAgICAgICBpZiBub3Qgc3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRtb2QuU19JU1JFRyhzdC5zdF9tb2RlKQorCisgICAgIyBJcyBhIHBhdGggYSBkaXJlY3Rvcnk/CisgICAgIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkKKyAgICAjIGNhbiBiZSB0cnVlIGZvciB0aGUgc2FtZSBwYXRoIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHN5bWxpbmtzCisgICAgZGVmIGlzZGlyKHNlbGYsIHMpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKKyAgICAgICAgc3QgPSBzZWxmLmNhbGxzdGF0KHMpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTRElSKHN0LnN0X21vZGUpCisKKyAgICBkZWYgaXNsaW5rKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayIiIgorICAgICAgICBzdCA9IHNlbGYuY2FsbGxzdGF0KHBhdGgpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTTE5LKHN0LnN0X21vZGUpCisKKyAgICAjIERvZXMgYSBwYXRoIGV4aXN0PworICAgICMgVGhpcyBpcyBmYWxzZSBmb3IgZGFuZ2xpbmcgc3ltYm9saWMgbGlua3Mgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyAgICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgRmFsc2UgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgorICAgICAgICBpZiBzZWxmLmNhbGxzdGF0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbGV4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgorICAgICAgICBpZiBzZWxmLmNhbGxsc3RhdChwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxzdGF0KHBhdGgpCisKKyAgICBkZWYgbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxsc3RhdChwYXRoKQorCisgICAgZGVmIHdhbGsoc2VsZiwgdG9wLCB0b3Bkb3duPVRydWUsIG9uZXJyb3I9Tm9uZSwgZm9sbG93bGlua3M9RmFsc2UpOgorICAgICAgICAjIE1hdGNoZXMgb3Mud2Fsaywgbm90IG9zLnBhdGgud2FsaygpCisKKyAgICAgICAgIyBXZSBtYXkgbm90IGhhdmUgcmVhZCBwZXJtaXNzaW9uIGZvciB0b3AsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3QKKyAgICAgICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zLiAgb3MucGF0aC53YWxrCisgICAgICAgICMgYWx3YXlzIHN1cHByZXNzZWQgdGhlIGV4Y2VwdGlvbiB0aGVuLCByYXRoZXIgdGhhbiBibG93IHVwIGZvciBhCisgICAgICAgICMgbWlub3IgcmVhc29uIHdoZW4gKHNheSkgYSB0aG91c2FuZCByZWFkYWJsZSBkaXJlY3RvcmllcyBhcmUgc3RpbGwKKyAgICAgICAgIyBsZWZ0IHRvIHZpc2l0LiAgVGhhdCBsb2dpYyBpcyBjb3BpZWQgaGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHRvcCkKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkaXJzLCBub25kaXJzID0gW10sIFtdCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgc2VsZi5pc2Rpcihvcy5wYXRoLmpvaW4odG9wLCBuYW1lKSk6CisgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbm9uZGlycy5hcHBlbmQobmFtZSkKKworICAgICAgICBpZiB0b3Bkb3duOgorICAgICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCisgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICBuZXdfcGF0aCA9IG9zLnBhdGguam9pbih0b3AsIG5hbWUpCisgICAgICAgICAgICBpZiBmb2xsb3dsaW5rcyBvciBub3Qgc2VsZi5pc2xpbmsobmV3X3BhdGgpOgorICAgICAgICAgICAgICAgIGZvciB4IGluIHNlbGYud2FsayhuZXdfcGF0aCwgdG9wZG93biwgb25lcnJvciwgZm9sbG93bGlua3MpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIGlmIG5vdCB0b3Bkb3duOgorICAgICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCisKKyAgICAjIyByZWFscGF0aCgpIHJlbGF0ZWQgZnVuY3Rpb25zCisgICAgZGVmIF9faXNfcGF0aF9iZWxvdyhzZWxmLCBmaWxlLCByb290KToKKyAgICAgICAgcmV0dXJuIChmaWxlICsgb3MucGF0aC5zZXApLnN0YXJ0c3dpdGgocm9vdCkKKworICAgIGRlZiBfX3JlYWxwYXRoX3JlbChzZWxmLCBzdGFydCwgcmVsX3BhdGgsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICAgICAgIiIiQ2FsY3VsYXRlcyByZWFsIHBhdGggb2Ygc3ltbGluayAnc3RhcnQnICsgJ3JlbF9wYXRoJyBiZWxvdworICAgICAgICAncm9vdCc7IG5vIHBhcnQgb2YgJ3N0YXJ0JyBiZWxvdyAncm9vdCcgbXVzdCBjb250YWluIHN5bWxpbmtzLiAiIiIKKyAgICAgICAgaGF2ZV9kaXIgPSBUcnVlCisKKyAgICAgICAgZm9yIGQgaW4gcmVsX3BhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgaWYgbm90IGhhdmVfZGlyIGFuZCBub3QgYXNzdW1lX2RpcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVOT0VOVCwgIm5vIHN1Y2ggZGlyZWN0b3J5ICVzIiAlIHN0YXJ0KQorCisgICAgICAgICAgICBpZiBkID09IG9zLnBhdGgucGFyZGlyOiAjICcuLicKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3RhcnQpID49IGxlbihyb290KToKKyAgICAgICAgICAgICAgICAgICAgIyBkbyBub3QgZm9sbG93ICcuLicgYmVmb3JlIHJvb3QKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUoc3RhcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBlbWl0IHdhcm5pbmc/CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgKHN0YXJ0LCBoYXZlX2RpcikgPSBzZWxmLl9fcmVhbHBhdGgob3MucGF0aC5qb2luKHN0YXJ0LCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX19pc19wYXRoX2JlbG93KHN0YXJ0LCByb290KSkKKworICAgICAgICByZXR1cm4gc3RhcnQKKworICAgIGRlZiBfX3JlYWxwYXRoKHNlbGYsIGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICAgICAgd2hpbGUgc2VsZi5pc2xpbmsoZmlsZSkgYW5kIGxlbihmaWxlKSA+PSBsZW4ocm9vdCk6CisgICAgICAgICAgICBpZiBsb29wX2NudCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsIGZpbGUpCisKKyAgICAgICAgICAgIGxvb3BfY250IC09IDEKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGgubm9ybXBhdGgob3MucmVhZGxpbmsoZmlsZSkpCisgICAgCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgICAgIHRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQoc2VsZi5fX2lzX3BhdGhfYmVsb3codGRpciwgcm9vdCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRkaXIgPSByb290CisKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fcmVhbHBhdGhfcmVsKHRkaXIsIHRhcmdldCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXNfZGlyID0gc2VsZi5pc2RpcihmaWxlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpc19kaXIgPSBGYWxzZQorCisgICAgICAgIHJldHVybiAoZmlsZSwgaXNfZGlyKQorCisgICAgZGVmIHJlYWxwYXRoKHNlbGYsIGZpbGUsIHJvb3QsIHVzZV9waHlzZGlyID0gVHJ1ZSwgbG9vcF9jbnQgPSAxMDAsIGFzc3VtZV9kaXIgPSBGYWxzZSk6CisgICAgICAgICIiIiBSZXR1cm5zIHRoZSBjYW5vbmljYWwgcGF0aCBvZiAnZmlsZScgd2l0aCBhc3N1bWluZyBhCisgICAgICAgIHRvcGxldmVsICdyb290JyBkaXJlY3RvcnkuIFdoZW4gJ3VzZV9waHlzZGlyJyBpcyBzZXQsIGFsbAorICAgICAgICBwcmVjZWRpbmcgcGF0aCBjb21wb25lbnRzIG9mICdmaWxlJyB3aWxsIGJlIHJlc29sdmVkIGZpcnN0OworICAgICAgICB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCB1bmxlc3MgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoZXJlIGlzCisgICAgICAgIG5vIHN5bWxpbmsgaW4gdGhlIHBhdGguIFdoZW4gJ2Fzc3VtZV9kaXInIGlzIG5vdCBzZXQsIG1pc3NpbmcKKyAgICAgICAgcGF0aCBjb21wb25lbnRzIHdpbGwgcmFpc2UgYW4gRU5PRU5UIGVycm9yIiIiCisKKyAgICAgICAgcm9vdCA9IG9zLnBhdGgubm9ybXBhdGgocm9vdCkKKyAgICAgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZSkKKworICAgICAgICBpZiBub3Qgcm9vdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICAjIGxldHRpbmcgcm9vdCBlbmQgd2l0aCAnLycgbWFrZXMgc29tZSB0aGluZ3MgZWFzaWVyCisgICAgICAgICAgICByb290ID0gcm9vdCArIG9zLnBhdGguc2VwCisKKyAgICAgICAgaWYgbm90IHNlbGYuX19pc19wYXRoX2JlbG93KGZpbGUsIHJvb3QpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5WQUwsICJmaWxlICclcycgaXMgbm90IGJlbG93IHJvb3QiICUgZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1c2VfcGh5c2RpcjoKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fX3JlYWxwYXRoX3JlbChyb290LCBmaWxlWyhsZW4ocm9vdCkgLSAxKTpdLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcilbMF0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUxPT1A6CisgICAgICAgICAgICAgICAgIyBtYWtlIEVMT09QIG1vcmUgcmVhZGFibGU7IHdpdGhvdXQgY2F0Y2hpbmcgaXQsIHRoZXJlIHdpbGwKKyAgICAgICAgICAgICAgICAjIGJlIHByaW50ZWQgYSBiYWNrdHJhY2Ugd2l0aCAxMDBzIG9mIE9TRXJyb3IgZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICMgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG11Y2ggcmVjdXJzaW9ucyB3aGlsZSByZXNvbHZpbmcgJyVzJzsgbG9vcCBpbiAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgZS5zdHJlcnJvcikpCisKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5IGIvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwN2VjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2NsYXNzZXh0ZW5kLnB5CkBAIC0wLDAgKzEsMTIwIEBACitjbGFzcyBDbGFzc0V4dGVuZGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dG5hbWUsIGQpOgorICAgICAgICBzZWxmLmV4dG5hbWUgPSBleHRuYW1lCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcgPSBbXQorCisgICAgZGVmIGV4dGVuZF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImtlcm5lbC0iKSBvciBuYW1lID09ICJ2aXJ0dWFsL2tlcm5lbCI6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInJ0bGQiKToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoIi1jcm9zc3NkayIpOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiLSIgKyBzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgiLSIgKyBzZWxmLmV4dG5hbWUsICIiKQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInZpcnR1YWwvIik6CisgICAgICAgICAgICBzdWJzID0gbmFtZS5zcGxpdCgiLyIsIDEpWzFdCisgICAgICAgICAgICBpZiBub3Qgc3Vicy5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ2aXJ0dWFsLyIgKyBzZWxmLmV4dG5hbWUgKyAiLSIgKyBzdWJzCisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRuYW1lICsgIi0iICsgbmFtZQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgZGVmIG1hcF92YXJpYWJsZShzZWxmLCB2YXJuYW1lLCBzZXR2YXIgPSBUcnVlKToKKyAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBub3QgdmFyOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHZhciA9IHZhci5zcGxpdCgpCisgICAgICAgIG5ld3ZhciA9IFtdCisgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoc2VsZi5leHRlbmRfbmFtZSh2KSkKKyAgICAgICAgbmV3ZGF0YSA9ICAiICIuam9pbihuZXd2YXIpCisgICAgICAgIGlmIHNldHZhcjoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIodmFybmFtZSwgbmV3ZGF0YSkKKyAgICAgICAgcmV0dXJuIG5ld2RhdGEKKworICAgIGRlZiBtYXBfcmVnZXhwX3ZhcmlhYmxlKHNlbGYsIHZhcm5hbWUsIHNldHZhciA9IFRydWUpOgorICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YXI6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgdmFyID0gdmFyLnNwbGl0KCkKKyAgICAgICAgbmV3dmFyID0gW10KKyAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgaWYgdi5zdGFydHN3aXRoKCJeIiArIHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICAgICAgbmV3dmFyLmFwcGVuZCh2KQorICAgICAgICAgICAgZWxpZiB2LnN0YXJ0c3dpdGgoIl4iKToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKCJeIiArIHNlbGYuZXh0bmFtZSArICItIiArIHZbMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKHNlbGYuZXh0ZW5kX25hbWUodikpCisgICAgICAgIG5ld2RhdGEgPSAgIiAiLmpvaW4obmV3dmFyKQorICAgICAgICBpZiBzZXR2YXI6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKHZhcm5hbWUsIG5ld2RhdGEpCisgICAgICAgIHJldHVybiBuZXdkYXRhCisKKyAgICBkZWYgbWFwX2RlcGVuZHMoc2VsZiwgZGVwKToKKyAgICAgICAgaWYgZGVwLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItbmF0aXZlLXJ1bnRpbWUiKSkgb3IgKCduYXRpdmVzZGstJyBpbiBkZXApIG9yICgnY3Jvc3MtY2FuYWRpYW4nIGluIGRlcCkgb3IgKCctY3Jvc3NzZGstJyBpbiBkZXApOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBEbyBub3QgZXh0ZW5kIGZvciB0aGF0IGFscmVhZHkgaGF2ZSBtdWx0aWxpYiBwcmVmaXgKKyAgICAgICAgICAgIHZhciA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhcjoKKyAgICAgICAgICAgICAgICB2YXIgPSB2YXIuc3BsaXQoKQorICAgICAgICAgICAgICAgIGZvciB2IGluIHZhcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVwLnN0YXJ0c3dpdGgodik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRlbmRfbmFtZShkZXApCisKKyAgICBkZWYgbWFwX2RlcGVuZHNfdmFyaWFibGUoc2VsZiwgdmFybmFtZSwgc3VmZml4ID0gIiIpOgorICAgICAgICAjIFdlIG5lZWQgdG8gcHJlc2VydmUgRVhURU5EUEtHViBzbyBpdCBjYW4gYmUgZXhwYW5kZWQgY29ycmVjdGx5IGxhdGVyCisgICAgICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgICAgIHZhcm5hbWUgPSB2YXJuYW1lICsgIl8iICsgc3VmZml4CisgICAgICAgIG9yaWcgPSBzZWxmLmQuZ2V0VmFyKCJFWFRFTkRQS0dWIiwgRmFsc2UpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCAiRVhURU5EUEtHViIpCisgICAgICAgIGRlcHMgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCBkZXBzOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcigiRVhURU5EUEtHViIsIG9yaWcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzKQorICAgICAgICBuZXdkZXBzID0ge30KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgbmV3ZGVwc1tzZWxmLm1hcF9kZXBlbmRzKGRlcCldID0gZGVwc1tkZXBdCisKKyAgICAgICAgc2VsZi5kLnNldFZhcih2YXJuYW1lLCBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwcywgRmFsc2UpLnJlcGxhY2UoIkVYVEVORFBLR1YiLCAiJHtFWFRFTkRQS0dWfSIpKQorICAgICAgICBzZWxmLmQuc2V0VmFyKCJFWFRFTkRQS0dWIiwgb3JpZykKKworICAgIGRlZiBtYXBfcGFja2FnZXZhcnMoc2VsZik6CisgICAgICAgIGZvciBwa2cgaW4gKHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkuc3BsaXQoKSArIFsiIl0pOgorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkRFUEVORFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSUkVDT01NRU5EUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJTVUdHRVNUUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJQUk9WSURFUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJSRVBMQUNFUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJDT05GTElDVFMiLCBwa2cpCisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJQS0ciLCBwa2cpCisKKyAgICBkZWYgcmVuYW1lX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBmb3IgcGtnIGluIChzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgIHNlbGYucGtnc19tYXBwaW5nLmFwcGVuZChbcGtnLnNwbGl0KHNlbGYuZXh0bmFtZSArICItIilbMV0sIHBrZ10pCisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcuYXBwZW5kKFtwa2csIHNlbGYuZXh0ZW5kX25hbWUocGtnKV0pCisKKyAgICAgICAgc2VsZi5kLnNldFZhcigiUEFDS0FHRVMiLCAiICIuam9pbihbcm93WzFdIGZvciByb3cgaW4gc2VsZi5wa2dzX21hcHBpbmddKSkKKworICAgIGRlZiByZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoc2VsZiwgdmFyaWFibGVzKToKKyAgICAgICAgZm9yIHBrZ19tYXBwaW5nIGluIHNlbGYucGtnc19tYXBwaW5nOgorICAgICAgICAgICAgZm9yIHN1YnMgaW4gdmFyaWFibGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZC5yZW5hbWVWYXIoIiVzXyVzIiAlIChzdWJzLCBwa2dfbWFwcGluZ1swXSksICIlc18lcyIgJSAoc3VicywgcGtnX21hcHBpbmdbMV0pKQorCitjbGFzcyBOYXRpdmVzZGtDbGFzc0V4dGVuZGVyKENsYXNzRXh0ZW5kZXIpOgorICAgIGRlZiBtYXBfZGVwZW5kcyhzZWxmLCBkZXApOgorICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGRlcAorICAgICAgICBpZiBkZXAuZW5kc3dpdGgoKCItZ2NjLWluaXRpYWwiLCAiLWdjYyIsICItZysrIikpOgorICAgICAgICAgICAgcmV0dXJuIGRlcCArICItY3Jvc3NzZGsiCisgICAgICAgIGVsaWYgZGVwLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItbmF0aXZlLXJ1bnRpbWUiKSkgb3IgKCduYXRpdmVzZGstJyBpbiBkZXApIG9yICgnLWNyb3NzLScgaW4gZGVwKSBvciAoJy1jcm9zc3Nkay0nIGluIGRlcCk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRlbmRfbmFtZShkZXApCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5IGIvbWV0YS9saWIvb2UvY2xhc3N1dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE4OGZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvY2xhc3N1dGlscy5weQpAQCAtMCwwICsxLDQzIEBACitjbGFzcyBDbGFzc1JlZ2lzdHJ5KHR5cGUpOgorICAgICIiIk1haW50YWluIGEgcmVnaXN0cnkgb2YgY2xhc3NlcywgaW5kZXhlZCBieSBuYW1lLgorCitOb3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBuYW1lcyBiZSB1bmlxdWUsIGFzIGl0IHVzZXMKK2EgZGljdGlvbmFyeSB0byBob2xkIHRoZSBjbGFzc2VzIGJ5IG5hbWUuCisKK1RoZSBuYW1lIGluIHRoZSByZWdpc3RyeSBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlICduYW1lJyBhdHRyaWJ1dGUgb2YgdGhlCitjbGFzcywgYW5kIHRoZSAncHJpb3JpdHknIGF0dHJpYnV0ZSBjb250cm9scyBwcmlvcml0eS4gVGhlIHByaW9yaXRpemVkKCkKK21ldGhvZCByZXR1cm5zIHRoZSByZWdpc3RlcmVkIGNsYXNzZXMgaW4gcHJpb3JpdHkgb3JkZXIuCisKK1N1YmNsYXNzZXMgb2YgQ2xhc3NSZWdpc3RyeSBtYXkgZGVmaW5lIGFuICdpbXBsZW1lbnRlZCcgcHJvcGVydHkgdG8gZXhlcnQKK2NvbnRyb2wgb3ZlciB3aGV0aGVyIHRoZSBjbGFzcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWdpc3RyeSAoZS5nLiB0byBrZWVwCithYnN0cmFjdCBiYXNlIGNsYXNzZXMgb3V0IG9mIHRoZSByZWdpc3RyeSkuIiIiCisgICAgcHJpb3JpdHkgPSAwCisgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKKyAgICAgICAgIiIiR2l2ZSBlYWNoIENsYXNzUmVnaXN0cnkgdGhlaXIgb3duIHJlZ2lzdHJ5IiIiCisgICAgICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgICAgICBjbHMucmVnaXN0cnkgPSB7fQorICAgICAgICAgICAgdHlwZS5fX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycykKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgIHN1cGVyKENsYXNzUmVnaXN0cnksIGNscykuX19pbml0X18obmFtZSwgYmFzZXMsIGF0dHJzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgY2xzLmltcGxlbWVudGVkOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xzLm5hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgY2xzLm5hbWUgPSBuYW1lCisgICAgICAgIGNscy5yZWdpc3RyeVtjbHMubmFtZV0gPSBjbHMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwcmlvcml0aXplZCh0Y2xzKToKKyAgICAgICAgcmV0dXJuIHNvcnRlZCh0Y2xzLnJlZ2lzdHJ5LnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgdjogdi5wcmlvcml0eSwgcmV2ZXJzZT1UcnVlKQorCisgICAgZGVmIHVucmVnaXN0ZXIoY2xzKToKKyAgICAgICAgZm9yIGtleSBpbiBjbHMucmVnaXN0cnkua2V5cygpOgorICAgICAgICAgICAgaWYgY2xzLnJlZ2lzdHJ5W2tleV0gaXMgY2xzOgorICAgICAgICAgICAgICAgIGRlbCBjbHMucmVnaXN0cnlba2V5XQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weSBiL21ldGEvbGliL29lL2NvcHlfYnVpbGRzeXN0ZW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5NTc4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2NvcHlfYnVpbGRzeXN0ZW0ucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMgVGhpcyBjbGFzcyBzaG91bGQgcHJvdmlkZSBlYXN5IGFjY2VzcyB0byB0aGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlCisjIGJ1aWxkc3lzdGVtIHN1Y2ggYXMgbGF5ZXJzLCBiaXRiYWtlIGxvY2F0aW9uLCBldGMuCitpbXBvcnQgc3RhdAoraW1wb3J0IHNodXRpbAorCitkZWYgX3NtYXJ0X2NvcHkoc3JjLCBkZXN0KToKKyAgICAjIHNtYXJ0X2NvcHkgd2lsbCBjaG9vc2UgdGhlIGNvcnJlY3QgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCisgICAgIyBzb3VyY2UgaXMgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LgorICAgIG1vZGUgPSBvcy5zdGF0KHNyYykuc3RfbW9kZQorICAgIGlmIHN0YXQuU19JU0RJUihtb2RlKToKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyYywgZGVzdCwgc3ltbGlua3M9VHJ1ZSkKKyAgICBlbHNlOgorICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkZXN0KQorICAgICAgICBzaHV0aWwuY29weW1vZGUoc3JjLCBkZXN0KQorCitjbGFzcyBCdWlsZFN5c3RlbShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmxheWVyZGlycyA9IGQuZ2V0VmFyKCdCQkxBWUVSUycsIFRydWUpLnNwbGl0KCkKKworICAgIGRlZiBjb3B5X2JpdGJha2VfYW5kX2xheWVycyhzZWxmLCBkZXN0ZGlyKToKKyAgICAgICAgIyBDb3B5IGluIGFsbCBtZXRhZGF0YSBsYXllcnMgKyBiaXRiYWtlIChhcyByZXBvc2l0b3JpZXMpCisgICAgICAgIGxheWVyc19jb3BpZWQgPSBbXQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICAgICAgbGF5ZXJzID0gbGlzdChzZWxmLmxheWVyZGlycykKKworICAgICAgICBjb3JlYmFzZSA9IHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFJywgVHJ1ZSkKKyAgICAgICAgbGF5ZXJzLmFwcGVuZChjb3JlYmFzZSkKKworICAgICAgICBjb3JlYmFzZV9maWxlcyA9IHNlbGYuZC5nZXRWYXIoJ0NPUkVCQVNFX0ZJTEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBjb3JlYmFzZV9maWxlcyA9IFtjb3JlYmFzZSArICcvJyAreCBmb3IgeCBpbiBjb3JlYmFzZV9maWxlc10KKyAgICAgICAgIyBNYWtlIHN1cmUgYml0YmFrZSBnb2VzIGluCisgICAgICAgIGJpdGJha2VfZGlyID0gYmIuX19maWxlX18ucnNwbGl0KCcvJywgMylbMF0KKyAgICAgICAgY29yZWJhc2VfZmlsZXMuYXBwZW5kKGJpdGJha2VfZGlyKQorCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICBsYXllcmNvbmYgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICdjb25mJywgJ2xheWVyLmNvbmYnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJjb25mKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXJjb25mLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGYucmVhZGxpbmUoKS5zdGFydHN3aXRoKCIjICMjIyB3b3Jrc3BhY2UgbGF5ZXIgYXV0by1nZW5lcmF0ZWQgYnkgZGV2dG9vbCAjIyMiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNraXBwaW5nIGxvY2FsIHdvcmtzcGFjZSBsYXllciAlcyIgJSBsYXllcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgSWYgdGhlIGxheWVyIHdhcyBhbHJlYWR5IHVuZGVyIGNvcmViYXNlLCBsZWF2ZSBpdCB0aGVyZQorICAgICAgICAgICAgIyBzaW5jZSBsYXllcnMgc3VjaCBhcyBtZXRhIGhhdmUgaXNzdWVzIHdoZW4gbW92ZWQuCisgICAgICAgICAgICBsYXllcmRlc3RwYXRoID0gZGVzdGRpcgorICAgICAgICAgICAgaWYgY29yZWJhc2UgPT0gb3MucGF0aC5kaXJuYW1lKGxheWVyKToKKyAgICAgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUoY29yZWJhc2UpCisgICAgICAgICAgICBsYXllcmRlc3RwYXRoICs9ICcvJyArIG9zLnBhdGguYmFzZW5hbWUobGF5ZXIpCisKKyAgICAgICAgICAgIGxheWVyX3JlbGF0aXZlID0gb3MucGF0aC5yZWxwYXRoKGxheWVyZGVzdHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ZGlyKQorICAgICAgICAgICAgbGF5ZXJzX2NvcGllZC5hcHBlbmQobGF5ZXJfcmVsYXRpdmUpCisKKyAgICAgICAgICAgICMgVHJlYXQgY29yZWJhc2UgYXMgc3BlY2lhbCBzaW5jZSBpdCB0eXBpY2FsbHkgd2lsbCBjb250YWluCisgICAgICAgICAgICAjIGJ1aWxkIGRpcmVjdG9yaWVzIG9yIG90aGVyIGN1c3RvbSBpdGVtcy4KKyAgICAgICAgICAgIGlmIGNvcmViYXNlID09IGxheWVyOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsYXllcmRlc3RwYXRoKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGNvcmViYXNlX2ZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmKQorICAgICAgICAgICAgICAgICAgICBkZXN0bmFtZSA9IG9zLnBhdGguam9pbihsYXllcmRlc3RwYXRoLCBmX2Jhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICBfc21hcnRfY29weShmLCBkZXN0bmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGF5ZXJkZXN0cGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIGxheWVyICVzLCBhbHJlYWR5IGhhbmRsZWQiICUgbGF5ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX3NtYXJ0X2NvcHkobGF5ZXIsIGxheWVyZGVzdHBhdGgpCisKKyAgICAgICAgcmV0dXJuIGxheWVyc19jb3BpZWQKKworZGVmIGdlbmVyYXRlX2xvY2tlZF9zaWdzKHNpZ2ZpbGUsIGQpOgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoc2lnZmlsZSkpCisgICAgZGVwZCA9IGQuZ2V0VmFyKCdCQl9UQVNLREVQREFUQScsIFRydWUpCisgICAgdGFza3MgPSBbJyVzLiVzJyAlICh2WzJdLCB2WzFdKSBmb3IgdiBpbiBkZXBkLml0ZXJ2YWx1ZXMoKV0KKyAgICBiYi5wYXJzZS5zaWdnZW4uZHVtcF9sb2NrZWRzaWdzKHNpZ2ZpbGUsIHRhc2tzKQorCitkZWYgcHJ1bmVfbG9ja2Vkc2lncyhhbGxvd2VkX3Rhc2tzLCBleGNsdWRlZF90YXJnZXRzLCBsb2NrZWRzaWdzLCBwcnVuZWRfb3V0cHV0KToKKyAgICB3aXRoIG9wZW4obG9ja2Vkc2lncywgJ3InKSBhcyBpbmZpbGU6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUocHJ1bmVkX291dHB1dCkpCisgICAgICAgIHdpdGggb3BlbihwcnVuZWRfb3V0cHV0LCAndycpIGFzIGY6CisgICAgICAgICAgICBpbnZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGluZmlsZToKKyAgICAgICAgICAgICAgICBpZiBpbnZhbHVlOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcXFxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdHZhbFsxXSBpbiBhbGxvd2VkX3Rhc2tzIGFuZCBub3Qgc3BsaXR2YWxbMF0gaW4gZXhjbHVkZWRfdGFyZ2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnU0lHR0VOX0xPQ0tFRFNJR1MnKToKKyAgICAgICAgICAgICAgICAgICAgaW52YWx1ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorCitkZWYgY3JlYXRlX2xvY2tlZF9zc3RhdGVfY2FjaGUobG9ja2Vkc2lncywgaW5wdXRfc3N0YXRlX2NhY2hlLCBvdXRwdXRfc3N0YXRlX2NhY2hlLCBkLCBmaXhlZGxzYnN0cmluZz0iIik6CisgICAgYmIubm90ZSgnR2VuZXJhdGluZyBzc3RhdGUtY2FjaGUuLi4nKQorCisgICAgYmIucHJvY2Vzcy5ydW4oImdlbi1sb2NrZWRzaWctY2FjaGUgJXMgJXMgJXMiICUgKGxvY2tlZHNpZ3MsIGlucHV0X3NzdGF0ZV9jYWNoZSwgb3V0cHV0X3NzdGF0ZV9jYWNoZSkpCisgICAgaWYgZml4ZWRsc2JzdHJpbmc6CisgICAgICAgIG9zLnJlbmFtZShvdXRwdXRfc3N0YXRlX2NhY2hlICsgJy8nICsgZC5nZXRWYXIoJ05BVElWRUxTQlNUUklORycsIFRydWUpLAorICAgICAgICBvdXRwdXRfc3N0YXRlX2NhY2hlICsgJy8nICsgZml4ZWRsc2JzdHJpbmcpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9kYXRhLnB5IGIvbWV0YS9saWIvb2UvZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2MwZTAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvZGF0YS5weQpAQCAtMCwwICsxLDE3IEBACitpbXBvcnQgb2UubWFrZXR5cGUKKworZGVmIHR5cGVkX3ZhbHVlKGtleSwgZCk6CisgICAgIiIiQ29uc3RydWN0IGEgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgbWV0YWRhdGEgdmFyaWFibGUsIHVzaW5nIGl0cyBmbGFncworICAgIHRvIGRldGVybWluZSB0aGUgdHlwZSBhbmQgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW9uLiIiIgorICAgIHZhcl90eXBlID0gZC5nZXRWYXJGbGFnKGtleSwgJ3R5cGUnKQorICAgIGZsYWdzID0gZC5nZXRWYXJGbGFncyhrZXkpCisgICAgaWYgZmxhZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGZsYWdzID0gZGljdCgoZmxhZywgZC5leHBhbmQodmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgZm9yIGZsYWcsIHZhbHVlIGluIGZsYWdzLml0ZXJpdGVtcygpKQorICAgIGVsc2U6CisgICAgICAgIGZsYWdzID0ge30KKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9lLm1ha2V0eXBlLmNyZWF0ZShkLmdldFZhcihrZXksIFRydWUpIG9yICcnLCB2YXJfdHlwZSwgKipmbGFncykKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvciksIGV4YzoKKyAgICAgICAgYmIubXNnLmZhdGFsKCJEYXRhIiwgIiVzOiAlcyIgJSAoa2V5LCBzdHIoZXhjKSkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkgYi9tZXRhL2xpYi9vZS9kaXN0cm9fY2hlY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkNWIwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpAQCAtMCwwICsxLDM4MyBAQAorZGVmIGdldF9saW5rc19mcm9tX3VybCh1cmwpOgorICAgICJSZXR1cm4gYWxsIHRoZSBocmVmIGxpbmtzIGZvdW5kIG9uIHRoZSB3ZWIgbG9jYXRpb24iCisKKyAgICBpbXBvcnQgdXJsbGliLCBzZ21sbGliCisgICAgCisgICAgY2xhc3MgTGlua3NQYXJzZXIoc2dtbGxpYi5TR01MUGFyc2VyKToKKyAgICAgICAgZGVmIHBhcnNlKHNlbGYsIHMpOgorICAgICAgICAgICAgIlBhcnNlIHRoZSBnaXZlbiBzdHJpbmcgJ3MnLiIKKyAgICAgICAgICAgIHNlbGYuZmVlZChzKQorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJib3NlPTApOgorICAgICAgICAgICAgIkluaXRpYWxpc2UgYW4gb2JqZWN0IHBhc3NpbmcgJ3ZlcmJvc2UnIHRvIHRoZSBzdXBlcmNsYXNzLiIKKyAgICAgICAgICAgIHNnbWxsaWIuU0dNTFBhcnNlci5fX2luaXRfXyhzZWxmLCB2ZXJib3NlKQorICAgICAgICAgICAgc2VsZi5oeXBlcmxpbmtzID0gW10KKyAgICAKKyAgICAgICAgZGVmIHN0YXJ0X2Eoc2VsZiwgYXR0cmlidXRlcyk6CisgICAgICAgICAgICAiUHJvY2VzcyBhIGh5cGVybGluayBhbmQgaXRzICdhdHRyaWJ1dGVzJy4iCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJocmVmIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oeXBlcmxpbmtzLmFwcGVuZCh2YWx1ZS5zdHJpcCgnLycpKQorICAgIAorICAgICAgICBkZWYgZ2V0X2h5cGVybGlua3Moc2VsZik6CisgICAgICAgICAgICAiUmV0dXJuIHRoZSBsaXN0IG9mIGh5cGVybGlua3MuIgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaHlwZXJsaW5rcworCisgICAgc29jayA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICB3ZWJwYWdlID0gc29jay5yZWFkKCkKKyAgICBzb2NrLmNsb3NlKCkKKworICAgIGxpbmtzcGFyc2VyID0gTGlua3NQYXJzZXIoKQorICAgIGxpbmtzcGFyc2VyLnBhcnNlKHdlYnBhZ2UpCisgICAgcmV0dXJuIGxpbmtzcGFyc2VyLmdldF9oeXBlcmxpbmtzKCkKKworZGVmIGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIG51bWVyaWMgcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgorICAgIG1heD0wCisgICAgbWF4c3RyPSIiCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlbGVhc2UgPSBmbG9hdChsaW5rKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZWxlYXNlID0gMAorICAgICAgICBpZiByZWxlYXNlID4gbWF4OgorICAgICAgICAgICAgbWF4ID0gcmVsZWFzZQorICAgICAgICAgICAgbWF4c3RyID0gbGluaworICAgIHJldHVybiBtYXhzdHIKKworZGVmIGlzX3NyY19ycG0obmFtZSk6CisgICAgIkNoZWNrIGlmIHRoZSBsaW5rIGlzIHBvaW50aW5nIHRvIGEgc3JjLnJwbSBmaWxlIgorICAgIGlmIG5hbWVbLTg6XSA9PSAiLnNyYy5ycG0iOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgcGFja2FnZV9uYW1lX2Zyb21fc3JwbShzcnBtKToKKyAgICAiU3RyaXAgb3V0IHRoZSBwYWNrYWdlIG5hbWUgZnJvbSB0aGUgc3JjLnJwbSBmaWxlbmFtZSIKKyAgICBzdHJpbmdzID0gc3JwbS5zcGxpdCgnLScpCisgICAgcGFja2FnZV9uYW1lID0gc3RyaW5nc1swXQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbiAoc3RyaW5ncykgLSAxKToKKyAgICAgICAgc3RyID0gc3RyaW5nc1tpXQorICAgICAgICBpZiBub3Qgc3RyWzBdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZSArPSAnLScgKyBzdHIKKyAgICByZXR1cm4gcGFja2FnZV9uYW1lCisKK2RlZiBjbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9saXN0KToKKyAgICAiUmVtb3ZlcyBtdWx0aXBsZSBlbnRyaWVzIG9mIHBhY2thZ2VzIGFuZCBzb3J0cyB0aGUgbGlzdCIKKyAgICBzZXQgPSB7fQorICAgIG1hcChzZXQuX19zZXRpdGVtX18sIHBhY2thZ2VfbGlzdCwgW10pCisgICAgcmV0dXJuIHNldC5rZXlzKCkKKworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tZWVnb19zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBtZWVnbyBkaXN0cm8iCisKKyAgICBwYWNrYWdlX25hbWVzID0gW10KKyAgICB0cnk6CisgICAgICAgIGYgPSBvcGVuKCIvdG1wL01lZWdvLTEuMSIsICJyIikKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZXMuYXBwZW5kKGxpbmVbOi0xXSArICI6IiArICJtYWluIikgIyBBbHNvIHN0cmlwIHRoZSAnXG4nIGF0IHRoZSBlbmQKKyAgICBleGNlcHQgSU9FcnJvcjogcGFzcworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gIjEuMCIsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwodXJsLCBzZWN0aW9uKToKKyAgICAiUmV0dXJuIGEgc2VjdGlvbmVkIGxpc3Qgb2YgcGFja2FnZSBuYW1lcyBmcm9tIGEgVVJMIGxpc3QiCisKKyAgICBiYi5ub3RlKCJSZWFkaW5nICVzOiAlcyIgJSAodXJsLCBzZWN0aW9uKSkKKyAgICBsaW5rcyA9IGdldF9saW5rc19mcm9tX3VybCh1cmwpCisgICAgc3JwbXMgPSBmaWx0ZXIoaXNfc3JjX3JwbSwgbGlua3MpCisgICAgbmFtZXNfbGlzdCA9IG1hcChwYWNrYWdlX25hbWVfZnJvbV9zcnBtLCBzcnBtcykKKworICAgIG5ld19wa2dzID0gW10KKyAgICBmb3IgcGtncyBpbiBuYW1lc19saXN0OgorICAgICAgIG5ld19wa2dzLmFwcGVuZChwa2dzICsgIjoiICsgc2VjdGlvbikKKworICAgIHJldHVybiBuZXdfcGtncworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9mZWRvcmFfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgZmVkb3JhIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9hcmNoaXZlLmZlZG9yYXByb2plY3Qub3JnL3B1Yi9mZWRvcmEvbGludXgvcmVsZWFzZXMvIikKKworICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8lcy9GZWRvcmEvc291cmNlL1NSUE1TLyIgJSBsYXRlc3QsICJtYWluIikKKworIyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQuZmVkb3JhLnJlZGhhdC5jb20vcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8lcy9FdmVyeXRoaW5nL3NvdXJjZS9TUFJNUy8iICUgbGF0ZXN0LCAiZXZlcnl0aGluZyIpCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC91cGRhdGVzLyVzL1NSUE1TLyIgJSBsYXRlc3QsICJ1cGRhdGVzIikKKworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICAgICAgCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX29wZW5zdXNlX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG9wZW5zdXNlIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvc291cmNlL2Rpc3RyaWJ1dGlvbi8iKQorCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZG93bmxvYWQub3BlbnN1c2Uub3JnL3NvdXJjZS9kaXN0cmlidXRpb24vJXMvcmVwby9vc3Mvc3VzZS9zcmMvIiAlIGxhdGVzdCwgIm1haW4iKQorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvdXBkYXRlLyVzL3JwbS9zcmMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiKQorCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9tYW5kcml2YV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBtYW5kcml2YSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyIpCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vcmVsZWFzZS8iICUgbGF0ZXN0LCAibWFpbiIpCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvY29udHJpYi9yZWxlYXNlLyIgJSBsYXRlc3QsICJjb250cmliIikKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vZGlzdHJpYi1jb2ZmZWUuaXBzbC5qdXNzaWV1LmZyL3B1Yi9saW51eC9NYW5kcml2YUxpbnV4L29mZmljaWFsLyVzL1NSUE1TL21haW4vdXBkYXRlcy8iICUgbGF0ZXN0LCAidXBkYXRlcyIpCisKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBmaW5kX2xhdGVzdF9kZWJpYW5fcmVsZWFzZSh1cmwpOgorICAgICJGaW5kIHRoZSBsYXRlc3QgbGlzdGVkIGRlYmlhbiByZWxlYXNlIG9uIHRoZSBnaXZlbiB1cmwiCisKKyAgICByZWxlYXNlcyA9IFtdCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIGlmIGxpbmtbOjZdID09ICJEZWJpYW4iOgorICAgICAgICAgICAgaWYgJzsnIG5vdCBpbiBsaW5rOgorICAgICAgICAgICAgICAgIHJlbGVhc2VzLmFwcGVuZChsaW5rKQorICAgIHJlbGVhc2VzLnNvcnQoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJlbGVhc2VzLnBvcCgpWzY6XQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmV0dXJuICJfTm90Rm91bmRfIgorCitkZWYgZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgc2VjdGlvbik6CisgICAgIlJldHVybiB0aGUgbGlzdCBvZiBwYWNrYWdlLW5hbWVzIHN0b3JlZCBpbiB0aGUgZGViaWFuIHN0eWxlIFNvdXJjZXMuZ3ogZmlsZSIKKyAgICBpbXBvcnQgdXJsbGliCisgICAgc29jayA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICB0bXBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3diJywgcHJlZml4PSdvZWNvcmUuJywgc3VmZml4PScudG1wJywgZGVsZXRlPUZhbHNlKQorICAgIHRtcGZpbGVuYW1lPXRtcGZpbGUubmFtZQorICAgIHRtcGZpbGUud3JpdGUoc29jay5yZWFkKCkpCisgICAgc29jay5jbG9zZSgpCisgICAgdG1wZmlsZS5jbG9zZSgpCisgICAgaW1wb3J0IGd6aXAKKyAgICBiYi5ub3RlKCJSZWFkaW5nICVzOiAlcyIgJSAodXJsLCBzZWN0aW9uKSkKKworICAgIGYgPSBnemlwLm9wZW4odG1wZmlsZW5hbWUpCisgICAgcGFja2FnZV9uYW1lcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgaWYgbGluZVs6OV0gPT0gIlBhY2thZ2U6ICI6CisgICAgICAgICAgICBwYWNrYWdlX25hbWVzLmFwcGVuZChsaW5lWzk6LTFdICsgIjoiICsgc2VjdGlvbikgIyBBbHNvIHN0cmlwIHRoZSAnXG4nIGF0IHRoZSBlbmQKKyAgICBvcy51bmxpbmsodG1wZmlsZW5hbWUpCisKKyAgICByZXR1cm4gcGFja2FnZV9uYW1lcworCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF9kZWJpYW5fc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgZGViaWFuIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9kZWJpYW5fcmVsZWFzZSgiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy8iKQorICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm1haW4iKQorIyAgICB1cmwgPSAiaHR0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9kaXN0cy9zdGFibGUvY29udHJpYi9zb3VyY2UvU291cmNlcy5neiIgCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgImNvbnRyaWIiKQorICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS1wcm9wb3NlZC11cGRhdGVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiIAorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVwZGF0ZXMiKQorICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGZpbmRfbGF0ZXN0X3VidW50dV9yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgdWJ1bnR1IHJlbGVhc2Ugb24gdGhlIGdpdmVuIHVybCIKKyAgICB1cmwgKz0gIj9DPU07Tz1EIiAjIERlc2NlbmRpbmcgU29ydCBieSBMYXN0IE1vZGlmaWVkCisgICAgZm9yIGxpbmsgaW4gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgICAgIGlmIGxpbmtbLTg6XSA9PSAiLXVwZGF0ZXMiOgorICAgICAgICAgICAgcmV0dXJuIGxpbmtbOi04XQorICAgIHJldHVybiAiX05vdEZvdW5kXyIKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfdWJ1bnR1X3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IHVidW50dSBkaXN0cm8iCisgICAgbGF0ZXN0ID0gZmluZF9sYXRlc3RfdWJ1bnR1X3JlbGVhc2UoImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyIpCisgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9kZWJpYW5fc3R5bGVfc291cmNlX3BhY2thZ2VfbGlzdCh1cmwsICJtYWluIikKKyMgICAgdXJsID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L2Rpc3RzLyVzL211bHRpdmVyc2Uvc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm11bHRpdmVyc2UiKQorIyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvdW5pdmVyc2Uvc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVuaXZlcnNlIikKKyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMtdXBkYXRlcy9tYWluL3NvdXJjZS9Tb3VyY2VzLmd6IiAlIGxhdGVzdAorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgInVwZGF0ZXMiKQorICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGNyZWF0ZV9kaXN0cm9fcGFja2FnZXNfbGlzdChkaXN0cm9fY2hlY2tfZGlyKToKKyAgICBwa2dsc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJwYWNrYWdlX2xpc3RzIikKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpciAocGtnbHN0X2Rpcik6CisgICAgICAgIG9zLm1ha2VkaXJzKHBrZ2xzdF9kaXIpCisgICAgIyBmaXJzdCBjbGVhciBvbGQgc3R1ZmYKKyAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHBrZ2xzdF9kaXIpOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIGZpbGUpKQorIAorICAgIHBlcl9kaXN0cm9fZnVuY3Rpb25zID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiRGViaWFuIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9kZWJpYW5fc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJVYnVudHUiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX3VidW50dV9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIkZlZG9yYSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfZmVkb3JhX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiT3BlblN1U0UiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX29wZW5zdXNlX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWFuZHJpdmEiLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX21hbmRyaXZhX3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiTWVlZ28iLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX21lZWdvX3NvdXJjZV9wYWNrYWdlX2xpc3RdCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyAgICBiZWdpbiA9IGRhdGV0aW1lLm5vdygpCisgICAgZm9yIGRpc3RybyBpbiBwZXJfZGlzdHJvX2Z1bmN0aW9uczoKKyAgICAgICAgbmFtZSA9IGRpc3Ryb1swXQorICAgICAgICByZWxlYXNlLCBwYWNrYWdlX2xpc3QgPSBkaXN0cm9bMV0oKQorICAgICAgICBiYi5ub3RlKCJEaXN0cm86ICVzLCBMYXRlc3QgUmVsZWFzZTogJXMsICMgc3JjIHBhY2thZ2VzOiAlZCIgJSAobmFtZSwgcmVsZWFzZSwgbGVuKHBhY2thZ2VfbGlzdCkpKQorICAgICAgICBwYWNrYWdlX2xpc3RfZmlsZSA9IG9zLnBhdGguam9pbihwa2dsc3RfZGlyLCBuYW1lICsgIi0iICsgcmVsZWFzZSkKKyAgICAgICAgZiA9IG9wZW4ocGFja2FnZV9saXN0X2ZpbGUsICJ3K2IiKQorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgICAgIGYud3JpdGUocGtnICsgIlxuIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgZW5kID0gZGF0ZXRpbWUubm93KCkKKyAgICBkZWx0YSA9IGVuZCAtIGJlZ2luCisgICAgYmIubm90ZSgicGFja2FnZV9saXN0IGdlbmVyYXRpb3NuIHRvb2sgdGhpcyBtdWNoIHRpbWU6ICVkIHNlY29uZHMiICUgZGVsdGEuc2Vjb25kcykKKworZGVmIHVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSk6CisgICAgIiIiCisgICAgICAgIElmIGRpc3RybyBwYWNrYWdlcyBsaXN0IGRhdGEgaXMgb2xkIHRoZW4gcmVidWlsZCBpdC4KKyAgICAgICAgVGhlIG9wZXJhdGlvbnMgaGFzIHRvIGJlIHByb3RlY3RlZCBieSBhIGxvY2sgc28gdGhhdAorICAgICAgICBvbmx5IG9uZSB0aHJlYWQgcGVyZm9ybWVzIGl0IGF0IGEgdGltZS4KKyAgICAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpciAoZGlzdHJvX2NoZWNrX2Rpcik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUgKCJNYWtpbmcgbmV3IGRpcmVjdG9yeTogJXMiICUgZGlzdHJvX2NoZWNrX2RpcikKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzIChkaXN0cm9fY2hlY2tfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMnICUgKGRpc3Ryb19jaGVja19kaXIpKQorCisKKyAgICBkYXRldGltZV9maWxlID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJidWlsZF9kYXRldGltZSIpCisgICAgc2F2ZWRfZGF0ZXRpbWUgPSAiX2ludmFsaWRfIgorICAgIGltcG9ydCBmY250bAorICAgIHRyeToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRhdGV0aW1lX2ZpbGUpOgorICAgICAgICAgICAgb3BlbihkYXRldGltZV9maWxlLCAndytiJykuY2xvc2UoKSAjIHRvdWNoIHRoZSBmaWxlIHNvIHRoYXQgdGhlIG5leHQgb3BlbiB3b24ndCBmYWlsCisKKyAgICAgICAgZiA9IG9wZW4oZGF0ZXRpbWVfZmlsZSwgInIrYiIpCisgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVgpCisgICAgICAgIHNhdmVkX2RhdGV0aW1lID0gZi5yZWFkKCkKKyAgICAgICAgaWYgc2F2ZWRfZGF0ZXRpbWVbMDo4XSAhPSBkYXRldGltZVswOjhdOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlIGJ1aWxkIGRhdGV0aW1lIGRpZCBub3QgbWF0Y2g6IHNhdmVkOiVzIGN1cnJlbnQ6JXMiICUgKHNhdmVkX2RhdGV0aW1lLCBkYXRldGltZSkpCisgICAgICAgICAgICBiYi5ub3RlKCJSZWdlbmVyYXRpbmcgZGlzdHJvIHBhY2thZ2UgbGlzdHMiKQorICAgICAgICAgICAgY3JlYXRlX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGYud3JpdGUoZGF0ZXRpbWUpCisKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZC93cml0ZSB0aGlzIGZpbGU6ICVzJyAlIChkYXRldGltZV9maWxlKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmLmNsb3NlKCkKKyAKK2RlZiBjb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGQpOgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpc3Ryb19jaGVja19kaXIpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3Q6IGludmFsaWQgZGlzdHJvX2NoZWNrX2RpciBwYXNzZWQiKQorICAgICAgICAKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBwa2dsc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3Ryb19jaGVja19kaXIsICJwYWNrYWdlX2xpc3RzIikKKyAgICBtYXRjaGluZ19kaXN0cm9zID0gW10KKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcmVjaXBlX25hbWUgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGJiLm5vdGUoIkNoZWNraW5nOiAlcyIgJSBwbikKKworICAgIHRyaW1fZGljdCA9IGRpY3QoeyItbmF0aXZlIjoiLW5hdGl2ZSIsICItY3Jvc3MiOiItY3Jvc3MiLCAiLWluaXRpYWwiOiItaW5pdGlhbCJ9KQorCisgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGlmIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCJuYXRpdmVzZGstIikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzFdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgcmVjaXBlX25hbWUgPSBwbnN0cmlwcGVkWzFdCisKKyAgICBpZiBwbi5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3MiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGlmIHBuLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMF0KKworICAgIGJiLm5vdGUoIlJlY2lwZTogJXMiICUgcmVjaXBlX25hbWUpCisgICAgdG1wID0gbG9jYWxkYXRhLmdldFZhcignRElTVFJPX1BOX0FMSUFTJywgVHJ1ZSkKKworICAgIGRpc3Ryb19leGNlcHRpb25zID0gZGljdCh7Ik9FLUNvcmUiOidPRS1Db3JlJywgIk9wZW5lZEhhbmQiOidPcGVuZWRIYW5kJywgIkludGVsIjonSW50ZWwnLCAiVXBzdHJlYW0iOidVcHN0cmVhbScsICJXaW5kcml2ZXIiOidXaW5kcml2ZXInLCAiT1NQRFQiOidPU1BEVCBBcHByb3ZlZCcsICJQb2t5IjoncG9reSd9KQorCisgICAgaWYgdG1wOgorICAgICAgICBsaXN0ID0gdG1wLnNwbGl0KCcgJykKKyAgICAgICAgZm9yIHN0ciBpbiBsaXN0OgorICAgICAgICAgICAgaWYgc3RyIGFuZCBzdHIuZmluZCgiPSIpID09IC0xIGFuZCBkaXN0cm9fZXhjZXB0aW9uc1tzdHJdOgorICAgICAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKHN0cikKKworICAgIGRpc3Ryb19wbl9hbGlhc2VzID0ge30KKyAgICBpZiB0bXA6CisgICAgICAgIGxpc3QgPSB0bXAuc3BsaXQoJyAnKQorICAgICAgICBmb3Igc3RyIGluIGxpc3Q6CisgICAgICAgICAgICBpZiBzdHIuZmluZCgiPSIpICE9IC0xOgorICAgICAgICAgICAgICAgIChkaXN0LCBwbl9hbGlhcykgPSBzdHIuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgIGRpc3Ryb19wbl9hbGlhc2VzW2Rpc3Quc3RyaXAoKS5sb3dlcigpXSA9IHBuX2FsaWFzLnN0cmlwKCkKKyAKKyAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKHBrZ2xzdF9kaXIpOgorICAgICAgICAoZGlzdHJvLCBkaXN0cm9fcmVsZWFzZSkgPSBmaWxlLnNwbGl0KCItIikKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIGZpbGUpLCAicmIiKQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgKHBrZywgc2VjdGlvbikgPSBsaW5lLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGlmIGRpc3Ryby5sb3dlcigpIGluIGRpc3Ryb19wbl9hbGlhc2VzOgorICAgICAgICAgICAgICAgIHBuID0gZGlzdHJvX3BuX2FsaWFzZXNbZGlzdHJvLmxvd2VyKCldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBuID0gcmVjaXBlX25hbWUKKyAgICAgICAgICAgIGlmIHBuID09IHBrZzoKKyAgICAgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChkaXN0cm8gKyAiLSIgKyBzZWN0aW9uWzotMV0pICMgc3RyaXAgdGhlIFxuIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmLmNsb3NlKCkKKworICAgIAorICAgIGlmIHRtcCAhPSBOb25lOgorCWxpc3QgPSB0bXAuc3BsaXQoJyAnKQorCWZvciBpdGVtIGluIGxpc3Q6CisgICAgICAgICAgICBtYXRjaGluZ19kaXN0cm9zLmFwcGVuZChpdGVtKQorICAgIGJiLm5vdGUoIk1hdGNoaW5nOiAlcyIgJSBtYXRjaGluZ19kaXN0cm9zKQorICAgIHJldHVybiBtYXRjaGluZ19kaXN0cm9zCisKK2RlZiBjcmVhdGVfbG9nX2ZpbGUoZCwgbG9nbmFtZSk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIGxvZ2ZuLCBsb2dzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGxvZ25hbWUpCisgICAgbG9nZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCAiJXMuJXMlcyIgJSAobG9nZm4sIGQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpLCBsb2dzdWZmaXgpKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2dmaWxlKToKKyAgICAgICAgICAgIHNsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsIGxvZ25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzbG9nZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzbG9nZmlsZSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbCgidG91Y2ggJXMiICUgbG9nZmlsZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsobG9nZmlsZSwgc2xvZ2ZpbGUpCisgICAgICAgICAgICBkLnNldFZhcignTE9HX0ZJTEUnLCBsb2dmaWxlKQorICAgIHJldHVybiBsb2dmaWxlCisKKworZGVmIHNhdmVfZGlzdHJvX2NoZWNrX3Jlc3VsdChyZXN1bHQsIGRhdGV0aW1lLCByZXN1bHRfZmlsZSwgZCk6CisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxvZ2RpciA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICBpZiBub3QgbG9nZGlyOgorICAgICAgICBiYi5lcnJvcigiTE9HX0RJUiB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCwgY2FuJ3Qgd3JpdGUgdGhlIGRpc3Ryb19jaGVjayByZXN1bHRzIikKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobG9nZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMobG9nZGlyKQorICAgIGxpbmUgPSBwbgorICAgIGZvciBpIGluIHJlc3VsdDoKKyAgICAgICAgbGluZSA9IGxpbmUgKyAiLCIgKyBpCisgICAgZiA9IG9wZW4ocmVzdWx0X2ZpbGUsICJhIikKKyAgICBpbXBvcnQgZmNudGwKKyAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYKQorICAgIGYuc2VlaygwLCBvcy5TRUVLX0VORCkgIyBzZWVrIHRvIHRoZSBlbmQgb2YgZmlsZQorICAgIGYud3JpdGUobGluZSArICJcbiIpCisgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKKyAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2ltYWdlLnB5IGIvbWV0YS9saWIvb2UvaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2MTk1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2ltYWdlLnB5CkBAIC0wLDAgKzEsMzg2IEBACitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworCitkZWYgZ2VuZXJhdGVfaW1hZ2UoYXJnKToKKyAgICAodHlwZSwgc3ViaW1hZ2VzLCBjcmVhdGVfaW1nX2NtZCkgPSBhcmcKKworICAgIGJiLm5vdGUoIlJ1bm5pbmcgaW1hZ2UgY3JlYXRpb24gc2NyaXB0IGZvciAlczogJXMgLi4uIiAlCisgICAgICAgICAgICAodHlwZSwgY3JlYXRlX2ltZ19jbWQpKQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjcmVhdGVfaW1nX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICByZXR1cm4oIkVycm9yOiBUaGUgaW1hZ2UgY3JlYXRpb24gc2NyaXB0ICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGJiLm5vdGUoIlNjcmlwdCBvdXRwdXQ6XG4lcyIgJSBvdXRwdXQpCisKKyAgICByZXR1cm4gTm9uZQorCisKKyIiIgorVGhpcyBjbGFzcyB3aWxsIGhlbHAgY29tcHV0ZSBJTUFHRV9GU1RZUEUgZGVwZW5kZW5jaWVzIGFuZCBncm91cCB0aGVtIGluIGJhdGNoZXMKK3RoYXQgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLgorCitUaGUgbmV4dCBleGFtcGxlIGlzIGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMsIGhpZ2hseSB1bmxpa2VseSB0byBoYXBwZW4gaW4gcmVhbCBsaWZlLgorSXQncyBqdXN0IG9uZSBvZiB0aGUgdGVzdCBjYXNlcyBJIHVzZWQgdG8gdGVzdCB0aGUgYWxnb3JpdGhtOgorCitGb3I6CitJTUFHRV9GU1RZUEVTID0gImkxIGkyIGkzIGk0IGk1IgorSU1BR0VfVFlQRURFUF9pNCA9ICJpMiIKK0lNQUdFX1RZUEVERVBfaTUgPSAiaTYgaTQiCitJTUFHRV9UWVBFREVQX2k2ID0gImk3IgorSU1BR0VfVFlQRURFUF9pNyA9ICJpMiIKKworV2UgZ2V0IHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBiYXRjaGVzIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsLCBoYXZpbmcgdGhlCitkZXBlbmRlbmNpZXMgc2F0aXNmaWVkOgorCitbWydpMScsICdpMycsICdpMiddLCBbJ2k0JywgJ2k3J10sIFsnaTYnXSwgWydpNSddXQorIiIiCitjbGFzcyBJbWFnZURlcEdyYXBoKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZ3JhcGggPSBkaWN0KCkKKyAgICAgICAgc2VsZi5kZXBzX2FycmF5ID0gZGljdCgpCisKKyAgICBkZWYgX2NvbnN0cnVjdF9kZXBfZ3JhcGgoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIGdyYXBoID0gZGljdCgpCisKKyAgICAgICAgZGVmIGFkZF9ub2RlKG5vZGUpOgorICAgICAgICAgICAgYmFzZV90eXBlID0gc2VsZi5faW1hZ2VfYmFzZV90eXBlKG5vZGUpCisgICAgICAgICAgICBkZXBzID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVERVBfJyArIG5vZGUsIFRydWUpIG9yICIiKQorICAgICAgICAgICAgYmFzZV9kZXBzID0gKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1RZUEVERVBfJyArIGJhc2VfdHlwZSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBpZiBkZXBzICE9ICIiIG9yIGJhc2VfZGVwcyAhPSAiIjoKKyAgICAgICAgICAgICAgICBncmFwaFtub2RlXSA9IGRlcHMKKworICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwcy5zcGxpdCgpICsgYmFzZV9kZXBzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gZ3JhcGg6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfbm9kZShkZXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGdyYXBoW25vZGVdID0gIiIKKworICAgICAgICBmb3IgZnN0eXBlIGluIGltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICBhZGRfbm9kZShmc3R5cGUpCisKKyAgICAgICAgcmV0dXJuIGdyYXBoCisKKyAgICBkZWYgX2NsZWFuX2dyYXBoKHNlbGYpOgorICAgICAgICAjIExpdmUgYW5kIFZNREsvVkRJIGltYWdlcyB3aWxsIGJlIHByb2Nlc3NlZCB2aWEgaW5oZXJpdGluZworICAgICAgICAjIGJiY2xhc3MgYW5kIGRvZXMgbm90IGdldCBwcm9jZXNzZWQgaGVyZS4gUmVtb3ZlIHRoZW0gZnJvbSB0aGUgZnN0eXBlcworICAgICAgICAjIGdyYXBoLiBUaGVpciBkZXBlbmRlbmNpZXMgYXJlIGFscmVhZHkgYWRkZWQsIHNvIG5vIHdvcnJpZXMgaGVyZS4KKyAgICAgICAgcmVtb3ZlX2xpc3QgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRVNfTUFTS0VEJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZ3JhcGgucG9wKGl0ZW0sIE5vbmUpCisKKyAgICBkZWYgX2ltYWdlX2Jhc2VfdHlwZShzZWxmLCB0eXBlKToKKyAgICAgICAgY3R5cGVzID0gc2VsZi5kLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgaWYgdHlwZSBpbiBbInZtZGsiLCAidmRpIiwgInFjb3cyIiwgImxpdmUiLCAiaXNvIiwgImhkZGltZyJdOgorICAgICAgICAgICAgdHlwZSA9ICJleHQ0IgorICAgICAgICBiYXNldHlwZSA9IHR5cGUKKyAgICAgICAgZm9yIGN0eXBlIGluIGN0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gYmFzZXR5cGUKKworICAgIGRlZiBfY29tcHV0ZV9kZXBlbmRlbmNpZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZXR1cm5zIGRpY3Qgb2JqZWN0IG9mIG5vZGVzIHdpdGggW25vX29mX2RlcGVuZHNfb24sIG5vX29mX2RlcGVuZGVkX2J5XQorICAgICAgICBmb3IgZWFjaCBub2RlCisgICAgICAgICIiIgorICAgICAgICBkZXBzX2FycmF5ID0gZGljdCgpCisgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICBkZXBzX2FycmF5W25vZGVdID0gWzAsIDBdCisKKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGRlcHMgPSBzZWxmLmdyYXBoW25vZGVdLnNwbGl0KCkKKyAgICAgICAgICAgIGRlcHNfYXJyYXlbbm9kZV1bMF0gKz0gbGVuKGRlcHMpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZGVwc19hcnJheVtkZXBdWzFdICs9IDEKKworICAgICAgICByZXR1cm4gZGVwc19hcnJheQorCisgICAgZGVmIF9zb3J0X2dyYXBoKHNlbGYpOgorICAgICAgICBzb3J0ZWRfbGlzdCA9IFtdCisgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGlmIG5vZGUgbm90IGluIHNlbGYuZGVwc19hcnJheToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZXBlbmRzX29uID0gc2VsZi5kZXBzX2FycmF5W25vZGVdWzBdCisKKyAgICAgICAgICAgIGlmIGRlcGVuZHNfb24gPT0gMDoKKyAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQobm9kZSkKKworICAgICAgICBpZiBsZW4oZ3JvdXApID09IDAgYW5kIGxlbihzZWxmLmRlcHNfYXJyYXkpICE9IDA6CisgICAgICAgICAgICBiYi5mYXRhbCgicG9zc2libGUgZnN0eXBlIGNpcmN1bGFyIGRlcGVuZGVuY3kuLi4iKQorCisgICAgICAgIHNvcnRlZF9saXN0LmFwcGVuZChncm91cCkKKworICAgICAgICAjIHJlbW92ZSBhZGRlZCBub2RlcyBmcm9tIGRlcHNfYXJyYXkKKyAgICAgICAgZm9yIGl0ZW0gaW4gZ3JvdXA6CisgICAgICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgICAgIGlmIGl0ZW0gaW4gc2VsZi5ncmFwaFtub2RlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlcHNfYXJyYXlbbm9kZV1bMF0gLT0gMQorCisgICAgICAgICAgICBzZWxmLmRlcHNfYXJyYXkucG9wKGl0ZW0sIE5vbmUpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuZGVwc19hcnJheSk6CisgICAgICAgICAgICAjIHJlY3Vyc2l2ZSBjYWxsLCB0byBmaW5kIHRoZSBuZXh0IGdyb3VwCisgICAgICAgICAgICBzb3J0ZWRfbGlzdCArPSBzZWxmLl9zb3J0X2dyYXBoKCkKKworICAgICAgICByZXR1cm4gc29ydGVkX2xpc3QKKworICAgIGRlZiBncm91cF9mc3R5cGVzKHNlbGYsIGltYWdlX2ZzdHlwZXMpOgorICAgICAgICBzZWxmLmdyYXBoID0gc2VsZi5fY29uc3RydWN0X2RlcF9ncmFwaChpbWFnZV9mc3R5cGVzKQorCisgICAgICAgIHNlbGYuX2NsZWFuX2dyYXBoKCkKKworICAgICAgICBzZWxmLmRlcHNfYXJyYXkgPSBzZWxmLl9jb21wdXRlX2RlcGVuZGVuY2llcygpCisKKyAgICAgICAgYWxsdHlwZXMgPSBbbm9kZSBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoXQorCisgICAgICAgIHJldHVybiAoYWxsdHlwZXMsIHNlbGYuX3NvcnRfZ3JhcGgoKSkKKworCitjbGFzcyBJbWFnZShJbWFnZURlcEdyYXBoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKworICAgICAgICBzdXBlcihJbWFnZSwgc2VsZikuX19pbml0X18oZCkKKworICAgIGRlZiBfZ2V0X3Jvb3Rmc19zaXplKHNlbGYpOgorICAgICAgICAiIiJjb21wdXRlIHRoZSByb290ZnMgc2l6ZSIiIgorICAgICAgICByb290ZnNfYWxpZ25tZW50ID0gaW50KHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19BTElHTk1FTlQnLCBUcnVlKSkKKyAgICAgICAgb3ZlcmhlYWRfZmFjdG9yID0gZmxvYXQoc2VsZi5kLmdldFZhcignSU1BR0VfT1ZFUkhFQURfRkFDVE9SJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19yZXFfc2l6ZSA9IGludChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlNfU0laRScsIFRydWUpKQorICAgICAgICByb290ZnNfZXh0cmFfc3BhY2UgPSBldmFsKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRScsIFRydWUpKQorICAgICAgICByb290ZnNfbWF4c2l6ZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19NQVhTSVpFJywgVHJ1ZSkKKworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2R1JywgJy1rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKV0pCisgICAgICAgIHNpemVfa2IgPSBpbnQob3V0cHV0LnNwbGl0KClbMF0pCisgICAgICAgIGJhc2Vfc2l6ZSA9IHNpemVfa2IgKiBvdmVyaGVhZF9mYWN0b3IKKyAgICAgICAgYmFzZV9zaXplID0gKGJhc2Vfc2l6ZSwgcm9vdGZzX3JlcV9zaXplKVtiYXNlX3NpemUgPCByb290ZnNfcmVxX3NpemVdICsgXAorICAgICAgICAgICAgcm9vdGZzX2V4dHJhX3NwYWNlCisKKyAgICAgICAgaWYgYmFzZV9zaXplICE9IGludChiYXNlX3NpemUpOgorICAgICAgICAgICAgYmFzZV9zaXplID0gaW50KGJhc2Vfc2l6ZSArIDEpCisKKyAgICAgICAgYmFzZV9zaXplICs9IHJvb3Rmc19hbGlnbm1lbnQgLSAxCisgICAgICAgIGJhc2Vfc2l6ZSAtPSBiYXNlX3NpemUgJSByb290ZnNfYWxpZ25tZW50CisKKyAgICAgICAgIyBDaGVjayB0aGUgcm9vdGZzIHNpemUgYWdhaW5zdCBJTUFHRV9ST09URlNfTUFYU0laRSAoaWYgc2V0KQorICAgICAgICBpZiByb290ZnNfbWF4c2l6ZToKKyAgICAgICAgICAgIHJvb3Rmc19tYXhzaXplX2ludCA9IGludChyb290ZnNfbWF4c2l6ZSkKKyAgICAgICAgICAgIGlmIGJhc2Vfc2l6ZSA+IHJvb3Rmc19tYXhzaXplX2ludDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIHJvb3RmcyBzaXplICVkKEspIG92ZXJyaWRlcyB0aGUgbWF4IHNpemUgJWQoSykiICUgXAorICAgICAgICAgICAgICAgICAgICAoYmFzZV9zaXplLCByb290ZnNfbWF4c2l6ZV9pbnQpKQorCisgICAgICAgIHJldHVybiBiYXNlX3NpemUKKworICAgIGRlZiBfY3JlYXRlX3N5bWxpbmtzKHNlbGYsIHN1YmltYWdlcyk6CisgICAgICAgICIiImNyZWF0ZSBzeW1saW5rcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSIiIgorICAgICAgICBkZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgIGltZ19uYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpCisgICAgICAgIGxpbmtfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0xJTktfTkFNRScsIFRydWUpCisgICAgICAgIG1hbmlmZXN0X25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9NQU5JRkVTVCcsIFRydWUpCisKKyAgICAgICAgb3MuY2hkaXIoZGVwbG95X2RpcikKKworICAgICAgICBpZiBsaW5rX25hbWU6CisgICAgICAgICAgICBmb3IgdHlwZSBpbiBzdWJpbWFnZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW1nX25hbWUgKyAiLnJvb3Rmcy4iICsgdHlwZSk6CisgICAgICAgICAgICAgICAgICAgIGRzdCA9IGxpbmtfbmFtZSArICIuIiArIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgc3JjID0gaW1nX25hbWUgKyAiLnJvb3Rmcy4iICsgdHlwZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBzeW1saW5rOiAlcyAtPiAlcyIgJSAoZHN0LCBzcmMpKQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQorCisgICAgICAgICAgICBpZiBtYW5pZmVzdF9uYW1lIGlzIG5vdCBOb25lIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X25hbWUpIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmV4aXN0cyhsaW5rX25hbWUgKyAiLm1hbmlmZXN0Iik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKG1hbmlmZXN0X25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19uYW1lICsgIi5tYW5pZmVzdCIpCisKKyAgICBkZWYgX3JlbW92ZV9vbGRfc3ltbGlua3Moc2VsZik6CisgICAgICAgICIiInJlbW92ZSB0aGUgc3ltbGlua3MgdG8gb2xkIGJpbmFyaWVzIiIiCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSk6CisgICAgICAgICAgICBkZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisgICAgICAgICAgICBmb3IgaW1nIGluIG9zLmxpc3RkaXIoZGVwbG95X2Rpcik6CisgICAgICAgICAgICAgICAgaWYgaW1nLmZpbmQoc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGltZyA9IG9zLnBhdGguam9pbihkZXBsb3lfZGlyLCBpbWcpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGltZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSTV9PTERfSU1BR0UnLCBUcnVlKSA9PSAiMSIgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5yZWFscGF0aChpbWcpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5yZWFscGF0aChpbWcpKQorCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoaW1nKQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGp1c3QgZmlsdGVyIG91dCB0aGUgY29tcHJlc3NlZCBpbWFnZSB0eXBlcyBmcm9tIHRoZQorICAgIGZzdHlwZSBncm91cHMgcmV0dXJuaW5nIGEgKGZpbHRlcmVkX2ZzdHlwZV9ncm91cHMsIGNpbWFnZXMpIHR1cGxlLgorICAgICIiIgorICAgIGRlZiBfZmlsdGVyX291dF9jb21tcHJlc3NlZChzZWxmLCBmc3R5cGVfZ3JvdXBzKToKKyAgICAgICAgY3R5cGVzID0gc2VsZi5kLmdldFZhcignQ09NUFJFU1NJT05UWVBFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgY2ltYWdlcyA9IHt9CisKKyAgICAgICAgZmlsdGVyZWRfZ3JvdXBzID0gW10KKyAgICAgICAgZm9yIGdyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cCA9IFtdCisgICAgICAgICAgICBmb3IgdHlwZSBpbiBncm91cDoKKyAgICAgICAgICAgICAgICBiYXNldHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gdHlwZVs6LWxlbigiLiIgKyBjdHlwZSldCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYXNldHlwZSBub3QgaW4gZmlsdGVyZWRfZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXAuYXBwZW5kKGJhc2V0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYmFzZXR5cGUgbm90IGluIGNpbWFnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ltYWdlc1tiYXNldHlwZV0gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3R5cGUgbm90IGluIGNpbWFnZXNbYmFzZXR5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbWFnZXNbYmFzZXR5cGVdLmFwcGVuZChjdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJhc2V0eXBlIGFuZCB0eXBlIG5vdCBpbiBmaWx0ZXJlZF9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXAuYXBwZW5kKHR5cGUpCisKKyAgICAgICAgICAgIGZpbHRlcmVkX2dyb3Vwcy5hcHBlbmQoZmlsdGVyZWRfZ3JvdXApCisKKyAgICAgICAgcmV0dXJuIChmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMpCisKKyAgICBkZWYgX2dldF9pbWFnZV90eXBlcyhzZWxmKToKKyAgICAgICAgIiIicmV0dXJucyBhICh0eXBlcywgY2ltYWdlcykgdHVwbGUiIiIKKworICAgICAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcyA9IHNlbGYuZ3JvdXBfZnN0eXBlcyhzZWxmLmQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkuc3BsaXQoKSkKKworICAgICAgICBmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMgPSBzZWxmLl9maWx0ZXJfb3V0X2NvbW1wcmVzc2VkKGZzdHlwZV9ncm91cHMpCisKKyAgICAgICAgcmV0dXJuIChhbGx0eXBlcywgZmlsdGVyZWRfZ3JvdXBzLCBjaW1hZ2VzKQorCisgICAgZGVmIF93cml0ZV9zY3JpcHQoc2VsZiwgdHlwZSwgY21kcyk6CisgICAgICAgIHRlbXBkaXIgPSBzZWxmLmQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICAgICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgImNyZWF0ZV9pbWFnZS4iICsgdHlwZSkKKyAgICAgICAgcm9vdGZzX3NpemUgPSBzZWxmLl9nZXRfcm9vdGZzX3NpemUoKQorCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ2ltZ19jcmVhdGlvbl9mdW5jJywgJ1xuJy5qb2luKGNtZHMpKQorICAgICAgICBzZWxmLmQuc2V0VmFyRmxhZygnaW1nX2NyZWF0aW9uX2Z1bmMnLCAnZnVuYycsIDEpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCdpbWdfY3JlYXRpb25fZnVuYycsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoJ1JPT1RGU19TSVpFJywgc3RyKHJvb3Rmc19zaXplKSkKKworICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X25hbWUsICJ3KyIpIGFzIHNjcmlwdDoKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiJXMiICUgYmIuYnVpbGQuc2hlbGxfdHJhcF9jb2RlKCkpCisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImV4cG9ydCBST09URlNfU0laRT0lZFxuIiAlIHJvb3Rmc19zaXplKQorICAgICAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoJ2ltZ19jcmVhdGlvbl9mdW5jJywgc2NyaXB0LCBzZWxmLmQpCisgICAgICAgICAgICBzY3JpcHQud3JpdGUoImltZ19jcmVhdGlvbl9mdW5jXG4iKQorCisgICAgICAgIG9zLmNobW9kKHNjcmlwdF9uYW1lLCAwNzc1KQorCisgICAgICAgIHJldHVybiBzY3JpcHRfbmFtZQorCisgICAgZGVmIF9nZXRfaW1hZ2VjbWRzKHNlbGYpOgorICAgICAgICBvbGRfb3ZlcnJpZGVzID0gc2VsZi5kLmdldFZhcignT1ZFUlJJREVTJywgMCkKKworICAgICAgICBhbGx0eXBlcywgZnN0eXBlX2dyb3VwcywgY2ltYWdlcyA9IHNlbGYuX2dldF9pbWFnZV90eXBlcygpCisKKyAgICAgICAgaW1hZ2VfY21kX2dyb3VwcyA9IFtdCisKKyAgICAgICAgYmIubm90ZSgiVGhlIGltYWdlIGNyZWF0aW9uIGdyb3VwcyBhcmU6ICVzIiAlIHN0cihmc3R5cGVfZ3JvdXBzKSkKKyAgICAgICAgZm9yIGZzdHlwZV9ncm91cCBpbiBmc3R5cGVfZ3JvdXBzOgorICAgICAgICAgICAgaW1hZ2VfY21kcyA9IFtdCisgICAgICAgICAgICBmb3IgdHlwZSBpbiBmc3R5cGVfZ3JvdXA6CisgICAgICAgICAgICAgICAgY21kcyA9IFtdCisgICAgICAgICAgICAgICAgc3ViaW1hZ2VzID0gW10KKworICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShzZWxmLmQpCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgJyVzOiVzJyAlICh0eXBlLCBvbGRfb3ZlcnJpZGVzKSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCd0eXBlJywgdHlwZSkKKworICAgICAgICAgICAgICAgIGltYWdlX2NtZCA9IGxvY2FsZGF0YS5nZXRWYXIoIklNQUdFX0NNRCIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgaW1hZ2VfY21kOgorICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZCgiXHQiICsgaW1hZ2VfY21kKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJObyBJTUFHRV9DTUQgZGVmaW5lZCBmb3IgSU1BR0VfRlNUWVBFUyBlbnRyeSAnJXMnIC0gcG9zc2libHkgaW52YWxpZCB0eXBlIG5hbWUgb3IgbWlzc2luZyBzdXBwb3J0IGNsYXNzIiAlIHR5cGUpCisgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQobG9jYWxkYXRhLmV4cGFuZCgiXHRjZCAke0RFUExPWV9ESVJfSU1BR0V9IikpCisKKyAgICAgICAgICAgICAgICBpZiB0eXBlIGluIGNpbWFnZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjaW1hZ2VzW3R5cGVdOgorICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQoIlx0IiArIGxvY2FsZGF0YS5nZXRWYXIoIkNPTVBSRVNTX0NNRF8iICsgY3R5cGUsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZCh0eXBlICsgIi4iICsgY3R5cGUpCisKKyAgICAgICAgICAgICAgICBpZiB0eXBlIG5vdCBpbiBhbGx0eXBlczoKKyAgICAgICAgICAgICAgICAgICAgY21kcy5hcHBlbmQobG9jYWxkYXRhLmV4cGFuZCgiXHRybSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3ViaW1hZ2VzLmFwcGVuZCh0eXBlKQorCisgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl93cml0ZV9zY3JpcHQodHlwZSwgY21kcykKKworICAgICAgICAgICAgICAgIGltYWdlX2NtZHMuYXBwZW5kKCh0eXBlLCBzdWJpbWFnZXMsIHNjcmlwdF9uYW1lKSkKKworICAgICAgICAgICAgaW1hZ2VfY21kX2dyb3Vwcy5hcHBlbmQoaW1hZ2VfY21kcykKKworICAgICAgICByZXR1cm4gaW1hZ2VfY21kX2dyb3VwcworCisgICAgZGVmIF93cml0ZV93aWNfZW52KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQgYnkgd2ljCisgICAgICAgIHRvIHRtcC9zeXNyb290cy88bWFjaGluZT4vaW1nZGF0YS88aW1hZ2U+LmVudgorICAgICAgICAiIiIKKyAgICAgICAgc3RkaXIgPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgICAgICBvdXRkaXIgPSBvcy5wYXRoLmpvaW4oc3RkaXIsICdpbWdkYXRhJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dGRpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhvdXRkaXIpCisgICAgICAgIGJhc2VuYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfQkFTRU5BTUUnLCBUcnVlKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgYmFzZW5hbWUpICsgJy5lbnYnLCAndycpIGFzIGVudmY6CisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYuZC5nZXRWYXIoJ1dJQ1ZBUlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGVudmYud3JpdGUoJyVzPSIlcyJcbicgJSAodmFyLCB2YWx1ZS5zdHJpcCgpKSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIiMjIyMjIyBHZW5lcmF0ZSBpbWFnZXMgIyMjIyMjIyIpCisgICAgICAgIHByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorICAgICAgICBwb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoIklNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5fcmVtb3ZlX29sZF9zeW1saW5rcygpCisKKyAgICAgICAgaW1hZ2VfY21kX2dyb3VwcyA9IHNlbGYuX2dldF9pbWFnZWNtZHMoKQorCisgICAgICAgIHNlbGYuX3dyaXRlX3dpY19lbnYoKQorCisgICAgICAgIGZvciBpbWFnZV9jbWRzIGluIGltYWdlX2NtZF9ncm91cHM6CisgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaW1hZ2VzIGluIHBhcmFsbGVsCisgICAgICAgICAgICBucHJvYyA9IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorICAgICAgICAgICAgcG9vbCA9IGJiLnV0aWxzLm11bHRpcHJvY2Vzc2luZ3Bvb2wobnByb2MpCisgICAgICAgICAgICByZXN1bHRzID0gbGlzdChwb29sLmltYXAoZ2VuZXJhdGVfaW1hZ2UsIGltYWdlX2NtZHMpKQorICAgICAgICAgICAgcG9vbC5jbG9zZSgpCisgICAgICAgICAgICBwb29sLmpvaW4oKQorCisgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICAgICAgICAgIGZvciBpbWFnZV90eXBlLCBzdWJpbWFnZXMsIHNjcmlwdCBpbiBpbWFnZV9jbWRzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIHN5bWxpbmtzIGZvciAlcyBpbWFnZSAuLi4iICUgaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfc3ltbGlua3Moc3ViaW1hZ2VzKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHBvc3RfcHJvY2Vzc19jbWRzKQorCisKK2RlZiBjcmVhdGVfaW1hZ2UoZCk6CisgICAgSW1hZ2UoZCkuY3JlYXRlKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAiIiIKKyAgICBJbWFnZSBjcmVhdGlvbiBjYW4gYmUgY2FsbGVkIGluZGVwZW5kZW50IGZyb20gYml0YmFrZSBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICAiIiIKKyAgICBUQkQKKyAgICAiIiIKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2xpY2Vuc2UucHkgYi9tZXRhL2xpYi9vZS9saWNlbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjY2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9saWNlbnNlLnB5CkBAIC0wLDAgKzEsMjE3IEBACisjIHZpOnN0cz00OnN3PTQ6ZXQKKyIiIkNvZGUgZm9yIHBhcnNpbmcgT3BlbkVtYmVkZGVkIGxpY2Vuc2Ugc3RyaW5ncyIiIgorCitpbXBvcnQgYXN0CitpbXBvcnQgcmUKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaGNhc2UgYXMgZm5tYXRjaAorCitkZWYgbGljZW5zZV9vayhsaWNlbnNlLCBkb250X3dhbnRfbGljZW5zZXMpOgorICAgICIiIiBSZXR1cm4gRmFsc2UgaWYgTGljZW5zZSBleGlzdCBpbiBkb250X3dhbnRfbGljZW5zZXMgZWxzZSBUcnVlICIiIgorICAgIGZvciBkd2wgaW4gZG9udF93YW50X2xpY2Vuc2VzOgorICAgICAgICAjIElmIHlvdSB3YW50IHRvIGV4Y2x1ZGUgbGljZW5zZSBuYW1lZCBnZW5lcmljYWxseSAnWCcsIHdlCisgICAgICAgICMgc3VyZWx5IHdhbnQgdG8gZXhjbHVkZSAnWCsnIGFzIHdlbGwuICBJbiBjb25zZXF1ZW5jZSwgd2UKKyAgICAgICAgIyB3aWxsIGV4Y2x1ZGUgYSB0cmFpbGluZyAnKycgY2hhcmFjdGVyIGZyb20gTElDRU5TRSBpbgorICAgICAgICAjIGNhc2UgSU5DT01QQVRJQkxFX0xJQ0VOU0UgaXMgbm90IGEgJ1grJyBsaWNlbnNlLgorICAgICAgICBsaWMgPSBsaWNlbnNlCisgICAgICAgIGlmIG5vdCByZS5zZWFyY2goJ1wrJCcsIGR3bCk6CisgICAgICAgICAgICBsaWMgPSByZS5zdWIoJ1wrJywgJycsIGxpY2Vuc2UpCisgICAgICAgIGlmIGZubWF0Y2gobGljLCBkd2wpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworY2xhc3MgTGljZW5zZUVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBMaWNlbnNlU3ludGF4RXJyb3IoTGljZW5zZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGljZW5zZXN0ciwgZXhjKToKKyAgICAgICAgc2VsZi5saWNlbnNlc3RyID0gbGljZW5zZXN0cgorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBMaWNlbnNlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImVycm9yIGluICclcyc6ICVzIiAlIChzZWxmLmxpY2Vuc2VzdHIsIHNlbGYuZXhjKQorCitjbGFzcyBJbnZhbGlkTGljZW5zZShMaWNlbnNlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaWNlbnNlKToKKyAgICAgICAgc2VsZi5saWNlbnNlID0gbGljZW5zZQorICAgICAgICBMaWNlbnNlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImludmFsaWQgY2hhcmFjdGVycyBpbiBsaWNlbnNlICclcyciICUgc2VsZi5saWNlbnNlCisKK2xpY2Vuc2Vfb3BlcmF0b3JfY2hhcnMgPSAnJnwoKSAnCitsaWNlbnNlX29wZXJhdG9yID0gcmUuY29tcGlsZSgnKFsnICsgbGljZW5zZV9vcGVyYXRvcl9jaGFycyArICddKScpCitsaWNlbnNlX3BhdHRlcm4gPSByZS5jb21waWxlKCdbYS16QS1aMC05LitfXC1dKyQnKQorCitjbGFzcyBMaWNlbnNlVmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgICIiIkdldCBlbGVtZW50cyBiYXNlZCBvbiBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisgICAgZGVmIGdldF9lbGVtZW50cyhzZWxmLCBsaWNlbnNlc3RyKToKKyAgICAgICAgbmV3X2VsZW1lbnRzID0gW10KKyAgICAgICAgZWxlbWVudHMgPSBmaWx0ZXIobGFtYmRhIHg6IHguc3RyaXAoKSwgbGljZW5zZV9vcGVyYXRvci5zcGxpdChsaWNlbnNlc3RyKSkKKyAgICAgICAgZm9yIHBvcywgZWxlbWVudCBpbiBlbnVtZXJhdGUoZWxlbWVudHMpOgorICAgICAgICAgICAgaWYgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIGlmIHBvcyA+IDAgYW5kIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50c1twb3MtMV0pOgorICAgICAgICAgICAgICAgICAgICBuZXdfZWxlbWVudHMuYXBwZW5kKCcmJykKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gJyInICsgZWxlbWVudCArICciJworICAgICAgICAgICAgZWxpZiBub3QgbGljZW5zZV9vcGVyYXRvci5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkTGljZW5zZShlbGVtZW50KQorICAgICAgICAgICAgbmV3X2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KQorCisgICAgICAgIHJldHVybiBuZXdfZWxlbWVudHMKKworICAgICIiIlN5bnRheCB0cmVlIHZpc2l0b3Igd2hpY2ggY2FuIGFjY2VwdCBlbGVtZW50cyBwcmV2aW91c2x5IGdlbmVyYXRlZCB3aXRoCisgICAgT3BlbkVtYmVkZGVkIGxpY2Vuc2Ugc3RyaW5nIiIiCisgICAgZGVmIHZpc2l0X2VsZW1lbnRzKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgc2VsZi52aXNpdChhc3QucGFyc2UoJyAnLmpvaW4oZWxlbWVudHMpKSkKKworICAgICIiIlN5bnRheCB0cmVlIHZpc2l0b3Igd2hpY2ggY2FuIGFjY2VwdCBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisgICAgZGVmIHZpc2l0X3N0cmluZyhzZWxmLCBsaWNlbnNlc3RyKToKKyAgICAgICAgc2VsZi52aXNpdF9lbGVtZW50cyhzZWxmLmdldF9lbGVtZW50cyhsaWNlbnNlc3RyKSkKKworY2xhc3MgRmxhdHRlblZpc2l0b3IoTGljZW5zZVZpc2l0b3IpOgorICAgICIiIkZsYXR0ZW4gYSBsaWNlbnNlIHRyZWUgKHBhcnNlZCBmcm9tIGEgc3RyaW5nKSBieSBzZWxlY3Rpbmcgb25lIG9mIGVhY2gKKyAgICBzZXQgb2YgT1Igb3B0aW9ucywgaW4gdGhlIHdheSB0aGUgdXNlciBzcGVjaWZpZXMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hvb3NlX2xpY2Vuc2VzKToKKyAgICAgICAgc2VsZi5jaG9vc2VfbGljZW5zZXMgPSBjaG9vc2VfbGljZW5zZXMKKyAgICAgICAgc2VsZi5saWNlbnNlcyA9IFtdCisgICAgICAgIExpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgdmlzaXRfU3RyKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzLmFwcGVuZChub2RlLnMpCisKKyAgICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5vcCwgYXN0LkJpdE9yKToKKyAgICAgICAgICAgIGxlZnQgPSBGbGF0dGVuVmlzaXRvcihzZWxmLmNob29zZV9saWNlbnNlcykKKyAgICAgICAgICAgIGxlZnQudmlzaXQobm9kZS5sZWZ0KQorCisgICAgICAgICAgICByaWdodCA9IEZsYXR0ZW5WaXNpdG9yKHNlbGYuY2hvb3NlX2xpY2Vuc2VzKQorICAgICAgICAgICAgcmlnaHQudmlzaXQobm9kZS5yaWdodCkKKworICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxmLmNob29zZV9saWNlbnNlcyhsZWZ0LmxpY2Vuc2VzLCByaWdodC5saWNlbnNlcykKKyAgICAgICAgICAgIHNlbGYubGljZW5zZXMuZXh0ZW5kKHNlbGVjdGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5nZW5lcmljX3Zpc2l0KG5vZGUpCisKK2RlZiBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKToKKyAgICAiIiJHaXZlbiBhIGxpY2Vuc2Ugc3RyaW5nIGFuZCBjaG9vc2VfbGljZW5zZXMgZnVuY3Rpb24sIHJldHVybiBhIGZsYXQgbGlzdCBvZiBsaWNlbnNlcyIiIgorICAgIGZsYXR0ZW4gPSBGbGF0dGVuVmlzaXRvcihjaG9vc2VfbGljZW5zZXMpCisgICAgdHJ5OgorICAgICAgICBmbGF0dGVuLnZpc2l0X3N0cmluZyhsaWNlbnNlc3RyKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIExpY2Vuc2VTeW50YXhFcnJvcihsaWNlbnNlc3RyLCBleGMpCisgICAgcmV0dXJuIGZsYXR0ZW4ubGljZW5zZXMKKworZGVmIGlzX2luY2x1ZGVkKGxpY2Vuc2VzdHIsIHdoaXRlbGlzdD1Ob25lLCBibGFja2xpc3Q9Tm9uZSk6CisgICAgIiIiR2l2ZW4gYSBsaWNlbnNlIHN0cmluZyBhbmQgd2hpdGVsaXN0IGFuZCBibGFja2xpc3QsIGRldGVybWluZSBpZiB0aGUKKyAgICBsaWNlbnNlIHN0cmluZyBtYXRjaGVzIHRoZSB3aGl0ZWxpc3QgYW5kIGRvZXMgbm90IG1hdGNoIHRoZSBibGFja2xpc3QuCisKKyAgICBSZXR1cm5zIGEgdHVwbGUgaG9sZGluZyB0aGUgYm9vbGVhbiBzdGF0ZSBhbmQgYSBsaXN0IG9mIHRoZSBhcHBsaWNhYmxlCisgICAgbGljZW5zZXMgd2hpY2ggd2VyZSBleGNsdWRlZCAob3IgTm9uZSwgaWYgdGhlIHN0YXRlIGlzIFRydWUpCisgICAgIiIiCisKKyAgICBkZWYgaW5jbHVkZV9saWNlbnNlKGxpY2Vuc2UpOgorICAgICAgICByZXR1cm4gYW55KGZubWF0Y2gobGljZW5zZSwgcGF0dGVybikgZm9yIHBhdHRlcm4gaW4gd2hpdGVsaXN0KQorCisgICAgZGVmIGV4Y2x1ZGVfbGljZW5zZShsaWNlbnNlKToKKyAgICAgICAgcmV0dXJuIGFueShmbm1hdGNoKGxpY2Vuc2UsIHBhdHRlcm4pIGZvciBwYXR0ZXJuIGluIGJsYWNrbGlzdCkKKworICAgIGRlZiBjaG9vc2VfbGljZW5zZXMoYWxwaGEsIGJldGEpOgorICAgICAgICAiIiJTZWxlY3QgdGhlIG9wdGlvbiBpbiBhbiBPUiB3aGljaCBpcyB0aGUgJ2Jlc3QnIChoYXMgdGhlIG1vc3QKKyAgICAgICAgaW5jbHVkZWQgbGljZW5zZXMpLiIiIgorICAgICAgICBhbHBoYV93ZWlnaHQgPSBsZW4oZmlsdGVyKGluY2x1ZGVfbGljZW5zZSwgYWxwaGEpKQorICAgICAgICBiZXRhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBiZXRhKSkKKyAgICAgICAgaWYgYWxwaGFfd2VpZ2h0ID4gYmV0YV93ZWlnaHQ6CisgICAgICAgICAgICByZXR1cm4gYWxwaGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBiZXRhCisKKyAgICBpZiBub3Qgd2hpdGVsaXN0OgorICAgICAgICB3aGl0ZWxpc3QgPSBbJyonXQorCisgICAgaWYgbm90IGJsYWNrbGlzdDoKKyAgICAgICAgYmxhY2tsaXN0ID0gW10KKworICAgIGxpY2Vuc2VzID0gZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2VzdHIsIGNob29zZV9saWNlbnNlcykKKyAgICBleGNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBleGNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgaW5jbHVkZWQgPSBmaWx0ZXIobGFtYmRhIGxpYzogaW5jbHVkZV9saWNlbnNlKGxpYyksIGxpY2Vuc2VzKQorICAgIGlmIGV4Y2x1ZGVkOgorICAgICAgICByZXR1cm4gRmFsc2UsIGV4Y2x1ZGVkCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIFRydWUsIGluY2x1ZGVkCisKK2NsYXNzIE1hbmlmZXN0VmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiV2FsayBsaWNlbnNlIHRyZWUgKHBhcnNlZCBmcm9tIGEgc3RyaW5nKSByZW1vdmluZyB0aGUgaW5jb21wYXRpYmxlCisgICAgbGljZW5zZXMgc3BlY2lmaWVkIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbnRfd2FudF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpOgorICAgICAgICBzZWxmLl9kb250X3dhbnRfbGljZW5zZXMgPSBkb250X3dhbnRfbGljZW5zZXMKKyAgICAgICAgc2VsZi5fY2Fub25pY2FsX2xpY2Vuc2UgPSBjYW5vbmljYWxfbGljZW5zZQorICAgICAgICBzZWxmLl9kID0gZAorICAgICAgICBzZWxmLl9vcGVyYXRvcnMgPSBbXQorCisgICAgICAgIHNlbGYubGljZW5zZXMgPSBbXQorICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgPSAnJworCisgICAgICAgIExpY2Vuc2VWaXNpdG9yLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LlN0cik6CisgICAgICAgICAgICBsaWMgPSBub2RlLnMKKworICAgICAgICAgICAgaWYgbGljZW5zZV9vayhzZWxmLl9jYW5vbmljYWxfbGljZW5zZShzZWxmLl9kLCBsaWMpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kb250X3dhbnRfbGljZW5zZXMpID09IFRydWU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICBvcHMgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gc2VsZi5fb3BlcmF0b3JzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3AgPT0gJ1snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG9wID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3BzWy0xXSBpbiBbJ1snLCAnXSddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHMuYXBwZW5kKG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1stMV0gPSBvcCAKKworICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gb3BzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3AgPT0gJ1snIG9yIG9wID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gb3AKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gJyAnICsgb3AgKyAnICcKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMgPSBbXQorCisgICAgICAgICAgICAgICAgc2VsZi5saWNlbnNlc3RyICs9IGxpYworICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXMuYXBwZW5kKGxpYykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5CaXRBbmQpOgorICAgICAgICAgICAgc2VsZi5fb3BlcmF0b3JzLmFwcGVuZCgiJiIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuQml0T3IpOgorICAgICAgICAgICAgc2VsZi5fb3BlcmF0b3JzLmFwcGVuZCgifCIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuTGlzdCk6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCJbIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSAiXSIKKworICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworZGVmIG1hbmlmZXN0X2xpY2Vuc2VzKGxpY2Vuc2VzdHIsIGRvbnRfd2FudF9saWNlbnNlcywgY2Fub25pY2FsX2xpY2Vuc2UsIGQpOgorICAgICIiIkdpdmVuIGEgbGljZW5zZSBzdHJpbmcgYW5kIGRvbnRfd2FudF9saWNlbnNlcyBsaXN0LAorICAgICAgIHJldHVybiBsaWNlbnNlIHN0cmluZyBmaWx0ZXJlZCBhbmQgYSBsaXN0IG9mIGxpY2Vuc2VzIiIiCisgICAgbWFuaWZlc3QgPSBNYW5pZmVzdFZpc2l0b3IoZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCkKKworICAgIHRyeToKKyAgICAgICAgZWxlbWVudHMgPSBtYW5pZmVzdC5nZXRfZWxlbWVudHMobGljZW5zZXN0cikKKworICAgICAgICAjIFJlcGxhY2UgJygpJyB0byAnW10nIGZvciBoYW5kbGUgaW4gYXN0IGFzIExpc3QgYW5kIExvYWQgdHlwZXMuCisgICAgICAgIGVsZW1lbnRzID0gWydbJyBpZiBlID09ICcoJyBlbHNlIGUgZm9yIGUgaW4gZWxlbWVudHNdCisgICAgICAgIGVsZW1lbnRzID0gWyddJyBpZiBlID09ICcpJyBlbHNlIGUgZm9yIGUgaW4gZWxlbWVudHNdCisKKyAgICAgICAgbWFuaWZlc3QudmlzaXRfZWxlbWVudHMoZWxlbWVudHMpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKworICAgICMgUmVwbGFjZSAnW10nIHRvICcoKScgZm9yIG91dHB1dCBjb3JyZWN0IGxpY2Vuc2UuCisgICAgbWFuaWZlc3QubGljZW5zZXN0ciA9IG1hbmlmZXN0LmxpY2Vuc2VzdHIucmVwbGFjZSgnWycsICcoJykucmVwbGFjZSgnXScsICcpJykKKworICAgIHJldHVybiAobWFuaWZlc3QubGljZW5zZXN0ciwgbWFuaWZlc3QubGljZW5zZXMpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9sc2IucHkgYi9tZXRhL2xpYi9vZS9sc2IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmZTcxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2xzYi5weQpAQCAtMCwwICsxLDgzIEBACitkZWYgcmVsZWFzZV9kaWN0KCk6CisgICAgIiIiUmV0dXJuIHRoZSBvdXRwdXQgb2YgbHNiX3JlbGVhc2UgLWlyIGFzIGEgZGljdGlvbmFyeSIiIgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUElQRQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQsIGVyciA9IGJiLnByb2Nlc3MucnVuKFsnbHNiX3JlbGVhc2UnLCAnLWlyJ10sIHN0ZGVycj1QSVBFKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkNtZEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRhdGEgPSB7fQorICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiLWUiKTogbGluZSA9IGxpbmVbMzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI6XHQiLCAxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZWxlYXNlX2RpY3RfZmlsZSgpOgorICAgICIiIiBUcnkgdG8gZ2F0aGVyIExTQiByZWxlYXNlIGluZm9ybWF0aW9uIG1hbnVhbGx5IHdoZW4gbHNiX3JlbGVhc2UgdG9vbCBpcyB1bmF2YWlsYWJsZSAiIiIKKyAgICBkYXRhID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvbHNiLXJlbGVhc2UnKToKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL2xzYi1yZWxlYXNlJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgiPSIsIDEpCisgICAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlLnN0cmlwKCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy9yZWRoYXQtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvcmVkaGF0LXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGRpc3RybyA9IGYucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocicoLiopIHJlbGVhc2UgKC4qKSBcKCguKilcKScsIGRpc3RybykKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBtYXRjaC5ncm91cCgyKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL29zLXJlbGVhc2UnKToKKyAgICAgICAgICAgIGRhdGEgPSB7fQorICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL29zLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnTkFNRT0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9IGxpbmVbNTpdLnJzdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OX0lEPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBsaW5lWzExOl0ucnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL1N1U0UtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICBkYXRhWydESVNUUklCX0lEJ10gPSAnU1VTRSBMSU5VWCcKKyAgICAgICAgICAgIHdpdGggb3BlbignL2V0Yy9TdVNFLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnVkVSU0lPTiA9ICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9SRUxFQVNFJ10gPSBsaW5lWzEwOl0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gZGF0YQorCitkZWYgZGlzdHJvX2lkZW50aWZpZXIoYWRqdXN0X2hvb2s9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgZGlzdHJvIGlkZW50aWZpZXIgc3RyaW5nIGJhc2VkIHVwb24gbHNiX3JlbGVhc2UgLXJpLAorICAgICAgIHdpdGggb3B0aW9uYWwgYWRqdXN0bWVudCB2aWEgYSBob29rIiIiCisKKyAgICBsc2JfZGF0YSA9IHJlbGVhc2VfZGljdCgpCisgICAgaWYgbHNiX2RhdGE6CisgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IGxzYl9kYXRhWydEaXN0cmlidXRvciBJRCddLCBsc2JfZGF0YVsnUmVsZWFzZSddCisgICAgZWxzZToKKyAgICAgICAgbHNiX2RhdGFfZmlsZSA9IHJlbGVhc2VfZGljdF9maWxlKCkKKyAgICAgICAgaWYgbHNiX2RhdGFfZmlsZToKKyAgICAgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IGxzYl9kYXRhX2ZpbGVbJ0RJU1RSSUJfSUQnXSwgbHNiX2RhdGFfZmlsZS5nZXQoJ0RJU1RSSUJfUkVMRUFTRScsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXN0cm9faWQsIHJlbGVhc2UgPSBOb25lLCBOb25lCisKKyAgICBpZiBhZGp1c3RfaG9vazoKKyAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gYWRqdXN0X2hvb2soZGlzdHJvX2lkLCByZWxlYXNlKQorICAgIGlmIG5vdCBkaXN0cm9faWQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biIKKyAgICBpZiByZWxlYXNlOgorICAgICAgICBpZF9zdHIgPSAnezB9LXsxfScuZm9ybWF0KGRpc3Ryb19pZCwgcmVsZWFzZSkKKyAgICBlbHNlOgorICAgICAgICBpZF9zdHIgPSBkaXN0cm9faWQKKyAgICByZXR1cm4gaWRfc3RyLnJlcGxhY2UoJyAnLCctJykucmVwbGFjZSgnLycsJy0nKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkgYi9tZXRhL2xpYi9vZS9tYWtldHlwZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlmMzMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvbWFrZXR5cGUucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiT3BlbkVtYmVkZGVkIHZhcmlhYmxlIHR5cGluZyBzdXBwb3J0CisKK1R5cGVzIGFyZSBkZWZpbmVkIGluIHRoZSBtZXRhZGF0YSBieSBuYW1lLCB1c2luZyB0aGUgJ3R5cGUnIGZsYWcgb24gYQordmFyaWFibGUuICBPdGhlciBmbGFncyBtYXkgYmUgdXRpbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgdHlwZXMuICBTZWUKK3RoZSBhcmd1bWVudHMgb2YgdGhlIHR5cGUncyBmYWN0b3J5IGZvciBkZXRhaWxzLgorIiIiCisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHlwZXMKKworYXZhaWxhYmxlX3R5cGVzID0ge30KKworY2xhc3MgTWlzc2luZ0ZsYWcoVHlwZUVycm9yKToKKyAgICAiIiJBIHBhcnRpY3VsYXIgZmxhZyBpcyByZXF1aXJlZCB0byBjb25zdHJ1Y3QgdGhlIHR5cGUsIGJ1dCBoYXMgbm90IGJlZW4KKyAgICBwcm92aWRlZC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmxhZywgdHlwZSk6CisgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBUeXBlRXJyb3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlR5cGUgJyVzJyByZXF1aXJlcyBmbGFnICclcyciICUgKHNlbGYudHlwZSwgc2VsZi5mbGFnKQorCitkZWYgZmFjdG9yeSh2YXJfdHlwZSk6CisgICAgIiIiUmV0dXJuIHRoZSBmYWN0b3J5IGZvciBhIHNwZWNpZmllZCB0eXBlLiIiIgorICAgIGlmIHZhcl90eXBlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiTm8gdHlwZSBzcGVjaWZpZWQuIFZhbGlkIHR5cGVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKGF2YWlsYWJsZV90eXBlcykpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlX3R5cGVzW3Zhcl90eXBlXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbnZhbGlkIHR5cGUgJyVzJzpcbiAgVmFsaWQgdHlwZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAodmFyX3R5cGUsICcsICcuam9pbihhdmFpbGFibGVfdHlwZXMpKSkKKworZGVmIGNyZWF0ZSh2YWx1ZSwgdmFyX3R5cGUsICoqZmxhZ3MpOgorICAgICIiIkNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlLCBnaXZlbiB0aGUgc3BlY2lmaWVkIGZsYWdzIGFuZAorICAgIHN0cmluZyB2YWx1ZS4iIiIKKyAgICBvYmogPSBmYWN0b3J5KHZhcl90eXBlKQorICAgIG9iamZsYWdzID0ge30KKyAgICBmb3IgZmxhZyBpbiBvYmouZmxhZ3M6CisgICAgICAgIGlmIGZsYWcgbm90IGluIGZsYWdzOgorICAgICAgICAgICAgaWYgZmxhZyBub3QgaW4gb2JqLm9wdGZsYWdzOgorICAgICAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdGbGFnKGZsYWcsIHZhcl90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2JqZmxhZ3NbZmxhZ10gPSBmbGFnc1tmbGFnXQorCisgICAgcmV0dXJuIG9iaih2YWx1ZSwgKipvYmpmbGFncykKKworZGVmIGdldF9jYWxsYWJsZV9hcmdzKG9iaik6CisgICAgIiIiR3JhYiBhbGwgYnV0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgc3BlY2lmaWVkIGNhbGxhYmxlLCByZXR1cm5pbmcKKyAgICB0aGUgbGlzdCwgYXMgd2VsbCBhcyBhIGxpc3Qgb2Ygd2hpY2ggb2YgdGhlIGFyZ3VtZW50cyBoYXZlIGRlZmF1bHQKKyAgICB2YWx1ZXMuIiIiCisgICAgaWYgdHlwZShvYmopIGlzIHR5cGU6CisgICAgICAgIG9iaiA9IG9iai5fX2luaXRfXworCisgICAgYXJncywgdmFyYXJncywga2V5d29yZHMsIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKG9iaikKKyAgICBmbGFnbGlzdCA9IFtdCisgICAgaWYgYXJnczoKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMSBhbmQgYXJnc1swXSA9PSAnc2VsZic6CisgICAgICAgICAgICBhcmdzID0gYXJnc1sxOl0KKyAgICAgICAgZmxhZ2xpc3QuZXh0ZW5kKGFyZ3MpCisKKyAgICBvcHRpb25hbCA9IHNldCgpCisgICAgaWYgZGVmYXVsdHM6CisgICAgICAgIG9wdGlvbmFsIHw9IHNldChmbGFnbGlzdFstbGVuKGRlZmF1bHRzKTpdKQorICAgIHJldHVybiBmbGFnbGlzdCwgb3B0aW9uYWwKKworZGVmIGZhY3Rvcnlfc2V0dXAobmFtZSwgb2JqKToKKyAgICAiIiJQcmVwYXJlIGEgZmFjdG9yeSBmb3IgdXNlLiIiIgorICAgIGFyZ3MsIG9wdGlvbmFsID0gZ2V0X2NhbGxhYmxlX2FyZ3Mob2JqKQorICAgIGV4dHJhX2FyZ3MgPSBhcmdzWzE6XQorICAgIGlmIGV4dHJhX2FyZ3M6CisgICAgICAgIG9iai5mbGFncywgb3B0aW9uYWwgPSBleHRyYV9hcmdzLCBvcHRpb25hbAorICAgICAgICBvYmoub3B0ZmxhZ3MgPSBzZXQob3B0aW9uYWwpCisgICAgZWxzZToKKyAgICAgICAgb2JqLmZsYWdzID0gb2JqLm9wdGZsYWdzID0gKCkKKworICAgIGlmIG5vdCBoYXNhdHRyKG9iaiwgJ25hbWUnKToKKyAgICAgICAgb2JqLm5hbWUgPSBuYW1lCisKK2RlZiByZWdpc3RlcihuYW1lLCBmYWN0b3J5KToKKyAgICAiIiJSZWdpc3RlciBhIHR5cGUsIGdpdmVuIGl0cyBuYW1lIGFuZCBhIGZhY3RvcnkgY2FsbGFibGUuCisKKyAgICBEZXRlcm1pbmVzIHRoZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgZmxhZ3MgZnJvbSB0aGUgZmFjdG9yeSdzCisgICAgYXJndW1lbnRzLiIiIgorICAgIGZhY3Rvcnlfc2V0dXAobmFtZSwgZmFjdG9yeSkKKyAgICBhdmFpbGFibGVfdHlwZXNbZmFjdG9yeS5uYW1lXSA9IGZhY3RvcnkKKworCisjIFJlZ2lzdGVyIGFsbCBvdXIgaW5jbHVkZWQgdHlwZXMKK2ZvciBuYW1lIGluIGRpcih0eXBlcyk6CisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBvYmogPSBnZXRhdHRyKHR5cGVzLCBuYW1lKQorICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgorICAgICAgICBjb250aW51ZQorCisgICAgcmVnaXN0ZXIobmFtZSwgb2JqKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkgYi9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjgzMmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvbWFuaWZlc3QucHkKQEAgLTAsMCArMSwzNDUgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiYgorCisKK2NsYXNzIE1hbmlmZXN0KG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIFBLR19UWVBFX01VU1RfSU5TVEFMTCA9ICJtaXAiCisgICAgUEtHX1RZUEVfTVVMVElMSUIgPSAibWxwIgorICAgIFBLR19UWVBFX0xBTkdVQUdFID0gImxncCIKKyAgICBQS0dfVFlQRV9BVFRFTVBUX09OTFkgPSAiYW9wIgorCisgICAgTUFOSUZFU1RfVFlQRV9JTUFHRSA9ICJpbWFnZSIKKyAgICBNQU5JRkVTVF9UWVBFX1NES19IT1NUID0gInNka19ob3N0IgorICAgIE1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCA9ICJzZGtfdGFyZ2V0IgorCisgICAgdmFyX21hcHMgPSB7CisgICAgICAgIE1BTklGRVNUX1RZUEVfSU1BR0U6IHsKKyAgICAgICAgICAgICJQQUNLQUdFX0lOU1RBTEwiOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIjogUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICAgICAgIkxJTkdVQVNfSU5TVEFMTCI6IFBLR19UWVBFX0xBTkdVQUdFCisgICAgICAgIH0sCisgICAgICAgIE1BTklGRVNUX1RZUEVfU0RLX0hPU1Q6IHsKKyAgICAgICAgICAgICJUT09MQ0hBSU5fSE9TVF9UQVNLIjogUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiOiBQS0dfVFlQRV9BVFRFTVBUX09OTFkKKyAgICAgICAgfSwKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUOiB7CisgICAgICAgICAgICAiVE9PTENIQUlOX1RBUkdFVF9UQVNLIjogUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgIlRPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSI6IFBLR19UWVBFX0FUVEVNUFRfT05MWQorICAgICAgICB9CisgICAgfQorCisgICAgSU5TVEFMTF9PUkRFUiA9IFsKKyAgICAgICAgUEtHX1RZUEVfTEFOR1VBR0UsCisgICAgICAgIFBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICBQS0dfVFlQRV9NVUxUSUxJQgorICAgIF0KKworICAgIGluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIgPSBcCisgICAgICAgICIjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYW5kIGNvbnRhaW5zIHRoZSBwYWNrYWdlc1xuIiBcCisgICAgICAgICIjIHBhc3NlZCBvbiB0byB0aGUgcGFja2FnZSBtYW5hZ2VyIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgcm9vdGZzLlxuXG4iIFwKKyAgICAgICAgIiMgRm9ybWF0OlxuIiBcCisgICAgICAgICIjICA8cGFja2FnZV90eXBlPiw8cGFja2FnZV9uYW1lPlxuIiBcCisgICAgICAgICIjIHdoZXJlOlxuIiBcCisgICAgICAgICIjICAgPHBhY2thZ2VfdHlwZT4gY2FuIGJlOlxuIiBcCisgICAgICAgICIjICAgICAgJ21pcCcgPSBtdXN0IGluc3RhbGwgcGFja2FnZVxuIiBcCisgICAgICAgICIjICAgICAgJ2FvcCcgPSBhdHRlbXB0IG9ubHkgcGFja2FnZVxuIiBcCisgICAgICAgICIjICAgICAgJ21scCcgPSBtdWx0aWxpYiBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnbGdwJyA9IGxhbmd1YWdlIHBhY2thZ2VcblxuIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lLCBtYW5pZmVzdF90eXBlPU1BTklGRVNUX1RZUEVfSU1BR0UpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYubWFuaWZlc3RfdHlwZSA9IG1hbmlmZXN0X3R5cGUKKworICAgICAgICBpZiBtYW5pZmVzdF9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0X3R5cGUgIT0gc2VsZi5NQU5JRkVTVF9UWVBFX0lNQUdFOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gc2VsZi5kLmdldFZhcignU0RLX0RJUicsIFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2RpciA9IG1hbmlmZXN0X2RpcgorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLm1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLmluaXRpYWxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19pbml0aWFsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisgICAgICAgIHNlbGYuZmluYWxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19maW5hbF9tYW5pZmVzdCIgJSBtYW5pZmVzdF90eXBlKQorICAgICAgICBzZWxmLmZ1bGxfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5tYW5pZmVzdF9kaXIsICIlc19mdWxsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisKKyAgICAgICAgIyBwYWNrYWdlcyBpbiB0aGUgZm9sbG93aW5nIHZhcnMgd2lsbCBiZSBzcGxpdCBpbiAnbXVzdCBpbnN0YWxsJyBhbmQKKyAgICAgICAgIyAnbXVsdGlsaWInCisgICAgICAgIHNlbGYudmFyc190b19zcGxpdCA9IFsiUEFDS0FHRV9JTlNUQUxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT09MQ0hBSU5fSE9TVF9UQVNLIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUT09MQ0hBSU5fVEFSR0VUX1RBU0siXQorCisgICAgIiIiCisgICAgVGhpcyBjcmVhdGVzIGEgc3RhbmRhcmQgaW5pdGlhbCBtYW5pZmVzdCBmb3IgY29yZS1pbWFnZS0obWluaW1hbHxzYXRvfHNhdG8tc2RrKS4KKyAgICBUaGlzIHdpbGwgYmUgdXNlZCBmb3IgdGVzdGluZyB1bnRpbCB0aGUgY2xhc3MgaXMgaW1wbGVtZW50ZWQgcHJvcGVybHkhCisgICAgIiIiCisgICAgZGVmIF9jcmVhdGVfZHVtbXlfaW5pdGlhbChzZWxmKToKKyAgICAgICAgaW1hZ2Vfcm9vdGZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgcGtnX2xpc3QgPSBkaWN0KCkKKyAgICAgICAgaWYgaW1hZ2Vfcm9vdGZzLmZpbmQoImNvcmUtaW1hZ2Utc2F0by1zZGsiKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLWdhbWVzIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byBwYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUtc2RrIHBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IHBhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnIHBhY2thZ2Vncm91cC1jb3JlLXF0LWRlbW9hcHBzICIgXAorICAgICAgICAgICAgICAgICJhcHQgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZSBwc3BsYXNoICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIGRwa2cga2VybmVsLWRldiIKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTEFOR1VBR0VdID0gXAorICAgICAgICAgICAgICAgICJsb2NhbGUtYmFzZS1lbi11cyBsb2NhbGUtYmFzZS1lbi1nYiIKKyAgICAgICAgZWxpZiBpbWFnZV9yb290ZnMuZmluZCgiY29yZS1pbWFnZS1zYXRvIikgPiAwOgorICAgICAgICAgICAgcGtnX2xpc3Rbc2VsZi5QS0dfVFlQRV9NVVNUX0lOU1RBTExdID0gXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIHBzcGxhc2ggYXB0IGRwa2cgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCisgICAgICAgICAgICBwa2dfbGlzdFsnbGdwJ10gPSBcCisgICAgICAgICAgICAgICAgImxvY2FsZS1iYXNlLWVuLXVzIGxvY2FsZS1iYXNlLWVuLWdiIgorICAgICAgICBlbGlmIGltYWdlX3Jvb3Rmcy5maW5kKCJjb3JlLWltYWdlLW1pbmltYWwiKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSAicnVuLXBvc3RpbnN0cyBwYWNrYWdlZ3JvdXAtY29yZS1ib290IgorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnX2xpc3Q6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dfbGlzdFtwa2dfdHlwZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUgKHBrZ190eXBlLCBwa2cpKQorCisgICAgIiIiCisgICAgVGhpcyB3aWxsIGNyZWF0ZSB0aGUgaW5pdGlhbCBtYW5pZmVzdCB3aGljaCB3aWxsIGJlIHVzZWQgYnkgUm9vdGZzIGNsYXNzIHRvCisgICAgZ2VuZXJhdGUgdGhlIHJvb3RmcworICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhpcyBjcmVhdGVzIHRoZSBtYW5pZmVzdCBhZnRlciBldmVyeXRoaW5nIGhhcyBiZWVuIGluc3RhbGxlZC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgdGhlIG1hbmlmZXN0IGFmdGVyIHRoZSBwYWNrYWdlIGluIGluaXRpYWwgbWFuaWZlc3QgaGFzIGJlZW4KKyAgICBkdW1teSBpbnN0YWxsZWQuIEl0IGxpc3RzIGFsbCAqdG8gYmUgaW5zdGFsbGVkKiBwYWNrYWdlcy4gVGhlcmUgaXMgbm8gcmVhbAorICAgIGluc3RhbGxhdGlvbiwganVzdCBhIHRlc3QuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBwYXJzZXMgYW4gaW5pdGlhbCBtYW5pZmVzdCBhbmQgcmV0dXJucyBhIGRpY3Rpb25hcnkKKyAgICBvYmplY3Qgd2l0aCB0aGUgbXVzdCBpbnN0YWxsLCBhdHRlbXB0IG9ubHksIG11bHRpbGliIGFuZCBsYW5ndWFnZSBwYWNrYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgcGFyc2VfaW5pdGlhbF9tYW5pZmVzdChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGNvbW1lbnQgPSByZS5tYXRjaCgiXiMuKiIsIGxpbmUpCisgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJeKCVzfCVzfCVzfCVzKSwoLiopJCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEtHX1RZUEVfQVRURU1QVF9PTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9NVUxUSUxJQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUEtHX1RZUEVfTEFOR1VBR0UpCisgICAgICAgICAgICAgICAgcGtnID0gcmUubWF0Y2gocGF0dGVybiwgbGluZSkKKworICAgICAgICAgICAgICAgIGlmIGNvbW1lbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBwa2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ190eXBlID0gcGtnLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ19uYW1lID0gcGtnLmdyb3VwKDIpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSA9IFtwa2dfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdLmFwcGVuZChwa2dfbmFtZSkKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgJycnCisgICAgVGhpcyBmb2xsb3dpbmcgZnVuY3Rpb24gcGFyc2VzIGEgZnVsbCBtYW5pZmVzdCBhbmQgcmV0dXJuIGEgbGlzdAorICAgIG9iamVjdCB3aXRoIHBhY2thZ2VzLgorICAgICcnJworICAgIGRlZiBwYXJzZV9mdWxsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IGxpc3QoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5mdWxsX21hbmlmZXN0KToKKyAgICAgICAgICAgIGJiLm5vdGUoJ2Z1bGwgbWFuaWZlc3Qgbm90IGV4aXN0JykKKyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZ1bGxfbWFuaWZlc3QsICdyJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQocGtnLnN0cmlwKCkpCisKKyAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKworY2xhc3MgUnBtTWFuaWZlc3QoTWFuaWZlc3QpOgorICAgICIiIgorICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9iamVjdCB3aXRoIG1pcCBhbmQgbWxwIHBhY2thZ2VzLgorICAgICIiIgorICAgIGRlZiBfc3BsaXRfbXVsdGlsaWIoc2VsZiwgcGtnX2xpc3QpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dfbGlzdC5zcGxpdCgpOgorICAgICAgICAgICAgcGtnX3R5cGUgPSBzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTAorCisgICAgICAgICAgICBtbF92YXJpYW50cyA9IHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgICAgICAgICBmb3IgbWxfdmFyaWFudCBpbiBtbF92YXJpYW50czoKKyAgICAgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChtbF92YXJpYW50ICsgJy0nKToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3R5cGUgPSBzZWxmLlBLR19UWVBFX01VTFRJTElCCisKKyAgICAgICAgICAgIGlmIG5vdCBwa2dfdHlwZSBpbiBwa2dzOgorICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdID0gcGtnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdICs9ICIgIiArIHBrZworCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICBkZWYgY3JlYXRlX2luaXRpYWwoc2VsZik6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbml0aWFsX21hbmlmZXN0LCAidysiKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKHNlbGYuaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlcikKKworICAgICAgICAgICAgZm9yIHZhciBpbiBzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgaWYgdmFyIGluIHNlbGYudmFyc190b19zcGxpdDoKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRfcGtncyA9IHNlbGYuX3NwbGl0X211bHRpbGliKHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRfcGtncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3MgPSBkaWN0KHBrZ3MuaXRlbXMoKSArIHNwbGl0X3BrZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBwa2dfbGlzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3Nbc2VsZi52YXJfbWFwc1tzZWxmLm1hbmlmZXN0X3R5cGVdW3Zhcl1dID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisKKyAgICAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzOgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnc1twa2dfdHlwZV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUgKHBrZ190eXBlLCBwa2cpKQorCisgICAgZGVmIGNyZWF0ZV9maW5hbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIE9wa2dNYW5pZmVzdChNYW5pZmVzdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHdpdGggbWlwIGFuZCBtbHAgcGFja2FnZXMuCisgICAgIiIiCisgICAgZGVmIF9zcGxpdF9tdWx0aWxpYihzZWxmLCBwa2dfbGlzdCk6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMCisKKyAgICAgICAgICAgIG1sX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGZvciBtbF92YXJpYW50IGluIG1sX3ZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKG1sX3ZhcmlhbnQgKyAnLScpOgorICAgICAgICAgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVMVElMSUIKKworICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gPSBwa2cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gKz0gIiAiICsgcGtnCisKKyAgICAgICAgcmV0dXJuIHBrZ3MKKworICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgorICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1tzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXV0gPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5pbml0aWFsX21hbmlmZXN0KToKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX2luaXRpYWwoKQorCisgICAgICAgIGluaXRpYWxfbWFuaWZlc3QgPSBzZWxmLnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBsaXN0KCkKKyAgICAgICAgZm9yIHBrZ190eXBlIGluIGluaXRpYWxfbWFuaWZlc3Q6CisgICAgICAgICAgICBwa2dzX3RvX2luc3RhbGwgKz0gaW5pdGlhbF9tYW5pZmVzdFtwa2dfdHlwZV0KKyAgICAgICAgaWYgbGVuKHBrZ3NfdG9faW5zdGFsbCkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG91dHB1dCA9IHBtLmR1bW15X2luc3RhbGwocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZ1bGxfbWFuaWZlc3QsICd3KycpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgcGtnX3JlID0gcmUuY29tcGlsZSgnXkluc3RhbGxpbmcgKFteIF0rKSBbXiBdLionKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2V0KG91dHB1dC5zcGxpdCgnXG4nKSk6CisgICAgICAgICAgICAgICAgbSA9IHBrZ19yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKG0uZ3JvdXAoMSkgKyAnXG4nKQorCisgICAgICAgIHJldHVybgorCisKK2NsYXNzIERwa2dNYW5pZmVzdChNYW5pZmVzdCk6CisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbml0aWFsX21hbmlmZXN0LCAidysiKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKHNlbGYuaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlcikKKworICAgICAgICAgICAgZm9yIHZhciBpbiBzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV06CisgICAgICAgICAgICAgICAgcGtnX2xpc3QgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKCIlcywlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXSwgcGtnKSkKKworICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGVfZnVsbChzZWxmLCBwbSk6CisgICAgICAgIHBhc3MKKworCitkZWYgY3JlYXRlX21hbmlmZXN0KGQsIGZpbmFsX21hbmlmZXN0PUZhbHNlLCBtYW5pZmVzdF9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBFX0lNQUdFKToKKyAgICBtYW5pZmVzdF9tYXAgPSB7J3JwbSc6IFJwbU1hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAnaXBrJzogT3BrZ01hbmlmZXN0LAorICAgICAgICAgICAgICAgICAgICAnZGViJzogRHBrZ01hbmlmZXN0fQorCisgICAgbWFuaWZlc3QgPSBtYW5pZmVzdF9tYXBbZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKV0oZCwgbWFuaWZlc3RfZGlyLCBtYW5pZmVzdF90eXBlKQorCisgICAgaWYgZmluYWxfbWFuaWZlc3Q6CisgICAgICAgIG1hbmlmZXN0LmNyZWF0ZV9maW5hbCgpCisgICAgZWxzZToKKyAgICAgICAgbWFuaWZlc3QuY3JlYXRlX2luaXRpYWwoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvcGFja2FnZS5weSBiL21ldGEvbGliL29lL3BhY2thZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3NjQ0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhY2thZ2UucHkKQEAgLTAsMCArMSwxMjUgQEAKK2RlZiBydW5zdHJpcChhcmcpOgorICAgICMgRnVuY3Rpb24gdG8gc3RyaXAgYSBzaW5nbGUgZmlsZSwgY2FsbGVkIGZyb20gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzIGJlbG93CisgICAgIyBBIHdvcmtpbmcgJ2ZpbGUnIChvbmUgd2hpY2ggd29ya3Mgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUpCisgICAgIworICAgICMgVGhlIGVsZnR5cGUgaXMgYSBiaXQgcGF0dGVybiAoZXhwbGFpbmVkIGluIHNwbGl0X2FuZF9zdHJpcF9maWxlcykgdG8gdGVsbAorICAgICMgdXMgd2hhdCB0eXBlIG9mIGZpbGUgd2UncmUgcHJvY2Vzc2luZy4uLgorICAgICMgNCAtIGV4ZWN1dGFibGUKKyAgICAjIDggLSBzaGFyZWQgbGlicmFyeQorICAgICMgMTYgLSBrZXJuZWwgbW9kdWxlCisKKyAgICBpbXBvcnQgY29tbWFuZHMsIHN0YXQsIHN1YnByb2Nlc3MKKworICAgIChmaWxlLCBlbGZ0eXBlLCBzdHJpcCkgPSBhcmcKKworICAgIG5ld21vZGUgPSBOb25lCisgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5XX09LKSBvciBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgIG9yaWdtb2RlID0gb3Muc3RhdChmaWxlKVtzdGF0LlNUX01PREVdCisgICAgICAgIG5ld21vZGUgPSBvcmlnbW9kZSB8IHN0YXQuU19JV1JJVEUgfCBzdGF0LlNfSVJFQUQKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgbmV3bW9kZSkKKworICAgIGV4dHJhZmxhZ3MgPSAiIgorCisgICAgIyBrZXJuZWwgbW9kdWxlICAgIAorICAgIGlmIGVsZnR5cGUgJiAxNjoKKyAgICAgICAgZXh0cmFmbGFncyA9ICItLXN0cmlwLWRlYnVnIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXByZXNlcnZlLWRhdGVzIgorICAgICMgLnNvIGFuZCBzaGFyZWQgbGlicmFyeQorICAgIGVsaWYgIi5zbyIgaW4gZmlsZSBhbmQgZWxmdHlwZSAmIDg6CisgICAgICAgIGV4dHJhZmxhZ3MgPSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tc3RyaXAtdW5uZWVkZWQiCisgICAgIyBzaGFyZWQgb3IgZXhlY3V0YWJsZToKKyAgICBlbGlmIGVsZnR5cGUgJiA4IG9yIGVsZnR5cGUgJiA0OgorICAgICAgICBleHRyYWZsYWdzID0gIi0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSIKKworICAgIHN0cmlwY21kID0gIiclcycgJXMgJyVzJyIgJSAoc3RyaXAsIGV4dHJhZmxhZ3MsIGZpbGUpCisgICAgYmIuZGVidWcoMSwgInJ1bnN0cmlwOiAlcyIgJSBzdHJpcGNtZCkKKworICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoc3RyaXBjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoInJ1bnN0cmlwOiAnJXMnIHN0cmlwIGNvbW1hbmQgZmFpbGVkIHdpdGggJXMgKCVzKSIgJSAoc3RyaXBjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgaWYgbmV3bW9kZToKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgb3JpZ21vZGUpCisKKyAgICByZXR1cm4KKworCitkZWYgZmlsZV90cmFuc2xhdGUoZmlsZSk6CisgICAgZnQgPSBmaWxlLnJlcGxhY2UoIkAiLCAiQGF0QCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCIgIiwgIkBzcGFjZUAiKQorICAgIGZ0ID0gZnQucmVwbGFjZSgiXHQiLCAiQHRhYkAiKQorICAgIGZ0ID0gZnQucmVwbGFjZSgiWyIsICJAb3BlbmJyYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJdIiwgIkBjbG9zZWJyYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJfIiwgIkB1bmRlcnNjb3JlQCIpCisgICAgcmV0dXJuIGZ0CisKK2RlZiBmaWxlZGVwcnVubmVyKGFyZyk6CisgICAgaW1wb3J0IHJlLCBzdWJwcm9jZXNzLCBzaGxleAorCisgICAgKHBrZywgcGtnZmlsZXMsIHJwbWRlcHMsIHBrZ2Rlc3QpID0gYXJnCisgICAgcHJvdmlkZXMgPSB7fQorICAgIHJlcXVpcmVzID0ge30KKworICAgIHIgPSByZS5jb21waWxlKHInWzw+PV0rICtbXiBdKicpCisKKyAgICBkZWYgcHJvY2Vzc19kZXBzKHBpcGUsIHBrZywgcGtnZGVzdCwgcHJvdmlkZXMsIHJlcXVpcmVzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKKyAgICAgICAgICAgIGYgPSBsaW5lLnNwbGl0KCIgIiwgMSlbMF0uc3RyaXAoKQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoIiAiLCAxKVsxXS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUmVxdWlyZXM6Iik6CisgICAgICAgICAgICAgICAgaSA9IHJlcXVpcmVzCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiUHJvdmlkZXM6Iik6CisgICAgICAgICAgICAgICAgaSA9IHByb3ZpZGVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGUgPSBmLnJlcGxhY2UocGtnZGVzdCArICIvIiArIHBrZywgIiIpCisgICAgICAgICAgICBmaWxlID0gZmlsZV90cmFuc2xhdGUoZmlsZSkKKyAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgiOiIsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgIHZhbHVlID0gci5zdWIocicoXGc8MD4pJywgdmFsdWUpCisKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoInJwbWxpYigiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgdmFsdWUgPT0gInB5dGhvbiI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpbGUgbm90IGluIGk6CisgICAgICAgICAgICAgICAgaVtmaWxlXSA9IFtdCisgICAgICAgICAgICBpW2ZpbGVdLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICByZXR1cm4gcHJvdmlkZXMsIHJlcXVpcmVzCisKKyAgICB0cnk6CisgICAgICAgIGRlcF9wb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQocnBtZGVwcykgKyBwa2dmaWxlcywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcHJvdmlkZXMsIHJlcXVpcmVzID0gcHJvY2Vzc19kZXBzKGRlcF9wb3Blbi5zdGRvdXQsIHBrZywgcGtnZGVzdCwgcHJvdmlkZXMsIHJlcXVpcmVzKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmVycm9yKCJycG1kZXBzOiAnJXMnIGNvbW1hbmQgZmFpbGVkLCAnJXMnIiAlIChzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBlKSkKKyAgICAgICAgcmFpc2UgZQorCisgICAgcmV0dXJuIChwa2csIHByb3ZpZGVzLCByZXF1aXJlcykKKworCitkZWYgcmVhZF9zaGxpYl9wcm92aWRlcnMoZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBzaGxpYl9wcm92aWRlciA9IHt9CisgICAgc2hsaWJzX2RpcnMgPSBkLmdldFZhcignU0hMSUJTRElSUycsIFRydWUpLnNwbGl0KCkKKyAgICBsaXN0X3JlID0gcmUuY29tcGlsZSgnXiguKilcLmxpc3QkJykKKyAgICAjIEdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYyBzaW5jZSB0aGUgbGFzdCBvbmUgZm91bmQgd2lucworICAgIGZvciBkaXIgaW4gcmV2ZXJzZWQoc2hsaWJzX2RpcnMpOgorICAgICAgICBiYi5kZWJ1ZygyLCAiUmVhZGluZyBzaGxpYiBwcm92aWRlcnMgaW4gJXMiICUgKGRpcikpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgorICAgICAgICAgICAgbSA9IGxpc3RfcmUubWF0Y2goZmlsZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgZGVwX3BrZyA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgcyA9IGwuc3RyaXAoKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgc2hsaWJfcHJvdmlkZXJbc1swXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXVtzWzFdXSA9IChkZXBfcGtnLCBzWzJdKQorICAgIHJldHVybiBzaGxpYl9wcm92aWRlcgpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvcGFja2FnZV9tYW5hZ2VyLnB5IGIvbWV0YS9saWIvb2UvcGFja2FnZV9tYW5hZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmVkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKQEAgLTAsMCArMSwxOTAwIEBACitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBvcworaW1wb3J0IGdsb2IKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBiYgoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb2UudXRpbHMKKworCisjIHRoaXMgY2FuIGJlIHVzZWQgYnkgYWxsIFBNIGJhY2tlbmRzIHRvIGNyZWF0ZSB0aGUgaW5kZXggZmlsZXMgaW4gcGFyYWxsZWwKK2RlZiBjcmVhdGVfaW5kZXgoYXJnKToKKyAgICBpbmRleF9jbWQgPSBhcmcKKworICAgIHRyeToKKyAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICclcycgLi4uIiAlIGluZGV4X2NtZCkKKyAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoaW5kZXhfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybigiSW5kZXggY3JlYXRpb24gY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBpZiByZXN1bHQ6CisgICAgICAgIGJiLm5vdGUocmVzdWx0KQorCisgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBJbmRleGVyKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBkZXBsb3lfZGlyKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBkZXBsb3lfZGlyCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBScG1JbmRleGVyKEluZGV4ZXIpOgorICAgIGRlZiBnZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KHNlbGYsIGFyY2hfdmFyPU5vbmUsIG9zX3Zhcj1Ob25lKToKKyAgICAgICAgcGFja2FnZV9hcmNocyA9IHsKKyAgICAgICAgICAgICdkZWZhdWx0JzogW10sCisgICAgICAgIH0KKworICAgICAgICB0YXJnZXRfb3MgPSB7CisgICAgICAgICAgICAnZGVmYXVsdCc6ICIiLAorICAgICAgICB9CisKKyAgICAgICAgaWYgYXJjaF92YXIgaXMgbm90IE5vbmUgYW5kIG9zX3ZhciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoYXJjaF92YXIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXS5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRhcmdldF9vc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihvc192YXIsIFRydWUpLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAjIGFyY2ggb3JkZXIgaXMgcmV2ZXJzZWQuICBUaGlzIGVuc3VyZXMgdGhlIC1iZXN0LSBtYXRjaCBpcworICAgICAgICAgICAgIyBsaXN0ZWQgZmlyc3QhCisgICAgICAgICAgICBwYWNrYWdlX2FyY2hzWydkZWZhdWx0J10ucmV2ZXJzZSgpCisgICAgICAgICAgICB0YXJnZXRfb3NbJ2RlZmF1bHQnXSA9IHNlbGYuZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIG11bHRpbGlicyA9IHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICAgICAgICAgIGlmIGxlbihlZXh0KSA+IDEgYW5kIGVleHRbMF0gPT0gJ211bHRpbGliJzoKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZCkKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90dW5lX2tleSA9ICJERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGVleHRbMV0KKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF90dW5lID0gbG9jYWxkYXRhLmdldFZhcihkZWZhdWx0X3R1bmVfa2V5LCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVmYXVsdF90dW5lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmVfa2V5ID0gIkRFRkFVTFRUVU5FX01MXyIgKyBlZXh0WzFdCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmUgPSBsb2NhbGRhdGEuZ2V0VmFyKGRlZmF1bHRfdHVuZV9rZXksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X3R1bmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJERUZBVUxUVFVORSIsIGRlZmF1bHRfdHVuZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9hcmNoc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9hcmNoc1tlZXh0WzFdXS5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9vc1tlZXh0WzFdXSA9IGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9PUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCkKKworICAgICAgICBtbF9wcmVmaXhfbGlzdCA9IGRpY3QoKQorICAgICAgICBmb3IgbWxpYiBpbiBwYWNrYWdlX2FyY2hzOgorICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0gPSBwYWNrYWdlX2FyY2hzW21saWJdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdID0gbGlzdCgpCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gcGFja2FnZV9hcmNoc1ttbGliXToKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJjaCBpbiBbJ2FsbCcsICdub2FyY2gnLCAnYW55J106CisgICAgICAgICAgICAgICAgICAgICAgICBtbF9wcmVmaXhfbGlzdFttbGliXS5hcHBlbmQoYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdLmFwcGVuZChtbGliICsgIl8iICsgYXJjaCkKKworICAgICAgICByZXR1cm4gKG1sX3ByZWZpeF9saXN0LCB0YXJnZXRfb3MpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNka19wa2dfYXJjaHMgPSAoc2VsZi5kLmdldFZhcignU0RLX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICdfJykuc3BsaXQoKQorICAgICAgICBhbGxfbWxiX3BrZ19hcmNocyA9IChzZWxmLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisKKyAgICAgICAgbWxiX3ByZWZpeF9saXN0ID0gc2VsZi5nZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KClbMF0KKworICAgICAgICBhcmNocyA9IHNldCgpCisgICAgICAgIGZvciBpdGVtIGluIG1sYl9wcmVmaXhfbGlzdDoKKyAgICAgICAgICAgIGFyY2hzID0gYXJjaHMudW5pb24oc2V0KGkucmVwbGFjZSgnLScsICdfJykgZm9yIGkgaW4gbWxiX3ByZWZpeF9saXN0W2l0ZW1dKSkKKworICAgICAgICBpZiBsZW4oYXJjaHMpID09IDA6CisgICAgICAgICAgICBhcmNocyA9IGFyY2hzLnVuaW9uKHNldChhbGxfbWxiX3BrZ19hcmNocykpCisKKyAgICAgICAgYXJjaHMgPSBhcmNocy51bmlvbihzZXQoc2RrX3BrZ19hcmNocykpCisKKyAgICAgICAgcnBtX2NyZWF0ZXJlcG8gPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImNyZWF0ZXJlcG8iKQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX05BTUUnLCBUcnVlKQorICAgICAgICAgICAgcGtnZmVlZF9ncGdfcGFzcyA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfUEFTU1BIUkFTRV9GSUxFJywgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX25hbWUgPSBOb25lCisgICAgICAgICAgICBwa2dmZWVkX2dwZ19wYXNzID0gTm9uZQorICAgICAgICBncGdfYmluID0gc2VsZi5kLmdldFZhcignR1BHX0JJTicsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZ3BnIikKKworICAgICAgICBpbmRleF9jbWRzID0gW10KKyAgICAgICAgcmVwb19zaWduX2NtZHMgPSBbXQorICAgICAgICBycG1fZGlyc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgZGJwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgJ3JwbWRiJywgYXJjaCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRicGF0aCk6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKGRicGF0aCwgVHJ1ZSkKKyAgICAgICAgICAgIGFyY2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyY2hfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZCgiJXMgLS1kYnBhdGggJXMgLS11cGRhdGUgLXEgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnBtX2NyZWF0ZXJlcG8sIGRicGF0aCwgYXJjaF9kaXIpKQorICAgICAgICAgICAgaWYgcGtnZmVlZF9ncGdfbmFtZToKKyAgICAgICAgICAgICAgICByZXBvbWRfZmlsZSA9IG9zLnBhdGguam9pbihhcmNoX2RpciwgJ3JlcG9kYXRhJywgJ3JlcG9tZC54bWwnKQorICAgICAgICAgICAgICAgIGdwZ19jbWQgPSAiJXMgLS1kZXRhY2gtc2lnbiAtLWFybW9yIC0tYmF0Y2ggLS1uby10dHkgLS15ZXMgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItLXBhc3NwaHJhc2UtZmlsZSAnJXMnIC11ICclcycgJXMiICUgKGdwZ19iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX3Bhc3MsIHBrZ2ZlZWRfZ3BnX25hbWUsIHJlcG9tZF9maWxlKQorICAgICAgICAgICAgICAgIHJlcG9fc2lnbl9jbWRzLmFwcGVuZChncGdfY21kKQorCisgICAgICAgICAgICBycG1fZGlyc19mb3VuZCA9IFRydWUKKworICAgICAgICBpZiBub3QgcnBtX2RpcnNfZm91bmQ6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMiICUgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDcmVhdGUgcmVwb2RhdGEKKyAgICAgICAgcmVzdWx0ID0gb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoaW5kZXhfY21kcywgY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgIyBTaWduIHJlcG9tZAorICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhyZXBvX3NpZ25fY21kcywgY3JlYXRlX2luZGV4KQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICBiYi5mYXRhbCgnJXMnICUgKCdcbicuam9pbihyZXN1bHQpKSkKKyAgICAgICAgIyBDb3B5IHB1YmtleShzKSB0byByZXBvCisgICAgICAgIGRpc3Ryb192ZXJzaW9uID0gc2VsZi5kLmdldFZhcignRElTVFJPX1ZFUlNJT04nLCBUcnVlKSBvciAib2UuMCIKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgICAgICBzaHV0aWwuY29weTIoc2VsZi5kLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUlBNLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfU0lHTicsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5MihzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfR1BHX1BVQktFWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRVBPREFUQS1HUEctS0VZLSVzJyAlIGRpc3Ryb192ZXJzaW9uKSkKKworCitjbGFzcyBPcGtnSW5kZXhlcihJbmRleGVyKToKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIGFyY2hfdmFycyA9IFsiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLAorICAgICAgICAgICAgICAgICAgICAgIlNES19QQUNLQUdFX0FSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICJNVUxUSUxJQl9BUkNIUyJdCisKKyAgICAgICAgb3BrZ19pbmRleF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ctbWFrZS1pbmRleCIpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJQYWNrYWdlcyIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgIlBhY2thZ2VzIiksICJ3IikuY2xvc2UoKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICBmb3IgYXJjaF92YXIgaW4gYXJjaF92YXJzOgorICAgICAgICAgICAgYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKGFyY2hfdmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgYXJjaHMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ3NfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgICAgICBwa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnc19kaXIsICJQYWNrYWdlcyIpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihwa2dzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnc19maWxlKToKKyAgICAgICAgICAgICAgICAgICAgb3Blbihwa2dzX2ZpbGUsICJ3IikuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgaW5kZXhfY21kcy5hcHBlbmQoJyVzIC1yICVzIC1wICVzIC1tICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wa2dfaW5kZXhfY21kLCBwa2dzX2ZpbGUsIHBrZ3NfZmlsZSwgcGtnc19kaXIpKQorCisgICAgICAgIGlmIGxlbihpbmRleF9jbWRzKSA9PSAwOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzISIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorCisKKworY2xhc3MgRHBrZ0luZGV4ZXIoSW5kZXhlcik6CisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuYXB0X2NvbmZfZGlyKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAibGlzdHMiLCAicGFydGlhbCIpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAiYXB0LmNvbmYuZCIpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAicHJlZmVyZW5jZXMuZCIpKQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJwcmVmZXJlbmNlcyIpLAorICAgICAgICAgICAgICAgICJ3IikgYXMgcHJlZnNfZmlsZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInNvdXJjZXMubGlzdCIpLAorICAgICAgICAgICAgICAgICJ3KyIpIGFzIHNvdXJjZXNfZmlsZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5hcHRfY29uZl9maWxlLCAidyIpIGFzIGFwdF9jb25mOgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmQuZXhwYW5kKCIke1NUQUdJTkdfRVRDRElSX05BVElWRX0iKSwKKyAgICAgICAgICAgICAgICAiYXB0IiwgImFwdC5jb25mLnNhbXBsZSIpKSBhcyBhcHRfY29uZl9zYW1wbGU6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gYXB0X2NvbmZfc2FtcGxlLnJlYWQoKS5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI1JPT1RGUyMiLCAiL2Rldi9udWxsIiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI0FQVENPTkYjIiwgc2VsZi5hcHRfY29uZl9kaXIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZXhwYW5kKCIke0FQVENPTkZfVEFSR0VUfSIpLAorICAgICAgICAgICAgICAgICJhcHQtZnRwYXJjaGl2ZSIpCisgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MoKQorCisgICAgICAgIG9zLmVudmlyb25bJ0FQVF9DT05GSUcnXSA9IHNlbGYuYXB0X2NvbmZfZmlsZQorCisgICAgICAgIHBrZ19hcmNocyA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgICAgICBpZiBwa2dfYXJjaHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmNoX2xpc3QgPSBwa2dfYXJjaHMuc3BsaXQoKQorICAgICAgICBzZGtfcGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcignU0RLX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgICAgICBpZiBzZGtfcGtnX2FyY2hzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGEgaW4gc2RrX3BrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGlmIGEgbm90IGluIHBrZ19hcmNoczoKKyAgICAgICAgICAgICAgICAgICAgYXJjaF9saXN0LmFwcGVuZChhKQorCisgICAgICAgIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCA9IChzZWxmLmQuZ2V0VmFyKCdBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGFyY2hfbGlzdC5leHRlbmQoYXJjaCBmb3IgYXJjaCBpbiBhbGxfbWxiX3BrZ19hcmNoX2xpc3QgaWYgYXJjaCBub3QgaW4gYXJjaF9saXN0KQorCisgICAgICAgIGFwdF9mdHBhcmNoaXZlID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJhcHQtZnRwYXJjaGl2ZSIpCisgICAgICAgIGd6aXAgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImd6aXAiKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICBkZWJfZGlyc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgIGFyY2hfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFyY2hfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBjbWQgPSAiY2QgJXM7IFBTRVVET19VTkxPQUQ9MSAlcyBwYWNrYWdlcyAuID4gUGFja2FnZXM7IiAlIChhcmNoX2RpciwgYXB0X2Z0cGFyY2hpdmUpCisKKyAgICAgICAgICAgIGNtZCArPSAiJXMgLWZjIFBhY2thZ2VzID4gUGFja2FnZXMuZ3o7IiAlIGd6aXAKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmNoX2RpciwgIlJlbGVhc2UiKSwgIncrIikgYXMgcmVsZWFzZToKKyAgICAgICAgICAgICAgICByZWxlYXNlLndyaXRlKCJMYWJlbDogJXNcbiIgJSBhcmNoKQorCisgICAgICAgICAgICBjbWQgKz0gIlBTRVVET19VTkxPQUQ9MSAlcyByZWxlYXNlIC4gPj4gUmVsZWFzZSIgJSBhcHRfZnRwYXJjaGl2ZQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZChjbWQpCisKKyAgICAgICAgICAgIGRlYl9kaXJzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBkZWJfZGlyc19mb3VuZDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyBpbiAlcyIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorCisKKworY2xhc3MgUGtnc0xpc3Qob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucm9vdGZzX2RpciA9IHJvb3Rmc19kaXIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJwbVBrZ3NMaXN0KFBrZ3NMaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2RpciwgYXJjaF92YXI9Tm9uZSwgb3NfdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1Qa2dzTGlzdCwgc2VsZikuX19pbml0X18oZCwgcm9vdGZzX2RpcikKKworICAgICAgICBzZWxmLnJwbV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbSIpCisgICAgICAgIHNlbGYuaW1hZ2VfcnBtbGliID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgJ3Zhci9saWIvcnBtJykKKworICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBcCisgICAgICAgICAgICBScG1JbmRleGVyKGQsIHJvb3Rmc19kaXIpLmdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3QoYXJjaF92YXIsIG9zX3ZhcikKKworICAgICAgICAjIERldGVybWluZSBycG0gdmVyc2lvbgorICAgICAgICBjbWQgPSAiJXMgLS12ZXJzaW9uIiAlIHNlbGYucnBtX2NtZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiR2V0dGluZyBycG0gdmVyc2lvbiBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgc2VsZi5ycG1fdmVyc2lvbiA9IGludChvdXRwdXQuc3BsaXQoKVstMV0uc3BsaXQoJy4nKVswXSkKKworICAgICcnJworICAgIFRyYW5zbGF0ZSB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyB0byB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzCisgICAgJycnCisgICAgZGVmIF9wa2dfdHJhbnNsYXRlX3NtYXJ0X3RvX29lKHNlbGYsIHBrZywgYXJjaCk6CisgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgbmV3X2FyY2ggPSBhcmNoCisgICAgICAgIGZpeGVkX2FyY2ggPSBhcmNoLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgIGZvdW5kID0gMAorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgZm9yIGNtcF9hcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgZml4ZWRfY21wX2FyY2ggPSBjbXBfYXJjaC5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgICAgIGlmIGZpeGVkX2FyY2ggPT0gZml4ZWRfY21wX2FyY2g6CisgICAgICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyY2ggPSBjbXBfYXJjaAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZyA9IG1saWIgKyAnLScgKyBwa2cKKyAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBzdHJpcCBvZmYgdGhlICR7bWxpYn1fIHByZWZpeCBvbiB0aGUgYXJjaAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyY2ggPSBjbXBfYXJjaC5yZXBsYWNlKG1saWIgKyAnXycsICcnKQorCisgICAgICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgYnVnIDM1NjUuIFNpbXBseSBsb29rIHRvIHNlZSBpZiB3ZQorICAgICAgICAgICAgICAgICAgICAjIGtub3cgb2YgYSBwYWNrYWdlIHdpdGggdGhhdCBuYW1lLCBpZiBub3QgdHJ5IGFnYWluIQorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZS1yZXZlcnNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBmb3VuZCA9PSAxIGFuZCBmaXhlZF9hcmNoID09IGZpeGVkX2NtcF9hcmNoOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICNiYi5ub3RlKCclcywgJXMgLT4gJXMsICVzJyAlIChwa2csIGFyY2gsIG5ld19wa2csIG5ld19hcmNoKSkKKyAgICAgICAgcmV0dXJuIG5ld19wa2csIG5ld19hcmNoCisKKyAgICBkZWYgX2xpc3RfcGtnX2RlcHMoc2VsZik6CisgICAgICAgIGNtZCA9IFtiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbXJlc29sdmUiKSwKKyAgICAgICAgICAgICAgICItdCIsIHNlbGYuaW1hZ2VfcnBtbGliXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiJ2RlcHMnIGZvcm1hdCBkZXBlbmRlbmN5IGxpc3RpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggcnBtIDQgc2luY2UgcnBtcmVzb2x2ZSBkb2VzIG5vdCB3b3JrIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9saXN0X3BrZ19kZXBzKCkKKworICAgICAgICBjbWQgPSBzZWxmLnJwbV9jbWQgKyAnIC0tcm9vdCAnICsgc2VsZi5yb290ZnNfZGlyCisgICAgICAgIGNtZCArPSAnIC1EICJfZGJwYXRoIC92YXIvbGliL3JwbSIgLXFhJworICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBjbWQgKz0gIiAtLXFmICdbJXtOQU1FfSAle0FSQ0h9ICV7VkVSU0lPTn1cbl0nIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kICs9ICIgLS1xZiAnWyV7TkFNRX0gJXtBUkNIfSAle1ZFUlNJT059ICV7UEFDS0FHRU9SSUdJTn1cbl0nIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgYmIubm90ZShjbWQpCisgICAgICAgICAgICB0bXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKworICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIG91dHB1dCA9IGxpc3QoKQorICAgICAgICBmb3IgbGluZSBpbiB0bXBfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbGVuKGxpbmUuc3RyaXAoKSkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGtnID0gbGluZS5zcGxpdCgpWzBdCisgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICB2ZXIgPSBsaW5lLnNwbGl0KClbMl0KKyAgICAgICAgICAgICMgU2tpcCBHUEcga2V5cworICAgICAgICAgICAgaWYgcGtnID09ICdncGctcHVia2V5JzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgICAgIHBrZ29yaWdpbiA9ICJ1bmtub3duIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dvcmlnaW4gPSBsaW5lLnNwbGl0KClbM10KKyAgICAgICAgICAgIG5ld19wa2csIG5ld19hcmNoID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9zbWFydF90b19vZShwa2csIGFyY2gpCisKKyAgICAgICAgICAgIGlmIGZvcm1hdCA9PSAiYXJjaCI6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJXMgJXMnICUgKG5ld19wa2csIG5ld19hcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcyAlcycgJSAobmV3X3BrZywgcGtnb3JpZ2luLCBuZXdfYXJjaCkpCisgICAgICAgICAgICBlbGlmIGZvcm1hdCA9PSAidmVyIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcyAlcycgJSAobmV3X3BrZywgbmV3X2FyY2gsIHZlcikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzJyAlIChuZXdfcGtnKSkKKworICAgICAgICAgICAgb3V0cHV0LnNvcnQoKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4ob3V0cHV0KQorCisKK2NsYXNzIE9wa2dQa2dzTGlzdChQa2dzTGlzdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHJvb3Rmc19kaXIsIGNvbmZpZ19maWxlKToKKyAgICAgICAgc3VwZXIoT3BrZ1BrZ3NMaXN0LCBzZWxmKS5fX2luaXRfXyhkLCByb290ZnNfZGlyKQorCisgICAgICAgIHNlbGYub3BrZ19jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ciKQorICAgICAgICBzZWxmLm9wa2dfYXJncyA9ICItZiAlcyAtbyAlcyAiICUgKGNvbmZpZ19maWxlLCByb290ZnNfZGlyKQorICAgICAgICBzZWxmLm9wa2dfYXJncyArPSBzZWxmLmQuZ2V0VmFyKCJPUEtHX0FSR1MiLCBUcnVlKQorCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBvcGtnX3F1ZXJ5X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1xdWVyeS1oZWxwZXIucHkiKQorCisgICAgICAgIGlmIGZvcm1hdCA9PSAiYXJjaCI6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgc3RhdHVzIHwgJXMgLWEiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgb3BrZ19xdWVyeV9jbWQpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtZiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gInZlciI6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgc3RhdHVzIHwgJXMgLXYiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgb3BrZ19xdWVyeV9jbWQpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBsaXN0X2luc3RhbGxlZCB8IGN1dCAtZCcgJyAtZjEiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZ2V0IHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIGlmIG91dHB1dCBhbmQgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSAiIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgcGtnX2FyY2gsIHBrZ19maWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgZnVsbF9wYXRoLCBwa2dfYXJjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIHBrZ19maWxlLCBwa2dfYXJjaCkKKworICAgICAgICAgICAgb3V0cHV0ID0gdG1wX291dHB1dAorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBEcGtnUGtnc0xpc3QoUGtnc0xpc3QpOgorICAgIGRlZiBsaXN0KHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZHBrZy1xdWVyeSIpLAorICAgICAgICAgICAgICAgIi0tYWRtaW5kaXI9JXMvdmFyL2xpYi9kcGtnIiAlIHNlbGYucm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICItVyJdCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX0gJHtQYWNrYWdlQXJjaH1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX0gJHtQYWNrYWdlfV8ke1ZlcnNpb259XyR7QXJjaGl0ZWN0dXJlfS5kZWIgJHtQYWNrYWdlQXJjaH1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJ2ZXIiOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2VBcmNofSAke1ZlcnNpb259XG4iKQorICAgICAgICBlbGlmIGZvcm1hdCA9PSAiZGVwcyI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj1QYWNrYWdlOiAke1BhY2thZ2V9XG5EZXBlbmRzOiAke0RlcGVuZHN9XG5SZWNvbW1lbmRzOiAke1JlY29tbWVuZHN9XG5cbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj0ke1BhY2thZ2V9XG4iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIGlmIGZvcm1hdCA9PSAiZmlsZSI6CisgICAgICAgICAgICB0bXBfb3V0cHV0ID0gIiIKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHR1cGxlKG91dHB1dC5zcGxpdCgnXG4nKSk6CisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwa2csIHBrZ19maWxlLCBwa2dfYXJjaCA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnJvb3Rmc19kaXIsIHBrZ19hcmNoLCBwa2dfZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIGZ1bGxfcGF0aCwgcGtnX2FyY2gpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdG1wX291dHB1dCArPSAiJXMgJXMgJXNcbiIgJSAocGtnLCBwa2dfZmlsZSwgcGtnX2FyY2gpCisKKyAgICAgICAgICAgIG91dHB1dCA9IHRtcF9vdXRwdXQKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgb3BrZ19xdWVyeV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ctcXVlcnktaGVscGVyLnB5IikKKyAgICAgICAgICAgIGZpbGVfb3V0ID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgICAgIGZpbGVfb3V0LndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIGZpbGVfb3V0LmZsdXNoKCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJjYXQgJXMgfCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX291dC5uYW1lLCBvcGtnX3F1ZXJ5X2NtZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmaWxlX291dC5jbG9zZSgpCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBjb21wdXRlIHBhY2thZ2VzIGRlcGVuZGVuY2llcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICAgICBmaWxlX291dC5jbG9zZSgpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIFBhY2thZ2VNYW5hZ2VyKG9iamVjdCk6CisgICAgIiIiCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4gRG8gbm90IGluc3RhbnRpYXRlIHRoaXMgZGlyZWN0bHkuCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBOb25lCisgICAgICAgIHNlbGYuZGVwbG95X2xvY2sgPSBOb25lCisgICAgICAgIHNlbGYuZmVlZF91cmlzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX1VSSVMnLCBUcnVlKSBvciAiIgorICAgICAgICBzZWxmLmZlZWRfcHJlZml4ID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX1BSRUZJWCcsIFRydWUpIG9yICIiCisKKyAgICAiIiIKKyAgICBVcGRhdGUgdGhlIHBhY2thZ2UgbWFuYWdlciBwYWNrYWdlIGRhdGFiYXNlLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIEluc3RhbGwgYSBsaXN0IG9mIHBhY2thZ2VzLiAncGtncycgaXMgYSBsaXN0IG9iamVjdC4gSWYgJ2F0dGVtcHRfb25seScgaXMKKyAgICBUcnVlLCBpbnN0YWxsYXRpb24gZmFpbHVyZXMgYXJlIGlnbm9yZWQuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgUmVtb3ZlIGEgbGlzdCBvZiBwYWNrYWdlcy4gJ3BrZ3MnIGlzIGEgbGlzdCBvYmplY3QuIElmICd3aXRoX2RlcGVuZGVuY2llcycKKyAgICBpcyBGYWxzZSwgdGhlIGFueSBkZXBlbmRlbmNpZXMgYXJlIGxlZnQgaW4gcGxhY2UuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBpbmRleCBmaWxlcworICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxpc3RfaW5zdGFsbGVkKHNlbGYsIGZvcm1hdD1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBJbnN0YWxsIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgYmFzZWQgdXBvbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkgaW5zdGFsbGVkCisgICAgcGFja2FnZXMgZS5nLiBsb2NhbGVzLCAqLWRldiwgKi1kYmcsIGV0Yy4gVGhpcyB3aWxsIG9ubHkgYXR0ZW1wdCB0byBpbnN0YWxsCisgICAgdGhlc2UgcGFja2FnZXMsIGlmIHRoZXkgZG9uJ3QgZXhpc3QgdGhlbiBubyBlcnJvciB3aWxsIG9jY3VyLiAgTm90ZTogZXZlcnkKKyAgICBiYWNrZW5kIG5lZWRzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBleHBsaWNpdGx5IGFmdGVyIHRoZSBub3JtYWwgcGFja2FnZQorICAgIGluc3RhbGxhdGlvbgorICAgICIiIgorICAgIGRlZiBpbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZiwgZ2xvYnM9Tm9uZSk6CisgICAgICAgICMgd2UgbmVlZCB0byB3cml0ZSB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMgdG8gYSBmaWxlIGJlY2F1c2UgdGhlCisgICAgICAgICMgb2UtcGtnZGF0YS11dGlsIHJlYWRzIGl0IGZyb20gYSBmaWxlCisgICAgICAgIGluc3RhbGxlZF9wa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsZWRfcGtncy50eHQiKQorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZmlsZSwgIncrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy53cml0ZShzZWxmLmxpc3RfaW5zdGFsbGVkKCJhcmNoIikpCisKKyAgICAgICAgaWYgZ2xvYnMgaXMgTm9uZToKKyAgICAgICAgICAgIGdsb2JzID0gc2VsZi5kLmdldFZhcignSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkKKyAgICAgICAgICAgIHNwbGl0X2xpbmd1YXMgPSBzZXQoKQorCisgICAgICAgICAgICBmb3IgdHJhbnNsYXRpb24gaW4gc2VsZi5kLmdldFZhcignSU1BR0VfTElOR1VBUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3BsaXRfbGluZ3Vhcy5hZGQodHJhbnNsYXRpb24pCisgICAgICAgICAgICAgICAgc3BsaXRfbGluZ3Vhcy5hZGQodHJhbnNsYXRpb24uc3BsaXQoJy0nKVswXSkKKworICAgICAgICAgICAgc3BsaXRfbGluZ3VhcyA9IHNvcnRlZChzcGxpdF9saW5ndWFzKQorCisgICAgICAgICAgICBmb3IgbGFuZyBpbiBzcGxpdF9saW5ndWFzOgorICAgICAgICAgICAgICAgIGdsb2JzICs9ICIgKi1sb2NhbGUtJXMiICUgbGFuZworCisgICAgICAgIGlmIGdsb2JzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvZS1wa2dkYXRhLXV0aWwiKSwKKyAgICAgICAgICAgICAgICItcCIsIHNlbGYuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksICJnbG9iIiwgaW5zdGFsbGVkX3BrZ3NfZmlsZSwKKyAgICAgICAgICAgICAgIGdsb2JzXQorICAgICAgICBleGNsdWRlID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9FWENMVURFX0NPTVBMRU1FTlRBUlknLCBUcnVlKQorICAgICAgICBpZiBleGNsdWRlOgorICAgICAgICAgICAgY21kLmV4dGVuZChbJy14JywgZXhjbHVkZV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgY29tcGxlbWVudGFyeSBwYWNrYWdlcyAuLi4iKQorICAgICAgICAgICAgY29tcGxlbWVudGFyeV9wa2dzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBjb21wdXRlIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgbGlzdC4gQ29tbWFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsKGNvbXBsZW1lbnRhcnlfcGtncy5zcGxpdCgpLCBhdHRlbXB0X29ubHk9VHJ1ZSkKKworICAgIGRlZiBkZXBsb3lfZGlyX2xvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVwbG95X2RpciBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJkZXBsb3lfZGlyIGlzIG5vdCBzZXQhIikKKworICAgICAgICBsb2NrX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJkZXBsb3kubG9jayIpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGxvY2tfZmlsZV9uYW1lKQorCisgICAgZGVmIGRlcGxveV9kaXJfdW5sb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlcGxveV9sb2NrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKHNlbGYuZGVwbG95X2xvY2spCisKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IE5vbmUKKworCitjbGFzcyBScG1QTShQYWNrYWdlTWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIGQsCisgICAgICAgICAgICAgICAgIHRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgIHRhcmdldF92ZW5kb3IsCisgICAgICAgICAgICAgICAgIHRhc2tfbmFtZT0ndGFyZ2V0JywKKyAgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgYXJjaF92YXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgb3NfdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1QTSwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzID0gdGFyZ2V0X3Jvb3RmcworICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IgPSB0YXJnZXRfdmVuZG9yCisgICAgICAgIHNlbGYudGFza19uYW1lID0gdGFza19uYW1lCisgICAgICAgIHNlbGYucHJvdmlkZW5hbWUgPSBwcm92aWRlbmFtZQorICAgICAgICBzZWxmLmZ1bGxwa2dsaXN0ID0gbGlzdCgpCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfUlBNJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5ldGNycG1fZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgImV0Yy9ycG0iKQorICAgICAgICBzZWxmLmluc3RhbGxfZGlyX25hbWUgPSAib2VfaW5zdGFsbCIKKyAgICAgICAgc2VsZi5pbnN0YWxsX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3Rmcywgc2VsZi5pbnN0YWxsX2Rpcl9uYW1lKQorICAgICAgICBzZWxmLnJwbV9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInJwbSIpCisgICAgICAgIHNlbGYuc21hcnRfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJzbWFydCIpCisgICAgICAgIHNlbGYuc21hcnRfb3B0ID0gIi0tbG9nLWxldmVsPXdhcm5pbmcgLS1kYXRhLWRpcj0iICsgb3MucGF0aC5qb2luKHRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFyL2xpYi9zbWFydCcpCisgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIgPSBzZWxmLmQuZXhwYW5kKCcke1dPUktESVJ9L3NjcmlwdGxldF93cmFwcGVyJykKKyAgICAgICAgc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCA9IHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQvJXNfc29sdXRpb24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXNrX25hbWUpCisgICAgICAgIHNlbGYuc2F2ZWRfcnBtbGliID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lcycgJSBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9ycG0nKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSkKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBScG1JbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorICAgICAgICBzZWxmLnBrZ3NfbGlzdCA9IFJwbVBrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBhcmNoX3Zhciwgb3NfdmFyKQorICAgICAgICBzZWxmLnJwbV92ZXJzaW9uID0gc2VsZi5wa2dzX2xpc3QucnBtX3ZlcnNpb24KKworICAgICAgICBzZWxmLm1sX3ByZWZpeF9saXN0LCBzZWxmLm1sX29zX2xpc3QgPSBzZWxmLmluZGV4ZXIuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQorCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZlZWRfdXJpcyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTGlzdCBtdXN0IGJlIHByZWZlcmVkIHRvIGxlYXN0IHByZWZlcnJlZCBvcmRlcgorICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhID0gc2V0KCkKKyAgICAgICAgcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICBiYmV4dGVuZHZhcmlhbnQgPSBzZWxmLmQuZ2V0VmFyKCdCQkVYVEVORFZBUklBTlQnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdOgorICAgICAgICAgICAgICAgIHBsdCA9IGFyY2gucmVwbGFjZSgnLScsICdfJykgKyAnLS4qLScgKyBzZWxmLm1sX29zX2xpc3RbbWxpYl0KKyAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEuYWRkKHBsdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZXh0cmEuYWRkKHBsdCkKKworICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IHBsYXRmb3JtX2V4dHJhLnVuaW9uKGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEpCisKKyAgICAgICAgYXJjaF9saXN0ID0gW10KKyAgICAgICAgZm9yIGNhbm9uaWNhbF9hcmNoIGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgYXJjaCA9IGNhbm9uaWNhbF9hcmNoLnNwbGl0KCctJylbMF0KKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB1cmlfaXRlcmF0b3IgPSAwCisgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgPSAxMCArIDUgKiBsZW4oc2VsZi5mZWVkX3VyaXMuc3BsaXQoKSkgKiBsZW4oYXJjaF9saXN0KQorCisgICAgICAgIGZvciB1cmkgaW4gc2VsZi5mZWVkX3VyaXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICBpZiBzZWxmLmZlZWRfcHJlZml4OgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gb3MucGF0aC5qb2luKHVyaSwgc2VsZi5mZWVkX3ByZWZpeCkKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCB1cmwlZCVzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh1cmlfaXRlcmF0b3IsIGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWFkZCB1cmwlZC0lcyB0eXBlPXJwbS1tZCBiYXNldXJsPSVzLyVzIC15JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh1cmlfaXRlcmF0b3IsIGFyY2gsIGZ1bGxfdXJpLCBhcmNoKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1zZXQgdXJsJWQtJXMgcHJpb3JpdHk9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgY2hhbm5lbF9wcmlvcml0eSAtPSA1CisgICAgICAgICAgICB1cmlfaXRlcmF0b3IgKz0gMQorCisgICAgJycnCisgICAgQ3JlYXRlIGNvbmZpZ3MgZm9yIHJwbSBhbmQgc21hcnQsIGFuZCBtdWx0aWxpYiBpcyBzdXBwb3J0ZWQKKyAgICAnJycKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ3Moc2VsZik6CisgICAgICAgIHRhcmdldF9hcmNoID0gc2VsZi5kLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgICAgICBwbGF0Zm9ybSA9ICclcyVzLSVzJyAlICh0YXJnZXRfYXJjaC5yZXBsYWNlKCctJywgJ18nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfdmVuZG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1sX29zX2xpc3RbJ2RlZmF1bHQnXSkKKworICAgICAgICAjIExpc3QgbXVzdCBiZSBwcmVmZXJlZCB0byBsZWFzdCBwcmVmZXJyZWQgb3JkZXIKKyAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IGxpc3QoKQorICAgICAgICBiYmV4dGVuZHZhcmlhbnQgPSBzZWxmLmQuZ2V0VmFyKCdCQkVYVEVORFZBUklBTlQnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX29zX2xpc3Q6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdOgorICAgICAgICAgICAgICAgIHBsdCA9IGFyY2gucmVwbGFjZSgnLScsICdfJykgKyAnLS4qLScgKyBzZWxmLm1sX29zX2xpc3RbbWxpYl0KKyAgICAgICAgICAgICAgICBpZiBtbGliID09IGJiZXh0ZW5kdmFyaWFudDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGx0IG5vdCBpbiBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHBsdCBub3QgaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9leHRyYS5hcHBlbmQocGx0KQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgKyBwbGF0Zm9ybV9leHRyYQorCisgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25maWdzKHBsYXRmb3JtLCBwbGF0Zm9ybV9leHRyYSkKKworICAgIGRlZiBfaW52b2tlX3NtYXJ0KHNlbGYsIGFyZ3MpOgorICAgICAgICBjbWQgPSAiJXMgJXMgJXMiICUgKHNlbGYuc21hcnRfY21kLCBzZWxmLnNtYXJ0X29wdCwgYXJncykKKyAgICAgICAgIyBiYi5ub3RlKGNtZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGxlbWVudGFyeV9wa2dzID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICMgYmIubm90ZShjb21wbGVtZW50YXJ5X3BrZ3MpCisgICAgICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNvdWxkIG5vdCBpbnZva2Ugc21hcnQuIENvbW1hbmQgIgorICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiBfc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHNlbGYsIHBrZywgZmVlZF9hcmNocyk6CisgICAgICAgIGZvciBhcmNoIGluIGZlZWRfYXJjaHM6CisgICAgICAgICAgICBhcmNoID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgcmVnZXhfbWF0Y2ggPSByZS5jb21waWxlKHIiXiVzLVteLV0qLVteLV0qQCVzJCIgJSBcCisgICAgICAgICAgICAgICAgKHJlLmVzY2FwZShwa2cpLCByZS5lc2NhcGUoYXJjaCkpKQorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdWxscGtnbGlzdDoKKyAgICAgICAgICAgICAgICBpZiByZWdleF9tYXRjaC5tYXRjaChwKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBGaXJzdCBmb3VuZCBpcyBiZXN0IG1hdGNoCisgICAgICAgICAgICAgICAgICAgICMgYmIubm90ZSgnJXMgLT4gJXMnICUgKHBrZywgcGtnICsgJ0AnICsgYXJjaCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwa2cgKyAnQCcgKyBhcmNoCisKKyAgICAgICAgIyBTZWFyY2ggcHJvdmlkZXMgaWYgbm90IGZvdW5kIGJ5IHBrZ25hbWUuCisgICAgICAgIGJiLm5vdGUoJ05vdCBmb3VuZCAlcyBieSBuYW1lLCBzZWFyY2hpbmcgcHJvdmlkZXMgLi4uJyAlIHBrZykKKyAgICAgICAgY21kID0gIiVzICVzIHF1ZXJ5IC0tcHJvdmlkZXMgJXMgLS1zaG93LWZvcm1hdD0nJG5hbWUtJHZlcnNpb24nIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBwa2cpCisgICAgICAgIGNtZCArPSAiIHwgc2VkIC1uZSAncy8gKlByb3ZpZGVzOi8vcCciCisgICAgICAgIGJiLm5vdGUoJ2NtZDogJXMnICUgY21kKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgIyBGb3VuZCBhIHByb3ZpZGVyCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGJiLm5vdGUoJ0ZvdW5kIHByb3ZpZGVycyBmb3IgJXM6ICVzJyAlIChwa2csIG91dHB1dCkpCisgICAgICAgICAgICBmb3IgcCBpbiBvdXRwdXQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBmZWVkX2FyY2hzOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgICAgICAgICBpZiBwLnJzdHJpcCgpLmVuZHN3aXRoKCdAJyArIGFyY2gpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAKKworICAgICAgICByZXR1cm4gIiIKKworICAgICcnJworICAgIFRyYW5zbGF0ZSB0aGUgT0UgbXVsdGlsaWIgZm9ybWF0IG5hbWVzIHRvIHRoZSBSUE0vU21hcnQgZm9ybWF0IG5hbWVzCisgICAgSXQgc2VhcmNoZWQgdGhlIFJQTS9TbWFydCBmb3JtYXQgbmFtZXMgaW4gcHJvYmFibGUgbXVsdGlsaWIgZmVlZHMgZmlyc3QsCisgICAgYW5kIHRoZW4gc2VhcmNoZWQgdGhlIGRlZmF1bHQgYmFzZSBmZWVkLgorICAgICcnJworICAgIGRlZiBfcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBuZXdfcGtncyA9IGxpc3QoKQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgICAgICMgU2VhcmNoIG5ld19wa2cgaW4gcHJvYmFibGUgbXVsdGlsaWJzIGZpcnN0CisgICAgICAgICAgICBmb3IgbWxpYiBpbiBzZWxmLm1sX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgICAgICMgSnVtcCB0aGUgZGVmYXVsdCBhcmNocworICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3Vic3QgPSBwa2cucmVwbGFjZShtbGliICsgJy0nLCAnJykKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBwa2cgaW4gdGhpcyBtdWx0aWxpYiBmZWVkCisgICAgICAgICAgICAgICAgaWYgc3Vic3QgIT0gcGtnOgorICAgICAgICAgICAgICAgICAgICBmZWVkX2FyY2hzID0gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXQorICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHN1YnN0LCBmZWVkX2FyY2hzKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRmFpbGVkIHRvIHRyYW5zbGF0ZSwgcGFja2FnZSBub3QgZm91bmQhCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gJyVzIG5vdCBmb3VuZCBpbiB0aGUgJXMgZmVlZHMgKCVzKS5cbicgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgbWxpYiwgIiAiLmpvaW4oZmVlZF9hcmNocykpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3BrZ3MuYXBwZW5kKG5ld19wa2cpCisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBBcHBhcmVudGx5IG5vdCBhIG11bHRpbGliIHBhY2thZ2UuLi4KKyAgICAgICAgICAgIGlmIHBrZyA9PSBuZXdfcGtnOgorICAgICAgICAgICAgICAgICMgU2VhcmNoIG5ld19wa2cgaW4gZGVmYXVsdCBhcmNocworICAgICAgICAgICAgICAgIGRlZmF1bHRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0WydkZWZhdWx0J10KKyAgICAgICAgICAgICAgICBuZXdfcGtnID0gc2VsZi5fc2VhcmNoX3BrZ19uYW1lX2luX2ZlZWRzKHBrZywgZGVmYXVsdF9hcmNocykKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3X3BrZzoKKyAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9ICclcyBub3QgZm91bmQgaW4gdGhlIGJhc2UgZmVlZHMgKCVzKS5cbicgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCAnICcuam9pbihkZWZhdWx0X2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgKz0gIiAiLmpvaW4oc2VsZi5mdWxscGtnbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oZXJyX21zZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKKworICAgICAgICByZXR1cm4gbmV3X3BrZ3MKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZ3Moc2VsZiwgcGxhdGZvcm0sIHBsYXRmb3JtX2V4dHJhKToKKyAgICAgICAgIyBTZXR1cCBiYXNlIHN5c3RlbSBjb25maWd1cmF0aW9uCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBwbGF0Zm9ybSBzZXR0aW5ncyIpCisKKyAgICAgICAgIyBDb25maWd1cmUgaW50ZXJuYWwgUlBNIGVudmlyb25tZW50IHdoZW4gdXNpbmcgU21hcnQKKyAgICAgICAgb3MuZW52aXJvblsnUlBNX0VUQ1JQTSddID0gc2VsZi5ldGNycG1fZGlyCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmV0Y3JwbV9kaXIpCisKKyAgICAgICAgIyBTZXR1cCB0ZW1wb3JhcnkgZGlyZWN0b3J5IC0tIGluc3RhbGwuLi4KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5pbnN0YWxsX2Rpcl9wYXRoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmluc3RhbGxfZGlyX3BhdGgsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2Rpcl9wYXRoLCAndG1wJykpCisKKyAgICAgICAgY2hhbm5lbF9wcmlvcml0eSA9IDUKKyAgICAgICAgcGxhdGZvcm1fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZXRjcnBtX2RpciwgInBsYXRmb3JtIikKKyAgICAgICAgc2Rrb3MgPSBzZWxmLmQuZ2V0VmFyKCJTREtfT1MiLCBUcnVlKQorICAgICAgICB3aXRoIG9wZW4ocGxhdGZvcm1fZGlyLCAidysiKSBhcyBwbGF0Zm9ybV9mZDoKKyAgICAgICAgICAgIHBsYXRmb3JtX2ZkLndyaXRlKHBsYXRmb3JtICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBwdCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5ICs9IDUKKyAgICAgICAgICAgICAgICBpZiBzZGtvczoKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gcmUuc3ViKCItJXMkIiAlIHNka29zLCAiLSVzXG4iICUgc2Rrb3MsIHB0KQorICAgICAgICAgICAgICAgIHRtcCA9IHJlLnN1YigiLWxpbnV4LiokIiwgIi1saW51eC4qXG4iLCB0bXApCisgICAgICAgICAgICAgICAgcGxhdGZvcm1fZmQud3JpdGUodG1wKQorCisgICAgICAgICMgVGVsbCBSUE0gdGhhdCB0aGUgIi8iIGRpcmVjdG9yeSBleGlzdCBhbmQgaXMgYXZhaWxhYmxlCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBzeXN0ZW0gcHJvdmlkZXMiKQorICAgICAgICBzeXNpbmZvX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmV0Y3JwbV9kaXIsICJzeXNpbmZvIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHN5c2luZm9fZGlyKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHN5c2luZm9fZGlyLCAiRGlybmFtZXMiKSwgIncrIikgYXMgZGlybmFtZXM6CisgICAgICAgICAgICBkaXJuYW1lcy53cml0ZSgiL1xuIikKKworICAgICAgICBpZiBzZWxmLnByb3ZpZGVuYW1lOgorICAgICAgICAgICAgcHJvdmlkZW5hbWVfZGlyID0gb3MucGF0aC5qb2luKHN5c2luZm9fZGlyLCAiUHJvdmlkZW5hbWUiKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHByb3ZpZGVuYW1lX2Rpcik6CisgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWVfY29udGVudCA9ICdcbicuam9pbihzZWxmLnByb3ZpZGVuYW1lKQorICAgICAgICAgICAgICAgIHByb3ZpZGVuYW1lX2NvbnRlbnQgKz0gJ1xuJworICAgICAgICAgICAgICAgIG9wZW4ocHJvdmlkZW5hbWVfZGlyLCAidysiKS53cml0ZShwcm92aWRlbmFtZV9jb250ZW50KQorCisgICAgICAgICMgQ29uZmlndXJlIFJQTS4uLiB3ZSBlbmZvcmNlIHRoZXNlIHNldHRpbmdzIQorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBSUE0gREIgc2V0dGluZ3MiKQorICAgICAgICAjIEFmdGVyIGNoYW5nZSB0aGUgX19kYi4qIGNhY2hlIHNpemUsIGxvZyBmaWxlIHdpbGwgbm90IGJlCisgICAgICAgICMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIHRoYXQgd2lsbCByYWlzZSBzb21lIHdhcm5pbmdzLAorICAgICAgICAjIHNvIHRvdWNoIGEgYmFyZSBsb2cgZm9yIHJwbSB3cml0ZSBpbnRvIGl0LgorICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDU6CisgICAgICAgICAgICBycG1saWJfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnbG9nJywgJ2xvZy4wMDAwMDAwMDAxJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhycG1saWJfbG9nKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnbG9nJykpCisgICAgICAgICAgICAgICAgb3BlbihycG1saWJfbG9nLCAndysnKS5jbG9zZSgpCisKKyAgICAgICAgICAgIERCX0NPTkZJR19DT05URU5UID0gIiMgPT09PT09PT09PT09PT09PSBFbnZpcm9ubWVudFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9kYXRhX2RpciAuXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2NyZWF0ZV9kaXIgLlxuIiBcCisgICAgICAgICAgICAgICAgInNldF9sZ19kaXIgLi9sb2dcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfdG1wX2RpciAuL3RtcFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9mbGFncyBkYl9sb2dfYXV0b3JlbW92ZSBvblxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOFxuIiBcCisgICAgICAgICAgICAgICAgInNldF90aHJlYWRfY291bnQgNjRcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gTG9nZ2luZ1xuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBNZW1vcnkgUG9vbFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDBcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbXBfbW1hcHNpemUgMjY4NDM1NDU2XG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyA9PT09PT09PT09PT09PT09IExvY2tpbmdcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X2xvY2tzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xrX21heF9sb2NrZXJzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xrX21heF9vYmplY3RzIDE2Mzg0XG4iIFwKKyAgICAgICAgICAgICAgICAibXV0ZXhfc2V0X21heCAxNjM4NDBcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gUmVwbGljYXRpb25cbiIKKworICAgICAgICAgICAgZGJfY29uZmlnX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmltYWdlX3JwbWxpYiwgJ0RCX0NPTkZJRycpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGJfY29uZmlnX2Rpcik6CisgICAgICAgICAgICAgICAgb3BlbihkYl9jb25maWdfZGlyLCAndysnKS53cml0ZShEQl9DT05GSUdfQ09OVEVOVCkKKworICAgICAgICAjIENyZWF0ZSBkYXRhYmFzZSBzbyB0aGF0IHNtYXJ0IGRvZXNuJ3QgY29tcGxhaW4gKGxhenkgaW5pdCkKKyAgICAgICAgb3B0ID0gIi1xYSIKKyAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgb3B0ID0gIi0taW5pdGRiIgorICAgICAgICBjbWQgPSAiJXMgLS1yb290ICVzIC0tZGJwYXRoIC92YXIvbGliL3JwbSAlcyA+IC9kZXYvbnVsbCIgJSAoCisgICAgICAgICAgICAgIHNlbGYucnBtX2NtZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBvcHQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDcmVhdGUgcnBtIGRhdGFiYXNlIGZhaWxlZC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAjIEltcG9ydCBHUEcga2V5IHRvIFJQTSBkYXRhYmFzZSBvZiB0aGUgdGFyZ2V0IHN5c3RlbQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHB1YmtleV9wYXRoID0gc2VsZi5kLmdldFZhcignUlBNX0dQR19QVUJLRVknLCBUcnVlKQorICAgICAgICAgICAgY21kID0gIiVzIC0tcm9vdCAlcyAtLWRicGF0aCAvdmFyL2xpYi9ycG0gLS1pbXBvcnQgJXMgPiAvZGV2L251bGwiICUgKAorICAgICAgICAgICAgICAgICAgc2VsZi5ycG1fY21kLCBzZWxmLnRhcmdldF9yb290ZnMsIHB1YmtleV9wYXRoKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgIyBDb25maWd1cmUgc21hcnQKKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgU21hcnQgc2V0dGluZ3MiKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1yb290PSVzJyAlIHNlbGYudGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWRicGF0aD0vdmFyL2xpYi9ycG0nKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl92YXI9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXInLCBUcnVlKSkKKyAgICAgICAgY21kID0gImNvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl90bXBwYXRoPS8lcy90bXAiICUgKHNlbGYuaW5zdGFsbF9kaXJfbmFtZSkKKworICAgICAgICBwcmVmZXJfY29sb3IgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fUFJFRkVSX0VMRl9BUkNIJywgVHJ1ZSkKKyAgICAgICAgaWYgcHJlZmVyX2NvbG9yOgorICAgICAgICAgICAgaWYgcHJlZmVyX2NvbG9yIG5vdCBpbiBbJzAnLCAnMScsICcyJywgJzQnXToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiSW52YWxpZCBSUE1fUFJFRkVSX0VMRl9BUkNIOiAlcywgaXQgc2hvdWxkIGJlIG9uZSBvZjpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDE6IEVMRjMyIHdpbnNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDI6IEVMRjY0IHdpbnNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcdDQ6IEVMRjY0IE4zMiB3aW5zIChtaXBzNjQgb3IgbWlwczY0ZWwgb25seSkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZlcl9jb2xvcikKKyAgICAgICAgICAgIGlmIHByZWZlcl9jb2xvciA9PSAiNCIgYW5kIHNlbGYuZC5nZXRWYXIoIlRVTkVfQVJDSCIsIFRydWUpIG5vdCBpbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ21pcHM2NCcsICdtaXBzNjRlbCddOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSUE1fUFJFRkVSX0VMRl9BUkNIID0gXCI0XCIgaXMgZm9yIG1pcHM2NCBvciBtaXBzNjRlbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkuIikKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3ByZWZlcl9jb2xvcj0lcycKKyAgICAgICAgICAgICAgICAgICAgICAgICUgcHJlZmVyX2NvbG9yKQorCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydChjbWQpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1pZ25vcmVzaXplPTEnKQorCisgICAgICAgICMgV3JpdGUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIGhvc3QgYW5kIHRhcmdldCB1c2FnZQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9saW5rdG9zPTEnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9wYXJlbnRkaXJzPTEnKQorICAgICAgICBjaGVja19zaWduYXR1cmUgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fQ0hFQ0tfU0lHTkFUVVJFUycsIFRydWUpCisgICAgICAgIGlmIGNoZWNrX3NpZ25hdHVyZSBhbmQgY2hlY2tfc2lnbmF0dXJlLnN0cmlwKCkgPT0gIjAiOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWNoZWNrLXNpZ25hdHVyZXM9ZmFsc2UnKQorICAgICAgICBmb3IgaSBpbiBzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBpZ25vcmUtcmVjb21tZW5kcyAlcycgJSBpKQorCisgICAgICAgICMgRG8gdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBoZXJlLCB0byBhdm9pZCB0aGVtIGJlaW5nCisgICAgICAgICMgc2F2ZWQgZm9yIGZpZWxkIHVwZ3JhZGUKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignTk9fUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3RyaXAoKSA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBpZ25vcmUtYWxsLXJlY29tbWVuZHM9MScpCisgICAgICAgIHBrZ19leGNsdWRlID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9FWENMVURFJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIGkgaW4gcGtnX2V4Y2x1ZGUuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBleGNsdWRlLXBhY2thZ2VzICVzJyAlIGkpCisKKyAgICAgICAgIyBPcHRpb25hbCBkZWJ1Z2dpbmcKKyAgICAgICAgIyBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbG9nLWxldmVsPWRlYnVnJykKKyAgICAgICAgIyBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1sb2ctZmlsZT0vdG1wL3NtYXJ0LWRlYnVnLWxvZ2ZpbGUnCisgICAgICAgICMgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKyAgICAgICAgY2hfYWxyZWFkeV9hZGRlZCA9IFtdCisgICAgICAgIGZvciBjYW5vbmljYWxfYXJjaCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgIGFyY2ggPSBjYW5vbmljYWxfYXJjaC5zcGxpdCgnLScpWzBdCisgICAgICAgICAgICBhcmNoX2NoYW5uZWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXJjaF9jaGFubmVsKSBhbmQgbm90IGFyY2ggaW4gY2hfYWxyZWFkeV9hZGRlZDoKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgU21hcnQgY2hhbm5lbCAlcyAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkICVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMgLXknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGFyY2gsIGFyY2hfY2hhbm5lbCkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tc2V0ICVzIHByaW9yaXR5PSVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5IC09IDUKKworICAgICAgICAgICAgICAgIGNoX2FscmVhZHlfYWRkZWQuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgYmIubm90ZSgnYWRkaW5nIFNtYXJ0IFJQTSBEQiBjaGFubmVsJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHJwbXN5cyB0eXBlPXJwbS1zeXMgLXknKQorCisgICAgICAgICMgQ29uc3RydWN0IGluc3RhbGwgc2NyaXB0bGV0IHdyYXBwZXIuCisgICAgICAgICMgU2NyaXB0cyBuZWVkIHRvIGJlIG9yZGVyZWQgd2hlbiBleGVjdXRlZCwgdGhpcyBlbnN1cmVzIG51bWVyaWMgb3JkZXIuCisgICAgICAgICMgSWYgd2UgZXZlciBydW4gaW50byBuZWVkaW5nIG1vcmUgdGhlIDg5OSBzY3JpcHRzLCB3ZSdsbCBoYXZlIHRvLgorICAgICAgICAjIGNoYW5nZSBudW0gdG8gc3RhcnQgd2l0aCAxMDAwLgorICAgICAgICAjCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIHNjcmlwdGxldGNtZCA9ICIkMiAkMyAkNFxuIgorICAgICAgICAgICAgc2NyaXB0cGF0aCA9ICIkMyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNjcmlwdGxldGNtZCA9ICIkMiAkMS8kMyAkNFxuIgorICAgICAgICAgICAgc2NyaXB0cGF0aCA9ICIkMS8kMyIKKworICAgICAgICBTQ1JJUFRMRVRfRk9STUFUID0gIiMhL2Jpbi9iYXNoXG4iIFwKKyAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBQQVRIPSVzXG4iIFwKKyAgICAgICAgICAgICJleHBvcnQgRD0lc1xuIiBcCisgICAgICAgICAgICAnZXhwb3J0IE9GRkxJTkVfUk9PVD0iJEQiXG4nIFwKKyAgICAgICAgICAgICdleHBvcnQgSVBLR19PRkZMSU5FX1JPT1Q9IiREIlxuJyBcCisgICAgICAgICAgICAnZXhwb3J0IE9QS0dfT0ZGTElORV9ST09UPSIkRCJcbicgXAorICAgICAgICAgICAgImV4cG9ydCBJTlRFUkNFUFRfRElSPSVzXG4iIFwKKyAgICAgICAgICAgICJleHBvcnQgTkFUSVZFX1JPT1Q9JXNcbiIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICArIHNjcmlwdGxldGNtZCArIFwKKyAgICAgICAgICAgICJpZiBbICQ/IC1uZSAwIF07IHRoZW5cbiIgXAorICAgICAgICAgICAgIiAgaWYgWyAkNCAtZXEgMSBdOyB0aGVuXG4iIFwKKyAgICAgICAgICAgICIgICAgbWtkaXIgLXAgJDEvZXRjL3JwbS1wb3N0aW5zdHNcbiIgXAorICAgICAgICAgICAgIiAgICBudW09MTAwXG4iIFwKKyAgICAgICAgICAgICIgICAgd2hpbGUgWyAtZSAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tKiBdOyBkbyBudW09JCgobnVtICsgMSkpOyBkb25lXG4iIFwKKyAgICAgICAgICAgICIgICAgbmFtZT1gaGVhZCAtMSAiICsgc2NyaXB0cGF0aCArICIgfCBjdXQgLWRcJyBcJyAtZiAyYFxuIiBcCisgICAgICAgICAgICAnICAgIGVjaG8gIiMhJDIiID4gJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbicgXAorICAgICAgICAgICAgJyAgICBlY2hvICIjIEFyZzogJDQiID4+ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4nIFwKKyAgICAgICAgICAgICIgICAgY2F0ICIgKyBzY3JpcHRwYXRoICsgIiA+PiAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tJHtuYW1lfVxuIiBcCisgICAgICAgICAgICAiICAgIGNobW9kICt4ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4iIFwKKyAgICAgICAgICAgICIgIGVsc2VcbiIgXAorICAgICAgICAgICAgJyAgICBlY2hvICJFcnJvcjogcHJlL3Bvc3QgcmVtb3ZlIHNjcmlwdGxldCBmYWlsZWQiXG4nIFwKKyAgICAgICAgICAgICIgIGZpXG4iIFwKKyAgICAgICAgICAgICJmaVxuIgorCisgICAgICAgIGludGVyY2VwdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCcke1dPUktESVJ9L2ludGVyY2VwdF9zY3JpcHRzJykKKyAgICAgICAgbmF0aXZlX3Jvb3QgPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBUcnVlKQorICAgICAgICBzY3JpcHRsZXRfY29udGVudCA9IFNDUklQVExFVF9GT1JNQVQgJSAob3MuZW52aXJvblsnUEFUSCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9yb290KQorICAgICAgICBvcGVuKHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIsICd3KycpLndyaXRlKHNjcmlwdGxldF9jb250ZW50KQorCisgICAgICAgIGJiLm5vdGUoIk5vdGU6IGNvbmZpZ3VyaW5nIFJQTSBjcm9zcy1pbnN0YWxsIHNjcmlwdGxldF93cmFwcGVyIikKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgMDc1NSkKKyAgICAgICAgY21kID0gJ2NvbmZpZyAtLXNldCBycG0tZXh0cmEtbWFjcm9zLl9jcm9zc19zY3JpcHRsZXRfd3JhcHBlcj0lcycgJSBcCisgICAgICAgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKworICAgICAgICAjIERlYnVnIHRvIHNob3cgc21hcnQgY29uZmlnIGluZm8KKyAgICAgICAgIyBiYi5ub3RlKHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2hvdycpKQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCd1cGRhdGUgcnBtc3lzJykKKworICAgICcnJworICAgIEluc3RhbGwgcGtncyB3aXRoIHNtYXJ0LCB0aGUgcGtnIG5hbWUgaXMgb2UgZm9ybWF0CisgICAgJycnCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKworICAgICAgICBpZiBub3QgcGtnczoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyB0byBpbnN0YWxsIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBwa2dzID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChwa2dzLCBhdHRlbXB0X29ubHkpCisKKyAgICAgICAgaWYgbm90IGF0dGVtcHRfb25seToKKyAgICAgICAgICAgIGJiLm5vdGUoJ3RvIGJlIGluc3RhbGxlZDogJXMnICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAteSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIubm90ZSgnaW5zdGFsbGluZyBhdHRlbXB0IG9ubHkgcGFja2FnZXMuLi4nKQorICAgICAgICAgICAgYmIubm90ZSgnQXR0ZW1wdGluZyAlcycgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC0tYXR0ZW1wdCAteSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgJycnCisgICAgUmVtb3ZlIHBrZ3Mgd2l0aCBzbWFydCwgdGhlIHBrZyBuYW1lIGlzIHNtYXJ0L3JwbSBmb3JtYXQKKyAgICAnJycKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBiYi5ub3RlKCd0byBiZSByZW1vdmVkOiAnICsgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgaWYgbm90IHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgY21kID0gIiVzIC1lIC0tbm9kZXBzICIgJSBzZWxmLnJwbV9jbWQKKyAgICAgICAgICAgIGNtZCArPSAiLS1yb290PSVzICIgJSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgICAgIGNtZCArPSAiLS1kYnBhdGg9L3Zhci9saWIvcnBtICIKKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmU9J19jcm9zc19zY3JpcHRsZXRfd3JhcHBlciAlcycgIiAlIFwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnNjcmlwdGxldF93cmFwcGVyCisgICAgICAgICAgICBjbWQgKz0gIi0tZGVmaW5lPSdfdG1wcGF0aCAvJXMvdG1wJyAlcyIgJSAoc2VsZi5pbnN0YWxsX2Rpcl9uYW1lLCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgIyAgIGJiLm5vdGUoJ0RlYnVnOiBXaGF0IHJlcXVpcmVkOiAlcycgJSBwa2cpCisgICAgICAgICAgICAjICAgYmIubm90ZShzZWxmLl9pbnZva2Vfc21hcnQoJ3F1ZXJ5ICVzIC0tc2hvdy1yZXF1aXJlZGJ5JyAlIHBrZykpCisKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyByZW1vdmUgLXkgJXMiICUgKHNlbGYuc21hcnRfY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zbWFydF9vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgdXBncmFkZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgnc21hcnQgdXBncmFkZScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgndXBncmFkZScpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2VfcnBtbGliLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9vcGtnJyksIFRydWUpCisKKyAgICAgICAgIyByZW1vdmUgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW5zdGFsbF9kaXJfcGF0aCwgVHJ1ZSkKKworICAgIGRlZiBiYWNrdXBfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgcnBtbGliIGZvciBpbmNyZW1lbnQgcnBtIGltYWdlIGdlbmVyYXRpb24KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9ycG1saWIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2F2ZWRfcnBtbGliLCBUcnVlKQorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVkX3JwbWxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgcmVjb3ZlcnlfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgTW92ZSB0aGUgcnBtbGliIGJhY2sKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9ycG1saWIpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5pbWFnZV9ycG1saWIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmltYWdlX3JwbWxpYiwgVHJ1ZSkKKworICAgICAgICAgICAgYmIubm90ZSgnUmVjb3ZlcnkgcGFja2FnaW5nIGRhdGEnKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuc2F2ZWRfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2VfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5wa2dzX2xpc3QubGlzdChmb3JtYXQpCisKKyAgICAnJycKKyAgICBJZiBpbmNyZW1lbnRhbCBpbnN0YWxsLCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHdlJ3ZlIGdvdCwKKyAgICB3aGF0IHdlIG5lZWQgdG8gYWRkLCBhbmQgd2hhdCB0byByZW1vdmUuLi4KKyAgICBUaGUgZHVtcF9pbnN0YWxsX3NvbHV0aW9uIHdpbGwgZHVtcCBhbmQgc2F2ZSB0aGUgbmV3IGluc3RhbGwKKyAgICBzb2x1dGlvbi4KKyAgICAnJycKKyAgICBkZWYgZHVtcF9pbnN0YWxsX3NvbHV0aW9uKHNlbGYsIHBrZ3MpOgorICAgICAgICBiYi5ub3RlKCdjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbCcpCisgICAgICAgIGlmIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGtncyA9IHNlbGYuX3BrZ190cmFuc2xhdGVfb2VfdG9fc21hcnQocGtncywgRmFsc2UpCisgICAgICAgIGluc3RhbGxfcGtncyA9IGxpc3QoKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC15IC0tZHVtcCAlcyAyPiVzIiAlICBcCisgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwKKyAgICAgICAgICAgICAgIHNlbGYuc21hcnRfb3B0LAorICAgICAgICAgICAgICAgJyAnLmpvaW4ocGtncyksCisgICAgICAgICAgICAgICBzZWxmLnNvbHV0aW9uX21hbmlmZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIERpc2FibGUgcnBtc3lzIGNoYW5uZWwgZm9yIHRoZSBmYWtlIGluc3RhbGwKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWRpc2FibGUgcnBtc3lzJykKKworICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxfcGtncy5hcHBlbmQocGtnKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBkdW1wIGluc3RhbGwgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICAjIFJlY292ZXJ5IHJwbXN5cyBjaGFubmVsCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSBycG1zeXMnKQorICAgICAgICByZXR1cm4gaW5zdGFsbF9wa2dzCisKKyAgICAnJycKKyAgICBJZiBpbmNyZW1lbnRhbCBpbnN0YWxsLCB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGF0IHdlJ3ZlIGdvdCwKKyAgICB3aGF0IHdlIG5lZWQgdG8gYWRkLCBhbmQgd2hhdCB0byByZW1vdmUuLi4KKyAgICBUaGUgbG9hZF9vbGRfaW5zdGFsbF9zb2x1dGlvbiB3aWxsIGxvYWQgdGhlIHByZXZpb3VzIGluc3RhbGwKKyAgICBzb2x1dGlvbgorICAgICcnJworICAgIGRlZiBsb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCdsb2FkIG9sZCBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsJykKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3MgPSBsaXN0KCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuc29sdXRpb25fbWFuaWZlc3QpOgorICAgICAgICAgICAgYmIubm90ZSgnb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0JykKKyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvbHV0aW9uX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgZm9yIHBrZyBpbiBtYW5pZmVzdC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQorCisgICAgICAgIHJldHVybiBpbnN0YWxsZWRfcGtncworCisgICAgJycnCisgICAgRHVtcCBhbGwgYXZhaWxhYmxlIHBhY2thZ2VzIGluIGZlZWRzLCBpdCBzaG91bGQgYmUgaW52b2tlZCBhZnRlciB0aGUKKyAgICBuZXdlc3QgcnBtIGluZGV4IHdhcyBjcmVhdGVkCisgICAgJycnCisgICAgZGVmIGR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKHNlbGYpOgorICAgICAgICBhdmFpbGFibGVfbWFuaWZlc3QgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkL2F2YWlsYWJsZV9wa2dzLnR4dCcpCisgICAgICAgIGF2YWlsYWJsZV9wa2dzID0gbGlzdCgpCisgICAgICAgIGNtZCA9ICIlcyAlcyBxdWVyeSAtLW91dHB1dCAlcyIgJSAgXAorICAgICAgICAgICAgICAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBhdmFpbGFibGVfbWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGF2YWlsYWJsZV9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgaWYgJ0AnIGluIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV9wa2dzLmFwcGVuZChwa2cuc3RyaXAoKSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gbGlzdCBhbGwgYXZhaWxhYmxlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmZ1bGxwa2dsaXN0ID0gYXZhaWxhYmxlX3BrZ3MKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBzYXZlX3JwbXBvc3RpbnN0KHNlbGYsIHBrZyk6CisgICAgICAgIG1saWJzID0gKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX0dMT0JBTF9WQVJJQU5UUycsIEZhbHNlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIG5ld19wa2cgPSBwa2cKKyAgICAgICAgIyBSZW1vdmUgYW55IG11bHRpbGliIHByZWZpeCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgZm9yIG1saWIgaW4gbWxpYnM6CisgICAgICAgICAgICBpZiBtbGliIGluIHBrZzoKKyAgICAgICAgICAgICAgICBuZXdfcGtnID0gcGtnLnJlcGxhY2UobWxpYiArICctJywgJycpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBiYi5ub3RlKCcgICogcG9zdHBvbmluZyAlcycgJSBuZXdfcGtnKQorICAgICAgICBzYXZlZF9kaXIgPSBzZWxmLnRhcmdldF9yb290ZnMgKyBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMvJykgKyBuZXdfcGtnCisKKyAgICAgICAgY21kID0gc2VsZi5ycG1fY21kICsgJyAtcSAtLXNjcmlwdHMgLS1yb290ICcgKyBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgY21kICs9ICcgLS1kYnBhdGg9L3Zhci9saWIvcnBtICcgKyBuZXdfcGtnCisgICAgICAgIGNtZCArPSAnIHwgc2VkIC1uIC1lICIvXnBvc3RpbnN0YWxsIHNjcmlwdGxldCAodXNpbmcgLiopOiQvLC9eLiogc2NyaXB0bGV0ICh1c2luZyAuKik6JC8gey8uKi9wfSInCisgICAgICAgIGNtZCArPSAnIHwgc2VkIC1lICIvcG9zdGluc3RhbGwgc2NyaXB0bGV0ICh1c2luZyBcKC4qXCkpOiQvZCInCisgICAgICAgIGNtZCArPSAnIC1lICIvXi4qIHNjcmlwdGxldCAodXNpbmcgLiopOiQvZCIgPiAlcycgJSBzYXZlZF9kaXIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgICAgIG9zLmNobW9kKHNhdmVkX2RpciwgMDc1NSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiSW52b2tlIHNhdmVfcnBtcG9zdGluc3QgZmFpbGVkLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAnJydXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgdGFyZ2V0IHVzYWdlJycnCisgICAgZGVmIHJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywgJ3Zhci9saWIvc21hcnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLW5vbGlua3Rvcz0xJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLW5vcGFyZW50ZGlycz0xJykKKyAgICAgICAgZm9yIGkgaW4gc2VsZi5kLmdldFZhcignQkFEX1JFQ09NTUVOREFUSU9OUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2ZsYWcgLS1zZXQgaWdub3JlLXJlY29tbWVuZHMgJXMnICUgaSkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHJwbXN5cyB0eXBlPXJwbS1zeXMgLXknKQorCisgICAgJycnCisgICAgVGhlIHJwbSBkYiBsb2NrIGZpbGVzIHdlcmUgcHJvZHVjZWQgYWZ0ZXIgaW52b2tpbmcgcnBtIHRvIHF1ZXJ5IG9uCisgICAgYnVpbGQgc3lzdGVtLCBhbmQgdGhleSBjYXVzZWQgdGhlIHJwbSBvbiB0YXJnZXQgZGlkbid0IHdvcmssIHNvIHdlCisgICAgbmVlZCB0byB1bmxvY2sgdGhlIHJwbSBkYiBieSByZW1vdmluZyB0aGUgbG9jayBmaWxlcy4KKyAgICAnJycKKyAgICBkZWYgdW5sb2NrX3JwbV9kYihzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgcnBtIGRiIGxvY2sgZmlsZXMKKyAgICAgICAgcnBtX2RiX2xvY2tzID0gZ2xvYi5nbG9iKCclcy92YXIvbGliL3JwbS9fX2RiLionICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBmb3IgZiBpbiBycG1fZGJfbG9ja3M6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZiwgVHJ1ZSkKKworCitjbGFzcyBPcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBjb25maWdfZmlsZSwgYXJjaHMsIHRhc2tfbmFtZT0ndGFyZ2V0Jyk6CisgICAgICAgIHN1cGVyKE9wa2dQTSwgc2VsZikuX19pbml0X18oZCkKKworICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYuY29uZmlnX2ZpbGUgPSBjb25maWdfZmlsZQorICAgICAgICBzZWxmLnBrZ19hcmNocyA9IGFyY2hzCisgICAgICAgIHNlbGYudGFza19uYW1lID0gdGFza19uYW1lCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcigiREVQTE9ZX0RJUl9JUEsiLCBUcnVlKQorICAgICAgICBzZWxmLmRlcGxveV9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiZGVwbG95LmxvY2siKQorICAgICAgICBzZWxmLm9wa2dfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnIikKKyAgICAgICAgc2VsZi5vcGtnX2FyZ3MgPSAiLS12b2xhdGlsZS1jYWNoZSAtZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRhcmdldF9yb290ZnMpCisgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCisKKyAgICAgICAgb3BrZ19saWJfZGlyID0gc2VsZi5kLmdldFZhcignT1BLR0xJQkRJUicsIFRydWUpCisgICAgICAgIGlmIG9wa2dfbGliX2RpclswXSA9PSAiLyI6CisgICAgICAgICAgICBvcGtnX2xpYl9kaXIgPSBvcGtnX2xpYl9kaXJbMTpdCisKKyAgICAgICAgc2VsZi5vcGtnX2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfcm9vdGZzLCBvcGtnX2xpYl9kaXIsICJvcGtnIikKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5vcGtnX2RpcikKKworICAgICAgICBzZWxmLnNhdmVkX29wa2dfZGlyID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lcycgJSBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKQorCisgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpIG9yICIiKSAhPSAiMSI6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlnKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jdXN0b21fY29uZmlnKCkKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBPcGtnSW5kZXhlcihzZWxmLmQsIHNlbGYuZGVwbG95X2RpcikKKworICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgYSBwYWNrYWdlJ3Mgc3RhdHVzIGluIC92YXIvbGliL29wa2cvc3RhdHVzIGZpbGUuCisgICAgSWYgJ3BhY2thZ2VzJyBpcyBOb25lIHRoZW4gdGhlIG5ld19zdGF0dXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbAorICAgIHBhY2thZ2VzCisgICAgIiIiCisgICAgZGVmIG1hcmtfcGFja2FnZXMoc2VsZiwgc3RhdHVzX3RhZywgcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYub3BrZ19kaXIsICJzdGF0dXMiKQorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgInIiKSBhcyBzZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSArICIudG1wIiwgIncrIikgYXMgdG1wX3NmOgorICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShyZS5zdWIociJQYWNrYWdlOiAoLio/KVxuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogXDFcblwyU3RhdHVzOiBcMyVzIiAlIHN0YXR1c190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YucmVhZCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKHBhY2thZ2VzKS5fX25hbWVfXyAhPSAibGlzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIidwYWNrYWdlcycgc2hvdWxkIGJlIGEgbGlzdCBvYmplY3QiKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmUuc3ViKHIiUGFja2FnZTogJXNcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiAlIHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6ICVzXG5cMVN0YXR1czogXDIlcyIgJSAocGtnLCBzdGF0dXNfdGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpCisKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHN0YXR1cykKKworICAgICAgICBvcy5yZW5hbWUoc3RhdHVzX2ZpbGUgKyAiLnRtcCIsIHN0YXR1c19maWxlKQorCisgICAgZGVmIF9jcmVhdGVfY3VzdG9tX2NvbmZpZyhzZWxmKToKKyAgICAgICAgYmIubm90ZSgiQnVpbGRpbmcgZnJvbSBmZWVkcyBhY3RpdmF0ZWQhIikKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgIncrIikgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDEKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoImFyY2ggJXMgJWRcbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gKHNlbGYuZC5nZXRWYXIoJ0lQS19GRUVEX1VSSVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmZWVkX21hdGNoID0gcmUubWF0Y2goIl5bIFx0XSooLiopIyMoW14gXHRdKilbIFx0XSokIiwgbGluZSkKKworICAgICAgICAgICAgICAgIGlmIGZlZWRfbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZlZWRfbmFtZSA9IGZlZWRfbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgZmVlZF91cmkgPSBmZWVkX21hdGNoLmdyb3VwKDIpCisKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQWRkICVzIGZlZWQgd2l0aCBVUkwgJXMiICUgKGZlZWRfbmFtZSwgZmVlZF91cmkpKQorCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMvZ3ogJXMgJXNcbiIgJSAoZmVlZF9uYW1lLCBmZWVkX3VyaSkpCisKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQWxsb3cgdG8gdXNlIHBhY2thZ2UgZGVwbG95IGRpcmVjdG9yeSBjb250ZW50cyBhcyBxdWljayBkZXZlbC10ZXN0aW5nCisgICAgICAgICAgICBmZWVkLiBUaGlzIGNyZWF0ZXMgaW5kaXZpZHVhbCBmZWVkIGNvbmZpZ3MgZm9yIGVhY2ggYXJjaCBzdWJkaXIgb2YgdGhvc2UKKyAgICAgICAgICAgIHNwZWNpZmllZCBhcyBjb21wYXRpYmxlIGZvciB0aGUgY3VycmVudCBtYWNoaW5lLgorICAgICAgICAgICAgTk9URTogRGV2ZWxvcG1lbnQtaGVscGVyIGZlYXR1cmUsIE5PVCBhIGZ1bGwtZmxlZGdlZCBmZWVkLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCBUcnVlKSBvciAiIikgIT0gIiI6CisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgY2ZnX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigic3lzY29uZmRpciIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGtnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwtJXMtZmVlZC5jb25mIiAlIGFyY2gpCisKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmZ19maWxlX25hbWUsICJ3KyIpIGFzIGNmZ19maWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2ZpbGUud3JpdGUoInNyYy9neiBsb2NhbC0lcyAlcy8lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoKSkKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuY29uZmlnX2ZpbGUsICJ3KyIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgcHJpb3JpdHkgPSAxCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJhcmNoICVzICVkXG4iICUgKGFyY2gsIHByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBwcmlvcml0eSArPSA1CisKKyAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMgb2UgZmlsZTolc1xuIiAlIHNlbGYuZGVwbG95X2RpcikKKworICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwa2dzX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihwa2dzX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19maWxlLndyaXRlKCJzcmMgb2UtJXMgZmlsZTolc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBwa2dzX2RpcikpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcm9vdGZzX2NvbmZpZyA9IG9zLnBhdGguam9pbignJXMvZXRjL29wa2cvYmFzZS1mZWVkcy5jb25mJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50YXJnZXRfcm9vdGZzKQorCisgICAgICAgIHdpdGggb3Blbihyb290ZnNfY29uZmlnLCAidysiKSBhcyBjb25maWdfZmlsZToKKyAgICAgICAgICAgIHVyaV9pdGVyYXRvciA9IDAKKyAgICAgICAgICAgIGZvciB1cmkgaW4gc2VsZi5mZWVkX3VyaXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmdWxsX3VyaSA9IHVyaQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmVlZF9wcmVmaXg6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gb3MucGF0aC5qb2luKHVyaSwgc2VsZi5mZWVkX3ByZWZpeCkKKworICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgb3BrZyBmZWVkIHVybC0lcy0lZCAoJXMpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgdXJpX2l0ZXJhdG9yLCBmdWxsX3VyaSkpCisKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYy9neiB1cmktJXMtJWQgJXMvJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwgdXJpX2l0ZXJhdG9yLCBmdWxsX3VyaSwgYXJjaCkpCisgICAgICAgICAgICAgICAgdXJpX2l0ZXJhdG9yICs9IDEKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICBjbWQgPSAiJXMgJXMgdXBkYXRlIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUgdGhlIHBhY2thZ2UgaW5kZXggZmlsZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIGlmIGF0dGVtcHRfb25seSBhbmQgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAlcyIgJSAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIG9zLmVudmlyb25bJ0QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydPRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJUEtHX09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09QS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnSU5URVJDRVBUX0RJUiddID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmNlcHRfc2NyaXB0cyIpCisgICAgICAgIG9zLmVudmlyb25bJ05BVElWRV9ST09UJ10gPSBzZWxmLmQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLCBUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczogJXMiICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBpZiB3aXRoX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyAtLWZvcmNlLWRlcGVuZHMgLS1mb3JjZS1yZW1vdmUgLS1mb3JjZS1yZW1vdmFsLW9mLWRlcGVuZGVudC1wYWNrYWdlcyByZW1vdmUgJXMiICUgXAorICAgICAgICAgICAgICAgIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgJyAnLmpvaW4ocGtncykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMgLS1mb3JjZS1kZXBlbmRzIHJlbW92ZSAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHJlbW92ZSBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICByZXN1bHQgPSBzZWxmLmluZGV4ZXIud3JpdGVfaW5kZXgoKQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorCisgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJiLmZhdGFsKHJlc3VsdCkKKworICAgIGRlZiByZW1vdmVfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLm9wa2dfZGlyLCBUcnVlKQorICAgICAgICAjIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGJhY2ssIGl0J3MgbmVlZGVkIGJ5IFBNIGxvY2sKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYub3BrZ19kaXIpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLmNvbmZpZ19maWxlKS5saXN0KGZvcm1hdCkKKworICAgIGRlZiBoYW5kbGVfYmFkX3JlY29tbWVuZGF0aW9ucyhzZWxmKToKKyAgICAgICAgYmFkX3JlY29tbWVuZGF0aW9ucyA9IHNlbGYuZC5nZXRWYXIoIkJBRF9SRUNPTU1FTkRBVElPTlMiLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBiYWRfcmVjb21tZW5kYXRpb25zLnN0cmlwKCkgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzdGF0dXNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLm9wa2dfZGlyLCAic3RhdHVzIikKKworICAgICAgICAjIElmIHN0YXR1cyBmaWxlIGV4aXN0ZWQsIGl0IG1lYW5zIHRoZSBiYWQgcmVjb21tZW5kYXRpb25zIGhhcyBhbHJlYWR5CisgICAgICAgICMgYmVlbiBoYW5kbGVkCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXR1c19maWxlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbmZvICIgJSAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAidysiKSBhcyBzdGF0dXM6CisgICAgICAgICAgICBmb3IgcGtnIGluIGJhZF9yZWNvbW1lbmRhdGlvbnMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwa2dfaW5mbyA9IGNtZCArIHBrZworCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwa2dfaW5mby5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgcGFja2FnZSBpbmZvLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAocGtnX2luZm8sIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICAgICAgICAgaWYgb3V0cHV0ID09ICIiOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJJZ25vcmVkIGJhZCByZWNvbW1lbmRhdGlvbjogJyVzJyBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIHBhY2thZ2UiICUgcGtnKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlN0YXR1czoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy53cml0ZSgiU3RhdHVzOiBkZWluc3RhbGwgaG9sZCBub3QtaW5zdGFsbGVkXG4iKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgICAgICAgICAgICAgIyBBcHBlbmQgYSBibGFuayBsaW5lIGFmdGVyIGVhY2ggcGFja2FnZSBlbnRyeSB0byBlbnN1cmUgdGhhdCBpdAorICAgICAgICAgICAgICAgICMgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBlbnRyeQorICAgICAgICAgICAgICAgIHN0YXR1cy53cml0ZSgiXG4iKQorCisgICAgJycnCisgICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBkdW1teSBpbnN0YWxscyBwa2dzIGFuZCByZXR1cm5zIHRoZSBsb2cgb2Ygb3V0cHV0LgorICAgICcnJworICAgIGRlZiBkdW1teV9pbnN0YWxsKHNlbGYsIHBrZ3MpOgorICAgICAgICBpZiBsZW4ocGtncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQ3JlYXRlIGFuIHRlbXAgZGlyIGFzIG9wa2cgcm9vdCBmb3IgZHVtbXkgaW5zdGFsbGF0aW9uCisgICAgICAgIHRlbXBfcm9vdGZzID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9vcGtnJykKKyAgICAgICAgdGVtcF9vcGtnX2RpciA9IG9zLnBhdGguam9pbih0ZW1wX3Jvb3RmcywgJ3Zhci9saWIvb3BrZycpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0ZW1wX29wa2dfZGlyKQorCisgICAgICAgIG9wa2dfYXJncyA9ICItZiAlcyAtbyAlcyAiICUgKHNlbGYuY29uZmlnX2ZpbGUsIHRlbXBfcm9vdGZzKQorICAgICAgICBvcGtnX2FyZ3MgKz0gc2VsZi5kLmdldFZhcigiT1BLR19BUkdTIiwgVHJ1ZSkKKworICAgICAgICBjbWQgPSAiJXMgJXMgdXBkYXRlIiAlIChzZWxmLm9wa2dfY21kLCBvcGtnX2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gdXBkYXRlLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgIyBEdW1teSBpbnN0YWxsYXRpb24KKyAgICAgICAgY21kID0gIiVzICVzIC0tbm9hY3Rpb24gaW5zdGFsbCAlcyAiICUgKHNlbGYub3BrZ19jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGtnX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBkdW1teSBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHRlbXBfcm9vdGZzLCBUcnVlKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBiYWNrdXBfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgICMgU2F2ZSB0aGUgb3BrZ2xpYiBmb3IgaW5jcmVtZW50IGlwayBpbWFnZSBnZW5lcmF0aW9uCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuc2F2ZWRfb3BrZ19kaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2F2ZWRfb3BrZ19kaXIsIFRydWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLm9wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zYXZlZF9vcGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKyAgICBkZWYgcmVjb3Zlcl9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBNb3ZlIHRoZSBvcGtnbGliIGJhY2sKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9vcGtnX2Rpcik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLm9wa2dfZGlyKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5vcGtnX2RpciwgVHJ1ZSkKKworICAgICAgICAgICAgYmIubm90ZSgnUmVjb3ZlciBwYWNrYWdpbmcgZGF0YScpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5zYXZlZF9vcGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCisKKworY2xhc3MgRHBrZ1BNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgdGFyZ2V0X3Jvb3RmcywgYXJjaHMsIGJhc2VfYXJjaHMsIGFwdF9jb25mX2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1BNLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IHNlbGYuZC5nZXRWYXIoJ0RFUExPWV9ESVJfREVCJywgVHJ1ZSkKKyAgICAgICAgaWYgYXB0X2NvbmZfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IHNlbGYuZC5leHBhbmQoIiR7QVBUQ09ORl9UQVJHRVR9L2FwdCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFwdF9jb25mX2RpciA9IGFwdF9jb25mX2RpcgorICAgICAgICBzZWxmLmFwdF9jb25mX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJhcHQuY29uZiIpCisgICAgICAgIHNlbGYuYXB0X2dldF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImFwdC1nZXQiKQorCisgICAgICAgIHNlbGYuYXB0X2FyZ3MgPSBkLmdldFZhcigiQVBUX0FSR1MiLCBUcnVlKQorCisgICAgICAgIHNlbGYuYWxsX2FyY2hfbGlzdCA9IGFyY2hzLnNwbGl0KCkKKyAgICAgICAgYWxsX21sYl9wa2dfYXJjaF9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hbGxfYXJjaF9saXN0LmV4dGVuZChhcmNoIGZvciBhcmNoIGluIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCBpZiBhcmNoIG5vdCBpbiBzZWxmLmFsbF9hcmNoX2xpc3QpCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MoYXJjaHMsIGJhc2VfYXJjaHMpCisKKyAgICAgICAgc2VsZi5pbmRleGVyID0gRHBrZ0luZGV4ZXIoc2VsZi5kLCBzZWxmLmRlcGxveV9kaXIpCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIGEgcGFja2FnZSdzIHN0YXR1cyBpbiAvdmFyL2xpYi9kcGtnL3N0YXR1cyBmaWxlLgorICAgIElmICdwYWNrYWdlcycgaXMgTm9uZSB0aGVuIHRoZSBuZXdfc3RhdHVzIHdpbGwgYmUgYXBwbGllZCB0byBhbGwKKyAgICBwYWNrYWdlcworICAgICIiIgorICAgIGRlZiBtYXJrX3BhY2thZ2VzKHNlbGYsIHN0YXR1c190YWcsIHBhY2thZ2VzPU5vbmUpOgorICAgICAgICBzdGF0dXNfZmlsZSA9IHNlbGYudGFyZ2V0X3Jvb3RmcyArICIvdmFyL2xpYi9kcGtnL3N0YXR1cyIKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJyIikgYXMgc2Y6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUgKyAiLnRtcCIsICJ3KyIpIGFzIHRtcF9zZjoKKyAgICAgICAgICAgICAgICBpZiBwYWNrYWdlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICB0bXBfc2Yud3JpdGUocmUuc3ViKHIiUGFja2FnZTogKC4qPylcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6IFwxXG5cMlN0YXR1czogXDMlcyIgJSBzdGF0dXNfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmLnJlYWQoKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdHlwZShwYWNrYWdlcykuX19uYW1lX18gIT0gImxpc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIncGFja2FnZXMnIHNob3VsZCBiZSBhIGxpc3Qgb2JqZWN0IikKKworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlLnN1YihyIlBhY2thZ2U6ICVzXG4oKD86W15cbl0rXG4pKj8pU3RhdHVzOiAoLiopKD86dW5wYWNrZWR8aW5zdGFsbGVkKSIgJSBwa2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJQYWNrYWdlOiAlc1xuXDFTdGF0dXM6IFwyJXMiICUgKHBrZywgc3RhdHVzX3RhZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKQorCisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShzdGF0dXMpCisKKyAgICAgICAgb3MucmVuYW1lKHN0YXR1c19maWxlICsgIi50bXAiLCBzdGF0dXNfZmlsZSkKKworICAgICIiIgorICAgIFJ1biB0aGUgcHJlL3Bvc3QgaW5zdGFsbHMgZm9yIHBhY2thZ2UgInBhY2thZ2VfbmFtZSIuIElmIHBhY2thZ2VfbmFtZSBpcworICAgIE5vbmUsIHRoZW4gcnVuIGFsbCBwcmUvcG9zdCBpbnN0YWxsIHNjcmlwdGxldHMuCisgICAgIiIiCisgICAgZGVmIHJ1bl9wcmVfcG9zdF9pbnN0YWxscyhzZWxmLCBwYWNrYWdlX25hbWU9Tm9uZSk6CisgICAgICAgIGluZm9fZGlyID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvaW5mbyIKKyAgICAgICAgc3VmZml4ZXMgPSBbKCIucHJlaW5zdCIsICJQcmVpbnN0YWxsIiksICgiLnBvc3RpbnN0IiwgIlBvc3RpbnN0YWxsIildCisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IFtdCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAiciIpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0YXR1cy5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeUGFja2FnZTogKC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3MuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyAgICAgICAgaWYgcGFja2FnZV9uYW1lIGlzIG5vdCBOb25lIGFuZCBub3QgcGFja2FnZV9uYW1lIGluIGluc3RhbGxlZF9wa2dzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnRCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lQS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT1BLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJTlRFUkNFUFRfRElSJ10gPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKyAgICAgICAgb3MuZW52aXJvblsnTkFUSVZFX1JPT1QnXSA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisKKyAgICAgICAgZmFpbGVkX3BrZ3MgPSBbXQorICAgICAgICBmb3IgcGtnX25hbWUgaW4gaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICAgICAgICAgIHBfZnVsbCA9IG9zLnBhdGguam9pbihpbmZvX2RpciwgcGtnX25hbWUgKyBzdWZmaXhbMF0pCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocF9mdWxsKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICVzIGZvciBwYWNrYWdlOiAlcyAuLi4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWZmaXhbMV0ubG93ZXIoKSwgcGtnX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQocF9mdWxsLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiJXMgZm9yIHBhY2thZ2UgJXMgZmFpbGVkIHdpdGggJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VmZml4WzFdLCBwa2dfbmFtZSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRfcGtncy5hcHBlbmQocGtnX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGxlbihmYWlsZWRfcGtncyk6CisgICAgICAgICAgICBzZWxmLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgZmFpbGVkX3BrZ3MpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCisKKyAgICAgICAgY21kID0gIiVzIHVwZGF0ZSIgJSBzZWxmLmFwdF9nZXRfY21kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSBpbmRleCBmaWxlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBpZiBhdHRlbXB0X29ubHkgYW5kIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLS1mb3JjZS15ZXMgLS1hbGxvdy11bmF1dGhlbnRpY2F0ZWQgJXMiICUgXAorICAgICAgICAgICAgICAoc2VsZi5hcHRfZ2V0X2NtZCwgc2VsZi5hcHRfYXJncywgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOiAlcyIgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgKGJiLmZhdGFsLCBiYi5ub3RlKVthdHRlbXB0X29ubHldKCJVbmFibGUgdG8gaW5zdGFsbCBwYWNrYWdlcy4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgICMgcmVuYW1lICouZHBrZy1uZXcgZmlsZXMvZGlycworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRhcmdldF9yb290ZnMpOgorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIG5ld19kaXIgPSByZS5zdWIoIlwuZHBrZy1uZXciLCAiIiwgZGlyKQorICAgICAgICAgICAgICAgIGlmIGRpciAhPSBuZXdfZGlyOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHJvb3QsIGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwgbmV3X2RpcikpCisKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG5ld19maWxlID0gcmUuc3ViKCJcLmRwa2ctbmV3IiwgIiIsIGZpbGUpCisgICAgICAgICAgICAgICAgaWYgZmlsZSAhPSBuZXdfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihyb290LCBmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCBuZXdfZmlsZSkpCisKKworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGlmIHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisgICAgICAgICAgICBjbWQgPSAiJXMgcHVyZ2UgJXMiICUgKHNlbGYuYXB0X2dldF9jbWQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzIC0tYWRtaW5kaXI9JXMvdmFyL2xpYi9kcGtnIC0taW5zdGRpcj0lcyIgXAorICAgICAgICAgICAgICAgICAgIiAtUCAtLWZvcmNlLWRlcGVuZHMgJXMiICUgXAorICAgICAgICAgICAgICAgICAgKGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZHBrZyIpLAorICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3Rmcywgc2VsZi50YXJnZXRfcm9vdGZzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIGluc2VydF9mZWVkc191cmlzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZlZWRfdXJpcyA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNvdXJjZXNfY29uZiA9IG9zLnBhdGguam9pbigiJXMvZXRjL2FwdC9zb3VyY2VzLmxpc3QiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYudGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgYXJjaF9saXN0ID0gW10KKworICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLmFsbF9hcmNoX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZXNfY29uZiwgIncrIikgYXMgc291cmNlc19maWxlOgorICAgICAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mZWVkX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgnTm90ZTogYWRkaW5nIGRwa2cgY2hhbm5lbCBhdCAoJXMpJyAlIHVyaSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgJXMvJXMgLi9cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bGxfdXJpLCBhcmNoKSkKKworICAgIGRlZiBfY3JlYXRlX2NvbmZpZ3Moc2VsZiwgYXJjaHMsIGJhc2VfYXJjaHMpOgorICAgICAgICBiYXNlX2FyY2hzID0gcmUuc3ViKCJfIiwgIi0iLCBiYXNlX2FyY2hzKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYXB0X2NvbmZfZGlyKToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmFwdF9jb25mX2RpciwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpciArICIvbGlzdHMvcGFydGlhbC8iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIgKyAiL2FwdC5jb25mLmQvIikKKworICAgICAgICBhcmNoX2xpc3QgPSBbXQorICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLmFsbF9hcmNoX2xpc3Q6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGFyY2gpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInByZWZlcmVuY2VzIiksICJ3KyIpIGFzIHByZWZzX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDgwMQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgIHByZWZzX2ZpbGUud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlOiAqXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW46IHJlbGVhc2UgbD0lc1xuIgorICAgICAgICAgICAgICAgICAgICAiUGluLVByaW9yaXR5OiAlZFxuXG4iICUgKGFyY2gsIHByaW9yaXR5KSkKKworICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgcGtnX2V4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dfZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHByZWZzX2ZpbGUud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlOiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAiUGluOiByZWxlYXNlICpcbiIKKyAgICAgICAgICAgICAgICAgICAgIlBpbi1Qcmlvcml0eTogLTFcblxuIiAlIHBrZykKKworICAgICAgICBhcmNoX2xpc3QucmV2ZXJzZSgpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInNvdXJjZXMubGlzdCIpLCAidysiKSBhcyBzb3VyY2VzX2ZpbGU6CisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgc291cmNlc19maWxlLndyaXRlKCJkZWIgZmlsZTolcy8gLi9cbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSkKKworICAgICAgICBiYXNlX2FyY2hfbGlzdCA9IGJhc2VfYXJjaHMuc3BsaXQoKQorICAgICAgICBtdWx0aWxpYl92YXJpYW50cyA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSk7CisgICAgICAgIGZvciB2YXJpYW50IGluIG11bHRpbGliX3ZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgICAgICBpZiB2YXJpYW50ID09ICJsaWIzMiI6CisgICAgICAgICAgICAgICAgYmFzZV9hcmNoX2xpc3QuYXBwZW5kKCJpMzg2IikKKyAgICAgICAgICAgIGVsaWYgdmFyaWFudCA9PSAibGliNjQiOgorICAgICAgICAgICAgICAgIGJhc2VfYXJjaF9saXN0LmFwcGVuZCgiYW1kNjQiKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmFwdF9jb25mX2ZpbGUsICJ3KyIpIGFzIGFwdF9jb25mOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZC5leHBhbmQoIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfS9hcHQvYXB0LmNvbmYuc2FtcGxlIikpIGFzIGFwdF9jb25mX3NhbXBsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBhcHRfY29uZl9zYW1wbGUucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBtYXRjaF9hcmNoID0gcmUubWF0Y2goIiAgQXJjaGl0ZWN0dXJlIFwiLipcIjskIiwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyA9ICIiCisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoX2FyY2g6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFzZV9hcmNoIGluIGJhc2VfYXJjaF9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMgKz0gIlwiJXNcIjsiICUgYmFzZV9hcmNoCisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZSgiICBBcmNoaXRlY3R1cmVzIHslc307XG4iICUgYXJjaGl0ZWN0dXJlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZSgiICBBcmNoaXRlY3R1cmUgXCIlc1wiO1xuIiAlIGJhc2VfYXJjaHMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjUk9PVEZTIyIsIHNlbGYudGFyZ2V0X3Jvb3RmcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIiNBUFRDT05GIyIsIHNlbGYuYXB0X2NvbmZfZGlyLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYXB0X2NvbmYud3JpdGUobGluZSArICJcbiIpCisKKyAgICAgICAgdGFyZ2V0X2Rwa2dfZGlyID0gIiVzL3Zhci9saWIvZHBrZyIgJSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJpbmZvIikpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJ1cGRhdGVzIikpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJzdGF0dXMiKSk6CisgICAgICAgICAgICBvcGVuKG9zLnBhdGguam9pbih0YXJnZXRfZHBrZ19kaXIsICJzdGF0dXMiKSwgIncrIikuY2xvc2UoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImF2YWlsYWJsZSIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImF2YWlsYWJsZSIpLCAidysiKS5jbG9zZSgpCisKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdvcGtnbGliZGlyJywgVHJ1ZSkpLCBUcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvIiwgVHJ1ZSkKKworICAgIGRlZiBmaXhfYnJva2VuX2RlcGVuZGVuY2llcyhzZWxmKToKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgY21kID0gIiVzICVzIC1mIGluc3RhbGwiICUgKHNlbGYuYXB0X2dldF9jbWQsIHNlbGYuYXB0X2FyZ3MpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGZpeCBicm9rZW4gZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KHNlbGYuZCwgc2VsZi50YXJnZXRfcm9vdGZzKS5saXN0KCkKKworCitkZWYgZ2VuZXJhdGVfaW5kZXhfZmlsZXMoZCk6CisgICAgY2xhc3NlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFX0NMQVNTRVMnLCBUcnVlKS5yZXBsYWNlKCJwYWNrYWdlXyIsICIiKS5zcGxpdCgpCisKKyAgICBpbmRleGVyX21hcCA9IHsKKyAgICAgICAgInJwbSI6IChScG1JbmRleGVyLCBkLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKSksCisgICAgICAgICJpcGsiOiAoT3BrZ0luZGV4ZXIsIGQuZ2V0VmFyKCdERVBMT1lfRElSX0lQSycsIFRydWUpKSwKKyAgICAgICAgImRlYiI6IChEcGtnSW5kZXhlciwgZC5nZXRWYXIoJ0RFUExPWV9ESVJfREVCJywgVHJ1ZSkpCisgICAgfQorCisgICAgcmVzdWx0ID0gTm9uZQorCisgICAgZm9yIHBrZ19jbGFzcyBpbiBjbGFzc2VzOgorICAgICAgICBpZiBub3QgcGtnX2NsYXNzIGluIGluZGV4ZXJfbWFwOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmRleGVyX21hcFtwa2dfY2xhc3NdWzFdKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGluZGV4ZXJfbWFwW3BrZ19jbGFzc11bMF0oZCwgaW5kZXhlcl9tYXBbcGtnX2NsYXNzXVsxXSkud3JpdGVfaW5kZXgoKQorCisgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGlzIGFzIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGZyb20gb3V0c2lkZSBiaXRiYWtlCisgICAgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgIiIiCisgICAgVEJECisgICAgIiIiCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weSBiL21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9wYWNrYWdlZGF0YS5weQpAQCAtMCwwICsxLDk0IEBACitpbXBvcnQgY29kZWNzCisKK2RlZiBwYWNrYWdlZChwa2csIGQpOgorICAgIHJldHVybiBvcy5hY2Nlc3MoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkgKyAnLnBhY2thZ2VkJywgb3MuUl9PSykKKworZGVmIHJlYWRfcGtnZGF0YWZpbGUoZm4pOgorICAgIHBrZ2RhdGEgPSB7fQorCisgICAgZGVmIGRlY29kZShzdHIpOgorICAgICAgICBjID0gY29kZWNzLmdldGRlY29kZXIoInN0cmluZ19lc2NhcGUiKQorICAgICAgICByZXR1cm4gYyhzdHIpWzBdCisKKyAgICBpZiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgZiA9IG9wZW4oZm4sICdyJykKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByID0gcmUuY29tcGlsZSgiKFteOl0rKTpccyooLiopIikKKyAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICBtID0gci5tYXRjaChsKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBwa2dkYXRhW20uZ3JvdXAoMSldID0gZGVjb2RlKG0uZ3JvdXAoMikpCisKKyAgICByZXR1cm4gcGtnZGF0YQorCitkZWYgZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCk6CisgICAgcmV0dXJuIGQuZXhwYW5kKCcke1BLR0RBVEFfRElSfS9ydW50aW1lLyVzJyAlIHBrZykKKworZGVmIGhhc19zdWJwa2dkYXRhKHBrZywgZCk6CisgICAgcmV0dXJuIG9zLmFjY2VzcyhnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKSwgb3MuUl9PSykKKworZGVmIHJlYWRfc3VicGtnZGF0YShwa2csIGQpOgorICAgIHJldHVybiByZWFkX3BrZ2RhdGFmaWxlKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpKQorCitkZWYgaGFzX3BrZ2RhdGEocG4sIGQpOgorICAgIGZuID0gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9LyVzJyAlIHBuKQorICAgIHJldHVybiBvcy5hY2Nlc3MoZm4sIG9zLlJfT0spCisKK2RlZiByZWFkX3BrZ2RhdGEocG4sIGQpOgorICAgIGZuID0gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9LyVzJyAlIHBuKQorICAgIHJldHVybiByZWFkX3BrZ2RhdGFmaWxlKGZuKQorCisjCisjIENvbGxhcHNlIEZPT19wa2cgdmFyaWFibGVzIGludG8gRk9PCisjCitkZWYgcmVhZF9zdWJwa2dkYXRhX2RpY3QocGtnLCBkKToKKyAgICByZXQgPSB7fQorICAgIHN1YmQgPSByZWFkX3BrZ2RhdGFmaWxlKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpKQorICAgIGZvciB2YXIgaW4gc3ViZDoKKyAgICAgICAgbmV3dmFyID0gdmFyLnJlcGxhY2UoIl8iICsgcGtnLCAiIikKKyAgICAgICAgaWYgbmV3dmFyID09IHZhciBhbmQgdmFyICsgIl8iICsgcGtnIGluIHN1YmQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByZXRbbmV3dmFyXSA9IHN1YmRbdmFyXQorICAgIHJldHVybiByZXQKKworZGVmIF9wa2dtYXAoZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHBhY2thZ2UgdG8gcmVjaXBlIG5hbWUuIiIiCisKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkKKworICAgIHBrZ21hcCA9IHt9CisgICAgdHJ5OgorICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIocGtnZGF0YWRpcikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgYmIud2FybigiTm8gZmlsZXMgaW4gJXM/IiAlIHBrZ2RhdGFkaXIpCisgICAgICAgIGZpbGVzID0gW10KKworICAgIGZvciBwbiBpbiBmaWx0ZXIobGFtYmRhIGY6IG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwa2dkYXRhZGlyLCBmKSksIGZpbGVzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnZGF0YSA9IHJlYWRfcGtnZGF0YWZpbGUob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIHBuKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHBhY2thZ2VzID0gcGtnZGF0YS5nZXQoIlBBQ0tBR0VTIikgb3IgIiIKKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgcGtnbWFwW3BrZ10gPSBwbgorCisgICAgcmV0dXJuIHBrZ21hcAorCitkZWYgcGtnbWFwKGQpOgorICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBwYWNrYWdlIHRvIHJlY2lwZSBuYW1lLgorICAgIENhY2hlIHRoZSBtYXBwaW5nIGluIHRoZSBtZXRhZGF0YSIiIgorCisgICAgcGtnbWFwX2RhdGEgPSBkLmdldFZhcigiX19wa2dtYXBfZGF0YSIsIEZhbHNlKQorICAgIGlmIHBrZ21hcF9kYXRhIGlzIE5vbmU6CisgICAgICAgIHBrZ21hcF9kYXRhID0gX3BrZ21hcChkKQorICAgICAgICBkLnNldFZhcigiX19wa2dtYXBfZGF0YSIsIHBrZ21hcF9kYXRhKQorCisgICAgcmV0dXJuIHBrZ21hcF9kYXRhCisKK2RlZiByZWNpcGVuYW1lKHBrZywgZCk6CisgICAgIiIiUmV0dXJuIHRoZSByZWNpcGUgbmFtZSBmb3IgdGhlIGdpdmVuIGJpbmFyeSBwYWNrYWdlIG5hbWUuIiIiCisKKyAgICByZXR1cm4gcGtnbWFwKGQpLmdldChwa2cpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYWNrYWdlZ3JvdXAucHkgYi9tZXRhL2xpYi9vZS9wYWNrYWdlZ3JvdXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlYjQyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weQpAQCAtMCwwICsxLDM2IEBACitpbXBvcnQgaXRlcnRvb2xzCisKK2RlZiBpc19vcHRpb25hbChmZWF0dXJlLCBkKToKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJGRUFUVVJFX1BBQ0tBR0VTXyVzIiAlIGZlYXR1cmUsIFRydWUpCisgICAgaWYgcGFja2FnZXM6CisgICAgICAgIHJldHVybiBib29sKGQuZ2V0VmFyRmxhZygiRkVBVFVSRV9QQUNLQUdFU18lcyIgJSBmZWF0dXJlLCAib3B0aW9uYWwiKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYm9vbChkLmdldFZhckZsYWcoIlBBQ0tBR0VfR1JPVVBfJXMiICUgZmVhdHVyZSwgIm9wdGlvbmFsIikpCisKK2RlZiBwYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgZm9yIGZlYXR1cmUgaW4gZmVhdHVyZXM6CisgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIkZFQVRVUkVfUEFDS0FHRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcigiUEFDS0FHRV9HUk9VUF8lcyIgJSBmZWF0dXJlLCBUcnVlKQorICAgICAgICBmb3IgcGtnIGluIChwYWNrYWdlcyBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIHlpZWxkIHBrZworCitkZWYgcmVxdWlyZWRfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIHJlcSA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogbm90IGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpLCBmZWF0dXJlcykKKyAgICByZXR1cm4gcGFja2FnZXMocmVxLCBkKQorCitkZWYgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIG9wdCA9IGZpbHRlcihsYW1iZGEgZmVhdHVyZTogaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJldHVybiBwYWNrYWdlcyhvcHQsIGQpCisKK2RlZiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgIHJldHVybiBpdGVydG9vbHMuY2hhaW4ocmVxdWlyZWRfcGFja2FnZXMoZmVhdHVyZXMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcGFja2FnZXMoZmVhdHVyZXMsIGQpKQorCitkZWYgYWN0aXZlX3JlY2lwZXMoZmVhdHVyZXMsIGQpOgorICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgZm9yIHBrZyBpbiBhY3RpdmVfcGFja2FnZXMoZmVhdHVyZXMsIGQpOgorICAgICAgICByZWNpcGUgPSBvZS5wYWNrYWdlZGF0YS5yZWNpcGVuYW1lKHBrZywgZCkKKyAgICAgICAgaWYgcmVjaXBlOgorICAgICAgICAgICAgeWllbGQgcmVjaXBlCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYXRjaC5weSBiL21ldGEvbGliL29lL3BhdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOGJmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9wYXRjaC5weQpAQCAtMCwwICsxLDY1OSBAQAoraW1wb3J0IG9lLnBhdGgKKworY2xhc3MgTm90Rm91bmRFcnJvcihiYi5CQkhhbmRsZWRFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiRXJyb3I6ICVzIG5vdCBmb3VuZC4iICUgc2VsZi5wYXRoCisKK2NsYXNzIENtZEVycm9yKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRzdGF0dXMsIG91dHB1dCk6CisgICAgICAgIHNlbGYuc3RhdHVzID0gZXhpdHN0YXR1cworICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWFuZCBFcnJvcjogZXhpdCBzdGF0dXM6ICVkICBPdXRwdXQ6XG4lcyIgJSAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCisKK2RlZiBydW5jbWQoYXJncywgZGlyID0gTm9uZSk6CisgICAgaW1wb3J0IHBpcGVzCisKKyAgICBpZiBkaXI6CisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgcmFpc2UgTm90Rm91bmRFcnJvcihkaXIpCisgICAgICAgIG9zLmNoZGlyKGRpcikKKyAgICAgICAgIyBwcmludCgiY3dkOiAlcyAtPiAlcyIgJSAob2xkZGlyLCBkaXIpKQorCisgICAgdHJ5OgorICAgICAgICBhcmdzID0gWyBwaXBlcy5xdW90ZShzdHIoYXJnKSkgZm9yIGFyZyBpbiBhcmdzIF0KKyAgICAgICAgY21kID0gIiAiLmpvaW4oYXJncykKKyAgICAgICAgIyBwcmludCgiY21kOiAlcyIgJSBjbWQpCisgICAgICAgIChleGl0c3RhdHVzLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgZXhpdHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgQ21kRXJyb3IoZXhpdHN0YXR1cyA+PiA4LCBvdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRpcjoKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKworY2xhc3MgUGF0Y2hFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUGF0Y2ggRXJyb3I6ICVzIiAlIHNlbGYubXNnCisKK2NsYXNzIFBhdGNoU2V0KG9iamVjdCk6CisgICAgZGVmYXVsdHMgPSB7CisgICAgICAgICJzdHJpcHBhdGgiOiAxCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIHNlbGYuZGlyID0gZGlyCisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wYXRjaGVzID0gW10KKyAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgIGRlZiBjdXJyZW50KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY3VycmVudAorCisgICAgZGVmIENsZWFuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2xlYW4gb3V0IHRoZSBwYXRjaCBzZXQuICBHZW5lcmFsbHkgaW5jbHVkZXMgdW5hcHBseWluZyBhbGwKKyAgICAgICAgcGF0Y2hlcyBhbmQgd2lwaW5nIG91dCBhbGwgYXNzb2NpYXRlZCBtZXRhZGF0YS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIEltcG9ydChzZWxmLCBwYXRjaCwgZm9yY2UpOgorICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KCJmaWxlIik6CisgICAgICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KCJyZW1vdGUiKToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJQYXRjaCBmaWxlIG11c3QgYmUgc3BlY2lmaWVkIGluIHBhdGNoIGltcG9ydC4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCkKKworICAgICAgICBmb3IgcGFyYW0gaW4gUGF0Y2hTZXQuZGVmYXVsdHM6CisgICAgICAgICAgICBpZiBub3QgcGF0Y2guZ2V0KHBhcmFtKToKKyAgICAgICAgICAgICAgICBwYXRjaFtwYXJhbV0gPSBQYXRjaFNldC5kZWZhdWx0c1twYXJhbV0KKworICAgICAgICBpZiBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgcGF0Y2hbImZpbGUiXSA9IGJiLmRhdGEuZXhwYW5kKGJiLmZldGNoMi5sb2NhbHBhdGgocGF0Y2hbInJlbW90ZSJdLCBzZWxmLmQpLCBzZWxmLmQpCisKKyAgICAgICAgcGF0Y2hbImZpbGVtZDUiXSA9IGJiLnV0aWxzLm1kNV9maWxlKHBhdGNoWyJmaWxlIl0pCisKKyAgICBkZWYgUHVzaChzZWxmLCBmb3JjZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJlZnJlc2goc2VsZiwgcmVtb3RlID0gTm9uZSwgYWxsID0gTm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRQYXRjaGVkRmlsZXMocGF0Y2hmaWxlLCBzdHJpcGxldmVsLCBzcmNkaXI9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZWFkIGEgcGF0Y2ggZmlsZSBhbmQgZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGl0IHdpbGwgbW9kaWZ5LgorICAgICAgICBQYXJhbXM6CisgICAgICAgICAgICBwYXRjaGZpbGU6IHRoZSBwYXRjaCBmaWxlIHRvIHJlYWQKKyAgICAgICAgICAgIHN0cmlwbGV2ZWw6IHRoZSBzdHJpcCBsZXZlbCBhdCB3aGljaCB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gYmUgYXBwbGllZAorICAgICAgICAgICAgc3JjZGlyOiBvcHRpb25hbCBwYXRoIHRvIGpvaW4gb250byB0aGUgcGF0Y2hlZCBmaWxlIHBhdGhzCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGxpc3Qgb2YgdHVwbGVzIG9mIGZpbGUgcGF0aCBhbmQgY2hhbmdlIG1vZGUgKCdBJyBmb3IgYWRkLAorICAgICAgICAgICAgJ0QnIGZvciBkZWxldGUgb3IgJ00nIGZvciBtb2RpZnkpCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiBwYXRjaGVkcGF0aChwYXRjaGxpbmUpOgorICAgICAgICAgICAgZmlsZXB0aCA9IHBhdGNobGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICBpZiBmaWxlcHRoLmVuZHN3aXRoKCcvZGV2L251bGwnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJy9kZXYvbnVsbCcKKyAgICAgICAgICAgIGZpbGVzcGxpdCA9IGZpbGVwdGguc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgaWYgc3RyaXBsZXZlbCA+IGxlbihmaWxlc3BsaXQpOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCdQYXRjaCAlcyBoYXMgaW52YWxpZCBzdHJpcCBsZXZlbCAlZCcgJSAocGF0Y2hmaWxlLCBzdHJpcGxldmVsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIG9zLnNlcC5qb2luKGZpbGVzcGxpdFtzdHJpcGxldmVsOl0pCisKKyAgICAgICAgY29waWVkbW9kZSA9IEZhbHNlCisgICAgICAgIGZpbGVsaXN0ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSkgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLS0gJyk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNocHRoID0gcGF0Y2hlZHBhdGgobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNocHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgY29waWVkbW9kZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IHBhdGNocHRoCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJysrKyAnKToKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gcGF0Y2hlZHBhdGgobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFkZGVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJyoqKiAnKToKKyAgICAgICAgICAgICAgICAgICAgY29waWVkbW9kZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVtb3ZlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBOb25lCisKKyAgICAgICAgICAgICAgICBpZiBhZGRlZGZpbGUgYW5kIHJlbW92ZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVkZmlsZSA9PSAnL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnQScKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhZGRlZGZpbGUgPT0gJy9kZXYvbnVsbCc6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ0QnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gJ00nCisgICAgICAgICAgICAgICAgICAgIGlmIHNyY2RpcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzcmNkaXIsIGFkZGVkZmlsZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IGFkZGVkZmlsZQorICAgICAgICAgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoKGZ1bGxwYXRoLCBtb2RlKSkKKworICAgICAgICByZXR1cm4gZmlsZWxpc3QKKworCitjbGFzcyBQYXRjaFRyZWUoUGF0Y2hTZXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFNldC5fX2luaXRfXyhzZWxmLCBkaXIsIGQpCisgICAgICAgIHNlbGYucGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJykKKyAgICAgICAgc2VsZi5zZXJpZXNwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycsICdzZXJpZXMnKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5wYXRjaGRpcikKKworICAgIGRlZiBfYXBwZW5kUGF0Y2hGaWxlKHNlbGYsIHBhdGNoLCBzdHJpcHBhdGgpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAnYScpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpICsgIiwiICsgc3RyaXBwYXRoICsgIlxuIikKKyAgICAgICAgc2hlbGxjbWQgPSBbImNhdCIsIHBhdGNoLCAiPiIgLCBzZWxmLnBhdGNoZGlyICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZShwYXRjaCldCisgICAgICAgIHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICBkZWYgX3JlbW92ZVBhdGNoKHNlbGYsIHApOgorICAgICAgICBwYXRjaCA9IHt9CisgICAgICAgIHBhdGNoWydmaWxlJ10gPSBwLnNwbGl0KCIsIilbMF0KKyAgICAgICAgcGF0Y2hbJ3N0cmlwcGF0aCddID0gcC5zcGxpdCgiLCIpWzFdCisgICAgICAgIHNlbGYuX2FwcGx5cGF0Y2gocGF0Y2gsIEZhbHNlLCBUcnVlKQorCisgICAgZGVmIF9yZW1vdmVQYXRjaEZpbGUoc2VsZiwgYWxsID0gRmFsc2UpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5zZXJpZXNwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAncisnKSBhcyBmOgorICAgICAgICAgICAgcGF0Y2hlcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgZm9yIHAgaW4gcmV2ZXJzZWQocGF0Y2hlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlUGF0Y2gob3MucGF0aC5qb2luKHNlbGYucGF0Y2hkaXIsIHAuc3RyaXAoKSkpCisgICAgICAgICAgICBwYXRjaGVzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoKG9zLnBhdGguam9pbihzZWxmLnBhdGNoZGlyLCBwYXRjaGVzWy0xXS5zdHJpcCgpKSkKKyAgICAgICAgICAgIHBhdGNoZXMucG9wKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2VyaWVzcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZm9yIHAgaW4gcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHApCisgICAgICAgICAKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSA9IE5vbmUpOgorICAgICAgICAiIiIiIiIKKyAgICAgICAgUGF0Y2hTZXQuSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaSA9IHNlbGYuX2N1cnJlbnQgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpID0gMAorICAgICAgICBzZWxmLnBhdGNoZXMuaW5zZXJ0KGksIHBhdGNoKQorCisgICAgZGVmIF9hcHBseXBhdGNoKHNlbGYsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBzaGVsbGNtZCA9IFsiY2F0IiwgcGF0Y2hbJ2ZpbGUnXSwgInwiLCAicGF0Y2giLCAiLXAiLCBwYXRjaFsnc3RyaXBwYXRoJ11dCisgICAgICAgIGlmIHJldmVyc2U6CisgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy1SJykKKworICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuICJzaCIgKyAiLWMiICsgIiAiLmpvaW4oc2hlbGxjbWQpCisKKyAgICAgICAgaWYgbm90IGZvcmNlOgorICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKCctLWRyeS1ydW4nKQorCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzaGVsbGNtZC5wb3AobGVuKHNoZWxsY21kKSAtIDEpCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisKKyAgICAgICAgaWYgbm90IHJldmVyc2U6CisgICAgICAgICAgICBzZWxmLl9hcHBlbmRQYXRjaEZpbGUocGF0Y2hbJ2ZpbGUnXSwgcGF0Y2hbJ3N0cmlwcGF0aCddKQorCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlID0gRmFsc2UsIGFsbCA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgYmIubm90ZSgic2VsZi5fY3VycmVudCBpcyAlcyIgJSBzZWxmLl9jdXJyZW50KQorICAgICAgICBiYi5ub3RlKCJwYXRjaGVzIGlzICVzIiAlIHNlbGYucGF0Y2hlcykKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgZm9yIGkgaW4gc2VsZi5wYXRjaGVzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoImFwcGx5aW5nIHBhdGNoICVzIiAlIGkpCisgICAgICAgICAgICAgICAgc2VsZi5fYXBwbHlwYXRjaChpLCBmb3JjZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gc2VsZi5fY3VycmVudCArIDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV4dCA9IDAKKworICAgICAgICAgICAgYmIubm90ZSgiYXBwbHlpbmcgcGF0Y2ggJXMiICUgc2VsZi5wYXRjaGVzW25leHRdKQorICAgICAgICAgICAgcmV0ID0gc2VsZi5fYXBwbHlwYXRjaChzZWxmLnBhdGNoZXNbbmV4dF0sIGZvcmNlKQorCisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gbmV4dAorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSA9IE5vbmUsIGFsbCA9IE5vbmUpOgorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaEZpbGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaEZpbGUoRmFsc2UpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgLSAxCisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgICIiIiIiIgorICAgICAgICBzZWxmLlBvcChhbGw9VHJ1ZSkKKworY2xhc3MgR2l0QXBwbHlUcmVlKFBhdGNoVHJlZSk6CisgICAgcGF0Y2hfbGluZV9wcmVmaXggPSAnJSUgb3JpZ2luYWwgcGF0Y2gnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKKyAgICAgICAgUGF0Y2hUcmVlLl9faW5pdF9fKHNlbGYsIGRpciwgZCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBFeHRyYWN0IGp1c3QgdGhlIGhlYWRlciBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgYSBwYXRjaCBmaWxlCisgICAgICAgICIiIgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHdpdGggb3BlbihwYXRjaGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdJbmRleDogJykgb3IgbGluZS5zdGFydHN3aXRoKCdkaWZmIC0nKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJlcGFyZUNvbW1pdChwYXRjaGZpbGUpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIGdpdCBjb21taXQgY29tbWFuZCBsaW5lIGJhc2VkIG9uIHRoZSBoZWFkZXIgZnJvbSBhIHBhdGNoIGZpbGUKKyAgICAgICAgKHR5cGljYWxseSB0aGlzIGlzIHVzZWZ1bCBmb3IgcGF0Y2hlcyB0aGF0IGNhbm5vdCBiZSBhcHBsaWVkIHdpdGggImdpdCBhbSIgZHVlIHRvIGZvcm1hdHRpbmcpCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGF1dGhvcl9yZSA9IHJlLmNvbXBpbGUoJ1tcUyBdKyA8XFMrQFxTK1wuXFMrPicpCisgICAgICAgICMgUHJvY2VzcyBwYXRjaCBoZWFkZXIgYW5kIGV4dHJhY3QgdXNlZnVsIGluZm9ybWF0aW9uCisgICAgICAgIGxpbmVzID0gR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaEhlYWRlcihwYXRjaGZpbGUpCisgICAgICAgIG91dGxpbmVzID0gW10KKyAgICAgICAgYXV0aG9yID0gTm9uZQorICAgICAgICBkYXRlID0gTm9uZQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU3ViamVjdDogJyk6CisgICAgICAgICAgICAgICAgc3ViamVjdCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXQorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBbUEFUQ0hdW29lLWNvcmVdIGV0Yy4KKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gcmUuc3ViKHInXFsuKz9cXVxzKicsICcnLCBzdWJqZWN0KQorICAgICAgICAgICAgICAgIG91dGxpbmVzLmluc2VydCgwLCAnJXNcblxuJyAlIHN1YmplY3Quc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGcm9tOiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ0F1dGhvcjogJyk6CisgICAgICAgICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgICAgICMgZ2l0IGlzIGZ1c3N5IGFib3V0IGF1dGhvciBmb3JtYXR0aW5nIGkuZS4gaXQgbXVzdCBiZSBOYW1lIDxlbWFpbEBkb21haW4+CisgICAgICAgICAgICAgICAgaWYgYXV0aG9yX3JlLm1hdGNoKGF1dGhvcnZhbCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IGF1dGhvcnZhbAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEYXRlOiAnKToKKyAgICAgICAgICAgICAgICBpZiBkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGV2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAjIFZlcnkgY3J1ZGUgY2hlY2sgZm9yIGRhdGUgZm9ybWF0LCBzaW5jZSBnaXQgd2lsbCBibG93IHVwIGlmIGl0J3Mgbm90IGluIHRoZSByaWdodAorICAgICAgICAgICAgICAgICAgICAjIGZvcm1hdC4gV2l0aG91dCBlLmcuIGEgcHl0aG9uLWRhdGV1dGlscyBkZXBlbmRlbmN5IHdlIGNhbid0IGRvIGEgd2hvbGUgbG90IG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGRhdGV2YWwpID4gMTI6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gZGF0ZXZhbAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1NpZ25lZC1vZmYtYnk6ICcpOgorICAgICAgICAgICAgICAgIGF1dGhvcnZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLnJlcGxhY2UoJyInLCAnJykKKyAgICAgICAgICAgICAgICAjIGdpdCBpcyBmdXNzeSBhYm91dCBhdXRob3IgZm9ybWF0dGluZyBpLmUuIGl0IG11c3QgYmUgTmFtZSA8ZW1haWxAZG9tYWluPgorICAgICAgICAgICAgICAgIGlmIGF1dGhvcl9yZS5tYXRjaChhdXRob3J2YWwpOgorICAgICAgICAgICAgICAgICAgICBhdXRob3IgPSBhdXRob3J2YWwKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAjIFdyaXRlIG91dCBjb21taXQgbWVzc2FnZSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICAgICAgdG1wZmlsZSA9IHRmLm5hbWUKKyAgICAgICAgICAgIGZvciBsaW5lIGluIG91dGxpbmVzOgorICAgICAgICAgICAgICAgIHRmLndyaXRlKGxpbmUpCisgICAgICAgICMgUHJlcGFyZSBnaXQgY29tbWFuZAorICAgICAgICBjbWQgPSBbImdpdCIsICJjb21taXQiLCAiLUYiLCB0bXBmaWxlXQorICAgICAgICAjIGdpdCBkb2Vzbid0IGxpa2UgcGxhaW4gZW1haWwgYWRkcmVzc2VzIGFzIGF1dGhvcnMKKyAgICAgICAgaWYgYXV0aG9yIGFuZCAnPCcgaW4gYXV0aG9yOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1hdXRob3I9IiVzIicgJSBhdXRob3IpCisgICAgICAgIGlmIGRhdGU6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWRhdGU9IiVzIicgJSBkYXRlKQorICAgICAgICByZXR1cm4gKHRtcGZpbGUsIGNtZCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdFBhdGNoZXModHJlZSwgc3RhcnRjb21taXQsIG91dGRpcik6CisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nb2VwYXRjaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAiZm9ybWF0LXBhdGNoIiwgc3RhcnRjb21taXQsICItbyIsIHRlbXBkaXJdCisgICAgICAgICAgICBvdXQgPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHRyZWUpCisgICAgICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICAgICAgZm9yIHNyY2ZpbGUgaW4gb3V0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IGxpbmUuc3BsaXQoKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvdXRkaXIsIG91dGZpbGUpLCAndycpIGFzIG9mOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGF0Y2hsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZi53cml0ZShsaW5lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgZGVmIF9hcHBseXBhdGNoKHNlbGYsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBpbXBvcnQgc2h1dGlsCisKKyAgICAgICAgZGVmIF9hcHBseXBhdGNoaGVscGVyKHNoZWxsY21kLCBwYXRjaCwgZm9yY2UgPSBGYWxzZSwgcmV2ZXJzZSA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgICAgIGlmIHJldmVyc2U6CisgICAgICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKCctUicpCisKKyAgICAgICAgICAgIHNoZWxsY21kLmFwcGVuZChwYXRjaFsnZmlsZSddKQorCisgICAgICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgICAgIHJldHVybiAic2giICsgIi1jIiArICIgIi5qb2luKHNoZWxsY21kKQorCisgICAgICAgICAgICByZXR1cm4gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICAjIEFkZCBob29rcyB3aGljaCBhZGQgYSBwb2ludGVyIHRvIHRoZSBvcmlnaW5hbCBwYXRjaCBmaWxlIG5hbWUgaW4gdGhlIGNvbW1pdCBtZXNzYWdlCisgICAgICAgIHJlcG9yb290ID0gKHJ1bmNtZCgiZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwiLnNwbGl0KCksIHNlbGYuZGlyKSBvciAnJykuc3RyaXAoKQorICAgICAgICBpZiBub3QgcmVwb3Jvb3Q6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNhbm5vdCBnZXQgcmVwb3NpdG9yeSByb290IGZvciBkaXJlY3RvcnkgJXMiICUgc2VsZi5kaXIpCisgICAgICAgIGNvbW1pdGhvb2sgPSBvcy5wYXRoLmpvaW4ocmVwb3Jvb3QsICcuZ2l0JywgJ2hvb2tzJywgJ2NvbW1pdC1tc2cnKQorICAgICAgICBjb21taXRob29rX2JhY2t1cCA9IGNvbW1pdGhvb2sgKyAnLmRldnRvb2wtb3JpZycKKyAgICAgICAgYXBwbHlob29rID0gb3MucGF0aC5qb2luKHJlcG9yb290LCAnLmdpdCcsICdob29rcycsICdhcHBseXBhdGNoLW1zZycpCisgICAgICAgIGFwcGx5aG9va19iYWNrdXAgPSBhcHBseWhvb2sgKyAnLmRldnRvb2wtb3JpZycKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tbWl0aG9vayk6CisgICAgICAgICAgICBzaHV0aWwubW92ZShjb21taXRob29rLCBjb21taXRob29rX2JhY2t1cCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwbHlob29rKToKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGFwcGx5aG9vaywgYXBwbHlob29rX2JhY2t1cCkKKyAgICAgICAgd2l0aCBvcGVuKGNvbW1pdGhvb2ssICd3JykgYXMgZjoKKyAgICAgICAgICAgICMgTk9URTogdGhlIGZvcm1hdHRpbmcgaGVyZSBpcyBzaWduaWZpY2FudDsgaWYgeW91IGNoYW5nZSBpdCB5b3UnbGwgYWxzbyBuZWVkIHRvCisgICAgICAgICAgICAjIGNoYW5nZSBvdGhlciBwbGFjZXMgd2hpY2ggcmVhZCBpdCBiYWNrCisgICAgICAgICAgICBmLndyaXRlKCdlY2hvID4+ICQxXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnZWNobyAiJXM6ICRQQVRDSEZJTEUiID4+ICQxXG4nICUgR2l0QXBwbHlUcmVlLnBhdGNoX2xpbmVfcHJlZml4KQorICAgICAgICBvcy5jaG1vZChjb21taXRob29rLCAwNzU1KQorICAgICAgICBzaHV0aWwuY29weTIoY29tbWl0aG9vaywgYXBwbHlob29rKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRjaGZpbGV2YXIgPSAnUEFUQ0hGSUxFPSIlcyInICUgb3MucGF0aC5iYXNlbmFtZShwYXRjaFsnZmlsZSddKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gW3BhdGNoZmlsZXZhciwgImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdCwgImFtIiwgIi0zIiwgIi0ta2VlcC1jciIsICItcCVzIiAlIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGx5cGF0Y2hoZWxwZXIoc2hlbGxjbWQsIHBhdGNoLCBmb3JjZSwgcmV2ZXJzZSwgcnVuKQorICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICMgTmVlZCB0byBhYm9ydCB0aGUgZ2l0IGFtLCBvciB3ZSdsbCBzdGlsbCBiZSB3aXRoaW4gaXQgYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICItLXdvcmstdHJlZT0lcyIgJSByZXBvcm9vdCwgImFtIiwgIi0tYWJvcnQiXQorICAgICAgICAgICAgICAgICAgICBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBDbWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIGdpdCBhcHBseQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAiLS1naXQtZGlyPSVzIiAlIHJlcG9yb290LCAiYXBwbHkiLCAiLXAlcyIgJSBwYXRjaFsnc3RyaXBwYXRoJ11dCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEZhbGwgYmFjayB0byBwYXRjaAorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBQYXRjaFRyZWUuX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICAgICAgIyBBZGQgYWxsIGZpbGVzCisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJhZGQiLCAiLWYiLCAiLUEiLCAiLiJdCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgIyBFeGNsdWRlIHRoZSBwYXRjaGVzIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIHNoZWxsY21kID0gWyJnaXQiLCAicmVzZXQiLCAiSEVBRCIsIHNlbGYucGF0Y2hkaXJdCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgIyBDb21taXQgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgICh0bXBmaWxlLCBzaGVsbGNtZCkgPSBzZWxmLnByZXBhcmVDb21taXQocGF0Y2hbJ2ZpbGUnXSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNoZWxsY21kLmluc2VydCgwLCBwYXRjaGZpbGV2YXIpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0bXBmaWxlKQorICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb21taXRob29rKQorICAgICAgICAgICAgb3MucmVtb3ZlKGFwcGx5aG9vaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbW1pdGhvb2tfYmFja3VwKToKKyAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShjb21taXRob29rX2JhY2t1cCwgY29tbWl0aG9vaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGx5aG9va19iYWNrdXApOgorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGFwcGx5aG9va19iYWNrdXAsIGFwcGx5aG9vaykKKworCitjbGFzcyBRdWlsdFRyZWUoUGF0Y2hTZXQpOgorICAgIGRlZiBfcnVuY21kKHNlbGYsIGFyZ3MsIHJ1biA9IFRydWUpOgorICAgICAgICBxdWlsdHJjID0gc2VsZi5kLmdldFZhcignUVVJTFRSQ0ZJTEUnLCBUcnVlKQorICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuIFsicXVpbHQiXSArIFsiLS1xdWlsdHJjIl0gKyBbcXVpbHRyY10gKyBhcmdzCisgICAgICAgIHJ1bmNtZChbInF1aWx0Il0gKyBbIi0tcXVpbHRyYyJdICsgW3F1aWx0cmNdICsgYXJncywgc2VsZi5kaXIpCisKKyAgICBkZWYgX3F1aWx0cGF0Y2hwYXRoKHNlbGYsIGZpbGUpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAicGF0Y2hlcyIsIG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpCisKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFNldC5fX2luaXRfXyhzZWxmLCBkaXIsIGQpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorICAgICAgICBwID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHApCisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3J1bmNtZChbInBvcCIsICItYSIsICItZiJdKQorICAgICAgICAgICAgb2UucGF0aC5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuZGlyLCAicGF0Y2hlcyIsInNlcmllcyIpKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gVHJ1ZQorCisgICAgZGVmIEluaXRGcm9tRGlyKHNlbGYpOgorICAgICAgICAjIHJlYWQgc2VyaWVzIC0+IHNlbGYucGF0Y2hlcworICAgICAgICBzZXJpZXNwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyLCAncGF0Y2hlcycsICdzZXJpZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kaXIpOgorICAgICAgICAgICAgcmFpc2UgTm90Rm91bmRFcnJvcihzZWxmLmRpcikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VyaWVzcGF0aCk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VyaWVzcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoID0ge30KKyAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBsaW5lLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicXVpbHRmaWxlIl0gPSBzZWxmLl9xdWlsdHBhdGNocGF0aChwYXJ0c1swXSkKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoWyJzdHJpcHBhdGgiXSA9IHBhcnRzWzFdWzI6XQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoZXMuYXBwZW5kKHBhdGNoKQorCisgICAgICAgICAgICAjIGRldGVybWluZSB3aGljaCBwYXRjaGVzIGFyZSBhcHBsaWVkIC0+IHNlbGYuX2N1cnJlbnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBydW5jbWQoWyJxdWlsdCIsICJhcHBsaWVkIl0sIHNlbGYuZGlyKQorICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBpZiBzeXMuZXhjX3ZhbHVlLm91dHB1dC5zdHJpcCgpID09ICJObyBwYXRjaGVzIGFwcGxpZWQiOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgb3V0cHV0ID0gW3ZhbCBmb3IgdmFsIGluIG91dHB1dC5zcGxpdCgnXG4nKSBpZiBub3QgdmFsLnN0YXJ0c3dpdGgoJyMnKV0KKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRjaFsicXVpbHRmaWxlIl0pID09IG91dHB1dFstMV06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBzZWxmLnBhdGNoZXMuaW5kZXgocGF0Y2gpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSA9IE5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIHNlbGYuSW5pdEZyb21EaXIoKQorICAgICAgICBQYXRjaFNldC5JbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlKQorICAgICAgICBvZS5wYXRoLnN5bWxpbmsocGF0Y2hbImZpbGUiXSwgc2VsZi5fcXVpbHRwYXRjaHBhdGgocGF0Y2hbImZpbGUiXSksIGZvcmNlPVRydWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwgInNlcmllcyIpLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbImZpbGUiXSkgKyAiIC1wIiArIHBhdGNoWyJzdHJpcHBhdGgiXSArICJcbiIpCisgICAgICAgIHBhdGNoWyJxdWlsdGZpbGUiXSA9IHNlbGYuX3F1aWx0cGF0Y2hwYXRoKHBhdGNoWyJmaWxlIl0pCisgICAgICAgIHBhdGNoWyJxdWlsdGZpbGVtZDUiXSA9IGJiLnV0aWxzLm1kNV9maWxlKHBhdGNoWyJxdWlsdGZpbGUiXSkKKworICAgICAgICAjIFRPRE86IGRldGVybWluZSBpZiB0aGUgZmlsZSBiZWluZyBpbXBvcnRlZDoKKyAgICAgICAgIyAgICAgIDEpIGlzIGFscmVhZHkgaW1wb3J0ZWQsIGFuZCBpcyB0aGUgc2FtZQorICAgICAgICAjICAgICAgMikgaXMgYWxyZWFkeSBpbXBvcnRlZCwgYnV0IGRpZmZlcnMKKworICAgICAgICBzZWxmLnBhdGNoZXMuaW5zZXJ0KHNlbGYuX2N1cnJlbnQgb3IgMCwgcGF0Y2gpCisKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlID0gRmFsc2UsIGFsbCA9IEZhbHNlLCBydW4gPSBUcnVlKToKKyAgICAgICAgIyBxdWlsdCBwdXNoIFstZl0KKworICAgICAgICBhcmdzID0gWyJwdXNoIl0KKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWYiKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLWEiKQorICAgICAgICBpZiBub3QgcnVuOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bmNtZChhcmdzLCBydW4pCisKKyAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBzZWxmLl9jdXJyZW50ICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IDAKKworICAgIGRlZiBQb3Aoc2VsZiwgZm9yY2UgPSBOb25lLCBhbGwgPSBOb25lKToKKyAgICAgICAgIyBxdWlsdCBwb3AgWy1mXQorICAgICAgICBhcmdzID0gWyJwb3AiXQorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItYSIpCisKKyAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKKyAgICAgICAgaWYgc2VsZi5fY3VycmVudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgLSAxCisKKyAgICBkZWYgUmVmcmVzaChzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGt3YXJncy5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgcGF0Y2ggPSBzZWxmLnBhdGNoZXNba3dhcmdzWyJwYXRjaCJdXQorICAgICAgICAgICAgaWYgbm90IHBhdGNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIk5vIHBhdGNoIGZvdW5kIGF0IGluZGV4ICVzIGluIHBhdGNoc2V0LiIgJSBrd2FyZ3NbInBhdGNoIl0pCisgICAgICAgICAgICAodHlwZSwgaG9zdCwgcGF0aCwgdXNlciwgcHN3ZCwgcGFybSkgPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2hbInJlbW90ZSJdKQorICAgICAgICAgICAgaWYgdHlwZSA9PSAiZmlsZSI6CisgICAgICAgICAgICAgICAgaW1wb3J0IHNodXRpbAorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoImZpbGUiKSBhbmQgcGF0Y2guZ2V0KCJyZW1vdGUiKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbImZpbGUiXSA9IGJiLmZldGNoMi5sb2NhbHBhdGgocGF0Y2hbInJlbW90ZSJdLCBzZWxmLmQpCisKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdLCBwYXRjaFsiZmlsZSJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJVbmFibGUgdG8gZG8gYSByZW1vdGUgcmVmcmVzaCBvZiAlcywgdW5zdXBwb3J0ZWQgcmVtb3RlIHVybCBzY2hlbWUgJXMuIiAlIChvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSksIHR5cGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBxdWlsdCByZWZyZXNoCisgICAgICAgICAgICBhcmdzID0gWyJyZWZyZXNoIl0KKyAgICAgICAgICAgIGlmIGt3YXJncy5nZXQoInF1aWx0ZmlsZSIpOgorICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUoa3dhcmdzWyJxdWlsdGZpbGUiXSkpCisgICAgICAgICAgICBlbGlmIGt3YXJncy5nZXQoInBhdGNoIik6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShzZWxmLnBhdGNoZXNba3dhcmdzWyJwYXRjaCJdXVsicXVpbHRmaWxlIl0pKQorICAgICAgICAgICAgc2VsZi5fcnVuY21kKGFyZ3MpCisKK2NsYXNzIFJlc29sdmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJlc29sdmUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIFJldmVydChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgRmluYWxpemUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCitjbGFzcyBOT09QUmVzb2x2ZXIoUmVzb2x2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRjaHNldCwgdGVybWluYWwpOgorICAgICAgICBzZWxmLnBhdGNoc2V0ID0gcGF0Y2hzZXQKKyAgICAgICAgc2VsZi50ZXJtaW5hbCA9IHRlcm1pbmFsCisKKyAgICBkZWYgUmVzb2x2ZShzZWxmKToKKyAgICAgICAgb2xkZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXRjaHNldC5kaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGF0Y2hzZXQuUHVzaCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICByYWlzZQorCisjIFBhdGNoIHJlc29sdmVyIHdoaWNoIHJlbGllcyBvbiB0aGUgdXNlciBkb2luZyBhbGwgdGhlIHdvcmsgaW52b2x2ZWQgaW4gdGhlCisjIHJlc29sdXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiByZWZyZXNoaW5nIHRoZSByZW1vdGUgY29weSBvZiB0aGUgcGF0Y2gKKyMgZmlsZXMgKHRoZSB1cmxzKS4KK2NsYXNzIFVzZXJSZXNvbHZlcihSZXNvbHZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBwYXRjaHNldAorICAgICAgICBzZWxmLnRlcm1pbmFsID0gdGVybWluYWwKKworICAgICMgRm9yY2UgYSBwdXNoIGluIHRoZSBwYXRjaHNldCwgdGhlbiBkcm9wIHRvIGEgc2hlbGwgZm9yIHRoZSB1c2VyIHRvCisgICAgIyByZXNvbHZlIGFueSByZWplY3RlZCBodW5rcworICAgIGRlZiBSZXNvbHZlKHNlbGYpOgorICAgICAgICBvbGRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihzZWxmLnBhdGNoc2V0LmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5QdXNoKEZhbHNlKQorICAgICAgICBleGNlcHQgQ21kRXJyb3IgYXMgdjoKKyAgICAgICAgICAgICMgUGF0Y2ggYXBwbGljYXRpb24gZmFpbGVkCisgICAgICAgICAgICBwYXRjaGNtZCA9IHNlbGYucGF0Y2hzZXQuUHVzaChUcnVlLCBGYWxzZSwgRmFsc2UpCisKKyAgICAgICAgICAgIHQgPSBzZWxmLnBhdGNoc2V0LmQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCB0OgorICAgICAgICAgICAgICAgIGJiLm1zZy5mYXRhbCgiQnVpbGQiLCAiVCBub3Qgc2V0IikKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0KQorICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICAgICAgcmNmaWxlID0gIiVzL2Jhc2hyYy4lcy4lcyIgJSAodCwgc3RyKG9zLmdldHBpZCgpKSwgcmFuZG9tLnJhbmRvbSgpKQorICAgICAgICAgICAgd2l0aCBvcGVuKHJjZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJyoqKiBNYW51YWwgcGF0Y2ggcmVzb2x1dGlvbiBtb2RlICoqKidcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnRHJvcHBpbmcgdG8gYSBzaGVsbCwgc28gcGF0Y2ggcmVqZWN0cyBjYW4gYmUgZml4ZWQgbWFudWFsbHkuJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICdSdW4gXCJxdWlsdCByZWZyZXNoXCIgd2hlbiBwYXRjaCBpcyBjb3JyZWN0ZWQsIHByZXNzIENUUkwrRCB0byBleGl0LidcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIgIi5qb2luKHBhdGNoY21kKSArICJcbiIpCisgICAgICAgICAgICBvcy5jaG1vZChyY2ZpbGUsIDA3NzUpCisKKyAgICAgICAgICAgIHNlbGYudGVybWluYWwoImJhc2ggLS1yY2ZpbGUgIiArIHJjZmlsZSwgJ1BhdGNoIFJlamVjdHM6IFBsZWFzZSBmaXggcGF0Y2ggcmVqZWN0cyBtYW51YWxseScsIHNlbGYucGF0Y2hzZXQuZCkKKworICAgICAgICAgICAgIyBDb25zdHJ1Y3QgYSBuZXcgUGF0Y2hTZXQgYWZ0ZXIgdGhlIHVzZXIncyBjaGFuZ2VzLCBjb21wYXJlIHRoZQorICAgICAgICAgICAgIyBzZXRzLCBjaGVja2luZyBwYXRjaGVzIGZvciBtb2RpZmljYXRpb25zLCBhbmQgZG9pbmcgYSByZW1vdGUKKyAgICAgICAgICAgICMgcmVmcmVzaCBvbiBlYWNoLgorICAgICAgICAgICAgb2xkcGF0Y2hzZXQgPSBzZWxmLnBhdGNoc2V0CisgICAgICAgICAgICBzZWxmLnBhdGNoc2V0ID0gb2xkcGF0Y2hzZXQuX19jbGFzc19fKHNlbGYucGF0Y2hzZXQuZGlyLCBzZWxmLnBhdGNoc2V0LmQpCisKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBzZWxmLnBhdGNoc2V0LnBhdGNoZXM6CisgICAgICAgICAgICAgICAgb2xkcGF0Y2ggPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIG9wYXRjaCBpbiBvbGRwYXRjaHNldC5wYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBvcGF0Y2hbInF1aWx0ZmlsZSJdID09IHBhdGNoWyJxdWlsdGZpbGUiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHBhdGNoID0gb3BhdGNoCisKKyAgICAgICAgICAgICAgICBpZiBvbGRwYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInJlbW90ZSJdID0gb2xkcGF0Y2hbInJlbW90ZSJdCisgICAgICAgICAgICAgICAgICAgIGlmIHBhdGNoWyJxdWlsdGZpbGUiXSA9PSBvbGRwYXRjaFsicXVpbHRmaWxlIl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRjaFsicXVpbHRmaWxlbWQ1Il0gIT0gb2xkcGF0Y2hbInF1aWx0ZmlsZW1kNSJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlBhdGNoICVzIGhhcyBjaGFuZ2VkLCB1cGRhdGluZyByZW1vdGUgdXJsICVzIiAlIChvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSksIHBhdGNoWyJyZW1vdGUiXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2VyIGNoYW5nZT8gIHJlbW90ZSByZWZyZXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5SZWZyZXNoKHJlbW90ZT1UcnVlLCBwYXRjaD1zZWxmLnBhdGNoc2V0LnBhdGNoZXMuaW5kZXgocGF0Y2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXIgZGlkIG5vdCBmaXggdGhlIHByb2JsZW0uICBBYm9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKCJQYXRjaCBhcHBsaWNhdGlvbiBmYWlsZWQsIGFuZCB1c2VyIGRpZCBub3QgZml4IGFuZCByZWZyZXNoIHRoZSBwYXRjaC4iKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3MuY2hkaXIob2xkZGlyKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvcGF0aC5weSBiL21ldGEvbGliL29lL3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzZWJmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhdGgucHkKQEAgLTAsMCArMSwyNDMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IGdsb2IKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgb3MucGF0aAorCitkZWYgam9pbigqcGF0aHMpOgorICAgICIiIkxpa2Ugb3MucGF0aC5qb2luIGJ1dCBkb2Vzbid0IHRyZWF0IGFic29sdXRlIFJIUyBzcGVjaWFsbHkiIiIKKyAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aCgiLyIuam9pbihwYXRocykpCisKK2RlZiByZWxhdGl2ZShzcmMsIGRlc3QpOgorICAgICIiIiBSZXR1cm4gYSByZWxhdGl2ZSBwYXRoIGZyb20gc3JjIHRvIGRlc3QuCisKKyAgICA+Pj4gcmVsYXRpdmUoIi91c3IvYmluIiwgIi90bXAvZm9vL2JhciIpCisgICAgLi4vLi4vdG1wL2Zvby9iYXIKKworICAgID4+PiByZWxhdGl2ZSgiL3Vzci9iaW4iLCAiL3Vzci9saWIiKQorICAgIC4uL2xpYgorCisgICAgPj4+IHJlbGF0aXZlKCIvdG1wIiwgIi90bXAvZm9vL2JhciIpCisgICAgZm9vL2JhcgorICAgICIiIgorCisgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChkZXN0LCBzcmMpCisKK2RlZiBtYWtlX3JlbGF0aXZlX3N5bWxpbmsocGF0aCk6CisgICAgIiIiIENvbnZlcnQgYW4gYWJzb2x1dGUgc3ltbGluayB0byBhIHJlbGF0aXZlIG9uZSAiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorICAgIGxpbmsgPSBvcy5yZWFkbGluayhwYXRoKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmspOgorICAgICAgICByZXR1cm4KKworICAgICMgZmluZCB0aGUgY29tbW9uIGFuY2VzdG9yIGRpcmVjdG9yeQorICAgIGFuY2VzdG9yID0gcGF0aAorICAgIGRlcHRoID0gMAorICAgIHdoaWxlIGFuY2VzdG9yIGFuZCBub3QgbGluay5zdGFydHN3aXRoKGFuY2VzdG9yKToKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5ycGFydGl0aW9uKCcvJylbMF0KKyAgICAgICAgZGVwdGggKz0gMQorCisgICAgaWYgbm90IGFuY2VzdG9yOgorICAgICAgICBwcmludCgibWFrZV9yZWxhdGl2ZV9zeW1saW5rKCkgRXJyb3I6IHVuYWJsZSB0byBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgJXMgYW5kIGl0cyB0YXJnZXQiICUgcGF0aCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYXNlID0gbGluay5wYXJ0aXRpb24oYW5jZXN0b3IpWzJdLnN0cmlwKCcvJykKKyAgICB3aGlsZSBkZXB0aCA+IDE6CisgICAgICAgIGJhc2UgPSAiLi4vIiArIGJhc2UKKyAgICAgICAgZGVwdGggLT0gMQorCisgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgb3Muc3ltbGluayhiYXNlLCBwYXRoKQorCitkZWYgZm9ybWF0X2Rpc3BsYXkocGF0aCwgbWV0YWRhdGEpOgorICAgICIiIiBQcmVwYXJlIGEgcGF0aCBmb3IgZGlzcGxheSB0byB0aGUgdXNlci4gIiIiCisgICAgcmVsID0gcmVsYXRpdmUobWV0YWRhdGEuZ2V0VmFyKCJUT1BESVIiLCBUcnVlKSwgcGF0aCkKKyAgICBpZiBsZW4ocmVsKSA+IGxlbihwYXRoKToKKyAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVsCisKK2RlZiBjb3B5dHJlZShzcmMsIGRzdCk6CisgICAgIyBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2Ugc2h1dGlsLmNvcHl0cmVlIGhlcmUgYnV0IGl0IHR1cm5zIG91dCB0bworICAgICMgdG8gYmUgc2xvdy4gSXQgdGFrZXMgdHdpY2UgYXMgbG9uZyBjb3B5aW5nIHRvIGFuIGVtcHR5IGRpcmVjdG9yeS4gCisgICAgIyBJZiBkc3QgYWxyZWFkeSBoYXMgY29udGVudHMgcGVyZm9ybWFuY2UgY2FuIGJlIDE1IHRpbWUgc2xvd2VyCisgICAgIyBUaGlzIHdheSB3ZSBhbHNvIHByZXNlcnZlIGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzIGluIHRoZSB0cmVlLgorCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKKyAgICBjbWQgPSAndGFyIC1jZiAtIC1DICVzIC1wIC4gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgZHN0KQorICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIGNvcHloYXJkbGlua3RyZWUoc3JjLCBkc3QpOgorICAgICIiIiBNYWtlIHRoZSBoYXJkIGxpbmsgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGNvcHkuICIiIgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3QpCisgICAgaWYgb3MucGF0aC5pc2RpcihzcmMpIGFuZCBub3QgbGVuKG9zLmxpc3RkaXIoc3JjKSk6CisgICAgICAgIHJldHVybgkKKworICAgIGlmIChvcy5zdGF0KHNyYykuc3RfZGV2ID09ICBvcy5zdGF0KGRzdCkuc3RfZGV2KToKKyAgICAgICAgIyBOZWVkIHRvIGNvcHkgZGlyZWN0b3JpZXMgb25seSB3aXRoIHRhciBmaXJzdCBzaW5jZSBjcCB3aWxsIGVycm9yIGlmIHR3byAKKyAgICAgICAgIyB3cml0ZXJzIHRyeSBhbmQgY3JlYXRlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXR5cGUgZCAtcHJpbnQgfCB0YXIgLWNmIC0gLUMgJXMgLXAgLS1maWxlcy1mcm9tIC0gLS1uby1yZWN1cnNpb24gfCB0YXIgLXhmIC0gLUMgJXMnICUgKHNyYywgc3JjLCBkc3QpCisgICAgICAgIGNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgY21kID0gJ2NkICVzOyBmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICVzJyAlIChzcmMsIGRzdCkKKyAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIGVsc2U6CisgICAgICAgIGNvcHl0cmVlKHNyYywgZHN0KQorCitkZWYgcmVtb3ZlKHBhdGgsIHJlY3Vyc2U9VHJ1ZSk6CisgICAgIiIiRXF1aXZhbGVudCB0byBybSAtZiBvciBybSAtcmYiIiIKKyAgICBmb3IgbmFtZSBpbiBnbG9iLmdsb2IocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiByZWN1cnNlIGFuZCBleGMuZXJybm8gPT0gZXJybm8uRUlTRElSOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobmFtZSkKKyAgICAgICAgICAgIGVsaWYgZXhjLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgc3ltbGluayhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmb3JjZT1GYWxzZSk6CisgICAgIiIiQ3JlYXRlIGEgc3ltYm9saWMgbGluayIiIgorICAgIHRyeToKKyAgICAgICAgaWYgZm9yY2U6CisgICAgICAgICAgICByZW1vdmUoZGVzdGluYXRpb24pCisgICAgICAgIG9zLnN5bWxpbmsoc291cmNlLCBkZXN0aW5hdGlvbikKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBvcy5yZWFkbGluayhkZXN0aW5hdGlvbikgIT0gc291cmNlOgorICAgICAgICAgICAgcmFpc2UKKworY2xhc3MgQ2FsbGVkUHJvY2Vzc0Vycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJldGNvZGUsIGNtZCwgb3V0cHV0ID0gTm9uZSk6CisgICAgICAgIHNlbGYucmV0Y29kZSA9IHJldGNvZGUKKyAgICAgICAgc2VsZi5jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQgd2l0aCBvdXRwdXQgJXMiICUgKHNlbGYuY21kLCBzZWxmLnJldGNvZGUsIHNlbGYub3V0cHV0KQorCisjIE5vdCBuZWVkZWQgd2hlbiB3ZSBtb3ZlIHRvIHB5dGhvbiAyLjcKK2RlZiBjaGVja19vdXRwdXQoKnBvcGVuYXJncywgKiprd2FyZ3MpOgorICAgIHIiIiJSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQgYXMgYSBieXRlIHN0cmluZy4KKworICAgIElmIHRoZSBleGl0IGNvZGUgd2FzIG5vbi16ZXJvIGl0IHJhaXNlcyBhIENhbGxlZFByb2Nlc3NFcnJvci4gIFRoZQorICAgIENhbGxlZFByb2Nlc3NFcnJvciBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUgcmV0dXJuY29kZQorICAgIGF0dHJpYnV0ZSBhbmQgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCisgICAgJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBPY3QgMTggIDIwMDcgL2Rldi9udWxsXG4nCisKKyAgICBUaGUgc3Rkb3V0IGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIGFzIGl0IGlzIHVzZWQgaW50ZXJuYWxseS4KKyAgICBUbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZSBzdGRlcnI9U1RET1VULgorCisgICAgPj4+IGNoZWNrX291dHB1dChbIi9iaW4vc2giLCAiLWMiLAorICAgIC4uLiAgICAgICAgICAgICAgICJscyAtbCBub25fZXhpc3RlbnRfZmlsZSA7IGV4aXQgMCJdLAorICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKKyAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCisgICAgIiIiCisgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsICpwb3BlbmFyZ3MsICoqa3dhcmdzKQorICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHJldGNvZGUgPSBwcm9jZXNzLnBvbGwoKQorICAgIGlmIHJldGNvZGU6CisgICAgICAgIGNtZCA9IGt3YXJncy5nZXQoImFyZ3MiKQorICAgICAgICBpZiBjbWQgaXMgTm9uZToKKyAgICAgICAgICAgIGNtZCA9IHBvcGVuYXJnc1swXQorICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgY21kLCBvdXRwdXQ9b3V0cHV0KQorICAgIHJldHVybiBvdXRwdXQKKworZGVmIGZpbmQoZGlyLCAqKndhbGtvcHRpb25zKToKKyAgICAiIiIgR2l2ZW4gYSBkaXJlY3RvcnksIHJlY3Vyc2VzIGludG8gdGhhdCBkaXJlY3RvcnksCisgICAgcmV0dXJuaW5nIGFsbCBmaWxlcyBhcyBhYnNvbHV0ZSBwYXRocy4gIiIiCisKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXIsICoqd2Fsa29wdGlvbnMpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHlpZWxkIG9zLnBhdGguam9pbihyb290LCBmaWxlKQorCisKKyMjIHJlYWxwYXRoKCkgcmVsYXRlZCBmdW5jdGlvbnMKK2RlZiBfX2lzX3BhdGhfYmVsb3coZmlsZSwgcm9vdCk6CisgICAgcmV0dXJuIChmaWxlICsgb3MucGF0aC5zZXApLnN0YXJ0c3dpdGgocm9vdCkKKworZGVmIF9fcmVhbHBhdGhfcmVsKHN0YXJ0LCByZWxfcGF0aCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICIiIkNhbGN1bGF0ZXMgcmVhbCBwYXRoIG9mIHN5bWxpbmsgJ3N0YXJ0JyArICdyZWxfcGF0aCcgYmVsb3cKKyAgICAncm9vdCc7IG5vIHBhcnQgb2YgJ3N0YXJ0JyBiZWxvdyAncm9vdCcgbXVzdCBjb250YWluIHN5bWxpbmtzLiAiIiIKKyAgICBoYXZlX2RpciA9IFRydWUKKworICAgIGZvciBkIGluIHJlbF9wYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgaWYgbm90IGhhdmVfZGlyIGFuZCBub3QgYXNzdW1lX2RpcjoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRU5PRU5ULCAibm8gc3VjaCBkaXJlY3RvcnkgJXMiICUgc3RhcnQpCisKKyAgICAgICAgaWYgZCA9PSBvcy5wYXRoLnBhcmRpcjogIyAnLi4nCisgICAgICAgICAgICBpZiBsZW4oc3RhcnQpID49IGxlbihyb290KToKKyAgICAgICAgICAgICAgICAjIGRvIG5vdCBmb2xsb3cgJy4uJyBiZWZvcmUgcm9vdAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gb3MucGF0aC5kaXJuYW1lKHN0YXJ0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGVtaXQgd2FybmluZz8KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAoc3RhcnQsIGhhdmVfZGlyKSA9IF9fcmVhbHBhdGgob3MucGF0aC5qb2luKHN0YXJ0LCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICBhc3NlcnQoX19pc19wYXRoX2JlbG93KHN0YXJ0LCByb290KSkKKworICAgIHJldHVybiBzdGFydAorCitkZWYgX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgd2hpbGUgb3MucGF0aC5pc2xpbmsoZmlsZSkgYW5kIGxlbihmaWxlKSA+PSBsZW4ocm9vdCk6CisgICAgICAgIGlmIGxvb3BfY250ID09IDA6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVMT09QLCBmaWxlKQorCisgICAgICAgIGxvb3BfY250IC09IDEKKyAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5yZWFkbGluayhmaWxlKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Ficyh0YXJnZXQpOgorICAgICAgICAgICAgdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgYXNzZXJ0KF9faXNfcGF0aF9iZWxvdyh0ZGlyLCByb290KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRkaXIgPSByb290CisKKyAgICAgICAgZmlsZSA9IF9fcmVhbHBhdGhfcmVsKHRkaXIsIHRhcmdldCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisKKyAgICB0cnk6CisgICAgICAgIGlzX2RpciA9IG9zLnBhdGguaXNkaXIoZmlsZSkKKyAgICBleGNlcHQ6CisgICAgICAgIGlzX2RpciA9IGZhbHNlCisKKyAgICByZXR1cm4gKGZpbGUsIGlzX2RpcikKKworZGVmIHJlYWxwYXRoKGZpbGUsIHJvb3QsIHVzZV9waHlzZGlyID0gVHJ1ZSwgbG9vcF9jbnQgPSAxMDAsIGFzc3VtZV9kaXIgPSBGYWxzZSk6CisgICAgIiIiIFJldHVybnMgdGhlIGNhbm9uaWNhbCBwYXRoIG9mICdmaWxlJyB3aXRoIGFzc3VtaW5nIGEKKyAgICB0b3BsZXZlbCAncm9vdCcgZGlyZWN0b3J5LiBXaGVuICd1c2VfcGh5c2RpcicgaXMgc2V0LCBhbGwKKyAgICBwcmVjZWRpbmcgcGF0aCBjb21wb25lbnRzIG9mICdmaWxlJyB3aWxsIGJlIHJlc29sdmVkIGZpcnN0OworICAgIHRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IHVubGVzcyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlcmUgaXMKKyAgICBubyBzeW1saW5rIGluIHRoZSBwYXRoLiBXaGVuICdhc3N1bWVfZGlyJyBpcyBub3Qgc2V0LCBtaXNzaW5nCisgICAgcGF0aCBjb21wb25lbnRzIHdpbGwgcmFpc2UgYW4gRU5PRU5UIGVycm9yIiIiCisKKyAgICByb290ID0gb3MucGF0aC5ub3JtcGF0aChyb290KQorICAgIGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGZpbGUpCisKKyAgICBpZiBub3Qgcm9vdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CisgICAgICAgICMgbGV0dGluZyByb290IGVuZCB3aXRoICcvJyBtYWtlcyBzb21lIHRoaW5ncyBlYXNpZXIKKyAgICAgICAgcm9vdCA9IHJvb3QgKyBvcy5wYXRoLnNlcAorCisgICAgaWYgbm90IF9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5WQUwsICJmaWxlICclcycgaXMgbm90IGJlbG93IHJvb3QiICUgZmlsZSkKKworICAgIHRyeToKKyAgICAgICAgaWYgdXNlX3BoeXNkaXI6CisgICAgICAgICAgICBmaWxlID0gX19yZWFscGF0aF9yZWwocm9vdCwgZmlsZVsobGVuKHJvb3QpIC0gMSk6XSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlID0gX19yZWFscGF0aChmaWxlLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcilbMF0KKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVMT09QOgorICAgICAgICAgICAgIyBtYWtlIEVMT09QIG1vcmUgcmVhZGFibGU7IHdpdGhvdXQgY2F0Y2hpbmcgaXQsIHRoZXJlIHdpbGwKKyAgICAgICAgICAgICMgYmUgcHJpbnRlZCBhIGJhY2t0cmFjZSB3aXRoIDEwMHMgb2YgT1NFcnJvciBleGNlcHRpb25zCisgICAgICAgICAgICAjIGVsc2UKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbXVjaCByZWN1cnNpb25zIHdoaWxlIHJlc29sdmluZyAnJXMnOyBsb29wIGluICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUsIGUuc3RyZXJyb3IpKQorCisgICAgICAgIHJhaXNlCisKKyAgICByZXR1cm4gZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvcHJzZXJ2aWNlLnB5IGIvbWV0YS9saWIvb2UvcHJzZXJ2aWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2JjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkKQEAgLTAsMCArMSwxMjYgQEAKKworZGVmIHByc2Vydl9tYWtlX2Nvbm4oZCwgY2hlY2sgPSBGYWxzZSk6CisgICAgaW1wb3J0IHByc2Vydi5zZXJ2CisgICAgaG9zdF9wYXJhbXMgPSBmaWx0ZXIoTm9uZSwgKGQuZ2V0VmFyKCJQUlNFUlZfSE9TVCIsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpKQorICAgIHRyeToKKyAgICAgICAgY29ubiA9IE5vbmUKKyAgICAgICAgY29ubiA9IHByc2Vydi5zZXJ2LlBSU2VydmVyQ29ubmVjdGlvbihob3N0X3BhcmFtc1swXSwgaW50KGhvc3RfcGFyYW1zWzFdKSkKKyAgICAgICAgaWYgY2hlY2s6CisgICAgICAgICAgICBpZiBub3QgY29ubi5waW5nKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzZXJ2aWNlIG5vdCBhdmFpbGFibGUnKQorICAgICAgICBkLnNldFZhcigiX19QUlNFUlZfQ09OTiIsY29ubikKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6CisgICAgICAgIGJiLmZhdGFsKCJDb25uZWN0aW5nIHRvIFBSIHNlcnZpY2UgJXM6JXMgZmFpbGVkOiAlcyIgJSAoaG9zdF9wYXJhbXNbMF0sIGhvc3RfcGFyYW1zWzFdLCBzdHIoZXhjKSkpCisKKyAgICByZXR1cm4gY29ubgorCitkZWYgcHJzZXJ2X2R1bXBfZGIoZCk6CisgICAgaWYgbm90IGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpOgorICAgICAgICBiYi5lcnJvcigiTm90IHVzaW5nIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBjb25uID0gZC5nZXRWYXIoIl9fUFJTRVJWX0NPTk4iLCBUcnVlKQorICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgY29ubiA9IHByc2Vydl9tYWtlX2Nvbm4oZCkKKyAgICAgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICAgICAgYmIuZXJyb3IoIk1ha2luZyBjb25uZWN0aW9uIGZhaWxlZCB0byByZW1vdGUgUFIgc2VydmljZSIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgI2R1bXAgZGIKKyAgICBvcHRfdmVyc2lvbiA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9WRVJTSU9OJywgVHJ1ZSkKKyAgICBvcHRfcGtnYXJjaCA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9QS0dBUkNIJywgVHJ1ZSkKKyAgICBvcHRfY2hlY2tzdW0gPSBkLmdldFZhcignUFJTRVJWX0RVTVBPUFRfQ0hFQ0tTVU0nLCBUcnVlKQorICAgIG9wdF9jb2wgPSAoIjEiID09IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DT0wnLCBUcnVlKSkKKyAgICByZXR1cm4gY29ubi5leHBvcnQob3B0X3ZlcnNpb24sIG9wdF9wa2dhcmNoLCBvcHRfY2hlY2tzdW0sIG9wdF9jb2wpCisKK2RlZiBwcnNlcnZfaW1wb3J0X2RiKGQsIGZpbHRlcl92ZXJzaW9uPU5vbmUsIGZpbHRlcl9wa2dhcmNoPU5vbmUsIGZpbHRlcl9jaGVja3N1bT1Ob25lKToKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGJiLmVycm9yKCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICBjb25uID0gcHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5lcnJvcigiTWFraW5nIGNvbm5lY3Rpb24gZmFpbGVkIHRvIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgI2dldCB0aGUgZW50cnkgdmFsdWVzCisgICAgaW1wb3J0ZWQgPSBbXQorICAgIHByZWZpeCA9ICJQUkFVVE8kIgorICAgIGZvciB2IGluIGQua2V5cygpOgorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgY2hlY2tzdW0pID0gdi5ycGFydGl0aW9uKCckJykKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgcGtnYXJjaCkgPSByZW1haW4ucnBhcnRpdGlvbignJCcpCisgICAgICAgICAgICAocmVtYWluLCBzZXAsIHZlcnNpb24pID0gcmVtYWluLnJwYXJ0aXRpb24oJyQnKQorICAgICAgICAgICAgaWYgKHJlbWFpbiArICckJyAhPSBwcmVmaXgpIG9yIFwKKyAgICAgICAgICAgICAgIChmaWx0ZXJfdmVyc2lvbiBhbmQgZmlsdGVyX3ZlcnNpb24gIT0gdmVyc2lvbikgb3IgXAorICAgICAgICAgICAgICAgKGZpbHRlcl9wa2dhcmNoIGFuZCBmaWx0ZXJfcGtnYXJjaCAhPSBwa2dhcmNoKSBvciBcCisgICAgICAgICAgICAgICAoZmlsdGVyX2NoZWNrc3VtIGFuZCBmaWx0ZXJfY2hlY2tzdW0gIT0gY2hlY2tzdW0pOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludChkLmdldFZhcihyZW1haW4gKyAnJCcgKyB2ZXJzaW9uICsgJyQnICsgcGtnYXJjaCArICckJyArIGNoZWNrc3VtLCBUcnVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygiTm90IHZhbGlkIHZhbHVlIG9mICVzOiVzIiAlICh2LHN0cihleGMpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0ID0gY29ubi5pbXBvcnRvbmUodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKQorICAgICAgICAgICAgaWYgcmV0ICE9IHZhbHVlOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJpbXBvcnRpbmcoJXMsJXMsJXMsJWQpIGZhaWxlZC4gREIgbWF5IGhhdmUgbGFyZ2VyIHZhbHVlICVkIiAlICh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUscmV0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICBpbXBvcnRlZC5hcHBlbmQoKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSkpCisgICAgcmV0dXJuIGltcG9ydGVkCisKK2RlZiBwcnNlcnZfZXhwb3J0X3RvZmlsZShkLCBtZXRhaW5mbywgZGF0YWluZm8sIGxvY2tkb3duLCBub21heD1GYWxzZSk6CisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgI2luaXRpbGl6ZSB0aGUgb3V0cHV0IGZpbGUKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoJ1BSU0VSVl9EVU1QRElSJywgVHJ1ZSkpCisgICAgZGYgPSBkLmdldFZhcignUFJTRVJWX0RVTVBGSUxFJywgVHJ1ZSkKKyAgICAjd3JpdGUgZGF0YQorICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgZGYpCisgICAgZiA9IG9wZW4oZGYsICJhIikKKyAgICBpZiBtZXRhaW5mbzoKKyAgICAgICAgI2R1bXAgY29sdW1uIGluZm8gCisgICAgICAgIGYud3JpdGUoIiNQUl9jb3JlX3ZlciA9IFwiJXNcIlxuXG4iICUgbWV0YWluZm9bJ2NvcmVfdmVyJ10pOworICAgICAgICBmLndyaXRlKCIjVGFibGU6ICVzXG4iICUgbWV0YWluZm9bJ3RibF9uYW1lJ10pCisgICAgICAgIGYud3JpdGUoIiNDb2x1bW5zOlxuIikKKyAgICAgICAgZi53cml0ZSgiI25hbWUgICAgICBcdCB0eXBlICAgIFx0IG5vdG4gICAgXHQgZGZsdCAgICBcdCBwa1xuIikKKyAgICAgICAgZi53cml0ZSgiIy0tLS0tLS0tLS1cdCAtLS0tLS0tLVx0IC0tLS0tLS0tXHQgLS0tLS0tLS1cdCAtLS0tXG4iKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obWV0YWluZm9bJ2NvbF9pbmZvJ10pKToKKyAgICAgICAgICAgIGYud3JpdGUoIiMlMTBzXHQgJThzXHQgJThzXHQgJThzXHQgJTRzXG4iICUgCisgICAgICAgICAgICAgICAgICAgIChtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnbmFtZSddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWyd0eXBlJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ25vdG51bGwnXSwgCisgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnZGZsdF92YWx1ZSddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWydwayddKSkKKyAgICAgICAgZi53cml0ZSgiXG4iKQorCisgICAgaWYgbG9ja2Rvd246CisgICAgICAgIGYud3JpdGUoIlBSU0VSVl9MT0NLRE9XTiA9IFwiMVwiXG5cbiIpCisKKyAgICBpZiBkYXRhaW5mbzoKKyAgICAgICAgaWR4ID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGFpbmZvKSk6CisgICAgICAgICAgICBwa2dhcmNoID0gZGF0YWluZm9baV1bJ3BrZ2FyY2gnXQorICAgICAgICAgICAgdmFsdWUgPSBkYXRhaW5mb1tpXVsndmFsdWUnXQorICAgICAgICAgICAgaWYgcGtnYXJjaCBub3QgaW4gaWR4OgorICAgICAgICAgICAgICAgIGlkeFtwa2dhcmNoXSA9IGkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPiBkYXRhaW5mb1tpZHhbcGtnYXJjaF1dWyd2YWx1ZSddOgorICAgICAgICAgICAgICAgIGlkeFtwa2dhcmNoXSA9IGkKKyAgICAgICAgICAgIGYud3JpdGUoIlBSQVVUTyQlcyQlcyQlcyA9IFwiJXNcIlxuIiAlIAorICAgICAgICAgICAgICAgIChzdHIoZGF0YWluZm9baV1bJ3ZlcnNpb24nXSksIHBrZ2FyY2gsIHN0cihkYXRhaW5mb1tpXVsnY2hlY2tzdW0nXSksIHN0cih2YWx1ZSkpKQorICAgICAgICBpZiBub3Qgbm9tYXg6CisgICAgICAgICAgICBmb3IgaSBpbiBpZHg6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiUFJBVVRPXyVzXyVzID0gXCIlc1wiXG4iICUgKHN0cihkYXRhaW5mb1tpZHhbaV1dWyd2ZXJzaW9uJ10pLHN0cihkYXRhaW5mb1tpZHhbaV1dWydwa2dhcmNoJ10pLHN0cihkYXRhaW5mb1tpZHhbaV1dWyd2YWx1ZSddKSkpCisgICAgZi5jbG9zZSgpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworZGVmIHByc2Vydl9jaGVja19hdmFpbChkKToKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgdHJ5OgorICAgICAgICBpZiBsZW4oaG9zdF9wYXJhbXMpICE9IDI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGludChob3N0X3BhcmFtc1sxXSkKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBiYi5mYXRhbCgnVW5kZWZpbmVkL2luY29ycmVjdCBQUlNFUlZfSE9TVCB2YWx1ZS4gRm9ybWF0OiAiaG9zdDpwb3J0IicpCisgICAgZWxzZToKKyAgICAgICAgcHJzZXJ2X21ha2VfY29ubihkLCBUcnVlKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvcWEucHkgYi9tZXRhL2xpYi9vZS9xYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNkYWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcWEucHkKQEAgLTAsMCArMSwxMTEgQEAKK2NsYXNzIEVMRkZpbGU6CisgICAgRUlfTklERU5UID0gMTYKKworICAgIEVJX0NMQVNTICAgICAgPSA0CisgICAgRUlfREFUQSAgICAgICA9IDUKKyAgICBFSV9WRVJTSU9OICAgID0gNgorICAgIEVJX09TQUJJICAgICAgPSA3CisgICAgRUlfQUJJVkVSU0lPTiA9IDgKKworICAgICMgcG9zc2libGUgdmFsdWVzIGZvciBFSV9DTEFTUworICAgIEVMRkNMQVNTTk9ORSA9IDAKKyAgICBFTEZDTEFTUzMyICAgPSAxCisgICAgRUxGQ0xBU1M2NCAgID0gMgorCisgICAgIyBwb3NzaWJsZSB2YWx1ZSBmb3IgRUlfVkVSU0lPTgorICAgIEVWX0NVUlJFTlQgICA9IDEKKworICAgICMgcG9zc2libGUgdmFsdWVzIGZvciBFSV9EQVRBCisgICAgRUxGREFUQU5PTkUgID0gMAorICAgIEVMRkRBVEEyTFNCICA9IDEKKyAgICBFTEZEQVRBMk1TQiAgPSAyCisKKyAgICBkZWYgbXlfYXNzZXJ0KHNlbGYsIGV4cGVjdGF0aW9uLCByZXN1bHQpOgorICAgICAgICBpZiBub3QgZXhwZWN0YXRpb24gPT0gcmVzdWx0OgorICAgICAgICAgICAgI3ByaW50ICInJXgnLCcleCcgJXMiICUgKG9yZChleHBlY3RhdGlvbiksIG9yZChyZXN1bHQpLCBzZWxmLm5hbWUpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoaXMgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYml0cyA9IDApOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYml0cyA9IGJpdHMKKyAgICAgICAgc2VsZi5vYmpkdW1wX291dHB1dCA9IHt9CisKKyAgICBkZWYgb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZShzZWxmLm5hbWUsICJyIikKKyAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5maWxlLnJlYWQoRUxGRmlsZS5FSV9OSURFTlQrNCkKKworICAgICAgICBzZWxmLm15X2Fzc2VydChsZW4oc2VsZi5kYXRhKSwgRUxGRmlsZS5FSV9OSURFTlQrNCkKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzBdLCBjaHIoMHg3ZikgKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMV0sICdFJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzJdLCAnTCcpCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVszXSwgJ0YnKQorICAgICAgICBpZiBzZWxmLmJpdHMgPT0gMDoKKyAgICAgICAgICAgIGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKToKKyAgICAgICAgICAgICAgICBzZWxmLmJpdHMgPSAzMgorICAgICAgICAgICAgZWxpZiBzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10gPT0gY2hyKEVMRkZpbGUuRUxGQ0xBU1M2NCk6CisgICAgICAgICAgICAgICAgc2VsZi5iaXRzID0gNjQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBOb3QgMzItYml0IG9yIDY0Li4gbGV0cyBhc3NlcnQKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVMRiBidXQgbm90IDMyIG9yIDY0IGJpdC4iKQorICAgICAgICBlbGlmIHNlbGYuYml0cyA9PSAzMjoKKyAgICAgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSwgY2hyKEVMRkZpbGUuRUxGQ0xBU1MzMikpCisgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDY0OgorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVzdCBzcGVjaWZ5IHVua25vd24sIDMyIG9yIDY0IGJpdCBzaXplLiIpCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVtFTEZGaWxlLkVJX1ZFUlNJT05dLCBjaHIoRUxGRmlsZS5FVl9DVVJSRU5UKSApCisKKyAgICAgICAgc2VsZi5zZXggPSBzZWxmLmRhdGFbRUxGRmlsZS5FSV9EQVRBXQorICAgICAgICBpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBTk9ORSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInNlbGYuc2V4ID09IEVMRkRBVEFOT05FIikKKyAgICAgICAgZWxpZiBzZWxmLnNleCA9PSBjaHIoRUxGRmlsZS5FTEZEQVRBMkxTQik6CisgICAgICAgICAgICBzZWxmLnNleCA9ICI8IgorICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTVNCKToKKyAgICAgICAgICAgIHNlbGYuc2V4ID0gIj4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gc2VsZi5zZXgiKQorCisgICAgZGVmIG9zQWJpKHNlbGYpOgorICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX09TQUJJXSkKKworICAgIGRlZiBhYmlWZXJzaW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gb3JkKHNlbGYuZGF0YVtFTEZGaWxlLkVJX0FCSVZFUlNJT05dKQorCisgICAgZGVmIGFiaVNpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJpdHMKKworICAgIGRlZiBpc0xpdHRsZUVuZGlhbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V4ID09ICI8IgorCisgICAgZGVmIGlzQmlnRW5naWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXggPT0gIj4iCisKKyAgICBkZWYgbWFjaGluZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdlIGtub3cgdGhlIHNleCBzdG9yZWQgaW4gc2VsZi5zZXggYW5kIHdlCisgICAgICAgIGtub3cgdGhlIHBvc2l0aW9uCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgc3RydWN0CisgICAgICAgIChhLCkgPSBzdHJ1Y3QudW5wYWNrKHNlbGYuc2V4KyJIIiwgc2VsZi5kYXRhWzE4OjIwXSkKKyAgICAgICAgcmV0dXJuIGEKKworICAgIGRlZiBydW5fb2JqZHVtcChzZWxmLCBjbWQsIGQpOgorICAgICAgICBpbXBvcnQgYmIucHJvY2VzcworICAgICAgICBpbXBvcnQgc3lzCisKKyAgICAgICAgaWYgY21kIGluIHNlbGYub2JqZHVtcF9vdXRwdXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpkdW1wX291dHB1dFtjbWRdCisKKyAgICAgICAgb2JqZHVtcCA9IGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkxDX0FMTCJdID0gIkMiCisgICAgICAgIGVudlsiUEFUSCJdID0gZC5nZXRWYXIoJ1BBVEgnLCBUcnVlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoIiVzICVzICVzIiAlIChvYmpkdW1wLCBjbWQsIHNlbGYubmFtZSkpCisgICAgICAgICAgICBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0gPSBiYi5wcm9jZXNzLnJ1bihbb2JqZHVtcCwgY21kLCBzZWxmLm5hbWVdLCBlbnY9ZW52LCBzaGVsbD1GYWxzZSlbMF0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiJXMgJXMgJXMgZmFpbGVkOiAlcyIgJSAob2JqZHVtcCwgY21kLCBzZWxmLm5hbWUsIGUpKQorICAgICAgICAgICAgcmV0dXJuICIiCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weSBiL21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmE3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9yZWNpcGV1dGlscy5weQpAQCAtMCwwICsxLDc0MCBAQAorIyBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgbW9kaWZ5aW5nIHJlY2lwZXMKKyMKKyMgU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gdGhlIE9FIGxheWVyIGluZGV4CisjCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IHV0aWxzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgcmUKK2ltcG9ydCBmbm1hdGNoCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCwgZGVmYXVsdGRpY3QKKworCisjIEhlbHAgdXMgdG8gZmluZCBwbGFjZXMgdG8gaW5zZXJ0IHZhbHVlcworcmVjaXBlX3Byb2dyZXNzaW9uID0gWydTVU1NQVJZJywgJ0RFU0NSSVBUSU9OJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU0VDVElPTicsICdMSUNFTlNFJywgJ0xJQ19GSUxFU19DSEtTVU0nLCAnUFJPVklERVMnLCAnREVQRU5EUycsICdQUicsICdQVicsICdTUkNSRVYnLCAnU1JDX1VSSScsICdTJywgJ2RvX2ZldGNoJywgJ2RvX3VucGFjaycsICdkb19wYXRjaCcsICdFWFRSQV9PRUNPTkYnLCAnZG9fY29uZmlndXJlJywgJ0VYVFJBX09FTUFLRScsICdkb19jb21waWxlJywgJ2RvX2luc3RhbGwnLCAnZG9fcG9wdWxhdGVfc3lzcm9vdCcsICdJTklUU0NSSVBUJywgJ1VTRVJBREQnLCAnR1JPVVBBREQnLCAnUEFDS0FHRVMnLCAnRklMRVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JQUk9WSURFUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUycsICdBTExPV19FTVBUWScsICdkb19wYWNrYWdlJywgJ2RvX2RlcGxveSddCisjIFZhcmlhYmxlcyB0aGF0IHNvbWV0aW1lcyBhcmUgYSBiaXQgbG9uZyBidXQgc2hvdWxkbid0IGJlIHdyYXBwZWQKK25vd3JhcF92YXJzID0gWydTVU1NQVJZJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInXQorbGlzdF92YXJzID0gWydTUkNfVVJJJywgJ0xJQ19GSUxFU19DSEtTVU0nXQorbWV0YV92YXJzID0gWydTVU1NQVJZJywgJ0RFU0NSSVBUSU9OJywgJ0hPTUVQQUdFJywgJ0JVR1RSQUNLRVInLCAnU0VDVElPTiddCisKKworZGVmIHBuX3RvX3JlY2lwZShjb29rZXIsIHBuKToKKyAgICAiIiJDb252ZXJ0IGEgcmVjaXBlIG5hbWUgKFBOKSB0byB0aGUgcGF0aCB0byB0aGUgcmVjaXBlIGZpbGUiIiIKKyAgICBpbXBvcnQgYmIucHJvdmlkZXJzCisKKyAgICBpZiBwbiBpbiBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuOgorICAgICAgICBmaWxlbmFtZXMgPSBjb29rZXIucmVjaXBlY2FjaGUucGtnX3BuW3BuXQorICAgICAgICBiZXN0ID0gYmIucHJvdmlkZXJzLmZpbmRCZXN0UHJvdmlkZXIocG4sIGNvb2tlci5kYXRhLCBjb29rZXIucmVjaXBlY2FjaGUsIGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4pCisgICAgICAgIHJldHVybiBiZXN0WzNdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbik6CisgICAgIiIiSWYgYSByZWNpcGUgY291bGQgbm90IGJlIGZvdW5kLCBmaW5kIG91dCB3aHkgaWYgcG9zc2libGUiIiIKKyAgICBpbXBvcnQgYmIudGFza2RhdGEKKyAgICB0YXNrZGF0YSA9IGJiLnRhc2tkYXRhLlRhc2tEYXRhKE5vbmUsIHNraXBsaXN0PWNvb2tlci5za2lwbGlzdCkKKyAgICByZXR1cm4gdGFza2RhdGEuZ2V0X3JlYXNvbnMocG4pCisKKworZGVmIHBhcnNlX3JlY2lwZShmbiwgYXBwZW5kZmlsZXMsIGQpOgorICAgICIiIgorICAgIFBhcnNlIGFuIGluZGl2aWR1YWwgcmVjaXBlIGZpbGUsIG9wdGlvbmFsbHkgd2l0aCBhIGxpc3Qgb2YKKyAgICBiYmFwcGVuZCBmaWxlcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIuY2FjaGUKKyAgICBlbnZkYXRhID0gYmIuY2FjaGUuQ2FjaGUubG9hZERhdGFGdWxsKGZuLCBhcHBlbmRmaWxlcywgZCkKKyAgICByZXR1cm4gZW52ZGF0YQorCisKK2RlZiBwYXJzZV9yZWNpcGVfc2ltcGxlKGNvb2tlciwgcG4sIGQsIGFwcGVuZHM9VHJ1ZSk6CisgICAgIiIiCisgICAgUGFyc2UgYSByZWNpcGUgYW5kIG9wdGlvbmFsbHkgYWxsIGJiYXBwZW5kcyB0aGF0IGFwcGx5IHRvIGl0CisgICAgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAiIiIKKyAgICBpbXBvcnQgYmIucHJvdmlkZXJzCisKKyAgICByZWNpcGVmaWxlID0gcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgIHNraXByZWFzb25zID0gZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbikKKyAgICAgICAgIyBXZSBtYXkgYXMgd2VsbCByZS11c2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIgaGVyZQorICAgICAgICBpZiBza2lwcmVhc29uczoKKyAgICAgICAgICAgIHJhaXNlIGJiLnByb3ZpZGVycy5Ob1Byb3ZpZGVyKHNraXByZWFzb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoJ1VuYWJsZSB0byBmaW5kIGFueSByZWNpcGUgZmlsZSBtYXRjaGluZyAlcycgJSBwbikKKyAgICBpZiBhcHBlbmRzOgorICAgICAgICBhcHBlbmRmaWxlcyA9IGNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMocmVjaXBlZmlsZSkKKyAgICByZXR1cm4gcGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZGZpbGVzLCBkKQorCisKK2RlZiBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKToKKyAgICAiIiJGaW5kIHRoZSBmaWxlIGluIHdoaWNoIGVhY2ggb2YgYSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBzZXQuCisgICAgTm90ZTogcmVxdWlyZXMgdmFyaWFibGUgaGlzdG9yeSB0byBiZSBlbmFibGVkIHdoZW4gcGFyc2luZy4KKyAgICAiIiIKKyAgICB2YXJmaWxlcyA9IHt9CisgICAgZm9yIHYgaW4gdmFybGlzdDoKKyAgICAgICAgaGlzdG9yeSA9IGQudmFyaGlzdG9yeS52YXJpYWJsZSh2KQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBoaXN0b3J5OgorICAgICAgICAgICAgaWYgJ2ZpbGUnIGluIGV2ZW50IGFuZCBub3QgJ2ZsYWcnIGluIGV2ZW50OgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChldmVudFsnZmlsZSddKQorICAgICAgICBpZiBmaWxlczoKKyAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmaWxlc1stMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBOb25lCisgICAgICAgIHZhcmZpbGVzW3ZdID0gYWN0dWFsZmlsZQorCisgICAgcmV0dXJuIHZhcmZpbGVzCisKKworZGVmIHBhdGNoX3JlY2lwZV9maWxlKGZuLCB2YWx1ZXMsIHBhdGNoPUZhbHNlLCByZWxwYXRoPScnKToKKyAgICAiIiJVcGRhdGUgb3IgaW5zZXJ0IHZhcmlhYmxlIHZhbHVlcyBpbnRvIGEgcmVjaXBlIGZpbGUgKGFzc3VtaW5nIHlvdQorICAgICAgIGhhdmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBleGFjdCBmaWxlIHlvdSB3YW50IHRvIHVwZGF0ZS4pCisgICAgICAgTm90ZSB0aGF0IHNvbWUgbWFudWFsIGluc3BlY3Rpb24vaW50ZXJ2ZW50aW9uIG1heSBiZSByZXF1aXJlZAorICAgICAgIHNpbmNlIHRoaXMgY2Fubm90IGhhbmRsZSBhbGwgc2l0dWF0aW9ucy4KKyAgICAiIiIKKyAgICByZW1haW5pbmduYW1lcyA9IHt9CisgICAgZm9yIGsgaW4gdmFsdWVzLmtleXMoKToKKyAgICAgICAgcmVtYWluaW5nbmFtZXNba10gPSByZWNpcGVfcHJvZ3Jlc3Npb24uaW5kZXgoaykgaWYgayBpbiByZWNpcGVfcHJvZ3Jlc3Npb24gZWxzZSAtMQorICAgIHJlbWFpbmluZ25hbWVzID0gT3JkZXJlZERpY3Qoc29ydGVkKHJlbWFpbmluZ25hbWVzLml0ZXJpdGVtcygpLCBrZXk9bGFtYmRhIHg6IHhbMV0pKQorCisgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoJ3cnLCBkZWxldGU9RmFsc2UpIGFzIHRmOgorICAgICAgICBkZWYgb3V0cHV0dmFsdWUobmFtZSk6CisgICAgICAgICAgICByYXd0ZXh0ID0gJyVzID0gIiVzIlxuJyAlIChuYW1lLCB2YWx1ZXNbbmFtZV0pCisgICAgICAgICAgICBpZiBuYW1lIGluIG5vd3JhcF92YXJzOgorICAgICAgICAgICAgICAgIHRmLndyaXRlKHJhd3RleHQpCisgICAgICAgICAgICBlbGlmIG5hbWUgaW4gbGlzdF92YXJzOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsdWUgPSB2YWx1ZXNbbmFtZV0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdHZhbHVlKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzcGxpdCA9ICcgXFxcbicgKyAoJyAnICogKGxlbihuYW1lKSArIDQpKQorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXMgPSAiJXMlcyJcbicgJSAobmFtZSwgbGluZXNwbGl0LmpvaW4oc3BsaXR2YWx1ZSksIGxpbmVzcGxpdCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUocmF3dGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd3JhcHBlZCA9IHRleHR3cmFwLndyYXAocmF3dGV4dCkKKyAgICAgICAgICAgICAgICBmb3Igd3JhcGxpbmUgaW4gd3JhcHBlZFs6LTFdOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXMgXFxcbicgJSB3cmFwbGluZSkKKyAgICAgICAgICAgICAgICB0Zi53cml0ZSgnJXNcbicgJSB3cmFwcGVkWy0xXSkKKworICAgICAgICB0Zm4gPSB0Zi5uYW1lCisgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgIyBGaXJzdCBydW50aHJvdWdoIC0gZmluZCBleGlzdGluZyBuYW1lcyAoc28gd2Uga25vdyBub3QgdG8gaW5zZXJ0IGJhc2VkIG9uIHJlY2lwZV9wcm9ncmVzc2lvbikKKyAgICAgICAgICAgICMgU2Vjb25kIHJ1bnRocm91Z2ggLSBtYWtlIHRoZSBjaGFuZ2VzCisgICAgICAgICAgICBleGlzdGluZ25hbWVzID0gW10KKyAgICAgICAgICAgIGZvciBydW50aHJvdWdoIGluIFsxLCAyXToKKyAgICAgICAgICAgICAgICBjdXJybmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3Vycm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHJlY2lwZV9wcm9ncmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJ14lcyhfcHJlcGVuZHxfYXBwZW5kKSpbID86PShdJyAlIHAsIGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nbmFtZXNba10gPiAtMSBhbmQgcmVjaXBlX3Byb2dyZXNzaW9uLmluZGV4KHApID4gcmVtYWluaW5nbmFtZXNba10gYW5kIHJ1bnRocm91Z2ggPiAxIGFuZCBub3QgayBpbiBleGlzdGluZ25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHZhbHVlKGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKCdeJXNbID86PV0nICUgaywgbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBydW50aHJvdWdoID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ25hbWVzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJlbWFpbmluZ25hbWVzW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJybmFtZSBhbmQgcnVudGhyb3VnaCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoY3Vycm5hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgY3Vycm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzbGluZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJybmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHJ1bnRocm91Z2ggPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgaWYgcmVtYWluaW5nbmFtZXM6CisgICAgICAgICAgICB0Zi53cml0ZSgnXG4nKQorICAgICAgICAgICAgZm9yIGsgaW4gcmVtYWluaW5nbmFtZXMua2V5cygpOgorICAgICAgICAgICAgICAgIG91dHB1dHZhbHVlKGspCisKKyAgICB3aXRoIG9wZW4odGZuLCAnVScpIGFzIGY6CisgICAgICAgIHRvbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgaWYgcGF0Y2g6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ1UnKSBhcyBmOgorICAgICAgICAgICAgZnJvbWxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICByZWxmbiA9IG9zLnBhdGgucmVscGF0aChmbiwgcmVscGF0aCkKKyAgICAgICAgZGlmZiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKGZyb21saW5lcywgdG9saW5lcywgJ2EvJXMnICUgcmVsZm4sICdiLyVzJyAlIHJlbGZuKQorICAgICAgICBvcy5yZW1vdmUodGZuKQorICAgICAgICByZXR1cm4gZGlmZgorICAgIGVsc2U6CisgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKHRvbGluZXMpCisgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgIHJldHVybiBOb25lCisKK2RlZiBsb2NhbGlzZV9maWxlX3ZhcnMoZm4sIHZhcmZpbGVzLCB2YXJsaXN0KToKKyAgICAiIiJHaXZlbiBhIGxpc3Qgb2YgdmFyaWFibGVzIGFuZCB2YXJpYWJsZSBoaXN0b3J5IChmZXRjaGVkIHdpdGggZ2V0X3Zhcl9maWxlcygpKQorICAgIGZpbmQgd2hlcmUgZWFjaCB2YXJpYWJsZSBzaG91bGQgYmUgc2V0L2NoYW5nZWQuIFRoaXMgaGFuZGxlcyBmb3IgZXhhbXBsZSB3aGVyZSBhCisgICAgcmVjaXBlIGluY2x1ZGVzIGFuIGluYyBmaWxlIHdoZXJlIHZhcmlhYmxlcyBtaWdodCBiZSBjaGFuZ2VkIC0gaW4gbW9zdCBjYXNlcworICAgIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBpbmMgZmlsZSB3aGVuIGNoYW5naW5nIHRoZSB2YXJpYWJsZSB2YWx1ZSByYXRoZXIgdGhhbiBhZGRpbmcKKyAgICBpdCB0byB0aGUgcmVjaXBlIGl0c2VsZi4KKyAgICAiIiIKKyAgICBmbmRpciA9IG9zLnBhdGguZGlybmFtZShmbikgKyBvcy5zZXAKKworICAgIGZpcnN0X21ldGFfZmlsZSA9IE5vbmUKKyAgICBmb3IgdiBpbiBtZXRhX3ZhcnM6CisgICAgICAgIGYgPSB2YXJmaWxlcy5nZXQodiwgTm9uZSkKKyAgICAgICAgaWYgZjoKKyAgICAgICAgICAgIGFjdHVhbGRpciA9IG9zLnBhdGguZGlybmFtZShmKSArIG9zLnNlcAorICAgICAgICAgICAgaWYgYWN0dWFsZGlyLnN0YXJ0c3dpdGgoZm5kaXIpOgorICAgICAgICAgICAgICAgIGZpcnN0X21ldGFfZmlsZSA9IGYKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZmlsZXZhcnMgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciB2IGluIHZhcmxpc3Q6CisgICAgICAgIGYgPSB2YXJmaWxlc1t2XQorICAgICAgICAjIE9ubHkgcmV0dXJuIGZpbGVzIHRoYXQgYXJlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgcmVjaXBlIG9yIGluIHNvbWUgZGlyZWN0b3J5IGJlbG93IHRoZXJlCisgICAgICAgICMgKHRoaXMgZXhjbHVkZXMgYmJjbGFzcyBmaWxlcyBhbmQgY29tbW9uIGluYyBmaWxlcyB0aGF0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUgdmFyaWFibGUKKyAgICAgICAgIyBpbiBpZiB3ZSB3ZXJlIGdvaW5nIHRvIHNldCBhIHZhbHVlIHNwZWNpZmljIHRvIHRoaXMgcmVjaXBlKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVmFyaWFibGUgaXNuJ3QgaW4gYSBmaWxlLCBpZiBpdCdzIG9uZSBvZiB0aGUgIm1ldGEiIHZhcnMsIHVzZSB0aGUgZmlyc3QgZmlsZSB3aXRoIGEgbWV0YSB2YXIgaW4gaXQKKyAgICAgICAgICAgIGlmIGZpcnN0X21ldGFfZmlsZToKKyAgICAgICAgICAgICAgICBhY3R1YWxmaWxlID0gZmlyc3RfbWV0YV9maWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmbgorCisgICAgICAgIGFjdHVhbGRpciA9IG9zLnBhdGguZGlybmFtZShhY3R1YWxmaWxlKSArIG9zLnNlcAorICAgICAgICBpZiBub3QgYWN0dWFsZGlyLnN0YXJ0c3dpdGgoZm5kaXIpOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZuCisgICAgICAgIGZpbGV2YXJzW2FjdHVhbGZpbGVdLmFwcGVuZCh2KQorCisgICAgcmV0dXJuIGZpbGV2YXJzCisKK2RlZiBwYXRjaF9yZWNpcGUoZCwgZm4sIHZhcnZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgorICAgICIiIk1vZGlmeSBhIGxpc3Qgb2YgdmFyaWFibGUgdmFsdWVzIGluIHRoZSBzcGVjaWZpZWQgcmVjaXBlLiBIYW5kbGVzIGluYyBmaWxlcyBpZgorICAgIHVzZWQgYnkgdGhlIHJlY2lwZS4KKyAgICAiIiIKKyAgICB2YXJsaXN0ID0gdmFydmFsdWVzLmtleXMoKQorICAgIHZhcmZpbGVzID0gZ2V0X3Zhcl9maWxlcyhmbiwgdmFybGlzdCwgZCkKKyAgICBsb2NzID0gbG9jYWxpc2VfZmlsZV92YXJzKGZuLCB2YXJmaWxlcywgdmFybGlzdCkKKyAgICBwYXRjaGVzID0gW10KKyAgICBmb3IgZix2IGluIGxvY3MuaXRlcml0ZW1zKCk6CisgICAgICAgIHZhbHMgPSB7azogdmFydmFsdWVzW2tdIGZvciBrIGluIHZ9CisgICAgICAgIHBhdGNoZGF0YSA9IHBhdGNoX3JlY2lwZV9maWxlKGYsIHZhbHMsIHBhdGNoLCByZWxwYXRoKQorICAgICAgICBpZiBwYXRjaDoKKyAgICAgICAgICAgIHBhdGNoZXMuYXBwZW5kKHBhdGNoZGF0YSkKKworICAgIGlmIHBhdGNoOgorICAgICAgICByZXR1cm4gcGF0Y2hlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworCitkZWYgY29weV9yZWNpcGVfZmlsZXMoZCwgdGd0X2Rpciwgd2hvbGVfZGlyPUZhbHNlLCBkb3dubG9hZD1UcnVlKToKKyAgICAiIiJDb3B5IChsb2NhbCkgcmVjaXBlIGZpbGVzLCBpbmNsdWRpbmcgYm90aCBmaWxlcyBpbmNsdWRlZCB2aWEgaW5jbHVkZS9yZXF1aXJlLAorICAgIGFuZCBmaWxlcyByZWZlcnJlZCB0byBpbiB0aGUgU1JDX1VSSSB2YXJpYWJsZS4iIiIKKyAgICBpbXBvcnQgYmIuZmV0Y2gyCisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgICMgRklYTUUgbmVlZCBhIHdhcm5pbmcgaWYgdGhlIHVuZXhwYW5kZWQgU1JDX1VSSSB2YWx1ZSBjb250YWlucyB2YXJpYWJsZSByZWZlcmVuY2VzCisKKyAgICB1cmlzID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaCh1cmlzLCBkKQorICAgIGlmIGRvd25sb2FkOgorICAgICAgICBmZXRjaC5kb3dubG9hZCgpCisKKyAgICAjIENvcHkgbG9jYWwgZmlsZXMgdG8gdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZ2F0aGVyIGFueSByZW1vdGUgZmlsZXMKKyAgICBiYl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSkgKyBvcy5zZXAKKyAgICByZW1vdGVzID0gW10KKyAgICBpbmNsdWRlcyA9IFtwYXRoIGZvciBwYXRoIGluIGQuZ2V0VmFyKCdCQklOQ0xVREVEJywgVHJ1ZSkuc3BsaXQoKSBpZgorICAgICAgICAgICAgICAgIHBhdGguc3RhcnRzd2l0aChiYl9kaXIpIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoKV0KKyAgICBmb3IgcGF0aCBpbiBmZXRjaC5sb2NhbHBhdGhzKCkgKyBpbmNsdWRlczoKKyAgICAgICAgIyBPbmx5IGltcG9ydCBmaWxlcyB0aGF0IGFyZSB1bmRlciB0aGUgbWV0YSBkaXJlY3RvcnkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKGJiX2Rpcik6CisgICAgICAgICAgICBpZiBub3Qgd2hvbGVfZGlyOgorICAgICAgICAgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgYmJfZGlyKQorICAgICAgICAgICAgICAgIHN1YmRpciA9IG9zLnBhdGguam9pbih0Z3RfZGlyLCBvcy5wYXRoLmRpcm5hbWUocmVscGF0aCkpCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHN1YmRpcik6CisgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHN1YmRpcikKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIocGF0aCwgb3MucGF0aC5qb2luKHRndF9kaXIsIHJlbHBhdGgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVtb3Rlcy5hcHBlbmQocGF0aCkKKyAgICAjIFNpbXBseSBjb3B5IHdob2xlIG1ldGEgZGlyLCBpZiByZXF1ZXN0ZWQKKyAgICBpZiB3aG9sZV9kaXI6CisgICAgICAgIHNodXRpbC5jb3B5dHJlZShiYl9kaXIsIHRndF9kaXIpCisKKyAgICByZXR1cm4gcmVtb3RlcworCisKK2RlZiBnZXRfcmVjaXBlX3BhdGNoZXMoZCk6CisgICAgIiIiR2V0IGEgbGlzdCBvZiB0aGUgcGF0Y2hlcyBpbmNsdWRlZCBpbiBTUkNfVVJJIHdpdGhpbiBhIHJlY2lwZS4iIiIKKyAgICBwYXRjaGZpbGVzID0gW10KKyAgICAjIEV4ZWN1dGUgc3JjX3BhdGNoZXMoKSBkZWZpbmVkIGluIHBhdGNoLmJiY2xhc3MgLSB0aGlzIHdvcmtzIHNpbmNlIHRoYXQgY2xhc3MKKyAgICAjIGlzIGluaGVyaXRlZCBnbG9iYWxseQorICAgIHBhdGNoZXMgPSBiYi51dGlscy5leGVjX2ZsYXRfcHl0aG9uX2Z1bmMoJ3NyY19wYXRjaGVzJywgZCkKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisgICAgICAgIHBhdGNoZmlsZXMuYXBwZW5kKGxvY2FsKQorICAgIHJldHVybiBwYXRjaGZpbGVzCisKKworZGVmIGdldF9yZWNpcGVfcGF0Y2hlZF9maWxlcyhkKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIGxpc3Qgb2YgcGF0Y2hlcyBmb3IgYSByZWNpcGUgYWxvbmcgd2l0aCB0aGUgZmlsZXMgZWFjaCBwYXRjaCBtb2RpZmllcy4KKyAgICBQYXJhbXM6CisgICAgICAgIGQ6IHRoZSBkYXRhc3RvcmUgZm9yIHRoZSByZWNpcGUKKyAgICBSZXR1cm5zOgorICAgICAgICBhIGRpY3QgbWFwcGluZyBwYXRjaCBmaWxlIHBhdGggdG8gYSBsaXN0IG9mIHR1cGxlcyBvZiBjaGFuZ2VkIGZpbGVzIGFuZAorICAgICAgICBjaGFuZ2UgbW9kZSAoJ0EnIGZvciBhZGQsICdEJyBmb3IgZGVsZXRlIG9yICdNJyBmb3IgbW9kaWZ5KQorICAgICIiIgorICAgIGltcG9ydCBvZS5wYXRjaAorICAgICMgRXhlY3V0ZSBzcmNfcGF0Y2hlcygpIGRlZmluZWQgaW4gcGF0Y2guYmJjbGFzcyAtIHRoaXMgd29ya3Mgc2luY2UgdGhhdCBjbGFzcworICAgICMgaXMgaW5oZXJpdGVkIGdsb2JhbGx5CisgICAgcGF0Y2hlcyA9IGJiLnV0aWxzLmV4ZWNfZmxhdF9weXRob25fZnVuYygnc3JjX3BhdGNoZXMnLCBkKQorICAgIHBhdGNoZWRmaWxlcyA9IHt9CisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIHBhdGNoZmlsZSwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgc3RyaXBsZXZlbCA9IGludChwYXJtWydzdHJpcGxldmVsJ10pCisgICAgICAgIHBhdGNoZWRmaWxlc1twYXRjaGZpbGVdID0gb2UucGF0Y2guUGF0Y2hTZXQuZ2V0UGF0Y2hlZEZpbGVzKHBhdGNoZmlsZSwgc3RyaXBsZXZlbCwgb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdTJywgVHJ1ZSksIHBhcm0uZ2V0KCdwYXRjaGRpcicsICcnKSkpCisgICAgcmV0dXJuIHBhdGNoZWRmaWxlcworCisKK2RlZiB2YWxpZGF0ZV9wbihwbik6CisgICAgIiIiUGVyZm9ybSB2YWxpZGF0aW9uIG9uIGEgcmVjaXBlIG5hbWUgKFBOKSBmb3IgYSBuZXcgcmVjaXBlLiIiIgorICAgIHJlc2VydmVkX25hbWVzID0gWydmb3JjZXZhcmlhYmxlJywgJ2FwcGVuZCcsICdwcmVwZW5kJywgJ3JlbW92ZSddCisgICAgaWYgbm90IHJlLm1hdGNoKCdbMC05YS16LS5dKycsIHBuKToKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IG9ubHkgY2hhcmFjdGVycyAwLTksIGEteiwgLSBhbmQgLiBhcmUgYWxsb3dlZCcgJSBwbgorICAgIGVsaWYgcG4gaW4gcmVzZXJ2ZWRfbmFtZXM6CisgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBpcyBhIHJlc2VydmVkIGtleXdvcmQnICUgcG4KKyAgICBlbGlmIHBuLnN0YXJ0c3dpdGgoJ3BuLScpOgorICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogbmFtZXMgc3RhcnRpbmcgd2l0aCAicG4tIiBhcmUgcmVzZXJ2ZWQnICUgcG4KKyAgICByZXR1cm4gJycKKworCitkZWYgZ2V0X2JiYXBwZW5kX3BhdGgoZCwgZGVzdGxheWVyZGlyLCB3aWxkY2FyZHZlcj1GYWxzZSk6CisgICAgIiIiRGV0ZXJtaW5lIGhvdyBhIGJiYXBwZW5kIGZvciBhIHJlY2lwZSBzaG91bGQgYmUgbmFtZWQgYW5kIGxvY2F0ZWQgd2l0aGluIGFub3RoZXIgbGF5ZXIiIiIKKworICAgIGltcG9ydCBiYi5jb29rZXJkYXRhCisKKyAgICBkZXN0bGF5ZXJkaXIgPSBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKQorICAgIHJlY2lwZWZpbGUgPSBkLmdldFZhcignRklMRScsIFRydWUpCisgICAgcmVjaXBlZm4gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpWzBdCisgICAgaWYgd2lsZGNhcmR2ZXIgYW5kICdfJyBpbiByZWNpcGVmbjoKKyAgICAgICAgcmVjaXBlZm4gPSByZWNpcGVmbi5zcGxpdCgnXycsIDEpWzBdICsgJ18lJworICAgIGFwcGVuZGZuID0gcmVjaXBlZm4gKyAnLmJiYXBwZW5kJworCisgICAgIyBQYXJzZSB0aGUgc3BlY2lmaWVkIGxheWVyJ3MgbGF5ZXIuY29uZiBmaWxlIGRpcmVjdGx5LCBpbiBjYXNlIHRoZSBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgY29uZmRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGNvbmZkYXRhLnNldFZhcignQkJGSUxFUycsICcnKQorICAgIGNvbmZkYXRhLnNldFZhcignTEFZRVJESVInLCBkZXN0bGF5ZXJkaXIpCisgICAgZGVzdGxheWVyY29uZiA9IG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICJjb25mIiwgImxheWVyLmNvbmYiKQorICAgIGNvbmZkYXRhID0gYmIuY29va2VyZGF0YS5wYXJzZV9jb25maWdfZmlsZShkZXN0bGF5ZXJjb25mLCBjb25mZGF0YSkKKworICAgIG9yaWdsYXllcmRpciA9IGZpbmRfbGF5ZXJkaXIocmVjaXBlZmlsZSkKKyAgICBpZiBub3Qgb3JpZ2xheWVyZGlyOgorICAgICAgICByZXR1cm4gKE5vbmUsIEZhbHNlKQorICAgICMgTm93IGpvaW4gdGhpcyB0byB0aGUgcGF0aCB3aGVyZSB0aGUgYmJhcHBlbmQgaXMgZ29pbmcgYW5kIGNoZWNrIGlmIGl0IGlzIGNvdmVyZWQgYnkgQkJGSUxFUworICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCBvcmlnbGF5ZXJkaXIpLCBhcHBlbmRmbikKKyAgICBjbG9zZXBhdGggPSAnJworICAgIHBhdGhvayA9IFRydWUKKyAgICBmb3IgYmJmaWxlc3BlYyBpbiBjb25mZGF0YS5nZXRWYXIoJ0JCRklMRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGFwcGVuZHBhdGgsIGJiZmlsZXNwZWMpOgorICAgICAgICAgICAgIyBPdXIgYXBwZW5kIHBhdGggd29ya3MsIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsaWYgYmJmaWxlc3BlYy5zdGFydHN3aXRoKGRlc3RsYXllcmRpcikgYW5kIGZubWF0Y2guZm5tYXRjaGNhc2UoJ3Rlc3QuYmJhcHBlbmQnLCBvcy5wYXRoLmJhc2VuYW1lKGJiZmlsZXNwZWMpKToKKyAgICAgICAgICAgICMgVHJ5IHRvIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgcGF0aAorICAgICAgICAgICAgaWYgbGVuKGJiZmlsZXNwZWMpID4gbGVuKGNsb3NlcGF0aCk6CisgICAgICAgICAgICAgICAgY2xvc2VwYXRoID0gYmJmaWxlc3BlYworICAgIGVsc2U6CisgICAgICAgICMgVW5mb3J0dW5hdGVseSB0aGUgYmJhcHBlbmQgbGF5ZXIgYW5kIHRoZSBvcmlnaW5hbCByZWNpcGUncyBsYXllciBkb24ndCBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICBpZiBjbG9zZXBhdGg6CisgICAgICAgICAgICAjIGJiYXBwZW5kIGxheWVyJ3MgbGF5ZXIuY29uZiBhdCBsZWFzdCBoYXMgYSBzcGVjIHRoYXQgcGlja3MgdXAgLmJiYXBwZW5kIGZpbGVzCisgICAgICAgICAgICAjIE5vdyB3ZSBqdXN0IG5lZWQgdG8gc3Vic3RpdHV0ZSBvdXQgYW55IHdpbGRjYXJkcworICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShjbG9zZXBhdGgpLCBkZXN0bGF5ZXJkaXIpCisgICAgICAgICAgICBpZiAncmVjaXBlcy0qJyBpbiBhcHBlbmRzdWJkaXI6CisgICAgICAgICAgICAgICAgIyBUcnkgdG8gY29weSB0aGlzIHBhcnQgZnJvbSB0aGUgb3JpZ2luYWwgcmVjaXBlIHBhdGgKKyAgICAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goJy9yZWNpcGVzLVteL10rLycsIHJlY2lwZWZpbGUpCisgICAgICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnL3JlY2lwZXMtKi8nLCByZXMuZ3JvdXAoMCkpCisgICAgICAgICAgICAjIFRoaXMgaXMgY3J1ZGUsIGJ1dCB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZworICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gYXBwZW5kc3ViZGlyLnJlcGxhY2UoJyonLCByZWNpcGVmbi5zcGxpdCgnXycpWzBdKQorICAgICAgICAgICAgYXBwZW5kc3ViZGlyID0gYXBwZW5kc3ViZGlyLnJlcGxhY2UoJz8nLCAnYScpCisgICAgICAgICAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgYXBwZW5kc3ViZGlyLCBhcHBlbmRmbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGhvayA9IEZhbHNlCisgICAgcmV0dXJuIChhcHBlbmRwYXRoLCBwYXRob2spCisKKworZGVmIGJiYXBwZW5kX3JlY2lwZShyZCwgZGVzdGxheWVyZGlyLCBzcmNmaWxlcywgaW5zdGFsbD1Ob25lLCB3aWxkY2FyZHZlcj1GYWxzZSwgbWFjaGluZT1Ob25lLCBleHRyYWxpbmVzPU5vbmUsIHJlbW92ZXZhbHVlcz1Ob25lKToKKyAgICAiIiIKKyAgICBXcml0ZXMgYSBiYmFwcGVuZCBmaWxlIGZvciBhIHJlY2lwZQorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHJkOiBkYXRhIGRpY3Rpb25hcnkgZm9yIHRoZSByZWNpcGUKKyAgICAgICAgZGVzdGxheWVyZGlyOiBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgbGF5ZXIgdG8gcGxhY2UgdGhlIGJiYXBwZW5kIGluCisgICAgICAgICAgICAoc3ViZGlyZWN0b3J5IHBhdGggZnJvbSB0aGVyZSB3aWxsIGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSkKKyAgICAgICAgc3JjZmlsZXM6IGRpY3Qgb2Ygc291cmNlIGZpbGVzIHRvIGFkZCB0byBTUkNfVVJJLCB3aGVyZSB0aGUgdmFsdWUKKyAgICAgICAgICAgIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgYWRkZWQsIGFuZCB0aGUgdmFsdWUgaXMgdGhlCisgICAgICAgICAgICBvcmlnaW5hbCBmaWxlbmFtZSBhcyBpdCB3b3VsZCBhcHBlYXIgaW4gU1JDX1VSSSBvciBOb25lIGlmIGl0CisgICAgICAgICAgICBpc24ndCBhbHJlYWR5IHByZXNlbnQuIFlvdSBtYXkgcGFzcyBOb25lIGZvciB0aGlzIHBhcmFtZXRlciBpZgorICAgICAgICAgICAgeW91IHNpbXBseSB3YW50IHRvIHNwZWNpZnkgeW91ciBvd24gY29udGVudCB2aWEgdGhlIGV4dHJhbGluZXMKKyAgICAgICAgICAgIHBhcmFtZXRlci4KKyAgICAgICAgaW5zdGFsbDogZGljdCBtYXBwaW5nIGVudHJpZXMgaW4gc3JjZmlsZXMgdG8gYSB0dXBsZSBvZiB0d28gZWxlbWVudHM6CisgICAgICAgICAgICBpbnN0YWxsIHBhdGggKCp3aXRob3V0KiAke0R9IHByZWZpeCkgYW5kIHBlcm1pc3Npb24gdmFsdWUgKGFzIGEKKyAgICAgICAgICAgIHN0cmluZywgZS5nLiAnMDY0NCcpLgorICAgICAgICB3aWxkY2FyZHZlcjogVHJ1ZSB0byB1c2UgYSAlIHdpbGRjYXJkIGluIHRoZSBiYmFwcGVuZCBmaWxlbmFtZSwgb3IKKyAgICAgICAgICAgIEZhbHNlIHRvIG1ha2UgdGhlIGJiYXBwZW5kIHNwZWNpZmljIHRvIHRoZSByZWNpcGUgdmVyc2lvbi4KKyAgICAgICAgbWFjaGluZToKKyAgICAgICAgICAgIElmIHNwZWNpZmllZCwgbWFrZSB0aGUgY2hhbmdlcyBpbiB0aGUgYmJhcHBlbmQgc3BlY2lmaWMgdG8gdGhpcworICAgICAgICAgICAgbWFjaGluZS4gVGhpcyB3aWxsIGFsc28gY2F1c2UgUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKyAgICAgICAgICAgIHRvIGJlIGFkZGVkIHRvIHRoZSBiYmFwcGVuZC4KKyAgICAgICAgZXh0cmFsaW5lczoKKyAgICAgICAgICAgIEV4dHJhIGxpbmVzIHRvIGFkZCB0byB0aGUgYmJhcHBlbmQuIFRoaXMgbWF5IGJlIGEgZGljdCBvZiBuYW1lCisgICAgICAgICAgICB2YWx1ZSBwYWlycywgb3Igc2ltcGx5IGEgbGlzdCBvZiB0aGUgbGluZXMuCisgICAgICAgIHJlbW92ZXZhbHVlczoKKyAgICAgICAgICAgIFZhcmlhYmxlIHZhbHVlcyB0byByZW1vdmUgLSBhIGRpY3Qgb2YgbmFtZXMvdmFsdWVzLgorICAgICIiIgorCisgICAgaWYgbm90IHJlbW92ZXZhbHVlczoKKyAgICAgICAgcmVtb3ZldmFsdWVzID0ge30KKworICAgICMgRGV0ZXJtaW5lIGhvdyB0aGUgYmJhcHBlbmQgc2hvdWxkIGJlIG5hbWVkCisgICAgYXBwZW5kcGF0aCwgcGF0aG9rID0gZ2V0X2JiYXBwZW5kX3BhdGgocmQsIGRlc3RsYXllcmRpciwgd2lsZGNhcmR2ZXIpCisgICAgaWYgbm90IGFwcGVuZHBhdGg6CisgICAgICAgIGJiLmVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGxheWVyIGRpcmVjdG9yeSBjb250YWluaW5nICVzJyAlIHJlY2lwZWZpbGUpCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKyAgICBpZiBub3QgcGF0aG9rOgorICAgICAgICBiYi53YXJuKCdVbmFibGUgdG8gZGV0ZXJtaW5lIGNvcnJlY3Qgc3ViZGlyZWN0b3J5IHBhdGggZm9yIGJiYXBwZW5kIGZpbGUgLSBjaGVjayB0aGF0IHdoYXQgJXMgYWRkcyB0byBCQkZJTEVTIGFsc28gbWF0Y2hlcyAuYmJhcHBlbmQgZmlsZXMuIFVzaW5nICVzIGZvciBub3csIGJ1dCB1bnRpbCB5b3UgZml4IHRoaXMgdGhlIGJiYXBwZW5kIHdpbGwgbm90IGJlIGFwcGxpZWQuJyAlIChvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCAnY29uZicsICdsYXllci5jb25mJyksIG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKSkpCisKKyAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmRpcm5hbWUoYXBwZW5kcGF0aCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoYXBwZW5kZGlyKQorCisgICAgIyBGSVhNRSBjaGVjayBpZiB0aGUgYmJhcHBlbmQgZG9lc24ndCBnZXQgb3ZlcnJpZGRlbiBieSBhIGhpZ2hlciBwcmlvcml0eSBsYXllcj8KKworICAgIGxheWVyZGlycyA9IFtvcy5wYXRoLmFic3BhdGgobGF5ZXJkaXIpIGZvciBsYXllcmRpciBpbiByZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKV0KKyAgICBpZiBub3Qgb3MucGF0aC5hYnNwYXRoKGRlc3RsYXllcmRpcikgaW4gbGF5ZXJkaXJzOgorICAgICAgICBiYi53YXJuKCdTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGl0IGJlZm9yZSB0aGlzIGJiYXBwZW5kIHdpbGwgYmUgYWN0aXZlJykKKworICAgIGJiYXBwZW5kbGluZXMgPSBbXQorICAgIGlmIGV4dHJhbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXh0cmFsaW5lcywgZGljdCk6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZXh0cmFsaW5lcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgobmFtZSwgJz0nLCB2YWx1ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIERvIG91ciBiZXN0IHRvIHNwbGl0IGl0CisgICAgICAgICAgICBmb3IgbGluZSBpbiBleHRyYWxpbmVzOgorICAgICAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBzcGxpdGxpbmUgPSBsaW5lLnNwbGl0KE5vbmUsIDIpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0bGluZSkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQodHVwbGUoc3BsaXRsaW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ludmFsaWQgZXh0cmFsaW5lcyB2YWx1ZSBwYXNzZWQnKQorCisgICAgZGVmIHBvcGxpbmUodmFybmFtZSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICAgICAgaWYgYmJhcHBlbmRsaW5lc1tpXVswXSA9PSB2YXJuYW1lOgorICAgICAgICAgICAgICAgIGxpbmUgPSBiYmFwcGVuZGxpbmVzLnBvcChpKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgYXBwZW5kbGluZSh2YXJuYW1lLCBvcCwgdmFsdWUpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKGJiYXBwZW5kbGluZXMpKToKKyAgICAgICAgICAgIGl0ZW0gPSBiYmFwcGVuZGxpbmVzW2ldCisgICAgICAgICAgICBpZiBpdGVtWzBdID09IHZhcm5hbWU6CisgICAgICAgICAgICAgICAgYmJhcHBlbmRsaW5lc1tpXSA9IChpdGVtWzBdLCBpdGVtWzFdLCBpdGVtWzJdICsgJyAnICsgdmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKCh2YXJuYW1lLCBvcCwgdmFsdWUpKQorCisgICAgZGVzdHN1YmRpciA9IHJkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGlmIHNyY2ZpbGVzOgorICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJywgJzo9JywgJyR7VEhJU0RJUn0vJHtQTn06JykpCisKKyAgICBhcHBlbmRvdmVycmlkZSA9ICcnCisgICAgaWYgbWFjaGluZToKKyAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKCdQQUNLQUdFX0FSQ0gnLCAnPScsICcke01BQ0hJTkVfQVJDSH0nKSkKKyAgICAgICAgYXBwZW5kb3ZlcnJpZGUgPSAnXyVzJyAlIG1hY2hpbmUKKyAgICBjb3B5ZmlsZXMgPSB7fQorICAgIGlmIHNyY2ZpbGVzOgorICAgICAgICBpbnN0ZnVuY2xpbmVzID0gW10KKyAgICAgICAgZm9yIG5ld2ZpbGUsIG9yaWdzcmNmaWxlIGluIHNyY2ZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc3JjZmlsZSA9IG9yaWdzcmNmaWxlCisgICAgICAgICAgICBzcmN1cmllbnRyeSA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBzcmNmaWxlOgorICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICAgICAgc3JjdXJpZW50cnkgPSAnZmlsZTovLyVzJyAlIHNyY2ZpbGUKKyAgICAgICAgICAgICAgICAjIERvdWJsZS1jaGVjayBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5CisgICAgICAgICAgICAgICAgIyBGSVhNRSBkbyB3ZSBjYXJlIGlmIHRoZSBlbnRyeSBpcyBhZGRlZCBieSBhbm90aGVyIGJiYXBwZW5kIHRoYXQgbWlnaHQgZ28gYXdheT8KKyAgICAgICAgICAgICAgICBpZiBub3Qgc3JjdXJpZW50cnkgaW4gcmQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbWFjaGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGxpbmUoJ1NSQ19VUklfYXBwZW5kJXMnICUgYXBwZW5kb3ZlcnJpZGUsICc9JywgJyAnICsgc3JjdXJpZW50cnkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRsaW5lKCdTUkNfVVJJJywgJys9Jywgc3JjdXJpZW50cnkpCisgICAgICAgICAgICBjb3B5ZmlsZXNbbmV3ZmlsZV0gPSBzcmNmaWxlCisgICAgICAgICAgICBpZiBpbnN0YWxsOgorICAgICAgICAgICAgICAgIGluc3RpdGVtID0gaW5zdGFsbC5wb3AobmV3ZmlsZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBpbnN0aXRlbToKKyAgICAgICAgICAgICAgICAgICAgKGRlc3RwYXRoLCBwZXJtcykgPSBpbnN0aXRlbQorICAgICAgICAgICAgICAgICAgICBpbnN0ZGVzdHBhdGggPSByZXBsYWNlX2Rpcl92YXJzKGRlc3RwYXRoLCByZCkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGRpcmxpbmUgPSAnaW5zdGFsbCAtZCAke0R9JXMnICUgb3MucGF0aC5kaXJuYW1lKGluc3RkZXN0cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluc3RkaXJsaW5lIGluIGluc3RmdW5jbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZChpbnN0ZGlybGluZSkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGZ1bmNsaW5lcy5hcHBlbmQoJ2luc3RhbGwgLW0gJXMgJHtXT1JLRElSfS8lcyAke0R9JXMnICUgKHBlcm1zLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpLCBpbnN0ZGVzdHBhdGgpKQorICAgICAgICBpZiBpbnN0ZnVuY2xpbmVzOgorICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKCdkb19pbnN0YWxsX2FwcGVuZCVzKCknICUgYXBwZW5kb3ZlcnJpZGUsICcnLCBpbnN0ZnVuY2xpbmVzKSkKKworICAgIGJiLm5vdGUoJ1dyaXRpbmcgYXBwZW5kIGZpbGUgJXMnICUgYXBwZW5kcGF0aCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGFwcGVuZHBhdGgpOgorICAgICAgICAjIFdvcmsgYXJvdW5kIGxhY2sgb2Ygbm9ubG9jYWwgaW4gcHl0aG9uIDIKKyAgICAgICAgZXh0dmFycyA9IHsnZGVzdHN1YmRpcic6IGRlc3RzdWJkaXJ9CisKKyAgICAgICAgZGVmIGFwcGVuZGZpbGVfdmFyZnVuYyh2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgICAgICBpZiB2YXJuYW1lID09ICdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCc6CisgICAgICAgICAgICAgICAgaWYgb3JpZ3ZhbHVlLnN0YXJ0c3dpdGgoJyR7VEhJU0RJUn0vJyk6CisgICAgICAgICAgICAgICAgICAgIHBvcGxpbmUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJykKKyAgICAgICAgICAgICAgICAgICAgZXh0dmFyc1snZGVzdHN1YmRpciddID0gcmQuZXhwYW5kKG9yaWd2YWx1ZS5zcGxpdCgnJHtUSElTRElSfS8nLCAxKVsxXS5yc3RyaXAoJzonKSkKKyAgICAgICAgICAgIGVsaWYgdmFybmFtZSA9PSAnUEFDS0FHRV9BUkNIJzoKKyAgICAgICAgICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICBwb3BsaW5lKCdQQUNLQUdFX0FSQ0gnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1hY2hpbmUsIE5vbmUsIDQsIEZhbHNlKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lLnN0YXJ0c3dpdGgoJ2RvX2luc3RhbGxfYXBwZW5kJyk6CisgICAgICAgICAgICAgICAgZnVuYyA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICBpZiBmdW5jOgorICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBvcmlndmFsdWUuc3RyaXAoJ1xuJykuc3BsaXRsaW5lcygpXQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmdW5jWzJdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgaW4gaW5zdGZ1bmNsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGluc3RmdW5jbGluZXMsIE5vbmUsIDQsIEZhbHNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IG9yaWd2YWx1ZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmVtb3ZldmFyID0gdmFybmFtZQorICAgICAgICAgICAgICAgIGlmIHZhcm5hbWUgaW4gWydTUkNfVVJJJywgJ1NSQ19VUklfYXBwZW5kJXMnICUgYXBwZW5kb3ZlcnJpZGVdOgorICAgICAgICAgICAgICAgICAgICByZW1vdmV2YXIgPSAnU1JDX1VSSScKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbMl0gbm90IGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLmFwcGVuZChsaW5lWzJdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBvcGxpbmUodmFybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gW2xpbmVbMl1dCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZldmFyIGluIHJlbW92ZXZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gcmVtb3ZldmFsdWVzW3JlbW92ZXZhcl0KKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZW1vdmUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVtb3ZlIGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciByZW1vdmVpdGVtIGluIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVpdGVtIGluIHNwbGl0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbC5yZW1vdmUocmVtb3ZlaXRlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gc3BsaXR2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG5ld3ZhbHVlKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBFbnN1cmUgaXQncyB3cml0dGVuIG91dCBhcyBvbmUgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ19hcHBlbmQnIGluIHZhcm5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSAnICcgKyBuZXd2YWx1ZVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9IG5ld3ZhbHVlWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXd2YWx1ZSBhbmQgKG9wIGluIFsnKz0nLCAnLj0nXSBvciAnX2FwcGVuZCcgaW4gdmFybmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgYXBwZW5kaW5nIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBpZiB2YXJuYW1lLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gNAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gLTEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXd2YWx1ZSwgTm9uZSwgaW5kZW50LCBUcnVlKQorICAgICAgICAgICAgcmV0dXJuIChvcmlndmFsdWUsIE5vbmUsIDQsIEZhbHNlKQorCisgICAgICAgIHZhcm5hbWVzID0gW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gYmJhcHBlbmRsaW5lc10KKyAgICAgICAgaWYgcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgdmFybmFtZXMuZXh0ZW5kKHJlbW92ZXZhbHVlcy5rZXlzKCkpCisKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZHBhdGgsICdyJykgYXMgZjoKKyAgICAgICAgICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKGYsIHZhcm5hbWVzLCBhcHBlbmRmaWxlX3ZhcmZ1bmMpCisKKyAgICAgICAgZGVzdHN1YmRpciA9IGV4dHZhcnNbJ2Rlc3RzdWJkaXInXQorICAgIGVsc2U6CisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBuZXdsaW5lcyA9IFtdCisKKyAgICBpZiBiYmFwcGVuZGxpbmVzOgorICAgICAgICBmb3IgbGluZSBpbiBiYmFwcGVuZGxpbmVzOgorICAgICAgICAgICAgaWYgbGluZVswXS5lbmRzd2l0aCgnKCknKToKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzIHtcbiAgICAlc1xufVxuJyAlIChsaW5lWzBdLCAnXG4gICAgJy5qb2luKGxpbmVbMl0pKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCclcyAlcyAiJXMiXG5cbicgJSBsaW5lKQorICAgICAgICB1cGRhdGVkID0gVHJ1ZQorCisgICAgaWYgdXBkYXRlZDoKKyAgICAgICAgd2l0aCBvcGVuKGFwcGVuZHBhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGVsaW5lcyhuZXdsaW5lcykKKworICAgIGlmIGNvcHlmaWxlczoKKyAgICAgICAgaWYgbWFjaGluZToKKyAgICAgICAgICAgIGRlc3RzdWJkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdHN1YmRpciwgbWFjaGluZSkKKyAgICAgICAgZm9yIG5ld2ZpbGUsIHNyY2ZpbGUgaW4gY29weWZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZmlsZWRlc3QgPSBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCBkZXN0c3ViZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5hYnNwYXRoKG5ld2ZpbGUpICE9IG9zLnBhdGguYWJzcGF0aChmaWxlZGVzdCk6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnQ29weWluZyAlcyB0byAlcycgJSAobmV3ZmlsZSwgZmlsZWRlc3QpKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZmlsZWRlc3QpKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShuZXdmaWxlLCBmaWxlZGVzdCkKKworICAgIHJldHVybiAoYXBwZW5kcGF0aCwgb3MucGF0aC5qb2luKGFwcGVuZGRpciwgZGVzdHN1YmRpcikpCisKKworZGVmIGZpbmRfbGF5ZXJkaXIoZm4pOgorICAgICIiIiBGaWd1cmUgb3V0IHJlbGF0aXZlIHBhdGggdG8gYmFzZSBvZiBsYXllciBmb3IgYSBmaWxlIChlLmcuIGEgcmVjaXBlKSIiIgorICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShmbikKKyAgICBsYXllcmRpciA9ICcnCisgICAgd2hpbGUgcHRoOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocHRoLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICAgICAgbGF5ZXJkaXIgPSBwdGgKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHB0aCA9IG9zLnBhdGguZGlybmFtZShwdGgpCisgICAgcmV0dXJuIGxheWVyZGlyCisKKworZGVmIHJlcGxhY2VfZGlyX3ZhcnMocGF0aCwgZCk6CisgICAgIiIiUmVwbGFjZSBjb21tb24gZGlyZWN0b3J5IHBhdGhzIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFibGUgcmVmZXJlbmNlcyAoZS5nLiAvZXRjIGJlY29tZXMgJHtzeXNjb25mZGlyfSkiIiIKKyAgICBkaXJ2YXJzID0ge30KKyAgICAjIFNvcnQgYnkgbGVuZ3RoIHNvIHdlIGdldCB0aGUgdmFyaWFibGVzIHdlJ3JlIGludGVyZXN0ZWQgaW4gZmlyc3QKKyAgICBmb3IgdmFyIGluIHNvcnRlZChkLmtleXMoKSwga2V5PWxlbik6CisgICAgICAgIGlmIHZhci5lbmRzd2l0aCgnZGlyJykgYW5kIHZhci5sb3dlcigpID09IHZhcjoKKyAgICAgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgnLycpIGFuZCBub3QgJ1xuJyBpbiB2YWx1ZSBhbmQgdmFsdWUgbm90IGluIGRpcnZhcnM6CisgICAgICAgICAgICAgICAgZGlydmFyc1t2YWx1ZV0gPSB2YXIKKyAgICBmb3IgZGlycGF0aCBpbiBzb3J0ZWQoZGlydmFycy5rZXlzKCksIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoZGlycGF0aCwgJyR7JXN9JyAlIGRpcnZhcnNbZGlycGF0aF0pCisgICAgcmV0dXJuIHBhdGgKKworZGVmIGdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdiwgdXJpX3R5cGUpOgorICAgICIiIgorICAgIEdldCBQViB3aXRob3V0IFNSQ1BWIGNvbW1vbiBpbiBTQ00ncyBmb3Igbm93IG9ubHkKKyAgICBzdXBwb3J0IGdpdC4KKworICAgIFJldHVybnMgdHVwbGUgd2l0aCBwdiwgcHJlZml4IGFuZCBzdWZmaXguCisgICAgIiIiCisgICAgcGZ4ID0gJycKKyAgICBzZnggPSAnJworCisgICAgaWYgdXJpX3R5cGUgPT0gJ2dpdCc6CisgICAgICAgIGdpdF9yZWdleCA9IHJlLmNvbXBpbGUoIig/UDxwZng+dj8pKD9QPHZlcj5bXlwrXSopKCg/UDxzZng+XCsoZ2l0KT9yPyhBVVRPSU5DXCspKSg/UDxyZXY+LiopKT8iKQorICAgICAgICBtID0gZ2l0X3JlZ2V4Lm1hdGNoKHB2KQorCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwdiA9IG0uZ3JvdXAoJ3ZlcicpCisgICAgICAgICAgICBwZnggPSBtLmdyb3VwKCdwZngnKQorICAgICAgICAgICAgc2Z4ID0gbS5ncm91cCgnc2Z4JykKKyAgICBlbHNlOgorICAgICAgICByZWdleCA9IHJlLmNvbXBpbGUoIig/UDxwZng+KHZ8cik/KSg/UDx2ZXI+LiopIikKKyAgICAgICAgbSA9IHJlZ2V4Lm1hdGNoKHB2KQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcHYgPSBtLmdyb3VwKCd2ZXInKQorICAgICAgICAgICAgcGZ4ID0gbS5ncm91cCgncGZ4JykKKworICAgIHJldHVybiAocHYsIHBmeCwgc2Z4KQorCitkZWYgZ2V0X3JlY2lwZV91cHN0cmVhbV92ZXJzaW9uKHJkKToKKyAgICAiIiIKKyAgICAgICAgR2V0IHVwc3RyZWFtIHZlcnNpb24gb2YgcmVjaXBlIHVzaW5nIGJiLmZldGNoMiBtZXRob2RzIHdpdGggc3VwcG9ydCBmb3IKKyAgICAgICAgaHR0cCwgaHR0cHMsIGZ0cCBhbmQgZ2l0LgorCisgICAgICAgIGJiLmZldGNoMiBleGNlcHRpb25zIGNhbiBiZSByYWlzZWQsCisgICAgICAgICAgICBGZXRjaEVycm9yIHdoZW4gZG9uJ3QgaGF2ZSBuZXR3b3JrIGFjY2VzcyBvciB1cHN0cmVhbSBzaXRlIGRvbid0IHJlc3BvbnNlLgorICAgICAgICAgICAgTm9NZXRob2RFcnJvciB3aGVuIHVyaSBsYXRlc3RfdmVyc2lvbnN0cmluZyBtZXRob2QgaXNuJ3QgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgUmV0dXJucyBhIGRpY3RvbmFyeSB3aXRoIHZlcnNpb24sIHR5cGUgYW5kIGRhdGV0aW1lLgorICAgICAgICBUeXBlIGNhbiBiZSBBIGZvciBBdXRvbWF0aWMsIE0gZm9yIE1hbnVhbCBhbmQgVSBmb3IgVW5rbm93bi4KKyAgICAiIiIKKyAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgZGVjb2RldXJsCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKworICAgIHJ1ID0ge30KKyAgICBydVsndmVyc2lvbiddID0gJycKKyAgICBydVsndHlwZSddID0gJ1UnCisgICAgcnVbJ2RhdGV0aW1lJ10gPSAnJworCisgICAgIyBYWFg6IElmIGRvbid0IGhhdmUgU1JDX1VSSSBtZWFucyB0aGF0IGRvbid0IGhhdmUgdXBzdHJlYW0gc291cmNlcyBzbworICAgICMgcmV0dXJucyAxLjAuCisgICAgc3JjX3VyaXMgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgIGlmIG5vdCBzcmNfdXJpczoKKyAgICAgICAgcnVbJ3ZlcnNpb24nXSA9ICcxLjAnCisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnTScKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorICAgICAgICByZXR1cm4gcnUKKworICAgICMgWFhYOiB3ZSBzdXBwb3NlIHRoYXQgdGhlIGZpcnN0IGVudHJ5IHBvaW50cyB0byB0aGUgdXBzdHJlYW0gc291cmNlcworICAgIHNyY191cmkgPSBzcmNfdXJpcy5zcGxpdCgpWzBdCisgICAgdXJpX3R5cGUsIF8sIF8sIF8sIF8sIF8gPSAgZGVjb2RldXJsKHNyY191cmkpCisKKyAgICBwdiA9IHJkLmdldFZhcignUFYnLCBUcnVlKQorCisgICAgbWFudWFsX3Vwc3RyZWFtX3ZlcnNpb24gPSByZC5nZXRWYXIoIlJFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OIiwgVHJ1ZSkKKyAgICBpZiBtYW51YWxfdXBzdHJlYW1fdmVyc2lvbjoKKyAgICAgICAgIyBtYW51YWwgdHJhY2tpbmcgb2YgdXBzdHJlYW0gdmVyc2lvbi4KKyAgICAgICAgcnVbJ3ZlcnNpb24nXSA9IG1hbnVhbF91cHN0cmVhbV92ZXJzaW9uCisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnTScKKworICAgICAgICBtYW51YWxfdXBzdHJlYW1fZGF0ZSA9IHJkLmdldFZhcigiQ0hFQ0tfREFURSIsIFRydWUpCisgICAgICAgIGlmIG1hbnVhbF91cHN0cmVhbV9kYXRlOgorICAgICAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKG1hbnVhbF91cHN0cmVhbV9kYXRlLCAiJWIgJWQsICVZIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGUgPSBkYXRldGltZS5ub3coKQorICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGUKKworICAgIGVsaWYgdXJpX3R5cGUgPT0gImZpbGUiOgorICAgICAgICAjIGZpbGVzIGFyZSBhbHdheXMgdXAtdG8tZGF0ZQorICAgICAgICBydVsndmVyc2lvbiddID0gIHB2CisgICAgICAgIHJ1Wyd0eXBlJ10gPSAnQScKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorICAgIGVsc2U6CisgICAgICAgIHVkID0gYmIuZmV0Y2gyLkZldGNoRGF0YShzcmNfdXJpLCByZCkKKyAgICAgICAgcHVwdmVyID0gdWQubWV0aG9kLmxhdGVzdF92ZXJzaW9uc3RyaW5nKHVkLCByZCkKKyAgICAgICAgKHVwdmVyc2lvbiwgcmV2aXNpb24pID0gcHVwdmVyCisKKyAgICAgICAgIyBmb3JtYXQgZ2l0IHZlcnNpb24gdmVyc2lvbitnaXRBVVRPSU5DK0hBU0gKKyAgICAgICAgaWYgdXJpX3R5cGUgPT0gJ2dpdCc6CisgICAgICAgICAgICAocHYsIHBmeCwgc2Z4KSA9IGdldF9yZWNpcGVfcHZfd2l0aG91dF9zcmNwdihwdiwgdXJpX3R5cGUpCisKKyAgICAgICAgICAgICMgaWYgY29udGFpbnMgcmV2aXNpb24gYnV0IG5vdCB1cHZlcnNpb24gdXNlIGN1cnJlbnQgcHYKKyAgICAgICAgICAgIGlmIHVwdmVyc2lvbiA9PSAnJyBhbmQgcmV2aXNpb246CisgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gcHYKKworICAgICAgICAgICAgaWYgdXB2ZXJzaW9uOgorICAgICAgICAgICAgICAgIHRtcCA9IHVwdmVyc2lvbgorICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9ICcnCisKKyAgICAgICAgICAgICAgICBpZiBwZng6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHBmeCArIHRtcAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHRtcAorCisgICAgICAgICAgICAgICAgaWYgc2Z4OgorICAgICAgICAgICAgICAgICAgICB1cHZlcnNpb24gPSB1cHZlcnNpb24gKyBzZnggKyByZXZpc2lvbls6MTBdCisKKyAgICAgICAgaWYgdXB2ZXJzaW9uOgorICAgICAgICAgICAgcnVbJ3ZlcnNpb24nXSA9IHVwdmVyc2lvbgorICAgICAgICAgICAgcnVbJ3R5cGUnXSA9ICdBJworCisgICAgICAgIHJ1WydkYXRldGltZSddID0gZGF0ZXRpbWUubm93KCkKKworICAgIHJldHVybiBydQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2Uvcm9vdGZzLnB5IGIvbWV0YS9saWIvb2Uvcm9vdGZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTNmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9yb290ZnMucHkKQEAgLTAsMCArMSw5ODQgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgKgorZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgKgoraW1wb3J0IG9lLnBhdGgKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKKworCitjbGFzcyBSb290ZnMob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYucG0gPSBOb25lCisgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsX29yZGVyID0gTWFuaWZlc3QuSU5TVEFMTF9PUkRFUgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9sb2dfY2hlY2tfd2FybihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJ14od2FybnxXYXJufE5PVEU6IHdhcm58Tk9URTogV2FybnxXQVJOSU5HOiknKQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZSBvciAnTk9URTonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBtID0gci5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogZm91bmQgYSB3YXJuaW5nIG1lc3NhZ2UgaW4gdGhlIGxvZ2ZpbGUgKGtleXdvcmQgXCclc1wnKTpcbltsb2dfY2hlY2tdICVzJworCQkJCSAgICAlIChzZWxmLmQuZ2V0VmFyKCdQTicsIFRydWUpLCBtLmdyb3VwKCksIGxpbmUpKQorCisgICAgZGVmIF9sb2dfY2hlY2tfZXJyb3Ioc2VsZik6CisgICAgICAgIHIgPSByZS5jb21waWxlKHNlbGYubG9nX2NoZWNrX3JlZ2V4KQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAgICAgICAgaWYgJ2xvZ19jaGVjaycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdbbG9nX2NoZWNrXSAlczogZm91bmQgYW4gZXJyb3IgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZSAoa2V5d29yZCBcJyVzXCcpOlxuW2xvZ19jaGVja10gJXMnCisJCQkJICAgICUgKHNlbGYuZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG0uZ3JvdXAoKSwgbGluZSkpCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA+PSAxIGFuZCBmb3VuZF9lcnJvciA8PSA1OgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGxpbmUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yICs9IDEKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisKKyAgICBkZWYgX2luc2VydF9mZWVkX3VyaXMoc2VsZik6CisgICAgICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgc2VsZi5wbS5pbnNlcnRfZmVlZHNfdXJpcygpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCBmYWlsZWRfc2NyaXB0KToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgVGhlIF9jbGVhbnVwKCkgbWV0aG9kIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuLXVwIHN0dWZmIHRoYXQgd2UgZG9uJ3QgcmVhbGx5CisgICAgd2FudCB0byBlbmQgdXAgb24gdGFyZ2V0LiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgUlBNLCB0aGUgREIgbG9ja3MuCisgICAgVGhlIG1ldGhvZCBpcyBjYWxsZWQsIG9uY2UsIGF0IHRoZSBlbmQgb2YgY3JlYXRlKCkgbWV0aG9kLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9zZXR1cF9kYmdfcm9vdGZzKHNlbGYsIGRpcnMpOgorICAgICAgICBnZW5fZGVidWdmcyA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0dFTl9ERUJVR0ZTJywgVHJ1ZSkgb3IgJzAnCisgICAgICAgIGlmIGdlbl9kZWJ1Z2ZzICE9ICcxJzoKKyAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmIubm90ZSgiICBSZW5hbWluZyB0aGUgb3JpZ2luYWwgcm9vdGZzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzLCBzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpCisKKyAgICAgICAgYmIubm90ZSgiICBDcmVhdGluZyBkZWJ1ZyByb290ZnMuLi4iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICAgICAgYmIubm90ZSgiICBDb3B5aW5nIGJhY2sgcGFja2FnZSBkYXRhYmFzZS4uLiIpCisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcyArIG9zLnBhdGguZGlybmFtZShkaXIpKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpciwgc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIpCisKKyAgICAgICAgY3BhdGggPSBvZS5jYWNoZWRwYXRoLkNhY2hlZFBhdGgoKQorICAgICAgICAjIENvcHkgZmlsZXMgbG9jYXRlZCBpbiAvdXNyL2xpYi9kZWJ1ZyBvciAvdXNyL3NyYy9kZWJ1ZworICAgICAgICBmb3IgZGlyIGluIFsiL3Vzci9saWIvZGVidWciLCAiL3Vzci9zcmMvZGVidWciXToKKyAgICAgICAgICAgIHNyYyA9IHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyArIGRpcgorICAgICAgICAgICAgaWYgY3BhdGguZXhpc3RzKHNyYyk6CisgICAgICAgICAgICAgICAgZHN0ID0gc2VsZi5pbWFnZV9yb290ZnMgKyBkaXIKKyAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGRzdCkpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyYywgZHN0KQorCisgICAgICAgICMgQ29weSBmaWxlcyB3aXRoIHN1ZmZpeCAnLmRlYnVnJyBvciBsb2NhdGVkIGluICcuZGVidWcnIGRpci4KKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnKToKKyAgICAgICAgICAgIHJlbGF0aXZlX2RpciA9IHJvb3RbbGVuKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJyk6XQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZi5lbmRzd2l0aCgnLmRlYnVnJykgb3IgJy8uZGVidWcnIGluIHJlbGF0aXZlX2RpcjoKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgcmVsYXRpdmVfZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4ocm9vdCwgZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzICsgcmVsYXRpdmVfZGlyKQorCisgICAgICAgIGJiLm5vdGUoIiAgSW5zdGFsbCBjb21wbGVtZW50YXJ5ICcqLWRiZycgcGFja2FnZXMuLi4iKQorICAgICAgICBzZWxmLnBtLmluc3RhbGxfY29tcGxlbWVudGFyeSgnKi1kYmcnKQorCisgICAgICAgIGJiLm5vdGUoIiAgUmVuYW1lIGRlYnVnIHJvb3Rmcy4uLiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLWRiZycpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzLCBzZWxmLmltYWdlX3Jvb3RmcyArICctZGJnJykKKworICAgICAgICBiYi5ub3RlKCIgIFJlc3RvcmVpbmcgb3JpZ2luYWwgcm9vdGZzLi4uIikKKyAgICAgICAgb3MucmVuYW1lKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJywgc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICBkZWYgX2V4ZWNfc2hlbGxfY21kKHNlbGYsIGNtZCk6CisgICAgICAgIGZha2Vyb290Y21kID0gc2VsZi5kLmdldFZhcignRkFLRVJPT1QnLCBUcnVlKQorICAgICAgICBpZiBmYWtlcm9vdGNtZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGV4ZWNfY21kID0gW2Zha2Vyb290Y21kLCBjbWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVjX2NtZCA9IGNtZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGV4ZWNfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCIjIyMjIyMgR2VuZXJhdGUgcm9vdGZzICMjIyMjIyMiKQorICAgICAgICBwcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCIsIFRydWUpCisgICAgICAgIHBvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQiLCBUcnVlKQorCisgICAgICAgIHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyID0gc2VsZi5kLmdldFZhcigiUE9TVElOU1RfSU5URVJDRVBUU19ESVIiLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3RfaW50ZXJjZXB0c19kaXI6CisgICAgICAgICAgICBwb3N0aW5zdF9pbnRlcmNlcHRzX2RpciA9IHNlbGYuZC5leHBhbmQoIiR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cyIpCisgICAgICAgIGludGVyY2VwdHNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoaW50ZXJjZXB0c19kaXIsIFRydWUpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyLCBpbnRlcmNlcHRzX2RpcikKKworICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCIke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0IiksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSArCisgICAgICAgICAgICAgICAgICAgICIvUkVBRE1FXy1fRE9fTk9UX0RFTEVURV9GSUxFU19JTl9USElTX0RJUkVDVE9SWS50eHQiKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgIyBjYWxsIHRoZSBwYWNrYWdlIG1hbmFnZXIgZGVwZW5kZW50IGNyZWF0ZSBtZXRob2QKKyAgICAgICAgc2VsZi5fY3JlYXRlKCkKKworICAgICAgICBzeXNjb25mZGlyID0gc2VsZi5pbWFnZV9yb290ZnMgKyBzZWxmLmQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHN5c2NvbmZkaXIpCisgICAgICAgIHdpdGggb3BlbihzeXNjb25mZGlyICsgIi92ZXJzaW9uIiwgIncrIikgYXMgdmVyOgorICAgICAgICAgICAgdmVyLndyaXRlKHNlbGYuZC5nZXRWYXIoJ0JVSUxETkFNRScsIFRydWUpICsgIlxuIikKKworICAgICAgICBzZWxmLl9ydW5faW50ZXJjZXB0cygpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInJlYWQtb25seS1yb290ZnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpOgorICAgICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQorICAgICAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlRoZSBmb2xsb3dpbmcgcGFja2FnZXMgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZsaW5lIGFuZCByb290ZnMgaXMgcmVhZC1vbmx5OiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfcG9zdGluc3RzKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1VTRV9ERVZGUycsIFRydWUpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kZXZmcygpCisKKyAgICAgICAgc2VsZi5fdW5pbnN0YWxsX3VubmVlZGVkKCkKKworICAgICAgICBzZWxmLl9pbnNlcnRfZmVlZF91cmlzKCkKKworICAgICAgICBzZWxmLl9ydW5fbGRjb25maWcoKQorCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1VTRV9ERVBNT0QnLCBUcnVlKSAhPSAiMCI6CisgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV9rZXJuZWxfbW9kdWxlX2RlcHMoKQorCisgICAgICAgIHNlbGYuX2NsZWFudXAoKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2soKQorCisgICAgZGVmIF91bmluc3RhbGxfdW5uZWVkZWQoc2VsZik6CisgICAgICAgICMgUmVtb3ZlIHVubmVlZGVkIGluaXQgc2NyaXB0IHN5bWxpbmtzCisgICAgICAgIGRlbGF5ZWRfcG9zdGluc3RzID0gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKCkKKyAgICAgICAgaWYgZGVsYXllZF9wb3N0aW5zdHMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vaW5pdC5kL3J1bi1wb3N0aW5zdHMiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY19zaGVsbF9jbWQoWyJ1cGRhdGUtcmMuZCIsICItZiIsICItciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVuLXBvc3RpbnN0cyIsICJyZW1vdmUiXSkKKworICAgICAgICBydW50aW1lX3BrZ21hbmFnZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJwYWNrYWdlLW1hbmFnZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIEZhbHNlLCBzZWxmLmQpCisgICAgICAgIHN5c3Zjb21wYXRfaW5fZGlzdHJvID0gYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsIFsgInN5c3RlbWQiLCAic3lzdmluaXQiIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgaW1hZ2Vfcm9yZnMgPSBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgaWYgc3lzdmNvbXBhdF9pbl9kaXN0cm8gYW5kIG5vdCBpbWFnZV9yb3JmczoKKyAgICAgICAgICAgIHBrZ190b19yZW1vdmUgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9ICJ1cGRhdGUtcmMuZCIKKyAgICAgICAgaWYgbm90IHJ1bnRpbWVfcGtnbWFuYWdlOgorICAgICAgICAgICAgIyBSZW1vdmUgY29tcG9uZW50cyB0aGF0IHdlIGRvbid0IG5lZWQgaWYgd2UncmUgbm90IGdvaW5nIHRvIGluc3RhbGwKKyAgICAgICAgICAgICMgYWRkaXRpb25hbCBwYWNrYWdlcyBhdCBydW50aW1lCisgICAgICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzX2RpciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vaW5zdGFsbGVkX3BrZ3MudHh0JykKKyAgICAgICAgICAgICAgICBwa2dzX3RvX3JlbW92ZSA9IGxpc3QoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19kaXIsICJyKyIpIGFzIGluc3RhbGxlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICBwa2dzX2luc3RhbGxlZCA9IGluc3RhbGxlZF9wa2dzLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBrZ19pbnN0YWxsZWQgaW4gcGtnc19pbnN0YWxsZWRbOl06CisgICAgICAgICAgICAgICAgICAgICAgICBwa2cgPSBwa2dfaW5zdGFsbGVkLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZyBpbiBbInVwZGF0ZS1yYy5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhc2UtcGFzc3dkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYWRvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIiwgcGtnX3RvX3JlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiUk9PVEZTX0JPT1RTVFJBUF9JTlNUQUxMIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dzX3RvX3JlbW92ZS5hcHBlbmQocGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkLnJlbW92ZShwa2dfaW5zdGFsbGVkKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHBrZ3NfdG9fcmVtb3ZlKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ3NfdG9fcmVtb3ZlLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgaW5zdGFsbGVkX3BrZ3MudHh0CisgICAgICAgICAgICAgICAgICAgIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZGlyLCAidysiKS53cml0ZSgnXG4nLmpvaW4ocGtnc19pbnN0YWxsZWQpKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVfcG9zdGluc3RzKCkKKworICAgICAgICBwb3N0X3VuaW5zdGFsbF9jbWRzID0gc2VsZi5kLmdldFZhcigiUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCIsIFRydWUpCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHBvc3RfdW5pbnN0YWxsX2NtZHMpCisKKyAgICAgICAgaWYgbm90IHJ1bnRpbWVfcGtnbWFuYWdlOgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIHBhY2thZ2UgbWFuYWdlciBkYXRhIGZpbGVzCisgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICBkZWYgX3J1bl9pbnRlcmNlcHRzKHNlbGYpOgorICAgICAgICBpbnRlcmNlcHRzX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmNlcHRfc2NyaXB0cyIpCisKKyAgICAgICAgYmIubm90ZSgiUnVubmluZyBpbnRlcmNlcHQgc2NyaXB0czoiKQorICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLmltYWdlX3Jvb3RmcworICAgICAgICBmb3Igc2NyaXB0IGluIG9zLmxpc3RkaXIoaW50ZXJjZXB0c19kaXIpOgorICAgICAgICAgICAgc2NyaXB0X2Z1bGwgPSBvcy5wYXRoLmpvaW4oaW50ZXJjZXB0c19kaXIsIHNjcmlwdCkKKworICAgICAgICAgICAgaWYgc2NyaXB0ID09ICJwb3N0aW5zdF9pbnRlcmNlcHQiIG9yIG5vdCBvcy5hY2Nlc3Moc2NyaXB0X2Z1bGwsIG9zLlhfT0spOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGJiLm5vdGUoIj4gRXhlY3V0aW5nICVzIGludGVyY2VwdCAuLi4iICUgc2NyaXB0KQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKHNjcmlwdF9mdWxsKQorICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxsIGludGVyY2VwdCBob29rICclcycgZmFpbGVkIChleGl0IGNvZGU6ICVkKSEgU2VlIGxvZyBmb3IgZGV0YWlscyEiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChzY3JpcHQsIGUucmV0dXJuY29kZSkpCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X2Z1bGwpIGFzIGludGVyY2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZF9wa2dzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbnRlcmNlcHQucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeIyNQS0dTOiguKikiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX3BrZ3MgPSBtLmdyb3VwKDEpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgIGlmIHJlZ2lzdGVyZWRfcGtncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRoZSBwb3N0aW5zdGFsbHMgZm9yIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lsbCBiZSBwb3N0cG9uZWQgZm9yIGZpcnN0IGJvb3Q6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncykKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWxsIHRoZSBiYWNrZW5kIGRlcGVuZGVudCBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUocmVnaXN0ZXJlZF9wa2dzKQorCisgICAgZGVmIF9ydW5fbGRjb25maWcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ0xEQ09ORklHREVQRU5EJywgVHJ1ZSk6CisgICAgICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmc6IGxkY29uZmlnIC1yIiArIHNlbGYuaW1hZ2Vfcm9vdGZzICsgIi1jIG5ldyAtdiIpCisgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbJ2xkY29uZmlnJywgJy1yJywgc2VsZi5pbWFnZV9yb290ZnMsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldycsICctdiddKQorCisgICAgZGVmIF9jaGVja19mb3Jfa2VybmVsX21vZHVsZXMoc2VsZiwgbW9kdWxlc19kaXIpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhtb2R1bGVzX2RpciwgdG9wZG93bj1UcnVlKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZvdW5kX2tvID0gbmFtZS5lbmRzd2l0aCgiLmtvIikKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9rbzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kX2tvCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9nZW5lcmF0ZV9rZXJuZWxfbW9kdWxlX2RlcHMoc2VsZik6CisgICAgICAgIG1vZHVsZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLCAnbGliJywgJ21vZHVsZXMnKQorICAgICAgICAjIGlmIHdlIGRvbid0IGhhdmUgYW55IG1vZHVsZXMgZG9uJ3QgYm90aGVyIHRvIGRvIHRoZSBkZXBtb2QKKyAgICAgICAgaWYgbm90IHNlbGYuX2NoZWNrX2Zvcl9rZXJuZWxfbW9kdWxlcyhtb2R1bGVzX2Rpcik6CisgICAgICAgICAgICBiYi5ub3RlKCJObyBLZXJuZWwgTW9kdWxlcyBmb3VuZCwgbm90IHJ1bm5pbmcgZGVwbW9kIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGtlcm5lbF9hYmlfdmVyX2ZpbGUgPSBvZS5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwgImtlcm5lbC1kZXBtb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXJuZWwtYWJpdmVyc2lvbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfYWJpX3Zlcl9maWxlKToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyBrZXJuZWwtYWJpdmVyc2lvbiBmaWxlIGZvdW5kICglcyksIGNhbm5vdCBydW4gZGVwbW9kLCBhYm9ydGluZyIgJSBrZXJuZWxfYWJpX3Zlcl9maWxlKQorCisgICAgICAgIGtlcm5lbF92ZXIgPSBvcGVuKGtlcm5lbF9hYmlfdmVyX2ZpbGUpLnJlYWQoKS5zdHJpcCgnIFxuJykKKyAgICAgICAgdmVyc2lvbmVkX21vZHVsZXNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLCBtb2R1bGVzX2Rpciwga2VybmVsX3ZlcikKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodmVyc2lvbmVkX21vZHVsZXNfZGlyKQorCisgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsnZGVwbW9kd3JhcHBlcicsICctYScsICctYicsIHNlbGYuaW1hZ2Vfcm9vdGZzLCBrZXJuZWxfdmVyXSkKKworICAgICIiIgorICAgIENyZWF0ZSBkZXZmczoKKyAgICAqIElNQUdFX0RFVklDRV9UQUJMRSBpcyB0aGUgb2xkIG5hbWUgdG8gYW4gYWJzb2x1dGUgcGF0aCB0byBhIGRldmljZSB0YWJsZSBmaWxlCisgICAgKiBJTUFHRV9ERVZJQ0VfVEFCTEVTIGlzIGEgbmV3IG5hbWUgZm9yIGEgZmlsZSwgb3IgbGlzdCBvZiBmaWxlcywgc2VhY2hlZAorICAgICAgZm9yIGluIHRoZSBCQlBBVEgKKyAgICBJZiBuZWl0aGVyIGFyZSBzcGVjaWZpZWQgdGhlbiB0aGUgZGVmYXVsdCBuYW1lIG9mIGZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dAorICAgIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgQkJQQVRIIChzYW1lIGFzIHRoZSBvbGQgdmVyc2lvbi4pCisgICAgIiIiCisgICAgZGVmIF9jcmVhdGVfZGV2ZnMoc2VsZik6CisgICAgICAgIGRldnRhYmxlX2xpc3QgPSBbXQorICAgICAgICBkZXZ0YWJsZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0RFVklDRV9UQUJMRScsIFRydWUpCisgICAgICAgIGlmIGRldnRhYmxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGV2dGFibGVfbGlzdC5hcHBlbmQoZGV2dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXZ0YWJsZXMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ERVZJQ0VfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGRldnRhYmxlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRldnRhYmxlcyA9ICdmaWxlcy9kZXZpY2VfdGFibGUtbWluaW1hbC50eHQnCisgICAgICAgICAgICBmb3IgZGV2dGFibGUgaW4gZGV2dGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZGV2dGFibGVfbGlzdC5hcHBlbmQoIiVzIiAlIGJiLnV0aWxzLndoaWNoKHNlbGYuZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpLCBkZXZ0YWJsZSkpCisKKyAgICAgICAgZm9yIGRldnRhYmxlIGluIGRldnRhYmxlX2xpc3Q6CisgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbIm1ha2VkZXZzIiwgIi1yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywgIi1EIiwgZGV2dGFibGVdKQorCisKK2NsYXNzIFJwbVJvb3RmcyhSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzdXBlcihScG1Sb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZSdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xleGl0IDF8RVJST1I6IHxFcnJvcjogfEVycm9yIHxFUlJPUiAnXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8RmFpbGVkIHxGYWlsZWQ6IHxGYWlsZWQkfEZhaWxlZFwoXGQrXCk6KScKKyAgICAgICAgc2VsZi5tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnBtID0gUnBtUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuaW5jX3JwbV9pbWFnZV9nZW4gPSBzZWxmLmQuZ2V0VmFyKCdJTkNfUlBNX0lNQUdFX0dFTicsIFRydWUpCisgICAgICAgIGlmIHNlbGYuaW5jX3JwbV9pbWFnZV9nZW4gIT0gIjEiOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2Vfcm9vdGZzLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wbS5yZWNvdmVyeV9wYWNrYWdpbmdfZGF0YSgpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorCisgICAgICAgIHNlbGYucG0uY3JlYXRlX2NvbmZpZ3MoKQorCisgICAgJycnCisgICAgV2hpbGUgcnBtIGluY3JlbWVudGFsIGltYWdlIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgaXQgd2lsbCByZW1vdmUgdGhlCisgICAgdW5uZWVkZWQgcGtncyBieSBjb21wYXJpbmcgdGhlIG5ldyBpbnN0YWxsIHNvbHV0aW9uIG1hbmlmZXN0IGFuZCB0aGUKKyAgICBvbGQgaW5zdGFsbGVkIG1hbmlmZXN0LgorICAgICcnJworICAgIGRlZiBfY3JlYXRlX2luY3JlbWVudGFsKHNlbGYsIHBrZ3NfaW5pdGlhbF9pbnN0YWxsKToKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisKKyAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IGxpc3QoKQorICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfaW5pdGlhbF9pbnN0YWxsOgorICAgICAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCArPSBwa2dzX2luaXRpYWxfaW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICAgICAgaW5zdGFsbGVkX21hbmlmZXN0ID0gc2VsZi5wbS5sb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uKCkKKyAgICAgICAgICAgIHNvbHV0aW9uX21hbmlmZXN0ID0gc2VsZi5wbS5kdW1wX2luc3RhbGxfc29sdXRpb24ocGtnc190b19pbnN0YWxsKQorCisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIGluc3RhbGxlZF9tYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIHNvbHV0aW9uX21hbmlmZXN0OgorICAgICAgICAgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisKKyAgICAgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICAgICAgYmIubm90ZSgnaW5jcmVtZW50YWwgdXBkYXRlIC0tIHVwZ3JhZGUgcGFja2FnZXMgaW4gcGxhY2UgJykKKyAgICAgICAgICAgIHNlbGYucG0udXBncmFkZSgpCisgICAgICAgICAgICBpZiBwa2dfdG9fcmVtb3ZlICE9IFtdOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2luY3JlbWVudGFsIHJlbW92ZWQ6ICVzJyAlICcgJy5qb2luKHBrZ190b19yZW1vdmUpKQorICAgICAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlKHBrZ190b19yZW1vdmUpCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGtnc190b19pbnN0YWxsID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKyAgICAgICAgcnBtX3ByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisgICAgICAgIHJwbV9wb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgUE0gaW5kZXggZmlsZXMKKyAgICAgICAgc2VsZi5wbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcnBtX3ByZV9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5wbS5kdW1wX2FsbF9hdmFpbGFibGVfcGtncygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfaW5jcmVtZW50YWwocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtncykKKworICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL2V0Yy9ycG0nLCAnL3Zhci9saWIvcnBtJywgJy92YXIvbGliL3NtYXJ0J10pCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcnBtX3Bvc3RfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYuX2xvZ19jaGVjaygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLnBtLmJhY2t1cF9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICAgICAgc2VsZi5wbS5ycG1fc2V0dXBfc21hcnRfdGFyZ2V0X2NvbmZpZygpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnREVQTE9ZX0RJUl9SUE0nLCAnSU5DX1JQTV9JTUFHRV9HRU4nLCAnUlBNX1BSRVBST0NFU1NfQ09NTUFORFMnLAorICAgICAgICAgICAgICAgICdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnUlBNX1BSRUZFUl9FTEZfQVJDSCddCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9ycG0tcG9zdGluc3RzIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihwb3N0aW5zdF9kaXIpOgorICAgICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKHBvc3RpbnN0X2RpcikKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ0RlbGF5ZWQgcGFja2FnZSBzY3JpcHRsZXQ6ICVzJyAlIGYpCisgICAgICAgICAgICByZXR1cm4gZmlsZXMKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9zYXZlX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgIyB0aGlzIGlzIGp1c3QgYSBzdHViLiBGb3IgUlBNLCB0aGUgZmFpbGVkIHBvc3RpbnN0YWxscyBhcmUKKyAgICAgICAgIyBhbHJlYWR5IHNhdmVkIGluIC9ldGMvcnBtLXBvc3RpbnN0cworICAgICAgICBwYXNzCisKKyAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoJyh1bnBhY2tpbmcgb2YgYXJjaGl2ZSBmYWlsZWR8Q2Fubm90IGZpbmQgcGFja2FnZXxleGl0IDF8RVJSfEZhaWwpJykKKyAgICAgICAgbG9nX3BhdGggPSBzZWxmLmQuZXhwYW5kKCIke1R9L2xvZy5kb19yb290ZnMiKQorICAgICAgICB3aXRoIG9wZW4obG9nX3BhdGgsICdyJykgYXMgbG9nOgorICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAwCisgICAgICAgICAgICBtZXNzYWdlID0gIlxuIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbG9nLnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgc2ggLXggbWF5IGVtaXQgY29kZSB3aGljaCBpc24ndCBhY3R1YWxseSBleGVjdXRlZAorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorCQkgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IFRoZXJlIHdlcmUgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGxvZ2ZpbGUnKQorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCdsb2dfY2hlY2s6IE1hdGNoZWQga2V5d29yZDogWyVzXVxuXG4nICUgbS5ncm91cCgpKQorCisgICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPj0gMSBhbmQgZm91bmRfZXJyb3IgPD0gNToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBsaW5lICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBmb3VuZF9lcnJvciArPSAxCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA9PSA2OgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbChtZXNzYWdlKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfaGFuZGxlX2ludGVyY2VwdF9mYWlsdXJlKHNlbGYsIHJlZ2lzdGVyZWRfcGtncyk6CisgICAgICAgIHJwbV9wb3N0aW5zdHNfZGlyID0gc2VsZi5pbWFnZV9yb290ZnMgKyBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMvJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHJwbV9wb3N0aW5zdHNfZGlyKQorCisgICAgICAgICMgU2F2ZSB0aGUgcGFja2FnZSBwb3N0aW5zdGFsbHMgaW4gL2V0Yy9ycG0tcG9zdGluc3RzCisgICAgICAgIGZvciBwa2cgaW4gcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCk6CisgICAgICAgICAgICBzZWxmLnBtLnNhdmVfcnBtcG9zdGluc3QocGtnKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHBvc3Rwcm9jZXNzIGNvbW1hbmRzLCBycG0gaXMgY2FsbGVkIHNldmVyYWwKKyAgICAgICAgIyB0aW1lcyB0byBnZXQgdGhlIGZpbGVzIGluc3RhbGxlZCwgZGVwZW5kZW5jaWVzLCBldGMuIFRoaXMgY3JlYXRlcyB0aGUKKyAgICAgICAgIyBfX2RiLjAwKiAoQmVya2VsZXkgREIgZmlsZXMgdGhhdCBob2xkIGxvY2tzLCBycG0gc3BlY2lmaWMgZW52aXJvbm1lbnQKKyAgICAgICAgIyBzZXR0aW5ncywgZXRjLiksIHRoYXQgc2hvdWxkIG5vdCBnZXQgaW50byB0aGUgZmluYWwgcm9vdGZzCisgICAgICAgIHNlbGYucG0udW5sb2NrX3JwbV9kYigpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiKSBhbmQgbm90IG9zLmxpc3RkaXIoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiKToKKyAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCArICIvdG1wIiwgVHJ1ZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgpIGFuZCBub3Qgb3MubGlzdGRpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgpOgorICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQorCitjbGFzcyBEcGtnT3BrZ1Jvb3RmcyhSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoRHBrZ09wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICBkZWYgX2dldF9wa2dzX3Bvc3RpbnN0cyhzZWxmLCBzdGF0dXNfZmlsZSk6CisgICAgICAgIGRlZiBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpOgorICAgICAgICAgICAgcGtnX2RlcGVuZHNfbGlzdCA9IFtdCisgICAgICAgICAgICAjIGZpbHRlciB2ZXJzaW9uIHJlcXVpcmVtZW50cyBsaWtlIGxpYmMgKD49IDEuMSkKKyAgICAgICAgICAgIGZvciBkZXAgaW4gcGtnX2RlcGVuZHMuc3BsaXQoJywgJyk6CisgICAgICAgICAgICAgICAgbV9kZXAgPSByZS5tYXRjaCgiXiguKikgXCguKlwpJCIsIGRlcCkKKyAgICAgICAgICAgICAgICBpZiBtX2RlcDoKKyAgICAgICAgICAgICAgICAgICAgZGVwID0gbV9kZXAuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBwa2dfZGVwZW5kc19saXN0LmFwcGVuZChkZXApCisKKyAgICAgICAgICAgIHJldHVybiBwa2dfZGVwZW5kc19saXN0CisKKyAgICAgICAgcGtncyA9IHt9CisgICAgICAgIHBrZ19uYW1lID0gIiIKKyAgICAgICAgcGtnX3N0YXR1c19tYXRjaCA9IEZhbHNlCisgICAgICAgIHBrZ19kZXBlbmRzID0gIiIKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGRhdGEgPSBzdGF0dXMucmVhZCgpCisgICAgICAgICAgICBzdGF0dXMuY2xvc2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGF0YS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBtX3BrZyA9IHJlLm1hdGNoKCJeUGFja2FnZTogKC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgbV9zdGF0dXMgPSByZS5tYXRjaCgiXlN0YXR1czouKnVucGFja2VkIiwgbGluZSkKKyAgICAgICAgICAgICAgICBtX2RlcGVuZHMgPSByZS5tYXRjaCgiXkRlcGVuZHM6ICguKikiLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgbV9wa2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19uYW1lIGFuZCBwa2dfc3RhdHVzX21hdGNoOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dfbmFtZV0gPSBfZ2V0X3BrZ19kZXBlbmRzX2xpc3QocGtnX2RlcGVuZHMpCisKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWUgPSBtX3BrZy5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBwa2dfc3RhdHVzX21hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcGtnX2RlcGVuZHMgPSAiIgorICAgICAgICAgICAgICAgIGVsaWYgbV9zdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ19zdGF0dXNfbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBtX2RlcGVuZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzID0gbV9kZXBlbmRzLmdyb3VwKDEpCisKKyAgICAgICAgIyByZW1vdmUgcGFja2FnZSBkZXBlbmRlbmNpZXMgbm90IGluIHBvc3RpbnN0cworICAgICAgICBwa2dfbmFtZXMgPSBwa2dzLmtleXMoKQorICAgICAgICBmb3IgcGtnX25hbWUgaW4gcGtnX25hbWVzOgorICAgICAgICAgICAgZGVwcyA9IHBrZ3NbcGtnX25hbWVdWzpdCisKKyAgICAgICAgICAgIGZvciBkIGluIGRlcHM6CisgICAgICAgICAgICAgICAgaWYgZCBub3QgaW4gcGtnX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ19uYW1lXS5yZW1vdmUoZCkKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHNfY29tbW9uKHNlbGYsIHN0YXR1c19maWxlKToKKyAgICAgICAgZGVmIF9kZXBfcmVzb2x2ZShncmFwaCwgbm9kZSwgcmVzb2x2ZWQsIHNlZW4pOgorICAgICAgICAgICAgc2Vlbi5hcHBlbmQobm9kZSkKKworICAgICAgICAgICAgZm9yIGVkZ2UgaW4gZ3JhcGhbbm9kZV06CisgICAgICAgICAgICAgICAgaWYgZWRnZSBub3QgaW4gcmVzb2x2ZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGVkZ2UgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUGFja2FnZXMgJXMgYW5kICVzIGhhdmUgIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIGNpcmN1bGFyIGRlcGVuZGVuY3kgaW4gcG9zdGluc3RzIHNjcmlwdHMuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5vZGUsIGVkZ2UpKQorICAgICAgICAgICAgICAgICAgICBfZGVwX3Jlc29sdmUoZ3JhcGgsIGVkZ2UsIHJlc29sdmVkLCBzZWVuKQorCisgICAgICAgICAgICByZXNvbHZlZC5hcHBlbmQobm9kZSkKKworICAgICAgICBwa2dfbGlzdCA9IFtdCisKKyAgICAgICAgcGtncyA9IHNlbGYuX2dldF9wa2dzX3Bvc3RpbnN0cyhzdGF0dXNfZmlsZSkKKyAgICAgICAgaWYgcGtnczoKKyAgICAgICAgICAgIHJvb3QgPSAiX19wYWNrYWdlZ3JvdXBfcG9zdGluc3RfXyIKKyAgICAgICAgICAgIHBrZ3Nbcm9vdF0gPSBwa2dzLmtleXMoKQorICAgICAgICAgICAgX2RlcF9yZXNvbHZlKHBrZ3MsIHJvb3QsIHBrZ19saXN0LCBbXSkKKyAgICAgICAgICAgIHBrZ19saXN0LnJlbW92ZShyb290KQorCisgICAgICAgIGlmIGxlbihwa2dfbGlzdCkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHBrZ19saXN0CisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzX2NvbW1vbihzZWxmLCBkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKToKKyAgICAgICAgbnVtID0gMAorICAgICAgICBmb3IgcCBpbiBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkc3RfcG9zdGluc3RfZGlyKQorCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjX3Bvc3RpbnN0X2RpciwgcCArICIucG9zdGluc3QiKSk6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkob3MucGF0aC5qb2luKHNyY19wb3N0aW5zdF9kaXIsIHAgKyAiLnBvc3RpbnN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRzdF9wb3N0aW5zdF9kaXIsICIlMDNkLSVzIiAlIChudW0sIHApKSkKKworICAgICAgICAgICAgbnVtICs9IDEKKworY2xhc3MgRHBrZ1Jvb3RmcyhEcGtnT3BrZ1Jvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKERwa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJ15FOicKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorICAgICAgICBzZWxmLm1hbmlmZXN0ID0gRHBrZ01hbmlmZXN0KGQsIG1hbmlmZXN0X2RpcikKKyAgICAgICAgc2VsZi5wbSA9IERwa2dQTShkLCBkLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignRFBLR19BUkNIJywgVHJ1ZSkpCisKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBkZWJfcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ0RFQl9QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgZGViX3Bvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKworICAgICAgICBhbHRfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9L3Zhci9saWIvZHBrZy9hbHRlcm5hdGl2ZXMiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYWx0X2RpcikKKworICAgICAgICAjIHVwZGF0ZSBQTSBpbmRleCBmaWxlcworICAgICAgICBzZWxmLnBtLndyaXRlX2luZGV4KCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLnVwZGF0ZSgpCisKKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHNlbGYuaW5zdGFsbF9vcmRlcjoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvZHBrZyddKQorCisgICAgICAgIHNlbGYucG0uZml4X2Jyb2tlbl9kZXBlbmRlbmNpZXMoKQorCisgICAgICAgIHNlbGYucG0ubWFya19wYWNrYWdlcygiaW5zdGFsbGVkIikKKworICAgICAgICBzZWxmLnBtLnJ1bl9wcmVfcG9zdF9pbnN0YWxscygpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgZGViX3Bvc3RfcHJvY2Vzc19jbWRzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZGVwZW5kc19saXN0KCk6CisgICAgICAgIHJldHVybiBbJ0RFUExPWV9ESVJfREVCJywgJ0RFQl9TREtfQVJDSCcsICdBUFRDT05GX1RBUkdFVCcsICdBUFRfQVJHUycsICdEUEtHX0FSQ0gnLCAnREVCX1BSRVBST0NFU1NfQ09NTUFORFMnLCAnREVCX1BPU1RQUk9DRVNTX0NPTU1BTkRTJ10KKworICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBzdGF0dXNfZmlsZSA9IHNlbGYuaW1hZ2Vfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzX2NvbW1vbihzdGF0dXNfZmlsZSkKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIGRzdF9wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlYi1wb3N0aW5zdHMiKQorICAgICAgICBzcmNfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9L3Zhci9saWIvZHBrZy9pbmZvIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhdmVfcG9zdGluc3RzX2NvbW1vbihkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJ1bnBhY2tlZCIsIHJlZ2lzdGVyZWRfcGtncy5zcGxpdCgpKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIE9wa2dSb290ZnMoRHBrZ09wa2dSb290ZnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzdXBlcihPcGtnUm9vdGZzLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLmxvZ19jaGVja19yZWdleCA9ICcoZXhpdCAxfENvbGxlY3RlZCBlcnJvcnMpJworCisgICAgICAgIHNlbGYubWFuaWZlc3QgPSBPcGtnTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorICAgICAgICBzZWxmLm9wa2dfY29uZiA9IHNlbGYuZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpCisgICAgICAgIHNlbGYucGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcigiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID0gc2VsZi5kLmdldFZhcignSU5DX0lQS19JTUFHRV9HRU4nLCBUcnVlKSBvciAiIgorICAgICAgICBpZiBzZWxmLl9yZW1vdmVfb2xkX3Jvb3RmcygpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2Vfcm9vdGZzLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5wbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnX2FyY2hzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wbSA9IE9wa2dQTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltYWdlX3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGtnX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnX2FyY2hzKQorICAgICAgICAgICAgc2VsZi5wbS5yZWNvdmVyX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5kLmdldFZhcignTVVMVElMSUJfVEVNUF9ST09URlMnLCBUcnVlKSwgVHJ1ZSkKKworICAgIGRlZiBfcHJlbGlua19maWxlKHNlbGYsIHJvb3RfZGlyLCBmaWxlbmFtZSk6CisgICAgICAgIGJiLm5vdGUoJ3ByZWxpbmsgJXMgaW4gJXMnICUgKGZpbGVuYW1lLCByb290X2RpcikpCisgICAgICAgIHByZWxpbmtfY2ZnID0gb2UucGF0aC5qb2luKHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZicpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJlbGlua19jZmcpOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5kLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyX25hdGl2ZX0vcHJlbGluay5jb25mJyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVsaW5rX2NmZykKKworICAgICAgICBjbWRfcHJlbGluayA9IHNlbGYuZC5leHBhbmQoJyR7U1RBR0lOR19ESVJfTkFUSVZFfSR7c2JpbmRpcl9uYXRpdmV9L3ByZWxpbmsnKQorICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbY21kX3ByZWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1yb290JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hbVInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1OJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZXhwYW5kKCcke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZicpXSkKKworICAgICcnJworICAgIENvbXBhcmUgdHdvIGZpbGVzIHdpdGggdGhlIHNhbWUga2V5IHR3aWNlIHRvIHNlZSBpZiB0aGV5IGFyZSBlcXVhbC4KKyAgICBJZiB0aGV5IGFyZSBub3QgZXF1YWwsIGl0IG1lYW5zIHRoZXkgYXJlIGR1cGxpY2F0ZWQgYW5kIGNvbWUgZnJvbQorICAgIGRpZmZlcmVudCBwYWNrYWdlcy4KKyAgICAxc3Q6IENvbWFwcmUgdGhlbSBkaXJlY3RseTsKKyAgICAybmQ6IFdoaWxlIGluY3JlbWVudGFsIGltYWdlIGNyZWF0aW9uIGlzIGVuYWJsZWQsIG9uZSBvZiB0aGUKKyAgICAgICAgIGZpbGVzIGNvdWxkIGJlIHByb2JhbHkgcHJlbGlua2VkIGluIHRoZSBwcmV2aW91cyBpbWFnZQorICAgICAgICAgY3JlYXRpb24gYW5kIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgIHByZWxpbmsgdGhlIG90aGVyIG9uZSBhbmQgY29tcGFyZSB0aGVtLgorICAgICcnJworICAgIGRlZiBfZmlsZV9lcXVhbChzZWxmLCBrZXksIGYxLCBmMik6CisKKyAgICAgICAgIyBCb3RoIG9mIHRoZW0gYXJlIG5vdCBwcmVsaW5rZWQKKyAgICAgICAgaWYgZmlsZWNtcC5jbXAoZjEsIGYyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9yb290ZnMgbm90IGluIGYxOgorICAgICAgICAgICAgc2VsZi5fcHJlbGlua19maWxlKGYxLnJlcGxhY2Uoa2V5LCAnJyksIGYxKQorCisgICAgICAgIGlmIHNlbGYuaW1hZ2Vfcm9vdGZzIG5vdCBpbiBmMjoKKyAgICAgICAgICAgIHNlbGYuX3ByZWxpbmtfZmlsZShmMi5yZXBsYWNlKGtleSwgJycpLCBmMikKKworICAgICAgICAjIEJvdGggb2YgdGhlbSBhcmUgcHJlbGlua2VkCisgICAgICAgIGlmIGZpbGVjbXAuY21wKGYxLCBmMik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgTm90IGVxdWFsCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3YXMgcmV1c2VkIGZyb20gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbi4KKyAgICBTZWUgY29tbWl0OiAiaW1hZ2UuYmJjbGFzczogQWRkZWQgdmFyaWFibGVzIGZvciBtdWx0aWxpYiBzdXBwb3J0LiIgYnkKKyAgICBMaWFuaGFvIEx1LgorICAgICIiIgorICAgIGRlZiBfbXVsdGlsaWJfc2FuaXR5X3Rlc3Qoc2VsZiwgZGlycyk6CisKKyAgICAgICAgYWxsb3dfcmVwbGFjZSA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCUkVfQUxMT1dfUkVQIiwgVHJ1ZSkKKyAgICAgICAgaWYgYWxsb3dfcmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgYWxsb3dfcmVwbGFjZSA9ICIiCisKKyAgICAgICAgYWxsb3dfcmVwID0gcmUuY29tcGlsZShyZS5zdWIoIlx8JCIsICIiLCBhbGxvd19yZXBsYWNlKSkKKyAgICAgICAgZXJyb3JfcHJvbXB0ID0gIk11bHRpbGliIGNoZWNrIGVycm9yOiIKKworICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGZvciByb290LCBzdWJmb2xkZXJzLCBzdWJmaWxlcyBpbiBvcy53YWxrKGRpcik6CisgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gc3ViZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gc3RyKG9zLnBhdGguam9pbigiLyIsIG9zLnBhdGgucmVscGF0aChpdGVtLCBkaXIpKSkKKworICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5IGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrIHdoZXRoZXIgdGhlIGZpbGUgaXMgYWxsb3cgdG8gcmVwbGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWxsb3dfcmVwLm1hdGNoKGtleSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVzW2tleV0pIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMoaXRlbSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZmlsZV9lcXVhbChrZXksIGZpbGVzW2tleV0sIGl0ZW0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIlcyBkdXBsaWNhdGUgZmlsZXMgJXMgJXMgaXMgbm90IHRoZSBzYW1lXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX3Byb21wdCwgaXRlbSwgZmlsZXNba2V5XSkpCisKKyAgICAgICAgICAgICAgICAgICAgI3Bhc3MgdGhlIGNoZWNrLCBhZGQgdG8gbGlzdAorICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW2tleV0gPSBpdGVtCisKKyAgICBkZWYgX211bHRpbGliX3Rlc3RfaW5zdGFsbChzZWxmLCBwa2dzKToKKyAgICAgICAgbWxfdGVtcCA9IHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1RFTVBfUk9PVEZTIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG1sX3RlbXApCisKKyAgICAgICAgZGlycyA9IFtzZWxmLmltYWdlX3Jvb3Rmc10KKworICAgICAgICBmb3IgdmFyaWFudCBpbiBzZWxmLmQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBtbF90YXJnZXRfcm9vdGZzID0gb3MucGF0aC5qb2luKG1sX3RlbXAsIHZhcmlhbnQpCisKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShtbF90YXJnZXRfcm9vdGZzLCBUcnVlKQorCisgICAgICAgICAgICBtbF9vcGtnX2NvbmYgPSBvcy5wYXRoLmpvaW4obWxfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ICsgIi0iICsgb3MucGF0aC5iYXNlbmFtZShzZWxmLm9wa2dfY29uZikpCisKKyAgICAgICAgICAgIG1sX3BtID0gT3BrZ1BNKHNlbGYuZCwgbWxfdGFyZ2V0X3Jvb3RmcywgbWxfb3BrZ19jb25mLCBzZWxmLnBrZ19hcmNocykKKworICAgICAgICAgICAgbWxfcG0udXBkYXRlKCkKKyAgICAgICAgICAgIG1sX3BtLmluc3RhbGwocGtncykKKworICAgICAgICAgICAgZGlycy5hcHBlbmQobWxfdGFyZ2V0X3Jvb3RmcykKKworICAgICAgICBzZWxmLl9tdWx0aWxpYl9zYW5pdHlfdGVzdChkaXJzKQorCisgICAgJycnCisgICAgV2hpbGUgaXBrIGluY3JlbWVudGFsIGltYWdlIGdlbmVyYXRpb24gaXMgZW5hYmxlZCwgaXQgd2lsbCByZW1vdmUgdGhlCisgICAgdW5uZWVkZWQgcGtncyBieSBjb21wYXJpbmcgdGhlIG9sZCBmdWxsIG1hbmlmZXN0IGluIHByZXZpb3VzIGV4aXN0aW5nCisgICAgaW1hZ2UgYW5kIHRoZSBuZXcgZnVsbCBtYW5pZmVzdCBpbiB0aGUgY3VycmVudCBpbWFnZS4KKyAgICAnJycKKyAgICBkZWYgX3JlbW92ZV9leHRyYV9wYWNrYWdlcyhzZWxmLCBwa2dzX2luaXRpYWxfaW5zdGFsbCk6CisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgICMgUGFyc2UgZnVsbCBtYW5pZmVzdCBpbiBwcmV2aW91cyBleGlzdGluZyBpbWFnZSBjcmVhdGlvbiBzZXNzaW9uCisgICAgICAgICAgICBvbGRfZnVsbF9tYW5pZmVzdCA9IHNlbGYubWFuaWZlc3QucGFyc2VfZnVsbF9tYW5pZmVzdCgpCisKKyAgICAgICAgICAgICMgQ3JlYXRlIGZ1bGwgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGltYWdlIHNlc3Npb24sIHRoZSBvbGQgb25lCisgICAgICAgICAgICAjIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuCisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0LmNyZWF0ZV9mdWxsKHNlbGYucG0pCisKKyAgICAgICAgICAgICMgUGFyc2UgZnVsbCBtYW5pZmVzdCBpbiBjdXJyZW50IGltYWdlIGNyZWF0aW9uIHNlc3Npb24KKyAgICAgICAgICAgIG5ld19mdWxsX21hbmlmZXN0ID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9mdWxsX21hbmlmZXN0KCkKKworICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9IGxpc3QoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBvbGRfZnVsbF9tYW5pZmVzdDoKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIG5ld19mdWxsX21hbmlmZXN0OgorICAgICAgICAgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisKKyAgICAgICAgICAgIGlmIHBrZ190b19yZW1vdmUgIT0gW106CisgICAgICAgICAgICAgICAgYmIubm90ZSgnZGVjcmVtZW50YWwgcmVtb3ZlZDogJXMnICUgJyAnLmpvaW4ocGtnX3RvX3JlbW92ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnX3RvX3JlbW92ZSkKKworICAgICcnJworICAgIENvbXBhcmUgd2l0aCBwcmV2aW91cyBleGlzdGluZyBpbWFnZSBjcmVhdGlvbiwgaWYgc29tZSBjb25kaXRpb25zCisgICAgdHJpZ2dlcmVkLCB0aGUgcHJldmlvdXMgb2xkIGltYWdlIHNob3VsZCBiZSByZW1vdmVkLgorICAgIFRoZSBjb25kaXRpb25zIGluY2x1ZGUgYW55IG9mICdQQUNLQUdFX0VYQ0xVREUsIE5PX1JFQ09NTUVOREFUSU9OUworICAgIGFuZCBCQURfUkVDT01NRU5EQVRJT05TJyBoYXMgYmVlbiBjaGFuZ2VkLgorICAgICcnJworICAgIGRlZiBfcmVtb3ZlX29sZF9yb290ZnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuICE9ICIxIjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdmFyc19saXN0X2ZpbGUgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3ZhcnNfbGlzdCcpCisKKyAgICAgICAgb2xkX3ZhcnNfbGlzdCA9ICIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHZhcnNfbGlzdF9maWxlKToKKyAgICAgICAgICAgIG9sZF92YXJzX2xpc3QgPSBvcGVuKHZhcnNfbGlzdF9maWxlLCAncisnKS5yZWFkKCkKKworICAgICAgICBuZXdfdmFyc19saXN0ID0gJyVzOiVzOiVzXG4nICUgXAorICAgICAgICAgICAgICAgICgoc2VsZi5kLmdldFZhcignQkFEX1JFQ09NTUVOREFUSU9OUycsIFRydWUpIG9yICcnKS5zdHJpcCgpLAorICAgICAgICAgICAgICAgICAoc2VsZi5kLmdldFZhcignTk9fUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkgb3IgJycpLnN0cmlwKCksCisgICAgICAgICAgICAgICAgIChzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAnJykuc3RyaXAoKSkKKyAgICAgICAgb3Blbih2YXJzX2xpc3RfZmlsZSwgJ3crJykud3JpdGUobmV3X3ZhcnNfbGlzdCkKKworICAgICAgICBpZiBvbGRfdmFyc19saXN0ICE9IG5ld192YXJzX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IHNlbGYubWFuaWZlc3QucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIG9wa2dfcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsIFRydWUpCisgICAgICAgIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgcm9vdGZzX3Bvc3RfaW5zdGFsbF9jbWRzID0gc2VsZi5kLmdldFZhcignUk9PVEZTX1BPU1RJTlNUQUxMX0NPTU1BTkQnLCBUcnVlKQorCisgICAgICAgICMgdXBkYXRlIFBNIGluZGV4IGZpbGVzLCB1bmxlc3MgdXNlcnMgcHJvdmlkZSB0aGVpciBvd24gZmVlZHMKKyAgICAgICAgaWYgKHNlbGYuZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkgb3IgIiIpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLnVwZGF0ZSgpCisKKyAgICAgICAgc2VsZi5wbS5oYW5kbGVfYmFkX3JlY29tbWVuZGF0aW9ucygpCisKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2V4dHJhX3BhY2thZ2VzKHBrZ3NfdG9faW5zdGFsbCkKKworICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgICAgICMgRm9yIG11bHRpbGliLCB3ZSBwZXJmb3JtIGEgc2FuaXR5IHRlc3QgYmVmb3JlIGZpbmFsIGluc3RhbGwKKyAgICAgICAgICAgICAgICAjIElmIHNhbml0eSB0ZXN0IGZhaWxzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgZG8gYSBiYi5mYXRhbCgpCisgICAgICAgICAgICAgICAgIyBhbmQgdGhlIGluc3RhbGxhdGlvbiB3aWxsIHN0b3AKKyAgICAgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9NVUxUSUxJQjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXVsdGlsaWJfdGVzdF9pbnN0YWxsKHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0pCisKKyAgICAgICAgICAgICAgICBzZWxmLnBtLmluc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZhbHNlLCBUcnVlXVtwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFldKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCkKKworICAgICAgICBzZWxmLl9zZXR1cF9kYmdfcm9vdGZzKFsnL3Zhci9saWIvb3BrZyddKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIG9wa2dfcG9zdF9wcm9jZXNzX2NtZHMpCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHJvb3Rmc19wb3N0X2luc3RhbGxfY21kcykKKworICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLnBtLmJhY2t1cF9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnSVBLR0NPTkZfU0RLJywgJ0lQS19GRUVEX1VSSVMnLCAnREVQTE9ZX0RJUl9JUEsnLCAnSVBLR0NPTkZfVEFSR0VUJywgJ0lOQ19JUEtfSU1BR0VfR0VOJywgJ09QS0dfQVJHUycsICdPUEtHTElCRElSJywgJ09QS0dfUFJFUFJPQ0VTU19DT01NQU5EUycsICdPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJ09QS0dMSUJESVInXQorCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wa2ciLCAic3RhdHVzIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0c19jb21tb24oc3RhdHVzX2ZpbGUpCisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBkc3RfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9pcGstcG9zdGluc3RzIikKKyAgICAgICAgc3JjX3Bvc3RpbnN0X2RpciA9IHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7T1BLR0xJQkRJUn0vb3BrZy9pbmZvIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NhdmVfcG9zdGluc3RzX2NvbW1vbihkc3RfcG9zdGluc3RfZGlyLCBzcmNfcG9zdGluc3RfZGlyKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJ1bnBhY2tlZCIsIHJlZ2lzdGVyZWRfcGtncy5zcGxpdCgpKQorCisgICAgZGVmIF9sb2dfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ19jaGVja193YXJuKCkKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX2Vycm9yKCkKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgcGFzcworCitkZWYgZ2V0X2NsYXNzX2Zvcl90eXBlKGltZ3R5cGUpOgorICAgIHJldHVybiB7InJwbSI6IFJwbVJvb3RmcywKKyAgICAgICAgICAgICJpcGsiOiBPcGtnUm9vdGZzLAorICAgICAgICAgICAgImRlYiI6IERwa2dSb290ZnN9W2ltZ3R5cGVdCisKK2RlZiB2YXJpYWJsZV9kZXBlbmRzKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBjbHMgPSBnZXRfY2xhc3NfZm9yX3R5cGUoaW1nX3R5cGUpCisgICAgcmV0dXJuIGNscy5fZGVwZW5kc19saXN0KCkKKworZGVmIGNyZWF0ZV9yb290ZnMoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGVudl9ia3AgPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIFJwbVJvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgT3BrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiZGViIjoKKyAgICAgICAgRHBrZ1Jvb3RmcyhkLCBtYW5pZmVzdF9kaXIpLmNyZWF0ZSgpCisKKyAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQorCisKK2RlZiBpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBmb3JtYXQ9Tm9uZSwgcm9vdGZzX2Rpcj1Ob25lKToKKyAgICBpZiBub3Qgcm9vdGZzX2RpcjoKKyAgICAgICAgcm9vdGZzX2RpciA9IGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIHJldHVybiBScG1Qa2dzTGlzdChkLCByb290ZnNfZGlyKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIsIGQuZ2V0VmFyKCJJUEtHQ09ORl9UQVJHRVQiLCBUcnVlKSkubGlzdChmb3JtYXQpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiZGViIjoKKyAgICAgICAgcmV0dXJuIERwa2dQa2dzTGlzdChkLCByb290ZnNfZGlyKS5saXN0KGZvcm1hdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAiIiIKKyAgICBXZSBzaG91bGQgYmUgYWJsZSB0byBydW4gdGhpcyBhcyBhIHN0YW5kYWxvbmUgc2NyaXB0LCBmcm9tIG91dHNpZGUgYml0YmFrZQorICAgIGVudmlyb25tZW50LgorICAgICIiIgorICAgICIiIgorICAgIFRCRAorICAgICIiIgpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2Uvc2RrLnB5IGIvbWV0YS9saWIvb2Uvc2RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGEwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9zZGsucHkKQEAgLTAsMCArMSwzNDkgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBvZS51dGlscyBpbXBvcnQgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzCitmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCAqCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgKgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZ2xvYgorCisKK2NsYXNzIFNkayhvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnNka19vdXRwdXQgPSBzZWxmLmQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5zZGtfbmF0aXZlX3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdTREtQQVRITkFUSVZFJywgVHJ1ZSkuc3RyaXAoJy8nKQorICAgICAgICBzZWxmLnRhcmdldF9wYXRoID0gc2VsZi5kLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpLnN0cmlwKCcvJykKKyAgICAgICAgc2VsZi5zeXNjb25mZGlyID0gc2VsZi5kLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLnN0cmlwKCcvJykKKworICAgICAgICBzZWxmLnNka190YXJnZXRfc3lzcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYudGFyZ2V0X3BhdGgpCisgICAgICAgIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCA9IHNlbGYuc2RrX291dHB1dAorCisgICAgICAgIGlmIG1hbmlmZXN0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJTREtfRElSIiwgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gbWFuaWZlc3RfZGlyCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuc2RrX291dHB1dCwgVHJ1ZSkKKworICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcG9wdWxhdGUoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnNka19vdXRwdXQpCisKKyAgICAgICAgIyBjYWxsIGJhY2tlbmQgZGVwZW5kZW50IGltcGxlbWVudGF0aW9uCisgICAgICAgIHNlbGYuX3BvcHVsYXRlKCkKKworICAgICAgICAjIERvbid0IHNoaXAgYW55IGxpYkdMIGluIHRoZSBTREsKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xpYmRpcl9uYXRpdmVzZGsnLCBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJHTCoiKSkKKworICAgICAgICAjIEZpeCBvciByZW1vdmUgYnJva2VuIC5sYSBmaWxlcworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbGliZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioubGEiKSkKKworICAgICAgICAjIExpbmsgdGhlIGxkLnNvLmNhY2hlIGZpbGUgaW50byB0aGUgaG9zdHMgZmlsZXN5c3RlbQorICAgICAgICBsaW5rX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3lzY29uZmRpciwgImxkLnNvLmNhY2hlIikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShsaW5rX25hbWUpKQorICAgICAgICBvcy5zeW1saW5rKCIvZXRjL2xkLnNvLmNhY2hlIiwgbGlua19uYW1lKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoJ1NES19QT1NUUFJPQ0VTU19DT01NQU5EJywgVHJ1ZSkpCisKKworY2xhc3MgUnBtU2RrKFNkayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoUnBtU2RrLCBzZWxmKS5fX2luaXRfXyhkLCBtYW5pZmVzdF9kaXIpCisKKyAgICAgICAgc2VsZi50YXJnZXRfbWFuaWZlc3QgPSBScG1NYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHRhcmdldF9wcm92aWRlbmFtZSA9IFsnL2Jpbi9zaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jpbi9iYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9lbnYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL3BlcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZ2NvbmZpZycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLnRhcmdldF9wbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9wcm92aWRlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZGtfcHJvdmlkZW5hbWUgPSBbJy9iaW4vc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9iaW4vYmFzaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9iaW4vZW52JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9wZXJsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwa2djb25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYkdMLnNvKCkoNjRiaXQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJHTC5zbycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBzZWxmLmhvc3RfcG0gPSBScG1QTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka19ob3N0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ1NES19WRU5ET1InLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtfcHJvdmlkZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREtfUEFDS0FHRV9BUkNIUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTREtfT1MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBwbS5jcmVhdGVfY29uZmlncygpCisgICAgICAgIHBtLndyaXRlX2luZGV4KCkKKyAgICAgICAgcG0uZHVtcF9hbGxfYXZhaWxhYmxlX3BrZ3MoKQorICAgICAgICBwbS51cGRhdGUoKQorCisgICAgICAgIHBrZ3MgPSBbXQorICAgICAgICBwa2dzX2F0dGVtcHQgPSBbXQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgPT0gTWFuaWZlc3QuUEtHX1RZUEVfQVRURU1QVF9PTkxZOgorICAgICAgICAgICAgICAgIHBrZ3NfYXR0ZW1wdCArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgIHBtLmluc3RhbGwocGtncykKKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3NfYXR0ZW1wdCwgVHJ1ZSkKKworICAgIGRlZiBfcG9wdWxhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgVEFSR0VUIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLnRhcmdldF9wbSwgc2VsZi50YXJnZXRfbWFuaWZlc3QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KHNlbGYuZC5nZXRWYXIoJ1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsIFRydWUpKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoIlBPUFVMQVRFX1NES19QT1NUX1RBUkdFVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5ob3N0X3BtLnJlbW92ZV9wYWNrYWdpbmdfZGF0YSgpCisKKyAgICAgICAgIyBNb3ZlIGhvc3QgUlBNIGxpYnJhcnkgZGF0YQorICAgICAgICBuYXRpdmVfcnBtX3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnBtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfcnBtX3N0YXRlX2RpcikKKyAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfcnBtX3N0YXRlX2RpcikKKworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIpLCBUcnVlKQorCisgICAgICAgICMgTW92ZSBob3N0IHN5c2NvbmZpZyBkYXRhCisgICAgICAgIG5hdGl2ZV9zeXNjb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX3N5c2NvbmZfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgImV0YyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX3N5c2NvbmZfZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgImV0YyIpLCBUcnVlKQorCisKK2NsYXNzIE9wa2dTZGsoU2RrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihPcGtnU2RrLCBzZWxmKS5fX2luaXRfXyhkLCBtYW5pZmVzdF9kaXIpCisKKyAgICAgICAgc2VsZi50YXJnZXRfY29uZiA9IHNlbGYuZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpCisgICAgICAgIHNlbGYuaG9zdF9jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfU0RLIiwgVHJ1ZSkKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorICAgICAgICBzZWxmLmhvc3RfbWFuaWZlc3QgPSBPcGtnTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gT3BrZ1BNKGQsIHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCBzZWxmLnRhcmdldF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IE9wa2dQTShkLCBzZWxmLnNka19ob3N0X3N5c3Jvb3QsIHNlbGYuaG9zdF9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiU0RLX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSkKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKSBvciAiIikgIT0gIjEiOgorICAgICAgICAgICAgcG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIE5BVElWRVNESyBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi5ob3N0X3BtLCBzZWxmLmhvc3RfbWFuaWZlc3QpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EIiwgVHJ1ZSkpCisKKyAgICAgICAgdGFyZ2V0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsIHNlbGYuc3lzY29uZmRpcikKKyAgICAgICAgaG9zdF9zeXNjb25mZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0YXJnZXRfc3lzY29uZmRpcikKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi50YXJnZXRfY29uZiwgdGFyZ2V0X3N5c2NvbmZkaXIpCisgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbih0YXJnZXRfc3lzY29uZmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi50YXJnZXRfY29uZikpLCAwNjQ0KQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihob3N0X3N5c2NvbmZkaXIpCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuaG9zdF9jb25mLCBob3N0X3N5c2NvbmZkaXIpCisgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbihob3N0X3N5c2NvbmZkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuaG9zdF9jb25mKSksIDA2NDQpCisKKyAgICAgICAgbmF0aXZlX29wa2dfc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsb2NhbHN0YXRlZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgIm9wa2ciKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX29wa2dfc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIsICJsaWIiLCAib3BrZyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX29wa2dfc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKworY2xhc3MgRHBrZ1NkayhTZGspOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKERwa2dTZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9jb25mX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCJBUFRDT05GX1RBUkdFVCIsIFRydWUpLCAiYXB0IikKKyAgICAgICAgc2VsZi5ob3N0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIkFQVENPTkZfVEFSR0VUIiwgVHJ1ZSksICJhcHQtc2RrIikKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IERwa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorICAgICAgICBzZWxmLmhvc3RfbWFuaWZlc3QgPSBEcGtnTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19IT1NUKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gRHBrZ1BNKGQsIHNlbGYuc2RrX3RhcmdldF9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hTIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkRQS0dfQVJDSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9jb25mX2RpcikKKworICAgICAgICBzZWxmLmhvc3RfcG0gPSBEcGtnUE0oZCwgc2VsZi5zZGtfaG9zdF9zeXNyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiU0RLX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkRFQl9TREtfQVJDSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3N0X2NvbmZfZGlyKQorCisgICAgZGVmIF9jb3B5X2FwdF9kaXJfdG8oc2VsZiwgZHN0X2Rpcik6CisgICAgICAgIHN0YWdpbmdfZXRjZGlyX25hdGl2ZSA9IHNlbGYuZC5nZXRWYXIoIlNUQUdJTkdfRVRDRElSX05BVElWRSIsIFRydWUpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKGRzdF9kaXIsIFRydWUpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKG9zLnBhdGguam9pbihzdGFnaW5nX2V0Y2Rpcl9uYXRpdmUsICJhcHQiKSwgZHN0X2RpcikKKworICAgIGRlZiBfcG9wdWxhdGVfc3lzcm9vdChzZWxmLCBwbSwgbWFuaWZlc3QpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBtYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKworICAgICAgICBwbS53cml0ZV9pbmRleCgpCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX3RhcmdldF9zeXNyb290LCAiZXRjIiwgImFwdCIpKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLl9jb3B5X2FwdF9kaXJfdG8ob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV0YyIsICJhcHQiKSkKKworICAgICAgICBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXIiLCAibGliIiwgImRwa2ciKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobmF0aXZlX2Rwa2dfc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgInZhciIsICJsaWIiLCAiZHBrZyIsICIqIikpOgorICAgICAgICAgICAgYmIudXRpbHMubW92ZWZpbGUoZiwgbmF0aXZlX2Rwa2dfc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKworZGVmIHNka19saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCB0YXJnZXQsIGZvcm1hdD1Ob25lLCByb290ZnNfZGlyPU5vbmUpOgorICAgIGlmIHJvb3Rmc19kaXIgaXMgTm9uZToKKyAgICAgICAgc2RrX291dHB1dCA9IGQuZ2V0VmFyKCdTREtfT1VUUFVUJywgVHJ1ZSkKKyAgICAgICAgdGFyZ2V0X3BhdGggPSBkLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpLnN0cmlwKCcvJykKKworICAgICAgICByb290ZnNfZGlyID0gW3Nka19vdXRwdXQsIG9zLnBhdGguam9pbihzZGtfb3V0cHV0LCB0YXJnZXRfcGF0aCldW3RhcmdldCBpcyBUcnVlXQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIGFyY2hfdmFyID0gWyJTREtfUEFDS0FHRV9BUkNIUyIsIE5vbmVdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICBvc192YXIgPSBbIlNES19PUyIsIE5vbmVdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICByZXR1cm4gUnBtUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgYXJjaF92YXIsIG9zX3ZhcikubGlzdChmb3JtYXQpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgY29uZl9maWxlX3ZhciA9IFsiSVBLR0NPTkZfU0RLIiwgIklQS0dDT05GX1RBUkdFVCJdW3RhcmdldCBpcyBUcnVlXQorICAgICAgICByZXR1cm4gT3BrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIsIGQuZ2V0VmFyKGNvbmZfZmlsZV92YXIsIFRydWUpKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorCitkZWYgcG9wdWxhdGVfc2RrKGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICBlbnZfYmtwID0gb3MuZW52aXJvbi5jb3B5KCkKKworICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgIGlmIGltZ190eXBlID09ICJycG0iOgorICAgICAgICBScG1TZGsoZCwgbWFuaWZlc3RfZGlyKS5wb3B1bGF0ZSgpCisgICAgZWxpZiBpbWdfdHlwZSA9PSAiaXBrIjoKKyAgICAgICAgT3BrZ1NkayhkLCBtYW5pZmVzdF9kaXIpLnBvcHVsYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICBEcGtnU2RrKGQsIG1hbmlmZXN0X2RpcikucG9wdWxhdGUoKQorCisgICAgb3MuZW52aXJvbi5jbGVhcigpCisgICAgb3MuZW52aXJvbi51cGRhdGUoZW52X2JrcCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9zc3RhdGVzaWcucHkgYi9tZXRhL2xpYi9vZS9zc3RhdGVzaWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NjcxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQpAQCAtMCwwICsxLDI5MSBAQAoraW1wb3J0IGJiLnNpZ2dlbgorCitkZWYgc3N0YXRlX3J1bmRlcGZpbHRlcihzaWdnZW4sIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSk6CisgICAgIyBSZXR1cm4gVHJ1ZSBpZiB3ZSBzaG91bGQga2VlcCB0aGUgZGVwZW5kZW5jeSwgRmFsc2UgdG8gZHJvcCBpdAorICAgIGRlZiBpc05hdGl2ZSh4KToKKyAgICAgICAgcmV0dXJuIHguZW5kc3dpdGgoIi1uYXRpdmUiKQorICAgIGRlZiBpc0Nyb3NzKHgpOgorICAgICAgICByZXR1cm4gIi1jcm9zcy0iIGluIHgKKyAgICBkZWYgaXNOYXRpdmVTREsoeCk6CisgICAgICAgIHJldHVybiB4LnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKQorICAgIGRlZiBpc0tlcm5lbChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuIGluaGVyaXRzLmZpbmQoIi9tb2R1bGUtYmFzZS5iYmNsYXNzIikgIT0gLTEgb3IgaW5oZXJpdHMuZmluZCgiL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MiKSAhPSAtMQorICAgIGRlZiBpc1BhY2thZ2VHcm91cChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuICIvcGFja2FnZWdyb3VwLmJiY2xhc3MiIGluIGluaGVyaXRzCisgICAgZGVmIGlzQWxsQXJjaChmbik6CisgICAgICAgIGluaGVyaXRzID0gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKyAgICAgICAgcmV0dXJuICIvYWxsYXJjaC5iYmNsYXNzIiBpbiBpbmhlcml0cworICAgIGRlZiBpc0ltYWdlKGZuKToKKyAgICAgICAgcmV0dXJuICIvaW1hZ2UuYmJjbGFzcyIgaW4gIiAiLmpvaW4oZGF0YUNhY2hlLmluaGVyaXRzW2ZuXSkKKworICAgICMgQWx3YXlzIGluY2x1ZGUgb3VyIG93biBpbnRlci10YXNrIGRlcGVuZGVuY2llcworICAgIGlmIHJlY2lwZW5hbWUgPT0gZGVwbmFtZToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgUXVpbHQgKHBhdGNoIGFwcGxpY2F0aW9uKSBjaGFuZ2luZyBpc24ndCBsaWtlbHkgdG8gYWZmZWN0IGFueXRoaW5nCisgICAgZXhjbHVkZWxpc3QgPSBbJ3F1aWx0LW5hdGl2ZScsICdzdWJ2ZXJzaW9uLW5hdGl2ZScsICdnaXQtbmF0aXZlJ10KKyAgICBpZiBkZXBuYW1lIGluIGV4Y2x1ZGVsaXN0IGFuZCByZWNpcGVuYW1lICE9IGRlcG5hbWU6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBFeGNsdWRlIHdlbGwgZGVmaW5lZCByZWNpcGUtPmRlcGVuZGVuY3kKKyAgICBpZiAiJXMtPiVzIiAlIChyZWNpcGVuYW1lLCBkZXBuYW1lKSBpbiBzaWdnZW4uc2FmZXJlY2lwZWRlcHM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBEb24ndCBjaGFuZ2UgbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayByZWNpcGUgZGVwZW5kZW5jaWVzIGFueSBmdXJ0aGVyCisgICAgaWYgaXNOYXRpdmUocmVjaXBlbmFtZSkgb3IgaXNDcm9zcyhyZWNpcGVuYW1lKSBvciBpc05hdGl2ZVNESyhyZWNpcGVuYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgT25seSB0YXJnZXQgcGFja2FnZXMgYmV5b25kIGhlcmUKKworICAgICMgYWxsYXJjaCBwYWNrYWdlZ3JvdXBzIGFyZSBhc3N1bWVkIHRvIGhhdmUgd2VsbCBiZWhhdmVkIG5hbWVzIHdoaWNoIGRvbid0IGNoYW5nZSBiZXR3ZWVuIGFyY2hpdGVjdXJlcy90dW5lcworICAgIGlmIGlzUGFja2FnZUdyb3VwKGZuKSBhbmQgaXNBbGxBcmNoKGZuKToKKyAgICAgICAgcmV0dXJuIEZhbHNlICAKKworICAgICMgRXhjbHVkZSB3ZWxsIGRlZmluZWQgbWFjaGluZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aGljaCBkb24ndCBjaGFuZ2UgQUJJCisgICAgaWYgZGVwbmFtZSBpbiBzaWdnZW4uYWJpc2FmZXJlY2lwZXMgYW5kIG5vdCBpc0ltYWdlKGZuKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEtlcm5lbCBtb2R1bGVzIGFyZSB3ZWxsIG5hbWVzcGFjZWQuIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBrZXJuZWwncyBjaGVja3N1bQorICAgICMgaWYgd2UncmUganVzdCBkb2luZyBhbiBSUkVDT01NRU5EU194eHggPSAia2VybmVsLW1vZHVsZS0qIiwgbm90IGxlYXN0IGJlY2F1c2UgdGhlIGNoZWNrc3VtCisgICAgIyBpcyBtYWNoaW5lIHNwZWNpZmljLgorICAgICMgVGhlcmVmb3JlIGlmIHdlJ3JlIG5vdCBhIGtlcm5lbCBvciBhIG1vZHVsZSByZWNpcGUgKGluaGVyaXRpbmcgdGhlIGtlcm5lbCBjbGFzc2VzKQorICAgICMgYW5kIHdlIHJlY2NvbWVuZCBhIGtlcm5lbC1tb2R1bGUsIHdlIGV4Y2x1ZGUgdGhlIGRlcGVuZGVuY3kuCisgICAgZGVwZm4gPSBkZXAucnNwbGl0KCIuIiwgMSlbMF0KKyAgICBpZiBkYXRhQ2FjaGUgYW5kIGlzS2VybmVsKGRlcGZuKSBhbmQgbm90IGlzS2VybmVsKGZuKToKKyAgICAgICAgZm9yIHBrZyBpbiBkYXRhQ2FjaGUucnVucmVjc1tmbl06CisgICAgICAgICAgICBpZiAiICIuam9pbihkYXRhQ2FjaGUucnVucmVjc1tmbl1bcGtnXSkuZmluZCgia2VybmVsLW1vZHVsZS0iKSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgRGVmYXVsdCB0byBrZWVwIGRlcGVuZGVuY2llcworICAgIHJldHVybiBUcnVlCisKK2RlZiBzc3RhdGVfbG9ja2Vkc2lncyhkKToKKyAgICBzaWdzID0ge30KKyAgICB0eXBlcyA9IChkLmdldFZhcigiU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICBsb2NrZWRzaWdzID0gKGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU18lcyIgJSB0LCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBmb3IgbHMgaW4gbG9ja2Vkc2lnczoKKyAgICAgICAgICAgIHBuLCB0YXNrLCBoID0gbHMuc3BsaXQoIjoiLCAyKQorICAgICAgICAgICAgaWYgcG4gbm90IGluIHNpZ3M6CisgICAgICAgICAgICAgICAgc2lnc1twbl0gPSB7fQorICAgICAgICAgICAgc2lnc1twbl1bdGFza10gPSBoCisgICAgcmV0dXJuIHNpZ3MKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpYyhiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWMpOgorICAgIG5hbWUgPSAiT0VCYXNpYyIKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hYmlzYWZlcmVjaXBlcyA9IChkYXRhLmdldFZhcigiU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLnNhZmVyZWNpcGVkZXBzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgcGFzcworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSkKKworY2xhc3MgU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2goYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCk6CisgICAgbmFtZSA9ICJPRUJhc2ljSGFzaCIKKyAgICBkZWYgaW5pdF9ydW5kZXBjaGVjayhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hYmlzYWZlcmVjaXBlcyA9IChkYXRhLmdldFZhcigiU0lHR0VOX0VYQ0xVREVSRUNJUEVTX0FCSVNBRkUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLnNhZmVyZWNpcGVkZXBzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgc2VsZi5sb2NrZWRzaWdzID0gc3N0YXRlX2xvY2tlZHNpZ3MoZGF0YSkKKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZXMgPSB7fQorICAgICAgICBzZWxmLmxvY2tlZHBubWFwID0ge30KKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZm4gPSB7fQorICAgICAgICBzZWxmLm1hY2hpbmUgPSBkYXRhLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncyA9IFtdCisgICAgICAgIHBhc3MKKyAgICBkZWYgcnVuZGVwX2NoZWNrKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc3N0YXRlX3J1bmRlcGZpbHRlcihzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUpCisKKyAgICBkZWYgZ2V0X3Rhc2tkYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZ2V0X3Rhc2tkYXRhKCkKKyAgICAgICAgcmV0dXJuIChkYXRhLCBzZWxmLmxvY2tlZHBubWFwLCBzZWxmLmxvY2tlZGhhc2hmbikKKworICAgIGRlZiBzZXRfdGFza2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGNvcmVkYXRhLCBzZWxmLmxvY2tlZHBubWFwLCBzZWxmLmxvY2tlZGhhc2hmbiA9IGRhdGEKKyAgICAgICAgc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuc2V0X3Rhc2tkYXRhKGNvcmVkYXRhKQorCisgICAgZGVmIGR1bXBfc2lncyhzZWxmLCBkYXRhQ2FjaGUsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLmR1bXBfbG9ja2Vkc2lncygpCisgICAgICAgIHJldHVybiBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3MoZGF0YUNhY2hlLCBvcHRpb25zKQorCisgICAgZGVmIGdldF90YXNraGFzaChzZWxmLCBmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKToKKyAgICAgICAgaCA9IHN1cGVyKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2gsIHNlbGYpLmdldF90YXNraGFzaChmbiwgdGFzaywgZGVwcywgZGF0YUNhY2hlKQorCisgICAgICAgIHJlY2lwZW5hbWUgPSBkYXRhQ2FjaGUucGtnX2ZuW2ZuXQorICAgICAgICBzZWxmLmxvY2tlZHBubWFwW2ZuXSA9IHJlY2lwZW5hbWUKKyAgICAgICAgc2VsZi5sb2NrZWRoYXNoZm5bZm5dID0gZGF0YUNhY2hlLmhhc2hmbltmbl0KKyAgICAgICAgaWYgcmVjaXBlbmFtZSBpbiBzZWxmLmxvY2tlZHNpZ3M6CisgICAgICAgICAgICBpZiB0YXNrIGluIHNlbGYubG9ja2Vkc2lnc1tyZWNpcGVuYW1lXToKKyAgICAgICAgICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgICAgICAgICAgaF9sb2NrZWQgPSBzZWxmLmxvY2tlZHNpZ3NbcmVjaXBlbmFtZV1bdGFza10KKyAgICAgICAgICAgICAgICBzZWxmLmxvY2tlZGhhc2hlc1trXSA9IGhfbG9ja2VkCisgICAgICAgICAgICAgICAgc2VsZi50YXNraGFzaFtrXSA9IGhfbG9ja2VkCisgICAgICAgICAgICAgICAgI2JiLndhcm4oIlVzaW5nICVzICVzICVzIiAlIChyZWNpcGVuYW1lLCB0YXNrLCBoKSkKKworICAgICAgICAgICAgICAgIGlmIGggIT0gaF9sb2NrZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncy5hcHBlbmQoJ1RoZSAlczolcyBzaWcgKCVzKSBjaGFuZ2VkLCB1c2UgbG9ja2VkIHNpZyAlcyB0byBpbnN0ZWFkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmVjaXBlbmFtZSwgdGFzaywgaCwgaF9sb2NrZWQpKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGhfbG9ja2VkCisgICAgICAgICNiYi53YXJuKCIlcyAlcyAlcyIgJSAocmVjaXBlbmFtZSwgdGFzaywgaCkpCisgICAgICAgIHJldHVybiBoCisKKyAgICBkZWYgZHVtcF9zaWd0YXNrKHNlbGYsIGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpOgorICAgICAgICBrID0gZm4gKyAiLiIgKyB0YXNrCisgICAgICAgIGlmIGsgaW4gc2VsZi5sb2NrZWRoYXNoZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZHVtcF9zaWd0YXNrKGZuLCB0YXNrLCBzdGFtcGJhc2UsIHJ1bnRpbWUpCisKKyAgICBkZWYgZHVtcF9sb2NrZWRzaWdzKHNlbGYsIHNpZ2ZpbGU9Tm9uZSwgdGFza2ZpbHRlcj1Ob25lKToKKyAgICAgICAgaWYgbm90IHNpZ2ZpbGU6CisgICAgICAgICAgICBzaWdmaWxlID0gb3MuZ2V0Y3dkKCkgKyAiL2xvY2tlZC1zaWdzLmluYyIKKworICAgICAgICBiYi5wbGFpbigiV3JpdGluZyBsb2NrZWQgc2lncyB0byAlcyIgJSBzaWdmaWxlKQorICAgICAgICB0eXBlcyA9IHt9CisgICAgICAgIGZvciBrIGluIHNlbGYucnVudGFza2RlcHM6CisgICAgICAgICAgICBpZiB0YXNrZmlsdGVyOgorICAgICAgICAgICAgICAgIGlmIG5vdCBrIGluIHRhc2tmaWx0ZXI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmbiA9IGsucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgdCA9IHNlbGYubG9ja2VkaGFzaGZuW2ZuXS5zcGxpdCgiICIpWzFdLnNwbGl0KCI6IilbNV0KKyAgICAgICAgICAgIHQgPSAndC0nICsgdC5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAgaWYgdCBub3QgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgdHlwZXNbdF0gPSBbXQorICAgICAgICAgICAgdHlwZXNbdF0uYXBwZW5kKGspCisKKyAgICAgICAgd2l0aCBvcGVuKHNpZ2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NJR0dFTl9MT0NLRURTSUdTXyVzID0gIlxcXG4nICUgdCkKKyAgICAgICAgICAgICAgICB0eXBlc1t0XS5zb3J0KCkKKyAgICAgICAgICAgICAgICBzb3J0ZWRrID0gc29ydGVkKHR5cGVzW3RdLCBrZXk9bGFtYmRhIGs6IHNlbGYubG9ja2VkcG5tYXBbay5yc3BsaXQoIi4iLDEpWzBdXSkKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBzb3J0ZWRrOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGsucnNwbGl0KCIuIiwxKVswXQorICAgICAgICAgICAgICAgICAgICB0YXNrID0gay5yc3BsaXQoIi4iLDEpWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIHNlbGYudGFza2hhc2g6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIgICAgIiArIHNlbGYubG9ja2VkcG5tYXBbZm5dICsgIjoiICsgdGFzayArICI6IiArIHNlbGYudGFza2hhc2hba10gKyAiIFxcXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfVFlQRVNfJXMgPSAiJXMiJyAlIChzZWxmLm1hY2hpbmUsICIgIi5qb2luKHR5cGVzLmtleXMoKSkpKQorCisgICAgZGVmIGNoZWNraGFzaGVzKHNlbGYsIG1pc3NlZCwgcmV0LCBzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKToKKyAgICAgICAgY2hlY2tsZXZlbCA9IGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCIsIFRydWUpCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgorICAgICAgICAgICAgaWYgdGFzayBub3QgaW4gcmV0OgorICAgICAgICAgICAgICAgIGZvciBwbiBpbiBzZWxmLmxvY2tlZHNpZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIHNxX2hhc2hbdGFza10gaW4gc2VsZi5sb2NrZWRzaWdzW3BuXS5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pc21hdGNoX21zZ3MuYXBwZW5kKCJMb2NrZWQgc2lnIGlzIHNldCBmb3IgJXM6JXMgKCVzKSB5ZXQgbm90IGluIHNzdGF0ZSBjYWNoZT8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBuLCBzcV90YXNrW3Rhc2tdLCBzcV9oYXNoW3Rhc2tdKSkKKworICAgICAgICBpZiBzZWxmLm1pc21hdGNoX21zZ3MgYW5kIGNoZWNrbGV2ZWwgPT0gJ3dhcm4nOgorICAgICAgICAgICAgYmIud2FybigiXG4iLmpvaW4oc2VsZi5taXNtYXRjaF9tc2dzKSkKKyAgICAgICAgZWxpZiBzZWxmLm1pc21hdGNoX21zZ3MgYW5kIGNoZWNrbGV2ZWwgPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJcbiIuam9pbihzZWxmLm1pc21hdGNoX21zZ3MpKQorCisKKyMgSW5zZXJ0IHRoZXNlIGNsYXNzZXMgaW50byBzaWdnZW4ncyBuYW1lc3BhY2Ugc28gaXQgY2FuIHNlZSBhbmQgc2VsZWN0IHRoZW0KK2JiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljID0gU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpYworYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvck9FQmFzaWNIYXNoID0gU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2gKKworCitkZWYgZmluZF9zaWdpbmZvKHBuLCB0YXNrbmFtZSwgdGFza2hhc2hsaXN0LCBkKToKKyAgICAiIiIgRmluZCBzaWduYXR1cmUgZGF0YSBmaWxlcyBmb3IgY29tcGFyaXNvbiBwdXJwb3NlcyAiIiIKKworICAgIGltcG9ydCBmbm1hdGNoCisgICAgaW1wb3J0IGdsb2IKKworICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgaGFzaGZpbGVzID0ge30KKworICAgIGlmIG5vdCB0YXNrbmFtZToKKyAgICAgICAgIyBXZSBoYXZlIHRvIGRlcml2ZSBwbiBhbmQgdGFza25hbWUKKyAgICAgICAga2V5ID0gcG4KKyAgICAgICAgc3BsaXRpdCA9IGtleS5zcGxpdCgnLmJiLicpCisgICAgICAgIHRhc2tuYW1lID0gc3BsaXRpdFsxXQorICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUoc3BsaXRpdFswXSkuc3BsaXQoJ18nKVswXQorICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndmlydHVhbDpuYXRpdmU6Jyk6CisgICAgICAgICAgICBwbiA9IHBuICsgJy1uYXRpdmUnCisKKyAgICBmaWxlZGF0ZXMgPSB7fQorCisgICAgIyBGaXJzdCBzZWFyY2ggaW4gc3RhbXBzIGRpcgorICAgIGxvY2FsZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgbG9jYWxkYXRhLnNldFZhcignTVVMVElNQUNIX1RBUkdFVF9TWVMnLCAnKicpCisgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCBwbikKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQVicsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUicsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdFWFRFTkRQRScsICcnKQorICAgIHN0YW1wID0gbG9jYWxkYXRhLmdldFZhcignU1RBTVAnLCBUcnVlKQorICAgIGZpbGVzcGVjID0gJyVzLiVzLnNpZ2RhdGEuKicgJSAoc3RhbXAsIHRhc2tuYW1lKQorICAgIGZvdW5kYWxsID0gRmFsc2UKKyAgICBpbXBvcnQgZ2xvYgorICAgIGZvciBmdWxscGF0aCBpbiBnbG9iLmdsb2IoZmlsZXNwZWMpOgorICAgICAgICBtYXRjaCA9IEZhbHNlCisgICAgICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgIGZvciB0YXNraGFzaCBpbiB0YXNraGFzaGxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZnVsbHBhdGguZW5kc3dpdGgoJy4lcycgJSB0YXNraGFzaCk6CisgICAgICAgICAgICAgICAgICAgIGhhc2hmaWxlc1t0YXNraGFzaF0gPSBmdWxscGF0aAorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaGFzaGZpbGVzKSA9PSBsZW4odGFza2hhc2hsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kYWxsID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaWxlZGF0ZXNbZnVsbHBhdGhdID0gb3Muc3RhdChmdWxscGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiBub3QgdGFza2hhc2hsaXN0IG9yIChsZW4oZmlsZWRhdGVzKSA8IDIgYW5kIG5vdCBmb3VuZGFsbCk6CisgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgbG9vayBpbiBzc3RhdGUtY2FjaGUKKyAgICAgICAgaGFzaGVzID0gdGFza2hhc2hsaXN0IG9yIFsnKiddCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBmb3IgaGFzaHZhbCBpbiBoYXNoZXM6CisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdUQVJHRVRfVkVORE9SJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignVEFSR0VUX09TJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUE4nLCBwbikKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BWJywgJyonKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFInLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCQl9UQVNLSEFTSCcsIGhhc2h2YWwpCisgICAgICAgICAgICBzd3NwZWMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfU1dTUEVDJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhc2tuYW1lIGluIFsnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJywgJ2RvX3BhdGNoJywgJ2RvX3BvcHVsYXRlX2xpYycsICdkb19wcmVjb25maWd1cmUnXSBhbmQgc3dzcGVjOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NTVEFURV9QS0dTUEVDJywgJyR7U1NUQVRFX1NXU1BFQ30nKQorICAgICAgICAgICAgZWxpZiBwbi5lbmRzd2l0aCgnLW5hdGl2ZScpIG9yICItY3Jvc3MtIiBpbiBwbiBvciAiLWNyb3Nzc2RrLSIgaW4gcG46CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1NUQVRFX0VYVFJBUEFUSCcsICIke05BVElWRUxTQlNUUklOR30vIikKKyAgICAgICAgICAgIHNzdGF0ZW5hbWUgPSB0YXNrbmFtZVszOl0KKyAgICAgICAgICAgIGZpbGVzcGVjID0gJyVzXyVzLiouc2lnaW5mbycgJSAobG9jYWxkYXRhLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpLCBzc3RhdGVuYW1lKQorCisgICAgICAgICAgICBpZiBoYXNodmFsICE9ICcqJzoKKyAgICAgICAgICAgICAgICBzc3RhdGVkaXIgPSAiJXMvJXMiICUgKGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSksIGhhc2h2YWxbOjJdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzc3RhdGVkaXIgPSBkLmdldFZhcignU1NUQVRFX0RJUicsIFRydWUpCisKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNzdGF0ZWRpcik6CisgICAgICAgICAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZ1bGxwYXRoLCBmaWxlc3BlYyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YXNraGFzaGxpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGZpbGVzW2hhc2h2YWxdID0gZnVsbHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlZGF0ZXNbZnVsbHBhdGhdID0gb3Muc3RhdChmdWxscGF0aCkuc3RfbXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBpZiB0YXNraGFzaGxpc3Q6CisgICAgICAgIHJldHVybiBoYXNoZmlsZXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZmlsZWRhdGVzCisKK2JiLnNpZ2dlbi5maW5kX3NpZ2luZm8gPSBmaW5kX3NpZ2luZm8KKworCitkZWYgc3N0YXRlX2dldF9tYW5pZmVzdF9maWxlbmFtZSh0YXNrLCBkKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHNzdGF0ZSBtYW5pZmVzdCBmaWxlIHBhdGggZm9yIGEgcGFydGljdWxhciB0YXNrLgorICAgIEFsc28gcmV0dXJucyB0aGUgZGF0YXN0b3JlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcXVlcnkgcmVsYXRlZCB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgZDIgPSBkLmNyZWF0ZUNvcHkoKQorICAgIGV4dHJhaW5mID0gZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3N0YW1wLWV4dHJhLWluZm8nLCBUcnVlKQorICAgIGlmIGV4dHJhaW5mOgorICAgICAgICBkMi5zZXRWYXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCisgICAgcmV0dXJuIChkMi5leHBhbmQoIiR7U1NUQVRFX01BTkZJTEVQUkVGSVh9LiVzIiAlIHRhc2spLCBkMikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3Rlcm1pbmFsLnB5IGIvbWV0YS9saWIvb2UvdGVybWluYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhODkxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlcm1pbmFsLnB5CkBAIC0wLDAgKzEsMjYzIEBACitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9lLmNsYXNzdXRpbHMKK2ltcG9ydCBzaGxleAorZnJvbSBiYi5wcm9jZXNzIGltcG9ydCBQb3BlbiwgRXhlY3V0aW9uRXJyb3IKK2Zyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IExvb3NlVmVyc2lvbgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5PRS5UZXJtaW5hbCcpCisKKworY2xhc3MgVW5zdXBwb3J0ZWRUZXJtaW5hbChFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgTm9TdXBwb3J0ZWRUZXJtaW5hbHMoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgUmVnaXN0cnkob2UuY2xhc3N1dGlscy5DbGFzc1JlZ2lzdHJ5KToKKyAgICBjb21tYW5kID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgc3VwZXIoUmVnaXN0cnksIGNscykuX19pbml0X18obmFtZS5sb3dlcigpLCBiYXNlcywgYXR0cnMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaW1wbGVtZW50ZWQoY2xzKToKKyAgICAgICAgcmV0dXJuIGJvb2woY2xzLmNvbW1hbmQpCisKKworY2xhc3MgVGVybWluYWwoUG9wZW4pOgorICAgIF9fbWV0YWNsYXNzX18gPSBSZWdpc3RyeQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGZtdF9zaF9jbWQgPSBzZWxmLmZvcm1hdF9jb21tYW5kKHNoX2NtZCwgdGl0bGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFBvcGVuLl9faW5pdF9fKHNlbGYsIGZtdF9zaF9jbWQsIGVudj1lbnYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKHNlbGYubmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBmb3JtYXRfY29tbWFuZChzZWxmLCBzaF9jbWQsIHRpdGxlKToKKyAgICAgICAgZm10ID0geyd0aXRsZSc6IHRpdGxlIG9yICdUZXJtaW5hbCcsICdjb21tYW5kJzogc2hfY21kfQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY29tbWFuZCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gc2hsZXguc3BsaXQoc2VsZi5jb21tYW5kLmZvcm1hdCgqKmZtdCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW2VsZW1lbnQuZm9ybWF0KCoqZm10KSBmb3IgZWxlbWVudCBpbiBzZWxmLmNvbW1hbmRdCisKK2NsYXNzIFhUZXJtaW5hbChUZXJtaW5hbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKyAgICAgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKHNlbGYubmFtZSkKKworY2xhc3MgR25vbWUoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ2dub21lLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAtLWRpc2FibGUtZmFjdG9yeSAteCB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgIyBSZWNlbnQgdmVyc2lvbnMgb2YgZ25vbWUtdGVybWluYWwgZG9lcyBub3Qgc3VwcG9ydCBub24tVVRGOCBjaGFyc2V0OgorICAgICAgICAjIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzIxMjc7IGFzIGEgd29ya2Fyb3VuZCwKKyAgICAgICAgIyBjbGVhcmluZyB0aGUgTENfQUxMIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGl0IHVzZXMgdGhlIGxvY2FsZS4KKyAgICAgICAgIyBPbmNlIGZpeGVkIG9uIHRoZSBnbm9tZS10ZXJtaW5hbCBwcm9qZWN0LCB0aGlzIHNob3VsZCBiZSByZW1vdmVkLgorICAgICAgICBpZiBvcy5nZXRlbnYoJ0xDX0FMTCcpOiBvcy5wdXRlbnYoJ0xDX0FMTCcsJycpCisKKyAgICAgICAgIyBDaGVjayB2ZXJzaW9uCisgICAgICAgIHZlcm51bSA9IGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24oImdub21lLXRlcm1pbmFsIikKKyAgICAgICAgaWYgdmVybnVtIGFuZCBMb29zZVZlcnNpb24odmVybnVtKSA+PSAnMy4xMCc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ0dub21lLVRlcm1pbmFsIDMuMTAgb3IgbGF0ZXIgZG9lcyBub3Qgc3VwcG9ydCAtLWRpc2FibGUtZmFjdG9yeScpCisgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC14IHtjb21tYW5kfScKKyAgICAgICAgWFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgTWF0ZShYVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnbWF0ZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMgorCitjbGFzcyBYZmNlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd4ZmNlNC10ZXJtaW5hbCAtVCAie3RpdGxlfSIgLWUgIntjb21tYW5kfSInCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIFRlcm1pbm9sb2d5KFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd0ZXJtaW5vbG9neSAtVD0ie3RpdGxlfSIgLWUge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMgorCitjbGFzcyBLb25zb2xlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdrb25zb2xlIC0tbm9mb3JrIC1wIHRhYnRpdGxlPSJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgIyBDaGVjayB2ZXJzaW9uCisgICAgICAgIHZlcm51bSA9IGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24oImtvbnNvbGUiKQorICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pIDwgJzIuMC4wJzoKKyAgICAgICAgICAgICMgS29uc29sZSBmcm9tIEtERSAzLngKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdrb25zb2xlIC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgICAgIFhUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisKK2NsYXNzIFhUZXJtKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICd4dGVybSAtVCAie3RpdGxlfSIgLWUge2NvbW1hbmR9JworICAgIHByaW9yaXR5ID0gMQorCitjbGFzcyBSeHZ0KFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdyeHZ0IC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAxCisKK2NsYXNzIFNjcmVlbihUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdzY3JlZW4gLUQgLW0gLXQgInt0aXRsZX0iIC1TIGRldnNoZWxsIHtjb21tYW5kfScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBzX2lkID0gImRldnNoZWxsXyVpIiAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlbGYuY29tbWFuZCA9ICJzY3JlZW4gLUQgLW0gLXQgXCJ7dGl0bGV9XCIgLVMgJXMge2NvbW1hbmR9IiAlIHNfaWQKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICBtc2cgPSAnU2NyZWVuIHN0YXJ0ZWQuIFBsZWFzZSBjb25uZWN0IGluIGFub3RoZXIgdGVybWluYWwgd2l0aCAnIFwKKyAgICAgICAgICAgICcic2NyZWVuIC1yICVzIicgJSBzX2lkCisgICAgICAgIGlmIChkKToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTG9nRXhlY1RUWShtc2csICJzY3JlZW4gLXIgJXMiICUgc19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUsIDEwKSwgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKG1zZykKKworY2xhc3MgVG11eFJ1bm5pbmcoVGVybWluYWwpOgorICAgICIiIk9wZW4gYSBuZXcgcGFuZSBpbiB0aGUgY3VycmVudCBydW5uaW5nIHRtdXggd2luZG93IiIiCisgICAgbmFtZSA9ICd0bXV4LXJ1bm5pbmcnCisgICAgY29tbWFuZCA9ICd0bXV4IHNwbGl0LXdpbmRvdyAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIuNzUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IGlzIG5vdCBpbnN0YWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoJ1RNVVgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IHJ1bm5pbmcnKQorCisgICAgICAgIGlmIG5vdCBjaGVja190bXV4X3BhbmVfc2l6ZSgndG11eCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBwYW5lIHRvbyBzbWFsbCcpCisKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBUbXV4TmV3V2luZG93KFRlcm1pbmFsKToKKyAgICAiIiJPcGVuIGEgbmV3IHdpbmRvdyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHRtdXggc2Vzc2lvbiIiIgorICAgIG5hbWUgPSAndG11eC1uZXctd2luZG93JworICAgIGNvbW1hbmQgPSAndG11eCBuZXctd2luZG93IC1uICJ7dGl0bGV9IiAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIuNzAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBpZiBub3QgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IGlzIG5vdCBpbnN0YWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBvcy5nZXRlbnYoJ1RNVVgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IHJ1bm5pbmcnKQorCisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgVG11eChUZXJtaW5hbCk6CisgICAgIiIiU3RhcnQgYSBuZXcgdG11eCBzZXNzaW9uIGFuZCB3aW5kb3ciIiIKKyAgICBjb21tYW5kID0gJ3RtdXggbmV3IC1kIC1zIGRldnNoZWxsIC1uIGRldnNoZWxsICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMC43NQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgIyBUT0RPOiBjb25zaWRlciB1c2luZyBhICdkZXZzaGVsbCcgc2Vzc2lvbiBzaGFyZWQgYW1vbmdzdCBhbGwKKyAgICAgICAgIyBkZXZzaGVsbHMsIGlmIGl0J3MgYWxyZWFkeSB0aGVyZSwgYWRkIGEgbmV3IHdpbmRvdyB0byBpdC4KKyAgICAgICAgd2luZG93X25hbWUgPSAnZGV2c2hlbGwtJWknICUgb3MuZ2V0cGlkKCkKKworICAgICAgICBzZWxmLmNvbW1hbmQgPSAndG11eCBuZXcgLWQgLXMgezB9IC1uIHswfSAie3tjb21tYW5kfX0iJy5mb3JtYXQod2luZG93X25hbWUpCisgICAgICAgIFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworICAgICAgICBhdHRhY2hfY21kID0gJ3RtdXggYXR0IC10IHswfScuZm9ybWF0KHdpbmRvd19uYW1lKQorICAgICAgICBtc2cgPSAnVG11eCBzdGFydGVkLiBQbGVhc2UgY29ubmVjdCBpbiBhbm90aGVyIHRlcm1pbmFsIHdpdGggYHRtdXggYXR0IC10IHswfWAnLmZvcm1hdCh3aW5kb3dfbmFtZSkKKyAgICAgICAgaWYgZDoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTG9nRXhlY1RUWShtc2csIGF0dGFjaF9jbWQsIDAuNSwgMTApLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorCitjbGFzcyBDdXN0b20oVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnZmFsc2UnICMgVGhpcyBpcyBhIHBsYWNlaG9sZGVyCisgICAgcHJpb3JpdHkgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgc2VsZi5jb21tYW5kID0gZCBhbmQgZC5nZXRWYXIoJ09FX1RFUk1JTkFMX0NVU1RPTUNNRCcsIFRydWUpCisgICAgICAgIGlmIHNlbGYuY29tbWFuZDoKKyAgICAgICAgICAgIGlmIG5vdCAne2NvbW1hbmR9JyBpbiBzZWxmLmNvbW1hbmQ6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kICs9ICcge2NvbW1hbmR9JworICAgICAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0N1c3RvbSB0ZXJtaW5hbCB3YXMgc3RhcnRlZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKDEsICdObyBjdXN0b20gdGVybWluYWwgKE9FX1RFUk1JTkFMX0NVU1RPTUNNRCkgc2V0JykKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ09FX1RFUk1JTkFMX0NVU1RPTUNNRCBub3Qgc2V0JykKKworCitkZWYgcHJpb3JpdGl6ZWQoKToKKyAgICByZXR1cm4gUmVnaXN0cnkucHJpb3JpdGl6ZWQoKQorCitkZWYgc3Bhd25fcHJlZmVycmVkKHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgIiIiU3Bhd24gdGhlIGZpcnN0IHN1cHBvcnRlZCB0ZXJtaW5hbCwgYnkgcHJpb3JpdHkiIiIKKyAgICBmb3IgdGVybWluYWwgaW4gcHJpb3JpdGl6ZWQoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Bhd24odGVybWluYWwubmFtZSwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhjZXB0IFVuc3VwcG9ydGVkVGVybWluYWw6CisgICAgICAgICAgICBjb250aW51ZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIE5vU3VwcG9ydGVkVGVybWluYWxzKCkKKworZGVmIHNwYXduKG5hbWUsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgIiIiU3Bhd24gdGhlIHNwZWNpZmllZCB0ZXJtaW5hbCwgYnkgbmFtZSIiIgorICAgIGxvZ2dlci5kZWJ1ZygxLCAnQXR0ZW1wdGluZyB0byBzcGF3biB0ZXJtaW5hbCAiJXMiJywgbmFtZSkKKyAgICB0cnk6CisgICAgICAgIHRlcm1pbmFsID0gUmVnaXN0cnkucmVnaXN0cnlbbmFtZV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwobmFtZSkKKworICAgIHBpcGUgPSB0ZXJtaW5hbChzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgb3V0cHV0ID0gcGlwZS5jb21tdW5pY2F0ZSgpWzBdCisgICAgaWYgcGlwZS5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJhaXNlIEV4ZWN1dGlvbkVycm9yKHNoX2NtZCwgcGlwZS5yZXR1cm5jb2RlLCBvdXRwdXQpCisKK2RlZiBjaGVja190bXV4X3BhbmVfc2l6ZSh0bXV4KToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICB0cnk6CisgICAgICAgIHAgPSBzdWIuUG9wZW4oJyVzIGxpc3QtcGFuZXMgLUYgIiN7P3BhbmVfYWN0aXZlLCN7cGFuZV9oZWlnaHR9LH0iJyAlIHRtdXgsCisgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzaXplID0gaW50KG91dC5zdHJpcCgpKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICBpZiBzaXplLzIgPj0gMTk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBjaGVja190ZXJtaW5hbF92ZXJzaW9uKHRlcm1pbmFsTmFtZSk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisgICAgdHJ5OgorICAgICAgICBwID0gc3ViLlBvcGVuKFsnc2gnLCAnLWMnLCAnJXMgLS12ZXJzaW9uJyAlIHRlcm1pbmFsTmFtZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgdmVyX2luZm8gPSBvdXQucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgdmVybnVtID0gTm9uZQorICAgIGZvciB2ZXIgaW4gdmVyX2luZm86CisgICAgICAgIGlmIHZlci5zdGFydHN3aXRoKCdLb25zb2xlJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KKyAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ0dOT01FIFRlcm1pbmFsJyk6CisgICAgICAgICAgICB2ZXJudW0gPSB2ZXIuc3BsaXQoJyAnKVstMV0KKyAgICByZXR1cm4gdmVybnVtCisKK2RlZiBkaXN0cm9fbmFtZSgpOgorICAgIHRyeToKKyAgICAgICAgcCA9IFBvcGVuKFsnbHNiX3JlbGVhc2UnLCAnLWknXSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZGlzdHJvID0gb3V0LnNwbGl0KCc6JylbMV0uc3RyaXAoKS5sb3dlcigpCisgICAgZXhjZXB0OgorICAgICAgICBkaXN0cm8gPSAidW5rbm93biIKKyAgICByZXR1cm4gZGlzdHJvCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy9fX2luaXRfXy5weSBiL21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90ZXN0cy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9saWNlbnNlLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9saWNlbnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODg4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkKQEAgLTAsMCArMSw2OCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb2UubGljZW5zZQorCitjbGFzcyBTZWVuVmlzaXRvcihvZS5saWNlbnNlLkxpY2Vuc2VWaXNpdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc2VlbiA9IFtdCisgICAgICAgIG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuc2Vlbi5hcHBlbmQobm9kZS5zKQorCitjbGFzcyBUZXN0U2luZ2xlTGljZW5zZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbGljZW5zZXMgPSBbCisgICAgICAgICJHUEx2MiIsCisgICAgICAgICJMR1BMLTIuMCIsCisgICAgICAgICJBcnRpc3RpYyIsCisgICAgICAgICJNSVQiLAorICAgICAgICAiR1BMdjMrIiwKKyAgICAgICAgIkZPT19CQVIiLAorICAgIF0KKyAgICBpbnZhbGlkX2xpY2Vuc2VzID0gWyJHUEwvQlNEIl0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcGFyc2UobGljZW5zZXN0cik6CisgICAgICAgIHZpc2l0b3IgPSBTZWVuVmlzaXRvcigpCisgICAgICAgIHZpc2l0b3IudmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgICAgIHJldHVybiB2aXNpdG9yLnNlZW4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5saWNlbnNlczoKKyAgICAgICAgICAgIGxpY2Vuc2VzID0gc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwobGljZW5zZXMsIFtsaWNlbnNlXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbGljZW5zZXMoc2VsZik6CisgICAgICAgIGZvciBsaWNlbnNlIGluIHNlbGYuaW52YWxpZF9saWNlbnNlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMob2UubGljZW5zZS5JbnZhbGlkTGljZW5zZSkgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShsaWNlbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubGljZW5zZSwgbGljZW5zZSkKKworY2xhc3MgVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08mQkFSIjogWyJGT08iLCAiQkFSIl0sCisgICAgICAgICJCQVogJiBNT08iOiBbIkJBWiIsICJNT08iXSwKKyAgICAgICAgIkFMUEhBfEJFVEEiOiBbIkFMUEhBIl0sCisgICAgICAgICJCQVomTU9PfEZPTyI6IFsiRk9PIl0sCisgICAgICAgICJGT08mQkFSfEJBWiI6IFsiRk9PIiwgIkJBUiJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkFMUEhBIiwgIkZPTyIsICJCQVIiXQorCisgICAgZGVmIHRlc3RfdGVzdHMoc2VsZik6CisgICAgICAgIGRlZiBjaG9vc2UoYSwgYik6CisgICAgICAgICAgICBpZiBhbGwobGljIGluIHNlbGYucHJlZmVycmVkIGZvciBsaWMgaW4gYik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBmb3IgbGljZW5zZSwgZXhwZWN0ZWQgaW4gc2VsZi50ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgbGljZW5zZXMgPSBvZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgZXhwZWN0ZWQpCisKK2NsYXNzIFRlc3RDb21wbGV4Q29tYmluYXRpb25zKFRlc3RTaW1wbGVDb21iaW5hdGlvbnMpOgorICAgIHRlc3RzID0geworICAgICAgICAiRk9PICYgKEJBUiB8IEJBWikmTU9PIjogWyJGT08iLCAiQkFSIiwgIk1PTyJdLAorICAgICAgICAiKEFMUEhBfChCRVRBJlRIRVRBKXxPTUVHQSkmREVMVEEiOiBbIk9NRUdBIiwgIkRFTFRBIl0sCisgICAgICAgICIoKEFMUEhBfEJFVEEpJkZPTyl8QkFaIjogWyJCRVRBIiwgIkZPTyJdLAorICAgICAgICAiKEdQTC0yLjB8UHJvcHJpZXRhcnkpJkJTRC00LWNsYXVzZSZNSVQiOiBbIkdQTC0yLjAiLCAiQlNELTQtY2xhdXNlIiwgIk1JVCJdLAorICAgIH0KKyAgICBwcmVmZXJyZWQgPSBbIkJBUiIsICJPTUVHQSIsICJCRVRBIiwgIkdQTC0yLjAiXQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9wYXRoLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF9wYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDFjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkKQEAgLTAsMCArMSw4OSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb2UsIG9lLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzaHV0aWwKKworY2xhc3MgVGVzdFJlYWxQYXRoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBESVJTID0gWyAiYSIsICJiIiwgImV0YyIsICJzYmluIiwgInVzciIsICJ1c3IvYmluIiwgInVzci9iaW5YIiwgInVzci9zYmluIiwgInVzci9pbmNsdWRlIiwgInVzci9pbmNsdWRlL2dkYm0iIF0KKyAgICBGSUxFUyA9IFsgImV0Yy9wYXNzd2QiLCAiYi9maWxlIiBdCisgICAgTElOS1MgPSBbCisgICAgICAgICggImJpbiIsICAgICAgICAgICAgICIvdXNyL2JpbiIsICAgICAgICAgICAgICIvdXNyL2JpbiIgKSwKKyAgICAgICAgKCAiYmluWCIsICAgICAgICAgICAgInVzci9iaW5YIiwgICAgICAgICAgICAgIi91c3IvYmluWCIgKSwKKyAgICAgICAgKCAiYyIsICAgICAgICAgICAgICAgImJyb2tlbiIsICAgICAgICAgICAgICAgIi9icm9rZW4iICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMSIsICAgICJwYXNzd2QiLCAgICAgICAgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0yIiwgICAgInBhc3N3ZC0xIiwgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTMiLCAgICAiL2V0Yy9wYXNzd2QtMSIsICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9zaGFkb3ctMSIsICAgICIvZXRjL3NoYWRvdyIsICAgICAgICAgICIvZXRjL3NoYWRvdyIgKSwKKyAgICAgICAgKCAiZXRjL3NoYWRvdy0yIiwgICAgIi9ldGMvc2hhZG93LTEiLCAgICAgICAgIi9ldGMvc2hhZG93IiApLAorICAgICAgICAoICJwcm9nLUEiLCAgICAgICAgICAiYmluL3Byb2ctQSIsICAgICAgICAgICAiL3Vzci9iaW4vcHJvZy1BIiApLAorICAgICAgICAoICJwcm9nLUIiLCAgICAgICAgICAiL2Jpbi9wcm9nLUIiLCAgICAgICAgICAiL3Vzci9iaW4vcHJvZy1CIiApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctQyIsICAiLi4vLi4vc2Jpbi9wcm9nLUMiLCAgICAiL3NiaW4vcHJvZy1DIiApLAorICAgICAgICAoICJ1c3IvYmluL3Byb2ctRCIsICAiL3NiaW4vcHJvZy1EIiwgICAgICAgICAiL3NiaW4vcHJvZy1EIiApLAorICAgICAgICAoICJ1c3IvYmluWC9wcm9nLUUiLCAiLi4vc2Jpbi9wcm9nLUUiLCAgICAgICBOb25lICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1GIiwgICIuLi8uLi8uLi9zYmluL3Byb2ctRiIsICIvc2Jpbi9wcm9nLUYiICksCisgICAgICAgICggImxvb3AiLCAgICAgICAgICAgICJhL2xvb3AiLCAgICAgICAgICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAiYS9sb29wIiwgICAgICAgICAgIi4uL2xvb3AiLCAgICAgICAgICAgICAgTm9uZSApLAorICAgICAgICAoICJiL3Rlc3QiLCAgICAgICAgICAiZmlsZS9mb28iLCAgICAgICAgICAgICAiL2IvZmlsZS9mb28iICksCisgICAgXQorCisgICAgTElOS1NfUEhZUyA9IFsKKyAgICAgICAgKCAiLi8iLCAgICAgICAgICAiLyIsICAgICAgICAgICAgICAgICIiICksCisgICAgICAgICggImJpblgvcHJvZy1FIiwgIi91c3Ivc2Jpbi9wcm9nLUUiLCAiL3NiaW4vcHJvZy1FIiApLAorICAgIF0KKworICAgIEVYQ0VQVElPTlMgPSBbCisgICAgICAgICggImxvb3AiLCAgIGVycm5vLkVMT09QICksCisgICAgICAgICggImIvdGVzdCIsIGVycm5vLkVOT0VOVCApLAorICAgIF0KKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjb3Muc3lzdGVtKCJ0cmVlIC1GICVzIiAlIHNlbGYudG1wZGlyKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRtcGRpcikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4ID0gIm9lLXRlc3RfcGF0aCIpCisgICAgICAgIHNlbGYucm9vdCA9IG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgIlIiKQorCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgIl9yZWFsIikpCisgICAgICAgIG9zLnN5bWxpbmsoIl9yZWFsIiwgc2VsZi5yb290KQorCisgICAgICAgIGZvciBkIGluIHNlbGYuRElSUzoKKyAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGQpKQorICAgICAgICBmb3IgZiBpbiBzZWxmLkZJTEVTOgorICAgICAgICAgICAgZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBmKSwgInciKQorICAgICAgICBmb3IgbCBpbiBzZWxmLkxJTktTOgorICAgICAgICAgICAgb3Muc3ltbGluayhsWzFdLCBvcy5wYXRoLmpvaW4oc2VsZi5yb290LCBsWzBdKSkKKworICAgIGRlZiBfX3JlYWxwYXRoKHNlbGYsIGZpbGUsIHVzZV9waHlzZGlyLCBhc3N1bWVfZGlyID0gVHJ1ZSk6CisgICAgICAgIHJldHVybiBvZS5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGZpbGUpLCBzZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9waHlzZGlyLCBhc3N1bWVfZGlyID0gYXNzdW1lX2RpcikKKworICAgIGRlZiB0ZXN0X25vcm0oc2VsZik6CisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6CisgICAgICAgICAgICBpZiBsWzJdID09IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKKyAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQorCisgICAgICAgICAgICBpZiBsWzJdICE9IEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0X3AsIHRhcmdldF9sKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsyXSwgdGFyZ2V0X3BbbGVuKHNlbGYucm9vdCk6XSkKKworICAgIGRlZiB0ZXN0X3BoeXMoc2VsZik6CisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1NfUEhZUzoKKyAgICAgICAgICAgIHRhcmdldF9wID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIFRydWUpCisgICAgICAgICAgICB0YXJnZXRfbCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBGYWxzZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzFdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfbFtsZW4oc2VsZi5yb290KTpdKQorCisgICAgZGVmIHRlc3RfbG9vcChzZWxmKToKKyAgICAgICAgZm9yIGUgaW4gc2VsZi5FWENFUFRJT05TOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoT1NFcnJvciwgcidcW0Vycm5vICV1XF0nICUgZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yZWFscGF0aCwgZVswXSwgRmFsc2UsIEZhbHNlKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF90eXBlcy5weSBiL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3Y2MzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdHlwZXMucHkKQEAgLTAsMCArMSw2MiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lLm1ha2V0eXBlIGltcG9ydCBjcmVhdGUsIGZhY3RvcnkKKworY2xhc3MgVGVzdFR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscyk6CisgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmosIGNscykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgb2JqLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFzc2VydEZhbHNlKG9iaiBpcyBvdGhlcikKKworICAgIGRlZiBhc3NlcnRGYWN0b3J5Q3JlYXRlZChzZWxmLCB2YWx1ZSwgdHlwZSwgKipmbGFncyk6CisgICAgICAgIGNscyA9IGZhY3RvcnkodHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjbHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcmVhdGUodmFsdWUsIHR5cGUsICoqZmxhZ3MpLCBjbHMpCisKK2NsYXNzIFRlc3RCb29sZWFuVHlwZShUZXN0VHlwZXMpOgorICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNyZWF0ZSwgJycsICdib29sZWFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnZm9vJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNyZWF0ZSwgb2JqZWN0KCksICdib29sZWFuJykKKworICAgIGRlZiB0ZXN0X3RydWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3knLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd5ZXMnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCcxJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndCcsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3RydWUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCdUUlVFJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1RScsICdib29sZWFuJykpCisKKyAgICBkZWYgdGVzdF9mYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ24nLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbm8nLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnMCcsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdmJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhbHNlJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ0ZBTFNFJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2ZhTHNlJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2Jvb2xfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCduJywgJ2Jvb2xlYW4nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ3knLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIEZhbHNlKQorCitjbGFzcyBUZXN0TGlzdChUZXN0VHlwZXMpOgorICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgdmFsdWUsIHZhbGlkLCBzZXA9Tm9uZSk6CisgICAgICAgIG9iaiA9IGNyZWF0ZSh2YWx1ZSwgJ2xpc3QnLCBzZXBhcmF0b3I9c2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdmFsaWQpCisgICAgICAgIGlmIHNlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnNlcGFyYXRvciwgc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihvYmopLCBvYmouc2VwYXJhdG9yLmpvaW4ob2JqKSkKKworICAgIGRlZiB0ZXN0X2xpc3Rfbm9zZXAoc2VsZik6CisgICAgICAgIHRlc3RsaXN0ID0gWydhbHBoYScsICdiZXRhJywgJ3RoZXRhJ10KKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhIGJldGEgdGhldGEnLCB0ZXN0bGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2FscGhhICBiZXRhXHR0aGV0YScsIHRlc3RsaXN0KQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEnLCBbJ2FscGhhJ10pCisKKyAgICBkZWYgdGVzdF9saXN0X3VzZXJzZXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdmb286YmFyJywgWydmb28nLCAnYmFyJ10sICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXI6YmF6JywgWydmb28nLCAnYmFyJywgJ2JheiddLCAnOicpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3V0aWxzLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDlhYzUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF91dGlscy5weQpAQCAtMCwwICsxLDUxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2UudXRpbHMgaW1wb3J0IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtCisKK2NsYXNzIFRlc3RQYWNrYWdlc0ZpbHRlck91dFN5c3RlbSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGF0IG9lLnV0aWxzLnBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtIHdvcmtzLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGJiCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNhbm5vdCBpbXBvcnQgYmIiKQorCisgICAgICAgIGQgPSBiYi5kYXRhX3NtYXJ0LkRhdGFTbWFydCgpCisgICAgICAgIGQuc2V0VmFyKCJQTiIsICJmb28iKQorCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFUyIsICJmb28gZm9vLWRvYyBmb28tZGV2IikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgW10pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kYXRhIGZvby1kZXYiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tbG9jYWxlLWVuLWdiIikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgW10pCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZGF0YSBmb28tbG9jYWxlLWVuLWdiIikKKyAgICAgICAgcGtncyA9IHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtncywgWyJmb28tZGF0YSJdKQorCisKK2NsYXNzIFRlc3RUcmltVmVyc2lvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdmVyc2lvbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbihOb25lLCAyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oKDEsIDIsIDMpLCAyKQorCisgICAgZGVmIHRlc3RfbnVtX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIC0xKQorCisgICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDEpLCAiMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDIpLCAiMS4yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMyksICIxLjIuMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJpbV92ZXJzaW9uKCIxLjIuMyIsIDQpLCAiMS4yLjMiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdHlwZXMucHkgYi9tZXRhL2xpYi9vZS90eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjQ3YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdHlwZXMucHkKQEAgLTAsMCArMSwxNTMgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IHJlCitpbXBvcnQgb3MKKworCitjbGFzcyBPRUxpc3QobGlzdCk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdsaXN0JyB0eXBlCisKKyAgICBBY3RzIGFzIGFuIG9yZGluYXJ5IGxpc3QsIGJ1dCBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEgc3RyaW5nIHZhbHVlIGFuZCBhCisgICAgc2VwYXJhdG9yIChvcHRpb25hbCksIGFuZCByZS1qb2lucyBpdHNlbGYgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgd2l0aAorICAgIHN0cigpLiAgU2V0IHRoZSB2YXJpYWJsZSB0eXBlIGZsYWcgdG8gJ2xpc3QnIHRvIHVzZSB0aGlzIHR5cGUsIGFuZCB0aGUKKyAgICAnc2VwYXJhdG9yJyBmbGFnIG1heSBiZSBzcGVjaWZpZWQgKGRlZmF1bHRpbmcgdG8gd2hpdGVzcGFjZSkuIiIiCisKKyAgICBuYW1lID0gImxpc3QiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIHNlcGFyYXRvciA9IE5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZiwgdmFsdWUuc3BsaXQoc2VwYXJhdG9yKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZikKKworICAgICAgICBpZiBzZXBhcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2VwYXJhdG9yID0gIiAiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlcGFyYXRvciA9IHNlcGFyYXRvcgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNlcGFyYXRvci5qb2luKHNlbGYpCisKK2RlZiBjaG9pY2UodmFsdWUsIGNob2ljZXMpOgorICAgICIiIk9wZW5FbWJlZGRlZCAnY2hvaWNlJyB0eXBlCisKKyAgICBBY3RzIGFzIGEgbXVsdGlwbGUgY2hvaWNlIGZvciB0aGUgdXNlci4gIFRvIHVzZSB0aGlzLCBzZXQgdGhlIHZhcmlhYmxlCisgICAgdHlwZSBmbGFnIHRvICdjaG9pY2UnLCBhbmQgc2V0IHRoZSAnY2hvaWNlcycgZmxhZyB0byBhIHNwYWNlIHNlcGFyYXRlZAorICAgIGxpc3Qgb2YgdmFsaWQgdmFsdWVzLiIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjaG9pY2UgYWNjZXB0cyBhIHN0cmluZywgbm90ICclcyciICUgdHlwZSh2YWx1ZSkpCisKKyAgICB2YWx1ZSA9IHZhbHVlLmxvd2VyKCkKKyAgICBjaG9pY2VzID0gY2hvaWNlcy5sb3dlcigpCisgICAgaWYgdmFsdWUgbm90IGluIGNob2ljZXMuc3BsaXQoKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBjaG9pY2UgJyVzJy4gIFZhbGlkIGNob2ljZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBjaG9pY2VzKSkKKyAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgTm9NYXRjaChvYmplY3QpOgorICAgICIiIlN0dWIgcHl0aG9uIHJlZ2V4IHBhdHRlcm4gb2JqZWN0IHdoaWNoIG5ldmVyIG1hdGNoZXMgYW55dGhpbmciIiIKKyAgICBkZWYgZmluZGFsbChzZWxmLCBzdHJpbmcsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGZpbmRpdGVyKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VhcmNoKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc3BsaXQoc2VsZiwgc3RyaW5nLCBtYXhzcGxpdD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWIocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZywgY291bnQ9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKK05vTWF0Y2ggPSBOb01hdGNoKCkKKworZGVmIHJlZ2V4KHZhbHVlLCByZWdleGZsYWdzPU5vbmUpOgorICAgICIiIk9wZW5FbWJlZGRlZCAncmVnZXgnIHR5cGUKKworICAgIEFjdHMgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24sIHJldHVybmluZyB0aGUgcHJlLWNvbXBpbGVkIHJlZ3VsYXIKKyAgICBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0LiAgVG8gdXNlIHRoaXMgdHlwZSwgc2V0IHRoZSB2YXJpYWJsZSB0eXBlIGZsYWcKKyAgICB0byAncmVnZXgnLCBhbmQgb3B0aW9uYWxseSwgc2V0IHRoZSAncmVnZXhmbGFncycgdHlwZSB0byBhIHNwYWNlIHNlcGFyYXRlZAorICAgIGxpc3Qgb2YgdGhlIGZsYWdzIHRvIGNvbnRyb2wgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyAoZS5nLgorICAgIEZPT1tyZWdleGZsYWdzXSArPSAnaWdub3JlY2FzZScpLiAgU2VlIHRoZSBweXRob24gZG9jdW1lbnRhdGlvbiBvbiB0aGUKKyAgICAncmUnIG1vZHVsZSBmb3IgYSBsaXN0IG9mIHZhbGlkIGZsYWdzLiIiIgorCisgICAgZmxhZ3ZhbCA9IDAKKyAgICBpZiByZWdleGZsYWdzOgorICAgICAgICBmb3IgZmxhZyBpbiByZWdleGZsYWdzLnNwbGl0KCk6CisgICAgICAgICAgICBmbGFnID0gZmxhZy51cHBlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmxhZ3ZhbCB8PSBnZXRhdHRyKHJlLCBmbGFnKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmVnZXggZmxhZyAnJXMnIiAlIGZsYWcpCisKKyAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICMgTGV0J3MgZW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGFuIHVuZGVmaW5lZCBvciBlbXB0eQorICAgICAgICAjIHZhcmlhYmxlIGlzIHRvIG1hdGNoIG5vdGhpbmcuIElmIHRoZSB1c2VyIGV4cGxpY2l0bHkgd2FudHMgdG8gbWF0Y2gKKyAgICAgICAgIyBhbnl0aGluZywgdGhleSBjYW4gbWF0Y2ggJy4qJyBpbnN0ZWFkLgorICAgICAgICByZXR1cm4gTm9NYXRjaAorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmUuY29tcGlsZSh2YWx1ZSwgZmxhZ3ZhbCkKKyAgICBleGNlcHQgcmUuZXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHJlZ2V4IHZhbHVlICclcyc6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBleGMuYXJnc1swXSkpCisKK2RlZiBib29sZWFuKHZhbHVlKToKKyAgICAiIiJPcGVuRW1iZWRkZWQgJ2Jvb2xlYW4nIHR5cGUKKworICAgIFZhbGlkIHZhbHVlcyBmb3IgdHJ1ZTogJ3llcycsICd5JywgJ3RydWUnLCAndCcsICcxJworICAgIFZhbGlkIHZhbHVlcyBmb3IgZmFsc2U6ICdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcKKyAgICAiIiIKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJib29sZWFuIGFjY2VwdHMgYSBzdHJpbmcsIG5vdCAnJXMnIiAlIHR5cGUodmFsdWUpKQorCisgICAgdmFsdWUgPSB2YWx1ZS5sb3dlcigpCisgICAgaWYgdmFsdWUgaW4gKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgdmFsdWUgaW4gKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGJvb2xlYW4gdmFsdWUgJyVzJyIgJSB2YWx1ZSkKKworZGVmIGludGVnZXIodmFsdWUsIG51bWJlcmJhc2U9MTApOgorICAgICIiIk9wZW5FbWJlZGRlZCAnaW50ZWdlcicgdHlwZQorCisgICAgRGVmYXVsdHMgdG8gYmFzZSAxMCwgYnV0IHRoaXMgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgb3B0aW9uYWwKKyAgICAnbnVtYmVyYmFzZScgZmxhZy4iIiIKKworICAgIHJldHVybiBpbnQodmFsdWUsIGludChudW1iZXJiYXNlKSkKKworX2Zsb2F0ID0gZmxvYXQKK2RlZiBmbG9hdCh2YWx1ZSwgZnJvbWhleD0nZmFsc2UnKToKKyAgICAiIiJPcGVuRW1iZWRkZWQgZmxvYXRpbmcgcG9pbnQgdHlwZQorCisgICAgVG8gdXNlIHRoaXMgdHlwZSwgc2V0IHRoZSB0eXBlIGZsYWcgdG8gJ2Zsb2F0JywgYW5kIG9wdGlvbmFsbHkgc2V0IHRoZQorICAgICdmcm9taGV4JyBmbGFnIHRvIGEgdHJ1ZSB2YWx1ZSAob2JleWluZyB0aGUgc2FtZSBydWxlcyBhcyBmb3IgdGhlCisgICAgJ2Jvb2xlYW4nIHR5cGUpIGlmIHRoZSB2YWx1ZSBpcyBpbiBiYXNlIDE2IHJhdGhlciB0aGFuIGJhc2UgMTAuIiIiCisKKyAgICBpZiBib29sZWFuKGZyb21oZXgpOgorICAgICAgICByZXR1cm4gX2Zsb2F0LmZyb21oZXgodmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF9mbG9hdCh2YWx1ZSkKKworZGVmIHBhdGgodmFsdWUsIHJlbGF0aXZldG89JycsIG5vcm1hbGl6ZT0ndHJ1ZScsIG11c3RleGlzdD0nZmFsc2UnKToKKyAgICB2YWx1ZSA9IG9zLnBhdGguam9pbihyZWxhdGl2ZXRvLCB2YWx1ZSkKKworICAgIGlmIGJvb2xlYW4obm9ybWFsaXplKToKKyAgICAgICAgdmFsdWUgPSBvcy5wYXRoLm5vcm1wYXRoKHZhbHVlKQorCisgICAgaWYgYm9vbGVhbihtdXN0ZXhpc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuKHZhbHVlLCAncicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiezB9OiB7MX0iLmZvcm1hdCh2YWx1ZSwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSkpCisKKyAgICByZXR1cm4gdmFsdWUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3V0aWxzLnB5IGIvbWV0YS9saWIvb2UvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlMDg3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3V0aWxzLnB5CkBAIC0wLDAgKzEsMjczIEBACit0cnk6CisgICAgIyBQeXRob24gMgorICAgIGltcG9ydCBjb21tYW5kcyBhcyBjbWRzdGF0dXMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIFB5dGhvbiAzCisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgY21kc3RhdHVzCisKK2RlZiByZWFkX2ZpbGUoZmlsZW5hbWUpOgorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oIGZpbGVuYW1lLCAiciIgKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHJlYXNvbjoKKyAgICAgICAgcmV0dXJuICIiICMgV0FSTklORzogY2FuJ3QgcmFpc2UgYW4gZXJyb3Igbm93IGJlY2F1c2Ugb2YgdGhlIG5ldyBSREVQRU5EUyBoYW5kbGluZy4gVGhpcyBpcyBhIGJpdCB1Z2x5LiA6TToKKyAgICBlbHNlOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByZXR1cm4gTm9uZQorCitkZWYgaWZlbHNlKGNvbmRpdGlvbiwgaWZ0cnVlID0gVHJ1ZSwgaWZmYWxzZSA9IEZhbHNlKToKKyAgICBpZiBjb25kaXRpb246CisgICAgICAgIHJldHVybiBpZnRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gaWZmYWxzZQorCitkZWYgY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgaWYgZC5nZXRWYXIodmFyaWFibGUsMSkgPT0gY2hlY2t2YWx1ZToKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBsZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIGlmIGZsb2F0KGQuZ2V0VmFyKHZhcmlhYmxlLDEpKSA8PSBmbG9hdChjaGVja3ZhbHVlKToKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiB2ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmVzdWx0ID0gYmIudXRpbHMudmVyY21wX3N0cmluZyhkLmdldFZhcih2YXJpYWJsZSxUcnVlKSwgY2hlY2t2YWx1ZSkKKyAgICBpZiByZXN1bHQgPD0gMDoKKyAgICAgICAgcmV0dXJuIHRydWV2YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmYWxzZXZhbHVlCisKK2RlZiBib3RoX2NvbnRhaW4odmFyaWFibGUxLCB2YXJpYWJsZTIsIGNoZWNrdmFsdWUsIGQpOgorICAgIHZhbDEgPSBkLmdldFZhcih2YXJpYWJsZTEsIFRydWUpCisgICAgdmFsMiA9IGQuZ2V0VmFyKHZhcmlhYmxlMiwgVHJ1ZSkKKyAgICB2YWwxID0gc2V0KHZhbDEuc3BsaXQoKSkKKyAgICB2YWwyID0gc2V0KHZhbDIuc3BsaXQoKSkKKyAgICBpZiBpc2luc3RhbmNlKGNoZWNrdmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUuc3BsaXQoKSkKKyAgICBlbHNlOgorICAgICAgICBjaGVja3ZhbHVlID0gc2V0KGNoZWNrdmFsdWUpCisgICAgaWYgY2hlY2t2YWx1ZS5pc3N1YnNldCh2YWwxKSBhbmQgY2hlY2t2YWx1ZS5pc3N1YnNldCh2YWwyKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKGNoZWNrdmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICIiCisKK2RlZiBzZXRfaW50ZXJzZWN0KHZhcmlhYmxlMSwgdmFyaWFibGUyLCBkKToKKyAgICAiIiIKKyAgICBFeHBhbmQgYm90aCB2YXJpYWJsZXMsIGludGVycHJldCB0aGVtIGFzIGxpc3RzIG9mIHN0cmluZ3MsIGFuZCByZXR1cm4gdGhlCisgICAgaW50ZXJzZWN0aW9uIGFzIGEgZmxhdHRlbmVkIHN0cmluZy4KKworICAgIEZvciBleGFtcGxlOgorICAgIHMxID0gImEgYiBjIgorICAgIHMyID0gImIgYyBkIgorICAgIHMzID0gc2V0X2ludGVyc2VjdChzMSwgczIpCisgICAgPT4gczMgPSAiYiBjIgorICAgICIiIgorICAgIHZhbDEgPSBzZXQoZC5nZXRWYXIodmFyaWFibGUxLCBUcnVlKS5zcGxpdCgpKQorICAgIHZhbDIgPSBzZXQoZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKS5zcGxpdCgpKQorICAgIHJldHVybiAiICIuam9pbih2YWwxICYgdmFsMikKKworZGVmIHBydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKToKKyAgICAjIFNlZSBpZiB2YXIgZW5kcyB3aXRoIGFueSBvZiB0aGUgc3VmZml4ZXMgbGlzdGVkIGFuZAorICAgICMgcmVtb3ZlIGl0IGlmIGZvdW5kCisgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICB2YXIgPSB2YXIucmVwbGFjZShzdWZmaXgsICIiKQorCisgICAgcHJlZml4ID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyAgICBpZiBwcmVmaXggYW5kIHZhci5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgIHZhciA9IHZhci5yZXBsYWNlKHByZWZpeCwgIiIpCisKKyAgICByZXR1cm4gdmFyCisKK2RlZiBzdHJfZmlsdGVyKGYsIHN0ciwgZCk6CisgICAgZnJvbSByZSBpbXBvcnQgbWF0Y2gKKyAgICByZXR1cm4gIiAiLmpvaW4oZmlsdGVyKGxhbWJkYSB4OiBtYXRjaChmLCB4LCAwKSwgc3RyLnNwbGl0KCkpKQorCitkZWYgc3RyX2ZpbHRlcl9vdXQoZiwgc3RyLCBkKToKKyAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAorICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG5vdCBtYXRjaChmLCB4LCAwKSwgc3RyLnNwbGl0KCkpKQorCitkZWYgcGFyYW1fYm9vbChjZmcsIGZpZWxkLCBkZmx0ID0gTm9uZSk6CisgICAgIiIiTG9va3VwIDxmaWVsZD4gaW4gPGNmZz4gbWFwIGFuZCBjb252ZXJ0IGl0IHRvIGEgYm9vbGVhbjsgdGFrZQorICAgIDxkZmx0PiB3aGVuIHRoaXMgPGZpZWxkPiBkb2VzIG5vdCBleGlzdCIiIgorICAgIHZhbHVlID0gY2ZnLmdldChmaWVsZCwgZGZsdCkKKyAgICBzdHJ2YWx1ZSA9IHN0cih2YWx1ZSkubG93ZXIoKQorICAgIGlmIHN0cnZhbHVlIGluICgneWVzJywgJ3knLCAndHJ1ZScsICd0JywgJzEnKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIHN0cnZhbHVlIGluICgnbm8nLCAnbicsICdmYWxzZScsICdmJywgJzAnKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB2YWx1ZSBmb3IgYm9vbGVhbiBwYXJhbWV0ZXIgJyVzJzogJyVzJyIgJSAoZmllbGQsIHZhbHVlKSkKKworZGVmIGluaGVyaXRzKGQsICpjbGFzc2VzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgbWV0YWRhdGEgaW5oZXJpdHMgYW55IG9mIHRoZSBzcGVjaWZpZWQgY2xhc3NlcyIiIgorICAgIHJldHVybiBhbnkoYmIuZGF0YS5pbmhlcml0c19jbGFzcyhjbHMsIGQpIGZvciBjbHMgaW4gY2xhc3NlcykKKworZGVmIGZlYXR1cmVzX2JhY2tmaWxsKHZhcixkKToKKyAgICAjIFRoaXMgY29uc3RydWN0IGFsbG93cyB0aGUgYWRkaXRpb24gb2YgbmV3IGZlYXR1cmVzIHRvIHZhcmlhYmxlIHNwZWNpZmllZAorICAgICMgYXMgdmFyCisgICAgIyBFeGFtcGxlIGZvciB2YXIgPSAiRElTVFJPX0ZFQVRVUkVTIgorICAgICMgVGhpcyBjb25zdHJ1Y3QgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgdG8gRElTVFJPX0ZFQVRVUkVTCisgICAgIyB0aGF0IGlmIG5vdCBwcmVzZW50IHdvdWxkIGRpc2FibGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgd2l0aG91dAorICAgICMgZGlzdHVyYmluZyBkaXN0cmlidXRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IHNldCBESVNUUk9fRkVBVFVSRVMuCisgICAgIyBEaXN0cmlidXRpb25zIHdhbnRpbmcgdG8gZWxpZGUgYSB2YWx1ZSBpbiBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTEwgc2hvdWxkCisgICAgIyBhZGQgdGhlIGZlYXR1cmUgdG8gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQKKyAgICBmZWF0dXJlcyA9IChkLmdldFZhcih2YXIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFja2ZpbGwgPSAoZC5nZXRWYXIodmFyKyJfQkFDS0ZJTEwiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGNvbnNpZGVyZWQgPSAoZC5nZXRWYXIodmFyKyJfQkFDS0ZJTExfQ09OU0lERVJFRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBhZGRmZWF0dXJlcyA9IFtdCisgICAgZm9yIGZlYXR1cmUgaW4gYmFja2ZpbGw6CisgICAgICAgIGlmIGZlYXR1cmUgbm90IGluIGZlYXR1cmVzIGFuZCBmZWF0dXJlIG5vdCBpbiBjb25zaWRlcmVkOgorICAgICAgICAgICAgYWRkZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpCisKKyAgICBpZiBhZGRmZWF0dXJlczoKKyAgICAgICAgZC5hcHBlbmRWYXIodmFyLCAiICIgKyAiICIuam9pbihhZGRmZWF0dXJlcykpCisKKworZGVmIHBhY2thZ2VzX2ZpbHRlcl9vdXRfc3lzdGVtKGQpOgorICAgICIiIgorICAgIFJldHVybiBhIGxpc3Qgb2YgcGFja2FnZXMgZnJvbSBQQUNLQUdFUyB3aXRoIHRoZSAic3lzdGVtIiBwYWNrYWdlcyBzdWNoIGFzCisgICAgUE4tZGJnIFBOLWRvYyBQTi1sb2NhbGUtZWItZ2IgcmVtb3ZlZC4KKyAgICAiIiIKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgYmxhY2tsaXN0ID0gbWFwKGxhbWJkYSBzdWZmaXg6IHBuICsgc3VmZml4LCAoJycsICctZGJnJywgJy1kZXYnLCAnLWRvYycsICctbG9jYWxlJywgJy1zdGF0aWNkZXYnKSkKKyAgICBsb2NhbGVwa2cgPSBwbiArICItbG9jYWxlLSIKKyAgICBwa2dzID0gW10KKworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgcGtnIG5vdCBpbiBibGFja2xpc3QgYW5kIGxvY2FsZXBrZyBub3QgaW4gcGtnOgorICAgICAgICAgICAgcGtncy5hcHBlbmQocGtnKQorICAgIHJldHVybiBwa2dzCisKK2RlZiBnZXRzdGF0dXNvdXRwdXQoY21kKToKKyAgICByZXR1cm4gY21kc3RhdHVzLmdldHN0YXR1c291dHB1dChjbWQpCisKKworZGVmIHRyaW1fdmVyc2lvbih2ZXJzaW9uLCBudW1fcGFydHM9Mik6CisgICAgIiIiCisgICAgUmV0dXJuIGp1c3QgdGhlIGZpcnN0IDxudW1fcGFydHM+IG9mIDx2ZXJzaW9uPiwgc3BsaXQgYnkgcGVyaW9kcy4gIEZvcgorICAgIGV4YW1wbGUsIHRyaW1fdmVyc2lvbigiMS4yLjMiLCAyKSB3aWxsIHJldHVybiAiMS4yIi4KKyAgICAiIiIKKyAgICBpZiB0eXBlKHZlcnNpb24pIGlzIG5vdCBzdHI6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVmVyc2lvbiBzaG91bGQgYmUgYSBzdHJpbmciKQorICAgIGlmIG51bV9wYXJ0cyA8IDE6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBzcGxpdCB0byBwYXJ0cyA8IDEiKQorCisgICAgcGFydHMgPSB2ZXJzaW9uLnNwbGl0KCIuIikKKyAgICB0cmltbWVkID0gIi4iLmpvaW4ocGFydHNbOm51bV9wYXJ0c10pCisgICAgcmV0dXJuIHRyaW1tZWQKKworZGVmIGNwdV9jb3VudCgpOgorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisKK2RlZiBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MoZCwgY21kcyk6CisgICAgaWYgY21kcyBpcyBOb25lOgorICAgICAgICByZXR1cm4KKworICAgIGZvciBjbWQgaW4gY21kcy5zdHJpcCgpLnNwbGl0KCc7Jyk6CisgICAgICAgIGNtZCA9IGNtZC5zdHJpcCgpCisgICAgICAgIGlmIGNtZCAhPSAnJzoKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyAlcyAuLi4iICUgY21kKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGNtZCwgZCkKKworZGVmIG11bHRpcHJvY2Vzc19leGVjKGNvbW1hbmRzLCBmdW5jdGlvbik6CisgICAgaW1wb3J0IHNpZ25hbAorICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworICAgIGlmIG5vdCBjb21tYW5kczoKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgaW5pdF93b3JrZXIoKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWwuU0lHX0lHTikKKworICAgIG5wcm9jID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgbGVuKGNvbW1hbmRzKSkKKyAgICBwb29sID0gYmIudXRpbHMubXVsdGlwcm9jZXNzaW5ncG9vbChucHJvYywgaW5pdF93b3JrZXIpCisgICAgaW1hcCA9IHBvb2wuaW1hcChmdW5jdGlvbiwgY29tbWFuZHMpCisKKyAgICB0cnk6CisgICAgICAgIHJlcyA9IGxpc3QoaW1hcCkKKyAgICAgICAgcG9vbC5jbG9zZSgpCisgICAgICAgIHBvb2wuam9pbigpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgcmVzdWx0IGluIHJlczoKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBvb2wudGVybWluYXRlKCkKKyAgICAgICAgcG9vbC5qb2luKCkKKyAgICAgICAgcmFpc2UKKworZGVmIHNxdWFzaHNwYWNlcyhzdHJpbmcpOgorICAgIGltcG9ydCByZQorICAgIHJldHVybiByZS5zdWIoIlxzKyIsICIgIiwgc3RyaW5nKS5zdHJpcCgpCisKKyMKKyMgUHl0aG9uIDIuNyBkb2Vzbid0IGhhdmUgdGhyZWFkZWQgcG9vbHMgKGp1c3QgbXVsdGlwcm9jZXNzaW5nKQorIyBzbyBpbXBsZW1lbnQgYSB2ZXJzaW9uIGhlcmUKKyMKKworZnJvbSBRdWV1ZSBpbXBvcnQgUXVldWUKK2Zyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKKworY2xhc3MgVGhyZWFkZWRXb3JrZXIoVGhyZWFkKToKKyAgICAiIiJUaHJlYWQgZXhlY3V0aW5nIHRhc2tzIGZyb20gYSBnaXZlbiB0YXNrcyBxdWV1ZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXNrcywgd29ya2VyX2luaXQsIHdvcmtlcl9lbmQpOgorICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi50YXNrcyA9IHRhc2tzCisgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYud29ya2VyX2luaXQgPSB3b3JrZXJfaW5pdAorICAgICAgICBzZWxmLndvcmtlcl9lbmQgPSB3b3JrZXJfZW5kCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBmcm9tIFF1ZXVlIGltcG9ydCBFbXB0eQorCisgICAgICAgIGlmIHNlbGYud29ya2VyX2luaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLndvcmtlcl9pbml0KHNlbGYpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jLCBhcmdzLCBrYXJncyA9IHNlbGYudGFza3MuZ2V0KGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IEVtcHR5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYud29ya2VyX2VuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53b3JrZXJfZW5kKHNlbGYpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgKmFyZ3MsICoqa2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHByaW50IGUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi50YXNrcy50YXNrX2RvbmUoKQorCitjbGFzcyBUaHJlYWRlZFBvb2w6CisgICAgIiIiUG9vbCBvZiB0aHJlYWRzIGNvbnN1bWluZyB0YXNrcyBmcm9tIGEgcXVldWUiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3dvcmtlcnMsIG51bV90YXNrcywgd29ya2VyX2luaXQ9Tm9uZSwKKyAgICAgICAgICAgIHdvcmtlcl9lbmQ9Tm9uZSk6CisgICAgICAgIHNlbGYudGFza3MgPSBRdWV1ZShudW1fdGFza3MpCisgICAgICAgIHNlbGYud29ya2VycyA9IFtdCisKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gVGhyZWFkZWRXb3JrZXIoc2VsZi50YXNrcywgd29ya2VyX2luaXQsIHdvcmtlcl9lbmQpCisgICAgICAgICAgICBzZWxmLndvcmtlcnMuYXBwZW5kKHdvcmtlcikKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorCisgICAgZGVmIGFkZF90YXNrKHNlbGYsIGZ1bmMsICphcmdzLCAqKmthcmdzKToKKyAgICAgICAgIiIiQWRkIGEgdGFzayB0byB0aGUgcXVldWUiIiIKKyAgICAgICAgc2VsZi50YXNrcy5wdXQoKGZ1bmMsIGFyZ3MsIGthcmdzKSkKKworICAgIGRlZiB3YWl0X2NvbXBsZXRpb24oc2VsZik6CisgICAgICAgICIiIldhaXQgZm9yIGNvbXBsZXRpb24gb2YgYWxsIHRoZSB0YXNrcyBpbiB0aGUgcXVldWUiIiIKKyAgICAgICAgc2VsZi50YXNrcy5qb2luKCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuam9pbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2VxYS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weSBiL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkYTkyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvX19pbml0X18ucHkKQEAgLTAsMCArMSwzIEBACisjIEVuYWJsZSBvdGhlciBsYXllcnMgdG8gaGF2ZSBtb2R1bGVzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5IGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJmOWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9tYXN0ZXJpbWFnZS5weQpAQCAtMCwwICsxLDIwMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IHRvIHRlc3RpbWFnZS5iYmNsYXNzIHRvIGRlcGxveSBpbWFnZXMgYW5kIHJ1bgorIyB0ZXN0cyB1c2luZyBhICJtYXN0ZXIgaW1hZ2UiIC0gdGhpcyBpcyBhICJrbm93biBnb29kIiBpbWFnZSB0aGF0IGlzCisjIGluc3RhbGxlZCBvbnRvIHRoZSBkZXZpY2UgYXMgcGFydCBvZiBpbml0aWFsIHNldHVwIGFuZCB3aWxsIGJlIGJvb3RlZCBpbnRvCisjIHdpdGggbm8gaW50ZXJhY3Rpb247IHdlIGNhbiB0aGVuIHVzZSBpdCB0byBkZXBsb3kgdGhlIGltYWdlIHRvIGJlIHRlc3RlZAorIyB0byBhIHNlY29uZCBwYXJ0aXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3RzLgorIworIyBGb3IgYW4gZXhhbXBsZSBtYXN0ZXIgaW1hZ2UsIHNlZSBjb3JlLWltYWdlLXRlc3RtYXN0ZXIKKyMgKG1ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS10ZXN0bWFzdGVyLmJiKQorCitpbXBvcnQgb3MKK2ltcG9ydCBiYgoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2ltcG9ydCBvZXFhLnRhcmdldGNvbnRyb2wKK2ltcG9ydCBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgYXMgc3NoY29udHJvbAoraW1wb3J0IG9lcWEudXRpbHMuY29tbWFuZHMgYXMgY29tbWFuZHMKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgQ29tbWFuZEVycm9yCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorCitjbGFzcyBNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KG9lcWEudGFyZ2V0Y29udHJvbC5CYXNlVGFyZ2V0KToKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsndGFyLmd6JywgJ3Rhci5iejInXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgICMgdGFyZ2V0IGlwCisgICAgICAgIGFkZHIgPSBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKSBvciBiYi5mYXRhbCgnUGxlYXNlIHNldCBURVNUX1RBUkdFVF9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIHJ1biB0aGUgdGVzdHMgb24uJykKKyAgICAgICAgc2VsZi5pcCA9IGFkZHIuc3BsaXQoIjoiKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIGJiLm5vdGUoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKKyAgICAgICAgYmIubm90ZSgiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgICAgICAjIHRlc3Qgcm9vdGZzICsga2VybmVsCisgICAgICAgIHNlbGYuaW1hZ2VfZnN0eXBlID0gc2VsZi5nZXRfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIHNlbGYucm9vdGZzID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJJTUFHRV9MSU5LX05BTUUiLCBUcnVlKSArICcuJyArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLmtlcm5lbCA9IG9zLnBhdGguam9pbihkLmdldFZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIFRydWUpLCBkLmdldFZhcigiS0VSTkVMX0lNQUdFVFlQRSIsIEZhbHNlKSArICctJyArIGQuZ2V0VmFyKCdNQUNISU5FJywgRmFsc2UpICsgJy5iaW4nKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgIyB3ZSBjb3VsZCd2ZSBjaGVja2VkIHRoYXQgSU1BR0VfRlNUWVBFUyBjb250YWlucyB0YXIuZ3ogYnV0IHRoZSBjb25maWcgZm9yIHJ1bm5pbmcgdGVzdGltYWdlIG1pZ2h0IG5vdCBiZQorICAgICAgICAgICAgIyB0aGUgc2FtZSBhcyB0aGUgY29uZmlnIHdpdGggd2hpY2ggdGhlIGltYWdlIHdhcyBidWlsZCwgaWUKKyAgICAgICAgICAgICMgeW91IGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIHdpdGggSU1BR0VfRlNUWVBFUyArPSAidGFyLmd6IgorICAgICAgICAgICAgIyBhbmQgeW91ciBhdXRvYnVpbGRlciBvdmVyd3JpdGVzIHRoZSBjb25maWcsIGFkZHMgdGhlIHRlc3QgYml0cyBhbmQgcnVucyBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyByb290ZnMgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIGltYWdlID9cbklmIHllcywgZGlkIHlvdSBidWlsZCBpdCB3aXRoIElNQUdFX0ZTVFlQRVMgKz0gXCJ0YXIuZ3pcIiA/IFwKKyAgICAgICAgICAgICAgICAgICAgICBcbkV4cGVjdGVkIHBhdGg6ICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5rZXJuZWwpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGtlcm5lbCBmb3VuZC4gRXhwZWN0ZWQgcGF0aDogJXMiICUgc2VsZi5rZXJuZWwpCisKKyAgICAgICAgIyBtYXN0ZXIgc3NoIGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5tYXN0ZXIgPSBOb25lCisgICAgICAgICMgaWYgdGhlIHVzZXIga25vd3Mgd2hhdCB0aGV5IGFyZSBkb2luZywgdGhlbiBieSBhbGwgbWVhbnMuLi4KKyAgICAgICAgc2VsZi51c2VyX2NtZHMgPSBkLmdldFZhcigiVEVTVF9ERVBMT1lfQ01EUyIsIFRydWUpCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBOb25lCisKKyAgICAgICAgIyB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRoYXQgY29udHJvbHMgdGhlIHBvd2VyIGZvciBhIGJvYXJkCisgICAgICAgICMgZS5nOiBURVNUX1BPV0VSQ09OVFJPTF9DTUQgPSAiL2hvbWUvdXNlci9teXNjcmlwdHMvcG93ZXJjb250cm9sLnB5ICR7TUFDSElORX0gd2hhdC1ldmVyLW90aGVyLWFyZ3MtdGhlLXNjcmlwdC13YW50cyIKKyAgICAgICAgIyB0aGUgY29tbWFuZCBzaG91bGQgdGFrZSBhcyB0aGUgbGFzdCBhcmd1bWVudCAib2ZmIiBhbmQgIm9uIiBhbmQgImN5Y2xlIiAob2ZmLCBvbikKKyAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfY21kID0gZC5nZXRWYXIoIlRFU1RfUE9XRVJDT05UUk9MX0NNRCIsIFRydWUpIG9yIE5vbmUKKyAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfYXJncyA9IGQuZ2V0VmFyKCJURVNUX1BPV0VSQ09OVFJPTF9FWFRSQV9BUkdTIiwgRmFsc2UpIG9yICIiCisKKyAgICAgICAgc2VsZi5zZXJpYWxjb250cm9sX2NtZCA9IGQuZ2V0VmFyKCJURVNUX1NFUklBTENPTlRST0xfQ01EIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfYXJncyA9IGQuZ2V0VmFyKCJURVNUX1NFUklBTENPTlRST0xfRVhUUkFfQVJHUyIsIEZhbHNlKSBvciAiIgorCisgICAgICAgIHNlbGYub3JpZ2VudiA9IG9zLmVudmlyb24KKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kIG9yIHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICAjIHRoZSBleHRlcm5hbCBzY3JpcHQgZm9yIGNvbnRyb2xsaW5nIHBvd2VyIG1pZ2h0IHVzZSBzc2gKKyAgICAgICAgICAgICMgc3NoICsga2V5cyBtZWFucyB3ZSBuZWVkIHRoZSBvcmlnaW5hbCB1c2VyIGVudgorICAgICAgICAgICAgYmJvcmlnZW52ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkgb3Ige30KKyAgICAgICAgICAgIGZvciBrZXkgaW4gYmJvcmlnZW52OgorICAgICAgICAgICAgICAgIHZhbCA9IGJib3JpZ2Vudi5nZXRWYXIoa2V5LCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vcmlnZW52W2tleV0gPSBzdHIodmFsKQorCisgICAgICAgIGlmIHNlbGYucG93ZXJjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGlmIHNlbGYucG93ZXJjb250cm9sX2FyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5wb3dlcmNvbnRyb2xfY21kID0gIiVzICVzIiAlIChzZWxmLnBvd2VyY29udHJvbF9jbWQsIHNlbGYucG93ZXJjb250cm9sX2FyZ3MpCisgICAgICAgIGlmIHNlbGYuc2VyaWFsY29udHJvbF9jbWQ6CisgICAgICAgICAgICBpZiBzZWxmLnNlcmlhbGNvbnRyb2xfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfY21kID0gIiVzICVzIiAlIChzZWxmLnNlcmlhbGNvbnRyb2xfY21kLCBzZWxmLnNlcmlhbGNvbnRyb2xfYXJncykKKworICAgIGRlZiBwb3dlcl9jdGwoc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChzZWxmLnBvd2VyY29udHJvbF9jbWQsIG1zZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb21tYW5kcy5ydW5DbWQoY21kLCBhc3NlcnRfZXJyb3I9RmFsc2UsIHByZWV4ZWNfZm49b3Muc2V0c2lkLCBlbnY9c2VsZi5vcmlnZW52KQorICAgICAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKHN0cihlKSkKKworICAgIGRlZiBwb3dlcl9jeWNsZShzZWxmLCBjb25uKToKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgIyBiZSBuaWNlLCBkb24ndCBqdXN0IGN1dCBwb3dlcgorICAgICAgICAgICAgY29ubi5ydW4oInNodXRkb3duIC1oIG5vdyIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgc2VsZi5wb3dlcl9jdGwoImN5Y2xlIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gY29ubi5ydW4oInJlYm9vdCIpCisgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigiRmFpbGVkIHJlYm9vdGluZyB0YXJnZXQgYW5kIG5vIHBvd2VyIGNvbnRyb2wgY29tbWFuZCBkZWZpbmVkLiBZb3UgbmVlZCB0byBtYW51YWxseSByZXNldCB0aGUgZGV2aWNlLlxuJXMiICUgb3V0cHV0KQorCisgICAgZGVmIF93YWl0X3VudGlsX2Jvb3RlZChzZWxmKToKKyAgICAgICAgJycnIFdhaXRzIHVudGlsIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyBib290ZWQgKGlmIHdlIGhhdmUganVzdCBwb3dlciBjeWNsZWQgaXQpICcnJworICAgICAgICAjIFN1YmNsYXNzZXMgd2l0aCBiZXR0ZXIgbWV0aG9kcyBvZiBkZXRlcm1pbmluZyBib290IGNhbiBvdmVycmlkZSB0aGlzCisgICAgICAgIHRpbWUuc2xlZXAoMTIwKQorCisgICAgZGVmIGRlcGxveShzZWxmKToKKyAgICAgICAgIyBiYXNlIGNsYXNzIGp1c3Qgc2V0cyB0aGUgc3NoIGxvZyBmaWxlIGZvciB1cworICAgICAgICBzdXBlcihNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorICAgICAgICBzZWxmLm1hc3RlciA9IHNzaGNvbnRyb2wuU1NIQ29udHJvbChpcD1zZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCB0aW1lb3V0PTYwMCwgcG9ydD1zZWxmLnBvcnQpCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5tYXN0ZXIucnVuKCJjYXQgL2V0Yy9tYXN0ZXJpbWFnZSIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgIyBXZSdyZSBub3QgYm9vdGVkIGludG8gdGhlIG1hc3RlciBpbWFnZSwgc28gdHJ5IHJlYm9vdGluZworICAgICAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdGluZyBpbnRvIHRoZSBtYXN0ZXIgaW1hZ2UiICUgc2VsZi5wbikKKyAgICAgICAgICAgIHNlbGYucG93ZXJfY3RsKCJjeWNsZSIpCisgICAgICAgICAgICBzZWxmLl93YWl0X3VudGlsX2Jvb3RlZCgpCisKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gZGVwbG95aW5nIGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYubWFzdGVyLnJ1bigiY2F0IC9ldGMvbWFzdGVyaW1hZ2UiKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJObyBzc2ggY29ubmVjdGl2aXR5IG9yIHRhcmdldCBpc24ndCBydW5uaW5nIGEgbWFzdGVyIGltYWdlLlxuJXMiICUgb3V0cHV0KQorICAgICAgICBpZiBzZWxmLnVzZXJfY21kczoKKyAgICAgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBzZWxmLnVzZXJfY21kcy5zcGxpdCgiXG4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9kZXBsb3koKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIGRlcGxveWluZyB0ZXN0IGltYWdlOiAlcyIgJSBlKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGJiLnBsYWluKCIlcyAtIGJvb3QgdGVzdCBpbWFnZSBvbiB0YXJnZXQiICUgc2VsZi5wbikKKyAgICAgICAgc2VsZi5fc3RhcnQoKQorICAgICAgICAjIHNldCB0aGUgc3NoIG9iamVjdCBmb3IgdGhlIHRhcmdldC90ZXN0IGltYWdlCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNzaGNvbnRyb2wuU1NIQ29udHJvbChzZWxmLmlwLCBsb2dmaWxlPXNlbGYuc3NobG9nLCBwb3J0PXNlbGYucG9ydCkKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gc3RhcnQgcnVubmluZyB0ZXN0cyIgJSBzZWxmLnBuKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGJiLnBsYWluKCIlcyAtIHJlYm9vdC9wb3dlcmN5Y2xlIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzZWxmLnBvd2VyX2N5Y2xlKHNlbGYuY29ubmVjdGlvbikKKworCitjbGFzcyBHdW1taWJvb3RUYXJnZXQoTWFzdGVySW1hZ2VIYXJkd2FyZVRhcmdldCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKEd1bW1pYm9vdFRhcmdldCwgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgIyB0aGlzIHRoZSB2YWx1ZSB3ZSBuZWVkIHRvIHNldCBpbiB0aGUgTG9hZGVyRW50cnlPbmVTaG90IEVGSSB2YXJpYWJsZQorICAgICAgICAjIHNvIHRoZSBzeXN0ZW0gYm9vdHMgdGhlICd0ZXN0JyBib290bG9hZGVyIGxhYmVsIGFuZCBub3QgdGhlIGRlZmF1bHQKKyAgICAgICAgIyBUaGUgZmlyc3QgZm91ciBieXRlcyBhcmUgRUZJIGJpdHMsIGFuZCB0aGUgcmVzdCBpcyBhbiB1dGYtMTZsZSBzdHJpbmcKKyAgICAgICAgIyAoRUZJIHZhcnMgdmFsdWVzIG5lZWQgdG8gYmUgdXRmLTE2KQorICAgICAgICAjICQgZWNobyAtZW4gInRlc3RcMCIgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTZsZSB8IGhleGR1bXAgLUMKKyAgICAgICAgIyAwMDAwMDAwMCAgNzQgMDAgNjUgMDAgNzMgMDAgNzQgMDAgIDAwIDAwICAgICAgICAgICAgICAgICAgICB8dC5lLnMudC4uLnwKKyAgICAgICAgc2VsZi5lZml2YXJ2YWx1ZSA9IHInXHgwN1x4MDBceDAwXHgwMFx4NzRceDAwXHg2NVx4MDBceDczXHgwMFx4NzRceDAwXHgwMFx4MDAnCisgICAgICAgIHNlbGYuZGVwbG95X2NtZHMgPSBbCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIGJvb3QgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdta2RpciAtcCAvbW50L3Rlc3Ryb290ZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtTCB0ZXN0cm9vdGZzIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vZHByb2JlIGVmaXZhcmZzJywKKyAgICAgICAgICAgICAgICAnbW91bnQgLXQgZWZpdmFyZnMgZWZpdmFyZnMgL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycycsCisgICAgICAgICAgICAgICAgJ2NwIH4vdGVzdC1rZXJuZWwgL2Jvb3QnLAorICAgICAgICAgICAgICAgICdybSAtcmYgL21udC90ZXN0cm9vdGZzLyonLAorICAgICAgICAgICAgICAgICd0YXIgeHZmIH4vdGVzdC1yb290ZnMuJXMgLUMgL21udC90ZXN0cm9vdGZzJyAlIHNlbGYuaW1hZ2VfZnN0eXBlLAorICAgICAgICAgICAgICAgICdwcmludGYgIiVzIiA+IC9zeXMvZmlybXdhcmUvZWZpL2VmaXZhcnMvTG9hZGVyRW50cnlPbmVTaG90LTRhNjdiMDgyLTBhNGMtNDFjZi1iNmM3LTQ0MGIyOWJiOGM0ZicgJSBzZWxmLmVmaXZhcnZhbHVlCisgICAgICAgICAgICAgICAgXQorCisgICAgZGVmIF9kZXBsb3koc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoZXNlIGFyZW4ndCBtb3VudGVkCisgICAgICAgIHNlbGYubWFzdGVyLnJ1bigidW1vdW50IC9ib290OyB1bW91bnQgL21udC90ZXN0cm9vdGZzOyB1bW91bnQgL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFyczsiKQorICAgICAgICAjIGZyb20gbm93IG9uLCBldmVyeSBkZXBsb3kgY21kIHNob3VsZCByZXR1cm4gMAorICAgICAgICAjIGVsc2UgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGJ5IHNzaGNvbnRyb2wKKyAgICAgICAgc2VsZi5tYXN0ZXIuaWdub3JlX3N0YXR1cyA9IEZhbHNlCisgICAgICAgIHNlbGYubWFzdGVyLmNvcHlfdG8oc2VsZi5yb290ZnMsICJ+L3Rlc3Qtcm9vdGZzLiIgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLmtlcm5lbCwgIn4vdGVzdC1rZXJuZWwiKQorICAgICAgICBmb3IgY21kIGluIHNlbGYuZGVwbG95X2NtZHM6CisgICAgICAgICAgICBzZWxmLm1hc3Rlci5ydW4oY21kKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5tYXN0ZXIpCisgICAgICAgICMgdGhlcmUgYXJlIGJldHRlciB3YXlzIHRoYW4gYSB0aW1lb3V0IGJ1dCB0aGlzIHNob3VsZCB3b3JrIGZvciBub3cKKyAgICAgICAgdGltZS5zbGVlcCgxMjApCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL3Rlc3R0YXJnZXRsb2FkZXIucHkgYi9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL3Rlc3R0YXJnZXRsb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiN2IxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weQpAQCAtMCwwICsxLDcwIEBACitpbXBvcnQgdHlwZXMKK2ltcG9ydCBiYgoraW1wb3J0IG9zCisKKyMgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBhIHRlc3QgdGFyZ2V0IGNvbnRyb2xsZXIKK2NsYXNzIFRlc3RUYXJnZXRMb2FkZXI6CisKKyAgICAjIFNlYXJjaCBvZXFhLmNvbnRyb2xsZXJzIG1vZHVsZSBkaXJlY3RvcnkgZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyICAKKyAgICAjIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHRhcmdldCBuYW1lLiAKKyAgICAjIEF0dHJpYnV0ZUVycm9yIHJhaXNlZCBpZiBub3QgZm91bmQuCisgICAgIyBJbXBvcnRFcnJvciByYWlzZWQgaWYgYSBwcm92aWRlZCBtb2R1bGUgY2FuIG5vdCBiZSBpbXBvcnRlZC4KKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfbW9kdWxlKHNlbGYsIHRhcmdldCwgYmJwYXRoKToKKyAgICAgICAgY29udHJvbGxlcnNsaXN0ID0gc2VsZi5nZXRfY29udHJvbGxlcl9tb2R1bGVuYW1lcyhiYnBhdGgpCisgICAgICAgIGJiLm5vdGUoIkF2YWlsYWJsZSBjb250cm9sbGVyIG1vZHVsZXM6ICVzIiAlIHN0cihjb250cm9sbGVyc2xpc3QpKQorICAgICAgICBjb250cm9sbGVyID0gc2VsZi5sb2FkX2NvbnRyb2xsZXJfZnJvbV9uYW1lKHRhcmdldCwgY29udHJvbGxlcnNsaXN0KQorICAgICAgICByZXR1cm4gY29udHJvbGxlcgorCisgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBweXRob24gbW9kdWxlcyBpbiBsaWIvb2VxYS9jb250cm9sbGVycyBmb3IgZWFjaAorICAgICMgbGF5ZXIgaW4gYmJwYXRoCisgICAgZGVmIGdldF9jb250cm9sbGVyX21vZHVsZW5hbWVzKHNlbGYsIGJicGF0aCk6CisKKyAgICAgICAgY29udHJvbGxlcnNsaXN0ID0gW10KKworICAgICAgICBkZWYgYWRkX2NvbnRyb2xsZXJfbGlzdChwYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdDb250cm9sbGVycyBkaXJlY3RvcnkgJXMgZXhpc3RzIGJ1dCBpcyBtaXNzaW5nIF9faW5pdF9fLnB5JyAlIHBhdGgpCisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfJyldKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuY29udHJvbGxlcnMuJyArIGZbOi0zXQorICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gY29udHJvbGxlcnNsaXN0OgorICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyc2xpc3QuYXBwZW5kKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJEdXBsaWNhdGUgY29udHJvbGxlciBtb2R1bGUgZm91bmQgZm9yICVzLCBvbmx5IG9uZSBhZGRlZC4gTGF5ZXJzIHNob3VsZCBjcmVhdGUgdW5pcXVlIGNvbnRyb2xsZXIgbW9kdWxlIG5hbWVzIiAlIG1vZHVsZSkKKworICAgICAgICBmb3IgcCBpbiBiYnBhdGg6CisgICAgICAgICAgICBjb250cm9sbGVycGF0aCA9IG9zLnBhdGguam9pbihwLCAnbGliJywgJ29lcWEnLCAnY29udHJvbGxlcnMnKQorICAgICAgICAgICAgYmIuZGVidWcoMiwgJ1NlYXJjaGluZyBmb3IgdGFyZ2V0IGNvbnRyb2xsZXJzIGluICVzJyAlIGNvbnRyb2xsZXJwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29udHJvbGxlcnBhdGgpOgorICAgICAgICAgICAgICAgIGFkZF9jb250cm9sbGVyX2xpc3QoY29udHJvbGxlcnBhdGgpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyc2xpc3QKKworICAgICMgU2VhcmNoIGZvciBhbmQgcmV0dXJuIGEgY29udHJvbGxlciBmcm9tIGdpdmVuIHRhcmdldCBuYW1lIGFuZAorICAgICMgc2V0IG9mIG1vZHVsZSBuYW1lcy4gCisgICAgIyBSYWlzZSBBdHRyaWJ1dGVFcnJvciBpZiBub3QgZm91bmQuCisgICAgIyBSYWlzZSBJbXBvcnRFcnJvciBpZiBhIHByb3ZpZGVkIG1vZHVsZSBjYW4gbm90IGJlIGltcG9ydGVkCisgICAgZGVmIGxvYWRfY29udHJvbGxlcl9mcm9tX25hbWUoc2VsZiwgdGFyZ2V0LCBtb2R1bGVuYW1lcyk6CisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZW5hbWVzOgorICAgICAgICAgICAgb2JqID0gc2VsZi5sb2FkX2NvbnRyb2xsZXJfZnJvbV9tb2R1bGUodGFyZ2V0LCBuYW1lKQorICAgICAgICAgICAgaWYgb2JqOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIlVuYWJsZSB0byBsb2FkIHswfSBmcm9tIGF2YWlsYWJsZSBtb2R1bGVzOiB7MX0iLmZvcm1hdCh0YXJnZXQsIHN0cihtb2R1bGVuYW1lcykpKQorCisgICAgIyBTZWFyY2ggZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyIG9yIE5vbmUgZnJvbSBnaXZlbiBtb2R1bGUgbmFtZQorICAgIGRlZiBsb2FkX2NvbnRyb2xsZXJfZnJvbV9tb2R1bGUoc2VsZiwgdGFyZ2V0LCBtb2R1bGVuYW1lKToKKyAgICAgICAgb2JqID0gTm9uZQorICAgICAgICAjIGltcG9ydCBtb2R1bGUsIGFsbG93aW5nIGl0IHRvIHJhaXNlIGltcG9ydCBleGNlcHRpb24KKyAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGVuYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbdGFyZ2V0XSkKKyAgICAgICAgIyBsb29rIGZvciB0YXJnZXQgY2xhc3MgaW4gdGhlIG1vZHVsZSwgY2F0Y2hpbmcgYW55IGV4Y2VwdGlvbnMgYXMgaXQKKyAgICAgICAgIyBpcyB2YWxpZCB0aGF0IGEgbW9kdWxlIG1heSBub3QgaGF2ZSB0aGUgdGFyZ2V0IGNsYXNzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgdGFyZ2V0KQorICAgICAgICAgICAgaWYgb2JqOiAKKyAgICAgICAgICAgICAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgQmFzZVRhcmdldAorICAgICAgICAgICAgICAgIGlmIChub3QgaXNpbnN0YW5jZShvYmosICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKSk6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRhcmdldCB7MH0gZm91bmQsIGJ1dCBub3Qgb2YgdHlwZSBDbGFzcyIuZm9ybWF0KHRhcmdldCkpCisgICAgICAgICAgICAgICAgaWYoIG5vdCBpc3N1YmNsYXNzKG9iaiwgQmFzZVRhcmdldCkpOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUYXJnZXQgezB9IGZvdW5kLCBidXQgc3ViY2xhc3MgaXMgbm90IEJhc2VUYXJnZXQiLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvYmogPSBOb25lCisgICAgICAgIHJldHVybiBvYmoKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvb2V0ZXN0LnB5IGIvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlNjhkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvb2V0ZXN0LnB5CkBAIC0wLDAgKzEsMjE0IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBNYWluIHVuaXR0ZXN0IG1vZHVsZSB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzCisjIFRoaXMgcHJvdmlkZXMgdGhlIG9lUnVudGltZVRlc3QgYmFzZSBjbGFzcyB3aGljaCBpcyBpbmhlcml0ZWQgYnkgYWxsIHRlc3RzIGluIG1ldGEvbGliL29lcWEvcnVudGltZS4KKworIyBJdCBhbHNvIGhhcyBzb21lIGhlbHBlciBmdW5jdGlvbnMgYW5kIGl0J3MgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IHN0YXJ0aW5nIHRoZSB0ZXN0cworCitpbXBvcnQgb3MsIHJlLCBtbWFwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGJiCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgTG9nUmVzdWx0cywgZ2V0dGFnCitmcm9tIHN5cyBpbXBvcnQgZXhjX2luZm8sIGV4Y19jbGVhcgorCitkZWYgZ2V0VmFyKG9iaik6CisgICAgI2V4dGVuZCBmb3JtIGRpY3QsIGlmIGEgdmFyaWFibGUgZGlkbid0IGV4aXN0cywgbmVlZCBmaW5kIGl0IGluIHRlc3RjYXNlCisgICAgY2xhc3MgVmFyRGljdChkaWN0KToKKyAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICByZXR1cm4gZ2V0dGFnKG9iaiwga2V5KQorICAgIHJldHVybiBWYXJEaWN0KCkKKworZGVmIGNoZWNrVGFncyh0YywgdGFnZXhwKToKKyAgICByZXR1cm4gZXZhbCh0YWdleHAsIE5vbmUsIGdldFZhcih0YykpCisKKworZGVmIGZpbHRlckJ5VGFnRXhwKHRlc3RzdWl0ZSwgdGFnZXhwKToKKyAgICBpZiBub3QgdGFnZXhwOgorICAgICAgICByZXR1cm4gdGVzdHN1aXRlCisgICAgY2FzZUxpc3QgPSBbXQorICAgIGZvciBlYWNoIGluIHRlc3RzdWl0ZToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWFjaCwgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZSk6CisgICAgICAgICAgICBpZiBjaGVja1RhZ3MoZWFjaCwgdGFnZXhwKToKKyAgICAgICAgICAgICAgICBjYXNlTGlzdC5hcHBlbmQoZWFjaCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhc2VMaXN0LmFwcGVuZChmaWx0ZXJCeVRhZ0V4cChlYWNoLCB0YWdleHApKQorICAgIHJldHVybiB0ZXN0c3VpdGUuX19jbGFzc19fKGNhc2VMaXN0KQorCitkZWYgbG9hZFRlc3RzKHRjLCB0eXBlPSJydW50aW1lIik6CisgICAgaWYgdHlwZSA9PSAicnVudGltZSI6CisgICAgICAgICMgc2V0IHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgdGVzdCBjbGFzcworICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgdGMpCisgICAgICAgICMgc2V0IHBzIGNvbW1hbmQgdG8gdXNlCisgICAgICAgIHNldGF0dHIob2VSdW50aW1lVGVzdCwgInBzY21kIiwgInBzIC1lZiIgaWYgb2VUZXN0Lmhhc1BhY2thZ2UoInByb2NwcyIpIGVsc2UgInBzIikKKyAgICAgICAgIyBwcmVwYXJlIHRlc3Qgc3VpdGUsIGxvYWRlciBhbmQgcnVubmVyCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBlbGlmIHR5cGUgPT0gInNkayI6CisgICAgICAgICMgc2V0IHRoZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgZnJvbSB0aGUgdGVzdCBjbGFzcworICAgICAgICBzZXRhdHRyKG9lVGVzdCwgInRjIiwgdGMpCisgICAgdGVzdGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIHRlc3Rsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCisgICAgc3VpdGVzID0gW3Rlc3Rsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZSkgZm9yIG5hbWUgaW4gdGMudGVzdHNsaXN0XQorICAgIHN1aXRlcyA9IGZpbHRlckJ5VGFnRXhwKHN1aXRlcywgZ2V0YXR0cih0YywgInRhZ2V4cCIsIE5vbmUpKQorCisgICAgZGVmIGdldFRlc3RzKHRlc3QpOgorICAgICAgICAnJydSZXR1cm4gYWxsIGluZGl2aWR1YWwgdGVzdHMgZXhlY3V0ZWQgd2hlbiBydW5uaW5nIHRoZSBzdWl0ZS4nJycKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHVuaXR0ZXN0IGRvZXMgbm90IGhhdmUgYW4gQVBJIGZvciB0aGlzLCBzbyB3ZSBoYXZlCisgICAgICAgICMgdG8gcmVseSBvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGlzIG9ubHkgbmVlZHMgdG8gd29yaworICAgICAgICAjIGZvciBUZXN0U3VpdGUgY29udGFpbmluZyBUZXN0Q2FzZS4KKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RNZXRob2ROYW1lJywgTm9uZSkKKyAgICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgIyBsZWFmIGNhc2U6IGEgVGVzdENhc2UKKyAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTG9vayBpbnRvIFRlc3RTdWl0ZS4KKyAgICAgICAgICAgIHRlc3RzID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RzJywgW10pCisgICAgICAgICAgICBmb3IgdDEgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgZm9yIHQyIGluIGdldFRlc3RzKHQxKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdDIKKworICAgICMgRGV0ZXJtaW5lIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1aXRlcyBieSBsb29raW5nIGZvciBAc2tpcFVubGVzc1Bhc3NlZAorICAgICMgbWV0aG9kIGFubm90YXRpb25zLiBTdWl0ZSBBIGRlcGVuZHMgb24gc3VpdGUgQiBpZiBhbnkgbWV0aG9kIGluIEEKKyAgICAjIGRlcGVuZHMgb24gYSBtZXRob2Qgb24gQi4KKyAgICBmb3Igc3VpdGUgaW4gc3VpdGVzOgorICAgICAgICBzdWl0ZS5kZXBlbmRlbmNpZXMgPSBbXQorICAgICAgICBzdWl0ZS5kZXB0aCA9IDAKKyAgICAgICAgZm9yIHRlc3QgaW4gZ2V0VGVzdHMoc3VpdGUpOgorICAgICAgICAgICAgbWV0aG9kbmFtZSA9IGdldGF0dHIodGVzdCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpCisgICAgICAgICAgICBpZiBtZXRob2RuYW1lOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIodGVzdCwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICAgICBkZXBlbmRzX29uID0gZ2V0YXR0cihtZXRob2QsICdfZGVwZW5kc19vbicsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgZGVwZW5kc19vbjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcF9zdWl0ZSBpbiBzdWl0ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uIGluIFtnZXRhdHRyKHQsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKSBmb3IgdCBpbiBnZXRUZXN0cyhkZXBfc3VpdGUpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXBfc3VpdGUgbm90IGluIHN1aXRlLmRlcGVuZGVuY2llcyBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcF9zdWl0ZSBpcyBub3Qgc3VpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlLmRlcGVuZGVuY2llcy5hcHBlbmQoZGVwX3N1aXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJUZXN0ICVzIHdhcyBkZWNsYXJlZCBhcyBAc2tpcFVubGVzc1Bhc3NlZCgnJXMnKSBidXQgdGhhdCB0ZXN0IGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBub3QgYWN0aXZlLiBXaWxsIHJ1biB0aGUgdGVzdCBhbnl3YXkuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCBkZXBlbmRzX29uKSkKKyAgICAjIFVzZSBicnV0ZS1mb3JjZSB0b3BvbG9naWNhbCBzb3J0IHRvIGRldGVybWluZSBvcmRlcmluZy4gU29ydCBieQorICAgICMgZGVwdGggKGhpZ2hlciBkZXB0aCA9IG11c3QgcnVuIGxhdGVyKSwgd2l0aCBvcmlnaW5hbCBvcmRlcmluZyB0bworICAgICMgYnJlYWsgdGllcy4KKyAgICBkZWYgc2V0X3N1aXRlX2RlcHRoKHN1aXRlKToKKyAgICAgICAgZm9yIGRlcCBpbiBzdWl0ZS5kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBuZXdfZGVwdGggPSBzZXRfc3VpdGVfZGVwdGgoZGVwKSArIDEKKyAgICAgICAgICAgIGlmIG5ld19kZXB0aCA+IHN1aXRlLmRlcHRoOgorICAgICAgICAgICAgICAgIHN1aXRlLmRlcHRoID0gbmV3X2RlcHRoCisgICAgICAgIHJldHVybiBzdWl0ZS5kZXB0aAorICAgIGZvciBpbmRleCwgc3VpdGUgaW4gZW51bWVyYXRlKHN1aXRlcyk6CisgICAgICAgIHNldF9zdWl0ZV9kZXB0aChzdWl0ZSkKKyAgICAgICAgc3VpdGUuaW5kZXggPSBpbmRleAorICAgIHN1aXRlcy5zb3J0KGNtcD1sYW1iZGEgYSxiOiBjbXAoKGEuZGVwdGgsIGEuaW5kZXgpLCAoYi5kZXB0aCwgYi5pbmRleCkpKQorICAgIHJldHVybiB0ZXN0bG9hZGVyLnN1aXRlQ2xhc3Moc3VpdGVzKQorCitkZWYgcnVuVGVzdHModGMsIHR5cGU9InJ1bnRpbWUiKToKKworICAgIHN1aXRlID0gbG9hZFRlc3RzKHRjLCB0eXBlKQorICAgIGJiLm5vdGUoIlRlc3QgbW9kdWxlcyAgJXMiICUgdGMudGVzdHNsaXN0KQorICAgIGlmIGhhc2F0dHIodGMsICJ0YWdleHAiKSBhbmQgdGMudGFnZXhwOgorICAgICAgICBiYi5ub3RlKCJGaWx0ZXIgdGVzdCBjYXNlcyBieSB0YWdzOiAlcyIgJSB0Yy50YWdleHApCisgICAgYmIubm90ZSgiRm91bmQgJXMgdGVzdHMiICUgc3VpdGUuY291bnRUZXN0Q2FzZXMoKSkKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MikKKyAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQorCisgICAgcmV0dXJuIHJlc3VsdAorCitATG9nUmVzdWx0cworY2xhc3Mgb2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvbmdNZXNzYWdlID0gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc1BhY2thZ2Uoc2VsZiwgcGtnKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2VUZXN0LnRjLnBrZ21hbmlmZXN0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgcmUubWF0Y2gocGtnLCBpdGVtKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYXNGZWF0dXJlKHNlbGYsZmVhdHVyZSk6CisKKyAgICAgICAgaWYgZmVhdHVyZSBpbiBvZVRlc3QudGMuaW1hZ2VmZWF0dXJlcyBvciBcCisgICAgICAgICAgICAgICAgZmVhdHVyZSBpbiBvZVRlc3QudGMuZGlzdHJvZmVhdHVyZXM6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIG9lUnVudGltZVRlc3Qob2VUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBzZWxmLnRhcmdldCA9IG9lUnVudGltZVRlc3QudGMudGFyZ2V0CisgICAgICAgIHN1cGVyKG9lUnVudGltZVRlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQ2hlY2sgaWYgdGVzdCBuZWVkcyB0byBydW4KKyAgICAgICAgaWYgc2VsZi50Yy5zaWd0ZXJtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJHb3QgU0lHVEVSTSIpCisgICAgICAgIGVsaWYgKHR5cGUoc2VsZi50YXJnZXQpLl9fbmFtZV9fID09ICJRZW11VGFyZ2V0Iik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50YXJnZXQuY2hlY2soKSwgbXNnID0gIlFlbXUgbm90IHJ1bm5pbmc/IikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBJZiBhIHRlc3QgZmFpbHMgb3IgdGhlcmUgaXMgYW4gZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleGNfaW5mbygpID09IChOb25lLCBOb25lLCBOb25lKToKKyAgICAgICAgICAgIGV4Y19jbGVhcigpCisgICAgICAgICAgICAjT25seSBkdW1wIGZvciBRZW11VGFyZ2V0CisgICAgICAgICAgICBpZiAodHlwZShzZWxmLnRhcmdldCkuX19uYW1lX18gPT0gIlFlbXVUYXJnZXQiKToKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi50Yy5ob3N0X2R1bXBlci5kdW1wX2hvc3QoKQorICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LnRhcmdldF9kdW1wZXIuZHVtcF90YXJnZXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgZHVtcCBkYXRhIHN0b3JlZCBpbiAlcyIgJSAoc2VsZi5fdGVzdE1ldGhvZE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50Yy5ob3N0X2R1bXBlci5kdW1wX2RpcikpCisKKyAgICAjVE9ETzogdXNlIHBhY2thZ2VfbWFuYWdlci5weSB0byBpbnN0YWxsIHBhY2thZ2VzIG9uIGFueSB0eXBlIG9mIGltYWdlCisgICAgZGVmIGluc3RhbGxfcGFja2FnZXMoc2VsZiwgcGFja2FnZWxpc3QpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlbGlzdDoKKyAgICAgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBzZWxmLnRhcmdldC5ydW4oInNtYXJ0IGluc3RhbGwgLXkgIitwYWNrYWdlKQorICAgICAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cworCitjbGFzcyBvZVNES1Rlc3Qob2VUZXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBzZWxmLnNka3Rlc3RkaXIgPSBvZVNES1Rlc3QudGMuc2RrdGVzdGRpcgorICAgICAgICBzdXBlcihvZVNES1Rlc3QsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFzSG9zdFBhY2thZ2Uoc2VsZiwgcGtnKToKKworICAgICAgICBpZiByZS5zZWFyY2gocGtnLCBvZVRlc3QudGMuaG9zdHBrZ21hbmlmZXN0KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSkKKworZGVmIGdldG1vZHVsZShwb3M9Mik6CisgICAgIyBzdGFjayByZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXMgY29udGFpbmcgZnJhbWUgaW5mb3JtYXRpb24KKyAgICAjIEZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgdGhlIGlzIGN1cnJlbnQgZnJhbWUsIGNhbGxlciBpcyAxCisgICAgZnJhbWVpbmZvID0gaW5zcGVjdC5zdGFjaygpW3Bvc10KKyAgICBtb2RuYW1lID0gaW5zcGVjdC5nZXRtb2R1bGVuYW1lKGZyYW1laW5mb1sxXSkKKyAgICAjbW9kbmFtZSA9IGluc3BlY3QuZ2V0bW9kdWxlKGZyYW1laW5mb1swXSkuX19uYW1lX18KKyAgICByZXR1cm4gbW9kbmFtZQorCitkZWYgc2tpcE1vZHVsZShyZWFzb24sIHBvcz0yKToKKyAgICBtb2RuYW1lID0gZ2V0bW9kdWxlKHBvcykKKyAgICBpZiBtb2RuYW1lIG5vdCBpbiBvZVRlc3QudGMudGVzdHNyZXF1aXJlZDoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIiVzOiAlcyIgJSAobW9kbmFtZSwgcmVhc29uKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlxuVGVzdCAlcyB3YW50cyB0byBiZSBza2lwcGVkLlxuUmVhc29uIGlzOiAlcyIgXAorICAgICAgICAgICAgICAgICJcblRlc3Qgd2FzIHJlcXVpcmVkIGluIFRFU1RfU1VJVEVTLCBzbyBlaXRoZXIgdGhlIGNvbmRpdGlvbiBmb3Igc2tpcHBpbmcgaXMgd3JvbmciIFwKKyAgICAgICAgICAgICAgICAiXG5vciB0aGUgaW1hZ2UgcmVhbGx5IGRvZXNuJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgZmVhdHVyZS9wYWNrYWdlIHdoZW4gaXQgc2hvdWxkLiIgJSAobW9kbmFtZSwgcmVhc29uKSkKKworZGVmIHNraXBNb2R1bGVJZihjb25kLCByZWFzb24pOgorCisgICAgaWYgY29uZDoKKyAgICAgICAgc2tpcE1vZHVsZShyZWFzb24sIDMpCisKK2RlZiBza2lwTW9kdWxlVW5sZXNzKGNvbmQsIHJlYXNvbik6CisKKyAgICBpZiBub3QgY29uZDoKKyAgICAgICAgc2tpcE1vZHVsZShyZWFzb24sIDMpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bmV4cG9ydGVkLnB5IGIvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjQ0MmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW5leHBvcnRlZC5weQpAQCAtMCwwICsxLDE0NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBzY3JpcHQgc2hvdWxkIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgYnVpbGQgc3lzdGVtIHRvIHJ1biBpbWFnZSB0ZXN0cy4KKyMgSXQgbmVlZHMgYSBqc29uIGZpbGUgYXMgaW5wdXQgYXMgZXhwb3J0ZWQgYnkgdGhlIGJ1aWxkLgorIyBFLmcgZm9yIGFuIGFscmVhZHkgYnVpbHQgaW1hZ2U6CisjLSBleHBvcnQgdGhlIHRlc3RzOgorIyAgIFRFU1RfRVhQT1JUX09OTFkgPSAiMSIKKyMgICBURVNUX1RBUkdFVCAgPSAic2ltcGxlcmVtb3RlIgorIyAgIFRFU1RfVEFSR0VUX0lQID0gIjE5Mi4xNjguNy4yIgorIyAgIFRFU1RfU0VSVkVSX0lQID0gIjE5Mi4xNjguNy4xIgorIyBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byAtYyB0ZXN0aW1hZ2UKKyMgU2V0dXAgeW91ciB0YXJnZXQsIGUuZyBmb3IgcWVtdTogcnVucWVtdSBjb3JlLWltYWdlLXNhdG8KKyMgY2QgYnVpbGQvdG1wL3Rlc3RpbWFnZS9jb3JlLWltYWdlLXNhdG8KKyMgLi9ydW5leHBvcnRlZC5weSB0ZXN0ZGF0YS5qc29uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCit0cnk6CisgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBqc29uCisKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJvZXFhIikpKQorCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBydW5UZXN0cworZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBnZXRfaG9zdF9kdW1wZXIKKworIyB0aGlzIGlzbid0IHByZXR0eSBidXQgd2UgbmVlZCBhIGZha2UgdGFyZ2V0IG9iamVjdAorIyBmb3IgcnVubmluZyB0aGUgdGVzdHMgZXh0ZXJuYWxseSBhcyB3ZSBkb24ndCBjYXJlCisjIGFib3V0IGRlcGxveS9zdGFydCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gbWV0aG9kcyAocnVuLCBjb3B5KQorY2xhc3MgRmFrZVRhcmdldChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5kYXRldGltZSA9IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsdGltZS5nbXRpbWUoKSkKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHNlbGYucG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgZGVmIGV4cG9ydFN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNzaGxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzc2hsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3NobG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3NobG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnNzaGxvZywgc3NobG9nbGluaykKKyAgICAgICAgcHJpbnQoIlNTSCBsb2cgZmlsZTogJXMiICUgIHNlbGYuc3NobG9nKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBTU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2cpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNtZCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5ydW4oY21kLCB0aW1lb3V0KQorCisgICAgZGVmIGNvcHlfdG8oc2VsZiwgbG9jYWxwYXRoLCByZW1vdGVwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X3RvKGxvY2FscGF0aCwgcmVtb3RlcGF0aCkKKworICAgIGRlZiBjb3B5X2Zyb20oc2VsZiwgcmVtb3RlcGF0aCwgbG9jYWxwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5jb3B5X2Zyb20ocmVtb3RlcGF0aCwgbG9jYWxwYXRoKQorCisKK2NsYXNzIE15RGF0YURpY3QoZGljdCk6CisgICAgZGVmIGdldFZhcihzZWxmLCBrZXksIHVudXNlZCA9IE5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXQoa2V5LCAiIikKKworY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZCA9IE5vbmUKKyAgICAgICAgc2VsZi50YXJnZXQgPSBOb25lCisKK2RlZiBtYWluKCk6CisKKyAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIDxqc29uIGZpbGU+IgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10YXJnZXQtaXAiLCBkZXN0PSJpcCIsIGhlbHA9IlRoZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgbWFjaGluZS4gVXNlIHRoaXMgdG8gXAorICAgICAgICAgICAgb3ZlcndyaXRlIHRoZSB2YWx1ZSBkZXRlcm1pbmVkIGZyb20gVEVTVF9UQVJHRVRfSVAgYXQgYnVpbGQgdGltZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgIi0tc2VydmVyLWlwIiwgZGVzdD0ic2VydmVyX2lwIiwgaGVscD0iVGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lLiBVc2UgdGhpcyB0byBcCisgICAgICAgICAgICBvdmVyd3JpdGUgdGhlIHZhbHVlIGRldGVybWluZWQgZnJvbSBURVNUX1NFUlZFUl9JUCBhdCBidWlsZCB0aW1lLiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1kIiwgIi0tZGVwbG95LWRpciIsIGRlc3Q9ImRlcGxveV9kaXIiLCBoZWxwPSJGdWxsIHBhdGggdG8gdGhlIHBhY2thZ2UgZmVlZHMsIHRoYXQgdGhpcyBcCisgICAgICAgICAgICB0aGUgY29udGVudHMgb2Ygd2hhdCB1c2VkIHRvIGJlIERFUExPWV9ESVIgb24gdGhlIGJ1aWxkIG1hY2hpbmUuIElmIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCB1c2UgdGhlIHZhbHVlIFwKKyAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUganNvbiBpZiB0aGF0IGRpcmVjdG9yeSBhY3R1YWxseSBleGlzdHMgb3IgaXQgd2lsbCBlcnJvciBvdXQuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sb2ctZGlyIiwgZGVzdD0ibG9nX2RpciIsIGhlbHA9IlRoaXMgc2V0cyB0aGUgcGF0aCBmb3IgVEVTVF9MT0dfRElSLiBJZiBub3Qgc3BlY2lmaWVkIFwKKyAgICAgICAgICAgIHRoZSBjdXJyZW50IGRpciBpcyB1c2VkLiBUaGlzIGlzIHVzZWQgZm9yIHVzdWFsbHkgY3JlYXRpbmcgYSBzc2ggbG9nIGZpbGUgYW5kIGEgc2NwIHRlc3QgZmlsZS4iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBwYXJzZXIuZXJyb3IoIkluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiBUaGUgb25lIGFuZCBvbmx5IGFyZ3VtZW50IHNob3VsZCBiZSBhIGpzb24gZmlsZSBleHBvcnRlZCBieSB0aGUgYnVpbGQgc3lzdGVtIikKKworICAgIHdpdGggb3BlbihhcmdzWzBdLCAiciIpIGFzIGY6CisgICAgICAgIGxvYWRlZCA9IGpzb24ubG9hZChmKQorCisgICAgaWYgb3B0aW9ucy5pcDoKKyAgICAgICAgbG9hZGVkWyJ0YXJnZXQiXVsiaXAiXSA9IG9wdGlvbnMuaXAKKyAgICBpZiBvcHRpb25zLnNlcnZlcl9pcDoKKyAgICAgICAgbG9hZGVkWyJ0YXJnZXQiXVsic2VydmVyX2lwIl0gPSBvcHRpb25zLnNlcnZlcl9pcAorCisgICAgZCA9IE15RGF0YURpY3QoKQorICAgIGZvciBrZXkgaW4gbG9hZGVkWyJkIl0ua2V5cygpOgorICAgICAgICBkW2tleV0gPSBsb2FkZWRbImQiXVtrZXldCisKKyAgICBpZiBvcHRpb25zLmxvZ19kaXI6CisgICAgICAgIGRbIlRFU1RfTE9HX0RJUiJdID0gb3B0aW9ucy5sb2dfZGlyCisgICAgZWxzZToKKyAgICAgICAgZFsiVEVTVF9MT0dfRElSIl0gPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICBpZiBvcHRpb25zLmRlcGxveV9kaXI6CisgICAgICAgIGRbIkRFUExPWV9ESVIiXSA9IG9wdGlvbnMuZGVwbG95X2RpcgorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRbIkRFUExPWV9ESVIiXSk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXRoIHRvIERFUExPWV9ESVIgZG9lcyBub3QgZXhpc3RzOiAlcyIgJSBkWyJERVBMT1lfRElSIl0pCisKKworICAgIHRhcmdldCA9IEZha2VUYXJnZXQoZCkKKyAgICBmb3Iga2V5IGluIGxvYWRlZFsidGFyZ2V0Il0ua2V5cygpOgorICAgICAgICBzZXRhdHRyKHRhcmdldCwga2V5LCBsb2FkZWRbInRhcmdldCJdW2tleV0pCisKKyAgICBob3N0X2R1bXBlciA9IGdldF9ob3N0X2R1bXBlcihkKQorICAgIGhvc3RfZHVtcGVyLnBhcmVudF9kaXIgPSBsb2FkZWRbImhvc3RfZHVtcGVyIl1bInBhcmVudF9kaXIiXQorICAgIGhvc3RfZHVtcGVyLmNtZHMgPSBsb2FkZWRbImhvc3RfZHVtcGVyIl1bImNtZHMiXQorCisgICAgdGMgPSBUZXN0Q29udGV4dCgpCisgICAgc2V0YXR0cih0YywgImQiLCBkKQorICAgIHNldGF0dHIodGMsICJ0YXJnZXQiLCB0YXJnZXQpCisgICAgc2V0YXR0cih0YywgImhvc3RfZHVtcGVyIiwgaG9zdF9kdW1wZXIpCisgICAgZm9yIGtleSBpbiBsb2FkZWQua2V5cygpOgorICAgICAgICBpZiBrZXkgIT0gImQiIGFuZCBrZXkgIT0gInRhcmdldCIgYW5kIGtleSAhPSAiaG9zdF9kdW1wZXIiOgorICAgICAgICAgICAgc2V0YXR0cih0Yywga2V5LCBsb2FkZWRba2V5XSkKKworICAgIHRhcmdldC5leHBvcnRTdGFydCgpCisgICAgcnVuVGVzdHModGMpCisKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmM2ZhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIHRlc3RzIGluIHRoZSBzYW1lIG5hbWVkIGRpcmVjdG9yeQorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL19wdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5YzQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL19wdGVzdC5weQpAQCAtMCwwICsxLDEyNSBAQAoraW1wb3J0IHVuaXR0ZXN0LCBvcywgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmxvZ3BhcnNlciBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCitpbXBvcnQgYmIKK2ltcG9ydCBnbG9iCitmcm9tIG9lLnBhY2thZ2VfbWFuYWdlciBpbXBvcnQgUnBtUGtnc0xpc3QKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBQdGVzdFJ1bm5lclRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICAjIGEgcHRlc3QgbG9nIHBhcnNlcgorICAgIGRlZiBwYXJzZV9wdGVzdChzZWxmLCBsb2dmaWxlKToKKyAgICAgICAgcGFyc2VyID0gTHBhcnNlcih0ZXN0XzBfcGFzc19yZWdleD0iXlBBU1M6KC4rKSIsIHRlc3RfMF9mYWlsX3JlZ2V4PSJeRkFJTDooLispIiwgc2VjdGlvbl8wX2JlZ2luX3JlZ2V4PSJeQkVHSU46IC4qLyguKykvcHRlc3QiLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PSJeRU5EOiAuKi8oLispL3B0ZXN0IikKKyAgICAgICAgcGFyc2VyLmluaXQoKQorICAgICAgICByZXN1bHQgPSBSZXN1bHQoKQorCisgICAgICAgIHdpdGggb3Blbihsb2dmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfdHVwbGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmVzdWx0X3R1cGxlID0gbGluZV90eXBlLCBjYXRlZ29yeSwgc3RhdHVzLCBuYW1lID0gcGFyc2VyLnBhcnNlX2xpbmUobGluZSkKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnYmVnaW4nOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3NlY3Rpb24gPSBuYW1lCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBsaW5lX3R5cGUgPT0gJ3NlY3Rpb24nIGFuZCBzdGF0dXMgPT0gJ2VuZCc6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAncGFzcyc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAndGVzdCcgYW5kIHN0YXR1cyA9PSAnZmFpbCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9yZShjdXJyZW50X3NlY3Rpb24sIG5hbWUsIHN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICByZXN1bHQuc29ydF90ZXN0cygpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICAjbm90ZSB0aGUgZXhpc3RpbmcgY2hhbm5lbHMgdGhhdCBhcmUgb24gdGhlIGJvYXJkIGJlZm9yZSBjcmVhdGluZyBuZXcgb25lcworIyAgICAgICAgc2VsZi5leGlzdGluZ2NoYW5uZWxzID0gc2V0KCkKKyMgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1zaG93IHwgZ3JlcCAiXFsiJywgMCkKKyMgICAgICAgIGZvciB4IGluIHJlc3VsdC5zcGxpdCgiXG4iKToKKyMgICAgICAgICAgICBzZWxmLmV4aXN0aW5nY2hhbm5lbHMuYWRkKHgpCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIgPSBIVFRQU2VydmljZShvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnNlcnZlcl9pcCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdGFydCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlci5zdG9wKCkKKyAgICAgICAgI3JlbW92ZSBjcmVhdGVkIGNoYW5uZWxzIHRvIGJlIGFibGUgdG8gcmVwZWF0IHRoZSB0ZXN0cyBvbiBzYW1lIGltYWdlCisjICAgICAgICAoc3RhdHVzLCByZXN1bHQpID0gb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC0tc2hvdyB8IGdyZXAgIlxbIicsIDApCisjICAgICAgICBmb3IgeCBpbiByZXN1bHQuc3BsaXQoIlxuIik6CisjICAgICAgICAgICAgaWYgeCBub3QgaW4gc2VsZi5leGlzdGluZ2NoYW5uZWxzOgorIyAgICAgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1yZW1vdmUgJyt4WzE6LTFdKycgLXknLCAwKQorCisgICAgZGVmIGFkZF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gc2VsZi50Yy5kLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgICAgIGRlcGxveV91cmwgPSAnaHR0cDovLyVzOiVzLyVzJyAlKHNlbGYudGFyZ2V0LnNlcnZlcl9pcCwgc2VsZi5yZXBvX3NlcnZlci5wb3J0LCBpbWFnZV9wa2d0eXBlKQorICAgICAgICBwa2dhcmNocyA9IHNlbGYudGMuZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKS5yZXBsYWNlKCItIiwiXyIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGFyY2ggaW4gb3MubGlzdGRpcignJXMvJXMnICUgKHNlbGYucmVwb19zZXJ2ZXIucm9vdF9kaXIsIGltYWdlX3BrZ3R5cGUpKToKKyAgICAgICAgICAgIGlmIGFyY2ggaW4gcGtnYXJjaHM6CisgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzbWFydCBjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCksIDApCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignc21hcnQgdXBkYXRlJywgMCkKKworICAgIGRlZiBpbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZiwgZ2xvYnM9Tm9uZSk6CisgICAgICAgIGluc3RhbGxlZF9wa2dzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsZWRfcGtncy50eHQiKQorICAgICAgICBzZWxmLnBrZ3NfbGlzdCA9IFJwbVBrZ3NMaXN0KG9lUnVudGltZVRlc3QudGMuZCwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ2FyY2hfdmFyJywgVHJ1ZSksIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ29zX3ZhcicsIFRydWUpKQorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbGVkX3BrZ3NfZmlsZSwgIncrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy53cml0ZShzZWxmLnBrZ3NfbGlzdC5saXN0KCJhcmNoIikpCisKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib2UtcGtnZGF0YS11dGlsIiksCisgICAgICAgICAgICAgICAiLXAiLCBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLCAiZ2xvYiIsIGluc3RhbGxlZF9wa2dzX2ZpbGUsCisgICAgICAgICAgICAgICBnbG9ic10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIC4uLiIpCisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICByZXR1cm4gY29tcGxlbWVudGFyeV9wa2dzLnNwbGl0KCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wdGVzdF9sb2cgPSBvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVEVTVF9MT0dfRElSIixUcnVlKSwgInB0ZXN0LSVzLmxvZyIgJSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdEQVRFVElNRScsIFRydWUpKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wdGVzdHJ1bm5lcihzZWxmKToKKyAgICAgICAgc2VsZi5hZGRfc21hcnRfY2hhbm5lbCgpCisgICAgICAgIChydW5uZXJzdGF0dXMsIHJlc3VsdCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIHB0ZXN0LXJ1bm5lcicsIDApCisgICAgICAgIGNvbmQgPSBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInB0ZXN0LXJ1bm5lciIpIGFuZCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInB0ZXN0IikgYW5kIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiLXB0ZXN0IikgYW5kIChydW5uZXJzdGF0dXMgIT0gMCkKKyAgICAgICAgaWYgY29uZDoKKyAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9wYWNrYWdlcyhzZWxmLmluc3RhbGxfY29tcGxlbWVudGFyeSgiKi1wdGVzdCIpKQorICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKFsncHRlc3QtcnVubmVyJ10pCisKKyAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignL3Vzci9iaW4vcHRlc3QtcnVubmVyID4gL3RtcC9wdGVzdC5sb2cgMj4mMScsIDApCisgICAgICAgICNleGl0IGNvZGUgaXMgIT0wIGV2ZW4gaWYgcHRlc3QtcnVubmVyIGV4ZWN1dGVzIGJlY2F1c2Ugc29tZSBwdGVzdCB0ZXN0cyBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyc3RhdHVzICE9IDEyNywgbXNnPSJDYW5ub3QgZXhlY3V0ZSBwdGVzdC1ydW5uZXIhIikKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV9mcm9tKCcvdG1wL3B0ZXN0LmxvZycsIHNlbGYucHRlc3RfbG9nKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5wdGVzdF9sb2csICJwdGVzdC5sb2ciKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucGFyc2VfcHRlc3QoInB0ZXN0LmxvZyIpCisgICAgICAgIGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uID0gIi4vcmVzdWx0cyIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShsb2dfcmVzdWx0c190b19sb2NhdGlvbikKKyAgICAgICAgb3MubWFrZWRpcnMobG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24pCisKKyAgICAgICAgcmVzdWx0LmxvZ19hc19maWxlcyhsb2dfcmVzdWx0c190b19sb2NhdGlvbiwgdGVzdF9zdGF0dXMgPSBbJ3Bhc3MnLCdmYWlsJ10pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3FlbXV0aW55LnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL19xZW11dGlueS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MyOWYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL19xZW11dGlueS5weQpAQCAtMCwwICsxLDkgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLnFlbXV0aW55cnVubmVyIGltcG9ydCAqCisKK2NsYXNzIFFlbXVUaW55VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiB0ZXN0X2Jvb3RfdGlueShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bl9zZXJpYWwoJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ5b2N0by10aW55IiBpbiBvdXRwdXQsIG1zZz0iQ2Fubm90IGRldGVjdCBwb2t5IHRpbnkgYm9vdCEiKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGN2cy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGN2cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZjYmZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZnRwLmdudS5vcmcvbm9uLWdudS9jdnMvc291cmNlL2ZlYXR1cmUvMS4xMi4xMy9jdnMtMS4xMi4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2N2cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9pbnN0YWxsKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBpbnN0YWxsIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllMjUyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZGlwdGFibGVzLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFRhcmdldEJ1aWxkUHJvamVjdAorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2ZpbGVzL2lwdGFibGVzLTEuNC4xMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkc3Vkb2t1LnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkc3Vkb2t1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmIwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyOCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgU3Vkb2t1VGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBUYXJnZXRCdWlsZFByb2plY3Qob2VSdW50aW1lVGVzdC50Yy50YXJnZXQsIG9lUnVudGltZVRlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgQHRlc3RjYXNlKDIwNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X3N1ZG9rdShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2NvbmZpZ3VyZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIGNvbmZpZ3VyZSBmYWlsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9tYWtlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgbWFrZSBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjllNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvY29ubm1hbi5weQpAQCAtMCwwICsxLDU0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImNvbm5tYW4iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gY29ubm1hbiBwYWNrYWdlIGluIGltYWdlIikKKworCitjbGFzcyBDb25ubWFuVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXJ2aWNlX3N0YXR1cyhzZWxmLCBzZXJ2aWNlKToKKyAgICAgICAgaWYgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJzeXN0ZW1kIik6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhdHVzIC1sICVzJyAlIHNlcnZpY2UpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBnZXQgc3RhdHVzIG9yIGxvZ3MgZm9yICVzIiAlIHNlcnZpY2UKKworICAgIEB0ZXN0Y2FzZSg5NjEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9jb25ubWFuZF9oZWxwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL3NiaW4vY29ubm1hbmQgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMjIxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2Nvbm5tYW5kX2hlbHAnKQorICAgIGRlZiB0ZXN0X2Nvbm5tYW5kX3J1bm5pbmcoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIFtjXW9ubm1hbmQnKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHByaW50IHNlbGYuc2VydmljZV9zdGF0dXMoImNvbm5tYW4iKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBjb25ubWFuZCBwcm9jZXNzIHJ1bm5pbmciKQorCisgICAgQHRlc3RjYXNlKDIyMykKKyAgICBkZWYgdGVzdF9vbmx5X29uZV9jb25ubWFuZF9pbl9iYWNrZ3JvdW5kKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIE9ubHkgb25lIGNvbm5tYW5kIGluIGJhY2tncm91bmQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFRoZXJlIHdpbGwgYmUgb25seSBvbmUgY29ubm1hbmQgaW5zdGFuY2UgaW4gYmFja2dyb3VuZC4KKyAgICAgICAgUHJvZHVjdDogICAgIEJTUHMKKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRydSBHZW9yZ2VzY3UgPGFsZXhhbmRydS5jLmdlb3JnZXNjdUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgJ2Nvbm5tYW5kJyBpcyBydW5uaW5nIGluIGJhY2tncm91bmQKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGZpbmQgImNvbm5tYW5kIiBwcm9jZXNzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZC4nKQorCisgICAgICAgICMgU3RhcnQgYSBuZXcgaW5zdGFuY2Ugb2YgJ2Nvbm5tYW5kJworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjb25ubWFuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIHN0YXJ0IGEgbmV3ICJjb25ubWFuZCIgcHJvY2Vzcy4nKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgb25seSBvbmUgJ2Nvbm5tYW5kJyBpcyBydW5uaW5nIGluIGJhY2tncm91bmQKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCB8IHdjIC1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gZmluZCAiY29ubm1hbmQiIHByb2Nlc3MgcnVubmluZyBpbiBiYWNrZ3JvdW5kLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgaW50KG91dHB1dCksICdGb3VuZCB7fSBjb25ubWFuZCBwcm9jZXNzZXMgcnVubmluZywgZXhwZWN0ZWQgMS4nLmZvcm1hdChvdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RhdGUucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThmZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RhdGUucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitjbGFzcyBEYXRlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIFRydWUpID09ICJzeXN0ZW1kIjoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0b3Agc3lzdGVtZC10aW1lc3luY2QnKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RhcnQgc3lzdGVtZC10aW1lc3luY2QnKQorCisgICAgQHRlc3RjYXNlKDIxMSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2RhdGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2RhdGUgKyIlWS0lbS0lZCAlVCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gZ2V0IGluaXRpYWwgZGF0ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIG9sZERhdGUgPSBvdXRwdXQKKworICAgICAgICBzYW1wbGVEYXRlID0gJyIyMDE2LTA4LTA5IDEwOjAwOjAwIicKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGF0ZSAtcyAlcyIgJSBzYW1wbGVEYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJEYXRlIHNldCBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImRhdGUgLVIiKQorICAgICAgICBwID0gcmUubWF0Y2goJ1R1ZSwgMDkgQXVnIDIwMTYgMTA6MDA6Li4gXCswMDAwJywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCwgbXNnPSJUaGUgZGF0ZSB3YXMgbm90IHNldCBjb3JyZWN0bHksIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2RhdGUgLXMgIiVzIicgJSBvbGREYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gcmVzZXQgZGF0ZSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGYucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1NjlkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKworY2xhc3MgRGZUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIzNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0X2RmKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImRmIC8gfCBzZWQgLW4gJzJwJyB8IGF3ayAne3ByaW50ICQ0fSciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KG91dHB1dCk+NTEyMCwgbXNnPSJOb3QgZW5vdWdoIHNwYWNlIG9uIGltYWdlLiBDdXJyZW50IHNpemUgaXMgJXMiICUgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RtZXNnLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RtZXNnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MzE0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCisKK2NsYXNzIERtZXNnVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9kbWVzZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZG1lc2cgfCBncmVwIC12IG1tY2ktcGwxOHggfCBncmVwIC12ICJlcnJvciBjaGFuZ2luZyBuZXQgaW50ZXJmYWNlIG5hbWUiIHwgZ3JlcCAtaXYgImRtYSB0aW1lb3V0IiB8IGdyZXAgLXYgdXNiaGlkIHwgZ3JlcCAtaSBlcnJvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2cgPSAiRXJyb3IgbWVzc2FnZXMgaW4gZG1lc2cgbG9nOiAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2QuYyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODMzOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2QuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitzdGF0aWMgaW50IF9faW5pdCBoZWxsb19pbml0KHZvaWQpCit7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkhlbGxvIHdvcmxkIVxuIik7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGVsbG9fY2xlYW51cCh2b2lkKQoreworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJDbGVhbmluZyB1cCBoZWxsb21vZC5cbiIpOworfQorCittb2R1bGVfaW5pdChoZWxsb19pbml0KTsKK21vZHVsZV9leGl0KGhlbGxvX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2RfbWFrZWZpbGUgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvaGVsbG9tb2RfbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkyZDVjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKK29iai1tIDo9IGhlbGxvbW9kLm8KK0tESVIgOj0gL3Vzci9zcmMva2VybmVsCisKK2FsbDoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkgbW9kdWxlcworCitjbGVhbjoKKwkkKE1BS0UpIC1DICQoS0RJUikgTT0kKFBXRCkgY2xlYW4KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmMgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODM4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jCkBAIC0wLDAgKzEsMjYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZG91YmxlIGNvbnZlcnQobG9uZyBsb25nIGwpCit7CisgIHJldHVybiAoZG91YmxlKWw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKSB7CisKKyAgbG9uZyBsb25nIGwgPSAxMDsKKyAgZG91YmxlIGY7CisgIGRvdWJsZSBjaGVjayA9IDEwLjA7CisKKyAgZiA9IGNvbnZlcnQobCk7CisgIHByaW50ZigiY29udmVydDogJWxsZCA9PiAlZlxuIiwgbCwgZik7CisgIGlmICggZiAhPSBjaGVjayApIGV4aXQoMSk7CisKKyAgZiA9IDEyMzQuNjc7CisgIGNoZWNrID0gMTIzNC4wOworICBwcmludGYoImZsb29yZiglZikgPSAlZlxuIiwgZiwgZmxvb3JmKGYpKTsKKyAgaWYgKCBmbG9vcmYoZikgIT0gY2hlY2spIGV4aXQoMSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jcHAgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxYTc2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcApAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxsaW1pdHM+CisKK2ludCBtYWluKCkge30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5wbCBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OWM4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5wbApAQCAtMCwwICsxLDIgQEAKKyRhID0gOS4wMWUrMjEgLSA5LjAxZSsyMSArIDAuMDE7CitwcmludCAoInRoZSB2YWx1ZSBvZiBhIGlzICIsICRhLCAiXG4iKTsKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhMjI3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnB5CkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IG9zCisKK29zLnN5c3RlbSgndG91Y2ggL3RtcC90ZXN0ZmlsZS5weXRob24nKQorCithID0gOS4wMWUrMjEgLSA5LjAxZSsyMSArIDAuMDEKK3ByaW50ICJ0aGUgdmFsdWUgb2YgYSBpcyAlcyIgJSBhCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdG1ha2VmaWxlIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3RtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE4NDRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3RtYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK3Rlc3Q6IHRlc3QubworCWdjYyAtbyB0ZXN0IHRlc3QubyAtbG0KK3Rlc3QubzogdGVzdC5jCisJZ2NjIC1jIHRlc3QuYworCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZ2NjLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2djYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBjZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2djYy5weQpAQCAtMCwwICsxLDQ3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LmMiKSwgIi90bXAvdGVzdC5jIikKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3RtYWtlZmlsZSIpLCAiL3RtcC90ZXN0bWFrZWZpbGUiKQorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdC5jcHAiKSwgIi90bXAvdGVzdC5jcHAiKQorCisgICAgQHRlc3RjYXNlKDIwMykKKyAgICBkZWYgdGVzdF9nY2NfY29tcGlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZ2NjIC90bXAvdGVzdC5jIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnY2MgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIwMCkKKyAgICBkZWYgdGVzdF9ncHBfY29tcGlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZysrIC90bXAvdGVzdC5jIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnKysgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNDIpCisgICAgZGVmIHRlc3RfZ3BwMl9jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnKysgL3RtcC90ZXN0LmNwcCAtbyAvdG1wL3Rlc3QgLWxtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iZysrIGNvbXBpbGUgZmFpbGVkLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL3RtcC90ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0icnVubmluZyBjb21waWxlZCBmaWxlIGZhaWxlZCwgb3V0cHV0ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyMDQpCisgICAgZGVmIHRlc3RfbWFrZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignY2QgL3RtcDsgbWFrZSAtZiB0ZXN0bWFrZWZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIG1ha2UgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LmMgL3RtcC90ZXN0Lm8gL3RtcC90ZXN0IC90bXAvdGVzdG1ha2VmaWxlIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9rZXJuZWxtb2R1bGUucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUva2VybmVsbW9kdWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlODE3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUva2VybmVsbW9kdWxlLnB5CkBAIC0wLDAgKzEsMzQgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgS2VybmVsTW9kdWxlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgImhlbGxvbW9kLmMiKSwgIi90bXAvaGVsbG9tb2QuYyIpCisgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJoZWxsb21vZF9tYWtlZmlsZSIpLCAiL3RtcC9NYWtlZmlsZSIpCisKKyAgICBAdGVzdGNhc2UoJzMxNicpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9nY2NfY29tcGlsZScpCisgICAgZGVmIHRlc3Rfa2VybmVsX21vZHVsZShzZWxmKToKKyAgICAgICAgY21kcyA9IFsKKyAgICAgICAgICAgICdjZCAvdXNyL3NyYy9rZXJuZWwgJiYgbWFrZSBzY3JpcHRzJywKKyAgICAgICAgICAgICdjZCAvdG1wICYmIG1ha2UnLAorICAgICAgICAgICAgJ2NkIC90bXAgJiYgaW5zbW9kIGhlbGxvbW9kLmtvJywKKyAgICAgICAgICAgICdsc21vZCB8IGdyZXAgaGVsbG9tb2QnLAorICAgICAgICAgICAgJ2RtZXNnIHwgZ3JlcCBIZWxsbycsCisgICAgICAgICAgICAncm1tb2QgaGVsbG9tb2QnLCAnZG1lc2cgfCBncmVwICJDbGVhbmluZyB1cCBoZWxsb21vZCInCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBjbWQgaW4gY21kczoKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oY21kLCA5MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJcbiIuam9pbihbY21kLCBvdXRwdXRdKSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdybSAtZiAvdG1wL01ha2VmaWxlIC90bXAvaGVsbG9tb2QuYycpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbGRkLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xkZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2IzODg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xkZC5weQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgTGRkVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5NjIpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9sZGRfZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBsZGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gImxkZCBkb2VzIG5vdCBleGlzdCBpbiBQQVRIOiB3aGljaCBsZGQ6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyMzkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfbGRkX2V4aXN0cycpCisgICAgZGVmIHRlc3RfbGRkX3J0bGRsaXN0X2NoZWNrKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdmb3IgaSBpbiAkKHdoaWNoIGxkZCB8IHhhcmdzIGNhdCB8IGdyZXAgIl5SVExETElTVCJ8Y3V0IC1kXCc9XCcgLWYyfHRyIC1kIFwnIlwnKTsgZG8gdGVzdCAtZiAkaSAmJiBlY2hvICRpICYmIGJyZWFrOyBkb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJsZGQgcGF0aCBub3QgY29ycmVjdCBvciBSVExETElTVCBmaWxlcyBkb24ndCBleGlzdC4gIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9sb2dyb3RhdGUucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbG9ncm90YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZDc5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbG9ncm90YXRlLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMgVGhpcyB0ZXN0IHNob3VsZCBjb3ZlciBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvdHJfc2hvd19jYXNlLmNnaT9jYXNlX2lkPTI4OSB0ZXN0Y2FzZQorIyBOb3RlIHRoYXQgdGhlIGltYWdlIHVuZGVyIHRlc3QgbXVzdCBoYXZlIGxvZ3JvdGF0ZSBpbnN0YWxsZWQKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJsb2dyb3RhdGUiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gbG9ncm90YXRlIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIExvZ3JvdGF0ZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zc2giKQorICAgIGRlZiB0ZXN0XzFfbG9ncm90YXRlX3NldHVwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdta2RpciAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkNvdWxkIG5vdCBjcmVhdGUgbG9ncm90YXRlX2Rpci4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInNlZCAtaSAncyN3dG1wIHsjd3RtcCB7XFxuICAgIG9sZGRpciAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXIjJyAvZXRjL2xvZ3JvdGF0ZS5jb25mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJDb3VsZCBub3Qgd3JpdGUgdG8gbG9ncm90YXRlLmNvbmYgZmlsZS4gU3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcykiICUgKHN0YXR1cywgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgyODkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3RfMV9sb2dyb3RhdGVfc2V0dXAiKQorICAgIGRlZiB0ZXN0XzJfbG9ncm90YXRlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUuY29uZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAibG9ncm90YXRlIHNlcnZpY2UgY291bGQgbm90IGJlIHJlbG9hZGVkLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsIG91dHB1dCkpCisgICAgICAgIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignbHMgLWxhIC9ob21lL3Jvb3QvbG9ncm90YXRlX2Rpci8gfCB3YyAtbCcpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQob3V0cHV0KT49MywgbXNnID0gIm5ldyBsb2dmaWxlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBMaXN0IG9mIGZpbGVzIHdpdGhpbiBsb2cgZGlyZWN0b3J5OiAlcyIgJShzZWxmLnRhcmdldC5ydW4oJ2xzIC1sYSAvaG9tZS9yb290L2xvZ3JvdGF0ZV9kaXInKVsxXSkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbXVsdGlsaWIucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbXVsdGlsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiY2M0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weQpAQCAtMCwwICsxLDQ4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG11bHRpbGlicyA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIk1VTFRJTElCUyIsIFRydWUpIG9yICIiCisgICAgaWYgIm11bHRpbGliOmxpYjMyIiBub3QgaW4gbXVsdGlsaWJzOgorICAgICAgICBza2lwTW9kdWxlKCJ0aGlzIGlzbid0IGEgbXVsdGlsaWI6bGliMzIgaW1hZ2UiKQorCisKK2NsYXNzIE11bHRpbGliVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIGRlZiBwYXJzZShzZWxmLCBzKToKKyAgICAgICAgIiIiCisgICAgICAgIFBhcnNlIHRoZSBvdXRwdXQgb2YgcmVhZGVsZiAtaCBhbmQgcmV0dXJuIHRoZSBiaW5hcnkgY2xhc3MsIG9yIGZhaWwuCisgICAgICAgICIiIgorICAgICAgICBsID0gW2wuc3BsaXQoKVsxXSBmb3IgbCBpbiBzLnNwbGl0KCdcbicpIGlmICJDbGFzczoiIGluIGxdCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByZXR1cm4gbFswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDYW5ub3QgcGFyc2UgcmVhZGVsZiBvdXRwdXRcbiIgKyBzKQorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9jaGVja19tdWx0aWxpYl9saWJjKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhhdCBhIG11bHRpbGliIGltYWdlIGhhcyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGxpYmMgaW4uCisgICAgICAgICIiIgorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2xpYi9saWJjLnNvLjYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIkZhaWxlZCB0byByZWFkZWxmIC9saWIvbGliYy5zby42IikKKyAgICAgICAgY2xhc3MzMiA9IHNlbGYucGFyc2Uob3V0cHV0KQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2xpYjY0L2xpYmMuc28uNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL2xpYjY0L2xpYmMuc28uNiIpCisgICAgICAgIGNsYXNzNjQgPSBzZWxmLnBhcnNlKG91dHB1dCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzMzIsICJFTEYzMiIsIG1zZz0iL2xpYi9saWJjLnNvLjYgaXNuJ3QgRUxGMzIgKGlzICVzKSIgJSBjbGFzczMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzNjQsICJFTEY2NCIsIG1zZz0iL2xpYjY0L2xpYmMuc28uNiBpc24ndCBFTEY2NCAoaXMgJXMpIiAlIGNsYXNzNjQpCisKKyAgICBAdGVzdGNhc2UoJzI3OScpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfY2hlY2tfbXVsdGlsaWJfbGliYycpCisgICAgZGVmIHRlc3RfZmlsZV9jb25ubWFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCdsaWIzMi1jb25ubWFuLWdub21lJyksIG1zZz0iVGhpcyB0ZXN0IGFzc3VtZXMgbGliMzItY29ubm1hbi1nbm9tZSBpcyBpbnN0YWxsZWQiKQorCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL3Vzci9iaW4vY29ubm1hbi1hcHBsZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgIkZhaWxlZCB0byByZWFkZWxmIC91c3IvYmluL2Nvbm5tYW4tYXBwbGV0IikKKyAgICAgICAgdGhlY2xhc3MgPSBzZWxmLnBhcnNlKG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVjbGFzcywgIkVMRjMyIiwgbXNnPSJjb25ubWFuLWFwcGxldCBpc24ndCBFTEYzMiAoaXMgJXMpIiAlIHRoZWNsYXNzKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhbS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9wYW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyMDVjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9wYW0ucHkKQEAgLTAsMCArMSwyNSBAQAorIyBUaGlzIHRlc3Qgc2hvdWxkIGNvdmVyIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9Mjg3IHRlc3RjYXNlCisjIE5vdGUgdGhhdCB0aGUgaW1hZ2UgdW5kZXIgdGVzdCBtdXN0IGhhdmUgInBhbSIgaW4gRElTVFJPX0ZFQVRVUkVTCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFtIik6CisgICAgICAgIHNraXBNb2R1bGUoInRhcmdldCBkb2Vzbid0IGhhdmUgJ3BhbScgaW4gRElTVFJPX0ZFQVRVUkVTIikKKworCitjbGFzcyBQYW1CYXNpY1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjg3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfcGFtKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dpbiAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMSwgbXNnID0gImxvZ2luIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncGFzc3dkIC0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAicGFzc3dkIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3UgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJzdSBjb21tYW5kIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFN0YXR1cyBhbmQgb3V0cHV0OiVzIGFuZCAlcyIgJShzdGF0dXMsIG91dHB1dCkpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VzZXJhZGQgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJ1c2VyYWRkIGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFyc2Vsb2dzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDk0N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFyc2Vsb2dzLnB5CkBAIC0wLDAgKzEsMjU3IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKyNpbiB0aGUgZnV0dXJlIHRoZXNlIGxpc3RzIGNvdWxkIGJlIG1vdmVkIG91dHNpZGUgb2YgbW9kdWxlCitlcnJvcnMgPSBbImVycm9yIiwgImNhbm5vdCIsICJjYW5cJ3QiLCAiZmFpbGVkIl0KKworY29tbW9uX2Vycm9ycyA9IFsKKyAgICAiKFdXKSB3YXJuaW5nLCAoRUUpIGVycm9yLCAoTkkpIG5vdCBpbXBsZW1lbnRlZCwgKD8/KSB1bmtub3duLiIsCisgICAgImRtYSB0aW1lb3V0IiwKKyAgICAiY2FuXCd0IGFkZCBoaWQgZGV2aWNlOiIsCisgICAgInVzYmhpZDogcHJvYmUgb2YgIiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX0VSUk9SKSIsCisgICAgIl9PU0MgZmFpbGVkIChBRV9TVVBQT1JUKSIsCisgICAgIkFFX0FMUkVBRFlfRVhJU1RTIiwKKyAgICAiQUNQSSBfT1NDIHJlcXVlc3QgZmFpbGVkIChBRV9TVVBQT1JUKSIsCisgICAgImNhblwndCBkaXNhYmxlIEFTUE0iLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgXCJ2ZXNhXCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgdmVzYSIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcIm1vZGVzZXR0aW5nXCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgbW9kZXNldHRpbmciLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgXCJnbHhcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcImZiZGV2XCIiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgZmJkZXYiLAorICAgICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgZ2x4IiwKKyAgICAiW2RybV0gQ2Fubm90IGZpbmQgYW55IGNydGMgb3Igc2l6ZXMgLSBnb2luZyAxMDI0eDc2OCIsCisgICAgIl9PU0MgZmFpbGVkIChBRV9OT1RfRk9VTkQpOyBkaXNhYmxpbmcgQVNQTSIsCisgICAgIk9wZW4gQUNQSSBmYWlsZWQgKC92YXIvcnVuL2FjcGlkLnNvY2tldCkgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpIiwKKyAgICAiTlggKEV4ZWN1dGUgRGlzYWJsZSkgcHJvdGVjdGlvbiBjYW5ub3QgYmUgZW5hYmxlZDogbm9uLVBBRSBrZXJuZWwhIiwKKyAgICAiaGQuOiBwb3NzaWJseSBmYWlsZWQgb3Bjb2RlIiwKKyAgICAnTkVUTElOSyBJTklUSUFMSVpBVElPTiBGQUlMRUQnLAorICAgICdrZXJuZWw6IENhbm5vdCBmaW5kIG1hcCBmaWxlJywKKyAgICAnb21hcF9od21vZDogZGVidWdzczogX3dhaXRfdGFyZ2V0X2Rpc2FibGUgZmFpbGVkJywKKyAgICAnVkdBIGFyYml0ZXI6IGNhbm5vdCBvcGVuIGtlcm5lbCBhcmJpdGVyLCBubyBtdWx0aS1jYXJkIHN1cHBvcnQnLAorICAgICdGYWlsZWQgdG8gZmluZCBVUkw6aHR0cDovL2lwdjQuY29ubm1hbi5uZXQvb25saW5lL3N0YXR1cy5odG1sJywKKyAgICAnT25saW5lIGNoZWNrIGZhaWxlZCBmb3InLAorICAgIF0KKworeDg2X2NvbW1vbiA9IFsKKyAgICAnW2RybTpwc2JfZG9faW5pdF0gKkVSUk9SKiBEZWJ1ZyBpcycsCisgICAgJ3dyb25nIEVMRiBjbGFzcycsCisgICAgJ0NvdWxkIG5vdCBlbmFibGUgUG93ZXJCdXR0b24gZXZlbnQnLAorICAgICdwcm9iZSBvZiBMTlhQV1JCTjowMCBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorXSArIGNvbW1vbl9lcnJvcnMKKworcWVtdXg4Nl9jb21tb24gPSBbCisgICAgJ0Zhc3QgVFNDIGNhbGlicmF0aW9uJywgCisgICAgJ3dyb25nIEVMRiBjbGFzcycsCisgICAgImZhaWwgdG8gYWRkIE1NQ09ORklHIGluZm9ybWF0aW9uLCBjYW4ndCBhY2Nlc3MgZXh0ZW5kZWQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdW5kZXIgdGhpcyBicmlkZ2UuIiwKKyAgICAiY2FuJ3QgY2xhaW0gQkFSICIsCitdICsgY29tbW9uX2Vycm9ycworCitpZ25vcmVfZXJyb3JzID0geyAKKyAgICAnZGVmYXVsdCcgOiBjb21tb25fZXJyb3JzLAorICAgICdxZW11eDg2JyA6IFsKKyAgICAgICAgJ0ZhaWxlZCB0byBhY2Nlc3MgcGVyZmN0ciBtc3IgKE1TUicsCisgICAgICAgIF0gKyBxZW11eDg2X2NvbW1vbiwKKyAgICAncWVtdXg4Ni02NCcgOiBxZW11eDg2X2NvbW1vbiwKKyAgICAncWVtdW1pcHMnIDogWworICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgJ3BjaSAwMDAwOjAwOjAwLjA6IFtGaXJtd2FyZSBCdWddOiByZWcgMHguLjogaW52YWxpZCBCQVIgKGNhblwndCBzaXplKScsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11bWlwczY0JyA6IFsKKyAgICAgICAgJ3BjaSAwMDAwOjAwOjAwLjA6IFtGaXJtd2FyZSBCdWddOiByZWcgMHguLjogaW52YWxpZCBCQVIgKGNhblwndCBzaXplKScsCisgICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdXBwYycgOiBbCisgICAgICAgICdQQ0kgMDAwMDowMCBDYW5ub3QgcmVzZXJ2ZSBMZWdhY3kgSU8gW2lvICAweDAwMDAtMHgwZmZmXScsCisgICAgICAgICdob3N0IHNpZGUgODAtd2lyZSBjYWJsZSBkZXRlY3Rpb24gZmFpbGVkLCBsaW1pdGluZyBtYXggc3BlZWQnLAorICAgICAgICAnbW9kZSAiNjQweDQ4MCIgdGVzdCBmYWlsZWQnLAorICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXVhcm0nIDogWworICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowNSBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorICAgICAgICAnbW1jaS1wbDE4eDogcHJvYmUgb2YgZnBnYTowYiBmYWlsZWQgd2l0aCBlcnJvciAtMjInLAorICAgICAgICAnRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJnbHgiJworICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdWFybTY0JyA6IFsKKyAgICAgICAgJ0ZhdGFsIHNlcnZlciBlcnJvcjonLAorICAgICAgICAnKEVFKSBTZXJ2ZXIgdGVybWluYXRlZCB3aXRoIGVycm9yICgxKS4gQ2xvc2luZyBsb2cgZmlsZS4nLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnZW1lbmxvdycgOiBbCisgICAgICAgICdbRmlybXdhcmUgQnVnXTogQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2IiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSAicHNiZHJ2IicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2JkcnYnLAorICAgICAgICAnKEVFKSBvcGVuIC9kZXYvZmIwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JywKKyAgICAgICAgJyhFRSkgQUlHTFg6IHJldmVydGluZyB0byBzb2Z0d2FyZSByZW5kZXJpbmcnLAorICAgICAgICBdICsgeDg2X2NvbW1vbiwKKyAgICAnY29yZTJfMzInIDogWworICAgICAgICAnQUNQSTogTm8gX0JRQyBtZXRob2QsIGNhbm5vdCBkZXRlcm1pbmUgaW5pdGlhbCBicmlnaHRuZXNzJywKKyAgICAgICAgJ1tGaXJtd2FyZSBCdWddOiBBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2JkcnYiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYmRydicsCisgICAgICAgICcoRUUpIG9wZW4gL2Rldi9mYjA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLAorICAgICAgICAnKEVFKSBBSUdMWDogcmV2ZXJ0aW5nIHRvIHNvZnR3YXJlIHJlbmRlcmluZycsCisgICAgICAgIF0gKyB4ODZfY29tbW9uLAorICAgICdpbnRlbC1jb3JlaTctNjQnIDogWworICAgICAgICAiY29udHJvbGxlciBjYW4ndCBkbyBERVZTTFAsIHR1cm5pbmcgb2ZmIiwKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ2Nyb3duYmF5JyA6IHg4Nl9jb21tb24sCisgICAgJ2dlbmVyaWN4ODYnIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4Ni02NCcgOiB4ODZfY29tbW9uLAorICAgICdlZGdlcm91dGVyJyA6IFsKKyAgICAgICAgJ0ZhdGFsIHNlcnZlciBlcnJvcjonLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnbWlubm93JyA6IFsKKyAgICAgICAgJ25ldGxpbmsgaW5pdCBmYWlsZWQnLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnamFzcGVyZm9yZXN0JyA6IFsKKyAgICAgICAgJ0FjdGl2YXRlZCBzZXJ2aWNlIFwnb3JnLmJsdWV6XCcgZmFpbGVkOicsCisgICAgICAgICdVbmFibGUgdG8gZmluZCBORkMgbmV0bGluayBmYW1pbHknLAorICAgICAgICAnbmV0bGluayBpbml0IGZhaWxlZCcsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorfQorCitsb2dfbG9jYXRpb25zID0gWyIvdmFyL2xvZy8iLCIvdmFyL2xvZy9kbWVzZyIsICIvdG1wL2RtZXNnX291dHB1dC5sb2ciXQorCitjbGFzcyBQYXJzZUxvZ3NUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCisgICAgICAgIHNlbGYuaWdub3JlX2Vycm9ycyA9IGlnbm9yZV9lcnJvcnMKKyAgICAgICAgc2VsZi5sb2dfbG9jYXRpb25zID0gbG9nX2xvY2F0aW9ucworICAgICAgICBzZWxmLm1zZyA9ICIiCisKKyAgICBkZWYgZ2V0TWFjaGluZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorCisgICAgI2dldCBzb21lIGluZm9ybWF0aW9uIG9uIHRoZSBDUFUgb2YgdGhlIG1hY2hpbmUgdG8gZGlzcGxheSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvdXRwdXQuIFRoaXMgaW5mbyBtaWdodCBiZSB1c2VmdWwgaW4gc29tZSBjYXNlcy4KKyAgICBkZWYgZ2V0SGFyZHdhcmVJbmZvKHNlbGYpOgorICAgICAgICBod2kgPSAiIgorICAgICAgICAoc3RhdHVzLCBjcHVfbmFtZSkgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcIm1vZGVsIG5hbWVcIiB8IGhlYWQgLW4xIHwgYXdrICdCRUdJTntGUz1cIjpcIn17cHJpbnQgJDJ9JyIpCisgICAgICAgIChzdGF0dXMsIGNwdV9waHlzaWNhbF9jb3JlcykgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcImNwdSBjb3Jlc1wiIHwgaGVhZCAtbjEgfCBhd2sgeydwcmludCAkNCd9IikKKyAgICAgICAgKHN0YXR1cywgY3B1X2xvZ2ljYWxfY29yZXMpID0gc2VsZi50YXJnZXQucnVuKCJjYXQgL3Byb2MvY3B1aW5mbyB8IGdyZXAgXCJwcm9jZXNzb3JcIiB8IHdjIC1sIikKKyAgICAgICAgKHN0YXR1cywgY3B1X2FyY2gpID0gc2VsZi50YXJnZXQucnVuKCJ1bmFtZSAtbSIpCisgICAgICAgIGh3aSArPSAiTWFjaGluZSBpbmZvcm1hdGlvbjogXG4iCisgICAgICAgIGh3aSArPSAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICBod2kgKz0gIk1hY2hpbmUgbmFtZTogIitzZWxmLmdldE1hY2hpbmUoKSsiXG4iCisgICAgICAgIGh3aSArPSAiQ1BVOiAiK3N0cihjcHVfbmFtZSkrIlxuIgorICAgICAgICBod2kgKz0gIkFyY2g6ICIrc3RyKGNwdV9hcmNoKSsiXG4iCisgICAgICAgIGh3aSArPSAiUGh5c2ljYWwgY29yZXM6ICIrc3RyKGNwdV9waHlzaWNhbF9jb3JlcykrIlxuIgorICAgICAgICBod2kgKz0gIkxvZ2ljYWwgY29yZXM6ICIrc3RyKGNwdV9sb2dpY2FsX2NvcmVzKSsiXG4iCisgICAgICAgIGh3aSArPSAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICByZXR1cm4gaHdpCisKKyAgICAjZ28gdGhyb3VnaCB0aGUgbG9nIGxvY2F0aW9ucyBwcm92aWRlZCBhbmQgaWYgaXQncyBhIGZvbGRlciBjcmVhdGUgYSBsaXN0IHdpdGggYWxsIHRoZSAubG9nIGZpbGVzIGluIGl0LCBpZiBpdCdzIGEgZmlsZSBqdXN0IGFkZCAKKyAgICAjaXQgdG8gdGhhdCBsaXN0CisgICAgZGVmIGdldExvZ0xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CisgICAgICAgIGxvZ3MgPSBbXQorICAgICAgICBmb3IgbG9jYXRpb24gaW4gbG9nX2xvY2F0aW9uczoKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInRlc3QgLWYgIitzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKToKKyAgICAgICAgICAgICAgICBsb2dzLmFwcGVuZChzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJ0ZXN0IC1kICIrc3RyKGxvY2F0aW9uKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJmaW5kICIrc3RyKGxvY2F0aW9uKSsiLyoubG9nIC1tYXhkZXB0aCAxIC10eXBlIGYiKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxvZ2ZpbGUgaW4gb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKG9zLnBhdGguam9pbihsb2NhdGlvbixzdHIobG9nZmlsZSkpKQorICAgICAgICByZXR1cm4gbG9ncworCisgICAgI2NvcHkgdGhlIGxvZyBmaWxlcyB0byBiZSBwYXJzZWQgbG9jYWxseQorICAgIGRlZiB0cmFuc2Zlcl9sb2dzKHNlbGYsIGxvZ19saXN0KToKKyAgICAgICAgdGFyZ2V0X2xvZ3MgPSAndGFyZ2V0X2xvZ3MnCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfbG9ncyk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyh0YXJnZXRfbG9ncykKKyAgICAgICAgZm9yIGYgaW4gbG9nX2xpc3Q6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5jb3B5X2Zyb20oZiwgdGFyZ2V0X2xvZ3MpCisKKyAgICAjZ2V0IHRoZSBsb2NhbCBsaXN0IG9mIGxvZ3MKKyAgICBkZWYgZ2V0X2xvY2FsX2xvZ19saXN0KHNlbGYsIGxvZ19sb2NhdGlvbnMpOgorICAgICAgICBzZWxmLnRyYW5zZmVyX2xvZ3Moc2VsZi5nZXRMb2dMaXN0KGxvZ19sb2NhdGlvbnMpKQorICAgICAgICBsb2dzID0gWyBvcy5wYXRoLmpvaW4oJ3RhcmdldF9sb2dzJyxmKSBmb3IgZiBpbiBvcy5saXN0ZGlyKCd0YXJnZXRfbG9ncycpIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpKSBdCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICAjYnVpbGQgdGhlIGdyZXAgY29tbWFuZCB0byBiZSB1c2VkIHdpdGggZmlsdGVycyBhbmQgZXhjbHVzaW9ucworICAgIGRlZiBidWlsZF9ncmVwY21kKHNlbGYsIGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKToKKyAgICAgICAgZ3JlcGNtZCA9ICJncmVwICIKKyAgICAgICAgZ3JlcGNtZCArPSItRWkgXCIiCisgICAgICAgIGZvciBlcnJvciBpbiBlcnJvcnM6CisgICAgICAgICAgICBncmVwY21kICs9IGVycm9yKyJ8IgorICAgICAgICBncmVwY21kID0gZ3JlcGNtZFs6LTFdCisgICAgICAgIGdyZXBjbWQgKz0gIlwiICIrc3RyKGxvZykrIiB8IGdyZXAgLUVpdiBcJyIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyb3JsaXN0ID0gaWdub3JlX2Vycm9yc1tzZWxmLmdldE1hY2hpbmUoKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIk5vIGlnbm9yZSBsaXN0IGZvdW5kIGZvciB0aGlzIG1hY2hpbmUsIHVzaW5nIGRlZmF1bHRcbiIKKyAgICAgICAgICAgIGVycm9ybGlzdCA9IGlnbm9yZV9lcnJvcnNbJ2RlZmF1bHQnXQorICAgICAgICBmb3IgaWdub3JlX2Vycm9yIGluIGVycm9ybGlzdDoKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCIoIiwgIlwoIikKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCIpIiwgIlwpIikKKyAgICAgICAgICAgIGlnbm9yZV9lcnJvciA9IGlnbm9yZV9lcnJvci5yZXBsYWNlKCInIiwgIi4iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIj8iLCAiXD8iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIlsiLCAiXFsiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIl0iLCAiXF0iKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIioiLCAiXCoiKQorICAgICAgICAgICAgZ3JlcGNtZCArPSBpZ25vcmVfZXJyb3IrInwiCisgICAgICAgIGdyZXBjbWQgPSBncmVwY21kWzotMV0KKyAgICAgICAgZ3JlcGNtZCArPSAiXCciCisgICAgICAgIHJldHVybiBncmVwY21kCisKKyAgICAjZ3JlcCBvbmx5IHRoZSBlcnJvcnMgc28gdGhhdCB0aGVpciBjb250ZXh0IGNvdWxkIGJlIGNvbGxlY3RlZC4gRGVmYXVsdCBjb250ZXh0IGlzIDEwIGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVycm9yIGl0c2VsZgorICAgIGRlZiBwYXJzZV9sb2dzKHNlbGYsIGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9ncywgbGluZXNfYmVmb3JlID0gMTAsIGxpbmVzX2FmdGVyID0gMTApOgorICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgcmV6ID0gW10KKyAgICAgICAgZ3JlcF9vdXRwdXQgPSAnJworICAgICAgICBmb3IgbG9nIGluIGxvZ3M6CisgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgICAgICB0aGVncmVwID0gc2VsZi5idWlsZF9ncmVwY21kKGVycm9ycywgaWdub3JlX2Vycm9ycywgbG9nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHRoZWdyZXAsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgKHJlc3VsdCBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldID0ge30KKyAgICAgICAgICAgICAgICByZXogPSByZXN1bHQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgZm9yIHhyZXogaW4gcmV6OgorICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gImdyZXAgXCJcXCIrc3RyKHhyZXopKyJcIiAtQiAiK3N0cihsaW5lc19iZWZvcmUpKyIgLUEgIitzdHIobGluZXNfYWZ0ZXIpKyIgIitzdHIobG9nKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBncmVwX291dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNvbW1hbmQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tsb2cucmVwbGFjZSgndGFyZ2V0X2xvZ3MvJywnJyldW3hyZXpdPWdyZXBfb3V0cHV0CisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICAjZ2V0IHRoZSBvdXRwdXQgb2YgZG1lc2cgYW5kIHdyaXRlIGl0IGluIGEgZmlsZS4gVGhpcyBmaWxlIGlzIGFkZGVkIHRvIGxvZ19sb2NhdGlvbnMuCisgICAgZGVmIHdyaXRlX2RtZXNnKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBkbWVzZykgPSBzZWxmLnRhcmdldC5ydW4oImRtZXNnIikKKyAgICAgICAgKHN0YXR1cywgZG1lc2cyKSA9IHNlbGYudGFyZ2V0LnJ1bigiZWNobyBcIiIrc3RyKGRtZXNnKSsiXCIgPiAvdG1wL2RtZXNnX291dHB1dC5sb2ciKQorCisgICAgQHRlc3RjYXNlKDEwNTkpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wYXJzZWxvZ3Moc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfZG1lc2coKQorICAgICAgICBsb2dfbGlzdCA9IHNlbGYuZ2V0X2xvY2FsX2xvZ19saXN0KHNlbGYubG9nX2xvY2F0aW9ucykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZV9sb2dzKHNlbGYuZXJyb3JzLCBzZWxmLmlnbm9yZV9lcnJvcnMsIGxvZ19saXN0KQorICAgICAgICBwcmludCBzZWxmLmdldEhhcmR3YXJlSW5mbygpCisgICAgICAgIGVycmNvdW50ID0gMAorICAgICAgICBmb3IgbG9nIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYubXNnICs9ICJMb2c6ICIrbG9nKyJcbiIKKyAgICAgICAgICAgIHNlbGYubXNnICs9ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICAgICAgZm9yIGVycm9yIGluIHJlc3VsdFtsb2ddOgorICAgICAgICAgICAgICAgIGVycmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAiQ2VudHJhbCBlcnJvcjogIitzdHIoZXJyb3IpKyJcbiIKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAgIioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgICAgICAgICAgc2VsZi5tc2cgKz0gIHJlc3VsdFtzdHIobG9nKV1bc3RyKGVycm9yKV0rIlxuIgorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICAiKioqKioqKioqKioqKioqKioqKioqKipcbiIKKyAgICAgICAgc2VsZi5tc2cgKz0gIiVzIGVycm9ycyBmb3VuZCBpbiBsb2dzLiIgJSBlcnJjb3VudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycmNvdW50LCAwLCBtc2c9c2VsZi5tc2cpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGVybC5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDRkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGVybC5weQpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicGVybCIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBwZXJsIHBhY2thZ2UgaW4gdGhlIGltYWdlIikKKworCitjbGFzcyBQZXJsVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdC5wbCIpLCAiL3RtcC90ZXN0LnBsIikKKworICAgIEB0ZXN0Y2FzZSgxMTQxKQorICAgIGRlZiB0ZXN0X3BlcmxfZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBwZXJsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iUGVybCBiaW5hcnkgbm90IGluIFBBVEggb3Igbm90IG9uIHRhcmdldC4iKQorCisgICAgQHRlc3RjYXNlKDIwOCkKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdwZXJsIC90bXAvdGVzdC5wbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkV4aXQgc3RhdHVzIHdhcyBub3QgMC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LnBsIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNDYwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9waW5nLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitjbGFzcyBQaW5nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSg5NjQpCisgICAgZGVmIHRlc3RfcGluZyhzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIDYwCisgICAgICAgIHdoaWxlIGNvdW50IDwgNSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInBpbmcgLWMgMSAlcyIgJSBzZWxmLnRhcmdldC5pcCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIG91dHB1dCArPSBwcm9jLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgIGlmIHByb2MucG9sbCgpID09IDA6CisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgNSwgbXNnID0gIkV4cGVjdGVkIDUgY29uc2VjdXRpdmUgcmVwbGllcywgZ290ICVkLlxucGluZyBvdXRwdXQgaXM6XG4lcyIgJSAoY291bnQsb3V0cHV0KSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWRiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJweXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIGltYWdlIikKKworCitjbGFzcyBQeXRob25UZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LnB5IiksICIvdG1wL3Rlc3QucHkiKQorCisgICAgQHRlc3RjYXNlKDExNDUpCisgICAgZGVmIHRlc3RfcHl0aG9uX2V4aXN0cyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iUHl0aG9uIGJpbmFyeSBub3QgaW4gUEFUSCBvciBub3Qgb24gdGFyZ2V0LiIpCisKKyAgICBAdGVzdGNhc2UoOTY1KQorICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3B5dGhvbiAvdG1wL3Rlc3QucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJFeGl0IHN0YXR1cyB3YXMgbm90IDAuIE91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgInRoZSB2YWx1ZSBvZiBhIGlzIDAuMDEiLCBtc2c9IkluY29ycmVjdCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTQ2KQorICAgIGRlZiB0ZXN0X3B5dGhvbl90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbHMgL3RtcC90ZXN0ZmlsZS5weXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQeXRob24gdGVzdCBmaWxlIGdlbmVyYXRlIGZhaWxlZC4iKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bigicm0gL3RtcC90ZXN0LnB5IC90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYWFlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcnBtLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGZubWF0Y2gKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgicnBtIG1vZHVsZSBza2lwcGVkOiB0YXJnZXQgZG9lc24ndCBoYXZlIHBhY2thZ2UtbWFuYWdlbWVudCBpbiBJTUFHRV9GRUFUVVJFUyIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgicnBtIG1vZHVsZSBza2lwcGVkOiB0YXJnZXQgZG9lc24ndCBoYXZlIHJwbSBhcyBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKKworY2xhc3MgUnBtQmFzaWNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2MCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3JwbV9oZWxwKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzIGFuZCBvdXRwdXQ6ICVzIGFuZCAlcyIgJSAoc3RhdHVzLG91dHB1dCkpCisKKyAgICBAdGVzdGNhc2UoMTkxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9oZWxwJykKKyAgICBkZWYgdGVzdF9ycG1fcXVlcnkoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtcSBycG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworY2xhc3MgUnBtSW5zdGFsbFJlbW92ZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgcGtnYXJjaCA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpLnJlcGxhY2UoIi0iLCAiXyIpCisgICAgICAgIHJwbWRpciA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSksICJycG0iLCBwa2dhcmNoKQorICAgICAgICAjIHBpY2sgcnBtLWRvYyBhcyBhIHRlc3QgZmlsZSB0byBnZXQgaW5zdGFsbGVkLCBiZWNhdXNlIGl0J3Mgc21hbGwgYW5kIGl0IHdpbGwgYWx3YXlzIGJlIGJ1aWx0IGZvciBzdGFuZGFyZCB0YXJnZXRzCisgICAgICAgIGZvciBmIGluIGZubWF0Y2guZmlsdGVyKG9zLmxpc3RkaXIocnBtZGlyKSwgInJwbS1kb2MtKi4lcy5ycG0iICUgcGtnYXJjaCk6CisgICAgICAgICAgICB0ZXN0cnBtZmlsZSA9IGYKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ocnBtZGlyLHRlc3RycG1maWxlKSwgIi90bXAvcnBtLWRvYy5ycG0iKQorCisgICAgQHRlc3RjYXNlKDE5MikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faGVscCcpCisgICAgZGVmIHRlc3RfcnBtX2luc3RhbGwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtaXZoIC90bXAvcnBtLWRvYy5ycG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gaW5zdGFsbCBycG0tZG9jIHBhY2thZ2U6ICVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxOTQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X3JwbV9yZW1vdmUoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJGYWlsZWQgdG8gcmVtb3ZlIHJwbS1kb2MgcGFja2FnZTogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9ycG1fcXVlcnlfbm9ucm9vdChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndXNlcmFkZCB0ZXN0MScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0dXMgPT0gMCwgbXNnPSJGYWlsZWQgdG8gY3JlYXRlIG5ldyB1c2VyIikKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBpZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnKHRlc3QxKScgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBleGVjdXRlIGFzIG5ldyB1c2VyIikKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignc3VkbyAtdSB0ZXN0MSBycG0gLXFhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0ic3RhdHVzOiAlcy4gQ2Fubm90IHJ1biBycG0gLXFhIiAlIHN0YXR1cykKKworICAgIEB0ZXN0Y2FzZSgxOTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2luc3RhbGwnKQorICAgIGRlZiB0ZXN0X2NoZWNrX3JwbV9pbnN0YWxsX3JlbW92YWxfbG9nX2ZpbGVfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gaW5zdGFsbC9yZW1vdmFsIGxvZyBmaWxlIHNpemUKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFRoZXJlIHNob3VsZCBiZSBzb21lIG1ldGhvZCB0byBrZWVwIHJwbSBsb2cgaW4gYSBzbWFsbCBzaXplIC4KKyAgICAgICAgUHJvZHVjdDogICAgIEJTUHMKKyAgICAgICAgQXV0aG9yOiAgICAgIEFsZXhhbmRydSBHZW9yZ2VzY3UgPGFsZXhhbmRydS5jLmdlb3JnZXNjdUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorICAgICAgICBkYl9maWxlc19jbWQgPSAnbHMgL3Zhci9saWIvcnBtL19fZGIuKicKKyAgICAgICAgZ2V0X2xvZ19zaXplX2NtZCA9ICJkdSAvdmFyL2xpYi9ycG0vbG9nL2xvZy4qIHwgYXdrICd7cHJpbnQgJDF9JyIKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNvbWUgZGF0YWJhc2UgZmlsZXMgYXJlIHVuZGVyIC92YXIvbGliL3JwbSBhcyAnX19kYi54eHgnCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oZGJfZmlsZXNfY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBmaW5kIGRhdGFiYXNlIGZpbGVzIHVuZGVyIC92YXIvbGliL3JwbS8gYXMgX19kYi54eHgnKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBwYWNrYWdlIGp1c3QgaW4gY2FzZQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtZSBycG0tZG9jJykKKworICAgICAgICAjIEluc3RhbGwvUmVtb3ZlIGEgcGFja2FnZSAxMCB0aW1lcworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWl2aCAvdG1wL3JwbS1kb2MucnBtJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAiRmFpbGVkIHRvIGluc3RhbGwgcnBtLWRvYyBwYWNrYWdlLiBSZWFzb246IHt9Ii5mb3JtYXQob3V0cHV0KSkKKworICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICJGYWlsZWQgdG8gcmVtb3ZlIHJwbS1kb2MgcGFja2FnZS4gUmVhc29uOiB7fSIuZm9ybWF0KG91dHB1dCkpCisKKyAgICAgICAgIyBHZXQgdGhlIHNpemUgb2YgbG9nIGZpbGUKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihnZXRfbG9nX3NpemVfY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBnZXQgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGxvZyBmaWxlLicpCisKKyAgICAgICAgIyBDb21wYXJlIGVhY2ggbG9nIHNpemUKKyAgICAgICAgZm9yIGxvZ19maWxlX3NpemUgaW4gb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoaW50KGxvZ19maWxlX3NpemUpLCAxMTI2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xvZyBmaWxlIHNpemUgaXMgZ3JlYXRlciB0aGF0IGV4cGVjdGVkICh+MTBNQiksIGZvdW5kIHt9IGJ5dGVzJy5mb3JtYXQobG9nX2ZpbGVfc2l6ZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCdybSAtZiAvdG1wL3JwbS1kb2MucnBtJykKKwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjYW5lbGYucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2EwMjRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjYW5lbGYucHkKQEAgLTAsMCArMSwyOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwYXgtdXRpbHMiKToKKyAgICAgICAgc2tpcE1vZHVsZSgicGF4LXV0aWxzIHBhY2thZ2Ugbm90IGluc3RhbGxlZCIpCisKK2NsYXNzIFNjYW5lbGZUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNjYW5jbWQgPSAnc2NhbmVsZiAtLXF1aWV0IC0tcmVjdXJzaXZlIC0tbW91bnQgLS1sZHBhdGggLS1wYXRoJworCisgICAgQHRlc3RjYXNlKDk2NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3NjYW5lbGZfdGV4dHJlbChzZWxmKToKKyAgICAgICAgIyBwcmludCBURVhUUkVMIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuc2NhbmNtZCArPSAiIC0tdGV4dHJlbCIKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihzZWxmLnNjYW5jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnN0cmlwKCksICIiLCAiXG4iLmpvaW4oW3NlbGYuc2NhbmNtZCwgb3V0cHV0XSkpCisKKyAgICBAdGVzdGNhc2UoOTY3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NhbmVsZl9ycGF0aChzZWxmKToKKyAgICAgICAgIyBwcmludCBSUEFUSCBpbmZvcm1hdGlvbgorICAgICAgICBzZWxmLnNjYW5jbWQgKz0gIiAtLXJwYXRoIgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKHNlbGYuc2NhbmNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgIiIsICJcbiIuam9pbihbc2VsZi5zY2FuY21kLCBvdXRwdXRdKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9zY3AucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTg3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NwLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2ltcG9ydCBvcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHNraXBVbmxlc3NQYXNzZWQsIHRlc3RjYXNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaC1zc2hkIikpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzc2ggcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFNjcFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjIwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NwX2ZpbGUoc2VsZik6CisgICAgICAgIHRlc3RfbG9nX2RpciA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHRlc3RfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfbG9nX2RpciwgJ3Rlc3Rfc2NwX2ZpbGUnKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9maWxlX3BhdGgsICd3JykgYXMgdGVzdF9zY3BfZmlsZToKKyAgICAgICAgICAgIHRlc3Rfc2NwX2ZpbGUuc2VlaygyICoqIDIyIC0gMSkKKyAgICAgICAgICAgIHRlc3Rfc2NwX2ZpbGUud3JpdGUob3MubGluZXNlcCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LmNvcHlfdG8odGVzdF9maWxlX3BhdGgsICcvdG1wL3Rlc3Rfc2NwX2ZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkZpbGUgY291bGQgbm90IGJlIGNvcGllZC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImxzIC1sYSAvdG1wL3Rlc3Rfc2NwX2ZpbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIlNDUCB0ZXN0IGZhaWxlZCIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2tlbGV0b25pbml0LnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NrZWxldG9uaW5pdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjBjYjliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NrZWxldG9uaW5pdC5weQpAQCAtMCwwICsxLDI5IEBACisjIFRoaXMgdGVzdCBzaG91bGQgY292ZXIgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD0yODQgdGVzdGNhc2UKKyMgTm90ZSB0aGF0IHRoZSBpbWFnZSB1bmRlciB0ZXN0IG11c3QgaGF2ZSBtZXRhLXNrZWxldG9uIGxheWVyIGluIGJibGF5ZXJzIGFuZCBJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgc2VydmljZSIgaW4gbG9jYWwuY29uZgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNlcnZpY2UiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc2VydmljZSBwYWNrYWdlIGluIGltYWdlIikKKworCitjbGFzcyBTa2VsZXRvbkJhc2ljVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZigic3lzdGVtZCIgPT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKSwgIk5vdCBhcHByb3BpYXRlIGZvciBzeXN0ZW1kIGltYWdlIikKKyAgICBkZWYgdGVzdF9za2VsZXRvbl9hdmFpbGFiaWxpdHkoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xzIC9ldGMvaW5pdC5kL3NrZWxldG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJza2VsZXRvbiBpbml0IHNjcmlwdCBub3QgZm91bmQuIE91dHB1dDpcbiVzICIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSAgc2VsZi50YXJnZXQucnVuKCdscyAvdXNyL3NiaW4vc2tlbGV0b24tdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAic2tlbGV0b24tdGVzdCBub3QgZm91bmQuIE91dHB1dDpcbiVzIiAlIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyODQpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc2tlbGV0b25fYXZhaWxhYmlsaXR5JykKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIGRlZiB0ZXN0X3NrZWxldG9uX3NjcmlwdChzZWxmKToKKyAgICAgICAgb3V0cHV0MSA9IHNlbGYudGFyZ2V0LnJ1bigiL2V0Yy9pbml0LmQvc2tlbGV0b24gc3RhcnQiKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQyKSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW3Nda2VsZXRvbi10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJTa2VsZXRvbiBzY3JpcHQgY291bGQgbm90IGJlIHN0YXJ0ZWQ6XG4lc1xuJXMiICUgKG91dHB1dDEsIG91dHB1dDIpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NtYXJ0LnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NtYXJ0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MTY2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKQEAgLTAsMCArMSwxNzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBTbWFydFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9oZWxwJykKKyAgICBkZWYgc21hcnQoc2VsZiwgY29tbWFuZCwgZXhwZWN0ZWQgPSAwKToKKyAgICAgICAgY29tbWFuZCA9ICdzbWFydCAlcycgJSBjb21tYW5kCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKGNvbW1hbmQsIDE1MDApCisgICAgICAgIG1lc3NhZ2UgPSBvcy5saW5lc2VwLmpvaW4oW2NvbW1hbmQsIG91dHB1dF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSIgaW4gb3V0cHV0LCBtZXNzYWdlKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKK2NsYXNzIFNtYXJ0QmFzaWNUZXN0KFNtYXJ0VGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzE2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS1oZWxwJykKKworICAgIEB0ZXN0Y2FzZSg5NjgpCisgICAgZGVmIHRlc3Rfc21hcnRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS12ZXJzaW9uJykKKworICAgIEB0ZXN0Y2FzZSg3MjEpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5mbyBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNDIxKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3F1ZXJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdxdWVyeSBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNzIwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3NlYXJjaChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnc2VhcmNoIHB5dGhvbi1zbWFydHBtJykKKworICAgIEB0ZXN0Y2FzZSg3MjIpCisgICAgZGVmIHRlc3Rfc21hcnRfc3RhdHMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3N0YXRzJykKKworY2xhc3MgU21hcnRSZXBvVGVzdChTbWFydFRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb2xpc3QgPSBbXQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyID0gSFRUUFNlcnZpY2Uob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpLCBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5zZXJ2ZXJfaXApCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RhcnQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RvcCgpCisgICAgICAgIGZvciBpIGluIHNlbGYucmVwb2xpc3Q6CisgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1yZW1vdmUgJytzdHIoaSkpCisKKyAgICBAdGVzdGNhc2UoMTE0MykKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsJywgMSkKKworICAgIEB0ZXN0Y2FzZSg3MTkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9hZGQoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCkpCisgICAgICAgICAgICAgICAgc2VsZi5yZXBvbGlzdC5hcHBlbmQoYXJjaCkKKyAgICAgICAgc2VsZi5zbWFydCgndXBkYXRlJykKKworICAgIEB0ZXN0Y2FzZSg5NjkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0taGVscCcpCisKKyAgICBAdGVzdGNhc2UoOTcwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorCisgICAgQHRlc3RjYXNlKDk3MSkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX3Nob3coc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93JykKKworICAgIEB0ZXN0Y2FzZSg3MTcpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9ycG1zeXMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1kaXNhYmxlIHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1lbmFibGUgcnBtc3lzJykKKworICAgIEB0ZXN0Y2FzZSgxMTQ0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyOCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyMykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbF9mcm9tX2Rpc2soc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IC4vcHNwbGFzaC1kZWZhdWx0KicpCisKKyAgICBAdGVzdGNhc2UoNzI1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2Zyb21faHR0cChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnZG93bmxvYWQgLS11cmxzIHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHVybCA9IHJlLnNlYXJjaCgnKGh0dHA6Ly8uKi9wc3BsYXNoLWRlZmF1bHQuKlwucnBtKScsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybCwgbXNnPSJDb3Vsbid0IGZpbmQgZG93bmxvYWQgdXJsIGluICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgJXMnICUgdXJsLmdyb3VwKDApKQorCisgICAgQHRlc3RjYXNlKDcyOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZWluc3RhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfcmVtb3RlX3JlcG8oc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3VwZGF0ZScpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaCcpCisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKworICAgIEB0ZXN0Y2FzZSg3MjYpCisgICAgZGVmIHRlc3Rfc21hcnRfbG9jYWxfZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2NkIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoJykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorICAgICAgICBmb3IgaSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiAoInJwbXN5cyIgIT0gc3RyKGkpKSBhbmQgKCJteXJwbWRpciIgIT0gc3RyKGkpKToKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdjZCAvaG9tZS9yb290JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCBwc3BsYXNoJykKKyAgICAgICAgZm9yIGkgaW4gb3V0cHV0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgKCJycG1zeXMiICE9IHN0cihpKSkgYW5kICgibXlycG1kaXIiICE9IHN0cihpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXJlbW92ZSBteXJwbWRpciAteScpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigicm0gLXJmIC90bXAvbXlycG1kaXIiKQorCisgICAgQHRlc3RjYXNlKDcxOCkKKyAgICBkZWYgdGVzdF9zbWFydF9hZGRfcnBtZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJkaXNhYmxlZCA9IHllcyIgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBkaXNhYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZW5hYmxlICBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiZGlzYWJsZWQgPSB5ZXMiIGluIG91dHB1dCwgbXNnPSJGYWlsZWQgdG8gZW5hYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tcmVtb3ZlIG15cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCJybSAtcmYgL3RtcC9teXJwbWRpciIpCisKKyAgICBAdGVzdGNhc2UoNzMxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZW1vdmVfcGFja2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9zc2gucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzZkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3NoLnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaCIpKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc3NoIHBhY2thZ2UgaW4gaW1hZ2UiKQorCitjbGFzcyBTc2hUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIyNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9waW5nJykKKyAgICBkZWYgdGVzdF9zc2goc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iU1NIIFRlc3QgZmFpbGVkOiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2NhdCAvZXRjL21hc3RlcmltYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZz0iVGhpcyBpc24ndCB0aGUgcmlnaHQgaW1hZ2UgIC0gL2V0Yy9tYXN0ZXJpbWFnZSBzaG91bGRuJ3QgYmUgaGVyZSAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzbG9nLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAxZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJidXN5Ym94LXN5c2xvZyIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic3lza2xvZ2QiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHN5c2xvZyBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU3lzbG9nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMDEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX2hlbHAiKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19ydW5uaW5nKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIC1pIFtzXXlzbG9nZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9Im5vIHN5c2xvZ2QgcHJvY2VzcywgcHMgb3V0cHV0OiAlcyIgJSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZClbMV0pCisKK2NsYXNzIFN5c2xvZ1Rlc3RDb25maWcob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE0OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcnVubmluZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX2xvZ2dlcihzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIHRlc3QgLWUgL3Zhci9sb2cvbWVzc2FnZXMgJiYgZ3JlcCBmb29iYXIgL3Zhci9sb2cvbWVzc2FnZXMgfHwgbG9ncmVhZCB8IGdyZXAgZm9vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iVGVzdCBsb2cgc3RyaW5nIG5vdCBmb3VuZCBpbiAvdmFyL2xvZy9tZXNzYWdlcy4gT3V0cHV0OiAlcyAiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX3J1bm5pbmciKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19yZXN0YXJ0KHNlbGYpOgorICAgICAgICBpZiAic3lzdGVtZCIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKToKKyAgICAgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL2V0Yy9pbml0LmQvc3lzbG9nIHJlc3RhcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgcmVzdGFydCBzeXNsb2cuc2VydmljZScpCisKKyAgICBAdGVzdGNhc2UoMjAyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19yZXN0YXJ0IikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfbG9nZ2VyIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIEB1bml0dGVzdC5za2lwSWYob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzeXNrbG9nZCIpIG9yIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImJ1c3lib3giKSwgIk5vbi1idXN5Ym94IHN5c2xvZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX3N0YXJ0dXBfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2VjaG8gIkxPR0ZJTEU9L3Zhci9sb2cvdGVzdCIgPj4gL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mJykKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvZXRjL2luaXQuZC9zeXNsb2cgcmVzdGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkNvdWxkIG5vdCByZXN0YXJ0IHN5c2xvZyBzZXJ2aWNlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIGdyZXAgZm9vYmFyIC92YXIvbG9nL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJUZXN0IGxvZyBzdHJpbmcgbm90IGZvdW5kLiBPdXRwdXQ6ICVzICIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI0xPR0ZJTEU9L3Zhci9sb2cvdGVzdCMjJyAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYiKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJy9ldGMvaW5pdC5kL3N5c2xvZyByZXN0YXJ0JykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0Mzk0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgic3lzdGVtZCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSBzeXN0ZW1kIGluIERJU1RST19GRUFUVVJFUyIpCisgICAgaWYgInN5c3RlbWQiICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoInN5c3RlbWQgaXMgbm90IHRoZSBpbml0IG1hbmFnZXIgZm9yIHRoaXMgaW1hZ2UiKQorCisKK2NsYXNzIFN5c3RlbWRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHN5c3RlbWN0bChzZWxmLCBhY3Rpb24gPSAnJywgdGFyZ2V0ID0gJycsIGV4cGVjdGVkID0gMCwgdmVyYm9zZSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9ICdzeXN0ZW1jdGwgJXMgJXMnICUgKGFjdGlvbiwgdGFyZ2V0KQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bihjb21tYW5kKQorICAgICAgICBtZXNzYWdlID0gJ1xuJy5qb2luKFtjb21tYW5kLCBvdXRwdXRdKQorICAgICAgICBpZiBzdGF0dXMgIT0gZXhwZWN0ZWQgYW5kIHZlcmJvc2U6CisgICAgICAgICAgICBtZXNzYWdlICs9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0YXR1cyAtLWZ1bGwgJXMnICUgdGFyZ2V0KVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgZXhwZWN0ZWQsIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBTeXN0ZW1kQmFzaWNUZXN0cyhTeXN0ZW1kVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCctLXZlcnNpb24nKQorCisgICAgQHRlc3RjYXNlKDU1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1fYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2xpc3QtdW5pdC1maWxlcycpCisKKyAgICBkZWYgc2V0dGxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQmxvY2sgdW50aWwgc3lzdGVtZCBoYXMgZmluaXNoZWQgYWN0aXZhdGluZyBhbnkgdW5pdHMgYmVpbmcgYWN0aXZhdGVkLAorICAgICAgICBvciB1bnRpbCB0d28gbWludXRlcyBoYXMgZWxhcHNlZC4KKworICAgICAgICBSZXR1cm5zIGEgdHVwbGUsIGVpdGhlciAoVHJ1ZSwgJycpIGlmIGFsbCB1bml0cyBoYXZlIGZpbmlzaGVkCisgICAgICAgIGFjdGl2YXRpbmcsIG9yIChGYWxzZSwgbWVzc2FnZSBzdHJpbmcpIGlmIHRoZXJlIGFyZSBzdGlsbCB1bml0cworICAgICAgICBhY3RpdmF0aW5nIChnZW5lcmFsbHksIGZhaWxpbmcgdW5pdHMgdGhhdCByZXN0YXJ0KS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArICg2MCAqIDIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIC0tc3RhdGU9YWN0aXZhdGluZycpCisgICAgICAgICAgICBpZiAiMCBsb2FkZWQgdW5pdHMgbGlzdGVkIiBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChUcnVlLCAnJykKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID49IGVuZHRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgb3V0cHV0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgIEB0ZXN0Y2FzZSg1NTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9mYWlsZWQoc2VsZik6CisgICAgICAgIHNldHRsZWQsIG91dHB1dCA9IHNlbGYuc2V0dGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldHRsZWQsIG1zZz0iVGltZWQgb3V0IHdhaXRpbmcgZm9yIHN5c3RlbWQgdG8gc2V0dGxlOlxuIiArIG91dHB1dCkKKworICAgICAgICBvdXRwdXQgPSBzZWxmLnN5c3RlbWN0bCgnbGlzdC11bml0cycsICctLWZhaWxlZCcpCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCIwIGxvYWRlZCB1bml0cyBsaXN0ZWQiLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIG91dHB1dCArPSBzZWxmLnN5c3RlbWN0bCgnc3RhdHVzIC0tZnVsbCAtLWZhaWxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCwgbXNnPSJTb21lIHN5c3RlbWQgdW5pdHMgZmFpbGVkOlxuJXMiICUgb3V0cHV0KQorCisKK2NsYXNzIFN5c3RlbWRTZXJ2aWNlVGVzdHMoU3lzdGVtZFRlc3QpOgorCisgICAgZGVmIGNoZWNrX2Zvcl9hdmFoaShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzUGFja2FnZSgnYXZhaGktZGFlbW9uJyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiBuZWVkIGF2YWhpLWRhZW1vbiBpbnN0YWxsZWQgb24gdGFyZ2V0IikKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9hdmFoaSgpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGF0dXMgLS1mdWxsJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworICAgIEB0ZXN0Y2FzZSg2OTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9zdGF0dXMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RvcF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnc3RvcCcsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1hY3RpdmUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnLCBleHBlY3RlZD0zLCB2ZXJib3NlPVRydWUpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGFydCcsJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWFjdGl2ZScsICdhdmFoaS1kYWVtb24uc2VydmljZScsIHZlcmJvc2U9VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg2OTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9kaXNhYmxlX2VuYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnZGlzYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJywgZXhwZWN0ZWQ9MSkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2VuYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworY2xhc3MgU3lzdGVtZEpvdXJuYWxUZXN0cyhTeXN0ZW1kVGVzdCk6CisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2pvdXJuYWwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2pvdXJuYWxjdGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3ZuYy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS92bmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxZGVmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS92bmMucHkKQEAgLTAsMCArMSwyMCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZVVubGVzcworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBza2lwTW9kdWxlVW5sZXNzKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgneDExdm5jJyksICJObyB4MTF2bmMgcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFZOQ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjEzKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfdm5jKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd4MTF2bmMgLWRpc3BsYXkgOjAgLWJnIC1vIHgxMXZuYy5sb2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJ4MTF2bmMgc2VydmVyIGZhaWxlZCB0byBzdGFydDogJXMiICUgb3V0cHV0KQorICAgICAgICBwb3J0ID0gcmUuc2VhcmNoKCdQT1JUPVswLTldKicsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQsIG1zZz0iTGlzdGVuaW5nIHBvcnQgbm90IHNwZWNpZmllZCBpbiBjb21tYW5kIG91dHB1dDogJXMiICVvdXRwdXQpCisKKyAgICAgICAgdm5jcG9ydCA9IHBvcnQuZ3JvdXAoMCkuc3BsaXQoJz0nKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGwgfCBncmVwICI6JXMiJyAlIHZuY3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IngxMXZuYyBzZXJ2ZXIgbm90IHJ1bm5pbmcgb24gcG9ydCAlc1xuXG4lcyIgJSAodm5jcG9ydCwgc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGw7IGNhdCB4MTF2bmMubG9nJylbMV0pKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3gzMmxpYi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS94MzJsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZTIxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS94MzJsaWIucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgI2NoZWNrIGlmIERFRkFVTFRUVU5FIGlzIHNldCBhbmQgaXQncyB2YWx1ZSBpczogeDg2LTY0LXgzMgorICAgICAgICBkZWZhdWx0dHVuZSA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICAgICAgaWYgIng4Ni02NC14MzIiIG5vdCBpbiBkZWZhdWx0dHVuZToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoIkRFRkFVTFRUVU5FIGlzIG5vdCBzZXQgdG8geDg2LTY0LXgzMiIpCisKK2NsYXNzIFgzMmxpYlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjgxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfeDMyX2ZpbGUoc2VsZik6CisgICAgICAgIHN0YXR1czEgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2Jpbi9scyB8IGdyZXAgQ2xhc3MgfCBncmVwIEVMRjMyIilbMF0KKyAgICAgICAgc3RhdHVzMiA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIHwgZ3JlcCBNYWNoaW5lIHwgZ3JlcCBYODYtNjQiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdHVzMSA9PSAwIGFuZCBzdGF0dXMyID09IDAsIG1zZz0iL2Jpbi9scyBpc24ndCBhbiBYODYtNjQgRUxGMzIgYmluYXJ5LiByZWFkZWxmIHNheXM6ICVzIiAlIHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIilbMV0pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS94b3JnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYmNkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoIngxMS1iYXNlIik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJ0YXJnZXQgZG9lc24ndCBoYXZlIHgxMSBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgWG9yZ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3hvcmdfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8ICBncmVwIC12IHhpbml0IHwgZ3JlcCBbWF1vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJYb3JnIGRvZXMgbm90IGFwcGVhciB0byBiZSBydW5uaW5nICVzIiAlIHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kKVsxXSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmM2ZhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRjdnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxNDZmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMjUgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgU0RLQnVpbGRQcm9qZWN0CisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFNES0J1aWxkUHJvamVjdChvZVNES1Rlc3QudGMuc2RrdGVzdGRpciArICIvY3ZzLyIsIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBkZWYgdGVzdF9jdnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGlwdGFibGVzLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjJlNTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpAQCAtMCwwICsxLDI2IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFNES0J1aWxkUHJvamVjdAorCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9pcHRhYmxlcy8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0xLjQuMTMudGFyLmJ6MiIpCisgICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZHN1ZG9rdS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE3N2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyNiBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNQYWNrYWdlKCJndGtcKyIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgZ3RrKyBpbiBtYW5pZmVzdCIpCisKK2NsYXNzIFN1ZG9rdVRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL3N1ZG9rdS8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL2djYy5weSBiL21ldGEvbGliL29lcWEvc2RrL2djYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk5NGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG1hY2hpbmUgPSBvZVNES1Rlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0iICsgbWFjaGluZSk6CisgICAgICAgIHNraXBNb2R1bGUoIlNESyBkb2Vzbid0IGNvbnRhaW4gYSBjcm9zcy1jYW5hZGlhbiB0b29sY2hhaW4iKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gWyd0ZXN0LmMnLCAndGVzdC5jcHAnLCAndGVzdG1ha2VmaWxlJ106CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHNlbGYudGMuZmlsZXNkaXIsIGYpLCBzZWxmLnRjLnNka3Rlc3RkaXIgKyBmKQorCisgICAgZGVmIHRlc3RfZ2NjX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENDICVzL3Rlc3QuYyAtbyAlcy90ZXN0IC1sbScgJSAoc2VsZi50Yy5zZGt0ZXN0ZGlyLCBzZWxmLnRjLnNka3Rlc3RkaXIpKQorCisgICAgZGVmIHRlc3RfZ3BwX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENYWCAlcy90ZXN0LmMgLW8gJXMvdGVzdCAtbG0nICUgKHNlbGYudGMuc2RrdGVzdGRpciwgc2VsZi50Yy5zZGt0ZXN0ZGlyKSkKKworICAgIGRlZiB0ZXN0X2dwcDJfY29tcGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCckQ1hYICVzL3Rlc3QuY3BwIC1vICVzL3Rlc3QgLWxtJyAlIChzZWxmLnRjLnNka3Rlc3RkaXIsIHNlbGYudGMuc2RrdGVzdGRpcikpCisKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZiBmb3IgZiBpbiBbJ3Rlc3QuYycsICd0ZXN0LmNwcCcsICd0ZXN0Lm8nLCAndGVzdCcsICd0ZXN0bWFrZWZpbGUnXV0KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL3BlcmwucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9wZXJsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjQyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3Nkay9wZXJsLnB5CkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1wZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgU0RLIikKKworCitjbGFzcyBQZXJsVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5wbCddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKyAgICAgICAgc2VsZi50ZXN0ZmlsZSA9IHNlbGYudGMuc2RrdGVzdGRpciArICJ0ZXN0LnBsIgorCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcGVybCcpCisKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3BlcmwgJXMvdGVzdC5wbCcgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKCIlcy90ZXN0LnBsIiAlIHNlbGYudGMuc2RrdGVzdGRpcikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL3B5dGhvbi5weSBiL21ldGEvbGliL29lcWEvc2RrL3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTZmYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1weXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIFNESyIpCisKKworY2xhc3MgUHl0aG9uVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5weSddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcHl0aG9uJykKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYuX3J1bigncHl0aG9uICVzL3Rlc3QucHknICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2xzIC90bXAvdGVzdGZpbGUucHl0aG9uJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoIiVzL3Rlc3QucHkiICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoIi90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDk1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5YWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpAQCAtMCwwICsxLDk1IEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQorCisKK2NsYXNzIFJlYnVpbGRGcm9tU1N0YXRlKFNTdGF0ZUJhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykpCisKKyAgICBkZWYgZ2V0X2RlcF90YXJnZXRzKHNlbGYsIHByaW1hcnlfdGFyZ2V0cyk6CisgICAgICAgIGZvdW5kX3RhcmdldHMgPSBbXQorICAgICAgICBiaXRiYWtlKCItZyAiICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSkpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpLCAncicpIGFzIHBuZmlsZToKKyAgICAgICAgICAgIGZvdW5kX3RhcmdldHMgPSBwbmZpbGUucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICByZXR1cm4gZm91bmRfdGFyZ2V0cworCisgICAgZGVmIGNvbmZpZ3VyZV9idWlsZGRpcihzZWxmLCBidWlsZGRpcik6CisgICAgICAgIG9zLm1rZGlyKGJ1aWxkZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGJ1aWxkZGlyKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJykpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2xvY2FsLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCisgICAgICAgIGNvbmZpZyA9IHt9CisgICAgICAgIGNvbmZpZ1snZGVmYXVsdF9zc3RhdGVfZGlyJ10gPSAiU1NUQVRFX0RJUiA/PSBcIiR7VE9QRElSfS9zc3RhdGUtY2FjaGVcIiIKKyAgICAgICAgY29uZmlnWydudWxsX3NzdGF0ZV9taXJyb3JzJ10gPSAiU1NUQVRFX01JUlJPUlMgPSBcIlwiIgorICAgICAgICBjb25maWdbJ2RlZmF1bHRfdG1wX2RpciddID0gIlRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcFwiIgorICAgICAgICBmb3Iga2V5IGluIGNvbmZpZzoKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL3NlbGZ0ZXN0LmluYycpLCBjb25maWdba2V5XSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2JibGF5ZXJzLmNvbmYnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYXV0by5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvYXV0by5jb25mJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBoYXJkbGlua190cmVlKHNlbGYsIHNyYywgZHN0KToKKyAgICAgICAgb3MubWtkaXIoZHN0KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKKyAgICAgICAgICAgIGlmIHJvb3QgPT0gc3JjOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdKSkKKyAgICAgICAgICAgIGZvciBzc3RhdGVfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5saW5rKG9zLnBhdGguam9pbihyb290LCBzc3RhdGVfZmlsZSksIG9zLnBhdGguam9pbihkc3QsIHJvb3Quc3BsaXQoc3JjKVsxXVsxOl0sIHNzdGF0ZV9maWxlKSkKKworICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmLCBwcmltYXJ5X3RhcmdldHMsIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1GYWxzZSk6CisgICAgICAgIGJ1aWxkQSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnYnVpbGRBJykKKyAgICAgICAgaWYgcmVsb2NhdGU6CisgICAgICAgICAgICBidWlsZEIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZEIgPSBidWlsZEEKKworICAgICAgICBpZiByZWJ1aWxkX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHNlbGYuZ2V0X2RlcF90YXJnZXRzKHByaW1hcnlfdGFyZ2V0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHByaW1hcnlfdGFyZ2V0cworCisgICAgICAgIHNlbGYuY29uZmlndXJlX2J1aWxkZGlyKGJ1aWxkQSkKKyAgICAgICAgcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQSkpICsgJ2JpdGJha2UgICcgKyAnICcuam9pbihtYXAoc3RyLCBwcmltYXJ5X3RhcmdldHMpKSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihidWlsZEEsICdzc3RhdGUtY2FjaGUnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJykpCisgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRBKQorCisgICAgICAgIGZhaWxlZF9yZWJ1aWxkID0gW10KKyAgICAgICAgZmFpbGVkX2NsZWFuc3N0YXRlID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiByZWJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEIpCisgICAgICAgICAgICBzZWxmLmhhcmRsaW5rX3RyZWUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJyksIG9zLnBhdGguam9pbihidWlsZEIsICdzc3RhdGUtY2FjaGUnKSkKKworICAgICAgICAgICAgcmVzdWx0X2NsZWFuc3N0YXRlID0gcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQikpICsgJ2JpdGJha2UgLWNjbGVhbnNzdGF0ZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0X2NsZWFuc3N0YXRlLnN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZS5hcHBlbmQodGFyZ2V0KQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZCA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlICcgKyB0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfYnVpbGQuc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgZmFpbGVkX3JlYnVpbGQuYXBwZW5kKHRhcmdldCkKKworICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfcmVidWlsZCwgbXNnPSJUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBmYWlsZWQgdG8gcmVidWlsZDogJXMiICUgJyAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX3JlYnVpbGQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfY2xlYW5zc3RhdGUsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIGNsZWFuc3N0YXRlKGFsbCBvdGhlcnMgaGF2ZSBwYXNzZWQgYm90aCBjbGVhbnNzdGF0ZSBhbmQgcmVidWlsZCBmcm9tIHNzdGF0ZSB0ZXN0cyk6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9jbGVhbnNzdGF0ZSkpKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX3JlbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPVRydWUsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfcmVidWlsZChbJ2NvcmUtaW1hZ2Utc2F0by1zZGsnXSwgcmVsb2NhdGU9RmFsc2UsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fdG9hc3Rlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI0NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fdG9hc3Rlci5weQpAQCAtMCwwICsxLDMyMCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaGxleCwgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYiwgY29tbWFuZHMsIHRpbWUsIGdldHBhc3MsIHJlLCBqc29uLCBzaGxleAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uLy4uLy4uLy4uLycsICdiaXRiYWtlL2xpYi90b2FzdGVyJykpKQorb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFRvYXN0ZXJTZXR1cChvZVNlbGZUZXN0KToKKworICAgIGRlZiByZWNpcGVfcGFyc2Uoc2VsZiwgZmlsZV9wYXRoLCB2YXIpOgorICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZpbGVfcGF0aCwncicpOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKHZhcikgPiAtMToKKyAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCIgPSAiKVsxXS5yZXBsYWNlKCJcIiIsICIiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGZpeF9maWxlX3BhdGgoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAgaWYgIjoiIGluIGZpbGVfcGF0aDoKKyAgICAgICAgICAgIGZpbGVfcGF0aD1maWxlX3BhdGguc3BsaXQoIjoiKVsyXQorICAgICAgICByZXR1cm4gZmlsZV9wYXRoCisKK2NsYXNzIFRvYXN0ZXJfREJfVGVzdHMoVG9hc3RlclNldHVwKToKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgbmFtZSBpcyB1bmlxdWUgLSB0Y19pZD03OTUKKyAgICBAdGVzdGNhc2UoNzk1KQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9OYW1lKHNlbGYpOgorICAgICAgICBhbGxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy5hbGwoKS5jb3VudCgpCisgICAgICAgIGRpc3RpbmN0X2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X2J1aWxkcywgYWxsX2J1aWxkcywgbXNnID0gJ0J1aWxkIG5hbWUgaXMgbm90IHVuaXF1ZScpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIGNvb2NrZXIgbG9nIHBhdGggaXMgdW5pcXVlIC0gdGNfaWQ9ODE5CisgICAgQHRlc3RjYXNlKDgxOSkKKyAgICBkZWYgdGVzdF9CdWlsZF9VbmlxdWVfQ29va2VyX0xvZ19QYXRoKHNlbGYpOgorICAgICAgICBkaXN0aW5jdF9wYXRoID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2Nvb2tlcl9sb2dfcGF0aCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICB0b3RhbF9idWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKS5jb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdGluY3RfcGF0aCwgdG90YWxfYnVpbGRzLCBtc2cgPSAnQnVpbGQgY29vY2tlciBsb2cgcGF0aCBpcyBub3QgdW5pcXVlJykKKworICAgICMgQ2hlY2sgaWYgdGFzayBvcmRlciBpcyB1bmlxdWUgZm9yIG9uZSBidWlsZCAtIHRjPTgyNAorICAgIEB0ZXN0Y2FzZSg4MjQpCisgICAgZGVmIHRlc3RfVGFza19VbmlxdWVfT3JkZXIoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdG90YWxfdGFza19vcmRlciA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZFsnaWQnXSkudmFsdWVzKCdvcmRlcicpLmNvdW50KCkKKyAgICAgICAgICAgIGRpc3RpbmN0X3Rhc2tfb3JkZXIgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRbJ2lkJ10pLnZhbHVlcygnb3JkZXInKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgICAgIGlmICh0b3RhbF90YXNrX29yZGVyICE9IGRpc3RpbmN0X3Rhc2tfb3JkZXIpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGJ1aWxkWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgYnVpbGQgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRhc2sgb3JkZXIgc2VxdWVuY2UgZm9yIG9uZSBidWlsZCAtIHRjPTgyNQorICAgIEB0ZXN0Y2FzZSg4MjUpCisgICAgZGVmIHRlc3RfVGFza19PcmRlcl9TZXF1ZW5jZShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIoUShidWlsZCA9IGJ1aWxkWydpZCddKSwgflEob3JkZXIgPSBOb25lKSwgflEodGFza19uYW1lX19jb250YWlucyA9ICdfc2V0c2NlbmUnKSkudmFsdWVzKCdpZCcsICdvcmRlcicpLm9yZGVyX2J5KCJvcmRlciIpCisgICAgICAgICAgICBjbnRfdGFza3MgPSAwCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBjbnRfdGFza3MgKz0gMQorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvcmRlciddICE9IGNudF90YXNrcyk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBkaXNrX2lvIG1hdGNoZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBFbmRUaW1lSU8gYW5kIFN0YXJ0VGltZUlPIGluIGJ1aWxkIHN0YXRzIC0gdGM9ODI4CisgICAgIyMjIHRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZCAjIyMKKyAgICAjZGVmIHRlc3RfVGFza19EaXNrX0lPX1RDODI4KHNlbGYpOgorCisgICAgIyBDaGVjayBpZiBvdXRjb21lID0gMiAoU1NUQVRFKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAzIChSRVNUT1JFRCkgLSB0Yz04MzIKKyAgICBAdGVzdGNhc2UoODMyKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8yX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8zKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDIpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmIChyb3dbJ3NzdGF0ZV9yZXN1bHQnXSAhPSAzKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDEgKENPVkVSRUQpIG9yIDMgKEVYSVNUSU5HKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChTU1RBVEVfTkEpIC0gdGM9ODMzCisgICAgQHRlc3RjYXNlKDgzMykKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMV8zX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMSwgMykpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gIT0gMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIG91dGNvbWUgaXMgMCAoU1VDQ0VTUykgb3IgNCAoRkFJTEVEKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChOQSksIDEgKE1JU1MpIG9yIDIgKEZBSUxFRCkgLSB0Yz04MzQKKyAgICBAdGVzdGNhc2UoODM0KQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8wXzRfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzBfMV8yKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMCwgNCkpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gbm90IGluIFswLCAxLCAyXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBUUlVFICgxKSwgc2NyaXB0X3R5cGUgbXVzdCBiZSAwIChDT0RJTkdfTkEpLCAyIChDT0RJTkdfUFlUSE9OKSwgMyAoQ09ESU5HX1NIRUxMKSAtIHRjPTg5MQorICAgIEB0ZXN0Y2FzZSg4OTEpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX1RydWVfU2NyaXB0X1R5cGVfMF8yXzMoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkID0gMSkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzY3JpcHRfdHlwZSddIG5vdCBpbiBbMCwgMiwgM10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gVFJVRSAoMSksIG91dGNvbWUgbXVzdCBiZSAwIChTVUNDRVNTKSBvciA0IChGQUlMRUQpIC0gdGM9ODM2CisgICAgQHRlc3RjYXNlKDgzNikKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfVHJ1ZV9PdXRjb21lXzBfNChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQgPSAxKS52YWx1ZXMoJ2lkJywgJ291dGNvbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snb3V0Y29tZSddIG5vdCBpbiBbMCwgNF0pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gRkFMU0UgKDApLCBzY3JpcHRfdHlwZSBtdXN0IGJlIDAgLSB0Yz04OTAKKyAgICBAdGVzdGNhc2UoODkwKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9GYWxzZV9TY3JpcHRfVHlwZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZCA9IDApLnZhbHVlcygnaWQnLCAnc2NyaXB0X3R5cGUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc2NyaXB0X3R5cGUnXSAhPSAwKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IEZBTFNFICgwKSBhbmQgYnVpbGQgb3V0Y29tZSA9IFNVQ0NFRURFRCAoMCksIHRhc2sgb3V0Y29tZSBtdXN0IGJlIDEgKENPVkVSRUQpLCAyIChDQUNIRUQpLCAzIChQUkVCVUlMVCksIDUgKEVNUFRZKSAtIHRjPTgzNworICAgIEB0ZXN0Y2FzZSg4MzcpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX0ZhbHNlX091dGNvbWVfMV8yXzNfNShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkWydpZCddLCB0YXNrX2V4ZWN1dGVkID0gMCkudmFsdWVzKCdpZCcsICdvdXRjb21lJykKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvdXRjb21lJ10gbm90IGluIFsxLCAyLCAzLCA1XSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg4CisgICAgQHRlc3RjYXNlKDg4OCkKKyAgICBkZWYgdGVzdF9UYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uoc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3RhcmdldF9pZCcsICdwYWNrYWdlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciByb3cgaW4gcm93czoKKyAgICAgICAgICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFyZ2V0X2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ3BhY2thZ2VfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhcmdldCBvciBub3QgcGFja2FnZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocm93WydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFyZ2V0IGluc3RhbGxlZCBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg5CisgICAgQHRlc3RjYXNlKDg4OSkKKyAgICBkZWYgdGVzdF9UYXNrX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3Rhc2tfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXNrX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFza19pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGRlcGVuZHNfb25faWQgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGlkID0gcm93WydkZXBlbmRzX29uX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCB0YXNrX2lkIG9yIG5vdCBkZXBlbmRzX29uX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChyb3dbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGRlcGVuZGVuY3kgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIHRhcmdldCBmaWxlX25hbWUgaXMgcG9wdWxhdGVkIG9ubHkgaWYgaXNfaW1hZ2U9dHJ1ZSBBTkQgb3JtX2J1aWxkLm91dGNvbWU9MCB0aGVuIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXRzIHNpemUgbWF0Y2hlcyB0aGUgZmlsZV9zaXplIHZhbHVlCisgICAgIyMjIE5lZWQgdG8gYWRkIHRoZSB0YyBpbiB0aGUgdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzNykKKyAgICBkZWYgdGVzdF9UYXJnZXRfRmlsZV9OYW1lX1BvcHVsYXRlZChzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IGJ1aWxkWydpZCddLCBpc19pbWFnZSA9IDEpLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIHRhcmdldF9maWxlcyA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHRhcmdldF9pZCA9IHRhcmdldFsnaWQnXSkudmFsdWVzKCdpZCcsICdmaWxlX25hbWUnLCAnZmlsZV9zaXplJykKKyAgICAgICAgICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZmlsZV9pbmZvIGluIHRhcmdldF9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkID0gZmlsZV9pbmZvWydpZCddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX25hbWUgPSBmaWxlX2luZm9bJ2ZpbGVfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX3NpemUgPSBmaWxlX2luZm9bJ2ZpbGVfc2l6ZSddCisgICAgICAgICAgICAgICAgICAgIGlmIChub3QgdGFyZ2V0X2ZpbGVfbmFtZSBvciBub3QgdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9maWxlX25hbWUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcy5wYXRoLmdldHNpemUodGFyZ2V0X2ZpbGVfbmFtZSkgIT0gdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhcmdldCBpbWFnZSBmaWxlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg0CisgICAgQHRlc3RjYXNlKDg4NCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBkZXBzID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKCdpZCcsICdwYWNrYWdlX2lkJywgJ2RlcGVuZHNfb25faWQnKQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiAoZGVwWydwYWNrYWdlX2lkJ10gPT0gZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgUmVjaXBlIGtleSB2ZXJpZmljYXRpb24sIHJlY2lwZSBuYW1lIGRvZXMgbm90IGRlcGVuZHMgb24gYSByZWNpcGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgLSB0Yz04ODMKKyAgICBAdGVzdGNhc2UoODgzKQorICAgIGRlZiB0ZXN0X1JlY2lwZV9EZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBkZXBzID0gUmVjaXBlX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3JlY2lwZV9pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChub3QgZGVwWydyZWNpcGVfaWQnXSBvciBub3QgZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihpZCA9IGRlcFsncmVjaXBlX2lkJ10pLnZhbHVlcygnbmFtZScpCisgICAgICAgICAgICAgICAgZGVwX25hbWUgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoaWQgPSBkZXBbJ2RlcGVuZHNfb25faWQnXSkudmFsdWVzKCduYW1lJykKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBkZXBfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHJlY2lwZSBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIG51bWJlciAoMC05KSAtIHRjPTg0NgorICAgIEB0ZXN0Y2FzZSg4NDYpCisgICAgZGVmIHRlc3RfUGFja2FnZV9OYW1lX0Zvcl9OdW1iZXIoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ25hbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsnbmFtZSddWzBdLmlzZGlnaXQoKSBpcyBUcnVlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSB2ZXJzaW9uIHN0YXJ0cyB3aXRoIGEgbnVtYmVyICgwLTkpIC0gdGM9ODQ3CisgICAgQHRlc3RjYXNlKDg0NykKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1ZlcnNpb25fU3RhcnRzX1dpdGhfTnVtYmVyKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICd2ZXJzaW9uJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ3ZlcnNpb24nXVswXS5pc2RpZ2l0KCkgaXMgRmFsc2UpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIHJldmlzaW9uIHN0YXJ0cyB3aXRoICdyJyAtIHRjPTg0OAorICAgIEB0ZXN0Y2FzZSg4NDgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9SZXZpc2lvbl9TdGFydHNfV2l0aF9yKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICdyZXZpc2lvbicpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWydyZXZpc2lvbiddWzBdLnN0YXJ0c3dpdGgoInIiKSBpcyBGYWxzZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGFja2FnZSBidWlsZF9pZAorICAgICMjIyBUQyBtdXN0IGJlIGFkZGVkIGluIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwMzgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9CdWlsZF9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAnYnVpbGRfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBidWlsZF9pZCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsnYnVpbGRfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IGJ1aWxkX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHBhY2thZ2UgcmVjaXBlX2lkCisgICAgIyMjIFRDIG11c3QgYmUgYWRkZWQgaW4gdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzOSkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1JlY2lwZV9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAncmVjaXBlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgcmVjaXBlX2lkID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsncmVjaXBlX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCByZWNpcGVfaWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIGluc3RhbGxlZF9zaXplIGZpZWxkIGlzIG5vdCBudWxsCisgICAgIyMjIFRDIG11c3QgYmUgYWRlZCBpbiB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDQwKQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfSW5zdGFsbGVkX1NpemVfTm90X05VTEwoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpbnN0YWxsZWRfc2l6ZV9faXNudWxsID0gVHJ1ZSkudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBhbGwgbGF5ZXJzIHJlcXVlc3RzIHJldHVybiBleGl0IGNvZGUgaXMgMjAwIC0gdGM9ODQzCisgICAgQHRlc3RjYXNlKDg0MykKKyAgICBkZWYgdGVzdF9MYXllcnNfUmVxdWVzdHNfRXhpdF9Db2RlKHNlbGYpOgorICAgICAgICBsYXllcnMgPSBMYXllci5vYmplY3RzLnZhbHVlcygnaWQnLCAnbGF5ZXJfaW5kZXhfdXJsJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICByZXNwID0gdXJsbGliLnVybG9wZW4obGF5ZXJbJ2xheWVyX2luZGV4X3VybCddKQorICAgICAgICAgICAgaWYgKHJlc3AuZ2V0Y29kZSgpICE9IDIwMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQobGF5ZXJbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBsYXllciBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgZGphbmdvIHNlcnZlciBzdGFydHMgcmVnYXJkbGVzcyBvZiB0aGUgdGltZXpvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIC0gdGM9OTA1CisgICAgQHRlc3RjYXNlKDkwNSkKKyAgICBkZWYgdGVzdF9TdGFydF9EamFuZ29fVGltZXpvbmUoc2VsZik6CisgICAgICAgIGN1cnJlbnRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHpvbmVmaWxlbGlzdCA9IFtdCisgICAgICAgIFpPTkVJTkZPUEFUSCA9ICcvdXNyL3NoYXJlL3pvbmVpbmZvLycKKyAgICAgICAgb3MuY2hkaXIoIi4uL2JpdGJha2UvbGliL3RvYXN0ZXIvIikKKyAgICAgICAgY250X2VyciA9IDAKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoWk9ORUlORk9QQVRIKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihaT05FSU5GT1BBVEgsIGZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgZm9yIGsgaW4gcmFuZ2UobGVuKHpvbmVmaWxlbGlzdCkpOgorICAgICAgICAgICAgaWYgayA8PSA1OgorICAgICAgICAgICAgICAgIGZpbGVzID0gem9uZWZpbGVsaXN0W2tdCisgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJleHBvcnQgVFo9IitzdHIoZmlsZXMpKyI7IHB5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyID4gL2Rldi9udWxsIDI+JjEgJiIpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICAgICAgICAgIHBpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJwcyBhdXggfCBncmVwICdbL3Vdc3IvYmluL3B5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyJyB8IGF3ayAne3ByaW50ICQyfSciLCBzaGVsbCA9IFRydWUpCisgICAgICAgICAgICAgICAgaWYgcGlkOgorICAgICAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oImtpbGwgLTkgIitzdHIocGlkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh6b25lZmlsZWxpc3Rba10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250X2VyciwgMCwgbXNnID0gJ0Vycm9ycyBkamFuZ28gc2VydmVyIGRvZXMgbm90IHN0YXJ0IHdpdGggdGltZXpvbmU6ICVzJyAlIGNudF9lcnIpCisgICAgICAgIG9zLmNoZGlyKGN1cnJlbnRfcGF0aCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZhYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5CkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIERFU0NSSVBUSU9OCisjIEJhc2UgY2xhc3MgaW5oZXJpdGVkIGJ5IHRlc3QgY2xhc3NlcyBpbiBtZXRhL2xpYi9zZWxmdGVzdAorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBlcnJubworCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzCisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVNlbGZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdC5iYXNlIikKKyAgICBsb25nTWVzc2FnZSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSJydW5UZXN0Iik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgICAgICBzZWxmLmxvY2FsY29uZl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKQorICAgICAgICBzZWxmLnRlc3RpbmNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKQorICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmluYyIpCisgICAgICAgIHNlbGYudGVzdGxheWVyX3BhdGggPSBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCisgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKyAgICAgICAgc3VwZXIob2VTZWxmVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZGRpcikKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHByZXZpb3VzIHRlc3QgbGVmdCBhcm91bmQgaW4gY29uZmlnIG9yIGluYyBmaWxlcworICAgICAgICAjIGlmIGl0IGZhaWxlZCBzbyB3ZSBuZWVkIGEgZnJlc2ggc3RhcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdGluY19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZXN0bGF5ZXJfcGF0aCk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHRlc3RzIG1pZ2h0IG5lZWQgdGhlaXIgb3duIHNldHVwCisgICAgICAgICMgYnV0IGlmIHRoZXkgb3ZlcndyaXRlIHRoaXMgb25lIHRoZXkgaGF2ZSB0byBjYWxsCisgICAgICAgICMgc3VwZXIgZWFjaCB0aW1lLCBzbyBsZXQncyBnaXZlIHRoZW0gYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgc2VsZi5zZXRVcExvY2FsKCkKKworICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKKyAgICAgICAgICAgIGZhaWxlZF9leHRyYV9jb21tYW5kcyA9IFtdCisgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0LnN0YXR1cyA9PSAgMDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKQorICAgICAgICAgICAgaWYgZmFpbGVkX2V4dHJhX2NvbW1hbmRzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoInRlYXJEb3duIGNvbW1hbmRzIGhhdmUgZmFpbGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX2V4dHJhX2NvbW1hbmRzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIlRyeWluZyB0byBtb3ZlIG9uLiIpCisgICAgICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQorCisgICAgICAgIGlmIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKworICAgICAgICBzZWxmLnRlYXJEb3duTG9jYWwoKQorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgYWRkIHRlc3Qgc3BlY2lmaWMgY29tbWFuZHMgdG8gdGhlIHRlYXJEb3duIG1ldGhvZC4KKyAgICBkZWYgYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBZGRpbmcgY29tbWFuZCAnJXMnIHRvIHRlYXJEb3duIGZvciB0aGlzIHRlc3QuIiAlIGNvbW1hbmQpCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCkKKyAgICAjIGFkZCB0ZXN0IHNwZWNpZmljIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHJlbW92ZWQgaW4gdGhlIHRlYXJEb3duIG1ldGhvZAorICAgIGRlZiB0cmFja19mb3JfY2xlYW51cChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFkZGluZyBwYXRoICclcycgdG8gYmUgY2xlYW5lZCB1cCB3aGVuIHRlc3QgaXMgb3ZlciIgJSBwYXRoKQorICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cC5hcHBlbmQocGF0aCkKKworICAgICMgd3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYworICAgIGRlZiB3cml0ZV9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgYXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgYXBwZW5kX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgcmVtb3ZlX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG5cJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgd3JpdGUgdG8gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCisgICAgZGVmIHdyaXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyBhcHBlbmQgZGF0YSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKKyAgICBkZWYgYXBwZW5kX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYworICAgIGRlZiByZW1vdmVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCisKKyAgICAjIGRlbGV0ZSBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMgZmlsZQorICAgIGRlZiBkZWxldGVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiRGVsZXRpbmcgZmlsZTogJXMiICUgaW5jX2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbmNfZmlsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAjIHdyaXRlIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKKyAgICBkZWYgd3JpdGVfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICAjIGFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIGFwcGVuZF9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKKworICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIHJlbW92ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuXCVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGMxN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlTGF5ZXJzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc1NikKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3djcm9zc2RlcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhc3BlbGwnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBkZXBlbmRlbmNpZXMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg4MykKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dsYXllcnMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21ldGEtc2VsZnRlc3QnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBsYXllcnMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkzKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd2FwcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9InhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQgZmlsZSB3YXMgbm90IHJlY29nbmlzZWQuICBiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkwKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd292ZXJsYXllZChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9ImFzcGVsbCBvdmVybGF5ZWQgcmVjaXBlIHdhcyBub3QgcmVjb2duaXNlZCBiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbihzZWxmKToKKyAgICAgICAgdGVzdG91dGRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNkaXIodGVzdG91dGRpciksIG1zZyA9ICJ0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbiBzaG91bGQgbm90IGV4aXN0IGF0IHRoaXMgcG9pbnQgaW4gdGltZSIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVzdG91dGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBmbGF0dGVuICVzJyAlIHRlc3RvdXRkaXIpCisgICAgICAgIGJiX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdG91dGRpciwgJ3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGJiX2ZpbGUpLCBtc2cgPSAiQ2Fubm90IGZpbmQgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYiBpbiB0aGUgdGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4gbG9jYWwgZGlyLiIpCisgICAgICAgIGNvbnRlbnRzID0gZnRvb2xzLnJlYWRfZmlsZShiYl9maWxlKQorICAgICAgICBmaW5kX2luX2NvbnRlbnRzID0gcmUuc2VhcmNoKCIjIyMjIyBiYmFwcGVuZGVkIGZyb20gbWV0YS1zZWxmdGVzdCAjIyMjI1xuKC4qXG4pKmluY2x1ZGUgdGVzdF9yZWNpcGUuaW5jIiwgY29udGVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2luX2NvbnRlbnRzLCBtc2cgPSAiRmxhdHRlbmluZyBsYXllcnMgZGlkIG5vdCB3b3JrLiBiaXRiYWtlLWxheWVycyBmbGF0dGVuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfYWRkX3JlbW92ZShzZWxmKToKKyAgICAgICAgdGVzdF9sYXllciA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgIlRoaXMgdGVzdCBjYW5ub3QgcnVuIHdpdGggbWV0YS1za2VsZXRvbiBpbiBiYmxheWVycy5jb25mLiBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIlNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZC4gbWV0YS1za2VsZXRvbiBsYXllciB3YXMgbm90IGFkZGVkIHRvIGNvbmYvYmJsYXllcnMuY29uZi4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAibWV0YS1za2VsZXRvbiBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYXQgdGhpcyBzdGVwLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDY4NjBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5CkBAIC0wLDAgKzEsMjAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzg5KQorICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzEoc2VsZik6CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJykuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBcImNvbmZcIiBkaXIiKQorCisgICAgQHRlc3RjYXNlKDc5MCkKKyAgICBkZWYgdGVzdF9ydW5fYml0YmFrZV9mcm9tX2Rpcl8yKHNlbGYpOgorICAgICAgICBteV9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBteV9lbnZbJ0JCUEFUSCddID0gbXlfZW52WydCVUlMRERJUiddCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5lbnZpcm9uWydCVUlMRERJUiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaXRiYWtlKCctZScsIGVudj1teV9lbnYpLnN0YXR1cywgMCwgbXNnID0gImJpdGJha2UgY291bGRuJ3QgcnVuIGZyb20gYnVpbGRkaXIiKQorCisgICAgQHRlc3RjYXNlKDgwNikKKyAgICBkZWYgdGVzdF9ldmVudF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVCArPSBcInRlc3RfZXZlbnRzXCIiKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBmaW5kX2J1aWxkX3N0YXJ0ZWQgPSByZS5zZWFyY2goIk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRTdGFydGVkKFxuLiopKk5PVEU6IFByZXBhcmluZyBSdW5RdWV1ZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZpbmRfYnVpbGRfY29tcGxldGVkID0gcmUuc2VhcmNoKCJUYXNrcyBTdW1tYXJ5Oi4qKFxuLiopKk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRDb21wbGV0ZWQiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9zdGFydGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX2NvbXBsZXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1Rlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50XCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBwcm9jZXNzLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMpCisgICAgZGVmIHRlc3RfbG9jYWxfc3N0YXRlKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZSAtY2NsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgZmluZF9zZXRzY2VuZSA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3NldHNjZW5lLCBtc2cgPSAiTm8gXCJtNC1uYXRpdmUuKmRvXy4qX3NldHNjZW5lXCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBtNC1uYXRpdmUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0ICkKKworICAgIEB0ZXN0Y2FzZSgxMDUpCisgICAgZGVmIHRlc3RfYml0YmFrZV9pbnZhbGlkX3JlY2lwZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBhc2RmIHJlY2lwZSBkb2Vzbid0IGV4aXN0LCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA3KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF90YXJnZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ2FzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IE5vdGhpbmcgUFJPVklERVMgJ2FzZGYnIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vICdhc2RmJyB0YXJnZXQgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA2KQorICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZmluZF93YXJuaW5ncyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogV0FSTklORyBtZXNzYWdlcyogc2hvd24iLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmaW5kX2Vycm9ycyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogRVJST1IgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfd2FybmluZ3MsIG1zZz0iRGlkIG5vdCBmaW5kIHRoZSBtdW1iZXIgb2Ygd2FybmluZ3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfZXJyb3JzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIGVycm9ycyBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZDpcbiIgKyByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3BhdGNoKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgJ1NSQ19VUkkgKz0gImZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCInKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtYW4gLWMgcGF0Y2gnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbWFuJykKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbiBtYW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHBhdGNoX2RvX3BhdGNoIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vIG1hbi0xLjVoMS1tYWtlLnBhdGNoIGZpbGUgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTYzKQorICAgIGRlZiB0ZXN0X2ZvcmNlX3Rhc2soc2VsZik6CisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbTQtbmF0aXZlJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLUMgY29tcGlsZSBtNC1uYXRpdmUnKQorICAgICAgICBsb29rX2Zvcl90YXNrcyA9IFsnZG9fY29tcGlsZScsICdkb19pbnN0YWxsJywgJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnXQorICAgICAgICBmb3IgdGFzayBpbiBsb29rX2Zvcl90YXNrczoKKyAgICAgICAgICAgIGZpbmRfdGFzayA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLiolcyIgJSB0YXNrLCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfdGFzaywgbXNnID0gIkNvdWxkbid0IGZpbmQgJXMgdGFzay4gYml0YmFrZSBvdXRwdXQgJXMiICUgKHRhc2ssIHJlc3VsdC5vdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDE2NykKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2coc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1nIGNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lJykKKyAgICAgICAgZm9yIGYgaW4gWydwbi1idWlsZGxpc3QnLCAncG4tZGVwZW5kcy5kb3QnLCAncGFja2FnZS1kZXBlbmRzLmRvdCcsICd0YXNrLWRlcGVuZHMuZG90J106CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05PVEU6IFBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gXCdwbi1idWlsZGxpc3RcJycgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIGRlcGVuZGVuY3kgXCJwbi1idWlsZGxpc3RcIiBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiB0YXNrIHRhcmdldC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnb3BlbnNzaCcgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpKSwgbXNnID0gIk5vIFwib3BlbnNzaFwiIGRlcGVuZGVuY3kgZm91bmQgaW4gcG4tYnVpbGRsaXN0IGZpbGUuIikKKworICAgIEB0ZXN0Y2FzZSg4OTkpCisgICAgZGVmIHRlc3RfaW1hZ2VfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoIkRFUExPWV9ESVJfSU1BR0UiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGltYWdlbmFtZSA9IGdldF9iYl92YXIoIklNQUdFX0xJTktfTkFNRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZW5hbWUgKyAiLm1hbmlmZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKG1hbmlmZXN0KSwgbXNnPSJObyBtYW5pZmVzdCBmaWxlIGNyZWF0ZWQgZm9yIGltYWdlLiBJdCBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gJXMiICUgbWFuaWZlc3QpCisKKyAgICBAdGVzdGNhc2UoMTY4KQorICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVjaXBlX3NyY191cmkoc2VsZik6CisgICAgICAgIGRhdGEgPSAnU1JDX1VSSSA9ICJmaWxlOi8vaW52YWxpZCInCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCBkYXRhKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorIiIiKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIG1hbicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1jIGZldGNoIG1hbicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJDb21tYW5kIHN1Y2NlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGZXRjaGVyIGZhaWx1cmU6IFVuYWJsZSB0byBmaW5kIGZpbGUgZmlsZTovL2ludmFsaWQgYW55d2hlcmUuIFRoZSBwYXRocyB0aGF0IHdlcmUgc2VhcmNoZWQgd2VyZTonIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBubyBlcnJvciBtZXNzYWdlIGVuY291bnRlcmVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBGZXRjaGVyIGZhaWx1cmUgZm9yIFVSTDogXCdmaWxlOi8vaW52YWxpZFwnLiBVbmFibGUgdG8gZmV0Y2ggVVJMIGZyb20gYW55IHNvdXJjZS4nIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBmZXRjaGVyIGRpZG4ndCByZXBvcnQgYW55IGVycm9yLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxNzEpCisgICAgZGVmIHRlc3RfcmVuYW1lX2Rvd25sb2FkZWRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKKyIiIikKKyAgICAgICAgZGF0YSA9ICdTUkNfVVJJX2FwcGVuZCA9ICI7ZG93bmxvYWRmaWxlbmFtZT10ZXN0LWFzcGVsbC50YXIuZ3oiJworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnYXNwZWxsJywgZGF0YSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBhc3BlbGwnKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYyBmZXRjaCBhc3BlbGwnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnYXNwZWxsJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJpdGJha2UsICctY2NsZWFuYWxsIGFzcGVsbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgbXNnID0gIkNvdWxkbid0IGZldGNoIGFzcGVsbC4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJETF9ESVIiKSwgJ3Rlc3QtYXNwZWxsLnRhci5neicpKSwgbXNnID0gIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ogZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIkRMX0RJUiIpLCAndGVzdC1hc3BlbGwudGFyLmd6LmRvbmUnKSksICJGaWxlIHJlbmFtZSBmYWlsZWQuIE5vIGNvcnJlc3BvbmRpbmcgdGVzdC1hc3BlbGwudGFyLmd6LmRvbmUgZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorCisgICAgQHRlc3RjYXNlKDEwMjgpCisgICAgZGVmIHRlc3RfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiVEVTVF9FTlY9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX0VOVj1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1lIHwgZ3JlcCBURVNUX0VOVj0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2FsY29uZicgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gImJpdGJha2UgZGlkbid0IHJlcG9ydCBhbnkgdmFsdWUgZm9yIFRFU1RfRU5WIHZhcmlhYmxlLiBUbyB0ZXN0LCBydW4gJ2JpdGJha2UgLWUgfCBncmVwIFRFU1RfRU5WPSciKQorCisgICAgQHRlc3RjYXNlKDEwMjkpCisgICAgZGVmIHRlc3RfZHJ5X3J1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1uIG00LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgImJpdGJha2UgZHJ5IHJ1biBkaWRuJ3QgcnVuIGFzIGV4cGVjdGVkLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzApCisgICAgZGVmIHRlc3RfanVzdF9wYXJzZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiZXJyb3JzIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyByZWNpcGVzLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzEpCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1zIHwgZ3JlcCB3Z2V0JykKKyAgICAgICAgZmluZCA9IHJlLnNlYXJjaCgid2dldCAqOihbMC05YS16QS1aXC5cLV0rKSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kLCAiTm8gdmVyc2lvbiByZXR1cm5lZCBmb3Igc2VhcmNoZWQgcmVjaXBlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMyKQorICAgIGRlZiB0ZXN0X3ByZWZpbGUoc2VsZik6CisgICAgICAgIHByZWNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvcHJlZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwcmVjb25mKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShwcmVjb25mICwiVEVTVF9QUkVGSUxFPVwicHJlZmlsZVwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdwcmVmaWxlJyBpbiByZXN1bHQub3V0cHV0LCAiUHJlY29uZmlndXJlIGZpbGUgXCJwcmVmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiAiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucmVtb3ZlX2NvbmZpZywgIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEB0ZXN0Y2FzZSgxMDMzKQorICAgIGRlZiB0ZXN0X3Bvc3RmaWxlKHNlbGYpOgorICAgICAgICBwb3N0Y29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wb3N0ZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwb3N0Y29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmYgLCAiVEVTVF9QT1NURklMRT1cInBvc3RmaWxlXCIiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUE9TVEZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX1BPU1RGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLVIgY29uZi9wb3N0ZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BPU1RGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncG9zdGZpbGUnIGluIHJlc3VsdC5vdXRwdXQsICJQb3N0Y29uZmlndXJlIGZpbGUgXCJwb3N0ZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4iKQorCisgICAgQHRlc3RjYXNlKDEwMzQpCisgICAgZGVmIHRlc3RfY2hlY2t1cmkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtYyBjaGVja3VyaSBtNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgbXNnID0gIlwiY2hlY2t1cmlcIiB0YXNrIHdhcyBub3QgZXhlY3V0ZWQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzUpCisgICAgZGVmIHRlc3RfY29udGludWUoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCJcbmRvX2ZhaWxfdGFzayAoKSB7XG5leGl0IDEgXG59XG5cbmFkZHRhc2sgZG9fZmFpbF90YXNrIGJlZm9yZSBkb19mZXRjaFxuIiApCisgICAgICAgIHJ1bkNtZCgnYml0YmFrZSAtYyBjbGVhbmFsbCBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtaycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZXJyb3Jwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IGRvX2ZhaWxfdGFzaycpCisgICAgICAgIG1hbnZlciA9IHJlLnNlYXJjaCgiTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtKC4qPyk6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY29udGludWVwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ05PVEU6IHJlY2lwZSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSVzOiB0YXNrIGRvX3VucGFjazogU3RhcnRlZCcgJSBtYW52ZXIuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlcnJvcnBvcyxjb250aW51ZXBvcywgbXNnID0gImJpdGJha2UgZGlkbid0IHBhc3MgZG9fZmFpbF90YXNrLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTE5KQorICAgIGRlZiB0ZXN0X25vbl9ncGx2MyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICdJTkNPTVBBVElCTEVfTElDRU5TRSA9ICJHUEx2MyInCisgICAgICAgIGNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvbG9jYWwuY29uZicpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShjb25mICxkYXRhKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUsIGNvbmYgLGRhdGEpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ3JlYWRsaW5lJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICJCaXRiYWtlIGZhaWxlZCwgZXhpdCBjb2RlICVzLCBvdXRwdXQgJXMiICUgKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndG1wL2RlcGxveS9saWNlbnNlcy9yZWFkbGluZS9nZW5lcmljX0dQTHYzJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0bXAvZGVwbG95L2xpY2Vuc2VzL3JlYWRsaW5lL2dlbmVyaWNfR1BMdjInKSkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2FlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZCwgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIEJ1aWxkaGlzdG9yeUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgY29uZmlnX2J1aWxkaGlzdG9yeShzZWxmLCB0bXBfYmhfbG9jYXRpb249RmFsc2UpOgorICAgICAgICBpZiAobm90ICdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ1VTRVJfQ0xBU1NFUycpKSBhbmQgKG5vdCAnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdJTkhFUklUJykpOgorICAgICAgICAgICAgYWRkX2J1aWxkaGlzdG9yeV9jb25maWcgPSAnSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IlxuQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZykKKworICAgICAgICBpZiB0bXBfYmhfbG9jYXRpb246CisgICAgICAgICAgICAjIFVzaW5nIGEgdGVtcG9yYXJ5IGJ1aWxkaGlzdG9yeSBsb2NhdGlvbiBmb3IgdGVzdGluZworICAgICAgICAgICAgdG1wX2JoX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAidG1wX2J1aWxkaGlzdG9yeV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBidWlsZGhpc3RvcnlfZGlyX2NvbmZpZyA9ICJCVUlMREhJU1RPUllfRElSID0gXCIlc1wiIiAlIHRtcF9iaF9kaXIKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhidWlsZGhpc3RvcnlfZGlyX2NvbmZpZykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG1wX2JoX2RpcikKKworICAgIGRlZiBydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbihzZWxmLCB0YXJnZXQsIGdsb2JhbF9jb25maWc9JycsIHRhcmdldF9jb25maWc9JycsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPUZhbHNlLCBlcnJvcl9yZWdleD0nJyk6CisgICAgICAgIGlmIGNoYW5nZV9iaF9sb2NhdGlvbjoKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29uZmlnX2J1aWxkaGlzdG9yeSh0bXBfYmhfbG9jYXRpb24pCisKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWcpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW4gJXMiICUgdGFyZ2V0KQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKKworICAgICAgICBpZiBleHBlY3RfZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsIG1zZz0iRXJyb3IgZXhwZWN0ZWQgZm9yIGdsb2JhbCBjb25maWcgJyVzJyBhbmQgdGFyZ2V0IGNvbmZpZyAnJXMnIiAlIChnbG9iYWxfY29uZmlnLCB0YXJnZXRfY29uZmlnKSkKKyAgICAgICAgICAgIHNlYXJjaF9mb3JfZXJyb3IgPSByZS5zZWFyY2goZXJyb3JfcmVnZXgsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VhcmNoX2Zvcl9lcnJvciwgbXNnPSJDb3VsZCBub3QgZmluZCBkZXNpcmVkIGVycm9yIGluIG91dHB1dDogJXMiICUgZXJyb3JfcmVnZXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZz0iQ29tbWFuZCAnYml0YmFrZSAlcycgaGFzIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM4MDNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKQEAgLTAsMCArMSwxNDkgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgZ2xvYiBhcyBnCitpbXBvcnQgcGV4cGVjdCBhcyBwCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgoraW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEltYWdlT3B0aW9uc1Rlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc2MSkKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9pbWFnZV9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gZ2V0X2JiX3ZhcigiSU1BR0VfUEtHVFlQRSIpCisgICAgICAgIGlmIGltYWdlX3BrZ3R5cGUgIT0gJ3JwbSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdOb3QgdXNpbmcgUlBNIGFzIG1haW4gcGFja2FnZSBmb3JtYXQnKQorICAgICAgICBiaXRiYWtlKCItYyBjbGVhbmFsbCBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5DX1JQTV9JTUFHRV9HRU4gPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2giJykKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbG9nX2RhdGFfZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwgImNvcmUtaW1hZ2UtbWluaW1hbCIpLCAidGVtcC9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgbG9nX2RhdGFfY3JlYXRlZCA9IGZ0b29scy5yZWFkX2ZpbGUobG9nX2RhdGFfZmlsZSkKKyAgICAgICAgaW5jcmVtZW50YWxfY3JlYXRlZCA9IHJlLnNlYXJjaCgiTk9URTogbG9hZCBvbGQgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbFxuTk9URTogb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0XG5OT1RFOiBjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbChcbi4qKSpOT1RFOiBJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6LipwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIsIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfY3JlYXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGxvZ19kYXRhX3JlbW92ZWQgPSBmdG9vbHMucmVhZF9maWxlKGxvZ19kYXRhX2ZpbGUpCisgICAgICAgIGluY3JlbWVudGFsX3JlbW92ZWQgPSByZS5zZWFyY2goIk5PVEU6IGxvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGxcbk5PVEU6IGNyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsKFxuLiopKk5PVEU6IGluY3JlbWVudGFsIHJlbW92ZWQ6LipvcGVuc3NoLXNzaGQtLioiLCBsb2dfZGF0YV9yZW1vdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfcmVtb3ZlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX3JlbW92ZWQpCisKKyAgICBAdGVzdGNhc2UoOTI1KQorICAgIGRlZiB0ZXN0X3JtX29sZF9pbWFnZShzZWxmKToKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyID0gZ2V0X2JiX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgaW1hZ2VuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgdHJhY2tfb3JpZ2luYWxfZmlsZXMgPSBbXQorICAgICAgICBmb3IgaW1hZ2VfZmlsZSBpbiBkZXBsb3lkaXJfZmlsZXM6CisgICAgICAgICAgICBpZiBpbWFnZW5hbWUgaW4gaW1hZ2VfZmlsZSBhbmQgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VfZmlsZSkpOgorICAgICAgICAgICAgICAgIHRyYWNrX29yaWdpbmFsX2ZpbGVzLmFwcGVuZChvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlX2ZpbGUpKSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJSTV9PTERfSU1BR0UgPSBcIjFcIiIpCisgICAgICAgIGJpdGJha2UoIi1DIHJvb3RmcyBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFtwYXRoIGZvciBwYXRoIGluIHRyYWNrX29yaWdpbmFsX2ZpbGVzIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgaW4gZGVwbG95ZGlyX2ZpbGVzXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQsIG1zZz0iXG5UaGUgZm9sbG93aW5nIGltYWdlIGZpbGVzIHdlcmUgbm90IHJlbW92ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCByZW1haW5pbmdfbm90X2V4cGVjdGVkKSkpCisKKyAgICBAdGVzdGNhc2UoMjg2KQorICAgIGRlZiB0ZXN0X2NjYWNoZV90b29sKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCJjY2FjaGUtbmF0aXZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpLCAiY2NhY2hlIikpLCBtc2cgPSAiTm8gY2NhY2hlIGZvdW5kIHVuZGVyICVzIiAlIHN0cihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpKSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lOSEVSSVQgKz0gImNjYWNoZSInKQorICAgICAgICBiaXRiYWtlKCJtNCAtYyBjbGVhbnNzdGF0ZSIpCisgICAgICAgIGJpdGJha2UoIm00IC1jIGNvbXBpbGUiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYml0YmFrZSwgJ2NjYWNoZS1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIHJlcyA9IHJ1bkNtZCgiZ3JlcCBjY2FjaGUgJXMiICUgKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwibTQiKSwidGVtcC9sb2cuZG9fY29tcGlsZSIpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMsIG1zZz0iTm8gbWF0Y2ggZm9yIGNjYWNoZSBpbiBtNCBsb2cuZG9fY29tcGlsZS4gRm9yIGZ1cnRoZXIgZGV0YWlsczogJXMiICUgb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCJtNCIpLCJ0ZW1wL2xvZy5kb19jb21waWxlIikpCisKKworY2xhc3MgRGlza01vblRlc3Qob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjc3KQorICAgIGRlZiB0ZXN0X3N0b3B0YXNrX2JlaGF2aW9yKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IiwgaWdub3JlX3N0YXR1cyA9IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IE5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIlNUT1BUQVNLUyIhJyBpbiByZXMub3V0cHV0LCBtc2cgPSAiVGFza3Mgc2hvdWxkIGhhdmUgc3RvcHBlZC4gRGlzayBtb25pdG9yIGlzIHNldCB0byBTVE9QVEFTSzogJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogSW1tZWRpYXRlbHkgYWJvcnQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIkFCT1JUIiEnIGluIHJlcy5vdXRwdXQsICJUYXNrcyBzaG91bGQgaGF2ZSBiZWVuIGFib3J0ZWQgaW1tZWRpYXRlbGx5LiBEaXNrIG1vbml0b3IgaXMgc2V0IHRvIEFCT1JUOiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdXQVJOSU5HOiBUaGUgZnJlZSBzcGFjZScgaW4gcmVzLm91dHB1dCwgbXNnID0gIkEgd2FybmluZyBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCBmb3IgZGlzayBtb25pdG9yIGlzIHNldCB0byBXQVJOOiAlcyIgJXJlcy5vdXRwdXQpCisKK2NsYXNzIFNhbml0eU9wdGlvbnNUZXN0KG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDkyNykKKyAgICBkZWYgdGVzdF9vcHRpb25zX3dhcm5xYV9lcnJvcnFhX3N3aXRjaChzZWxmKToKKyAgICAgICAgYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtY2NsZWFuc3N0YXRlIikKKworICAgICAgICBpZiAicGFja2FnZXMtbGlzdCIgbm90IGluIGdldF9iYl92YXIoIkVSUk9SX1FBIik6CisgICAgICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiRVJST1JfUUFfYXBwZW5kID0gXCIgcGFja2FnZXMtbGlzdFwiIikKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdQQUNLQUdFUyArPSBcIiR7UE59LWRiZ1wiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogUUEgSXNzdWU6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtZGJnIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnRVJST1JfUUFfcmVtb3ZlID0gInBhY2thZ2VzLWxpc3QiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdXQVJOX1FBX2FwcGVuZCA9ICIgcGFja2FnZXMtbGlzdCInKQorICAgICAgICBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIC1jY2xlYW5zc3RhdGUiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIikKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIiBpbiByZXMub3V0cHV0LCBtc2c9cmVzLm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyNzgpCisgICAgZGVmIHRlc3Rfc2FuaXR5X3VzZXJzcGFjZV9kZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ1dBUk5fUUFfYXBwZW5kID0gIiB1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyB1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIicpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgZ3ppcCBuZnMtdXRpbHMiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJnemlwIG5mcy11dGlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IGd6aXAiIGluIHJlcy5vdXRwdXQsICJXQVJOSU5HOiBRQSBJc3N1ZTogZ3ppcCBtZXNzYWdlIGlzIG5vdCBwcmVzZW50IGluIGJpdGJha2UncyBvdXRwdXQ6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IG5mcy11dGlscyIgaW4gcmVzLm91dHB1dCwgIldBUk5JTkc6IFFBIElzc3VlOiBuZnMtdXRpbHMgbWVzc2FnZSBpcyBub3QgcHJlc2VudCBpbiBiaXRiYWtlJ3Mgb3V0cHV0OiAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBCdWlsZGhpc3RvcnlUZXN0cyhCdWlsZGhpc3RvcnlCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgyOTMpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKSwgImJ1aWxkaGlzdG9yeSBkaXIgd2FzIG5vdCBjcmVhdGVkLiIpCisKKyAgICBAdGVzdGNhc2UoMjk0KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9idWlsZHRpbWVfcHJfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgZXJyb3IgPSAiRVJST1I6IFFBIElzc3VlOiBQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICguKi1yMSB0byAuKi1yMCkiICUgdGFyZ2V0CisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjFcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1UcnVlKQorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIwXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1UcnVlLCBlcnJvcl9yZWdleD1lcnJvcikKKworY2xhc3MgQnVpbGRJbWFnZXNUZXN0KG9lU2VsZlRlc3QpOgorICAgIEB0ZXN0Y2FzZSg1NjMpCisgICAgZGVmIHRlc3RfZGlyZWN0ZmIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHRlc3QgdGhlIGJ1aWxkIG9mIGRpcmVjdGZiIGltYWdlIGZvciBhcm0gYXJjaC4KKyAgICAgICAgSW4gZXNzZW5jZSB3ZSBidWlsZCBhIGNvcmVpbWFnZWRpcmVjdGZiIGFuZCB0ZXN0IHRoZSBleGl0Y29kZSBvZiBiaXRiYWtlIHRoYXQgaW4gY2FzZSBvZiBzdWNjZXNzIGlzIDAuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJESVNUUk9fRkVBVFVSRVNfcmVtb3ZlID0gXCJ4MTFcIlxuRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9IFwiIGRpcmVjdGZiXCJcbk1BQ0hJTkUgPz89IFwicWVtdWFybVwiIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgiY29yZS1pbWFnZS1kaXJlY3RmYiIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCAiXG5jb3JlaW1hZ2VkaXJlY3RmYiBmYWlsZWQgdG8gYnVpbGQuIFBsZWFzZSBjaGVjayBsb2dzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBBcmNoaXZlclRlc3Qob2VTZWxmVGVzdCk6CisgICAgQHRlc3RjYXNlKDkyNikKKyAgICBkZWYgdGVzdF9hcmNoX3dvcmtfZGlyX2FuZF9leHBvcnRfc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBmb3IgYXJjaGl2aW5nIHRoZSB3b3JrIGRpcmVjdG9yeSBhbmQgZXhwb3J0aW5nIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUID0gXCJhcmNoaXZlclwiXG5BUkNISVZFUl9NT0RFW3NyY10gPSBcIm9yaWdpbmFsXCJcbkFSQ0hJVkVSX01PREVbc3JwbV0gPSBcIjFcIiIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuQ291bGRuJ3QgYnVpbGQgeGN1cnNvcnRyYW5zcGFyZW50dGhlbWUuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBwa2dzX3BhdGggPSBnLmdsb2Ioc3RyKHNlbGYuYnVpbGRkaXIpICsgIi90bXAvZGVwbG95L3NvdXJjZXMvYWxsYXJjaCoveGN1cnMqIikKKyAgICAgICAgc3JjX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi5zcmMucnBtIgorICAgICAgICB0YXJfZmlsZV9nbG9iID0gc3RyKHBrZ3NfcGF0aFswXSkgKyAiL3hjdXJzb3IqLnRhci5neiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChnLmdsb2Ioc3JjX2ZpbGVfZ2xvYikgYW5kIGcuZ2xvYih0YXJfZmlsZV9nbG9iKSksICJDb3VsZG4ndCBmaW5kIC5zcmMucnBtIGFuZCAudGFyLmd6IGZpbGVzIHVuZGVyIHRtcC9kZXBsb3kvc291cmNlcy9hbGxhcmNoKi94Y3Vyc29yKiIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3MzFkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQpAQCAtMCwwICsxLDk3MSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGdsb2IKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIERldnRvb2xCYXNlKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIF90ZXN0X3JlY2lwZV9jb250ZW50cyhzZWxmLCByZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGNoZWNraW5oZXJpdHMpOgorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhciA9IHNwbGl0bGluZVswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0bGluZVsxXS5zdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyIGluIGNoZWNrdmFyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWR2YWx1ZSA9IGNoZWNrdmFycy5wb3AodmFyKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbmVlZHZhbHVlLCAndmFsdWVzIGZvciAlcyBkbyBub3QgbWF0Y2gnICUgdmFyKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaW5oZXJpdCAnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBsaW5lLnNwbGl0KClbMTpdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3ZhcnMsIHt9LCAnU29tZSB2YXJpYWJsZXMgbm90IGZvdW5kOiAlcycgJSBjaGVja3ZhcnMpCisKKyAgICAgICAgZm9yIGluaGVyaXQgaW4gY2hlY2tpbmhlcml0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5oZXJpdCwgaW5oZXJpdHMsICdNaXNzaW5nIGluaGVyaXQgb2YgJXMnICUgaW5oZXJpdCkKKworICAgIGRlZiBfY2hlY2tfYmJhcHBlbmQoc2VsZiwgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMnLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0bGluZXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBpbnJlY2lwZSA9IEZhbHNlCisgICAgICAgIGJiYXBwZW5kcyA9IFtdCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0bGluZXM6CisgICAgICAgICAgICBpZiBpbnJlY2lwZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRzLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgbGluZSA9PSAnJXM6JyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSk6CisgICAgICAgICAgICAgICAgaW5yZWNpcGUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihiYmFwcGVuZHMpLCAyLCAnJXMgcmVjaXBlIGlzIGJlaW5nIGJiYXBwZW5kZWQgYnkgYW5vdGhlciBsYXllciAtIGJiYXBwZW5kcyBmb3VuZDpcbiAgJXMnICUgKHRlc3RyZWNpcGUsICdcbiAgJy5qb2luKGJiYXBwZW5kcykpKQorICAgICAgICBmb3IgYmJhcHBlbmQgaW4gYmJhcHBlbmRzOgorICAgICAgICAgICAgaWYgYmJhcHBlbmQuc3RhcnRzd2l0aChhcHBlbmRkaXIpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGJiYXBwZW5kCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYmJhcHBlbmQgZm9yIHJlY2lwZSAlcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGNyZWF0ZWQgaW4gdGVzdCBsYXllcicgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlCisKKyAgICBkZWYgX2NyZWF0ZV90ZW1wX2xheWVyKHNlbGYsIHRlbXBsYXllcmRpciwgYWRkbGF5ZXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5PTk5OSwgcmVjaXBlcGF0aHNwZWM9J3JlY2lwZXMtKi8qJyk6CisgICAgICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHksIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBpZiBhZGRsYXllcjoKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisKKyAgICBkZWYgX3Byb2Nlc3NfbHNfb3V0cHV0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IGxzIC1sIG91dHB1dCB0byBhIGZvcm1hdCB3ZSBjYW4gcmVhc29uYWJseSBjb21wYXJlIGZyb20gb25lIGNvbnRleHQKKyAgICAgICAgdG8gYW5vdGhlciAoZS5nLiBmcm9tIGhvc3QgdG8gdGFyZ2V0KQorICAgICAgICAiIiIKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAjIFJlbW92ZSB0cmFpbGluZyAuIG9uIHBlcm1zCisgICAgICAgICAgICBzcGxpdGxpbmVbMF0gPSBzcGxpdGxpbmVbMF0ucnN0cmlwKCcuJykKKyAgICAgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgLiBvbiBwYXRocworICAgICAgICAgICAgc3BsaXRsaW5lWy0xXSA9IHNwbGl0bGluZVstMV0ubHN0cmlwKCcuJykKKyAgICAgICAgICAgICMgRHJvcCBmaWVsZHMgd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzddCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzZdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzVdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzRdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzFdCisgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoJyAnLmpvaW4oc3BsaXRsaW5lKSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKworY2xhc3MgRGV2dG9vbFRlc3RzKERldnRvb2xCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgxMTU4KQorICAgIGRlZiB0ZXN0X2NyZWF0ZV93b3Jrc3BhY2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvd29ya3NwYWNlJyBub3QgaW4gcmVzdWx0Lm91dHB1dCwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggYSBzcGVjaWZpYyBwYXRoCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRyeSBjcmVhdGluZyBhIHdvcmtzcGFjZSBsYXllciB3aXRoIHRoZSBkZWZhdWx0IHBhdGgKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHdvcmtzcGFjZWRpciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTU5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHVybCA9ICdodHRwOi8vd3d3Lml2YXJjaC5jb20vcHJvZ3JhbXMvc291cmNlcy9wdi0xLjUuMy50YXIuYnoyJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3dnZXQgJXMnICUgdXJsLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd0YXIgeGZ2IHB2LTEuNS4zLnRhci5iejInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdwdi0xLjUuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlIHNjcmlwdCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIHB2JykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCBwdiAlcycgJSBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncHYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQorICAgICAgICBiaXRiYWtlKCdwdiAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBwdicpCisgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgJ3B2JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3RhbGxkaXIsICdDb3VsZCBub3QgcXVlcnkgaW5zdGFsbGRpciB2YXJpYWJsZScpCisgICAgICAgIGJpbmRpciA9IGdldF9iYl92YXIoJ2JpbmRpcicsICdwdicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiaW5kaXIsICdDb3VsZCBub3QgcXVlcnkgYmluZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgYmluZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIGJpbmRpciA9IGJpbmRpclsxOl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihpbnN0YWxsZGlyLCBiaW5kaXIsICdwdicpKSwgJ3B2IGJpbmFyeSBub3QgZm91bmQgaW4gRCcpCisKKyAgICBAdGVzdGNhc2UoMTE2MikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBXZSBkb24ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHBpY2sgdXAgdGhpcyBkZXBlbmRlbmN5IGF1dG9tYXRpY2FsbHkgeWV0Li4uCisgICAgICAgIGJpdGJha2UoJ2xpYnVzYjEnKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cuaW50cmEybmV0LmNvbS9lbi9kZXZlbG9wZXIvbGliZnRkaS9kb3dubG9hZC9saWJmdGRpMS0xLjEudGFyLmJ6MicKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd3Z2V0ICVzJyAlIHVybCwgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgndGFyIHhmdiBsaWJmdGRpMS0xLjEudGFyLmJ6MicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xpYmZ0ZGkxLTEuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnQ01ha2VMaXN0cy50eHQnKSksICdVbmFibGUgdG8gZmluZCBDTWFrZUxpc3RzLnR4dCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkIChhbmQgdXNlIC1WIHNvIHdlIHRlc3QgdGhhdCB0b28pCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIGxpYmZ0ZGkgJXMgLVYgMS4xJyAlIHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUgKGhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIGRldnRvb2wgYWRkIHNpbmNlIHRoZSByZWNpcGUgb25seSBleGlzdHMgdGhlbikKKyAgICAgICAgYml0YmFrZSgnbGliZnRkaSAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBsaWJmdGRpJykKKyAgICAgICAgc3RhZ2luZ19saWJkaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0xJQkRJUicsICdsaWJmdGRpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YWdpbmdfbGliZGlyLCAnQ291bGQgbm90IHF1ZXJ5IFNUQUdJTkdfTElCRElSIHZhcmlhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAibGliZnRkaSBiaW5hcnkgbm90IGZvdW5kIGluIFNUQUdJTkdfTElCRElSLiBPdXRwdXQgb2YgZGV2dG9vbCBidWlsZCBsaWJmdGRpICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHJlc2V0CisgICAgICAgIHN0YW1wcHJlZml4ID0gZ2V0X2JiX3ZhcignU1RBTVAnLCAnbGliZnRkaScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCBsaWJmdGRpJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYmZ0ZGknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgbGliZnRkaScpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXggKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlcywgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgbGliZnRkaSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICdsaWJmdGRpIGJpbmFyeSBzdGlsbCBmb3VuZCBpbiBTVEFHSU5HX0xJQkRJUiBhZnRlciBjbGVhbmluZycpCisKKyAgICBAdGVzdGNhc2UoMTE2MCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB0ZXN0dmVyID0gJzAuMjMnCisgICAgICAgIHVybCA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYXJrdXBTYWZlL01hcmt1cFNhZmUtJXMudGFyLmd6JyAlIHRlc3R2ZXIKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdweXRob24tbWFya3Vwc2FmZScKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXMuYmInICUgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9NYXJrdXBTYWZlLSVzJyAlIHRlc3R2ZXIKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgd2l0aCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMgLVYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsLCB0ZXN0dmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIHRlc3R2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJHtQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UodGVzdHZlciwgJyR7UFZ9JykKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEB0ZXN0Y2FzZSgxMTYxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2ZldGNoX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB1cmwgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIGNoZWNrcmV2ID0gJzQ2MmYwNjUyMDU1ZDg5YzY0OGRkZDU0ZmQ3YjAzZjE3NWMyYzY5NzMnCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbGlibWF0Y2hib3gyJworICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkOiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMCtnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9ICcke0FVVE9SRVZ9JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSB3aXRoIHJldmlzaW9uIGFuZCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHVybF9yZXYgPSAnJXM7cmV2PSVzJyAlICh1cmwsIGNoZWNrcmV2KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICIlcyIgLVYgMS41JyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybF9yZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuNStnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IGNoZWNrcmV2CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAdGVzdGNhc2UoMTE2NCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSBtZGFkbSAteCAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnbWRhZG1fKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSgnbWRhZG0nKQorICAgICAgICAjIFRyeSBtYWtpbmcgKG1pbm9yKSBtb2RpZmljYXRpb25zIHRvIHRoZSBzb3VyY2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgLWkgJ3MhXlwuVEguKiEuVEggTURBRE0gOCBcIlwiIHY5Ljk5OS1jdXN0b20hJyAlcyIgJSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21kYWRtLjguaW4nKSkKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgcGFja2FnZScpCisgICAgICAgIHBrZ2QgPSBnZXRfYmJfdmFyKCdQS0dEJywgJ21kYWRtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBrZ2QsICdDb3VsZCBub3QgcXVlcnkgUEtHRCB2YXJpYWJsZScpCisgICAgICAgIG1hbmRpciA9IGdldF9iYl92YXIoJ21hbmRpcicsICdtZGFkbScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5kaXIsICdDb3VsZCBub3QgcXVlcnkgbWFuZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgbWFuZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIG1hbmRpciA9IG1hbmRpclsxOl0KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkLCBtYW5kaXIsICdtYW44JywgJ21kYWRtLjgnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy5USCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUucnN0cmlwKCksICcuVEggTURBRE0gOCAiIiB2OS45OTktY3VzdG9tJywgJ21hbiBmaWxlIG5vdCBtb2RpZmllZC4gbWFuIHNlYXJjaGVkIGZpbGUgcGF0aDogJXMnICUgb3MucGF0aC5qb2luKHBrZ2QsIG1hbmRpciwgJ21hbjgnLCAnbWRhZG0uOCcpKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCByZXNldAorICAgICAgICBzdGFtcHByZWZpeCA9IGdldF9iYl92YXIoJ1NUQU1QJywgJ21kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4LCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlIG1kYWRtJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeCArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSBtZGFkbSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisKKyAgICBAdGVzdGNhc2UoMTE2NikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9pbnZhbGlkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgdGVzdHJlY2lwZXMgPSAncGVyZiBrZXJuZWwtZGV2c3JjIHBhY2thZ2UtaW5kZXggY29yZS1pbWFnZS1taW5pbWFsIG1ldGEtdG9vbGNoYWluIHBhY2thZ2Vncm91cC1jb3JlLXNkayBtZXRhLWlkZS1zdXBwb3J0Jy5zcGxpdCgpCisgICAgICAgICMgRmluZCBhY3R1YWwgbmFtZSBvZiBnY2Mtc291cmNlIHNpbmNlIGl0IG5vdyBpbmNsdWRlcyB0aGUgdmVyc2lvbiAtIGNydWRlLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMgcHVycG9zZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcyBnY2Mtc291cmNlKicpCisgICAgICAgIHJlYWRpbmcgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnPT0nKToKKyAgICAgICAgICAgICAgICByZWFkaW5nID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiByZWFkaW5nIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcgJyk6CisgICAgICAgICAgICAgICAgdGVzdHJlY2lwZXMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVswXSkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICAjIENoZWNrIGl0J3MgYSB2YWxpZCByZWNpcGUKKyAgICAgICAgICAgIGJpdGJha2UoJyVzIC1lJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgZXh0cmFjdCBzaG91bGQgZmFpbAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgJXMgJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAodGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdGZXRjaGluZyAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGVycm9yZWQgb3V0IGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2gnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGdpdmVuIGFuIEVSUk9SJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgbW9kaWZ5IHNob3VsZCBmYWlsCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfbmF0aXZlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gRmFsc2UKKyAgICAgICAgaW5oZXJpdG5hdGl2ZSA9IEZhbHNlCisgICAgICAgIHRlc3RyZWNpcGVzID0gJ210b29scy1uYXRpdmUgYXB0LW5hdGl2ZSBkZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlJy5zcGxpdCgpCisgICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgorICAgICAgICAgICAgY2hlY2tleHRlbmQgPSAnbmF0aXZlJyBpbiAoZ2V0X2JiX3ZhcignQkJDTEFTU0VYVEVORCcsIHRlc3RyZWNpcGUpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgYmJjbGFzc2V4dGVuZGVkOgorICAgICAgICAgICAgICAgIGJiY2xhc3NleHRlbmRlZCA9IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICBpZiBub3QgaW5oZXJpdG5hdGl2ZToKKyAgICAgICAgICAgICAgICBpbmhlcml0bmF0aXZlID0gbm90IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIG1vZGlmeSBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCBidWlsZCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCByZXNldCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiY2xhc3NleHRlbmRlZCwgJ05vbmUgb2YgdGhlc2UgcmVjaXBlcyBhcmUgQkJDTEFTU0VYVEVORGVkIHRvIG5hdGl2ZSAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmhlcml0bmF0aXZlLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGRvICJpbmhlcml0IG5hdGl2ZSIgLSBuZWVkIHRvIGFkanVzdCB0ZXN0cmVjaXBlcyBsaXN0OiAlcycgJSAnLCAnLmpvaW4odGVzdHJlY2lwZXMpKQorCisKKyAgICBAdGVzdGNhc2UoMTE2NSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21rZWxmaW1hZ2UnCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW5zc3RhdGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21rZWxmaW1hZ2VfKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKHRlc3RyZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTE2NykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9sb2NhbGZpbGVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdsaWdodHRwZCcKKyAgICAgICAgc3JjX3VyaSA9IChnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgZm91bmRsb2NhbCA9IEZhbHNlCisgICAgICAgIGZvciBpdGVtIGluIHNyY191cmk6CisgICAgICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgJy5wYXRjaCcgbm90IGluIGl0ZW06CisgICAgICAgICAgICAgICAgZm91bmRsb2NhbCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRsb2NhbCwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gZmV0Y2ggbG9jYWwgZmlsZXMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgbm8gbG9uZ2VyIGRvZXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25maWd1cmUuYWMnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnJXNfKi5iYmFwcGVuZCcgJSB0ZXN0cmVjaXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVHJ5IGJ1aWxkaW5nCisgICAgICAgIGJpdGJha2UodGVzdHJlY2lwZSkKKworICAgIEB0ZXN0Y2FzZSgxMTY5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWluaWNvbScKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb3VwbGUgb2YgY29tbWl0cworICAgICAgICAjIEZJWE1FOiB0aGlzIG9ubHkgdGVzdHMgYWRkaW5nLCBuZWVkIHRvIGFsc28gdGVzdCB1cGRhdGUgYW5kIHJlbW92ZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkFkZGl0aW9uYWwgbGluZSIgPj4gUkVBRE1FJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBSRUFETUUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQSBuZXcgZmlsZSIgPiBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGFkZCBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGEgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIHNob3VsZCBiZSBtb2RpZmllZCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzdGF0dXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0dXMpLCAzLCAnTGVzcy9tb3JlIGZpbGVzIG1vZGlmaWVkIHRoYW4gZXhwZWN0ZWQuIEVudGlyZSBzdGF0dXM6XG4lcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCcwMDAxLUNoYW5nZS10aGUtUkVBRE1FLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKCcwMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goJyVzX1teX10qLmJiJCcgJSB0ZXN0cmVjaXBlLCBsaW5lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnIE0gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gc3RhdHVzOiAlcycgJSBsaW5lKQorCisgICAgQHRlc3RjYXNlKDExNzIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbXRkLXV0aWxzJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCBlbnRyeS5lbmRzd2l0aCgnLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQoZW50cnlbNzpdLnNwbGl0KCc7JylbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ocGF0Y2hlcyksIDAsICdUaGUgJXMgcmVjaXBlIGRvZXMgbm90IGFwcGVhciB0byBjb250YWluIGFueSBwYXRjaGVzLCBzbyB0aGlzIHRlc3Qgd2lsbCBub3QgYmUgZWZmZWN0aXZlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY291cGxlIG9mIGNvbW1pdHMKKyAgICAgICAgIyBGSVhNRTogdGhpcyBvbmx5IHRlc3RzIGFkZGluZywgbmVlZCB0byBhbHNvIHRlc3QgdXBkYXRlIGFuZCByZW1vdmUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICIjIEFkZGl0aW9uYWwgbGluZSIgPj4gTWFrZWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkEgbmV3IGZpbGUiID4gZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBhZGQgZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBhIG5ldyBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLXJmICVzOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBzaG91bGQgYmUgbW9kaWZpZWQnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzOgorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChwYXRjaCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgRCAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCclc19bXl9dKi5iYiQnICUgdGVzdHJlY2lwZSwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgTSAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIHN0YXR1czogJXMnICUgbGluZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgZGlmZiAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBhZGRsaW5lcyA9IFsnU1JDUkVWID0gIi4qIicsICdTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQiJ10KKyAgICAgICAgc3JjdXJpbGluZXMgPSBzcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgc3JjdXJpbGluZXNbMF0gPSAnU1JDX1VSSSA9ICInICsgc3JjdXJpbGluZXNbMF0KKyAgICAgICAgc3JjdXJpbGluZXMuYXBwZW5kKCciJykKKyAgICAgICAgcmVtb3ZlbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInXSArIHNyY3VyaWxpbmVzCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrKysnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGFkZGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChpdGVtLCBsaW5lWzE6XS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVkLCAnVW5leHBlY3RlZCBkaWZmIGFkZCBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiByZW1vdmUgbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYXV0byBtb2RlCisgICAgICAgIHJ1bkNtZCgnY2QgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCcpCisgICAgICAgIHRvcGxldmVsZGlyID0gcmVzdWx0Lm91dHB1dC5zdHJpcCgpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmVscGF0Y2hwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRvcGxldmVsZGlyKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZXhwZWN0ZWRzdGF0dXMgPSBbKCdNJywgb3MucGF0aC5yZWxwYXRoKHJlY2lwZWZpbGUsIHRvcGxldmVsZGlyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMS1DaGFuZ2UtdGhlLU1ha2VmaWxlLnBhdGNoJyAlIHJlbHBhdGNocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMi1BZGQtYS1uZXctZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpXQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBzdGF0dXNsaW5lID0gbGluZS5zcGxpdChOb25lLCAxKQorICAgICAgICAgICAgZm9yIGZzdGF0dXMsIGZuIGluIGV4cGVjdGVkc3RhdHVzOgorICAgICAgICAgICAgICAgIGlmIGZuID09IHN0YXR1c2xpbmVbMV06CisgICAgICAgICAgICAgICAgICAgIGlmIGZzdGF0dXMgIT0gc3RhdHVzbGluZVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gbGluZTogJXMnICUgbGluZSkKKworICAgIEB0ZXN0Y2FzZSgxMTcwKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gTk9UIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgdGVtcHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc291cmNlJykKKyAgICAgICAgdGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsYXllcicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wc3JjZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcHNyY2RpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgJ3MhXFwoI2RlZmluZSBWRVJTSU9OXFxXKlwiW15cIl0qXFwpXCIhXFwxLWN1c3RvbVwiIScgLWkgUmVhZE1lLmMiLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJBZGQgb3VyIGN1c3RvbSB2ZXJzaW9uIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyIGFuZCBhZGQgaXQgdG8gYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIFRydWUsICdzZWxmdGVzdHVwZGF0ZXJlY2lwZScpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCB3YXMgY3JlYXRlZAorICAgICAgICBzcGxpdHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkuc3BsaXQob3Muc2VwKQorICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCBzcGxpdHBhdGhbLTJdLCBzcGxpdHBhdGhbLTFdKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpCisgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUsICcwMDAxLUFkZC1vdXItY3VzdG9tLXZlcnNpb24ucGF0Y2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgcGF0Y2ggZ2V0cyBkZWxldGVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBkZWxldGVkJykKKyAgICAgICAgZXhwZWN0ZWRsaW5lczIgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzMiwgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgorICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQgKHdpdGggZGlzYWJsZWQgbGF5ZXIpJykKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNzEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZF9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICAgICAgZ2l0X3VyaSA9IGVudHJ5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHRlbXBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NvdXJjZScpCisgICAgICAgIHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGF5ZXInKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY29tbWl0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiIyBBZGRpdGlvbmFsIGxpbmUiID4+IE1ha2VmaWxlJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1mICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAuJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUpKQorICAgICAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBsYXllcgorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAib2VzZWxmdGVzdHRlbXBsYXllciJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIl4ke0xBWUVSRElSfS8iXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiOTk5IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIjEiXG4nKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMgfHwgdHJ1ZScgJSB0ZW1wbGF5ZXJkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUgaXMgc3RpbGwgY2xlYW4KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgd2FzIGNyZWF0ZWQKKyAgICAgICAgc3BsaXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLnNwbGl0KG9zLnNlcCkKKyAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgc3BsaXRwYXRoWy0yXSwgc3BsaXRwYXRoWy0xXSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiBydW4gaXQgYWdhaW4gYW5kIGJiYXBwZW5kIGlzbid0IG1vZGlmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgU1JDUkVWIGNoYW5nZXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgSEVBRF4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIFB1dCBjb21taXQgYmFjayBhbmQgY2hlY2sgd2UgY2FuIHJ1biBpdCBpZiBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgICAgIG9zLnJlbW92ZShiYmFwcGVuZGZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNjMpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9leHRyYWN0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIFRyeSBkZXZ0b29sIGV4dHJhY3QKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgcmVtYWtlICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlLmFtJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKworICAgIEB0ZXN0Y2FzZSgxMTY4KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfcmVzZXRfYWxsKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICB0ZXN0cmVjaXBlMSA9ICdtZGFkbScKKyAgICAgICAgdGVzdHJlY2lwZTIgPSAnY3JvbmllJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUxKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUyLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTIpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHN0YW1wcHJlZml4MSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDEsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIHN0YW1wcHJlZml4MiA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDIsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzMSA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDEgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczEsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICBtYXRjaGVzMiA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDIgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczIsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUyKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9kZXBsb3lfdGFyZ2V0KHNlbGYpOgorICAgICAgICAjIE5PVEU6IFdoaWxzdCB0aGlzIHRlc3Qgd291bGQgc2VlbWluZ2x5IGJlIGJldHRlciBwbGFjZWQgYXMgYSBydW50aW1lIHRlc3QsCisgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgcnVudGltZSB0ZXN0cyBydW4gdW5kZXIgYml0YmFrZSBhbmQgeW91IGNhbid0IHJ1bgorICAgICAgICAjIGRldnRvb2wgd2l0aGluIGJpdGJha2UgKHNpbmNlIGRldnRvb2wgbmVlZHMgdG8gcnVuIGJpdGJha2UgaXRzZWxmKS4KKyAgICAgICAgIyBBZGRpdGlvbmFsbHkgd2UgYXJlIHRlc3RpbmcgYnVpbGQtdGltZSBmdW5jdGlvbmFsaXR5IGFzIHdlbGwsIHNvCisgICAgICAgICMgcmVhbGx5IHRoaXMgaGFzIHRvIGJlIGRvbmUgYXMgYW4gb2Utc2VsZnRlc3QgdGVzdC4KKyAgICAgICAgIworICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBpZiBub3QgbWFjaGluZS5zdGFydHN3aXRoKCdxZW11Jyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3Qgb25seSB3b3JrcyB3aXRoIHFlbXUgbWFjaGluZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvcnVucWVtdS1ub3N1ZG8nKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1lvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaXAgdHVudGFwIHNob3cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpZmNvbmZpZyAtYScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcCBkZXZpY2VzIGV4aXN0IHdpdGggaWZjb25maWcgb3IgaXA6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0YXAnKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm8gdGFwIGRldmljZXMgZm91bmQgLSB5b3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBEZWZpbml0aW9ucworICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICB0ZXN0ZmlsZSA9ICcvc2Jpbi9tZGFkbScKKyAgICAgICAgdGVzdGltYWdlID0gJ29lLXNlbGZ0ZXN0LWltYWdlJworICAgICAgICB0ZXN0Y29tbWFuZCA9ICcvc2Jpbi9tZGFkbSAtLWhlbHAnCisgICAgICAgICMgQnVpbGQgYW4gaW1hZ2UgdG8gcnVuCisgICAgICAgIGJpdGJha2UoIiVzIHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIgJSB0ZXN0aW1hZ2UpCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0aW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzLyVzKicgJSAoZGVwbG95X2Rpcl9pbWFnZSwgdGVzdGltYWdlKSkKKyAgICAgICAgIyBDbGVhbiByZWNpcGUgc28gdGhlIGZpcnN0IGRlcGxveSB3aWxsIGZhaWwKKyAgICAgICAgYml0YmFrZSgiJXMgLWMgY2xlYW4iICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgZGV2dG9vbCBtb2RpZnkKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIFRlc3QgdGhhdCBkZXBsb3ktdGFyZ2V0IGF0IHRoaXMgcG9pbnQgZmFpbHMgKHByb3Blcmx5KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZGVwbG95LXRhcmdldCAtbiAlcyByb290QGxvY2FsaG9zdCcgJSB0ZXN0cmVjaXBlLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dCwgMCwgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQsIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZXN1bHQub3V0cHV0LCAnVHJhY2ViYWNrJywgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQgd2l0aCBhIHByb3BlciBlcnJvciBub3QgYSB0cmFjZWJhY2ssIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QgdHJ5IGEgZHJ5LXJ1biBvZiBkZXBsb3ktdGFyZ2V0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyAgJXMnICUgdGVzdGZpbGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQm9vdCB0aGUgaW1hZ2UKKyAgICAgICAgd2l0aCBydW5xZW11KHRlc3RpbWFnZSwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgTm93IHJlYWxseSB0ZXN0IGRlcGxveS10YXJnZXQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQorICAgICAgICAgICAgIyBSdW4gYSB0ZXN0IGNvbW1hbmQgdG8gc2VlIGlmIGl0IHdhcyBpbnN0YWxsZWQgcHJvcGVybHkKKyAgICAgICAgICAgIHNzaGFyZ3MgPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3NzaCAlcyByb290QCVzICVzJyAlIChzc2hhcmdzLCBxZW11LmlwLCB0ZXN0Y29tbWFuZCkpCisgICAgICAgICAgICAjIENoZWNrIGlmIGl0IGRlcGxveWVkIGFsbCBvZiB0aGUgZmlsZXMgd2l0aCB0aGUgcmlnaHQgb3duZXJzaGlwL3Blcm1zCisgICAgICAgICAgICAjIEZpcnN0IGxvb2sgb24gdGhlIGhvc3QgLSBuZWVkIHRvIGRvIHRoaXMgdW5kZXIgcHNldWRvIHRvIGdldCB0aGUgY29ycmVjdCBvd25lcnNoaXAvcGVybXMKKyAgICAgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGZha2Vyb290ZW52ID0gZ2V0X2JiX3ZhcignRkFLRVJPT1RFTlYnLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgZmFrZXJvb3RjbWQgPSBnZXRfYmJfdmFyKCdGQUtFUk9PVENNRCcsIHRlc3RyZWNpcGUpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJyVzICVzIGZpbmQgLiAtdHlwZSBmIC1leGVjIGxzIC1sIHt9IFw7JyAlIChmYWtlcm9vdGVudiwgZmFrZXJvb3RjbWQpLCBjd2Q9aW5zdGFsbGRpcikKKyAgICAgICAgICAgIGZpbGVsaXN0MSA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgICAgICMgTm93IGxvb2sgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgdGVtcGRpcjIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcjIpCisgICAgICAgICAgICB0bXBmaWxlbGlzdCA9IG9zLnBhdGguam9pbih0ZW1wZGlyMiwgJ2ZpbGVzLnR4dCcpCisgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZWxpc3QsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlbGlzdDE6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNwbGl0bGluZVstMV0gKyAnXG4nKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdjYXQgJXMgfCBzc2ggLXEgJXMgcm9vdEAlcyBcJ3hhcmdzIGxzIC1sXCcnICUgKHRtcGZpbGVsaXN0LCBzc2hhcmdzLCBxZW11LmlwKSkKKyAgICAgICAgICAgIGZpbGVsaXN0MiA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBmaWxlbGlzdDEuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBmaWxlbGlzdDIuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVsaXN0MSwgZmlsZWxpc3QyKQorICAgICAgICAgICAgIyBUZXN0IHVuZGVwbG95LXRhcmdldAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVuZGVwbG95LXRhcmdldCAtYyAlcyByb290QCVzJyAlICh0ZXN0cmVjaXBlLCBxZW11LmlwKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICd1bmRlcGxveS10YXJnZXQgZGlkIG5vdCByZW1vdmUgY29tbWFuZCBhcyBpdCBzaG91bGQgaGF2ZScpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRldnRvb2wgYnVpbGQtaW1hZ2UgcGx1Z2luIiIiCisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIGltYWdlKQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbicgJSBpbWFnZSkKKyAgICAgICAgIyBBZGQgdGFyZ2V0IGFuZCBuYXRpdmUgcmVjaXBlcyB0byB3b3Jrc3BhY2UKKyAgICAgICAgZm9yIHJlY2lwZSBpbiAoJ21kYWRtJywgJ3BhcnRlZC1uYXRpdmUnKToKKyAgICAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgcmVjaXBlKQorICAgICAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAocmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBUcnkgdG8gYnVpbGQgaW1hZ2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkLWltYWdlICVzJyAlIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ2RldnRvb2wgYnVpbGQtaW1hZ2UgZmFpbGVkJykKKyAgICAgICAgIyBDaGVjayBpZiBpbWFnZS5iYmFwcGVuZCBoYXMgcmVxdWlyZWQgY29udGVudAorICAgICAgICBiYmFwcGVuZCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgaW1hZ2UrJy5iYmFwcGVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYmFwcGVuZCksICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIE5PVEU6IG5hdGl2ZSByZWNpcGUgcGFydGVkLW5hdGl2ZSBzaG91bGQgbm90IGJlIGluIElNQUdFX0lOU1RBTExfYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG1kYWRtIlxuJyBpbiBvcGVuKGJiYXBwZW5kKS5yZWFkbGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgbWRhZG0iIG5vdCBmb3VuZCBpbiAlcycgJSBiYmFwcGVuZCkKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2hlY2sgcGFyYW1ldGVycworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAtaCcpCisgICAgICAgIGZvciBwYXJhbSBpbiAncmVjaXBlbmFtZSBzcmN0cmVlIC0tdmVyc2lvbiAtViAtLWJyYW5jaCAtYiAtLWtlZXAtdGVtcCAtLW5vLXBhdGNoJy5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJhbSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBGb3IgdGhlIG1vbWVudCwgd2UgYXJlIHVzaW5nIGEgcmVhbCByZWNpcGUuCisgICAgICAgIHJlY2lwZT0nZGV2dG9vbC11cGdyYWRlJworICAgICAgICB2ZXJzaW9uPScwLjInCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHVwZ3JhZGUuIENvZGUgZG9lcyBub3QgY2hlY2sgaWYgbmV3IFBWIGlzIG9sZGVyIG9yIG5ld2VyIHRoYXQgY3VycmVudCBQViwgc28sIGl0IG1heSBiZSB0aGF0CisgICAgICAgICMgd2UgYXJlIGRvd25ncmFkaW5nIGluc3RlYWQgb2YgdXBncmFkaW5nLgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtViAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgIyBDaGVjayBpZiBzcmN0cmVlIGF0IGxlYXN0IGlzIHBvcHVsYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9zLmxpc3RkaXIodGVtcGRpcikpID4gMCwgJ3NjcnRyZWUgKCVzKSBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbmV3ICglcykgc291cmNlIGNvZGUnICUgKHRlbXBkaXIsIHZlcnNpb24pKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZm9sZGVyIGlzIHByZXNlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsJ3JlY2lwZXMnLHJlY2lwZSkpLCAnUmVjaXBlIGZvbGRlciBzaG91bGQgZXhpc3QnKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZmlsZSBpcyBwcmVzZW50CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCdyZWNpcGVzJyxyZWNpcGUsIiVzXyVzLmJiIiAlIChyZWNpcGUsdmVyc2lvbikpKSwgJ1JlY2lwZSBmb2xkZXIgc2hvdWxkIGV4aXN0JykKKyAgICAgICAgIyBDaGVjayBkZXZ0b29sIHN0YXR1cyBhbmQgbWFrZSBzdXJlIHJlY2lwZSBpcyBwcmVzZW50CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIGRldnRvb2wgcmVzZXQgcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcyAtbicgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ZmYzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5CkBAIC0wLDAgKzEsMTY4IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworY2xhc3MgSW1hZ2VGZWF0dXJlcyhvZVNlbGZUZXN0KToKKworICAgIHRlc3RfdXNlciA9ICd0ZXN0ZXInCisgICAgcm9vdF91c2VyID0gJ3Jvb3QnCisKKyAgICBAdGVzdGNhc2UoMTEwNykKKyAgICBkZWYgdGVzdF9ub25fcm9vdF91c2VyX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGlmIG5vbiByb290IHVzZXIgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCisgICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgMi4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyB0ZXN0ZXIgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gInNzaC1zZXJ2ZXItb3BlbnNzaCBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciAlcyBmYWlsZWQgd2l0aCAlcycgJSAodXNlciwgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxMTE1KQorICAgIGRlZiB0ZXN0X2FsbF91c2Vyc19jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgYWxsIHVzZXJzIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgTk9UIGJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAyLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHRlc3RlciB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAic3NoLXNlcnZlci1vcGVuc3NoIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgaWYgdXNlciA9PSAncm9vdCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgcm9vdCB3YXMgYWxsb3dlZCB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSBiZWVuJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyIHRlc3RlciBmYWlsZWQgd2l0aCAlcycgJSBvdXRwdXQpCisKKworICAgIEB0ZXN0Y2FzZSgxMTE0KQorICAgIGRlZiB0ZXN0X3JwbV92ZXJzaW9uXzRfc3VwcG9ydF9vbl9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gdmVyc2lvbiA0IHN1cHBvcnQgb24gaW1hZ2UKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFJwbSB2ZXJzaW9uIG11c3QgYmUgNC54CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnUFJFRkVSUkVEX1ZFUlNJT05fcnBtID0gIjQuJSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1BSRUZFUlJFRF9WRVJTSU9OX3JwbS1uYXRpdmUgPSAiNC4lIlxuJworICAgICAgICAjIFVzZSBvcGVuc3NoIGluIElNQUdFX0lOU1RBTEwgaW5zdGVhZCBvZiBzc2gtc2VydmVyLW9wZW5zc2ggaW4gRVhUUkFfSU1BR0VfRkVBVFVSRVMgYXMgYSB3b3JrYXJvdW5kIGZvciBidWcgODA0NworICAgICAgICBmZWF0dXJlcyArPSAnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG9wZW5zc2giXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIHBhY2thZ2UtbWFuYWdlbWVudCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1JQTVJPT1RGU0RFUEVORFNfcmVtb3ZlID0gInJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiJworCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHJwbSBpcyBjb3JyZWN0CisgICAgICAgIG5hdGl2ZV9iaW5kaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQob3MucGF0aC5qb2luKG5hdGl2ZV9iaW5kaXIsICdycG0nKSArICcgLS12ZXJzaW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndmVyc2lvbiA0LicsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayBtYW5pZmVzdCBmb3IgdGhlIHJwbSBwYWNrYWdlCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBpbWduYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWduYW1lKSArICcubWFuaWZlc3QnLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdGxpbmUpID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcnBtX3ZlcnNpb24gPSBzcGxpdGxpbmVbMl0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzBdID09ICdycG0nOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJwbV92ZXJzaW9uLnN0YXJ0c3dpdGgoJzQuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdycG0gdmVyc2lvbiAlcyBmb3VuZCBpbiBpbWFnZSwgZXhwZWN0ZWQgNC54JyAlIHJwbV92ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBycG0gcGFja2FnZSBmb3VuZCBpbiBpbWFnZScpCisKKyAgICAgICAgIyBOb3cgZG8gYSBjb3VwbGUgb2YgcnVudGltZSB0ZXN0cworICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICBjb21tYW5kID0gInJwbSAtLXZlcnNpb24iCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuKGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY29tbWFuZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvdW5kX3JwbV92ZXJzaW9uID0gb3V0cHV0LnN0cmlwKCkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJldHJpZXZlZCBycG0gdmVyc2lvbiBpcyB0aGUgZXhwZWN0ZWQgb25lCisgICAgICAgICAgICBpZiBycG1fdmVyc2lvbiBub3QgaW4gZm91bmRfcnBtX3ZlcnNpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSUE0gdmVyc2lvbiBpcyBub3Qge30sIGZvdW5kIGluc3RlYWQge30uJy5mb3JtYXQocnBtX3ZlcnNpb24sIGZvdW5kX3JwbV92ZXJzaW9uKSkKKworICAgICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHJwbSBkYXRhYmFzZSBpcyB0aGVyZSBhbmQgd29ya2luZworICAgICAgICAgICAgY29tbWFuZCA9ICJycG0gLXFhIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bihjb21tYW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNvbW1hbmQsIG91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwYWNrYWdlZ3JvdXAtY29yZS1ib290Jywgb3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYnVzeWJveCcsIG91dHB1dCkKKworCisgICAgQHRlc3RjYXNlKDExMTYpCisgICAgZGVmIHRlc3RfY2x1dHRlcl9pbWFnZV9jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgY2x1dHRlciBpbWFnZSBjYW4gYmUgYnVpbHQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGNvcmUtaW1hZ2UtY2x1dHRlciBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1jbHV0dGVyCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtY2x1dHRlcicpCisKKyAgICBAdGVzdGNhc2UoMTExNykKKyAgICBkZWYgdGVzdF93YXlsYW5kX3N1cHBvcnRfaW5faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgV2F5bGFuZCBzdXBwb3J0IGluIGltYWdlCisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBXYXlsYW5kIGltYWdlIGNhbiBiZSBidWlsZAorICAgICAgICAgICAgICAgICAgICAgMi4gV2F5bGFuZCBmZWF0dXJlIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB3YXlsYW5kIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICJ3YXlsYW5kIHdlc3RvbiInCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS13ZXN0b24KKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS13ZXN0b24nKQorCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODJhNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weQpAQCAtMCwwICsxLDk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMYXllckFwcGVuZFRlc3RzKG9lU2VsZlRlc3QpOgorICAgIGxheWVyY29uZiA9ICIiIgorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFwcGVuZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMqLyouYmIgJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJtZXRhLWxheWVySU5UIgorQkJGSUxFX1BBVFRFUk5fbWV0YS1sYXllcklOVCA6PSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9tZXRhLWxheWVySU5UID0gIjYiCisiIiIKKyAgICByZWNpcGUgPSAiIiIKK0xJQ0VOU0U9IkNMT1NFRCIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK3B5dGhvbiBkb19idWlsZCgpIHsKKyAgICBiYi5wbGFpbignQnVpbGRpbmcgLi4uJykKK30KK2FkZHRhc2sgYnVpbGQKKyIiIgorICAgIGFwcGVuZCA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2FwcGVuZHRlc3QudHh0IgorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9hcHBlbmR0ZXN0LnR4dCAke1NZU1JPT1RfREVTVERJUn0vCit9CisKKyIiIgorCisgICAgYXBwZW5kMiA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovL2FwcGVuZHRlc3QudHh0IgorIiIiCisgICAgbGF5ZXJhcHBlbmQgPSAiQkJMQVlFUlMgKz0gXCJDT1JFQkFTRS9tZXRhLWxheWVydGVzdDAgQ09SRUJBU0UvbWV0YS1sYXllcnRlc3QxIENPUkVCQVNFL21ldGEtbGF5ZXJ0ZXN0MlwiIgorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorCisgICAgQHRlc3RjYXNlKDExOTYpCisgICAgZGVmIHRlc3RfbGF5ZXJfYXBwZW5kcyhzZWxmKToKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCJDT1JFQkFTRSIpCisgICAgICAgIHN0YWdpbmdkaXIgPSBnZXRfYmJfdmFyKCJTVEFHSU5HX0RJUl9UQVJHRVQiKQorICAgICAgICBmb3IgbCBpbiBbIjAiLCAiMSIsICIyIl06CisgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgIm1ldGEtbGF5ZXJ0ZXN0IiArIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGxheWVyKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL2NvbmYiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9jb25mL2xheWVyLmNvbmYiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmxheWVyY29uZi5yZXBsYWNlKCJJTlQiLCBsKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QiKQorICAgICAgICAgICAgaWYgbCA9PSAiMCI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYucmVjaXBlKQorICAgICAgICAgICAgZWxpZiBsID09ICIxIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQpCisgICAgICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QiKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMSB0ZXN0IikKKyAgICAgICAgICAgIGVsaWYgbCA9PSAiMiI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiYXBwZW5kIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXBwZW5kMikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsYXllcikKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisgICAgICAgIG9zLnJlbW92ZShjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDEgdGVzdCIpCisgICAgICAgIHdpdGggb3Blbihjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNiOWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZQorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMaWNlbnNlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICAjIFZlcmlmeSB0aGF0IGNoYW5naW5nIGEgbGljZW5zZSBmaWxlIHRoYXQgaGFzIGFuIGFic29sdXRlIHBhdGggY2F1c2VzCisgICAgIyB0aGUgbGljZW5zZSBxYSB0byBmYWlsIGR1ZSB0byBhIG1pc21hdGNoZWQgbWQ1c3VtLgorICAgIEB0ZXN0Y2FzZSgxMTk3KQorICAgIGRlZiB0ZXN0X25vbm1hdGNoaW5nX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBiaXRiYWtlX2NtZCA9ICctYyBjb25maWd1cmUgZW1wdHl0ZXN0JworICAgICAgICBlcnJvcl9tc2cgPSAnRVJST1I6IGVtcHR5dGVzdDogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgOGQ3NzdmMzg1ZDNkZmVjODgxNWQyMGY3NDk2MDI2ZGMnCisKKyAgICAgICAgbGljX2ZpbGUsIGxpY19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9zLmNsb3NlKGxpY19maWxlKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGxpY19wYXRoKQorCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAnSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9yZWNpcGVpbmMoJ2VtcHR5dGVzdCcsICdMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8lczttZDU9ZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiJyAlIGxpY19wYXRoKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKGJpdGJha2VfY21kKQorCisgICAgICAgIHdpdGggb3BlbihsaWNfcGF0aCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCisKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBpZiBlcnJvcl9tc2cgbm90IGluIHJlc3VsdC5vdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihyZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lc2NyaXB0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNkNTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IENvbW1hbmQsIHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBUZXN0U2NyaXB0cyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgzMDApCisgICAgZGVmIHRlc3RfY2xlYW51cF93b3JrZGlyKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorICAgICAgICBvbGRfdmVyc2lvbl9yZWNpcGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiJykKKyAgICAgICAgb2xkX3ZlcnNpb24gPSAnMS4zLjEyJworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIGd6aXAiKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIC1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnZXRfYmJfdmFyKCdXT1JLRElSJywgJ2d6aXAnKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgaW5pdGlhbF9jb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluaXRpYWxfY29udGVudHMgPSBbXQorCisgICAgICAgIGJpdGJha2UoJ2d6aXAnKQorICAgICAgICBpbnRlcm1lZGlhcnlfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGJpdGJha2UoIi1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgcnVuQ21kKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICByZW1haW5pbmdfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisKKyAgICAgICAgZXhwZWN0ZWRfY29udGVudHMgPSBbeCBmb3IgeCBpbiBpbnRlcm1lZGlhcnlfY29udGVudHMgaWYgeCBub3QgaW4gaW5pdGlhbF9jb250ZW50c10KKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFt4IGZvciB4IGluIHJlbWFpbmluZ19jb250ZW50cyBpZiB4IG5vdCBpbiBleHBlY3RlZF9jb250ZW50c10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfbm90X2V4cGVjdGVkLCBtc2c9Ik5vdCBhbGwgbmVjZXNzYXJ5IGNvbnRlbnQgaGFzIGJlZW4gZGVsZXRlZCBmcm9tICVzOiAlcyIgJSAocGF0aCwgJywgJy5qb2luKG1hcChzdHIsIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQpKSkpCisgICAgICAgIGV4cGVjdGVkX25vdF9yZW1haW5pbmcgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9jb250ZW50cyBpZiB4IG5vdCBpbiByZW1haW5pbmdfY29udGVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X3JlbWFpbmluZywgbXNnPSJUaGUgc2NyaXB0IHJlbW92ZWQgZXh0cmEgY29udGVudHMgZnJvbSAlczogJXMiICUgKHBhdGgsICcsICcuam9pbihtYXAoc3RyLCBleHBlY3RlZF9ub3RfcmVtYWluaW5nKSkpKQorCitjbGFzcyBCdWlsZGhpc3RvcnlEaWZmVGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6CisKKyAgICBAdGVzdGNhc2UoMjk1KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9kaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMVwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPVRydWUpCisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjBcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPVRydWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiYnVpbGRoaXN0b3J5LWRpZmYgLXAgJXMiICUgZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKQorICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAnUFIgY2hhbmdlZCBmcm9tICJyMSIgdG8gInIwIicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX291dHB1dCBpbiByZXN1bHQub3V0cHV0LCBtc2c9IkRpZCBub3QgZmluZCBleHBlY3RlZCBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4YjAzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpAQCAtMCwwICsxLDIyNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBmbm1hdGNoCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIE9lUGtnZGF0YVV0aWxUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCdnbGliYyBidXN5Ym94IHpsaWIgYmFzaCcpCisKKyAgICBAdGVzdGNhc2UoMTIwMykKKyAgICBkZWYgdGVzdF9sb29rdXBfcGtnKHNlbGYpOgorICAgICAgICAjIEZvcndhcmQgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAiZ2xpYmMgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNlxuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgemxpYi1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJ6LWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorICAgICAgICAjIFJldmVyc2UgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAtciAibGliYzYgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliY1xuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbGliei1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliLWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorCisgICAgQHRlc3RjYXNlKDEyMDUpCisgICAgZGVmIHRlc3RfcmVhZF92YWx1ZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQTiBsaWJ6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCByZWFkLXZhbHVlIFBLR1NJWkUgYmFzaCcpCisgICAgICAgIHBrZ3NpemUgPSBpbnQocmVzdWx0Lm91dHB1dC5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGtnc2l6ZSwgMSwgIlNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTgpCisgICAgZGVmIHRlc3RfZmluZF9wYXRoKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2xpYi9saWJjLnNvLjYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliYzogL2xpYi9saWJjLnNvLjYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnYmFzaDogL2Jpbi9iYXNoJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9ub3QvZXhpc3QnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAvbm90L2V4aXN0JykKKworICAgIEB0ZXN0Y2FzZSgxMjA0KQorICAgIGRlZiB0ZXN0X2xvb2t1cF9yZWNpcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgImxpYmM2LXN0YXRpY2RldiBidXN5Ym94IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2dsaWJjXG5idXN5Ym94JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSBsaWJ6LWRiZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKworICAgIEB0ZXN0Y2FzZSgxMjAyKQorICAgIGRlZiB0ZXN0X2xpc3RfcGtncyhzZWxmKToKKyAgICAgICAgIyBObyBhcmd1bWVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzJykKKyAgICAgICAgcGtnbGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnbGliYy11dGlscycsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBObyBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcicpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliYzYtdXRpbHMnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBrZ2xpc3QucmVtb3ZlKCd6bGliLXB0ZXN0JykgIyBpbiBjYXNlIHB0ZXN0IGlzIGRpc2FibGVkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYicsICd6bGliLWRiZycsICd6bGliLWRldicsICd6bGliLWRvYycsICd6bGliLXN0YXRpY2RldiddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnbGlzdC5yZW1vdmUoJ2xpYnotcHRlc3QnKSAjIGluIGNhc2UgcHRlc3QgaXMgZGlzYWJsZWQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYycsICdsaWJ6LXN0YXRpY2RldicsICdsaWJ6MSddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXUnKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1sb2NhbGUnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgdW5wYWNrYWdlZCwgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtdSAtcicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCBwa2dzcGVjCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliICIqLWQqIicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYi1kYmcnLCAnemxpYi1kZXYnLCAnemxpYi1kb2MnXSwgIlBhY2thZ2VzIGxpc3RlZDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHBrZ3NwZWMsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXIgIiotZCoiJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYyddLCAiUGFja2FnZXMgbGlzdGVkOiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEyMDEpCisgICAgZGVmIHRlc3RfbGlzdF9wa2dfZmlsZXMoc2VsZik6CisgICAgICAgIGRlZiBzcGxpdG91dHB1dChvdXRwdXQpOgorICAgICAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICAgICAgY3VycGtnID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1x0Jyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJwa2csICdVbmV4cGVjdGVkIG5vbi1wYWNrYWdlIGxpbmU6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUucnN0cmlwKCkuZW5kc3dpdGgoJzonKSwgJ0ludmFsaWQgcGFja2FnZSBsaW5lIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGN1cnBrZyA9IGxpbmUuc3BsaXQoJzonKVswXQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddID0gW10KKyAgICAgICAgICAgIHJldHVybiBmaWxlcworICAgICAgICBiYXNlX2xpYmRpciA9IGdldF9iYl92YXIoJ2Jhc2VfbGliZGlyJykKKyAgICAgICAgbGliZGlyID0gZ2V0X2JiX3ZhcignbGliZGlyJykKKyAgICAgICAgaW5jbHVkZWRpciA9IGdldF9iYl92YXIoJ2luY2x1ZGVkaXInKQorICAgICAgICBtYW5kaXIgPSBnZXRfYmJfdmFyKCdtYW5kaXInKQorICAgICAgICAjIFRlc3QgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyB6bGliLWRldiB6bGliLWRvYycpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgICMgVGVzdCBydW50aW1lIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtciBsaWJ6MSBsaWJ6LWRldicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlc1snbGliejEnXSksIDEpCisgICAgICAgIGxpYnNwZWMgPSBvcy5wYXRoLmpvaW4oYmFzZV9saWJkaXIsICdsaWJ6LnNvLjEuKicpCisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVzWydsaWJ6MSddOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmaWxlaXRlbSwgbGlic3BlYyk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnQ291bGQgbm90IGZpbmQgemxpYiBsaWJyYXJ5IGZpbGUgJXMgaW4gbGliejEgcGFja2FnZSBmaWxlIGxpc3Q6ICVzJyAlIChsaWJzcGVjLCBmaWxlc1snbGliejEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICAjIChpZ25vcmUgcHRlc3QsIG1pZ2h0IG5vdCBiZSB0aGVyZSBkZXBlbmRpbmcgb24gY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXInKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtdScpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZSwgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yIC11JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKKworICAgIEB0ZXN0Y2FzZSgxMjAwKQorICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncGtnZGF0YXFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBwa2dsaXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncGtnbGlzdCcpCisgICAgICAgIHdpdGggb3Blbihwa2dsaXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnbGliYzZcbicpCisgICAgICAgICAgICBmLndyaXRlKCdsaWJ6MVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2J1c3lib3hcbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgZGVzaXJlZHJlc3VsdCA9IFsnbGliYzYtZGV2JywgJ2xpYnotZGV2JywgJ2J1c3lib3gtZGV2J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKSwgc29ydGVkKGRlc2lyZWRyZXN1bHQpKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIG5vdCBlcnJvciAoYmVjYXVzZSB3aGVuIHdlIHVzZSB0aGlzIGR1cmluZyByb290ZnMgY29uc3RydWN0aW9uLCBzb21ldGltZXMgdGhlIGNvbXBsZW1lbnRhcnkgcGFja2FnZSB3b24ndCBleGlzdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1ub25leGlzdGVudCInICUgcGtnbGlzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJycpCisgICAgICAgICMgVGVzdCBleGNsdWRlIG9wdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiAqLWRiZyIgLXggIl5saWJ6IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgcmVzdWx0bGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWRldicsIHJlc3VsdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGJnJywgcmVzdWx0bGlzdCkKKworICAgIEB0ZXN0Y2FzZSgxMjA2KQorICAgIGRlZiB0ZXN0X3NwZWNpZnlfcGtnZGF0YWRpcihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgLXAgJXMgbG9va3VwLXBrZyBnbGliYycgJSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNicpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcHJzZXJ2aWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODdmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyMSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBkYXRldGltZQorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlUHJUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIGRlZiBnZXRfcHJfdmVyc2lvbihzZWxmLCBwYWNrYWdlX25hbWUpOgorICAgICAgICBwa2dkYXRhX2RpciA9IGdldF9iYl92YXIoJ1BLR0RBVEFfRElSJykKKyAgICAgICAgcGFja2FnZV9kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGFja2FnZV9uYW1lKQorICAgICAgICBwYWNrYWdlX2RhdGEgPSBmdG9vbHMucmVhZF9maWxlKHBhY2thZ2VfZGF0YV9maWxlKQorICAgICAgICBmaW5kX3ByID0gcmUuc2VhcmNoKCJQS0dSOiByWzAtOV0rXC4oWzAtOV0rKSIsIHBhY2thZ2VfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfcHIsICJObyBQS0cgcmV2aXNpb24gZm91bmQgaW4gJXMiICUgcGFja2FnZV9kYXRhX2ZpbGUpCisgICAgICAgIHJldHVybiBpbnQoZmluZF9wci5ncm91cCgxKSkKKworICAgIGRlZiBnZXRfdGFza19zdGFtcChzZWxmLCBwYWNrYWdlX25hbWUsIHJlY2lwZV90YXNrKToKKyAgICAgICAgc3RhbXBkYXRhID0gZ2V0X2JiX3ZhcignU1RBTVAnLCB0YXJnZXQ9cGFja2FnZV9uYW1lKS5zcGxpdCgnLycpCisgICAgICAgIHByZWZpeCA9IHN0YW1wZGF0YVstMV0KKyAgICAgICAgcGFja2FnZV9zdGFtcHNfcGF0aCA9ICIvIi5qb2luKHN0YW1wZGF0YVs6LTFdKQorICAgICAgICBzdGFtcHMgPSBbXQorICAgICAgICBmb3Igc3RhbXAgaW4gb3MubGlzdGRpcihwYWNrYWdlX3N0YW1wc19wYXRoKToKKyAgICAgICAgICAgIGZpbmRfc3RhbXAgPSByZS5tYXRjaCgiJXNcLiVzXC4oW2EtejAtOV17MzJ9KSIgJSAocHJlZml4LCByZWNpcGVfdGFzayksIHN0YW1wKQorICAgICAgICAgICAgaWYgZmluZF9zdGFtcDoKKyAgICAgICAgICAgICAgICBzdGFtcHMuYXBwZW5kKGZpbmRfc3RhbXAuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPT0gMCwgbXNnPSJDb3VuZCBub3QgZmluZCBzdGFtcCBmb3IgdGFzayAlcyBmb3IgcmVjaXBlICVzIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3RhbXBzKSA+IDEsIG1zZz0iRm91bmQgbXVsdGlwbGUgJXMgc3RhbXBzIGZvciB0aGUgJXMgcmVjaXBlIGluIHRoZSAlcyBkaXJlY3RvcnkuIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3N0YW1wc19wYXRoKSkKKyAgICAgICAgcmV0dXJuIHN0cihzdGFtcHNbMF0pCisKKyAgICBkZWYgaW5jcmVtZW50X3BhY2thZ2VfcHIoc2VsZiwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgaW5jX2RhdGEgPSAiZG9fcGFja2FnZV9hcHBlbmQoKSB7XG5iYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3Rlc3RfcHJzZXJ2JywgZClcbn1cbmRvX3Rlc3RfcHJzZXJ2KCkge1xuZWNobyBcIlRoZSBjdXJyZW50IGRhdGUgaXM6ICVzXCJcbn0iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lLCBpbmNfZGF0YSkKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAlcyIgJSBwYWNrYWdlX25hbWUpCisgICAgICAgIHJlcyA9IGJpdGJha2UocGFja2FnZV9uYW1lLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTk9URTogU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZSIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisKKyAgICBkZWYgY29uZmlnX3ByX3Rlc3RzKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIGNvbmZpZ19wYWNrYWdlX2RhdGEgPSAnUEFDS0FHRV9DTEFTU0VTID0gInBhY2thZ2VfJXMiJyAlIHBhY2thZ2VfdHlwZQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdfcGFja2FnZV9kYXRhKQorICAgICAgICBjb25maWdfc2VydmVyX2RhdGEgPSAnUFJTRVJWX0hPU1QgPSAiJXMiJyAlIHByX3NvY2tldAorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NlcnZlcl9kYXRhKQorCisgICAgZGVmIHJ1bl90ZXN0X3ByX3NlcnZpY2Uoc2VsZiwgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3R5cGU9J3JwbScsIHRyYWNrX3Rhc2s9J2RvX3BhY2thZ2UnLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIHNlbGYuY29uZmlnX3ByX3Rlc3RzKHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlLCBwcl9zb2NrZXQpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc3RhbXBfMSA9IHNlbGYuZ2V0X3Rhc2tfc3RhbXAocGFja2FnZV9uYW1lLCB0cmFja190YXNrKQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8yID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisgICAgICAgIHN0YW1wXzIgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKKworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlICVzIiAlIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wXzEgIT0gc3RhbXBfMiwgIkRpZmZlcmVudCBwa2cgcmV2LiBidXQgc2FtZSBzdGFtcDogJXMiICUgc3RhbXBfMSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVwbGFjZV9jdXJyZW50X2RiPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBleHBvcnRlZF9kYl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdleHBvcnQuaW5jJykKKyAgICAgICAgZXhwb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgZXhwb3J0IGZhaWxlZDogJXMiICUgZXhwb3J0X3Jlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgaWYgcmVwbGFjZV9jdXJyZW50X2RiOgorICAgICAgICAgICAgY3VycmVudF9kYl9wYXRoID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ1BFUlNJU1RFTlRfRElSJyksICdwcnNlcnYuc3FsaXRlMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY3VycmVudF9kYl9wYXRoKSwgbXNnPSJQYXRoIHRvIGN1cnJlbnQgUFIgU2VydmljZSBkYXRhYmFzZSBpcyBpbnZhbGlkOiAlcyIgJSBjdXJyZW50X2RiX3BhdGgpCisgICAgICAgICAgICBvcy5yZW1vdmUoY3VycmVudF9kYl9wYXRoKQorCisgICAgICAgIGltcG9ydF9yZXN1bHQgPSBydW5DbWQoImJpdGJha2UtcHJzZXJ2LXRvb2wgaW1wb3J0ICVzIiAlIGV4cG9ydGVkX2RiX3BhdGgsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgb3MucmVtb3ZlKGV4cG9ydGVkX2RiX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3Jlc3VsdC5zdGF0dXMsIDAsIG1zZz0iUFIgU2VydmljZSBkYXRhYmFzZSBpbXBvcnQgZmFpbGVkOiAlcyIgJSBpbXBvcnRfcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgJXMiICUgcGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJfMiAtIHByXzEgPT0gMSwgIlN0ZXAgYmV0d2VlbiBzYW1lIHBrZy4gcmV2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDEiKQorCisgICAgQHRlc3RjYXNlKDkzMCkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X3JlcGxhY2VfZGIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydCgnbTQnKQorCisgICAgQHRlc3RjYXNlKDkzMSkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X292ZXJyaWRlX2RiKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoJ200JywgcmVwbGFjZV9jdXJyZW50X2RiPUZhbHNlKQorCisgICAgQHRlc3RjYXNlKDkzMikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdycG0nLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM0KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfZGViX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ2RlYicsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzMpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9pcGtfYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNSkKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAncnBtJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNykKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2RlYl9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnZGViJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2lwa19hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNGFkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKQEAgLTAsMCArMSw1NTQgQEAKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybHBhcnNlCisKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitmcm9tIG9lcWEuc2VsZnRlc3QgaW1wb3J0IGRldnRvb2wKKworCit0ZW1wbGF5ZXJkaXIgPSBOb25lCisKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgZ2xvYmFsIHRlbXBsYXllcmRpcgorICAgIHRlbXBsYXllcmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29scWEnKQorICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgJ3NlbGZ0ZXN0cmVjaXBldG9vbCcpCisgICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyKQorCisKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgIHJ1bkNtZCgncm0gLXJmICVzJyAlIHRlbXBsYXllcmRpcikKKworCitjbGFzcyBSZWNpcGV0b29sQmFzZShkZXZ0b29sLkRldnRvb2xCYXNlKToKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wbGF5ZXJkaXIgPSB0ZW1wbGF5ZXJkaXIKKyAgICAgICAgc2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50ZW1wZGlyKQorICAgICAgICBzZWxmLnRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZVxuJykKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBydW5DbWQoJ3JtIC1yZiAlcy9yZWNpcGVzLSonICUgc2VsZi50ZW1wbGF5ZXJkaXIpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChzZWxmLCBjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXM9Tm9uZSk6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayB0aGUgYmJhcHBlbmQgd2FzIGNyZWF0ZWQgYW5kIGFwcGxpZXMgcHJvcGVybHkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBzZWxmLnRlbXBsYXllcmRpcikKKworICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCBjb250ZW50cworICAgICAgICBpZiBleHBlY3RlZGxpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSwgIkV4cGVjdGVkIGxpbmVzIGFyZSBub3QgcHJlc2VudCBpbiAlcyIgJSBiYmFwcGVuZGZpbGUpCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHdhcyBjb3BpZWQKKyAgICAgICAgZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJiYXBwZW5kZmlsZSksIHRlc3RyZWNpcGUpCisgICAgICAgIGZvciBleHBlY3RlZGZpbGUgaW4gZXhwZWN0ZWRmaWxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGV4cGVjdGVkZmlsZSkpLCAnRXhwZWN0ZWQgZmlsZSAlcyB0byBiZSBjb3BpZWQgbmV4dCB0byBiYmFwcGVuZCwgYnV0IGl0IHdhc25cJ3QnICUgZXhwZWN0ZWRmaWxlKQorCisgICAgICAgICMgQ2hlY2sgbm8gb3RoZXIgZmlsZXMgY3JlYXRlZAorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhmaWxlc2Rpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBjcmVhdGVkZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIGZpbGVzZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCisKKyAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZSwgcmVzdWx0Lm91dHB1dAorCisKK2NsYXNzIFJlY2lwZXRvb2xUZXN0cyhSZWNpcGV0b29sQmFzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCctYyBwYWNrYWdlZGF0YSBiYXNlLWZpbGVzIGNvcmV1dGlscyBidXN5Ym94IHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAjIFNob3VsZG4ndCBsZWF2ZSBhbnkgdHJhY2VzIG9mIHRoaXMgYXJ0aWZpY2lhbCByZWNpcGUgYmVoaW5kCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuc3N0YXRlIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoc2VsZiwgZGVzdGZpbGUsIG5ld2ZpbGUsIGNoZWNrZXJyb3IpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnQ29tbWFuZCAiJXMiIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkblwndCcgJSBjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBlcnJvcnN0ciBpbiBjaGVja2Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlcnJvcnN0ciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTc3KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdiYXNlLWZpbGVzJywgJy9ldGMvbW90ZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ21vdGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ludmFsaWQoc2VsZik6CisgICAgICAgICMgVGVzdCBzb21lIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGVycm9yCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy9wYXNzd2QnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3Bhc3N3ZCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnLCAndXNlcmFkZCcsICdleHRyYXVzZXJzJ10pCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy90aW1lc3RhbXAnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3RpbWVzdGFtcCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZGV2L2NvbnNvbGUnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZGV2L2NvbnNvbGUgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sJ10pCisKKyAgICBAdGVzdGNhc2UoMTE3NikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWx0ZXJuYXRpdmVzKHNlbGYpOgorICAgICAgICAjIE5vdyB0cnkgd2l0aCBhIGZpbGUgd2Uga25vdyBzaG91bGQgYmUgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgIyAodGhpcyBpcyB2ZXJ5IG11Y2ggYSBmYWtlIGV4YW1wbGUsIGJ1dCBvbmUgd2Uga25vdyBpcyByZWxpYWJseSBhbiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvYmluL2xzJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogRmlsZSAvYmluL2xzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVjaXBlczonLCAnY29yZXV0aWxzJywgJ2J1c3lib3gnXSkKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCdDT1JFQkFTRScpCisgICAgICAgICMgTmVlZCBhIHRlc3QgZmlsZSAtIHNob3VsZCBiZSBleGVjdXRhYmxlCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8lcyJcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCB0ZXN0ZmlsZTIsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgTm93IHRyeSBiYmFwcGVuZGluZyB0aGUgc2FtZSBmaWxlIGFnYWluLCBjb250ZW50cyBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBiYmFwcGVuZGZpbGUsIF8gPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgQnV0IGZpbGUgc2hvdWxkIGhhdmUKKyAgICAgICAgY29waWVkZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgJ2NvcmV1dGlscycsIHRlc3RmaWxlMm5hbWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGlmZiAtcSAlcyAlcycgJSAodGVzdGZpbGUyLCBjb3BpZWRmaWxlKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdOZXcgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBidXQgd2FzIG5vdCAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2JpbmFyeShzZWxmKToKKyAgICAgICAgIyBUcnkgYXBwZW5kaW5nIGEgYmluYXJ5IGZpbGUKKyAgICAgICAgIyAvYmluL2xzIGNhbiBiZSBhIHN5bWxpbmsgdG8gL3Vzci9iaW4vbHMKKyAgICAgICAgbHMgPSBvcy5wYXRoLnJlYWxwYXRoKCIvYmluL2xzIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2Jpbi9scyAlcyAtciBjb3JldXRpbHMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBscykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6ICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGEgYmluYXJ5JywgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTczKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGQoc2VsZik6CisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcignQ09SRUJBU0UnKQorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgIyBUcnkgYWRkaW5nIGFub3RoZXIgZmlsZSwgdGhpcyB0aW1lIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBpcyBleGVjdXRhYmxlCisgICAgICAgICMgKHNvIHdlJ3JlIHRlc3RpbmcgdGhhdCwgcGx1cyBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgYmJhcHBlbmQpCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSBcXFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZmlsZTovLyVzIFxcXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc29tZXRoaW5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7ZGF0YWRpcn0vc2NyaXB0bmFtZVxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zY3JpcHRuYW1lJywgdGVzdGZpbGUyLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnLCB0ZXN0ZmlsZTJuYW1lXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGRfYmluZGlyKHNlbGYpOgorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2JpbmRpcn0vc2VsZnRlc3QtcmVjaXBldG9vbC10ZXN0YmluXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3IvYmluL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpbicsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX21hY2hpbmUoc2VsZik6CisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZSwgdGhpcyB0aW1lIHRvIGEgbG9jYXRpb24gc3VjaCB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgZXhlY3V0YWJsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklfYXBwZW5kX215bWFjaGluZSA9ICIgZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZF9teW1hY2hpbmUoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlIC1tIG15bWFjaGluZScsIGV4cGVjdGVkbGluZXMsIFsnbXltYWNoaW5lL3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9vcmlnKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhbmQgaW4gZG9faW5zdGFsbCB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTkxKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV90b2RpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gZmlsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcicsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcmVuYW1lZChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXJlbmFtZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydmaWxlMSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3ViZGlyKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBpbiBhIHN1YmRpcgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3JjX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFzIGEgZ2xvYgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGVcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2IKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZScsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X3RvZGlyX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBkb19pbnN0YWxsIGFzIGEgZ2xvYiB3aXRoIGRlc3RpbmF0aW9uIGFzIGEgZGlyZWN0b3J5CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcGF0Y2goc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBhZGRlZCBieSBhIHBhdGNoIGluIFNSQ19VUkkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtzeXNjb25mZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcGF0Y2hlZFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy9ldGMvc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdXQVJOSU5HOiAnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGQtZmlsZS5wYXRjaCcsIGxpbmUsICdVbmV4cGVjdGVkIHdhcm5pbmcgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdQYXRjaCB3YXJuaW5nIG5vdCBmb3VuZCBpbiBvdXRwdXQ6XG4lcycgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc2NyaXB0KHNlbGYpOgorICAgICAgICAjIE5vdywgYSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGJ1dCBpbnN0YWxsZWQgYnkgYSBzY3JpcHQgKHNvIG5vIG1lbnRpb24gaW4gZG9faW5zdGFsbCkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWRcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgwKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X2Z1bmMoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbnN0YWxsZWQgZnJvbSBhIGZ1bmN0aW9uIGNhbGxlZCBieSBkb19pbnN0YWxsCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODYpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3Bvc3RpbnN0YWxsKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgY3JlYXRlZCBieSBhIHBvc3RpbnN0YWxsIHNjcmlwdCAoYW5kIGV4cGxpY2l0bHkgbWVudGlvbmVkIGluIGl0KQorICAgICAgICAjIEZpcnN0IHRyeSB3aXRob3V0IHNwZWNpZnlpbmcgcmVjaXBlCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QnLCBzZWxmLnRlc3RmaWxlLCBbJ0ZpbGUgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QgbWF5IGJlIHdyaXR0ZW4gb3V0IGluIGEgcHJlL3Bvc3RpbnN0YWxsIHNjcmlwdCBvZiB0aGUgZm9sbG93aW5nIHJlY2lwZXM6JywgJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZSddKQorICAgICAgICAjIE5vdyBzcGVjaWZ5IHJlY2lwZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgJy1yIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc5KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9leHRsYXllcihzZWxmKToKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSBiYmFwcGVuZCBpbiBhIGxheWVyIHRoYXQncyBub3QgaW4gYmJsYXllcnMuY29uZiBhbmQgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICAgICAgICBleHR0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnZXh0bGF5ZXInKQorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcihleHR0ZW1wbGF5ZXJkaXIsIEZhbHNlLCAnb2VzZWxmdGVzdGV4dGxheWVyJywgcmVjaXBlcGF0aHNwZWM9J21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy0qLyonKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnICVzJyAlIChleHR0ZW1wbGF5ZXJkaXIsIHNlbGYudGVzdGZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhleHR0ZW1wbGF5ZXJkaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgY3JlYXRlZGZpbGVzLmFwcGVuZChvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGYpLCBleHR0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBjcmVhdGVkZmlsZXMucmVtb3ZlKCdjb25mL2xheWVyLmNvbmYnKQorICAgICAgICBleHBlY3RlZGZpbGVzID0gWydtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtdGVzdC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKKworICAgIEB0ZXN0Y2FzZSgxMTkyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV93aWxkY2FyZChzZWxmKToKKworICAgICAgICBkZWYgdHJ5X2FwcGVuZGZpbGVfd2Mob3B0aW9ucyk6CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvZXRjL3Byb2ZpbGUgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlLCBvcHRpb25zKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBOb25lCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlbXBsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBiYmFwcGVuZGZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQnKQorICAgICAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMvcmVjaXBlcy0qJyAlIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZQorCisgICAgICAgICMgQ2hlY2sgd2l0aG91dCB3aWxkY2FyZCBvcHRpb24KKyAgICAgICAgcmVjaXBlZm4gPSBvcy5wYXRoLmJhc2VuYW1lKGdldF9iYl92YXIoJ0ZJTEUnLCAnYmFzZS1maWxlcycpKQorICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCByZWNpcGVmbi5yZXBsYWNlKCcuYmInLCAnLmJiYXBwZW5kJykpCisgICAgICAgICMgTm93IGNoZWNrIHdpdGggd2lsZGNhcmQgb3B0aW9uCisgICAgICAgIGZpbGVuYW1lID0gdHJ5X2FwcGVuZGZpbGVfd2MoJy13JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4uc3BsaXQoJ18nKVswXSArICdfJS5iYmFwcGVuZCcpCisKKyAgICBAdGVzdGNhc2UoMTE5MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbG9ncm90YXRlXzMuOC43LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0zLjguNy50YXIuZ3onCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSAnR1BMdjInCisgICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gJ2ZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCcKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvby9sb2dyb3RhdGUvbG9ncm90YXRlLSR7UFZ9LnRhci5neicKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW21kNXN1bV0nXSA9ICc5OWUwODUwM2VmMjRjM2UyZTNmZjc0Y2M1ZjNiZTIxMycKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW3NoYTI1NnN1bV0nXSA9ICdmNmJhNjkxZjQwZTMwZTY0MGVmYTI3NTJjMWY5NDk5YTNmOTczODI1NzY2MDk5NGRlNzBhNDVmZTAwZDEyYjY0JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQHRlc3RjYXNlKDExOTQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGVfZ2l0KHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCisgICAgICAgIGJpdGJha2UoJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnJykKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbGlibWF0Y2hib3guYmInKQorICAgICAgICBzcmN1cmkgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSwgJ3JlY2lwZXRvb2wgZGlkIG5vdCBjcmVhdGUgcmVjaXBlIGZpbGU7IG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0xHUEx2Mi4xJworICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQnCisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JworICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS4wK2dpdCR7U1JDUFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHNyY3VyaQorICAgICAgICBjaGVja3ZhcnNbJ0RFUEVORFMnXSA9ICdsaWJwbmcgcGFuZ28gbGlieDExIGxpYnhleHQganBlZycKKyAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQorCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKFJlY2lwZXRvb2xCYXNlKToKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6CisKKyAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gJyAtRCAlcycgJSBkZXN0ZGlyCisKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIG5ld2ZpbGVzXQorCisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgJyAnLmpvaW4obmV3ZmlsZXMpKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9mYWlsKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBjaGVja2Vycm9yKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlIG9yICcnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZmlyc3RfZmlsZV91cmkocmVjaXBlKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmaXJzdCBmaWxlOi8vIGluIFNSQ19VUkkgZm9yIHRoZSBzcGVjaWZpZWQgcmVjaXBlLicnJworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHJlY2lwZSkuc3BsaXQoKQorICAgICAgICBmb3IgdXJpIGluIHNyY191cmk6CisgICAgICAgICAgICBwID0gdXJscGFyc2UudXJscGFyc2UodXJpKQorICAgICAgICAgICAgaWYgcC5zY2hlbWUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBwLm5ldGxvYyArIHAucGF0aAorCisgICAgZGVmIF90ZXN0X2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZmlsZW5hbWU9Tm9uZSwgZGVzdGRpcj1Ob25lLCBoYXNfc3JjX3VyaT1UcnVlLCBzcmNkaXI9Tm9uZSwgbmV3ZmlsZT1Ob25lLCBvcHRpb25zPScnKToKKyAgICAgICAgaWYgbmV3ZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgbmV3ZmlsZSA9IHNlbGYudGVzdGZpbGUKKworICAgICAgICBpZiBzcmNkaXI6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IG9zLnBhdGguam9pbihzcmNkaXIsIGRlc3RkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IHNyY2RpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucyArPSAiIC1XIgorICAgICAgICAgICAgZXhwZWN0ZWRfc3ViZGlyID0gZGVzdGRpcgorCisgICAgICAgIGlmIGZpbGVuYW1lOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBmaWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZGVzdGRpciArIG9zLnNlcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9ICcuJyArIG9zLnNlcAorCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgaWYgaGFzX3NyY191cmk6CisgICAgICAgICAgICB1cmkgPSAnZmlsZTovLyVzJyAlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiBleHBlY3RlZF9zdWJkaXI6CisgICAgICAgICAgICAgICAgdXJpICs9ICc7c3ViZGlyPSVzJyAlIGV4cGVjdGVkX3N1YmRpcgorICAgICAgICAgICAgZXhwZWN0ZWRsaW5lc1swOjBdID0gWydTUkNfVVJJICs9ICIlcyJcbicgJSB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKworICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0cGF0aCwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgW2ZpbGVuYW1lXSkKKworICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRmaWxlcz1Ob25lLCBkZXN0ZGlyPU5vbmUsIG9wdGlvbnM9JycpOgorICAgICAgICBpZiBleHBlY3RlZGZpbGVzIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZGZpbGVzID0gW29zLnBhdGguYmFzZW5hbWUobikgZm9yIG4gaW4gbmV3ZmlsZXNdCisKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXModGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9ZXhwZWN0ZWRmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKS5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGV4cGVjdGVkZmlsZXM6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcztzdWJkaXI9JXMnICUgKGYsIGRlc3RkaXIpLCBzcmNfdXJpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXMnICUgZiwgc3JjX3VyaSkKKworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZmlsZXNleHRyYXBhdGhzID0gZ2V0X2JiX3ZhcignRklMRVNFWFRSQVBBVEhTJywgdGVzdHJlY2lwZSkuc3BsaXQoJzonKQorICAgICAgICBzZWxmLmFzc2VydEluKGZpbGVzZGlyLCBmaWxlc2V4dHJhcGF0aHMpCisKKworY2xhc3MgUmVjaXBldG9vbEFwcGVuZHNyY1Rlc3RzKFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKToKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgb3B0aW9ucz0nLXcnKQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoYmJhcHBlbmRmaWxlKSwgJyVzXyUlLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJywgJ3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljX2RpcmRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsIGRlc3RkaXI9J3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3JjZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCisgICAgICAgIHNyY2RpciA9IGdldF9iYl92YXIoJ1MnLCB0ZXN0cmVjaXBlKQorICAgICAgICB3b3JrZGlyID0gZ2V0X2JiX3ZhcignV09SS0RJUicsIHRlc3RyZWNpcGUpCisgICAgICAgIHN1YmRpciA9IG9zLnBhdGgucmVscGF0aChzcmNkaXIsIHdvcmtkaXIpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgc3JjZGlyPXN1YmRpcikKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIGhhc19zcmNfdXJpPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2V4aXN0aW5nX2luX3NyY191cmlfZGlmZl9wYXJhbXMoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzZS1maWxlcycKKyAgICAgICAgc3ViZGlyID0gJ3RtcCcKKyAgICAgICAgZmlsZXBhdGggPSBzZWxmLl9nZXRfZmlyc3RfZmlsZV91cmkodGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVwYXRoLCAnVW5hYmxlIHRvIHRlc3QsIG5vIGZpbGU6Ly8gdXJpIGZvdW5kIGluIFNSQ19VUkkgZm9yICVzJyAlIHRlc3RyZWNpcGUpCisKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBzdWJkaXIsIGhhc19zcmNfdXJpPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCd3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzJyBpbiBsIGZvciBsIGluIG91dHB1dCkpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfcmVwbGFjZV9maWxlX3NyY2RpcihzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNoJworICAgICAgICBmaWxlcGF0aCA9ICdNYWtlZmlsZS5pbicKKyAgICAgICAgc3JjZGlyID0gZ2V0X2JiX3ZhcignUycsIHRlc3RyZWNpcGUpCisgICAgICAgIHdvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpcikKKworICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIHNyY2Rpcj1zdWJkaXIpCisgICAgICAgIGJpdGJha2UoJyVzOmRvX3VucGFjaycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3InKS5yZWFkKCksIG9wZW4ob3MucGF0aC5qb2luKHNyY2RpciwgZmlsZXBhdGgpLCAncicpLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoc2VsZiwgZGVzdGRpcj1Ob25lKToKKyAgICAgICAgbmV3ZmlsZXMgPSBbc2VsZi50ZXN0ZmlsZV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICd0ZXN0ZmlsZSVkJyAlIGkpCisgICAgICAgICAgICB3aXRoIG9wZW4odGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdUZXN0IGZpbGUgJWRcbicgJSBpKQorICAgICAgICAgICAgbmV3ZmlsZXMuYXBwZW5kKHRlc3RmaWxlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGVzKCdnY2MnLCBuZXdmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPSctVycpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzX2Jhc2ljX3N1YmRpcihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoZGVzdGRpcj0ndGVzdGRpcicpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODk3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weQpAQCAtMCwwICsxLDUzIEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIFNTdGF0ZUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVfcGF0aCA9IGdldF9iYl92YXIoJ1NTVEFURV9ESVInKQorICAgICAgICBzZWxmLmRpc3RybyA9IGdldF9iYl92YXIoJ05BVElWRUxTQlNUUklORycpCisgICAgICAgIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSA9IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoLCBzZWxmLmRpc3RybykKKworICAgICMgQ3JlYXRlcyBhIHNwZWNpYWwgc3N0YXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgb3B0aW9uIHRvIGFkZCBzc3RhdGUgbWlycm9ycworICAgIGRlZiBjb25maWdfc3N0YXRlKHNlbGYsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPUZhbHNlLCBhZGRfbG9jYWxfbWlycm9ycz1bXSk6CisgICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSB0ZW1wX3NzdGF0ZV9sb2NhdGlvbgorCisgICAgICAgIGlmIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246CisgICAgICAgICAgICB0ZW1wX3NzdGF0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0ZW1wX3NzdGF0ZV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBjb25maWdfdGVtcF9zc3RhdGUgPSAiU1NUQVRFX0RJUiA9IFwiJXNcIiIgJSB0ZW1wX3NzdGF0ZV9wYXRoCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3RlbXBfc3N0YXRlKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wX3NzdGF0ZV9wYXRoKQorICAgICAgICBzZWxmLnNzdGF0ZV9wYXRoID0gZ2V0X2JiX3ZhcignU1NUQVRFX0RJUicpCisgICAgICAgIHNlbGYuZGlzdHJvID0gZ2V0X2JiX3ZhcignTkFUSVZFTFNCU1RSSU5HJykKKyAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuZGlzdHJvKQorCisgICAgICAgIGlmIGFkZF9sb2NhbF9taXJyb3JzOgorICAgICAgICAgICAgY29uZmlnX3NldF9zc3RhdGVfaWZfbm90X3NldCA9ICdTU1RBVEVfTUlSUk9SUyA/PSAiIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc2V0X3NzdGF0ZV9pZl9ub3Rfc2V0KQorICAgICAgICAgICAgZm9yIGxvY2FsX21pcnJvciBpbiBhZGRfbG9jYWxfbWlycm9yczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguam9pbihsb2NhbF9taXJyb3IpID09IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoKSwgbXNnPSdDYW5ub3QgYWRkIHRoZSBjdXJyZW50IHNzdGF0ZSBwYXRoIGFzIGEgc3N0YXRlIG1pcnJvcicpCisgICAgICAgICAgICAgICAgY29uZmlnX3NzdGF0ZV9taXJyb3IgPSAiU1NUQVRFX01JUlJPUlMgKz0gXCJmaWxlOi8vLiogZmlsZTovLy8lcy9QQVRIXCIiICUgbG9jYWxfbWlycm9yCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zc3RhdGVfbWlycm9yKQorCisgICAgIyBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHNzdGF0ZSBmaWxlcworICAgIGRlZiBzZWFyY2hfc3N0YXRlKHNlbGYsIGZpbGVuYW1lX3JlZ2V4LCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNzdGF0ZV9wYXRoKToKKyAgICAgICAgICAgIGlmIGRpc3Ryb19zcGVjaWZpYyBhbmQgcmUuc2VhcmNoKCIlcy9bYS16MC05XXsyfSQiICUgc2VsZi5kaXN0cm8sIHJvb3QpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgICAgICAgICAgaWYgZGlzdHJvX25vbnNwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLnNzdGF0ZV9wYXRoLCByb290KToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGZpbGVuYW1lX3JlZ2V4LCBmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKKyAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwNmIyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKQEAgLTAsMCArMSwzMDggQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3Quc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgU1N0YXRlVGVzdHMoU1N0YXRlQmFzZSk6CisKKyAgICAjIFRlc3Qgc3N0YXRlIGZpbGVzIGNyZWF0aW9uIGFuZCB0aGVpciBsb2NhdGlvbgorICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGlmICBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uOgorICAgICAgICAgICAgYml0YmFrZShbJy1jY2xlYW4nXSArIHRhcmdldHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIGZpbGVfdHJhY2tlciA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBpZiBzaG91bGRfcGFzczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlX3RyYWNrZXIgLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZpbGVfdHJhY2tlciAsIG1zZz0iRm91bmQgc3N0YXRlIGZpbGVzIGluIHRoZSB3cm9uZyBwbGFjZSBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICBAdGVzdGNhc2UoOTc1KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnYmludXRpbHMtY3Jvc3MtJysgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX3NwZWNpZmljX2ZhaWwoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9RmFsc2UpCisKKyAgICBAdGVzdGNhc2UoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfZmFpbChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQorCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZSBmaWxlcyBkZWxldGlvbiBwYXJ0IG9mIHRoZSBkb19jbGVhbnNzdGF0ZSB0YXNrCisgICAgZGVmIHJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgdGd6X2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRnel9jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAudGd6IGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzaWdpbmZvX2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC5zaWdpbmZvJCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaWdpbmZvX2NyZWF0ZWQsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIC5zaWdpbmZvIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKyAgICAgICAgdGd6X3JlbW92ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0Z3pfcmVtb3ZlZCwgbXNnPSJkb19jbGVhbnNzdGF0ZSBkaWRuJ3QgcmVtb3ZlIC50Z3ogc3N0YXRlIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWNfbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZScsICdnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhbJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydiaW51dGlscy1jcm9zcy0nKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJywgJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworCisgICAgIyBUZXN0IHJlYnVpbGRpbmcgb2YgZGlzdHJvLXNwZWNpZmljIHNzdGF0ZSBmaWxlcworICAgIGRlZiBydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoc2VsZiwgdGFyZ2V0cywgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlKSA9PSBbXSwgbXNnPSJGb3VuZCBkaXN0cm8gbm9uLXNwZWNpZmljIHNzdGF0ZSBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGZpbGVfdHJhY2tlcl8xID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmaWxlX3RyYWNrZXJfMSkgPj0gbGVuKHRhcmdldHMpLCBtc2cgPSAiTm90IGFsbCBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSwgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlICsgIl9vbGQiKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbiddICsgdGFyZ2V0cykKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXJfMiA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzIpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgbm90X3JlY3JlYXRlZCA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8xIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8yXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X3JlY3JlYXRlZCA9PSBbXSwgbXNnPSJUaGUgZm9sbG93aW5nIHNzdGF0ZSBmaWxlcyB3YXJlIG5vdCByZWNyZWF0ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBub3RfcmVjcmVhdGVkKSkpCisKKyAgICAgICAgY3JlYXRlZF9vbmNlID0gW3ggZm9yIHggaW4gZmlsZV90cmFja2VyXzIgaWYgeCBub3QgaW4gZmlsZV90cmFja2VyXzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGVkX29uY2UgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIG9ubHkgaW4gdGhlIHNlY29uZCBydW46ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBjcmVhdGVkX29uY2UpKSkKKworICAgIEB0ZXN0Y2FzZSgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX25hdGl2ZV90YXJnZXRzKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDE3NSkKKyAgICBkZWYgdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGVfY3Jvc3NfdGFyZ2V0KHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaF0sIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoMTc1KQorICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9uYXRpdmVfdGFyZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50IHNjcmlwdC4gRWFjaCBlbGVtZW50IGluIHRoZSBnbG9iYWxfY29uZmlnIGxpc3QgaXMgdXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gdGhlIHRhcmdldF9jb25maWcgbGlzdAorICAgICMgZ2xvYmFsX2NvbmZpZyBlbGVtZW50cyBhcmUgZXhwZWN0ZWQgdG8gbm90IGdlbmVyYXRlIGFueSBzc3RhdGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZW1vdmVkIGJ5IHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIChzdWNoIGFzIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBNQUNISU5FKQorICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoc2VsZiwgdGFyZ2V0LCBnbG9iYWxfY29uZmlnPVsnJ10sIHRhcmdldF9jb25maWc9WycnXSwgaWdub3JlX3BhdHRlcm5zPVtdKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXRfY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGdsb2JhbF9jb25maWcpID09IGxlbih0YXJnZXRfY29uZmlnKSwgbXNnPSdMaXN0cyBnbG9iYWxfY29uZmlnIGFuZCB0YXJnZXRfY29uZmlnIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cycpCisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBhZGRfbG9jYWxfbWlycm9ycz1bc2VsZi5zc3RhdGVfcGF0aF0pCisKKyAgICAgICAgIyBJZiBidWlsZGhpc3RvcnkgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlIHZlcnNpb24tZ29pbmctYmFja3dhcmRzIFFBIGNoZWNrcyBmb3IgdGhpcyB0ZXN0LiBJdCBtYXkgcmVwb3J0IGVycm9ycyBvdGhlcndpc2UuCisgICAgICAgIGlmICgnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdVU0VSX0NMQVNTRVMnKSkgb3IgKCdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ0lOSEVSSVQnKSk6CisgICAgICAgICAgICByZW1vdmVfZXJyb3JzX2NvbmZpZyA9ICdFUlJPUl9RQV9yZW1vdmUgPSAidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKHJlbW92ZV9lcnJvcnNfY29uZmlnKQorCisgICAgICAgICMgRm9yIG5vdCB0aGlzIG9ubHkgY2hlY2tzIGlmIHJhbmRvbSBzc3RhdGUgdGFza3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5IGFzIGEgZ3JvdXAuCisgICAgICAgICMgSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYWRkIGNvbnRyb2wgb3ZlciB3aGF0IHRhc2tzIHdlIGNoZWNrIGZvci4KKworICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdCA9IFtdCisgICAgICAgIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgPSBbXQorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbih0YXJnZXRfY29uZmlnKSk6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc3N0YXRlX2FyY2ggPSBnZXRfYmJfdmFyKCdTU1RBVEVfUEtHQVJDSCcsIHRhcmdldCkKKyAgICAgICAgICAgIGlmIG5vdCBzc3RhdGVfYXJjaCBpbiBzc3RhdGVfYXJjaHNfbGlzdDoKKyAgICAgICAgICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdC5hcHBlbmQoc3N0YXRlX2FyY2gpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCisgICAgICAgICAgICBiaXRiYWtlKCItY2NsZWFuICVzIiAlIHRhcmdldCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9hZnRlcl9idWlsZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlICs9IFt4IGZvciB4IGluIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgaWYgeCBub3QgaW4gdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZyA9ICJidWlsZCBvZiAlcyBmYWlsZWQgd2l0aCAlcyIgJSAodGFyZ2V0LCByZXN1bHQub3V0cHV0KSkKKworICAgICAgICBydW5DbWQoInNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIC15IC0tY2FjaGUtZGlyPSVzIC0tcmVtb3ZlLWR1cGxpY2F0ZWQgLS1leHRyYS1hcmNocz0lcyIgJSAoc2VsZi5zc3RhdGVfcGF0aCwgJywnLmpvaW4obWFwKHN0ciwgc3N0YXRlX2FyY2hzX2xpc3QpKSkpCisgICAgICAgIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlID0gW3ggZm9yIHggaW4gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKSBpZiBub3QgYW55KHBhdHRlcm4gaW4geCBmb3IgcGF0dGVybiBpbiBpZ25vcmVfcGF0dGVybnMpXQorCisgICAgICAgIGFjdHVhbF9ub3RfZXhwZWN0ZWQgPSBbeCBmb3IgeCBpbiBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSBpZiB4IG5vdCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFjdHVhbF9ub3RfZXhwZWN0ZWQsIG1zZz0iRmlsZXMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJ1dCB3YXJlIG5vdDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIGFjdHVhbF9ub3RfZXhwZWN0ZWQpKSkKKyAgICAgICAgZXhwZWN0ZWRfbm90X2FjdHVhbCA9IFt4IGZvciB4IGluIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X2FjdHVhbCwgbXNnPSJFeHRyYSBmaWxlcyB3YXJlIHJlbW92ZWQ6ICVzIiAnLCAnLmpvaW4obWFwKHN0ciwgZXhwZWN0ZWRfbm90X2FjdHVhbCkpKQorCisgICAgQHRlc3RjYXNlKDk3MykKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMShzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDk3OCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMihzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzkpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzMoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMCInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZChnbG9iYWxfY29uZmlnWzBdKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzQpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX21hY2hpbmUoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDEyNzApCisgICAgZGVmIHRlc3Rfc3N0YXRlXzMyXzY0X3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIGZvciBib3RoIG5hdGl2ZSBhbmQgdGFyZ2V0IHNob3VsZCBub3QgdmFyeSB3aGV0aGVyCisgICAgICAgIHRoZXkncmUgYnVpbHQgb24gYSAzMiBvciA2NCBiaXQgc3lzdGVtLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudCAKKyAgICAgICAgYnVpbGQgbWFjaGluZXMgYW5kIHJ1bm5pbmcgYSBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgY2FsbGluZyB1bmFtZSgpCisgICAgICAgIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICAiIiIKKworICAgICAgICB0b3BkaXIgPSBnZXRfYmJfdmFyKCdUT1BESVInKQorICAgICAgICB0YXJnZXR2ZW5kb3IgPSBnZXRfYmJfdmFyKCdUQVJHRVRfVkVORE9SJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorQlVJTERfQVJDSCA9IFwieDg2XzY0XCIKK0JVSUxEX09TID0gXCJsaW51eFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitCVUlMRF9BUkNIID0gXCJpNjg2XCIKK0JVSUxEX09TID0gXCJsaW51eFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorCisgICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6CisgICAgICAgICAgICBmID0gW10KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAgICAgICAgIGYuZXh0ZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSBmb3IgbmFtZSBpbiBmaWxlcykKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKS5yZXBsYWNlKCJpNjg2LWxpbnV4IiwgIng4Nl82NC1saW51eCIpLnJlcGxhY2UoImk2ODYiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICJ4ODZfNjQiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICkgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKworICAgIEB0ZXN0Y2FzZSgxMjcxKQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9uYXRpdmVsc2JzdHJpbmdfc2FtZV9oYXNoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHdoaWNoZXZlciBOQVRJVkVMU0JTVFJJTkcgaXMKKyAgICAgICAgZGV0ZWN0ZWQuIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0d28gZGlmZmVyZW50IGJ1aWxkIG1hY2hpbmVzIGFuZCBydW5uaW5nIAorICAgICAgICBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgbWFudWFsbHkgYW5kIGNoZWNrIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK05BVElWRUxTQlNUUklORyA9IFwiRGlzdHJvQVwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitOQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0JcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmLmV4dGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkgZm9yIG5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfYWxsYXJjaF9zYW1lc2lncyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIG9mZiBhbGxhcmNoIHBhY2thZ2VzIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIgCisgICAgICAgIE1BQ0hJTkUgaXMgc2V0LiBDaGVjayB0aGlzIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHRhcmdldG9zID0gZ2V0X2JiX3ZhcignVEFSR0VUX09TJykKKyAgICAgICAgdGFyZ2V0dmVuZG9yID0gZ2V0X2JiX3ZhcignVEFSR0VUX1ZFTkRPUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK01BQ0hJTkUgPSBcInFlbXV4ODZcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgid29ybGQgLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitNQUNISU5FID0gXCJxZW11YXJtXCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgImRvX2J1aWxkIiBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvYWxsIiArIHRhcmdldHZlbmRvciArICItIiArIHRhcmdldG9zKQorICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy9hbGwiICsgdGFyZ2V0dmVuZG9yICsgIi0iICsgdGFyZ2V0b3MpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjNTRhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5CkBAIC0wLDAgKzEsMjM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1JTCisjIEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCisiIiJUZXN0IGNhc2VzIGZvciB3aWMuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKK2Zyb20gc2h1dGlsIGltcG9ydCBybXRyZWUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCisKK2NsYXNzIFdpYyhvZVNlbGZUZXN0KToKKyAgICAiIiJXaWMgdGVzdCBjbGFzcy4iIiIKKworICAgIHJlc3VsdGRpciA9ICIvdmFyL3RtcC93aWMvYnVpbGQvIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIiIiQnVpbGQgd2ljIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLiIiIgorICAgICAgICBiaXRiYWtlKCdzeXNsaW51eCBzeXNsaW51eC1uYXRpdmUgcGFydGVkLW5hdGl2ZSBncHRmZGlzay1uYXRpdmUgJworICAgICAgICAgICAgICAgICdkb3Nmc3Rvb2xzLW5hdGl2ZSBtdG9vbHMtbmF0aXZlJykKKyAgICAgICAgV2ljLmltYWdlX2lzX3JlYWR5ID0gRmFsc2UKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGJlZm9yZSBlYWNoIHRlc3QgbWV0aG9kLiIiIgorICAgICAgICBpZiBub3QgV2ljLmltYWdlX2lzX3JlYWR5OgorICAgICAgICAgICAgIyBidWlsZCBjb3JlLWltYWdlLW1pbmltYWwgd2l0aCByZXF1aXJlZCBmZWF0dXJlcworICAgICAgICAgICAgZmVhdHVyZXMgPSAnSU1BR0VfRlNUWVBFUyArPSAiIGhkZGltZyJcbk1BQ0hJTkVfRkVBVFVSRVNfYXBwZW5kID0gIiBlZmkiXG4nCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisgICAgICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICAgICAgIyBzZXQgdGhpcyBjbGFzcyB2YXJpYWJsZSB0byBhdm9pZCBidWlkaW5nIGltYWdlIG1hbnkgdGltZXMKKyAgICAgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IFRydWUKKworICAgICAgICBybXRyZWUoc2VsZi5yZXN1bHRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0MDFfaGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgLS1oZWxwJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwMl9jcmVhdGVoZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgY3JlYXRlIC0taGVscCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDNfbGlzdGhlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDA0X2J1aWxkX2ltYWdlX25hbWUoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIC0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA1X2J1aWxkX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgcHJvdmlkaW5nIGFsbCBhcnRpZmFjdHMuIiIiCisgICAgICAgIHZhcnMgPSBkaWN0KCh2YXIubG93ZXIoKSwgZ2V0X2JiX3Zhcih2YXIsICdjb3JlLWltYWdlLW1pbmltYWwnKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhciBpbiAoJ1NUQUdJTkdfREFUQURJUicsICdERVBMT1lfRElSX0lNQUdFJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnSU1BR0VfUk9PVEZTJykpCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShzdGFnaW5nX2Rpcl9uYXRpdmUpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLXIgJShpbWFnZV9yb290ZnMpcyIgJSB2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDZfZ3B0X2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGNvcmUtaW1hZ2UtbWluaW1hbCB3aXRoIGdwdCB0YWJsZSBhbmQgVVVJRCBib290IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2stZ3B0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDdfdW5zdXBwb3J0ZWRfc3ViY29tbWFuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1bnN1cHBvcnRlZCBzdWJjb21tYW5kIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMgdW5zdXBwb3J0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwOF9ub19jb21tYW5kKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyB3aXRob3V0IGNvbW1hbmQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBydW5DbWQoJ3dpYycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwOV9oZWxwX2tpY2tzdGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBvdmVydmlldyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgb3ZlcnZpZXcnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDEwX2hlbHBfcGx1Z2lucyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBwbHVnaW5zIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBwbHVnaW5zJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxMV9oZWxwX2tpY2tzdGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBraWNrc3RhcnQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIGtpY2tzdGFydCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTJfY29tcHJlc3NfZ3ppcChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGd6aXAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGd6aXAiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0Lmd6IikpKQorCisgICAgZGVmIHRlc3QxM19jb21wcmVzc19nemlwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXByZXNzaW5nIGFuIGltYWdlIHdpdGggYnppcDIiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGJ6aXAyIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC5iejIiKSkpCisKKyAgICBkZWYgdGVzdDE0X2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCB4eiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgeHoiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0Lnh6IikpKQorCisgICAgZGVmIHRlc3QxNV93cm9uZ19jb21wcmVzc29yKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGhvdyB3aWMgYnJlYWtzIGlmIHdyb25nIGNvbXByZXNzb3IgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIHdyb25nIiwgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDE2X3Jvb3Rmc19pbmRpcmVjdF9yZWNpcGVzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcmVjaXBlcyIiIgorICAgICAgICB3a3MgPSAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMj1jb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB3a3MpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcyouZGlyZWN0IiAlIHdrcykpKQorCisgICAgZGVmIHRlc3QxN19yb290ZnNfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcGF0aHMiIiIKKyAgICAgICAgdmFycyA9IGRpY3QoKHZhci5sb3dlcigpLCBnZXRfYmJfdmFyKHZhciwgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFyIGluICgnU1RBR0lOR19EQVRBRElSJywgJ0RFUExPWV9ESVJfSU1BR0UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUQUdJTkdfRElSX05BVElWRScsICdJTUFHRV9ST09URlMnKSkKKyAgICAgICAgdmFyc1snd2tzJ10gPSAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMiCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSAlKHdrcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShzdGFnaW5nX2Rpcl9uYXRpdmUpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMtZGlyIHJvb3RmczE9JShpbWFnZV9yb290ZnMpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMtZGlyIHJvb3RmczI9JShpbWFnZV9yb290ZnMpcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSB2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUod2tzKXMtKi5kaXJlY3QiICUgdmFycykpKQorCisgICAgZGVmIHRlc3QxOF9pc29faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgaHlicmlkIGlzbyBpbWFnZXdpdGggbGVnYWN5IGFuZCBFRkkgYm9vdCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBta2h5YnJpZGlzbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouZGlyZWN0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouaXNvIikpKQorCisgICAgZGVmIHRlc3QxOV9pbWFnZV9lbnYoc2VsZik6CisgICAgICAgICIiIlRlc3QgZ2VuZXJhdGlvbiBvZiA8aW1hZ2U+LmVudiBmaWxlcy4iIiIKKyAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBzdGRpciA9IGdldF9iYl92YXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIGltYWdlKQorICAgICAgICBpbWdkYXRhZGlyID0gb3MucGF0aC5qb2luKHN0ZGlyLCAnaW1nZGF0YScpCisKKyAgICAgICAgYmFzZW5hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9CQVNFTkFNRScsIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2VuYW1lLCBpbWFnZSkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihpbWdkYXRhZGlyLCBiYXNlbmFtZSkgKyAnLmVudicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHBhdGgpKQorCisgICAgICAgIHdpY3ZhcnMgPSBzZXQoZ2V0X2JiX3ZhcignV0lDVkFSUycsIGltYWdlKS5zcGxpdCgpKQorICAgICAgICAjIGZpbHRlciBvdXQgb3B0aW9uYWwgdmFyaWFibGVzCisgICAgICAgIHdpY3ZhcnMgPSB3aWN2YXJzLmRpZmZlcmVuY2UoKCdIRERESVInLCAnSU1BR0VfQk9PVF9GSUxFUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTklUUkQnLCAnSVNPRElSJykpCisgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBlbnZmaWxlOgorICAgICAgICAgICAgY29udGVudCA9IGRpY3QobGluZS5zcGxpdCgiPSIsIDEpIGZvciBsaW5lIGluIGVudmZpbGUpCisgICAgICAgICAgICAjIHRlc3QgaWYgdmFyaWFibGVzIHVzZWQgYnkgd2ljIHByZXNlbnQgaW4gdGhlIC5lbnYgZmlsZQorICAgICAgICAgICAgZm9yIHZhciBpbiB3aWN2YXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YXIgaW4gY29udGVudCwgIiVzIGlzIG5vdCBpbiAuZW52IGZpbGUiICUgdmFyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50W3Zhcl0pCisKKyAgICBkZWYgdGVzdDIwX3dpY19pbWFnZV90eXBlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGJ1aWxkaW5nIHdpYyBpbWFnZXMgYnkgYml0YmFrZSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ3dpYy1pbWFnZS1taW5pbWFsJykuc3RhdHVzKQorCisgICAgICAgIGRlcGxveV9kaXIgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2RpciwgJ3dpYy1pbWFnZS1taW5pbWFsLSVzLicgJSBtYWNoaW5lKQorICAgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgcmVzdWx0IGltYWdlIGFuZCBtYW5pZmVzdHMgc3ltbGlua3MKKyAgICAgICAgIyBwb2ludGluZyB0byBleGlzdGluZyBmaWxlcworICAgICAgICBmb3Igc3VmZml4IGluICgnd2ljLmJ6MicsICdtYW5pZmVzdCcpOgorICAgICAgICAgICAgcGF0aCA9IHByZWZpeCArIHN1ZmZpeAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKHBhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGgucmVhbHBhdGgocGF0aCkpKQorCisgICAgZGVmIHRlc3QyMV9xZW11eDg2X2RpcmVjdGRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgcWVtdXgtODYtZGlyZWN0ZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJxZW11eDg2LWRpcmVjdGRpc2siCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSBpbWFnZSkpKQorCisgICAgZGVmIHRlc3QyMl9ta2d1bW1pZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2d1bW1pZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJta2d1bW1pZGlzayIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCisKKyAgICBkZWYgdGVzdDIzX21rZWZpZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2VmaWRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAibWtlZmlkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weSBiL21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGMwZDAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5CkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGZvciBzZXR0aW5nIHVwIGFuZCBjb250cm9sbGluZyBhIHRhcmdldCBtYWNoaW5lLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYmIKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAorZnJvbSBvZXFhLnV0aWxzLnFlbXVydW5uZXIgaW1wb3J0IFFlbXVSdW5uZXIKK2Zyb20gb2VxYS51dGlscy5xZW11dGlueXJ1bm5lciBpbXBvcnQgUWVtdVRpbnlSdW5uZXIKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBUYXJnZXREdW1wZXIKK2Zyb20gb2VxYS5jb250cm9sbGVycy50ZXN0dGFyZ2V0bG9hZGVyIGltcG9ydCBUZXN0VGFyZ2V0TG9hZGVyCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworZGVmIGdldF90YXJnZXRfY29udHJvbGxlcihkKToKKyAgICB0ZXN0dGFyZ2V0ID0gZC5nZXRWYXIoIlRFU1RfVEFSR0VUIiwgVHJ1ZSkKKyAgICAjIG9sZCwgc2ltcGxlIG5hbWVzCisgICAgaWYgdGVzdHRhcmdldCA9PSAicWVtdSI6CisgICAgICAgIHJldHVybiBRZW11VGFyZ2V0KGQpCisgICAgZWxpZiB0ZXN0dGFyZ2V0ID09ICJzaW1wbGVyZW1vdGUiOgorICAgICAgICByZXR1cm4gU2ltcGxlUmVtb3RlVGFyZ2V0KGQpCisgICAgZWxzZToKKyAgICAgICAgIyB1c2UgdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpcyBpdCBhIGNvcmUgY2xhc3MgZGVmaW5lZCBoZXJlPworICAgICAgICAgICAgY29udHJvbGxlciA9IGdldGF0dHIoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB0ZXN0dGFyZ2V0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIG5vcGUsIHBlcmhhcHMgYSBsYXllciBkZWZpbmVkIG9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgdGVzdHRhcmdldGxvYWRlciA9IFRlc3RUYXJnZXRMb2FkZXIoKQorICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0ZXN0dGFyZ2V0bG9hZGVyLmdldF9jb250cm9sbGVyX21vZHVsZSh0ZXN0dGFyZ2V0LCBiYnBhdGgpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGltcG9ydCB7MH0gZnJvbSBhdmFpbGFibGUgY29udHJvbGxlciBtb2R1bGVzOlxuezF9Ii5mb3JtYXQodGVzdHRhcmdldCx0cmFjZWJhY2suZm9ybWF0X2V4YygpKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIFRFU1RfVEFSR0VUIC0gIiArIHN0cihlKSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIoZCkKKworCitjbGFzcyBCYXNlVGFyZ2V0KG9iamVjdCk6CisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHNlbGYucG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRlcGxveShzZWxmKToKKworICAgICAgICBzZWxmLnNzaGxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzc2hsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3NobG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3NobG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnNzaGxvZywgc3NobG9nbGluaykKKyAgICAgICAgYmIubm90ZSgiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYXRjaF9pbWFnZV9mc3R5cGUoc2VsZiwgZCwgaW1hZ2VfZnN0eXBlcz1Ob25lKToKKyAgICAgICAgaWYgbm90IGltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICBpbWFnZV9mc3R5cGVzID0gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKS5zcGxpdCgnICcpCisgICAgICAgIHBvc3NpYmxlX2ltYWdlX2ZzdHlwZXMgPSBbZnN0eXBlIGZvciBmc3R5cGUgaW4gc2VsZi5zdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyBpZiBmc3R5cGUgaW4gaW1hZ2VfZnN0eXBlc10KKyAgICAgICAgaWYgcG9zc2libGVfaW1hZ2VfZnN0eXBlczoKKyAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZV9pbWFnZV9mc3R5cGVzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldF9pbWFnZV9mc3R5cGUoc2VsZiwgZCk6CisgICAgICAgIGltYWdlX2ZzdHlwZSA9IHNlbGYubWF0Y2hfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIGlmIGltYWdlX2ZzdHlwZToKKyAgICAgICAgICAgIHJldHVybiBpbWFnZV9mc3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJTUFHRV9GU1RZUEVTIHNob3VsZCBjb250YWluIGEgVGFyZ2V0IENvbnRyb2xsZXIgc3VwcG9ydGVkIGltYWdlIGZzdHlwZTogJXMgIiAlICcsICcuam9pbihtYXAoc3RyLCBzZWxmLnN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzKSkpCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHNlbGYuc3RhcnQocGFyYW1zKQorCisgICAgZGVmIHJ1bihzZWxmLCBjbWQsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucnVuKGNtZCwgdGltZW91dCkKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29weV90byhsb2NhbHBhdGgsIHJlbW90ZXBhdGgpCisKKyAgICBkZWYgY29weV9mcm9tKHNlbGYsIHJlbW90ZXBhdGgsIGxvY2FscGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29weV9mcm9tKHJlbW90ZXBhdGgsIGxvY2FscGF0aCkKKworCisKK2NsYXNzIFFlbXVUYXJnZXQoQmFzZVRhcmdldCk6CisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsnZXh0MycsICdleHQ0JywgJ2NwaW8uZ3onXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorCisgICAgICAgIHN1cGVyKFFlbXVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGUgPSBzZWxmLmdldF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgc2VsZi5xZW11bG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInFlbXVfYm9vdF9sb2cuJXMiICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgc2VsZi5vcmlncm9vdGZzID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksICBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAnLicgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAnLXRlc3RpbWFnZS4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFIiwgRmFsc2UpICsgJy0nICsgZC5nZXRWYXIoJ01BQ0hJTkUnLCBGYWxzZSkgKyAnLmJpbicpCisgICAgICAgIGR1bXBfdGFyZ2V0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfdGFyZ2V0IiwgVHJ1ZSkKKyAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpCisgICAgICAgIGR1bXBfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisKKyAgICAgICAgIyBMb2cgUWVtdVJ1bm5lciBsb2cgb3V0cHV0IHRvIGEgZmlsZQorICAgICAgICBpbXBvcnQgb2UucGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQorICAgICAgICBzZWxmLnFlbXVydW5uZXJsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAncWVtdXJ1bm5lcl9sb2cuJXMnICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUWVtdVJ1bm5lcicpCisgICAgICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKHNlbGYucWVtdXJ1bm5lcmxvZykKKyAgICAgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgICAgIG9lLnBhdGguc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKHNlbGYucWVtdXJ1bm5lcmxvZyksIG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICdxZW11cnVubmVyX2xvZycpLCBmb3JjZT1UcnVlKQorCisgICAgICAgIGlmIGQuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKSA9PSAicG9reS10aW55IjoKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gUWVtdVRpbnlSdW5uZXIobWFjaGluZT1kLmdldFZhcigiTUFDSElORSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmcz1zZWxmLnJvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSBzZWxmLnFlbXVsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsID0gc2VsZi5rZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdHRpbWUgPSBpbnQoZC5nZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsIFRydWUpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gUWVtdVJ1bm5lcihtYWNoaW5lPWQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzPXNlbGYucm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZSA9IHNlbGYucWVtdWxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290dGltZSA9IGludChkLmdldFZhcigiVEVTVF9RRU1VQk9PVF9USU1FT1VUIiwgVHJ1ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfZGlyID0gZHVtcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpKQorCisgICAgICAgIHNlbGYudGFyZ2V0X2R1bXBlciA9IFRhcmdldER1bXBlcihkdW1wX3RhcmdldF9jbWRzLCBkdW1wX2Rpciwgc2VsZi5ydW5uZXIpCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYub3JpZ3Jvb3Rmcywgc2VsZi5yb290ZnMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJFcnJvciBjb3B5aW5nIHJvb3RmczogJXMiICUgZSkKKworICAgICAgICBxZW11bG9nbGluayA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJxZW11X2Jvb3RfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocWVtdWxvZ2xpbmspOgorICAgICAgICAgICAgb3MudW5saW5rKHFlbXVsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYucWVtdWxvZywgcWVtdWxvZ2xpbmspCisKKyAgICAgICAgYmIubm90ZSgicm9vdGZzIGZpbGU6ICVzIiAlICBzZWxmLnJvb3RmcykKKyAgICAgICAgYmIubm90ZSgiUWVtdSBsb2cgZmlsZTogJXMiICUgc2VsZi5xZW11bG9nKQorICAgICAgICBzdXBlcihRZW11VGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXIuc3RhcnQocGFyYW1zKToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBzZWxmLnJ1bm5lci5pcAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzZWxmLnJ1bm5lci5zZXJ2ZXJfaXAKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woaXA9c2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnFlbXVsb2cpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnFlbXVsb2csICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlFlbXUgbG9nIG91dHB1dCBmcm9tICVzOlxuJXMiICUgKHNlbGYucWVtdWxvZywgZi5yZWFkKCkpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgdG8gc3RhcnQgcWVtdSAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIGJvb3QgbG9nIiAlIHNlbGYucG4pCisKKyAgICBkZWYgY2hlY2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5uZXIuc3RvcCgpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucnVubmVyLnJlc3RhcnQocGFyYW1zKToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBzZWxmLnJ1bm5lci5pcAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzZWxmLnJ1bm5lci5zZXJ2ZXJfaXAKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woaXA9c2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIHRvIHJlLXN0YXJ0IHFlbXUgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBib290IGxvZyIgJSBzZWxmLnBuKQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW5fc2VyaWFsKGNvbW1hbmQpCisKKworY2xhc3MgU2ltcGxlUmVtb3RlVGFyZ2V0KEJhc2VUYXJnZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihTaW1wbGVSZW1vdGVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIGFkZHIgPSBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKSBvciBiYi5mYXRhbCgnUGxlYXNlIHNldCBURVNUX1RBUkdFVF9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIHJ1biB0aGUgdGVzdHMgb24uJykKKyAgICAgICAgc2VsZi5pcCA9IGFkZHIuc3BsaXQoIjoiKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIGJiLm5vdGUoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKKyAgICAgICAgYmIubm90ZSgiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgIGRlZiBkZXBsb3koc2VsZik6CisgICAgICAgIHN1cGVyKFNpbXBsZVJlbW90ZVRhcmdldCwgc2VsZikuZGVwbG95KCkKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woc2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZywgcG9ydD1zZWxmLnBvcnQpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjAwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIG1vZHVsZXMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKKworCisjIEJvcnJvd2VkIGZyb20gQ2FsbGVkUHJvY2Vzc0Vycm9yCisKK2NsYXNzIENvbW1hbmRFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXRjb2RlLCBjbWQsIG91dHB1dCA9IE5vbmUpOgorICAgICAgICBzZWxmLnJldGNvZGUgPSByZXRjb2RlCisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkIHdpdGggb3V0cHV0OiAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0Y29kZSwgc2VsZi5vdXRwdXQpCisKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2NvbW1hbmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTJjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2NvbW1hbmRzLnB5CkBAIC0wLDAgKzEsMjI0IEBACisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGlzIG1haW5seSB1c2VkIGJ5IHNjcmlwdHMvb2Utc2VsZnRlc3QgYW5kIG1vZHVsZXMgdW5kZXIgbWV0YS9vZXFhL3NlbGZ0ZXN0CisjIEl0IHByb3ZpZGVzIGEgY2xhc3MgYW5kIG1ldGhvZHMgZm9yIHJ1bm5pbmcgY29tbWFuZHMgb24gdGhlIGhvc3QgaW4gYSBjb252aWVuZW50IHdheSBmb3IgdGVzdHMuCisKKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgbG9nZ2luZworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgZnRvb2xzCitpbXBvcnQgcmUKK2ltcG9ydCBjb250ZXh0bGliCisKK2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgYmc9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgZGF0YT1Ob25lLCAqKm9wdGlvbnMpOgorCisgICAgICAgIHNlbGYuZGVmYXVsdG9wdHMgPSB7CisgICAgICAgICAgICAic3Rkb3V0Ijogc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgInN0ZGVyciI6IHN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgInN0ZGluIjogTm9uZSwKKyAgICAgICAgICAgICJzaGVsbCI6IEZhbHNlLAorICAgICAgICAgICAgImJ1ZnNpemUiOiAtMSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuY21kID0gY29tbWFuZAorICAgICAgICBzZWxmLmJnID0gYmcKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICAgICAgc2VsZi5vcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRvcHRzKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY21kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYub3B0aW9uc1sic2hlbGwiXSA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5kYXRhOgorICAgICAgICAgICAgc2VsZi5vcHRpb25zWydzdGRpbiddID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKworICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBOb25lCisgICAgICAgIHNlbGYuZXJyb3IgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisgICAgICAgIHNlbGYubG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInV0aWxzLmNvbW1hbmRzIikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jbWQsICoqc2VsZi5vcHRpb25zKQorCisgICAgICAgIGRlZiBjb21tVGhyZWFkKCk6CisgICAgICAgICAgICBzZWxmLm91dHB1dCwgc2VsZi5lcnJvciA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZShzZWxmLmRhdGEpCisKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jb21tVGhyZWFkKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJ1bm5pbmcgY29tbWFuZCAnJXMnIiAlIHNlbGYuY21kKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmJnOgorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbihzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICAgICAgIyBsZXQncyBnaXZlIGl0IG1vcmUgdGltZSB0byB0ZXJtaW5hdGUgZ3JhY2VmdWxseSBiZWZvcmUga2lsbGluZyBpdAorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbig1KQorICAgICAgICAgICAgaWYgc2VsZi50aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgICAgICBzZWxmLm91dHB1dCA9IHNlbGYub3V0cHV0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLnBvbGwoKQorCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQgYXMgZXhpdCBjb2RlLiIgJSAoc2VsZi5jbWQsIHNlbGYuc3RhdHVzKSkKKyAgICAgICAgIyBsb2dnaW5nIHRoZSBjb21wbGV0ZSBvdXRwdXQgaXMgaW5zYW5lCisgICAgICAgICMgYml0YmFrZSAtZSBvdXRwdXQgaXMgcmVhbGx5IGJpZworICAgICAgICAjIGFuZCBtYWtlcyB0aGUgbG9nIGZpbGUgdXNlbGVzcworICAgICAgICBpZiBzZWxmLnN0YXR1czoKKyAgICAgICAgICAgIGxvdXQgPSAiXG4iLmpvaW4oc2VsZi5vdXRwdXQuc3BsaXRsaW5lcygpWy0yMDpdKQorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkxhc3QgMjAgbGluZXM6XG4lcyIgJSBsb3V0KQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorICAgIHBhc3MKKworCitkZWYgcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgYXNzZXJ0X2Vycm9yPVRydWUsICoqb3B0aW9ucyk6CisgICAgcmVzdWx0ID0gUmVzdWx0KCkKKworICAgIGNtZCA9IENvbW1hbmQoY29tbWFuZCwgdGltZW91dD10aW1lb3V0LCAqKm9wdGlvbnMpCisgICAgY21kLnJ1bigpCisKKyAgICByZXN1bHQuY29tbWFuZCA9IGNvbW1hbmQKKyAgICByZXN1bHQuc3RhdHVzID0gY21kLnN0YXR1cworICAgIHJlc3VsdC5vdXRwdXQgPSBjbWQub3V0cHV0CisgICAgcmVzdWx0LnBpZCA9IGNtZC5wcm9jZXNzLnBpZAorCisgICAgaWYgcmVzdWx0LnN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgIGlmIGFzc2VydF9lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQ6XG4lcyIgJSAoY29tbWFuZCwgcmVzdWx0LnN0YXR1cywgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3IocmVzdWx0LnN0YXR1cywgY29tbWFuZCwgcmVzdWx0Lm91dHB1dCkKKworICAgIHJldHVybiByZXN1bHQKKworCitkZWYgYml0YmFrZShjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIHBvc3Rjb25maWc9Tm9uZSwgKipvcHRpb25zKToKKworICAgIGlmIHBvc3Rjb25maWc6CisgICAgICAgIHBvc3Rjb25maWdfZmlsZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ29lcWEtcG9zdC5jb25mJykKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmZpZ19maWxlLCBwb3N0Y29uZmlnKQorICAgICAgICBleHRyYV9hcmdzID0gIi1SICVzIiAlIHBvc3Rjb25maWdfZmlsZQorICAgIGVsc2U6CisgICAgICAgIGV4dHJhX2FyZ3MgPSAiIgorCisgICAgaWYgaXNpbnN0YW5jZShjb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgY21kID0gImJpdGJha2UgIiArIGV4dHJhX2FyZ3MgKyAiICIgKyBjb21tYW5kCisgICAgZWxzZToKKyAgICAgICAgY21kID0gWyAiYml0YmFrZSIgXSArIFthIGZvciBhIGluIChjb21tYW5kICsgZXh0cmFfYXJncy5zcGxpdCgiICIpKSBpZiBhIG5vdCBpbiBbIiJdXQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cywgdGltZW91dCwgKipvcHRpb25zKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHBvc3Rjb25maWc6CisgICAgICAgICAgICBvcy5yZW1vdmUocG9zdGNvbmZpZ19maWxlKQorCisKK2RlZiBnZXRfYmJfZW52KHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIGlmIHRhcmdldDoKKyAgICAgICAgcmV0dXJuIGJpdGJha2UoIi1lICVzIiAlIHRhcmdldCwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKS5vdXRwdXQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYml0YmFrZSgiLWUiLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpLm91dHB1dAorCitkZWYgZ2V0X2JiX3Zhcih2YXIsIHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIHZhbCA9IE5vbmUKKyAgICBiYmVudiA9IGdldF9iYl9lbnYodGFyZ2V0LCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgbGFzdGxpbmUgPSBOb25lCisgICAgZm9yIGxpbmUgaW4gYmJlbnYuc3BsaXRsaW5lcygpOgorICAgICAgICBpZiByZS5zZWFyY2goIl4oZXhwb3J0ICk/JXM9IiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc9JywgMSlbMV0KKyAgICAgICAgICAgIHZhbCA9IHZhbC5zdHJpcCgnXCInKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiByZS5tYXRjaCgidW5zZXQgJXMkIiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICAjIEhhbmRsZSBbdW5leHBvcnRdIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgbGFzdGxpbmUuc3RhcnRzd2l0aCgnIyAgICInKToKKyAgICAgICAgICAgICAgICB2YWwgPSBsYXN0bGluZS5zcGxpdCgnXCInKVsxXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxhc3RsaW5lID0gbGluZQorICAgIHJldHVybiB2YWwKKworZGVmIGdldF90ZXN0X2xheWVyKCk6CisgICAgbGF5ZXJzID0gZ2V0X2JiX3ZhcigiQkJMQVlFUlMiKS5zcGxpdCgpCisgICAgdGVzdGxheWVyID0gTm9uZQorICAgIGZvciBsIGluIGxheWVyczoKKyAgICAgICAgaWYgJ34nIGluIGw6CisgICAgICAgICAgICBsID0gb3MucGF0aC5leHBhbmR1c2VyKGwpCisgICAgICAgIGlmICIvbWV0YS1zZWxmdGVzdCIgaW4gbCBhbmQgb3MucGF0aC5pc2RpcihsKToKKyAgICAgICAgICAgIHRlc3RsYXllciA9IGwKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHRlc3RsYXllcgorCitkZWYgY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCB0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eT05OTksIHJlY2lwZXBhdGhzcGVjPSdyZWNpcGVzLSovKicpOgorICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJykpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9LyVzLyouYmIgXFwnICUgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGYud3JpdGUoJyAgICAgICAgICAgICR7TEFZRVJESVJ9LyVzLyouYmJhcHBlbmQiXG4nICUgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAiJXMiXG4nICUgdGVtcGxheWVybmFtZSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fJXMgPSAiXiR7TEFZRVJESVJ9LyJcbicgJSB0ZW1wbGF5ZXJuYW1lKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfUFJJT1JJVFlfJXMgPSAiJWQiXG4nICUgKHRlbXBsYXllcm5hbWUsIHByaW9yaXR5KSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZXyVzID0gIjEiXG4nICUgdGVtcGxheWVybmFtZSkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bnFlbXUocG4sIHRlc3QpOgorCisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgYmIuYnVpbGQKKworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShGYWxzZSkKKyAgICB0cnk6CisgICAgICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgaW1wb3J0IG9lcWEudGFyZ2V0Y29udHJvbAorICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcigiVEVTVF9MT0dfRElSIiwgIiR7V09SS0RJUn0vdGVzdGltYWdlIikKKyAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsICIxMDAwIikKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgICAgICByZWNpcGVkYXRhID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIFtdLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorCisgICAgICAgICMgVGhlIFFlbXVSdW5uZXIgbG9nIGlzIHNhdmVkIG91dCwgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzIGF0IHRoZSByaWdodAorICAgICAgICAjIGxvZyBsZXZlbCAoYW5kIHRoZW4gZW5zdXJlIHRoYXQgc2luY2UgaXQncyBhIGNoaWxkIG9mIHRoZSBCaXRCYWtlIGxvZ2dlciwKKyAgICAgICAgIyB3ZSBkaXNhYmxlIHByb3BhZ2F0aW9uIHNvIHdlIGRvbid0IHRoZW4gc2VlIHRoZSBsb2cgZXZlbnRzIG9uIHRoZSBjb25zb2xlKQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5RZW11UnVubmVyJykKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQorICAgICAgICBsb2dkaXIgPSByZWNpcGVkYXRhLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKworICAgICAgICBxZW11ID0gb2VxYS50YXJnZXRjb250cm9sLlFlbXVUYXJnZXQocmVjaXBlZGF0YSkKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFdlIG5lZWQgdG8gc2h1dCBkb3duIHRpbmZvaWwgZWFybHkgaGVyZSBpbiBjYXNlIHdlIGFjdHVhbGx5IHdhbnQKKyAgICAgICAgIyB0byBydW4gdGluZm9pbC11c2luZyB1dGlsaXRpZXMgd2l0aCB0aGUgcnVubmluZyBRRU1VIGluc3RhbmNlLgorICAgICAgICAjIEx1Y2tpbHkgUWVtdVRhcmdldCBkb2Vzbid0IG5lZWQgaXQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIHRyeToKKyAgICAgICAgcWVtdS5kZXBsb3koKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxZW11LnN0YXJ0KCkKKyAgICAgICAgZXhjZXB0IGJiLmJ1aWxkLkZ1bmNGYWlsZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBzdGFydCBRRU1VIC0gc2VlIHRoZSBsb2dzIGluICVzJyAlIGxvZ2RpcikKKworICAgICAgICB5aWVsZCBxZW11CisKKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBxZW11LnN0b3AoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyYTg4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpAQCAtMCwwICsxLDIyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgU29tZSBjdXN0b20gZGVjb3JhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHVuaXR0ZXN0cworIyBNb3N0IHVzZWZ1bCBpcyBza2lwVW5sZXNzUGFzc2VkIHdoaWNoIGNhbiBiZSB1c2VkIGZvcgorIyBjcmVhdGluZyBkZXBlbmRlY2llcyBiZXR3ZWVuIHR3byB0ZXN0IG1ldGhvZHMuCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNpZ25hbAorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCisKKyNnZXQgdGhlICJyZXN1bHQiIG9iamVjdCBmcm9tIG9uZSBvZiB0aGUgdXBwZXIgZnJhbWVzIHByb3ZpZGVkIHRoYXQgb25lIG9mIHRoZXNlIHVwcGVyIGZyYW1lcyBpcyBhIHVuaXR0ZXN0LmNhc2UgZnJhbWUKK2NsYXNzIGdldFJlc3VsdHMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICNkeW5hbWljYWxseSBkZXRlcm1pbmUgdGhlIHVuaXR0ZXN0LmNhc2UgZnJhbWUgYW5kIHVzZSBpdCB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kCisgICAgICAgIGlkZW50ID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQKKyAgICAgICAgdXBwZXJmID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpW2lkZW50XQorICAgICAgICB3aGlsZSAodXBwZXJmLmZfZ2xvYmFsc1snX19uYW1lX18nXSAhPSAndW5pdHRlc3QuY2FzZScpOgorICAgICAgICAgICAgdXBwZXJmID0gdXBwZXJmLmZfYmFjaworCisgICAgICAgIGRlZiBoYW5kbGVMaXN0KGl0ZW1zKToKKyAgICAgICAgICAgIHJldCA9IFtdCisgICAgICAgICAgICAjIGl0ZW1zIGlzIGEgbGlzdCBvZiB0dXBsZXMsICh0ZXN0LCBmYWlsdXJlKSBvciAoX0Vycm9ySGFuZGxlcigpLCBFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGZvciBpIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIHMgPSBpWzBdLmlkKCkKKyAgICAgICAgICAgICAgICAjSGFuZGxlIHRoZSBfRXJyb3JIb2xkZXIgb2JqZWN0cyBmcm9tIHNraXBNb2R1bGUgZmFpbHVyZXMKKyAgICAgICAgICAgICAgICBpZiAic2V0VXBNb2R1bGUgKCIgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChzLnJlcGxhY2UoInNldFVwTW9kdWxlICgiLCAiIikucmVwbGFjZSgiKSIsIiIpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldC5hcHBlbmQocykKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgc2VsZi5mYWlsbGlzdCA9IGhhbmRsZUxpc3QodXBwZXJmLmZfbG9jYWxzWydyZXN1bHQnXS5mYWlsdXJlcykKKyAgICAgICAgc2VsZi5lcnJvcmxpc3QgPSBoYW5kbGVMaXN0KHVwcGVyZi5mX2xvY2Fsc1sncmVzdWx0J10uZXJyb3JzKQorICAgICAgICBzZWxmLnNraXBsaXN0ID0gaGFuZGxlTGlzdCh1cHBlcmYuZl9sb2NhbHNbJ3Jlc3VsdCddLnNraXBwZWQpCisKKyAgICBkZWYgZ2V0RmFpbExpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZhaWxsaXN0CisKKyAgICBkZWYgZ2V0RXJyb3JMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcmxpc3QKKworICAgIGRlZiBnZXRTa2lwTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2tpcGxpc3QKKworY2xhc3Mgc2tpcElmRmFpbHVyZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJlcyA9IGdldFJlc3VsdHMoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0Y2FzZSBpbiAocmVzLmdldEZhaWxMaXN0KCkgb3IgcmVzLmdldEVycm9yTGlzdCgpKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBzZWxmLnRlc3RjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyBza2lwSWZTa2lwcGVkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXN0Y2FzZSk6CisgICAgICAgIHNlbGYudGVzdGNhc2UgPSB0ZXN0Y2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsZik6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCisgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6ICVzIiAlIHNlbGYudGVzdGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZigqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZi5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIHNraXBVbmxlc3NQYXNzZWQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZixmKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldFNraXBMaXN0KCkgb3IgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRGYWlsTGlzdCgpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0RXJyb3JMaXN0KCk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgc2VsZi50ZXN0Y2FzZSkKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmLl9fbmFtZV9fCisgICAgICAgIHdyYXBwZWRfZi5fZGVwZW5kc19vbiA9IHNlbGYudGVzdGNhc2UKKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyB0ZXN0Y2FzZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYyk6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi50ZXN0X2Nhc2UgPSBzZWxmLnRlc3RfY2FzZQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3MgTm9QYXJzaW5nRmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiByZWNvcmQubGV2ZWxubyA9PSAxMDAKKworZGVmIExvZ1Jlc3VsdHMob3JpZ2luYWxfY2xhc3MpOgorICAgIG9yaWdfbWV0aG9kID0gb3JpZ2luYWxfY2xhc3MucnVuCisKKyAgICAjcmV3cml0ZSB0aGUgcnVuIG1ldGhvZCBvZiB1bml0dGVzdC5UZXN0Q2FzZSB0byBhZGQgdGVzdGNhc2UgbG9nZ2luZworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0LCAqYXJncywgKiprd3MpOgorICAgICAgICBvcmlnX21ldGhvZChzZWxmLCByZXN1bHQsICphcmdzLCAqKmt3cykKKyAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgI2lmIHRlc3QgY2FzZSBpcyBkZWNvcmF0ZWQgdGhlbiB1c2UgaXQncyBudW1iZXIsIGVsc2UgdXNlIGl0J3MgbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2Nhc2UgPSB0ZXN0TWV0aG9kLnRlc3RfY2FzZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB0ZXN0X2Nhc2UgPSBzZWxmLl90ZXN0TWV0aG9kTmFtZQorCisgICAgICAgIGNsYXNzX25hbWUgPSBzdHIodGVzdE1ldGhvZC5pbV9jbGFzcykuc3BsaXQoIiciKVsxXQorCisgICAgICAgICNjcmVhdGUgY3VzdG9tIGxvZ2dpbmcgbGV2ZWwgZm9yIGZpbHRlcmluZy4KKyAgICAgICAgY3VzdG9tX2xvZ19sZXZlbCA9IDEwMAorICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShjdXN0b21fbG9nX2xldmVsLCAnUkVTVUxUUycpCisgICAgICAgIGNhbGxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisKKyAgICAgICAgZGVmIHJlc3VsdHMoc2VsZiwgbWVzc2FnZSwgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNFbmFibGVkRm9yKGN1c3RvbV9sb2dfbGV2ZWwpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nKGN1c3RvbV9sb2dfbGV2ZWwsIG1lc3NhZ2UsICphcmdzLCAqKmt3cykKKyAgICAgICAgbG9nZ2luZy5Mb2dnZXIucmVzdWx0cyA9IHJlc3VsdHMKKworICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPW9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwncmVzdWx0cy0nK2NhbGxlcisnLmxvZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSd3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyVIOiVNOiVTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD1jdXN0b21fbG9nX2xldmVsKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBsb2dnaW5nLnJvb3QuaGFuZGxlcnM6CisgICAgICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihOb1BhcnNpbmdGaWx0ZXIoKSkKKyAgICAgICAgbG9jYWxfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoY2FsbGVyKQorCisgICAgICAgICNjaGVjayBzdGF0dXMgb2YgdGVzdHMgYW5kIHJlY29yZCBpdAorCisgICAgICAgIGZvciAobmFtZSwgbXNnKSBpbiByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IHN0cihuYW1lKS5zcGxpdCgnICcpWzBdKSBhbmQgKGNsYXNzX25hbWUgaW4gc3RyKG5hbWUpLnNwbGl0KCcgJylbMV0pOgorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IEVSUk9SIikKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOlxuIittc2cpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgZm9yIChuYW1lLCBtc2cpIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBzdHIobmFtZSkuc3BsaXQoJyAnKVswXSkgYW5kIChjbGFzc19uYW1lIGluIHN0cihuYW1lKS5zcGxpdCgnICcpWzFdKToKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBGQUlMRUQiKQorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6XG4iK21zZykKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorICAgICAgICBmb3IgKG5hbWUsIG1zZykgaW4gcmVzdWx0LnNraXBwZWQ6CisgICAgICAgICAgICBpZiAoc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gc3RyKG5hbWUpLnNwbGl0KCcgJylbMF0pIGFuZCAoY2xhc3NfbmFtZSBpbiBzdHIobmFtZSkuc3BsaXQoJyAnKVsxXSk6CisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogU0tJUFBFRCIpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgaWYgcGFzc2VkOgorICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogUEFTU0VEIikKKworICAgIG9yaWdpbmFsX2NsYXNzLnJ1biA9IHJ1bgorICAgIHJldHVybiBvcmlnaW5hbF9jbGFzcworCitjbGFzcyBUaW1lT3V0KEJhc2VFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHRpbWVvdXQoc2Vjb25kcyk6CisgICAgZGVmIGRlY29yYXRvcihmbik6CisgICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKToKKyAgICAgICAgICAgIEB3cmFwcyhmbikKKyAgICAgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkKKyAgICAgICAgICAgICAgICBkZWYgcmFpc2VUaW1lT3V0KHNpZ25hbCwgZnJhbWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBmcmFtZSBpcyBub3QgY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVPdXQoJyVzIHNlY29uZHMnICUgc2Vjb25kcykKKyAgICAgICAgICAgICAgICBwcmV2X2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCByYWlzZVRpbWVPdXQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBwcmV2X2hhbmRsZXIpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZm4KKyAgICByZXR1cm4gZGVjb3JhdG9yCisKK19fdGFnX3ByZWZpeCA9ICJ0YWdfXyIKK2RlZiB0YWcoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAiIiJEZWNvcmF0b3IgdGhhdCBhZGRzIGF0dHJpYnV0ZXMgdG8gY2xhc3NlcyBvciBmdW5jdGlvbnMKKyAgICBmb3IgdXNlIHdpdGggdGhlIEF0dHJpYnV0ZSAoLWEpIHBsdWdpbi4KKyAgICAiIiIKKyAgICBkZWYgd3JhcF9vYihvYik6CisgICAgICAgIGZvciBuYW1lIGluIGFyZ3M6CisgICAgICAgICAgICBzZXRhdHRyKG9iLCBfX3RhZ19wcmVmaXggKyBuYW1lLCBUcnVlKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgdmFsdWUpCisgICAgICAgIHJldHVybiBvYgorICAgIHJldHVybiB3cmFwX29iCisKK2RlZiBnZXR0YWcob2JqLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAga2V5ID0gX190YWdfcHJlZml4ICsga2V5CisgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwga2V5LCBkZWZhdWx0KQorICAgIHRjX21ldGhvZCA9IGdldGF0dHIob2JqLCBvYmouX3Rlc3RNZXRob2ROYW1lKQorICAgIHJldCA9IGdldGF0dHIodGNfbWV0aG9kLCBrZXksIGdldGF0dHIob2JqLCBrZXksIGRlZmF1bHQpKQorICAgIHJldHVybiByZXQKKworZGVmIGdldEFsbFRhZ3Mob2JqKToKKyAgICBkZWYgX19nZXR0YWdzKG8pOgorICAgICAgICByID0ge2tbbGVuKF9fdGFnX3ByZWZpeCk6XTpnZXRhdHRyKG8saykgZm9yIGsgaW4gZGlyKG8pIGlmIGsuc3RhcnRzd2l0aChfX3RhZ19wcmVmaXgpfQorICAgICAgICByZXR1cm4gcgorICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICByZXR1cm4gX19nZXR0YWdzKG9iaikKKyAgICB0Y19tZXRob2QgPSBnZXRhdHRyKG9iaiwgb2JqLl90ZXN0TWV0aG9kTmFtZSkKKyAgICByZXQgPSBfX2dldHRhZ3Mob2JqKQorICAgIHJldC51cGRhdGUoX19nZXR0YWdzKHRjX21ldGhvZCkpCisgICAgcmV0dXJuIHJldApkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTg3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKQEAgLTAsMCArMSw4NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGl0ZXJ0b29scworZnJvbSBjb21tYW5kcyBpbXBvcnQgcnVuQ21kCisKK2RlZiBnZXRfaG9zdF9kdW1wZXIoZCk6CisgICAgY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkKKyAgICBwYXJlbnRfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisgICAgcmV0dXJuIEhvc3REdW1wZXIoY21kcywgcGFyZW50X2RpcikKKworCitjbGFzcyBCYXNlRHVtcGVyKG9iamVjdCk6CisgICAgIiIiIEJhc2UgY2xhc3MgdG8gZHVtcCBjb21tYW5kcyBmcm9tIGhvc3QvdGFyZ2V0ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIpOgorICAgICAgICBzZWxmLmNtZHMgPSBbXQorICAgICAgICBzZWxmLnBhcmVudF9kaXIgPSBwYXJlbnRfZGlyCisgICAgICAgIGlmIG5vdCBjbWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBjbWQgaW4gY21kcy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGNtZCA9IGNtZC5sc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGNtZCBvciBjbWRbMF0gPT0gJyMnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmNtZHMuYXBwZW5kKGNtZCkKKworICAgIGRlZiBjcmVhdGVfZGlyKHNlbGYsIGRpcl9zdWZmaXgpOgorICAgICAgICBkdW1wX3N1YmRpciA9ICgiJXNfJXMiICUgKAorICAgICAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJyksCisgICAgICAgICAgICAgICAgZGlyX3N1ZmZpeCkpCisgICAgICAgIGR1bXBfZGlyID0gb3MucGF0aC5qb2luKHNlbGYucGFyZW50X2RpciwgZHVtcF9zdWJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGR1bXBfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgorICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKworICAgIGRlZiBfd3JpdGVfZHVtcChzZWxmLCBjb21tYW5kLCBvdXRwdXQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIEhvc3REdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gImhvc3QiCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBUYXJnZXREdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gInRhcmdldCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICJ1bmtub3duIgorICAgICAgICBmb3IgaSBpbiBpdGVydG9vbHMuY291bnQoKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gIiVzXyUwMmRfJXMiICUgKHByZWZpeCwgaSwgY29tbWFuZCkKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZHVtcF9kaXIsIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICd3JykgYXMgZHVtcF9maWxlOgorICAgICAgICAgICAgZHVtcF9maWxlLndyaXRlKG91dHB1dCkKKworCitjbGFzcyBIb3N0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0aGUgaG9zdCBydW5uaW5nIHRoZSB0ZXN0cyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzLCBwYXJlbnRfZGlyKToKKyAgICAgICAgc3VwZXIoSG9zdER1bXBlciwgc2VsZikuX19pbml0X18oY21kcywgcGFyZW50X2RpcikKKworICAgIGRlZiBkdW1wX2hvc3Qoc2VsZiwgZHVtcF9kaXI9IiIpOgorICAgICAgICBpZiBkdW1wX2RpcjoKKyAgICAgICAgICAgIHNlbGYuZHVtcF9kaXIgPSBkdW1wX2RpcgorICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIHJlc3VsdC5vdXRwdXQpCisKKworY2xhc3MgVGFyZ2V0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0YXJnZXQsIGl0IG9ubHkgd29ya3Mgd2l0aCBRZW11UnVubmVyICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIsIHFlbXVydW5uZXIpOgorICAgICAgICBzdXBlcihUYXJnZXREdW1wZXIsIHNlbGYpLl9faW5pdF9fKGNtZHMsIHBhcmVudF9kaXIpCisgICAgICAgIHNlbGYucnVubmVyID0gcWVtdXJ1bm5lcgorCisgICAgZGVmIGR1bXBfdGFyZ2V0KHNlbGYsIGR1bXBfZGlyPSIiKToKKyAgICAgICAgaWYgZHVtcF9kaXI6CisgICAgICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmNtZHM6CisgICAgICAgICAgICAjIFdlIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0ZXN0aW5nIGlmIHNlcmlhbCBjb21tYW5kcyBmYWlsCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVubmVyLnJ1bl9zZXJpYWwoY21kKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIG91dHB1dCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCgiVHJpZWQgdG8gZHVtcCBpbmZvIGZyb20gdGFyZ2V0IGJ1dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2VyaWFsIGNvbnNvbGUgZmFpbGVkIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9mdG9vbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlYmUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5CkBAIC0wLDAgKzEsMjcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2RlZiB3cml0ZV9maWxlKHBhdGgsIGRhdGEpOgorICAgIHdkYXRhID0gZGF0YS5yc3RyaXAoKSArICJcbiIKKyAgICB3aXRoIG9wZW4ocGF0aCwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgYXBwZW5kX2ZpbGUocGF0aCwgZGF0YSk6CisgICAgd2RhdGEgPSBkYXRhLnJzdHJpcCgpICsgIlxuIgorICAgIHdpdGggb3BlbihwYXRoLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgcmVhZF9maWxlKHBhdGgpOgorICAgIGRhdGEgPSBOb25lCisgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZW1vdmVfZnJvbV9maWxlKHBhdGgsIGRhdGEpOgorICAgIGxpbmVzID0gcmVhZF9maWxlKHBhdGgpLnNwbGl0bGluZXMoKQorICAgIHJtZGF0YSA9IGRhdGEuc3RyaXAoKS5zcGxpdGxpbmVzKCkKKyAgICBmb3IgbCBpbiBybWRhdGE6CisgICAgICAgIGZvciBjIGluIHJhbmdlKDAsIGxpbmVzLmNvdW50KGwpKToKKyAgICAgICAgICAgIGkgPSBsaW5lcy5pbmRleChsKQorICAgICAgICAgICAgZGVsKGxpbmVzW2ldKQorICAgIHdyaXRlX2ZpbGUocGF0aCwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjUxOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKKworY2xhc3MgSFRUUFNlcnZlcihTaW1wbGVIVFRQU2VydmVyLkJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorCisgICAgZGVmIHNlcnZlcl9zdGFydChzZWxmLCByb290X2Rpcik6CisgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19ERkwpCisgICAgICAgIG9zLmNoZGlyKHJvb3RfZGlyKQorICAgICAgICBzZWxmLnNlcnZlX2ZvcmV2ZXIoKQorCitjbGFzcyBIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdF9zdHIsICphcmdzKToKKyAgICAgICAgcGFzcworCitjbGFzcyBIVFRQU2VydmljZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyLCBob3N0PScnKToKKyAgICAgICAgc2VsZi5yb290X2RpciA9IHJvb3RfZGlyCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gMAorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IEhUVFBTZXJ2ZXIoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwgSFRUUFJlcXVlc3RIYW5kbGVyKQorICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0CisgICAgICAgIHNlbGYucHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLnNlcnZlci5zZXJ2ZXJfc3RhcnQsIGFyZ3M9W3NlbGYucm9vdF9kaXJdKQorICAgICAgICBzZWxmLnByb2Nlc3Muc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLnByb2Nlc3Muam9pbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjUwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQpAQCAtMCwwICsxLDEyNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZnRvb2xzCisKKworIyBBIHBhcnNlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHdlYXRoZXIgYSBsaW5lIGlzIGEgdGVzdCByZXN1bHQgb3IgYSBzZWN0aW9uIHN0YXRlbWVudC4KK2NsYXNzIExwYXJzZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0XzBfcGFzc19yZWdleCwgdGVzdF8wX2ZhaWxfcmVnZXgsIHNlY3Rpb25fMF9iZWdpbl9yZWdleD1Ob25lLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcmd1bWVudHMgZGljdGlvbmFyeQorICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBrd2FyZ3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IHt9CisKKyAgICAgICAgIyBBZGQgdGhlIGRlZmF1bHQgYXJncyB0byB0aGUgZGljdGlvbmFyeQorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9wYXNzX3JlZ2V4J10gPSB0ZXN0XzBfcGFzc19yZWdleAorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9mYWlsX3JlZ2V4J10gPSB0ZXN0XzBfZmFpbF9yZWdleAorICAgICAgICBpZiBzZWN0aW9uXzBfYmVnaW5fcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9iZWdpbl9yZWdleCddID0gc2VjdGlvbl8wX2JlZ2luX3JlZ2V4CisgICAgICAgIGlmIHNlY3Rpb25fMF9lbmRfcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9lbmRfcmVnZXgnXSA9IHNlY3Rpb25fMF9lbmRfcmVnZXgKKworICAgICAgICBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzID0gWydwYXNzJywgJ2ZhaWwnLCAnZXJyb3InXQorICAgICAgICBzZWxmLnNlY3Rpb25fcG9zc2libGVfc3RhdHVzID0gWydiZWdpbicsICdlbmQnXQorCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorCisKKyAgICAjIEluaXRpYWxpemUgdGhlIHBhcnNlciB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAgICBkZWYgaW5pdChzZWxmKToKKworICAgICAgICAjIGV4dHJhIGFyZ3VtZW50cyBjYW4gYmUgYWRkZWQgYnkgdGhlIHVzZXIgdG8gZGVmaW5lIG5ldyB0ZXN0IGFuZCBzZWN0aW9uIGNhdGVnb3JpZXMuIFRoZXkgbXVzdCBmb2xsb3cgYSBwcmUtZGVmaW5lZCBwYXR0ZXJuOiA8dHlwZT5fPGNhdGVnb3J5X25hbWU+XzxzdGF0dXM+X3JlZ2V4CisgICAgICAgIHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuID0gIl50ZXN0XyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi50ZXN0X3Bvc3NpYmxlX3N0YXR1cykpCisgICAgICAgIHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuID0gIl5zZWN0aW9uXyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi5zZWN0aW9uX3Bvc3NpYmxlX3N0YXR1cykpCisKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSB0ZXN0IGFuZCBzZWN0aW9uIHJlZ2V4IGRpY3Rpb25hcmllcworICAgICAgICBzZWxmLnRlc3RfcmVnZXggPSB7fQorICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXggPXt9CisKKyAgICAgICAgZm9yIGFyZywgdmFsdWUgaW4gc2VsZi5hcmdzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaGUgdmFsdWUgb2YgcHJvdmlkZWQgYXJndW1lbnQgJXMgaXMgJXMuIFNob3VsZCBoYXZlIGEgdmFsaWQgdmFsdWUuJyAlIChrZXksIHZhbHVlKSkKKyAgICAgICAgICAgIGlzX3Rlc3QgPSAgcmUuc2VhcmNoKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpc19zZWN0aW9uID0gcmUuc2VhcmNoKHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpZiBpc190ZXN0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc190ZXN0Lmdyb3VwKDEpIGluIHNlbGYudGVzdF9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZ2V4W2lzX3Rlc3QuZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnZXhbaXNfdGVzdC5ncm91cCgxKV1baXNfdGVzdC5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBpc19zZWN0aW9uOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19zZWN0aW9uLmdyb3VwKDEpIGluIHNlbGYuc2VjdGlvbl9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9uX3JlZ2V4W2lzX3NlY3Rpb24uZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXhbaXNfc2VjdGlvbi5ncm91cCgxKV1baXNfc2VjdGlvbi5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRPRE86IE1ha2UgdGhlc2UgY2FsbCBhIHRyYWNlYmFjayBpbnN0ZWFkIG9mIGEgc2ltcGxlIGV4Y2VwdGlvbi4uCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgbmFtZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSB2YWxpZCB0eXBlLiBQbGVhc2UgZ2l2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczpcbmZvciB0ZXN0czogJXNcbmZvciBzZWN0aW9uczogJXMiICUgKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBzZWxmLnNlY3Rpb25fYXJndW1lbnRfcGF0dGVybikpCisKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgICMgUGFyc2UgYSBsaW5lIGFuZCByZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHRoZSB0eXBlIG9mIHJlc3VsdCAodGVzdC9zZWN0aW9uKSBhbmQgaXRzIGNhdGVnb3J5LCBzdGF0dXMgYW5kIG5hbWUKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXJzZXIgaXMgbm90IGluaXRpYWxpemVkLi4iKQorCisgICAgICAgIGZvciB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1c19saXN0IGluIHNlbGYudGVzdF9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHRlc3Rfc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gdGVzdF9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3QnLCB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1cywgdGVzdF9uYW1lLmdyb3VwKDEpXQorCisgICAgICAgIGZvciBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1c19saXN0IGluIHNlbGYuc2VjdGlvbl9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHNlY3Rpb25fc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gc2VjdGlvbl9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25fbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3NlY3Rpb24nLCBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1cywgc2VjdGlvbl9uYW1lLmdyb3VwKDEpXQorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdF9kaWN0ID0ge30KKworICAgIGRlZiBzdG9yZShzZWxmLCBzZWN0aW9uLCB0ZXN0LCBzdGF0dXMpOgorICAgICAgICBpZiBub3Qgc2VjdGlvbiBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXSA9IFtdCisKKyAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXS5hcHBlbmQoKHRlc3QsIHN0YXR1cykpCisKKyAgICAjIHNvcnQgdGVzdHMgYnkgdGhlIHRlc3QgbmFtZSh0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUpLCBmb3IgZWFjaCBzZWN0aW9uLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4gdXNpbmcgZ2l0IHRvIGRpZmYgZm9yIGNoYW5nZXMgYnkgbWFraW5nIHN1cmUgdGhleSBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgIGRlZiBzb3J0X3Rlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc29ydGVkX3Jlc3VsdHMgPSBzb3J0ZWQoc2VsZi5yZXN1bHRfZGljdFtwYWNrYWdlXSwga2V5PWxhbWJkYSB0dXA6IHR1cFswXSkKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2RpY3RbcGFja2FnZV0gPSBzb3J0ZWRfcmVzdWx0cworCisgICAgIyBMb2cgdGhlIHJlc3VsdHMgYXMgZmlsZXMuIFRoZSBmaWxlIG5hbWUgaXMgdGhlIHNlY3Rpb24gbmFtZSBhbmQgdGhlIGNvbnRlbnRzIGFyZSB0aGUgdGVzdHMgaW4gdGhhdCBzZWN0aW9uLgorICAgIGRlZiBsb2dfYXNfZmlsZXMoc2VsZiwgdGFyZ2V0X2RpciwgdGVzdF9zdGF0dXMpOgorICAgICAgICBzdGF0dXNfcmVnZXggPSByZS5jb21waWxlKCd8Jy5qb2luKG1hcChzdHIsIHRlc3Rfc3RhdHVzKSkpCisgICAgICAgIGlmIG5vdCB0eXBlKHRlc3Rfc3RhdHVzKSA9PSB0eXBlKFtdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidGVzdF9zdGF0dXMgc2hvdWxkIGJlIGEgbGlzdC4gR290ICIgKyBzdHIodGVzdF9zdGF0dXMpICsgIiBpbnN0ZWFkLiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZGlyKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJXMiICUgdGFyZ2V0X2RpcikKKworICAgICAgICBmb3Igc2VjdGlvbiwgdGVzdF9yZXN1bHRzIGluIHNlbGYucmVzdWx0X2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgICAgICBmb3IgeCBpbiB0ZXN0X3N0YXR1czoKKyAgICAgICAgICAgICAgICBwcmVmaXggKz14KycuJworICAgICAgICAgICAgaWYgKHNlY3Rpb24gIT0gJycpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzZWN0aW9uCisgICAgICAgICAgICBzZWN0aW9uX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgcHJlZml4KQorICAgICAgICAgICAgIyBwdXJnZSB0aGUgZmlsZSBjb250ZW50cyBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIG9wZW4oc2VjdGlvbl9maWxlLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciB0ZXN0X3Jlc3VsdCBpbiB0ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgKHRlc3RfbmFtZSwgc3RhdHVzKSA9IHRlc3RfcmVzdWx0CisgICAgICAgICAgICAgICAgIyB3ZSBsb2cgb25seSB0aGUgdGVzdHMgd2l0aCBzdGF0dXMgaW4gdGhlIHRlc3Rfc3RhdHVzIGxpc3QKKyAgICAgICAgICAgICAgICBtYXRjaF9zdGF0dXMgPSBzdGF0dXNfcmVnZXguc2VhcmNoKHN0YXR1cykKKyAgICAgICAgICAgICAgICBpZiBtYXRjaF9zdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWN0aW9uX2ZpbGUsIHN0YXR1cyArICI6ICIgKyB0ZXN0X25hbWUpCisKKyAgICAjIE5vdCB5ZXQgaW1wbGVtZW50ZWQhCisgICAgZGVmIGxvZ190b19sYXZhKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYzlkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQpAQCAtMCwwICsxLDUxOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyBmb3Igc3RhcnRpbmcgcWVtdSBpbWFnZXMgdXNpbmcgcnVucWVtdS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgZXJybm8KK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBIb3N0RHVtcGVyCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5RZW11UnVubmVyIikKKworY2xhc3MgUWVtdVJ1bm5lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwgYm9vdHRpbWUsIGR1bXBfZGlyLCBkdW1wX2hvc3RfY21kcyk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisgICAgICAgIHNlbGYubG9nZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aHJlYWQgPSBOb25lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIgPSBIb3N0RHVtcGVyKGR1bXBfaG9zdF9jbWRzLCBkdW1wX2RpcikKKworICAgIGRlZiBjcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc29jay5iaW5kKCgiMTI3LjAuMC4xIiwwKSkKKyAgICAgICAgICAgIHNvY2subGlzdGVuKDIpCisgICAgICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3JlYXRlZCBsaXN0ZW5pbmcgc29ja2V0IGZvciBxZW11IHNlcmlhbCBjb25zb2xlIG9uOiAxMjcuMC4wLjE6JXMiICUgcG9ydCkKKyAgICAgICAgICAgIHJldHVybiAoc29jaywgcG9ydCkKKworICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQorCisgICAgZGVmIGdldE91dHB1dChzZWxmLCBvKToKKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGZsID0gZmNudGwuZmNudGwobywgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwobywgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICByZXR1cm4gb3MucmVhZChvLmZpbGVubygpLCAxMDAwMDAwKQorCisKKyAgICBkZWYgaGFuZGxlU0lHQ0hMRChzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaWYgc2VsZi5ydW5xZW11IGFuZCBzZWxmLnJ1bnFlbXUucG9sbCgpOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KHNlbGYucnVucWVtdS5zdGRvdXQpKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBpZiBzZWxmLmRpc3BsYXk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJESVNQTEFZIl0gPSBzZWxmLmRpc3BsYXkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVG8gc3RhcnQgcWVtdSBJIG5lZWQgYSBYIGRlc2t0b3AsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MSkiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgVE1QRElSIHBhdGggJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIk9FX1RNUERJUiJdID0gc2VsZi50bXBkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgREVQTE9ZX0RJUl9JTUFHRSBwYXRoICVzIiAlIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiREVQTE9ZX0RJUl9JTUFHRSJdID0gc2VsZi5kZXBsb3lfZGlyX2ltYWdlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGhyZWFkc29jaywgdGhyZWFkcG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQsIHNlbGYuc2VydmVycG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIgJSBtc2dbMV0pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicyBpbnRlcmFjdAorICAgICAgICAjIGJhZGx5IHdpdGggc2NyZWVuc2F2ZXJzLgorICAgICAgICBvcy5lbnZpcm9uWyJRRU1VX0RPTlRfR1JBQiJdID0gIjEiCisgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICdib290cGFyYW1zPSJjb25zb2xlPXR0eTEgY29uc29sZT10dHlTMCwxMTUyMDBuOCIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnt9IicuZm9ybWF0KHRocmVhZHBvcnQpCisgICAgICAgIGlmIHFlbXVwYXJhbXM6CisgICAgICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSBzZWxmLnFlbXVwYXJhbXNbOi0xXSArICIgIiArIHFlbXVwYXJhbXMgKyAiICIgKyAnXCInCisKKyAgICAgICAgc2VsZi5vcmlnY2hsZGhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdDSExEKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLmhhbmRsZVNJR0NITEQpCisKKyAgICAgICAgbGF1bmNoX2NtZCA9ICdydW5xZW11IHRjcHNlcmlhbD0lcyAlcyAlcyAlcycgJSAoc2VsZi5zZXJ2ZXJwb3J0LCBzZWxmLm1hY2hpbmUsIHNlbGYucm9vdGZzLCBzZWxmLnFlbXVwYXJhbXMpCisgICAgICAgICMgRklYTUU6IFdlIHBhc3MgaW4gc3RkaW49c3VicHJvY2Vzcy5QSVBFIGhlcmUgdG8gd29yayBhcm91bmQgc3R0eQorICAgICAgICAjIGJsb2NraW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnFlbXUgc2NyaXB0IHdoZW4gdXNpbmcgdGhpcyB3aXRoaW4KKyAgICAgICAgIyBvZS1zZWxmdGVzdCAodGhpcyBtYWtlcyBzdHR5IGVycm9yIG91dCBpbW1lZGlhdGVseSkuIFRoZXJlIG91Z2h0CisgICAgICAgICMgdG8gYmUgYSBwcm9wZXIgZml4IGJ1dCB0aGlzIHdpbGwgc3VmZmljZSBmb3Igbm93LgorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBwcmVleGVjX2ZuPW9zLnNldHBncnApCisgICAgICAgIG91dHB1dCA9IHNlbGYucnVucWVtdS5zdGRvdXQKKworICAgICAgICAjCisgICAgICAgICMgV2UgbmVlZCB0aGUgcHJlZXhlY19mbiBhYm92ZSBzbyB0aGF0IGFsbCBydW5xZW11IHByb2Nlc3NlcyBjYW4gZWFzaWx5IGJlIGtpbGxlZCAKKyAgICAgICAgIyAoYnkga2lsbGluZyB0aGVpciBwcm9jZXNzIGdyb3VwKS4gVGhpcyBwcmVzZW50cyBhIHByb2JsZW0gaWYgdGhpcyBjb250cm9sbGluZworICAgICAgICAjIHByb2Nlc3MgaXRzZWxmIGlzIGtpbGxlZCBob3dldmVyIHNpbmNlIHRob3NlIHByb2Nlc3NlcyBkb24ndCBub3RpY2UgdGhlIGRlYXRoIAorICAgICAgICAjIG9mIHRoZSBwYXJlbnQgYW5kIG1lcnJpbHkgY29udGludWUgb24uCisgICAgICAgICMKKyAgICAgICAgIyBSYXRoZXIgdGhhbiBoYWNrIHJ1bnFlbXUgdG8gZGVhbCB3aXRoIHRoaXMsIHdlIGFkZCBzb21ldGhpbmcgaGVyZSBpbnN0ZWFkLiAKKyAgICAgICAgIyBCYXNpY2FsbHkgd2UgZm9yayBvZmYgYW5vdGhlciBwcm9jZXNzIHdoaWNoIGhvbGRzIGFuIG9wZW4gcGlwZSB0byB0aGUgcGFyZW50CisgICAgICAgICMgYW5kIGFsc28gaXMgc2V0cGdycC4gSWYvd2hlbiB0aGUgcGlwZSBzZWVzIEVPRiBmcm9tIHRoZSBwYXJlbnQgZGllaW5nLCBpdCBraWxscworICAgICAgICAjIHRoZSBwcm9jZXNzIGdyb3VwLiBUaGlzIGlzIGxpa2UgcGN0cmwncyBQREVBVEhTSUcgYnV0IGZvciBhIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyByYXRoZXIgdGhhbiBhIHNpbmdsZSBwcm9jZXNzLgorICAgICAgICAjCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5tb25pdG9ycGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYubW9uaXRvcnBpZDoKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBzZWxmLm1vbml0b3JwaXBlID0gb3MuZmRvcGVuKHcsICJ3IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcworICAgICAgICAgICAgb3Muc2V0cGdycCgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgciA9IG9zLmZkb3BlbihyKQorICAgICAgICAgICAgeCA9IHIucmVhZCgpCisgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJydW5xZW11IHN0YXJ0ZWQsIHBpZCBpcyAlcyIgJSBzZWxmLnJ1bnFlbXUucGlkKQorICAgICAgICBsb2dnZXIuaW5mbygid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnBvbGwoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICAgICAgIyBObyBwb2ludCB3YWl0aW5nIGFueSBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChvdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBzdGFydGVkIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSBzZWxmLnFlbXVwaWQpCisgICAgICAgICAgICBjbWRsaW5lID0gJycKKyAgICAgICAgICAgIHdpdGggb3BlbignL3Byb2MvJXMvY21kbGluZScgJSBzZWxmLnFlbXVwaWQpIGFzIHA6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IHAucmVhZCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXBzID0gcmUuZmluZGFsbCgiKCg/OlswLTldezEsM31cLil7M31bMC05XXsxLDN9KSIsIGNtZGxpbmUuc3BsaXQoImlwPSIpWzFdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpcHMgb3IgbGVuKGlwcykgIT0gMzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgPSBpcHNbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBpcHNbMV0KKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZG4ndCBnZXQgaXAgZnJvbSBxZW11IHByb2Nlc3MgYXJndW1lbnRzISBIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCBvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJxZW11IGNtZGxpbmUgdXNlZDpcbnt9Ii5mb3JtYXQoY21kbGluZSkpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgICAgICBzZWxmLnRocmVhZCA9IExvZ2dpbmdUaHJlYWQoc2VsZi5sb2csIHRocmVhZHNvY2ssIGxvZ2dlcikKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRocmVhZC5jb25uZWN0aW9uX2VzdGFibGlzaGVkLndhaXQoc2VsZi5ib290dGltZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJEaWRuJ3QgcmVjZWl2ZSBhIGNvbnNvbGUgY29ubmVjdGlvbiBmcm9tIHFlbXUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlcmUgaXMgdGhlIHFlbXUgY29tbWFuZCBsaW5lIHVzZWQ6XG4lc1xuYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXYWl0aW5nIGF0IG1vc3QgJWQgc2Vjb25kcyBmb3IgbG9naW4gYmFubmVyIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLmJvb3R0aW1lCisgICAgICAgICAgICBzb2NrbGlzdCA9IFtzZWxmLnNlcnZlcl9zb2NrZXRdCisgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBGYWxzZQorICAgICAgICAgICAgc3RvcHJlYWQgPSBGYWxzZQorICAgICAgICAgICAgcWVtdXNvY2sgPSBOb25lCisgICAgICAgICAgICBib290bG9nID0gJycKKyAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZW5kdGltZSBhbmQgbm90IHN0b3ByZWFkOgorICAgICAgICAgICAgICAgIHNyZWFkLCBzd3JpdGUsIHNlcnJvciA9IHNlbGVjdC5zZWxlY3Qoc29ja2xpc3QsIFtdLCBbXSwgNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBzZWxmLnNlcnZlcl9zb2NrZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBxZW11c29jaywgYWRkciA9IHNlbGYuc2VydmVyX3NvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcWVtdXNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LmFwcGVuZChxZW11c29jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzZWxmLnNlcnZlcl9zb2NrZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiAlIGFkZHIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2cgKz0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiLiogbG9naW46IiwgYm9vdGxvZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IHFlbXVzb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZWFjaGVkIGxvZ2luIGJhbm5lciIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBub3QgcmVhY2hlZGxvZ2luOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgZGlkbid0IHJlYWNoZWQgbG9naW4gYm9vdCBpbiAlZCBzZWNvbmRzIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4oYm9vdGxvZy5zcGxpdGxpbmVzKClbLTI1Ol0pCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxhc3QgMjUgbGluZXMgb2YgdGV4dDpcbiVzIiAlIGxpbmVzKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDaGVjayBmdWxsIGJvb3QgbG9nOiAlcyIgJSBzZWxmLmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAjIElmIHdlIGFyZSBub3QgYWJsZSB0byBsb2dpbiB0aGUgdGVzdHMgY2FuIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVuX3NlcmlhbCgicm9vdFxuIiwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2dnZWQgYXMgcm9vdCBpbiBzZXJpYWwgY29uc29sZSIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkbid0IGxvZ2luIGludG8gc2VyaWFsIGNvbnNvbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhcyByb290IHVzaW5nIGJsYW5rIHBhc3N3b3JkIikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VyaWFsIGNvbnNvbGUgZmFpbGVkIHdoaWxlIHRyeWluZyB0byBsb2dpbiIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJRZW11IHBpZCBkaWRuJ3QgYXBwZWFyZWQgaW4gJXMgc2Vjb25kcyIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgIGlmIHNlbGYucnVucWVtdToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYub3JpZ2NobGRoYW5kbGVyKQorICAgICAgICAgICAgb3Mua2lsbChzZWxmLm1vbml0b3JwaWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byBydW5xZW11IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVNSQ0g6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLnJ1bnFlbXV0aW1lCisgICAgICAgICAgICB3aGlsZSBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZW5kdGltZToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHS0lMTCB0byBydW5xZW11IikKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcnZlcl9zb2NrZXQnKSBhbmQgc2VsZi5zZXJ2ZXJfc29ja2V0OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5xZW11cGlkID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLm9yaWdjaGxkaGFuZGxlcikKKworICAgIGRlZiBzdG9wX3RocmVhZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aHJlYWQgYW5kIHNlbGYudGhyZWFkLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLnRocmVhZC5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBsb2dnZXIuaW5mbygiUmVzdGFydGluZyBxZW11IHByb2Nlc3MiKQorICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBpZiBzZWxmLnN0YXJ0KHFlbXVwYXJhbXMpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bnFlbXU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcWVtdV9jaGlsZCA9IHNlbGYuZmluZF9jaGlsZChzdHIoc2VsZi5ydW5xZW11LnBpZCkpCisgICAgICAgIGlmIHFlbXVfY2hpbGQ6CisgICAgICAgICAgICBzZWxmLnFlbXVwaWQgPSBxZW11X2NoaWxkWzBdCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2MvIiArIHN0cihzZWxmLnFlbXVwaWQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB0Y3AiIGluIGNvbW1hbmRzW3BdOgorICAgICAgICAgICAgICAgIHJldHVybiBbaW50KHApLGNvbW1hbmRzW3BdXQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCwgcmF3PUZhbHNlKToKKyAgICAgICAgIyBXZSBhc3N1bWUgdGFyZ2V0IHN5c3RlbSBoYXZlIGVjaG8gdG8gZ2V0IGNvbW1hbmQgc3RhdHVzCisgICAgICAgIGlmIG5vdCByYXc6CisgICAgICAgICAgICBjb21tYW5kID0gIiVzOyBlY2hvICQ/XG4iICUgY29tbWFuZAorICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuc2VuZGFsbChjb21tYW5kKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgIHNyZWFkLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2ZXJfc29ja2V0XSxbXSxbXSw1KQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgYW5zd2VyID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAjIFNlYXJjaCB0aGUgcHJvbXB0IHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJbYS16QS1aMC05XStAW2EtekEtWjAtOVwtXSs6fiMiLCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gc2VyaWFsIGNvbnNvbGUgc29ja2V0IikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGlmIHJhdzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGZpcnN0IGxpbmUgKGNvbW1hbmQgbGluZSkgYW5kIGxhc3QgbGluZSAocHJvbXB0KQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEuZmluZCgnJD9cclxuJykrNDpkYXRhLnJmaW5kKCdcclxuJyldCisgICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhLnJmaW5kKCdcclxuJykKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGFbaW5kZXgrMjpdCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzppbmRleF0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX2NtZCA9PSAiMCIpOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgIHJldHVybiAoc3RhdHVzLCBzdHIoZGF0YSkpCisKKworICAgIGRlZiBfZHVtcF9ob3N0KHNlbGYpOgorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoInFlbXUiKQorICAgICAgICBsb2dnZXIud2FybigiUWVtdSBlbmRlZCB1bmV4cGVjdGVkbHksIGR1bXAgZGF0YSBmcm9tIGhvc3QiCisgICAgICAgICAgICAgICAgIiBpcyBpbiAlcyIgJSBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisKKyMgVGhpcyBjbGFzcyBpcyBmb3IgcmVhZGluZyBkYXRhIGZyb20gYSBzb2NrZXQgYW5kIHBhc3NpbmcgaXQgdG8gbG9nZnVuYworIyB0byBiZSBwcm9jZXNzZWQuIEl0J3MgY29tcGxldGVseSBldmVudCBkcml2ZW4gYW5kIGhhcyBhIHN0cmFpZ2h0Zm9yd2FyZAorIyBldmVudCBsb29wLiBUaGUgbWVjaGFuaXNtIGZvciBzdG9wcGluZyB0aGUgdGhyZWFkIGlzIGEgc2ltcGxlIHBpcGUgd2hpY2gKKyMgd2lsbCB3YWtlIHVwIHRoZSBwb2xsIGFuZCBhbGxvdyBmb3IgdGVhcmluZyBldmVyeXRoaW5nIGRvd24uCitjbGFzcyBMb2dnaW5nVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dmdW5jLCBzb2NrLCBsb2dnZXIpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNlcnZlcnNvY2sgPSBzb2NrCisgICAgICAgIHNlbGYubG9nZnVuYyA9IGxvZ2Z1bmMKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5yZWFkc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVycm9yZXZlbnRzID0gc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMTlZBTAorICAgICAgICBzZWxmLnJlYWRldmVudHMgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYsIHRhcmdldD1zZWxmLnRocmVhZHRhcmdldCkKKworICAgIGRlZiB0aHJlYWR0YXJnZXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRsb29wKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudGVhcmRvd24oKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBzZWxmLnJlYWRwaXBlLCBzZWxmLndyaXRlcGlwZSA9IG9zLnBpcGUoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnJ1bihzZWxmKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3BwaW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZXBpcGUsICJzdG9wIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVGVhcmluZyBkb3duIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgc2VsZi5jbG9zZV9zb2NrZXQoc2VsZi5zZXJ2ZXJzb2NrKQorCisgICAgICAgIGlmIHNlbGYucmVhZHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNsb3NlX3NvY2tldChzZWxmLnJlYWRzb2NrKQorCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYucmVhZHBpcGUpCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYud3JpdGVwaXBlKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIGV2ZW50bG9vcChzZWxmKToKKyAgICAgICAgcG9sbCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgZXZlbnRtYXNrID0gc2VsZi5lcnJvcmV2ZW50cyB8IHNlbGYucmVhZGV2ZW50cworICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYuc2VydmVyc29jay5maWxlbm8oKSkKKyAgICAgICAgcG9sbC5yZWdpc3RlcihzZWxmLnJlYWRwaXBlLCBldmVudG1hc2spCisKKyAgICAgICAgYnJlYWtvdXQgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIHRocmVhZCBldmVudCBsb29wIikKKyAgICAgICAgd2hpbGUgbm90IGJyZWFrb3V0OgorICAgICAgICAgICAgZXZlbnRzID0gcG9sbC5wb2xsKCkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBvY2N1cnJlZCwgYmFpbCBvdXQKKyAgICAgICAgICAgICAgICBpZiBldmVudFsxXSAmIHNlbGYuZXJyb3JldmVudHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihzZWxmLnN0cmluZ2lmeV9ldmVudChldmVudFsxXSkpCisKKyAgICAgICAgICAgICAgICAjIEV2ZW50IHRvIHN0b3AgdGhlIHRocmVhZAorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVhZHBpcGUgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3AgZXZlbnQgcmVjZWl2ZWQiKQorICAgICAgICAgICAgICAgICAgICBicmVha291dCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgQSBjb25uZWN0aW9uIHJlcXVlc3Qgd2FzIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNvbm5lY3Rpb24gcmVxdWVzdCByZWNlaXZlZCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHNvY2ssIF8gPSBzZWxmLnNlcnZlcnNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnVucmVnaXN0ZXIoc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYucmVhZHNvY2suZmlsZW5vKCkpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU2V0dGluZyBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGV2ZW50IikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2VzdGFibGlzaGVkLnNldCgpCisKKyAgICAgICAgICAgICAgICAjIEFjdHVhbCBkYXRhIHRvIGJlIGxvZ2dlZAorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5yZWFkc29jay5maWxlbm8oKSA9PSBldmVudFswXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2Z1bmMoZGF0YSkKKworICAgICMgU2luY2UgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcgbWFrZSBzdXJlIHRvIGhvbm9yIEVBR0FJTgorICAgICMgYW5kIEVXT1VMREJMT0NLLgorICAgIGRlZiByZWN2KHNlbGYsIGNvdW50KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZHNvY2sucmVjdihjb3VudCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUdBSU4gb3IgZS5lcnJubyA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gcmVhZCByZWFkeSBzb2NrZXQiKQorICAgICAgICBlbGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgIyBUaGlzIGFjdHVhbGx5IG1lYW5zIGFuIG9yZGVybHkgc2h1dGRvd24KKyAgICAgICAgICAgICMgaGFwcGVuZWQuIEJ1dCBmb3IgdGhpcyBjb2RlIGl0IGNvdW50cyBhcyBhbgorICAgICAgICAgICAgIyBlcnJvciBzaW5jZSB0aGUgY29ubmVjdGlvbiBzaG91bGRuJ3QgZ28gYXdheQorICAgICAgICAgICAgIyB1bnRpbCBxZW11IGV4aXRzLgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb25zb2xlIGNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzdHJpbmdpZnlfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICB2YWwgPSAnJworICAgICAgICBpZiBzZWxlY3QuUE9MTEVSUiA9PSBldmVudDoKKyAgICAgICAgICAgIHZhbCA9ICdQT0xMRVInCisgICAgICAgIGVsaWYgc2VsZWN0LlBPTExIVVAgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTEhVUCcKKyAgICAgICAgZWxpZiBzZWxlY3QuUE9MTE5WQUwgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTE5WQUwnCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBjbG9zZV9zb2NrZXQoc2VsZiwgc29jayk6CisgICAgICAgIHNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYsIGZkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXRpbnlydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5NTEwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXRpbnlydW5uZXIucHkKQEAgLTAsMCArMSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgZm9yIHN0YXJ0aW5nIHFlbXUgaW1hZ2VzIG9mIHBva3kgdGlueS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgYmIKK2Zyb20gcWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgorCitjbGFzcyBRZW11VGlueVJ1bm5lcihRZW11UnVubmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwga2VybmVsLCBib290dGltZSk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuc29ja2V0ZmlsZSA9ICJjb25zb2xlLnNvY2siCisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBrZXJuZWwKKworCisgICAgZGVmIGNyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHRyaWVzID0gMworICAgICAgICB3aGlsZSB0cmllcyA+IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jb25uZWN0KHNlbGYuc29ja2V0ZmlsZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGVkIGxpc3RlbmluZyBzb2NrZXQgZm9yIHFlbXUgc2VyaWFsIGNvbnNvbGUuIikKKyAgICAgICAgICAgICAgICB0cmllcyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQuIikKKyAgICAgICAgICAgICAgICB0cmllcyAtPSAxCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorCisgICAgICAgIGlmIHNlbGYuZGlzcGxheToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRJU1BMQVkiXSA9IHNlbGYuZGlzcGxheQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoIlRvIHN0YXJ0IHFlbXUgSSBuZWVkIGEgWCBkZXNrdG9wLCBwbGVhc2Ugc2V0IERJU1BMQVkgY29ycmVjdGx5IChlLmcuIERJU1BMQVk9OjEpIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgYmIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBiYi5lcnJvcigiSW52YWxpZCBUTVBESVIgcGF0aCAlcyIgJSBzZWxmLnRtcGRpcikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiT0VfVE1QRElSIl0gPSBzZWxmLnRtcGRpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgICAgIGJiLmVycm9yKCJJbnZhbGlkIERFUExPWV9ESVJfSU1BR0UgcGF0aCAlcyIgJSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRFUExPWV9ESVJfSU1BR0UiXSA9IHNlbGYuZGVwbG95X2Rpcl9pbWFnZQorCisgICAgICAgICMgU2V0IHRoaXMgZmxhZyBzbyB0aGF0IFFlbXUgZG9lc24ndCBkbyBhbnkgZ3JhYnMgYXMgU0RMIGdyYWJzIGludGVyYWN0CisgICAgICAgICMgYmFkbHkgd2l0aCBzY3JlZW5zYXZlcnMuCisgICAgICAgIG9zLmVudmlyb25bIlFFTVVfRE9OVF9HUkFCIl0gPSAiMSIKKyAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJy0tYXBwZW5kICJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwIiAtbm9ncmFwaGljIC1zZXJpYWwgdW5peDolcyxzZXJ2ZXIsbm93YWl0JyAlIHNlbGYuc29ja2V0ZmlsZQorCisgICAgICAgIGxhdW5jaF9jbWQgPSAncWVtdS1zeXN0ZW0taTM4NiAta2VybmVsICVzIC1pbml0cmQgJXMgJXMnICUgKHNlbGYua2VybmVsLCBzZWxmLnJvb3Rmcywgc2VsZi5xZW11cGFyYW1zKQorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsc2hlbGw9VHJ1ZSxzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCxwcmVleGVjX2ZuPW9zLnNldHBncnApCisKKyAgICAgICAgYmIubm90ZSgicnVucWVtdSBzdGFydGVkLCBwaWQgaXMgJXMiICUgc2VsZi5ydW5xZW11LnBpZCkKKyAgICAgICAgYmIubm90ZSgid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGJiLm5vdGUoInFlbXUgc3RhcnRlZCAtIHFlbXUgcHJvY2NlcyBwaWQgaXMgJXMiICUgc2VsZi5xZW11cGlkKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bnFlbXUuc3Rkb3V0CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgYmIubm90ZSgiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIG91dHB1dC5yZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LnNlbmRhbGwoY29tbWFuZCsnXG4nKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgICAgICBzcmVhZCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc2VydmVyX3NvY2tldF0sW10sW10sNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlciA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIHN0cihkYXRhKSkKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB1bml4IiBpbiBjb21tYW5kc1twXToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ludChwKSxjb21tYW5kc1twXV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNTA1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgUHJvdmlkZXMgYSBjbGFzcyBmb3Igc2V0dGluZyB1cCBzc2ggY29ubmVjdGlvbnMsCisjIHJ1bm5pbmcgY29tbWFuZHMgYW5kIGNvcHlpbmcgZmlsZXMgdG8vZnJvbSBhIHRhcmdldC4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGFuZCB0ZXN0cyBpbiBsaWIvb2VxYS9ydW50aW1lLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAorCisKK2NsYXNzIFNTSFByb2Nlc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKworICAgICAgICBzZWxmLmRlZmF1bHRvcHRzID0geworICAgICAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICJzdGRlcnIiOiBzdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICJzdGRpbiI6IE5vbmUsCisgICAgICAgICAgICAic2hlbGwiOiBGYWxzZSwKKyAgICAgICAgICAgICJidWZzaXplIjogLTEsCisgICAgICAgICAgICAicHJlZXhlY19mbiI6IG9zLnNldHNpZCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdG9wdHMpCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCisgICAgICAgIHNlbGYub3V0cHV0ID0gTm9uZQorICAgICAgICBzZWxmLnByb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBVbnNldCBESVNQTEFZIHdoaWNoIG1lYW5zIHdlIHdvbid0IHRyaWdnZXIgU1NIX0FTS1BBU1MKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgaWYgIkRJU1BMQVkiIGluIGVudjoKKyAgICAgICAgICAgIGRlbCBlbnZbJ0RJU1BMQVknXQorICAgICAgICBzZWxmLm9wdGlvbnNbJ2VudiddID0gZW52CisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIG1zZykKKworICAgIGRlZiBfcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgKipzZWxmLm9wdGlvbnMpCisgICAgICAgIGlmIHRpbWVvdXQ6CisgICAgICAgICAgICBlbmR0aW1lID0gc2VsZi5zdGFydHRpbWUgKyB0aW1lb3V0CisgICAgICAgICAgICBlb2YgPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBlbmR0aW1lIGFuZCBub3QgZW9mOgorICAgICAgICAgICAgICAgIGlmIHNlbGVjdC5zZWxlY3QoW3NlbGYucHJvY2Vzcy5zdGRvdXRdLCBbXSwgW10sIDUpWzBdICE9IFtdOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnByb2Nlc3Muc3Rkb3V0LmZpbGVubygpLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisKKworICAgICAgICAgICAgIyBwcm9jZXNzIGhhc24ndCByZXR1cm5lZCB5ZXQKKyAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbGFzdGxpbmUgPSAiXG5Qcm9jZXNzIGtpbGxlZCAtIG5vIG91dHB1dCBmb3IgJWQgc2Vjb25kcy4gVG90YWwgcnVubmluZyB0aW1lOiAlZCBzZWNvbmRzLiIgJSAodGltZW91dCwgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0dGltZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZyhsYXN0bGluZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGFzdGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBzZWxmLmxvZyhvdXRwdXQucnN0cmlwKCkpCisKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3Mud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0LnJzdHJpcCgpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuKGNvbW1hbmQsIHRpbWVvdXQsIGxvZ2ZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgTmVlZCB0byBndWFyZCBhZ2FpbnN0IGEgU3lzdGVtRXhpdCBvciBvdGhlciBleGNlcHRpb24gb2NjdXJpbmcgd2hpbHN0IHJ1bm5pbmcKKyAgICAgICAgICAgICMgYW5kIGVuc3VyZSB3ZSBkb24ndCBsZWF2ZSBhIHByb2Nlc3MgYmVoaW5kLgorICAgICAgICAgICAgaWYgc2VsZi5wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCitjbGFzcyBTU0hDb250cm9sKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlwLCBsb2dmaWxlPU5vbmUsIHRpbWVvdXQ9MzAwLCB1c2VyPSdyb290JywgcG9ydD1Ob25lKToKKyAgICAgICAgc2VsZi5pcCA9IGlwCisgICAgICAgIHNlbGYuZGVmYXVsdHRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuaWdub3JlX3N0YXR1cyA9IFRydWUKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYuc3NoX29wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgJy1vJywgJ1VzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwnLAorICAgICAgICAgICAgICAgICctbycsICdTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nLAorICAgICAgICAgICAgICAgICctbycsICdMb2dMZXZlbD1FUlJPUicKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuc3NoID0gWydzc2gnLCAnLWwnLCBzZWxmLnVzZXIgXSArIHNlbGYuc3NoX29wdGlvbnMKKyAgICAgICAgc2VsZi5zY3AgPSBbJ3NjcCddICsgc2VsZi5zc2hfb3B0aW9ucworICAgICAgICBpZiBwb3J0OgorICAgICAgICAgICAgc2VsZi5zc2ggPSBzZWxmLnNzaCArIFsgJy1wJywgcG9ydCBdCisgICAgICAgICAgICBzZWxmLnNjcCA9IHNlbGYuc2NwICsgWyAnLVAnLCBwb3J0IF0KKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9pbnRlcm5hbF9ydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSk6CisgICAgICAgIHNlbGYubG9nKCJbUnVubmluZ10kICVzIiAlICIgIi5qb2luKGNvbW1hbmQpKQorCisgICAgICAgIHByb2MgPSBTU0hQcm9jZXNzKCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBwcm9jLnJ1bihjb21tYW5kLCB0aW1lb3V0LCBsb2dmaWxlPXNlbGYubG9nZmlsZSkKKworICAgICAgICBzZWxmLmxvZygiW0NvbW1hbmQgcmV0dXJuZWQgJyVkJyBhZnRlciAlLjJmIHNlY29uZHNdIiAlIChzdGF0dXMsIHRpbWUudGltZSgpIC0gcHJvYy5zdGFydHRpbWUpKQorCisgICAgICAgIGlmIHN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkOlxuJXMiICUgKGNvbW1hbmQsIHN0YXR1cywgb3V0cHV0KSkKKworICAgICAgICByZXR1cm4gKHN0YXR1cywgb3V0cHV0KQorCisgICAgZGVmIHJ1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZCAtIHNzaCBjb21tYW5kIHRvIHJ1bgorICAgICAgICB0aW1lb3V0PTx2YWw+IC0ga2lsbCBjb21tYW5kIGlmIHRoZXJlIGlzIG5vIG91dHB1dCBhZnRlciA8dmFsPiBzZWNvbmRzCisgICAgICAgIHRpbWVvdXQ9Tm9uZSAtIGtpbGwgY29tbWFuZCBpZiB0aGVyZSBpcyBubyBvdXRwdXQgYWZ0ZXIgYSBkZWZhdWx0IHZhbHVlIHNlY29uZHMKKyAgICAgICAgdGltZW91dD0wIC0gbm8gdGltZW91dCwgbGV0IGNvbW1hbmQgcnVuIHVudGlsIGl0IHJldHVybnMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNvdXJjZSAvZXRjL3Byb2ZpbGUgZm9yIGEgcHJvcGVyIFBBVEggb24gdGhlIHRhcmdldAorICAgICAgICBjb21tYW5kID0gc2VsZi5zc2ggKyBbc2VsZi5pcCwgJyAuIC9ldGMvcHJvZmlsZTsgJyArIGNvbW1hbmRdCisKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBzZWxmLmRlZmF1bHR0aW1lb3V0LCBzZWxmLmlnbm9yZV9zdGF0dXMpCisgICAgICAgIGlmIHRpbWVvdXQgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgTm9uZSwgc2VsZi5pZ25vcmVfc3RhdHVzKQorICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIHRpbWVvdXQsIHNlbGYuaWdub3JlX3N0YXR1cykKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICBjb21tYW5kID0gc2VsZi5zY3AgKyBbJyVzQCVzOiVzJyAlIChzZWxmLnVzZXIsIHNlbGYuaXAsIHJlbW90ZXBhdGgpLCBsb2NhbHBhdGhdCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3RhcmdldGJ1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTBkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3RhcmdldGJ1aWxkLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBQcm92aWRlcyBhIGNsYXNzIGZvciBhdXRvbWF0aW5nIGJ1aWxkIHRlc3RzIGZvciBwcm9qZWN0cworCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIEJ1aWxkUHJvamVjdCgpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWU9Tm9uZSwgdG1wZGlyPSIvdG1wLyIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuYXJjaGl2ZSA9IG9zLnBhdGguYmFzZW5hbWUodXJpKQorICAgICAgICBzZWxmLmxvY2FsYXJjaGl2ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsc2VsZi5hcmNoaXZlKQorICAgICAgICBzZWxmLmZuYW1lID0gcmUuc3ViKHInLnRhci5iejJ8dGFyLmd6JCcsICcnLCBzZWxmLmFyY2hpdmUpCisgICAgICAgIGlmIGZvbGRlcm5hbWU6CisgICAgICAgICAgICBzZWxmLmZuYW1lID0gZm9sZGVybmFtZQorCisgICAgIyBEb3dubG9hZCBzZWxmLmFyY2hpdmUgdG8gc2VsZi5sb2NhbGFyY2hpdmUKKyAgICBkZWYgX2Rvd25sb2FkX2FyY2hpdmUoc2VsZik6CisKKyAgICAgICAgZGxfZGlyID0gc2VsZi5kLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgZGxfZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGxfZGlyLCBzZWxmLmFyY2hpdmUpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKG9zLnBhdGguam9pbihkbF9kaXIsIHNlbGYuYXJjaGl2ZSksIHNlbGYubG9jYWxhcmNoaXZlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXhwb3J0dmFycyA9IFsnSFRUUF9QUk9YWScsICdodHRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnSFRUUFNfUFJPWFknLCAnaHR0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnRlRQU19QUk9YWScsICdmdHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnTk9fUFJPWFknLCAnbm9fcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnU09DS1M1X1VTRVInLCAnU09DS1M1X1BBU1NXRCddCisKKyAgICAgICAgY21kID0gJycKKyAgICAgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICAgICAgY21kID0gJ2V4cG9ydCAnICsgdmFyICsgJz1cIiVzXCI7ICVzJyAlICh2YWwsIGNtZCkKKworICAgICAgICBjbWQgPSBjbWQgKyAid2dldCAtTyAlcyAlcyIgJSAoc2VsZi5sb2NhbGFyY2hpdmUsIHNlbGYudXJpKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgcHJvdmlkZSBhIHdheSB0byBydW4gYSBjb21tYW5kIGluIHRoZSBkZXNpcmVkIGVudmlyb25tZW50LgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHBhc3MKKworICAgICMgVGhlIHRpbWVvdXQgcGFyYW1ldGVyIG9mIHRhcmdldC5ydW4gaXMgc2V0IHRvIDAgdG8gbWFrZSB0aGUgc3NoIGNvbW1hbmQKKyAgICAjIHJ1biB3aXRoIG5vIHRpbWVvdXQuCisgICAgZGVmIHJ1bl9jb25maWd1cmUoc2VsZiwgY29uZmlndXJlX2FyZ3M9JycsIGV4dHJhX2NtZHM9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuKCdjZCAlczsgJXMgLi9jb25maWd1cmUgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBleHRyYV9jbWRzLCBjb25maWd1cmVfYXJncykpCisKKyAgICBkZWYgcnVuX21ha2Uoc2VsZiwgbWFrZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bignY2QgJXM7IG1ha2UgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBtYWtlX2FyZ3MpKQorCisgICAgZGVmIHJ1bl9pbnN0YWxsKHNlbGYsIGluc3RhbGxfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIGluc3RhbGwgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBpbnN0YWxsX2FyZ3MpKQorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3JtIC1yZiAlcycgJSBzZWxmLnRhcmdldGRpcikKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCdybSAtZiAlcycgJSBzZWxmLmxvY2FsYXJjaGl2ZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgcGFzcworCitjbGFzcyBUYXJnZXRCdWlsZFByb2plY3QoQnVpbGRQcm9qZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSAifi8iCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj0iL3RtcCIpCisKKyAgICBkZWYgZG93bmxvYWRfYXJjaGl2ZShzZWxmKToKKworICAgICAgICBzZWxmLl9kb3dubG9hZF9hcmNoaXZlKCkKKworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byhzZWxmLmxvY2FsYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29weSBhcmNoaXZlIHRvIHRhcmdldCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndGFyIHhmICVzJXMgLUMgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBzZWxmLmFyY2hpdmUsIHNlbGYudGFyZ2V0ZGlyKSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBleHRyYWN0IGFyY2hpdmUsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgICNDaGFuZ2UgdGFyZ2V0ZGlyIHRvIHByb2plY3QgZm9sZGVyCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gc2VsZi50YXJnZXRkaXIgKyBzZWxmLmZuYW1lCisKKyAgICAjIFRoZSB0aW1lb3V0IHBhcmFtZXRlciBvZiB0YXJnZXQucnVuIGlzIHNldCB0byAwIHRvIG1ha2UgdGhlIHNzaCBjb21tYW5kCisgICAgIyBydW4gd2l0aCBubyB0aW1lb3V0LgorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5ydW4oY21kLCAwKVswXQorCisKK2NsYXNzIFNES0J1aWxkUHJvamVjdChCdWlsZFByb2plY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RwYXRoLCBzZGtlbnYsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5zZGtlbnYgPSBzZGtlbnYKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gdGVzdHBhdGgKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSB0ZXN0cGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdHBhdGgpCisgICAgICAgIHNlbGYuZGF0ZXRpbWUgPSBkLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBzZWxmLnRlc3Rsb2dkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGxvZ2RpcikKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxvZ2RpciwgInNka190YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj10ZXN0cGF0aCkKKworICAgIGRlZiBkb3dubG9hZF9hcmNoaXZlKHNlbGYpOgorCisgICAgICAgIHNlbGYuX2Rvd25sb2FkX2FyY2hpdmUoKQorCisgICAgICAgIGNtZCA9ICd0YXIgeGYgJXMlcyAtQyAlcycgJSAoc2VsZi50YXJnZXRkaXIsIHNlbGYuYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgI0NoYW5nZSB0YXJnZXRkaXIgdG8gcHJvamVjdCBmb2xkZXIKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSBzZWxmLnRhcmdldGRpciArIHNlbGYuZm5hbWUKKworICAgIGRlZiBydW5fY29uZmlndXJlKHNlbGYsIGNvbmZpZ3VyZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2NvbmZpZ3VyZShjb25maWd1cmVfYXJncz0oY29uZmlndXJlX2FyZ3Mgb3IgJyRDT05GSUdVUkVfRkxBR1MnKSwgZXh0cmFfY21kcz0nIGdudS1jb25maWdpemU7ICcpCisKKyAgICBkZWYgcnVuX2luc3RhbGwoc2VsZiwgaW5zdGFsbF9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2luc3RhbGwoaW5zdGFsbF9hcmdzPShpbnN0YWxsX2FyZ3Mgb3IgIkRFU1RESVI9JXMvLi4vaW5zdGFsbCIgJSBzZWxmLnRhcmdldGRpcikpCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgc2VsZi5sb2coIlJ1bm5pbmcgLiAlczsgIiAlIHNlbGYuc2RrZW52ICsgY21kKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKCIuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQsIHNoZWxsPVRydWUpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxNTYxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQSBkYWVtb24gZm9yIGRlbGl2ZXJpbmcgQUNQSSBldmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjcGlkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0zMzE0MCZhdGlkPTQwNzM0MSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9hY3BpZDIvYWNwaWQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vYWNwaWQuc2VydmljZSBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJhY3BpZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYWNwaWQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC91c3Ivc2Jpbiwke3NiaW5kaXJ9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hY3BpZAorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYWNwaWQKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9ldmVudHMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY3BpZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FjcGlkLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvYWNwaWQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvYWNwaWQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBlNzQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QUNQSSBFdmVudCBEYWVtb24KK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYWNwaWQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9pbml0IGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwZmYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQKQEAgLTAsMCArMSwzMSBAQAorIyEgL2Jpbi9zaCAtZQorCit0ZXN0IC14IC91c3Ivc2Jpbi9hY3BpZCB8fCBleGl0IDAKK3Rlc3QgLWQgL3Byb2MvYWNwaSB8fCBleGl0IDAKK21rZGlyIC1wIC9ldGMvYWNwaS9ldmVudHMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIlN0YXJ0aW5nIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSBkYWVtb246ICIKKyAgICBpZiBbICEgLWQgL2V0Yy9hY3BpL2V2ZW50cyBdOyB0aGVuCisgICAgICAgIGVjaG8gIlRoZXJlIGlzIG5vdCBhbnkgcnVsZSBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgIGVsc2UKKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLVMgLXggL3Vzci9zYmluL2FjcGlkIC0tIC1jIC9ldGMvYWNwaS9ldmVudHMKKyAgICAgICAgZWNobyAiYWNwaWQuIgorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvIC1uICJTdG9wcGluZyBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgZGFlbW9uOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLUsgLXggL3Vzci9zYmluL2FjcGlkCisgICAgZWNobyAiYWNwaWQuIgorICAgIDs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKSAKKyAgICAkMCBzdG9wCisgICAgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9hY3BpZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTMxN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGFjcGlkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hY3BpZC5oO2VuZGxpbmU9MjQ7bWQ1PTMyNGE5Y2YyMjVhZTY5ZGRhYWQxYmY5ZDk0MjExNWI1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdiY2RjZGVmY2Q1M2IwMzczMGU1MGJhODQyNTU0ZWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDM5NmFhZWMxMzUxMGMzYTFmYWE5NDFhMTVhNGI1MzM1YjZhZTRmYmVjODQzOGI5MjQ5Yjg4YzNiNjYxODdlZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmN2JiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IE1hdHRoaWFzIEhlbnRnZXMgPGRldmVsQGhlbnRnZXMubmV0PiAoYykgMjAwNworIyBMaWNlbnNlOiBNSVQgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorIyAgICAgICAgICAgICAgIGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UpCisjCisjIEZpbGVuYW1lOiBhbHNhLXN0YXRlLmJiCisKK1NVTU1BUlkgPSAiQWxzYSBzY2VuYXJpbyBmaWxlcyB0byBlbmFibGUgYWxzYSBzdGF0ZSByZXN0b3JhdGlvbiIKK0RFU0NSSVBUSU9OID0gIkFsc2EgU2NlbmFyaW8gRmlsZXMgLSBhbiBpbml0IHNjcmlwdCBhbmQgc3RhdGUgZmlsZXMgdG8gcmVzdG9yZSBcCitzb3VuZCBzdGF0ZSBhdCBzeXN0ZW0gYm9vdCBhbmQgc2F2ZSBpdCBhdCBzeXN0ZW0gc2h1dCBkb3duLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQViA9ICIwLjIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gIlwKKyAgZmlsZTovL2Fzb3VuZC5jb25mIFwKKyAgZmlsZTovL2Fzb3VuZC5zdGF0ZSBcCisgIGZpbGU6Ly9hbHNhLXN0YXRlLWluaXQgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgQXMgdGhlIHJlY2lwZSBkb2Vzbid0IGluaGVyaXQgc3lzdGVtZC5iYmNsYXNzLCB3ZSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlCisjIG1hbnVhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBvc3RpbnN0L3ByZWluc3QgZ2VuZXJhdGVkLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYWxzYS1zdGF0ZSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDMxIDAgNiAuIgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIHRoZSBpbml0IHNjcmlwdCB3aGVuICdzeXN2aW5pdCcgaXMgaW4gRElTVFJPX0ZFQVRVUkVTLgorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJc2VkIC1pIC1lICJzOiNTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYTpnIiAke1dPUktESVJ9L2Fsc2Etc3RhdGUtaW5pdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxzYS1zdGF0ZS1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hbHNhLXN0YXRlCisgICAgZmkKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Fzb3VuZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5zdGF0ZSAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYQorfQorCitQQUNLQUdFUyArPSAiYWxzYS1zdGF0ZXMiCisKK1JSRUNPTU1FTkRTX2Fsc2Etc3RhdGUgPSAiYWxzYS1zdGF0ZXMiCisKK1JERVBFTkRTXyR7UE59ID0gImFsc2EtdXRpbHMtYWxzYWN0bCIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vYXNvdW5kLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9hc291bmQuY29uZiIKKworRklMRVNfYWxzYS1zdGF0ZXMgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS8qLnN0YXRlIgorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisJaWYgdGVzdCAteiAiJEQiCisJdGhlbgorCQlpZiB0ZXN0IC14ICR7c2JpbmRpcn0vYWxzYWN0bAorCQl0aGVuCisJCQkke3NiaW5kaXJ9L2Fsc2FjdGwgLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS9hc291bmQuc3RhdGUgcmVzdG9yZQorCQlmaQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLWluaXQgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLWluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWVlNTljYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisjCisjIENvcHlyaWdodCBNYXR0aGlhcyBIZW50Z2VzIDxkZXZlbEBoZW50Z2VzLm5ldD4gKGMpIDIwMDcKKyMgTGljZW5zZTogR1BMIChzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQgZm9yIGEgY29weSBvZiB0aGUgbGljZW5zZSkKKyMKKyMgRmlsZW5hbWU6IGFsc2Etc3RhdGUKKyMgRGF0ZTogMjAwNzAzMDggKFlNRCkKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworYXNvdW5kX3Jlc3RvcmUoKXsKKwllY2hvICJBTFNBOiBSZXN0b3JpbmcgbWl4ZXIgc2V0dGluZ3MuLi4iCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vYWxzYWN0bCAtYSAtZSAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZQorCXRoZW4KKwkJL3Vzci9zYmluL2Fsc2FjdGwgLWYgI1NUQVRFRElSIy9hc291bmQuc3RhdGUgcmVzdG9yZSAmCisJZmkKK30KKworYXNvdW5kX3N0b3JlKCl7CisJZWNobyAiQUxTQTogU3RvcmluZyBtaXhlciBzZXR0aW5ncy4uLiIKKwlpZiB0ZXN0IC14IC91c3Ivc2Jpbi9hbHNhY3RsCisJdGhlbgorCQkvdXNyL3NiaW4vYWxzYWN0bCAtZiAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZSBzdG9yZQorCWZpCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCQlhc291bmRfcmVzdG9yZSA7Oworc3RvcCkJCWFzb3VuZF9zdG9yZSA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9hbHNhY3RsOworICAgIGV4aXQgJD8KKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYWxzYS1zdGF0ZSB7c3RhcnR8c3RvcHxzdGF0dXN9IgorICAgIGV4aXQgMQorICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY1M2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYKQEAgLTAsMCArMSBAQAorIyBHbG9iYWwgYWxzYS1saWIgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLnN0YXRlIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLnN0YXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDFjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUKQEAgLTAsMCArMSBAQAorIyBEdW1teSBmaWxlLCBkbyBub3QgZGVsZXRlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhYjgyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZQpAQCAtMCwwICsxLDcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KK0FmdGVyPXJlbW90ZS1mcy50YXJnZXQKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L2FwbWQKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYXBtZCAtUCBAU1lTQ09ORkRJUkAvYXBtL2FwbWRfcHJveHkgJEFQTUQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGVlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5CkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorIyAKKyMgYXBtZF9wcm94eSAtIHByb2dyYW0gZGlzcGF0Y2hlciBmb3IgQVBNIGRhZW1vbgorIworIyBXcml0dGVuIGJ5IENyYWlnIE1hcmt3YXJkdCAoY3JhaWdtQGxoZWFtYWlsLmdzZmMubmFzYS5nb3YpIDIxIE1heSAxOTk5CisjIE1vZGlmaWVkIGZvciBEZWJpYW4gYnkgQXZlcnkgUGVubmFydW4KKyMKKyMgVGhpcyBzaGVsbCBzY3JpcHQgaXMgY2FsbGVkIGJ5IHRoZSBBUE0gZGFlbW9uIChhcG1kKSB3aGVuIGEgcG93ZXIKKyMgbWFuYWdlbWVudCBldmVudCBvY2N1cnMuICBJdHMgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMgZGVzY3JpYmUgdGhlCisjIGV2ZW50LiAgRm9yIGV4YW1wbGUsIGFwbWQgd2lsbCBjYWxsICJhcG1kX3Byb3h5IHN1c3BlbmQgc3lzdGVtIiBqdXN0CisjIGJlZm9yZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyMKKyMgSGVyZSBhcmUgdGhlIHBvc3NpYmxlIGFyZ3VtZW50czoKKyMKKyMgc3RhcnQgICAgICAgICAgICAgIC0gQVBNIGRhZW1vbiBoYXMgc3RhcnRlZAorIyBzdG9wICAgICAgICAgICAgICAgLSBBUE0gZGFlbW9uIGlzIHNodXR0aW5nIGRvd24KKyMgc3VzcGVuZCBjcml0aWNhbCAgIC0gQVBNIHN5c3RlbSBpbmRpY2F0ZXMgY3JpdGljYWwgc3VzcGVuZCAoKyspCisjIHN1c3BlbmQgc3lzdGVtICAgICAtIEFQTSBzeXN0ZW0gaGFzIHJlcXVlc3RlZCBzdXNwZW5kIG1vZGUKKyMgc3VzcGVuZCB1c2VyICAgICAgIC0gVXNlciBoYXMgcmVxdWVzdGVkIHN1c3BlbmQgbW9kZQorIyBzdGFuZGJ5IHN5c3RlbSAgICAgLSBBUE0gc3lzdGVtIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlIAorIyBzdGFuZGJ5IHVzZXIgICAgICAgLSBVc2VyIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlCisjIHJlc3VtZSBzdXNwZW5kICAgICAtIFN5c3RlbSBoYXMgcmVzdW1lZCBmcm9tIHN1c3BlbmQgbW9kZQorIyByZXN1bWUgc3RhbmRieSAgICAgLSBTeXN0ZW0gaGFzIHJlc3VtZWQgZnJvbSBzdGFuZGJ5IG1vZGUKKyMgcmVzdW1lIGNyaXRpY2FsICAgIC0gU3lzdGVtIGhhcyByZXN1bWVkIGZyb20gY3JpdGljYWwgc3VzcGVuZAorIyBjaGFuZ2UgYmF0dGVyeSAgICAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIGxvdyBiYXR0ZXJ5CisjIGNoYW5nZSBwb3dlciAgICAgICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgQUMvYmF0dGVyeSBjaGFuZ2UKKyMgY2hhbmdlIHRpbWUgICAgICAgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCB0aW1lIGNoYW5nZSAoKikKKyMgY2hhbmdlIGNhcGFiaWxpdHkgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCBjb25maWcuIGNoYW5nZSAoKykKKyMKKyMgKCopIC0gQVBNIGRhZW1vbiBtYXkgYmUgY29uZmlndXJlZCB0byBub3QgY2FsbCB0aGVzZSBzZXF1ZW5jZXMKKyMgKCspIC0gQXZhaWxhYmxlIGlmIEFQTSBrZXJuZWwgc3VwcG9ydHMgaXQuCisjICgrKykgLSAic3VzcGVuZCBjcml0aWNhbCIgaXMgbmV2ZXIgcGFzc2VkIHRvIGFwbWQgZnJvbSB0aGUga2VybmVsLAorIyAgIHNvIHdlIHdpbGwgbmV2ZXIgc2VlIGl0IGhlcmUuICBTY3JpcHRzIHRoYXQgcHJvY2VzcyAicmVzdW1lCisjICAgY3JpdGljYWwiIGV2ZW50cyBuZWVkIHRvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuCisjCisjIEl0IGlzIHRoZSBwcm94eSBzY3JpcHQncyByZXNwb25zaWJpbGl0eSB0byBleGFtaW5lIHRoZSBBUE0gc3RhdHVzCisjICh2aWEgL3Byb2MvYXBtKSBvciBvdGhlciBzdGF0dXMgYW5kIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucy4KKyMgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgbWlnaHQgdW5tb3VudCBuZXR3b3JrIGRyaXZlcyBiZWZvcmUgdGhlCisjIG1hY2hpbmUgaXMgc3VzcGVuZGVkLgorIworIyBJbiBEZWJpYW4sIHRoZSB1c3VhbCB3YXkgb2YgYWRkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHByb3h5IGlzIHRvCisjIGFkZCBhIHNjcmlwdCB0byAvZXRjL2FwbS9ldmVudC5kLiAgVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgYnkKKyMgYXBtZF9wcm94eSAodmlhIHJ1bi1wYXJ0cykgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCisjCisjIElmIGl0IGlzIGltcG9ydGFudCB0aGF0IGEgY2VydGFpbiBzZXQgb2Ygc2NyaXB0IGJlIHJ1biBpbiBhIGNlcnRhaW4KKyMgb3JkZXIgb24gc3VzcGVuZCBhbmQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgb24gcmVzdW1lLCB0aGVuIHB1dCBhbGwKKyMgdGhlIHNjcmlwdHMgaW4gL2V0Yy9hcG0vc2NyaXB0cy5kIGluc3RlYWQgb2YgL2V0Yy9hcG0vZXZlbnQuZCBhbmQKKyMgc3ltbGluayB0byB0aGVzZSBmcm9tIC9ldGMvYXBtL3N1c3BlbmQuZCwgL2V0Yy9hcG0vcmVzdW1lLmQgYW5kCisjIC9ldGMvYXBtL290aGVyLmQgdXNpbmcgbmFtZXMgd2hvc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyIGlzIHRoZSBzYW1lCisjIGFzIHRoZSBkZXNpcmVkIG9yZGVyIG9mIGV4ZWN1dGlvbi4KKyMKKyMgSWYgdGhlIGtlcm5lbCdzIEFQTSBkcml2ZXIgc3VwcG9ydHMgaXQsIGFwbWRfcHJveHkgY2FuIHJldHVybiBhIG5vbi16ZXJvCisjIGV4aXQgc3RhdHVzIG9uIHN1c3BlbmQgYW5kIHN0YW5kYnkgZXZlbnRzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1c3BlbmQKKyMgb3Igc3RhbmRieSBldmVudCBzaG91bGQgYmUgcmVqZWN0ZWQuCisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc2V0IC1lCisKKyMgVGhlIGZvbGxvd2luZyBkb2Vzbid0IHlldCB3b3JrLCBiZWNhdXNlIGN1cnJlbnQga2VybmVscyAodXAgdG8gYXQgbGVhc3QKKyMgMi40LjIwKSBkbyBub3Qgc3VwcG9ydCByZWplY3Rpb24gb2YgQVBNIGV2ZW50cy4gIFN1cHBvcnRpbmcgdGhpcyB3b3VsZAorIyByZXF1aXJlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFQTSBkcml2ZXIuICBXZSB3aWxsIHJlLWVuYWJsZQorIyB0aGlzIGZlYXR1cmUgaWYgdGhlIGRyaXZlciBpcyBldmVyIG1vZGlmaWVkLiAgICAgICAtLSBjcGhAZGViaWFuLm9yZworIworI1NVU1BFTkRfT05fQUM9ZmFsc2UKKyNbIC1yIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZiBdICYmIC4gL2V0Yy9hcG0vYXBtZF9wcm94eS5jb25mCisjCisjaWYgWyAiJHtTVVNQRU5EX09OX0FDfSIgPSAiZmFsc2UiIC1hICIkezJ9IiA9ICJzeXN0ZW0iIF0gXAorIwkmJiBvbl9hY19wb3dlciA+L2Rldi9udWxsOyB0aGVuCisjICAgICMgUmVqZWN0IHN5c3RlbSBzdXNwZW5kcyBhbmQgc3RhbmRieXMgaWYgd2UgYXJlIG9uIEFDIHBvd2VyCisjICAgIGV4aXQgMSAgIyBSZWplY3QgKE5PVEUga2VybmVsIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkKQorI2ZpCisKK2lmIFsgIiR7MX0iID0gInN1c3BlbmQiIC1vICIkezF9IiA9ICJzdGFuZGJ5IiBdOyB0aGVuCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vc3VzcGVuZC5kIF07IHRoZW4KKyAgICAgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vc3VzcGVuZC5kCisgICAgZmkKK2VsaWYgWyAiJHsxfSIgPSAicmVzdW1lIiBdOyB0aGVuCisgICAgaWYgWyAtZCAvZXRjL2FwbS9yZXN1bWUuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL3Jlc3VtZS5kCisgICAgZmkKKyAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9ldmVudC5kCitlbHNlCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vb3RoZXIuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL290aGVyLmQKKyAgICBmaQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5LmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZjogY29uZmlndXJhdGlvbiBmaWxlIGZvciBhcG1kLgorIworIyBUaGlzIGZpbGUgaXMgbWFuYWdlZCBieSBkZWJjb25mIHdoZW4gaW5zdGFsbGluZyBvciByZWNvbmZpZ3VyaW5nIHRoZQorIyBwYWNrYWdlLiAgSXQgaXMgZ2VuZXJhdGVkIGJ5IG1lcmdpbmcgdGhlIGFuc3dlcnMgZ2F0aGVyZWQgYnkgZGViY29uZgorIyBpbnRvIHRoZSB0ZW1wbGF0ZSBmaWxlICIvdXNyL3NoYXJlL2FwbWQvYXBtZF9wcm94eS5jb25mIi4KKworIyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgeWV0IHdvcmssIGJlY2F1c2UgY3VycmVudCBrZXJuZWxzICh1cCB0byBhdCBsZWFzdAorIyAyLjQuMjApIGRvIG5vdCBzdXBwb3J0IHJlamVjdGlvbiBvZiBBUE0gZXZlbnRzLiAgU3VwcG9ydGluZyB0aGlzIHdvdWxkCisjIHJlcXVpcmUgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgQVBNIGRyaXZlci4gIFdlIHdpbGwgcmUtZW5hYmxlCisjIHRoaXMgZmVhdHVyZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZXIgbW9kaWZpZWQuICAgICAgIC0tIGNwaEBkZWJpYW4ub3JnCisjCisjIFNldCB0aGUgZm9sbG93aW5nIHRvICJmYWxzZSIgaWYgeW91IHdhbnQgdG8gcmVqZWN0IHN5c3RlbSBzdXNwZW5kIG9yCisjIHN5c3RlbSBzdGFuZGJ5IHJlcXVlc3RzIHdoZW4gdGhlIGNvbXB1dGVyIGlzIHJ1bm5pbmcgb24gQUMgcG93ZXIuCisjIE90aGVyd2lzZSBzZXQgdGhpcyB0byAidHJ1ZSIuICBTdWNoIHJlcXVlc3RzIGFyZSBuZXZlciByZWplY3RlZCB3aGVuCisjIHRoZSBjb21wdXRlciBpcyBydW5uaW5nIG9uIGJhdHRlcnkgcG93ZXIuCisjU1VTUEVORF9PTl9BQz10cnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc5NjVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMKKyMgRGVmYXVsdCBmb3IgL2V0Yy9pbml0LmQvYXBtZAorIworCisjIEFzIGFwbWQgY2FuIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cywgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUKKyMgdG8gc3RvcmUgdGhlbSwgZS5nLiwgQVBNRD0iLXcgNSAtcCAyIi4KKyMgU2VlIHRoZSBtYW51YWwgcGFnZSBhcG1kKDgpIGZvciBkZXRhaWxzLgorQVBNRD0iLS1wcm94eS10aW1lb3V0IDMwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvaW5pdCBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBiNDFhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2luaXQKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBhcG1kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluCisKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvYXBtZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2FwbWQKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCBkYWVtb246ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vYXBtZCAtLSBcCisJCS1QIC9ldGMvYXBtL2FwbWRfcHJveHkgJEFQTUQKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJICAgIGVjaG8gImFwbWQuIgorCWVsc2UKKwkgICAgZWNobyAiKGZhaWxlZC4pIgorCWZpCisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIGFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgZGFlbW9uOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgXAorCQkteCAvdXNyL3NiaW4vYXBtZAorCWVjaG8gImFwbWQuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vYXBtZDsKKwlleGl0ICQ/CisJOzsKKyAgICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkgCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJZXhpdAorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYXBtZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGVnYWN5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjg5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSwxMzMgQEAKK0Zyb20gMzU5NTkzM2QyMjFmMGJhODM2OTE3ZGViYzA3NzZiODcyMzk3MmVjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMSBBdWcgMjAxNSAxNzo0MDo1MCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gUGF0Y2ggd2l0aCBmaXhlcyBwcm92aWRlZCBieSBEZWJpYW4uCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi0xNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIE1ha2VmaWxlIHwgIDIgKy0KKyBhcG0uYyAgICB8ICAzICsrLQorIGFwbS5oICAgIHwgIDkgKysrKysrKysrCisgYXBtZC5jICAgfCAxNSArKysrKysrKy0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBiZjM0NmQ5Li45MmZjMGZkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDMsNyArNDMsNyBAQCBERVNURElSPQorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSBcCisrWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlIFwKKyAJCS1JL3Vzci9zcmMvbGludXgtMi4yL2luY2x1ZGUgLUkgL3Vzci9zcmMvbGludXgtMi4wL2luY2x1ZGUgXAorIAkJLURWRVJTSU9OPVwiJChWRVJTSU9OKVwiIFwKKyAJCS1EREVGQVVMVF9QUk9YWV9OQU1FPVwiJChQUk9YWV9ESVIpL2FwbWRfcHJveHlcIgorZGlmZiAtLWdpdCBhL2FwbS5jIGIvYXBtLmMKK2luZGV4IGIyMWMwNTcuLjAzNTliMWMgMTAwNjQ0CistLS0gYS9hcG0uYworKysrIGIvYXBtLmMKK0BAIC0yMTksMTIgKzIxOSwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl9CisgCX0KKyAJCQkJCQkJCQkJCQkJICAgIAorLQorKyNpZiAwCisgICAgIGlmICghKGkuYXBtX2ZsYWdzICYgQVBNXzMyX0JJVF9TVVBQT1JUKSkKKyAgICAgeworIAlmcHJpbnRmKHN0ZGVyciwgIjMyLWJpdCBBUE0gaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWRcbiIpOworIAlleGl0KDEpOworICAgICB9CisrI2VuZGlmCisgCisgICAgIGlmICh2ZXJib3NlICYmIChpLmFwbV9mbGFncyAmIDB4MTApKQorIAlwcmludGYoIkFQTSBCSU9TIFBvd2VyIE1hbmFnZW1lbnQgaXMgY3VycmVudGx5IGRpc2FibGVkXG4iKTsKK2RpZmYgLS1naXQgYS9hcG0uaCBiL2FwbS5oCitpbmRleCBmYjI0ZGZkLi44MjRjYzA2IDEwMDY0NAorLS0tIGEvYXBtLmgKKysrKyBiL2FwbS5oCitAQCAtMjAsNiArMjAsMTMgQEAKKyAgKiAkSWQ6IGFwbS5oLHYgMS43IDE5OTkvMDcvMDUgMjI6MzE6MTEgYXBlbndhcnIgRXhwICQKKyAgKiAKKyAgKi8KKysjaWZuZGVmIF9BUE1fSAorKyNkZWZpbmUgX0FQTV9IIDEKKysKKysjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworKyNkZWZpbmUgX19LRVJORUxfU1RSSUNUX05BTUVTCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorQEAgLTkzLDMgKzEwMCw1IEBAIGV4dGVybiBpbnQgYXBtX3JlamVjdChpbnQgZmQpOworICNlbHNlCisgI2RlZmluZSBhcG1fcmVqZWN0KGZkKSAgICgtRUlOVkFMKQorICNlbmRpZgorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2FwbWQuYyBiL2FwbWQuYworaW5kZXggNDllZDNhMS4uNTYwZjUzNiAxMDA2NDQKKy0tLSBhL2FwbWQuYworKysrIGIvYXBtZC5jCitAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCS8qIHBhcmVudCAqLworIAkJaW50IHN0YXR1cywgcmV0dmFsOworIAkJc3NpemVfdCBsZW47CistCQl0aW1lX3QgdGltZV9saW1pdDsKKysJCXRpbWVfdCBjb3VudGRvd247CisgCisgCQlpZiAocGlkIDwgMCkgeworIAkJCS8qIENvdWxkbid0IGZvcmsgKi8KK0BAIC0zNTYsOCArMzU2LDkgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJLyogQ2FwdHVyZSB0aGUgY2hpbGQncyBvdXRwdXQsIGlmIGFueSwgYnV0IG9ubHkgdW50aWwgaXQgdGVybWluYXRlcyAqLworIAkJY2xvc2UoZmRzWzFdKTsKKyAJCWZjbnRsKGZkc1swXSwgRl9TRVRGTCwgT19SRE9OTFl8T19OT05CTE9DSyk7CistCQl0aW1lX2xpbWl0ID0gdGltZSgwKSArIHByb3h5X3RpbWVvdXQ7CisrCQljb3VudGRvd24gPSBwcm94eV90aW1lb3V0OworIAkJZG8geworKwkJCWNvdW50ZG93biAtPSAxOworIAkJCXdoaWxlICgobGVuID0gcmVhZChmZHNbMF0sIGxpbmUsIHNpemVvZihsaW5lKS0xKSkgPiAwKSB7CisgCQkJCWxpbmVbbGVuXSA9IDA7CisgCQkJCUFQTURfU1lTTE9HKExPR19JTkZPLCAiKyAlcyIsIGxpbmUpOworQEAgLTM3MiwxNiArMzczLDE2IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCQkJZ290byBwcm94eV9kb25lOworIAkJCX0KKyAJCQkJCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAkJfSB3aGlsZSAoCistCQkJKHRpbWUoMCkgPCB0aW1lX2xpbWl0KQorKwkJCShjb3VudGRvd24gPj0gMCkKKyAJCQl8fCAocHJveHlfdGltZW91dCA8IDApCisgCQkpOworIAorIAkJQVBNRF9TWVNMT0coTE9HX05PVElDRSwgIlByb3h5IGhhcyBiZWVuIHJ1bm5pbmcgbW9yZSB0aGFuICVkIHNlY29uZHM7IGtpbGxpbmcgaXQiLCBwcm94eV90aW1lb3V0KTsKKyAKKyAJCWtpbGwocGlkLCBTSUdURVJNKTsKKy0JCXRpbWVfbGltaXQgPSB0aW1lKDApICsgNTsKKysJCWNvdW50ZG93biA9IDU7CisgCQlkbyB7CisgCQkJcmV0dmFsID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIFdOT0hBTkcpOworIAkJCWlmIChyZXR2YWwgPT0gcGlkKQorQEAgLTM5Miw5ICszOTMsOSBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkJCWdvdG8gcHJveHlfZG9uZTsKKyAJCQl9CisgCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAorLQkJfSB3aGlsZSAodGltZSgwKSA8IHRpbWVfbGltaXQpOworKwkJfSB3aGlsZSAoY291bnRkb3duID49IDApOworIAorIAkJa2lsbChwaWQsIFNJR0tJTEwpOworIAkJc3RhdHVzID0gX19XX0VYSVRDT0RFKDAsIFNJR0tJTEwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRlZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgYnkgUlAgdG8gYWRkcmVzcyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIiBlcnJvcjoKKyAgIGNvbW1pdCAzNWRlMDVlNjFiODhjMDgwOGE1ZTg4NWJiMGVmZGY0MjA1NTVkNWFkCisgICBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KKyAgIERhdGU6ICAgU3VuIEp1biAxIDE2OjEzOjM4IDIwMDggKzAwMDAKKworICAgYXBtZDogVXNlIGxpYnRvb2wgLS10YWcgb3B0aW9ucyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxpYnRvb2wgMi4yLjQgKGZyb20gcG9reSkKKworSG93ZXZlciBJIGRpZG4ndCBzZWUgc2FtZSBpc3N1ZSB3aXRoIGN1cnJlbnQgbGlidG9vbC0yLjIuMTAuIEFsc28gcGVyIG15IHVuZGVyc3RhbmRpbmcsCit0aGUgZGVmYXVsdCB0YWcsIGlmIG5vdCBzcGVjaWZpZWQsIGZhbGxzIGJhY2sgdG8gQ0MuIFNvIGRpc2FibGUgaXQgZnJvbSBwYXRjaGluZywgYnV0CitrZWVwIGl0IGhlcmUuIElmIHdlIGVuY291bnRlciBzaW1pbGFyIGlzc3VlIGluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHRoZW4gcHVzaCB1cHN0cmVhbQorCitDb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcG1kLTMuMi4yLm9yaWcub3JpZy9NYWtlZmlsZQkyMDA0LTAxLTA0IDA4OjEzOjE4LjAwMDAwMDAwMCArMDAwMAorKysrIGFwbWQtMy4yLjIub3JpZy9NYWtlZmlsZQkyMDA4LTA0LTIxIDE3OjEwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTU4LDkgKzU3LDggQEAKKyAjQ0ZMQUdTPS1PMyAtbTQ4NiAtZm9taXQtZnJhbWUtcG9pbnRlcgorICNMREZMQUdTPS1zCisgCistTElCVE9PTD1saWJ0b29sIC0tcXVpZXQKKy1MVF9DT01QSUxFID0gJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENDKQorLUxUX0xJTksgPSAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpCisrTFRfQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKKytMVF9MSU5LID0gJChMSUJUT09MKSAgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKKyBMVF9JTlNUQUxMID0gJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBpbnN0YWxsCisgTFRfQ0xFQU4gPSAkKExJQlRPT0wpIC0tbW9kZT1jbGVhbiBybQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvdW5saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL3VubGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4MjA2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL3VubGludXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29weSBPRSBjb21taXQgbWVzc2FnZSBoZXJlOgorICAgY29tbWl0IDk0NTZjZGMxY2Y0M2UzYmE5ZTZkODhjNjM1NjBjMWI2ZmRlZTQzNTkKKyAgIEF1dGhvcjogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorICAgRGF0ZTogICBUdWUgTWF5IDI5IDEyOjI3OjQ1IDIwMDcgKzAwMDAKKworICAgYXBtZDogcHJldmVudCBidWlsZCBmcm9tIGludGVyZmVycmluZyB3aXRoIGhvc3Qga2VybmVsIGhlYWRlcnMuIENsb3NlcyAjMTI1NworCitjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKysrKyBhcG1kLTMuMi4yL01ha2VmaWxlCitAQCAtNDMsOCArNDMsNyBAQAorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3IvWDExUjYvaW5jbHVkZSBcCistCQktSS91c3Ivc3JjL2xpbnV4LTIuMi9pbmNsdWRlIC1JIC91c3Ivc3JjL2xpbnV4LTIuMC9pbmNsdWRlIFwKKytYVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiBcCisgCQktRFZFUlNJT049XCIkKFZFUlNJT04pXCIgXAorIAkJLURERUZBVUxUX1BST1hZX05BTUU9XCIkKFBST1hZX0RJUikvYXBtZF9wcm94eVwiCisgTERGTEFHUz0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExMDUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiVGhlIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgKEFQTSkgc3VwcG9ydCBwcm92aWRlcyBcCithY2Nlc3MgdG8gYmF0dGVyeSBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIGEgc2V0IG9mIHRvb2xzIGZvciBtYW5hZ2luZyBcCitub3RlYm9vayBwb3dlciBjb25zdW1wdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vYXBlbndhcnIuY2EvYXBtZC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwbS5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTdkNGFjYzEyNTA5MTBhODlmODRjZTNjYzY1NTdjNGMyIgorREVQRU5EUyA9ICJsaWJ0b29sLWNyb3NzIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBmaWxlOi8vbGVnYWN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5saW51eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYXBtZF9wcm94eSBcCisgICAgICAgICAgIGZpbGU6Ly9hcG1kX3Byb3h5LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXBtZC5zZXJ2aWNlIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjdmN2Q5ZjYwYjc3NjZiODUyODgxZDQwYjhmZjkxZDhlMzlmY2NiMGQxZDkxMzEwMmE1Yzc1YTJkYmI1MjMzMmQiCisKK1MgPSAiJHtXT1JLRElSfS9hcG1kLTMuMi4yLm9yaWciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXBtZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXBtZC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitkb19jb21waWxlKCkgeworCSMgYXBtZCBkb2Vzbid0IHVzZSB3aG9sZSBhdXRvdG9vbHMuIEp1c3QgbGlidG9vbCBmb3IgaW5zdGFsbGF0aW9uCisJb2VfcnVubWFrZSAiTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIiBhcG0gYXBtZAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL2V2ZW50LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9vdGhlci5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vc3VzcGVuZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vcmVzdW1lLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9zY3JpcHRzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwbWQKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlpbnN0YWxsIC1tIDQ3NTUgJHtTfS8ubGlicy9hcG0gJHtEfSR7YmluZGlyfS9hcG0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS8ubGlicy9hcG1kICR7RH0ke3NiaW5kaXJ9L2FwbWQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9hcG1kX3Byb3h5ICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hcG1kX3Byb3h5LmNvbmYgJHtEfSR7ZGF0YWRpcn0vYXBtZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvYXBtZAorCW9lX2xpYmluc3RhbGwgLXNvIGxpYmFwbSAke0R9JHtsaWJkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IGFwbS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlzZWQgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZzsgcywvZXRjLCR7c3lzY29uZmRpcn0sZzsnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisJY2htb2QgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXBtZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FwbWQuc2VydmljZQorfQorCitQQUNLQUdFUyA9KyAibGliYXBtIGFwbSIKKworRklMRVNfbGliYXBtID0gIiR7bGliZGlyfS9saWJhcG0ke1NPTElCU30iCitGSUxFU19hcG0gPSAiJHtiaW5kaXJ9L2FwbSoiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZWVlLWFjcGktc2NyaXB0c19naXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZWVlLWFjcGktc2NyaXB0c19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhMDJhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gImVlZVBDIHNwZWNpZmljIEFDUEkgc2NyaXB0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9kZWJpYW4tZWVlcGMvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9NzdlZjgzYWI1ZjRhZjkzOGE5M2VkYjYxZjdiNzRmMmMiCisKK1NSQ1JFViA9ICI5ZDRjZGVkY2EyNWIzOTY0MDVmODU4N2Y5YzRmYmY4MjI5ZTA0MWMyIgorUFYgPSAiMS4xLjEyK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZWJpYW4ub3JnL2dpdC9kZWJpYW4tZWVlcGMvZWVlcGMtYWNwaS1zY3JpcHRzLmdpdCBcCisJICAgZmlsZTovL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9wb3dlcmJ0bi5wYXRjaCBcCisJICAgZmlsZTovL3BvbGljeS1mdW5jcyAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vYWNwaS1zdXBwb3J0LyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2VlZXBjLWFjcGktc2NyaXB0cyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYWNwaS8iCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvYWN0aW9ucy8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvZXZlbnRzLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9saWIvdWRldi9ydWxlcy5kCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9lZWVwYy1hY3BpLXNjcmlwdHMvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9ldmVudHMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2V2ZW50cy8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2xpYi91ZGV2L3J1bGVzLmQvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2xpYi91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAke1N9L2FjdGlvbnMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2FjdGlvbnMvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYWNwaWxpYi9mdW5jdGlvbnMuc2ggJHtEfSR7ZGF0YWRpcn0vZWVlcGMtYWNwaS1zY3JpcHRzLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvbGljeS1mdW5jcyAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZGViaWFuL2VlZXBjLWFjcGktc2NyaXB0cy5kZWZhdWx0KiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwbS11dGlscyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3BvbGljeS1mdW5jcyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb2xpY3ktZnVuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwOTlkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb2xpY3ktZnVuY3MKQEAgLTAsMCArMSw4IEBACitDaGVja1BvbGljeSgpIHsKKwlpZiBwaWRvZiBnbm9tZS1wb3dlci1tYW5hZ2VyIGtwb3dlcnNhdmUgPiAvZGV2L251bGwgfHwKKwkgICAocGlkb2YgZGNvcHNlcnZlciA+IC9kZXYvbnVsbCAmJiB0ZXN0IC14IC91c3IvYmluL2Rjb3AgJiYgL3Vzci9iaW4vZGNvcCBrZGVkIGtkZWQgbG9hZGVkTW9kdWxlcyB8IGdyZXAgLXEga2xhcHRvcGRhZW1vbikgOyB0aGVuCisJCWVjaG8gMDsKKwllbHNlCisJCWVjaG8gMTsKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3Bvd2VyYnRuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3Bvd2VyYnRuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2U1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorLS0tCisgYWN0aW9ucy9wb3dlci5zaCB8ICAgIDMgKysrCisgZXZlbnRzL3Bvd2VyYnRuICB8ICAgIDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCitJbmRleDogZ2l0L2V2ZW50cy9wb3dlcmJ0bgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9ldmVudHMvcG93ZXJidG4JMjAwOC0xMC0wOCAxNzo0MzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorK2V2ZW50PWJ1dHRvbi9wb3dlciBQV1JGCisrYWN0aW9uPS9ldGMvYWNwaS9hY3Rpb25zL3Bvd2VyLnNoCitJbmRleDogZ2l0L2FjdGlvbnMvcG93ZXIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQvYWN0aW9ucy9wb3dlci5zaAkyMDA4LTEwLTA4IDE3OjQ1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzIEBACisrIyEvYmluL3NoCisrCisrL3NiaW4vc2h1dGRvd24gLWggbm93ICJQb3dlciBidXR0b24gcHJlc3NlZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiM2RjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKKy0tLQorIGFjdGlvbnMvaG90a2V5LnNoICAgICB8ICAgIDMgLS0tCisgYWN0aW9ucy9zdXNwZW5kLnNoICAgIHwgICAgMyAtLS0KKyBhY3Rpb25zL3ZnYS10b2dnbGUuc2ggfCAgICAzIC0tLQorIGFjdGlvbnMvdm9sdW1lLnNoICAgICB8ICAgIDMgLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lZWVwYy1hY3BpLXNjcmlwdHMvdm9sdW1lLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gJMjAxMS0xMS0yOSAxOTo0MTozNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zLDEyICszLDEwIEBACisgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMgXSB8fCBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkgXSB8fCBleGl0IDAKKyAjIFZvbHVtZSBjb250cm9scworIAorLSMgZG8gbm90aGluZyBpZiBwYWNrYWdlIGlzIHJlbW92ZWQKKyBQS0c9ZWVlcGMtYWNwaS1zY3JpcHRzCisgUEtHX0RJUj0vdXNyL3NoYXJlL2FjcGktc3VwcG9ydC8kUEtHCisgRlVOQ19MSUI9JFBLR19ESVIvbGliL2Z1bmN0aW9ucy5zaAorIERFRkFVTFQ9L2V0Yy9kZWZhdWx0LyRQS0cKKy1bIC1lICIkRlVOQ19MSUIiIF0gfHwgZXhpdCAwCisgCisgLiAkRlVOQ19MSUIKKyAuICRQS0dfRElSL2xpYi9zb3VuZC5zaAorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWVlcGMtYWNwaS1zY3JpcHRzL2hvdGtleS5zaAkyMDExLTExLTI5IDE5OjIxOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCTIwMTEtMTEtMjkgMTk6Mzk6NTEuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBjYXNlICQocnVubGV2ZWwpIGluCisgICAgICowfCo2KQorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdmdhLXRvZ2dsZS5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6NDA6MjQuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBpZiBbIC1lICIkREVGQVVMVCIgXTsgdGhlbiAuICIkREVGQVVMVCI7IGZpCisgLiAkRlVOQ19MSUIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9jb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMDY2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCitpZiBbIC1lIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnIF07IHRoZW4KKyAgICAuIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnCitmaQorCitpZiBbIC16ICIkSEFWRV9UT1VDSFNDUkVFTiIgXTsgdGhlbgorICAgIEhBVkVfVE9VQ0hTQ1JFRU49MAorZmkKKworaWYgWyAteiAiJEhBVkVfS0VZQk9BUkQiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEPTAKK2ZpCisKK2lmIFsgLXogIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiBdOyB0aGVuCisgICAgSEFWRV9LRVlCT0FSRF9QT1JUUkFJVD0wCitmaQorCitpZiBbIC16ICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRT0wCitmaQorCitpZiBbIC16ICIkRElTUExBWV9DQU5fUk9UQVRFIiBdOyB0aGVuCisgICAgRElTUExBWV9DQU5fUk9UQVRFPTAKK2ZpCisKK2lmIFsgLXogIiRESVNQTEFZX09SSUVOVEFUSU9OIiBdOyB0aGVuCisgICAgRElTUExBWV9PUklFTlRBVElPTj0wCitmaQorCitpZiBbIC1lICIvZGV2L2ZiIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJERJU1BMQVlfV0lEVEhfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfV0lEVEhfUElYRUxTPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQyIH0nYAorICAgIGZpCisKKyAgICBpZiBbIC16ICIkRElTUExBWV9IRUlHSFRfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfSEVJR0hUX1BJWEVMUz1gL3Vzci9zYmluL2Zic2V0IHwgZ3JlcCBnZW9tZXRyeSB8IGF3ayAneyBwcmludCAkMyB9J2AKKyAgICBmaQorCisgICAgaWYgWyAteiAiJERJU1BMQVlfQlBQIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfQlBQPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQ2IH0nYAorICAgIGZpCitmaQorCisjIAorIyBObyB3YXkgdG8gZ3Vlc3MgdGhlc2Ugb3IgaGF2ZSBhbnkgZGVmYXVsdHMKKyMKKyNESVNQTEFZX1dJRFRIX01NCisjRElTUExBWV9IRUlHSFRfTU0KKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybS9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybS9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ni9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ni9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY3L21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY3L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVtaXBzL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY3NzdiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11cHBjL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXBwYy9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlYTIyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXBwYy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz04MDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz02MDAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYtNjQvbWFjaGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2LTY0L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2LTY0L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMwYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRGV2aWNlIGZvcm1mYWN0b3IgaW5mb3JtYXRpb24iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFIgPSAicjQ1IgorCitTUkNfVVJJID0gImZpbGU6Ly9jb25maWcgZmlsZTovL21hY2hjb25maWciCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCSMgSW5zdGFsbCBmaWxlIG9ubHkgaWYgaXQgaGFzIGNvbnRlbnRzCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJaWYgWyAtcyAiJHtTfS9tYWNoY29uZmlnIiBdOyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9tYWNoY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDEyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gOGEzNTZkNGI2YTI0MmNlNjNiNzM5MjBkM2VkMzNmODhmOWUxMmZlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA2IFNlcCAyMDE1IDA1OjIwOjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudS1lZmk6IE1ha2Ugc2V0am1wLlMgcG9ydGFibGUgdG8gQVJNCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhlIGZvbGxvd2luZyBlcnJvcjoKKworICAuLi4vbGliL2FybS9zZXRqbXAuUzoxODogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorICAuLi4vbGliL2FybS9zZXRqbXAuUzoyNjogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorCitUaGUgcHJvYmxlbSBpcyB0aGUgYXNzZW1ibHkgc3ludGF4IHRoYXQgaXMgdXNlZCBpcyBub3QgcG9ydGFibGUgdG8gQVJNLAord2hlcmUgdGhlICdAJyBzeW1ib2wgaXMgYSBjb21tZW50OgorCisgID4gTm90ZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSBAIGNoYXJhY3RlciBpcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50CisgID4gKGVnIEFSTSkgdGhlbiBhbm90aGVyIGNoYXJhY3RlciBpcyB1c2VkIGluc3RlYWQuIEZvciBleGFtcGxlIHRoZQorICA+IEFSTSBwb3J0IHVzZXMgdGhlICUgY2hhcmFjdGVyLgorCisoRnJvbSBodHRwczovL3NvdXJjZXdhcmUub3JnL2JpbnV0aWxzL2RvY3MtMi4yNS9hcy9TZWN0aW9uLmh0bWwjU2VjdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2FybS9zZXRqbXAuUyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYXJtL3NldGptcC5TIGIvbGliL2FybS9zZXRqbXAuUworaW5kZXggNmUzZmJmMC4uODVjODcwNSAxMDA2NDQKKy0tLSBhL2xpYi9hcm0vc2V0am1wLlMKKysrKyBiL2xpYi9hcm0vc2V0am1wLlMKK0BAIC0xNSw3ICsxNSw3IEBAIEJBU0lTLAorIAkudGV4dAorIAkuYXJtCisgCS5nbG9ibAlzZXRqbXAKKy0JLnR5cGUJc2V0am1wLCBAZnVuY3Rpb24KKysJLnR5cGUJc2V0am1wLCAlZnVuY3Rpb24KKyBzZXRqbXA6CisgCW1vdglyMywgcjEzCisgCXN0bWlhCXIwLCB7cjMtcjEyLHIxNH0KK0BAIC0yMyw2ICsyMyw2IEBAIHNldGptcDoKKyAJYngJbHIKKyAKKyAJLmdsb2JsCWxvbmdqbXAKKy0JLnR5cGUJbG9uZ2ptcCwgQGZ1bmN0aW9uCisrCS50eXBlCWxvbmdqbXAsICVmdW5jdGlvbgorIGxvbmdqbXA6CisgCWxkbWlhCXIwLCB7cjMtcjEyLHIxNH0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyYWUxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwZGFhMzU0YTE2YWEzY2FkZTU2ZWQ0MjNkMGY4YTA0Y2YxYzIyZjlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDIzIEFwciAyMDE1IDAxOjQ5OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYi9NYWtlZmlsZTogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL3J0bG9jay5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvcnRkYXRhLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS92bS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvZWZpcnRsaWIubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCitpbmRleCBkYzRiOTRhLi5mNjRkMWVkIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlCisrKysgYi9saWIvTWFrZWZpbGUKK0BAIC03Myw2ICs3Myw4IEBAIGFsbDogbGlic3ViZGlycyBsaWJlZmkuYQorIGxpYnN1YmRpcnM6CisgCWZvciBzZGlyIGluICQoU1VCRElSUyk7IGRvIG1rZGlyIC1wICQkc2RpcjsgZG9uZQorIAorKyQoT0JKUyk6IGxpYnN1YmRpcnMKKysKKyBsaWJlZmkuYTogJChPQkpTKQorIAkkKEFSKSBydiAkQCAkKE9CSlMpCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViNDdjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRml4IHBhcmFsbGVsIG1ha2UgZmFpbHVyZSBmb3IgYXJjaGl2ZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBsaWIgYW5kIGdudWVmaSBtYWtlZmlsZXMgd2VyZSB1c2luZyB0aGUgbGliLmEoKSBmb3JtIHdoaWNoIGNvbXBpbGVzCithbmQgYXIncyBhcyBhIHBhaXIgaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsIGFuZCB0aGVuIGFyJ2luZyB3aGljaCBjYW4KK3BhcmFsbGVsaXplIGJldHRlci4gVGhpcyB3YXMgcmVzdWx0aW5nIGluIGJ1aWxkIGZhaWx1cmVzIG9uIGxhcmdlciB2YWx1ZXMKK29mIC1qLgorCitTZWUgaHR0cDovL3d3dy5jaGVtaWUuZnUtYmVybGluLmRlL2NoZW1uZXQvdXNlL2luZm8vbWFrZS9tYWtlX3RvYy5odG1sI1RPQzEwNQorZm9yIGRldGFpbHMuCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCistLS0KKyBnbnVlZmkvTWFrZWZpbGUgfCAgICAzICsrLQorIGxpYi9NYWtlZmlsZSAgICB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnbnUtZWZpLTMuMC9saWIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtZWZpLTMuMC5vcmlnL2xpYi9NYWtlZmlsZQorKysrIGdudS1lZmktMy4wL2xpYi9NYWtlZmlsZQorQEAgLTY2LDcgKzY2LDggQEAgYWxsOiBsaWJzdWJkaXJzIGxpYmVmaS5hCisgbGlic3ViZGlyczoKKyAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCisgCistbGliZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJlZmkuYSglKSwkKE9CSlMpKQorK2xpYmVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgbGliZWZpLmEgKn4gJChPQkpTKSAqLyoubworSW5kZXg6IGdudS1lZmktMy4wL2dudWVmaS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1lZmktMy4wLm9yaWcvZ251ZWZpL01ha2VmaWxlCisrKysgZ251LWVmaS0zLjAvZ251ZWZpL01ha2VmaWxlCitAQCAtNTEsNyArNTEsOCBAQCBUQVJHRVRTCT0gY3J0MC1lZmktJChBUkNIKS5vIGxpYmdudWVmaS5hCisgCisgYWxsOgkkKFRBUkdFVFMpCisgCistbGliZ251ZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJnbnVlZmkuYSglKSwkKE9CSlMpKQorK2xpYmdudWVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgJChUQVJHRVRTKSAqfiAqLm8gJChPQkpTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFiYTQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJMaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBFRkkgYmluYXJpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dudS1lZmkvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFybS5TO2JlZ2lubGluZT00O2VuZGxpbmU9OTttZDU9MjI0MGQ3YmJkZjA5MjgyOTRjMmY0YTY4YjE0ZDY1OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFhcmNoNjQuUztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT1lNTgyNzY0YTQ3NzZlNjBjOTViZjlhYjYxNzM0M2QzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxpbnRmLmg7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjA7bWQ1PTIwMjc2NmI3OWQ3MDhlZmYzY2M3MGZjZTE1ZmI4MGM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbHBhcm0uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTExO21kNT00NjhiMTIzMWIwNWJiYzg0YmFlM2EwZDU3NzRlM2JiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2RpdjY0LlM7YmVnaW5saW5lPTY7ZW5kbGluZT0xMjttZDU9YTk2Yzg0ZjVhZDEyYjRmMDExZjk4YjVkMDM5MjQyZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9tYXRoLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMDttZDU9NjRkZDE5ODdjZWUxZGNmNTlkMTFhYTU3MmNmYTY0NGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9pbml0cGxhdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTA7bWQ1PTY0ZGQxOTg3Y2VlMWRjZjU5ZDExYWE1NzJjZmE2NDRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vbGliMWZ1bmNzLlM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9ZjU2ZDVlYmJjODcxMzZiYzY2Y2ZlMjRkYjgyYmNmMDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvbWF0aC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PWNmYWRlNGM1NjBlMDMzYTdiYjAyZGFiMjgyODcyYzdkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L2luaXRwbGF0LmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9OTAwY2IxZmZiZTNlMWRlZDM0NDEwMmJlOTIxODMwZjEgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE1YTRiY2JjMThhOWE1ZTgxMTBlZDk1NTk3MDYyMmU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1MzBmMjFhMTVmZDljMjE0ZGQ5MmQyOWE2Y2FhMjBmYWM5ODkyODkyNjc1MTIwMjBiNmRhMWY1ZTZmNWI0Y2IiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKiktbGludXgiCisKK2RlZiBnbnVfZWZpX2FyY2goZCk6CisgICAgaW1wb3J0IHJlCisgICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHJlLm1hdGNoKCJpWzM0NTY3ODldODYiLCB0YXJjaCk6CisgICAgICAgIHJldHVybiAiaWEzMiIKKyAgICByZXR1cm4gdGFyY2gKKworRVhUUkFfT0VNQUtFID0gIidBUkNIPSR7QGdudV9lZmlfYXJjaChkKX0nICdDQz0ke0NDfScgJ0FTPSR7QVN9JyAnTEQ9JHtMRH0nICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyAnT0JKQ09QWT0ke09CSkNPUFl9JyAnUFJFRklYPSR7cHJlZml4fScgJ0xJQkRJUj0ke2xpYmRpcn0nIFwKKyAgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLmxkcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmFhYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDI3NWZlMDI2OWVjYzAwYWY0Nzg4YWZhZjlkYzE1MWE1MGIyNTY0NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBBdWcgMjAxNCAxOToyNjoxNCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2l0aCBnbGliYyAyLjIwCisKKyogZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jOiBzcXVhaGVzIGJlbG93IHdhcm5pbmcKKyAgd2FybmluZzogI3dhcm5pbmcgIl9CU0RfU09VUkNFIGFuZCBfU1ZJRF9TT1VSQ0UgYXJlIGRlcHJlY2F0ZWQsIHVzZSBfREVGQVVMVF9TT1VSQ0UiCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKy0tLQorIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworaW5kZXggN2U3MjVmNi4uOGRkOGU2NSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitAQCAtMTksNyArMTksNyBAQAorIAorICNpbmNsdWRlIDxjb25maWctdXRpbC5oPgorIAorLSNkZWZpbmUgX0JTRF9TT1VSQ0UKKysjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRQorICNpbmNsdWRlIDxncnViL2ZzLmg+CisgI2luY2x1ZGUgPGdydWIvZmlsZS5oPgorICNpbmNsdWRlIDxncnViL2Rpc2suaD4KKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RjMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvZ251bGliL01ha2VmaWxlLmFtCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KK0BAIC00MTAsNyArNDEwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWUzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT3JpZ2luYWwgY29tbWl0OiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9ncnViLmdpdC9jb21taXQvZ3J1Yi1jb3JlL25ldC9ib290cC5jP2lkPWYwNmMyMTcyYzBiMzIwNTJmMjJlMzc1MjM0NDVjZjhlN2FmZmFlYTMKKworRnJvbSAxNDlkMmExNGY0NzIzNzc4Y2VkMjNmNDM5NDg3MjAxY2NiZjFhMmM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjMgQXByIDIwMTUgMDc6MDM6MzQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFyc2VfZGhjcF92ZW5kb3I6IEFkZCBtaXNzaW5nIGNvbnN0IHF1YWxpZmllcnMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBncnViLWNvcmUvbmV0L2Jvb3RwLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jIGIvZ3J1Yi1jb3JlL25ldC9ib290cC5jCitpbmRleCBiYzA3ZDUzLi40NDEzMWVkIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jCisrKysgYi9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKK0BAIC01Miw5ICs1Miw5IEBAIHNldF9lbnZfbGltbl9ybyAoY29uc3QgY2hhciAqaW50ZXJuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgsCisgfQorIAorIHN0YXRpYyB2b2lkCistcGFyc2VfZGhjcF92ZW5kb3IgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZlbmQsIGludCBsaW1pdCwgaW50ICptYXNrKQorK3BhcnNlX2RoY3BfdmVuZG9yIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2ZW5kLCBpbnQgbGltaXQsIGludCAqbWFzaykKKyB7CistICBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisrICBjb25zdCBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisgCisgICBwdHIgPSBwdHIwID0gdmVuZDsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NmZyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhNTNkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jZmcKQEAgLTAsMCArMSwyIEBACitzZWFyY2guZmlsZSAoJGNtZHBhdGgpL0VGSS9CT09UL2dydWIuY2ZnIHJvb3QKK3NldCBwcmVmaXg9KCRyb290KS9FRkkvQk9PVApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWVjZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRGlzYWJsZSBsaWJsem1hIGlmIC0tZW5hYmxlLWxpYmx6bWE9bm8KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyOSwxMCArMTAyOSwyMCBAQCBmaQorIAorIEFDX1NVQlNUKFtMSUJHRU9NXSkKKyAKKy1BQ19DSEVDS19MSUIoW2x6bWFdLCBbbHptYV9jb2RlXSwKKy0gICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKy0gICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9MSUJMWk1BXSwgWzFdLAorLSAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTFpNQSBsaWJyYXJ5Ll0pXSwpCisrQUNfQVJHX0VOQUJMRShbbGlibHptYV0sCisrICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmx6bWFdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgbGlibHptYSBpbnRlZ3JhdGlvbiAoZGVmYXVsdD1ndWVzc2VkKV0pXSkKKytpZiB0ZXN0IHgiJGVuYWJsZV9saWJsem1hIiA9IHhubyA7IHRoZW4KKysgIGxpYmx6bWFfZXhjdXNlPSJleHBsaWNpdGx5IGRpc2FibGVkIgorK2ZpCisrCisraWYgdGVzdCB4IiRsaWJsem1hX2V4Y3VzZSIgPSB4IDsgdGhlbgorKyAgQUNfQ0hFQ0tfTElCKFtsem1hXSwgW2x6bWFfY29kZV0sCisrICAgICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0xJQkxaTUFdLCBbMV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIExaTUEgbGlicmFyeS5dKV0sKQorK2ZpCisrCisgQUNfU1VCU1QoW0xJQkxaTUFdKQorIAorIEFDX0FSR19FTkFCTEUoW2xpYnpmc10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTk5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitncnViLWNvcmUvbmV0L3RmdHAuYzogZml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KKworCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisJKHRmdHBfcmVjZWl2ZSk6IExpa2V3aXNlLgorCVJlcG9ydGVkIGJ5OiBNaWNoYWVsIERhdmlkc2F2ZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggODFiZGFlOS4uYzJmNDJkNSAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDkgQEAKKysyMDEyLTA3LTAyICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisrCisrCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisrCSh0ZnRwX3JlY2VpdmUpOiBMaWtld2lzZS4KKysJUmVwb3J0ZWQgYnk6IE1pY2hhZWwgRGF2aWRzYXZlci4KKysKKyAyMDEyLTA2LTI3ICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi4wMC4KK2RpZmYgLS1naXQgYS9ncnViLWNvcmUvbmV0L3RmdHAuYyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitpbmRleCA5YzcwZWZiLi5kMGYzOWVhIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKKysrKyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitAQCAtMTQzLDcgKzE0Myw3IEBAIGFjayAodGZ0cF9kYXRhX3QgZGF0YSwgZ3J1Yl91aW50MTZfdCBibG9jaykKKyAKKyAgIHRmdHBoX2FjayA9IChzdHJ1Y3QgdGZ0cGhkciAqKSBuYl9hY2suZGF0YTsKKyAgIHRmdHBoX2Fjay0+b3Bjb2RlID0gZ3J1Yl9jcHVfdG9fYmUxNiAoVEZUUF9BQ0spOworLSAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGJsb2NrOworKyAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGdydWJfY3B1X3RvX2JlMTYgKGJsb2NrKTsKKyAKKyAgIGVyciA9IGdydWJfbmV0X3NlbmRfdWRwX3BhY2tldCAoZGF0YS0+c29jaywgJm5iX2Fjayk7CisgICBpZiAoZXJyKQorQEAgLTIyNSw3ICsyMjUsNyBAQCB0ZnRwX3JlY2VpdmUgKGdydWJfbmV0X3VkcF9zb2NrZXRfdCBzb2NrIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJICAgIGdydWJfcHJpb3JpdHlfcXVldWVfcG9wIChkYXRhLT5wcSk7CisgCisgCSAgICBpZiAoZmlsZS0+ZGV2aWNlLT5uZXQtPnBhY2tzLmNvdW50IDwgNTApCistCSAgICAgIGVyciA9IGFjayAoZGF0YSwgdGZ0cGgtPnUuZGF0YS5ibG9jayk7CisrCSAgICAgIGVyciA9IGFjayAoZGF0YSwgZGF0YS0+YmxvY2sgKyAxKTsKKyAJICAgIGVsc2UKKyAJICAgICAgeworIAkJZmlsZS0+ZGV2aWNlLT5uZXQtPnN0YWxsID0gMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWFlMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2hlbiB1c2luZyBmbGV4LTIuNS4zNy4gSXQgd2FzIHRha2VuIGZyb20gdXBzdHJlYW0uCisKK09yaWdpbmFsIGF1dGhvciBpczogVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCTIwMTItMDYtMDggMjM6MjQ6MTUuMDAwMDAwMDAwICswMzAwCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9zY3JpcHQveXlsZXgubAkyMDEzLTA3LTMxIDE0OjM0OjQwLjcwODEwMDk4MiArMDMwMAorQEAgLTI5LDYgKzI5LDggQEAKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbXBhcmUiCisgCisgI2RlZmluZSB5eWZyZWUgICAgZ3J1Yl9sZXhlcl95eWZyZWUKKyAjZGVmaW5lIHl5YWxsb2MgICBncnViX2xleGVyX3l5YWxsb2MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg5MTZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gN2FiNTc2YTdjNjE0MDZiN2U2MzczOWQxYjExMDE3YWUzMzZiOTAwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIE1hciAyMDE0IDAzOjM0OjQ4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdydWIuZC8xMF9saW51eC5pbjogYWRkIG9lJ3Mga2VybmVsIG5hbWUKKworT3VyIGtlcm5lbCdzIG5hbWUgaXMgYnpJbWFnZSwgd2UgbmVlZCBhZGQgaXQgdG8gZ3J1Yi5kLzEwX2xpbnV4LmluIHNvCit0aGF0IHRoZSBncnViLW1rY29uZmlnIGFuZCBncnViLWluc3RhbGwgY2FuIHdvcmsgY29ycmVjdGx5LgorCitXZSBvbmx5IG5lZWQgYWRkIHRoZSBiekltYWdlIHRvIHV0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluLCBidXQgYWxzbyBhZGQgaXQKK3RvIHV0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiB0byBrZWVwIGNvbXBhdGliaWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdXRpbC9ncnViLmQvMTBfbGludXguaW4gICAgIHwgICAgNCArKy0tCisgdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC9ncnViLmQvMTBfbGludXguaW4gYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgoraW5kZXggMTQ0MDJlOC4uYzU4ZjQxNyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCisrKysgYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgorQEAgLTE1MywxMSArMTUzLDExIEBAIEVPRgorIG1hY2hpbmU9YHVuYW1lIC1tYAorIGNhc2UgIngkbWFjaGluZSIgaW4KKyAgICAgeGk/ODYgfCB4eDg2XzY0KQorLQlsaXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnV6LSogL3ZtbGludXotKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisrCWxpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2UtKiAvYnpJbWFnZS0qIC9ib290L3ZtbGludXotKiAvdm1saW51ei0qIC9ib290L2tlcm5lbC0qIDsgZG8KKyAgICAgICAgICAgICAgICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIiA7IHRoZW4gZWNobyAtbiAiJGkgIiA7IGZpCisgICAgICAgICAgICAgICBkb25lYCA7OworICAgICAqKSAKKy0JbGlzdD1gZm9yIGkgaW4gL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvdm1saW51ei0qIC92bWxpbnV4LSogL2Jvb3Qva2VybmVsLSogOyBkbworKwlsaXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlLSogL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvYnpJbWFnZS0qIC92bWxpbnV6LSogL3ZtbGludXgtKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisgICAgICAgICAgICAgICAgICAgaWYgZ3J1Yl9maWxlX2lzX25vdF9nYXJiYWdlICIkaSIgOyB0aGVuIGVjaG8gLW4gIiRpICIgOyBmaQorIAkgICAgIGRvbmVgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiBiL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgoraW5kZXggMWQ5NDUwMi4uYjJkZWNmMyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgorKysrIGIvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCitAQCAtMTM4LDcgKzEzOCw3IEBAIEVPRgorIEVPRgorIH0KKyAKKy1saW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnVbeHpdLSogL3ZtbGludVt4el0tKiAvYm9vdC9rZXJuZWwtKjsgZG8KKytsaW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlW3h6XS0qIC9iekltYWdlW3h6XS0qIC9ib290L3ZtbGludVt4el0tKiAvdm1saW51W3h6XS0qIC9ib290L2tlcm5lbC0qOyBkbworICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIjsgdGhlbgorICAgICAJYmFzZW5hbWU9JChiYXNlbmFtZSAkaSkKKyAJdmVyc2lvbj0kKGVjaG8gJGJhc2VuYW1lIHwgc2VkIC1lICJzLF5bXjAtOV0qLSwsZyIpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllZjRkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgY29uZmlndXJlIGZhaWx1cmUKKworY29uZmlndXJlOjIwMzA2OiBjaGVja2luZyB3aGV0aGVyIGBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cnIGdlbmVyYXRlcyBjYWxscyB0byBgX19lbmFibGVfZXhlY3V0ZV9zdGFjaygpJworY29uZmlndXJlOjIwMzIwOiBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODcgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLVduby10cmFtcG9saW5lcyAtZmFsaWduLWxvb3BzPTEgLVMgY29uZnRlc3QuYworY29uZnRlc3QuYzozMDg6NjogZXJyb3I6IG5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ2cnIFstV2Vycm9yPW1pc3NpbmctcHJvdG90eXBlc10KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCitjb25maWd1cmU6MjAzMjM6ICQ/ID0gMQorY29uZmlndXJlOjIwMzI3OiBlcnJvcjogY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93IGZhaWxlZCB0byBwcm9kdWNlIGFzc2VtYmx5IGNvZGUKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMTMKKworSW5kZXg6IGdydWItMi4wMC9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9hY2luY2x1ZGUubTQKKysrKyBncnViLTIuMDAvYWNpbmNsdWRlLm00CitAQCAtMzE3LDYgKzMxNyw3IEBAIGRubCBDaGVjayBpZiB0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgY2EKKyBBQ19ERUZVTihbZ3J1Yl9DSEVDS19FTkFCTEVfRVhFQ1VURV9TVEFDS10sWworIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBgJENDJyBnZW5lcmF0ZXMgY2FsbHMgdG8gYF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2soKSddKQorIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCisrdm9pZCBnIChpbnQpOworIHZvaWQgZiAoaW50ICgqcCkgKHZvaWQpKTsKKyB2b2lkIGcgKGludCBpKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1N2YxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29uZmlndXJlIGlzc3VlIGZvciBncnViIHdoZW4gLW1mcG1hdGg9c3NlIGlzIGluIHRoZSBnY2MgcGFyYW1ldGVycy4KKworY29uZmlndXJlOjIwNTc0OiBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vdXNyL2xvY2FsL2Rldi95b2N0by9ncnVidGVzdDIvYnVpbGQvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtZm5vLWR3YXJmMi1jZmktYXNtIC1tMzIgLWZuby1zdGFjay1wcm90ZWN0b3IgLW1uby1zdGFjay1hcmctcHJvYmUgLVdlcnJvciAtbm9zdGRsaWIgLVdsLC0tZGVmc3ltLF9fX21haW49MHg4MTAwICAtV2FsbCAtVyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAtREdSVUJfTUFDSElORV9QQ0JJT1M9MSAtREdSVUJfTUFDSElORT1JMzg2X1BDIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIGNvbmZ0ZXN0LmMgID4mNQorY29uZnRlc3QuYzoxOjA6IGVycm9yOiBTU0UgaW5zdHJ1Y3Rpb24gc2V0IGRpc2FibGVkLCB1c2luZyAzODcgYXJpdGhtZXRpY3MgWy1XZXJyb3JdCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNC8xMworCitJbmRleDogZ3J1Yi0xLjk5L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdydWItMS45OS9jb25maWd1cmUuYWMKK0BAIC0zNzgsNyArMzc4LDcgQEAgaWYgdGVzdCAieCR0YXJnZXRfY3B1IiA9IHhpMzg2OyB0aGVuCisgCisgICAjIFNvbWUgdG9vbGNoYWlucyBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYnkgZGVmYXVsdCwgYnV0IHRoZXkgbmVlZAorICAgIyByZWdpc3RlcnMgdGhhdCBhcmVuJ3Qgc2V0IHVwIHByb3Blcmx5IGluIEdSVUIuCistICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyIKKysgIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IC1tZnBtYXRoPTM4NyIKKyBmaQorIAorICMgQnkgZGVmYXVsdCwgR0NDIDQuNCBnZW5lcmF0ZXMgLmVoX2ZyYW1lIHNlY3Rpb25zIGNvbnRhaW5pbmcgdW53aW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4OGZjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorQWxsb3cgYSBjb21waWxhdGlvbiB3aXRob3V0IC1tY21vZGVsPWxhcmdlCisKK0l0J3MgcHJvdmlkZWQgYnkgVmxhZGltaXIgU2VyYmluZW5rbywgYW5kIGhlIHdpbGwgY29tbWl0CitpdCB1cHN0cmVhbSBzbyBpdCBzaG91bGQgYmUgYmFja3BvcnQgcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworLS0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmOGZiOGEuLjJjNWU2ZWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcyMyw5ICs3MjMsNyBAQCBpZiB0ZXN0ICIkdGFyZ2V0X2NwdSIgPSB4ODZfNjQ7IHRoZW4KKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9eWVzXSwKKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9bm9dKQorICAgXSkKKy0gIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHhubzsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoWy1tY21vZGVsPWxhcmdlIG5vdCBzdXBwb3J0ZWQuIFVwZ3JhZGUgeW91ciBnY2MuXSkKKy0gIGVsc2UKKysgIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHh5ZXM7IHRoZW4KKyAgICAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1jbW9kZWw9bGFyZ2UiCisgICBmaQorIGZpCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworaW5kZXggMTQwOWI1ZC4uNmU5ZGFjZSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworQEAgLTMyLDYgKzMyLDEyIEBACisgI2RlZmluZSBCWVRFU19UT19QQUdFUyhieXRlcykJKCgoYnl0ZXMpICsgMHhmZmYpID4+IDEyKQorICNkZWZpbmUgUEFHRVNfVE9fQllURVMocGFnZXMpCSgocGFnZXMpIDw8IDEyKQorCisrI2lmIGRlZmluZWQgKF9fY29kZV9tb2RlbF9sYXJnZV9fKSB8fCAhZGVmaW5lZCAoX194ODZfNjRfXykKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweGZmZmZmZmZmCisrI2Vsc2UKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweDdmZmZmZmZmCisrI2VuZGlmCisrCisgLyogVGhlIHNpemUgb2YgYSBtZW1vcnkgbWFwIG9idGFpbmVkIGZyb20gdGhlIGZpcm13YXJlLiBUaGlzIG11c3QgYmUKKyAgICBhIG11bHRpcGxpZXIgb2YgNEtCLiAgKi8KKyAjZGVmaW5lIE1FTU9SWV9NQVBfU0laRQkweDMwMDAKK0BAIC01OCw3ICs2NCw3IEBAIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzIChncnViX2VmaV9waHlzaWNhbF9hZGRyZXNzX3QgYWRkcmVzcywKKworICNpZiAxCisgICAvKiBMaW1pdCB0aGUgbWVtb3J5IGFjY2VzcyB0byBsZXNzIHRoYW4gNEdCIGZvciAzMi1iaXQgcGxhdGZvcm1zLiAgKi8KKy0gIGlmIChhZGRyZXNzID4gMHhmZmZmZmZmZikKKysgIGlmIChhZGRyZXNzID4gTUFYX1VTQUJMRV9BRERSRVNTKQorICAgICByZXR1cm4gMDsKKyAjZW5kaWYKKworQEAgLTY2LDcgKzcyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgaWYgKGFkZHJlc3MgPT0gMCkKKyAgICAgeworICAgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9NQVhfQUREUkVTUzsKKy0gICAgICBhZGRyZXNzID0gMHhmZmZmZmZmZjsKKysgICAgICBhZGRyZXNzID0gTUFYX1VTQUJMRV9BRERSRVNTOworICAgICB9CisgICBlbHNlCisgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9BRERSRVNTOworQEAgLTg2LDcgKzkyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgICB7CisgICAgICAgLyogVWdnaCwgdGhlIGFkZHJlc3MgMCB3YXMgYWxsb2NhdGVkLi4uIFRoaXMgaXMgdG9vIGFubm95aW5nLAorIAkgc28gcmVhbGxvY2F0ZSBhbm90aGVyIG9uZS4gICovCistICAgICAgYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisrICAgICAgYWRkcmVzcyA9IE1BWF9VU0FCTEVfQUREUkVTUzsKKyAgICAgICBzdGF0dXMgPSBlZmlfY2FsbF80IChiLT5hbGxvY2F0ZV9wYWdlcywgdHlwZSwgR1JVQl9FRklfTE9BREVSX0RBVEEsIHBhZ2VzLCAmYWRkcmVzcyk7CisgICAgICAgZ3J1Yl9lZmlfZnJlZV9wYWdlcyAoMCwgcGFnZXMpOworICAgICAgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKK0BAIC0zMTksNyArMzI1LDcgQEAgZmlsdGVyX21lbW9yeV9tYXAgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QgKm1lbW9yeV9tYXAsCisgICAgIHsKKyAgICAgICBpZiAoZGVzYy0+dHlwZSA9PSBHUlVCX0VGSV9DT05WRU5USU9OQUxfTUVNT1JZCisgI2lmIDEKKy0JICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCA8PSAweGZmZmZmZmZmCisrCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgPD0gTUFYX1VTQUJMRV9BRERSRVNTCisgI2VuZGlmCisgCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgKyBQQUdFU19UT19CWVRFUyAoZGVzYy0+bnVtX3BhZ2VzKSA+IDB4MTAwMDAwCisgCSAgJiYgZGVzYy0+bnVtX3BhZ2VzICE9IDApCitAQCAtMzM3LDkgKzM0Myw5IEBAIGZpbHRlcl9tZW1vcnlfbWFwIChncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICptZW1vcnlfbWFwLAorICNpZiAxCisgCSAgaWYgKEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkKKyAJICAgICAgKyBmaWx0ZXJlZF9kZXNjLT5udW1fcGFnZXMKKy0JICAgICAgPiBCWVRFU19UT19QQUdFUyAoMHgxMDAwMDAwMDBMTCkpCisrCSAgICAgID4gQllURVNfVE9fUEFHRVMgKE1BWF9VU0FCTEVfQUREUkVTUysxTEwpKQorIAkgICAgZmlsdGVyZWRfZGVzYy0+bnVtX3BhZ2VzCistCSAgICAgID0gKEJZVEVTX1RPX1BBR0VTICgweDEwMDAwMDAwMExMKQorKwkgICAgICA9IChCWVRFU19UT19QQUdFUyAoTUFYX1VTQUJMRV9BRERSRVNTKzFMTCkKKyAJCSAtIEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkpOworICNlbmRpZgorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworaW5kZXggNjVmMDllZi4uMTdjMTIxNSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCisrKysgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworQEAgLTEwMCwxNCArMTAwLDMyIEBAIGdydWJfYXJjaF9kbF9yZWxvY2F0ZV9zeW1ib2xzIChncnViX2RsX3QgbW9kLCB2b2lkICplaGRyKQorIAkJICAgIGJyZWFrOworCisgCQkgIGNhc2UgUl9YODZfNjRfUEMzMjoKKy0JCSAgICAqYWRkcjMyICs9IHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlIC0KKy0JCSAgICAgICAgICAgICAgKEVsZjY0X1h3b3JkKSBzZWctPmFkZHIgLSByZWwtPnJfb2Zmc2V0OworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZTsKKysJCSAgICAgIHZhbHVlID0gKChncnViX2ludDMyX3QpICphZGRyMzIpICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLQorKwkJCShFbGY2NF9Yd29yZCkgc2VnLT5hZGRyIC0gcmVsLT5yX29mZnNldDsKKysJCSAgICAgIGlmICh2YWx1ZSAhPSAoZ3J1Yl9pbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorIAkJICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgY2FzZSBSX1g4Nl82NF8zMjoKKysJCSAgICB7CisrCQkgICAgICBncnViX3VpbnQ2NF90IHZhbHVlID0gKmFkZHIzMiArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX3VpbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorKwkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIGNhc2UgUl9YODZfNjRfMzJTOgorLSAgICAgICAgICAgICAgICAgICAgKmFkZHIzMiArPSByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZSA9ICgoZ3J1Yl9pbnQzMl90KSAqYWRkcjMyKSArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX2ludDMyX3QpIHZhbHVlKQorKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKysJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKKysJCSAgICB9CisrCQkgICAgYnJlYWs7CisKKyAJCSAgZGVmYXVsdDoKKyAJCSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxMjYyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZWI2MzY4ZTY1ZjY5ODhlZWJhZDI2Y2ViZGVjMDU3Zjc5N2JjZWI0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IFNlcCAyMDE0IDAwOjAyOjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdsaWJjIDIuMjAKKworKiBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmM6IHNxdWFoZXMgYmVsb3cgd2FybmluZworICB3YXJuaW5nOiAjd2FybmluZyAiX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRSBhcmUgZGVwcmVjYXRlZCwgdXNlIF9ERUZBVUxUX1NPVVJDRSIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitpbmRleCAzY2IwODljLi5hNTFlZTMyIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgKi8KKy0jZGVmaW5lIF9CU0RfU09VUkNFCisrI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKKyAjaW5jbHVkZSA8Z3J1Yi9mcy5oPgorICNpbmNsdWRlIDxncnViL2ZpbGUuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2OTUxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworT3VyIHVzZSBvZiBncnViLWluc3RhbGwgZG9lc24ndCByZXF1aXJlIHRoZSAteCBvcHRpb24sIHNvIHdlIHNob3VsZCBiZQorYmUgYWJsZSBtYWtlIHVzZSBvZiBncmVwIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdC4KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdydWItMS45OS91dGlsL2dydWItaW5zdGFsbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MjAuMDkzOTA2Njc5IC0wNTAwCisrKysgZ3J1Yi0xLjk5L3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MzAuODU0NzM3ODgyIC0wNTAwCitAQCAtNTEwLDcgKzUxMCw3IEBACisgCisgaWYgWyAieCR7ZGV2YWJzdHJhY3Rpb25fbW9kdWxlfSIgPSAieCIgXSA7IHRoZW4KKyAgICAgaWYgWyB4IiR7aW5zdGFsbF9kZXZpY2V9IiAhPSB4IF07IHRoZW4KKy0gICAgICBpZiBlY2hvICIke2luc3RhbGxfZGV2aWNlfSIgfCBncmVwIC1xeCAiKC4qKSIgOyB0aGVuCisrICAgICAgaWYgZWNobyAiJHtpbnN0YWxsX2RldmljZX0iIHwgZ3JlcCAtcSAiKC4qKSIgOyB0aGVuCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSIke2luc3RhbGxfZGV2aWNlfSIKKyAgICAgICBlbHNlCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSJgIiRncnViX3Byb2JlIiAtLWRldmljZS1tYXA9IiR7ZGV2aWNlX21hcH0iIC0tdGFyZ2V0PWRyaXZlIC0tZGV2aWNlICIke2luc3RhbGxfZGV2aWNlfSJgIiB8fCBleGl0IDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmQwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1NpZ25lZC1vZmYtYnk6IFJhZHUgTW9pc2FuIDxyYWR1Lm1vaXNhbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSSBoYWQgYW4gZXJyb3IgYmVjYXVzZSBvZiBhbiB1bnVzZWQgcmV0dXJuIHZhbHVlIGZvciByZWFkKCkuCitJIGFkZGVkIC1Xbm8tdW51c2VkLXJlc3VsdC4KKworSW5kZXg6IGdydWItMi4wMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wOC0xMyAxNjozMjozMy4wMDAwMDAwMDAgKzAzMDAKKysrKyBncnViLTIuMDAvY29uZmlndXJlLmFjCTIwMTItMDgtMTMgMTY6Mzg6MjIuMDAwMDAwMDAwICswMzAwCitAQCAtMzk0LDcgKzM5NCw3IEBACisgTElCUz0iIgorIAorICMgZGVidWcgZmxhZ3MuCistV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1XdmFyaWFkaWMtbWFjcm9zIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdwb2ludGVyLXNpZ24iCisrV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1Xbm8tdW51c2VkLXJlc3VsdCAtV3ZhcmlhZGljLW1hY3JvcyAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAtV3dyaXRlLXN0cmluZ3MgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzIC1XcG9pbnRlci1zaWduIgorIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgJFdBUk5fRkxBR1MiCisgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgJFdBUk5fRkxBR1MgLWcgLVdyZWR1bmRhbnQtZGVjbHMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyBUQVJHRVRfQ0NBU0ZMQUdTPSIkVEFSR0VUX0NDQVNGTEFHUyAtZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExNGY0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gOGZiYjE1MGE1Njk2NmVkZGU0ZGMwN2I4ZDAxYmU1ZWIxNDliNjVhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvbGluIFdhdHNvbiA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KK0RhdGU6IFN1biwgMjAgSmFuIDIwMTMgMjM6MDM6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdICogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgKGdydWJfY21kX2luaXRyZCk6IERvbid0CisgYWRkIHRoZSBpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorIHRoaXMgYWRkcmVzcy4KKworY29tbWl0IDZhMGRlYmJkOTE2N2U4Zjc5Y2RlZjU0OTdhNzNkMjNlNTgwYzBjZDQgdXBzdHJlYW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTaGFuIEhhaSA8c2hhbi5oYWlAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGMyZjQyZDUuLjQwY2I1MDggMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw5IEBACisrMjAxMy0wMS0yMCAgQ29saW4gV2F0c29uICA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KKysKKysJKiBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyAoZ3J1Yl9jbWRfaW5pdHJkKTogRG9uJ3QgYWRkIHRoZQorKwlpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorKwl0aGlzIGFkZHJlc3MuCisrCisgMjAxMi0wNy0wMiAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorIAorIAkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgorZGlmZiAtLWdpdCBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK2luZGV4IDYyMDg3Y2YuLmUyNDI1YzggMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYworKysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK0BAIC0xMDk4LDggKzEwOTgsNyBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICB3b3JzZSB0aGFuIHRoYXQgb2YgTGludXggMi4zLnh4LCBzbyBhdm9pZCB0aGUgbGFzdCA2NGtiLiAgKi8KKyAgIGFkZHJfbWF4IC09IDB4MTAwMDA7CisgCistICBhZGRyX21pbiA9IChncnViX2FkZHJfdCkgcHJvdF9tb2RlX3RhcmdldCArIHByb3RfaW5pdF9zcGFjZQorLSAgICAgICAgICAgICArIHBhZ2VfYWxpZ24gKHNpemUpOworKyAgYWRkcl9taW4gPSAoZ3J1Yl9hZGRyX3QpIHByb3RfbW9kZV90YXJnZXQgKyBwcm90X2luaXRfc3BhY2U7CisgCisgICAvKiBQdXQgdGhlIGluaXRyZCBhcyBoaWdoIGFzIHBvc3NpYmxlLCA0S2lCIGFsaWduZWQuICAqLworICAgYWRkciA9IChhZGRyX21heCAtIHNpemUpICYgfjB4RkZGOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU5YTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworcmVtb3ZlIHRoZSBncnViLXNwYXJjNjQtc2V0dXAgZmlsZXMgZnJvbSB0aGUgeDg2IGJ1aWxkcy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworLS0tIGEvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQxOjAyLjQ0MTAxMTI3OCAtMDcwMAorKysrIGIvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQ0OjI2LjI0NTAyMTE0MiAtMDcwMAorQEAgLTQ2OTIsOSArNDY5Miw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2VtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3MTUsOSArNDcxNSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcGMKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00NzM4LDkgKzQ3MzgsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X2VmaQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3NjEsOSArNDc2MSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcWVtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3ODQsOSArNDc4NCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfY29yZWJvb3QKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODA3LDkgKzQ4MDcsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X211bHRpYm9vdAorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ4MzAsOSArNDgzMCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfaWVlZTEyNzUKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODUzLDkgKzQ4NTMsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF94ODZfNjRfZWZpCistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzZjc4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdydWItMS45OS9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTEuOTkub3JpZy9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgJMjAxMC0xMi0wMSAwNjo0NTo0My4wMDAwMDAwMDAgLTA4MDAKKysrKyBncnViLTEuOTkvZ3J1Yi1jb3JlL2dudWxpYi9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MjU6MDIuMDU3MDk5MTA3IC0wNzAwCitAQCAtMTQwLDggKzE0MCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2F1dG9oZWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9hdXRvaGVsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYyMDdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9hdXRvaGVsbC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBncnViLTAuOTcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0wLjk3Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDktMTIgMTc6Mzk6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3J1Yi0wLjk3L2NvbmZpZ3VyZS5hYwkyMDA4LTA5LTEyIDE3OjQwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDggKzYwLDggQEAgQUNfUFJPR19DQworIF9BTV9ERVBFTkRFTkNJRVMoQ0MpCisgCisgZG5sIEJlY2F1c2UgcmVjZW50IGF1dG9tYWtlIGNvbXBsYWlucyBhYm91dCBBUywgc2V0IGl0IGhlcmUuCistQ0NBUz0iJENDIgorLUFDX1NVQlNUKENDQVMpCisrQU1fUFJPR19BUworK0FDX1NVQlNUKEFTKQorIAorIEFDX0FSR19XSVRIKGJpbnV0aWxzLAorICAgWyAgLS13aXRoLWJpbnV0aWxzPURJUiAgICAgc2VhcmNoIHRoZSBkaXJlY3RvcnkgRElSIHRvIGZpbmQgYmludXRpbHNdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyNWQxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbTm8gTG9uZ2VyIE1haW50YWluZWRdCisKK2RpZmYgLU5hdXIgZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYyBncnViLTAuOTctODEwL3N0YWdlMi9mc3lzX2V4dDJmcy5jCistLS0gZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYwkyMDA4LTA3LTIxIDAwOjQwOjIxLjY2ODg3OTQ3NSAtMDYwMAorKysrIGdydWItMC45Ny04MTAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMJMjAwOC0wNy0yMSAwMTowMToxMS4wNjM5NTM3NzMgLTA2MDAKK0BAIC03OSw3ICs3OSw1MiBAQAorICAgICBfX3UzMiBzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisgICAgIF9fdTE2IHNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKyAgICAgX191MTYgc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworLSAgICBfX3UzMiBzX3Jlc2VydmVkWzIzNV07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKysgICAgLyoKKysgICAgICogVGhlc2UgZmllbGRzIGFyZSBmb3IgRVhUMl9EWU5BTUlDX1JFViBzdXBlcmJsb2NrcyBvbmx5LgorKyAgICAgKgorKyAgICAgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorKyAgICAgKiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IGlzIHRoYXQgaWYgdGhlcmUgaXMgYSBiaXQgc2V0CisrICAgICAqIGluIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QKKysgICAgICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKysgICAgICoKKysgICAgICogZTJmc2NrJ3MgcmVxdWlyZW1lbnRzIGFyZSBtb3JlIHN0cmljdDsgaWYgaXQgZG9lc24ndCBrbm93CisrICAgICAqIGFib3V0IGEgZmVhdHVyZSBpbiBlaXRoZXIgdGhlIGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlCisrICAgICAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisrICAgICAqIHRoaW5ncyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQuLi4KKysgICAgICovCisrICAgIF9fdTMyIHNfZmlyc3RfaW5vOwkJLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlICovCisrICAgIF9fdTE2IHNfaW5vZGVfc2l6ZTsJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisrICAgIF9fdTE2IHNfYmxvY2tfZ3JvdXBfbnI7CS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisrICAgIF9fdTMyIHNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX3JvX2NvbXBhdDsJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworKyAgICBfX3U4ICBzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKysgICAgY2hhciAgc192b2x1bWVfbmFtZVsxNl07CS8qIHZvbHVtZSBuYW1lICovCisrICAgIGNoYXIgIHNfbGFzdF9tb3VudGVkWzY0XTsJLyogZGlyZWN0b3J5IHdoZXJlIGxhc3QgbW91bnRlZCAqLworKyAgICBfX3UzMiBzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7IC8qIEZvciBjb21wcmVzc2lvbiAqLworKyAgICAvKgorKyAgICAgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisrICAgICAqIGhhcHBlbiBpZiB0aGUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmxhZyBpcyBvbi4KKysgICAgICovCisrICAgIF9fdTggIHNfcHJlYWxsb2NfYmxvY2tzOwkvKiBOciBvZiBibG9ja3MgdG8gdHJ5IHRvIHByZWFsbG9jYXRlKi8KKysgICAgX191OCAgc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX2dkdF9ibG9ja3M7LyogUGVyIGdyb3VwIHRhYmxlIGZvciBvbmxpbmUgZ3Jvd3RoICovCisrICAgIC8qCisrICAgICAqIEpvdXJuYWxpbmcgc3VwcG9ydCB2YWxpZCBpZiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIHNldC4KKysgICAgICovCisrICAgIF9fdTggc19qb3VybmFsX3V1aWRbMTZdOwkvKiB1dWlkIG9mIGpvdXJuYWwgc3VwZXJibG9jayAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfaW51bTsJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfZGV2OwkvKiBkZXZpY2UgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2xhc3Rfb3JwaGFuOwkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KKysgICAgX191MzIgc19oYXNoX3NlZWRbNF07CS8qIEhUUkVFIGhhc2ggc2VlZCAqLworKyAgICBfX3U4ICBzX2RlZl9oYXNoX3ZlcnNpb247CS8qIERlZmF1bHQgaGFzaCB2ZXJzaW9uIHRvIHVzZSAqLworKyAgICBfX3U4ICBzX2pubF9iYWNrdXBfdHlwZTsgCS8qIERlZmF1bHQgdHlwZSBvZiBqb3VybmFsIGJhY2t1cCAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOworKyAgICBfX3UzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKysgICAgX191MzIgc19maXJzdF9tZXRhX2JnOwkvKiBGaXJzdCBtZXRhYmxvY2sgZ3JvdXAgKi8KKysgICAgX191MzIgc19ta2ZzX3RpbWU7CQkvKiBXaGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkICovCisrICAgIF9fdTMyIHNfam5sX2Jsb2Nrc1sxN107IAkvKiBCYWNrdXAgb2YgdGhlIGpvdXJuYWwgaW5vZGUgKi8KKysgICAgX191MzIgc19yZXNlcnZlZFsxNzJdOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisgICB9OworIAorIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK0BAIC0yMTgsNiArMjYzLDE0IEBACisgI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLKHMpICAgICAgICAgIChFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyAjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0tfQklUUyhzKQkJKGxvZzIoRVhUMl9BRERSX1BFUl9CTE9DSyhzKSkpCisgCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFViAgIDAgICAvKiBUaGUgZ29vZCBvbGQgKG9yaWdpbmFsKSBmb3JtYXQgKi8KKysjZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYgICAgMSAgIC8qIFYyIGZvcm1hdCB3LyBkeW5hbWljIGlub2RlIHNpemVzICovCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisrI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykgICgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgPyBcCisrICAgICAgICAgICAgICAgICBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiBcCisrICAgICAgICAgICAgICAgICAocyktPnNfaW5vZGVfc2l6ZSkKKysjZGVmaW5lIEVYVDJfSU5PREVTX1BFUl9CTE9DSyhzKQkoRVhUMl9CTE9DS19TSVpFKHMpL0VYVDJfSU5PREVfU0laRShzKSkKKysKKyAvKiBsaW51eC9leHQyX2ZzLmggKi8KKyAjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRV9CSVRTKHMpICAgICAgICAoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCisgLyoga2luZCBvZiBmcm9tIGV4dDIvc3VwZXIuYyAqLworQEAgLTU1Myw3ICs2MDYsNyBAQAorICAgICAgIGdkcCA9IEdST1VQX0RFU0M7CisgICAgICAgaW5vX2JsayA9IGdkcFtkZXNjXS5iZ19pbm9kZV90YWJsZSArCisgCSgoKGN1cnJlbnRfaW5vIC0gMSkgJSAoU1VQRVJCTE9DSy0+c19pbm9kZXNfcGVyX2dyb3VwKSkKKy0JID4+IGxvZzIgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSkpOworKwkgPj4gbG9nMiAoRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSkpOworICNpZmRlZiBFMkRFQlVHCisgICAgICAgcHJpbnRmICgiaW5vZGUgdGFibGUgZnNibG9jaz0lZFxuIiwgaW5vX2Jsayk7CisgI2VuZGlmIC8qIEUyREVCVUcgKi8KK0BAIC01NjUsMTMgKzYxOCwxMiBAQAorICAgICAgIC8qIHJlc2V0IGluZGlyZWN0IGJsb2NrcyEgKi8KKyAgICAgICBtYXBibG9jazIgPSBtYXBibG9jazEgPSAtMTsKKyAKKy0gICAgICByYXdfaW5vZGUgPSBJTk9ERSArCistCSgoY3VycmVudF9pbm8gLSAxKQorLQkgJiAoRVhUMl9CTE9DS19TSVpFIChTVVBFUkJMT0NLKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpIC0gMSkpOworKyAgICAgIHJhd19pbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSgoY2hhciAqKUlOT0RFICsKKysJKChjdXJyZW50X2lubyAtIDEpICYgKEVYVDJfSU5PREVTX1BFUl9CTE9DSyAoU1VQRVJCTE9DSykgLSAxKSkgKgorKwlFWFQyX0lOT0RFX1NJWkUgKFNVUEVSQkxPQ0spKTsKKyAjaWZkZWYgRTJERUJVRworICAgICAgIHByaW50ZiAoImlwYj0lZCwgc2l6ZW9mKGlub2RlKT0lZFxuIiwKKy0JICAgICAgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSksCistCSAgICAgIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpKTsKKysJICAgICAgRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSwgRVhUMl9JTk9ERV9TSVpFIChTVVBFUkJMT0NLKSk7CisgICAgICAgcHJpbnRmICgiaW5vZGU9JXgsIHJhd19pbm9kZT0leFxuIiwgSU5PREUsIHJhd19pbm9kZSk7CisgICAgICAgcHJpbnRmICgib2Zmc2V0IGludG8gaW5vZGUgdGFibGUgYmxvY2s9JWRcbiIsIChpbnQpIHJhd19pbm9kZSAtIChpbnQpIElOT0RFKTsKKyAgICAgICBmb3IgKGkgPSAodW5zaWduZWQgY2hhciAqKSBJTk9ERTsgaSA8PSAodW5zaWduZWQgY2hhciAqKSByYXdfaW5vZGU7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Y3ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDc0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU3ViamVjdDogW1BBVENIXSBncnViOiBmaXggZm9yIGF1dG9tYWtlLTEuMTIKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBzdGFnZTEvTWFrZWZpbGUuYW06MjogZXJyb3I6ICdwa2dsaWJkaXInIGlzIG5vdCBhIGxlZ2l0aW1hdGUgZGlyZWN0b3J5IGZvciAnREFUQScKK3wgc3RhZ2UyL01ha2VmaWxlLmFtOjM1OiBlcnJvcjogJ3BrZ2xpYmRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgZm9yICdEQVRBJworfCBzdGFnZTIvTWFrZWZpbGUuYW06NDY6IGVycm9yOiAncGtnbGliZGlyJyBpcyBub3QgYSBsZWdpdGltYXRlIGRpcmVjdG9yeSBmb3IgJ0RBVEEnCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKK1RoZSB1cHN0cmVhbSBzdGF0dXMgaXMgbWFya2VkIGFzICdJbmFwcHJvcHJpYXRlJyBiZWNhdXNlIHRoaXMgcHJvYmxlbSBpcyBub3QgdW5jb21tb24sCitpdCBoYXMgYmVlbiB0aGVyZSBmb3IgYSBsb25nIHRpbWUgYW5kIG5vIGNoYW5nZSBpbiB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ3J1Yi0wLjk3L3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xLDcgKzEsNyBAQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCistbm9kaXN0X3BrZ2xpYl9EQVRBID0gc3RhZ2UxCisrcGtnZGF0YWRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCisrbm9kaXN0X3BrZ2RhdGFfREFUQSA9IHN0YWdlMQorIAorLUNMRUFORklMRVMgPSAkKG5vZGlzdF9wa2dsaWJfREFUQSkKKytDTEVBTkZJTEVTID0gJChub2Rpc3RfcGtnZGF0YV9EQVRBKQorIAorICMgV2UgY2FuJ3QgdXNlIGJ1aWx0aW5zIG9yIHN0YW5kYXJkIGluY2x1ZGVzLgorIEFNX0NDQVNGTEFHUyA9ICQoU1RBR0UxX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYworSW5kZXg6IGdydWItMC45Ny9zdGFnZTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMi9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UyL01ha2VmaWxlLmFtCitAQCAtMjcsMTIgKzI3LDEyIEBAIGxpYmdydWJfYV9DRkxBR1MgPSAkKEdSVUJfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvbGliIFwKKyAJLURVU0VfTUQ1X1BBU1NXT1JEUz0xIC1EU1VQUE9SVF9TRVJJQUw9MSAtRFNVUFBPUlRfSEVSQ1VMRVM9MQorIAorICMgU3RhZ2UgMiBhbmQgU3RhZ2UgMS41J3MuCistcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKytwa2dkYXRhZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKyAKKyBFWFRSQV9QUk9HUkFNUyA9IG5ibG9hZGVyLmV4ZWMgcHhlbG9hZGVyLmV4ZWMgZGlza2xlc3MuZXhlYworIAorIGlmIERJU0tMRVNTX1NVUFBPUlQKKy1wa2dsaWJfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorK3BrZ2RhdGFfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorIAlmZnNfc3RhZ2UxXzUgaXNvOTY2MF9zdGFnZTFfNSBqZnNfc3RhZ2UxXzUgbWluaXhfc3RhZ2UxXzUgXAorIAlyZWlzZXJmc19zdGFnZTFfNSB1ZnMyX3N0YWdlMV81IHZzdGFmc19zdGFnZTFfNSB4ZnNfc3RhZ2UxXzUgXAorIAluYmdydWIgcHhlZ3J1YgorQEAgLTQzLDcgKzQzLDcgQEAgbm9pbnN0X1BST0dSQU1TID0gcHJlX3N0YWdlMi5leGVjIHN0YXJ0LmV4ZWMgc3RhcnRfZWx0b3JpdG8uZXhlYyBcCisgCXJlaXNlcmZzX3N0YWdlMV81LmV4ZWMgdWZzMl9zdGFnZTFfNS5leGVjIHZzdGFmc19zdGFnZTFfNS5leGVjIFwKKyAJeGZzX3N0YWdlMV81LmV4ZWMgbmJsb2FkZXIuZXhlYyBweGVsb2FkZXIuZXhlYyBkaXNrbGVzcy5leGVjCisgZWxzZQorLXBrZ2xpYl9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisrcGtnZGF0YV9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisgCWZmc19zdGFnZTFfNSBpc285NjYwX3N0YWdlMV81IGpmc19zdGFnZTFfNSBtaW5peF9zdGFnZTFfNSBcCisgCXJlaXNlcmZzX3N0YWdlMV81IHVmczJfc3RhZ2UxXzUgdnN0YWZzX3N0YWdlMV81IHhmc19zdGFnZTFfNQorIG5vaW5zdF9EQVRBID0gcHJlX3N0YWdlMiBzdGFydCBzdGFydF9lbHRvcml0bworQEAgLTEwNSw3ICsxMDUsNyBAQCBlbHNlCisgQlVJTFRfU09VUkNFUyA9IHN0YWdlMl9zaXplLmgKKyBlbmRpZgorIAorLUNMRUFORklMRVMgPSAkKHBrZ2xpYl9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisrQ0xFQU5GSUxFUyA9ICQocGtnZGF0YV9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisgCisgc3RhZ2UyX3NpemUuaDogcHJlX3N0YWdlMgorIAktcm0gLWYgc3RhZ2UyX3NpemUuaAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDM3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitBZnRlciB0aGUgY29tbWl0ICJ0Y21vZGUtZGVmYXVsdDogc3dpdGNoIHRvIGdjYyA0LjYuMCBmb3IgeDg2LCB4ODYtNjQgJiBhcm0iLAord2UgZ290IGJ1ZyAxMDk5IChodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OSk6CisKK1J1bm5pbmcgImluc3RhbGwgLS1zdGFnZTI9L3NzZC9ib290L2dydWIvc3RhZ2UyIC9ib290L2dydWIvc3RhZ2UxKGhkMCkKKyAgICAgL2Jvb3QvZ3J1Yi9zdGFnZTIgcCAvYm9vdC9ncnViL21lbnUgbGlzdCIgZmFpbGVkCitFcnJvciA2OiBNaXNtYXRjaGVkIG9yIGNvcnJ1cHQgdmVyc2lvbiBvZiBzdGFnZTEvc3RhZ2UyCisKK1RoaXMgdHVybmVkIG91dCB0byBiZSBhIGdjYydzIGJ1Zy4gU2VlCitodHRwczovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYwNTEzCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM5MzMzCisKK1Vwc3RyZWFtIGdjYyBzZWVtcyB1bmludGVyZXN0ZWQgaW4gdGhlIGJ1Zywgc28gYXQgcHJlc2VudCB3ZSBjYW4gZGlzYWJsZSB0aGUKK29wdGlvbiBhcyBhIHdvcmthcm91bmQuIFRoYW5rcyBSeWFuIEhpbGwgZm9yIHRoZSBpbnZlc3RpZ2F0aW9uIGFuZCB0aGUKK3dvcmthcm91bmQgcGF0Y2guCisKK0RleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorV2VkIEp1biAyOSAyMDoyMTozOSBDU1QgMjAxMQorCistLS0gZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbS5vcmlnCisrKysgZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTc5LDcgKzc5LDcgQEAKKyBIRVJDVUxFU19GTEFHUyA9CisgZW5kaWYKKyAKKy1TVEFHRTJfQ09NUElMRSA9ICQoU1RBR0UyX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisrU1RBR0UyX0NPTVBJTEUgPSAkKFNUQUdFMl9DRkxBR1MpIC1mbm8tcmVvcmRlci1mdW5jdGlvbnMgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisgCSQoTkVUQk9PVF9GTEFHUykgJChTRVJJQUxfRkxBR1MpICQoSEVSQ1VMRVNfRkxBR1MpCisgCisgU1RBR0UxXzVfTElOSyA9IC1ub3N0ZGxpYiAtV2wsLU4gLVdsLC1UdGV4dCAtV2wsMjAwMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9vYmpjb3B5LWFic29sdXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9vYmpjb3B5LWFic29sdXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGUwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorCitUaGlzIHBhdGNoIGlzIGZyb20gdWJ1bnR1OgorICAqIG9iamNvcHktYWJzb2x1dGUuZGlmZiAodXBkYXRlKTogUmVtb3ZlIC5ub3RlLCAuY29tbWVudCwgYW5kCisgICAgLm5vdGUuZ251LmJ1aWxkLWlkIHNlY3Rpb25zIGZyb20gaW1hZ2VzIChMUDogIzQ0NDcwMykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gbG9uZ2VyIG1haW50YWluZWRdCisKK0luZGV4OiBiL2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvYWNpbmNsdWRlLm00CisrKysgYi9hY2luY2x1ZGUubTQKK0BAIC02MSw3ICs2MSw3IEBACisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbJHtDQy1jY30gY2Fubm90IGxpbmsgYXQgYWRkcmVzcyAkbGlua19hZGRyXSkKKyAgIGZpCistICBpZiBBQ19UUllfQ09NTUFORChbJHtPQkpDT1BZLW9iamNvcHl9IC1PIGJpbmFyeSBjb25mdGVzdC5leGVjIGNvbmZ0ZXN0XSk7IHRoZW4gOgorKyAgaWYgQUNfVFJZX0NPTU1BTkQoWyR7T0JKQ09QWS1vYmpjb3B5fSAtLW9ubHktc2VjdGlvbj0udGV4dCAtTyBiaW5hcnkgY29uZnRlc3QuZXhlYyBjb25mdGVzdF0pOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFske09CSkNPUFktb2JqY29weX0gY2Fubm90IGNyZWF0ZSBiaW5hcnkgZmlsZXNdKQorICAgZmkKK0luZGV4OiBiL3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xMiw0ICsxMiw0IEBACisKKyBTVUZGSVhFUyA9IC5leGVjCisgLmV4ZWM6CistCSQoT0JKQ09QWSkgLU8gYmluYXJ5ICQ8ICRACisrCSQoT0JKQ09QWSkgLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAkPCAkQAorSW5kZXg6IGIvc3RhZ2UyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTIvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTI5Myw0ICsyOTMsNCBAQAorICMgR2VuZXJhbCBydWxlIGZvciBtYWtpbmcgYSByYXcgYmluYXJ5LgorIFNVRkZJWEVTID0gLmV4ZWMKKyAuZXhlYzoKKy0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJDwgJEAKKysJJChPQkpDT1BZKSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmJ1aWxkLWlkICQ8ICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDRlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpAQCAtMCwwICsxLDY2IEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJncnViLWVmaS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjMiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9jZmcgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dydWItJHtQVn0iCisKKyMgRGV0ZXJtaW5lIHRoZSB0YXJnZXQgYXJjaCBmb3IgdGhlIGdydWIgbW9kdWxlcworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB0YXJnZXQgPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIHRhcmdldCA9PSAieDg2XzY0IjoKKyAgICAgICAgZ3J1YnRhcmdldCA9ICd4ODZfNjQnCisgICAgICAgIGdydWJpbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0KToKKyAgICAgICAgZ3J1YnRhcmdldCA9ICdpMzg2JworICAgICAgICBncnViaW1hZ2UgPSAiYm9vdGlhMzIuZWZpIgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUgdGFyZ2V0KQorICAgIGQuc2V0VmFyKCJHUlVCX1RBUkdFVCIsIGdydWJ0YXJnZXQpCisgICAgZC5zZXRWYXIoIkdSVUJfSU1BR0UiLCBncnViaW1hZ2UpCit9CisKK2luaGVyaXQgZGVwbG95CisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0hFTFAyTUFOPSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09ZWZpIC0tZGlzYWJsZS1ncnViLW1rZm9udCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZWZpZW11PW5vIC0tcHJvZ3JhbS1wcmVmaXg9JycgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gNzU1IGdydWItbWtpbWFnZSAke0R9JHtiaW5kaXJ9Cit9CisKK0dSVUJfQlVJTERJTiA/PSAiYm9vdCBsaW51eCBleHQyIGZhdCBzZXJpYWwgcGFydF9tc2RvcyBwYXJ0X2dwdCBub3JtYWwgZWZpX2dvcCBpc285NjYwIHNlYXJjaCIKKworZG9fZGVwbG95KCkgeworCSMgU2VhcmNoIGZvciB0aGUgZ3J1Yi5jZmcgb24gdGhlIGxvY2FsIGJvb3QgbWVkaWEgYnkgdXNpbmcgdGhlCisJIyBidWlsdCBpbiBjZmcgZmlsZSBwcm92aWRlZCB2aWEgdGhpcyByZWNpcGUKKwlncnViLW1raW1hZ2UgLWMgLi4vY2ZnIC1wIC9FRkkvQk9PVCAtZCAuL2dydWItY29yZS8gXAorCSAgICAgICAgICAgICAgIC1PICR7R1JVQl9UQVJHRVR9LWVmaSAtbyAuLyR7R1JVQl9JTUFHRX0gXAorCSAgICAgICAgICAgICAgICR7R1JVQl9CVUlMRElOfQorCWluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtHUlVCX0lNQUdFfSAke0RFUExPWURJUn0KK30KKworZG9fZGVwbG95X2NsYXNzLW5hdGl2ZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2J1aWxkCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgL2Jvb3QvZWZpL0VGSS9CT09ULyR7R1JVQl9UQVJHRVR9LWVmaS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dydWIgXAorICAgICAgICAgICAgICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzVhYTRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZmY4ZjY4Y2M0OGZkM2MzMGQ1NWUxZDU3MGQ1MWYyZTA5NTJjOTY4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyNSBKYW4gMjAxNCAyMzo0OTo0NCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBhdXRvZ2VuLnNoOiBleGNsdWRlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluCisKK0V4Y2x1ZGUgdGhlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluIHNpbmNlIHF1aWx0IHVzZXMgInBhdGNoIC0tYmFja3VwIiwKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSBiYWNrdXAgZmlsZSB1bmRlciAucGMsIHRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQKK2Vycm9ycywgZm9yIGV4YW1wbGUsIG9uIENlbnRPUyA1LngsIGlmIHRoZSBiYWNrdXAgZmlsZSBpcyBudWxsCisobmV3ZmlsZSksIGl0J3MgbW9kZSB3aWxsIGJlIDAwMCwgdGhlbiB3ZSB3aWxsIGdldCBlcnJvcnMgd2hlbiB4Z2V0dGV4dAordHJ5IHRvIHJlYWQgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b2dlbi5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCitpbmRleCA3NDI0NDI4Li44NDM2MTllIDEwMDc1NQorLS0tIGEvYXV0b2dlbi5zaAorKysrIGIvYXV0b2dlbi5zaAorQEAgLTUsNyArNSw3IEBAIHNldCAtZQorIGV4cG9ydCBMQ19DT0xMQVRFPUMKKyB1bnNldCBMQ19BTEwKKyAKKy1maW5kIC4gLWluYW1lICcqLltjaF0nICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0LWdydWIvKicgISAtaXBhdGggJy4vYnVpbGQtYXV4LyonICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9taXNjLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9nbG9iYWwuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL3NlY21lbS5jJyAgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi13aWR0aHNwZWMuYycgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi1hc2NpaWguYycgfHNvcnQgPiBwby9QT1RGSUxFUy5pbgorK2ZpbmQgLiAtaW5hbWUgJyouW2NoXScgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi8qJyAhIC1pcGF0aCAnLi9idWlsZC1hdXgvKicgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL21pc2MuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL2dsb2JhbC5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvc2VjbWVtLmMnICAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLXdpZHRoc3BlYy5jJyAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLWFzY2lpaC5jJyAhIC1wYXRoICcuLy5wYy8qJyB8IHNvcnQgPiBwby9QT1RGSUxFUy5pbgorIGZpbmQgdXRpbCAtaW5hbWUgJyouaW4nICEgLW5hbWUgTWFrZWZpbGUuaW4gIHxzb3J0ID4gcG8vUE9URklMRVMtc2hlbGwuaW4KKyAKKyBlY2hvICJJbXBvcnRpbmcgdW5pY29kZS4uLiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyNzcxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJHUlVCMiBpcyB0aGUgbmV4dC1nZW5lcmF0aW9uIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciIKKworREVTQ1JJUFRJT04gPSAiR1JVQjIgaXMgdGhlIG5leHQgZ2VuZXJhaW9uIG9mIGEgR1BMZWQgYm9vdGxvYWRlciBcCitpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IG9wZXJhdGluZyBzeXN0ZW1zLiBJbiBcCithZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dydWIvIgorU0VDVElPTiA9ICJib290bG9hZGVycyIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnUub3JnL2dudS9ncnViL2dydWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLWluc3RhbGwuaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgeHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOTI3NTQwYjZlZGE4YjAyNGZiMDM5MWVlYWE0MDkxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NWIzOWEwNTU4ZjhjODAyMjA5YzU3NGY0ZDAyY2EyNjNhODA0ZThhNTY0YmM2Y2FmMWNkMGZkM2IzY2MxMWUzIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tncnViLW1vdW50XSA9ICItLWVuYWJsZS1ncnViLW1vdW50LC0tZGlzYWJsZS1ncnViLW1vdW50LGZ1c2UiCitQQUNLQUdFQ09ORklHW2RldmljZS1tYXBwZXJdID0gIi0tZW5hYmxlLWRldmljZS1tYXBwZXIsLS1kaXNhYmxlLWRldmljZS1tYXBwZXIsbHZtMiIKKworIyBncnViIGFuZCBncnViLWVmaSdzIHN5c3Jvb3QvJHtkYXRhZGlyfS9ncnViL2dydWItbWtjb25maWdfbGliIGFyZQorIyBjb25mbGljdGVkLCByZW1vdmUgaXQgc2luY2Ugbm8gb25lIHVzZXMgaXQuCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfY2xhc3MtdGFyZ2V0ICs9ICJyZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIiCityZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIoKSB7CisgICAgcm0gLXIgIiR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZ3J1Yi9ncnViLW1rY29uZmlnX2xpYiIKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMC45Ny5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzAuOTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3YTA0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzAuOTcuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJHUlVCIGlzIHRoZSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIiCitERVNDUklQVElPTiA9ICJHUlVCIGlzIGEgR1BMZWQgYm9vdGxvYWRlciBpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IFwKK29wZXJhdGluZyBzeXN0ZW1zLiBJbiBhZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncnViLyIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3J1Yi9tYWluLmM7YmVnaW5saW5lPTM7ZW5kbGluZT05O21kNT0yMmE1ZjI4ZDIxMzBmZmY5ZjJhMTdlZDU0YmU5MGVkNiIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiZnRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvZ3J1Yi9ncnViLSR7UFZ9LnRhci5nejsgXAorICAgICAgICAgICBmaWxlOi8vbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2hlbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqY29weS1hYnNvbHV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZDNmM2ViNTQ0NDZiZTYwMDMxNTYxNThkNTFmNDg4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZTFkMTVkMTJkYmQzZTkyMDgxMTFkNmI4MDZhZDVhOTg1N2NhODg1MGM0Nzg3N2QzNjU3NWI5MDQ1NTkyNjBiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0NPTVBBVElCTEVfSE9TVCA9ICJpLjg2LiotbGludXgiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtY3Vyc2VzIgorCitkb19pbnN0YWxsX2FwcGVuZF92bXdhcmUoKSB7CisJbWtkaXIgLXAgJHtEfS9ib290LworCWxuIC1zZiAuLi91c3IvbGliL2dydWIveyRUQVJHRVRfQVJDSH17JFRBUkdFVF9WRU5ET1J9LyAke0R9L2Jvb3QvZ3J1YgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhNzA5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDAuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBncnViMi5pbmMKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9pMzg2LXBjLy5kZWJ1ZyIKKworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPXBjIC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3NjBjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTICs9ICJhdXRvZ2VuLW5hdGl2ZSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorREVGQVVMVF9QUkVGRVJFTkNFX2FybSA9ICIxIgorCitQViA9ICIyLjAwKyR7U1JDUFZ9IgorU1JDUkVWID0gIjg3ZGU2NmQ5ZDgzNDQ2ZWNkZGIyOWNmYmRmNzM2OTEwMmM4ZTIwOWUiCitTUkNfVVJJID0gImdpdDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dydWIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0LiopLShsaW51eC4qfGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjIGNvbmZpZ3VyZS5hYyBoYXMgY29kZSB0byBzZXQgdGhpcyBhdXRvbWFnaWNhbGx5IGZyb20gdGhlIHRhcmdldCB0dXBsZQorIyBidXQgdGhlIE9FIGZyZWVmb3JtIG9uZSAoY29yZTItZm9vLWJhci1saW51eCkgZG9uJ3Qgd29yayB3aXRoIHRoYXQuCisKK0dSVUJQTEFURk9STV9hcm0gPSAidWJvb3QiCitHUlVCUExBVEZPUk1fYWFyY2g2NCA9ICJlZmkiCitHUlVCUExBVEZPUk0gPz89ICJwYyIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wbGF0Zm9ybT0ke0dSVUJQTEFURk9STX0gLS1kaXNhYmxlLWdydWItbWtmb250IC0tcHJvZ3JhbS1wcmVmaXg9IiIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICggY2QgJHtTfQorICAgICAgJHtTfS9hdXRvZ2VuLnNoICkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCisgCit9CisKKyMgZGVidWdlZGl0IGNob2tlcyBvbiBiYXJlIG1ldGFsIGJpbmFyaWVzCitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LyovLmRlYnVnIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3QvZml4LW9iamNvcHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3QvZml4LW9iamNvcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmNTU5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDBmN2Y5ZTNiYjFkMGUxYjkzZjNhZDhhMWQ1ZDdiZGQzZmJmMjc0OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjcgTWFyIDIwMTQgMDc6MjA6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IHVzZSBvYmpjb3B5IGZyb20gdGhlIGVudgorCitJdCB1c2VzIHRoZSAib2JqY29weSIgZGlyZWN0bHksIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSBmb3IgY3Jvc3MgY29tcGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTE5LDYgKzE5LDggQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CisgQU1fTUFLRUZMQUdTID0gLS1uby1wcmludC1kaXJlY3RvcnkKKyAKKytPQkpDT1BZID89IG9iamNvcHkKKysKKyBndW1taWJvb3RsaWJkaXIgPSAkKHByZWZpeCkvbGliL2d1bW1pYm9vdAorIAorIEFNX0NQUEZMQUdTID0gLWluY2x1ZGUgY29uZmlnLmgKK0BAIC0xNDgsNyArMTUwLDcgQEAgJChndW1taWJvb3Rfc29saWIpOiAkKGd1bW1pYm9vdF9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChndW1taWJvb3QpOiAkKGd1bW1pYm9vdF9zb2xpYikKKy0JJChBTV9WX0dFTikgb2JqY29weSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorKwkkKEFNX1ZfR0VOKSAkKE9CSkNPUFkpIC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisgCSAgLWogLmR5bnN5bSAtaiAucmVsIC1qIC5yZWxhIC1qIC5yZWxvYyBcCisgCSAgLS10YXJnZXQ9ZWZpLWFwcC0kKEFSQ0gpICQ8ICRACisgCitAQCAtMTgzLDcgKzE4NSw3IEBAICQoc3R1Yl9zb2xpYik6ICQoc3R1Yl9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChzdHViKTogJChzdHViX3NvbGliKQorLQkkKEFNX1ZfR0VOKSBvYmpjb3B5IC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisrCSQoQU1fVl9HRU4pICQoT0JKQ09QWSkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKyAJICAtaiAuZHluc3ltIC1qIC5yZWwgLWogLnJlbGEgLWogLnJlbG9jIFwKKyAJICAtLXRhcmdldD1lZmktYXBwLSQoQVJDSCkgJDwgJEAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzNkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3RfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiR3VtbWlib290IGlzIGEgc2ltcGxlIFVFRkkgYm9vdCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIGNvbmZpZ3VyZWQgRUZJIGltYWdlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ251LWVmaSB1dGlsLWxpbnV4IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK2luaGVyaXQgZGVwbG95CisKK1BWID0gIjQ4K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjJiY2Q5MTljNjgxYzk1MmViODY3ZWYxYmRiNDU4ZjFiYzQ5YzJkNTUiCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2d1bW1pYm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtb2JqY29weS5wYXRjaCBcCisgICAgICAgICAgIgorCisjIE5vdGU6IEFkZCBDT01QQVRJQkxFX0hPU1QgaGVyZSBpcyBvbmx5IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBnbnUtZWZpCisjIHdoaWNoIGhhcyBzZXQgdGhlIENPTVBBVElCTEVfSE9TVCwgdGhlIGd1bW1pYm9vdCBpdHNlbGYgbWF5IHdvcmsgb24KKyMgbW9yZSBob3N0cy4KK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1tYW5wYWdlcyAtLXdpdGgtZWZpLWluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGRzZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSIKKworRVhUUkFfT0VNQUtFICs9ICJndW1taWJvb3RsaWJkaXI9JHtsaWJkaXJ9L2d1bW1pYm9vdCIKKworZG9fZGVwbG95ICgpIHsKKyAgICAgICAgaW5zdGFsbCAke0J9L2d1bW1pYm9vdCouZWZpICR7REVQTE9ZRElSfQorfQorYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL0NPUFlJTkcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9DT1BZSU5HLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzcwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9DT1BZSU5HLnBhdGNoCkBAIC0wLDAgKzEsMzQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitkaWZmIC1ydU4gaG9zdGFwLWNvbmYtMS4wLW9yaWcvQ09QWUlORyBob3N0YXAtY29uZi0xLjAvQ09QWUlORworLS0tIGhvc3RhcC1jb25mLTEuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBob3N0YXAtY29uZi0xLjAvQ09QWUlORwkyMDEwLTEyLTA5IDE2OjM2OjQ4LjAwMDAwMDAwMCArMDgwMAorQEAgLTAsMCArMSwzNDAgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKwwKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysMCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysMCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysMCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysMCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXAtZnctbG9hZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTBiZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWR+aG9zdGFwLWZ3LWxvYWQKKysrKyBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWQKK0BAIC02LDkgKzYsOSBAQAorICMgRmlybXdhcmUgaW1hZ2VzIGZvciB0aGUgY2FyZAorICMgVE9ETzogY291bGQgdHJ5IHRvIHNlbGVjdCBjb3JyZWN0IGZpcm13YXJlIHR5cGUgYXV0b21hdGljYWxseQorIAorLVBSST0vZXRjL3BjbWNpYS9QTTAxMDEwMi5IRVgKKy1TVEE9L2V0Yy9wY21jaWEvUkYwMTA4MDIuSEVYCistUFJJU00yX1NSRUM9L3Vzci9sb2NhbC9iaW4vcHJpc20yX3NyZWMKKytQUkk9L2V0Yy9wY21jaWEvcG0wMTAxMDIuaGV4CisrU1RBPS9ldGMvcGNtY2lhL3JmMDEwODA0LmhleAorK1BSSVNNMl9TUkVDPS91c3Ivc2Jpbi9wcmlzbTJfc3JlYworIAorIHNldCAtZQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGRhODJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYKQEAgLTAsMCArMSwxOTMgQEAKK21vZHVsZSAiaG9zdGFwX2NzIiBvcHRzICJjaGFubmVsPTMgaXdfbW9kZT0yIGVzc2lkPWFueSBpZ25vcmVfY2lzX3ZjYz0xIgorCitjYXJkICJBY3Rpb250ZWMgODAyQ0kyIgorICBtYW5maWQgMHgxNjY4LCAweDAxMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJXYXkgODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgICN2ZXJzaW9uICJBaXJXYXkiLCAiODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgIG1hbmZpZCAweDAyNjEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFzdXMgU3BhY2VMaW5rIFdMMTEwIgorICAgbWFuZmlkIDB4MDJhYSwweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworIyMgaGFuZGhlbGRzLm9yZyBidWcgOTY0CitjYXJkICJCZWxraW4gRjVENjA2MCBFdGhlcm5ldCIKKyAgICN2ZXJzaW9uICJQQ01DSUEiLCAiMTFNIFdMQU4gQ2FyZCB2Mi41IiwgIklTTDM3MzAwUCIsICJSZXZBIgorICAgbWFuZmlkIDB4MDI3NCwgMHgxNjEyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSAxMU1icHMgV2lyZWxlc3MgUEMgQ2FyZCIKKyAgbWFuZmlkIDB4MDI4YSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIFdMMTAwIDExIE1icHMgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4MDEzOCwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIEhOVy0xMDAgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFdMLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFJDLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERSQy02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRENGNjYwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDUKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJGYXJhbGxvbiBTa3lMSU5FIgorICB2ZXJzaW9uICJJTlRFUlNJTCIsICJIRkEzODR4L0lFRUUiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiSHlwZXJMaW5rIFdpcmVsZXNzIFBDIENhcmQgMTFNYnBzIgorICB2ZXJzaW9uICJIeXBlckxpbmsiLCAiV2lyZWxlc3MgUEMgQ2FyZCAxMU1icHMiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBjYXJkICJJbnRlcnNpbCBQUklTTTIgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorIyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMQTQxMTEgU3BlY3RydW0yNCBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIKKyAgdmVyc2lvbiAiU3ltYm9sIFRlY2hub2xvZ2llcyIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCIKKyAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0NGMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI3NCwgMHgzMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGJpbmQgImhvc3RhcF9jcyIgCisKKyMjIGhhbmRoZWxkcy5vcmcgYnVnICM3OTAKK2NhcmQgIkxpbmtzeXMgV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQgV0NGMTIiCisgIG1hbmZpZCAweDAyOGEsIDB4MDY3MworICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0xBTiBDRiBDYXJkIgorICBtYW5maWQgMHgwMjc0LCAweDMzMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJORVRHRUFSIE1BNzAxIFdpcmVsZXNzIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5vcnRlbCBOZXR3b3JrcyBlTW9iaWxpdHkgODAyLjExIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxZWIsIDB4MDgwYQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlBMQU5FWCBHZW9XYXZlIEdXLUNGMTEwIgorICB2ZXJzaW9uICJQTEFORVgiLCAiR2VvV2F2ZS9HVy1DRjExMCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQUk9YSU0gTEFOIFBDIENBUkQgSEFSTU9OWSA4MDIxMUIiCisgIHZlcnNpb24gIlBST1hJTSIsICJMQU4gUEMgQ0FSRCBIQVJNT05ZIDgwMjExQiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQcm94aW0gUmFuZ2VMQU4vRFMiCisgIHZlcnNpb24gIlBST1hJTSIsIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIgorICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYWZld2F5IDgwMi4xMWIgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU0FNU1VORyAxMU1icHMgV0xBTiBDYXJkIgorICB2ZXJzaW9uICJTQU1TVU5HIiwgIjExTWJwcyBXTEFOIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBuZWVkcyBmaXJtd2FyZSB1cGxvYWQgdmlhIGhvc3RhcF9md19sb2FkCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIE9FTSAoME1CKSIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAxMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisjIG5lZWRzIHNwZWNpYWwgYWN0aXZhdGlvbiAoPj1ob3N0YXAgMC4zLjIgb25seSkgcGx1cyBmaXJtd2FyZSB1cGxvYWQKK2NhcmQgIlNhbkRpc2sgQ29ubmVjdFBsdXMgdy8gTWVtb3J5IgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisjICAgYmluZCAiaWRlLWNzIiB0byAxCisKK2NhcmQgIlNlbmFvL09yaWdvIDgwMjExYiBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMDBiLDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTaXRlY29tIFdMLTAwNyBXTEFOIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwNAorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNNQzI2MzIgODAyLjExIChwcmlzbTIpIENhcmQiCisgIHZlcnNpb24gIlNNQyIsICJTTUMyNjMyVyIsICJWZXJzaW9uIDAxLjAyIiwgIiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTcGVlZFN0cmVhbSBTUzEwMjEgV2lyZWxlc3MgQWRhcHRlciIKKyAgI3ZlcnNpb24gIlNpZW1lbnMiLCAiU3BlZWRTdHJlYW0gV2lyZWxlc3MgUENNQ0lBIgorICBtYW5maWQgMHgwMmFjLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaQ09NQVggQWlyUnVubmVyL1hJLTMwMCIKKyAgI3ZlcnNpb24gIlpDT01BWCIsICJBaXJSdW5uZXIvWEktMzAwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJab25ldCBaQ0YxMTAwIgorICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorICAKK2NhcmQgIldpcmVsZXNzIExBTiBBZGFwdGVyIFZlcnNpb24gMDEuMDIiCisgICB2ZXJzaW9uICJXaXJlbGVzcyIsICJMQU4gQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICB2ZXJzaW9uICJBbWJpQ29tIiwgIldMMTEwMEMgODAyLjExYiBDRi1DYXJkIiwgIjIuMiIKKyAgbWFuZmlkIDB4ZDYwMSwweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICBtYW5maWQgMHhkNjAxLDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbmRpc2sgQ29ubmVjdCBTRFdDRkItMDAwIgorICBtYW5maWQgMHhkNjAxLDB4MDAwNQorICBiaW5kICJob3N0YXBfY3MiCisKKyMgQ2FyZHMgd2l0aCBJbnRlcnNpbCBmaXJtd2FyZSAoUHJpc20gY2hpcHNldCkKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQiCisgIHZlcnNpb24gIlRoZSBMaW5rc3lzIEdyb3VwLCBJbmMuIiwgIkluc3RhbnQgV2lyZWxlc3MgTmV0d29yayBQQyBDYXJkIiwgIklTTDM3MzAwUCIsICJSZXZBIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgQ29tcGFjdEZsYXNoIFdpcmVsZXNzIENhcmQiCisgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkIgorICB2ZXJzaW9uICJBQ1RJT05URUMiLCAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSBWZXJzaW9uIDMiCisgIG1hbmZpZCAweDAyNzQsMHgxNjEzCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQkVOUSBBV0wxMDAiCisgIHZlcnNpb24gIkJFTlEiLCAiQVdMMTAwIFBDTUNJQSBBREFQVEVSIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByZXRlYyBXTEFOIgorICB2ZXJzaW9uICJQcmV0ZWMiLCAiQ29tcGFjdFdMQU4gQ2FyZCA4MDIuMTFiIiwgIjIuNSIKKyAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiVHJlbmROZXQgVEVXIFBDMTYiCisgIG1hbmZpZCAweDAyNzQsIDB4MTYwMQorICBiaW5kICJob3N0YXBfY3MiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbSBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mLXVwc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzM4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbQpAQCAtMCwwICsxLDE5MSBAQAorZGV2aWNlICJob3N0YXBfY3MiCisgICBjbGFzcyAibmV0d29yayIgbW9kdWxlICJob3N0YXAiLCAiaG9zdGFwX2NzIgorCitjYXJkICJJbnRlcnNpbCBQUklTTTIgUmVmZXJlbmNlIERlc2lnbiAxMU1iL3MgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wxMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAxMzgsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wyMDAiCisgICB2ZXJzaW9uICJDb21wYXEiLCAiV0wyMDBfMTFNYnBzX1dpcmVsZXNzX1BDSV9DYXJkIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJFTVRBQyBBMjQyNGkgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGMyNTAsIDB4MDAwMgorIyAgIGNpcyAiY2lzL0VtdGFjLmRhdCIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAyLjUgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MTYxMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAzIDExTWJwcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjc0LCAweDE2MTMKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXQ0YxMiBXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIKKyAgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJEIiwgIkxpbmsgRFdMLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiCisjICB2ZXJzaW9uICJEIiwgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWm9vbUFpciA0MTAwIDExTWIvcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJab29tQWlyIDExTWJwcyBIaWdoIiwgIlJhdGUgd2lyZWxlc3MgTmV0d29ya2luZyIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWRkdHJvbiBBV1AtMTAwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJBZGR0cm9uIiwgIkFXUC0xMDAgV2lyZWxlc3MgUENNQ0lBIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbXN1bmcgU1dMMjAwMC1OIDExTWIvcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjUwLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU01DIDI2MzJXIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJTTUMiLCAiU01DMjYzMlciLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnJvTWF4IEZyZWVwb3J0IDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJJbnRlcnNpbCIsICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAiSVNMMzczMDBQIiwgIkV2YWwtUmV2QSIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWi1Db20gWEkzMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaY29tYXggWEktMzI1SCAyMDBtVyIKKyMgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDA1CisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIjNDb20gQWlyQ29ubmVjdCBQQ0kgNzc3QSIKKyAgIG1hbmZpZCAweDAxMDEsIDB4MDc3NworICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJVLlMuIFJvYm90aWNzIElFRUUgODAyLjExYiBQQy1DQVJEIgorICAgdmVyc2lvbiAiVS5TLiBSb2JvdGljcyIsICJJRUVFIDgwMi4xMWIgUEMtQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMb25nc2hpbmUgTENSLTg1MzEgMTFNYnBzIFdMQU4gUENNQ0lBIENBUkQiCisgICB2ZXJzaW9uICJPRU0iLCAiUFJJU00yIElFRUUgODAyLjExIFBDLUNhcmQiLCAiVmVyc2lvbiAwMS4wMiIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUGhpbGlwcyA4MDIuMTFiIFdMQU4gUENNQ0lBIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MzAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByb3hpbSBSYW5nZUxBTiIKKyMgICB2ZXJzaW9uICJQUk9YSU0iLCAiUmFuZ2VMQU4tRFMvTEFOIFBDIENBUkQiCisgICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnVmZmFsbyBXTEktQ0YtUzExRyIKKyAgIHZlcnNpb24gIkJVRkZBTE8iLCAiV0xJLUNGLVMxMUciCisjICBtYW5maWQgMHgwMjZmLCAweDAzMGIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGV2ZWwtT25lIFdQQy0wMTAwIgorICAgdmVyc2lvbiAiRGlnaXRhbCBEYXRhIENvbW11bmljYXRpb25zIiwgIldQQy0wMTAwIiwgIlZlcnNpb24gMDAuMDAiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQmVsa2luIDgwMi4xMWIgV0xBTiBQQ01DSUEiCisgICB2ZXJzaW9uICJCZWxraW4iLCAiMTFNYnBzIFdpcmVsZXNzIE5vdGVib29rIE5ldHdvcmsgQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNlbmFvIFNMLTIwMTFDRC9TTC0yMDExQ0RQTFVTIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRnVsYm9uZCBBaXJib25kIFhJLTMwMEIiCisgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5ldGdlYXIgTUE0MDEiCisgICB2ZXJzaW9uICJORVRHRUFSIE1BNDAxIFdpcmVsZXNzIFBDIiwgIkNhcmQiLCAiVmVyc2lvbiAwMS4wMCIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERXTC02NTAgUmV2LiBQMSIKKyAgIHZlcnNpb24gIkQtTGluayIsICJEV0wtNjUwIFdpcmVsZXNzIFBDIENhcmQgUmV2UCIsICJJU0wzNzEwMVAtMTAiLCAiQTMiCisjICAgbWFuZmlkIDB4MDAwYiwgMHg3MTEwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNvbmljV0FMTCBMb25nIFJhbmdlIFdpcmVsZXNzIENhcmQiCisgICB2ZXJzaW9uICJTb25pY1dBTEwiLCAiTG9uZyBSYW5nZSBXaXJlbGVzcyBDYXJkIiwgIklTTDM3MTAwUCIsICIxLjAiCisgICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2VuYW8gTkwtMjAxMUNEIFBMVVMgRXh0MiBNZXJjdXJ5IgorICAgdmVyc2lvbiAiV0xBTiIsICIxMU1icHNfUEMtQ2FyZF8zLjAiLCAiSVNMMzcxMDBQIiwgIkV2YWwtUmV2QSIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJ2YXN0IFdMMTAwIgorICAgdmVyc2lvbiAiQUlSVkFTVCIsICJJRUVFIDgwMi4xMWIgV2lyZWxlc3MgUENNQ0lBIENhcmQiLCAiSEZBMzg2MyIKKyAgIG1hbmZpZCAweDUwYzIsIDB4MDAwMQorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJNaWNyb3NvZnQgV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAgMS4wLjMiCisgICB2ZXJzaW9uICJNaWNyb3NvZnQiLCAiV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAiLCAiIiwgIjEuMC4zIgorICAgbWFuZmlkIDB4MDJkMiwgMHgwMDAxCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5FVEdFQVIgTUE0MDFSQSIKKyAgIHZlcnNpb24gIk5FVEdFQVIgTUE0MDFSQSBXaXJlbGVzcyBQQyIsICJDYXJkIiwgIklTTDM3MzAwUCIsICJFdmFsLVJldkEiCisgICBtYW5maWQgMHgwMDBiLCAweDczMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWxsaWVkIFRlbGVzeW4gQVQtV0NMNDUyIgorICAgdmVyc2lvbiAiQWxsaWVkIFRlbGVzeW4iLCAiQVQtV0NMNDUyIFdpcmVsZXNzIFBDTUNJQSBSYWRpbyIsICJWZXIuIDEuMDAiCisgICBtYW5maWQgMHhjMDBmLCAweDAwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiY29yZWdhIFdMIFBDQ0wtMTEiCisgICB2ZXJzaW9uICJjb3JlZ2EiLCAiV0wgUENDTC0xMSIsICJJU0wzNzMwMFAiLCAiUmV2QSIKKyAgIG1hbmZpZCAweGMwMGYsIDB4MDAwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisgICBiaW5kICJpZGUtY3MiIHRvIDEKKworY2FyZCAiQVNVUyBXTC0xMDAgODAxMWIgV0xBTiBQQyBDYXJkIgorICAgdmVyc2lvbiAiQVNVUyIsICI4MDJfMTFiX1BDX0NBUkRfMjUiLCAiVmVyc2lvbiAwMS4wMCIKKyAgIG1hbmZpZCAweDAyYWEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaeVhlbCBaeWFpciBCLTEwMSA4MDIuMTFiIFdMQU4gY2FyZCIKKyAgIHZlcnNpb24gIiAiLCAiSUVFRSA4MDIuMTEgV2lyZWxlc3MgTEFOL1BDIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMTAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiV0xBTiBQUklTTSBQQ01DSUEgQ0FSRCAzNzMwMFAgUmV2QjYiCisgICB2ZXJzaW9uICJXTEFOIiwgIlBSSVNNIFBDTUNJQSBDQVJEIiwgIjM3MzAwUCIsICJSZXZpc2lvbiBCNiIKKyAgIG1hbmZpZCAweDUwYzIsIDB4NzMwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisKKyMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBob3N0YXBfY3MubworIyBtb2R1bGUgImhvc3RhcF9jcyIgb3B0cyAiY2hhbm5lbD0zIGl3X21vZGU9MyBlc3NpZD10ZXN0IGlnbm9yZV9jaXNfdmNjPTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MubW9kYWxpYXMgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MubW9kYWxpYXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0ODM1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcwpAQCAtMCwwICsxLDI4IEBACisjIHByb2R1Y3QgaW5mbzogIlByZXRlYyIsICJDb21wYWN0V0xBTiBDYXJkIDgwMi4xMWIiLCAiMi41IgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYTFDQUREM0U1cGJFNjk3NjM2Q3BjN0E1QkZDRjFwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIG1hbnVmYWN0dXJlciBJRCB3aGljaCBleGlzdCBpbiBvcmlub2NvX2NzIEFORCBpbiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDAwQmM3MTAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMDBCYzczMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAxMjZjODAwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDEzOGMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjUwYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyNzRjMTYxMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI3NGMxNjEzZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjhBYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyQUFjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptNTBDMmM3MzAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm1ENjAxYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bUQ2MDFjMDAwNWYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKKworIyBwcm9kdWN0IGluZm86ICJMaW5rc3lzIiwgIldpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIiwgIiIsICIiCithbGlhcyBwY21jaWE6bTAyOEFjMDY3M2YwNmZuMDBwZm4wMHBhMDczM0NDODFwYjBDNTJGMzk1cGMwMDAwMDAwMHBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgcHJvZHVjdCBpbmZvOiJQTEFORVggQ09NTVVOSUNBVElPTiBJTkMiLCJQTEFORVggR1ctQ0YxMVggV2lyZWxlc3MgQ0YgQ2FyZCIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm1ENjAxYzAwMTBmMDZmbjAwcGZuMDBwYTQ3MDNDRjY4cGJGQUQ3MzE4RHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIDB4MDE1NiwgMHgwMDAyIGFuZCAiVmVyc2lvbiAwMS4wMiIgb25seSBhcHBlYXIgZm9yIFByaXNtIGJhc2VkIGNhcmRzLgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYzRCNzRCQUEwcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyAiQlVGRkFMTyIsICJXTEktQ0YtUzExRyIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm0wMjZGYzAzMEJmMDZmbjAwcGZuMDBwYTJERUNFQ0UzcGI4MjA2N0MxOHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLWNvbmZfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLWNvbmZfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDRjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIGZpbGVzIGZvciBIb3N0QVAgKHdpZmkpIGRyaXZlciIKK0RFU0NSSVBUSU9OID0gIlBDTUNJQS1jcyBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB3aXJlbGVzcyBMQU4gY2FyZHMgYmFzZWQgb24gSW50ZXJzaWwncyBQcmlzbTIvMi41LzMgY2hpcHNldC4iCitTRUNUSU9OID0gImtlcm5lbC9tb2R1bGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImZpbGU6Ly9ob3N0YXBfY3MubW9kYWxpYXMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3RhcF9jcy5tb2RhbGlhcyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kL2hvc3RhcF9jcy5jb25mCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLTAuNC43L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5OWQwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBob3N0YXAtdXRpbHMtMC40Ljcub3JpZy9NYWtlZmlsZQorKysrIGhvc3RhcC11dGlscy0wLjQuNy9NYWtlZmlsZQorQEAgLTE0LDE3ICsxNCwxNyBAQCBwcmlzbTJfc3JlYy5vOiBwcmlzbTJfc3JlYy5jIHV0aWwuaAorIGhvc3RhcF9jcnlwdF9jb25mOiBob3N0YXBfY3J5cHRfY29uZi5jCisKKyBob3N0YXBfZGlhZzogaG9zdGFwX2RpYWcubyB1dGlsLm8KKy0JJChDQykgLW8gaG9zdGFwX2RpYWcgJChDRkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisrCSQoQ0MpIC1vIGhvc3RhcF9kaWFnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisKKyBob3N0YXBfZGlhZy5vOiBob3N0YXBfZGlhZy5jIHV0aWwuaAorCisgdXRpbC5vOiB1dGlsLmMgdXRpbC5oCisKKyBob3N0YXBfaW9fZGVidWc6IGhvc3RhcF9pb19kZWJ1Zy5jCistCSQoQ0MpIC1vIGhvc3RhcF9pb19kZWJ1ZyAkKENGTEFHUykgaG9zdGFwX2lvX2RlYnVnLmMKKysJJChDQykgLW8gaG9zdGFwX2lvX2RlYnVnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9pb19kZWJ1Zy5jCisKKyBob3N0YXBfcmlkOiBob3N0YXBfcmlkLm8gdXRpbC5vCistCSQoQ0MpIC1vIGhvc3RhcF9yaWQgJChDRkxBR1MpIGhvc3RhcF9yaWQubyB1dGlsLm8KKysJJChDQykgLW8gaG9zdGFwX3JpZCAkKENGTEFHUykgJChMREZMQUdTKSBob3N0YXBfcmlkLm8gdXRpbC5vCisKKyBob3N0YXBfcmlkLm86IGhvc3RhcF9yaWQuYyB1dGlsLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDk3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiVXNlciBtb2RlIGhlbHBlcnMgZm9yIHRoZSBob3N0YXAgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIGhvc3RhcCBkcml2ZXIgc3VwcG9ydHMgSG9zdCBBUCBtb2RlLCBpdCBhbGxvd3MgZm9yIElFRUUgODAyLjExIFwKK21hbmFnZW1lbnQgZnVuY3Rpb25zIG9uIHRoZSBob3N0IGNvbXB1dGVyIGFuZCBhbGxvd3MgdGhlIHN5c3RlbSB0byBhY3QgYXMgYW4gYWNjZXNzIHBvaW50LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL2J1Z3ovIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly91dGlsLmM7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT1kM2I5MjgwODUxMzAyZTViYTM0ZTVmYjcxNzQ4OWI2ZCIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3JlbGVhc2VzL2hvc3RhcC11dGlscy0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9ob3N0YXAtZnctbG9hZC5wYXRjaCIKK1MgPSAiJHtXT1JLRElSfS9ob3N0YXAtdXRpbHMtJHtQVn0iCisKK0JJTkFSSUVTID0gImhvc3RhcF9jcnlwdF9jb25mIGhvc3RhcF9kaWFnIGhvc3RhcF9md19sb2FkIGhvc3RhcF9pb19kZWJ1ZyBcCisJICAgIGhvc3RhcF9yaWQgcHJpc20yX3BhcmFtIHByaXNtMl9zcmVjIHNwbGl0X2NvbWJpbmVkX2hleCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9LworCWZvciBmIGluICR7QklOQVJJRVN9CisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRmICR7RH0ke3NiaW5kaXJ9LworCWRvbmUKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzXzAuNC43LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzXzAuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTQ4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGhvc3RhcC11dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2xkZmxhZ3MucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiYWZlMDQxNTgxYjhmMDE2NjZlMzUzYmVjMjA5MTdjODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZmNTk4ZDhlMzU2YzE2MjBmYTAwOWVjYTBhNzAwYmYxMTA1ZTE2ODE3ZWVmZDc3ZDg5MTk5NDI2MTAwOTM1NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9HUEx2Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9HUEx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU4MTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoCkBAIC0wLDAgKzEsMzQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL2tleW1hcC5zaCBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9rZXltYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmViYzYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9rZXltYXAuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisjCisjIGxvYWQga2V5bWFwLCBpZiBleGlzdGluZworCitLRVJORUxfTUFKTUlOPWB1bmFtZSAtciB8IGN1dCAtZCAnLicgLWYgMSwyYAoraWYgWyAtZSAvZXRjL2tleW1hcC0kS0VSTkVMX01BSk1JTi5tYXAgXTsgdGhlbgorCWxvYWRrZXlzIC9ldGMva2V5bWFwLSRLRVJORUxfTUFKTUlOLm1hcAorZmkKKworaWYgKCBscyAiL2V0YyIgfCBncmVwIC1xICJrZXltYXAtZXh0ZW5zaW9uLSR7S0VSTkVMX01BSk1JTn0iICkKK3RoZW4KKwlmb3IgZXh0ZW5zaW9uIGluIGBscyAtMSAvZXRjL2tleW1hcC1leHRlbnNpb24tJEtFUk5FTF9NQUpNSU4qYCAKKwlkbwkKKwkJbG9hZGtleXMgIiRleHRlbnNpb24iCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9rZXltYXBzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9rZXltYXBzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzkzYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgbWFwcyIKK0RFU0NSSVBUSU9OID0gIktleW1hcHMgYW5kIGluaXRzY3JpcHQgdG8gc2V0IHRoZSBrZXltYXAgb24gYm9vdHVwLiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUkRFUEVORFNfJHtQTn0gPSAia2JkIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjMxIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworU1JDX1VSSSA9ICJmaWxlOi8va2V5bWFwLnNoIFwKKwkgICBmaWxlOi8vR1BMdjIucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJrZXltYXAuc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMSBTIC4iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgIyBPbmx5IGluc3RhbGwgdGhlIHNjcmlwdCBpZiAnc3lzdmluaXQnIGlzIGluIERJU1RST19GRUFUVVJFUworICAgICMgVEhlIHVsaXRpdHkgdGhpcyBzY3JpcHQgcHJvdmlkZXMgY291bGQgYmUgYWNoaWV2ZWQgYnkgc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9rZXltYXAuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGZpCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGtleW1hcC5zZXJ2aWNlCisJZmkKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MjRjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2xpYmFjcGk6IFJlbW92ZSBRQSB3YXJuaW5nOiBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBVc2VmdWwgd2l0aGluIGJpdGJha2UgZW52aXJvbm1lbnQgb25seS4KKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0KKyBNYWtlZmlsZSAgfCAgICAzICsrLQorIGNvbmZpZy5tayB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSw3IEBAIG9wdGlvbnM6CisgCUBlY2hvICJDRkxBR1MgICA9ICR7Q0ZMQUdTfSIKKyAJQGVjaG8gIkNDICAgICAgID0gJHtDQ30iCisgCUBlY2hvICJTT0ZMQUdTICA9ICR7U09GTEFHU30iCisrCUBlY2hvICJMREZMQUdTICA9ICR7TERGTEFHU30iCisgCUBlY2hvICJMRCAgICAgICA9ICR7TER9IgorIAorIC5jLm86CitAQCAtMzQsNyArMzUsNyBAQCBsaWJhY3BpLmE6ICR7T0JKfQorIAorIGxpYmFjcGkuc286ICR7T0JKfQorIAlAZWNobyBMRCAkQAorLQlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisrCUAke0NDfSAke1NPRkxBR1N9ICR7TERGTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorIAorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5taworKysrIGxpYmFjcGktMC4yL2NvbmZpZy5taworQEAgLTEwLDYgKzEwLDcgQEAgTUFOUFJFRklYID0gJHtQUkVGSVh9L3NoYXJlL21hbgorIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKyBBUkZMQUdTID0gY3IKKytMREZMQUdTID0KKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWQzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IGxpYmFjcGkgZm9yIHgzMgorICAgIAorICAgIGxpYmFjcGkgZG9lc24ndCB1c2UgYmFzZV9saWJkaXIgZm9yIGluc3RhbGwuICBUaGlzIHBhdGNoIGFkZHMKKyAgICBiYXNlX2xpYmRpciBzdXBwb3J0IHNvIHRoYXQgeDMyIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIHByb3Blcmx5LgorCitQYXRjaCBSZWNlaXZlZCBmcm9tOiAgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNQorCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC04LDYgKzgsMTAgQEAgU1JDX3Rlc3QgPSB0ZXN0LWxpYmFjcGkuYyBsaWJhY3BpLmMgbGlzdAorIE9CSiA9ICR7U1JDOi5jPS5vfQorIE9CSl90ZXN0ID0gJHtTUkNfdGVzdDouYz0ub30KKyAKKytpZm5kZWYgYmFzZV9saWJkaXIKKytiYXNlX2xpYmRpcj0vbGliCisrZW5kaWYKKysKKyBhbGw6IG9wdGlvbnMgbGliYWNwaS5hIGxpYmFjcGkuc28gdGVzdC1saWJhY3BpCisgCisgb3B0aW9uczoKK0BAIC00MiwxMyArNDYsMTMgQEAgaW5zdGFsbDogYWxsCisgCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNwIC1mIGxpYmFjcGkuaCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUvbGliYWNwaS5oCistCUBlY2hvIGluc3RhbGxpbmcgbGlicmFyeSB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfS9saWIKKy0JQGNwIC1mIGxpYmFjcGkuYSAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuYQorLQlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLworLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLyR7U09OQU1FfQorLQlAbG4gLXMgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuc28KKysJQGVjaG8gaW5zdGFsbGluZyBsaWJyYXJ5IHRvICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfQorKwlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjcCAtZiBsaWJhY3BpLmEgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuYQorKwlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS8KKysJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vJHtTT05BTUV9CisrCUBsbiAtcyAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuc28KKyAJQGVjaG8gaW5zdGFsbGluZyB0ZXN0LWxpYmFjcGkgdG8gJHtERVNURElSfSR7UFJFRklYfS9iaW4KKyAJQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0vYmluCisgCUBjcCAtZiB0ZXN0LWxpYmFjcGkgJHtERVNURElSfSR7UFJFRklYfS9iaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9tYWtlZmlsZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbWFrZWZpbGUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNGVmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbWFrZWZpbGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBNYWtlZmlsZSAgfCAgICA2ICsrKy0tLQorIGNvbmZpZy5tayB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJhY3BpLTAuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUJMjAwNy0wNy0yOSAxNDowOTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQkyMDA4LTA5LTI2IDEwOjM0OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDE2ICsyNSwxNiBAQCAke09CSn06IGNvbmZpZy5tayBsaWJhY3BpLmgKKyAKKyBsaWJhY3BpLmE6ICR7T0JKfQorIAlAZWNobyBBUiAkQAorLQlAJHtBUn0gJEAgJHtPQkp9CisrCSR7QVJ9ICR7QVJGTEFHU30gJEAgJHtPQkp9CisgCUAke1JBTkxJQn0gJEAKKyAKKyBsaWJhY3BpLnNvOiAke09CSn0KKyAJQGVjaG8gTEQgJEAKKy0JQCR7TER9ICR7U09GTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorKwlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisgCisgdGVzdC1saWJhY3BpOiAke09CSl90ZXN0fQorIAlAZWNobyBMRCAkQAorLQlAJHtMRH0gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorKwlAJHtDQ30gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorIAlAc3RyaXAgJEAKKyAKKyBpbnN0YWxsOiBhbGwKK0luZGV4OiBsaWJhY3BpLTAuMi9jb25maWcubWsKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5tawkyMDA3LTA3LTI5IDE0OjA5OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmFjcGktMC4yL2NvbmZpZy5tawkyMDA4LTA5LTI2IDEwOjM0OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTksOSArOSwxMCBAQCBNQU5QUkVGSVggPSAke1BSRUZJWH0vc2hhcmUvbWFuCisgIyBmbGFncworIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKytBUkZMQUdTID0gY3IKKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCisgTEQgPSAke0NDfQorLUFSID0gYXIgY3IKKytBUiA9IGFyCisgUkFOTElCID0gcmFubGliCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNzVmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXNlZCB0aGUgY3Jvc3Mgc3RyaXAgaW5zdGVhZCBvZiBob3N0IHN0cmlwIHRvIGF2b2lkIHRoaXMgYnVpbGQgZXJyb3I6CisKK3wgc3RyaXA6IFVuYWJsZSB0byByZWNvZ25pc2UgdGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQgZmlsZSBgdGVzdC1saWJhY3BpJworfCBtYWtlOiAqKiogW3Rlc3QtbGliYWNwaV0gRXJyb3IgMQorfCBFUlJPUjogb2VfcnVubWFrZSBmYWlsZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0zOSw3ICszOSw3IEBAIGxpYmFjcGkuc286ICR7T0JKfQorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKyAJQCR7Q0N9IC1vICRAICR7T0JKX3Rlc3R9ICR7TERGTEFHU30KKy0JQHN0cmlwICRACisrCUAke1NUUklQfSAkQAorIAorIGluc3RhbGw6IGFsbAorIAlAZWNobyBpbnN0YWxsaW5nIGhlYWRlciB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9saWJhY3BpXzAuMi5iYiBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9saWJhY3BpXzAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjMwMmYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQUNQSSBkYXRhIGdhdGhlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR2VuZXJhbCBwdXJwb3NlIHNoYXJlZCBsaWJyYXJ5IGZvciBwcm9ncmFtcyBnYXRoZXJpbmcgQUNQSSBkYXRhIG9uIExpbnV4LiBcCitUaGVybWFsIHpvbmVzLCBiYXR0ZXJ5IGluZm9tcmF0aW9uLCBmYW4gaW5mb3JtYXRpb24gYW5kIEFDIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZWMxN2Y4MmYxNjYzMGFkZjJkZmI3ZDJhNDZmMjFjNSIKK1BSID0gInI2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmdvbGRlLmRlL2Rvd25sb2FkL2xpYmFjcGktJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBcCisJICAgZmlsZTovL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoIFwKKwkgICBmaWxlOi8vbGRmbGFncy5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNWI1M2RkN2JlYWQ2NmRkYTM1ZmVjNTAyYjkxMDY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMzA4NmUzMWQ0MjhiOWMxMjU5NTRkNDhhYzQ5N2I3NTRiYmJjZTJlZjM0ZWEyOWVjZDkwM2U4MmUyNWJhZDI5IgorCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKK0NGTEFHUyArPSAiLWZQSUMiCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSJlY2hvIicKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtleGVjX3ByZWZpeH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hY2RlZmluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hY2RlZmluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODJjZjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0FkZCBhIGRlc2NyaXB0aW9uIHRvIHRoZSBBQ19ERUZJTkUgZm9yIExPQ0FMRURJUiBzbyB0aGF0IGl0IGFwcGVhcnMgaW4gY29uZmlnLmgKK2FuZCBzaWxlbmNlcyBhIGZhdGFsIHdhcm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBjMTA0NjBjLi5hYTIwMjYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yNTgsNyArMjU4LDcgQEAgQUNfU1VCU1QoTElCUykKKyAKKyBBTV9HTlVfR0VUVEVYVAorIAorLUFDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsIiRwcmVmaXgvJERBVEFESVJOQU1FIikKKytBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIsW2xvY2FsZSBkaXJlY3RvcnldKQorIAorIEFDX09VVFBVVChbTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlICBtNC9NYWtlZmlsZSBcCisgbWFuL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIHNyYy9NYWtlZmlsZSBkZWJpYW4vcnVsZXMgU3BlY2ZpbGUgc3lzdHlwZSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYXV0b3Rvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQ1MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNH5hdXRvdG9vbHMJMTk5OC0xMi0yNyAxNzowODo1OS4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNAkyMDA0LTA1LTA5IDIyOjI2OjE5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTEsMTIgKzEsMTEgQEAKKyBkbmwgQUNfUkVQTEFDRV9HTlVfR0VUT1BUCistQUNfREVGVU4oQUNfUkVQTEFDRV9HTlVfR0VUT1BULAorLVtBQ19DSEVDS19GVU5DKGdldG9wdF9sb25nLCAsIFtMSUJPQkpTPSIkTElCT0JKUyBnZXRvcHQxLm8gZ2V0b3B0Lm8iXSkKKy1BQ19TVUJTVChMSUJPQkpTKWRubAorLV0pCisrQUNfREVGVU4oW0FDX1JFUExBQ0VfR05VX0dFVE9QVF0sCisrW0FDX0NIRUNLX0ZVTkMoZ2V0b3B0X2xvbmcsICwgW0FDX0xJQk9CSihbZ2V0b3B0MV0pCisrQUNfTElCT0JKKFtnZXRvcHRdKWRubF0pXSkKKyAKKyBkbmwKKyBkbmwgdGFrZW4gZnJvbSB0YXlsb3IgdXVjcAorLUFDX0RFRlVOKExSWlNaX0VSUk5PX0RFQ0wsWworK0FDX0RFRlVOKFtMUlpTWl9FUlJOT19ERUNMXSxbCisgQUNfTVNHX0NIRUNLSU5HKGZvciBlcnJubyBkZWNsYXJhdGlvbikKKyBBQ19DQUNIRV9WQUwobHJ6c3pfY3ZfZGVjbF9lcnJubywKKyBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxlcnJuby5oPl0sIFtpbnQgaSA9IGVycm5vOyBlcnJubyA9IDE7XSwKK0BAIC0yMyw3ICsyMSw3IEBACisgXSkKKyAKKyBkbmwgTFJaU1pfVFlQRV9TUEVFRF9UCistQUNfREVGVU4oTFJaU1pfVFlQRV9TUEVFRF9ULFsKKytBQ19ERUZVTihbTFJaU1pfVFlQRV9TUEVFRF9UXSxbCisgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorIEFDX1JFUVVJUkUoW0xSWlNaX0hFQURFUlNfVEVSTV9JT10pZG5sCisgQUNfTVNHX0NIRUNLSU5HKGZvciBzcGVlZF90KQorQEAgLTYxLDcgKzU5LDcgQEAKKyBmaQorIF0pCisgCistQUNfREVGVU4obHJ6c3pfSEVBREVSX1NZU19TRUxFQ1QsCisrQUNfREVGVU4oW2xyenN6X0hFQURFUl9TWVNfU0VMRUNUXSwKKyBbQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3lzL3RpbWUuaCBhbmQgc3lzL3NlbGVjdC5oIG1heSBib3RoIGJlIGluY2x1ZGVkXSwKKyAgIGxyenN6X2N2X2hlYWRlcl9zeXNfc2VsZWN0LAorIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvZ2V0dGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI0YTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwyMTg4NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL0FCT1VULU5MUwkxOTk4LTA0LTI2IDA5OjIyOjMwLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvQUJPVVQtTkxTCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzIzNzUyOTUyIC0wNDAwCitAQCAtMSwxNCArMSwxNCBAQAorIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgCistICAgRnJlZSBzb2Z0d2FyZSBpcyBnb2luZyBpbnRlcm5hdGlvbmFsISAgVGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorLWlzIGEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAorK0ZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKKythIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKKyB0b2dldGhlciwgc28gdGhhdCB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55IGxhbmd1YWdlcy4KKyBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpciBtZXNzYWdlcy4KKyAKKyAgICBJZiB5b3UgZm91bmQgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIGluc2lkZSBhIGRpc3RyaWJ1dGlvbiwgeW91IG1heQorIGFzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKKy1pdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyAqbm90KgorK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCisgbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKKyB0aGlzIHBhY2thZ2Ugd2l0aCBtZXNzYWdlcyB0cmFuc2xhdGVkLgorIAorQEAgLTIyLDEwICsyMiwxMCBAQAorIGBnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyBgaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KKyAKKy1PbmUgYWR2aXNlIGluIGFkdmFuY2UKKy09PT09PT09PT09PT09PT09PT09PT0KKytRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorKz09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistICAgSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CisrSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91Cisgc2hvdWxkIGNvbmZpZ3VyZSBpdCB1c2luZworIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKK0BAIC0zNCw0MiArMzQsNDAgQEAKKyBwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKKyBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHRoaXMgcGFja2FnZSBpcyBiZWluZyBpbnN0YWxsZWQuICBTbyBmYXIsIG9ubHkKKyB0aGUgYGdldHRleHQnIGltcGxlbWVudGF0aW9uIGluIHRoZSBHTlUgQyBsaWJyYXJ5IHZlcnNpb24gMiBwcm92aWRlcyBhcworLW1hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzIG9yIG1lc3NhZ2UgaW5oZXJpdGFuY2UpIGFzIHRoZQorLWltcGxlbWVudGF0aW9uIGhlcmUuICBJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwKKy1mdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZgorLUdOVSBgZ2V0dGV4dCcgd2lsbCB2ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdAorLW1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisrbWFueSBmZWF0dXJlcyAoc3VjaCBhcyBsb2NhbGUgYWxpYXMsIG1lc3NhZ2UgaW5oZXJpdGFuY2UsIGF1dG9tYXRpYworK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCisrSXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gb2ZmZXIgdGhpcyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb24gdG9wCisrb2YgYSBgY2F0Z2V0cycgaW1wbGVtZW50YXRpb24uICBGdXR1cmUgdmVyc2lvbnMgb2YgR05VIGBnZXR0ZXh0JyB3aWxsCisrdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKKyt0byBjaGFuZ2UgdG8gR05VIGBnZXR0ZXh0JyBhcyBzb29uIGFzIHBvc3NpYmxlLgorIAorLSAgIFNvIHlvdSBuZWVkIG5vdCBwcm92aWRlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdXNpbmcgR05VIGxpYmMgMiBvcgorKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCisgeW91IGhhdmUgaW5zdGFsbGVkIGEgcmVjZW50IGNvcHkgb2YgdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2Ugd2l0aCB0aGUKKyBpbmNsdWRlZCBgbGliaW50bCcuCisgCisgSU5TVEFMTCBNYXR0ZXJzCisgPT09PT09PT09PT09PT09CisgCistICAgU29tZSBwYWNrYWdlcyBhcmUgImxvY2FsaXphYmxlIiB3aGVuIHByb3Blcmx5IGluc3RhbGxlZDsgdGhlCistcHJvZ3JhbXMgdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4KKy1Nb3N0IHN1Y2ggcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93bgorLXdheXMgdG8gaW50ZXJuYXRpb25hbGl6YXRpb24sIHByZWRhdGluZyBHTlUgYGdldHRleHQnLgorK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcworK3RoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuICBNb3N0IHN1Y2gKKytwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duIHdheXMgdG8KKytpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisgCisgICAgQnkgZGVmYXVsdCwgdGhpcyBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIGFsbG93IHRyYW5zbGF0aW9uIG9mCistbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBwcm92aWRlcworLXVzYWJsZSBgY2F0Z2V0cycgKGlmIHVzaW5nIHRoaXMgaXMgc2VsZWN0ZWQgYnkgdGhlIGluc3RhbGxlcikgb3IKKy1gZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbmVpdGhlciBpcyBhdmFpbGFibGUsIHRoZSBHTlUgYGdldHRleHQnIG93bgorK21lc3NhZ2VzLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeQorK3Byb3ZpZGVzIHRoZSBHTlUgYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5vdCwgdGhlIEdOVSBgZ2V0dGV4dCcgb3duCisgbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcworIHBhY2thZ2UsIHVzdWFsbHkgaW4gdGhlIGBpbnRsLycgc3ViZGlyZWN0b3J5LCBzbyBwcmlvciBpbnN0YWxsYXRpb24gb2YKKy10aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzICpub3QqIHJlcXVpcmVkLiAgSW5zdGFsbGVycyBtYXkgdXNlCisrdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0CisgYmVoYXZpb3VyLiAgVGhlIGNvbW1hbmRzOgorIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKy0gICAgIC4vY29uZmlndXJlIC0td2l0aC1jYXRnZXRzCisgICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisgCistd2lsbCByZXNwZWN0aXZlbHkgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGNhdGdldHMnIG9yIGBnZXR0ZXh0JyB0byB1c2UKKy10aGUgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzIHBhY2thZ2UsIGVuYWJsZQorLXRoZSB1c2Ugb2YgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgKGlmIGZvdW5kIG9uIHRoZSBsb2NhbGUgc3lzdGVtKSwgb3IKKy1lbHNlLCAqdG90YWxseSogZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKyt3aWxsIHJlc3BlY3RpdmVseSBieXBhc3MgYW55IHByZS1leGlzdGluZyBgZ2V0dGV4dCcgdG8gdXNlIHRoZQorK2ludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcyBwYWNrYWdlLCBvciBlbHNlLAorK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorIAorICAgIFdoZW4geW91IGFscmVhZHkgaGF2ZSBHTlUgYGdldHRleHQnIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgcnVuCisgY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitAQCAtODMsMTggKzgxLDEwIEBACisgCisgdG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKyAKKy0gICBCeSBkZWZhdWx0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJworLWZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgdGhleSB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbnMgYXJlIGFscmVhZHkKKy1naXZlbiBhYm92ZTogdGhlIGVtdWxhdGlvbiBvbiB0b3Agb2YgYGNhdGdldHMnIGNhbm5vdCBwcm92aWRlIGFsbCB0aGUKKy1leHRlbnNpb25zIHByb3ZpZGVkIGJ5IHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBJZiB5b3UgbmV2ZXJ0aGVsZXNzCistd2FudCB0byB1c2UgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgdXNlCistCistICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtY2F0Z2V0cworLQorLXRvIGVuYWJsZSB0aGUgdGVzdCBmb3IgYGNhdGdldHMnICh0aGlzIGNhdXNlcyBubyBoYXJtIGlmIGBjYXRnZXRzJyBpcworLW5vdCBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0pLiAgSWYgeW91IHJlYWxseSBzZWxlY3QgdGhpcyBvcHRpb24gd2UKKy13b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlIHJlYXNvbnMgYmVjYXVzZSB3ZSBjYW5ub3QgdGhpbmsgb2YgYW55CistZ29vZCBvbmUgb3Vyc2VsZi4KKysgICBUaGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHdpbGwgbm90IHRlc3QgZm9yIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb24KKythbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorK2VtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCisrZXh0ZW5zaW9ucyBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LgorIAorICAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIGhhdmUgdXN1YWxseSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCisgTEwgZ2l2ZXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGNvZGUgaWRlbnRpZnlpbmcgdGhlIGxhbmd1YWdlLiAgVW5sZXNzCitAQCAtMTA4LDU3ICs5OCw3MyBAQAorIFVzaW5nIFRoaXMgUGFja2FnZQorID09PT09PT09PT09PT09PT09PQorIAorLSAgIEFzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91CisrQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKKyBvbmx5IGhhdmUgdG8gc2V0IHRoZSBgTEFORycgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGFwcHJvcHJpYXRlCistSVNPIDYzOSBgTEwnIHR3by1sZXR0ZXIgY29kZSBwcmlvciB0byB1c2luZyB0aGUgcHJvZ3JhbXMgaW4gdGhlCistcGFja2FnZS4gIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbi4gIEF0IHRoZQorLXNoZWxsIHByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlJyAoaW4gYGNzaCcpLAorLWBleHBvcnQgTEFORzsgTEFORz1kZScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZScgKGluIGBiYXNoJykuICBUaGlzCistY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yIGFsbC4KKytgTExfQ0MnIGNvbWJpbmF0aW9uLiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLAorK2FuZCBgQ0MnIGlzIGFuIElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIGxldCdzCisrc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4gYW5kIGxpdmUgaW4gR2VybWFueS4gIEF0IHRoZSBzaGVsbAorK3Byb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAorK2BleHBvcnQgTEFORzsgTEFORz1kZV9ERScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZV9ERScgKGluIGBiYXNoJykuCisrVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IKKythbGwuCisgCistICAgQW4gb3BlcmF0aW5nIHN5c3RlbSBtaWdodCBhbHJlYWR5IG9mZmVyIG1lc3NhZ2UgbG9jYWxpemF0aW9uIGZvcgorLW1hbnkgb2YgaXRzIHByb2dyYW1zLCB3aGlsZSBvdGhlciBwcm9ncmFtcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGxvY2FsbHkKKy13aXRoIHRoZSBmdWxsIGNhcGFiaWxpdGllcyBvZiBHTlUgYGdldHRleHQnLiAgSnVzdCB1c2luZyBgZ2V0dGV4dCcKKy1leHRlbmRlZCBzeW50YXggZm9yIGBMQU5HJyB3b3VsZCBicmVhayBwcm9wZXIgbG9jYWxpemF0aW9uIG9mIGFscmVhZHkKKy1hdmFpbGFibGUgb3BlcmF0aW5nIHN5c3RlbSBwcm9ncmFtcy4gIEluIHRoaXMgY2FzZSwgdXNlcnMgc2hvdWxkIHNldAorLWJvdGggYExBTkdVQUdFJyBhbmQgYExBTkcnIHZhcmlhYmxlcyBpbiB0aGVpciBlbnZpcm9ubWVudCwgYXMgcHJvZ3JhbXMKKy11c2luZyBHTlUgYGdldHRleHQnIGdpdmUgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnLiAgRm9yIGV4YW1wbGUsIHNvbWUKKy1Td2VkaXNoIHVzZXJzIHdvdWxkIHJhdGhlciByZWFkIHRyYW5zbGF0aW9ucyBpbiBHZXJtYW4gdGhhbiBFbmdsaXNoIGZvcgorLXdoZW4gU3dlZGlzaCBpcyBub3QgYXZhaWxhYmxlLiAgVGhpcyBpcyBlYXNpbHkgYWNjb21wbGlzaGVkIGJ5IHNldHRpbmcKKy1gTEFOR1VBR0UnIHRvIGBzdjpkZScgd2hpbGUgbGVhdmluZyBgTEFORycgdG8gYHN2Jy4KKysgICBZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgY291bnRyeSBjb2RlIHNwZWNpZmljYXRpb24gaXMgcmVkdW5kYW50LgorK0J1dCBpbiBmYWN0LCBzb21lIGxhbmd1YWdlcyBoYXZlIGRpYWxlY3RzIGluIGRpZmZlcmVudCBjb3VudHJpZXMuICBGb3IKKytleGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKKytjb3VudHJ5IGNvZGUgc2VydmVzIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWFsZWN0cy4KKysKKysgICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKKytsYW5ndWFnZSBhbmQgYENDJyBkZW5vdGluZyB0aGUgY291bnRyeSwgaXMgdGhlIG9uZSB1c2Ugb24gc3lzdGVtcyBiYXNlZAorK29uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQorK3VzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKKytsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBjb3VudHJ5IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKKytgbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCisrCisrICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCisrRW5nbGlzaCBtZXNzYWdlIGlzIHNob3duIGluIHBsYWNlIG9mIGEgbm9uZXhpc3RlbnQgdHJhbnNsYXRpb24uICBJZiB5b3UKKyt1bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KKytUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCisrYExBTkdVQUdFJy4gIEdOVSBgZ2V0dGV4dCcgZ2l2ZXMgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnIG92ZXIgYExBTkcnCisrZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKKytzeXN0ZW0gbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIHNvbWUgU3dlZGlzaCB1c2VycyB3aG8gd291bGQgcmF0aGVyCisrcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorKworKyAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KKytib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQorK3RyYW5zaXRpb24gcGVyaW9kLCB3aGlsZSBzb21lIG1lc3NhZ2UgY2F0YWxvZ3MgZm9yIHRoaXMgbGFuZ3VhZ2UgYXJlCisraW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCisrZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKKytvbGRlciB0cmFuc2xhdGlvbnMgYXJlIHVzZWQuCisrCisrICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworK2Vudmlyb25tZW50IHZhcmlhYmxlLCBgTExfQ0MnIGNvbWJpbmF0aW9ucyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgYExMJworK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50CisrdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworKyhQb3J0dWd1ZXNlIGFzIHNwb2tlbiBpbiBQb3J0dWdhbCkgaW4gdGhpcyBjb250ZXh0LgorIAorIFRyYW5zbGF0aW5nIFRlYW1zCisgPT09PT09PT09PT09PT09PT0KKyAKKy0gICBGb3IgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCB0byBiZSBhIHN1Y2Nlc3MsIHdlIG5lZWQgaW50ZXJlc3RlZAorK0ZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCisgcGVvcGxlIHdobyBsaWtlIHRoZWlyIG93biBsYW5ndWFnZSBhbmQgd3JpdGUgaXQgd2VsbCwgYW5kIHdobyBhcmUgYWxzbworIGFibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCistRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdCwgY291cnRlc3kgb2YgTGludXgKKy1JbnRlcm5hdGlvbmFsLiAgWW91IG1heSByZWFjaCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0gYXQgdGhlIGFkZHJlc3MKKy1gTExAbGkub3JnJywgcmVwbGFjaW5nIExMIGJ5IHRoZSB0d28tbGV0dGVyIElTTyA2MzkgY29kZSBmb3IgeW91cgorLWxhbmd1YWdlLiAgTGFuZ3VhZ2UgY29kZXMgYXJlICpub3QqIHRoZSBzYW1lIGFzIHRoZSBjb3VudHJ5IGNvZGVzIGdpdmVuCistaW4gSVNPIDMxNjYuICBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9uIHRlYW1zIGV4aXN0LCBhcyBvZiBBdWd1c3QgMTk5NzoKKy0KKy0gICAgIENoaW5lc2UgYHpoJywgQ3plY2ggYGNzJywgRGFuaXNoIGBkYScsIER1dGNoIGBubCcsIEVuZ2xpc2ggYGVuJywKKy0gICAgIEVzcGVyYW50byBgZW8nLCBGaW5uaXNoIGBmaScsIEZyZW5jaCBgZnInLCBHZXJtYW4gYGRlJywgSHVuZ2FyaWFuCistICAgICBgaHUnLCBJcmlzaCBgZ2EnLCBJdGFsaWFuIGBpdCcsIEluZG9uZXNpYW4gYGlkJywgSmFwYW5lc2UgYGphJywKKy0gICAgIEtvcmVhbiBga28nLCBMYXRpbiBgbGEnLCBOb3J3ZWdpYW4gYG5vJywgUGVyc2lhbiBgZmEnLCBQb2xpc2gKKy0gICAgIGBwbCcsIFBvcnR1Z3Vlc2UgYHB0JywgUnVzc2lhbiBgcnUnLCBTbG92ZW5pYW4gYHNsJywgU3BhbmlzaCBgZXMnLAorLSAgICAgU3dlZGlzaCBgc3YnLCBhbmQgVHVya2lzaCBgdHInLgorLQorLUZvciBleGFtcGxlLCB5b3UgbWF5IHJlYWNoIHRoZSBDaGluZXNlIHRyYW5zbGF0aW9uIHRlYW0gYnkgd3JpdGluZyB0bworLWB6aEBsaS5vcmcnLgorK0VhY2ggdHJhbnNsYXRpb24gdGVhbSBoYXMgaXRzIG93biBtYWlsaW5nIGxpc3QuICBUaGUgdXAtdG8tZGF0ZSBsaXN0IG9mCisrdGVhbXMgY2FuIGJlIGZvdW5kIGF0IHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QncyBob21lcGFnZSwKKytgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC8nLCBpbiB0aGUgIk5hdGlvbmFsIHRlYW1zIgorK2FyZWEuCisgCistICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gKndvcmsqIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKKysgICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byBfd29ya18gYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorIHNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorLVRoZSBzdWJzY3JpYmluZyBhZGRyZXNzIGlzICpub3QqIHRoZSBzYW1lIGFzIHRoZSBsaXN0IGl0c2VsZiwgaXQgaGFzCisrVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKKyBgLXJlcXVlc3QnIGFwcGVuZGVkLiAgRm9yIGV4YW1wbGUsIHNwZWFrZXJzIG9mIFN3ZWRpc2ggY2FuIHNlbmQgYQorIG1lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorIAorICAgICAgc3Vic2NyaWJlCisgCisgICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorLSphY3RpdmVseSogaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorK19hY3RpdmVseV8gaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorIHJhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCisgeW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworIGdldCBzdGFydGVkLCBwbGVhc2Ugd3JpdGUgdG8gYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIHJlYWNoIHRoZQorQEAgLTE3MSw0MyArMTc3LDU1OSBAQAorIEF2YWlsYWJsZSBQYWNrYWdlcworID09PT09PT09PT09PT09PT09PQorIAorLSAgIExhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKKy1tYXRyaXggc2hvd3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFzIG9mIEF1Z3VzdAorLTE5OTcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCistUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24uCisrTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgSmFudWFyeQorKzIwMDQuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCisrUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24sIHdpdGggYQorK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorIAorLSAgICAgUmVhZHkgUE8gZmlsZXMgICAgY3MgZGEgZGUgZW4gZXMgZmkgZnIgaXQgamEga28gbmwgbm8gcGwgcHQgc2wgc3YKKy0gICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy0gICAgIGJhc2ggICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGJpc29uICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKy0gICAgIGNwaW8gICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwgIDUKKy0gICAgIGRpZmZ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGVuc2NyaXB0ICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwgIDYKKy0gICAgIGZpbGV1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGZpbmR1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDgKKy0gICAgIGZsZXggICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIHwgIDQKKy0gICAgIGdjYWwgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGdldHRleHQgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTEKKy0gICAgIGdyZXAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIHwgIDkKKy0gICAgIGhlbGxvICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGlkLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDMKKy0gICAgIGluZGVudCAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgIHwgIDQKKy0gICAgIGxpYmMgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDcKKy0gICAgIG00ICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIG1ha2UgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwgIDYKKy0gICAgIG11c2ljICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDIKKy0gICAgIHB0eCAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDgKKy0gICAgIHJlY29kZSAgICAgICAgICB8ICAgIFtdIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIHwgIDkKKy0gICAgIHNoLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDcKKy0gICAgIHNoYXJ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIHRhciAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIHRleGluZm8gICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKy0gICAgIHRleHR1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIHwgIDkKKy0gICAgIHdkaWZmICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgIFtdIHwgIDgKKy0gICAgICAgICAgICAgICAgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKy0gICAgICAgMTYgbGFuZ3VhZ2VzICAgIGNzIGRhIGRlIGVuIGVzIGZpIGZyIGl0IGphIGtvIG5sIG5vIHBsIHB0IHNsIHN2CistICAgICAgIDI3IHBhY2thZ2VzICAgICAgMyAgMiAyNCAgMSAxNyAgMSAyNiAgMiAgMSAxMSAyMCAgOSAxOSAgNyAgNyAxNyAgMTY3CisrICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9HQiBlbyBlcworKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgICAgfAorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgKCkgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgICAgKCkgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgfAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgIFtdICAgICAgW10gfAorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWYgYW0gYXIgYXogYmUgYmcgYnMgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAwICAwICAxICA5ICA0ICAxIDQwIDQxIDYwIDc4IDE3ICAxICAgNSAgIDEzIDY4CisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGV1IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGlzIGl0IGphIGtvIGxnCisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSAgICB8CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICAoKSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBwdHggICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAoKSAgICAgICAoKSAgICAgICAgICB8CisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAoKSBbXSAgICAgICB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgICAgICAgICAgICAgICAgICAgICBldCBldSBmYSBmaSBmciBnYSBnbCBoZSBociBodSBpZCBpcyBpdCBqYSBrbyBsZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjIgIDIgIDEgMjYgMTA2IDI4IDI0ICA4IDEwIDQxIDMzICAxIDI2IDMzIDEyICAwCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICgpICAgICAoKSAgICAgW10gICBbXSBbXSB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgKCkgICAgICAgICAgW10gICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICgpICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICgpICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKysgICAgIGdudXBnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgIFtdIFtdIFtdIFtdICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgW10gW10gIFtdICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdICgpIHwKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICBbXSAgICAgW10gICAgICAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdIFtdICBbXSAgICAgICAgIHwKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIHwKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSBbXSAgW10gICBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICBbXSB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDIgIDAgIDMgMTIgIDAgMTAgNjkgIDYgIDcgIDEgIDQwIDI2ICAzNiAgIDc2IDYzCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8ICA4CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgIHwgMTIKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIzCisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKysgICAgIGVycm9yICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE1CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIHwgMTcKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgW10gW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyMgorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTMKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOQorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDgKKysgICAgIGdudXBnICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE3CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTIKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTEKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI2CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM0CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDI3CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICBbXSAgICAgICAgW10gICAgW10gICAgICB8ICA5CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgKCkgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDIwCisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgIFtdICAgICBbXSAgICAgICAgICAgIHwgMjcKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICB8ICAwCisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNgorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyCisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgIDIKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNworKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyNAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8IFtdICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDExCisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgNjMgdGVhbXMgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgIDEzMSBkb21haW5zICAgICAgICAgNDcgMTkgMjggODMgIDAgIDAgNTkgMTMgIDEgICAxIDExICAwICAyMiAgICAyMiAgICAwICAxMzczCisgCisgICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgorIHZpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCitAQCAtMjIwLDYgKzc0MiwyNyBAQAorIGxhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCisgZGlzdHJpYnV0aW9uLgorIAorLSAgIElmIEF1Z3VzdCAxOTk3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKKy10aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4KKysgICBJZiBKYW51YXJ5IDIwMDQgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgorK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorK21hdHJpeCB3aXRoIGZ1bGwgcGVyY2VudGFnZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBhdAorK2BodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1ML21hdHJpeC5odG1sJy4KKysKKytVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCisrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworK0lmIHlvdSBhcmUgd3JpdGluZyBhIGZyZWVseSBhdmFpbGFibGUgcHJvZ3JhbSBhbmQgd2FudCB0bworK2ludGVybmF0aW9uYWxpemUgaXQgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSBHTlUgYGdldHRleHQnIGluIHlvdXIKKytwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrTGljZW5zZSB3aGljaCBjb3ZlcnMgdGhlIHVzZSBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgVGhpcyBtZWFucworK2luIHBhcnRpY3VsYXIgdGhhdCBldmVuIG5vbi1mcmVlIHByb2dyYW1zIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc2hhcmVkCisrbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKKytsaWJyYXJ5IG9yIHVzZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBgbGliaW50bCcuCisrCisrICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQorK3RoZSB1c2Ugb2YgYGdldHRleHQnIHRoZSBvbmx5IHRoaW5nIG1pc3NpbmcgYXJlIHRoZSB0cmFuc2xhdGlvbnMuICBUaGUKKytGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKKytkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKKythcHBsaWVzIGFsc28gZm9yIGV2ZXJ5IG90aGVyIEZyZWUgU29mdHdhcmUgUHJvamVjdC4gIENvbnRhY3QKKytgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZSB0bworK3RoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvQ2hhbmdlTG9nCTE5OTgtMTItMjkgMTc6NDk6NTYuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNS44NDY1MjE0NTYgLTA0MDAKK0BAIC0xLDMgKzEsMTEgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IE5ldyB2YXJpYWJsZS4KKysJKEVYVFJBX0RJU1QpOiBBZGQgY29uZmlnLnJwYXRoLgorKwkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogQWRkIG00L01ha2VmaWxlLgorKwkoQUNfT1VUUFVUKTogUmVtb3ZlIGNvbW1hbmQgdGhhdCBjcmVhdGVkIHBvL01ha2VmaWxlLgorKwkoQUNfTElOS19GSUxFUyk6IFJlbW92ZSBpbnZvY2F0aW9uLgorKworIDE5OTgtMTItMjkJVXdlIE9oc2UgIDx1d2VAb2hzZS5kZT4KKyAKKyAJKiBzcmMvbHJ6LmM6IHJlbW92ZWQgc3RwY3B5IGNhbGwuCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2NvbmZpZy5ycGF0aAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvY29uZmlnLnJwYXRoCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzI5NzUyMDQwIC0wNDAwCitAQCAtMCwwICsxLDU0OCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorKyMKKysjICAgQ29weXJpZ2h0IDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKyMKKysjICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorKyMgICBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKysjICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKysjICAgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKysjIG9yCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKysjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisrIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisrIworKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorKworKyMgS25vd24gbGltaXRhdGlvbnM6CisrIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKysjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisrIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisrCisrIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE0kVkMsCisrIyB3aGljaCBuZWVkcyAnLmxpYicpLgorK2xpYmV4dD1hCisrc2hyZXh0PS5zbworKworK2hvc3Q9IiQxIgorK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisrCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisrCisrd2w9CisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgIHdsPSctV2wsJworK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKysgICAgICA7OworKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG5ld3NvczYpCisrICAgICAgOzsKKysgICAgbGludXgqKQorKyAgICAgIGNhc2UgJENDIGluCisrICAgICAgICBpY2N8ZWNjKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICAgIGNjYykKKysgICAgICAgICAgd2w9Jy1XbCwnCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzY28zLjJ2NSopCisrICAgICAgOzsKKysgICAgc29sYXJpcyopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICB3bD0nLVFvcHRpb24gbGQgJworKyAgICAgIDs7CisrICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzeXN2NCpNUCopCisrICAgICAgOzsKKysgICAgdXRzNCopCisrICAgICAgOzsKKysgIGVzYWMKKytmaQorKworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorKworK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKytoYXJkY29kZV9kaXJlY3Q9bm8KKytoYXJkY29kZV9taW51c19MPW5vCisrCisrY2FzZSAiJGhvc3Rfb3MiIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKysgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgd2l0aF9nbnVfbGQ9bm8KKysgICAgZmkKKysgICAgOzsKKysgIG9wZW5ic2QqKQorKyAgICB3aXRoX2dudV9sZD1ubworKyAgICA7OworK2VzYWMKKysKKytsZF9zaGxpYnM9eWVzCisraWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKysgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisrICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGFtaWdhb3MqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisrICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKysgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKysgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbiB1c2UKKysgICAgICAjIHRoZW0uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYmVvcyopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgbmV0YnNkKikKKysgICAgICA7OworKyAgICBzb2xhcmlzKiB8IHN5c3Y1KikKKysgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIHN1bm9zNCopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgICopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgZXNhYworKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSB5ZXM7IHRoZW4KKysgICAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKysgICAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICBmaQorK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgzKikKKysgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKysgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhaXg0KiB8IGFpeDUqKQorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisrICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKysgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysgICAgICBlbHNlCisrICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisrICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKysgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKysgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisrICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKysgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKysgICAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorKyAgICAgICAgICBmaQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KKyt9J2AKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9CisrfSdgCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKysgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICBlbHNlCisrICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhbWlnYW9zKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYnNkaTQqKQorKyAgICAgIDs7CisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysgICAgICBsaWJleHQ9bGliCisrICAgICAgOzsKKysgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgICBpZiAkQ0MgLXYgMj4mMSB8IGdyZXAgJ0FwcGxlJyA+L2Rldi9udWxsIDsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBkZ3V4KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgOzsKKysgICAgZnJlZWJzZDEqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICAgIGZyZWVic2QyLjIqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgZnJlZWJzZDIqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIGZyZWVic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDkqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisrICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgIGhwcGEqNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgIGlhNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBuZXRic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgbmV3c29zNikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIG9wZW5ic2QqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgZWxzZQorKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgICopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgb3MyKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBvc2YzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgb3NmNCogfCBvc2Y1KikKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGVsc2UKKysgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKysgICAgICBmaQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIHNjbzMuMnY1KikKKysgICAgICA7OworKyAgICBzb2xhcmlzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgc3lzdjQpCisrICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKysgICAgICAgIHNuaSkKKysgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKysgICAgICAgICAgOzsKKysgICAgICAgIHNpZW1lbnMpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICA7OworKyAgICAgICAgbW90b3JvbGEpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIHN5c3Y0LjMqKQorKyAgICAgIDs7CisrICAgIHN5c3Y0Kk1QKikKKysgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9eWVzCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBzeXN2NC4ydXcyKikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbWludXNfTD1ubworKyAgICAgIDs7CisrICAgIHN5c3Y1T3BlblVOSVg4KiB8IHN5c3Y1VW5peFdhcmU3KiB8ICBzeXN2NXV3Wzc4XSogfCB1bml4d2FyZTcqKQorKyAgICAgIDs7CisrICAgIHN5c3Y1KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorKyAgICAgIDs7CisrICAgIHV0czQqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICBlc2FjCisrZmkKKysKKysjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKytsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworK2Nhc2UgIiRob3N0X29zIiBpbgorKyAgYWl4MyopCisrICAgIDs7CisrICBhaXg0KiB8IGFpeDUqKQorKyAgICA7OworKyAgYW1pZ2FvcyopCisrICAgIDs7CisrICBiZW9zKikKKysgICAgOzsKKysgIGJzZGk0KikKKysgICAgOzsKKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgc2hyZXh0PS5kbGwKKysgICAgOzsKKysgIGRhcndpbiogfCByaGFwc29keSopCisrICAgIHNocmV4dD0uZHlsaWIKKysgICAgOzsKKysgIGRndXgqKQorKyAgICA7OworKyAgZnJlZWJzZDEqKQorKyAgICA7OworKyAgZnJlZWJzZCopCisrICAgIDs7CisrICBnbnUqKQorKyAgICA7OworKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICBpYTY0KikKKysgICAgICAgIHNocmV4dD0uc28KKysgICAgICAgIDs7CisrICAgICAgaHBwYSo2NCopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICAgICopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgY2FzZSAkTEQgaW4KKysgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKysgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisrICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisrICAgIDs7CisrICBsaW51eCopCisrICAgIDs7CisrICBuZXRic2QqKQorKyAgICA7OworKyAgbmV3c29zNikKKysgICAgOzsKKysgIG50by1xbngpCisrICAgIDs7CisrICBvcGVuYnNkKikKKysgICAgOzsKKysgIG9zMiopCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNocmV4dD0uZGxsCisrICAgIDs7CisrICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIDs7CisrICBzY28zLjJ2NSopCisrICAgIDs7CisrICBzb2xhcmlzKikKKysgICAgOzsKKysgIHN1bm9zNCopCisrICAgIDs7CisrICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrICAgIDs7CisrICBzeXN2NCpNUCopCisrICAgIDs7CisrICB1dHM0KikKKysgICAgOzsKKytlc2FjCisrCisrc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKytlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKworK3NlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorKworKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0iJGVzY2FwZWRfd2wiCisrCisrIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCisrbGliZXh0PSIkbGliZXh0IgorKworKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KKytzaGxpYmV4dD0iJHNobGliZXh0IgorKworKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKytoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKworKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrCisrIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysjIHJlc3VsdGluZyBiaW5hcnkuCisraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorKworKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrIyByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorKworK0VPRgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMiAxNDozOTo1NS4xNjE3MDY0ODggLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM1LjgxNjUyNjAxNiAtMDQwMAorQEAgLTI2MCwxMSArMjYwLDEwIEBACisgQU1fR05VX0dFVFRFWFQKKyAKKyBBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIpCistQUNfTElOS19GSUxFUygkbmxzX2N2X2hlYWRlcl9saWJndCwgJG5sc19jdl9oZWFkZXJfaW50bCkKKyAKKy1BQ19PVVRQVVQoW01ha2VmaWxlIGludGwvTWFrZWZpbGUgbGliL01ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBcCisrQUNfT1VUUFVUKFtNYWtlZmlsZSBpbnRsL01ha2VmaWxlIGxpYi9NYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgIG00L01ha2VmaWxlIFwKKyBtYW4vTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gc3JjL01ha2VmaWxlIGRlYmlhbi9ydWxlcyBTcGVjZmlsZSBzeXN0eXBlIFwKKyBzcmMvbHJ6c3pidWddLAorLVtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IAorK1sKKyBjaG1vZCAreCBkZWJpYW4vcnVsZXM7CisgdGVzdCAteiAiJENPTkZJR19IRUFERVJTIiB8fCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2JpbmR0ZXh0ZG9tLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvYmluZHRleHRkb20uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM0Mzc0OTkxMiAtMDQwMAorQEAgLTEsNTkgKzEsNzUgQEAKKyAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kaXJuYW1lIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lCisrIyBkZWZpbmUgX25sX2RvbWFpbl9iaW5kaW5ncyBsaWJpbnRsX25sX2RvbWFpbl9iaW5kaW5ncworKyNlbmRpZgorKworKy8qIFNvbWUgY29tcGlsZXJzLCBsaWtlIFN1bk9TNCBjYywgZG9uJ3QgaGF2ZSBvZmZzZXRvZiBpbiA8c3RkZGVmLmg+LiAgKi8KKysjaWZuZGVmIG9mZnNldG9mCisrIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkgKChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCisgI2VuZGlmCistI2luY2x1ZGUgImdldHRleHQuaCIKKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lX2ludGVybmFsW10gYXR0cmlidXRlX2hpZGRlbjsKKysjZWxzZQorKyMgZGVmaW5lIElOVFVTRShuYW1lKSBuYW1lCisrI2VuZGlmCisgCisgLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMuICAqLworIGV4dGVybiBzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKyAKKysvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKytfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKworIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCitAQCAtNjEsMjMgKzc3LDQxIEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBCSU5EVEVYVERPTUFJTiBfX2JpbmR0ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisrIyBpZm5kZWYgc3RyZHVwCisrIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBlbmRpZgorICNlbHNlCistIyBkZWZpbmUgQklORFRFWFRET01BSU4gYmluZHRleHRkb21haW5fXworKyMgZGVmaW5lIEJJTkRURVhURE9NQUlOIGxpYmludGxfYmluZHRleHRkb21haW4KKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisgI2VuZGlmCisgCistLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCistICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworLWNoYXIgKgorLUJJTkRURVhURE9NQUlOIChkb21haW5uYW1lLCBkaXJuYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CisrLyogU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgbmFtZSAqRElSTkFNRVAgYW5kIHRoZSBvdXRwdXQgY29kZXNldCAqQ09ERVNFVFAKKysgICB0byBiZSB1c2VkIGZvciB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cuCisrICAgSWYgKkRJUk5BTUVQIG9yICpDT0RFU0VUUCBpcyBOVUxMLCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgbm90CisrICAgbW9kaWZpZWQsIG9ubHkgdGhlIGN1cnJlbnQgdmFsdWUgaXMgcmV0dXJuZWQuCisrICAgSWYgRElSTkFNRVAgb3IgQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5laXRoZXIKKysgICBtb2RpZmllZCBub3IgcmV0dXJuZWQuICAqLworK3N0YXRpYyB2b2lkCisrc2V0X2JpbmRpbmdfdmFsdWVzIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJICAgIGNvbnN0IGNoYXIgKipkaXJuYW1lcCwgY29uc3QgY2hhciAqKmNvZGVzZXRwKQorIHsKKyAgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgaW50IG1vZGlmaWVkOworIAorICAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwgfHwgZG9tYWlubmFtZVswXSA9PSAnXDAnKQorLSAgICByZXR1cm4gTlVMTDsKKysgICAgeworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJKmRpcm5hbWVwID0gTlVMTDsKKysgICAgICBpZiAoY29kZXNldHApCisrCSpjb2Rlc2V0cCA9IE5VTEw7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgbW9kaWZpZWQgPSAwOworIAorICAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKyAgICAgeworQEAgLTkzLDgxICsxMjcsMTczIEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKy0gICAgLyogVGhlIGN1cnJlbnQgYmluZGluZyBoYXMgYmUgdG8gcmV0dXJuZWQuICAqLworLSAgICByZXR1cm4gYmluZGluZyA9PSBOVUxMID8gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZSA6IGJpbmRpbmctPmRpcm5hbWU7CistCisgICBpZiAoYmluZGluZyAhPSBOVUxMKQorICAgICB7CistICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorLQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorLQkgb2xkIGJpbmRpbmcuICAqLworLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIGJpbmRpbmctPmRpcm5hbWUpICE9IDApCisrICAgICAgaWYgKGRpcm5hbWVwKQorIAl7CistCSAgY2hhciAqbmV3X2Rpcm5hbWU7CisrCSAgY29uc3QgY2hhciAqZGlybmFtZSA9ICpkaXJuYW1lcDsKKyAKKy0JICBpZiAoc3RyY21wIChkaXJuYW1lLCBfbmxfZGVmYXVsdF9kaXJuYW1lKSA9PSAwKQorLQkgICAgbmV3X2Rpcm5hbWUgPSAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOworKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisrCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisrCSAgICAqZGlybmFtZXAgPSBiaW5kaW5nLT5kaXJuYW1lOworIAkgIGVsc2UKKyAJICAgIHsKKysJICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKysJCSBvbGQgYmluZGluZy4gICovCisrCSAgICAgIGNoYXIgKnJlc3VsdCA9IGJpbmRpbmctPmRpcm5hbWU7CisrCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIHJlc3VsdCkgIT0gMCkKKysJCXsKKysJCSAgaWYgKHN0cmNtcCAoZGlybmFtZSwgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKSA9PSAwKQorKwkJICAgIHJlc3VsdCA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysJCSAgZWxzZQorKwkJICAgIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgICAgIG5ld19kaXJuYW1lID0gc3RyZHVwIChkaXJuYW1lKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisgI2Vsc2UKKy0JICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworLQkgICAgICBuZXdfZGlybmFtZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKy0KKy0JICAgICAgbWVtY3B5IChuZXdfZGlybmFtZSwgZGlybmFtZSwgbGVuKTsKKysJCSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkJbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisgI2VuZGlmCisrCQkgICAgfQorKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChiaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKysKKysJCSAgICAgIGJpbmRpbmctPmRpcm5hbWUgPSByZXN1bHQ7CisrCQkgICAgICBtb2RpZmllZCA9IDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CisgCSAgICB9CisrCX0KKyAKKy0JICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBfbmxfZGVmYXVsdF9kaXJuYW1lKQorLQkgICAgZnJlZSAoYmluZGluZy0+ZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwl7CisrCSAgY29uc3QgY2hhciAqY29kZXNldCA9ICpjb2Rlc2V0cDsKKyAKKy0JICBiaW5kaW5nLT5kaXJuYW1lID0gbmV3X2Rpcm5hbWU7CisrCSAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKysJICAgICpjb2Rlc2V0cCA9IGJpbmRpbmctPmNvZGVzZXQ7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisrCQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorKwkJIG9sZCBiaW5kaW5nLiAgKi8KKysJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+Y29kZXNldDsKKysJICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8IHN0cmNtcCAoY29kZXNldCwgcmVzdWx0KSAhPSAwKQorKwkJeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKysjZWxzZQorKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCQkgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKysjZW5kaWYKKysKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICB7CisrCQkgICAgICBpZiAoYmluZGluZy0+Y29kZXNldCAhPSBOVUxMKQorKwkJCWZyZWUgKGJpbmRpbmctPmNvZGVzZXQpOworKworKwkJICAgICAgYmluZGluZy0+Y29kZXNldCA9IHJlc3VsdDsKKysJCSAgICAgIGJpbmRpbmctPmNvZGVzZXRfY250cisrOworKwkJICAgICAgbW9kaWZpZWQgPSAxOworKwkJICAgIH0KKysJCX0KKysJICAgICAgKmNvZGVzZXRwID0gcmVzdWx0OworKwkgICAgfQorIAl9CisgICAgIH0KKysgIGVsc2UgaWYgKChkaXJuYW1lcCA9PSBOVUxMIHx8ICpkaXJuYW1lcCA9PSBOVUxMKQorKwkgICAmJiAoY29kZXNldHAgPT0gTlVMTCB8fCAqY29kZXNldHAgPT0gTlVMTCkpCisrICAgIHsKKysgICAgICAvKiBTaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcy4gICovCisrICAgICAgaWYgKGRpcm5hbWVwKQorKwkqZGlybmFtZXAgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwkqY29kZXNldHAgPSBOVUxMOworKyAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nLiAgKi8KKy0gICAgICBzaXplX3QgbGVuOworKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpICsgMTsKKyAgICAgICBzdHJ1Y3QgYmluZGluZyAqbmV3X2JpbmRpbmcgPQorLQkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChzaXplb2YgKCpuZXdfYmluZGluZykpOworKwkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChvZmZzZXRvZiAoc3RydWN0IGJpbmRpbmcsIGRvbWFpbm5hbWUpICsgbGVuKTsKKyAKKy0gICAgICBpZiAobmV3X2JpbmRpbmcgPT0gTlVMTCkKKy0JcmV0dXJuIE5VTEw7CisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld19iaW5kaW5nID09IE5VTEwsIDApKQorKwlnb3RvIGZhaWxlZDsKKyAKKysgICAgICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBsZW4pOworKworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJeworKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisrCisrCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysJICAgIGRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisrCQlkaXJuYW1lID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGNoYXIgKnJlc3VsdDsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworLSAgICAgIGlmIChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChkaXJuYW1lKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCSAgICBnb3RvIGZhaWxlZF9kaXJuYW1lOworICNlbHNlCistICAgICAgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lID09IE5VTEwpCistCXJldHVybiBOVUxMOworLSAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisrCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisrCQkgIG1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworICNlbmRpZgorLQorLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIF9ubF9kZWZhdWx0X2Rpcm5hbWUpID09IDApCistCW5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZTsKKysJCSAgZGlybmFtZSA9IHJlc3VsdDsKKysJCX0KKysJICAgIH0KKysJICAqZGlybmFtZXAgPSBkaXJuYW1lOworKwkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgZGlybmFtZTsKKysJfQorICAgICAgIGVsc2UKKysJLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworKwluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysKKysgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyID0gMDsKKysKKysgICAgICBpZiAoY29kZXNldHApCisgCXsKKysJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworKworKwkgIGlmIChjb2Rlc2V0ICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnJlc3VsdDsKKysKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSBzdHJkdXAgKGRpcm5hbWUpOworLQkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSA9PSBOVUxMKQorLQkgICAgcmV0dXJuIE5VTEw7CisrCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoY29kZXNldCk7CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworICNlbHNlCistCSAgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lID09IE5VTEwpCistCSAgICByZXR1cm4gTlVMTDsKKy0JICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kaXJuYW1lLCBkaXJuYW1lLCBsZW4pOworKwkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisrCSAgICAgIG1lbWNweSAocmVzdWx0LCBjb2Rlc2V0LCBsZW4pOworICNlbmRpZgorKwkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworKwkgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisrCSAgICB9CisrCSAgKmNvZGVzZXRwID0gY29kZXNldDsKKysJICBuZXdfYmluZGluZy0+Y29kZXNldCA9IChjaGFyICopIGNvZGVzZXQ7CisgCX0KKysgICAgICBlbHNlCisrCW5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gTlVMTDsKKyAKKyAgICAgICAvKiBOb3cgZW5xdWV1ZSBpdC4gICovCisgICAgICAgaWYgKF9ubF9kb21haW5fYmluZGluZ3MgPT0gTlVMTAorQEAgLTE4NywxMyArMzEzLDUxIEBACisgCSAgYmluZGluZy0+bmV4dCA9IG5ld19iaW5kaW5nOworIAl9CisgCistICAgICAgYmluZGluZyA9IG5ld19iaW5kaW5nOworKyAgICAgIG1vZGlmaWVkID0gMTsKKysKKysgICAgICAvKiBIZXJlIHdlIGRlYWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4gICovCisrICAgICAgaWYgKDApCisrCXsKKysJZmFpbGVkX2NvZGVzZXQ6CisrCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKysJZmFpbGVkX2Rpcm5hbWU6CisrCSAgZnJlZSAobmV3X2JpbmRpbmcpOworKwlmYWlsZWQ6CisrCSAgaWYgKGRpcm5hbWVwKQorKwkgICAgKmRpcm5hbWVwID0gTlVMTDsKKysJICBpZiAoY29kZXNldHApCisrCSAgICAqY29kZXNldHAgPSBOVUxMOworKwl9CisgICAgIH0KKyAKKy0gIHJldHVybiBiaW5kaW5nLT5kaXJuYW1lOworKyAgLyogSWYgd2UgbW9kaWZpZWQgYW55IGJpbmRpbmcsIHdlIGZsdXNoIHRoZSBjYWNoZXMuICAqLworKyAgaWYgKG1vZGlmaWVkKQorKyAgICArK19ubF9tc2dfY2F0X2NudHI7CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworK30KKysKKysvKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKysgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCisrY2hhciAqCisrQklORFRFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCisreworKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCAmZGlybmFtZSwgTlVMTCk7CisrICByZXR1cm4gKGNoYXIgKikgZGlybmFtZTsKKyt9CisrCisrLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworK2NoYXIgKgorK0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorK3sKKysgIHNldF9iaW5kaW5nX3ZhbHVlcyAoZG9tYWlubmFtZSwgTlVMTCwgJmNvZGVzZXQpOworKyAgcmV0dXJuIChjaGFyICopIGNvZGVzZXQ7CisgfQorIAorICNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworKy8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLworIHdlYWtfYWxpYXMgKF9fYmluZHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKTsKKyt3ZWFrX2FsaWFzIChfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LCBiaW5kX3RleHRkb21haW5fY29kZXNldCk7CisgI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvY2F0LWNvbXBhdC5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NhdC1jb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMjYyICswLDAgQEAKKy0vKiBDb21wYXRpYmlsaXR5IGNvZGUgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZmRlZiBTVERDX0hFQURFUlMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZmRlZiBIQVZFX05MX1RZUEVTX0gKKy0jIGluY2x1ZGUgPG5sX3R5cGVzLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKy0gICBgYERpcmVjdHMgYHNldGxvY2FsZSgpJyB0byBxdWVyeSBgY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKy0gICAgIHNldHRpbmcgb2YgYGxvY2FsJy4nJworLSAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgQW5kIGV2ZW4gd29yc2U6IFBPU0lYCistICAgZGVmaW5lcyB0aGlzIG5vdCBhdCBhbGwuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkCistICAgc3lzdGVtIChlLmcuIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBIQVZFX0xPQ0FMRV9OVUxMCistI2VuZGlmCistCistLyogVGhlIGNhdGFsb2cgZGVzY3JpcHRvci4gICovCistc3RhdGljIG5sX2NhdGQgY2F0YWxvZyA9IChubF9jYXRkKSAtMTsKKy0KKy0vKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGNhdGFsb2cuICAqLworLXN0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRfY2F0YWxvZ19uYW1lW10gPSAibWVzc2FnZXMiOworLQorLS8qIE5hbWUgb2YgY3VycmVudGx5IHVzZWQgY2F0YWxvZy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLS8qIEdldCBJRCBmb3IgZ2l2ZW4gc3RyaW5nLiAgSWYgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludCBtc2dfdG9fY2F0X2lkIFBBUkFNUyAoKGNvbnN0IGNoYXIgKm1zZykpOworLQorLS8qIFN1YnN0aXR1dGlvbiBmb3Igc3lzdGVtcyBsYWNraW5nIHRoaXMgZnVuY3Rpb24gaW4gdGhlaXIgQyBsaWJyYXJ5LiAgKi8KKy0jaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7CistI2VuZGlmCistCistCistLyogU2V0IGN1cnJlbnRseSB1c2VkIGRvbWFpbi9jYXRhbG9nLiAgKi8KKy1jaGFyICoKKy10ZXh0ZG9tYWluIChkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy17CistICBubF9jYXRkIG5ld19jYXRhbG9nOworLSAgY2hhciAqbmV3X25hbWU7CistICBzaXplX3QgbmV3X25hbWVfbGVuOworLSAgY2hhciAqbGFuZzsKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgXAorLSAgICAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwKKy0gIGxhbmcgPSBzZXRsb2NhbGUgKExDX01FU1NBR0VTLCBOVUxMKTsKKy0jZWxzZQorLSAgbGFuZyA9IGdldGVudiAoIkxDX0FMTCIpOworLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBsYW5nID0gZ2V0ZW52ICgiTENfTUVTU0FHRVMiKTsKKy0gICAgICBpZiAobGFuZyA9PSBOVUxMIHx8IGxhbmdbMF0gPT0gJ1wwJykKKy0JbGFuZyA9IGdldGVudiAoIkxBTkciKTsKKy0gICAgfQorLSNlbmRpZgorLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIGxhbmcgPSAiQyI7CistCistICAvKiBTZWUgd2hldGhlciBuYW1lIG9mIGN1cnJlbnRseSB1c2VkIGRvbWFpbiBpcyBhc2tlZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLQorLSAgaWYgKGRvbWFpbm5hbWVbMF0gPT0gJ1wwJykKKy0gICAgZG9tYWlubmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgKi8KKy0gIG5ld19uYW1lX2xlbiA9IHNpemVvZiAoTE9DQUxFRElSKSAtIDEgKyAxICsgc3RybGVuIChsYW5nKQorLQkJICsgc2l6ZW9mICgiL0xDX01FU1NBR0VTLyIpIC0gMSArIHNpemVvZiAoUEFDS0FHRSkgLSAxCistCQkgKyBzaXplb2YgKCIuY2F0Iik7CistCistICBuZXdfbmFtZSA9IChjaGFyICopIG1hbGxvYyAobmV3X25hbWVfbGVuKTsKKy0gIGlmIChuZXdfbmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIHN0cmNweSAobmV3X25hbWUsIFBBQ0tBR0UpOworLSAgbmV3X2NhdGFsb2cgPSBjYXRvcGVuIChuZXdfbmFtZSwgMCk7CistCistICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLSAgICB7CistICAgICAgLyogTkxTUEFUSCBzZWFyY2ggZGlkbid0IHdvcmssIHRyeSBhYnNvbHV0ZSBwYXRoICovCistICAgICAgc3ByaW50ZiAobmV3X25hbWUsICIlcy8lcy9MQ19NRVNTQUdFUy8lcy5jYXQiLCBMT0NBTEVESVIsIGxhbmcsCistCSAgICAgICBQQUNLQUdFKTsKKy0gICAgICBuZXdfY2F0YWxvZyA9IGNhdG9wZW4gKG5ld19uYW1lLCAwKTsKKy0KKy0gICAgICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLQl7CistCSAgZnJlZSAobmV3X25hbWUpOworLQkgIHJldHVybiAoY2hhciAqKSBjYXRhbG9nX25hbWU7CistCX0KKy0gICAgfQorLQorLSAgLyogQ2xvc2Ugb2xkIGNhdGFsb2cuICAqLworLSAgaWYgKGNhdGFsb2cgIT0gKG5sX2NhdGQpIC0xKQorLSAgICBjYXRjbG9zZSAoY2F0YWxvZyk7CistICBpZiAoY2F0YWxvZ19uYW1lICE9IGRlZmF1bHRfY2F0YWxvZ19uYW1lKQorLSAgICBmcmVlICgoY2hhciAqKSBjYXRhbG9nX25hbWUpOworLQorLSAgY2F0YWxvZyA9IG5ld19jYXRhbG9nOworLSAgY2F0YWxvZ19uYW1lID0gbmV3X25hbWU7CistCistICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLX0KKy0KKy1jaGFyICoKKy1iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworLXsKKy0jaWYgSEFWRV9TRVRFTlYgfHwgSEFWRV9QVVRFTlYKKy0gIGNoYXIgKm9sZF92YWwsICpuZXdfdmFsLCAqY3A7CistICBzaXplX3QgbmV3X3ZhbF9sZW47CistCistICAvKiBUaGlzIGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBoZXJlIGJ1dCB0byBiZSBjb21wYXRpYmxlIGRvIGl0LiAgKi8KKy0gIGlmIChkb21haW5uYW1lID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgSWYgd2UgdXNlIHNldGVudiB3ZSBkb24ndCBuZWVkCistICAgICB0aGUgZmlyc3QgYnl0cyBmb3IgTkxTUEFUSD0sIGJ1dCB3aHkgY29tcGxpY2F0ZSB0aGUgY29kZSBmb3IgdGhpcworLSAgICAgcGVhbnV0cy4gICovCistICBuZXdfdmFsX2xlbiA9IHNpemVvZiAoIk5MU1BBVEg9IikgLSAxICsgc3RybGVuIChkaXJuYW1lKQorLQkJKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistCistICBvbGRfdmFsID0gZ2V0ZW52ICgiTkxTUEFUSCIpOworLSAgaWYgKG9sZF92YWwgPT0gTlVMTCB8fCBvbGRfdmFsWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBvbGRfdmFsID0gTlVMTDsKKy0gICAgICBuZXdfdmFsX2xlbiArPSAxICsgc2l6ZW9mIChMT0NBTEVESVIpIC0gMQorLQkgICAgICAgICAgICAgKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistICAgIH0KKy0gIGVsc2UKKy0gICAgbmV3X3ZhbF9sZW4gKz0gc3RybGVuIChvbGRfdmFsKTsKKy0KKy0gIG5ld192YWwgPSAoY2hhciAqKSBtYWxsb2MgKG5ld192YWxfbGVuKTsKKy0gIGlmIChuZXdfdmFsID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIGNwID0gbmV3X3ZhbDsKKy0jIGVsc2UKKy0gIGNwID0gc3RwY3B5IChuZXdfdmFsLCAiTkxTUEFUSD0iKTsKKy0jIGVuZGlmCistCistICBjcCA9IHN0cGNweSAoY3AsIGRpcm5hbWUpOworLSAgY3AgPSBzdHBjcHkgKGNwLCAiLyVML0xDX01FU1NBR0VTLyVOLmNhdDoiKTsKKy0KKy0gIGlmIChvbGRfdmFsID09IE5VTEwpCistICAgIHsKKy0jIGlmIF9fU1REQ19fCistICAgICAgc3RwY3B5IChjcCwgTE9DQUxFRElSICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbHNlCistCistICAgICAgY3AgPSBzdHBjcHkgKGNwLCBMT0NBTEVESVIpOworLSAgICAgIHN0cGNweSAoY3AsICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbmRpZgorLSAgICB9CistICBlbHNlCistICAgIHN0cGNweSAoY3AsIG9sZF92YWwpOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIHNldGVudiAoIk5MU1BBVEgiLCBuZXdfdmFsLCAxKTsKKy0gIGZyZWUgKG5ld192YWwpOworLSMgZWxzZQorLSAgcHV0ZW52IChuZXdfdmFsKTsKKy0gIC8qIERvICpub3QqIGZyZWUgdGhlIGVudmlyb25tZW50IGVudHJ5IHdlIGp1c3QgZW50ZXJlZC4gIEl0IGlzIHVzZWQKKy0gICAgIGZyb20gbm93IG9uLiAgICovCistIyBlbmRpZgorLQorLSNlbmRpZgorLQorLSAgcmV0dXJuIChjaGFyICopIGRvbWFpbm5hbWU7CistfQorLQorLSN1bmRlZiBnZXR0ZXh0CistY2hhciAqCistZ2V0dGV4dCAobXNnKQorLSAgICAgY29uc3QgY2hhciAqbXNnOworLXsKKy0gIGludCBtc2dpZDsKKy0KKy0gIGlmIChtc2cgPT0gTlVMTCB8fCBjYXRhbG9nID09IChubF9jYXRkKSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIC8qIEdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBjYXRhbG9nLiAgV2UgYWx3YXlzIHVzZSBzZXQgbnVtYmVyIDEuCistICAgICBUaGUgbWVzc2FnZSBJRCBpcyBjb21wdXRlZCBieSB0aGUgZnVuY3Rpb24gYG1zZ190b19jYXRfaWQnCistICAgICB3aGljaCB3b3JrcyBvbiB0aGUgdGFibGUgZ2VuZXJhdGVkIGJ5IGBwby10by10YmwnLiAgKi8KKy0gIG1zZ2lkID0gbXNnX3RvX2NhdF9pZCAobXNnKTsKKy0gIGlmIChtc2dpZCA9PSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIHJldHVybiBjYXRnZXRzIChjYXRhbG9nLCAxLCBtc2dpZCwgKGNoYXIgKikgbXNnKTsKKy19CistCistLyogTG9vayB0aHJvdWdoIHRoZSB0YWJsZSBgX21zZ190YmwnIHdoaWNoIGhhcyBgX21zZ190YmxfbGVuZ3RoJyBlbnRyaWVzCistICAgZm9yIHRoZSBvbmUgZXF1YWwgdG8gbXNnLiAgSWYgaXQgaXMgZm91bmQgcmV0dXJuIHRoZSBJRC4gIEluIGNhc2Ugd2hlbgorLSAgIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludAorLW1zZ190b19jYXRfaWQgKG1zZykKKy0gICAgIGNvbnN0IGNoYXIgKm1zZzsKKy17CistICBpbnQgY250OworLQorLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBfbXNnX3RibF9sZW5ndGg7ICsrY250KQorLSAgICBpZiAoc3RyY21wIChtc2csIF9tc2dfdGJsW2NudF0uX21zZykgPT0gMCkKKy0gICAgICByZXR1cm4gX21zZ190YmxbY250XS5fbXNnX251bWJlcjsKKy0KKy0gIHJldHVybiAtMTsKKy19CistCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9DaGFuZ2VMb2cJMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzQ5NzQ5MDAwIC0wNDAwCitAQCAtMSwxMDIyICsxLDQgQEAKKy0xOTk3LTA5LTA2IDAyOjEwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBSZWZvcm1hdCBjb3B5cmlnaHQuCistCistMTk5Ny0wOC0xOSAxNToyMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IFJlbW92ZSB3cm9uZyBjb21tZW50LgorLQorLTE5OTctMDgtMTYgMDA6MTMgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRhdGEpOiBEb24ndCBjaGFuZ2UgZGlyZWN0b3J5IHRvIGluc3RhbGwuCistCistMTk5Ny0wOC0wMSAxNDozMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogY2F0LWNvbXBhdC5jOiBGaXggY29weXJpZ2h0LgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IFVwZGF0ZSBjb3B5cmlnaHQuICBGaXggdHlwb3MuCistCistCSogbDEwbmZsaXN0LmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0JKF9ubF9tYWtlX2wxMG5mbGlzdCk6IEhhbmRsZSBzcG9uc29yIGFuZCByZXZpc2lvbiBjb3JyZWN0bHkuCistCistCSogZ2V0dGV4dC5jOiBVcGRhdGUgY29weXJpZ2h0LgorLQkqIGdldHRleHQuaDogTGlrZXdpc2UuCistCSogaGFzaC1zdHJpbmcuaDogTGlrZXdpc2UuCistCistCSogZmluZGRvbWFpbi5jOiBSZW1vYXZlIGRlYWQgY29kZS4gIERlZmluZSBzdHJjaHIgb25seSBpZgorLQkhSEFWRV9TVFJDSFIuCistCistCSogZXhwbG9kZW5hbWUuYzogSW5jbHVkZSA8c3lzL3R5cGVzLmg+LgorLQorLQkqIGV4cGxvZGVuYW1lLmM6IFJlZm9ybWF0IGNvcHlyaWdodCB0ZXh0LgorLQkoX25sX2V4cGxvZGVfbmFtZSk6IEZpeCB0eXBvLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBEZWZpbmUgYW5kIHVzZSBfX3NldF9lcnJuby4KKy0JKGd1ZXNzX2NhdGVnb3J5X3ZhbHVlKTogRG9uJ3QgdXNlIHNldGxvY2FsZSBpZiBIQVZFX0xDX01FU1NBR0VTIGlzCistCW5vdCBkZWZpbmVkLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IFByZXR0eSBwcmludGluZy4KKy0KKy0xOTk3LTA1LTAxIDAyOjI1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUpOiBEb24ndCBkZXBlbmQgb24KKy0JSEFWRV9MQ19NRVNTQUdFUy4gIFdlIGRvbid0IG5lZWQgdGhlIG1hY3JvIGhlcmUuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6IERvTid0IHJlZmVyIHRvIEhBVkVfU0VUTE9DQUxFX05VTEwKKy0JbWFjcm8uICBJbnN0ZWFkIHVzZSBIQVZFX0xPQ0FMRV9OVUxMIGFuZCBkZWZpbmUgaXQgd2hlbiB1c2luZworLQlnbGliYywgYXMgaW4gZGNnZXR0ZXh0LmMuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIE1ha2VmaWxlLmluIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4gIFJlcG9ydGVkIGJ5IEZyYW5jLG9pcworLQlQaW5hcmQuCistCistTW9uIE1hciAxMCAwNjo1MToxNyAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogSW1wbGVtZW50IGhhbmRsaW5nIG9mIGxpYnRvb2wuCistCistCSogZ2V0dGV4dFAuaDogQ2hhbmdlIGRhdGEgc3RydWN0dXJlcyBmb3IgdXNlIG9mIGdlbmVyaWMgbG93bGV2ZWwKKy0JaTE4biBmaWxlIGhhbmRsaW5nLgorLQorLVdlZCBEZWMgIDQgMjA6MjE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBQdXQgcGFyZW50aGVzZXMgYXJvdW5kIGFyZ3VtZW50cyBvZiBtZW1jcHkgbWFjcm8KKy0JZGVmaW5pdGlvbi4KKy0JKiBsb2NhbGVhbGlhcy5jOiBMaWtld2lzZS4KKy0JKiBsMTBuZmxpc3QuYzogTGlrZXdpc2UuCistCSogZmluZGRvbWFpbi5jOiBMaWtld2lzZS4KKy0JKiBiaW5kdGV4dGRvbS5jOiBMaWtld2lzZS4KKy0JUmVwb3J0ZWQgYnkgVGhvbWFzIEVza2VuLgorLQorLU1vbiBOb3YgMjUgMjI6NTc6NTEgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBNb3ZlIGRlZmluaXRpb24gb2YgYG1lbWNweWAgbWFjcm8gdG8gcmlnaHQKKy0JcG9zaXRpb24uCistCistRnJpIE5vdiAyMiAwNDowMTo1OCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgWyFIQVZFX1NUUklOR19IICYmICFfTElCQ106IERlZmluZSBtZW1jcHkgdXNpbmcKKy0gCWJjb3B5IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuICBSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCistCSogYmluZHRleHRkb20uYzogTGlrZXdpc2UuCistCSogbDEwbmZsaXN0LmM6IExpa2V3aXNlLgorLQkqIGxvY2FsZWFsaWFzLmM6IExpa2V3aXNlLgorLQkqIHRleHRkb21haW4uYzogTGlrZXdpc2UuCistCistVHVlIE9jdCAyOSAxMToxMDoyNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyKTogQ2hhbmdlIHRvIHVzZSBleGVjX3ByZWZpeCBpbnN0ZWFkIG9mCistIAlwcmVmaXguICBSZXBvcnRlZCBieSBLbnV0LUjldmFyZEFrc25lcyA8ZXRva25hQGV0by5lcmljc3Nvbi5zZT4uCistCistU2F0IEF1ZyAzMSAwMzowNzowOSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX25sX25vcm1hbGl6ZV9jb2Rlc2V0KTogV2UgY29udmVydCB0byBsb3dlciBjYXNlLAorLQlzbyBkb24ndCBwcmVwZW5kIHVwcGVyY2FzZSBgSVNPJyBmb3Igb25seSBudW1lcmljIGFyZy4KKy0KKy1GcmkgSnVsIDE5IDAwOjE1OjQ2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jOiBNb3ZlIGluY2x1c2lvbiBvZiBhcmd6LmgsIGN0eXBlLmgsIHN0ZGxpYi5oIGFmdGVyCistCWRlZmluaXRpb24gb2YgX0dOVV9TT1VSQ0UuICBQYXRjaCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogRml4IGFub3RoZXIgYnVnIHdpdGggYGZvcicgbG9vcCBhbmQKKy0JZW1wdHkgYXJndW1lbnRzLiAgUGF0Y2ggYnkgSmltIE1leWVyaW5nLiAgQ29ycmVjdCBuYW1lIG9zCistCXVuaW5zdGFsbGVkIGZpbGVzOiBubyBpbnRsLSBwcmVmaXggYW55bW9yZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kYXRhKTogQWdhaW4gd29yayBhcm91bmQgc2hlbGxzIHdoaWNoCistCWNhbm5vdCBoYW5kbGUgbXB0eSBmb3IgbGlzdC4gIFJlcG9ydGVkIGJ5IEppbSBNZXllcmluZy4KKy0KKy1TYXQgSnVsIDEzIDE4OjExOjM1IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogU3BsaXQgZ29hbC4gIE5vdyBkZXBlbmQgb24gaW5zdGFsbC1leGVjCistICAgICAgICBhbmQgaW5zdGFsbC1kYXRhLgorLQkoaW5zdGFsbC1leGVjLCBpbnN0YWxsLWRhdGEpOiBOZXcgZ29hbHMuICBDcmVhdGVkIGZyb20gZm9ybWVyCistCWluc3RhbGwgZ29hbC4KKy0JUmVwb3J0ZWQgYnkgS2FybCBCZXJyeS4KKy0KKy1TYXQgSnVuIDIyIDA0OjU4OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChNS0lOU1RBTExESVJTKTogTmV3IHZhcmlhYmxlLiAgUGF0aCB0bworLSAgICAgICAgbWtpbnN0YWxsZGlycyBzY3JpcHQuCistCShpbnN0YWxsKTogdXNlIE1LSU5TVEFMTERJUlMgdmFyaWFibGUgb3IgaWYgdGhlIHNjcmlwdCBpcyBub3QgcHJlc2VudAorLQl0cnkgdG8gZmluZCBpdCBpbiB0aGUgJHRvcF9zY3JkaXIpLgorLQorLVdlZCBKdW4gMTkgMDI6NTY6NTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmM6IExpbnV4IGxpYmMgKnBhcnRseSogaW5jbHVkZXMgdGhlIGFyZ3pfKiBmdW5jdGlvbnMuCistCUdyci4gIFdvcmsgYXJvdW5kIGJ5IHJlbmFtaW5nIHRoZSBzdGF0aWMgdmVyc2lvbiBhbmQgdXNlIG1hY3JvcworLQlmb3IgcmVuYW1pbmcuCistCistVHVlIEp1biAxOCAyMDoxMToxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYzogQ29ycmVjdCBwcmVzZW5jZSB0ZXN0IG1hY3JvcyBvZiBfX2FyZ3pfKiBmdW5jdGlvbnMuCistCistCSogbDEwbmZsaXN0LmM6IEluY2x1ZGUgPGFyZ3ouaD4gYmFzZWQgb24gdGVzdCBvZiBpdCBpbnN0ZWFkIHdoZW4KKy0JX19hcmd6XyogZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistCVJlcG9ydGVkIGJ5IEFuZHJlYXMgU2Nod2FiLgorLQorLVRodSBKdW4gMTMgMTU6MTc6NDQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZXhwbG9kZW5hbWUuYywgbDEwbmZsaXN0LmM6IERlZmluZSBOVUxMIGZvciBkdW1iIHN5c3RlbXMuCistCistVHVlIEp1biAxMSAxNzowNToxMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluLCBsaWJnZXR0ZXh0LmggKGRjZ2V0dGV4dCk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZQorLQlyZXN1bHQgdG8gX19yZXN1bHQgdG8gcHJldmVudCBuYW1lIGNsYXNoLgorLQorLQkqIGwxMG5mbGlzdC5jLCBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYzogRGVmaW5lIF9HTlVfU09VUkNFIHRvCistICAgICAgICBnZXQgcHJvdG90eXBlIGZvciBzdHBjcHkgYW5kIHN0cmNhc2VjbXAuCistCistCSogaW50bGguaW5zdC5pbiwgbGliZ2V0dGV4dC5oOiBNb3ZlIGRlY2xhcmF0aW9uIG9mCistCWBfbmxfbXNnX2NhdF9jbnRyJyBvdXRzaWRlIF9fZXh0ZW5zaW9uX18gYmxvY2sgdG8gcHJldmVudCB3YXJuaW5nCistCWZyb20gZ2NjJ3MgLVduZXN0ZWQtZXh0ZXJuIG9wdGlvbi4KKy0KKy1GcmkgSnVuICA3IDAxOjU4OjAwIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVtb3ZlIGNvbW1lbnQuCistCistVGh1IEp1biAgNiAxNzoyODoxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFdvcmsgYXJvdW5kIGZvciBhbm90aGVyIEJ1Z2xpeCBzdHVwaWRpdHkuCistCUFsd2F5cyB1c2UgYW4gYGVsc2UnIGNsb3NlIGZvciBgaWYncy4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW50bGguaW5zdCk6IENvcnJlY3QgdHlwbyBpbiBwaG9ueSBydWxlLgorLQlSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistVGh1IEp1biAgNiAwMTo0OTo1MiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcmlhYmxlIGFsbG9jYV9saXN0IHRvCistCWJsb2NrX2xpc3QgYXMgdGhlIG1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbG9jYWxlYWxpYXMuYyBbIUhBVkVfQUxMT0NBXTogRGVmaW5lIGFsbG9jYSBhcyBtYWNybyB1c2luZworLSAgICAgICAgbWFsbG9jLgorLQkocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcnJpYWJlIGFsbG9jYV9saXN0IHRvIGJsb2NrX2xpc3QgYXMgdGhlCistCW1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbDEwbmZsaXN0LmM6IENvcnJlY3QgY29uZGl0aW9uYWwgZm9yIDxhcmd6Lmg+IGluY2x1c2lvbi4KKy0JUmVwb3J0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCBvbiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQCwgbm90CistICAgICAgICBhbGwtQFVTRV9OTFNALgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogaW50bGguaW5zdCBjb21lcyBmcm9tIGxvY2FsIGRpciwgbm90CistICAgICAgICAkKHNyY2RpcikuCistCistCSogTWFrZWZpbGUuaW4gKGludGxoLmluc3QpOiBTcGVjaWFsIGhhbmRsaW5nIG9mIHRoaXMgZ29hbC4gIElmCistCXVzZWQgaW4gZ2V0dGV4dCwgdGhpcyBpcyByZWFsbHkgYSBydWwgdG8gY29uc3RydWN0IHRoaXMgZmlsZS4gIElmCistCXVzZWQgaW4gYW55IG90aGVyIHBhY2thZ2UgaXQgaXMgZGVmaW5lZCBhcyBhIC5QSE9OWSBydWxlIHdpdGgKKy0JZW1wdHkgYm9keS4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEV4dHJhY3QgbG9jYWxlIGZpbGUgaW5mb3JtYXRpb24gaGFuZGxpbmcgaW50bworLQlsMTBuZmlsZS5jLiAgUmVuYW1lIGxvY2FsIHN0cGNweV9fIGZ1bmN0aW9uIHRvIHN0cGNweS4KKy0KKy0JKiBkY2dldHRleHQuYyAoc3RwY3B5KTogQWRkIGxvY2FsIGRlZmluaXRpb24uCistCistCSogbDEwbmZsaXN0LmM6IFNvbHZlIHNvbWUgcG9ydGFiaWxpdHkgcHJvYmxlbXMuICBQYXRjaGVzIHBhcnRseSBieQorLQlUaG9tYXMgRXNrZW4uICBBZGQgbG9jYWwgZGVmaW5pdGlvbiBvZiBzdHBjcHkuCistCistVHVlIEp1biAgNCAwMjo0Nzo0OSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBEb24ndCBkZXBlbmQgaW5jbHVkaW5nIDxsb2NhbGUuaD4gb24KKy0JSEFWRV9MT0NBTEVfSC4gIEluc3RlYWQgY29uZmlndXJlIG11c3QgcmV3cml0ZSB0aGlzIGZpaWxlCistCWRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmUgcnVuLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogbGliaW50bC5pbnN0IGlzIG5vdyBjYWxsZWQgaW50bGguaW5zdC4KKy0JQWRkIHJ1bGVzIGZvciB1cGRhdGluZyBpbnRsaC5pbnN0IGZyb20gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsaWJpbnRsLmluc3Q6IFJlbmFtZWQgdG8gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYyBbX19HTlVDX19dOiBEZWZpbmUgSEFWRV9BTExPQ0EgdG8gMQorLSAgICAgICAgYmVjYXVzZSBnY2MgaGFzIF9fYnVpdGxpbl9hbGxvY2EuCistCVJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLU1vbiBKdW4gIDMgMDA6MzI6MTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGxjaGVjayk6IE5ldyBnb2FsIHRvIGZ1bGZpbGwgbmVlZHMgb2YKKy0gICAgICAgIGF1dG9tYWtlJ3MgZGlzdGNoZWNrLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVvcmRlciBjb21tYW5kcyBzbyB0aGF0IFZFUlNJT04gaXMKKy0gICAgICAgIGZvdW5kLgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogTm93IHVzZSBzdWJkaXJlY3RvcnkgaW50bC8gaW4KKy0gICAgICAgIEBkYXRhZGlyQC9nZXR0ZXh0LgorLQkoQ09NU1JDUyk6IEFkZCBsMTBuZmlsZS5jLgorLQkoT0JKRUNUUyk6IEFkZCBsMTBuZmlsZS5vLgorLQkoRElTVEZJTEVTKTogUmVuYW1lIHRvIERJU1RGSUxFLm5vcm1hbC4gIFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoRElTVEZJTEUuZ2V0dGV4dCk6IFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoYWxsLWdldHRleHQpOiBSZW1vdmUgZ29hbC4KKy0JKGluc3RhbGwpOiBJZiAkKFBBQ0tBR0UpID0gZ2V0dGV4dCBpbnN0YWxsLCBvdGhlcndvc2UgZG8gbm90aGluZy4gIE5vCistCXBhY2thZ2UgYnV0IGdldHRleHQgaXRzZWxmIHNob3VsZCBpbnN0YWxsIGxpYmludGwuaCArIGhlYWRlcnMuCistCShkaXN0KTogRXh0ZW5kIGdvYWwgdG8gd29yayBmb3IgZ2V0dGV4dCwgdG9vLgorLQkoZGlzdC1nZXR0ZXh0KTogUmVtb3ZlIGdvYWwuCistCistCSogZGNnZXR0ZXh0LmMgWyFIQVZFX0FMTE9DQV06IERlZmluZSBtYWNybyBhbGxvY2EgYnkgdXNpbmcgbWFsbG9jLgorLQorLVN1biBKdW4gIDIgMTc6MzM6MDYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOiBQYXJhbWV0ZXIgaXMgbm93IGNvbWVzIGZyb20KKy0gICAgICAgIGZpbmRfbDEwbmZpbGUuCistCistU2F0IEp1biAgMSAwMjoyMzowMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX19hcmd6X25leHQpOiBBZGQgZGVmaW5pdGlvbi4KKy0KKy0JKiBkY2dldHRleHQuYyBbIUhBVkVfQUxMT0NBXTogQWRkIGNvZGUgZm9yIGhhbmRsaW5nIG1pc3NpbmcgYWxsb2NhCistCWNvZGUuICBVc2UgbmV3IGwxMG5maWxlIGhhbmRsaW5nLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IEFkZCBjb2RlIGZvciBoYW5kbGluZyBtaXNzaW5nCistICAgICAgICBhbGxvY2EgY29kZS4KKy0KKy0JKiBsMTBuZmxpc3QuYzogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy1UdWUgQXByICAyIDE4OjUxOjE4IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsbC1nZXR0ZXh0KTogTmV3IGdvYWwuICBTYW1lIGFzIGFsbC15ZXMuCistCistVGh1IE1hciAyOCAyMzowMToyMiAxOTk2ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5jZW50cmFsLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogRGVmaW5lIHVzaW5nIEBkYXRhZGlyQC4KKy0KKy1UdWUgTWFyIDI2IDEyOjM5OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jOiBJbmNsdWRlIDxjdHlwZS5oPi4gIFJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVNhdCBNYXIgMjMgMDI6MDA6MzUgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IFJlbmFtZSB0byBzdHBjcHlfXyB0byBwcmV2ZW50IGNsYXNoaW5nCistICAgICAgICB3aXRoIGV4dGVybmFsIGRlY2xhcmF0aW9uLgorLQorLVNhdCBNYXIgIDIgMDA6NDc6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsLW5vKTogUmVuYW1lIGZyb20gYWxsX25vLgorLQorLVNhdCBGZWIgMTcgMDA6MjU6NTkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIFtsb2FkZWRfZG9tYWluXTogQXJyYXkgYHN1Y2Nlc3NvcicgbXVzdCBub3cgY29udGFpbiB1cAorLSAgICAgICAgdG8gNjMgZWxlbWVudHMgKGJlY2F1c2Ugb2YgY29kZXNldCBuYW1lIG5vcm1hbGl6YXRpb24pLgorLQorLQkqIGZpbmRkb21haW4uYzogSW1wbGVtZW50IGNvZGVzZXQgbmFtZSBub3JtYWxpemF0aW9uLgorLQorLVRodSBGZWIgMTUgMDQ6Mzk6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsKTogRGVmaW5lIHRvIGBhbGwtQFVTRV9OTFNAJy4KKy0JKGFsbC15ZXMsIGFsbF9ubyk6IE5ldyBnb2Fscy4gIGBhbGwtbm8nIGlzIG5vb3AsIGBhbGwteWVzJworLQlpcyBmb3JtZXIgYWxsLgorLQorLU1vbiBKYW4gMTUgMjE6NDY6MDEgMTk5NiAgSG93YXJkIEdheWxlICA8aG93YXJkQGhhbC5jb20+CistCistCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6IEluY3JlbWVudCBzdHJpbmcgcG9pbnRlcnMgaW4gbG9vcAorLSAgICAgICAgb2Ygc3RyY2FzZWNtcCByZXBsYWNlbWVudC4KKy0KKy1GcmkgRGVjIDI5IDIxOjE2OjM0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKTogV2hvIGNvbW1lbnRlZCB0aGlzIGdvYWwgb3V0ID8gOi0pCistCistRnJpIERlYyAyOSAxNTowODoxNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBTYXZlIGBlcnJubycuICBGYWlsaW5nIHN5c3RlbSBjYWxscworLQlzaG91bGQgbm90IGVmZmVjdCBpdCBiZWNhdXNlIGEgbWlzc2luZyBjYXRhbG9nIGlzIG5vIGVycm9yLgorLQlSZXBvcnRlZCBieSBIYXJhbGQgSzxvOj5uaWcgPGtvZW5pZ0B0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGU+LgorLQorLVR1ZSBEZWMgMTkgMjI6MDk6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBFeHBsaWNpdGx5IHVzZSAkKFNIRUxMKSBmb3IgcnVubmluZworLSAgICAgICAgc2hlbGwgc2NyaXB0cy4KKy0KKy1GcmkgRGVjIDE1IDE3OjM0OjU5IDE5OTUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IE9ubHkgaW5zdGFsbCBsaWJyYXJ5IGFuZCBoZWFkZXIgd2hlbgorLQl3ZSB1c2UgdGhlIG93biBpbXBsZW1lbnRhdGlvbi4gIERvbid0IGRvIGl0IHdoZW4gdXNpbmcgdGhlCistCXN5c3RlbSdzIGdldHRleHQgb3IgY2F0Z2V0cyBmdW5jdGlvbnMuCistCistCSogZGNnZXR0ZXh0LmMgKGZpbmRfbXNnKTogTXVzdCBub3Qgc3dhcCBkb21haW4tPmhhc2hfc2l6ZSBoZXJlLgorLQorLVNhdCBEZWMgIDkgMTY6MjQ6MzcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBsaWJpbnRsLmluc3QsIGxpYmdldHRleHQuaCwgaGFzaC1zdHJpbmcuaCwKKy0JZ2V0dGV4dFAuaCwgZmluZGRvbWFpbi5jLCBkY2dldHRleHQuYywgY2F0LWNvbXBhdC5jOgorLQlVc2UgUEFSQU1TIGluc3RlYWQgb2YgX19QLiAgU3VnZ2VzdGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBEZWMgIDUgMTE6Mzk6MTQgMTk5NSAgTGFycnkgU2Nod2ltbWVyICA8cm9zZWJ1ZEBjeWNsb25lLnN0YW5mb3JkLmVkdT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFVzZSBgI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKScgaW5zdGVhZCBvZiBgI2lmCistCSFfTElCSU5UTF9IJyBiZWNhdXNlIFNvbGFyaXMgZGVmaW5lcyBfTElCSU5UTF9IIGFzIGVtcHR5LgorLQorLU1vbiBEZWMgIDQgMTU6NDI6MDcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOgorLQlJbnN0YWxsIGxpYmludGwuaW5zdCBpbnN0ZWFkIG9mIGxpYmludGwuaC5pbnN0YWxsLgorLQorLVNhdCBEZWMgIDIgMjI6NTE6MzggMTk5NSAgTWFyY3VzIERhbmllbHMgIDxtYXJjdXNAc3lzYy5wZHguZWR1PgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6CistCVJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXJlIHRyaWVkIHlvdSBsb2FkLiAgRmlyc3QKKy0JdHJ5IGxvY2FsIGZpbGUsIHdoZW4gdGhpcyBmYWlsZWQgYWJzb2x1dGUgcGF0aC4KKy0KKy1XZWQgTm92IDI5IDAyOjAzOjUzIDE5OTUgIE5lbHNvbiBILiBGLiBCZWViZSAgPGJlZWJlQG1hdGgudXRhaC5lZHU+CistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6IEFkZCBtaXNzaW5nIHsgfS4KKy0KKy1TdW4gTm92IDI2IDE4OjIxOjQxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliaW50bC5pbnN0OiBBZGQgbWlzc2luZyBfX1AgZGVmaW5pdGlvbi4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JQWRkIGR1bW15IGBhbGwnIGFuZCBgZHZpJyBnb2Fscy4gIFJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistU2F0IE5vdiAyNSAxNjoxMjowMSAxOTk1ICBGcmFuYyxvaXMgUGluYXJkICA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+CistCistCSogaGFzaC1zdHJpbmcuaDogQ2FwaXRhbGl6ZSBhcmd1bWVudHMgb2YgbWFjcm9zLgorLQorLVNhdCBOb3YgMjUgMTI6MDE6MzYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogUHJldmVudCBmaWxlcyBuYW1lcyBsb25nZXIgdGhhbiAxMworLQljaGFyYWN0ZXJzLiAgbGliaW50bC5oLmdsaWJjLT5saWJpbnRsLmdsaWJjLAorLQlsaWJpbnRsLmguaW5zdGFsbC0+bGliaW50bC5pbnN0LiAgUmVwb3J0ZWQgYnkgSm9zaHVhIFIuIFBvdWxzb24uCistCistU2F0IE5vdiAyNSAxMTozMToxMiAxOTk1ICBFcmljIEJhY2t1cyAgPGVyaWNiQGxzaWQuaHAuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jOiBGaXggYnVnIGluIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMuCistCistU2F0IE5vdiAyNSAwMjozNToyNyAxOTk1ICBOZWxzb24gSC4gRi4gQmVlYmUgIDxiZWViZUBtYXRoLnV0YWguZWR1PgorLQorLQkqIGxpYmdldHRleHQuaDogU29sYXJpcyBjYyBkb2VzIG5vdCB1bmRlcnN0YW5kCistCSAjaWYgIVNZTUJPTDEgJiYgIVNZTUJPTDIuICBTYWQJYnV0IHRydWUuCistCistVGh1IE5vdiAyMyAxNjoyMjoxNCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGhhc2gtc3RyaW5nLmggKGhhc2hfc3RyaW5nKToKKy0JRml4IGZvciBtYWNoaW5lIHdpdGggPjMyIGJpdCBgdW5zaWduZWQgbG9uZydzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOgorLQlGaXggaG9ycmlibGUgYnVnIGluIGxvb3AgZm9yIGFsdGVybmF0aXZlIHRyYW5zbGF0aW9uLgorLQorLVRodSBOb3YgMjMgMDE6NDU6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluLCBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOgorLQlTb21lIGZ1cnRoZXIgc2ltcGxpZmljYXRpb25zIGluIG1lc3NhZ2UgbnVtYmVyIGdlbmVyYXRpb24uCistCistTW9uIE5vdiAyMCAyMTowODo0MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmludGwuaC5nbGliYzogVXNlIF9fY29uc3QgaW5zdGVhZCBvZiBjb25zdCBpbiBwcm90b3R5cGVzLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6CistCUluc3RhbGwgbGliaW50bC5oLmluc3RhbGwgaW5zdGVhZCBvZiBsaWJpbnRsLmguICBUaGlzCistCWlzIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLiAgU3VnZ2VzdGVkIGJ5IFBldGVyIE1pbGxlci4KKy0KKy0JKiBsaWJpbnRsLmguaW5zdGFsbCwgbGliaW50bC5oLmdsaWJjOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKF9ubF9leHBhbmRfYWxpYXMsIHJlYWRfYWxpYXNfZmlsZSk6CistCVByb3RlY3QgcHJvdG90eXBlcyBpbiB0eXBlIGNhc3RzIGJ5IF9fUC4KKy0KKy1UdWUgTm92IDE0IDE2OjQzOjU4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaGFzaC1zdHJpbmcuaDogQ29ycmVjdCBwcm90b3R5cGUgZm9yIGhhc2hfc3RyaW5nLgorLQorLVN1biBOb3YgMTIgMTI6NDI6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6IEFkZCBwcm90b3R5cGUuCistCistCSogZ2V0dGV4dFAuaDogRml4IGNvcHlyaWdodC4KKy0JKFNXQVApOiBBZGQgcHJvdG90eXBlLgorLQorLVdlZCBOb3YgIDggMjI6NTY6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOiBGb3Jnb3Qgc2l6ZW9mLgorLQlBdm9pZCBjYWxsaW5nICpwcmludGYgZnVuY3Rpb24uICBUaGlzIGludHJvZHVjZXMgYSBiaWcgb3ZlcmhlYWQuCistCVBhdGNoIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBOb3YgIDcgMTQ6MjE6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMsIGNhdC1jb21wYXQuYzogV3JvbmcgaW5kZW50YXRpb24gaW4gI2lmIGZvciBzdHBjcHkuCistCistCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOgorLQlEZWZpbmUgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGxvY2FsLiAgVGhlIG1hY3JvIHdhcyB0byBmbGFreS4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEZpeCB0eXBvLgorLQorLQkqIHhvcGVuLW1zZy5zZWQsIGxpbnV4LW1zZy5zZWQ6CistCVdoaWxlIGJyaW5naW5nIG1lc3NhZ2UgbnVtYmVyIHRvIHJpZ2h0IHBsYWNlIG9ubHkgYWNjZXB0IGRpZ2l0cy4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBOb3cgdGhhdCB0aGUgY291bnRlciBkb2VzIG5vdCBoYXZlCistCWxlYWRpbmcgMHMgd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgdGhlbS4gIFJlcG9ydGVkIGJ5IE1hcmN1cworLQlEYW5pZWxzLgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOiBVc2UgJCh0b3Bfc3JkaXIpIGluCistCWRlcGVuZGVuY3kuICBSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IChzdHBjcHkpIFshX0xJQkMgJiYgIUhBVkVfU1RQQ1BZXTogRGVmaW5lIHJlcGxhY2VtZW50LgorLQlHZW5lcmFsbHkgY2xlYW51cCB1c2luZyAjaWYgaW5zdGVhZCBvZiAjaWZuZGVmLgorLQorLQkqIE1ha2VmaWxlLmluOiBDb3JyZWN0IHR5cG9zIGluIGNvbW1lbnQuICBCeSBGcmFuYyxvaXMgUGluYXJkLgorLQorLU1vbiBOb3YgIDYgMDA6Mjc6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBEb24ndCBpbnN0YWxsIGxpYmludGwuaCBhbmQgbGliaW50bC5hCistCWlmIHdlIHVzZSBhbiBhdmFpbGFibGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4KKy0KKy1TdW4gTm92ICA1IDIyOjAyOjA4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliZ2V0dGV4dC5oOiBGaXggdHlwbzogSEFWRV9DQVRHRVRUUyAtPiBIQVZFX0NBVEdFVFMuICBSZXBvcnRlZAorLQlieSBGcmFuYyxvaXMgUGluYXJkLgorLQorLQkqIGxpYmdldHRleHQuaDogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZi8jaWZuZGVmLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JQ29tbWVudHMgZGVzY3JpYmluZyB3aGF0IGhhcyB0byBiZSBkb25lIHNob3VsZCBzdGFydCB3aXRoIEZJWE1FLgorLQorLVN1biBOb3YgIDUgMTk6Mzg6MDEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogU3BsaXQuICBVc2UgRElTVEZJTEVTIHdpdGggbm9ybWFsIG1lYW5pbmcuCistCURJU1RGSUxFUy5jb21tb24gbmFtZXMgdGhlIGZpbGVzIGNvbW1vbiB0byBib3RoIGRpc3QgZ29hbHMuCistCURJU1RGSUxFUy5nZXR0ZXh0IGFyZSB0aGUgZmlsZXMgb25seSBkaXN0cmlidXRlZCBpbiBHTlUgZ2V0dGV4dC4KKy0KKy1TdW4gTm92ICA1IDE3OjMyOjU0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IENvcnJlY3Qgc2VhcmNoaW5nIGluIGRlcml2ZWQgbG9jYWxlcy4KKy0JVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIGEgY2hhbmdlIGluIF9ubF9maW5kX21zZyBzZXZlcmFsIHdlZWtzCistCWFnby4gIEkgcmVhbGx5IGRvbid0IGtub3cgdGhpcyBpcyBzdGlsbCBub3QgZml4ZWQuCistCistU3VuIE5vdiAgNSAxMjo0MzoxMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKTogVGVzdCBmb3IgRklMRU5BTUUgPT0gTlVMTC4gIFRoaXMKKy0JbWlnaHQgbWFyayBhIHNwZWNpYWwgY29uZGl0aW9uLgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOiBEb24ndCBtYWtlIGlsbGVnYWwgZW50cnkgYXMgZGVjaWRlZC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFN1cHByZXNzIGVycm9yIG1lc3NhZ2Ugd2hlbiBsbiBmYWlsZWQuCistCUdldCBmaWxlcyBmcm9tICQoc3JjZGlyKSBleHBsaWNpdGx5LgorLQorLQkqIGxpYmdldHRleHQuaCAoZ2V0dGV4dF9jb25zdCk6IFJlbmFtZSB0byBnZXR0ZXh0X25vb3AuCistCistRnJpIE5vdiAgMyAwNzozNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOgorLQlQcm90ZWN0IGFnYWluc3Qgd3JvbmcgbG9jYWxlIG5hbWVzIGJ5IHRlc3RpbmcgbWFzay4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKGdldHRleHRfY29uc3QpOiBBZGQgbWFjcm8gZGVmaW5pdGlvbi4KKy0JQ2FwaXRhbGl6ZSBtYWNybyBhcmd1bWVudHMuCistCistVGh1IE5vdiAgMiAyMzoxNTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JVGVzdCBmb3IgcG9pbnRlciAhPSBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgdmFsdWUuCistCVJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistCSogZ2V0dGV4dC5jIChOVUxMKToKKy0JRGVmaW5lIGFzICh2b2lkKikwIGluc3RhZCBvZiAwLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzIFBpbmFyZC4KKy0KKy1Nb24gT2N0IDMwIDIxOjI4OjUyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogcG8ydGJsLnNlZC5pbjogU2VyaW91cyB0eXBvIGJ1ZyBmaXhlZCBieSBKaW0gTWV5ZXJpbmcuCistCistU2F0IE9jdCAyOCAyMzoyMDo0NyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmdldHRleHQuaDogRGlzYWJsZSBkY2dldHRleHQgb3B0aW1pemF0aW9uIGZvciBTb2xhcmlzIDIuMy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKToKKy0JUGV0ZXIgTWlsbGVyIHJlcG9ydGVkIHRoYXQgdG9sb3dlciBpbiBzb21lIHN5c3RlbXMgaXMKKy0JZXZlbiBkdW1iZXIgdGhhbiBJIHRob3VnaHQuICBQcm90ZWN0IGNhbGwgYnkgYGlzdXBwZXInLgorLQorLUZyaSBPY3QgMjcgMjI6MjI6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyLCBpbmNsdWRlZGlyKTogTmV3IHZhcmlhYmxlcy4KKy0JKGluc3RhbGwtc3JjKTogSW5zdGFsbCBsaWJpbnRsLmEgYW5kIGxpYmludGwuaCBpbiBjb3JyZWN0IGRpcnMuCistCistRnJpIE9jdCAyNyAyMjowNzoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogRml4IHR5cG86IGludHJsLmNvbXBhdC5jIC0+IGludGwtY29tcGF0LmMuCistCistCSogcG8ydGJsLnNlZC5pbjogUGF0Y2ggZm9yIGJ1Z2d5IFNFRHMgYnkgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMuCistCistCSogbG9jYWxlYWxpYXMuYzoKKy0JRml4IHR5cG8gYW5kIHN1cGVyZmxvdXMgdGVzdC4gIFJlcG9ydGVkIGJ5IENocmlzdGlhbiB2b24gUm9xdWVzLgorLQorLUZyaSBPY3QgIDYgMTE6NTI6MDUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUNvcnJlY3Qgc29tZSByZW1haW5kZXIgZnJvbSB0aGUgcHJlLUNFTiBzeW50YXguICBOb3cKKy0Jd2UgZG9uJ3QgaGF2ZSBhIGNvbnN0YW50IG51bWJlciBvZiBzdWNjZXNzb3JzIGFueW1vcmUuCistCistV2VkIFNlcCAyNyAyMTo0MToxMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBBZGQgbGliaW50bC5oLmdsaWJjLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0LWxpYmMpOiBBZGQgZ29hbCBmb3IgcGFja2luZyBzb3VyY2VzIGZvciBnbGliYy4KKy0JKENPTVNSQ1MsIENPTUhEUlMpOiBTcGxpdHRlZCB0byBzZXBhcmF0ZSBzb3VyY2VzIHNoYXJlZCB3aXRoIGdsaWJjLgorLQorLQkqIGxvYWRtc2djYXQuYzogRm9yZ2V0IHRvIGNvbnRpbnVlICNpZiBsaW5lLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6CistCVtfTElCQ106IFJlbmFtZSBzdHJjYXNlY21wIHRvIF9fc3RyY2FzZWNtcCB0byBrZWVwIEFOU0kgQyBuYW1lCistCXNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jLCBmaW5kZG9tYWluLmM6IEJldHRlciBjb21tZW50IHRvIGxhc3QgY2hhbmdlLgorLQorLQkqIGxvYWRtc2djYXQuYzoKKy0JW19MSUJDXTogUmVuYW1lIGZzdGF0LCBvcGVuLCBjbG9zZSwgcmVhZCwgbW1hcCwgYW5kIG11bm1hcCB0bworLQlfX2ZzdGF0LCBfX29wZW4sIF9fY2xvc2UsIF9fcmVhZCwgX19tbWFwLCBhbmQgX19tdW5tYXAgcmVzcAorLQl0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JW19MSUJDXTogUmVuYW1lIHN0cGNweSB0byBfX3N0cGNweSB0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlbX0xJQkNdOiBSZW5hbWUgZ2V0Y2VkIGFuZCBzdHBjcHkgdG8gX19nZXRjd2QgYW5kIF9fc3RwY3B5IHJlc3AgdG8KKy0Ja2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCUluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIHRob3NlIG9sZCBTeXNWIHN5c3RlbXMgb3V0IHRoZXJlLgorLQlSZXBvcnRlZCBieSBGcmFuY2VzY28gUG90b3J0aWAuCistCistCSogbG9hZG1zZ2NhdC5jICh1c2VfbW1hcCk6IERlZmluZSBpZiBjb21waWxlZCBmb3IgZ2xpYmMuCistCistCSogYmluZHRleHRkb20uYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEZpeCAyIHRpbWVzIGRlZmllbmQgLT4gZGVmaW5lZC4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KKy0JY29tcGlsaW5nIGZvciBnbGliYy4gIEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKKy0JdW5jb25kaXRpb25hbGx5IGlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogbG9jYWxlYWxpYXMuYywgbG9hZG1zZ2NhdC5jOiBQcmVwYXJlIHRvIGJlIGNvbXBpbGVkIGluIGdsaWJjLgorLQorLQkqIGdldHRleHQuYzoKKy0JSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgorLQlHZXQgTlVMTCBmcm9tIHN0ZGRlZi5oIGlmIHdlIGNvbXBpbGUgZm9yIGdsaWJjLgorLQorLQkqIGZpbmRkb21haW4uYzogSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbgorLQljb21waWxpbmcgZm9yIGdsaWJjLiAgSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkY2dldHRleHQuYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycyB1bmNvbmRpdGlvbmFsbHkKKy0JaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkZ2V0dGV4dC5jOiBJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mCistCWxpYmdldHRleHQuaC4KKy0JKGxvY2FsZS5oKTogRG9uJ3QgcmVseSBvbiBIQVZFX0xPQ0FMRV9IIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBkY2dldHRleHQuYzogSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZgorLQlsaWJnZXR0ZXh0LmguCistCShnZXRjd2QpOiBEb24ndCByZWx5IG9uIEhBVkVfR0VUQ1dEIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOgorLQlJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaC4KKy0KKy1Nb24gU2VwIDI1IDIyOjIzOjA2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAoX25sX2V4cGFuZF9hbGlhcyk6IERvbid0IGNhbGwgYnNlYXJjaCBpZiBOTUFQIDw9IDAuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlTdHJpbmcgdXNlZCBpbiBwdXRlbnYgbXVzdCBub3QgYmUgcmVjeWNsZWQuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGxpYmdldHRleHQuaCAoX19VU0VfR05VX0dFVFRFWFQpOgorLQlBZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgR05VIGdldHRleHQKKy0JbGlicmFyeS4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKToKKy0JRml4IGJ1ZyB3aXRoIHRoZSBzdHJhbmdlIHN0cGNweSByZXBsYWNlbWVudC4KKy0JUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLVNhdCBTZXAgMjMgMDg6MjM6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEluY2x1ZGUgPHN0cmluZy5oPiBmb3Igc3RwY3B5IHByb3RvdHlwZS4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlXaGlsZSBleHBhbmQgc3RyZHVwIGNvZGUgdGVtcG9yYXJ5IHZhcmlhYmxlIGBjcCcgaGlkZWQKKy0JaGlnaGVyIGxldmVsIHZhcmlhYmxlIHdpdGggc2FtZSBuYW1lLiAgUmVuYW1lIHRvIGB0cCcuCistCistCSogdGV4dGRvbWFpbi5jICh0ZXh0ZG9tYWluKToKKy0JQXZvaWQgd2FybmluZyBieSB1c2luZyB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gc3RyZHVwIGNvZGUuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBhcHBsaWNhdGlvbicuCistCistVGh1IFNlcCAyMSAxNTo1MTo0NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOgorLQlVc2Ugc3RyY2FzZWNtcCgpIG9ubHkgaWYgYXZhaWxhYmxlLiAgRWxzZSB1c2UKKy0JaW1wbGVtZW50YXRpb24gaW4gcGxhY2UuCistCistCSogaW50bC1jb21wYXQuYzoKKy0JV3JhcHBlciBmdW5jdGlvbnMgbm93IGNhbGwgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIF9fKi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IERlY2xhcmUgcHJvdG90eXBlcyBmb3IgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIGZvciBfXyouCistCistCSogY2F0LWNvbXBhdC5jLCBsb2FkbXNnY2F0LmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCistCSogYmluZHRleHRkb20uYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JUmVuYW1lIHRvIGJpbmR0ZXh0ZG9tYWluX18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KKy0KKy0JKiBkZ2V0dGV4dC5jOgorLQlSZW5hbWUgZnVuY3Rpb24gdG8gZGdldHRleHRfXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgorLQorLQkqIGdldHRleHQuYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JRnVuY3Rpb25zIG5vdyBjYWxsZWQgZ2V0dGV4dF9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCistCistCSogZGNnZXR0ZXh0LmMsIGxvY2FsZWFsaWFzLmMsIHRleHRkb21haW4uYywgZmluZGRvbWFpbi5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQorLVN1biBTZXAgMTcgMjM6MTQ6NDkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IENvcnJlY3Qgc29tZSBidWdzIGluIGhhbmRsaW5nIG9mIENFTiBzdGFuZGFyZAorLSAJbG9jYWxlIGRlZmluaXRpb25zLgorLQorLVRodSBTZXAgIDcgMDE6NDk6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEltcGxlbWVudCBDRU4gc3ludGF4LgorLQorLQkqIGdldHRleHRQLmggKGxvYWRlZF9kb21haW4pOiBFeHRlbmQgbnVtYmVyIG9mIHN1Y2Nlc3NvcnMgdG8gMzEuCistCistU2F0IEF1ZyAxOSAxOToyNToyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBSZW1vdmUgcGF0aCB0byBYMTEgbG9jYWxlIGRpci4KKy0KKy0JKiBNYWtlZmlsZS5pbjogTWFrZSBpbnN0YWxsLXNyYyBkZXBlbmQgb24gaW5zdGFsbC4gIFRoaXMgaGVscHMKKy0gCWdldHRleHQgdG8gaW5zdGFsbCB0aGUgc291cmNlcyBhbmQgb3RoZXIgcGFja2FnZXMgY2FuIHVzZSB0aGUKKy0gCWluc3RhbGwgZ29hbC4KKy0KKy1TYXQgQXVnIDE5IDE1OjE5OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IFJlbW92ZSBzdHVmZiBpbnN0YWxsZWQgYnkgaW5zdGFsbC1zcmMuCistCistVHVlIEF1ZyAxNSAxMzoxMzo1MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIFZFUlNJT04uaW46IEluaXRpYWwgcmV2aXNpb24uCistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6CistCUFkZCBWRVJTSU9OIGZpbGUuICBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGdldHRleHQsIGJ1dAorLQlmb3Igb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhpcyBsaWJyYXJ5LgorLQorLVR1ZSBBdWcgMTUgMDY6MTY6NDQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIChfbmxfZmluZF9kb21haW4pOgorLQlOZXcgcHJvdG90eXBlIGFmdGVyIGNoYW5naW5nIHNlYXJjaCBzdHJhdGVneS4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCVdlIG5vdyB0cnkgb25seSB0byBmaW5kIGEgc3BlY2lmaWVkIGNhdGFsb2cuICBGYWxsIGJhY2sgdG8gb3RoZXIKKy0JY2F0YWxvZ3MgbGlzdGVkIGluIHRoZSBsb2NhbGUgbGlzdCBpcyBub3cgZG9uZSBpbiBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkY2dldHRleHQuYyAoX19kY2dldHRleHQpOgorLQlOb3cgd2UgcHJvdmlkZSBtZXNzYWdlIGZhbGwgYmFjayBldmVuIHRvIGRpZmZlcmVudCBsYW5ndWFnZXMuCistCUkuZS4gaWYgYSBtZXNzYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gb25lIGxhbmd1YWdlIGFsbCB0aGUgb3RoZXIKKy0gCWluIHRoZSBsb2NhbGUgbGlzdCBhIHRyaWVkLiAgRm9ybWVybHkgZmFsbCBiYWNrIHdhcyBvbmx5IHBvc3NpYmxlCistIAl3aXRoaW4gb25lIGxhbmd1YWdlLiAgSW1wbGVtZW50ZWQgYnkgbW92aW5nIG9uZSBsb29wIGZyb20KKy0gCV9ubF9maW5kX2RvbWFpbiB0byBoZXJlLgorLQorLU1vbiBBdWcgMTQgMjM6NDU6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6CistCURpcmVjdG9yeSB3aGVyZSBzb3VyY2Ugb2YgR05VIGdldHRleHQgbGlicmFyeSBhcmUgbWFkZQorLQlhdmFpbGFibGUuCistCShJTlNUQUxMLCBJTlNUQUxMX0RBVEEpOiBQcm9ncmFtcyB1c2VkIGZvciBpbnN0YWxsaW5nIHNvdXJjZXMuCistCShnZXR0ZXh0LXNyYyk6IE5ldy4gIFJ1bGUgdG8gaW5zdGFsbCBHTlUgZ2V0dGV4dCBzb3VyY2VzIGZvciB1c2UgaW4KKy0JZ2V0dGV4dGl6ZSBzaGVsbCBzY3JpcHQuCistCistU3VuIEF1ZyAxMyAxNDo0MDo0OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKToKKy0JVXNlIG1tYXAgZm9yIGxvYWRpbmcgb25seSB3aGVuIG11bm1hcCBmdW5jdGlvbiBpcworLQlhbHNvIGF2YWlsYWJsZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IERlcGVuZCBvbiBgYWxsJyBnb2FsLgorLQorLVdlZCBBdWcgIDkgMTE6MDQ6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlEbyBub3Qgb3ZlcndyaXRlICdcbicgd2hlbiB0ZXJtaW5hdGluZyBhbGlhcyB2YWx1ZSBzdHJpbmcuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JSGFuZGxlIGxvbmcgbGluZXMuICBJZ25vcmUgdGhlIHJlc3Qgbm90IGZpdHRpbmcgaW4KKy0JdGhlIGJ1ZmZlciBhZnRlciB0aGUgaW5pdGlhbCBgZmdldHMnIGNhbGwuCistCistV2VkIEF1ZyAgOSAwMDo1NDoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGdldHRleHRQLmggKF9ubF9sb2FkX2RvbWFpbik6CistCUFkZCBwcm90b3R5cGUsIHJlcGxhY2luZyBwcm90b3R5cGUgZm9yIF9ubF9sb2FkX21zZ19jYXQuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlSZW1vdmUgdW5uZWVkZWQgdmFyaWFibGUgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2xlbi4KKy0JKGV4cGFuZF9hbGlhcyk6IFJlbW92ZSBwcm90b3R5cGUgYmVjYXVzZSBmdW5jdGlvbnMgZG9lcyBub3QKKy0gCWV4aXN0IGFueW1vcmUuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JQ2hhbmdlIHR5cGUgb2YgZm5hbWVfbGVuIHBhcmFtZXRlciB0byBpbnQuCistCSh4bWFsbG9jKTogQWRkIHByb3RvdHlwZS4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IEJldHRlciBwcm90b3R5cGVzIGZvciB4bWFsbG9jLgorLQorLVR1ZSBBdWcgIDggMjI6MzA6MzkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUFsbG93IGFsaWFzIG5hbWUgdG8gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgZm91ciBjb21wb25lbnRzLgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBOZXcgdmFyaWFibGUuICBTZXQgdG8gcHJlbGltaW5hcnkgdmFsdWUuCistCShTT1VSQ0VTKTogQWRkIGxvY2FsZWFsaWFzLmMuCistCShPQkpFQ1RTKTogQWRkIGxvY2FsZWFsaWFzLm8uCistCistCSogZ2V0dGV4dFAuaDogQWRkIHByb3RvdHlwZSBmb3IgX25sX2V4cGFuZF9hbGlhcy4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEFsaWFzaW5nIGhhbmRsZWQgaW4gaW50bC9sb2NhbGVhbGlhcy5jLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IEFsaWFzaW5nIGZvciBsb2NhbGUgbmFtZXMuCistCistCSogYmluZHRleHRkb20uYzogQmV0dGVyIHByb3RvdHlwZXMgZm9yIHhtYWxsb2MgYW5kIHhzdHJkdXAuCistCistTW9uIEF1ZyAgNyAyMzo0Nzo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBnZXR0ZXh0LnBlcmwgaXMgbm93IGZvdW5kIGluIG1pc2MvLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlDb3JyZWN0IGltcGxlbWVudGF0aW9uLiAgZGlybmFtZSBwYXJhbWV0ZXIgd2FzIG5vdCB1c2VkLgorLQlSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBnZXR0ZXh0UC5oIChsb2FkZWRfZG9tYWluKToKKy0JTmV3IGZpZWxkcyBgc3VjY2Vzc29yJyBhbmQgYGRlY2lkZWQnIGZvciBvbywgbGF6eQorLQltZXNzYWdlIGhhbmRsaW5nIGltcGxlbWVudGF0aW9uLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlBZG9wdCBmb3Igb28sIGxhenkgbWVzc2FnZSBoYW5kbGlpbmcuCistICAJTm93IHdlIGNhbiBpbmhlcml0IHRyYW5zbGF0aW9ucyBmcm9tIGxlc3Mgc3BlY2lmaWMgbG9jYWxlcy4KKy0JKGZpbmRfbXNnKTogTmV3IGZ1bmN0aW9uLgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOgorLQlDb21wbGV0ZSByZXdyaXRlLiAgSW1wbGVtZW50IG9vLCBsYXp5IG1lc3NhZ2UgaGFuZGxpbmcgOi0pLgorLSAgCVdlIG5vdyBoYXZlIGFuIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgYExBTkdVQUdFJyB3aXRoCistIAlhIGhpZ2hlciBwcmlvcml0eSB0aGFuIExDX0FMTCBmb3IgdGhlIExDX01FU1NBR0UgbG9jYWxlLgorLSAgCUhlcmUgd2UgY2FuIHNldCBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHNwZWNpZmljYXRpb25zIGVhY2gKKy0gCW9mIHRoZSBmb3JtIGBsYW5ndWFnZVtfdGVycml0b3J5Wy5jb2Rlc2V0XV1bQG1vZGlmaWVyXScuCistCistU2F0IEF1ZyAgNSAwOTo1NTo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAodW5pc3RkLmgpOgorLQlJbmNsdWRlIHRvIGdldCBfUENfUEFUSF9NQVggZGVmaW5lZCBvbiBzeXN0ZW0gaGF2aW5nIGl0LgorLQorLUZyaSBBdWcgIDQgMjI6NDI6MDAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IEluY2x1ZGUgcHJvdG90eXBlLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0KTogUmVtb3ZlIGBjb3B5aW5nIGluc3RlYWQnIG1lc3NhZ2UuCistCistV2VkIEF1ZyAgMiAxODo1MjowMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChJRCwgVEFHUyk6IERvIG5vdCB1c2UgJF4uCistCistVHVlIEF1ZyAgMSAyMDowNzoxMSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChUQUdTLCBJRCk6IFVzZSAkXiBhcyBjb21tYW5kIGFyZ3VtZW50LgorLQkoVEFHUyk6IEdpdmUgZXRhZ3MgLW8gb3B0aW9uIHQgd3JpdGUgdG8gY3VycmVudCBkaXJlY3RvcnksCistIAlub3QgJChzcmNkaXIpLgorLQkoSUQpOiBVc2UgJChzcmNkaXIpIGluc3RlYWQgb3MgJCh0b3Bfc3JjZGlyKS9zcmMuCistCShkaXN0Y2xlYW4pOiBSZW1vdmUgSUQuCistCistU3VuIEp1bCAzMCAxMTo1MTo0NiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChnbnVsb2NhbGVkaXIpOgorLQlOZXcgdmFyaWFibGUsIGFsd2F5cyB1c2luZyBzaGFyZS8gZm9yIGRhdGEgZGlyZWN0b3J5LgorLQkoREVGUyk6IEFkZCBHTlVMT0NBTEVESVIsIHVzZWQgaW4gZmluZGRvbWFpbi5jLgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2RlZmF1bHRfZGlybmFtZSk6CistCVNldCB0byBHTlVMT0NBTEVESVIsIGJlY2F1c2UgaXQgYWx3YXlzIGhhcyB0byBwb2ludAorLQl0byB0aGUgZGlyZWN0b3J5IHdoZXJlIEdOVSBnZXR0ZXh0IExpYnJhcnkgd3JpdGVzIGl0IHRvLgorLQorLQkqIGludGwtY29tcGF0LmMgKHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKToKKy0JVW5kZWZpbmUgbWFjcm9zIGJlZm9yZSBmdW5jdGlvbiBkZWZpbml0aW9uLgorLQorLVNhdCBKdWwgMjIgMDE6MTA6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKF9MSUJJTlRMX0gpOgorLQlQcm90ZWN0IGRlZmluaXRpb24gaW4gY2FzZSB3aGVyZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYXMKKy0JbGliZ2V0dGV4dC5oIG9uIFNvbGFyaXMgbWFjaGluZXMuICBBZGQgY29tbWVudCBhYm91dCB0aGlzLgorLQorLVdlZCBKdWwgMTkgMDI6MzY6NDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jICh0ZXh0ZG9tYWluKTogQ29ycmVjdCB0eXBvLgorLQorLVdlZCBKdWwgMTkgMDE6NTE6MzUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZGNnZXR0ZXh0KTogRnVuY3Rpb24gbm93IGNhbGxlZCBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkZ2V0dGV4dC5jIChkZ2V0dGV4dCk6IE5vdyBjYWxsZWQgX19kZ2V0dGV4dCBhbmQgY2FsbHMKKy0gCV9fZGNnZXR0ZXh0LgorLQorLQkqIGdldHRleHQuYyAoZ2V0dGV4dCk6CistCUZ1bmN0aW9uIG5vdyBjYWxsZWQgX19nZXR0ZXh0IGFuZCBjYWxscyBfX2RnZXR0ZXh0LgorLQorLQkqIHRleHRkb21haW4uYyAodGV4dGRvbWFpbik6IEZ1bmN0aW9uIG5vdyBjYWxsZWQgX190ZXh0ZG9tYWluLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmMgKGJpbmR0ZXh0ZG9tYWluKTogRnVuY3Rpb24gbm93IGNhbGxlZAorLSAJX19iaW5kdGV4dGRvbWFpbi4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogQWRkIGludGwtY29tcGF0LmMuCistCShPQkpFQ1RTKTogV2UgYWx3YXlzIGNvbXBpbGUgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgZnVuY3Rpb25zLgorLSAgCU9CSkVDVFMgY29udGFpbnMgYWxsIG9iamVjdHMgYnV0IGNhdC1jb21wYXQubywgLi4vcG8vY2F0LWlmLXRibC5vLAorLSAJYW5kIGludGwtY29tcGF0Lm8uCistICAJKEdFVFRPQkpTKTogQ29udGFpbnMgbm93IG9ubHkgaW50bC1jb21wYXQuby4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCVJlLWluY2x1ZGUgcHJvdGVjdGlvbiBtYXRjaGVzIGR1YWxpc3RpYyBjaGFyYWN0ZXIgb2YgbGliZ2V0dGV4dC5oLgorLQlGb3IgYWxsIGZ1bmN0aW9ucyBpbiBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGRlZmluZSBfXyBjb3VudGVyIHBhcnQuCistCistCSogZmluZGRvbWFpbi5jIChzdHJjaHIpOiBEZWZpbmUgYXMgaW5kZXggaWYgbm90IGZvdW5kIGluIEMgbGlicmFyeS4KKy0JKF9ubF9maW5kX2RvbWFpbik6IEZvciByZWxhdGl2ZSBwYXRocyBwYXN0ZSAvIGluIGJldHdlZW4uCistCistVHVlIEp1bCAxOCAxNjozNzo0NSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOiBBZGQgaW5jbHVzaW9uIG9mIHN5cy90eXBlcy5oLgorLQorLQkqIHhvcGVuLW1zZy5zZWQ6IEZpeCBidWcgd2l0aCBgbXNnc3RyICIiJyBsaW5lcy4KKy0JQSBsaXR0bGUgYml0IGJldHRlciBjb21tZW50cy4KKy0KKy1UdWUgSnVsIDE4IDAxOjE4OjI3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW46CistCXBvLW1vZGUuZWwsIG1ha2VsaW5rcywgY29tYmluZS1zaCBhcmUgbm93IGZvdW5kIGluIC4uL21pc2MuCistCistCSogcG8tbW9kZS5lbCwgbWFrZWxpbmtzLCBjb21iaW5lLXNoLCBlbGlzcC1jb21wOgorLQlNb3ZlZCB0byAuLi9taXNjLy4KKy0KKy0JKiBsaWJnZXR0ZXh0LmgsIGdldHRleHRQLmgsIGdldHRleHQuaDogVW5pZm9ybSB0ZXN0IGZvciBfX1NURENfXy4KKy0KKy1TdW4gSnVsIDE2IDIyOjMzOjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKElOU1RBTEwsIElOU1RBTExfREFUQSk6IE5ldyB2YXJpYWJsZXMuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEluc3RhbGwvdW5pbnN0YWxsIC5lbGMgZmlsZS4KKy0KKy0JKiBwby1tb2RlLmVsIChJbnN0YWxsYXRpb24gY29tbWVudCk6CistCUFkZCAucG94IGFzIHBvc3NpYmxlIGV4dGVuc2lvbiBvZiAucG8gZmlsZXMuCistCistU3VuIEp1bCAxNiAxMzoyMzoyNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGVsaXNwLWNvbXA6IENvbXBsZXRlIG5ldyB2ZXJzaW9uIGJ5IEZyYW5jLG9pczogVGhpcyBkb2VzIG5vdAorLSAJZmFpbCB3aGVuIG5vdCBjb21waWxpbmcgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistCistU3VuIEp1bCAxNiAwMDoxMjoxNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOgorLQlVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgZm9yIHJlY3Vyc2l2ZSBtYWtlLgorLQorLQkqIE1ha2VmaWxlLmluICguZWwuZWxjKTogVXNlICQoU0hFTEwpIGluc3RlYWQgb2YgL2Jpbi9zaC4KKy0JKGluc3RhbGwtZXhlYyk6IEFkZCBtaXNzaW5nIGR1bW15IGdvYWwuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEAgaW4gbXVsdGktbGluZSBzaGVsbCBjb21tYW5kIGF0CistIAliZWdpbm5pbmcsIG5vdCBpbiBmcm9udCBvZiBlY2hvLiAgUmVwb3J0ZWQgYnkgRXJpYyBCYWNrdXMuCistCistU2F0IEp1bCAxNSAwMDoyMToyOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgorLQlSZW5hbWUgbGliZ2V0dGV4dC5wZXJsIHRvIGdldHRleHQucGVybCB0byBmaXQgaW4gMTQgY2hhcnMKKy0JZmlsZSBzeXN0ZW1zLgorLQorLQkqIGdldHRleHQucGVybDoKKy0gCVJlbmFtZSB0byBnZXR0ZXh0LnBlcmwgdG8gZml0IGluIDE0IGNoYXJzIGZpbGUgc3lzdGVtcy4KKy0KKy1UaHUgSnVsIDEzIDIzOjE3OjIwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogY2F0LWNvbXBhdC5jOiBJZiAhU1REQ19IRUFERVJTIHRyeSB0byBpbmNsdWRlIG1hbGxvYy5oLgorLQorLVRodSBKdWwgMTMgMjA6NTU6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluOiBQcmV0dHkgcHJpbnRpbmcuCistCistCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDoKKy0JQ29ycmVjdCBidWdzIHdpdGggaGFuZGxpbmcgc3Vic3RpdHV0ZSBmbGFncyBpbiBicmFuY2hlcy4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CistCU9sZCBLJlIgY29tcGlsZXJzIGRvbid0IHVuZGVyIHN0YW5kIGB1bnNpZ25lZCBjaGFyJy4KKy0KKy0JKiBnZXR0ZXh0LmggKG5sc191aW50MzIpOgorLQlTb21lIG9sZCBLJlIgY29tcGlsZXJzIChlZyBIUCkgZG9uJ3QgdW5kZXJzdGFuZCBgdW5zaWduZWQgaW50Jy4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKG1zZ190b19jYXRfaWQpOiBEZS1BTlNJLWZ5IHByb3RvdHlwZXMuCistCistVGh1IEp1bCAxMyAwMTozNDozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChFTENGSUxFUyk6IE5ldyB2YXJpYWJsZS4KKy0JKERJU1RGSUxFUyk6IEFkZCBlbGlzcC1jb21wLgorLQlBZGQgaW1wbGljaXQgcnVsZSBmb3IgLmVsIC0+IC5lbGMgY29tcGlsYXRpb24uCistCShpbnN0YWxsLWRhdGEpOiBpbnN0YWxsICRFTENGSUxFUworLQkoY2xlYW4pOiByZW5hbWVkIHBvLXRvLXRibCBhbmQgcG8tdG8tbXNnIHRvIHBvMnRibCBhbmQgcG8ybXNnIHJlc3AuCistCistCSogZWxpc3AtY29tcDogSW5pdGlhbCByZXZpc2lvbgorLQorLVdlZCBKdWwgMTIgMTY6MTQ6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JY2F0LWlkLXRibC5jIGlzIG5vdyBmb3VuZCBpbiBwby8uICBUaGlzIGVuYWJsZXMgdXMgdG8gdXNlIGFuIGlkZW50aWNhbAorLQlpbnRsLyBkaXJlY3RvcnkgaW4gYWxsIHBhY2thZ2VzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBoYXNoaW5nIGRvZXMgbm90IHdvcmsgZm9yIHRhYmxlIHNpemUgPD0gMi4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IGZpeCB0eXBvICgjaWYgZGVmIC0+ICNpZiBkZWZpbmVkKQorLQorLVR1ZSBKdWwgMTEgMTg6NDQ6NDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoc3RhbXAtY2F0LWlkKTogdXNlIHRvcF9zcmNkaXIgdG8gYWRkcmVzcyBzb3VyY2UgZmlsZXMKKy0JKERJU1RGSUxFUyxkaXN0Y2xlYW4pOiBtb3ZlIHR1cGRhdGUucGVybCB0byBzcmMvCistCistCSogcG8tdG8tdGJsLnNlZC5pbjoKKy0JYWRkIGFkZGl0aW9uYWwganVtcCB0byBjbGVhciBjaGFuZ2UgZmxhZyB0byByZWNvZ25pemUgbXVsdGlsaW5lIHN0cmluZ3MKKy0KKy1UdWUgSnVsIDExIDAxOjMyOjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdGV4dGRvbWFpbi5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaCBhbmQgc3RyaW5nLmguCistCistCSogbG9hZG1zZ2NhdC5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaC4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFByb3RlY3QgaW5jbHVzaW9uIG9mIGxvY2FsZS5oLgorLQlBbGxvdyB1c2UgaW4gQysrIHByb2dyYW1zLgorLQlEZWZpbmUgTlVMTCBpcyBub3QgaGFwcGVuZWQgYWxyZWFkeS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogc2hpcCBwby10by10Ymwuc2VkLmluIGluc3RlYWQgb2YKKy0JcG8tdG8tdGJsLnNlZC4KKy0JKGRpc3RjbGVhbik6IHJlbW92ZSBwby10by10Ymwuc2VkIGFuZCB0dXBkYXRlLnBlcmwuCistCistCSogdHVwZGF0ZS5wZXJsLmluOiBTdWJzdGl0dXRlIFBlcmwgcGF0aCBldmVuIGluIGV4ZWMgbGluZS4KKy0JRG9uJ3QgaW5jbHVkZSBlbnRyaWVzIHdpdGhvdXQgdHJhbnNsYXRpb24gZnJvbSBvbGQgLnBvIGZpbGUuCistCistVHVlIEp1bCAgNCAwMDo0MTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogdXNlICJVcGRhdGVkOiAiIGluIG1zZ2lkICIiLgorLQorLQkqIGNhdC1jb21wYXQuYzogRml4IHR5cG8gKExPQ0FMRElSIC0+IExPQ0FMRURJUikuCistIAlEZWZpbmUgZ2V0ZW52IGlmICFfX1NURENfXy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBQcm90ZWN0IHN0ZGxpYi5oIGFuZCBzdHJpbmcuaCBpbmNsdXNpb24uCistIAlEZWZpbmUgZnJlZSBpZiAhX19TVERDX18uCistCistCSogZmluZGRvbWFpbi5jOiBDaGFuZ2UgREVGX01TR19ET01fRElSIHRvIExPQ0FMRURJUi4KKy0gCURlZmluZSBmcmVlIGlmICFfX1NURENfXy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IENoYW5nZSBERUZfTVNHX0RPTV9ESVIgdG8gTE9DQUxFRElSLgorLQorLU1vbiBKdWwgIDMgMjM6NTY6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogVXNlIExPQ0FMRURJUiBpbnN0ZWFkIG9mIERFRl9NU0dfRE9NX0RJUi4KKy0JUmVtb3ZlIHVubmVlZGVkICQoc3JjZGlyKSBmcm9tIE1ha2VmaWxlLmluIGRlcGVuZGVuY3kuCistCistCSogbWFrZWxpbmtzOiBBZGQgY29weXJpZ2h0IGFuZCBzaG9ydCBkZXNjcmlwdGlvbi4KKy0KKy0JKiBwby1tb2RlLmVsOiBMYXN0IHZlcnNpb24gZm9yIDAuNy4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IEZpeCBkaWUgbWVzc2FnZS4KKy0KKy0JKiBkY2dldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0cmluZy5oLgorLQorLQkqIGdldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0ZGxpYi5oIGFuZCBmdXJ0aGVyIHRyaWVzIHRvIGdldCBOVUxMLgorLQorLQkqIGZpbmRkb21haW4uYzogU29tZSBjb3JyZWN0aW9ucyBpbiBpbmNsdWRlcy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBQcnVuZSBsaXN0IGNvcnJlY3QgcGF0aCB0byBNYWtlZmlsZS5pbi4KKy0KKy0JKiBwby10by10Ymwuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy1TdW4gSnVsICAyIDIzOjU1OjAzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdHVwZGF0ZS5wZXJsLmluOiBDb21wbGV0ZSByZXdyaXRlIGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgorKzIwMDQtMDEtMjkgIEdOVSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorIAorLVN1biBKdWwgIDIgMDI6MDY6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKysJKiBWZXJzaW9uIDAuMTQuMSByZWxlYXNlZC4KKyAKKy0JKiBGaXJzdCBvZmZpY2lhbCByZWxlYXNlLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBjb2RlCistCW5lZWRlZCB0byBpbnRlcm5hdGlvbmFsaXplIG93biBwYWNrYWdlcy4gIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucworLQl3aGljaCBhbGxvdyB0byB1c2UgdGhlIFgvT3BlbiBjYXRnZXRzIGZ1bmN0aW9uIHdpdGggYW4gaW50ZXJmYWNlCistCWxpa2UgdGhlIFVuaWZvcnVtIGdldHRleHQgZnVuY3Rpb24uICBGb3Igc3lzdGVtIHdoaWNoIGRvZXMgbm90CistCWhhdmUgbmVpdGhlciBvZiB0aG9zZSBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2NvbmZpZy5jaGFyc2V0CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NvbmZpZy5jaGFyc2V0CTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU0NzQ4MjQwIC0wNDAwCitAQCAtMCwwICsxLDYwOCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMuCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBUaGUgdGFibGUgY29uc2lzdHMgb2YgbGluZXMgb2YgdGhlIGZvcm0KKysjICAgIEFMSUFTICBDQU5PTklDQUwKKysjCisrIyBBTElBUyBpcyB0aGUgKHN5c3RlbSBkZXBlbmRlbnQpIHJlc3VsdCBvZiAibmxfbGFuZ2luZm8gKENPREVTRVQpIi4KKysjIEFMSUFTIGlzIGNvbXBhcmVkIGluIGEgY2FzZSBzZW5zaXRpdmUgd2F5LgorKyMKKysjIENBTk9OSUNBTCBpcyB0aGUgR05VIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIGNoYXJhY3RlciBlbmNvZGluZy4KKysjIEl0IG11c3QgYmUgYW4gZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IGxpYmljb252LiBTdXBwb3J0IGJ5IEdOVSBsaWJjIGlzCisrIyBhbHNvIGRlc2lyYWJsZS4gQ0FOT05JQ0FMIGlzIGNhc2UgaW5zZW5zaXRpdmUuIFVzdWFsbHkgYW4gdXBwZXIgY2FzZQorKyMgTUlNRSBjaGFyc2V0IG5hbWUgaXMgcHJlZmVycmVkLgorKyMgVGhlIGN1cnJlbnQgbGlzdCBvZiBHTlUgY2Fub25pY2FsIGNoYXJzZXQgbmFtZXMgaXMgYXMgZm9sbG93cy4KKysjCisrIyAgICAgICBuYW1lICAgICAgICAgICAgICBNSU1FPyAgICAgICAgICAgICB1c2VkIGJ5IHdoaWNoIHN5c3RlbXMKKysjICAgQVNDSUksIEFOU0lfWDMuNC0xOTY4ICAgICAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMyAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMKKysjICAgSVNPLTg4NTktNCAgICAgICAgICAgICAgWSAgIG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTUgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTYgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBzb2xhcmlzCisrIyAgIElTTy04ODU5LTcgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisrIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS05ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS0xMyAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgSVNPLTg4NTktMTQgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIElTTy04ODU5LTE1ICAgICAgICAgICAgICAgICBnbGliYyBhaXggb3NmIHNvbGFyaXMgZnJlZWJzZAorKyMgICBLT0k4LVIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBLT0k4LVUgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgZnJlZWJzZCBkYXJ3aW4KKysjICAgS09JOC1UICAgICAgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIENQNDM3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1MCAgICAgICAgICAgICAgICAgICAgICAgYWl4IG9zZiBkb3MKKysjICAgQ1A4NTIgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODU2ICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A4NTcgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODYyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjQgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODY2ICAgICAgICAgICAgICAgICAgICAgICBmcmVlYnNkIGRhcndpbiBkb3MKKysjICAgQ1A4NjkgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQOTIyICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A5MzIgICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMiBkb3MKKysjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDk0OSAgICAgICAgICAgICAgICAgICAgICAgb3NmIHdvZTMyIGRvcworKyMgICBDUDk1MCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMTI0ICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDExMjUgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMjUwICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1MSAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIGRhcndpbiB3b2UzMgorKyMgICBDUDEyNTIgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyCisrIyAgIENQMTI1MyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTQgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjU1ICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHdvZTMyCisrIyAgIENQMTI1NiAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTcgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgR0IyMzEyICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtSlAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtS1IgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtVFcgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBCSUc1ICAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgQklHNS1IS1NDUyAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKysjICAgR0IxODAzMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgU0hJRlRfSklTICAgICAgICAgICAgICAgWSAgIGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSk9IQUIgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgd29lMzIKKysjICAgVElTLTYyMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisrIyAgIFZJU0NJSSAgICAgICAgICAgICAgICAgIFkgICBnbGliYworKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgR0VPUkdJQU4tUFMgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIEhQLVJPTUFOOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUFSQUJJQzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUdSRUVLOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUhFQlJFVzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLVRVUktJU0g4ICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUtBTkE4ICAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIERFQy1LQU5KSSAgICAgICAgICAgICAgICAgICBvc2YKKysjICAgREVDLUhBTllVICAgICAgICAgICAgICAgICAgIG9zZgorKyMgICBVVEYtOCAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKysjCisrIyBOb3RlOiBOYW1lcyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyBiZWluZyBhIE1JTUUgbmFtZSBzaG91bGQgbm90IGJlIHVzZWQgaW4KKysjIEludGVybmV0IHByb3RvY29scyBmb3IgaW5mb3JtYXRpb24gaW50ZXJjaGFuZ2UgKG1haWwsIG5ld3MsIGV0Yy4pLgorKyMKKysjIE5vdGU6IEFTQ0lJIGFuZCBBTlNJX1gzLjQtMTk2OCBhcmUgc3lub255bW91cyBjYW5vbmljYWwgbmFtZXMuIEFwcGxpY2F0aW9ucworKyMgbXVzdCB1bmRlcnN0YW5kIGJvdGggbmFtZXMgYW5kIHRyZWF0IHRoZW0gYXMgZXF1aXZhbGVudC4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisrIyBvcgorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisrCisraG9zdD0iJDEiCisrb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAtZSAncy9eW14tXSotW14tXSotXCguKlwpJC9cMS8nYAorK2VjaG8gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMsIgorK2VjaG8gIiMgc3VpdGFibGUgZm9yIG9wZXJhdGluZyBzeXN0ZW0gJyR7b3N9Jy4iCisrZWNobyAiIyBJdCB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWcuY2hhcnNldC4iCisrIyBMaXN0IG9mIHJlZmVyZW5jZXMsIHVwZGF0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbjoKKytlY2hvICIjIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogIgorK2Nhc2UgIiRvcyIgaW4KKysgICAgbGludXgtZ251bGliYzEqKQorKwkjIExpbnV4IGxpYmM1IGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiQyBBU0NJSSIKKysJZWNobyAiUE9TSVggQVNDSUkiCisrCWZvciBsIGluIGFmIGFmX1pBIGNhIGNhX0VTIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIFwKKysJICAgICAgICAgZW4gZW5fQVUgZW5fQlcgZW5fQ0EgZW5fREsgZW5fR0IgZW5fSUUgZW5fTlogZW5fVVMgZW5fWkEgXAorKwkgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisrCSAgICAgICAgIGVzX0hOIGVzX01YIGVzX1BBIGVzX1BFIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IFwKKysJICAgICAgICAgZXRfRUUgZXUgZXVfRVMgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgXAorKwkgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisrCSAgICAgICAgIGl0X0lUIGtsIGtsX0dMIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIHB0IHB0X0JSIHB0X1BUIHN2IFwKKysJICAgICAgICAgc3ZfRkkgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5pc28tODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTUgSVNPLTg4NTktMTUiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKysJICBlY2hvICIkbEBldXJvIElTTy04ODU5LTE1IgorKwkgIGVjaG8gIiRsLmNwLTQzNyBDUDQzNyIKKysJICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisrCSAgZWNobyAiJGwuY3AtMTI1MiBDUDEyNTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MkBldXJvIENQMTI1MiIKKysJICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gY3MgY3NfQ1ogaHIgaHJfSFIgaHUgaHVfSFUgcGwgcGxfUEwgcm8gcm9fUk8gc2sgc2tfU0sgc2wgXAorKwkgICAgICAgICBzbF9TSSBzciBzcl9DUyBzcl9ZVTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS0yIgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTIgSVNPLTg4NTktMiIKKysJICBlY2hvICIkbC5jcC04NTIgQ1A4NTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5pc28tODg1OS01IElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKysJICBlY2hvICIkbC5jcC04NjYgQ1A4NjYiCisrCSAgZWNobyAiJGwuY3AtMTI1MSBDUDEyNTEiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gYXIgYXJfU0E7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNiIKKysJICBlY2hvICIkbC5pc28tODg1OS02IElTTy04ODU5LTYiCisrCSAgZWNobyAiJGwuY3AtODY0IENQODY0IgorKwkgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLmNwLTEyNTYgQ1AxMjU2IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGVsIGVsX0dSIGdyIGdyX0dSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTciCisrCSAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorKwkgIGVjaG8gIiRsLmNwLTg2OSBDUDg2OSIKKysJICBlY2hvICIkbC5jcC0xMjUzIENQMTI1MyIKKysJICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gaGUgaGVfSUwgaXcgaXdfSUw7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktOCIKKysJICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisrCSAgZWNobyAiJGwuY3AtODYyIENQODYyIgorKwkgIGVjaG8gIiRsLmNwLTEyNTUgQ1AxMjU1IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIHRyIHRyX1RSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTkiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktOSBJU08tODg1OS05IgorKwkgIGVjaG8gIiRsLmNwLTg1NyBDUDg1NyIKKysJICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKysJICAjZWNobyAiJGwgQkFMVElDIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKysJICBlY2hvICIkbCBJU08tODg1OS0xMyIKKysJZG9uZQorKwlmb3IgbCBpbiBydV9VQSB1ayB1a19VQTsgZG8KKysJICBlY2hvICIkbCBLT0k4LVUiCisrCWRvbmUKKysJZm9yIGwgaW4gemggemhfQ047IGRvCisrCSAgI2VjaG8gIiRsIEdCXzIzMTItODAiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorKwkgIGVjaG8gIiRsIEdCMjMxMiIKKysJZG9uZQorKwlmb3IgbCBpbiBqYSBqYV9KUCBqYV9KUC5FVUM7IGRvCisrCSAgZWNobyAiJGwgRVVDLUpQIgorKwlkb25lCisrCWZvciBsIGluIGtvIGtvX0tSOyBkbworKwkgIGVjaG8gIiRsIEVVQy1LUiIKKysJZG9uZQorKwlmb3IgbCBpbiB0aCB0aF9USDsgZG8KKysJICBlY2hvICIkbCBUSVMtNjIwIgorKwlkb25lCisrCWZvciBsIGluIGZhIGZhX0lSOyBkbworKwkgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJOzsKKysgICAgbGludXgqIHwgKi1nbnUqKQorKwkjIFdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB3ZSBkb24ndCBuZWVkIGFueSBjYW5vbmljYWxpemF0aW9uLAorKwkjIGJlY2F1c2UgZ2xpYmMgaGFzIGljb252IGFuZCBib3RoIGdsaWJjIGFuZCBsaWJpY29udiBzdXBwb3J0IGFsbAorKwkjIEdOVSBjYW5vbmljYWwgbmFtZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIE1ha2VmaWxlIGRvZXMgbm90CisrCSMgbmVlZCB0byBpbnN0YWxsIHRoZSBhbGlhcyBmaWxlIGF0IGFsbC4KKysJIyBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSB0byBnbGliYy0yLjAueCBhbmQgb2xkZXIgbGliY3MuCisrCWVjaG8gIklTT182NDYuSVJWOjE5ODMgQVNDSUkiCisrCTs7CisrICAgIGFpeCopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJJQk0tODUwIENQODUwIgorKwllY2hvICJJQk0tODU2IENQODU2IgorKwllY2hvICJJQk0tOTIxIElTTy04ODU5LTEzIgorKwllY2hvICJJQk0tOTIyIENQOTIyIgorKwllY2hvICJJQk0tOTMyIENQOTMyIgorKwllY2hvICJJQk0tOTQzIENQOTQzIgorKwllY2hvICJJQk0tMTA0NiBDUDEwNDYiCisrCWVjaG8gIklCTS0xMTI0IENQMTEyNCIKKysJZWNobyAiSUJNLTExMjkgQ1AxMTI5IgorKwllY2hvICJJQk0tMTI1MiBDUDEyNTIiCisrCWVjaG8gIklCTS1ldWNDTiBHQjIzMTIiCisrCWVjaG8gIklCTS1ldWNKUCBFVUMtSlAiCisrCWVjaG8gIklCTS1ldWNLUiBFVUMtS1IiCisrCWVjaG8gIklCTS1ldWNUVyBFVUMtVFciCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiVElTLTYyMCBUSVMtNjIwIgorKwllY2hvICJVVEYtOCBVVEYtOCIKKysJOzsKKysgICAgaHB1eCopCisrCWVjaG8gImlzbzg4NTkxIElTTy04ODU5LTEiCisrCWVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisrCWVjaG8gImlzbzg4NTk1IElTTy04ODU5LTUiCisrCWVjaG8gImlzbzg4NTk2IElTTy04ODU5LTYiCisrCWVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisrCWVjaG8gImlzbzg4NTk4IElTTy04ODU5LTgiCisrCWVjaG8gImlzbzg4NTk5IElTTy04ODU5LTkiCisrCWVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKysJZWNobyAicm9tYW44IEhQLVJPTUFOOCIKKysJZWNobyAiYXJhYmljOCBIUC1BUkFCSUM4IgorKwllY2hvICJncmVlazggSFAtR1JFRUs4IgorKwllY2hvICJoZWJyZXc4IEhQLUhFQlJFVzgiCisrCWVjaG8gInR1cmtpc2g4IEhQLVRVUktJU0g4IgorKwllY2hvICJrYW5hOCBIUC1LQU5BOCIKKysJZWNobyAidGlzNjIwIFRJUy02MjAiCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJZWNobyAiaHAxNUNOIEdCMjMxMiIKKysJI2VjaG8gImNjZGMgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJ1dGY4IFVURi04IgorKwk7OworKyAgICBpcml4KikKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJldWNDTiBHQjIzMTIiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCTs7CisrICAgIG9zZiopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJjcDg1MCBDUDg1MCIKKysJZWNobyAiYmlnNSBCSUc1IgorKwllY2hvICJkZWNoYW55dSBERUMtSEFOWVUiCisrCWVjaG8gImRlY2hhbnppIEdCMjMxMiIKKysJZWNobyAiZGVja2FuamkgREVDLUtBTkpJIgorKwllY2hvICJkZWNrb3JlYW4gRVVDLUtSIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJHQksgR0JLIgorKwllY2hvICJLU0M1NjAxIENQOTQ5IgorKwllY2hvICJzZGVja2FuamkgRVVDLUpQIgorKwllY2hvICJTSklTIFNISUZUX0pJUyIKKysJZWNobyAiVEFDVElTIFRJUy02MjAiCisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBzb2xhcmlzKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJrb2k4LXIgS09JOC1SIgorKwllY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIkJpZzUtSEtTQ1MgQklHNS1IS1NDUyIKKysJZWNobyAiZ2IyMzEyIEdCMjMxMiIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiR0IxODAzMCBHQjE4MDMwIgorKwllY2hvICJjbnMxMTY0MyBFVUMtVFciCisrCWVjaG8gIjU2MDEgRVVDLUtSIgorKwllY2hvICJrb19LUi5qb2hhcDkyIEpPSEFCIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gIlBDSyBTSElGVF9KSVMiCisrCWVjaG8gIlRJUzYyMC4yNTMzIFRJUy02MjAiCisrCSNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBmcmVlYnNkKiB8IG9zMiopCisrCSMgRnJlZUJTRCA0LjIgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwkjIExpa2V3aXNlIGZvciBPUy8yLiBPUy8yIGhhcyBYRnJlZTg2IGp1c3QgbGlrZSBGcmVlQlNELiBKdXN0CisrCSMgcmV1c2UgRnJlZUJTRCdzIGxvY2FsZSBkYXRhIGZvciBPUy8yLgorKwllY2hvICJDIEFTQ0lJIgorKwllY2hvICJVUy1BU0NJSSBBU0NJSSIKKysJZm9yIGwgaW4gbGFfTE4gbHRfTE47IGRvCisrCSAgZWNobyAiJGwuQVNDSUkgQVNDSUkiCisrCWRvbmUKKysJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBsYV9MTiBcCisrCSAgICAgICAgIGx0X0xOIG5sX0JFIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworKwkgIGVjaG8gIiRsLklTT184ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5ESVNfODg1OS0xNSBJU08tODg1OS0xNSIKKysJZG9uZQorKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBsdF9MTiBwbF9QTCBzbF9TSTsgZG8KKysJICBlY2hvICIkbC5JU09fODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNCBJU08tODg1OS00IgorKwlkb25lCisrCWZvciBsIGluIHJ1X1JVIHJ1X1NVOyBkbworKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNSBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAiamFfSlAuU2hpZnRfSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgbmV0YnNkKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAiZXVjQ04gR0IyMzEyIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwk7OworKyAgICBkYXJ3aW4qKQorKwkjIERhcndpbiA2LjggZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwllY2hvICJDIEFTQ0lJIgorKwlmb3IgbCBpbiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBsYV9MTjsgZG8KKysJICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKysJZG9uZQorKwlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisrCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKysJICAgICAgICAgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorKwlkb25lCisrCWZvciBsIGluIGxhX0xOOyBkbworKwkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWRvbmUKKysJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gcGxfUEwgc2xfU0k7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS00IElTTy04ODU5LTQiCisrCWRvbmUKKysJZm9yIGwgaW4gcnVfUlU7IGRvCisrCSAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKysJICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKysJZG9uZQorKwlmb3IgbCBpbiBiZ19CRzsgZG8KKysJICBlY2hvICIkbC5DUDEyNTEgQ1AxMjUxIgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgYmVvcyopCisrCSMgQmVPUyBoYXMgYSBzaW5nbGUgbG9jYWxlLCBhbmQgaXQgaGFzIFVURi04IGVuY29kaW5nLgorKwllY2hvICIqIFVURi04IgorKwk7OworKyAgICBtc2Rvc2RqZ3BwKikKKysJIyBESkdQUCAyLjAzIGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiIyIKKysJZWNobyAiIyBUaGUgZW5jb2RpbmdzIGdpdmVuIGhlcmUgbWF5IG5vdCBhbGwgYmUgY29ycmVjdC4iCisrCWVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorKwllY2hvICIjIGNvdW50cnkgaXMgbm90IHRoZSBvbmUgeW91ciBET1MgbWFjaGluZSBhY3R1YWxseSB1c2VzLCBqdXN0IgorKwllY2hvICIjIGNvcnJlY3QgaXQgaW4gdGhpcyBmaWxlLCBhbmQgc2VuZCBhIG1haWwgdG8iCisrCWVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPHN0MDAxOTA2QGhyejEuaHJ6LnR1LWRhcm1zdGFkdC5kZT4iCisrCWVjaG8gIiMgYW5kIEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4iCisrCWVjaG8gIiMiCisrCWVjaG8gIkMgQVNDSUkiCisrCSMgSVNPLTg4NTktMSBsYW5ndWFnZXMKKysJZWNobyAiY2EgQ1A4NTAiCisrCWVjaG8gImNhX0VTIENQODUwIgorKwllY2hvICJkYSBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiZGFfREsgQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gImRlIENQODUwIgorKwllY2hvICJkZV9BVCBDUDg1MCIKKysJZWNobyAiZGVfQ0ggQ1A4NTAiCisrCWVjaG8gImRlX0RFIENQODUwIgorKwllY2hvICJlbiBDUDg1MCIKKysJZWNobyAiZW5fQVUgQ1A4NTAiICMgbm90IENQNDM3ID8/CisrCWVjaG8gImVuX0NBIENQODUwIgorKwllY2hvICJlbl9HQiBDUDg1MCIKKysJZWNobyAiZW5fTlogQ1A0MzciCisrCWVjaG8gImVuX1VTIENQNDM3IgorKwllY2hvICJlbl9aQSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiZXMgQ1A4NTAiCisrCWVjaG8gImVzX0FSIENQODUwIgorKwllY2hvICJlc19CTyBDUDg1MCIKKysJZWNobyAiZXNfQ0wgQ1A4NTAiCisrCWVjaG8gImVzX0NPIENQODUwIgorKwllY2hvICJlc19DUiBDUDg1MCIKKysJZWNobyAiZXNfQ1UgQ1A4NTAiCisrCWVjaG8gImVzX0RPIENQODUwIgorKwllY2hvICJlc19FQyBDUDg1MCIKKysJZWNobyAiZXNfRVMgQ1A4NTAiCisrCWVjaG8gImVzX0dUIENQODUwIgorKwllY2hvICJlc19ITiBDUDg1MCIKKysJZWNobyAiZXNfTVggQ1A4NTAiCisrCWVjaG8gImVzX05JIENQODUwIgorKwllY2hvICJlc19QQSBDUDg1MCIKKysJZWNobyAiZXNfUFkgQ1A4NTAiCisrCWVjaG8gImVzX1BFIENQODUwIgorKwllY2hvICJlc19TViBDUDg1MCIKKysJZWNobyAiZXNfVVkgQ1A4NTAiCisrCWVjaG8gImVzX1ZFIENQODUwIgorKwllY2hvICJldCBDUDg1MCIKKysJZWNobyAiZXRfRUUgQ1A4NTAiCisrCWVjaG8gImV1IENQODUwIgorKwllY2hvICJldV9FUyBDUDg1MCIKKysJZWNobyAiZmkgQ1A4NTAiCisrCWVjaG8gImZpX0ZJIENQODUwIgorKwllY2hvICJmciBDUDg1MCIKKysJZWNobyAiZnJfQkUgQ1A4NTAiCisrCWVjaG8gImZyX0NBIENQODUwIgorKwllY2hvICJmcl9DSCBDUDg1MCIKKysJZWNobyAiZnJfRlIgQ1A4NTAiCisrCWVjaG8gImdhIENQODUwIgorKwllY2hvICJnYV9JRSBDUDg1MCIKKysJZWNobyAiZ2QgQ1A4NTAiCisrCWVjaG8gImdkX0dCIENQODUwIgorKwllY2hvICJnbCBDUDg1MCIKKysJZWNobyAiZ2xfRVMgQ1A4NTAiCisrCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworKwllY2hvICJpZF9JRCBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiaXMgQ1A4NjEiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJpdCBDUDg1MCIKKysJZWNobyAiaXRfQ0ggQ1A4NTAiCisrCWVjaG8gIml0X0lUIENQODUwIgorKwllY2hvICJsdCBDUDc3NSIKKysJZWNobyAibHRfTFQgQ1A3NzUiCisrCWVjaG8gImx2IENQNzc1IgorKwllY2hvICJsdl9MViBDUDc3NSIKKysJZWNobyAibmIgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJubCBDUDg1MCIKKysJZWNobyAibmxfQkUgQ1A4NTAiCisrCWVjaG8gIm5sX05MIENQODUwIgorKwllY2hvICJubiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibm5fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJub19OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAicHQgQ1A4NTAiCisrCWVjaG8gInB0X0JSIENQODUwIgorKwllY2hvICJwdF9QVCBDUDg1MCIKKysJZWNobyAic3YgQ1A4NTAiCisrCWVjaG8gInN2X1NFIENQODUwIgorKwkjIElTTy04ODU5LTIgbGFuZ3VhZ2VzCisrCWVjaG8gImNzIENQODUyIgorKwllY2hvICJjc19DWiBDUDg1MiIKKysJZWNobyAiaHIgQ1A4NTIiCisrCWVjaG8gImhyX0hSIENQODUyIgorKwllY2hvICJodSBDUDg1MiIKKysJZWNobyAiaHVfSFUgQ1A4NTIiCisrCWVjaG8gInBsIENQODUyIgorKwllY2hvICJwbF9QTCBDUDg1MiIKKysJZWNobyAicm8gQ1A4NTIiCisrCWVjaG8gInJvX1JPIENQODUyIgorKwllY2hvICJzayBDUDg1MiIKKysJZWNobyAic2tfU0sgQ1A4NTIiCisrCWVjaG8gInNsIENQODUyIgorKwllY2hvICJzbF9TSSBDUDg1MiIKKysJZWNobyAic3EgQ1A4NTIiCisrCWVjaG8gInNxX0FMIENQODUyIgorKwllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9DUyBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9ZVSBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCisrCWVjaG8gIm10IENQODUwIgorKwllY2hvICJtdF9NVCBDUDg1MCIKKysJIyBJU08tODg1OS01IGxhbmd1YWdlcworKwllY2hvICJiZSBDUDg2NiIKKysJZWNobyAiYmVfQkUgQ1A4NjYiCisrCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworKwllY2hvICJiZ19CRyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAibWsgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisrCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworKwllY2hvICJydSBDUDg2NiIKKysJZWNobyAicnVfUlUgQ1A4NjYiCisrCWVjaG8gInVrIENQMTEyNSIKKysJZWNobyAidWtfVUEgQ1AxMTI1IgorKwkjIElTTy04ODU5LTYgbGFuZ3VhZ2VzCisrCWVjaG8gImFyIENQODY0IgorKwllY2hvICJhcl9BRSBDUDg2NCIKKysJZWNobyAiYXJfRFogQ1A4NjQiCisrCWVjaG8gImFyX0VHIENQODY0IgorKwllY2hvICJhcl9JUSBDUDg2NCIKKysJZWNobyAiYXJfSVIgQ1A4NjQiCisrCWVjaG8gImFyX0pPIENQODY0IgorKwllY2hvICJhcl9LVyBDUDg2NCIKKysJZWNobyAiYXJfTUEgQ1A4NjQiCisrCWVjaG8gImFyX09NIENQODY0IgorKwllY2hvICJhcl9RQSBDUDg2NCIKKysJZWNobyAiYXJfU0EgQ1A4NjQiCisrCWVjaG8gImFyX1NZIENQODY0IgorKwkjIElTTy04ODU5LTcgbGFuZ3VhZ2VzCisrCWVjaG8gImVsIENQODY5IgorKwllY2hvICJlbF9HUiBDUDg2OSIKKysJIyBJU08tODg1OS04IGxhbmd1YWdlcworKwllY2hvICJoZSBDUDg2MiIKKysJZWNobyAiaGVfSUwgQ1A4NjIiCisrCSMgSVNPLTg4NTktOSBsYW5ndWFnZXMKKysJZWNobyAidHIgQ1A4NTciCisrCWVjaG8gInRyX1RSIENQODU3IgorKwkjIEphcGFuZXNlCisrCWVjaG8gImphIENQOTMyIgorKwllY2hvICJqYV9KUCBDUDkzMiIKKysJIyBDaGluZXNlCisrCWVjaG8gInpoX0NOIEdCSyIKKysJZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CisrCSMgS29yZWFuCisrCWVjaG8gImtyIENQOTQ5IiAgICAjIG5vdCBDUDkzNCA/PworKwllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKysJIyBUaGFpCisrCWVjaG8gInRoIENQODc0IgorKwllY2hvICJ0aF9USCBDUDg3NCIKKysJIyBPdGhlcgorKwllY2hvICJlbyBDUDg1MCIKKysJZWNobyAiZW9fRU8gQ1A4NTAiCisrCTs7CisrZXNhYworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RjZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RjZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU5NzQ3NDgwIC0wNDAwCitAQCAtMSw1OTMgKzEsNTYgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorLSMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKy0jZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKy0jIGVsc2UKKy0jICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCistIyAgZWxzZQorLSMgICBpZm5kZWYgYWxsb2NhCistY2hhciAqYWxsb2NhICgpOworLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpZm5kZWYgZXJybm8KKy1leHRlcm4gaW50IGVycm5vOworLSNlbmRpZgorLSNpZm5kZWYgX19zZXRfZXJybm8KKy0jIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBfR05VX1NPVVJDRQorLSMgIGRlZmluZSBfR05VX1NPVVJDRQkxCistIyBlbmRpZgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKy0jaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmZGVmIF9MSUJDCistLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCistICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorLSAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKy0jIGRlZmluZSBzdHBjcHkgX19zdHBjcHkKKy0jZWxzZQorLSMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKy1jaGFyICpnZXR3ZCAoKTsKKy0jICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorLSMgZWxzZQorLWNoYXIgKmdldGN3ZCAoKTsKKy0jIGVuZGlmCistIyBpZm5kZWYgSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqc3RwY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBBbW91bnQgdG8gaW5jcmVhc2UgYnVmZmVyIHNpemUgYnkgaW4gZWFjaCB0cnkuICAqLworLSNkZWZpbmUgUEFUSF9JTkNSIDMyCistCistLyogVGhlIGZvbGxvd2luZyBpcyBmcm9tIHBhdGhtYXguaC4gICovCistLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUgZ2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCistICAgUEFUSF9NQVggYnV0IG1pZ2h0IGNhdXNlIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyB3aGVuIHN5cy9wYXJhbS5oIGlzCistICAgbGF0ZXIgaW5jbHVkZWQgKGFzIG9uIE1PUkUvQlNEIDQuMykuICAqLworLSNpZiBkZWZpbmVkKF9QT1NJWF9WRVJTSU9OKSB8fCAoZGVmaW5lZChIQVZFX0xJTUlUU19IKSAmJiAhZGVmaW5lZChfX0dOVUNfXykpCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIF9QT1NJWF9QQVRIX01BWAorLSMgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTUKKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoX1BDX1BBVEhfTUFYKQorLSMgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorLSNlbmRpZgorLQorLS8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCistI2lmIGRlZmluZWQoSEFWRV9TWVNfUEFSQU1fSCkgJiYgIWRlZmluZWQoUEFUSF9NQVgpICYmICFkZWZpbmVkKE1BWFBBVEhMRU4pCistIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoTUFYUEFUSExFTikKKy0jIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCistI2VuZGlmCistCistI2lmbmRlZiBQQVRIX01BWAorLSMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorLSNlbmRpZgorLQorLS8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mIGBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CistICAgYGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50CistICAgICBzZXR0aW5nIG9mIGBsb2NhbCcuJycKKy0gICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIEFuZCBldmVuIHdvcnNlOiBQT1NJWAorLSAgIGRlZmluZXMgdGhpcyBub3QgYXQgYWxsLiAgU28gd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgb25seSBvbiBzZWxlY3RlZAorLSAgIHN5c3RlbSAoZS5nLiB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorLSNlbmRpZgorLQorLS8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKy0gICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdID0gIm1lc3NhZ2VzIjsKKy0KKy0vKiBWYWx1ZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGRvbWFpbiBmb3IgZ2V0dGV4dCgzKS4gICovCistY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKy0KKy0vKiBDb250YWlucyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBjYXRhbG9ncy4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBHTlVMT0NBTEVESVI7CistCistLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMgY3JlYXRlZCBieSBiaW5kdGV4dGRvbWFpbigpCistICAgY2FsbHMuICAqLworLXN0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworLQorLS8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIGNoYXIgKmZpbmRfbXNnIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorLQkJCSAgICAgICBjb25zdCBjaGFyICptc2dpZCkpOworLXN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIFBBUkFNUyAoKGludCBjYXRlZ29yeSkpOworLXN0YXRpYyBjb25zdCBjaGFyICpndWVzc19jYXRlZ29yeV92YWx1ZSBQQVJBTVMgKChpbnQgY2F0ZWdvcnksCistCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkpOworLQorLQorLS8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorLSAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCistI2lmZGVmIEhBVkVfQUxMT0NBCistLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3RoaW5nICovCistI2Vsc2UKKy1zdHJ1Y3QgYmxvY2tfbGlzdAorLXsKKy0gIHZvaWQgKmFkZHJlc3M7CistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKKy19OworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyKQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHN0cnVjdCBibG9ja19saXN0ICpuZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAorLSAgICAvKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgZnJlZSBibG9jayB3ZSBjYW5ub3QgYWRkIHRoZSBuZXcgZWxlbWVudCB0bwkgICAgICBcCistICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorLSAgICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5hZGRyZXNzID0gKGFkZHIpOwkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKy0gICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKy0gICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwKKy0gICAgICBsaXN0ID0gbGlzdC0+bmV4dDsJCQkJCQkgICAgICBcCistICAgICAgZnJlZSAob2xkKTsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIHVuZGVmIGFsbG9jYQorLSMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKKy0jZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKy0KKy0KKyAvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKyAjZWxzZQorLSMgZGVmaW5lIERDR0VUVEVYVCBkY2dldHRleHRfXworKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICAgbG9jYWxlLiAgKi8KKyBjaGFyICoKKy1EQ0dFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKy0gICAgIGludCBjYXRlZ29yeTsKKytEQ0dFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCisgeworLSNpZm5kZWYgSEFWRV9BTExPQ0EKKy0gIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKy0jZW5kaWYKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKy0gIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKy0gIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKy0gIGNoYXIgKnNpbmdsZV9sb2NhbGU7CistICBjaGFyICpyZXR2YWw7CistICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKy0KKy0gIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworLSAgaWYgKG1zZ2lkID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorLSAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCistICAgICBkZWZpbnRpb24gbGVmdCB0aGlzIHVuZGVmaW5lZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICBkb21haW5uYW1lID0gX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CistCistICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAqLworLSAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKy0gICAgeworLSAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKy0gICAgICBpZiAoY29tcGFyZSA9PSAwKQorLQkvKiBXZSBmb3VuZCBpdCEgICovCistCWJyZWFrOworLSAgICAgIGlmIChjb21wYXJlIDwgMCkKKy0JeworLQkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCistCSAgYmluZGluZyA9IE5VTEw7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKKy0gICAgZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistICBlbHNlIGlmIChiaW5kaW5nLT5kaXJuYW1lWzBdID09ICcvJykKKy0gICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUgbm93LiAgKi8KKy0gICAgICBzaXplX3QgZGlybmFtZV9sZW4gPSBzdHJsZW4gKGJpbmRpbmctPmRpcm5hbWUpICsgMTsKKy0gICAgICBzaXplX3QgcGF0aF9tYXg7CistICAgICAgY2hhciAqcmV0OworLQorLSAgICAgIHBhdGhfbWF4ID0gKHVuc2lnbmVkKSBQQVRIX01BWDsKKy0gICAgICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKy0KKy0gICAgICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0gICAgICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQorLSAgICAgIF9fc2V0X2Vycm5vICgwKTsKKy0gICAgICB3aGlsZSAoKHJldCA9IGdldGN3ZCAoZGlybmFtZSwgcGF0aF9tYXgpKSA9PSBOVUxMICYmIGVycm5vID09IEVSQU5HRSkKKy0JeworLQkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKy0JICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0JICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQkgIF9fc2V0X2Vycm5vICgwKTsKKy0JfQorLQorLSAgICAgIGlmIChyZXQgPT0gTlVMTCkKKy0JeworLQkgIC8qIFdlIGNhbm5vdCBnZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBEb24ndCBzaWduYWwgYW4KKy0JICAgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworLQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgIHJldHVybiAoY2hhciAqKSBtc2dpZDsKKy0JfQorLQorLSAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRpcm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKKy0gICAgfQorLQorLSAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKy0gIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKy0gIGNhdGVnb3J5dmFsdWUgPSBndWVzc19jYXRlZ29yeV92YWx1ZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CistCistICB4ZG9tYWlubmFtZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeW5hbWUpCistCQkJCSArIHN0cmxlbiAoZG9tYWlubmFtZSkgKyA1KTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworLQorLSAgc3RwY3B5IChzdHBjcHkgKHN0cGNweSAoc3RwY3B5ICh4ZG9tYWlubmFtZSwgY2F0ZWdvcnluYW1lKSwgIi8iKSwKKy0JCSAgZG9tYWlubmFtZSksCistCSAgIi5tbyIpOworLQorLSAgLyogQ3JlYXRpbmcgd29ya2luZyBhcmVhLiAgKi8KKy0gIHNpbmdsZV9sb2NhbGUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnl2YWx1ZSkgKyAxKTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2luZ2xlX2xvY2FsZSk7CistCistCistICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlzIGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKKy0gICAgIGdvdCBhbiBvcmRlcmVkIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGNvbnNpZGVyIGZvciB0aCB0cmFuc2xhdGlvbi4gICovCistICB3aGlsZSAoMSkKKy0gICAgeworLSAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKy0gICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorLQkrK2NhdGVnb3J5dmFsdWU7CistICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKy0JeworLQkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorLQkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKy0JICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorLQkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCistCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKy0JICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKy0JICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorLQkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworLQkgICpjcCA9ICdcMCc7CistCX0KKy0KKy0gICAgICAvKiBJZiB0aGUgY3VycmVudCBsb2NhbGUgdmFsdWUgaXMgQyAob3IgUE9TSVgpIHdlIGRvbid0IGxvYWQgYQorLQkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCistICAgICAgaWYgKHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIkMiKSA9PSAwCistCSAgfHwgc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorLQl7CistCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CistCSAgcmV0dXJuIChjaGFyICopIG1zZ2lkOworLQl9CistCistCistICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorLQkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworLSAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUpOworLQorLSAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKy0JeworLQkgIHJldHZhbCA9IGZpbmRfbXNnIChkb21haW4sIG1zZ2lkKTsKKy0KKy0JICBpZiAocmV0dmFsID09IE5VTEwpCistCSAgICB7CistCSAgICAgIGludCBjbnQ7CistCistCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKy0JCXsKKy0JCSAgcmV0dmFsID0gZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIG1zZ2lkKTsKKy0KKy0JCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkJICAgIGJyZWFrOworLQkJfQorLQkgICAgfQorLQorLQkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgICAgICByZXR1cm4gcmV0dmFsOworLQkgICAgfQorLQl9CistICAgIH0KKy0gIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiBEQ0lHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTlVMTCwgMCwgMCwgY2F0ZWdvcnkpOworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKyAvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKytJTlRERUYoX19kY2dldHRleHQpCisgd2Vha19hbGlhcyAoX19kY2dldHRleHQsIGRjZ2V0dGV4dCk7CisgI2VuZGlmCistCistCistc3RhdGljIGNoYXIgKgorLWZpbmRfbXNnIChkb21haW5fZmlsZSwgbXNnaWQpCistICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLXsKKy0gIHNpemVfdCB0b3AsIGFjdCwgYm90dG9tOworLSAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlKTsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKy0KKy0gIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCistICBpZiAoZG9tYWluLT5oYXNoX3NpemUgPiAyICYmIGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCistICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CistICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKy0gICAgICBubHNfdWludDMyIG5zdHIgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKy0KKy0gICAgICBpZiAobnN0ciA9PSAwKQorLQkvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKy0JcmV0dXJuIE5VTEw7CistCistICAgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICYmIHN0cmNtcCAobXNnaWQsCistCQkgICAgIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkgICAgICAgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ub2Zmc2V0KSkgPT0gMCkKKy0JcmV0dXJuIChjaGFyICopIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJICBkb21haW4tPnRyYW5zX3RhYltuc3RyIC0gMV0ub2Zmc2V0KTsKKy0KKy0gICAgICB3aGlsZSAoMSkKKy0JeworLQkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorLQkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKy0JICBlbHNlCistCSAgICBpZHggKz0gaW5jcjsKKy0KKy0JICBuc3RyID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CistCSAgaWYgKG5zdHIgPT0gMCkKKy0JICAgIC8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworLQkgICAgcmV0dXJuIE5VTEw7CistCistCSAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICAgICAmJiBzdHJjbXAgKG1zZ2lkLAorLQkJCSBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJCSAgIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLm9mZnNldCkpCistCSAgICAgICAgID09IDApCistCSAgICByZXR1cm4gKGNoYXIgKikgZG9tYWluLT5kYXRhCistCSAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW25zdHIgLSAxXS5vZmZzZXQpOworLQl9CistICAgICAgLyogTk9UUkVBQ0hFRCAqLworLSAgICB9CistCistICAvKiBOb3cgd2UgdHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZAorLSAgICAgYXJyYXkgb2YgbWVzc2FnZXMuICAqLworLSAgYm90dG9tID0gMDsKKy0gIHRvcCA9IGRvbWFpbi0+bnN0cmluZ3M7CistICB3aGlsZSAoYm90dG9tIDwgdG9wKQorLSAgICB7CistICAgICAgaW50IGNtcF92YWw7CistCistICAgICAgYWN0ID0gKGJvdHRvbSArIHRvcCkgLyAyOworLSAgICAgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCBkb21haW4tPmRhdGEKKy0JCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgIGRvbWFpbi0+b3JpZ190YWJbYWN0XS5vZmZzZXQpKTsKKy0gICAgICBpZiAoY21wX3ZhbCA8IDApCistCXRvcCA9IGFjdDsKKy0gICAgICBlbHNlIGlmIChjbXBfdmFsID4gMCkKKy0JYm90dG9tID0gYWN0ICsgMTsKKy0gICAgICBlbHNlCistCWJyZWFrOworLSAgICB9CistCistICAvKiBJZiBhbiB0cmFuc2xhdGlvbiBpcyBmb3VuZCByZXR1cm4gdGhpcy4gICovCistICByZXR1cm4gYm90dG9tID49IHRvcCA/IE5VTEwgOiAoY2hhciAqKSBkb21haW4tPmRhdGEKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCSAgICAgZG9tYWluLT50cmFuc190YWJbYWN0XS5vZmZzZXQpOworLX0KKy0KKy0KKy0vKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxvY2FsZSBDQVRFR09SWS4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KQorLSAgICAgaW50IGNhdGVnb3J5OworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIHN3aXRjaCAoY2F0ZWdvcnkpCistICB7CistI2lmZGVmIExDX0NPTExBVEUKKy0gIGNhc2UgTENfQ09MTEFURToKKy0gICAgcmV0dmFsID0gIkxDX0NPTExBVEUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQ1RZUEUKKy0gIGNhc2UgTENfQ1RZUEU6CistICAgIHJldHZhbCA9ICJMQ19DVFlQRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NT05FVEFSWQorLSAgY2FzZSBMQ19NT05FVEFSWToKKy0gICAgcmV0dmFsID0gIkxDX01PTkVUQVJZIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX05VTUVSSUMKKy0gIGNhc2UgTENfTlVNRVJJQzoKKy0gICAgcmV0dmFsID0gIkxDX05VTUVSSUMiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfVElNRQorLSAgY2FzZSBMQ19USU1FOgorLSAgICByZXR2YWwgPSAiTENfVElNRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NRVNTQUdFUworLSAgY2FzZSBMQ19NRVNTQUdFUzoKKy0gICAgcmV0dmFsID0gIkxDX01FU1NBR0VTIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX1JFU1BPTlNFCistICBjYXNlIExDX1JFU1BPTlNFOgorLSAgICByZXR2YWwgPSAiTENfUkVTUE9OU0UiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQUxMCistICBjYXNlIExDX0FMTDoKKy0gICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQgaXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKKy0gICAgICAgdmFsdWUuICAqLworLSAgICByZXR2YWwgPSAiTENfQUxMIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistICBkZWZhdWx0OgorLSAgICAvKiBJZiB5b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAqLworLSAgICByZXR2YWwgPSAiTENfWFhYIjsKKy0gIH0KKy0KKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLS8qIEd1ZXNzIHZhbHVlIG9mIGN1cnJlbnQgbG9jYWxlIGZyb20gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKQorLSAgICAgaW50IGNhdGVnb3J5OworLSAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CistICAgICB2YXJpYWJsZS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxBTkdVQUdFIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBgTEFOR1VBR0UnIGlzIG5vdCBzZXQuICBTbyB3ZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVgKKy0gICAgIG1ldGhvZHMgb2YgbG9va2luZyB0byBgTENfQUxMJywgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lCistICAgICBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCistI2lmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorLSAgcmV0dXJuIHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpOworLSNlbHNlCistICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIE5leHQgY29tZXMgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgY2F0ZWdvcnkuICAqLworLSAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMgaW1wbGVtZW50YXRpb24KKy0gICAgIGRlZmluZWQuICAqLworLSAgcmV0dXJuICJDIjsKKy0jZW5kaWYKKy19CistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY2lnZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNpZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzY5NzQ1OTYwIC0wNDAwCitAQCAtMCwwICsxLDEyMTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgZGNpZ2V0dGV4dCBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaWZkZWYgX19HTlVDX18KKysjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKysjZWxzZQorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmbmRlZiBlcnJubworK2V4dGVybiBpbnQgZXJybm87CisrI2VuZGlmCisrI2lmbmRlZiBfX3NldF9lcnJubworKyMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJybm8gPSAodmFsKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZmRlZiBfTElCQworKyAgLyogR3Vlc3Mgd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuCisrICAgICBTZXQgdG8gMSBvbmx5IGlmIHlvdSBrbm93IGZvciBzdXJlLiAgSW4gY2FzZSBvZiBkb3VidCwgc2V0IHRvIDAuICAqLworKyMgaWYgZGVmaW5lZCBfX2FscGhhX18gfHwgZGVmaW5lZCBfX2FybV9fIHx8IGRlZmluZWQgX19pMzg2X18gXAorKyAgICAgfHwgZGVmaW5lZCBfX202OGtfXyB8fCBkZWZpbmVkIF9fczM5MF9fCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAxCisrIyBlbHNlCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAwCisrIyBlbmRpZgorKyNlbmRpZgorKyNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCisrIyBpbmNsdWRlIDxzaWduYWwuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysKKysvKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNlbHNlCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19yZGxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3VubG9jayhOQU1FKQorKyNlbmRpZgorKworKy8qIEFsaWdubWVudCBvZiB0eXBlcy4gICovCisrI2lmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPj0gMgorKyMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZUEUpCisrI2Vsc2UKKysjIGRlZmluZSBhbGlnbm9mKFRZUEUpIFwKKysgICAgKChpbnQpICYoKHN0cnVjdCB7IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQorKyNlbmRpZgorKworKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKysgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworKyNpZiAhZGVmaW5lZCBfTElCQworKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKysjIGRlZmluZSBfbmxfZG9tYWluX2JpbmRpbmdzIGxpYmludGxfbmxfZG9tYWluX2JpbmRpbmdzCisrI2VuZGlmCisrCisrLyogU29tZSBjb21waWxlcnMsIGxpa2UgU3VuT1M0IGNjLCBkb24ndCBoYXZlIG9mZnNldG9mIGluIDxzdGRkZWYuaD4uICAqLworKyNpZm5kZWYgb2Zmc2V0b2YKKysjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrI2lmZGVmIF9MSUJDCisrLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisrICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorKyAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKysjIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKysjIGlmbmRlZiBzdHBjcHkKKysjICBkZWZpbmUgc3RwY3B5IF9fc3RwY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIHRmaW5kIF9fdGZpbmQKKysjZWxzZQorKyMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKytjaGFyICpnZXR3ZCAoKTsKKysjICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorKyMgZWxzZQorKyMgIGlmIFZNUworKyMgICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSAoZ2V0Y3dkKSAoYnVmLCBtYXgsIDApCisrIyAgZWxzZQorK2NoYXIgKmdldGN3ZCAoKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX1NUUENQWQorK3N0YXRpYyBjaGFyICpzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfTUVNUENQWQorK3N0YXRpYyB2b2lkICptZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKysjZGVmaW5lIFBBVEhfSU5DUiAzMgorKworKy8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworKy8qIE5vbi1QT1NJWCBCU0Qgc3lzdGVtcyBtaWdodCBoYXZlIGdjYydzIGxpbWl0cy5oLCB3aGljaCBkb2Vzbid0IGRlZmluZQorKyAgIFBBVEhfTUFYIGJ1dCBtaWdodCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcworKyAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKysjaWYgZGVmaW5lZCBfUE9TSVhfVkVSU0lPTiB8fCAoZGVmaW5lZCBIQVZFX0xJTUlUU19IICYmICFkZWZpbmVkIF9fR05VQ19fKQorKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKKysjIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYCisrIyBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCisrI2VuZGlmCisrCisrLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisrI2VuZGlmCisrCisrI2lmbmRlZiBQQVRIX01BWAorKyMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorKyNlbmRpZgorKworKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisrICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisrICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorKyAgICAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwgfHwgc3RyY2hyIChQLCAnXFwnKSAhPSBOVUxMIHx8IEhBU19ERVZJQ0UgKFApKQorKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKysjZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKKysgICBhcmUgc3RvcmVkLiAgKi8KKytzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdAorK3sKKysgIC8qIERvbWFpbiBpbiB3aGljaCB0byBzZWFyY2guICAqLworKyAgY2hhciAqZG9tYWlubmFtZTsKKysKKysgIC8qIFRoZSBjYXRlZ29yeS4gICovCisrICBpbnQgY2F0ZWdvcnk7CisrCisrICAvKiBTdGF0ZSBvZiB0aGUgY2F0YWxvZyBjb3VudGVyIGF0IHRoZSBwb2ludCB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCisrICBpbnQgY291bnRlcjsKKysKKysgIC8qIENhdGFsb2cgd2hlcmUgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLworKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworKworKyAgLyogQW5kIGZpbmFsbHkgdGhlIHRyYW5zbGF0aW9uLiAgKi8KKysgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uOworKyAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsKKysKKysgIC8qIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBpbiBxdWVzdGlvbi4gICovCisrICBjaGFyIG1zZ2lkW1pFUk9dOworK307CisrCisrLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xhdGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKKysgICBvbmx5IGlmIHRoZSBzeXN0ZW0gcHJvdmlkZXMgdGhlIGB0c2VhcmNoJyBmdW5jdGlvbiBmYW1pbHkuICAqLworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzZWFyY2guaD4KKysKKytzdGF0aWMgdm9pZCAqcm9vdDsKKysKKysjIGlmZGVmIF9MSUJDCisrIyAgZGVmaW5lIHRzZWFyY2ggX190c2VhcmNoCisrIyBlbmRpZgorKworKy8qIEZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrc3RhdGljIGludAorK3RyYW5zY21wIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisreworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMxOworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMyOworKyAgaW50IHJlc3VsdDsKKysKKysgIHMxID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAxOworKyAgczIgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDI7CisrCisrICByZXN1bHQgPSBzdHJjbXAgKHMxLT5tc2dpZCwgczItPm1zZ2lkKTsKKysgIGlmIChyZXN1bHQgPT0gMCkKKysgICAgeworKyAgICAgIHJlc3VsdCA9IHN0cmNtcCAoczEtPmRvbWFpbm5hbWUsIHMyLT5kb21haW5uYW1lKTsKKysgICAgICBpZiAocmVzdWx0ID09IDApCisrCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVnb3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAorKwkgICBvcGVyYXRpb24pIHNpbmNlIGl0IGlzIGhvcGVmdWxseSBhbHdheXMgdGhlIHNhbWUgKG5hbWVseQorKwkgICBMQ19NRVNTQUdFUykuICAqLworKwlyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CisrICAgIH0KKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKworKyNpZm5kZWYgSU5UVkFSREVGCisrIyBkZWZpbmUgSU5UVkFSREVGKG5hbWUpCisrI2VuZGlmCisrI2lmbmRlZiBJTlRVU0UKKysjIGRlZmluZSBJTlRVU0UobmFtZSkgbmFtZQorKyNlbmRpZgorKworKy8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKysgICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW4gPSAibWVzc2FnZXMiOworKworKy8qIFZhbHVlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KKytjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuCisrICAgICA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworKworKy8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KKysjaWYgZGVmaW5lZCBfX0VNWF9fCisrZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworKyNlbHNlCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBMT0NBTEVESVI7CisrSU5UVkFSREVGIChfbmxfZGVmYXVsdF9kaXJuYW1lKQorKyNlbmRpZgorKworKy8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorKyAgIGNhbGxzLiAgKi8KKytzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBjaGFyICpwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sCisrCQkJICAgIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLCBzaXplX3QgdHJhbnNsYXRpb25fbGVuKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksCisrCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorKyMgZGVmaW5lIGNhdGVnb3J5X3RvX25hbWUoY2F0ZWdvcnkpCV9ubF9jYXRlZ29yeV9uYW1lc1tjYXRlZ29yeV0KKysjZWxzZQorK3N0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIChpbnQgY2F0ZWdvcnkpIGludGVybmFsX2Z1bmN0aW9uOworKyNlbmRpZgorKworKworKy8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorKyAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisrI2lmZGVmIEhBVkVfQUxMT0NBCisrLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCisrIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCisrIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyNlbHNlCisrc3RydWN0IGJsb2NrX2xpc3QKKyt7CisrICB2b2lkICphZGRyZXNzOworKyAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CisrfTsKKysjIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKysgICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorKyAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCisrICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorKyAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysjIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCisrICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCisrICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZC0+YWRkcmVzcyk7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKysgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrIyB1bmRlZiBhbGxvY2EKKysjIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBMaXN0IG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRyYW5zbGF0aW9ucy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAorK3sKKysgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpuZXh0OworKyAgY2hhciBkYXRhW1pFUk9dOworK30gdHJhbnNtZW1fYmxvY2tfdDsKKytzdGF0aWMgc3RydWN0IHRyYW5zbWVtX2xpc3QgKnRyYW5zbWVtX2xpc3Q7CisrI2Vsc2UKKyt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHJhbnNtZW1fYmxvY2tfdDsKKysjZW5kaWYKKysKKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrI2lmZGVmIF9MSUJDCisrX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKCwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysjZW5kaWYKKysKKysvKiBDaGVja2luZyB3aGV0aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRlcworKyAgIGVhc2llciBtZXRob2RzIHRoZXJlZm9yZSB3ZSBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2VjdXJlCisrIyBkZWZpbmUgREVURVJNSU5FX1NFQ1VSRQorKyNlbHNlCisrIyBpZm5kZWYgSEFWRV9HRVRVSUQKKysjICBkZWZpbmUgZ2V0dWlkKCkgMAorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX0dFVEdJRAorKyMgIGRlZmluZSBnZXRnaWQoKSAwCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfR0VURVVJRAorKyMgIGRlZmluZSBnZXRldWlkKCkgZ2V0dWlkKCkKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9HRVRFR0lECisrIyAgZGVmaW5lIGdldGVnaWQoKSBnZXRnaWQoKQorKyMgZW5kaWYKKytzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CisrIyBkZWZpbmUgRU5BQkxFX1NFQ1VSRSAoZW5hYmxlX3NlY3VyZSA9PSAxKQorKyMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUgXAorKyAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCisrICAgIHsJCQkJCQkJCQkgICAgICBcCisrICAgICAgaWYgKGdldHVpZCAoKSAhPSBnZXRldWlkICgpIHx8IGdldGdpZCAoKSAhPSBnZXRlZ2lkICgpKQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAgICBcCisrICAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gLTE7CQkJCQkJICAgICAgXAorKyAgICB9CisrI2VuZGlmCisrCisrLyogR2V0IHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSB0aGUgcGx1cmFsIGV4cHJlc3Npb24uICAqLworKyNpbmNsdWRlICJldmFsLXBsdXJhbC5oIgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIENBVEVHT1JZIGxvY2FsZSBhbmQsIGlmIFBMVVJBTCBpcyBub256ZXJvLCBzZWFyY2ggb3ZlciBzdHJpbmcKKysgICBkZXBlbmRpbmcgb24gdGhlIHBsdXJhbCBmb3JtIGRldGVybWluZWQgYnkgTi4gICovCisrY2hhciAqCisrRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisrCSAgICBpbnQgcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBuLCBpbnQgY2F0ZWdvcnkpCisreworKyNpZm5kZWYgSEFWRV9BTExPQ0EKKysgIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKysjZW5kaWYKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKysgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKysgIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKysgIGNoYXIgKnNpbmdsZV9sb2NhbGU7CisrICBjaGFyICpyZXR2YWw7CisrICBzaXplX3QgcmV0bGVuOworKyAgaW50IHNhdmVkX2Vycm5vOworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqc2VhcmNoOworKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKipmb3VuZHAgPSBOVUxMOworKyAgc2l6ZV90IG1zZ2lkX2xlbjsKKysjZW5kaWYKKysgIHNpemVfdCBkb21haW5uYW1lX2xlbjsKKysKKysgIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworKyAgaWYgKG1zZ2lkMSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysjaWZkZWYgX0xJQkMKKysgIGlmIChjYXRlZ29yeSA8IDAgfHwgY2F0ZWdvcnkgPj0gX19MQ19MQVNUIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKKysgICAgLyogQm9ndXMuICAqLworKyAgICByZXR1cm4gKHBsdXJhbCA9PSAwCisrCSAgICA/IChjaGFyICopIG1zZ2lkMQorKwkgICAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CisrI2VuZGlmCisrCisrICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorKyAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCisrICAgICBkZWZpbml0aW9uIGxlZnQgdGhpcyB1bmRlZmluZWQuICAqLworKyAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKysgICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKworKyAgLyogT1MvMiBzcGVjaWZpYzogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpYmludGwgdmVyc2lvbnMgICovCisrI2lmZGVmIExDX01FU1NBR0VTX0NPTVBBVAorKyAgaWYgKGNhdGVnb3J5ID09IExDX01FU1NBR0VTX0NPTVBBVCkKKysgICAgY2F0ZWdvcnkgPSBMQ19NRVNTQUdFUzsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKyAgbXNnaWRfbGVuID0gc3RybGVuIChtc2dpZDEpICsgMTsKKysKKysgIC8qIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBhbW9uZyB0aG9zZSB3aGljaCB3ZSBmb3VuZCBhdAorKyAgICAgc29tZSB0aW1lLiAgKi8KKysgIHNlYXJjaCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkgICBhbGxvY2EgKG9mZnNldG9mIChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCwgbXNnaWQpICsgbXNnaWRfbGVuKTsKKysgIG1lbWNweSAoc2VhcmNoLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworKyAgc2VhcmNoLT5kb21haW5uYW1lID0gKGNoYXIgKikgZG9tYWlubmFtZTsKKysgIHNlYXJjaC0+Y2F0ZWdvcnkgPSBjYXRlZ29yeTsKKysKKysgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikgdGZpbmQgKHNlYXJjaCwgJnJvb3QsIHRyYW5zY21wKTsKKysgIGZyZWVhIChzZWFyY2gpOworKyAgaWYgKGZvdW5kcCAhPSBOVUxMICYmICgqZm91bmRwKS0+Y291bnRlciA9PSBfbmxfbXNnX2NhdF9jbnRyKQorKyAgICB7CisrICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworKyAgICAgIGlmIChwbHVyYWwpCisrCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9uLAorKwkJCQkoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCk7CisrICAgICAgZWxzZQorKwlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworKworKyAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKyNlbmRpZgorKworKyAgLyogUHJlc2VydmUgdGhlIGBlcnJubycgdmFsdWUuICAqLworKyAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysKKysgIC8qIFNlZSB3aGV0aGVyIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSBvciBub3QuICAqLworKyAgREVURVJNSU5FX1NFQ1VSRTsKKysKKysgIC8qIEZpcnN0IGZpbmQgbWF0Y2hpbmcgYmluZGluZy4gICovCisrICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorKyAgICB7CisrICAgICAgaW50IGNvbXBhcmUgPSBzdHJjbXAgKGRvbWFpbm5hbWUsIGJpbmRpbmctPmRvbWFpbm5hbWUpOworKyAgICAgIGlmIChjb21wYXJlID09IDApCisrCS8qIFdlIGZvdW5kIGl0ISAgKi8KKysJYnJlYWs7CisrICAgICAgaWYgKGNvbXBhcmUgPCAwKQorKwl7CisrCSAgLyogSXQgaXMgbm90IGluIHRoZSBsaXN0LiAgKi8KKysJICBiaW5kaW5nID0gTlVMTDsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrICBpZiAoYmluZGluZyA9PSBOVUxMKQorKyAgICBkaXJuYW1lID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKyAgZWxzZSBpZiAoSVNfQUJTT0xVVEVfUEFUSCAoYmluZGluZy0+ZGlybmFtZSkpCisrICAgIGRpcm5hbWUgPSBiaW5kaW5nLT5kaXJuYW1lOworKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGguICBNYWtlIGl0IGFic29sdXRlIG5vdy4gICovCisrICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJuYW1lKSArIDE7CisrICAgICAgc2l6ZV90IHBhdGhfbWF4OworKyAgICAgIGNoYXIgKnJldDsKKysKKysgICAgICBwYXRoX21heCA9ICh1bnNpZ25lZCBpbnQpIFBBVEhfTUFYOworKyAgICAgIHBhdGhfbWF4ICs9IDI7CQkvKiBUaGUgZ2V0Y3dkIGRvY3Mgc2F5IHRvIGRvIHRoaXMuICAqLworKworKyAgICAgIGZvciAoOzspCisrCXsKKysJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKysJICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworKworKwkgIF9fc2V0X2Vycm5vICgwKTsKKysJICByZXQgPSBnZXRjd2QgKGRpcm5hbWUsIHBhdGhfbWF4KTsKKysJICBpZiAocmV0ICE9IE5VTEwgfHwgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgYnJlYWs7CisrCisrCSAgcGF0aF9tYXggKz0gcGF0aF9tYXggLyAyOworKwkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKysJfQorKworKyAgICAgIGlmIChyZXQgPT0gTlVMTCkKKysJLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERvbid0IHNpZ25hbCBhbgorKwkgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworKwlnb3RvIHJldHVybl91bnRyYW5zbGF0ZWQ7CisrCisrICAgICAgc3RwY3B5IChzdHBjcHkgKHN0cmNociAoZGlybmFtZSwgJ1wwJyksICIvIiksIGJpbmRpbmctPmRpcm5hbWUpOworKyAgICB9CisrCisrICAvKiBOb3cgZGV0ZXJtaW5lIHRoZSBzeW1ib2xpYyBuYW1lIG9mIENBVEVHT1JZIGFuZCBpdHMgdmFsdWUuICAqLworKyAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworKyAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysKKysgIGRvbWFpbm5hbWVfbGVuID0gc3RybGVuIChkb21haW5uYW1lKTsKKysgIHhkb21haW5uYW1lID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKKysJCQkJICsgZG9tYWlubmFtZV9sZW4gKyA1KTsKKysgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworKworKyAgc3RwY3B5IChtZW1wY3B5IChzdHBjcHkgKHN0cGNweSAoeGRvbWFpbm5hbWUsIGNhdGVnb3J5bmFtZSksICIvIiksCisrCQkgIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuKSwKKysJICAiLm1vIik7CisrCisrICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworKyAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOworKyAgQUREX0JMT0NLIChibG9ja19saXN0LCBzaW5nbGVfbG9jYWxlKTsKKysKKysKKysgIC8qIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gIFRoaXMgaXMgYSBsb29wIGJlY2F1c2Ugd2UgcGVyaGFwcworKyAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoZSB0cmFuc2xhdGlvbi4gICovCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKysgICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorKwkrK2NhdGVnb3J5dmFsdWU7CisrICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorKwkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKysJICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorKwkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCisrCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKysJICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKysJICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorKwkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworKwkgICpjcCA9ICdcMCc7CisrCisrCSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNzaW5nIGZpbGVzCisrCSAgICAgb3V0c2lkZSB0aGUgZGVkaWNhdGVkIGRpcmVjdG9yaWVzLiAgKi8KKysJICBpZiAoRU5BQkxFX1NFQ1VSRSAmJiBJU19QQVRIX1dJVEhfRElSIChzaW5nbGVfbG9jYWxlKSkKKysJICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KKysJICAgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbG9jYWxlIHZhbHVlIGlzIEMgKG9yIFBPU0lYKSB3ZSBkb24ndCBsb2FkIGEKKysJIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworKyAgICAgIGlmIChzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJDIikgPT0gMAorKwkgIHx8IHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIlBPU0lYIikgPT0gMCkKKysJYnJlYWs7CisrCisrICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorKwkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworKyAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOworKworKyAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKysJeworKwkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLCBiaW5kaW5nLCBtc2dpZDEsICZyZXRsZW4pOworKworKwkgIGlmIChyZXR2YWwgPT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgaW50IGNudDsKKysKKysJICAgICAgZm9yIChjbnQgPSAwOyBkb21haW4tPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorKwkJeworKwkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIGJpbmRpbmcsCisrCQkJCQkgbXNnaWQxLCAmcmV0bGVuKTsKKysKKysJCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIGRvbWFpbiA9IGRvbWFpbi0+c3VjY2Vzc29yW2NudF07CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICAvKiBGb3VuZCB0aGUgdHJhbnNsYXRpb24gb2YgTVNHSUQxIGluIGRvbWFpbiBET01BSU46CisrCQkgc3RhcnRpbmcgYXQgUkVUVkFMLCBSRVRMRU4gYnl0ZXMuICAqLworKwkgICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMKQorKwkJeworKwkJICAvKiBDcmVhdGUgYSBuZXcgZW50cnkgYW5kIGFkZCBpdCB0byB0aGUgc2VhcmNoIHRyZWUuICAqLworKwkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3cDsKKysKKysJCSAgbmV3cCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkJICAgIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKKysJCQkgICAgKyBtc2dpZF9sZW4gKyBkb21haW5uYW1lX2xlbiArIDEpOworKwkJICBpZiAobmV3cCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIG5ld3AtPmRvbWFpbm5hbWUgPQorKwkJCW1lbXBjcHkgKG5ld3AtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CisrCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CisrCQkgICAgICBuZXdwLT5jYXRlZ29yeSA9IGNhdGVnb3J5OworKwkJICAgICAgbmV3cC0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CisrCQkgICAgICBuZXdwLT5kb21haW4gPSBkb21haW47CisrCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKysKKysJCSAgICAgIC8qIEluc2VydCB0aGUgZW50cnkgaW4gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKysJCSAgICAgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikKKysJCQl0c2VhcmNoIChuZXdwLCAmcm9vdCwgdHJhbnNjbXApOworKwkJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMCisrCQkJICB8fCBfX2J1aWx0aW5fZXhwZWN0ICgqZm91bmRwICE9IG5ld3AsIDApKQorKwkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAgKi8KKysJCQlmcmVlIChuZXdwKTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogV2UgY2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLworKwkJICAoKmZvdW5kcCktPmNvdW50ZXIgPSBfbmxfbXNnX2NhdF9jbnRyOworKwkJICAoKmZvdW5kcCktPmRvbWFpbiA9IGRvbWFpbjsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGggPSByZXRsZW47CisrCQl9CisrI2VuZGlmCisrCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisrCisrCSAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKysJICAgICAgaWYgKHBsdXJhbCkKKysJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRvbWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOworKworKwkgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKwkgICAgICByZXR1cm4gcmV0dmFsOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgcmV0dXJuX3VudHJhbnNsYXRlZDoKKysgIC8qIFJldHVybiB0aGUgdW50cmFuc2xhdGVkIE1TR0lELiAgKi8KKysgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrI2lmbmRlZiBfTElCQworKyAgaWYgKCFFTkFCTEVfU0VDVVJFKQorKyAgICB7CisrICAgICAgZXh0ZXJuIHZvaWQgX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLAorKwkJCQkJY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorKwkJCQkJaW50IHBsdXJhbCk7CisrICAgICAgY29uc3QgY2hhciAqbG9nZmlsZW5hbWUgPSBnZXRlbnYgKCJHRVRURVhUX0xPR19VTlRSQU5TTEFURUQiKTsKKysKKysgICAgICBpZiAobG9nZmlsZW5hbWUgIT0gTlVMTCAmJiBsb2dmaWxlbmFtZVswXSAhPSAnXDAnKQorKwlfbmxfbG9nX3VudHJhbnNsYXRlZCAobG9nZmlsZW5hbWUsIGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBwbHVyYWwpOworKyAgICB9CisrI2VuZGlmCisrICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworKyAgcmV0dXJuIChwbHVyYWwgPT0gMAorKwkgID8gKGNoYXIgKikgbXNnaWQxCisrCSAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dpZDEgOiAoY2hhciAqKSBtc2dpZDIpOworK30KKysKKysKKytjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9maW5kX21zZyAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJICAgICAgc2l6ZV90ICpsZW5ndGhwKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgc2l6ZV90IGFjdDsKKysgIGNoYXIgKnJlc3VsdDsKKysgIHNpemVfdCByZXN1bHRsZW47CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0gMCkKKysgICAgX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZyk7CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CisrCisrICBuc3RyaW5ncyA9IGRvbWFpbi0+bnN0cmluZ3M7CisrCisrICAvKiBMb2NhdGUgdGhlIE1TR0lEIGFuZCBpdHMgdHJhbnNsYXRpb24uICAqLworKyAgaWYgKGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CisrICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysgICAgICB3aGlsZSAoMSkKKysJeworKwkgIG5sc191aW50MzIgbnN0ciA9CisrCSAgICBXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKysKKysJICBpZiAobnN0ciA9PSAwKQorKwkgICAgLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gICovCisrCSAgICByZXR1cm4gTlVMTDsKKysKKysJICBuc3RyLS07CisrCisrCSAgLyogQ29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci4KKysJICAgICBXZSBjb21wYXJlIHRoZSBsZW5ndGhzIHdpdGggPj0sIG5vdCA9PSwgYmVjYXVzZSBwbHVyYWwgZW50cmllcworKwkgICAgIGFyZSByZXByZXNlbnRlZCBieSBzdHJpbmdzIHdpdGggYW4gZW1iZWRkZWQgTlVMLiAgKi8KKysJICBpZiAobnN0ciA8IG5zdHJpbmdzCisrCSAgICAgID8gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ubGVuZ3RoKSA+PSBsZW4KKysJCSYmIChzdHJjbXAgKG1zZ2lkLAorKwkJCSAgICBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJCSAgICAgIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ub2Zmc2V0KSkKKysJCSAgICA9PSAwKQorKwkgICAgICA6IGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ubGVuZ3RoID4gbGVuCisrCQkmJiAoc3RyY21wIChtc2dpZCwKKysJCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWJbbnN0ciAtIG5zdHJpbmdzXS5wb2ludGVyKQorKwkJICAgID09IDApKQorKwkgICAgeworKwkgICAgICBhY3QgPSBuc3RyOworKwkgICAgICBnb3RvIGZvdW5kOworKwkgICAgfQorKworKwkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorKwkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJICBlbHNlCisrCSAgICBpZHggKz0gaW5jcjsKKysJfQorKyAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgorKwkgbWVzc2FnZXMuICAqLworKyAgICAgIHNpemVfdCB0b3AsIGJvdHRvbTsKKysKKysgICAgICBib3R0b20gPSAwOworKyAgICAgIHRvcCA9IG5zdHJpbmdzOworKyAgICAgIHdoaWxlIChib3R0b20gPCB0b3ApCisrCXsKKysJICBpbnQgY21wX3ZhbDsKKysKKysJICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CisrCSAgY21wX3ZhbCA9IHN0cmNtcCAobXNnaWQsIChkb21haW4tPmRhdGEKKysJCQkJICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCQkgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpKTsKKysJICBpZiAoY21wX3ZhbCA8IDApCisrCSAgICB0b3AgPSBhY3Q7CisrCSAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCisrCSAgICBib3R0b20gPSBhY3QgKyAxOworKwkgIGVsc2UKKysJICAgIGdvdG8gZm91bmQ7CisrCX0KKysgICAgICAvKiBObyB0cmFuc2xhdGlvbiB3YXMgZm91bmQuICAqLworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrIGZvdW5kOgorKyAgLyogVGhlIHRyYW5zbGF0aW9uIHdhcyBmb3VuZCBhdCBpbmRleCBBQ1QuICBJZiB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlCisrICAgICBzdHJpbmcgdG8gdXNlIGEgZGlmZmVyZW50IGNoYXJhY3RlciBzZXQsIHRoaXMgaXMgdGhlIHRpbWUuICAqLworKyAgaWYgKGFjdCA8IG5zdHJpbmdzKQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gKGNoYXIgKikKKysJKGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLm9mZnNldCkpOworKyAgICAgIHJlc3VsdGxlbiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLmxlbmd0aCkgKyAxOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICByZXN1bHQgPSAoY2hhciAqKSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLnBvaW50ZXI7CisrICAgICAgcmVzdWx0bGVuID0gZG9tYWluLT50cmFuc19zeXNkZXBfdGFiW2FjdCAtIG5zdHJpbmdzXS5sZW5ndGg7CisrICAgIH0KKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICBpZiAoZG9tYWluLT5jb2Rlc2V0X2NudHIKKysgICAgICAhPSAoZG9tYWluYmluZGluZyAhPSBOVUxMID8gZG9tYWluYmluZGluZy0+Y29kZXNldF9jbnRyIDogMCkpCisrICAgIHsKKysgICAgICAvKiBUaGUgZG9tYWluJ3MgY29kZXNldCBoYXMgY2hhbmdlZCB0aHJvdWdoIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkKKysJIHNpbmNlIHRoZSBtZXNzYWdlIGNhdGFsb2cgd2FzIGluaXRpYWxpemVkIG9yIGxhc3QgYWNjZXNzZWQuICBXZQorKwkgaGF2ZSB0byByZWluaXRpYWxpemUgdGhlIGNvbnZlcnRlci4gICovCisrICAgICAgX25sX2ZyZWVfZG9tYWluX2NvbnYgKGRvbWFpbik7CisrICAgICAgX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKyAgICB9CisrCisrICBpZiAoCisrIyBpZmRlZiBfTElCQworKyAgICAgIGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMQorKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysgICAgICBkb21haW4tPmNvbnYgIT0gKGljb252X3QpIC0xCisrIyAgZW5kaWYKKysjIGVuZGlmCisrICAgICAgKQorKyAgICB7CisrICAgICAgLyogV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGEgY29udmVyc2lvbi4gIEZpcnN0IGFsbG9jYXRlIGFuCisrCSBhcHByb3ByaWF0ZSB0YWJsZSB3aXRoIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyB0aGUgdGFibGUKKysJIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgZmlsZSwgd2hlcmUgd2UgY2FuIHB1dCB0aGUgcG9pbnRlcnMKKysJIHRvIHRoZSBjb252ZXJ0ZWQgc3RyaW5ncyBpbi4KKysJIFRoZXJlIGlzIGEgc2xpZ2h0IGNvbXBsaWNhdGlvbiB3aXRoIHBsdXJhbCBlbnRyaWVzLiAgVGhleQorKwkgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnNlY3V0aXZlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZQorKwkgaGFuZGxlIHRoaXMgY2FzZSBieSBjb252ZXJ0aW5nIFJFU1VMVExFTiBieXRlcywgaW5jbHVkaW5nCisrCSBOVUxzLiAgKi8KKysKKysgICAgICBpZiAoZG9tYWluLT5jb252X3RhYiA9PSBOVUxMCisrCSAgJiYgKChkb21haW4tPmNvbnZfdGFiID0KKysJCSAoY2hhciAqKikgY2FsbG9jIChuc3RyaW5ncyArIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncywKKysJCQkJICAgc2l6ZW9mIChjaGFyICopKSkKKysJICAgICAgPT0gTlVMTCkpCisrCS8qIE1hcmsgdGhhdCB3ZSBkaWRuJ3Qgc3VjY2VlZCBhbGxvY2F0aW5nIGEgdGFibGUuICAqLworKwlkb21haW4tPmNvbnZfdGFiID0gKGNoYXIgKiopIC0xOworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkb21haW4tPmNvbnZfdGFiID09IChjaGFyICoqKSAtMSwgMCkpCisrCS8qIE5vdGhpbmcgd2UgY2FuIGRvLCBubyBtb3JlIG1lbW9yeS4gICovCisrCWdvdG8gY29udmVydGVkOworKworKyAgICAgIGlmIChkb21haW4tPmNvbnZfdGFiW2FjdF0gPT0gTlVMTCkKKysJeworKwkgIC8qIFdlIGhhdmVuJ3QgdXNlZCB0aGlzIHN0cmluZyBzbyBmYXIsIHNvIGl0IGlzIG5vdAorKwkgICAgIHRyYW5zbGF0ZWQgeWV0LiAgRG8gdGhpcyBub3cuICAqLworKwkgIC8qIFdlIHVzZSBhIGJpdCBtb3JlIGVmZmljaWVudCBtZW1vcnkgaGFuZGxpbmcuCisrCSAgICAgV2UgYWxsb2NhdGUgYWx3YXlzIGxhcmdlciBibG9ja3Mgd2hpY2ggZ2V0IHVzZWQgb3ZlcgorKwkgICAgIHRpbWUuICBUaGlzIGlzIGZhc3RlciB0aGFuIG1hbnkgc21hbGwgYWxsb2NhdGlvbnMuICAgKi8KKysJICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jaykKKysjIGRlZmluZSBJTklUSUFMX0JMT0NLX1NJWkUJNDA4MAorKwkgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlbWVtOworKwkgIHN0YXRpYyBzaXplX3QgZnJlZW1lbV9zaXplOworKworKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmOworKwkgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKKysJICBpbnQgbWFsbG9jX2NvdW50OworKyMgaWZuZGVmIF9MSUJDCisrCSAgdHJhbnNtZW1fYmxvY2tfdCAqdHJhbnNtZW1fbGlzdCA9IE5VTEw7CisrIyBlbmRpZgorKworKwkgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKworKwkgIGluYnVmID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVzdWx0OworKwkgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CisrCisrCSAgbWFsbG9jX2NvdW50ID0gMDsKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgdHJhbnNtZW1fYmxvY2tfdCAqbmV3bWVtOworKyMgaWZkZWYgX0xJQkMKKysJICAgICAgc2l6ZV90IG5vbl9yZXZlcnNpYmxlOworKwkgICAgICBpbnQgcmVzOworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgcmVzID0gX19nY29udiAoZG9tYWluLT5jb252LAorKwkJCSAgICAgJmluYnVmLCBpbmJ1ZiArIHJlc3VsdGxlbiwKKysJCQkgICAgICZvdXRidWYsCisrCQkJICAgICBvdXRidWYgKyBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCksCisrCQkJICAgICAmbm9uX3JldmVyc2libGUpOworKworKwkgICAgICBpZiAocmVzID09IF9fR0NPTlZfT0sgfHwgcmVzID09IF9fR0NPTlZfRU1QVFlfSU5QVVQpCisrCQlicmVhazsKKysKKysJICAgICAgaWYgKHJlcyAhPSBfX0dDT05WX0ZVTExfT1VUUFVUKQorKwkJeworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysJICAgICAgaW5idWYgPSByZXN1bHQ7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgICAgICBjb25zdCBjaGFyICppbnB0ciA9IChjb25zdCBjaGFyICopIGluYnVmOworKwkgICAgICBzaXplX3QgaW5sZWZ0ID0gcmVzdWx0bGVuOworKwkgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKSBvdXRidWY7CisrCSAgICAgIHNpemVfdCBvdXRsZWZ0OworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNpemVvZiAoc2l6ZV90KTsKKysJICAgICAgaWYgKGljb252IChkb21haW4tPmNvbnYsCisrCQkJIChJQ09OVl9DT05TVCBjaGFyICoqKSAmaW5wdHIsICZpbmxlZnQsCisrCQkJICZvdXRwdHIsICZvdXRsZWZ0KQorKwkJICAhPSAoc2l6ZV90KSAoLTEpKQorKwkJeworKwkJICBvdXRidWYgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdHI7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBpZiAoZXJybm8gIT0gRTJCSUcpCisrCQl7CisrCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCQkgIGdvdG8gY29udmVydGVkOworKwkJfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKwkgICAgcmVzaXplX2ZyZWVtZW06CisrCSAgICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIG9yIHJlc2l6ZSB0aGUgb2xkIG9uZS4gICovCisrCSAgICAgIGlmIChtYWxsb2NfY291bnQgPiAwKQorKwkJeworKwkJICArK21hbGxvY19jb3VudDsKKysJCSAgZnJlZW1lbV9zaXplID0gbWFsbG9jX2NvdW50ICogSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSByZWFsbG9jICh0cmFuc21lbV9saXN0LAorKwkJCQkJCQkgZnJlZW1lbV9zaXplKTsKKysjIGlmZGVmIF9MSUJDCisrCQkgIGlmIChuZXdtZW0gIT0gTlVMTCkKKysJCSAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpvbGQgPSB0cmFuc21lbV9saXN0OworKworKwkJICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrCQkgICAgICBmcmVlIChvbGQpOworKwkJICAgIH0KKysjIGVuZGlmCisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbWFsbG9jX2NvdW50ID0gMTsKKysJCSAgZnJlZW1lbV9zaXplID0gSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSBtYWxsb2MgKGZyZWVtZW1fc2l6ZSk7CisrCQl9CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdtZW0gPT0gTlVMTCwgMCkpCisrCQl7CisrCQkgIGZyZWVtZW0gPSBOVUxMOworKwkJICBmcmVlbWVtX3NpemUgPSAwOworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysjIGlmZGVmIF9MSUJDCisrCSAgICAgIC8qIEFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgYmxvY2tzIHdlIGhhdmUgdG8gZnJlZQorKyAgICAgICAgICAgICAgICAgYXQgc29tZSBwb2ludC4gICovCisrCSAgICAgIG5ld21lbS0+bmV4dCA9IHRyYW5zbWVtX2xpc3Q7CisrCSAgICAgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CisrCisrCSAgICAgIGZyZWVtZW0gPSBuZXdtZW0tPmRhdGE7CisrCSAgICAgIGZyZWVtZW1fc2l6ZSAtPSBvZmZzZXRvZiAoc3RydWN0IHRyYW5zbWVtX2xpc3QsIGRhdGEpOworKyMgZWxzZQorKwkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOworKwkgICAgICBmcmVlbWVtID0gbmV3bWVtOworKyMgZW5kaWYKKysKKysJICAgICAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKysJICAgIH0KKysKKysJICAvKiBXZSBoYXZlIG5vdyBpbiBvdXIgYnVmZmVyIGEgY29udmVydGVkIHN0cmluZy4gIFB1dCB0aGlzCisrCSAgICAgaW50byB0aGUgdGFibGUgb2YgY29udmVyc2lvbnMuICAqLworKwkgICooc2l6ZV90ICopIGZyZWVtZW0gPSBvdXRidWYgLSBmcmVlbWVtIC0gc2l6ZW9mIChzaXplX3QpOworKwkgIGRvbWFpbi0+Y29udl90YWJbYWN0XSA9IChjaGFyICopIGZyZWVtZW07CisrCSAgLyogU2hyaW5rIGZyZWVtZW0sIGJ1dCBrZWVwIGl0IGFsaWduZWQuICAqLworKwkgIGZyZWVtZW1fc2l6ZSAtPSBvdXRidWYgLSBmcmVlbWVtOworKwkgIGZyZWVtZW0gPSBvdXRidWY7CisrCSAgZnJlZW1lbSArPSBmcmVlbWVtX3NpemUgJiAoYWxpZ25vZiAoc2l6ZV90KSAtIDEpOworKwkgIGZyZWVtZW1fc2l6ZSA9IGZyZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKKysKKysJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwl9CisrCisrICAgICAgLyogTm93IGRvbWFpbi0+Y29udl90YWJbYWN0XSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24gb2YgYWxsCisrCSB0aGUgcGx1cmFsIHZhcmlhbnRzLiAgKi8KKysgICAgICByZXN1bHQgPSBkb21haW4tPmNvbnZfdGFiW2FjdF0gKyBzaXplb2YgKHNpemVfdCk7CisrICAgICAgcmVzdWx0bGVuID0gKihzaXplX3QgKikgZG9tYWluLT5jb252X3RhYlthY3RdOworKyAgICB9CisrCisrIGNvbnZlcnRlZDoKKysgIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCisrCisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysKKysgICpsZW5ndGhwID0gcmVzdWx0bGVuOworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8KKytzdGF0aWMgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKKyt7CisrICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluZGF0YSA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW4tPmRhdGE7CisrICB1bnNpZ25lZCBsb25nIGludCBpbmRleDsKKysgIGNvbnN0IGNoYXIgKnA7CisrCisrICBpbmRleCA9IHBsdXJhbF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOworKyAgaWYgKGluZGV4ID49IGRvbWFpbmRhdGEtPm5wbHVyYWxzKQorKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYW5kIHRoZQorKyAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRvIG5vdCBtYXRjaC4gICovCisrICAgIGluZGV4ID0gMDsKKysKKysgIC8qIFNraXAgSU5ERVggc3RyaW5ncyBhdCBUUkFOU0xBVElPTi4gICovCisrICBwID0gdHJhbnNsYXRpb247CisrICB3aGlsZSAoaW5kZXgtLSA+IDApCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBwID0gX19yYXdtZW1jaHIgKHAsICdcMCcpOworKyNlbHNlCisrICAgICAgcCA9IHN0cmNociAocCwgJ1wwJyk7CisrI2VuZGlmCisrICAgICAgLyogQW5kIHNraXAgb3ZlciB0aGUgTlVMIGJ5dGUuICAqLworKyAgICAgIHArKzsKKysKKysgICAgICBpZiAocCA+PSB0cmFuc2xhdGlvbiArIHRyYW5zbGF0aW9uX2xlbikKKysJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uCisrCSAgIGV2YWx1YXRlZCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgdmFyaWFudHMKKysJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEuICAqLworKwlyZXR1cm4gKGNoYXIgKikgdHJhbnNsYXRpb247CisrICAgIH0KKysgIHJldHVybiAoY2hhciAqKSBwOworK30KKysKKysjaWZuZGVmIF9MSUJDCisrLyogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBsb2NhbGUgQ0FURUdPUlkuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2NhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkKKyt7CisrICBjb25zdCBjaGFyICpyZXR2YWw7CisrCisrICBzd2l0Y2ggKGNhdGVnb3J5KQorKyAgeworKyNpZmRlZiBMQ19DT0xMQVRFCisrICBjYXNlIExDX0NPTExBVEU6CisrICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0NUWVBFCisrICBjYXNlIExDX0NUWVBFOgorKyAgICByZXR2YWwgPSAiTENfQ1RZUEUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTU9ORVRBUlkKKysgIGNhc2UgTENfTU9ORVRBUlk6CisrICAgIHJldHZhbCA9ICJMQ19NT05FVEFSWSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19OVU1FUklDCisrICBjYXNlIExDX05VTUVSSUM6CisrICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX1RJTUUKKysgIGNhc2UgTENfVElNRToKKysgICAgcmV0dmFsID0gIkxDX1RJTUUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTUVTU0FHRVMKKysgIGNhc2UgTENfTUVTU0FHRVM6CisrICAgIHJldHZhbCA9ICJMQ19NRVNTQUdFUyI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19SRVNQT05TRQorKyAgY2FzZSBMQ19SRVNQT05TRToKKysgICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0FMTAorKyAgY2FzZSBMQ19BTEw6CisrICAgIC8qIFRoaXMgbWlnaHQgbm90IG1ha2Ugc2Vuc2UgYnV0IGlzIHBlcmhhcHMgYmV0dGVyIHRoYW4gYW55IG90aGVyCisrICAgICAgIHZhbHVlLiAgKi8KKysgICAgcmV0dmFsID0gIkxDX0FMTCI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyAgZGVmYXVsdDoKKysgICAgLyogSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBmb3IgYSBkZWZhdWx0IHZhbHVlIGxldCBtZSBrbm93LiAgKi8KKysgICAgcmV0dmFsID0gIkxDX1hYWCI7CisrICB9CisrCisrICByZXR1cm4gcmV0dmFsOworK30KKysjZW5kaWYKKysKKysvKiBHdWVzcyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2d1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKysgIGNvbnN0IGNoYXIgKnJldHZhbDsKKysKKysgIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZS4gIEJ1dCB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlIGlmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKysgICAgIGxvY2FsZSBpcyB0aGUgQyBsb2NhbGUuICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4gICovCisrICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CisrICBpZiAobGFuZ3VhZ2UgIT0gTlVMTCAmJiBsYW5ndWFnZVswXSA9PSAnXDAnKQorKyAgICBsYW5ndWFnZSA9IE5VTEw7CisrCisrICAvKiBXZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvIGBMQ19BTEwnLAorKyAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKysgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisrI2lmZGVmIF9MSUJDCisrICByZXR2YWwgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKysjZWxzZQorKyAgcmV0dmFsID0gX25sX2xvY2FsZV9uYW1lIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKysgIC8qIElnbm9yZSBMQU5HVUFHRSBpZiB0aGUgbG9jYWxlIGlzIHNldCB0byAiQyIgYmVjYXVzZQorKyAgICAgMS4gIkMiIGxvY2FsZSB1c3VhbGx5IHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nLCBhbmQgbW9zdCBpbnRlcm5hdGlvbmFsCisrCW1lc3NhZ2VzIHVzZSBub24tQVNDSUkgY2hhcmFjdGVycy4gVGhlc2UgY2hhcmFjdGVycyBnZXQgZGlzcGxheWVkCisrCWFzIHF1ZXN0aW9uIG1hcmtzIChpZiB1c2luZyBnbGliYydzIGljb252KCkpIG9yIGFzIGludmFsaWQgOC1iaXQKKysJY2hhcmFjdGVycyAoYmVjYXVzZSBvdGhlciBpY29udigpcyByZWZ1c2UgdG8gY29udmVydCBtb3N0IG5vbi1BU0NJSQorKwljaGFyYWN0ZXJzIHRvIEFTQ0lJKS4gSW4gYW55IGNhc2UsIHRoZSBvdXRwdXQgaXMgdWdseS4KKysgICAgIDIuIFRoZSBwcmVjaXNlIG91dHB1dCBvZiBzb21lIHByb2dyYW1zIGluIHRoZSAiQyIgbG9jYWxlIGlzIHNwZWNpZmllZAorKwlieSBQT1NJWCBhbmQgc2hvdWxkIG5vdCBkZXBlbmQgb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UKKysJIkxBTkdVQUdFIi4gIFdlIGFsbG93IHN1Y2ggcHJvZ3JhbXMgdG8gdXNlIGdldHRleHQoKS4gICovCisrICByZXR1cm4gbGFuZ3VhZ2UgIT0gTlVMTCAmJiBzdHJjbXAgKHJldHZhbCwgIkMiKSAhPSAwID8gbGFuZ3VhZ2UgOiByZXR2YWw7CisrfQorKworKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworKworKy8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCisrICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKysgICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorKyAgIHRvIGJlIGRlZmluZWQuICAqLworKyNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCisrc3RhdGljIGNoYXIgKgorK3N0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQorK3sKKysgIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKysgICAgLyogRG8gbm90aGluZy4gKi8gOworKyAgcmV0dXJuIGRlc3QgLSAxOworK30KKysjZW5kaWYKKysKKysjaWYgIV9MSUJDICYmICFIQVZFX01FTVBDUFkKKytzdGF0aWMgdm9pZCAqCisrbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKKyt7CisrICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNweSAoZGVzdCwgc3JjLCBuKSArIG4pOworK30KKysjZW5kaWYKKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBJZiB3ZSB3YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAorKyAgIHByb2dyYW0ncyBlbmQuICAqLworK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisreworKyAgdm9pZCAqb2xkOworKworKyAgd2hpbGUgKF9ubF9kb21haW5fYmluZGluZ3MgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cnVjdCBiaW5kaW5nICpvbGRwID0gX25sX2RvbWFpbl9iaW5kaW5nczsKKysgICAgICBfbmxfZG9tYWluX2JpbmRpbmdzID0gX25sX2RvbWFpbl9iaW5kaW5ncy0+bmV4dDsKKysgICAgICBpZiAob2xkcC0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisrCS8qIFllcywgdGhpcyBpcyBhIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCisrCWZyZWUgKG9sZHAtPmRpcm5hbWUpOworKyAgICAgIGZyZWUgKG9sZHAtPmNvZGVzZXQpOworKyAgICAgIGZyZWUgKG9sZHApOworKyAgICB9CisrCisrICBpZiAoX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworKyAgICBmcmVlICgoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbik7CisrCisrICAvKiBSZW1vdmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrICBfX3RkZXN0cm95IChyb290LCBmcmVlKTsKKysgIHJvb3QgPSBOVUxMOworKworKyAgd2hpbGUgKHRyYW5zbWVtX2xpc3QgIT0gTlVMTCkKKysgICAgeworKyAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CisrICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrICAgICAgZnJlZSAob2xkKTsKKysgICAgfQorK30KKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY25nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNuZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzc1NzQ1MDQ4IC0wNDAwCitAQCAtMCwwICsxLDU3IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjbmdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisrICAgbG9jYWxlLiAgKi8KKytjaGFyICoKKytEQ05HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICBpbnQgY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCAxLCBuLCBjYXRlZ29yeSk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fZGNuZ2V0dGV4dCwgZGNuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGdldHRleHQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzgwNzQ0Mjg4IC0wNDAwCitAQCAtMSwzMiArMSwzMyBAQAorLS8qIGRnZXR0ZXh0LmMgLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIGRnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgSEFWRV9MT0NBTEVfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCitAQCAtMzcsMTggKzM4LDE2IEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBER0VUVEVYVCBfX2RnZXR0ZXh0CistIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyAjZWxzZQorLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKy0jIGRlZmluZSBEQ0dFVFRFWFQgZGNnZXR0ZXh0X18KKysjIGRlZmluZSBER0VUVEVYVCBsaWJpbnRsX2RnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKyAgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworIGNoYXIgKgorLURHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytER0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQpCisgeworICAgcmV0dXJuIERDR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKTsKKyB9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZG5nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZG5nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zODU3NDM1MjggLTA0MDAKK0BAIC0wLDAgKzEsNTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEROR0VUVEVYVCBfX2RuZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBETkdFVFRFWFQgbGliaW50bF9kbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIG9mIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlIGFuZCBza2lwIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBwbHVyYWwgZm9ybS4gICovCisrY2hhciAqCisrRE5HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyt7CisrICByZXR1cm4gRENOR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKKyt9CisrCisrI2lmZGVmIF9MSUJDCisrLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrd2Vha19hbGlhcyAoX19kbmdldHRleHQsIGRuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZXZhbC1wbHVyYWwuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9ldmFsLXBsdXJhbC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzkwNzQyNzY4IC0wNDAwCitAQCAtMCwwICsxLDEwOCBAQAorKy8qIFBsdXJhbCBleHByZXNzaW9uIGV2YWx1YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgU1RBVElDCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrI2VuZGlmCisrCisrLyogRXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLworK1NUQVRJQworK3Vuc2lnbmVkIGxvbmcgaW50CisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfZXZhbCAoc3RydWN0IGV4cHJlc3Npb24gKnBleHAsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgc3dpdGNoIChwZXhwLT5uYXJncykKKysgICAgeworKyAgICBjYXNlIDA6CisrICAgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisrCXsKKysJY2FzZSB2YXI6CisrCSAgcmV0dXJuIG47CisrCWNhc2UgbnVtOgorKwkgIHJldHVybiBwZXhwLT52YWwubnVtOworKwlkZWZhdWx0OgorKwkgIGJyZWFrOworKwl9CisrICAgICAgLyogTk9UUkVBQ0hFRCAqLworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDE6CisrICAgICAgeworKwkvKiBwZXhwLT5vcGVyYXRpb24gbXVzdCBiZSBsbm90LiAgKi8KKysJdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuICEgYXJnOworKyAgICAgIH0KKysgICAgY2FzZSAyOgorKyAgICAgIHsKKysJdW5zaWduZWQgbG9uZyBpbnQgbGVmdGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisrCWlmIChwZXhwLT5vcGVyYXRpb24gPT0gbG9yKQorKwkgIHJldHVybiBsZWZ0YXJnIHx8IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UgaWYgKHBleHAtPm9wZXJhdGlvbiA9PSBsYW5kKQorKwkgIHJldHVybiBsZWZ0YXJnICYmIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UKKysJICB7CisrCSAgICB1bnNpZ25lZCBsb25nIGludCByaWdodGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCisrCSAgICBzd2l0Y2ggKHBleHAtPm9wZXJhdGlvbikKKysJICAgICAgeworKwkgICAgICBjYXNlIG11bHQ6CisrCQlyZXR1cm4gbGVmdGFyZyAqIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGRpdmlkZToKKysjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorKwkJaWYgKHJpZ2h0YXJnID09IDApCisrCQkgIHJhaXNlIChTSUdGUEUpOworKyNlbmRpZgorKwkJcmV0dXJuIGxlZnRhcmcgLyByaWdodGFyZzsKKysJICAgICAgY2FzZSBtb2R1bGU6CisrI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKysJCWlmIChyaWdodGFyZyA9PSAwKQorKwkJICByYWlzZSAoU0lHRlBFKTsKKysjZW5kaWYKKysJCXJldHVybiBsZWZ0YXJnICUgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgcGx1czoKKysJCXJldHVybiBsZWZ0YXJnICsgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbWludXM6CisrCQlyZXR1cm4gbGVmdGFyZyAtIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGxlc3NfdGhhbjoKKysJCXJldHVybiBsZWZ0YXJnIDwgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl90aGFuOgorKwkJcmV0dXJuIGxlZnRhcmcgPiByaWdodGFyZzsKKysJICAgICAgY2FzZSBsZXNzX29yX2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPD0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl9vcl9lcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnID49IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGVxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPT0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2Ugbm90X2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgIT0gcmlnaHRhcmc7CisrCSAgICAgIGRlZmF1bHQ6CisrCQlicmVhazsKKysJICAgICAgfQorKwkgIH0KKysJLyogTk9UUkVBQ0hFRCAqLworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgMzoKKysgICAgICB7CisrCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIHFtb3AuICAqLworKwl1bnNpZ25lZCBsb25nIGludCBib29sYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1tib29sYXJnID8gMSA6IDJdLCBuKTsKKysgICAgICB9CisrICAgIH0KKysgIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9leHBsb2RlbmFtZS5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2V4cGxvZGVuYW1lLmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zOTU3NDIwMDggLTA0MDAKK0BAIC0xLDE5ICsxLDIwIEBACistLyogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CitAQCAtMzYsMTggKzM3LDIzIEBACisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorK2NoYXIgKgorK19ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHdoaWxlIChuYW1lWzBdICE9ICdcMCcgJiYgbmFtZVswXSAhPSAnXycgJiYgbmFtZVswXSAhPSAnQCcKKysJICYmIG5hbWVbMF0gIT0gJysnICYmIG5hbWVbMF0gIT0gJywnKQorKyAgICArK25hbWU7CisrCisrICByZXR1cm4gKGNoYXIgKikgbmFtZTsKKyt9CisrCisrCisgaW50CistX25sX2V4cGxvZGVfbmFtZSAobmFtZSwgbGFuZ3VhZ2UsIG1vZGlmaWVyLCB0ZXJyaXRvcnksIGNvZGVzZXQsCistCQkgIG5vcm1hbGl6ZWRfY29kZXNldCwgc3BlY2lhbCwgc3BvbnNvciwgcmV2aXNpb24pCistICAgICBjaGFyICpuYW1lOworLSAgICAgY29uc3QgY2hhciAqKmxhbmd1YWdlOworLSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyOworLSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsOworLSAgICAgY29uc3QgY2hhciAqKnNwb25zb3I7CistICAgICBjb25zdCBjaGFyICoqcmV2aXNpb247CisrX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwKKysJCSAgY29uc3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsCisrCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LCBjb25zdCBjaGFyICoqc3BlY2lhbCwKKysJCSAgY29uc3QgY2hhciAqKnNwb25zb3IsIGNvbnN0IGNoYXIgKipyZXZpc2lvbikKKyB7CisgICBlbnVtIHsgdW5kZWNpZGVkLCB4cGcsIGNlbiB9IHN5bnRheDsKKyAgIGNoYXIgKmNwOworQEAgLTY3LDkgKzczLDcgQEAKKyAgIG1hc2sgPSAwOworICAgc3ludGF4ID0gdW5kZWNpZGVkOworICAgKmxhbmd1YWdlID0gY3AgPSBuYW1lOworLSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ18nICYmIGNwWzBdICE9ICdAJworLQkgJiYgY3BbMF0gIT0gJysnICYmIGNwWzBdICE9ICcsJykKKy0gICAgKytjcDsKKysgIGNwID0gX25sX2ZpbmRfbGFuZ3VhZ2UgKCpsYW5ndWFnZSk7CisgCisgICBpZiAoKmxhbmd1YWdlID09IGNwKQorICAgICAvKiBUaGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2U6IGxhbmd1YWdlIGhhcyB0byBiZSBzcGVjaWZpZWQuICBVc2UKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9maW5kZG9tYWluLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZmluZGRvbWFpbi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDE1NzM4OTY4IC0wNDAwCitAQCAtMSw2NCArMSw0MCBAQAorIC8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxjdHlwZS5oPgorLSNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorICNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKyAjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC03MCwxMCArNDYsOSBAQAorICAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CisgICAgZXN0YWJsaXNoZWQgYmluZGluZ3MuICAqLworIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgbG9jYWxlLCBkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKy0gICAgIGNoYXIgKmxvY2FsZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNoYXIgKmxvY2FsZSwKKysJCSBjb25zdCBjaGFyICpkb21haW5uYW1lLCBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKK0BAIC05NSw5ICs3MCw5IEBACisgCisgCWxhbmd1YWdlW190ZXJyaXRvcnldWythdWRpZW5jZV1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKyAKKy0gICAgIEJlc2lkZSB0aGUgZmlyc3QgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmIHRoZQorLSAgICAgZnVsbCBzcGVjaWZpZWQgbG9jYWxlIGlzIG5vdCBmb3VuZCwgdGhlIGxlc3Mgc3BlY2lmaWMgb25lIGFyZQorLSAgICAgbG9va2VkIGZvci4gIFRoZSB2YXJpb3VzIHBhcnQgd2lsbCBiZSBzdHJpcHBlZCBvZiBhY2NvcmRpbmcgdG8KKysgICAgIEJlc2lkZSB0aGUgZmlyc3QgcGFydCBhbGwgb2YgdGhlbSBhcmUgYWxsb3dlZCB0byBiZSBtaXNzaW5nLiAgSWYKKysgICAgIHRoZSBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCisrICAgICBsb29rZWQgZm9yLiAgVGhlIHZhcmlvdXMgcGFydHMgd2lsbCBiZSBzdHJpcHBlZCBvZmYgYWNjb3JkaW5nIHRvCisgICAgICB0aGUgZm9sbG93aW5nIG9yZGVyOgorIAkJKDEpIHJldmlzaW9uCisgCQkoMikgc3BvbnNvcgorQEAgLTExOSw3ICs5NCw3IEBACisgICAgICAgaW50IGNudDsKKyAKKyAgICAgICBpZiAocmV0dmFsLT5kZWNpZGVkID09IDApCistCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsKTsKKysJX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworIAorICAgICAgIGlmIChyZXR2YWwtPmRhdGEgIT0gTlVMTCkKKyAJcmV0dXJuIHJldHZhbDsKK0BAIC0xMjcsNyArMTAyLDcgQEAKKyAgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisgCXsKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdKTsKKysJICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSwgZG9tYWluYmluZGluZyk7CisgCisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRhdGEgIT0gTlVMTCkKKyAJICAgIGJyZWFrOworQEAgLTE0MiwxMiArMTE3LDE4IEBACisgICBhbGlhc192YWx1ZSA9IF9ubF9leHBhbmRfYWxpYXMgKGxvY2FsZSk7CisgICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKyAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysgICAgICBsb2NhbGUgPSBzdHJkdXAgKGFsaWFzX3ZhbHVlKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbHNlCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKyAgICAgICBsb2NhbGUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisgICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgICBtZW1jcHkgKGxvY2FsZSwgYWxpYXNfdmFsdWUsIGxlbik7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorQEAgLTE2OCwxNCArMTQ5LDE0IEBACisgICAgIHJldHVybiBOVUxMOworIAorICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbCk7CisrICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAgIGlmIChyZXR2YWwtPmRhdGEgPT0gTlVMTCkKKyAgICAgeworICAgICAgIGludCBjbnQ7CisgICAgICAgZm9yIChjbnQgPSAwOyByZXR2YWwtPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorIAl7CisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKy0JICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSk7CisrCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisgCSAgICBicmVhazsKKyAJfQorQEAgLTE4NSw1ICsxNjYsMjcgQEAKKyAgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgICBmcmVlIChsb2NhbGUpOworIAorKyAgLyogVGhlIHNwYWNlIGZvciBub3JtYWxpemVkX2NvZGVzZXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAgRnJlZSBpdC4gICovCisrICBpZiAobWFzayAmIFhQR19OT1JNX0NPREVTRVQpCisrICAgIGZyZWUgKCh2b2lkICopIG5vcm1hbGl6ZWRfY29kZXNldCk7CisrCisgICByZXR1cm4gcmV0dmFsOworIH0KKysKKysKKysjaWZkZWYgX0xJQkMKKytsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJ1bnAgPSBfbmxfbG9hZGVkX2RvbWFpbnM7CisrCisrICB3aGlsZSAocnVucCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqaGVyZSA9IHJ1bnA7CisrICAgICAgaWYgKHJ1bnAtPmRhdGEgIT0gTlVMTCkKKysJX25sX3VubG9hZF9kb21haW4gKChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBydW5wLT5kYXRhKTsKKysgICAgICBydW5wID0gcnVucC0+bmV4dDsKKysgICAgICBmcmVlICgoY2hhciAqKSBoZXJlLT5maWxlbmFtZSk7CisrICAgICAgZnJlZSAoaGVyZSk7CisrICAgIH0KKyt9CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQyMDczODIwOCAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KK0BAIC0yMywyMSArMjQsMTQgQEAKKyAjIGRlZmluZSBfX25lZWRfTlVMTAorICMgaW5jbHVkZSA8c3RkZGVmLmg+CisgI2Vsc2UKKy0jIGlmZGVmIFNURENfSEVBREVSUworLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCistIyBlbHNlCistIyAgaWZkZWYgSEFWRV9TVFJJTkdfSAorLSMgICBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jICBlbHNlCistIyAgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorLSMgIGVuZGlmCistIyBlbmRpZgorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKyAjZW5kaWYKKyAKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC00OCwyMCArNDIsMTkgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIEdFVFRFWFQgX19nZXR0ZXh0CistIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBJTlRVU0UoX19kY2dldHRleHQpCisgI2Vsc2UKKy0jIGRlZmluZSBHRVRURVhUIGdldHRleHRfXworLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKysjIGRlZmluZSBHRVRURVhUIGxpYmludGxfZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorICNlbmRpZgorIAorIC8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisgICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKyAgICB0ZXh0KS4gICovCisgY2hhciAqCistR0VUVEVYVCAobXNnaWQpCistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytHRVRURVhUIChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gREdFVFRFWFQgKE5VTEwsIG1zZ2lkKTsKKysgIHJldHVybiBEQ0dFVFRFWFQgKE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dldHRleHQuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwNSArMCwwIEBACistLyogSW50ZXJuYWwgaGVhZGVyIGZvciBHTlUgZ2V0dGV4dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBmdW5jdGlvbnMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCistICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorLSAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9HRVRURVhUX0gKKy0jZGVmaW5lIF9HRVRURVhUX0ggMQorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZiBIQVZFX0xJTUlUU19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogVGhlIG1hZ2ljIG51bWJlciBvZiB0aGUgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQuICAqLworLSNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKy0jZGVmaW5lIF9NQUdJQ19TV0FQUEVEIDB4ZGUxMjA0OTUKKy0KKy0vKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCistI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVIgMAorLQorLS8qIFRoZSBmb2xsb3dpbmcgY29udG9ydGlvbnMgYXJlIGFuIGF0dGVtcHQgdG8gdXNlIHRoZSBDIHByZXByb2Nlc3NvcgorLSAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKy0gICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorLSAgIGRvaW5nIHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGNvbXBpbGUgYW5kICpydW4qCistICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlLiAgTG9jYWxseSBydW5uaW5nIGNyb3NzLWNvbXBpbGVkIGV4ZWN1dGFibGVzCistICAgaXMgdXN1YWxseSBub3QgcG9zc2libGUuICAqLworLQorLSNpZiBfX1NURENfXworLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKy0jZWxzZQorLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorLSNlbmRpZgorLQorLS8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCistICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCistICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCistICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKy0KKy0jaWZuZGVmIFVJTlRfTUFYCistIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworLSNlbmRpZgorLQorLSNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworLSNlbHNlCistIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKy0jIGVsc2UKKy0jICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworLSMgIGVsc2UKKy0gIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworLSAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCistICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKy0vKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworLXN0cnVjdCBtb19maWxlX2hlYWRlcgorLXsKKy0gIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworLSAgbmxzX3VpbnQzMiBtYWdpYzsKKy0gIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKy0gIG5sc191aW50MzIgcmV2aXNpb247CistICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworLSAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3RyaW5ncy4gICovCistICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRpb24gc3RyaW5ncy4gICovCistICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CistICAvKiBTaXplIG9mIGhhc2hpbmcgdGFibGUuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9zaXplOworLSAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2hpbmcgZW50cnkuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9vZmZzZXQ7CistfTsKKy0KKy1zdHJ1Y3Qgc3RyaW5nX2Rlc2MKKy17CistICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZy4gICovCistICBubHNfdWludDMyIGxlbmd0aDsKKy0gIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCistICBubHNfdWludDMyIG9mZnNldDsKKy19OworLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLSNlbmRpZgkvKiBnZXR0ZXh0LmggICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dFAuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0UC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDI2NzM3Mjk2IC0wNDAwCitAQCAtMSwzMyArMSw1MyBAQAorLS8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBnZXR0ZXh0IGxpYnJhcnkKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSGVhZGVyIGRlc2NyaWJpbmcgaW50ZXJuYWxzIG9mIGxpYmludGwgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZm5kZWYgX0dFVFRFWFRQX0gKKyAjZGVmaW5lIF9HRVRURVhUUF9ICisgCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogR2V0IHNpemVfdC4gICovCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9pY29udi9nY29udl9pbnQuaCIKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyMgIGluY2x1ZGUgPGljb252Lmg+CisrIyBlbmRpZgorKyNlbmRpZgorKworICNpbmNsdWRlICJsb2FkaW5mby5oIgorIAorKyNpbmNsdWRlICJnbW8uaCIJCS8qIEdldCBubHNfdWludDMyLiAgKi8KKysKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSAoKQorLSMgZW5kaWYKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysjaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKysjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisrI2VuZGlmCisrCisrLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9FWFBFQ1QKKysjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisgI2VuZGlmCisgCisgI2lmbmRlZiBXCitAQCAtMzUsMzggKzU1LDE2MCBAQAorICNlbmRpZgorIAorIAorLXN0YXRpYyBubHNfdWludDMyIFNXQVAgUEFSQU1TICgobmxzX3VpbnQzMiBpKSk7CistCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorKyMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCisrI2Vsc2UKKyBzdGF0aWMgaW5saW5lIG5sc191aW50MzIKKyBTV0FQIChpKQorICAgICAgbmxzX3VpbnQzMiBpOworIHsKKyAgIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKKyB9CisrI2VuZGlmCisrCisgCisrLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCisreworKyAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHNpemVfdCBsZW5ndGg7CisrICAvKiBQb2ludGVyIHRvIGFkZHJlc3NlZCBzdHJpbmcuICAqLworKyAgY29uc3QgY2hhciAqcG9pbnRlcjsKKyt9OworIAorKy8qIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhbiBvcGVuZWQgbWVzc2FnZSBjYXRhbG9nLiAgKi8KKyBzdHJ1Y3QgbG9hZGVkX2RvbWFpbgorIHsKKysgIC8qIFBvaW50ZXIgdG8gbWVtb3J5IGNvbnRhaW5pbmcgdGhlIC5tbyBmaWxlLiAgKi8KKyAgIGNvbnN0IGNoYXIgKmRhdGE7CisrICAvKiAxIGlmIHRoZSBtZW1vcnkgaXMgbW1hcCgpZWQsIDAgaWYgdGhlIG1lbW9yeSBpcyBtYWxsb2MoKWVkLiAgKi8KKysgIGludCB1c2VfbW1hcDsKKysgIC8qIFNpemUgb2YgbW1hcCgpZWQgbWVtb3J5LiAgKi8KKysgIHNpemVfdCBtbWFwX3NpemU7CisrICAvKiAxIGlmIHRoZSAubW8gZmlsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworICAgaW50IG11c3Rfc3dhcDsKKysgIC8qIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBtYWxsb2MoKWVkIG1lbW9yeS4gICovCisrICB2b2lkICptYWxsb2NlZDsKKysKKysgIC8qIE51bWJlciBvZiBzdGF0aWMgc3RyaW5ncyBwYWlycy4gICovCisgICBubHNfdWludDMyIG5zdHJpbmdzOworLSAgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKy0gIHN0cnVjdCBzdHJpbmdfZGVzYyAqdHJhbnNfdGFiOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqb3JpZ190YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncyBpbiB0aGUgZmlsZS4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKysKKysgIC8qIE51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICpvcmlnX3N5c2RlcF90YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqdHJhbnNfc3lzZGVwX3RhYjsKKysKKysgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgICBubHNfdWludDMyIGhhc2hfc2l6ZTsKKy0gIG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogUG9pbnRlciB0byBoYXNoIHRhYmxlLiAgKi8KKysgIGNvbnN0IG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworKyAgaW50IG11c3Rfc3dhcF9oYXNoX3RhYjsKKysKKysgIGludCBjb2Rlc2V0X2NudHI7CisrI2lmZGVmIF9MSUJDCisrICBfX2djb252X3QgY29udjsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWNvbnZfdCBjb252OworKyMgZW5kaWYKKysjZW5kaWYKKysgIGNoYXIgKipjb252X3RhYjsKKysKKysgIHN0cnVjdCBleHByZXNzaW9uICpwbHVyYWw7CisrICB1bnNpZ25lZCBsb25nIGludCBucGx1cmFsczsKKyB9OworIAorKy8qIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LiAgQnV0IElTTyBDCisrICAgZG9lc24ndCBhbGxvdyB6ZXJvIHNpemVkIGFycmF5cy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgWkVSTyAwCisrI2Vsc2UKKysjIGRlZmluZSBaRVJPIDEKKysjZW5kaWYKKysKKysvKiBBIHNldCBvZiBzZXR0aW5ncyBib3VuZCB0byBhIG1lc3NhZ2UgZG9tYWluLiAgVXNlZCB0byBzdG9yZSBzZXR0aW5ncworKyAgIGZyb20gYmluZHRleHRkb21haW4oKSBhbmQgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKS4gICovCisgc3RydWN0IGJpbmRpbmcKKyB7CisgICBzdHJ1Y3QgYmluZGluZyAqbmV4dDsKKy0gIGNoYXIgKmRvbWFpbm5hbWU7CisgICBjaGFyICpkaXJuYW1lOworKyAgaW50IGNvZGVzZXRfY250cjsJLyogSW5jcmVtZW50ZWQgZWFjaCB0aW1lIGNvZGVzZXQgY2hhbmdlcy4gICovCisrICBjaGFyICpjb2Rlc2V0OworKyAgY2hhciBkb21haW5uYW1lW1pFUk9dOworIH07CisgCistc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2ZpbmRfZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwKKy0JCQkJCQkgY2hhciAqX19sb2NhbGUsCistCQkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkpOworLXZvaWQgX25sX2xvYWRfZG9tYWluIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluKSk7CisrLyogQSBjb3VudGVyIHdoaWNoIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBzb21lIHByZXZpb3VzIHRyYW5zbGF0aW9ucworKyAgIGJlY29tZSBpbnZhbGlkLgorKyAgIFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQUJJIG9mIHRoZSBHTlUgbGliaW50bC4gICovCisrZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworKworKyNpZm5kZWYgX0xJQkMKKytjb25zdCBjaGFyICpfbmxfbG9jYWxlX25hbWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKytzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwgY2hhciAqX19sb2NhbGUsCisrCQkJCQkgY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW4sCisrCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrdm9pZCBfbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrY29uc3QgY2hhciAqX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluX2ZpbGUsCisrCQkJCSAgc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluLAorKwkJCQkgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqX19kb21haW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKytjaGFyICpfbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJCSAgICBzaXplX3QgKmxlbmd0aHApCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY2hhciAqX19nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24pOworK2V4dGVybiBjaGFyICpfX2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrZXh0ZXJuIGNoYXIgKl9fZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgIGludCBfX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorKwkJCSAgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX190ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworK2V4dGVybiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7CisrZXh0ZXJuIGNoYXIgKl9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKl9fY29kZXNldCk7CisrI2Vsc2UKKysvKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworKyAgIGNhbGwgdGhlbSB1bmRlciB0aGVpciByZWFsIG5hbWUuICAqLworKyMgdW5kZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKysJCQkJIGludCBfX2NhdGVnb3J5KTsKKysjZW5kaWYKKyAKKyAvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nbW8uaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nbW8uaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzMTczNjUzNiAtMDQwMAorQEAgLTAsMCArMSwxNDkgQEAKKysvKiBEZXNjcmlwdGlvbiBvZiBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdDogZ2VuZXJhbCBmaWxlIGxheW91dC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfR0VUVEVYVF9ICisrI2RlZmluZSBfR0VUVEVYVF9IIDEKKysKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKysjZGVmaW5lIF9NQUdJQyAweDk1MDQxMmRlCisrI2RlZmluZSBfTUFHSUNfU1dBUFBFRCAweGRlMTIwNDk1CisrCisrLyogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgdXNlZCAubW8gKGJpbmFyeSkgZmlsZSBmb3JtYXQuICAqLworKyNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSIDAKKysjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUl9XSVRIX1NZU0RFUF9JIDEKKysKKysvKiBUaGUgZm9sbG93aW5nIGNvbnRvcnRpb25zIGFyZSBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IKKysgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisrICAgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gdXNlIGF1dG9jb25mJ3MgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvLCBidXQKKysgICBhcyBvZiB2ZXJzaW9uIGF1dG9jb25mLTIuMTMsIHRoZSBBQ19DSEVDS19TSVpFT0YgbWFjcm8gZG9lc24ndCB3b3JrCisrICAgd2hlbiBjcm9zcy1jb21waWxpbmcuICAqLworKworKyNpZiBfX1NURENfXworKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorKyNlbmRpZgorKworKy8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCisrICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCisrICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCisrICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKysKKysjaWZuZGVmIFVJTlRfTUFYCisrIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworKyNlbmRpZgorKworKyNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCisrdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworKyNlbHNlCisrIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKysjIGVsc2UKKysjICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworKyMgIGVsc2UKKysgIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworKyAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCisrICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysKKysvKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworK3N0cnVjdCBtb19maWxlX2hlYWRlcgorK3sKKysgIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworKyAgbmxzX3VpbnQzMiBtYWdpYzsKKysgIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKysgIG5sc191aW50MzIgcmV2aXNpb247CisrCisrICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWFqb3IgcmV2aXNpb24gMCBvciAxLiAgKi8KKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBwYWlycy4gICovCisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgb3JpZ190YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiB0cmFuc190YWJfb2Zmc2V0OworKyAgLyogU2l6ZSBvZiBoYXNoIHRhYmxlLiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKysgIC8qIE9mZnNldCBvZiBmaXJzdCBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfb2Zmc2V0OworKworKyAgLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc2VnbWVudHM7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgZGVzY3JpYmluZyBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgc3lzZGVwX3NlZ21lbnRzX29mZnNldDsKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiBvcmlnX3N5c2RlcF90YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgdHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQ7CisrfTsKKysKKysvKiBEZXNjcmlwdG9yIGZvciBzdGF0aWMgc3RyaW5nIGNvbnRhaW5lZCBpbiB0aGUgYmluYXJ5IC5tbyBmaWxlLiAgKi8KKytzdHJ1Y3Qgc3RyaW5nX2Rlc2MKKyt7CisrICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIG5sc191aW50MzIgbGVuZ3RoOworKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKysgIG5sc191aW50MzIgb2Zmc2V0OworK307CisrCisrLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQuICAqLworK3N0cnVjdCBzeXNkZXBfc2VnbWVudAorK3sKKysgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBubHNfdWludDMyIGxlbmd0aDsKKysgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisrICBubHNfdWludDMyIG9mZnNldDsKKyt9OworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZworK3sKKysgIC8qIE9mZnNldCBvZiBzdGF0aWMgc3RyaW5nIHNlZ21lbnRzIGluIGZpbGUuICAqLworKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisrICAvKiBBbHRlcm5hdGluZyBzZXF1ZW5jZSBvZiBzdGF0aWMgYW5kIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuCisrICAgICBUaGUgbGFzdCBzZWdtZW50IGlzIGEgc3RhdGljIHNlZ21lbnQsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHN0cnVjdCBzZWdtZW50X3BhaXIKKysgIHsKKysgICAgLyogU2l6ZSBvZiBzdGF0aWMgc2VnbWVudC4gICovCisrICAgIG5sc191aW50MzIgc2Vnc2l6ZTsKKysgICAgLyogUmVmZXJlbmNlIHRvIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQsIG9yIH4wIGF0IHRoZSBlbmQuICAqLworKyAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysgIH0gc2VnbWVudHNbMV07CisrfTsKKysKKysvKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKysgICByZWdhcmRsZXNzIHdoZXRoZXIgJ2ludCcgaXMgMTYgYml0LCAzMiBiaXQsIG9yIDY0IGJpdC4gICovCisrI2RlZmluZSBTRUdNRU5UU19FTkQgKChubHNfdWludDMyKSB+MCkKKysKKysvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKysKKysjZW5kaWYJLyogZ2V0dGV4dC5oICAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2hhc2gtc3RyaW5nLmgJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvaGFzaC1zdHJpbmcuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzNjczNTc3NiAtMDQwMAorQEAgLTEsMzUgKzEsMjMgQEAKKy0vKiBJbXBsZW1lbnRzIGEgc3RyaW5nIGhhc2hpbmcgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIERlc2NyaXB0aW9uIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0OiBzdHJpbmcgaGFzaGluZyBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTctMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorLSAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKy0gICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfVkFMVUVTX0gKKy0jIGluY2x1ZGUgPHZhbHVlcy5oPgorLSNlbmRpZgorKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpIEFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpICgpCistIyBlbmRpZgorLSNlbmRpZgorLQorIC8qIFdlIGFzc3VtZSB0byBoYXZlIGB1bnNpZ25lZCBsb25nIGludCcgdmFsdWUgd2l0aCBhdCBsZWFzdCAzMiBiaXRzLiAgKi8KKyAjZGVmaW5lIEhBU0hXT1JEQklUUyAzMgorIAorQEAgLTM3LDExICsyNSw4IEBACisgLyogRGVmaW5lcyB0aGUgc28gY2FsbGVkIGBoYXNocGp3JyBmdW5jdGlvbiBieSBQLkouIFdlaW5iZXJnZXIKKyAgICBbc2VlIEFoby9TZXRoaS9VbGxtYW4sIENPTVBJTEVSUzogUHJpbmNpcGxlcywgVGVjaG5pcXVlcyBhbmQgVG9vbHMsCisgICAgMTk4NiwgMTk4NyBCZWxsIFRlbGVwaG9uZSBMYWJvcmF0b3JpZXMsIEluYy5dICAqLworLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhhc2hfc3RyaW5nIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fc3RyX3BhcmFtKSk7CistCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCistaGFzaF9zdHJpbmcgKHN0cl9wYXJhbSkKKy0gICAgIGNvbnN0IGNoYXIgKnN0cl9wYXJhbTsKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKKyB7CisgICB1bnNpZ25lZCBsb25nIGludCBodmFsLCBnOworICAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworQEAgLTUxLDggKzM2LDggQEAKKyAgIHdoaWxlICgqc3RyICE9ICdcMCcpCisgICAgIHsKKyAgICAgICBodmFsIDw8PSA0OworLSAgICAgIGh2YWwgKz0gKHVuc2lnbmVkIGxvbmcpICpzdHIrKzsKKy0gICAgICBnID0gaHZhbCAmICgodW5zaWduZWQgbG9uZykgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisrICAgICAgaHZhbCArPSAodW5zaWduZWQgY2hhcikgKnN0cisrOworKyAgICAgIGcgPSBodmFsICYgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisgICAgICAgaWYgKGcgIT0gMCkKKyAJeworIAkgIGh2YWwgXj0gZyA+PiAoSEFTSFdPUkRCSVRTIC0gOCk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvaW50bC1jb21wYXQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9pbnRsLWNvbXBhdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDQxNzM1MDE2IC0wNDAwCitAQCAtMSw3NiArMSwxMzEgQEAKKyAvKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CisgICAgTGlicmFyeS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMjAwMC0yMDAzIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisrLyogVGhpcyBmaWxlIHJlZGlyZWN0cyB0aGUgZ2V0dGV4dCBmdW5jdGlvbnMgKHdpdGhvdXQgcHJlZml4KSB0byB0aG9zZQorKyAgIGRlZmluZWQgaW4gdGhlIGluY2x1ZGVkIEdOVSBsaWJpbnRsIGxpYnJhcnkgKHdpdGggImxpYmludGxfIiBwcmVmaXgpLgorKyAgIEl0IGlzIGNvbXBpbGVkIGludG8gbGliaW50bCBpbiBvcmRlciB0byBtYWtlIHRoZSBBTV9HTlVfR0VUVEVYVCB0ZXN0CisrICAgb2YgZ2V0dGV4dCA8PSAwLjExLjIgd29yayB3aXRoIHRoZSBsaWJpbnRsIGxpYnJhcnkgPj0gMC4xMS4zIHdoaWNoCisrICAgaGFzIHRoZSByZWRpcmVjdGlvbnMgcHJpbWFyaWx5IGluIHRoZSA8bGliaW50bC5oPiBpbmNsdWRlIGZpbGUuCisrICAgSXQgaXMgYWxzbyBjb21waWxlZCBpbnRvIGxpYmdudWludGwgc28gdGhhdCBsaWJnbnVpbnRsLnNvIGNhbiBiZSB1c2VkCisrICAgYXMgTERfUFJFTE9BRGFibGUgbGlicmFyeSBvbiBnbGliYyBzeXN0ZW1zLCB0byBwcm92aWRlIHRoZSBleHRyYQorKyAgIGZlYXR1cmVzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGliYyBkb24ndCBoYXZlIChuYW1lbHksIGxvZ2dpbmcpLiAgKi8KKysKKyAKKyAjdW5kZWYgZ2V0dGV4dAorICN1bmRlZiBkZ2V0dGV4dAorICN1bmRlZiBkY2dldHRleHQKKysjdW5kZWYgbmdldHRleHQKKysjdW5kZWYgZG5nZXR0ZXh0CisrI3VuZGVmIGRjbmdldHRleHQKKyAjdW5kZWYgdGV4dGRvbWFpbgorICN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kX3RleHRkb21haW5fY29kZXNldAorKworKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKytnZXR0ZXh0IChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gYmluZHRleHRkb21haW5fXyAoZG9tYWlubmFtZSwgZGlybmFtZSk7CisrICByZXR1cm4gbGliaW50bF9nZXR0ZXh0IChtc2dpZCk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWRjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLSAgICAgaW50IGNhdGVnb3J5OworK2RnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gZGNnZXR0ZXh0X18gKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisrICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrZGNnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQorIHsKKy0gIHJldHVybiBkZ2V0dGV4dF9fIChkb21haW5uYW1lLCBtc2dpZCk7CisrICByZXR1cm4gbGliaW50bF9kY2dldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWdldHRleHQgKG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorIHsKKy0gIHJldHVybiBnZXR0ZXh0X18gKG1zZ2lkKTsKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChtc2dpZDEsIG1zZ2lkMiwgbik7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLXRleHRkb21haW4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisgeworLSAgcmV0dXJuIHRleHRkb21haW5fXyAoZG9tYWlubmFtZSk7CisrICByZXR1cm4gbGliaW50bF9kbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuLAorKwkgICAgaW50IGNhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuLCBjYXRlZ29yeSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK3RleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoZG9tYWlubmFtZSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGRvbWFpbm5hbWUsIGNvZGVzZXQpOworIH0KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sMTBuZmxpc3QuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sMTBuZmxpc3QuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ1NzczMjU4NCAtMDQwMAorQEAgLTEsNTIgKzEsNDAgQEAKKy0vKiBIYW5kbGUgbGlzdCBvZiBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc3RwY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIF9HTlVfU09VUkNFCistIyAgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jIGVuZGlmCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfQVJHWl9ICisgIyBpbmNsdWRlIDxhcmd6Lmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgI2luY2x1ZGUgImxvYWRpbmZvLmgiCisgCitAQCAtNjUsMjMgKzUzLDM5IEBACisgLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisgICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBzdHBjcHkoZGVzdCwgc3JjKSBfX3N0cGNweShkZXN0LCBzcmMpCisrIyBpZm5kZWYgc3RwY3B5CisrIyAgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5KGRlc3QsIHNyYykKKysjIGVuZGlmCisgI2Vsc2UKKyAjIGlmbmRlZiBIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7Cisrc3RhdGljIGNoYXIgKnN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpdCBtYXkgYmUgY29uY2F0ZW5hdGVkIHRvIGEgZGlyZWN0b3J5IHBhdGhuYW1lLgorKyAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyMgZGVmaW5lIEhBU19ERVZJQ0UoUCkgXAorKyAgICAoKCgoUClbMF0gPj0gJ0EnICYmIChQKVswXSA8PSAnWicpIHx8ICgoUClbMF0gPj0gJ2EnICYmIChQKVswXSA8PSAneicpKSBcCisrICAgICAmJiAoUClbMV0gPT0gJzonKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgKElTU0xBU0ggKChQKVswXSkgfHwgSEFTX0RFVklDRSAoUCkpCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgSVNTTEFTSCAoKFApWzBdKQorKyNlbmRpZgorKworIC8qIERlZmluZSBmdW5jdGlvbiB3aGljaCBhcmUgdXN1YWxseSBub3QgYXZhaWxhYmxlLiAgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfQ09VTlQKKyAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiBBUkdaLiAgKi8KKy1zdGF0aWMgc2l6ZV90IGFyZ3pfY291bnRfXyBQQVJBTVMgKChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKSk7CistCisgc3RhdGljIHNpemVfdAorLWFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorLSAgICAgY29uc3QgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CisrYXJnel9jb3VudF9fIChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKQorIHsKKyAgIHNpemVfdCBjb3VudCA9IDA7CisgICB3aGlsZSAobGVuID4gMCkKK0BAIC05NSwxOCArOTksMTcgQEAKKyB9CisgIyB1bmRlZiBfX2FyZ3pfY291bnQKKyAjIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBhcmd6X2NvdW50X18gKGFyZ3osIGxlbikKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X2NvdW50KGFyZ3osIGxlbikgSU5UVVNFKF9fYXJnel9jb3VudCkgKGFyZ3osIGxlbikKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfQ09VTlQgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfU1RSSU5HSUZZCisgLyogTWFrZSAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9yIEFSR1ogcHJpbnRhYmxlIGJ5IGNvbnZlcnRpbmcgYWxsIHRoZSAnXDAncworICAgIGV4Y2VwdCB0aGUgbGFzdCBpbnRvIHRoZSBjaGFyYWN0ZXIgU0VQLiAgKi8KKy1zdGF0aWMgdm9pZCBhcmd6X3N0cmluZ2lmeV9fIFBBUkFNUyAoKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApKTsKKy0KKyBzdGF0aWMgdm9pZAorLWFyZ3pfc3RyaW5naWZ5X18gKGFyZ3osIGxlbiwgc2VwKQorLSAgICAgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CistICAgICBpbnQgc2VwOworK2FyZ3pfc3RyaW5naWZ5X18gKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApCisgeworICAgd2hpbGUgKGxlbiA+IDApCisgICAgIHsKK0BAIC0xMTksMTcgKzEyMiwxNiBAQAorIH0KKyAjIHVuZGVmIF9fYXJnel9zdHJpbmdpZnkKKyAjIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBhcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgXAorKyAgSU5UVVNFKF9fYXJnel9zdHJpbmdpZnkpIChhcmd6LCBsZW4sIHNlcCkKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfU1RSSU5HSUZZICovCisgCisgI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX05FWFQKKy1zdGF0aWMgY2hhciAqYXJnel9uZXh0X18gUEFSQU1TICgoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLAorLQkJCQkgIGNvbnN0IGNoYXIgKmVudHJ5KSk7CistCisgc3RhdGljIGNoYXIgKgorLWFyZ3pfbmV4dF9fIChhcmd6LCBhcmd6X2xlbiwgZW50cnkpCistICAgICBjaGFyICphcmd6OworLSAgICAgc2l6ZV90IGFyZ3pfbGVuOworLSAgICAgY29uc3QgY2hhciAqZW50cnk7CisrYXJnel9uZXh0X18gKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY29uc3QgY2hhciAqZW50cnkpCisgeworICAgaWYgKGVudHJ5KQorICAgICB7CitAQCAtMTUwLDExICsxNTIsOCBAQAorIAorIAorIC8qIFJldHVybiBudW1iZXIgb2YgYml0cyBzZXQgaW4gWC4gICovCistc3RhdGljIGludCBwb3AgUEFSQU1TICgoaW50IHgpKTsKKy0KKyBzdGF0aWMgaW5saW5lIGludAorLXBvcCAoeCkKKy0gICAgIGludCB4OworK3BvcCAoaW50IHgpCisgeworICAgLyogV2UgYXNzdW1lIHRoYXQgbm8gbW9yZSB0aGFuIDE2IGJpdHMgYXJlIHVzZWQuICAqLworICAgeCA9ICgoeCAmIH4weDU1NTUpID4+IDEpICsgKHggJiAweDU1NTUpOworQEAgLTE2NywzMSArMTY2LDI3IEBACisgCisgDAorIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sIG1hc2ssIGxhbmd1YWdlLAorLQkJICAgIHRlcnJpdG9yeSwgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKy0JCSAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIGRvX2FsbG9jYXRlKQorLSAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3Q7CistICAgICBjb25zdCBjaGFyICpkaXJsaXN0OworLSAgICAgc2l6ZV90IGRpcmxpc3RfbGVuOworLSAgICAgaW50IG1hc2s7CistICAgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKy0gICAgIGNvbnN0IGNoYXIgKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICptb2RpZmllcjsKKy0gICAgIGNvbnN0IGNoYXIgKnNwZWNpYWw7CistICAgICBjb25zdCBjaGFyICpzcG9uc29yOworLSAgICAgY29uc3QgY2hhciAqcmV2aXNpb247CistICAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKy0gICAgIGludCBkb19hbGxvY2F0ZTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwKKysJCSAgICBpbnQgbWFzaywgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkKKyB7CisgICBjaGFyICphYnNfZmlsZW5hbWU7CistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpsYXN0ID0gTlVMTDsKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsYXN0cDsKKyAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgIGNoYXIgKmNwOworKyAgc2l6ZV90IGRpcmxpc3RfY291bnQ7CisgICBzaXplX3QgZW50cmllczsKKyAgIGludCBjbnQ7CisgCisrICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCisrICAgICBESVJMSVNULiAgKi8KKysgIGlmIChJU19BQlNPTFVURV9QQVRIIChsYW5ndWFnZSkpCisrICAgIGRpcmxpc3RfbGVuID0gMDsKKysKKyAgIC8qIEFsbG9jYXRlIHJvb20gZm9yIHRoZSBmdWxsIGZpbGUgbmFtZS4gICovCisgICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCisgCQkJCSAgKyBzdHJsZW4gKGxhbmd1YWdlKQorQEAgLTIwOSw3ICsyMDQsNyBAQAorIAkJCQkgICsgKCgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCisgCQkJCSAgICAgIHx8IChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwKQorIAkJCQkgICAgID8gKDEgKyAoKG1hc2sgJiBDRU5fU1BPTlNPUikgIT0gMAorLQkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgKyAxIDogMCkKKysJCQkJCSAgICAgPyBzdHJsZW4gKHNwb25zb3IpIDogMCkKKyAJCQkJCSsgKChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwCisgCQkJCQkgICA/IHN0cmxlbiAocmV2aXNpb24pICsgMSA6IDApKSA6IDApCisgCQkJCSAgKyAxICsgc3RybGVuIChmaWxlbmFtZSkgKyAxKTsKK0BAIC0yMTcsMTQgKzIxMiwxNiBAQAorICAgaWYgKGFic19maWxlbmFtZSA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIHJldHZhbCA9IE5VTEw7CistICBsYXN0ID0gTlVMTDsKKy0KKyAgIC8qIENvbnN0cnVjdCBmaWxlIG5hbWUuICAqLworLSAgbWVtY3B5IChhYnNfZmlsZW5hbWUsIGRpcmxpc3QsIGRpcmxpc3RfbGVuKTsKKy0gIF9fYXJnel9zdHJpbmdpZnkgKGFic19maWxlbmFtZSwgZGlybGlzdF9sZW4sICc6Jyk7CistICBjcCA9IGFic19maWxlbmFtZSArIChkaXJsaXN0X2xlbiAtIDEpOworLSAgKmNwKysgPSAnLyc7CisrICBjcCA9IGFic19maWxlbmFtZTsKKysgIGlmIChkaXJsaXN0X2xlbiA+IDApCisrICAgIHsKKysgICAgICBtZW1jcHkgKGNwLCBkaXJsaXN0LCBkaXJsaXN0X2xlbik7CisrICAgICAgX19hcmd6X3N0cmluZ2lmeSAoY3AsIGRpcmxpc3RfbGVuLCBQQVRIX1NFUEFSQVRPUik7CisrICAgICAgY3AgKz0gZGlybGlzdF9sZW47CisrICAgICAgY3BbLTFdID0gJy8nOworKyAgICB9CisrCisgICBjcCA9IHN0cGNweSAoY3AsIGxhbmd1YWdlKTsKKyAKKyAgIGlmICgobWFzayAmIFRFUlJJVE9SWSkgIT0gMCkKK0BAIC0yNzEsNyArMjY4LDcgQEAKKyAKKyAgIC8qIExvb2sgaW4gbGlzdCBvZiBhbHJlYWR5IGxvYWRlZCBkb21haW5zIHdoZXRoZXIgaXQgaXMgYWxyZWFkeQorICAgICAgYXZhaWxhYmxlLiAgKi8KKy0gIGxhc3QgPSBOVUxMOworKyAgbGFzdHAgPSBsMTBuZmlsZV9saXN0OworICAgZm9yIChyZXR2YWwgPSAqbDEwbmZpbGVfbGlzdDsgcmV0dmFsICE9IE5VTEw7IHJldHZhbCA9IHJldHZhbC0+bmV4dCkKKyAgICAgaWYgKHJldHZhbC0+ZmlsZW5hbWUgIT0gTlVMTCkKKyAgICAgICB7CitAQCAtMjg2LDcgKzI4Myw3IEBACisgCSAgICBicmVhazsKKyAJICB9CisgCistCWxhc3QgPSByZXR2YWw7CisrCWxhc3RwID0gJnJldHZhbC0+bmV4dDsKKyAgICAgICB9CisgCisgICBpZiAocmV0dmFsICE9IE5VTEwgfHwgZG9fYWxsb2NhdGUgPT0gMCkKK0BAIC0yOTUsNDggKzI5Miw2NiBAQAorICAgICAgIHJldHVybiByZXR2YWw7CisgICAgIH0KKyAKKy0gIHJldHZhbCA9IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopCistICAgIG1hbGxvYyAoc2l6ZW9mICgqcmV0dmFsKSArIChfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKQorLQkJCQkqICgxIDw8IHBvcCAobWFzaykpCistCQkJCSogc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopKSk7CisrICBkaXJsaXN0X2NvdW50ID0gKGRpcmxpc3RfbGVuID4gMCA/IF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pIDogMSk7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBsb2FkZWRfbDEwbmZpbGUuICAqLworKyAgcmV0dmFsID0KKysgICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKysgICAgbWFsbG9jIChzaXplb2YgKCpyZXR2YWwpCisrCSAgICArICgoKGRpcmxpc3RfY291bnQgPDwgcG9wIChtYXNrKSkgKyAoZGlybGlzdF9jb3VudCA+IDEgPyAxIDogMCkpCisrCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIHJldHZhbC0+ZmlsZW5hbWUgPSBhYnNfZmlsZW5hbWU7CistICByZXR2YWwtPmRlY2lkZWQgPSAoX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikgIT0gMQorKworKyAgLyogV2Ugc2V0IHJldHZhbC0+ZGF0YSB0byBOVUxMIGhlcmU7IGl0IGlzIGZpbGxlZCBpbiBsYXRlci4KKysgICAgIFNldHRpbmcgcmV0dmFsLT5kZWNpZGVkIHRvIDEgaGVyZSBtZWFucyB0aGF0IHJldHZhbCBkb2VzIG5vdAorKyAgICAgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZSAoZGlybGlzdF9jb3VudCA+IDEpIG9yIGlzIG5vdCB3b3J0aAorKyAgICAgbG9va2luZyB1cCAoaWYgYW4gdW5ub3JtYWxpemVkIGNvZGVzZXQgd2FzIHNwZWNpZmllZCkuICAqLworKyAgcmV0dmFsLT5kZWNpZGVkID0gKGRpcmxpc3RfY291bnQgPiAxCisgCQkgICAgIHx8ICgobWFzayAmIFhQR19DT0RFU0VUKSAhPSAwCisgCQkJICYmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMCkpOworICAgcmV0dmFsLT5kYXRhID0gTlVMTDsKKyAKKy0gIGlmIChsYXN0ID09IE5VTEwpCistICAgIHsKKy0gICAgICByZXR2YWwtPm5leHQgPSAqbDEwbmZpbGVfbGlzdDsKKy0gICAgICAqbDEwbmZpbGVfbGlzdCA9IHJldHZhbDsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcmV0dmFsLT5uZXh0ID0gbGFzdC0+bmV4dDsKKy0gICAgICBsYXN0LT5uZXh0ID0gcmV0dmFsOworLSAgICB9CisrICByZXR2YWwtPm5leHQgPSAqbGFzdHA7CisrICAqbGFzdHAgPSByZXR2YWw7CisgCisgICBlbnRyaWVzID0gMDsKKy0gIC8qIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IHRoZSBSRVRWQUwgZW50cnkgY29ycmVzcG9uZHMgbm90IHRvCistICAgICBhIHJlYWwgZmlsZS4gIFNvIHdlIGhhdmUgdG8gdXNlIHRoZSBESVJMSVNUIHNlcGFyYXRpb24gbWVjaGFuaXNtCistICAgICBvZiB0aGUgaW5uZXIgbG9vcC4gICovCistICBjbnQgPSBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA9PSAxID8gbWFzayAtIDEgOiBtYXNrOworLSAgZm9yICg7IGNudCA+PSAwOyAtLWNudCkKKysgIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCisrICAgICBJZiB0aGUgRElSTElTVCBpcyBhIHJlYWwgbGlzdCAoaS5lLiBESVJMSVNUX0NPVU5UID4gMSksIHRoZSBSRVRWQUwKKysgICAgIGVudHJ5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGU7IHJldHZhbC0+ZmlsZW5hbWUgY29udGFpbnMKKysgICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKysgICAgIGFjcm9zcyBhbGwgYml0IHBhdHRlcm5zIGRvbWluYXRlZCBieSBNQVNLLgorKyAgICAgSWYgdGhlIERJUkxJU1QgaXMgYSBzaW5nbGUgZGlyZWN0b3J5IG9yIGVudGlyZWx5IHJlZHVuZGFudCAoaS5lLgorKyAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKysgICAgIE1BU0ssIGV4Y2x1ZGluZyBNQVNLIGl0c2VsZi4KKysgICAgIEluIGVpdGhlciBjYXNlLCB3ZSBsb29wIGRvd24gZnJvbSBNQVNLIHRvIDAuICBUaGlzIGhhcyB0aGUgZWZmZWN0CisrICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorKyAgICAgZmlyc3QgdGhlIG1vZGlmaWVyLCB0aGVuIHRoZSB0ZXJyaXRvcnksIHRoZW4gdGhlIGNvZGVzZXQsIHRoZW4gdGhlCisrICAgICBub3JtYWxpemVkX2NvZGVzZXQuICAqLworKyAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorICAgICBpZiAoKGNudCAmIH5tYXNrKSA9PSAwCisgCSYmICgoY250ICYgQ0VOX1NQRUNJRklDKSA9PSAwIHx8IChjbnQgJiBYUEdfU1BFQ0lGSUMpID09IDApCisgCSYmICgoY250ICYgWFBHX0NPREVTRVQpID09IDAgfHwgKGNudCAmIFhQR19OT1JNX0NPREVTRVQpID09IDApKQorICAgICAgIHsKKy0JLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCistCWNoYXIgKmRpciA9IE5VTEw7CisrCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKysJICB7CisrCSAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIHRoZSBESVJMSVNULiAgKi8KKysJICAgIGNoYXIgKmRpciA9IE5VTEw7CisgCistCXdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorLQkgICAgICAgIT0gTlVMTCkKKysJICAgIHdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorKwkJICAgIT0gTlVMTCkKKysJICAgICAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorKwkJPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpciwgc3RybGVuIChkaXIpICsgMSwKKysJCQkJICAgICAgY250LCBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkJCQkgICAgICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorKwkJCQkgICAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIDEpOworKwkgIH0KKysJZWxzZQorIAkgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKy0JICAgID0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXIsIHN0cmxlbiAoZGlyKSArIDEsIGNudCwKKy0JCQkJICBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkgICAgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpcmxpc3QsIGRpcmxpc3RfbGVuLAorKwkJCQkgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKyAJCQkJICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorIAkJCQkgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisgICAgICAgfQorQEAgLTM0NywxMSArMzYyLDEwIEBACisgDAorIC8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKyAgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorLSAgIG5hbWVzLiAgKi8KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyBjb25zdCBjaGFyICoKKy1fbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvZGVzZXQsIG5hbWVfbGVuKQorLSAgICAgY29uc3QgY2hhciAqY29kZXNldDsKKy0gICAgIHNpemVfdCBuYW1lX2xlbjsKKytfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKKyB7CisgICBpbnQgbGVuID0gMDsKKyAgIGludCBvbmx5X2RpZ2l0ID0gMTsKK0BAIC0zNjAsMTEgKzM3NCwxMSBAQAorICAgc2l6ZV90IGNudDsKKyAKKyAgIGZvciAoY250ID0gMDsgY250IDwgbmFtZV9sZW47ICsrY250KQorLSAgICBpZiAoaXNhbG51bSAoY29kZXNldFtjbnRdKSkKKysgICAgaWYgKGlzYWxudW0gKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorICAgICAgIHsKKyAJKytsZW47CisgCistCWlmIChpc2FscGhhIChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgb25seV9kaWdpdCA9IDA7CisgICAgICAgfQorIAorQEAgLTM3OCw5ICszOTIsOSBAQAorIAl3cCA9IHJldHZhbDsKKyAKKyAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKy0JaWYgKGlzYWxwaGEgKGNvZGVzZXRbY250XSkpCistCSAgKndwKysgPSB0b2xvd2VyIChjb2Rlc2V0W2NudF0pOworLQllbHNlIGlmIChpc2RpZ2l0IChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisrCSAgKndwKysgPSB0b2xvd2VyICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKTsKKysJZWxzZSBpZiAoaXNkaWdpdCAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgKndwKysgPSBjb2Rlc2V0W2NudF07CisgCisgICAgICAgKndwID0gJ1wwJzsKK0BAIC0zOTgsOSArNDEyLDcgQEAKKyAgICB0byBiZSBkZWZpbmVkLiAgKi8KKyAjaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorIHN0YXRpYyBjaGFyICoKKy1zdHBjcHkgKGRlc3QsIHNyYykKKy0gICAgIGNoYXIgKmRlc3Q7CistICAgICBjb25zdCBjaGFyICpzcmM7Cisrc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCisgeworICAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorICAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGliZ2V0dGV4dC5oCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xpYmdldHRleHQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTgyICswLDAgQEAKKy0vKiBNZXNzYWdlIGNhdGFsb2dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0vKiBCZWNhdXNlIG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKSB3ZSBzb21ldGltZXMgaGF2ZSB0byBpbmNsdWRlCistICAgdGhlIHN5c3RlbXMgbGliaW50bC5oIGFzIHdlbGwgYXMgdGhpcyBmaWxlIHdlIGhhdmUgbW9yZSBjb21wbGV4CistICAgaW5jbHVkZSBwcm90ZWN0aW9uIGFib3ZlLiAgQnV0IHRoZSBzeXN0ZW1zIGhlYWRlciBtaWdodCBwZXJoYXBzIGFsc28KKy0gICBkZWZpbmUgX0xJQklOVExfSCBhbmQgdGhlcmVmb3JlIHdlIGhhdmUgdG8gcHJvdGVjdCB0aGUgZGVmaW5pdGlvbiBoZXJlLiAgKi8KKy0KKy0jaWYgIWRlZmluZWQgKF9MSUJJTlRMX0gpIHx8ICFkZWZpbmVkIChfTElCR0VUVEVYVF9IKQorLSNpZiAhZGVmaW5lZCAoX0xJQklOVExfSCkKKy0jIGRlZmluZSBfTElCSU5UTF9ICTEKKy0jZW5kaWYKKy0jZGVmaW5lIF9MSUJHRVRURVhUX0gJMQorLQorLS8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorLSAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworLSNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorLQorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgSEFWRV9MT0NBTEVfSAorLSMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCistCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoYXJncykgYXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmbmRlZiBOVUxMCistIyBpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fR05VQ19fCistIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCistIyBlbHNlCistIyAgZGVmaW5lIE5VTEwgKDApCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiAhSEFWRV9MQ19NRVNTQUdFUworLS8qIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZXR0ZXh0KCkgYW5kIGRnZXR0ZXh0KCkKKy0gICBmdW5jdGlvbi4gIEJ1dCBzb21lIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoaXMgZGVmaW5lZC4gIERlZmluZSBpdAorLSAgIHRvIGEgZGVmYXVsdCB2YWx1ZS4gICovCistIyBkZWZpbmUgTENfTUVTU0FHRVMgKC0xKQorLSNlbmRpZgorLQorLQorLS8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0dGV4dC11c2luZy1jYXRnZXRzIGludGVyZmFjZS4gIERlcml2ZWQgZnJvbQorLSAgIEppbSBNZXllcmluZydzIGxpYmludGwuaC4gICovCistc3RydWN0IF9tc2dfZW50CisteworLSAgY29uc3QgY2hhciAqX21zZzsKKy0gIGludCBfbXNnX251bWJlcjsKKy19OworLQorLQorLSNpZiBIQVZFX0NBVEdFVFMKKy0vKiBUaGVzZSB0d28gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSBhdXRvbWF0aWNhbGx5IGJ5IHBvLXRvLXRibC5zZWQKKy0gICBnZW5lcmF0ZWQgZmlsZSBgY2F0LWlkLXRibC5jJy4gICovCistZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXNnX2VudCBfbXNnX3RibFtdOworLWV4dGVybiBpbnQgX21zZ190YmxfbGVuZ3RoOworLSNlbmRpZgorLQorLQorLS8qIEZvciBhdXRvbWF0aWNhbCBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzIHNvbWV0aW1lcyBubyByZWFsCistICAgdHJhbnNsYXRpb24gaXMgbmVlZGVkLiAgSW5zdGVhZCB0aGUgc3RyaW5nIGl0c2VsZiBpcyB0aGUgcmVzdWx0LiAgKi8KKy0jZGVmaW5lIGdldHRleHRfbm9vcChTdHIpIChTdHIpCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorLSAgIHRleHQpLiAgKi8KKy1leHRlcm4gY2hhciAqZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CistICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKy1leHRlcm4gY2hhciAqZGdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0X18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgY29uc3QgY2hhciAqX19tc2dpZCkpOworLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorLSAgIGxvY2FsZS4gICovCistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCistCQkJCWludCBfX2NhdGVnb3J5KSk7CistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX21zZ2lkLCBpbnQgX19jYXRlZ29yeSkpOworLQorLQorLS8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorLSAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCistICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCistZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CistZXh0ZXJuIGNoYXIgKnRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKKy0KKy0vKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKy0gICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCistZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy1leHRlcm4gY2hhciAqYmluZHRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy0KKy0jaWYgRU5BQkxFX05MUworLQorLS8qIFNvbGFyaXMgMi4zIGhhcyB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBidXQgZGNnZXR0ZXh0IGlzIG1pc3NpbmcuCistICAgU28gd2Ugb21pdCB0aGlzIG9wdGltaXphdGlvbiBmb3IgU29sYXJpcyAyLjMuICBCVFcsIFNvbGFyaXMgMi40CistICAgaGFzIGRjZ2V0dGV4dC4gICovCistIyBpZiAhSEFWRV9DQVRHRVRTICYmICghSEFWRV9HRVRURVhUIHx8IEhBVkVfRENHRVRURVhUKQorLQorLSMgIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKQkJCQkJCSAgICAgIFwKKy0gICAgIGRnZXR0ZXh0IChOVUxMLCBNc2dpZCkKKy0KKy0jICBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpCQkJCQkgICAgICBcCistICAgICBkY2dldHRleHQgKERvbWFpbm5hbWUsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKy0KKy0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNworLS8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gbG9hZG1zZ2NhdC5jLiAgV2UgbmVlZCBhIHNpZ24sCistICAgd2hldGhlciBhIG5ldyBjYXRhbG9nIHdhcyBsb2FkZWQsIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYWxsCistICAgdHJhbnNsYXRpb25zLiAgKi8KKy1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CistCistIyAgIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KQkJCSAgICAgIFwKKy0gIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKy0gICAoewkJCQkJCQkJCSAgICAgIFwKKy0gICAgIGNoYXIgKl9fcmVzdWx0OwkJCQkJCQkgICAgICBcCistICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKE1zZ2lkKSkJCQkJCSAgICAgIFwKKy0gICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgc3RhdGljIGNoYXIgKl9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKy0JIHN0YXRpYyBpbnQgX19jYXRhbG9nX2NvdW50ZXJfXzsJCQkJICAgICAgXAorLQkgaWYgKCEgX190cmFuc2xhdGlvbl9fIHx8IF9fY2F0YWxvZ19jb3VudGVyX18gIT0gX25sX21zZ19jYXRfY250cikgICAgXAorLQkgICB7CQkJCQkJCQkgICAgICBcCistCSAgICAgX190cmFuc2xhdGlvbl9fID0JCQkJCQkgICAgICBcCistCSAgICAgICBkY2dldHRleHRfXyAoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KTsJCSAgICAgIFwKKy0JICAgICBfX2NhdGFsb2dfY291bnRlcl9fID0gX25sX21zZ19jYXRfY250cjsJCQkgICAgICBcCistCSAgIH0JCQkJCQkJCSAgICAgIFwKKy0JIF9fcmVzdWx0ID0gX190cmFuc2xhdGlvbl9fOwkJCQkJICAgICAgXAorLSAgICAgICB9CQkJCQkJCQkgICAgICBcCistICAgICBlbHNlCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fcmVzdWx0ID0gZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCistICAgICBfX3Jlc3VsdDsJCQkJCQkJCSAgICAgIFwKKy0gICAgfSkpCistIyAgZW5kaWYKKy0jIGVuZGlmCistCistI2Vsc2UKKy0KKy0jIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKSAoTXNnaWQpCistIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpIChNc2dpZCkKKy0jIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoTXNnaWQpCistIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSB3aGlsZSAoMCkgLyogbm90aGluZyAqLworLSMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbm5hbWUsIERpcm5hbWUpIHdoaWxlICgwKSAvKiBub3RoaW5nICovCistCistI2VuZGlmCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorLSNlbmRpZgorLQorLSNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xpYmdudWludGwuaC5pbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saWJnbnVpbnRsLmguaW4JMjAwNC0wOS0xMiAxNDo0MDozNC40NjI3MzE4MjQgLTA0MDAKK0BAIC0wLDAgKzEsMzgzIEBACisrLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfTElCSU5UTF9ICisrI2RlZmluZSBfTElCSU5UTF9ICTEKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrLyogVGhlIExDX01FU1NBR0VTIGxvY2FsZSBjYXRlZ29yeSBpcyB0aGUgY2F0ZWdvcnkgdXNlZCBieSB0aGUgZnVuY3Rpb25zCisrICAgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpLiAgSXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLCBidXQgbm90IGluIEFOU0kgQy4KKysgICBPbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgZGVmaW5lIGl0LCB1c2UgYW4gYXJiaXRyYXJ5IHZhbHVlIGluc3RlYWQuCisrICAgT24gU29sYXJpcywgPGxvY2FsZS5oPiBkZWZpbmVzIF9fTE9DQUxFX0ggKG9yIF9MT0NBTEVfSCBpbiBTb2xhcmlzIDIuNSkKKysgICB0aGVuIGluY2x1ZGVzIDxsaWJpbnRsLmg+IChpLmUuIHRoaXMgZmlsZSEpIGFuZCB0aGVuIG9ubHkgZGVmaW5lcworKyAgIExDX01FU1NBR0VTLiAgVG8gYXZvaWQgYSByZWRlZmluaXRpb24gd2FybmluZywgZG9uJ3QgZGVmaW5lIExDX01FU1NBR0VTCisrICAgaW4gdGhpcyBjYXNlLiAgKi8KKysjaWYgIWRlZmluZWQgTENfTUVTU0FHRVMgJiYgIShkZWZpbmVkIF9fTE9DQUxFX0ggfHwgKGRlZmluZWQgX0xPQ0FMRV9IICYmIGRlZmluZWQgX19zdW4pKQorKyMgZGVmaW5lIExDX01FU1NBR0VTIDE3MjkKKysjZW5kaWYKKysKKysvKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKysgICBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0LiAgKi8KKysjZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKysKKysvKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBwb3J0ZWQgZmlsZSBmb3JtYXRzLiAgUmV0dXJucyB0aGUKKysgICBtYXhpbXVtIG1pbm9yIHJldmlzaW9uIG51bWJlciBzdXBwb3J0ZWQgZm9yIGEgZ2l2ZW4gbWFqb3IgcmV2aXNpb24uICAqLworKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpIFwKKysgICgobWFqb3IpID09IDAgPyAxIDogLTEpCisrCisrLyogUmVzb2x2ZSBhIHBsYXRmb3JtIHNwZWNpZmljIGNvbmZsaWN0IG9uIERKR1BQLiAgR05VIGdldHRleHQgdGFrZXMKKysgICBwcmVjZWRlbmNlIG92ZXIgX2NvbmlvX2dldHRleHQuICAqLworKyNpZmRlZiBfX0RKR1BQX18KKysjIHVuZGVmIGdldHRleHQKKysjZW5kaWYKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBXZSByZWRpcmVjdCB0aGUgZnVuY3Rpb25zIHRvIHRob3NlIHByZWZpeGVkIHdpdGggImxpYmludGxfIi4gIFRoaXMgaXMKKysgICBuZWNlc3NhcnksIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIGRlZmluZSBnZXR0ZXh0L3RleHRkb21haW4vLi4uIGluIHRoZSBDCisrICAgbGlicmFyeSAobmFtZWx5LCBTb2xhcmlzIDIuNCBhbmQgbmV3ZXIsIGFuZCBHTlUgbGliYyAyLjAgYW5kIG5ld2VyKS4KKysgICBJZiB3ZSB1c2VkIHRoZSB1bnByZWZpeGVkIG5hbWVzLCB0aGVyZSB3b3VsZCBiZSBjYXNlcyB3aGVyZSB0aGUKKysgICBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiB0aGUgbGliaW50bC5zbworKyAgIHNoYXJlZCBsaWJyYXJ5LiAgUmVjYWxsIHRoYXQgb24gRUxGIHN5c3RlbXMsIHRoZSBzeW1ib2xzIGFyZSBsb29rZWQKKysgICB1cCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorKyAgICAgMS4gaW4gdGhlIGV4ZWN1dGFibGUsCisrICAgICAyLiBpbiB0aGUgc2hhcmVkIGxpYnJhcmllcyBzcGVjaWZpZWQgb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lLCBpbiBvcmRlciwKKysgICAgIDMuIGluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rCisrICAgICAgICBjb21tYW5kIGxpbmUsCisrICAgICA0LiBpbiB0aGUgZGxvcGVuKCllZCBzaGFyZWQgbGlicmFyaWVzLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCisrICAgICAgICBkbG9wZW4oKWVkLgorKyAgIFRoZSBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiBsaWJpbnRsLnNvIGlmCisrICAgZWl0aGVyCisrICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYW5kIC1saW50bCBpc24ndCwgb3IKKysgICAgICogLWxjIGlzIGdpdmVuIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSBiZWZvcmUgLWxpbnRsLCBvcgorKyAgICAgKiBsaWJpbnRsLnNvIGlzIGEgZGVwZW5kZW5jeSBvZiBhIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcnkgYnV0IG5vdAorKyAgICAgICBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lLgorKyAgIFNpbmNlIFNvbGFyaXMgZ2V0dGV4dCgpIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBHTlUgZ2V0dGV4dCgpLCB0aGlzCisrICAgd291bGQgYmUgdW5hY2NlcHRhYmxlLgorKworKyAgIFRoZSByZWRpcmVjdGlvbiBoYXBwZW5zIGJ5IGRlZmF1bHQgdGhyb3VnaCBtYWNyb3MgaW4gQywgc28gdGhhdCAmZ2V0dGV4dAorKyAgIGlzIGluZGVwZW5kZW50IG9mIHRoZSBjb21waWxhdGlvbiB1bml0LCBidXQgdGhyb3VnaCBpbmxpbmUgZnVuY3Rpb25zIGluCisrICAgQysrLCBpbiBvcmRlciBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIG5hbWUgbWFuZ2xpbmcgb2YgY2xhc3MgZmllbGRzIG9yCisrICAgY2xhc3MgbWV0aG9kcyBjYWxsZWQgJ2dldHRleHQnLiAgKi8KKysKKysvKiBUaGUgdXNlciBjYW4gZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORSBvciBfSU5UTF9SRURJUkVDVF9NQUNST1MuCisrICAgSWYgaGUgZG9lc24ndCwgd2UgY2hvb3NlIHRoZSBtZXRob2QuICBBIHRoaXJkIHBvc3NpYmxlIG1ldGhvZCBpcworKyAgIF9JTlRMX1JFRElSRUNUX0FTTSwgc3VwcG9ydGVkIG9ubHkgYnkgR0NDLiAgKi8KKysjaWYgIShkZWZpbmVkIF9JTlRMX1JFRElSRUNUX0lOTElORSB8fCBkZWZpbmVkIF9JTlRMX1JFRElSRUNUX01BQ1JPUykKKysjIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fICYmICFkZWZpbmVkIF9fTUlOR1czMl9fICYmICEoX19HTlVDX18gPT0gMiAmJiBkZWZpbmVkIF9BSVgpICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX0FTTQorKyMgZWxzZQorKyMgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKysjICBlbHNlCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysvKiBBdXhpbGlhcnkgbWFjcm9zLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCisrIyBkZWZpbmUgX0lOVExfQVNNKGNuYW1lKSBfX2FzbV9fIChfSU5UTF9BU01OQU1FIChfX1VTRVJfTEFCRUxfUFJFRklYX18sICNjbmFtZSkpCisrIyBkZWZpbmUgX0lOVExfQVNNTkFNRShwcmVmaXgsY25hbWVzdHJpbmcpIF9JTlRMX1NUUklOR0lGWSAocHJlZml4KSBjbmFtZXN0cmluZworKyMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKysjZWxzZQorKyMgZGVmaW5lIF9JTlRMX0FTTShjbmFtZSkKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisrICAgdGV4dCkuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGdldHRleHQgbGliaW50bF9nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZGdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRnZXR0ZXh0IGxpYmludGxfZGdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKysgICBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkJaW50IF9fY2F0ZWdvcnkpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJICAgICAgIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkLCBfX2NhdGVnb3J5KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZGNnZXR0ZXh0IGxpYmludGxfZGNnZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCWludCBfX2NhdGVnb3J5KQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysKKysvKiBTaW1pbGFyIHRvIGBnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorKyAgIG51bWJlciBOLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIG5nZXR0ZXh0IGxpYmludGxfbmdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9uZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogU2ltaWxhciB0byBgZGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisrCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorKwkJCSAgICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRuZ2V0dGV4dCBsaWJpbnRsX2RuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQljb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZG5nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBTaW1pbGFyIHRvIGBkY2dldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24sIF9fY2F0ZWdvcnkpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RjbmdldHRleHQpOworKyNlbmRpZgorKworKworKy8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorKyAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCisrICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX3RleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoX19kb21haW5uYW1lKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgdGV4dGRvbWFpbiBsaWJpbnRsX3RleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfdGV4dGRvbWFpbik7CisrI2VuZGlmCisrCisrLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisrICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUsIF9fZGlybmFtZSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluIGxpYmludGxfYmluZHRleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19kaXJuYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfYmluZHRleHRkb21haW4pOworKyNlbmRpZgorKworKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKysgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fZG9tYWlubmFtZSwgX19jb2Rlc2V0KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCk7CisrI2VuZGlmCisrCisrCisrLyogU3VwcG9ydCBmb3IgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMgaW4gKnByaW50ZigpLCBmb2xsb3dpbmcgdGhlCisrICAgUE9TSVgvWFNJIHNwZWNpZmljYXRpb24uCisrICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CisrICAgaW4gc291cmNlIGZpbGVzIHRoYXQgI2luY2x1ZGUgPGxpYmludGwuaD4gb3IgI2luY2x1ZGUgImdldHRleHQuaCIuCisrICAgUGFja2FnZXMgdGhhdCB1c2UgKnByaW50ZigpIGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IHJlZmVyIHRvIF8oKQorKyAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKysgICBvZiBfKCkgb3IgZ2V0dGV4dCgpIG5lZWQgdG8gYWRkIHRoaXMgI2luY2x1ZGUuICBPaCB3ZWxsLiAgKi8KKysKKysjaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKysjIGluY2x1ZGUgPHN0ZGFyZy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDx2YXJhcmdzLmg+CisrI2VuZGlmCisrCisrI3VuZGVmIGZwcmludGYKKysjZGVmaW5lIGZwcmludGYgbGliaW50bF9mcHJpbnRmCisrZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdmZwcmludGYKKysjZGVmaW5lIHZmcHJpbnRmIGxpYmludGxfdmZwcmludGYKKytleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHByaW50ZgorKyNkZWZpbmUgcHJpbnRmIGxpYmludGxfcHJpbnRmCisrZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnByaW50ZgorKyNkZWZpbmUgdnByaW50ZiBsaWJpbnRsX3ZwcmludGYKKytleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHNwcmludGYKKysjZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCisrZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnNwcmludGYKKysjZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKKytleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2lmIEBIQVZFX1NOUFJJTlRGQAorKworKyN1bmRlZiBzbnByaW50ZgorKyNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorK2V4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZzbnByaW50ZgorKyNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCisrZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNpZiBASEFWRV9BU1BSSU5URkAKKysKKysjdW5kZWYgYXNwcmludGYKKysjZGVmaW5lIGFzcHJpbnRmIGxpYmludGxfYXNwcmludGYKKytleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZhc3ByaW50ZgorKyNkZWZpbmUgdmFzcHJpbnRmIGxpYmludGxfdmFzcHJpbnRmCisrZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2VuZGlmCisrCisrI2lmIEBIQVZFX1dQUklOVEZACisrCisrI3VuZGVmIGZ3cHJpbnRmCisrI2RlZmluZSBmd3ByaW50ZiBsaWJpbnRsX2Z3cHJpbnRmCisrZXh0ZXJuIGludCBmd3ByaW50ZiAoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZmd3ByaW50ZgorKyNkZWZpbmUgdmZ3cHJpbnRmIGxpYmludGxfdmZ3cHJpbnRmCisrZXh0ZXJuIGludCB2ZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgd3ByaW50ZgorKyNkZWZpbmUgd3ByaW50ZiBsaWJpbnRsX3dwcmludGYKKytleHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKysjdW5kZWYgdndwcmludGYKKysjZGVmaW5lIHZ3cHJpbnRmIGxpYmludGxfdndwcmludGYKKytleHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyN1bmRlZiBzd3ByaW50ZgorKyNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorK2V4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZzd3ByaW50ZgorKyNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCisrZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNlbmRpZgorKworKworKy8qIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorK2V4dGVybiB2b2lkCisrICAgICAgIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKysJCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogbGliaW50bC5oICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGludXgtbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saW51eC1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDAgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gTGludXggc3R5bGUgLm1zZyBmaWxlCistIyBDb3B5cmlnaHQgKEMpIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKy0jCistIworLSMgVGhlIGZpcnN0IGRpcmVjdGl2ZSBpbiB0aGUgLm1zZyBzaG91bGQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlCistIyBtZXNzYWdlIHNldCBudW1iZXIuICBXZSB1c2UgYWx3YXlzIHNldCBudW1iZXIgMS4KKy0jCistMSB7CistICBpXAorLSRzZXQgMSAjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBwbzJtc2cuc2VkCistICBoCistICBzLy4qLzAvCistICB4CistfQorLSMKKy0jIE1pdGNoJ3Mgb2xkIGNhdGFsb2cgZm9ybWF0IGRvZXMgbm90IGFsbG93IGNvbW1lbnRzLgorLSMKKy0jIFdlIGNvcHkgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgYXMgYSBjb21tZW50IGludG8gdGhlIC5tc2cgZmlsZS4KKy0jCistL15tc2dpZC8geworLSAgcy9tc2dpZFsgCV0qIi8vCistIworLSMgVGhpcyBkb2VzIG5vdCB3b3JrIG5vdyB3aXRoIHRoZSBuZXcgZm9ybWF0LgorLSMgLyIkLyEgeworLSMgICBzL1xcJC8vCistIyAgIHMvJC8gLi4uIChtb3JlIGxpbmVzIGZvbGxvd2luZykiLworLSMgfQorLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSAgRworLSAgcy9cKC4qXCkiXG5cKFswLTldKlwpLyQgI1wyIE9yaWdpbmFsIE1lc3NhZ2U6KFwxKS9wCistfQorLSMKKy0jIFRoZSAubXNnIGZpbGUgY29udGFpbnMsIG90aGVyIHRoZW4gdGhlIC5wbyBmaWxlLCBvbmx5IHRoZSB0cmFuc2xhdGlvbnMKKy0jIGJ1dCBlYWNoIGdpdmVuIGEgdW5pcXVlIElELiAgU3RhcnRpbmcgZnJvbSAxIGFuZCBpbmNyZW1lbnRpbmcgYnkgMSBmb3IKKy0jIGVhY2ggbWVzc2FnZSB3ZSBhc3NpZ24gdGhlbSB0byB0aGUgbWVzc2FnZXMuCistIyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgLnBvIGZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2F0LWlkLXRibC5jIGZpbGUKKy0jICh3aXRoIHBvLXRvLXRibCkgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSB1c2VkIGhlcmUuICAoQXQgbGVhc3QgdGhlIG9yZGVyCistIyBvZiBkZWNsYXJhdGlvbnMgbXVzdCBub3QgYmUgY2hhbmdlZC4pCistIworLS9ebXNnc3RyLyB7CistICBzL21zZ3N0clsgCV0qIlwoLipcKSIvIyBcMS8KKy0jIENsZWFyIHN1YnN0aXR1dGlvbiBmbGFnLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBjb250aW51YXRpb24gbGluZS4KKy0gIHMvXCguKlxuXCkiXCguKlwpIi9cMVwyLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistICBQCistICBECistIyBOb3RlIHRoYXQgRCBpbmNsdWRlcyBhIGp1bXAgdG8gdGhlIHN0YXJ0ISEKKy0jIFdlIGZvdW5kIGEgY29udGludWF0aW9uIGxpbmUuICBCdXQgYmVmb3JlIHByaW50aW5nIGluc2VydCAnXCcuCistICA6YQorLSAgcy9cKC4qXClcKFxuLipcKS9cMVxcXDIvCistICBQCistIyBXZSBjYW5ub3QgdXNlIEQgaGVyZS4KKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2FkaW5mby5oCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvYWRpbmZvLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40Njg3MzA5MTIgLTA0MDAKK0BAIC0xLDkgKzEsNTQgQEAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpIGFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpICgpCistIyBlbmRpZgorKy8qIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQURJTkZPX0gKKysjZGVmaW5lIF9MT0FESU5GT19ICTEKKysKKysvKiBEZWNsYXJhdGlvbnMgb2YgbG9jYWxlIGRlcGVuZGVudCBjYXRhbG9nIGxvb2t1cCBmdW5jdGlvbnMuCisrICAgSW1wbGVtZW50ZWQgaW4KKysKKysgICAgIGxvY2FsZWFsaWFzLmMgICAgUG9zc2libHkgcmVwbGFjZSBhIGxvY2FsZSBuYW1lIGJ5IGFub3RoZXIuCisrICAgICBleHBsb2RlbmFtZS5jICAgIFNwbGl0IGEgbG9jYWxlIG5hbWUgaW50byBpdHMgdmFyaW91cyBmaWVsZHMuCisrICAgICBsMTBuZmxpc3QuYyAgICAgIEdlbmVyYXRlIGEgbGlzdCBvZiBmaWxlbmFtZXMgb2YgcG9zc2libGUgbWVzc2FnZSBjYXRhbG9ncy4KKysgICAgIGZpbmRkb21haW4uYyAgICAgRmluZCBhbmQgb3BlbiB0aGUgcmVsZXZhbnQgbWVzc2FnZSBjYXRhbG9ncy4KKysKKysgICBUaGUgbWFpbiBmdW5jdGlvbiBfbmxfZmluZF9kb21haW4oKSBpbiBmaW5kZG9tYWluLmMgaXMgZGVjbGFyZWQKKysgICBpbiBnZXR0ZXh0UC5oLgorKyAqLworKworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKysgICBhbG1vc3QgYWx3YXlzIHRydWUgb3IgYWxtb3N0IGFsd2F5cyBmYWxzZS4gICovCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisrIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorKyNlbmRpZgorKworKy8qIFNlcGFyYXRvciBpbiBQQVRIIGxpa2UgbGlzdHMgb2YgcGF0aG5hbWVzLiAgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzsnCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyAjZW5kaWYKKyAKKyAvKiBFbmNvZGluZyBvZiBsb2NhbGUgbmFtZSBwYXJ0cy4gICovCitAQCAtMzIsMjcgKzc3LDY5IEBACisgfTsKKyAKKyAKKy1leHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKmNvZGVzZXQsCistCQkJCQkJICBzaXplX3QgbmFtZV9sZW4pKTsKKysvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisrICAgbmFtZXMuICBOb3JtYWxpemF0aW9uIGFsbG93cyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHRoZSBjb21tb24KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LAorKwkJCQkJICBzaXplX3QgbmFtZV9sZW4pOworIAorKy8qIExvb2t1cCBhIGxvY2FsZSBkZXBlbmRlbnQgZmlsZS4KKysgICAqTDEwTkZJTEVfTElTVCBkZW5vdGVzIGEgcG9vbCBvZiBsb29rdXAgcmVzdWx0cyBvZiBsb2NhbGUgZGVwZW5kZW50CisrICAgZmlsZXMgb2YgdGhlIHNhbWUga2luZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgLT5maWxlbmFtZS4KKysgICBESVJMSVNUIGFuZCBESVJMSVNUX0xFTiBhcmUgYW4gYXJneiBsaXN0IG9mIGRpcmVjdG9yaWVzIGluIHdoaWNoIHRvCisrICAgbG9vaywgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgZGlyZWN0b3J5IChpLmUuIERJUkxJU1RfTEVOID4gMCkuCisrICAgTUFTSywgTEFOR1VBR0UsIFRFUlJJVE9SWSwgQ09ERVNFVCwgTk9STUFMSVpFRF9DT0RFU0VULCBNT0RJRklFUiwKKysgICBTUEVDSUFMLCBTUE9OU09SLCBSRVZJU0lPTiBhcmUgdGhlIHBpZWNlcyBvZiB0aGUgbG9jYWxlIG5hbWUsIGFzCisrICAgcHJvZHVjZWQgYnkgX25sX2V4cGxvZGVfbmFtZSgpLiAgRklMRU5BTUUgaXMgdGhlIGZpbGVuYW1lIHN1ZmZpeC4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCisrICAgb3IgLSBpZiBET19BTExPQ0FURSBpcyBub256ZXJvIC0gZnJlc2hseSBhbGxvY2F0ZWQsIG9yIHBvc3NpYmx5IE5VTEwuCisrICAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub24tTlVMTCwgaXQgaXMgYWRkZWQgdG8gKkwxME5GSUxFX0xJU1QsIGFuZAorKyAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKysgICBmdXJ0aGVybW9yZSBpdHMgLT5zdWNjZXNzb3JbXSBmaWVsZCBjb250YWlucyBhIGxpc3Qgb2Ygb3RoZXIgbG9va3VwCisrICAgcmVzdWx0cyBmcm9tIHdoaWNoIHRoaXMgbG9va3VwIHJlc3VsdCBpbmhlcml0cy4gICovCisgZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCBQQVJBTVMgKChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKy0JCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLCBpbnQgbWFzaywKKy0JCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKy0JCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwKKy0JCQkgICAgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKy0JCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCistCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpKTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCisrCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSk7CisgCisrLyogTG9va3VwIHRoZSByZWFsIGxvY2FsZSBuYW1lIGZvciBhIGxvY2FsZSBhbGlhcyBOQU1FLCBvciBOVUxMIGlmCisrICAgTkFNRSBpcyBub3QgYSBsb2NhbGUgYWxpYXMgKGJ1dCBwb3NzaWJseSBhIHJlYWwgbG9jYWxlIG5hbWUpLgorKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIG11c3Qgbm90IGJlIGZyZWVkLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSk7CisgCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgUEFSQU1TICgoY29uc3QgY2hhciAqbmFtZSkpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGl0cyBwaWVjZXM6IGxhbmd1YWdlLCBtb2RpZmllciwKKysgICB0ZXJyaXRvcnksIGNvZGVzZXQsIHNwZWNpYWwsIHNwb25zb3IsIHJldmlzaW9uLgorKyAgIE5BTUUgZ2V0cyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkOiBOVUwgYnl0ZXMgYXJlIGluc2VydGVkIGhlcmUgYW5kCisrICAgdGhlcmUuICAqTEFOR1VBR0UgZ2V0cyBhc3NpZ25lZCBOQU1FLiAgRWFjaCBvZiAqTU9ESUZJRVIsICpURVJSSVRPUlksCisrICAgKkNPREVTRVQsICpTUEVDSUFMLCAqU1BPTlNPUiwgKlJFVklTSU9OIGdldHMgYXNzaWduZWQgZWl0aGVyIGEKKysgICBwb2ludGVyIGludG8gdGhlIG9sZCBOQU1FIHN0cmluZywgb3IgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQKKysgICBnZXRzIGFzc2lnbmVkIHRoZSBleHBhbmRlZCAqQ09ERVNFVCwgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gKkNPREVTRVQ7CisrICAgdGhpcyBvbmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCisrICAgZmlsbGVkLWluIHZhbHVlOgorKyAgICAgWFBHX01PRElGSUVSLCBDRU5fQVVESUVOQ0UgIGZvciAqTU9ESUZJRVIsCisrICAgICBURVJSSVRPUlkgICAgICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCisrICAgICBYUEdfQ09ERVNFVCAgICAgICAgICAgICAgICAgZm9yICpDT0RFU0VULAorKyAgICAgWFBHX05PUk1fQ09ERVNFVCAgICAgICAgICAgIGZvciAqTk9STUFMSVpFRF9DT0RFU0VULAorKyAgICAgQ0VOX1NQRUNJQUwgICAgICAgICAgICAgICAgIGZvciAqU1BFQ0lBTCwKKysgICAgIENFTl9TUE9OU09SICAgICAgICAgICAgICAgICBmb3IgKlNQT05TT1IsCisrICAgICBDRU5fUkVWSVNJT04gICAgICAgICAgICAgICAgZm9yICpSRVZJU0lPTi4KKysgKi8KKytleHRlcm4gaW50IF9ubF9leHBsb2RlX25hbWUgKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKiptb2RpZmllciwgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJCSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldCwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLCBjb25zdCBjaGFyICoqc3BvbnNvciwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbik7CisgCistZXh0ZXJuIGludCBfbmxfZXhwbG9kZV9uYW1lIFBBUkFNUyAoKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqY29kZXNldCwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcG9uc29yLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbikpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGEgbGVhZGluZyBsYW5ndWFnZSBwYXJ0IGFuZCBhbGwgdGhlCisrICAgcmVzdC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgbGFuZ3VhZ2UsCisrICAgaS5lLiB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzdC4gICovCisrZXh0ZXJuIGNoYXIgKl9ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKTsKKysKKysjZW5kaWYJLyogbG9hZGluZm8uaCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvYWRtc2djYXQuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2FkbXNnY2F0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40NzM3MzAxNTIgLTA0MDAKK0BAIC0xLDQyICsxLDQ1NSBAQAorLS8qIExvYWQgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiAgYWxsb2NhCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisgI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVApIHx8IGRlZmluZWQgX0xJQkMKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBpbmNsdWRlIDxsb2NhbGUuaD4KKysjZW5kaWYKKysKKysjaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorKyAgICB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9QT1NJWF9NQVBQRURfRklMRVMpCisgIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorKyMgdW5kZWYgSEFWRV9NTUFQCisrIyBkZWZpbmUgSEFWRV9NTUFQCTEKKysjZWxzZQorKyMgdW5kZWYgSEFWRV9NTUFQCisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKysjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ21vLmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisrI2VuZGlmCisrCisrLyogUHJvdmlkZSBmYWxsYmFjayB2YWx1ZXMgZm9yIG1hY3JvcyB0aGF0IG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGludHR5cGVzLmg+LgorKyAgIE5vdGUgdGhhdCBvdXIgZmFsbGJhY2sgdmFsdWVzIG5lZWQgbm90IGJlIGxpdGVyYWwgc3RyaW5ncywgYmVjYXVzZSB3ZSBkb24ndAorKyAgIHVzZSB0aGVtIHdpdGggcHJlcHJvY2Vzc29yIHN0cmluZyBjb25jYXRlbmF0aW9uLiAgKi8KKysjaWYgIWRlZmluZWQgUFJJZDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQ4CisrIyBkZWZpbmUgUFJJZDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWk4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpOAorKyMgZGVmaW5lIFBSSWk4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzgKKysjIGRlZmluZSBQUklvOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXU4CisrIyBkZWZpbmUgUFJJdTggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4OAorKyMgZGVmaW5lIFBSSXg4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDgKKysjIGRlZmluZSBQUklYOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMTYKKysjIGRlZmluZSBQUklkMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTE2CisrIyBkZWZpbmUgUFJJaTE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8xNgorKyMgZGVmaW5lIFBSSW8xNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MTYKKysjIGRlZmluZSBQUkl1MTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDE2CisrIyBkZWZpbmUgUFJJeDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgxNgorKyMgZGVmaW5lIFBSSVgxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMzIKKysjIGRlZmluZSBQUklkMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTMyCisrIyBkZWZpbmUgUFJJaTMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8zMgorKyMgZGVmaW5lIFBSSW8zMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MzIKKysjIGRlZmluZSBQUkl1MzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDMyCisrIyBkZWZpbmUgUFJJeDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgzMgorKyMgZGVmaW5lIFBSSVgzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkNjQKKysjIGRlZmluZSBQUklkNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsZCIgOiAibGxkIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpNjQKKysjIGRlZmluZSBQUklpNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsaSIgOiAibGxpIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvNjQKKysjIGRlZmluZSBQUklvNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1NjQKKysjIGRlZmluZSBQUkl1NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsdSIgOiAibGx1IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4NjQKKysjIGRlZmluZSBQUkl4NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJseCIgOiAibGx4IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYNjQKKysjIGRlZmluZSBQUklYNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUOAorKyMgZGVmaW5lIFBSSWRMRUFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDgKKysjIGRlZmluZSBQUklpTEVBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1Q4CisrIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUOAorKyMgZGVmaW5lIFBSSXVMRUFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDgKKysjIGRlZmluZSBQUkl4TEVBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1Q4CisrIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDE2CisrIyBkZWZpbmUgUFJJZExFQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QxNgorKyMgZGVmaW5lIFBSSWlMRUFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMTYKKysjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDE2CisrIyBkZWZpbmUgUFJJdUxFQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QxNgorKyMgZGVmaW5lIFBSSXhMRUFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMTYKKysjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDMyCisrIyBkZWZpbmUgUFJJZExFQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QzMgorKyMgZGVmaW5lIFBSSWlMRUFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMzIKKysjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDMyCisrIyBkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QzMgorKyMgZGVmaW5lIFBSSXhMRUFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMzIKKysjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDY0CisrIyBkZWZpbmUgUFJJZExFQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1Q2NAorKyMgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUNjQKKysjIGRlZmluZSBQUklvTEVBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDY0CisrIyBkZWZpbmUgUFJJdUxFQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1Q2NAorKyMgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUNjQKKysjIGRlZmluZSBQUklYTEVBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDgKKysjIGRlZmluZSBQUklkRkFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1Q4CisrIyBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUOAorKyMgZGVmaW5lIFBSSW9GQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDgKKysjIGRlZmluZSBQUkl1RkFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1Q4CisrIyBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUOAorKyMgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QxNgorKyMgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMTYKKysjIGRlZmluZSBQUklpRkFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDE2CisrIyBkZWZpbmUgUFJJb0ZBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QxNgorKyMgZGVmaW5lIFBSSXVGQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMTYKKysjIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDE2CisrIyBkZWZpbmUgUFJJWEZBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QzMgorKyMgZGVmaW5lIFBSSWRGQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMzIKKysjIGRlZmluZSBQUklpRkFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDMyCisrIyBkZWZpbmUgUFJJb0ZBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QzMgorKyMgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMzIKKysjIGRlZmluZSBQUkl4RkFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDMyCisrIyBkZWZpbmUgUFJJWEZBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1Q2NAorKyMgZGVmaW5lIFBSSWRGQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUNjQKKysjIGRlZmluZSBQUklpRkFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDY0CisrIyBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1Q2NAorKyMgZGVmaW5lIFBSSXVGQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUNjQKKysjIGRlZmluZSBQUkl4RkFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDY0CisrIyBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZE1BWAorKyMgZGVmaW5lIFBSSWRNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6ICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTUFYCisrIyBkZWZpbmUgUFJJaU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGkiIDogImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9NQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9NQVgKKysjIGRlZmluZSBQUklvTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdU1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdU1BWAorKyMgZGVmaW5lIFBSSXVNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6ICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TUFYCisrIyBkZWZpbmUgUFJJeE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHgiIDogImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhNQVgKKysjIGRlZmluZSBQUklYTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZFBUUgorKyMgZGVmaW5lIFBSSWRQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gImQiIDogXAorKyAgICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpUFRSCisrIyBkZWZpbmUgUFJJaVBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGkiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiaSIgOiBcCisrICAgImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9QVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9QVFIKKysjIGRlZmluZSBQUklvUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJvIiA6IFwKKysgICAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdVBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdVBUUgorKyMgZGVmaW5lIFBSSXVQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gInUiIDogXAorKyAgICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4UFRSCisrIyBkZWZpbmUgUFJJeFBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHgiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAieCIgOiBcCisrICAgImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhQVFIKKysjIGRlZmluZSBQUklYUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJYIiA6IFwKKysgICAibGxYIikKKysjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCitAQCAtNDQsNyArNDU3LDYgQEAKKyAvKiBSZW5hbWUgdGhlIG5vbiBJU08gQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgIGJlY2F1c2Ugc29tZSBJU08gQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBmc3RhdCAgX19mc3RhdAorICMgZGVmaW5lIG9wZW4gICBfX29wZW4KKyAjIGRlZmluZSBjbG9zZSAgX19jbG9zZQorICMgZGVmaW5lIHJlYWQgICBfX3JlYWQKK0BAIC01MiwzMCArNDY0LDQ3MSBAQAorICMgZGVmaW5lIG11bm1hcCBfX211bm1hcAorICNlbmRpZgorIAorKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKysjaWZkZWYgSEFWRV9BTExPQ0EKKysjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisrI2Vsc2UKKysjIGRlZmluZSBhbGxvY2EobikgbWFsbG9jIChuKQorKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisrI2VuZGlmCisrCisrLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisrICAgT19CSU5BUlkgaXMgdXN1YWxseSBkZWNsYXJlZCBpbiA8ZmNudGwuaD4uICovCisrI2lmICFkZWZpbmVkIE9fQklOQVJZICYmIGRlZmluZWQgX09fQklOQVJZCisrICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKysjIGRlZmluZSBPX0JJTkFSWSBfT19CSU5BUlkKKysjIGRlZmluZSBPX1RFWFQgX09fVEVYVAorKyNlbmRpZgorKyNpZmRlZiBfX0JFT1NfXworKyAgLyogQmVPUyA1IGhhcyBPX0JJTkFSWSBhbmQgT19URVhULCBidXQgdGhleSBoYXZlIG5vIGVmZmVjdC4gICovCisrIyB1bmRlZiBPX0JJTkFSWQorKyMgdW5kZWYgT19URVhUCisrI2VuZGlmCisrLyogT24gcmVhc29uYWJsZSBzeXN0ZW1zLCBiaW5hcnkgSS9PIGlzIHRoZSBkZWZhdWx0LiAgKi8KKysjaWZuZGVmIE9fQklOQVJZCisrIyBkZWZpbmUgT19CSU5BUlkgMAorKyNlbmRpZgorKworKworIC8qIFdlIG5lZWQgYSBzaWduLCB3aGV0aGVyIGEgbmV3IGNhdGFsb2cgd2FzIGxvYWRlZCwgd2hpY2ggY2FuIGJlIGFzc29jaWF0ZWQKKyAgICB3aXRoIGFsbCB0cmFuc2xhdGlvbnMuICBUaGlzIGlzIGltcG9ydGFudCBpZiB0aGUgdHJhbnNsYXRpb25zIGFyZQorICAgIGNhY2hlZCBieSBvbmUgb2YgR0NDJ3MgZmVhdHVyZXMuICAqLworLWludCBfbmxfbXNnX2NhdF9jbnRyID0gMDsKKytpbnQgX25sX21zZ19jYXRfY250cjsKKyAKKyAKKysvKiBFeHBhbmQgYSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgUmV0dXJuIE5VTEwgaWYgdW5zdXBwb3J0ZWQuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgLyogVGVzdCBmb3IgYW4gSVNPIEMgOTkgc2VjdGlvbiA3LjguMSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZS4KKysgICAgIFN5bnRheDoKKysgICAgIFAgUiBJIHsgZCB8IGkgfCBvIHwgdSB8IHggfCBYIH0KKysgICAgIHsgeyB8IExFQVNUIHwgRkFTVCB9IHsgOCB8IDE2IHwgMzIgfCA2NCB9IHwgTUFYIHwgUFRSIH0gICovCisrICAvKiBXZSBkb24ndCB1c2UgYSB0YWJsZSBvZiAxNCB0aW1lcyA2ICdjb25zdCBjaGFyIConIHN0cmluZ3MgaGVyZSwgYmVjYXVzZQorKyAgICAgZGF0YSByZWxvY2F0aW9ucyBjb3N0IHN0YXJ0dXAgdGltZS4gICovCisrICBpZiAobmFtZVswXSA9PSAnUCcgJiYgbmFtZVsxXSA9PSAnUicgJiYgbmFtZVsyXSA9PSAnSScpCisrICAgIHsKKysgICAgICBpZiAobmFtZVszXSA9PSAnZCcgfHwgbmFtZVszXSA9PSAnaScgfHwgbmFtZVszXSA9PSAnbycgfHwgbmFtZVszXSA9PSAndScKKysJICB8fCBuYW1lWzNdID09ICd4JyB8fCBuYW1lWzNdID09ICdYJykKKysJeworKwkgIGlmIChuYW1lWzRdID09ICc4JyAmJiBuYW1lWzVdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWk4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1ODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXg4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDg7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICcxJyAmJiBuYW1lWzVdID09ICc2JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMTY7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICczJyAmJiBuYW1lWzVdID09ICcyJyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMzI7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICc2JyAmJiBuYW1lWzVdID09ICc0JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYNjQ7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdMJyAmJiBuYW1lWzVdID09ICdFJyAmJiBuYW1lWzZdID09ICdBJworKwkgICAgICAmJiBuYW1lWzddID09ICdTJyAmJiBuYW1lWzhdID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzgnICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDg7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMScgJiYgbmFtZVsxMF0gPT0gJzYnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMTY7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMycgJiYgbmFtZVsxMF0gPT0gJzInICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJzQnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUNjQ7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdGJyAmJiBuYW1lWzVdID09ICdBJyAmJiBuYW1lWzZdID09ICdTJworKwkgICAgICAmJiBuYW1lWzddID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzgnICYmIG5hbWVbOV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUODsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzhdID09ICcxJyAmJiBuYW1lWzldID09ICc2JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDE2OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzMnICYmIG5hbWVbOV0gPT0gJzInICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs4XSA9PSAnNicgJiYgbmFtZVs5XSA9PSAnNCcgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1Q2NDsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ00nICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1gnCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpTUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb01BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4TUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWE1BWDsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ1AnICYmIG5hbWVbNV0gPT0gJ1QnICYmIG5hbWVbNl0gPT0gJ1InCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpUFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb1BUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4UFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWFBUUjsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgLyogVGVzdCBmb3IgYSBnbGliYyBzcGVjaWZpYyBwcmludGYoKSBmb3JtYXQgZGlyZWN0aXZlIGZsYWcuICAqLworKyAgaWYgKG5hbWVbMF0gPT0gJ0knICYmIG5hbWVbMV0gPT0gJ1wwJykKKysgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKQorKyAgICAgIC8qIFRoZSAnSScgZmxhZywgaW4gbnVtZXJpYyBmb3JtYXQgZGlyZWN0aXZlcywgcmVwbGFjZXMgQVNDSUkgZGlnaXRzCisrCSB3aXRoIHRoZSAnb3V0ZGlnaXRzJyBkZWZpbmVkIGluIHRoZSBMQ19DVFlQRSBsb2NhbGUgZmFjZXQuICBUaGlzIGlzCisrCSB1c2VkIGZvciBGYXJzaSAoUGVyc2lhbikgYW5kIG1heWJlIEFyYWJpYy4gICovCisrICAgICAgcmV0dXJuICJJIjsKKysjZWxzZQorKyAgICAgIHJldHVybiAiIjsKKysjZW5kaWYKKysgICAgfQorKyAgLyogT3RoZXIgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFyZSBub3QgdmFsaWQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEluaXRpYWxpemUgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuCisrICAgUmV0dXJuIHRoZSBoZWFkZXIgZW50cnkuICAqLworK2NvbnN0IGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbiwKKysJCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQorK3sKKysgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4KKysgICAgIFRoaXMgY2FuIGJlIGZvdW5kIChpbiB0ZXh0dWFsIGZvcm0pIGluIHRoZSBlbnRyeSAiIi4gIElmIHRoaXMKKysgICAgIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoaXMgZG9lcyBub3QgY29udGFpbiB0aGUgYGNoYXJzZXQ9JworKyAgICAgaW5mb3JtYXRpb24sIHdlIHdpbGwgYXNzdW1lIHRoZSBjaGFyc2V0IG1hdGNoZXMgdGhlIG9uZSB0aGUKKysgICAgIGN1cnJlbnQgbG9jYWxlIGFuZCB3ZSBkb24ndCBoYXZlIHRvIHBlcmZvcm0gYW55IGNvbnZlcnNpb24uICAqLworKyAgY2hhciAqbnVsbGVudHJ5OworKyAgc2l6ZV90IG51bGxlbnRyeWxlbjsKKysKKysgIC8qIFByZWluaXRpYWxpemUgZmllbGRzLCB0byBhdm9pZCByZWN1cnNpb24gZHVyaW5nIF9ubF9maW5kX21zZy4gICovCisrICBkb21haW4tPmNvZGVzZXRfY250ciA9CisrICAgIChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBkb21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKTsKKysjaWZkZWYgX0xJQkMKKysgIGRvbWFpbi0+Y29udiA9IChfX2djb252X3QpIC0xOworKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrICBkb21haW4tPmNvbnYgPSAoaWNvbnZfdCkgLTE7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgZG9tYWluLT5jb252X3RhYiA9IE5VTEw7CisrCisrICAvKiBHZXQgdGhlIGhlYWRlciBlbnRyeS4gICovCisrICBudWxsZW50cnkgPSBfbmxfZmluZF9tc2cgKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nLCAiIiwgJm51bGxlbnRyeWxlbik7CisrCisrICBpZiAobnVsbGVudHJ5ICE9IE5VTEwpCisrICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICAgICAgY29uc3QgY2hhciAqY2hhcnNldHN0cjsKKysKKysgICAgICBjaGFyc2V0c3RyID0gc3Ryc3RyIChudWxsZW50cnksICJjaGFyc2V0PSIpOworKyAgICAgIGlmIChjaGFyc2V0c3RyICE9IE5VTEwpCisrCXsKKysJICBzaXplX3QgbGVuOworKwkgIGNoYXIgKmNoYXJzZXQ7CisrCSAgY29uc3QgY2hhciAqb3V0Y2hhcnNldDsKKysKKysJICBjaGFyc2V0c3RyICs9IHN0cmxlbiAoImNoYXJzZXQ9Iik7CisrCSAgbGVuID0gc3RyY3NwbiAoY2hhcnNldHN0ciwgIiBcdFxuIik7CisrCisrCSAgY2hhcnNldCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTUVNUENQWQorKwkgICooKGNoYXIgKikgbWVtcGNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKSkgPSAnXDAnOworKyMgZWxzZQorKwkgIG1lbWNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKTsKKysJICBjaGFyc2V0W2xlbl0gPSAnXDAnOworKyMgZW5kaWYKKysKKysJICAvKiBUaGUgb3V0cHV0IGNoYXJzZXQgc2hvdWxkIG5vcm1hbGx5IGJlIGRldGVybWluZWQgYnkgdGhlCisrCSAgICAgbG9jYWxlLiAgQnV0IHNvbWV0aW1lcyB0aGUgbG9jYWxlIGlzIG5vdCB1c2VkIG9yIG5vdCBjb3JyZWN0bHkKKysJICAgICBzZXQgdXAsIHNvIHdlIHByb3ZpZGUgYSBwb3NzaWJpbGl0eSBmb3IgdGhlIHVzZXIgdG8gb3ZlcnJpZGUKKysJICAgICB0aGlzLiAgTW9yZW92ZXIsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaAorKwkgICAgIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IG92ZXJyaWRlcyBib3RoLiAgKi8KKysJICBpZiAoZG9tYWluYmluZGluZyAhPSBOVUxMICYmIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKysJICAgIG91dGNoYXJzZXQgPSBkb21haW5iaW5kaW5nLT5jb2Rlc2V0OworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgb3V0Y2hhcnNldCA9IGdldGVudiAoIk9VVFBVVF9DSEFSU0VUIik7CisrCSAgICAgIGlmIChvdXRjaGFyc2V0ID09IE5VTEwgfHwgb3V0Y2hhcnNldFswXSA9PSAnXDAnKQorKwkJeworKyMgaWZkZWYgX0xJQkMKKysJCSAgb3V0Y2hhcnNldCA9IF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgQ09ERVNFVCk7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkJICBleHRlcm4gY29uc3QgY2hhciAqbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKwkJICBvdXRjaGFyc2V0ID0gbG9jYWxlX2NoYXJzZXQgKCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCQl9CisrCSAgICB9CisrCisrIyBpZmRlZiBfTElCQworKwkgIC8qIFdlIGFsd2F5cyB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRpb24uICAqLworKwkgIG91dGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChvdXRjaGFyc2V0LCAiVFJBTlNMSVQiKTsKKysJICBjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAoY2hhcnNldCwgTlVMTCk7CisrCSAgaWYgKF9fZ2NvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCwgJmRvbWFpbi0+Y29udiwKKysJCQkgICAgR0NPTlZfQVZPSURfTk9DT05WKQorKwkgICAgICAhPSBfX0dDT05WX09LKQorKwkgICAgZG9tYWluLT5jb252ID0gKF9fZ2NvbnZfdCkgLTE7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgIC8qIFdoZW4gdXNpbmcgR05VIGxpYmMgPj0gMi4yIG9yIEdOVSBsaWJpY29udiA+PSAxLjUsCisrCSAgICAgd2Ugd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysjICAgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSB8fCBfX0dMSUJDX18gPiAyIFwKKysgICAgICAgfHwgX0xJQklDT05WX1ZFUlNJT04gPj0gMHgwMTA1CisrCSAgaWYgKHN0cmNociAob3V0Y2hhcnNldCwgJy8nKSA9PSBOVUxMKQorKwkgICAgeworKwkgICAgICBjaGFyICp0bXA7CisrCisrCSAgICAgIGxlbiA9IHN0cmxlbiAob3V0Y2hhcnNldCk7CisrCSAgICAgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMTAgKyAxKTsKKysJICAgICAgbWVtY3B5ICh0bXAsIG91dGNoYXJzZXQsIGxlbik7CisrCSAgICAgIG1lbWNweSAodG1wICsgbGVuLCAiLy9UUkFOU0xJVCIsIDEwICsgMSk7CisrCSAgICAgIG91dGNoYXJzZXQgPSB0bXA7CisrCisrCSAgICAgIGRvbWFpbi0+Y29udiA9IGljb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQpOworKworKwkgICAgICBmcmVlYSAob3V0Y2hhcnNldCk7CisrCSAgICB9CisrCSAgZWxzZQorKyMgICBlbmRpZgorKwkgICAgZG9tYWluLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrCSAgZnJlZWEgKGNoYXJzZXQpOworKwl9CisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysgICAgfQorKworKyAgcmV0dXJuIG51bGxlbnRyeTsKKyt9CisrCisrLyogRnJlZXMgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPmNvbnZfdGFiICE9IE5VTEwgJiYgZG9tYWluLT5jb252X3RhYiAhPSAoY2hhciAqKikgLTEpCisrICAgIGZyZWUgKGRvbWFpbi0+Y29udl90YWIpOworKworKyNpZmRlZiBfTElCQworKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMSkKKysgICAgX19nY29udl9jbG9zZSAoZG9tYWluLT5jb252KTsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoaWNvbnZfdCkgLTEpCisrICAgIGljb252X2Nsb3NlIChkb21haW4tPmNvbnYpOworKyMgZW5kaWYKKysjZW5kaWYKKyt9CisrCisgLyogTG9hZCB0aGUgbWVzc2FnZSBjYXRhbG9ncyBzcGVjaWZpZWQgYnkgRklMRU5BTUUuICBJZiBpdCBpcyBubyB2YWxpZAorICAgIG1lc3NhZ2UgY2F0YWxvZyBkbyBub3RoaW5nLiAgKi8KKyB2b2lkCistX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSkKKy0gICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlOworK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJCSBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBpbnQgZmQ7CisrICBzaXplX3Qgc2l6ZTsKKysjaWZkZWYgX0xJQkMKKysgIHN0cnVjdCBzdGF0NjQgc3Q7CisrI2Vsc2UKKyAgIHN0cnVjdCBzdGF0IHN0OworKyNlbmRpZgorICAgc3RydWN0IG1vX2ZpbGVfaGVhZGVyICpkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMTsKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisgICBpbnQgdXNlX21tYXAgPSAwOworLSNlbmRpZgorICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKysgIGludCByZXZpc2lvbjsKKysgIGNvbnN0IGNoYXIgKm51bGxlbnRyeTsKKyAKKyAgIGRvbWFpbl9maWxlLT5kZWNpZGVkID0gMTsKKyAgIGRvbWFpbl9maWxlLT5kYXRhID0gTlVMTDsKKyAKKysgIC8qIE5vdGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VsZXNzIHRvIHN0b3JlIGRvbWFpbmJpbmRpbmcgaW4gZG9tYWluX2ZpbGUKKysgICAgIGJlY2F1c2UgZG9tYWluYmluZGluZyBtaWdodCBiZSA9PSBOVUxMIG5vdyBidXQgIT0gTlVMTCBsYXRlciAoYWZ0ZXIKKysgICAgIGEgY2FsbCB0byBiaW5kX3RleHRkb21haW5fY29kZXNldCkuICAqLworKworICAgLyogSWYgdGhlIHJlY29yZCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsb2NhbGUgdGhlIEZJTEVOQU1FCisgICAgICBtaWdodCBiZSBOVUxMLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgorICAgICAgc3BlY2lmaWNhdGlvbiB0aGUgbG9jYWxlIGZpbGUgbmFtZSBpcyBkaWZmZXJlbnQgZm9yIFhQRyBhbmQgQ0VOCitAQCAtODQsMjcgKzkzNywzMiBAQAorICAgICByZXR1cm47CisgCisgICAvKiBUcnkgdG8gb3BlbiB0aGUgYWRkcmVzc2VkIGZpbGUuICAqLworLSAgZmQgPSBvcGVuIChkb21haW5fZmlsZS0+ZmlsZW5hbWUsIE9fUkRPTkxZKTsKKysgIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKyAgIGlmIChmZCA9PSAtMSkKKyAgICAgcmV0dXJuOworIAorICAgLyogV2UgbXVzdCBrbm93IGFib3V0IHRoZSBzaXplIG9mIHRoZSBmaWxlLiAgKi8KKy0gIGlmIChmc3RhdCAoZmQsICZzdCkgIT0gMAorLSAgICAgICYmIHN0LnN0X3NpemUgPCAob2ZmX3QpIHNpemVvZiAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyKSkKKysgIGlmICgKKysjaWZkZWYgX0xJQkMKKysgICAgICBfX2J1aWx0aW5fZXhwZWN0IChmc3RhdDY0IChmZCwgJnN0KSAhPSAwLCAwKQorKyNlbHNlCisrICAgICAgX19idWlsdGluX2V4cGVjdCAoZnN0YXQgKGZkLCAmc3QpICE9IDAsIDApCisrI2VuZGlmCisrICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoKHNpemUgPSAoc2l6ZV90KSBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplLCAwKQorKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKHNpemUgPCBzaXplb2YgKHN0cnVjdCBtb19maWxlX2hlYWRlciksIDApKQorICAgICB7CisgICAgICAgLyogU29tZXRoaW5nIHdlbnQgd3JvbmcuICAqLworICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyNpZmRlZiBIQVZFX01NQVAKKyAgIC8qIE5vdyB3ZSBhcmUgcmVhZHkgdG8gbG9hZCB0aGUgZmlsZS4gIElmIG1tYXAoKSBpcyBhdmFpbGFibGUgd2UgdHJ5CisgICAgICB0aGlzIGZpcnN0LiAgSWYgbm90IGF2YWlsYWJsZSBvciBpdCBmYWlsZWQgd2UgdHJ5IHRvIGxvYWQgaXQuICAqLworLSAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELAorKyAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELAorIAkJCQkJIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgCistICBpZiAoZGF0YSAhPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEgIT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSwgMSkpCisgICAgIHsKKyAgICAgICAvKiBtbWFwKCkgY2FsbCB3YXMgc3VjY2Vzc2Z1bC4gICovCisgICAgICAgY2xvc2UgKGZkKTsKK0BAIC0xMTYsMjQgKzk3NCwyNyBAQAorICAgICAgaXQgbWFudWFsbHkuICAqLworICAgaWYgKGRhdGEgPT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSkKKyAgICAgeworLSAgICAgIG9mZl90IHRvX3JlYWQ7CisrICAgICAgc2l6ZV90IHRvX3JlYWQ7CisgICAgICAgY2hhciAqcmVhZF9wdHI7CisgCistICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzdC5zdF9zaXplKTsKKysgICAgICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtYWxsb2MgKHNpemUpOworICAgICAgIGlmIChkYXRhID09IE5VTEwpCisgCXJldHVybjsKKyAKKy0gICAgICB0b19yZWFkID0gc3Quc3Rfc2l6ZTsKKysgICAgICB0b19yZWFkID0gc2l6ZTsKKyAgICAgICByZWFkX3B0ciA9IChjaGFyICopIGRhdGE7CisgICAgICAgZG8KKyAJeworIAkgIGxvbmcgaW50IG5iID0gKGxvbmcgaW50KSByZWFkIChmZCwgcmVhZF9wdHIsIHRvX3JlYWQpOworLQkgIGlmIChuYiA9PSAtMSkKKysJICBpZiAobmIgPD0gMCkKKyAJICAgIHsKKysjaWZkZWYgRUlOVFIKKysJICAgICAgaWYgKG5iID09IC0xICYmIGVycm5vID09IEVJTlRSKQorKwkJY29udGludWU7CisrI2VuZGlmCisgCSAgICAgIGNsb3NlIChmZCk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKy0KKyAJICByZWFkX3B0ciArPSBuYjsKKyAJICB0b19yZWFkIC09IG5iOworIAl9CitAQCAtMTQ0LDQ3ICsxMDA1LDM3OCBAQAorIAorICAgLyogVXNpbmcgdGhlIG1hZ2ljIG51bWJlciB3ZSBjYW4gdGVzdCB3aGV0aGVyIGl0IHJlYWxseSBpcyBhIG1lc3NhZ2UKKyAgICAgIGNhdGFsb2cgZmlsZS4gICovCistICBpZiAoZGF0YS0+bWFnaWMgIT0gX01BR0lDICYmIGRhdGEtPm1hZ2ljICE9IF9NQUdJQ19TV0FQUEVEKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEtPm1hZ2ljICE9IF9NQUdJQyAmJiBkYXRhLT5tYWdpYyAhPSBfTUFHSUNfU1dBUFBFRCwKKysJCQkwKSkKKyAgICAgeworICAgICAgIC8qIFRoZSBtYWdpYyBudW1iZXIgaXMgd3Jvbmc6IG5vdCBhIG1lc3NhZ2UgY2F0YWxvZyBmaWxlLiAgKi8KKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistICBkb21haW5fZmlsZS0+ZGF0YQorLSAgICA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvYWRlZF9kb21haW4pKTsKKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorKyAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbikpOworKyAgaWYgKGRvbWFpbiA9PSBOVUxMKQorICAgICByZXR1cm47CisrICBkb21haW5fZmlsZS0+ZGF0YSA9IGRvbWFpbjsKKyAKKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKyAgIGRvbWFpbi0+ZGF0YSA9IChjaGFyICopIGRhdGE7CisrICBkb21haW4tPnVzZV9tbWFwID0gdXNlX21tYXA7CisrICBkb21haW4tPm1tYXBfc2l6ZSA9IHNpemU7CisgICBkb21haW4tPm11c3Rfc3dhcCA9IGRhdGEtPm1hZ2ljICE9IF9NQUdJQzsKKysgIGRvbWFpbi0+bWFsbG9jZWQgPSBOVUxMOworIAorICAgLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF2YWlsYWJsZSB0YWJsZXMuICAqLworLSAgc3dpdGNoIChXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pKQorKyAgcmV2aXNpb24gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pOworKyAgLyogV2Ugc3VwcG9ydCBvbmx5IHRoZSBtYWpvciByZXZpc2lvbnMgMCBhbmQgMS4gICovCisrICBzd2l0Y2ggKHJldmlzaW9uID4+IDE2KQorICAgICB7CisgICAgIGNhc2UgMDoKKysgICAgY2FzZSAxOgorICAgICAgIGRvbWFpbi0+bnN0cmluZ3MgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bnN0cmluZ3MpOworLSAgICAgIGRvbWFpbi0+b3JpZ190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT5vcmlnX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKyAJKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ190YWJfb2Zmc2V0KSk7CistICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCisgCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnRyYW5zX3RhYl9vZmZzZXQpKTsKKyAgICAgICBkb21haW4tPmhhc2hfc2l6ZSA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9zaXplKTsKKy0gICAgICBkb21haW4tPmhhc2hfdGFiID0gKG5sc191aW50MzIgKikKKy0JKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSk7CisrICAgICAgZG9tYWluLT5oYXNoX3RhYiA9CisrCShkb21haW4tPmhhc2hfc2l6ZSA+IDIKKysJID8gKGNvbnN0IG5sc191aW50MzIgKikKKysJICAgKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSkKKysJIDogTlVMTCk7CisrICAgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSBkb21haW4tPm11c3Rfc3dhcDsKKysKKysgICAgICAvKiBOb3cgZGlzcGF0Y2ggb24gdGhlIG1pbm9yIHJldmlzaW9uLiAgKi8KKysgICAgICBzd2l0Y2ggKHJldmlzaW9uICYgMHhmZmZmKQorKwl7CisrCWNhc2UgMDoKKysJICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkgIGJyZWFrOworKwljYXNlIDE6CisrCWRlZmF1bHQ6CisrCSAgeworKwkgICAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKworKwkgICAgaWYgKGRvbWFpbi0+aGFzaF90YWIgPT0gTlVMTCkKKysJICAgICAgLyogVGhpcyBpcyBpbnZhbGlkLiAgVGhlc2UgbWlub3IgcmV2aXNpb25zIG5lZWQgYSBoYXNoIHRhYmxlLiAgKi8KKysJICAgICAgZ290byBpbnZhbGlkOworKworKwkgICAgbl9zeXNkZXBfc3RyaW5ncyA9CisrCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zdHJpbmdzKTsKKysJICAgIGlmIChuX3N5c2RlcF9zdHJpbmdzID4gMCkKKysJICAgICAgeworKwkJbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKysJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqc3lzZGVwX3NlZ21lbnRzOworKwkJY29uc3QgY2hhciAqKnN5c2RlcF9zZWdtZW50X3ZhbHVlczsKKysJCWNvbnN0IG5sc191aW50MzIgKm9yaWdfc3lzZGVwX3RhYjsKKysJCWNvbnN0IG5sc191aW50MzIgKnRyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyIG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQlzaXplX3QgbWVtbmVlZDsKKysJCWNoYXIgKm1lbTsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX29yaWdfc3lzZGVwX3RhYjsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX3RyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyICppbm1lbV9oYXNoX3RhYjsKKysJCXVuc2lnbmVkIGludCBpLCBqOworKworKwkJLyogR2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworKwkJbl9zeXNkZXBfc2VnbWVudHMgPQorKwkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bl9zeXNkZXBfc2VnbWVudHMpOworKwkJc3lzZGVwX3NlZ21lbnRzID0gKGNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+c3lzZGVwX3NlZ21lbnRzX29mZnNldCkpOworKwkJc3lzZGVwX3NlZ21lbnRfdmFsdWVzID0KKysJCSAgYWxsb2NhIChuX3N5c2RlcF9zZWdtZW50cyAqIHNpemVvZiAoY29uc3QgY2hhciAqKSk7CisrCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc2VnbWVudHM7IGkrKykKKysJCSAgeworKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPQorKwkJICAgICAgKGNoYXIgKikgZGF0YQorKwkJICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3NlZ21lbnRzW2ldLm9mZnNldCk7CisrCQkgICAgbmxzX3VpbnQzMiBuYW1lbGVuID0KKysJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ubGVuZ3RoKTsKKysKKysJCSAgICBpZiAoIShuYW1lbGVuID4gMCAmJiBuYW1lW25hbWVsZW4gLSAxXSA9PSAnXDAnKSkKKysJCSAgICAgIHsKKysJCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJCQlnb3RvIGludmFsaWQ7CisrCQkgICAgICB9CisrCisrCQkgICAgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW2ldID0gZ2V0X3N5c2RlcF9zZWdtZW50X3ZhbHVlIChuYW1lKTsKKysJCSAgfQorKworKwkJb3JpZ19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKysJCSAgKChjaGFyICopIGRhdGEKKysJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm9yaWdfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysJCXRyYW5zX3N5c2RlcF90YWIgPSAoY29uc3QgbmxzX3VpbnQzMiAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+dHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysKKysJCS8qIENvbXB1dGUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorKwkJICAgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFuZCB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuCisrCQkgICBBdCB0aGUgc2FtZSB0aW1lLCBhbHNvIGRyb3Agc3RyaW5nIHBhaXJzIHdoaWNoIHJlZmVyIHRvCisrCQkgICBhbiB1bmRlZmluZWQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50LiAgKi8KKysJCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJbWVtbmVlZCA9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysJCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgIHsKKysJCSAgICBpbnQgdmFsaWQgPSAxOworKwkJICAgIHNpemVfdCBuZWVkc1syXTsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJICAgICAgeworKwkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorKwkJCSAgKChjaGFyICopIGRhdGEKKysJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQlqID09IDAKKysJCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJc2l6ZV90IG5lZWQgPSAwOworKwkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQlpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikgIT0gU0VHTUVOVFNfRU5EKQorKwkJCSAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisrCQkJICAgIHsKKysJCQkgICAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysKKysJCQkgICAgICBuZWVkICs9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKysKKysJCQkgICAgICBzeXNkZXByZWYgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkgICAgICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJYnJlYWs7CisrCisrCQkJICAgICAgaWYgKHN5c2RlcHJlZiA+PSBuX3N5c2RlcF9zZWdtZW50cykKKysJCQkJeworKwkJCQkgIC8qIEludmFsaWQuICAqLworKwkJCQkgIGZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworKwkJCQkgIGdvdG8gaW52YWxpZDsKKysJCQkJfQorKworKwkJCSAgICAgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQl7CisrCQkJCSAgLyogVGhpcyBwYXJ0aWN1bGFyIHN0cmluZyBwYWlyIGlzIGludmFsaWQuICAqLworKwkJCQkgIHZhbGlkID0gMDsKKysJCQkJICBicmVhazsKKysJCQkJfQorKworKwkJCSAgICAgIG5lZWQgKz0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CisrCQkJICAgIH0KKysKKysJCQluZWVkc1tqXSA9IG5lZWQ7CisrCQkJaWYgKCF2YWxpZCkKKysJCQkgIGJyZWFrOworKwkJICAgICAgfQorKworKwkJICAgIGlmICh2YWxpZCkKKysJCSAgICAgIHsKKysJCQluX2lubWVtX3N5c2RlcF9zdHJpbmdzKys7CisrCQkJbWVtbmVlZCArPSBuZWVkc1swXSArIG5lZWRzWzFdOworKwkJICAgICAgfQorKwkJICB9CisrCQltZW1uZWVkICs9IDIgKiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKworKwkJaWYgKG5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPiAwKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgaW50IGs7CisrCisrCQkgICAgLyogQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkuICAqLworKwkJICAgIG1lbSA9IChjaGFyICopIG1hbGxvYyAobWVtbmVlZCk7CisrCQkgICAgaWYgKG1lbSA9PSBOVUxMKQorKwkJICAgICAgZ290byBpbnZhbGlkOworKworKwkJICAgIGRvbWFpbi0+bWFsbG9jZWQgPSBtZW07CisrCQkgICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworKwkJICAgIG1lbSArPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKwkJICAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CisrCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKysJCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CisrCQkgICAgaW5tZW1faGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKSBtZW07CisrCQkgICAgbWVtICs9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysKKysJCSAgICAvKiBDb21wdXRlIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MuICAqLworKwkJICAgIGsgPSAwOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgICAgICB7CisrCQkJaW50IHZhbGlkID0gMTsKKysKKysJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJCSAgeworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CisrCQkJICAgICAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisrCQkJICAgICAgKChjaGFyICopIGRhdGEKKysJCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJICAgIGogPT0gMAorKwkJCQkgICAgPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJICAgIDogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKysJCQkgICAgICBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQkgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCisrCQkJCSE9IFNFR01FTlRTX0VORCkKKysJCQkgICAgICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKysJCQkJeworKwkJCQkgIG5sc191aW50MzIgc3lzZGVwcmVmOworKworKwkJCQkgIHN5c2RlcHJlZiA9CisrCQkJCSAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkJICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJICAgIGJyZWFrOworKworKwkJCQkgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQkgICAgeworKwkJCQkgICAgICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMKKysJCQkJCSBpbnZhbGlkLiAgKi8KKysJCQkJICAgICAgdmFsaWQgPSAwOworKwkJCQkgICAgICBicmVhazsKKysJCQkJICAgIH0KKysJCQkJfQorKworKwkJCSAgICBpZiAoIXZhbGlkKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgfQorKworKwkJCWlmICh2YWxpZCkKKysJCQkgIHsKKysJCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKysJCQkgICAgICB7CisrCQkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKysJCQkJICAoKGNoYXIgKikgZGF0YQorKwkJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkJaiA9PSAwCisrCQkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorKwkJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJCWNvbnN0IGNoYXIgKnN0YXRpY19zZWdtZW50cyA9CisrCQkJCSAgKGNoYXIgKikgZGF0YQorKwkJCQkgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zdHJpbmctPm9mZnNldCk7CisrCQkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPQorKwkJCQkgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworKworKwkJCQkvKiBDb25jYXRlbmF0ZSB0aGUgc2VnbWVudHMsIGFuZCBmaWxsCisrCQkJCSAgIGlubWVtX29yaWdfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMCkgYW5kCisrCQkJCSAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWJba10gKGZvciBqID09IDEpLiAgKi8KKysKKysJCQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdGFiX2VudHJ5ID0KKysJCQkJICAoaiA9PSAwCisrCQkJCSAgID8gaW5tZW1fb3JpZ19zeXNkZXBfdGFiCisrCQkJCSAgIDogaW5tZW1fdHJhbnNfc3lzZGVwX3RhYikKKysJCQkJICArIGs7CisrCisrCQkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorKwkJCQkgICAgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIE9ubHkgb25lIHN0YXRpYyBzZWdtZW50LiAgKi8KKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+bGVuZ3RoID0KKysJCQkJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gc3RhdGljX3NlZ21lbnRzOworKwkJCQkgIH0KKysJCQkJZWxzZQorKwkJCQkgIHsKKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlciA9IG1lbTsKKysKKysJCQkJICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorKwkJCQkgICAgICB7CisrCQkJCQlubHNfdWludDMyIHNlZ3NpemUgPQorKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisrCQkJCQlubHNfdWludDMyIHN5c2RlcHJlZiA9CisrCQkJCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworKwkJCQkJc2l6ZV90IG47CisrCisrCQkJCQlpZiAoc2Vnc2l6ZSA+IDApCisrCQkJCQkgIHsKKysJCQkJCSAgICBtZW1jcHkgKG1lbSwgc3RhdGljX3NlZ21lbnRzLCBzZWdzaXplKTsKKysJCQkJCSAgICBtZW0gKz0gc2Vnc2l6ZTsKKysJCQkJCSAgICBzdGF0aWNfc2VnbWVudHMgKz0gc2Vnc2l6ZTsKKysJCQkJCSAgfQorKworKwkJCQkJaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisrCQkJCQkgIGJyZWFrOworKworKwkJCQkJbiA9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworKwkJCQkJbWVtY3B5IChtZW0sIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdLCBuKTsKKysJCQkJCW1lbSArPSBuOworKwkJCQkgICAgICB9CisrCisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPmxlbmd0aCA9CisrCQkJCSAgICAgIG1lbSAtIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKworKwkJCSAgICBrKys7CisrCQkJICB9CisrCQkgICAgICB9CisrCQkgICAgaWYgKGsgIT0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncykKKysJCSAgICAgIGFib3J0ICgpOworKworKwkJICAgIC8qIENvbXB1dGUgdGhlIGF1Z21lbnRlZCBoYXNoIHRhYmxlLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5oYXNoX3NpemU7IGkrKykKKysJCSAgICAgIGlubWVtX2hhc2hfdGFiW2ldID0KKysJCQlXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpXSk7CisrCQkgICAgZm9yIChpID0gMDsgaSA8IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7IGkrKykKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICptc2dpZCA9IGlubWVtX29yaWdfc3lzZGVwX3RhYltpXS5wb2ludGVyOworKwkJCW5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOworKwkJCW5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKysJCQlubHNfdWludDMyIGluY3IgPQorKwkJCSAgMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysJCQlmb3IgKDs7KQorKwkJCSAgeworKwkJCSAgICBpZiAoaW5tZW1faGFzaF90YWJbaWR4XSA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gIFVzZSBpdC4gICovCisrCQkJCWlubWVtX2hhc2hfdGFiW2lkeF0gPSAxICsgZG9tYWluLT5uc3RyaW5ncyArIGk7CisrCQkJCWJyZWFrOworKwkJCSAgICAgIH0KKysKKysJCQkgICAgaWYgKGlkeCA+PSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3IpCisrCQkJICAgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJCQkgICAgZWxzZQorKwkJCSAgICAgIGlkeCArPSBpbmNyOworKwkJCSAgfQorKwkJICAgICAgfQorKworKwkJICAgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBpbm1lbV9vcmlnX3N5c2RlcF90YWI7CisrCQkgICAgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gaW5tZW1fdHJhbnNfc3lzZGVwX3RhYjsKKysKKysJCSAgICBkb21haW4tPmhhc2hfdGFiID0gaW5tZW1faGFzaF90YWI7CisrCQkgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSAwOworKwkJICB9CisrCQllbHNlCisrCQkgIHsKKysJCSAgICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkJICB9CisrCisrCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworKwkJZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gTlVMTDsKKysJICAgICAgfQorKwkgIH0KKysJICBicmVhazsKKysJfQorICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorLSAgICAgIC8qIFRoaXMgaXMgYW4gaWxsZWdhbCByZXZpc2lvbi4gICovCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyAgICAgIC8qIFRoaXMgaXMgYW4gaW52YWxpZCByZXZpc2lvbi4gICovCisrICAgIGludmFsaWQ6CisrICAgICAgLyogVGhpcyBpcyBhbiBpbnZhbGlkIC5tbyBmaWxlLiAgKi8KKysgICAgICBpZiAoZG9tYWluLT5tYWxsb2NlZCkKKysJZnJlZSAoZG9tYWluLT5tYWxsb2NlZCk7CisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CitAQCAtMTkzLDcgKzEzODUsMzYgQEAKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIC8qIFNob3cgdGhhdCBvbmUgZG9tYWluIGlzIGNoYW5nZWQuICBUaGlzIG1pZ2h0IG1ha2Ugc29tZSBjYWNoZWQKKy0gICAgIHRyYW5zbGF0aW9ucyBpbnZhbGlkLiAgKi8KKy0gICsrX25sX21zZ19jYXRfY250cjsKKysgIC8qIE5vdyBpbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciBmcm9tIHRoZSBjaGFyYWN0ZXIgc2V0CisrICAgICB0aGUgZmlsZSBpcyBlbmNvZGVkIHdpdGggKGZvdW5kIGluIHRoZSBoZWFkZXIgZW50cnkpIHRvIHRoZSBkb21haW4ncworKyAgICAgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQgb3IgdGhlIGxvY2FsZSdzIGNoYXJhY3RlciBzZXQuICAqLworKyAgbnVsbGVudHJ5ID0gX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKworKyAgLyogQWxzbyBsb29rIGZvciBhIHBsdXJhbCBzcGVjaWZpY2F0aW9uLiAgKi8KKysgIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKG51bGxlbnRyeSwgJmRvbWFpbi0+cGx1cmFsLCAmZG9tYWluLT5ucGx1cmFscyk7CisgfQorKworKworKyNpZmRlZiBfTElCQworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF91bmxvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPnBsdXJhbCAhPSAmX19nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbCkKKysgICAgX19nZXR0ZXh0X2ZyZWVfZXhwIChkb21haW4tPnBsdXJhbCk7CisrCisrICBfbmxfZnJlZV9kb21haW5fY29udiAoZG9tYWluKTsKKysKKysgIGlmIChkb21haW4tPm1hbGxvY2VkKQorKyAgICBmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKysKKysjIGlmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKysgIGlmIChkb21haW4tPnVzZV9tbWFwKQorKyAgICBtdW5tYXAgKChjYWRkcl90KSBkb21haW4tPmRhdGEsIGRvbWFpbi0+bW1hcF9zaXplKTsKKysgIGVsc2UKKysjIGVuZGlmCS8qIF9QT1NJWF9NQVBQRURfRklMRVMgKi8KKysgICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKysKKysgIGZyZWUgKGRvbWFpbik7CisrfQorKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsY2hhcnNldC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsY2hhcnNldC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDc4NzI5MzkyIC0wNDAwCitAQCAtMCwwICsxLDM5OCBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorKworKyNpZiBIQVZFX1NURERFRl9ICisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaWYgSEFWRV9TVFJJTkdfSAorKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrIyB1bmRlZiBXSU4zMiAgIC8qIGF2b2lkIHdhcm5pbmcgb24gbWluZ3czMiAqLworKyMgZGVmaW5lIFdJTjMyCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTVhfXworKy8qIEFzc3VtZSBFTVggcHJvZ3JhbSBydW5zIG9uIE9TLzIsIGV2ZW4gaWYgY29tcGlsZWQgdW5kZXIgRE9TLiAgKi8KKysjIGRlZmluZSBPUzIKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgV0lOMzIKKysjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBlbHNlCisrIyAgaWYgSEFWRV9TRVRMT0NBTEUKKysjICAgaW5jbHVkZSA8bG9jYWxlLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBPUzIKKysjIGRlZmluZSBJTkNMX0RPUworKyMgaW5jbHVkZSA8b3MyLmg+CisrI2VuZGlmCisrCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysjZWxzZQorKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrI2VuZGlmCisrCisrI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisrIyBkZWZpbmUgRElSRUNUT1JZX1NFUEFSQVRPUiAnLycKKysjZW5kaWYKKysKKysjaWZuZGVmIElTU0xBU0gKKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gRElSRUNUT1JZX1NFUEFSQVRPUikKKysjZW5kaWYKKysKKysjaWYgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQKKysjIHVuZGVmIGdldGMKKysjIGRlZmluZSBnZXRjIGdldGNfdW5sb2NrZWQKKysjZW5kaWYKKysKKysvKiBUaGUgZm9sbG93aW5nIHN0YXRpYyB2YXJpYWJsZSBpcyBkZWNsYXJlZCAndm9sYXRpbGUnIHRvIGF2b2lkIGEKKysgICBwb3NzaWJsZSBtdWx0aXRocmVhZCBwcm9ibGVtIGluIHRoZSBmdW5jdGlvbiBnZXRfY2hhcnNldF9hbGlhc2VzLiBJZiB3ZQorKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisrICAgJ2NoYXJzZXRfYWxpYXNlcycgc2ltdWx0YW5lb3VzbHksIGJvdGggd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHZhbHVlLAorKyAgIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgb2sgaWYgdGhlIHR3byBhc3NpZ25tZW50cyB0byAnY2hhcnNldF9hbGlhc2VzJworKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisrI2lmIF9fU1REQ19fICE9IDEKKysjIGRlZmluZSB2b2xhdGlsZSAvKiBlbXB0eSAqLworKyNlbmRpZgorKy8qIFBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUsIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4KKysgICByZWFkLCBlbHNlIE5VTEwuICBJdHMgZm9ybWF0IGlzOgorKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworK3N0YXRpYyBjb25zdCBjaGFyICogdm9sYXRpbGUgY2hhcnNldF9hbGlhc2VzOworKworKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfY2hhcnNldF9hbGlhc2VzICgpCisreworKyAgY29uc3QgY2hhciAqY3A7CisrCisrICBjcCA9IGNoYXJzZXRfYWxpYXNlczsKKysgIGlmIChjcCA9PSBOVUxMKQorKyAgICB7CisrI2lmICEoZGVmaW5lZCBWTVMgfHwgZGVmaW5lZCBXSU4zMikKKysgICAgICBGSUxFICpmcDsKKysgICAgICBjb25zdCBjaGFyICpkaXIgPSByZWxvY2F0ZSAoTElCRElSKTsKKysgICAgICBjb25zdCBjaGFyICpiYXNlID0gImNoYXJzZXQuYWxpYXMiOworKyAgICAgIGNoYXIgKmZpbGVfbmFtZTsKKysKKysgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworKyAgICAgIHsKKysJc2l6ZV90IGRpcl9sZW4gPSBzdHJsZW4gKGRpcik7CisrCXNpemVfdCBiYXNlX2xlbiA9IHN0cmxlbiAoYmFzZSk7CisrCWludCBhZGRfc2xhc2ggPSAoZGlyX2xlbiA+IDAgJiYgIUlTU0xBU0ggKGRpcltkaXJfbGVuIC0gMV0pKTsKKysJZmlsZV9uYW1lID0gKGNoYXIgKikgbWFsbG9jIChkaXJfbGVuICsgYWRkX3NsYXNoICsgYmFzZV9sZW4gKyAxKTsKKysJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorKwkgIHsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lLCBkaXIsIGRpcl9sZW4pOworKwkgICAgaWYgKGFkZF9zbGFzaCkKKysJICAgICAgZmlsZV9uYW1lW2Rpcl9sZW5dID0gRElSRUNUT1JZX1NFUEFSQVRPUjsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lICsgZGlyX2xlbiArIGFkZF9zbGFzaCwgYmFzZSwgYmFzZV9sZW4gKyAxKTsKKysJICB9CisrICAgICAgfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIpKSA9PSBOVUxMKQorKwkvKiBPdXQgb2YgbWVtb3J5IG9yIGZpbGUgbm90IGZvdW5kLCB0cmVhdCBpdCBhcyBlbXB0eS4gICovCisrCWNwID0gIiI7CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogUGFyc2UgdGhlIGZpbGUncyBjb250ZW50cy4gICovCisrCSAgaW50IGM7CisrCSAgY2hhciBidWYxWzUwKzFdOworKwkgIGNoYXIgYnVmMls1MCsxXTsKKysJICBjaGFyICpyZXNfcHRyID0gTlVMTDsKKysJICBzaXplX3QgcmVzX3NpemUgPSAwOworKwkgIHNpemVfdCBsMSwgbDI7CisrCisrCSAgZm9yICg7OykKKysJICAgIHsKKysJICAgICAgYyA9IGdldGMgKGZwKTsKKysJICAgICAgaWYgKGMgPT0gRU9GKQorKwkJYnJlYWs7CisrCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorKwkJY29udGludWU7CisrCSAgICAgIGlmIChjID09ICcjJykKKysJCXsKKysJCSAgLyogU2tpcCBjb21tZW50LCB0byBlbmQgb2YgbGluZS4gICovCisrCQkgIGRvCisrCQkgICAgYyA9IGdldGMgKGZwKTsKKysJCSAgd2hpbGUgKCEoYyA9PSBFT0YgfHwgYyA9PSAnXG4nKSk7CisrCQkgIGlmIChjID09IEVPRikKKysJCSAgICBicmVhazsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICAgIHVuZ2V0YyAoYywgZnApOworKwkgICAgICBpZiAoZnNjYW5mIChmcCwgIiU1MHMgJTUwcyIsIGJ1ZjEsIGJ1ZjIpIDwgMikKKysJCWJyZWFrOworKwkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CisrCSAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKysJICAgICAgaWYgKHJlc19zaXplID09IDApCisrCQl7CisrCQkgIHJlc19zaXplID0gbDEgKyAxICsgbDIgKyAxOworKwkJICByZXNfcHRyID0gKGNoYXIgKikgbWFsbG9jIChyZXNfc2l6ZSArIDEpOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHJlc19zaXplICs9IGwxICsgMSArIGwyICsgMTsKKysJCSAgcmVzX3B0ciA9IChjaGFyICopIHJlYWxsb2MgKHJlc19wdHIsIHJlc19zaXplICsgMSk7CisrCQl9CisrCSAgICAgIGlmIChyZXNfcHRyID09IE5VTEwpCisrCQl7CisrCQkgIC8qIE91dCBvZiBtZW1vcnkuICovCisrCQkgIHJlc19zaXplID0gMDsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSkgLSAobDEgKyAxKSwgYnVmMSk7CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSksIGJ1ZjIpOworKwkgICAgfQorKwkgIGZjbG9zZSAoZnApOworKwkgIGlmIChyZXNfc2l6ZSA9PSAwKQorKwkgICAgY3AgPSAiIjsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICoocmVzX3B0ciArIHJlc19zaXplKSA9ICdcMCc7CisrCSAgICAgIGNwID0gcmVzX3B0cjsKKysJICAgIH0KKysJfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgIT0gTlVMTCkKKysJZnJlZSAoZmlsZV9uYW1lKTsKKysKKysjZWxzZQorKworKyMgaWYgZGVmaW5lZCBWTVMKKysgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgYW4gZXh0cmEgZmlsZSBjaGFyc2V0LmFsaWFzX3ZtcyBpbiB0aGUKKysJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisrICAgICAgLyogVGhlIGxpc3Qgb2YgZW5jb2RpbmdzIGlzIHRha2VuIGZyb20gdGhlIE9wZW5WTVMgNy4zLTEgZG9jdW1lbnRhdGlvbgorKwkgIkNvbXBhcSBDIFJ1bi1UaW1lIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCBmb3IgT3BlblZNUyBzeXN0ZW1zIgorKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKysgICAgICBjcCA9ICJJU084ODU5LTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIklTTzg4NTktMiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisrCSAgICJJU084ODU5LTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIklTTzg4NTktOCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisrCSAgIC8qIEphcGFuZXNlICovCisrCSAgICJldWNKUCIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKysJICAgIkRFQ0tBTkpJIiAiXDAiICJERUMtS0FOSkkiICJcMCIKKysJICAgIlNERUNLQU5KSSIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgIC8qIENoaW5lc2UgKi8KKysJICAgImV1Y1RXIiAiXDAiICJFVUMtVFciICJcMCIKKysJICAgIkRFQ0hBTllVIiAiXDAiICJERUMtSEFOWVUiICJcMCIKKysJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKysJICAgLyogS29yZWFuICovCisrCSAgICJERUNLT1JFQU4iICJcMCIgIkVVQy1LUiIgIlwwIjsKKysjIGVuZGlmCisrCisrIyBpZiBkZWZpbmVkIFdJTjMyCisrICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCisrCSBkaXJlY3RvcnkgYXMgdGhlIERMTCBhbmQgb2YgcmV0cmlldmluZyB0aGUgRExMJ3MgZGlyZWN0b3J5IGF0CisrCSBydW50aW1lLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworKworKyAgICAgIGNwID0gIkNQOTM2IiAiXDAiICJHQksiICJcMCIKKysJICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKysJICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisrCSAgICJDUDIwODY2IiAiXDAiICJLT0k4LVIiICJcMCIKKysJICAgIkNQMjE4NjYiICJcMCIgIktPSTgtUlUiICJcMCIKKysJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIkNQMjg1OTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKysJICAgIkNQMjg1OTMiICJcMCIgIklTTy04ODU5LTMiICJcMCIKKysJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKysJICAgIkNQMjg1OTUiICJcMCIgIklTTy04ODU5LTUiICJcMCIKKysJICAgIkNQMjg1OTYiICJcMCIgIklTTy04ODU5LTYiICJcMCIKKysJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIkNQMjg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKysJICAgIkNQMjg1OTkiICJcMCIgIklTTy04ODU5LTkiICJcMCIKKysJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjaGFyc2V0X2FsaWFzZXMgPSBjcDsKKysgICAgfQorKworKyAgcmV0dXJuIGNwOworK30KKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytjb25zdCBjaGFyICoKKytsb2NhbGVfY2hhcnNldCAoKQorK3sKKysgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CisrICBjb25zdCBjaGFyICphbGlhc2VzOworKworKyNpZiAhKGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBPUzIpCisrCisrIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysKKysgIC8qIE1vc3Qgc3lzdGVtcyBzdXBwb3J0IG5sX2xhbmdpbmZvIChDT0RFU0VUKSBub3dhZGF5cy4gICovCisrICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworKworKyMgZWxzZQorKworKyAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworKyAgY29uc3QgY2hhciAqbG9jYWxlID0gTlVMTDsKKysKKysgIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKysgICAgIChsaWtlIFN1bk9TIDQgb3IgREpHUFApIGhhdmUgb25seSB0aGUgQyBsb2NhbGUuICBUaGVyZWZvcmUgd2UgZG9uJ3QKKysgICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKysgICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworKyMgIGlmIEhBVkVfU0VUTE9DQUxFICYmIDAKKysgIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworKyMgIGVuZGlmCisrICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrICAgIHsKKysgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrCXsKKysJICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworKwkgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysJICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKysJfQorKyAgICB9CisrCisrICAvKiBPbiBzb21lIG9sZCBzeXN0ZW1zLCBvbmUgdXNlZCB0byBzZXQgbG9jYWxlID0gImlzbzg4NTlfMSIuIE9uIG90aGVycywKKysgICAgIHlvdSBzZXQgaXQgdG8gImxhbmd1YWdlX0NPVU5UUlkuY2hhcnNldCIuIEluIGFueSBjYXNlLCB3ZSByZXNvbHZlIGl0CisrICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgY29kZXNldCA9IGxvY2FsZTsKKysKKysjIGVuZGlmCisrCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKworKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworKworKyAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICBzcHJpbnRmIChidWYsICJDUCV1IiwgR2V0QUNQICgpKTsKKysgIGNvZGVzZXQgPSBidWY7CisrCisrI2VsaWYgZGVmaW5lZCBPUzIKKysKKysgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKysgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKysgIFVMT05HIGNwWzNdOworKyAgVUxPTkcgY3BsZW47CisrCisrICAvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBjb2Rlc2V0LCBhcyBzZXQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisrICAgICB3aXRoIHN0YW5kYXJkIGxhbmd1YWdlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisrICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysgICAgeworKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisrICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKwlsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisrICAgIH0KKysgIGlmIChsb2NhbGUgIT0gTlVMTCAmJiBsb2NhbGVbMF0gIT0gJ1wwJykKKysgICAgeworKyAgICAgIC8qIElmIHRoZSBsb2NhbGUgbmFtZSBjb250YWlucyBhbiBlbmNvZGluZyBhZnRlciB0aGUgZG90LCByZXR1cm4gaXQuICAqLworKyAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNociAobG9jYWxlLCAnLicpOworKworKyAgICAgIGlmIChkb3QgIT0gTlVMTCkKKysJeworKwkgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworKworKwkgIGRvdCsrOworKwkgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKysJICBtb2RpZmllciA9IHN0cmNociAoZG90LCAnQCcpOworKwkgIGlmIChtb2RpZmllciA9PSBOVUxMKQorKwkgICAgcmV0dXJuIGRvdDsKKysJICBpZiAobW9kaWZpZXIgLSBkb3QgPCBzaXplb2YgKGJ1ZikpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKysJICAgICAgYnVmIFttb2RpZmllciAtIGRvdF0gPSAnXDAnOworKwkgICAgICByZXR1cm4gYnVmOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogUmVzb2x2ZSB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgICAgIGNvZGVzZXQgPSBsb2NhbGU7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIE9TLzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICAgICAgaWYgKERvc1F1ZXJ5Q3AgKHNpemVvZiAoY3ApLCBjcCwgJmNwbGVuKSkKKysJY29kZXNldCA9ICIiOworKyAgICAgIGVsc2UKKysJeworKwkgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBjcFswXSk7CisrCSAgY29kZXNldCA9IGJ1ZjsKKysJfQorKyAgICB9CisrCisrI2VuZGlmCisrCisrICBpZiAoY29kZXNldCA9PSBOVUxMKQorKyAgICAvKiBUaGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQuICAqLworKyAgICBjb2Rlc2V0ID0gIiI7CisrCisrICAvKiBSZXNvbHZlIGFsaWFzLiAqLworKyAgZm9yIChhbGlhc2VzID0gZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKTsKKysgICAgICAgKmFsaWFzZXMgIT0gJ1wwJzsKKysgICAgICAgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSwgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSkKKysgICAgaWYgKHN0cmNtcCAoY29kZXNldCwgYWxpYXNlcykgPT0gMAorKwl8fCAoYWxpYXNlc1swXSA9PSAnKicgJiYgYWxpYXNlc1sxXSA9PSAnXDAnKSkKKysgICAgICB7CisrCWNvZGVzZXQgPSBhbGlhc2VzICsgc3RybGVuIChhbGlhc2VzKSArIDE7CisrCWJyZWFrOworKyAgICAgIH0KKysKKysgIC8qIERvbid0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuICBHTlUgbGliYyBhbmQgR05VIGxpYmljb252IGludGVycHJldAorKyAgICAgdGhlIGVtcHR5IHN0cmluZyBhcyBkZW5vdGluZyAidGhlIGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZyIsCisrICAgICB0aHVzIEdOVSBsaWJpY29udiB3b3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYSBzZWNvbmQgdGltZS4gICovCisrICBpZiAoY29kZXNldFswXSA9PSAnXDAnKQorKyAgICBjb2Rlc2V0ID0gIkFTQ0lJIjsKKysKKysgIHJldHVybiBjb2Rlc2V0OworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGNoYXJzZXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGNoYXJzZXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ4MzcyODYzMiAtMDQwMAorQEAgLTAsMCArMSw0MiBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDSEFSU0VUIExpYnJhcnkuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQ0FMQ0hBUlNFVF9ICisrI2RlZmluZSBfTE9DQUxDSEFSU0VUX0gKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysKKysjZW5kaWYgLyogX0xPQ0FMQ0hBUlNFVF9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlLmFsaWFzCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZS5hbGlhcwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ5OTcyNjIwMCAtMDQwMAorQEAgLTAsMCArMSw3OCBAQAorKyMgTG9jYWxlIG5hbWUgYWxpYXMgZGF0YSBiYXNlLgorKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjIFVTQS4KKysKKysjIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9mCisrIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KKysjCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCisrIyBBIHNpbmdsZSBsaW5lIGNvbnRhaW5zIHR3byBmaWVsZHM6IGFuIGFsaWFzIGFuZCBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4KKysjIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgorKworKyMgTm90ZTogVGhpcyBmaWxlIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiAgSWYgeW91IGhhdmUgYSB2YWx1ZSBmb3IKKysjIHlvdXIgb3duIHNpdGUgd2hpY2ggeW91IHRoaW5rIG1pZ2h0IGJlIHVzZWZ1bCBmb3Igb3RoZXJzIHRvbywgc2hhcmUKKysjIGl0IHdpdGggdGhlIHJlc3Qgb2YgdXMuICBTZW5kIGl0IHVzaW5nIHRoZSBgZ2xpYmNidWcnIHNjcmlwdCB0bworKyMgYnVnc0BnbnUub3JnLgorKworKyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAKKysKKytib2ttYWwJCW5iX05PLklTTy04ODU5LTEKKytib2tt5WwJCW5iX05PLklTTy04ODU5LTEKKytjYXRhbGFuCQljYV9FUy5JU08tODg1OS0xCisrY3JvYXRpYW4JaHJfSFIuSVNPLTg4NTktMgorK2N6ZWNoCQljc19DWi5JU08tODg1OS0yCisrZGFuaXNoICAgICAgICAgIGRhX0RLLklTTy04ODU5LTEKKytkYW5zawkJZGFfREsuSVNPLTg4NTktMQorK2RldXRzY2gJCWRlX0RFLklTTy04ODU5LTEKKytkdXRjaAkJbmxfTkwuSVNPLTg4NTktMQorK2Vlc3RpCQlldF9FRS5JU08tODg1OS0xCisrZXN0b25pYW4JZXRfRUUuSVNPLTg4NTktMQorK2Zpbm5pc2ggICAgICAgICBmaV9GSS5JU08tODg1OS0xCisrZnJhbudhaXMJZnJfRlIuSVNPLTg4NTktMQorK2ZyZW5jaAkJZnJfRlIuSVNPLTg4NTktMQorK2dhbGVnbwkJZ2xfRVMuSVNPLTg4NTktMQorK2dhbGljaWFuCWdsX0VTLklTTy04ODU5LTEKKytnZXJtYW4JCWRlX0RFLklTTy04ODU5LTEKKytncmVlayAgICAgICAgICAgZWxfR1IuSVNPLTg4NTktNworK2hlYnJldyAgICAgICAgICBoZV9JTC5JU08tODg1OS04CisraHJ2YXRza2kJaHJfSFIuSVNPLTg4NTktMgorK2h1bmdhcmlhbiAgICAgICBodV9IVS5JU08tODg1OS0yCisraWNlbGFuZGljICAgICAgIGlzX0lTLklTTy04ODU5LTEKKytpdGFsaWFuICAgICAgICAgaXRfSVQuSVNPLTg4NTktMQorK2phcGFuZXNlCWphX0pQLmV1Y0pQCisramFwYW5lc2UuZXVjCWphX0pQLmV1Y0pQCisramFfSlAJCWphX0pQLmV1Y0pQCisramFfSlAudWppcwlqYV9KUC5ldWNKUAorK2phcGFuZXNlLnNqaXMJamFfSlAuU0pJUworK2tvcmVhbgkJa29fS1IuZXVjS1IKKytrb3JlYW4uZXVjIAlrb19LUi5ldWNLUgorK2tvX0tSCQlrb19LUi5ldWNLUgorK2xpdGh1YW5pYW4gICAgICBsdF9MVC5JU08tODg1OS0xMworK25vX05PCQluYl9OTy5JU08tODg1OS0xCisrbm9fTk8uSVNPLTg4NTktMSBuYl9OTy5JU08tODg1OS0xCisrbm9yd2VnaWFuICAgICAgIG5iX05PLklTTy04ODU5LTEKKytueW5vcnNrCQlubl9OTy5JU08tODg1OS0xCisrcG9saXNoICAgICAgICAgIHBsX1BMLklTTy04ODU5LTIKKytwb3J0dWd1ZXNlICAgICAgcHRfUFQuSVNPLTg4NTktMQorK3JvbWFuaWFuICAgICAgICByb19STy5JU08tODg1OS0yCisrcnVzc2lhbiAgICAgICAgIHJ1X1JVLklTTy04ODU5LTUKKytzbG92YWsgICAgICAgICAgc2tfU0suSVNPLTg4NTktMgorK3Nsb3ZlbmUgICAgICAgICBzbF9TSS5JU08tODg1OS0yCisrc2xvdmVuaWFuICAgICAgIHNsX1NJLklTTy04ODU5LTIKKytzcGFuaXNoICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQorK3N3ZWRpc2ggICAgICAgICBzdl9TRS5JU08tODg1OS0xCisrdGhhaQkJdGhfVEguVElTLTYyMAorK3R1cmtpc2ggICAgICAgICB0cl9UUi5JU08tODg1OS05CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlYWxpYXMuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTA1NzI1Mjg4IC0wNDAwCitAQCAtMSwyMCArMSwyNyBAQAorLS8qIEhhbmRsZSBhbGlhc2VzIGZvciBsb2NhbGUgbmFtZXMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorQEAgLTIyLDU2ICsyOSw0NSBAQAorIAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9fX0ZTRVRMT0NLSU5HCisrIyBpbmNsdWRlIDxzdGRpb19leHQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisgI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiBhbGxvY2EKKyAjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorICMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKyAjZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisgIyBlbHNlCistIyAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorICMgIGVsc2UKKy0jICAgaWZuZGVmIGFsbG9jYQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKyBjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorICMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLWNoYXIgKmdldGVudiAoKTsKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKy0jICBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSMgZW5kaWYKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisgI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKysjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorICNlbmRpZgorIAorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorICNpZmRlZiBfTElCQworQEAgLTc5LDQzICs3NSw0OSBAQAorICAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKysKKysjIGlmbmRlZiBtZW1wY3B5CisrIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIEhBVkVfTUVNUENQWQkxCisrIyBkZWZpbmUgSEFWRV9fX0ZTRVRMT0NLSU5HCTEKKysKKysvKiBXZSBuZWVkIGxvY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHBsYWNlcy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKworK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKyAjZW5kaWYKKyAKKysvKiBTb21lIG9wdGltaXphdGlvbnMgZm9yIGdsaWJjLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZl91bmxvY2tlZCAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHNfdW5sb2NrZWQgKGJ1ZiwgbiwgZnApCisrI2Vsc2UKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZiAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHMgKGJ1ZiwgbiwgZnApCisrI2VuZGlmCisgCistLyogRm9yIHRob3NlIGxvb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrLyogRm9yIHRob3NlIGxvc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKyAgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworICNpZmRlZiBIQVZFX0FMTE9DQQorLS8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKyAjZWxzZQorLXN0cnVjdCBibG9ja19saXN0CisteworLSAgdm9pZCAqYWRkcmVzczsKKy0gIHN0cnVjdCBibG9ja19saXN0ICpuZXh0OworLX07CistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHIpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCistICAgIC8qIElmIHdlIGNhbm5vdCBnZXQgYSBmcmVlIGJsb2NrIHdlIGNhbm5vdCBhZGQgdGhlIG5ldyBlbGVtZW50IHRvCSAgICAgIFwKKy0gICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCistICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPmFkZHJlc3MgPSAoYWRkcik7CQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAgICAgXAorLSAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJICAgICAgXAorLSAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorLSAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwkJCQkJCSAgICAgIFwKKy0gICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgdW5kZWYgYWxsb2NhCistIyBkZWZpbmUgYWxsb2NhKHNpemUpIChtYWxsb2MgKHNpemUpKQorLSNlbmRpZgkvKiBoYXZlIGFsbG9jYSAqLworKyMgZGVmaW5lIGFsbG9jYShuKSBtYWxsb2MgKG4pCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQgfHwgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECisrIyB1bmRlZiBmZ2V0cworKyMgZGVmaW5lIGZnZXRzKGJ1ZiwgbGVuLCBzKSBmZ2V0c191bmxvY2tlZCAoYnVmLCBsZW4sIHMpCisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisrIyB1bmRlZiBmZW9mCisrIyBkZWZpbmUgZmVvZihzKSBmZW9mX3VubG9ja2VkIChzKQorKyNlbmRpZgorIAorIAorIHN0cnVjdCBhbGlhc19tYXAKK0BAIC0xMjUsMjYgKzEyNyw0MSBAQAorIH07CisgCisgCistc3RhdGljIHN0cnVjdCBhbGlhc19tYXAgKm1hcDsKKy1zdGF0aWMgc2l6ZV90IG5tYXAgPSAwOworLXN0YXRpYyBzaXplX3QgbWF4bWFwID0gMDsKKysjaWZuZGVmIF9MSUJDCisrIyBkZWZpbmUgbGliY19mcmVlcmVzX3B0cihkZWNsKSBkZWNsCisrI2VuZGlmCisrCisrbGliY19mcmVlcmVzX3B0ciAoc3RhdGljIGNoYXIgKnN0cmluZ19zcGFjZSk7Cisrc3RhdGljIHNpemVfdCBzdHJpbmdfc3BhY2VfYWN0OworK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX21heDsKKytsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgc3RydWN0IGFsaWFzX21hcCAqbWFwKTsKKytzdGF0aWMgc2l6ZV90IG5tYXA7Cisrc3RhdGljIHNpemVfdCBtYXhtYXA7CisgCisgCisgLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKy1zdGF0aWMgc2l6ZV90IHJlYWRfYWxpYXNfZmlsZSBQQVJBTVMgKChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikpOworLXN0YXRpYyB2b2lkIGV4dGVuZF9hbGlhc190YWJsZSBQQVJBTVMgKCh2b2lkKSk7Cistc3RhdGljIGludCBhbGlhc19jb21wYXJlIFBBUkFNUyAoKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCistCQkJCSAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMikpOworK3N0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBpbnQgZXh0ZW5kX2FsaWFzX3RhYmxlICh2b2lkKTsKKytzdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCisrCQkJICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKTsKKyAKKyAKKyBjb25zdCBjaGFyICoKKy1fbmxfZXhwYW5kX2FsaWFzIChuYW1lKQorLSAgICBjb25zdCBjaGFyICpuYW1lOworK19ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLSAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICBzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2FsaWFzX3BhdGg7CisgICBzdHJ1Y3QgYWxpYXNfbWFwICpyZXR2YWw7CisrICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICAgc2l6ZV90IGFkZGVkOworIAorKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrI2VuZGlmCisrCisrICBpZiAobG9jYWxlX2FsaWFzX3BhdGggPT0gTlVMTCkKKysgICAgbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKysKKyAgIGRvCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYWxpYXNfbWFwIGl0ZW07CitAQCAtMTU0LDE1ICsxNzEsMTggQEAKKyAgICAgICBpZiAobm1hcCA+IDApCisgCXJldHZhbCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIGJzZWFyY2ggKCZpdGVtLCBtYXAsIG5tYXAsCisgCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKy0JCQkJCSAgICAgICAoaW50ICgqKSBQQVJBTVMgKChjb25zdCB2b2lkICosCistCQkJCQkJCQkgY29uc3Qgdm9pZCAqKSkKKysJCQkJCSAgICAgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLAorKwkJCQkJCQkgY29uc3Qgdm9pZCAqKQorIAkJCQkJCSkgYWxpYXNfY29tcGFyZSk7CisgICAgICAgZWxzZQorIAlyZXR2YWwgPSBOVUxMOworIAorICAgICAgIC8qIFdlIHJlYWxseSBmb3VuZCBhbiBhbGlhcy4gIFJldHVybiB0aGUgdmFsdWUuICAqLworICAgICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JcmV0dXJuIHJldHZhbC0+dmFsdWU7CisrCXsKKysJICByZXN1bHQgPSByZXR2YWwtPnZhbHVlOworKwkgIGJyZWFrOworKwl9CisgCisgICAgICAgLyogUGVyaGFwcyB3ZSBjYW4gZmluZCBhbm90aGVyIGFsaWFzIGZpbGUuICAqLworICAgICAgIGFkZGVkID0gMDsKK0BAIC0xNzAsMTEgKzE5MCwxMiBAQAorIAl7CisgCSAgY29uc3QgY2hhciAqc3RhcnQ7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09ICc6JykKKysJICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gPT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAkgIHN0YXJ0ID0gbG9jYWxlX2FsaWFzX3BhdGg7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJzonKQorKwkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSAnXDAnCisrCQkgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAorIAkgIGlmIChzdGFydCA8IGxvY2FsZV9hbGlhc19wYXRoKQorQEAgLTE4Myw3OCArMjA0LDg3IEBACisgICAgIH0KKyAgIHdoaWxlIChhZGRlZCAhPSAwKTsKKyAKKy0gIHJldHVybiBOVUxMOworKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysjZW5kaWYKKysKKysgIHJldHVybiByZXN1bHQ7CisgfQorIAorIAorIHN0YXRpYyBzaXplX3QKKy1yZWFkX2FsaWFzX2ZpbGUgKGZuYW1lLCBmbmFtZV9sZW4pCistICAgICBjb25zdCBjaGFyICpmbmFtZTsKKy0gICAgIGludCBmbmFtZV9sZW47CisraW50ZXJuYWxfZnVuY3Rpb24KKytyZWFkX2FsaWFzX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKQorIHsKKy0jaWZuZGVmIEhBVkVfQUxMT0NBCistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CistI2VuZGlmCisgICBGSUxFICpmcDsKKyAgIGNoYXIgKmZ1bGxfZm5hbWU7CisgICBzaXplX3QgYWRkZWQ7CisgICBzdGF0aWMgY29uc3QgY2hhciBhbGlhc2ZpbGVbXSA9ICIvbG9jYWxlLmFsaWFzIjsKKyAKKyAgIGZ1bGxfZm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKGZuYW1lX2xlbiArIHNpemVvZiBhbGlhc2ZpbGUpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCBmdWxsX2ZuYW1lKTsKKysjaWZkZWYgSEFWRV9NRU1QQ1BZCisrICBtZW1wY3B5IChtZW1wY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKSwKKysJICAgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZWxzZQorICAgbWVtY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKTsKKyAgIG1lbWNweSAoJmZ1bGxfZm5hbWVbZm5hbWVfbGVuXSwgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZW5kaWYKKyAKKy0gIGZwID0gZm9wZW4gKGZ1bGxfZm5hbWUsICJyIik7CisrICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CisrICBmcmVlYSAoZnVsbF9mbmFtZSk7CisgICBpZiAoZnAgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorKyAgICByZXR1cm4gMDsKKysKKysjaWZkZWYgSEFWRV9fX0ZTRVRMT0NLSU5HCisrICAvKiBObyB0aHJlYWRzIHByZXNlbnQuICAqLworKyAgX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKysjZW5kaWYKKyAKKyAgIGFkZGVkID0gMDsKKy0gIHdoaWxlICghZmVvZiAoZnApKQorKyAgd2hpbGUgKCFGRU9GIChmcCkpCisgICAgIHsKKyAgICAgICAvKiBJdCBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gdXNlIGEgZml4IGJ1ZmZlciBoZXJlIGJlY2F1c2UKKyAJIGEpIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHR3byBmaWVsZHMKKyAJIGIpIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHVzYWJsZSBhcyBmaWxlIG5hbWVzIGFuZCBzbyBtdXN0IG5vdAorIAkgICAgYmUgdGhhdCBsb25nCistICAgICAgICovCistICAgICAgY2hhciBidWZbQlVGU0laXTsKKysJIFdlIGF2b2lkIGEgbXVsdGkta2lsb2J5dGUgYnVmZmVyIGhlcmUgc2luY2UgdGhpcyB3b3VsZCB1c2UgdXAKKysJIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKysJIG1lbW9yeS4gICovCisrICAgICAgY2hhciBidWZbNDAwXTsKKyAgICAgICBjaGFyICphbGlhczsKKyAgICAgICBjaGFyICp2YWx1ZTsKKyAgICAgICBjaGFyICpjcDsKKyAKKy0gICAgICBpZiAoZmdldHMgKGJ1ZiwgQlVGU0laLCBmcCkgPT0gTlVMTCkKKysgICAgICBpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCisgCS8qIEVPRiByZWFjaGVkLiAgKi8KKyAJYnJlYWs7CisgCisgICAgICAgY3AgPSBidWY7CisgICAgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UuICAqLworLSAgICAgIHdoaWxlIChpc3NwYWNlIChjcFswXSkpCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCSsrY3A7CisgCisgICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKyAgICAgICBpZiAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnIycpCisgCXsKKyAJICBhbGlhcyA9IGNwKys7CistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCSAgLyogVGVybWluYXRlIGFsaWFzIG5hbWUuICAqLworIAkgIGlmIChjcFswXSAhPSAnXDAnKQorIAkgICAgKmNwKysgPSAnXDAnOworIAorIAkgIC8qIE5vdyBsb29rIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZS4gICovCistCSAgd2hpbGUgKGlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCisgCSAgaWYgKGNwWzBdICE9ICdcMCcpCisgCSAgICB7CistCSAgICAgIGNoYXIgKnRwOworLQkgICAgICBzaXplX3QgbGVuOworKwkgICAgICBzaXplX3QgYWxpYXNfbGVuOworKwkgICAgICBzaXplX3QgdmFsdWVfbGVuOworIAorIAkgICAgICB2YWx1ZSA9IGNwKys7CistCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlIChjcFswXSkpCisrCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkJKytjcDsKKyAJICAgICAgLyogVGVybWluYXRlIHZhbHVlLiAgKi8KKyAJICAgICAgaWYgKGNwWzBdID09ICdcbicpCitAQCAtMjY5LDI4ICsyOTksNDQgQEAKKyAJCSpjcCsrID0gJ1wwJzsKKyAKKyAJICAgICAgaWYgKG5tYXAgPj0gbWF4bWFwKQorLQkJZXh0ZW5kX2FsaWFzX3RhYmxlICgpOworLQorLQkgICAgICAvKiBXZSBjYW5ub3QgZGVwZW5kIG9uIHN0cmR1cCBhdmFpbGFibGUgaW4gdGhlIGxpYmMuICBTaWdoISAgKi8KKy0JICAgICAgbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCistCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysJCWlmIChfX2J1aWx0aW5fZXhwZWN0IChleHRlbmRfYWxpYXNfdGFibGUgKCksIDApKQorIAkJICByZXR1cm4gYWRkZWQ7CistCQl9CistCSAgICAgIG1lbWNweSAodHAsIGFsaWFzLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0uYWxpYXMgPSB0cDsKKyAKKy0JICAgICAgbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCisrCSAgICAgIGFsaWFzX2xlbiA9IHN0cmxlbiAoYWxpYXMpICsgMTsKKysJICAgICAgdmFsdWVfbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworKworKwkgICAgICBpZiAoc3RyaW5nX3NwYWNlX2FjdCArIGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IHN0cmluZ19zcGFjZV9tYXgpCisgCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JCSAgcmV0dXJuIGFkZGVkOworKwkJICAvKiBJbmNyZWFzZSBzaXplIG9mIG1lbW9yeSBwb29sLiAgKi8KKysJCSAgc2l6ZV90IG5ld19zaXplID0gKHN0cmluZ19zcGFjZV9tYXgKKysJCQkJICAgICArIChhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiAxMDI0CisrCQkJCQk/IGFsaWFzX2xlbiArIHZhbHVlX2xlbiA6IDEwMjQpKTsKKysJCSAgY2hhciAqbmV3X3Bvb2wgPSAoY2hhciAqKSByZWFsbG9jIChzdHJpbmdfc3BhY2UsIG5ld19zaXplKTsKKysJCSAgaWYgKG5ld19wb29sID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGFkZGVkOworKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoc3RyaW5nX3NwYWNlICE9IG5ld19wb29sLCAwKSkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgaTsKKysKKysJCSAgICAgIGZvciAoaSA9IDA7IGkgPCBubWFwOyBpKyspCisrCQkJeworKwkJCSAgbWFwW2ldLmFsaWFzICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCSAgbWFwW2ldLnZhbHVlICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCX0KKysJCSAgICB9CisrCisrCQkgIHN0cmluZ19zcGFjZSA9IG5ld19wb29sOworKwkJICBzdHJpbmdfc3BhY2VfbWF4ID0gbmV3X3NpemU7CisgCQl9CistCSAgICAgIG1lbWNweSAodHAsIHZhbHVlLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0udmFsdWUgPSB0cDsKKysKKysJICAgICAgbWFwW25tYXBdLmFsaWFzID0gbWVtY3B5ICgmc3RyaW5nX3NwYWNlW3N0cmluZ19zcGFjZV9hY3RdLAorKwkJCQkJYWxpYXMsIGFsaWFzX2xlbik7CisrCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gYWxpYXNfbGVuOworKworKwkgICAgICBtYXBbbm1hcF0udmFsdWUgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisrCQkJCQl2YWx1ZSwgdmFsdWVfbGVuKTsKKysJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSB2YWx1ZV9sZW47CisgCisgCSAgICAgICsrbm1hcDsKKyAJICAgICAgKythZGRlZDsKK0BAIC0yOTksMTQgKzM0NSwxMSBAQAorIAorICAgICAgIC8qIFBvc3NpYmx5IG5vdCB0aGUgd2hvbGUgbGluZSBmaXRzIGludG8gdGhlIGJ1ZmZlci4gIElnbm9yZQorIAkgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuICAqLworLSAgICAgIHdoaWxlIChzdHJjaHIgKGNwLCAnXG4nKSA9PSBOVUxMKQorLQl7CistCSAgY3AgPSBidWY7CistCSAgaWYgKGZnZXRzIChidWYsIEJVRlNJWiwgZnApID09IE5VTEwpCistCSAgICAvKiBNYWtlIHN1cmUgdGhlIGlubmVyIGxvb3Agd2lsbCBiZSBsZWZ0LiAgVGhlIG91dGVyIGxvb3AKKy0JICAgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworLQkgICAgKmNwID0gJ1xuJzsKKy0JfQorKyAgICAgIHdoaWxlIChzdHJjaHIgKGJ1ZiwgJ1xuJykgPT0gTlVMTCkKKysJaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorKwkgIC8qIE1ha2Ugc3VyZSB0aGUgaW5uZXIgbG9vcCB3aWxsIGJlIGxlZnQuICBUaGUgb3V0ZXIgbG9vcAorKwkgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworKwkgIGJyZWFrOworICAgICB9CisgCisgICAvKiBTaG91bGQgd2UgdGVzdCBmb3IgZmVycm9yKCk/ICBJIHRoaW5rIHdlIGhhdmUgdG8gc2lsZW50bHkgaWdub3JlCitAQCAtMzE1LDQwICszNTgsMzMgQEAKKyAKKyAgIGlmIChhZGRlZCA+IDApCisgICAgIHFzb3J0IChtYXAsIG5tYXAsIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCksCistCSAgIChpbnQgKCopIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkpIGFsaWFzX2NvbXBhcmUpOworKwkgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBhbGlhc19jb21wYXJlKTsKKyAKKy0gIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKyAgIHJldHVybiBhZGRlZDsKKyB9CisgCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgaW50CisgZXh0ZW5kX2FsaWFzX3RhYmxlICgpCisgeworICAgc2l6ZV90IG5ld19zaXplOworICAgc3RydWN0IGFsaWFzX21hcCAqbmV3X21hcDsKKyAKKyAgIG5ld19zaXplID0gbWF4bWFwID09IDAgPyAxMDAgOiAyICogbWF4bWFwOworLSAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIG1hbGxvYyAobmV3X3NpemUKKy0JCQkJCSAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworKyAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIHJlYWxsb2MgKG1hcCwgKG5ld19zaXplCisrCQkJCQkJKiBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApKSk7CisgICBpZiAobmV3X21hcCA9PSBOVUxMKQorICAgICAvKiBTaW1wbHkgZG9uJ3QgZXh0ZW5kOiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGNvcmUuICAqLworLSAgICByZXR1cm47CistCistICBtZW1jcHkgKG5ld19tYXAsIG1hcCwgbm1hcCAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworLQorLSAgaWYgKG1heG1hcCAhPSAwKQorLSAgICBmcmVlIChtYXApOworKyAgICByZXR1cm4gLTE7CisgCisgICBtYXAgPSBuZXdfbWFwOworICAgbWF4bWFwID0gbmV3X3NpemU7CisrICByZXR1cm4gMDsKKyB9CisgCisgCisgc3RhdGljIGludAorLWFsaWFzX2NvbXBhcmUgKG1hcDEsIG1hcDIpCistICAgICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxOworLSAgICAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMjsKKythbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQorIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSQ0FTRUNNUAorICAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlbmFtZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZW5hbWUuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUxMDcyNDUyOCAtMDQwMAorQEAgLTAsMCArMSwxMTQyIEBACisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxvY2FsZS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LiAgKi8KKysvKiBXaW4zMiBjb2RlIHdyaXR0ZW4gYnkgVG9yIExpbGxxdmlzdCA8dG1sQGlraS5maT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKysjIGRlZmluZSBXSU4zMgorKyNlbmRpZgorKworKyNpZmRlZiBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysvKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CisrICAgMHgwMSBMQU5HX0FSQUJJQworKyAgIDB4MDIgTEFOR19CVUxHQVJJQU4KKysgICAweDAzIExBTkdfQ0FUQUxBTgorKyAgIDB4MDQgTEFOR19DSElORVNFCisrICAgMHgwNSBMQU5HX0NaRUNICisrICAgMHgwNiBMQU5HX0RBTklTSAorKyAgIDB4MDcgTEFOR19HRVJNQU4KKysgICAweDA4IExBTkdfR1JFRUsKKysgICAweDA5IExBTkdfRU5HTElTSAorKyAgIDB4MGEgTEFOR19TUEFOSVNICisrICAgMHgwYiBMQU5HX0ZJTk5JU0gKKysgICAweDBjIExBTkdfRlJFTkNICisrICAgMHgwZCBMQU5HX0hFQlJFVworKyAgIDB4MGUgTEFOR19IVU5HQVJJQU4KKysgICAweDBmIExBTkdfSUNFTEFORElDCisrICAgMHgxMCBMQU5HX0lUQUxJQU4KKysgICAweDExIExBTkdfSkFQQU5FU0UKKysgICAweDEyIExBTkdfS09SRUFOCisrICAgMHgxMyBMQU5HX0RVVENICisrICAgMHgxNCBMQU5HX05PUldFR0lBTgorKyAgIDB4MTUgTEFOR19QT0xJU0gKKysgICAweDE2IExBTkdfUE9SVFVHVUVTRQorKyAgIDB4MTcgTEFOR19SSEFFVE9fUk9NQU5DRQorKyAgIDB4MTggTEFOR19ST01BTklBTgorKyAgIDB4MTkgTEFOR19SVVNTSUFOCisrICAgMHgxYSBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKyAgIDB4MWIgTEFOR19TTE9WQUsKKysgICAweDFjIExBTkdfQUxCQU5JQU4KKysgICAweDFkIExBTkdfU1dFRElTSAorKyAgIDB4MWUgTEFOR19USEFJCisrICAgMHgxZiBMQU5HX1RVUktJU0gKKysgICAweDIwIExBTkdfVVJEVQorKyAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCisrICAgMHgyMiBMQU5HX1VLUkFJTklBTgorKyAgIDB4MjMgTEFOR19CRUxBUlVTSUFOCisrICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorKyAgIDB4MjUgTEFOR19FU1RPTklBTgorKyAgIDB4MjYgTEFOR19MQVRWSUFOCisrICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKysgICAweDI4IExBTkdfVEFKSUsKKysgICAweDI5IExBTkdfRkFSU0kKKysgICAweDJhIExBTkdfVklFVE5BTUVTRQorKyAgIDB4MmIgTEFOR19BUk1FTklBTgorKyAgIDB4MmMgTEFOR19BWkVSSQorKyAgIDB4MmQgTEFOR19CQVNRVUUKKysgICAweDJlIExBTkdfU09SQklBTgorKyAgIDB4MmYgTEFOR19NQUNFRE9OSUFOCisrICAgMHgzMCBMQU5HX1NVVFUKKysgICAweDMxIExBTkdfVFNPTkdBCisrICAgMHgzMiBMQU5HX1RTV0FOQQorKyAgIDB4MzMgTEFOR19WRU5EQQorKyAgIDB4MzQgTEFOR19YSE9TQQorKyAgIDB4MzUgTEFOR19aVUxVCisrICAgMHgzNiBMQU5HX0FGUklLQUFOUworKyAgIDB4MzcgTEFOR19HRU9SR0lBTgorKyAgIDB4MzggTEFOR19GQUVST0VTRQorKyAgIDB4MzkgTEFOR19ISU5ESQorKyAgIDB4M2EgTEFOR19NQUxURVNFCisrICAgMHgzYiBMQU5HX1NBQU1JCisrICAgMHgzYyBMQU5HX0dBRUxJQworKyAgIDB4M2QgTEFOR19ZSURESVNICisrICAgMHgzZSBMQU5HX01BTEFZCisrICAgMHgzZiBMQU5HX0tBWkFLCisrICAgMHg0MCBMQU5HX0tZUkdZWgorKyAgIDB4NDEgTEFOR19TV0FISUxJCisrICAgMHg0MiBMQU5HX1RVUktNRU4KKysgICAweDQzIExBTkdfVVpCRUsKKysgICAweDQ0IExBTkdfVEFUQVIKKysgICAweDQ1IExBTkdfQkVOR0FMSQorKyAgIDB4NDYgTEFOR19QVU5KQUJJCisrICAgMHg0NyBMQU5HX0dVSkFSQVRJCisrICAgMHg0OCBMQU5HX09SSVlBCisrICAgMHg0OSBMQU5HX1RBTUlMCisrICAgMHg0YSBMQU5HX1RFTFVHVQorKyAgIDB4NGIgTEFOR19LQU5OQURBCisrICAgMHg0YyBMQU5HX01BTEFZQUxBTQorKyAgIDB4NGQgTEFOR19BU1NBTUVTRQorKyAgIDB4NGUgTEFOR19NQVJBVEhJCisrICAgMHg0ZiBMQU5HX1NBTlNLUklUCisrICAgMHg1MCBMQU5HX01PTkdPTElBTgorKyAgIDB4NTEgTEFOR19USUJFVEFOCisrICAgMHg1MiBMQU5HX1dFTFNICisrICAgMHg1MyBMQU5HX0NBTUJPRElBTgorKyAgIDB4NTQgTEFOR19MQU8KKysgICAweDU1IExBTkdfQlVSTUVTRQorKyAgIDB4NTYgTEFOR19HQUxJQ0lBTgorKyAgIDB4NTcgTEFOR19LT05LQU5JCisrICAgMHg1OCBMQU5HX01BTklQVVJJCisrICAgMHg1OSBMQU5HX1NJTkRISQorKyAgIDB4NWEgTEFOR19TWVJJQUMKKysgICAweDViIExBTkdfU0lOSEFMRVNFCisrICAgMHg1YyBMQU5HX0NIRVJPS0VFCisrICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorKyAgIDB4NWUgTEFOR19BTUhBUklDCisrICAgMHg1ZiBMQU5HX1RBTUFaSUdIVAorKyAgIDB4NjAgTEFOR19LQVNITUlSSQorKyAgIDB4NjEgTEFOR19ORVBBTEkKKysgICAweDYyIExBTkdfRlJJU0lBTgorKyAgIDB4NjMgTEFOR19QQVNIVE8KKysgICAweDY0IExBTkdfVEFHQUxPRworKyAgIDB4NjUgTEFOR19ESVZFSEkKKysgICAweDY2IExBTkdfRURPCisrICAgMHg2NyBMQU5HX0ZVTEZVTERFCisrICAgMHg2OCBMQU5HX0hBVVNBCisrICAgMHg2OSBMQU5HX0lCSUJJTworKyAgIDB4NmEgTEFOR19ZT1JVQkEKKysgICAweDcwIExBTkdfSUdCTworKyAgIDB4NzEgTEFOR19LQU5VUkkKKysgICAweDcyIExBTkdfT1JPTU8KKysgICAweDczIExBTkdfVElHUklOWUEKKysgICAweDc0IExBTkdfR1VBUkFOSQorKyAgIDB4NzUgTEFOR19IQVdBSUlBTgorKyAgIDB4NzYgTEFOR19MQVRJTgorKyAgIDB4NzcgTEFOR19TT01BTEkKKysgICAweDc4IExBTkdfWUkKKysgICAweDc5IExBTkdfUEFQSUFNRU5UVQorKyovCisrLyogTWluZ3cgaGVhZGVycyBkb24ndCBoYXZlIGxhdGVzdCBsYW5ndWFnZSBhbmQgc3VibGFuZ3VhZ2UgY29kZXMuICAqLworKyMgaWZuZGVmIExBTkdfQUZSSUtBQU5TCisrIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FMQkFOSUFOCisrIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQU1IQVJJQworKyMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVJBQklDCisrIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FSTUVOSUFOCisrIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVNTQU1FU0UKKysjIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BWkVSSQorKyMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JBU1FVRQorKyMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRUxBUlVTSUFOCisrIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRU5HQUxJCisrIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CVVJNRVNFCisrIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19DQU1CT0RJQU4KKysjIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0FUQUxBTgorKyMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0hFUk9LRUUKKysjIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ESVZFSEkKKysjIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRURPCisrIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0VTVE9OSUFOCisrIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRkFFUk9FU0UKKysjIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GQVJTSQorKyMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZSSVNJQU4KKysjIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZVTEZVTERFCisrIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0FFTElDCisrIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dBTElDSUFOCisrIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0VPUkdJQU4KKysjIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUFSQU5JCisrIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUpBUkFUSQorKyMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hBVVNBCisrIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSEFXQUlJQU4KKysjIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19IRUJSRVcKKysjIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSElOREkKKysjIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JQklCSU8KKysjIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSUdCTworKyMgZGVmaW5lIExBTkdfSUdCTyAweDcwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5ET05FU0lBTgorKyMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5VS1RJVFVUCisrIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTk5BREEKKysjIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTlVSSQorKyMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQVNITUlSSQorKyMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBWkFLCisrIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS09OS0FOSQorKyMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS1lSR1laCisrIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBTworKyMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MQVRJTgorKyMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBVFZJQU4KKysjIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xJVEhVQU5JQU4KKysjIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BQ0VET05JQU4KKysjIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTEFZCisrIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFMQVlBTEFNCisrIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTFRFU0UKKysjIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTklQVVJJCisrIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFSQVRISQorKyMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTU9OR09MSUFOCisrIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX05FUEFMSQorKyMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19PUklZQQorKyMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX09ST01PCisrIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFQSUFNRU5UVQorKyMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFTSFRPCisrIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1BVTkpBQkkKKysjIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1JIQUVUT19ST01BTkNFCisrIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0FBTUkKKysjIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TQU5TS1JJVAorKyMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NFUkJJQU4KKysjIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NJTkRISQorKyMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TSU5IQUxFU0UKKysjIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0xPVkFLCisrIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NPTUFMSQorKyMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TT1JCSUFOCisrIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TVVRVCisrIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TV0FISUxJCisrIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TWVJJQUMKKysjIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFHQUxPRworKyMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFKSUsKKysjIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQU1BWklHSFQKKysjIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFNSUwKKysjIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQVRBUgorKyMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RFTFVHVQorKyMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USEFJCisrIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUJFVEFOCisrIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUdSSU5ZQQorKyMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RTT05HQQorKyMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UU1dBTkEKKysjIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVFVSS01FTgorKyMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVUtSQUlOSUFOCisrIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VSRFUKKysjIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VaQkVLCisrIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVkVOREEKKysjIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19WSUVUTkFNRVNFCisrIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19XRUxTSAorKyMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1hIT1NBCisrIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWUkKKysjIGRlZmluZSBMQU5HX1lJIDB4NzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZSURESVNICisrIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZT1JVQkEKKysjIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWlVMVQorKyMgZGVmaW5lIExBTkdfWlVMVSAweDM1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0lSQVEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfRUdZUFQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xJQllBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19BTEdFUklBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVFVOSVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19PTUFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1lFTUVOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TWVJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfSk9SREFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTEVCQU5PTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19LVVdBSVQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19VQUUKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1FBVEFSCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0gKKysjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVQorKyMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU4KKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0JFTElaRQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORworKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkUKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT05BQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1JFVU5JT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ09OR08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUwKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NQUxJCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfSEFJVEkKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkcKKysjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTgorKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0tBU0hNSVJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUEKKysjIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTQorKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX05FUEFMSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9ST01BTklBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TSU5ESElfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9JTkRJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEVSVQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUgorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NISUxFCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVkKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTworKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5ECisrIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMKKysjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQQorKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEKKysjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfUEFLSVNUQU4KKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfSU5ESUEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19VWkJFS19MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVpCRUtfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgJ3NldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKysgICAiRGlyZWN0cyAnc2V0bG9jYWxlKCknIHRvIHF1ZXJ5ICdjYXRlZ29yeScgYW5kIHJldHVybiB0aGUgY3VycmVudAorKyAgICBzZXR0aW5nIG9mICdsb2NhbCcuIgorKyAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgTmVpdGhlciBkbyBTVVNWMiBhbmQKKysgICBJU08gQyA5OS4gIFNvIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgb24gc2VsZWN0ZWQgc3lzdGVtcyAoZS5nLgorKyAgIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID49IDIpCisrIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorKyNlbmRpZgorKworKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBuYW1lLCBhbmQgY2Fub25pY2FsaXplIGl0IGludG8gWFBHIHN5bnRheAorKyAgICAgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKysgICBUaGUgY29kZXNldCBwYXJ0IGluIHRoZSByZXN1bHQgaXMgbm90IHJlbGlhYmxlOyB0aGUgbG9jYWxlX2NoYXJzZXQoKQorKyAgIHNob3VsZCBiZSB1c2VkIGZvciBjb2Rlc2V0IGluZm9ybWF0aW9uIGluc3RlYWQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuICAqLworKworK2NvbnN0IGNoYXIgKgorK19ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisreworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyNpZm5kZWYgV0lOMzIKKysKKysgIC8qIFVzZSB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvICdMQ19BTEwnLCAnTENfeHh4JywgYW5kICdMQU5HJy4KKysgICAgIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZSAnc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworKyMgaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgJiYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9OVUxMCisrICByZXR2YWwgPSBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKysjIGVsc2UKKysgIC8qIFNldHRpbmcgb2YgTENfQUxMIG92ZXJ3cml0ZXMgYWxsIG90aGVyLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCA9PSBOVUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCisrICAgICAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIExhc3QgcG9zc2liaWxpdHkgaXMgdGhlIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLworKwkgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKysJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisrCSAgICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMKKysJICAgICAgIGltcGxlbWVudGF0aW9uIGRlZmluZWQuICAqLworKwkgICAgcmV0dmFsID0gIkMiOworKwl9CisrICAgIH0KKysjIGVuZGlmCisrCisrICByZXR1cm4gcmV0dmFsOworKworKyNlbHNlIC8qIFdJTjMyICovCisrCisrICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCisrICAgICBEb24ndCBldmVuIGJvdGhlciBkZXRlcm1pbmluZyB0aGUgY29kZXNldDsgaXQncyBub3QgdXNlZnVsIGluIHRoaXMKKysgICAgIGNvbnRleHQsIGJlY2F1c2UgbWVzc2FnZSBjYXRhbG9ncyBhcmUgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlCisrICAgICBjb2Rlc2V0LiAgKi8KKysKKysgIExDSUQgbGNpZDsKKysgIExBTkdJRCBsYW5naWQ7CisrICBpbnQgcHJpbWFyeSwgc3ViOworKworKyAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudAorKyAgICAgdmFyaWFibGVzLCBhcyBvbiBQT1NJWCBzeXN0ZW1zLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52ICgiTEFORyIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKworKyAgLyogVXNlIG5hdGl2ZSBXaW4zMiBBUEkgbG9jYWxlIElELiAgKi8KKysgIGxjaWQgPSBHZXRUaHJlYWRMb2NhbGUgKCk7CisrCisrICAvKiBTdHJpcCBvZmYgdGhlIHNvcnRpbmcgcnVsZXMsIGtlZXAgb25seSB0aGUgbGFuZ3VhZ2UgcGFydC4gICovCisrICBsYW5naWQgPSBMQU5HSURGUk9NTENJRCAobGNpZCk7CisrCisrICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCisrICBwcmltYXJ5ID0gUFJJTUFSWUxBTkdJRCAobGFuZ2lkKTsKKysgIHN1YiA9IFNVQkxBTkdJRCAobGFuZ2lkKTsKKysKKysgIC8qIERpc3BhdGNoIG9uIGxhbmd1YWdlLgorKyAgICAgU2VlIGFsc28gaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL29ubGluZWRhdC9sYW5ndWFnZXMuaHRtbCAuCisrICAgICBGb3IgZGV0YWlscyBhYm91dCBsYW5ndWFnZXMsIHNlZSBodHRwOi8vd3d3LmV0aG5vbG9ndWUuY29tLyAuICAqLworKyAgc3dpdGNoIChwcmltYXJ5KQorKyAgICB7CisrICAgIGNhc2UgTEFOR19BRlJJS0FBTlM6IHJldHVybiAiYWZfWkEiOworKyAgICBjYXNlIExBTkdfQUxCQU5JQU46IHJldHVybiAic3FfQUwiOworKyAgICBjYXNlIExBTkdfQU1IQVJJQzogcmV0dXJuICJhbV9FVCI7CisrICAgIGNhc2UgTEFOR19BUkFCSUM6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0lSQVE6IHJldHVybiAiYXJfSVEiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0VHWVBUOiByZXR1cm4gImFyX0VHIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfQUxHRVJJQTogcmV0dXJuICJhcl9EWiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfTU9ST0NDTzogcmV0dXJuICJhcl9NQSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfT01BTjogcmV0dXJuICJhcl9PTSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfWUVNRU46IHJldHVybiAiYXJfWUUiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19KT1JEQU46IHJldHVybiAiYXJfSk8iOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0xFQkFOT046IHJldHVybiAiYXJfTEIiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVUFFOiByZXR1cm4gImFyX0FFIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOOiByZXR1cm4gImFyX0JIIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CisrCX0KKysgICAgICByZXR1cm4gImFyIjsKKysgICAgY2FzZSBMQU5HX0FSTUVOSUFOOiByZXR1cm4gImh5X0FNIjsKKysgICAgY2FzZSBMQU5HX0FTU0FNRVNFOiByZXR1cm4gImFzX0lOIjsKKysgICAgY2FzZSBMQU5HX0FaRVJJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCS8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIEF6ZXJiYWlqYW5pIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKwljYXNlIFNVQkxBTkdfQVpFUklfTEFUSU46IHJldHVybiAiYXpfQVpAbGF0aW4iOworKwljYXNlIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUM6IHJldHVybiAiYXpfQVpAY3lyaWxsaWMiOworKwl9CisrICAgICAgcmV0dXJuICJheiI7CisrICAgIGNhc2UgTEFOR19CQVNRVUU6CisrICAgICAgcmV0dXJuICJldSI7IC8qIEFtYmlndW91czogY291bGQgYmUgImV1X0VTIiBvciAiZXVfRlIiLiAgKi8KKysgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworKyAgICBjYXNlIExBTkdfQkVOR0FMSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9JTkRJQTogcmV0dXJuICJibl9JTiI7CisrCWNhc2UgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0g6IHJldHVybiAiYm5fQkQiOworKwl9CisrICAgICAgcmV0dXJuICJibiI7CisrICAgIGNhc2UgTEFOR19CVUxHQVJJQU46IHJldHVybiAiYmdfQkciOworKyAgICBjYXNlIExBTkdfQlVSTUVTRTogcmV0dXJuICJteV9NTSI7CisrICAgIGNhc2UgTEFOR19DQU1CT0RJQU46IHJldHVybiAia21fS0giOworKyAgICBjYXNlIExBTkdfQ0FUQUxBTjogcmV0dXJuICJjYV9FUyI7CisrICAgIGNhc2UgTEFOR19DSEVST0tFRTogcmV0dXJuICJjaHJfVVMiOworKyAgICBjYXNlIExBTkdfQ0hJTkVTRToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9UUkFESVRJT05BTDogcmV0dXJuICJ6aF9UVyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQ6IHJldHVybiAiemhfQ04iOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTkdBUE9SRTogcmV0dXJuICJ6aF9TRyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX01BQ0FVOiByZXR1cm4gInpoX01PIjsKKysJfQorKyAgICAgIHJldHVybiAiemgiOworKyAgICBjYXNlIExBTkdfQ1JPQVRJQU46CQkvKiBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKwkJCQkgKiBXaGF0IHVzZWQgdG8gYmUgY2FsbGVkIFNlcmJvLUNyb2F0aWFuCisrCQkJCSAqIHNob3VsZCByZWFsbHkgbm93IGJlIHR3byBzZXBhcmF0ZQorKwkJCQkgKiBsYW5ndWFnZXMgYmVjYXVzZSBvZiBwb2xpdGljYWwgcmVhc29ucy4KKysJCQkJICogKFNheXMgdG1sLCB3aG8ga25vd3Mgbm90aGluZyBhYm91dCBTZXJiaWFuCisrCQkJCSAqIG9yIENyb2F0aWFuLikKKysJCQkJICogKEkgY2FuIGZlZWwgdGhvc2UgZmxhbWVzIGNvbWluZyBhbHJlYWR5LikKKysJCQkJICovCisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAiaHJfSFIiOworKwljYXNlIFNVQkxBTkdfU0VSQklBTl9MQVRJTjogcmV0dXJuICJzcl9DUyI7CisrCWNhc2UgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDOiByZXR1cm4gInNyX0NTQGN5cmlsbGljIjsKKysJfQorKyAgICAgIHJldHVybiAiaHIiOworKyAgICBjYXNlIExBTkdfQ1pFQ0g6IHJldHVybiAiY3NfQ1oiOworKyAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKysgICAgY2FzZSBMQU5HX0RJVkVISTogcmV0dXJuICJkdl9NViI7CisrICAgIGNhc2UgTEFOR19EVVRDSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRFVUQ0g6IHJldHVybiAibmxfTkwiOworKwljYXNlIFNVQkxBTkdfRFVUQ0hfQkVMR0lBTjogLyogRkxFTUlTSCwgVkxBQU1TICovIHJldHVybiAibmxfQkUiOworKwl9CisrICAgICAgcmV0dXJuICJubCI7CisrICAgIGNhc2UgTEFOR19FRE86IHJldHVybiAiYmluX05HIjsKKysgICAgY2FzZSBMQU5HX0VOR0xJU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJLyogU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gSGVoLiBJIHRob3VnaHQKKysJICogRW5nbGlzaCB3YXMgdGhlIGxhbmd1YWdlIHNwb2tlbiBpbiBFbmdsYW5kLgorKwkgKiBPaCB3ZWxsLgorKwkgKi8KKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfVVM6IHJldHVybiAiZW5fVVMiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0FVUzogcmV0dXJuICJlbl9BVSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBTjogcmV0dXJuICJlbl9DQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfRUlSRTogcmV0dXJuICJlbl9JRSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NPVVRIX0FGUklDQTogcmV0dXJuICJlbl9aQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU46IHJldHVybiAiZW5fR0QiOyAvKiBHcmVuYWRhPyAqLworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9CRUxJWkU6IHJldHVybiAiZW5fQloiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFOiByZXR1cm4gImVuX1pXIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVM6IHJldHVybiAiZW5fUEgiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORzogcmV0dXJuICJlbl9ISyI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0lORElBOiByZXR1cm4gImVuX0lOIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkU6IHJldHVybiAiZW5fU0ciOworKwl9CisrICAgICAgcmV0dXJuICJlbiI7CisrICAgIGNhc2UgTEFOR19FU1RPTklBTjogcmV0dXJuICJldF9FRSI7CisrICAgIGNhc2UgTEFOR19GQUVST0VTRTogcmV0dXJuICJmb19GTyI7CisrICAgIGNhc2UgTEFOR19GQVJTSTogcmV0dXJuICJmYV9JUiI7CisrICAgIGNhc2UgTEFOR19GSU5OSVNIOiByZXR1cm4gImZpX0ZJIjsKKysgICAgY2FzZSBMQU5HX0ZSRU5DSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRlJFTkNIOiByZXR1cm4gImZyX0ZSIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9CRUxHSUFOOiAvKiBXQUxMT09OICovIHJldHVybiAiZnJfQkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NBTkFESUFOOiByZXR1cm4gImZyX0NBIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TV0lTUzogcmV0dXJuICJmcl9DSCI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRzogcmV0dXJuICJmcl9MVSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTU9OQUNPOiByZXR1cm4gImZyX01DIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTOiByZXR1cm4gImZyIjsgLyogQ2FyaWJiZWFuPyAqLworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1JFVU5JT046IHJldHVybiAiZnJfUkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NPTkdPOiByZXR1cm4gImZyX0NHIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMOiByZXR1cm4gImZyX1NOIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTjogcmV0dXJuICJmcl9DTSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkU6IHJldHVybiAiZnJfQ0kiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01BTEk6IHJldHVybiAiZnJfTUwiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PUk9DQ086IHJldHVybiAiZnJfTUEiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0hBSVRJOiByZXR1cm4gImZyX0hUIjsKKysJfQorKyAgICAgIHJldHVybiAiZnIiOworKyAgICBjYXNlIExBTkdfRlJJU0lBTjogcmV0dXJuICJmeV9OTCI7CisrICAgIGNhc2UgTEFOR19GVUxGVUxERToKKysgICAgICAvKiBTcG9rZW4gaW4gTmlnZXJpYSwgR3VpbmVhLCBTZW5lZ2FsLCBNYWxpLCBOaWdlciwgQ2FtZXJvb24sIEJlbmluLiAqLworKyAgICAgIHJldHVybiAiZmZfTkciOworKyAgICBjYXNlIExBTkdfR0FFTElDOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgMHgwMTogLyogU0NPVFRJU0ggKi8gcmV0dXJuICJnZF9HQiI7CisrCWNhc2UgMHgwMjogLyogSVJJU0ggKi8gcmV0dXJuICJnYV9JRSI7CisrCX0KKysgICAgICByZXR1cm4gIkMiOworKyAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworKyAgICBjYXNlIExBTkdfR0VPUkdJQU46IHJldHVybiAia2FfR0UiOworKyAgICBjYXNlIExBTkdfR0VSTUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19HRVJNQU46IHJldHVybiAiZGVfREUiOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX1NXSVNTOiByZXR1cm4gImRlX0NIIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9BVVNUUklBTjogcmV0dXJuICJkZV9BVCI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRzogcmV0dXJuICJkZV9MVSI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTjogcmV0dXJuICJkZV9MSSI7CisrCX0KKysgICAgICByZXR1cm4gImRlIjsKKysgICAgY2FzZSBMQU5HX0dSRUVLOiByZXR1cm4gImVsX0dSIjsKKysgICAgY2FzZSBMQU5HX0dVQVJBTkk6IHJldHVybiAiZ25fUFkiOworKyAgICBjYXNlIExBTkdfR1VKQVJBVEk6IHJldHVybiAiZ3VfSU4iOworKyAgICBjYXNlIExBTkdfSEFVU0E6IHJldHVybiAiaGFfTkciOworKyAgICBjYXNlIExBTkdfSEFXQUlJQU46CisrICAgICAgLyogRklYTUU6IERvIHRoZXkgbWVhbiBIYXdhaWlhbiAoImhhd19VUyIsIDEwMDAgc3BlYWtlcnMpCisrCSBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKysgICAgICByZXR1cm4gImNwZV9VUyI7CisrICAgIGNhc2UgTEFOR19IRUJSRVc6IHJldHVybiAiaGVfSUwiOworKyAgICBjYXNlIExBTkdfSElOREk6IHJldHVybiAiaGlfSU4iOworKyAgICBjYXNlIExBTkdfSFVOR0FSSUFOOiByZXR1cm4gImh1X0hVIjsKKysgICAgY2FzZSBMQU5HX0lCSUJJTzogcmV0dXJuICJuaWNfTkciOworKyAgICBjYXNlIExBTkdfSUNFTEFORElDOiByZXR1cm4gImlzX0lTIjsKKysgICAgY2FzZSBMQU5HX0lHQk86IHJldHVybiAiaWdfTkciOworKyAgICBjYXNlIExBTkdfSU5ET05FU0lBTjogcmV0dXJuICJpZF9JRCI7CisrICAgIGNhc2UgTEFOR19JTlVLVElUVVQ6IHJldHVybiAiaXVfQ0EiOworKyAgICBjYXNlIExBTkdfSVRBTElBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfSVRBTElBTjogcmV0dXJuICJpdF9JVCI7CisrCWNhc2UgU1VCTEFOR19JVEFMSUFOX1NXSVNTOiByZXR1cm4gIml0X0NIIjsKKysJfQorKyAgICAgIHJldHVybiAiaXQiOworKyAgICBjYXNlIExBTkdfSkFQQU5FU0U6IHJldHVybiAiamFfSlAiOworKyAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CisrICAgIGNhc2UgTEFOR19LQU5VUkk6IHJldHVybiAia3JfTkciOworKyAgICBjYXNlIExBTkdfS0FTSE1JUkk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAia3NfUEsiOworKwljYXNlIFNVQkxBTkdfS0FTSE1JUklfSU5ESUE6IHJldHVybiAia3NfSU4iOworKwl9CisrICAgICAgcmV0dXJuICJrcyI7CisrICAgIGNhc2UgTEFOR19LQVpBSzogcmV0dXJuICJra19LWiI7CisrICAgIGNhc2UgTEFOR19LT05LQU5JOgorKyAgICAgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIHN1Y2ggbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrICAgICAgcmV0dXJuICJrb2tfSU4iOworKyAgICBjYXNlIExBTkdfS09SRUFOOiByZXR1cm4gImtvX0tSIjsKKysgICAgY2FzZSBMQU5HX0tZUkdZWjogcmV0dXJuICJreV9LRyI7CisrICAgIGNhc2UgTEFOR19MQU86IHJldHVybiAibG9fTEEiOworKyAgICBjYXNlIExBTkdfTEFUSU46IHJldHVybiAibGFfVkEiOworKyAgICBjYXNlIExBTkdfTEFUVklBTjogcmV0dXJuICJsdl9MViI7CisrICAgIGNhc2UgTEFOR19MSVRIVUFOSUFOOiByZXR1cm4gImx0X0xUIjsKKysgICAgY2FzZSBMQU5HX01BQ0VET05JQU46IHJldHVybiAibWtfTUsiOworKyAgICBjYXNlIExBTkdfTUFMQVk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBOiByZXR1cm4gIm1zX01ZIjsKKysJY2FzZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNOiByZXR1cm4gIm1zX0JOIjsKKysJfQorKyAgICAgIHJldHVybiAibXMiOworKyAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKysgICAgY2FzZSBMQU5HX01BTFRFU0U6IHJldHVybiAibXRfTVQiOworKyAgICBjYXNlIExBTkdfTUFOSVBVUkk6CisrICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysgICAgICByZXR1cm4gIm1uaV9JTiI7CisrICAgIGNhc2UgTEFOR19NQVJBVEhJOiByZXR1cm4gIm1yX0lOIjsKKysgICAgY2FzZSBMQU5HX01PTkdPTElBTjoKKysgICAgICByZXR1cm4gIm1uIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAibW5fQ04iIG9yICJtbl9NTiIuICAqLworKyAgICBjYXNlIExBTkdfTkVQQUxJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gIm5lX05QIjsKKysJY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CisrCX0KKysgICAgICByZXR1cm4gIm5lIjsKKysgICAgY2FzZSBMQU5HX05PUldFR0lBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTDogcmV0dXJuICJub19OTyI7CisrCWNhc2UgU1VCTEFOR19OT1JXRUdJQU5fTllOT1JTSzogcmV0dXJuICJubl9OTyI7CisrCX0KKysgICAgICByZXR1cm4gIm5vIjsKKysgICAgY2FzZSBMQU5HX09SSVlBOiByZXR1cm4gIm9yX0lOIjsKKysgICAgY2FzZSBMQU5HX09ST01POiByZXR1cm4gIm9tX0VUIjsKKysgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKysgICAgY2FzZSBMQU5HX1BBU0hUTzoKKysgICAgICByZXR1cm4gInBzIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAicHNfUEsiIG9yICJwc19BRiIuICAqLworKyAgICBjYXNlIExBTkdfUE9MSVNIOiByZXR1cm4gInBsX1BMIjsKKysgICAgY2FzZSBMQU5HX1BPUlRVR1VFU0U6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0U6IHJldHVybiAicHRfUFQiOworKwkvKiBIbW0uIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4gPT0gU1VCTEFOR19ERUZBVUxULgorKwkgICBTYW1lIHBoZW5vbWVub24gYXMgU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gKi8KKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOOiByZXR1cm4gInB0X0JSIjsKKysJfQorKyAgICAgIHJldHVybiAicHQiOworKyAgICBjYXNlIExBTkdfUFVOSkFCSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9JTkRJQTogcmV0dXJuICJwYV9JTiI7IC8qIEd1cm11a2hpIHNjcmlwdCAqLworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTjogcmV0dXJuICJwYV9QSyI7IC8qIEFyYWJpYyBzY3JpcHQgKi8KKysJfQorKyAgICAgIHJldHVybiAicGEiOworKyAgICBjYXNlIExBTkdfUkhBRVRPX1JPTUFOQ0U6IHJldHVybiAicm1fQ0giOworKyAgICBjYXNlIExBTkdfUk9NQU5JQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworKwljYXNlIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQTogcmV0dXJuICJyb19NRCI7CisrCX0KKysgICAgICByZXR1cm4gInJvIjsKKysgICAgY2FzZSBMQU5HX1JVU1NJQU46CisrICAgICAgcmV0dXJuICJydSI7IC8qIEFtYmlndW91czogY291bGQgYmUgInJ1X1JVIiBvciAicnVfVUEiIG9yICJydV9NRCIuICAqLworKyAgICBjYXNlIExBTkdfU0FBTUk6IC8qIGFjdHVhbGx5IE5vcnRoZXJuIFNhbWkgKi8gcmV0dXJuICJzZV9OTyI7CisrICAgIGNhc2UgTEFOR19TQU5TS1JJVDogcmV0dXJuICJzYV9JTiI7CisrICAgIGNhc2UgTEFOR19TSU5ESEk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NJTkRISV9JTkRJQTogcmV0dXJuICJzZF9JTiI7CisrCWNhc2UgU1VCTEFOR19TSU5ESElfUEFLSVNUQU46IHJldHVybiAic2RfUEsiOworKwl9CisrICAgICAgcmV0dXJuICJzZCI7CisrICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworKyAgICBjYXNlIExBTkdfU0xPVkFLOiByZXR1cm4gInNrX1NLIjsKKysgICAgY2FzZSBMQU5HX1NMT1ZFTklBTjogcmV0dXJuICJzbF9TSSI7CisrICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworKyAgICBjYXNlIExBTkdfU09SQklBTjoKKysgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKyAgICAgIHJldHVybiAid2VuX0RFIjsKKysgICAgY2FzZSBMQU5HX1NQQU5JU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0g6IHJldHVybiAiZXNfRVMiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9NRVhJQ0FOOiByZXR1cm4gImVzX01YIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorKwkgIHJldHVybiAiZXNfRVNAbW9kZXJuIjsJLyogbm90IHNlZW4gb24gVW5peCAqLworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9HVUFURU1BTEE6IHJldHVybiAiZXNfR1QiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BOiByZXR1cm4gImVzX1BBIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDOiByZXR1cm4gImVzX0RPIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUE6IHJldHVybiAiZXNfQ08iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QRVJVOiByZXR1cm4gImVzX1BFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUjogcmV0dXJuICJlc19FQyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0NISUxFOiByZXR1cm4gImVzX0NMIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BBUkFHVUFZOiByZXR1cm4gImVzX1BZIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQTogcmV0dXJuICJlc19CTyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVM6IHJldHVybiAiZXNfSE4iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9OSUNBUkFHVUE6IHJldHVybiAiZXNfTkkiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CisrCX0KKysgICAgICByZXR1cm4gImVzIjsKKysgICAgY2FzZSBMQU5HX1NVVFU6IHJldHVybiAiYm50X1RaIjsgLyogb3IgInN0X0xTIiBvciAibnNvX1pBIj8gKi8KKysgICAgY2FzZSBMQU5HX1NXQUhJTEk6IHJldHVybiAic3dfS0UiOworKyAgICBjYXNlIExBTkdfU1dFRElTSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJzdl9TRSI7CisrCWNhc2UgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQ6IHJldHVybiAic3ZfRkkiOworKwl9CisrICAgICAgcmV0dXJuICJzdiI7CisrICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCisrICAgIGNhc2UgTEFOR19UQUdBTE9HOiByZXR1cm4gInRsX1BIIjsKKysgICAgY2FzZSBMQU5HX1RBSklLOiByZXR1cm4gInRnX1RKIjsKKysgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBUYW1hemlnaHQgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrCWNhc2UgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDOiByZXR1cm4gImJlcl9NQUBhcmFiaWMiOworKwljYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOOiByZXR1cm4gImJlcl9NQUBsYXRpbiI7CisrCX0KKysgICAgICByZXR1cm4gImJlcl9NQSI7CisrICAgIGNhc2UgTEFOR19UQU1JTDoKKysgICAgICByZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCisrICAgIGNhc2UgTEFOR19UQVRBUjogcmV0dXJuICJ0dF9SVSI7CisrICAgIGNhc2UgTEFOR19URUxVR1U6IHJldHVybiAidGVfSU4iOworKyAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CisrICAgIGNhc2UgTEFOR19USUJFVEFOOiByZXR1cm4gImJvX0NOIjsKKysgICAgY2FzZSBMQU5HX1RJR1JJTllBOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQTogcmV0dXJuICJ0aV9FVCI7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBOiByZXR1cm4gInRpX0VSIjsKKysJfQorKyAgICAgIHJldHVybiAidGkiOworKyAgICBjYXNlIExBTkdfVFNPTkdBOiByZXR1cm4gInRzX1pBIjsKKysgICAgY2FzZSBMQU5HX1RTV0FOQTogcmV0dXJuICJ0bl9CVyI7CisrICAgIGNhc2UgTEFOR19UVVJLSVNIOiByZXR1cm4gInRyX1RSIjsKKysgICAgY2FzZSBMQU5HX1RVUktNRU46IHJldHVybiAidGtfVE0iOworKyAgICBjYXNlIExBTkdfVUtSQUlOSUFOOiByZXR1cm4gInVrX1VBIjsKKysgICAgY2FzZSBMQU5HX1VSRFU6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU46IHJldHVybiAidXJfUEsiOworKwljYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CisrCX0KKysgICAgICByZXR1cm4gInVyIjsKKysgICAgY2FzZSBMQU5HX1VaQkVLOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19VWkJFS19MQVRJTjogcmV0dXJuICJ1el9VWiI7CisrCWNhc2UgU1VCTEFOR19VWkJFS19DWVJJTExJQzogcmV0dXJuICJ1el9VWkBjeXJpbGxpYyI7CisrCX0KKysgICAgICByZXR1cm4gInV6IjsKKysgICAgY2FzZSBMQU5HX1ZFTkRBOiByZXR1cm4gInZlX1pBIjsKKysgICAgY2FzZSBMQU5HX1ZJRVROQU1FU0U6IHJldHVybiAidmlfVk4iOworKyAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworKyAgICBjYXNlIExBTkdfWEhPU0E6IHJldHVybiAieGhfWkEiOworKyAgICBjYXNlIExBTkdfWUk6IHJldHVybiAic2l0X0NOIjsKKysgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworKyAgICBjYXNlIExBTkdfWU9SVUJBOiByZXR1cm4gInlvX05HIjsKKysgICAgY2FzZSBMQU5HX1pVTFU6IHJldHVybiAienVfWkEiOworKyAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworKyAgICB9CisrCisrI2VuZGlmCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvZy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvZy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTE1NzIzNzY4IC0wNDAwCitAQCAtMCwwICsxLDk4IEBACisrLyogTG9nIGZpbGUgb3V0cHV0LgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFByaW50IGFuIEFTQ0lJIHN0cmluZyB3aXRoIHF1b3RlcyBhbmQgZXNjYXBlIHNlcXVlbmNlcyB3aGVyZSBuZWVkZWQuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfZXNjYXBlZCAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIpCisreworKyAgcHV0YyAoJyInLCBzdHJlYW0pOworKyAgZm9yICg7ICpzdHIgIT0gJ1wwJzsgc3RyKyspCisrICAgIGlmICgqc3RyID09ICdcbicpCisrICAgICAgeworKwlmcHV0cyAoIlxcblwiIiwgc3RyZWFtKTsKKysJaWYgKHN0clsxXSA9PSAnXDAnKQorKwkgIHJldHVybjsKKysJZnB1dHMgKCJcblwiIiwgc3RyZWFtKTsKKysgICAgICB9CisrICAgIGVsc2UKKysgICAgICB7CisrCWlmICgqc3RyID09ICciJyB8fCAqc3RyID09ICdcXCcpCisrCSAgcHV0YyAoJ1xcJywgc3RyZWFtKTsKKysJcHV0YyAoKnN0ciwgc3RyZWFtKTsKKysgICAgICB9CisrICBwdXRjICgnIicsIHN0cmVhbSk7CisrfQorKworKy8qIEFkZCB0byB0aGUgbG9nIGZpbGUgYW4gZW50cnkgZGVub3RpbmcgYSBmYWlsZWQgdHJhbnNsYXRpb24uICAqLworK3ZvaWQKKytfbmxfbG9nX3VudHJhbnNsYXRlZCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKKyt7CisrICBzdGF0aWMgY2hhciAqbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrICBzdGF0aWMgRklMRSAqbGFzdF9sb2dmaWxlID0gTlVMTDsKKysgIEZJTEUgKmxvZ2ZpbGU7CisrCisrICAvKiBDYW4gd2UgcmV1c2UgdGhlIGxhc3Qgb3BlbmVkIGxvZ2ZpbGU/ICAqLworKyAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCB8fCBzdHJjbXAgKGxvZ2ZpbGVuYW1lLCBsYXN0X2xvZ2ZpbGVuYW1lKSAhPSAwKQorKyAgICB7CisrICAgICAgLyogQ2xvc2UgdGhlIGxhc3QgdXNlZCBsb2dmaWxlLiAgKi8KKysgICAgICBpZiAobGFzdF9sb2dmaWxlbmFtZSAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGxhc3RfbG9nZmlsZSAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBmY2xvc2UgKGxhc3RfbG9nZmlsZSk7CisrCSAgICAgIGxhc3RfbG9nZmlsZSA9IE5VTEw7CisrCSAgICB9CisrCSAgZnJlZSAobGFzdF9sb2dmaWxlbmFtZSk7CisrCSAgbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrCX0KKysgICAgICAvKiBPcGVuIHRoZSBsb2dmaWxlLiAgKi8KKysgICAgICBsYXN0X2xvZ2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKGxvZ2ZpbGVuYW1lKSArIDEpOworKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lID09IE5VTEwpCisrCXJldHVybjsKKysgICAgICBzdHJjcHkgKGxhc3RfbG9nZmlsZW5hbWUsIGxvZ2ZpbGVuYW1lKTsKKysgICAgICBsYXN0X2xvZ2ZpbGUgPSBmb3BlbiAobG9nZmlsZW5hbWUsICJhIik7CisrICAgICAgaWYgKGxhc3RfbG9nZmlsZSA9PSBOVUxMKQorKwlyZXR1cm47CisrICAgIH0KKysgIGxvZ2ZpbGUgPSBsYXN0X2xvZ2ZpbGU7CisrCisrICBmcHJpbnRmIChsb2dmaWxlLCAiZG9tYWluICIpOworKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgZG9tYWlubmFtZSk7CisrICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZCAiKTsKKysgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMSk7CisrICBpZiAocGx1cmFsKQorKyAgICB7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnaWRfcGx1cmFsICIpOworKyAgICAgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMik7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyWzBdIFwiXCJcbiIpOworKyAgICB9CisrICBlbHNlCisrICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0ciBcIlwiXG4iKTsKKysgIHB1dGMgKCdcbicsIGxvZ2ZpbGUpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9NYWtlZmlsZS5pbgkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9NYWtlZmlsZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjUyMTcyMjg1NiAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0jIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgaW4gR05VIE5MUyBVdGlsaXRpZXMuCistIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBNYWtlZmlsZSBmb3IgZGlyZWN0b3J5IHdpdGggbWVzc2FnZSBjYXRhbG9nIGhhbmRsaW5nIGxpYnJhcnkgb2YgR05VIGdldHRleHQKKysjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICMgYW55IGxhdGVyIHZlcnNpb24uCisgIworICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyBVU0EuCisgCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKK0BAIC0yMywxMTggKzI0LDM0MSBAQAorIHNyY2RpciA9IEBzcmNkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIHRvcF9idWlsZGRpciA9IC4uCistVlBBVEggPSBAc3JjZGlyQAorKyNWUEFUSCA9ICQoc3JjZGlyKQorIAorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACisgdHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACistbGliZGlyID0gJChleGVjX3ByZWZpeCkvbGliCistaW5jbHVkZWRpciA9ICQocHJlZml4KS9pbmNsdWRlCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrbGliZGlyID0gQGxpYmRpckAKKytpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisrZGF0YWRpciA9IEBkYXRhZGlyQAorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCistZ251bG9jYWxlZGlyID0gJChwcmVmaXgpL3NoYXJlL2xvY2FsZQorLWdldHRleHRzcmNkaXIgPSBAZGF0YWRpckAvZ2V0dGV4dC9pbnRsCistYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpOi4KKytnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L2ludGwKKythbGlhc3BhdGggPSAkKGxvY2FsZWRpcikKKyBzdWJkaXIgPSBpbnRsCisgCisgSU5TVEFMTCA9IEBJTlNUQUxMQAorIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisgTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisgCistbCA9IEBsQAorK2wgPSBASU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhACisgCisgQVIgPSBhcgorIENDID0gQENDQAorIExJQlRPT0wgPSBATElCVE9PTEAKKyBSQU5MSUIgPSBAUkFOTElCQAorK1lBQ0MgPSBASU5UTEJJU09OQCAteSAtZAorK1lGTEFHUyA9IC0tbmFtZS1wcmVmaXg9X19nZXR0ZXh0CisgCistREVGUyA9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgLURHTlVMT0NBTEVESVI9XCIkKGdudWxvY2FsZWRpcilcIiBcCistLURMT0NBTEVfQUxJQVNfUEFUSD1cIiQoYWxpYXNwYXRoKVwiIEBERUZTQAorK0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCisrLURMSUJESVI9XCIkKGxpYmRpcilcIiAtRElOX0xJQklOVEwgXAorKy1ERU5BQkxFX1JFTE9DQVRBQkxFPTEgLURJTl9MSUJSQVJZIC1ESU5TVEFMTERJUj1cIiQobGliZGlyKVwiIC1ETk9fWE1BTExPQyBcCisrLURzZXRfcmVsb2NhdGlvbl9wcmVmaXg9bGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggXAorKy1EcmVsb2NhdGU9bGliaW50bF9yZWxvY2F0ZSBcCisrLURERVBFTkRTX09OX0xJQklDT05WPTEgQERFRlNACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisrTElCUyA9IEBMSUJTQAorIAorIENPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpCisgCistSEVBREVSUyA9ICQoQ09NSERSUykgbGliZ2V0dGV4dC5oIGxvYWRpbmZvLmgKKy1DT01IRFJTID0gZ2V0dGV4dC5oIGdldHRleHRQLmggaGFzaC1zdHJpbmcuaAorLVNPVVJDRVMgPSAkKENPTVNSQ1MpIGludGwtY29tcGF0LmMgY2F0LWNvbXBhdC5jCistQ09NU1JDUyA9IGJpbmR0ZXh0ZG9tLmMgZGNnZXR0ZXh0LmMgZGdldHRleHQuYyBnZXR0ZXh0LmMgXAorLWZpbmRkb21haW4uYyBsb2FkbXNnY2F0LmMgbG9jYWxlYWxpYXMuYyB0ZXh0ZG9tYWluLmMgbDEwbmZsaXN0LmMgXAorLWV4cGxvZGVuYW1lLmMKKy1PQkpFQ1RTID0gQElOVExPQkpTQCBiaW5kdGV4dGRvbS4kbG8gZGNnZXR0ZXh0LiRsbyBkZ2V0dGV4dC4kbG8gZ2V0dGV4dC4kbG8gXAorLWZpbmRkb21haW4uJGxvIGxvYWRtc2djYXQuJGxvIGxvY2FsZWFsaWFzLiRsbyB0ZXh0ZG9tYWluLiRsbyBsMTBuZmxpc3QuJGxvIFwKKy1leHBsb2RlbmFtZS4kbG8KKy1DQVRPQkpTID0gY2F0LWNvbXBhdC4kbG8gLi4vcG8vY2F0LWlkLXRibC4kbG8KKy1HRVRUT0JKUyA9IGludGwtY29tcGF0LiRsbworLURJU1RGSUxFUy5jb21tb24gPSBDaGFuZ2VMb2cgTWFrZWZpbGUuaW4gbGludXgtbXNnLnNlZCBwbzJ0Ymwuc2VkLmluIFwKKy14b3Blbi1tc2cuc2VkICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0hFQURFUlMgPSBcCisrICBnbW8uaCBcCisrICBnZXR0ZXh0UC5oIFwKKysgIGhhc2gtc3RyaW5nLmggXAorKyAgbG9hZGluZm8uaCBcCisrICBwbHVyYWwtZXhwLmggXAorKyAgZXZhbC1wbHVyYWwuaCBcCisrICBsb2NhbGNoYXJzZXQuaCBcCisrICByZWxvY2F0YWJsZS5oIFwKKysgIHhzaXplLmggXAorKyAgcHJpbnRmLWFyZ3MuaCBwcmludGYtYXJncy5jIFwKKysgIHByaW50Zi1wYXJzZS5oIHdwcmludGYtcGFyc2UuaCBwcmludGYtcGFyc2UuYyBcCisrICB2YXNucHJpbnRmLmggdmFzbndwcmludGYuaCB2YXNucHJpbnRmLmMgXAorKyAgb3MyY29tcGF0LmggXAorKyAgbGliZ251aW50bC5oLmluCisrU09VUkNFUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLmMgXAorKyAgZGNnZXR0ZXh0LmMgXAorKyAgZGdldHRleHQuYyBcCisrICBnZXR0ZXh0LmMgXAorKyAgZmluZGRvbWFpbi5jIFwKKysgIGxvYWRtc2djYXQuYyBcCisrICBsb2NhbGVhbGlhcy5jIFwKKysgIHRleHRkb21haW4uYyBcCisrICBsMTBuZmxpc3QuYyBcCisrICBleHBsb2RlbmFtZS5jIFwKKysgIGRjaWdldHRleHQuYyBcCisrICBkY25nZXR0ZXh0LmMgXAorKyAgZG5nZXR0ZXh0LmMgXAorKyAgbmdldHRleHQuYyBcCisrICBwbHVyYWwueSBcCisrICBwbHVyYWwtZXhwLmMgXAorKyAgbG9jYWxjaGFyc2V0LmMgXAorKyAgcmVsb2NhdGFibGUuYyBcCisrICBsb2NhbGVuYW1lLmMgXAorKyAgbG9nLmMgXAorKyAgcHJpbnRmLmMgXAorKyAgb3NkZXAuYyBcCisrICBvczJjb21wYXQuYyBcCisrICBpbnRsLWNvbXBhdC5jCisrT0JKRUNUUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLiRsbyBcCisrICBkY2dldHRleHQuJGxvIFwKKysgIGRnZXR0ZXh0LiRsbyBcCisrICBnZXR0ZXh0LiRsbyBcCisrICBmaW5kZG9tYWluLiRsbyBcCisrICBsb2FkbXNnY2F0LiRsbyBcCisrICBsb2NhbGVhbGlhcy4kbG8gXAorKyAgdGV4dGRvbWFpbi4kbG8gXAorKyAgbDEwbmZsaXN0LiRsbyBcCisrICBleHBsb2RlbmFtZS4kbG8gXAorKyAgZGNpZ2V0dGV4dC4kbG8gXAorKyAgZGNuZ2V0dGV4dC4kbG8gXAorKyAgZG5nZXR0ZXh0LiRsbyBcCisrICBuZ2V0dGV4dC4kbG8gXAorKyAgcGx1cmFsLiRsbyBcCisrICBwbHVyYWwtZXhwLiRsbyBcCisrICBsb2NhbGNoYXJzZXQuJGxvIFwKKysgIHJlbG9jYXRhYmxlLiRsbyBcCisrICBsb2NhbGVuYW1lLiRsbyBcCisrICBsb2cuJGxvIFwKKysgIHByaW50Zi4kbG8gXAorKyAgb3NkZXAuJGxvIFwKKysgIGludGwtY29tcGF0LiRsbworK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbiBcCisrY29uZmlnLmNoYXJzZXQgbG9jYWxlLmFsaWFzIHJlZi1hZGQuc2luIHJlZi1kZWwuc2luICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0RJU1RGSUxFUy5nZW5lcmF0ZWQgPSBwbHVyYWwuYworIERJU1RGSUxFUy5ub3JtYWwgPSBWRVJTSU9OCistRElTVEZJTEVTLmdldHRleHQgPSBsaWJpbnRsLmdsaWJjIGludGxoLmluc3QuaW4KKytESVNURklMRVMuZ2V0dGV4dCA9IENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgbGliaW50bC5nbGliYyBcCisrbGliZ251aW50bC5oX3ZtcyBNYWtlZmlsZS52bXMgXAorK2xpYmdudWludGwuaC5tc3ZjLXN0YXRpYyBsaWJnbnVpbnRsLmgubXN2Yy1zaGFyZWQgUkVBRE1FLndvZTMyIE1ha2VmaWxlLm1zdmMKKytESVNURklMRVMub2Jzb2xldGUgPSB4b3Blbi1tc2cuc2VkIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBjYXQtY29tcGF0LmMgXAorK0NPUFlJTkcuTElCLTIgZ2V0dGV4dC5oIGxpYmdldHRleHQuaCBwbHVyYWwtZXZhbC5jIGxpYmdudWludGwuaAorKworK2FsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKythbGwteWVzOiBsaWJpbnRsLiRsYSBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorK2FsbC1ubzogYWxsLW5vLUBCVUlMRF9JTkNMVURFRF9MSUJJTlRMQAorK2FsbC1uby15ZXM6IGxpYmdudWludGwuJGxhCisrYWxsLW5vLW5vOgorKworK2xpYmludGwuYSBsaWJnbnVpbnRsLmE6ICQoT0JKRUNUUykKKysJcm0gLWYgJEAKKysJJChBUikgY3J1ICRAICQoT0JKRUNUUykKKysJJChSQU5MSUIpICRACisrCisrbGliaW50bC5sYSBsaWJnbnVpbnRsLmxhOiAkKE9CSkVDVFMpCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgXAorKwkgICQoQ0MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgXAorKwkgICQoT0JKRUNUUykgQExUTElCSUNPTlZAICQoTElCUykgLWxjIFwKKysJICAtdmVyc2lvbi1pbmZvICQoTFRWX0NVUlJFTlQpOiQoTFRWX1JFVklTSU9OKTokKExUVl9BR0UpIFwKKysJICAtcnBhdGggJChsaWJkaXIpIFwKKysJICAtbm8tdW5kZWZpbmVkCisrCisrIyBMaWJ0b29sJ3MgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJpbnRsLgorKyMgQmVmb3JlIG1ha2luZyBhIGdldHRleHQgcmVsZWFzZSwgdGhlIGdldHRleHQgbWFpbnRhaW5lciBtdXN0IGNoYW5nZSB0aGlzCisrIyBhY2NvcmRpbmcgdG8gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAiTGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMiLgorKyMgTWFpbnRhaW5lcnMgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBpbmNsdWRlIHRoZSBpbnRsIGRpcmVjdG9yeSBtdXN0ICpub3QqCisrIyBjaGFuZ2UgdGhlc2UgdmFsdWVzLgorK0xUVl9DVVJSRU5UPTcKKytMVFZfUkVWSVNJT049MAorK0xUVl9BR0U9NAorIAorIC5TVUZGSVhFUzoKKy0uU1VGRklYRVM6IC5jIC5vIC5sbworKy5TVUZGSVhFUzogLmMgLnkgLm8gLmxvIC5zaW4gLnNlZAorKworIC5jLm86CisgCSQoQ09NUElMRSkgJDwKKy0uYy5sbzoKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQ8CisgCistSU5DTFVERVMgPSAtSS4uIC1JLiAtSSQodG9wX3NyY2RpcikvaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisrLnkuYzoKKysJJChZQUNDKSAkKFlGTEFHUykgLS1vdXRwdXQgJEAgJDwKKysJcm0gLWYgJCouaAorIAorLWFsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKytiaW5kdGV4dGRvbS5sbzogJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCisrZGNnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2dldHRleHQuYworK2RnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RnZXR0ZXh0LmMKKytnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZ2V0dGV4dC5jCisrZmluZGRvbWFpbi5sbzogJChzcmNkaXIpL2ZpbmRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ZpbmRkb21haW4uYworK2xvYWRtc2djYXQubG86ICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKytsb2NhbGVhbGlhcy5sbzogJChzcmNkaXIpL2xvY2FsZWFsaWFzLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCisrdGV4dGRvbWFpbi5sbzogJChzcmNkaXIpL3RleHRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3RleHRkb21haW4uYworK2wxMG5mbGlzdC5sbzogJChzcmNkaXIpL2wxMG5mbGlzdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbDEwbmZsaXN0LmMKKytleHBsb2RlbmFtZS5sbzogJChzcmNkaXIpL2V4cGxvZGVuYW1lLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCisrZGNpZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjaWdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjaWdldHRleHQuYworK2RjbmdldHRleHQubG86ICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKytkbmdldHRleHQubG86ICQoc3JjZGlyKS9kbmdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RuZ2V0dGV4dC5jCisrbmdldHRleHQubG86ICQoc3JjZGlyKS9uZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbmdldHRleHQuYworK3BsdXJhbC5sbzogJChzcmNkaXIpL3BsdXJhbC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLmMKKytwbHVyYWwtZXhwLmxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrbG9jYWxjaGFyc2V0LmxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworK3JlbG9jYXRhYmxlLmxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKKytsb2NhbGVuYW1lLmxvOiAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2cuYworK3ByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKKytvc2RlcC5sbzogJChzcmNkaXIpL29zZGVwLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9vc2RlcC5jCisraW50bC1jb21wYXQubG86ICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvaW50bC1jb21wYXQuYworIAorLWFsbC15ZXM6IGxpYmludGwuJGxhIGludGxoLmluc3QKKy1hbGwtbm86CisrcmVmLWFkZC5zZWQ6ICQoc3JjZGlyKS9yZWYtYWRkLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWFkZC5zaW4gPiB0LXJlZi1hZGQuc2VkCisrCW12IHQtcmVmLWFkZC5zZWQgcmVmLWFkZC5zZWQKKytyZWYtZGVsLnNlZDogJChzcmNkaXIpL3JlZi1kZWwuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtZGVsLnNpbiA+IHQtcmVmLWRlbC5zZWQKKysJbXYgdC1yZWYtZGVsLnNlZCByZWYtZGVsLnNlZAorIAorLWxpYmludGwuYTogJChPQkpFQ1RTKQorLQlybSAtZiAkQAorLQkkKEFSKSBjcnUgJEAgJChPQkpFQ1RTKQorLQkkKFJBTkxJQikgJEAKKytJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSS4uCisgCistbGliaW50bC5sYTogJChPQkpFQ1RTKQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChPQkpFQ1RTKSBcCistCQkgICAtdmVyc2lvbi1pbmZvIDE6MCAtcnBhdGggJChsaWJkaXIpCisrbGliZ251aW50bC5oOiAkKHNyY2RpcikvbGliZ251aW50bC5oLmluCisrCXNlZCAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCisrCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluID4gbGliZ251aW50bC5oCisgCistLi4vcG8vY2F0LWlkLXRibC4kbG86IC4uL3BvL2NhdC1pZC10YmwuYyAkKHRvcF9zcmNkaXIpL3BvLyQoUEFDS0FHRSkucG90CistCWNkIC4uL3BvICYmICQoTUFLRSkgY2F0LWlkLXRibC4kbG8KKytsaWJpbnRsLmg6IGxpYmdudWludGwuaAorKwljcCBsaWJnbnVpbnRsLmggbGliaW50bC5oCisgCistY2hlY2s6IGFsbAorK2NoYXJzZXQuYWxpYXM6ICQoc3JjZGlyKS9jb25maWcuY2hhcnNldAorKwkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJ0Bob3N0QCcgPiB0LSRACisrCW12IHQtJEAgJEAKKyAKKy0jIFRoaXMgaW5zdGFsbGF0aW9uIGdvYWwgaXMgb25seSB1c2VkIGluIEdOVSBnZXR0ZXh0LiAgUGFja2FnZXMgd2hpY2gKKy0jIG9ubHkgdXNlIHRoZSBsaWJyYXJ5IHNob3VsZCB1c2UgaW5zdGFsbCBpbnN0ZWFkLgorK2NoZWNrOiBhbGwKKyAKKyAjIFdlIG11c3Qgbm90IGluc3RhbGwgdGhlIGxpYmludGwuaC9saWJpbnRsLmEgZmlsZXMgaWYgd2UgYXJlIG9uIGEKKy0jIHN5c3RlbSB3aGljaCBoYXMgdGhlIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKy0jIHNlcGFyYXRlIGxpYnJhcnkgb3IgdXNlIHRoZSBjYXRnZXRzIGludGVyZmFjZS4gIEEgc3BlY2lhbCBjYXNlIGlzCistIyB3aGVyZSBjb25maWd1cmUgZm91bmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyMgc3lzdGVtIHdoaWNoIGhhcyB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKysjIHNlcGFyYXRlIGxpYnJhcnkuCisgIyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUKKyAjIHBhY2thZ2UsIHlvdSBoYXZlIHRvIHVzZSBgY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0Jy4KKyBpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCisgaW5zdGFsbC1leGVjOiBhbGwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCIgXAorLQkgICAmJiB0ZXN0ICdASU5UTE9CSlNAJyA9ICckKEdFVFRPQkpTKSc7IHRoZW4gXAorLQkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCistCSAgICAkKE1LSU5TVEFMTERJUlMpICQobGliZGlyKSAkKGluY2x1ZGVkaXIpOyBcCistCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChsaWJkaXIpICQoaW5jbHVkZWRpcik7IFwKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliaW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLiRsYTsgXAorKwkgIGlmIHRlc3QgIkBSRUxPQ0FUQUJMRUAiID0geWVzOyB0aGVuIFwKKysJICAgIGRlcGVuZGVuY2llcz1gc2VkIC1uIC1lICdzLF5kZXBlbmRlbmN5X2xpYnM9XCguKlwpLFwxLHAnIDwgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhIHwgc2VkIC1lICJzLF4nLCwiIC1lICJzLCdcJCQsLCJgOyBcCisrCSAgICBpZiB0ZXN0IC1uICIkJGRlcGVuZGVuY2llcyI7IHRoZW4gXAorKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGE7IFwKKysJICAgIGZpOyBcCisgCSAgZmk7IFwKKy0JICAkKElOU1RBTExfREFUQSkgaW50bGguaW5zdCAkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmEgJChsaWJkaXIpL2xpYmludGwuYTsgXAorIAllbHNlIFwKKyAJICA6IDsgXAorIAlmaQorLWluc3RhbGwtZGF0YTogYWxsCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1yICQoTUtJTlNUQUxMRElSUyk7IHRoZW4gXAorLQkgICAgJChNS0lOU1RBTExESVJTKSAkKGdldHRleHRzcmNkaXIpOyBcCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliZ251aW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorKwkgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuc28gJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwkgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyB0aGVuIFwKKysJICAgIG9yaWc9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisgCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChnZXR0ZXh0c3JjZGlyKTsgXAorKwkgICAgaWYgdGVzdCBAR0xJQkMyMUAgPSBubzsgdGhlbiBcCisrCSAgICAgIG9yaWc9Y2hhcnNldC5hbGlhczsgXAorKwkgICAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICAgIHJtIC1mICQkdGVtcDsgXAorKwkgICAgZmk7IFwKKyAJICBmaTsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBWRVJTSU9OICQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorLQkgIGRpc3RzPSIkKERJU1RGSUxFUy5jb21tb24pIjsgXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorKwkgIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorKwkgICAgJiYgb3JpZz0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCisrCSAgICB8fCBvcmlnPSQoc3JjZGlyKS9sb2NhbGUuYWxpYXM7IFwKKysJICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgcm0gLWYgJCR0ZW1wOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisraW5zdGFsbC1kYXRhOiBhbGwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpIENoYW5nZUxvZy5pbnN0ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL0NoYW5nZUxvZzsgXAorKwkgIGRpc3RzPSJDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikiOyBcCisgCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisgCSAgZG9uZTsgXAorKwkgIGNobW9kIGEreCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9jb25maWcuY2hhcnNldDsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5nZW5lcmF0ZWQpIjsgXAorKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKysJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGRpcj0uOyBlbHNlIGRpcj0kKHNyY2Rpcik7IGZpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRkaXIvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5vYnNvbGV0ZSkiOyBcCisrCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKworK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKysKKytpbnN0YWxsZGlyczoKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisgCWVsc2UgXAorIAkgIDogOyBcCisgCWZpCitAQCAtMTQzLDIyICszNjcsNzYgQEAKKyBpbnN0YWxsY2hlY2s6CisgCisgdW5pbnN0YWxsOgorLQlkaXN0cz0iJChESVNURklMRVMuY29tbW9uKSI7IFwKKy0JZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgIHJtIC1mICQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCWRvbmUKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHJtIC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisrCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKysJICAgICAgcm0gLWYgJCRkZXN0OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgIGZpOyBcCisrCSAgICBybSAtZiAkJHRlbXA7IFwKKysJICBmaTsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IHRoZW4gXAorKwkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCisrCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgZmk7IFwKKysJICAgIHJtIC1mICQkdGVtcDsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICBmb3IgZmlsZSBpbiBWRVJTSU9OIENoYW5nZUxvZyBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKTsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorIAorLWluZm8gZHZpOgorK2luZm8gZHZpIHBzIHBkZiBodG1sOgorIAorLSQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdldHRleHQuaAorLWJpbmR0ZXh0ZG9tLiRsbyBmaW5kZG9tYWluLiRsbyBsb2FkbXNnY2F0LiRsbzogZ2V0dGV4dFAuaCBnZXR0ZXh0LmggbG9hZGluZm8uaAorLWRjZ2V0dGV4dC4kbG86IGdldHRleHRQLmggZ2V0dGV4dC5oIGhhc2gtc3RyaW5nLmggbG9hZGluZm8uaAorKyQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdudWludGwuaAorK2JpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbzogJChzcmNkaXIpL2hhc2gtc3RyaW5nLmgKKytleHBsb2RlbmFtZS4kbG8gbDEwbmZsaXN0LiRsbzogJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbyBwbHVyYWwuJGxvIHBsdXJhbC1leHAuJGxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5oCisrZGNpZ2V0dGV4dC4kbG86ICQoc3JjZGlyKS9ldmFsLXBsdXJhbC5oCisrbG9jYWxjaGFyc2V0LiRsbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5oCisrbG9jYWxlYWxpYXMuJGxvIGxvY2FsY2hhcnNldC4kbG8gcmVsb2NhdGFibGUuJGxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuaAorK3ByaW50Zi4kbG86ICQoc3JjZGlyKS9wcmludGYtYXJncy5oICQoc3JjZGlyKS9wcmludGYtYXJncy5jICQoc3JjZGlyKS9wcmludGYtcGFyc2UuaCAkKHNyY2Rpcikvd3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS94c2l6ZS5oICQoc3JjZGlyKS9wcmludGYtcGFyc2UuYyAkKHNyY2RpcikvdmFzbnByaW50Zi5oICQoc3JjZGlyKS92YXNud3ByaW50Zi5oICQoc3JjZGlyKS92YXNucHJpbnRmLmMKKyAKKyB0YWdzOiBUQUdTCisgCisgVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisgCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBldGFncyAtbyAkJGhlcmUvVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKyAKKytjdGFnczogQ1RBR1MKKysKKytDVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBjdGFncyAtbyAkJGhlcmUvQ1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCisgaWQ6IElECisgCisgSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorQEAgLTE2NiwxMiArNDQ0LDE5IEBACisgCisgCisgbW9zdGx5Y2xlYW46CistCXJtIC1mICouYSAqLm8gKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiAqLmEgKi5sYSAqLm8gKi5vYmogKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiBsaWJnbnVpbnRsLmggbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKysJcm0gLWYgLXIgLmxpYnMgX2xpYnMKKyAKKyBjbGVhbjogbW9zdGx5Y2xlYW4KKyAKKyBkaXN0Y2xlYW46IGNsZWFuCistCXJtIC1mIE1ha2VmaWxlIElEIFRBR1MgcG8ybXNnLnNlZCBwbzJ0Ymwuc2VkIGxpYmludGwuaAorKwlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgIHJtIC1mIENoYW5nZUxvZy5pbnN0ICQoRElTVEZJTEVTLm5vcm1hbCk7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKK0BAIC0xODEsMzMgKzQ2NiwyNyBAQAorICMgR05VIGdldHRleHQgbmVlZHMgbm90IGNvbnRhaW4gdGhlIGZpbGUgYFZFUlNJT04nIGJ1dCBjb250YWlucyBzb21lCisgIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorIGRpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCistZGlzdCBkaXN0ZGlyOiBNYWtlZmlsZSAkKERJU1RGSUxFUykKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSBnZXR0ZXh0OyB0aGVuIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKytkaXN0IGRpc3RkaXI6IE1ha2VmaWxlCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICA6IDsgXAorIAllbHNlIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5ub3JtYWwpIjsgXAorLQlmaTsgXAorLQlmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pICQkYWRkaXRpb25hbDsgZG8gXAorLQkgIGxuICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSAyPiAvZGV2L251bGwgXAorLQkgICAgfHwgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpOyBcCistCWRvbmUKKy0KKy1kaXN0LWxpYmM6CistCXRhciB6Y3ZmIGludGwtZ2xpYmMudGFyLmd6ICQoQ09NU1JDUykgJChDT01IRFJTKSBsaWJpbnRsLmguZ2xpYmMKKy0KKy1NYWtlZmlsZTogTWFrZWZpbGUuaW4gLi4vY29uZmlnLnN0YXR1cworLQljZCAuLiBcCistCSAgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCisrCSAgICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKysJICBlbHNlIFwKKysJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCisrCSAgZmk7IFwKKysJICAkKE1BS0UpICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKSAkJGFkZGl0aW9uYWw7IFwKKysJICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKysJICAgIGNwIC1wICQkZGlyLyQkZmlsZSAkKGRpc3RkaXIpOyBcCisrCSAgZG9uZTsgXAorKwlmaQorIAorLSMgVGhlIGRlcGVuZGVuY3kgZm9yIGludGxoLmluc3QgaXMgZGlmZmVyZW50IGluIGdldHRleHQgYW5kIGFsbCBvdGhlcgorLSMgcGFja2FnZXMuICBCZWNhdXNlIHdlIGNhbm5vdCB5b3UgR05VIG1ha2UgZmVhdHVyZXMgd2UgaGF2ZSB0byBzb2x2ZQorLSMgdGhlIHByb2JsZW0gd2hpbGUgcmV3cml0aW5nIE1ha2VmaWxlLmluLgorLUBHVF9ZRVNAaW50bGguaW5zdDogaW50bGguaW5zdC5pbiAuLi9jb25maWcuc3RhdHVzCistQEdUX1lFU0AJY2QgLi4gXAorLUBHVF9ZRVNACSYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9IFwKKy1AR1RfWUVTQAkgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworLUBHVF9OT0AuUEhPTlk6IGludGxoLmluc3QKKy1AR1RfTk9AaW50bGguaW5zdDoKKytNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisrCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKysjIFRoaXMgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGJ1dCBkb2Vzbid0IHdvcmsgYW55IG1vcmUgd2l0aCBhdXRvY29uZi0yLjU3LAorKyMgd2hlbiBBQ19DT05GSUdfRklMRVMoW2ludGwvTWFrZWZpbGU6c29tZWRpci9NYWtlZmlsZS5pbl0pIGlzIHVzZWQuCisrIwljZCAkKHRvcF9idWlsZGRpcikgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisgCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9uZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL25nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MzM3MjEwMzIgLTA0MDAKK0BAIC0wLDAgKzEsNjUgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIF9fbmVlZF9OVUxMCisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorKyAgIHRleHQpLiAgKi8KKytjaGFyICoKKytOR0VUVEVYVCAoY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgcmV0dXJuIERDTkdFVFRFWFQgKE5VTEwsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUzOTcyMDEyMCAtMDQwMAorQEAgLTAsMCArMSw5OCBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNkZWZpbmUgT1MyX0FXQVJFCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrCisrLyogQSB2ZXJzaW9uIG9mIGdldGVudigpIHRoYXQgd29ya3MgZnJvbSBETExzICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRG9zU2NhbkVudiAoY29uc3QgdW5zaWduZWQgY2hhciAqcHN6TmFtZSwgdW5zaWduZWQgY2hhciAqKnBwc3pWYWx1ZSk7CisrCisrY2hhciAqCisrX25sX2dldGVudiAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICB1bnNpZ25lZCBjaGFyICp2YWx1ZTsKKysgIGlmIChEb3NTY2FuRW52IChuYW1lLCAmdmFsdWUpKQorKyAgICByZXR1cm4gTlVMTDsKKysgIGVsc2UKKysgICAgcmV0dXJuIHZhbHVlOworK30KKysKKysvKiBBIGZpeGVkIHNpemUgYnVmZmVyLiAgKi8KKytjaGFyIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lW01BWFBBVEhMRU4rMV07CisrCisrY2hhciAqX25sb3MyX2xpYmRpciA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWRpciA9IE5VTEw7CisrCisrc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZAorK25sb3MyX2luaXRpYWxpemUgKCkKKyt7CisrICBjaGFyICpyb290ID0gZ2V0ZW52ICgiVU5JWFJPT1QiKTsKKysgIGNoYXIgKmdudWxvY2FsZWRpciA9IGdldGVudiAoIkdOVUxPQ0FMRURJUiIpOworKworKyAgX25sb3MyX2xpYmRpciA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xpYmRpcikKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbGliZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTElCRElSKSArIDEpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9saWJkaXIsIHJvb3QsIHNsKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbGliZGlyICsgc2wsIExJQkRJUiwgc3RybGVuIChMSUJESVIpICsgMSk7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgX25sb3MyX2xpYmRpciA9IExJQkRJUjsKKysgICAgfQorKworKyAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xvY2FsZWFsaWFzcGF0aCkKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCwgcm9vdCwgc2wpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggKyBzbCwgTE9DQUxFX0FMSUFTX1BBVEgsIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICAgIH0KKysKKysgIF9ubG9zMl9sb2NhbGVkaXIgPSBnbnVsb2NhbGVkaXI7CisrICBpZiAoIV9ubG9zMl9sb2NhbGVkaXIpCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAgICAgIHsKKysgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKysgICAgICAgICAgX25sb3MyX2xvY2FsZWRpciA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRURJUikgKyAxKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlZGlyLCByb290LCBzbCk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciArIHNsLCBMT0NBTEVESVIsIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSBMT0NBTEVESVI7CisrICAgIH0KKysKKysgIGlmIChzdHJsZW4gKF9ubG9zMl9sb2NhbGVkaXIpIDw9IE1BWFBBVEhMRU4pCisrICAgIHN0cmNweSAobGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUsIF9ubG9zMl9sb2NhbGVkaXIpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjU0NDcxOTM2MCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgorKyAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdoZW4gaW5jbHVkZWQgZnJvbSBvczJjb21wYXQuaCB3ZSBuZWVkIGFsbCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbnMgKi8KKysjaWZuZGVmIE9TMl9BV0FSRQorKworKyN1bmRlZiBMSUJESVIKKysjZGVmaW5lIExJQkRJUgkJCV9ubG9zMl9saWJkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xpYmRpcjsKKysKKysjdW5kZWYgTE9DQUxFRElSCisrI2RlZmluZSBMT0NBTEVESVIJCV9ubG9zMl9sb2NhbGVkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWRpcjsKKysKKysjdW5kZWYgTE9DQUxFX0FMSUFTX1BBVEgKKysjZGVmaW5lIExPQ0FMRV9BTElBU19QQVRICV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aDsKKysKKysjZW5kaWYKKysKKysjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisrI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorKyNkZWZpbmUgc3RyY2FzZWNtcCBzdHJpY21wCisrI2RlZmluZSBzdHJuY2FzZWNtcCBzdHJuaWNtcAorKworKy8qIFdlIGhhdmUgb3VyIG93biBnZXRlbnYoKSB3aGljaCB3b3JrcyBldmVuIGlmIGxpYnJhcnkgaXMgY29tcGlsZWQgYXMgRExMICovCisrI2RlZmluZSBnZXRlbnYgX25sX2dldGVudgorKworKy8qIE9sZGVyIHZlcnNpb25zIG9mIGdldHRleHQgdXNlZCAtMSBhcyB0aGUgdmFsdWUgb2YgTENfTUVTU0FHRVMgKi8KKysjZGVmaW5lIExDX01FU1NBR0VTX0NPTVBBVCAoLTEpCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvb3NkZXAuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vc2RlcC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTUwNzE4NDQ4IC0wNDAwCitAQCAtMCwwICsxLDI0IEBACisrLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZiBkZWZpbmVkIF9fRU1YX18KKysjIGluY2x1ZGUgIm9zMmNvbXBhdC5jIgorKyNlbHNlCisrLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLworK3R5cGVkZWYgaW50IGR1bW15OworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC5jCTIwMDQtMDktMTIgMTQ6NDA6MzYuNTcxNDExMjU2IC0wNDAwCitAQCAtMCwwICsxLDE0OTAgQEAKKysvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBsdXJhbC55CisrICAgYnkgR05VIGJpc29uIDEuMzUuICAqLworKworKyNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworKworKyNkZWZpbmUgeXlwYXJzZSBfX2dldHRleHRwYXJzZQorKyNkZWZpbmUgeXlsZXggX19nZXR0ZXh0bGV4CisrI2RlZmluZSB5eWVycm9yIF9fZ2V0dGV4dGVycm9yCisrI2RlZmluZSB5eWx2YWwgX19nZXR0ZXh0bHZhbAorKyNkZWZpbmUgeXljaGFyIF9fZ2V0dGV4dGNoYXIKKysjZGVmaW5lIHl5ZGVidWcgX19nZXR0ZXh0ZGVidWcKKysjZGVmaW5lIHl5bmVycnMgX19nZXR0ZXh0bmVycnMKKysjIGRlZmluZQlFUVVPUDIJMjU3CisrIyBkZWZpbmUJQ01QT1AyCTI1OAorKyMgZGVmaW5lCUFERE9QMgkyNTkKKysjIGRlZmluZQlNVUxPUDIJMjYwCisrIyBkZWZpbmUJTlVNQkVSCTI2MQorKworKyNsaW5lIDEgInBsdXJhbC55IgorKworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKworKyNsaW5lIDQ5ICJwbHVyYWwueSIKKysjaWZuZGVmIFlZU1RZUEUKKyt0eXBlZGVmIHVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30geXlzdHlwZTsKKysjIGRlZmluZSBZWVNUWVBFIHl5c3R5cGUKKysjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorKyNlbmRpZgorKyNsaW5lIDU1ICJwbHVyYWwueSIKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKKytzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworKworKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQorK3sKKysgIGludCBpOworKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisrCisrICAvKiBJZiBhbnkgb2YgdGhlIGFyZ3VtZW50IGNvdWxkIG5vdCBiZSBtYWxsb2MnZWQsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKysgICAgICBnb3RvIGZhaWw7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKysgIG5ld3AgPSAoc3RydWN0IGV4cHJlc3Npb24gKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7CisrICBpZiAobmV3cCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgbmV3cC0+bmFyZ3MgPSBuYXJnczsKKysgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKysgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKwluZXdwLT52YWwuYXJnc1tpXSA9IGFyZ3NbaV07CisrICAgICAgcmV0dXJuIG5ld3A7CisrICAgIH0KKysKKysgZmFpbDoKKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIEZSRUVfRVhQUkVTU0lPTiAoYXJnc1tpXSk7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8wIChlbnVtIG9wZXJhdG9yIG9wKQorK3sKKysgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMSAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworKworKyAgYXJnc1swXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzIgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpsZWZ0LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisrCisrICBhcmdzWzBdID0gbGVmdDsKKysgIGFyZ3NbMV0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgyLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisrCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKysKKysgIGFyZ3NbMF0gPSBiZXhwOworKyAgYXJnc1sxXSA9IHRicmFuY2g7CisrICBhcmdzWzJdID0gZmJyYW5jaDsKKysgIHJldHVybiBuZXdfZXhwICgzLCBvcCwgYXJncyk7CisrfQorKworKyNpZm5kZWYgWVlERUJVRworKyMgZGVmaW5lIFlZREVCVUcgMAorKyNlbmRpZgorKworKworKworKyNkZWZpbmUJWVlGSU5BTAkJMjcKKysjZGVmaW5lCVlZRkxBRwkJLTMyNzY4CisrI2RlZmluZQlZWU5UQkFTRQkxNgorKworKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KKysjZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI2MSA/IHl5dHJhbnNsYXRlW3hdIDogMTgpCisrCisrLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAqLworK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPQorK3sKKysgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA1LCAgICAgMiwKKysgICAgICAxNCwgICAgMTUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAxMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgMTEKKyt9OworKworKyNpZiBZWURFQlVHCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cHJoc1tdID0KKyt7CisrICAgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDgsICAgIDEyLCAgICAxNiwgICAgMjAsICAgIDI0LCAgICAyOCwgICAgMzIsCisrICAgICAgMzUsICAgIDM3LCAgICAzOQorK307Cisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmhzW10gPQorK3sKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgMywgICAgMTcsICAgIDEyLCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNCwKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNSwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDYsICAgIDE3LCAgICAgMCwKKysgICAgICAxNywgICAgIDcsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA4LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOSwKKysgICAgICAxNywgICAgIDAsICAgIDEwLCAgICAxNywgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxNCwKKysgICAgICAxNywgICAgMTUsICAgICAwCisrfTsKKysKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmxpbmVbXSA9CisreworKyAgICAgICAwLCAgIDE1MCwgICAxNTgsICAgMTYyLCAgIDE2NiwgICAxNzAsICAgMTc0LCAgIDE3OCwgICAxODIsICAgMTg2LAorKyAgICAgMTkwLCAgIDE5NCwgICAxOTkKKyt9OworKyNlbmRpZgorKworKworKyNpZiAoWVlERUJVRykgfHwgZGVmaW5lZCBZWUVSUk9SX1ZFUkJPU0UKKysKKysvKiBZWVROQU1FW1RPS0VOX05VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHRva2VuIFRPS0VOX05VTS4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KKyt7CisrICAiJCIsICJlcnJvciIsICIkdW5kZWZpbmVkLiIsICInPyciLCAiJ3wnIiwgIicmJyIsICJFUVVPUDIiLCAiQ01QT1AyIiwgCisrICAiQURET1AyIiwgIk1VTE9QMiIsICInISciLCAiTlVNQkVSIiwgIic6JyIsICInbiciLCAiJygnIiwgIicpJyIsIAorKyAgInN0YXJ0IiwgImV4cCIsIDAKKyt9OworKyNlbmRpZgorKworKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9CisreworKyAgICAgICAwLCAgICAxNiwgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LAorKyAgICAgIDE3LCAgICAxNywgICAgMTcKKyt9OworKworKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIyW10gPQorK3sKKysgICAgICAgMCwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKysgICAgICAgMSwgICAgIDEsICAgICAzCisrfTsKKysKKysvKiBZWURFRkFDVFtTXSAtLSBkZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUgUyB3aGVuIFlZVEFCTEUKKysgICBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuCisrICAgZXJyb3IuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmYWN0W10gPQorK3sKKysgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMCwgICAgIDAsICAgICAxLCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwKKysgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDAKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmdvdG9bXSA9CisreworKyAgICAgIDI1LCAgICAgNQorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0KKyt7CisrICAgICAgLTksICAgIC05LC0zMjc2OCwtMzI3NjgsICAgIC05LCAgICAzNCwtMzI3NjgsICAgIDExLCAgICAtOSwgICAgLTksCisrICAgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgIC05LC0zMjc2OCwgICAgMjQsICAgIDM5LCAgICA0MywgICAgMTYsCisrICAgICAgMjYsICAgIC0zLC0zMjc2OCwgICAgLTksICAgIDM0LCAgICAyMSwgICAgNTMsLTMyNzY4CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0KKyt7CisrICAtMzI3NjgsICAgIC0xCisrfTsKKysKKysKKysjZGVmaW5lCVlZTEFTVAkJNTMKKysKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXl0YWJsZVtdID0KKyt7CisrICAgICAgIDYsICAgICAxLCAgICAgMiwgICAgIDcsICAgICAzLCAgICAgNCwgICAgMTQsICAgIDE2LCAgICAxNywgICAgMTgsCisrICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisrICAgICAgMTQsICAgIDI2LCAgICAyNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEzLCAgICAxNCwgICAgMjMsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTEsCisrICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMjcKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPQorK3sKKysgICAgICAgMSwgICAgMTAsICAgIDExLCAgICAgNCwgICAgMTMsICAgIDE0LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMCwKKysgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgIDAsICAgIDIzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxNSwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMiwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNiwKKysgICAgICAgNywgICAgIDgsICAgICA5LCAgICAgMAorK307CisrI2RlZmluZSBZWVBVUkUgMQorKworKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisrI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKysgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworKworKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyIHdoZW4KKysgICB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorKyAgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorKyAgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisrCisrLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKysgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKysgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKysgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworKworKyNpZiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKKysKKysvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisrCisrIyBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKysjIGVsc2UKKysjICBpZm5kZWYgWVlTVEFDS19VU0VfQUxMT0NBCisrIyAgIGlmIGRlZmluZWQgKGFsbG9jYSkgfHwgZGVmaW5lZCAoX0FMTE9DQV9IKQorKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmZGVmIF9fR05VQ19fCisrIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKysgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICovCisrIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisrIyAgZW5kaWYKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBtYWxsb2MKKysjICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKysjIGVuZGlmCisrI2VuZGlmIC8qICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKworKworKyNpZiAoISBkZWZpbmVkICh5eW92ZXJmbG93KSBcCisrICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorKwkgfHwgKFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKysKKysvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KKyt1bmlvbiB5eWFsbG9jCisreworKyAgc2hvcnQgeXlzczsKKysgIFlZU1RZUEUgeXl2czsKKysjIGlmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxzOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisrIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKysKKysvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKysgICBOIGVsZW1lbnRzLiAgKi8KKysjIGlmIFlZTFNQX05FRURFRAorKyMgIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKysgICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCkgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkJXAorKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWCkKKysjIGVsc2UKKysjICBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisrICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQkJXAorKyAgICAgICsgWVlTVEFDS19HQVBfTUFYKQorKyMgZW5kaWYKKysKKysvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKysgICBub3Qgb3ZlcmxhcC4gICovCisrIyBpZm5kZWYgWVlDT1BZCisrIyAgaWYgMSA8IF9fR05VQ19fCisrIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisrICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisrICAgICAgZG8JCQkJCVwKKysJewkJCQkJXAorKwkgIHJlZ2lzdGVyIFlZU0laRV9UIHl5aTsJCVwKKysJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisrCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKysJfQkJCQkJXAorKyAgICAgIHdoaWxlICgwKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisrICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKysgICBzdGFjay4gICovCisrIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKysgICAgZG8JCQkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisrCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKKysJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKysJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYOwlcCisrCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysKKysKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkgJiYgZGVmaW5lZCAoX19TSVpFX1RZUEVfXykKKysjIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKHNpemVfdCkKKysjIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjZW5kaWYKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkKKysjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKysjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisrIyBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisrI2VuZGlmCisrCisrI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorKyNkZWZpbmUgWVlFTVBUWQkJLTIKKysjZGVmaW5lIFlZRU9GCQkwCisrI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisrI2RlZmluZSBZWUFCT1JUIAlnb3RvIHl5YWJvcnRsYWIKKysjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisrLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisrICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisrI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisrI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCisrZG8JCQkJCQkJCVwKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKysgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKysgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKysgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorKyAgZWxzZQkJCQkJCQkJXAorKyAgICB7IAkJCQkJCQkJXAorKyAgICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7CQkJXAorKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorK3doaWxlICgwKQorKworKyNkZWZpbmUgWVlURVJST1IJMQorKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorKworKworKy8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucworKyAgIGFyZSBydW4pLgorKworKyAgIFdoZW4gWVlMTE9DX0RFRkFVTFQgaXMgcnVuLCBDVVJSRU5UIGlzIHNldCB0aGUgbG9jYXRpb24gb2YgdGhlCisrICAgZmlyc3QgdG9rZW4uICBCeSBkZWZhdWx0LCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgcmFuZ2VzLCBleHRlbmQKKysgICBpdHMgcmFuZ2UgdG8gdGhlIGxhc3Qgc3ltYm9sLiAgKi8KKysKKysjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisrIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAJXAorKyAgIEN1cnJlbnQubGFzdF9saW5lICAgPSBSaHNbTl0ubGFzdF9saW5lOwlcCisrICAgQ3VycmVudC5sYXN0X2NvbHVtbiA9IFJoc1tOXS5sYXN0X2NvbHVtbjsKKysjZW5kaWYKKysKKysKKysvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKysKKysjaWYgWVlQVVJFCisrIyBpZiBZWUxTUF9ORUVERUQKKysjICBpZmRlZiBZWUxFWF9QQVJBTQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCisrIyAgZW5kaWYKKysjIGVsc2UgLyogIVlZTFNQX05FRURFRCAqLworKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCkKKysjICBlbmRpZgorKyMgZW5kaWYgLyogIVlZTFNQX05FRURFRCAqLworKyNlbHNlIC8qICFZWVBVUkUgKi8KKysjIGRlZmluZSBZWUxFWAkJCXl5bGV4ICgpCisrI2VuZGlmIC8qICFZWVBVUkUgKi8KKysKKysKKysvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisrI2lmIFlZREVCVUcKKysKKysjIGlmbmRlZiBZWUZQUklOVEYKKysjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisrIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisrIyBlbmRpZgorKworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKKytkbyB7CQkJCQkJXAorKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisrICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCisrfSB3aGlsZSAoMCkKKysvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKysgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KKytpbnQgeXlkZWJ1ZzsKKysjZWxzZSAvKiAhWVlERUJVRyAqLworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorKyNlbmRpZiAvKiAhWVlERUJVRyAqLworKworKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKysjaWZuZGVmCVlZSU5JVERFUFRICisrIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisrI2VuZGlmCisrCisrLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKysgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKysKKysgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorKyAgIFNJWkVfTUFYIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKysgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKysKKysjaWYgWVlNQVhERVBUSCA9PSAwCisrIyB1bmRlZiBZWU1BWERFUFRICisrI2VuZGlmCisrCisrI2lmbmRlZiBZWU1BWERFUFRICisrIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorKyNlbmRpZgorKwwKKysjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisrCisrIyBpZm5kZWYgeXlzdHJsZW4KKysjICBpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQgKF9TVFJJTkdfSCkKKysjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorKyMgIGVsc2UKKysvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisrc3RhdGljIFlZU0laRV9UCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisrIyAgIGVsc2UKKyt5eXN0cmxlbiAoeXlzdHIpCisrICAgICBjb25zdCBjaGFyICp5eXN0cjsKKysjICAgZW5kaWYKKyt7CisrICByZWdpc3RlciBjb25zdCBjaGFyICp5eXMgPSB5eXN0cjsKKysKKysgIHdoaWxlICgqeXlzKysgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlzIC0geXlzdHIgLSAxOworK30KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmbmRlZiB5eXN0cGNweQorKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKysjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorKyMgIGVsc2UKKysvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisrICAgWVlERVNULiAgKi8KKytzdGF0aWMgY2hhciAqCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKysjICAgZWxzZQorK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorKyAgICAgY2hhciAqeXlkZXN0OworKyAgICAgY29uc3QgY2hhciAqeXlzcmM7CisrIyAgIGVuZGlmCisreworKyAgcmVnaXN0ZXIgY2hhciAqeXlkID0geXlkZXN0OworKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisrCisrICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlkIC0gMTsKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrDAorKyNsaW5lIDMxNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrCisrLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKysgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgorKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisrICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAqLworKworKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisrIyBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIHZvaWQgKllZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisrIyBlbHNlCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIFlZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisrIyBlbmRpZgorKyNlbHNlIC8qICFZWVBBUlNFX1BBUkFNICovCisrIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKKysjIGRlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKysjZW5kaWYgLyogIVlZUEFSU0VfUEFSQU0gKi8KKysKKysvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBpZmRlZiBZWVBBUlNFX1BBUkFNCisraW50IHl5cGFyc2UgKHZvaWQgKik7CisrIyBlbHNlCisraW50IHl5cGFyc2UgKHZvaWQpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBZWV9ERUNMX1ZBUklBQkxFUyAtLSBkZXBlbmRpbmcgd2hldGhlciB3ZSB1c2UgYSBwdXJlIHBhcnNlciwKKysgICB2YXJpYWJsZXMgYXJlIGdsb2JhbCwgb3IgbG9jYWwgdG8gWVlQQVJTRS4gICovCisrCisrI2RlZmluZSBZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8JCQkJXAorK2ludCB5eWNoYXI7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAqLwlcCisrWVlTVFlQRSB5eWx2YWw7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogTnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIuICAqLwkJCVwKKytpbnQgeXluZXJyczsKKysKKysjaWYgWVlMU1BfTkVFREVECisrIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCisrWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUwkJCVwKKysJCQkJCQlcCisrLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwlcCisrWVlMVFlQRSB5eWxsb2M7CisrI2Vsc2UKKysjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKKytZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCisrI2VuZGlmCisrCisrCisrLyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrCisrI2lmICFZWVBVUkUKKytZWV9ERUNMX1ZBUklBQkxFUworKyNlbmRpZiAgLyogIVlZUFVSRSAqLworKworK2ludAorK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU1fQVJHKQorKyAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCisreworKyAgLyogSWYgcmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrI2lmIFlZUFVSRQorKyAgWVlfREVDTF9WQVJJQUJMRVMKKysjZW5kaWYgIC8qICFZWVBVUkUgKi8KKysKKysgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworKyAgcmVnaXN0ZXIgaW50IHl5bjsKKysgIGludCB5eXJlc3VsdDsKKysgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworKyAgaW50IHl5ZXJyc3RhdHVzOworKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworKyAgaW50IHl5Y2hhcjEgPSAwOworKworKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKysgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCisrICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKysKKysgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisrCisrICAvKiBUaGUgc3RhdGUgc3RhY2suICovCisrICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CisrICBzaG9ydCAqeXlzcyA9IHl5c3NhOworKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworKworKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKysgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOworKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisrCisrI2lmIFlZTFNQX05FRURFRAorKyAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKysgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworKyAgWVlMVFlQRSAqeXlsc3A7CisrI2VuZGlmCisrCisrI2lmIFlZTFNQX05FRURFRAorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKysjZWxzZQorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKKysjZW5kaWYKKysKKysgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisrCisrCisrICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKysgIFlZU1RZUEUgeXl2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxvYzsKKysjZW5kaWYKKysKKysgIC8qIFdoZW4gcmVkdWNpbmcsIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkCisrICAgICBydWxlLiAqLworKyAgaW50IHl5bGVuOworKworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKysKKysgIHl5c3RhdGUgPSAwOworKyAgeXllcnJzdGF0dXMgPSAwOworKyAgeXluZXJycyA9IDA7CisrICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKysKKysgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisrICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKysgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKysgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKysKKysgIHl5c3NwID0geXlzczsKKysgIHl5dnNwID0geXl2czsKKysjaWYgWVlMU1BfTkVFREVECisrICB5eWxzcCA9IHl5bHM7CisrI2VuZGlmCisrICBnb3RvIHl5c2V0c3RhdGU7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrIHl5bmV3c3RhdGU6CisrICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLgorKyAgICAgKi8KKysgIHl5c3NwKys7CisrCisrIHl5c2V0c3RhdGU6CisrICAqeXlzc3AgPSB5eXN0YXRlOworKworKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisrICAgIHsKKysgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKysgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworKworKyNpZmRlZiB5eW92ZXJmbG93CisrICAgICAgeworKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKysJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworKwkgICBtZW1vcnkuICAqLworKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCisrCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCisrIyBpZiBZWUxTUF9ORUVERUQKKysJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworKwkvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisrCSAgIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKysJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKysJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKysJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKysJCSAgICAmeXlzdGFja3NpemUpOworKwl5eWxzID0geXlsczE7CisrIyBlbHNlCisrCXl5b3ZlcmZsb3cgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisrIyBlbmRpZgorKwl5eXNzID0geXlzczE7CisrCXl5dnMgPSB5eXZzMTsKKysgICAgICB9CisrI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKysgICAgICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrIyBlbHNlCisrICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisrICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisrCWdvdG8geXlvdmVyZmxvd2xhYjsKKysgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisrCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKysKKysgICAgICB7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKysJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworKwlpZiAoISB5eXB0cikKKysJICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKysjIGlmIFlZTFNQX05FRURFRAorKwlZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKKysjIGVuZGlmCisrIyB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisrCWlmICh5eXNzMSAhPSB5eXNzYSkKKysJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKysgICAgICB9CisrIyBlbmRpZgorKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisrCisrICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKysgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworKyNpZiBZWUxTUF9ORUVERUQKKysgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOworKyNlbmRpZgorKworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKysJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworKworKyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorKwlZWUFCT1JUOworKyAgICB9CisrCisrICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworKworKyAgZ290byB5eWJhY2t1cDsKKysKKysKKysvKi0tLS0tLS0tLS0tLgorK3wgeXliYWNrdXAuICB8CisrYC0tLS0tLS0tLS0tKi8KKyt5eWJhY2t1cDoKKysKKysvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKysvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysvKiB5eXJlc3VtZTogKi8KKysKKysgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworKworKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5biA9PSBZWUZMQUcpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysKKysgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorKyAgICAgb3IgYSB2YWxpZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKysKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKysgICAgeworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworKyAgICAgIHl5Y2hhciA9IFlZTEVYOworKyAgICB9CisrCisrICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworKworKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gMDsKKysgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKysKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisrCisrI2lmIFlZREVCVUcKKysgICAgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMKKysJd2hpY2ggYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKysgICAgICBpZiAoeXlkZWJ1ZykKKysJeworKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLAorKwkJICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlCisrCSAgICAgbWVhbmluZyBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisrIyBpZmRlZiBZWVBSSU5UCisrCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisrIyBlbmRpZgorKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiKVxuIik7CisrCX0KKysjZW5kaWYKKysgICAgfQorKworKyAgeXluICs9IHl5Y2hhcjE7CisrICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKworKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisrICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisrICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisrICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisrCisrICBpZiAoeXluIDwgMCkKKysgICAgeworKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorKwlnb3RvIHl5ZXJybGFiOworKyAgICAgIHl5biA9IC15eW47CisrICAgICAgZ290byB5eXJlZHVjZTsKKysgICAgfQorKyAgZWxzZSBpZiAoeXluID09IDApCisrICAgIGdvdG8geXllcnJsYWI7CisrCisrICBpZiAoeXluID09IFlZRklOQUwpCisrICAgIFlZQUNDRVBUOworKworKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisrICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLAorKwkgICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysKKysgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisrICBpZiAoeXljaGFyICE9IFlZRU9GKQorKyAgICB5eWNoYXIgPSBZWUVNUFRZOworKworKyAgKisreXl2c3AgPSB5eWx2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgKisreXlsc3AgPSB5eWxsb2M7CisrI2VuZGlmCisrCisrICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisrICAgICBzdGF0dXMuICAqLworKyAgaWYgKHl5ZXJyc3RhdHVzKQorKyAgICB5eWVycnN0YXR1cy0tOworKworKyAgeXlzdGF0ZSA9IHl5bjsKKysgIGdvdG8geXluZXdzdGF0ZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWRlZmF1bHQ6CisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gMCkKKysgICAgZ290byB5eWVycmxhYjsKKysgIGdvdG8geXlyZWR1Y2U7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlyZWR1Y2U6CisrICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworKyAgeXlsZW4gPSB5eXIyW3l5bl07CisrCisrICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKysgICAgIGAkJCA9ICQxJy4KKysKKysgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gdGhlIHNlbWFudGljIHZhbHVlIG9mCisrICAgICB0aGUgbG9va2FoZWFkIHRva2VuLiAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisrICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisrICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKysKKysjaWYgWVlMU1BfTkVFREVECisrICAvKiBTaW1pbGFybHkgZm9yIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgTGV0IHRoZSB1c2VyIHJ1biBhZGRpdGlvbmFsCisrICAgICBjb21tYW5kcyBpZiBmb3IgaW5zdGFuY2UgbG9jYXRpb25zIGFyZSByYW5nZXMuICAqLworKyAgeXlsb2MgPSB5eWxzcFsxLXl5bGVuXTsKKysgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMgd2hpY2gKKysgICAgIGFyZSBkZWZpbmVkIG9ubHkgaWYgYFlZREVCVUcnIGlzIHNldC4gICovCisrICBpZiAoeXlkZWJ1ZykKKysgICAgeworKyAgICAgIGludCB5eWk7CisrCisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisrCQkgeXluLCB5eXJsaW5lW3l5bl0pOworKworKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworKyAgICAgIGZvciAoeXlpID0geXlwcmhzW3l5bl07IHl5cmhzW3l5aV0gPiAwOyB5eWkrKykKKysJWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW3l5aV1dKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgc3dpdGNoICh5eW4pIHsKKysKKytjYXNlIDE6CisrI2xpbmUgMTUxICJwbHVyYWwueSIKKyt7CisrCSAgICBpZiAoeXl2c3BbMF0uZXhwID09IE5VTEwpCisrCSAgICAgIFlZQUJPUlQ7CisrCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9IHl5dnNwWzBdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMjoKKysjbGluZSAxNTkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMyAocW1vcCwgeXl2c3BbLTRdLmV4cCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMzoKKysjbGluZSAxNjMgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobG9yLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA0OgorKyNsaW5lIDE2NyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yIChsYW5kLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA1OgorKyNsaW5lIDE3MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDY6CisrI2xpbmUgMTc1ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNzoKKysjbGluZSAxNzkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA4OgorKyNsaW5lIDE4MyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDk6CisrI2xpbmUgMTg3ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzEgKGxub3QsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEwOgorKyNsaW5lIDE5MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8wICh2YXIpOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAxMToKKysjbGluZSAxOTUgInBsdXJhbC55IgorK3sKKysJICAgIGlmICgoeXl2YWwuZXhwID0gbmV3X2V4cF8wIChudW0pKSAhPSBOVUxMKQorKwkgICAgICB5eXZhbC5leHAtPnZhbC5udW0gPSB5eXZzcFswXS5udW07CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEyOgorKyNsaW5lIDIwMCAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0geXl2c3BbLTFdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK30KKysKKysjbGluZSA3MDUgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24vYmlzb24uc2ltcGxlIgorKworKwwKKysgIHl5dnNwIC09IHl5bGVuOworKyAgeXlzc3AgLT0geXlsZW47CisrI2lmIFlZTFNQX05FRURFRAorKyAgeXlsc3AgLT0geXlsZW47CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisrICAgICAgd2hpbGUgKHl5c3NwMSAhPSB5eXNzcCkKKysJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgKisreXl2c3AgPSB5eXZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bG9jOworKyNlbmRpZgorKworKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKysgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworKworKyAgeXluID0geXlyMVt5eW5dOworKworKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKysgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisrICBlbHNlCisrICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworKworKyAgZ290byB5eW5ld3N0YXRlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJybGFiOgorKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisrICBpZiAoIXl5ZXJyc3RhdHVzKQorKyAgICB7CisrICAgICAgKyt5eW5lcnJzOworKworKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKysgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisrCisrICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisrCXsKKysJICBZWVNJWkVfVCB5eXNpemUgPSAwOworKwkgIGNoYXIgKnl5bXNnOworKwkgIGludCB5eXgsIHl5Y291bnQ7CisrCisrCSAgeXljb3VudCA9IDA7CisrCSAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorKwkgICAgIFlZQ0hFQ0suICAqLworKwkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkgICAgICAgeXl4IDwgKGludCkgKHNpemVvZiAoeXl0bmFtZSkgLyBzaXplb2YgKGNoYXIgKikpOyB5eXgrKykKKysJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorKwkgICAgICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbeXl4XSkgKyAxNSwgeXljb3VudCsrOworKwkgIHl5c2l6ZSArPSB5eXN0cmxlbiAoInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpICsgMTsKKysJICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKysJICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5c2l6ZSk7CisrCSAgaWYgKHl5bXNnICE9IDApCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnl5cCA9IHl5c3RwY3B5ICh5eW1zZywgInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpOworKwkgICAgICB5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW1lZVFJBTlNMQVRFICh5eWNoYXIpXSk7CisrCisrCSAgICAgIGlmICh5eWNvdW50IDwgNSkKKysJCXsKKysJCSAgeXljb3VudCA9IDA7CisrCQkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsKKysJCSAgICAgICB5eXgrKykKKysJCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCkKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICp5eXEgPSAhIHl5Y291bnQgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKKysJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXEpOworKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl4XSk7CisrCQkJeXljb3VudCsrOworKwkJICAgICAgfQorKwkJfQorKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisrCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQiKTsKKysJfQorKyAgICAgIGVsc2UKKysjZW5kaWYgLyogZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKwl5eWVycm9yICgicGFyc2UgZXJyb3IiKTsKKysgICAgfQorKyAgZ290byB5eWVycmxhYjE7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJybGFiMSAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJsYWIxOgorKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisrICAgIHsKKysgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisrCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisrCisrICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisrICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKysJWVlBQk9SVDsKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLAorKwkJICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysgICAgICB5eWNoYXIgPSBZWUVNUFRZOworKyAgICB9CisrCisrICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKysgICAgIHRva2VuLiAgKi8KKysKKysgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworKworKyAgZ290byB5eWVycmhhbmRsZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmRlZmF1bHQgLS0gY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgfAorK3wgZXJyb3IgdG9rZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJkZWZhdWx0OgorKyNpZiAwCisrICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKysgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKysKKysgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4gICovCisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4pCisrICAgIGdvdG8geXlkZWZhdWx0OworKyNlbmRpZgorKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJwb3AgLS0gcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgfAorK3wgZXJyb3IgdG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJycG9wOgorKyAgaWYgKHl5c3NwID09IHl5c3MpCisrICAgIFlZQUJPUlQ7CisrICB5eXZzcC0tOworKyAgeXlzdGF0ZSA9ICotLXl5c3NwOworKyNpZiBZWUxTUF9ORUVERUQKKysgIHl5bHNwLS07CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisrCVlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKisreXlzc3AxKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisrICAgIH0KKysjZW5kaWYKKysKKysvKi0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJoYW5kbGUuICB8CisrYC0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmhhbmRsZToKKysgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gWVlGTEFHKQorKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKysKKysgIHl5biArPSBZWVRFUlJPUjsKKysgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisrICAgIGdvdG8geXllcnJkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKyAgaWYgKHl5biA8IDApCisrICAgIHsKKysgICAgICBpZiAoeXluID09IFlZRkxBRykKKysJZ290byB5eWVycnBvcDsKKysgICAgICB5eW4gPSAteXluOworKyAgICAgIGdvdG8geXlyZWR1Y2U7CisrICAgIH0KKysgIGVsc2UgaWYgKHl5biA9PSAwKQorKyAgICBnb3RvIHl5ZXJycG9wOworKworKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorKyAgICBZWUFDQ0VQVDsKKysKKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAiKSk7CisrCisrICAqKyt5eXZzcCA9IHl5bHZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bGxvYzsKKysjZW5kaWYKKysKKysgIHl5c3RhdGUgPSB5eW47CisrICBnb3RvIHl5bmV3c3RhdGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlhY2NlcHRsYWI6CisrICB5eXJlc3VsdCA9IDA7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5YWJvcnRsYWI6CisrICB5eXJlc3VsdCA9IDE7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlvdmVyZmxvd2FiIC0tIHBhcnNlciBvdmVyZmxvdyBjb21lcyBoZXJlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5b3ZlcmZsb3dsYWI6CisrICB5eWVycm9yICgicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisrICB5eXJlc3VsdCA9IDI7CisrICAvKiBGYWxsIHRocm91Z2guICAqLworKworK3l5cmV0dXJuOgorKyNpZm5kZWYgeXlvdmVyZmxvdworKyAgaWYgKHl5c3MgIT0geXlzc2EpCisrICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisrI2VuZGlmCisrICByZXR1cm4geXlyZXN1bHQ7CisrfQorKyNsaW5lIDIwNSAicGx1cmFsLnkiCisrCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwtZXhwLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLWV4cC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTc4NzE0MTkyIC0wNDAwCitAQCAtMCwwICsxLDE1NCBAQAorKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrI2lmIChkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fQVBQTEVfQ0NfXykgXAorKyAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKysKKysvKiBUaGVzZSBzdHJ1Y3RzIGFyZSB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgdGhlIGdlcm1hbmljIHBsdXJhbAorKyAgIGZvcm0gZGV0ZXJtaW5hdGlvbi4gIEl0IHJlcHJlc2VudHMgdGhlIGV4cHJlc3Npb24gICJuICE9IDEiLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQorK3sKKysgIC5uYXJncyA9IDAsCisrICAub3BlcmF0aW9uID0gdmFyLAorK307Cisrc3RhdGljIGNvbnN0IHN0cnVjdCBleHByZXNzaW9uIHBsb25lID0KKyt7CisrICAubmFyZ3MgPSAwLAorKyAgLm9wZXJhdGlvbiA9IG51bSwKKysgIC52YWwgPQorKyAgeworKyAgICAubnVtID0gMQorKyAgfQorK307Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMID0KKyt7CisrICAubmFyZ3MgPSAyLAorKyAgLm9wZXJhdGlvbiA9IG5vdF9lcXVhbCwKKysgIC52YWwgPQorKyAgeworKyAgICAuYXJncyA9CisrICAgIHsKKysgICAgICBbMF0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsdmFyLAorKyAgICAgIFsxXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGxvbmUKKysgICAgfQorKyAgfQorK307CisrCisrIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKQorKworKyNlbHNlCisrCisrLyogRm9yIGNvbXBpbGVycyB3aXRob3V0IHN1cHBvcnQgZm9yIElTTyBDIDk5IHN0cnVjdC91bmlvbiBpbml0aWFsaXplcnM6CisrICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiBwbHZhcjsKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMOworKworK3N0YXRpYyB2b2lkCisraW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKyt7CisrICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorKyAgICB7CisrICAgICAgcGx2YXIubmFyZ3MgPSAwOworKyAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKysKKysgICAgICBwbG9uZS5uYXJncyA9IDA7CisrICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworKyAgICAgIHBsb25lLnZhbC5udW0gPSAxOworKworKyAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLm9wZXJhdGlvbiA9IG5vdF9lcXVhbDsKKysgICAgICBHRVJNQU5JQ19QTFVSQUwudmFsLmFyZ3NbMF0gPSAmcGx2YXI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworKyAgICB9CisrfQorKworKyMgZGVmaW5lIElOSVRfR0VSTUFOSUNfUExVUkFMKCkgaW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKysKKysjZW5kaWYKKysKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorK3sKKysgIGlmIChudWxsZW50cnkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnBsdXJhbDsKKysgICAgICBjb25zdCBjaGFyICpucGx1cmFsczsKKysKKysgICAgICBwbHVyYWwgPSBzdHJzdHIgKG51bGxlbnRyeSwgInBsdXJhbD0iKTsKKysgICAgICBucGx1cmFscyA9IHN0cnN0ciAobnVsbGVudHJ5LCAibnBsdXJhbHM9Iik7CisrICAgICAgaWYgKHBsdXJhbCA9PSBOVUxMIHx8IG5wbHVyYWxzID09IE5VTEwpCisrCWdvdG8gbm9fcGx1cmFsOworKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmVuZHA7CisrCSAgdW5zaWduZWQgbG9uZyBpbnQgbjsKKysJICBzdHJ1Y3QgcGFyc2VfYXJncyBhcmdzOworKworKwkgIC8qIEZpcnN0IGdldCB0aGUgbnVtYmVyLiAgKi8KKysJICBucGx1cmFscyArPSA5OworKwkgIHdoaWxlICgqbnBsdXJhbHMgIT0gJ1wwJyAmJiBpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKm5wbHVyYWxzKSkKKysJICAgICsrbnBsdXJhbHM7CisrCSAgaWYgKCEoKm5wbHVyYWxzID49ICcwJyAmJiAqbnBsdXJhbHMgPD0gJzknKSkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKyNpZiBkZWZpbmVkIEhBVkVfU1RSVE9VTCB8fCBkZWZpbmVkIF9MSUJDCisrCSAgbiA9IHN0cnRvdWwgKG5wbHVyYWxzLCAmZW5kcCwgMTApOworKyNlbHNlCisrCSAgZm9yIChlbmRwID0gbnBsdXJhbHMsIG4gPSAwOyAqZW5kcCA+PSAnMCcgJiYgKmVuZHAgPD0gJzknOyBlbmRwKyspCisrCSAgICBuID0gbiAqIDEwICsgKCplbmRwIC0gJzAnKTsKKysjZW5kaWYKKysJICBpZiAobnBsdXJhbHMgPT0gZW5kcCkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKwkgICpucGx1cmFsc3AgPSBuOworKworKwkgIC8qIER1ZSB0byB0aGUgcmVzdHJpY3Rpb25zIGJpc29uIGltcG9zZXMgb250byB0aGUgaW50ZXJmYWNlIG9mIHRoZQorKwkgICAgIHNjYW5uZXIgZnVuY3Rpb24gd2UgaGF2ZSB0byBwdXQgdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIHJlc3VsdAorKwkgICAgIHBhc3NlZCB1cCBmcm9tIHRoZSBwYXJzZXIgaW50byB0aGUgc2FtZSBzdHJ1Y3R1cmUgd2hpY2ggYWRkcmVzcworKwkgICAgIGlzIHBhc3NlZCBkb3duIHRvIHRoZSBwYXJzZXIuICAqLworKwkgIHBsdXJhbCArPSA3OworKwkgIGFyZ3MuY3AgPSBwbHVyYWw7CisrCSAgaWYgKFBMVVJBTF9QQVJTRSAoJmFyZ3MpICE9IDApCisrCSAgICBnb3RvIG5vX3BsdXJhbDsKKysJICAqcGx1cmFscCA9IGFyZ3MucmVzOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIEJ5IGRlZmF1bHQgd2UgYXJlIHVzaW5nIHRoZSBHZXJtYW5pYyBmb3JtOiBzaW5ndWxhciBmb3JtIG9ubHkKKysgICAgICAgICBmb3IgYG9uZScsIHRoZSBwbHVyYWwgZm9ybSBvdGhlcndpc2UuICBZZXMsIHRoaXMgaXMgYWxzbyB3aGF0CisrICAgICAgICAgRW5nbGlzaCBpcyB1c2luZyBzaW5jZSBFbmdsaXNoIGlzIGEgR2VybWFuaWMgbGFuZ3VhZ2UuICAqLworKyAgICBub19wbHVyYWw6CisrICAgICAgSU5JVF9HRVJNQU5JQ19QTFVSQUwgKCk7CisrICAgICAgKnBsdXJhbHAgPSAmR0VSTUFOSUNfUExVUkFMOworKyAgICAgICpucGx1cmFsc3AgPSAyOworKyAgICB9CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC1leHAuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwtZXhwLmgJMjAwNC0wOS0xMiAxNDo0MDozNC41ODQ3MTMyODAgLTA0MDAKK0BAIC0wLDAgKzEsMTE4IEBACisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUExVUkFMX0VYUF9ICisrI2RlZmluZSBfUExVUkFMX0VYUF9ICisrCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisrIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorKyNlbmRpZgorKworKworKy8qIFRoaXMgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHByZXNzaW9ucyB0byBkZXRlcm1pbmUgdGhlCisrICAgcGx1cmFsIGZvcm0uICAqLworK3N0cnVjdCBleHByZXNzaW9uCisreworKyAgaW50IG5hcmdzOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICAqLworKyAgZW51bSBvcGVyYXRvcgorKyAgeworKyAgICAvKiBXaXRob3V0IGFyZ3VtZW50czogICovCisrICAgIHZhciwJCQkvKiBUaGUgdmFyaWFibGUgIm4iLiAgKi8KKysgICAgbnVtLAkJCS8qIERlY2ltYWwgbnVtYmVyLiAgKi8KKysgICAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgbG5vdCwJCQkvKiBMb2dpY2FsIE5PVC4gICovCisrICAgIC8qIEJpbmFyeSBvcGVyYXRvcnM6ICAqLworKyAgICBtdWx0LAkJCS8qIE11bHRpcGxpY2F0aW9uLiAgKi8KKysgICAgZGl2aWRlLAkJCS8qIERpdmlzaW9uLiAgKi8KKysgICAgbW9kdWxlLAkJCS8qIE1vZHVsbyBvcGVyYXRpb24uICAqLworKyAgICBwbHVzLAkJCS8qIEFkZGl0aW9uLiAgKi8KKysgICAgbWludXMsCQkJLyogU3VidHJhY3Rpb24uICAqLworKyAgICBsZXNzX3RoYW4sCQkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfdGhhbiwJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBsZXNzX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuICAqLworKyAgICBub3RfZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgaW5lcXVhbGl0eS4gICovCisrICAgIGxhbmQsCQkJLyogTG9naWNhbCBBTkQuICAqLworKyAgICBsb3IsCQkJLyogTG9naWNhbCBPUi4gICovCisrICAgIC8qIFRlcm5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgcW1vcAkJCS8qIFF1ZXN0aW9uIG1hcmsgb3BlcmF0b3IuICAqLworKyAgfSBvcGVyYXRpb247CisrICB1bmlvbgorKyAgeworKyAgICB1bnNpZ25lZCBsb25nIGludCBudW07CS8qIE51bWJlciB2YWx1ZSBmb3IgYG51bScuICAqLworKyAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsJLyogVXAgdG8gdGhyZWUgYXJndW1lbnRzLiAgKi8KKysgIH0gdmFsOworK307CisrCisrLyogVGhpcyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgcGFyc2VyIGFuZCBnZXQKKysgICB0aGUgcmVzdWx0IGluIGEgdGhyZWFkLXNhZmUgd2F5LiAgKi8KKytzdHJ1Y3QgcGFyc2VfYXJncworK3sKKysgIGNvbnN0IGNoYXIgKmNwOworKyAgc3RydWN0IGV4cHJlc3Npb24gKnJlczsKKyt9OworKworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoaXMgc291cmNlIGNvZGUgaXMgdXNlZAorKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksCisrICAgMi4gaW4gdGhlIEdOVSBsaWJpbnRsIGxpYnJhcnksCisrICAgMy4gaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLgorKyAgIFRoZSBmdW5jdGlvbiBuYW1lcyBpbiBlYWNoIHNpdHVhdGlvbiBtdXN0IGJlIGRpZmZlcmVudCwgdG8gYWxsb3cgZm9yCisrICAgYmluYXJ5IGluY29tcGF0aWJsZSBjaGFuZ2VzIGluICdzdHJ1Y3QgZXhwcmVzc2lvbicuICBGdXJ0aGVybW9yZSwKKysgICAxLiBpbiB0aGUgR05VIEMgTGlicmFyeSBsaWJyYXJ5LCB0aGUgbmFtZXMgaGF2ZSBhIF9fIHByZWZpeCwKKysgICAyLiszLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSBhbmQgaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLCB0aGUgbmFtZXMKKysgICAgICAgICBtdXN0IGZvbGxvdyBBTlNJIEMgYW5kIG5vdCBzdGFydCB3aXRoIF9fLgorKyAgIFNvIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggdGhlIHRocmVlIGNhc2VzLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gX19nZXR0ZXh0X2ZyZWVfZXhwCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIF9fZ2V0dGV4dHBhcnNlCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIF9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKysjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIF9fZ2V0dGV4dF9leHRyYWN0X3BsdXJhbAorKyNlbGlmIGRlZmluZWQgKElOX0xJQklOVEwpCisrIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9mcmVlX2V4cAorKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBsaWJpbnRsX2dldHRleHRwYXJzZQorKyMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBsaWJpbnRsX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsCisrIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKysjZWxzZQorKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBmcmVlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIHBhcnNlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIGdlcm1hbmljX3BsdXJhbAorKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gZXh0cmFjdF9wbHVyYWxfZXhwcmVzc2lvbgorKyNlbmRpZgorKworK2V4dGVybiB2b2lkIEZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK2V4dGVybiBpbnQgUExVUkFMX1BBUlNFICh2b2lkICphcmcpOworK2V4dGVybiBzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUwgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gdm9pZCBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCisrCQkJCSAgICAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqKnBsdXJhbHAsCisrCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrI2lmICFkZWZpbmVkIChfTElCQykgJiYgIWRlZmluZWQgKElOX0xJQklOVEwpCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHBsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwKKysJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9QTFVSQUxfRVhQX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwueQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwueQkyMDA0LTA5LTEyIDE0OjQwOjM0LjU4OTcxMjUyMCAtMDQwMAorQEAgLTAsMCArMSwzODEgQEAKKysleworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKyV9CisrJXB1cmVfcGFyc2VyCisrJWV4cGVjdCA3CisrCisrJXVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30KKysKKysleworKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApOworK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisrCisrLyogQWxsb2NhdGlvbiBvZiBleHByZXNzaW9ucy4gICovCisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwIChpbnQgbmFyZ3MsIGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICogY29uc3QgKmFyZ3MpCisreworKyAgaW50IGk7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqbmV3cDsKKysKKysgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorKyAgICAgIGdvdG8gZmFpbDsKKysKKysgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKysgIGlmIChuZXdwICE9IE5VTEwpCisrICAgIHsKKysgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworKyAgICAgIG5ld3AtPm9wZXJhdGlvbiA9IG9wOworKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKysgICAgICByZXR1cm4gbmV3cDsKKysgICAgfQorKworKyBmYWlsOgorKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCisreworKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisrCisrICBhcmdzWzBdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKysKKysgIGFyZ3NbMF0gPSBsZWZ0OworKyAgYXJnc1sxXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8zIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqYmV4cCwKKysJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOworKworKyAgYXJnc1swXSA9IGJleHA7CisrICBhcmdzWzFdID0gdGJyYW5jaDsKKysgIGFyZ3NbMl0gPSBmYnJhbmNoOworKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKKyt9CisrCisrJX0KKysKKysvKiBUaGlzIGRlY2xhcmVzIHRoYXQgYWxsIG9wZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGFzc29jaWF0aXZpdHkgYW5kIHRoZQorKyAgIHByZWNlZGVuY2Ugb3JkZXIgYXMgaW4gQy4gIFNlZSBbSGFyYmlzb24sIFN0ZWVsZTogQywgQSBSZWZlcmVuY2UgTWFudWFsXS4KKysgICBUaGVyZSBpcyBubyB1bmFyeSBtaW51cyBhbmQgbm8gYml0d2lzZSBvcGVyYXRvcnMuCisrICAgT3BlcmF0b3JzIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIGJlaGF2aW91ciBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUKKysgICB0b2tlbiwgdG8gc2F2ZSBzcGFjZSBpbiB0aGUgYXJyYXkgZ2VuZXJhdGVkIGJ5IGJpc29uLiAgKi8KKyslcmlnaHQgJz8nCQkvKiAgID8JCSovCisrJWxlZnQgJ3wnCQkvKiAgIHx8CQkqLworKyVsZWZ0ICcmJwkJLyogICAmJgkJKi8KKyslbGVmdCBFUVVPUDIJCS8qICAgPT0gIT0JKi8KKyslbGVmdCBDTVBPUDIJCS8qICAgPCA+IDw9ID49CSovCisrJWxlZnQgQURET1AyCQkvKiAgICsgLQkqLworKyVsZWZ0IE1VTE9QMgkJLyogICAqIC8gJQkqLworKyVyaWdodCAnIScJCS8qICAgIQkJKi8KKysKKysldG9rZW4gPG9wPiBFUVVPUDIgQ01QT1AyIEFERE9QMiBNVUxPUDIKKysldG9rZW4gPG51bT4gTlVNQkVSCisrJXR5cGUgPGV4cD4gZXhwCisrCisrJSUKKysKKytzdGFydDoJICBleHAKKysJICB7CisrCSAgICBpZiAoJDEgPT0gTlVMTCkKKysJICAgICAgWVlBQk9SVDsKKysJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0gJDE7CisrCSAgfQorKwk7CisrCisrZXhwOgkgIGV4cCAnPycgZXhwICc6JyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMyAocW1vcCwgJDEsICQzLCAkNSk7CisrCSAgfQorKwl8IGV4cCAnfCcgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxvciwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwICcmJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAobGFuZCwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIEVRVU9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBDTVBPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgQURET1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIE1VTE9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8ICchJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMSAobG5vdCwgJDIpOworKwkgIH0KKysJfCAnbicKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMCAodmFyKTsKKysJICB9CisrCXwgTlVNQkVSCisrCSAgeworKwkgICAgaWYgKCgkJCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKysJICAgICAgJCQtPnZhbC5udW0gPSAkMTsKKysJICB9CisrCXwgJygnIGV4cCAnKScKKysJICB7CisrCSAgICAkJCA9ICQyOworKwkgIH0KKysJOworKworKyUlCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbzJ0Ymwuc2VkLmluCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BvMnRibC5zZWQuaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwMiArMCwwIEBACistIyBwbzJ0Ymwuc2VkIC0gQ29udmVydCBVbmlmb3J1bSBzdHlsZSAucG8gZmlsZSB0byBsb29rdXAgdGFibGUgZm9yIGNhdGdldHMKKy0jIENvcHlyaWdodCAoQykgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorLSMKKy0xIHsKKy0gIGlcCistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIEBQQUNLQUdFIE5BTUVALnBvdC4gICovXAorLVwKKy0jaWYgSEFWRV9DT05GSUdfSFwKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPlwKKy0jZW5kaWZcCistXAorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiXAorLVwKKy1jb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXSA9IHsKKy0gIGgKKy0gIHMvLiovMC8KKy0gIHgKKy19CistIworLSMgV3JpdGUgbXNnaWQgZW50cmllcyBpbiBDIGFycmF5IGZvcm0uCistIworLS9ebXNnaWQvIHsKKy0gIHMvbXNnaWRbIAldKlwoIi4qIlwpLyAge1wxLworLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lCistICA6YgorLSAgTgorLSMgTG9vayB3aGV0aGVyIHNlY29uZCBwYXJ0IGlzIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXCkiXChcblwpIlwoLioiXCkvXDFcMlwzLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistIyBCZWNhdXNlIHdlIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBmaWxlIGNvcnJlY3RseSBmb3JtZWQgdGhlIGxpbmUKKy0jIGp1c3QgcmVhZCBjYW5ub3QgYmUgYWdhaW4gYmUgYSBtc2dpZCBsaW5lLiAgU28gaXQncyBzYWZlIHRvIGlnbm9yZQorLSMgaXQuCistICBzL1woLipcKVxuLiovXDEvCistICBiYworLSMgV2UgZm91bmQgYSBjb250aW51YXRpb24gbGluZS4gIEJ1dCBiZWZvcmUgcHJpbnRpbmcgaW5zZXJ0ICdcJy4KKy0gIDphCistICBzL1woLipcKVwoXG4uKlwpL1wxXFxcMi8KKy0gIFAKKy0jIFdlIGNhbm5vdCB1c2UgRCBoZXJlLgorLSAgcy8uKlxuXCguKlwpL1wxLworLSMgU29tZSBidWdneSBzZWRzIGRvIG5vdCBjbGVhciB0aGUgYHN1Y2Nlc3NmdWwgc3Vic3RpdHV0aW9uIHNpbmNlIGxhc3QgYGB0JycnCistIyBmbGFnIG9uIGBOJywgc28gd2UgZG8gYSBgdCcgaGVyZSB0byBjbGVhciBpdC4KKy0gIHRiCistIyBOb3QgcmVhY2hlZAorLSAgOmMKKy0gIHgKKy0jIFRoZSBmb2xsb3dpbmcgbmljZSBzb2x1dGlvbiBpcyBieQorLSMgQnJ1bm8gPEhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CistICB0ZAorLSMgSW5jcmVtZW50IGEgZGVjaW1hbCBudW1iZXIgaW4gcGF0dGVybiBzcGFjZS4KKy0jIEZpcnN0IGhpZGUgdHJhaWxpbmcgYDknIGRpZ2l0cy4KKy0gIDpkCistICBzLzlcKF8qXCkkL19cMS8KKy0gIHRkCistIyBBc3N1cmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGlzIGF2YWlsYWJsZS4KKy0gIHMvXlwoXypcKSQvMFwxLworLSMgSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0LgorLSAgcy84XChfKlwpJC85XDEvCistICBzLzdcKF8qXCkkLzhcMS8KKy0gIHMvNlwoXypcKSQvN1wxLworLSAgcy81XChfKlwpJC82XDEvCistICBzLzRcKF8qXCkkLzVcMS8KKy0gIHMvM1woXypcKSQvNFwxLworLSAgcy8yXChfKlwpJC8zXDEvCistICBzLzFcKF8qXCkkLzJcMS8KKy0gIHMvMFwoXypcKSQvMVwxLworLSMgQ29udmVydCB0aGUgaGlkZGVuIGA5JyBkaWdpdHMgdG8gYDAncy4KKy0gIHMvXy8wL2cKKy0gIHgKKy0gIEcKKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wxLCBcMn0sLworLSAgcy9cKC4qXCkiJC9cMS8KKy0gIHAKKy19CistIworLSMgTGFzdCBsaW5lLgorLSMKKy0kIHsKKy0gIGlcCistfTtcCistCistICBnCistICBzLzAqXCguKlwpL2ludCBfbXNnX3RibF9sZW5ndGggPSBcMTsvcAorLX0KKy1kCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLWFyZ3MuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtYXJncy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTk1NzExNjA4IC0wNDAwCitAQCAtMCwwICsxLDExOSBAQAorKy8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKysKKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2VuZGlmCisraW50CisrcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCisreworKyAgc2l6ZV90IGk7CisrICBhcmd1bWVudCAqYXA7CisrCisrICBmb3IgKGkgPSAwLCBhcCA9ICZhLT5hcmdbMF07IGkgPCBhLT5jb3VudDsgaSsrLCBhcCsrKQorKyAgICBzd2l0Y2ggKGFwLT50eXBlKQorKyAgICAgIHsKKysgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKysJYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CisrCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0lOVDoKKysJYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VSU5UOgorKwlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorKwlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJYXAtPmEuYV9sb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCWFwLT5hLmFfdWxvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGxvbmcgaW50KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKysJYXAtPmEuYV9kb3VibGUgPSB2YV9hcmcgKGFyZ3MsIGRvdWJsZSk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCWFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJYXAtPmEuYV9jaGFyID0gdmFfYXJnIChhcmdzLCBpbnQpOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKwlhcC0+YS5hX3dpZGVfY2hhciA9IHZhX2FyZyAoYXJncywgd2ludF90KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX1NUUklORzoKKysJYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisrCWFwLT5hLmFfd2lkZV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IHdjaGFyX3QgKik7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9QT0lOVEVSOgorKwlhcC0+YS5hX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHZvaWQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNpZ25lZCBjaGFyICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaG9ydCAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBpbnQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgZGVmYXVsdDoKKysJLyogVW5rbm93biB0eXBlLiAgKi8KKysJcmV0dXJuIC0xOworKyAgICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtYXJncy5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1hcmdzLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42MDE3MTA2OTYgLTA0MDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX0FSR1NfSAorKyNkZWZpbmUgX1BSSU5URl9BUkdTX0gKKysKKysvKiBHZXQgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHdjaGFyX3QuICAqLworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyNlbmRpZgorKworKy8qIEdldCB3aW50X3QuICAqLworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKworKy8qIEFyZ3VtZW50IHR5cGVzICovCisrdHlwZWRlZiBlbnVtCisreworKyAgVFlQRV9OT05FLAorKyAgVFlQRV9TQ0hBUiwKKysgIFRZUEVfVUNIQVIsCisrICBUWVBFX1NIT1JULAorKyAgVFlQRV9VU0hPUlQsCisrICBUWVBFX0lOVCwKKysgIFRZUEVfVUlOVCwKKysgIFRZUEVfTE9OR0lOVCwKKysgIFRZUEVfVUxPTkdJTlQsCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICBUWVBFX0xPTkdMT05HSU5ULAorKyAgVFlQRV9VTE9OR0xPTkdJTlQsCisrI2VuZGlmCisrICBUWVBFX0RPVUJMRSwKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKyAgVFlQRV9MT05HRE9VQkxFLAorKyNlbmRpZgorKyAgVFlQRV9DSEFSLAorKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgVFlQRV9XSURFX0NIQVIsCisrI2VuZGlmCisrICBUWVBFX1NUUklORywKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICBUWVBFX1dJREVfU1RSSU5HLAorKyNlbmRpZgorKyAgVFlQRV9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrLCBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVIKKysjZW5kaWYKKyt9IGFyZ190eXBlOworKworKy8qIFBvbHltb3JwaGljIGFyZ3VtZW50ICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBhcmdfdHlwZSB0eXBlOworKyAgdW5pb24KKysgIHsKKysgICAgc2lnbmVkIGNoYXIJCQlhX3NjaGFyOworKyAgICB1bnNpZ25lZCBjaGFyCQlhX3VjaGFyOworKyAgICBzaG9ydAkJCWFfc2hvcnQ7CisrICAgIHVuc2lnbmVkIHNob3J0CQlhX3VzaG9ydDsKKysgICAgaW50CQkJCWFfaW50OworKyAgICB1bnNpZ25lZCBpbnQJCWFfdWludDsKKysgICAgbG9uZyBpbnQJCQlhX2xvbmdpbnQ7CisrICAgIHVuc2lnbmVkIGxvbmcgaW50CQlhX3Vsb25naW50OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICBsb25nIGxvbmcgaW50CQlhX2xvbmdsb25naW50OworKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CWFfdWxvbmdsb25naW50OworKyNlbmRpZgorKyAgICBmbG9hdAkJCWFfZmxvYXQ7CisrICAgIGRvdWJsZQkJCWFfZG91YmxlOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgIGxvbmcgZG91YmxlCQkJYV9sb25nZG91YmxlOworKyNlbmRpZgorKyAgICBpbnQJCQkJYV9jaGFyOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgICB3aW50X3QJCQlhX3dpZGVfY2hhcjsKKysjZW5kaWYKKysgICAgY29uc3QgY2hhcioJCQlhX3N0cmluZzsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworKyNlbmRpZgorKyAgICB2b2lkKgkJCWFfcG9pbnRlcjsKKysgICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworKyAgICBzaG9ydCAqCQkJYV9jb3VudF9zaG9ydF9wb2ludGVyOworKyAgICBpbnQgKgkJCWFfY291bnRfaW50X3BvaW50ZXI7CisrICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgbG9uZyBsb25nIGludCAqCQlhX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXI7CisrI2VuZGlmCisrICB9CisrICBhOworK30KKythcmd1bWVudDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGFyZ3VtZW50ICphcmc7CisrfQorK2FyZ3VtZW50czsKKysKKysKKysvKiBGZXRjaCB0aGUgYXJndW1lbnRzLCBwdXR0aW5nIHRoZW0gaW50byBhLiAqLworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZWxzZQorK2V4dGVybgorKyNlbmRpZgorK2ludCBwcmludGZfZmV0Y2hhcmdzICh2YV9saXN0IGFyZ3MsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfQVJHU19IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42MDc3MDk3ODQgLTA0MDAKK0BAIC0wLDAgKzEsMzcxIEBACisrLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLCB1c2luZyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZiAhSEFWRV9QT1NJWF9QUklOVEYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisrCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrCisrLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInByaW50Zi1hcmdzLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuYyIKKysKKysvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNucHJpbnRmIGxpYmludGxfdmFzbnByaW50ZgorKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisrI2lmIDAgLyogbm90IG5lZWRlZCAqLworKyNkZWZpbmUgYXNucHJpbnRmIGxpYmludGxfYXNucHJpbnRmCisrI2luY2x1ZGUgImFzbnByaW50Zi5jIgorKyNlbmRpZgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdmZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaW50IHJldHZhbCA9IC0xOworKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKysJeworKwkgIGlmIChmd3JpdGUgKHJlc3VsdCwgMSwgbGVuZ3RoLCBzdHJlYW0pID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9wcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzcHJpbnRmIChjaGFyICpyZXN1bHRidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gdnNwcmludGYgKHJlc3VsdGJ1ZiwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGggPSAoc2l6ZV90KSB+MCAvICg0ICogc2l6ZW9mIChjaGFyKSk7CisrICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3NwcmludGYgKGNoYXIgKnJlc3VsdGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c3ByaW50ZiAocmVzdWx0YnVmLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNpZiBIQVZFX1NOUFJJTlRGCisrCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgX3ZzbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnNucHJpbnRmIHZzbnByaW50ZgorKyMgZW5kaWYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKHJlc3VsdGJ1ZiwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKysJeworKwkgIGlmIChtYXhsZW5ndGggPiAwKQorKwkgICAgeworKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorKwkJYWJvcnQgKCk7CisrCSAgICAgIG1lbWNweSAocmVzdWx0YnVmLCByZXN1bHQsIG1heGxlbmd0aCAtIDEpOworKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAnXDAnOworKwkgICAgfQorKwkgIGZyZWUgKHJlc3VsdCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gbGVuZ3RoOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNlbmRpZgorKworKyNpZiBIQVZFX0FTUFJJTlRGCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92YXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBzaXplX3QgbGVuZ3RoOworKyAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorKyAgICByZXR1cm4gLTE7CisrICAqcmVzdWx0cCA9IHJlc3VsdDsKKysgIHJldHVybiBsZW5ndGg7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfYXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Zhc3ByaW50ZiAocmVzdWx0cCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjaWYgSEFWRV9GV1BSSU5URgorKworKyNpbmNsdWRlIDx3Y2hhci5oPgorKworKyNkZWZpbmUgV0lERV9DSEFSX1ZFUlNJT04gMQorKworKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ3cHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNud3ByaW50ZiBsaWJpbnRsX3Zhc253cHJpbnRmCisrI2luY2x1ZGUgInZhc25wcmludGYuYyIKKysjaWYgMCAvKiBub3QgbmVlZGVkICovCisrI2RlZmluZSBhc253cHJpbnRmIGxpYmludGxfYXNud3ByaW50ZgorKyNpbmNsdWRlICJhc25wcmludGYuYyIKKysjZW5kaWYKKysKKysjIGlmIEhBVkVfREVDTF9fU05XUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c3dwcmludGYgX3ZzbndwcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiB2c3dwcmludGYKKysjIGVuZGlmCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92ZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHdjc2NociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGg7CisrICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpbnQgcmV0dmFsID0gLTE7CisrICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKwl7CisrCSAgc2l6ZV90IGk7CisrCSAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorKwkgICAgaWYgKGZwdXR3YyAocmVzdWx0W2ldLCBzdHJlYW0pID09IFdFT0YpCisrCSAgICAgIGJyZWFrOworKwkgIGlmIChpID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92d3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZ3cHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Zzd3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBpZiAobWF4bGVuZ3RoID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGxlbmd0aCA8IG1heGxlbmd0aCkKKysJCWFib3J0ICgpOworKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCAobWF4bGVuZ3RoIC0gMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysJICAgICAgcmVzdWx0YnVmW21heGxlbmd0aCAtIDFdID0gMDsKKysJICAgIH0KKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3N3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnN3cHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtcGFyc2UuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtcGFyc2UuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjYyMjcwNzUwNCAtMDQwMAorQEAgLTAsMCArMSw1MzcgQEAKKysvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBHZXQgc2l6ZV90LCBOVUxMLiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IGludG1heF90LiAgKi8KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKworKy8qIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKS4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKy8qIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4gICovCisrI2luY2x1ZGUgInhzaXplLmgiCisrCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrI2Vsc2UKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworKyNlbmRpZgorKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytpbnQKKytQUklOVEZfUEFSU0UgKGNvbnN0IENIQVJfVCAqZm9ybWF0LCBESVJFQ1RJVkVTICpkLCBhcmd1bWVudHMgKmEpCisreworKyAgY29uc3QgQ0hBUl9UICpjcCA9IGZvcm1hdDsJCS8qIHBvaW50ZXIgaW50byBmb3JtYXQgKi8KKysgIHNpemVfdCBhcmdfcG9zbiA9IDA7CQkvKiBudW1iZXIgb2YgcmVndWxhciBhcmd1bWVudHMgY29uc3VtZWQgKi8KKysgIHNpemVfdCBkX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgZC0+ZGlyICovCisrICBzaXplX3QgYV9hbGxvY2F0ZWQ7CQkJLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGEtPmFyZyAqLworKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGggPSAwOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKKysKKysgIGQtPmNvdW50ID0gMDsKKysgIGRfYWxsb2NhdGVkID0gMTsKKysgIGQtPmRpciA9IG1hbGxvYyAoZF9hbGxvY2F0ZWQgKiBzaXplb2YgKERJUkVDVElWRSkpOworKyAgaWYgKGQtPmRpciA9PSBOVUxMKQorKyAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKysgICAgcmV0dXJuIC0xOworKworKyAgYS0+Y291bnQgPSAwOworKyAgYV9hbGxvY2F0ZWQgPSAwOworKyAgYS0+YXJnID0gTlVMTDsKKysKKysjZGVmaW5lIFJFR0lTVEVSX0FSRyhfaW5kZXhfLF90eXBlXykgXAorKyAgewkJCQkJCQkJCVwKKysgICAgc2l6ZV90IG4gPSAoX2luZGV4Xyk7CQkJCQkJXAorKyAgICBpZiAobiA+PSBhX2FsbG9jYXRlZCkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCVwKKysJYXJndW1lbnQgKm1lbW9yeTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwlhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOwkJCQlcCisrCWlmIChhX2FsbG9jYXRlZCA8PSBuKQkJCQkJCVwKKysJICBhX2FsbG9jYXRlZCA9IHhzdW0gKG4sIDEpOwkJCQkJXAorKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsJCVwKKysJaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQlcCisrCSAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCQkJXAorKwkgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKysJbWVtb3J5ID0gKGEtPmFyZwkJCQkJCVwKKysJCSAgPyByZWFsbG9jIChhLT5hcmcsIG1lbW9yeV9zaXplKQkJCVwKKysJCSAgOiBtYWxsb2MgKG1lbW9yeV9zaXplKSk7CQkJCVwKKysJaWYgKG1lbW9yeSA9PSBOVUxMKQkJCQkJCVwKKysJICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8JCQkJCQlcCisrCSAgZ290byBlcnJvcjsJCQkJCQkJXAorKwlhLT5hcmcgPSBtZW1vcnk7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKQkJCQkJCVwKKysgICAgICBhLT5hcmdbYS0+Y291bnQrK10udHlwZSA9IFRZUEVfTk9ORTsJCQkJXAorKyAgICBpZiAoYS0+YXJnW25dLnR5cGUgPT0gVFlQRV9OT05FKQkJCQkJXAorKyAgICAgIGEtPmFyZ1tuXS50eXBlID0gKF90eXBlXyk7CQkJCQlcCisrICAgIGVsc2UgaWYgKGEtPmFyZ1tuXS50eXBlICE9IChfdHlwZV8pKQkJCQlcCisrICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwkJCVwKKysgICAgICBnb3RvIGVycm9yOwkJCQkJCQlcCisrICB9CisrCisrICB3aGlsZSAoKmNwICE9ICdcMCcpCisrICAgIHsKKysgICAgICBDSEFSX1QgYyA9ICpjcCsrOworKyAgICAgIGlmIChjID09ICclJykKKysJeworKwkgIHNpemVfdCBhcmdfaW5kZXggPSBBUkdfTk9ORTsKKysJICBESVJFQ1RJVkUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07LyogcG9pbnRlciB0byBuZXh0IGRpcmVjdGl2ZSAqLworKworKwkgIC8qIEluaXRpYWxpemUgdGhlIG5leHQgZGlyZWN0aXZlLiAgKi8KKysJICBkcC0+ZGlyX3N0YXJ0ID0gY3AgLSAxOworKwkgIGRwLT5mbGFncyA9IDA7CisrCSAgZHAtPndpZHRoX3N0YXJ0ID0gTlVMTDsKKysJICBkcC0+d2lkdGhfZW5kID0gTlVMTDsKKysJICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IE5VTEw7CisrCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBOVUxMOworKwkgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPmFyZ19pbmRleCA9IEFSR19OT05FOworKworKwkgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworKwkgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJOworKwkgICAgICBpZiAoKm5wID09ICckJykKKysJCXsKKysJCSAgc2l6ZV90IG4gPSAwOworKworKwkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisrCQkgIGlmIChuID09IDApCisrCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBhcmdfaW5kZXggPSBuIC0gMTsKKysJCSAgY3AgPSBucCArIDE7CisrCQl9CisrCSAgICB9CisrCisrCSAgLyogUmVhZCB0aGUgZmxhZ3MuICAqLworKwkgIGZvciAoOzspCisrCSAgICB7CisrCSAgICAgIGlmICgqY3AgPT0gJ1wnJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfR1JPVVA7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnLScpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX0xFRlQ7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnKycpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX1NIT1dTSUdOOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJyAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TUEFDRTsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcjJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfQUxUOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJzAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19aRVJPOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgZmllbGQgd2lkdGguICAqLworKwkgIGlmICgqY3AgPT0gJyonKQorKwkgICAgeworKwkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKysJICAgICAgY3ArKzsKKysJICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworKwkgICAgICBpZiAobWF4X3dpZHRoX2xlbmd0aCA8IDEpCisrCQltYXhfd2lkdGhfbGVuZ3RoID0gMTsKKysKKysJICAgICAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisrCSAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCQl7CisrCQkgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJICAgIDsKKysJCSAgaWYgKCpucCA9PSAnJCcpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG4gPSAwOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworKwkJICAgICAgaWYgKG4gPT0gMCkKKysJCQkvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworKwkJCWdvdG8gZXJyb3I7CisrCQkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCQlnb3RvIGVycm9yOworKwkJICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IG4gLSAxOworKwkJICAgICAgY3AgPSBucCArIDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCXsKKysJCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisrCQkgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIC8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJfQorKwkgICAgICBSRUdJU1RFUl9BUkcgKGRwLT53aWR0aF9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJICAgIH0KKysJICBlbHNlIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCB3aWR0aF9sZW5ndGg7CisrCisrCSAgICAgIGRwLT53aWR0aF9zdGFydCA9IGNwOworKwkgICAgICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorKwkJOworKwkgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisrCSAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCSAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgd2lkdGhfbGVuZ3RoKQorKwkJbWF4X3dpZHRoX2xlbmd0aCA9IHdpZHRoX2xlbmd0aDsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgcHJlY2lzaW9uLiAgKi8KKysJICBpZiAoKmNwID09ICcuJykKKysJICAgIHsKKysJICAgICAgY3ArKzsKKysJICAgICAgaWYgKCpjcCA9PSAnKicpCisrCQl7CisrCQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBjcCAtIDE7CisrCQkgIGNwKys7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IDIpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOworKworKwkJICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKysJCSAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJCSAgICB7CisrCQkgICAgICBjb25zdCBDSEFSX1QgKm5wOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJOworKwkJICAgICAgaWYgKCpucCA9PSAnJCcpCisrCQkJeworKwkJCSAgc2l6ZV90IG4gPSAwOworKworKwkJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKysJCQkgIGlmIChuID09IDApCisrCQkJICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkgICAgLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeQorKwkJCSAgICAgICBsYXRlci4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IG4gLSAxOworKwkJCSAgY3AgPSBucCArIDE7CisrCQkJfQorKwkJICAgIH0KKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIHsKKysJCSAgICAgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKysJCSAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCQkvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisrCQkJZ290byBlcnJvcjsKKysJCSAgICB9CisrCQkgIFJFR0lTVEVSX0FSRyAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBzaXplX3QgcHJlY2lzaW9uX2xlbmd0aDsKKysKKysJCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKysJCSAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKysJCSAgICA7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIHByZWNpc2lvbl9sZW5ndGggPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IHByZWNpc2lvbl9sZW5ndGgpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSBwcmVjaXNpb25fbGVuZ3RoOworKwkJfQorKwkgICAgfQorKworKwkgIHsKKysJICAgIGFyZ190eXBlIHR5cGU7CisrCisrCSAgICAvKiBQYXJzZSBhcmd1bWVudCB0eXBlL3NpemUgc3BlY2lmaWVycy4gICovCisrCSAgICB7CisrCSAgICAgIGludCBmbGFncyA9IDA7CisrCisrCSAgICAgIGZvciAoOzspCisrCQl7CisrCQkgIGlmICgqY3AgPT0gJ2gnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9ICgxIDw8IChmbGFncyAmIDEpKTsKKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ0wnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9IDQ7CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoKmNwID09ICdsJykKKysJCSAgICB7CisrCQkgICAgICBmbGFncyArPSA4OworKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2lmZGVmIEhBVkVfSU5UTUFYX1QKKysJCSAgZWxzZSBpZiAoKmNwID09ICdqJykKKysJCSAgICB7CisrCQkgICAgICBpZiAoc2l6ZW9mIChpbnRtYXhfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIGludG1heF90ID0gbG9uZyBsb25nICovCisrCQkJICBmbGFncyArPSAxNjsKKysJCQl9CisrCQkgICAgICBlbHNlIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBpbnRtYXhfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2VuZGlmCisrCQkgIGVsc2UgaWYgKCpjcCA9PSAneicgfHwgKmNwID09ICdaJykKKysJCSAgICB7CisrCQkgICAgICAvKiAneicgaXMgc3RhbmRhcmRpemVkIGluIElTTyBDIDk5LCBidXQgZ2xpYmMgdXNlcyAnWicKKysJCQkgYmVjYXVzZSB0aGUgd2FybmluZyBmYWNpbGl0eSBpbiBnY2MtMi45NS4yIHVuZGVyc3RhbmRzCisrCQkJIG9ubHkgJ1onIChzZWUgZ2NjLTIuOTUuMi9nY2MvYy1jb21tb24uYzoxNzg0KS4gICovCisrCQkgICAgICBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChsb25nKSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nIGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDE2OworKwkJCX0KKysJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nICovCisrCQkJICBmbGFncyArPSA4OworKwkJCX0KKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ3QnKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gMTY7CisrCQkJfQorKwkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChwdHJkaWZmX3QpID4gc2l6ZW9mIChpbnQpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICBicmVhazsKKysJCX0KKysKKysJICAgICAgLyogUmVhZCB0aGUgY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworKwkgICAgICBjID0gKmNwKys7CisrCSAgICAgIHN3aXRjaCAoYykKKysJCXsKKysJCWNhc2UgJ2QnOiBjYXNlICdpJzoKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKysJCSAgICB0eXBlID0gVFlQRV9TQ0hBUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorKwkJICAgIHR5cGUgPSBUWVBFX1NIT1JUOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ28nOiBjYXNlICd1JzogY2FzZSAneCc6IGNhc2UgJ1gnOgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfVUxPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworKwkJICBlbHNlIGlmIChmbGFncyAmIDIpCisrCQkgICAgdHlwZSA9IFRZUEVfVUNIQVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9VU0hPUlQ7CisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9VSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ2YnOiBjYXNlICdGJzogY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQljYXNlICdhJzogY2FzZSAnQSc6CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdET1VCTEU7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgdHlwZSA9IFRZUEVfRE9VQkxFOworKwkJICBicmVhazsKKysJCWNhc2UgJ2MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCSAgICB0eXBlID0gVFlQRV9XSURFX0NIQVI7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ0hBUjsKKysJCSAgYnJlYWs7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQljYXNlICdDJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworKwkJICBjID0gJ2MnOworKwkJICBicmVhazsKKysjZW5kaWYKKysJCWNhc2UgJ3MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgICAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfU1RSSU5HOworKwkJICBicmVhazsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQljYXNlICdTJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrCQkgIGMgPSAncyc7CisrCQkgIGJyZWFrOworKyNlbmRpZgorKwkJY2FzZSAncCc6CisrCQkgIHR5cGUgPSBUWVBFX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnbic6CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfSU5UX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnJSc6CisrCQkgIHR5cGUgPSBUWVBFX05PTkU7CisrCQkgIGJyZWFrOworKwkJZGVmYXVsdDoKKysJCSAgLyogVW5rbm93biBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCisrCQkgIGdvdG8gZXJyb3I7CisrCQl9CisrCSAgICB9CisrCisrCSAgICBpZiAodHlwZSAhPSBUWVBFX05PTkUpCisrCSAgICAgIHsKKysJCWRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CisrCQlpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgeworKwkJICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworKwkJICAgIGlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworKwkJICAgICAgZ290byBlcnJvcjsKKysJCSAgfQorKwkJUkVHSVNURVJfQVJHIChkcC0+YXJnX2luZGV4LCB0eXBlKTsKKysJICAgICAgfQorKwkgICAgZHAtPmNvbnZlcnNpb24gPSBjOworKwkgICAgZHAtPmRpcl9lbmQgPSBjcDsKKysJICB9CisrCisrCSAgZC0+Y291bnQrKzsKKysJICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtZW1vcnlfc2l6ZTsKKysJICAgICAgRElSRUNUSVZFICptZW1vcnk7CisrCisrCSAgICAgIGRfYWxsb2NhdGVkID0geHRpbWVzIChkX2FsbG9jYXRlZCwgMik7CisrCSAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKysJICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQorKwkJLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBtZW1vcnkgPSByZWFsbG9jIChkLT5kaXIsIG1lbW9yeV9zaXplKTsKKysJICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKQorKwkJLyogT3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBkLT5kaXIgPSBtZW1vcnk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKKysKKysgIGQtPm1heF93aWR0aF9sZW5ndGggPSBtYXhfd2lkdGhfbGVuZ3RoOworKyAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKysgIHJldHVybiAwOworKworK2Vycm9yOgorKyAgaWYgKGEtPmFyZykKKysgICAgZnJlZSAoYS0+YXJnKTsKKysgIGlmIChkLT5kaXIpCisrICAgIGZyZWUgKGQtPmRpcik7CisrICByZXR1cm4gLTE7CisrfQorKworKyN1bmRlZiBESVJFQ1RJVkVTCisrI3VuZGVmIERJUkVDVElWRQorKyN1bmRlZiBDSEFSX1QKKysjdW5kZWYgUFJJTlRGX1BBUlNFCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLXBhcnNlLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42Mjg3MDY1OTIgLTA0MDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKysjZGVmaW5lIF9QUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyKiBkaXJfc3RhcnQ7CisrICBjb25zdCBjaGFyKiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3QgY2hhciogd2lkdGhfc3RhcnQ7CisrICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgY2hhciBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK2NoYXJfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgY2hhcl9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKytjaGFyX2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfUEFSU0VfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlZi1hZGQuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlZi1hZGQuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjMzNzA1ODMyIC0wNDAwCitAQCAtMCwwICsxLDMxIEBACisrIyBBZGQgdGhpcyBwYWNrYWdlIHRvIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICB0YQorKyAgOmEKKysgIHMvIEBQQUNLQUdFQCAvIEBQQUNLQUdFQCAvCisrICB0YgorKyAgcy8gJC8gQFBBQ0tBR0VAIC8KKysgIDpiCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWYtZGVsLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWYtZGVsLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjYzODcwNTA3MiAtMDQwMAorQEAgLTAsMCArMSwyNiBAQAorKyMgUmVtb3ZlIHRoaXMgcGFja2FnZSBmcm9tIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICBzLyBAUEFDS0FHRUAgLyAvCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWxvY2F0YWJsZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlbG9jYXRhYmxlLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NDQ3MDQxNjAgLTA0MDAKK0BAIC0wLDAgKzEsNDQ5IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgZ2V0bGluZSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysKKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2lmZGVmIE5PX1hNQUxMT0MKKysjIGRlZmluZSB4bWFsbG9jIG1hbGxvYworKyNlbHNlCisrIyBpbmNsdWRlICJ4YWxsb2MuaCIKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisrIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisrI2VuZGlmCisrCisrI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorKyMgaW5jbHVkZSA8bGliY2hhcnNldC5oPgorKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklDT05WICYmIEhBVkVfSUNPTlYKKysjIGluY2x1ZGUgPGljb252Lmg+CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2VuZGlmCisrCisrLyogRmFrZWQgY2hlYXAgJ2Jvb2wnLiAgKi8KKysjdW5kZWYgYm9vbAorKyN1bmRlZiBmYWxzZQorKyN1bmRlZiB0cnVlCisrI2RlZmluZSBib29sIGludAorKyNkZWZpbmUgZmFsc2UgMAorKyNkZWZpbmUgdHJ1ZSAxCisrCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKKysgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKysjIGRlZmluZSBGSUxFU1lTVEVNX1BSRUZJWF9MRU4oUCkgKEhBU19ERVZJQ0UgKFApID8gMiA6IDApCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMKQorKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAwCisrI2VuZGlmCisrCisrLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKm9yaWdfcHJlZml4OworK3N0YXRpYyBzaXplX3Qgb3JpZ19wcmVmaXhfbGVuOworKy8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKmN1cnJfcHJlZml4OworK3N0YXRpYyBzaXplX3QgY3Vycl9wcmVmaXhfbGVuOworKy8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKysgICB0byB0aGVtIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrc3RhdGljIHZvaWQKKytzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorKwkJCSAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCisrICAgICAgLyogT3B0aW1pemF0aW9uOiBpZiBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggYXJlIGVxdWFsLCB0aGUKKysJIHJlbG9jYXRpb24gaXMgYSBub3AuICAqLworKyAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCisrICAgIHsKKysgICAgICAvKiBEdXBsaWNhdGUgdGhlIGFyZ3VtZW50IHN0cmluZ3MuICAqLworKyAgICAgIGNoYXIgKm1lbW9yeTsKKysKKysgICAgICBvcmlnX3ByZWZpeF9sZW4gPSBzdHJsZW4gKG9yaWdfcHJlZml4X2FyZyk7CisrICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworKyAgICAgIG1lbW9yeSA9IChjaGFyICopIHhtYWxsb2MgKG9yaWdfcHJlZml4X2xlbiArIDEgKyBjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKysjaWZkZWYgTk9fWE1BTExPQworKyAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKysjZW5kaWYKKysJeworKwkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworKwkgIG9yaWdfcHJlZml4ID0gbWVtb3J5OworKwkgIG1lbW9yeSArPSBvcmlnX3ByZWZpeF9sZW4gKyAxOworKwkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworKwkgIGN1cnJfcHJlZml4ID0gbWVtb3J5OworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrICBvcmlnX3ByZWZpeCA9IE5VTEw7CisrICBjdXJyX3ByZWZpeCA9IE5VTEw7CisrICAvKiBEb24ndCB3b3JyeSBhYm91dCB3YXN0ZWQgbWVtb3J5IGhlcmUgLSB0aGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgb25seQorKyAgICAgY2FsbGVkIG9uY2UuICAqLworK30KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrdm9pZAorK3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLCBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgc2V0X3RoaXNfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysKKysgIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworKyNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKysgIGxpYmNoYXJzZXRfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OViAmJiBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDkKKysgIGxpYmljb252X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUyAmJiBkZWZpbmVkIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4CisrICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorK30KKysKKysjaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKysjaWZkZWYgSU5fTElCUkFSWQorKyNkZWZpbmUgY29tcHV0ZV9jdXJyX3ByZWZpeCBsb2NhbF9jb21wdXRlX2N1cnJfcHJlZml4Cisrc3RhdGljCisrI2VuZGlmCisrY29uc3QgY2hhciAqCisrY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorKwkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkgICAgIGNvbnN0IGNoYXIgKmN1cnJfcGF0aG5hbWUpCisreworKyAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworKyAgY29uc3QgY2hhciAqcmVsX2luc3RhbGxkaXI7CisrCisrICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKysgICAgIFRoaXMgaXMgc2ltcGx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ19pbnN0YWxscHJlZml4IGFuZAorKyAgICAgb3JpZ19pbnN0YWxsZGlyLiAgKi8KKysgIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorKyAgICAgICE9IDApCisrICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gLSBub3RoaW5nIHNob3VsZCBiZSBpbnN0YWxsZWQgb3V0c2lkZSAkKHByZWZpeCkuICAqLworKyAgICByZXR1cm4gTlVMTDsKKysgIHJlbF9pbnN0YWxsZGlyID0gb3JpZ19pbnN0YWxsZGlyICsgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpOworKworKyAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworKyAgeworKyAgICBjb25zdCBjaGFyICpwX2Jhc2UgPSBjdXJyX3BhdGhuYW1lICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX3BhdGhuYW1lKTsKKysgICAgY29uc3QgY2hhciAqcCA9IGN1cnJfcGF0aG5hbWUgKyBzdHJsZW4gKGN1cnJfcGF0aG5hbWUpOworKyAgICBjaGFyICpxOworKworKyAgICB3aGlsZSAocCA+IHBfYmFzZSkKKysgICAgICB7CisrCXAtLTsKKysJaWYgKElTU0xBU0ggKCpwKSkKKysJICBicmVhazsKKysgICAgICB9CisrCisrICAgIHEgPSAoY2hhciAqKSB4bWFsbG9jIChwIC0gY3Vycl9wYXRobmFtZSArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgIGlmIChxID09IE5VTEwpCisrICAgICAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisrICAgIG1lbWNweSAocSwgY3Vycl9wYXRobmFtZSwgcCAtIGN1cnJfcGF0aG5hbWUpOworKyAgICBxW3AgLSBjdXJyX3BhdGhuYW1lXSA9ICdcMCc7CisrICAgIGN1cnJfaW5zdGFsbGRpciA9IHE7CisrICB9CisrCisrICAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggYnkgcmVtb3ZpbmcgdGhlIHRyYWlsaW5nCisrICAgICByZWxfaW5zdGFsbGRpciBmcm9tIGl0LiAgKi8KKysgIHsKKysgICAgY29uc3QgY2hhciAqcnAgPSByZWxfaW5zdGFsbGRpciArIHN0cmxlbiAocmVsX2luc3RhbGxkaXIpOworKyAgICBjb25zdCBjaGFyICpjcCA9IGN1cnJfaW5zdGFsbGRpciArIHN0cmxlbiAoY3Vycl9pbnN0YWxsZGlyKTsKKysgICAgY29uc3QgY2hhciAqY3BfYmFzZSA9CisrICAgICAgY3Vycl9pbnN0YWxsZGlyICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX2luc3RhbGxkaXIpOworKworKyAgICB3aGlsZSAocnAgPiByZWxfaW5zdGFsbGRpciAmJiBjcCA+IGNwX2Jhc2UpCisrICAgICAgeworKwlib29sIHNhbWUgPSBmYWxzZTsKKysJY29uc3QgY2hhciAqcnBpID0gcnA7CisrCWNvbnN0IGNoYXIgKmNwaSA9IGNwOworKworKwl3aGlsZSAocnBpID4gcmVsX2luc3RhbGxkaXIgJiYgY3BpID4gY3BfYmFzZSkKKysJICB7CisrCSAgICBycGktLTsKKysJICAgIGNwaS0tOworKwkgICAgaWYgKElTU0xBU0ggKCpycGkpIHx8IElTU0xBU0ggKCpjcGkpKQorKwkgICAgICB7CisrCQlpZiAoSVNTTEFTSCAoKnJwaSkgJiYgSVNTTEFTSCAoKmNwaSkpCisrCQkgIHNhbWUgPSB0cnVlOworKwkJYnJlYWs7CisrCSAgICAgIH0KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrCSAgICAvKiBXaW4zMiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKysJICAgIGlmICgoKnJwaSA+PSAnYScgJiYgKnJwaSA8PSAneicgPyAqcnBpIC0gJ2EnICsgJ0EnIDogKnJwaSkKKysJCSE9ICgqY3BpID49ICdhJyAmJiAqY3BpIDw9ICd6JyA/ICpjcGkgLSAnYScgKyAnQScgOiAqY3BpKSkKKysJICAgICAgYnJlYWs7CisrI2Vsc2UKKysJICAgIGlmICgqcnBpICE9ICpjcGkpCisrCSAgICAgIGJyZWFrOworKyNlbmRpZgorKwkgIH0KKysJaWYgKCFzYW1lKQorKwkgIGJyZWFrOworKwkvKiBUaGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgd2FzIHRoZSBzYW1lLiAgb3BpIGFuZCBjcGkgbm93IHBvaW50CisrCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworKwlycCA9IHJwaTsKKysJY3AgPSBjcGk7CisrICAgICAgfQorKworKyAgICBpZiAocnAgPiByZWxfaW5zdGFsbGRpcikKKysgICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKysgICAgICByZXR1cm4gTlVMTDsKKysKKysgICAgeworKyAgICAgIHNpemVfdCBjdXJyX3ByZWZpeF9sZW4gPSBjcCAtIGN1cnJfaW5zdGFsbGRpcjsKKysgICAgICBjaGFyICpjdXJyX3ByZWZpeDsKKysKKysgICAgICBjdXJyX3ByZWZpeCA9IChjaGFyICopIHhtYWxsb2MgKGN1cnJfcHJlZml4X2xlbiArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbmRpZgorKyAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKysgICAgICBjdXJyX3ByZWZpeFtjdXJyX3ByZWZpeF9sZW5dID0gJ1wwJzsKKysKKysgICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgIH0KKysgIH0KKyt9CisrCisrI2VuZGlmIC8qICFJTl9MSUJSQVJZIHx8IFBJQyAqLworKworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysKKysvKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KKytzdGF0aWMgY2hhciAqc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrCisrLyogRGV0ZXJtaW5lIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3aGVuIGl0IGlzIGxvYWRlZC4gICovCisrCisrQk9PTCBXSU5BUEkKKytEbGxNYWluIChISU5TVEFOQ0UgbW9kdWxlX2hhbmRsZSwgRFdPUkQgZXZlbnQsIExQVk9JRCByZXNlcnZlZCkKKyt7CisrICAodm9pZCkgcmVzZXJ2ZWQ7CisrCisrICBpZiAoZXZlbnQgPT0gRExMX1BST0NFU1NfQVRUQUNIKQorKyAgICB7CisrICAgICAgLyogVGhlIERMTCBpcyBiZWluZyBsb2FkZWQgaW50byBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3MgcmFuZ2UuICAqLworKyAgICAgIHN0YXRpYyBjaGFyIGxvY2F0aW9uW01BWF9QQVRIXTsKKysKKysgICAgICBpZiAoIUdldE1vZHVsZUZpbGVOYW1lIChtb2R1bGVfaGFuZGxlLCBsb2NhdGlvbiwgc2l6ZW9mIChsb2NhdGlvbikpKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIGlmICghSVNfUEFUSF9XSVRIX0RJUiAobG9jYXRpb24pKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gc3RyZHVwIChsb2NhdGlvbik7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysjZWxzZSAvKiBVbml4ICovCisrCisrc3RhdGljIHZvaWQKKytmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpCisreworKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiBfX0dMSUJDX18gPj0gMgorKyAgLyogTGludXggaGFzIC9wcm9jL3NlbGYvbWFwcy4gZ2xpYmMgMiBoYXMgdGhlIGdldGxpbmUoKSBmdW5jdGlvbi4gICovCisrICBGSUxFICpmcDsKKysKKysgIC8qIE9wZW4gdGhlIGN1cnJlbnQgcHJvY2VzcycgbWFwcyBmaWxlLiAgSXQgZGVzY3JpYmVzIG9uZSBWTUEgcGVyIGxpbmUuICAqLworKyAgZnAgPSBmb3BlbiAoIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7CisrICBpZiAoZnApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJmZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrICAgICAgZm9yICg7OykKKysJeworKwkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKysJICBpbnQgYzsKKysKKysJICBpZiAoZnNjYW5mIChmcCwgIiVseC0lbHgiLCAmc3RhcnQsICZlbmQpICE9IDIpCisrCSAgICBicmVhazsKKysJICBpZiAoYWRkcmVzcyA+PSBzdGFydCAmJiBhZGRyZXNzIDw9IGVuZCAtIDEpCisrCSAgICB7CisrCSAgICAgIC8qIEZvdW5kIGl0LiAgTm93IHNlZSBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSBmaWxlbmFtZS4gICovCisrCSAgICAgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicgJiYgYyAhPSAnLycpCisrCQljb250aW51ZTsKKysJICAgICAgaWYgKGMgPT0gJy8nKQorKwkJeworKwkJICBzaXplX3Qgc2l6ZTsKKysJCSAgaW50IGxlbjsKKysKKysJCSAgdW5nZXRjIChjLCBmcCk7CisrCQkgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gTlVMTDsgc2l6ZSA9IDA7CisrCQkgIGxlbiA9IGdldGxpbmUgKCZzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSwgJnNpemUsIGZwKTsKKysJCSAgaWYgKGxlbiA+PSAwKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFN1Y2Nlc3M6IGZpbGxlZCBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZS4gICovCisrCQkgICAgICBpZiAobGVuID4gMCAmJiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZVtsZW4gLSAxXSA9PSAnXG4nKQorKwkJCXNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicpCisrCSAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGZjbG9zZSAoZnApOworKyAgICB9CisrI2VuZGlmCisrfQorKworKyNlbmRpZiAvKiBXSU4zMiAvIFVuaXggKi8KKysKKysvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCisrICAgUmV0dXJuIE5VTEwgaWYgdW5rbm93bi4KKysgICBHdWFyYW50ZWVkIHRvIHdvcmsgb25seSBvbiBMaW51eCBhbmQgV29lMzIuICAqLworK3N0YXRpYyBjaGFyICoKKytnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKKyt7CisrI2lmICEoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pCisrICBzdGF0aWMgYm9vbCB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworKyAgaWYgKCF0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lKQorKyAgICB7CisrICAgICAgZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKTsKKysgICAgICB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gdHJ1ZTsKKysgICAgfQorKyNlbmRpZgorKyAgcmV0dXJuIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworK30KKysKKysjZW5kaWYgLyogUElDICovCisrCisrLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCisrICAgZGlyZWN0b3J5LiAgKi8KKytjb25zdCBjaGFyICoKKytyZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpCisreworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisrCisrICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKysgIGlmICghaW5pdGlhbGl6ZWQpCisrICAgIHsKKysgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCisrCSBzZXQgdGhyb3VnaCB0aGUgbWFpbiBwcm9ncmFtJ3Mgc2V0X3Byb2dyYW1fbmFtZV9hbmRfaW5zdGFsbGRpcgorKwkgZnVuY3Rpb24uICBUaGlzIGlzIHN1ZmZpY2llbnQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgbGlicmFyeSBoYXMKKysJIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKysJIGJldHRlciwgdG8gYWxzbyBjb3ZlciB0aGUgY2FzZXMgdGhhdCAxLiBpdCBoYXMgYmVlbiBpbnN0YWxsZWQKKysJIGluIGEgZGlmZmVyZW50IHByZWZpeCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gb3JpZ19wcmVmaXggYW5kIChsYXRlcikKKysJIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCisrCSBvcmlnX3ByZWZpeC4gICovCisrICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4ID0gSU5TVEFMTFBSRUZJWDsKKysgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworKyAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2JldHRlcjsKKysKKysgICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorKwljb21wdXRlX2N1cnJfcHJlZml4IChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwKKysJCQkgICAgIGdldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKSk7CisrICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorKwljdXJyX3ByZWZpeF9iZXR0ZXIgPSBjdXJyX3ByZWZpeDsKKysKKysgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKysKKysgICAgICBpbml0aWFsaXplZCA9IDE7CisrICAgIH0KKysjZW5kaWYKKysKKysgIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKysgICAgIGV2ZW4gZm9yIERPUy1saWtlIGZpbGVzeXN0ZW1zLCBiZWNhdXNlIHRoZSBwYXRobmFtZSBhcmd1bWVudCB3YXMKKysgICAgIHR5cGljYWxseSBjcmVhdGVkIGZyb20gdGhlIHNhbWUgTWFrZWZpbGUgdmFyaWFibGUgYXMgb3JpZ19wcmVmaXggY2FtZQorKyAgICAgZnJvbS4gICovCisrICBpZiAob3JpZ19wcmVmaXggIT0gTlVMTCAmJiBjdXJyX3ByZWZpeCAhPSBOVUxMCisrICAgICAgJiYgc3RybmNtcCAocGF0aG5hbWUsIG9yaWdfcHJlZml4LCBvcmlnX3ByZWZpeF9sZW4pID09IDApCisrICAgIHsKKysgICAgICBpZiAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSA9PSAnXDAnKQorKwkvKiBwYXRobmFtZSBlcXVhbHMgb3JpZ19wcmVmaXguICAqLworKwlyZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgICAgaWYgKElTU0xBU0ggKHBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl0pKQorKwl7CisrCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworKwkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lX3RhaWwgPSAmcGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXTsKKysJICBjaGFyICpyZXN1bHQgPQorKwkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworKworKyNpZmRlZiBOT19YTUFMTE9DCisrCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKyNlbmRpZgorKwkgICAgeworKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CisrCSAgICAgIHN0cmNweSAocmVzdWx0ICsgY3Vycl9wcmVmaXhfbGVuLCBwYXRobmFtZV90YWlsKTsKKysJICAgICAgcmV0dXJuIHJlc3VsdDsKKysJICAgIH0KKysJfQorKyAgICB9CisrICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKysgIHJldHVybiBwYXRobmFtZTsKKyt9CisrCisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVsb2NhdGFibGUuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWxvY2F0YWJsZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjUxNzAzMDk2IC0wNDAwCitAQCAtMCwwICsxLDc3IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKysjZGVmaW5lIF9SRUxPQ0FUQUJMRV9ICisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrCisrLyogVGhpcyBjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmUgLS1lbmFibGUtcmVsb2NhdGFibGUgb3B0aW9uLiAgKi8KKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorKyAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorKyAgIGluIGFueSBjYXNlLiAgKi8KKysjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBCVUlMRElOR19ETEwKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisrI2Vsc2UKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQKKysjZW5kaWYKKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrZXh0ZXJuIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCB2b2lkCisrICAgICAgIHNldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisrCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKy8qIFJldHVybnMgdGhlIHBhdGhuYW1lLCByZWxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbgorKyAgIGRpcmVjdG9yeS4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiByZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpOworKworKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiByZWxvY2F0ZSgpIGxlYWtzIG1lbW9yeSwgYmVjYXVzZSBpdCBoYXMgdG8gY29uc3RydWN0CisrICAgYSBmcmVzaCBwYXRobmFtZS4gIElmIHRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgeW91ciBwcm9ncmFtIGNhbGxzCisrICAgcmVsb2NhdGUoKSBmcmVxdWVudGx5LCB0aGluayBhYm91dCBjYWNoaW5nIHRoZSByZXN1bHQuICAqLworKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqIGNvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKysJCQkJCSBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkJCQkgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSk7CisrCisrI2Vsc2UKKysKKysvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgdGhlIGhhcmR3aXJlZCBwYXRobmFtZXMuICAqLworKyNkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKysKKysjZW5kaWYKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9SRUxPQ0FUQUJMRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdGV4dGRvbWFpbi5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3RleHRkb21haW4uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjY1NjcwMjMzNiAtMDQwMAorQEAgLTEsNTEgKzEsNjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKysjIGRlZmluZSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4KKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogTmFtZSBvZiB0aGUgZGVmYXVsdCB0ZXh0IGRvbWFpbi4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXTsKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogRGVmYXVsdCB0ZXh0IGRvbWFpbiBpbiB3aGljaCBlbnRyaWVzIGZvciBnZXR0ZXh0KDMpIGFyZSB0byBiZSBmb3VuZC4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuOworIAorIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKK0BAIC01NCw1MCArNjMsNzYgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIFRFWFRET01BSU4gX190ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGlmbmRlZiBzdHJkdXAKKysjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGVuZGlmCisgI2Vsc2UKKy0jIGRlZmluZSBURVhURE9NQUlOIHRleHRkb21haW5fXworKyMgZGVmaW5lIFRFWFRET01BSU4gbGliaW50bF90ZXh0ZG9tYWluCisgI2VuZGlmCisgCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysKKyAvKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKyAgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworIGNoYXIgKgorLVRFWFRET01BSU4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK1RFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisgeworLSAgY2hhciAqb2xkOworKyAgY2hhciAqbmV3X2RvbWFpbjsKKysgIGNoYXIgKm9sZF9kb21haW47CisgCisgICAvKiBBIE5VTEwgcG9pbnRlciByZXF1ZXN0cyB0aGUgY3VycmVudCBzZXR0aW5nLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKy0gIG9sZCA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIG9sZF9kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKyAgIC8qIElmIGRvbWFpbiBuYW1lIGlzIHRoZSBudWxsIHN0cmluZyBzZXQgdG8gZGVmYXVsdCBkb21haW4gIm1lc3NhZ2VzIi4gICovCisgICBpZiAoZG9tYWlubmFtZVswXSA9PSAnXDAnCisgICAgICAgfHwgc3RyY21wIChkb21haW5uYW1lLCBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikgPT0gMCkKKy0gICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKysgICAgeworKyAgICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CisrICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgICB9CisrICBlbHNlIGlmIChzdHJjbXAgKGRvbWFpbm5hbWUsIG9sZF9kb21haW4pID09IDApCisrICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBhbmQgcGVvcGxlIHdpbGwgdXNlIGl0IHRvIHNpZ25hbCB0aGF0IHNvbWUKKysgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlZC4gICovCisrICAgIG5ld19kb21haW4gPSBvbGRfZG9tYWluOworICAgZWxzZQorICAgICB7CisgICAgICAgLyogSWYgdGhlIGZvbGxvd2luZyBtYWxsb2MgZmFpbHMgYF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluJworIAkgd2lsbCBiZSBOVUxMLiAgVGhpcyB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIGFuZCBzbyBzaWduYWxzIHdlCisgCSBhcmUgb3V0IG9mIGNvcmUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0gICAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisrICAgICAgbmV3X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisgI2Vsc2UKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgY2hhciAqY3AgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKGNwICE9IE5VTEwpCistCW1lbWNweSAoY3AsIGRvbWFpbm5hbWUsIGxlbik7CistICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBjcDsKKysgICAgICBuZXdfZG9tYWluID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisrCW1lbWNweSAobmV3X2RvbWFpbiwgZG9tYWlubmFtZSwgbGVuKTsKKyAjZW5kaWYKKysKKysgICAgICBpZiAobmV3X2RvbWFpbiAhPSBOVUxMKQorKwlfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IG5ld19kb21haW47CisgICAgIH0KKyAKKy0gIGlmIChvbGQgIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCistICAgIGZyZWUgKG9sZCk7CisrICAvKiBXZSB1c2UgdGhpcyBwb3NzaWJpbGl0eSB0byBzaWduYWwgYSBjaGFuZ2Ugb2YgdGhlIGxvYWRlZCBjYXRhbG9ncworKyAgICAgc2luY2UgdGhpcyBpcyBtb3N0IGxpa2VseSB0aGUgY2FzZSBhbmQgdGhlcmUgaXMgbm8gb3RoZXIgZWFzeSB3ZQorKyAgICAgdG8gZG8gaXQuICBEbyBpdCBvbmx5IHdoZW4gdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworKyAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKysgICAgeworKyAgICAgICsrX25sX21zZ19jYXRfY250cjsKKyAKKy0gIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysgICAgICBpZiAob2xkX2RvbWFpbiAhPSBuZXdfZG9tYWluICYmIG9sZF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrCWZyZWUgKG9sZF9kb21haW4pOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgcmV0dXJuIG5ld19kb21haW47CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3Zhc25wcmludGYuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC92YXNucHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NjI3MDE0MjQgLTA0MDAKK0BAIC0wLDAgKzEsODg3IEBACisrLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc25wcmludGYoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrI2lmbmRlZiBJTl9MSUJJTlRMCisrIyBpbmNsdWRlIDxhbGxvY2EuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGluY2x1ZGUgInZhc253cHJpbnRmLmgiCisrI2Vsc2UKKysjIGluY2x1ZGUgInZhc25wcmludGYuaCIKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4JLyogc25wcmludGYoKSwgc3ByaW50ZigpICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgkvKiBhYm9ydCgpLCBtYWxsb2MoKSwgcmVhbGxvYygpLCBmcmVlKCkgKi8KKysjaW5jbHVkZSA8c3RyaW5nLmg+CS8qIG1lbWNweSgpLCBzdHJsZW4oKSAqLworKyNpbmNsdWRlIDxlcnJuby5oPgkvKiBlcnJubyAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4JLyogQ0hBUl9CSVQgKi8KKysjaW5jbHVkZSA8ZmxvYXQuaD4JLyogREJMX01BWF9FWFAsIExEQkxfTUFYX0VYUCAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworKyNpbmNsdWRlICJ4c2l6ZS5oIgorKworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGlmZGVmIEhBVkVfV0NTTEVOCisrIyAgZGVmaW5lIGxvY2FsX3djc2xlbiB3Y3NsZW4KKysjIGVsc2UKKysgICAvKiBTb2xhcmlzIDIuNS4xIGhhcyB3Y3NsZW4oKSBpbiBhIHNlcGFyYXRlIGxpYnJhcnkgbGlidy5zby4gVG8gYXZvaWQKKysgICAgICBhIGRlcGVuZGVuY3kgdG93YXJkcyB0aGlzIGxpYnJhcnksIGhlcmUgaXMgYSBsb2NhbCBzdWJzdGl0dXRlLgorKyAgICAgIERlZmluZSB0aGlzIHN1YnN0aXR1dGUgb25seSBvbmNlLCBldmVuIGlmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorKyAgICAgIHR3aWNlIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuICAqLworKyMgIGlmbmRlZiBsb2NhbF93Y3NsZW5fZGVmaW5lZAorKyMgICBkZWZpbmUgbG9jYWxfd2NzbGVuX2RlZmluZWQgMQorK3N0YXRpYyBzaXplX3QKKytsb2NhbF93Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKnMpCisreworKyAgY29uc3Qgd2NoYXJfdCAqcHRyOworKworKyAgZm9yIChwdHIgPSBzOyAqcHRyICE9ICh3Y2hhcl90KSAwOyBwdHIrKykKKysgICAgOworKyAgcmV0dXJuIHB0ciAtIHM7CisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbndwcmludGYKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBVU0VfU05QUklOVEYgMQorKyMgaWYgSEFWRV9ERUNMX19TTldQUklOVEYKKysgICAvKiBPbiBXaW5kb3dzLCB0aGUgZnVuY3Rpb24gc3dwcmludGYoKSBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlIHRoYW4KKysgICAgICBvbiBVbml4OyB3ZSB1c2UgdGhlIF9zbndwcmludGYoKSBmdW5jdGlvbiBpbnN0ZWFkLiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgX3Nud3ByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzd3ByaW50ZgorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbnByaW50ZgorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgVVNFX1NOUFJJTlRGIChIQVZFX0RFQ0xfX1NOUFJJTlRGIHx8IEhBVkVfU05QUklOVEYpCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIF9zbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzbnByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKytDSEFSX1QgKgorK1ZBU05QUklOVEYgKENIQVJfVCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgRElSRUNUSVZFUyBkOworKyAgYXJndW1lbnRzIGE7CisrCisrICBpZiAoUFJJTlRGX1BBUlNFIChmb3JtYXQsICZkLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgZXJybm8gPSBFSU5WQUw7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysjZGVmaW5lIENMRUFOVVAoKSBcCisrICBmcmVlIChkLmRpcik7CQkJCQkJCQlcCisrICBpZiAoYS5hcmcpCQkJCQkJCQlcCisrICAgIGZyZWUgKGEuYXJnKTsKKysKKysgIGlmIChwcmludGZfZmV0Y2hhcmdzIChhcmdzLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgQ0xFQU5VUCAoKTsKKysgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgeworKyAgICBzaXplX3QgYnVmX25lZWRlZGxlbmd0aDsKKysgICAgQ0hBUl9UICpidWY7CisrICAgIENIQVJfVCAqYnVmX21hbGxvY2VkOworKyAgICBjb25zdCBDSEFSX1QgKmNwOworKyAgICBzaXplX3QgaTsKKysgICAgRElSRUNUSVZFICpkcDsKKysgICAgLyogT3V0cHV0IHN0cmluZyBhY2N1bXVsYXRvci4gICovCisrICAgIENIQVJfVCAqcmVzdWx0OworKyAgICBzaXplX3QgYWxsb2NhdGVkOworKyAgICBzaXplX3QgbGVuZ3RoOworKworKyAgICAvKiBBbGxvY2F0ZSBhIHNtYWxsIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCBhIGRpcmVjdGl2ZSBwYXNzZWQgdG8KKysgICAgICAgc3ByaW50ZiBvciBzbnByaW50Zi4gICovCisrICAgIGJ1Zl9uZWVkZWRsZW5ndGggPQorKyAgICAgIHhzdW00ICg3LCBkLm1heF93aWR0aF9sZW5ndGgsIGQubWF4X3ByZWNpc2lvbl9sZW5ndGgsIDYpOworKyNpZiBIQVZFX0FMTE9DQQorKyAgICBpZiAoYnVmX25lZWRlZGxlbmd0aCA8IDQwMDAgLyBzaXplb2YgKENIQVJfVCkpCisrICAgICAgeworKwlidWYgPSAoQ0hBUl9UICopIGFsbG9jYSAoYnVmX25lZWRlZGxlbmd0aCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCWJ1Zl9tYWxsb2NlZCA9IE5VTEw7CisrICAgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKwlzaXplX3QgYnVmX21lbXNpemUgPSB4dGltZXMgKGJ1Zl9uZWVkZWRsZW5ndGgsIHNpemVvZiAoQ0hBUl9UKSk7CisrCWlmIChzaXplX292ZXJmbG93X3AgKGJ1Zl9tZW1zaXplKSkKKysJICBnb3RvIG91dF9vZl9tZW1vcnlfMTsKKysJYnVmID0gKENIQVJfVCAqKSBtYWxsb2MgKGJ1Zl9tZW1zaXplKTsKKysJaWYgKGJ1ZiA9PSBOVUxMKQorKwkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworKwlidWZfbWFsbG9jZWQgPSBidWY7CisrICAgICAgfQorKworKyAgICBpZiAocmVzdWx0YnVmICE9IE5VTEwpCisrICAgICAgeworKwlyZXN1bHQgPSByZXN1bHRidWY7CisrCWFsbG9jYXRlZCA9ICpsZW5ndGhwOworKyAgICAgIH0KKysgICAgZWxzZQorKyAgICAgIHsKKysJcmVzdWx0ID0gTlVMTDsKKysJYWxsb2NhdGVkID0gMDsKKysgICAgICB9CisrICAgIGxlbmd0aCA9IDA7CisrICAgIC8qIEludmFyaWFudHM6CisrICAgICAgIHJlc3VsdCBpcyBlaXRoZXIgPT0gcmVzdWx0YnVmIG9yID09IE5VTEwgb3IgbWFsbG9jLWFsbG9jYXRlZC4KKysgICAgICAgSWYgbGVuZ3RoID4gMCwgdGhlbiByZXN1bHQgIT0gTlVMTC4gICovCisrCisrICAgIC8qIEVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgPj0gbmVlZGVkLiAgQWJvcnRzIHRocm91Z2ggYSBqdW1wIHRvCisrICAgICAgIG91dF9vZl9tZW1vcnkgaWYgbmVlZGVkIGlzIFNJWkVfTUFYIG9yIG90aGVyd2lzZSB0b28gYmlnLiAgKi8KKysjZGVmaW5lIEVOU1VSRV9BTExPQ0FUSU9OKG5lZWRlZCkgXAorKyAgICBpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkJICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgXAorKwlzaXplX3QgbWVtb3J5X3NpemU7CQkJCQkJICAgICBcCisrCUNIQVJfVCAqbWVtb3J5OwkJCQkJCQkgICAgIFwKKysJCQkJCQkJCQkgICAgIFwKKysJYWxsb2NhdGVkID0gKGFsbG9jYXRlZCA+IDAgPyB4dGltZXMgKGFsbG9jYXRlZCwgMikgOiAxMik7CSAgICAgXAorKwlpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkgICAgIFwKKysJICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQkgICAgIFwKKysJbWVtb3J5X3NpemUgPSB4dGltZXMgKGFsbG9jYXRlZCwgc2l6ZW9mIChDSEFSX1QpKTsJCSAgICAgXAorKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCQkJCSAgICAgXAorKwkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQkgICAgIFwKKysJaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSBtYWxsb2MgKG1lbW9yeV9zaXplKTsJCQkgICAgIFwKKysJZWxzZQkJCQkJCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIG1lbW9yeV9zaXplKTsJCSAgICAgXAorKwlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJICAgICBcCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorKwlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiAmJiBsZW5ndGggPiAwKQkJCQkgICAgIFwKKysJICBtZW1jcHkgKG1lbW9yeSwgcmVzdWx0LCBsZW5ndGggKiBzaXplb2YgKENIQVJfVCkpOwkJICAgICBcCisrCXJlc3VsdCA9IG1lbW9yeTsJCQkJCQkgICAgIFwKKysgICAgICB9CisrCisrICAgIGZvciAoY3AgPSBmb3JtYXQsIGkgPSAwLCBkcCA9ICZkLmRpclswXTsgOyBjcCA9IGRwLT5kaXJfZW5kLCBpKyssIGRwKyspCisrICAgICAgeworKwlpZiAoY3AgIT0gZHAtPmRpcl9zdGFydCkKKysJICB7CisrCSAgICBzaXplX3QgbiA9IGRwLT5kaXJfc3RhcnQgLSBjcDsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoID0geHN1bSAobGVuZ3RoLCBuKTsKKysKKysJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChhdWdtZW50ZWRfbGVuZ3RoKTsKKysJICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCBjcCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworKwkgIH0KKysJaWYgKGkgPT0gZC5jb3VudCkKKysJICBicmVhazsKKysKKysJLyogRXhlY3V0ZSBhIHNpbmdsZSBkaXJlY3RpdmUuICAqLworKwlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJyUnKQorKwkgIHsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoOworKworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKwkgICAgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgMSk7CisrCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoYXVnbWVudGVkX2xlbmd0aCk7CisrCSAgICByZXN1bHRbbGVuZ3RoXSA9ICclJzsKKysJICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCAhPSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKworKwkgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICduJykKKysJICAgICAgeworKwkJc3dpdGNoIChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlKQorKwkJICB7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKwkJICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKyNlbmRpZgorKwkJICBkZWZhdWx0OgorKwkJICAgIGFib3J0ICgpOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJYXJnX3R5cGUgdHlwZSA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGU7CisrCQlDSEFSX1QgKnA7CisrCQl1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworKwkJaW50IHByZWZpeGVzWzJdOworKyNpZiAhVVNFX1NOUFJJTlRGCisrCQlzaXplX3QgdG1wX2xlbmd0aDsKKysJCUNIQVJfVCB0bXBidWZbNzAwXTsKKysJCUNIQVJfVCAqdG1wOworKworKwkJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSBmb3IgY2FsbGluZworKwkJICAgc3ByaW50Zi4gICovCisrCQl7CisrCQkgIHNpemVfdCB3aWR0aDsKKysJCSAgc2l6ZV90IHByZWNpc2lvbjsKKysKKysJCSAgd2lkdGggPSAwOworKwkJICBpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkJeworKwkJCSAgaW50IGFyZzsKKysKKysJCQkgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJCSAgICBhYm9ydCAoKTsKKysJCQkgIGFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICB3aWR0aCA9IChhcmcgPCAwID8gKHVuc2lnbmVkIGludCkgKC1hcmcpIDogYXJnKTsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJeworKwkJCSAgY29uc3QgQ0hBUl9UICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7CisrCisrCQkJICBkbworKwkJCSAgICB3aWR0aCA9IHhzdW0gKHh0aW1lcyAod2lkdGgsIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKysJCQkgIHdoaWxlIChkaWdpdHAgIT0gZHAtPndpZHRoX2VuZCk7CisrCQkJfQorKwkJICAgIH0KKysKKysJCSAgcHJlY2lzaW9uID0gNjsKKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJCXsKKysJCQkgIGludCBhcmc7CisrCisrCQkJICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkJICAgIGFib3J0ICgpOworKwkJCSAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBwcmVjaXNpb24gPSAoYXJnIDwgMCA/IDAgOiBhcmcpOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQl7CisrCQkJICBjb25zdCBDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworKworKwkJCSAgcHJlY2lzaW9uID0gMDsKKysJCQkgIGRvCisrCQkJICAgIHByZWNpc2lvbiA9IHhzdW0gKHh0aW1lcyAocHJlY2lzaW9uLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisrCQkJICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKTsKKysJCQl9CisrCQkgICAgfQorKworKwkJICBzd2l0Y2ggKGRwLT5jb252ZXJzaW9uKQorKwkJICAgIHsKKysKKysJCSAgICBjYXNlICdkJzogY2FzZSAnaSc6IGNhc2UgJ3UnOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ28nOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3gnOiBjYXNlICdYJzoKKysjIGlmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworKwkJICAgICAgZWxzZQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisrCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdmJzogY2FzZSAnRic6CisrIyBpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoTERCTF9NQVhfRVhQCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChEQkxfTUFYX0VYUAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDEwOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQkgICAgY2FzZSAnYSc6IGNhc2UgJ0EnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJMTI7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQsIGV4cG9uZW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnYyc6CisrIyBpZiBkZWZpbmVkIEhBVkVfV0lOVF9UICYmICFXSURFX0NIQVJfVkVSU0lPTgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX0NIQVIpCisrCQkJdG1wX2xlbmd0aCA9IE1CX0NVUl9NQVg7CisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJCXRtcF9sZW5ndGggPSAxOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAncyc6CisrIyBpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9TVFJJTkcpCisrCQkJeworKwkJCSAgdG1wX2xlbmd0aCA9CisrCQkJICAgIGxvY2FsX3djc2xlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nKTsKKysKKysjICBpZiAhV0lERV9DSEFSX1ZFUlNJT04KKysJCQkgIHRtcF9sZW5ndGggPSB4dGltZXMgKHRtcF9sZW5ndGgsIE1CX0NVUl9NQVgpOworKyMgIGVuZGlmCisrCQkJfQorKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0gc3RybGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nKTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3AnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJKHVuc2lnbmVkIGludCkgKHNpemVvZiAodm9pZCAqKSAqIENIQVJfQklUCisrCQkJCQkqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCSAgICAgICApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyAweCAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgZGVmYXVsdDoKKysJCSAgICAgIGFib3J0ICgpOworKwkJICAgIH0KKysKKysJCSAgaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKysJCSAgICB0bXBfbGVuZ3RoID0gd2lkdGg7CisrCisrCQkgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxKTsgLyogYWNjb3VudCBmb3IgdHJhaWxpbmcgTlVMICovCisrCQl9CisrCisrCQlpZiAodG1wX2xlbmd0aCA8PSBzaXplb2YgKHRtcGJ1ZikgLyBzaXplb2YgKENIQVJfVCkpCisrCQkgIHRtcCA9IHRtcGJ1ZjsKKysJCWVsc2UKKysJCSAgeworKwkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChDSEFSX1QpKTsKKysKKysJCSAgICBpZiAoc2l6ZV9vdmVyZmxvd19wICh0bXBfbWVtc2l6ZSkpCisrCQkgICAgICAvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8KKysJCSAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKysJCSAgICB0bXAgPSAoQ0hBUl9UICopIG1hbGxvYyAodG1wX21lbXNpemUpOworKwkJICAgIGlmICh0bXAgPT0gTlVMTCkKKysJCSAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworKwkJICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworKwkJICB9CisrI2VuZGlmCisrCisrCQkvKiBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNhbGxpbmcgc25wcmludGYgb3IKKysJCSAgIHNwcmludGYuICAqLworKwkJcCA9IGJ1ZjsKKysJCSpwKysgPSAnJSc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19HUk9VUCkKKysJCSAgKnArKyA9ICdcJyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKQorKwkJICAqcCsrID0gJy0nOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfU0hPV1NJR04pCisrCQkgICpwKysgPSAnKyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19TUEFDRSkKKysJCSAgKnArKyA9ICcgJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0FMVCkKKysJCSAgKnArKyA9ICcjJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1pFUk8pCisrCQkgICpwKysgPSAnMCc7CisrCQlpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCQkgICAgbWVtY3B5IChwLCBkcC0+d2lkdGhfc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKwkJaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKysJCSAgICBtZW1jcHkgKHAsIGRwLT5wcmVjaXNpb25fc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKworKwkJc3dpdGNoICh0eXBlKQorKwkJICB7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKysJCSAgICAqcCsrID0gJ2wnOworKwkJICAgIC8qRkFMTFRIUk9VR0gqLworKyNlbmRpZgorKwkJICBjYXNlIFRZUEVfTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HSU5UOgorKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorKyNlbmRpZgorKwkJICAgICpwKysgPSAnbCc7CisrCQkgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCQkgICAgKnArKyA9ICdMJzsKKysJCSAgICBicmVhazsKKysjZW5kaWYKKysJCSAgZGVmYXVsdDoKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkJKnAgPSBkcC0+Y29udmVyc2lvbjsKKysjaWYgVVNFX1NOUFJJTlRGCisrCQlwWzFdID0gJyUnOworKwkJcFsyXSA9ICduJzsKKysJCXBbM10gPSAnXDAnOworKyNlbHNlCisrCQlwWzFdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCS8qIENvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yIHNwcmludGYuICAqLworKwkJcHJlZml4X2NvdW50ID0gMDsKKysJCWlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJICB7CisrCQkgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworKwkJICB9CisrCQlpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkgIHsKKysJCSAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCSAgfQorKworKyNpZiBVU0VfU05QUklOVEYKKysJCS8qIFByZXBhcmUgY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIHRoZSBjb3VudAorKwkJICAgdmlhICVuLiAgKi8KKysJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIDEpKTsKKysJCXJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCWZvciAoOzspCisrCQkgIHsKKysJCSAgICBzaXplX3QgbWF4bGVuOworKwkJICAgIGludCBjb3VudDsKKysJCSAgICBpbnQgcmV0Y291bnQ7CisrCisrCQkgICAgbWF4bGVuID0gYWxsb2NhdGVkIC0gbGVuZ3RoOworKwkJICAgIGNvdW50ID0gLTE7CisrCQkgICAgcmV0Y291bnQgPSAwOworKworKyNpZiBVU0VfU05QUklOVEYKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBhcmcsICZjb3VudCk7CQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgYXJnLCAmY291bnQpOwkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sIGFyZywgXAorKwkJCQkJICAgICAmY291bnQpOwkJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKKysJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisrCQkgICAgICB9CisrI2Vsc2UKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBhcmcpOwkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisrCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIGFyZyk7CSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBwcmVmaXhlc1sxXSxcCisrCQkJCQkgYXJnKTsJCQkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgZGVmYXVsdDoJCQkJCQkgICAgXAorKwkJCWFib3J0ICgpOwkJCQkJICAgIFwKKysJCSAgICAgIH0KKysjZW5kaWYKKysKKysJCSAgICBzd2l0Y2ggKHR5cGUpCisrCQkgICAgICB7CisrCQkgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91Y2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zaG9ydDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdXNob3J0OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9JTlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91aW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CisrCQkJeworKwkJCSAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKysJCQl7CisrCQkJICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKysJCQl7CisrCQkJICB3aW50X3QgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfU1RSSU5HOgorKwkJCXsKKysJCQkgIGNvbnN0IGNoYXIgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKysJCQl7CisrCQkJICBjb25zdCB3Y2hhcl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisrCQkJeworKwkJCSAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgZGVmYXVsdDoKKysJCQlhYm9ydCAoKTsKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogUG9ydGFiaWxpdHk6IE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHNucHJpbnRmKCkKKysJCSAgICAgICBhcmUgSVNPIEMgOTkgY29tcGxpYW50LiAgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKKysJCSAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKKysJCSAgICAgICBwcm9kdWNlZC4gICovCisrCQkgICAgaWYgKGNvdW50ID49IDApCisrCQkgICAgICB7CisrCQkJLyogVmVyaWZ5IHRoYXQgc25wcmludGYoKSBoYXMgTlVMLXRlcm1pbmF0ZWQgaXRzCisrCQkJICAgcmVzdWx0LiAgKi8KKysJCQlpZiAoY291bnQgPCBtYXhsZW4gJiYgcmVzdWx0W2xlbmd0aCArIGNvdW50XSAhPSAnXDAnKQorKwkJCSAgYWJvcnQgKCk7CisrCQkJLyogUG9ydGFiaWxpdHkgaGFjay4gICovCisrCQkJaWYgKHJldGNvdW50ID4gY291bnQpCisrCQkJICBjb3VudCA9IHJldGNvdW50OworKwkJICAgICAgfQorKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQkvKiBzbnByaW50ZigpIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJworKwkJCSAgIGRpcmVjdGl2ZS4gICovCisrCQkJaWYgKHBbMV0gIT0gJ1wwJykKKysJCQkgIHsKKysJCQkgICAgLyogRG9uJ3QgdXNlIHRoZSAnJW4nIGRpcmVjdGl2ZTsgaW5zdGVhZCwgbG9vaworKwkJCSAgICAgICBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworKwkJCSAgICBwWzFdID0gJ1wwJzsKKysJCQkgICAgY29udGludWU7CisrCQkJICB9CisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisrCQkJICAgIGlmIChyZXRjb3VudCA8IDApCisrCQkJICAgICAgeworKwkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CisrCQkJCSAgIEl0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJyBkaXJlY3RpdmUsCisrCQkJCSAgICphbmQqIGl0IHJldHVybnMgLTEgKHJhdGhlciB0aGFuIHRoZSBsZW5ndGgKKysJCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCisrCQkJCSAgIGJ1ZmZlciBpcyB0b28gc21hbGwuICAqLworKwkJCQlzaXplX3QgYmlnZ2VyX25lZWQgPQorKwkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworKwkJCQlFTlNVUkVfQUxMT0NBVElPTiAoYmlnZ2VyX25lZWQpOworKwkJCQljb250aW51ZTsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UKKysJCQkgICAgICBjb3VudCA9IHJldGNvdW50OworKwkJCSAgfQorKwkJICAgICAgfQorKyNlbmRpZgorKworKwkJICAgIC8qIEF0dGVtcHQgdG8gaGFuZGxlIGZhaWx1cmUuICAqLworKwkJICAgIGlmIChjb3VudCA8IDApCisrCQkgICAgICB7CisrCQkJaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisrCQkJICBmcmVlIChyZXN1bHQpOworKwkJCWlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysJCQkgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisrCQkJQ0xFQU5VUCAoKTsKKysJCQllcnJubyA9IEVJTlZBTDsKKysJCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIH0KKysKKysjaWYgIVVTRV9TTlBSSU5URgorKwkJICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorKwkJICAgICAgLyogdG1wX2xlbmd0aCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCAtIGZpeCB0aGUKKysJCQkgY29kZSBhYm92ZSEgICovCisrCQkgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysKKysJCSAgICAvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN1bHQuICAqLworKwkJICAgIGlmIChjb3VudCA+PSBtYXhsZW4pCisrCQkgICAgICB7CisrCQkJLyogTmVlZCBhdCBsZWFzdCBjb3VudCBieXRlcy4gIEJ1dCBhbGxvY2F0ZQorKwkJCSAgIHByb3BvcnRpb25hbGx5LCB0byBhdm9pZCBsb29waW5nIGV0ZXJuYWxseSBpZgorKwkJCSAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCisrCQkJc2l6ZV90IG4gPQorKwkJCSAgeG1heCAoeHN1bSAobGVuZ3RoLCBjb3VudCksIHh0aW1lcyAoYWxsb2NhdGVkLCAyKSk7CisrCisrCQkJRU5TVVJFX0FMTE9DQVRJT04gKG4pOworKyNpZiBVU0VfU05QUklOVEYKKysJCQljb250aW51ZTsKKysjZW5kaWYKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogVGhlIHNucHJpbnRmKCkgcmVzdWx0IGRpZCBmaXQuICAqLworKyNlbHNlCisrCQkgICAgLyogQXBwZW5kIHRoZSBzcHJpbnRmKCkgcmVzdWx0LiAgKi8KKysJCSAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgdG1wLCBjb3VudCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCQkgICAgaWYgKHRtcCAhPSB0bXBidWYpCisrCQkgICAgICBmcmVlICh0bXApOworKyNlbmRpZgorKworKwkJICAgIGxlbmd0aCArPSBjb3VudDsKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysgICAgLyogQWRkIHRoZSBmaW5hbCBOVUwuICAqLworKyAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisrICAgIHJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysKKysgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYgJiYgbGVuZ3RoICsgMSA8IGFsbG9jYXRlZCkKKysgICAgICB7CisrCS8qIFNocmluayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBwb3NzaWJsZS4gICovCisrCUNIQVJfVCAqbWVtb3J5OworKworKwltZW1vcnkgPSAoQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgKGxlbmd0aCArIDEpICogc2l6ZW9mIChDSEFSX1QpKTsKKysJaWYgKG1lbW9yeSAhPSBOVUxMKQorKwkgIHJlc3VsdCA9IG1lbW9yeTsKKysgICAgICB9CisrCisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgICBDTEVBTlVQICgpOworKyAgICAqbGVuZ3RocCA9IGxlbmd0aDsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysKKysgIG91dF9vZl9tZW1vcnk6CisrICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorKyAgICAgIGZyZWUgKHJlc3VsdCk7CisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgb3V0X29mX21lbW9yeV8xOgorKyAgICBDTEVBTlVQICgpOworKyAgICBlcnJubyA9IEVOT01FTTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrfQorKworKyN1bmRlZiBTTlBSSU5URgorKyN1bmRlZiBVU0VfU05QUklOVEYKKysjdW5kZWYgUFJJTlRGX1BBUlNFCisrI3VuZGVmIERJUkVDVElWRVMKKysjdW5kZWYgRElSRUNUSVZFCisrI3VuZGVmIENIQVJfVAorKyN1bmRlZiBWQVNOUFJJTlRGCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdmFzbnByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc25wcmludGYuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY2NzcwMDY2NCAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9WQVNOUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOUFJJTlRGX0gKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IF9fU1RSSUNUX0FOU0lfXworKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKysgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKysgICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyAodGhpcyBtYXkgYmUgPSBSRVNVTFRCVUYKKysgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisrICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKysgICBlcnJubyBhbmQgcmV0dXJuIE5VTEwuICAqLworK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisrICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworK2V4dGVybiBjaGFyICogdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC92YXNud3ByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc253cHJpbnRmLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42NzM2OTk3NTIgLTA0MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKiB2c3dwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1ZBU05XUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOV1BSSU5URl9ICisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysvKiBHZXQgd2NoYXJfdCwgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKysgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisrICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCisrICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisrICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorKyAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CisrICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KKytleHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CisrZXh0ZXJuIHdjaGFyX3QgKiB2YXNud3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOV1BSSU5URl9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvVkVSU0lPTgkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9WRVJTSU9OCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjc5Njk4ODQwIC0wNDAwCitAQCAtMSArMSBAQAorLUdOVSBnZXR0ZXh0IGxpYnJhcnkgZnJvbSBnZXR0ZXh0LTAuMTAuMzIKKytHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjE0LjEKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC93cHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvd3ByaW50Zi1wYXJzZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjk1Njk2NDA4IC0wNDAwCitAQCAtMCwwICsxLDc1IEBACisrLyogUGFyc2UgcHJpbnRmIGZvcm1hdCBzdHJpbmcuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1dQUklOVEZfUEFSU0VfSAorKyNkZWZpbmUgX1dQUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgd2NoYXJfdCBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK3djaGFyX3RfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgd2NoYXJfdF9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKyt3Y2hhcl90X2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHdwcmludGZfcGFyc2UgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgd2NoYXJfdF9kaXJlY3RpdmVzICpkLCBhcmd1bWVudHMgKmEpOworKworKyNlbmRpZiAvKiBfV1BSSU5URl9QQVJTRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwveG9wZW4tbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC94b3Blbi1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gWC9PcGVuIHN0eWxlIC5tc2cgZmlsZQorLSMgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCistIworLSMKKy0jIFRoZSBmaXJzdCBkaXJlY3RpdmUgaW4gdGhlIC5tc2cgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorLSMgbWVzc2FnZSBzZXQgbnVtYmVyLiAgV2UgdXNlIGFsd2F5cyBzZXQgbnVtYmVyIDEuCistIworLTEgeworLSAgaVwKKy0kc2V0IDEgIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgcG8ybXNnLnNlZAorLSAgaAorLSAgcy8uKi8wLworLSAgeAorLX0KKy0jCistIyBXZSBjb3B5IGFsbCBjb21tZW50cyBpbnRvIHRoZSAubXNnIGZpbGUuICBQZXJoYXBzIHRoZXkgY2FuIGhlbHAuCistIworLS9eIy8gcy9eI1sgCV0qLyQgL3AKKy0jCistIyBXZSBjb3B5IHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFzIGEgY29tbWVudCBpbnRvIHRoZSAubXNnIGZpbGUuCistIworLS9ebXNnaWQvIHsKKy0jIERvZXMgbm90IHdvcmsgbm93CistIyAgLyIkLyEgeworLSMgICAgcy9cXCQvLworLSMgICAgcy8kLyAuLi4gKG1vcmUgbGluZXMgZm9sbG93aW5nKSIvCistIyAgfQorLSAgcy9ebXNnaWRbIAldKiJcKC4qXCkiJC8kIE9yaWdpbmFsIE1lc3NhZ2U6IFwxLworLSAgcAorLX0KKy0jCistIyBUaGUgLm1zZyBmaWxlIGNvbnRhaW5zLCBvdGhlciB0aGVuIHRoZSAucG8gZmlsZSwgb25seSB0aGUgdHJhbnNsYXRpb25zCistIyBidXQgZWFjaCBnaXZlbiBhIHVuaXF1ZSBJRC4gIFN0YXJ0aW5nIGZyb20gMSBhbmQgaW5jcmVtZW50aW5nIGJ5IDEgZm9yCistIyBlYWNoIG1lc3NhZ2Ugd2UgYXNzaWduIHRoZW0gdG8gdGhlIG1lc3NhZ2VzLgorLSMgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIC5wbyBmaWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNhdC1pZC10YmwuYyBmaWxlCistIyAod2l0aCBwby10by10YmwpIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgdXNlZCBoZXJlLiAgKEF0IGxlYXN0IHRoZSBvcmRlcgorLSMgb2YgZGVjbGFyYXRpb25zIG11c3Qgbm90IGJlIGNoYW5nZWQuKQorLSMKKy0vXm1zZ3N0ci8geworLSAgcy9tc2dzdHJbIAldKiJcKC4qXCkiL1wxLworLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSMgQnJpbmcgdGhlIGxpbmUgaW4gdGhlIGZvcm1hdCBgPG51bWJlcj4gPG1lc3NhZ2U+JworLSAgRworLSAgcy9eW15cbl0qJC8mIC8KKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wyIFwxLworLSMgQ2xlYXIgZmxhZyBmcm9tIGxhc3Qgc3Vic3RpdHV0aW9uLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBhIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXG5cKSJcKC4qXCkiL1wxXDIvCistIyBZZXMsIHRoZW4gYnJhbmNoLgorLSAgdGEKKy0gIFAKKy0gIEQKKy0jIE5vdGUgdGhhdCBgRCcgaW5jbHVkZXMgYSBqdW1wIHRvIHRoZSBzdGFydCEhCistIyBXZSBmb3VuZCBhIGNvbnRpbnVhdGlvbiBsaW5lLiAgQnV0IGJlZm9yZSBwcmludGluZyBpbnNlcnQgJ1wnLgorLSAgOmEKKy0gIHMvXCguKlwpXChcbi4qXCkvXDFcXFwyLworLSAgUAorLSMgV2UgY2Fubm90IHVzZSB0aGUgc2VkIGNvbW1hbmQgYEQnIGhlcmUKKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC94c2l6ZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3hzaXplLmgJMjAwNC0wOS0xMiAxNDo0MDozNC43MDA2OTU2NDggLTA0MDAKK0BAIC0wLDAgKzEsMTA5IEBACisrLyogeHNpemUuaCAtLSBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9YU0laRV9ICisrI2RlZmluZSBfWFNJWkVfSAorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgU0laRV9NQVguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWYgSEFWRV9TVERJTlRfSAorKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrCisrLyogVGhlIHNpemUgb2YgbWVtb3J5IG9iamVjdHMgaXMgb2Z0ZW4gY29tcHV0ZWQgdGhyb3VnaCBleHByZXNzaW9ucyBvZgorKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorKyAgICAgIHZvaWQqIHAgPSBtYWxsb2MgKGhlYWRlcl9zaXplICsgbiAqIGVsZW1lbnRfc2l6ZSkuCisrICAgVGhlc2UgY29tcHV0YXRpb25zIGNhbiBsZWFkIHRvIG92ZXJmbG93LiAgV2hlbiB0aGlzIGhhcHBlbnMsIG1hbGxvYygpCisrICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisrICAgY3Jhc2hlcyB3aGlsZSBhdHRlbXB0aW5nIHRvIGZpbGwgdGhlIG1lbW9yeS4KKysgICBUbyBhdm9pZCB0aGlzLCB0aGUgZnVuY3Rpb25zIGFuZCBtYWNyb3MgaW4gdGhpcyBmaWxlIGNoZWNrIGZvciBvdmVyZmxvdy4KKysgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisrICAgbWFsbG9jIChTSVpFX01BWCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gZmFpbCAtLSB0aGluayBvZiBhIG1hbGxvYworKyAgIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyBtbWFwIC0tLCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBzaXplX292ZXJmbG93X3AoKQorKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisrICAgVGhlIGV4YW1wbGUgdGh1cyBiZWNvbWVzOgorKyAgICAgIHNpemVfdCBzaXplID0geHN1bSAoaGVhZGVyX3NpemUsIHh0aW1lcyAobiwgZWxlbWVudF9zaXplKSk7CisrICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKysqLworKworKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworKyNkZWZpbmUgeGNhc3Rfc2l6ZV90KE4pIFwKKysgICgoTikgPD0gU0laRV9NQVggPyAoc2l6ZV90KSAoTikgOiBTSVpFX01BWCkKKysKKysvKiBTdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKKyt7CisrICBzaXplX3Qgc3VtID0gc2l6ZTEgKyBzaXplMjsKKysgIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworK30KKysKKysvKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3hzdW0zIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMiwgc2l6ZV90IHNpemUzKQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyk7CisrfQorKworKy8qIFN1bSBvZiBmb3VyIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyksIHNpemU0KTsKKyt9CisrCisrLyogTWF4aW11bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3htYXggKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQorK3sKKysgIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKysgICAgIG1heCAoU0laRV9NQVgsIG4pID09IFNJWkVfTUFYIGFuZCBtYXggKG4sIFNJWkVfTUFYKSA9PSBTSVpFX01BWC4gICovCisrICByZXR1cm4gKHNpemUxID49IHNpemUyID8gc2l6ZTEgOiBzaXplMik7CisrfQorKworKy8qIE11bHRpcGxpY2F0aW9uIG9mIGEgY291bnQgd2l0aCBhbiBlbGVtZW50IHNpemUsIHdpdGggb3ZlcmZsb3cgY2hlY2suCisrICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKysgICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IGV2ZW4KKysgICB3aGVuIE4gaXMgb2YgYSB3aWRlciB0dXBlIGFuZCBOID4gU0laRV9NQVguICAqLworKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorKyAgKChOKSA8PSBTSVpFX01BWCAvIChFTFNJWkUpID8gKHNpemVfdCkgKE4pICogKEVMU0laRSkgOiBTSVpFX01BWCkKKysKKysvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworKyNkZWZpbmUgc2l6ZV9vdmVyZmxvd19wKFNJWkUpIFwKKysgICgoU0laRSkgPT0gU0laRV9NQVgpCisrLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisrI2RlZmluZSBzaXplX2luX2JvdW5kc19wKFNJWkUpIFwKKysgICgoU0laRSkgIT0gU0laRV9NQVgpCisrCisrI2VuZGlmIC8qIF9YU0laRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L0NoYW5nZUxvZwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDU0NjQxODQwIC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrMjAwNC0wOS0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIGNvZGVzZXQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdldHRleHQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdsaWJjMjEubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGljb252Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRkaXYwLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRtYXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludHR5cGVzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlc19oLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlcy1wcmkubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGlzYy1wb3NpeC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGNtZXNzYWdlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItbGQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxpYi1saW5rLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItcHJlZml4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nZG91YmxlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nbG9uZy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbmxzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwby5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcHJpbnRmLXBvc2l4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwcm9ndGVzdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc2lnbmVkLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBzaXplX21heC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc3RkaW50X2gubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHVpbnRtYXhfdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogdWxvbmdsb25nLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3Y2hhcl90Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3aW50X3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHhzaXplLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBNYWtlZmlsZS5hbTogTmV3IGZpbGUuCisrCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2NvZGVzZXQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2NvZGVzZXQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjA2Nzc0MDggLTA0MDAKK0BAIC0wLDAgKzEsMjMgQEAKKysjIGNvZGVzZXQubTQgc2VyaWFsIEFNMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKysgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisrICAgIF0pCisrICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2dldHRleHQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2dldHRleHQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjY2NzY0OTYgLTA0MDAKK0BAIC0wLDAgKzEsNDg3IEBACisrIyBnZXR0ZXh0Lm00IHNlcmlhbCAyOCAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KKytkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKysKKytkbmwgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorK2RubCBJTlRMU1lNQk9MIGNhbiBiZSBvbmUgb2YgJ2V4dGVybmFsJywgJ25vLWxpYnRvb2wnLCAndXNlLWxpYnRvb2wnLiBUaGUKKytkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorK2RubCAgICBhbmQgJ25vLWxpYnRvb2wnIG9yICd1c2UtbGlidG9vbCcgZm9yIHBhY2thZ2VzIHdpdGggYW4gaW50bCBkaXJlY3RvcnkuCisrZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCisrZG5sICAgIGRlcGVuZGluZyBvbiAtLXtlbmFibGUsZGlzYWJsZX0te3NoYXJlZCxzdGF0aWN9IGFuZCBvbiB0aGUgcHJlc2VuY2Ugb2YKKytkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorK2RubCBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMgJ25lZWQtbmdldHRleHQnLCB0aGVuIEdOVSBnZXR0ZXh0CisrZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCisrZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworK2RubCAgICAnbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zJywgdGhlbiBHTlUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndAorK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCisrZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorK2RubCAgICB0aGUgdmFsdWUgYCQodG9wX2J1aWxkZGlyKS9pbnRsLycgaXMgdXNlZC4KKytkbmwKKytkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CisrZG5sIDEpIEdOVSBnZXR0ZXh0LCBhcyBpbmNsdWRlZCBpbiB0aGUgaW50bCBzdWJkaXJlY3RvcnksIHdpbGwgYmUgY29tcGlsZWQKKytkbmwgICAgYW5kIHVzZWQuCisrZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKKytkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KKytkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IG5vbmUKKytkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKKytkbmwgR05VIGZvcm1hdCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhbiBYL09wZW4gZ2V0dGV4dCksCisrZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCisrZG5sIG1haW50YWluZXJzLgorK2RubAorK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCisrWworKyAgZG5sIEFyZ3VtZW50IGNoZWNraW5nLgorKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKysgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorK10pXSldKV0pXSkKKysgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisrICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCisrXSldKV0pXSkKKysgIGRlZmluZShndF9pbmNsdWRlZF9pbnRsLCBpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgW25vXSwgW3llc10pKQorKyAgZGVmaW5lKGd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeCwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorKworKyAgQUNfUkVRVUlSRShbQU1fUE9fU1VCRElSU10pZG5sCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKysgIF0pCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKysgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisrICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKyAgZG5sICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisrICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisrICBkbmwgYWdhaW4sIG91dHNpZGUgYW55ICdpZicuIFRoZXJlIGFyZSB0d28gc29sdXRpb25zOgorKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisrICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorKyAgZG5sIFNpbmNlIEFDX1BST1ZJREVfSUZFTFNFIGlzIG9ubHkgaW4gYXV0b2NvbmYgPj0gMi41MiBhbmQgbm90CisrICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKysgICAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorKyAgXSkKKysKKysgIGRubCBTZXQgVVNFX05MUy4KKysgIEFNX05MUworKworKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisrICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCisrICBdKQorKyAgTElCSU5UTD0KKysgIExUTElCSU5UTD0KKysgIFBPU1VCPQorKworKyAgZG5sIElmIHdlIHVzZSBOTFMgZmlndXJlIG91dCB3aGF0IG1ldGhvZAorKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQorKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisrICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisrICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAorKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKysgICAgICBBQ19NU0dfUkVTVUxUKCRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0KQorKworKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorKyAgICBdKQorKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorKyAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQorKyAgICAgICAgZG5sIHRvIGZhbGwgYmFjayB0byBHTlUgTkxTIGxpYnJhcnkuCisrCisrICAgICAgICBkbmwgQWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIGNhY2hlIG1hY3Jvcy4KKysgICAgICAgIGRlZmluZShbZ3RfYXBpX3ZlcnNpb25dLCBpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sIDMsIGlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIDIsIDEpKSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJjXSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGxdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJpbnRsXSkKKysKKysgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjLAorKyAgICAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAorKyAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKKytyZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcywKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliYz1ubyldKQorKworKyAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiAhPSAieWVzIjsgdGhlbgorKyAgICAgICAgICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisrICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworKyAgICAgICAgICAgIEFNX0lDT05WX0xJTksKKysgICAgICAgICAgXSkKKysgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorKyAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCisrICAgICAgICAgIGRubCBiZWNhdXNlIHRoYXQgd291bGQgYWRkICItbGljb252IiB0byBMSUJJTlRMIGFuZCBMVExJQklOVEwKKysgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKysgICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKKysgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsXSwKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCwKKysgICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkSU5DSU5UTCIKKysgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoMCldLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8pCisrICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiICE9IHllcyAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisrICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisrICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CisrcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKV0sCisrICAgICAgICAgICAgICAgW0xJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKKysgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorKyAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMKKysgICAgICAgICAgICAgICBdKQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgorKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKysgICAgICAgIGZpCisrCisrICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAorKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKysgICAgICAgIGRubCBnZXR0ZXh0IGlzIGFscmVhZHkgcHJlaW5zdGFsbGVkIGluIGxpYmludGwsIHdlIHVwZGF0ZSB0aGlzCisrICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKKysgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliYyIgPSAieWVzIiBcCisrICAgICAgICAgICB8fCB7IHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIiBcCisrICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorKyAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisrICAgICAgICAgIExJQklOVEw9CisrICAgICAgICAgIExUTElCSU5UTD0KKysgICAgICAgICAgSU5DSU5UTD0KKysgICAgICAgIGZpCisrCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisrICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KKysgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyAgICAgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PXllcworKyAgICAgICAgZmkKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorKyAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcworKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WIgorKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViIKKysgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHRvIHVzZSBHTlUgZ2V0dGV4dCB0b29scy4KKysgICAgICAgIENBVE9CSkVYVD0uZ21vCisrICAgICAgZmkKKysgICAgXSkKKysKKysgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisrICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCisrICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorKyAgIGlzIHJlcXVlc3RlZC5dKQorKyAgICBlbHNlCisrICAgICAgVVNFX05MUz1ubworKyAgICBmaQorKyAgZmkKKysKKysgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKysgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKysgICAgICBlbHNlCisrICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisrICAgIGZpCisrICAgIEFDX01TR19SRVNVTFQoWyRndF9zb3VyY2VdKQorKyAgZmkKKysKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKysgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKysgICAgICAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lOVExdKQorKyAgICAgIGZpCisrCisrICAgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIHBhY2thZ2VzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICAgIEFDX0RFRklORShIQVZFX0dFVFRFWFQsIDEsCisrICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorKyAgICAgIEFDX0RFRklORShIQVZFX0RDR0VUVEVYVCwgMSwKKysgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKysgICAgZmkKKysKKysgICAgZG5sIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgcG8vIGRpcmVjdG9yeS4KKysgICAgUE9TVUI9cG8KKysgIGZpCisrCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorKyAgICBkbmwgdG8gJ3llcycgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXN0c3VpdGUgcmVxdWlyZXMgaXQuCisrICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisrICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgZmkKKysKKysgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisrICAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCisrICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorKyAgICBBQ19TVUJTVChDQVRPQkpFWFQpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisrICAgIG5sc19jdl9oZWFkZXJfbGliZ3Q9CisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIERBVEFESVJOQU1FPXNoYXJlCisrICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBJTlNUT0JKRVhUPS5tbworKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBHRU5DQVQ9Z2VuY2F0CisrICAgIEFDX1NVQlNUKEdFTkNBVCkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgaWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9IHllczsgdGhlbgorKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisrICAgIGZpCisrICAgIEFDX1NVQlNUKElOVExPQkpTKQorKworKyAgICBkbmwgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBpZiB0aGUgc3Vycm91bmRpbmcgcGFja2FnZSB3aXNoZXMgaXQuCisrICAgIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYPWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeAorKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKysgIF0pCisrCisrICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgSU5UTExJQlM9IiRMSUJJTlRMIgorKyAgQUNfU1VCU1QoSU5UTExJQlMpCisrCisrICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisrICBBQ19TVUJTVChMSUJJTlRMKQorKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorKyAgQUNfU1VCU1QoUE9TVUIpCisrXSkKKysKKysKKytkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3RvcnksCisrZG5sIGV4Y2VwdCBmb3IgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggKGFuZCBwb3NzaWJseSBMSUJUT09MKSwgSU5UTE9CSlMsCisrZG5sICAgICAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEwsIEJVSUxEX0lOQ0xVREVEX0xJQklOVEwuCisrQUNfREVGVU4oW0FNX0lOVExfU1VCRElSXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTUtJTlNUQUxMRElSU10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0lTQ19QT1NJWF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DX0NPTlNUXSlkbmwKKysgIEFDX1JFUVVJUkUoW2JoX0NfU0lHTkVEXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1RZUEVfT0ZGX1RdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorKyAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9MT05HX0xPTkddKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9MT05HRE9VQkxFXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX1dJTlRfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9JTlRNQVhfVF0pCisrICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19NTUFQXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0dMSUJDMjFdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfSU5URElWMF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAorKyAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAorKworKyAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAorKyAgICBbQUNfREVGSU5FKFtwdHJkaWZmX3RdLCBbbG9uZ10sCisrICAgICAgIFtEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKysgICAgXSkKKysgIEFDX0NIRUNLX0hFQURFUlMoW2FyZ3ouaCBsaW1pdHMuaCBsb2NhbGUuaCBubF90eXBlcy5oIG1hbGxvYy5oIHN0ZGRlZi5oIFwKKytzdGRsaWIuaCBzdHJpbmcuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCisrICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIFwKKyttZW1wY3B5IG11bm1hcCBwdXRlbnYgc2V0ZW52IHNldGxvY2FsZSBzbnByaW50ZiBzdHBjcHkgc3RyY2FzZWNtcCBzdHJkdXAgXAorK3N0cnRvdWwgdHNlYXJjaCB3Y3NsZW4gX19hcmd6X2NvdW50IF9fYXJnel9zdHJpbmdpZnkgX19hcmd6X25leHQgXAorK19fZnNldGxvY2tpbmddKQorKworKyAgZG5sIFVzZSB0aGUgX3NucHJpbnRmIGZ1bmN0aW9uIG9ubHkgaWYgaXQgaXMgZGVjbGFyZWQgKGJlY2F1c2Ugb24gTmV0QlNEIGl0CisrICBkbmwgaXMgZGVmaW5lZCBhcyBhIHdlYWsgYWxpYXMgb2Ygc25wcmludGY7IHdlIHByZWZlciB0byB1c2UgdGhlIGxhdHRlcikuCisrICBndF9DSEVDS19ERUNMKF9zbnByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKF9zbndwcmludGYsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKworKyAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KKysgIGRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWZpbmVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgaW4gU29sYXJpcworKyAgZG5sIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdAorKyAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KKysgIGRubCBEb24ndCB1c2UgQUNfQ0hFQ0tfREVDTFMgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gYXV0b2NvbmYtMi4xMy4KKysgIGd0X0NIRUNLX0RFQ0woZmVvZl91bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKGZnZXRzX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysgIGd0X0NIRUNLX0RFQ0woZ2V0Y191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrCisrICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgorKyAgICAqeWVzKSBIQVZFX1BPU0lYX1BSSU5URj0xIDs7CisrICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKKysgIGVzYWMKKysgIEFDX1NVQlNUKFtIQVZFX1BPU0lYX1BSSU5URl0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9BU1BSSU5URj0xCisrICBlbHNlCisrICAgIEhBVkVfQVNQUklOVEY9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0FTUFJJTlRGXSkKKysgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorKyAgICBIQVZFX1NOUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9TTlBSSU5URj0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfU05QUklOVEZdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9XUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9XUFJJTlRGPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9XUFJJTlRGXSkKKysKKysgIEFNX0lDT05WCisrICBBTV9MQU5HSU5GT19DT0RFU0VUCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKysgICAgQU1fTENfTUVTU0FHRVMKKysgIGZpCisrCisrICBkbmwgaW50bC9wbHVyYWwuYyBpcyBnZW5lcmF0ZWQgZnJvbSBpbnRsL3BsdXJhbC55LiBJdCByZXF1aXJlcyBiaXNvbiwKKysgIGRubCBiZWNhdXNlIHBsdXJhbC55IHVzZXMgYmlzb24gc3BlY2lmaWMgZmVhdHVyZXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0CisrICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKKysgIGRubCBjb21waWxlLgorKyAgZG5sIGJpc29uIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgbWFpbnRhaW5lciAod2hvIHRvdWNoZXMgcGx1cmFsLnkpLiBCdXQgaW4KKysgIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKKysgIGRubCB0aGUgcnVsZSBpbiBnZW5lcmFsIE1ha2VmaWxlLiBOb3csIHNvbWUgcGVvcGxlIGNhcmVsZXNzbHkgdG91Y2ggdGhlCisrICBkbmwgZmlsZXMgb3IgaGF2ZSBhIGJyb2tlbiAibWFrZSIgcHJvZ3JhbSwgaGVuY2UgdGhlIHBsdXJhbC5jIHJ1bGUgd2lsbAorKyAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90CisrICBkbmwgcHJlc2VudCBvciB0b28gb2xkLgorKyAgQUNfQ0hFQ0tfUFJPR1MoW0lOVExCSVNPTl0sIFtiaXNvbl0pCisrICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorKyAgICBhY192ZXJjX2ZhaWw9eWVzCisrICBlbHNlCisrICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3ZlcnNpb24gb2YgYmlzb25dKQorK2NoYW5nZXF1b3RlKDw8LD4+KWRubAorKyAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKysgICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisrICAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCisrY2hhbmdlcXVvdGUoWyxdKWRubAorKyAgICAgICAgIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgb2siOyBhY192ZXJjX2ZhaWw9bm87OworKyAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgIGVzYWMKKysgICAgQUNfTVNHX1JFU1VMVChbJGFjX3Byb2dfdmVyc2lvbl0pCisrICBmaQorKyAgaWYgdGVzdCAkYWNfdmVyY19mYWlsID0geWVzOyB0aGVuCisrICAgIElOVExCSVNPTj06CisrICBmaQorK10pCisrCisrCisrZG5sIGd0X0NIRUNLX0RFQ0woRlVOQywgSU5DTFVERVMpCisrZG5sIENoZWNrIHdoZXRoZXIgYSBmdW5jdGlvbiBpcyBkZWNsYXJlZC4KKytBQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDEgaXMgZGVjbGFyZWRdLCBhY19jdl9oYXZlX2RlY2xfJDEsCisrICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCisrI2lmbmRlZiAkMQorKyAgY2hhciAqcCA9IChjaGFyICopICQxOworKyNlbmRpZgorK10sIGFjX2N2X2hhdmVfZGVjbF8kMT15ZXMsIGFjX2N2X2hhdmVfZGVjbF8kMT1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsXyQxID0geWVzOyB0aGVuCisrICAgIGd0X3ZhbHVlPTEKKysgIGVsc2UKKysgICAgZ3RfdmFsdWU9MAorKyAgZmkKKysgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9ERUNMX110cmFuc2xpdCgkMSwgW2Etel0sIFtBLVpdKSwgWyRndF92YWx1ZV0sCisrICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYCQxJywgYW5kIHRvIDAgaWYgeW91IGRvbid0Ll0pCisrXSkKKysKKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCisrQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvZ2xpYmMyMS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvZ2xpYmMyMS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgzMzY3NTQzMiAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgZ2xpYmMyMS5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMS4zLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisrIyBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbam1fR0xJQkMyMV0sCisrICBbCisrICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciwKKysgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisrICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorKwlbCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fR05VX0xJQlJBUllfXworKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKysgIEx1Y2t5IEdOVSB1c2VyCisrICNlbmRpZgorKyNlbmRpZgorKwldLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8pCisrICAgICAgXQorKyAgICApCisrICAgIEFDX1NVQlNUKEdMSUJDMjEpCisrICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisrICBdCisrKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pY29udi5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaWNvbnYubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44Mzk2NzQ1MjAgLTA0MDAKK0BAIC0wLDAgKzEsMTAzIEBACisrIyBpY29udi5tNCBzZXJpYWwgQU00IChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ljb252XSkKKytdKQorKworK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKytbCisrICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKKysgIGRubCB0aG9zZSB3aXRoIHRoZSBzdGFuZGFsb25lIHBvcnRhYmxlIEdOVSBsaWJpY29udiBpbnN0YWxsZWQpLgorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKysKKysgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJpY29udiBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKysgIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCisrICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisrCisrICBBQ19DQUNIRV9DSEVDSyhmb3IgaWNvbnYsIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKysgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorKyAgICBhbV9jdl9saWJfaWNvbnY9bm8KKysgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8aWNvbnYuaD5dLAorKyAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworKyAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKysgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+XSwKKysgICAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisrICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisrICAgICAgICBhbV9jdl9saWJfaWNvbnY9eWVzCisrICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorKyAgICBmaQorKyAgXSkKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9JQ09OViwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbi5dKQorKyAgZmkKKysgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJJQ09OVl0pCisrICBlbHNlCisrICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKKysgICAgZG5sIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJJQ09OVj0KKysgICAgTFRMSUJJQ09OVj0KKysgIGZpCisrICBBQ19TVUJTVChMSUJJQ09OVikKKysgIEFDX1NVQlNUKExUTElCSUNPTlYpCisrXSkKKysKKytBQ19ERUZVTihbQU1fSUNPTlZdLAorK1sKKysgIEFNX0lDT05WX0xJTksKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisrICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWworKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCisrc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOworKyNlbHNlCisrc2l6ZV90IGljb252KCk7CisrI2VuZGlmCisrXSwgW10sIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIsIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IikKKysgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKysgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCisrICAgIEFDX01TR19SRVNVTFQoWyRde2FjX3Q6LQorKyAgICAgICAgIH1bJF1hbV9jdl9wcm90b19pY29udikKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKKysgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludGRpdjAubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludGRpdjAubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NDU2NzM2MDggLTA0MDAKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludG1heC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50bWF4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODU1NjcyMDg4IC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBpbnRtYXgubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgJ2ludG1heF90JyB0eXBlLCBidXQgZG9uJ3QgYXR0ZW1wdCB0bworK2RubCBmaW5kIGEgcmVwbGFjZW1lbnQgaWYgaXQgaXMgbGFja2luZy4KKysKKytBQ19ERUZVTihbZ3RfVFlQRV9JTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbnRtYXhfdCwgZ3RfY3ZfY19pbnRtYXhfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkZGVmLmg+IAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKytdLCBbaW50bWF4X3QgeCA9IC0xO10sIGd0X2N2X2NfaW50bWF4X3Q9eWVzLCBndF9jdl9jX2ludG1heF90PW5vKV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0lOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlc19oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlc19oLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODY4NjcwMTEyIC0wNDAwCitAQCAtMCwwICsxLDI4IEBACisrIyBpbnR0eXBlc19oLm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlcy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50dHlwZXMubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NjE2NzExNzYgLTA0MDAKK0BAIC0wLDAgKzEsMjcgQEAKKysjIGludHR5cGVzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisrIyA8c3lzL3R5cGVzLmg+LgorKworK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbCisrICAgIEFDX1RSWV9DT01QSUxFKAorKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgICBbXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubykKKysgIF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19ILCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50dHlwZXMtcHJpLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlcy1wcmkubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NzQ2NjkyMDAgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludHR5cGVzLXByaS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKysjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorKworK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorK1sKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisrICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKKysgICAgICBbCisrICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2lmZGVmIFBSSWQzMgorK2NoYXIgKnAgPSBQUklkMzI7CisrI2VuZGlmCisrXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQorKyAgICAgIF0pCisrICBmaQorKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaXNjLXBvc2l4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pc2MtcG9zaXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44ODU2Njc1MjggLTA0MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGNtZXNzYWdlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sY21lc3NhZ2UubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MDI2NjQ5NDQgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xpYi1sZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGliLWxkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTA4NjY0MDMyIC0wNDAwCitAQCAtMCwwICsxLDExMiBAQAorKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCisrZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KKytkbmwgd2l0aCBsaWJ0b29sLm00LgorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCisrW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKKytbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKKytlc2FjXSkKKyt3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisrXSkKKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKKytbQUNfQVJHX1dJVEgoZ251LWxkLAorK1sgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dLAorK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCisrQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrYWNfcHJvZz1sZAorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyopCisrICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworKyAgKikKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworKyAgZXNhYworKyAgY2FzZSAkYWNfcHJvZyBpbgorKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKysgICAgW1tcXC9dKiB8IFtBLVphLXpdOltcXC9dKildCisrICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCisrICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKysgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisrICAgICAgZG9uZQorKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorKyAgICAgIDs7CisrICAiIikKKysgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisrICAgIGFjX3Byb2c9bGQKKysgICAgOzsKKysgICopCisrICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKysgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorKyAgICA7OworKyAgZXNhYworK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKytlbHNlCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKKytmaQorK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKKytbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKysgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisrICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisrICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKysgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisrICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrZWxzZQorKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrZmldKQorK0xEPSIkYWNsX2N2X3BhdGhfTEQiCisraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCgkTEQpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCisrQUNfTElCX1BST0dfTERfR05VCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGliLWxpbmsubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xpYi1saW5rLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTE0NjYzMTIwIC0wNDAwCitAQCAtMCwwICsxLDU1MSBAQAorKyMgbGliLWxpbmsubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKKytkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKysgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKysgIF0pCisrICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorKyAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisrICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorKyAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisrICBIQVZFX0xJQltdTkFNRT15ZXMKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUpCisrZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCisrZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCisrZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gSWYgZm91bmQsIGl0CisrZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKKytkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKKytkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCisrZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysKKysgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKysgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliW11OYW1lIGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorKyAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgXSkKKysgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisrICAgIEhBVkVfTElCW11OQU1FPXllcworKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKysgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKysgIGVsc2UKKysgICAgSEFWRV9MSUJbXU5BTUU9bm8KKysgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisrICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKysgICAgTElCW11OQU1FPQorKyAgICBMVExJQltdTkFNRT0KKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKKytkbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgaGFyZGNvZGVfZGlyZWN0LCBoYXJkY29kZV9taW51c19MLgorK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUk9HX0xEXSkgICAgICAgICAgICBkbmwgd2UgdXNlICRMRCwgJHdpdGhfZ251X2xkCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luXSwgYWNsX2N2X3JwYXRoLCBbCisrICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKysgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisrICAgIC4gLi9jb25mdGVzdC5zaAorKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisrICAgIGFjbF9jdl9ycGF0aD1kb25lCisrICBdKQorKyAgd2w9IiRhY2xfY3Zfd2wiCisrICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorKyAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisrICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorKyAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKysgIEFDX0FSR19FTkFCTEUocnBhdGgsCisrICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorKyAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQorK10pCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliJDEtcHJlZml4XSwKKytbICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQKKysgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKysgIExJQltdTkFNRT0KKysgIExUTElCW11OQU1FPQorKyAgSU5DW11OQU1FPQorKyAgcnBhdGhkaXJzPQorKyAgbHRycGF0aGRpcnM9CisrICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisrICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKKysgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKysgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisrICAgIG5hbWVzX25leHRfcm91bmQ9CisrICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKysgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworKyAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgorKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKysgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisrICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisrICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKysgICAgICAgICAgICA6CisrICAgICAgICAgIGZpCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisrICAgICAgICAgIGZvdW5kX2Rpcj0KKysgICAgICAgICAgZm91bmRfbGE9CisrICAgICAgICAgIGZvdW5kX3NvPQorKyAgICAgICAgICBmb3VuZF9hPQorKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisrICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisrICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKysgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQgaWYgaXQncyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgTERGTEFHUworKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIEFzc3VtZSB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbmVhcmJ5LgorKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKysgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorKyAgICAgICAgICAgICAgKi9saWIgfCAqL2xpYi8pCisrICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAncywvbGliLyokLCwnYAorKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisrICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICBJTkNbXU5BTUU9IiR7SU5DW11OQU1FfSR7SU5DW11OQU1FOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgTG9vayBmb3IgZGVwZW5kZW5jaWVzLgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisrICAgICAgICAgICAgICBkbmwgZGxuYW1lLCBsaWJyYXJ5X25hbWVzLCBvbGRfbGlicmFyeSwgZGVwZW5kZW5jeV9saWJzLCBjdXJyZW50LAorKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKysgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorKyAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorKyAgICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkTElCTkFNRSwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1SKikKKysgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtbCopCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqLmxhKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKysgICAgICAgICAgICAgICAgICAgIGRubCBvcHRpb24uCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBEaWRuJ3QgZmluZCB0aGUgbGlicmFyeTsgYXNzdW1lIGl0IGlzIGluIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMKKysgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorKyAgICAgICAgICAgIGRubCBydW50aW1lIGxvYWRlciwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMgc2V2ZXJlbHkgbWlzY29uZmlndXJlZC4pCisrICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZG9uZQorKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKysgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisrICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisrICAgICAgYWxsZGlycz0KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorKyAgICAgIGRvbmUKKysgICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgIGVsc2UKKysgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKysgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBkbmwgV2hlbiB1c2luZyBsaWJ0b29sLCB0aGUgb3B0aW9uIHRoYXQgd29ya3MgZm9yIGJvdGggbGlicmFyaWVzIGFuZAorKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1SJGZvdW5kX2RpciIKKysgICAgZG9uZQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorK2RubCB1bmxlc3MgYWxyZWFkeSBwcmVzZW50IGluIFZBUi4KKytkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCisrQUNfREVGVU4oW0FDX0xJQl9BUFBFTkRUT1ZBUl0sCisrWworKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKysgICAgaGF2ZWl0PQorKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKysgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorKyAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgWyQxXT0iJHtbJDFdfSR7WyQxXTorIH0kZWxlbWVudCIKKysgICAgZmkKKysgIGRvbmUKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9saWItcHJlZml4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9saWItcHJlZml4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTIxNjYyMDU2IC0wNDAwCitAQCAtMCwwICsxLDE1NSBAQAorKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCisrZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAorK2RubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgorK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCisrW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKKytbQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQorKworK2RubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKKytkbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAorK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorK2RubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KKytkbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQorK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKKytbCisrICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKKytbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKKytkbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKKytkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCisrWworKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisrICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisrICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKysgIGZpCisrICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZmkKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKKytkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorK2RubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorK1sKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisrICAkMQorKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nZG91YmxlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sb25nZG91YmxlLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTQyNjU4ODY0IC0wNDAwCitAQCAtMCwwICsxLDMwIEBACisrIyBsb25nZG91YmxlLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX0xPTkdET1VCTEVdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9uZyBkb3VibGVdLCBndF9jdl9jX2xvbmdfZG91YmxlLAorKyAgICBbaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMKKysgICAgIGVsc2UKKysgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyAgICAgICAgIC8qIFRoZSBTdGFyZGVudCBWaXN0cmEga25vd3Mgc2l6ZW9mKGxvbmcgZG91YmxlKSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQuICAqLworKyAgICAgICAgIGxvbmcgZG91YmxlIGZvbyA9IDAuMDsKKysgICAgICAgICAvKiBPbiBVbHRyaXggNC4zIGNjLCBsb25nIGRvdWJsZSBpcyA0IGFuZCBkb3VibGUgaXMgOC4gICovCisrICAgICAgICAgaW50IGFycmF5IFsyKihzaXplb2YobG9uZyBkb3VibGUpID49IHNpemVvZihkb3VibGUpKSAtIDFdOworKyAgICAgICAgIF0sICwKKysgICAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcywgZ3RfY3ZfY19sb25nX2RvdWJsZT1ubykKKysgICAgIGZpXSkKKysgIGlmIHRlc3QgJGd0X2N2X2NfbG9uZ19kb3VibGUgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGRvdWJsZScgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nbG9uZy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NDk2NTc4MDAgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIGxvbmdsb25nLm00IHNlcmlhbCA0CisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9MT05HX0xPTkcgaWYgJ2xvbmcgbG9uZycgd29ya3MuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFtsb25nIGxvbmcgbGwgPSAxTEw7IGludCBpID0gNjM7XSwKKysgICAgW2xvbmcgbG9uZyBsbG1heCA9IChsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIGxsIDw8IGkgfCBsbCA+PiBpIHwgbGxtYXggLyBsbCB8IGxsbWF4ICUgbGw7XSwKKysgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGxvbmcnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvTWFrZWZpbGUuYW0JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQ4NjQyNzUyIC0wNDAwCitAQCAtMCwwICsxIEBACisrRVhUUkFfRElTVCA9IGNvZGVzZXQubTQgZ2V0dGV4dC5tNCBnbGliYzIxLm00IGljb252Lm00IGludGRpdjAubTQgaW50bWF4Lm00IGludHR5cGVzLm00IGludHR5cGVzX2gubTQgaW50dHlwZXMtcHJpLm00IGlzYy1wb3NpeC5tNCBsY21lc3NhZ2UubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbG9uZ2RvdWJsZS5tNCBsb25nbG9uZy5tNCBubHMubTQgcG8ubTQgcHJpbnRmLXBvc2l4Lm00IHByb2d0ZXN0Lm00IHNpZ25lZC5tNCBzaXplX21heC5tNCBzdGRpbnRfaC5tNCB1aW50bWF4X3QubTQgdWxvbmdsb25nLm00IHdjaGFyX3QubTQgd2ludF90Lm00IHhzaXplLm00CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L25scy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbmxzLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTU1NjU2ODg4IC0wNDAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBubHMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCisrZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorKyAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKysgIEFDX0FSR19FTkFCTEUobmxzLAorKyAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKysgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKysgIEFDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrICBBQ19TVUJTVChVU0VfTkxTKQorK10pCisrCisrQUNfREVGVU4oW0FNX01LSU5TVEFMTERJUlNdLAorK1sKKysgIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKKysgIGRubCBmaW5kIHRoZSBta2luc3RhbGxkaXJzIHNjcmlwdCBpbiBhbm90aGVyIHN1YmRpciBidXQgJCh0b3Bfc3JjZGlyKS4KKysgIGRubCBUcnkgdG8gbG9jYXRlIGl0LgorKyAgTUtJTlNUQUxMRElSUz0KKysgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgorKyAgICBjYXNlICIkYWNfYXV4X2RpciIgaW4KKysgICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKysgICAgICAqKSBNS0lOU1RBTExESVJTPSJcJCh0b3BfYnVpbGRkaXIpLyRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiIDs7CisrICAgIGVzYWMKKysgIGZpCisrICBpZiB0ZXN0IC16ICIkTUtJTlNUQUxMRElSUyI7IHRoZW4KKysgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKysgIGZpCisrICBBQ19TVUJTVChNS0lOU1RBTExESVJTKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3BvLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9wby5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk2MTY1NTk3NiAtMDQwMAorQEAgLTAsMCArMSw0MjYgQEAKKysjIHBvLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorKworK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCisrQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FNX01LSU5TVEFMTERJUlNdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKysKKysgIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAorKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ2ZtdCBpbiB0aGUgUEFUSC4KKysgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKysgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisrICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAorKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKysgICAgOikKKysgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisrICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIHhnZXR0ZXh0LgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisrICAgIDopCisrICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgcm0gLWYgbWVzc2FnZXMucG8KKysKKysgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxXSwgOikKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSBtc2dmbXQuCisrICBpZiB0ZXN0ICIkR01TR0ZNVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgbXNnZm10IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisrICAgIGRubCBNYWtlZmlsZXMgc3RpbGwgY2FuIHdvcmsuCisrICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIChpZiAkR01TR0ZNVCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEdNU0dGTVQ9YGVjaG8gIiRHTVNHRk1UIiB8IHNlZCAtZSAncyxeLiovLCwnYAorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0XSkKKysgICAgICBHTVNHRk1UPSI6IgorKyAgICBmaQorKyAgZmkKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KKysgIGlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgeGdldHRleHQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKKysgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KKysgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgICAoaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQorKyAgICAgIFhHRVRURVhUPSI6IgorKyAgICBmaQorKyAgICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgICBybSAtZiBtZXNzYWdlcy5wbworKyAgZmkKKysKKysgIEFDX09VVFBVVF9DT01NQU5EUyhbCisrICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisrICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKysgICAgICBlc2FjCisrICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisrICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisrICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKysgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKysgICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKysgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKysgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKysgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisrICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJworKyAgICAgICAgICBmaQorKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisrICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisrICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworKyAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgICBQT0ZJTEVTPQorKyAgICAgICAgICBVUERBVEVQT0ZJTEVTPQorKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisrICAgICAgICAgIEdNT0ZJTEVTPQorKyAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKysgICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKysgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKysgICAgICAgICAgSU5TVF9MSU5HVUFTPQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIHVzZWl0PW5vCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisrICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKysgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgQ0FUQUxPR1M9CisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisrICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgorKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKyAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCisrICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisrICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGRvbmUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZG9uZV0sCisrICAgWyMgQ2FwdHVyZSB0aGUgdmFsdWUgb2Ygb2Jzb2xldGUgQUxMX0xJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUKKysgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKysgICAgIyBmcm9tIGF1dG9tYWtlLgorKyAgICBldmFsICdPQlNPTEVURV9BTExfTElOR1VBUycnPSIkQUxMX0xJTkdVQVMiJworKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisrICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKysgICBdKQorK10pCisrCisrZG5sIFBvc3Rwcm9jZXNzZXMgYSBNYWtlZmlsZSBpbiBhIGRpcmVjdG9yeSBjb250YWluaW5nIFBPIGZpbGVzLgorK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCisrWworKyAgIyBXaGVuIHRoaXMgY29kZSBpcyBydW4sIGluIGNvbmZpZy5zdGF0dXMsIHR3byB2YXJpYWJsZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKysgICMgc2V0OgorKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisrICAjIC0gTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExJTkdVQVMgYXQgY29uZmlndXJlCisrICAjICAgdGltZS4KKysKKytjaGFuZ2VxdW90ZSgsKWRubAorKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisrICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisrICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKysgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKysgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKysgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKysgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKysgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKysgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisrICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisrICBlc2FjCisrCisrICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKysgIGlmIHRlc3QgIlhgKGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgIGd0X2VjaG89J2VjaG8nCisrICBlbHNlCisrICAgIGlmIHRlc3QgIlhgKHByaW50ZiAnJXNcbicgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgICAgZ3RfZWNobz0ncHJpbnRmICVzXG4nCisrICAgIGVsc2UKKysgICAgICBlY2hvX2Z1bmMgKCkgeworKyAgICAgICAgY2F0IDw8RU9UCisrJCoKKytFT1QKKysgICAgICB9CisrICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworKyAgICBmaQorKyAgZmkKKysKKysgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKysgIHNlZF94X3ZhcmlhYmxlPScKKysjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisreAorK3MvUC9QLworK3gKKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisrICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKysgIGJhCisrfQorK2JkCisrOmEKKysjIEhlcmUgd2UgYXJlIHByb2Nlc3NpbmcgYSBsaW5lIGZyb20gdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrIyBSZW1vdmUgY29tbWVudCwgbW9yZSBwcmVjaXNlbHkgcmVwbGFjZSBpdCB3aXRoIGEgc3BhY2UuCisrcy8jLiokLyAvCisrIyBTZWUgaWYgdGhlIGxpbmUgZW5kcyBpbiBhIGJhY2tzbGFzaC4KKyt0YgorKzpiCisrcy9cXCQvLworKyMgUHJpbnQgdGhlIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KKytwCisrdGMKKysjIFRoZXJlIHdhcyBubyB0cmFpbGluZyBiYWNrc2xhc2guIFRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gaXMKKysjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorK3MvXi4qJC8vCisreAorK2JkCisrOmMKKysjIEEgdHJhaWxpbmcgYmFja3NsYXNoIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gY29udGludWVzIGluIHRoZQorKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorK3MvXi4qJC9QLworK3gKKys6ZAorKycKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrCisrICAjIFNldCBQT1RGSUxFUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIFBPVEZJTEVTLgorKyAgc2VkX3hfUE9URklMRVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9QT1RGSUxFUy9nJ2AiCisrICBQT1RGSUxFUz1gc2VkIC1uIC1lICIkc2VkX3hfUE9URklMRVMiIDwgIiRhY19maWxlImAKKysgICMgQ29tcHV0ZSBQT1RGSUxFU19ERVBTIGFzCisrICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisrICBQT1RGSUxFU19ERVBTPQorKyAgZm9yIGZpbGUgaW4gJFBPVEZJTEVTOyBkbworKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKysgIGRvbmUKKysgIFBPTUFLRUZJTEVERVBTPSIiCisrCisrICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisrICBmaQorKyAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisrICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorKyAgZWxzZQorKyAgICAjIFNldCBBTExfTElOR1VBUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJTkdVQVMuCisrICAgIHNlZF94X0xJTkdVQVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYCIKKysgICAgQUxMX0xJTkdVQVNfPWBzZWQgLW4gLWUgIiRzZWRfeF9MSU5HVUFTIiA8ICIkYWNfZmlsZSJgCisrICBmaQorKyAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZS4KKysgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICMgQ29tcHV0ZSBQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKysgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAjIENvbXB1dGUgUFJPUEVSVElFU0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisrICAjIENvbXB1dGUgQ0xBU1NGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5jbGFzcykKKysgICMgQ29tcHV0ZSBRTUZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKKysgICMgQ29tcHV0ZSBNU0dGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisrICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkvJChET01BSU4pLnJlc291cmNlcy5kbGwpCisrICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAuKSBzcmNkaXJwcmU9IDs7CisrICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgIGVzYWMKKysgIFBPRklMRVM9CisrICBVUERBVEVQT0ZJTEVTPQorKyAgRFVNTVlQT0ZJTEVTPQorKyAgR01PRklMRVM9CisrICBQUk9QRVJUSUVTRklMRVM9CisrICBDTEFTU0ZJTEVTPQorKyAgUU1GSUxFUz0KKysgIE1TR0ZJTEVTPQorKyAgUkVTT1VSQ0VTRExMRklMRVM9CisrICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKysgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorKyAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisrICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisrICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCisrICAgIFFNRklMRVM9IiRRTUZJTEVTICRzcmNkaXJwcmUkbGFuZy5xbSIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKysgICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnYAorKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgZG9uZQorKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisrICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorKyAgSU5TVF9MSU5HVUFTPQorKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIHVzZWl0PW5vCisrICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisrICAgICAgZWxzZQorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorKyAgICAgIGZpCisrICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKysgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKysgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisrICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKysgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworKyAgICAgICAgZXNhYworKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKysgICAgICBmaQorKyAgICBkb25lCisrICBmaQorKyAgQ0FUQUxPR1M9CisrICBKQVZBQ0FUQUxPR1M9CisrICBRVENBVEFMT0dTPQorKyAgVENMQ0FUQUxPR1M9CisrICBDU0hBUlBDQVRBTE9HUz0KKysgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisrICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisrICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKysgICAgICBRVENBVEFMT0dTPSIkUVRDQVRBTE9HUyAkbGFuZy5xbSIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgICBkb25lCisrICBmaQorKworKyAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKysgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKysgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisrICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIHRlc3QgLW4gIiRQT01BS0VGSUxFREVQUyI7IHRoZW4KKysgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrTWFrZWZpbGU6ICRQT01BS0VGSUxFREVQUworK0VPRgorKyAgZmkKKysgIG12ICIkYWNfZmlsZS50bXAiICIkYWNfZmlsZSIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcmludGYtcG9zaXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3ByaW50Zi1wb3NpeC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk3NDY1NDAwMCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTMuMSkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCisrZG5sIHBvc2l0aW9ucy4KKysKKytBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisrICAgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4LAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKysgICBkb2xsYXIgZXhwYW5zaW9uIChwb3NzaWJseSBhbiBhdXRvY29uZiBidWcpLiAgKi8KKytzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9OworK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworK2ludCBtYWluICgpCisreworKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisrICByZXR1cm4gKHN0cmNtcCAoYnVmLCAiNTUgMzMiKSAhPSAwKTsKKyt9XSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD1ubywKKysgICAgICBbCisrICAgICAgICBBQ19FR1JFUF9DUFAobm90cG9zaXgsIFsKKysjaWYgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKysgIG5vdHBvc2l4CisrI2VuZGlmCisrICAgICAgICBdLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3Npbmcgbm8iLAorKyAgICAgICAgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIHllcyIpCisrICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisrICAgICp5ZXMpCisrICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfUFJJTlRGLCAxLAorKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLl0pCisrICAgICAgOzsKKysgIGVzYWMKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcm9ndGVzdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvcHJvZ3Rlc3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45OTA2NTE1NjggLTA0MDAKK0BAIC0wLDAgKzEsOTEgQEAKKysjIHByb2d0ZXN0Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKysKKysjIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgorKworK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKKytkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCisrQUNfREVGVU4oW0FNX1BBVEhfUFJPR19XSVRIX1RFU1RdLAorK1sKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorKworKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCisrY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgorKyMhIC9iaW4vc2gKKytleGl0IDAKKytfQVNFT0YKKytjaG1vZCAreCBjb25mJCQuZmlsZQorK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCisrZWxzZQorKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorK2ZpCisrcm0gLWYgY29uZiQkLmZpbGUKKysKKysjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF8kMSwKKytbY2FzZSAiWyRdJDEiIGluCisrICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisrICAgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKysgICAgOzsKKysgICopCisrICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKysgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKysgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgICAgICAgaWYgWyQzXTsgdGhlbgorKyAgICAgICAgICAgIGFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisrICAgICAgICAgICAgYnJlYWsgMgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisrZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKKytkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KKytpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorK10pZG5sCisrICAgIDs7CisrZXNhY10pZG5sCisrJDE9IiRhY19jdl9wYXRoXyQxIgorK2lmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoWyRdJDEpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK0FDX1NVQlNUKCQxKWRubAorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpZ25lZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvc2lnbmVkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTk2NjUwNjU2IC0wNDAwCitAQCAtMCwwICsxLDE5IEBACisrIyBzaWduZWQubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2JoX0NfU0lHTkVEXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNpZ25lZF0sIGJoX2N2X2Nfc2lnbmVkLAorKyAgIFtBQ19UUllfQ09NUElMRSgsIFtzaWduZWQgY2hhciB4O10sIGJoX2N2X2Nfc2lnbmVkPXllcywgYmhfY3ZfY19zaWduZWQ9bm8pXSkKKysgIGlmIHRlc3QgJGJoX2N2X2Nfc2lnbmVkID0gbm87IHRoZW4KKysgICAgQUNfREVGSU5FKHNpZ25lZCwgLAorKyAgICAgICAgICAgICAgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBrZXl3b3JkLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpemVfbWF4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zaXplX21heC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwMzY0OTU5MiAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKyMgc2l6ZV9tYXgubTQgc2VyaWFsIDIKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtnbF9TSVpFX01BWF0sCisrWworKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKKysgIGRubCBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBTSVpFX01BWC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIFNJWkVfTUFYXSkKKysgIHJlc3VsdD0KKysgIEFDX0VHUkVQX0NQUChbRm91bmQgaXRdLCBbCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpZiBIQVZFX1NURElOVF9ICisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZmRlZiBTSVpFX01BWAorK0ZvdW5kIGl0CisrI2VuZGlmCisrXSwgcmVzdWx0PXllcykKKysgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgIGRubCBEZWZpbmUgaXQgb3Vyc2VsdmVzLiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSB0eXBlICdzaXplX3QnIGlzIG5vdCB3aWRlcgorKyAgICBkbmwgdGhhbiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZycuCisrICAgIGRubCBUaGUgX0FDX0NPTVBVVEVfSU5UIG1hY3JvIHdvcmtzIHVwIHRvIExPTkdfTUFYLCBzaW5jZSBpdCB1c2VzICdleHByJywKKysgICAgZG5sIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gd29yayBmcm9tIExPTkdfTUlOIHRvIExPTkdfTUFYLgorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgLyAxMF0sIHJlc19oaSwKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgJSAxMF0sIHJlc19sbywKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW3NpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCldLCBmaXRzX2luX3VpbnQsCisrICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKysgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgZG5sIEV2ZW4gdGhvdWdoIFNJWkVfTUFYIGZpdHMgaW4gYW4gdW5zaWduZWQgaW50LCBpdCBtdXN0IGJlIG9mIHR5cGUKKysgICAgICBkbmwgJ3Vuc2lnbmVkIGxvbmcnIGlmIHRoZSB0eXBlICdzaXplX3QnIGlzIHRoZSBzYW1lIGFzICd1bnNpZ25lZCBsb25nJy4KKysgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyAgICAgICAgZXh0ZXJuIHNpemVfdCBmb287CisrICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisrICAgICAgICBdLCBbXSwgZml0c19pbl91aW50PTApCisrICAgIGZpCisrICAgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlUKKysgICAgICBlbHNlCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlVMCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGRubCBTaG91bGRuJ3QgaGFwcGVuLCBidXQgd2hvIGtub3dzLi4uCisrICAgICAgcmVzdWx0PSd+KHNpemVfdCkwJworKyAgICBmaQorKyAgZmkKKysgIEFDX01TR19SRVNVTFQoWyRyZXN1bHRdKQorKyAgaWYgdGVzdCAiJHJlc3VsdCIgIT0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChbU0laRV9NQVhdLCBbJHJlc3VsdF0sCisrICAgICAgW0RlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3N0ZGludF9oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zdGRpbnRfaC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwOTY0ODY4MCAtMDQwMAorQEAgLTAsMCArMSwyOCBAQAorKyMgc3RkaW50X2gubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWludG1heF90Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91aW50bWF4X3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjE2NDY4NTYgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgICAgIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGVsc2UKKysgICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWxvbmdsb25nLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91bG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjg2NDU3OTIgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIHdvcmtzLgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDFVTEw7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3djaGFyX3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3djaGFyX3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMzQ2NDQ4ODAgLTA0MDAKK0BAIC0wLDAgKzEsMjIgQEAKKysjIHdjaGFyX3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciA8c3RkZGVmLmg+IGhhcyB0aGUgJ3djaGFyX3QnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX1dDSEFSX1RdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIGd0X2N2X2Nfd2NoYXJfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkZGVmLmg+CisrICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2NoYXJfdD15ZXMsIGd0X2N2X2Nfd2NoYXJfdD1ubyldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dDSEFSX1QsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3dpbnRfdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvd2ludF90Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQwNjQzOTY4IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyB3aW50X3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgPHdjaGFyLmg+IGhhcyB0aGUgJ3dpbnRfdCcgdHlwZS4KKytkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisrCisrQUNfREVGVU4oW2d0X1RZUEVfV0lOVF9UXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbnRfdF0sIGd0X2N2X2Nfd2ludF90LAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx3Y2hhci5oPgorKyAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2ludF90PXllcywgZ3RfY3ZfY193aW50X3Q9bm8pXSkKKysgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dJTlRfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC94c2l6ZS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQveHNpemUubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wNDc2NDI5MDQgLTA0MDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIHhzaXplLm00IHNlcmlhbCAyCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9YU0laRV0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzaXplLmguCisrICBBQ19SRVFVSVJFKFtnbF9TSVpFX01BWF0pCisrICBBQ19DSEVDS19IRUFERVJTKHN0ZGludC5oKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL01ha2VmaWxlLmFtCTE5OTgtMTItMzAgMDY6MTk6NDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9NYWtlZmlsZS5hbQkyMDA0LTA5LTEyIDE0OjQwOjM1LjEyMTYzMTY1NiAtMDQwMAorQEAgLTEsNSArMSw1IEBACisgU1VCRElSUyA9IGxpYiBpbnRsIHNyYyBwbyBtYW4gdGVzdHN1aXRlCistRVhUUkFfRElTVCA9IGNoZWNrLmxyenN6IENPTVBBVEFCSUxJVFkgUkVBRE1FLmN2cyBSRUFETUUuaXNkbjRsaW51eCBcCisrRVhUUkFfRElTVCA9IGNvbmZpZy5ycGF0aCAgY2hlY2subHJ6c3ogQ09NUEFUQUJJTElUWSBSRUFETUUuY3ZzIFJFQURNRS5pc2RuNGxpbnV4IFwKKyAJUkVBRE1FLmdldHRleHQgcnBtcmMgYnVpbGRycG0gc3lzdHlwZS5pbiBmYXN0Y2hlY2suc2ggUkVBRE1FLnRlc3RzIFwKKyAJYmVvcy1ydW5waXBlZC5jIGZhc3RjaGVjay5iZW9zCisgbm9pbnN0X1NDUklQVFM9c3lzdHlwZQorQEAgLTgzLDMgKzgzLDUgQEAKKyBycG06ICQoUFIpLnRhci5neiBTcGVjZmlsZQorIAkkKHNyY2RpcikvYnVpbGRycG0gJChzcmNkaXIpCisgCisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvTWFrZWZpbGUuaW4JMTk5OC0xMi0zMCAxMTozMTo0MC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL01ha2VmaWxlLmluCTIwMDQtMDktMTIgMTQ6NDA6MzUuMTA5NjMzNDgwIC0wNDAwCitAQCAtMTI1LDcgKzEyNSw3IEBACisgCSAgJiYgQ09ORklHX0ZJTEVTPSRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKyAKKyAkKEFDTE9DQUxfTTQpOiAgY29uZmlndXJlLmluICBhY2luY2x1ZGUubTQKKy0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkKKysJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgLUkgbTQKKyAKKyBjb25maWcuc3RhdHVzOiAkKHNyY2RpcikvY29uZmlndXJlCisgCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbWtpbnN0YWxsZGlycwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvbWtpbnN0YWxsZGlycwkyMDA0LTA5LTEyIDE0OjQwOjM0LjMzNzc1MDgyNCAtMDQwMAorQEAgLTEsMzQgKzEsMTUwIEBACisgIyEgL2Jpbi9zaAorICMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CistIyBBdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKysKKytzY3JpcHR2ZXJzaW9uPTIwMDQtMDItMTUuMjAKKysKKysjIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorICMgQ3JlYXRlZDogMTk5My0wNS0xNgorLSMgTGFzdCBtb2RpZmllZDogMTk5NS0wMy0wNQorLSMgUHVibGljIGRvbWFpbgorKyMgUHVibGljIGRvbWFpbi4KKysjCisrIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisgCisgZXJyc3RhdHVzPTAKKytkaXJtb2RlPSIiCisgCistZm9yIGZpbGUgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICBzZXQgZm5vcmQgYGVjaG8gIjokZmlsZSIgfCBzZWQgLW5lICdzL146XC8vIy87cy9eOi8vO3MvXC8vIC9nO3MvXiMvXC8vO3AnYAorLSAgIHNoaWZ0CisrdXNhZ2U9IlwKKytVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisgCistICAgcGF0aGNvbXA9CistICAgZm9yIGQgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKy0gICAgIGNhc2UgIiRwYXRoY29tcCIgaW4KKy0gICAgICAgLSogKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworLSAgICAgZXNhYworK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCisrbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KKyAKKy0gICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorLSAgICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIiAxPiYyCistICAgICAgICBta2RpciAiJHBhdGhjb21wIiA+IC9kZXYvbnVsbCAyPiYxIHx8IGxhc3RlcnI9JD8KKy0gICAgIGZpCisrUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgCistICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKysjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworKyAgY2FzZSAkMSBpbgorKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorKyAgICAgIGVjaG8gIiR1c2FnZSIKKysgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworKyAgICAgIHNoaWZ0CisrICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisrICAgICAgZGlybW9kZT0kMQorKyAgICAgIHNoaWZ0CisrICAgICAgOzsKKysgICAgLS12ZXJzaW9uKQorKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorKyAgICAgIGV4aXQgMAorKyAgICAgIDs7CisrICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKysgICAgICBzaGlmdAorKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKysgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKysgICAgICBleGl0IDEKKysgICAgICA7OworKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgIGVzYWMKKytkb25lCisrCisrZm9yIGZpbGUKKytkbworKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisrICAgIHNoaWZ0CisrICBlbHNlCisrICAgIGJyZWFrCisrICBmaQorK2RvbmUKKysKKytjYXNlICQjIGluCisrICAwKSBleGl0IDAgOzsKKytlc2FjCisrCisrIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisrIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKysjIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKKysjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisrIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisrIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KKytjYXNlICRkaXJtb2RlIGluCisrICAnJykKKysgICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorKyAgICBlbHNlCisrICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKysgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKysgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorKyAgICAgICMgZXhpc3RzLgorKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisrICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorKyAgICBmaQorKyAgICA7OworKyAgKikKKysgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisrICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisrICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKysgICAgZWxzZQorKyAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgorKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisrICAgICAgZG8KKysgICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKysgICAgICBkb25lCisrICAgIGZpCisrICAgIDs7CisrZXNhYworKworK2ZvciBmaWxlCisrZG8KKysgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCisrICBzaGlmdAorKworKyAgcGF0aGNvbXA9CisrICBmb3IgZAorKyAgZG8KKysgICAgcGF0aGNvbXA9IiRwYXRoY29tcCRkIgorKyAgICBjYXNlICRwYXRoY29tcCBpbgorKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworKyAgICBlc2FjCisrCisrICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKysKKysgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisrCisrICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgCWVycnN0YXR1cz0kbGFzdGVycgorLSAgICAgZmkKKysgICAgICBlbHNlCisrCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisrCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgorKwkgIGxhc3RlcnI9IiIKKysJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKyAKKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorLSAgIGRvbmUKKysJICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgorKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisrCSAgZmkKKysJZmkKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKysgIGRvbmUKKyBkb25lCisgCisgZXhpdCAkZXJyc3RhdHVzCisrCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBtb2RlOiBzaGVsbC1zY3JpcHQKKysjIHNoLWluZGVudGF0aW9uOiAyCisrIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisrIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisrIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKysjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKysjIEVuZDoKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vYm9sZHF1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9ib2xkcXVvdC5zZWQJMjAwNC0wOS0xMiAxNDo0MDozNC43MjM2OTIxNTIgLTA0MDAKK0BAIC0wLDAgKzEsMTAgQEAKKytzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKKytzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCisrcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKKytzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCisrcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworK3Mv4oCc4oCdLyIiL2cKKytzL+KAnC/igJwbWzFtL2cKKytzL+KAnS8bWzBt4oCdL2cKKytzL+KAmC/igJgbWzFtL2cKKytzL+KAmS8bWzBt4oCZL2cKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vY2F0LWlkLXRibC5jCTE5OTgtMTItMjkgMDQ6MjQ6MjQuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9jYXQtaWQtdGJsLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDIzNCArMCwwIEBACistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIGxyenN6LnBvdC4gICovCistCistI2lmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCistCistY29uc3Qgc3RydWN0IF9tc2dfZW50IF9tc2dfdGJsW10gPSB7CistICB7IiIsIDF9LAorLSAgeyJpb19tb2RlKCwyKSBpbiByYnNiLmMgbm90IGltcGxlbWVudGVkXG4iLCAyfSwKKy0gIHsiY2F1Z2h0IHNpZ25hbCAlZDsgZXhpdGluZyIsIDN9LAorLSAgeyJjb21tYW5kIHRyaWVzIiwgNH0sCistICB7InBhY2tldGxlbmd0aCIsIDV9LAorLSAgeyJwYWNrZXRsZW5ndGggb3V0IG9mIHJhbmdlIDI0Li4lbGQiLCA2fSwKKy0gIHsiZnJhbWVsZW5ndGgiLCA3fSwKKy0gIHsiZnJhbWVsZW5ndGggb3V0IG9mIHJhbmdlIDMyLi4lbGQiLCA4fSwKKy0gIHsibWluX2JwcyIsIDl9LAorLSAgeyJtaW5fYnBzIG11c3QgYmUgPj0gMCIsIDEwfSwKKy0gIHsibWluX2Jwc190aW1lIiwgMTF9LAorLSAgeyJtaW5fYnBzX3RpbWUgbXVzdCBiZSA+IDEiLCAxMn0sCistICB7ImhvdXIgdG8gbGFyZ2UgKDAuLjIzKSIsIDEzfSwKKy0gIHsidW5wYXJzYWJsZSBzdG9wIHRpbWVcbiIsIDE0fSwKKy0gIHsibWludXRlIHRvIGxhcmdlICgwLi41OSkiLCAxNX0sCistICB7InN0b3AgdGltZSB0byBzbWFsbCIsIDE2fSwKKy0gIHsic3RvcC1hdCIsIDE3fSwKKy0gIHsidGltZW91dCIsIDE4fSwKKy0gIHsidGltZW91dCBvdXQgb2YgcmFuZ2UgMTAuLjEwMDAiLCAxOX0sCistICB7InNlY3VyaXR5IHZpb2xhdGlvbjogY2FuJ3QgZG8gdGhhdCB1bmRlciByZXN0cmljdGVkIHNoZWxsXG4iLCAyMH0sCistICB7IndpbmRvdyBzaXplIiwgMjF9LAorLSAgeyJjYW5ub3QgdHVybm9mZiBzeXNsb2ciLCAyMn0sCistICB7InN0YXJ0dXAgZGVsYXkiLCAyM30sCistICB7Im91dCBvZiBtZW1vcnkiLCAyNH0sCistICB7InRoaXMgcHJvZ3JhbSB3YXMgbmV2ZXIgaW50ZW5kZWQgdG8gYmUgdXNlZCBzZXR1aWRcbiIsIDI1fSwKKy0gIHsibmVlZCBhdCBsZWFzdCBvbmUgZmlsZSB0byBzZW5kIiwgMjZ9LAorLSAgeyJDYW4ndCBzZW5kIGNvbW1hbmQgaW4gcmVzdHJpY3RlZCBtb2RlXG4iLCAyN30sCistICB7Imhvc3RuYW1lIHRvbyBsb25nXG4iLCAyOH0sCistICB7ImlsbGVnYWwgc2VydmVyIGFkZHJlc3NcbiIsIDI5fSwKKy0gIHsiY2FuIHJlYWQgb25seSBvbmUgZmlsZSBmcm9tIHN0ZGluIiwgMzB9LAorLSAgeyJUcmFuc2ZlciBpbmNvbXBsZXRlXG4iLCAzMX0sCistICB7IlRyYW5zZmVyIGNvbXBsZXRlXG4iLCAzMn0sCistICB7InNlbmRfcHNldWRvICVzOiBjYW5ub3Qgb3BlbiB0bXBmaWxlICVzOiAlcyIsIDMzfSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCBsc3RhdCB0bXBmaWxlICVzOiAlcyIsIDM0fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGF2b2lkaW5nIHN5bWxpbmsgdHJhcCIsIDM1fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCB3cml0ZSB0byB0bXBmaWxlICVzOiAlcyIsIDM2fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGZhaWxlZCIsIDM3fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IG9rIiwgMzh9LAorLSAgeyJ0Y3AgcHJvdG9jb2wgaW5pdCBmYWlsZWRcbiIsIDM5fSwKKy0gIHsiQW5zd2VyaW5nIFRJTUVTWU5DIGF0ICVzIiwgNDB9LAorLSAgeyJ0aW1lem9uZSIsIDQxfSwKKy0gIHsidGltZXpvbmUgdW5rbm93biIsIDQyfSwKKy0gIHsiQ2FuJ3Qgb3BlbiBhbnkgcmVxdWVzdGVkIGZpbGVzLiIsIDQzfSwKKy0gIHsic2VjdXJpdHkgdmlvbGF0aW9uOiBub3QgYWxsb3dlZCB0byB1cGxvYWQgZnJvbSAlcyIsIDQ0fSwKKy0gIHsiY2Fubm90IG9wZW4gJXMiLCA0NX0sCistICB7ImlzIG5vdCBhIGZpbGU6ICVzIiwgNDZ9LAorLSAgeyIlcy8lczogZXJyb3Igb2NjdXJlZCIsIDQ3fSwKKy0gIHsic2tpcHBlZDogJXMiLCA0OH0sCistICB7IiVzLyVzOiBza2lwcGVkIiwgNDl9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQgICBCUFM6JS04bGQgICAgICAgICAgICAgICAgICAgICAgICBcbiIsIDUwfSwKKy0gIHsiU2VuZGluZyAlcywgJWxkIGJsb2NrczogIiwgNTF9LAorLSAgeyJHaXZlIHlvdXIgbG9jYWwgWE1PREVNIHJlY2VpdmUgY29tbWFuZCBub3cuIiwgNTJ9LAorLSAgeyJTZW5kaW5nOiAlc1xuIiwgNTN9LAorLSAgeyJUaW1lb3V0IG9uIHBhdGhuYW1lIiwgNTR9LAorLSAgeyJSZWNlaXZlciBDYW5jZWxsZWQiLCA1NX0sCistICB7Ik5vIEFDSyBvbiBFT1QiLCA1Nn0sCistICB7Ilhtb2RlbSBzZWN0b3JzL2tieXRlcyBzZW50OiAlM2QvJTJkayIsIDU3fSwKKy0gIHsiWW1vZGVtIHNlY3RvcnMva2J5dGVzIHNlbnQ6ICUzZC8lMmRrIiwgNTh9LAorLSAgeyJDYW5jZWxsZWQiLCA1OX0sCistICB7IlRpbWVvdXQgb24gc2VjdG9yIEFDSyIsIDYwfSwKKy0gIHsiTkFLIG9uIHNlY3RvciIsIDYxfSwKKy0gIHsiR290IGJ1cnN0IGZvciBzZWN0b3IgQUNLIiwgNjJ9LAorLSAgeyJHb3QgJTAyeCBmb3Igc2VjdG9yIEFDSyIsIDYzfSwKKy0gIHsiUmV0cnkgQ291bnQgRXhjZWVkZWQiLCA2NH0sCistICB7IlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsIDY1fSwKKy0gIHsiJXMgdmVyc2lvbiAlc1xuIiwgNjZ9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIGZpbGUgLi4uXG4iLCA2N30sCistICB7IiAgIG9yOiAlcyBbb3B0aW9uc10gLXtjfGl9IENPTU1BTkRcbiIsIDY4fSwKKy0gIHsiU2VuZCBmaWxlKHMpIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDY5fSwKKy0gIHsiXAorLSAgICAoWCkgPSBvcHRpb24gYXBwbGllcyB0byBYTU9ERU0gb25seVxuXAorLSAgICAoWSkgPSBvcHRpb24gYXBwbGllcyB0byBZTU9ERU0gb25seVxuXAorLSAgICAoWikgPSBvcHRpb24gYXBwbGllcyB0byBaTU9ERU0gb25seVxuIiwgNzB9LAorLSAgeyJcCistICAtKywgLS1hcHBlbmQgICAgICAgICAgICAgICAgYXBwZW5kIHRvIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUgKFopXG5cCistICAtMiwgLS10d29zdG9wICAgICAgICAgICAgICAgdXNlIDIgc3RvcCBiaXRzXG5cCistICAtNCwgLS10cnktNGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gNEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC00ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA0SyBibG9ja3NpemUgKGRvZXNuJ3QgdHJ5IDgpXG5cCistICAtOCwgLS10cnktOGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gOEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC04ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA4SyBibG9ja3NpemVcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLWNvbW1hbmQgQ09NTUFORCAgICAgICBleGVjdXRlIHJlbW90ZSBjb21tYW5kIENPTU1BTkQgKFopXG5cCistICAtQywgLS1jb21tYW5kLXRyaWVzIE4gICAgICAgdHJ5IE4gdGltZXMgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgKFopXG5cCistICAtZCwgLS1kb3QtdG8tc2xhc2ggICAgICAgICAgY2hhbmdlICcuJyB0byAnLycgaW4gcGF0aG5hbWVzIChZL1opXG5cCistICAgICAgLS1kZWxheS1zdGFydHVwIE4gICAgICAgc2xlZXAgTiBzZWNvbmRzIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuXAorLSAgLWUsIC0tZXNjYXBlICAgICAgICAgICAgICAgIGVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIGZvcmNlIHJlY2VpdmVyIHRvIHJlbmFtZSBmaWxlcyBpdCBhbHJlYWR5IGhhc1xuXAorLSAgLWYsIC0tZnVsbC1wYXRoICAgICAgICAgICAgIHNlbmQgZnVsbCBwYXRobmFtZSAoWS9aKVxuXAorLSAgLWksIC0taW1tZWRpYXRlLWNvbW1hbmQgQ01EIHNlbmQgcmVtb3RlIENNRCwgcmV0dXJuIGltbWVkaWF0ZWx5IChaKVxuXAorLSAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgdXNhZ2UgbWVzc2FnZVxuXAorLSAgLWssIC0tMWsgICAgICAgICAgICAgICAgICAgIHNlbmQgMTAyNCBieXRlIHBhY2tldHMgKFgpXG5cCistICAtTCwgLS1wYWNrZXRsZW4gTiAgICAgICAgICAgbGltaXQgc3VicGFja2V0IGxlbmd0aCB0byBOIGJ5dGVzIChaKVxuXAorLSAgLWwsIC0tZnJhbWVsZW4gTiAgICAgICAgICAgIGxpbWl0IGZyYW1lIGxlbmd0aCB0byBOIGJ5dGVzIChsPj1MKSAoWilcblwKKy0gIC1tLCAtLW1pbi1icHMgTiAgICAgICAgICAgICBzdG9wIHRyYW5zbWlzc2lvbiBpZiBCUFMgYmVsb3cgTlxuXAorLSAgLU0sIC0tbWluLWJwcy10aW1lIE4gICAgICAgICAgZm9yIGF0IGxlYXN0IE4gc2Vjb25kcyAoZGVmYXVsdDogMTIwKVxuIiwgNzF9LAorLSAgeyJcCistICAtbiwgLS1uZXdlciAgICAgICAgICAgICAgICAgc2VuZCBmaWxlIGlmIHNvdXJjZSBuZXdlciAoWilcblwKKy0gIC1OLCAtLW5ld2VyLW9yLWxvbmdlciAgICAgICBzZW5kIGZpbGUgaWYgc291cmNlIG5ld2VyIG9yIGxvbmdlciAoWilcblwKKy0gIC1vLCAtLTE2LWJpdC1jcmMgICAgICAgICAgICB1c2UgMTYgYml0IENSQyBpbnN0ZWFkIG9mIDMyIGJpdCBDUkMgKFopXG5cCistICAtTywgLS1kaXNhYmxlLXRpbWVvdXRzICAgICAgZGlzYWJsZSB0aW1lb3V0IGNvZGUsIHdhaXQgZm9yZXZlclxuXAorLSAgLXAsIC0tcHJvdGVjdCAgICAgICAgICAgICAgIHByb3RlY3QgZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSAoWilcblwKKy0gIC1yLCAtLXJlc3VtZSAgICAgICAgICAgICAgICByZXN1bWUgaW50ZXJydXB0ZWQgZmlsZSB0cmFuc2ZlciAoWilcblwKKy0gIC1SLCAtLXJlc3RyaWN0ZWQgICAgICAgICAgICByZXN0cmljdGVkLCBtb3JlIHNlY3VyZSBtb2RlXG5cCistICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICAgcXVpZXQgKG5vIHByb2dyZXNzIHJlcG9ydHMpXG5cCistICAtcywgLS1zdG9wLWF0IHtISDpNTXwrTn0gICAgc3RvcCB0cmFuc21pc3Npb24gYXQgSEg6TU0gb3IgaW4gTiBzZWNvbmRzXG5cCistICAgICAgLS10Y3AgICAgICAgICAgICAgICAgICAgYnVpbGQgYSBUQ1AgY29ubmVjdGlvbiB0byB0cmFuc21pdCBmaWxlc1xuXAorLSAgICAgIC0tdGNwLXNlcnZlciAgICAgICAgICAgIG9wZW4gc29ja2V0LCB3YWl0IGZvciBjb25uZWN0aW9uXG5cCistICAtdSwgLS11bmxpbmsgICAgICAgICAgICAgICAgdW5saW5rIGZpbGUgYWZ0ZXIgdHJhbnNtaXNzaW9uXG5cCistICAtVSwgLS11bnJlc3RyaWN0ICAgICAgICAgICAgdHVybiBvZmYgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCwgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlc1xuXAorLSAgLVksIC0tb3ZlcndyaXRlLW9yLXNraXAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcywgZWxzZSBza2lwXG5cCistICAgICAgLS15bW9kZW0gICAgICAgICAgICAgICAgdXNlIFlNT0RFTSBwcm90b2NvbFxuXAorLSAgLVosIC0tem1vZGVtICAgICAgICAgICAgICAgIHVzZSBaTU9ERU0gcHJvdG9jb2xcblwKKy1cblwKKy1zaG9ydCBvcHRpb25zIHVzZSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGxvbmcgb25lc1xuIiwgNzJ9LAorLSAgeyJnb3QgWlJRSU5JVCIsIDczfSwKKy0gIHsiZ290IFpDQU4iLCA3NH0sCistICB7ImJsa2xlbiBub3cgJWRcbiIsIDc1fSwKKy0gIHsienNlbmRmZGF0YTogYnBzIHJhdGUgJWxkIGJlbG93IG1pbiAlbGQiLCA3Nn0sCistICB7InpzZW5kZmRhdGE6IHJlYWNoZWQgc3RvcCB0aW1lIiwgNzd9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQvJTdsZCAgIEJQUzolLThsZCBFVEEgJTAyZDolMDJkICAiLCA3OH0sCistICB7ImNhbGNfYmxrbGVuOiByZWR1Y2VkIHRvICVkIGR1ZSB0byBlcnJvclxuIiwgNzl9LAorLSAgeyJjYWxjX2Jsa2xlbjogcmV0dXJuZWQgb2xkIHZhbHVlICVkIGR1ZSB0byBsb3cgYnBlIGRpZmZcbiIsIDgwfSwKKy0gIHsiY2FsY19ibGtsZW46IG9sZCAlbGQsIG5ldyAlbGQsIGQgJWxkXG4iLCA4MX0sCistICB7ImNhbGNfYmxrbGVuOiBjYWxjIHRvdGFsX2J5dGVzPSVsZCwgYnBlPSVsZCwgZWM9JWxkXG4iLCA4Mn0sCistICB7ImNhbGNfYmxrbGVuOiBibGtsZW4gJWQsIG9rICVsZCwgZmFpbGVkICVsZCAtPiAlbHVcbiIsIDgzfSwKKy0gIHsiY2FsY19ibGtsZW46IHJldHVybmVkICVkIGFzIGJlc3RcbiIsIDg0fSwKKy0gIHsiXAorLVxuXAorLWNvdW50ZW06IFRvdGFsICVkICVsZFxuIiwgODV9LAorLSAgeyJCYWQgZXNjYXBlIHNlcXVlbmNlICV4IiwgODZ9LAorLSAgeyJTZW5kZXIgQ2FuY2VsZWQiLCA4N30sCistICB7IlRJTUVPVVQiLCA4OH0sCistICB7IkJhZCBkYXRhIHN1YnBhY2tldCIsIDg5fSwKKy0gIHsiRGF0YSBzdWJwYWNrZXQgdG9vIGxvbmciLCA5MH0sCistICB7IkdhcmJhZ2UgY291bnQgZXhjZWVkZWQiLCA5MX0sCistICB7IkdvdCAlcyIsIDkyfSwKKy0gIHsiUmV0cnkgJWQ6ICIsIDkzfSwKKy0gIHsiZG9uJ3QgaGF2ZSBzZXR0aW1lb2ZkYXksIHdpbGwgbm90IHNldCB0aW1lXG4iLCA5NH0sCistICB7Im5vdCBydW5uaW5nIGFzIHJvb3QgKHRoaXMgaXMgZ29vZCEpLCBjYW4gbm90IHNldCB0aW1lXG4iLCA5NX0sCistICB7ImJ5dGVzX3Blcl9lcnJvciIsIDk2fSwKKy0gIHsiYnl0ZXMtcGVyLWVycm9yIHNob3VsZCBiZSA+MTAwIiwgOTd9LAorLSAgeyJPX1NZTkMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsIiwgOTh9LAorLSAgeyJnYXJiYWdlIG9uIGNvbW1hbmRsaW5lIiwgOTl9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIFtmaWxlbmFtZS5pZi54bW9kZW1dXG4iLCAxMDB9LAorLSAgeyJSZWNlaXZlIGZpbGVzIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDEwMX0sCistICB7IlwKKy0gIC0rLCAtLWFwcGVuZCAgICAgICAgICAgICAgICBhcHBlbmQgdG8gZXhpc3RpbmcgZmlsZXNcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLXdpdGgtY3JjICAgICAgICAgICAgICBVc2UgMTYgYml0IENSQyAoWClcblwKKy0gIC1DLCAtLWFsbG93LXJlbW90ZS1jb21tYW5kcyBhbGxvdyBleGVjdXRpb24gb2YgcmVtb3RlIGNvbW1hbmRzIChaKVxuXAorLSAgLUQsIC0tbnVsbCAgICAgICAgICAgICAgICAgIHdyaXRlIGFsbCByZWNlaXZlZCBkYXRhIHRvIC9kZXYvbnVsbFxuXAorLSAgICAgIC0tZGVsYXktc3RhcnR1cCBOICAgICAgIHNsZWVwIE4gc2Vjb25kcyBiZWZvcmUgZG9pbmcgYW55dGhpbmdcblwKKy0gIC1lLCAtLWVzY2FwZSAgICAgICAgICAgICAgICBFc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIHJlbmFtZSBhbnkgZmlsZXMgYWxyZWFkeSBleGlzdGluZ1xuXAorLSAgICAgIC0tZXJyb3JzIE4gICAgICAgICAgICAgIGdlbmVyYXRlIENSQyBlcnJvciBldmVyeSBOIGJ5dGVzIChkZWJ1Z2dpbmcpXG5cCistICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgSGVscCwgcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlXG5cCistICAtbSwgLS1taW4tYnBzIE4gICAgICAgICAgICAgc3RvcCB0cmFuc21pc3Npb24gaWYgQlBTIGJlbG93IE5cblwKKy0gIC1NLCAtLW1pbi1icHMtdGltZSBOICAgICAgICAgIGZvciBhdCBsZWFzdCBOIHNlY29uZHMgKGRlZmF1bHQ6IDEyMClcblwKKy0gIC1PLCAtLWRpc2FibGUtdGltZW91dHMgICAgICBkaXNhYmxlIHRpbWVvdXQgY29kZSwgd2FpdCBmb3JldmVyIGZvciBkYXRhXG5cCistICAgICAgLS1vLXN5bmMgICAgICAgICAgICAgICAgb3BlbiBvdXRwdXQgZmlsZShzKSBpbiBzeW5jaHJvbm91cyB3cml0ZSBtb2RlXG5cCistICAtcCwgLS1wcm90ZWN0ICAgICAgICAgICAgICAgcHJvdGVjdCBleGlzdGluZyBmaWxlc1xuXAorLSAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgIHF1aWV0LCBubyBwcm9ncmVzcyByZXBvcnRzXG5cCistICAtciwgLS1yZXN1bWUgICAgICAgICAgICAgICAgdHJ5IHRvIHJlc3VtZSBpbnRlcnJ1cHRlZCBmaWxlIHRyYW5zZmVyIChaKVxuXAorLSAgLVIsIC0tcmVzdHJpY3RlZCAgICAgICAgICAgIHJlc3RyaWN0ZWQsIG1vcmUgc2VjdXJlIG1vZGVcblwKKy0gIC1zLCAtLXN0b3AtYXQge0hIOk1NfCtOfSAgICBzdG9wIHRyYW5zbWlzc2lvbiBhdCBISDpNTSBvciBpbiBOIHNlY29uZHNcblwKKy0gIC1TLCAtLXRpbWVzeW5jICAgICAgICAgICAgICByZXF1ZXN0IHJlbW90ZSB0aW1lICh0d2ljZTogc2V0IGxvY2FsIHRpbWUpXG5cCistICAgICAgLS1zeXNsb2dbPW9mZl0gICAgICAgICAgdHVybiBzeXNsb2cgb24gb3Igb2ZmLCBpZiBwb3NzaWJsZVxuXAorLSAgLXQsIC0tdGltZW91dCBOICAgICAgICAgICAgIHNldCB0aW1lb3V0IHRvIE4gdGVudGhzIG9mIGEgc2Vjb25kXG5cCistICAtdSwgLS1rZWVwLXVwcGVyY2FzZSAgICAgICAga2VlcCB1cHBlciBjYXNlIGZpbGVuYW1lc1xuXAorLSAgLVUsIC0tdW5yZXN0cmljdCAgICAgICAgICAgIGRpc2FibGUgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCAgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIFllcywgY2xvYmJlciBleGlzdGluZyBmaWxlIGlmIGFueVxuXAorLSAgICAgIC0teW1vZGVtICAgICAgICAgICAgICAgIHVzZSBZTU9ERU0gcHJvdG9jb2xcblwKKy0gIC1aLCAtLXptb2RlbSAgICAgICAgICAgICAgICB1c2UgWk1PREVNIHByb3RvY29sXG5cCistXG5cCistc2hvcnQgb3B0aW9ucyB1c2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBsb25nIG9uZXNcbiIsIDEwMn0sCistICB7IiVzIHdhaXRpbmcgdG8gcmVjZWl2ZS4iLCAxMDN9LAorLSAgeyJcckJ5dGVzIHJlY2VpdmVkOiAlN2xkLyU3bGQgICBCUFM6JS02bGQgICAgICAgICAgICAgICAgXHJcbiIsIDEwNH0sCistICB7IiVzOiByZWFkeSB0byByZWNlaXZlICVzIiwgMTA1fSwKKy0gIHsiXHJCeXRlcyByZWNlaXZlZDogJTdsZCAgIEJQUzolLTZsZCAgICAgICAgICAgICAgICBcclxuIiwgMTA2fSwKKy0gIHsiXAorLVxyXG5cCistJXM6ICVzIHJlbW92ZWQuXHJcbiIsIDEwN30sCistICB7IlBhdGhuYW1lIGZldGNoIHJldHVybmVkIEVPVCIsIDEwOH0sCistICB7IlJlY2VpdmVkIGR1cCBTZWN0b3IiLCAxMDl9LAorLSAgeyJTeW5jIEVycm9yIiwgMTEwfSwKKy0gIHsiQ1JDIiwgMTExfSwKKy0gIHsiQ2hlY2tzdW0iLCAxMTJ9LAorLSAgeyJTZWN0b3IgbnVtYmVyIGdhcmJsZWQiLCAxMTN9LAorLSAgeyJTZW5kZXIgQ2FuY2VsbGVkIiwgMTE0fSwKKy0gIHsiR290IDAlbyBzZWN0b3IgaGVhZGVyIiwgMTE1fSwKKy0gIHsiZmlsZSBuYW1lIGVuZHMgd2l0aCBhIC8sIHNraXBwZWQ6ICVzXG4iLCAxMTZ9LAorLSAgeyJ6bWFuYWc9JWQsIEx6bWFuYWc9JWRcbiIsIDExN30sCistICB7Inpjb252PSVkXG4iLCAxMTh9LAorLSAgeyJmaWxlIGV4aXN0cywgc2tpcHBlZDogJXNcbiIsIDExOX0sCistICB7IlRJTUVTWU5DOiBoZXJlICVsZCwgcmVtb3RlICVsZCwgZGlmZiAlbGQgc2Vjb25kc1xuIiwgMTIwfSwKKy0gIHsiVElNRVNZTkM6IGNhbm5vdCBzZXQgdGltZTogJXNcbiIsIDEyMX0sCistICB7ImNhbm5vdCB0bXBmaWxlKCkgZm9yIHRjcCBwcm90b2NvbCBzeW5jaHJvbml6YXRpb24iLCAxMjJ9LAorLSAgeyJUb3BpcGUiLCAxMjN9LAorLSAgeyJSZWNlaXZpbmc6ICVzXG4iLCAxMjR9LAorLSAgeyJCbG9ja3MgcmVjZWl2ZWQ6ICVkIiwgMTI1fSwKKy0gIHsiJXM6ICVzIGV4aXN0c1xuIiwgMTI2fSwKKy0gIHsiJXM6XHRTZWN1cml0eSBWaW9sYXRpb24iLCAxMjd9LAorLSAgeyJyZW1vdGUgY29tbWFuZCBleGVjdXRpb24gcmVxdWVzdGVkIiwgMTI4fSwKKy0gIHsibm90IGV4ZWN1dGVkIiwgMTI5fSwKKy0gIHsiZ290IFpSSU5JVCIsIDEzMH0sCistICB7IlNraXBwZWQiLCAxMzF9LAorLSAgeyJyemZpbGU6IGJwcyByYXRlICVsZCBiZWxvdyBtaW4gJWxkIiwgMTMyfSwKKy0gIHsicnpmaWxlOiByZWFjaGVkIHN0b3AgdGltZSIsIDEzM30sCistICB7IlxyQnl0ZXMgcmVjZWl2ZWQ6ICU3bGQvJTdsZCAgIEJQUzolLTZsZCBFVEEgJTAyZDolMDJkICAiLCAxMzR9LAorLSAgeyJmZ2V0cyBmb3IgdGNwIHByb3RvY29sIHN5bmNocm9uaXphdGlvbiBmYWlsZWQ6ICIsIDEzNX0sCistICB7ImZpbGUgY2xvc2UgZXJyb3IiLCAxMzZ9LAorLX07CistCistaW50IF9tc2dfdGJsX2xlbmd0aCA9IDEzNjsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vQ2hhbmdlTG9nCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNC43OTM2ODE1MTIgLTA0MDAKK0BAIC0xLDMgKzEsMTUgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogYm9sZHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBlbkBib2xkcXVvdC5oZWFkZXI6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGVuQHF1b3QuaGVhZGVyOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnNlcnQtaGVhZGVyLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcXVvdC5zZWQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHJlbW92ZS1wb3RjZGF0ZS5zaW46IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIFJ1bGVzLXF1b3Q6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGNhdC1pZC10YmwuYzogUmVtb3ZlIGZpbGUuCisrCSogc3RhbXAtY2F0LWlkOiBSZW1vdmUgZmlsZS4KKysKKyAvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwbzJ0Ymwuc2VkIGZyb20gbHJ6c3oucG90LiAgKi8KKyAKKyAjaWYgSEFWRV9DT05GSUdfSAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9lbkBib2xkcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQGJvbGRxdW90LmhlYWRlcgkyMDA0LTA5LTEyIDE0OjQwOjM0LjczMTY5MDkzNiAtMDQwMAorQEAgLTAsMCArMSwyNSBAQAorKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKysjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisrIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisrIworKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisrIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKysjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKysjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisrIworKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjCisrIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisrIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vZW5AcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQHF1b3QuaGVhZGVyCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzM3NjkwMDI0IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisrIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisrIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKysjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKysjCisrIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKysjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKysjCisrIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisrIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisrIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vaW5zZXJ0LWhlYWRlci5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2luc2VydC1oZWFkZXIuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzQzNjg5MTEyIC0wNDAwCitAQCAtMCwwICsxLDIzIEBACisrIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorKyMKKysjIEF0IGVhY2ggb2NjdXJyZW5jZSBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAibXNnaWQgIiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCisrIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMgaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXm1zZ2lkIC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL20vbS8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVhZCB0aGUgZmlsZS4KKytyIEhFQURFUgorKyMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKKysjIGN1cnJlbnQgbGluZSB3aGlsZSBkb2luZyB0aGlzLgorK2cKKytOCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9NYWtldmFycwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vTWFrZXZhcnMJMjAwNC0wOS0xMiAxNDo0MDozNC43NDg2ODgzNTIgLTA0MDAKK0BAIC0wLDAgKzEsNDEgQEAKKysjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorKworKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KKytET01BSU4gPSAkKFBBQ0tBR0UpCisrCisrIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCisrc3ViZGlyID0gcG8KKyt0b3BfYnVpbGRkaXIgPSAuLgorKworKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKysKKysjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKysjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisrIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisrIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKysjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisrIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKysjIHRoZWlyIGNvcHlyaWdodC4KKytDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisrIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKysjIC0gU3RyaW5ncyB3aGljaCBhcmUgbm90IGVudGlyZSBzZW50ZW5jZXMsIHNlZSB0aGUgbWFpbnRhaW5lciBndWlkZWxpbmVzCisrIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisrIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKysjICAgdW5kZXJzdG9vZC4KKysjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorKyMgICBtb25leS4KKysjIC0gUGx1cmFsaXNhdGlvbiBwcm9ibGVtcy4KKysjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisrIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorKyMgSXQgY2FuIGJlIHlvdXIgZW1haWwgYWRkcmVzcywgb3IgYSBtYWlsaW5nIGxpc3QgYWRkcmVzcyB3aGVyZSB0cmFuc2xhdG9ycworKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKysjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCisrTVNHSURfQlVHU19BRERSRVNTID0KKysKKysjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KKytFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3F1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9xdW90LnNlZAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc1NDY4NzQ0MCAtMDQwMAorQEAgLTAsMCArMSw2IEBACisrcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCisrcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCisrcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKKytzL+KAnOKAnS8iIi9nCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC43NjI2ODYyMjQgLTA0MDAKK0BAIC0wLDAgKzEsMTkgQEAKKysjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorKyMgZnJvbSBhIFBPVCBmaWxlLgorKyMKKysjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKysjIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXiJQT1QtQ3JlYXRpb24tRGF0ZTogLioiJC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL1AvUC8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgorK2cKKytkCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9SdWxlcy1xdW90CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9SdWxlcy1xdW90CTIwMDQtMDktMTIgMTQ6NDA6MzQuNzc4NjgzNzkyIC0wNDAwCitAQCAtMCwwICsxLDQ3IEBACisrIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisrCisrRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKysKKysuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKysKKytlbkBxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorK2VuQGJvbGRxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBib2xkcXVvdC5wby11cGRhdGUKKysKKytlbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KKytlbkBib2xkcXVvdC5wby11cGRhdGU6IGVuQGJvbGRxdW90LnBvLXVwZGF0ZS1lbgorKworKy5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKysJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKysJdG1wZGlyPWBwd2RgOyBcCisrCWVjaG8gIiQkbGFuZzoiOyBcCisrCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisrCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCisrCWNkICQoc3JjZGlyKTsgXAorKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwkgIGVsc2UgXAorKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorKwkgICAgICA6OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKysJICAgICAgZXhpdCAxOyBcCisrCSAgICBmaTsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisrCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwlmaQorKworK2VuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK2VuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBib2xkcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90CisrbW9zdGx5Y2xlYW4tcXVvdDoKKysJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3N0YW1wLWNhdC1pZAkxOTk4LTEyLTMwIDAyOjUwOjAxLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vc3RhbXAtY2F0LWlkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSArMCwwIEBACistdGltZXN0YW1wCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3NyYy9NYWtlZmlsZS5hbQkxOTk4LTEyLTI4IDAzOjM4OjQ3LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvc3JjL01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6NTMuNjY1ODEyNTEyIC0wNDAwCitAQCAtMiwxMiArMiwxMiBAQAorIGxyel9TT1VSQ0VTPWxyei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIGxzel9TT1VSQ0VTPWxzei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIG5vaW5zdF9IRUFERVJTID0gdGltaW5nLmggemdsb2JhbC5oIHptb2RlbS5oCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrZGF0YWRpciA9ICQocHJlZml4KS9zaGFyZQorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCisgQ0ZMQUdTPUBDRkxBR1NACisgRElTVENMRUFOX0ZJTEVTPWxyenN6YnVnCisgCistTERBREQgPSAuLi9saWIvbGliem1vZGVtLmEgQElOVExMSUJTQAorK0xEQUREID0gLi4vbGliL2xpYnptb2RlbS5hIEBMSUJJTlRMQAorIEFVVE9NQUtFX09QVElPTlM9YW5zaTJrbnIKKyBFWFRSQV9ESVNUID0gYW5zaTJrbnIuMSBhbnNpMmtuci5jIGxyenN6YnVnLmluCisgSU5DTFVERVMgPSAtSS4uIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMgLUkuLi9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9saWIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ2ZGZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMjhiNDczYzNjOTY2ODJhODIwZTI5MmNjMWJlMDA2ZTE5YWVlMTFiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IE1heSAyMDEzIDAxOjA3OjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxyenN6IGNoZWNrIGxvY2FsZS5oCisKK2ZpeCB0aGUgYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIC1PMCBpbiBhIGRlYnVnIGJ1aWxkOgorbHJ6LmM6Mjg0OjEzOiBlcnJvcjogJ0xDX0FMTCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFt1d2VAb2hzZS5kZV0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNmUyMDY0Yy4uYzEwNDYwYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTMwLDcgKzEzMCw3IEBAIEFDX0NIRUNLX0hFQURFUlMoZmNudGwuaCBsaW1pdHMuaCBzeXMvaW9jdGwuaCBzeXMvdGltZS5oIHVuaXN0ZC5oIHN5cy90aW1lcy5oKQorIExSWlNaX0hFQURFUlNfVEVSTV9JTworIEFDX0NIRUNLX0hFQURFUlModGVybWlvcy5oIHN5cy90ZXJtaW9zLmggdGVybWlvLmggc3lzL3Rlcm1pby5oIHNndHR5LmgpCisgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvbW1hbi5oIHV0aW1lLmggc3lzbG9nLmggc3lzL3N5c2xvZy5oIHN5cy9wYXJhbS5oKQorLUFDX0NIRUNLX0hFQURFUlMoc3lzL3NlbGVjdC5oIHN0cmluZ3MuaCBhcnBhL2luZXQuaCkKKytBQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzdHJpbmdzLmggbG9jYWxlLmggYXJwYS9pbmV0LmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfVFlQRV9TSVpFX1QKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDUyOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgY29uZmlndXJlLmluOjk1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisuLi4KK3wgbGliL01ha2VmaWxlLmFtOjM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgbGliL01ha2VmaWxlLmFtOiBpbnN0YWxsaW5nICcuL2RlcGNvbXAnCit8IHNyYy9NYWtlZmlsZS5hbToxMTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxyenN6LTAuMTIuMjAub3JpZy9jb25maWd1cmUuaW4KKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorQEAgLTkyLDcgKzkyLDYgQEAgQUNfUFJPR19SQU5MSUIKKyBBQ19JU0NfUE9TSVgKKyBBQ19BSVgKKyBBQ19NSU5JWAorLUFNX0NfUFJPVE9UWVBFUworIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQorIAorSW5kZXg6IGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHJ6c3otMC4xMi4yMC5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDUgQEAKKyBub2luc3RfTElCUkFSSUVTPWxpYnptb2RlbS5hCisgQ0ZMQUdTPUBDRkxBR1NACistQVVUT01BS0VfT1BUSU9OUz1hbnNpMmtucgorIAorIEVYVFJBX0RJU1QgPSBhbGxvY2EuYyBhbnNpMmtuci4xIGFuc2kya25yLmMgXAorIAlnZXRvcHQuYyBnZXRvcHQxLmMgbWtkaXIuYyBta3RpbWUuYyBcCitJbmRleDogbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBscnpzei0wLjEyLjIwLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KK0BAIC04LDcgKzgsNiBAQCBDRkxBR1M9QENGTEFHU0AKKyBESVNUQ0xFQU5fRklMRVM9bHJ6c3pidWcKKyAKKyBMREFERCA9IC4uL2xpYi9saWJ6bW9kZW0uYSBATElCSU5UTEAKKy1BVVRPTUFLRV9PUFRJT05TPWFuc2kya25yCisgRVhUUkFfRElTVCA9IGFuc2kya25yLjEgYW5zaTJrbnIuYyBscnpzemJ1Zy5pbgorIElOQ0xVREVTID0gLUkuLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2Rpcikvc3JjIC1JLi4vaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisgI0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ET1M9XCJAaG9zdF9vc0BcIiAtRENQVT1cIkBob3N0X2NwdUBcIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTU5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluIGxyenN6LTAuMTIuMjBfcGF0Y2gvc3JjL01ha2VmaWxlLmluCistLS0gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluCTE5OTgtMTItMzAgMTc6MzE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbHJ6c3otMC4xMi4yMF9wYXRjaC9zcmMvTWFrZWZpbGUuaW4JMjAwNC0wNC0yOSAxMzo1NzozMy40MzQ5MDk2NTYgKzAyMDAKK0BAIC0zNzIsMTMgKzM3MiwxMyBAQAorIAlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCistCXJtIC1mICQoYmluZGlyKS9gZWNobyBsc3ggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisrCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKy0Jcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxyYiB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKysJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorLQlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorKwlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCisgIwlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ6c3pidWcgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6XzAuMTIuMjAuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6XzAuMTIuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjZTU3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB6bW9kZW0veG1vZGVtL3ltb2RlbSBmaWxlIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiTHJ6c3ogaXMgYSBjb3NtZXRpY2FsbHkgbW9kaWZpZWQgem1vZGVtL3ltb2RlbS94bW9kZW0gcGFja2FnZSBidWlsdCBmcm9tIFwKK3RoZSBwdWJsaWMtZG9tYWluIHZlcnNpb24gb2YgQ2h1Y2sgRm9yc2JlcmcncyByenN6IHBhY2thZ2UuIFwKK1RoZXNlIHByb2dyYW1zIHVzZSBlcnJvciBjb3JyZWN0aW5nIHByb3RvY29scyAoe3oseCx5fW1vZGVtKSB0byBzZW5kIChzeiwgc3gsIHNiKSBhbmQgXAorcmVjZWl2ZSAocnosIHJ4LCByYikgZmlsZXMgb3ZlciBhIGRpYWwtaW4gc2VyaWFsIHBvcnQgZnJvbSBhIHZhcmlldHkgb2YgcHJvZ3JhbXMgXAorcnVubmluZyB1bmRlciB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zLiAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9oc2UuZGUvdXdlL3NvZnR3YXJlL2xyenN6Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly9zcmMvbHJ6LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9NTI3Njk1NjM3M2ZmN2Q4NzU4ODM3ZjYzOTlhMTA0NWYiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vaHNlLmRlL3V3ZS9yZWxlYXNlcy9scnpzei0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisJICAgZmlsZTovL2dldHRleHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9hY2RlZmluZS5wYXRjaCBcCisJICAgZmlsZTovL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI1Y2U2YTc0YWJjOWI5ZWIyYWY5NGRmZmRmZDM3MmE0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMyOGIzNmIxNGJkZGIwMTRkOWU5Yzk3YzUyNDU5ODUyZjk3YmQ0MDVmODkxMTNmMzBiZWU0NWVkOTI3MjhmZjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IHNyYy9scnogc3JjL2xzeiAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJyeiByeCByYiBzeiBzeCBzYiIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J6XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3J4XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3JiXSA9ICIke2JpbmRpcn0vbHJ6IgorCitBTFRFUk5BVElWRV9UQVJHRVRbc3pdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc3hdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc2JdID0gIiR7YmluZGlyfS9sc3oiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YzlmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKy0tLQorCis3LzMwLzIwMTAgLSByZWJhc2VkIHRvIDMuMS41IGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorMS8yMi8yMDEyIC0gcmViYXNlZCB0byAzLjEuOSBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciBhZjJiMTBjYzNjMTQgTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvTWFrZWZpbGUJU3VuIEphbiAyMiAxODozODo1NCAyMDEyICswODAwCitAQCAtMzcsNyArMzcsNiBAQAorICMgQ29tbWFuZHMKKyBJTlNUQUxMPWluc3RhbGwKKyBESVJJTlNUQUxMPWluc3RhbGwgLWQKKy1TVFJJUD0tcworIENDPSQoQ1JPU1NfQ09NUElMRSlnY2MKKyBBUj0kKENST1NTX0NPTVBJTEUpYXIKKyBSQU5MSUI9JChDUk9TU19DT01QSUxFKXJhbmxpYgorQEAgLTg2LDcgKzg1LDcgQEAKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExETElCUykgLW8gJEAKKysJJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisgCisgJS44ICUuNzogJS5tYW4KKyAJTT1gZWNobyAkKERBVEUpIHwgc2VkICdzLy0wMS0vLUphbnVhcnktLztzLy0wMi0vLUZlYnJ1YXJ5LS87cy8tMDMtLy1NYXJjaC0vO3MvLTA0LS8tQXByaWwtLztzLy0wNS0vLU1heS0vO3MvLTA2LS8tSnVuZS0vO3MvLTA3LS8tSnVseS0vO3MvLTA4LS8tQXVndXN0LS87cy8tMDktLy1TZXB0ZW1iZXItLztzLy0xMC0vLU9jdG9iZXItLztzLy0xMS0vLU5vdmVtYmVyLS87cy8tMTItLy1EZWNlbWJlci0vO3MvXCguKlwpLVwoLipcKS1cKC4qXCkvXDMgXDIgXDEvJ2AgOyBzZWQgPCQ8ID4kQCAicy9AVE9EQVlALyQkTS87cy9AVkVSU0lPTkAvcGNpdXRpbHMtJChWRVJTSU9OKS87cyNASURTRElSQCMkKElEU0RJUikjIgorQEAgLTEwMSw3ICsxMDAsNyBAQAorIGluc3RhbGw6IGFsbAorICMgLWMgaXMgaWdub3JlZCBvbiBMaW51eCwgYnV0IHJlcXVpcmVkIG9uIEZyZWVCU0QKKyAJJChESVJJTlNUQUxMKSAtbSA3NTUgJChERVNURElSKSQoU0JJTkRJUikgJChERVNURElSKSQoSURTRElSKSAkKERFU1RESVIpJChNQU5ESVIpL21hbjggJChERVNURElSKSQoTUFORElSKS9tYW43CistCSQoSU5TVEFMTCkgLWMgLW0gNzU1ICQoU1RSSVApIGxzcGNpIHNldHBjaSAkKERFU1RESVIpJChTQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSBsc3BjaSBzZXRwY2kgJChERVNURElSKSQoU0JJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA3NTUgdXBkYXRlLXBjaWlkcyAkKERFU1RESVIpJChTQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCAkKFBDSV9JRFMpICQoREVTVERJUikkKElEU0RJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA2NDQgbHNwY2kuOCBzZXRwY2kuOCB1cGRhdGUtcGNpaWRzLjggJChERVNURElSKSQoTUFORElSKS9tYW44CitkaWZmIC1yIGFmMmIxMGNjM2MxNCBsaWIvY29uZmlndXJlCistLS0gYS9saWIvY29uZmlndXJlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvbGliL2NvbmZpZ3VyZQlTdW4gSmFuIDIyIDE4OjM4OjU0IDIwMTIgKzA4MDAKK0BAIC0xNCw2ICsxNCwxMCBAQAorIAlmaQorIH0KKyAKKytWRVJTSU9OPSQxCisrSURTRElSPSQyCisrRE5TPXllcworKworIGlmIFsgLXogIiRWRVJTSU9OIiAtbyAteiAiJElEU0RJUiIgXSA7IHRoZW4KKyAJZWNobyA+JjIgIlBsZWFzZSBydW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZnJvbSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIgorIAlleGl0IDEKK0BAIC0yMSw4ICsyNSw4IEBACisgCisgZWNob19uICJDb25maWd1cmluZyBsaWJwY2kgZm9yIHlvdXIgc3lzdGVtLi4uIgorIGlmIFsgLXogIiRIT1NUIiBdIDsgdGhlbgorLQlzeXM9YHVuYW1lIC1zYAorLQlyZWw9YHVuYW1lIC1yYAorKwlzeXM9JHszOi1gdW5hbWUgLXNgfQorKwlyZWw9CisgCXJlYWxzeXM9IiRzeXMiCisgCWlmIFsgIiRzeXMiID0gIkFJWCIgLWEgLXggL3Vzci9iaW4vb3NsZXZlbCAtYSAteCAvdXNyL3NiaW4vbHNhdHRyIF0KKyAJdGhlbgorQEAgLTMwLDcgKzM0LDcgQEAKKyAJCXByb2M9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIC1GIG5hbWUgfCBoZWFkIC0xYAorIAkJY3B1PWAvdXNyL3NiaW4vbHNhdHRyIC1GIHZhbHVlIC1sICRwcm9jIC1hIHR5cGUgfCBzZWQgJ3MvXy4qLy8nYAorIAllbHNlCistCQljcHU9YHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYAorKwkJY3B1PSR7NDotYHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYH0KKyAJZmkKKyAJaWYgWyAiJHN5cyIgPSAiR05VL2tGcmVlQlNEIiAtbyAiJHN5cyIgPSAiRHJhZ29uRmx5IiBdCisgCXRoZW4KK0BAIC00MCw3ICs0NCw3IEBACisgCXRoZW4KKyAJCXN5cz1jeWd3aW4KKyAJZmkKKy0JSE9TVD0kezM6LSRjcHUtJHN5c30KKysJSE9TVD0kY3B1LSRzeXMKKyBmaQorIFsgLW4gIiRSRUxFQVNFIiBdICYmIHJlbD0iJHtSRUxFQVNFfSIKKyAjIENBVkVBVDogdHIgb24gU29sYXJpcyBpcyBhIGJpdCB3ZWlyZCBhbmQgdGhlIGV4dHJhIFtdIGlzIG90aGVyd2lzZSBoYXJtbGVzcy4KK0BAIC00OSw2ICs1MywyMSBAQAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorK2lmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKyt0aGVuCisrCXN5cz1saW51eAorK2ZpCisrCisgYz1jb25maWcuaAorIG09Y29uZmlnLm1rCisgZWNobyA+JGMgJyNkZWZpbmUgUENJX0NPTkZJR19IJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBiNGEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAordGhlIG9yaWdpbmFsIGd1ZXNzIGFsZ29yaXRobSBpcyBicm9rZW4gZm9yIG1hbnkgYXJjaHMKK2ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byB3b3VsZCBicmVhazoKKwlhcm0tbGludXgtZ251ZWFiaSAgLS0+IHN5cz1nbnVlYWJpCisJeDg2XzY0LXVua25vd24tcGMtbGludXgtZ251ICAtLT4gc3lzID0gcGMtbGludXgtZ251CisKK3VzZSBhIHNpbXBsZXIgc2NoZW1lIGhlcmUgYW5kIGhvcGUgaXQgd29ya3MgZm9yIGFsbCB0aGUgY2FzZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzcvMzAvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWIvY29uZmlndXJlIGIvbGliL2NvbmZpZ3VyZQoraW5kZXggNDMxOGIwNS4uODRmNmFjYiAxMDA3NTUKKy0tLSBhL2xpYi9jb25maWd1cmUKKysrKyBiL2xpYi9jb25maWd1cmUKK0BAIC01MywyMCArNTMsNyBAQCBjcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKy10aGVuCistCXN5cz1saW51eAorLWZpCisreyBlY2hvICIkaG9zdCIgfCBncmVwIGxpbnV4OyB9ICYmIHN5cz1saW51eAorIAorIGM9Y29uZmlnLmgKKyBtPWNvbmZpZy5tawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmYmM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBJb251dCBSYWR1IDxpb251dHgucmFkdUBpbnRlbC5jb20+CisKK0luZGV4OiBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBjaXV0aWxzLTMuMi4wLm9yaWcvTWFrZWZpbGUKKysrKyBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorQEAgLTM1LDcgKzM1LDcgQEAgU0hBUkVESVI9JChQUkVGSVgpL3NoYXJlCisgSURTRElSPSQoU0hBUkVESVIpCisgTUFORElSOj0kKHNoZWxsIGlmIFsgLWQgJChQUkVGSVgpL3NoYXJlL21hbiBdIDsgdGhlbiBlY2hvICQoUFJFRklYKS9zaGFyZS9tYW4gOyBlbHNlIGVjaG8gJChQUkVGSVgpL21hbiA7IGZpKQorIElOQ0RJUj0kKFBSRUZJWCkvaW5jbHVkZQorLUxJQkRJUj0kKFBSRUZJWCkvbGliCisrTElCRElSPSQobGliZGlyKQorIFBLR0NGRElSPSQoTElCRElSKS9wa2djb25maWcKKyAKKyAjIENvbW1hbmRzCitAQCAtOTQsNyArOTQsNyBAQCBleGFtcGxlOiBleGFtcGxlLm8gbGliLyQoUENJTElCX0RFVikKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisrCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAkKExETElCUykgLW8gJEAKKyAKKyAlLjggJS43OiAlLm1hbgorIAlNPWBlY2hvICQoREFURSkgfCBzZWQgJ3MvLTAxLS8tSmFudWFyeS0vO3MvLTAyLS8tRmVicnVhcnktLztzLy0wMy0vLU1hcmNoLS87cy8tMDQtLy1BcHJpbC0vO3MvLTA1LS8tTWF5LS87cy8tMDYtLy1KdW5lLS87cy8tMDctLy1KdWx5LS87cy8tMDgtLy1BdWd1c3QtLztzLy0wOS0vLVNlcHRlbWJlci0vO3MvLTEwLS8tT2N0b2Jlci0vO3MvLTExLS8tTm92ZW1iZXItLztzLy0xMi0vLURlY2VtYmVyLS87cy9cKC4qXCktXCguKlwpLVwoLipcKS9cMyBcMiBcMS8nYCA7IHNlZCA8JDwgPiRAICJzL0BUT0RBWUAvJCRNLztzL0BWRVJTSU9OQC9wY2l1dGlscy0kKFZFUlNJT04pLztzI0BJRFNESVJAIyQoSURTRElSKSMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWE4Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjMuMS5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIlBDSSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICdUaGUgUENJIFV0aWxpdGllcyBwYWNrYWdlIGNvbnRhaW5zIGEgbGlicmFyeSBmb3IgcG9ydGFibGUgYWNjZXNzIFwKK3RvIFBDSSBidXMgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgc2V2ZXJhbCB1dGlsaXRpZXMgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LicKK0hPTUVQQUdFID0gImh0dHA6Ly9hdHJleS5rYXJsaW4ubWZmLmN1bmkuY3ovfm1qL3BjaXV0aWxzLnNodG1sIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorREVQRU5EUyA9ICJ6bGliIGttb2QiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS91dGlscy9wY2l1dGlscy9wY2l1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d1ZXNzLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjRjMzQwYTMxNzk4N2Q2MWExMWVlMmNmMTM5ZWYxMTkxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNGEzYmRiNzdlNGNkYmU5ZTk3MGUxODg1YWY0NmUwYmEyMDExYmY5NzM2NDM2OGM0NTVhZGUwZWRkNGUzYTkiCisKK2luaGVyaXQgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnaHdkYicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2h3ZGJdID0gIkhXREI9eWVzLEhXREI9bm8sdWRldiIKKworUENJX0NPTkZfRkxBRyA9ICJaTElCPXllcyBETlM9eWVzIFNIQVJFRD15ZXMiCisKKyMgc2VlIGNvbmZpZ3VyZS5wYXRjaAorZG9fY29uZmlndXJlICgpIHsKKwkoCisJICBjZCBsaWIgJiYgXAorCSAgIyBFWFRSQV9PRUNPTkYgZm9yIHRoaXMgcmVjaXBlIGNvdWxkIG9ubHkgcG9zc2libHkgY29udGFpbiAnSFdEQj15ZXMvbm8nLCBzbyB3ZSBwdXQgaXQKKwkgICMgYmVmb3JlIC4vY29uZmlndXJlCisJICAke1BDSV9DT05GX0ZMQUd9ICR7RVhUUkFfT0VDT05GfSAuL2NvbmZpZ3VyZSAke1BWfSAke2RhdGFkaXJ9ICR7VEFSR0VUX09TfSAke1RBUkdFVF9BUkNIfQorCSkKK30KKworZXhwb3J0IFBSRUZJWCA9ICIke3ByZWZpeH0iCitleHBvcnQgU0JJTkRJUiA9ICIke3NiaW5kaXJ9IgorZXhwb3J0IFNIQVJFRElSID0gIiR7ZGF0YWRpcn0iCitleHBvcnQgTUFORElSID0gIiR7bWFuZGlyfSIKKworRVhUUkFfT0VNQUtFICs9ICIke1BDSV9DT05GX0ZMQUd9IgorCisjIFRoZSBjb25maWd1cmUgc2NyaXB0IGJyZWFrcyBpZiB0aGUgSE9TVCB2YXJpYWJsZSBpcyBzZXQKK0hPU1RbdW5leHBvcnRdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwgaW5zdGFsbC1saWIKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWxuIC1zIC4uL3NiaW4vbHNwY2kgJHtEfSR7YmluZGlyfS9sc3BjaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHBjaS9jb25maWcuaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0taWRzIGxpYnBjaSIKK0ZJTEVTXyR7UE59LWlkcyA9ICIke2RhdGFkaXJ9L3BjaS5pZHMqIgorRklMRVNfbGlicGNpID0gIiR7bGliZGlyfS9saWJwY2kuc28uKiIKK1NVTU1BUllfJHtQTn0taWRzID0gIlBDSSB1dGlsaXRpZXMgLSBkZXZpY2UgSUQgZGF0YWJhc2UiCitERVNDUklQVElPTl8ke1BOfS1pZHMgPSAiUGFja2FnZSBwcm92aWRpbmcgdGhlIFBDSSBkZXZpY2UgSUQgZGF0YWJhc2UgZm9yIHBjaXV0aWxzLiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1pZHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjAxMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDVhNzkzYTFhOWZiMzQ3NzcxOWFhYmY3ZTI3ZmYyMmVkMWFjZGY1NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE5IE1heSAyMDE1IDE1OjU0OjI0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBhIHBhcmFsbGVsIGJ1aWxkaW5nIGlzc3VlCisKK0ZpeGVkOgorfCAgIHNyYy9sZXhfY29uZmlnLmM6MzQ6MjU6IGZhdGFsIGVycm9yOiB5YWNjX2NvbmZpZy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8Cit8ICAgICNpbmNsdWRlICJ5YWNjX2NvbmZpZy5oIgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCit8ICAgY29tcGlsYXRpb24gdGVybWluYXRlZC4KKworQW5kOgorQ29tcGlsaW5nIGxleF9jb25maWcuYy4KKyAgc3JjL2xleF9jb25maWcubDozNDoyNTogZmF0YWwgZXJyb3I6IHlhY2NfY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RoZXJlIGFyZSB0d28gTWFrZWZpbGUgcnVsZXMgdG8gZ2VuZXJhdGUgbGV4X2NvbmZpZy5vLCBvbmUgaXMgdG8gZ2VuZXJhdGUKK2xleF9jb25maWcubyBvdGhlciBpcyB0byBnZW5lcmF0ZSBzcmMvbGV4X2NvbmZpZy5vLCBzbyB3ZSBjYW4gcmVtb3ZlIG9uZS4KK2FuZCBhZGQgdGhlIG5lZWRlZCBkZXBlbmRlbmNlIGZvciBsZXhfY29uZmlnLm8KKworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8IDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDQ1ZmRjMy4uNGM1M2JjMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTI0Niw4ICsyNDYsNyBAQCAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCk6ICQoTElCQykgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZworIAkkKFFVSUVUKSAkKExEKSAkKExERkxBR1MpIC1vICRAICQoQ1JUMCkgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZy5vICQoTElCX09CSlMpICQoQVJDSF9MSUJfT0JKUykKKyAJJChRVUlFVCkgJChTVFJJUENNRCkgJEAKKyAKKy15YWNjX2NvbmZpZy5vIGxleF9jb25maWcubzogJS5vOiAlLmMKKy0JJChDQykgLWMgLU1EIC1PIC1waXBlICQoQ1BQRkxBR1MpICQ8Cisrc3JjL2xleF9jb25maWcubzpzcmMveWFjY19jb25maWcuaAorIAorIGRlYnVndG9vbHM6IGNjZHYgJChDQkRVTVApICQoQ0lTRFVNUCkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvbWFrZWZpbGVfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvbWFrZWZpbGVfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMGNlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSGFyZGNvZGVkIHBhdGhzIGFyZSBiYWQuLi4KK1RoaXMgbGV0cyB1cyB1c2UgdGhlIGluc3RhbGwgZnJvbSBPRSdzIG5hdGl2ZSBzeXNyb290CityZWJhc2UgdGhlIHBhdGNoIHRvIDAxOCwgcmVtb3ZpbmcgaGFyZGNvZGVkIHBhdGggZm9yIHRydWUKK2FzIHdlbGwuIFJlbW92aW5nIG9mIC1EIGluIGluc3RhbGwgaW52b2NhdGlvbiBpcyBhIGxpdHRsZQorcXVlc3Rpb25hYmxlLCBpcyBpdCBzb21lIEdOVSBleHRlbnRpb24/CisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGNtY2lhdXRpbHMtMDE4L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGNtY2lhdXRpbHMtMDE4Lm9yaWcvTWFrZWZpbGUKKysrKyBwY21jaWF1dGlscy0wMTgvTWFrZWZpbGUKK0BAIC03Niw3ICs3Niw3IEBAIHNiaW5kaXIgPQkke2V4ZWNfcHJlZml4fS9zYmluCisgbWFuZGlyID0JJHtwcmVmaXh9L3Vzci9zaGFyZS9tYW4KKyB1ZGV2ZGlyID0JJHtwcmVmaXh9L2xpYi91ZGV2CisgCistSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKKytJTlNUQUxMID0gaW5zdGFsbCAtYworIElOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KKyBJTlNUQUxMX0RBVEEgID0gJHtJTlNUQUxMfSAtbSA2NDQKKyBJTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTF9QUk9HUkFNfQorQEAgLTE4MCw3ICsxODAsNyBAQCBlbmRpZgorICMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKKyBpZmVxICgkKHN0cmlwICQoREVCVUcpKSx0cnVlKQorIAlDRkxBR1MgICs9IC1PMSAtZyAtRERFQlVHIC1EX0dOVV9TT1VSQ0UKKy0JU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKKysJU1RSSVBDTUQgPSB0cnVlIC1TaW5jZV93ZV9hcmVfZGVidWdnaW5nCisgZWxzZQorIAlDRkxBR1MgICs9ICQoT1BUSU1JWkFUSU9OKSAtZm9taXQtZnJhbWUtcG9pbnRlciAtRF9HTlVfU09VUkNFCisgCVNUUklQQ01EID0gJChTVFJJUCkgLXMgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50CitAQCAtMjczLDMwICsyNzMsMzIgQEAgY2xlYW46CisgCisgaW5zdGFsbC1ob3RwbHVnOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKGhvdHBsdWdkaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYS5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhLnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLmFnZW50CisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYS5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEucmMKKyAKKyB1bmluc3RhbGwtaG90cGx1ZzoKKyAJLSBybSAtZiAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLnJjCisgCisgaW5zdGFsbC1zb2NrZXQtaG90cGx1ZzoKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LmFnZW50CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYV9zb2NrZXQucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWFfc29ja2V0LmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LnJjCisgCisgdW5pbnN0YWxsLXNvY2tldC1ob3RwbHVnOgorIAktIHJtIC1mICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworIAorIGluc3RhbGwtc29ja2V0LXRvb2xzOgorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgJChQQ01DSUFfU09DS0VUX1NUQVJUVVApICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKQorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfU09DS0VUX1NUQVJUVVApCisgCisgdW5pbnN0YWxsLXNvY2tldC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkKKyAKKyBpbnN0YWxsLXRvb2xzOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHNiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChQQ0NBUkRDVEwpCisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQodWRldmhlbHBlcmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoUENDQVJEQ1RMKSAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKKyAJJChTWU1MSU5LKSAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChMU1BDTUNJQSkKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EICQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKQorIAorIHVuaW5zdGFsbC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKK0BAIC0zMDUsMjIgKzMwNywyNCBAQCB1bmluc3RhbGwtdG9vbHM6CisgCisgaW5zdGFsbC1jb25maWc6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGNtY2lhY29uZmRpcikKKy0JJChJTlNUQUxMX0RBVEEpICAtRCBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKysJJChJTlNUQUxMX0RBVEEpICBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAJaWYgWyAtZiBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSBdOyB0aGVuIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAtRCBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0czsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGNvbmZpZy9jb25maWcub3B0cy4kKEFSQ0gpICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzOyBcCisgCWZpCisgCisgdW5pbnN0YWxsLWNvbmZpZzoKKyAjCS0gcm0gLWYgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAKKyBpbnN0YWxsLXVkZXY6CistCSQoSU5TVEFMTF9EQVRBKSAtRCAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpCisrCSQoSU5TVEFMTF9EQVRBKSAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKyAKKyB1bmluc3RhbGwtdWRldjoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpLzYwLXBjbWNpYS5ydWxlcworIAorIGluc3RhbGwtbWFuOgorLQkkKElOU1RBTExfREFUQSkgLUQgbWFuL21hbjgvcGNjYXJkY3RsLjggJChERVNURElSKSQobWFuZGlyKS9tYW44L3BjY2FyZGN0bC44CisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQobWFuZGlyKS9tYW44CisrCSQoSU5TVEFMTF9EQVRBKSBtYW4vbWFuOC9wY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGNjYXJkY3RsLjgKKyAJJChTWU1MSU5LKSBwY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvbHNwY21jaWEuOAorIAorIHVuaW5zdGFsbC1tYW46CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWM1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCB1c2VybGFuZCB1dGlsaXRpZXMgZm9yIHRoZSBQQ01DSUEgc3Vic3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8iCitTRUNUSU9OID0gImtlcm5lbC91c2VybGFuZCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInVkZXYgc3lzZnN1dGlscyBmbGV4LW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYgbW9kdWxlLWluaXQtdG9vbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL21pcnJvci5saW51eC5vcmcuYXUvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8ke0JQfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vcGNtY2lhdXRpbHMtJHtQVn0iCisKK2V4cG9ydCBIT1NUQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgZXRjZGlyID0gIiR7c3lzY29uZmRpcn0iCitleHBvcnQgc2JpbmRpciA9ICIke2Jhc2Vfc2JpbmRpcn0iCitleHBvcnQgcGNtY2lhY29uZmRpciA9ICIke3N5c2NvbmZkaXJ9L3BjbWNpYSIKK2V4cG9ydCB1ZGV2ZGlyID0gImBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YCIKK2V4cG9ydCB1ZGV2cnVsZXNkaXIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQiCitleHBvcnQgVURFViA9ICIxIgorTEQgPSAiJHtDQ30iCitDRkxBR1MgPSsgIi1JJHtTfS9zcmMiCitDRkxBR1MgPSsgIi1EUENNQ0lBVVRJTFNfVkVSU0lPTj1cXCIke1BWfVxcIiIKKworRVhUUkFfT0VNQUtFID0gIi1lICdTVFJJUD1lY2hvJyAnTElCX09CSlM9LWxjIC1sc3lzZnMnICdMRVg9ZmxleCciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vcGNtY2lhL2NvbmZpZy5vcHRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdiZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBwY21jaWF1dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL21ha2VmaWxlX2ZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZDg1NjY5YjM0NDBiYWE0NTMyMzYzZGE2Y2FhZjFiNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWU2YWU0NDEyNzhlMTc4YzA3NTAxZDQ5MjM5NGVkMmMwMzI2ZmRiNjY4OTRmNmQwNDBlYzgxMWIwZGM4ZWQ1IgorCitQUiA9ICJyMSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIqL3VkZXYvLmRlYnVnICovKi91ZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ICs9ICIqL3VkZXYgKi8qL3VkZXYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BtLXV0aWxzL3BtLXV0aWxzXzEuNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9wbS11dGlscy9wbS11dGlsc18xLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM1MTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wbS11dGlscy9wbS11dGlsc18xLjQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTRUNUSU9OID0gImJhc2UiCitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgc2NyaXB0cyBmb3IgcG93ZXIgbWFuYWdlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBzaGVsbCBjb21tYW5kIGxpbmUgdG9vbHMgdG8gc3VzcGVuZCBhbmQgaGliZXJuYXRlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wbS11dGlscy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BtLXBtdS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PTNjMWRkYmM1NGU3MzVmYjRhMDM4NmUxNGM3OGEzMTQ3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG0tdXRpbHMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL3BtLXV0aWxzLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjE3NDJhNTU2MDg5YzM2YzNhODllYjFiOTU3ZGE1YTYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlZDg5OTAzMjg2NmQ4OGIyOTMzYTFkMzRjYzc1ZThhZTQyZGNkZTIwZTFjYzIxODM2YmFhYWUzZDQzNzBjMGIiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scworCitSREVQRU5EU18ke1BOfSA9ICJncmVwIGJhc2giCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307IGF1dG9yZWNvbmYgLWYgLWkgLXMgKQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L2Jpbi8uZGVidWcgXAorCQkgICAgJHtkYXRhZGlyfS9kb2MvcG0tdXRpbHMvUkVBRE1FLmRlYnVnZ2luZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjUyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9DT1BZSU5HCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBpcyBhIGJsYW5rIENPUFlJTkcgZmlsZSwgYW5kIHNob3VsZCBiZSBmaWxsZWQgaW4gYnkgb3JpZ2luYWwgYXV0aG9yIGluIGZ1dHVyZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ni9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVtaXBzL3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNmUzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2LTY0L3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2LTY0L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMDUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACisxMjgwIDAgMTAwMiAwIDk2MCAzMjggNjU1MzYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwNTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzEyODAgMCAxMDAyIDAgOTYwIDMyOCA2NTUzNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzM1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBkYXRhIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjVmY2ZjODdmYjYxNTg2MGQzOThiNWUzODY4NWVkZiIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9pbnRlcmNhbCBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBPbmx5IGluc3RhbGwgZmlsZSBpZiBpdCBoYXMgYSBjb250ZW50cworCWlmIFsgLXMgJHtTfS9wb2ludGVyY2FsIF07IHRoZW4KKwkgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2FkZF9zdGRsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0ZjI2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhpcyBwYXRjaCBhZGRlcyBzdGRsaWIuaCB0byBmaXggY29tcGlsZXIgd2FybmluZ3MgZHVlIHRvIHRoZSBleGl0CisjIGJ1aWx0LWluIG5vdCBiZWluZyBkZWZpbmVkIGFuZCBnZXR0aW5nIGFuIGluY29ycmVjdCBpbXBsaWNpdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDcmVhdGVkLWJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKKy0tLSBzZXRzZXJpYWwtMi4xNy9zZXRzZXJpYWwuYwkyMDEwLTA5LTAyIDE0OjExOjI3LjU2OTc2MzA4OCAtMDcwMAorKysrIHNldHNlcmlhbC0yLjE3X2ZpeGVkL3NldHNlcmlhbC5jCTIwMTAtMDktMDIgMTQ6MTE6MDguNTQ2MjY0MTM5IC0wNzAwCitAQCAtMTEsNiArMTEsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dGVybWlvcy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzRhZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHNldHNlcmlhbC0yLjE3Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzZXRzZXJpYWwtMi4xNy9NYWtlZmlsZS5pbgorQEAgLTEzLDYgKzEzLDcgQEAgU1RSSVAgPSBAU1RSSVBACisgQ0MgPSBAQ0NACisgUk0gPSBybSAtZgorIENGTEFHUyA9IEBDRkxBR1NACisrTERGTEFHUyA9IEBMREZMQUdTQAorIERFRlMgPSBAREVGU0AKKyBJTkNTID0gLUkuCisgVEFSID0gdGFyCitAQCAtMjAsNyArMjEsNyBAQCBUQVIgPSB0YXIKKyBhbGw6IHNldHNlcmlhbCBzZXRzZXJpYWwuY2F0CisKKyBzZXRzZXJpYWw6IHNldHNlcmlhbC5jCistCSQoQ0MpICQoQ0ZMQUdTKSAkKERFRlMpICQoSU5DUykgc2V0c2VyaWFsLmMgLW8gc2V0c2VyaWFsCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoREVGUykgJChJTkNTKSBzZXRzZXJpYWwuYyAtbyBzZXRzZXJpYWwKKworIHNldHNlcmlhbC5jYXQ6IHNldHNlcmlhbC44CisJbnJvZmYgLW1hbiBzZXRzZXJpYWwuOCA+IHNldHNlcmlhbC5jYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsXzIuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiZGRkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQ29udHJvbHMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc2VyaWFsIHBvcnRzIgorREVTQ1JJUFRJT04gPSAic2V0c2VyaWFsIGlzIGEgcHJvZ3JhbSBkZXNpZ25lZCB0byBzZXQgYW5kL29yIHJlcG9ydCB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzZXJpYWwgcG9ydCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZXRzZXJpYWwuc291cmNlZm9yZ2UubmV0IgorQVVUSE9SID0gIlRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT02O21kNT0yZTdjNTljYjllNTdlMzU2YWU4MWY1MGY0ZTRkZmQ5OSIKK1BSID0gInIzIgorCitERVBFTkRTICs9ICJncm9mZi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zZXRzZXJpYWwvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfc3RkbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM0ODY3ZDcyYzQxNTY0MzE4ZTAxMDc3NDVlYjdhMGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdlNDQ4N2QzMjBhYzMxNTU4NTYzNDI0MTg5NDM1ZDM5NmRkZjc3OTUzYmIyMzExMWExN2EzZDE0ODdiNTc5NGEiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3NldHNlcmlhbCAgICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXRzZXJpYWwuOCAke0R9JHttYW5kaXJ9L21hbjgKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTUuMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmN2EwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgZndfcHJpbnRlbnYvc2V0ZW52IHV0aWxpdGllcyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT0wNTA3Y2Q3ZGE4ZTdhZDZkNjcwMTkyNmVjOWI4NGM5NSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKK0RFUEVORFMgPSAibXRkLXV0aWxzIgorCisjIFRoaXMgcmV2aXNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRhZyAidjIwMTUuMDciCisjIFdlIHVzZSB0aGUgcmV2aXNpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGZldGNoIGl0IGZyb20gdGhlCisjIHJlcG8gZHVyaW5nIHBhcnNlCitTUkNSRVYgPSAiMzM3MTFiZGQ0YTRkY2U5NDJmYjVhZTg1YTY4ODk5YTgzNTdiZGQ5NCIKKworUFYgPSAidjIwMTUuMDcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhbHJlYWR5LXN0cmlwcGVkIgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBWPTEnCitFWFRSQV9PRU1BS0VfY2xhc3MtY3Jvc3MgPSAnQVJDSD0ke1RBUkdFVF9BUkNIfSBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFY9MScKKworaW5oZXJpdCB1Ym9vdC1jb25maWcKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9CisJb2VfcnVubWFrZSBlbnYKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZndfcHJpbnRlbnYKKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3NldGVudgorCWluc3RhbGwgLW0gMDY0NCAke1N9L3Rvb2xzL2Vudi9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKK30KKworZG9faW5zdGFsbF9jbGFzcy1jcm9zcyAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3N9CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19wcmludGVudgorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfc2V0ZW52Cit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19jbGFzcy1jcm9zcyA9ICJ1Ym9vdF9md191dGlsc19jcm9zcyIKK3Vib290X2Z3X3V0aWxzX2Nyb3NzKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3N9Cit9CisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitCQkNMQVNTRVhURU5EID0gImNyb3NzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNS4wNy5iYiBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTUuMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyOWJiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTUuMDcuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJVLUJvb3QgYm9vdGxvYWRlciBpbWFnZSBjcmVhdGlvbiB0b29sIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlcy9SRUFETUU7bWQ1PTA1MDdjZDdkYThlN2FkNmQ2NzAxOTI2ZWM5Yjg0Yzk1IgorU0VDVElPTiA9ICJib290bG9hZGVyIgorCitERVBFTkRTID0gIm9wZW5zc2wiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGVueC5kZS91LWJvb3QuZ2l0O2JyYW5jaD1tYXN0ZXIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICdDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IiBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFNUUklQPXRydWUgVj0xJworCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIHNhbmRib3hfZGVmY29uZmlnCisJb2VfcnVubWFrZSBjcm9zc190b29scyBOT19TREw9MQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9vbHMvbWtpbWFnZSAke0R9JHtiaW5kaXJ9L3Vib290LW1raW1hZ2UKKwlsbiAtc2YgdWJvb3QtbWtpbWFnZSAke0R9JHtiaW5kaXJ9L21raW1hZ2UKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2ZmZkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKQEAgLTAsMCArMSwyOTAgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEJvb3QgTG9hZGVyIGZvciBlbWJlZGRlZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZW54LmRlL3dpa2kvVS1Cb290L1dlYkhvbWUiCitTRUNUSU9OID0gImJvb3Rsb2FkZXJzIgorUFJPVklERVMgPSAidmlydHVhbC9ib290bG9hZGVyIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2VzL1JFQURNRTttZDU9MDUwN2NkN2RhOGU3YWQ2ZDY3MDE5MjZlYzliODRjOTUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHVib290LWNvbmZpZyBkZXBsb3kKKworRVhUUkFfT0VNQUtFID0gJ0NST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RPT0xDSEFJTl9PUFRJT05TfSIgVj0xJworRVhUUkFfT0VNQUtFICs9ICdIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IicKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCisjIHUtYm9vdCB3aWxsIGNvbXBpbGUgaXRzIG93biB0b29scyBkdXJpbmcgdGhlIGJ1aWxkLCB3aXRoIHNwZWNpZmljCisjIGNvbmZpZ3VyYXRpb25zIChha2Egd2hlbiBDT05GSUdfRklUX1NJR05BVFVSRSBpcyBlbmFibGVkKSBvcGVuc3NsIGlzIG5lZWRlZCBhcworIyBhIGhvc3QgYnVpbGQgZGVwZW5kZW5jeS4KK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLCxvcGVuc3NsLW5hdGl2ZSIKKworIyBBbGxvdyBzZXR0aW5nIGFuIGFkZGl0aW9uYWwgdmVyc2lvbiBzdHJpbmcgdGhhdCB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUKKyMgdS1ib290IGJ1aWxkIHN5c3RlbSBhbmQgYXBwZW5kZWQgdG8gdGhlIHUtYm9vdCB2ZXJzaW9uLiAgSWYgdGhlIC5zY212ZXJzaW9uCisjIGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4uCitVQk9PVF9MT0NBTFZFUlNJT04gPz0gIiIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCB1c2UgLmJpbiBhbmQgb3RoZXJzIHVzZSAuaW1nLiAgQnkgZGVmYXVsdCB1c2UgLmJpbgorIyBidXQgZW5hYmxlIGluZGl2aWR1YWwgcmVjaXBlcyB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4KK1VCT09UX1NVRkZJWCA/Pz0gImJpbiIKK1VCT09UX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9CSU5BUlkgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9TWU1MSU5LID89ICJ1LWJvb3QtJHtNQUNISU5FfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9NQUtFX1RBUkdFVCA/PSAiYWxsIgorCisjIE91dHB1dCB0aGUgRUxGIGdlbmVyYXRlZC4gU29tZSBwbGF0Zm9ybXMgY2FuIHVzZSB0aGUgRUxGIGZpbGUgYW5kIGRpcmVjdGx5CisjIGxvYWQgaXQgKEpUQUcgYm9vdGluZywgUUVNVSkgYWRkaXRpb25hbGx5IHRoZSBFTEYgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZworIyBwdXJwb3Nlcy4KK1VCT09UX0VMRiA/PSAiIgorVUJPT1RfRUxGX1NVRkZJWCA/PSAiZWxmIgorVUJPT1RfRUxGX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9IgorVUJPT1RfRUxGX0JJTkFSWSA/PSAidS1ib290LiR7VUJPT1RfRUxGX1NVRkZJWH0iCitVQk9PVF9FTEZfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uJHtVQk9PVF9FTEZfU1VGRklYfSIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCBidWlsZCBhbiBTUEwgKFNlY29uZCBQcm9ncmFtIExvYWRlcikgaW1hZ2UgdGhhdAorIyBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB0aGUgdS1ib290IGJpbmFyeSBhcyB3ZWxsIGFzIHBsYWNlZCBpbiB0aGUKKyMgZGVwbG95IGRpcmVjdG9yeS4gIEZvciB0aG9zZSB2ZXJzaW9ucyB0aGV5IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKKyMgdG8gYWxsb3cgcGFja2FnaW5nIHRoZSBTUEwuCitTUExfQklOQVJZID89ICIiCitTUExfSU1BR0UgPz0gIiR7U1BMX0JJTkFSWX0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfSIKK1NQTF9TWU1MSU5LID89ICIke1NQTF9CSU5BUll9LSR7TUFDSElORX0iCisKKyMgQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYSBzY3JpcHQgY2FuIGJlIGluc3RhbGxlZCBhbG9uZ3NpZGUKKyMgdS1ib290IHRvIGJlIHVzZWQgYXV0b21hdGljYWxseSBvbiBib290LiAgVGhpcyBmaWxlLCB0eXBpY2FsbHkgJ3VFbnYudHh0JworIyBvciAnYm9vdC5zY3InLCBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB1LWJvb3QgYXMgd2VsbCBhcyBwbGFjZWQgaW4gdGhlCisjIGRlcGxveSBkaXJlY3RvcnkuICBNYWNoaW5lIGNvbmZpZ3VyYXRpb25zIG5lZWRpbmcgb25lIG9mIHRoZXNlIGZpbGVzIHNob3VsZAorIyBpbmNsdWRlIGl0IGluIHRoZSBTUkNfVVJJIGFuZCBzZXQgdGhlIFVCT09UX0VOViBwYXJhbWV0ZXIuCitVQk9PVF9FTlZfU1VGRklYID89ICJ0eHQiCitVQk9PVF9FTlYgPz0gIiIKK1VCT09UX0VOVl9CSU5BUlkgPz0gIiR7VUJPT1RfRU5WfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX0lNQUdFID89ICIke1VCT09UX0VOVn0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX1NZTUxJTksgPz0gIiR7VUJPT1RfRU5WfS0ke01BQ0hJTkV9LiR7VUJPT1RfRU5WX1NVRkZJWH0iCisKK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICdsZC1pcy1nb2xkJywgJycsIGQpfSIgPSAibGQtaXMtZ29sZCIgXSA7IHRoZW4KKwkJc2VkIC1pICdzLyQoQ1JPU1NfQ09NUElMRSlsZCQvJChDUk9TU19DT01QSUxFKWxkLmJmZC9nJyBjb25maWcubWsKKwlmaQorCisJdW5zZXQgTERGTEFHUworCXVuc2V0IENGTEFHUworCXVuc2V0IENQUEZMQUdTCisKKwlpZiBbICEgLWUgJHtCfS8uc2NtdmVyc2lvbiAtYSAhIC1lICR7U30vLnNjbXZlcnNpb24gXQorCXRoZW4KKwkJZWNobyAke1VCT09UX0xPQ0FMVkVSU0lPTn0gPiAke0J9Ly5zY212ZXJzaW9uCisJCWVjaG8gJHtVQk9PVF9MT0NBTFZFUlNJT059ID4gJHtTfS8uc2NtdmVyc2lvbgorCWZpCisgICAgCisgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGZvciB0eXBlICBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtjb25maWd9CisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtVQk9PVF9NQUtFX1RBUkdFVH0KKyAgICAgICAgICAgICAgICAgICAgY3AgICR7U30vJHtjb25maWd9LyR7VUJPT1RfQklOQVJZfSAgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgIGRvbmUKKyAgICAgICAgdW5zZXQgIGkKKyAgICBlbHNlCisgICAgICAgIG9lX3J1bm1ha2UgJHtVQk9PVF9NQUNISU5FfQorICAgICAgICBvZV9ydW5tYWtlICR7VUJPT1RfTUFLRV9UQVJHRVR9CisgICAgZmkKKworfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9L3UtYm9vdC0ke3R5cGV9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCAgagorICAgICAgICBkb25lCisgICAgICAgIHVuc2V0ICBpCisgICAgZWxzZQorICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0lNQUdFfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9JTUFHRX0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIHVuc2V0IGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0IGkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0VMRl9CSU5BUll9CisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgLWUgJHtXT1JLRElSfS9md19lbnYuY29uZmlnIF0gOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKKyAgICBmaQorCisgICAgaWYgWyAieCR7U1BMX0JJTkFSWX0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICB0aGVuCisgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7U1BMX0JJTkFSWX0gJHtEfS9ib290LyR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7RH0vYm9vdC8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1NQTF9CSU5BUll9ICR7RH0vYm9vdC8ke1NQTF9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9FTlZfQklOQVJZfQorICAgIGZpCit9CisKK0ZJTEVTXyR7UE59ID0gIi9ib290ICR7c3lzY29uZmRpcn0iCisjIEVuc3VyZSB0aGUgc3BsaXQgZGVidWcgcGFydCBvZiBhbnkgZWxmIGZpbGVzIGFyZSBwdXQgaW50byBkYmcKK0ZJTEVTXyR7UE59LWRiZyArPSAiL2Jvb3QvLmRlYnVnIgorCitkb19kZXBsb3kgKCkgeworICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7REVQTE9ZRElSfS91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgZmkgCisgICAgICAgICAgICBkb25lIAorICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgZG9uZQorICAgICAgICB1bnNldCAgaQorICAgIGVsc2UKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKyAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9JTUFHRX0KKyAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgIHJtIC1mICR7VUJPT1RfQklOQVJZfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX0JJTkFSWX0KKyAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgagorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9FTEZ9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX1NZTUxJTkt9CisgICAgICAgIGZpCisgICAgZmkKKworCisgICAgIGlmIFsgIngke1NQTF9CSU5BUll9IiAhPSAieCIgXQorICAgICB0aGVuCisgICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICAgdGhlbgorICAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9CisgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfQorICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgZmkKKyAgICAgZmkKKworCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfU1lNTElOS30KKyAgICBmaQorfQorCithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiY2Q0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2gKQEAgLTAsMCArMSwxODQgQEAKK0Zyb20gOTI1OThlMTUxNWIyZWMzODUxYWYxZjA2NDA3NWQwNDU3ZjAxMjcyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDE4OjMzOjU2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGMvY3B1LyovdS1ib290Ki5sZHM6IHJlbW92ZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8KKyBkZWZpbml0aW9uCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitJbiBiaW51dGlscy0yLjI1LCB0aGUgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHN5bWJvbHMgZGVmaW5lZCBieSBQUk9WSURFIGluCit1LWJvb3QubGRzIG92ZXJyaWRlcyB0aGUgbGlua2VyIGJ1aWx0LWluIHN5bWJvbHMKKyhodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9naXR3ZWIuY2dpP3A9YmludXRpbHMtZ2RiLmdpdDthPWNvbW1pdGRpZmY7aD1iODkzMzk3YTRiMTMxNjYxMGY0OTgxOTM0NDgxNzcxNWU0MzA1ZGU5KSwKK3NvIHRoZSBsaW5rZXIgaXMgdHJlYXRpbmcgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGFzIGEgZGVmaW5pdGlvbiBpbnRvIHRoZSAucmVsb2Mgc2VjdGlvbi4KKworVG8gYWxpZ24gd2l0aCB0aGUgY2hhbmdlIG9mIGJpbnV0aWxzLTIuMjUsIHRoZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3ltYm9sCitzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gc2VjdGlvbnMsIGFuZCB0aGUgc3ltYm9scyBpbiBsaW5rZXIgZ2VuZXJhdGVkIC5nb3QKK3NlY3Rpb24gc2hvdWxkIGJlIHVzZWQoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA4LTA5L21zZzAwMTIyLmh0bWwpLgorCitGaXhlZCB0aGUgZm9sbG93aW5nIGJ1aWxkIGVycm9ycyB3aXRoIGJpbnV0aWxzLTIuMjU6Cit8IHBvd2VycGMtcG9reS1saW51eC1nbnVzcGUtbGQuYmZkOiBfR0xPQkFMX09GRlNFVF9UQUJMRV8gbm90IGRlZmluZWQgaW4gbGlua2VyIGNyZWF0ZWQgLmdvdAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMgICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcyAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcyAgICAgICAgICAgfCAxIC0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK2luZGV4IDk2NThiMjEuLmIzMmY3NGUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK0BAIC0yNCw3ICsyNCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgICAgKiguZml4dXApCitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMKK2luZGV4IDcxOTg0NjUuLjZhNTM1NzEgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCitAQCAtMzMsNyArMzMsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworaW5kZXggY2Q5ZTIzZi4uYWE4MGQzZCAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworQEAgLTI4LDcgKzI4LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK2luZGV4IDUwY2JmODUuLjQ2OWZjMjkgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK0BAIC0yNyw3ICsyNyw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDc3NDc3MmIuLjQxMDFlYWYgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI0LDcgKzI0LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCX0KKyAJX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOworIAorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK2luZGV4IDNjMTc3ZmEuLmRiZDhiYmUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK0BAIC0yNiw3ICsyNiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworaW5kZXggZjkzM2IyMS4uMDM5OWY5MyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKK0BAIC00NCw3ICs0NCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitpbmRleCBiODNjNTUzLi5mMDQ0NTY0IDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitAQCAtMjIsNyArMjIsNiBAQCBTRUNUSU9OUworIAkJX0dPVDJfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZ290MikpCisgCQlLRUVQKCooLmdvdCkpCistCQlQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAJCV9GSVhVUF9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5maXh1cCkpCisgCX0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDVhZTdiM2UuLjg4OWE0YzIgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI5LDcgKzI5LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCQlfRklYVVBfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZml4dXApKQorIAl9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworaW5kZXggMmNmMGIyNS4uZjE1ZWFmMyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworQEAgLTUwLDcgKzUwLDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK2luZGV4IDU4NDY3YzIuLjZjNDhmNDAgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK0BAIC0zMiw3ICszMiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcworaW5kZXggMTk4MDUwOC4uNTVkZDRlMSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKK0BAIC00Niw3ICs0Niw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KKy0tIAorMi40LjYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNS4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ2YzMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB1LWJvb3QuaW5jCisKK0RFUEVORFMgKz0gImR0Yy1uYXRpdmUiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgS0NGTEFHUz0tZmdudTg5LWlubGluZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhNDRiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiSW5pdHNjcmlwdCBmb3IgZW5hYmxpbmcgVVNCIGdhZGdldCBFdGhlcm5ldCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWUlORy5HUEw7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmaWxlOi8vdXNiLWdldGhlciBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHVzYi1nZXRoZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAidXNiLWdldGhlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMIGIvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvQ09QWUlORy5HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L3VzYi1nZXRoZXIgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC91c2ItZ2V0aGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4MGEwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC91c2ItZ2V0aGVyCkBAIC0wLDAgKzEsMjMgQEAKKyMhIC9iaW4vc2gKKyMKKyMgdXNiLWV0aGVyIAlTdGFydCB1cCB0aGUgZ2FkZ2V0IHVzYiBldGhlcm5ldCBpbnRlcmZhY2UuCisjCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0fCIiKQorCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiSW5pdGlhbGl6aW5nIGdfZXRoZXIgZ2FkZ2V0Li4uIgorCQltb2Rwcm9iZSBnX2V0aGVyCisJCWlmdXAgdXNiMAorCQk7OworCXN0b3ApCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJEaXNhYmxpbmcgZ19ldGhlci4uLiIKKwkJaWZkb3duIHVzYjAKKwkJcm1tb2QgZ19ldGhlcgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiB1c2ItZXRoZXIge3N0YXJ0fHN0b3B9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzLTAwOC9pY29udi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU1NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRldGVjdGluZyBpY29udiBzdXBwb3J0IHVzaW5nIGF1dG90b29scwordWNsaWJjIGRvZXMgbm90IGhhdmUgaWNvbnYgaW1wbGVtZW50YXRpb24gaW5zaWRlIGxpYmMgbGlrZSBnbGliYywgdGhlcmVmb3JlCit0aGUgZXhpc3RpbmcgY2hlY2tzIHdlcmUgbm90IHN1ZmZpY2llbnQsIGl0IHdvcmtlZCBmb3IgZ2xpYmMgYnV0IG5vdCBmb3IKK3VjbGliYy4gVGhlIG5ldyBwYXRjaCBwb3J0YWJseSBkZXRlY3RzIHRoZSBpY29udiBzdXBwb3J0IGFuZCBhZGRzIHRoZQorbGliaWNvbnYgdG8gbGlua2VyIGNtZGxpbmUKKworVGhpcyBwYXRjaCBzaG91bGQgYmUgc3VibWl0dGVkIHVwc3RyZWFtIHRvbworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHVzYnV0aWxzLTAwOC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDgub3JpZy9jb25maWd1cmUuYWMKKysrKyB1c2J1dGlscy0wMDgvY29uZmlndXJlLmFjCitAQCAtMTAsNyArMTAsOSBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhbYnl0ZXN3YXAuaF0pCistQUNfQ0hFQ0tfRlVOQ1MoW25sX2xhbmdpbmZvIGljb252XSkKKysKKytBTV9HTlVfR0VUVEVYVAorK0FNX0lDT05WCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCVVNCLCBsaWJ1c2ItMS4wID49IDEuMC4wKQorIAorSW5kZXg6IHVzYnV0aWxzLTAwOC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwOC5vcmlnL01ha2VmaWxlLmFtCisrKysgdXNidXRpbHMtMDA4L01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksOCBAQCBsc3VzYl9DUFBGTEFHUyA9IFwKKyAKKyBsc3VzYl9MREFERCA9IFwKKyAJJChMSUJVU0JfTElCUykgXAorLQkkKFVERVZfTElCUykKKysJJChVREVWX0xJQlMpIFwKKysJJChMSUJJQ09OVikKKyAKKyBtYW5fTUFOUyA9IFwKKyAJbHN1c2IuOAlcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmZGM1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGaXggTlVMTCBwb2ludGVyIGNyYXNoLgorCitCZWZvcmUgdXNlIHVzYmJ1c2xpc3QsIHdlIHNob3VsZCBjaGVjayBpZiBpdCBpcyB2YWxpZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsc3VzYi10LmMgfCAgICA0ICsrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xzdXNiLXQuYyBiL2xzdXNiLXQuYworaW5kZXggZjYwNDE1NS4uNTgzYTQ2YSAxMDA2NDQKKy0tLSBhL2xzdXNiLXQuYworKysrIGIvbHN1c2ItdC5jCitAQCAtNjQzLDYgKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBzb3J0X2J1c3Nlcyh2b2lkKQorIAkvKiBuZWVkIHRvIHJldmVyc2Ugc29ydCBidXMgbnVtYmVycyAqLworIAlzdHJ1Y3QgdXNiYnVzbm9kZSAqdCwgKnAsICoqcHA7CisgCWludCBzd2FwcGVkOworKworKwlpZiAoIXVzYmJ1c2xpc3QpCisrCQlyZXR1cm47CisrCisgCWRvIHsKKyAJCXAgPSB1c2JidXNsaXN0OworIAkJcHAgPSAmdXNiYnVzbGlzdDsKKy0tIAorMS43LjQuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL2ljb252LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9pY29udi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTU3MzM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9pY29udi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIGljb252IHN1cHBvcnQgdXNpbmcgYXV0b3Rvb2xzCit1Y2xpYmMgZG9lcyBub3QgaGF2ZSBpY29udiBpbXBsZW1lbnRhdGlvbiBpbnNpZGUgbGliYyBsaWtlIGdsaWJjLCB0aGVyZWZvcmUKK3RoZSBleGlzdGluZyBjaGVja3Mgd2VyZSBub3Qgc3VmZmljaWVudCwgaXQgd29ya2VkIGZvciBnbGliYyBidXQgbm90IGZvcgordWNsaWJjLiBUaGUgbmV3IHBhdGNoIHBvcnRhYmx5IGRldGVjdHMgdGhlIGljb252IHN1cHBvcnQgYW5kIGFkZHMgdGhlCitsaWJpY29udiB0byBsaW5rZXIgY21kbGluZQorCitUaGlzIHBhdGNoIHNob3VsZCBiZSBzdWJtaXR0ZWQgdXBzdHJlYW0gdG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogdXNidXRpbHMtMDA3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHVzYnV0aWxzLTAwNy9jb25maWd1cmUuYWMKK0BAIC0xMCw3ICsxMCw5IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19DSEVDS19IRUFERVJTKFtieXRlc3dhcC5oXSkKKy1BQ19DSEVDS19GVU5DUyhbbmxfbGFuZ2luZm8gaWNvbnZdKQorKworK0FNX0dOVV9HRVRURVhUCisrQU1fSUNPTlYKKyAKKyBBQ19BUkdfRU5BQkxFKHpsaWIsCisgCUFTX0hFTFBfU1RSSU5HKC0tZGlzYWJsZS16bGliLGRpc2FibGUgc3VwcG9ydCBmb3IgemxpYikpCitJbmRleDogdXNidXRpbHMtMDA3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA3Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyB1c2J1dGlscy0wMDcvTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGxzdXNiX0NQUEZMQUdTID0gXAorIAktRERBVEFESVI9XCIkKGRhdGFkaXIpXCIKKyAKKyBsc3VzYl9MREFERCA9IFwKKy0JJChMSUJVU0JfTElCUykKKysJJChMSUJVU0JfTElCUykgJChMSUJJQ09OVikKKyAKKyBpZiBIQVZFX1pMSUIKKyBsc3VzYl9DUFBGTEFHUyArPSAtREhBVkVfTElCWgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmIyNDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMzNkNWZiYmMwMzQ4MWYxYWEyMjJiZDY4YzI2MDlkYjE2OGFlM2UwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEp1bCAyMDEyIDEwOjM3OjMyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzYi1kZXZpY2VzOiBhdm9pZCBkZXBlbmRlbmN5IG9uIGJhc2gKKworQnkgdmlydHVlIG9mIGhhdmluZyAjIS9iaW4vYmFzaCB0aGlzIHNjcmlwdCBkZWNsYXJlZCB0aGF0IGl0IHJlcXVpcmVzCitiYXNoLCBob3dldmVyIG1hbnVhbCBleGFtaW5hdGlvbiwgY2hlY2tiYXNoaXNtcyBhbmQgdGVzdHMgd2l0aCBkYXNoCithbmQgYnVzeWJveCBzaG93IHRoYXQgaXQgZG9lc24ndCBjb250YWluIGFueSBiYXNoaXNtcywgc28gY2hhbmdlIHRoZQoraGVhZGVyIHRvIGF2b2lkIHRoZSBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyB1c2ItZGV2aWNlcyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VzYi1kZXZpY2VzIGIvdXNiLWRldmljZXMKK2luZGV4IGIyMDUyZTIuLjE0YTUzNTggMTAwNzU1CistLS0gYS91c2ItZGV2aWNlcworKysrIGIvdXNiLWRldmljZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBDb3B5cmlnaHQ6IDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAjICAgICAgICAgICAgMjAwOSBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzYjJiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiSG9zdCBzaWRlIFVTQiBjb25zb2xlIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkNvbnRhaW5zIHRoZSBsc3VzYiB1dGlsaXR5IGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgVVNCIGJ1cy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmciCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAibGlidXNiIHpsaWIgdmlydHVhbC9saWJpY29udiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3VzYi91c2J1dGlscy91c2J1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmM0MjI5NGJlNWM5NDBmMjA4MTkwZDM0NzlkNTBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2NWMyMzRjYWRmN2M4MWI2YjE1NjdjNDQwZTNiOWIzMWI0NGY1MWMyN2RmM2U0NTc0MWI4ODg0OGQ4YjM3ZDMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2Ugb25seSBuZWVkIHRoZSBjb21wcmVzc2VkIGNvcHksIHJlbW92ZSB0aGUgdW5jb21wcmVzc2VkIHZlcnNpb24KKwlybSAtZiAke0R9JHtkYXRhZGlyfS91c2IuaWRzCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1pZHMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnIgorRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vdXNiKiIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjJkOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJIb3N0IHNpZGUgVVNCIGNvbnNvbGUgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIGxzdXNiIHV0aWxpdHkgZm9yIGluc3BlY3RpbmcgdGhlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBVU0IgYnVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtdXNiLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ1c2IgemxpYiB2aXJ0dWFsL2xpYmljb252IHN5c3RlbWQiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy91c2IvdXNidXRpbHMvdXNidXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYjIwMTQ4YzJlNzg0NTc3ZTkyNGE3YjRjNTYwYzhmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDVmMTZjMjk2MWRmMzdlMjJlNDkyYzczNmEzZTE2MmE4ZmRlMjQ0ODBmMjNhNDBkODVmNzlhZjgwZDNmZTk1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgVGhpcyB2ZXJzaW9uIG9mIHVzYnV0aWxzIHJlbGllcyBvbiB0aGUgdWRldiBmcm9tIHN5c3RlbWQsIHNvIHVubGVzcyAKKyMgd2UgY2FuIGRlY291cGxlIHVkZXYgZnJvbSBzeXN0ZW0sIHdlIHJlcXVpcmUgc3lzdGVtZCBmb3Igbm93LgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWciCisKK1JERVBFTkRTXyR7UE59ID0gImxpYnVkZXYiCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJsaWJib29zdC1zeXN0ZW0gbGliYm9vc3QtdGhyZWFkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOWUyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2gKQEAgLTAsMCArMSwyMTc2NiBAQAorRnJvbSAxYTQxMGFlNThmMjhlZWFiMzJmYTg3NjI2Y2ZkNWE2NjNiYTMzYzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQmVybmhhcmQgV2FsbGUgPGJlcm5oYXJkQGJ3YWxsZS5kZT4KK0RhdGU6IFR1ZSwgMTMgTWF5IDIwMTQgMjM6NDA6NTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFVwZGF0ZSB4ODZlbXUgZnJvbSBYLm9yZworCitUaGlzIGNvbW1pdCB1cGRhdGVzIHRoZSB4ODZlbXUgY29weSBmcm9tIFgub3JnIHRhcmJhbGwKKyhmdHA6Ly9taXJyb3IuY3NjbHViLnV3YXRlcmxvby5jYS94Lm9yZy9jdXJyZW50L3NyYy94c2VydmVyL3hvcmctc2VydmVyLTEuMTIuMi50YXIuYnoyKS4KKworVGhpcyBmaXhlcyBhIGNvbXBhdGliaWxpdHkgaXNzdWUgYmV0d2VlbiB2ODZkIGFuZCBTZWFCSU9TIFZHQSBCSU9TIHdoZXJlCit0aGUgbGVhbCBpbnN0cnVjdGlvbiBpcyBub3QgZGVjb2RlZCBwcm9wZXJseS4gUmVhZCB0aGUKK2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuZW11bGF0b3JzLnFlbXUvMjcxODA2IHRocmVhZCBmb3IgbW9yZQorZGV0YWlscy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmRAYndhbGxlLmRlPgorLS0tCisgbGlicy94ODZlbXUvTElDRU5TRSAgICAgICAgICAgICAgIHwgICAxNyAtCisgbGlicy94ODZlbXUvZGVidWcuYyAgICAgICAgICAgICAgIHwgIDUwOSArKystLS0KKyBsaWJzL3g4NmVtdS9kZWNvZGUuYyAgICAgICAgICAgICAgfCAxMDY5ICsrKysrKy0tLS0tLQorIGxpYnMveDg2ZW11L2ZwdS5jICAgICAgICAgICAgICAgICB8ICA0NjMgKysrLS0tCisgbGlicy94ODZlbXUvb3BzLmMgICAgICAgICAgICAgICAgIHwgMjk0MCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9vcHMyLmMgICAgICAgICAgICAgICAgfCAxOTI5ICsrKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9wcmltX29wcy5jICAgICAgICAgICAgfCAzMjE5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9zeXMuYyAgICAgICAgICAgICAgICAgfCAgNTgzICsrKy0tLS0KKyBsaWJzL3g4NmVtdS92YWxpZGF0ZS5jICAgICAgICAgICAgfCAgIDUyICstCisgbGlicy94ODZlbXUveDg2ZW11LmggICAgICAgICAgICAgIHwgICA3NSArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oICAgICAgICB8ICAxNjMgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmggICAgICAgfCAgIDU3ICstCisgbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oICAgICAgICAgIHwgICAyMyArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oICAgICB8ICAgNDQgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvb3BzLmggICAgICAgICAgfCAgICA2ICstCisgbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggICAgIHwgIDI1MSArKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCAgICAgfCAgMTg4ICstLQorIGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaCB8ICAgNzcgKworIGxpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggICAgICAgICB8ICAxMDEgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCAgICAgICAgfCAgIDUwICstCisgbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaCAgICAgIHwgICAzNCArLQorIDIxIGZpbGVzIGNoYW5nZWQsIDYzNzkgaW5zZXJ0aW9ucygrKSwgNTQ3MSBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgbGlicy94ODZlbXUvTElDRU5TRQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKKworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L0xJQ0VOU0UgYi9saWJzL3g4NmVtdS9MSUNFTlNFCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGEzZWRlNGEuLjAwMDAwMDAKKy0tLSBhL2xpYnMveDg2ZW11L0xJQ0VOU0UKKysrKyAvZGV2L251bGwKK0BAIC0xLDE3ICswLDAgQEAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZSBpbmZvcm1hdGlvbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCistCistVGhlIHg4NmVtdSBsaWJyYXJ5IGlzIHVuZGVyIGEgQlNEIHN0eWxlIGxpY2Vuc2UsIGNvbWFwdGlibGUKKy13aXRoIHRoZSBYRnJlZTg2IGFuZCBYIGxpY2Vuc2VzIHVzZWQgYnkgWEZyZWU4Ni4gVGhlCistb3JpZ2luYWwgeDg2ZW11IGxpYnJhcmllcyB3ZXJlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy1MaWNlbnNlLiBEdWUgdG8gbGljZW5zZSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSBHUEwKKy1hbmQgdGhlIFhGcmVlODYgbGljZW5zZSwgdGhlIG9yaWdpbmFsIGF1dGhvcnMgb2YgdGhlIGNvZGUKKy1kZWNpZGVkIHRvIGFsbG93IGEgbGljZW5zZSBjaGFuZ2UuIElmIHlvdSBoYXZlIHN1Ym1pdHRlZAorLWNvZGUgdG8gdGhlIG9yaWdpbmFsIHg4NmVtdSBwcm9qZWN0LCBhbmQgeW91IGRvbid0IGFncmVlCistd2l0aCB0aGUgbGljZW5zZSBjaGFuZ2UsIHBsZWFzZSBjb250YWN0IHVzIGFuZCBsZXQgeW91Cista25vdy4gWW91ciBjb2RlIHdpbGwgYmUgcmVtb3ZlZCB0byBjb21wbHkgd2l0aCB5b3VyIHdpc2hlcy4KKy0KKy1JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMsIHBsZWFzZSBzZW5kIGVtYWlsIHRvCisteDg2ZW11QGxpbnV4bGFicy5jb20gb3IgS2VuZGFsbEJAc2NpdGVjaHNvZnQuY29tIGZvcgorLWNsYXJpZmljYXRpb24uCistCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZGVidWcuYyBiL2xpYnMveDg2ZW11L2RlYnVnLmMKK2luZGV4IDZmZDdmMTEuLjFhOGQxZDYgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWJ1Zy5jCisrKysgYi9saWJzL3g4NmVtdS9kZWJ1Zy5jCitAQCAtMzgsNiArMzgsOCBAQAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisgI2luY2x1ZGUgIng4NmVtdS94ODZlbXVpLmgiCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQ3LDQ2ICs0OSw1MSBAQAorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyB2b2lkICAgICBwcmludF9lbmNvZGVkX2J5dGVzICh1MTYgcywgdTE2IG8pOworLXN0YXRpYyB2b2lkICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKTsKKy1zdGF0aWMgaW50ICAgICAgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKTsKKy0gIAorK3N0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKTsKKytzdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKHZvaWQpOworK3N0YXRpYyBpbnQgcGFyc2VfbGluZShjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pOworKworIC8qIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIGRlYnVnJ3Mgb3V0cHV0LiAqLworLXZvaWQgWDg2RU1VX3RyYWNlX3JlZ3MgKHZvaWQpCisrdm9pZAorK1g4NkVNVV90cmFjZV9yZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfcmVncygpOworKyAgICBpZiAoREVCVUdfVFJBQ0UoKSkgeworKyAgICAgICAgeDg2ZW11X2R1bXBfcmVncygpOworICAgICB9CistCWlmIChERUJVR19ERUNPREUoKSAmJiAhIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkpIHsKKy0JCXByaW50aygiJTA0eDolMDR4ICIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JCXByaW50X2VuY29kZWRfYnl0ZXMoIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIGlmIChERUJVR19ERUNPREUoKSAmJiAhREVCVUdfREVDT0RFX05PUFJJTlQoKSkgeworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKyAgICAgfQorIH0KKyAKKy12b2lkIFg4NkVNVV90cmFjZV94cmVncyAodm9pZCkKKyt2b2lkCisrWDg2RU1VX3RyYWNlX3hyZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfeHJlZ3MoKTsKKysgICAgaWYgKERFQlVHX1RSQUNFKCkpIHsKKysgICAgICAgIHg4NmVtdV9kdW1wX3hyZWdzKCk7CisgICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSAodm9pZCkKKyt2b2lkCisreDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUodm9pZCkKKyB7CisgICAgIC8qCisgICAgICAqIFRoaXMgcm91dGluZSBjYWxsZWQgaWYgdGhlIGZsYWcgREVCVUdfRElTQVNTRU1CTEUgaXMgc2V0IGtpbmQKKyAgICAgICogb2YgYSBoYWNrIQorICAgICAgKi8KKy0JcHJpbnRrKCIlMDR4OiUwNHggIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9lbmNvZGVkX2J5dGVzKCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4ICIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKytzdGF0aWMgdm9pZAorK2Rpc2Fzc2VtYmxlX2ZvcndhcmQodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgeworLQlYODZFTVVfc3lzRW52IHRyZWdzOworLQlpbnQgaTsKKy0JdTggb3AxOworKyAgICBYODZFTVVfc3lzRW52IHRyZWdzOworKyAgICBpbnQgaTsKKysgICAgdTggb3AxOworKworICAgICAvKgorICAgICAgKiBoYWNrLCBoYWNrLCBoYWNrLiAgV2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGV4YWN0IG1hY2hpbmVyeSBzZXQgdXAKKyAgICAgICogZm9yIGV4ZWN1dGlvbiwgZXhjZXB0IHRoYXQgbm93IHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgc3RhdGUKK0BAIC0xMTEsMTcgKzExOCwxNyBAQCBzdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKyAgICAgICogVGhpcyB3YXMgZG9uZSBmb3IgYW4gZW50aXJlbHkgZGlmZmVyZW50IHJlYXNvbiwgYnV0IG1ha2VzIGEKKyAgICAgICogbmljZSB3YXkgdG8gZ2V0IHRoZSBzeXN0ZW0gdG8gaGVscCBkZWJ1ZyBjb2Rlcy4KKyAgICAgICovCistCXRyZWdzID0gTTsKKysgICAgdHJlZ3MgPSBNOworICAgICB0cmVncy54ODYuUl9JUCA9IG9mZjsKKyAgICAgdHJlZ3MueDg2LlJfQ1MgPSBzZWc7CistICAgIAorKworICAgICAvKiByZXNldCB0aGUgZGVjb2RpbmcgYnVmZmVycyAqLworICAgICB0cmVncy54ODYuZW5jX3N0cl9wb3MgPSAwOworICAgICB0cmVncy54ODYuZW5jX3BvcyA9IDA7CistICAgIAorKworICAgICAvKiB0dXJuIG9uIHRoZSAiZGlzYXNzZW1ibGUgb25seSwgbm8gZXhlY3V0ZSIgZmxhZyAqLworICAgICB0cmVncy54ODYuZGVidWcgfD0gREVCVUdfRElTQVNTRU1CTEVfRjsKKy0gCisrCisgICAgIC8qIERVTVAgTkVYVCBuIGluc3RydWN0aW9ucyB0byBzY3JlZW4gaW4gc3RyYWlnaHRfbGluZSBmYXNoaW9uICovCisgICAgIC8qCisgICAgICAqIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVndWxhciBpbnN0cnVjdGlvbiBmZXRjaCBzdHJlYW0sIGV4Y2VwdAorQEAgLTEzMCwyOTkgKzEzNywzNTkgQEAgc3RhdGljIHZvaWQgZGlzYXNzZW1ibGVfZm9yd2FyZCAodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgICAgICAqIHRoZSBpbnN0cnVjdGlvbi4gIFhYWCAtLS0gQ0hFQ0sgVEhBVCBNRU0gSVMgTk9UIEFGRkVDVEVEISEhCisgICAgICAqIE5vdGUgdGhlIHVzZSBvZiBhIGNvcHkgb2YgdGhlIHJlZ2lzdGVyIHN0cnVjdHVyZS4uLgorICAgICAgKi8KKy0gICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1M8PDQpICsgKE0ueDg2LlJfSVArKykpOworLQkJKHg4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICh4ODZlbXVfb3B0YWJbb3AxXSkgKG9wMSk7CisgICAgIH0KKyAgICAgLyogZW5kIG1ham9yIGhhY2sgbW9kZS4gKi8KKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpCisgeworICAgICAvKiBOVUxMIGFzIG9mIG5vdyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9jaGVja19zcF9hY2Nlc3Modm9pZCkKKyB7CisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MgKHUzMiBkdW1teSkKKyt2b2lkCisreDg2ZW11X2NoZWNrX21lbV9hY2Nlc3ModTMyIGR1bW15KQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyAodWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3ModWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbiAoaW50IHgpCisrdm9pZAorK3g4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCkKKyB7CistCU0ueDg2LmVuY19wb3MgKz0geDsKKysgICAgTS54ODYuZW5jX3BvcyArPSB4OworIH0KKyAKKy12b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmIChjaGFyICp4KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50Zihjb25zdCBjaGFyICp4KQorIHsKKy0Jc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZitNLng4Ni5lbmNfc3RyX3BvcywiJXMiLHgpOworLQlNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4oeCk7CisrICAgIHNwcmludGYoTS54ODYuZGVjb2RlZF9idWYgKyBNLng4Ni5lbmNfc3RyX3BvcywgIiVzIiwgeCk7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih4KTsKKyB9CisgCistdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIgKGNoYXIgKngsIGludCB5KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpCisgeworLQljaGFyIHRlbXBbMTAwXTsKKy0Jc3ByaW50Zih0ZW1wLHgseSk7CistCXNwcmludGYoTS54ODYuZGVjb2RlZF9idWYrTS54ODYuZW5jX3N0cl9wb3MsIiVzIix0ZW1wKTsKKy0JTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworKyAgICBjaGFyIHRlbXBbMTAwXTsKKysKKysgICAgc25wcmludGYodGVtcCwgc2l6ZW9mKHRlbXApLCB4LCB5KTsKKysgICAgc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZiArIE0ueDg2LmVuY19zdHJfcG9zLCAiJXMiLCB0ZW1wKTsKKysgICAgTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworIH0KKyAKKy12b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9lbmRfaW5zdHIodm9pZCkKKyB7CistCU0ueDg2LmVuY19zdHJfcG9zID0gMDsKKy0JTS54ODYuZW5jX3BvcyA9IDA7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zID0gMDsKKysgICAgTS54ODYuZW5jX3BvcyA9IDA7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXMgKHUxNiBzLCB1MTYgbykKKytzdGF0aWMgdm9pZAorK3ByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKQorIHsKKyAgICAgaW50IGk7CisgICAgIGNoYXIgYnVmMVs2NF07CistCWZvciAoaT0wOyBpPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKy0JCXNwcmludGYoYnVmMSsyKmksIiUwMngiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHMsbytpKSk7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKysgICAgICAgIHNwcmludGYoYnVmMSArIDIgKiBpLCAiJTAyeCIsIGZldGNoX2RhdGFfYnl0ZV9hYnMocywgbyArIGkpKTsKKyAgICAgfQorLQlwcmludGsoIiUtMjBzIixidWYxKTsKKysgICAgcHJpbnRrKCIlLTIwcyIsIGJ1ZjEpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKQorK3N0YXRpYyB2b2lkCisrcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbih2b2lkKQorIHsKKy0JcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKysgICAgcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKyB9CisgCistdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdikKKyt2b2lkCisreDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdikKKyB7CistCXUxNiBzZWcsb2ZmOworKyAgICB1MTYgc2VnLCBvZmY7CisgCistCWlmIChpdiA+IDI1NikgcmV0dXJuOworLQlzZWcgICA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCxpdio0KTsKKy0Jb2ZmICAgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsaXYqNCsyKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworKyAgICBpZiAoaXYgPiAyNTYpCisrICAgICAgICByZXR1cm47CisrICAgIHNlZyA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCwgaXYgKiA0KTsKKysgICAgb2ZmID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLCBpdiAqIDQgKyAyKTsKKysgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworIH0KKyAKKy12b2lkIFg4NkVNVV9kdW1wX21lbW9yeSAodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCkKKyt2b2lkCisrWDg2RU1VX2R1bXBfbWVtb3J5KHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpCisgeworLQl1MzIgc3RhcnQgPSBvZmYgJiAweGZmZmZmZmYwOworLQl1MzIgZW5kICA9IChvZmYrMTYpICYgMHhmZmZmZmZmMDsKKy0JdTMyIGk7CistCXUzMiBjdXJyZW50OworLQorLQljdXJyZW50ID0gc3RhcnQ7CistCXdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CistCQlwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKy0JCWZvciAoaT1zdGFydDsgaTwgb2ZmOyBpKyspCistCQkgIHByaW50aygiICAgIik7CistCQlmb3IgKCAgICAgICA7IGk8IGVuZDsgaSsrKQorLQkJICBwcmludGsoIiUwMnggIiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzZWcsaSkpOworLQkJcHJpbnRrKCJcbiIpOworLQkJc3RhcnQgPSBlbmQ7CistCQllbmQgPSBzdGFydCArIDE2OworLQl9CisrICAgIHUzMiBzdGFydCA9IG9mZiAmIDB4ZmZmZmZmZjA7CisrICAgIHUzMiBlbmQgPSAob2ZmICsgMTYpICYgMHhmZmZmZmZmMDsKKysgICAgdTMyIGk7CisrICAgIHUzMiBjdXJyZW50OworKworKyAgICBjdXJyZW50ID0gc3RhcnQ7CisrICAgIHdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CisrICAgICAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKysgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgb2ZmOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIgICAiKTsKKysgICAgICAgIGZvciAoOyBpIDwgZW5kOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIGZldGNoX2RhdGFfYnl0ZV9hYnMoc2VnLCBpKSk7CisrICAgICAgICBwcmludGsoIlxuIik7CisrICAgICAgICBzdGFydCA9IGVuZDsKKysgICAgICAgIGVuZCA9IHN0YXJ0ICsgMTY7CisrICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9zaW5nbGVfc3RlcCh2b2lkKQorIHsKKyAgICAgY2hhciBzWzEwMjRdOworICAgICBpbnQgcHNbMTBdOworICAgICBpbnQgbnRvazsKKyAgICAgaW50IGNtZDsKKyAgICAgaW50IGRvbmU7CistCQlpbnQgc2VnbWVudDsKKysgICAgaW50IHNlZ21lbnQ7CisgICAgIGludCBvZmZzZXQ7CisgICAgIHN0YXRpYyBpbnQgYnJlYWtwb2ludDsKKyAgICAgc3RhdGljIGludCBub0RlY29kZSA9IDE7CistICAgIAorKworICAgICBjaGFyICpwOworIAorLQkJaWYgKERFQlVHX0JSRUFLKCkpIHsKKy0JCQkJaWYgKE0ueDg2LnNhdmVkX2lwICE9IGJyZWFrcG9pbnQpIHsKKy0JCQkJCQlyZXR1cm47CistCQkJCX0gZWxzZSB7CistIAkgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQkJCQkJTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKy0JCQkJCQlNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKy0JCQkJCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICgpOworLQkJCQkJCVg4NkVNVV90cmFjZV9yZWdzKCk7CistCQkJCX0KKy0JCX0KKy0gICAgZG9uZT0wOworLQlvZmZzZXQgPSBNLng4Ni5zYXZlZF9pcDsKKysgICAgaWYgKERFQlVHX0JSRUFLKCkpIHsKKysgICAgICAgIGlmIChNLng4Ni5zYXZlZF9pcCAhPSBicmVha3BvaW50KSB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKysgICAgICAgICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBkb25lID0gMDsKKysgICAgb2Zmc2V0ID0gTS54ODYuc2F2ZWRfaXA7CisgICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICAgcHJpbnRrKCItIik7CisgICAgICAgICBwID0gZmdldHMocywgMTAyMywgc3RkaW4pOworICAgICAgICAgY21kID0gcGFyc2VfbGluZShzLCBwcywgJm50b2spOworLSAgICAgICAgc3dpdGNoKGNtZCkgeworLSAgICAgICAgICBjYXNlICd1JzoKKy0JCQlkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCh1MTYpb2Zmc2V0LDEwKTsKKysgICAgICAgIHN3aXRjaCAoY21kKSB7CisrICAgICAgICBjYXNlICd1JzoKKysgICAgICAgICAgICBkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCAodTE2KSBvZmZzZXQsIDEwKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZCc6ICAKKy0JCQkJCQkJaWYgKG50b2sgPT0gMikgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1sxXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgaWYgKG50b2sgPT0gMykgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBwc1sxXTsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1syXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9CisrICAgICAgICBjYXNlICdkJzoKKysgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisrICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHNbMV07CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChudG9rID09IDMpIHsKKysgICAgICAgICAgICAgICAgc2VnbWVudCA9IHBzWzFdOworKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwc1syXTsKKysgICAgICAgICAgICAgICAgWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsICh1MTYpIG9mZnNldCwgMTYpOworKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnYyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfVFJBQ0VDQUxMX0Y7CisrICAgICAgICBjYXNlICdjJzoKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyBePSBERUJVR19UUkFDRUNBTExfRjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAncyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworKyAgICAgICAgY2FzZSAncyc6CisrICAgICAgICAgICAgTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdyJzoKKy0JCQlYODZFTVVfdHJhY2VfcmVncygpOworKyAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAneCc6CistCQkJWDg2RU1VX3RyYWNlX3hyZWdzKCk7CisrICAgICAgICBjYXNlICd4JzoKKysgICAgICAgICAgICBYODZFTVVfdHJhY2VfeHJlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZyc6CisrICAgICAgICBjYXNlICdnJzoKKyAgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBwc1sxXTsKKy0JCWlmIChub0RlY29kZSkgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQl9IGVsc2UgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworLQkJfQorLQkJTS54ODYuZGVidWcgJj0gfkRFQlVHX1RSQUNFX0Y7CistCQlNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworLQkJZG9uZSA9IDE7CisrICAgICAgICAgICAgICAgIGlmIChub0RlY29kZSkgeworKyAgICAgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfREVDT0RFX05PUFJJTlRfRjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19UUkFDRV9GOworKyAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3EnOgorLSAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19FWElUOworLSAgICAgICAgICByZXR1cm47CistCSAgY2FzZSAnUCc6CistCSAgICAgIG5vRGVjb2RlID0gKG5vRGVjb2RlKT8wOjE7CistCSAgICAgIHByaW50aygiVG9nZ2xlZCBkZWNvZGluZyB0byAlc1xuIiwobm9EZWNvZGUpPyJGQUxTRSI6IlRSVUUiKTsKKy0JICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3QnOgorLQkgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgJ3EnOgorKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0VYSVQ7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgY2FzZSAnUCc6CisrICAgICAgICAgICAgbm9EZWNvZGUgPSAobm9EZWNvZGUpID8gMCA6IDE7CisrICAgICAgICAgICAgcHJpbnRrKCJUb2dnbGVkIGRlY29kaW5nIHRvICVzXG4iLCAobm9EZWNvZGUpID8gIkZBTFNFIiA6ICJUUlVFIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlICd0JzoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gICAKKysgICAgICAgIH0KKyAgICAgfQorIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29uKHZvaWQpCisraW50CisrWDg2RU1VX3RyYWNlX29uKHZvaWQpCisgeworLQlyZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworKyAgICByZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29mZih2b2lkKQorK2ludAorK1g4NkVNVV90cmFjZV9vZmYodm9pZCkKKyB7CistCXJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisrICAgIHJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisgfQorIAorLXN0YXRpYyBpbnQgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKQorK3N0YXRpYyBpbnQKKytwYXJzZV9saW5lKGNoYXIgKnMsIGludCAqcHMsIGludCAqbikKKyB7CisgICAgIGludCBjbWQ7CisgCisgICAgICpuID0gMDsKKy0gICAgd2hpbGUoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpIHMrKzsKKysgICAgd2hpbGUgKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKQorKyAgICAgICAgcysrOworICAgICBwc1sqbl0gPSAqczsKKyAgICAgc3dpdGNoICgqcykgeworLSAgICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXG4nOgorICAgICAgICAgKm4gKz0gMTsKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBjbWQgPSAqczsKKyAgICAgICAgICpuICs9IDE7CisgICAgIH0KKyAKKy0Jd2hpbGUgKDEpIHsKKy0JCXdoaWxlICgqcyAhPSAnICcgJiYgKnMgIT0gJ1x0JyAmJiAqcyAhPSAnXG4nKSAgcysrOworLQkJCistCQlpZiAoKnMgPT0gJ1xuJykKKy0JCQlyZXR1cm4gY21kOworLQkJCistCQl3aGlsZSgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykgcysrOworLQkJCistCQlzc2NhbmYocywiJXgiLCZwc1sqbl0pOworLQkJKm4gKz0gMTsKKy0JfQorKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgd2hpbGUgKCpzICE9ICcgJyAmJiAqcyAhPSAnXHQnICYmICpzICE9ICdcbicpCisrICAgICAgICAgICAgcysrOworKworKyAgICAgICAgaWYgKCpzID09ICdcbicpCisrICAgICAgICAgICAgcmV0dXJuIGNtZDsKKysKKysgICAgICAgIHdoaWxlICgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykKKysgICAgICAgICAgICBzKys7CisrCisrICAgICAgICBzc2NhbmYocywgIiV4IiwgJnBzWypuXSk7CisrICAgICAgICAqbiArPSAxOworKyAgICB9CisgfQorIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKy12b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9kdW1wX3JlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRBWD0lMDR4ICAiLCBNLng4Ni5SX0FYICk7CistCXByaW50aygiQlg9JTA0eCAgIiwgTS54ODYuUl9CWCApOworLQlwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1ggKTsKKy0JcHJpbnRrKCJEWD0lMDR4ICAiLCBNLng4Ni5SX0RYICk7CistCXByaW50aygiU1A9JTA0eCAgIiwgTS54ODYuUl9TUCApOworLQlwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlAgKTsKKy0JcHJpbnRrKCJTST0lMDR4ICAiLCBNLng4Ni5SX1NJICk7CistCXByaW50aygiREk9JTA0eFxuIiwgTS54ODYuUl9ESSApOworLQlwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyApOworLQlwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMgKTsKKy0JcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTICk7CistCXByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyApOworLQlwcmludGsoIklQPSUwNHggICAiLCBNLng4Ni5SX0lQICk7CistCWlmIChBQ0NFU1NfRkxBRyhGX09GKSkgICAgcHJpbnRrKCJPViAiKTsgICAgIC8qIENIRUNLRUQuLi4gKi8KKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlYgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgcHJpbnRrKCJETiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiVVAgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0lGKSkgICAgcHJpbnRrKCJFSSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiREkgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1NGKSkgICAgcHJpbnRrKCJORyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUEwgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1pGKSkgICAgcHJpbnRrKCJaUiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlogIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0FGKSkgICAgcHJpbnRrKCJBQyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkEgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1BGKSkgICAgcHJpbnRrKCJQRSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUE8gIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgICAgcHJpbnRrKCJDWSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkMgIik7CistCXByaW50aygiXG4iKTsKKysgICAgcHJpbnRrKCJcdEFYPSUwNHggICIsIE0ueDg2LlJfQVgpOworKyAgICBwcmludGsoIkJYPSUwNHggICIsIE0ueDg2LlJfQlgpOworKyAgICBwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1gpOworKyAgICBwcmludGsoIkRYPSUwNHggICIsIE0ueDg2LlJfRFgpOworKyAgICBwcmludGsoIlNQPSUwNHggICIsIE0ueDg2LlJfU1ApOworKyAgICBwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlApOworKyAgICBwcmludGsoIlNJPSUwNHggICIsIE0ueDg2LlJfU0kpOworKyAgICBwcmludGsoIkRJPSUwNHhcbiIsIE0ueDg2LlJfREkpOworKyAgICBwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyk7CisrICAgIHByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyk7CisrICAgIHByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyk7CisrICAgIHByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyk7CisrICAgIHByaW50aygiSVA9JTA0eCAgICIsIE0ueDg2LlJfSVApOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCisrICAgICAgICBwcmludGsoIk9WICIpOyAgICAgICAgICAvKiBDSEVDS0VELi4uICovCisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlYgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkKKysgICAgICAgIHByaW50aygiRE4gIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiVVAgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0lGKSkKKysgICAgICAgIHByaW50aygiRUkgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiREkgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1NGKSkKKysgICAgICAgIHByaW50aygiTkcgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUEwgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKKysgICAgICAgIHByaW50aygiWlIgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlogIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0FGKSkKKysgICAgICAgIHByaW50aygiQUMgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkEgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKKysgICAgICAgIHByaW50aygiUEUgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUE8gIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHByaW50aygiQ1kgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkMgIik7CisrICAgIHByaW50aygiXG4iKTsKKyB9CisgCistdm9pZCB4ODZlbXVfZHVtcF94cmVncyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2R1bXBfeHJlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRFQVg9JTA4eCAgIiwgTS54ODYuUl9FQVggKTsKKy0JcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlggKTsKKy0JcHJpbnRrKCJFQ1g9JTA4eCAgIiwgTS54ODYuUl9FQ1ggKTsKKy0JcHJpbnRrKCJFRFg9JTA4eCAgXG4iLCBNLng4Ni5SX0VEWCApOworLQlwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQICk7CistCXByaW50aygiRUJQPSUwOHggICIsIE0ueDg2LlJfRUJQICk7CistCXByaW50aygiRVNJPSUwOHggICIsIE0ueDg2LlJfRVNJICk7CistCXByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJICk7CistCXByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTICk7CistCXByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyApOworLQlwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MgKTsKKy0JcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTICk7CistCXByaW50aygiRUlQPSUwOHhcblx0IiwgTS54ODYuUl9FSVAgKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSAgICBwcmludGsoIk9WICIpOyAgICAgLyogQ0hFQ0tFRC4uLiAqLworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOViAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICBwcmludGsoIkROICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJVUCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfSUYpKSAgICBwcmludGsoIkVJICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJESSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfU0YpKSAgICBwcmludGsoIk5HICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfWkYpKSAgICBwcmludGsoIlpSICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOWiAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQUYpKSAgICBwcmludGsoIkFDICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfUEYpKSAgICBwcmludGsoIlBFICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTyAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSAgICBwcmludGsoIkNZICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQyAiKTsKKy0JcHJpbnRrKCJcbiIpOworKyAgICBwcmludGsoIlx0RUFYPSUwOHggICIsIE0ueDg2LlJfRUFYKTsKKysgICAgcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlgpOworKyAgICBwcmludGsoIkVDWD0lMDh4ICAiLCBNLng4Ni5SX0VDWCk7CisrICAgIHByaW50aygiRURYPSUwOHggIFxuIiwgTS54ODYuUl9FRFgpOworKyAgICBwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQKTsKKysgICAgcHJpbnRrKCJFQlA9JTA4eCAgIiwgTS54ODYuUl9FQlApOworKyAgICBwcmludGsoIkVTST0lMDh4ICAiLCBNLng4Ni5SX0VTSSk7CisrICAgIHByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJKTsKKysgICAgcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMpOworKyAgICBwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMpOworKyAgICBwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MpOworKyAgICBwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MpOworKyAgICBwcmludGsoIkVJUD0lMDh4XG5cdCIsIE0ueDg2LlJfRUlQKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorKyAgICAgICAgcHJpbnRrKCJPViAiKTsgICAgICAgICAgLyogQ0hFQ0tFRC4uLiAqLworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5WICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpCisrICAgICAgICBwcmludGsoIkROICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlVQICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9JRikpCisrICAgICAgICBwcmludGsoIkVJICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIkRJICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9TRikpCisrICAgICAgICBwcmludGsoIk5HICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBMICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisrICAgICAgICBwcmludGsoIlpSICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5aICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9BRikpCisrICAgICAgICBwcmludGsoIkFDICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5BICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCisrICAgICAgICBwcmludGsoIlBFICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBPICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICBwcmludGsoIkNZICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5DICIpOworKyAgICBwcmludGsoIlxuIik7CisgfQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L2RlY29kZS5jIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK2luZGV4IDdkOWEzNGEuLjEyZjhmYjggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWNvZGUuYworKysrIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK0BAIC00NiwyNSArNDYsMjcgQEAKKyBSRU1BUktTOgorIEhhbmRsZXMgYW55IHBlbmRpbmcgYXN5Y2hyb25vdXMgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdV9pbnRyX2hhbmRsZSh2b2lkKQorK3N0YXRpYyB2b2lkCisreDg2ZW11X2ludHJfaGFuZGxlKHZvaWQpCisgeworLQl1OAlpbnRubzsKKy0KKy0JaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSB7CistCQlpbnRubyA9IE0ueDg2LmludG5vOworLQkJaWYgKF9YODZFTVVfaW50clRhYltpbnRub10pIHsKKy0JCQkoKl9YODZFTVVfaW50clRhYltpbnRub10pKGludG5vKTsKKy0JCX0gZWxzZSB7CistCQkJcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworLQkJCUNMRUFSX0ZMQUcoRl9JRik7CistCQkJQ0xFQVJfRkxBRyhGX1RGKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9DUyk7CistCQkJTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQgKyAyKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistCQkJTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQpOworLQkJCU0ueDg2LmludHIgPSAwOworLQkJfQorLQl9CisrICAgIHU4IGludG5vOworKworKyAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpIHsKKysgICAgICAgIGludG5vID0gTS54ODYuaW50bm87CisrICAgICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgeworKyAgICAgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgKGludG5vKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKysgICAgICAgICAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCArIDIpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKysgICAgICAgICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCk7CisrICAgICAgICAgICAgTS54ODYuaW50ciA9IDA7CisrICAgICAgICB9CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC03NSwxMSArNzcsMTEgQEAgUkVNQVJLUzoKKyBSYWlzZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdCB0byBiZSBoYW5kbGVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIHRoZQorIG5leHQgaW5zdHJ1Y3Rpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHg4NmVtdV9pbnRyX3JhaXNlKAorLQl1OCBpbnRybnVtKQorK3ZvaWQKKyt4ODZlbXVfaW50cl9yYWlzZSh1OCBpbnRybnVtKQorIHsKKy0JTS54ODYuaW50bm8gPSBpbnRybnVtOworLQlNLng4Ni5pbnRyIHw9IElOVFJfU1lOQ0g7CisrICAgIE0ueDg2LmludG5vID0gaW50cm51bTsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX1NZTkNIOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTg4LDM5ICs5MCwzOSBAQCBNYWluIGV4ZWN1dGlvbiBsb29wIGZvciB0aGUgZW11bGF0b3IuIFdlIHJldHVybiBmcm9tIGhlcmUgd2hlbiB0aGUgc3lzdGVtCisgaGFsdHMsIHdoaWNoIGlzIG5vcm1hbGx5IGNhdXNlZCBieSBhIHN0YWNrIGZhdWx0IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlCisgb3JpZ2luYWwgcmVhbCBtb2RlIGNhbGwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9leGVjKHZvaWQpCisrdm9pZAorK1g4NkVNVV9leGVjKHZvaWQpCisgeworLQl1OCBvcDE7CistCistCU0ueDg2LmludHIgPSAwOworLQlEQih4ODZlbXVfZW5kX2luc3RyKCk7KQorLQorLSAgICBmb3IgKDs7KSB7CistREIoCQlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JCS8qIElmIGRlYnVnZ2luZywgc2F2ZSB0aGUgSVAgYW5kIENTIHZhbHVlcy4gKi8KKy0JCVNBVkVfSVBfQ1MoTS54ODYuUl9DUywgTS54ODYuUl9JUCk7CistCQlJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0JCWlmIChNLng4Ni5pbnRyKSB7CistCQkJaWYgKE0ueDg2LmludHIgJiBJTlRSX0hBTFRFRCkgeworLURCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgICAgICAgICAgICAgICAgICBwcmludGsoImhhbHRlZFxuIik7CistICAgICAgICAgICAgICAgICAgICBYODZFTVVfdHJhY2VfcmVncygpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKy0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlNlcnZpY2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIik7CistICAgICAgICAgICAgICAgICAgICB9KQorLQkJCQlyZXR1cm47CisrICAgIHU4IG9wMTsKKysKKysgICAgTS54ODYuaW50ciA9IDA7CisrICAgIERCKHg4NmVtdV9lbmRfaW5zdHIoKTsKKysgICAgICAgICkKKysKKysgICAgICAgIGZvciAoOzspIHsKKysgICAgICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgICAgICAvKiBJZiBkZWJ1Z2dpbmcsIHNhdmUgdGhlIElQIGFuZCBDUyB2YWx1ZXMuICovCisrICAgICAgICAgICAgU0FWRV9JUF9DUyhNLng4Ni5SX0NTLCBNLng4Ni5SX0lQKTsKKysgICAgICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworKyAgICAgICAgaWYgKE0ueDg2LmludHIpIHsKKysgICAgICAgICAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfSEFMVEVEKSB7CisrICAgICAgICAgICAgICAgIERCKGlmIChNLng4Ni5SX1NQICE9IDApIHsKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJoYWx0ZWRcbiIpOyBYODZFTVVfdHJhY2VfcmVncygpO30KKysgICAgICAgICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJTZXJ2aWNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpO30KKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIH0KKy0JCQlpZiAoKChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgJiYgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CistCQkJCSFBQ0NFU1NfRkxBRyhGX0lGKSkgeworLQkJCQl4ODZlbXVfaW50cl9oYW5kbGUoKTsKKy0JCQl9CistCQl9CistCistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CistCQkoKng4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICAgICAgICAgIGlmICgoKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAmJgorKyAgICAgICAgICAgICAgICAgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CisrICAgICAgICAgICAgICAgICFBQ0NFU1NfRkxBRyhGX0lGKSkgeworKyAgICAgICAgICAgICAgICB4ODZlbXVfaW50cl9oYW5kbGUoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICgqeDg2ZW11X29wdGFiW29wMV0pIChvcDEpOworICAgICAgICAgaWYgKE0ueDg2LmRlYnVnICYgREVCVUdfRVhJVCkgeworICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19FWElUOworICAgICAgICAgICAgIHJldHVybjsKK0BAIC0xMzIsOSArMTM0LDEwIEBAIERCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CisgUkVNQVJLUzoKKyBIYWx0cyB0aGUgc3lzdGVtIGJ5IHNldHRpbmcgdGhlIGhhbHRlZCBzeXN0ZW0gZmxhZy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX2hhbHRfc3lzKHZvaWQpCisrdm9pZAorK1g4NkVNVV9oYWx0X3N5cyh2b2lkKQorIHsKKy0JTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0xNDksMTkgKzE1MiwxNyBAQCBuZXh0IGluc3RydWN0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmRiKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKAorLQlpbnQgKm1vZCwKKy0JaW50ICpyZWdoLAorLQlpbnQgKnJlZ2wpCisrdm9pZAorK2ZldGNoX2RlY29kZV9tb2RybShpbnQgKm1vZCwgaW50ICpyZWdoLCBpbnQgKnJlZ2wpCisgeworLQlpbnQgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCSptb2QgID0gKGZldGNoZWQgPj4gNikgJiAweDAzOworLQkqcmVnaCA9IChmZXRjaGVkID4+IDMpICYgMHgwNzsKKysgICAgaW50IGZldGNoZWQ7CisrCisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKysgICAgKm1vZCA9IChmZXRjaGVkID4+IDYpICYgMHgwMzsKKysgICAgKnJlZ2ggPSAoZmV0Y2hlZCA+PiAzKSAmIDB4MDc7CisgICAgICpyZWdsID0gKGZldGNoZWQgPj4gMCkgJiAweDA3OworIH0KKyAKK0BAIC0xNzUsMTUgKzE3NiwxNiBAQCBtb3ZlcyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgbmV4dCB2YWx1ZS4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkYikgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9ieXRlX2ltbSh2b2lkKQorK3U4CisrZmV0Y2hfYnl0ZV9pbW0odm9pZCkKKyB7CistCXU4IGZldGNoZWQ7CisrICAgIHU4IGZldGNoZWQ7CisgCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkJeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCXJldHVybiBmZXRjaGVkOworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTE5NiwxNiArMTk4LDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF93b3JkX2ltbSh2b2lkKQorK3UxNgorK2ZldGNoX3dvcmRfaW1tKHZvaWQpCisgeworLQl1MTYJZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCQl4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKy0JTS54ODYuUl9JUCArPSAyOworLQlJTkNfREVDT0RFRF9JTlNUX0xFTigyKTsKKy0JcmV0dXJuIGZldGNoZWQ7CisrICAgIHUxNiBmZXRjaGVkOworKworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZHcpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CisrICAgIE0ueDg2LlJfSVAgKz0gMjsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMik7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTIxOCwxNiArMjIxLDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKQorK3UzMgorK2ZldGNoX2xvbmdfaW1tKHZvaWQpCisgeworLQl1MzIgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkbCkoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CistCU0ueDg2LlJfSVAgKz0gNDsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oNCk7CistCXJldHVybiBmZXRjaGVkOworKyAgICB1MzIgZmV0Y2hlZDsKKysKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmRsKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworKyAgICBNLng4Ni5SX0lQICs9IDQ7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDQpOworKyAgICByZXR1cm4gZmV0Y2hlZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNTksMzggKzI2MywzOSBAQCBjcHUtc3RhdGUtdmFyaWJsZSBNLng4Ni5tb2RlLiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgc3RhdGVzOgorIAorIEVhY2ggb2YgdGhlIGFib3ZlIDcgaXRlbXMgYXJlIGhhbmRsZWQgd2l0aCBhIGJpdCBpbiB0aGUgbW9kZSBmaWVsZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLV9JTkxJTkUgdTMyIGdldF9kYXRhX3NlZ21lbnQodm9pZCkKKytfSU5MSU5FIHUzMgorK2dldF9kYXRhX3NlZ21lbnQodm9pZCkKKyB7CisgI2RlZmluZQlHRVRfU0VHTUVOVChzZWdtZW50KQorLQlzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKy0JICBjYXNlIDA6CQkJCQkvKiBkZWZhdWx0IGNhc2U6IHVzZSBkcyByZWdpc3RlciAqLworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFM6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0RTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6CS8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9DUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9FUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9GUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9HUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBkZWZhdWx0OgorKyAgICBzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBjYXNlOiB1c2UgZHMgcmVnaXN0ZXIgKi8KKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRFM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6ICAgIC8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKysgICAgICAgIHJldHVybiBNLng4Ni5SX1NTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9DUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlM6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0ZTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9HUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfU1M7CisrICAgIGRlZmF1bHQ6CisgI2lmZGVmCURFQlVHCistCQlwcmludGsoImVycm9yOiBzaG91bGQgbm90IGhhcHBlbjogIG11bHRpcGxlIG92ZXJyaWRlcy5cbiIpOworKyAgICAgICAgcHJpbnRrKCJlcnJvcjogc2hvdWxkIG5vdCBoYXBwZW46ICBtdWx0aXBsZSBvdmVycmlkZXMuXG4iKTsKKyAjZW5kaWYKKy0JCUhBTFRfU1lTKCk7CistCQlyZXR1cm4gMDsKKy0JfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAyLDE0ICszMDcsMTQgQEAgQnl0ZSB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGZldGNoX2RhdGFfYnl0ZSgKKy0JdWludCBvZmZzZXQpCisrdTgKKytmZXRjaF9kYXRhX2J5dGUodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkYikgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMyMSwxNCArMzI2LDE0IEBAIFdvcmQgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZmV0Y2hfZGF0YV93b3JkKAorLQl1aW50IG9mZnNldCkKKyt1MTYKKytmZXRjaF9kYXRhX3dvcmQodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmR3KSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkdykgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM0MCwxNCArMzQ1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nKAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmcodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM2MCwxNSArMzY1LDE0IEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9kYXRhX2J5dGVfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3U4CisrZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkYikoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGIpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzgxLDE1ICszODUsMTQgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3UxNgorK2ZldGNoX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZHcpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmR3KSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQwMiwxNSArNDA1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MjQsMTUgKzQyNiwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2J5dGUoCistCXVpbnQgb2Zmc2V0LAorLQl1OCB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfYnl0ZSh1aW50IG9mZnNldCwgdTggdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmIpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ0NiwxNSArNDQ3LDE0IEBAIHRoZSBjdXJyZW50ICdkZWZhdWx0JyBzZWdtZW50LCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfd29yZCgKKy0JdWludCBvZmZzZXQsCistCXUxNiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfd29yZCh1aW50IG9mZnNldCwgdTE2IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dydykoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3J3KSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjgsMTUgKzQ2OCwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmcoCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmcodWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDkwLDE2ICs0ODksMTQgQEAgV3JpdGVzIGEgYnl0ZSB2YWx1ZSB0byBhbiBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQsCistCXU4IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmIpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dyYikgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUxMywxNiArNTEwLDE0IEBAIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MTYgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUxNiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cncpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUzNiwxNiArNTMxLDE0IEBAIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTU1OSwzNyArNTUyLDM3IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGJ5dGUgb3BlcmFuZHMuIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTgqIGRlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3U4ICoKKytkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0gICAgICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FMOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ0w7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiREwiKTsKKy0JCXJldHVybiAmTS54ODYuUl9ETDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JMOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkFIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQUg7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQ0giKTsKKy0JCXJldHVybiAmTS54ODYuUl9DSDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJESCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RIOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkJIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQkg7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BTDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0wiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DTDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ETDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CTDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BSDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DSDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESDsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CSDsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworKyAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTYwMywzNiArNTk2LDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMuICBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiogZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ1g7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9EWDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIlNQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfU1A7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CUDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJTSSIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkRJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfREk7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BWDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EWDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CWDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1AiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlAiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CUDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TSTsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREkiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY0NywzNiArNjQwLDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGR3b3JkIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIqIGRlY29kZV9ybV9sb25nX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3UzMiAqCisrZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZykKKyB7CisgICAgIHN3aXRjaCAocmVnKSB7CistICAgICAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiRUFYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUFYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkVDWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VDWDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJFRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiRUJYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUJYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkVTUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VTUDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJFQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQlA7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiRVNJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVNJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkVESSIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VESTsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQVg7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVDWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VDWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRURYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRURYOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQlg7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVTUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VTUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUJQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUJQOworKyAgICBjYXNlIDY6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FU0k7CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVESSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY5MiwxMjYgKzY4NSwxMjkgQEAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMsIG1vZGlmaWVkIGZyb20gYWJvdmUgZm9yIHRoZSB3ZWlyZG8KKyBzcGVjaWFsIGNhc2Ugb2Ygc2VncmVnIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYqIGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpCisgeworLQlzd2l0Y2ggKHJlZykgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkVTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVM7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiQ1MiKTsKKy0JCXJldHVybiAmTS54ODYuUl9DUzsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJTUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NTOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkRTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRFM7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiRlMiKTsKKy0JCXJldHVybiAmTS54ODYuUl9GUzsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJHUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0dTOworLQkgIGNhc2UgNjoKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworLQkJYnJlYWs7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRVMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FUzsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DUzsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUzsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EUzsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRlMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9GUzsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiR1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9HUzsKKysgICAgY2FzZSA2OgorKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKysgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCisgLyoKKyAgKgorICAqIHJldHVybiBvZmZzZXQgZnJvbSB0aGUgU0lCIEJ5dGUKKyAgKi8KKy11MzIgZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisrdTMyCisrZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisgeworICAgICB1MzIgYmFzZSA9IDAsIGkgPSAwLCBzY2FsZSA9IDE7CisgCistICAgIHN3aXRjaChzaWIgJiAweDA3KSB7CisrICAgIHN3aXRjaCAoc2liICYgMHgwNykgeworICAgICBjYXNlIDA6CistCURFQ09ERV9QUklOVEYoIltFQVhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUFYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRUNYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQ1hdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYXSIpOworLQliYXNlID0gTS54ODYuUl9FRFg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VEWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDM6CistCURFQ09ERV9QUklOVEYoIltFQlhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUJYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNDoKKy0JREVDT0RFX1BSSU5URigiW0VTUF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNQOworLQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU1BdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU1A7CisrICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JaWYgKG1vZCA9PSAwKSB7CistCSAgICBiYXNlID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0JICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworLQkgICAgYmFzZSA9IE0ueDg2LlJfRVNQOworLQkgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChtb2QgPT0gMCkgeworKyAgICAgICAgICAgIGJhc2UgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworKyAgICAgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VTUDsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU0k7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA3OgorLQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQliYXNlID0gTS54ODYuUl9FREk7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VESV0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHN3aXRjaCAoKHNpYiA+PiAzKSAmIDB4MDcpIHsKKyAgICAgY2FzZSAwOgorLQlERUNPREVfUFJJTlRGKCJbRUFYIik7CistCWkgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQVg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlERUNPREVfUFJJTlRGKCJbRUNYIik7CistCWkgPSBNLng4Ni5SX0VDWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUNYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYIik7CistCWkgPSBNLng4Ni5SX0VEWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FRFg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAzOgorLQlERUNPREVfUFJJTlRGKCJbRUJYIik7CistCWkgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQlg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA0OgorLQlpID0gMDsKKy0JYnJlYWs7CisrICAgICAgICBpID0gMDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDU6CistCURFQ09ERV9QUklOVEYoIltFQlAiKTsKKy0JaSA9IE0ueDg2LlJfRUJQOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlAiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VCUDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDY6CistCURFQ09ERV9QUklOVEYoIltFU0kiKTsKKy0JaSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0kiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VTSTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDc6CistCURFQ09ERV9QUklOVEYoIltFREkiKTsKKy0JaSA9IE0ueDg2LlJfRURJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFREkiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHNjYWxlID0gMSA8PCAoKHNpYiA+PiA2KSAmIDB4MDMpOworICAgICBpZiAoKChzaWIgPj4gMykgJiAweDA3KSAhPSA0KSB7CistCWlmIChzY2FsZSA9PSAxKSB7CistCSAgICBERUNPREVfUFJJTlRGKCJdIik7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKy0JfQorKyAgICAgICAgaWYgKHNjYWxlID09IDEpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJdIik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKysgICAgICAgIH0KKyAgICAgfQorICAgICByZXR1cm4gYmFzZSArIChpICogc2NhbGUpOworIH0KK0BAIC04MzYsNzQgKzgzMiw3NSBAQCBOT1RFOiAJVGhlIGNvZGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKGRzIHZzIHNzKQorIAkJaWYgYSBTUyBhY2Nlc3MgaXMgbmVlZGVkLCBzZXQgdGhpcyBiaXQuICBPdGhlcndpc2UsIERTIGFjY2VzcworIAkJb2NjdXJzICh1bmxlc3MgYW55IG9mIHRoZSBzZWdtZW50IG92ZXJyaWRlIGJpdHMgYXJlIHNldCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjb2RlX3JtMDBfYWRkcmVzcygKKy0JaW50IHJtKQorK3UzMgorK2RlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKQorIHsKKyAgICAgdTMyIG9mZnNldDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJbRUNYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRUNYOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIltFRFhdIik7CistCQlyZXR1cm4gTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VCWDsKKy0JICBjYXNlIDQ6CistCQlzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworLQkJcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDApOworLQkgIGNhc2UgNToKKy0JCW9mZnNldCA9IGZldGNoX2xvbmdfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSTsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJOworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQVg7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1g7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FRFg7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlg7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMCk7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgb2Zmc2V0ID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKysgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVNJOworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFREldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJbQlgrU0ldIik7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JYK1NJXSIpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfU0kpICYgMHhmZmZmOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIltCWCtESV0iKTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlgrREldIik7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiW0JQK1NJXSIpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlArU0ldIik7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJbQlArREldIik7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCUCtESV0iKTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfREkpICYgMHhmZmZmOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIltTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX1NJOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIltESV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0RJOworLQkgIGNhc2UgNjoKKy0JCW9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwNHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiW0JYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfQlg7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfU0k7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0RJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0RJOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIlslMDR4XSIsIG9mZnNldCk7CisrICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfQlg7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOworIH0KK0BAIC05MTksNzkgKzkxNiw4MCBAQCBSRU1BUktTOgorIFJldHVybiB0aGUgb2Zmc2V0IGdpdmVuIGJ5IG1vZD0wMSBhZGRyZXNzaW5nLiAgQWxzbyBlbmFibGVzIHRoZQorIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNvZGVfcm0wMV9hZGRyZXNzKAorLQlpbnQgcm0pCisrdTMyCisrZGVjb2RlX3JtMDFfYWRkcmVzcyhpbnQgcm0pCisgeworICAgICBpbnQgZGlzcGxhY2VtZW50ID0gMDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgLyogRmV0Y2ggZGlzcDggaWYgbm8gU0lCIGJ5dGUgKi8KKyAgICAgaWYgKCEoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSAmJiAocm0gPT0gNCkpKQorLQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VBWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNDoKKy0JCXNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CistCQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMSkgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VEWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUJYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDEpICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JQXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBTSE9VTEQgTk9UIEhBUFBFTiAqLworIH0KK0BAIC0xMDA3LDg2ICsxMDA1LDg3IEBAIFJFTUFSS1M6CisgUmV0dXJuIHRoZSBvZmZzZXQgZ2l2ZW4gYnkgbW9kPTEwIGFkZHJlc3NpbmcuICBBbHNvIGVuYWJsZXMgdGhlCisgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoCistCWludCBybSkKKyt1MzIKKytkZWNvZGVfcm0xMF9hZGRyZXNzKGludCBybSkKKyB7CisgICAgIHUzMiBkaXNwbGFjZW1lbnQgPSAwOworICAgICBpbnQgc2liOworIAorICAgICAvKiBGZXRjaCBkaXNwMTYgaWYgMTYtYml0IGFkZHIgbW9kZSAqLworICAgICBpZiAoIShNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikpCistCWRpc3BsYWNlbWVudCA9ICh1MTYpZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MTYpIGZldGNoX3dvcmRfaW1tKCk7CisgICAgIGVsc2UgeworLQkvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKy0JaWYgKHJtICE9IDQpCistCSAgICBkaXNwbGFjZW1lbnQgPSAodTMyKWZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKysgICAgICAgIGlmIChybSAhPSA0KQorKyAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MzIpIGZldGNoX2xvbmdfaW1tKCk7CisgICAgIH0KKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLSAgICAgIHN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUJYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA0OgorLQkJc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCWRpc3BsYWNlbWVudCA9ICh1MzIpZmV0Y2hfbG9uZ19pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAyKSArIGRpc3BsYWNlbWVudDsKKy0JCWJyZWFrOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VDWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSAodTMyKSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMikgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUJQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgLyogMTYtYml0IGFkZHJlc3NpbmcgKi8KKy0gICAgICBzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICByZXR1cm4gMDsKKyAgICAgLypOT1RSRUFDSEVEICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZnB1LmMgYi9saWJzL3g4NmVtdS9mcHUuYworaW5kZXggYjcyZGUxZS4uMGRhYjA1YyAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L2ZwdS5jCisrKysgYi9saWJzL3g4NmVtdS9mcHUuYworQEAgLTQyLDcgKzQyLDggQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIG9wY29kZT0weGQ4ICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFU0MgRDhcbiIpOworQEAgLTUyLDcgKzUzLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKyAgICAgIkZMRFx0RFdPUkQgUFRSICIsICJFU0NfRDlcdCIsICJGU1RcdERXT1JEIFBUUiAiLCAiRlNUUFx0RFdPUkQgUFRSICIsCisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIAorQEAgLTYzLDcgKzY0LDcgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiW10gPSB7CisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIH07CisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYjFbXSA9IHsKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAKK0BAIC04OSwxMCArOTAsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworICAgICAiRlJORElOVCIsICJGU0NBTEUiLCAiRVNDX0Q5IiwgIkVTQ19EOSIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZDkgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0xMDMsNTYgKzEwNSw1OCBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICNpZmRlZiBERUJVRworICAgICBpZiAobW9kICE9IDMpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kOV90YWIsIG1vZCwgcmgsIHJsKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoeDg2ZW11X2ZwdV9vcF9kOV90YWIxWyhyaCA8PCAzKSArIHJsXSk7CisgICAgIH0KKyAjZW5kaWYKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworLQkJaWYgKHJoIDwgNCkgeworLQkJCQlERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKy0JCX0gZWxzZSB7CistCQkJCURFQ09ERV9QUklOVEYoIlxuIik7CistCQl9CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKysgICAgICAgIGlmIChyaCA8IDQpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnhjaChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1Jfbm9wKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjaHMoWDg2RU1VX0ZQVV9TVEtUT1ApOworQEAgLTE3MywxMzMgKzE3NywxMzMgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwydChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwyZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZHBpKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbGcyKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbG4yKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkeihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAvKiA3ICovCisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZjJ4bTEoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meWwyeChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnBhdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnh0cmFjdChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2RlY3N0cCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9pbmNzdHAoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwcmVtKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnlsMnhwMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzcXJ0KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnJuZGludChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzY2FsZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorLSAgICAgICAgICAgICAgY2FzZSA3OgorLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkZW52KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZGN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdGVudihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworLSNlbmRpZiAvKiBYODZFTVVfRlBVX1BSRVNFTlQgKi8KKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWDg2RU1VX0ZQVV9QUkVTRU5UICovCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CisgfQorIAorICNpZmRlZiBERUJVRworIAorLWNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7CisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMDksNyArMzEzLDcgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKyAgICAgIkZJQ09NUFx0RFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAorICAgICAiRklESVZSXHREV09SRCBQVFIgIiwKKy0gICAgCisrCisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMTksMTAgKzMyMywxMSBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworICAgICAiRVNDX0RBICAgICAiLCAiRVNDX0RBICIsICJFU0NfREEgICAiLCAiRVNDX0RBICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGEgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0zMzIsNTkgKzMzNyw1OSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGFfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pYWRkKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ltdWwoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWNvbShYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pY29tcChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pc3ViKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lzdWJyKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lkaXYoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWRpdnIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtMzkyLDcgKzM5Nyw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkZJTERcdERXT1JEIFBUUiAiLCAiRVNDX0RCXHQxOSIsICJGSVNUXHREV09SRCBQVFIgIiwgIkZJU1RQXHREV09SRCBQVFIgIiwKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgCitAQCAtNDAzLDEwICs0MDgsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGIgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC00MTYsMTA0ICs0MjIsMTA2IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgI2lmZGVmIERFQlVHCisgICAgIGlmIChtb2QgIT0gMykgeworICAgICAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RiX3RhYiwgbW9kLCByaCwgcmwpOworLSAgICB9IGVsc2UgaWYgKHJoID09IDQpIHsgICAgICAgLyogPT09IDExIDEwIDAgbm5uICovCisrICAgIH0KKysgICAgZWxzZSBpZiAocmggPT0gNCkgeyAgICAgICAgIC8qID09PSAxMSAxMCAwIG5ubiAqLworICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkVOSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGRElTSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGQ0xFWFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGSU5JVFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiRVNDX0RCICUweFxuIiwgKG1vZCA8PCA2KSArIChyaCA8PCAzKSArIChybCkpOworICAgICB9CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICAvKiBleGVjdXRlICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmVuaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGlzaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY2xleCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9maW5pdCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0KFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKKyB9CisgCisgI2lmZGVmIERFQlVHCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdFFXT1JEIFBUUiAiLCAiRk1VTFx0UVdPUkQgUFRSICIsICJGQ09NXHRRV09SRCBQVFIgIiwKKyAgICAgIkZDT01QXHRRV09SRCBQVFIgIiwKKyAgICAgIkZTVUJcdFFXT1JEIFBUUiAiLCAiRlNVQlJcdFFXT1JEIFBUUiAiLCAiRkRJVlx0UVdPUkQgUFRSICIsCitAQCAtNTMyLDEwICs1NDAsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdCIsICJGTVVMXHQiLCAiRkNPTVx0IiwgIkZDT01QXHQiLAorICAgICAiRlNVQlJcdCIsICJGU1VCXHQiLCAiRkRJVlJcdCIsICJGRElWXHQiLAorIH07CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRjICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNTQ1LDg1ICs1NTQsODUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RjX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZhZGQoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZtdWwoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb20oc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3VicihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXYoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYWRkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbXVsKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tcChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YnIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXYoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXZyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC02MzEsNyArNjQwLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKyAgICAgIkZMRFx0UVdPUkQgUFRSICIsICJFU0NfRERcdDI5LCIsICJGU1RcdFFXT1JEIFBUUiAiLCAiRlNUUFx0UVdPUkQgUFRSICIsCisgICAgICJGUlNUT1JcdCIsICJFU0NfRERcdDJELCIsICJGU0FWRVx0IiwgIkZTVFNXXHQiLAorIAorQEAgLTY0NSwxMCArNjU0LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RkX3RhYltdID0geworICAgICAiRVNDX0REXHQyQywiLCAiRVNDX0REXHQyRCwiLCAiRVNDX0REXHQyRSwiLCAiRVNDX0REXHQyRiwiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRkICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNjU4LDc1ICs2NjgsNzUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RkX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZnJlZShzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdChzdGtlbGVtKTsgIC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3RwKHN0a2VsZW0pOyAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mcnN0b3IoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzYXZlKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0c3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC03MzQsOCArNzQ0LDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisteworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RlX3RhYltdID0geworICAgICAiRklBRERcdFdPUkQgUFRSICIsICJGSU1VTFx0V09SRCBQVFIgIiwgIkZJQ09NXHRXT1JEIFBUUiAiLAorICAgICAiRklDT01QXHRXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdFdPUkQgUFRSICIsICJGSVNVQlJcdFdPUkQgUFRSICIsICJGSURJVlx0V09SRCBQVFIgIiwKK0BAIC03NTUsMTAgKzc2NCwxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisgICAgICJGU1VCUlBcdCIsICJGU1VCUFx0IiwgIkZESVZSUFx0IiwgIkZESVZQXHQiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRlICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNzY4LDg3ICs3NzgsODcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RlX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mYWRkcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZm11bHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIGlmIChzdGtlbGVtID09IDEpCistICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXBwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKysgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisrICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWFkZChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbXVsKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmljb20oWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWNvbXAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN1YihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3VicihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlkaXZyKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtODU2LDcgKzg2Niw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7CisgICAgIC8qIG1vZCA9PSAwMCAqLworICAgICAiRklMRFx0V09SRCBQVFIgIiwgIkVTQ19ERlx0MzlcbiIsICJGSVNUXHRXT1JEIFBUUiAiLCAiRklTVFBcdFdPUkQgUFRSICIsCisgICAgICJGQkxEXHRUQllURSBQVFIgIiwgIkZJTERcdFFXT1JEIFBUUiAiLCAiRkJTVFBcdFRCWVRFIFBUUiAiLAorQEAgLTg3NywxMCArODg3LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RmX3RhYltdID0geworICAgICAiRVNDX0RGXHQzQywiLCAiRVNDX0RGXHQzRCwiLCAiRVNDX0RGXHQzRSwiLCAiRVNDX0RGXHQzRiwiCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGYgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC04OTAsNzUgKzkwMSw3NSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGZfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZibGQoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYnN0cChYODZFTVVfRlBVX0JTRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9vcHMuYyBiL2xpYnMveDg2ZW11L29wcy5jCitpbmRleCA0ZjUwNGM5Li43NmI4MzU4IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzLmMKKysrKyBiL2xpYnMveDg2ZW11L29wcy5jCitAQCAtODEsMTcgKzgxLDE3IEBAIG9wMSAtIEluc3RydWN0aW9uIG9wIGNvZGUKKyBSRU1BUktTOgorIEhhbmRsZXMgaWxsZWdhbCBvcGNvZGVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaWxsZWdhbF9vcCgKKy0gICAgdTggb3AxKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaWxsZWdhbF9vcCh1OCBvcDEpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgWDg2IE9QQ09ERVxuIik7CistICAgIFRSQUNFX1JFR1MoKTsKKy0gICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBYODYgT1BDT0RFIVxuIiwKKy0gICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMSxvcDEpOworLSAgICBIQUxUX1NZUygpOworLSAgICAgICAgfQorKyAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBYODYgT1BDT0RFXG4iKTsKKysgICAgICAgIFRSQUNFX1JFR1MoKTsKKysgICAgICAgIERCKHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUCAtIDEsIG9wMSkpOworKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorICAgICBlbHNlIHsKKyAgICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCBpdCBtZWFucyB0aGUgc3RhY2sgcG9pbnRlciBpcyBiYWNrIHRvIHplcm8KKyAgICAgICAgICAqIHNvIHdlIGFyZSBqdXN0IHJldHVybmluZyBmcm9tIGFuIGVtdWxhdG9yIHNlcnZpY2UgY2FsbAorQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorICAgICAgICAgICogY2FsbC4KKyAgICAgICAgICAqLworICAgICAgICAgWDg2RU1VX2hhbHRfc3lzKCk7CistICAgICAgICB9CisrICAgIH0KKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorQEAgLTEwOCw3ICsxMDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE0OSw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBhZGRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTY2LDcgKzE2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE4OCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjE1LDcgKzIxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNDIsNyArMjQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI1Niw5ICsyNjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjY2LDggKzI3MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjg2LDcgKzI5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMzI0LDcgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gYWRkX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTM0MSw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTM2Miw3ICszNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zODcsNyArMzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNDEyLDcgKzQyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTQyNSw5ICs0MzYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQzNSw4ICs0NDYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQ1NSw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTQ3Myw3ICs0ODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTQ4MSw3ICs0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNDg5LDggKzUwNCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBhZGRfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBhZGRfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gYWRkX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTUwMCw3ICs1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTXG4iKTsKK0BAIC01MTQsNyArNTMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNcbiIpOworQEAgLTUyOCw3ICs1NDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTU2OSw3ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTU4Niw3ICs2MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDgsNyArNjI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02MzUsNyArNjU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NjIsNyArNjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NzYsOSArNjk5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjg2LDggKzcwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTcwNiw3ICs3MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTc0NCw3ICs3NjksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtNzYxLDcgKzc4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNzgyLDcgKzgwOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC04MDcsNyArODM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTgzMiw3ICs4NjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtODQ1LDkgKzg3NCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTg1NSw4ICs4ODQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC04NzUsNyArOTA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC04OTMsNyArOTI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC05MDEsNyArOTMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9SXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTkwOSw4ICs5NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTkyMCw3ICs5NTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0Q1NcbiIpOworQEAgLTkzNCwxOCArOTY5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZi4gRXNjYXBlIGZvciB0d28tYnl0ZSBvcGNvZGUgKDI4NiBvciBiZXR0ZXIpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCBvcDIgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgIHU4IG9wMiA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKworICAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0gICAgKCp4ODZlbXVfb3B0YWIyW29wMl0pKG9wMik7CisrICAgICgqeDg2ZW11X29wdGFiMltvcDJdKSAob3AyKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTk4Niw3ICsxMDI0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gYWRjX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTEwMDMsNyArMTA0MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTEwMjUsNyArMTA2NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xMDUyLDcgKzEwOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTA3OSw3ICsxMTIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTEwOTMsOSArMTEzNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMTAzLDggKzExNDUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTExMjMsNyArMTE2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTE2MSw3ICsxMjA1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMTE3OCw3ICsxMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xMTk5LDcgKzEyNDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjI0LDcgKzEyNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjQ5LDcgKzEyOTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjYyLDkgKzEzMTAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY193b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEyNzIsOCArMTMyMCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTI5Miw3ICsxMzQxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0xMzEwLDcgKzEzNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTEzMTgsNyArMTM2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0xMzI2LDggKzEzNzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYWRjX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYWRjX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFkY193b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0xMzM3LDcgKzEzOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNTXG4iKTsKK0BAIC0xMzUxLDcgKzE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTU1xuIik7CitAQCAtMTM2NSw3ICsxNDIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE0MDYsNyArMTQ2Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHNiYl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xNDIzLDcgKzE0NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xNDQ1LDcgKzE1MDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTQ3Miw3ICsxNTMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE0OTksNyArMTU1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xNTEzLDkgKzE1NzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTUyMyw4ICsxNTgzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNTQzLDcgKzE2MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE1ODEsNyArMTY0Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc2JiX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTE1OTgsNyArMTY2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTYxOSw3ICsxNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY0NCw3ICsxNzA4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY2OSw3ICsxNzM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY4Miw5ICsxNzQ4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNjkyLDggKzE3NTgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3MTIsNyArMTc3OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMTczMCw3ICsxNzk4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0xNzM4LDcgKzE4MDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMTc0Niw4ICsxODE2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNiYl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHNiYl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzYmJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMTc1Nyw3ICsxODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHREU1xuIik7CitAQCAtMTc3MSw3ICsxODQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RFNcbiIpOworQEAgLTE3ODUsNyArMTg1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xODMwLDcgKzE5MDQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTg0Nyw3ICsxOTIxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTg2OSw3ICsxOTQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE4OTYsNyArMTk3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xOTIzLDcgKzIwMDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTkzNyw5ICsyMDE1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE5NDcsOCArMjAyNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTk2Nyw3ICsyMDQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yMDA1LDcgKzIwODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yMDIyLDcgKzIxMDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIwNDMsNyArMjEyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTIwNjksNyArMjE1MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMDk0LDcgKzIxNzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMTA3LDkgKzIxOTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIxMTcsOCArMjIwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjEzNyw3ICsyMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0yMTU1LDcgKzIyNDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTIxNjMsNyArMjI1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0yMTcxLDggKzIyNTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYW5kX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYW5kX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFuZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMTgyLDcgKzIyNzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFUzpcbiIpOworQEAgLTIxOTksNyArMjI4OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBQVxuIik7CitAQCAtMjIxMyw3ICsyMzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTIyNTQsNyArMjM0Niw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHN1Yl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0yMjcxLDcgKzIzNjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0yMjkzLDcgKzIzODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjMyMCw3ICsyNDE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIzNDcsNyArMjQ0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMzYxLDkgKzI0NTcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjM3MSw4ICsyNDY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMzkxLDcgKzI0ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTI0MjksNyArMjUyNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3ViX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTI0NDYsNyArMjU0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjQ2Nyw3ICsyNTY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjQ5Miw3ICsyNTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUxNyw3ICsyNjE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUzMCw5ICsyNjMyLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNTQwLDggKzI2NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI1NjAsNyArMjY2Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMjU3OCw3ICsyNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0yNTg2LDcgKzI2OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMjU5NCw4ICsyNzAwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHN1Yl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHN1Yl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzdWJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjYwNSw3ICsyNzEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQ1M6XG4iKTsKK0BAIC0yNjE5LDcgKzI3MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEQVNcbiIpOworQEAgLTI2MzMsNyArMjc0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yNjc0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSB4b3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMjY5MSw3ICsyODAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMjcxMyw3ICsyODI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI3NDAsNyArMjg1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNzY3LDcgKzI4ODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjc4MSw5ICsyODk1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI3OTEsOCArMjkwNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjgxMSw3ICsyOTI2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yODQ5LDcgKzI5NjUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yODY2LDcgKzI5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI4ODcsNyArMzAwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MTIsNyArMzAzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MzcsNyArMzA1Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5NTAsOSArMzA3MCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjk2MCw4ICszMDgwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yOTgwLDcgKzMxMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTI5OTgsNyArMzEyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMzAwNiw3ICszMTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTMwMTQsOCArMzEzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSB4b3JfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSB4b3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0geG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTMwMjUsNyArMzE1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNTOlxuIik7CitAQCAtMzAzOSw3ICszMTY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFBXG4iKTsKK0BAIC0zMDUzLDcgKzMxODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTMwOTEsNyArMzIxOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0zMTA4LDcgKzMyMzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0zMTI5LDcgKzMyNTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMzE1NCw3ICszMjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTMxNzksNyArMzMxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0zMTkyLDkgKzMzMjQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjAyLDggKzMzMzQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjIyLDcgKzMzNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTMyNjAsNyArMzM5NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0zMjc3LDcgKzM0MTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTMyOTgsNyArMzQzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zMzIzLDcgKzM0NTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzM0OCw3ICszNDg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTMzNjEsOSArMzQ5OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGNtcF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzNzEsOCArMzUwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzOTEsNyArMzUzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMzQwOSw3ICszNTQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0zNDE3LDcgKzM1NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMzQyNSw4ICszNTY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0zNDM2LDcgKzM1NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEUzpcbiIpOworQEAgLTM0NTAsNyArMzU5NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFBU1xuIik7CitAQCAtMzQ2NCwxOCArMzYwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBpbmNfbG9uZyhNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gaW5jX3dvcmQoTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM0ODYsMTggKzM2MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gaW5jX2xvbmcoTS54ODYuUl9FQ1gpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IGluY193b3JkKE0ueDg2LlJfQ1gpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTA4LDE4ICszNjU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IGluY19sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBpbmNfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzUzMCwxOCArMzY4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBpbmNfbG9uZyhNLng4Ni5SX0VCWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gaW5jX3dvcmQoTS54ODYuUl9CWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1NTIsMTggKzM3MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gaW5jX2xvbmcoTS54ODYuUl9FU1ApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IGluY193b3JkKE0ueDg2LlJfU1ApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTc0LDE4ICszNzM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IGluY19sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBpbmNfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzU5NiwxOCArMzc1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBpbmNfbG9uZyhNLng4Ni5SX0VTSSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gaW5jX3dvcmQoTS54ODYuUl9TSSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2MTgsMTggKzM3ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gaW5jX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IGluY193b3JkKE0ueDg2LlJfREkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjQwLDE4ICszODA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGRlY19sb25nKE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBkZWNfd29yZChNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzY2MiwxOCArMzgzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBkZWNfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0NYID0gZGVjX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2ODQsMTggKzM4NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gZGVjX2xvbmcoTS54ODYuUl9FRFgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9EWCA9IGRlY193b3JkKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzA2LDE4ICszODg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IGRlY19sb25nKE0ueDg2LlJfRUJYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlggPSBkZWNfd29yZChNLng4Ni5SX0JYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzcyOCwxOCArMzkwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBkZWNfbG9uZyhNLng4Ni5SX0VTUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NQID0gZGVjX3dvcmQoTS54ODYuUl9TUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3NTAsMTggKzM5MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gZGVjX2xvbmcoTS54ODYuUl9FQlApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CUCA9IGRlY193b3JkKE0ueDg2LlJfQlApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzcyLDE4ICszOTU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IGRlY19sb25nKE0ueDg2LlJfRVNJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBkZWNfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzc5NCwxOCArMzk4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBkZWNfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gZGVjX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4MTYsMTggKzQwMDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODM4LDE4ICs0MDM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4NjAsMTggKzQwNTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzg4MiwxOCArNDA4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQlgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTA0LDIzICs0MTA5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorLQkgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworLQkgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCistCSAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCXB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CistCX0gZWxzZSB7CistCQlwdXNoX3dvcmQoKHUxNikoTS54ODYuUl9TUCkpOworKyAgICAvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorKyAgICAgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworKyAgICAgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCisrICAgICAqLworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgKE0ueDg2LlJfU1ApKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTM5MzAsMTggKzQxMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzk1MiwxOCArNDE2MywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfU0kpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTc0LDE4ICs0MTg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5OTYsMTggKzQyMTMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDAxOCwxOCArNDIzOCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwNDAsMTggKzQyNjMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDYyLDE4ICs0Mjg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDA4NCwxOCArNDMxMywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxMDYsMTggKzQzMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTI4LDE4ICs0MzYzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDE1MCwxOCArNDM4OCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxNzIsMTIgKzQ0MTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEFEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hBXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTQxOTIsNyArNDQzNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHUxNiBvbGRfc3AgPSBNLng4Ni5SX1NQOworIAorICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworQEAgLTQyMTIsMTIgKzQ0NTYsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQURcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC00MjI1LDE2ICs0NDcxLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQlAgPSBwb3BfbG9uZygpOworLSAgICAgICAgTS54ODYuUl9FU1AgKz0gNDsgICAgICAgICAgICAgIC8qIHNraXAgRVNQICovCisrICAgICAgICBNLng4Ni5SX0VTUCArPSA0OyAgICAgICAvKiBza2lwIEVTUCAqLworICAgICAgICAgTS54ODYuUl9FQlggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQVggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworLSAgICAgICAgTS54ODYuUl9TUCArPSAyOyAgICAgICAgICAgICAgIC8qIHNraXAgU1AgKi8KKysgICAgICAgIE0ueDg2LlJfU1AgKz0gMjsgICAgICAgIC8qIHNraXAgU1AgKi8KKyAgICAgICAgIE0ueDg2LlJfQlggPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9EWCA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKK0BAIC00MjUxLDcgKzQ0OTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRlM6XG4iKTsKK0BAIC00MjY4LDcgKzQ1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJHUzpcbiIpOworQEAgLTQyODUsNyArNDUzNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY2IC0gcHJlZml4IGZvciAzMi1iaXQgcmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBVEE6XG4iKTsKK0BAIC00Mjk5LDcgKzQ1NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfZGF0YSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY3IC0gcHJlZml4IGZvciAzMi1iaXQgYWRkcmVzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUREUjpcbiIpOworQEAgLTQzMTMsMjIgKzQ1NjQsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBpbW07CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URjIoIlBVU0hcdCV4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhpbW0pOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpaW1tKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBpbW0pOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNDMzOCw3ICs0NTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC00MzUxLDcgKzQ2MDYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDM1OSwxOCArNDYxNCwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00MzgxLDI0ICs0NjM4LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQwNiwxOCArNDY2NSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDI4LDI0ICs0Njg5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQ1MywxOCArNDcxNiwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDc1LDQyICs0NzQwLDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqc3JjcmVnLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogc3JjcmVnLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiByZXM7CisgICAgICAgICAgICAgczE2IGltbTsKKyAKK0BAIC00NTE4LDE2ICs0Nzg3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIHNyY3JlZyAqIChzMTYpIGltbTsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNDUzOSwxOCArNDgwOSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaW1tOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworLSAgICBpbW0gPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiUFVTSFx0JWRcbiIsIGltbSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQlwdXNoX2xvbmcoKHMzMilpbW0pOworLSAgICB9IGVsc2UgeworLQlwdXNoX3dvcmQoaW1tKTsKKysgICAgICAgIHB1c2hfbG9uZygoczMyKSBpbW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKGltbSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC00NTYwLDExICs0ODMyLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIHM4ICBpbW07CisrICAgIHM4IGltbTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtNDU3NCwyNSArNDg0NywyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjAyLDQyICs0ODc3LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjQ3LDQyICs0OTI2LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjkyLDU3ICs0OTc1LDYyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIHNyY3JlZywgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgcmVzOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogc3JjcmVnICogKHMxNikgaW1tOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC00NzU0LDcgKzUwNDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOU0JcbiIpOworQEAgLTQ3NjgsMTMgKzUwNTcsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlNEXG4iKTsKKyAgICAgICAgIGlucyg0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOU1dcbiIpOworICAgICAgICAgaW5zKDIpOworICAgICB9CitAQCAtNDc4Nyw3ICs1MDc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRTQlxuIik7CitAQCAtNDgwMSwxMyArNTA5MywxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFNEXG4iKTsKKyAgICAgICAgIG91dHMoNCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRTV1xuIik7CisgICAgICAgICBvdXRzKDIpOworICAgICB9CitAQCAtNDgyMCw3ICs1MTE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODI4LDggKzUxMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorQEAgLTQ4NDIsNyArNTEzNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NTAsOCArNTE0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgaXMgbm90IHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX09GKSkKK0BAIC00ODY0LDcgKzUxNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NzIsOCArNTE2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBjYXJyeSBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkJcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorQEAgLTQ4ODYsNyArNTE4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4OTQsOCArNTE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgY2FycnkgZmxhZyBpcyBjbGVhci4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9DRikpCitAQCAtNDkwOCw3ICs1MjA2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTE2LDggKzUyMTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorQEAgLTQ5MzAsNyArNTIyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5MzgsOCArNTIzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIGNsZWFyLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1pGKSkKK0BAIC00OTUyLDcgKzUyNTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk2MSw4ICs1MjYyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgZmxhZyBpcyBzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpCRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpCitAQCAtNDk3NSw3ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk4NCw4ICs1Mjg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSkpCitAQCAtNDk5OCw3ICs1MzAwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTAwNiw4ICs1MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlNcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwMjAsNyArNTMyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwMjgsOCArNTMzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIGlzIGNsZWFyICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOU1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwNDIsNyArNTM0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTA1MCw4ICs1MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIHNldCAoZXZlbiBwYXJpdHkpICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpQXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDY0LDcgKzUzNjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDcyLDggKzUzNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIGNsZWFyIChvZGQgcGFyaXR5KSAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDg2LDcgKzUzOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwOTUsOCArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgbm90IGVxdWFsIHRvIG92ZXJmbG93IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpMXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTExLDcgKzU0MTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTIwLDggKzU0MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBub3QgZXF1YWwgdG8gb3ZlcmZsb3cgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTM3LDcgKzU0NDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTE0Nyw4ICs1NDU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgb3IgdGhlIHplcm8gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkxFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTYzLDcgKzU0NzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTczLDggKzU0ODMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgYW5kIHRoZSB6ZXJvIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTE4NSwyMyArNTQ5NSwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1OCAoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIGFkZF9ieXRlLCAgICAgICAgICAgLyogMDAgKi8KKy0gICAgb3JfYnl0ZSwgICAgICAgICAgICAvKiAwMSAqLworLSAgICBhZGNfYnl0ZSwgICAgICAgICAgIC8qIDAyICovCistICAgIHNiYl9ieXRlLCAgICAgICAgICAgLyogMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKiAwNCAqLworLSAgICBzdWJfYnl0ZSwgICAgICAgICAgIC8qIDA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyogMDYgKi8KKy0gICAgY21wX2J5dGUsICAgICAgICAgICAvKiAwNyAqLworK3N0YXRpYyB1OCgqb3BjODBfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IGQsIHU4IHMpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyogMDAgKi8KKysgICAgICAgIG9yX2J5dGUsICAgICAgICAgICAgICAgIC8qIDAxICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKiAwMiAqLworKyAgICAgICAgc2JiX2J5dGUsICAgICAgICAgICAgICAgLyogMDMgKi8KKysgICAgICAgIGFuZF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA0ICovCisrICAgICAgICBzdWJfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNSAqLworKyAgICAgICAgeG9yX2J5dGUsICAgICAgICAgICAgICAgLyogMDYgKi8KKysgICAgICAgIGNtcF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC01MjkwLDcgKzU2MDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKK0BAIC01MzA1LDM1ICs1NjE1LDM0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1MTYgKCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSh1MTYgZCwgdTE2IHMpID0KKy17CistICAgIGFkZF93b3JkLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl93b3JkLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX3dvcmQsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl93b3JkLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfd29yZCwgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfd29yZCwgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTE2KCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSAodTE2IGQsIHUxNiBzKSA9IHsKKysgICAgYWRkX3dvcmQsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX3dvcmQsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY193b3JkLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl93b3JkLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF93b3JkLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF93b3JkLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorLXN0YXRpYyB1MzIgKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSh1MzIgZCwgdTMyIHMpID0KKy17CistICAgIGFkZF9sb25nLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl9sb25nLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX2xvbmcsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl9sb25nLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfbG9uZywgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfbG9uZywgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTMyKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSAodTMyIGQsIHUzMiBzKSA9IHsKKysgICAgYWRkX2xvbmcsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX2xvbmcsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY19sb25nLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl9sb25nLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF9sb25nLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF9sb25nLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01Mzg3LDcgKzU2OTYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTM5OSw4ICs1NzA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTQxNiw3ICs1NzI2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQyOCw4ICs1NzM4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQ0NSw3ICs1NzU2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ1Nyw4ICs1NzY4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ3MiwxMCArNTc4NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01NDg1LDkgKzU3OTcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU1MDQsMjMgKzU4MTcsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHU4ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkodTggcywgdTggZCkgPQorLXsKKy0gICAgYWRkX2J5dGUsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2J5dGUsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19ieXRlLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfYnl0ZSwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2J5dGUsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9ieXRlLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1OCgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IHMsIHU4IGQpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfYnl0ZSwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfYnl0ZSwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfYnl0ZSwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9ieXRlLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9ieXRlLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2J5dGUsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtNTYwNiw3ICs1OTE5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworQEAgLTU2MjAsMzUgKzU5MzMsMzQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHUxNiAoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pKHUxNiBzLCB1MTYgZCkgPQorLXsKKy0gICAgYWRkX3dvcmQsICAgICAgICAgICAvKjAwICovCistICAgIG9yX3dvcmQsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY193b3JkLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfd29yZCwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX3dvcmQsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF93b3JkLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MTYoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pICh1MTYgcywgdTE2IGQpID0geworKyAgICBhZGRfd29yZCwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3Jfd29yZCwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfd29yZCwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfd29yZCwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfd29yZCwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX3dvcmQsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCistc3RhdGljIHUzMiAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1MzIgZCkgPQorLXsKKy0gICAgYWRkX2xvbmcsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2xvbmcsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19sb25nLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfbG9uZywgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2xvbmcsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9sb25nLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MzIoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTMyIGQpID0geworKyAgICBhZGRfbG9uZywgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfbG9uZywgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfbG9uZywgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfbG9uZywgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfbG9uZywgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2xvbmcsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTU2NjcsNyArNTk3OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisgICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCisgICAgICAgICAgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCistICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBRERcdCIpOworICAgICAgICAgICAgIGJyZWFrOworQEAgLTU3MDAsNyArNjAxMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzExLDggKzYwMjMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzI3LDcgKzYwNDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzM4LDggKzYwNTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzU0LDcgKzYwNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01NzY1LDggKzYwNzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01Nzc5LDEwICs2MDk0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworQEAgLTU3OTEsOSArNjEwNiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CitAQCAtNTgxMyw3ICs2MTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC01ODUxLDcgKzYxNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgdGVzdF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC01ODY4LDcgKzYxODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01ODg5LDcgKzYyMDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTE0LDcgKzYyMzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTM5LDcgKzYyNTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTUyLDkgKzYyNzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU5NjIsOCArNjI4Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTk4Miw3ICs2MzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MDMwLDcgKzYzNTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC02MDQ5LDcgKzYzNzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDYxLDcgKzYzODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjA3Myw5ICs2Mzk3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYwOTIsNyArNjQxNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTA0LDkgKzY0MjksMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOworICAgICAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjEyMyw3ICs2NDQ5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxMzUsOSArNjQ2MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTUxLDkgKzY0NzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKK0BAIC02MTY0LDggKzY0OTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKKyAgICAgICAgICAgICAqc3JjcmVnID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB0bXA7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUxNiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02MTg3LDcgKzY1MTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MjIxLDcgKzY1NTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTYyMzgsNyArNjU2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTMyIGRlc3RvZmZzZXQ7CitAQCAtNjI1Nyw3ICs2NTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNjI3OCw3ICs2NjA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNjI5OSw3ICs2NjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNjMxMCw5ICs2NjQzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzMjAsOCArNjY1Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzNDAsNyArNjY3NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjM3OCw3ICs2NzEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTYzOTUsNyArNjczMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNjQxNiw3ICs2NzUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTY0NDEsNyArNjc3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC02NDY2LDcgKzY4MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNjQ3OSw3ICs2ODE4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCitAQCAtNjQ4OSw3ICs2ODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKK0BAIC02NTA5LDcgKzY4NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY1NDcsNyArNjg4OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAqc3JjcmVnOworICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworQEAgLTY1NjQsNDcgKzY5MDUsNzcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xlYV93b3JkX1JfTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CistICAgIHUxNiAqc3JjcmVnOworICAgICB1aW50IGRlc3RvZmZzZXQ7CisgCistLyoKKy0gKiBUT0RPOiBOZWVkIHRvIGhhbmRsZSBhZGRyZXNzIHNpemUgcHJlZml4IQorLSAqCistICogbGVhICBlYXgsW2VheCtlYngqMl0gPz8KKy0gKi8KKy0gICAgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxFQVx0Iik7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CistICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTMyKSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MTYpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKy0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MzIpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUxNikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CistICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUzMikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTE2KSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogdW5kZWZpbmVkLiAgRG8gbm90aGluZy4gKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNjYxNiw3ICs2OTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY2NTQsNyArNzAyNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02Njc3LDcgKzcwNDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTY2OTksNyArNzA3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTY3MTgsNyArNzA5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTY3MzcsNyArNzExMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTY3NDcsNyArNzEyMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTY3NTUsNyArNzEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gcG9wX2xvbmcoKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02NzczLDcgKzcxNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX25vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJOT1BcbiIpOworQEAgLTY3ODYsMTQgKzcxNjQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MDEsMTAgKzcxODEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VDWDsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0NYOworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4MTQsMTQgKzcxOTUsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MjksMTAgKzcyMTIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VEWDsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RYOworLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NDIsMTQgKzcyMjYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4NTcsMTAgKzcyNDMsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCWDsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JYOworLSAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NzAsMTQgKzcyNTcsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4ODUsMTAgKzcyNzQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTUDsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NQOworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4OTgsMTQgKzcyODgsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5MTMsMTAgKzczMDUsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCUDsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JQOworLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5MjYsMTQgKzczMTksMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NDEsMTAgKzczMzYsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTSTsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NJOworLSAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5NTQsMTQgKzczNTAsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NjksMTAgKzczNjcsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VESTsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RJOworLSAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5ODIsMjUgKzczODEsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jYncodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDV0RFXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNCV1xuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRUFYIHw9IDB4ZmZmZjAwMDA7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9FQVggJj0gMHgwMDAwZmZmZjsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FMICYgMHg4MCkgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweGZmOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweDA7CisgICAgICAgICB9CisgICAgIH0KK0BAIC03MDEyLDEyICs3NDE2LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ0RRXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNXRFxuIik7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKK0BAIC03MDI1LDEzICs3NDMxLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaWYgKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRURYID0gMHhmZmZmZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4MDsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FYICYgMHg4MDAwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9EWCA9IDB4ZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0RYID0gMHgwOworICAgICAgICAgfQorICAgICB9CitAQCAtNzA0MywxNyArNzQ1MiwyNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgZmFyc2VnLCBmYXJvZmY7CisrICAgIHUzMiBmYXJzZWcsIGZhcm9mZjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CistCWZhcm9mZiA9IGZldGNoX3dvcmRfaW1tKCk7CistCWZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4OiIsIGZhcnNlZyk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBmYXJvZmYpOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgZmFyc2VnLCBmYXJvZmYsICJGQVIgIik7CisrICAgIERFQ09ERV9QUklOVEYoIkNBTExcdCIpOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGZhcm9mZiA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBmYXJzZWcgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgZmFyb2ZmID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHg6IiwgZmFyc2VnKTsKKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGZhcm9mZik7CisrICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBmYXJzZWcsIGZhcm9mZiwgIkZBUiAiKTsKKyAKKyAgICAgLyogWFhYCisgICAgICAqIAorQEAgLTcwNjQsOCArNzQ4MCwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisgICAgIE0ueDg2LlJfQ1MgPSBmYXJzZWc7CistICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKy0gICAgTS54ODYuUl9JUCA9IGZhcm9mZjsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICB9CisrICAgIE0ueDg2LlJfRUlQID0gZmFyb2ZmICYgMHhmZmZmOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC03MDc0LDcgKzc0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfd2FpdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF93YWl0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIldBSVQiKTsKK0BAIC03MDg4LDE0ICs3NTEwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3dhaXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBmbGFnczsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIRkRcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEZcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNzEwNCw4ICs3NTI4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGZsYWdzID0gKE0ueDg2LlJfRUZMRyAmIEZfTVNLKSB8IEZfQUxXQVlTX09OOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhmbGFncyk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilmbGFncyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgZmxhZ3MpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzExNSwxOCArNzU0MCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUZMRyA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0ZMRyA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTcxMzcsNyArNzU2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDllCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0FIRlxuIik7CitAQCAtNzE1NCwxMiArNzU4MywxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGFoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMQUhGXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JTS54ODYuUl9BSCA9ICh1OCkoTS54ODYuUl9GTEcgJiAweGZmKTsKKysgICAgTS54ODYuUl9BSCA9ICh1OCkgKE0ueDg2LlJfRkxHICYgMHhmZik7CisgICAgIC8qdW5kb2N1bWVudGVkIFRDKysgYmVoYXZpb3I/Pz8gTm9wZS4gIEl0J3MgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgIHlvdSBoYXZlIHRvbyBsb29rIHJlYWwgaGFyZCB0byBub3RpY2UgaXQuICovCisgICAgIE0ueDg2LlJfQUggfD0gMHgyOworQEAgLTcxNzEsNyArNzYwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FMX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcxODksNyArNzYyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzE5NywxMyArNzYyOSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdEVBWCxbJTA0eF1cbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRBWCxbJTA0eF1cbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhvZmZzZXQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IGZldGNoX2RhdGFfd29yZChvZmZzZXQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC03MjE0LDcgKzc2NDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcyMzIsNyArNzY2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzI0MCwxMyArNzY3NiwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdFslMDR4XSxFQVhcbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRbJTA0eF0sQVhcbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBzdG9yZV9kYXRhX2xvbmcob2Zmc2V0LCBNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzdG9yZV9kYXRhX3dvcmQob2Zmc2V0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNzI1NywxNSArNzY5NSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCAgdmFsOworKyAgICB1OCB2YWw7CisgICAgIHUzMiBjb3VudDsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0QllURVxuIik7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03MjkyLDcgKzc3MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdmFsOworICAgICBpbnQgaW5jOworQEAgLTczMDEsMTMgKzc3NDEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03MzI1LDkgKzc3NjYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNil2YWwpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNikgdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM0MCw3ICs3NzgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMSwgdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03MzQ4LDcgKzc3OTEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTczNTksNyArNzgwMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKysgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM2Nyw3ICs3ODEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKK0BAIC03MzgxLDcgKzc4MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKK0BAIC03Mzk2LDIxICs3ODQxLDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUzMiB2YWwxLHZhbDI7CisrICAgIHUzMiB2YWwxLCB2YWwyOworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc0MjQsMTAgKzc4NzEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KSB2YWwxLCAodTE2KSB2YWwyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworQEAgLTc0MzYsNyArNzg4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzQ0NCwxMCArNzg5MywxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzQ1NiwxNSArNzkwNiwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NDc3LDcgKzc5MjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGltbTsKKyAKK0BAIC03NDg2LDcgKzc5MzksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQl0ZXN0X2J5dGUoTS54ODYuUl9BTCwgKHU4KWltbSk7CisrICAgIHRlc3RfYnl0ZShNLng4Ni5SX0FMLCAodTgpIGltbSk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTc0OTUsNyArNzk0OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNzUwMyw3ICs3OTU3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03NTExLDggKzc5NjYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgdGVzdF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgdGVzdF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHRlc3Rfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzUyMiwxMyArNzk3OCwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdEJZVEVcbiIpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzU0Miw3ICs3OTk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICB9CitAQCAtNzU1NCw3ICs4MDEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAgICAgdTMyIGNvdW50OworQEAgLTc1NjIsMTMgKzgwMjEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NTg1LDcgKzgwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0VBWCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FYKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc1OTgsMTQgKzgwNTksMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0QllURVxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03NjE4LDcgKzgwODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KK0BAIC03NjMwLDcgKzgwOTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworICAgICB1MzIgY291bnQ7CitAQCAtNzYzOCwxMyArODEwMiwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc2NjEsNyArODEyNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0FYID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzY3NCw3ICs4MTQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03NjgyLDcgKzgxNDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTc2OTgsNyArODE2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzcxMCw3ICs4MTc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc3MjMsNyArODE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgICAgIHUzMiB2YWw7CitAQCAtNzczMSwxMyArODIwMSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc3NTAsOSArODIyMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc2MCwxNiArODIzMiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc3NywxMyArODI1MSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorQEAgLTc3OTUsNyArODI3MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODEzLDcgKzgyOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzgzMSw3ICs4MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4NDksNyArODMyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQkxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODY3LDcgKzgzNDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0FIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzg4NSw3ICs4MzY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc5MDMsNyArODM4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfREhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03OTIxLDcgKzg0MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzkzOSw3ICs4NDIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC03OTQ3LDcgKzg0MzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNzk1NSw4ICs4NDQxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03OTY2LDcgKzg0NTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTc5NzQsNyArODQ2Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQ1gsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRDWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03OTgyLDggKzg0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTc5OTMsNyArODQ4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODAwMSw3ICs4NDkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVEWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdERYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwMDksOCArODUwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODAyMCw3ICs4NTEzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDI4LDcgKzg1MjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUJYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QlgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODAzNiw4ICs4NTMxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQlggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQlggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MDQ3LDcgKzg1NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwNTUsNyArODU1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFU1AsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRTUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDYzLDggKzg1NjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgwNzQsNyArODU3Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODA4Miw3ICs4NTgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVCUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEJQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwOTAsOCArODU5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0JQID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0JQID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODEwMSw3ICs4NjAzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MTA5LDcgKzg2MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RVNJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0U0ksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODExNyw4ICs4NjIxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MTI4LDcgKzg2MzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgxMzYsNyArODY0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFREksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRESSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MTQ0LDMxICs4NjUxLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RJID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RJID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMCwgZDAsIGFuZCBkMi4gKi8KKy1zdGF0aWMgdTgoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIHJvbF9ieXRlLAorLSAgICByb3JfYnl0ZSwKKy0gICAgcmNsX2J5dGUsCistICAgIHJjcl9ieXRlLAorLSAgICBzaGxfYnl0ZSwKKy0gICAgc2hyX2J5dGUsCistICAgIHNobF9ieXRlLCAgICAgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCistICAgIHNhcl9ieXRlLAorLX07Cisrc3RhdGljIHU4KCpvcGNEMF9ieXRlX29wZXJhdGlvbltdKSAodTggZCwgdTggcykgPSB7CisrICAgIHJvbF9ieXRlLCByb3JfYnl0ZSwgcmNsX2J5dGUsIHJjcl9ieXRlLCBzaGxfYnl0ZSwgc2hyX2J5dGUsIHNobF9ieXRlLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfYnl0ZSx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTgyNTEsNyArODc1Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CitAQCAtODI2NSwzNiArODc2NiwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMSwgZDEsIGFuZCBkMy4gKi8KKy1zdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSh1MTYgcywgdTggZCkgPQorLXsKKy0gICAgcm9sX3dvcmQsCistICAgIHJvcl93b3JkLAorLSAgICByY2xfd29yZCwKKy0gICAgcmNyX3dvcmQsCistICAgIHNobF93b3JkLAorLSAgICBzaHJfd29yZCwKKy0gICAgc2hsX3dvcmQsICAgICAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKy0gICAgc2FyX3dvcmQsCistfTsKKytzdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSAodTE2IHMsIHU4IGQpID0geworKyAgICByb2xfd29yZCwgcm9yX3dvcmQsIHJjbF93b3JkLCByY3Jfd29yZCwgc2hsX3dvcmQsIHNocl93b3JkLCBzaGxfd29yZCwgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCisrc2FyX3dvcmQsfTsKKyAKKyAvKiB1c2VkIGJ5IG9wY29kZXMgYzEsIGQxLCBhbmQgZDMuICovCistc3RhdGljIHUzMiAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1OCBkKSA9CisteworLSAgICByb2xfbG9uZywKKy0gICAgcm9yX2xvbmcsCistICAgIHJjbF9sb25nLAorLSAgICByY3JfbG9uZywKKy0gICAgc2hsX2xvbmcsCistICAgIHNocl9sb25nLAorLSAgICBzaGxfbG9uZywgICAgICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworLSAgICBzYXJfbG9uZywKKy19OworK3N0YXRpYyB1MzIoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTggZCkgPSB7CisrICAgIHJvbF9sb25nLCByb3JfbG9uZywgcmNsX2xvbmcsIHJjcl9sb25nLCBzaGxfbG9uZywgc2hyX2xvbmcsIHNobF9sb25nLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfbG9uZyx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC04MzU3LDcgKzg4NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04MzgyLDcgKzg4NjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDA3LDcgKzg4OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDIwLDcgKzg5MDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTg0MjksNyArODkxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTg0NDgsNyArODkzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IGltbTsKKyAKK0BAIC04NDU2LDggKzg5NDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRcdCIpOworICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CistCVJFVFVSTl9UUkFDRSgiUkVUIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVUIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfU1AgKz0gaW1tOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtODQ2OCwxMiArODk1OSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVUXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVQiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVQiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04NDgzLDcgKzg5NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CitAQCAtODUyMCw3ICs5MDEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtODUzMiw3ICs5MDI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKK0BAIC04NTY5LDcgKzkwNjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC04NTgxLDcgKzkwNzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg2MjAsNyArOTExNSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGltbSk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOworQEAgLTg2MzYsNyArOTEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTg2NTksNyArOTE1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODY4MCw3ICs5MTc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NzAxLDcgKzkxOTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg3MTIsMTkgKzkyMTEsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgaW1tKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqZGVzdHJlZzsKKy0JCQl1MzIgaW1tOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKysgICAgICAgICAgICB1MzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBpbW07CistICAgICAgICB9IGVsc2UgeworLQkJCXUxNiAqZGVzdHJlZzsKKy0JCQl1MTYgaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworKyAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworQEAgLTg3NDIsMTAgKzkyNDIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUxNiBsb2NhbCxmcmFtZV9wb2ludGVyOworLSAgICB1OCAgbmVzdGluZzsKKysgICAgdTE2IGxvY2FsLCBmcmFtZV9wb2ludGVyOworKyAgICB1OCBuZXN0aW5nOworICAgICBpbnQgaTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC04NzYwLDExICs5MjYxLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBuZXN0aW5nOyBpKyspIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0JQIC09IDI7CisgICAgICAgICAgICAgcHVzaF93b3JkKGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9TUywgTS54ODYuUl9CUCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKyAgICAgICAgIH0KKysgICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKysgICAgfQorICAgICBNLng4Ni5SX0JQID0gZnJhbWVfcG9pbnRlcjsKKy0gICAgTS54ODYuUl9TUCA9ICh1MTYpKE0ueDg2LlJfU1AgLSBsb2NhbCk7CisrICAgIE0ueDg2LlJfU1AgPSAodTE2KSAoTS54ODYuUl9TUCAtIGxvY2FsKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtODc3Myw3ICs5Mjc0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTEVBVkVcbiIpOworQEAgLTg3ODgsNyArOTI5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYXZlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBpbW07CisgCitAQCAtODc5Niw4ICs5Mjk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRGXHQiKTsKKyAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworLQlSRVRVUk5fVFJBQ0UoIlJFVEYiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVRGIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfQ1MgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX1NQICs9IGltbTsKK0BAIC04ODA5LDEyICs5MzEyLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVRGXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVRGIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVURiIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX0NTID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTg4MjUsMTUgKzkzMjksMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludDModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UIDNcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiWzNdKSB7CistCSgqX1g4NkVNVV9pbnRyVGFiWzNdKSgzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiWzNdKSAoMyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CitAQCAtODg0OSw3ICs5MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW50bnVtOworIAorQEAgLTg4NTksOSArOTM2NiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbnRudW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIHsKKy0JKCpfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkoaW50bnVtKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIChpbnRudW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg4NzcsMTYgKzkzODUsMTggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UT1xuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkgeworLQlpZiAoX1g4NkVNVV9pbnRyVGFiWzRdKSB7CistCSAgICAoKl9YODZFTVVfaW50clRhYls0XSkoNCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbNF0pIHsKKysgICAgICAgICAgICAoKl9YODZFTVVfaW50clRhYls0XSkgKDQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg5MDMsNyArOTQxMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaXJldCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pcmV0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklSRVRcbiIpOworQEAgLTg5MjEsNyArOTQzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2lyZXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg5OTksNyArOTUxMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTkwMTUsNyArOTUyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTkwNzUsNyArOTU4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTA5OCw3ICs5NjEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MTIxLDcgKzk2MzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworQEAgLTkxMzMsMTkgKzk2NDksMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgZGVzdHZhbDsKKy0JCQl1MzIgKmRlc3RyZWc7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIDEpOworICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJdTE2IGRlc3R2YWw7CistCQkJdTE2ICpkZXN0cmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworQEAgLTkxNjMsNyArOTY4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC05MjQzLDcgKzk3NjEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtOTI1OSw3ICs5Nzc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtOTMyMSw3ICs5ODQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MzQ0LDcgKzk4NjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkzNjcsNyArOTg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTM3OSw3ICs5OTAxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTkzODcsNyArOTkwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtOTQwNSwxNiArOTkyOCwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhbSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYW0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFNXG4iKTsKKy0gICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgLyogdGhpcyBpcyBhIHN0dXBpZCBlbmNvZGluZy4gKi8KKysgICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgIC8qIHRoaXMgaXMgYSBzdHVwaWQgZW5jb2RpbmcuICovCisgICAgIGlmIChhICE9IDEwKSB7CistCS8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKy0JICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworICAgICAgICAgREVDT0RFX1BSSU5URigiRVJST1IgREVDT0RJTkcgQUFNXG4iKTsKKyAgICAgICAgIFRSQUNFX1JFR1MoKTsKKyAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtOTQzMCw3ICs5OTU0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFtKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKK0BAIC05NDM4LDggKzk5NjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJBQURcbiIpOworICAgICBhID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgaWYgKGEgIT0gMTApIHsKKy0JLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworLQkgICBhYWRfd29yZCh1MTYgdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFkX3dvcmQodTE2IHZhbCwgaW50IGJhc2UgYSkgKi8KKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkVSUk9SIERFQ09ESU5HIEFBTVxuIik7CisgICAgICAgICBUUkFDRV9SRUdTKCk7CisgICAgICAgICBIQUxUX1NZUygpOworQEAgLTk0NTYsMTQgKzk5ODEsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hsYXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGxhdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgYWRkcjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiWExBVFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCWFkZHIgPSAodTE2KShNLng4Ni5SX0JYICsgKHU4KU0ueDg2LlJfQUwpOworKyAgICBhZGRyID0gKHUxNikgKE0ueDg2LlJfQlggKyAodTgpIE0ueDg2LlJfQUwpOworICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKGFkZHIpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0NzUsNyArMTAwMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94bGF0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk0ODYsNyArMTAwMTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaXApOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0NYIC09IDE7CistICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgIUFDQ0VTU19GTEFHKEZfWkYpKSAgICAgIC8qIENYICE9IDAgYW5kICFaRiAqLworKyAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmICFBQ0NFU1NfRkxBRyhGX1pGKSkgIC8qIENYICE9IDAgYW5kICFaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0OTYsNyArMTAwMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MDcsNyArMTAwMzUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKy0gICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAgICAgLyogQ1ggIT0gMCBhbmQgWkYgKi8KKysgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAvKiBDWCAhPSAwIGFuZCBaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk1MTcsNyArMTAwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MzgsMTYgKzEwMDY3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfamN4eih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qY3h6KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiB0YXJnZXQ7CistICAgIHM4ICBvZmZzZXQ7CisrICAgIHM4IG9mZnNldDsKKyAKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBvdmVyZmxvdyBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKQ1haXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYuUl9DWCA9PSAwKQorQEAgLTk1NjAsMTYgKzEwMDkwLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2pjeHoodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKShwb3J0KTsKKysgICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikgKHBvcnQpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NTc4LDIzICsxMDEwOSwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIkVBWCwleFxuIiwgcG9ydCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiQVgsJXhcbiIsIHBvcnQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKHBvcnQpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykocG9ydCk7CisrICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkgKHBvcnQpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykgKHBvcnQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTYwNCwxNiArMTAxMzgsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0lNTV9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShwb3J0LCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKHBvcnQsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NjIyLDIzICsxMDE1NywyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleCxFQVhcbiIsIHBvcnQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFYXG4iLCBwb3J0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICgqc3lzX291dGwpKHBvcnQsIE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgICgqc3lzX291dHcpKHBvcnQsIE0ueDg2LlJfQVgpOworKyAgICAgICAgKCpzeXNfb3V0bCkgKHBvcnQsIE0ueDg2LlJfRUFYKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICgqc3lzX291dHcpIChwb3J0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk2NDgsMTkgKzEwMTg2LDM1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgczE2IGlwOworKyAgICBzMTYgaXAxNjsKKysgICAgczMyIGlwMzI7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CistCURFQ09ERV9QUklOVEYoIkNBTExcdCIpOworLQlpcCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CistCWlwICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgIC8qIENIRUNLIFNJR04gKi8KKy0JREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpaXApOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgTS54ODYuUl9DUywgaXAsICIiKTsKKysgICAgREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgaXAzMiA9IChzMzIpIGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBpcDMyICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgICAgIC8qIENIRUNLIFNJR04gKi8KKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcDMyKTsKKysgICAgICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBNLng4Ni5SX0NTLCBpcDMyLCAiIik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcDE2ID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGlwMTYgKz0gKHMxNikgTS54ODYuUl9JUDsgICAgICAgLyogQ0hFQ0sgU0lHTiAqLworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpIGlwMTYpOworKyAgICAgICAgQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIE0ueDg2LlJfQ1MsIGlwMTYsICIiKTsKKysgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDMyICYgMHhmZmZmOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDE2OworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2NjksMTcgKzEwMjIzLDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIGludCBpcDsKKysgICAgdTMyIGlwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBpcCA9IChzMTYpZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgaXAgKz0gKHMxNilNLng4Ni5SX0lQOworLSAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNilpcCk7CistICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSAodTE2KWlwOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGlwID0gKHUzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIGlwICs9ICh1MzIpIE0ueDg2LlJfRUlQOworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhcbiIsICh1MzIpIGlwKTsKKysgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICBNLng4Ni5SX0VJUCA9ICh1MzIpIGlwOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgaXAgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgaXAgKz0gKHMxNikgTS54ODYuUl9JUDsKKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcCk7CisrICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIGlwOworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2ODgsMTggKzEwMjUyLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgY3MsIGlwOworKyAgICB1MTYgY3M7CisrICAgIHUzMiBpcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk1QXHRGQVIgIik7CistICAgIGlwID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBpcCA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKyAgICAgY3MgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eDoiLCBjcyk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgTS54ODYuUl9FSVAgPSBpcCAmIDB4ZmZmZjsKKyAgICAgTS54ODYuUl9DUyA9IGNzOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk3MDksMTUgKzEwMjgwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IHRhcmdldDsKKyAgICAgczggb2Zmc2V0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIG9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CitAQCAtOTcyOSwxMiArMTAzMDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX2J5dGVfQUxfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdEFMLERYXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikoTS54ODYuUl9EWCk7CisrICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpIChNLng4Ni5SX0RYKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTc0MywxOSArMTAzMTYsMjIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlx0RUFYLERYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOXHRBWCxEWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkoTS54ODYuUl9EWCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KShNLng4Ni5SX0RYKTsKKysgICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKSAoTS54ODYuUl9EWCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KSAoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NzY1LDEyICsxMDM0MSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQUxcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShNLng4Ni5SX0RYLCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05Nzc5LDE5ICsxMDM1NiwyMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsRUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgKCpzeXNfb3V0dykoTS54ODYuUl9EWCwgTS54ODYuUl9BWCk7CisrICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTgwMSw3ICsxMDM4MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0RYX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9jayh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMT0NLOlxuIik7CitAQCAtOTgxNiw3ICsxMDM5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQTkVcbiIpOworQEAgLTk4MzAsNyArMTA0MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGYzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQRVxuIik7CitAQCAtOTg0NCw3ICsxMDQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaGFsdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkhBTFRcbiIpOworQEAgLTk4NTgsNyArMTA0NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbWModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY29tcGxlbWVudCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC05ODczLDcgKzEwNDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21jKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTk4ODUsOSArMTA0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTk5NTMsOSArMTA1MzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAwICovCistICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKysgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDAyMSw5ICsxMDYwNyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDEgKi8KKy0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworKyAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMDg5LDkgKzEwNjc1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdCIpOworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMTIzLDcgKzEwNzA5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgbXVsX2J5dGUoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworKyAgICAgICAgICAgIG11bF9ieXRlKCpkZXN0cmVnKTsgLyohISEgICovCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTAxNTcsNyArMTA3NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xMDE2NywxMSArMTA3NTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMTAxODEsOCArMTA3NjgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDIwOSw3ICsxMDc5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0V09SRCBQVFIgIik7CitAQCAtMTAyMzIsNyArMTA4MjEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdFdPUkQgUFRSICIpOworQEAgLTEwMjU0LDcgKzEwODQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIG11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI3NSw3ICsxMDg2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI5Niw3ICsxMDg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMTcsNyArMTA5MTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMzAsMTEgKzEwOTI0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDAgKi8KKy0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0xMDM0NCw4ICsxMDkzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTEwMzcyLDcgKzEwOTY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDM5NSw3ICsxMDk5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0V09SRCBQVFIgIik7CitAQCAtMTA0MTcsNyArMTEwMTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDM4LDcgKzExMDM2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDU5LDcgKzExMDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ4MCw3ICsxMTA4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ5MywxMSArMTEwOTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMSAqLworLSAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisrICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdERXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTEwNTA3LDggKzExMTA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMTA1MzUsNyArMTExMzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdFdPUkQgUFRSICIpOworQEAgLTEwNTU4LDcgKzExMTYxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDU4MCw3ICsxMTE4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MDEsNyArMTEyMDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MjIsNyArMTEyMjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjQzLDcgKzExMjUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjU2LDkgKzExMjY0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgICAgIHUzMiBzcmN2YWw7CitAQCAtMTA2NzAsNyArMTEyNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMDY5Niw3ICsxMTMwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdCIpOworQEAgLTEwNzE1LDcgKzExMzI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gbmVnX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0Iik7CitAQCAtMTA3MzMsMTUgKzExMzQ0LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICAgICBtdWxfbG9uZygqZGVzdHJlZyk7ICAgICAgLyohISEgICovCistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgbXVsX2xvbmcoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0Iik7CisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgICAgIG11bF93b3JkKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KKysgICAgICAgICAgICAgICAgbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSA1OgorQEAgLTEwNzUzLDcgKzExMzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTA3NzIsNyArMTEzODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0Iik7CitAQCAtMTA3OTEsNyArMTE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHQiKTsKK0BAIC0xMDgxMiw3ICsxMTQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDgyNyw3ICsxMTQ0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIHNldCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg0Miw3ICsxMTQ1OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0Yyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2xpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NTcsNyArMTE0NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0aSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBlbmFibGUgIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NzIsNyArMTE0OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODg3LDcgKzExNTA3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDkwMiw3ICsxMTUyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1OCBkZXN0dmFsOworQEAgLTEwOTQ0LDEzICsxMTU2NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfYnl0ZShkZXN0dmFsKTsKK0BAIC0xMTAxOSwxMiArMTE2NDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworLQl1MTYgKmRlc3RyZWc7CistCXUxNiBkZXN0dmFsLGRlc3R2YWwyOworKyAgICB1MTYgKmRlc3RyZWc7CisrICAgIHUxNiBkZXN0dmFsLCBkZXN0dmFsMjsKKyAKKyAgICAgLyogWWV0IGFub3RoZXIgc3BlY2lhbCBjYXNlIGluc3RydWN0aW9uLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTExMDQwLDE0ICsxMTY2MywxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREV09SRCBQVFIgIik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERXT1JEIFBUUiAiKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CitAQCAtMTEwNzgsNyArMTE3MDMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorQEAgLTExMDg2LDcgKzExNzExLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTA5NSw3ICsxMTcyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKK0BAIC0xMTEwMyw3ICsxMTcyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExMTIsMTMgKzExNzM5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMTI3LDI2ICsxMTc1NCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTY4LDcgKzExNzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTE4NSw3ICsxMTgxNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExOTQsMTMgKzExODI0LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjA5LDI2ICsxMTgzOSwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMjUwLDcgKzExODgxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTI2Nyw3ICsxMTg5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEyNzYsMTMgKzExOTA5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjkxLDI2ICsxMTkyNCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMzMwLDcgKzExOTY0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gaW5jX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTEzNDcsNyArMTE5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZWNfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTM1NiwyNiArMTE5OTIsMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVjX3dvcmQoKmRlc3RyZWcpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk9QRVJBVElPTiBVTkRFRklORUQgMFhGRiBcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KSAoKmRlc3RyZWcpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJPUEVSQVRJT04gVU5ERUZJTkVEIDBYRkYgXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtMTEzODgsNyArMTIwMjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTExNDA3LDggKzEyMDQ0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIFNpbmdsZSBieXRlIG9wZXJhdGlvbiBjb2RlIHRhYmxlOgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisteworK3ZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkgKHU4KSA9IHsKKyAvKiAgMHgwMCAqLyB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SLAorIC8qICAweDAxICovIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IsCisgLyogIDB4MDIgKi8geDg2ZW11T3BfYWRkX2J5dGVfUl9STSwKK0BAIC0xMTQxNyw3ICsxMjA1Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgwNSAqLyB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0sCisgLyogIDB4MDYgKi8geDg2ZW11T3BfcHVzaF9FUywKKyAvKiAgMHgwNyAqLyB4ODZlbXVPcF9wb3BfRVMsCistCisgLyogIDB4MDggKi8geDg2ZW11T3Bfb3JfYnl0ZV9STV9SLAorIC8qICAweDA5ICovIHg4NmVtdU9wX29yX3dvcmRfUk1fUiwKKyAvKiAgMHgwYSAqLyB4ODZlbXVPcF9vcl9ieXRlX1JfUk0sCitAQCAtMTE0MjYsNyArMTIwNjEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MGQgKi8geDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0sCisgLyogIDB4MGUgKi8geDg2ZW11T3BfcHVzaF9DUywKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcF90d29fYnl0ZSwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SLAorIC8qICAweDExICovIHg4NmVtdU9wX2FkY193b3JkX1JNX1IsCisgLyogIDB4MTIgKi8geDg2ZW11T3BfYWRjX2J5dGVfUl9STSwKK0BAIC0xMTQzNSw3ICsxMjA2OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgxNSAqLyB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0sCisgLyogIDB4MTYgKi8geDg2ZW11T3BfcHVzaF9TUywKKyAvKiAgMHgxNyAqLyB4ODZlbXVPcF9wb3BfU1MsCistCisgLyogIDB4MTggKi8geDg2ZW11T3Bfc2JiX2J5dGVfUk1fUiwKKyAvKiAgMHgxOSAqLyB4ODZlbXVPcF9zYmJfd29yZF9STV9SLAorIC8qICAweDFhICovIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0sCitAQCAtMTE0NDQsNyArMTIwNzcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NLAorIC8qICAweDFlICovIHg4NmVtdU9wX3B1c2hfRFMsCisgLyogIDB4MWYgKi8geDg2ZW11T3BfcG9wX0RTLAorLQorIC8qICAweDIwICovIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IsCisgLyogIDB4MjEgKi8geDg2ZW11T3BfYW5kX3dvcmRfUk1fUiwKKyAvKiAgMHgyMiAqLyB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNLAorQEAgLTExNDUzLDcgKzEyMDg1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDI1ICovIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSwKKyAvKiAgMHgyNiAqLyB4ODZlbXVPcF9zZWdvdnJfRVMsCisgLyogIDB4MjcgKi8geDg2ZW11T3BfZGFhLAorLQorIC8qICAweDI4ICovIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IsCisgLyogIDB4MjkgKi8geDg2ZW11T3Bfc3ViX3dvcmRfUk1fUiwKKyAvKiAgMHgyYSAqLyB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNLAorQEAgLTExNDYyLDcgKzEyMDkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDJkICovIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcF9zZWdvdnJfQ1MsCisgLyogIDB4MmYgKi8geDg2ZW11T3BfZGFzLAorLQorIC8qICAweDMwICovIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IsCisgLyogIDB4MzEgKi8geDg2ZW11T3BfeG9yX3dvcmRfUk1fUiwKKyAvKiAgMHgzMiAqLyB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNLAorQEAgLTExNDcxLDcgKzEyMTAxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDM1ICovIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSwKKyAvKiAgMHgzNiAqLyB4ODZlbXVPcF9zZWdvdnJfU1MsCisgLyogIDB4MzcgKi8geDg2ZW11T3BfYWFhLAorLQorIC8qICAweDM4ICovIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IsCisgLyogIDB4MzkgKi8geDg2ZW11T3BfY21wX3dvcmRfUk1fUiwKKyAvKiAgMHgzYSAqLyB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNLAorQEAgLTExNDgwLDcgKzEyMTA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDNkICovIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcF9zZWdvdnJfRFMsCisgLyogIDB4M2YgKi8geDg2ZW11T3BfYWFzLAorLQorIC8qICAweDQwICovIHg4NmVtdU9wX2luY19BWCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcF9pbmNfQ1gsCisgLyogIDB4NDIgKi8geDg2ZW11T3BfaW5jX0RYLAorQEAgLTExNDg5LDcgKzEyMTE3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDQ1ICovIHg4NmVtdU9wX2luY19CUCwKKyAvKiAgMHg0NiAqLyB4ODZlbXVPcF9pbmNfU0ksCisgLyogIDB4NDcgKi8geDg2ZW11T3BfaW5jX0RJLAorLQorIC8qICAweDQ4ICovIHg4NmVtdU9wX2RlY19BWCwKKyAvKiAgMHg0OSAqLyB4ODZlbXVPcF9kZWNfQ1gsCisgLyogIDB4NGEgKi8geDg2ZW11T3BfZGVjX0RYLAorQEAgLTExNDk4LDcgKzEyMTI1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wX2RlY19CUCwKKyAvKiAgMHg0ZSAqLyB4ODZlbXVPcF9kZWNfU0ksCisgLyogIDB4NGYgKi8geDg2ZW11T3BfZGVjX0RJLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wX3B1c2hfQVgsCisgLyogIDB4NTEgKi8geDg2ZW11T3BfcHVzaF9DWCwKKyAvKiAgMHg1MiAqLyB4ODZlbXVPcF9wdXNoX0RYLAorQEAgLTExNTA3LDcgKzEyMTMzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDU1ICovIHg4NmVtdU9wX3B1c2hfQlAsCisgLyogIDB4NTYgKi8geDg2ZW11T3BfcHVzaF9TSSwKKyAvKiAgMHg1NyAqLyB4ODZlbXVPcF9wdXNoX0RJLAorLQorIC8qICAweDU4ICovIHg4NmVtdU9wX3BvcF9BWCwKKyAvKiAgMHg1OSAqLyB4ODZlbXVPcF9wb3BfQ1gsCisgLyogIDB4NWEgKi8geDg2ZW11T3BfcG9wX0RYLAorQEAgLTExNTE2LDE2ICsxMjE0MSwxNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3BfcG9wX0JQLAorIC8qICAweDVlICovIHg4NmVtdU9wX3BvcF9TSSwKKyAvKiAgMHg1ZiAqLyB4ODZlbXVPcF9wb3BfREksCistCisgLyogIDB4NjAgKi8geDg2ZW11T3BfcHVzaF9hbGwsCisgLyogIDB4NjEgKi8geDg2ZW11T3BfcG9wX2FsbCwKKy0vKiAgMHg2MiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLCAgIC8qIGJvdW5kICovCistLyogIDB4NjMgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBhcnBsICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4NjIgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3VuZCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDYzICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJwbCAqLworIC8qICAweDY0ICovIHg4NmVtdU9wX3NlZ292cl9GUywKKyAvKiAgMHg2NSAqLyB4ODZlbXVPcF9zZWdvdnJfR1MsCisgLyogIDB4NjYgKi8geDg2ZW11T3BfcHJlZml4X2RhdGEsCisgLyogIDB4NjcgKi8geDg2ZW11T3BfcHJlZml4X2FkZHIsCistCisgLyogIDB4NjggKi8geDg2ZW11T3BfcHVzaF93b3JkX0lNTSwKKyAvKiAgMHg2OSAqLyB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NLAorIC8qICAweDZhICovIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0sCitAQCAtMTE1MzQsNyArMTIxNTksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NmQgKi8geDg2ZW11T3BfaW5zX3dvcmQsCisgLyogIDB4NmUgKi8geDg2ZW11T3Bfb3V0c19ieXRlLAorIC8qICAweDZmICovIHg4NmVtdU9wX291dHNfd29yZCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTywKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTk8sCisgLyogIDB4NzIgKi8geDg2ZW11T3BfanVtcF9uZWFyX0IsCitAQCAtMTE1NDMsNyArMTIxNjcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NzUgKi8geDg2ZW11T3BfanVtcF9uZWFyX05aLAorIC8qICAweDc2ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSwKKyAvKiAgMHg3NyAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkJFLAorLQorIC8qICAweDc4ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9TLAorIC8qICAweDc5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OUywKKyAvKiAgMHg3YSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfUCwKK0BAIC0xMTU1Miw3ICsxMjE3NSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg3ZCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkwsCisgLyogIDB4N2UgKi8geDg2ZW11T3BfanVtcF9uZWFyX0xFLAorIC8qICAweDdmICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUsCistCisgLyogIDB4ODAgKi8geDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0sCisgLyogIDB4ODEgKi8geDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0sCisgLyogIDB4ODIgKi8geDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0sCitAQCAtMTE1NjEsNyArMTIxODMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ODUgKi8geDg2ZW11T3BfdGVzdF93b3JkX1JNX1IsCisgLyogIDB4ODYgKi8geDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IsCisgLyogIDB4ODcgKi8geDg2ZW11T3BfeGNoZ193b3JkX1JNX1IsCistCisgLyogIDB4ODggKi8geDg2ZW11T3BfbW92X2J5dGVfUk1fUiwKKyAvKiAgMHg4OSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9STV9SLAorIC8qICAweDhhICovIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0sCitAQCAtMTE1NzAsNyArMTIxOTEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3BfbGVhX3dvcmRfUl9NLAorIC8qICAweDhlICovIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNLAorIC8qICAweDhmICovIHg4NmVtdU9wX3BvcF9STSwKKy0KKyAvKiAgMHg5MCAqLyB4ODZlbXVPcF9ub3AsCisgLyogIDB4OTEgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYLAorIC8qICAweDkyICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCwKK0BAIC0xMTU3OSw3ICsxMjE5OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5NSAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAsCisgLyogIDB4OTYgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJLAorIC8qICAweDk3ICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSwKKy0KKyAvKiAgMHg5OCAqLyB4ODZlbXVPcF9jYncsCisgLyogIDB4OTkgKi8geDg2ZW11T3BfY3dkLAorIC8qICAweDlhICovIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSwKK0BAIC0xMTU4OCw3ICsxMjIwNyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcF9wb3BmX3dvcmQsCisgLyogIDB4OWUgKi8geDg2ZW11T3Bfc2FoZiwKKyAvKiAgMHg5ZiAqLyB4ODZlbXVPcF9sYWhmLAorLQorIC8qICAweGEwICovIHg4NmVtdU9wX21vdl9BTF9NX0lNTSwKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0sCisgLyogIDB4YTIgKi8geDg2ZW11T3BfbW92X01fQUxfSU1NLAorQEAgLTExNjA1LDggKzEyMjIzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGFkICovIHg4NmVtdU9wX2xvZHNfd29yZCwKKyAvKiAgMHhhYyAqLyB4ODZlbXVPcF9zY2FzX2J5dGUsCisgLyogIDB4YWQgKi8geDg2ZW11T3Bfc2Nhc193b3JkLAorLQorLQorIC8qICAweGIwICovIHg4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSwKKyAvKiAgMHhiMSAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0sCisgLyogIDB4YjIgKi8geDg2ZW11T3BfbW92X2J5dGVfRExfSU1NLAorQEAgLTExNjE1LDcgKzEyMjMxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGI1ICovIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSwKKyAvKiAgMHhiNiAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0sCisgLyogIDB4YjcgKi8geDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NLAorLQorIC8qICAweGI4ICovIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSwKKyAvKiAgMHhiOSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0sCisgLyogIDB4YmEgKi8geDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NLAorQEAgLTExNjI0LDcgKzEyMjM5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGJkICovIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSwKKyAvKiAgMHhiZSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0sCisgLyogIDB4YmYgKi8geDg2ZW11T3BfbW92X3dvcmRfRElfSU1NLAorLQorIC8qICAweGMwICovIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNLAorIC8qICAweGMxICovIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNLAorIC8qICAweGMyICovIHg4NmVtdU9wX3JldF9uZWFyX0lNTSwKK0BAIC0xMTY0MSwxNCArMTIyNTUsMTQgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGNkICovIHg4NmVtdU9wX2ludF9JTU0sCisgLyogIDB4Y2UgKi8geDg2ZW11T3BfaW50bywKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcF9pcmV0LAorLQorIC8qICAweGQwICovIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSwKKyAvKiAgMHhkMSAqLyB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEsCisgLyogIDB4ZDIgKi8geDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCwKKyAvKiAgMHhkMyAqLyB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMLAorIC8qICAweGQ0ICovIHg4NmVtdU9wX2FhbSwKKyAvKiAgMHhkNSAqLyB4ODZlbXVPcF9hYWQsCistLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisgLyogIDB4ZDcgKi8geDg2ZW11T3BfeGxhdCwKKyAvKiAgMHhkOCAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4LAorIC8qICAweGQ5ICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDksCitAQCAtMTE2NTgsNyArMTIyNzIsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZGQgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlLAorIC8qICAweGRmICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYsCistCisgLyogIDB4ZTAgKi8geDg2ZW11T3BfbG9vcG5lLAorIC8qICAweGUxICovIHg4NmVtdU9wX2xvb3BlLAorIC8qICAweGUyICovIHg4NmVtdU9wX2xvb3AsCitAQCAtMTE2NjcsNyArMTIyODAsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZTUgKi8geDg2ZW11T3BfaW5fd29yZF9BWF9JTU0sCisgLyogIDB4ZTYgKi8geDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMLAorIC8qICAweGU3ICovIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCwKKy0KKyAvKiAgMHhlOCAqLyB4ODZlbXVPcF9jYWxsX25lYXJfSU1NLAorIC8qICAweGU5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0sCisgLyogIDB4ZWEgKi8geDg2ZW11T3BfanVtcF9mYXJfSU1NLAorQEAgLTExNjc2LDcgKzEyMjg4LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wX2luX3dvcmRfQVhfRFgsCisgLyogIDB4ZWUgKi8geDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwsCisgLyogIDB4ZWYgKi8geDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgsCistCisgLyogIDB4ZjAgKi8geDg2ZW11T3BfbG9jaywKKyAvKiAgMHhmMSAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wX3JlcG5lLAorQEAgLTExNjg1LDcgKzEyMjk2LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGY1ICovIHg4NmVtdU9wX2NtYywKKyAvKiAgMHhmNiAqLyB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNLAorIC8qICAweGY3ICovIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0sCistCisgLyogIDB4ZjggKi8geDg2ZW11T3BfY2xjLAorIC8qICAweGY5ICovIHg4NmVtdU9wX3N0YywKKyAvKiAgMHhmYSAqLyB4ODZlbXVPcF9jbGksCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvb3BzMi5jIGIvbGlicy94ODZlbXUvb3BzMi5jCitpbmRleCAwNmI3ZjU2Li41ZWQyYmY2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzMi5jCisrKysgYi9saWJzL3g4NmVtdS9vcHMyLmMKK0BAIC01NSwxNiArNTUsMTQgQEAgb3AxIC0gSW5zdHJ1Y3Rpb24gb3AgY29kZQorIFJFTUFSS1M6CisgSGFuZGxlcyBpbGxlZ2FsIG9wY29kZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKy0JdTggb3AyKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2lsbGVnYWxfb3AodTggb3AyKQorIHsKKy0JaW50IG1vZCwgcmwsIHJoOworLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworLQlUUkFDRV9SRUdTKCk7CistCXByaW50aygiJTA0eDolMDR4OiAlMDJYIC8lZCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUhIChtb2Q9JWQgcmw9JWQpXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0yLG9wMiwgcmgsIG1vZCwgcmwpOworKyAgICBTVEFSVF9PRl9JTlNUUigpOworKyAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICBUUkFDRV9SRUdTKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQIC0gMiwgb3AyKTsKKyAgICAgSEFMVF9TWVMoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTczLDU1ICs3MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CistSGFuZGxlcyBvcGNvZGUgMHgwZiwweDAxCistKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfZ3JvdXBfZyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisteworLQlpbnQgbW9kLCBybCwgcmg7CistCXUxNiAqZGVzdHJlZzsKKy0JdWludCBkZXN0b2Zmc2V0OworLQorLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlzd2l0Y2ggKHJoKSB7CistCQljYXNlIDQ6IC8vIFNNU1cgKFN0b3JlIE1hY2hpbmUgU3RhdHVzIFdvcmQpCistCQkJLy8gRGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCistCQkJLy8gQWx3YXlzIHJldHVybnMgMHgxMCAoaW5pdGlhbCB2YWx1ZSBhcyBwZXIgaW50ZWwgbWFudWFsIHZvbHVtZSAzLCBmaWd1cmUgOC0xCistCQkJc3dpdGNoIChtb2QpIHsKKy0JCQkJY2FzZSAwOgorLQkJCQkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkJCQkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIDB4MTApOworLQkJCQkJYnJlYWs7CistCQkJCWNhc2UgMToKKy0JCQkJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JCQkJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAweDEwKTsKKy0JCQkJCWJyZWFrOworLQkJCQljYXNlIDI6CistCQkJCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgMHgxMCk7CistCQkJCQlicmVhazsKKy0JCQkJY2FzZSAzOgorLQkJCQkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQkJCSpkZXN0cmVnID0gMHgxMDsKKy0JCQkJCWJyZWFrOworLQkJCX0KKy0JCQlicmVhazsKKy0JCWRlZmF1bHQ6CistCQkJREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIElOIDBGIDAxXG4iKTsKKy0JCQlUUkFDRV9SRUdTKCk7CistCQkJcHJpbnRrKCIlMDR4OiUwNHg6IDBGICUwMlggLyVkIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSEgKG1vZD0lZCBybD0lZClcbiIsCistCQkJCU0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMixvcDIsIHJoLCBtb2QsIHJsKTsKKy0JCQlIQUxUX1NZUygpOworLQkJCWJyZWFrOworLQl9CistCUVORF9PRl9JTlNUUigpOworLX0KKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLVJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcmR0c2ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCisgICAgIHN0YXRpYyB1NjQgY291bnRlciA9IDA7CitAQCAtMTU1LDkwICsxMDgsOTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHg4MC0weDhGCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbG9uZ19qdW1wKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sb25nX2p1bXAodTggb3AyKQorIHsKKyAgICAgczMyIHRhcmdldDsKKy0gICAgY2hhciAqbmFtZSA9IDA7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIC8qIGNvbmRpdGlvbmFsIGp1bXAgdG8gd29yZCBvZmZzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDgwOgorKyAgICBjYXNlIDB4ODA6CisgICAgICAgICBuYW1lID0gIkpPXHQiOworLSAgICAgICAgY29uZCA9ICBBQ0NFU1NfRkxBRyhGX09GKTsKKysgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4MToKKysgICAgY2FzZSAweDgxOgorICAgICAgICAgbmFtZSA9ICJKTk9cdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgyOgorKyAgICBjYXNlIDB4ODI6CisgICAgICAgICBuYW1lID0gIkpCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgzOgorKyAgICBjYXNlIDB4ODM6CisgICAgICAgICBuYW1lID0gIkpOQlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODQ6CisrICAgIGNhc2UgMHg4NDoKKyAgICAgICAgIG5hbWUgPSAiSlpcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODU6CisrICAgIGNhc2UgMHg4NToKKyAgICAgICAgIG5hbWUgPSAiSk5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NjoKKysgICAgY2FzZSAweDg2OgorICAgICAgICAgbmFtZSA9ICJKQkVcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODc6CisrICAgIGNhc2UgMHg4NzoKKyAgICAgICAgIG5hbWUgPSAiSk5CRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ODoKKysgICAgY2FzZSAweDg4OgorICAgICAgICAgbmFtZSA9ICJKU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4OToKKysgICAgY2FzZSAweDg5OgorICAgICAgICAgbmFtZSA9ICJKTlNcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhhOgorKyAgICBjYXNlIDB4OGE6CisgICAgICAgICBuYW1lID0gIkpQXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhiOgorKyAgICBjYXNlIDB4OGI6CisgICAgICAgICBuYW1lID0gIkpOUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGM6CisrICAgIGNhc2UgMHg4YzoKKyAgICAgICAgIG5hbWUgPSAiSkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhkOgorKyAgICBjYXNlIDB4OGQ6CisgICAgICAgICBuYW1lID0gIkpOTFx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGU6CisrICAgIGNhc2UgMHg4ZToKKyAgICAgICAgIG5hbWUgPSAiSkxFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhmOgorKyAgICBjYXNlIDB4OGY6CisgICAgICAgICBuYW1lID0gIkpOTEVcdCI7CisgICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYobmFtZSk7CistICAgICh2b2lkKW5hbWU7CisrICAgICh2b2lkKSBuYW1lOworICAgICB0YXJnZXQgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworICAgICB0YXJnZXQgKz0gKHMxNikgTS54ODYuUl9JUDsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChjb25kKQorLSAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpdGFyZ2V0OworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIHRhcmdldDsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtMjQ3LDg1ICsyMDEsODYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xvbmdfanVtcCh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4OTAtMHg5RgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0gICAgdTggICpkZXN0cmVnOworLSAgICBjaGFyICpuYW1lID0gMDsKKysgICAgdTggKmRlc3RyZWc7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDkwOgorKyAgICBjYXNlIDB4OTA6CisgICAgICAgICBuYW1lID0gIlNFVE9cdCI7CistICAgICAgICBjb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOworKyAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkxOgorKyAgICBjYXNlIDB4OTE6CisgICAgICAgICBuYW1lID0gIlNFVE5PXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5MjoKKysgICAgY2FzZSAweDkyOgorICAgICAgICAgbmFtZSA9ICJTRVRCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkzOgorKyAgICBjYXNlIDB4OTM6CisgICAgICAgICBuYW1lID0gIlNFVE5CXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NDoKKysgICAgY2FzZSAweDk0OgorICAgICAgICAgbmFtZSA9ICJTRVRaXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk1OgorKyAgICBjYXNlIDB4OTU6CisgICAgICAgICBuYW1lID0gIlNFVE5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NjoKKysgICAgY2FzZSAweDk2OgorICAgICAgICAgbmFtZSA9ICJTRVRCRVx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NzoKKysgICAgY2FzZSAweDk3OgorICAgICAgICAgbmFtZSA9ICJTRVROQkVcdCI7CisgICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTg6CisrICAgIGNhc2UgMHg5ODoKKyAgICAgICAgIG5hbWUgPSAiU0VUU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5OToKKysgICAgY2FzZSAweDk5OgorICAgICAgICAgbmFtZSA9ICJTRVROU1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWE6CisrICAgIGNhc2UgMHg5YToKKyAgICAgICAgIG5hbWUgPSAiU0VUUFx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5YjoKKysgICAgY2FzZSAweDliOgorICAgICAgICAgbmFtZSA9ICJTRVROUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWM6CisrICAgIGNhc2UgMHg5YzoKKyAgICAgICAgIG5hbWUgPSAiU0VUTFx0IjsKKyAgICAgICAgIGNvbmQgPSB4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWQ6CisrICAgIGNhc2UgMHg5ZDoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDllOgorKyAgICBjYXNlIDB4OWU6CisgICAgICAgICBuYW1lID0gIlNFVExFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDlmOgorKyAgICBjYXNlIDB4OWY6CisgICAgICAgICBuYW1lID0gIlNFVE5MRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URihuYW1lKTsKKy0gICAgKHZvaWQpbmFtZTsKKysgICAgKHZvaWQpIG5hbWU7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0zNDMsNyArMjk4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgY29uZCA/IDB4MDEgOiAweDAwKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBjb25kID8gMHgwMSA6IDB4MDA7CitAQCAtMzU3LDcgKzMxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEZTXG4iKTsKK0BAIC0zNzEsNyArMzI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRGU1xuIik7CitAQCAtMzg1LDcgKzM0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6IENQVUlEIHRha2VzIEVBWC9FQ1ggYXMgaW5wdXRzLCB3cml0ZXMgRUFYL0VCWC9FQ1gvRURYIGFzIG91dHB1dAorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9jcHVpZCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDUFVJRFxuIik7CitAQCAtMzk5LDExICszNTcsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFx0Iik7CitAQCAtNDE5LDEwICszNzgsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC00MzEsOSArMzkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorQEAgLTQ0NiwxMCArNDA2LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNDU4LDkgKzQxOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKK0BAIC00NzMsMTAgKzQzNCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTQ4NSwzMCArNDQ3LDMxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTUyMCwxMSArNDgzLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0JdTggc2hpZnQ7CisrICAgIHU4IHNoaWZ0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTSExEXHQiKTsKK0BAIC01NDMsOSArNTA3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNTU3LDcgKzUyMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNTc0LDkgKzUzOSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTU4OCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTYwNSw5ICs1NzEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02MTksMTMgKzU4NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjM0LDkgKzYwMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjQ1LDcgKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTY1Nyw3ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02NzcsOSArNjQ2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02ODksNyArNjU5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTcwNCw5ICs2NzQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTcxNiw3ICs2ODcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNzMxLDkgKzcwMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNzQzLDI5ICs3MTUsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTc3Nyw3ICs3NTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEdTXG4iKTsKK0BAIC03OTEsNyArNzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRHU1xuIik7CitAQCAtODA1LDExICs3ODAsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworQEAgLTgxNyw3ICs3OTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTgyNSwxMyArODAxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtODM5LDE2ICs4MTYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC04NTYsMTMgKzgzMywxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTg3MCwxNiArODQ4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtODg3LDUxICs4NjUsNTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUzMiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyB8PSBtYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKyAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05NDQsMTEgKzkyNCwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworLQl1OCBzaGlmdDsKKysgICAgdTggc2hpZnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNITERcdCIpOworQEAgLTk2Nyw5ICs5NDgsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC05ODEsNyArOTYzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05OTgsOSArOTgwLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTAxMiw3ICs5OTUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTEwMjksOSArMTAxMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTEwNDMsMTMgKzEwMjcsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwNTgsOSArMTA0MiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTA2OSw3ICsxMDU0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTA4MSw3ICsxMDY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTEwMSw5ICsxMDg3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTEzLDcgKzExMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTEyOCw5ICsxMTE1LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTQwLDcgKzExMjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTE1NSw5ICsxMTQzLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTY3LDI5ICsxMTU2LDMwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0xMjAxLDcgKzExOTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTEyMTQsMjMgKzEyMDUsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpc3JjdmFsKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgc3JjdmFsKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtMTI0MCwzOCArMTIzMyw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSBzcmN2YWw7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpIHNyY3ZhbCk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTEyODEsMzggKzEyNzcsNDEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNilzcmN2YWw7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgc3JjdmFsOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMilzcmN2YWwpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSBzcmN2YWwpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC0xMzIyLDUxICsxMzIxLDU1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpc3JjdmFsOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpIHNyY3ZhbDsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKSpzcmNyZWcpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSAqIHNyY3JlZyk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHJlczsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpKnNyY3JlZzsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSAqIHNyY3JlZzsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTM3OCw5ICsxMzgxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmgsIHJsOworKyAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworICAgICB1aW50IHNyY29mZnNldDsKKyAKK0BAIC0xNDE1LDcgKzE0MTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtMTQyNywxNDggKzE0MzEsMTU0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRyX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0cl9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJsLCByaDsKKy0JdWludCBzcmNvZmZzZXQ7CistCWludCBiaXQsZGlzcDsKKy0KKy0JU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0Jc3dpdGNoIChtb2QpIHsKKy0JY2FzZSAwOgorLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIHNyY3ZhbCxtYXNrOworLQkJCXUzMiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCX0gZWxzZSB7CistCQkJdTE2IHNyY3ZhbCxtYXNrOworLQkJCXUxNiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgJiB+bWFzaykpOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMToKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBzcmN2YWwsbWFzazsKKy0JCQl1MzIgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgJiB+bWFzayk7CistCQl9IGVsc2UgeworLQkJCXUxNiBzcmN2YWwsbWFzazsKKy0JCQl1MTYgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsICYgfm1hc2spKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDI6CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgc3JjdmFsLG1hc2s7CistCQkJdTMyICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsICYgfm1hc2spOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgc3JjdmFsLG1hc2s7CistCQkJdTE2ICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCAmIH5tYXNrKSk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTMyIG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnICY9IH5tYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCX0KKy0JCWJyZWFrOworLQl9CistCURFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKy0JRU5EX09GX0lOU1RSKCk7CisrICAgIGludCBtb2QsIHJsLCByaDsKKysgICAgdWludCBzcmNvZmZzZXQ7CisrICAgIGludCBiaXQsIGRpc3A7CisrCisrICAgIFNUQVJUX09GX0lOU1RSKCk7CisrICAgIERFQ09ERV9QUklOVEYoIkJUUlx0Iik7CisrICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisrICAgIHN3aXRjaCAobW9kKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCAmIH5tYXNrKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAxOgorKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsICYgfm1hc2spKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDI6CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgJiB+bWFzaykpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUxNiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICB9CisrICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKysgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2MDMsNyArMTYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjE1LDkgKzE2MjUsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2NTIsNyArMTY2Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9HUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjY0LDcgKzE2NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTY4NSw3ICsxNjk3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE3MTAsNyArMTcyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNzM1LDcgKzE3NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTc0OCwxMCArMTc2MywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3NTksOSArMTc3NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3ODAsNyArMTc5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODE5LDcgKzE4MzYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTgzNiw3ICsxODUzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODQ2LDIzICsxODY0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgY2FzZSA0OgorLQlERUNPREVfUFJJTlRGKCJCVFx0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JREVDT0RFX1BSSU5URigiQlRTXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFJcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNzoKKy0JREVDT0RFX1BSSU5URigiQlRDXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CistCURFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CistCVRSQUNFX1JFR1MoKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0zLG9wMiwgKG1vZDw8Nil8KHJoPDwzKXxybCk7CistCUhBTFRfU1lTKCk7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICAgICAgVFJBQ0VfUkVHUygpOworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorKyAgICAgICAgICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAgLSAzLCBvcDIsIChtb2QgPDwgNikgfCAocmggPDwgMykgfCBybCk7CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0xODc2LDIyICsxODk0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1OCBzaGlmdDsKKyAKK0BAIC0xOTAxLDIxICsxOTIwLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CitAQCAtMTkyOSwyMiArMTk0OCwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTggc2hpZnQ7CisgCitAQCAtMTk1NCwyMSArMTk3NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorQEAgLTE5ODIsMjIgKzIwMDIsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHU4IHNoaWZ0OworIAorQEAgLTIwMDcsNzQgKzIwMjgsNzUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0JICAgIHUzMiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTMyIG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJKnNyY3JlZyB8PSBtYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQkqc3JjcmVnICY9IH5tYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQkqc3JjcmVnIF49IG1hc2s7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0JICAgIHUxNiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQkqc3JjcmVnIHw9IG1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCSpzcmNyZWcgJj0gfm1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCSpzcmNyZWcgXj0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0yMDg2LDExICsyMTA4LDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworQEAgLTIwOTgsNyArMjEyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMjEwNiwxMyArMjEyOSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTIxMjAsMTYgKzIxNDQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgXiBtYXNrKSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0yMTM3LDEzICsyMTYxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMjE1MSwxNiArMjE3NiwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCBeIG1hc2spKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTIxNjgsMTMgKzIxOTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTgyLDE2ICsyMjA4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsIF4gbWFzaykpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgICAgICAgICAgICAgdTMyIG1hc2s7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworQEAgLTIyMDAsMTkgKzIyMjYsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnIF49IG1hc2s7CistCQl9IGVsc2UgeworLQkJCXUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MTYgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTIyMjUsNyArMjI1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIyMzMsMTA1ICsyMjYxLDExNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNGXHQiKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0gICAgc3dpdGNoKG1vZCkgeworKyAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKy0gICAgY2FzZSAzOgkJCQkvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMzQxLDcgKzIzODEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjM0OSwxMDUgKzIzOTAsMTE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCU1JcdCIpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLSAgICBzd2l0Y2gobW9kKSB7CisrICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworLSAgICBjYXNlIDM6CQkJCS8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTI0NTcsNyArMjUxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yNDc0LDE4ICsyNTI4LDE5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMzMikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjQ5OSwxOCArMjU1NCwxOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMxNikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczE2KSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI1MjQsNDQgKzI1ODAsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMxNikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSAoczMyKSgoczgpKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHMzMikgKChzOCkgKiBzcmNyZWcpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpKChzOCkqc3JjcmVnKTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpICgoczgpICogc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMjU3Myw3ICsyNjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI1ODksNyArMjY0OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisrICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHMxNikgZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNTk4LDcgKzI2NTcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjYwNywxOCArMjY2NiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqZGVzdHJlZyA9IChzMzIpKChzMTYpKnNyY3JlZyk7CisrICAgICAgICAqZGVzdHJlZyA9IChzMzIpICgoczE2KSAqIHNyY3JlZyk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMjYyNiw0MCArMjY4NSw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB9CisgCisgLyogSGFuZGxlcyBvcGNvZGVzIDB4YzgtMHhjZiAqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3dhcCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnN3YXAodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNXQVBcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworIAorICAgICBzd2l0Y2ggKG9wMikgeworLQljYXNlIDB4Yzg6CistCSAgICBNLng4Ni5SX0VBWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUFYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Yzk6CistCSAgICBNLng4Ni5SX0VDWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUNYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2E6CistCSAgICBNLng4Ni5SX0VEWCA9IGJzd2FwXzMyKE0ueDg2LlJfRURYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2I6CistCSAgICBNLng4Ni5SX0VCWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2M6CistCSAgICBNLng4Ni5SX0VTUCA9IGJzd2FwXzMyKE0ueDg2LlJfRVNQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Q6CistCSAgICBNLng4Ni5SX0VCUCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2U6CistCSAgICBNLng4Ni5SX0VTSSA9IGJzd2FwXzMyKE0ueDg2LlJfRVNJKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Y6CistCSAgICBNLng4Ni5SX0VESSA9IGJzd2FwXzMyKE0ueDg2LlJfRURJKTsKKy0JICAgIGJyZWFrOworLQlkZWZhdWx0OgorLQkgICAgLyogY2FuJ3QgaGFwcGVuICovCistCSAgICBicmVhazsKKysgICAgY2FzZSAweGM4OgorKyAgICAgICAgTS54ODYuUl9FQVggPSBic3dhcF8zMihNLng4Ni5SX0VBWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGM5OgorKyAgICAgICAgTS54ODYuUl9FQ1ggPSBic3dhcF8zMihNLng4Ni5SX0VDWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNhOgorKyAgICAgICAgTS54ODYuUl9FRFggPSBic3dhcF8zMihNLng4Ni5SX0VEWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNiOgorKyAgICAgICAgTS54ODYuUl9FQlggPSBic3dhcF8zMihNLng4Ni5SX0VCWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNjOgorKyAgICAgICAgTS54ODYuUl9FU1AgPSBic3dhcF8zMihNLng4Ni5SX0VTUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNkOgorKyAgICAgICAgTS54ODYuUl9FQlAgPSBic3dhcF8zMihNLng4Ni5SX0VCUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNlOgorKyAgICAgICAgTS54ODYuUl9FU0kgPSBic3dhcF8zMihNLng4Ni5SX0VTSSk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNmOgorKyAgICAgICAgTS54ODYuUl9FREkgPSBic3dhcF8zMihNLng4Ni5SX0VESSk7CisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIC8qIGNhbid0IGhhcHBlbiAqLworKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTI2NjksMjUgKzI3MjksMzIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzd2FwKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRG91YmxlIGJ5dGUgb3BlcmF0aW9uIGNvZGUgdGFibGU6CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisteworLS8qICAweDAwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogR3JvdXAgRiAocmluZyAwIFBNKSAgICAgICovCistLyogIDB4MDEgKi8geDg2ZW11T3AyX2dyb3VwX2csICAgICAvKiBHcm91cCBHIChyaW5nIDAgUE0pICAgICAgKi8KKy0vKiAgMHgwMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworLS8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbHNsIChyaW5nIDAgUE0pICAgICAgICAgICovCisrdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkgKHU4KSA9IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEYgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEcgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxzbCAocmluZyAwIFBNKSAgICAgICAgICAqLworIC8qICAweDA0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLS8qICAweDA1ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCistLyogIDB4MDYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKy0vKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworLS8qICAweDA4ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogaW52ZCAocmluZyAwIFBNKSAgICAgICAgICovCistLyogIDB4MDkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnZkIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKyAvKiAgMHgwYSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzA0LDE0ICsyNzcxLDE5IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCistLyogIDB4MjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworLS8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLGRyZWcgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiBjcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCistLyogIDB4MjMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworLS8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLHRyZWcgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMixkcmVnIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IGNyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMix0cmVnIChyaW5nIDAgUE0pICovCisgLyogIDB4MjUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistLyogIDB4MjYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgdHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiB0cmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisgLyogIDB4MjcgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjggKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjcyMSw3ICsyNzkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgyZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgzMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzMSAqLyB4ODZlbXVPcDJfcmR0c2MsCisgLyogIDB4MzIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjczOCw3ICsyODA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgzZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg0MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzU1LDcgKzI4MjUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3NzIsNyArMjg0MSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjc4OSw3ICsyODU3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg2ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yODA2LDcgKzI4NzMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDdkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDgwICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4ODEgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4MiAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorQEAgLTI4MjMsNyArMjg4OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4ZSAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDhmICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCistCisgLyogIDB4OTAgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDkxICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5MiAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCitAQCAtMjg0MCw3ICsyOTA1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OWUgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDlmICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKy0KKyAvKiAgMHhhMCAqLyB4ODZlbXVPcDJfcHVzaF9GUywKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcDJfcG9wX0ZTLAorIC8qICAweGEyICovIHg4NmVtdU9wMl9jcHVpZCwKK0BAIC0yODU3LDkgKzI5MjEsMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhhZCAqLyB4ODZlbXVPcDJfc2hyZF9DTCwKKyAvKiAgMHhhZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhhZiAqLyB4ODZlbXVPcDJfaW11bF9SX1JNLAorLQorLS8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworLS8qICAweGIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGNtcHhjaGcgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhiMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBjbXB4Y2hnICovCisgLyogIDB4YjIgKi8geDg2ZW11T3AyX2xzc19SX0lNTSwKKyAvKiAgMHhiMyAqLyB4ODZlbXVPcDJfYnRyX1IsCisgLyogIDB4YjQgKi8geDg2ZW11T3AyX2xmc19SX0lNTSwKK0BAIC0yODc0LDkgKzI5MzksMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhiZCAqLyB4ODZlbXVPcDJfYnNyLAorIC8qICAweGJlICovIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0sCisgLyogIDB4YmYgKi8geDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSwKKy0KKy0vKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKy0vKiAgMHhjMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiB4YWRkICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YzEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogeGFkZCAqLworIC8qICAweGMyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGMzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGM0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI4OTEsNyArMjk1Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4Y2QgKi8geDg2ZW11T3AyX2Jzd2FwLAorIC8qICAweGNlICovIHg4NmVtdU9wMl9ic3dhcCwKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcDJfYnN3YXAsCistCisgLyogIDB4ZDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjkwOCw3ICsyOTczLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhkZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHhlMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yOTI1LDcgKzI5ODksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweGYwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMgYi9saWJzL3g4NmVtdS9wcmltX29wcy5jCitpbmRleCBmZjE3YzNmLi4yNGY3NmI0IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvcHJpbV9vcHMuYworKysrIGIvbGlicy94ODZlbXUvcHJpbV9vcHMuYworQEAgLTEwMiwxOCArMTAyLDIzIEBACisgI2RlZmluZQlQUklNX09QU19OT19SRURFRklORV9BU00KKyAjaW5jbHVkZSAieDg2ZW11L3g4NmVtdWkuaCIKKyAKKysjaWYgZGVmaW5lZChfX0dOVUNfXykKKysjaWYgZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pCisrI2luY2x1ZGUgIng4NmVtdS9wcmltX3g4Nl9nY2MuaCIKKysjZW5kaWYKKysjZW5kaWYKKysKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorLXsKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKytzdGF0aWMgdTMyIHg4NmVtdV9wYXJpdHlfdGFiWzhdID0geworKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorIH07CisgCisgI2RlZmluZSBQQVJJVFkoeCkgICAoKCh4ODZlbXVfcGFyaXR5X3RhYlsoeCkgLyAzMl0gPj4gKCh4KSAlIDMyKSkgJiAxKSA9PSAwKQorQEAgLTEyNSw4OCArMTMwLDk2IEBAIHN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFhX3dvcmQodTE2IGQpCisrdTE2CisrYWFhX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkICs9IDB4NjsKKy0JCWQgKz0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCArPSAweDY7CisrICAgICAgICBkICs9IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFzX3dvcmQodTE2IGQpCisrdTE2CisrYWFzX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkIC09IDB4NjsKKy0JCWQgLT0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCAtPSAweDY7CisrICAgICAgICBkIC09IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFkX3dvcmQodTE2IGQpCisrdTE2CisrYWFkX3dvcmQodTE2IGQpCisgeworLQl1MTYgbDsKKy0JdTggaGIsIGxiOworKyAgICB1MTYgbDsKKysgICAgdTggaGIsIGxiOworIAorLQloYiA9ICh1OCkoKGQgPj4gOCkgJiAweGZmKTsKKy0JbGIgPSAodTgpKChkICYgMHhmZikpOworLQlsID0gKHUxNikoKGxiICsgMTAgKiBoYikgJiAweEZGKTsKKysgICAgaGIgPSAodTgpICgoZCA+PiA4KSAmIDB4ZmYpOworKyAgICBsYiA9ICh1OCkgKChkICYgMHhmZikpOworKyAgICBsID0gKHUxNikgKChsYiArIDEwICogaGIpICYgMHhGRik7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CistCXJldHVybiBsOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBTSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhbV93b3JkKHU4IGQpCisrdTE2CisrYWFtX3dvcmQodTggZCkKKyB7CisgICAgIHUxNiBoLCBsOworIAorLQloID0gKHUxNikoZCAvIDEwKTsKKy0JbCA9ICh1MTYpKGQgJSAxMCk7CistCWwgfD0gKHUxNikoaCA8PCA4KTsKKysgICAgaCA9ICh1MTYpIChkIC8gMTApOworKyAgICBsID0gKHUxNikgKGQgJSAxMCk7CisrICAgIGwgfD0gKHUxNikgKGggPDwgOCk7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiBsOworIH0KKyAKK0BAIC0yMTQsMTU1ICsyMjcsMTYxIEBAIHUxNiBhYW1fd29yZCh1OCBkKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQURDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBhZGNfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrYWRjX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKy0JCXJlcyA9IDEgKyBkICsgczsKKy0JZWxzZQorLQkJcmVzID0gZCArIHM7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHJlcyA9IDEgKyBkICsgczsKKysgICAgZWxzZQorKyAgICAgICAgcmVzID0gZCArIHM7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhZGNfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYWRjX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorLQkJcmVzID0gMSArIGQgKyBzOworLQllbHNlCistCQlyZXMgPSBkICsgczsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcmVzID0gMSArIGQgKyBzOworKyAgICBlbHNlCisrICAgICAgICByZXMgPSBkICsgczsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGNfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRjX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJbG8gPSAxICsgKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gMSArIGQgKyBzOworLQkJfQorLQllbHNlIHsKKy0JCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gZCArIHM7CistCQl9CistCWhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICBsbyA9IDEgKyAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CisrICAgICAgICByZXMgPSAxICsgZCArIHM7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgICAgIHJlcyA9IGQgKyBzOworKyAgICB9CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKythZGRfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUREIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2FkZF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGRfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRkX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQlyZXMgPSBkICsgczsKKy0JaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworKyAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKyAgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworICAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKyAKKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMzcxLDM5ICszOTAsNDEgQEAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggYW5kX2J5dGUodTggZCwgdTggcykKKyt1OAorK2FuZF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBzZXQgdGhlIGZsYWdzICAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBTkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhbmRfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYW5kX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorICAgICByZXMgPSBkICYgczsKKyAKKyAgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiByZXM7CisgfQorIAorQEAgLTQxMSw0MzMgKzQzMiw0NTYgQEAgdTE2IGFuZF93b3JkKHUxNiBkLCB1MTYgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKythbmRfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIENNUCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggY21wX2J5dGUodTggZCwgdTggcykKKyt1OAorK2NtcF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2NtcF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIGQ7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgY21wX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2NtcF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERBQSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZGFhX2J5dGUodTggZCkKKyt1OAorK2RhYV9ieXRlKHU4IGQpCisgeworLQl1MzIgcmVzID0gZDsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCXJlcyArPSA2OworLQkJU0VUX0ZMQUcoRl9BRik7CistCX0KKy0JaWYgKHJlcyA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCXJlcyArPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweEZGKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIHUzMiByZXMgPSBkOworKworKyAgICBpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgcmVzICs9IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAocmVzID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgcmVzICs9IDB4NjA7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4RkYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBEQVMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGRhc19ieXRlKHU4IGQpCisrdTgKKytkYXNfYnl0ZSh1OCBkKQorIHsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCWQgLT0gNjsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQl9CistCWlmIChkID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJZCAtPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkoZCAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIGQ7CisrICAgIGlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICBkIC09IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAoZCA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgIGQgLT0gMHg2MDsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGQgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGQgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREVDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBkZWNfYnl0ZSh1OCBkKQorK3U4CisrZGVjX2J5dGUodTggZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCistCWJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworLQkvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBERUMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBkZWNfd29yZCh1MTYgZCkKKyt1MTYKKytkZWNfd29yZCh1MTYgZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICAvKiBiYXNlZCBvbiB0aGUgc3ViX2J5dGUgcm91dGluZSwgd2l0aCBzPT0xICovCisgICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworICAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERFQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY19sb25nKHUzMiBkKQorK3UzMgorK2RlY19sb25nKHUzMiBkKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSAxOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKy0JLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggaW5jX2J5dGUodTggZCkKKyt1OAorK2luY19ieXRlKHU4IGQpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIDE7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoKDEgJiBkKSB8ICh+cmVzKSkgJiAoMSB8IGQpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9ICgoMSAmIGQpIHwgKH5yZXMpKSAmICgxIHwgZCk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGluY193b3JkKHUxNiBkKQorK3UxNgorK2luY193b3JkKHUxNiBkKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTkMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBpbmNfbG9uZyh1MzIgZCkKKyt1MzIKKytpbmNfbG9uZyh1MzIgZCkKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggb3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrb3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTggcmVzOyAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTggcmVzOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIHwgczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIHwgczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBvcl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytvcl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUxNiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CistCS8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgfCBzOworKyAgICAvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBvcl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CisrICAgIHJlcyA9IGQgfCBzOworIAorLQkvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggbmVnX2J5dGUodTggcykKKyt1OAorK25lZ19ieXRlKHU4IHMpCisgeworICAgICByZWdpc3RlciB1OCByZXM7CisgICAgIHJlZ2lzdGVyIHU4IGJjOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTgpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCistCSAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKy0JICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCistCSAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorLQkgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCistCWJjID0gcmVzIHwgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHU4KSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbmVnX3dvcmQodTE2IHMpCisteworLQlyZWdpc3RlciB1MTYgcmVzOworLQlyZWdpc3RlciB1MTYgYmM7CistCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CistCXJlcyA9ICh1MTYpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKy0JICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworLQkgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKy0JICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CistCSAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKy0JYmMgPSByZXMgfCBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKyt1MTYKKytuZWdfd29yZCh1MTYgcykKKyt7CisrICAgIHJlZ2lzdGVyIHUxNiByZXM7CisrICAgIHJlZ2lzdGVyIHUxNiBiYzsKKysKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHUxNikgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5lZ19sb25nKHUzMiBzKQorK3UzMgorK25lZ19sb25nKHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsKKy0JcmVnaXN0ZXIgdTMyIGJjOworLQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTMyKS1zOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorLQkgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CistCSAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorLQkgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKy0JICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworLQliYyA9IHJlcyB8IHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworKyAgICByZXMgPSAodTMyKSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrCisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorKyAgICAgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CisrICAgICAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorKyAgICAgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKysgICAgICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworKyAgICBiYyA9IHJlcyB8IHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBub3RfYnl0ZSh1OCBzKQorK3U4Cisrbm90X2J5dGUodTggcykKKyB7CistCXJldHVybiB+czsKKysgICAgcmV0dXJuIH5zOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbm90X3dvcmQodTE2IHMpCisrdTE2Cisrbm90X3dvcmQodTE2IHMpCisgeworLQlyZXR1cm4gfnM7CisrICAgIHJldHVybiB+czsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE5PVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5vdF9sb25nKHUzMiBzKQorK3UzMgorK25vdF9sb25nKHUzMiBzKQorIHsKKy0JcmV0dXJuIH5zOworKyAgICByZXR1cm4gfnM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyY2xfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrLCBjZjsKKyAKKyAgICAgLyogcyBpcyB0aGUgcm90YXRlIGRpc3RhbmNlLiAgSXQgdmFyaWVzIGZyb20gMCAtIDguICovCistCS8qIGhhdmUKKysgICAgLyogaGF2ZQorIAorICAgICAgICBDRiAgQl83IEJfNiBCXzUgQl80IEJfMyBCXzIgQl8xIEJfMCAKKyAKK0BAIC04NjEsOSArOTA1LDkgQEAgdTggcmNsX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXzAKKyAgICAgICAgMykgQl8obi0xKSA8LSBjZgorICAgICAgICA0KSBCXyhuLTIpIC4uIEJfMCA8LSAgYl83IC4uIGJfKDgtKG4tMSkpCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyg4LW4pICAgICAgICAgICAgICovCisgICAgICAgICBjZiA9IChkID4+ICg4IC0gY250KSkgJiAweDE7CitAQCAtODcyLDcgKzkxNiw3IEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICBpbnRvIHRoZSByYW5nZSBCXzcgLi4gQl9jbnQgKi8KKyAgICAgICAgIC8qIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8wICAqLworICAgICAgICAgLyogbm90ZSB0aGF0IHRoZSByaWdodCBoYW5kIHNpZGUgZG9uZSBieSB0aGUgbWFzayAqLworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmY7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpICYgMHhmZjsKKyAKKyAgICAgICAgIC8qIG5vdyB0aGUgaGlnaCBzdHVmZiB3aGljaCByb3RhdGVkIGFyb3VuZCAKKyAgICAgICAgICAgIGludG8gdGhlIHBvc2l0aW9ucyBCX2NudC0yIC4uIEJfMCAqLworQEAgLTg4NCw4MSArOTI4LDgxIEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICByZXMgfD0gKGQgPj4gKDkgLSBjbnQpKSAmIG1hc2s7CisgCisgICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisgICAgICAgICAgICAgLyogIEJfKG4tMSkgPC0gY2YgKi8KKyAgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisgICAgICAgICB9CisgICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBiYXNlZCBvbiB0aGUgdmFyaWFibGUgImNmIiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIGNudD09MSwgdGhlbiBpdCBpcyB0aGUgCisgICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKyAgICAgICAgIC8qIHBhcmVudGhlc2l6ZWQgdGhpcyBleHByZXNzaW9uIHNpbmNlIGl0IGFwcGVhcnMgdG8KKyAgICAgICAgICAgIGJlIGNhdXNpbmcgT0YgdG8gYmUgbWlzc2V0ICovCistICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gNikgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworIAorICAgICB9CistCXJldHVybiAodTgpcmVzOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByY2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyY2xfd29yZCh1MTYgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQljZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKy0JCW1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCQlyZXMgfD0gMSA8PCAoY250IC0gMSk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY2xfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyY2xfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CistCQljZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CistCQltYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CisrICAgICAgICBtYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcmNyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jjcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1MzIJcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisgICAgIC8qIAorICAgICAgICBzIGlzIHRoZSByb3RhdGUgZGlzdGFuY2UuICBJdCB2YXJpZXMgZnJvbSAwIC0gOC4KKyAgICAgICAgZCBpcyB0aGUgYnl0ZSBvYmplY3Qgcm90YXRlZC4gIAorQEAgLTk3OSw5ICsxMDIzLDkgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiXyhuKQorICAgICAgICAzKSBCXyg4LW4pIDwtIGNmCisgICAgICAgIDQpIEJfKDcpIC4uIEJfKDgtKG4tMSkpIDwtICBiXyhuLTIpIC4uIGJfKDApCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyhuLTEpICAgICAgICAgICAgICAqLworICAgICAgICAgaWYgKGNudCA9PSAxKSB7CitAQCAtOTkwLDExICsxMDM0LDEyIEBAIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICAgICAgMCBpZiBmbGFnIG5vdCBzZXQKKyAgICAgICAgICAgICAgICBub24temVybyBpZiBmbGFnIGlzIHNldC4KKyAgICAgICAgICAgICAgICBkb2luZyBhY2Nlc3NfZmxhZyguLikgIT0gMCBjYXN0cyB0aGF0IGludG8gZWl0aGVyIAorLQkJCSAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorKyAgICAgICAgICAgICAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorICAgICAgICAgICAgICAgIChpLmUuIHBhY2tlZCBiaXQgYXJyYXkgb3IgdW5wYWNrZWQuKQorICAgICAgICAgICAgICAqLworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICBvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKyAKKyAgICAgICAgIC8qIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl9uICAqLworQEAgLTEwMTYsOTMgKzEwNjEsOTUgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgIHJlcyB8PSAoZCA8PCAoOSAtIGNudCkpOworIAorICAgICAgICAgLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworICAgICAgICAgICAgIC8qICBCXyg4LW4pIDwtIGNmICovCisgICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDggLSBjbnQpOworICAgICAgICAgfQorICAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBjbnQ9PTEsIHRoZW4gaXQgaXMgdGhlIAorICAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCisgICAgICAgICAvKiBwYXJlbnRoZXNpemVkLi4uICovCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkJIEZfT0YpOworLQkJfQorLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gNikgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcmNyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2CisrcmNyX3dvcmQodTE2IGQsIHU4IHMpCisgeworLQl1MzIgcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQljZiA9IGQgJiAweDE7CistCQkJb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKy0JCX0gZWxzZQorLQkJCWNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKy0JCW1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CistCQlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCXJlcyB8PSAoZCA8PCAoMTcgLSBjbnQpKTsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJCXJlcyB8PSAxIDw8ICgxNiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAxNCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICByZXMgfD0gKGQgPDwgKDE3IC0gY250KSk7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoMTYgLSBjbnQpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY3JfbG9uZyh1MzIgZCwgdTggcykKKy17CistCXUzMiByZXMsIGNudDsKKy0JdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworLQorLQkvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJY2YgPSBkICYgMHgxOworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistCQl9IGVsc2UKKy0JCQljZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlpZiAoY250ICE9IDEpCistCQkJcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3Jjcl9sb25nKHUzMiBkLCB1OCBzKQorK3sKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisrCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICBpZiAoY250ICE9IDEpCisrICAgICAgICAgICAgcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9sX2J5dGUodTggZCwgdTggcykKKyt1OAorK3JvbF9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTEyMSw4NyArMTE2OCw5MCBAQCB1OCByb2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICBJRiBuID4gMCAKKyAgICAgICAgMSkgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKQorICAgICAgICAyKSBCXyhuLTEpIC4uIEJfKDApIDwtICBiXyg3KSAuLiBiXyg4LW4pCistCSAqLworKyAgICAgKi8KKyAgICAgcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworLQkJLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworLQkJcmVzID0gKGQgPDwgY250KTsKKysgICAgaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworKyAgICAgICAgLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworKyAgICAgICAgcmVzID0gKGQgPDwgY250KTsKKyAKKy0JCS8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKysgICAgICAgIC8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKysgICAgICAgIG1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKyAKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCS8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorLQkJICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKy0JCQkJCQkJIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb2xfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8IGNudCk7CistCQltYXNrID0gKDEgPDwgY250KSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorLQkJCQkJCQkgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJvbF9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3JvbF9sb25nKHUzMiBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgY250KTsKKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMzIgLSBjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCistCQkJCQkJCSBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMzApICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMyIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDMwKSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTIxOSw5ICsxMjY5LDkgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgSUYgbiA+IDAgCisgICAgICAgIDEpIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikKKyAgICAgICAgMikgQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKQorLQkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeyAgICAgICAgICAgLyogbm90IGEgdHlwbywgZG8gbmFkYSBpZiBjbnQ9PTAgKi8KKysgICAgICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDgpICE9IDApIHsgICAvKiBub3QgYSB0eXBvLCBkbyBuYWRhIGlmIGNudD09MCAqLworICAgICAgICAgLyogQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKSAqLworICAgICAgICAgcmVzID0gKGQgPDwgKDggLSBjbnQpKTsKKyAKK0BAIC0xMjMxLDI5MSArMTI4MSwzMTcgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAKKyAgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyIAorICAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworLQkJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorICAgICAgICAgICAgeG9yIG9mIHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzLiAgQmxlY2NrLiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDYpLCBGX09GKTsKKy0JfSBlbHNlIGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gNiksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb3Jfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb3Jfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworLQkJbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByb3JfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyb3JfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzazsKKysgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2hsX2J5dGUodTggZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCQkvKiBsYXN0IGJpdCBzaGlmdGVkIG91dCBnb2VzIGludG8gY2FycnkgZmxhZyAqLworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSBkIDw8IGNudDsKKy0JCQljZiA9IGQgJiAoMSA8PCAoOCAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gKHU4KSBkOworLQkJfQorKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKworKyAgICAgICAgLyogbGFzdCBiaXQgc2hpZnRlZCBvdXQgZ29lcyBpbnRvIGNhcnJ5IGZsYWcgKi8KKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDggLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTgpIGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQkvKiBOZWVkcyBzaW1wbGlmaWNhdGlvbi4gKi8KKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwKSA9PSAweDgwKSBeCistCQkJCQkJCQkJIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCistCQkJLyogd2FzIChNLng4Ni5SX0ZMRyZGX0NGKT09Rl9DRikpLCAqLworLQkJCQkJCQkJCUZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgLyogTmVlZHMgc2ltcGxpZmljYXRpb24uICovCisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MCkgPT0gMHg4MCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyAoTS54ODYuUl9GTEcmRl9DRik9PUZfQ0YpKSwgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hsX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2hsX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9ICh1MTYpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJCSAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorLQkJCQkJCQkJCUZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICAgICAgfQorLSAgICB9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IGQgPDwgY250OworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTE2KSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsX2xvbmcodTMyIGQsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKy0JCQkJCQkJCSAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuIHJlczsKKyt1MzIKKytzaGxfbG9uZyh1MzIgZCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2hyX2J5dGUodTggZCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gZCA+PiBjbnQ7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAodTgpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiA2KSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMtMSkpICYgMHgxLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKyt1OAorK3Nocl9ieXRlKHU4IGQsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IGQgPj4gY250OworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9ICh1OCkgZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDYpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMgLSAxKSkgJiAweDEsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Nocl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKyAKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworICAgICAgICAgfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNocl9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3Nocl9sb25nKHUzMiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICByZXMgPSBkOworICAgICAgICAgfQorICAgICAgICAgaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMTUyNCw1OTIgKzE2MDAsNjM0IEBAIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNBUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2FyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Nhcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisgCistCXJlcyA9IGQ7CistCXNmID0gZCAmIDB4ODA7CisrICAgIHJlcyA9IGQ7CisrICAgIHNmID0gZCAmIDB4ODA7CisgICAgIGNudCA9IHMgJSA4OworLQlpZiAoY250ID4gMCAmJiBjbnQgPCA4KSB7CistCQltYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7CistCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoc2YpIHsKKy0JCQlyZXMgfD0gfm1hc2s7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDgpIHsKKysgICAgaWYgKGNudCA+IDAgJiYgY250IDwgOCkgeworKyAgICAgICAgbWFzayA9ICgxIDw8ICg4IC0gY250KSkgLSAxOworKyAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKHNmKSB7CisrICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKGNudCA+PSA4KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IDA7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2FyX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwOworICAgICBjbnQgPSBzICUgMTY7CistCXJlcyA9IGQ7CistCWlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisgICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKyAgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworICAgICAgICAgfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgfSBlbHNlIGlmIChjbnQgPj0gMTYpIHsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDE2KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmY7CistCQkJU0VUX0ZMQUcoRl9DRik7CistCQkJQ0xFQVJfRkxBRyhGX1pGKTsKKy0JCQlTRVRfRkxBRyhGX1NGKTsKKy0JCQlTRVRfRkxBRyhGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrc2FyX2xvbmcodTMyIGQsIHU4IHMpCisgeworICAgICB1MzIgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwMDAwMDsKKyAgICAgY250ID0gcyAlIDMyOworLQlyZXMgPSBkOworLQlpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworKyAgICByZXMgPSBkOworKyAgICBpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworICAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKy0JCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworICAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgfD0gfm1hc2s7CisgICAgICAgICB9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDMyKSB7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDMyKSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmZmZmZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gMDsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNobGRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2LWNudCkpOworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKyt1MTYKKytzaGxkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2IC0gY250KSk7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSExEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzItY250KSk7CistCQkJY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3NobGRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocmRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3UxNgorK3NocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFJEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hyZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisrdTMyCisrc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiByZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0JCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzYmJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2JiX2J5dGUodTggZCwgdTggcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCistCQlyZXMgPSBkIC0gcyAtIDE7CistCWVsc2UKKy0JCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisrICAgIGVsc2UKKysgICAgICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQkIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzYmJfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2Cisrc2JiX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorICAgICAgICAgcmVzID0gZCAtIHMgLSAxOworICAgICBlbHNlCisgICAgICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNCQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzYmJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKyAgICAgICAgIHJlcyA9IGQgLSBzIC0gMTsKKyAgICAgZWxzZQorICAgICAgICAgcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzdWJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc3ViX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK3N1Yl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNVQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzdWJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2J5dGUodTggZCwgdTggcykKKyt2b2lkCisrdGVzdF9ieXRlKHU4IGQsIHU4IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCisgICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworICAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFRFU1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyt2b2lkCisrdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIC8qIEFGID09IGRvbnQgY2FyZSAqLworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorK3ZvaWQKKyt0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFhPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggeG9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3hvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgXiBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBYT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiB4b3Jfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisreG9yX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIF4gczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIF4gczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgWE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgeG9yX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK3hvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCBeIHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2J5dGUodTggcykKKyt2b2lkCisraW11bF9ieXRlKHU4IHMpCisgeworLQlzMTYgcmVzID0gKHMxNikoKHM4KU0ueDg2LlJfQUwgKiAoczgpcyk7CisrICAgIHMxNiByZXMgPSAoczE2KSAoKHM4KSBNLng4Ni5SX0FMICogKHM4KSBzKTsKKyAKKy0JTS54ODYuUl9BWCA9IHJlczsKKy0JaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF93b3JkKHUxNiBzKQorK3ZvaWQKKytpbXVsX3dvcmQodTE2IHMpCisgeworLQlzMzIgcmVzID0gKHMxNilNLng4Ni5SX0FYICogKHMxNilzOworKyAgICBzMzIgcmVzID0gKHMxNikgTS54ODYuUl9BWCAqIChzMTYpIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBNLng4Ni5SX0FYID0gKHUxNikgcmVzOworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgKHJlcyA+PiAxNik7CisrICAgIGlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmdfZGlyZWN0KHUzMiAqcmVzX2xvLCB1MzIqIHJlc19oaSx1MzIgZCwgdTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZ19kaXJlY3QodTMyICogcmVzX2xvLCB1MzIgKiByZXNfaGksIHUzMiBkLCB1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXM2NCByZXMgPSAoczMyKWQgKiAoczMyKXM7CisrICAgIHM2NCByZXMgPSAoczY0KSAoczMyKSBkICogKHMzMikgczsKKyAKKy0JKnJlc19sbyA9ICh1MzIpcmVzOworLQkqcmVzX2hpID0gKHUzMikocmVzID4+IDMyKTsKKysgICAgKnJlc19sbyA9ICh1MzIpIHJlczsKKysgICAgKnJlc19oaSA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglkX2xvLGRfaGksZF9zaWduOworLQl1MzIJc19sbyxzX2hpLHNfc2lnbjsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlpZiAoKGRfc2lnbiA9IGQgJiAweDgwMDAwMDAwKSAhPSAwKQorLQkJZCA9IC1kOworLQlkX2xvID0gZCAmIDB4RkZGRjsKKy0JZF9oaSA9IGQgPj4gMTY7CistCWlmICgoc19zaWduID0gcyAmIDB4ODAwMDAwMDApICE9IDApCistCQlzID0gLXM7CistCXNfbG8gPSBzICYgMHhGRkZGOworLQlzX2hpID0gcyA+PiAxNjsKKy0JcmxvX2xvID0gZF9sbyAqIHNfbG87CistCXJsb19oaSA9IChkX2hpICogc19sbyArIGRfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworLQlyaGlfbG8gPSBkX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworLQkqcmVzX2xvID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JKnJlc19oaSA9IHJoaV9sbzsKKy0JaWYgKGRfc2lnbiAhPSBzX3NpZ24pIHsKKy0JCWQgPSB+KnJlc19sbzsKKy0JCXMgPSAoKChkICYgMHhGRkZGKSArIDEpID4+IDE2KSArIChkID4+IDE2KTsKKy0JCSpyZXNfbG8gPSB+KnJlc19sbysxOworLQkJKnJlc19oaSA9IH4qcmVzX2hpKyhzID4+IDE2KTsKKy0JCX0KKysgICAgdTMyIGRfbG8sIGRfaGksIGRfc2lnbjsKKysgICAgdTMyIHNfbG8sIHNfaGksIHNfc2lnbjsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGlmICgoZF9zaWduID0gZCAmIDB4ODAwMDAwMDApICE9IDApCisrICAgICAgICBkID0gLWQ7CisrICAgIGRfbG8gPSBkICYgMHhGRkZGOworKyAgICBkX2hpID0gZCA+PiAxNjsKKysgICAgaWYgKChzX3NpZ24gPSBzICYgMHg4MDAwMDAwMCkgIT0gMCkKKysgICAgICAgIHMgPSAtczsKKysgICAgc19sbyA9IHMgJiAweEZGRkY7CisrICAgIHNfaGkgPSBzID4+IDE2OworKyAgICBybG9fbG8gPSBkX2xvICogc19sbzsKKysgICAgcmxvX2hpID0gKGRfaGkgKiBzX2xvICsgZF9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CisrICAgIHJoaV9sbyA9IGRfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CisrICAgICpyZXNfbG8gPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICAqcmVzX2hpID0gcmhpX2xvOworKyAgICBpZiAoZF9zaWduICE9IHNfc2lnbikgeworKyAgICAgICAgZCA9IH4qcmVzX2xvOworKyAgICAgICAgcyA9ICgoKGQgJiAweEZGRkYpICsgMSkgPj4gMTYpICsgKGQgPj4gMTYpOworKyAgICAgICAgKnJlc19sbyA9IH4qcmVzX2xvICsgMTsKKysgICAgICAgICpyZXNfaGkgPSB+KnJlc19oaSArIChzID4+IDE2KTsKKysgICAgfQorICNlbmRpZgorIH0KKyAKK0BAIC0yMTE3LDUzICsyMjM1LDU5IEBAIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmcodTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZyh1MzIgcykKKyB7CistCWltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCZNLng4Ni5SX0VEWCxNLng4Ni5SX0VBWCxzKTsKKy0JaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CistCQkoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIGltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCAmTS54ODYuUl9FRFgsIE0ueDg2LlJfRUFYLCBzKTsKKysgICAgaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CisrICAgICAgICAoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX2J5dGUodTggcykKKyt2b2lkCisrbXVsX2J5dGUodTggcykKKyB7CistCXUxNiByZXMgPSAodTE2KShNLng4Ni5SX0FMICogcyk7CisrICAgIHUxNiByZXMgPSAodTE2KSAoTS54ODYuUl9BTCAqIHMpOworIAorLQlNLng4Ni5SX0FYID0gcmVzOworLQlpZiAoTS54ODYuUl9BSCA9PSAwKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKE0ueDg2LlJfQUggPT0gMCkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX3dvcmQodTE2IHMpCisrdm9pZAorK211bF93b3JkKHUxNiBzKQorIHsKKy0JdTMyIHJlcyA9IE0ueDg2LlJfQVggKiBzOworKyAgICB1MzIgcmVzID0gTS54ODYuUl9BWCAqIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmIChNLng4Ni5SX0RYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICB9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIHJlczsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIChyZXMgPj4gMTYpOworKyAgICBpZiAoTS54ODYuUl9EWCA9PSAwKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisgICAgIH0KKyB9CisgCitAQCAtMjE3MSwzNiArMjI5NSwzOCBAQCB2b2lkIG11bF93b3JkKHUxNiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG11bF9sb25nKHUzMiBzKQorK3ZvaWQKKyttdWxfbG9uZyh1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXU2NCByZXMgPSAodTMyKU0ueDg2LlJfRUFYICogKHUzMilzOworKyAgICB1NjQgcmVzID0gKHU2NCkgTS54ODYuUl9FQVggKiBzOworIAorLQlNLng4Ni5SX0VBWCA9ICh1MzIpcmVzOworLQlNLng4Ni5SX0VEWCA9ICh1MzIpKHJlcyA+PiAzMik7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgcmVzOworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglhLGFfbG8sYV9oaTsKKy0JdTMyCXNfbG8sc19oaTsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlhID0gTS54ODYuUl9FQVg7CistCWFfbG8gPSBhICYgMHhGRkZGOworLQlhX2hpID0gYSA+PiAxNjsKKy0Jc19sbyA9IHMgJiAweEZGRkY7CistCXNfaGkgPSBzID4+IDE2OworLQlybG9fbG8gPSBhX2xvICogc19sbzsKKy0JcmxvX2hpID0gKGFfaGkgKiBzX2xvICsgYV9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CistCXJoaV9sbyA9IGFfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CistCU0ueDg2LlJfRUFYID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JTS54ODYuUl9FRFggPSByaGlfbG87CisrICAgIHUzMiBhLCBhX2xvLCBhX2hpOworKyAgICB1MzIgc19sbywgc19oaTsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGEgPSBNLng4Ni5SX0VBWDsKKysgICAgYV9sbyA9IGEgJiAweEZGRkY7CisrICAgIGFfaGkgPSBhID4+IDE2OworKyAgICBzX2xvID0gcyAmIDB4RkZGRjsKKysgICAgc19oaSA9IHMgPj4gMTY7CisrICAgIHJsb19sbyA9IGFfbG8gKiBzX2xvOworKyAgICBybG9faGkgPSAoYV9oaSAqIHNfbG8gKyBhX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKysgICAgcmhpX2xvID0gYV9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKysgICAgTS54ODYuUl9FQVggPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICBNLng4Ni5SX0VEWCA9IHJoaV9sbzsKKyAjZW5kaWYKKyAKKy0JaWYgKE0ueDg2LlJfRURYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgaWYgKE0ueDg2LlJfRURYID09IDApIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKyAgICAgfQorIH0KKyAKK0BAIC0yMjA4LDMwOSArMjMzNCwzMTkgQEAgdm9pZCBtdWxfbG9uZyh1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaWRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2lkaXZfYnl0ZSh1OCBzKQorIHsKKyAgICAgczMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IChzMTYpTS54ODYuUl9BWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgIGR2ZCA9IChzMTYpIE0ueDg2LlJfQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzOCkgczsKKysgICAgbW9kID0gZHZkICUgKHM4KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAoczgpczsKKy0JbW9kID0gZHZkICUgKHM4KXM7CistCWlmIChhYnMoZGl2KSA+IDB4N2YpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKy0JTS54ODYuUl9BSCA9IChzOCkgbW9kOworKyAgICB9CisrICAgIE0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKysgICAgTS54ODYuUl9BSCA9IChzOCkgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSURJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpZGl2X3dvcmQodTE2IHMpCisrdm9pZAorK2lkaXZfd29yZCh1MTYgcykKKyB7CistCXMzMiBkdmQsIGRpdiwgbW9kOworKyAgICBzMzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gKCgoczMyKU0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMTYpczsKKy0JbW9kID0gZHZkICUgKHMxNilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgZHZkID0gKCgoczMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAoczE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAoczE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpZGl2OworLQlNLng4Ni5SX0RYID0gKHUxNiltb2Q7CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSBkaXY7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisraWRpdl9sb25nKHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JczY0IGR2ZCwgZGl2LCBtb2Q7CistCistCWR2ZCA9ICgoKHM2NClNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMzIpczsKKy0JbW9kID0gZHZkICUgKHMzMilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmZmZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorKyAgICBzNjQgZHZkLCBkaXYsIG1vZDsKKysKKysgICAgZHZkID0gKCgoczY0KSBNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzMzIpIHM7CisrICAgIG1vZCA9IGR2ZCAlIChzMzIpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4N2ZmZmZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisgI2Vsc2UKKy0JczMyIGRpdiA9IDAsIG1vZDsKKy0JczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CistCXUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworLQl1MzIgYWJzX3MgPSBzICYgMHg3RkZGRkZGRjsKKy0JdTMyIGFic19oX2R2ZCA9IGhfZHZkICYgMHg3RkZGRkZGRjsKKy0JdTMyIGhfcyA9IGFic19zID4+IDE7CistCXUzMiBsX3MgPSBhYnNfcyA8PCAzMTsKKy0JaW50IGNvdW50ZXIgPSAzMTsKKy0JaW50IGNhcnJ5OworLQorLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkbyB7CistCQlkaXYgPDw9IDE7CistCQljYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CistCQkKKy0JCWlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQlhYnNfaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKy0JCQlsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKy0JCQkJOiAobF9kdmQgLSBsX3MpOworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKy0JCQlkaXYgfD0gMTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0JCQorLQl9IHdoaWxlIChjb3VudGVyID4gLTEpOworLQkvKiBvdmVyZmxvdyAqLworLQlpZiAoYWJzX2hfZHZkIHx8IChsX2R2ZCA+IGFic19zKSkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JLyogc2lnbiAqLworLQlkaXYgfD0gKChoX2R2ZCAmIDB4MTAwMDAwMDApIF4gKHMgJiAweDEwMDAwMDAwKSk7CistCW1vZCA9IGxfZHZkOworKyAgICBzMzIgZGl2ID0gMCwgbW9kOworKyAgICBzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKysgICAgdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CisrICAgIHUzMiBhYnNfcyA9IHMgJiAweDdGRkZGRkZGOworKyAgICB1MzIgYWJzX2hfZHZkID0gaF9kdmQgJiAweDdGRkZGRkZGOworKyAgICB1MzIgaF9zID0gYWJzX3MgPj4gMTsKKysgICAgdTMyIGxfcyA9IGFic19zIDw8IDMxOworKyAgICBpbnQgY291bnRlciA9IDMxOworKyAgICBpbnQgY2Fycnk7CisrCisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRvIHsKKysgICAgICAgIGRpdiA8PD0gMTsKKysgICAgICAgIGNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKysKKysgICAgICAgIGlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgYWJzX2hfZHZkIC09IChoX3MgKyBjYXJyeSk7CisrICAgICAgICAgICAgbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCisrICAgICAgICAgICAgICAgIDogKGxfZHZkIC0gbF9zKTsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgZGl2IHw9IDE7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgIH0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CisrICAgIC8qIG92ZXJmbG93ICovCisrICAgIGlmIChhYnNfaF9kdmQgfHwgKGxfZHZkID4gYWJzX3MpKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICAvKiBzaWduICovCisrICAgIGRpdiB8PSAoKGhfZHZkICYgMHgxMDAwMDAwMCkgXiAocyAmIDB4MTAwMDAwMDApKTsKKysgICAgbW9kID0gbF9kdmQ7CisgCisgI2VuZGlmCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCVNFVF9GTEFHKEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9FQVggPSAodTMyKWRpdjsKKy0JTS54ODYuUl9FRFggPSAodTMyKW1vZDsKKysgICAgTS54ODYuUl9FQVggPSAodTMyKSBkaXY7CisrICAgIE0ueDg2LlJfRURYID0gKHUzMikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2Rpdl9ieXRlKHU4IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IE0ueDg2LlJfQVg7CisrICAgIGR2ZCA9IE0ueDg2LlJfQVg7CisgICAgIGlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CisgICAgIH0KKy0JZGl2ID0gZHZkIC8gKHU4KXM7CistCW1vZCA9IGR2ZCAlICh1OClzOworLQlpZiAoYWJzKGRpdikgPiAweGZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZGl2ID0gZHZkIC8gKHU4KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTgpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4ZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAodTgpZGl2OworLQlNLng4Ni5SX0FIID0gKHU4KW1vZDsKKysgICAgfQorKyAgICBNLng4Ni5SX0FMID0gKHU4KSBkaXY7CisrICAgIE0ueDg2LlJfQUggPSAodTgpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfd29yZCh1MTYgcykKKyt2b2lkCisrZGl2X3dvcmQodTE2IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9ICgoKHUzMilNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZHZkID0gKCgodTMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAodTE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworICAgICB9CistCWRpdiA9IGR2ZCAvICh1MTYpczsKKy0JbW9kID0gZHZkICUgKHUxNilzOworLQlpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilkaXY7CistCU0ueDg2LlJfRFggPSAodTE2KW1vZDsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIGRpdjsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisrZGl2X2xvbmcodTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQl1NjQgZHZkLCBkaXYsIG1vZDsKKy0KKy0JZHZkID0gKCgodTY0KU0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHUzMilzOworLQltb2QgPSBkdmQgJSAodTMyKXM7CistCWlmIChhYnMoZGl2KSA+IDB4ZmZmZmZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CisrICAgIHU2NCBkdmQsIGRpdiwgbW9kOworKworKyAgICBkdmQgPSAoKCh1NjQpIE0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHUzMikgczsKKysgICAgbW9kID0gZHZkICUgKHUzMikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHhmZmZmZmZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKyAjZWxzZQorLQlzMzIgZGl2ID0gMCwgbW9kOworLQlzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKy0JdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CistCistCXUzMiBoX3MgPSBzOworLQl1MzIgbF9zID0gMDsKKy0JaW50IGNvdW50ZXIgPSAzMjsKKy0JaW50IGNhcnJ5OworLQkJCistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRvIHsKKy0JCWRpdiA8PD0gMTsKKy0JCWNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKy0JCQorLQkJaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQloX2R2ZCAtPSAoaF9zICsgY2FycnkpOworLQkJCWxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorLQkJCQk6IChsX2R2ZCAtIGxfcyk7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IHMgPDwgKC0tY291bnRlcik7CistCQkJZGl2IHw9IDE7CistCQkJY29udGludWU7CistCQl9CistCQkKKy0JfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKy0JLyogb3ZlcmZsb3cgKi8KKy0JaWYgKGhfZHZkIHx8IChsX2R2ZCA+IHMpKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQltb2QgPSBsX2R2ZDsKKysgICAgczMyIGRpdiA9IDAsIG1vZDsKKysgICAgczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CisrICAgIHUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworKworKyAgICB1MzIgaF9zID0gczsKKysgICAgdTMyIGxfcyA9IDA7CisrICAgIGludCBjb3VudGVyID0gMzI7CisrICAgIGludCBjYXJyeTsKKysKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZG8geworKyAgICAgICAgZGl2IDw8PSAxOworKyAgICAgICAgY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKysgICAgICAgICAgICBsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKysgICAgICAgICAgICAgICAgOiAobF9kdmQgLSBsX3MpOworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGRpdiB8PSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICB9IHdoaWxlIChjb3VudGVyID4gLTEpOworKyAgICAvKiBvdmVyZmxvdyAqLworKyAgICBpZiAoaF9kdmQgfHwgKGxfZHZkID4gcykpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIG1vZCA9IGxfZHZkOworICNlbmRpZgorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlTRVRfRkxBRyhGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfRUFYID0gKHUzMilkaXY7CistCU0ueDg2LlJfRURYID0gKHUzMiltb2Q7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgZGl2OworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbnMoaW50IHNpemUpCisrdm9pZAorK2lucyhpbnQgc2l6ZSkKKyB7CistCWludCBpbmMgPSBzaXplOworKyAgICBpbnQgaW5jID0gc2l6ZTsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CistCQlpbmMgPSAtc2l6ZTsKKy0JfQorLQlpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICAgICAgaW5jID0gLXNpemU7CisrICAgIH0KKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogaW4gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKy0JCXUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKy0JCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworKyAgICAgICAgdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworKyAgICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmIpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmIpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbncpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbncpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmwpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX0NYID0gMDsKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCU0ueDg2LlJfRUNYID0gMDsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAwOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworICAgICAgICAgfQorLQkJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CistCQkJc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5iKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5iKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW53KShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW53KSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CistCQkJc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5sKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5sKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorIH0KKyAKK0BAIC0yNTE4LDYzICsyNjU0LDY1IEBAIHZvaWQgaW5zKGludCBzaXplKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1VUIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBvdXRzKGludCBzaXplKQorK3ZvaWQKKytvdXRzKGludCBzaXplKQorIHsKKyAgICAgaW50IGluYyA9IHNpemU7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKyAgICAgICAgIGluYyA9IC1zaXplOworICAgICB9CistCWlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogb3V0IHVudGlsIENYIGlzIFpFUk8uICovCistCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CistCQkJCQkgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKysgICAgICAgIHUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKysgICAgICAgICAgICAgICAgICAgICBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQkoKnN5c19vdXRiKShNLng4Ni5SX0RYLAorLQkJCQkJCSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKy0JCQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgICgqc3lzX291dGIpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCSgqc3lzX291dHcpKE0ueDg2LlJfRFgsCistCQkJCQkJIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworLQkJCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwKKy0JCQkJCQkgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CistCQkJCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9DWCA9IDA7CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQlNLng4Ni5SX0VDWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0NYID0gMDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIE0ueDg2LlJfRUNYID0gMDsKKyAgICAgICAgIH0KKy0JCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorLQkJCSgqc3lzX291dGIpKE0ueDg2LlJfRFgsCistCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKKy0JCQkJCSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAoKnN5c19vdXR3KSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKy0JCQkoKnN5c19vdXRsKShNLng4Ni5SX0RYLAorLQkJCQkJIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICgqc3lzX291dGwpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KKyB9CisgCitAQCAtMjU4NSwxMSArMjcyMywxMiBAQCBhZGRyCS0gQWRkcmVzcyB0byBmZXRjaCB3b3JkIGZyb20KKyBSRU1BUktTOgorIEZldGNoZXMgYSB3b3JkIGZyb20gZW11bGF0b3IgbWVtb3J5IHVzaW5nIGFuIGFic29sdXRlIGFkZHJlc3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKQorK3UxNgorK21lbV9hY2Nlc3Nfd29yZChpbnQgYWRkcikKKyB7CistREIoCWlmIChDSEVDS19NRU1fQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorLQlyZXR1cm4gKCpzeXNfcmR3KShhZGRyKTsKKysgICAgREIoaWYgKENIRUNLX01FTV9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorKyAgICAgICAgcmV0dXJuICgqc3lzX3JkdykgKGFkZHIpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI1OTgsMTIgKzI3MzcsMTMgQEAgUHVzaGVzIGEgd29yZCBvbnRvIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHB1c2hfd29yZCh1MTYgdykKKyt2b2lkCisrcHVzaF93b3JkKHUxNiB3KQorIHsKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCU0ueDg2LlJfU1AgLT0gMjsKKy0JKCpzeXNfd3J3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1AsIHcpOworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICBNLng4Ni5SX1NQIC09IDI7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCwgdyk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjYxMiwxMiArMjc1MiwxMyBAQCBQdXNoZXMgYSBsb25nIG9udG8gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgcHVzaF9sb25nKHUzMiB3KQorK3ZvaWQKKytwdXNoX2xvbmcodTMyIHcpCisgeworLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JTS54ODYuUl9TUCAtPSA0OworLQkoKnN5c193cmwpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCwgdyk7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIE0ueDg2LlJfU1AgLT0gNDsKKysgICAgKCpzeXNfd3JsKSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQLCB3KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjI2LDE1ICsyNzY3LDE2IEBAIFBvcHMgYSB3b3JkIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBwb3Bfd29yZCh2b2lkKQorK3UxNgorK3BvcF93b3JkKHZvaWQpCisgeworLQlyZWdpc3RlciB1MTYgcmVzOworKyAgICByZWdpc3RlciB1MTYgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDI7CistCXJldHVybiByZXM7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkdykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gMjsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjQzLDE0ICsyNzg1LDE1IEBAIFBvcHMgYSBsb25nIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBwb3BfbG9uZyh2b2lkKQorK3UzMgorK3BvcF9sb25nKHZvaWQpCisgeworICAgICByZWdpc3RlciB1MzIgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmRsKSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDQ7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkbCkgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gNDsKKyAgICAgcmV0dXJuIHJlczsKKyB9CisgCitAQCAtMjY1OCw0NSArMjgwMSw1OSBAQCBEQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorIFJFTUFSS1M6CisgQ1BVSUQgdGFrZXMgRUFYL0VDWCBhcyBpbnB1dHMsIHdyaXRlcyBFQVgvRUJYL0VDWC9FRFggYXMgb3V0cHV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGNwdWlkICh2b2lkKQorLXsKKy0JdTMyIGZlYXR1cmUgPSBNLng4Ni5SX0VBWDsKKy0KKy0Jc3dpdGNoIChmZWF0dXJlKSB7CistCWNhc2UgMDoKKy0JCS8qIFJlZ2FyZGxlc3MgaWYgd2UgaGF2ZSByZWFsIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUsIHRoZSBlbXVsYXRvcgorLQkJICogd2lsbCBvbmx5IHN1cHBvcnQgdXB0byBmZWF0dXJlIDEsIHdoaWNoIHdlIHNldCBpbiByZWdpc3RlciBFQVguCistCQkgKiBSZWdpc3RlcnMgRUJYOkVEWDpFQ1ggY29udGFpbiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgQ1BVLgorLQkJICovCistCQlNLng4Ni5SX0VBWCA9IDE7CistCQkvKiBFQlg6RURYOkVDWCA9ICJHZW51aW5lSW50ZWwiICovCistCQlNLng4Ni5SX0VCWCA9IDB4NzU2ZTY1NDc7CistCQlNLng4Ni5SX0VEWCA9IDB4NDk2NTZlNjk7CistCQlNLng4Ni5SX0VDWCA9IDB4NmM2NTc0NmU7CistCQlicmVhazsKKy0JY2FzZSAxOgorLQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSB4ODYgY29tcGF0aWJsZSBoYXJkd2FyZSwgd2UgcmV0dXJuIHZhbHVlcyBmcm9tIGFuCistCQkgKiBJbnRlbCA0ODZkeDQ7IHdoaWNoIHdhcyBvbmUgb2YgdGhlIGZpcnN0IHByb2Nlc3NvcnMgdG8gaGF2ZSBDUFVJRC4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAweDAwMDAwNDgwOworLQkJTS54ODYuUl9FQlggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FQ1ggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FRFggPSAweDAwMDAwMDAyOwkvKiBWTUUgKi8KKy0JCS8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCistCQkgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKy0JCSAqLworLQkJTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKy0JCWJyZWFrOworLQlkZWZhdWx0OgorLQkJLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworLQkJICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorLQkJICogbnVtYmVycy4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAwOworLQkJTS54ODYuUl9FQlggPSAwOworLQkJTS54ODYuUl9FQ1ggPSAwOworLQkJTS54ODYuUl9FRFggPSAwOworLQkJYnJlYWs7CistCX0KKy19Cisrdm9pZAorK2NwdWlkKHZvaWQpCisreworKyAgICB1MzIgZmVhdHVyZSA9IE0ueDg2LlJfRUFYOworIAorKyNpZmRlZiBYODZFTVVfSEFTX0hXX0NQVUlECisrICAgIC8qIElmIHRoZSBwbGF0Zm9ybSBhbGxvd3MgaXQsIHdlIHdpbGwgYmFzZSBvdXIgdmFsdWVzIG9uIHRoZSByZWFsCisrICAgICAqIHJlc3VsdHMgZnJvbSB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24uICBXZSBsaW1pdCBzdXBwb3J0IHRvIHRoZQorKyAgICAgKiBmaXJzdCB0d28gZmVhdHVyZXMsIGFuZCB0aGUgcmVzdWx0cyBvZiB0aG9zZSBhcmUgc2FuaXRpemVkLgorKyAgICAgKi8KKysgICAgaWYgKGZlYXR1cmUgPD0gMSkKKysgICAgICAgIGh3X2NwdWlkKCZNLng4Ni5SX0VBWCwgJk0ueDg2LlJfRUJYLCAmTS54ODYuUl9FQ1gsICZNLng4Ni5SX0VEWCk7CisrI2VuZGlmCisrCisrICAgIHN3aXRjaCAoZmVhdHVyZSkgeworKyAgICBjYXNlIDA6CisrICAgICAgICAvKiBSZWdhcmRsZXNzIGlmIHdlIGhhdmUgcmVhbCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlLCB0aGUgZW11bGF0b3IKKysgICAgICAgICAqIHdpbGwgb25seSBzdXBwb3J0IHVwdG8gZmVhdHVyZSAxLCB3aGljaCB3ZSBzZXQgaW4gcmVnaXN0ZXIgRUFYLgorKyAgICAgICAgICogUmVnaXN0ZXJzIEVCWDpFRFg6RUNYIGNvbnRhaW4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIENQVS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAxOworKyNpZm5kZWYgWDg2RU1VX0hBU19IV19DUFVJRAorKyAgICAgICAgLyogRUJYOkVEWDpFQ1ggPSAiR2VudWluZUludGVsIiAqLworKyAgICAgICAgTS54ODYuUl9FQlggPSAweDc1NmU2NTQ3OworKyAgICAgICAgTS54ODYuUl9FRFggPSAweDQ5NjU2ZTY5OworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAweDZjNjU3NDZlOworKyNlbmRpZgorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysjaWZuZGVmIFg4NkVNVV9IQVNfSFdfQ1BVSUQKKysgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgeDg2IGNvbXBhdGlibGUgaGFyZHdhcmUsIHdlIHJldHVybiB2YWx1ZXMgZnJvbSBhbgorKyAgICAgICAgICogSW50ZWwgNDg2ZHg0OyB3aGljaCB3YXMgb25lIG9mIHRoZSBmaXJzdCBwcm9jZXNzb3JzIHRvIGhhdmUgQ1BVSUQuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRUFYID0gMHgwMDAwMDQ4MDsKKysgICAgICAgIE0ueDg2LlJfRUJYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRUNYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRURYID0gMHgwMDAwMDAwMjsgICAgICAgLyogVk1FICovCisrI2Vsc2UKKysgICAgICAgIC8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCisrICAgICAgICAgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKysjZW5kaWYKKysgICAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworKyAgICAgICAgICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorKyAgICAgICAgICogbnVtYmVycy4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAwOworKyAgICAgICAgTS54ODYuUl9FQlggPSAwOworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworKyAgICAgICAgTS54ODYuUl9FRFggPSAwOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvc3lzLmMgYi9saWJzL3g4NmVtdS9zeXMuYworaW5kZXggNGQ5MGVhMy4uYzUxNGRkZSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3N5cy5jCisrKysgYi9saWJzL3g4NmVtdS9zeXMuYworQEAgLTQ3LDIyMyArNDcsMTMzIEBACisgI2luY2x1ZGUgIng4NmVtdS9wcmltX29wcy5oIgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrI2VuZGlmCisgCistWDg2RU1VX3N5c0VudgkJX1g4NkVNVV9lbnY7CQkvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZSAqLworLVg4NkVNVV9pbnRyRnVuY3MJX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisrI2lmZGVmIF9fR05VQ19fCisgCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkKKy0vKiB0byBjb3BlIHdpdGggYnJva2VuIGVnY3MtMS4xLjIgOi0oKCgoICovCistCistI2RlZmluZSBBTFBIQV9VQUxPQURTCistLyoKKy0gKiBpbmxpbmUgZnVuY3Rpb25zIHRvIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcworLSAqIGZyb20gbGludXgvaW5jbHVkZS9hc20tYWxwaGEvdW5hbGlnbmVkLmgKKy0gKi8KKy0KKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy0KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistc3RydWN0IF9fdW5hX3U2NCB7IHVuc2lnbmVkIGxvbmcgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UzMiB7IHVuc2lnbmVkIGludCAgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UxNiB7IHVuc2lnbmVkIHNob3J0IHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07CistI2VuZGlmCisrLyogRGVmaW5lIHNvbWUgcGFja2VkIHN0cnVjdHVyZXMgdG8gdXNlIHdpdGggdW5hbGlnbmVkIGFjY2Vzc2VzICovCisrCisrc3RydWN0IF9fdW5hX3U2NCB7CisrICAgIHU2NCB4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyt9OworK3N0cnVjdCBfX3VuYV91MzIgeworKyAgICB1MzIgeCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisrfTsKKytzdHJ1Y3QgX191bmFfdTE2IHsKKysgICAgdTE2IHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworK307CisrCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBsb2FkcyAqLworIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbGRxX3UodW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1NjQKKytsZHFfdSh1NjQgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dHFsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRxaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoNysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkbF91KHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MzIKKytsZGxfdSh1MzIgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dGxsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRsaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoMysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkd191KHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0JY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlyZXR1cm4gcHRyLT54OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjI7CistCV9fYXNtX18oImxkcV91ICUwLCUzXG5cdCIKKy0JCSJsZHFfdSAlMSwlNFxuXHQiCistCQkiZXh0d2wgJTAsJTIsJTBcblx0IgorLQkJImV4dHdoICUxLCUyLCUxIgorLQkJOiI9JnIiIChyMSksICI9JnIiIChyMikKKy0JCToiciIgKHIxMSksCistCQkgIm0iICgqcjExKSwKKy0JCSAibSIgKCooY29uc3QgdW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpKTsKKy0JcmV0dXJuIHIxIHwgcjI7CistI2VuZGlmCisrICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICopIHA7CisrCisrICAgIHJldHVybiBwdHItPng7CisgfQorIAorLS8qCistICogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgCistICovCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgKi8KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0cV91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3FoICU2LCU3LCU1XG5cdCIKKy0JCSJpbnNxbCAlNiwlNywlNFxuXHQiCistCQkibXNrcWggJTMsJTcsJTNcblx0IgorLQkJIm1za3FsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSg3KyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0bF91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RsX3UodTMyIHZhbCwgdTMyICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQlzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistCXB0ci0+eCA9IHI1OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjIscjMscjQ7CistCistCV9fYXNtX18oImxkcV91ICUzLCUxXG5cdCIKKy0JCSJsZHFfdSAlMiwlMFxuXHQiCistCQkiaW5zbGggJTYsJTcsJTVcblx0IgorLQkJImluc2xsICU2LCU3LCU0XG5cdCIKKy0JCSJtc2tsaCAlMywlNywlM1xuXHQiCistCQkibXNrbGwgJTIsJTcsJTJcblx0IgorLQkJImJpcyAlMywlNSwlM1xuXHQiCistCQkiYmlzICUyLCU0LCUyXG5cdCIKKy0JCSJzdHFfdSAlMywlMVxuXHQiCistCQkic3RxX3UgJTIsJTAiCistCQk6Ij1tIiAoKnIxMSksCistCQkgIj1tIiAoKih1bnNpZ25lZCBsb25nICopKDMrKGNoYXIgKikgcjExKSksCistCQkgIj0mciIgKHIxKSwgIj0mciIgKHIyKSwgIj0mciIgKHIzKSwgIj0mciIgKHI0KQorLQkJOiJyIiAocjUpLCAiciIgKHIxMSkpOworLSNlbmRpZgorKyAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICBwdHItPnggPSB2YWw7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3R3X3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0d191KHUxNiB2YWwsIHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3doICU2LCU3LCU1XG5cdCIKKy0JCSJpbnN3bCAlNiwlNywlNFxuXHQiCistCQkibXNrd2ggJTMsJTcsJTNcblx0IgorLQkJIm1za3dsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLworIAorLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPCAzKSkgJiYgXAorLSAgICAgICAgICAgICAoZGVmaW5lZCAoX19pYTY0X18pIHx8IGRlZmluZWQgKGlhNjRfXykpCistI2RlZmluZSBJQTY0X1VBTE9BRFMKKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy1zdHJ1Y3QgX191bmFfdTY0IHsgdW5zaWduZWQgbG9uZyAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTMyIHsgdW5zaWduZWQgaW50ICAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTE2IHsgdW5zaWduZWQgc2hvcnQgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy0KKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCistX191bGRxIChjb25zdCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHU2NAorK2xkcV91KHU2NCAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHU2NCByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKKy11bGRsIChjb25zdCB1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTMyCisrbGRsX3UodTMyICogcCkKKyB7CistICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0gICAgcmV0dXJuIHB0ci0+eDsKKysgICAgdTMyIHJldDsKKysKKysgICAgbWVtbW92ZSgmcmV0LCBwLCBzaXplb2YoKnApKTsKKysgICAgcmV0dXJuIHJldDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworLXVsZHcgKGNvbnN0IHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHUxNiByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKKy11c3RxICh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1NjQgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0bCAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgaW50ICogcjExKQorK3N0bF91KHUzMiB2YWwsIHUzMiAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1MzIgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0dyAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3R3X3UodTE2IHZhbCwgdTE2ICogcCkKKyB7CistICAgIHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0gICAgcHRyLT54ID0gcjU7CisrICAgIHUxNiB0bXAgPSB2YWw7CisrCisrICAgIG1lbW1vdmUocCwgJnRtcCwgc2l6ZW9mKCpwKSk7CisgfQorIAorLSNlbmRpZgorKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19HTlVDX18gKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK1g4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7ICAgICAgLyogR2xvYmFsIGVtdWxhdG9yIG1hY2hpbmUgc3RhdGUgKi8KKytYODZFTVVfaW50ckZ1bmNzIF9YODZFTVVfaW50clRhYlsyNTZdOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBQQVJBTUVURVJTOgorQEAgLTI3NSwxOSArMTg1LDIwIEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIGVtdWxhdG9yIG1lbW9yeS4KKyBSRU1BUktTOgorIFJlYWRzIGEgYnl0ZSB2YWx1ZSBmcm9tIHRoZSBlbXVsYXRvciBtZW1vcnkuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggWDg2QVBJIHJkYigKKy0gICAgdTMyIGFkZHIpCisrdTggWDg2QVBJCisrcmRiKHUzMiBhZGRyKQorIHsKKy0JdTggdmFsOworLQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JdmFsID0gKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistCXJldHVybiB2YWw7CisrICAgIHU4IHZhbDsKKysKKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIHZhbCA9ICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAwLDMyICsyMTEsMjcgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgorIFJFTUFSS1M6CisgUmVhZHMgYSB3b3JkIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBYODZBUEkgcmR3KAorLQl1MzIgYWRkcikKKyt1MTYgWDg2QVBJCisrcmR3KHUzMiBhZGRyKQorIHsKKy0JdTE2IHZhbCA9IDA7CisrICAgIHUxNiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgxKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JCXZhbCA9IGxkd191KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmICBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgICB2YWwgPSB1bGR3KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCQl2YWwgPSAqKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgIHZhbCA9ICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkcikgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistCQlEQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIHJldHVybiB2YWw7CisrICAgICAgICB2YWwgPSBsZHdfdSgodTE2ICopIChNLm1lbV9iYXNlICsgYWRkcikpOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMiAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgcmV0dXJuIHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMzcsMzQgKzI0MywyOSBAQCBMb25nIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCisgUkVNQVJLUzoKKyBSZWFkcyBhIGxvbmcgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBYODZBUEkgcmRsKAorLQl1MzIgYWRkcikKKyt1MzIgWDg2QVBJCisrcmRsKHUzMiBhZGRyKQorIHsKKy0JdTMyIHZhbCA9IDA7CisrICAgIHUzMiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgzKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpIDw8IDI0KSk7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkJdmFsID0gbGRsX3UoKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgICAgdmFsID0gdWxkbCgodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkJdmFsID0gKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcik7CisrICAgIGlmIChhZGRyICYgMHgzKSB7CisrICAgICAgICB2YWwgPSAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDIpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPDwgMjQpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggNCAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlyZXR1cm4gdmFsOworKyAgICAgICAgdmFsID0gbGRsX3UoKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDQgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzc1LDE3ICsyNzYsMTcgQEAgdmFsCQktIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBXcml0ZXMgYSBieXRlIHZhbHVlIHRvIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdyYigKKy0JdTMyIGFkZHIsCistCXU4IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dyYih1MzIgYWRkciwgdTggdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKy0JCURCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKysgICAgICAgICAgICBEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zOTYsMzAgKzI5NywyNCBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZBUEkgd3J3KAorLQl1MzIgYWRkciwKKy0JdTE2IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dydyh1MzIgYWRkciwgdTE2IHZhbCkKKyB7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMiA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CisrICAgICAgICAgICAgREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MSkgeworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkgc3R3X3UodmFsLCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgdXN0dyh2YWwsKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JICoodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworKyAgICBpZiAoYWRkciAmIDB4MSkgeworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gMCkgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0d191KHZhbCwgKHUxNiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MzAsMzIgKzMyNSwyNiBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdybCgKKy0JdTMyIGFkZHIsCistCXUzMiB2YWwpCisrdm9pZCBYODZBUEkKKyt3cmwodTMyIGFkZHIsIHUzMiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDQgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworLQkJREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggNCA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgICAgIERCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDEpIHsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAgMCkgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+ICA4KSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JIHN0bF91KHZhbCwodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgIHVzdGwodmFsLCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCSAqKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPSAodmFsID4+IDE2KSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0bF91KHZhbCwgKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjYsMTIgKzM1NSwxMiBAQCBSRVRVUk46CisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHJlYWQgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIGluYi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB1OCBYODZBUEkgcF9pbmIoCistCVg4NkVNVV9waW9BZGRyIGFkZHIpCisrc3RhdGljIHU4IFg4NkFQSQorK3BfaW5iKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDgyLDEyICszNzEsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gd29yZCByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbncuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTE2IFg4NkFQSSBwX2ludygKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTE2IFg4NkFQSQorK3BfaW53KFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDk4LDEyICszODcsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gbG9uZyByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbmwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTMyIFg4NkFQSSBwX2lubCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTMyIFg4NkFQSQorK3BfaW5sKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTEzLDEzICs0MDIsMTIgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRiLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0YigKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTggdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0YihYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygib3V0YiAlIzAyeCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorLSAgICByZXR1cm47CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoIm91dGIgJSMwMnggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKysgICAgICAgIHJldHVybjsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MjksMTMgKzQxNywxMiBAQCB2YWwgICAgIC0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIHdvcmQgd3JpdGUgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIG91dHcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCBYODZBUEkgcF9vdXR3KAorLQlYODZFTVVfcGlvQWRkciBhZGRyLAorLQl1MTYgdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0dyhYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoIm91dHcgJSMwNHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKy0JcmV0dXJuOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJvdXR3ICUjMDR4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCisrICAgICAgICByZXR1cm47CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTQ1LDI5ICs0MzIsMjkgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyA7b25nIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0bCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTMyIHZhbCkKKytzdGF0aWMgdm9pZCBYODZBUEkKKytwX291dGwoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCkKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJvdXRsICUjMDh4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCistICAgIHJldHVybjsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygib3V0bCAlIzA4eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuOworIH0KKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXU4ICAJKFg4NkFQSVAgc3lzX3JkYikodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRiOworLXUxNiAJKFg4NkFQSVAgc3lzX3JkdykodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmR3OworLXUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRsOworLXZvaWQgCShYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCkgCQkgICAgICAgICAgICA9IHdyYjsKKy12b2lkIAkoWDg2QVBJUCBzeXNfd3J3KSh1MzIgYWRkcix1MTYgdmFsKSAJICAgICAgICAgICAgPSB3cnc7Cistdm9pZCAJKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCkgCSAgICAgICAgICAgID0gd3JsOworLXU4ICAJKFg4NkFQSVAgc3lzX2luYikoWDg2RU1VX3Bpb0FkZHIgYWRkcikJICAgICAgICAgICAgPSBwX2luYjsKKy11MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpCSAgICAgICAgICAgID0gcF9pbnc7CistdTMyIAkoWDg2QVBJUCBzeXNfaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKSAgICAgICAgICAgICAgPSBwX2lubDsKKy12b2lkIAkoWDg2QVBJUCBzeXNfb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSAJPSBwX291dGI7Cistdm9pZCAJKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpCT0gcF9vdXR3OworLXZvaWQgCShYODZBUElQIHN5c19vdXRsKShYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKQk9IHBfb3V0bDsKKyt1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcikgPSByZGI7CisrdTE2KFg4NkFQSVAgc3lzX3JkdykgKHUzMiBhZGRyKSA9IHJkdzsKKyt1MzIoWDg2QVBJUCBzeXNfcmRsKSAodTMyIGFkZHIpID0gcmRsOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpID0gd3JiOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dydykgKHUzMiBhZGRyLCB1MTYgdmFsKSA9IHdydzsKKyt2b2lkIChYODZBUElQIHN5c193cmwpICh1MzIgYWRkciwgdTMyIHZhbCkgPSB3cmw7CisrCisrdTgoWDg2QVBJUCBzeXNfaW5iKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2luYjsKKyt1MTYoWDg2QVBJUCBzeXNfaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2ludzsKKyt1MzIoWDg2QVBJUCBzeXNfaW5sKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2lubDsKKyt2b2lkIChYODZBUElQIHN5c19vdXRiKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSA9IHBfb3V0YjsKKyt2b2lkIChYODZBUElQIHN5c19vdXR3KSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCkgPSBwX291dHc7Cisrdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpID0gcF9vdXRsOworIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCitAQCAtNTgwLDggKzQ2Nyw4IEBAIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBhY2Nlc3MKKyBtZW1vcnkgc3BhY2UsIGFsbG93aW5nIHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucworIGFuZCBob29rIHRoZW0gb3V0IGFzIG5lY2Vzc2FyeSBmb3IgdGhlaXIgYXBwbGljYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9zZXR1cE1lbUZ1bmNzKAorLQlYODZFTVVfbWVtRnVuY3MgKmZ1bmNzKQorK3ZvaWQKKytYODZFTVVfc2V0dXBNZW1GdW5jcyhYODZFTVVfbWVtRnVuY3MgKiBmdW5jcykKKyB7CisgICAgIHN5c19yZGIgPSBmdW5jcy0+cmRiOworICAgICBzeXNfcmR3ID0gZnVuY3MtPnJkdzsKK0BAIC02MDAsOCArNDg3LDggQEAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIHdoaWNoIGFjY2VzcworIEkvTyBzcGFjZSwgYWxsb3dpbmcgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zCisgYW5kIGhvb2sgdGhlbSBvdXQgYXMgbmVjZXNzYXJ5IGZvciB0aGVpciBhcHBsaWNhdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3NldHVwUGlvRnVuY3MoCistCVg4NkVNVV9waW9GdW5jcyAqZnVuY3MpCisrdm9pZAorK1g4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKQorIHsKKyAgICAgc3lzX2luYiA9IGZ1bmNzLT5pbmI7CisgICAgIHN5c19pbncgPSBmdW5jcy0+aW53OworQEAgLTYyNCwxNyArNTExLDE3IEBAIGluIHRoZSBlbXVsYXRvciB2aWEgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUuIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbgorIHRvIGdldCBjb250cm9sIHdoZW4gdGhlIGNvZGUgYmVpbmcgZW11bGF0ZWQgZXhlY3V0ZXMgc3BlY2lmaWMgc29mdHdhcmUKKyBpbnRlcnJ1cHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoCistCVg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyt2b2lkCisrWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyB7CisgICAgIGludCBpOworLSAgICAKKy0JZm9yIChpPTA7IGkgPCAyNTY7IGkrKykKKy0JCV9YODZFTVVfaW50clRhYltpXSA9IE5VTEw7CistCWlmIChmdW5jcykgeworLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorLQkJCV9YODZFTVVfaW50clRhYltpXSA9IGZ1bmNzW2ldOworLQkJfQorKworKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBOVUxMOworKyAgICBpZiAoZnVuY3MpIHsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKysgICAgICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBmdW5jc1tpXTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTY0OSwxNSArNTM2LDE1IEBAIHNvIHRoYXQgdGhlIGNvZGUgaW4gdGhlIGVtdWxhdG9yIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyB0aGUgc29mdHdhcmUKKyBpbnRlcnJ1cHQgYXMgcGVyIG5vcm1hbC4gVGhpcyBlc3NlbnRpYWxseSBhbGxvd3Mgc3lzdGVtIGNvZGUgdG8gYWN0aXZlbHkKKyBob29rIGFuZCBoYW5kbGUgY2VydGFpbiBzb2Z0d2FyZSBpbnRlcnJ1cHRzIGFzIG5lY2Vzc2FyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3ByZXBhcmVGb3JJbnQoCistCWludCBudW0pCisrdm9pZAorK1g4NkVNVV9wcmVwYXJlRm9ySW50KGludCBudW0pCisgeworLSAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKyAgICAgTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0ICsgMik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0KTsKKy0JTS54ODYuaW50ciA9IDA7CisrICAgIE0ueDg2LmludHIgPSAwOworIH0KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS92YWxpZGF0ZS5jIGIvbGlicy94ODZlbXUvdmFsaWRhdGUuYworaW5kZXggMjM5ZjZjMS4uNGMzNmUxZCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKKysrKyBiL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKK0BAIC01OTEsNTggKzU5MSw2MiBAQAorICAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQorIAorLXZvaWQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3ZvaWQKKytwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisgeworICAgICB2YV9saXN0IGFyZ3B0cjsKKysKKyAgICAgdmFfc3RhcnQoYXJncHRyLCBmbXQpOworICAgICB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncHRyKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgIHZhX2VuZChhcmdwdHIpOworIH0KKyAKKy1jaGFyICogcHJpbnRfZmxhZ3MoY2hhciAqYnVmLHVsb25nIGZsYWdzKQorK2NoYXIgKgorK3ByaW50X2ZsYWdzKGNoYXIgKmJ1ZiwgdWxvbmcgZmxhZ3MpCisgeworICAgICBjaGFyICpzZXBhcmF0b3IgPSAiIjsKKyAKKyAgICAgYnVmWzBdID0gMDsKKyAgICAgaWYgKGZsYWdzICYgRl9DRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiQ0YiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiQ0YiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1BGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJQRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJQRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfQUYpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIkFGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIkFGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9aRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiWkYiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiWkYiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1NGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJTRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJTRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfT0YpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIk9GIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIk9GIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKHNlcGFyYXRvclswXSA9PSAwKQorLSAgICAgICAgc3RyY3B5KGJ1ZiwiTm9uZSIpOworKyAgICAgICAgc3RyY3B5KGJ1ZiwgIk5vbmUiKTsKKyAgICAgcmV0dXJuIGJ1ZjsKKyB9CisgCistaW50IG1haW4oaW50IGFyZ2MpCisraW50CisrbWFpbihpbnQgYXJnYykKKyB7CistICAgIHVsb25nICAgZGVmX2ZsYWdzOworKyAgICB1bG9uZyBkZWZfZmxhZ3M7CisgICAgIGludCB0cmFjZSA9IGZhbHNlOworIAorICAgICBpZiAoYXJnYyA+IDEpCitAQCAtNjczLDcgKzY3Nyw3IEBAIGludCBtYWluKGludCBhcmdjKQorICAgICBWQUxfTE9OR19MT05HX0JJTkFSWShjbXBfbG9uZyk7CisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRhYV9ieXRlKTsKKy0gICAgVkFMX0JZVEVfVU5BUlkoZGFzX2J5dGUpOyAgIC8vIEZhaWxzIGZvciAweDlBIChvdXQgb2YgcmFuZ2UgYW55d2F5KQorKyAgICBWQUxfQllURV9VTkFSWShkYXNfYnl0ZSk7ICAgLyogRmFpbHMgZm9yIDB4OUEgKG91dCBvZiByYW5nZSBhbnl3YXkpICovCisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRlY19ieXRlKTsKKyAgICAgVkFMX1dPUkRfVU5BUlkoZGVjX3dvcmQpOworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS5oIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK2luZGV4IDc5NWUyZDYuLjUwMWRkOTEgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK0BAIC01Niw3ICs1Niw3IEBAIHR5cGVkZWYgaW50IFg4NkVNVV9waW9BZGRyOworIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmIFBBQ0sKKy0jIHByYWdtYQlQQUNLICAgLyogRG9uJ3QgcGFjayBzdHJ1Y3RzIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMhICovCisrI3ByYWdtYQlQQUNLICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBwYWNrIHN0cnVjdHMgd2l0aCBmdW5jdGlvbiBwb2ludGVycyEgKi8KKyAjZW5kaWYKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTgxLDEzICs4MSwxMyBAQCBvdXR3ICAgIC0gRnVuY3Rpb24gdG8gd3JpdGUgYSB3b3JkIHRvIGFuIEkvTyBwb3J0Cisgb3V0bCAgICAtIEZ1bmN0aW9uIHRvIHdyaXRlIGEgZHdvcmQgdG8gYW4gSS9PIHBvcnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCBpbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLQl1MTYgCShYODZBUElQIGludykoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistCXUzMiAJKFg4NkFQSVAgaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0dykoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQgCShYODZBUElQIG91dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworLQl9IFg4NkVNVV9waW9GdW5jczsKKysgICAgdTgoWDg2QVBJUCBpbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIHUzMihYODZBUElQIGlubCkgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICB2b2lkIChYODZBUElQIG91dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICB2b2lkIChYODZBUElQIG91dHcpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCBvdXRsKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCk7CisrfSBYODZFTVVfcGlvRnVuY3M7CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorQEAgLTExMiwxMyArMTEyLDEzIEBAIHdydyAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIHdvcmQgdG8gYW4gYWRkcmVzcworIHdybCAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIGR3b3JkIHRvIGFuIGFkZHJlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCByZGIpKHUzMiBhZGRyKTsKKy0JdTE2IAkoWDg2QVBJUCByZHcpKHUzMiBhZGRyKTsKKy0JdTMyIAkoWDg2QVBJUCByZGwpKHUzMiBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3JiKSh1MzIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3J3KSh1MzIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQJKFg4NkFQSVAgd3JsKSh1MzIgYWRkciwgdTMyIHZhbCk7CistCX0gWDg2RU1VX21lbUZ1bmNzOworKyAgICB1OChYODZBUElQIHJkYikgKHUzMiBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgcmR3KSAodTMyIGFkZHIpOworKyAgICB1MzIoWDg2QVBJUCByZGwpICh1MzIgYWRkcik7CisrICAgIHZvaWQgKFg4NkFQSVAgd3JiKSAodTMyIGFkZHIsIHU4IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICB2b2lkIChYODZBUElQIHdybCkgKHUzMiBhZGRyLCB1MzIgdmFsKTsKKyt9IFg4NkVNVV9tZW1GdW5jczsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgSGVyZSBhcmUgdGhlIGRlZmF1bHQgbWVtb3J5IHJlYWQgYW5kIHdyaXRlCitAQCAtMTMyLDI5ICsxMzIsMjkgQEAgZXh0ZXJuIHZvaWQgWDg2QVBJIHdydyh1MzIgYWRkciwgdTE2IHZhbCk7CisgZXh0ZXJuIHZvaWQgWDg2QVBJIHdybCh1MzIgYWRkciwgdTMyIHZhbCk7CisgCisgI2lmZGVmIEVORF9QQUNLCistIyBwcmFnbWEJRU5EX1BBQ0sKKysjcHJhZ21hCUVORF9QQUNLCisgI2VuZGlmCisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistdHlwZWRlZiB2b2lkIChYODZBUElQIFg4NkVNVV9pbnRyRnVuY3MpKGludCBudW0pOworK3R5cGVkZWYgdm9pZCAoWDg2QVBJUCBYODZFTVVfaW50ckZ1bmNzKSAoaW50IG51bSk7CisgZXh0ZXJuIFg4NkVNVV9pbnRyRnVuY3MgX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwUGlvRnVuY3MoWDg2RU1VX3Bpb0Z1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSk7Cistdm9pZCAJWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50IG51bSk7CisrICAgIHZvaWQgWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICogZnVuY3MpOworKyAgICB2b2lkIFg4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKTsKKysgICAgdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKTsKKysgICAgdm9pZCBYODZFTVVfcHJlcGFyZUZvckludChpbnQgbnVtKTsKKyAKKyAvKiBkZWNvZGUuYyAqLworIAorLXZvaWQgCVg4NkVNVV9leGVjKHZvaWQpOworLXZvaWQgCVg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZXhlYyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfaGFsdF9zeXModm9pZCk7CisgCisgI2lmZGVmCURFQlVHCisgI2RlZmluZQlIQUxUX1NZUygpCVwKK0BAIC0xNjYsOCArMTY2LDggQEAgdm9pZCAJWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworIAorIC8qIERlYnVnIG9wdGlvbnMgKi8KKyAKKy0jZGVmaW5lIERFQlVHX0RFQ09ERV9GICAgICAgICAgIDB4MDAwMDAxIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCistI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAvKiBkdW1wIHJlZ3MgYmVmb3JlL2FmdGVyIGV4ZWN1dGlvbiAqLworKyNkZWZpbmUgREVCVUdfREVDT0RFX0YgICAgICAgICAgMHgwMDAwMDEgICAgICAgIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCisrI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAgICAgICAgLyogZHVtcCByZWdzIGJlZm9yZS9hZnRlciBleGVjdXRpb24gKi8KKyAjZGVmaW5lIERFQlVHX1NURVBfRiAgICAgICAgICAgIDB4MDAwMDA0CisgI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRV9GICAgICAweDAwMDAwOAorICNkZWZpbmUgREVCVUdfQlJFQUtfRiAgICAgICAgICAgMHgwMDAwMTAKK0BAIC0xNzUsMjQgKzE3NSwyMyBAQCB2b2lkIAlYODZFTVVfaGFsdF9zeXModm9pZCk7CisgI2RlZmluZSBERUJVR19TQVZFX0lQX0NTX0YgICAgICAweDAwMDA0MAorICNkZWZpbmUgREVCVUdfRlNfRiAgICAgICAgICAgICAgMHgwMDAwODAKKyAjZGVmaW5lIERFQlVHX1BST0NfRiAgICAgICAgICAgIDB4MDAwMTAwCistI2RlZmluZSBERUJVR19TWVNJTlRfRiAgICAgICAgICAweDAwMDIwMCAvKiBiaW9zIHN5c3RlbSBpbnRlcnJ1cHRzLiAqLworKyNkZWZpbmUgREVCVUdfU1lTSU5UX0YgICAgICAgICAgMHgwMDAyMDAgICAgICAgIC8qIGJpb3Mgc3lzdGVtIGludGVycnVwdHMuICovCisgI2RlZmluZSBERUJVR19UUkFDRUNBTExfRiAgICAgICAweDAwMDQwMAorICNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVF9GICAgICAgMHgwMDA4MDAKKy0jZGVmaW5lIERFQlVHX01FTV9UUkFDRV9GICAgICAgIDB4MDAxMDAwIAorLSNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAgCisrI2RlZmluZSBERUJVR19NRU1fVFJBQ0VfRiAgICAgICAweDAwMTAwMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAKKyAjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YgIDB4MDA0MDAwCistI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVF9GICAweDAwODAwMCAKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YgIDB4MDA4MDAwCisgI2RlZmluZSBERUJVR19FWElUICAgICAgICAgICAgICAweDAxMDAwMAorICNkZWZpbmUgREVCVUdfU1lTX0YgICAgICAgICAgICAgKERFQlVHX1NWQ19GfERFQlVHX0ZTX0Z8REVCVUdfUFJPQ19GKQorIAorLXZvaWQgCVg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworLXZvaWQgCVg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKy12b2lkIAlYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CistaW50IAlYODZFTVVfdHJhY2Vfb24odm9pZCk7CistaW50IAlYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb24odm9pZCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9YODZFTVVfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK2luZGV4IDQ3YWFjYjYuLjM4NWI4MDQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK0BAIC00NSw2NSArNDUsNjUgQEAKKyAKKyAjZGVmaW5lIENIRUNLX0lQX0ZFVENIX0YgICAgICAgICAgICAgICAgMHgxCisgI2RlZmluZSBDSEVDS19TUF9BQ0NFU1NfRiAgICAgICAgICAgICAgIDB4MgorLSNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTU19GICAgICAgICAgICAgICAweDQgLyp1c2luZyByZWd1bGFyIGxpbmVhciBwb2ludGVyICovCistI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTU19GICAgICAgICAgICAgIDB4OCAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0Ki8KKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1NfRiAgICAgICAgICAgICAgMHg0ICAgICAvKnVzaW5nIHJlZ3VsYXIgbGluZWFyIHBvaW50ZXIgKi8KKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTX0YgICAgICAgICAgICAgMHg4ICAgICAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0ICovCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKSAgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0lQX0ZFVENIX0YpCistIyBkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX1NQX0FDQ0VTU19GKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCistIyBkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKSAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0RBVEFfQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19JUF9GRVRDSCgpICAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfSVBfRkVUQ0hfRikKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19TUF9BQ0NFU1NfRikKKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfREFUQV9BQ0NFU1NfRikKKyAjZWxzZQorLSMgZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKy0jIGRlZmluZSBDSEVDS19TUF9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpCisrI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9GKQorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKy0jIGRlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RJU0FTU0VNQkxFX0YpCistIyBkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19CUkVBS19GKQorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCistIyBkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAoTS54ODYuZGVidWcgJiBERUJVR19TQVZFX0lQX0NTX0YpCistCistIyBkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19GU19GKQorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTSU5UX0YpCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfRikKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCistIyBkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNfRikKKy0jIGRlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX01FTV9UUkFDRV9GKQorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIChNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YpCisrI2RlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX0YpCisrI2RlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFX0YpCisrI2RlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKysjZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRElTQVNTRU1CTEVfRikKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfQlJFQUtfRikKKysjZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIChNLng4Ni5kZWJ1ZyAmIERFQlVHX1NBVkVfSVBfQ1NfRikKKysKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRlNfRikKKysjZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorKyNkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNJTlRfRikKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX0YpCisrI2RlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU19GKQorKyNkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19NRU1fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX05PUFJJTlRfRikKKyAjZWxzZQorLSMgZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJMAorLSMgZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgMAorLSMgZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJMAorLSMgZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgMAorKyNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCTAKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIDAKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkwCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIDAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYoeCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYyKHgseSkKKyAKKyAvKgorQEAgLTEyMywxMCArMTIzLDEwIEBACisgCQlNLng4Ni5zYXZlZF9pcCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgCX0KKyAjZWxzZQorLSMgZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCistIyBkZWZpbmUgREVDT0RFX1BSSU5URih4KQorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkKKy0jIGRlZmluZSBTQVZFX0lQX0NTKHgseSkKKysjZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpCisrI2RlZmluZSBTQVZFX0lQX0NTKHgseSkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKK0BAIC0xMzcsMTMgKzEzNywxMyBAQAorIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAJaWYgKERFQlVHX1RSQUNFKCkgfHwgREVCVUdfREVDT0RFKCkpIFg4NkVNVV90cmFjZV9yZWdzKCkKKyAjZWxzZQorLSMgZGVmaW5lIFRSQUNFX1JFR1MoKQorKyNkZWZpbmUgVFJBQ0VfUkVHUygpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU0lOR0xFX1NURVAoKQkJaWYgKERFQlVHX1NURVAoKSkgeDg2ZW11X3NpbmdsZV9zdGVwKCkKKysjZGVmaW5lIFNJTkdMRV9TVEVQKCkJCWlmIChERUJVR19TVEVQKCkpIHg4NmVtdV9zaW5nbGVfc3RlcCgpCisgI2Vsc2UKKy0jIGRlZmluZSBTSU5HTEVfU1RFUCgpCisrI2RlZmluZSBTSU5HTEVfU1RFUCgpCisgI2VuZGlmCisgCisgI2RlZmluZSBUUkFDRV9BTkRfU1RFUCgpCVwKK0BAIC0xNTEsMjkgKzE1MSwyOSBAQAorIAlTSU5HTEVfU1RFUCgpCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUigpCQlFbmRPZlRoZUluc3RydWN0aW9uUHJvY2VkdXJlOiB4ODZlbXVfZW5kX2luc3RyKCk7CistIyBkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkJeDg2ZW11X2VuZF9pbnN0cigpOworKyNkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSKCkJCUVuZE9mVGhlSW5zdHJ1Y3Rpb25Qcm9jZWR1cmU6IHg4NmVtdV9lbmRfaW5zdHIoKTsKKysjZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCXg4NmVtdV9lbmRfaW5zdHIoKTsKKyAjZWxzZQorLSMgZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCisrI2RlZmluZSBTVEFSVF9PRl9JTlNUUigpCisrI2RlZmluZSBFTkRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSAgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgIENBTExfVFJBQ0UodSx2LHcseCxzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6IENBTEwgJXMlMDR4OiUwNHhcbiIsIHUgLCB2LCBzLCB3LCB4KTsKKy0jIGRlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6ICVzXG4iLHUsdixuKTsKKyAjZWxzZQorLSMgZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorLSMgZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikKKysjZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworQEAgLTE4NSwyNiArMTg1LDI1IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuIChpbnQgeCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYgKGNoYXIgKngpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmMiAoY2hhciAqeCwgaW50IHkpOworLWV4dGVybiB2b2lkIHg4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3hyZWdzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdik7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2luc3RydW1lbnRfaW5zdHJ1Y3Rpb24gKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzICh1MzIgcCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzICh1aW50IHMsIHVpbnQgbyk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmKGNvbnN0IGNoYXIgKngpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3NpbmdsZV9zdGVwKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZW5kX2luc3RyKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF9yZWdzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF94cmVncyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdik7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbnN0cnVtZW50X2luc3RydWN0aW9uKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfbWVtX2FjY2Vzcyh1MzIgcCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2Vzcyh1aW50IHMsIHVpbnQgbyk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfREVCVUdfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVCVUdfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAoraW5kZXggNjFjZDRkYy4uNDlhMWY3YiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oCitAQCAtNTIsMzcgKzUyLDM2IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJeDg2ZW11X2ludHJfcmFpc2UgKHU4IHR5cGUpOworLXZvaWQgICAgZmV0Y2hfZGVjb2RlX21vZHJtIChpbnQgKm1vZCxpbnQgKnJlZ2gsaW50ICpyZWdsKTsKKy11OCAgICAgIGZldGNoX2J5dGVfaW1tICh2b2lkKTsKKy11MTYgICAgIGZldGNoX3dvcmRfaW1tICh2b2lkKTsKKy11MzIgICAgIGZldGNoX2xvbmdfaW1tICh2b2lkKTsKKy11OCAgICAgIGZldGNoX2RhdGFfYnl0ZSAodWludCBvZmZzZXQpOworLXU4ICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CistdTE2ICAgICBmZXRjaF9kYXRhX3dvcmQgKHVpbnQgb2Zmc2V0KTsKKy11MTYgICAgIGZldGNoX2RhdGFfd29yZF9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworLXUzMiAgICAgZmV0Y2hfZGF0YV9sb25nICh1aW50IG9mZnNldCk7CistdTMyICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKy12b2lkICAgIHN0b3JlX2RhdGFfYnl0ZSAodWludCBvZmZzZXQsIHU4IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2J5dGVfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV93b3JkICh1aW50IG9mZnNldCwgdTE2IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX3dvcmRfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfbG9uZyAodWludCBvZmZzZXQsIHUzMiB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV9sb25nX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTMyIHZhbCk7CistdTgqIAlkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKTsKKy11MzIqIAlkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpOworLXUzMglkZWNvZGVfcm0wMF9hZGRyZXNzKGludCBybSk7CistdTMyCWRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKy11MzIJZGVjb2RlX3JtMTBfYWRkcmVzcyhpbnQgcm0pOworLXUzMglkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCk7CisrICAgIHZvaWQgeDg2ZW11X2ludHJfcmFpc2UodTggdHlwZSk7CisrICAgIHZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKGludCAqbW9kLCBpbnQgKnJlZ2gsIGludCAqcmVnbCk7CisrICAgIHU4IGZldGNoX2J5dGVfaW1tKHZvaWQpOworKyAgICB1MTYgZmV0Y2hfd29yZF9pbW0odm9pZCk7CisrICAgIHUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0KTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKysgICAgdTE2IGZldGNoX2RhdGFfd29yZCh1aW50IG9mZnNldCk7CisrICAgIHUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworKyAgICB1MzIgZmV0Y2hfZGF0YV9sb25nKHVpbnQgb2Zmc2V0KTsKKysgICAgdTMyIGZldGNoX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTggdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX3dvcmQodWludCBvZmZzZXQsIHUxNiB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTE2IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9sb25nKHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpOworKyAgICB1OCAqZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUzMiAqZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTMyIGRlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9ERUNPREVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVDT0RFX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmggYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKK2luZGV4IDVmYjI3MTQuLjFjMTE0OTggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaAorQEAgLTQwLDIyICs0MCwyMSBAQAorICNkZWZpbmUgX19YODZFTVVfRlBVX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCisgLyogdGhlc2UgaGF2ZSB0byBiZSBkZWZpbmVkLCB3aGV0aGVyIDgwODcgc3VwcG9ydCBjb21waWxlZCBpbiBvciBub3QuICovCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5ICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYiAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmICh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggb3AxKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9GUFVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitpbmRleCBlNTliODA3Li41YTc4MGU2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitAQCAtNDIsMjMgKzQyLDIzIEBACisgI2lmZGVmIFg4Nl9GUFVfU1VQUE9SVAorIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qIEJhc2ljIDgwODcgcmVnaXN0ZXIgY2FuIGhvbGQgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAqLworIAorIHVuaW9uIHg4Nl9mcHVfcmVnX3UgeworLSAgICBzOCAgICAgICAgICAgICAgICAgIHRlbmJ5dGVzWzEwXTsKKy0gICAgZG91YmxlICAgICAgICAgICAgICBkdmFsOworLSAgICBmbG9hdCAgICAgICAgICAgICAgIGZ2YWw7CistICAgIHMxNiAgICAgICAgICAgICAgICAgc3ZhbDsKKy0gICAgczMyICAgICAgICAgICAgICAgICBsdmFsOworLQl9OworKyAgICBzOCB0ZW5ieXRlc1sxMF07CisrICAgIGRvdWJsZSBkdmFsOworKyAgICBmbG9hdCBmdmFsOworKyAgICBzMTYgc3ZhbDsKKysgICAgczMyIGx2YWw7CisrfTsKKyAKKyBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeworLQl1bmlvbiB4ODZfZnB1X3JlZ191IHJlZzsKKy0JY2hhciAgICAgICAgICAgICAgICB0YWc7CistCX07CisrICAgIHVuaW9uIHg4Nl9mcHVfcmVnX3UgcmVnOworKyAgICBjaGFyIHRhZzsKKyt9OworIAorIC8qCisgICogU2luY2Ugd2UgYXJlIG5vdCBnb2luZyB0byB3b3JyeSBhYm91dCB0aGUgcHJvYmxlbXMgb2YgYWxpYXNpbmcKK0BAIC04MywxNCArODMsMTQgQEAgc3RydWN0IHg4Nl9mcHVfcmVnIHsKKyAjZGVmaW5lICBYODZfRlBVX1NUS1RPUCAgMAorIAorIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CistICAgIHN0cnVjdCB4ODZfZnB1X3JlZyAgeDg2X2ZwdV9zdGFja1s4XTsKKy0gICAgaW50ICAgICAgICAgICAgICAgICB4ODZfZnB1X2ZsYWdzOworLSAgICBpbnQgICAgICAgICAgICAgICAgIHg4Nl9mcHVfY29uZmlnOyAgICAgICAgIC8qIHJvdW5kaW5nIG1vZGVzLCBldGMuICovCistICAgIHNob3J0ICAgICAgICAgICAgICAgeDg2X2ZwdV90b3MsIHg4Nl9mcHVfYm9zOworLQl9OworKyAgICBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeDg2X2ZwdV9zdGFja1s4XTsKKysgICAgaW50IHg4Nl9mcHVfZmxhZ3M7CisrICAgIGludCB4ODZfZnB1X2NvbmZpZzsgICAgICAgICAvKiByb3VuZGluZyBtb2RlcywgZXRjLiAqLworKyAgICBzaG9ydCB4ODZfZnB1X3RvcywgeDg2X2ZwdV9ib3M7CisrfTsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKgorQEAgLTEwNCwxNiArMTA0LDE2IEBAIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CisgICogaW5zdHJ1Y3Rpb25zLgorICAqLworIAorLSNlbmRpZiAvKiBYODZfRlBVX1NVUFBPUlQgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4Nl9GUFVfU1VQUE9SVCAqLworIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpICAgICAJXAorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkgICAgIAlcCisgCURFQ09ERV9QUklOVEYodFsobW9kPDwzKSsocmgpXSk7CistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpICAgIAlcCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkgICAgCVwKKyAJREVDT0RFX1BSSU5URih0Wyhtb2Q8PDYpKyhyaDw8MykrKHJsKV0pOworICNlbHNlCistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKyAjZW5kaWYKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAoraW5kZXggNjVlYTY3Ni4uMWJjMDdhNCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L29wcy5oCitAQCAtMzksNyArMzksNyBAQAorICNpZm5kZWYgX19YODZFTVVfT1BTX0gKKyAjZGVmaW5lIF9fWDg2RU1VX09QU19ICisgCistZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSh1OCBvcDEpOworLWV4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiMlsweDEwMF0pKHU4IG9wMik7CisrZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSAodTggb3AxKTsKKytleHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYjJbMHgxMDBdKSAodTggb3AyKTsKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX09QU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAoraW5kZXggZTAyM2NmOC4uYWNhMTMyYiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAorQEAgLTQ5LDE0ICs0OSwxNiBAQAorICNkZWZpbmUJX19IQVZFX0lOTElORV9BU1NFTUJMRVJfXworICNlbmRpZgorIAorLXUzMgkJZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKyt1MzIgZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKysKKyAjcHJhZ21hIGF1eCBnZXRfZmxhZ3NfYXNtID0JCQlcCisgCSJwdXNoZiIgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkicG9wCWVheCIgICAgICAgICAgICAgICAgICAJXAorIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXUxNiAgICAgYWFhX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBhYWFfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYWFfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3LDcgKzY5LDggQEAgdTE2ICAgICBhYWFfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MTYgICAgIGFhc193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgYWFzX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggYWFzX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03OCw3ICs4MSw4IEBAIHUxNiAgICAgYWFzX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTE2ICAgICBhYWRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGFhZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGFhZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODksNyArOTMsOCBAQCB1MTYgICAgIGFhZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUxNiAgICAgYWFtX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTE2IGFhbV93b3JkX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggYWFtX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMDAsNyArMTA1LDggQEAgdTE2ICAgICBhYW1fd29yZF9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXU4ICAgICAgYWRjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggYWRjX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTExMSw3ICsxMTcsOCBAQCB1OCAgICAgIGFkY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBhZGNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMjIsNyArMTI5LDggQEAgdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBhZGNfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMzMsNyArMTQxLDggQEAgdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGFkZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGFkZF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggYWRkX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNDQsNyArMTUzLDggQEAgdTggICAgICBhZGRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgYWRkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGFkZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTU1LDcgKzE2NSw4IEBAIHUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgYWRkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGFkZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTY2LDcgKzE3Nyw4IEBAIHUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBhbmRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBhbmRfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGFuZF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTc3LDcgKzE4OSw4IEBAIHU4ICAgICAgYW5kX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGFuZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE4OCw3ICsyMDEsOCBAQCB1MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGFuZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE5OSw3ICsyMTMsOCBAQCB1MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgY21wX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggY21wX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBjbXBfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTIxMCw3ICsyMjUsOCBAQCB1OCAgICAgIGNtcF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBjbXBfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMjEsNyArMjM3LDggQEAgdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBjbXBfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMzIsNyArMjQ5LDggQEAgdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGRhYV9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGRhYV9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggZGFhX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNDMsNyArMjYxLDggQEAgdTggICAgICBkYWFfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXU4ICAgICAgZGFzX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggZGFzX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBkYXNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI1NCw3ICsyNzMsOCBAQCB1OCAgICAgIGRhc19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTggICAgICBkZWNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBkZWNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGRlY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjY1LDcgKzI4NSw4IEBAIHU4ICAgICAgZGVjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGRlY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgZGVjX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNzYsNyArMjk3LDggQEAgdTE2ICAgICBkZWNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGRlY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgZGVjX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yODcsNyArMzA5LDggQEAgdTMyICAgICBkZWNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBpbmNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBpbmNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGluY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjk4LDcgKzMyMSw4IEBAIHU4ICAgICAgaW5jX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGluY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgaW5jX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMDksNyArMzMzLDggQEAgdTE2ICAgICBpbmNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGluY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgaW5jX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMjAsNyArMzQ1LDggQEAgdTMyICAgICBpbmNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzMxLDcgKzM1Nyw4IEBAIHU4ICAgICAgb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzQyLDcgKzM2OSw4IEBAIHUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIG9yX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNTMsNyArMzgxLDggQEAgdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgbmVnX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbmVnX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBuZWdfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM2NCw3ICszOTMsOCBAQCB1OCAgICAgIG5lZ19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBuZWdfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5lZ193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5lZ193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzc1LDcgKzQwNSw4IEBAIHUxNiAgICAgbmVnX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBuZWdfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5lZ19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5lZ19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzg2LDcgKzQxNyw4IEBAIHUzMiAgICAgbmVnX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgbm90X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbm90X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBub3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM5Nyw3ICs0MjksOCBAQCB1OCAgICAgIG5vdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBub3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5vdF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5vdF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDA4LDcgKzQ0MSw4IEBAIHUxNiAgICAgbm90X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBub3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5vdF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5vdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDE5LDcgKzQ1Myw4IEBAIHUzMiAgICAgbm90X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgcmNsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQzMCw3ICs0NjUsOCBAQCB1OCAgICAgIHJjbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDQxLDcgKzQ3Nyw4IEBAIHUxNiAgICAgcmNsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDUyLDcgKzQ4OSw4IEBAIHUzMiAgICAgcmNsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcmNyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ2Myw3ICs1MDEsOCBAQCB1OCAgICAgIHJjcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDc0LDcgKzUxMyw4IEBAIHUxNiAgICAgcmNyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDg1LDcgKzUyNSw4IEBAIHUzMiAgICAgcmNyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9sX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9sX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ5Niw3ICs1MzcsOCBAQCB1OCAgICAgIHJvbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTA3LDcgKzU0OSw4IEBAIHUxNiAgICAgcm9sX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTE4LDcgKzU2MSw4IEBAIHUzMiAgICAgcm9sX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTUyOSw3ICs1NzMsOCBAQCB1OCAgICAgIHJvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTQwLDcgKzU4NSw4IEBAIHUxNiAgICAgcm9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTUxLDcgKzU5Nyw4IEBAIHUzMiAgICAgcm9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU2Miw3ICs2MDksOCBAQCB1OCAgICAgIHNobF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaGxfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNobF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTczLDcgKzYyMSw4IEBAIHUxNiAgICAgc2hsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaGxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNobF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTg0LDcgKzYzMyw4IEBAIHUzMiAgICAgc2hsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU5NSw3ICs2NDUsOCBAQCB1OCAgICAgIHNocl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaHJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNocl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjA2LDcgKzY1Nyw4IEBAIHUxNiAgICAgc2hyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaHJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNocl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjE3LDcgKzY2OSw4IEBAIHUzMiAgICAgc2hyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2FyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2FyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYXJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYyOCw3ICs2ODEsOCBAQCB1OCAgICAgIHNhcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzYXJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNhcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjM5LDcgKzY5Myw4IEBAIHUxNiAgICAgc2FyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzYXJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNhcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjUwLDcgKzcwNSw4IEBAIHUzMiAgICAgc2FyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrdTE2IHNobGRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjYxLDcgKzcxNyw4IEBAIHUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGR4IGNsXTsKKyAKKy11MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworK3UzMiBzaGxkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobGRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3Miw3ICs3MjksOCBAQCB1MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWR4IGNsXTsKKyAKKy11MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworK3UxNiBzaHJkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY4Myw3ICs3NDEsOCBAQCB1MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBkeCBjbF07CisgCistdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyt1MzIgc2hyZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJkX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02OTQsNyArNzUzLDggQEAgdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVkeCBjbF07CisgCistdTggICAgICBzYmJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzYmJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNiYl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzA1LDcgKzc2NSw4IEBAIHU4ICAgICAgc2JiX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IHNiYl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcxNiw3ICs3NzcsOCBAQCB1MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIHNiYl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcyNyw3ICs3ODksOCBAQCB1MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgc3ViX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc3ViX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzdWJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTczOCw3ICs4MDEsOCBAQCB1OCAgICAgIHN1Yl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBzdWJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NDksNyArODEzLDggQEAgdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBzdWJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NjAsNyArODI1LDggQEAgdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt2b2lkIHRlc3RfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHRlc3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc3MCw3ICs4MzYsOCBAQCB2b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJcGFybSBbZWRpXSBbYWxdIFtibF0gICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXZvaWQJdGVzdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7Cisrdm9pZCB0ZXN0X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHRlc3Rfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc4MCw3ICs4NDcsOCBAQCB2b2lkCXRlc3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAlwYXJtIFtlZGldIFtheF0gW2J4XSAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdm9pZAl0ZXN0X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt2b2lkIHRlc3RfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggdGVzdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzkwLDcgKzg1OCw4IEBAIHZvaWQJdGVzdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VheF0gW2VieF0gICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgeG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggeG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCB4b3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgwMSw3ICs4NzAsOCBAQCB1OCAgICAgIHhvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiB4b3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MTIsNyArODgyLDggQEAgdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiB4b3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MjMsNyArODk0LDggQEAgdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkICAgIGltdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7Cisrdm9pZCBpbXVsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggaW11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODM0LDcgKzkwNiw4IEBAIHZvaWQgICAgaW11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbYWxdIFtibF0gICAgICBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGF4IGJsXTsKKyAKKy12b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworK3ZvaWQgaW11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGltdWxfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg0Niw3ICs5MTksOCBAQCB2b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJ4IGR4XTsKKyAKKy12b2lkICAgIGltdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBpbXVsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpbXVsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04NTgsNyArOTMyLDggQEAgdm9pZCAgICBpbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkICAgIG11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyt2b2lkIG11bF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IG11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODY5LDcgKzk0NCw4IEBAIHZvaWQgICAgbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFthbF0gW2JsXSAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgYXggYmxdOworIAorLXZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyt2b2lkIG11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IG11bF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODgxLDcgKzk1Nyw4IEBAIHZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBieCBkeF07CisgCistdm9pZCAgICBtdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBtdWxfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG11bF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODkzLDcgKzk3MCw4IEBAIHZvaWQgICAgbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgaWRpdl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggKiBhbCwgdTggKiBhaCwgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkwNSw3ICs5ODMsOCBAQCB2b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2JsXVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJsXTsKKyAKKy12b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGlkaXZfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGRsbywgdTE2IGRoaSwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkxNyw3ICs5OTYsOCBAQCB2b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtkeF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGR4IGJ4XTsKKyAKKy12b2lkCWlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgaWRpdl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkbG8sIHUzMiBkaGksIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpZGl2X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05MjksNyArMTAwOSw4IEBAIHZvaWQJaWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2VheF0gW2VkeF0gW2VieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBlYXggZWR4IGVieF07CisgCistdm9pZAlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgZGl2X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCAqIGFsLCB1OCAqIGFoLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NDEsNyArMTAyMiw4IEBAIHZvaWQJZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtibF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBibF07CisgCistdm9pZAlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGRpdl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZGxvLCB1MTYgZGhpLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NTMsNyArMTAzNSw4IEBAIHZvaWQJZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbZHhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBkeCBieF07CisgCistdm9pZAlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgZGl2X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGRsbywgdTMyIGRoaSwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGRpdl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTY3LDQgKzEwNTAsNCBAQCB2b2lkCWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCisgI2VuZGlmCisgCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitpbmRleCBiZWE4MzU3Li4wZjBlNzhkIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitAQCAtNDAsMTAyICs0MCwxMDIgQEAKKyAjZGVmaW5lIF9fWDg2RU1VX1BSSU1fT1BTX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdTE2ICAgICBhYWFfd29yZCAodTE2IGQpOworLXUxNiAgICAgYWFzX3dvcmQgKHUxNiBkKTsKKy11MTYgICAgIGFhZF93b3JkICh1MTYgZCk7CistdTE2ICAgICBhYW1fd29yZCAodTggZCk7CistdTggICAgICBhZGNfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBhZGNfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGFkY19sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgYWRkX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgYWRkX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBhZGRfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGFuZF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGFuZF93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgYW5kX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBjbXBfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBjbXBfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGNtcF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgZGFhX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGFzX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGVjX2J5dGUgKHU4IGQpOworLXUxNiAgICAgZGVjX3dvcmQgKHUxNiBkKTsKKy11MzIgICAgIGRlY19sb25nICh1MzIgZCk7CistdTggICAgICBpbmNfYnl0ZSAodTggZCk7CistdTE2ICAgICBpbmNfd29yZCAodTE2IGQpOworLXUzMiAgICAgaW5jX2xvbmcgKHUzMiBkKTsKKy11OCAgICAgIG9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgb3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIG9yX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBuZWdfYnl0ZSAodTggcyk7CistdTE2ICAgICBuZWdfd29yZCAodTE2IHMpOworLXUzMiAgICAgbmVnX2xvbmcgKHUzMiBzKTsKKy11OCAgICAgIG5vdF9ieXRlICh1OCBzKTsKKy11MTYgICAgIG5vdF93b3JkICh1MTYgcyk7CistdTMyICAgICBub3RfbG9uZyAodTMyIHMpOworLXU4ICAgICAgcmNsX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcmNsX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJjbF9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICByY3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByY3Jfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcmNyX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHJvbF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJvbF93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByb2xfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgcm9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcm9yX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJvcl9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICBzaGxfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzaGxfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgc2hsX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHNocl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNocl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICBzaHJfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgc2FyX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2FyX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHNhcl9sb25nICh1MzIgZCwgdTggcyk7CistdTE2ICAgICBzaGxkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaGxkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTE2ICAgICBzaHJkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaHJkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTggICAgICBzYmJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzYmJfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHNiYl9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgc3ViX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc3ViX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBzdWJfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIHRlc3RfYnl0ZSAodTggZCwgdTggcyk7Cistdm9pZCAgICB0ZXN0X3dvcmQgKHUxNiBkLCB1MTYgcyk7Cistdm9pZCAgICB0ZXN0X2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICB4b3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICB4b3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHhvcl9sb25nICh1MzIgZCwgdTMyIHMpOworLXZvaWQgICAgaW11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIGltdWxfd29yZCAodTE2IHMpOworLXZvaWQgICAgaW11bF9sb25nICh1MzIgcyk7Cistdm9pZCAJaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIG11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIG11bF93b3JkICh1MTYgcyk7Cistdm9pZCAgICBtdWxfbG9uZyAodTMyIHMpOworLXZvaWQgICAgaWRpdl9ieXRlICh1OCBzKTsKKy12b2lkICAgIGlkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgaWRpdl9sb25nICh1MzIgcyk7Cistdm9pZCAgICBkaXZfYnl0ZSAodTggcyk7Cistdm9pZCAgICBkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgZGl2X2xvbmcgKHUzMiBzKTsKKy12b2lkICAgIGlucyAoaW50IHNpemUpOworLXZvaWQgICAgb3V0cyAoaW50IHNpemUpOworLXUxNiAgICAgbWVtX2FjY2Vzc193b3JkIChpbnQgYWRkcik7Cistdm9pZCAgICBwdXNoX3dvcmQgKHUxNiB3KTsKKy12b2lkICAgIHB1c2hfbG9uZyAodTMyIHcpOworLXUxNiAgICAgcG9wX3dvcmQgKHZvaWQpOworLXUzMgkJcG9wX2xvbmcgKHZvaWQpOworKyAgICB1MTYgYWFhX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFzX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFkX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFtX3dvcmQodTggZCk7CisrICAgIHU4IGFkY19ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRjX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkY19sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFuZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYW5kX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGNtcF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGNtcF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGRhYV9ieXRlKHU4IGQpOworKyAgICB1OCBkYXNfYnl0ZSh1OCBkKTsKKysgICAgdTggZGVjX2J5dGUodTggZCk7CisrICAgIHUxNiBkZWNfd29yZCh1MTYgZCk7CisrICAgIHUzMiBkZWNfbG9uZyh1MzIgZCk7CisrICAgIHU4IGluY19ieXRlKHU4IGQpOworKyAgICB1MTYgaW5jX3dvcmQodTE2IGQpOworKyAgICB1MzIgaW5jX2xvbmcodTMyIGQpOworKyAgICB1OCBvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgb3Jfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgb3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBuZWdfYnl0ZSh1OCBzKTsKKysgICAgdTE2IG5lZ193b3JkKHUxNiBzKTsKKysgICAgdTMyIG5lZ19sb25nKHUzMiBzKTsKKysgICAgdTggbm90X2J5dGUodTggcyk7CisrICAgIHUxNiBub3Rfd29yZCh1MTYgcyk7CisrICAgIHUzMiBub3RfbG9uZyh1MzIgcyk7CisrICAgIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcmNsX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcmNsX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJjcl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJjcl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggcm9sX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByb2xfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByb2xfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcm9yX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcm9yX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNobF93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHNobF9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggc2hyX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzaHJfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHNhcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1MTYgc2hsZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrICAgIHUzMiBzaGxkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysgICAgdTE2IHNocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKyAgICB1MzIgc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrICAgIHU4IHNiYl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2JiX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IHN1Yl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHZvaWQgdGVzdF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB2b2lkIHRlc3Rfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB2b2lkIHRlc3RfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCB4b3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHhvcl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiB4b3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB2b2lkIGltdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpbXVsX3dvcmQodTE2IHMpOworKyAgICB2b2lkIGltdWxfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKiByZXNfbG8sIHUzMiAqIHJlc19oaSwgdTMyIGQsIHUzMiBzKTsKKysgICAgdm9pZCBtdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBtdWxfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgbXVsX2xvbmcodTMyIHMpOworKyAgICB2b2lkIGlkaXZfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGlkaXZfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgZGl2X2J5dGUodTggcyk7CisrICAgIHZvaWQgZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGRpdl9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBpbnMoaW50IHNpemUpOworKyAgICB2b2lkIG91dHMoaW50IHNpemUpOworKyAgICB1MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKTsKKysgICAgdm9pZCBwdXNoX3dvcmQodTE2IHcpOworKyAgICB2b2lkIHB1c2hfbG9uZyh1MzIgdyk7CisrICAgIHUxNiBwb3Bfd29yZCh2b2lkKTsKKysgICAgdTMyIHBvcF9sb25nKHZvaWQpOworKyAgICB2b2lkIGNwdWlkKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NDZlYzlkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK0BAIC0wLDAgKzEsNzcgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoKKysqIElubGluZSBoZWxwZXJzIGZvciB4ODZlbXUKKysqCisrKiBDb3B5cmlnaHQgKEMpIDIwMDggQmFydCBUcm9qYW5vd3NraSwgU3ltYmlvIFRlY2hub2xvZ2llcywgTExDCisrKgorKyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyoKKysqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZAorKyogIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKysqICBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0CisrKiAgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCisrKiAgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycyBub3QgYmUgdXNlZAorKyogIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKysqICB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgYXV0aG9ycyBtYWtlcyBubworKyogIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisrKiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysqCisrKiAgVEhFIEFVVEhPUlMgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisrKiAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworKyogIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisrKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRgorKyogIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgorKyogIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKysqICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyoKKysqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysqCisrKiBMYW5ndWFnZTogICAgIEdOVSBDCisrKiBFbnZpcm9ubWVudDogIEdDQyBvbiBpMzg2IG9yIHg4Ni02NAorKyogRGV2ZWxvcGVyOiAgICBCYXJ0IFRyb2phbm93c2tpCisrKgorKyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBhIGZldyB4ODYgbWFjcm9zIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlCisrKiAgICAgICAgICAgICAgIGVtdWxhdG9yIHRvIGV4ZWN1dGUgbmF0aXZlIGluc3RydWN0aW9ucy4KKysqCisrKiAgICAgICAgICAgICAgIEZvciBQSUMgdnMgbm9uLVBJQyBjb2RlIHJlZmVyIHRvOgorKyogICAgICAgICAgICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKKysqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjaWZuZGVmIF9fWDg2RU1VX1BSSU1fWDg2X0dDQ19ICisrI2RlZmluZSBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSAorKworKyNpbmNsdWRlICJ4ODZlbXUvdHlwZXMuaCIKKysKKysjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8ICEoZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pKQorKyNlcnJvciBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBnY2Mgb24gaTM4NiBvciB4ODYtNjQgc3lzdGVtCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX19QSUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykKKysKKysjZGVmaW5lIFg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJSVlYnggICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAiY3B1aWQgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAibW92bCAlJWVieCwgJTEgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAicG9wbCAlJWVieCAgICAgICBcblx0IjoiPWEiKCphKSwgIj1yIigqYiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICI9YyIoKmMpLCAiPWQiKCpkKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImEiKCphKSwgImMiKCpjKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImNjIik7CisrfQorKworKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogISAoX19QSUNfXyAmJiBfX2kzODZfXykgKi8KKysKKysjZGVmaW5lIHg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3B1aWQiOiI9YSIoKmEpLCAiPWIiKCpiKSwgIj1jIigqYyksICI9ZCIoKmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiYSIoKmEpLCAiYyIoKmMpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiY2MiKTsKKyt9CisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1BJQ19fICYmIF9faTM4Nl9fICovCisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oCitpbmRleCA1MmNmOGU0Li42YmQwNjExIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorQEAgLTQyLDcgKzQyLDcgQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIGFuZCB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qCitAQCAtNjQsNDggKzY0LDQ4IEBACisgCisgdHlwZWRlZiBzdHJ1Y3QgeworICAgICB1MzIgZV9yZWc7CistCX0gSTMyX3JlZ190OworK30gSTMyX3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTE2IGZpbGxlcjAsIHhfcmVnOworLQl9IEkxNl9yZWdfdDsKKysgICAgdTE2IGZpbGxlcjAsIHhfcmVnOworK30gSTE2X3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggZmlsbGVyMCwgZmlsbGVyMSwgaF9yZWcsIGxfcmVnOworLQl9IEk4X3JlZ190OworKyAgICB1OCBmaWxsZXIwLCBmaWxsZXIxLCBoX3JlZywgbF9yZWc7CisrfSBJOF9yZWdfdDsKKyAKKy0jZWxzZSAvKiAhX19CSUdfRU5ESUFOX18gKi8KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0JJR19FTkRJQU5fXyAqLworIAorIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgdTMyIGVfcmVnOworLQl9IEkzMl9yZWdfdDsKKyt9IEkzMl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXUxNiB4X3JlZzsKKy0JfSBJMTZfcmVnX3Q7CisrICAgIHUxNiB4X3JlZzsKKyt9IEkxNl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4IGxfcmVnLCBoX3JlZzsKKy0JfSBJOF9yZWdfdDsKKysgICAgdTggbF9yZWcsIGhfcmVnOworK30gSThfcmVnX3Q7CisgCistI2VuZGlmIC8qIEJJR19FTkRJQU4gKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJJR19FTkRJQU4gKi8KKyAKKyB0eXBlZGVmIHVuaW9uIHsKKy0JSTMyX3JlZ190ICAgSTMyX3JlZzsKKy0JSTE2X3JlZ190ICAgSTE2X3JlZzsKKy0JSThfcmVnX3QgICAgSThfcmVnOworLQl9IGkzODZfZ2VuZXJhbF9yZWdpc3RlcjsKKysgICAgSTMyX3JlZ190IEkzMl9yZWc7CisrICAgIEkxNl9yZWdfdCBJMTZfcmVnOworKyAgICBJOF9yZWdfdCBJOF9yZWc7CisrfSBpMzg2X2dlbmVyYWxfcmVnaXN0ZXI7CisgCisgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzIHsKKy0JaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIEEsIEIsIEMsIEQ7CistCX07CisrICAgIGkzODZfZ2VuZXJhbF9yZWdpc3RlciBBLCBCLCBDLCBEOworK307CisgCisgdHlwZWRlZiBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgR2VuX3JlZ190OworIAorIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyB7CistCWkzODZfZ2VuZXJhbF9yZWdpc3RlciBTUCwgQlAsIFNJLCBESSwgSVA7CistCXUzMiBGTEFHUzsKKy0JfTsKKysgICAgaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIFNQLCBCUCwgU0ksIERJLCBJUDsKKysgICAgdTMyIEZMQUdTOworK307CisgCisgLyogIAorICAqIFNlZ21lbnQgcmVnaXN0ZXJzIGhlcmUgcmVwcmVzZW50IHRoZSAxNiBiaXQgcXVhbnRpdGllcworQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3MgeworIAorIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyB7CisgICAgIHUxNiBDUywgRFMsIFNTLCBFUywgRlMsIEdTOworLQl9OworK307CisgCisgLyogOCBiaXQgcmVnaXN0ZXJzICovCisgI2RlZmluZSBSX0FIICBnZW4uQS5JOF9yZWcuaF9yZWcKK0BAIC0yNTgsOSArMjU4LDkgQEAgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzIHsKKyAjZGVmaW5lICBJTlRSX0hBTFRFRCAgICAgICAgICAweDQKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyAgICBnZW47CistICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyAgICBzcGM7CistICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyAgICBzZWc7CisrICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyBnZW47CisrICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyBzcGM7CisrICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyBzZWc7CisgICAgIC8qCisgICAgICAqIE1PREUgY29udGFpbnMgaW5mb3JtYXRpb24gb246CisgICAgICAqICBSRVBFIHByZWZpeCAgICAgICAgICAgICAyIGJpdHMgIHJlcGUscmVwbmUKK0BAIC0yNzMsMjEgKzI3MywyMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAqICBFeHRlcm4gaW50ZXJydXB0ICAgICAgICAxIGJpdHMKKyAgICAgICogIEhhbHRlZCAgICAgICAgICAgICAgICAgIDEgYml0cworICAgICAgKi8KKy0gICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7CistICAgIHZvbGF0aWxlIGludCAgICAgICAgICAgICAgICBpbnRyOyAgIC8qIG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzICovCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZzsKKysgICAgdTMyIG1vZGU7CisrICAgIHZvbGF0aWxlIGludCBpbnRyOyAgICAgICAgICAvKiBtYXNrIG9mIHBlbmRpbmcgaW50ZXJydXB0cyAqLworKyAgICBpbnQgZGVidWc7CisgI2lmZGVmIERFQlVHCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazsKKy0gICAgdTE2ICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2lwOworLSAgICB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRfY3M7CistICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfcG9zOworLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX3N0cl9wb3M7CistICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfYnVmWzMyXTsgLyogZW5jb2RlZCBieXRlIHN0cmVhbSAgKi8KKy0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYnVmWzI1Nl07IC8qIGRpc2Fzc2VtYmxlZCBzdHJpbmdzICovCisrICAgIGludCBjaGVjazsKKysgICAgdTE2IHNhdmVkX2lwOworKyAgICB1MTYgc2F2ZWRfY3M7CisrICAgIGludCBlbmNfcG9zOworKyAgICBpbnQgZW5jX3N0cl9wb3M7CisrICAgIGNoYXIgZGVjb2RlX2J1ZlszMl07ICAgICAgICAvKiBlbmNvZGVkIGJ5dGUgc3RyZWFtICAqLworKyAgICBjaGFyIGRlY29kZWRfYnVmWzI1Nl07ICAgICAgLyogZGlzYXNzZW1ibGVkIHN0cmluZ3MgKi8KKyAjZW5kaWYKKy0gICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgIGludG5vOworLSAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYWRbM107CistCX0gWDg2RU1VX3JlZ3M7CisrICAgIHU4IGludG5vOworKyAgICB1OCBfX3BhZFszXTsKKyt9IFg4NkVNVV9yZWdzOworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKK0BAIC0zMDAsMjAgKzMwMCwyMCBAQCBwcml2YXRlCQkJLSBwcml2YXRlIGRhdGEgcG9pbnRlcgorIHg4NgkJCS0gWDg2IHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1bnNpZ25lZCBsb25nCW1lbV9iYXNlOworLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOworLQl2b2lkKiAgICAgICAgCXByaXZhdGU7CistCVg4NkVNVV9yZWdzCQl4ODY7CistCX0gWDg2RU1VX3N5c0VudjsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKKysgICAgdm9pZCAqcHJpdmF0ZTsKKysgICAgWDg2RU1VX3JlZ3MgeDg2OworK30gWDg2RU1VX3N5c0VudjsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKyAvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZS4KK0BAIC0zMjEsMTcgKzMyMSwxNiBAQCBleHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICAqIFdlIGtlZXAgaXQgZ2xvYmFsIHRvIGF2b2lkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBjb2RlIGZvciBzcGVlZC4KKyAgKi8KKyAKKy1leHRlcm4gICAgWDg2RU1VX3N5c0VudglfWDg2RU1VX2VudjsKKysgICAgZXh0ZXJuIFg4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7CisgI2RlZmluZSAgIE0gICAgICAgICAgICAgX1g4NkVNVV9lbnYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIEZ1bmN0aW9uIHRvIGxvZyBpbmZvcm1hdGlvbiBhdCBydW50aW1lICovCisgCistdm9pZAlwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworKyAgICB2b2lkIHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfUkVHU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9SRUdTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitpbmRleCBjMGMwOWMxLi41YTZlZjAxIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitAQCAtMzYsNyArMzYsNiBAQAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLQorICNpZm5kZWYgX19YODZFTVVfVFlQRVNfSAorICNkZWZpbmUgX19YODZFTVVfVFlQRVNfSAorIAorQEAgLTYxLDQ2ICs2MCwyMSBAQAorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistLyogQ3VycmVudGx5IG9ubHkgZm9yIExpbnV4LzMyYml0ICovCistI3VuZGVmICBfX0hBU19MT05HX0xPTkdfXworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChOT19MT05HX0xPTkcpCistI2RlZmluZSBfX0hBU19MT05HX0xPTkdfXworLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKy0vKiBUYWtlbiBmcm9tIFhtZC5oICovCistI3VuZGVmIE5VTTMyCistI2lmIGRlZmluZWQgKF9MUDY0KSB8fCBcCistICAgIGRlZmluZWQoX19hbHBoYSkgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChpYTY0KSB8fCBcCistICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKy0gICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKy0gICAgKGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19MUDY0KSkgfHwgXAorLSAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorLSAgICAoZGVmaW5lZChfX3NnaSkgJiYgKF9NSVBTX1NaTE9ORyA9PSA2NCkpCistI2RlZmluZSBOVU0zMiBpbnQKKy0jZWxzZQorLSNkZWZpbmUgTlVNMzIgbG9uZworLSNlbmRpZgorK3R5cGVkZWYgdWludDhfdCB1ODsKKyt0eXBlZGVmIHVpbnQxNl90IHUxNjsKKyt0eXBlZGVmIHVpbnQzMl90IHUzMjsKKyt0eXBlZGVmIHVpbnQ2NF90IHU2NDsKKyAKKy10eXBlZGVmIHVuc2lnbmVkIGNoYXIgCQl1ODsKKy10eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkJdTE2OworLXR5cGVkZWYgdW5zaWduZWQgTlVNMzIgCQl1MzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgCXU2NDsKKy0jZW5kaWYKKyt0eXBlZGVmIGludDhfdCBzODsKKyt0eXBlZGVmIGludDE2X3QgczE2OworK3R5cGVkZWYgaW50MzJfdCBzMzI7CisrdHlwZWRlZiBpbnQ2NF90IHM2NDsKKyAKKy10eXBlZGVmIGNoYXIgCQkJCXM4OworLXR5cGVkZWYgc2hvcnQgCQkJCXMxNjsKKy10eXBlZGVmIE5VTTMyIAkJCQlzMzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiBsb25nIGxvbmcgCQkJczY0OworLSNlbmRpZgorLQorLXR5cGVkZWYgdW5zaWduZWQgaW50CQkJdWludDsKKy10eXBlZGVmIGludCAJCQkJc2ludDsKKyt0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OworK3R5cGVkZWYgaW50IHNpbnQ7CisgCisgdHlwZWRlZiB1MTYgWDg2RU1VX3Bpb0FkZHI7CisgCistI3VuZGVmIE5VTTMyCistCistI2VuZGlmCS8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oIGIvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaAoraW5kZXggMTEyZWUzNi4uZjExZGMxMCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKK0BAIC0zOCw3ICszOCw2IEBACisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistCisgI2lmbmRlZiBfX1g4NkVNVV9YODZFTVVJX0gKKyAjZGVmaW5lIF9fWDg2RU1VX1g4NkVNVUlfSAorIAorQEAgLTc0LDI5ICs3MywyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyNlbmRpZgorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElubGluZSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19yZGIpKHUzMiBhZGRyKTsKKy1leHRlcm4gdTE2IAkoWDg2QVBJUCBzeXNfcmR3KSh1MzIgYWRkcik7CistZXh0ZXJuIHUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dydykodTMyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcik7CisrICAgIGV4dGVybiB1MTYoWDg2QVBJUCBzeXNfcmR3KSAodTMyIGFkZHIpOworKyAgICBleHRlcm4gdTMyKFg4NkFQSVAgc3lzX3JkbCkgKHUzMiBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JsKSAodTMyIGFkZHIsIHUzMiB2YWwpOworIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19pbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MzIgCShYODZBUElQIHN5c19pbmwpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXRiKShYODZFTVVfcGlvQWRkciBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQJKFg4NkFQSVAgc3lzX291dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19pbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUxNihYODZBUElQIHN5c19pbncpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUzMihYODZBUElQIHN5c19pbmwpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0dykgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVUlfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfWDg2RU1VSV9IICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvYXItZnJvbS1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjYmM3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGhvc3QtY3Jvc3MgYXIKKworSWYgYnVpbGRpbmcgb24gMzJiaXQgaG9zdCBhbmQgY3JlYXRpbmcgNjRiaXQgbGlicmFyaWVzLCB0aGUgdGFyZ2V0CitwYWNrYWdlIGJ1aWxkcyBzaG91bGQgbm90IGludm9rZSB0aGUgMzJiaXQgaG9zdHMncyBhci4gIFNwZWNpZmljYWxseQoreW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgbGlrZToKKworeDg2XzY0LWxpbnV4LWdjYyAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1MbGlicy94ODZlbXUgdjg2X3g4NmVtdS5vIHY4Nl9tZW0ubyB2ODZfY29tbW9uLm8gIHY4Ni5vIC1seDg2ZW11IC1vIHY4NmQKK2xpYnMveDg2ZW11L2xpYng4NmVtdS5hOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBBcmNoaXZlIGhhcyBubyBpbmRleDsgcnVuIHJhbmxpYiB0byBhZGQgb25lCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnMveDg2ZW11L01ha2VmaWxlIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2xpYnMveDg2ZW11L01ha2VmaWxlCisrKysgYi9saWJzL3g4NmVtdS9NYWtlZmlsZQorQEAgLTEsNyArMSwxMSBAQAorIE9CSlMgPSBkZWNvZGUubyBmcHUubyBvcHMubyBvcHMyLm8gcHJpbV9vcHMubyBzeXMubworIAorK2lmZXEgKCQoQVIpLCkKKysJQVIgPSBhcgorK2VuZGlmCisrCisgbGlieDg2ZW11LmE6ICQoT0JKUykKKy0JYXIgcnYgJEAgJCsKKysJJChBUikgcnYgJEAgJCsKKyAKKyAlLm86ICUuYworIAkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2Zic2V0dXAgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9mYnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhNDA5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9mYnNldHVwCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoIAorCisvc2Jpbi9tb2Rwcm9iZSB1dmVzYWZiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC91dmVzYWZiLmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC91dmVzYWZiLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3ODk3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgTG9hZCB1dmVzYWZiLmtvIGF0IGJvb3QKK3V2ZXNhZmIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYiBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTAyMDcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiVXNlciBzdXBwb3J0IGJpbmFyeSBmb3IgdGhlIHV2ZXNhZmIga2VybmVsIG1vZHVsZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8iCisKKyMgdGhlIGNvcHlyaWdodCBpbmZvIGlzIGF0IHRoZSBib3R0b20gb2YgUkVBRE1FLCBleHBlY3QgYnJlYWsKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTk0YWMxOTcxZTRmMjMwOWRjMzIyZDU5OGU3YjFmN2RkIgorCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS11dmVzYWZiIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mYnNldHVwIFwKKyAgICAgICAgICAgZmlsZTovL3V2ZXNhZmIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9hci1mcm9tLWVudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxYzc5MmJhN2I4NzRhZDhjNDNmMGQzZGE0Y2ZhYmUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzNDk2NGFlMThlZjY4Yzg0OTNhZGQyY2UxNTBlM2I0NTAyYmFkZWIwZDkxOTRiNGJkODEyNDFkMjVlNjczNWMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitJTklUU0NSSVBUX05BTUUgPSAiZmJzZXR1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAgUyAuIgorCitkb19jb25maWd1cmUgKCkgeworCS4vY29uZmlndXJlIC0td2l0aC14ODZlbXUKK30KKworZG9fY29tcGlsZSAoKSB7CisJS0RJUj0iJHtTVEFHSU5HX0RJUl9IT1NUfS91c3IiIG1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCB2ODZkICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisKKyAgICAgICAgIyBPbmx5IGluc3RhbGwgZmJzZXR1cCBzY3JpcHQgaWYgJ3N5c3Zpbml0JyBpcyBpbiBESVNUUk9fRkVBVFVSRVMKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZmJzZXR1cCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZmJzZXR1cAorICAgICAgICBmaQorCisgICAgICAgICMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3V2ZXNhZmIuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorICAgICAgICBmaQorfQorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZmJzZXR1cC5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhNGQ3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiCkBAIC0wLDAgKzEsNzIgQEAKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmg7ZW5kbGluZT0yNTttZDU9YjFkMWQyY2RhMWMwN2ViODQ4ZWE3ZDYyMTU3MTJkOWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29yZS9kbnMuaDtlbmRsaW5lPTIzO21kNT02ZmU4MjU5MGI4MWFhMGRkZWE1MDk1YjU0OGUyZmRjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1kYWVtb24vbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTllZTc3MzY4YzU0MDdhZjc3Y2FhZWYxYjA3Mjg1OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNsaWVudC9jbGllbnQuaDtlbmRsaW5lPTIzO21kNT1mNGFjNzQxYTI1YzRmNDM0MDM5YmEzZTE4Yzg2NzRjZiIKKworcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbiwtLWRpc2FibGUtcHl0aG9uLHB5dGhvbi1uYXRpdmUgcHl0aG9uIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJmMjI3NDViOGY3MzY4YWQ1YTBhM2ZkZGFjMzQzZjJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzNzI3MTliMjRlMmRkNzVkZTZmNTliYjEzMTVlNjAwZGI0ZmQwOTI4MDViZDEyMDFlZDBjYjY1MWEyZGFiNDgiCisKK0RFUEVORFMgKz0gImF2YWhpIGd0aysgbGliZ2xhZGUiCisKK0FWQUhJX0dUSyA9ICItLWVuYWJsZS1ndGsgLS1kaXNhYmxlLWd0azMiCisKK1MgPSAiJHtXT1JLRElSfS9hdmFoaS0ke1BWfSIKKworUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXRpbHMgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIHB5dGhvbi1hdmFoaSBhdmFoaS1kaXNjb3ZlciBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkqLnNvLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGliYXZhaC11aSoiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJhdmFoaS11aSR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpLmEiCisKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9iKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9iKiIKKworRklMRVNfcHl0aG9uLWF2YWhpID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpX2Rpc2NvdmVyIgorRklMRVNfYXZhaGktZGlzY292ZXIgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRlcmZhY2VzL2F2YWhpLWRpc2NvdmVyKiIKK0ZJTEVTX2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludGVyZmFjZXMvYXZhaGktZGlzY292ZXIuZ2xhZGUiCisKK1JERVBFTkRTX2F2YWhpLWRpc2NvdmVyID0gInB5dGhvbi1hdmFoaSBweXRob24tcHlndGsiCitSREVQRU5EU19weXRob24tYXZhaGkgPSAicHl0aG9uLWNvcmUgcHl0aG9uLWRidXMiCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke3N5c2NvbmZkaXJ9IC1yZgorCXJtICR7RH0ke2Jhc2VfbGliZGlyfSAtcmYKKwlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9IC1yZgorCSMgVGhlICR7c3lzdGVtZF91bml0ZGlyfSBpcyAvbGliL3N5c3RlbWQsIHNvIHdlIG5lZWQgcm1kaXIgL2xpYiwKKwkjIGJ1dCBub3QgJHtiYXNlX2xpYmRpcn0gaGVyZS4gQW5kIHRoZSAvbGliIG1heSBub3QgZXhpc3QKKwkjIHdoaXRob3V0IHN5c3RlbWQuCisJWyAhIC1kICR7RH0vbGliIF0gfHwgcm1kaXIgJHtEfS9saWIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLWIqCisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1wKgorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktcioKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLXMqCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktYyogLXJmCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktZyogLXJmCisJcm0gJHtEfSR7bGliZGlyfS9saWJhdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vbGliYXZhaGktZyoKKwlybSAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9hdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2F2YWhpLWcqCisJcm0gJHtEfSR7c2JpbmRpcn0gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vYXZhaGkvYSoKKwlybSAke0R9JHtkYXRhZGlyfS9hdmFoaS9zKgorCXJtICR7RH0ke2RhdGFkaXJ9L2xvY2FsZS8gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vZGJ1cyogLXJmCisJcm0gJHtEfSR7bWFuZGlyfS9tYW4xL2EqCisJcm0gJHtEfSR7bWFuZGlyfS9tYW41IC1yZgorCXJtICR7RH0ke21hbmRpcn0vbWFuOCAtcmYKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjUxOTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKQEAgLTAsMCArMSwxNTggQEAKK1NVTU1BUlkgPSAiQXZhaGkgSVB2NExMIG5ldHdvcmsgYWRkcmVzcyBjb25maWd1cmF0aW9uIGRhZW1vbiIKK0RFU0NSSVBUSU9OID0gJ0F2YWhpIGlzIGEgZnVsbHkgTEdQTCBmcmFtZXdvcmsgZm9yIE11bHRpY2FzdCBETlMgU2VydmljZSBEaXNjb3ZlcnkuIEl0IFwKK2FsbG93cyBwcm9ncmFtcyB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBzZXJ2aWNlcyBhbmQgaG9zdHMgcnVubmluZyBvbiBhIGxvY2FsIG5ldHdvcmsgXAord2l0aCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGlzIHRvb2wgaW1wbGVtZW50cyBJUHY0TEwsICJEeW5hbWljIENvbmZpZ3VyYXRpb24gb2YgXAorSVB2NCBMaW5rLUxvY2FsIEFkZHJlc3NlcyIgKElFVEYgUkZDMzkyNyksIGEgcHJvdG9jb2wgZm9yIGF1dG9tYXRpYyBJUCBhZGRyZXNzIFwKK2NvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbGluay1sb2NhbCAxNjkuMjU0LjAuMC8xNiByYW5nZSB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGNlbnRyYWwgXAorc2VydmVyLicKK0FVVEhPUiA9ICJMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+IgorSE9NRVBBR0UgPSAiaHR0cDovL2F2YWhpLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2F2YWhpLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gIm5ldHdvcmsiCisKKyMgbWFqb3IgcGFydCBpcyB1bmRlciBMR1BMdjIuMSssIGJ1dCBzZXZlcmFsIC5kdGQsIC54c2wsIGluaXRzY3JpcHRzIGFuZAorIyBweXRob24gc2NyaXB0cyBhcmUgdW5kZXIgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKKworSU5DX1BSID0gInIxMSIKKworREVQRU5EUyA9ICJleHBhdCBsaWJjYXAgbGliZGFlbW9uIGRidXMgZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiaHR0cDovL2F2YWhpLm9yZy9kb3dubG9hZC9hdmFoaS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly8wMGF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly85OWF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly9pbml0c2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL291dC1vZi10cmVlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWF1dG9pcGQiCitVU0VSQUREX1BBUkFNX2F2YWhpLWRhZW1vbiA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9ydW4vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBhdmFoaSIKKworVVNFUkFERF9QQVJBTV9hdmFoaS1hdXRvaXBkID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9hdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYyBcIkF2YWhpIGF1dG9pcCBkYWVtb25cIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaS1hdXRvaXBkIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgZ2V0dGV4dCB1c2VyYWRkCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisgICAgICAgICAgICAgLS13aXRoLWF2YWhpLXByaXYtYWNjZXNzLWdyb3VwPWFkbSBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YWNrLXByb3RlY3RvciBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWdkYm0gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1tb25vIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtbW9ub2RvYyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0MyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0NCBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXB5dGhvbiBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jIFwKKyAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9TWVNWSU5JVH0gXAorICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1NZU1RFTUR9IFwKKyAgICAgICAgICAgICAke0FWQUhJX0dUS30gXAorICAgICAgICAgICAiCisKKyMgVGhlIGRpc3RybyBjaG9pY2UgZGV0ZXJtaW5lcyB3aGF0IGluaXQgc2NyaXB0cyBhcmUgaW5zdGFsbGVkCitFWFRSQV9PRUNPTkZfU1lTVklOSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnLS13aXRoLWRpc3Rybz1kZWJpYW4nLCctLXdpdGgtZGlzdHJvPW5vbmUnLGQpfSIKK0VYVFJBX09FQ09ORl9TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJywnLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyJyxkKX0iCisKK0FWQUhJX0dUSyA/PSAiLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtZ3RrMyIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKK0xERkxBR1NfYXBwZW5kX3VjbGludXgtdWNsaWJjID0gIiAtbGludGwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAnczpBTV9DSEVDS19QWU1PRDplY2hvICJubyBweW1vZCIgI0FNX0NIRUNLX1BZTU9EOmcnIC1pICR7U30vY29uZmlndXJlLmFjCit9CisKKworUEFDS0FHRVMgPSsgImF2YWhpLWRhZW1vbiBsaWJhdmFoaS1jb21tb24gbGliYXZhaGktY29yZSBsaWJhdmFoaS1jbGllbnQgYXZhaGktZG5zY29uZmQgbGliYXZhaGktZ2xpYiBsaWJhdmFoaS11aSBhdmFoaS1hdXRvaXBkIGF2YWhpLXV0aWxzIgorCisjIEFzIGF2YWhpIGRvZXNuJ3QgcHV0IGFueSBmaWxlcyBpbnRvIFBOLCBjbGVhciB0aGUgZmlsZXMgbGlzdCB0byBhdm9pZCBwcm9ibGVtcworIyBpZiBleHRyYSBsaWJyYXJpZXMgYXBwZWFyLgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfYXZhaGktYXV0b2lwZCA9ICIke3NiaW5kaXJ9L2F2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWF1dG9pcGQuYWN0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kaGNwLyovYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdWRoY3BjLmQvMDBhdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGhjcGMuZC85OWF2YWhpLWF1dG9pcGQiCitGSUxFU19saWJhdmFoaS1jb21tb24gPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWNvbW1vbi5zby4qIgorRklMRVNfbGliYXZhaGktY29yZSA9ICIke2xpYmRpcn0vbGliYXZhaGktY29yZS5zby4qIgorRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c2JpbmRpcn0vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2hvc3RzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludHJvc3BlY3Rpb24vKi5pbnRyb3NwZWN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2F2YWhpLXNlcnZpY2UuZHRkIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL3NlcnZpY2UtdHlwZXMgXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyIKK0ZJTEVTX2xpYmF2YWhpLWNsaWVudCA9ICIke2xpYmRpcn0vbGliYXZhaGktY2xpZW50LnNvLioiCitGSUxFU19saWJhdmFoaS11aSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkuc28uKiIKK0ZJTEVTX2F2YWhpLWRuc2NvbmZkID0gIiR7c2JpbmRpcn0vYXZhaGktZG5zY29uZmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1kbnNjb25mZC5hY3Rpb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZG5zY29uZmQiCitGSUxFU19saWJhdmFoaS1nbGliID0gIiR7bGliZGlyfS9saWJhdmFoaS1nbGliLnNvLioiCitGSUxFU19saWJhdmFoaS1nb2JqZWN0ID0gIiR7bGliZGlyfS9saWJhdmFoaS1nb2JqZWN0LnNvLioiCitGSUxFU19hdmFoaS11dGlscyA9ICIke2JpbmRpcn0vYXZhaGktKiIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gImF2YWhpLWRhZW1vbiAoPSAke0VYVEVORFBLR1Z9KSBsaWJhdmFoaS1jb3JlICg9ICR7RVhURU5EUEtHVn0pIGxpYmF2YWhpLWNsaWVudCAoPSAke0VYVEVORFBLR1Z9KSIKKworIyB1Y2xpYmMgaGFzIG5vIG5zcworUlJFQ09NTUVORFNfYXZhaGktZGFlbW9uX2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKKworUlJFQ09NTUVORFNfYXZhaGktZGV2ID0gImV4cGF0LWRldiBsaWJjYXAtZGV2IGxpYmRhZW1vbi1kZXYgZGJ1cy1kZXYgZ2xpYi0yLjAtZGV2IHVwZGF0ZS1yYy5kLWRldiIKK1JSRUNPTU1FTkRTX2F2YWhpLWRldl9hcHBlbmRfbGliYy1nbGliYyA9ICIgZ2V0dGV4dC1kZXYiCisKK1JSRUNPTU1FTkRTX2F2YWhpLWRldltub2RlcHJyZWNzXSA9ICIxIgorCitDT05GRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktZGFlbW9uLmNvbmYiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkIgorSU5JVFNDUklQVF9OQU1FX2F2YWhpLWRhZW1vbiA9ICJhdmFoaS1kYWVtb24iCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kYWVtb24gPSAiZGVmYXVsdHMgMjEgMTkiCitJTklUU0NSSVBUX05BTUVfYXZhaGktZG5zY29uZmQgPSAiYXZhaGktZG5zY29uZmQiCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kbnNjb25mZCA9ICJkZWZhdWx0cyAyMiAxOSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKwkjIC92YXIvcnVuIG9mIGN1cnJlbnQgdmVyc2lvbiBpcyBlbXB0eSwgc28ganVzdCByZW1vdmUgaXQuCisJIyBpZiAvdmFyL3J1biBiZWNvbWUgbm9uLWVtcHR5IGluIHRoZSBmdXR1cmUsIG5lZWQgdG8gaW5zdGFsbCBpdCB2aWEgdm9sYXRpbGUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtkYXRhZGlyfS9kYnVzLTEKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9hdmFoaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCWluc3RhbGwgJHtXT1JLRElSfS8wMGF2YWhpLWF1dG9pcGQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKKwlpbnN0YWxsICR7V09SS0RJUn0vOTlhdmFoaS1hdXRvaXBkICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCit9CisKKyMgQXQgdGhlIHRpbWUgdGhlIHBvc3RpbnN0IHJ1bnMsIGRidXMgbWlnaHQgbm90IGJlIHNldHVwIHNvIG9ubHkgcmVzdGFydCBpZiBydW5uaW5nIAorIyBEb24ndCBleGl0IGVhcmx5LCBiZWNhdXNlIHVwZGF0ZS1yYy5kIG5lZWRzIHRvIHJ1biBzdWJzZXF1ZW50bHkuCisKK3BrZ19wb3N0aW5zdF9hdmFoaS1kYWVtb24gKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorZmkKK30KKworcGtnX3Bvc3RybV9hdmFoaS1kYWVtb24gKCkgeworCWRlbHVzZXIgYXZhaGkgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpIHx8IHRydWUKK30KKworcGtnX3Bvc3RybV9hdmFoaS1hdXRvaXBkICgpIHsKKwlkZWx1c2VyIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDc5NmEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBzeXN0ZW1kCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tZGFlbW9uICR7UE59LWRuc2NvbmZkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWRhZW1vbiA9ICJhdmFoaS1kYWVtb24uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1kbnNjb25mZCA9ICJhdmFoaS1kbnNjb25mZC5zZXJ2aWNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb21tb24vYWRkcmVzcy5oO2VuZGxpbmU9MjU7bWQ1PWIxZDFkMmNkYTFjMDdlYjg0OGVhN2Q2MjE1NzEyZDlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvcmUvZG5zLmg7ZW5kbGluZT0yMzttZDU9NmZlODI1OTBiODFhYTBkZGVhNTA5NWI1NDhlMmZkY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktZGFlbW9uL21haW4uYztlbmRsaW5lPTIxO21kNT05ZWU3NzM2OGM1NDA3YWY3N2NhYWVmMWIwNzI4NTk2OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jbGllbnQvY2xpZW50Lmg7ZW5kbGluZT0yMzttZDU9ZjRhYzc0MWEyNWM0ZjQzNDAzOWJhM2UxOGM4Njc0Y2YiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmYyMjc0NWI4ZjczNjhhZDVhMGEzZmRkYWMzNDNmMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM3MjcxOWIyNGUyZGQ3NWRlNmY1OWJiMTMxNWU2MDBkYjRmZDA5MjgwNWJkMTIwMWVkMGNiNjUxYTJkYWI0OCIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGliYXZhaGktZ29iamVjdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5MGRmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZjc3NGFjMjVmNDM2YTc4MmNjY2NjNGRiZTY4Mzc4YTY4NDU5Njc5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCA3IE5vdiAyMDEzIDE0OjM2OjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2YWhpOiBmaXggYXZhaGkgc3RhdHVzIGNvbW1hbmQgZXJyb3IgcHJvbXB0CisKK3NlcnZpY2UgLS1zdGF0dXMtYWxsIGNvbW1hbmQgd2lsbCBkaXNwbGF5IHdyb25nIHN0YXR1cyBmb3IgYXZhaGktZGFlbW9uLgorVGhpcyBjb21taXQgZml4IHRoaXMgZXJyb3IgcHJvbXB0IGFuZCBtYWtlIHNlcnZpY2UgZGlzcGxheSByaWdodCBzdGF0dXMKK2ZvciBhdmFoaS1kYWVtb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiB8ICAgMTQgKysrKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggNDc5M2I0Ni4uNDllYzM1OCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMTUzLDcgKzE1MywxNSBAQCBkX3JlbG9hZCgpIHsKKyAjICAgICAgIEZ1bmN0aW9uIHRoYXQgY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgZGFlbW9uL3NlcnZpY2UuCisgIworIGRfc3RhdHVzKCkgeworLSAgICAkREFFTU9OIC1jICYmIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciIHx8IGVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nIgorKyAgICAkREFFTU9OIC1jCisrICAgIHN0YXR1cz0kPworKyAgICBpZiBbICRzdGF0dXMgPSAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciCisrICAgICAgICByZXR1cm4gMAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKKysgICAgICAgIHJldHVybiAzCisrICAgIGZpCisgfQorIAorIGNhc2UgIiQxIiBpbgorQEAgLTE4Miw5ICsxOTAsOSBAQCBjYXNlICIkMSIgaW4KKyAgICAgICAgIGRfc3RhdHVzCisgCTs7CisgICAgICopCistICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfSIgPiYyCisrICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfHN0YXR1c30iID4mMgorICAgICAgICAgZXhpdCAxCisgICAgICAgICA7OworIGVzYWMKKyAKKy1leGl0IDAKKytleGl0ICQ/CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwYXZhaGktYXV0b2lwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFiODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1sgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdWRoY3BjIiAmJiBleGl0IDEKKworY2FzZSAiJDEiIGluCisKKwlkZWNvbmZpZ3xyZW5ld3xib3VuZCkKKwkJL3Vzci9zYmluL2F2YWhpLWF1dG9pcGQgLWsgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy85OWF2YWhpLWF1dG9pcGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0Y2RhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK2Nhc2UgIiQxIiBpbgorCisJbGVhc2VmYWlsKQorCQkvdXNyL3NiaW4vYXZhaGktYXV0b2lwZCAtd0QgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZjIwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXhlcyB0aGlzIGluc3RhbGwgaXNzdWUKKyN8IC9iaW4vc2g6IGxpbmUgMDogY2Q6IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2F2YWhpLTAuNi4zMS1yMy4wL2ltYWdlLy91c3IvYmluOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorQEAgLTU0LDYgKzU0LDcgQEAgYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MgPSAkKEFNX0NGTEFHUworIGF2YWhpX3NldF9ob3N0X25hbWVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKyAKKyBpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIAljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgCQlybSAtZiBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBhdmFoaS1yZXNvbHZlLWFkZHJlc3MgYXZhaGktYnJvd3NlLWRvbWFpbnMgYXZhaGktcHVibGlzaC1hZGRyZXNzIGF2YWhpLXB1Ymxpc2gtc2VydmljZSAmJiBcCisgCQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXAorSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCisrKysgYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCitAQCAtOTA2LDYgKzkwNiw3IEBAIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TCisgCisgCisgQEhBVkVfREJVU19UUlVFQGluc3RhbGwtZXhlYy1sb2NhbDoKKytASEFWRV9EQlVTX1RSVUVACSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJY2QgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKKyBASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjNGMyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9hbWtlIDEuMTIueCBoYXMgZGVwcmljYXRlZCB1c2Ugb2YgbWtkaXJfcCAsIGFuZCByZWNvbW1lbmRzIHVzZSBvZiBNS0RJUl9QCitpbnN0ZWFkLiBGaXhlZCB0aGUgYXV0b21ha2UgZmlsZXMgYWNjb3JkaW5nbHkgdG8gYXZvaWQgd2FybmluZy1lcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8wOQorCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQorQEAgLTE2OSw3ICsxNjksNyBAQCB4bWxsaW50OgorIAlkb25lCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorLQl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorKwl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorIAorIHVwZGF0ZS1zeXN0ZW1kOgorIAljdXJsIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3BsYWluL3NyYy9zZC1kYWVtb24uYyA+IHNkLWRhZW1vbi5jCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGRoY2xpZW50ZW50ZXJkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGgKKyBkaGNsaWVudGV4aXRkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcy5kCisgCisgaW5zdGFsbC1leGVjLWhvb2s6IGRoY2xpZW50LWV4aXQtaG9vayBkaGNsaWVudC1lbnRlci1ob29rCistCSQobWtkaXJfcCkgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKQorKwkkKE1LRElSX1ApICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1lbnRlci1ob29rICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpL2F2YWhpLWF1dG9pcGQKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1leGl0LWhvb2sgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2luaXRzY3JpcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2luaXRzY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzODg5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggMzBhMmMyZi4uYjU4NDhhOCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMSwyICsxLDE0IEBACisgIyEvYmluL3NoCistCisrIyMjIEJFR0lOIElOSVQgSU5GTworKyMgUHJvdmlkZXM6ICAgICAgICAgIGF2YWhpCisrIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyBkYnVzCisrIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyBkYnVzCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBEYWVtb24KKysjIERlc2NyaXB0aW9uOiAgICAgICBaZXJvY29uZiBkYWVtb24gZm9yIGNvbmZpZ3VyaW5nIHlvdXIgbmV0d29yayAKKysjICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5CisrIyMjIEVORCBJTklUIElORk8KKysjCitkaWZmIC0tZ2l0IGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4gYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgoraW5kZXggYWMzNDgwNC4uZjk1YzM0MCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCisrKysgYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgorQEAgLTEsMSArMSwxNCBAQAorICMhL2Jpbi9zaAorKyMjIyBCRUdJTiBJTklUIElORk8KKysjIFByb3ZpZGVzOiAgICAgICAgICBhdmFoaS1kbnNjb25mZAorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgYXZhaGkKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIGF2YWhpCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBETlMgY29uZmlndXJhdGlvbgorKyMgRGVzY3JpcHRpb246ICAgICAgIFplcm9jb25mIGRhZW1vbiBmb3IgY29uZmlndXJpbmcgeW91ciBuZXR3b3JrIAorKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkKKysjIyMgRU5EIElOSVQgSU5GTworKyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvb3V0LW9mLXRyZWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL291dC1vZi10cmVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDc2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL291dC1vZi10cmVlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBhNjJkYzk1ZDc1NjkxZWE0YWVmYTg2ZDhiYmU1NGM2MmFmZDc4ZmY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTI6Mjc6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQtc3lzOiBmaXggb3V0LW9mLXRyZWUgYnVpbGRzIHdpdGhvdXQgeG1sdG9tYW4KKworSWYgbWFucGFnZXMgYXJlIGVuYWJsZWQgYnV0IHhtbHRvbWFuIGlzbid0IHByZXNlbnQsIG91dC1vZi10cmVlIGJ1aWxkcyBmYWlsCitiZWNhdXNlIGl0IGNoZWNrcyBpbnNpZGUgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIHByZS1nZW5lcmF0ZWQgbWFucGFnZXMuCisKK0ZpeCB0aGlzIGJ5IHVzaW5nICRzcmNkaXIgd2hlbiBsb29raW5nIGZvciBmaWxlcyBpbnNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlkZWJjZTIuLjA0N2M3YWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwMjEsNyArMTAyMSw3IEBAIGlmIHRlc3QgeCRtYW5wYWdlcyA9IHh5ZXMgOyB0aGVuCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRoYXZlX3htbHRvbWFuID0geG5vIC1vIHgkeG1sdG9tYW4gPSB4bm87IHRoZW4KKy0gICAgICAgIGlmICEgdGVzdCAtZSBtYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisrICAgICAgICBpZiAhIHRlc3QgLWUgJHNyY2Rpci9tYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFsqKiogeG1sdG9tYW4gd2FzIG5vdCBmb3VuZCBvciB3YXMgZGlzYWJsZWQsIGl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYW5wYWdlcyBhcyB0aGV5IGhhdmUgbm90IGJlZW4gcHJlLWJ1aWx0LCBpbnN0YWxsIHhtbHRvbWFuLCBwYXNzIC0tZGlzYWJsZS1tYW5wYWdlcyBvciBkb250IHBhc3MgLS1kaXNhYmxlLXhtbHRvbWFuXSkKKyAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgIGZpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9yZXVzZXBvcnQtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4MWMyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0ZpeCBhdmFoaS1kYWVtb24gd2hlbiBydW5uaW5nIG9uIGtlcm5lbCA8IDMuOSAocGF0Y2ggdGFrZW4gZnJvbSBVYnVudHUpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKHVubWFpbnRhaW5lZCB1cHN0cmVhbSkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Rlc2NyaXB0aW9uOiBTT19SRVVTRVBPUlQgbWF5IG5vdCBleGlzdCBpbiBydW5uaW5nIGtlcm5lbAorIFdoZW4gdXNlcnNwYWNlIGRlZmluZXMgU09fUkVVU0VQT1JUIHdlIHdpbGwgYXR0ZW1wdCB0byBlbmFibGUgc29ja2V0CisgcG9ydCBudW1iZXIgcmV1c2UuICBIb3dldmVyIGlmIHRoZSBydW5uaW5nIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0CisgdGhpcyBjYWxsIGl0IHdpbGwgZmFpbCBwcmV2ZW50aW5nIGRhZW1vbiBzdGFydHVwLiAgSWYgdGhpcyBjYWxsIGlzCisgcHJlc2VudCBidXQgZmFpbHMgRU5PUFJPVE9PUFQgdGhlbiB3ZSBrbm93IHRoYXQgYWN0dWFsbHkgdGhlIGtlcm5lbAorIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHdlIHNob3VsZCBjb250aW51ZSBhcyBpZiB3ZSBkaWQgbm90IGhhdmUgdGhlCisgY2FsbCBhdCBhbGwuICAoTFA6ICMxMjI4MjA0KQorIC4KKyBUaGlzIHBhdGNoIGNvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGViaWFuIHBhY2thZ2UgYWZ0ZXIgamVzc2llIHJlbGVhc2UuCitBdXRob3I6IEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KKworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktY29yZS9zb2NrZXQuYwkyMDEzLTA5LTIwIDE2OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCTIwMTMtMDktMjAgMTY6Mzg6MjMuNzgxODYzNjQ0ICswMTAwCitAQCAtMTc3LDcgKzE3Nyw4IEBACisgICAgIHllcyA9IDE7CisgICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJTT19SRVVTRVBPUlQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CistICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICBpZiAoZXJybm8gIT0gRU5PUFJPVE9PUFQpCisrICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNTI1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaApAQCAtMCwwICsxLDQyIEBACit4bWwyLWNvbmZpZyBpcyBkaXNhYmxlZCwgc28gY2hhbmdlIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBwa2djb25maWcgdG8gZmluZAorbGlieG1sMi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0KKyBjb25maWd1cmUuaW4gfCAxOCArKystLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZDU2NmUxYy4uYzllZjNhNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMjEwMiwyMSArMjEwMiw5IEBAIGNhc2UgIiR1c2VfbGlieG1sMiIgaW4KKyAJCURTVF9MSUJYTUwyX0lOQz0iIgorIAkJOzsKKyAJYXV0b3x5ZXMpCistCQljYXNlIFhgKHhtbDItY29uZmlnIC0tdmVyc2lvbikgMj4vZGV2L251bGxgIGluCistCQlYMi5bWzY3ODldXS4qKQorLQkJCWxpYnhtbDJfbGlicz1geG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWB4bWwyLWNvbmZpZyAtLWNmbGFnc2AKKy0JCQk7OworLQkJKikKKy0JCQlsaWJ4bWwyX2xpYnM9CistCQkJbGlieG1sMl9jZmxhZ3M9CistCQkJOzsKKy0JCWVzYWMKKy0JCTs7CistCSopCistCQlpZiB0ZXN0IC1mICIkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIiA7IHRoZW4KKy0JCQlsaWJ4bWwyX2xpYnM9YCR1c2VfbGlieG1sMi9iaW4veG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWAkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIC0tY2ZsYWdzYAorKwkJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyBsaWJ4bWwtMi4wIDsgdGhlbgorKwkJCWxpYnhtbDJfbGlicz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tbGlic2AKKysJCQlsaWJ4bWwyX2NmbGFncz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tY2ZsYWdzYAorIAkJZmkKKyAJCTs7CisgZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxNTA5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZ2VuLmM6IGV4dGVuZCBESVJOQU1FU0laRSBmcm9tIDI1NiB0byA1MTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2Rucy9nZW4uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kbnMvZ2VuLmMgYi9saWIvZG5zL2dlbi5jCitpbmRleCA3YTdkYWZiLi41MWEwNDM1IDEwMDY0NAorLS0tIGEvbGliL2Rucy9nZW4uYworKysrIGIvbGliL2Rucy9nZW4uYworQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXSA9CisgI2RlZmluZSBUWVBFQ0xBU1NCVUYgKFRZUEVDTEFTU0xFTiArIDEpCisgI2RlZmluZSBUWVBFQ0xBU1NGTVQgIiUiIFNUUihUWVBFQ0xBU1NMRU4pICJbLTAtOWEtel1fJWQiCisgI2RlZmluZSBBVFRSSUJVVEVTSVpFIDI1NgorLSNkZWZpbmUgRElSTkFNRVNJWkUgMjU2CisrI2RlZmluZSBESVJOQU1FU0laRSA1MTIKKyAKKyBzdGF0aWMgc3RydWN0IGNjIHsKKyAJc3RydWN0IGNjICpuZXh0OworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ZDVkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDliNDA2MTlmZjZmZGRmZWYyNzU4YmE3OTc3ODlmODQ4N2Y0MTJkZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgRmViIDIwMTUgMDA6NTA6MDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmdlbjogZG9uJ3QgYnVpbGQgdW5peC5vIHR3aWNlCisKK0ZpeGVkOgordW5peC9vcy5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoaXMgaXMgYmVjYXVzZSBvcy5vIHdhcyBidWlsdCB0d2ljZToKKyogVGhlIGltcGxpY2l0eSBydWxlIChkZXBlbmRzIG9uIHVuaXgvb3MubykKKyogVGhlICJtYWtlIGFsbCIgaW4gdW5peCBzdWJkaXIgKGRlcGVuZHMgb24gdW5peC9vcy5vKQorCitEZXBlbmQgb24gc3ViZGlycyB3aGljaCBpcyB1bml4IG9ubHkgcmF0aGVyIHRoYW4gdW5peC9vcy5vIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgoraW5kZXggOGIzZTVhYS4uNDg2OGEyNCAxMDA2NDQKKy0tLSBhL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluCisrKysgYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgorQEAgLTc0LDExICs3NCwxMSBAQCBybmRjLWNvbmZnZW4uQE9AOiBybmRjLWNvbmZnZW4uYworIGRkbnMtY29uZmdlbi5AT0A6IGRkbnMtY29uZmdlbi5jCisgCSR7TElCVE9PTF9NT0RFX0NPTVBJTEV9ICR7Q0N9ICR7QUxMX0NGTEFHU30gLWMgJHtzcmNkaXJ9L2RkbnMtY29uZmdlbi5jCisgCistcm5kYy1jb25mZ2VuQEVYRUVYVEA6IHJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfSAKKytybmRjLWNvbmZnZW5ARVhFRVhUQDogcm5kYy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7Q09ORkRFUExJQlN9ICQoU1VCRElSUykKKyAJZXhwb3J0IEJBU0VPQkpTPSJybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30iOyBcCisgCSR7RklOQUxCVUlMRENNRH0KKyAKKy1kZG5zLWNvbmZnZW5ARVhFRVhUQDogZGRucy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9ICR7Q09ORkRFUExJQlN9IAorK2RkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQorIAlleHBvcnQgQkFTRU9CSlM9ImRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKKyAJJHtGSU5BTEJVSUxEQ01EfQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGYzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gOTQ3M2QyOTg0MzU3OTgwMmU5NmIwMjkzYTNlOTUzZmVkOTNkZTgyYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjIyOjAwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGJpbmQ6IGVuc3VyZSBzZWFyY2hpbmcgZm9yIGpzb24gaGVhZGVycyBzZWFyY2hlcyBzeXNyb290CisKK0JpbmQgY2FuIGZhaWwgY29uZmlndXJlIGJ5IGRldGVjdGluZyBoZWFkZXJzIHcvbyBsaWJzWzFdLCBvcgoraXQgY2FuIGZhaWwgdGhlIGhvc3QgY29udGFtaW5hdGlvbiBjaGVjayBhcyBwZXIgYmVsb3c6CisKK0VSUk9SOiBUaGlzIGF1dG9jb25mIGxvZyBpbmRpY2F0ZXMgZXJyb3JzLCBpdCBsb29rZWQgYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdoaWxlIGRldGVybWluaW5nIHN5c3RlbSBjYXBhYmlsaXRpZXMuCitSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICdidWlsZC90bXAvd29yay9jb3JlMi02NC1wb2t5LWxpbnV4L2JpbmQvOS4xMC4yLXIxL2J1aWxkJworRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogZG9fcWFfY29uZmlndXJlCitFUlJPUjogTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogYnVpbGQvdG1wL3dvcmsvY29yZTItNjQtcG9reS1saW51eC9iaW5kLzkuMTAuMi1yMS90ZW1wL2xvZy5kb19jb25maWd1cmUuNTI0MgorRVJST1I6IFRhc2sgNSAobWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKK05PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCA3NzMgdGFza3Mgb2Ygd2hpY2ggNzY4IGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCAxIGZhaWxlZC4KK05vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICg3NzMgb2YgNzgxKQorCitTdW1tYXJ5OiAxIHRhc2sgZmFpbGVkOgorICAvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUKKworT25lIHdheSB0byBmaXggaXQgd291bGQgYmUgdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUganNvbiBpbiBiaW5kCitjb25maWd1cmVbMl0gYnV0IGhlcmUgd2UgZml4IGl0IGJ5IHVzaW5nIHRoZSBwYXRoIHRvIHdoZXJlIHdlIHdvdWxkCitwdXQgdGhlIGhlYWRlciBpZiB3ZSBoYWQganNvbiBpbiB0aGUgc3lzcm9vdCwgaW4gY2FzZSBzb21lb25lIHdhbnRzCit0byBtYWtlIHVzZSBvZiB0aGUgY29tYmluYXRpb24gc29tZSBkYXkuCisKK1sxXSBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3RpY2tldC80NTMwNQorWzJdIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvY2hhbmdlc2V0LzEyNjQwNgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGM5ZWYzYTYwMTM0My4uMTdhMWY2MTNlOWFjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yMTM5LDcgKzIxMzksNyBAQCBjYXNlICIkdXNlX2xpYmpzb24iIGluCisgCQlsaWJqc29uX2xpYnM9IiIKKyAJCTs7CisgCWF1dG98eWVzKQorLQkJZm9yIGQgaW4gL3VzciAvdXNyL2xvY2FsIC9vcHQvbG9jYWwKKysJCWZvciBkIGluICIke1NUQUdJTkdfSU5DRElSfSIKKyAJCWRvCisgCQkJaWYgdGVzdCAtZiAiJHtkfS9pbmNsdWRlL2pzb24vanNvbi5oIgorIAkJCXRoZW4KKy0tIAorMi40LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njg2NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkKQEAgLTAsMCArMSwyIEBACisjIHN0YXJ0dXAgb3B0aW9ucyBmb3IgdGhlIHNlcnZlcgorT1BUSU9OUz0iLXUgYmluZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2NvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDM0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9jb25mLnBhdGNoCkBAIC0wLDAgKzEsMzMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3RoZSBwYXRjaCBpcyBpbXBvcnRlZCBmcm9tIG9wZW5lbWJlZGRlZCBwcm9qZWN0CisKKzExLzMwLzIwMTAgLSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjAgYmluZC05LjMuMS9jb25mL2RiLjAKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4wCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjAJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBicm9hZGNhc3Qgem9uZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4xMjcgYmluZC05LjMuMS9jb25mL2RiLjEyNworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjEyNwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi4xMjcJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTMgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBsb2NhbCBsb29wYmFjayBpbnRlcmZhY2UKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCisrMS4wLjAJSU4JUFRSCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eSBiaW5kLTkuMy4xL2NvbmYvZGIuZW1wdHkKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi5lbXB0eQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorKzsgQklORCByZXZlcnNlIGRhdGEgZmlsZSBmb3IgZW1wdHkgcmZjMTkxOCB6b25lCisrOworKzsgRE8gTk9UIEVESVQgVEhJUyBGSUxFIC0gaXQgaXMgdXNlZCBmb3IgbXVsdGlwbGUgem9uZXMuCisrOyBJbnN0ZWFkLCBjb3B5IGl0LCBlZGl0IG5hbWVkLmNvbmYsIGFuZCB1c2UgdGhhdCBjb3B5LgorKzsKKyskVFRMCTg2NDAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJICA4NjQwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjI1NSBiaW5kLTkuMy4xL2NvbmYvZGIuMjU1CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMjU1CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjI1NQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKzsKKys7IEJJTkQgcmVzZXJ2ZSBkYXRhIGZpbGUgZm9yIGJyb2FkY2FzdCB6b25lCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsIGJpbmQtOS4zLjEvY29uZi9kYi5sb2NhbAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLmxvY2FsCTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzIEBACisrOworKzsgQklORCBkYXRhIGZpbGUgZm9yIGxvY2FsIGxvb3BiYWNrIGludGVyZmFjZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KKytACUlOCUEJMTI3LjAuMC4xCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIucm9vdCBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLnJvb3QJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0NSBAQAorKworKzsgPDw+PiBEaUcgOS4yLjMgPDw+PiBucyAuIEBhLnJvb3Qtc2VydmVycy5uZXQuCisrOzsgZ2xvYmFsIG9wdGlvbnM6ICBwcmludGNtZAorKzs7IEdvdCBhbnN3ZXI6CisrOzsgLT4+SEVBREVSPDwtIG9wY29kZTogUVVFUlksIHN0YXR1czogTk9FUlJPUiwgaWQ6IDE4OTQ0CisrOzsgZmxhZ3M6IHFyIGFhIHJkOyBRVUVSWTogMSwgQU5TV0VSOiAxMywgQVVUSE9SSVRZOiAwLCBBRERJVElPTkFMOiAxMworKworKzs7IFFVRVNUSU9OIFNFQ1RJT046CisrOy4JCQkJSU4JTlMKKysKKys7OyBBTlNXRVIgU0VDVElPTjoKKysuCQkJNTE4NDAwCUlOCU5TCUEuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUIuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUMuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUQuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUUuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUYuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUcuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUguUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUkuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUouUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUsuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUwuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCU0uUk9PVC1TRVJWRVJTLk5FVC4KKysKKys7OyBBRERJVElPTkFMIFNFQ1RJT046CisrQS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjQxLjAuNAorK0IuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMjguNzkuMjAxCisrQy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjMzLjQuMTIKKytELlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguOC4xMC45MAorK0UuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMDMuMjMwLjEwCisrRi5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjUuNS4yNDEKKytHLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMTEyLjM2LjQKKytILlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguNjMuMi41MworK0kuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4zNi4xNDguMTcKKytKLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuNTguMTI4LjMwCisrSy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkzLjAuMTQuMTI5CisrTC5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjMyLjY0LjEyCisrTS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMjAyLjEyLjI3LjMzCisrCisrOzsgUXVlcnkgdGltZTogODEgbXNlYworKzs7IFNFUlZFUjogMTk4LjQxLjAuNCM1MyhhLnJvb3Qtc2VydmVycy5uZXQuKQorKzs7IFdIRU46IFN1biBGZWIgIDEgMTE6Mjc6MTQgMjAwNAorKzs7IE1TRyBTSVpFICByY3ZkOiA0MzYKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCTIwMDUtMDctMTAgMjI6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQ5IEBACisrLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBCSU5EIEROUyBzZXJ2ZXIgbmFtZWQuCisrLy8KKysvLyBJZiB5b3UgYXJlIGp1c3QgYWRkaW5nIHpvbmVzLCBwbGVhc2UgZG8gdGhhdCBpbiAvZXRjL2JpbmQvbmFtZWQuY29uZi5sb2NhbAorKworK2luY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLm9wdGlvbnMiOworKworKy8vIHByaW1lIHRoZSBzZXJ2ZXIgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlIHJvb3Qgc2VydmVycworK3pvbmUgIi4iIHsKKysJdHlwZSBoaW50OworKwlmaWxlICIvZXRjL2JpbmQvZGIucm9vdCI7CisrfTsKKysKKysvLyBiZSBhdXRob3JpdGF0aXZlIGZvciB0aGUgbG9jYWxob3N0IGZvcndhcmQgYW5kIHJldmVyc2Ugem9uZXMsIGFuZCBmb3IKKysvLyBicm9hZGNhc3Qgem9uZXMgYXMgcGVyIFJGQyAxOTEyCisrCisrem9uZSAibG9jYWxob3N0IiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIubG9jYWwiOworK307CisrCisrem9uZSAiMTI3LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjEyNyI7CisrfTsKKysKKyt6b25lICIwLmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjAiOworK307CisrCisrem9uZSAiMjU1LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjI1NSI7CisrfTsKKysKKysvLyB6b25lICJjb20iIHsgdHlwZSBkZWxlZ2F0aW9uLW9ubHk7IH07CisrLy8gem9uZSAibmV0IiB7IHR5cGUgZGVsZWdhdGlvbi1vbmx5OyB9OworKworKy8vIEZyb20gdGhlIHJlbGVhc2Ugbm90ZXM6CisrLy8gIEJlY2F1c2UgbWFueSBvZiBvdXIgdXNlcnMgYXJlIHVuY29tZm9ydGFibGUgcmVjZWl2aW5nIHVuZGVsZWdhdGVkIGFuc3dlcnMKKysvLyAgZnJvbSByb290IG9yIHRvcCBsZXZlbCBkb21haW5zLCBvdGhlciB0aGFuIGEgZmV3IGZvciB3aG9tIHRoYXQgYmVoYXZpb3VyCisrLy8gIGhhcyBiZWVuIHRydXN0ZWQgYW5kIGV4cGVjdGVkIGZvciBxdWl0ZSBzb21lIGxlbmd0aCBvZiB0aW1lLCB3ZSBoYXZlIG5vdworKy8vICBpbnRyb2R1Y2VkIHRoZSAicm9vdC1kZWxlZ2F0aW9ucy1vbmx5IiBmZWF0dXJlIHdoaWNoIGFwcGxpZXMgZGVsZWdhdGlvbi1vbmx5CisrLy8gIGxvZ2ljIHRvIGFsbCB0b3AgbGV2ZWwgZG9tYWlucywgYW5kIHRvIHRoZSByb290IGRvbWFpbi4gIEFuIGV4Y2VwdGlvbiBsaXN0CisrLy8gIHNob3VsZCBiZSBzcGVjaWZpZWQsIGluY2x1ZGluZyAiTVVTRVVNIiBhbmQgIkRFIiwgYW5kIGFueSBvdGhlciB0b3AgbGV2ZWwKKysvLyAgZG9tYWlucyBmcm9tIHdob20gdW5kZWxlZ2F0ZWQgcmVzcG9uc2VzIGFyZSBleHBlY3RlZCBhbmQgdHJ1c3RlZC4KKysvLyByb290LWRlbGVnYXRpb24tb25seSBleGNsdWRlIHsgIkRFIjsgIk1VU0VVTSI7IH07CisrCisraW5jbHVkZSAiL2V0Yy9iaW5kL25hbWVkLmNvbmYubG9jYWwiOworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYubG9jYWwgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsOCBAQAorKy8vCisrLy8gRG8gYW55IGxvY2FsIGNvbmZpZ3VyYXRpb24gaGVyZQorKy8vCisrCisrLy8gQ29uc2lkZXIgYWRkaW5nIHRoZSAxOTE4IHpvbmVzIGhlcmUsIGlmIHRoZXkgYXJlIG5vdCB1c2VkIGluIHlvdXIKKysvLyBvcmdhbml6YXRpb24KKysvL2luY2x1ZGUgIi9ldGMvYmluZC96b25lcy5yZmMxOTE4IjsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYub3B0aW9ucworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYub3B0aW9ucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjQgQEAKKytvcHRpb25zIHsKKysJZGlyZWN0b3J5ICIvdmFyL2NhY2hlL2JpbmQiOworKworKwkvLyBJZiB0aGVyZSBpcyBhIGZpcmV3YWxsIGJldHdlZW4geW91IGFuZCBuYW1lc2VydmVycyB5b3Ugd2FudAorKwkvLyB0byB0YWxrIHRvLCB5b3UgbWlnaHQgbmVlZCB0byB1bmNvbW1lbnQgdGhlIHF1ZXJ5LXNvdXJjZQorKwkvLyBkaXJlY3RpdmUgYmVsb3cuICBQcmV2aW91cyB2ZXJzaW9ucyBvZiBCSU5EIGFsd2F5cyBhc2tlZAorKwkvLyBxdWVzdGlvbnMgdXNpbmcgcG9ydCA1MywgYnV0IEJJTkQgOC4xIGFuZCBsYXRlciB1c2UgYW4gdW5wcml2aWxlZ2VkCisrCS8vIHBvcnQgYnkgZGVmYXVsdC4KKysKKysJLy8gcXVlcnktc291cmNlIGFkZHJlc3MgKiBwb3J0IDUzOworKworKwkvLyBJZiB5b3VyIElTUCBwcm92aWRlZCBvbmUgb3IgbW9yZSBJUCBhZGRyZXNzZXMgZm9yIHN0YWJsZSAKKysJLy8gbmFtZXNlcnZlcnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGVtIGFzIGZvcndhcmRlcnMuICAKKysJLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgYmxvY2ssIGFuZCBpbnNlcnQgdGhlIGFkZHJlc3NlcyByZXBsYWNpbmcgCisrCS8vIHRoZSBhbGwtMCdzIHBsYWNlaG9sZGVyLgorKworKwkvLyBmb3J3YXJkZXJzIHsKKysJLy8gCTAuMC4wLjA7CisrCS8vIH07CisrCisrCWF1dGgtbnhkb21haW4gbm87ICAgICMgY29uZm9ybSB0byBSRkMxMDM1CisrCisrfTsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi96b25lcy5yZmMxOTE4IGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvem9uZXMucmZjMTkxOAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CTIwMDUtMDctMTAgMjI6MTQ6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIwIEBACisrem9uZSAiMTAuaW4tYWRkci5hcnBhIiAgICAgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07CisrIAorK3pvbmUgIjE2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIyLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIzLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI0LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI1LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworKworK3pvbmUgIjE2OC4xOTIuaW4tYWRkci5hcnBhIiB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9pbml0LmQgYmluZC05LjMuMS9pbml0LmQKKy0tLSBiaW5kLTkuMy4xLm9yaWcvaW5pdC5kCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9pbml0LmQJMjAwNS0wNy0xMCAyMzowOTo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzAgQEAKKysjIS9iaW4vc2gKKysKKytQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisrCisrIyBmb3IgYSBjaHJvb3RlZCBzZXJ2ZXI6ICItdSBiaW5kIC10IC92YXIvbGliL25hbWVkIgorKyMgRG9uJ3QgbW9kaWZ5IHRoaXMgbGluZSwgY2hhbmdlIG9yIGNyZWF0ZSAvZXRjL2RlZmF1bHQvYmluZDkuCisrT1BUSU9OUz0iIgorKworK3Rlc3QgLWYgL2V0Yy9kZWZhdWx0L2JpbmQ5ICYmIC4gL2V0Yy9kZWZhdWx0L2JpbmQ5CisrCisrdGVzdCAteCAvdXNyL3NiaW4vcm5kYyB8fCBleGl0IDAKKysKKytjYXNlICIkMSIgaW4KKysgICAgc3RhcnQpCisrCWVjaG8gLW4gIlN0YXJ0aW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKworKwltb2Rwcm9iZSBjYXBhYmlsaXR5ID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCisrCWlmIFsgISAtZiAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorKwkgICAgL3Vzci9zYmluL3JuZGMtY29uZmdlbiAtYSAtYiA1MTIgLXIgL2Rldi91cmFuZG9tCisrCSAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorKwlmaQorKwlpZiBbIC1mIC92YXIvcnVuL25hbWVkL25hbWVkLnBpZCBdOyB0aGVuCisrCSAgICBwcyBgY2F0IC92YXIvcnVuL25hbWVkL25hbWVkLnBpZGAgPiAvZGV2L251bGwgJiYgZXhpdCAxCisrCWZpCisrCisrCSMgZGlycyB1bmRlciAvdmFyL3J1biBjYW4gZ28gYXdheSBvbiByZWJvb3RzLgorKwlta2RpciAtcCAvdmFyL3J1bi9uYW1lZAorKwlta2RpciAtcCAvdmFyL2NhY2hlL2JpbmQKKysJY2htb2QgNzc1IC92YXIvcnVuL25hbWVkCisrCWNob3duIHJvb3Q6YmluZCAvdmFyL3J1bi9uYW1lZCA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorKworKwlpZiBbICEgLXggL3Vzci9zYmluL25hbWVkIF07IHRoZW4KKysJICAgIGVjaG8gIm5hbWVkIGJpbmFyeSBtaXNzaW5nIC0gbm90IHN0YXJ0aW5nIgorKwkgICAgZXhpdCAxCisrCWZpCisrCWlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL25hbWVkIFwKKysJCS0tcGlkZmlsZSAvdmFyL3J1bi9uYW1lZC9uYW1lZC5waWQgLS0gJE9QVElPTlM7IHRoZW4KKysJICAgIGlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdIDsgdGhlbgorKwkJZWNobyAibmFtZXNlcnZlciAxMjcuMC4wLjEiIHwgL3NiaW4vcmVzb2x2Y29uZiAtYSBsbworKwkgICAgZmkKKysJZmkKKysJZWNobyAiLiIJCisrICAgIDs7CisrCisrICAgIHN0b3ApCisrCWVjaG8gLW4gIlN0b3BwaW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKwlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXTsgdGhlbgorKwkgICAgL3NiaW4vcmVzb2x2Y29uZiAtZCBsbworKwlmaQorKwkvdXNyL3NiaW4vcm5kYyBzdG9wID4vZGV2L251bGwgMj4mMQorKwllY2hvICIuIgkKKysgICAgOzsKKysKKysgICAgcmVsb2FkKQorKwkvdXNyL3NiaW4vcm5kYyByZWxvYWQKKysgICAgOzsKKysKKysgICAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisrCSQwIHN0b3AKKysJc2xlZXAgMgorKwkkMCBzdGFydAorKyAgICA7OworKyAgICAKKysgICAgKikKKysJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2JpbmQge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisrCWV4aXQgMQorKyAgICA7OworK2VzYWMKKysKKytleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4OWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmluZC05LjkuNS5vcmlnL2Jpbi9NYWtlZmlsZS5pbgorKysrIGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCitAQCAtMTksNyArMTksNyBAQCBzcmNkaXIgPQlAc3JjZGlyQAorIFZQQVRIID0JCUBzcmNkaXJACisgdG9wX3NyY2RpciA9CUB0b3Bfc3JjZGlyQAorIAorLVNVQkRJUlMgPQluYW1lZCBybmRjIGRpZyBkZWx2IGRuc3NlYyB0b29scyB0ZXN0cyBuc3VwZGF0ZSBcCisrU1VCRElSUyA9CW5hbWVkIHJuZGMgZGlnIGRlbHYgZG5zc2VjIHRvb2xzIG5zdXBkYXRlIFwKKyAJCWNoZWNrIGNvbmZnZW4gQFBZVEhPTl9UT09MU0AgQFBLQ1MxMV9UT09MU0AKKyBUQVJHRVRTID0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyMDEyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgISAtcyAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorICAgIGVjaG8gLW4gIkdlbmVyYXRpbmcgL2V0Yy9iaW5kL3JuZGMua2V5OiIKKyAgICAvdXNyL3NiaW4vcm5kYy1jb25mZ2VuIC1hIC1iIDUxMiAtciAvZGV2L3VyYW5kb20KKyAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRiOTVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1N1YmplY3Q6IGluaXQuZDogYWRkIHN1cHBvcnQgZm9yIHJlYWQtb25seSByb290ZnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5pdC5kIHwgICA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2luaXQuZCBiL2luaXQuZAoraW5kZXggMDExMWVkNC4uMjQ2NzdjOCAxMDA2NDQKKy0tLSBhL2luaXQuZAorKysrIGIvaW5pdC5kCitAQCAtNiw4ICs2LDQ4IEBAIFBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKyAjIERvbid0IG1vZGlmeSB0aGlzIGxpbmUsIGNoYW5nZSBvciBjcmVhdGUgL2V0Yy9kZWZhdWx0L2JpbmQ5LgorIE9QVElPTlM9IiIKKyAKKyt0ZXN0IC1mIC9ldGMvZGVmYXVsdC9yY1MgJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisgdGVzdCAtZiAvZXRjL2RlZmF1bHQvYmluZDkgJiYgLiAvZXRjL2RlZmF1bHQvYmluZDkKKyAKKysjIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCAvdmFyIGFuZCAvIGFyZSBvbiBkaWZmZXJlbnQgcGFydGl0aW9ucy4KKytpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uICgpIHsKKysgICAgRElSRUNUT1JZPSQxCisrICAgIGRpcj1gcmVhZGxpbmsgLWYgJERJUkVDVE9SWWAKKysgICAgd2hpbGUgdHJ1ZTsgZG8KKysJaWYgWyAhIC1kICIkZGlyIiBdOyB0aGVuCisrCSAgICBlY2hvICJFUlJPUjogJGRpciBpcyBub3QgYSBkaXJlY3RvcnkiCisrCSAgICBleGl0IDEKKysJZWxzZQorKwkgICAgZm9yIGZsYWcgaW4gYGF3ayAtdiBkaXI9JGRpciAneyBpZiAoJDIgPT0gZGlyKSB7IHByaW50ICJGT1VORCI7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBcCisrCQlFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwgL3Byb2MvbW91bnRzYDsgZG8KKysJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisrCQlbICIkZmxhZyIgPSAicm8iIF0gJiYgeyBwYXJ0aXRpb249InJlYWQtb25seSI7IGJyZWFrOyB9CisrCSAgICBkb25lCisrCSAgICBpZiBbICIkZGlyIiA9ICIvIiAtbyAtbiAiJHBhcnRpdGlvbiIgXTsgdGhlbgorKwkJYnJlYWsKKysJICAgIGVsc2UKKysJCWRpcj1gZGlybmFtZSAkZGlyYAorKwkgICAgZmkKKysJZmkKKysgICAgZG9uZQorKyAgICBbICIkcGFydGl0aW9uIiA9ICJyZWFkLW9ubHkiIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyIKKyt9CisrCisrYmluZF9tb3VudCAoKSB7CisrICAgIG9sZGRpcj0kMQorKyAgICBuZXdkaXI9JDIKKysgICAgbWtkaXIgLXAgJG9sZGRpcgorKyAgICBjcCAtYSAkbmV3ZGlyLyogJG9sZGRpcgorKyAgICBtb3VudCAtLWJpbmQgJG9sZGRpciAkbmV3ZGlyCisrfQorKworKyMgRGVhbCB3aXRoIHJlYWQtb25seSByb290ZnMKKytpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisrICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAiV0FSTjogc3RhcnQgYmluZCBzZXJ2aWNlIGluIHJlYWQtb25seSByb290ZnMiCisrICAgIFsgYGlzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gL2V0Yy9iaW5kYCA9ICJ5ZXMiIF0gJiYgYmluZF9tb3VudCAvdmFyL3ZvbGF0aWxlL2JpbmQvZXRjIC9ldGMvYmluZAorKyAgICBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbmFtZWRgID0gInllcyIgXSAmJiBiaW5kX21vdW50IC92YXIvdm9sYXRpbGUvYmluZC9uYW1lZCAvdmFyL25hbWVkCisrZmkKKysKKyB0ZXN0IC14IC91c3Ivc2Jpbi9ybmRjIHx8IGV4aXQgMAorIAorIGNhc2UgIiQxIiBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2ZjNlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK2JpbmQ6IG1ha2UgIi9ldGMvaW5pdC5kL2JpbmQgc3RvcCIgd29yaworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0FkZCBzb21lIGNvbmZpZ3VyYXRpb25zLCBtYWtlIHJuZGMgY29tbWFuZCBiZSBhYmxlIHRvIGNvbnRyb2xzCit0aGUgbmFtZWQgZGFlbW9uLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25mL25hbWVkLmNvbmYgfCAgICA1ICsrKysrCisgY29uZi9ybmRjLmNvbmYgIHwgICAgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY29uZi9ybmRjLmNvbmYKKworZGlmZiAtLWdpdCBhL2NvbmYvbmFtZWQuY29uZiBiL2NvbmYvbmFtZWQuY29uZgoraW5kZXggOTU4MjljZi4uYzg4OTllNyAxMDA2NDQKKy0tLSBhL2NvbmYvbmFtZWQuY29uZgorKysrIGIvY29uZi9uYW1lZC5jb25mCitAQCAtNDcsMyArNDcsOCBAQCB6b25lICIyNTUuaW4tYWRkci5hcnBhIiB7CisgLy8gcm9vdC1kZWxlZ2F0aW9uLW9ubHkgZXhjbHVkZSB7ICJERSI7ICJNVVNFVU0iOyB9OworIAorIGluY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLmxvY2FsIjsKKytpbmNsdWRlICIvZXRjL2JpbmQvcm5kYy5rZXkiIDsKKytjb250cm9scyB7CisrCWluZXQgMTI3LjAuMC4xIGFsbG93IHsgbG9jYWxob3N0OyB9CisrCWtleXMgeyBybmRjLWtleTsgfTsKKyt9OworZGlmZiAtLWdpdCBhL2NvbmYvcm5kYy5jb25mIGIvY29uZi9ybmRjLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMGI0ODFkCistLS0gL2Rldi9udWxsCisrKysgYi9jb25mL3JuZGMuY29uZgorQEAgLTAsMCArMSw1IEBACisraW5jbHVkZSAiL2V0Yy9iaW5kL3JuZGMua2V5IjsKKytvcHRpb25zIHsKKysJZGVmYXVsdC1zZXJ2ZXIgIGxvY2FsaG9zdDsKKysJZGVmYXVsdC1rZXkgICAgIHJuZGMta2V5OworK307CisKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzA3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgpAQCAtMCwwICsxLDEwNCBAQAorYmluZDogcG9ydCBhIHBhdGNoIHRvIGZpeCBhIGJ1aWxkIGZhaWx1cmUKKworbWlwczEgZG9lcyBub3Qgc3VwcG9ydCBsbCBhbmQgc2MgaW5zdHJ1Y3Rpb25zLCBhbmQgbGVhZCB0byBiZWxvdyBlcnJvciwgbm93Cit3ZSBwb3J0IGEgcGF0Y2ggZnJvbSBkZWJpYW4gdG8gZml4IGl0CitbaHR0cDovL3NlY3VyaXR5LmRlYmlhbi5vcmcvZGViaWFuLXNlY3VyaXR5L3Bvb2wvdXBkYXRlcy9tYWluL2IvYmluZDkvYmluZDlfOS44LjQuZGZzZy5QMS02K25tdTIrZGViN3UxLmRpZmYuZ3pdCisKK3wge3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgorfCB7c3RhbmRhcmQgaW5wdXR9OjQ3OiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYGxsICQzLDAoJDYpJworfCB7c3RhbmRhcmQgaW5wdXR9OjUwOiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYHNjICQzLDAoJDYpJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYmluZDktOS44LjQuZGZzZy5QMS5vcmlnL2xpYi9pc2MvbWlwcy9pbmNsdWRlL2lzYy9hdG9taWMuaAorKysrIGJpbmQ5LTkuOC40LmRmc2cuUDEvbGliL2lzYy9taXBzL2luY2x1ZGUvaXNjL2F0b21pYy5oCitAQCAtMzEsMTggKzMxLDIwIEBACisgaXNjX2F0b21pY194YWRkKGlzY19pbnQzMl90ICpwLCBpbnQgdmFsKSB7CisgCWlzY19pbnQzMl90IG9yaWc7CisgCistCS8qIGFkZCBpcyBhIGNoZWF0LCBzaW5jZSBNSVBTIGhhcyBubyBtb3YgaW5zdHJ1Y3Rpb24gKi8KKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJhZGQgJDMsICQzLCAlMlxuIgorLQkgICAgInNjICQzLCAlMVxuIgorLQkgICAgImJlcSAkMywgMCwgMWIiCistCSAgICA6ICI9JnIiKG9yaWcpCistCSAgICA6ICJtIigqcCksICJyIih2YWwpCistCSAgICA6ICJtZW1vcnkiLCAiJDMiCistCQkpOworKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisrCSIJLnNldAlwdXNoCQlcbiIKKysJIgkuc2V0CW1pcHMyCQlcbiIKKysJIgkuc2V0CW5vcmVvcmRlcglcbiIKKysJIgkuc2V0CW5vYXQJCVxuIgorKwkiMToJbGwJJDEsICUxCQlcbiIKKysJIglhZGR1CSUwLCAkMSwgJTIJXG4iCisrCSIJc2MJJTAsICUxCQlcbiIKKysJIgliZXF6CSUwLCAxYgkJXG4iCisrCSIJbW92ZQklMCwgJDEJCVxuIgorKwkiCS5zZXQJcG9wCQlcbiIKKysJOiAiPSZyIiAob3JpZyksICIrUiIgKCpwKQorKwk6ICJyIiAodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CitAQCAtNTIsMTYgKzU0LDcgQEAKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBpc2NfYXRvbWljX3N0b3JlKGlzY19pbnQzMl90ICpwLCBpc2NfaW50MzJfdCB2YWwpIHsKKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUwXG4iCistCSAgICAiYWRkICQzLCAkMCwgJTFcbiIKKy0JICAgICJzYyAkMywgJTBcbiIKKy0JICAgICJiZXEgJDMsIDAsIDFiIgorLQkgICAgOgorLQkgICAgOiAibSIoKnApLCAiciIodmFsKQorLQkgICAgOiAibWVtb3J5IiwgIiQzIgorLQkJKTsKKysJKnAgPSB2YWw7CisgfQorIAorIC8qCitAQCAtNzIsMjAgKzY1LDIzIEBACisgc3RhdGljIGlubGluZSBpc2NfaW50MzJfdAorIGlzY19hdG9taWNfY21weGNoZyhpc2NfaW50MzJfdCAqcCwgaW50IGNtcHZhbCwgaW50IHZhbCkgeworIAlpc2NfaW50MzJfdCBvcmlnOworKwlpc2NfaW50MzJfdCB0bXA7CisgCistCV9fYXNtX18gdm9sYXRpbGUoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJibmUgJDMsICUyLCAyZlxuIgorLQkgICAgImFkZCAkMywgJDAsICUzXG4iCistCSAgICAic2MgJDMsICUxXG4iCistCSAgICAiYmVxICQzLCAwLCAxYlxuIgorLQkgICAgIjI6IgorLQkgICAgOiAiPSZyIihvcmlnKQorLQkgICAgOiAibSIoKnApLCAiciIoY21wdmFsKSwgInIiKHZhbCkKKy0JICAgIDogIm1lbW9yeSIsICIkMyIKKy0JCSk7CisrCV9fYXNtX18gX192b2xhdGlsZV9fICgKKysJIgkuc2V0CXB1c2gJCVxuIgorKwkiCS5zZXQJbWlwczIJCVxuIgorKwkiCS5zZXQJbm9yZW9yZGVyCVxuIgorKwkiCS5zZXQJbm9hdAkJXG4iCisrCSIxOglsbAkkMSwgJTEJCVxuIgorKwkiCWJuZQkkMSwgJTMsIDJmCVxuIgorKwkiCW1vdmUJJTIsICU0CQlcbiIKKysJIglzYwklMiwgJTEJCVxuIgorKwkiCWJlcXoJJTIsIDFiCQlcbiIKKysJIjI6CW1vdmUJJTAsICQxCQlcbiIKKysJIgkuc2V0CXBvcAkJXG4iCisrCTogIj0mciIob3JpZyksICIrUiIgKCpwKSwgIj1yIiAodG1wKQorKwk6ICJyIihjbXB2YWwpLCAiciIodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9uYW1lZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbmFtZWQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE1NmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbmFtZWQuc2VydmljZQpAQCAtMCwwICsxLDIyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJlcmtlbGV5IEludGVybmV0IE5hbWUgRG9tYWluIChETlMpCitXYW50cz1uc3MtbG9va3VwLnRhcmdldAorQmVmb3JlPW5zcy1sb29rdXAudGFyZ2V0CitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvYmluZDkKK1BJREZpbGU9L3J1bi9uYW1lZC9uYW1lZC5waWQKKworRXhlY1N0YXJ0UHJlPUBTQklORElSQC9nZW5lcmF0ZS1ybmRjLWtleS5zaAorRXhlY1N0YXJ0PUBTQklORElSQC9uYW1lZCAkT1BUSU9OUworCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAvc2ggLWMgJ0BTQklORElSQC9ybmRjIHJlbG9hZCA+IC9kZXYvbnVsbCAyPiYxIHx8IEBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElEJworCitFeGVjU3RvcD1AQkFTRV9CSU5ESVJAL3NoIC1jICdAU0JJTkRJUkAvcm5kYyBzdG9wID4gL2Rldi9udWxsIDI+JjEgfHwgQEJBU0VfQklORElSQC9raWxsIC1URVJNICRNQUlOUElEJworCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLVA0LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLVA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWUyODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiSVNDIEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy9zdy9iaW5kLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIklTQyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MGE5NWY1MmEwYWI2YzVmNTJkZWRjOWE0NWU3YWJiM2YiCisKK0RFUEVORFMgPSAib3BlbnNzbCBsaWJjYXAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2JpbmQ5LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LXRlc3Qtb24taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1ybmRjLWtleS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9uYW1lZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQ5IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YjFmNTA2NDgzNzc1NmM5MzhlYWRjMTUzN2RlYzVjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMDBiMjFlYzFkZWYyMTI5NTdmMjhlZmU5ZDEwYWFjNTJkNmVjNTE1ZTg0ZmJmMmM0MjE0M2Y1ZDcxNDI5Y2I4IgorCitFTkFCTEVfSVBWNiA9ICItLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0iCitFWFRSQV9PRUNPTkYgPSAiICR7RU5BQkxFX0lQVjZ9IC0td2l0aC1yYW5kb21kZXY9L2Rldi9yYW5kb20gLS1kaXNhYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGV2cG9sbCAtLWRpc2FibGUtZXBvbGwgLS13aXRoLWdvc3Q9bm8gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZ3NzYXBpPW5vIC0td2l0aC1lY2RzYT15ZXMgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9iaW5kIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLW9wZW5zc2w9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZCB1c2VyYWRkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW2h0dHBzdGF0c10gPSAiLS13aXRoLWxpYnhtbDIsLS13aXRob3V0LWxpYnhtbDIsbGlieG1sMiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvY2FjaGUvYmluZCAtLW5vLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJpbmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJiaW5kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuYW1lZC5zZXJ2aWNlIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtQTn0tdXRpbHMiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vaG9zdCAke2JpbmRpcn0vZGlnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaXNjLWNvbmZpZy5oIgorRklMRVNfJHtQTn0gKz0gIiR7c2JpbmRpcn0vZ2VuZXJhdGUtcm5kYy1rZXkuc2giCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwkjIGNsZWFuIGhvc3QgcGF0aCBpbiBpc2MtY29uZmlnLnNoIGJlZm9yZSB0aGUgaGFyZGxpbmsgY3JlYXRlZAorCSMgYnkgIm1ha2UgaW5zdGFsbCI6CisJIyAgIGJpbmQ5LWNvbmZpZyAtPiBpc2MtY29uZmlnLnNoCisJc2VkIC1pIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSwiICR7Qn0vaXNjLWNvbmZpZy5zaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAiJHtEfSR7YmluZGlyfS9uc2xvb2t1cCIKKwlybSAiJHtEfSR7bWFuZGlyfS9tYW4xL25zbG9va3VwLjEiCisJcm1kaXIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYmluZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9iaW5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwlpbnN0YWxsIC1tIDY0NCAke1N9L2NvbmYvKiAiJHtEfSR7c3lzY29uZmRpcn0vYmluZC8iCisJaW5zdGFsbCAtbSA3NTUgIiR7U30vaW5pdC5kIiAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2JpbmQiCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhIC91c3IvYmluL2VudiBweXRob24sJyAke0R9JHtzYmluZGlyfS9kbnNzZWMtY292ZXJhZ2UgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNoZWNrZHMKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uYW1lZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25hbWVkLnNlcnZpY2UKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JpbmQ5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLmxvY2FsIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZi5vcHRpb25zIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLjEyNyBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLmVtcHR5IFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIubG9jYWwgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5yb290IFwKKwkiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWM0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkxpbnV4IEJsdWV0b290aCBTdGFjayBVc2VybGFuZCBWNSIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IEJsdWV0b290aCBzdGFjayBWNSB1c2VybGFuZCBjb21wb25lbnRzLiAgVGhlc2UgaW5jbHVkZSBhIHN5c3RlbSBjb25maWd1cmF0aW9ucywgZGFlbW9ucywgdG9vbHMgYW5kIHN5c3RlbSBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYjUwNGI2N2M1MDMzMWZjNzg3MzRmZWQ5MGZiMGUwOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTliYzU0YjkzY2Q3ZTE3YmYwM2Y1MjUxM2YzOWY5MjZlIgorREVQRU5EUyA9ICJ1ZGV2IGxpYnVzYiBkYnVzLWdsaWIgZ2xpYi0yLjAgbGliY2hlY2sgcmVhZGxpbmUiCitQUk9WSURFUyArPSAiYmx1ZXotaGNpZHVtcCIKK1JQUk9WSURFU18ke1BOfSArPSAiYmx1ZXotaGNpZHVtcCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJibHVlejQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvYmV4LXByb2ZpbGVzIgorUEFDS0FHRUNPTkZJR1tvYmV4LXByb2ZpbGVzXSA9ICItLWVuYWJsZS1vYmV4LC0tZGlzYWJsZS1vYmV4LGxpYmljYWwiCitQQUNLQUdFQ09ORklHW2V4cGVyaW1lbnRhbF0gPSAiLS1lbmFibGUtZXhwZXJpbWVudGFsLC0tZGlzYWJsZS1leHBlcmltZW50YWwsIgorCitTUkNfVVJJID0gIlwKKyAgICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2JsdWV0b290aC9ibHVlei0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9ibHVldG9vdGguY29uZiBcCisiCitTID0gIiR7V09SS0RJUn0vYmx1ZXotJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLWVuYWJsZS10b29scyBcCisgIC0tZGlzYWJsZS1jdXBzIFwKKyAgLS1lbmFibGUtdGVzdCBcCisgIC0tZW5hYmxlLWRhdGFmaWxlcyBcCisgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS1zeXN0ZW1kJywgJy0tZGlzYWJsZS1zeXN0ZW1kJywgZCl9IFwKKyAgLS1lbmFibGUtbGlicmFyeSBcCisiCisKKyMgYmx1ZXo1IGJ1aWxkcyBhIGxhcmdlIG51bWJlciBvZiB1c2VmdWwgdXRpbGl0aWVzIGJ1dCBkb2VzIG5vdAorIyBpbnN0YWxsIHRoZW0uICBTcGVjaWZ5IHdoaWNoIG9uZXMgd2Ugd2FudCBwdXQgaW50byAke1BOfS1ub2luc3QtdG9vbHMuCitOT0lOU1RfVE9PTFNfUkVBRExJTkUgPz89ICIiCitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID8/PSAiIgorTk9JTlNUX1RPT0xTID0gIiBcCisgICAgJHtOT0lOU1RfVE9PTFNfUkVBRExJTkV9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdleHBlcmltZW50YWwnLCAnJHtOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMfScsICcnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvYXVkaW8vYXVkaW8uY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2F1ZGlvL2F1ZGlvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9uZXR3b3JrL25ldHdvcmsuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJZmkKKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2lucHV0L2lucHV0LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCSMgYXRfY29uc29sZSBkb2Vzbid0IHJlYWxseSB3b3JrIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgT0UsIHNvIHB1bmNoIHNvbWUgbW9yZSBob2xlcyBzbyBwZW9wbGUgY2FuIGFjdHVhbGx5IHVzZSBCVAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JsdWV0b290aC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvCisKKwkjIEluc3RhbGwgZGVzaXJlZCB0b29scyB0aGF0IHVwc3RyZWFtIGxlYXZlcyBpbiBidWlsZCBhcmVhCisgICAgICAgIGZvciBmIGluICR7Tk9JTlNUX1RPT0xTfSA7IGRvCisJICAgIGluc3RhbGwgLW0gNzU1ICR7Qn0vJGYgJHtEfS8ke2JpbmRpcn0KKwlkb25lCit9CisKK0FMTE9XX0VNUFRZX2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXogPSAiMSIKK1BBQ0tBR0VTID0rICJsaWJhc291bmQtbW9kdWxlLWJsdWV6ICR7UE59LXRlc3R0b29scyAke1BOfS1vYmV4ICR7UE59LW5vaW5zdC10b29scyIKKworRklMRVNfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIke2xpYmRpcn0vYWxzYS1saWIvbGliKi5zbyAke2RhdGFkaXJ9L2Fsc2EiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyouc28gJHtiYXNlX2xpYmRpcn0vdWRldi8gJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2LyAke3N5c3RlbWRfdW5pdGRpcn0vICR7ZGF0YWRpcn0vZGJ1cy0xIgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1vYmV4ID0gIiR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoL29iZXhkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQvdXNlci9vYmV4LnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy9vcmcuYmx1ZXoub2JleC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tb2JleCA9ICJvYmV4LnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59LXRlc3R0b29scyA9ICIke2xpYmRpcn0vYmx1ZXovdGVzdC8qIgorCitkZWYgZ2V0X25vaW5zdF90b29sc19wYXRocyAoZCwgYmIsIHRvb2xzKToKKyAgICBzID0gbGlzdCgpCisgICAgYmluZGlyID0gZC5nZXRWYXIoImJpbmRpciIsIFRydWUpCisgICAgZm9yIGJkcCBpbiB0b29scy5zcGxpdCgpOgorICAgICAgICBmID0gb3MucGF0aC5iYXNlbmFtZShiZHApCisgICAgICAgIHMuYXBwZW5kKCIlcy8lcyIgJSAoYmluZGlyLCBmKSkKKyAgICByZXR1cm4gIlxuIi5qb2luKHMpCisKK0ZJTEVTXyR7UE59LW5vaW5zdC10b29scyA9ICIke0BnZXRfbm9pbnN0X3Rvb2xzX3BhdGhzKGQsIGJiLCBkLmdldFZhcignTk9JTlNUX1RPT0xTJywgVHJ1ZSkpfSIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoLy5kZWJ1ZyBcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8uZGVidWcgXAorICAke2xpYmRpcn0vKi8uZGVidWcgXAorICAqL3VkZXYvLmRlYnVnIFwKKyAgKi8qL3VkZXYvLmRlYnVnIFwKKyAgIgorCitSREVQRU5EU18ke1BOfS10ZXN0dG9vbHMgKz0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYmx1ZXRvb3RoLnNlcnZpY2UiCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2JsdWV0b290aC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2JsdWV0b290aC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODQ1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYKQEAgLTAsMCArMSwxNyBAQAorPCEtLSBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHNlY3VyaXR5IHBvbGljaWVzCisgICAgIGZvciBCbHVldG9vdGggY29yZSBkYWVtb24gdG8gd29yay4gLS0+CisKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisKKyAgPCEtLSAuLi9zeXN0ZW0uY29uZiBoYXZlIGRlbmllZCBldmVyeXRoaW5nLCBzbyB3ZSBqdXN0IHB1bmNoIHNvbWUgaG9sZXMgLS0+CisKKyAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcuYmx1ZXoiLz4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmJsdWV6Ii8+CisgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJvcmcuYmx1ZXouQWdlbnQxIi8+CisgICAgPGFsbG93IHNlbmRfdHlwZT0ibWV0aG9kX2NhbGwiLz4KKyAgPC9wb2xpY3k+CisKKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M3Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIKQEAgLTAsMCArMSw1MiBAQAorcmVxdWlyZSBibHVlejUuaW5jCitTUkNfVVJJW21kNXN1bV0gPSAiNzg3ODJkYzMzZDlhOGI2MzQ0YzRjYzFhZjcwYzhhOTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgwMTgwN2ExMzUwNjY3OGNiZmViMTVjNmE0Yjg5ZWNiNTczOWVmZTEwNjdlYjQ2NGRhNjY0MWQ3MzE0MzZkMyIKKworIyBub2luc3QgcHJvZ3JhbXMgaW4gTWFrZWZpbGUudG9vbHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gUkVBRExJTkUKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX1JFQURMSU5FID89ICIgXAorICAgIGF0dHJpYi9nYXR0dG9vbCBcCisgICAgdG9vbHMvb2JleC1jbGllbnQtdG9vbCBcCisgICAgdG9vbHMvb2JleC1zZXJ2ZXItdG9vbCBcCisgICAgdG9vbHMvYmx1ZXRvb3RoLXBsYXllciBcCisgICAgdG9vbHMvb2JleGN0bCBcCisiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIEVYUEVSSU1FTlRBTAorIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID89ICIgXAorICAgIGVtdWxhdG9yL2J0dmlydCBcCisgICAgZW11bGF0b3IvYjFlZSBcCisgICAgZW11bGF0b3IvaGZwIFwKKyAgICB0b29scy8zZHNwIFwKKyAgICB0b29scy9tZ210LXRlc3RlciBcCisgICAgdG9vbHMvZ2FwLXRlc3RlciBcCisgICAgdG9vbHMvbDJjYXAtdGVzdGVyIFwKKyAgICB0b29scy9zY28tdGVzdGVyIFwKKyAgICB0b29scy9zbXAtdGVzdGVyIFwKKyAgICB0b29scy9oY2ktdGVzdGVyIFwKKyAgICB0b29scy9yZmNvbW0tdGVzdGVyIFwKKyAgICB0b29scy9iZGFkZHIgXAorICAgIHRvb2xzL2F2aW5mbyBcCisgICAgdG9vbHMvYXZ0ZXN0IFwKKyAgICB0b29scy9zY290ZXN0IFwKKyAgICB0b29scy9hbXB0ZXN0IFwKKyAgICB0b29scy9od2RiIFwKKyAgICB0b29scy9oY2lldmVudG1hc2sgXAorICAgIHRvb2xzL2hjaXNlY2ZpbHRlciBcCisgICAgdG9vbHMvYnRtZ210IFwKKyAgICB0b29scy9idGluZm8gXAorICAgIHRvb2xzL2J0YXR0YWNoIFwKKyAgICB0b29scy9idHNub29wIFwKKyAgICB0b29scy9idHByb3h5IFwKKyAgICB0b29scy9idGlvdGVzdCBcCisgICAgdG9vbHMvbWNhcHRlc3QgXAorICAgIHRvb2xzL2NsdGVzdCBcCisgICAgdG9vbHMvb29idGVzdCBcCisgICAgdG9vbHMvc2VxMmJzZXEgXAorICAgIHRvb2xzL2liZWFjb24gXAorICAgIHRvb2xzL2J0Z2F0dC1jbGllbnQgXAorICAgIHRvb2xzL2J0Z2F0dC1zZXJ2ZXIgXAorICAgIHRvb2xzL2dhdHQtc2VydmljZSBcCisgICAgcHJvZmlsZXMvaWFwL2lhcGQgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0YzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJDb25ubWFuIGNvbmZpZyB0byBzZXR1cCB3aXJlZCBpbnRlcmZhY2Ugb24gcWVtdSBtYWNoaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgdGhlIENvbm5NYW4gY29uZmlndXJhdGlvbiB0byBzZXQgdXAgYSBXaXJlZCBcCituZXR3b3JrIGludGVyZmFjZSBmb3IgYSBxZW11IG1hY2hpbmUuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gIiBmaWxlOi8vd2lyZWQuY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXJlZC1zZXR1cCBcCisiCitQUiA9ICJyMiIKKworUyA9ICIke1dPUktESVJ9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke2xvY2Fsc3RhdGVkaXJ9LyogJHtsaWJkaXJ9LyoiCisKK2RvX2luc3RhbGwoKSB7CisgICAgI0NvbmZpZ3VyZSBXaXJlZCBuZXR3b3JrIGludGVyZmFjZSBpbiBjYXNlIG9mIHFlbXUqIG1hY2hpbmVzCisgICAgaWYgdGVzdCAtZSAke1dPUktESVJ9L3dpcmVkLmNvbmZpZyAmJiB0ZXN0IC1lICR7V09SS0RJUn0vd2lyZWQtc2V0dXA7IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvY29ubm1hbgorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS93aXJlZC5jb25maWcgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vd2lyZWQtc2V0dXAgJHtEfSR7bGliZGlyfS9jb25ubWFuCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC1zZXR1cCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC1zZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY4OTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitDT05GSUdGPS92YXIvbGliL2Nvbm5tYW4vd2lyZWQuY29uZmlnCisKKyMgRXh0cmFjdCB3aXJlZCBuZXR3b3JrIGNvbmZpZyBmcm9tIC9wcm9jL2NtZGxpbmUKK05FVF9DT05GPWBjYXQgL3Byb2MvY21kbGluZSB8c2VkIC1uZSAncy9eLippcD1cKFteIF0qXCk6XChbXiBdKlwpOlwoW14gXSpcKTpcKFteIF0qXCkuKiQvXDFcL1w0XC9cMy9wJ2AKKworIyBDaGVjayBpZiBldGgwIGlzIGFscmVhZHkgc2V0IHZpYSBrZXJuZWwgY21kbGluZQoraWYgWyAieCRORVRfQ09ORiIgPSAieCIgXTsgdGhlbgorCSMgV2lyZWQgaW50ZXJmYWNlIGlzIG5vdCBjb25maWd1cmVkIHZpYSBrZXJuZWwgY21kbGluZQorCSMgUmVtb3ZlIGNvbm5tYW4gY29uZmlnIGZpbGUgdGVtcGxhdGUKKwlybSAtZiAke0NPTkZJR0Z9CitlbHNlCisJIyBTZXR1cCBhIGNvbm5tYW4gY29uZmlnIGFjY29yZGluZ2x5CisJc2VkIC1pIC1lICJzfF5JUHY0ID0uKnxJUHY0ID0gJHtORVRfQ09ORn18IiAke0NPTkZJR0Z9CitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLmNvbmZpZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OThjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC5jb25maWcKQEAgLTAsMCArMSw5IEBACitbZ2xvYmFsXQorTmFtZSA9IFdpcmVkCitEZXNjcmlwdGlvbiA9IFdpcmVkIG5ldHdvcmsgY29uZmlndXJhdGlvbgorCitbc2VydmljZV9ldGhlcm5ldF0KK1R5cGUgPSBldGhlcm5ldAorSVB2NCA9CitNQUMgPSA1Mjo1NDowMDoxMjozNDo1NgorTmFtZXNlcnZlcnMgPSA4LjguOC44CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTU3NTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDU5MDdhMjNhZDJmNDk3MDI5NjBhMzNmOWUyMDM5NTUyNjczZWFiYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDE3IERlYyAyMDEyIDE0OjAxOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZWQgaWNvbiBmcm9tIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQKKworVGhlIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQgc2hvd2VkIGEgcGljdHVyZSB0aGF0CitjYW4gbm90IGJlIGRpc3BsYXllZC4gVGhlcmUgaXMgbm8gZGVzaWduYXRlZCBwaWN0dXJlCitpbiBjb25ubWFuLWdub21lIHRvIGJlIHVzZWQgaW4gdGhlIGFib3V0IHNlY3Rpb24sIHNvCitpdCB3YXMgcmVtb3ZlZC4KKworW09FLUNvcmUgIzI1MDldCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBhcHBsZXQvbWFpbi5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXBwbGV0L21haW4uYyBiL2FwcGxldC9tYWluLmMKK2luZGV4IGYxMmQzNzEuLmM3YjNjN2YgMTAwNjQ0CistLS0gYS9hcHBsZXQvbWFpbi5jCisrKysgYi9hcHBsZXQvbWFpbi5jCitAQCAtMjEyLDcgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGFib3V0X2NhbGxiYWNrKEd0a1dpZGdldCAqaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorIAkJCSJjb21tZW50cyIsIF8oIkEgY29ubmVjdGlvbiBtYW5hZ2VyIGZvciB0aGUgR05PTUUgZGVza3RvcCIpLAorIAkJCSJhdXRob3JzIiwgYXV0aG9ycywKKyAJCQkidHJhbnNsYXRvci1jcmVkaXRzIiwgXygidHJhbnNsYXRvci1jcmVkaXRzIiksCistCQkJImxvZ28taWNvbi1uYW1lIiwgIm5ldHdvcmstd2lyZWxlc3MiLCBOVUxMKTsKKysJCQlOVUxMKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2V0dGluZ3NfY2FsbGJhY2soR3RrV2lkZ2V0ICppdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwNDlmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK2Nvbm5tYW4tZ25vbWU6IGZpeCBkYnVzIGludGVyZmFjZSBuYW1lCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgZm9sbG93aW5nIGVycm9yOgorCisiY29ubm1hbi1kYnVzLnhtbCI6ICJjb25ubWFuIiBpcyBub3QgYSB2YWxpZCBELUJ1cyBpbnRlcmZhY2UgbmFtZQorCitodHRwczovLzUwMjU1Mi5idWdzLmdlbnRvby5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MzgwNjUyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb21tb24vY29ubm1hbi1jbGllbnQuYyB8IDI0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGNvbW1vbi9jb25ubWFuLWNsaWVudC5oIHwgIDQgKystLQorIGNvbW1vbi9jb25ubWFuLWRidXMuYyAgIHwgIDYgKysrLS0tCisgY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuYyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitpbmRleCBjNTVlMjVjLi45ZDgxOGIyIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitAQCAtMjg5LDcgKzI4OSw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAKKyAJZ192YWx1ZV9pbml0KCZ2YWx1ZSwgREJVU19UWVBFX0dfRElDVElPTkFSWSk7CisgCWdfdmFsdWVfc2V0X2JveGVkKCZ2YWx1ZSwgaXB2NCk7CistCXJldCA9IGNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKysJcmV0ID0gbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIAorQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHBvd2VyZWQpOworIAorIAllcnJvciA9IE5VTEw7CistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKysJbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKyAJaWYoIGVycm9yICkKKyAJCWZwcmludGYgKHN0ZGVyciwgImVycm9yOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworIAorQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyB9CisgCisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQljb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKKysJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCisgeworIAlDb25ubWFuQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IENPTk5NQU5fQ0xJRU5UX0dFVF9QUklWQVRFKGNsaWVudCk7CisgCURCdXNHUHJveHkgKnByb3h5OworQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NjYW4oQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9zY2FuX2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKysJbmV0X2Nvbm5tYW5fc2Nhbl9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CitAQCAtMzUzLDcgKzM1Myw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X2dldF9vZmZsaW5lX3N0YXR1cyhDb25ubWFuQ2xpZW50ICpjbGllbnQpCisgCisgCURCRygiY2xpZW50ICVwIiwgY2xpZW50KTsKKyAKKy0JcmV0ID0gY29ubm1hbl9nZXRfcHJvcGVydGllcyhwcml2LT5tYW5hZ2VyLCAmaGFzaCwgTlVMTCk7CisrCXJldCA9IG5ldF9jb25ubWFuX2dldF9wcm9wZXJ0aWVzKHByaXYtPm1hbmFnZXIsICZoYXNoLCBOVUxMKTsKKyAKKyAJaWYgKHJldCA9PSBGQUxTRSkKKyAJCWdvdG8gZG9uZTsKK0BAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfb2ZmbGluZW1vZGUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBnYm9vbGVhbiBzdGF0dXMpCisgCWdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9CT09MRUFOKTsKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHN0YXR1cyk7CisgCistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByaXYtPm1hbmFnZXIsICJPZmZsaW5lTW9kZSIsICZ2YWx1ZSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX3NldF9wcm9wZXJ0eShwcml2LT5tYW5hZ2VyLCAiT2ZmbGluZU1vZGUiLCAmdmFsdWUsIE5VTEwpOworIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorIAkJcmV0dXJuIFRSVUU7CisgCisgCWlmICh0eXBlID09IENPTk5NQU5fVFlQRV9XSUZJKQorLQkJY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKysJCW5ldF9jb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgCitAQCAtNDIyLDEzICs0MjIsMTMgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9jb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KKyAKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCWNvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpCisrCQluZXRfY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSkKKyB7CisgCUNvbm5tYW5DbGllbnRQcml2YXRlICpwcml2ID0gQ09OTk1BTl9DTElFTlRfR0VUX1BSSVZBVEUoY2xpZW50KTsKKyAJREJ1c0dQcm94eSAqcHJveHk7CitAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdF9hc3luYyhDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCWdvdG8gZG9uZTsKKyAKKy0JY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworKwluZXRfY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworIAorIGRvbmU6CisgCXJldHVybjsKK0BAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9kaXNjb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK0BAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9yZW1vdmUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaykKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuaCBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitpbmRleCA5ZTJlNmQ1Li45ODI0MWRlIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmgKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitAQCAtNzAsMTMgKzcwLDEzIEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3Bvd2VyZWQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJCQkJc3RydWN0IGlwdjRfY29uZmlnICppcHY0X2NvbmZpZyk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQkJY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworKwkJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworIAorIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Rpc2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yayk7CisgZ2NoYXIgKmNvbm5tYW5fY2xpZW50X2dldF9zZWN1cml0eShDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCQkJY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSk7CisrCQkJCW5ldF9jb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9yZW1lbWJlcihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAkJCQkJCQlnYm9vbGVhbiByZW1lbWJlcik7CisgCitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCitpbmRleCBiODJiM2UxLi41NDNlYjQzIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLmMKK0BAIC02NTUsMTUgKzY1NSwxNSBAQCBEQnVzR1Byb3h5ICpjb25ubWFuX2RidXNfY3JlYXRlX21hbmFnZXIoREJ1c0dDb25uZWN0aW9uICpjb25uLAorIAorIAlEQkcoImdldHRpbmcgbWFuYWdlciBwcm9wZXJ0aWVzIik7CisgCistCWNvbm5tYW5fZ2V0X3Byb3BlcnRpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfcHJvcGVydGllcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfcHJvcGVydGllc19hc3luYyhwcm94eSwgbWFuYWdlcl9wcm9wZXJ0aWVzLCBzdG9yZSk7CisgCisgCURCRygiZ2V0dGluZyB0ZWNobm9sb2dpZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworIAorIAlEQkcoImdldHRpbmcgc2VydmljZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfc2VydmljZXNfYXN5bmMocHJveHksIG1hbmFnZXJfc2VydmljZXMsIHN0b3JlKTsKKysJbmV0X2Nvbm5tYW5fZ2V0X3NlcnZpY2VzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3NlcnZpY2VzLCBzdG9yZSk7CisgCisgCXJldHVybiBwcm94eTsKKyB9CitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAoraW5kZXggNTZiOTU4Mi4uMDE5OWQ1MiAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWRidXMueG1sCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAorQEAgLTEsNyArMSw3IEBACisgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CisgCisgPG5vZGUgbmFtZT0iLyI+CistICA8aW50ZXJmYWNlIG5hbWU9ImNvbm5tYW4iPgorKyAgPGludGVyZmFjZSBuYW1lPSJuZXQuY29ubm1hbiI+CisgICAgIDxtZXRob2QgbmFtZT0iR2V0UHJvcGVydGllcyI+CisgICAgICAgPGFyZyB0eXBlPSJhe3N2fSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgPC9tZXRob2Q+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMS5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMi5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NGZiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMy5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZWI0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNC5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTQ0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNS5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDBhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMWNkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0luIG5ldHdvcmtzIHRoYXQgZG9uJ3QgaGF2ZSBhIERIQ1Agc2VydmVyIGNvbmZpZ3VyZWQsIGlwdjQgYWRkcmVzcworYWxsb2NhdGlvbiBmYWlscyBhbmQgdGhlIGlwdjQgc3RydWN0dXJlIGRvZXNuJ3QgZ2V0IHBvcHVsYXRlZC4gV2hlbgordGhlIEdVSSBpcyB0cnlpbmcgdG8gcmVhZCB0aGUgaXB2NF9jb25maWcubWV0aG9kIGZpZWxkIHRvIHNlZSB3aGV0aGVyCitpdCBjb250YWlucyAiZGhjcCIgc3RyaW5nLCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpcyBnZW5lcmF0ZWQuCisKK0V0aGVybmV0IG1hbnVhbCBjb25maWd1cmF0aW9uIGJlaGF2aW9yIHJlbWFpbnMgdW5jaGFuZ2VkIGFmdGVyIHRoaXMgZml4LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRW1pbGlhIENpb2JhbnUgPGVtaWxpYS5tYXJpYS5zaWx2aWEuY2lvYmFudUBpbnRlbC5jb20+CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvZXRoZXJuZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Byb3BlcnRpZXMvZXRoZXJuZXQuYworKysrIGdpdC9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKK0BAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBhZGRfZXRoZXJuZXRfc2VydmljZShHdGtXaWRnZXQgKm1haQorCisgCWRhdGEtPmJ1dHRvbiA9IGJ1dHRvbjsKKworLQlpZiAoZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisrCWlmICghaXB2NF9jb25maWcubWV0aG9kIHx8IGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorIAkJdXBkYXRlX2V0aGVybmV0X2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV9ldGhlcm5ldF9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX01BTlVBTCk7CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvd2lmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcHJvcGVydGllcy93aWZpLmMKKysrKyBnaXQvcHJvcGVydGllcy93aWZpLmMKK0BAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIHZvaWQgd2lmaV9pcGNvbmZpZyhHdGtXaWRnZXQgKnRhYgorCisgCWRhdGEtPmlwdjRfY29uZmlnID0gaXB2NF9jb25maWc7CisKKy0JaWYgKGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorKwlpZiAoIWlwdjRfY29uZmlnLm1ldGhvZCB8fCBnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfTUFOVUFMKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU3NWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiR1RLKyBmcm9udGVuZCBmb3IgdGhlIENvbm5NYW4gbmV0d29yayBjb25uZWN0aW9uIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcm9wZXJ0aWVzL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT01MGM3N2M4MTg3MTMwOGIwMzNhYjdhMTUwNDYyNmFmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY29ubm1hbi1kYnVzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZGU2YjQ4NWMwZTcxN2EwMjM2NDAyZDIyMDE4NzcxN2EiCisKK0RFUEVORFMgPSAiZ3RrKyBkYnVzLWdsaWIgaW50bHRvb2wtbmF0aXZlIgorCisjIDAuNyB0YWcKK1NSQ1JFViA9ICJjZjNjMzI1YjIzZGFlODQzYzU0OTlhMTEzNTkxY2ZiYzk4YWNiMTQzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Nvbm5lY3Rpdml0eS9jb25ubWFuLWdub21lLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ltYWdlcy8qIFwKKyAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGd0ay1pY29uLWNhY2hlIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfSA9ICJjb25ubWFuIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbWFnZXMvKiAke0R9L3Vzci9zaGFyZS9pY29ucy9oaWNvbG9yLzIyeDIyL2FwcHMvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkYzRiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYwpAQCAtMCwwICsxLDIxMSBAQAorU1VNTUFSWSA9ICJBIGRhZW1vbiBmb3IgbWFuYWdpbmcgaW50ZXJuZXQgY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgQ29ubk1hbiBwcm9qZWN0IHByb3ZpZGVzIGEgZGFlbW9uIGZvciBtYW5hZ2luZyBcCitpbnRlcm5ldCBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIENvbm5lY3Rpb24gTWFuYWdlciBpcyBkZXNpZ25lZCB0byBiZSBzbGltIGFuZCBcCit0byB1c2UgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZSwgc28gaXQgY2FuIGJlIGVhc2lseSBpbnRlZ3JhdGVkLiBcCitJdCBpcyBhIGZ1bGx5IG1vZHVsYXIgc3lzdGVtIHRoYXQgY2FuIGJlIGV4dGVuZGVkLCB0aHJvdWdoIHBsdWctaW5zLCBcCit0byBzdXBwb3J0IGFsbCBraW5kcyBvZiB3aXJlZCBvciB3aXJlbGVzcyB0ZWNobm9sb2dpZXMuIEFsc28sIFwKK2NvbmZpZ3VyYXRpb24gbWV0aG9kcywgbGlrZSBESENQIGFuZCBkb21haW4gbmFtZSByZXNvbHZpbmcsIGFyZSBcCitpbXBsZW1lbnRlZCB1c2luZyBwbHVnLWlucy4iCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovLzAxLm9yZy9qaXJhL2Jyb3dzZS9DTSIKK0xJQ0VOU0UgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT00ODZhMjc5YTZhYjBjOGQxNTJiY2RhM2E1YjVlZGMzNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgYmx1ZXRvb3RoCisKK0RFUEVORFMgID0gImRidXMgZ2xpYi0yLjAgcHBwIGlwdGFibGVzIgorCitJTkNfUFIgPSAicjIwIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICBhY19jdl9wYXRoX1dQQVNVUFBMSUNBTlQ9JHtzYmluZGlyfS93cGFfc3VwcGxpY2FudCBcCisgICAgYWNfY3ZfcGF0aF9QUFBEPSR7c2JpbmRpcn0vcHBwZCBcCisgICAgLS1lbmFibGUtZGVidWcgXAorICAgIC0tZW5hYmxlLWxvb3BiYWNrIFwKKyAgICAtLWVuYWJsZS1ldGhlcm5ldCBcCisgICAgLS1lbmFibGUtdG9vbHMgXAorICAgIC0tZW5hYmxlLXRlc3QgXAorICAgIC0tZGlzYWJsZS1wb2xraXQgXAorICAgIC0tZW5hYmxlLWNsaWVudCBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ3aXNwciBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsJ3dpZmknLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCczZycsICcnLCBkKX0gXAorIgorCisjIElmIHlvdSB3YW50IENvbm5NYW4gdG8gc3VwcG9ydCBWUE4sIGFkZCBmb2xsb3dpbmcgc3RhdGVtZW50IGludG8KKyMgbG9jYWwuY29uZiBvciBkaXN0cm8gY29uZmlnCisjIFBBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLWNvbm5tYW4gPSAiIG9wZW52cG4gdnBuYyBsMnRwIHBwdHAiCisKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW3dpZmldID0gIi0tZW5hYmxlLXdpZmksIC0tZGlzYWJsZS13aWZpLCB3cGEtc3VwcGxpY2FudCwgd3BhLXN1cHBsaWNhbnQiCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9LCAke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbM2ddID0gIi0tZW5hYmxlLW9mb25vLCAtLWRpc2FibGUtb2Zvbm8sIG9mb25vLCBvZm9ubyIKK1BBQ0tBR0VDT05GSUdbdGlzdF0gPSAiLS1lbmFibGUtdGlzdCwtLWRpc2FibGUtdGlzdCwiCitQQUNLQUdFQ09ORklHW29wZW52cG5dID0gIi0tZW5hYmxlLW9wZW52cG4gLS13aXRoLW9wZW52cG49JHtzYmluZGlyfS9vcGVudnBuLC0tZGlzYWJsZS1vcGVudnBuLCxvcGVudnBuIgorUEFDS0FHRUNPTkZJR1t2cG5jXSA9ICItLWVuYWJsZS12cG5jIC0td2l0aC12cG5jPSR7c2JpbmRpcn0vdnBuYywtLWRpc2FibGUtdnBuYywsdnBuYyIKK1BBQ0tBR0VDT05GSUdbbDJ0cF0gPSAiLS1lbmFibGUtbDJ0cCAtLXdpdGgtbDJ0cD0ke3NiaW5kaXJ9L3hsMnRwZCwtLWRpc2FibGUtbDJ0cCwseGwydHBkIgorUEFDS0FHRUNPTkZJR1twcHRwXSA9ICItLWVuYWJsZS1wcHRwIC0td2l0aC1wcHRwPSR7c2JpbmRpcn0vcHB0cCwtLWRpc2FibGUtcHB0cCwscHB0cC1saW51eCIKKyMgV0lTUHIgc3VwcG9ydCBmb3IgbG9nZ2luZyBpbnRvIGhvdHNwb3RzLCByZXF1aXJlcyBUTFMKK1BBQ0tBR0VDT05GSUdbd2lzcHJdID0gIi0tZW5hYmxlLXdpc3ByLC0tZGlzYWJsZS13aXNwcixnbnV0bHMsIgorCitJTklUU0NSSVBUX05BTUUgPSAiY29ubm1hbiIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDA1IDUgMiAzIC4gc3RvcCAyMiAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHN5c3RlbWRfcGFja2FnZXMgPSAiJHtQTn0iCisgICAgcGtnY29uZmlnID0gZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKQorICAgIGlmICgnb3BlbnZwbicgb3IgJ3ZwbmMnIG9yICdsMnRwJyBvciAncHB0cCcpIGluIHBrZ2NvbmZpZy5zcGxpdCgpOgorICAgICAgICBzeXN0ZW1kX3BhY2thZ2VzICs9ICIgJHtQTn0tdnBuIgorICAgIGQuc2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgc3lzdGVtZF9wYWNrYWdlcykKK30KKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS12cG4gPSAiY29ubm1hbi12cG4uc2VydmljZSIKK1NZU1RFTURfV0lSRURfU0VUVVAgPSAiRXhlY1N0YXJ0UHJlPS0ke2xpYmRpcn0vY29ubm1hbi93aXJlZC1zZXR1cCIKKworIyBUaGlzIGFsbG93cyAqZXZlcnlvbmUqIHRvIGFjY2VzcyBDb25uTWFuIG92ZXIgREJ1cywgd2l0aG91dCBhbnkgYWNjZXNzCisjIGNvbnRyb2wuICBSZWFsbHkgdGhlIGF0X2NvbnNvbGUgZmxhZyBzaG91bGQgd29yaywgd2hpY2ggd291bGQgbWVhbiB0aGF0CisjIGJvdGggdGhpcyBhbmQgdGhlIHh1c2VyIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vdnBuL3Zwbi1kYnVzLmNvbmYKKworCXNlZCAtaSAicyNFeGVjU3RhcnQ9IyR7U1lTVEVNRF9XSVJFRF9TRVRVUH1cbkV4ZWNTdGFydD0jIiAke0J9L3NyYy9jb25ubWFuLnNlcnZpY2UKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY29ubm1hbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvY29ubm1hbgorCQlzZWQgLWkgcyVATElCRElSQCUke2xpYmRpcn0lICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jb25ubWFuCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L3Rvb2xzLyotdGVzdCAke0R9JHtiaW5kaXJ9CisJaWYgWyAtZSAke0J9L3Rvb2xzL3dpc3ByIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdG9vbHMvd2lzcHIgJHtEfSR7YmluZGlyfQorCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vY2xpZW50L2Nvbm5tYW5jdGwgJHtEfSR7YmluZGlyfQorCisJIyBXZSBkb24ndCBuZWVkIHRvIHBhY2thZ2UgYW4gZW1wdHkgZGlyZWN0b3J5CisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMKKworCSMgQXV0b21ha2UgMS4xMiB3b24ndCBpbnN0YWxsIGVtcHR5IGRpcmVjdG9yaWVzLCBidXQgd2UgbmVlZCB0aGUKKwkjIHBsdWdpbnMgZGlyZWN0b3J5IHRvIGJlIHByZXNlbnQgZm9yIG93bmVyc2hpcAorCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zCit9CisKKyMgVGhlc2UgdXNlZCB0byBiZSBwbHVnaW5zLCBidXQgbm93IHRoZXkgYXJlIGNvcmUKK1JQUk9WSURFU18ke1BOfSA9ICJcCisJY29ubm1hbi1wbHVnaW4tbG9vcGJhY2sgXAorCWNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdibHVldG9vdGgnLCdjb25ubWFuLXBsdWdpbi1ibHVldG9vdGgnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd3aWZpJywnY29ubm1hbi1wbHVnaW4td2lmaScsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJzNnJywnY29ubm1hbi1wbHVnaW4tb2Zvbm8nLCAnJywgZCl9IFwKKwkiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKwlkYnVzIFwKKwkke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0gXAorCSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UE59LXBsdWdpbi0uKiIKKworZGVmIGFkZF9yZGVwZW5kcyhiYiwgZCwgZmlsZSwgcGtnLCBkZXBtYXAsIG11bHRpbGliX3ByZWZpeCwgYWRkX2luc2FuZV9za2lwKToKKyAgICBwbHVnaW50eXBlID0gcGtnLnNwbGl0KCAnLScgKVstMV0KKyAgICBpZiBwbHVnaW50eXBlIGluIGRlcG1hcDoKKyAgICAgICAgcmRlcGVuZHMgPSBtYXAobGFtYmRhIHg6IG11bHRpbGliX3ByZWZpeCArIHgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVwbWFwW3BsdWdpbnR5cGVdLnNwbGl0KCkpCisgICAgICAgIGQuc2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csICIgIi5qb2luKHJkZXBlbmRzKSkKKyAgICBpZiBhZGRfaW5zYW5lX3NraXA6CisgICAgICAgIGQuYXBwZW5kVmFyKCJJTlNBTkVfU0tJUF8lcyIgJSBwa2csICJkZXYtc28iKQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBkZXBtYXAgPSBkaWN0KHBwcGQ9InBwcCIpCisgICAgbXVsdGlsaWJfcHJlZml4ID0gKGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIEZhbHNlKQorICAgIHBsdWdpbl9kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgJ14oLiopLnNvJCcsIHBsdWdpbl9uYW1lLCBcCisgICAgICAgICcke1BOfSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1ob29rLCBwcmVwZW5kPVRydWUgKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIFRydWUpCisgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi12cG4tJXMnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbl9kaXIsICdeKC4qKS5zbyQnLCBwbHVnaW5fbmFtZSwgXAorICAgICAgICAnJHtQTn0gVlBOIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBob29rPWhvb2ssIHByZXBlbmQ9VHJ1ZSApCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyAke1BOfS10ZXN0cyAke1BOfS1jbGllbnQiCisKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS93aXNwciIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyotdGVzdCAke2xpYmRpcn0vJHtCUE59L3Rlc3QvKiIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QgcHl0aG9uLXRleHR1dGlscyBweXRob24tc3VicHJvY2VzcyBweXRob24tZmNudGwgcHl0aG9uLW5ldGNsaWVudCIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7YmluZGlyfS9jb25ubWFuY3RsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyogJHtsaWJleGVjZGlyfS8qICR7bGliZGlyfS9saWIqLnNvLiogXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucyBcCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiAke2Jhc2VfbGliZGlyfS8qLnNvKiAke2RhdGFkaXJ9LyR7UE59IFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovKi5sYSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXZwbiIKKworU1VNTUFSWV8ke1BOfS12cG4gPSAiQSBkYWVtb24gZm9yIG1hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyIKK0RFU0NSSVBUSU9OXyR7UE59LXZwbiA9ICJUaGUgQ29ubk1hbiBWUE4gcHJvdmlkZXMgYSBkYWVtb24gZm9yIFwKK21hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIGNvbm5tYW4tdnBuZCBoYW5kbGVzIGFsbCB0aGUgVlBOIGNvbm5lY3Rpb25zIFwKK2FuZCBzdGFydHMvc3RvcHMgVlBOIGNsaWVudCBwcm9jZXNzZXMgd2hlbiBuZWNlc3NhcnkuIFRoZSBjb25ubWFuLXZwbmQgXAorcHJvdmlkZXMgYSBEQnVzIEFQSSBmb3IgbWFuYWdpbmcgVlBOIGNvbm5lY3Rpb25zLiBBbGwgdGhlIGRpZmZlcmVudCBcCitWUE4gdGVjaG5vZ2llcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcGx1Zy1pbnMuIgorRklMRVNfJHtQTn0tdnBuICs9ICIke3NiaW5kaXJ9L2Nvbm5tYW4tdnBuZCBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kL2Nvbm5tYW4tdnBuLWRidXMuY29uZiBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy9uZXQuY29ubm1hbi52cG4uc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY29ubm1hbi12cG4uc2VydmljZSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gPSAiQW4gT3BlblZQTiBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuID0gIlRoZSBDb25uTWFuIE9wZW5WUE4gcGx1Z2luIHVzZXMgb3BlbnZwbiBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gT3BlblZQTiBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW52cG4tc2NyaXB0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vb3BlbnZwbi5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnb3BlbnZwbicsJyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbicsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIkEgdnBuYyBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIlRoZSBDb25uTWFuIHZwbmMgcGx1Z2luIHVzZXMgdnBuYyBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gQ2lzY28zMDAwIFZQTiBDb25jZW50cmF0b3IuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi12cG5jICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW5jb25uZWN0LXNjcmlwdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL3ZwbmMuc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLXZwbmMgKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ3ZwbmMnLCcke1BOfS1wbHVnaW4tdnBuLXZwbmMnLCAnJywgZCl9IgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJBIEwyVFAgcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJUaGUgQ29ubk1hbiBMMlRQIHBsdWdpbiB1c2VzIHhsMnRwZCBkYWVtb24gXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gTDJUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1sMnRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vbDJ0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tbDJ0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnbDJ0cCcsJyR7UE59LXBsdWdpbi12cG4tbDJ0cCcsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIkEgUFBUUCBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIlRoZSBDb25uTWFuIFBQVFAgcGx1Z2luIHVzZXMgcHB0cC1saW51eCBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gUFBUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1wcHRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vcHB0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tcHB0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywncHB0cCcsJyR7UE59LXBsdWdpbi12cG4tcHB0cCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMDNlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDRkZGFmNzhkYWQ1YTllZTRhMDY1ODIzNWY3MWI3NTEzMjE5MjEyM2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA3IEFwciAyMDEyIDE4OjUyOjEyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBsdWdpbi5oOiBDaGFuZ2UgdmlzaWJpbGl0eSB0byBkZWZhdWx0IGZvciBkZWJ1ZyBzeW1ib2xzCisKK2dvbGQgcmVmdXNlcyB0byBsaW5rIGluIHVuZGVmaW5lZCB3ZWFrIHN5bWJvbHMgd2hpY2gKK2hhdmUgaGlkZGVuIHZpc2liaWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluY2x1ZGUvcGx1Z2luLmggfCAgICA0ICsrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGx1Z2luLmggYi9pbmNsdWRlL3BsdWdpbi5oCitpbmRleCA2OTJhNGU1Li5hOTM2MWMzIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9wbHVnaW4uaAorKysrIGIvaW5jbHVkZS9wbHVnaW4uaAorQEAgLTg5LDkgKzg5LDkgQEAgc3RydWN0IGNvbm5tYW5fcGx1Z2luX2Rlc2MgeworICNlbHNlCisgI2RlZmluZSBDT05OTUFOX1BMVUdJTl9ERUZJTkUobmFtZSwgZGVzY3JpcHRpb24sIHZlcnNpb24sIHByaW9yaXR5LCBpbml0LCBleGl0KSBcCisgCQlleHRlcm4gc3RydWN0IGNvbm5tYW5fZGVidWdfZGVzYyBfX3N0YXJ0X19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX2RlYnVnX2Rlc2MgX19zdG9wX19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgXAorIAkJCQlfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7IFwKKyAJCXN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgPSB7IFwKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDdiM2NhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitCZWNhdXNlIFBva3kgZG9lc24ndCBzdXBwb3J0IGF0X2NvbnNvbGUgd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlIHNlc3Npb24KK3VzZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NyYy9jb25ubWFuLWRidXMuY29uZiBiL3NyYy9jb25ubWFuLWRidXMuY29uZgoraW5kZXggOThhNzczZS4uNDY2ODA5YyAxMDA2NDQKKy0tLSBhL3NyYy9jb25ubWFuLWRidXMuY29uZgorKysrIGIvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCitAQCAtOCw2ICs4LDkgQEAKKyAgICAgICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0ibmV0LmNvbm5tYW4uQ291bnRlciIvPgorICAgICAgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJuZXQuY29ubm1hbi5Ob3RpZmljYXRpb24iLz4KKyAgICAgPC9wb2xpY3k+CisrICAgIDxwb2xpY3kgdXNlcj0ieHVzZXIiPgorKyAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisrICAgIDwvcG9saWN5PgorICAgICA8cG9saWN5IGF0X2NvbnNvbGU9InRydWUiPgorICAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisgICAgIDwvcG9saWN5PgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vY29ubm1hbiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2Nvbm5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YTk0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2Nvbm5tYW4KQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisKK0RBRU1PTj0vdXNyL3NiaW4vY29ubm1hbmQKK1BJREZJTEU9L3Zhci9ydW4vY29ubm1hbmQucGlkCitERVNDPSJDb25uZWN0aW9uIE1hbmFnZXIiCisKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L2Nvbm5tYW4gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9jb25ubWFuCitmaQorCitzZXQgLWUKKworbmZzcm9vdD0wCisKK2V4ZWMgOTwmMCA8IC9wcm9jL21vdW50cword2hpbGUgcmVhZCBkZXYgbXRwdCBmc3R5cGUgcmVzdDsgZG8KKwlpZiB0ZXN0ICRtdHB0ID0gIi8iIDsgdGhlbgorCQljYXNlICRmc3R5cGUgaW4KKwkJICAgIG5mcyB8IG5mczQpCisJCQluZnNyb290PTEKKwkJCWJyZWFrCisJCQk7OworCQkgICAgKikKKwkJCTs7CisJCWVzYWMKKwlmaQorZG9uZQorCitkb19zdGFydCgpIHsKKwlFWFRSQV9QQVJBTT0iIgorCWlmIHRlc3QgJG5mc3Jvb3QgLWVxIDEgOyB0aGVuCisJICAgIE5FVF9ERVZTPWBjYXQgL3Byb2MvbmV0L2RldiB8IHNlZCAtbmUgJ3MvXlwoW2EtekEtWjAtOSBdKlwpOi4qJC9cMS9wJ2AKKwkgICAgTkVUX0FERFI9YGNhdCAvcHJvYy9jbWRsaW5lIHwgc2VkIC1uZSAncy9eLippcD1cKFteIDpdKlwpLiokL1wxL3AnYAorCisJICAgIGlmIFsgISAteiAiJE5FVF9BRERSIiBdOyB0aGVuCisJCWlmIFsgIiRORVRfQUREUiIgPSBkaGNwIF07IHRoZW4KKwkJICAgIGV0aG49YGlmY29uZmlnIHwgZ3JlcCAiXmV0aCIgfCBzZWQgLWUgInMvXChldGhbMC05XVwpXCguKlwpL1wxLyJgCisJCSAgICBpZiBbICEgLXogIiRldGhuIiBdOyB0aGVuCisJCQlFWFRSQV9QQVJBTT0iLUkgJGV0aG4iCisJCSAgICBmaQorCQllbHNlCisJCSAgICBmb3IgaSBpbiAkTkVUX0RFVlM7IGRvCisJCQlBRERSPWBpZmNvbmZpZyAkaSB8IHNlZCAncy9hZGRyOi8vZycgfCBzZWQgLW5lICdzL14uKmluZXQgXChbMC05Ll0qXCkgLiokL1wxL3AnYAorCQkJaWYgWyAiJE5FVF9BRERSIiA9ICIkQUREUiIgXTsgdGhlbgorCQkJICAgIEVYVFJBX1BBUkFNPSItSSAkaSIKKwkJCSAgICBicmVhaworCQkJZmkKKwkJICAgIGRvbmUKKwkJZmkKKwkgICAgZmkKKwlmaQorCWlmIFsgLWYgQExJQkRJUkAvY29ubm1hbi93aXJlZC1zZXR1cCBdIDsgdGhlbgorCQkuIEBMSUJESVJAL2Nvbm5tYW4vd2lyZWQtc2V0dXAKKwlmaQorCSREQUVNT04gJEVYVFJBX1BBUkFNCit9CisKK2RvX3N0b3AoKSB7CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBjb25ubWFuZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMwLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQ3MzUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGNvbm5tYW4uaW5jCisKK1NSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4gXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjRhM2VmZGJkNjc5NjkyMmRiOWM2ZjY2ZGE1Nzg4N2ZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNWU0NjRiYWNjOWMyN2VkNGU3MjY5ZmI5YjUwNTlmMDc5NDdmNWJlMjY0MzNiNTkyMTIxMzM2NjNmZmE5OTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNvbm5tYW4tY29uZiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODNhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKQEAgLTAsMCArMSwxMTUgQEAKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorU1VNTUFSWSA9ICJJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtIERIQ1AgcGFja2FnZSIKK0RFU0NSSVBUSU9OID0gIkRIQ1AgKER5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29sKSBpcyBhIHByb3RvY29sIFwKK3doaWNoIGFsbG93cyBpbmRpdmlkdWFsIGRldmljZXMgb24gYW4gSVAgbmV0d29yayB0byBnZXQgdGhlaXIgb3duIFwKK25ldHdvcmsgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VydmVyLiAgREhDUCBoZWxwcyBtYWtlIGl0IFwKK2Vhc2llciB0byBhZG1pbmlzdGVyIGRldmljZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlzYy5vcmcvIgorCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7YmVnaW5saW5lPTQ7bWQ1PWM1YzY0ZDY5NjEwN2Y4NGI1NmZlMzM3ZDE0ZGExNzUzIgorCitERVBFTkRTID0gIm9wZW5zc2wgYmluZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaXNjLm9yZy9pc2MvZGhjcC8ke1BWfS9kaGNwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQtcmVsYXkgZmlsZTovL2RlZmF1bHQtcmVsYXkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1zZXJ2ZXIgZmlsZTovL2RlZmF1bHQtc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL2RoY2xpZW50LmNvbmYgZmlsZTovL2RoY3BkLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZGhjcGQuc2VydmljZSBmaWxlOi8vZGhjcmVsYXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNwZDYuc2VydmljZSAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHN5c3RlbWQKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zZXJ2ZXIgJHtQTn0tcmVsYXkiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc2VydmVyID0gImRoY3BkLnNlcnZpY2UgZGhjcGQ2LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXNlcnZlciA9ICJkaXNhYmxlIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tcmVsYXkgPSAiZGhjcmVsYXkuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tcmVsYXkgPSAiZGlzYWJsZSIKKworVEFSR0VUX0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3J2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zcnY2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2xpLWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jbGk2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtbGliYmluZD0ke1NUQUdJTkdfTElCRElSfS8gXAorICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXJlbGF5ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXJlbGF5CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGVmYXVsdC1yZWxheSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1zZXJ2ZXIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyCisKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kaGNsaWVudC5jb25mKgorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3BkLmNvbmYqCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjbGllbnQuY29uZiAke0R9JHtzeXNjb25mZGlyfS9kaGNwL2RoY2xpZW50LmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AvZGhjcGQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vZGhjbGllbnQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2NsaWVudC9zY3JpcHRzL2xpbnV4ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc2NyaXB0CisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3BkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZDYuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3JlbGF5LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcmVsYXkuc2VydmljZQorCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorCXNlZCAtaSAtZSAncyxAYmFzZV9iaW5kaXJALCR7YmFzZV9iaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBsb2NhbHN0YXRlZGlyQCwke2xvY2Fsc3RhdGVkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCit9CisKK1BBQ0tBR0VTICs9ICJkaGNwLXNlcnZlciBkaGNwLXNlcnZlci1jb25maWcgZGhjcC1jbGllbnQgZGhjcC1yZWxheSBkaGNwLW9tc2hlbGwiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSREVQRU5EU18ke1BOfS1zdGF0aWNkZXYgPSAiIgorCitGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtzYmluZGlyfS9kaGNwZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXNlcnZlciIKK1JSRUNPTU1FTkRTXyR7UE59LXNlcnZlciA9ICJkaGNwLXNlcnZlci1jb25maWciCisKK0ZJTEVTXyR7UE59LXNlcnZlci1jb25maWcgPSAiJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyICR7c3lzY29uZmRpcn0vZGhjcC9kaGNwZC5jb25mIgorCitGSUxFU18ke1BOfS1yZWxheSA9ICIke3NiaW5kaXJ9L2RoY3JlbGF5ICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdCAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZiIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJiYXNoIgorCitGSUxFU18ke1BOfS1vbXNoZWxsID0gIiR7YmluZGlyfS9vbXNoZWxsIgorCitwa2dfcG9zdGluc3RfZGhjcC1zZXJ2ZXIoKSB7CisgICAgbWtkaXIgLXAgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcAorICAgIHRvdWNoICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQubGVhc2VzCisgICAgdG91Y2ggJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzCit9CisKK3BrZ19wb3N0aW5zdF9kaGNwLWNsaWVudCgpIHsKKyAgICBta2RpciAtcCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwCit9CisKK3BrZ19wb3N0cm1fZGhjcC1zZXJ2ZXIoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CisKK3BrZ19wb3N0cm1fZGhjcC1jbGllbnQoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50Ni5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmQzYzliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkZWZpbmUgbWFjcm8gX1BBVEhfREhDUERfQ09ORiBhbmQgX1BBVEhfREhDTElFTlRfQ09ORgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgPG9lIHNwZWNpZmljPgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlcy9zaXRlLmggfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAoraW5kZXggZDg3YjMwOS4uMTdiYzQwZCAxMDA2NDQKKy0tLSBhL2luY2x1ZGVzL3NpdGUuaAorKysrIGIvaW5jbHVkZXMvc2l0ZS5oCitAQCAtMTM5LDcgKzEzOSw4IEBACisgLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdGhlIGRoY3BkLmNvbmYgZmlsZSB0byBnbyBzb21ld2hlcmUgb3RoZXIgdGhhbgorICAgIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgIEJ5IGRlZmF1bHQsIGl0IGdvZXMgaW4gL2V0Yy9kaGNwZC5jb25mLiAqLworIAorLS8qICNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwZC5jb25mIiAqLworKyNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwL2RoY3BkLmNvbmYiCisrI2RlZmluZSBfUEFUSF9ESENMSUVOVF9DT05GCSIvZXRjL2RoY3AvZGhjbGllbnQuY29uZiIKKyAKKyAvKiBOZXR3b3JrIEFQSSBkZWZpbml0aW9ucy4gICBZb3UgZG8gbm90IG5lZWQgdG8gY2hvb3NlIG9uZSBvZiB0aGVzZSAtIGlmCisgICAgeW91IGRvbid0IGNob29zZSwgb25lIHdpbGwgYmUgY2hvc2VuIGZvciB5b3UgaW4geW91ciBzeXN0ZW0ncyBjb25maWcKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2VhNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorZGhjcC1jbGllbnQ6IGZpeCBpbnZva2UgZGhjbGllbnQtc2NyaXB0IGZhaWxlZCBvbiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0KKworSW4gcmVhZC1vbmx5IGZpbGUgc3lzdGVtLCAnL2V0YycgaXMgb24gdGhlIHJlYWRvbmx5IHBhcnRpdGlvbiwKK2FuZCAnL2V0Yy9yZXNvbHYuY29uZicgaXMgc3ltbGlua2VkIHRvIGEgc2VwYXJhdGUgd3JpdGFibGUKK3BhcnRpdGlvbi4KKworSW4gdGhpcyBzaXR1YXRpb24sIHdlIHNob3VsZCB1c2Ugc2hlbGwgdmFyaWFibGUgdG8gaW5zdGVhZCBvZgordGVtcCBmaWxlcyAnL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCcgYW5kICcvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2xpZW50L3NjcmlwdHMvbGludXggfCAyMCArKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAorLS0tIGEvY2xpZW50L3NjcmlwdHMvbGludXgKKysrKyBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CitAQCAtMjcsMjcgKzI3LDI1IEBAIGlwPS9zYmluL2lwCisgCisgbWFrZV9yZXNvbHZfY29uZigpIHsKKyAgIGlmIFsgeCIkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnMiICE9IHggXTsgdGhlbgorLSAgICBjYXQgL2Rldi9udWxsID4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorLSAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICByZXNvbHZfY29uZj0iIgorICAgICBpZiBbIHgiJG5ld19kb21haW5fc2VhcmNoIiAhPSB4IF07IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9zZWFyY2ggPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZWxpZiBbIHgiJG5ld19kb21haW5fbmFtZSIgIT0geCBdOyB0aGVuCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIERIQ1AgJ0RvbWFpbiBOYW1lIE9wdGlvbicgaXMgcmVhbGx5IGp1c3QgYSBkb21haW4KKyAgICAgICAjIG5hbWUsIGFuZCB0aGF0IHRoaXMgcHJhY3RpY2Ugb2YgdXNpbmcgdGhlIGRvbWFpbiBuYW1lIG9wdGlvbiBhcworICAgICAgICMgYSBzZWFyY2ggcGF0aCBpcyBib3RoIG5vbnN0YW5kYXJkIGFuZCBkZXByZWNhdGVkLgorLSAgICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX25hbWUgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX25hbWV9XG4iCisgICAgIGZpCisgICAgIGZvciBuYW1lc2VydmVyIGluICRuZXdfZG9tYWluX25hbWVfc2VydmVyczsgZG8KKy0gICAgICBlY2hvIG5hbWVzZXJ2ZXIgJG5hbWVzZXJ2ZXIgPj4vZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9XG4iCisgICAgIGRvbmUKKyAKKy0gICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGVsaWYgWyAieCR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30iICE9IHggXSA7IHRoZW4KKy0gICAgY2F0IC9kZXYvbnVsbCA+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CistICAgIGNobW9kIDY0NCAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICByZXNvbHZfY29uZj0iIgorIAorICAgICBpZiBbICJ4JHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0iICE9IHggXSA7IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAke25ld19kaGNwNl9kb21haW5fc2VhcmNofSA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZmkKKyAgICAgc2hvcHQgLXMgbm9jYXNlbWF0Y2ggCisgICAgIGZvciBuYW1lc2VydmVyIGluICR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30gOyBkbworQEAgLTU5LDExICs1NywxMSBAQCBtYWtlX3Jlc29sdl9jb25mKCkgeworICAgICAgIGVsc2UKKyAJem9uZV9pZD0KKyAgICAgICBmaQorLSAgICAgIGVjaG8gbmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWQgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKysgICAgICByZXNvbHZfY29uZj0iJHtyZXNvbHZfY29uZn1uYW1lc2VydmVyICR7bmFtZXNlcnZlcn0kem9uZV9pZFxuIgorICAgICBkb25lCisgICAgIHNob3B0IC11IG5vY2FzZW1hdGNoIAorIAorLSAgICBtdiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NiAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGZpCisgfQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE2NjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCistLS0gY2xpZW50L3NjcmlwdHMvYnNkb3MKKysrKyBjbGllbnQvc2NyaXB0cy9ic2RvcworQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvZnJlZWJzZAorKysrIGNsaWVudC9zY3JpcHRzL2ZyZWVic2QKK0BAIC01Nyw2ICs1NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC02OSw2ICs2OSwxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL25ldGJzZAorKysrIGNsaWVudC9zY3JpcHRzL25ldGJzZAorQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvb3BlbmJzZAorKysrIGNsaWVudC9zY3JpcHRzL29wZW5ic2QKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL3NvbGFyaXMKKysrKyBjbGllbnQvc2NyaXB0cy9zb2xhcmlzCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5MWZkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMTEvMzAvMjAxMAorLS13aXRoLWxpYmJpbmQ9UEFUSCBpcyBhdmFpbGFibGUgYnV0IG5vdCB1c2VkIGJ5IE1ha2VmaWxlLAordGhpcyBwYXRjaCBpcyB0byBhbGxvdyBidWlsZGluZyB3aXRoIGV4dGVybmFsIGJpbmQKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBkaGNwLTQuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9NYWtlZmlsZS5hbQorQEAgLTI1LDcgKzI1LDcgQEAgRVhUUkFfRElTVCA9IFJFTE5PVEVTIExJQ0VOU0UgXAorIAkgICAgIGJpbmQvTWFrZWZpbGUgYmluZC9iaW5kLnRhci5neiBiaW5kL3ZlcnNpb24udG1wIFwKKyAJICAgICBjb21tb24vdGVzdHMvQXRmZmlsZSBzZXJ2ZXIvdGVzdHMvQXRmZmlsZQorIAorLVNVQkRJUlMgPSBiaW5kIGluY2x1ZGVzIHRlc3RzIGNvbW1vbiBkc3Qgb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgorK1NVQkRJUlMgPSBpbmNsdWRlcyB0ZXN0cyBjb21tb24gZHN0IG9tYXBpcCBjbGllbnQgZGhjcGN0bCByZWxheSBzZXJ2ZXIKKyAKKyBub2Jhc2VfaW5jbHVkZV9IRUFERVJTID0gZGhjcGN0bC9kaGNwY3RsLmgKKyAKK0luZGV4OiBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTQsOCArNCw4IEBAIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYworIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKKyAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKKyAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKKy1kaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmRucy5hIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrZGhjbGllbnRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgXAorKwkJICQobGliYmluZCkvbGliZG5zLmEgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgbWFuX01BTlMgPSBkaGNsaWVudC44IGRoY2xpZW50LXNjcmlwdC44IGRoY2xpZW50LmNvbmYuNSBkaGNsaWVudC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorSW5kZXg6IGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCitAQCAtNTY2LDYgKzU2Niw3IEBAIG5vKQorIAlsaWJiaW5kPSIkdXNlX2xpYmJpbmQiCisgCTs7CisgZXNhYworK0FDX1NVQlNUKFtsaWJiaW5kXSkKKyAKKyAjIE9wZW5MREFQIHN1cHBvcnQuCisgQUNfQVJHX1dJVEgobGRhcCwKK0luZGV4OiBkaGNwLTQuMy4wL2RoY3BjdGwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvZGhjcGN0bC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvZGhjcGN0bC9NYWtlZmlsZS5hbQorQEAgLTYsMTIgKzYsMTIgQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgb21zaGVsbF9TT1VSQ0VTID0gb21zaGVsbC5jCisgb21zaGVsbF9MREFERCA9IGxpYmRoY3BjdGwuYSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgICAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistCSAgICAgICAgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJICAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKwkgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIAorIGxpYmRoY3BjdGxfYV9TT1VSQ0VTID0gZGhjcGN0bC5jIGNhbGxiYWNrLmMgcmVtb3RlLmMKKyAKKyBjbHRlc3RfU09VUkNFUyA9IGNsdGVzdC5jCisgY2x0ZXN0X0xEQUREID0gbGliZGhjcGN0bC5hIC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLSAgICAgICAgICAgICAgIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCSAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKyAgICAgICAgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorSW5kZXg6IGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMTAsNiArMTAsNiBAQCBtYW5fTUFOUyA9IG9tYXBpLjMKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBzdnRlc3RfU09VUkNFUyA9IHRlc3QuYworLXN2dGVzdF9MREFERCA9IGxpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKytzdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrCQkkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3JlbGF5L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL3JlbGF5L01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTMsOCArMyw4IEBAIEFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3QKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworIGRoY3JlbGF5X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCQkgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCQkgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysJCSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyBtYW5fTUFOUyA9IGRoY3JlbGF5LjgKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTE0LDggKzE0LDggQEAgZGhjcGRfU09VUkNFUyA9IGRoY3BkLmMgZGhjcC5jIGJvb3RwLmMgYworIAorIGRoY3BkX0NGTEFHUyA9ICQoTERBUF9DRkxBR1MpCisgZGhjcGRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgLi4vZGhjcGN0bC9saWJkaGNwY3RsLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkgICAgICAuLi9iaW5kL2xpYi9saWJkbnMuYSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwuYSAkKGxpYmJpbmQpL2xpYmlycy5hIFwKKysJICAgICAgJChsaWJiaW5kKS9saWJkbnMuYSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKKyBtYW5fTUFOUyA9IGRoY3BkLjggZGhjcGQuY29uZi41IGRoY3BkLmxlYXNlcy41CisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTc1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitSZWJhc2UgdG8gNC4zLjEKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9NYWtlZmlsZS5hbSAgfCA2ICsrKystLQorIGNvbW1vbi9NYWtlZmlsZS5hbSAgfCAyICstCisgZGhjcGN0bC9NYWtlZmlsZS5hbSB8IDIgKysKKyBkc3QvTWFrZWZpbGUuYW0gICAgIHwgMiArLQorIG9tYXBpcC9NYWtlZmlsZS5hbSAgfCAyICsrCisgcmVsYXkvTWFrZWZpbGUuYW0gICB8IDIgKy0KKyBzZXJ2ZXIvTWFrZWZpbGUuYW0gIHwgMiArLQorIDcgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9NYWtlZmlsZS5hbSBiL2NsaWVudC9NYWtlZmlsZS5hbQoraW5kZXggODQxMTk2MC4uMTc0MGY3MiAxMDA2NDQKKy0tLSBhL2NsaWVudC9NYWtlZmlsZS5hbQorKysrIGIvY2xpZW50L01ha2VmaWxlLmFtCitAQCAtNCw2ICs0LDggQEAKKyAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgorIFNVQkRJUlMgPSAuIHRlc3RzCisgCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKysKKyBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY2xpZW50LmNvbmYuZXhhbXBsZQorIHNiaW5fUFJPR1JBTVMgPSBkaGNsaWVudAorIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYyBkaGM2LmMgXAorQEAgLTE3LDggKzE5LDggQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgZGhjbGllbnQubzogZGhjbGllbnQuYworIAkkKENPTVBJTEUpIC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCistCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgZGhjbGllbnQuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGNsaWVudC5jCisgCisgZGhjNi5vOiBkaGM2LmMKKyAJJChDT01QSUxFKSAtRENMSUVOVF9QQVRIPSciUEFUSD0kKHNiaW5kaXIpOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIicgXAorLQkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jIGRoYzYuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGM2LmMKK2RpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KK2luZGV4IGVkZGVmMDUuLjVjZTA0NWYgMTAwNjQ0CistLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KKysrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtSS4uIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisgQU1fQ0ZMQUdTID0gJChMREFQX0NGTEFHUykKKyAKKyBub2luc3RfTElCUkFSSUVTID0gbGliZGhjcC5hCitkaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK2luZGV4IDI5ODdhNTMuLmNkNzJkNzUgMTAwNjQ0CistLS0gYS9kaGNwY3RsL01ha2VmaWxlLmFtCisrKysgYi9kaGNwY3RsL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKKysKKyBiaW5fUFJPR1JBTVMgPSBvbXNoZWxsCisgbGliX0xJQlJBUklFUyA9IGxpYmRoY3BjdGwuYQorIG5vaW5zdF9QUk9HUkFNUyA9IGNsdGVzdAorZGlmZiAtLWdpdCBhL2RzdC9NYWtlZmlsZS5hbSBiL2RzdC9NYWtlZmlsZS5hbQoraW5kZXggODkzN2ZlOC4uYTE0Nzk4YiAxMDA2NDQKKy0tLSBhL2RzdC9NYWtlZmlsZS5hbQorKysrIGIvZHN0L01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1BTV9DUFBGTEFHUyA9IC1ETUlOSVJFU19MSUIgLURITUFDX01ENQorK0FNX0NQUEZMQUdTID0gLURNSU5JUkVTX0xJQiAtREhNQUNfTUQ1IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGxpYl9MSUJSQVJJRVMgPSBsaWJkc3QuYQorIAorZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQoraW5kZXggNTA3NDQ3OS4uOWMwZmFiMyAxMDA2NDQKKy0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworKworIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCisgbm9pbnN0X1BST0dSQU1TID0gc3Z0ZXN0CisgCitkaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQoraW5kZXggZWM3MmEzMS4uZjg0MjA3MSAxMDA2NDQKKy0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCisrKysgYi9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5CisgZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK2luZGV4IGE0NDZmMGIuLmQwYjg3M2EgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjcGQuY29uZi5leGFtcGxlCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3BkCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlMTBiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDIgMjM6NTk6MTEgMjAxMiArMDIwMAorCitGcm9tIDQuMi4wIGZpbmFsIHJlbGVhc2UsIC1sY3J5cHRvIGNoZWNrIHdhcyByZW1vdmVkIGFuZCB3ZSBjb21waWxlIHN0YXRpYyBsaWJyYXJpZXMKK2Zyb20gYmluZCB0aGF0IGFyZSBsaW5rZWQgdG8gbGliY3J5cHRvLiBUaGlzIGlzIHdoeSBpIGFkZGVkIGEgcGF0Y2ggaW4gb3JkZXIgdG8gYWRkCistbGNyeXB0byB0byBMSUJTLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRoY3AtNC4yLjMtUDItcjAvZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMi4zLVAyLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDItMDIgMTg6MDQ6MjAuODQzMDIzMTk2ICswMjAwCisrKysgZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMJMjAxMi0wMi0wMiAxNzo1ODoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTYsNiArNDU2LDEwIEBACisgIyBMb29rIGZvciBvcHRpb25hbCBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldC5oIG5ldC9pZl9kbC5oIG5ldC9pZjYuaCByZWdleC5oKQorIAorKyMgZmluZCBhbiBNRDUgbGlicmFyeQorK0FDX1NFQVJDSF9MSUJTKE1ENV9Jbml0LCBbY3J5cHRvXSkKKytBQ19TRUFSQ0hfTElCUyhNRDVJbml0LCBbY3J5cHRvXSkKKysKKyAjIFNvbGFyaXMgbmVlZHMgc29tZSBsaWJyYXJpZXMgZm9yIGZ1bmN0aW9ucworIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgW3NvY2tldF0pCisgQUNfU0VBUkNIX0xJQlMoaW5ldF9udG9hLCBbbnNsXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZGQ2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCkBAIC0wLDAgKzEsMTc2IEBACitGb3VuZCB0aGlzIHBhdGNoIGhlcmU6CitodHRwczovL2xpc3RzLmlzYy5vcmcvcGlwZXJtYWlsL2RoY3AtdXNlcnMvMjAxMS1KYW51YXJ5LzAxMjkxMC5odG1sCisKK2FuZCBtYWRlIHNvbWUgYWRqdXN0bWVudHMvdXBkYXRlcyB0byBtYWtlIGl0IHdvcmsgd2l0aCB0aGlzIHZlcnNpb24uCitXYXNuJ3QgYWJsZSB0byBmaW5kIHRoYXQgd2h5IHRoaXMgcGF0Y2ggd2FzIG5vdCBhY2NlcHRlZCBieSBJU0MgREhDUCBkZXZlbG9wZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0gZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eC5vcmlnCTIwMTMtMDktMDQgMTI6MjI6NTUuMDAwMDAwMDAwICswNTAwCisrKysgZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eAkyMDEzLTA5LTA0IDEyOjUyOjE5LjA2ODc2MTUxOCArMDUwMAorQEAgLTEwMywxNyArMTAzLDExIEBACisgaWYgWyB4JG9sZF9icm9hZGNhc3RfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgIG9sZF9icm9hZGNhc3RfYXJnPSJicm9hZGNhc3QgJG9sZF9icm9hZGNhc3RfYWRkcmVzcyIKKyBmaQorLWlmIFsgeCRuZXdfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBuZXdfc3VibmV0X2FyZz0ibmV0bWFzayAkbmV3X3N1Ym5ldF9tYXNrIgorLWZpCistaWYgWyB4JG9sZF9zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KKy0gIG9sZF9zdWJuZXRfYXJnPSJuZXRtYXNrICRvbGRfc3VibmV0X21hc2siCistZmkKKy1pZiBbIHgkYWxpYXNfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBhbGlhc19zdWJuZXRfYXJnPSJuZXRtYXNrICRhbGlhc19zdWJuZXRfbWFzayIKKytpZiBbIC1uICIkbmV3X3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIG5ld19tYXNrPSIvJG5ld19zdWJuZXRfbWFzayIKKyBmaQorLWlmIFsgeCRuZXdfaW50ZXJmYWNlX210dSAhPSB4IF07IHRoZW4KKy0gIG10dV9hcmc9Im10dSAkbmV3X2ludGVyZmFjZV9tdHUiCisraWYgWyAtbiAiJGFsaWFzX3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIGFsaWFzX21hc2s9Ii8kYWxpYXNfc3VibmV0X21hc2siCisgZmkKKyBpZiBbIHgkSUZfTUVUUklDICE9IHggXTsgdGhlbgorICAgbWV0cmljX2FyZz0ibWV0cmljICRJRl9NRVRSSUMiCitAQCAtMTI3LDkgKzEyMSw5IEBACisgaWYgWyB4JHJlYXNvbiA9IHhQUkVJTklUIF07IHRoZW4KKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgICAjIEJyaW5nIGRvd24gYWxpYXMgaW50ZXJmYWNlLiBJdHMgcm91dGVzIHdpbGwgZGlzYXBwZWFyIHRvby4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSAwIHVwCisrICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IHVwCisgCisgICAjIFdlIG5lZWQgdG8gZ2l2ZSB0aGUga2VybmVsIHNvbWUgdGltZSB0byBnZXQgdGhlIGludGVyZmFjZSB1cC4KKyAgIHNsZWVwIDEKK0BAIC0xNTYsMjUgKzE1MCwzMCBAQAorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF0gJiYgXAorIAkJWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCRvbGRfaXBfYWRkcmVzcyBdOyB0aGVuCisgICAgICMgUG9zc2libGUgbmV3IGFsaWFzLiBSZW1vdmUgb2xkIGFsaWFzLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdICYmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4JG5ld19pcF9hZGRyZXNzIF07IHRoZW4KKyAgICAgIyBJUCBhZGRyZXNzIGNoYW5nZWQuIEJyaW5naW5nIGRvd24gdGhlIGludGVyZmFjZSB3aWxsIGRlbGV0ZSBhbGwgcm91dGVzLAorICAgICAjIGFuZCBjbGVhciB0aGUgQVJQIGNhY2hlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgMCBkb3duCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKyAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgPSB4IF0gfHwgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHgkbmV3X2lwX2FkZHJlc3MgXSB8fCBcCisgICAgICBbIHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRUJPT1QgXTsgdGhlbgorIAorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisrICAgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAgICMgc2V0IE1UVQorKyAgICAgICR7aXB9IGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gbXR1ICR7bmV3X2ludGVyZmFjZV9tdHV9CisrICAgIGZpCisgICAgICMgQWRkIGEgbmV0d29yayByb3V0ZSB0byB0aGUgY29tcHV0ZWQgbmV0d29yayBhZGRyZXNzLgorICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICBpZiBbICJ4JG5ld19zdWJuZXRfbWFzayIgPSAieDI1NS4yNTUuMjU1LjI1NSIgXSA7IHRoZW4KKy0Jcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKKysgICAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke3JvdXRlcn0gZGV2ICRpbnRlcmZhY2UgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgZmkKKy0gICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkcm91dGVyICRtZXRyaWNfYXJnIGRldiAkaW50ZXJmYWNlCisrICAgICAgJHtpcH0gLTQgcm91dGUgYWRkIGRlZmF1bHQgdmlhICR7cm91dGVyfSBkZXYgJHtpbnRlcmZhY2V9IFwKKysgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgIyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGFkZHJlc3MsIGhhdmUgd2UgY2hhbmdlZCBvdGhlciBvcHRpb25zICAgICAgICAgICAKK0BAIC0xODIsMjEgKzE4MSwyMyBAQAorICAgICBpZiBbIHgkbmV3X3JvdXRlcnMgIT0geCBdICYmIFsgeCRuZXdfcm91dGVycyAhPSB4JG9sZF9yb3V0ZXJzIF0gOyB0aGVuCisgICAgICAgIyBpZiB3ZSd2ZSBjaGFuZ2VkIHJvdXRlcnMgZGVsZXRlIHRoZSBvbGQgYW5kIGFkZCB0aGUgbmV3LgorICAgICAgIGZvciByb3V0ZXIgaW4gJG9sZF9yb3V0ZXJzOyBkbworLSAgICAgICAgcm91dGUgZGVsIGRlZmF1bHQgZ3cgJHJvdXRlcgorKyAgICAgICAgJHtpcH0gLTQgcm91dGUgZGVsZXRlIGRlZmF1bHQgdmlhICR7cm91dGVyfQorICAgICAgIGRvbmUKKyAgICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQkgIHJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCistCWZpCistCXJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysJICAgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKysJICAgIGZpCisrICAgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQorICAgICAgIGRvbmUKKyAgICAgZmkKKyAgIGZpCisgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOworICAgIHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowIGluZXQgJGFsaWFzX2lwX2FkZHJlc3MgJGFsaWFzX3N1Ym5ldF9hcmcKKy0gICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzICRpbnRlcmZhY2U6MAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSR7YWxpYXNfbWFza30gXAorKyAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSBkZXYgJHtpbnRlcmZhY2V9ID4vZGV2L251bGwgMj4mMQorICAgZmkKKyAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgIGV4aXRfd2l0aF9ob29rcyAwCitAQCAtMjA2LDQyICsyMDcsNDkgQEAKKyAgICB8fCBbIHgkcmVhc29uID0geFNUT1AgXTsgdGhlbgorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgVHVybiBvZmYgYWxpYXMgaW50ZXJmYWNlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgU2h1dCBkb3duIGludGVyZmFjZSwgd2hpY2ggd2lsbCBkZWxldGUgcm91dGVzIGFuZCBjbGVhciBhcnAgY2FjaGUuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorICAgZmkKKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZworLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCisrICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX25ldHdvcmtfYXJnfSBcCisrICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICBmaQorICAgZXhpdF93aXRoX2hvb2tzIDAKKyBmaQorIAorIGlmIFsgeCRyZWFzb24gPSB4VElNRU9VVCBdOyB0aGVuCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICBmaQorKyAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKysgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAjIHNldCBNVFUKKysgICAgaXAgbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSBtdHUgJHtuZXdfaW50ZXJmYWNlX210dX0KKyAgIGZpCistICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKyAgIHNldCAkbmV3X3JvdXRlcnMKKyAgIGlmIHBpbmcgLXEgLWMgMSAkMTsgdGhlbgorICAgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgXAorIAkJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCistICAgICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzIGRldiAkaW50ZXJmYWNlOjAKKysgICAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICAgIGZpCisgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbworICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQlyb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQorKwkgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKyAgICAgICBmaQorLSAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgZG9uZQorICAgICBtYWtlX3Jlc29sdl9jb25mCisgICAgIGV4aXRfd2l0aF9ob29rcyAwCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgorKyAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9CisgICBleGl0X3dpdGhfaG9va3MgMQorIGZpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTA1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGRoY3AuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVhMjg0ODc1ZGQyYzEyZGRkMzg4NDE2ZDY5MTU2YTY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYyNDZjOWIzNTg3NTlmNmNkY2M0NTEwNGNhYWY3NmU3MzJhMjExZGJiYmJmNjRhMjFmNDk5YzhkYjEyOTgxNjUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXJlbGF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjFmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheQpAQCAtMCwwICsxLDEyIEBACisjIERlZmF1bHRzIGZvciBkaGNwLXJlbGF5IGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaGNwLXJlbGF5CisKKyMgV2hhdCBzZXJ2ZXJzIHNob3VsZCB0aGUgREhDUCByZWxheSBmb3J3YXJkIHJlcXVlc3RzIHRvPworIyBlLmc6IFNFUlZFUlM9IjE5Mi4xNjguMC4xIgorU0VSVkVSUz0iIgorCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1AgcmVsYXkgKGRocmVsYXkpIHNlcnZlIERIQ1AgcmVxdWVzdHM/CitJTlRFUkZBQ0VTPSIiCisKKyMgQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgREhDUCByZWxheSBkYWVtb24/CitPUFRJT05TPSIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1zZXJ2ZXIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1zZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NWQxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlcgpAQCAtMCwwICsxLDcgQEAKKyMgRGVmYXVsdHMgZm9yIGRoY3AgaW5pdHNjcmlwdAorIyBzb3VyY2VkIGJ5IC9ldGMvaW5pdC5kL2RoY3Atc2VydmVyCisjIGluc3RhbGxlZCBhdCAvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIgYnkgdGhlIG1haW50YWluZXIgc2NyaXB0cworCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1Agc2VydmVyIChkaGNwZCkgc2VydmUgREhDUCByZXF1ZXN0cz8KKyMgICAgICAgU2VwYXJhdGUgbXVsdGlwbGUgaW50ZXJmYWNlcyB3aXRoIHNwYWNlcywgZS5nLiAiZXRoMCBldGgxIi4KK0lOVEVSRkFDRVM9IiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2ZGNmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29uZmlndXJhdGlvbiBmaWxlIGZvciAvc2Jpbi9kaGNsaWVudCwgd2hpY2ggaXMgaW5jbHVkZWQgaW4gRGViaWFuJ3MKKyMJZGhjcDMtY2xpZW50IHBhY2thZ2UuCisjCisjIFRoaXMgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkaGNsaWVudC4gU2VlIGRoY2xpZW50LmNvbmYncworIwltYW4gcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZQorIwlhbmQgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgcGFyYW1ldGVycyB1bmRlcnN0b29kIGJ5CisjCWRoY2xpZW50LgorIworIyBOb3JtYWxseSwgaWYgdGhlIERIQ1Agc2VydmVyIHByb3ZpZGVzIHJlYXNvbmFibGUgaW5mb3JtYXRpb24gYW5kIGRvZXMKKyMJbm90IGxlYXZlIGFueXRoaW5nIG91dCAobGlrZSB0aGUgZG9tYWluIG5hbWUsIGZvciBleGFtcGxlKSwgdGhlbgorIwlmZXcgY2hhbmdlcyBtdXN0IGJlIG1hZGUgdG8gdGhpcyBmaWxlLCBpZiBhbnkuCisjCisKKyNzZW5kIGhvc3QtbmFtZSAiYW5kYXJlLmZ1Z3VlLmNvbSI7Cisjc2VuZCBkaGNwLWNsaWVudC1pZGVudGlmaWVyIDE6MDphMDoyNDphYjpmYjo5YzsKKyNzZW5kIGRoY3AtbGVhc2UtdGltZSAzNjAwOworI3N1cGVyc2VkZSBkb21haW4tbmFtZSAiZnVndWUuY29tIGhvbWUudml4LmNvbSI7CisjcHJlcGVuZCBkb21haW4tbmFtZS1zZXJ2ZXJzIDEyNy4wLjAuMTsKK3JlcXVlc3Qgc3VibmV0LW1hc2ssIGJyb2FkY2FzdC1hZGRyZXNzLCB0aW1lLW9mZnNldCwgcm91dGVycywKKwlkb21haW4tbmFtZSwgZG9tYWluLW5hbWUtc2VydmVycywgaG9zdC1uYW1lLAorCW5ldGJpb3MtbmFtZS1zZXJ2ZXJzLCBuZXRiaW9zLXNjb3BlOworI3JlcXVpcmUgc3VibmV0LW1hc2ssIGRvbWFpbi1uYW1lLXNlcnZlcnM7CisjdGltZW91dCA2MDsKKyNyZXRyeSA2MDsKKyNyZWJvb3QgMTA7Cisjc2VsZWN0LXRpbWVvdXQgNTsKKyNpbml0aWFsLWludGVydmFsIDI7Cisjc2NyaXB0ICIvZXRjL2RoY3AzL2RoY2xpZW50LXNjcmlwdCI7CisjbWVkaWEgIi1saW5rMCAtbGluazEgLWxpbmsyIiwgImxpbmswIGxpbmsxIjsKKyNyZWplY3QgMTkyLjMzLjEzNy4yMDk7CisKKyNhbGlhcyB7CisjICBpbnRlcmZhY2UgImV0aDAiOworIyAgZml4ZWQtYWRkcmVzcyAxOTIuNS41LjIxMzsKKyMgIG9wdGlvbiBzdWJuZXQtbWFzayAyNTUuMjU1LjI1NS4yNTU7CisjfQorCisjbGVhc2UgeworIyAgaW50ZXJmYWNlICJldGgwIjsKKyMgIGZpeGVkLWFkZHJlc3MgMTkyLjMzLjEzNy4yMDA7CisjICBtZWRpdW0gImxpbmswIGxpbmsxIjsKKyMgIG9wdGlvbiBob3N0LW5hbWUgImFuZGFyZS5zd2lmdG1lZGlhLmNvbSI7CisjICBvcHRpb24gc3VibmV0LW1hc2sgMjU1LjI1NS4yNTUuMDsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxOTIuMzMuMTM3LjI1NTsKKyMgIG9wdGlvbiByb3V0ZXJzIDE5Mi4zMy4xMzcuMjUwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgMTI3LjAuMC4xOworIyAgcmVuZXcgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICByZWJpbmQgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICBleHBpcmUgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDAxYzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYKQEAgLTAsMCArMSwxMDggQEAKKyMKKyMgU2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgSVNDIGRoY3BkIGZvciBEZWJpYW4KKyMKKyMgJElkOiBkaGNwZC5jb25mLHYgMS4xLjEuMSAyMDAyLzA1LzIxIDAwOjA3OjQ0IHBlbG95IEV4cCAkCisjCisKKyMgVGhlIGRkbnMtdXBkYXRlcy1zdHlsZSBwYXJhbWV0ZXIgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHNlcnZlciB3aWxsCisjIGF0dGVtcHQgdG8gZG8gYSBETlMgdXBkYXRlIHdoZW4gYSBsZWFzZSBpcyBjb25maXJtZWQuIFdlIGRlZmF1bHQgdG8gdGhlCisjIGJlaGF2aW9yIG9mIHRoZSB2ZXJzaW9uIDIgcGFja2FnZXMgKCdub25lJywgc2luY2UgREhDUCB2MiBkaWRuJ3QKKyMgaGF2ZSBzdXBwb3J0IGZvciBERE5TLikKK2RkbnMtdXBkYXRlLXN0eWxlIG5vbmU7CisKKyMgb3B0aW9uIGRlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgc3VwcG9ydGVkIG5ldHdvcmtzLi4uCitvcHRpb24gZG9tYWluLW5hbWUgImV4YW1wbGUub3JnIjsKK29wdGlvbiBkb21haW4tbmFtZS1zZXJ2ZXJzIG5zMS5leGFtcGxlLm9yZywgbnMyLmV4YW1wbGUub3JnOworCitkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworbWF4LWxlYXNlLXRpbWUgNzIwMDsKKworIyBJZiB0aGlzIERIQ1Agc2VydmVyIGlzIHRoZSBvZmZpY2lhbCBESENQIHNlcnZlciBmb3IgdGhlIGxvY2FsCisjIG5ldHdvcmssIHRoZSBhdXRob3JpdGF0aXZlIGRpcmVjdGl2ZSBzaG91bGQgYmUgdW5jb21tZW50ZWQuCisjYXV0aG9yaXRhdGl2ZTsKKworIyBVc2UgdGhpcyB0byBzZW5kIGRoY3AgbG9nIG1lc3NhZ2VzIHRvIGEgZGlmZmVyZW50IGxvZyBmaWxlICh5b3UgYWxzbworIyBoYXZlIHRvIGhhY2sgc3lzbG9nLmNvbmYgdG8gY29tcGxldGUgdGhlIHJlZGlyZWN0aW9uKS4KK2xvZy1mYWNpbGl0eSBsb2NhbDc7CisKKyMgTm8gc2VydmljZSB3aWxsIGJlIGdpdmVuIG9uIHRoaXMgc3VibmV0LCBidXQgZGVjbGFyaW5nIGl0IGhlbHBzIHRoZSAKKyMgREhDUCBzZXJ2ZXIgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayB0b3BvbG9neS4KKworI3N1Ym5ldCAxMC4xNTIuMTg3LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKKyN9CisKKyMgVGhpcyBpcyBhIHZlcnkgYmFzaWMgc3VibmV0IGRlY2xhcmF0aW9uLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC4yNTQuMjM5LjEwIDEwLjI1NC4yMzkuMjA7CisjICBvcHRpb24gcm91dGVycyBydHItMjM5LTAtMS5leGFtcGxlLm9yZywgcnRyLTIzOS0wLTIuZXhhbXBsZS5vcmc7CisjfQorCisjIFRoaXMgZGVjbGFyYXRpb24gYWxsb3dzIEJPT1RQIGNsaWVudHMgdG8gZ2V0IGR5bmFtaWMgYWRkcmVzc2VzLAorIyB3aGljaCB3ZSBkb24ndCByZWFsbHkgcmVjb21tZW5kLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMzIgbmV0bWFzayAyNTUuMjU1LjI1NS4yMjQgeworIyAgcmFuZ2UgZHluYW1pYy1ib290cCAxMC4yNTQuMjM5LjQwIDEwLjI1NC4yMzkuNjA7CisjICBvcHRpb24gYnJvYWRjYXN0LWFkZHJlc3MgMTAuMjU0LjIzOS4zMTsKKyMgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMzktMzItMS5leGFtcGxlLm9yZzsKKyN9CisKKyMgQSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBmb3IgYW4gaW50ZXJuYWwgc3VibmV0LgorI3N1Ym5ldCAxMC41LjUuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC41LjUuMjYgMTAuNS41LjMwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgbnMxLmludGVybmFsLmV4YW1wbGUub3JnOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lICJpbnRlcm5hbC5leGFtcGxlLm9yZyI7CisjICBvcHRpb24gcm91dGVycyAxMC41LjUuMTsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxMC41LjUuMzE7CisjICBkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworIyAgbWF4LWxlYXNlLXRpbWUgNzIwMDsKKyN9CisKKyMgSG9zdHMgd2hpY2ggcmVxdWlyZSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgbGlzdGVkIGluCisjIGhvc3Qgc3RhdGVtZW50cy4gICBJZiBubyBhZGRyZXNzIGlzIHNwZWNpZmllZCwgdGhlIGFkZHJlc3Mgd2lsbCBiZQorIyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKGlmIHBvc3NpYmxlKSwgYnV0IHRoZSBob3N0LXNwZWNpZmljIGluZm9ybWF0aW9uCisjIHdpbGwgc3RpbGwgY29tZSBmcm9tIHRoZSBob3N0IGRlY2xhcmF0aW9uLgorCisjaG9zdCBwYXNzYWNhZ2xpYSB7CisjICBoYXJkd2FyZSBldGhlcm5ldCAwOjA6YzA6NWQ6YmQ6OTU7CisjICBmaWxlbmFtZSAidm11bml4LnBhc3NhY2FnbGlhIjsKKyMgIHNlcnZlci1uYW1lICJ0b2NjYXRhLmZ1Z3VlLmNvbSI7CisjfQorCisjIEZpeGVkIElQIGFkZHJlc3NlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZm9yIGhvc3RzLiAgIFRoZXNlIGFkZHJlc3NlcworIyBzaG91bGQgbm90IGFsc28gYmUgbGlzdGVkIGFzIGJlaW5nIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhc3NpZ25tZW50LgorIyBIb3N0cyBmb3Igd2hpY2ggZml4ZWQgSVAgYWRkcmVzc2VzIGhhdmUgYmVlbiBzcGVjaWZpZWQgY2FuIGJvb3QgdXNpbmcKKyMgQk9PVFAgb3IgREhDUC4gICBIb3N0cyBmb3Igd2hpY2ggbm8gZml4ZWQgYWRkcmVzcyBpcyBzcGVjaWZpZWQgY2FuIG9ubHkKKyMgYmUgYm9vdGVkIHdpdGggREhDUCwgdW5sZXNzIHRoZXJlIGlzIGFuIGFkZHJlc3MgcmFuZ2Ugb24gdGhlIHN1Ym5ldAorIyB0byB3aGljaCBhIEJPT1RQIGNsaWVudCBpcyBjb25uZWN0ZWQgd2hpY2ggaGFzIHRoZSBkeW5hbWljLWJvb3RwIGZsYWcKKyMgc2V0LgorI2hvc3QgZmFudGFzaWEgeworIyAgaGFyZHdhcmUgZXRoZXJuZXQgMDg6MDA6MDc6MjY6YzA6YTU7CisjICBmaXhlZC1hZGRyZXNzIGZhbnRhc2lhLmZ1Z3VlLmNvbTsKKyN9CisKKyMgWW91IGNhbiBkZWNsYXJlIGEgY2xhc3Mgb2YgY2xpZW50cyBhbmQgdGhlbiBkbyBhZGRyZXNzIGFsbG9jYXRpb24KKyMgYmFzZWQgb24gdGhhdC4gICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBhIGNhc2Ugd2hlcmUgYWxsIGNsaWVudHMKKyMgaW4gYSBjZXJ0YWluIGNsYXNzIGdldCBhZGRyZXNzZXMgb24gdGhlIDEwLjE3LjIyNC8yNCBzdWJuZXQsIGFuZCBhbGwKKyMgb3RoZXIgY2xpZW50cyBnZXQgYWRkcmVzc2VzIG9uIHRoZSAxMC4wLjI5LzI0IHN1Ym5ldC4KKworI2NsYXNzICJmb28iIHsKKyMgIG1hdGNoIGlmIHN1YnN0cmluZyAob3B0aW9uIHZlbmRvci1jbGFzcy1pZGVudGlmaWVyLCAwLCA0KSA9ICJTVU5XIjsKKyN9CisKKyNzaGFyZWQtbmV0d29yayAyMjQtMjkgeworIyAgc3VibmV0IDEwLjE3LjIyNC4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMjQuZXhhbXBsZS5vcmc7CisjICB9CisjICBzdWJuZXQgMTAuMC4yOS4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yOS5leGFtcGxlLm9yZzsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBhbGxvdyBtZW1iZXJzIG9mICJmb28iOworIyAgICByYW5nZSAxMC4xNy4yMjQuMTAgMTAuMTcuMjI0LjI1MDsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBkZW55IG1lbWJlcnMgb2YgImZvbyI7CisjICAgIHJhbmdlIDEwLjAuMjkuMTAgMTAuMC4yOS4yMzA7CisjICB9CisjfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRmOTNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjQgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkLnBpZAorRW52aXJvbm1lbnRGaWxlPUBTWVNDT05GRElSQC9kZWZhdWx0L2RoY3Atc2VydmVyCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9zeXNjb25maWcvZGhjcC1zZXJ2ZXIKK0V4ZWNTdGFydFByZT1AYmFzZV9iaW5kaXJAL3RvdWNoIEBsb2NhbHN0YXRlZGlyQC9saWIvZGhjcC9kaGNwZC5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQucGlkICRESENQREFSR1MgLXEgJElOVEVSRkFDRVMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkNi5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkNi5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTZhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjYgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkNi5waWQKK0Vudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLXNlcnZlcgorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvc3lzY29uZmlnL2RoY3BkNgorRXhlY1N0YXJ0UHJlPUBiYXNlX2JpbmRpckAvdG91Y2ggQGxvY2Fsc3RhdGVkaXJAL2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLTYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQ2LnBpZCAkREhDUERBUkdTIC1xICRJTlRFUkZBQ0VTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkODE4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQIFJlbGF5IEFnZW50IERhZW1vbgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3JlbGF5IC1kIC0tbm8tcGlkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtcmVsYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5YTdlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5CkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXJlbGF5LHYgMS4xIDIwMDQvMDQvMTYgMTU6NDE6MDggbWwgRXhwICQKKyMKKworIyBJdCBpcyBub3Qgc2FmZSB0byBzdGFydCBpZiB3ZSBkb24ndCBoYXZlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLi4uCitpZiBbICEgLWYgL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkgXTsgdGhlbgorCWVjaG8gIi9ldGMvZGVmYXVsdC9kaGNwLXJlbGF5IGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWVjaG8gImNyZWF0ZSB0aGlzIGZpbGUgdG8gZml4IHRoZSBwcm9ibGVtLiIKKwlleGl0IDEKK2ZpCisKKyMgUmVhZCBpbml0IHNjcmlwdCBjb25maWd1cmF0aW9uIChpbnRlcmZhY2VzIHRoZSBkYWVtb24gc2hvdWxkIGxpc3RlbiBvbgorIyBhbmQgdGhlIERIQ1Agc2VydmVyIHdlIHNob3VsZCBmb3J3YXJkIHJlcXVlc3RzIHRvLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkKKworIyBCdWlsZCBjb21tYW5kIGxpbmUgZm9yIGludGVyZmFjZXMgKHdpbGwgYmUgcGFzc2VkIHRvIGRocmVsYXkgYmVsb3cuKQorSUZDTUQ9IiIKK2lmIHRlc3QgIiRJTlRFUkZBQ0VTIiAhPSAiIjsgdGhlbgorCWZvciBJIGluICRJTlRFUkZBQ0VTOyBkbworCQlJRkNNRD0ke0lGQ01EfSItaSAiJHtJfSIgIgorCWRvbmUKK2ZpCisKK0RIQ1JFTEFZUElEPS92YXIvcnVuL2RoY3JlbGF5LnBpZAorCitjYXNlICIkMSIgaW4KKwlzdGFydCkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2RoY3JlbGF5IC0tIC1xICRPUFRJT05TICRJRkNNRCAkU0VSVkVSUworCQk7OworCXN0b3ApCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNyZWxheQorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXJlbGF5IHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKwkJZXhpdCAxIAorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXNlcnZlciBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGMyMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXNlcnZlci5pbml0LmQsdiAxLjQgMjAwMy8wNy8xMyAxOToxMjo0MSBtZHogRXhwICQKKyMKKwordGVzdCAtZiAvdXNyL3NiaW4vZGhjcGQgfHwgZXhpdCAwCisKKyMgSXQgaXMgbm90IHNhZmUgdG8gc3RhcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4uLgoraWYgWyAhIC1mIC9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlciBdOyB0aGVuCisJZWNobyAiL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyIGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWV4aXQgMAorZmkKKworIyBSZWFkIGluaXQgc2NyaXB0IGNvbmZpZ3VyYXRpb24gKHNvIGZhciBvbmx5IGludGVyZmFjZXMgdGhlIGRhZW1vbgorIyBzaG91bGQgbGlzdGVuIG9uLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQllY2hvIC1uICJTdGFydGluZyBESENQIHNlcnZlcjogIgorCQl0ZXN0IC1kIC92YXIvbGliL2RoY3AvIHx8IG1rZGlyIC1wIC92YXIvbGliL2RoY3AvCisJCXRlc3QgLWYgL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMgfHwgdG91Y2ggL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9kaGNwZCAtLSAtcSAkSU5URVJGQUNFUworCQllY2hvICIuIgorCQk7OworCXN0b3ApCisJCWVjaG8gLW4gIlN0b3BwaW5nIERIQ1Agc2VydmVyOiBkaGNwZDMiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNwZAorCQllY2hvICIuIgorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXNlcnZlciB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisJCWV4aXQgMSAKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2E0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRDUCAvIElQIG5ldHdvcmtpbmcgYW5kIHRyYWZmaWMgY29udHJvbCB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJJcHJvdXRlMiBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBjb250cm9sbGluZyBcCitUQ1AgLyBJUCBuZXR3b3JraW5nIGFuZCB0cmFmZmljIGNvbnRyb2wgaW4gTGludXguICBPZiB0aGUgdXRpbGl0aWVzIGlwIFwKK2FuZCB0YyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiAgaXAgY29udHJvbHMgSVB2NCBhbmQgSVB2NiBcCitjb25maWd1cmF0aW9uIGFuZCB0YyBzdGFuZHMgZm9yIHRyYWZmaWMgY29udHJvbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pcC9pcC5jO2JlZ2lubGluZT0zO2VuZGxpbmU9ODttZDU9Njg5ZDY5MWQwNDEwYTRiNjRkMzg5OWY4ZDZlMzE4MTciCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGlwdGFibGVzIGVsZnV0aWxzIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgS0VSTkVMX0lOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0gRE9DRElSPSR7ZG9jZGlyfS9pcHJvdXRlMiBTVUJESVJTPSdsaWIgdGMgaXAnIFNCSU5ESVI9JyR7YmFzZV9zYmluZGlyfScgTElCRElSPScke2xpYmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisgICAgbXYgJHtEfSR7YmFzZV9zYmluZGlyfS9pcCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lwLmlwcm91dGUyCisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorICAgIG12ICR7RH0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8gfHwgdHJ1ZQorICAgIHJtICR7RH0vc2hhcmUgLXJmIHx8IHRydWUKK30KKworIyBUaGUgLnNvIGZpbGVzIGluIGlwcm91dGUyLXRjIGFyZSBtb2R1bGVzLCBub3QgdHJhZGl0aW9uYWwgbGlicmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS10YyA9ICJkZXYtc28iCisKK1BBQ0tBR0VTID0rICIke1BOfS10YyIKK0ZJTEVTXyR7UE59LXRjID0gIiR7YmFzZV9zYmluZGlyfS90YyogXAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3RjLyouc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RjLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaXAiCitBTFRFUk5BVElWRV9UQVJHRVRbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzdkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1N1YmplY3Q6IFtQQVRDSF0gaXByb3V0ZTI6IGRlLWJhc2ggc2NyaXB0cworCitkZS1iYXNoIHRoZXNlIHR3byBzY3JpcHRzIHRvIG1ha2UgaXByb3V0ZTIgbm90IGRlcGVuZCBvbiBiYXNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCistLS0KKyBpcC9pZmNmZyB8ICAgMTUgKysrKysrKystLS0tLS0tCisgaXAvcnRwciAgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pcC9pZmNmZyBiL2lwL2lmY2ZnCitpbmRleCAwODNkOWRmLi42MGJjZjFmIDEwMDY0NAorLS0tIGEvaXAvaWZjZmcKKysrKyBiL2lwL2lmY2ZnCitAQCAtMSwxMiArMSwxMyBAQAorLSMhIC9iaW4vYmFzaAorKyMhIC9iaW4vc2gKKyAKKyBDaGVja0ZvcndhcmRpbmcgKCkgeworLSAgbG9jYWwgc2Jhc2UgZndkCisrICBsb2NhbCBzYmFzZSBmd2QgZm9yd2FyZGluZworICAgc2Jhc2U9L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYKKyAgIGZ3ZD0wCisgICBpZiBbIC1kICRzYmFzZSBdOyB0aGVuCisgICAgIGZvciBkaXIgaW4gJHNiYXNlLyovZm9yd2FyZGluZzsgZG8KKy0gICAgICBmd2Q9JFskZndkICsgYGNhdCAkZGlyYF0KKysgICAgICBmb3J3YXJkaW5nPWBjYXQgJGRpcmAKKysgICAgICBmd2Q9JCgoJGZ3ZCskZm9yd2FyZGluZykpCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgZndkPTIKK0BAIC0xMjcsMTIgKzEyOCwxMiBAQCBmaQorIGFycGluZyAtcSAtQSAtYyAxIC1JICRkZXYgJGlwYWRkcgorIG5vYXJwPSQ/CisgKCBzbGVlcCAyIDsKKy0gIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4mIC9kZXYvbnVsbCA8L2Rldi9udWxsICYKKysgIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4gL2Rldi9udWxsIDI+JjEgPC9kZXYvbnVsbCAmCisgCistaXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDIyNC4wLjAuMC8yNCA+JiAvZGV2L251bGwKKy1pcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjU1LjI1NS4yNTUuMjU1ID4mIC9kZXYvbnVsbAorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyMjQuMC4wLjAvMjQgPiAvZGV2L251bGwgMj4mMQorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyNTUuMjU1LjI1NS4yNTUgPiAvZGV2L251bGwgMj4mMQorIGlmIFsgYGlwIGxpbmsgbHMgJGRldiB8IGdyZXAgLWMgTVVMVElDQVNUYCAtZ2UgMSBdOyB0aGVuCistICBpcCByb3V0ZSBhZGQgMjI0LjAuMC4wLzQgZGV2ICRkZXYgc2NvcGUgZ2xvYmFsID4mIC9kZXYvbnVsbAorKyAgaXAgcm91dGUgYWRkIDIyNC4wLjAuMC80IGRldiAkZGV2IHNjb3BlIGdsb2JhbCA+IC9kZXYvbnVsbCAyPiYxCisgZmkKKyAKKyBpZiBbICRmd2QgLWVxIDAgXTsgdGhlbgorZGlmZiAtLWdpdCBhL2lwL3J0cHIgYi9pcC9ydHByCitpbmRleCBjMzYyOWZkLi42NzQxOThkIDEwMDY0NAorLS0tIGEvaXAvcnRwcgorKysrIGIvaXAvcnRwcgorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9iYXNoCisrIyEgL2Jpbi9zaAorIAorIGV4ZWMgdHIgIltcXFxcXSIgIlsKKyBdIgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9jb25maWd1cmUtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2NjA5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODViMDU4OWI0ODQzYzAzZThlNmZkOTQxNmQ3MWVhNDQ5YTczYzVjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMTA6NDY6MTYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWFrZSBjb25maWd1cmUgY3Jvc3MgY29tcGlsZSBzYWZlCisKK0FjY29yZGluZyB0byBLZXZpbiBUaWFuOgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworSW5kZXg6IGlwcm91dGUyLTMuNy4wL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwcm91dGUyLTMuNy4wLm9yaWcvY29uZmlndXJlCisrKysgaXByb3V0ZTItMy43LjAvY29uZmlndXJlCitAQCAtMiw2ICsyLDcgQEAKKyAjIFRoaXMgaXMgbm90IGFuIGF1dGNvbmYgZ2VuZXJhdGVkIGNvbmZpZ3VyZQorICMKKyBJTkNMVURFPSR7MTotIiRQV0QvaW5jbHVkZSJ9CisrU1lTUk9PVD0kMQorIAorICMgTWFrZSBhIHRlbXAgZGlyZWN0b3J5IGluIGJ1aWxkIHRyZWUuCisgVE1QRElSPSQobWt0ZW1wIC1kIGNvbmZpZy5YWFhYWFgpCitAQCAtMTU4LDcgKzE1OSw3IEBAIGNoZWNrX2lwdF9saWJfZGlyKCkKKyAJCXJldHVybgorIAlmaQorIAorLQlmb3IgZGlyIGluIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIKKysJZm9yIGRpciBpbiAkU1lTUk9PVC9saWIgJFNZU1JPT1QvdXNyL2xpYiAkU1lTUk9PVC91c3IvbG9jYWwvbGliCisgCWRvCisgCQlmb3IgZmlsZSBpbiAkZGlyL3t4dGFibGVzLGlwdGFibGVzfS9saWIqdF8qc28gOyBkbworIAkJCWlmIFsgLWYgJGZpbGUgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEuMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkYjBiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBpcHJvdXRlMi5pbmMKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL25ldC8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjM5MjkwY2IzYTU1ZDM4ZGQ4ZDEwZTE5YTMwOTQxMDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczMDc3YTk4OWVmYjkzNDQ1MGJkNjU1Y2JkOWFhZGRhYTc0N2NiNjk2YzY0ZDBjOWEzMzIzNzY4YTZhOGU2NmYiCisKKyMgQ0ZMQUdTIGFyZSBjb21wdXRlZCBpbiBNYWtlZmlsZSBhbmQgcmVmZXJlbmNlIENDT1BUUworIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgQ0NPUFRTPScke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjI5ZTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQKQEAgLTAsMCArMSw3OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaXJkYQorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEluZnJhcmVkIHBvcnQgc3VwcG9ydAorIyMjIEVORCBJTklUIElORk8KKworTkFNRT0iaXJhdHRhY2giCit0ZXN0IC14ICIkSVJEQV9EQUVNT04iIHx8IElSREFfREFFTU9OPS91c3Ivc2Jpbi9pcmF0dGFjaAordGVzdCAteiAiJElSQVRUQUNIX1BJRCIgJiYgSVJBVFRBQ0hfUElEPS92YXIvcnVuL2lyYXR0YWNoLnBpZAorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbW9kdWxlX2lkKCkgeworICAgICAgICBhd2sgJ0JFR0lOIHsgRlM9IjogIiB9IC9IYXJkd2FyZS8geyBwcmludCAkMiB9ICcgPC9wcm9jL2NwdWluZm8KK30KKworaWYgWyAhIC1mIC9ldGMvc3lzY29uZmlnL2lyZGEgXTsgdGhlbgorICAgIGNhc2UgYG1vZHVsZV9pZGAgaW4KKwkiSFAgaVBBUSBIMjIwMCIgfCAiSFAgaVBBUSBIWDQ3MDAiIHwgIkhUQyBVbml2ZXJzYWwiKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMgorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKwkqKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMQorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKyAgICBlc2FjCitlbHNlCisgICAgLiAvZXRjL3N5c2NvbmZpZy9pcmRhCitmaQorCisjIENoZWNrIHRoYXQgaXJkYSBpcyB1cC4KK1sgJHtJUkRBfSA9ICJubyIgXSAmJiBleGl0IDAKKworWyAtZiAvdXNyL3NiaW4vaXJhdHRhY2ggXSB8fCBleGl0IDAKKworQVJHUz0KK2lmIFsgJERPTkdMRSBdOyB0aGVuCisJQVJHUz0iJEFSR1MgLWQgJERPTkdMRSIKK2ZpCitpZiBbICIkRElTQ09WRVJZIiA9ICJ5ZXMiIF07dGhlbgorCUFSR1M9IiRBUkdTIC1zIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgIiRJUkRBX0RBRU1PTiIgJHtERVZJQ0V9ICR7QVJHU30gLS1waWRmaWxlICIkSVJBVFRBQ0hfUElEIgorCXNsZWVwIDEKKwlbIC1mIC92YXIvcnVuL2lyYXR0YWNoLnBpZCBdICYmIGVjaG8gIiBkb25lIiB8fCBlY2hvICIgZmFpbCIKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJElSREFfREFFTU9OIiAtLXBpZGZpbGUgIiRJUkFUVEFDSF9QSUQiCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgc3RhdHVzKQorCXN0YXR1cyBpcmF0dGFjaAorCWV4aXQgJD8KKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8c3RhdHVzfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1ZmUzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2ZpbmRjaGlwL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvZmluZGNoaXAvTWFrZWZpbGUKK0BAIC02NSw1ICs2NSw1IEBAIGluc3RhbGw6IGZpbmRjaGlwCisKKyBnZmluZGNoaXA6IGdmaW5kY2hpcC5jCisJJChwcm5fY2MpCistCSQoRUNNRCkpJChDQykgJChDRkxBR1MpIGBndGstY29uZmlnIC0tY2ZsYWdzYCAgJDwgLW8gJEAgYGd0ay1jb25maWcgLS1saWJzYAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYGd0ay1jb25maWcgLS1jZmxhZ3NgICAkPCAtbyAkQCBgZ3RrLWNvbmZpZyAtLWxpYnNgCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lyYXR0YWNoL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJhdHRhY2gvTWFrZWZpbGUKK0BAIC00OSwxMyArNDksMTMgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmF0dGFjaDogaXJhdHRhY2gubyB1dGlsLm8KKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpIGlyYXR0YWNoLm8gdXRpbC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBpcmF0dGFjaC5vIHV0aWwubyAtbyAkQAorCisKKworIGRvbmdsZV9hdHRhY2g6IGRvbmdsZV9hdHRhY2gubworCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgZG9uZ2xlX2F0dGFjaC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBkb25nbGVfYXR0YWNoLm8gLW8gJEAKKworCisgaW5zdGFsbDogJChUQVJHRVRTKQorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYWR1bXAvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhZHVtcC9NYWtlZmlsZQorQEAgLTQwLDcgKzQwLDcgQEAgbGliX2lyZGFkdW1wLmE6ICQoTElCSVJEQURVTVBfT0JKUykKKworIGlyZGFkdW1wOiAkKElSREFEVU1QX09CSlMpICQoTElCSVJEQURVTVBfVEFSR0VUKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYXBpbmcvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhcGluZy9NYWtlZmlsZQorQEAgLTU2LDcgKzU2LDcgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmRhcGluZzogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJuZXRkL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJuZXRkL01ha2VmaWxlCitAQCAtNTAsNyArNTAsNyBAQCBhbGw6ICQoVEFSR0VUUykKKworIGlybmV0ZDogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyBpbnN0YWxsOiBpcm5ldGQKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL3BzaW9uL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvcHNpb24vTWFrZWZpbGUKK0BAIC0yNSw0ICsyNSw0IEBAIGluc3RhbGw6ICQoUFNJT05fVEFSR0VUUykKKyBDRkxBR1MgKz0gLWcgLUkuLi9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChSUE1fT1BUX0ZMQUdTKQorIGlycHNpb241OgorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChQU0lPTl9TUkMpIC1vICRACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoUFNJT05fU1JDKSAtbyAkQAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlsc18wLjkuMTguYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlsc18wLjkuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjM2IxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNvbW1vbiBmaWxlcyBmb3IgSXJEQSIKK0RFU0NSSVBUSU9OID0gIlByb3ZpZGVzIGNvbW1vbiBmaWxlcyBuZWVkZWQgdG8gdXNlIElyREEuIFwKK0lyREEgYWxsb3dzIGNvbW11bmljYXRpb24gb3ZlciBJbmZyYXJlZCB3aXRoIG90aGVyIGRldmljZXMgXAorc3VjaCBhcyBwaG9uZXMgYW5kIGxhcHRvcHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaXJkYS11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2lyZGFkdW1wL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NtY2luaXQvQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFuL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lyZGFkdW1wL2lyZGFkdW1wLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9ZDc4YjlkY2UzY2Q3OGMyMjIwMjUwYzljN2EyYmUxNzgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2lyZGEvaXJkYS11dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiODRkYzEyYWE0YzNmNjFmY2NiOGQ4OTE5YmY0MDc5YmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE5ODA1NTFlNDZiMmVhYTllMTdhZDMxY2JjMWE2MzgwNzQ2MTFmYzMzYmZmMzQxNjNkMTBjN2E2N2E5ZmRjNiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDQz0ke0NDfScgXAorICAgICdMRD0ke0xEfScgXAorICAgICdDRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdTWVNfSU5DTFVERVM9JyBcCisgICAgJ1Y9MScgXAorIgorCitJTklUU0NSSVBUX05BTUUgPSAiaXJhdHRhY2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyAyMCIKKworVEFSR0VUUyA/Pz0gImlyYXR0YWNoIGlyZGFwaW5nIgorZG9fY29tcGlsZSAoKSB7CisJZm9yIHQgaW4gJHtUQVJHRVRTfTsgZG8KKwkJb2VfcnVubWFrZSAtQyAkdAorCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciB0IGluICR7VEFSR0VUU307IGRvCisJCW9lX3J1bm1ha2UgLUMgJHQgUk9PVD0iJHtEfSIgaW5zdGFsbAorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvJHtJTklUU0NSSVBUX05BTUV9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE3N2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDUzMTBhYmJhODY0Y2ZlM2E4YjY1YWYxMzA3Mjk0NDc2MDQxOTBiMjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBOb3YgMjAxMSAxNzowMzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBpdzogdmVyc2lvbi5zaDogZG9uJ3QgdXNlIGdpdCBkZXNjcmliZSBmb3IgdmVyc2lvbmluZworCitJdCB3aWxsIGRldGVjdCB0b3AtbGV2ZWwgZ2l0IHJlcG9zaXRvcmllcyBsaWtlIHRoZSBBbmdzdHJvbSBzZXR1cC1zY3JpcHRzIGFuZCBicmVhay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CistLS0KKyB2ZXJzaW9uLnNoIHwgMTYgKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS92ZXJzaW9uLnNoIGIvdmVyc2lvbi5zaAoraW5kZXggMTFkMTI0Yi4uNWQ0MjNjNCAxMDA3NTUKKy0tLSBhL3ZlcnNpb24uc2gKKysrKyBiL3ZlcnNpb24uc2gKK0BAIC0zLDIxICszLDcgQEAKKyBWRVJTSU9OPSIzLjE1IgorIE9VVD0iJDEiCisgCistaWYgWyAtZCAuZ2l0IF0gJiYgaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsYDsgdGhlbgorLQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtLXVubWVyZ2VkID4gL2Rldi9udWxsCistCWRlc2NyPSQoZ2l0IGRlc2NyaWJlKQorLQorLQkjIG9uIGdpdCBidWlsZHMgY2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgYWJvdmUKKy0JIyBpcyBjb3JyZWN0Li4uCistCVsgIiR7ZGVzY3IlJS0qfSIgPSAidiRWRVJTSU9OIiBdIHx8IGV4aXQgMgorLQorLQl2PSIke2Rlc2NyI3Z9IgorLQlpZiBnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEIHwgcmVhZCBkdW1teSA7IHRoZW4KKy0JCXY9IiR2Ii1kaXJ0eQorLQlmaQorLWVsc2UKKy0Jdj0iJFZFUlNJT04iCistZmkKKyt2PSIkVkVSU0lPTiIKKyAKKyBlY2hvICcjaW5jbHVkZSAiaXcuaCInID4gIiRPVVQiCisgZWNobyAiY29uc3QgY2hhciBpd192ZXJzaW9uW10gPSBcIiR2XCI7IiA+PiAiJE9VVCIKKy0tIAorMS43LjcuMwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3L3NlcGFyYXRlLW9iamRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNmOGIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA5ZTI3ZmMyZTFiM2RjOGMzNmVmNmE1MDJlZGZmYzNhM2Q4NGQ5ZGQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTc6MjM6NDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBzZXBhcmF0aW9uIG9mIFNSQ0RJUiBhbmQgT0JKRElSCisKK1R5cGljYWwgdXNlIG9mIFZQQVRIIHRvIGxvY2F0ZSB0aGUgc291cmNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKKy0tLQorIE1ha2VmaWxlICAgfCA3ICsrKysrLS0KKyB2ZXJzaW9uLnNoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNTQ4NTkxYS4uZGE4ZDMzYSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNSArMSw4IEBACisgTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisgCisrU1JDRElSID89ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisrT0JKRElSID89ICQoUFdEKQorK1ZQQVRIID0gJChTUkNESVIpCisgUFJFRklYID89IC91c3IKKyBTQklORElSID89ICQoUFJFRklYKS9zYmluCisgTUFORElSID89ICQoUFJFRklYKS9zaGFyZS9tYW4KK0BAIC05NSwxMSArOTgsMTEgQEAgVkVSU0lPTl9PQkpTIDo9ICQoZmlsdGVyLW91dCB2ZXJzaW9uLm8sICQoT0JKUykpCisgdmVyc2lvbi5jOiB2ZXJzaW9uLnNoICQocGF0c3Vic3QgJS5vLCUuYywkKFZFUlNJT05fT0JKUykpIG5sODAyMTEuaCBpdy5oIE1ha2VmaWxlIFwKKyAJCSQod2lsZGNhcmQgLmdpdC9pbmRleCAuZ2l0L3JlZnMvdGFncykKKyAJQCQoTlEpICcgR0VOICcgJEAKKy0JJChRKS4vdmVyc2lvbi5zaCAkQAorKwkkKFEpY2QgJChTUkNESVIpICYmIC4vdmVyc2lvbi5zaCAkKE9CSkRJUikvJEAKKyAKKyAlLm86ICUuYyBpdy5oIG5sODAyMTEuaAorIAlAJChOUSkgJyBDQyAgJyAkQAorLQkkKFEpJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CisrCSQoUSkkKENDKSAtSSQoU1JDRElSKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKKyAKKyBpZmVxICgkKElXX0FORFJPSURfQlVJTEQpLCkKKyBpdzoJJChPQkpTKQorZGlmZiAtLWdpdCBhL3ZlcnNpb24uc2ggYi92ZXJzaW9uLnNoCitpbmRleCA1MzU0MzgzLi5mYTk1NGNmIDEwMDc1NQorLS0tIGEvdmVyc2lvbi5zaAorKysrIGIvdmVyc2lvbi5zaAorQEAgLTUsNSArNSw1IEBAIE9VVD0iJDEiCisgCisgdj0iJFZFUlNJT04iCisgCistZWNobyAnI2luY2x1ZGUgIml3LmgiJyA+ICIkT1VUIgorK2VjaG8gJyNpbmNsdWRlIDxpdy5oPicgPiAiJE9VVCIKKyBlY2hvICJjb25zdCBjaGFyIGl3X3ZlcnNpb25bXSA9IFwiJHZcIjsiID4+ICIkT1VUIgorLS0gCisyLjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIm5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3Igd2lyZWxlc3MgZGV2aWNlcyIKK0RFU0NSSVBUSU9OID0gIml3IGlzIGEgbmV3IG5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3IgXAord2lyZWxlc3MgZGV2aWNlcy4gSXQgc3VwcG9ydHMgYWxtb3N0IGFsbCBuZXcgZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBcCit0byB0aGUga2VybmVsIHJlY2VudGx5LiAiCitIT01FUEFHRSA9ICJodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Eb2N1bWVudGF0aW9uL2l3IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Nzg2MThhNWM0YWYyNWU5YjkzZWYwYmUxYTkzZjc3NCIKKworREVQRU5EUyA9ICJsaWJubCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvaXcvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlLW9iamRpci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OGMyODIyODVjNzFjOTU2MDY5OTU3ZTljYTEwYTZhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNGJmYzYyN2IzN2Y3ZjYwN2U0ZmZhNjNhNzBkZWQxNWZhMmVhODUxNzdmNzAzY2IxN2Q3ZmUzNmY5YzhmMzNkIgorCitpbmhlcml0IHBrZ2NvbmZpZworCitFWFRSQV9PRU1BS0UgPSAiXAorICAgIC1mICcke1N9L01ha2VmaWxlJyBcCisgICAgXAorICAgICdQUkVGSVg9JHtwcmVmaXh9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisiCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm5zcy1tZG5zL2xpYm5zcy1tZG5zXzAuMTAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm5zcy1tZG5zL2xpYm5zcy1tZG5zXzAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5MzZlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk5hbWUgU2VydmljZSBTd2l0Y2ggbW9kdWxlIGZvciBNdWx0aWNhc3QgRE5TICh6ZXJvY29uZikgbmFtZSByZXNvbHV0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImF2YWhpIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvbnNzLW1kbnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDM5MzhmMTc2NDZlZmJiNTBhYTcwYmE1Zjk5ZjUxZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWU2ODNjMmU3YzM5MjE4MTQ3MDZkNjJmYmJkM2U5Y2JmNDkzYTc1ZmEwMDI1NWUwZTcxNTUwOGQ4MTM0ZmE2ZCIKKworUyA9ICIke1dPUktESVJ9L25zcy1tZG5zLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1kaXNhYmxlLWx5bnggLS1lbmFibGUtYXZhaGkiCisKKyMgc3VwcHJlc3Mgd2FybmluZywgYnV0IGRvbid0IGJvdGhlciB3aXRoIGF1dG9uYW1lcgorTEVBRF9TT05BTUUgPSAibGlibnNzX21kbnMuc28iCitERUJJQU5OQU1FXyR7UE59ID0gImxpYm5zcy1tZG5zIgorCitSREVQRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bWRuc1w+Ly8nIFwKKwkJLWUgJ3MvXCheaG9zdHM6LipcKVwoXDxmaWxlc1w+XClcKC4qXClcKFw8ZG5zXD5cKVwoLipcKS9cMVwyIG1kbnM0X21pbmltYWwgW05PVEZPVU5EPXJldHVybl1cM1w0IG1kbnNcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxtZG5zXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccyptZG5zNF9taW5pbWFsXHNcK1xbTk9URk9VTkQ9cmV0dXJuXF0vLycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzNjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJJbnRlcmZhY2UgZm9yIHVzZXItbGV2ZWwgbmV0d29yayBwYWNrZXQgY2FwdHVyZSIKK0RFU0NSSVBUSU9OID0gIkxpYnBjYXAgcHJvdmlkZXMgYSBwb3J0YWJsZSBmcmFtZXdvcmsgZm9yIGxvdy1sZXZlbCBuZXR3b3JrIFwKK21vbml0b3JpbmcuICBMaWJwY2FwIGNhbiBwcm92aWRlIG5ldHdvcmsgc3RhdGlzdGljcyBjb2xsZWN0aW9uLCBcCitzZWN1cml0eSBtb25pdG9yaW5nIGFuZCBuZXR3b3JrIGRlYnVnZ2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRjcGR1bXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MzA2NyZhdGlkPTQ2OTU3NyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xZDRiMDM2NjU1Nzk1MWM4NGE5NGZhYmUzNTI5Zjg2NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wY2FwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zMjttZDU9MzlhZjM1MTBlMDExZjM0Yjg4NzJmMTIwYjFkYzMxZDIiCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworSU5DX1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudGNwZHVtcC5vcmcvcmVsZWFzZS8ke0JQfS50YXIuZ3oiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNhcC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgYmx1ZXRvb3RoCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGNhcD1saW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCisjIEFkZCBhIGR1bW15IFBBQ0tBR0VDT05GSUcgZm9yIGJsdWV6NSBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnBjYXAuCitQQUNLQUdFQ09ORklHW2JsdWV6NV0gPSAiLCwiCitQQUNLQUdFQ09ORklHW2NhbnVzYl0gPSAiLS1lbmFibGUtY2FudXNiLC0tZW5hYmxlLWNhbnVzYj1ubyxsaWJ1c2IiCitQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbbGlibmxdID0gIi0td2l0aC1saWJubCwtLXdpdGhvdXQtbGlibmwsbGlibmwiCisKK0NQUEZMQUdTX3ByZXBlbmQgPSAiLUkke1N9ICIKK0NGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCitDWFhGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgICAgICBjYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKyAgICBmaQorICAgIHNlZCAtaSAtZSdzLF5WX1JQQVRIX09QVD0uKiQsVl9SUEFUSF9PUFQ9LCcgJHtTfS9wY2FwLWNvbmZpZy5pbgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvYWNsb2NhbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2FjbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1MTk4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2FjbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwxNjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00IGxpYnBjYXAtMS4xLjEvYWNsb2NhbC5tNAorLS0tIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDY6MzIuODE1MTE3NTY5ICswODAwCisrKysgbGlicGNhcC0xLjEuMS9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDk6MTcuMTUwMTQ5OTQ5ICswODAwCitAQCAtMzcsNyArMzcsNyBAQAorIGRubCBBQ19MQkxfQ19JTklULiAgTm93LCB3ZSBydW4gQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsIEFDX1BST0dfQ0MsCisgZG5sIGFuZCBBQ19MQkxfQ19JTklUIGF0IHRoZSB0b3AgbGV2ZWwuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRfQkVGT1JFX0NDXSwKKyBbCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfTEJMX0NfSU5JVF0pCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfUFJPR19DQ10pCitAQCAtOTAsNyArOTAsNyBAQAorIGRubCAgICAgTERGTEFHUworIGRubCAgICAgTEJMX0NGTEFHUworIGRubAorLUFDX0RFRlVOKEFDX0xCTF9DX0lOSVQsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRdLAorIFsKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19MQkxfRklYSU5DTFVERVNdKQorICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xCTF9ERVZFTF0pCitAQCAtMjE3LDcgKzIxNyw3IEBACisgZG5sCVZfU09OQU1FX09QVAorIGRubAlWX1JQQVRIX09QVAorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9TSExJQlNfSU5JVCwKKytBQ19ERUZVTihbQUNfTEJMX1NITElCU19JTklUXSwKKyAgICAgW0FDX1BSRVJFUSgyLjUwKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgICMKK0BAIC0zNjEsNyArMzYxLDcgQEAKKyAjIE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIFZfQ0NPUFQgZmxhZ3MsIGJlY2F1c2Ugc29tZSBvZiB0aG9zZSBtaWdodAorICMgZGlzYWJsZSBpbmxpbmluZy4KKyAjCistQUNfREVGVU4oQUNfTEJMX0NfSU5MSU5FLAorK0FDX0RFRlVOKFtBQ19MQkxfQ19JTkxJTkVdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciBpbmxpbmUpCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRWX0NDT1BUIgorQEAgLTQwNyw3ICs0MDcsNyBAQAorIGRubAorIGRubAlBQ19MQkxfRklYSU5DTFVERVMKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfRklYSU5DTFVERVMsCisrQUNfREVGVU4oW0FDX0xCTF9GSVhJTkNMVURFU10sCisgICAgIFtpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgIEFDX01TR19DSEVDS0lORyhmb3IgQU5TSSBpb2N0bCBkZWZpbml0aW9ucykKKyAJICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZ2NjX2ZpeGluY2x1ZGVzLAorQEAgLTQ1Myw3ICs0NTMsNyBAQAorIGRubAkkMiAoeWFjYyBhcHBlbmRlZCkKKyBkbmwJJDMgKG9wdGlvbmFsIGZsZXggYW5kIGJpc29uIC1QIHByZWZpeCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTEVYX0FORF9ZQUNDLAorK0FDX0RFRlVOKFtBQ19MQkxfTEVYX0FORF9ZQUNDXSwKKyAgICAgW0FDX0FSR19XSVRIKGZsZXgsIFsgIC0td2l0aG91dC1mbGV4ICAgICAgICAgIGRvbid0IHVzZSBmbGV4XSkKKyAgICAgQUNfQVJHX1dJVEgoYmlzb24sIFsgIC0td2l0aG91dC1iaXNvbiAgICAgICAgIGRvbid0IHVzZSBiaXNvbl0pCisgICAgIGlmIHRlc3QgIiR3aXRoX2ZsZXgiID0gbm8gOyB0aGVuCitAQCAtNTA2LDcgKzUwNiw3IEBACisgZG5sCisgZG5sCURFQ0xXQUlUU1RBVFVTIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9VTklPTl9XQUlULAorK0FDX0RFRlVOKFtBQ19MQkxfVU5JT05fV0FJVF0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgdW5pb24gd2FpdCBpcyB1c2VkKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3VuaW9uX3dhaXQsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC01MzUsNyArNTM1LDcgQEAKKyBkbmwKKyBkbmwJSEFWRV9TT0NLQUREUl9TQV9MRU4gKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1NPQ0tBRERSX1NBX0xFTiwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NBX0xFTl0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgc3RydWN0IGhhcyB0aGUgc2FfbGVuIG1lbWJlcikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9zb2NrYWRkcl9oYXNfc2FfbGVuLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNTYwLDcgKzU2MCw3IEBACisgZG5sCisgZG5sCUhBVkVfU09DS0FERFJfU1RPUkFHRSAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfU09DS0FERFJfU1RPUkFHRSwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NUT1JBR0VdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHNvY2thZGRyX3N0b3JhZ2Ugc3RydWN0IGV4aXN0cykKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfc29ja2FkZHJfc3RvcmFnZSwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTU5Myw3ICs1OTMsNyBAQAorIGRubCB3b24ndCBiZSB1c2luZyBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndAorIGRubCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSFBfUFBBX0lORk9fVF9ETF9NT0RVTEVfSURfMSwKKytBQ19ERUZVTihbQUNfTEJMX0hQX1BQQV9JTkZPX1RfRExfTU9EVUxFX0lEXzFdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX2hwX3BwYV9pbmZvX3Qgc3RydWN0IGhhcyBkbF9tb2R1bGVfaWRfMSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC02MTksNyArNjE5LDcgQEAKKyBkbmwKKyBkbmwJYWNfY3ZfbGJsX2hhdmVfcnVuX3BhdGggKHllcyBvciBubykKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSEFWRV9SVU5fUEFUSCwKKytBQ19ERUZVTihbQUNfTEJMX0hBVkVfUlVOX1BBVEhdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciAke0NDLWNjfSAtUikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXZlX3J1bl9wYXRoLAorIAlbZWNobyAnbWFpbigpe30nID4gY29uZnRlc3QuYworQEAgLTY0NCw3ICs2NDQsNyBAQAorIGRubAorIGRubAlMQkxfQUxJR04gKERFRklORUQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1VOQUxJR05FRF9BQ0NFU1MsCisrQUNfREVGVU4oW0FDX0xCTF9VTkFMSUdORURfQUNDRVNTXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB1bmFsaWduZWQgYWNjZXNzZXMgZmFpbCkKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCwKKyAJW2Nhc2UgIiRob3N0X2NwdSIgaW4KK0BAIC03NDksNyArNzQ5LDcgQEAKKyBkbmwJSEFWRV9PU19QUk9UT19IIChkZWZpbmVkKQorIGRubAlvcy1wcm90by5oIChzeW1saW5rZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0RFVkVMLAorK0FDX0RFRlVOKFtBQ19MQkxfREVWRUxdLAorICAgICBbcm0gLWYgb3MtcHJvdG8uaAorICAgICBpZiB0ZXN0ICIke0xCTF9DRkxBR1Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAJICAgICQxPSIkJDEgJHtMQkxfQ0ZMQUdTfSIKK0BAIC04ODYsNyArODg2LDcgQEAKKyBkbmwgc3RhdGljYWxseSBhbmQgaGFwcGVuIHRvIGhhdmUgYSBsaWJyZXNvbHYuYSBseWluZyBhcm91bmQgKGFuZCBubworIGRubCBsaWJuc2wuYSkuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0xJQlJBUllfTkVULCBbCisrQUNfREVGVU4oW0FDX0xCTF9MSUJSQVJZX05FVF0sIFsKKyAgICAgIyBNb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgZ2V0aG9zdGJ5bmFtZSgpIGluIHRoZSBkZWZhdWx0IHNlYXJjaGVkCisgICAgICMgbGlicmFyaWVzIChpLmUuIGxpYmMpOgorICAgICAjIFNvbWUgT1NlcyAoZWcuIFNvbGFyaXMpIHBsYWNlIGl0IGluIGxpYm5zbAorQEAgLTkwOSw3ICs5MDksNyBAQAorIGRubCBUZXN0IGZvciBfX2F0dHJpYnV0ZV9fCisgZG5sCisgCistQUNfREVGVU4oQUNfQ19fX0FUVFJJQlVURV9fLCBbCisrQUNfREVGVU4oW0FDX0NfX19BVFRSSUJVVEVfX10sIFsKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIF9fYXR0cmlidXRlX18pCisgQUNfQ0FDSEVfVkFMKGFjX2N2X19fYXR0cmlidXRlX18sIFsKKyBBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05NDcsNyArOTQ3LDcgQEAKKyBkbmwKKyBkbmwgLVNjb3R0IEJhcnJvbgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9UUEFDS0VUX1NUQVRTLAorK0FDX0RFRlVOKFtBQ19MQkxfVFBBQ0tFVF9TVEFUU10sCisgICAgW0FDX01TR19DSEVDS0lORyhpZiBpZl9wYWNrZXQuaCBoYXMgdHBhY2tldF9zdGF0cyBkZWZpbmVkKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdHBhY2tldF9zdGF0cywKKyAgICBBQ19UUllfQ09NUElMRShbCitAQCAtOTc2LDcgKzk3Niw3IEBACisgZG5sIGRvZXNuJ3QgaGF2ZSB0aGF0IG1lbWJlciAod2hpY2ggaXMgT0ssIGFzIGVpdGhlciB3ZSB3b24ndCBiZSB1c2luZworIGRubCBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJLAorK0FDX0RFRlVOKFtBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB0cGFja2V0X2F1eGRhdGEgc3RydWN0IGhhcyB0cF92bGFuX3RjaSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC0xMDAzLDcgKzEwMDMsNyBAQAorIGRubCAKKyBkbmwgCUhBVkVfRExQSV9QQVNTSVZFIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9ETF9QQVNTSVZFX1JFUV9ULAorK0FDX0RFRlVOKFtBQ19MQkxfRExfUEFTU0lWRV9SRVFfVF0sCisgICAgICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX3Bhc3NpdmVfcmVxX3Qgc3RydWN0IGV4aXN0cykKKyAgICAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfZGxfcGFzc2l2ZV9yZXFfdCwKKyAgICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MTUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSA4ODg3MTMyZTg1ODkyYTcyYTg0Y2EzODc4ZTYwZjI1NGFkMmNlOTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorRGF0ZTogVHVlLCAyNCBGZWIgMjAxNSAxNTo1NjowNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJwY2FwOiBwa2djb25maWcgc3VwcG9ydAorCitBZGRpbmcgYmFzaWMgc3RydWN0dXJlIHRvIHN1cHBvcnQgcGtnLWNvbmZpZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICB8ICA1ICsrKysrCisgY29uZmlndXJlLmluICB8ICAxICsKKyBsaWJwY2FwLnBjLmluIHwgMTAgKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJwY2FwLnBjLmluCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAxYzJkNzQ1Li4xZjI1ZmFmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNjAsNiArNjAsMTAgQEAgVl9SUEFUSF9PUFQgPSBAVl9SUEFUSF9PUFRACisgREVQRU5ERU5DWV9DRkxBRyA9IEBERVBFTkRFTkNZX0NGTEFHQAorIFBST0c9bGlicGNhcAorIAorKyMgcGtnY29uZmlnIHN1cHBvcnQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBsaWJwY2FwLnBjCisrCisgIyBTdGFuZGFyZCBDRkxBR1MKKyBGVUxMX0NGTEFHUyA9ICQoQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCisgCitAQCAtMjc1LDYgKzI3OSw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWxibC9vcy1zb2xhcmlzMi5oIFwKKyAJbGJsL29zLXN1bm9zNC5oIFwKKyAJbGJsL29zLXVsdHJpeDQuaCBcCisrCWxpYnBjYXAucGMgXAorIAltaXNzaW5nL3NucHJpbnRmLmMgXAorIAlta2RlcCBcCisgCW1zZG9zL2JpbjJjLmMgXAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggOGY1Yzg2Yi4uZmI1MWIzNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTcwMCw2ICsxNzAwLDcgQEAgZXNhYworIEFDX1BST0dfSU5TVEFMTAorIAorIEFDX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJwY2FwLnBjXSkKKyAKKyBBQ19PVVRQVVRfQ09NTUFORFMoW2lmIHRlc3QgLWYgLmRldmVsOyB0aGVuCisgCWVjaG8gdGltZXN0YW1wID4gc3RhbXAtaAorZGlmZiAtLWdpdCBhL2xpYnBjYXAucGMuaW4gYi9saWJwY2FwLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGY3OGFkOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlicGNhcC5wYy5pbgorQEAgLTAsMCArMSwxMCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGxpYnBjYXAKKytEZXNjcmlwdGlvbjogU3lzdGVtLWluZGVwZW5kZW50IGludGVyZmFjZSBmb3IgdXNlci1sZXZlbCBwYWNrZXQgY2FwdHVyZS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHBjYXAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMTU0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGxpYnBjYXAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2xvY2FsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjVmMTQxOTFjMWE2ODRhNzU1MzJjNzM5YzJjNDA1OWZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVkYjNlMjk5OGYxZWViYTJjNzZkYTU1ZGE1ZDQ3NDI0OGZlMTljNDRmNDllMTVjYWM4YTc5NmEyYzdlMTk2OTAiCisKKyMKKyMgbWFrZSBpbnN0YWxsIGRvZXNuJ3QgY292ZXIgdGhlIHNoYXJlZCBsaWIKKyMgbWFrZSBpbnN0YWxsLXNoYXJlZCBpcyBqdXN0IGJyb2tlbiAobm8gc3ltbGlua3MpCisjCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAjcmVtb3ZlIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC91c3IvaW5jbHVkZQorICAgIHNlZCAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAke1N9L2NvbmZpZ3VyZS5pbgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIG9lX3J1bm1ha2UgaW5zdGFsbC1zaGFyZWQgREVTVERJUj0ke0R9CisgICAgb2VfbGliaW5zdGFsbCAtYSAtc28gbGlicGNhcCAke0R9JHtsaWJkaXJ9CisgICAgc2VkICJzfEBWRVJTSU9OQHwke1BWfXwiIC1pICR7Qn0vbGlicGNhcC5wYworICAgIGluc3RhbGwgLUQgLW0gMDY0NCBsaWJwY2FwLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBjYXAucGMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mby9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2YyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mby9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm9fZ2l0LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTW9iaWxlIEJyb2FkYmFuZCBTZXJ2aWNlIFByb3ZpZGVyIERhdGFiYXNlIgorU0VDVElPTiA9ICJuZXR3b3JrIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3OTY0NTc5YjJhOGVjZTRiYzY3NDRkMmRjOWE4YjA0IgorU1JDUkVWID0gImQwNmViZDMxNGE3Y2RkMDg3ZDM4ZTQ5NjZjMTlkZTQyYzhjNTUyNDYiCitQViA9ICIyMDE0MDYxOCtnaXRyJHtTUkNQVn0iCitQRSA9ICIxIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4NzVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gYmZkMzJkNjhjZmM5ZjFlMzFkYWI4OGUwNzQ0NmQxYzAyYmM4MGI1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMiBGZWIgMjAxNSAwMDozOToyOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZG8gbm90IHNoaXAgdmVyc2lvbi5oCisKK1RoZSBIRUFERVJTJyBuYW1lIGhhcyBiZWVuIGNoYW5nZWQgdG8gcGtnaW5jbHVkZV9IRUFERVJTLCBzbyB1c2UKK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMsIG90aGVyd2lzZSB2ZXJzaW9uLmggd291bGQgYmUgc2hpcHBlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMzMzNDc5MC4uNjljZDU4ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEwLDExICsxMCwxMSBAQCBwa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3R5cGVzLmggaW5jbHVkZS9sb2cuaCBpbmNsdWRlL3BsdWdpbi5oIFwKKyAJCQlpbmNsdWRlL3Rsdi5oIGluY2x1ZGUvc2V0dGluZy5oIGluY2x1ZGUvZGV2aWNlLmggXAorIAkJCWluY2x1ZGUvbmZjX2NvcHkuaCBpbmNsdWRlL3NuZXAuaAorIAorLW5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorIAorIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kYnVzLmgKKyAKKy1sb2NhbF9oZWFkZXJzID0gJChmb3JlYWNoIGZpbGUsJChwa2dpbmNsdWRlX0hFQURFUlMpICQobm9kaXN0X2luY2x1ZGVfSEVBREVSUykgXAorK2xvY2FsX2hlYWRlcnMgPSAkKGZvcmVhY2ggZmlsZSwkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChub2Rpc3RfcGtnaW5jbHVkZV9IRUFERVJTKSBcCisgCQkJJChub2luc3RfSEVBREVSUyksIGluY2x1ZGUvbmVhci8kKG5vdGRpciAkKGZpbGUpKSkKKyAKKyBnZGJ1c19zb3VyY2VzID0gZ2RidXMvZ2RidXMuaCBnZGJ1cy9tYWlubG9vcC5jIGdkYnVzL3dhdGNoLmMgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2MDY3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNDNhY2M1NmQ1NTA2YzdlMzE4ZjcxN2ZiMzYzNGJjMTZlMzQzODkxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxNSBKYW4gMjAxNSAxODoxMjowNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZml4IHBhcmFsbGVsIGlzc3VlCisKK1RoZXJlIG1pZ2h0IGJlIG5vIHNyYyBkaXIgaWYgc3JjL2J1aWx0aW4uaCBydW5zIGVhcmxpZXIsIGNyZWF0ZSBpdCB0bworZml4IHRoZSByYWNlIGlzc3VlOgorCitzcmMvZ2VuYnVpbHRpbiBuZmN0eXBlMSBuZmN0eXBlMiBuZmN0eXBlMyBuZmN0eXBlNCBwMnAgPiBzcmMvYnVpbHRpbi5oCisvYmluL3NoOiBzcmMvYnVpbHRpbi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzMjQxMzExLi5hNDNlYWEyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTY0LDYgKzE2NCw3IEBAIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4gXAorIHNyYy9wbHVnaW4uJChPQkpFWFQpOiBzcmMvYnVpbHRpbi5oCisgCisgc3JjL2J1aWx0aW4uaDogc3JjL2dlbmJ1aWx0aW4gJChidWlsdGluX3NvdXJjZXMpCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9zcmMvZ2VuYnVpbHRpbiAkKGJ1aWx0aW5fbW9kdWxlcykgPiAkQAorIAorICQoc3JjX25lYXJkX09CSkVDVFMpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL25lYXJkLmluIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9uZWFyZC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDdkNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9uZWFyZC5pbgpAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBuZWFyZCBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5lYXJkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE5GQyBkYWVtb24KKyMgRGVzY3JpcHRpb246ICAgICAgIG5lYXJkIGlzIGEgZGFlbW9uIHVzZWQgdG8gZW5hYmxlIE5GQyBmZWF0dXJlcworIyMjIEVORCBJTklUIElORk8KKworREFFTU9OPUBpbnN0YWxscGF0aEAvbmVhcmQKK1BJREZJTEU9L3Zhci9ydW4vbmVhcmQucGlkCitERVNDPSJMaW51eCBORkMgZGFlbW9uIgorCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9uZWFyZCBdIDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L25lYXJkCitmaQorCitzZXQgLWUKKworZG9fc3RhcnQoKSB7CisJJERBRU1PTgorfQorCitkb19zdG9wKCkgeworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgbmVhcmQgLS1xdWlldAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgJERFU0MiCisJZG9fc3RhcnQKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWRvX3N0b3AKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvICJSZXN0YXJ0aW5nICRERVNDIgorCWRvX3N0b3AKKwlzbGVlcCAxCisJZG9fc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZGY3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIKQEAgLTAsMCArMSw2MSBAQAorU1VNTUFSWSA9ICJMaW51eCBORkMgZGFlbW9uIgorREVTQ1JJUFRJT04gPSAiQSBkYWVtb24gZm9yIHRoZSBMaW51eCBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gc3RhY2siCitIT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL2xpbnV4LW5mYyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBsaWJubCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYjc0NmNlNjJlZWVmODhlOGRlOTA3NjVlMDBhNzVhMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjUxZjY1MTNkMzJjZGFmOGE0MjYyNTVkMDNhZmYzOGE2NjIwYTg5YjA1NjdlYzJiMzY2MDZjNjMzMGE5MzM1MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorIGZpbGU6Ly9zcmMvbmVhci5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTM1OGU0ZGVlZmVmMjUxYTQ3NjFlMWZmYWNjOTY1ZDEzIFwKKyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aAorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3VzZXIvLC0tZGlzYWJsZS1zeXN0ZW1kIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRvb2xzIgorCisjIFRoaXMgd291bGQgY29weSBuZWFyZCBzdGFydC1zdG9wIHNoZWxsIGFuZCB0ZXN0IHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkJc2VkICJzOkBpbnN0YWxscGF0aEA6JHtsaWJleGVjZGlyfS9uZmM6IiAke1dPUktESVJ9L25lYXJkLmluIFwKKwkJICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCQljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCWZpCisKKwkjIEluc3RhbGwgdGhlIHRlc3RzIGZvciBuZWFyZC10ZXN0cworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9uZWFyZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rlc3QvKiAke0R9JHtsaWJkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy9uZmN0b29sL25mY3Rvb2wgJHtEfSR7bGliZGlyfS8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLXRlc3QiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi8uZGVidWciCisKK1JERVBFTkRTXyR7UE59ID0gImRidXMgcHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCisKKyMgQmx1ZXogJiBXaWZpIGFyZSBub3QgbWFuZGF0b3J5IGV4Y2VwdCBmb3IgaGFuZG92ZXIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCd3cGEtc3VwcGxpY2FudCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitJTklUU0NSSVBUX05BTUUgPSAibmVhcmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA2NCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5lYXJkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9maWxlcy9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvZmlsZXMvbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTAwMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvZmlsZXMvbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitbUEFUQ0hdIG5mcy11dGlsczogZGViaWFuaXplIHN0YXJ0LXN0YXRkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittYWtlIHN0YXJ0LXN0YXRkIGNvbW1hbmQgdG8gdXNlIG5mc2NvbW1vbiBjb25maWd1cmUsIHRvby4KKworU2lnbmVkLW9mZi1ieTogSGVucmlrIFJpb21hciA8aGVucmlrLnJpb21hckBlcmljc3Nvbi5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHV0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZCBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitpbmRleCBlYzkzODNiLi4zOTY5YjhjIDEwMDc1NQorLS0tIGEvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQKKysrKyBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitAQCAtNiw2ICs2LDEzIEBACisgIyBzaXRlLgorIFBBVEg9Ii9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluIgorIAorKyMgUmVhZCBjb25maWcKKytERUZBVUxURklMRT0vZXRjL2RlZmF1bHQvbmZzLWNvbW1vbgorK05FRURfSURNQVBEPQorK2lmIFsgLWYgJERFRkFVTFRGSUxFIF07IHRoZW4KKysgICAgLiAkREVGQVVMVEZJTEUKKytmaQorKworICMgRmlyc3QgdHJ5IHN5c3RlbWQgaWYgaXQncyBpbnN0YWxsZWQuCisgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIyBRdWl0IG9ubHkgaWYgdGhlIGNhbGwgd29ya2VkLgorQEAgLTEzLDQgKzIwLDQgQEAgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyBmaQorIAorICMgRmFsbCBiYWNrIHRvIGxhdW5jaGluZyBpdCBvdXJzZWx2ZXMuCistZXhlYyBycGMuc3RhdGQgLS1uby1ub3RpZnkKKytleGVjIHJwYy5zdGF0ZCAtLW5vLW5vdGlmeSAkU1RBVERPUFRTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM1MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gYTVlOTVhNDJlN2JjZWRkYzllY2FkMDY2OTRjMWEwNTg4ZjRiYWZjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDA3OjIyOjQ3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGdldHRpbmcgdV8qIHR5cGVkZWZzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY2ZnLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NmZy5oIGIvY2ZnLmgKK2luZGV4IGQ0ZDRjYWIuLmZlNDllOGYgMTAwNjQ0CistLS0gYS9jZmcuaAorKysrIGIvY2ZnLmgKK0BAIC0zMyw2ICszMyw3IEBACisgI2lmbmRlZiBfQ09ORl9IXworICNkZWZpbmUgX0NPTkZfSF8KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgInF1ZXVlLmgiCisgCisgc3RydWN0IGNvbmZfbGlzdF9ub2RlIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorU2V0IG5vYm9keSB1c2VyIGFuZCBncm91cAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLSBhL2lkbWFwZC5jb25mCisrKysgYi9pZG1hcGQuY29uZgorQEAgLTE3LDggKzE3LDggQEAKKyAKKyBbTWFwcGluZ10KKyAKKy0jTm9ib2R5LVVzZXIgPSBub2JvZHkKKy0jTm9ib2R5LUdyb3VwID0gbm9ib2R5CisrTm9ib2R5LVVzZXIgPSBub2JvZHkKKytOb2JvZHktR3JvdXAgPSBub2dyb3VwCisgCisgW1RyYW5zbGF0aW9uXQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvZml4LWFjLXByZXJlcS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL2ZpeC1hYy1wcmVyZXEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxYzdjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL2ZpeC1hYy1wcmVyZXEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTEsNyArMSw3IEBACisgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyAKKy1BQ19QUkVSRVEoWzIuNjhdKQorK0FDX1BSRVJFUShbMi42NV0pCisgQUNfSU5JVChbbGlibmZzaWRtYXBdLFswLjI1XSxbbGludXgtbmZzQHZnZXIua2VybmVsLm9yZ10pCisgQUNfQ09ORklHX1NSQ0RJUihbbmZzaWRtYXAuaF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXBfMC4yNS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwXzAuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1NzhlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwXzAuMjUuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJORlMgaWQgbWFwcGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDljNmEyYTBjYTYwMTdmZGE3Y2Q5MDVlZDI3MzliMzciCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC9saWJuZnNpZG1hcC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1hYy1wcmVyZXEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmFjNDg5M2M5MjcxNmFkZDFhMTQ0N2FlMDFkZjc3YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU2ZDI0NWQ4NDQwMGUxMDMwZjhmNDBhNWEyN2RhNzYzNzA2OTBjNGE5MzJiYWYyNDkxMTBmMDQ3ZmU3ZWZjZiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0vaWRtYXBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vaWRtYXBkLmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyNWZiNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA5Yjg0Y2ZmMzA1ODY2YWJkMTUwY2YxYTRjNmU3ZTVlYmY4YTdlYjNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNSBOb3YgMjAxMyAyMzoyMTozNSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFsbG93IHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBuZnNpZG1hcAorCisqIGtleXV0aWxzIGF2YWlsYWJpbGl0eSBpcyBhdXRvZGV0ZWN0ZWQgYW5kIGJ1aWxkcyBhcmVuJ3QgcmVwcm9kdWNpYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxMCArKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjQzM2Q2Li4yOGE4ZjYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02OSw2ICs2OSwxMiBAQCBBQ19BUkdfRU5BQkxFKG5mc3Y0LAorIAlBQ19TVUJTVChlbmFibGVfbmZzdjQpCisgCUFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNWNCwgW3Rlc3QgIiRlbmFibGVfbmZzdjQiID0gInllcyJdKQorIAorK0FDX0FSR19FTkFCTEUobmZzaWRtYXAsCisrICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5mc2lkbWFwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0IGlkbWFwcGVyIEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgICAgICBlbmFibGVfbmZzaWRtYXA9JGVuYWJsZXZhbCwKKysgICAgICAgIGVuYWJsZV9uZnNpZG1hcD15ZXMpCisrCisgQUNfQVJHX0VOQUJMRShuZnN2NDEsCisgCVtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmZzdjQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0MSBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorQEAgLTI5Niw3ICszMDIsNyBAQCBmaQorIAorIGRubCBlbmFibGUgbmZzaWRtYXAgd2hlbiBpdHMgc3VwcG9ydCBieSBsaWJuZnNpZG1hcAorIEFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNEQ0xUUkFDSywgW3Rlc3QgIiRlbmFibGVfbmZzZGNsdHJhY2siID0gInllcyIgXSkKKy1BTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX2tleXV0aWxzX2gkYWNfY3ZfbGliX25mc2lkbWFwX25mczRfb3duZXJfdG9fdWlkIiA9ICJ5ZXN5ZXMiXSkKKytBTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkZW5hYmxlX25mc2lkbWFwJGFjX2N2X2hlYWRlcl9rZXl1dGlsc19oJGFjX2N2X2xpYl9uZnNpZG1hcF9uZnM0X293bmVyX3RvX3VpZCIgPSAieWVzeWVzeWVzIl0pCisgCisgCisgaWYgdGVzdCAiJGtuZnNkX2N2X2dsaWJjMiIgPSBubzsgdGhlbgorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtbW91bnRkLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLW1vdW50ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxM2RkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLW1vdW50ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIE1vdW50IERhZW1vbgorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL25mcy11dGlscy5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwYy5tb3VudGQgLUYgJE1PVU5URF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc2VydmVyLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXNlcnZlci5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0N2Q3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXNlcnZlci5zZXJ2aWNlCkBAIC0wLDAgKzEsMTggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIFNlcnZlcgorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZQorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9uZnMtdXRpbHMuY29uZgorRXhlY1N0YXJ0UHJlPUBTQklORElSQC9leHBvcnRmcyAtcgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGMubmZzZCAkTkZTRF9PUFRTICRORlNEX0NPVU5UCitFeGVjU3RvcD1AU0JJTkRJUkAvcnBjLm5mc2QgMAorRXhlY1N0b3BQb3N0PUBTQklORElSQC9leHBvcnRmcyAtZgorRXhlY1JlbG9hZD1AU0JJTkRJUkAvZXhwb3J0ZnMgLXIKK1N0YW5kYXJkRXJyb3I9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc3RhdGQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc3RhdGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZkYWNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIGZpbGUgbG9ja2luZyBzZXJ2aWNlCitBZnRlcj1ycGNiaW5kLnNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc2VydmljZQorQmVmb3JlPXJlbW90ZS1mcy1wcmUudGFyZ2V0CisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvbmZzLXV0aWxzLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjLnN0YXRkIC1GICRTVEFURF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmODE4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0ZpeGVzIGVycm9ycyBsaWtlCitzbS1ub3RpZnlbMTA3MF06IEROUyByZXNvbHV0aW9uIG9mIGEuYi5jLmQuLmNvbSBmYWlsZWQ7IHJldHJ5aW5nIGxhdGVyCitUaGlzIGVycm9yIHdpbGwgb2NjdXIgYW55dGltZSBzbS1ub3RpZnkgaXMgcnVuIGJlZm9yZSB0aGUgbmV0d29yayBpZiBmdWxseSB1cCwKK3doaWNoIGlzIGhhcHBlbmluZyBtb3JlIGFuZCBtb3JlIHdpdGggcGFyYWxsZWwgc3RhcnR1cCBzeXN0ZW1zLgorVGhlIHJlc19pbml0KCkgY2FsbCBpcyBzaW1wbGUsIHNhZmUsIHF1aWNrLCBhbmQgYSBwYXRjaCB0byB1c2UgaXQgc2hvdWxkIGJlCithYmxlIHRvIGdvIHVwc3RyZWFtLiAgUHJlc3VtYWJseSB0aGUgd2hvbGUgcmVhc29uIHNtLW5vdGlmeSB0cmllcyBzZXZlcmFsCit0aW1lcyBpcyB0byB3YWl0IGZvciBwb3NzaWJsZSBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJ1dCB3aXRob3V0CitjYWxsaW5nIHJlc19pbml0KCkgaXQgd2lsbCBuZXZlciBiZSBhd2FyZSBvZiB0aG9zZSBjaGFuZ2VzCisKK0JhY2twb3J0ZWQgZHJvbSBGZWRvcmEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisKK2RpZmYgLXVwIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYworLS0tIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnCTIwMTAtMDktMjggMDg6MjQ6MTYuMDAwMDAwMDAwIC0wNDAwCisrKysgbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jCTIwMTAtMTAtMTUgMTY6NDQ6NDMuNDg3MTE5NjAxIC0wNDAwCitAQCAtMjgsNiArMjgsOSBAQAorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKysjaW5jbHVkZSA8cmVzb2x2Lmg+CisgCisgI2luY2x1ZGUgInNvY2thZGRyLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKK0BAIC04NCw2ICs4Nyw3IEBAIHNtbl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKyAJfTsKKyAJaW50IGVycm9yOworIAorKwlyZXNfaW5pdCgpOworIAllcnJvciA9IGdldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50LCAmYWkpOworIAlpZiAoZXJyb3IgIT0gMCkgeworIAkJeGxvZyhEX0dFTkVSQUwsICJnZXRhZGRyaW5mbygzKTogJXMiLCBnYWlfc3RyZXJyb3IoZXJyb3IpKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTNmMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK25mcy11dGlsczogRG8gbm90IHBhc3MgQ0ZMQUdTIHRvIGdjYyB3aGlsZSBidWlsZGluZworCitEbyBub3QgcGFzcyBDRkxBR1MvTERGTEFHUyB0byBnY2Mgd2hpbGUgYnVpbGRpbmcsIFRoZSBuZWVkZWQgZmxhZ3MgaGFzCitiZWVuIHBhc3NlZCBieSB4eHhfQ0ZMQUdTPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtIHwgICAgMiArKworIHRvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbSAgIHwgICAgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbSBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitpbmRleCAzMTU2ODE1Li4xNzI5ZmQxIDEwMDY0NAorLS0tIGEvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0KKysrKyBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDggQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyBDQz0kKENDX0ZPUl9CVUlMRCkKKytDRkxBR1M9CisrTERGTEFHUz0KKyBMSUJUT09MID0gQExJQlRPT0xAIC0tdGFnPUNDCisgCisgbm9pbnN0X1BST0dSQU1TID0gdGVzdGxrCitkaWZmIC0tZ2l0IGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtIGIvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCitpbmRleCA4YTllYzg5Li44YmFjZGFhIDEwMDY0NAorLS0tIGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCisrKysgYi90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsOCBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorIENDPSQoQ0NfRk9SX0JVSUxEKQorK0NGTEFHUz0KKytMREZMQUdTPQorIExJQlRPT0wgPSBATElCVE9PTEAgLS10YWc9Q0MKKyAKKyBub2luc3RfUFJPR1JBTVMgPSBycGNnZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwMDdhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZgpAQCAtMCwwICsxLDM1IEBACisjIFBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG5mcy11dGlscyAoY2xpZW50cyAmIHNlcnZlcikgc2VydmljZSBmaWxlcy4KKyMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLm5mc2QuCitORlNEX09QVFM9IiIKKworIyBOdW1iZXIgb2Ygc2VydmVycyB0byBzdGFydCB1cDsgdGhlIGRlZmF1bHQgaXMgOCBzZXJ2ZXJzLgorTkZTRF9DT1VOVD0iIgorCisjIFdoZXJlIHRvIG1vdW50IG5mc2QgZmlsZXN5c3RlbTsgdGhlIGRlZmF1bHQgaXMgIi9wcm9jL2ZzL25mc2QiLgorUFJPQ05GU0RfTU9VTlRQT0lOVD0iIgorCisjIE9wdGlvbnMgdXNlZCB0byBtb3VudCBuZnNkIGZpbGVzeXN0ZW07IHRoZSBkZWZhdWx0IGlzICJydyxub2Rldixub2V4ZWMsbm9zdWlkIi4KK1BST0NORlNEX01PVU5UT1BUUz0iIgorCisjIE9wdGlvbnMgZm9yIHJwYy5tb3VudGQuCisjIElmIHlvdSBoYXZlIGEgcG9ydC1iYXNlZCBmaXJld2FsbCwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHVwCisjIGEgZml4ZWQgcG9ydCBoZXJlIHVzaW5nIHRoZSAtLXBvcnQgb3B0aW9uLgorTU9VTlREX09QVFM9IiIKKworIyBQYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBuZnMtY29tbW9uIChuZnMgY2xpZW50cyAmIHNlcnZlcikgaW5pdCBzY3JpcHQuCisjCisKKyMgSWYgeW91IGRvIG5vdCBzZXQgdmFsdWVzIGZvciB0aGUgTkVFRF8gb3B0aW9ucywgdGhleSB3aWxsIGJlIGF0dGVtcHRlZAorIyBhdXRvZGV0ZWN0ZWQ7IHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgcGVvcGxlLiBWYWxpZCBhbHRlcm5hdGl2ZXMKKyMgZm9yIHRoZSBORUVEXyBvcHRpb25zIGFyZSAieWVzIiBhbmQgIm5vIi4KKworIyBEbyB5b3Ugd2FudCB0byBzdGFydCB0aGUgc3RhdGQgZGFlbW9uPyBJdCBpcyBub3QgbmVlZGVkIGZvciBORlN2NC4KK05FRURfU1RBVEQ9IiIKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLnN0YXRkLgorIyBOLkIuIHN0YXRkIG5vcm1hbGx5IHJ1bnMgb24gYm90aCBjbGllbnQgYW5kIHNlcnZlciwgYW5kIHJ1bi10aW1lCisjIG9wdGlvbnMgc2hvdWxkIGJlIHNwZWNpZmllZCBhY2NvcmRpbmdseS4KKyMgU1RBVERfT1BUUz0iLXAgMzI3NjUgLW8gMzI3NjYiCitTVEFURF9PUFRTPSIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzY29tbW9uIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTIyNjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc2NvbW1vbgpAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5mcy1jb21tb24KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgUmVxdWlyZWQtU3RvcDogICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBORlMgc3VwcG9ydCBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlcgorIyBEZXNjcmlwdGlvbjogICAgICAgTkZTIGlzIGEgcG9wdWxhciBwcm90b2NvbCBmb3IgZmlsZSBzaGFyaW5nIGFjcm9zcworIyAgICAgICAgICAgICAgICAgICAgVENQL0lQIG5ldHdvcmtzLiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgdmFyaW91cworIyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5GUyBtb3VudHMuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjCisjIExvY2F0aW9uIG9mIGV4ZWN1dGFibGVzOgorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAteCAiJE5GU19TVEFURCIgfHwgTkZTX1NUQVREPS91c3Ivc2Jpbi9ycGMuc3RhdGQKK3Rlc3QgLXogIiRTVEFURF9QSUQiICYmIFNUQVREX1BJRD0vdmFyL3J1bi9ycGMuc3RhdGQucGlkCisjCisjIFRoZSBkZWZhdWx0IHN0YXRlIGRpcmVjdG9yeSBpcyAvdmFyL2xpYi9uZnMKK3Rlc3QgLW4gIiRORlNfU1RBVEVESVIiIHx8IE5GU19TVEFURURJUj0vdmFyL2xpYi9uZnMKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0YXJ0dXAgYW5kIHNodXRkb3duIGZ1bmN0aW9ucy4KKyMgIEFjdHVhbCBzdGFydHVwL3NodXRkb3duIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCitzdGFydF9zdGF0ZCgpeworCWVjaG8gLW4gInN0YXJ0aW5nIHN0YXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfU1RBVEQiIC0tcGlkZmlsZSAiJFNUQVREX1BJRCIKKwllY2hvIGRvbmUKK30KK3N0b3Bfc3RhdGQoKXsKKwllY2hvIC1uICdzdG9wcGluZyBzdGF0ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1waWRmaWxlICIkU1RBVERfUElEIgorCWVjaG8gZG9uZQorfQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgc3VwcG9ydGVkIG9wdGlvbnM6CisjICBzdGFydAorIyAgc3RvcAorIyAgcmVzdGFydDogc3RvcHMgYW5kIHN0YXJ0cyBtb3VudGQKKyNGSVhNRTogbmVlZCB0byBjcmVhdGUgdGhlIC92YXIvbGliL25mcy8uLi4gZGlyZWN0b3JpZXMKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydF9zdGF0ZDs7CisgIHN0b3ApCisJc3RvcF9zdGF0ZDs7CisgIHN0YXR1cykKKwlzdGF0dXMgJE5GU19TVEFURAorCWV4aXQgJD87OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKwlleGl0IDE7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc3NlcnZlciBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNzZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkOTNhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNzZXJ2ZXIKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmZzLWtlcm5lbC1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgbmZzLWNvbW1vbiAkcG9ydG1hcCBod2Nsb2NrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIG5mcy1jb21tb24gJHBvcnRtYXAgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEtlcm5lbCBORlMgc2VydmVyIHN1cHBvcnQKKyMgRGVzY3JpcHRpb246ICAgICAgIE5GUyBpcyBhIHBvcHVsYXIgcHJvdG9jb2wgZm9yIGZpbGUgc2hhcmluZyBhY3Jvc3MKKyMgICAgICAgICAgICAgICAgICAgIFRDUC9JUCBuZXR3b3Jrcy4gVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIE5GUyBzZXJ2ZXIKKyMgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIHRoZQorIyAgICAgICAgICAgICAgICAgICAgL2V0Yy9leHBvcnRzIGZpbGUuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKyMKKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE5GU19TRVJWRVJTIG1heSBiZSBzZXQgaW4gL2V0Yy9kZWZhdWx0L25mc2QKKyMgT3RoZXIgY29udHJvbCB2YXJpYWJsZXMgbWF5IGJlIG92ZXJyaWRkZW4gaGVyZSB0b28KK3Rlc3QgLXIgL2V0Yy9kZWZhdWx0L25mc2QgJiYgLiAvZXRjL2RlZmF1bHQvbmZzZAorIworIyBMb2NhdGlvbiBvZiBleGVjdXRhYmxlczoKK3Rlc3QgLXggIiRORlNfTU9VTlREIiB8fCBORlNfTU9VTlREPS91c3Ivc2Jpbi9ycGMubW91bnRkCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IE5GU19ORlNEPS91c3Ivc2Jpbi9ycGMubmZzZAorIworIyBUaGUgdXNlciBtb2RlIHByb2dyYW0gbXVzdCBhbHNvIGV4aXN0IChpdCBqdXN0IHN0YXJ0cyB0aGUga2VybmVsCisjIHRocmVhZHMgdXNpbmcgdGhlIGtlcm5lbCBtb2R1bGUgY29kZSkuCit0ZXN0IC14ICIkTkZTX01PVU5URCIgfHwgZXhpdCAwCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IGV4aXQgMAorIworIyBEZWZhdWx0IGlzIDggdGhyZWFkcywgdmFsdWUgaXMgc2V0dGFibGUgYmV0d2VlbiAxIGFuZCB0aGUgdHJ1ZWx5CisjIHJpZGljdWxvdXMgOTkKK3Rlc3QgIiRORlNfU0VSVkVSUyIgIT0gIiIgJiYgdGVzdCAiJE5GU19TRVJWRVJTIiAtZ3QgMCAmJiB0ZXN0ICIkTkZTX1NFUlZFUlMiIC1sdCAxMDAgfHwgTkZTX1NFUlZFUlM9OAorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RhcnR1cCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zLgorIyAgQWN0dWFsIHN0YXJ0dXAvc2h1dGRvd24gaXMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjbW91bnRkCitzdGFydF9tb3VudGQoKXsKKwllY2hvIC1uICdzdGFydGluZyBtb3VudGQ6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyAiJE5GU19NT1VOVEQiIC0tICItZiAvZXRjL2V4cG9ydHMgJEAiCisJZWNobyBkb25lCit9CitzdG9wX21vdW50ZCgpeworCWVjaG8gLW4gJ3N0b3BwaW5nIG1vdW50ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJE5GU19NT1VOVEQiCisJZWNobyBkb25lCit9CisjCisjbmZzZAorc3RhcnRfbmZzZCgpeworICAgICAgICBtb2Rwcm9iZSAtcSBuZnNkCisJZ3JlcCAtcSBuZnNkIC9wcm9jL2ZpbGVzeXN0ZW1zIHx8IHsKKwkJZWNobyBORlMgZGFlbW9uIHN1cHBvcnQgbm90IGVuYWJsZWQgaW4ga2VybmVsCisJCWV4aXQgMQorICAgICAgICB9CisJZ3JlcCAtcSBuZnNkIC9wcm9jL21vdW50cyB8fCBtb3VudCAtdCBuZnNkIG5mc2QgL3Byb2MvZnMvbmZzZAorCWdyZXAgLXEgbmZzZCAvcHJvYy9tb3VudHMgfHwgeworCQllY2hvIG5mc2QgZmlsZXN5c3RlbSBjb3VsZCBub3QgYmUgbW91bnRlZCBhdCAvcHJvYy9mcy9uZnNkCisJCWV4aXQgMQorICAgICAgICB9CisKKwllY2hvIC1uICJzdGFydGluZyAkMSBuZnNkIGtlcm5lbCB0aHJlYWRzOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfTkZTRCIgLS0gIiRAIgorCWVjaG8gZG9uZQorfQorZGVsYXlfbmZzZCgpeworCWZvciBkZWxheSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorCWRvCisJCWlmIHBpZG9mIG5mc2QgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvIC1uIC4KKwkJCXNsZWVwIDEKKwkJZWxzZQorCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisJcmV0dXJuIDEKK30KK3N0b3BfbmZzZCgpeworCSMgV0FSTklORzogdGhpcyBraWxscyBhbnkgcHJvY2VzcyB3aXRoIHRoZSBleGVjdXRhYmxlCisJIyBuYW1lICduZnNkJy4KKwllY2hvIC1uICdzdG9wcGluZyBuZnNkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLW5hbWUgbmZzZAorCWlmIGRlbGF5X25mc2QgfHwgeworCQllY2hvIGZhaWxlZAorCQllY2hvICcgdXNpbmcgc2lnbmFsIDk6ICcKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgOSAtLW5hbWUgbmZzZAorCQlkZWxheV9uZnNkCisJfQorCXRoZW4KKwkJZWNobyBkb25lCisJZWxzZQorCQllY2hvIGZhaWxlZAorCWZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHN1cHBvcnRlZCBvcHRpb25zOgorIyAgc3RhcnQKKyMgIHN0b3AKKyMgIHJlbG9hZDogcmVsb2FkcyB0aGUgZXhwb3J0cyBmaWxlCisjICByZXN0YXJ0OiBzdG9wcyBhbmQgc3RhcnRzIG1vdW50ZAorI0ZJWE1FOiBuZWVkIHRvIGNyZWF0ZSB0aGUgL3Zhci9saWIvbmZzLy4uLiBkaXJlY3RvcmllcworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWV4cG9ydGZzIC1yCisJc3RhcnRfbmZzZCAiJE5GU19TRVJWRVJTIgorCXN0YXJ0X21vdW50ZAorCXRlc3QgLXIgL2V0Yy9leHBvcnRzICYmIGV4cG9ydGZzIC1hOzsKKyAgc3RvcCkJZXhwb3J0ZnMgLXVhCisJc3RvcF9tb3VudGQKKwlzdG9wX25mc2Q7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9ycGMubW91bnRkCisJUkVUVkFMPSQ/CisJc3RhdHVzIG5mc2QKKwlydmFsPSQ/CisJWyAkUkVUVkFMIC1lcSAwIF0gJiYgZXhpdCAkcnZhbAorCWV4aXQgJFJFVFZBTDs7CisgIHJlbG9hZCkJdGVzdCAtciAvZXRjL2V4cG9ydHMgJiYgZXhwb3J0ZnMgLXI7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMTs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvcHJvYy1mcy1uZnNkLm1vdW50IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL3Byb2MtZnMtbmZzZC5tb3VudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA4MDFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL3Byb2MtZnMtbmZzZC5tb3VudApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTRCBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW0KK0FmdGVyPXN5c3RlbWQtbW9kdWxlcy1sb2FkLnNlcnZpY2UKKworW01vdW50XQorV2hhdD1uZnNkCitXaGVyZT0vcHJvYy9mcy9uZnNkCitUeXBlPW5mc2QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEwMWRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiCkBAIC0wLDAgKzEsMTQxIEBACitTVU1NQVJZID0gInVzZXJzcGFjZSB1dGlsaXRpZXMgZm9yIGtlcm5lbCBuZnMiCitERVNDUklQVElPTiA9ICJUaGUgbmZzLXV0aWxzIHBhY2thZ2UgcHJvdmlkZXMgYSBkYWVtb24gZm9yIHRoZSBrZXJuZWwgXAorTkZTIHNlcnZlciBhbmQgcmVsYXRlZCB0b29scy4iCitIT01FUEFHRSA9ICJodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJNSVQgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NWYzYTkzYTVjM2M3ODg4ZGU2MjNiNDZlYTA4NWE4NCIKKworIyB1dGlsLWxpbnV4IGZvciBsaWJibGtpZAorREVQRU5EUyA9ICJsaWJjYXAgbGlibmZzaWRtYXAgbGliZXZlbnQgdXRpbC1saW51eCBzcWxpdGUzIgorUkRFUEVORFNfJHtQTn0tY2xpZW50ID0gInJwY2JpbmQgYmFzaCIKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWNsaWVudCBiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1uZnNkIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1jbGllbnQiCitVU0VSQUREX1BBUkFNXyR7UE59LWNsaWVudCA9ICItLXN5c3RlbSAgLS1ob21lLWRpciAvdmFyL2xpYi9uZnMgXAorCQkJICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGN1c2VyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmZzLXV0aWxzLyR7UFZ9L25mcy11dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL25mc2NvbW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtc2VydmVyLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vbmZzLW1vdW50ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1zdGF0ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2MtZnMtbmZzZC5tb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkZTY3NmI5ZmYzNGI4ZjlhZGRjMWQwODAwZmFiZGY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmNzlkNzBiN2I1OGIyYzhmOWI3OThjNTg3MjExMjdlODJiYjk2MDIyYWRjMDRhNWM0Y2IyNTE2MzBlNjk2YjgiCisKKyMgT25seSBrZXJuZWwtbW9kdWxlLW5mc2QgaXMgcmVxdWlyZWQgaGVyZSAoYnV0IGNhbiBiZSBidWlsdC1pbikgIC0gdGhlIG5mc2QgbW9kdWxlIHdpbGwKKyMgcHVsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXBlbmRlbmNpZXMuCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tY2xpZW50IgorSU5JVFNDUklQVF9OQU1FID0gIm5mc3NlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LWNsaWVudCA9ICJuZnNjb21tb24iCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1jbGllbnQgPSAiZGVmYXVsdHMgMTkgMjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmZzLXNlcnZlci5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1jbGllbnQgPSAibmZzLXN0YXRkLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCisKKyMgLS1lbmFibGUtdXVpZCBpcyBuZWVkIGZvciBjcm9zcy1jb21waWxpbmcKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3RhdGR1c2VyPXJwY3VzZXIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vdW50Y29uZmlnIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJtb3VudC1tb3VudCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5mc3Y0MSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtdXVpZCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXRpcnBjIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzZGNsdHJhY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zdGF0ZHBhdGg9L3Zhci9saWIvbmZzL3N0YXRkIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwLXdyYXBwZXJzLC0td2l0aG91dC10Y3Atd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tuZnNpZG1hcF0gPSAiLS1lbmFibGUtbmZzaWRtYXAsLS1kaXNhYmxlLW5mc2lkbWFwLGtleXV0aWxzIgorCitJTkhJQklUX0FVVE9fU1RBR0UgPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNsaWVudCAke1BOfS1zdGF0cyIKKworQ09ORkZJTEVTXyR7UE59LWNsaWVudCArPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL2V0YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3JtdGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy94dGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9zdGF0ZC9zdGF0ZSBcCisJCQkgICAke3N5c2NvbmZkaXJ9L25mc21vdW50LmNvbmYiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vKm1vdW50Lm5mcyogJHtzYmluZGlyfS8qc3RhdGQgXAorCQkgICAgICAke3NiaW5kaXJ9L3JwYy5pZG1hcGQgJHtzYmluZGlyfS9zbS1ub3RpZnkgXAorCQkgICAgICAke3NiaW5kaXJ9L3Nob3dtb3VudCAke3NiaW5kaXJ9L25mc3N0YXQgXAorCQkgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMgXAorCQkgICAgICAke3N5c2NvbmZkaXJ9L25mcy11dGlscy5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9uZnNtb3VudC5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uIFwKKwkJICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uZnMtc3RhdGQuc2VydmljZSIKK0ZJTEVTXyR7UE59LXN0YXRzID0gIiR7c2JpbmRpcn0vbW91bnRzdGF0cyAke3NiaW5kaXJ9L25mc2lvc3RhdCIKK1JERVBFTkRTXyR7UE59LXN0YXRzID0gInB5dGhvbiIKKworRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCisgICAgICAgICAgICAke1N9L3V0aWxzL21vdW50L01ha2VmaWxlLmFtCisKKyAgICAgICAgc2VkIC1pIC1lICdzLHNiaW5kaXIgPSAvc2JpbixzYmluZGlyID0gJHtiYXNlX3NiaW5kaXJ9LGcnIFwKKyAgICAgICAgICAgICR7U30vdXRpbHMvb3NkX2xvZ2luL01ha2VmaWxlLmFtCit9CisKKyMgTWFrZSBjbGVhbiBuZWVkZWQgYmVjYXVzZSB0aGUgcGFja2FnZSBjb21lcyB3aXRoCisjIHByZWNvbXBpbGVkIDY0LWJpdCBvYmplY3RzIHRoYXQgYnJlYWsgdGhlIGJ1aWxkCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJbWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNzZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc3NlcnZlcgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc2NvbW1vbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnMtdXRpbHMuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L3V0aWxzL21vdW50L25mc21vdW50LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLW1vdW50ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1zdGF0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJICAgIGVjaG8gIm5mc2QiID4gJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvbmZzZC5jb25mCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy8KKwkgICAgbG4gLXNmIC4uL3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy9wcm9jLWZzLW5mc2QubW91bnQKKwlmaQorCisJIyBrZXJuZWwgY29kZSBhcyBvZiAzLjggaGFyZC1jb2RlcyB0aGlzIHBhdGggYXMgYSBkZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9L3Zhci9saWIvbmZzL3Y0cmVjb3ZlcnkKKworCSMgY2hvd24gdGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcworCWNob3duIC1SIHJwY3VzZXI6cnBjdXNlciAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkCisJY2htb2QgMDY0NCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlCisKKwkjIHRoZSBmb2xsb3dpbmcgYXJlIGJ1aWx0IGJ5IENDX0ZPUl9CVUlMRAorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L3JwY2RlYnVnCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZ2VuCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vbG9ja3Rlc3QKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxNWEzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCkBAIC0wLDAgKzEsMzcgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Zvbm8ub3JnIgorU1VNTUFSWSAgPSAib3BlbiBzb3VyY2UgdGVsZXBob255IgorREVTQ1JJUFRJT04gPSAib0Zvbm8gaXMgYSBzdGFjayBmb3IgbW9iaWxlIHRlbGVwaG9ueSBkZXZpY2VzIG9uIExpbnV4LiBvRm9ubyBzdXBwb3J0cyBzcGVha2luZyB0byB0ZWxlcGhvbnkgZGV2aWNlcyB0aHJvdWdoIHNwZWNpZmljIGRyaXZlcnMsIG9yIHdpdGggZ2VuZXJpYyBBVCBjb21tYW5kcy4iCitMSUNFTlNFICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vZm9uby5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTNjZTE3ZDU5NzhlZjM0NDVkZWYyNjViOTg4OTljMmVlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgc3lzdGVtZCBibHVldG9vdGgKKworREVQRU5EUyAgPSAiZGJ1cyBnbGliLTIuMCB1ZGV2IG1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIKKworSU5JVFNDUklQVF9OQU1FID0gIm9mb25vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMjIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRlc3QiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvZm9uby5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L29mb25vICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vZm9ubworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICJkYnVzIgorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldiAke3N5c3RlbWRfdW5pdGRpcn0iCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vJHtCUE59L3Rlc3QiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdCBweXRob24tZGJ1cyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2YjZkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMmQ3MjlhZjA4OTdkN2Q3MmI4M2QxMTE4NzZmZWJmOWUwZWVjMWE2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFja3RyYWNlOiBEaXNhYmxlIGZvciBub24tZ2xpYmMgQyBsaWJyYXJpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBzcmMvbG9nLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCitpbmRleCBmZWJjODc0Li45ZGI0YWU3IDEwMDY0NAorLS0tIGEvc3JjL2xvZy5jCisrKysgYi9zcmMvbG9nLmMKK0BAIC0zMCw3ICszMCw5IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxkbGZjbi5oPgorIAorICNpbmNsdWRlICJvZm9uby5oIgorQEAgLTIxOSw4ICsyMjEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pCisgeworIAlvZm9ub19lcnJvcigiQWJvcnRpbmcgKHNpZ25hbCAlZCkgWyVzXSIsIHNpZ25vLCBwcm9ncmFtX2V4ZWMpOworIAorKyNpZmRlZiBfX0dMSUJDX18KKyAJcHJpbnRfYmFja3RyYWNlKDIpOworLQorKyNlbmRpZgorIAlleGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4Y2E3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaApAQCAtMCwwICsxLDEyNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRnJvbSA1NzJmYzIzZjZlZmQ2NWEyZWY5ZTZjOTU3YjI1MDYxMDg3Mzg2NzJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjUgQXVnIDIwMTQgMTY6NTk6MzkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJ0ZXN0OiBDb252ZXJ0IHRvIFB5dGhvbiAzIgorCitUaGlzIHJldmVydHMgY29tbWl0IGMwMjdhYjlmYmMxYThlOGM5ZTc2YmNkMTIzZGYxYWQ3Njk2MzA3YzIuCistLS0KKyB0ZXN0L2FjdGl2YXRlLWNvbnRleHQgICAgICAgICAgfCAgMiArLQorIHRlc3QvYW5zd2VyLWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9iYWNrdHJhY2UgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NhbmNlbC11c3NkICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtZGlhbC1udW1iZXIgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1oYW5ndXAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWxpc3QtY2FsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzICAgICAgfCAgMiArLQorIHRlc3QvY2hhbmdlLXBpbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dCAgIHwgIDIgKy0KKyB0ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvY3JlYXRlLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9kZWFjdGl2YXRlLWFsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2RlYWN0aXZhdGUtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvZGlhbC1udW1iZXIgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyAgIHwgIDIgKy0KKyB0ZXN0L2Rpc2FibGUtZ3BycyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGlzYWJsZS1tb2RlbSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNwbGF5LWljb24gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VuYWJsZS1jYnMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW5hYmxlLWdwcnMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbmFibGUtbW9kZW0gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VudGVyLXBpbiAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZ2V0LWljb24gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9nZXQtb3BlcmF0b3JzICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLWFjdGl2ZSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtYWxsICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1jYWxsICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9ob2xkLWFuZC1hbnN3ZXIgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2luaXRpYXRlLXVzc2QgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9saXN0LWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3QtY29udGV4dHMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1tZXNzYWdlcyAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LW1vZGVtcyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3Qtb3BlcmF0b3JzICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbG9jay1waW4gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9sb2NrZG93bi1tb2RlbSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L21vbml0b3Itb2Zvbm8gICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9vZmZsaW5lLW1vZGVtICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L29ubGluZS1tb2RlbSAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcHJpdmF0ZS1jaGF0ICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MgIHwgIDIgKy0KKyB0ZXN0L3JlY2VpdmUtc21zICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVqZWN0LWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlbGVhc2UtYW5kLXN3YXAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVtb3ZlLWNvbnRleHRzICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZXNldC1waW4gICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycyAgICAgICAgfCAgMiArLQorIHRlc3Qvc2VuZC1zbXMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXVzc2QgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3Qvc2VuZC12Y2FsICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXZjYXJkICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWNicy10b3BpY3MgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eSAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1mYXN0LWRvcm1hbmN5ICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWdzbS1iYW5kICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtbWljLXZvbHVtZSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1tbXMtZGV0YWlscyAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LW1zaXNkbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1zcGVha2VyLXZvbHVtZSAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdHR5ICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC11bXRzLWJhbmQgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyAgICAgICB8ICAyICstCisgdGVzdC9zd2FwLWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZSAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYWxsLWJhcnJpbmcgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncyAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYnMgICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L3Rlc3QtZ25zcyAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtbW9kZW0gICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbiB8ICAyICstCisgdGVzdC90ZXN0LXBob25lYm9vayAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24gICAgfCAgMiArLQorIHRlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNtcyAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgdGVzdC90ZXN0LXNzICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zcy1jb250cm9sLWNmICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3RrLW1lbnUgICAgICAgICAgICAgfCAzNCArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgdGVzdC91bmxvY2stcGluICAgICAgICAgICAgICAgIHwgIDIgKy0KKyA5NCBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0IGIvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CitpbmRleCBlNGZjNzAyLi40MjQxMzk2IDEwMDc1NQorLS0tIGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2FjdGl2YXRlLWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9hbnN3ZXItY2FsbHMgYi90ZXN0L2Fuc3dlci1jYWxscworaW5kZXggZGFhNzk0Yi4uNDVmZjA4ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvYW5zd2VyLWNhbGxzCisrKysgYi90ZXN0L2Fuc3dlci1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvYmFja3RyYWNlIGIvdGVzdC9iYWNrdHJhY2UKK2luZGV4IDAzYzc2MzIuLmM2MjQ3MDkgMTAwNzU1CistLS0gYS90ZXN0L2JhY2t0cmFjZQorKysrIGIvdGVzdC9iYWNrdHJhY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IG9zCisgaW1wb3J0IHJlCitkaWZmIC0tZ2l0IGEvdGVzdC9jYW5jZWwtdXNzZCBiL3Rlc3QvY2FuY2VsLXVzc2QKK2luZGV4IGU3NTU5YmEuLjE3OTdmMjYgMTAwNzU1CistLS0gYS90ZXN0L2NhbmNlbC11c3NkCisrKysgYi90ZXN0L2NhbmNlbC11c3NkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCitpbmRleCAzYWRjMTRkLi4wZGRjMGNkIDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorKysrIGIvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKK2luZGV4IGFjMTZhMmQuLmEzY2NhMDEgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKKysrKyBiL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIgYi90ZXN0L2NkbWEtZGlhbC1udW1iZXIKK2luZGV4IDY4MzQzMWUuLjljZGZiMjQgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtaGFuZ3VwIGIvdGVzdC9jZG1hLWhhbmd1cAoraW5kZXggNDFmZmE2MC4uNDkzZWNlNCAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1oYW5ndXAKKysrKyBiL3Rlc3QvY2RtYS1oYW5ndXAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWxpc3QtY2FsbCBiL3Rlc3QvY2RtYS1saXN0LWNhbGwKK2luZGV4IGIxMzIzNTMuLjVkMzZhNjkgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtbGlzdC1jYWxsCisrKysgYi90ZXN0L2NkbWEtbGlzdC1jYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscyBiL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKK2luZGV4IGE2MGM4NmUuLmEyODZiMGUgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCisrKysgYi90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY2hhbmdlLXBpbiBiL3Rlc3QvY2hhbmdlLXBpbgoraW5kZXggMzAxYzZjZS4uMDAwY2U1MyAxMDA3NTUKKy0tLSBhL3Rlc3QvY2hhbmdlLXBpbgorKysrIGIvdGVzdC9jaGFuZ2UtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQgYi90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0CitpbmRleCAxMDg5MDUzLi5lZmQwOTk4IDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorKysrIGIvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitpbmRleCA1OTgzMzZmLi5lNWJlMDhkIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKKysrKyBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkgYi90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5CitpbmRleCAxYjc2MDEwLi45NzA0N2MzIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorKysrIGIvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RlYWN0aXZhdGUtYWxsIGIvdGVzdC9kZWFjdGl2YXRlLWFsbAoraW5kZXggNWFhODU4Ny4uNDI3MDA5ZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKKysrKyBiL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAoraW5kZXggNWM4NmE3MS4uZGY0N2QyZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RpYWwtbnVtYmVyIGIvdGVzdC9kaWFsLW51bWJlcgoraW5kZXggZmU1YWRhZC4uZWU2NzRkOSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvZGlhbC1udW1iZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDgxMWU0ZmEuLjM2MDk4MTYgMTAwNzU1CistLS0gYS90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtZ3BycyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitpbmRleCA2MWNlMjE2Li5jNmM0MGE1IDEwMDc1NQorLS0tIGEvdGVzdC9kaXNhYmxlLWdwcnMKKysrKyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1tb2RlbSBiL3Rlc3QvZGlzYWJsZS1tb2RlbQoraW5kZXggNmZiYTg1Ny4uY2E4YzhkOCAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzYWJsZS1tb2RlbQorKysrIGIvdGVzdC9kaXNhYmxlLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzcGxheS1pY29uIGIvdGVzdC9kaXNwbGF5LWljb24KK2luZGV4IGFjNDA4MTguLjc1M2QxNGQgMTAwNzU1CistLS0gYS90ZXN0L2Rpc3BsYXktaWNvbgorKysrIGIvdGVzdC9kaXNwbGF5LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtY2JzIGIvdGVzdC9lbmFibGUtY2JzCitpbmRleCA0YThiZjY2Li5jMDhiZjJiIDEwMDc1NQorLS0tIGEvdGVzdC9lbmFibGUtY2JzCisrKysgYi90ZXN0L2VuYWJsZS1jYnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtZ3BycyBiL3Rlc3QvZW5hYmxlLWdwcnMKK2luZGV4IDY4ZDVlZjAuLjg2NjQ4OTEgMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1ncHJzCisrKysgYi90ZXN0L2VuYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZW5hYmxlLW1vZGVtIGIvdGVzdC9lbmFibGUtbW9kZW0KK2luZGV4IGZjNTk1OGEuLmRmYWFhYTggMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1tb2RlbQorKysrIGIvdGVzdC9lbmFibGUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbnRlci1waW4gYi90ZXN0L2VudGVyLXBpbgoraW5kZXggOTU1NjM2My4uYzZlZTY2OSAxMDA3NTUKKy0tLSBhL3Rlc3QvZW50ZXItcGluCisrKysgYi90ZXN0L2VudGVyLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2dldC1pY29uIGIvdGVzdC9nZXQtaWNvbgoraW5kZXggNTU2OWEzMy4uZmRhYWVlNyAxMDA3NTUKKy0tLSBhL3Rlc3QvZ2V0LWljb24KKysrKyBiL3Rlc3QvZ2V0LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtb3BlcmF0b3JzIGIvdGVzdC9nZXQtb3BlcmF0b3JzCitpbmRleCAwZjM1YzgwLi42MjM1NGM1IDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtb3BlcmF0b3JzCisrKysgYi90ZXN0L2dldC1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlIGIvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCitpbmRleCA3YmE2MzY1Li43N2QyMGQwIDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCisrKysgYi90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZSBiL3Rlc3QvaGFuZ3VwLWFjdGl2ZQoraW5kZXggODJlMGViMC4uNWFmNjJhYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZQorKysrIGIvdGVzdC9oYW5ndXAtYWN0aXZlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFsbCBiL3Rlc3QvaGFuZ3VwLWFsbAoraW5kZXggM2EwMTM4ZC4uMzI5MzNkYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFsbAorKysrIGIvdGVzdC9oYW5ndXAtYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWNhbGwgYi90ZXN0L2hhbmd1cC1jYWxsCitpbmRleCA1YTJkZTIwLi40NDcwMjBjIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtY2FsbAorKysrIGIvdGVzdC9oYW5ndXAtY2FsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5IGIvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQoraW5kZXggMjQ3NTFjMy4uNDhmZTM0MiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKKysrKyBiL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9ob2xkLWFuZC1hbnN3ZXIgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgoraW5kZXggZGEzYmU1Ny4uMmM0N2UyNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCisrKysgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2luaXRpYXRlLXVzc2QgYi90ZXN0L2luaXRpYXRlLXVzc2QKK2luZGV4IGZhZjUwZDAuLmQ3MDIyZjEgMTAwNzU1CistLS0gYS90ZXN0L2luaXRpYXRlLXVzc2QKKysrKyBiL3Rlc3QvaW5pdGlhdGUtdXNzZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK0BAIC00NSw3ICs0NSw3IEBAIGlmIHN0YXRlID09ICJpZGxlIjoKKyBwcmludCgiU3RhdGU6ICVzIiAlIChzdGF0ZSkpCisgCisgd2hpbGUgc3RhdGUgPT0gInVzZXItcmVzcG9uc2UiOgorLQlyZXNwb25zZSA9IGlucHV0KCJFbnRlciByZXNwb25zZTogIikKKysJcmVzcG9uc2UgPSByYXdfaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorIAorIAlyZXN1bHQgPSB1c3NkLlJlc3BvbmQocmVzcG9uc2UsIHRpbWVvdXQ9MTAwKQorIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1jYWxscyBiL3Rlc3QvbGlzdC1jYWxscworaW5kZXggZjNlZTk5MS4uMDg2NjhjNiAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1jYWxscworKysrIGIvdGVzdC9saXN0LWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LWNvbnRleHRzIGIvdGVzdC9saXN0LWNvbnRleHRzCitpbmRleCA3ODI3OGNhLi5mMGQ0MDk0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LWNvbnRleHRzCisrKysgYi90ZXN0L2xpc3QtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtbWVzc2FnZXMgYi90ZXN0L2xpc3QtbWVzc2FnZXMKK2luZGV4IDlmNWJjZTMuLmNmY2NiZWEgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtbWVzc2FnZXMKKysrKyBiL3Rlc3QvbGlzdC1tZXNzYWdlcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1tb2RlbXMgYi90ZXN0L2xpc3QtbW9kZW1zCitpbmRleCBiOWY1MTBhLi5lZDY2MTI0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW1vZGVtcworKysrIGIvdGVzdC9saXN0LW1vZGVtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1vcGVyYXRvcnMgYi90ZXN0L2xpc3Qtb3BlcmF0b3JzCitpbmRleCAwNjRjNGUzLi4zNDliZjQxIDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW9wZXJhdG9ycworKysrIGIvdGVzdC9saXN0LW9wZXJhdG9ycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2xvY2stcGluIGIvdGVzdC9sb2NrLXBpbgoraW5kZXggOTZlYTljMi4uNTU3OTczNSAxMDA3NTUKKy0tLSBhL3Rlc3QvbG9jay1waW4KKysrKyBiL3Rlc3QvbG9jay1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9sb2NrZG93bi1tb2RlbSBiL3Rlc3QvbG9ja2Rvd24tbW9kZW0KK2luZGV4IDRlMDQyMDUuLjc4MWFiYjYgMTAwNzU1CistLS0gYS90ZXN0L2xvY2tkb3duLW1vZGVtCisrKysgYi90ZXN0L2xvY2tkb3duLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvbW9uaXRvci1vZm9ubyBiL3Rlc3QvbW9uaXRvci1vZm9ubworaW5kZXggODgzMDc1Ny4uYmQzMTYxNyAxMDA3NTUKKy0tLSBhL3Rlc3QvbW9uaXRvci1vZm9ubworKysrIGIvdGVzdC9tb25pdG9yLW9mb25vCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorQEAgLTYsNyArNiw3IEBAIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorIAorIF9kYnVzMnB5ID0geworLQlkYnVzLlN0cmluZyA6IHN0ciwKKysJZGJ1cy5TdHJpbmcgOiB1bmljb2RlLAorIAlkYnVzLlVJbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQxNiA6IGludCwKK2RpZmYgLS1naXQgYS90ZXN0L29mZmxpbmUtbW9kZW0gYi90ZXN0L29mZmxpbmUtbW9kZW0KK2luZGV4IGU4YzA0M2EuLmVhMWY1MjIgMTAwNzU1CistLS0gYS90ZXN0L29mZmxpbmUtbW9kZW0KKysrKyBiL3Rlc3Qvb2ZmbGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9vbmxpbmUtbW9kZW0gYi90ZXN0L29ubGluZS1tb2RlbQoraW5kZXggMDI5YzRhNS4uMzEwZWQ3ZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvb25saW5lLW1vZGVtCisrKysgYi90ZXN0L29ubGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9wcml2YXRlLWNoYXQgYi90ZXN0L3ByaXZhdGUtY2hhdAoraW5kZXggZTdlNTQwNi4uZWYyZWY2YyAxMDA3NTUKKy0tLSBhL3Rlc3QvcHJpdmF0ZS1jaGF0CisrKysgYi90ZXN0L3ByaXZhdGUtY2hhdAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitpbmRleCA4YTNlY2ZhLi4wZjA1OGIyIDEwMDc1NQorLS0tIGEvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKKysrKyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBvcworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWNlaXZlLXNtcyBiL3Rlc3QvcmVjZWl2ZS1zbXMKK2luZGV4IGEwYzY5MTUuLmMyM2ViMTQgMTAwNzU1CistLS0gYS90ZXN0L3JlY2VpdmUtc21zCisrKysgYi90ZXN0L3JlY2VpdmUtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvcmVqZWN0LWNhbGxzIGIvdGVzdC9yZWplY3QtY2FsbHMKK2luZGV4IDcxYjI0M2UuLjllZGYxZmYgMTAwNzU1CistLS0gYS90ZXN0L3JlamVjdC1jYWxscworKysrIGIvdGVzdC9yZWplY3QtY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlciBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitpbmRleCBkZWM4ZTE3Li4yNWZkODE4IDEwMDc1NQorLS0tIGEvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKKysrKyBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcCBiL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAoraW5kZXggY2I4Yzg0ZS4uN2IzNTY5ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAorKysrIGIvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVtb3ZlLWNvbnRleHRzIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK2luZGV4IGI1NDE4NGUuLmM1MDgyY2IgMTAwNzU1CistLS0gYS90ZXN0L3JlbW92ZS1jb250ZXh0cworKysrIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Jlc2V0LXBpbiBiL3Rlc3QvcmVzZXQtcGluCitpbmRleCAzZmJkMTI2Li5iNDI5MjU0IDEwMDc1NQorLS0tIGEvdGVzdC9yZXNldC1waW4KKysrKyBiL3Rlc3QvcmVzZXQtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK2luZGV4IGI0ZmMwNWUuLjc0OWM3MTAgMTAwNzU1CistLS0gYS90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycworKysrIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXNtcyBiL3Rlc3Qvc2VuZC1zbXMKK2luZGV4IDk4ODA4YWEuLmUwNjQ0NGQgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtc21zCisrKysgYi90ZXN0L3NlbmQtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC11c3NkIGIvdGVzdC9zZW5kLXVzc2QKK2luZGV4IGEyMGUwOTguLmU1ODU4ODMgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdXNzZAorKysrIGIvdGVzdC9zZW5kLXVzc2QKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitAQCAtNDYsNyArNDYsNyBAQCBpZiBzdGF0ZSA9PSAiaWRsZSI6CisgcHJpbnQoIlN0YXRlOiAlcyIgJSAoc3RhdGUpKQorIAorIHdoaWxlIHN0YXRlID09ICJ1c2VyLXJlc3BvbnNlIjoKKy0JcmVzcG9uc2UgPSBpbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisrCXJlc3BvbnNlID0gcmF3X2lucHV0KCJFbnRlciByZXNwb25zZTogIikKKyAKKyAJcHJpbnQodXNzZC5SZXNwb25kKHJlc3BvbnNlLCB0aW1lb3V0PTEwMCkpCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXZjYWwgYi90ZXN0L3NlbmQtdmNhbAoraW5kZXggNTY2ZGFlZi4uN2Y4MjcyYiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC12Y2FsCisrKysgYi90ZXN0L3NlbmQtdmNhbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtdmNhcmQgYi90ZXN0L3NlbmQtdmNhcmQKK2luZGV4IDRkZWRmNTEuLjI1MGIzNmYgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdmNhcmQKKysrKyBiL3Rlc3Qvc2VuZC12Y2FyZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgYi90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDQ5ZDFjZTAuLjlmZDM1OGIgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKKysrKyBiL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY2JzLXRvcGljcyBiL3Rlc3Qvc2V0LWNicy10b3BpY3MKK2luZGV4IGRiOTVlMTYuLjc4ZDZkNDQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYnMtdG9waWNzCisrKysgYi90ZXN0L3NldC1jYnMtdG9waWNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkgYi90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5CitpbmRleCA1ZmY3YTY3Li42NGE2ZmI4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorKysrIGIvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1mYXN0LWRvcm1hbmN5IGIvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQoraW5kZXggZWY3N2JjZC4uN2JmNzcxNSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKKysrKyBiL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtZ3NtLWJhbmQgYi90ZXN0L3NldC1nc20tYmFuZAoraW5kZXggYjM3YmNiNS4uM2MxN2MxMCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWdzbS1iYW5kCisrKysgYi90ZXN0L3NldC1nc20tYmFuZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1taWMtdm9sdW1lIGIvdGVzdC9zZXQtbWljLXZvbHVtZQoraW5kZXggY2Q2YzczZi4uZTBiZmY0OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1pYy12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LW1pYy12b2x1bWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtbW1zLWRldGFpbHMgYi90ZXN0L3NldC1tbXMtZGV0YWlscworaW5kZXggNmVlNTlmYS4uZDJkMDgzOCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCisrKysgYi90ZXN0L3NldC1tbXMtZGV0YWlscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1tc2lzZG4gYi90ZXN0L3NldC1tc2lzZG4KK2luZGV4IGI1ZmU4MTkuLjAxZjI4NGQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1tc2lzZG4KKysrKyBiL3Rlc3Qvc2V0LW1zaXNkbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQgYi90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKK2luZGV4IDY5OGM4YjYuLjllM2UwNTggMTAwNzU1CistLS0gYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKKysrKyBiL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1zcGVha2VyLXZvbHVtZSBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitpbmRleCA2ZDRlMzAxLi43OTYyZjM5IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSBiL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQoraW5kZXggYjU0OWFiYy4uMjY2NmNiZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQorKysrIGIvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXR0eSBiL3Rlc3Qvc2V0LXR0eQoraW5kZXggZWVkMWZiYS4uNTNkNmI5OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXR0eQorKysrIGIvdGVzdC9zZXQtdHR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVtdHMtYmFuZCBiL3Rlc3Qvc2V0LXVtdHMtYmFuZAoraW5kZXggMGJhZTVjNC4uYzFlNjQ0OCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVtdHMtYmFuZAorKysrIGIvdGVzdC9zZXQtdW10cy1iYW5kCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyBiL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworaW5kZXggMjg4ZDRlMS4uYTRlZmU0ZiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworKysrIGIvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc3dhcC1jYWxscyBiL3Rlc3Qvc3dhcC1jYWxscworaW5kZXggMDE4YThkMy4uZWViMjU3YiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc3dhcC1jYWxscworKysrIGIvdGVzdC9zd2FwLWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK2luZGV4IDZlODdlNjEuLjBmMWY1N2YgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQorKysrIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcgYi90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCitpbmRleCBlZWRiNjlmLi5iZTRhYjU3IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNhbGwtYmFycmluZworKysrIGIvdGVzdC90ZXN0LWNhbGwtYmFycmluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDVkYjg0ZDcuLjAxYTcyOTQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK2luZGV4IDQzNTU5NGMuLjVkN2VlNDkgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncworKysrIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNicyBiL3Rlc3QvdGVzdC1jYnMKK2luZGV4IGE1Y2VjMDYuLjEzY2RkODAgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2JzCisrKysgYi90ZXN0L3Rlc3QtY2JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorQEAgLTc4LDcgKzc4LDcgQEAgZGVmIHNldF90b3BpY3MoY2JzKToKKyAJaW52YWxpZERhdGEgPSBGYWxzZTsKKyAJaW5kZXggPSAwCisgCistCXRvcGljcyA9IGlucHV0KCdFbnRlciB0aGUgdG9waWMgSUQocykgeW91IHdhbnQgdG8gcmVnaXN0ZXIgdG86ICcpCisrCXRvcGljcyA9IHJhd19pbnB1dCgnRW50ZXIgdGhlIHRvcGljIElEKHMpIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHRvOiAnKQorIAorIAl3aGlsZSBpbmRleCA8IGxlbih0b3BpY3MpOgorIAkJaWYgdG9waWNzW2luZGV4XSA9PSAnLCcgb3IgdG9waWNzW2luZGV4XSA9PSAnLSc6CitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWduc3MgYi90ZXN0L3Rlc3QtZ25zcworaW5kZXggNmFlNjRkYi4uYWEwYjE2MCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1nbnNzCisrKysgYi90ZXN0L3Rlc3QtZ25zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitAQCAtNDAsNyArNDAsNyBAQCBkZWYgcHJpbnRfbWVudSgpOgorIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgZ25zcywgcGF0aCk6CisgCWluX2tleSA9IG9zLnJlYWQoY2hhbm5lbC51bml4X2dldF9mZCgpLCAxNjApLnJzdHJpcCgpLmRlY29kZSgnVVRGLTgnKQorIAlpZiBpbl9rZXkgPT0gJzAnOgorLQkJeG1sID0gaW5wdXQoJ3R5cGUgdGhlIGVsZW1lbnQgYW5kIHByZXNzIGVudGVyOiAnKQorKwkJeG1sID0gcmF3X2lucHV0KCd0eXBlIHRoZSBlbGVtZW50IGFuZCBwcmVzcyBlbnRlcjogJykKKyAJCXRyeToKKyAJCQlnbnNzLlNlbmRQb3NpdGlvbmluZ0VsZW1lbnQoZGJ1cy5TdHJpbmcoeG1sKSkKKyAJCQlwcmludCgib2siKQorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcgYi90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCitpbmRleCA0MzI4NjJlLi5iOTNmYmYzIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworKysrIGIvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1vZGVtIGIvdGVzdC90ZXN0LW1vZGVtCitpbmRleCBhYTM4YjFmLi4yOWRiZjE0IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1vZGVtCisrKysgYi90ZXN0L3Rlc3QtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uIGIvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCitpbmRleCA2OGI0MzQ3Li5jNWFkNTg2IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCisrKysgYi90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1waG9uZWJvb2sgYi90ZXN0L3Rlc3QtcGhvbmVib29rCitpbmRleCA0MjY0NmQzLi4xMTZmZDRmIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXBob25lYm9vaworKysrIGIvdGVzdC90ZXN0LXBob25lYm9vaworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uIGIvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCitpbmRleCBkOTcyYWQzLi5lY2M2YWZiIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCisrKysgYi90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZyBiL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKK2luZGV4IGYyMmVmZDIuLjE4OGFjMWUgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCisrKysgYi90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zbXMgYi90ZXN0L3Rlc3Qtc21zCitpbmRleCAzMGFjNjUxLi40OTkzNWUxIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNtcworKysrIGIvdGVzdC90ZXN0LXNtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorQEAgLTEzMiw3ICsxMzIsNyBAQCBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIHNtcywgdmFsdWUsIG51bWJlcik6CisgCQlsb2NrID0gIm9uIgorIAkJaWYgaW5fa2V5ID09ICcwJzoKKyAJCQlwcmludF9zZW5kX3Ntc19tZW51KCkKKy0JCQlzbXNfdHlwZSA9IGlucHV0KCdTZWxlY3QgU01TIHR5cGU6ICcpCisrCQkJc21zX3R5cGUgPSByYXdfaW5wdXQoJ1NlbGVjdCBTTVMgdHlwZTogJykKKyAKKyAJCQlpZiBzbXNfdHlwZSA9PSAnMSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgdmFsdWUpCitAQCAtMTUwLDQ5ICsxNTAsNDkgQEAgZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBzbXMsIHZhbHVlLCBudW1iZXIpOgorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzEnOgorIAkJCW1lc3NhZ2VfZGVsaXZlcnlfcmVwb3J0KHNtcywgMSkKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDEpIiArIHZhbHVlICsKKyAJCQkJCQkiOiBVc2VEZWxpdmVyeVJlcG9ydHNbVFJVRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICcyJzoKKyAJCQltZXNzYWdlX2RlbGl2ZXJ5X3JlcG9ydChzbXMsIDApCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigyKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFVzZURlbGl2ZXJ5UmVwb3J0c1tGQUxTRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICczJzoKKyAJCQltZXNzYWdlX3NlcnZpY2VfY2VudGVyX2FkZHJlc3Moc21zLCBTQ0EpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigzKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFNlcnZpY2VDZW50ZXJBZGRyZXNzIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNCc6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAicHMtb25seSIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig0KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltwcy1vbmx5XSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzUnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLW9ubHkiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNSkgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbY3Mtb25seV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc2JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJwcy1wcmVmZXJyZWQiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNikgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbcHMtcHJlZmVycmVkXSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzcnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLXByZWZlcnJlZCIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcyxudW1iZXIsICgiKDcpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW2NzLXByZWZlcnJlZF0iKSkKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MgYi90ZXN0L3Rlc3Qtc3MKK2luZGV4IDRjZDg3MzIuLjJjODA4MDYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MKKysrKyBiL3Rlc3QvdGVzdC1zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitpbmRleCBkZGFlNmQzLi44NmJhYzliIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKKysrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK2luZGV4IDA5NWViNWQuLmQzMGJmNGYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgorKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworaW5kZXggODE4MDQ3NC4uZTBlZDFkMSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCisrKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3RrLW1lbnUgYi90ZXN0L3Rlc3Qtc3RrLW1lbnUKK2luZGV4IDBjZjhmYTIuLmFjMGE1YmQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3RrLW1lbnUKKysrKyBiL3Rlc3QvdGVzdC1zdGstbWVudQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK0BAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJCWluZGV4ICs9IDEKKyAKKyAJCXByaW50KCJcbkRlZmF1bHQ6ICVkIiAlIChkZWZhdWx0KSkKKy0JCXNlbGVjdCA9IGlucHV0KCJFbnRlciBTZWxlY3Rpb24gKHQsIGIpOiIpCisrCQlzZWxlY3QgPSByYXdfaW5wdXQoIkVudGVyIFNlbGVjdGlvbiAodCwgYik6IikKKyAKKyAJCWlmIHNlbGVjdCA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC03NSw3ICs3NSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkRpc3BsYXlUZXh0ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorIAkJcHJpbnQoIlVyZ2VudDogKCVkKSIgJSAodXJnZW50KSkKKy0JCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gY2xlYXIgKCd0JyB0ZXJtaW5hdGVzLCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBjbGVhciAoJ3QnIHRlcm1pbmF0ZXMsICIKKyAJCQkJCQkiJ2InIGdvZXMgYmFjaywgJ24nIGJ1c3ksICIKKyAJCQkJCQkiJ3cnIHJldHVybiBhbmQgd2FpdCk6IikKKyAKK0BAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiSGlkZSB0eXBpbmc6ICglcykiICUgKGhpZGVfdHlwaW5nKSkKKyAJCXByaW50KCJFbnRlciBjaGFyYWN0ZXJzLCBtaW46ICVkLCBtYXg6ICVkOiIgJSAobWluX2NoYXJzLAorIAkJCQkJCQkJbWF4X2NoYXJzKSkKKy0JCXVzZXJpbiA9IGlucHV0KCIiKQorKwkJdXNlcmluID0gcmF3X2lucHV0KCIiKQorIAorIAkJcmV0dXJuIHVzZXJpbgorIAorQEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJIaWRlIHR5cGluZzogKCVzKSIgJSAoaGlkZV90eXBpbmcpKQorIAkJcHJpbnQoIkVudGVyIGRpZ2l0cywgbWluOiAlZCwgbWF4OiAlZDoiICUgKG1pbl9jaGFycywKKyAJCQkJCQkJCW1heF9jaGFycykpCistCQl1c2VyaW4gPSBpbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKysJCXVzZXJpbiA9IHJhd19pbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKyAKKyAJCWlmIHVzZXJpbiA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xMzYsNyArMTM2LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0S2V5KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgS2V5ICh0LCBiKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBLZXkgKHQsIGIpOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTUwLDcgKzE1MCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdERpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgRGlnaXQgKHQsIGIpOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIERpZ2l0ICh0LCBiKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE2NCw3ICsxNjQsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3RRdWlja0RpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xNzgsNyArMTc4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0Q29uZmlybWF0aW9uKHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCBiLCB5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIGIsIHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTk0LDcgKzE5NCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgQ29uZmlybUNhbGxTZXR1cChzZWxmLCBpbmZvLCBpY29uKToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTIwOSw3ICsyMDksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKyAJCXByaW50KCJVUkwgKCVzKSIgJSAodXJsKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAoeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAneSc6CisgCQkJcmV0dXJuIFRydWUKK0BAIC0yMzIsNyArMjMyLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlzaWduYWwuYWxhcm0oNSkKKyAKKyAJCXRyeToKKy0JCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorKwkJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorIAkJCQkJCQkgIiBzaW5nbGUgdG9uZSAodCk6IikKKyAJCQlzaWduYWwuYWxhcm0oMCkKKyAKK0BAIC0yNTAsNyArMjUwLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiTG9vcFRvbmU6ICVzIiAlICh0b25lKSkKKyAJCXByaW50KCJUZXh0OiAlcyIgJSAodGV4dCkpCisgCQlwcmludCgiSWNvbjogJWQiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgdGltZW91dCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIHRpbWVvdXQgIgorIAkJCQkiKCd0JyB0ZXJtaW5hdGVzLCAndycgcmV0dXJuIGFuZCB3YWl0KToiKQorIAorIAkJaWYga2V5ID09ICd3JzoKK0BAIC0yNzksNyArMjc5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBEaXNwbGF5QWN0aW9uKHNlbGYsIHRleHQsIGljb24pOgorIAkJcHJpbnQoIlRleHQ6ICglcykiICUgKHRleHQpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgJ3QnIHRvIHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyAndCcgdG8gdGVybWluYXRlIHRoZSBzZXNzaW9uICIpCisgCisgCQlpZiBrZXkgPT0gJ3QnOgorIAkJCXJhaXNlIEVuZFNlc3Npb24oIlVzZXIgd2lzaGVzIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIikKK0BAIC0yODksNyArMjg5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBDb25maXJtT3BlbkNoYW5uZWwoc2VsZiwgaW5mbywgaWNvbik6CisgCQlwcmludCgiT3BlbiBjaGFubmVsIGNvbmZpcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTI5OSw3ICsyOTksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCQlyZXR1cm4gRmFsc2UKKyAKKyBfZGJ1czJweSA9IHsKKy0JZGJ1cy5TdHJpbmcgOiBzdHIsCisrCWRidXMuU3RyaW5nIDogdW5pY29kZSwKKyAJZGJ1cy5VSW50MzIgOiBpbnQsCisgCWRidXMuSW50MzIgOiBpbnQsCisgCWRidXMuSW50MTYgOiBpbnQsCitAQCAtMzk2LDcgKzM5Niw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgCQlleGNlcHQ6CisgCQkJcGFzcworIAorLQkJc2VsZWN0ID0gaW50KGlucHV0KCJFbnRlciBTZWxlY3Rpb246ICIpKQorKwkJc2VsZWN0ID0gaW50KHJhd19pbnB1dCgiRW50ZXIgU2VsZWN0aW9uOiAiKSkKKyAJCXN0ay5TZWxlY3RJdGVtKHNlbGVjdCwgcGF0aCkKKyAJZWxpZiBtb2RlID09ICdhZ2VudCc6CisgCQlwYXRoID0gIi90ZXN0L2FnZW50IgorZGlmZiAtLWdpdCBhL3Rlc3QvdW5sb2NrLXBpbiBiL3Rlc3QvdW5sb2NrLXBpbgoraW5kZXggNjFmNDc2NS4uMTBiNjYyNiAxMDA3NTUKKy0tLSBhL3Rlc3QvdW5sb2NrLXBpbgorKysrIGIvdGVzdC91bmxvY2stcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL29mb25vIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9vZm9ubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzk5NzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9vZm9ubwpAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKworREFFTU9OPS91c3Ivc2Jpbi9vZm9ub2QKK1BJREZJTEU9L3Zhci9ydW4vb2Zvbm9kLnBpZAorREVTQz0iVGVsZXBob255IGRhZW1vbiIKKworaWYgWyAtZiAvZXRjL2RlZmF1bHQvb2Zvbm8gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9vZm9ubworZmkKKworc2V0IC1lCisKK2RvX3N0YXJ0KCkgeworCSREQUVNT04KK30KKworZG9fc3RvcCgpIHsKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIG9mb25vZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTYuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmMTNlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG9mb25vLmluYworCitTUkNfVVJJICA9ICJcCisgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgZmlsZTovL29mb25vIFwKKyAgZmlsZTovL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMzFiNWI1NWExZDY4MzU0YmZmNzcxZDNlZGYwMjgyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNiOThkYWRlY2U4YmM4MDRjMGJkMTZiOTZkM2RiNWEzYmIwZjg0YWY2NGIzZDY3OTI0ZGEyZDFhNzU0YjA3IgorCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFmYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBvZm9uby5pbmMKKworUwkgPSAiJHtXT1JLRElSfS9naXQiCitTUkNSRVYgPSAiMTQ1NDRkNTk5NjgzNmY2Mjg2MTNjMmNlNTQ0MzgwZWU2ZmM4ZjUxNCIKK1BWCSA9ICIwLjEyLWdpdCR7U1JDUFZ9IgorUFIgPSAicjUiCisKK1NSQ19VUkkgID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbmV0d29yay9vZm9uby9vZm9uby5naXQgXAorCSAgICBmaWxlOi8vb2Zvbm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgJHtTfS9ib290c3RyYXAKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjMjVjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorQWRqdXN0IHRlc3QgY2FzZXMgdG8gd29yayB3aXRoIGJ1c3lib3guCisKKy0gUmVwbGFjZSBkZCBwYXJhbWV0ZXIgIm9icyIgd2l0aCAiYnMiLgorLSBSZXBsYWNlICJoZWFkIC08bnVtPiIgd2l0aCAiaGVhZCAtbiA8bnVtPiIuCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoCitAQCAtMTcsNyArMTcsNyBAQCBmb3IgYyBpbiBgJHtTU0h9IC1RIGNpcGhlcmA7IGRvIG49MDsgZm9yCisgCQlwcmludGYgIiUtNjBzIiAiJGMvJG06IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTIgLW0gJG0gLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorQEAgLTQyLDcgKzQyLDcgQEAgZm9yIGMgaW4gJGNpcGhlcnM7IGRvCisgCQlwcmludGYgIiUtNjBzIiAiJGM6IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTEgLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorIAkJCWZhaWwgInNzaCAtMSBmYWlsZWQgd2l0aCBjaXBoZXIgJGMiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3RyYW5zZmVyLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKK0BAIC0xNSw3ICsxNSw3IEBAIGZvciBwIGluICR7U1NIX1BST1RPQ09MU307IGRvCisgCWZvciBzIGluIDEwIDEwMCAxayAzMmsgNjRrIDEyOGsgMjU2azsgZG8KKyAJCXRyYWNlICJwcm90byAkcCBkZC1zaXplICR7c30iCisgCQlybSAtZiAke0NPUFl9CistCQlkZCBpZj0kREFUQSBvYnM9JHtzfSAyPiAvZGV2L251bGwgfCBcCisrCQlkZCBpZj0kREFUQSBicz0ke3N9IDI+IC9kZXYvbnVsbCB8IFwKKyAJCQkke1NTSH0gLXEgLSRwIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICJjYXQgPiAke0NPUFl9IgorIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgCQkJZmFpbCAic3NoIGNhdCAkREFUQSBmYWlsZWQiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3llcy1oZWFkLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MveWVzLWhlYWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MveWVzLWhlYWQuc2gKK0BAIC00LDcgKzQsNyBAQAorIHRpZD0ieWVzIHBpcGUgaGVhZCIKKyAKKyBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworLQlsaW5lcz1gJHtTU0h9IC0kcCAtRiAkT0JKL3NzaF9wcm94eSB0aGlzaG9zdCAnc2ggLWMgIndoaWxlIHRydWU7ZG8gZWNobyB5ZXM7ZG9uZSB8IF9QT1NJWDJfVkVSU0lPTj0xOTkyMDkgaGVhZCAtMjAwMCInIHwgKHNsZWVwIDMgOyB3YyAtbClgCisrCWxpbmVzPWAke1NTSH0gLSRwIC1GICRPQkovc3NoX3Byb3h5IHRoaXNob3N0ICdzaCAtYyAid2hpbGUgdHJ1ZTtkbyBlY2hvIHllcztkb25lIHwgX1BPU0lYMl9WRVJTSU9OPTE5OTIwOSBoZWFkIC1uIDIwMDAiJyB8IChzbGVlcCAzIDsgd2MgLWwpYAorIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAJCWZhaWwgInllc3xoZWFkIHRlc3QgZmFpbGVkIgorIAkJbGluZXMgPSAwOworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9rZXktb3B0aW9ucy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL2tleS1vcHRpb25zLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL2tleS1vcHRpb25zLnNoCitAQCAtNTQsNyArNTQsNyBAQCBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworIAlmaQorIAorIAlzZWQgJ3MvLiovZnJvbT0iJyIkZiInIiAmLycgJG9yaWdrZXlzID4kYXV0aGtleXMKKy0JZnJvbT1gaGVhZCAtMSAkYXV0aGtleXMgfCBjdXQgLWYxIC1kICcgJ2AKKysJZnJvbT1gaGVhZCAtbiAxICRhdXRoa2V5cyB8IGN1dCAtZjEgLWQgJyAnYAorIAl2ZXJib3NlICJrZXkgb3B0aW9uIHByb3RvICRwICRmcm9tIgorIAlyPWAke1NTSH0gLSRwIC1xIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICdlY2hvIHRydWUnYAorIAlpZiBbICIkciIgPSAidHJ1ZSIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkNGEzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2luaXQKQEAgLTAsMCArMSwxMTUgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQorCitQSURGSUxFPS92YXIvcnVuL3NzaGQucGlkCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgL2V0Yy9pbml0LmQvc3NoOiBzdGFydCBhbmQgc3RvcCB0aGUgT3BlbkJTRCAic2VjdXJlIHNoZWxsIiBkYWVtb24KKwordGVzdCAteCAvdXNyL3NiaW4vc3NoZCB8fCBleGl0IDAKKyggL3Vzci9zYmluL3NzaGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8fCBleGl0IDAKKworIyAvZXRjL2RlZmF1bHQvc3NoIG1heSBzZXQgU1lTQ09ORkRJUiBhbmQgU1NIRF9PUFRTCitpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9zc2g7IHRoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9zc2gKK2ZpCisKK1sgLXogIiRTWVNDT05GRElSIiBdICYmIFNZU0NPTkZESVI9L2V0Yy9zc2gKK21rZGlyIC1wICRTWVNDT05GRElSCisKK0hPU1RfS0VZX1JTQT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9yc2Ffa2V5CitIT1NUX0tFWV9EU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZHNhX2tleQorSE9TVF9LRVlfRUNEU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZWNkc2Ffa2V5CitIT1NUX0tFWV9FRDI1NTE5PSRTWVNDT05GRElSL3NzaF9ob3N0X2VkMjU1MTlfa2V5CisKK2NoZWNrX2Zvcl9ub19zdGFydCgpIHsKKyAgICAjIGZvcmdldCBpdCBpZiB3ZSdyZSB0cnlpbmcgdG8gc3RhcnQsIGFuZCAvZXRjL3NzaC9zc2hkX25vdF90b19iZV9ydW4gZXhpc3RzCisgICAgaWYgWyAtZSAkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4gXTsgdGhlbgorCWVjaG8gIk9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciBub3QgaW4gdXNlICgkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4pIgorCWV4aXQgMAorICAgIGZpCit9CisKK2NoZWNrX3ByaXZzZXBfZGlyKCkgeworICAgICMgQ3JlYXRlIHRoZSBQcml2U2VwIGVtcHR5IGRpciBpZiBuZWNlc3NhcnkKKyAgICBpZiBbICEgLWQgL3Zhci9ydW4vc3NoZCBdOyB0aGVuCisJbWtkaXIgL3Zhci9ydW4vc3NoZAorCWNobW9kIDA3NTUgL3Zhci9ydW4vc3NoZAorICAgIGZpCit9CisKK2NoZWNrX2NvbmZpZygpIHsKKwkvdXNyL3NiaW4vc3NoZCAtdCB8fCBleGl0IDEKK30KKworY2hlY2tfa2V5cygpIHsKKwkjIGNyZWF0ZSBrZXlzIGlmIG5lY2Vzc2FyeQorCWlmIFsgISAtZiAkSE9TVF9LRVlfUlNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBSU0Ega2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9SU0EgLU4gJycgLXQgcnNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0VDRFNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFQ0RTQSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX0VDRFNBIC1OICcnIC10IGVjZHNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0RTQSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRFNBIGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRFNBIC1OICcnIC10IGRzYQorCWZpCisJaWYgWyAhIC1mICRIT1NUX0tFWV9FRDI1NTE5IF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFRDI1NTE5IGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRUQyNTUxOSAtTiAnJyAtdCBlZDI1NTE5CisJZmkKK30KKworZXhwb3J0IFBBVEg9IiR7UEFUSDorJFBBVEg6fS91c3Ivc2Jpbjovc2JpbiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWNoZWNrX2Zvcl9ub19zdGFydAorCWVjaG8gIlN0YXJ0aW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwljaGVja19rZXlzCisJY2hlY2tfcHJpdnNlcF9kaXIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisgICAgICAgIGVjaG8gImRvbmUuIgorCTs7CisgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gIlN0b3BwaW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZAorICAgICAgICBlY2hvICIuIgorCTs7CisKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19rZXlzCisJY2hlY2tfY29uZmlnCisgICAgICAgIGVjaG8gLW4gIlJlbG9hZGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBjb25maWd1cmF0aW9uIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1wICRQSURGSUxFIC1zIDEgLXggL3Vzci9zYmluL3NzaGQKKwllY2hvICIuIgorCTs7CisKKyAgcmVzdGFydCkKKyAgCWNoZWNrX2tleXMKKwljaGVja19jb25maWcKKyAgICAgICAgZWNobyAtbiAiUmVzdGFydGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXI6IHNzaGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXAgJFBJREZJTEUgLS1va25vZG8gLXggL3Vzci9zYmluL3NzaGQKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19wcml2c2VwX2RpcgorCXNsZWVwIDIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisJZWNobyAiLiIKKwk7OworCisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3NzaGQKKwlleGl0ICQ/CisgIDs7CisKKyAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvc3NoIHtzdGFydHxzdG9wfHN0YXR1c3xyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMQorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjRjMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBURVNUX1NIRUxMPXNoCisKK2NkIHJlZ3Jlc3MKK21ha2UgLWsgLk9CSkRJUj1gcHdkYCAuQ1VSRElSPWBwd2RgIFNVRE89InN1ZG8iIHRlc3RzIFwKKyAgICAgICAgfCBzZWQgLWUgJ3MvXnNraXBwZWQvU0tJUDogL2cnIC1lICdzL15vayAvUEFTUzogL2cnIC1lICdzL15mYWlsZWQvRkFJTDogL2cnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hfY29uZmlnIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTkxOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoX2NvbmZpZwpAQCAtMCwwICsxLDQ4IEBACisjCSRPcGVuQlNEOiBzc2hfY29uZmlnLHYgMS4yOCAyMDEzLzA5LzE2IDExOjM1OjQzIHN0aGVuIEV4cCAkCisKKyMgVGhpcyBpcyB0aGUgc3NoIGNsaWVudCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoX2NvbmZpZyg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFRoaXMgZmlsZSBwcm92aWRlcyBkZWZhdWx0cyBmb3IKKyMgdXNlcnMsIGFuZCB0aGUgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIGluIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyMgb3Igb24gdGhlIGNvbW1hbmQgbGluZS4KKworIyBDb25maWd1cmF0aW9uIGRhdGEgaXMgcGFyc2VkIGFzIGZvbGxvd3M6CisjICAxLiBjb21tYW5kIGxpbmUgb3B0aW9ucworIyAgMi4gdXNlci1zcGVjaWZpYyBmaWxlCisjICAzLiBzeXN0ZW0td2lkZSBmaWxlCisjIEFueSBjb25maWd1cmF0aW9uIHZhbHVlIGlzIG9ubHkgY2hhbmdlZCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZXQuCisjIFRodXMsIGhvc3Qtc3BlY2lmaWMgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIGRlZmF1bHRzIGF0IHRoZSBlbmQuCisKKyMgU2l0ZS13aWRlIGRlZmF1bHRzIGZvciBzb21lIGNvbW1vbmx5IHVzZWQgb3B0aW9ucy4gIEZvciBhIGNvbXByZWhlbnNpdmUKKyMgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucywgdGhlaXIgbWVhbmluZ3MgYW5kIGRlZmF1bHRzLCBwbGVhc2Ugc2VlIHRoZQorIyBzc2hfY29uZmlnKDUpIG1hbiBwYWdlLgorCitIb3N0ICoKKyAgRm9yd2FyZEFnZW50IHllcworICBGb3J3YXJkWDExIHllcworIyAgIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjICAgUlNBQXV0aGVudGljYXRpb24geWVzCisjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKKyMgICBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubworIyAgIEdTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCisjICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubworIyAgIEJhdGNoTW9kZSBubworIyAgIENoZWNrSG9zdElQIHllcworIyAgIEFkZHJlc3NGYW1pbHkgYW55CisjICAgQ29ubmVjdFRpbWVvdXQgMAorIyAgIFN0cmljdEhvc3RLZXlDaGVja2luZyBhc2sKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkZW50aXR5CisjICAgSWRlbnRpdHlGaWxlIH4vLnNzaC9pZF9yc2EKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkX2RzYQorIyAgIFBvcnQgMjIKKyMgICBQcm90b2NvbCAyLDEKKyMgICBDaXBoZXIgM2RlcworIyAgIENpcGhlcnMgYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIsYXJjZm91cjI1NixhcmNmb3VyMTI4LGFlczEyOC1jYmMsM2Rlcy1jYmMKKyMgICBNQUNzIGhtYWMtbWQ1LGhtYWMtc2hhMSx1bWFjLTY0QG9wZW5zc2guY29tLGhtYWMtcmlwZW1kMTYwCisjICAgRXNjYXBlQ2hhciB+CisjICAgVHVubmVsIG5vCisjICAgVHVubmVsRGV2aWNlIGFueTphbnkKKyMgICBQZXJtaXRMb2NhbENvbW1hbmQgbm8KKyMgICBWaXN1YWxIb3N0S2V5IG5vCisjICAgUHJveHlDb21tYW5kIHNzaCAtcSAtVyAlaDolcCBnYXRld2F5LmV4YW1wbGUuY29tCisjICAgUmVrZXlMaW1pdCAxRyAxaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4MmU1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQKQEAgLTAsMCArMSwxMCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fbm9sb2dpbi5zbworYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBvcHRpb25hbCAgICAgcGFtX2tleWluaXQuc28gZm9yY2UgcmV2b2tlCitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2xvZ2ludWlkLnNvCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZC5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjMzliMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0CkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorQ29uZmxpY3RzPXNzaGQuc2VydmljZQorCitbU29ja2V0XQorRXhlY1N0YXJ0UHJlPUBCQVNFX0JJTkRJUkAvbWtkaXIgLXAgL3Zhci9ydW4vc3NoZAorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRALnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkQC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMmQ2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkQC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBQZXItQ29ubmVjdGlvbiBEYWVtb24KK1dhbnRzPXNzaGRnZW5rZXlzLnNlcnZpY2UKK0FmdGVyPXNzaGRnZW5rZXlzLnNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9LUBTQklORElSQC9zc2hkIC1pCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitTdGFuZGFyZElucHV0PXNvY2tldAorU3RhbmRhcmRFcnJvcj1zeXNsb2cKK0tpbGxNb2RlPXByb2Nlc3MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4YmQyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCkBAIC0wLDAgKzEsMTMzIEBACisjCSRPcGVuQlNEOiBzc2hkX2NvbmZpZyx2IDEuODAgMjAwOC8wNy8wMiAwMjoyNDoxOCBkam0gRXhwICQKKworIyBUaGlzIGlzIHRoZSBzc2hkIHNlcnZlciBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoZF9jb25maWcoNSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyMgVGhpcyBzc2hkIHdhcyBjb21waWxlZCB3aXRoIFBBVEg9L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4KKworIyBUaGUgc3RyYXRlZ3kgdXNlZCBmb3Igb3B0aW9ucyBpbiB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZyBzaGlwcGVkIHdpdGgKKyMgT3BlblNTSCBpcyB0byBzcGVjaWZ5IG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlIHdoZXJlCisjIHBvc3NpYmxlLCBidXQgbGVhdmUgdGhlbSBjb21tZW50ZWQuICBVbmNvbW1lbnRlZCBvcHRpb25zIGNoYW5nZSBhCisjIGRlZmF1bHQgdmFsdWUuCisKKyNQb3J0IDIyCisjQWRkcmVzc0ZhbWlseSBhbnkKKyNMaXN0ZW5BZGRyZXNzIDAuMC4wLjAKKyNMaXN0ZW5BZGRyZXNzIDo6CisKKyMgVGhlIGRlZmF1bHQgcmVxdWlyZXMgZXhwbGljaXQgYWN0aXZhdGlvbiBvZiBwcm90b2NvbCAxCitQcm90b2NvbCAyCisKKyMgSG9zdEtleSBmb3IgcHJvdG9jb2wgdmVyc2lvbiAxCisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9rZXkKKyMgSG9zdEtleXMgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZHNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9lZDI1NTE5X2tleQorCisjIExpZmV0aW1lIGFuZCBzaXplIG9mIGVwaGVtZXJhbCB2ZXJzaW9uIDEgc2VydmVyIGtleQorI0tleVJlZ2VuZXJhdGlvbkludGVydmFsIDFoCisjU2VydmVyS2V5Qml0cyAxMDI0CisKKyMgQ2lwaGVycyBhbmQga2V5aW5nCisjUmVrZXlMaW1pdCBkZWZhdWx0IG5vbmUKKworIyBMb2dnaW5nCisjIG9ic29sZXRlcyBRdWlldE1vZGUgYW5kIEZhc2Npc3RMb2dnaW5nCisjU3lzbG9nRmFjaWxpdHkgQVVUSAorI0xvZ0xldmVsIElORk8KKworIyBBdXRoZW50aWNhdGlvbjoKKworI0xvZ2luR3JhY2VUaW1lIDJtCisjUGVybWl0Um9vdExvZ2luIHllcworI1N0cmljdE1vZGVzIHllcworI01heEF1dGhUcmllcyA2CisjTWF4U2Vzc2lvbnMgMTAKKworI1JTQUF1dGhlbnRpY2F0aW9uIHllcworI1B1YmtleUF1dGhlbnRpY2F0aW9uIHllcworCisjIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIGJvdGggLnNzaC9hdXRob3JpemVkX2tleXMgYW5kIC5zc2gvYXV0aG9yaXplZF9rZXlzMgorIyBidXQgdGhpcyBpcyBvdmVycmlkZGVuIHNvIGluc3RhbGxhdGlvbnMgd2lsbCBvbmx5IGNoZWNrIC5zc2gvYXV0aG9yaXplZF9rZXlzCitBdXRob3JpemVkS2V5c0ZpbGUgLnNzaC9hdXRob3JpemVkX2tleXMKKworI0F1dGhvcml6ZWRQcmluY2lwYWxzRmlsZSBub25lCisKKyNBdXRob3JpemVkS2V5c0NvbW1hbmQgbm9uZQorI0F1dGhvcml6ZWRLZXlzQ29tbWFuZFVzZXIgbm9ib2R5CisKKyMgRm9yIHRoaXMgdG8gd29yayB5b3Ugd2lsbCBhbHNvIG5lZWQgaG9zdCBrZXlzIGluIC9ldGMvc3NoL3NzaF9rbm93bl9ob3N0cworI1Job3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjIHNpbWlsYXIgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCisjIENoYW5nZSB0byB5ZXMgaWYgeW91IGRvbid0IHRydXN0IH4vLnNzaC9rbm93bl9ob3N0cyBmb3IKKyMgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gYW5kIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uCisjSWdub3JlVXNlcktub3duSG9zdHMgbm8KKyMgRG9uJ3QgcmVhZCB0aGUgdXNlcidzIH4vLnJob3N0cyBhbmQgfi8uc2hvc3RzIGZpbGVzCisjSWdub3JlUmhvc3RzIHllcworCisjIFRvIGRpc2FibGUgdHVubmVsZWQgY2xlYXIgdGV4dCBwYXNzd29yZHMsIGNoYW5nZSB0byBubyBoZXJlIQorI1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzCisjUGVybWl0RW1wdHlQYXNzd29yZHMgbm8KKworIyBDaGFuZ2UgdG8gbm8gdG8gZGlzYWJsZSBzL2tleSBwYXNzd29yZHMKK0NoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbm8KKworIyBLZXJiZXJvcyBvcHRpb25zCisjS2VyYmVyb3NBdXRoZW50aWNhdGlvbiBubworI0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCB5ZXMKKyNLZXJiZXJvc1RpY2tldENsZWFudXAgeWVzCisjS2VyYmVyb3NHZXRBRlNUb2tlbiBubworCisjIEdTU0FQSSBvcHRpb25zCisjR1NTQVBJQXV0aGVudGljYXRpb24gbm8KKyNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzCisKKyMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBhdXRoZW50aWNhdGlvbiwgYWNjb3VudCBwcm9jZXNzaW5nLAorIyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIGVuYWJsZWQsIFBBTSBhdXRoZW50aWNhdGlvbiB3aWxsCisjIGJlIGFsbG93ZWQgdGhyb3VnaCB0aGUgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiBhbmQKKyMgUGFzc3dvcmRBdXRoZW50aWNhdGlvbi4gIERlcGVuZGluZyBvbiB5b3VyIFBBTSBjb25maWd1cmF0aW9uLAorIyBQQU0gYXV0aGVudGljYXRpb24gdmlhIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbWF5IGJ5cGFzcworIyB0aGUgc2V0dGluZyBvZiAiUGVybWl0Um9vdExvZ2luIHdpdGhvdXQtcGFzc3dvcmQiLgorIyBJZiB5b3UganVzdCB3YW50IHRoZSBQQU0gYWNjb3VudCBhbmQgc2Vzc2lvbiBjaGVja3MgdG8gcnVuIHdpdGhvdXQKKyMgUEFNIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVuYWJsZSB0aGlzIGJ1dCBzZXQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbgorIyBhbmQgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiB0byAnbm8nLgorI1VzZVBBTSBubworCisjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCisjQWxsb3dUY3BGb3J3YXJkaW5nIHllcworI0dhdGV3YXlQb3J0cyBubworI1gxMUZvcndhcmRpbmcgbm8KKyNYMTFEaXNwbGF5T2Zmc2V0IDEwCisjWDExVXNlTG9jYWxob3N0IHllcworI1Blcm1pdFRUWSB5ZXMKKyNQcmludE1vdGQgeWVzCisjUHJpbnRMYXN0TG9nIHllcworI1RDUEtlZXBBbGl2ZSB5ZXMKKyNVc2VMb2dpbiBubworVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiBzYW5kYm94ICMgRGVmYXVsdCBmb3IgbmV3IGluc3RhbGxhdGlvbnMuCisjUGVybWl0VXNlckVudmlyb25tZW50IG5vCitDb21wcmVzc2lvbiBubworQ2xpZW50QWxpdmVJbnRlcnZhbCAxNQorQ2xpZW50QWxpdmVDb3VudE1heCA0CisjVXNlRE5TIHllcworI1BpZEZpbGUgL3Zhci9ydW4vc3NoZC5waWQKKyNNYXhTdGFydHVwcyAxMDozMDoxMDAKKyNQZXJtaXRUdW5uZWwgbm8KKyNDaHJvb3REaXJlY3Rvcnkgbm9uZQorI1ZlcnNpb25BZGRlbmR1bSBub25lCisKKyMgbm8gZGVmYXVsdCBiYW5uZXIgcGF0aAorI0Jhbm5lciBub25lCisKKyMgb3ZlcnJpZGUgZGVmYXVsdCBvZiBubyBzdWJzeXN0ZW1zCitTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMvc2Z0cC1zZXJ2ZXIKKworIyBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgc2V0dGluZ3Mgb24gYSBwZXItdXNlciBiYXNpcworI01hdGNoIFVzZXIgYW5vbmN2cworIwlYMTFGb3J3YXJkaW5nIG5vCisjCUFsbG93VGNwRm9yd2FyZGluZyBubworIwlQZXJtaXRUVFkgbm8KKyMJRm9yY2VDb21tYW5kIGN2cyBzZXJ2ZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRnZW5rZXlzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkZ2Vua2V5cy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTA4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkZ2Vua2V5cy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBLZXkgR2VuZXJhdGlvbgorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkKK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QEJJTkRJUkAvc3NoLWtleWdlbiAtQQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3ZvbGF0aWxlcy45OV9zc2hkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDJhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZApAQCAtMCwwICsxLDIgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vc3NoZCBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2xhc3Rsb2cgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWViNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIKQEAgLTAsMCArMSwxNTQgQEAKK1NVTU1BUlkgPSAiU2VjdXJlIHJsb2dpbi9yc2gvcmNwL3RlbG5ldCByZXBsYWNlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQgKE9wZW5TU0gpIFwKK1NzaCAoU2VjdXJlIFNoZWxsKSBpcyBhIHByb2dyYW0gZm9yIGxvZ2dpbmcgaW50byBhIHJlbW90ZSBtYWNoaW5lIFwKK2FuZCBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGEgcmVtb3RlIG1hY2hpbmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5zc2gub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWUzMjYwNDU2NTdlODQyNTQxZDNmMzVhYWRhNDQyNTA3IgorCitERVBFTkRTID0gInpsaWIgb3BlbnNzbCIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm9wZW5ic2Qub3JnL3B1Yi9PcGVuQlNEL09wZW5TU0gvcG9ydGFibGUvb3BlbnNzaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3NoZF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vc3NoX2NvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vc3NoZGdlbmtleXMuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMuOTlfc3NoZCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworUEFNX1NSQ19VUkkgPSAiZmlsZTovL3NzaGQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzA5NzM2YmM4YThjMjUzYmM0ZWViNDgyOTg4OGNhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzBhNmQyZDFkMDYzZDVjNjZkZmZkOTUyNDkzZDBjZGEyNTZjYWQyMDRmNjgxZGUwZjg0ZWY4NWIyYWQ4NDI4IgorCitpbmhlcml0IHVzZXJhZGQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcyBzeXN0ZW1kCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tc3NoZCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tc3NoZCA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgL3Zhci9ydW4vc3NoZCAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHNzaGQiCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3NoZCA9ICJzc2hkIgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tc3NoZCA9ICJkZWZhdWx0cyA5IgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc3NoZCA9ICJzc2hkLnNvY2tldCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0CisKKyMgTEZTIHN1cHBvcnQ6CitDRkxBR1MgKz0gIi1EX19GSUxFX09GRlNFVF9CSVRTPTY0IgorCisjIGxvZ2luIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0VYVFJBX09FQ09ORiA9ICInTE9HSU5fUFJPR1JBTT0ke2Jhc2VfYmluZGlyfS9sb2dpbicgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0td2l0aC1wYW0nLCAnLS13aXRob3V0LXBhbScsIGQpfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXpsaWItdmVyc2lvbi1jaGVjayBcCisgICAgICAgICAgICAgICAgLS13aXRoLXByaXZzZXAtcGF0aD0vdmFyL3J1bi9zc2hkIFwKKyAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9zc2ggXAorICAgICAgICAgICAgICAgIC0td2l0aC14YXV0aD0vdXNyL2Jpbi94YXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN0cmlwIFwKKyAgICAgICAgICAgICAgICAiCisKKyMgU2luY2Ugd2UgZG8gbm90IGRlcGVuZCBvbiBsaWJic2QsIHdlIGRvIG5vdCB3YW50IGNvbmZpZ3VyZSB0byB1c2UgaXQKKyMganVzdCBiZWNhdXNlIGl0IGZpbmRzIGxpYnV0aWwuaC4gIEJ1dCwgc3BlY2lmeWluZyAtLWRpc2FibGUtbGlidXRpbAorIyBjYXVzZXMgY29tcGlsZSBlcnJvcnMsIHNvLi4uCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX2JzZF9saWJ1dGlsX2g9bm8gYWNfY3ZfaGVhZGVyX2xpYnV0aWxfaD1ubyIKKworIyBwYXNzd2QgcGF0aCBpcyBoYXJkY29kZWQgaW4gc3NoZAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEFUSF9QQVNTV0RfUFJPRz0ke2JpbmRpcn0vcGFzc3dkIgorCisjIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGxpYmJsb2NrZmlsZQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9tYWlsbG9ja19oPW5vIgorCisjIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB1Y2xpYmMgYmVjYXVzZSBpbmNsdWRpbmcgc3RkaW8uaAorIyBwdWxscyBpbiBwdGhyZWFkcy5oIGFuZCBjYXVzZXMgY29uZmxpY3RzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisjIFRoaXMgcmVzdWx0cyBpbiBjb21waWxhdGlvbiBmYWlsdXJlLCBzbyB1bmxlc3MgdGhpcyBpcyBmaXhlZCwKKyMgZGlzYWJsZSBwYW0gZm9yIHVjbGliYy4KK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmM9IiAtLXdpdGhvdXQtcGFtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJZXhwb3J0IExEPSIke0NDfSIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkX2NvbmZpZyAke0J9LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NzaF9jb25maWcgJHtCfS8KKwlpZiBbICEgLWUgYWNpbmNsdWRlLm00IC1hIC1lIGFjbG9jYWwubTQgXTsgdGhlbgorCQljcCBhY2xvY2FsLm00IGFjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgICMgc2tpcCByZWdyZXNzL3VuaXR0ZXN0cy8gYmluYXJpZXM6IHRoaXMgd2lsbCBzaWxlbnRseSBza2lwCisgICAgICAgICMgdW5pdHRlc3RzIGluIHJ1bi1wdGVzdHMgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHRoZXkgYXJlIHNvIHNsb3cuCisgICAgICAgIG9lX3J1bm1ha2UgcmVncmVzcy9tb2RwaXBlIHJlZ3Jlc3Mvc2V0dWlkLWFsbG93ZWQgcmVncmVzcy9uZXRjYXQKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA3NTUgJHtXT1JLRElSfS9zc2hkICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL3NzaGQKKwkJc2VkIC1pIC1lICdzOiNVc2VQQU0gbm86VXNlUEFNIHllczonICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3NoZAorCXJtIC1mICR7RH0ke2JpbmRpcn0vc2xvZ2luICR7RH0ke2RhdGFkaXJ9L1NzaC5iaW4KKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4vc3NoZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vdm9sYXRpbGVzLjk5X3NzaGQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X3NzaGQKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9jb250cmliL3NzaC1jb3B5LWlkICR7RH0ke2JpbmRpcn0KKworCSMgQ3JlYXRlIGNvbmZpZyBmaWxlcyBmb3IgcmVhZC1vbmx5IHJvb3RmcworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3NoCisJaW5zdGFsbCAtbSA2NDQgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCXNlZCAtaSAnL0hvc3RLZXkvZCcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfcnNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5IiA+PiAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkZ2Vua2V5cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQktZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlzZWQgLWkgLWUgInN8XlNGVFBTRVJWRVI9Lip8U0ZUUFNFUlZFUj0ke2xpYmRpcn0vJHtQTn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAorCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgorRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCitGSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCitGSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKK0ZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCitGSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCitGSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgorUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKKworUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCitSUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKKworQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCitDT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKK0FMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RjZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCkBAIC0wLDAgKzEsMjE0IEBACitTVU1NQVJZID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgU29ja2V0IExheWVyIChTU0wpIGJpbmFyeSBhbmQgcmVsYXRlZCBjcnlwdG9ncmFwaGljIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvdnVsbmVyYWJpbGl0aWVzLmh0bWwiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworIyAib3BlbnNzbCB8IFNTTGVheSIgZHVhbCBsaWNlbnNlCitMSUNFTlNFID0gIm9wZW5zc2wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOWE4Zjk2ODEwNzM0NWUwYjc1YWE4YzJlY2FhN2VjOCIKKworREVQRU5EUyA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBvcGVuc3NsLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorUyA9ICIke1dPUktESVJ9L29wZW5zc2wtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiLCwsIgorCitBUl9hcHBlbmQgPSAiIHIiCisjIEF2b2lkIGJpbmFyaWVzIGJlaW5nIG1hcmtlZCBhcyByZXF1aXJpbmcgYW4gZXhlY3V0YWJsZSBzdGFjayBzaW5jZSBpdCAKKyMgZG9lc24ndCh3aGljaCBjYXVzZXMgYW5kIHRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIFNFTGludXgKK0NGTEFHID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLURMX0VORElBTicsICctREJfRU5ESUFOJywgZCl9IFwKKwktRFRFUk1JTyAke0NGTEFHU30gLVdhbGwgLVdhLC0tbm9leGVjc3RhY2siCisKKyMgLTAyIGRvZXMgbm90IHdvcmsgb24gbWlwc2VsOiBzc2ggaGFuZ3Mgd2hlbiBpdCB0cmllcyB0byByZWFkIC9kZXYvdXJhbmRvbQorQ0ZMQUdfbXR4LTEgOj0gIiR7QCcke0NGTEFHfScucmVwbGFjZSgnLU8yJywgJycpfSIKK0NGTEFHX210eC0yIDo9ICIke0AnJHtDRkxBR30nLnJlcGxhY2UoJy1PMicsICcnKX0iCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyIKK2V4cG9ydCBFWF9MSUJTID0gIi1sZ2NjIC1sZGwiCitleHBvcnQgQVMgPSAiJHtDQ30gLWMiCisKK2luaGVyaXQgcGtnY29uZmlnIHNpdGVpbmZvIG11bHRpbGliX2hlYWRlciBwdGVzdAorCitQQUNLQUdFUyA9KyAibGliY3J5cHRvIGxpYnNzbCAke1BOfS1taXNjIG9wZW5zc2wtY29uZiIKK0ZJTEVTX2xpYmNyeXB0byA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdG8ke1NPTElCU30iCitGSUxFU19saWJzc2wgPSAiJHtsaWJkaXJ9L2xpYnNzbC5zby4qIgorRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyAke2JpbmRpcn0vY19yZWhhc2giCitSREVQRU5EU18ke1BOfS1taXNjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCAncGVybCcsICcnLCBkKX0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTREVWfSIKKworIyBBZGQgdGhlIG9wZW5zc2wuY25mIGZpbGUgdG8gdGhlIG9wZW5zc2wtY29uZiBwYWNrYWdlLiAgTWFrZSB0aGUgbGliY3J5cHRvCisjIHBhY2thZ2UgUlJFQ09NTUVORFMgb24gdGhpcyBwYWNrYWdlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHRvIGJlIGluc3RhbGxlZCBmb3IgYm90aCB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgYW5kIHRoZSBsaWJjcnlwdG8KKyMgcGFja2FnZSBzaW5jZSB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgZGVwZW5kcyBvbiB0aGUgbGliY3J5cHRvIHBhY2thZ2UuCitGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK0NPTkZGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK1JSRUNPTU1FTkRTX2xpYmNyeXB0byArPSAib3BlbnNzbC1jb25mIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1pc2MgbWFrZSBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgYmMiCisKKyMgUmVtb3ZlIHRoaXMgdG8gZW5hYmxlIFNTTHYzLiBTU0x2MyBpcyBkZWZhdWx0ZWQgdG8gZGlzYWJsZWQgZHVlIHRvIHRoZSBQT09ETEUKKyMgdnVsbmVyYWJpbGl0eQorRVhUUkFfT0VDT05GID0gIiAtbm8tc3NsMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfZGFyd2luICgpIHsKKwlzZWQgLWkgLWUgJy92ZXJzaW9uLXNjcmlwdD1vcGVuc3NsXC5sZC9kJyBDb25maWd1cmUKK30KKworZG9fY29uZmlndXJlICgpIHsKKwljZCB1dGlsCisJcGVybCBwZXJscGF0aC5wbCAke1NUQUdJTkdfQklORElSX05BVElWRX0KKwljZCAuLgorCWxuIC1zZiBhcHBzL29wZW5zc2wucG9kIGNyeXB0by9jcnlwdG8ucG9kIHNzbC9zc2wucG9kIGRvYy8KKworCW9zPSR7SE9TVF9PU30KKwljYXNlICRvcyBpbgorCWxpbnV4LXVjbGliYyB8XAorCWxpbnV4LXVjbGliY2VhYmkgfFwKKwlsaW51eC1nbnVlYWJpIHxcCisJbGludXgtdWNsaWJjc3BlIHxcCisJbGludXgtZ251c3BlIHxcCisJbGludXgtbXVzbCopCisJCW9zPWxpbnV4CisJCTs7CisJCSopCisJCTs7CisJZXNhYworCXRhcmdldD0iJG9zLSR7SE9TVF9BUkNIfSIKKwljYXNlICR0YXJnZXQgaW4KKwlsaW51eC1hcm0pCisJCXRhcmdldD1saW51eC1hcm12NAorCQk7OworCWxpbnV4LWFybWViKQorCQl0YXJnZXQ9bGludXgtZWxmLWFybWViCisJCTs7CisJbGludXgtYWFyY2g2NCopCisJCXRhcmdldD1saW51eC1nZW5lcmljNjQKKwkJOzsKKwlsaW51eC1zaDMpCisJCXRhcmdldD1kZWJpYW4tc2gzCisJCTs7CisJbGludXgtc2g0KQorCQl0YXJnZXQ9ZGViaWFuLXNoNAorCQk7OworCWxpbnV4LWk0ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNDg2CisJCTs7CisJbGludXgtaTU4NiB8IGxpbnV4LXZpYWMzKQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTU4NgorCQk7OworCWxpbnV4LWk2ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNjg2L2Ntb3YKKwkJOzsKKwlsaW51eC1nbnV4MzIteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDMyCisJCTs7CisJbGludXgtZ251NjQteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDg2XzY0CisJCTs7CisJbGludXgtbWlwcykKKwkJdGFyZ2V0PWRlYmlhbi1taXBzCisJCTs7CisJbGludXgtbWlwc2VsKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHNlbAorCQk7OworICAgICAgICBsaW51eC0qLW1pcHM2NCkKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eC1taXBzCisgICAgICAgICAgICAgICAgOzsKKwlsaW51eC1taWNyb2JsYXplKikKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgorCQk7OworCWxpbnV4LXBvd2VycGMpCisJCXRhcmdldD1saW51eC1wcGMKKwkJOzsKKwlsaW51eC1wb3dlcnBjNjQpCisJCXRhcmdldD1saW51eC1wcGM2NAorCQk7OworCWxpbnV4LXN1cGVyc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJbGludXgtc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJZGFyd2luLWkzODYpCisJCXRhcmdldD1kYXJ3aW4taTM4Ni1jYworCQk7OworCWVzYWMKKwkjIGluamVjdCBtYWNoaW5lLXNwZWNpZmljIGZsYWdzCisJc2VkIC1pIC1lICJzfF5cKFwiJHRhcmdldFwiLFxzKlwiW146XVwrXCk6XChbXjpdXCtcKXxcMToke0NGTEFHfXxnIiBDb25maWd1cmUKKyAgICAgICAgdXNlcHJlZml4PSR7cHJlZml4fQorICAgICAgICBpZiBbICJ4JHVzZXByZWZpeCIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHVzZXByZWZpeD0vCisgICAgICAgIGZpICAgICAgICAKKwlwZXJsIC4vQ29uZmlndXJlICR7RVhUUkFfT0VDT05GfSBzaGFyZWQgLS1wcmVmaXg9JHVzZXByZWZpeCAtLW9wZW5zc2xkaXI9JHtsaWJkaXJ9L3NzbCAtLWxpYmRpcj1gYmFzZW5hbWUgJHtsaWJkaXJ9YCAkdGFyZ2V0Cit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAncy9cKChPUEVOU1NMPVwpIi4qIi9cMSJvcGVuc3NsIi8nIE1ha2VmaWxlCit9CisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9fY29tcGlsZV9wdGVzdCAoKSB7CisJb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyBDcmVhdGUgJHtEfS8ke3ByZWZpeH0gdG8gZml4IHBhcmFsbGVsIGlzc3VlcworCW1rZGlyIC1wICR7RH0vJHtwcmVmaXh9LworCisJb2VfcnVubWFrZSBJTlNUQUxMX1BSRUZJWD0iJHtEfSIgTUFORElSPSIke21hbmRpcn0iIGluc3RhbGwKKworCW9lX2xpYmluc3RhbGwgLXNvIGxpYmNyeXB0byAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gbGlic3NsICR7RH0ke2xpYmRpcn0KKworCSMgTW92aW5nIGxpYmNyeXB0byB0byAvbGliCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY3J5cHRvKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXNlZCAtaSBzI2xpYmRpcj1cJFx7ZXhlY19wcmVmaXhcfVwvbGliI2xpYmRpcj0ke2Jhc2VfbGliZGlyfSMgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmNyeXB0by5wYworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJY3AgLS1kZXJlZmVyZW5jZSAtUiBpbmNsdWRlL29wZW5zc2wgJHtEfSR7aW5jbHVkZWRpcn0KKworCW9lX211bHRpbGliX2hlYWRlciBvcGVuc3NsL29wZW5zc2xjb25mLmgKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwZXJsJywgJ3BlcmwnLCAnJywgZCl9IiA9ICJwZXJsIiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rvb2xzL2NfcmVoYXNoICR7RH0ke2JpbmRpcn0KKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKKwkJIyBUaGUgY19yZWhhc2ggdXRpbGl0eSBpc24ndCBpbnN0YWxsZWQgYnkgdGhlIG5vcm1hbCBpbnN0YWxsYXRpb24gcHJvY2Vzcy4KKwllbHNlCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJcm0gLWYgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbCAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CisJZmkKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLXIgTWFrZWZpbGUgdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yIGNlcnRzICR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvbWlzYy9DQS5zaCAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvb3BlbnNzbC5jbmYgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2Jpbi9vcGVuc3NsICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWNwIGFwcHMvc2VydmVyMi5wZW0gICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwlpbnN0YWxsIHV0aWwvb3BlbnNzbHdyYXAuc2ggICAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorCWluc3RhbGwgdXRpbC9zaGxpYl93cmFwLnNoICAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L29wZW5zc2wgXAorCSAgICBPUEVOU1NMX0NPTkY9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiBcCisJICAgIFNTTF9DRVJUX0RJUj0ke2xpYmRpcn0vc3NsL2NlcnRzIFwKKwkgICAgU1NMX0NFUlRfRklMRT0ke2xpYmRpcn0vc3NsL2NlcnQucGVtIFwKKwkgICAgT1BFTlNTTF9FTkdJTkVTPSR7bGliZGlyfS9zc2wvZW5naW5lcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9NYWtlZmlsZXMtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9NYWtlZmlsZXMtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5NDQ2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitBZGQgJ2J1aWxkdGVzdCcgYW5kICdydW50ZXN0JyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL01ha2VmaWxlLm9yZworKysrIG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCitAQCAtNDUxLDggKzQ1MSwxNiBAQCByZWhhc2gudGltZTogY2VydHMgYXBwcworIHRlc3Q6ICAgdGVzdHMKKyAKKyB0ZXN0czogcmVoYXNoCisrCSQoTUFLRSkgYnVpbGR0ZXN0CisrCSQoTUFLRSkgcnVudGVzdAorKworK2J1aWxkdGVzdDoKKysJQChjZCB0ZXN0ICYmIFwKKysJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiBleGUgYXBwcyk7CisrCisrcnVudGVzdDoKKyAJQChjZCB0ZXN0ICYmIGVjaG8gInRlc3RpbmcuLi4iICYmIFwKKy0JJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiB0ZXN0cyApOworKwkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIGFsbHRlc3RzICk7CisgCU9QRU5TU0xfQ09ORj1hcHBzL29wZW5zc2wuY25mIHV0aWwvb3BlbnNzbHdyYXAuc2ggdmVyc2lvbiAtYQorIAorIHJlcG9ydDoKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTEzNyw3ICsxMzcsNyBAQCB0ZXN0czoJZXhlIGFwcHMgJChURVNUUykKKyBhcHBzOgorIAlAKGNkIC4uOyAkKE1BS0UpIERJUlM9YXBwcyBhbGwpCisgCistYWxsdGVzdHM6IFwKKythbGwtdGVzdHM9IFwKKyAJdGVzdF9kZXMgdGVzdF9pZGVhIHRlc3Rfc2hhIHRlc3RfbWQ0IHRlc3RfbWQ1IHRlc3RfaG1hYyBcCisgCXRlc3RfbWQyIHRlc3RfbWRjMiB0ZXN0X3dwIFwKKyAJdGVzdF9ybWQgdGVzdF9yYzIgdGVzdF9yYzQgdGVzdF9yYzUgdGVzdF9iZiB0ZXN0X2Nhc3QgdGVzdF9hZXMgXAorQEAgLTE0OCw2ICsxNDgsMTEgQEAgYWxsdGVzdHM6IFwKKyAJdGVzdF9qcGFrZSB0ZXN0X3NycCB0ZXN0X2NtcyB0ZXN0X29jc3AgdGVzdF92M25hbWUgdGVzdF9oZWFydGJlYXQgXAorIAl0ZXN0X2NvbnN0YW50X3RpbWUKKyAKKythbGx0ZXN0czoKKysJQChmb3IgaSBpbiAkKGFsbC10ZXN0cyk7IGRvIFwKKysJKCAkKE1BS0UpICQkaSAmJiBlY2hvICJQQVNTOiAkJGkiICkgfHwgZWNobyAiRkFJTDogJCRpIjsgXAorKwlkb25lKQorKworIHRlc3RfZXZwOiAkKEVWUFRFU1QpJChFWEVfRVhUKSBldnB0ZXN0cy50eHQKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChFVlBURVNUKSBldnB0ZXN0cy50eHQKKyAKK0BAIC0yMTMsNyArMjE4LDcgQEAgdGVzdF94NTA5OiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHR4NQorIAllY2hvIHRlc3Qgc2Vjb25kIHg1MDl2MyBjZXJ0aWZpY2F0ZQorIAlzaCAuL3R4NTA5IHYzLWNlcnQyLnBlbSAyPi9kZXYvbnVsbAorIAorLXRlc3RfcnNhOiAkKFJTQVRFU1QpJChFWEVfRVhUKSAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRyc2EgdGVzdHJzYS5wZW0KKyt0ZXN0X3JzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCisgCUBzaCAuL3Ryc2EgMj4vZGV2L251bGwKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChSU0FURVNUKQorIAorQEAgLTMxMywxMSArMzE4LDExIEBAIHRlc3RfdHNhOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRlc3QKKyAJICBzaCAuL3Rlc3R0c2E7IFwKKyAJZmkKKyAKKy10ZXN0X2lnZTogJChJR0VURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2lnZToKKyAJQGVjaG8gIlRlc3QgSUdFIG1vZGUiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSUdFVEVTVCkKKyAKKy10ZXN0X2pwYWtlOiAkKEpQQUtFVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9qcGFrZToKKyAJQGVjaG8gIlRlc3QgSlBBS0UiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSlBBS0VURVNUKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFlNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIG51bWJlciBvZiBjb2xvbnMgYXJlIGltcG9ydGFudCA6KQorCisKKy0tLQorIENvbmZpZ3VyZSB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQorQEAgLTQ0Myw2ICs0NDMsMjMgQEAgbXkgJXRhYmxlPSgKKyAibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorICJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorIAorKyAKKysjIExpbnV4IG9uIEFSTQorKyJsaW51eC1lbGYtYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWVsZi1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKysibGludXgtYXZyMzIiLCIkRU5WeydDQyd9Oi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLiIsCisrCisrIyMjIyBMaW51eCBvbiBNSVBTL01JUFM2NAorKyJsaW51eC1taXBzIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwczY0IiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1tYWJpPTY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1taXBzNjRlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwc2VsIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKyAjIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KKyAiYW5kcm9pZCIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorICJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5N2FmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RlcmFtIFN0YXR1czogQmFja3BvcnQKKworV2hlbiBidWlsZGluZyBvbiB4MzIgc3lzdGVtcyB3aGVyZSB0aGUgZGVmYXVsdCB0eXBlIGlzIDMyYml0LCBtYWtlIHN1cmUKK3dlIGNhbiB0cmFuc3BhcmVudGx5IHJlcHJlc2VudCA2NGJpdCBpbnRlZ2Vycy4gIE90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aAorYnVpbGQgZXJyb3JzIGxpa2U6CisvdXNyL2Jpbi9wZXJsIGFzbS9naGFzaC14ODZfNjQucGwgZWxmID4gZ2hhc2gteDg2XzY0LnMKK0ludGVnZXIgb3ZlcmZsb3cgaW4gaGV4YWRlY2ltYWwgbnVtYmVyIGF0IGFzbS8uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBsaW5lIDIwMSwgPD4gbGluZSA4OTAuCisuLi4KK2doYXNoLXg4Nl82NC5zOiBBc3NlbWJsZXIgbWVzc2FnZXM6CitnaGFzaC14ODZfNjQuczo4OTA6IEVycm9yOiBqdW5rICcuMTU0NzMzNTU0Nzk5OTVlKzE5JyBhZnRlciBleHByZXNzaW9uCisKK1dlIGRvbid0IGVuYWJsZSB0aGlzIGdsb2JhbGx5IGFzIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHdlJ2QgZ2V0CiszMmJpdCB2YWx1ZXMgaW50ZXJwcmV0ZWQgYXMgdW5zaWduZWQgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgc2lnbmVkLgorCitSZXBvcnRlZC1ieTogQmVydHJhbmQgSmFjcXVpbiA8YmVydHJhbmRAamFjcXVpbi5iemg+CitVUkw6IGh0dHBzOi8vYnVncy5nZW50b28ub3JnLzU0MjYxOAorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjJhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJhLm9yaWcvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCisrKysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCitAQCAtMTk0LDcgKzE5NCwxMCBAQCBteSAlZ2xvYmFsczsKKyAgICAgfQorICAgICBzdWIgb3V0IHsKKyAgICAgCW15ICRzZWxmID0gc2hpZnQ7CistCisrCSMgV2hlbiBidWlsZGluZyBvbiB4MzIgQUJJcywgdGhlIGV4cGFuZGVkIGhleCB2YWx1ZSBtaWdodCBiZSB0b28KKysJIyBiaWcgdG8gZml0IGludG8gMzJiaXRzLiBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTU0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gODNmMzE4ZDY4YmJkYWIxY2E4OThjOTQ1NzZhODM4Y2M5N2RmNDcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1ZHdpZyBOdXNzZWwgPGx1ZHdpZy5udXNzZWxAc3VzZS5kZT4KK0RhdGU6IFdlZCwgMjEgQXByIDIwMTAgMTU6NTI6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWxzbyBjcmVhdGUgb2xkIGhhc2ggZm9yIGNvbXBhdGliaWxpdHkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvY19yZWhhc2guaW4gYi90b29scy9jX3JlaGFzaC5pbgoraW5kZXggYjA4NmZmOS4uYjc3N2Q3OSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2NfcmVoYXNoLmluCisrKysgYi90b29scy9jX3JlaGFzaC5pbgorQEAgLTgsOCArOCw2IEBAIG15ICRwcmVmaXg7CisgCisgbXkgJG9wZW5zc2wgPSAkRU5We09QRU5TU0x9IHx8ICJvcGVuc3NsIjsKKyBteSAkcHdkOworLW15ICR4NTA5aGFzaCA9ICItc3ViamVjdF9oYXNoIjsKKy1teSAkY3JsaGFzaCA9ICItaGFzaCI7CisgbXkgJHZlcmJvc2UgPSAwOworIG15ICRzeW1saW5rX2V4aXN0cz1ldmFsIHtzeW1saW5rKCIiLCIiKTsgMX07CisgbXkgJHJlbW92ZWxpbmtzID0gMTsKK0BAIC0xOCwxMCArMTYsNyBAQCBteSAkcmVtb3ZlbGlua3MgPSAxOworIHdoaWxlICggJEFSR1ZbMF0gPX4gL14tLyApIHsKKyAgICAgbXkgJGZsYWcgPSBzaGlmdCBAQVJHVjsKKyAgICAgbGFzdCBpZiAoICRmbGFnIGVxICctLScpOworLSAgICBpZiAoICRmbGFnIGVxICctb2xkJykgeworLQkgICAgJHg1MDloYXNoID0gIi1zdWJqZWN0X2hhc2hfb2xkIjsKKy0JICAgICRjcmxoYXNoID0gIi1oYXNoX29sZCI7CistICAgIH0gZWxzaWYgKCAkZmxhZyBlcSAnLWgnKSB7CisrICAgIGlmICggJGZsYWcgZXEgJy1oJykgeworIAkgICAgaGVscCgpOworICAgICB9IGVsc2lmICggJGZsYWcgZXEgJy1uJyApIHsKKyAJICAgICRyZW1vdmVsaW5rcyA9IDA7CitAQCAtMTEzLDcgKzEwOCw5IEBAIHN1YiBoYXNoX2RpciB7CisgCQkJbmV4dDsKKyAJCX0KKyAJCWxpbmtfaGFzaF9jZXJ0KCRmbmFtZSkgaWYoJGNlcnQpOworKwkJbGlua19oYXNoX2NlcnRfb2xkKCRmbmFtZSkgaWYoJGNlcnQpOworIAkJbGlua19oYXNoX2NybCgkZm5hbWUpIGlmKCRjcmwpOworKwkJbGlua19oYXNoX2NybF9vbGQoJGZuYW1lKSBpZigkY3JsKTsKKyAJfQorIH0KKyAKK0BAIC0xNDYsNiArMTQzLDcgQEAgc3ViIGNoZWNrX2ZpbGUgeworIAorIHN1YiBsaW5rX2hhc2hfY2VydCB7CisgCQlteSAkZm5hbWUgPSAkX1swXTsKKysJCW15ICR4NTA5aGFzaCA9ICRfWzFdIHx8ICctc3ViamVjdF9oYXNoJzsKKyAJCSRmbmFtZSA9fiBzLycvJ1xcJycvZzsKKyAJCW15ICgkaGFzaCwgJGZwcmludCkgPSBgIiRvcGVuc3NsIiB4NTA5ICR4NTA5aGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAiJGZuYW1lImA7CisgCQljaG9tcCAkaGFzaDsKK0BAIC0xNzYsMTEgKzE3NCwyMSBAQCBzdWIgbGlua19oYXNoX2NlcnQgeworIAkJJGhhc2hsaXN0eyRoYXNofSA9ICRmcHJpbnQ7CisgfQorIAorK3N1YiBsaW5rX2hhc2hfY2VydF9vbGQgeworKwkJbGlua19oYXNoX2NlcnQoJF9bMF0sICctc3ViamVjdF9oYXNoX29sZCcpOworK30KKysKKytzdWIgbGlua19oYXNoX2NybF9vbGQgeworKwkJbGlua19oYXNoX2NybCgkX1swXSwgJy1oYXNoX29sZCcpOworK30KKysKKysKKyAjIFNhbWUgYXMgYWJvdmUgZXhjZXB0IGZvciBhIENSTC4gQ1JMIGxpbmtzIGFyZSBvZiB0aGUgZm9ybSA8aGFzaD4ucjxuPgorIAorIHN1YiBsaW5rX2hhc2hfY3JsIHsKKyAJCW15ICRmbmFtZSA9ICRfWzBdOworKwkJbXkgJGNybGhhc2ggPSAkX1sxXSB8fCAiLWhhc2giOworIAkJJGZuYW1lID1+IHMvJy8nXFwnJy9nOworIAkJbXkgKCRoYXNoLCAkZnByaW50KSA9IGAiJG9wZW5zc2wiIGNybCAkY3JsaGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAnJGZuYW1lJ2A7CisgCQljaG9tcCAkaGFzaDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE0ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMC45LjhtL2FwcHMvQ0EucGwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTAuOS44bS5vcmlnL2FwcHMvQ0EucGwuaW4JMjAwNi0wNC0yOCAwMDoyODo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTAuOS44bS9hcHBzL0NBLnBsLmluCTIwMTAtMDItMjcgMDA6MzY6NTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjUsNiArNjUsNyBAQAorIGZvcmVhY2ggKEBBUkdWKSB7CisgCWlmICggL14oLVw/fC1ofC1oZWxwKSQvICkgeworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMDsKKyAJfSBlbHNpZiAoL14tbmV3Y2VydCQvKSB7CisgCSAgICAjIGNyZWF0ZSBhIGNlcnRpZmljYXRlCitAQCAtMTY1LDYgKzE2Niw3IEBACisgCX0gZWxzZSB7CisgCSAgICBwcmludCBTVERFUlIgIlVua25vd24gYXJnICRfXG4iOworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMTsKKyAJfQorIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQ0MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCitAQCAtMTA3LDYgKzEwNywxMCBAQCBteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMKKyAKKyBteSAkY2xhbmdfZGlzYWJsZWRfd2FybmluZ3MgPSAiLVduby1sYW5ndWFnZS1leHRlbnNpb24tdG9rZW4gLVduby1leHRlbmRlZC1vZmZzZXRvZiAtV25vLXBhZGRlZCAtV25vLXNob3J0ZW4tNjQtdG8tMzIgLVduby1mb3JtYXQtbm9ubGl0ZXJhbCAtV25vLW1pc3Npbmctbm9yZXR1cm4gLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1Xbm8tdW5yZWFjaGFibGUtY29kZSAtV25vLWNvbnZlcnNpb24gLVduby1kb2N1bWVudGF0aW9uIC1Xbm8tbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMgLVduby1jYXN0LWFsaWduIC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMtZGlzY2FyZHMtcXVhbGlmaWVycyAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tZGlzYWJsZWQtbWFjcm8tZXhwYW5zaW9uIC1Xbm8tY29uZGl0aW9uYWwtdW5pbml0aWFsaXplZCAtV25vLXN3aXRjaC1lbnVtIjsKKyAKKysjIFRoZXJlIGFyZSBubyBzZXBhcmF0ZSBDRkxBR1MvQ1BQRkxBR1MvTERGTEFHUywgc2V0IGV2ZXJ5dGhpbmcgaW4gQ0ZMQUdTCisrbXkgJGRlYmlhbl9jZmxhZ3MgPSBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENGTEFHU2AgLiBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENQUEZMQUdTYCAuIGBkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgTERGTEFHU2AgLiAiLVdhLC0tbm9leGVjc3RhY2sgLVdhbGwiOworKyRkZWJpYW5fY2ZsYWdzID1+IHMvXG4vIC9nOworKworIG15ICRzdHJpY3Rfd2FybmluZ3MgPSAwOworIAorIG15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CitAQCAtMzQzLDYgKzM0Nyw1NSBAQCBteSAldGFibGU9KAorICJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKKyAidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCisgCisrIyBEZWJpYW4gR05VLyogKHZhcmlvdXMgYXJjaGl0ZWN0dXJlcykKKysiZGViaWFuLWFscGhhIiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjUiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hcm02NCIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWVsIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWhmIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFtZDY0IiwgImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6IiwKKysiZGViaWFuLWF2cjMyIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9OR19CRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtYW1kNjQiLCJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtaTM4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNDg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHBwYSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVg6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHVyZC1pMzg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2EsLS1ub2V4ZWNzdGFjayAtZyAtbXR1bmU9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWlhNjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4Ni1pNDg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTQ4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYtaTU4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk1ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2LWk2ODYvY21vdiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk2ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tNjhrIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzIiwgICAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHNlbCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzbjMyIiwgICAibWlwczY0LWxpbnV4LWdudWFiaW4zMi1nY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwc24zMmVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpbjMyLWdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzNjQiLCAgICJtaXBzNjQtbGludXgtZ251YWJpNjQtZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHM2NGVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpNjQtZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW5ldGJzZC1pMzg2IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2QtbTY4ayIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2Qtc3BhcmMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW12ODo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWFscGhhIiwiZ2NjOi1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9OjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQgREVTX1BUUiBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWkzODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dDpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3BlbmJzZC1taXBzIiwiZ2NjOi1ETF9FTkRJQU4gJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcjFrIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcG93ZXJwYyIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wb3dlcnBjc3BlIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBwYzY0IiwiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcHBjNjRlbCIsImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tczM5MCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCisrImRlYmlhbi1zMzkweCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2gzIiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoNCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDNlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDRlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tMzJyIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjLXY4IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT12OCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmMtdjkiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PXY5IC1XYSwtQXY4cGx1cyAtRFVMVFJBU1BBUkMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjNjQiLCJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLURVTFRSQVNQQVJDIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi14MzIiLCJnY2M6LW14MzIgLURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbXgzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OngzMiIsCisrCisgIyMjIworICMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQorICMjIyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4NWUzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MjcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCisgTUFLRUZJTEU9IE1ha2VmaWxlCisgCistTUFORElSPSQoT1BFTlNTTERJUikvbWFuCisrTUFORElSPS91c3Ivc2hhcmUvbWFuCisgTUFOMT0xCisgTUFOMz0zCisgTUFOU1VGRklYPQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYzFkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMzoyOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjAsNyArMTYwLDggQEAKKyBNQU5ESVI9L3Vzci9zaGFyZS9tYW4KKyBNQU4xPTEKKyBNQU4zPTMKKy1NQU5TVUZGSVg9CisrTUFOU1VGRklYPXNzbAorK01BTlNFQ1RJT049U1NMCisgSFRNTFNVRkZJWD1odG1sCisgSFRNTERJUj0kKE9QRU5TU0xESVIpL2h0bWwKKyBTSEVMTD0vYmluL3NoCitAQCAtNjUxLDcgKzY1Miw3IEBACisgCQllY2hvICJpbnN0YWxsaW5nIG1hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKSI7IFwKKyAJCShjZCBgJChQRVJMKSB1dGlsL2Rpcm5hbWUucGwgJCRpYDsgXAorIAkJc2ggLWMgIiQkcG9kMm1hbiBcCistCQkJLS1zZWN0aW9uPSQkc2VjIC0tY2VudGVyPU9wZW5TU0wgXAorKwkJCS0tc2VjdGlvbj0kJHtzZWN9JChNQU5TRUNUSU9OKSAtLWNlbnRlcj1PcGVuU1NMIFwKKyAJCQktLXJlbGVhc2U9JChWRVJTSU9OKSBgYmFzZW5hbWUgJCRpYCIpIFwKKyAJCQk+ICAkKElOU1RBTExfUFJFRklYKSQoTUFORElSKS9tYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCk7IFwKKyAJCSQoUEVSTCkgdXRpbC9leHRyYWN0LW5hbWVzLnBsIDwgJCRpIHwgXAorQEAgLTY2OCw3ICs2NjksNyBAQAorIAkJZWNobyAiaW5zdGFsbGluZyBtYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCkiOyBcCisgCQkoY2QgYCQoUEVSTCkgdXRpbC9kaXJuYW1lLnBsICQkaWA7IFwKKyAJCXNoIC1jICIkJHBvZDJtYW4gXAorLQkJCS0tc2VjdGlvbj0kJHNlYyAtLWNlbnRlcj1PcGVuU1NMIFwKKysJCQktLXNlY3Rpb249JCR7c2VjfSQoTUFOU0VDVElPTikgLS1jZW50ZXI9T3BlblNTTCBcCisgCQkJLS1yZWxlYXNlPSQoVkVSU0lPTikgYGJhc2VuYW1lICQkaWAiKSBcCisgCQkJPiAgJChJTlNUQUxMX1BSRUZJWCkkKE1BTkRJUikvbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpOyBcCisgCQkkKFBFUkwpIHV0aWwvZXh0cmFjdC1uYW1lcy5wbCA8ICQkaSB8IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2NiM2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMDgtMjEgMTM6MzY6NDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMTUzLDcgKzE1Myw3IEBACisgCU5PQUxMU1lNU0ZMQUdTPSctV2wsLS1uby13aG9sZS1hcmNoaXZlJzsgXAorIAlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKyAKKy1ET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSAtV2wsLXJwYXRoLCQoTElCUlBBVEgpIgorK0RPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIAorICNUaGlzIGlzIHJhdGhlciBzcGVjaWFsLiAgSXQncyBhIHNwZWNpYWwgdGFyZ2V0IHdpdGggd2hpY2ggb25lIGNhbiBsaW5rCisgI2FwcGxpY2F0aW9ucyB3aXRob3V0IGJvdGhlcmluZyB3aXRoIGFueSBmZWF0dXJlcyB0aGF0IGhhdmUgYW55dGhpbmcgdG8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ0MDhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6NDQuMDAwMDAwMDAwICswMTAwCitAQCAtMTUxLDcgKzE1MSw3IEBACisgCVNITElCX1NVRkZJWD07IFwKKyAJQUxMU1lNU0ZMQUdTPSctV2wsLS13aG9sZS1hcmNoaXZlJzsgXAorIAlOT0FMTFNZTVNGTEFHUz0nLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSc7IFwKKy0JU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1XbCwtQnN5bWJvbGljIC1XbCwtc29uYW1lPSQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVgiCisrCVNIQVJFREZMQUdTPSIkKENGTEFHUykgJChTSEFSRURfTERGTEFHUykgLXNoYXJlZCAtV2wsLXNvbmFtZT0kJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIgorIAorIERPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkYTM4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwJMjAwMS0xMC0yNCAyMzoyMDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2FzbS9kZXNib3RoLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTYsNiArMTYsMTEgQEAKKyAKKyAJJnB1c2goImVkaSIpOworIAorKwkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYnAiKTsKKysJJmFkZCAgICAoImVicCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKworIAkmY29tbWVudCgiIik7CisgCSZjb21tZW50KCJMb2FkIHRoZSBkYXRhIHdvcmRzIik7CisgCSZtb3YoJEwsJkRXUCgwLCJlYngiLCIiLDApKTsKK0BAIC00NywxNSArNTIsMjEgQEAKKyAJJm1vdigmc3d0bXAoMiksCShEV0MoKCRlbmMpPyIxIjoiMCIpKSk7CisgCSZtb3YoJnN3dG1wKDEpLAkiZWF4Iik7CisgCSZtb3YoJnN3dG1wKDApLAkiZWJ4Iik7CistCSZjYWxsKCJERVNfZW5jcnlwdDIiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKysJJmNhbGwoIkRFU19lbmNyeXB0MlxAUExUIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisgCSZtb3YoJnN3dG1wKDIpLAkoRFdDKCgkZW5jKT8iMCI6IjEiKSkpOworIAkmbW92KCZzd3RtcCgxKSwJImVkaSIpOworIAkmbW92KCZzd3RtcCgwKSwJImVieCIpOworLQkmY2FsbCgiREVTX2VuY3J5cHQyIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisrCSZjYWxsKCJERVNfZW5jcnlwdDJcQFBMVCIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworIAkmbW92KCZzd3RtcCgyKSwJKERXQygoJGVuYyk/IjEiOiIwIikpKTsKKyAJJm1vdigmc3d0bXAoMSksCSJlc2kiKTsKKyAJJm1vdigmc3d0bXAoMCksCSJlYngiKTsKKy0JJmNhbGwoIkRFU19lbmNyeXB0MiIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworKwkmY2FsbCgiREVTX2VuY3J5cHQyXEBQTFQiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKyAKKyAJJnN0YWNrX3BvcCgzKTsKKyAJJm1vdigkTCwmRFdQKDAsImVieCIsIiIsMCkpOworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL2NiYy5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTEtMDctMTMgMDg6MjI6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTIyLDcgKzEyMiwxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGluIGFycmF5IGZvciBjYWxsCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRlbmNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKwkmY2FsbCgiJGVuY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOworIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsKK0BAIC0xODUsNyArMTg5LDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgaW4gYXJyYXkgZm9yIGNhbGwKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGVuY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MSIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MSIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDEiKSAuICJdIik7CisrCSZjYWxsKCIkZW5jX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOworQEAgLTIxOCw3ICsyMjYsMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBiYWNrCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRkZWNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDIiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDIiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQyIikgLiAiXSIpOworKwkmY2FsbCgiJGRlY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOwkjIGdldCByZXR1cm4KKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CSMKK0BAIC0yNjEsNyArMjczLDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgYmFjaworIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZGVjX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQzIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQzIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MyIpIC4gIl0iKTsKKysJJmNhbGwoIiRkZWNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsJIyBnZXQgcmV0dXJuCisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOwkjCitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMS0xMi0wOSAyMDoxNjozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjEsNiArMTYxLDcgQEAKKyAJaWYgKCQ6Om1hY29zeCkJeyBwdXNoIChAb3V0LCIkdG1wLDJcbiIpOyB9CisgCWVsc2lmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiJHRtcCw0XG4iKTsgfQorIAllbHNlCQl7IHB1c2ggKEBvdXQsIiR0bXBcbiIpOyB9CisrCWlmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiLmhpZGRlblx0T1BFTlNTTF9pYTMyY2FwX1BcbiIpOyB9CisgICAgIH0KKyAgICAgcHVzaChAb3V0LCRpbml0c2VnKSBpZiAoJGluaXRzZWcpOworIH0KK0BAIC0yMTgsOCArMjE5LDIzIEBACisgICAgIGVsc2lmICgkOjplbGYpCisgICAgIHsJJGluaXRzZWcuPTw8X19fOworIC5zZWN0aW9uCS5pbml0CisrX19fCisrICAgICAgICBpZiAoJDo6cGljKQorKwl7ICAgJGluaXRzZWcuPTw8X19fOworKwlwdXNobAklZWJ4CisrCWNhbGwJLnBpY19wb2ludDAKKysucGljX3BvaW50MDoKKysJcG9wbAklZWJ4CisrCWFkZGwJXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tLnBpY19wb2ludDBdLCVlYngKKysJY2FsbAkkZlxAUExUCisrCXBvcGwJJWVieAorK19fXworKwl9CisrCWVsc2UKKysJeyAgICRpbml0c2VnLj08PF9fXzsKKyAJY2FsbAkkZgorIF9fXworKwl9CisgICAgIH0KKyAgICAgZWxzaWYgKCQ6OmNvZmYpCisgICAgIHsgICAkaW5pdHNlZy49PDxfX187CSMgYXBwbGllcyB0byBib3RoIEN5Z3dpbiBhbmQgTWluZ3cKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDg2Y3B1aWQucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTAyLTI4IDE1OjIwOjM0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgsNiArOCw4IEBACisgCisgZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CisgCisrcHVzaChAb3V0LCAiLmhpZGRlbiBPUEVOU1NMX2lhMzJjYXBfUFxuIik7CisrCisgJmZ1bmN0aW9uX2JlZ2luKCJPUEVOU1NMX2lhMzJfY3B1aWQiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcHVzaGYJKCk7CitAQCAtMTM5LDkgKzE0MSw3IEBACisgJnNldF9sYWJlbCgibm9jcHVpZCIpOworICZmdW5jdGlvbl9lbmQoIk9QRU5TU0xfaWEzMl9jcHVpZCIpOworIAorLSZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKy0KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIsIkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIpOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZ4b3IJKCJlZHgiLCJlZHgiKTsKKyAJJnBpY21ldXAoImVjeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CitAQCAtMTU1LDcgKzE1NSw3IEBACisgIyBUaGlzIHdvcmtzIGluIFJpbmcgMCBvbmx5IFtyZWFkIERKR1BQK01TLURPUytwcml2aWxlZ2VkIERQTUkgaG9zdF0sCisgIyBidXQgaXQncyBzYWZlIHRvIGNhbGwgaXQgb24gYW55IFtzdXBwb3J0ZWRdIDMyLWJpdCBwbGF0Zm9ybS4uLgorICMgSnVzdCBjaGVjayBmb3IgW25vbi1demVybyByZXR1cm4gdmFsdWUuLi4KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9pbnN0cnVtZW50X2hhbHQiLCJFWFRSTlx0X09QRU5TU0xfaWEzMmNhcF9QOkRXT1JEIik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfaW5zdHJ1bWVudF9oYWx0Iik7CisgCSZwaWNtZXVwKCJlY3giLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworIAkmYnQJKCZEV1AoMCwiZWN4IiksNCk7CisgCSZqbmMJKCZsYWJlbCgibm9oYWx0IikpOwkjIG5vIFRTQworQEAgLTIyMiw3ICsyMjIsNyBAQAorIAkmcmV0CSgpOworICZmdW5jdGlvbl9lbmRfQigiT1BFTlNTTF9mYXJfc3BpbiIpOworIAorLSZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1IiwiRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1Iik7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcGljbWV1cCgiZWN4IiwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ5MTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsNDY2MyBAQAorSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1Lm9yaWcvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTY1MSw2ICsxNjUxLDggQEAKKyAJCX0KKyAJfQorIAorKyRzaGFyZWRfbGRmbGFnIC49ICIgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbC5sZCI7CisrCisgb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOworIHVubGluaygiJE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgJE1ha2VmaWxlLm5ldzokIVxuIiBpZiAtZSAiJE1ha2VmaWxlLm5ldyI7Cisgb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMjoxOTowOC42MDE4MjcyNjYgKzAxMDAKK0BAIC0wLDAgKzEsNDYxNSBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQlCSU9fZl9zc2w7CisrCQlCSU9fbmV3X2J1ZmZlcl9zc2xfY29ubmVjdDsKKysJCUJJT19uZXdfc3NsOworKwkJQklPX25ld19zc2xfY29ubmVjdDsKKysJCUJJT19wcm94eV9zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9jb3B5X3Nlc3Npb25faWQ7CisrCQlCSU9fc3NsX3NodXRkb3duOworKwkJZDJpX1NTTF9TRVNTSU9OOworKwkJRFRMU3YxX2NsaWVudF9tZXRob2Q7CisrCQlEVExTdjFfbWV0aG9kOworKwkJRFRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCQlFUlJfbG9hZF9TU0xfc3RyaW5nczsKKysJCWkyZF9TU0xfU0VTU0lPTjsKKysJCWtzc2xfYnVpbGRfcHJpbmNpcGFsXzI7CisrCQlrc3NsX2NnZXRfdGt0OworKwkJa3NzbF9jaGVja19hdXRoZW50OworKwkJa3NzbF9jdHhfZnJlZTsKKysJCWtzc2xfY3R4X25ldzsKKysJCWtzc2xfY3R4X3NldGtleTsKKysJCWtzc2xfY3R4X3NldHByaW5jOworKwkJa3NzbF9jdHhfc2V0c3RyaW5nOworKwkJa3NzbF9jdHhfc2hvdzsKKysJCWtzc2xfZXJyX3NldDsKKysJCWtzc2xfa3JiNV9mcmVlX2RhdGFfY29udGVudHM7CisrCQlrc3NsX3NnZXRfdGt0OworKwkJa3NzbF9za2lwX2NvbmZvdW5kOworKwkJa3NzbF92YWxpZGF0ZV90aW1lczsKKysJCVBFTV9yZWFkX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV9yZWFkX1NTTF9TRVNTSU9OOworKwkJUEVNX3dyaXRlX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9TU0xfU0VTU0lPTjsKKysJCVNTTF9hY2NlcHQ7CisrCQlTU0xfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9hZGRfZGlyX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9maWxlX2NlcnRfc3VianNfdG9fc3RrOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZzsKKysJCVNTTF9jYWxsYmFja19jdHJsOworKwkJU1NMX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NJUEhFUl9kZXNjcmlwdGlvbjsKKysJCVNTTF9DSVBIRVJfZ2V0X2JpdHM7CisrCQlTU0xfQ0lQSEVSX2dldF9uYW1lOworKwkJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbjsKKysJCVNTTF9jbGVhcjsKKysJCVNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Q7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzOworKwkJU1NMX0NPTVBfZ2V0X25hbWU7CisrCQlTU0xfY29ubmVjdDsKKysJCVNTTF9jb3B5X3Nlc3Npb25faWQ7CisrCQlTU0xfY3RybDsKKysJCVNTTF9DVFhfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9DVFhfYWRkX3Nlc3Npb247CisrCQlTU0xfQ1RYX2NhbGxiYWNrX2N0cmw7CisrCQlTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NUWF9jdHJsOworKwkJU1NMX0NUWF9mbHVzaF9zZXNzaW9uczsKKysJCVNTTF9DVFhfZnJlZTsKKysJCVNTTF9DVFhfZ2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfZ2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9nZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9DVFhfZ2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZTsKKysJCVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zOworKwkJU1NMX0NUWF9uZXc7CisrCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uOworKwkJU1NMX0NUWF9zZXNzX2dldF9nZXRfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X25ld19jYjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfcmVtb3ZlX2NiOworKwkJU1NMX0NUWF9zZXNzaW9uczsKKysJCVNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2V0MV9wYXJhbTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NiOworKwkJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lOworKwkJU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiOworKwkJU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGE7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2RlZl9wYXNzd2RfY2JfdWQ7CisrCQlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzOworKwkJU1NMX0NUWF9zZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7CisrCQlTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wdXJwb3NlOworKwkJU1NMX0NUWF9zZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbjsKKysJCVNTTF9DVFhfc2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90cnVzdDsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeTsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9DVFhfdXNlX2NlcnRfY2hhaW5fZmlsZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9kb19oYW5kc2hha2U7CisrCQlTU0xfZHVwOworKwkJU1NMX2R1cF9DQV9saXN0OworKwkJU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGhtczsKKysJCVNTTF9mcmVlOworKwkJU1NMX2dldDFfc2Vzc2lvbjsKKysJCVNTTF9nZXRfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X2NpcGhlcl9saXN0OworKwkJU1NMX2dldF9jaXBoZXJzOworKwkJU1NMX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9nZXRfY3VycmVudF9jaXBoZXI7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY29tcHJlc3Npb247CisrCQlTU0xfZ2V0X2N1cnJlbnRfZXhwYW5zaW9uOworKwkJU1NMX2dldF9kZWZhdWx0X3RpbWVvdXQ7CisrCQlTU0xfZ2V0X2Vycm9yOworKwkJU1NMX2dldF9leF9kYXRhOworKwkJU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeDsKKysJCVNTTF9nZXRfZXhfZF9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9nZXRfZmQ7CisrCQlTU0xfZ2V0X2ZpbmlzaGVkOworKwkJU1NMX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX2dldF9wZWVyX2NlcnRfY2hhaW47CisrCQlTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X3BlZXJfZmluaXNoZWQ7CisrCQlTU0xfZ2V0X3ByaXZhdGVrZXk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eTsKKysJCVNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfZ2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX2dldF9yYmlvOworKwkJU1NMX2dldF9yZWFkX2FoZWFkOworKwkJU1NMX2dldF9yZmQ7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWU7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZTsKKysJCVNTTF9nZXRfc2Vzc2lvbjsKKysJCVNTTF9nZXRfc2hhcmVkX2NpcGhlcnM7CisrCQlTU0xfZ2V0X3NodXRkb3duOworKwkJU1NMX2dldF9TU0xfQ1RYOworKwkJU1NMX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfZ2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQ7CisrCQlTU0xfZ2V0X3ZlcnNpb247CisrCQlTU0xfZ2V0X3diaW87CisrCQlTU0xfZ2V0X3dmZDsKKysJCVNTTF9oYXNfbWF0Y2hpbmdfc2Vzc2lvbl9pZDsKKysJCVNTTF9saWJyYXJ5X2luaXQ7CisrCQlTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZTsKKysJCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3M7CisrCQlTU0xfbmV3OworKwkJU1NMX3BlZWs7CisrCQlTU0xfcGVuZGluZzsKKysJCVNTTF9yZWFkOworKwkJU1NMX3JlbmVnb3RpYXRlOworKwkJU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZzsKKysJCVNTTF9yc3RhdGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfU0VTU0lPTl9jbXA7CisrCQlTU0xfU0VTU0lPTl9mcmVlOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX1NFU1NJT05fZ2V0X2lkOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dDsKKysJCVNTTF9TRVNTSU9OX2hhc2g7CisrCQlTU0xfU0VTU0lPTl9uZXc7CisrCQlTU0xfU0VTU0lPTl9wcmludDsKKysJCVNTTF9TRVNTSU9OX3ByaW50X2ZwOworKwkJU1NMX1NFU1NJT05fc2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZTsKKysJCVNTTF9TRVNTSU9OX3NldF90aW1lb3V0OworKwkJU1NMX3NldDFfcGFyYW07CisrCQlTU0xfc2V0X2FjY2VwdF9zdGF0ZTsKKysJCVNTTF9zZXRfYmlvOworKwkJU1NMX3NldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfc2V0X2Nvbm5lY3Rfc3RhdGU7CisrCQlTU0xfc2V0X2V4X2RhdGE7CisrCQlTU0xfc2V0X2ZkOworKwkJU1NMX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX3NldF9tc2dfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3B1cnBvc2U7CisrCQlTU0xfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX3NldF9yZWFkX2FoZWFkOworKwkJU1NMX3NldF9yZmQ7CisrCQlTU0xfc2V0X3Nlc3Npb247CisrCQlTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2I7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiOworKwkJU1NMX3NldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfU1NMX0NUWDsKKysJCVNTTF9zZXRfc3NsX21ldGhvZDsKKysJCVNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKKysJCVNTTF9zZXRfdHJ1c3Q7CisrCQlTU0xfc2V0X3ZlcmlmeTsKKysJCVNTTF9zZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX3NldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX3NldF93ZmQ7CisrCQlTU0xfc2h1dGRvd247CisrCQlTU0xfc3RhdGU7CisrCQlTU0xfc3RhdGVfc3RyaW5nOworKwkJU1NMX3N0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTHYyM19jbGllbnRfbWV0aG9kOworKwkJU1NMdjIzX21ldGhvZDsKKysJCVNTTHYyM19zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjJfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyX21ldGhvZDsKKysJCVNTTHYyX3NlcnZlcl9tZXRob2Q7CisrCQlTU0x2M19jbGllbnRfbWV0aG9kOworKwkJU1NMdjNfbWV0aG9kOworKwkJU1NMdjNfc2VydmVyX21ldGhvZDsKKysJCVNTTF92ZXJzaW9uOworKwkJU1NMX3dhbnQ7CisrCQlTU0xfd3JpdGU7CisrCQlUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfbWV0aG9kOworKwkJVExTdjFfc2VydmVyX21ldGhvZDsKKysKKysKKysJCVNTTGVheTsKKysJCVNTTGVheV92ZXJzaW9uOworKwkJQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aDsKKysJCUFTTjFfSEVBREVSX2ZyZWU7CisrCQlBU04xX0hFQURFUl9uZXc7CisrCQlBU04xX0lBNVNUUklOR19hc24xX21ldGg7CisrCQlBU04xX0lOVEVHRVJfZ2V0OworKwkJQVNOMV9JTlRFR0VSX3NldDsKKysJCUFTTjFfSU5URUdFUl90b19CTjsKKysJCUFTTjFfT0JKRUNUX2NyZWF0ZTsKKysJCUFTTjFfT0JKRUNUX2ZyZWU7CisrCQlBU04xX09CSkVDVF9uZXc7CisrCQlBU04xX1BSSU5UQUJMRV90eXBlOworKwkJQVNOMV9TVFJJTkdfY21wOworKwkJQVNOMV9TVFJJTkdfZHVwOworKwkJQVNOMV9TVFJJTkdfZnJlZTsKKysJCUFTTjFfU1RSSU5HX25ldzsKKysJCUFTTjFfU1RSSU5HX3ByaW50OworKwkJQVNOMV9TVFJJTkdfc2V0OworKwkJQVNOMV9TVFJJTkdfdHlwZV9uZXc7CisrCQlBU04xX1RZUEVfZnJlZTsKKysJCUFTTjFfVFlQRV9uZXc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfY2hlY2s7CisrCQlBU04xX1VUQ1RJTUVfcHJpbnQ7CisrCQlBU04xX1VUQ1RJTUVfc2V0OworKwkJQVNOMV9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlBU04xX2QyaV9iaW87CisrCQlBU04xX2QyaV9mcDsKKysJCUFTTjFfZGlnZXN0OworKwkJQVNOMV9kdXA7CisrCQlBU04xX2dldF9vYmplY3Q7CisrCQlBU04xX2kyZF9iaW87CisrCQlBU04xX2kyZF9mcDsKKysJCUFTTjFfb2JqZWN0X3NpemU7CisrCQlBU04xX3BhcnNlOworKwkJQVNOMV9wdXRfb2JqZWN0OworKwkJQVNOMV9zaWduOworKwkJQVNOMV92ZXJpZnk7CisrCQlCRl9jYmNfZW5jcnlwdDsKKysJCUJGX2NmYjY0X2VuY3J5cHQ7CisrCQlCRl9lY2JfZW5jcnlwdDsKKysJCUJGX2VuY3J5cHQ7CisrCQlCRl9vZmI2NF9lbmNyeXB0OworKwkJQkZfb3B0aW9uczsKKysJCUJGX3NldF9rZXk7CisrCQlCSU9fQ09OTkVDVF9mcmVlOworKwkJQklPX0NPTk5FQ1RfbmV3OworKwkJQklPX2FjY2VwdDsKKysJCUJJT19jdHJsOworKwkJQklPX2ludF9jdHJsOworKwkJQklPX2RlYnVnX2NhbGxiYWNrOworKwkJQklPX2R1bXA7CisrCQlCSU9fZHVwX2NoYWluOworKwkJQklPX2ZfYmFzZTY0OworKwkJQklPX2ZfYnVmZmVyOworKwkJQklPX2ZfY2lwaGVyOworKwkJQklPX2ZfbWQ7CisrCQlCSU9fZl9udWxsOworKwkJQklPX2ZfcHJveHlfc2VydmVyOworKwkJQklPX2ZkX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19mZF9zaG91bGRfcmV0cnk7CisrCQlCSU9fZmluZF90eXBlOworKwkJQklPX2ZyZWU7CisrCQlCSU9fZnJlZV9hbGw7CisrCQlCSU9fZ2V0X2FjY2VwdF9zb2NrZXQ7CisrCQlCSU9fZ2V0X2ZpbHRlcl9iaW87CisrCQlCSU9fZ2V0X2hvc3RfaXA7CisrCQlCSU9fZ2V0X3BvcnQ7CisrCQlCSU9fZ2V0X3JldHJ5X0JJTzsKKysJCUJJT19nZXRfcmV0cnlfcmVhc29uOworKwkJQklPX2dldGhvc3RieW5hbWU7CisrCQlCSU9fZ2V0czsKKysJCUJJT19uZXc7CisrCQlCSU9fbmV3X2FjY2VwdDsKKysJCUJJT19uZXdfY29ubmVjdDsKKysJCUJJT19uZXdfZmQ7CisrCQlCSU9fbmV3X2ZpbGU7CisrCQlCSU9fbmV3X2ZwOworKwkJQklPX25ld19zb2NrZXQ7CisrCQlCSU9fcG9wOworKwkJQklPX3ByaW50ZjsKKysJCUJJT19wdXNoOworKwkJQklPX3B1dHM7CisrCQlCSU9fcmVhZDsKKysJCUJJT19zX2FjY2VwdDsKKysJCUJJT19zX2Nvbm5lY3Q7CisrCQlCSU9fc19mZDsKKysJCUJJT19zX2ZpbGU7CisrCQlCSU9fc19tZW07CisrCQlCSU9fc19udWxsOworKwkJQklPX3NfcHJveHlfY2xpZW50OworKwkJQklPX3Nfc29ja2V0OworKwkJQklPX3NldDsKKysJCUJJT19zZXRfY2lwaGVyOworKwkJQklPX3NldF90Y3BfbmRlbGF5OworKwkJQklPX3NvY2tfY2xlYW51cDsKKysJCUJJT19zb2NrX2Vycm9yOworKwkJQklPX3NvY2tfaW5pdDsKKysJCUJJT19zb2NrX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19zb2NrX3Nob3VsZF9yZXRyeTsKKysJCUJJT19zb2NrZXRfaW9jdGw7CisrCQlCSU9fd3JpdGU7CisrCQlCTl9DVFhfZnJlZTsKKysJCUJOX0NUWF9uZXc7CisrCQlCTl9NT05UX0NUWF9mcmVlOworKwkJQk5fTU9OVF9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfc2V0OworKwkJQk5fYWRkOworKwkJQk5fYWRkX3dvcmQ7CisrCQlCTl9oZXgyYm47CisrCQlCTl9iaW4yYm47CisrCQlCTl9ibjJoZXg7CisrCQlCTl9ibjJiaW47CisrCQlCTl9jbGVhcjsKKysJCUJOX2NsZWFyX2JpdDsKKysJCUJOX2NsZWFyX2ZyZWU7CisrCQlCTl9jbXA7CisrCQlCTl9jb3B5OworKwkJQk5fZGl2OworKwkJQk5fZGl2X3dvcmQ7CisrCQlCTl9kdXA7CisrCQlCTl9mcmVlOworKwkJQk5fZnJvbV9tb250Z29tZXJ5OworKwkJQk5fZ2NkOworKwkJQk5fZ2VuZXJhdGVfcHJpbWU7CisrCQlCTl9nZXRfd29yZDsKKysJCUJOX2lzX2JpdF9zZXQ7CisrCQlCTl9pc19wcmltZTsKKysJCUJOX2xzaGlmdDsKKysJCUJOX2xzaGlmdDE7CisrCQlCTl9tYXNrX2JpdHM7CisrCQlCTl9tb2Q7CisrCQlCTl9tb2RfZXhwOworKwkJQk5fbW9kX2V4cF9tb250OworKwkJQk5fbW9kX2V4cF9zaW1wbGU7CisrCQlCTl9tb2RfaW52ZXJzZTsKKysJCUJOX21vZF9tdWw7CisrCQlCTl9tb2RfbXVsX21vbnRnb21lcnk7CisrCQlCTl9tb2Rfd29yZDsKKysJCUJOX211bDsKKysJCUJOX25ldzsKKysJCUJOX251bV9iaXRzOworKwkJQk5fbnVtX2JpdHNfd29yZDsKKysJCUJOX29wdGlvbnM7CisrCQlCTl9wcmludDsKKysJCUJOX3ByaW50X2ZwOworKwkJQk5fcmFuZDsKKysJCUJOX3JlY2lwcm9jYWw7CisrCQlCTl9yc2hpZnQ7CisrCQlCTl9yc2hpZnQxOworKwkJQk5fc2V0X2JpdDsKKysJCUJOX3NldF93b3JkOworKwkJQk5fc3FyOworKwkJQk5fc3ViOworKwkJQk5fdG9fQVNOMV9JTlRFR0VSOworKwkJQk5fdWNtcDsKKysJCUJOX3ZhbHVlX29uZTsKKysJCUJVRl9NRU1fZnJlZTsKKysJCUJVRl9NRU1fZ3JvdzsKKysJCUJVRl9NRU1fbmV3OworKwkJQlVGX3N0cmR1cDsKKysJCUNPTkZfZnJlZTsKKysJCUNPTkZfZ2V0X251bWJlcjsKKysJCUNPTkZfZ2V0X3NlY3Rpb247CisrCQlDT05GX2dldF9zdHJpbmc7CisrCQlDT05GX2xvYWQ7CisrCQlDUllQVE9fYWRkX2xvY2s7CisrCQlDUllQVE9fZGJnX2ZyZWU7CisrCQlDUllQVE9fZGJnX21hbGxvYzsKKysJCUNSWVBUT19kYmdfcmVhbGxvYzsKKysJCUNSWVBUT19kYmdfcmVtYWxsb2M7CisrCQlDUllQVE9fZnJlZTsKKysJCUNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9sb2NrX25hbWU7CisrCQlDUllQVE9fZ2V0X2xvY2tpbmdfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbG9jazsKKysJCUNSWVBUT19tYWxsb2M7CisrCQlDUllQVE9fbWVtX2N0cmw7CisrCQlDUllQVE9fbWVtX2xlYWtzOworKwkJQ1JZUFRPX21lbV9sZWFrc19jYjsKKysJCUNSWVBUT19tZW1fbGVha3NfZnA7CisrCQlDUllQVE9fcmVhbGxvYzsKKysJCUNSWVBUT19yZW1hbGxvYzsKKysJCUNSWVBUT19zZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX3RocmVhZF9pZDsKKysJCURIX2NoZWNrOworKwkJREhfY29tcHV0ZV9rZXk7CisrCQlESF9mcmVlOworKwkJREhfZ2VuZXJhdGVfa2V5OworKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyczsKKysJCURIX25ldzsKKysJCURIX3NpemU7CisrCQlESHBhcmFtc19wcmludDsKKysJCURIcGFyYW1zX3ByaW50X2ZwOworKwkJRFNBX2ZyZWU7CisrCQlEU0FfZ2VuZXJhdGVfa2V5OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlEU0FfaXNfcHJpbWU7CisrCQlEU0FfbmV3OworKwkJRFNBX3ByaW50OworKwkJRFNBX3ByaW50X2ZwOworKwkJRFNBX3NpZ247CisrCQlEU0Ffc2lnbl9zZXR1cDsKKysJCURTQV9zaXplOworKwkJRFNBX3ZlcmlmeTsKKysJCURTQXBhcmFtc19wcmludDsKKysJCURTQXBhcmFtc19wcmludF9mcDsKKysJCUVSUl9jbGVhcl9lcnJvcjsKKysJCUVSUl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfZnJlZV9zdHJpbmdzOworKwkJRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2dldF9lcnJfc3RhdGVfdGFibGU7CisrCQlFUlJfZ2V0X2Vycm9yOworKwkJRVJSX2dldF9lcnJvcl9saW5lOworKwkJRVJSX2dldF9zdGF0ZTsKKysJCUVSUl9nZXRfc3RyaW5nX3RhYmxlOworKwkJRVJSX2xpYl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfbG9hZF9BU04xX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CSU9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0JOX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CVUZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0NPTkZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0RIX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9EU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX0VSUl9zdHJpbmdzOworKwkJRVJSX2xvYWRfRVZQX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9PQkpfc3RyaW5nczsKKysJCUVSUl9sb2FkX1BFTV9zdHJpbmdzOworKwkJRVJSX2xvYWRfUFJPWFlfc3RyaW5nczsKKysJCUVSUl9sb2FkX1JTQV9zdHJpbmdzOworKwkJRVJSX2xvYWRfWDUwOV9zdHJpbmdzOworKwkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9zdHJpbmdzOworKwkJRVJSX3BlZWtfZXJyb3I7CisrCQlFUlJfcGVla19lcnJvcl9saW5lOworKwkJRVJSX3ByaW50X2Vycm9yczsKKysJCUVSUl9wcmludF9lcnJvcnNfZnA7CisrCQlFUlJfcHV0X2Vycm9yOworKwkJRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfcmVtb3ZlX3N0YXRlOworKwkJRVZQX0J5dGVzVG9LZXk7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwOworKwkJRVZQX0NpcGhlckZpbmFsOworKwkJRVZQX0NpcGhlckluaXQ7CisrCQlFVlBfQ2lwaGVyVXBkYXRlOworKwkJRVZQX0RlY29kZUJsb2NrOworKwkJRVZQX0RlY29kZUZpbmFsOworKwkJRVZQX0RlY29kZUluaXQ7CisrCQlFVlBfRGVjb2RlVXBkYXRlOworKwkJRVZQX0RlY3J5cHRGaW5hbDsKKysJCUVWUF9EZWNyeXB0SW5pdDsKKysJCUVWUF9EZWNyeXB0VXBkYXRlOworKwkJRVZQX0RpZ2VzdEZpbmFsOworKwkJRVZQX0RpZ2VzdEluaXQ7CisrCQlFVlBfRGlnZXN0VXBkYXRlOworKwkJRVZQX0VuY29kZUJsb2NrOworKwkJRVZQX0VuY29kZUZpbmFsOworKwkJRVZQX0VuY29kZUluaXQ7CisrCQlFVlBfRW5jb2RlVXBkYXRlOworKwkJRVZQX0VuY3J5cHRGaW5hbDsKKysJCUVWUF9FbmNyeXB0SW5pdDsKKysJCUVWUF9FbmNyeXB0VXBkYXRlOworKwkJRVZQX09wZW5GaW5hbDsKKysJCUVWUF9PcGVuSW5pdDsKKysJCUVWUF9QS0VZX2Fzc2lnbjsKKysJCUVWUF9QS0VZX2NvcHlfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX2ZyZWU7CisrCQlFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9uZXc7CisrCQlFVlBfUEtFWV9zYXZlX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9zaXplOworKwkJRVZQX1BLRVlfdHlwZTsKKysJCUVWUF9TZWFsRmluYWw7CisrCQlFVlBfU2VhbEluaXQ7CisrCQlFVlBfU2lnbkZpbmFsOworKwkJRVZQX1ZlcmlmeUZpbmFsOworKwkJRVZQX2FkZF9hbGlhczsKKysJCUVWUF9hZGRfY2lwaGVyOworKwkJRVZQX2FkZF9kaWdlc3Q7CisrCQlFVlBfYmZfY2JjOworKwkJRVZQX2JmX2NmYjY0OworKwkJRVZQX2JmX2VjYjsKKysJCUVWUF9iZl9vZmI7CisrCQlFVlBfY2xlYW51cDsKKysJCUVWUF9kZXNfY2JjOworKwkJRVZQX2Rlc19jZmI2NDsKKysJCUVWUF9kZXNfZWNiOworKwkJRVZQX2Rlc19lZGU7CisrCQlFVlBfZGVzX2VkZTM7CisrCQlFVlBfZGVzX2VkZTNfY2JjOworKwkJRVZQX2Rlc19lZGUzX2NmYjY0OworKwkJRVZQX2Rlc19lZGUzX29mYjsKKysJCUVWUF9kZXNfZWRlX2NiYzsKKysJCUVWUF9kZXNfZWRlX2NmYjY0OworKwkJRVZQX2Rlc19lZGVfb2ZiOworKwkJRVZQX2Rlc19vZmI7CisrCQlFVlBfZGVzeF9jYmM7CisrCQlFVlBfZHNzOworKwkJRVZQX2RzczE7CisrCQlFVlBfZW5jX251bGw7CisrCQlFVlBfZ2V0X2NpcGhlcmJ5bmFtZTsKKysJCUVWUF9nZXRfZGlnZXN0YnluYW1lOworKwkJRVZQX2dldF9wd19wcm9tcHQ7CisrCQlFVlBfaWRlYV9jYmM7CisrCQlFVlBfaWRlYV9jZmI2NDsKKysJCUVWUF9pZGVhX2VjYjsKKysJCUVWUF9pZGVhX29mYjsKKysJCUVWUF9tZDI7CisrCQlFVlBfbWQ1OworKwkJRVZQX21kX251bGw7CisrCQlFVlBfcmMyX2NiYzsKKysJCUVWUF9yYzJfY2ZiNjQ7CisrCQlFVlBfcmMyX2VjYjsKKysJCUVWUF9yYzJfb2ZiOworKwkJRVZQX3JjNDsKKysJCUVWUF9yZWFkX3B3X3N0cmluZzsKKysJCUVWUF9zZXRfcHdfcHJvbXB0OworKwkJRVZQX3NoYTsKKysJCUVWUF9zaGExOworKwkJTUQyOworKwkJTUQyX0ZpbmFsOworKwkJTUQyX0luaXQ7CisrCQlNRDJfVXBkYXRlOworKwkJTUQyX29wdGlvbnM7CisrCQlNRDU7CisrCQlNRDVfRmluYWw7CisrCQlNRDVfSW5pdDsKKysJCU1ENV9VcGRhdGU7CisrCQlNREMyOworKwkJTURDMl9GaW5hbDsKKysJCU1EQzJfSW5pdDsKKysJCU1EQzJfVXBkYXRlOworKwkJTkVUU0NBUEVfU1BLQUNfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0FDX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0lfbmV3OworKwkJTkVUU0NBUEVfU1BLSV9zaWduOworKwkJTkVUU0NBUEVfU1BLSV92ZXJpZnk7CisrCQlPQkpfYWRkX29iamVjdDsKKysJCU9CSl9ic2VhcmNoOworKwkJT0JKX2NsZWFudXA7CisrCQlPQkpfY21wOworKwkJT0JKX2NyZWF0ZTsKKysJCU9CSl9kdXA7CisrCQlPQkpfbG4ybmlkOworKwkJT0JKX25ld19uaWQ7CisrCQlPQkpfbmlkMmxuOworKwkJT0JKX25pZDJvYmo7CisrCQlPQkpfbmlkMnNuOworKwkJT0JKX29iajJuaWQ7CisrCQlPQkpfc24ybmlkOworKwkJT0JKX3R4dDJuaWQ7CisrCQlQRU1fQVNOMV9yZWFkOworKwkJUEVNX0FTTjFfcmVhZF9iaW87CisrCQlQRU1fQVNOMV93cml0ZTsKKysJCVBFTV9BU04xX3dyaXRlX2JpbzsKKysJCVBFTV9TZWFsRmluYWw7CisrCQlQRU1fU2VhbEluaXQ7CisrCQlQRU1fU2VhbFVwZGF0ZTsKKysJCVBFTV9TaWduRmluYWw7CisrCQlQRU1fU2lnbkluaXQ7CisrCQlQRU1fU2lnblVwZGF0ZTsKKysJCVBFTV9YNTA5X0lORk9fcmVhZDsKKysJCVBFTV9YNTA5X0lORk9fcmVhZF9iaW87CisrCQlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbzsKKysJCVBFTV9kZWtfaW5mbzsKKysJCVBFTV9kb19oZWFkZXI7CisrCQlQRU1fZ2V0X0VWUF9DSVBIRVJfSU5GTzsKKysJCVBFTV9wcm9jX3R5cGU7CisrCQlQRU1fcmVhZDsKKysJCVBFTV9yZWFkX0RIcGFyYW1zOworKwkJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX1BLQ1M3OworKwkJUEVNX3JlYWRfUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9YNTA5OworKwkJUEVNX3JlYWRfWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9YNTA5X1JFUTsKKysJCVBFTV9yZWFkX2JpbzsKKysJCVBFTV9yZWFkX2Jpb19ESHBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19QS0NTNzsKKysJCVBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0NSTDsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X1JFUTsKKysJCVBFTV93cml0ZTsKKysJCVBFTV93cml0ZV9ESHBhcmFtczsKKysJCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX0RTQXBhcmFtczsKKysJCVBFTV93cml0ZV9QS0NTNzsKKysJCVBFTV93cml0ZV9Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfWDUwOTsKKysJCVBFTV93cml0ZV9YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9YNTA5X1JFUTsKKysJCVBFTV93cml0ZV9iaW87CisrCQlQRU1fd3JpdGVfYmlvX0RIcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3OworKwkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVE7CisrCQlQS0NTN19ESUdFU1RfZnJlZTsKKysJCVBLQ1M3X0RJR0VTVF9uZXc7CisrCQlQS0NTN19FTkNSWVBUX2ZyZWU7CisrCQlQS0NTN19FTkNSWVBUX25ldzsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2ZyZWU7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9uZXc7CisrCQlQS0NTN19FTlZFTE9QRV9mcmVlOworKwkJUEtDUzdfRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZnJlZTsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX25ldzsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fbmV3OworKwkJUEtDUzdfU0lHTkVEX2ZyZWU7CisrCQlQS0NTN19TSUdORURfbmV3OworKwkJUEtDUzdfU0lHTkVSX0lORk9fZnJlZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfZHVwOworKwkJUEtDUzdfZnJlZTsKKysJCVBLQ1M3X25ldzsKKysJCVBST1hZX0VOVFJZX2FkZF9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2ZyZWU7CisrCQlQUk9YWV9FTlRSWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX25ldzsKKysJCVBST1hZX0VOVFJZX3NldF9zZXJ2ZXI7CisrCQlQUk9YWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX2FkZF9zZXJ2ZXI7CisrCQlQUk9YWV9jaGVja19ieV9ob3N0OworKwkJUFJPWFlfY2hlY2tfdXJsOworKwkJUFJPWFlfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX2ZyZWU7CisrCQlQUk9YWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX2dldF9wcm94aWVzOworKwkJUFJPWFlfZ2V0X3Byb3h5X2VudHJ5OworKwkJUFJPWFlfbG9hZF9jb25mOworKwkJUFJPWFlfbmV3OworKwkJUFJPWFlfcHJpbnQ7CisrCQlSQU5EX2J5dGVzOworKwkJUkFORF9jbGVhbnVwOworKwkJUkFORF9maWxlX25hbWU7CisrCQlSQU5EX2xvYWRfZmlsZTsKKysJCVJBTkRfc2NyZWVuOworKwkJUkFORF9zZWVkOworKwkJUkFORF93cml0ZV9maWxlOworKwkJUkMyX2NiY19lbmNyeXB0OworKwkJUkMyX2NmYjY0X2VuY3J5cHQ7CisrCQlSQzJfZWNiX2VuY3J5cHQ7CisrCQlSQzJfZW5jcnlwdDsKKysJCVJDMl9vZmI2NF9lbmNyeXB0OworKwkJUkMyX3NldF9rZXk7CisrCQlSQzQ7CisrCQlSQzRfb3B0aW9uczsKKysJCVJDNF9zZXRfa2V5OworKwkJUlNBUHJpdmF0ZUtleV9hc24xX21ldGg7CisrCQlSU0FQcml2YXRlS2V5X2R1cDsKKysJCVJTQVB1YmxpY0tleV9kdXA7CisrCQlSU0FfUEtDUzFfU1NMZWF5OworKwkJUlNBX2ZyZWU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5OworKwkJUlNBX25ldzsKKysJCVJTQV9uZXdfbWV0aG9kOworKwkJUlNBX3ByaW50OworKwkJUlNBX3ByaW50X2ZwOworKwkJUlNBX3ByaXZhdGVfZGVjcnlwdDsKKysJCVJTQV9wcml2YXRlX2VuY3J5cHQ7CisrCQlSU0FfcHVibGljX2RlY3J5cHQ7CisrCQlSU0FfcHVibGljX2VuY3J5cHQ7CisrCQlSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUlNBX3NpZ247CisrCQlSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORzsKKysJCVJTQV9zaXplOworKwkJUlNBX3ZlcmlmeTsKKysJCVJTQV92ZXJpZnlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlTSEE7CisrCQlTSEExOworKwkJU0hBMV9GaW5hbDsKKysJCVNIQTFfSW5pdDsKKysJCVNIQTFfVXBkYXRlOworKwkJU0hBX0ZpbmFsOworKwkJU0hBX0luaXQ7CisrCQlTSEFfVXBkYXRlOworKwkJT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXM7CisrCQlPcGVuU1NMX2FkZF9hbGxfY2lwaGVyczsKKysJCU9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzOworKwkJVFhUX0RCX2NyZWF0ZV9pbmRleDsKKysJCVRYVF9EQl9mcmVlOworKwkJVFhUX0RCX2dldF9ieV9pbmRleDsKKysJCVRYVF9EQl9pbnNlcnQ7CisrCQlUWFRfREJfcmVhZDsKKysJCVRYVF9EQl93cml0ZTsKKysJCVg1MDlfQUxHT1JfZnJlZTsKKysJCVg1MDlfQUxHT1JfbmV3OworKwkJWDUwOV9BVFRSSUJVVEVfZnJlZTsKKysJCVg1MDlfQVRUUklCVVRFX25ldzsKKysJCVg1MDlfQ0lORl9mcmVlOworKwkJWDUwOV9DSU5GX25ldzsKKysJCVg1MDlfQ1JMX0lORk9fZnJlZTsKKysJCVg1MDlfQ1JMX0lORk9fbmV3OworKwkJWDUwOV9DUkxfYWRkX2V4dDsKKysJCVg1MDlfQ1JMX2NtcDsKKysJCVg1MDlfQ1JMX2RlbGV0ZV9leHQ7CisrCQlYNTA5X0NSTF9kdXA7CisrCQlYNTA5X0NSTF9mcmVlOworKwkJWDUwOV9DUkxfZ2V0X2V4dDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfTklEOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfQ1JMX25ldzsKKysJCVg1MDlfQ1JMX3NpZ247CisrCQlYNTA5X0NSTF92ZXJpZnk7CisrCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfRVhURU5TSU9OX2R1cDsKKysJCVg1MDlfRVhURU5TSU9OX2ZyZWU7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9vYmplY3Q7CisrCQlYNTA5X0VYVEVOU0lPTl9uZXc7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9vYmplY3Q7CisrCQlYNTA5X0lORk9fZnJlZTsKKysJCVg1MDlfSU5GT19uZXc7CisrCQlYNTA5X0xPT0tVUF9ieV9hbGlhczsKKysJCVg1MDlfTE9PS1VQX2J5X2ZpbmdlcnByaW50OworKwkJWDUwOV9MT09LVVBfYnlfaXNzdWVyX3NlcmlhbDsKKysJCVg1MDlfTE9PS1VQX2J5X3N1YmplY3Q7CisrCQlYNTA5X0xPT0tVUF9jdHJsOworKwkJWDUwOV9MT09LVVBfZmlsZTsKKysJCVg1MDlfTE9PS1VQX2ZyZWU7CisrCQlYNTA5X0xPT0tVUF9oYXNoX2RpcjsKKysJCVg1MDlfTE9PS1VQX2luaXQ7CisrCQlYNTA5X0xPT0tVUF9uZXc7CisrCQlYNTA5X0xPT0tVUF9zaHV0ZG93bjsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X05BTUVfRU5UUllfZHVwOworKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWU7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9FTlRSWV9uZXc7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnk7CisrCQlYNTA5X05BTUVfY21wOworKwkJWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeTsKKysJCVg1MDlfTkFNRV9kaWdlc3Q7CisrCQlYNTA5X05BTUVfZHVwOworKwkJWDUwOV9OQU1FX2VudHJ5X2NvdW50OworKwkJWDUwOV9OQU1FX2ZyZWU7CisrCQlYNTA5X05BTUVfZ2V0X2VudHJ5OworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSjsKKysJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfT0JKOworKwkJWDUwOV9OQU1FX2hhc2g7CisrCQlYNTA5X05BTUVfbmV3OworKwkJWDUwOV9OQU1FX29uZWxpbmU7CisrCQlYNTA5X05BTUVfcHJpbnQ7CisrCQlYNTA5X05BTUVfc2V0OworKwkJWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50czsKKysJCVg1MDlfT0JKRUNUX3JldHJpZXZlX2J5X3N1YmplY3Q7CisrCQlYNTA5X09CSkVDVF91cF9yZWZfY291bnQ7CisrCQlYNTA5X1BLRVlfZnJlZTsKKysJCVg1MDlfUEtFWV9uZXc7CisrCQlYNTA5X1BVQktFWV9mcmVlOworKwkJWDUwOV9QVUJLRVlfZ2V0OworKwkJWDUwOV9QVUJLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfc2V0OworKwkJWDUwOV9SRVFfSU5GT19mcmVlOworKwkJWDUwOV9SRVFfSU5GT19uZXc7CisrCQlYNTA5X1JFUV9kdXA7CisrCQlYNTA5X1JFUV9mcmVlOworKwkJWDUwOV9SRVFfZ2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX25ldzsKKysJCVg1MDlfUkVRX3ByaW50OworKwkJWDUwOV9SRVFfcHJpbnRfZnA7CisrCQlYNTA5X1JFUV9zZXRfcHVia2V5OworKwkJWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfUkVRX3NldF92ZXJzaW9uOworKwkJWDUwOV9SRVFfc2lnbjsKKysJCVg1MDlfUkVRX3RvX1g1MDk7CisrCQlYNTA5X1JFUV92ZXJpZnk7CisrCQlYNTA5X1JFVk9LRURfYWRkX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9kZWxldGVfZXh0OworKwkJWDUwOV9SRVZPS0VEX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfY291bnQ7CisrCQlYNTA5X1JFVk9LRURfbmV3OworKwkJWDUwOV9TSUdfZnJlZTsKKysJCVg1MDlfU0lHX25ldzsKKysJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXA7CisrCQlYNTA5X1NUT1JFX0NUWF9pbml0OworKwkJWDUwOV9TVE9SRV9hZGRfY2VydDsKKysJCVg1MDlfU1RPUkVfYWRkX2xvb2t1cDsKKysJCVg1MDlfU1RPUkVfZnJlZTsKKysJCVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Q7CisrCQlYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zOworKwkJWDUwOV9TVE9SRV9uZXc7CisrCQlYNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzOworKwkJWDUwOV9WQUxfZnJlZTsKKysJCVg1MDlfVkFMX25ldzsKKysJCVg1MDlfYWRkX2V4dDsKKysJCVg1MDlfYXNuMV9tZXRoOworKwkJWDUwOV9jZXJ0aWZpY2F0ZV90eXBlOworKwkJWDUwOV9jaGVja19wcml2YXRlX2tleTsKKysJCVg1MDlfY21wX2N1cnJlbnRfdGltZTsKKysJCVg1MDlfZGVsZXRlX2V4dDsKKysJCVg1MDlfZGlnZXN0OworKwkJWDUwOV9kdXA7CisrCQlYNTA5X2ZyZWU7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfYXJlYTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXI7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52OworKwkJWDUwOV9nZXRfZGVmYXVsdF9wcml2YXRlX2RpcjsKKysJCVg1MDlfZ2V0X2V4dDsKKysJCVg1MDlfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9nZXRfaXNzdWVyX25hbWU7CisrCQlYNTA5X2dldF9wdWJrZXk7CisrCQlYNTA5X2dldF9wdWJrZXlfcGFyYW1ldGVyczsKKysJCVg1MDlfZ2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfZ210aW1lX2FkajsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfY21wOworKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXNoOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9jbXA7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2g7CisrCQlYNTA5X2xvYWRfY2VydF9maWxlOworKwkJWDUwOV9uZXc7CisrCQlYNTA5X3ByaW50OworKwkJWDUwOV9wcmludF9mcDsKKysJCVg1MDlfc2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9zZXRfbm90QWZ0ZXI7CisrCQlYNTA5X3NldF9ub3RCZWZvcmU7CisrCQlYNTA5X3NldF9wdWJrZXk7CisrCQlYNTA5X3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X3NldF92ZXJzaW9uOworKwkJWDUwOV9zaWduOworKwkJWDUwOV9zdWJqZWN0X25hbWVfY21wOworKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaDsKKysJCVg1MDlfdG9fWDUwOV9SRVE7CisrCQlYNTA5X3ZlcmlmeTsKKysJCVg1MDlfdmVyaWZ5X2NlcnQ7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZzsKKysJCVg1MDl2M19hZGRfZXh0OworKwkJWDUwOXYzX2FkZF9leHRlbnNpb247CisrCQlYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfY2xlYW51cF9leHRlbnNpb25zOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfZGF0YV90eXBlX2J5X09CSjsKKysJCVg1MDl2M19kZWxldGVfZXh0OworKwkJWDUwOXYzX2dldF9leHQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDl2M19nZXRfZXh0X2NvdW50OworKwkJWDUwOXYzX3BhY2tfc3RyaW5nOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfcGFja190eXBlX2J5X09CSjsKKysJCVg1MDl2M191bnBhY2tfc3RyaW5nOworKwkJX2Rlc19jcnlwdDsKKysJCWEyZF9BU04xX09CSkVDVDsKKysJCWEyaV9BU04xX0lOVEVHRVI7CisrCQlhMmlfQVNOMV9TVFJJTkc7CisrCQlhc24xX0ZpbmlzaDsKKysJCWFzbjFfR2V0U2VxdWVuY2U7CisrCQlibl9kaXZfd29yZHM7CisrCQlibl9leHBhbmQyOworKwkJYm5fbXVsX2FkZF93b3JkczsKKysJCWJuX211bF93b3JkczsKKysJCUJOX3VhZGQ7CisrCQlCTl91c3ViOworKwkJYm5fc3FyX3dvcmRzOworKwkJX29zc2xfb2xkX2NyeXB0OworKwkJZDJpX0FTTjFfQklUX1NUUklORzsKKysJCWQyaV9BU04xX0JPT0xFQU47CisrCQlkMmlfQVNOMV9IRUFERVI7CisrCQlkMmlfQVNOMV9JQTVTVFJJTkc7CisrCQlkMmlfQVNOMV9JTlRFR0VSOworKwkJZDJpX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFU1RSSU5HOworKwkJZDJpX0FTTjFfU0VUOworKwkJZDJpX0FTTjFfVDYxU1RSSU5HOworKwkJZDJpX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1VUQ1RJTUU7CisrCQlkMmlfQVNOMV9ieXRlczsKKysJCWQyaV9BU04xX3R5cGVfYnl0ZXM7CisrCQlkMmlfREhwYXJhbXM7CisrCQlkMmlfRFNBUHJpdmF0ZUtleTsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX0RTQVB1YmxpY0tleTsKKysJCWQyaV9EU0FwYXJhbXM7CisrCQlkMmlfTkVUU0NBUEVfU1BLQUM7CisrCQlkMmlfTkVUU0NBUEVfU1BLSTsKKysJCWQyaV9OZXRzY2FwZV9SU0E7CisrCQlkMmlfUEtDUzc7CisrCQlkMmlfUEtDUzdfRElHRVNUOworKwkJZDJpX1BLQ1M3X0VOQ1JZUFQ7CisrCQlkMmlfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlkMmlfUEtDUzdfRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlkMmlfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWQyaV9QS0NTN19TSUdORUQ7CisrCQlkMmlfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWQyaV9QS0NTN19iaW87CisrCQlkMmlfUEtDUzdfZnA7CisrCQlkMmlfUHJpdmF0ZUtleTsKKysJCWQyaV9QdWJsaWNLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleTsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX1JTQVB1YmxpY0tleTsKKysJCWQyaV9YNTA5OworKwkJZDJpX1g1MDlfQUxHT1I7CisrCQlkMmlfWDUwOV9BVFRSSUJVVEU7CisrCQlkMmlfWDUwOV9DSU5GOworKwkJZDJpX1g1MDlfQ1JMOworKwkJZDJpX1g1MDlfQ1JMX0lORk87CisrCQlkMmlfWDUwOV9DUkxfYmlvOworKwkJZDJpX1g1MDlfQ1JMX2ZwOworKwkJZDJpX1g1MDlfRVhURU5TSU9OOworKwkJZDJpX1g1MDlfTkFNRTsKKysJCWQyaV9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfWDUwOV9QS0VZOworKwkJZDJpX1g1MDlfUFVCS0VZOworKwkJZDJpX1g1MDlfUkVROworKwkJZDJpX1g1MDlfUkVRX0lORk87CisrCQlkMmlfWDUwOV9SRVFfYmlvOworKwkJZDJpX1g1MDlfUkVRX2ZwOworKwkJZDJpX1g1MDlfUkVWT0tFRDsKKysJCWQyaV9YNTA5X1NJRzsKKysJCWQyaV9YNTA5X1ZBTDsKKysJCWQyaV9YNTA5X2JpbzsKKysJCWQyaV9YNTA5X2ZwOworKwkJREVTX2NiY19ja3N1bTsKKysJCURFU19jYmNfZW5jcnlwdDsKKysJCURFU19jYmxvY2tfcHJpbnRfZmlsZTsKKysJCURFU19jZmI2NF9lbmNyeXB0OworKwkJREVTX2NmYl9lbmNyeXB0OworKwkJREVTX2RlY3J5cHQzOworKwkJREVTX2VjYjNfZW5jcnlwdDsKKysJCURFU19lY2JfZW5jcnlwdDsKKysJCURFU19lZGUzX2NiY19lbmNyeXB0OworKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfZW5jX3JlYWQ7CisrCQlERVNfZW5jX3dyaXRlOworKwkJREVTX2VuY3J5cHQxOworKwkJREVTX2VuY3J5cHQyOworKwkJREVTX2VuY3J5cHQzOworKwkJREVTX2ZjcnlwdDsKKysJCURFU19pc193ZWFrX2tleTsKKysJCURFU19rZXlfc2NoZWQ7CisrCQlERVNfbmNiY19lbmNyeXB0OworKwkJREVTX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfb2ZiX2VuY3J5cHQ7CisrCQlERVNfb3B0aW9uczsKKysJCURFU19wY2JjX2VuY3J5cHQ7CisrCQlERVNfcXVhZF9ja3N1bTsKKysJCURFU19yYW5kb21fa2V5OworKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fc2VlZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF8ycGFzc3dvcmRzOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3Bhc3N3b3JkOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3OworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3X3N0cmluZzsKKysJCURFU19zZXRfa2V5OworKwkJREVTX3NldF9vZGRfcGFyaXR5OworKwkJREVTX3N0cmluZ190b18ya2V5czsKKysJCURFU19zdHJpbmdfdG9fa2V5OworKwkJREVTX3hjYmNfZW5jcnlwdDsKKysJCURFU194d2hpdGVfaW4yb3V0OworKwkJZmNyeXB0X2JvZHk7CisrCQlpMmFfQVNOMV9JTlRFR0VSOworKwkJaTJhX0FTTjFfT0JKRUNUOworKwkJaTJhX0FTTjFfU1RSSU5HOworKwkJaTJkX0FTTjFfQklUX1NUUklORzsKKysJCWkyZF9BU04xX0JPT0xFQU47CisrCQlpMmRfQVNOMV9IRUFERVI7CisrCQlpMmRfQVNOMV9JQTVTVFJJTkc7CisrCQlpMmRfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfT0JKRUNUOworKwkJaTJkX0FTTjFfT0NURVRfU1RSSU5HOworKwkJaTJkX0FTTjFfUFJJTlRBQkxFOworKwkJaTJkX0FTTjFfU0VUOworKwkJaTJkX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1VUQ1RJTUU7CisrCQlpMmRfQVNOMV9ieXRlczsKKysJCWkyZF9ESHBhcmFtczsKKysJCWkyZF9EU0FQcml2YXRlS2V5OworKwkJaTJkX0RTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX0RTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfRFNBUHVibGljS2V5OworKwkJaTJkX0RTQXBhcmFtczsKKysJCWkyZF9ORVRTQ0FQRV9TUEtBQzsKKysJCWkyZF9ORVRTQ0FQRV9TUEtJOworKwkJaTJkX05ldHNjYXBlX1JTQTsKKysJCWkyZF9QS0NTNzsKKysJCWkyZF9QS0NTN19ESUdFU1Q7CisrCQlpMmRfUEtDUzdfRU5DUllQVDsKKysJCWkyZF9QS0NTN19FTkNfQ09OVEVOVDsKKysJCWkyZF9QS0NTN19FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKKysJCWkyZF9QS0NTN19SRUNJUF9JTkZPOworKwkJaTJkX1BLQ1M3X1NJR05FRDsKKysJCWkyZF9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdOX0VOVkVMT1BFOworKwkJaTJkX1BLQ1M3X2JpbzsKKysJCWkyZF9QS0NTN19mcDsKKysJCWkyZF9Qcml2YXRlS2V5OworKwkJaTJkX1B1YmxpY0tleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5OworKwkJaTJkX1JTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX1JTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5OworKwkJaTJkX1g1MDk7CisrCQlpMmRfWDUwOV9BTEdPUjsKKysJCWkyZF9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9YNTA5X0NJTkY7CisrCQlpMmRfWDUwOV9DUkw7CisrCQlpMmRfWDUwOV9DUkxfSU5GTzsKKysJCWkyZF9YNTA5X0NSTF9iaW87CisrCQlpMmRfWDUwOV9DUkxfZnA7CisrCQlpMmRfWDUwOV9FWFRFTlNJT047CisrCQlpMmRfWDUwOV9OQU1FOworKwkJaTJkX1g1MDlfTkFNRV9FTlRSWTsKKysJCWkyZF9YNTA5X1BLRVk7CisrCQlpMmRfWDUwOV9QVUJLRVk7CisrCQlpMmRfWDUwOV9SRVE7CisrCQlpMmRfWDUwOV9SRVFfSU5GTzsKKysJCWkyZF9YNTA5X1JFUV9iaW87CisrCQlpMmRfWDUwOV9SRVFfZnA7CisrCQlpMmRfWDUwOV9SRVZPS0VEOworKwkJaTJkX1g1MDlfU0lHOworKwkJaTJkX1g1MDlfVkFMOworKwkJaTJkX1g1MDlfYmlvOworKwkJaTJkX1g1MDlfZnA7CisrCQlpZGVhX2NiY19lbmNyeXB0OworKwkJaWRlYV9jZmI2NF9lbmNyeXB0OworKwkJaWRlYV9lY2JfZW5jcnlwdDsKKysJCWlkZWFfZW5jcnlwdDsKKysJCWlkZWFfb2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfb3B0aW9uczsKKysJCWlkZWFfc2V0X2RlY3J5cHRfa2V5OworKwkJaWRlYV9zZXRfZW5jcnlwdF9rZXk7CisrCQlsaF9kZWxldGU7CisrCQlsaF9kb2FsbDsKKysJCWxoX2RvYWxsX2FyZzsKKysJCWxoX2ZyZWU7CisrCQlsaF9pbnNlcnQ7CisrCQlsaF9uZXc7CisrCQlsaF9ub2RlX3N0YXRzOworKwkJbGhfbm9kZV9zdGF0c19iaW87CisrCQlsaF9ub2RlX3VzYWdlX3N0YXRzOworKwkJbGhfbm9kZV91c2FnZV9zdGF0c19iaW87CisrCQlsaF9yZXRyaWV2ZTsKKysJCWxoX3N0YXRzOworKwkJbGhfc3RhdHNfYmlvOworKwkJbGhfc3RyaGFzaDsKKysJCXNrX2RlbGV0ZTsKKysJCXNrX2RlbGV0ZV9wdHI7CisrCQlza19kdXA7CisrCQlza19maW5kOworKwkJc2tfZnJlZTsKKysJCXNrX2luc2VydDsKKysJCXNrX25ldzsKKysJCXNrX3BvcDsKKysJCXNrX3BvcF9mcmVlOworKwkJc2tfcHVzaDsKKysJCXNrX3NldF9jbXBfZnVuYzsKKysJCXNrX3NoaWZ0OworKwkJc2tfdW5zaGlmdDsKKysJCXNrX3plcm87CisrCQlCSU9fZl9uYmlvX3Rlc3Q7CisrCQlBU04xX1RZUEVfZ2V0OworKwkJQVNOMV9UWVBFX3NldDsKKysJCVBLQ1M3X2NvbnRlbnRfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1M3X3N0cmluZ3M7CisrCQlYNTA5X2ZpbmRfYnlfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlYNTA5X2ZpbmRfYnlfc3ViamVjdDsKKysJCVBLQ1M3X2N0cmw7CisrCQlQS0NTN19zZXRfdHlwZTsKKysJCVBLQ1M3X3NldF9jb250ZW50OworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3NpZ25lcjsKKysJCVBLQ1M3X2FkZF9jZXJ0aWZpY2F0ZTsKKysJCVBLQ1M3X2FkZF9jcmw7CisrCQlQS0NTN19jb250ZW50X25ldzsKKysJCVBLQ1M3X2RhdGFTaWduOworKwkJUEtDUzdfZGF0YVZlcmlmeTsKKysJCVBLQ1M3X2RhdGFJbml0OworKwkJUEtDUzdfYWRkX3NpZ25hdHVyZTsKKysJCVBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbzsKKysJCVBLQ1M3X2dldF9zaWduZXJfaW5mbzsKKysJCUVWUF9kZWxldGVfYWxpYXM7CisrCQlFVlBfbWRjMjsKKysJCVBFTV9yZWFkX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfYmlvOworKwkJaTJkX1JTQVB1YmxpY0tleV9iaW87CisrCQlQRU1fcmVhZF9SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfUlNBUHVibGljS2V5OworKwkJZDJpX1JTQVB1YmxpY0tleV9mcDsKKysJCWkyZF9SU0FQdWJsaWNLZXlfZnA7CisrCQlCSU9fY29weV9uZXh0X3JldHJ5OworKwkJUlNBX2ZsYWdzOworKwkJWDUwOV9TVE9SRV9hZGRfY3JsOworKwkJWDUwOV9sb2FkX2NybF9maWxlOworKwkJRVZQX3JjMl80MF9jYmM7CisrCQlFVlBfcmM0XzQwOworKwkJRVZQX0NJUEhFUl9DVFhfaW5pdDsKKysJCUhNQUM7CisrCQlITUFDX0luaXQ7CisrCQlITUFDX1VwZGF0ZTsKKysJCUhNQUNfRmluYWw7CisrCQlFUlJfZ2V0X25leHRfZXJyb3JfbGlicmFyeTsKKysJCUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzOworKwkJSE1BQ19jbGVhbnVwOworKwkJQklPX3B0cl9jdHJsOworKwkJQklPX25ld19maWxlX2ludGVybmFsOworKwkJQklPX25ld19mcF9pbnRlcm5hbDsKKysJCUJJT19zX2ZpbGVfaW50ZXJuYWw7CisrCQlCTl9CTElORElOR19jb252ZXJ0OworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0OworKwkJQk5fQkxJTkRJTkdfdXBkYXRlOworKwkJUlNBX2JsaW5kaW5nX29uOworKwkJUlNBX2JsaW5kaW5nX29mZjsKKysJCWkydF9BU04xX09CSkVDVDsKKysJCUJOX0JMSU5ESU5HX25ldzsKKysJCUJOX0JMSU5ESU5HX2ZyZWU7CisrCQlFVlBfY2FzdDVfY2JjOworKwkJRVZQX2Nhc3Q1X2NmYjY0OworKwkJRVZQX2Nhc3Q1X2VjYjsKKysJCUVWUF9jYXN0NV9vZmI7CisrCQlCRl9kZWNyeXB0OworKwkJQ0FTVF9zZXRfa2V5OworKwkJQ0FTVF9lbmNyeXB0OworKwkJQ0FTVF9kZWNyeXB0OworKwkJQ0FTVF9lY2JfZW5jcnlwdDsKKysJCUNBU1RfY2JjX2VuY3J5cHQ7CisrCQlDQVNUX2NmYjY0X2VuY3J5cHQ7CisrCQlDQVNUX29mYjY0X2VuY3J5cHQ7CisrCQlSQzJfZGVjcnlwdDsKKysJCU9CSl9jcmVhdGVfb2JqZWN0czsKKysJCUJOX2V4cDsKKysJCUJOX211bF93b3JkOworKwkJQk5fc3ViX3dvcmQ7CisrCQlCTl9kZWMyYm47CisrCQlCTl9ibjJkZWM7CisrCQlCSU9fZ2hibl9jdHJsOworKwkJQ1JZUFRPX2ZyZWVfZXhfZGF0YTsKKysJCUNSWVBUT19nZXRfZXhfZGF0YTsKKysJCUNSWVBUT19zZXRfZXhfZGF0YTsKKysJCUVSUl9sb2FkX0NSWVBUT19zdHJpbmdzOworKwkJRVJSX2xvYWRfQ1JZUFRPbGliX3N0cmluZ3M7CisrCQlFVlBfUEtFWV9iaXRzOworKwkJTUQ1X1RyYW5zZm9ybTsKKysJCVNIQTFfVHJhbnNmb3JtOworKwkJU0hBX1RyYW5zZm9ybTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQ7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NoYWluOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGE7CisrCQlDUllQVE9fZHVwX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X25ld19sb2NraWQ7CisrCQlDUllQVE9fbmV3X2V4X2RhdGE7CisrCQlSU0Ffc2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfYWRkX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2FkZF9ub25lOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfU1NMdjIzOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfbm9uZTsKKysJCWJuX2FkZF93b3JkczsKKysJCWQyaV9OZXRzY2FwZV9SU0FfMjsKKysJCUNSWVBUT19nZXRfZXhfbmV3X2luZGV4OworKwkJUklQRU1EMTYwX0luaXQ7CisrCQlSSVBFTUQxNjBfVXBkYXRlOworKwkJUklQRU1EMTYwX0ZpbmFsOworKwkJUklQRU1EMTYwOworKwkJUklQRU1EMTYwX1RyYW5zZm9ybTsKKysJCVJDNV8zMl9zZXRfa2V5OworKwkJUkM1XzMyX2VjYl9lbmNyeXB0OworKwkJUkM1XzMyX2VuY3J5cHQ7CisrCQlSQzVfMzJfZGVjcnlwdDsKKysJCVJDNV8zMl9jYmNfZW5jcnlwdDsKKysJCVJDNV8zMl9jZmI2NF9lbmNyeXB0OworKwkJUkM1XzMyX29mYjY0X2VuY3J5cHQ7CisrCQlCTl9ibjJtcGk7CisrCQlCTl9tcGkyYm47CisrCQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdDsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYml0OworKwkJQklPX2dldF9leF9kYXRhOworKwkJQklPX2dldF9leF9uZXdfaW5kZXg7CisrCQlCSU9fc2V0X2V4X2RhdGE7CisrCQlYNTA5djNfZ2V0X2tleV91c2FnZTsKKysJCVg1MDl2M19zZXRfa2V5X3VzYWdlOworKwkJYTJpX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlpMmFfWDUwOXYzX2tleV91c2FnZTsKKysJCUVWUF9QS0VZX2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0OworKwkJUEtDUzdfUkVDSVBfSU5GT19zZXQ7CisrCQlQS0NTN19hZGRfcmVjaXBpZW50OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvOworKwkJUEtDUzdfc2V0X2NpcGhlcjsKKysJCUFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nOworKwkJRVJSX2FkZF9lcnJvcl9kYXRhOworKwkJRVJSX3NldF9lcnJvcl9kYXRhOworKwkJRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtOworKwkJRVZQX0NJUEhFUl9wYXJhbV90b19hc24xOworKwkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdjsKKysJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXY7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NiYzsKKysJCUVWUF9yYzVfMzJfMTJfMTZfY2ZiNjQ7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2VjYjsKKysJCUVWUF9yYzVfMzJfMTJfMTZfb2ZiOworKwkJYXNuMV9hZGRfZXJyb3I7CisrCQlkMmlfQVNOMV9CTVBTVFJJTkc7CisrCQlpMmRfQVNOMV9CTVBTVFJJTkc7CisrCQlCSU9fZl9iZXI7CisrCQlCTl9pbml0OworKwkJQ09NUF9DVFhfbmV3OworKwkJQ09NUF9DVFhfZnJlZTsKKysJCUNPTVBfQ1RYX2NvbXByZXNzX2Jsb2NrOworKwkJQ09NUF9DVFhfZXhwYW5kX2Jsb2NrOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCU9CSl9OQU1FX2FkZDsKKysJCUJJT19zb2NrZXRfbmJpbzsKKysJCUVWUF9yYzJfNjRfY2JjOworKwkJT0JKX05BTUVfY2xlYW51cDsKKysJCU9CSl9OQU1FX2dldDsKKysJCU9CSl9OQU1FX2luaXQ7CisrCQlPQkpfTkFNRV9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9yZW1vdmU7CisrCQlCTl9NT05UX0NUWF9jb3B5OworKwkJQklPX25ld19zb2NrczRhX2Nvbm5lY3Q7CisrCQlCSU9fc19zb2NrczRhX2Nvbm5lY3Q7CisrCQlQUk9YWV9zZXRfY29ubmVjdF9tb2RlOworKwkJUkFORF9TU0xlYXk7CisrCQlSQU5EX3NldF9yYW5kX21ldGhvZDsKKysJCVJTQV9tZW1vcnlfbG9jazsKKysJCWJuX3N1Yl93b3JkczsKKysJCWJuX211bF9ub3JtYWw7CisrCQlibl9tdWxfY29tYmE4OworKwkJYm5fbXVsX2NvbWJhNDsKKysJCWJuX3Nxcl9ub3JtYWw7CisrCQlibl9zcXJfY29tYmE4OworKwkJYm5fc3FyX2NvbWJhNDsKKysJCWJuX2NtcF93b3JkczsKKysJCWJuX211bF9yZWN1cnNpdmU7CisrCQlibl9tdWxfcGFydF9yZWN1cnNpdmU7CisrCQlibl9zcXJfcmVjdXJzaXZlOworKwkJYm5fbXVsX2xvd19ub3JtYWw7CisrCQlCTl9SRUNQX0NUWF9pbml0OworKwkJQk5fUkVDUF9DVFhfbmV3OworKwkJQk5fUkVDUF9DVFhfZnJlZTsKKysJCUJOX1JFQ1BfQ1RYX3NldDsKKysJCUJOX21vZF9tdWxfcmVjaXByb2NhbDsKKysJCUJOX21vZF9leHBfcmVjcDsKKysJCUJOX2Rpdl9yZWNwOworKwkJQk5fQ1RYX2luaXQ7CisrCQlCTl9NT05UX0NUWF9pbml0OworKwkJUkFORF9nZXRfcmFuZF9tZXRob2Q7CisrCQlQS0NTN19hZGRfYXR0cmlidXRlOworKwkJUEtDUzdfYWRkX3NpZ25lZF9hdHRyaWJ1dGU7CisrCQlQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzOworKwkJUEtDUzdfZ2V0X2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2dldF9pc3N1ZXJfYW5kX3NlcmlhbDsKKysJCVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlOworKwkJQ09NUF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfZXhwYW5kX2Jsb2NrOworKwkJQ09NUF9ybGU7CisrCQlDT01QX3psaWI7CisrCQltc190aW1lX2RpZmY7CisrCQltc190aW1lX25ldzsKKysJCW1zX3RpbWVfZnJlZTsKKysJCW1zX3RpbWVfY21wOworKwkJbXNfdGltZV9nZXQ7CisrCQlQS0NTN19zZXRfYXR0cmlidXRlczsKKysJCVBLQ1M3X3NldF9zaWduZWRfYXR0cmlidXRlczsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZTsKKysJCVg1MDlfQVRUUklCVVRFX2R1cDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2NoZWNrOworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXRfc3RyaW5nOworKwkJQVNOMV9USU1FX3ByaW50OworKwkJQkFTSUNfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX25ldzsKKysJCUVSUl9sb2FkX1g1MDlWM19zdHJpbmdzOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9mcmVlOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9uZXc7CisrCQlPQkpfdHh0Mm9iajsKKysJCVBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fcmVhZF9OU19DRVJUX1NFUTsKKysJCVBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfYmlvX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfTlNfQ0VSVF9TRVE7CisrCQlQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfYmlvX05TX0NFUlRfU0VROworKwkJWDUwOVYzX0VYVF9hZGQ7CisrCQlYNTA5VjNfRVhUX2FkZF9hbGlhczsKKysJCVg1MDlWM19FWFRfYWRkX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NsZWFudXA7CisrCQlYNTA5VjNfRVhUX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NvbmZfbmlkOworKwkJWDUwOVYzX0VYVF9nZXQ7CisrCQlYNTA5VjNfRVhUX2dldF9uaWQ7CisrCQlYNTA5VjNfRVhUX3ByaW50OworKwkJWDUwOVYzX0VYVF9wcmludF9mcDsKKysJCVg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKKysJCVg1MDlWM19hZGRfdmFsdWU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2ludDsKKysJCVg1MDlWM19jb25mX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2ludDsKKysJCVg1MDlWM19wYXJzZV9saXN0OworKwkJZDJpX0FTTjFfR0VORVJBTElaRURUSU1FOworKwkJZDJpX0FTTjFfVElNRTsKKysJCWQyaV9CQVNJQ19DT05TVFJBSU5UUzsKKysJCWQyaV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJZDJpX2V4dF9rdTsKKysJCWV4dF9rdV9mcmVlOworKwkJZXh0X2t1X25ldzsKKysJCWkyZF9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWkyZF9BU04xX1RJTUU7CisrCQlpMmRfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWkyZF9leHRfa3U7CisrCQlFVlBfTURfQ1RYX2NvcHk7CisrCQlpMmRfQVNOMV9FTlVNRVJBVEVEOworKwkJZDJpX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF9zZXQ7CisrCQlBU04xX0VOVU1FUkFURURfZ2V0OworKwkJQk5fdG9fQVNOMV9FTlVNRVJBVEVEOworKwkJQVNOMV9FTlVNRVJBVEVEX3RvX0JOOworKwkJaTJhX0FTTjFfRU5VTUVSQVRFRDsKKysJCWEyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlpMmRfR0VORVJBTF9OQU1FOworKwkJZDJpX0dFTkVSQUxfTkFNRTsKKysJCUdFTkVSQUxfTkFNRV9uZXc7CisrCQlHRU5FUkFMX05BTUVfZnJlZTsKKysJCUdFTkVSQUxfTkFNRVNfbmV3OworKwkJR0VORVJBTF9OQU1FU19mcmVlOworKwkJZDJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMmRfR0VORVJBTF9OQU1FUzsKKysJCWkydl9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfT0NURVRfU1RSSU5HOworKwkJczJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJWDUwOVYzX0VYVF9jaGVja19jb25mOworKwkJaGV4X3RvX3N0cmluZzsKKysJCXN0cmluZ190b19oZXg7CisrCQlERVNfZWRlM19jYmNtX2VuY3J5cHQ7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUDsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVA7CisrCQlYNTA5X0NSTF9wcmludF9mcDsKKysJCVg1MDlfQ1JMX3ByaW50OworKwkJaTJ2X0dFTkVSQUxfTkFNRTsKKysJCXYyaV9HRU5FUkFMX05BTUU7CisrCQlpMmRfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlkMmlfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9uZXc7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9mcmVlOworKwkJdjJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMnNfQVNOMV9JTlRFR0VSOworKwkJWDUwOVYzX0VYVF9kMmk7CisrCQluYW1lX2NtcDsKKysJCXN0cl9kdXA7CisrCQlpMnNfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRF9UQUJMRTsKKysJCUJJT19zX2xvZzsKKysJCUJJT19mX3JlbGlhYmxlOworKwkJUEtDUzdfZGF0YUZpbmFsOworKwkJUEtDUzdfZGF0YURlY29kZTsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9jb25mOworKwkJQk5fc2V0X3BhcmFtczsKKysJCUJOX2dldF9wYXJhbXM7CisrCQlCSU9fZ2V0X2V4X251bTsKKysJCUJJT19zZXRfZXhfZnJlZV9mdW5jOworKwkJRVZQX3JpcGVtZDE2MDsKKysJCUFTTjFfVElNRV9zZXQ7CisrCQlpMmRfQVVUSE9SSVRZX0tFWUlEOworKwkJZDJpX0FVVEhPUklUWV9LRVlJRDsKKysJCUFVVEhPUklUWV9LRVlJRF9uZXc7CisrCQlBVVRIT1JJVFlfS0VZSURfZnJlZTsKKysJCUFTTjFfc2VxX3VucGFjazsKKysJCUFTTjFfc2VxX3BhY2s7CisrCQlBU04xX3VucGFja19zdHJpbmc7CisrCQlBU04xX3BhY2tfc3RyaW5nOworKwkJUEtDUzEyX3BhY2tfc2FmZWJhZzsKKysJCVBLQ1MxMl9NQUtFX0tFWUJBRzsKKysJCVBLQ1M4X2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFLRV9TSEtFWUJBRzsKKysJCVBLQ1MxMl9wYWNrX3A3ZGF0YTsKKysJCVBLQ1MxMl9wYWNrX3A3ZW5jZGF0YTsKKysJCVBLQ1MxMl9hZGRfbG9jYWxrZXlpZDsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX2FzYzsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX3VuaTsKKysJCVBLQ1MxMl9nZXRfZnJpZW5kbHluYW1lOworKwkJUEtDUzEyX3BiZV9jcnlwdDsKKysJCVBLQ1MxMl9kZWNyeXB0X2QyaTsKKysJCVBLQ1MxMl9pMmRfZW5jcnlwdDsKKysJCVBLQ1MxMl9pbml0OworKwkJUEtDUzEyX2tleV9nZW5fYXNjOworKwkJUEtDUzEyX2tleV9nZW5fdW5pOworKwkJUEtDUzEyX2dlbl9tYWM7CisrCQlQS0NTMTJfdmVyaWZ5X21hYzsKKysJCVBLQ1MxMl9zZXRfbWFjOworKwkJUEtDUzEyX3NldHVwX21hYzsKKysJCU9QRU5TU0xfYXNjMnVuaTsKKysJCU9QRU5TU0xfdW5pMmFzYzsKKysJCWkyZF9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX25ldzsKKysJCWQyaV9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX2ZyZWU7CisrCQlpMmRfUEtDUzEyOworKwkJZDJpX1BLQ1MxMjsKKysJCVBLQ1MxMl9uZXc7CisrCQlQS0NTMTJfZnJlZTsKKysJCWkyZF9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfbmV3OworKwkJZDJpX1BLQ1MxMl9NQUNfREFUQTsKKysJCVBLQ1MxMl9NQUNfREFUQV9mcmVlOworKwkJaTJkX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfbmV3OworKwkJZDJpX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1MxMl9zdHJpbmdzOworKwkJUEtDUzEyX1BCRV9hZGQ7CisrCQlQS0NTOF9hZGRfa2V5dXNhZ2U7CisrCQlQS0NTMTJfZ2V0X2F0dHJfZ2VuOworKwkJUEtDUzEyX3BhcnNlOworKwkJUEtDUzEyX2NyZWF0ZTsKKysJCWkyZF9QS0NTMTJfYmlvOworKwkJaTJkX1BLQ1MxMl9mcDsKKysJCWQyaV9QS0NTMTJfYmlvOworKwkJZDJpX1BLQ1MxMl9mcDsKKysJCWkyZF9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX25ldzsKKysJCWQyaV9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX2ZyZWU7CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9fbmV3OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWU7CisrCQlFVlBfUEtDUzgyUEtFWTsKKysJCUVWUF9QS0VZMlBLQ1M4OworKwkJUEtDUzhfc2V0X2Jyb2tlbjsKKysJCUVWUF9QQkVfQUxHT1JfQ2lwaGVySW5pdDsKKysJCUVWUF9QQkVfYWxnX2FkZDsKKysJCVBLQ1M1X3BiZV9zZXQ7CisrCQlFVlBfUEJFX2NsZWFudXA7CisrCQlpMmRfU1hORVQ7CisrCQlkMmlfU1hORVQ7CisrCQlTWE5FVF9uZXc7CisrCQlTWE5FVF9mcmVlOworKwkJaTJkX1NYTkVUSUQ7CisrCQlkMmlfU1hORVRJRDsKKysJCVNYTkVUSURfbmV3OworKwkJU1hORVRJRF9mcmVlOworKwkJRFNBX1NJR19uZXc7CisrCQlEU0FfU0lHX2ZyZWU7CisrCQlEU0FfZG9fc2lnbjsKKysJCURTQV9kb192ZXJpZnk7CisrCQlkMmlfRFNBX1NJRzsKKysJCWkyZF9EU0FfU0lHOworKwkJaTJkX0FTTjFfVklTSUJMRVNUUklORzsKKysJCWQyaV9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlpMmRfQVNOMV9VVEY4U1RSSU5HOworKwkJZDJpX0FTTjFfVVRGOFNUUklORzsKKysJCWkyZF9ESVJFQ1RPUllTVFJJTkc7CisrCQlkMmlfRElSRUNUT1JZU1RSSU5HOworKwkJaTJkX0RJU1BMQVlURVhUOworKwkJZDJpX0RJU1BMQVlURVhUOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOTsKKysJCWkyZF9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX25ldzsKKysJCWQyaV9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX2ZyZWU7CisrCQlpMmRfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX25ldzsKKysJCWQyaV9QQkUyUEFSQU07CisrCQlQQkUyUEFSQU1fZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJZDJpX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfU1hORVRJRDsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWUlORk87CisrCQlTWE5FVF9hZGRfaWRfYXNjOworKwkJU1hORVRfYWRkX2lkX3Vsb25nOworKwkJU1hORVRfYWRkX2lkX0lOVEVHRVI7CisrCQlTWE5FVF9nZXRfaWRfYXNjOworKwkJU1hORVRfZ2V0X2lkX3Vsb25nOworKwkJU1hORVRfZ2V0X2lkX0lOVEVHRVI7CisrCQlYNTA5VjNfc2V0X2NvbmZfbGhhc2g7CisrCQlpMmRfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfbmV3OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19mcmVlOworKwkJZDJpX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlpMmRfUE9MSUNZSU5GTzsKKysJCVBPTElDWUlORk9fbmV3OworKwkJZDJpX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX2ZyZWU7CisrCQlpMmRfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19uZXc7CisrCQlkMmlfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19mcmVlOworKwkJaTJkX1VTRVJOT1RJQ0U7CisrCQlVU0VSTk9USUNFX25ldzsKKysJCWQyaV9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9mcmVlOworKwkJaTJkX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9uZXc7CisrCQlkMmlfTk9USUNFUkVGOworKwkJTk9USUNFUkVGX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3N0cmluZzsKKysJCVg1MDlWM19nZXRfc2VjdGlvbjsKKysJCVg1MDlWM19zdHJpbmdfZnJlZTsKKysJCVg1MDlWM19zZWN0aW9uX2ZyZWU7CisrCQlYNTA5VjNfc2V0X2N0eDsKKysJCXMyaV9BU04xX0lOVEVHRVI7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19tYWxsb2NfbG9ja2VkOworKwkJQ1JZUFRPX2ZyZWVfbG9ja2VkOworKwkJQk5fbW9kX2V4cDJfbW9udDsKKysJCUVSUl9nZXRfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhOworKwkJUEtDUzEyX1BCRV9rZXlpdmdlbjsKKysJCVg1MDlfQUxHT1JfZHVwOworKwkJZDJpX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKKysJCWkyZF9DUkxfRElTVF9QT0lOVFM7CisrCQlDUkxfRElTVF9QT0lOVFNfbmV3OworKwkJQ1JMX0RJU1RfUE9JTlRTX2ZyZWU7CisrCQlkMmlfQ1JMX0RJU1RfUE9JTlRTOworKwkJaTJkX0RJU1RfUE9JTlQ7CisrCQlESVNUX1BPSU5UX25ldzsKKysJCWQyaV9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9mcmVlOworKwkJaTJkX0RJU1RfUE9JTlRfTkFNRTsKKysJCURJU1RfUE9JTlRfTkFNRV9uZXc7CisrCQlESVNUX1BPSU5UX05BTUVfZnJlZTsKKysJCWQyaV9ESVNUX1BPSU5UX05BTUU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX3VjaGFyOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKKysJCVg1MDlWM19FWFRfaTJkOworKwkJWDUwOVYzX0VYVF92YWxfcHJuOworKwkJWDUwOVYzX0VYVF9hZGRfbGlzdDsKKysJCUVWUF9DSVBIRVJfdHlwZTsKKysJCUVWUF9QQkVfQ2lwaGVySW5pdDsKKysJCVg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZjsKKysJCWQyaV9BU04xX1VJTlRFR0VSOworKwkJc2tfdmFsdWU7CisrCQlza19udW07CisrCQlza19zZXQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJc2tfc29ydDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQ1JMOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKKysJCVBLQ1M1X1BCRV9hZGQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4OworKwkJaTJkX1BLQ1M4X2ZwOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCWQyaV9QS0NTOF9iaW87CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1BLQ1M4OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJZDJpX1BLQ1M4X2ZwOworKwkJUEVNX3dyaXRlX1BLQ1M4OworKwkJUEVNX3JlYWRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUEtDUzg7CisrCQlQRU1fd3JpdGVfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9QOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzVfUEJFX2tleWl2Z2VuOworKwkJaTJkX1BLQ1M4X2JpbzsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJQklPX3NfYmlvOworKwkJUEtDUzVfcGJlMl9zZXQ7CisrCQlQS0NTNV9QQktERjJfSE1BQ19TSEExOworKwkJUEtDUzVfdjJfUEJFX2tleWl2Z2VuOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5OworKwkJQklPX2N0cmxfZ2V0X3JlYWRfcmVxdWVzdDsKKysJCUJJT19jdHJsX3BlbmRpbmc7CisrCQlCSU9fY3RybF93cGVuZGluZzsKKysJCUJJT19uZXdfYmlvX3BhaXI7CisrCQlCSU9fY3RybF9nZXRfd3JpdGVfZ3VhcmFudGVlOworKwkJQ1JZUFRPX251bV9sb2NrczsKKysJCUNPTkZfbG9hZF9iaW87CisrCQlDT05GX2xvYWRfZnA7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlQS0NTN19zaWduYXR1cmVWZXJpZnk7CisrCQlSU0Ffc2V0X21ldGhvZDsKKysJCVJTQV9nZXRfbWV0aG9kOworKwkJUlNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9jaGVja19rZXk7CisrCQlPQkpfb2JqMnR4dDsKKysJCURTQV9kdXBfREg7CisrCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uczsKKysJCVg1MDlfUkVRX3NldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGU7CisrCQlYNTA5X1JFUV9leHRlbnNpb25fbmlkOworKwkJQklPX25yZWFkOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbl9uaWRzOworKwkJQklPX253cml0ZTA7CisrCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uc19uaWQ7CisrCQlCSU9fbnJlYWQwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnM7CisrCQlCSU9fbmV3X21lbV9idWY7CisrCQlESF9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9tZXRob2Q7CisrCQlEU0FfT3BlblNTTDsKKysJCURIX2dldF9leF9kYXRhOworKwkJREhfZ2V0X2V4X25ld19pbmRleDsKKysJCURTQV9uZXdfbWV0aG9kOworKwkJREhfbmV3X21ldGhvZDsKKysJCURIX09wZW5TU0w7CisrCQlEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCURIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9nZXRfZXhfZGF0YTsKKysJCVg1MDlWM19FWFRfUkVRX2FkZF9jb25mOworKwkJTkVUU0NBUEVfU1BLSV9wcmludDsKKysJCU5FVFNDQVBFX1NQS0lfc2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2VuY29kZTsKKysJCU5FVFNDQVBFX1NQS0lfZ2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2RlY29kZTsKKysJCVVURjhfcHV0YzsKKysJCVVURjhfZ2V0YzsKKysJCVJTQV9udWxsX21ldGhvZDsKKysJCUFTTjFfdGFnMnN0cjsKKysJCUJJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdDsKKysJCURJU1BMQVlURVhUX25ldzsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X3NldF9leF9kYXRhOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdF9hc2M7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEOworKwkJWDUwOV9QVVJQT1NFX2dldDA7CisrCQlQRU1fcmVhZF9YNTA5X0FVWDsKKysJCWQyaV9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlQRU1fd3JpdGVfUFVCS0VZOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfZnJlZTsKKysJCWQyaV9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X2NsZWFyOworKwkJWDUwOV9UUlVTVF9hZGQ7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfbmV3OworKwkJWDUwOV9hbGlhc19zZXQxOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfZnJlZTsKKysJCUVWUF9QS0VZX2dldDFfRFNBOworKwkJQVNOMV9CTVBTVFJJTkdfbmV3OworKwkJQVNOMV9tYnN0cmluZ19jb3B5OworKwkJQVNOMV9VVEY4U1RSSU5HX25ldzsKKysJCURTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9UNjFTVFJJTkdfZnJlZTsKKysJCURTQV9zZXRfbWV0aG9kOworKwkJWDUwOV9nZXRfZXhfZGF0YTsKKysJCUFTTjFfU1RSSU5HX3R5cGU7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lOworKwkJQVNOMV9USU1FX2ZyZWU7CisrCQlBU04xX09DVEVUX1NUUklOR19jbXA7CisrCQlBU04xX0JJVF9TVFJJTkdfbmV3OworKwkJWDUwOV9nZXRfZXh0X2QyaTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0FVWDsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2tfYXNjOworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZl9tYXNrX2FzYzsKKysJCVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWTsKKysJCUFTTjFfSU5URUdFUl9jbXA7CisrCQlkMmlfUlNBX1BVQktFWV9mcDsKKysJCVg1MDlfdHJ1c3Rfc2V0X2JpdF9hc2M7CisrCQlQRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1NUT1JFX0NUWF9mcmVlOworKwkJRVZQX1BLRVlfc2V0MV9EU0E7CisrCQlpMmRfRFNBX1BVQktFWV9mcDsKKysJCVg1MDlfbG9hZF9jZXJ0X2NybF9maWxlOworKwkJQVNOMV9USU1FX25ldzsKKysJCWkyZF9SU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfcHVycG9zZV9pbmhlcml0OworKwkJUEVNX3JlYWRfUlNBX1BVQktFWTsKKysJCWQyaV9YNTA5X0FVWDsKKysJCWkyZF9EU0FfUFVCS0VZOworKwkJWDUwOV9DRVJUX0FVWF9wcmludDsKKysJCVBFTV9yZWFkX0RTQV9QVUJLRVk7CisrCQlpMmRfUlNBX1BVQktFWV9iaW87CisrCQlBU04xX0JJVF9TVFJJTkdfbnVtX2FzYzsKKysJCWkyZF9QVUJLRVk7CisrCQlBU04xX1VUQ1RJTUVfZnJlZTsKKysJCURTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X2lkOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUFVCS0VZOworKwkJQVNOMV9TVFJJTkdfc2V0X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfaWQ7CisrCQlESVNQTEFZVEVYVF9mcmVlOworKwkJT1RIRVJOQU1FX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfbmV3OworKwkJWDUwOV9UUlVTVF9jbGVhbnVwOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2QyaTsKKysJCVg1MDlfUFVSUE9TRV9nZXQwX25hbWU7CisrCQlQRU1fcmVhZF9QVUJLRVk7CisrCQlpMmRfRFNBX1BVQktFWV9iaW87CisrCQlpMmRfT1RIRVJOQU1FOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZTsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYXNjOworKwkJWDUwOV9nZXRfZXhfbmV3X2luZGV4OworKwkJQVNOMV9TVFJJTkdfVEFCTEVfY2xlYW51cDsKKysJCVg1MDlfVFJVU1RfZ2V0X2J5X2lkOworKwkJWDUwOV9QVVJQT1NFX2dldF90cnVzdDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aDsKKysJCWQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19uZXc7CisrCQlYNTA5VjNfZ2V0X2QyaTsKKysJCUFTTjFfRU5VTUVSQVRFRF9mcmVlOworKwkJaTJkX1g1MDlfQ0VSVF9BVVg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9TVE9SRV9DVFhfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9SU0E7CisrCQlESVJFQ1RPUllTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9YNTA5X0FVWDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX3NldDsKKysJCWQyaV9EU0FfUFVCS0VZX2ZwOworKwkJZDJpX1JTQV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldDBfbmFtZTsKKysJCVg1MDlfVFJVU1RfZ2V0MDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlOworKwkJQVNOMV9JQTVTVFJJTkdfbmV3OworKwkJZDJpX0RTQV9QVUJLRVk7CisrCQlYNTA5X2NoZWNrX3B1cnBvc2U7CisrCQlBU04xX0VOVU1FUkFURURfbmV3OworKwkJZDJpX1JTQV9QVUJLRVlfYmlvOworKwkJZDJpX1BVQktFWTsKKysJCVg1MDlfVFJVU1RfZ2V0X3RydXN0OworKwkJWDUwOV9UUlVTVF9nZXRfZmxhZ3M7CisrCQlBU04xX0JNUFNUUklOR19mcmVlOworKwkJQVNOMV9UNjFTVFJJTkdfbmV3OworKwkJQVNOMV9VVENUSU1FX25ldzsKKysJCWkyZF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlFVlBfUEtFWV9zZXQxX1JTQTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlOworKwkJQVNOMV9JQTVTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9BVVg7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2NvdW50OworKwkJQ1JZUFRPX2FkZF9pbmZvOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQ7CisrCQlBU04xX1NUUklOR19nZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9hbGlhc19nZXQwOworKwkJQVNOMV9TVFJJTkdfZGF0YTsKKysJCWkyZF9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X3NldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfZnJlZTsKKysJCVBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZOworKwkJWDUwOV9hZGQxX3JlamVjdF9vYmplY3Q7CisrCQlYNTA5X2NoZWNrX3RydXN0OworKwkJUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfYWRkOworKwkJQVNOMV9TVFJJTkdfVEFCTEVfZ2V0OworKwkJQVNOMV9VVEY4U1RSSU5HX2ZyZWU7CisrCQlkMmlfRFNBX1BVQktFWV9iaW87CisrCQlQRU1fd3JpdGVfUlNBX1BVQktFWTsKKysJCWQyaV9PVEhFUk5BTUU7CisrCQlYNTA5X3JlamVjdF9zZXRfYml0OworKwkJUEVNX3dyaXRlX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9zbmFtZTsKKysJCUVWUF9QS0VZX3NldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19kdXA7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0OworKwkJWDUwOV9UUlVTVF9nZXRfY291bnQ7CisrCQlBU04xX0lOVEVHRVJfZnJlZTsKKysJCU9USEVSTkFNRV9mcmVlOworKwkJaTJkX1JTQV9QVUJLRVlfZnA7CisrCQlBU04xX0lOVEVHRVJfZHVwOworKwkJZDJpX1g1MDlfQ0VSVF9BVVg7CisrCQlQRU1fd3JpdGVfYmlvX1BVQktFWTsKKysJCUFTTjFfVklTSUJMRVNUUklOR19mcmVlOworKwkJWDUwOV9QVVJQT1NFX2NsZWFudXA7CisrCQlBU04xX21ic3RyaW5nX25jb3B5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9ESDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX25ldzsKKysJCUFTTjFfSU5URUdFUl9uZXc7CisrCQlpMmRfWDUwOV9BVVg7CisrCQlBU04xX0JJVF9TVFJJTkdfbmFtZV9wcmludDsKKysJCVg1MDlfY21wOworKwkJQVNOMV9TVFJJTkdfbGVuZ3RoX3NldDsKKysJCURJUkVDVE9SWVNUUklOR19uZXc7CisrCQlYNTA5X2FkZDFfdHJ1c3Rfb2JqZWN0OworKwkJUEtDUzEyX25ld3Bhc3M7CisrCQlTTUlNRV93cml0ZV9QS0NTNzsKKysJCVNNSU1FX3JlYWRfUEtDUzc7CisrCQlERVNfc2V0X2tleV9jaGVja2VkOworKwkJUEtDUzdfdmVyaWZ5OworKwkJUEtDUzdfZW5jcnlwdDsKKysJCURFU19zZXRfa2V5X3VuY2hlY2tlZDsKKysJCVNNSU1FX2NybGZfY29weTsKKysJCWkyZF9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCVBLQ1M3X2dldDBfc2lnbmVyczsKKysJCVBLQ1M3X2RlY3J5cHQ7CisrCQlTTUlNRV90ZXh0OworKwkJUEtDUzdfc2ltcGxlX3NtaW1lY2FwOworKwkJUEtDUzdfZ2V0X3NtaW1lY2FwOworKwkJUEtDUzdfc2lnbjsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXA7CisrCQlDUllQVE9fZGJnX3NldF9vcHRpb25zOworKwkJQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKKysJCUNSWVBUT19pc19tZW1fY2hlY2tfb247CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9fcG9wX2luZm87CisrCQlDUllQVE9fcHVzaF9pbmZvXzsKKysJCUNSWVBUT19zZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2S2V5X25pZDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJQVNOMV9OVUxMX2ZyZWU7CisrCQlkMmlfQVNOMV9OVUxMOworKwkJQVNOMV9OVUxMX25ldzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9mcDsKKysJCWkyZF9BU04xX05VTEw7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9mcDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9iaW87CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19mcDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2JpbzsKKysJCVBFTV9jYjsKKysJCWkyZF9Qcml2YXRlS2V5X2ZwOworKwkJZDJpX1ByaXZhdGVLZXlfYmlvOworKwkJZDJpX1ByaXZhdGVLZXlfZnA7CisrCQlpMmRfUHJpdmF0ZUtleV9iaW87CisrCQlYNTA5X3JlamVjdF9jbGVhcjsKKysJCVg1MDlfVFJVU1Rfc2V0X2RlZmF1bHQ7CisrCQlkMmlfQXV0b1ByaXZhdGVLZXk7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGU7CisrCQlYNTA5X0FUVFJJQlVURV9zZXQxX2RhdGE7CisrCQlYNTA5YXRfZ2V0X2F0dHI7CisrCQlYNTA5YXRfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9vYmplY3Q7CisrCQlYNTA5X0FUVFJJQlVURV9jb3VudDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX29iamVjdDsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9kYXRhOworKwkJWDUwOWF0X2RlbGV0ZV9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2J5X09CSjsKKysJCVJBTkRfYWRkOworKwkJQklPX251bWJlcl93cml0dGVuOworKwkJQklPX251bWJlcl9yZWFkOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbjsKKysJCUVSUl9sb2FkX1JBTkRfc3RyaW5nczsKKysJCVJBTkRfcHNldWRvX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHI7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHI7CisrCQlYNTA5X1JFUV9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV90eHQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUJOX3BzZXVkb19yYW5kOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3Q7CisrCQlCTl9DVFhfZW5kOworKwkJQk5fQ1RYX3N0YXJ0OworKwkJQk5fQ1RYX2dldDsKKysJCUVWUF9QS0VZMlBLQ1M4X2Jyb2tlbjsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2FkZDsKKysJCUNSWVBUT19kYmdfZ2V0X29wdGlvbnM7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfbmV3OworKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfb3B0aW9uczsKKysJCURFU19jcnlwdDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVFfTkVXOworKwkJUEVNX3dyaXRlX1g1MDlfUkVRX05FVzsKKysJCUJJT19jYWxsYmFja19jdHJsOworKwkJUkFORF9lZ2Q7CisrCQlSQU5EX3N0YXR1czsKKysJCWJuX2R1bXAxOworKwkJREVTX2NoZWNrX2tleV9wYXJpdHk7CisrCQlsaF9udW1faXRlbXM7CisrCQlSQU5EX2V2ZW50OworKwkJRFNPX25ldzsKKysJCURTT19uZXdfbWV0aG9kOworKwkJRFNPX2ZyZWU7CisrCQlEU09fZmxhZ3M7CisrCQlEU09fdXA7CisrCQlEU09fc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNPX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfbWV0aG9kOworKwkJRFNPX3NldF9tZXRob2Q7CisrCQlEU09fbG9hZDsKKysJCURTT19iaW5kX3ZhcjsKKysJCURTT19NRVRIT0RfbnVsbDsKKysJCURTT19NRVRIT0Rfb3BlbnNzbDsKKysJCURTT19NRVRIT0RfZGxmY247CisrCQlEU09fTUVUSE9EX3dpbjMyOworKwkJRVJSX2xvYWRfRFNPX3N0cmluZ3M7CisrCQlEU09fTUVUSE9EX2RsOworKwkJTkNPTkZfbG9hZDsKKysJCU5DT05GX2xvYWRfZnA7CisrCQlOQ09ORl9uZXc7CisrCQlOQ09ORl9nZXRfc3RyaW5nOworKwkJTkNPTkZfZnJlZTsKKysJCU5DT05GX2dldF9udW1iZXI7CisrCQlDT05GX2R1bXBfZnA7CisrCQlOQ09ORl9sb2FkX2JpbzsKKysJCU5DT05GX2R1bXBfZnA7CisrCQlOQ09ORl9nZXRfc2VjdGlvbjsKKysJCU5DT05GX2R1bXBfYmlvOworKwkJQ09ORl9kdW1wX2JpbzsKKysJCU5DT05GX2ZyZWVfZGF0YTsKKysJCUNPTkZfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRVJSX2Vycm9yX3N0cmluZ19uOworKwkJQklPX3NucHJpbnRmOworKwkJRFNPX2N0cmw7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJQklPX3ZmcmVlOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCUFTTjFfVVRDVElNRV9nZXQ7CisrCQlYNTA5X1JFUV9kaWdlc3Q7CisrCQlYNTA5X0NSTF9kaWdlc3Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzc7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aDsKKysJCUVWUF9DSVBIRVJfQ1RYX2N0cmw7CisrCQlCTl9tb2RfZXhwX21vbnRfd29yZDsKKysJCVJBTkRfZWdkX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZW1haWxfZnJlZTsKKysJCWkyZF9SU0FfTkVUOworKwkJZDJpX1JTQV9ORVRfMjsKKysJCWQyaV9SU0FfTkVUOworKwkJRFNPX2JpbmRfZnVuYzsKKysJCUNSWVBUT19nZXRfbmV3X2R5bmxvY2tpZDsKKysJCXNrX25ld19udWxsOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKKysJCUNSWVBUT19kZXN0cm95X2R5bmxvY2tpZDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19zaXplOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWU7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYjsKKysJCWMyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmNfQVNOMV9CSVRfU1RSSU5HOworKwkJUkFORF9wb2xsOworKwkJYzJpX0FTTjFfSU5URUdFUjsKKysJCWkyY19BU04xX0lOVEVHRVI7CisrCQlCSU9fZHVtcF9pbmRlbnQ7CisrCQlBU04xX3BhcnNlX2R1bXA7CisrCQljMmlfQVNOMV9PQkpFQ1Q7CisrCQlYNTA5X05BTUVfcHJpbnRfZXhfZnA7CisrCQlBU04xX1NUUklOR19wcmludF9leF9mcDsKKysJCVg1MDlfTkFNRV9wcmludF9leDsKKysJCUFTTjFfU1RSSU5HX3ByaW50X2V4OworKwkJTUQ0OworKwkJTUQ0X1RyYW5zZm9ybTsKKysJCU1ENF9GaW5hbDsKKysJCU1ENF9VcGRhdGU7CisrCQlNRDRfSW5pdDsKKysJCUVWUF9tZDQ7CisrCQlpMmRfUFVCS0VZX2JpbzsKKysJCWkyZF9QVUJLRVlfZnA7CisrCQlkMmlfUFVCS0VZX2JpbzsKKysJCUFTTjFfU1RSSU5HX3RvX1VURjg7CisrCQlCSU9fdnByaW50ZjsKKysJCUJJT192c25wcmludGY7CisrCQlkMmlfUFVCS0VZX2ZwOworKwkJWDUwOV9jbXBfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF90aW1lOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXI7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaDsKKysJCVg1MDlfT0JKRUNUX2lkeF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2ZsYWdzOworKwkJWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjazsKKysJCVg1MDlfdGltZV9hZGo7CisrCQlYNTA5X2NoZWNrX2lzc3VlZDsKKysJCUFTTjFfVVRDVElNRV9jbXBfdGltZV90OworKwkJREVTX3NldF93ZWFrX2tleV9mbGFnOworKwkJREVTX2NoZWNrX2tleTsKKysJCURFU19yd19tb2RlOworKwkJUlNBX1BLQ1MxX1JTQXJlZjsKKysJCVg1MDlfa2V5aWRfc2V0MTsKKysJCUJJT19uZXh0OworKwkJRFNPX01FVEhPRF92bXM7CisrCQlCSU9fZl9saW5lYnVmZmVyOworKwkJQk5fYm50ZXN0X3JhbmQ7CisrCQlPUEVOU1NMX2lzc2V0dWdpZDsKKysJCUJOX3JhbmRfcmFuZ2U7CisrCQlFUlJfbG9hZF9FTkdJTkVfc3RyaW5nczsKKysJCUVOR0lORV9zZXRfRFNBOworKwkJRU5HSU5FX2dldF9maW5pc2hfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwOworKwkJRFNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9ESDsKKysJCUVOR0lORV9zZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2luaXQ7CisrCQlESF9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCVJTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9maW5pc2g7CisrCQlFTkdJTkVfbG9hZF9wdWJsaWNfa2V5OworKwkJRU5HSU5FX2dldF9ESDsKKysJCUVOR0lORV9jdHJsOworKwkJRU5HSU5FX2dldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9nZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfbGFzdDsKKysJCUVOR0lORV9nZXRfcHJldjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9nZXRfUlNBOworKwkJRU5HSU5FX3NldF9kZWZhdWx0OworKwkJRU5HSU5FX2dldF9SQU5EOworKwkJRU5HSU5FX2dldF9maXJzdDsKKysJCUVOR0lORV9ieV9pZDsKKysJCUVOR0lORV9zZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7CisrCQlSU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfc2V0X1JTQTsKKysJCUVOR0lORV9sb2FkX3ByaXZhdGVfa2V5OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfcmVtb3ZlOworKwkJRU5HSU5FX2ZyZWU7CisrCQlFTkdJTkVfZ2V0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9uZXh0OworKwkJRU5HSU5FX3NldF9uYW1lOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfc2V0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X2lkOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9uZXc7CisrCQlFTkdJTkVfZ2V0X2lkOworKwkJRFNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2FkZDsKKysJCURIX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2dldF9EU0E7CisrCQlFTkdJTkVfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlCTl9wc2V1ZG9fcmFuZF9yYW5nZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2I7CisrCQlFUlJfbG9hZF9DT01QX3N0cmluZ3M7CisrCQlQS0NTMTJfaXRlbV9kZWNyeXB0X2QyaTsKKysJCUFTTjFfVVRGOFNUUklOR19pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2NpcGhlcnM7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcnM7CisrCQlkMmlfT0NTUF9CQVNJQ1JFU1A7CisrCQlLUkI1X0NIRUNLU1VNX2l0OworKwkJRUNfUE9JTlRfYWRkOworKwkJQVNOMV9pdGVtX2V4X2kyZDsKKysJCU9DU1BfQ0VSVElEX2l0OworKwkJZDJpX09DU1BfUkVTUEJZVEVTOworKwkJWDUwOVYzX2FkZDFfaTJkOworKwkJUEtDUzdfRU5WRUxPUEVfaXQ7CisrCQlVSV9hZGRfaW5wdXRfYm9vbGVhbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JTQTsKKysJCVg1MDlWM19FWFRfbmNvbmY7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfZnJlZTsKKysJCWQyaV9PQ1NQX0NFUlRTVEFUVVM7CisrCQlYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfcHJpbnRfZXg7CisrCQlPQ1NQX09ORVJFUV9nZXQxX2V4dF9kMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JBTkQ7CisrCQlFTkdJTkVfbG9hZF9keW5hbWljOworKwkJUEJLREYyUEFSQU1faXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfbmV3OworKwkJRUNfR1JPVVBfY2xlYXJfZnJlZTsKKysJCU9DU1Bfc2VuZHJlcV9iaW87CisrCQlBU04xX2l0ZW1fZGlnZXN0OworKwkJT0NTUF9CQVNJQ1JFU1BfZGVsZXRlX2V4dDsKKysJCU9DU1BfU0lHTkFUVVJFX2l0OworKwkJWDUwOV9DUkxfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9hZGRfZXh0OworKwkJS1JCNV9FTkNLRVlfaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2Nsb3NlcjsKKysJCVg1MDlfU1RPUkVfc2V0X3B1cnBvc2U7CisrCQlpMmRfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXM7CisrCQlpMmRfT0NTUF9TRVJWSUNFTE9DOworKwkJRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lOworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGcDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X09CSjsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX2tleTsKKysJCUFTTjFfVDYxU1RSSU5HX2l0OworKwkJRUNfR1JPVVBfbWV0aG9kX29mOworKwkJaTJkX0tSQjVfQVBSRVE7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQ7CisrCQlBU04xX1BSSU5UQUJMRV9uZXc7CisrCQlITUFDX0luaXRfZXg7CisrCQlkMmlfS1JCNV9BVVRIRU5UOworKwkJT0NTUF9hcmNoaXZlX2N1dG9mZl9uZXc7CisrCQlFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X0pwcm9qX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX2lzX3dlYWtfa2V5OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlFQ19QT0lOVF9vY3QycG9pbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2N0cmw7CisrCQlfc2hhZG93X0RFU19yd19tb2RlOworKwkJYXNuMV9kb19hZGI7CisrCQlBU04xX3RlbXBsYXRlX2kyZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9ESDsKKysJCVVJX2NvbnN0cnVjdF9wcm9tcHQ7CisrCQlYNTA5X1NUT1JFX3NldF90cnVzdDsKKysJCVVJX2R1cF9pbnB1dF9zdHJpbmc7CisrCQlkMmlfS1JCNV9BUFJFUTsKKysJCUVWUF9NRF9DVFhfY29weV9leDsKKysJCU9DU1BfcmVxdWVzdF9pc19zaWduZWQ7CisrCQlpMmRfT0NTUF9SRVFJTkZPOworKwkJS1JCNV9FTkNLRVlfZnJlZTsKKysJCU9DU1BfcmVzcF9nZXQwOworKwkJR0VORVJBTF9OQU1FX2l0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfaXQ7CisrCQlYNTA5X1NUT1JFX3NldF9mbGFnczsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0ZwOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVWT0tFRElORk87CisrCQlPQ1NQX2Jhc2ljX2FkZDFfY2VydDsKKysJCUVSUl9nZXRfaW1wbGVtZW50YXRpb247CisrCQlFVlBfQ2lwaGVyRmluYWxfZXg7CisrCQlPQ1NQX0NFUlRTVEFUVVNfbmV3OworKwkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGE7CisrCQlPQ1NQX3Jlc3BfZmluZDsKKysJCUJOX25ubW9kOworKwkJWDUwOV9DUkxfc29ydDsKKysJCVg1MDlfUkVWT0tFRF9zZXRfcmV2b2NhdGlvbkRhdGU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUkFORDsKKysJCU9DU1BfU0VSVklDRUxPQ19uZXc7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCV9vc3NsX29sZF9kZXNfb3B0aW9uczsKKysJCVNYTkVUX2l0OworKwkJVUlfZHVwX2lucHV0X2Jvb2xlYW47CisrCQlQS0NTMTJfYWRkX0NTUE5hbWVfYXNjOworKwkJRUNfUE9JTlRfaXNfYXRfaW5maW5pdHk7CisrCQlFTkdJTkVfbG9hZF9jcnlwdG9kZXY7CisrCQlEU09fY29udmVydF9maWxlbmFtZTsKKysJCVBPTElDWVFVQUxJTkZPX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2NpcGhlcnM7CisrCQlCTl9tb2RfbHNoaWZ0X3F1aWNrOworKwkJRFNPX3NldF9maWxlbmFtZTsKKysJCUFTTjFfaXRlbV9mcmVlOworKwkJS1JCNV9US1RCT0RZX2ZyZWU7CisrCQlBVVRIT1JJVFlfS0VZSURfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9uZXc7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmY7CisrCQlFTkdJTkVfY3RybF9jbWRfc3RyaW5nOworKwkJaTJkX09DU1BfUkVTUERBVEE7CisrCQlFVlBfTURfQ1RYX2luaXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfZnJlZTsKKysJCVBLQ1M3X0FUVFJfU0lHTl9pdDsKKysJCVVJX2FkZF9lcnJvcl9zdHJpbmc7CisrCQlLUkI1X0NIRUNLU1VNX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dDsKKysJCUVOR0lORV9sb2FkX3Vic2VjOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9kaWdlc3RzOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfaXQ7CisrCQlQS0NTMTJfdW5wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfaXRlbV91bnBhY2s7CisrCQlORVRTQ0FQRV9TUEtBQ19pdDsKKysJCVg1MDlfUkVWT0tFRF9pdDsKKysJCUFTTjFfU1RSSU5HX2VuY29kZTsKKysJCUVWUF9hZXNfMTI4X2VjYjsKKysJCUtSQjVfQVVUSEVOVF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfY2VydF9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVRVUVTVDsKKysJCVVJX2R1cF9pbmZvX3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfeHdoaXRlX2luMm91dDsKKysJCVBLQ1MxMl9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfQ0VSVFNUQVRVU19mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jcnlwdDsKKysJCUFTTjFfaXRlbV9pMmQ7CisrCQlFVlBfRGVjcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX2xvYWRfb3BlbnNzbDsKKysJCUVOR0lORV9nZXRfY21kX2RlZm5zOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCUVWUF9FbmNyeXB0RmluYWxfZXg7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0czsKKysJCVg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyOworKwkJYXNuMV9leF9pMmM7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUlNBOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRFNBOworKwkJX29zc2xfb2xkX2Rlc19rZXlfc2NoZWQ7CisrCQlYNTA5X0VYVEVOU0lPTl9pdDsKKysJCWkyZF9LUkI1X0FVVEhFTlQ7CisrCQlTWE5FVElEX2l0OworKwkJZDJpX09DU1BfU0lOR0xFUkVTUDsKKysJCUVESVBBUlRZTkFNRV9uZXc7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5OworKwkJX29zc2xfb2xkX2Rlc19vZmI2NF9lbmNyeXB0OworKwkJZDJpX0VYVEVOREVEX0tFWV9VU0FHRTsKKysJCUVSUl9wcmludF9lcnJvcnNfY2I7CisrCQlFTkdJTkVfc2V0X2NpcGhlcnM7CisrCQlkMmlfS1JCNV9BUFJFUUJPRFk7CisrCQlVSV9tZXRob2RfZ2V0X2ZsdXNoZXI7CisrCQlYNTA5X1BVQktFWV9pdDsKKysJCV9vc3NsX29sZF9kZXNfZW5jX3JlYWQ7CisrCQlQS0NTN19FTkNSWVBUX2l0OworKwkJaTJkX09DU1BfUkVTUE9OU0U7CisrCQlFQ19HUk9VUF9nZXRfY29mYWN0b3I7CisrCQlQS0NTMTJfdW5wYWNrX3A3ZGF0YTsKKysJCWQyaV9LUkI1X0FVVEhEQVRBOworKwkJT0NTUF9jb3B5X25vbmNlOworKwkJS1JCNV9BVVRIREFUQV9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX25ldzsKKysJCUVDX0dGcF9tb250X21ldGhvZDsKKysJCU9DU1BfUkVWT0tFRElORk9fZnJlZTsKKysJCVVJX2dldF9leF9kYXRhOworKwkJS1JCNV9BUFJFUUJPRFlfZnJlZTsKKysJCUVDX0dST1VQX2dldDBfZ2VuZXJhdG9yOworKwkJVUlfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOVYzX3NldF9uY29uZjsKKysJCVBLQ1MxMl9pdGVtX2kyZF9lbmNyeXB0OworKwkJWDUwOV9hZGQxX2V4dF9pMmQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19pdDsKKysJCUtSQjVfUFJJTkNOQU1FX25ldzsKKysJCVBLQ1MxMl9TQUZFQkFHX2l0OworKwkJRUNfR1JPVVBfZ2V0X29yZGVyOworKwkJZDJpX09DU1BfUkVTUElEOworKwkJT0NTUF9yZXF1ZXN0X3ZlcmlmeTsKKysJCU5DT05GX2dldF9udW1iZXJfZTsKKysJCV9vc3NsX29sZF9kZXNfZGVjcnlwdDM7CisrCQlYNTA5X3NpZ25hdHVyZV9wcmludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9mcmVlOworKwkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzOworKwkJaTJkX09DU1BfT05FUkVROworKwkJT0NTUF9SRVFVRVNUX2FkZF9leHQ7CisrCQlPQ1NQX1JFU1BCWVRFU19uZXc7CisrCQlFVlBfTURfQ1RYX2NyZWF0ZTsKKysJCU9DU1BfcmVzcF9maW5kX3N0YXR1czsKKysJCVg1MDlfQUxHT1JfaXQ7CisrCQlBU04xX1RJTUVfaXQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2V0MV9uYW1lOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2dldDBfcmVzdWx0OworKwkJUEtDUzEyX0FVVEhTQUZFU19pdDsKKysJCUVWUF9hZXNfMjU2X2VjYjsKKysJCVBLQ1MxMl9wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfSUE1U1RSSU5HX2l0OworKwkJVUlfZ2V0X2lucHV0X2ZsYWdzOworKwkJRUNfR1JPVVBfc2V0X2dlbmVyYXRvcjsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvXzJrZXlzOworKwkJT0NTUF9DRVJUSURfZnJlZTsKKysJCVg1MDlfQ0VSVF9BVVhfaXQ7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX2l0OworKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NiY19lbmNyeXB0OworKwkJUkFORF9zZXRfcmFuZF9lbmdpbmU7CisrCQlEU09fZ2V0X2xvYWRlZF9maWxlbmFtZTsKKysJCVg1MDlfQVRUUklCVVRFX2l0OworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTMTJfZGVjcnlwdF9za2V5OworKwkJS1JCNV9BVVRIRU5UX2l0OworKwkJVUlfZHVwX2Vycm9yX3N0cmluZzsKKysJCVJTQVB1YmxpY0tleV9pdDsKKysJCWkyZF9PQ1NQX1JFUVVFU1Q7CisrCQlQS0NTMTJfeDUwOWNybDJjZXJ0YmFnOworKwkJT0NTUF9TRVJWSUNFTE9DX2l0OworKwkJQVNOMV9pdGVtX3NpZ247CisrCQlYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWU7CisrCQlPQkpfTkFNRV9kb19hbGxfc29ydGVkOworKwkJaTJkX09DU1BfQkFTSUNSRVNQOworKwkJaTJkX09DU1BfUkVTUEJZVEVTOworKwkJUEtDUzEyX3VucGFja19wN2VuY2RhdGE7CisrCQlITUFDX0NUWF9pbml0OworKwkJRU5HSU5FX2dldF9kaWdlc3Q7CisrCQlPQ1NQX1JFU1BPTlNFX3ByaW50OworKwkJS1JCNV9US1RCT0RZX2l0OworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2l0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfaXQ7CisrCQlQQkUyUEFSQU1faXQ7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5Y3JsOworKwkJUEtDUzdfU0lHTkVEX2l0OworKwkJRU5HSU5FX2dldF9jaXBoZXI7CisrCQlpMmRfT0NTUF9DUkxJRDsKKysJCU9DU1BfU0lOR0xFUkVTUF9uZXc7CisrCQlFTkdJTkVfY21kX2lzX2V4ZWN1dGFibGU7CisrCQlSU0FfdXBfcmVmOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX0RTQTsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mX3NrOworKwkJRU5HSU5FX3NldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVBLQ1M4X2RlY3J5cHQ7CisrCQlQRU1fYnl0ZXNfcmVhZF9iaW87CisrCQlESVJFQ1RPUllTVFJJTkdfaXQ7CisrCQlkMmlfT0NTUF9DUkxJRDsKKysJCUVDX1BPSU5UX2lzX29uX2N1cnZlOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCWQyaV9LUkI1X0NIRUNLU1VNOworKwkJQVNOMV9pdGVtX2R1cDsKKysJCVg1MDlfaXQ7CisrCQlCTl9tb2RfYWRkOworKwkJS1JCNV9BVVRIREFUQV9mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jYmNfY2tzdW07CisrCQlBU04xX2l0ZW1fdmVyaWZ5OworKwkJQ1JZUFRPX3NldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9KcHJval9jb29yZHNfR0ZwOworKwkJWkxPTkdfaXQ7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOworKwkJQVNOMV9USU1FX2NoZWNrOworKwkJVUlfZ2V0MF91c2VyX2RhdGE7CisrCQlITUFDX0NUWF9jbGVhbnVwOworKwkJRFNBX3VwX3JlZjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlBU04xX0JNUFNUUklOR19pdDsKKysJCUFTTjFfdGFnMmJpdDsKKysJCVVJX21ldGhvZF9zZXRfZmx1c2hlcjsKKysJCVg1MDlfb2NzcGlkX3ByaW50OworKwkJS1JCNV9FTkNEQVRBX2l0OworKwkJRU5HSU5FX2dldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVVJX2FkZF91c2VyX2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfZGVsZXRlX2V4dDsKKysJCVVJX2dldF9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9mcmVlOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfaXQ7CisrCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZTsKKysJCU9DU1BfUkVRVUVTVF9pdDsKKysJCU9DU1BfQkFTSUNSRVNQX2l0OworKwkJQUVTX2VjYl9lbmNyeXB0OworKwkJQk5fbW9kX3NxcjsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfaXQ7CisrCQlHRU5FUkFMX05BTUVTX2l0OworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2l0OworKwkJQVNOMV9GQk9PTEVBTl9pdDsKKysJCVVJX3NldF9leF9kYXRhOworKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fa2V5OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SU0E7CisrCQlkMmlfS1JCNV9QUklOQ05BTUU7CisrCQlPQ1NQX1JFU1BCWVRFU19pdDsKKysJCVg1MDlfQ0lORl9pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2RpZ2VzdHM7CisrCQlkMmlfRURJUEFSVFlOQU1FOworKwkJZDJpX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0czsKKysJCV9vc3NsX29sZF9kZXNfc2V0X29kZF9wYXJpdHk7CisrCQlPQ1NQX1JFU1BEQVRBX2ZyZWU7CisrCQlkMmlfS1JCNV9USUNLRVQ7CisrCQlPVEhFUk5BTUVfaXQ7CisrCQlFVlBfTURfQ1RYX2NsZWFudXA7CisrCQlkMmlfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJWDUwOV9DUkxfc2V0X3ZlcnNpb247CisrCQlCTl9tb2Rfc3ViOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfTklEOworKwkJRU5HSU5FX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQ1NQX1JFUVVFU1RfZnJlZTsKKysJCU9DU1BfUkVRVUVTVF9hZGQxX2V4dF9pMmQ7CisrCQlYNTA5X1ZBTF9pdDsKKysJCUVDX1BPSU5Uc19tYWtlX2FmZmluZTsKKysJCUVDX1BPSU5UX211bDsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mOworKwkJWDUwOV9UUlVTVF9zZXQ7CisrCQlYNTA5X0NSTF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX2ZjcnlwdDsKKysJCURJU1BMQVlURVhUX2l0OworKwkJWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGU7CisrCQlPQ1NQX0JBU0lDUkVTUF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkMV9leHRfaTJkOworKwkJZDJpX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbDsKKysJCUtSQjVfRU5DREFUQV9uZXc7CisrCQlEU09fdXBfcmVmOworKwkJT0NTUF9jcmxfcmVhc29uX3N0cjsKKysJCVVJX2dldDBfcmVzdWx0X3N0cmluZzsKKysJCUFTTjFfR0VORVJBTFNUUklOR19uZXc7CisrCQlYNTA5X1NJR19pdDsKKysJCUVSUl9zZXRfaW1wbGVtZW50YXRpb247CisrCQlFUlJfbG9hZF9FQ19zdHJpbmdzOworKwkJVUlfZ2V0MF9hY3Rpb25fc3RyaW5nOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dDsKKysJCUVDX1BPSU5UX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVRQk9EWTsKKysJCV9vc3NsX29sZF9kZXNfZWNiM19lbmNyeXB0OworKwkJQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRU5HSU5FX2dldF9leF9kYXRhOworKwkJVUlfZGVzdHJveV9tZXRob2Q7CisrCQlBU04xX2l0ZW1faTJkX2JpbzsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfT0JKOworKwkJQVNOMV9wcmltaXRpdmVfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfaXQ7CisrCQlFVlBfYWVzXzE5Ml9lY2I7CisrCQlPQ1NQX1NJR05BVFVSRV9uZXc7CisrCQlMT05HX2l0OworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfZnA7CisrCQlDUkxfRElTVF9QT0lOVFNfaXQ7CisrCQlHRU5FUkFMX05BTUVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZGVsZXRlX2V4dDsKKysJCVBLQ1MxMl9TQUZFQkFHU19pdDsKKysJCWQyaV9PQ1NQX1NJR05BVFVSRTsKKysJCU9DU1BfcmVxdWVzdF9hZGQxX25vbmNlOworKwkJRU5HSU5FX3NldF9jbWRfZGVmbnM7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfZnJlZTsKKysJCUVDX0dST1VQX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfaXQ7CisrCQlYNTA5X1JFUV9pdDsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2VuY3J5cHQ7CisrCQlFUlJfdW5sb2FkX3N0cmluZ3M7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2l0OworKwkJRURJUEFSVFlOQU1FX2ZyZWU7CisrCQlPQ1NQX1JFUUlORk9fZnJlZTsKKysJCUVDX0dST1VQX25ld19jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0MV9leHRfZDJpOworKwkJUEtDUzEyX2l0ZW1fcGFja19zYWZlYmFnOworKwkJYXNuMV9leF9jMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfZGlnZXN0czsKKysJCWkyZF9PQ1NQX1JFVk9LRURJTkZPOworKwkJYXNuMV9lbmNfcmVzdG9yZTsKKysJCVVJX2ZyZWU7CisrCQlVSV9uZXdfbWV0aG9kOworKwkJRVZQX0VuY3J5cHRJbml0X2V4OworKwkJWDUwOV9wdWJrZXlfZGlnZXN0OworKwkJRUNfUE9JTlRfaW52ZXJ0OworKwkJT0NTUF9iYXNpY19zaWduOworKwkJaTJkX09DU1BfUkVTUElEOworKwkJT0NTUF9jaGVja19ub25jZTsKKysJCUVOR0lORV9jdHJsX2NtZDsKKysJCWQyaV9LUkI1X0VOQ0tFWTsKKysJCU9DU1BfcGFyc2VfdXJsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHQ7CisrCQlPQ1NQX0NSTElEX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXQxX2V4dF9kMmk7CisrCQlSU0FQcml2YXRlS2V5X2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9ESDsKKysJCWkyZF9FRElQQVJUWU5BTUU7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCU9DU1BfQ1JMSURfbmV3OworKwkJRU5HSU5FX2dldF9mbGFnczsKKysJCU9DU1BfT05FUkVRX2l0OworKwkJVUlfcHJvY2VzczsKKysJCUFTTjFfSU5URUdFUl9pdDsKKysJCUVWUF9DaXBoZXJJbml0X2V4OworKwkJVUlfZ2V0X3N0cmluZ190eXBlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfREg7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RTQTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlibl9kdXBfZXhwYW5kOworKwkJT0NTUF9jZXJ0X2lkX25ldzsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2l0OworKwkJQk5fbW9kX2FkZF9xdWljazsKKysJCUVDX1BPSU5UX25ldzsKKysJCUVWUF9NRF9DVFhfZGVzdHJveTsKKysJCU9DU1BfUkVTUEJZVEVTX2ZyZWU7CisrCQlFVlBfYWVzXzEyOF9jYmM7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0MV9leHRfZDJpOworKwkJRUNfUE9JTlRfZnJlZTsKKysJCURIX3VwX3JlZjsKKysJCVg1MDlfTkFNRV9FTlRSWV9pdDsKKysJCVVJX2dldF9leF9uZXdfaW5kZXg7CisrCQlCTl9tb2Rfc3ViX3F1aWNrOworKwkJT0NTUF9PTkVSRVFfYWRkX2V4dDsKKysJCU9DU1BfcmVxdWVzdF9zaWduOworKwkJRVZQX0RpZ2VzdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kaWdlc3RzOworKwkJT0NTUF9pZF9pc3N1ZXJfY21wOworKwkJT0JKX05BTUVfZG9fYWxsOworKwkJRUNfUE9JTlRzX211bDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZTsKKysJCVg1MDlWM19FWFRfbmNvbmZfbmlkOworKwkJQVNOMV9TRVFVRU5DRV9pdDsKKysJCVVJX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJBTkRfcXVlcnlfZWdkX2J5dGVzOworKwkJVUlfbWV0aG9kX2dldF93cml0ZXI7CisrCQlVSV9PcGVuU1NMOworKwkJUEVNX2RlZl9jYWxsYmFjazsKKysJCUVOR0lORV9jbGVhbnVwOworKwkJRElTVF9QT0lOVF9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9pdDsKKysJCWQyaV9LUkI1X1RLVEJPRFk7CisrCQlFQ19QT0lOVF9jbXA7CisrCQlPQ1NQX1JFVk9LRURJTkZPX25ldzsKKysJCWkyZF9PQ1NQX0NFUlRTVEFUVVM7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfbm9uY2U7CisrCQlBU04xX2l0ZW1fZXhfZDJpOworKwkJQk5fbW9kX2xzaGlmdDFfcXVpY2s7CisrCQlVSV9zZXRfbWV0aG9kOworKwkJT0NTUF9pZF9nZXQwX2luZm87CisrCQlCTl9tb2Rfc3FydDsKKysJCUVDX0dST1VQX2NvcHk7CisrCQlLUkI1X0VOQ0RBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2ZiX2VuY3J5cHQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlPQ1NQX2NlcnRfdG9faWQ7CisrCQlPQ1NQX1JFU1BJRF9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX2l0OworKwkJZDJpX09DU1BfUkVTUERBVEE7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlOworKwkJT0NTUF9jaGVja192YWxpZGl0eTsKKysJCVBLQ1MxMl9CQUdTX2l0OworKwkJT0NTUF91cmxfc3ZjbG9jX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZnJlZTsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGRfZXh0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9pdDsKKysJCVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbjsKKysJCWkyZF9LUkI1X0FVVEhEQVRBOworKwkJVUlfbWV0aG9kX2dldF9vcGVuZXI7CisrCQlFTkdJTkVfc2V0X2V4X2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfcHJpbnQ7CisrCQlDQklHTlVNX2l0OworKwkJS1JCNV9USUNLRVRfbmV3OworKwkJS1JCNV9BUFJFUV9uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0ZwOworKwkJS1JCNV9FTkNLRVlfbmV3OworKwkJQVNOMV90ZW1wbGF0ZV9kMmk7CisrCQlfb3NzbF9vbGRfZGVzX3F1YWRfY2tzdW07CisrCQlPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1czsKKysJCUJOX3N3YXA7CisrCQlQT0xJQ1lJTkZPX2l0OworKwkJRU5HSU5FX3NldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJYXNuMV9lbmNfZnJlZTsKKysJCU9DU1BfUkVTUElEX2l0OworKwkJRUNfR1JPVVBfbmV3OworKwkJRVZQX2Flc18yNTZfY2JjOworKwkJaTJkX0tSQjVfUFJJTkNOQU1FOworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MjsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDM7CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2l0OworKwkJT0NTUF9SRVFJTkZPX2l0OworKwkJUEJFUEFSQU1faXQ7CisrCQlLUkI1X0FVVEhFTlRCT0RZX25ldzsKKysJCVg1MDlfQ1JMX2FkZDBfcmV2b2tlZDsKKysJCUVESVBBUlRZTkFNRV9pdDsKKysJCU5FVFNDQVBFX1NQS0lfaXQ7CisrCQlVSV9nZXQwX3Rlc3Rfc3RyaW5nOworKwkJRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jaXBoZXJzOworKwkJRUNfUE9JTlRfY29weTsKKysJCUJOX2tyb25lY2tlcjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlVSV9tZXRob2RfZ2V0X3JlYWRlcjsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfY291bnQ7CisrCQlBU04xX0VOVU1FUkFURURfaXQ7CisrCQlVSV9zZXRfcmVzdWx0OworKwkJaTJkX0tSQjVfVElDS0VUOworKwkJWDUwOV9wcmludF9leF9mcDsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nOworKwkJZDJpX09DU1BfUkVTUE9OU0U7CisrCQlBU04xX1VUQ1RJTUVfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY193cml0ZTsKKysJCU9DU1BfUkVTUE9OU0VfbmV3OworKwkJQUVTX3NldF9lbmNyeXB0X2tleTsKKysJCU9DU1BfcmVzcF9jb3VudDsKKysJCUtSQjVfQ0hFQ0tTVU1fbmV3OworKwkJRU5HSU5FX2xvYWRfY3N3aWZ0OworKwkJT0NTUF9vbmVyZXFfZ2V0MF9pZDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzOworKwkJTk9USUNFUkVGX2l0OworKwkJWDUwOVYzX0VYVF9DUkxfYWRkX25jb25mOworKwkJT0NTUF9SRVZPS0VESU5GT19pdDsKKysJCUFFU19lbmNyeXB0OworKwkJT0NTUF9SRVFVRVNUX25ldzsKKysJCUFTTjFfQU5ZX2l0OworKwkJQ1JZUFRPX2V4X2RhdGFfbmV3X2NsYXNzOworKwkJX29zc2xfb2xkX2Rlc19uY2JjX2VuY3J5cHQ7CisrCQlpMmRfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY2xlYXJfZnJlZTsKKysJCUFFU19kZWNyeXB0OworKwkJYXNuMV9lbmNfaW5pdDsKKysJCVVJX2dldF9yZXN1bHRfbWF4c2l6ZTsKKysJCU9DU1BfQ0VSVElEX25ldzsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JBTkQ7CisrCQlVSV9tZXRob2RfZ2V0X2Nsb3NlcjsKKysJCWQyaV9LUkI1X0VOQ0RBVEE7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2NvdW50OworKwkJT0NTUF9iYXNpY192ZXJpZnk7CisrCQlLUkI1X0FVVEhFTlRCT0RZX2ZyZWU7CisrCQlBU04xX2l0ZW1fZDJpOworKwkJQVNOMV9wcmltaXRpdmVfZnJlZTsKKysJCWkyZF9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlpMmRfT0NTUF9TSUdOQVRVUkU7CisrCQlhc24xX2VuY19zYXZlOworKwkJRU5HSU5FX2xvYWRfbnVyb247CisrCQlfb3NzbF9vbGRfZGVzX3BjYmNfZW5jcnlwdDsKKysJCVBLQ1MxMl9NQUNfREFUQV9pdDsKKysJCU9DU1BfYWNjZXB0X3Jlc3BvbnNlc19uZXc7CisrCQlhc24xX2RvX2xvY2s7CisrCQlQS0NTN19BVFRSX1ZFUklGWV9pdDsKKysJCUtSQjVfQVBSRVFCT0RZX2l0OworKwkJaTJkX09DU1BfU0lOR0xFUkVTUDsKKysJCUFTTjFfaXRlbV9leF9uZXc7CisrCQlVSV9hZGRfdmVyaWZ5X3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfc2V0X2tleTsKKysJCUtSQjVfUFJJTkNOQU1FX2l0OworKwkJRVZQX0RlY3J5cHRJbml0X2V4OworKwkJaTJkX09DU1BfQ0VSVElEOworKwkJQVNOMV9pdGVtX2QyaV9iaW87CisrCQlFQ19QT0lOVF9kYmw7CisrCQlhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlpMmRfS1JCNV9DSEVDS1NVTTsKKysJCUVOR0lORV9zZXRfdGFibGVfZmxhZ3M7CisrCQlBRVNfb3B0aW9uczsKKysJCUVOR0lORV9sb2FkX2NoaWw7CisrCQlPQ1NQX2lkX2NtcDsKKysJCU9DU1BfQkFTSUNSRVNQX25ldzsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X05JRDsKKysJCUtSQjVfQVBSRVFfaXQ7CisrCQlFTkdJTkVfZ2V0X2Rlc3Ryb3lfZnVuY3Rpb247CisrCQlDT05GX3NldF9uY29uZjsKKysJCUFTTjFfUFJJTlRBQkxFX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCURJU1RfUE9JTlRfTkFNRV9pdDsKKysJCVg1MDlWM19leHRlbnNpb25zX3ByaW50OworKwkJX29zc2xfb2xkX2Rlc19jZmI2NF9lbmNyeXB0OworKwkJWDUwOV9SRVZPS0VEX2FkZDFfZXh0X2kyZDsKKysJCV9vc3NsX29sZF9kZXNfb2ZiX2VuY3J5cHQ7CisrCQlLUkI1X1RLVEJPRFlfbmV3OworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfaXQ7CisrCQlFUlJfbG9hZF9VSV9zdHJpbmdzOworKwkJaTJkX0tSQjVfRU5DS0VZOworKwkJQVNOMV90ZW1wbGF0ZV9uZXc7CisrCQlPQ1NQX1NJR05BVFVSRV9mcmVlOworKwkJQVNOMV9pdGVtX2kyZF9mcDsKKysJCUtSQjVfUFJJTkNOQU1FX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2l0OworKwkJRUNfR0ZwX3NpbXBsZV9tZXRob2Q7CisrCQlFQ19HUk9VUF9wcmVjb21wdXRlX211bHQ7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2dldDA7CisrCQlVSV9tZXRob2Rfc2V0X3dyaXRlcjsKKysJCUtSQjVfQVVUSEVOVF9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2l0OworKwkJRFNPX3NldF9uYW1lX2NvbnZlcnRlcjsKKysJCUFFU19zZXRfZGVjcnlwdF9rZXk7CisrCQlQS0NTN19ESUdFU1RfaXQ7CisrCQlQS0NTMTJfeDUwOTJjZXJ0YmFnOworKwkJRVZQX0RpZ2VzdEluaXRfZXg7CisrCQlpMmFfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJT0NTUF9SRVNQT05TRV9pdDsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDBfaWQ7CisrCQlFQ19QT0lOVF9tYWtlX2FmZmluZTsKKysJCURTT19nZXRfZmlsZW5hbWU7CisrCQlPQ1NQX0NFUlRTVEFUVVNfaXQ7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9jZXJ0OworKwkJVUlfZ2V0MF9vdXRwdXRfc3RyaW5nOworKwkJVUlfZHVwX3ZlcmlmeV9zdHJpbmc7CisrCQlCTl9tb2RfbHNoaWZ0OworKwkJS1JCNV9BVVRIREFUQV9pdDsKKysJCWFzbjFfc2V0X2Nob2ljZV9zZWxlY3RvcjsKKysJCU9DU1BfYmFzaWNfYWRkMV9zdGF0dXM7CisrCQlPQ1NQX1JFU1BJRF9mcmVlOworKwkJYXNuMV9nZXRfZmllbGRfcHRyOworKwkJVUlfYWRkX2lucHV0X3N0cmluZzsKKysJCU9DU1BfQ1JMSURfaXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UQk9EWTsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2NvdW50OworKwkJRU5HSU5FX2xvYWRfYXRhbGxhOworKwkJWDUwOV9OQU1FX2l0OworKwkJVVNFUk5PVElDRV9pdDsKKysJCU9DU1BfUkVRSU5GT19uZXc7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0OworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGw7CisrCQlBU04xX2l0ZW1fcGFjazsKKysJCWkyZF9LUkI1X0VOQ0RBVEE7CisrCQlYNTA5X1BVUlBPU0Vfc2V0OworKwkJWDUwOV9SRVFfSU5GT19pdDsKKysJCVVJX21ldGhvZF9zZXRfb3BlbmVyOworKwkJQVNOMV9pdGVtX2V4X2ZyZWU7CisrCQlBU04xX0JPT0xFQU5faXQ7CisrCQlFTkdJTkVfZ2V0X3RhYmxlX2ZsYWdzOworKwkJVUlfY3JlYXRlX21ldGhvZDsKKysJCU9DU1BfT05FUkVRX2FkZDFfZXh0X2kyZDsKKysJCV9zaGFkb3dfREVTX2NoZWNrX2tleTsKKysJCWQyaV9PQ1NQX1JFUUlORk87CisrCQlVSV9hZGRfaW5mb19zdHJpbmc7CisrCQlVSV9nZXRfcmVzdWx0X21pbnNpemU7CisrCQlBU04xX05VTExfaXQ7CisrCQlCTl9tb2RfbHNoaWZ0MTsKKysJCWQyaV9PQ1NQX09ORVJFUTsKKysJCU9DU1BfT05FUkVRX25ldzsKKysJCUtSQjVfVElDS0VUX2l0OworKwkJRVZQX2Flc18xOTJfY2JjOworKwkJS1JCNV9USUNLRVRfZnJlZTsKKysJCVVJX25ldzsKKysJCU9DU1BfcmVzcG9uc2VfY3JlYXRlOworKwkJX29zc2xfb2xkX2Rlc194Y2JjX2VuY3J5cHQ7CisrCQlQS0NTN19pdDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdDsKKysJCUVOR0lORV9zZXRfZmxhZ3M7CisrCQlfb3NzbF9vbGRfZGVzX2VjYl9lbmNyeXB0OworKwkJT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljOworKwkJRVZQX0RpZ2VzdDsKKysJCU9DU1BfT05FUkVRX2RlbGV0ZV9leHQ7CisrCQlBU04xX1RCT09MRUFOX2l0OworKwkJQVNOMV9pdGVtX25ldzsKKysJCUFTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWU7CisrCQlCSUdOVU1faXQ7CisrCQlBRVNfY2JjX2VuY3J5cHQ7CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2ZuOworKwkJT0NTUF9SRVNQT05TRV9mcmVlOworKwkJVUlfbWV0aG9kX3NldF9yZWFkZXI7CisrCQlpMmRfQVNOMV9UNjFTVFJJTkc7CisrCQlFQ19QT0lOVF9zZXRfdG9faW5maW5pdHk7CisrCQlFUlJfbG9hZF9PQ1NQX3N0cmluZ3M7CisrCQlFQ19QT0lOVF9wb2ludDJvY3Q7CisrCQlLUkI1X0FQUkVRX2ZyZWU7CisrCQlBU04xX09CSkVDVF9pdDsKKysJCU9DU1BfY3JsSURfbmV3OworKwkJT0NTUF9jcmxJRDJfbmV3OworKwkJQ09ORl9tb2R1bGVzX2xvYWRfZmlsZTsKKysJCUNPTkZfaW1vZHVsZV9zZXRfdXNyX2RhdGE7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfc3RyaW5nOworKwkJQ09ORl9tb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQVNOMV9hZGRfb2lkX21vZHVsZTsKKysJCUNPTkZfbW9kdWxlc19maW5pc2g7CisrCQlPUEVOU1NMX2NvbmZpZzsKKysJCUNPTkZfbW9kdWxlc191bmxvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlOworKwkJQ09ORl9tb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJQ09ORl9wYXJzZV9saXN0OworKwkJQ09ORl9tb2R1bGVfYWRkOworKwkJQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfZ2V0X2ZsYWdzOworKwkJQ09ORl9pbW9kdWxlX2dldF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfbG9hZDsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbmFtZTsKKysJCUVSUl9wZWVrX3RvcF9lcnJvcjsKKysJCUNPTkZfaW1vZHVsZV9nZXRfdXNyX2RhdGE7CisrCQlDT05GX2ltb2R1bGVfc2V0X2ZsYWdzOworKwkJRU5HSU5FX2FkZF9jb25mX21vZHVsZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcjsKKysJCURFU19yZWFkXzJwYXNzd29yZHM7CisrCQlERVNfcmVhZF9wYXNzd29yZDsKKysJCVVJX1VUSUxfcmVhZF9wdzsKKysJCVVJX1VUSUxfcmVhZF9wd19zdHJpbmc7CisrCQlFTkdJTkVfbG9hZF9hZXA7CisrCQlFTkdJTkVfbG9hZF9zdXJld2FyZTsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19jb25mOworKwkJT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlczsKKysJCUFFU19vZmIxMjhfZW5jcnlwdDsKKysJCUFFU19jdHIxMjhfZW5jcnlwdDsKKysJCUFFU19jZmIxMjhfZW5jcnlwdDsKKysJCUVOR0lORV9sb2FkXzQ3NThjY2E7CisrCQlfb3NzbF8wOTZfZGVzX3JhbmRvbV9zZWVkOworKwkJRVZQX2Flc18yNTZfb2ZiOworKwkJRVZQX2Flc18xOTJfb2ZiOworKwkJRVZQX2Flc18xMjhfY2ZiMTI4OworKwkJRVZQX2Flc18yNTZfY2ZiMTI4OworKwkJRVZQX2Flc18xMjhfb2ZiOworKwkJRVZQX2Flc18xOTJfY2ZiMTI4OworKwkJQ09ORl9tb2R1bGVzX2ZyZWU7CisrCQlOQ09ORl9kZWZhdWx0OworKwkJT1BFTlNTTF9ub19jb25maWc7CisrCQlOQ09ORl9XSU4zMjsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX25ldzsKKysJCUVWUF9kZXNfZWRlX2VjYjsKKysJCWkyZF9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2ZyZWU7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19pdDsKKysJCWQyaV9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUVWUF9kZXNfZWRlM19lY2I7CisrCQlYNTA5X1JFUV9wcmludF9leDsKKysJCUVOR0lORV91cF9yZWY7CisrCQlCVUZfTUVNX2dyb3dfY2xlYW47CisrCQlDUllQVE9fcmVhbGxvY19jbGVhbjsKKysJCUJVRl9zdHJsY2F0OworKwkJQklPX2luZGVudDsKKysJCUJVRl9zdHJsY3B5OworKwkJT3BlblNTTERpZTsKKysJCU9QRU5TU0xfY2xlYW5zZTsKKysJCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2OworKwkJRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlOworKwkJRVZQX2Flc18xMjhfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9yc2E7CisrCQlGSVBTX3NlbGZ0ZXN0X2RlczsKKysJCUVWUF9hZXNfMTI4X2NmYjE7CisrCQlFVlBfYWVzXzE5Ml9jZmI4OworKwkJRklQU19tb2RlX3NldDsKKysJCUZJUFNfc2VsZnRlc3RfZHNhOworKwkJRVZQX2Flc18yNTZfY2ZiODsKKysJCUZJUFNfYWxsb3dfbWQ1OworKwkJREVTX2VkZTNfY2ZiX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiODsKKysJCUZJUFNfcmFuZF9zZWVkZWQ7CisrCQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQUVTX2NmYjhfZW5jcnlwdDsKKysJCUZJUFNfcmFuZF9zZWVkOworKwkJRklQU19jb3JydXB0X2RlczsKKysJCUVWUF9hZXNfMTkyX2NmYjE7CisrCQlGSVBTX3NlbGZ0ZXN0X2FlczsKKysJCUZJUFNfc2V0X3Bybmdfa2V5OworKwkJRVZQX2Rlc19jZmI4OworKwkJRklQU19jb3JydXB0X2RzYTsKKysJCUZJUFNfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX21ldGhvZDsKKysJCUVWUF9hZXNfMjU2X2NmYjE7CisrCQlFUlJfbG9hZF9GSVBTX3N0cmluZ3M7CisrCQlGSVBTX2NvcnJ1cHRfYWVzOworKwkJRklQU19zZWxmdGVzdF9zaGExOworKwkJRklQU19zZWxmdGVzdF9yc2E7CisrCQlGSVBTX2NvcnJ1cHRfc2hhMTsKKysJCUVWUF9kZXNfY2ZiMTsKKysJCUZJUFNfZHNhX2NoZWNrOworKwkJQUVTX2NmYjFfZW5jcnlwdDsKKysJCUVWUF9kZXNfZWRlM19jZmIxOworKwkJRklQU19yYW5kX2NoZWNrOworKwkJRklQU19tZDVfYWxsb3dlZDsKKysJCUZJUFNfbW9kZTsKKysJCUZJUFNfc2VsZnRlc3RfZmFpbGVkOworKwkJc2tfaXNfc29ydGVkOworKwkJWDUwOV9jaGVja19jYTsKKysJCUhNQUNfQ1RYX3NldF9mbGFnczsKKysJCWQyaV9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJUFJPWFlfUE9MSUNZX2l0OworKwkJaTJkX1BST1hZX1BPTElDWTsKKysJCWkyZF9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJZDJpX1BST1hZX1BPTElDWTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fbmV3OworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9mcmVlOworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9pdDsKKysJCVBST1hZX1BPTElDWV9mcmVlOworKwkJUFJPWFlfUE9MSUNZX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldF9sb2NrZWQ7CisrCQlGSVBTX3NlbGZ0ZXN0X3JuZzsKKysJCUVWUF9zaGEzODQ7CisrCQlFVlBfc2hhNTEyOworKwkJRVZQX3NoYTIyNDsKKysJCUVWUF9zaGEyNTY7CisrCQlGSVBTX3NlbGZ0ZXN0X2htYWM7CisrCQlGSVBTX2NvcnJ1cHRfcm5nOworKwkJQk5fbW9kX2V4cF9tb250X2NvbnN0dGltZTsKKysJCVJTQV9YOTMxX2hhc2hfaWQ7CisrCQlSU0FfcGFkZGluZ19jaGVja19YOTMxOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1M7CisrCQlSU0FfcGFkZGluZ19hZGRfWDkzMTsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1M7CisrCQlQS0NTMV9NR0YxOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9YcHE7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWU7CisrCQlSU0FfWDkzMV9kZXJpdmU7CisrCQlCSU9fbmV3X2RncmFtOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NDsKKysJCUVSUl9zZXRfbWFyazsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3JsczsKKysJCUVOR0lORV9zZXRfU1RPUkU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNEU0E7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X3N0YXJ0X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0X2V4OworKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXI7CisrCQlCTl9CTElORElOR19nZXRfdGhyZWFkX2lkOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9wYXJhbTsKKysJCVBPTElDWV9NQVBQSU5HX2l0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQ7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlCTl9uaXN0X21vZF8xOTI7CisrCQlFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzOworKwkJU1RPUkVfc2V0X21ldGhvZDsKKysJCUdFTkVSQUxfU1VCVFJFRV9mcmVlOworKwkJTkFNRV9DT05TVFJBSU5UU19pdDsKKysJCUVDREhfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9zYWZlOworKwkJRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lOworKwkJU1RPUkVfbWV0aF9nZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNESDsKKysJCVNIQTUxMl9VcGRhdGU7CisrCQlpMmRfRUNQcml2YXRlS2V5OworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzE5MjsKKysJCVNUT1JFX21vZGlmeV9jZXJ0aWZpY2F0ZTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGMm07CisrCQlCTl9HRjJtX21vZF9leHBfYXJyOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXI7CisrCQlYNTA5X2tleWlkX2dldDA7CisrCQlFTkdJTkVfbG9hZF9nbXA7CisrCQlwaXRlbV9uZXc7CisrCQlCTl9HRjJtX21vZF9tdWxfYXJyOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZHA7CisrCQlvMmlfRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfY29weTsKKysJCUJJT19kdW1wX2ZwOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BhcmVudDsKKysJCUVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudDsKKysJCWkyb19FQ1B1YmxpY0tleTsKKysJCUVDX0tFWV9wcmVjb21wdXRlX211bHQ7CisrCQlhMmlfSVBBRERSRVNTOworKwkJU1RPUkVfbWV0aF9zZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2luaGVyaXQ7CisrCQlFQ19QT0lOVF9wb2ludDJibjsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfZG47CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfcG9saWNpZXM7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0YybTsKKysJCVNUT1JFX2Rlc3Ryb3lfbWV0aG9kOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfU1RPUkU7CisrCQlFVlBfUEtFWV9nZXQxX0VDX0tFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX251bWJlcjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RIOworKwkJRUNfS0VZX2dldF9jb252X2Zvcm07CisrCQlBU04xX09DVEVUX1NUUklOR19OREVGX2l0OworKwkJU1RPUkVfZGVsZXRlX3B1YmxpY19rZXk7CisrCQlTVE9SRV9nZXRfcHVibGljX2tleTsKKysJCVNUT1JFX21vZGlmeV9hcmJpdHJhcnk7CisrCQlFTkdJTkVfZ2V0X3N0YXRpY19zdGF0ZTsKKysJCXBxdWV1ZV9pdGVyYXRvcjsKKysJCUVDRFNBX1NJR19uZXc7CisrCQlPUEVOU1NMX0RJUl9lbmQ7CisrCQlCTl9HRjJtX21vZF9zcXI7CisrCQlFQ19QT0lOVF9ibjJwb2ludDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aDsKKysJCUVDX0tFWV9zZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfZ2V0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfa2V5X21ldGhvZF9kYXRhOworKwkJRUNEU0Ffc2lnbl9leDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZDsKKysJCUVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udl9mb3JtOworKwkJU1RPUkVfbWV0aG9kX3NldF9zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19pbjsKKysJCVBFTV9yZWFkX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCUVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpczsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9CTElORElOR19zZXRfZmxhZ3M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX3BvbGljaWVzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9uYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3B1cnBvc2U7CisrCQlTVE9SRV9nZXRfbnVtYmVyOworKwkJRUNEU0Ffc2lnbl9zZXR1cDsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyOworKwkJRUNfS0VZX3VwX3JlZjsKKysJCVBPTElDWV9NQVBQSU5HX2ZyZWU7CisrCQlCTl9HRjJtX21vZF9kaXY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3M7CisrCQlFQ19LRVlfZnJlZTsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfbmV4dF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOworKwkJUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXk7CisrCQlkMmlfRUNfUFVCS0VZOworKwkJU1RPUkVfbWV0aF9nZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9lbmRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfZW5kX2Z1bmN0aW9uOworKwkJcHF1ZXVlX3ByaW50OworKwkJRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQ7CisrCQlFQ19LRVlfcHJpbnRfZnA7CisrCQlCTl9HRjJtX21vZF9hcnI7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJRVZQX1BLRVlfY21wOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfbm9kZV9jb3VudDsKKysJCVNUT1JFX25ld19lbmdpbmU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfc3RhcnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9uZXc7CisrCQlFQ0RIX2dldF9leF9kYXRhOworKwkJRVZQX1BLRVlfZ2V0X2F0dHI7CisrCQlFQ0RTQV9kb19zaWduOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNESDsKKysJCUVDREhfT3BlblNTTDsKKysJCUVDX0tFWV9zZXRfY29udl9mb3JtOworKwkJRUNfUE9JTlRfZHVwOworKwkJR0VORVJBTF9TVUJUUkVFX25ldzsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZHA7CisrCQlFQ19nZXRfYnVpbHRpbl9jdXJ2ZXM7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVg1MDlfcGN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOworKwkJU1RPUkVfbGlzdF9jcmxfZW5kOworKwkJRVZQX1BLRVlfc2V0MV9FQ19LRVk7CisrCQlCTl9HRjJtX21vZF9zcXJ0X2FycjsKKysJCWkyZF9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlwcXVldWVfZmluZDsKKysJCUVDRFNBX1NJR19mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCVNUT1JFX21ldGhvZF9zZXRfY3RybF9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmQ7CisrCQlFQ19LRVlfc2V0X3ByaXZhdGVfa2V5OworKwkJcHF1ZXVlX3BlZWs7CisrCQlTVE9SRV9nZXRfYXJiaXRyYXJ5OworKwkJU1RPUkVfc3RvcmVfY3JsOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BvbGljeTsKKysJCVBLQ1MxMl9hZGRfc2FmZXM7CisrCQlCTl9CTElORElOR19jb252ZXJ0X2V4OworKwkJWDUwOV9wb2xpY3lfdHJlZV9mcmVlOworKwkJT1BFTlNTTF9pYTMyY2FwX2xvYzsKKysJCUJOX0dGMm1fcG9seTJhcnI7CisrCQlTVE9SRV9jdHJsOworKwkJU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjI0OworKwkJaTJkX0VDUGFyYW1ldGVyczsKKysJCWkyZF9FQ1BLUGFyYW1ldGVyczsKKysJCUJOX0dFTkNCX2NhbGw7CisrCQlkMmlfRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRoX3NldF9nZW5lcmF0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2VuZXJhdGVfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X0VDREg7CisrCQlOQU1FX0NPTlNUUkFJTlRTX25ldzsKKysJCVNIQTI1Nl9Jbml0OworKwkJRUNfS0VZX2dldDBfcHVibGljX2tleTsKKysJCVBFTV93cml0ZV9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9jc3RyOworKwkJU1RPUkVfbGlzdF9jcmxfbmV4dDsKKysJCVNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZTsKKysJCUVDUGFyYW1ldGVyc19wcmludDsKKysJCVNUT1JFX21ldGhfc2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0OworKwkJQVNOMV9nZW5lcmF0ZV9uY29uZjsKKysJCUJVRl9tZW1kdXA7CisrCQlCTl9HRjJtX21vZF9tdWw7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2RuOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0OworKwkJRUNfR1JPVVBfc2V0X3NlZWQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Q7CisrCQlTVE9SRV9BVFRSX0lORk9fZnJlZTsKKysJCVNUT1JFX2dldF9wcml2YXRlX2tleTsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2NvdW50OworKwkJU1RPUkVfQVRUUl9JTkZPX25ldzsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtOworKwkJU1RPUkVfbWV0aF9zZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9udW1iZXI7CisrCQlCTl9pc19wcmltZV9leDsKKysJCVNUT1JFX3Jldm9rZV9wdWJsaWNfa2V5OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJhbTsKKysJCVNUT1JFX2RlbGV0ZV9hcmJpdHJhcnk7CisrCQlQRU1fcmVhZF9YNTA5X0NFUlRfUEFJUjsKKysJCVg1MDlfU1RPUkVfc2V0X2RlcHRoOworKwkJRUNEU0FfZ2V0X2V4X2RhdGE7CisrCQlTSEEyMjQ7CisrCQlCSU9fZHVtcF9pbmRlbnRfZnA7CisrCQlFQ19LRVlfc2V0X2dyb3VwOworKwkJQlVGX3N0cm5kdXA7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0OworKwkJQk5fR0YybV9tb2Q7CisrCQlYNTA5X1JFUV9jaGVja19wcml2YXRlX2tleTsKKysJCUVDX0dST1VQX2dldF9zZWVkX2xlbjsKKysJCUVSUl9sb2FkX1NUT1JFX3N0cmluZ3M7CisrCQlQRU1fcmVhZF9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmQ7CisrCQlpMmRfRUNfUFVCS0VZOworKwkJRUNEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQVNOMV9wdXRfZW9jOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxpY2l0X3BvbGljeTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsX3BvbGljeTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3RhYmxlX2NsZWFudXA7CisrCQlTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlOworKwkJRUNfTUVUSE9EX2dldF9maWVsZF90eXBlOworKwkJRUNfR0ZwX25pc3RfbWV0aG9kOworKwkJU1RPUkVfbWV0aF9zZXRfbW9kaWZ5X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9tb2RpZnlfZnVuY3Rpb247CisrCQlTVE9SRV9wYXJzZV9hdHRyc19uZXh0OworKwkJRU5HSU5FX2xvYWRfcGFkbG9jazsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lOworKwkJWDUwOV9DRVJUX1BBSVJfaXQ7CisrCQlTVE9SRV9tZXRoX2dldF9yZXZva2VfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2V0X2Z1bmN0aW9uOworKwkJU1RPUkVfbW9kaWZ5X251bWJlcjsKKysJCVNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9wcml2YXRlX2tleTsKKysJCUJOX0dGMm1fbW9kX3Nxcl9hcnI7CisrCQlSU0Ffc2V0dXBfYmxpbmRpbmc7CisrCQlCSU9fc19kYXRhZ3JhbTsKKysJCVNUT1JFX01lbW9yeTsKKysJCXNrX2ZpbmRfZXg7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfR0YybTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RTQTsKKysJCVBPTElDWV9DT05TVFJBSU5UU19uZXc7CisrCQlCTl9HRjJtX21vZF9zcXJ0OworKwkJRUNESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19LRVlfZ2VuZXJhdGVfa2V5OworKwkJU0hBMzg0X1VwZGF0ZTsKKysJCUJOX0dGMm1fYXJyMnBvbHk7CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9jaGVjazsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNfS0VZX2luc2VydF9rZXlfbWV0aG9kX2RhdGE7CisrCQlTVE9SRV9tZXRoX2dldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2RlcHRoOworKwkJU0hBMjI0X0ZpbmFsOworKwkJU1RPUkVfbWV0aF9zZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlTSEEyMjRfVXBkYXRlOworKwkJZDJpX0VDUHJpdmF0ZUtleTsKKysJCUFTTjFfaXRlbV9uZGVmX2kyZDsKKysJCVNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleTsKKysJCUVSUl9wb3BfdG9fbWFyazsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfU1RPUkU7CisrCQlYNTA5X3BvbGljeV9sZXZlbF9nZXQwX25vZGU7CisrCQlpMmRfUEtDUzdfTkRFRjsKKysJCUVDX0dST1VQX2dldF9kZWdyZWU7CisrCQlBU04xX2dlbmVyYXRlX3YzOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9jc3RyOworKwkJWDUwOV9wb2xpY3lfdHJlZV9sZXZlbF9jb3VudDsKKysJCUJOX0dGMm1fYWRkOworKwkJRUNfS0VZX2dldDBfZ3JvdXA7CisrCQlTVE9SRV9nZW5lcmF0ZV9jcmw7CisrCQlTVE9SRV9zdG9yZV9wdWJsaWNfa2V5OworKwkJWDUwOV9DRVJUX1BBSVJfZnJlZTsKKysJCVNUT1JFX3Jldm9rZV9wcml2YXRlX2tleTsKKysJCUJOX25pc3RfbW9kXzIyNDsKKysJCVNIQTUxMl9GaW5hbDsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfZG47CisrCQlTVE9SRV9tZXRoX2dldF9pbml0aWFsaXNlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9pbml0aWFsaXNlX2Z1bmN0aW9uOworKwkJU1RPUkVfZGVsZXRlX251bWJlcjsKKysJCWkyZF9FQ19QVUJLRVlfYmlvOworKwkJQklPX2RncmFtX25vbl9mYXRhbF9lcnJvcjsKKysJCUVDX0dST1VQX2dldF9hc24xX2ZsYWc7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fZXg7CisrCQlTVE9SRV9saXN0X2NybF9zdGFydDsKKysJCUVDREhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNUT1JFX21ldGhfZ2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJdjJpX0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX3N0b3JlX2NlcnRpZmljYXRlOworKwkJT0JKX2JzZWFyY2hfZXg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVmYXVsdDsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cjsKKysJCUJOX0dGMm1fbW9kX2ludjsKKysJCUJOX0dGMm1fbW9kX2V4cDsKKysJCVNUT1JFX21vZGlmeV9wdWJsaWNfa2V5OworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUVDX0dST1VQX2dldDBfc2VlZDsKKysJCVNUT1JFX3N0b3JlX2FyYml0cmFyeTsKKysJCVNUT1JFX21ldGhfc2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJQk5fR0YybV9tb2RfZGl2X2FycjsKKysJCUVOR0lORV9zZXRfRUNEU0E7CisrCQlTVE9SRV9jcmVhdGVfbWV0aG9kOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlFQ19LRVlfZ2V0MF9wcml2YXRlX2tleTsKKysJCVBFTV93cml0ZV9FQ19QVUJLRVk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxOworKwkJRUNESF9zZXRfbWV0aG9kOworKwkJdjJpX0dFTkVSQUxfTkFNRV9leDsKKysJCUVDREhfc2V0X2V4X2RhdGE7CisrCQlTVE9SRV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF81MjE7CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfbGV2ZWw7CisrCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVBFTV9yZWFkX0VDX1BVQktFWTsKKysJCWkyZF9FQ0RTQV9TSUc7CisrCQlFQ0RTQV9PcGVuU1NMOworKwkJU1RPUkVfZGVsZXRlX2NybDsKKysJCUVDX0tFWV9nZXRfZW5jX2ZsYWdzOworKwkJQVNOMV9jb25zdF9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlFVlBfUEtFWV9kZWxldGVfYXR0cjsKKysJCUVDRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGMm07CisrCQlFQ19HUk9VUF9jbXA7CisrCQlTVE9SRV9yZXZva2VfY2VydGlmaWNhdGU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjU2OworKwkJU1RPUkVfbWV0aF9nZXRfZGVsZXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb247CisrCQlTSEEyMjRfSW5pdDsKKysJCVBFTV9yZWFkX0VDUHJpdmF0ZUtleTsKKysJCVNIQTUxMl9Jbml0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kcDsKKysJCUJOX3NldF9uZWdhdGl2ZTsKKysJCUVSUl9sb2FkX0VDRFNBX3N0cmluZ3M7CisrCQlFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZTsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9uZXh0OworKwkJaTJ2X0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX09CSkVDVF9mcmVlOworKwkJQk5fbmlzdF9tb2RfMzg0OworKwkJaTJkX1g1MDlfQ0VSVF9QQUlSOworKwkJUEVNX3dyaXRlX0VDUEtQYXJhbWV0ZXJzOworKwkJRUNESF9jb21wdXRlX2tleTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHI7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDREg7CisrCQlwcXVldWVfcG9wOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfY3N0cjsKKysJCVBPTElDWV9DT05TVFJBSU5UU19pdDsKKysJCVNUT1JFX2dldF9leF9uZXdfaW5kZXg7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3BvbGljeTsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWQ7CisrCQlTSEEyNTY7CisrCQlpMmRfRUNQcml2YXRlS2V5X2ZwOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3VzZXJfcG9saWNpZXM7CisrCQlYNTA5X3BjeV90cmVlX2dldDBfdXNyX3BvbGljaWVzOworKwkJT1BFTlNTTF9ESVJfcmVhZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNEU0E7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9sb29rdXA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfZHVwOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDRFNBOworKwkJRUNfS0VZX25ldzsKKysJCVNIQTI1Nl9UcmFuc2Zvcm07CisrCQlFQ19LRVlfc2V0X2VuY19mbGFnczsKKysJCUVDRFNBX3ZlcmlmeTsKKysJCUVDX1BPSU5UX3BvaW50MmhleDsKKysJCUVOR0lORV9nZXRfU1RPUkU7CisrCQlTSEE1MTI7CisrCQlTVE9SRV9nZXRfY2VydGlmaWNhdGU7CisrCQlFQ0RTQV9kb19zaWduX2V4OworKwkJRUNEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0VDUHJpdmF0ZUtleV9mcDsKKysJCVNUT1JFX2RlbGV0ZV9jZXJ0aWZpY2F0ZTsKKysJCVNIQTUxMl9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX3NldDFfcGFyYW07CisrCQlTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9mcmVlOworKwkJUEVNX3dyaXRlX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfZ2V0X2V4X2RhdGE7CisrCQlFQ19LRVlfc2V0X3B1YmxpY19rZXk7CisrCQlQRU1fcmVhZF9FQ1BLUGFyYW1ldGVyczsKKysJCVg1MDlfQ0VSVF9QQUlSX25ldzsKKysJCUVOR0lORV9yZWdpc3Rlcl9TVE9SRTsKKysJCVJTQV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKKysJCUVDUGFyYW1ldGVyc19wcmludF9mcDsKKysJCVg1MDlWM19OQU1FX2Zyb21fc2VjdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cjsKKysJCVNUT1JFX21vZGlmeV9jcmw7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X3N0YXJ0OworKwkJUE9MSUNZX01BUFBJTkdTX2l0OworKwkJR0VORVJBTF9TVUJUUkVFX2l0OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWU7CisrCQlQRU1fd3JpdGVfWDUwOV9DRVJUX1BBSVI7CisrCQlCSU9fZHVtcF9pbmRlbnRfY2I7CisrCQlkMmlfWDUwOV9DRVJUX1BBSVI7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZHA7CisrCQlhc24xX2NvbnN0X0ZpbmlzaDsKKysJCWkyZF9FQ19QVUJLRVlfZnA7CisrCQlCTl9uaXN0X21vZF8yNTY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3RhYmxlOworKwkJcHF1ZXVlX2ZyZWU7CisrCQlCTl9CTElORElOR19jcmVhdGVfcGFyYW07CisrCQlFQ0RTQV9zaXplOworKwkJZDJpX0VDX1BVQktFWV9iaW87CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfNTIxOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9zaGExc3RyOworKwkJQk5fZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNIQTI1Nl9GaW5hbDsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlQRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5OworKwkJU1RPUkVfbWV0aF9nZXRfY2xlYW51cF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfY2xlYW51cF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfRUNESDsKKysJCWQyaV9FQ0RTQV9TSUc7CisrCQlCTl9pc19wcmltZV9mYXN0dGVzdF9leDsKKysJCUVDRFNBX3NpZ247CisrCQlYNTA5X3BvbGljeV9jaGVjazsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2J5X05JRDsKKysJCVNUT1JFX3NldF9leF9kYXRhOworKwkJRU5HSU5FX2dldF9FQ0RTQTsKKysJCUVWUF9lY2RzYTsKKysJCUJOX0JMSU5ESU5HX2dldF9mbGFnczsKKysJCVBLQ1MxMl9hZGRfY2VydDsKKysJCVNUT1JFX09CSkVDVF9uZXc7CisrCQlFUlJfbG9hZF9FQ0RIX3N0cmluZ3M7CisrCQlFQ19LRVlfZHVwOworKwkJRVZQX0NJUEhFUl9DVFhfcmFuZF9rZXk7CisrCQlFQ0RTQV9zZXRfbWV0aG9kOworKwkJYTJpX0lQQUREUkVTU19OQzsKKysJCWQyaV9FQ1BhcmFtZXRlcnM7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZDsKKysJCVNUT1JFX2dldF9jcmw7CisrCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50OworKwkJU0hBMzg0X0luaXQ7CisrCQlFQ19HRjJtX3NpbXBsZV9tZXRob2Q7CisrCQlFQ0RTQV9zZXRfZXhfZGF0YTsKKysJCVNIQTM4NF9GaW5hbDsKKysJCVBLQ1M3X3NldF9kaWdlc3Q7CisrCQlFQ19LRVlfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJRUNEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVNIQTM4NDsKKysJCVBPTElDWV9NQVBQSU5HX25ldzsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcG9saWN5X3RyZWU7CisrCQlFQ19HUk9VUF9zZXRfYXNuMV9mbGFnOworKwkJRUNfS0VZX2NoZWNrX2tleTsKKysJCWQyaV9FQ19QVUJLRVlfZnA7CisrCQlQS0NTN19zZXQwX3R5cGVfb3RoZXI7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DRVJUX1BBSVI7CisrCQlwcXVldWVfbmV4dDsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZTsKKysJCXBxdWV1ZV9uZXc7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNESDsKKysJCVNUT1JFX25ld19tZXRob2Q7CisrCQlQS0NTMTJfYWRkX2tleTsKKysJCURTT19tZXJnZTsKKysJCUVDX1BPSU5UX2hleDJwb2ludDsKKysJCUJJT19kdW1wX2NiOworKwkJU0hBMjU2X1VwZGF0ZTsKKysJCXBxdWV1ZV9pbnNlcnQ7CisrCQlwaXRlbV9mcmVlOworKwkJQk5fR0YybV9tb2RfaW52X2FycjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDRFNBOworKwkJQk5fQkxJTkRJTkdfc2V0X3RocmVhZF9pZDsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzgxOTI7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFnczsKKysJCWdldF9yZmMyNDA5X3ByaW1lXzEwMjQ7CisrCQlESF9jaGVja19wdWJfa2V5OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMjA0ODsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzYxNDQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8xNTM2OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzQwOTY7CisrCQlnZXRfcmZjMjQwOV9wcmltZV83Njg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3M7CisrCQlFVlBfQ0lQSEVSX0NUWF9uZXc7CisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlOworKwkJQ2FtZWxsaWFfY2JjX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2N0cjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQ2FtZWxsaWFfZGVjcnlwdDsKKysJCUNhbWVsbGlhX2VjYl9lbmNyeXB0OworKwkJQ2FtZWxsaWFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX29mYjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfc2V0X2tleTsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2JjOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xMjhfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfZWNiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9vZmI7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMjU2X29mYjsKKysJCWEyaV9pcGFkZDsKKysJCUFTSWRlbnRpZmllcnNfZnJlZTsKKysJCWkyZF9BU0lkT3JSYW5nZTsKKysJCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZTsKKysJCXYzX2FzaWRfaXNfY2Fub25pY2FsOworKwkJSVBBZGRyZXNzQ2hvaWNlX2ZyZWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGE7CisrCQlCSU9fc2V0X2NhbGxiYWNrX2FyZzsKKysJCXYzX2FkZHJfYWRkX3ByZWZpeDsKKysJCUlQQWRkcmVzc09yUmFuZ2VfaXQ7CisrCQlCSU9fc2V0X2ZsYWdzOworKwkJQVNJZGVudGlmaWVyc19pdDsKKysJCXYzX2FkZHJfZ2V0X3JhbmdlOworKwkJQklPX21ldGhvZF90eXBlOworKwkJdjNfYWRkcl9pbmhlcml0czsKKysJCUlQQWRkcmVzc0Nob2ljZV9pdDsKKysJCUFFU19pZ2VfZW5jcnlwdDsKKysJCXYzX2FkZHJfYWRkX3JhbmdlOworKwkJRVZQX0NJUEhFUl9DVFhfbmlkOworKwkJZDJpX0FTUmFuZ2U7CisrCQl2M19hZGRyX2FkZF9pbmhlcml0OworKwkJdjNfYXNpZF9hZGRfaWRfb3JfcmFuZ2U7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCUVWUF9DSVBIRVJfaXZfbGVuZ3RoOworKwkJRVZQX01EX3R5cGU7CisrCQl2M19hc2lkX2Nhbm9uaXplOworKwkJSVBBZGRyZXNzUmFuZ2VfZnJlZTsKKysJCXYzX2FzaWRfYWRkX2luaGVyaXQ7CisrCQlFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoOworKwkJSVBBZGRyZXNzUmFuZ2VfbmV3OworKwkJQVNJZE9yUmFuZ2VfbmV3OworKwkJRVZQX01EX3NpemU7CisrCQlFVlBfTURfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlCSU9fY2xlYXJfZmxhZ3M7CisrCQlpMmRfQVNSYW5nZTsKKysJCUlQQWRkcmVzc1JhbmdlX2l0OworKwkJSVBBZGRyZXNzQ2hvaWNlX25ldzsKKysJCUFTSWRlbnRpZmllckNob2ljZV9uZXc7CisrCQlBU1JhbmdlX2ZyZWU7CisrCQlFVlBfTURfcGtleV90eXBlOworKwkJRVZQX01EX0NUWF9jbGVhcl9mbGFnczsKKysJCUlQQWRkcmVzc0ZhbWlseV9mcmVlOworKwkJaTJkX0lQQWRkcmVzc0ZhbWlseTsKKysJCUlQQWRkcmVzc09yUmFuZ2VfbmV3OworKwkJRVZQX0NJUEhFUl9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OworKwkJZDJpX0lQQWRkcmVzc1JhbmdlOworKwkJQUVTX2JpX2lnZV9lbmNyeXB0OworKwkJQklPX2dldF9jYWxsYmFjazsKKysJCUlQQWRkcmVzc09yUmFuZ2VfZnJlZTsKKysJCXYzX2FkZHJfc3Vic2V0OworKwkJZDJpX0lQQWRkcmVzc0ZhbWlseTsKKysJCXYzX2FzaWRfc3Vic2V0OworKwkJQklPX3Rlc3RfZmxhZ3M7CisrCQlpMmRfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQVNSYW5nZV9pdDsKKysJCWQyaV9BU0lkZW50aWZpZXJzOworKwkJQVNSYW5nZV9uZXc7CisrCQlkMmlfSVBBZGRyZXNzQ2hvaWNlOworKwkJdjNfYWRkcl9nZXRfYWZpOworKwkJRVZQX0NJUEhFUl9rZXlfbGVuZ3RoOworKwkJRVZQX0NpcGhlcjsKKysJCWkyZF9JUEFkZHJlc3NPclJhbmdlOworKwkJQVNJZE9yUmFuZ2VfaXQ7CisrCQlFVlBfQ0lQSEVSX25pZDsKKysJCWkyZF9JUEFkZHJlc3NDaG9pY2U7CisrCQlFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplOworKwkJQVNJZGVudGlmaWVyc19uZXc7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3BhdGg7CisrCQlJUEFkZHJlc3NGYW1pbHlfbmV3OworKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3M7CisrCQl2M19hZGRyX2lzX2Nhbm9uaWNhbDsKKysJCWkyZF9JUEFkZHJlc3NSYW5nZTsKKysJCUlQQWRkcmVzc0ZhbWlseV9pdDsKKysJCXYzX2FzaWRfaW5oZXJpdHM7CisrCQlFVlBfQ0lQSEVSX0NUWF9jaXBoZXI7CisrCQlFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGE7CisrCQlFVlBfTURfYmxvY2tfc2l6ZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2ZsYWdzOworKwkJdjNfYXNpZF92YWxpZGF0ZV9wYXRoOworKwkJZDJpX0lQQWRkcmVzc09yUmFuZ2U7CisrCQl2M19hZGRyX2Nhbm9uaXplOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2l0OworKwkJRVZQX01EX0NUWF9tZDsKKysJCWQyaV9BU0lkZW50aWZpZXJDaG9pY2U7CisrCQlCSU9fbWV0aG9kX25hbWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGg7CisrCQlBU0lkT3JSYW5nZV9mcmVlOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2ZyZWU7CisrCQlCSU9fZ2V0X2NhbGxiYWNrX2FyZzsKKysJCUJJT19zZXRfY2FsbGJhY2s7CisrCQlkMmlfQVNJZE9yUmFuZ2U7CisrCQlpMmRfQVNJZGVudGlmaWVyczsKKysJCVNFRURfZGVjcnlwdDsKKysJCVNFRURfZW5jcnlwdDsKKysJCVNFRURfY2JjX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9vZmI7CisrCQlTRUVEX2NmYjEyOF9lbmNyeXB0OworKwkJU0VFRF9vZmIxMjhfZW5jcnlwdDsKKysJCUVWUF9zZWVkX2NiYzsKKysJCVNFRURfZWNiX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9lY2I7CisrCQlTRUVEX3NldF9rZXk7CisrCQlFVlBfc2VlZF9jZmIxMjg7CisrCQlYNTA5X0VYVEVOU0lPTlNfaXQ7CisrCQlYNTA5X2dldDFfb2NzcDsKKysJCU9DU1BfUkVRX0NUWF9mcmVlOworKwkJaTJkX1g1MDlfRVhURU5TSU9OUzsKKysJCU9DU1Bfc2VuZHJlcV9uYmlvOworKwkJT0NTUF9zZW5kcmVxX25ldzsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTlM7CisrCQlYNTA5X0FMR09SU19pdDsKKysJCVg1MDlfQUxHT1JfZ2V0MDsKKysJCVg1MDlfQUxHT1Jfc2V0MDsKKysJCUFFU191bndyYXBfa2V5OworKwkJQUVTX3dyYXBfa2V5OworKwkJWDUwOWF0X2dldDBfZGF0YV9ieV9PQko7CisrCQlBU04xX1RZUEVfc2V0MTsKKysJCUFTTjFfU1RSSU5HX3NldDA7CisrCQlpMmRfWDUwOV9BTEdPUlM7CisrCQlCSU9fZl96bGliOworKwkJQ09NUF96bGliX2NsZWFudXA7CisrCQlkMmlfWDUwOV9BTEdPUlM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZTsKKysJCVBFTV93cml0ZV9DTVM7CisrCQlDTVNfYWRkMF9DZXJ0aWZpY2F0ZUNob2ljZXM7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKKysJCUVSUl9sb2FkX0NNU19zdHJpbmdzOworKwkJQ01TX3NpZ25fcmVjZWlwdDsKKysJCWkyZF9DTVNfQ29udGVudEluZm87CisrCQlDTVNfc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJZDJpX0NNU19iaW87CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX3ZlcmlmeTsKKysJCVNNSU1FX3JlYWRfQ01TOworKwkJQ01TX2RlY3J5cHRfc2V0MV9rZXk7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX2FsZ3M7CisrCQlDTVNfYWRkMV9jZXJ0OworKwkJQ01TX3NldF9kZXRhY2hlZDsKKysJCUNNU19lbmNyeXB0OworKwkJQ01TX0VudmVsb3BlZERhdGFfY3JlYXRlOworKwkJQ01TX3VuY29tcHJlc3M7CisrCQlDTVNfYWRkMF9jcmw7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnlfY29udGVudDsKKysJCUNNU191bnNpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOworKwkJUEVNX3dyaXRlX2Jpb19DTVM7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2NlcnRfY21wOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3M7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX0NvbnRlbnRJbmZvX2ZyZWU7CisrCQlDTVNfZmluYWw7CisrCQlDTVNfYWRkX3NpbXBsZV9zbWltZWNhcDsKKysJCUNNU19TaWduZXJJbmZvX3ZlcmlmeTsKKysJCUNNU19kYXRhOworKwkJQ01TX0NvbnRlbnRJbmZvX2l0OworKwkJZDJpX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19jb21wcmVzczsKKysJCUNNU19kaWdlc3RfY3JlYXRlOworKwkJQ01TX1NpZ25lckluZm9fY2VydF9jbXA7CisrCQlDTVNfU2lnbmVySW5mb19zaWduOworKwkJQ01TX2RhdGFfY3JlYXRlOworKwkJaTJkX0NNU19iaW87CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9zZXQxX2tleTsKKysJCUNNU19kZWNyeXB0OworKwkJaW50X3NtaW1lX3dyaXRlX0FTTjE7CisrCQlDTVNfdW5zaWduZWRfZGVsZXRlX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfYWRkX3NtaW1lY2FwOworKwkJUEVNX3JlYWRfQ01TOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9PQko7CisrCQlkMmlfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX2FkZF9zdGFuZGFyZF9zbWltZWNhcDsKKysJCUNNU19Db250ZW50SW5mb19uZXc7CisrCQlDTVNfUmVjaXBpZW50SW5mb190eXBlOworKwkJQ01TX2dldDBfdHlwZTsKKysJCUNNU19pc19kZXRhY2hlZDsKKysJCUNNU19zaWduOworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJU01JTUVfd3JpdGVfQ01TOworKwkJQ01TX0VuY3J5cHRlZERhdGFfZGVjcnlwdDsKKysJCUNNU19nZXQwX1JlY2lwaWVudEluZm9zOworKwkJQ01TX2FkZDBfUmV2b2NhdGlvbkluZm9DaG9pY2U7CisrCQlDTVNfZGVjcnlwdF9zZXQxX3BrZXk7CisrCQlDTVNfU2lnbmVySW5mb19zZXQxX3NpZ25lcl9jZXJ0OworKwkJQ01TX2dldDBfc2lnbmVyczsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9nZXQwX3ZhbHVlczsKKysJCUNNU19zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCUNNU19nZXQwX1NpZ25lckluZm9zOworKwkJQ01TX2FkZDBfY2VydDsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2VuY3J5cHQ7CisrCQlDTVNfZGlnZXN0X3ZlcmlmeTsKKysJCUNNU19zZXQxX3NpZ25lcnNfY2VydHM7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9rZXk7CisrCQlDTVNfU2lnbmVkRGF0YV9pbml0OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfZ2V0MF9pZDsKKysJCUNNU192ZXJpZnlfcmVjZWlwdDsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9pdDsKKysJCVBFTV9yZWFkX2Jpb19DTVM7CisrCQlDTVNfZ2V0MV9jcmxzOworKwkJQ01TX2FkZDBfcmVjaXBpZW50X2tleTsKKysJCVNNSU1FX3JlYWRfQVNOMTsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9uZXc7CisrCQlDTVNfZ2V0MF9jb250ZW50OworKwkJQ01TX2dldDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9pZF9jbXA7CisrCQlDTVNfYWRkMV9SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlDTVNfZ2V0MV9jZXJ0czsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX2RhdGFGaW5hbDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9zaWduZXJfaWQ7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9zaWdyX2lkOworKwkJaTJkX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19hZGQxX3JlY2lwaWVudF9jZXJ0OworKwkJQ01TX2RhdGFJbml0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX1JlY2lwaWVudEluZm9fZGVjcnlwdDsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfZ2V0MF9lQ29udGVudFR5cGU7CisrCQlDTVNfc2V0MV9lQ29udGVudFR5cGU7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfY3JlYXRlMDsKKysJCUNNU19hZGQxX3NpZ25lcjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGtleTsKKysJCUVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm47CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2xvYWRfc3NsX2NsaWVudF9jZXJ0OworKwkJRU5HSU5FX2xvYWRfY2FwaTsKKysJCU9QRU5TU0xfaXNzZXJ2aWNlOworKwkJRklQU19kc2Ffc2lnX2RlY29kZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzOworKwkJRklQU19yYW5kX3N0YXR1czsKKysJCUZJUFNfcmFuZF9zZXRfa2V5OworKwkJQ1JZUFRPX3NldF9tZW1faW5mb19mdW5jdGlvbnM7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlpbnRfRVJSX3NldF9zdGF0ZV9mdW5jOworKwkJaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2FsbGJhY2s7CisrCQlGSVBTX3JuZ19zdGljazsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFnczsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlGSVBTX3NlbGZ0ZXN0X2NoZWNrOworKwkJRklQU19yYW5kX3NldF9kdDsKKysJCUNSWVBUT19kYmdfcG9wX2luZm87CisrCQlGSVBTX2RzYV9mcmVlOworKwkJUlNBX1g5MzFfZGVyaXZlX2V4OworKwkJRklQU19yc2FfbmV3OworKwkJRklQU19yYW5kX2J5dGVzOworKwkJZmlwc19jaXBoZXJfdGVzdDsKKysJCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQ7CisrCQlDUllQVE9fZGJnX3B1c2hfaW5mbzsKKysJCUZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuOworKwkJRklQU19kaF9uZXc7CisrCQlGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbjsKKysJCUZJUFNfZGhfZnJlZTsKKysJCWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdDsKKysJCUVWUF9hZGRfYWxnX21vZHVsZTsKKysJCWludF9SQU5EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JhbmRfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX3Jlc2V0OworKwkJRklQU19kc2FfbmV3OworKwkJaW50X1JBTkRfc2V0X2NhbGxiYWNrczsKKysJCUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4OworKwkJaW50X0VSUl9saWJfaW5pdDsKKysJCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCUZJUFNfcnNhX2ZyZWU7CisrCQlGSVBTX2RzYV9zaWdfZW5jb2RlOworKwkJQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm87CisrCQlPUEVOU1NMX2luaXQ7CisrCQlDUllQVE9fc3RyZHVwOworKwkJSlBBS0VfU1RFUDNBX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQMV9yZWxlYXNlOworKwkJSlBBS0VfZ2V0X3NoYXJlZF9rZXk7CisrCQlKUEFLRV9TVEVQM0JfaW5pdDsKKysJCUpQQUtFX1NURVAxX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDFfaW5pdDsKKysJCUpQQUtFX1NURVAzQl9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDJfZ2VuZXJhdGU7CisrCQlKUEFLRV9DVFhfbmV3OworKwkJSlBBS0VfQ1RYX2ZyZWU7CisrCQlKUEFLRV9TVEVQM0JfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDJfcHJvY2VzczsKKysJCUpQQUtFX1NURVAzQl9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0FfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMl9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDNBX2luaXQ7CisrCQlFUlJfbG9hZF9KUEFLRV9zdHJpbmdzOworKwkJSlBBS0VfU1RFUDJfaW5pdDsKKysJCXBxdWV1ZV9zaXplOworKwkJaTJkX1RTX0FDQ1VSQUNZOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfcHJpbnRfcHVibGljOworKwkJRVZQX1BLRVlfQ1RYX25ldzsKKysJCWkyZF9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfZmluZDsKKysJCURTT19NRVRIT0RfYmVvczsKKysJCVRTX0NPTkZfbG9hZF9jZXJ0OworKwkJVFNfUkVRX2dldF9leHQ7CisrCQlFVlBfUEtFWV9zaWduX2luaXQ7CisrCQlBU04xX2l0ZW1fcHJpbnQ7CisrCQlUU19UU1RfSU5GT19zZXRfbm9uY2U7CisrCQlUU19SRVNQX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzOworKwkJRVZQX1BLRVlfYXNuMV9hZGQwOworKwkJUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lOworKwkJaTJkX1RTX1RTVF9JTkZPX2ZwOworKwkJQklPX2FzbjFfZ2V0X3ByZWZpeDsKKysJCVRTX1RTVF9JTkZPX3NldF90aW1lOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVjcnlwdDsKKysJCUVWUF9QS0VZX3NldF90eXBlX3N0cjsKKysJCUVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm87CisrCQlUU19SRVFfc2V0X3BvbGljeV9pZDsKKysJCWQyaV9UU19SRVNQX2ZwOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmU7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZzsKKysJCVdISVJMUE9PTF9Jbml0OworKwkJVFNfUkVTUF9zZXRfc3RhdHVzX2luZm87CisrCQlFVlBfUEtFWV9rZXlnZW47CisrCQlFVlBfRGlnZXN0U2lnbkluaXQ7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWlsbGlzOworKwkJVFNfUkVRX2R1cDsKKysJCUdFTkVSQUxfTkFNRV9kdXA7CisrCQlBU04xX1NFUVVFTkNFX0FOWV9pdDsKKysJCVdISVJMUE9PTDsKKysJCVg1MDlfU1RPUkVfZ2V0MV9jcmxzOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aDsKKysJCUVWUF9QS0VZX2FzbjFfbmV3OworKwkJQklPX25ld19OREVGOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGg7CisrCQlUU19NU0dfSU1QUklOVF9zZXRfYWxnbzsKKysJCWkyZF9UU19UU1RfSU5GT19iaW87CisrCQlUU19UU1RfSU5GT19zZXRfb3JkZXJpbmc7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X09CSjsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcjsKKysJCVRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uOworKwkJU01JTUVfd3JpdGVfQVNOMTsKKysJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfa2V5OworKwkJRVZQX1BLRVlfZW5jcnlwdF9vbGQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0X2luaXQ7CisrCQlDUllQVE9fVEhSRUFESURfY3B5OworKwkJQVNOMV9QQ1RYX2dldF9jZXJ0X2ZsYWdzOworKwkJaTJkX0VTU19TSUdOSU5HX0NFUlQ7CisrCQlUU19DT05GX2xvYWRfa2V5OworKwkJaTJkX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJZDJpX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYzsKKysJCWIyaV9QdWJsaWNLZXlfYmlvOworKwkJQklPX2FzbjFfc2V0X3ByZWZpeDsKKysJCUVWUF9QS0VZX25ld19tYWNfa2V5OworKwkJQklPX25ld19DTVM7CisrCQlDUllQVE9fVEhSRUFESURfY21wOworKwkJVFNfUkVRX2V4dF9mcmVlOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfZnJlZTsKKysJCUVWUF9QS0VZX2dldDBfYXNuMTsKKysJCWQyaV9ORVRTQ0FQRV9YNTA5OworKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdDsKKysJCUVWUF9QS0VZX0NUWF9zZXRfZGF0YTsKKysJCUVWUF9QS0VZX2tleWdlbl9pbml0OworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X2FsZ287CisrCQlUU19SRVFfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2N0cmxfc3RyOworKwkJRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtOworKwkJVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvOworKwkJQk5fYXNjMmJuOworKwkJVFNfUkVRX2dldF9wb2xpY3lfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3NldF9kZWZfcGtleV9hc24xX21ldGhzOworKwkJZDJpX1RTX0FDQ1VSQUNZOworKwkJRFNPX2dsb2JhbF9sb29rdXA7CisrCQlUU19DT05GX3NldF90c2FfbmFtZTsKKysJCWkyZF9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfbG9hZF9nb3N0OworKwkJV0hJUkxQT09MX0JpdFVwZGF0ZTsKKysJCUFTTjFfUENUWF9nZXRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X05JRDsKKysJCVRTX1JFU1BfbmV3OworKwkJRVNTX0NFUlRfSURfZHVwOworKwkJVFNfU1RBVFVTX0lORk9fZHVwOworKwkJVFNfUkVRX2RlbGV0ZV9leHQ7CisrCQlFVlBfRGlnZXN0VmVyaWZ5RmluYWw7CisrCQlFVlBfUEtFWV9wcmludF9wYXJhbXM7CisrCQlpMmRfQ01TX2Jpb19zdHJlYW07CisrCQlUU19SRVFfZ2V0X21zZ19pbXByaW50OworKwkJT0JKX2ZpbmRfc2lnaWRfYnlfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9zZXJpYWw7CisrCQlUU19SRVFfZ2V0X25vbmNlOworKwkJWDUwOV9QVUJLRVlfc2V0MF9wYXJhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvOworKwkJRElTVF9QT0lOVF9zZXRfZHBuYW1lOworKwkJaTJkX0lTU1VJTkdfRElTVF9QT0lOVDsKKysJCUFTTjFfU0VUX0FOWV9pdDsKKysJCUVWUF9QS0VZX0NUWF9nZXRfZGF0YTsKKysJCVRTX1NUQVRVU19JTkZPX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX2Rlcml2ZV9pbml0OworKwkJZDJpX1RTX1RTVF9JTkZPOworKwkJRVZQX1BLRVlfYXNuMV9hZGRfYWxpYXM7CisrCQlkMmlfVFNfUkVTUF9iaW87CisrCQlPVEhFUk5BTUVfY21wOworKwkJR0VORVJBTF9OQU1FX3NldDBfdmFsdWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnOworKwkJVFNfUkVTUF9DVFhfbmV3OworKwkJVFNfUkVTUF9zZXRfdHN0X2luZm87CisrCQlQS0NTN19maW5hbDsKKysJCUVWUF9QS0VZX2Jhc2VfaWQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQ7CisrCQlUU19SRVFfc2V0X21zZ19pbXByaW50OworKwkJRVZQX1BLRVlfQ1RYX2N0cmw7CisrCQlUU19DT05GX3NldF9kaWdlc3RzOworKwkJZDJpX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY3RybDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X05JRDsKKysJCVBLQ1M1X3BiZV9zZXQwX2FsZ29yOworKwkJQk5fQkxJTkRJTkdfdGhyZWFkX2lkOworKwkJVFNfQUNDVVJBQ1lfbmV3OworKwkJWDUwOV9DUkxfTUVUSE9EX2ZyZWU7CisrCQlBU04xX1BDVFhfZ2V0X25tX2ZsYWdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbjsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50OworKwkJRVZQX1BLRVlfZGVjcnlwdF9pbml0OworKwkJTkVUU0NBUEVfWDUwOV9mcmVlOworKwkJaTJiX1BWS19iaW87CisrCQlFVlBfUEtFWV9wcmludF9wcml2YXRlOworKwkJR0VORVJBTF9OQU1FX2dldDBfdmFsdWU7CisrCQliMmlfUFZLX2JpbzsKKysJCUFTTjFfVVRDVElNRV9hZGo7CisrCQlUU19UU1RfSU5GT19uZXc7CisrCQlFVlBfTURfZG9fYWxsX3NvcnRlZDsKKysJCVRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lOworKwkJVFNfQUNDVVJBQ1lfc2V0X3NlY29uZHM7CisrCQlUU19UU1RfSU5GT19nZXRfdGltZTsKKysJCVBLQ1M4X3BrZXlfZ2V0MDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MDsKKysJCU9CSl9hZGRfc2lnaWQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19zaWduOworKwkJRVZQX1BLRVlfcGFyYW1nZW5faW5pdDsKKysJCUVWUF9QS0VZX3NpZ247CisrCQlPQkpfc2lnaWRfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2luaXQ7CisrCQlkMmlfRVNTX0lTU1VFUl9TRVJJQUw7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfbmV3OworKwkJQVNOMV9USU1FX2FkajsKKysJCVRTX09CSl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcjsKKysJCVRTX1JFU1BfZ2V0X3N0YXR1c19pbmZvOworKwkJQ01TX3N0cmVhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXRfY2I7CisrCQlQS0NTN190b19UU19UU1RfSU5GTzsKKysJCUFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzOworKwkJVFNfVFNUX0lORk9fYWRkX2V4dDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZTsKKysJCWkyZF9UU19SRVNQX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCVRTX1JFU1BfQ1RYX3NldF9hY2N1cmFjeTsKKysJCVRTX1JFUV9zZXRfbm9uY2U7CisrCQlFU1NfQ0VSVF9JRF9uZXc7CisrCQlFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyOworKwkJVFNfUkVRX2dldF9leHRfY291bnQ7CisrCQlCVUZfcmV2ZXJzZTsKKysJCVRTX1RTVF9JTkZPX3ByaW50X2JpbzsKKysJCWQyaV9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aHM7CisrCQlpMmJfUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfVFNfUkVTUDsKKysJCWIyaV9QdWJsaWNLZXk7CisrCQlUU19WRVJJRllfQ1RYX2NsZWFudXA7CisrCQlUU19TVEFUVVNfSU5GT19mcmVlOworKwkJVFNfUkVTUF92ZXJpZnlfdG9rZW47CisrCQlPQkpfYnNlYXJjaF9leF87CisrCQlBU04xX2JuX3ByaW50OworKwkJRVZQX1BLRVlfYXNuMV9nZXRfY291bnQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJQVNOMV9QQ1RYX3NldF9ubV9mbGFnczsKKysJCUVWUF9EaWdlc3RWZXJpZnlJbml0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHM7CisrCQlUU19UU1RfSU5GT19nZXRfcG9saWN5X2lkOworKwkJVFNfUkVRX2dldF9jZXJ0X3JlcTsKKysJCVg1MDlfQ1JMX3NldF9tZXRoX2RhdGE7CisrCQlQS0NTOF9wa2V5X3NldDA7CisrCQlBU04xX1NUUklOR19jb3B5OworKwkJZDJpX1RTX1RTVF9JTkZPX2ZwOworKwkJWDUwOV9DUkxfbWF0Y2g7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9kMmk7CisrCQlUU19SRVNQX0NUWF9hZGRfcG9saWN5OworKwkJZDJpX1RTX1JFU1A7CisrCQlUU19DT05GX2xvYWRfY2VydHM7CisrCQlUU19UU1RfSU5GT19nZXRfbXNnX2ltcHJpbnQ7CisrCQlFUlJfbG9hZF9UU19zdHJpbmdzOworKwkJVFNfVFNUX0lORk9fZ2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9DVFhfZHVwOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5OworKwkJaTJiX1B1YmxpY0tleV9iaW87CisrCQlUU19DT05GX3NldF9jZXJ0czsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvOworKwkJVFNfVkVSSUZZX0NUWF9mcmVlOworKwkJVFNfUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiOworKwkJWDUwOV9DUkxfZ2V0X21ldGhfZGF0YTsKKysJCVRTX1JFU1BfQ1RYX3NldF90aW1lX2NiOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X21zZzsKKysJCVRTX1RTVF9JTkZPX2V4dF9mcmVlOworKwkJVFNfUkVRX2dldF92ZXJzaW9uOworKwkJVFNfUkVRX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhOworKwkJT0JKX2JzZWFyY2hfOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5Y3R4OworKwkJaTJkX1BLQ1M3X2Jpb19zdHJlYW07CisrCQlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWM7CisrCQlQS0NTN19zaWduX2FkZF9zaWduZXI7CisrCQlkMmlfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nOworKwkJVFNfUkVTUF9wcmludF9iaW87CisrCQlUU19UU1RfSU5GT19nZXRfZXh0czsKKysJCUhNQUNfQ1RYX2NvcHk7CisrCQlQS0NTNV9wYmUyX3NldF9pdjsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhzOworKwkJYjJpX1ByaXZhdGVLZXk7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhOworKwkJVFNfUkVRX3NldF9jZXJ0X3JlcTsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2s7CisrCQlUU19DT05GX3NldF9zZXJpYWw7CisrCQlUU19UU1RfSU5GT19mcmVlOworKwkJZDJpX1RTX1JFUV9mcDsKKysJCVRTX1JFU1BfdmVyaWZ5X3Jlc3BvbnNlOworKwkJaTJkX0VTU19JU1NVRVJfU0VSSUFMOworKwkJVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHM7CisrCQlFVlBfQ0lQSEVSX2RvX2FsbDsKKysJCWIyaV9Qcml2YXRlS2V5X2JpbzsKKysJCU9DU1BfQ0VSVElEX2R1cDsKKysJCVg1MDlfUFVCS0VZX2dldDBfcGFyYW07CisrCQlUU19NU0dfSU1QUklOVF9kdXA7CisrCQlQS0NTN19wcmludF9jdHg7CisrCQlpMmRfVFNfUkVRX2JpbzsKKysJCUVWUF93aGlybHBvb2w7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wYXJhbTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2VuY3J5cHQ7CisrCQlBU04xX1BDVFhfc2V0X2ZsYWdzOworKwkJaTJkX0VTU19DRVJUX0lEOworKwkJVFNfVkVSSUZZX0NUWF9uZXc7CisrCQlUU19SRVNQX0NUWF9zZXRfZXh0ZW5zaW9uX2NiOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdF9pbmZvX2NvbmQ7CisrCQlFVlBfUEtFWV92ZXJpZnk7CisrCQlXSElSTFBPT0xfRmluYWw7CisrCQlYNTA5X0NSTF9NRVRIT0RfbmV3OworKwkJRVZQX0RpZ2VzdFNpZ25GaW5hbDsKKysJCVRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5OworKwkJTkVUU0NBUEVfWDUwOV9pdDsKKysJCVRTX1JFU1BfY3JlYXRlX3Jlc3BvbnNlOworKwkJUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzOworKwkJVFNfVFNUX0lORk9fZ2V0X25vbmNlOworKwkJRVZQX1BLRVlfZGVjcnlwdF9vbGQ7CisrCQlUU19UU1RfSU5GT19zZXRfcG9saWN5X2lkOworKwkJVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW47CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5OworKwkJZDJpX1RTX1JFUTsKKysJCUVWUF9QS0VZX2FzbjFfZmluZF9zdHI7CisrCQlCSU9fZl9hc24xOworKwkJRVNTX1NJR05JTkdfQ0VSVF9uZXc7CisrCQlFVlBfUEJFX2ZpbmQ7CisrCQlYNTA5X0NSTF9nZXQwX2J5X2NlcnQ7CisrCQlFVlBfUEtFWV9kZXJpdmU7CisrCQlpMmRfVFNfUkVROworKwkJVFNfVFNUX0lORk9fZGVsZXRlX2V4dDsKKysJCUVTU19JU1NVRVJfU0VSSUFMX2ZyZWU7CisrCQlBU04xX1BDVFhfc2V0X3N0cl9mbGFnczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyOworKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2tleTsKKysJCVRTX0FDQ1VSQUNZX2dldF9taWxsaXM7CisrCQlUU19SRVNQX2dldF90b2tlbjsKKysJCVRTX0FDQ1VSQUNZX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3JlZ19hbGxfcGtleV9hc24xX21ldGhzOworKwkJWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQ1JZUFRPX1RIUkVBRElEX2hhc2g7CisrCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4OworKwkJVFNfUkVTUF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWU7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9uZXc7CisrCQlDTVNfYWRkMV9jcmw7CisrCQlQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3Q7CisrCQlUU19SRVNQX0NUWF9hZGRfbWQ7CisrCQlUU19UU1RfSU5GT19kdXA7CisrCQlFTkdJTkVfc2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCVBFTV93cml0ZV9iaW9fUGFyYW1ldGVyczsKKysJCVRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeTsKKysJCVg1MDlfQ1JMX2dldDBfYnlfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fc2V0X3ZlcnNpb247CisrCQlUU19SRVNQX0NUWF9nZXRfdHN0X2luZm87CisrCQlUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmU7CisrCQlDUllQVE9fVEhSRUFESURfZ2V0X2NhbGxiYWNrOworKwkJVFNfVFNUX0lORk9fZ2V0X3RzYTsKKysJCVRTX1NUQVRVU19JTkZPX25ldzsKKysJCUVWUF9QS0VZX0NUWF9nZXRfY2I7CisrCQlUU19SRVFfZ2V0X2V4dF9kMmk7CisrCQlHRU5FUkFMX05BTUVfc2V0MF9vdGhlcm5hbWU7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2NvdW50OworKwkJVFNfUkVTUF9DVFhfZ2V0X3JlcXVlc3Q7CisrCQlpMmRfTkVUU0NBUEVfWDUwOTsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHg7CisrCQlFVlBfUEtFWV9hc24xX2NvcHk7CisrCQlBU04xX1RZUEVfY21wOworKwkJRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkOworKwkJRVZQX1BLRVlfQ1RYX2ZyZWU7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfaXQ7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlRfZnA7CisrCQlYNTA5X1NUT1JFX2dldDFfY2VydHM7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbjsKKysJCWQyaV9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9zZXRfb3JkZXJpbmc7CisrCQlFVlBfUEJFX2FsZ19hZGRfdHlwZTsKKysJCVRTX1JFUV9zZXRfdmVyc2lvbjsKKysJCUVWUF9QS0VZX2dldDA7CisrCQlCSU9fYXNuMV9zZXRfc3VmZml4OworKwkJaTJkX1RTX1NUQVRVU19JTkZPOworKwkJRVZQX01EX2RvX2FsbDsKKysJCVRTX1RTVF9JTkZPX3NldF9hY2N1cmFjeTsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlOworKwkJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGU7CisrCQlFVlBfUEtFWV9tZXRoX2FkZDA7CisrCQlUU19UU1RfSU5GT19zZXRfdHNhOworKwkJRVZQX1BLRVlfbWV0aF9uZXc7CisrCQlXSElSTFBPT0xfVXBkYXRlOworKwkJVFNfQ09ORl9zZXRfYWNjdXJhY3k7CisrCQlBU04xX1BDVFhfc2V0X29pZF9mbGFnczsKKysJCUVTU19TSUdOSU5HX0NFUlRfZHVwOworKwkJZDJpX1RTX1JFUV9iaW87CisrCQlYNTA5X3RpbWVfYWRqX2V4OworKwkJVFNfUkVTUF9DVFhfYWRkX2ZsYWdzOworKwkJZDJpX1RTX1NUQVRVU19JTkZPOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X21zZzsKKysJCUJJT19hc24xX2dldF9zdWZmaXg7CisrCQlUU19SRVFfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mYWlsdXJlX2luZm87CisrCQlpMmRfVFNfUkVTUF9iaW87CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5OworKwkJUEVNX3dyaXRlX2Jpb19DTVNfc3RyZWFtOworKwkJVFNfUkVRX25ldzsKKysJCVRTX01TR19JTVBSSU5UX25ldzsKKysJCUVWUF9QS0VZX21ldGhfZmluZDsKKysJCUVWUF9QS0VZX2lkOworKwkJVFNfVFNUX0lORk9fc2V0X3NlcmlhbDsKKysJCWEyaV9HRU5FUkFMX05BTUU7CisrCQlUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlOworKwkJRVZQX1BLRVlfdmVyaWZ5X2luaXQ7CisrCQlUU19DT05GX3NldF9wb2xpY2llczsKKysJCUFTTjFfUENUWF9uZXc7CisrCQlFU1NfQ0VSVF9JRF9mcmVlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCVRTX01TR19JTVBSSU5UX2ZyZWU7CisrCQlUU19WRVJJRllfQ1RYX2luaXQ7CisrCQlQS0NTN19zdHJlYW07CisrCQlUU19SRVNQX0NUWF9zZXRfY2VydHM7CisrCQlUU19DT05GX3NldF9kZWZfcG9saWN5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqOworKwkJTkVUU0NBUEVfWDUwOV9uZXc7CisrCQlUU19BQ0NVUkFDWV9mcmVlOworKwkJVFNfUkVTUF9nZXRfdHN0X2luZm87CisrCQlFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXI7CisrCQlQRU1fcmVhZF9iaW9fUGFyYW1ldGVyczsKKysJCVRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7CisrCQlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9kdXA7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWljcm9zOworKwkJQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3M7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2NoZWNrOworKwkJQVNOMV9CSVRfU1RSSU5HX2NoZWNrOworKwkJWDUwOV9jaGVja19ha2lkOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbTsKKysJCWkyZF9BU04xX2Jpb19zdHJlYW07CisrCQlUU19YNTA5X0FMR09SX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2NsZWFudXA7CisrCQlFVlBfUEtFWV9hc24xX2ZyZWU7CisrCQlFU1NfU0lHTklOR19DRVJUX2ZyZWU7CisrCQlUU19UU1RfSU5GT19zZXRfbXNnX2ltcHJpbnQ7CisrCQlHRU5FUkFMX05BTUVfY21wOworKwkJZDJpX0FTTjFfU0VUX0FOWTsKKysJCUVOR0lORV9zZXRfcGtleV9tZXRoczsKKysJCWkyZF9UU19SRVFfZnA7CisrCQlkMmlfQVNOMV9TRVFVRU5DRV9BTlk7CisrCQlHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWU7CisrCQlkMmlfRVNTX0NFUlRfSUQ7CisrCQlPQkpfZmluZF9zaWdpZF9hbGdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuOworKwkJUEtDUzVfUEJLREYyX0hNQUM7CisrCQlFVlBfUEtFWV9wYXJhbWdlbjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuOworKwkJQklPX25ld19QS0NTNzsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyOworKwkJVFNfZXh0X3ByaW50X2JpbzsKKysJCVRTX0FTTjFfSU5URUdFUl9wcmludF9iaW87CisrCQljaGVja19kZWZlcjsKKysJCURTT19wYXRoYnlhZGRyOworKwkJRVZQX1BLRVlfc2V0X3R5cGU7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWljcm9zOworKwkJVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFg7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jb3B5OworKwkJQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2N0cmw7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJRVZQX1BLRVlfQ1RYX25ld19pZDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X09CSjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0OworKwkJWDUwOV9OQU1FX2hhc2hfb2xkOworKwkJQVNOMV9USU1FX3NldF9zdHJpbmc7CisrCQlFVlBfTURfZmxhZ3M7CisrCQlUU19SRVNQX0NUWF9mcmVlOworKwkJRFNBcGFyYW1zX2R1cDsKKysJCURIcGFyYW1zX2R1cDsKKysJCU9DU1BfUkVRX0NUWF9hZGQxX2hlYWRlcjsKKysJCU9DU1BfUkVRX0NUWF9zZXQxX3JlcTsKKysJCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9jcmw7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfaXNzdWVyOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJfaXNzdWVyOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkOworKwkJRVZQX0NJUEhFUl9DVFhfY29weTsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCUVWUF9yZWFkX3B3X3N0cmluZ19taW47CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdDsKKysJCUNSWVBUT19jYmMxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19vZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19jYmMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfOF9lbmNyeXB0OworKworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKKysKKytPUEVOU1NMXzEuMC4xIHsKKysJZ2xvYmFsOgorKwkJU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkOworKwkJVExTdjFfMV9tZXRob2Q7CisrCQlUTFN2MV8xX2NsaWVudF9tZXRob2Q7CisrCQlUTFN2MV8xX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NiOworKwkJU1NMX2dldF9zcnBfZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF91bl9jYjsKKysJCVNTTF9nZXRfc3JwX3VzZXJpbmZvOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3OworKwkJU1NMX2dldF9zcnBfTjsKKysJCVNTTF9nZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkOworKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoOworKwkJU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF92ZnlfcGFyYW1fY2I7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnOworKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9TUlBfQ1RYX2luaXQ7CisrCQlTU0xfU1JQX0NUWF9pbml0OworKwkJU1JQX0NhbGNfQV9wYXJhbTsKKysJCVNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfQ1RYX1NSUF9DVFhfZnJlZTsKKysJCVNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lOworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91bjsKKysJCVNTTF9TUlBfQ1RYX2ZyZWU7CisrCQlTU0xfc2V0X2RlYnVnOworKwkJU1NMX1NFU1NJT05fZ2V0MF9wZWVyOworKwkJVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0OworKwkJVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX2NhY2hlX2hpdDsKKysJCVNTTF9nZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldDBfa3NzbF9jdHg7CisrCQlTU0xfc2V0X3N0YXRlOworKwkJU1NMX0NJUEhFUl9nZXRfaWQ7CisrCQlUTFN2MV8yX21ldGhvZDsKKysJCWtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jOworKwkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWw7CisrCQlTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2I7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2I7CisrCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQ7CisrCQlTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZTsKKysJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9zZWxlY3RfbmV4dF9wcm90bzsKKysJCVNTTF9nZXRfc3J0cF9wcm9maWxlczsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxfY2I7CisrCQlTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQ7CisrCisrCQlTUlBfVkJBU0VfZ2V0X2J5X3VzZXI7CisrCQlTUlBfQ2FsY19zZXJ2ZXJfa2V5OworKwkJU1JQX2NyZWF0ZV92ZXJpZmllcjsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXJfQk47CisrCQlTUlBfQ2FsY191OworKwkJU1JQX1ZCQVNFX2ZyZWU7CisrCQlTUlBfQ2FsY19jbGllbnRfa2V5OworKwkJU1JQX2dldF9kZWZhdWx0X2dOOworKwkJU1JQX0NhbGNfeDsKKysJCVNSUF9DYWxjX0I7CisrCQlTUlBfVkJBU0VfbmV3OworKwkJU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtOworKwkJU1JQX0NhbGNfQTsKKysJCVNSUF9WZXJpZnlfQV9tb2RfTjsKKysJCVNSUF9WQkFTRV9pbml0OworKwkJU1JQX1ZlcmlmeV9CX21vZF9OOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlczsKKysJCUVDX0tFWV9zZXRfcHViX2tleV9hZmZfY29vcmRzOworKwkJRVZQX2Flc18xOTJfY3RyOworKwkJRVZQX1BLRVlfbWV0aF9nZXQwX2luZm87CisrCQlFVlBfUEtFWV9tZXRoX2NvcHk7CisrCQlFUlJfYWRkX2Vycm9yX3ZkYXRhOworKwkJRVZQX2Flc18xMjhfY3RyOworKwkJRVZQX2Flc18yNTZfY3RyOworKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfZmxhZ3M7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF94dHM7CisrCQlFVlBfYWVzXzI1Nl94dHM7CisrCQlFVlBfYWVzXzEyOF9nY207CisrCQlFQ19LRVlfY2xlYXJfZmxhZ3M7CisrCQlFQ19LRVlfc2V0X2ZsYWdzOworKwkJRVZQX2Flc18yNTZfY2NtOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMTsKKysJCUVWUF9hZXNfMTI4X2NjbTsKKysJCUVWUF9hZXNfMTkyX2djbTsKKysJCVg1MDlfQUxHT1Jfc2V0X21kOworKwkJUkFORF9pbml0X2ZpcHM7CisrCQlFVlBfYWVzXzI1Nl9nY207CisrCQlFVlBfYWVzXzE5Ml9jY207CisrCQlDTUFDX0NUWF9jb3B5OworKwkJQ01BQ19DVFhfZnJlZTsKKysJCUNNQUNfQ1RYX2dldDBfY2lwaGVyX2N0eDsKKysJCUNNQUNfQ1RYX2NsZWFudXA7CisrCQlDTUFDX0luaXQ7CisrCQlDTUFDX1VwZGF0ZTsKKysJCUNNQUNfcmVzdW1lOworKwkJQ01BQ19DVFhfbmV3OworKwkJQ01BQ19GaW5hbDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfcmVsZWFzZTsKKysJCUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NDsKKysJCUNSWVBUT19jY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT19nY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT194dHMxMjhfZW5jcnlwdDsKKysJCUVWUF9yYzRfaG1hY19tZDU7CisrCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2djbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHQ7CisrCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExOworKwkJQ1JZUFRPX2djbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHRfY2NtNjQ7CisrCQlFTkdJTkVfbG9hZF9yZHJhbmQ7CisrCQlDUllQVE9fY2NtMTI4X3NldGl2OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfYWFkOworKwkJQ1JZUFRPX2NjbTEyOF9pbml0OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19nY20xMjhfbmV3OworKwkJQ1JZUFRPX2NjbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2NtMTI4X2FhZDsKKysJCUNSWVBUT19nY20xMjhfaW5pdDsKKysJCUNSWVBUT19nY20xMjhfZGVjcnlwdDsKKysJCUVOR0lORV9sb2FkX3JzYXg7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2ZpbmlzaDsKKysJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTE7CisrCQlQS0NTNV9wYmtkZjJfc2V0OworKwkJQ01TX2FkZDBfcmVjaXBpZW50X3Bhc3N3b3JkOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZDsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGFzc3dvcmQ7CisrCQlSQU5EX3NldF9maXBzX2RyYmdfdHlwZTsKKysJCVg1MDlfUkVRX3NpZ25fY3R4OworKwkJUlNBX1BTU19QQVJBTVNfbmV3OworKwkJWDUwOV9DUkxfc2lnbl9jdHg7CisrCQlYNTA5X3NpZ25hdHVyZV9kdW1wOworKwkJZDJpX1JTQV9QU1NfUEFSQU1TOworKwkJUlNBX1BTU19QQVJBTVNfaXQ7CisrCQlSU0FfUFNTX1BBUkFNU19mcmVlOworKwkJWDUwOV9zaWduX2N0eDsKKysJCWkyZF9SU0FfUFNTX1BBUkFNUzsKKysJCUFTTjFfaXRlbV9zaWduX2N0eDsKKysJCUVDX0dGcF9uaXN0cDUyMV9tZXRob2Q7CisrCQlFQ19HRnBfbmlzdHAyNTZfbWV0aG9kOworKwkJT1BFTlNTTF9zdGRlcnI7CisrCQlPUEVOU1NMX2NwdWlkX3NldHVwOworKwkJT1BFTlNTTF9zaG93ZmF0YWw7CisrCQlCSU9fbmV3X2RncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZzsKKysJCUJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeTsKKysJCUJJT19zX2RhdGFncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1faXNfc2N0cDsKKysJCUJJT19kZ3JhbV9zY3RwX25vdGlmaWNhdGlvbl9jYjsKKyt9IE9QRU5TU0xfMS4wLjA7CisrCisrT1BFTlNTTF8xLjAuMWQgeworKwlnbG9iYWw6CisrCQlDUllQVE9fbWVtY21wOworK30gT1BFTlNTTF8xLjAuMTsKKysKKytPUEVOU1NMXzEuMC4yIHsKKysJZ2xvYmFsOgorKwkJU1NMX0NUWF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2I7CisrCQlTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkOworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX2NsaV9leHQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fc3J2X2V4dDsKKysJCVNTTF9DVFhfc2V0X3Nydl9zdXBwX2RhdGE7CisrCQlTU0xfQ1RYX3NldF9jbGlfc3VwcF9kYXRhOworKwkJU1NMX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mbzsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm9fZmlsZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldDBfcGFyYW07CisrCQlTU0xfZ2V0MF9wYXJhbTsKKysJCVNTTF9jZXJ0c19jbGVhcjsKKysJCURUTFN2MV8yX21ldGhvZDsKKysJCURUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJRFRMU19tZXRob2Q7CisrCQlEVExTX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF9nZXQwX3ByaXZhdGVrZXk7CisrCQlTU0xfQ09NUF9zZXQwX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9mcmVlX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ0lQSEVSX2ZpbmQ7CisrCQlTU0xfaXNfc2VydmVyOworKwkJU1NMX0NPTkZfQ1RYX25ldzsKKysJCVNTTF9DT05GX0NUWF9maW5pc2g7CisrCQlTU0xfQ09ORl9DVFhfZnJlZTsKKysJCVNTTF9DT05GX0NUWF9zZXRfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfc2V0MV9wcmVmaXg7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsX2N0eDsKKysJCVNTTF9DT05GX2NtZDsKKysJCVNTTF9DT05GX2NtZF9hcmd2OworKwkJU1NMX0NPTkZfY21kX3ZhbHVlX3R5cGU7CisrCQlTU0xfdHJhY2U7CisrCQlTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWU7CisrCQlTU0xfZ2V0X3Rsc2FfcmVjb3JkX2J5bmFtZTsKKysJCUFTTjFfVElNRV9kaWZmOworKwkJQklPX2hleF9zdHJpbmc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fZW5jcnlwdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX21kX2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmF0dXJlOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2FsZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9yZWtzOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX29yaWdfaWQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX29yaWdfaWRfY21wOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9nZXQwX2lkOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfc2V0MF9wa2V5OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZGVjcnlwdDsKKysJCUNNU19TaGFyZWRJbmZvX2VuY29kZTsKKysJCURIX2NvbXB1dGVfa2V5X3BhZGRlZDsKKysJCWQyaV9ESHhwYXJhbXM7CisrCQlpMmRfREh4cGFyYW1zOworKwkJREhfZ2V0XzEwMjRfMTYwOworKwkJREhfZ2V0XzIwNDhfMjI0OworKwkJREhfZ2V0XzIwNDhfMjU2OworKwkJREhfS0RGX1g5XzQyOworKwkJRUNESF9LREZfWDlfNjI7CisrCQlFQ0RTQV9NRVRIT0RfbmV3OworKwkJRUNEU0FfTUVUSE9EX2ZyZWU7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX2dldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbjsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbl9zZXR1cDsKKysJCUVDRFNBX01FVEhPRF9zZXRfdmVyaWZ5OworKwkJRUNEU0FfTUVUSE9EX3NldF9mbGFnczsKKysJCUVDRFNBX01FVEhPRF9zZXRfbmFtZTsKKysJCUVWUF9kZXNfZWRlM193cmFwOworKwkJRVZQX2Flc18xMjhfd3JhcDsKKysJCUVWUF9hZXNfMTkyX3dyYXA7CisrCQlFVlBfYWVzXzI1Nl93cmFwOworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMjU2OworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMjU2OworKwkJQ1JZUFRPXzEyOF93cmFwOworKwkJQ1JZUFRPXzEyOF91bndyYXA7CisrCQlPQ1NQX1JFUV9DVFhfbmJpbzsKKysJCU9DU1BfUkVRX0NUWF9uZXc7CisrCQlPQ1NQX3NldF9tYXhfcmVzcG9uc2VfbGVuZ3RoOworKwkJT0NTUF9SRVFfQ1RYX2kyZDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvX2QyaTsKKysJCU9DU1BfUkVRX0NUWF9nZXQwX21lbV9iaW87CisrCQlPQ1NQX1JFUV9DVFhfaHR0cDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfT0FFUF9QQVJBTVNfZnJlZTsKKysJCVJTQV9PQUVQX1BBUkFNU19pdDsKKysJCVJTQV9PQUVQX1BBUkFNU19uZXc7CisrCQlTU0xfZ2V0X3NpZ2FsZ3M7CisrCQlTU0xfZ2V0X3NoYXJlZF9zaWdhbGdzOworKwkJU1NMX2NoZWNrX2NoYWluOworKwkJWDUwOV9jaGFpbl91cF9yZWY7CisrCQlYNTA5X2h0dHBfbmJpbzsKKysJCVg1MDlfQ1JMX2h0dHBfbmJpbzsKKysJCVg1MDlfUkVWT0tFRF9kdXA7CisrCQlpMmRfcmVfWDUwOV90YnM7CisrCQlYNTA5X2dldDBfc2lnbmF0dXJlOworKwkJWDUwOV9nZXRfc2lnbmF0dXJlX25pZDsKKysJCVg1MDlfQ1JMX2RpZmY7CisrCQlYNTA5X2NoYWluX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfQ1JMX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfY2hlY2tfaG9zdDsKKysJCVg1MDlfY2hlY2tfZW1haWw7CisrCQlYNTA5X2NoZWNrX2lwOworKwkJWDUwOV9jaGVja19pcF9hc2M7CisrCQlYNTA5X1NUT1JFX3NldF9sb29rdXBfY3Jsc19jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9wZWVybmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfZW1haWw7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfY291bnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwOworKwkJWDUwOVYzX0VYVF9mcmVlOworKwkJRUNfR1JPVVBfZ2V0X21vbnRfZGF0YTsKKysJCUVDX2N1cnZlX25pZDJuaXN0OworKwkJRUNfY3VydmVfbmlzdDJuaWQ7CisrCQlQRU1fd3JpdGVfYmlvX0RIeHBhcmFtczsKKysJCVBFTV93cml0ZV9ESHhwYXJhbXM7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfY3VzdG9tX2V4dDsKKysJCVNTTF9DVFhfYWRkX3NlcnZlcl9jdXN0b21fZXh0OworKwkJU1NMX2V4dGVuc2lvbl9zdXBwb3J0ZWQ7CisrCQlCVUZfc3RybmxlbjsKKysJCXNrX2RlZXBfY29weTsKKysJCVNTTF90ZXN0X2Z1bmN0aW9uczsKKyt9IE9QRU5TU0xfMS4wLjFkOworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNiY2QxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbTogUmFwaGFlbCBHZWlzc2VydCA8Z2Vpc3NlcnRAZGViaWFuLm9yZz4KK0Rlc2NyaXB0aW9uOiBtYWtlIFg1MDlfdmVyaWZ5X2NlcnQgaW5kaWNhdGUgdGhhdCBhbnkgY2VydGlmaWNhdGUgd2hvc2UKKyBuYW1lIGNvbnRhaW5zICJEaWdpY2VydCBTZG4uIEJoZC4iIChmcm9tIE1hbGF5c2lhKSBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMTEtMDUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yfmJldGExLm9yaWcvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4ODAyODg0NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4NDAyODkyOSArMDEwMAorQEAgLTk2NCwxMCArOTY0LDExIEBACisgCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisgCQl7CisgCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKy0JCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKy0JCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCS8qIE1hcmsgY2VydGlmaWNhdGVzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBuYW1lcyBhcworKwkJICogcmV2b2tlZCwgbm8gbWF0dGVyIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKyAJCSAqLworLQkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCWlmICh4LT5uYW1lICYmIChzdHJzdHIoeC0+bmFtZSwgIkRpZ2lOb3RhciIpIHx8CisrCQkJc3Ryc3RyKHgtPm5hbWUsICJEaWdpY2VydCBTZG4uIEJoZC4iKSkpCisgCQkJeworIAkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDsKKyAJCQljdHgtPmVycm9yX2RlcHRoID0gaTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzFhMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb206IFJhcGhhZWwgR2Vpc3NlcnQgPGdlaXNzZXJ0QGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogbWFrZSBYNTA5X3ZlcmlmeV9jZXJ0IGluZGljYXRlIHRoYXQgYW55IGNlcnRpZmljYXRlIHdob3NlCisgbmFtZSBjb250YWlucyAiRGlnaU5vdGFyIiBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMDktMDgKK0J1ZzogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Mzk3NDQKK1Jldmlld2VkLWJ5OiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitSZXZpZXdlZC1ieTogRHIgU3RlcGhlbiBOIEhlbnNvbiA8c2hlbnNvbkBkcmgtY29uc3VsdGFuY3kuY28udWs+CisKK1RoaXMgaXMgbm90IG1lYW50IGFzIGZpbmFsIHBhdGNoLiAgCisgCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCitAQCAtMTE5LDYgKzExOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfdHJ1c3QoWDUwOV9TVE9SRV9DVFggKmMKKyBzdGF0aWMgaW50IGNoZWNrX3Jldm9jYXRpb24oWDUwOV9TVE9SRV9DVFggKmN0eCk7Cisgc3RhdGljIGludCBjaGVja19jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIHN0YXRpYyBpbnQgY2hlY2tfcG9saWN5KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIAorIHN0YXRpYyBpbnQgZ2V0X2NybF9zY29yZShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5ICoqcGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwcmVhc29ucywgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCk7CitAQCAtNDM4LDYgKzQzOSw5IEBAIGludCBYNTA5X3ZlcmlmeV9jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgKKyAgICAgaWYgKCFvaykKKyAgICAgICAgIGdvdG8gZW5kOworIAorKwlvayA9IGNoZWNrX2NhX2JsYWNrbGlzdChjdHgpOworKwlpZighb2spIGdvdG8gZW5kOworKworICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CisgICAgIC8qIFJGQyAzNzc5IHBhdGggdmFsaWRhdGlvbiwgbm93IHRoYXQgQ1JMIGNoZWNrIGhhcyBiZWVuIGRvbmUgKi8KKyAgICAgb2sgPSB2M19hc2lkX3ZhbGlkYXRlX3BhdGgoY3R4KTsKK0BAIC05MzgsNiArOTQyLDI5IEBAIHN0YXRpYyBpbnQgY2hlY2tfY3JsX3RpbWUoWDUwOV9TVE9SRV9DVFgKKyAgICAgcmV0dXJuIDE7CisgfQorIAorK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpCisrCXsKKysJWDUwOSAqeDsKKysJaW50IGk7CisrCS8qIENoZWNrIGFsbCBjZXJ0aWZpY2F0ZXMgYWdhaW5zdCB0aGUgYmxhY2tsaXN0ICovCisrCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisrCQl7CisrCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKysJCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKysJCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCSAqLworKwkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCQl7CisrCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEOworKwkJCWN0eC0+ZXJyb3JfZGVwdGggPSBpOworKwkJCWN0eC0+Y3VycmVudF9jZXJ0ID0geDsKKysJCQlpZiAoIWN0eC0+dmVyaWZ5X2NiKDAsY3R4KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworIHN0YXRpYyBpbnQgZ2V0X2NybF9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKnBjcmwsIFg1MDlfQ1JMICoqcGRjcmwsCisgICAgICAgICAgICAgICAgICAgICAgIFg1MDkgKipwaXNzdWVyLCBpbnQgKnBzY29yZSwgdW5zaWduZWQgaW50ICpwcmVhc29ucywKKyAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc0NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvZW5naW5lcy9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvZW5naW5lcy9NYWtlZmlsZQorQEAgLTEwNywxMyArMTA3LDEzIEBAIGluc3RhbGw6CisgCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKyAJQGlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKyAJCXNldCAtZTsgXAorLQkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lczsgXAorKwkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXM7IFwKKyAJCWZvciBsIGluICQoTElCTkFNRVMpOyBkbyBcCisgCQkJKCBlY2hvIGluc3RhbGxpbmcgJCRsOyBcCisgCQkJICBwZng9bGliOyBcCisgCQkJICBpZiBleHByICIkKFBMQVRGT1JNKSIgOiAiQ3lnd2luIiA+L2Rldi9udWxsOyB0aGVuIFwKKyAJCQkJc2Z4PSIuc28iOyBcCistCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgZWxzZSBcCisgCQkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCQkqRFNPX0JFT1MqKQlzZng9Ii5zbyI7OwlcCitAQCAtMTIyLDEwICsxMjIsMTAgQEAgaW5zdGFsbDoKKyAJCQkJKkRTT19XSU4zMiopCXNmeD0iZWF5MzIuZGxsIjsgcGZ4PTs7CVwKKyAJCQkJKikJCXNmeD0iLmJhZCI7OwlcCisgCQkJCWVzYWM7IFwKKy0JCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKysJCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBmaTsgXAorLQkJCSAgY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorLQkJCSAgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4ICk7IFwKKysJCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCisgCQlkb25lOyBcCisgCWZpCisgCUB0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfTUFLRSkKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi9lbmdpbmVzL2NjZ29zdC9NYWtlZmlsZQorQEAgLTQ3LDcgKzQ3LDcgQEAgaW5zdGFsbDoKKyAJCXBmeD1saWI7IFwKKyAJCWlmIGV4cHIgIiQoUExBVEZPUk0pIiA6ICJDeWd3aW4iID4vZGV2L251bGw7IHRoZW4gXAorIAkJCXNmeD0iLnNvIjsgXAorLQkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKyAJCWVsc2UgXAorIAkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCSpEU09fQkVPUyopIHNmeD0iLnNvIjs7IFwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5zdGFsbDoKKyAJCQkqRFNPX1dJTjMyKikgc2Z4PSJlYXkzMi5kbGwiOyBwZng9OzsgXAorIAkJCSopIHNmeD0iLmJhZCI7OyBcCisgCQkJZXNhYzsgXAorLQkJCWNwICQke3BmeH0kKExJQk5BTUUpJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisrCQkJY3AgJCR7cGZ4fSQoTElCTkFNRSkkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisgCQlmaTsgXAorLQkJY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorLQkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4OyBcCisrCQljaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZng7IFwKKyAJZmkKKyAKKyBsaW5rczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maW5kLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWI0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maW5kLnBsCkBAIC0wLDAgKzEsNTQgQEAKK3dhcm4gIkxlZ2FjeSBsaWJyYXJ5IEB7WyhjYWxsZXIoMCkpWzZdXX0gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSB0aGUgQ1BBTiBkaXN0cmlidXRpb24gUGVybDQ6OkNvcmVMaWJzLiBJdCBpcyBiZWluZyB1c2VkIGF0IEB7WyhjYWxsZXIpWzFdXX0sIGxpbmUgQHtbKGNhbGxlcilbMl1dfS5cbiI7CisKKyMgVGhpcyBsaWJyYXJ5IGlzIGRlcHJlY2F0ZWQgYW5kIHVubWFpbnRhaW5lZC4gSXQgaXMgaW5jbHVkZWQgZm9yCisjIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsIDQgc2NyaXB0cyB3aGljaCBtYXkgdXNlIGl0LCBidXQgaXQgd2lsbCBiZQorIyByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUGVybC4gUGxlYXNlIHVzZSB0aGUgRmlsZTo6RmluZCBtb2R1bGUKKyMgaW5zdGVhZC4KKworIyBVc2FnZToKKyMJcmVxdWlyZSAiZmluZC5wbCI7CisjCisjCSZmaW5kKCcvZm9vJywnL2JhcicpOworIworIwlzdWIgd2FudGVkIHsgLi4uIH0KKyMJCXdoZXJlIHdhbnRlZCBkb2VzIHdoYXRldmVyIHlvdSB3YW50LiAgJGRpciBjb250YWlucyB0aGUKKyMJCWN1cnJlbnQgZGlyZWN0b3J5IG5hbWUsIGFuZCAkXyB0aGUgY3VycmVudCBmaWxlbmFtZSB3aXRoaW4KKyMJCXRoYXQgZGlyZWN0b3J5LiAgJG5hbWUgY29udGFpbnMgIiRkaXIvJF8iLiAgWW91IGFyZSBjZCdlZAorIwkJdG8gJGRpciB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuICBUaGUgZnVuY3Rpb24gbWF5CisjCQlzZXQgJHBydW5lIHRvIHBydW5lIHRoZSB0cmVlLgorIworIyBGb3IgZXhhbXBsZSwKKyMKKyMgICBmaW5kIC8gLW5hbWUgLm5mc1wqIC1tdGltZSArNyAtZXhlYyBybSAtZiB7fSBcOyAtbyAtZnN0eXBlIG5mcyAtcHJ1bmUKKyMKKyMgY29ycmVzcG9uZHMgdG8gdGhpcworIworIwlzdWIgd2FudGVkIHsKKyMJICAgIC9eXC5uZnMuKiQvICYmCisjCSAgICAoKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkKSA9IGxzdGF0KCRfKSkgJiYKKyMJICAgIGludCgtTSBfKSA+IDcgJiYKKyMJICAgIHVubGluaygkXykKKyMJICAgIHx8CisjCSAgICAoJG5saW5rIHx8ICgoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQpID0gbHN0YXQoJF8pKSkgJiYKKyMJICAgICRkZXYgPCAwICYmCisjCSAgICAoJHBydW5lID0gMSk7CisjCX0KKyMKKyMgU2V0IHRoZSB2YXJpYWJsZSAkZG9udF91c2VfbmxpbmsgaWYgeW91J3JlIHVzaW5nIEFGUywgc2luY2UgQUZTIGNoZWF0cy4KKwordXNlIEZpbGU6OkZpbmQgKCk7CisKKypuYW1lCQk9ICpGaWxlOjpGaW5kOjpuYW1lOworKnBydW5lCQk9ICpGaWxlOjpGaW5kOjpwcnVuZTsKKypkaXIJCT0gKkZpbGU6OkZpbmQ6OmRpcjsKKyp0b3BkaXIJCT0gKkZpbGU6OkZpbmQ6OnRvcGRpcjsKKyp0b3BkZXYJCT0gKkZpbGU6OkZpbmQ6OnRvcGRldjsKKyp0b3Bpbm8JCT0gKkZpbGU6OkZpbmQ6OnRvcGlubzsKKyp0b3Btb2RlCT0gKkZpbGU6OkZpbmQ6OnRvcG1vZGU7CisqdG9wbmxpbmsJPSAqRmlsZTo6RmluZDo6dG9wbmxpbms7CisKK3N1YiBmaW5kIHsKKyAgICAmRmlsZTo6RmluZDo6ZmluZChcJndhbnRlZCwgQF8pOworfQorCisxOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDFlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworVGhpcyBwYXRjaCBhZGRzIHRoZSBmaXggZm9yIG9uZSBvZiB0aGUgY2lwaGVycyB1c2VkIGluIG9wZW5zc2wsIG5hbWVseQordGhlIGNpcGhlciBkZXMtZWRlMy1jZmIxLiBDb21wbGV0ZSBidWcgbG9nIGFuZCBwYXRjaCBpcyBwcmVzZW50IGhlcmU6CitodHRwOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yODY3CisKK1NpZ25lZC1PZmYtQnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9lX2RlczMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2VfZGVzMy5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCitAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiMV9jaXBoZXIoRVZQX0NJUEgKKyAgICAgc2l6ZV90IG47CisgICAgIHVuc2lnbmVkIGNoYXIgY1sxXSwgZFsxXTsKKyAKKy0gICAgZm9yIChuID0gMDsgbiA8IGlubDsgKytuKSB7CisrICAgIGZvciAobiA9IDA7IG4gKiA4IDwgaW5sOyArK24pIHsKKyAgICAgICAgIGNbMF0gPSAoaW5bbiAvIDhdICYgKDEgPDwgKDcgLSBuICUgOCkpKSA/IDB4ODAgOiAwOworICAgICAgICAgREVTX2VkZTNfY2ZiX2VuY3J5cHQoYywgZCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb2UtbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyZTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuLWVtYmVkZGVkXQorCitJbmRleDogb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvTWFrZWZpbGUuc2hhcmVkCisrKysgb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKK0BAIC05Miw3ICs5Miw3IEBACisgTElOS19BUFA9CVwKKyAgICggJChTRVRfWCk7ICAgXAorICAgICBMSUJERVBTPSIkJHtMSUJERVBTOi0kKExJQkRFUFMpfSI7IFwKKy0gICAgTERDTUQ9IiQke0xEQ01EOi0kKENDKX0iOyBMREZMQUdTPSIkJHtMREZMQUdTOi0kKENGTEFHUyl9IjsgXAorKyAgICBMRENNRD0iJCR7TERDTUQ6LSQoQ0MpfSI7IExERkxBR1M9IiQoT0VfTERGTEFHUykgJCR7TERGTEFHUzotJChDRkxBR1MpfSI7IFwKKyAgICAgTElCUEFUSD1gZm9yIHggaW4gJCRMSUJERVBTOyBkbyBlY2hvICQkeDsgZG9uZSB8IHNlZCAtZSAncy9eICotTC8vO3QnIC1lIGQgfCB1bmlxYDsgXAorICAgICBMSUJQQVRIPWBlY2hvICQkTElCUEFUSCB8IHNlZCAtZSAncy8gLzovZydgOyBcCisgICAgIExEX0xJQlJBUllfUEFUSD0kJExJQlBBVEg6JCRMRF9MSUJSQVJZX1BBVEggXAorQEAgLTEwMiw3ICsxMDIsNyBAQAorICAgKCAkKFNFVF9YKTsgICBcCisgICAgIExJQkRFUFM9IiQke0xJQkRFUFM6LSQoTElCREVQUyl9IjsgXAorICAgICBTSEFSRURDTUQ9IiQke1NIQVJFRENNRDotJChDQyl9IjsgXAorLSAgICBTSEFSRURGTEFHUz0iJCR7U0hBUkVERkxBR1M6LSQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKX0iOyBcCisrICAgIFNIQVJFREZMQUdTPSIkKE9FX0xERkxBR1MpICQke1NIQVJFREZMQUdTOi0kKENGTEFHUykgJChTSEFSRURfTERGTEFHUyl9IjsgXAorICAgICBMSUJQQVRIPWBmb3IgeCBpbiAkJExJQkRFUFM7IGRvIGVjaG8gJCR4OyBkb25lIHwgc2VkIC1lICdzL14gKi1MLy87dCcgLWUgZCB8IHVuaXFgOyBcCisgICAgIExJQlBBVEg9YGVjaG8gJCRMSUJQQVRIIHwgc2VkIC1lICdzLyAvOi9nJ2A7IFwKKyAgICAgTERfTElCUkFSWV9QQVRIPSQkTElCUEFUSDokJExEX0xJQlJBUllfUEFUSCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTViZmExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitodHRwczovL3J0Lm9wZW5zc2wub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9Mzc1OSZ1c2VyPWd1ZXN0JnBhc3M9Z3Vlc3QKKworRnJvbSA2MjU3ZDU5YjNhNjhkMmZlYjlkNjQzMTdhMWM1NTZkYzM4MTNlZTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZTogU2F0LCAyMSBNYXIgMjAxNSAwNjowMToyNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHVzZSBiaWdpbnQgaW4geDg2LTY0IHBlcmwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorCitXaGVuIGJ1aWxkaW5nIG9uIHgzMiBzeXN0ZW1zIHdoZXJlIHRoZSBkZWZhdWx0IHR5cGUgaXMgMzJiaXQsIG1ha2Ugc3VyZQord2UgY2FuIHRyYW5zcGFyZW50bHkgcmVwcmVzZW50IDY0Yml0IGludGVnZXJzLiAgT3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoCitidWlsZCBlcnJvcnMgbGlrZToKKy91c3IvYmluL3BlcmwgYXNtL2doYXNoLXg4Nl82NC5wbCBlbGYgPiBnaGFzaC14ODZfNjQucworSW50ZWdlciBvdmVyZmxvdyBpbiBoZXhhZGVjaW1hbCBudW1iZXIgYXQgYXNtLy4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGxpbmUgMjAxLCA8PiBsaW5lIDg5MC4KKy4uLgorZ2hhc2gteDg2XzY0LnM6IEFzc2VtYmxlciBtZXNzYWdlczoKK2doYXNoLXg4Nl82NC5zOjg5MDogRXJyb3I6IGp1bmsgJy4xNTQ3MzM1NTQ3OTk5NWUrMTknIGFmdGVyIGV4cHJlc3Npb24KKworV2UgZG9uJ3QgZW5hYmxlIHRoaXMgZ2xvYmFsbHkgYXMgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgd2UnZCBnZXQKKzMyYml0IHZhbHVlcyBpbnRlcnByZXRlZCBhcyB1bnNpZ25lZCB3aGVuIHdlIG5lZWQgdGhlbSBhcyBzaWduZWQuCisKK1JlcG9ydGVkLWJ5OiBCZXJ0cmFuZCBKYWNxdWluIDxiZXJ0cmFuZEBqYWNxdWluLmJ6aD4KK1VSTDogaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvNTQyNjE4CistLS0KKyBjcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKK2luZGV4IGFhZTgyODguLjBiZjk3NzQgMTAwNzU1CistLS0gYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKKysrKyBiL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorQEAgLTE5NSw2ICsxOTUsMTAgQEAgbXkgJWdsb2JhbHM7CisgICAgIHN1YiBvdXQgeworICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKKyAKKysJIyBXaGVuIGJ1aWxkaW5nIG9uIHgzMiBBQklzLCB0aGUgZXhwYW5kZWQgaGV4IHZhbHVlIG1pZ2h0IGJlIHRvbworKwkjIGJpZyB0byBmaXQgaW50byAzMmJpdHMuICBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KKy0tIAorMi4zLjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJjOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorb3BlbnNzbDogYXZvaWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEVWUF9EaWdlc3RJbml0X2V4KCkKKworV2Ugc2hvdWxkIGF2b2lkIGFjY2Vzc2luZyB0aGUgdHlwZSBwb2ludGVyIGlmIGl0J3MgTlVMTCwKK3RoaXMgY291bGQgaGFwcGVuIGlmIGN0eC0+ZGlnZXN0IGlzIG5vdCBOVUxMLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5zc2wtZGV2QG9wZW5zc2wub3JnL21zZzMyODYwLmh0bWwKKworU2lnbmVkLW9mZi1ieTogWHVmZW5nIFpoYW5nIDx4dWZlbmcuemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9kaWdlc3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCitAQCAtMjA4LDcgKzIwOCw3IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgI2VuZGlmCistICAgIGlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSB7CisrICAgIGlmICh0eXBlICYmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSkgeworICAgICAgICAgaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDk3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK29wZW5zc2w6IEZpeCBwb2QybWFuIGRlcy5wb2QgZXJyb3Igb24gVWJ1bnR1IDEyLjA0CisKK1RoaXMgaXMgYSBmb3JtYXR0aW5nIGZpeCwgJz1iYWNrJyBpcyByZXF1aXJlZCBiZWZvcmUKKyc9aGVhZDEnIG9uIFVidW50dSAxMi4wNC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gU2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorZGlmZiAtdXJwTiBhX29yaWdpbi9kZXMucG9kIGJfbW9kaWZ5L2Rlcy5wb2QKKy0tLSBhX29yaWdpbi9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowMjo1Ni4yMTE2NzQ1ODkgKzA4MDAKKysrKyBiX21vZGlmeS9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowNDoxNC40Mzk2NzQ1ODAgKzA4MDAKK0BAIC0xODEsNiArMTgxLDggQEAgdGhlIHV1ZW5jb2RlZCBmaWxlIHRvIGVtYmVkIGluIHRoZSBiZWdpbgorIG91dHB1dC4gIElmIHRoZXJlIGlzIG5vIG5hbWUgc3BlY2lmaWVkIGFmdGVyIHRoZSBCPC11PiwgdGhlIG5hbWUgdGV4dC5kZXMKKyB3aWxsIGJlIGVtYmVkZGVkIGluIHRoZSBoZWFkZXIuCisgCisrPWJhY2sKKysKKyA9aGVhZDEgU0VFIEFMU08KKyAKKyBwcygxKSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiY2UzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZWNlaXZlZCBmcm9tIEggSiBMaXUgQCBJbnRlbAorTWFrZSB0aGUgYXNzZW1ibHkgc3ludGF4IGNvbXBhdGlibGUgd2l0aCB4MzIgZ2NjLiBPdGhld2lzZSB4MzIgZ2NjIHRocm93cyBlcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA3LzEzCisKK3BvcnRlZCB0aGUgcGF0Y2ggdG8gdGhlIDEuMC4wZSB2ZXJzaW9uCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzAxCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vYm4vYm4uaAorKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuLmgKK0BAIC0xNzMsNiArMTczLDEzIEBAIGV4dGVybiAiQyIgeworICMgIGVuZGlmCisgIyBlbmRpZgorIAorKy8qIEFkZHJlc3MgdHlwZS4gICovCisrI2lmZGVmIF9XSU42NAorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nIGxvbmcKKysjZWxzZQorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nCisrI2VuZGlmCisrCisgLyoKKyAgKiBhc3N1bWluZyBsb25nIGlzIDY0Yml0IC0gdGhpcyBpcyB0aGUgREVDIEFscGhhIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyBvbmx5CisgICogNjQgYml0cyA6LSgsIGRvbid0IGRlZmluZSBCTl9MTE9ORyBmb3IgdGhlIERFQyBBbHBoYQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ibi9ibl9leHAuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCitAQCAtNjM4LDcgKzYzOCw3IEBAIHN0YXRpYyBpbnQgTU9EX0VYUF9DVElNRV9DT1BZX0ZST01fUFJFQlUKKyAgKiBtdWx0aXBsZS4KKyAgKi8KKyAjZGVmaW5lIE1PRF9FWFBfQ1RJTUVfQUxJR04oeF8pIFwKKy0gICAgICAgICgodW5zaWduZWQgY2hhciopKHhfKSArIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX1dJRFRIIC0gKCgoc2l6ZV90KSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKysJKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChCTl9BRERSKSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKyAKKyAvKgorICAqIFRoaXMgdmFyaWFudCBvZiBCTl9tb2RfZXhwX21vbnQoKSB1c2VzIGZpeGVkIHdpbmRvd3MgYW5kIHRoZSBzcGVjaWFsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3QtZGVwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZkMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3QtZGVwcy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitSZW1vdmUgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciB0ZXN0IHRhcmdldHMKKworVGhlc2UgYXJlIHByb2JhYmx5IGhlcmUgYmVjYXVzZSB0aGUgZXhlY3V0YWJsZXMgYXJlbid0IGFsd2F5cyBidWlsdCBmb3IKK290aGVyIHBsYXRmb3JtcyAoZS5nLiBXaW5kb3dzKTsgaG93ZXZlciB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5J2xsCithbHdheXMgYmUgdGhlcmUuIE5vbmUgb2YgdGhlIG90aGVyIHRlc3QgdGFyZ2V0cyBoYXZlIHN1Y2ggZGVwZW5kZW5jaWVzCithbmQgaWYgd2UgZG9uJ3QgcmVtb3ZlIHRoZW0sIG1ha2UgdHJpZXMgdG8gcmVidWlsZCB0aGUgZXhlY3V0YWJsZXMgYW5kCitmYWlscyBkdXJpbmcgcnVuLXB0ZXN0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTMzMCw3ICszMzAsNyBAQCB0ZXN0X2NtczogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSBjbXMtCisgCUBlY2hvICJDTVMgY29uc2lzdGVuY3kgdGVzdCIKKyAJJChQRVJMKSBjbXMtdGVzdC5wbAorIAorLXRlc3Rfc3JwOiAkKFNSUFRFU1QpJChFWEVfRVhUKQorK3Rlc3Rfc3JwOgorIAlAZWNobyAiVGVzdCBTUlAiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuL3NycHRlc3QKKyAKK0BAIC0zNDIsNyArMzQyLDcgQEAgdGVzdF92M25hbWU6ICQoVjNOQU1FVEVTVCkkKEVYRV9FWFQpCisgCUBlY2hvICJUZXN0IFg1MDl2M19jaGVja18qIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKFYzTkFNRVRFU1QpCisgCistdGVzdF9oZWFydGJlYXQ6ICQoSEVBUlRCRUFUVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9oZWFydGJlYXQ6CisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSEVBUlRCRUFUVEVTVCkKKyAKKyB0ZXN0X2NvbnN0YW50X3RpbWU6ICQoQ09OU1RUSU1FVEVTVCkkKEVYRV9FWFQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IyMGZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3NoYXJlZC1saWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Y2EwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xZS5vcmlnL2NyeXB0by9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9NYWtlZmlsZQorQEAgLTEwOCw3ICsxMDgsNyBAQCAkKExJQik6CSQoTElCT0JKKQorIAorIHNoYXJlZDogYnVpbGRpbmYuaCBsaWIgc3ViZGlycworIAlpZiBbIC1uICIkKFNIQVJFRF9MSUJTKSIgXTsgdGhlbiBcCistCQkoY2QgLi47ICQoTUFLRSkgJChTSEFSRURfTElCKSk7IFwKKysJCShjZCAuLjsgJChNQUtFKSAtZSAkKFNIQVJFRF9MSUIpKTsgXAorIAlmaQorIAorIGxpYnM6CitJbmRleDogb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWUub3JpZy9NYWtlZmlsZS5vcmcKKysrKyBvcGVuc3NsLTEuMC4xZS9NYWtlZmlsZS5vcmcKK0BAIC0zMTAsNyArMzEwLDcgQEAgbGliY3J5cHRvJChTSExJQl9FWFQpOiBsaWJjcnlwdG8uYSBmaXBzXworIAorIGxpYnNzbCQoU0hMSUJfRVhUKTogbGliY3J5cHRvJChTSExJQl9FWFQpIGxpYnNzbC5hCisgCUBpZiBbICIkKFNITElCX1RBUkdFVCkiICE9ICIiIF07IHRoZW4gXAorLQkJJChNQUtFKSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorKwkJJChNQUtFKSAtZSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorIAllbHNlIFwKKyAJCWVjaG8gIlRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGlzIHBsYXRmb3JtIiA+JjI7IFwKKyAJCWV4aXQgMTsgXAorSW5kZXg6IG9wZW5zc2wtMS4wLjFlL3NzbC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFlLm9yaWcvc3NsL01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMWUvc3NsL01ha2VmaWxlCitAQCAtNjIsNyArNjIsNyBAQCBsaWI6CSQoTElCT0JKKQorIAorIHNoYXJlZDogbGliCisgCWlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKy0JCShjZCAuLjsgJChNQUtFKSAkKFNIQVJFRF9MSUIpKTsgXAorKwkJKGNkIC4uOyAkKE1BS0UpIC1lICQoU0hBUkVEX0xJQikpOyBcCisgCWZpCisgCisgZmlsZXM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkOGRjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYgpAQCAtMCwwICsxLDU3IEBACityZXF1aXJlIG9wZW5zc2wuaW5jCisKKyMgRm9yIHRhcmdldCBzaWRlIHZlcnNpb25zIG9mIG9wZW5zc2wgZW5hYmxlIHN1cHBvcnQgZm9yIE9DRiBMaW51eCBkcml2ZXIKKyMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLgorREVQRU5EUyArPSAiY3J5cHRvZGV2LWxpbnV4IgorCitDRkxBRyArPSAiLURIQVZFX0NSWVBUT0RFViAtRFVTRV9DUllQVE9ERVZfRElHRVNUUyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjlhOGY5NjgxMDczNDVlMGI3NWFhOGMyZWNhYTdlYzgiCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyBlbmdpbmVzIgorZXhwb3J0IE9FX0xERkxBR1M9IiR7TERGTEFHU30iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2hhcmVkLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29lLWxkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY2EucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9waWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZmluZC5wbCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhkZDYxOWIyZTc3Y2JhYzY5Yjk5ZjUyYTA1M2QyNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjcxYzM2NDg3Nzg1NjI4YTcwMzM3NGM2NTJhZDJjZWJlYTQ1ZmE5MjBhZTU2ODE1MTVkZjI1ZDlmMmM5YThjOCIKKworUEFDS0FHRVMgPSsgIiBcCisJJHtQTn0tZW5naW5lcyBcCisJJHtQTn0tZW5naW5lcy1kYmcgXAorCSIKKworRklMRVNfJHtQTn0tZW5naW5lcyA9ICIke2xpYmRpcn0vc3NsL2VuZ2luZXMvKi5zbyAke2xpYmRpcn0vZW5naW5lcyIKK0ZJTEVTXyR7UE59LWVuZ2luZXMtZGJnID0gIiR7bGliZGlyfS9zc2wvZW5naW5lcy8uZGVidWciCisKK1BBUkFMTEVMX01BS0UgPSAiIgorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgY3AgJHtXT1JLRElSfS9maW5kLnBsICR7U30vdXRpbC9maW5kLnBsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4YWYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlJQQyBwcm9ncmFtIG51bWJlciBtYXBwZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbmVpbC5icm93bi5uYW1lL3BvcnRtYXAvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvcnRtYXAuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTMxO21kNT01MWZmNjdlNjZlYzg0YjIwMDliMDE3YjFmOTRhZmJmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9mcm9tX2xvY2FsLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zNTttZDU9MWJlYzkzOGEyMjY4YjhiNDIzYzU4ODAxYWNlM2FkYzEiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJwb3J0bWFwIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTAgMiAzIDQgNSAuIHN0b3AgMzIgMCAxIDYgLiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJwb3J0bWFwLnNlcnZpY2UiCisKK1BBQ0tBR0VTID0rICJwb3J0bWFwLXV0aWxzIgorRklMRVNfcG9ydG1hcC11dGlscyA9ICIke2Jhc2Vfc2JpbmRpcn0vcG1hcF9zZXQgJHtiYXNlX3NiaW5kaXJ9L3BtYXBfZHVtcCIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkb2NkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvZGVzdGRpci1uby1zdHJpcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZjc4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTdW4sIDEzIE1heSAyMDA3IDIxOjE1OjEyICswMDAwICgtMDQwMCkKK1N1YmplY3Q6IHJlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD02MDNjNTliOTc4YzA0ZGYyMzU0ZjY4ZDRhMmRjNjc2YTc1OGZmNDZkCisKK3Jlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCisKKyQoREVTVERJUikgaXMgdGhlIHN0YW5kYXJkIGZvciBpbnN0YWxsaW5nIGludG8gb3RoZXIgdHJlZXMsIG5vdCAkKEJBU0VESVIpIC4uLgorc28gSSd2ZSBjb252ZXJ0ZWQgdGhlIE1ha2VmaWxlIHRvIHVzZSB0aGF0LiAgSSd2ZSBhbHNvIGxlZnQgaW4gJChCQVNFRElSKSBhcyBhCitkZWZhdWx0IHRvIHN1cHBvcnQgb2xkIGluc3RhbGxzOyBub3Qgc3VyZSBpZiB5b3UnZCBqdXN0IGN1dCBpdC4KKworU3RyaXBwaW5nIHNob3VsZCBiZSBsZWZ0IHRvIHRoZSBwZXJzb24gdG8gaGFuZGxlLCBub3QgYXV0b21hdGljYWxseSBkb25lIGJ5Cit0aGUgaW5zdGFsbCBzdGVwLiAgQWxzbywgYGluc3RhbGwgLXNgIGFsd2F5cyBjYWxscyBgc3RyaXBgIHdoaWNoIGlzCit3cm9uZy91bmRlc2lyZWQgaW4gY3Jvc3MtY29tcGlsaW5nIHNjZW5hcmlvcy4KKworU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggOWU5YTRiNC4uNTM0MzQyOCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEzNSwxMyArMTM1LDE0IEBAIGZyb21fbG9jYWw6IENQUEZMQUdTICs9IC1EVEVTVAorIHBvcnRtYXAubWFuIDogcG9ydG1hcC44CisgCXNlZCAkKE1BTl9TRUQpIDwgcG9ydG1hcC44ID4gcG9ydG1hcC5tYW4KKyAKKytERVNURElSID0gJChCQVNFRElSKQorIGluc3RhbGw6IGFsbAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBvcnRtYXAgJHtCQVNFRElSfS9zYmluCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG1hcF9kdW1wICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBtYXBfc2V0ICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44CistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAke0JBU0VESVJ9L3Vzci9zaGFyZS9tYW4vbWFuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBvcnRtYXAgJChERVNURElSKS9zYmluCisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG1hcF9kdW1wICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBtYXBfc2V0ICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44CisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAkKERFU1RESVIpL3Vzci9zaGFyZS9tYW4vbWFuOAorIAorIGNsZWFuOgorIAlybSAtZiAqLm8gcG9ydG1hcCBwbWFwX2R1bXAgcG1hcF9zZXQgZnJvbV9sb2NhbCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjIxYWExNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHBvcnRtYXAKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGhlIFJQQyBwb3J0bWFwcGVyCisjIERlc2NyaXB0aW9uOiAgICAgICBQb3J0bWFwIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1mIC9zYmluL3BvcnRtYXAgfHwgZXhpdCAwCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nIHBvcnRtYXAgZGFlbW9uLi4uIgorICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3BvcnRtYXAKKworCWlmIFsgLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlIF07IHRoZW4KKyAgICAgICAgICBlY2hvICJSZXN0b3Jpbmcgb2xkIFJQQyBzZXJ2aWNlIGluZm9ybWF0aW9uLi4uIgorICAgICAgICAgIHNsZWVwIDEgIyBuZWVkcyBhIHNob3J0IHBhdXNlIG9yIHBtYXBfc2V0IHdvbid0IHdvcmsuIDooCisJICBwbWFwX3NldCA8L3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlCisJICBybSAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUKKyAgICAgICAgICBlY2hvICJkb25lLiIKKyAgICAgICAgZmkKKworCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgcG9ydG1hcCBkYWVtb24uLi4iCisgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9wb3J0bWFwCisJOzsKKyAgICByZWxvYWQpCisJOzsKKyAgICBmb3JjZS1yZWxvYWQpCisgICAgICAgICQwIHJlc3RhcnQKKwk7OworICAgIHJlc3RhcnQpCisJIyBwbWFwX2R1bXAgYW5kIHBtYXBfc2V0IG1heSBiZSBpbiBhIGRpZmZlcmVudCBwYWNrYWdlIGFuZCBub3QgaW5zdGFsbGVkLi4uCisJaWYgWyAtZiAvc2Jpbi9wbWFwX2R1bXAgLWEgLWYgL3NiaW4vcG1hcF9zZXQgXTsgdGhlbgorCQlkb19zdGF0ZT0xCisJZWxzZQorCQlkb19zdGF0ZT0wCisJZmkKKwlbICRkb19zdGF0ZSAtZXEgMSBdICYmIHBtYXBfZHVtcCA+L3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorICAgICAgICAkMCBzdG9wCisgICAgICAgICQwIHN0YXJ0CisJaWYgWyAkZG9fc3RhdGUgLWVxIDEgXTsgdGhlbgorCSAgaWYgWyAhIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZSBdOyB0aGVuCisgICAgICAgICAgICBzbGVlcCAxCisJICAgIHBtYXBfc2V0IDwvdmFyL3J1bi9wb3J0bWFwLnN0YXRlCisJICBmaQorCSAgcm0gLWYgL3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorCWZpCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9wb3J0bWFwIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZjlkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1UaGUgUlBDIHBvcnRtYXBwZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFeGVjU3RhcnQ9QEJBU0VfU0JJTkRJUkAvcG9ydG1hcAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjUwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK0RhdGU6IFN1biwgMTMgTWF5IDIwMDcgMjE6MTc6MzIgKzAwMDAgKC0wNDAwKQorU3ViamVjdDogZml4IGJ1aWxkaW5nIHdpdGggdGNwZCBzdXBwb3J0IGRpc2FibGVkCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD03ODQ3MjA3YWVkMWI0NGZhZjA3N2VlZDE0YTlhYzljNjgyNDRlYmE1CisKK2ZpeCBidWlsZGluZyB3aXRoIHRjcGQgc3VwcG9ydCBkaXNhYmxlZAorCitNYWtlIHN1cmUgcG1hcF9jaGVjay5jIG9ubHkgaW5jbHVkZXMgdGNwZC5oIHdoZW4gSE9TVFNfQUNDRVNTIGlzIGRlZmluZWQuCisKK1NpZ25lZC1vZmYtYnk6IFRpbW90aHkgUmVkYWVsbGkgPGRyaXp6dEBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvcG1hcF9jaGVjay5jIGIvcG1hcF9jaGVjay5jCitpbmRleCA4NGYyYzEyLi40NDNhODIyIDEwMDY0NAorLS0tIGEvcG1hcF9jaGVjay5jCisrKysgYi9wbWFwX2NoZWNrLmMKK0BAIC00NCw3ICs0NCw5IEBACisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8cnBjL3JwY2VudC5oPgorICNlbmRpZgorKyNpZmRlZiBIT1NUU19BQ0NFU1MKKyAjaW5jbHVkZSA8dGNwZC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyN2ZlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYgpAQCAtMCwwICsxLDMxIEBACityZXF1aXJlIHBvcnRtYXAuaW5jCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc291cmNlZmlsZXMub3JnL05ldHdvcmtpbmcvVG9vbHMvTWlzY2VsbGFuZW5vdXMvcG9ydG1hcC02LjAudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwZC1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9ydG1hcC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3BvcnRtYXAuc2VydmljZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFjMTA4YWI2OGJmMGYzNDQ3N2Y4MzE3NzkxYWFmMWZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyYzgyMGQzOWYzZTZlNzI5ZDFiZWEzMjg3YTJkOGE2YzY4NGYxMDA2ZmI5NjEyZjk3ZGNhZDRhMjgxZDQxZGUiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0vIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIiwsdGNwLXdyYXBwZXJzIgorCitDUFBGTEFHUyArPSAiLURGQUNJTElUWT1MT0dfREFFTU9OIC1ERU5BQkxFX0ROUyAtREhPU1RTX0FDQ0VTUyIKK0NGTEFHUyArPSAiLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtZlBJQyIKK0VYVFJBX09FTUFLRSArPSAiJ05PX1RDUF9XUkFQUEVSPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RjcC13cmFwcGVycycsICcnLCAnMScsIGQpfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgvICR7RH0ke2Jhc2Vfc2JpbmRpcn0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG9ydG1hcC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3J0bWFwCisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvcnRtYXAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIHNlZCAtaSAtZSAncyxAQkFTRV9TQklORElSQCwke2Jhc2Vfc2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG9ydG1hcC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvaG9zdC1wZWVyIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL2hvc3QtcGVlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2UyZTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL2hvc3QtcGVlcgpAQCAtMCwwICsxLDExIEBACistZGV0YWNoCitkZWZhdWx0cm91dGUKK25vY3J0c2N0cworbG9jaworbm9hdXRoCitsY3AtZWNoby1pbnRlcnZhbCA1CitsY3AtZWNoby1mYWlsdXJlIDMKK3VzZXBlZXJkbnMKKzExNTIwMAorbG9jYWwKK2FzeW5jbWFwIDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL3BwcC1kaWFsaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyNzcxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKKy91c3Ivc2Jpbi9wcHBkIGNhbGwgaG9zdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL3BwcC1kaWFsaW5fMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL3BwcC1kaWFsaW5fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYTc2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIFBQUCBkaWFsLWluIHRocm91Z2ggYSBzZXJpYWwgY29ubmVjdGlvbiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJwcHAiCitSREVQRU5EU18ke1BOfSA9ICJwcHAiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hvc3QtcGVlciBcCisgICAgICAgICAgIGZpbGU6Ly9wcHAtZGlhbGluIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0LXBlZXIgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzL2hvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wcHAtZGlhbGluICR7RH0ke3NiaW5kaXJ9Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgJHtzYmluZGlyfS9wcHAtZGlhbGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby11c2VyLWdyb3VwIC0tZ2lkIG5vZ3JvdXAgcHBwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWEyZDJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBiYTBmNjA1OGQxZjI1YjJiNjBmYzMxYWIyNjU2YmYxMmE3MWZmZGFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDUgTm92IDIwMTMgMTc6MzI6NTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHBwOiBGaXggY29tcGlsYXRpb24gZXJyb3JzIGluIE1ha2VmaWxlCisKK1RoaXMgcGF0Y2ggZml4ZXMgYmVsb3cgaXNzdWVzOgorCisxLiBNYWtlIGNhbid0IGV4aXQgd2hpbGUgY29tcGlsYXRpb24gZXJyb3Igb2NjdXJzIGluIHN1YmRpciBmb3IgcGx1Z2lucyBidWlsZGluZy4KKworMi4gSWYgYnVpbGQgcHBwIHdpdGggbmV3ZXIga2VybmVsICgzLjEwLjEwKSwgaXQgd2lsbCBwaWNrICdpZl9wcHBveC5oJyBmcm9tIHN5c3Jvb3QtZGlyIGFuZAorICAgJ2lmX3BwcG9sMnRwLmgnIGZyb20gaXRzIG93biBzb3VyY2UgZGlyLCB0aGlzIGNhdXNlIGJlbG93IGJ1aWxkIGVycm9yczoKKworICAgICAgICBiaXRiYWtlX2J1aWxkL3RtcC9zeXNyb290cy9pbnRlbC14ODYtNjQvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaDo4NDoyNjoKKyAgICAgICAgZXJyb3I6IGZpZWxkICdwcHBvbDJ0cCcgaGFzIGluY29tcGxldGUgdHlwZQorICAgICAgICAgIHN0cnVjdCBwcHBvbDJ0cGluNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgYml0YmFrZV9idWlsZC90bXAvc3lzcm9vdHMvaW50ZWwteDg2LTY0L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94Lmg6OTk6Mjg6CisgICAgICAgIGVycm9yOiBmaWVsZCAncHBwb2wydHAnIGhhcyBpbmNvbXBsZXRlIHR5cGUKKyAgICAgICAgICBzdHJ1Y3QgcHBwb2wydHB2M2luNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorCitUaGUgJ3N5c3Jvb3QtZGlyL2lmX3BwcG94LmgnIGVuYWJsZWQgaXB2NiBzdXBwb3J0IGJ1dCB0aGUgJ3NvdXJjZS1kaXIvaWZfcHBwb2wydHAuaCcgbG9zdAorcmVsYXRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIHdlIHNob3VsZCB1c2UgYm90aCBoZWFkZXIgZmlsZXMgZnJvbSBzeXNyb290cyB0byBmaXggdGhpcworYnVpbGQgZmFpbHVyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4ICAgICAgICAgIHwgICAgMiArLQorIHBwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCB8ICAgIDIgKy0KKyBwcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXggfCAgICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXggYi9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKK2luZGV4IDBhN2VjN2IuLjJhMmMxNWEgMTAwNjQ0CistLS0gYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eAorQEAgLTIwLDcgKzIwLDcgQEAgaW5jbHVkZSAuZGVwZW5kCisgZW5kaWYKKyAKKyBhbGw6CSQoUExVR0lOUykKKy0JZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gJChNQUtFKSAkKE1GTEFHUykgLUMgJCRkIGFsbDsgZG9uZQorKwlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyAkKE1BS0UpICQoTUZMQUdTKSAtQyAkJGQgYWxsIHx8IGV4aXQgMTsgZG9uZQorIAorICUuc286ICUuYworIAkkKENDKSAtbyAkQCAkKExERkxBR1MpICQoQ0ZMQUdTKSAkXgorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAoraW5kZXggMTllZmY2Ny4uZmViMmY1MiAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4CitAQCAtMSw2ICsxLDYgQEAKKyAjQ0MJPSBnY2MKKyBDT1BUUwk9IC1PMiAtZworLUNGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtZlBJQworK0NGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1mUElDCisgTERGTEFHUwk9IC1zaGFyZWQKKyBJTlNUQUxMCT0gaW5zdGFsbAorIAorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAoraW5kZXggZjA3ODk5MS4uMTViOTExOCAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CitAQCAtMjYsNyArMjYsNyBAQCBJTlNUQUxMCT0gaW5zdGFsbAorIFJQX1ZFUlNJT049My44cAorIAorIENPUFRTPS1PMiAtZworLUNGTEFHUz0kKENPUFRTKSAtSS4uLy4uLy4uL2luY2x1ZGUgJy1EUlBfVkVSU0lPTj0iJChSUF9WRVJTSU9OKSInCisrQ0ZMQUdTPSQoQ09QVFMpICctRFJQX1ZFUlNJT049IiQoUlBfVkVSU0lPTikiJworIGFsbDogcnAtcHBwb2Uuc28gcHBwb2UtZGlzY292ZXJ5CisgCisgcHBwb2UtZGlzY292ZXJ5OiBwcHBvZS1kaXNjb3ZlcnkubyBkZWJ1Zy5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDhzZXR1cGRucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTgyMTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitQUFBDT05GPS92YXIvcnVuL3BwcC9yZXNvbHYuY29uZgoraWYgWyAtZiAkUFBQQ09ORiBdIDsgdGhlbgorCWlmIFsgLWYgJEFDVFVBTENPTkYgXSA7IHRoZW4KKwkJaWYgWyAhIC1oICRBQ1RVQUxDT05GIC1vICEgImByZWFkbGluayAkQUNUVUFMQ09ORiAyPiYxYCIgPSAiJFBQUENPTkYiIF0gOyB0aGVuCisJCQltdiAkQUNUVUFMQ09ORiAkQUNUVUFMQ09ORi5wcHBvcmlnCisJCWZpCisJZmkKKworCWxuIC1zZiAkUFBQQ09ORiAkQUNUVUFMQ09ORgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC85MnJlbW92ZWRucyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC85MnJlbW92ZWRucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFkZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitpZiBbIC1mICRBQ1RVQUxDT05GLnBwcG9yaWcgXSA7IHRoZW4KKwltdiAkQUNUVUFMQ09ORi5wcHBvcmlnICRBQ1RVQUxDT05GCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NpZmRlZnJvdXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NpZmRlZnJvdXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGRiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2gKQEAgLTAsMCArMSwyOTIgQEAKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQuCitUaGUgb3JpZ2luYWwgcGF0Y2ggaXMgZnJvbSBEZWJpYW4gLyBTdVNFIHRvIGltcGxlbWVudCByZXBsYWNlZGVmYXVsdHJvdXRlCitSZWJhc2VkIGl0IHRvIGZpdCBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuL3N1c2UgcGF0Y2hlc10KKworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTY6NDA6MDAuNDc4NzE2ODU1ICswODAwCitAQCAtMTk4LDYgKzE5OCwxNiBAQAorICAgICAgICJkaXNhYmxlIGRlZmF1bHRyb3V0ZSBvcHRpb24iLCBPUFRfQUxJQVMgfCBPUFRfQTJDTFIsCisgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0uZGVmYXVsdF9yb3V0ZSB9LAorIAorKyNpZmRlZiBfX2xpbnV4X18KKysgICAgeyAicmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlLAorKyAgICAgICJSZXBsYWNlIGRlZmF1bHQgcm91dGUiLCAxCisrICAgIH0sCisrICAgIHsgIm5vcmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSwKKysgICAgICAiTmV2ZXIgcmVwbGFjZSBkZWZhdWx0IHJvdXRlIiwgT1BUX0EyQ09QWSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlIH0sCisrI2VuZGlmCisgICAgIHsgInByb3h5YXJwIiwgb19ib29sLCAmaXBjcF93YW50b3B0aW9uc1swXS5wcm94eV9hcnAsCisgICAgICAgIkFkZCBwcm94eSBBUlAgZW50cnkiLCBPUFRfRU5BQkxFfDEsICZpcGNwX2FsbG93b3B0aW9uc1swXS5wcm94eV9hcnAgfSwKKyAgICAgeyAibm9wcm94eWFycCIsIG9fYm9vbCwgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnByb3h5X2FycCwKK0BAIC0yNzEsNyArMjgxLDcgQEAKKyAgICAgaXBfYWN0aXZlX3BrdAorIH07CisgCistc3RhdGljIHZvaWQgaXBjcF9jbGVhcl9hZGRycyBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QpKTsKKytzdGF0aWMgdm9pZCBpcGNwX2NsZWFyX2FkZHJzIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCwgYm9vbCkpOworIHN0YXRpYyB2b2lkIGlwY3Bfc2NyaXB0IF9fUCgoY2hhciAqLCBpbnQpKTsJLyogUnVuIGFuIHVwL2Rvd24gc2NyaXB0ICovCisgc3RhdGljIHZvaWQgaXBjcF9zY3JpcHRfZG9uZSBfX1AoKHZvaWQgKikpOworIAorQEAgLTE3NDIsNyArMTc1MiwxMiBAQAorICAgICBpZiAoIXNpZm5wbW9kZSh1LCBQUFBfSVAsIE5QTU9ERV9RVUVVRSkpCisgCXJldHVybiAwOworICAgICBpZiAod28tPmRlZmF1bHRfcm91dGUpCisrI2lmbmRlZiBfX2xpbnV4X18KKyAJaWYgKHNpZmRlZmF1bHRyb3V0ZSh1LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpKQorKyNlbHNlCisrCWlmIChzaWZkZWZhdWx0cm91dGUodSwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCSAgICBkZWZhdWx0X3JvdXRlX3NldFt1XSA9IDE7CisgICAgIGlmICh3by0+cHJveHlfYXJwKQorIAlpZiAoc2lmcHJveHlhcnAodSwgd28tPmhpc2FkZHIpKQorQEAgLTE4MzAsNyArMTg0NSw4IEBACisgICAgICAqLworICAgICBpZiAoZGVtYW5kKSB7CisgCWlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkciB8fCBoby0+aGlzYWRkciAhPSB3by0+aGlzYWRkcikgeworLQkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpOworKwkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIsIAorKwkJCQkgICAgICB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKTsKKyAJICAgIGlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkcikgeworIAkJd2FybigiTG9jYWwgSVAgYWRkcmVzcyBjaGFuZ2VkIHRvICVJIiwgZ28tPm91cmFkZHIpOworIAkJc2NyaXB0X3NldGVudigiT0xESVBMT0NBTCIsIGlwX250b2Eod28tPm91cmFkZHIpLCAwKTsKK0BAIC0xODU1LDcgKzE4NzEsMTIgQEAKKyAKKyAJICAgIC8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCSAgICBpZiAoaXBjcF93YW50b3B0aW9uc1tmLT51bml0XS5kZWZhdWx0X3JvdXRlKSAKKysjaWZuZGVmIF9fbGludXhfXworIAkJaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIpKQorKyNlbHNlCisrCQlpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkciwKKysJCQkJCSAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCQkgICAgZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkgICAgLyogTWFrZSBhIHByb3h5IEFSUCBlbnRyeSBpZiByZXF1ZXN0ZWQuICovCitAQCAtMTkwNSw3ICsxOTI2LDEyIEBACisgCisgCS8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCWlmIChpcGNwX3dhbnRvcHRpb25zW2YtPnVuaXRdLmRlZmF1bHRfcm91dGUpIAorKyNpZm5kZWYgX19saW51eF9fCisgCSAgICBpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkcikpCisrI2Vsc2UKKysJICAgIGlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyLAorKwkJCQkJIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpKQorKyNlbmRpZgorIAkJZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkvKiBNYWtlIGEgcHJveHkgQVJQIGVudHJ5IGlmIHJlcXVlc3RlZC4gKi8KK0BAIC0xOTgzLDcgKzIwMDksNyBAQAorIAlzaWZucG1vZGUoZi0+dW5pdCwgUFBQX0lQLCBOUE1PREVfRFJPUCk7CisgCXNpZmRvd24oZi0+dW5pdCk7CisgCWlwY3BfY2xlYXJfYWRkcnMoZi0+dW5pdCwgaXBjcF9nb3RvcHRpb25zW2YtPnVuaXRdLm91cmFkZHIsCistCQkJIGlwY3BfaGlzb3B0aW9uc1tmLT51bml0XS5oaXNhZGRyKTsKKysJCQkgaXBjcF9oaXNvcHRpb25zW2YtPnVuaXRdLmhpc2FkZHIsIDApOworICAgICB9CisgCisgICAgIC8qIEV4ZWN1dGUgdGhlIGlwLWRvd24gc2NyaXB0ICovCitAQCAtMTk5OSwxMiArMjAyNSwyMSBAQAorICAqIHByb3h5IGFycCBlbnRyaWVzLCBldGMuCisgICovCisgc3RhdGljIHZvaWQKKy1pcGNwX2NsZWFyX2FkZHJzKHVuaXQsIG91cmFkZHIsIGhpc2FkZHIpCisraXBjcF9jbGVhcl9hZGRycyh1bml0LCBvdXJhZGRyLCBoaXNhZGRyLCByZXBsYWNlZGVmYXVsdHJvdXRlKQorICAgICBpbnQgdW5pdDsKKyAgICAgdV9pbnQzMl90IG91cmFkZHI7ICAvKiBsb2NhbCBhZGRyZXNzICovCisgICAgIHVfaW50MzJfdCBoaXNhZGRyOyAgLyogcmVtb3RlIGFkZHJlc3MgKi8KKysgICAgYm9vbCByZXBsYWNlZGVmYXVsdHJvdXRlOworIHsKKy0gICAgaWYgKHByb3h5X2FycF9zZXRbdW5pdF0pIHsKKysgICAgLyogSWYgcmVwbGFjZWRlZmF1bHRyb3V0ZSwgc2lmZGVmYXVsdHJvdXRlIHdpbGwgYmUgY2FsbGVkIHNvb24KKysgICAgICogd2l0aCByZXBsYWNlZGVmYXVsdHJvdXRlIHNldCBhbmQgdGhhdCB3aWxsIG92ZXJ3cml0ZSB0aGUgY3VycmVudAorKyAgICAgKiBkZWZhdWx0IHJvdXRlLiBUaGlzIGlzIHRoZSBjYXNlIG9ubHkgd2hlbiBkb2luZyBkZW1hbmQsIG90aGVyd2lzZQorKyAgICAgKiBkdXJpbmcgZGVtYW5kLCB0aGlzIGNpZmRlZmF1bHRyb3V0ZSB3b3VsZCByZXN0b3JlIHRoZSBvbGQgZGVmYXVsdAorKyAgICAgKiByb3V0ZSB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50IGluIHRoaXMgY2FzZS4gSW4gdGhlIG5vbi1kZW1hbmQKKysgICAgICogY2FzZSwgd2UnbGwgZGVsZXRlIHRoZSBkZWZhdWx0IHJvdXRlIGFuZCByZXN0b3JlIHRoZSBvbGQgaWYgdGhlcmUKKysgICAgICogaXMgb25lIHNhdmVkIGJ5IGFuIHNpZmRlZmF1bHRyb3V0ZSB3aXRoIHJlcGxhY2VkZWZhdWx0cm91dGUuCisrICAgICAqLworKyAgICBpZiAoIXJlcGxhY2VkZWZhdWx0cm91dGUgJiYgZGVmYXVsdF9yb3V0ZV9zZXRbdW5pdF0pIHsKKyAJY2lmcHJveHlhcnAodW5pdCwgaGlzYWRkcik7CisgCXByb3h5X2FycF9zZXRbdW5pdF0gPSAwOworICAgICB9CitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmggcHBwLTIuNC41L3BwcGQvaXBjcC5oCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNjo0MDo0OS41ODYyMDMxMjkgKzA4MDAKK0BAIC03MCw2ICs3MCw3IEBACisgICAgIGJvb2wgb2xkX2FkZHJzOwkJLyogVXNlIG9sZCAoSVAtQWRkcmVzc2VzKSBvcHRpb24/ICovCisgICAgIGJvb2wgcmVxX2FkZHI7CQkvKiBBc2sgcGVlciB0byBzZW5kIElQIGFkZHJlc3M/ICovCisgICAgIGJvb2wgZGVmYXVsdF9yb3V0ZTsJCS8qIEFzc2lnbiBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworKyAgICBib29sIHJlcGxhY2VfZGVmYXVsdF9yb3V0ZTsgLyogUmVwbGFjZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworICAgICBib29sIHByb3h5X2FycDsJCS8qIE1ha2UgcHJveHkgQVJQIGVudHJ5IGZvciBwZWVyPyAqLworICAgICBib29sIG5lZ192ajsJCS8qIFZhbiBKYWNvYnNvbiBDb21wcmVzc2lvbj8gKi8KKyAgICAgYm9vbCBvbGRfdmo7CQkvKiB1c2Ugb2xkIChzaG9ydCkgZm9ybSBvZiBWSiBvcHRpb24/ICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjggcHBwLTIuNC41L3BwcGQvcHBwZC44CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNjo0Mjo0Ny4xMDI0MTM4NTkgKzA4MDAKK0BAIC0xMjEsNiArMTIxLDEzIEBACisgVGhpcyBlbnRyeSBpcyByZW1vdmVkIHdoZW4gdGhlIFBQUCBjb25uZWN0aW9uIGlzIGJyb2tlbi4gIFRoaXMgb3B0aW9uCisgaXMgcHJpdmlsZWdlZCBpZiB0aGUgXGZJbm9kZWZhdWx0cm91dGVcZlIgb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZC4KKyAuVFAKKysuQiByZXBsYWNlZGVmYXVsdHJvdXRlCisrVGhpcyBvcHRpb24gaXMgYSBmbGFnIHRvIHRoZSBkZWZhdWx0cm91dGUgb3B0aW9uLiBJZiBkZWZhdWx0cm91dGUgaXMKKytzZXQgYW5kIHRoaXMgZmxhZyBpcyBhbHNvIHNldCwgcHBwZCByZXBsYWNlcyBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlCisrd2l0aCB0aGUgbmV3IGRlZmF1bHQgcm91dGUuCisrCisrCisrLlRQCisgLkIgZGlzY29ubmVjdCBcZklzY3JpcHQKKyBFeGVjdXRlIHRoZSBjb21tYW5kIHNwZWNpZmllZCBieSBcZklzY3JpcHRcZlIsIGJ5IHBhc3NpbmcgaXQgdG8gYQorIHNoZWxsLCBhZnRlcgorQEAgLTcxNyw3ICs3MjQsMTIgQEAKKyAuVFAKKyAuQiBub2RlZmF1bHRyb3V0ZQorIERpc2FibGUgdGhlIFxmSWRlZmF1bHRyb3V0ZVxmUiBvcHRpb24uICBUaGUgc3lzdGVtIGFkbWluaXN0cmF0b3Igd2hvCistd2lzaGVzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBjcmVhdGluZyBkZWZhdWx0IHJvdXRlcyB3aXRoIHBwcGQKKyt3aXNoZXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGFkZGluZyBhIGRlZmF1bHQgcm91dGUgd2l0aCBwcHBkCisrY2FuIGRvIHNvIGJ5IHBsYWNpbmcgdGhpcyBvcHRpb24gaW4gdGhlIC9ldGMvcHBwL29wdGlvbnMgZmlsZS4KKysuVFAKKysuQiBub3JlcGxhY2VkZWZhdWx0cm91dGUKKytEaXNhYmxlIHRoZSBcZklyZXBsYWNlZGVmYXVsdHJvdXRlXGZSIG9wdGlvbi4gVGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdobworK3dpc2hlcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gcmVwbGFjaW5nIGEgZGVmYXVsdCByb3V0ZSB3aXRoIHBwcGQKKyBjYW4gZG8gc28gYnkgcGxhY2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgL2V0Yy9wcHAvb3B0aW9ucyBmaWxlLgorIC5UUAorIC5CIG5vZGVmbGF0ZQorZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oIHBwcC0yLjQuNS9wcHBkL3BwcGQuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTY6NDM6MzYuNTE0MTQ4MzI3ICswODAwCitAQCAtNjQzLDcgKzY0MywxMSBAQAorIGludCAgY2lmNmFkZHIgX19QKChpbnQsIGV1aTY0X3QsIGV1aTY0X3QpKTsKKyAJCQkJLyogUmVtb3ZlIGFuIElQdjYgYWRkcmVzcyBmcm9tIGkvZiAqLworICNlbmRpZgorKyNpZm5kZWYgX19saW51eF9fCisgaW50ICBzaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisrI2Vsc2UKKytpbnQgIHNpZmRlZmF1bHRyb3V0ZSBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QsIGJvb2wgcmVwbGFjZV9kZWZhdWx0X3J0KSk7CisrI2VuZGlmCisgCQkJCS8qIENyZWF0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCisgaW50ICBjaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisgCQkJCS8qIERlbGV0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9zeXMtbGludXguYyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvc3lzLWxpbnV4LmMJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYwkyMDEwLTA2LTMwIDE2OjU0OjAwLjM2MjcxNjIzMSArMDgwMAorQEAgLTIwNiw2ICsyMDYsOCBAQAorIAorIHN0YXRpYyBpbnQJaWZfaXNfdXA7CS8qIEludGVyZmFjZSBoYXMgYmVlbiBtYXJrZWQgdXAgKi8KKyBzdGF0aWMgaW50CWhhdmVfZGVmYXVsdF9yb3V0ZTsJLyogR2F0ZXdheSBmb3IgZGVmYXVsdCByb3V0ZSBhZGRlZCAqLworK3N0YXRpYyBzdHJ1Y3QgcnRlbnRyeSBvbGRfZGVmX3J0OyAgICAgICAvKiBPbGQgZGVmYXVsdCByb3V0ZSAqLworK3N0YXRpYyBpbnQgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3Q7ICAvKiByZXBsYWNlIGFuZCByZXN0b3JlIG9sZCBkZWZhdWx0IHJ0ICovCisgc3RhdGljIHVfaW50MzJfdCBwcm94eV9hcnBfYWRkcjsJLyogQWRkciBmb3IgcHJveHkgYXJwIGVudHJ5IGFkZGVkICovCisgc3RhdGljIGNoYXIgcHJveHlfYXJwX2RldlsxNl07CQkvKiBEZXZpY2UgZm9yIHByb3h5IGFycCBlbnRyeSAqLworIHN0YXRpYyB1X2ludDMyX3Qgb3VyX29sZF9hZGRyOwkJLyogZm9yIGRldGVjdGluZyBhZGRyZXNzIGNoYW5nZXMgKi8KK0BAIC0xNTM3LDYgKzE1MzksOSBAQAorIAlwID0gTlVMTDsKKyAgICAgfQorIAorKyAgICBTRVRfU0FfRkFNSUxZIChydC0+cnRfZHN0LCAgICAgQUZfSU5FVCk7CisrICAgIFNFVF9TQV9GQU1JTFkgKHJ0LT5ydF9nYXRld2F5LCBBRl9JTkVUKTsKKysKKyAgICAgU0lOX0FERFIocnQtPnJ0X2RzdCkgPSBzdHJ0b3VsKGNvbHNbcm91dGVfZGVzdF9jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nYXRld2F5KSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9nd19jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nZW5tYXNrKSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9tYXNrX2NvbF0sIE5VTEwsIDE2KTsKK0BAIC0xNjA2LDIwICsxNjExLDUxIEBACisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBzaWZkZWZhdWx0cm91dGUgLSBhc3NpZ24gYSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggdGhlIGFkZHJlc3MgZ2l2ZW4uCistICovCistCistaW50IHNpZmRlZmF1bHRyb3V0ZSAoaW50IHVuaXQsIHVfaW50MzJfdCBvdXJhZGRyLCB1X2ludDMyX3QgZ2F0ZXdheSkKKy17CistICAgIHN0cnVjdCBydGVudHJ5IHJ0OworLQorLSAgICBpZiAoZGVmYXVsdHJvdXRlX2V4aXN0cygmcnQpICYmIHN0cmNtcChydC5ydF9kZXYsIGlmbmFtZSkgIT0gMCkgeworLQlpZiAocnQucnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkKKy0JICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUgdmlhICVJIiwKKy0JCSAgU0lOX0FERFIocnQucnRfZ2F0ZXdheSkpOworLQllbHNlCistCSAgICBlcnJvcigibm90IHJlcGxhY2luZyBleGlzdGluZyBkZWZhdWx0IHJvdXRlIHRocm91Z2ggJXMiLAorLQkJICBydC5ydF9kZXYpOworLQlyZXR1cm4gMDsKKysgKgorKyAqIElmIHRoZSBnbG9iYWwgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgZmxhZyBpcyBzZXQsIHRoZW4gdGhpcyBmdW5jdGlvbgorKyAqIGFscmVhZHkgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIHN5c3RlbSBkZWZhdWx0cm91dGUgd2l0aCBzb21lIG90aGVyCisrICogcm91dGUgYW5kIGl0IHNob3VsZCBqdXN0IHJlcGxhY2UgdGhlIGN1cnJlbnQgZGVmYXVsdHJvdXRlIHdpdGgKKysgKiBhbm90aGVyIG9uZSwgd2l0aG91dCBzYXZpbmcgdGhlIGN1cnJlbnQgcm91dGUuIFVzZTogZGVtYW5kIG1vZGUsCisrICogd2hlbiBwcHBkIHNldHMgZmlyc3QgYSBkZWZhdWx0cm91dGUgaXQgaXQncyB0ZW1wb3JhcnkgcHBwMCBhZGRyZXNzZXMKKysgKiBhbmQgdGhlbiBjaGFuZ2VzIHRoZSB0ZW1wb3JhcnkgYWRkcmVzc2VzIHRvIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZWFsCisrICogcHBwIGNvbm5lY3Rpb24gd2hlbiBpdCBoYXMgY29tZSB1cC4KKysgKi8KKysKKytpbnQgc2lmZGVmYXVsdHJvdXRlIChpbnQgdW5pdCwgdV9pbnQzMl90IG91cmFkZHIsIHVfaW50MzJfdCBnYXRld2F5LCBib29sIHJlcGxhY2UpCisreworKyAgICBzdHJ1Y3QgcnRlbnRyeSBydCwgdG1wX3J0OworKyAgICBzdHJ1Y3QgcnRlbnRyeSAqZGVsX3J0ID0gTlVMTDsKKysKKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0KSB7CisrCS8qIFdlIGhhdmUgYWxyZWFkeSByZWNsYWNlZCB0aGUgb3JpZ2luYWwgZGVmYXVsdHJvdXRlLCBpZiB3ZQorKyAgICAgICAgICogYXJlIGNhbGxlZCBhZ2Fpbiwgd2Ugd2lsbCBkZWxldGUgdGhlIGN1cnJlbnQgZGVmYXVsdCByb3V0ZQorKyAgICAgICAgICogYW5kIHNldCB0aGUgbmV3IGRlZmF1bHQgcm91dGUgaW4gdGhpcyBmdW5jdGlvbi4gIAorKyAgICAgICAgICogLSB0aGlzIGlzIG5vcm1hbGx5IG9ubHkgdGhlIGNhc2UgdGhlIGRvaW5nIGRlbWFuZDogKi8KKysJaWYgKGRlZmF1bHRyb3V0ZV9leGlzdHMoICZ0bXBfcnQgKSkKKysJCWRlbF9ydCA9ICZ0bXBfcnQ7CisrICAgIH0gZWxzZSBpZiAoIGRlZmF1bHRyb3V0ZV9leGlzdHMoICZvbGRfZGVmX3J0ICAgICAgICAgICAgICAgICkgJiYKKysJICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCAgb2xkX2RlZl9ydC5ydF9kZXYsIGlmbmFtZSApICE9IDApIHsKKysJLyogV2UgZGlkIG5vdCB5ZXQgcmVwbGFjZSBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlLCBsZXQncworKwkgKiBjaGVjayBpZiB3ZSBzaG91bGQgc2F2ZSBhbmQgcmVwbGFjZSBhIGRlZmF1bHQgcm91dGU6CisrICAgICAgICAgKi8KKysJdV9pbnQzMl90IG9sZF9nYXRld2F5ID0gU0lOX0FERFIob2xkX2RlZl9ydC5ydF9nYXRld2F5KTsKKysJaWYgKG9sZF9nYXRld2F5ICE9IGdhdGV3YXkpIHsKKysJICAgIGlmICghcmVwbGFjZSkgeworKwkgICAgICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIG9sZF9nYXRld2F5KTsKKysJCXJldHVybiAwOworKwkgICAgfSBlbHNlIHsKKysJCS8vIHdlIG5lZWQgdG8gY29weSBydF9kZXYgYmVjYXVzZSB3ZSBuZWVkIGl0IHBlcm1hbmVudCB0b286CisrCQljaGFyICogdG1wX2RldiA9IG1hbGxvYyhzdHJsZW4ob2xkX2RlZl9ydC5ydF9kZXYpKzEpOworKwkJc3RyY3B5KHRtcF9kZXYsIG9sZF9kZWZfcnQucnRfZGV2KTsKKysJCW9sZF9kZWZfcnQucnRfZGV2ID0gdG1wX2RldjsKKysKKysJCW5vdGljZSgicmVwbGFjaW5nIG9sZCBkZWZhdWx0IHJvdXRlIHRvICVzIFslSV0iLAorKwkJCW9sZF9kZWZfcnQucnRfZGV2LCBvbGRfZ2F0ZXdheSk7CisrCSAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAxOworKwkJZGVsX3J0ID0gJm9sZF9kZWZfcnQ7CisrCSAgICB9CisrCX0KKyAgICAgfQorIAorICAgICBtZW1zZXQgKCZydCwgMCwgc2l6ZW9mIChydCkpOworQEAgLTE2MzgsNiArMTY3NCwxMiBAQAorIAkgICAgZXJyb3IoImRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0FERFJUKTogJW0iKTsKKyAJcmV0dXJuIDA7CisgICAgIH0KKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0ICYmIGRlbF9ydCkKKysgICAgICAgIGlmIChpb2N0bChzb2NrX2ZkLCBTSU9DREVMUlQsIGRlbF9ydCkgPCAwKSB7CisrCSAgICBpZiAoICEgb2tfZXJyb3IgKCBlcnJubyApKQorKwkgICAgICAgIGVycm9yKCJkZWwgb2xkIGRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0RFTFJUKTogJW0oJWQpIiwgZXJybm8pOworKwkgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisgCisgICAgIGhhdmVfZGVmYXVsdF9yb3V0ZSA9IDE7CisgICAgIHJldHVybiAxOworQEAgLTE2NzMsNiArMTcxNSwxNiBAQAorIAkgICAgcmV0dXJuIDA7CisgCX0KKyAgICAgfQorKyAgICBpZiAoZGVmYXVsdF9ydF9yZXBsX3Jlc3QpIHsKKysJbm90aWNlKCJyZXN0b3Jpbmcgb2xkIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIFNJTl9BRERSKG9sZF9kZWZfcnQucnRfZ2F0ZXdheSkpOworKyAgICAgICAgaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NBRERSVCwgJm9sZF9kZWZfcnQpIDwgMCkgeworKwkgICAgaWYgKCAhIG9rX2Vycm9yICggZXJybm8gKSkKKysJICAgICAgICBlcnJvcigicmVzdG9yZSBkZWZhdWx0IHJvdXRlIGlvY3RsKFNJT0NBRERSVCk6ICVtKCVkKSIsIGVycm5vKTsKKysJICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAwOworKyAgICB9CisgCisgICAgIHJldHVybiAxOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jb3B0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jb3B0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ZmMDZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3BwcDogdXNlIGJ1aWxkIHN5c3RlbSBDRkxBR1Mgd2hlbiBjb21waWxpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK092ZXJyaWRlIHRoZSBoYXJkLWNvZGVkIENPUFRTIG1ha2UgdmFyaWFibGVzIHdpdGgKK0NGTEFHUy4gIEFkZCBDT1BUUyBpbnRvIG9uZSBNYWtlZmlsZSB0aGF0IGRpZCBub3QKK3VzZSBpdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CitAQCAtMTIsNyArMTIsNyBAQCBWRVJTSU9OID0gJChzaGVsbCBhd2sgLUYgJyInICcvVkVSU0lPTi8gCisgSU5TVEFMTAk9IGluc3RhbGwKKyAKKyBQTFVHSU49cmFkaXVzLnNvIHJhZGF0dHIuc28gcmFkcmVhbG1zLnNvCistQ0ZMQUdTPS1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtTzIgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorK0NGTEFHUz0tSS4gLUkuLi8uLiAtSS4uLy4uLy4uL2luY2x1ZGUgJChDT1BUUykgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorIAorICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNaWNyb3NvZnQncworICMgTVMtQ0hBUCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVkYjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BwcDogQnVmZmVyIG92ZXJmbG93IGluIHJhZGl1cyBwbHVnaW4KKworRnJvbTogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP21zZz01O2J1Zz03ODI0NTAKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitPbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDY1NTM1IHByb2Nlc3NlcyBydW5uaW5nLCBwcHBkIGFib3J0cyB3aGVuCitzZW5kaW5nIGEgInN0YXJ0IiBhY2NvdW50aW5nIG1lc3NhZ2UgdG8gdGhlIFJBRElVUyBzZXJ2ZXIgYmVjYXVzZSBvZiBhCitidWZmZXIgb3ZlcmZsb3cgaW4gcmNfbWtzaWQuCisKK1RoZSBwcm9jZXNzIGlkIGlzIHVzZWQgaW4gcmNfbWtzaWQgdG8gZ2VuZXJhdGUgYSBwc2V1ZG8tdW5pcXVlIHN0cmluZywKK2Fzc3VtaW5nIHRoYXQgdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGlkIHdpbGwgYmUgYXQgbW9zdCA0CitjaGFyYWN0ZXJzIChGRkZGKS4gX19zcHJpbnRmX2NoaygpLCB1c2VkIHdoZW4gY29tcGlsaW5nIHdpdGgKK29wdGltaXphdGlvbiBsZXZlbHMgZ3JlYXRlciB0aGFuIDAgYW5kIEZPUlRJRllfU09VUkNFLCBkZXRlY3RzIHRoZQorYnVmZmVyIG92ZXJmbG93IGFuZCBtYWtlcyBwcHBkIGNyYXNoLgorCitUaGUgZm9sbG93aW5nIHBhdGNoIGZpeGVzIHRoZSBwcm9ibGVtLgorCistLS0gcHBwLTIuNC42Lm9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKKysrKyBwcHAtMi40LjYvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKK0BAIC03Nyw3ICs3Nyw3IEBAIHJjX21rc2lkICh2b2lkKQorICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBjbnQgPSAwOworICAgc3ByaW50ZiAoYnVmLCAiJTA4bFglMDRYJTAyaFgiLAorIAkgICAodW5zaWduZWQgbG9uZyBpbnQpIHRpbWUgKE5VTEwpLAorLQkgICAodW5zaWduZWQgaW50KSBnZXRwaWQgKCksCisrCSAgICh1bnNpZ25lZCBpbnQpIGdldHBpZCAoKSAlIDY1NTM1LAorIAkgICBjbnQgJiAweEZGKTsKKyAgIGNudCsrOworICAgcmV0dXJuIGJ1ZjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGMwMTM2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0CkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyAgIC9ldGMvaW5pdC5kL3BwcDogc3RhcnQgb3Igc3RvcCBQUFAgbGluay4KKyMKKyMgSWYgeW91IHdhbnQgUFBQIHN0YXJ0ZWQgb24gYm9vdCB0aW1lIChtb3N0IGRpYWx1cCBzeXN0ZW1zIHdvbid0IG5lZWQgaXQpCisjIHJlbmFtZSB0aGUgL2V0Yy9wcHAvbm9fcHBwX29uX2Jvb3QgZmlsZSB0byAvZXRjL3BwcC9wcHBfb25fYm9vdCwgYW5kCisjIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBjb21tZW50cyBpbiB0aGF0IGZpbGUuCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14IC91c3Ivc2Jpbi9wcHBkIC1hIC1mIC9ldGMvcHBwL3BwcF9vbl9ib290IHx8IGV4aXQgMAoraWYgWyAteCAvZXRjL3BwcC9wcHBfb25fYm9vdCBdOyB0aGVuIFJVTkZJTEU9MTsgZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgZWNobyAtbiAiU3RhcnRpbmcgdXAgUFBQIGxpbms6IHBwcGQiCisgICAgICBpZiBbICIkUlVORklMRSIgPSAiMSIgXTsgdGhlbgorICAgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgICAgZWxzZQorICAgICAgICBwcHBkIGNhbGwgcHJvdmlkZXIKKyAgICAgIGZpCisgICAgICBlY2hvICIuIgorICAgIDs7CisgIHN0b3ApCisgICAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFBQUCBsaW5rOiBwcHBkIgorICAgICAgaWYgWyAiJFJVTkZJTEUiID0gIjEiIF07IHRoZW4KKyAgICAgICAgcG9mZgorICAgICAgZWxzZQorICAgICAgICBwb2ZmIHByb3ZpZGVyCisgICAgICBmaQorICAgICAgZWNobyAiLiIKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9wcHBkOworICAgIGV4aXQgJD8KKyAgICA7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKyAgICBlY2hvIC1uICJSZXN0YXJ0aW5nIFBQUCBsaW5rOiBwcHBkIgorICAgIGlmIFsgIiRSVU5GSUxFIiA9ICIxIiBdOyB0aGVuICAgICAgCisgICAgICBwb2ZmCisgICAgICBzbGVlcCA1CisgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAKKyAgICAgIHBvZmYgcHJvdmlkZXIKKyAgICAgIHNsZWVwIDUKKyAgICAgIHBwcGQgY2FsbCBwcm92aWRlcgorICAgIGZpCisgICAgZWNobyAiLiIKKyAgICA7OworICAqKQorICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3BwcCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorICAgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93biBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC1kb3duCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZDM1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93bgpAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC1kb3duLHYgMS4yIDE5OTgvMDIvMTAgMjE6MjE6NTUgcGhpbCBFeHAgJAorIworIyBUaGlzIHNjcmlwdCBpcyBydW4gYnkgdGhlIHBwcGQgX2FmdGVyXyB0aGUgbGluayBpcyBicm91Z2h0IGRvd24uCisjIEl0IHVzZXMgcnVuLXBhcnRzIHRvIHJ1biBzY3JpcHRzIGluIC9ldGMvcHBwL2lwLWRvd24uZCwgc28gdG8gZGVsZXRlCisjIHJvdXRlcywgdW5zZXQgSVAgYWRkcmVzc2VzIGV0Yy4geW91IHNob3VsZCBjcmVhdGUgc2NyaXB0KHMpIHRoZXJlLgorIworIyBCZSBhd2FyZSB0aGF0IG90aGVyIHBhY2thZ2VzIG1heSBpbmNsdWRlIC9ldGMvcHBwL2lwLWRvd24uZCBzY3JpcHRzIChuYW1lZAorIyBhZnRlciB0aGF0IHBhY2thZ2UpLCBzbyBjaG9vc2UgbG9jYWwgc2NyaXB0IG5hbWVzIHdpdGggdGhhdCBpbiBtaW5kLgorIworIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyMgICAgQXJnICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCisjICAgICQxICAgSW50ZXJmYWNlIG5hbWUgICAgICAgICAgICAgICAgcHBwMAorIyAgICAkMiAgIFRoZSB0dHkgICAgICAgICAgICAgICAgICAgICAgIHR0eVMxCisjICAgICQzICAgVGhlIGxpbmsgc3BlZWQgICAgICAgICAgICAgICAgMzg0MDAKKyMgICAgJDQgICBMb2NhbCBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni43OAorIyAgICAkNSAgIFBlZXIgIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljk5CisjICAgICQ2ICAgT3B0aW9uYWwgYGBpcHBhcmFtJycgdmFsdWUgICAgZm9vCisKKyMgVGhlICBlbnZpcm9ubWVudCBpcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBzY3JpcHQKKyMgc28gdGhlIHBhdGggbXVzdCBiZSByZXNldAorUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4KK2V4cG9ydCBQQVRICisjIFRoZXNlIHZhcmlhYmxlcyBhcmUgZm9yIHRoZSB1c2Ugb2YgdGhlIHNjcmlwdHMgcnVuIGJ5IHJ1bi1wYXJ0cworUFBQX0lGQUNFPSIkMSIKK1BQUF9UVFk9IiQyIgorUFBQX1NQRUVEPSIkMyIKK1BQUF9MT0NBTD0iJDQiCitQUFBfUkVNT1RFPSIkNSIKK1BQUF9JUFBBUkFNPSIkNiIKK2V4cG9ydCBQUFBfSUZBQ0UgUFBQX1RUWSBQUFBfU1BFRUQgUFBQX0xPQ0FMIFBQUF9SRU1PVEUgUFBQX0lQUEFSQU0KKworIyBhcyBhbiBhZGRpdGlvbmFsIGNvbnZlbmllbmNlLCAkUFBQX1RUWU5BTUUgaXMgc2V0IHRvIHRoZSB0dHkgbmFtZSwKKyMgc3RyaXBwZWQgb2YgL2Rldi8gKGlmIHByZXNlbnQpIGZvciBlYXNpZXIgbWF0Y2hpbmcuCitQUFBfVFRZTkFNRT1gL3Vzci9iaW4vYmFzZW5hbWUgIiQyImAKK2V4cG9ydCBQUFBfVFRZTkFNRSAKKworIyBNYWluIFNjcmlwdCBzdGFydHMgaGVyZQorCitydW4tcGFydHMgL2V0Yy9wcHAvaXAtZG93bi5kCisKKyMgbGFzdCBsaW5lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtdXAgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtdXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmMyZmFlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC11cCx2IDEuMiAxOTk4LzAyLzEwIDIxOjI1OjM0IHBoaWwgRXhwICQKKyMKKyMgVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IHRoZSBwcHBkIGFmdGVyIHRoZSBsaW5rIGlzIGVzdGFibGlzaGVkLgorIyBJdCB1c2VzIHJ1bi1wYXJ0cyB0byBydW4gc2NyaXB0cyBpbiAvZXRjL3BwcC9pcC11cC5kLCBzbyB0byBhZGQgcm91dGVzLAorIyBzZXQgSVAgYWRkcmVzcywgcnVuIHRoZSBtYWlscSBldGMuIHlvdSBzaG91bGQgY3JlYXRlIHNjcmlwdChzKSB0aGVyZS4KKyMKKyMgQmUgYXdhcmUgdGhhdCBvdGhlciBwYWNrYWdlcyBtYXkgaW5jbHVkZSAvZXRjL3BwcC9pcC11cC5kIHNjcmlwdHMgKG5hbWVkCisjIGFmdGVyIHRoYXQgcGFja2FnZSksIHNvIGNob29zZSBsb2NhbCBzY3JpcHQgbmFtZXMgd2l0aCB0aGF0IGluIG1pbmQuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorIyAgICBBcmcgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKKyMgICAgJDEgICBJbnRlcmZhY2UgbmFtZSAgICAgICAgICAgICAgICBwcHAwCisjICAgICQyICAgVGhlIHR0eSAgICAgICAgICAgICAgICAgICAgICAgdHR5UzEKKyMgICAgJDMgICBUaGUgbGluayBzcGVlZCAgICAgICAgICAgICAgICAzODQwMAorIyAgICAkNCAgIExvY2FsIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljc4CisjICAgICQ1ICAgUGVlciAgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuOTkKKyMgICAgJDYgICBPcHRpb25hbCBgYGlwcGFyYW0nJyB2YWx1ZSAgICBmb28KKworIyBUaGUgIGVudmlyb25tZW50IGlzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGlzIHNjcmlwdAorIyBzbyB0aGUgcGF0aCBtdXN0IGJlIHJlc2V0CitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbgorZXhwb3J0IFBBVEgKKyMgVGhlc2UgdmFyaWFibGVzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgc2NyaXB0cyBydW4gYnkgcnVuLXBhcnRzCitQUFBfSUZBQ0U9IiQxIgorUFBQX1RUWT0iJDIiCitQUFBfU1BFRUQ9IiQzIgorUFBQX0xPQ0FMPSIkNCIKK1BQUF9SRU1PVEU9IiQ1IgorUFBQX0lQUEFSQU09IiQ2IgorZXhwb3J0IFBQUF9JRkFDRSBQUFBfVFRZIFBQUF9TUEVFRCBQUFBfTE9DQUwgUFBQX1JFTU9URSBQUFBfSVBQQVJBTQorCisKKyMgYXMgYW4gYWRkaXRpb25hbCBjb252ZW5pZW5jZSwgJFBQUF9UVFlOQU1FIGlzIHNldCB0byB0aGUgdHR5IG5hbWUsCisjIHN0cmlwcGVkIG9mIC9kZXYvIChpZiBwcmVzZW50KSBmb3IgZWFzaWVyIG1hdGNoaW5nLgorUFBQX1RUWU5BTUU9YC91c3IvYmluL2Jhc2VuYW1lICIkMiJgCitleHBvcnQgUFBQX1RUWU5BTUUgCisKKyMgTWFpbiBTY3JpcHQgc3RhcnRzIGhlcmUKKworcnVuLXBhcnRzIC9ldGMvcHBwL2lwLXVwLmQKKworIyBsYXN0IGxpbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5NzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1RoZSBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZC4KK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBkYXRlZCBmcm9tIE9FLUNsYXNzaWMgdG8gaW5jbHVkZSB0aGUgcGNhcCBodW5rLgorU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE3OjA4OjIxLjgwNjM2MzA0MiArMDgwMAorQEAgLTExNywxMCArMTE3LDEwIEBACisgI0xJQlMgICAgICs9IC1sc2hhZG93ICQoTElCUykKKyBlbmRpZgorIAorLWlmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisrI2lmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisgQ0ZMQUdTICArPSAtREhBVkVfQ1JZUFRfSD0xCisgTElCUwkrPSAtbGNyeXB0CistZW5kaWYKKysjZW5kaWYKKyAKKyBpZmRlZiBORUVEREVTCisgaWZuZGVmIFVTRV9DUllQVAorQEAgLTE2OSwxMCArMTY5LDEwIEBACisgZW5kaWYKKyAKKyBpZmRlZiBGSUxURVIKKy1pZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorKyNpZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorIExJQlMgICAgKz0gLWxwY2FwCisgQ0ZMQUdTICArPSAtRFBQUF9GSUxURVIKKy1lbmRpZgorKyNlbmRpZgorIGVuZGlmCisgCisgaWZkZWYgSEFWRV9JTkVUNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDliYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorVGhlIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkCitSZWJhc2VkIGZvciBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL2NoYXQvTWFrZWZpbGUubGludXggcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9jaGF0L01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MTozMC40NTAxMTg0NDYgKzA4MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgCisgaW5zdGFsbDogY2hhdAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgY2hhdCAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBjaGF0ICQoQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCBjaGF0LjggJChNQU5ESVIpCisgCisgY2xlYW46CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUyOjExLjIxNDE3MDYwNyArMDgwMAorQEAgLTk5LDcgKzk5LDcgQEAKKyBDRkxBR1MJKz0gLURVU0VfU1JQIC1ET1BFTlNTTCAtSS91c3IvbG9jYWwvc3NsL2luY2x1ZGUKKyBMSUJTCSs9IC1sc3JwIC1ML3Vzci9sb2NhbC9zc2wvbGliIC1sY3J5cHRvCisgVEFSR0VUUwkrPSBzcnAtZW50cnkKKy1FWFRSQUlOU1RBTEwgPSAkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBzcnAtZW50cnkgJChCSU5ESVIpL3NycC1lbnRyeQorK0VYVFJBSU5TVEFMTCA9ICQoSU5TVEFMTCkgLWMgLW0gNTU1IHNycC1lbnRyeSAkKEJJTkRJUikvc3JwLWVudHJ5CisgTUFOUEFHRVMgKz0gc3JwLWVudHJ5LjgKKyBFWFRSQUNMRUFOICs9IHNycC1lbnRyeS5vCisgTkVFRERFUz15CitAQCAtMjAwLDcgKzIwMCw3IEBACisgaW5zdGFsbDogcHBwZAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCisgCSQoRVhUUkFJTlNUQUxMKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBwcHBkICQoQklORElSKS9wcHBkCisrCSQoSU5TVEFMTCkgLWMgLW0gNTU1IHBwcGQgJChCSU5ESVIpL3BwcGQKKyAJaWYgY2hncnAgcHBwdXNlcnMgJChCSU5ESVIpL3BwcGQgMj4vZGV2L251bGw7IHRoZW4gXAorIAkgIGNobW9kIG8tcngsdStzICQoQklORElSKS9wcHBkOyBmaQorIAkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkLjggJChNQU5ESVIpCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDc2NzYxODcgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjQ3Ljc1MDE4MjI2NyArMDgwMAorQEAgLTM2LDExICszNiwxMSBAQAorIAorIGluc3RhbGw6IGFsbAorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA3NTUgcmFkaXVzLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRhdHRyLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRyZWFsbXMuc28gJChMSUJESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkaXVzLjggJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkYXR0ci44ICQoTUFORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSByYWRpdXMuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZGF0dHIuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZHJlYWxtcy5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRpdXMuOCAkKE1BTkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRhdHRyLjggJChNQU5ESVIpCisgCisgcmFkaXVzLnNvOiByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorIAkkKENDKSAtbyByYWRpdXMuc28gLXNoYXJlZCByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQ3Njc2MTg3ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjE1LjQ1NDQ4Njg3NyArMDgwMAorQEAgLTQzLDkgKzQzLDkgQEAKKyAKKyBpbnN0YWxsOiBhbGwKKyAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNDU1MCBycC1wcHBvZS5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA0NTUwIHJwLXBwcG9lLnNvICQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKEJJTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA1NTUgcHBwb2UtZGlzY292ZXJ5ICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDU1NSBwcHBvZS1kaXNjb3ZlcnkgJChCSU5ESVIpCisgCisgY2xlYW46CisgCXJtIC1mICoubyAqLnNvIHBwcG9lLWRpc2NvdmVyeQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGR1bXAvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkdW1wL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MjoyNS43NjIxODM1MzcgKzA4MDAKK0BAIC0xNyw1ICsxNyw1IEBACisgCisgaW5zdGFsbDoKKyAJbWtkaXIgLXAgJChCSU5ESVIpICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIHBwcGR1bXAgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgcHBwZHVtcCAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZHVtcC44ICQoTUFORElSKQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBzdGF0cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTI6NDIuNDg2MzQxMDgxICswODAwCitAQCAtMjIsNyArMjIsNyBAQAorIAorIGluc3RhbGw6IHBwcHN0YXRzCisgCS1ta2RpciAtcCAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwc3RhdHMuOCAkKE1BTkRJUikKKyAKKyBwcHBzdGF0czogJChQUFBTVEFUU1JDUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wYXAgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcGFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2MzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcGFwCkBAIC0wLDAgKzEsMjIgQEAKKyMgWW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgdW5tb2RpZmllZCB0byBjb25uZWN0IHRvIHNpdGVzIHdoaWNoIGFsbG93CisjIGF1dGhlbnRpY2F0aW9uIHZpYSBQQVAsIENIQVAgYW5kIHNpbWlsYXIgcHJvdG9jb2xzLgorIyBUaGlzIHNjcmlwdCBjYW4gYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBwcHBkIHBlZXIgY29uZmlndXJhdGlvbnMuCisjIFRvIHVzZSBpdCwgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciAvZXRjL3BwcC9wZWVycy8gZmlsZToKKyMKKyMgY29ubmVjdCAiL3Vzci9zYmluL2NoYXQgLXYgLWYgL2V0Yy9jaGF0c2NyaXB0cy9wYXAgLVQgUEhPTkUtTlVNQkVSIgorIyB1c2VyIFlPVVItVVNFUk5BTUUtSU4tUEFQLVNFQ1JFVFMKKyMgbm9hdXRoCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBzZWUgdGhlIGNvbm5lY3Qgc3BlZWQuCisjIEl0IHdpbGwgYmUgbG9nZ2VkIHRvIHN0ZGVyciBvciB0byB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCB0aGUgLXIgY2hhdCBvcHRpb24uCisjUkVQT1JUCQlDT05ORUNUCisKK0FCT1JUCQlCVVNZCitBQk9SVAkJVk9JQ0UKK0FCT1JUCQkiTk8gQ0FSUklFUiIKK0FCT1JUCQkiTk8gRElBTFRPTkUiCitBQk9SVAkJIk5PIERJQUwgVE9ORSIKKyIiCQlBVFoKK09LCQlBVERUXFQKK0NPTk5FQ1QJCSIiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyMWE5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIExldHMgc2VlIGhvdyBtYW55IHBwcGRzIGFyZSBydW5uaW5nLi4uLgorc2V0IC0tIGBjYXQgL3Zhci9ydW4vcHBwKi5waWQgMj4vZGV2L251bGxgCisKK2Nhc2UgJCMgaW4KKyAgMCkgIyBwcHBkIG9ubHkgY3JlYXRlcyBhIHBpZCBmaWxlIG9uY2UgcHBwIGlzIHVwLCBzbyBsZXQncyB0cnkga2lsbGluZyBwcHBkCisgICAgICMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSd2ZSBub3QgZ290IHRoYXQgZmFyIHlldC4KKyAgICAga2lsbGFsbCBwcHBkCisgICAgIDs7CisgIDEpICMgSWYgb25seSBvbmUgd2FzIHJ1bm5pbmcgdGhlbiBpdCBjYW4gYmUga2lsbGVkIChhcHBhcmVudGx5IGtpbGxhbGwKKyAgICAgIyBjYXVzZWQgcHJvYmxlbXMgZm9yIHNvbWUsIHNvIGxldHMgdHJ5IGtpbGxpbmcgdGhlIHBpZCBmcm9tIHRoZSBmaWxlKQorICAgICBraWxsICQxCisgICAgIDs7CisgICopICMgTW9yZSB0aGFuIG9uZSEgQWllZWhoLi4gRG9udCBrbm93IHdoaWNoIG9uZSB0byBraWxsLgorICAgICBlY2hvICJNb3JlIHRoYW4gb25lIHBwcGQgcnVubmluZy4gTm9uZSBzdG9wcGVkIgorICAgICBleGl0IDEKKyAgICAgOzsKK2VzYWMKKworaWYgWyAtciAvdmFyL3J1bi9wcHAtcXVpY2sgXQordGhlbgorICAgIHJtIC1mIC92YXIvcnVuL3BwcC1xdWljaworZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9uIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMwNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvbgpAQCAtMCwwICsxLDkgQEAKKyMhL2Jpbi9zaAorCitpZiBbICIkMSIgPSAicXVpY2siIF0KK3RoZW4KKyAgICB0b3VjaCAvdmFyL3J1bi9wcHAtcXVpY2sKKyAgICBzaGlmdAorZmkKKworL3Vzci9zYmluL3BwcGQgY2FsbCAkezE6LXByb3ZpZGVyfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcEAuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmMGI1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBALnNlcnZpY2UKQEAgLTAsMCArMSw5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBQUCBsaW5rIHRvICVJCitCZWZvcmU9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3BwcGQgY2FsbCAlSSBub2RldGFjaCBub2xvZworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwX29uX2Jvb3QgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwX29uX2Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5Mzc2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdApAQCAtMCwwICsxLDIxIEBACisjIyMhL2Jpbi9zaAorIworIyAgIFJlbmFtZSB0aGlzIGZpbGUgdG8gcHBwX29uX2Jvb3QgYW5kIHBwcGQgd2lsbCBiZSBmaXJlZCB1cCBhcworIyAgIHNvb24gYXMgdGhlIHN5c3RlbSBjb21lcyB1cCwgY29ubmVjdGluZyB0byBgcHJvdmlkZXInLgorIworIyAgIElmIHlvdSBhbHNvIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUsIGFuZCByZXBsYWNlIHRoZSBmaXJzdCBsaW5lCisjICAgd2l0aCBqdXN0ICIjIS9iaW4vc2giLCB0aGUgY29tbWFuZHMgYmVsb3cgd2lsbCBiZSBleGVjdXRlZCBpbnN0ZWFkLgorIworCisjIFRoZSBsb2NhdGlvbiBvZiB0aGUgcHBwIGRhZW1vbiBpdHNlbGYgKHNob3VsZG4ndCBuZWVkIHRvIGJlIGNoYW5nZWQpCitQUFBEPS91c3Ivc2Jpbi9wcHBkCisKKyMgVGhlIGRlZmF1bHQgcHJvdmlkZXIgdG8gY29ubmVjdCB0bworJFBQUEQgY2FsbCBwcm92aWRlcgorCisjIEFkZGl0aW9uYWwgY29ubmVjdGlvbnMsIHdoaWNoIHdvdWxkIGp1c3QgdXNlIHNldHRpbmdzIGZyb20KKyMgL2V0Yy9wcHAvb3B0aW9ucy48dHR5PgorIyRQUFBEIHR0eVMwCisjJFBQUEQgdHR5UzEKKyMkUFBQRCB0dHlTMgorIyRQUFBEIHR0eVMzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI0MTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitUaGUgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQKK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTc6MDI6MzMuOTMwMzkzMjgzICswODAwCitAQCAtNTUsNiArNTUsOCBAQAorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlICJwcHBkLmgiCisgI2luY2x1ZGUgImZzbS5oIgorQEAgLTIwOTUsNiArMjA5NywxNCBAQAorICAgICB1X2ludDMyX3QgcGVlcmRuczEsIHBlZXJkbnMyOworIHsKKyAgICAgRklMRSAqZjsKKysgICAgc3RydWN0IHN0YXQgZGlyaW5mbzsKKysKKysgICAgaWYoc3RhdChfUEFUSF9PVVRESVIsICZkaXJpbmZvKSkgeworKyAgICAgICAgaWYobWtkaXIoX1BBVEhfT1VURElSLCAwNzc1KSkgeworKyAgICAgICAgICAgIGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlczogJW0iLCBfUEFUSF9PVVRESVIpOworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgfQorIAorICAgICBmID0gZm9wZW4oX1BBVEhfUkVTT0xWLCAidyIpOworICAgICBpZiAoZiA9PSBOVUxMKSB7CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wYXRobmFtZXMuaCBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGF0aG5hbWVzLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAkyMDEwLTA2LTMwIDE3OjAzOjIwLjU5NDM3MTA1NSArMDgwMAorQEAgLTMwLDcgKzMwLDggQEAKKyAjZGVmaW5lIF9QQVRIX1RUWU9QVAkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvb3B0aW9ucy4iCisgI2RlZmluZSBfUEFUSF9DT05ORVJSUwkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvY29ubmVjdC1lcnJvcnMiCisgI2RlZmluZSBfUEFUSF9QRUVSRklMRVMJIF9ST09UX1BBVEggIi9ldGMvcHBwL3BlZXJzLyIKKy0jZGVmaW5lIF9QQVRIX1JFU09MVgkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvcmVzb2x2LmNvbmYiCisrI2RlZmluZSBfUEFUSF9PVVRESVIJX1JPT1RfUEFUSCBfUEFUSF9WQVJSVU4gIi9wcHAiCisrI2RlZmluZSBfUEFUSF9SRVNPTFYJX1BBVEhfT1VURElSICIvcmVzb2x2LmNvbmYiCisgCisgI2RlZmluZSBfUEFUSF9VU0VST1BUCSAiLnBwcHJjIgorICNkZWZpbmUJX1BBVEhfUFNFVURPTllNCSAiLnBwcF9wc2V1ZG9ueW0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHJvdmlkZXIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHJvdmlkZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0ZDcxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlcgpAQCAtMCwwICsxLDM1IEBACisjIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgYSBkaWFsdXAgY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkIHdpdGggUEFQIG9yIENIQVAKKyMKKyMgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHVzZWQgYnkgcG9uKDEpIGFuZCBwb2ZmKDEpLgorIyBTZWUgdGhlIG1hbnVhbCBwYWdlIHBwcGQoOCkgZm9yIGluZm9ybWF0aW9uIG9uIGFsbCB0aGUgb3B0aW9ucy4KKworIyBNVVNUIENIQU5HRTogcmVwbGFjZSBteXVzZXJuYW1lQHJlYWxtIHdpdGggdGhlIFBQUCBsb2dpbiBuYW1lIGdpdmVuIHRvCisjIHlvdXIgYnkgeW91ciBwcm92aWRlci4KKyMgVGhlcmUgc2hvdWxkIGJlIGEgbWF0Y2hpbmcgZW50cnkgd2l0aCB0aGUgcGFzc3dvcmQgaW4gL2V0Yy9wcHAvcGFwLXNlY3JldHMKKyMgYW5kL29yIC9ldGMvcHBwL2NoYXAtc2VjcmV0cy4KK3VzZXIgIm15dXNlcm5hbWVAcmVhbG0iCisKKyMgTVVTVCBDSEFOR0U6IHJlcGxhY2UgKioqKioqKiogd2l0aCB0aGUgcGhvbmUgbnVtYmVyIG9mIHlvdXIgcHJvdmlkZXIuCisjIFRoZSAvZXRjL2NoYXRzY3JpcHRzL3BhcCBjaGF0IHNjcmlwdCBtYXkgYmUgbW9kaWZpZWQgdG8gY2hhbmdlIHRoZQorIyBtb2RlbSBpbml0aWFsaXphdGlvbiBzdHJpbmcuCitjb25uZWN0ICIvdXNyL3NiaW4vY2hhdCAtdiAtZiAvZXRjL2NoYXRzY3JpcHRzL3BhcCAtVCAqKioqKioqKiIKKworIyBTZXJpYWwgZGV2aWNlIHRvIHdoaWNoIHRoZSBtb2RlbSBpcyBjb25uZWN0ZWQuCisvZGV2L21vZGVtCisKKyMgU3BlZWQgb2YgdGhlIHNlcmlhbCBsaW5lLgorMTE1MjAwCisKKyMgQXNzdW1lcyB0aGF0IHlvdXIgSVAgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYnkgdGhlIElTUC4KK25vaXBkZWZhdWx0CisjIFRyeSB0byBnZXQgdGhlIG5hbWUgc2VydmVyIGFkZHJlc3NlcyBmcm9tIHRoZSBJU1AuCit1c2VwZWVyZG5zCisjIFVzZSB0aGlzIGNvbm5lY3Rpb24gYXMgdGhlIGRlZmF1bHQgcm91dGUuCitkZWZhdWx0cm91dGUKKworIyBNYWtlcyBwcHBkICJkaWFsIGFnYWluIiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuCitwZXJzaXN0CisKKyMgRG8gbm90IGFzayB0aGUgcmVtb3RlIHRvIGF1dGhlbnRpY2F0ZS4KK25vYXV0aAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjMzhlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIlBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJwcHAgKFBhdWwncyBQUFAgUGFja2FnZSkgaXMgYW4gb3BlbiBzb3VyY2UgcGFja2FnZSB3aGljaCBpbXBsZW1lbnRzIFwKK3RoZSBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBvbiBMaW51eCBhbmQgU29sYXJpcyBzeXN0ZW1zLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhbWJhLm9yZy9wcHAvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9jZ2ktYmluL3BwcC1idWdzIgorREVQRU5EUyA9ICJsaWJwY2FwIgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIrICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wcHBkL2NjcC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PWUyYzQzZmU2ZTgxZmY3N2Q4N2RjOWMyOTBhNDI0ZGVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BwcGQvcGx1Z2lucy9wYXNzcHJvbXB0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9M2JjYmNkYmYwZTM2OWM5YTNlMGI4YzgyNzViMDY1ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcHBwZC90ZGIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT00Y2EzYTk5OTFiMDExMDM4ZDA4NWQ2Njc1YWU3YzRlNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jaGF0L2NoYXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE1O21kNT0wZDM3NGI4NTQ1ZWU1YzYyZDdhZmYxYWNiZDM4YWRkMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9mdHAvcHBwL3BwcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2lmZGVmcm91dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9uIFwKKyAgICAgICAgICAgZmlsZTovL3BvZmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC11cCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC1kb3duIFwKKyAgICAgICAgICAgZmlsZTovLzA4c2V0dXBkbnMgXAorICAgICAgICAgICBmaWxlOi8vOTJyZW1vdmVkbnMgXAorICAgICAgICAgICBmaWxlOi8vY29wdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFwIFwKKyAgICAgICAgICAgZmlsZTovL3BwcF9vbl9ib290IFwKKyAgICAgICAgICAgZmlsZTovL3Byb3ZpZGVyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4ODE4ZjQwZTZkMzNhMWQxZGU2OGExNTUxZjY1OTVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyZTBhM2RkM2U0Nzk5ZTMzMTAzZjcwZWM3ZGY3NTM0OGM4NTQwOTY2ZWU3Yzk0OGU0ZWQ4YTQyYmJjY2ZiMzAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBzeXN0ZW1kCisKK1RBUkdFVF9DQ19BUkNIICs9ICIgJHtMREZMQUdTfSIKK0VYVFJBX09FTUFLRSA9ICJTVFJJUFBST0c9JHtTVFJJUH0gTUFORElSPSR7RH0ke2RhdGFkaXJ9L21hbi9tYW44IElOQ0RJUj0ke0R9JHtpbmNsdWRlZGlyfSBMSUJESVI9JHtEfSR7bGliZGlyfS9wcHBkLyR7UFZ9IEJJTkRJUj0ke0R9JHtzYmluZGlyfSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc3RyaXAiCisKKyMgUGFja2FnZSBNYWtlZmlsZSBjb21wdXRlcyBDRkxBR1MsIHJlZmVyZW5jaW5nIENPUFRTLgorIyBUeXBpY2FsbHkgaGFyZC1jb2RlZCB0byAnLU8yIC1nJyBpbiB0aGUgTWFrZWZpbGUncy4KKyMKK0VYVFJBX09FTUFLRSArPSAnIENPUFRTPSIke0NGTEFHU30gLUkke1N9L2luY2x1ZGUiJworCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW1ha2UgaW5zdGFsbC1ldGNwcHAgRVRDRElSPSR7RH0vJHtzeXNjb25mZGlyfS9wcHAKKwlta2RpciAtcCAke0R9JHtiaW5kaXJ9LyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtdXAuZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtZG93bi5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvbiAke0R9JHtiaW5kaXJ9L3BvbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvZmYgJHtEfSR7YmluZGlyfS9wb2ZmCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcHBwCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaXAtdXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2lwLWRvd24gJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzA4c2V0dXBkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLXVwLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vOTJyZW1vdmVkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLWRvd24uZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BhcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BwcF9vbl9ib290ICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wcHBfb25fYm9vdAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Byb3ZpZGVyICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycy9wcm92aWRlcgorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcHBALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCSAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcHBALnNlcnZpY2UKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0vbWFuOC9tYW44CisJY2htb2QgdStzICR7RH0ke3NiaW5kaXJ9L3BwcGQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHBwL3BhcC1zZWNyZXRzICR7c3lzY29uZmRpcn0vcHBwL2NoYXAtc2VjcmV0cyAke3N5c2NvbmZkaXJ9L3BwcC9vcHRpb25zIgorUEFDS0FHRVMgPSsgIiR7UE59LW9hICR7UE59LW9lICR7UE59LXJhZGl1cyAke1BOfS13aW5iaW5kICR7UE59LW1pbmNvbm4gJHtQTn0tcGFzc3dvcmQgJHtQTn0tbDJ0cCAke1BOfS10b29scyIKK0ZJTEVTXyR7UE59ICAgICAgICA9ICIke3N5c2NvbmZkaXJ9ICR7YmluZGlyfSAke3NiaW5kaXJ9L2NoYXQgJHtzYmluZGlyfS9wcHBkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHBwQC5zZXJ2aWNlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS8uZGVidWciCitGSUxFU18ke1BOfS1vYSAgICAgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9wcHBvYXRtLnNvIgorRklMRVNfJHtQTn0tb2UgICAgICAgPSAiJHtzYmluZGlyfS9wcHBvZS1kaXNjb3ZlcnkgJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcnAtcHBwb2Uuc28iCitGSUxFU18ke1BOfS1yYWRpdXMgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRpdXMuc28gJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcmFkYXR0ci5zbyAke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRyZWFsbXMuc28iCitGSUxFU18ke1BOfS13aW5iaW5kICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS93aW5iaW5kLnNvIgorRklMRVNfJHtQTn0tbWluY29ubiAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vbWluY29ubi5zbyIKK0ZJTEVTXyR7UE59LXBhc3N3b3JkID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3Bhc3MqLnNvIgorRklMRVNfJHtQTn0tbDJ0cCAgICAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vKmwydHAuc28iCitGSUxFU18ke1BOfS10b29scyAgICA9ICIke3NiaW5kaXJ9L3BwcHN0YXRzICR7c2JpbmRpcn0vcHBwZHVtcCIKK1NVTU1BUllfJHtQTn0tb2EgICAgICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFBQUC1vdmVyLUFUTSBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS1vZSAgICAgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgUFBQLW92ZXItRXRoZXJuZXQgc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0tcmFkaXVzICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFJBRElVUyBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS13aW5iaW5kICA9ICJQbHVnaW4gZm9yIFBQUCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCBTYW1iYSBvciBXaW5kb3dzIgorU1VNTUFSWV8ke1BOfS1taW5jb25uICA9ICJQbHVnaW4gZm9yIFBQUCB0byBzZXQgYSBkZWxheSBiZWZvcmUgdGhlIGlkbGUgdGltZW91dCBhcHBsaWVzIgorU1VNTUFSWV8ke1BOfS1wYXNzd29yZCA9ICJQbHVnaW4gZm9yIFBQUCB0byBnZXQgcGFzc3dvcmRzIHZpYSBhIHBpcGUiCitTVU1NQVJZXyR7UE59LWwydHAgICAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBsMnRwIHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LXRvb2xzICAgID0gIkFkZGl0aW9uYWwgdG9vbHMgZm9yIHRoZSBQUFAgcGFja2FnZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mLzk5X3Jlc29sdmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi85OV9yZXNvbHZjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTBkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi85OV9yZXNvbHZjb25mCkBAIC0wLDAgKzEsNCBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9yZXNvbHZjb25mL2ludGVyZmFjZSBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2Y29uZi9ydW4vcmVzb2x2LmNvbmYgbm9uZQorZiByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdmNvbmYvcnVuL2VuYWJsZS11cGRhdGVzIG5vbmUKK2wgcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHYuY29uZiAvZXRjL3Jlc29sdmNvbmYvcnVuL3Jlc29sdi5jb25mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZWFkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKK2J1c3lib3ggaW5zdGFsbHMgcmVhZGxpbmsgaW50byAvdXNyL2Jpbiwgc28gZW5zdXJlIC91c3IvYmluCitpcyBpbiB0aGUgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVzb2x2Y29uZi0xLjc2Lm9yaWcvZXRjL3Jlc29sdmNvbmYvdXBkYXRlLmQvbGliYworKysrIHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCitAQCAtMTYsNyArMTYsNyBAQAorICMKKyAKKyBzZXQgLWUKKy1QQVRIPS9zYmluOi9iaW4KKytQQVRIPS9zYmluOi9iaW46L3Vzci9iaW4KKyAKKyBbIC14IC9saWIvcmVzb2x2Y29uZi9saXN0LXJlY29yZHMgXSB8fCBleGl0IDEKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzcuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZl8xLjc3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNmI5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZl8xLjc3LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAibmFtZSBzZXJ2ZXIgaW5mb3JtYXRpb24gaGFuZGxlciIKK0RFU0NSSVBUSU9OID0gIlJlc29sdmNvbmYgaXMgYSBmcmFtZXdvcmsgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN5c3RlbSdzIFwKK2luZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBhdmFpbGFibGUgbmFtZXNlcnZlcnMuIEl0IHNldHMgXAoraXRzZWxmIHVwIGFzIHRoZSBpbnRlcm1lZGlhcnkgYmV0d2VlbiBwcm9ncmFtcyB0aGF0IHN1cHBseSBcCituYW1lc2VydmVyIGluZm9ybWF0aW9uIGFuZCBwcm9ncmFtcyB0aGF0IG5lZWQgbmFtZXNlcnZlciBcCitpbmZvcm1hdGlvbi4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCitBVVRIT1IgPSAiVGhvbWFzIEhvb2QiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9yZXNvbHZjb25mIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDUxMVQyMTQ3MThaL3Bvb2wvbWFpbi9yLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3Jlc29sdmNvbmYgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjczNjJkNzY2ZTQ3YmZjMjUzNTAwZjQyYjMwMzMwZDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNmUyMWU4YmE2ODIyYTVmOTMwNzVjOGM4ZmU3OTc3ZTM0NzgwYmE1NTFhZjUxOTMwZDBiMzFmZGQ5OWFiNTYiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9yZXNvbHZjb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi8ke0JQTn0vaW50ZXJmYWNlIC0gLSAtIC0iIFwKKwkJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfQorCWxuIC1zbmYgJHtsb2NhbHN0YXRlZGlyfS9ydW4vJHtCUE59ICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfS9ydW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9JHtkb2NkaXJ9LyR7UH0KKwljcCAtcFBSIGV0Yy8qICR7RH0ke3N5c2NvbmZkaXJ9LworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3Jlc29sdmNvbmYgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2xpc3QtcmVjb3JkcyAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kCisJaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLjAwMHJlc29sdmNvbmYuaWYtdXAgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZC8wMDByZXNvbHZjb25mCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGViaWFuL3Jlc29sdmNvbmYucmVzb2x2Y29uZi5pZi1kb3duICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZC9yZXNvbHZjb25mCisJaW5zdGFsbCAtbSAwNjQ0IFJFQURNRSAke0R9JHtkb2NkaXJ9LyR7UH0vCisJaW5zdGFsbCAtbSAwNjQ0IG1hbi9yZXNvbHZjb25mLjggJHtEfSR7bWFuZGlyfS9tYW44LworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9yZXNvbHZjb25mLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8ke0JQTn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0L01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0L01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ZGI2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGM2ZjAwODBiNTU2NzliNmU4YjVkMzMyZDZlMDVmZGNiZGExZTQwNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgNCBNYXkgMjAxNSAwMDo1ODo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5pbjogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3ZzbnByaW50Zl9yLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDMgZXhpdCBzdGF0dXMKK01ha2VmaWxlOjEyMjogcmVjaXBlIGZvciB0YXJnZXQgJ2ZpbGFuJyBmYWlsZWQKKworTGV0IGZpbGFuIGRlcGVuZCBvbiB2c25wcmludGZfci5vIGFuZCBzbnByaW50ZXJyLm8gdG8gZml4IHRoZSBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBmMmE2ZWRiLi44OGI3ODRiIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTE4LDcgKzExOCw3IEBAIFBST0NBTl9PQkpTPXByb2Nhbl9tYWluLm8gcHJvY2FuLm8gcHJvY2FuLWNkZWZzLm8gaG9zdGFuLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0CisgcHJvY2FuOiAkKFBST0NBTl9PQkpTKQorIAkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFBST0NBTl9PQkpTKSAkKENMSUJTKQorIAorLWZpbGFuOiBmaWxhbl9tYWluLm8gZmlsYW4ubyBmZG5hbWUubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXRpbHMubyB1dGlscy5vCisrZmlsYW46IGZpbGFuX21haW4ubyBmaWxhbi5vIGZkbmFtZS5vIGVycm9yLm8gc3ljbHMubyBzeXN1dGlscy5vIHV0aWxzLm8gdnNucHJpbnRmX3IubyBzbnByaW50ZXJyLm8KKyAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgZmlsYW5fbWFpbi5vIGZpbGFuLm8gZmRuYW1lLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0aWxzLm8gdXRpbHMubyB2c25wcmludGZfci5vIHNucHJpbnRlcnIubyAkKENMSUJTKQorIAorIGxpYnhpby5hOiAkKFhJT09CSlMpICQoVVRMT0JKUykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZTBhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk11bHRpcHVycG9zZSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiU29jYXQgaXMgYSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIFwKK3RyYW5zZmVyIGJldHdlZW4gdHdvIGluZGVwZW5kZW50IGRhdGEgY2hhbm5lbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0LyIKKworU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0RFUEVORFMgPSAib3BlbnNzbCByZWFkbGluZSIKKworTElDRU5TRSA9ICJHUEwtMi4wKy13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNTc7ZW5kbGluZT0yODc7bWQ1PTMzOGMwNWVhZGQwMTM4NzJhYmIxZDZlMTk4ZTEwYTNmIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0L2Rvd25sb2FkL3NvY2F0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNjA3ZWRiNjViYzZjNTdmNGE0M2YwNjI0NzUwNDI3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzY3ZTg1MGMwMzI5YjlmZGY3MTFjNmNkNDY4NTY1Y2JiYjI4Nzg2YmExYThhMWNiZDU1MzFkNDAxNmIzZTA0IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9oYXZlX3pfbW9kaWZpZXI9eWVzIHNjX2N2X3N5c19jcmRseV9zaGlmdD05IFwKKyAgICAgICAgc2NfY3Zfc3lzX3RhYmRseV9zaGlmdD0xMSBzY19jdl9zeXNfY3NpemVfc2hpZnQ9NCBcCisgICAgICAgIGFjX2N2X2lzcGVlZF9vZmZzZXQ9MTMgXAorICAgICAgICBhY19jdl9oZWFkZXJfYnNkX2xpYnV0aWxfaD1ubyBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS1lbmFibGUtbGlid3JhcCwtLWRpc2FibGUtbGlid3JhcCx0Y3Atd3JhcHBlcnMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvYXZvaWRfc3RyaXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2F2b2lkX3N0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGUyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2F2b2lkX3N0cmlwLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3dpcmVsZXNzX3Rvb2xzOiBBdm9pZCBzdHJpcHBpbmcgaXdtdWx0aWNhbGwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVGhlIHJlbW92ZWQgY29kZSB3YXMgZnJvbSB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCistLS0gd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZQkyMDExLTA2LTE4IDExOjM1OjEyLjE4MzkwNzQ1MyAtMDUwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCTIwMTEtMDYtMTggMTE6Mzg6MDkuOTk1OTA3OTg1IC0wNTAwCitAQCAtMTM1LDkgKzEzNSw4IEBACisgCisgbWFjYWRkcjogbWFjYWRkci5vICQoSVdMSUIpCisgCistIyBBbHdheXMgZG8gc3ltYm9sIHN0cmlwcGluZyBoZXJlCisgaXdtdWx0aWNhbGw6IGl3bXVsdGljYWxsLm8KKy0JJChDQykgJChMREZMQUdTKSAtV2wsLXMgJChYQ0ZMQUdTKSAtbyAkQCAkXiAkKExJQlMpCisrCSQoQ0MpICQoTERGTEFHUykgJChTVFJJUEZMQUdTKSAkKFhDRkxBR1MpIC1vICRAICReICQoTElCUykKKyAKKyAjIEl0J3MgYSBraW5kIG9mIG1hZ2ljLi4uCisgd2lyZWxlc3MuaDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBkOGNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3dpcmVsZXNzLXRvb2xzOiBSZW1vdmUgUUEgd2FybmluZzogTm8gR05VX0hBU0ggaW4gdGhlIGVsZiBiaW5hcnkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVXNlZnVsIHdpdGhpbiBiaXRiYWtlIGVudmlyb25tZW50IG9ubHkuCisKK1NpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlCisrKysgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUKK0BAIC0xNDQsNyArMTQ0LDcgQEAgd2lyZWxlc3MuaDoKKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBkeW5hbWljIGxpYnJhcnkKKyAkKERZTkFNSUMpOiAkKE9CSlM6Lm89LnNvKQorLQkkKENDKSAtc2hhcmVkIC1vICRAIC1XbCwtc29uYW1lLCRAICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKysJJChDQykgLXNoYXJlZCAtbyAkQCAtV2wsLXNvbmFtZSwkQCAkKExERkxBR1MpICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBzdGF0aWMgbGlicmFyeQorICQoU1RBVElDKTogJChPQkpTOi5vPS5zbykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9tYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3NTdkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2lyZWxlc3NfdG9vbHMuMzAub3JpZy9NYWtlZmlsZQkyMDE0LTAyLTAxIDAwOjIxOjA0LjE0ODQ2MzM4MiAtMDgwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCTIwMTQtMDItMDEgMDA6MjM6MzUuNDQ4MDcyMjc5IC0wODAwCitAQCAtNzYsNyArNzYsNyBAQAorIElOU1RBTExfRElSPSAkKFBSRUZJWCkvc2JpbgorIElOU1RBTExfTElCPSAkKFBSRUZJWCkvbGliCisgSU5TVEFMTF9JTkM9ICQoUFJFRklYKS9pbmNsdWRlCistSU5TVEFMTF9NQU49ICQoUFJFRklYKS9tYW4KKytJTlNUQUxMX01BTj0gJChQUkVGSVgpL3NoYXJlL21hbgorIAorICMgVmFyaW91cyBjb21tYW5kcworIFJNID0gcm0gLWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjJjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgCisoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28gY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0byBjYWxsIAordG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC11TnIgd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZSB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQorLS0tIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUJMjAwNy0wOS0xOCAwMTo1Njo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQkyMDEyLTAyLTE1IDIwOjQ2OjQxLjc4MDc2MzUxNCArMDEwMAorQEAgLTE2Myw3ICsxNjMsNiBAQAorIAlpbnN0YWxsIC1tIDc1NSAkKERZTkFNSUMpICQoSU5TVEFMTF9MSUIpCisgCWxuIC1zZm4gJChEWU5BTUlDKSAkKElOU1RBTExfTElCKS8kKERZTkFNSUNfTElOSykKKyAJQGVjaG8gIioqKiBEb24ndCBmb3JnZXQgdG8gYWRkICQoSU5TVEFMTF9MSUIpIHRvIC9ldGMvbGQuc28uY29uZiwgYW5kIHJ1biBsZGNvbmZpZyBhcyByb290LiAqKioiCistCUAkKExEQ09ORklHKSB8fCBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsZGNvbmZpZyAhICoqKiIKKyAKKyAjIEluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5CisgaW5zdGFsbC1zdGF0aWM6OiAkKFNUQVRJQykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy5pZi1wcmUtdXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjUxOGE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKworY2FzZSAiJE1FVEhPRCIgaW4gbG9vcGJhY2spIGV4aXQgMCA7OyBlc2FjCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJV1BSSVY9L3NiaW4vaXdwcml2CisKK2lmIFsgISAteCAkSVdDT05GSUcgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKKyMgRGV0ZWN0IGFuZCBkbyBub3RoaW5nIGZvciBsaW51eC13bGFuLW5nIGludGVyZmFjZXM7CisjIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IHRoaWVyIG93biBpZi1wcmUtdXAgc2NyaXB0LgoraWYgWyAtbiAiJElGX1dJUkVMRVNTX1RZUEUiIC1hICIkSUZfV0lSRUxFU1NfVFlQRSIgPSAid2xhbi1uZyIgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKK2lmIFsgLW4gIiRJRl9ORUVEU19SRVNFVCIgXTsgdGhlbgorICAkSVdQUklWICIkSUZBQ0UiIHJlc2V0IDEKKyAgc2xlZXAgMQorZmkKKworaWYgWyAtbiAiJElGX05FRURTX0ZJUk1XQVJFIiBdOyB0aGVuCisgICRJRl9ORUVEU19GSVJNV0FSRSAiJElGQUNFIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1NFTlMiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHNlbnMgJElGX1dJUkVMRVNTX1NFTlMKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SQVRFIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiByYXRlICRJRl9XSVJFTEVTU19SQVRFCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUlRTIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBydHMgJElGX1dJUkVMRVNTX1JUUworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSQUciIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyYWcgJElGX1dJUkVMRVNTX0ZSQUcKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcG93ZXIgJElGX1dJUkVMRVNTX1BPV0VSCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHBlcmlvZCAkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUlRJTUVPVVQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHRpbWVvdXQgJElGX1dJUkVMRVNTX1BPV0VSVElNRU9VVAorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1RYUE9XRVIiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHR4cG93ZXIgJElGX1dJUkVMRVNTX1RYUE9XRVIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SRVRSWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcmV0cnkgJElGX1dJUkVMRVNTX1JFVFJZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTklDSyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbmljayAiJElGX1dJUkVMRVNTX05JQ0siCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTldJRCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbndpZCAiJElGX1dJUkVMRVNTX05XSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRU5DIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGVuYyAkSUZfV0lSRUxFU1NfRU5DCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGtleSAkSUZfV0lSRUxFU1NfS0VZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsxXSAiJElGX1dJUkVMRVNTX0tFWTEiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsyXSAiJElGX1dJUkVMRVNTX0tFWTIiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFszXSAiJElGX1dJUkVMRVNTX0tFWTMiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZNCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFs0XSAiJElGX1dJUkVMRVNTX0tFWTQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfREVGQVVMVEtFWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsiJElGX1dJUkVMRVNTX0RFRkFVTFRLRVkiXQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWU1PREUiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSAiJElGX1dJUkVMRVNTX0tFWU1PREUiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTU9ERSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbW9kZSAkSUZfV0lSRUxFU1NfTU9ERQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSRVEiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyZXEgJElGX1dJUkVMRVNTX0ZSRVEKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19DSEFOTkVMIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjaGFubmVsICRJRl9XSVJFTEVTU19DSEFOTkVMCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRVNTSUQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGVzc2lkICIkSUZfV0lSRUxFU1NfRVNTSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfQ09NTUlUIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjb21taXQKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvenp6LXdpcmVsZXNzLmlmLXByZS11cCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvenp6LXdpcmVsZXNzLmlmLXByZS11cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhlOTViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyAvZXRjL25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCisjIGJ5IFN0ZWZhbiBUb21hbmVrIChzdGVmYW5AcGljby5ydWhyLmRlKQorCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJRkNPTkZJRz0vc2Jpbi9pZmNvbmZpZworR1JFUD0vYmluL2dyZXAKK0xPR0dFUj0vdXNyL2Jpbi9sb2dnZXIKK1NMRUVQPS9iaW4vc2xlZXAKKworIyBIb3cgbG9uZyBkbyB3ZSB3YWl0IGZvciBhc3NvY2lhdGlvbj8KK1JFVFJJRVM9MTUKK1NMRUVQVElNRT0xCisKKyMgT25seSBzbGVlcCBpZiB3ZSB1c2UgREhDUCAoYWRkIG90aGVycyBtZXRob2RzIHNlcGVyYXRlZCBieSBzcGFjZXMpCitPTkxZX0ZPUj0ic3RhdGljIGRoY3AiCisKK2lmIFsgLXogIiRJRl9XSVJFTEVTU19UWVBFIiBdICYmIGVjaG8gIiRPTkxZX0ZPUiIgfCBncmVwIC1xICIkTUVUSE9EIiA7IHRoZW4KKwkkSUZDT05GSUcgJElGQUNFIHVwCisJJExPR0dFUiBDaGVja2luZyBmb3IgV0xBTiBhc3NvY2lhdGlvbi4uLgorCXdoaWxlICggWyAkUkVUUklFUyAtZ3QgMCBdICYmICgkSVdDT05GSUcgIiRJRkFDRSIgfCAkR1JFUCAtcSAiQWNjZXNzIFBvaW50OiBOb3QtQXNzb2NpYXRlZCIpICk7IGRvCisJCSRMT0dHRVIgTm8gYXNzb2NpYXRpb24geWV0LCAkUkVUUklFUyByZXRyaWVzIHVudGlsIHRpbWVvdXQKKwkJUkVUUklFUz0kKCgkUkVUUklFUy0xKSkKKwkJJFNMRUVQICRTTEVFUFRJTUUKKwlkb25lCisJCisJaWYgWyAkUkVUUklFUyAtZXEgMCBdOyB0aGVuCisJCSRMT0dHRVIgVGltZW91dCB3YWl0aW5nIGZvciBhc3NvY2lhdGlvbiwgY29udGludWluZyBhbnl3YXkuLi4KKwllbHNlCisJCSRMT0dHRVIgRm91bmQgYXNzb2NpYXRpb24hCisJZmkKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzXzMwLnByZTkuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzXzMwLnByZTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlY2RmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB0aGUgTGludXggU3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIFN1YnN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiAoTEdQTHYyLjEgfCBNUEwtMS4xIHwgQlNEKSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9pd2NvbmZpZy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PWNmNzEwZWIxNzk1YzM3NmViMTBlYTRmZjA0NjQ5Y2FmIFwKKwkJCWZpbGU6Ly9pd2V2ZW50LmM7YmVnaW5saW5lPTU5O2VuZGxpbmU9NzI7bWQ1PWQ2NmExMDAyNmQ0Mzk0ZjBhNWIxYzU1ODdiY2U0NTM3IFwKKwkJCWZpbGU6Ly9zYW1wbGVfZW5jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT00O21kNT04MzgzNzJiZTA3ODc0MjYwYjU2NmJhZTJmNmVkMzNiNiIKK1NFQ1RJT04gPSAiYmFzZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC93aXJlbGVzc190b29scy4ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIFwKKyAgICAgICAgICAgZmlsZTovL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAgXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3N0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYTkxYmE3YzdlZmY5YmZmZjY5MjZiMWEzNGE0Njk3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYmQ5YzVjOThhYmYxZmRkMTE4OTJhYzJmOGE1NjczNzU0NGZlMTAxZTFiZTI3YzYyNDFhNTY0OTQ4ZjM0YzYzIgorCitTID0gIiR7V09SS0RJUn0vd2lyZWxlc3NfdG9vbHMuMzAiCisKK0NGTEFHUyA9KyAiLUkke1N9IgorRVhUUkFfT0VNQUtFID0gIi1lICdCVUlMRF9TSEFSRUQ9eScgXAorCQknSU5TVEFMTF9ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQknSU5TVEFMTF9MSUI9JHtEfSR7bGliZGlyfScgXAorCQknSU5TVEFMTF9JTkM9JHtEfSR7aW5jbHVkZWRpcn0nIFwKKwkJJ0lOU1RBTExfTUFOPSR7RH0ke21hbmRpcn0nIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgYWxsIGxpYml3LmEKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9IGluc3RhbGwtaXdtdWx0aWNhbGwgaW5zdGFsbC1keW5hbWljIGluc3RhbGwtbWFuIGluc3RhbGwtaGRyCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBpZnJlbmFtZSAke0R9JHtzYmluZGlyfS9pZnJlbmFtZQorCSMgRGlzYWJsZWQgYnkgUlAgLSAyMC84LzA4IC0gV2UgZG9uJ3Qgc2VlbSB0byBuZWVkL3VzZSB0aGVzZQorCSNpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQKKwkjaW5zdGFsbCAke1dPUktESVJ9L3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kL3dpcmVsZXNzLXRvb2xzCisJI2luc3RhbGwgJHtXT1JLRElSfS96enotd2lyZWxlc3MuaWYtcHJlLXVwICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCit9CisKK1BBQ0tBR0VTID0gImxpYml3LWRiZyBpZnJlbmFtZS1kYmcgJHtQTn0tZGJnIFwKK2xpYml3IGxpYml3LWRldiBsaWJpdy1kb2MgaWZyZW5hbWUtZG9jIGlmcmVuYW1lICR7UE59ICR7UE59LWRvYyIKKworRklMRVNfbGliaXctZGJnID0gIiR7bGliZGlyfS8uZGVidWcvKi5zby4qIgorRklMRVNfaWZyZW5hbWUtZGJnID0gIiR7c2JpbmRpcn0vLmRlYnVnL2lmcmVuYW1lIgorRklMRVNfbGliaXcgPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTX2xpYml3LWRldiA9ICIke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLnNvICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJpdy1kb2MgPSAiJHttYW5kaXJ9L21hbjciCitGSUxFU19pZnJlbmFtZSA9ICIke3NiaW5kaXJ9L2lmcmVuYW1lIgorRklMRVNfaWZyZW5hbWUtZG9jID0gIiR7bWFuZGlyfS9tYW44L2lmcmVuYW1lLjggJHttYW5kaXJ9L21hbjUvaWZ0YWIuNSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9L2l3KiAke2Jhc2Vfc2JpbmRpcn0gJHtiYXNlX2JpbmRpcn0gJHtzeXNjb25mZGlyfS9uZXR3b3JrIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyNjc0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlZjU2NmE0ZDRmNzQwMjJlMWZkYjBhMmFkZGZlODFlNmRlOWY0YWFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFdlZCwgMjkgQXByIDIwMTUgMDI6MjE6NTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQVAgV01NOiBGaXggaW50ZWdlciB1bmRlcmZsb3cgaW4gV01NIEFjdGlvbiBmcmFtZSBwYXJzZXIKKworVGhlIGxlbmd0aCBvZiB0aGUgV01NIEFjdGlvbiBmcmFtZSB3YXMgbm90IHByb3Blcmx5IHZhbGlkYXRlZCBhbmQgdGhlCitsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChpbnQgbGVmdCkgY291bGQgZW5kIHVwIGJlaW5nCituZWdhdGl2ZS4gVGhpcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyBzaWduaWZpY2FudGx5IHBhc3QgdGhlIHN0YWNrCitidWZmZXIgd2hpbGUgcGFyc2luZyB0aGUgSUVzIGluIGllZWU4MDJfMTFfcGFyc2VfZWxlbXMoKSBhbmQgd2hpbGUgZG9pbmcKK3NvLCByZXN1bHRpbmcgaW4gc2VnbWVudGF0aW9uIGZhdWx0LgorCitUaGlzIGNhbiByZXN1bHQgaW4gYW4gaW52YWxpZCBmcmFtZSBiZWluZyB1c2VkIGZvciBhIGRlbmlhbCBvZiBzZXJ2aWNlCithdHRhY2sgKGhvc3RhcGQgcHJvY2VzcyBraWxsZWQpIGFnYWluc3QgYW4gQVAgd2l0aCBhIGRyaXZlciB0aGF0IHVzZXMKK2hvc3RhcGQgZm9yIG1hbmFnZW1lbnQgZnJhbWUgcHJvY2Vzc2luZyAoZS5nLiwgYWxsIG1hYzgwMjExLWJhc2VkCitkcml2ZXJzKS4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9hcC93bW0uYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2FwL3dtbS5jIGIvc3JjL2FwL3dtbS5jCitpbmRleCA2ZDQxNzdjLi4zMTRlMjQ0IDEwMDY0NAorLS0tIGEvc3JjL2FwL3dtbS5jCisrKysgYi9zcmMvYXAvd21tLmMKK0BAIC0yNzQsNiArMjc0LDkgQEAgdm9pZCBob3N0YXBkX3dtbV9hY3Rpb24oc3RydWN0IGhvc3RhcGRfZGF0YSAqaGFwZCwKKyAJCXJldHVybjsKKyAJfQorIAorKwlpZiAobGVmdCA8IDApCisrCQlyZXR1cm47IC8qIG5vdCBhIHZhbGlkIFdNTSBBY3Rpb24gZnJhbWUgKi8KKysKKyAJLyogZXh0cmFjdCB0aGUgdHNwZWMgaW5mbyBlbGVtZW50ICovCisgCWlmIChpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVmdCwgJmVsZW1zLCAxKSA9PSBQYXJzZUZhaWxlZCkgeworIAkJaG9zdGFwZF9sb2dnZXIoaGFwZCwgbWdtdC0+c2EsIEhPU1RBUERfTU9EVUxFX0lFRUU4MDIxMSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmJhZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIGRkMmYwNDNjOWM0M2QxNTY0OTRlMzNkN2NlMjJkYjk2ZTZlZjQyYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM3OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBFQVAtcHdkIHBlZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggZjJiMDkyNi4uYTYyOTQzNyAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC0zNTUsNiArMzU1LDIzIEBAIGVhcF9wd2RfcGVyZm9ybV9jb21taXRfZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCUJJR05VTSAqbWFzayA9IE5VTEwsICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqY29mYWN0b3IgPSBOVUxMOworIAl1MTYgb2Zmc2V0OworIAl1OCAqcHRyLCAqc2NhbGFyID0gTlVMTCwgKmVsZW1lbnQgPSBOVUxMOworKwlzaXplX3QgcHJpbWVfbGVuLCBvcmRlcl9sZW47CisrCisrCWlmIChkYXRhLT5zdGF0ZSAhPSBQV0RfQ29tbWl0X1JlcSkgeworKwkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJZ290byBmaW47CisrCX0KKysKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKyAKKyAJaWYgKCgoZGF0YS0+cHJpdmF0ZV92YWx1ZSA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChkYXRhLT5teV9lbGVtZW50ID0gRUNfUE9JTlRfbmV3KGRhdGEtPmdycC0+Z3JvdXApKSA9PSBOVUxMKSB8fAorQEAgLTU1NCw2ICs1NzEsMTggQEAgZWFwX3B3ZF9wZXJmb3JtX2NvbmZpcm1fZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCXU4IGNvbmZbU0hBMjU2X01BQ19MRU5dLCAqY3J1ZnQgPSBOVUxMLCAqcHRyOworIAlpbnQgb2Zmc2V0OworIAorKwlpZiAoZGF0YS0+c3RhdGUgIT0gUFdEX0NvbmZpcm1fUmVxKSB7CisrCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQlnb3RvIGZpbjsKKysJfQorKworKwlpZiAocGF5bG9hZF9sZW4gIT0gU0hBMjU2X01BQ19MRU4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29uZmlybSBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwgU0hBMjU2X01BQ19MRU4pOworKwkJZ290byBmaW47CisrCX0KKysKKyAJLyoKKyAJICogZmlyc3QgYnVpbGQgdXAgdGhlIGNpcGhlcnN1aXRlIHdoaWNoIGlzIGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwKKyAJICoJcHJmCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwOGE5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gOWVkNGVlZTM0NWY4NWUzMDI1YzMzYzZlMjBhYTI1Njk2ZTM0MWNjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CitEYXRlOiBUdWUsIDcgQXByIDIwMTUgMTE6MzI6MTEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUDJQOiBWYWxpZGF0ZSBTU0lEIGVsZW1lbnQgbGVuZ3RoIGJlZm9yZSBjb3B5aW5nIGl0CisgKENWRS0yMDE1LTE4NjMpCisKK1RoaXMgZml4ZXMgYSBwb3NzaWJsZSBtZW1jcHkgb3ZlcmZsb3cgZm9yIFAyUCBkZXYtPm9wZXJfc3NpZCBpbgorcDJwX2FkZF9kZXZpY2UoKS4gVGhlIGxlbmd0aCBwcm92aWRlZCBieSB0aGUgcGVlciBkZXZpY2UgKDAuLjI1NSBieXRlcykKK3dhcyB1c2VkIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZyBhbmQgdGhhdCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluCithcmJpdHJhcnkgZGF0YSBvZiB1cCB0byAyMjMgYnl0ZXMgYmVpbmcgd3JpdHRlbiBiZXlvbmQgdGhlIGVuZCBvZiB0aGUKK2Rldi0+b3Blcl9zc2lkW10gYXJyYXkgKG9mIHdoaWNoIGFib3V0IDE1MCBieXRlcyB3b3VsZCBiZSBiZXlvbmQgdGhlCitoZWFwIGFsbG9jYXRpb24pIHdoZW4gcHJvY2Vzc2luZyBhIGNvcnJ1cHRlZCBtYW5hZ2VtZW50IGZyYW1lIGZvciBQMlAKK3BlZXIgZGlzY292ZXJ5IHB1cnBvc2VzLgorCitUaGlzIGNvdWxkIHJlc3VsdCBpbiBjb3JydXB0ZWQgc3RhdGUgaW4gaGVhcCwgdW5leHBlY3RlZCBwcm9ncmFtCitiZWhhdmlvciBkdWUgdG8gY29ycnVwdGVkIFAyUCBwZWVyIGRldmljZSBpbmZvcm1hdGlvbiwgZGVuaWFsIG9mIHNlcnZpY2UKK2R1ZSB0byBwcm9jZXNzIGNyYXNoLCBleHBvc3VyZSBvZiBtZW1vcnkgY29udGVudHMgZHVyaW5nIEdPIE5lZ290aWF0aW9uLAorYW5kIHBvdGVudGlhbGx5IGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi4KKworVGhhbmtzIHRvIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZSBhbmQgc21hcnQKK2hhcmR3YXJlIHJlc2VhcmNoIGdyb3VwIG9mIEFsaWJhYmEgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvcDJwL3AycC5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcDJwL3AycC5jIGIvc3JjL3AycC9wMnAuYworaW5kZXggZjU4NGZhZS4uYTQ1ZmU3MyAxMDA2NDQKKy0tLSBhL3NyYy9wMnAvcDJwLmMKKysrKyBiL3NyYy9wMnAvcDJwLmMKK0BAIC03NzgsNiArNzc4LDcgQEAgaW50IHAycF9hZGRfZGV2aWNlKHN0cnVjdCBwMnBfZGF0YSAqcDJwLCBjb25zdCB1OCAqYWRkciwgaW50IGZyZXEsCisgCWlmIChvc19tZW1jbXAoYWRkciwgcDJwX2Rldl9hZGRyLCBFVEhfQUxFTikgIT0gMCkKKyAJCW9zX21lbWNweShkZXYtPmludGVyZmFjZV9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisgCWlmIChtc2cuc3NpZCAmJgorKwkgICAgbXNnLnNzaWRbMV0gPD0gc2l6ZW9mKGRldi0+b3Blcl9zc2lkKSAmJgorIAkgICAgKG1zZy5zc2lkWzFdICE9IFAyUF9XSUxEQ0FSRF9TU0lEX0xFTiB8fAorIAkgICAgIG9zX21lbWNtcChtc2cuc3NpZCArIDIsIFAyUF9XSUxEQ0FSRF9TU0lELCBQMlBfV0lMRENBUkRfU1NJRF9MRU4pCisgCSAgICAgIT0gMCkpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY4ZWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gNWFjZDIzZjQ1ODFkYTU4NjgzZjNjZjVlMzZjYjcxYmJlNDA3MGJkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE3OjA4OjMzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFdQUzogRml4IEhUVFAgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBwYXJzZXIKKworc3RydG91bCgpIHJldHVybiB2YWx1ZSBtYXkgZW5kIHVwIG92ZXJmbG93aW5nIHRoZSBpbnQgaC0+Y2h1bmtfc2l6ZSBhbmQKK3Jlc3VsdGluZyBpbiBhIG5lZ2F0aXZlIHZhbHVlIHRvIGJlIHN0b3JlZCBhcyB0aGUgY2h1bmtfc2l6ZS4gVGhpcyBjb3VsZAorcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgbWVtY3B5IG9wZXJhdGlvbiB1c2luZyBhIHZlcnkgbGFyZ2UgbGVuZ3RoCithcmd1bWVudCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBidWZmZXIgb3ZlcmZsb3cgYW5kIHNlZ21lbnRhdGlvbiBmYXVsdC4KKworVGhpcyBjb3VsZCBoYXZlIGJlZW4gdXNlZCB0byBjYXVzZSBhIGRlbmlhbCBzZXJ2aWNlIGJ5IGFueSBkZXZpY2UgdGhhdAoraGFzIGJlZW4gYXV0aG9yaXplZCBmb3IgbmV0d29yayBhY2Nlc3MgKGVpdGhlciB3aXJlbGVzcyBvciB3aXJlZCkuIFRoaXMKK3dvdWxkIGFmZmVjdCBib3RoIHRoZSBXUFMgVVBuUCBmdW5jdGlvbmFsaXR5IGluIGEgV1BTIEFQIChob3N0YXBkIHdpdGgKK3VwbnBfaWZhY2UgcGFyYW1ldGVyIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbikgYW5kIFdQUyBFUgorKHdwYV9zdXBwbGljYW50IHdpdGggV1BTX0VSX1NUQVJUIGNvbnRyb2wgaW50ZXJmYWNlIGNvbW1hbmQgdXNlZCkuCisKK1ZhbGlkYXRlIHRoZSBwYXJzZWQgY2h1bmsgbGVuZ3RoIHZhbHVlIHRvIGF2b2lkIHRoaXMuIEluIGFkZGl0aW9uIHRvCityZWplY3RpbmcgbmVnYXRpdmUgdmFsdWVzLCB3ZSBjYW4gYWxzbyByZWplY3QgY2h1bmsgc2l6ZSB0aGF0IHdvdWxkIGJlCitsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBjb25maWd1cmVkIGJvZHkgbGVuZ3RoLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL3dwcy9odHRwcmVhZC5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3dwcy9odHRwcmVhZC5jIGIvc3JjL3dwcy9odHRwcmVhZC5jCitpbmRleCAyZjA4ZjM3Li5kMjg1NWUzIDEwMDY0NAorLS0tIGEvc3JjL3dwcy9odHRwcmVhZC5jCisrKysgYi9zcmMvd3BzL2h0dHByZWFkLmMKK0BAIC01MzMsNiArNTMzLDEzIEBAIHN0YXRpYyB2b2lkIGh0dHByZWFkX3JlYWRfaGFuZGxlcihpbnQgc2QsIHZvaWQgKmVsb29wX2N0eCwgdm9pZCAqc29ja19jdHgpCisgCQkJCQlpZiAoIWlzeGRpZ2l0KCpjYnApKQorIAkJCQkJCWdvdG8gYmFkOworIAkJCQkJaC0+Y2h1bmtfc2l6ZSA9IHN0cnRvdWwoY2JwLCBOVUxMLCAxNik7CisrCQkJCQlpZiAoaC0+Y2h1bmtfc2l6ZSA8IDAgfHwKKysJCQkJCSAgICBoLT5jaHVua19zaXplID4gaC0+bWF4X2J5dGVzKSB7CisrCQkJCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCQkJCSAgICJodHRwcmVhZDogSW52YWxpZCBjaHVuayBzaXplICVkIiwKKysJCQkJCQkJICAgaC0+Y2h1bmtfc2l6ZSk7CisrCQkJCQkJZ290byBiYWQ7CisrCQkJCQl9CisgCQkJCQkvKiB0aHJvdyBhd2F5IGNodW5rIGhlYWRlcgorIAkJCQkJICogc28gd2UgaGF2ZSBvbmx5IHJlYWwgZGF0YQorIAkJCQkJICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3N2MyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlMjhhNThiZTI2MTg0YzJhMjNmODBiNDEwZTA5OTdlZjFiZDVkNTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjo0MDo0NCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gRUFQLXB3ZCBzZXJ2ZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgfCAxOSArKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitpbmRleCA2NmJkNWQyLi4zMTg5MTA1IDEwMDY0NAorLS0tIGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworKysrIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworQEAgLTY1Niw5ICs2NTYsMjEgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbW1pdF9yZXNwKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAlCSUdOVU0gKnggPSBOVUxMLCAqeSA9IE5VTEwsICpjb2ZhY3RvciA9IE5VTEw7CisgCUVDX1BPSU5UICpLID0gTlVMTCwgKnBvaW50ID0gTlVMTDsKKyAJaW50IHJlcyA9IDA7CisrCXNpemVfdCBwcmltZV9sZW4sIG9yZGVyX2xlbjsKKyAKKyAJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBSZWNlaXZlZCBjb21taXQgcmVzcG9uc2UiKTsKKyAKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKysKKyAJaWYgKCgoZGF0YS0+cGVlcl9zY2FsYXIgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKKyAJICAgICgoZGF0YS0+ayA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChjb2ZhY3RvciA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorQEAgLTc3NCw2ICs3ODYsMTMgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbmZpcm1fcmVzcChzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJdTggY29uZltTSEEyNTZfTUFDX0xFTl0sICpjcnVmdCA9IE5VTEwsICpwdHI7CisgCWludCBvZmZzZXQ7CisgCisrCWlmIChwYXlsb2FkX2xlbiAhPSBTSEEyNTZfTUFDX0xFTikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb25maXJtIHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLCBTSEEyNTZfTUFDX0xFTik7CisrCQlnb3RvIGZpbjsKKysJfQorKworIAkvKiBidWlsZCB1cCB0aGUgY2lwaGVyc3VpdGU6IGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwgcHJmICovCisgCWdycCA9IGh0b25zKGRhdGEtPmdyb3VwX251bSk7CisgCXB0ciA9ICh1OCAqKSAmY3M7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2Y2U0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSA0NzdjNzQzOTVhY2QwMTIzMzQwNDU3YmE2ZjE1YWIzNDVkNDIwMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyMzowNCArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNV0gRUFQLXB3ZCBwZWVyOiBGaXggVG90YWwtTGVuZ3RoIHBhcnNpbmcgZm9yIGZyYWdtZW50CisgcmVhc3NlbWJseQorCitUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZSBjb3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlCitUb3RhbC1MZW5ndGggZmllbGQgc2l6ZSwgc28gdGhlIGxlbmd0aCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGNoZWNrZWQKK3ByaW9yIHRvIHJlYWRpbmcgdGhlIGZpZWxkIGFuZCBkZWNyZW1lbnRpbmcgdGhlIGxlbiB2YXJpYWJsZS4gVGhpcyBjb3VsZAoraGF2ZSByZXN1bHRlZCBpbiB0aGUgcmVtYWluaW5nIGxlbmd0aCBiZWNvbWluZyBuZWdhdGl2ZSBhbmQgaW50ZXJwcmV0ZWQKK2FzIGEgaHVnZSBwb3NpdGl2ZSBpbnRlZ2VyLgorCitJbiBhZGRpdGlvbiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyBhbHJlYWR5IHN0YXJ0ZWQgZnJhZ21lbnQgaW4gcHJvZ3Jlc3MKK2JlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IGJ1ZmZlciBmb3IgcmVhc3NlbWJsaW5nIGZyYWdtZW50cy4gVGhpcyBhdm9pZCBhCitwb3RlbnRpYWwgbWVtb3J5IGxlYWsgd2hlbiBwcm9jZXNzaW5nIGludmFsaWQgbWVzc2FnZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK2luZGV4IGE2Mjk0MzcuLjFkMjA3OWIgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCisrKysgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitAQCAtODY2LDExICs4NjYsMjMgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJICogaWYgaXQncyB0aGUgZmlyc3QgZnJhZ21lbnQgdGhlcmUnbGwgYmUgYSBsZW5ndGggZmllbGQKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJCXJldHVybiBOVUxMOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMgd2hvc2UgIgorIAkJCSAgICJ0b3RhbCBsZW5ndGggPSAlZCIsIHRvdF9sZW4pOworIAkJaWYgKHRvdF9sZW4gPiAxNTAwMCkKKyAJCQlyZXR1cm4gTlVMTDsKKysJCWlmIChkYXRhLT5pbmJ1ZikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBuZXcgZnJhZ21lbnQgc3RhcnQgd2hlbiBwcmV2aW91cyBmcmFnbWVudCBpcyBzdGlsbCBpbiB1c2UiKTsKKysJCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisgCQlkYXRhLT5pbmJ1ZiA9IHdwYWJ1Zl9hbGxvYyh0b3RfbGVuKTsKKyAJCWlmIChkYXRhLT5pbmJ1ZiA9PSBOVUxMKSB7CisgCQkJd3BhX3ByaW50ZihNU0dfSU5GTywgIk91dCBvZiBtZW1vcnkgdG8gYnVmZmVyICIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGMwMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDMwMzVjYzI4OTRlMDgzMTliOTA1YmQ2NTYxZThiZGRjOGMyZGI5ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE5OjI2OjA2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBFQVAtcHdkIHNlcnZlcjogRml4IFRvdGFsLUxlbmd0aCBwYXJzaW5nIGZvciBmcmFnbWVudAorIHJlYXNzZW1ibHkKKworVGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgY291bGQgYmUgc21hbGxlciB0aGFuIHRoZQorVG90YWwtTGVuZ3RoIGZpZWxkIHNpemUsIHNvIHRoZSBsZW5ndGggbmVlZHMgdG8gYmUgZXhwbGljaXRseSBjaGVja2VkCitwcmlvciB0byByZWFkaW5nIHRoZSBmaWVsZCBhbmQgZGVjcmVtZW50aW5nIHRoZSBsZW4gdmFyaWFibGUuIFRoaXMgY291bGQKK2hhdmUgcmVzdWx0ZWQgaW4gdGhlIHJlbWFpbmluZyBsZW5ndGggYmVjb21pbmcgbmVnYXRpdmUgYW5kIGludGVycHJldGVkCithcyBhIGh1Z2UgcG9zaXRpdmUgaW50ZWdlci4KKworSW4gYWRkaXRpb24sIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gYWxyZWFkeSBzdGFydGVkIGZyYWdtZW50IGluIHByb2dyZXNzCitiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIgZm9yIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIFRoaXMgYXZvaWQgYQorcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gcHJvY2Vzc2luZyBpbnZhbGlkIG1lc3NhZ2UuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIHwgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworaW5kZXggMzE4OTEwNS4uMmJmYzNjMiAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKKysrKyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK0BAIC05NDIsMTEgKzk0MiwyMSBAQCBzdGF0aWMgdm9pZCBlYXBfcHdkX3Byb2Nlc3Moc3RydWN0IGVhcF9zbSAqc20sIHZvaWQgKnByaXYsCisgCSAqIHRoZSBmaXJzdCBmcmFnbWVudCBoYXMgYSB0b3RhbCBsZW5ndGgKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0dXJuOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMsIHRvdGFsICIKKyAJCQkgICAibGVuZ3RoID0gJWQiLCB0b3RfbGVuKTsKKyAJCWlmICh0b3RfbGVuID4gMTUwMDApCisgCQkJcmV0dXJuOworKwkJaWYgKGRhdGEtPmluYnVmKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIG5ldyBmcmFnbWVudCBzdGFydCB3aGVuIHByZXZpb3VzIGZyYWdtZW50IGlzIHN0aWxsIGluIHVzZSIpOworKwkJCXJldHVybjsKKysJCX0KKyAJCWRhdGEtPmluYnVmID0gd3BhYnVmX2FsbG9jKHRvdF9sZW4pOworIAkJaWYgKGRhdGEtPmluYnVmID09IE5VTEwpIHsKKyAJCQl3cGFfcHJpbnRmKE1TR19JTkZPLCAiRUFQLXB3ZDogT3V0IG9mIG1lbW9yeSB0byAiCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDczNjAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSAyOGEwNjlhNTQ1YjA2Yjk5ZWI1NWFkNTNmNjNmMmM5OWU2NWE5OGY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyNjoyOCArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gRUFQLXB3ZCBwZWVyOiBGaXggYXN5bW1ldHJpYyBmcmFnbWVudGF0aW9uIGJlaGF2aW9yCisKK1RoZSBMIChMZW5ndGgpIGFuZCBNIChNb3JlKSBmbGFncyBuZWVkcyB0byBiZSBjbGVhcmVkIGJlZm9yZSBkZWNpZGluZword2hldGhlciB0aGUgbG9jYWxseSBnZW5lcmF0ZWQgcmVzcG9uc2UgcmVxdWlyZXMgZnJhZ21lbnRhdGlvbi4gVGhpcworZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlc2UgZmxhZ3MgZnJvbSB0aGUgc2VydmVyIGNvdWxkIGhhdmUgYmVlbiBpbnZhbGlkCitmb3IgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBJbiBzb21lIGNhc2VzLCB0aGlzIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4KK3RyaWdnZXJpbmcgdGhlIHdwYWJ1ZiBzZWN1cml0eSBjaGVjayB0aGF0IHdvdWxkIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcworZHVlIHRvIGludmFsaWQgYnVmZmVyIGFsbG9jYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggMWQyMDc5Yi4uZTU4YjEzYSAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC05NjgsNiArOTY4LDcgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJLyoKKyAJICogd2UgaGF2ZSBvdXRwdXQhIERvIHdlIG5lZWQgdG8gZnJhZ21lbnQgaXQ/CisgCSAqLworKwlsbV9leGNoID0gRUFQX1BXRF9HRVRfRVhDSEFOR0UobG1fZXhjaCk7CisgCWxlbiA9IHdwYWJ1Zl9sZW4oZGF0YS0+b3V0YnVmKTsKKyAJaWYgKChsZW4gKyBFQVBfUFdEX0hEUl9TSVpFKSA+IGRhdGEtPm10dSkgeworIAkJcmVzcCA9IGVhcF9tc2dfYWxsb2MoRUFQX1ZFTkRPUl9JRVRGLCBFQVBfVFlQRV9QV0QsIGRhdGEtPm10dSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC85OV93cGFfc3VwcGxpY2FudCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvOTlfd3BhX3N1cHBsaWNhbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmNGRkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvOTlfd3BhX3N1cHBsaWNhbnQKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDcwMCAvdmFyL3J1bi93cGFfc3VwcGxpY2FudCBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGUzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZwpAQCAtMCwwICsxLDU1MiBAQAorIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbgorIworIyBUaGlzIGZpbGUgbGlzdHMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlCisjIGhvc3RhcGQgYmluYXJ5LiBBbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAjIGFyZSBpZ25vcmVkLiBDb25maWd1cmF0aW9uIG9wdGlvbgorIyBsaW5lcyBtdXN0IGJlIGNvbW1lbnRlZCBvdXQgY29tcGxldGUsIGlmIHRoZXkgYXJlIG5vdCB0byBiZSBpbmNsdWRlZCwgaS5lLiwKKyMganVzdCBzZXR0aW5nIFZBUklBQkxFPW4gaXMgbm90IGRpc2FibGluZyB0aGF0IHZhcmlhYmxlLgorIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gTWFrZWZpbGUsIHNvIHZhcmlhYmxlcyBsaWtlIENGTEFHUyBhbmQgTElCUyBjYW4gYWxzbworIyBiZSBtb2RpZmllZCBmcm9tIGhlcmUuIEluIG1vc3QgY2FzZXMsIHRoZXNlIGxpbmVzIHNob3VsZCB1c2UgKz0gaW4gb3JkZXIgbm90CisjIHRvIG92ZXJyaWRlIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzLgorCisKKyMgVW5jb21tZW50IGZvbGxvd2luZyB0d28gbGluZXMgYW5kIGZpeCB0aGUgcGF0aHMgaWYgeW91IGhhdmUgaW5zdGFsbGVkIE9wZW5TU0wKKyMgb3IgR251VExTIGluIG5vbi1kZWZhdWx0IGxvY2F0aW9uCisjQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9vcGVuc3NsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9vcGVuc3NsL2xpYgorCisjIFNvbWUgUmVkIEhhdCB2ZXJzaW9ucyBzZWVtIHRvIGluY2x1ZGUga2VyYmVyb3MgaGVhZGVyIGZpbGVzIGZyb20gT3BlblNTTCwgYnV0CisjIHRoZSBrZXJiZXJvcyBmaWxlcyBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aC4gRm9sbG93aW5nIGxpbmUgY2FuIGJlCisjIHVzZWQgdG8gZml4IGJ1aWxkIGlzc3VlcyBvbiBzdWNoIHN5c3RlbXMgKGtyYjUuaCBub3QgZm91bmQpLgorI0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9rZXJiZXJvcworCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdmFyaW91cyBjcm9zcy1jb21waWxhdGlvbiBwbGF0Zm9ybXMKKworIyMjIyBzdmVhc29mdCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0NDPW1pcHNlbC11Y2xpYmMtZ2NjCisjQ0M9L29wdC9icmNtL2huZHRvb2xzLW1pcHNlbC11Y2xpYmMvYmluL21pcHNlbC11Y2xpYmMtZ2NjCisjQ0ZMQUdTICs9IC1PcworI0NQUEZMQUdTICs9IC1JLi4vc3JjL2luY2x1ZGUgLUkuLi8uLi9zcmMvcm91dGVyL29wZW5zc2wvaW5jbHVkZQorI0xJQlMgKz0gLUwvb3B0L2JyY20vaG5kdG9vbHMtbWlwc2VsLXVjbGliYy0wLjkuMTkvbGliIC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMgb3BlbndydCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNDQz1taXBzZWwtdWNsaWJjLWdjYworI0NDPS9vcHQvYnJjbS9obmR0b29scy1taXBzZWwtdWNsaWJjL2Jpbi9taXBzZWwtdWNsaWJjLWdjYworI0NGTEFHUyArPSAtT3MKKyNDUFBGTEFHUz0tSS4uL3NyYy9pbmNsdWRlIC1JLi4vb3BlbnNzbC0wLjkuN2QvaW5jbHVkZSBcCisjCS1JLi4vV1JUNTRHUy9yZWxlYXNlL3NyYy9pbmNsdWRlCisjTElCUyA9IC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBIb3N0IEFQIGRyaXZlcgorQ09ORklHX0RSSVZFUl9IT1NUQVA9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEFnZXJlIGRyaXZlcgorI0NPTkZJR19EUklWRVJfSEVSTUVTPXkKKyMgQ2hhbmdlIGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gbWF0Y2ggd2l0aCB0aGUgbG9jYWwgc2V0dXAKKyNDRkxBR1MgKz0gLUkuLi8uLi9oY2YgLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vaW5jbHVkZS9oY2YKKyNDRkxBR1MgKz0gLUkuLi8uLi9pbmNsdWRlL3dpcmVsZXNzCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgbWFkd2lmaSBkcml2ZXIKKyMgRGVwcmVjYXRlZDsgdXNlIENPTkZJR19EUklWRVJfV0VYVD15IGluc3RlYWQuCisjQ09ORklHX0RSSVZFUl9NQURXSUZJPXkKKyMgU2V0IGluY2x1ZGUgZGlyZWN0b3J5IHRvIHRoZSBtYWR3aWZpIHNvdXJjZSB0cmVlCisjQ0ZMQUdTICs9IC1JLi4vLi4vbWFkd2lmaQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5kaXN3cmFwcGVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfTkRJU1dSQVBQRVI9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEF0bWVsIGRyaXZlcgorIyBDT05GSUdfRFJJVkVSX0FUTUVMPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBvbGQgQnJvYWRjb20gZHJpdmVyCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIG5ld2VyIEJyb2FkY29tIGRyaXZlciAoImh5YnJpZCBMaW51eCBkcml2ZXIiKSBzdXBwb3J0cworIyBMaW51eCB3aXJlbGVzcyBleHRlbnNpb25zIGFuZCBkb2VzIG5vdCBuZWVkIChvciBldmVuIHdvcmspIHdpdGggdGhlIG9sZAorIyBkcml2ZXIgd3JhcHBlci4gVXNlIENPTkZJR19EUklWRVJfV0VYVD15IHdpdGggdGhhdCBkcml2ZXIuCisjQ09ORklHX0RSSVZFUl9CUk9BRENPTT15CisjIEV4YW1wbGUgcGF0aCBmb3Igd2xpb2N0bC5oOyBjaGFuZ2UgdG8gbWF0Y2ggeW91ciBjb25maWd1cmF0aW9uCisjQ0ZMQUdTICs9IC1JL29wdC9XUlQ1NEdTL3JlbGVhc2Uvc3JjL2luY2x1ZGUKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBJbnRlbCBpcHcyMTAwLzIyMDAgZHJpdmVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfSVBXPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBSYWxpbmsgZHJpdmVyCisjQ09ORklHX0RSSVZFUl9SQUxJTks9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIGdlbmVyaWMgTGludXggd2lyZWxlc3MgZXh0ZW5zaW9ucworIyBOb3RlOiBXRVhUIGlzIGRlcHJlY2F0ZWQgaW4gdGhlIGN1cnJlbnQgTGludXgga2VybmVsIHZlcnNpb24gYW5kIG5vIG5ldworIyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIGl0LiBubDgwMjExLWJhc2VkIGludGVyZmFjZSBpcyB0aGUgbmV3CisjIHJlcGxhY2VtZW50IGZvciBXRVhUIGFuZCBpdHMgdXNlIGFsbG93cyB3cGFfc3VwcGxpY2FudCB0byBwcm9wZXJseSBjb250cm9sCisjIHRoZSBkcml2ZXIgdG8gaW1wcm92ZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGxpa2Ugcm9hbWluZyBhbmQgdG8gc3VwcG9ydCBuZXcKKyMgZnVuY3Rpb25hbGl0eS4KK0NPTkZJR19EUklWRVJfV0VYVD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgTGludXggZHJpdmVycyB1c2luZyB0aGUgbmw4MDIxMSBrZXJuZWwgaW50ZXJmYWNlCitDT05GSUdfRFJJVkVSX05MODAyMTE9eQorCisjIGRyaXZlcl9ubDgwMjExLmMgcmVxdWlyZXMgbGlibmwuIElmIHlvdSBhcmUgY29tcGlsaW5nIGl0IHlvdXJzZWxmCisjIHlvdSBtYXkgbmVlZCB0byBwb2ludCBob3N0YXBkIHRvIHlvdXIgdmVyc2lvbiBvZiBsaWJubC4KKyMKKyNDRkxBR1MgKz0gLUkkPHBhdGggdG8gbGlibmwgaW5jbHVkZSBmaWxlcz4KKyNMSUJTICs9IC1MJDxwYXRoIHRvIGxpYm5sIGxpYnJhcnkgZmlsZXM+CisKKyMgVXNlIGxpYm5sIHYyLjAgKG9yIDMuMCkgbGlicmFyaWVzLgorI0NPTkZJR19MSUJOTDIwPXkKKworIyBVc2UgbGlibmwgMy4yIGxpYnJhcmllcyAoaWYgdGhpcyBpcyBzZWxlY3RlZCwgQ09ORklHX0xJQk5MMjAgaXMgaWdub3JlZCkKK0NPTkZJR19MSUJOTDMyPXkKKworCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEZyZWVCU0QgbmV0ODAyMTEgbGF5ZXIgKGUuZy4sIEF0aGVyb3MgZHJpdmVyKQorI0NPTkZJR19EUklWRVJfQlNEPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9saWIKKyNMSUJTX3AgKz0gLUwvdXNyL2xvY2FsL2xpYgorI0xJQlNfYyArPSAtTC91c3IvbG9jYWwvbGliCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgV2luZG93cyBORElTCisjQ09ORklHX0RSSVZFUl9ORElTPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvdzMyYXBpL2RkaworI0xJQlMgKz0gLUwvdXNyL2xvY2FsL2xpYgorIyBGb3IgbmF0aXZlIGJ1aWxkIHVzaW5nIG1pbmd3CisjQ09ORklHX05BVElWRV9XSU5ET1dTPXkKKyMgQWRkaXRpb25hbCBkaXJlY3RvcmllcyBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb24gTGludXggaG9zdCBmb3IgbWluZ3cgdGFyZ2V0CisjQ0ZMQUdTICs9IC1JL29wdC9taW5ndy9taW5ndzMyL2luY2x1ZGUvZGRrCisjTElCUyArPSAtTC9vcHQvbWluZ3cvbWluZ3czMi9saWIKKyNDQz1taW5ndzMyLWdjYworIyBCeSBkZWZhdWx0LCBkcml2ZXJfbmRpcyB1c2VzIFdpblBjYXAgZm9yIGxvdy1sZXZlbCBvcGVyYXRpb25zLiBUaGlzIGNhbiBiZQorIyByZXBsYWNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHdoaWNoIHJlcGxhY2VzIFdpblBjYXAgY2FsbHMgd2l0aCBORElTVUlPLgorIyBIb3dldmVyLCB0aGlzIHJlcXVpcmVzIHRoYXQgV1pDIGlzIGRpc2FibGVkIChuZXQgc3RvcCB3emNzdmMpIGJlZm9yZSBzdGFydGluZworIyB3cGFfc3VwcGxpY2FudC4KKyMgQ09ORklHX1VTRV9ORElTVUlPPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nCisjQ09ORklHX0RSSVZFUl9URVNUPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB3aXJlZCBFdGhlcm5ldCBkcml2ZXJzCitDT05GSUdfRFJJVkVSX1dJUkVEPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB0aGUgQnJvYWRjb20gUm9ib1N3aXRjaCBmYW1pbHkKKyNDT05GSUdfRFJJVkVSX1JPQk9TV0lUQ0g9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5vIGRyaXZlciAoZS5nLiwgV1BTIEVSIG9ubHkpCisjQ09ORklHX0RSSVZFUl9OT05FPXkKKworIyBFbmFibGUgSUVFRSA4MDIuMVggU3VwcGxpY2FudCAoYXV0b21hdGljYWxseSBpbmNsdWRlZCBpZiBhbnkgRUFQIG1ldGhvZCBpcworIyBpbmNsdWRlZCkKK0NPTkZJR19JRUVFODAyMVhfRUFQT0w9eQorCisjIEVBUC1NRDUKK0NPTkZJR19FQVBfTUQ1PXkKKworIyBFQVAtTVNDSEFQdjIKK0NPTkZJR19FQVBfTVNDSEFQVjI9eQorCisjIEVBUC1UTFMKK0NPTkZJR19FQVBfVExTPXkKKworIyBFQUwtUEVBUAorQ09ORklHX0VBUF9QRUFQPXkKKworIyBFQVAtVFRMUworQ09ORklHX0VBUF9UVExTPXkKKworIyBFQVAtRkFTVAorIyBOb3RlOiBJZiBPcGVuU1NMIGlzIHVzZWQgYXMgdGhlIFRMUyBsaWJyYXJ5LCBPcGVuU1NMIDEuMCBvciBuZXdlciBpcyBuZWVkZWQKKyMgZm9yIEVBUC1GQVNUIHN1cHBvcnQuIE9sZGVyIE9wZW5TU0wgcmVsZWFzZXMgd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLCBlLmcuLAorIyB3aXRoIG9wZW5zc2wtMC45Ljh4LXRscy1leHRlbnNpb25zLnBhdGNoLCB0byBhZGQgdGhlIG5lZWRlZCBmdW5jdGlvbnMuCisjQ09ORklHX0VBUF9GQVNUPXkKKworIyBFQVAtR1RDCitDT05GSUdfRUFQX0dUQz15CisKKyMgRUFQLU9UUAorQ09ORklHX0VBUF9PVFA9eQorCisjIEVBUC1TSU0gKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLVNJTSBpcyB1c2VkKQorI0NPTkZJR19FQVBfU0lNPXkKKworIyBFQVAtUFNLIChleHBlcmltZW50YWw7IHRoaXMgaXMgX25vdF8gbmVlZGVkIGZvciBXUEEtUFNLKQorI0NPTkZJR19FQVBfUFNLPXkKKworIyBFQVAtcHdkIChzZWN1cmUgYXV0aGVudGljYXRpb24gdXNpbmcgb25seSBhIHBhc3N3b3JkKQorI0NPTkZJR19FQVBfUFdEPXkKKworIyBFQVAtUEFYCisjQ09ORklHX0VBUF9QQVg9eQorCisjIExFQVAKK0NPTkZJR19FQVBfTEVBUD15CisKKyMgRUFQLUFLQSAoZW5hYmxlIENPTkZJR19QQ1NDLCBpZiBFQVAtQUtBIGlzIHVzZWQpCisjQ09ORklHX0VBUF9BS0E9eQorCisjIEVBUC1BS0EnIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1BS0EnIGlzIHVzZWQpLgorIyBUaGlzIHJlcXVpcmVzIENPTkZJR19FQVBfQUtBIHRvIGJlIGVuYWJsZWQsIHRvby4KKyNDT05GSUdfRUFQX0FLQV9QUklNRT15CisKKyMgRW5hYmxlIFVTSU0gc2ltdWxhdG9yIChNaWxlbmFnZSkgZm9yIEVBUC1BS0EKKyNDT05GSUdfVVNJTV9TSU1VTEFUT1I9eQorCisjIEVBUC1TQUtFCisjQ09ORklHX0VBUF9TQUtFPXkKKworIyBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTSz15CisjIEluY2x1ZGUgc3VwcG9ydCBmb3Igb3B0aW9uYWwgU0hBMjU2IGNpcGhlciBzdWl0ZSBpbiBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTS19TSEEyNTY9eQorCisjIEVBUC1UTkMgYW5kIHJlbGF0ZWQgVHJ1c3RlZCBOZXR3b3JrIENvbm5lY3Qgc3VwcG9ydCAoZXhwZXJpbWVudGFsKQorI0NPTkZJR19FQVBfVE5DPXkKKworIyBXaS1GaSBQcm90ZWN0ZWQgU2V0dXAgKFdQUykKK0NPTkZJR19XUFM9eQorIyBFbmFibGUgV1NDIDIuMCBzdXBwb3J0CisjQ09ORklHX1dQUzI9eQorIyBFbmFibGUgV1BTIGV4dGVybmFsIHJlZ2lzdHJhciBmdW5jdGlvbmFsaXR5CisjQ09ORklHX1dQU19FUj15CisjIERpc2FibGUgY3JlZGVudGlhbHMgZm9yIGFuIG9wZW4gbmV0d29yayBieSBkZWZhdWx0IHdoZW4gYWN0aW5nIGFzIGEgV1BTCisjIHJlZ2lzdHJhci4KKyNDT05GSUdfV1BTX1JFR19ESVNBQkxFX09QRU49eQorIyBFbmFibGUgV1BTIHN1cHBvcnQgd2l0aCBORkMgY29uZmlnIG1ldGhvZAorI0NPTkZJR19XUFNfTkZDPXkKKworIyBFQVAtSUtFdjIKKyNDT05GSUdfRUFQX0lLRVYyPXkKKworIyBFQVAtRUtFCisjQ09ORklHX0VBUF9FS0U9eQorCisjIFBLQ1MjMTIgKFBGWCkgc3VwcG9ydCAodXNlZCB0byByZWFkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlIGZyb20KKyMgYSBmaWxlIHRoYXQgdXN1YWxseSBoYXMgZXh0ZW5zaW9uIC5wMTIgb3IgLnBmeCkKK0NPTkZJR19QS0NTMTI9eQorCisjIFNtYXJ0Y2FyZCBzdXBwb3J0IChpLmUuLCBwcml2YXRlIGtleSBvbiBhIHNtYXJ0Y2FyZCksIGUuZy4sIHdpdGggb3BlbnNzbAorIyBlbmdpbmUuCitDT05GSUdfU01BUlRDQVJEPXkKKworIyBQQy9TQyBpbnRlcmZhY2UgZm9yIHNtYXJ0Y2FyZHMgKFVTSU0sIEdTTSBTSU0pCisjIEVuYWJsZSB0aGlzIGlmIEVBUC1TSU0gb3IgRUFQLUFLQSBpcyBpbmNsdWRlZAorI0NPTkZJR19QQ1NDPXkKKworIyBTdXBwb3J0IEhUIG92ZXJyaWRlcyAoZGlzYWJsZSBIVC9IVDQwLCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfSFRfT1ZFUlJJREVTPXkKKworIyBTdXBwb3J0IFZIVCBvdmVycmlkZXMgKGRpc2FibGUgVkhULCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfVkhUX09WRVJSSURFUz15CisKKyMgRGV2ZWxvcG1lbnQgdGVzdGluZworI0NPTkZJR19FQVBPTF9URVNUPXkKKworIyBTZWxlY3QgY29udHJvbCBpbnRlcmZhY2UgYmFja2VuZCBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMsIGUuZywgd3BhX2NsaToKKyMgdW5peCA9IFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgZm9yIExpbnV4LypCU0QpCisjIHVkcCA9IFVEUCBzb2NrZXRzIHVzaW5nIGxvY2FsaG9zdCAoMTI3LjAuMC4xKQorIyBuYW1lZF9waXBlID0gV2luZG93cyBOYW1lZCBQaXBlIChkZWZhdWx0IGZvciBXaW5kb3dzKQorIyB1ZHAtcmVtb3RlID0gVURQIHNvY2tldHMgd2l0aCByZW1vdGUgYWNjZXNzIChvbmx5IGZvciB0ZXN0cyBzeXN0ZW1zL3B1cnBvc2UpCisjIHkgPSB1c2UgZGVmYXVsdCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisjIElmIHRoaXMgb3B0aW9uIGlzIGNvbW1lbnRlZCBvdXQsIGNvbnRyb2wgaW50ZXJmYWNlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUKKyMgYnVpbGQuCitDT05GSUdfQ1RSTF9JRkFDRT15CisKKyMgSW5jbHVkZSBzdXBwb3J0IGZvciBHTlUgUmVhZGxpbmUgYW5kIEhpc3RvcnkgTGlicmFyaWVzIGluIHdwYV9jbGkuCisjIFdoZW4gYnVpbGRpbmcgYSB3cGFfY2xpIGJpbmFyeSBmb3IgZGlzdHJpYnV0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZXNlCisjIGxpYnJhcmllcyBhcmUgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBhcyBzdWNoLCBCU0QgbGljZW5zZSBtYXkgbm90IGFwcGx5IGZvcgorIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KKyNDT05GSUdfUkVBRExJTkU9eQorCisjIEluY2x1ZGUgaW50ZXJuYWwgbGluZSBlZGl0IG1vZGUgaW4gd3BhX2NsaS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50CisjIGZvciBHTlUgUmVhZGxpbmUgdG8gcHJvdmlkZSBsaW1pdGVkIGNvbW1hbmQgbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5IHN1cHBvcnQuCisjQ09ORklHX1dQQV9DTElfRURJVD15CisKKyMgUmVtb3ZlIGRlYnVnZ2luZyBjb2RlIHRoYXQgaXMgcHJpbnRpbmcgb3V0IGRlYnVnIG1lc3NhZ2UgdG8gc3Rkb3V0LgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uc2lkZXJhYmx5CisjIGlmIGRlYnVnZ2luZyBjb2RlIGlzIG5vdCBuZWVkZWQuIFRoZSBzaXplIHJlZHVjdGlvbiBjYW4gYmUgYXJvdW5kIDM1JQorIyAoZS5nLiwgOTAga0IpLgorI0NPTkZJR19OT19TVERPVVRfREVCVUc9eQorCisjIFJlbW92ZSBXUEEgc3VwcG9ydCwgZS5nLiwgZm9yIHdpcmVkLW9ubHkgSUVFRSA4MDIuMVggc3VwcGxpY2FudCwgdG8gc2F2ZQorIyAzNS01MCBrQiBpbiBjb2RlIHNpemUuCisjQ09ORklHX05PX1dQQT15CisKKyMgUmVtb3ZlIElFRUUgODAyLjExaS9XUEEtUGVyc29uYWwgQVNDSUkgcGFzc3BocmFzZSBzdXBwb3J0CisjIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBjb2RlIHNpemUgYnkgcmVtb3Zpbmcgc3VwcG9ydCBmb3IKKyMgY29udmVydGluZyBBU0NJSSBwYXNzcGhyYXNlcyBpbnRvIFBTSy4gSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlbW92ZWQsIHRoZQorIyBQU0sgY2FuIG9ubHkgYmUgY29uZmlndXJlZCBhcyB0aGUgNjQtb2N0ZXQgaGV4c3RyaW5nIChlLmcuLCBmcm9tCisjIHdwYV9wYXNzcGhyYXNlKS4gVGhpcyBzYXZlcyBhYm91dCAwLjUga0IgaW4gY29kZSBzaXplLgorI0NPTkZJR19OT19XUEFfUEFTU1BIUkFTRT15CisKKyMgRGlzYWJsZSBzY2FuIHJlc3VsdCBwcm9jZXNzaW5nIChhcF9tb2RlPTEpIHRvIHNhdmUgY29kZSBzaXplIGJ5IGFib3V0IDEga0IuCisjIFRoaXMgY2FuIGJlIHVzZWQgaWYgYXBfc2Nhbj0xIG1vZGUgaXMgbmV2ZXIgZW5hYmxlZC4KKyNDT05GSUdfTk9fU0NBTl9QUk9DRVNTSU5HPXkKKworIyBTZWxlY3QgY29uZmlndXJhdGlvbiBiYWNrZW5kOgorIyBmaWxlID0gdGV4dCBmaWxlIChlLmcuLCB3cGFfc3VwcGxpY2FudC5jb25mOyBub3RlOiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisjCXBhdGggaXMgZ2l2ZW4gb24gY29tbWFuZCBsaW5lLCBub3QgaGVyZTsgdGhpcyBvcHRpb24gaXMganVzdCB1c2VkIHRvCisjCXNlbGVjdCB0aGUgYmFja2VuZCB0aGF0IGFsbG93cyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGJlIHVzZWQpCisjIHdpbnJlZyA9IFdpbmRvd3MgcmVnaXN0cnkgKHNlZSB3aW5fZXhhbXBsZS5yZWcgZm9yIGFuIGV4YW1wbGUpCitDT05GSUdfQkFDS0VORD1maWxlCisKKyMgUmVtb3ZlIGNvbmZpZ3VyYXRpb24gd3JpdGUgZnVuY3Rpb25hbGl0eSAoaS5lLiwgdG8gYWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzKS4gVGhlIHJ1bnRpbWUKKyMgY29uZmlndXJhdGlvbiBjYW4gc3RpbGwgYmUgY2hhbmdlZCwgdGhlIGNoYW5nZXMgYXJlIGp1c3Qgbm90IGdvaW5nIHRvIGJlCisjIHBlcnNpc3RlbnQgb3ZlciByZXN0YXJ0cy4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieQorIyBhYm91dCAzLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19XUklURT15CisKKyMgUmVtb3ZlIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gYmxvYnMgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieSBhYm91dCAxLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19CTE9CUz15CisKKyMgU2VsZWN0IHByb2dyYW0gZW50cnkgcG9pbnQgaW1wbGVtZW50YXRpb246CisjIG1haW4gPSBVTklYL1BPU0lYIGxpa2UgbWFpbigpIGZ1bmN0aW9uIChkZWZhdWx0KQorIyBtYWluX3dpbnN2YyA9IFdpbmRvd3Mgc2VydmljZSAocmVhZCBwYXJhbWV0ZXJzIGZyb20gcmVnaXN0cnkpCisjIG1haW5fbm9uZSA9IFZlcnkgYmFzaWMgZXhhbXBsZSAoZGV2ZWxvcG1lbnQgdXNlIG9ubHkpCisjQ09ORklHX01BSU49bWFpbgorCisjIFNlbGVjdCB3cmFwcGVyIGZvciBvcGVyYXRpbnMgc3lzdGVtIGFuZCBDIGxpYnJhcnkgc3BlY2lmaWMgZnVuY3Rpb25zCisjIHVuaXggPSBVTklYL1BPU0lYIGxpa2Ugc3lzdGVtcyAoZGVmYXVsdCkKKyMgd2luMzIgPSBXaW5kb3dzIHN5c3RlbXMKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX09TPXVuaXgKKworIyBTZWxlY3QgZXZlbnQgbG9vcCBpbXBsZW1lbnRhdGlvbgorIyBlbG9vcCA9IHNlbGVjdCgpIGxvb3AgKGRlZmF1bHQpCisjIGVsb29wX3dpbiA9IFdpbmRvd3MgZXZlbnRzIGFuZCBXYWl0Rm9yTXVsdGlwbGVPYmplY3QoKSBsb29wCisjQ09ORklHX0VMT09QPWVsb29wCisKKyMgU2hvdWxkIHdlIHVzZSBwb2xsIGluc3RlYWQgb2Ygc2VsZWN0PyBTZWxlY3QgaXMgdXNlZCBieSBkZWZhdWx0LgorI0NPTkZJR19FTE9PUF9QT0xMPXkKKworIyBTZWxlY3QgbGF5ZXIgMiBwYWNrZXQgaW1wbGVtZW50YXRpb24KKyMgbGludXggPSBMaW51eCBwYWNrZXQgc29ja2V0IChkZWZhdWx0KQorIyBwY2FwID0gbGlicGNhcC9saWJkbmV0L1dpblBjYXAKKyMgZnJlZWJzZCA9IEZyZWVCU0QgbGlicGNhcAorIyB3aW5wY2FwID0gV2luUGNhcCB3aXRoIHJlY2VpdmUgdGhyZWFkCisjIG5kaXMgPSBXaW5kb3dzIE5ESVNVSU8gKG5vdGU6IHJlcXVpcmVzIENPTkZJR19VU0VfTkRJU1VJTz15KQorIyBub25lID0gRW1wdHkgdGVtcGxhdGUKKyNDT05GSUdfTDJfUEFDS0VUPWxpbnV4CisKKyMgUGVlcktleSBoYW5kc2hha2UgZm9yIFN0YXRpb24gdG8gU3RhdGlvbiBMaW5rIChJRUVFIDgwMi4xMWUgRExTKQorQ09ORklHX1BFRVJLRVk9eQorCisjIElFRUUgODAyLjExdyAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSwgYWxzbyBrbm93biBhcyBQTUYKKyMgRHJpdmVyIHN1cHBvcnQgaXMgYWxzbyBuZWVkZWQgZm9yIElFRUUgODAyLjExdy4KKyNDT05GSUdfSUVFRTgwMjExVz15CisKKyMgU2VsZWN0IFRMUyBpbXBsZW1lbnRhdGlvbgorIyBvcGVuc3NsID0gT3BlblNTTCAoZGVmYXVsdCkKKyMgZ251dGxzID0gR251VExTCisjIGludGVybmFsID0gSW50ZXJuYWwgVExTdjEgaW1wbGVtZW50YXRpb24gKGV4cGVyaW1lbnRhbCkKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX1RMUz1vcGVuc3NsCisKKyMgVExTLWJhc2VkIEVBUCBtZXRob2RzIHJlcXVpcmUgYXQgbGVhc3QgVExTIHYxLjAuIE5ld2VyIHZlcnNpb24gb2YgVExTICh2MS4xKQorIyBjYW4gYmUgZW5hYmxlZCB0byBnZXQgYSBzdHJvbmdlciBjb25zdHJ1Y3Rpb24gb2YgbWVzc2FnZXMgd2hlbiBibG9jayBjaXBoZXJzCisjIGFyZSB1c2VkLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBzb21lIGV4aXN0aW5nIFRMUyB2MS4wIC1iYXNlZAorIyBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBUTFMgdjEuMSBtZXNzYWdlIChDbGllbnRIZWxsbyBpcworIyBzZW50IHByaW9yIHRvIG5lZ290aWF0aW5nIHdoaWNoIHZlcnNpb24gd2lsbCBiZSB1c2VkKQorI0NPTkZJR19UTFNWMTE9eQorCisjIFRMUy1iYXNlZCBFQVAgbWV0aG9kcyByZXF1aXJlIGF0IGxlYXN0IFRMUyB2MS4wLiBOZXdlciB2ZXJzaW9uIG9mIFRMUyAodjEuMikKKyMgY2FuIGJlIGVuYWJsZWQgdG8gZW5hYmxlIHVzZSBvZiBzdHJvbmdlciBjcnlwdG8gYWxnb3JpdGhtcy4gSXQgc2hvdWxkIGJlCisjIG5vdGVkIHRoYXQgc29tZSBleGlzdGluZyBUTFMgdjEuMCAtYmFzZWQgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBiZSBjb21wYXRpYmxlCisjIHdpdGggVExTIHYxLjIgbWVzc2FnZSAoQ2xpZW50SGVsbG8gaXMgc2VudCBwcmlvciB0byBuZWdvdGlhdGluZyB3aGljaCB2ZXJzaW9uCisjIHdpbGwgYmUgdXNlZCkKKyNDT05GSUdfVExTVjEyPXkKKworIyBJZiBDT05GSUdfVExTPWludGVybmFsIGlzIHVzZWQsIGFkZGl0aW9uYWwgbGlicmFyeSBhbmQgaW5jbHVkZSBwYXRocyBhcmUKKyMgbmVlZGVkIGZvciBMaWJUb21NYXRoLiBBbHRlcm5hdGl2ZWx5LCBhbiBpbnRlZ3JhdGVkLCBtaW5pbWFsIHZlcnNpb24gb2YKKyMgTGliVG9tTWF0aCBjYW4gYmUgdXNlZC4gU2VlIGJlZ2lubmluZyBvZiBsaWJ0b21tYXRoLmMgZm9yIGRldGFpbHMgb24gYmVuZWZpdHMKKyMgYW5kIGRyYXdiYWNrcyBvZiB0aGlzIG9wdGlvbi4KKyNDT05GSUdfSU5URVJOQUxfTElCVE9NTUFUSD15CisjaWZuZGVmIENPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRICisjTFRNX1BBVEg9L3Vzci9zcmMvbGlidG9tbWF0aC0wLjM5CisjQ0ZMQUdTICs9IC1JJChMVE1fUEFUSCkKKyNMSUJTICs9IC1MJChMVE1fUEFUSCkKKyNMSUJTX3AgKz0gLUwkKExUTV9QQVRIKQorI2VuZGlmCisjIEF0IHRoZSBjb3N0IG9mIGFib3V0IDQga0Igb2YgYWRkaXRpb25hbCBiaW5hcnkgc2l6ZSwgdGhlIGludGVybmFsIExpYlRvbU1hdGgKKyMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBmYXN0ZXIgcm91dGluZXMgZm9yIGV4cHRtb2QsIHNxciwgYW5kIGRpdiB0bworIyBzcGVlZCB1cCBESCBhbmQgUlNBIGNhbGN1bGF0aW9uIGNvbnNpZGVyYWJseQorI0NPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRIX0ZBU1Q9eQorCisjIEluY2x1ZGUgTkRJUyBldmVudCBwcm9jZXNzaW5nIHRocm91Z2ggV01JIGludG8gd3BhX3N1cHBsaWNhbnQvd3Bhc3ZjLgorIyBUaGlzIGlzIG9ubHkgZm9yIFdpbmRvd3MgYnVpbGRzIGFuZCByZXF1aXJlcyBXTUktcmVsYXRlZCBoZWFkZXIgZmlsZXMgYW5kCisjIFdiZW1VdWlkLkxpYiBmcm9tIFBsYXRmb3JtIFNESyBldmVuIHdoZW4gYnVpbGRpbmcgd2l0aCBNaW5HVy4KKyNDT05GSUdfTkRJU19FVkVOVFNfSU5URUdSQVRFRD15CisjUExBVEZPUk1TREtMSUI9Ii9vcHQvUHJvZ3JhbSBGaWxlcy9NaWNyb3NvZnQgUGxhdGZvcm0gU0RLL0xpYiIKKworIyBBZGQgc3VwcG9ydCBmb3Igb2xkIERCdXMgY29udHJvbCBpbnRlcmZhY2UKKyMgKGZpLmVwaXRlc3QuaG9zdGFwLldQQVN1cHBsaWNhbnQpCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVUz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjIChmaS53MS5ob3N0YXAud3BhX3N1cHBsaWNhbnQxKQorQ09ORklHX0NUUkxfSUZBQ0VfREJVU19ORVc9eQorCisjIEFkZCBpbnRyb3NwZWN0aW9uIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVU19JTlRSTz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIGxvYWRpbmcgRUFQIG1ldGhvZHMgZHluYW1pY2FsbHkgYXMgc2hhcmVkIGxpYnJhcmllcy4KKyMgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBlYWNoIEVBUCBtZXRob2QgY2FuIGJlIGVpdGhlciBpbmNsdWRlZAorIyBzdGF0aWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PXkpIG9yIGR5bmFtaWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PWR5bikuCisjIER5bmFtaWMgRUFQIG1ldGhvZHMgYXJlIGJ1aWxkIGFzIHNoYXJlZCBvYmplY3RzIChlYXBfKi5zbykgYW5kIHRoZXkgbmVlZCB0bworIyBiZSBsb2FkZWQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uZmlndXJhdGlvbiBmaWxlCisjIChzZWUgbG9hZF9keW5hbWljX2VhcCBwYXJhbWV0ZXIgaW4gdGhlIGV4YW1wbGUgZmlsZSkgYmVmb3JlIGJlaW5nIHVzZWQgaW4KKyMgdGhlIG5ldHdvcmsgYmxvY2tzLgorIworIyBOb3RlIHRoYXQgc29tZSBzaGFyZWQgcGFydHMgb2YgRUFQIG1ldGhvZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBtYWluIHByb2dyYW0KKyMgYW5kIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGR5bmFtaWMgRUFQIG1ldGhvZHMgdXNpbmcgdGhlc2UgcGFydHMsIHRoZQorIyBtYWluIHByb2dyYW0gbXVzdCBoYXZlIGJlZW4gYnVpbGQgd2l0aCB0aGUgRUFQIG1ldGhvZCBlbmFibGVkICg9eSBvciA9ZHluKS4KKyMgVGhpcyBtZWFucyB0aGF0IEVBUC1UTFMvUEVBUC9UVExTL0ZBU1QgY2Fubm90IGJlIGFkZGVkIGFzIGR5bmFtaWMgbGlicmFyaWVzCisjIHVubGVzcyBhdCBsZWFzdCBvbmUgb2YgdGhlbSB3YXMgaW5jbHVkZWQgaW4gdGhlIG1haW4gYnVpbGQgdG8gZm9yY2UgaW5jbHVzaW9uCisjIG9mIHRoZSBzaGFyZWQgY29kZS4gU2ltaWxhcmx5LCBhdCBsZWFzdCBvbmUgb2YgRUFQLVNJTS9BS0EgbXVzdCBiZSBpbmNsdWRlZAorIyBpbiB0aGUgbWFpbiBidWlsZCB0byBiZSBhYmxlIHRvIGxvYWQgdGhlc2UgbWV0aG9kcyBkeW5hbWljYWxseS4KKyMKKyMgUGxlYXNlIGFsc28gbm90ZSB0aGF0IHVzaW5nIGR5bmFtaWMgbGlicmFyaWVzIHdpbGwgaW5jcmVhc2UgdGhlIHRvdGFsIGJpbmFyeQorIyBzaXplLiBUaHVzLCBpdCBtYXkgbm90IGJlIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGhhdmUgbGltaXRlZAorIyBhbW91bnQgb2YgbWVtb3J5L2ZsYXNoLgorI0NPTkZJR19EWU5BTUlDX0VBUF9NRVRIT0RTPXkKKworIyBJRUVFIFN0ZCA4MDIuMTFyLTIwMDggKEZhc3QgQlNTIFRyYW5zaXRpb24pCisjQ09ORklHX0lFRUU4MDIxMVI9eQorCisjIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIGRlYnVnIGxvZyB0byBhIGZpbGUgKC90bXAvd3BhX3N1cHBsaWNhbnQtbG9nLSMudHh0KQorI0NPTkZJR19ERUJVR19GSUxFPXkKKworIyBTZW5kIGRlYnVnIG1lc3NhZ2VzIHRvIHN5c2xvZyBpbnN0ZWFkIG9mIHN0ZG91dAorI0NPTkZJR19ERUJVR19TWVNMT0c9eQorIyBTZXQgc3lzbG9nIGZhY2lsaXR5IGZvciBkZWJ1ZyBtZXNzYWdlcworI0NPTkZJR19ERUJVR19TWVNMT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorCisjIEFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIGFsbCBkZWJ1ZyBtZXNzYWdlcyAocmVnYXJkbGVzcyBvZiBkZWJ1ZyB2ZXJib3NpdHkpCisjIHRvIHRoZSBMaW51eCBrZXJuZWwgdHJhY2luZyBmYWNpbGl0eS4gVGhpcyBoZWxwcyBkZWJ1ZyB0aGUgZW50aXJlIHN0YWNrIGJ5CisjIG1ha2luZyBpdCBlYXN5IHRvIHJlY29yZCBldmVyeXRoaW5nIGhhcHBlbmluZyBmcm9tIHRoZSBkcml2ZXIgdXAgaW50byB0aGUKKyMgc2FtZSBmaWxlLCBlLmcuLCB1c2luZyB0cmFjZS1jbWQuCisjQ09ORklHX0RFQlVHX0xJTlVYX1RSQUNJTkc9eQorCisjIEVuYWJsZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAoc2VlIFJFQURNRSAnUHJpdmlsZWdlIHNlcGFyYXRpb24nIGZvciBkZXRhaWxzKQorI0NPTkZJR19QUklWU0VQPXkKKworIyBFbmFibGUgbWl0aWdhdGlvbiBhZ2FpbnN0IGNlcnRhaW4gYXR0YWNrcyBhZ2FpbnN0IFRLSVAgYnkgZGVsYXlpbmcgTWljaGFlbAorIyBNSUMgZXJyb3IgcmVwb3J0cyBieSBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDAgYW5kIDYwIHNlY29uZHMKKyNDT05GSUdfREVMQVlFRF9NSUNfRVJST1JfUkVQT1JUPXkKKworIyBFbmFibGUgdHJhY2luZyBjb2RlIGZvciBkZXZlbG9wZXIgZGVidWdnaW5nCisjIFRoaXMgdHJhY2tzIHVzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHJlZ2lzdHJhdGlvbnMgYW5kIHJlcG9ydHMKKyMgaW5jb3JyZWN0IHVzZSB3aXRoIGEgYmFja3RyYWNlIG9mIGNhbGwgKG9yIGFsbG9jYXRpb24pIGxvY2F0aW9uLgorI0NPTkZJR19XUEFfVFJBQ0U9eQorIyBGb3IgQlNELCB1bmNvbW1lbnQgdGhlc2UuCisjTElCUyArPSAtbGV4ZWNpbmZvCisjTElCU19wICs9IC1sZXhlY2luZm8KKyNMSUJTX2MgKz0gLWxleGVjaW5mbworCisjIFVzZSBsaWJiZmQgdG8gZ2V0IG1vcmUgZGV0YWlscyBmb3IgZGV2ZWxvcGVyIGRlYnVnZ2luZworIyBUaGlzIGVuYWJsZXMgdXNlIG9mIGxpYmJmZCB0byBnZXQgbW9yZSBkZXRhaWxlZCBzeW1ib2xzIGZvciB0aGUgYmFja3RyYWNlcworIyBnZW5lcmF0ZWQgYnkgQ09ORklHX1dQQV9UUkFDRT15LgorI0NPTkZJR19XUEFfVFJBQ0VfQkZEPXkKKyMgRm9yIEJTRCwgdW5jb21tZW50IHRoZXNlLgorI0xJQlMgKz0gLWxiZmQgLWxpYmVydHkgLWx6CisjTElCU19wICs9IC1sYmZkIC1saWJlcnR5IC1segorI0xJQlNfYyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKworQ09ORklHX1RMUyA9ICVzc2wlCitDT05GSUdfQ1RSTF9JRkFDRV9EQlVTPXkKK0NPTkZJR19DVFJMX0lGQUNFX0RCVVNfTkVXPXkKKworIyB3cGFfc3VwcGxpY2FudCBkZXBlbmRzIG9uIHN0cm9uZyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gYmVpbmcgYXZhaWxhYmxlCisjIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIG9zX2dldF9yYW5kb20oKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGZldGNoIHJhbmRvbQorIyBkYXRhIHdoZW4gbmVlZGVkLCBlLmcuLCBmb3Iga2V5IGdlbmVyYXRpb24uIE9uIExpbnV4IGFuZCBCU0Qgc3lzdGVtcywgdGhpcworIyB3b3JrcyBieSByZWFkaW5nIC9kZXYvdXJhbmRvbS4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIE9TIGVudHJvcHkgcG9vbAorIyBuZWVkcyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgd3BhX3N1cHBsaWNhbnQgaXMgc3RhcnRlZC4gVGhpcyBpcworIyBpbXBvcnRhbnQgZXNwZWNpYWxseSBvbiBlbWJlZGRlZCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBoYXJkd2FyZSByYW5kb20KKyMgbnVtYmVyIGdlbmVyYXRvciBhbmQgbWF5IGJ5IGRlZmF1bHQgc3RhcnQgdXAgd2l0aCBtaW5pbWFsIGVudHJvcHkgYXZhaWxhYmxlCisjIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uCisjCisjIEFzIGEgc2FmZXR5IG5ldCwgd3BhX3N1cHBsaWNhbnQgaXMgYnkgZGVmYXVsdCB0cnlpbmcgdG8gaW50ZXJuYWxseSBjb2xsZWN0CisjIGFkZGl0aW9uYWwgZW50cm9weSBmb3IgZ2VuZXJhdGluZyByYW5kb20gZGF0YSB0byBtaXggaW4gd2l0aCB0aGUgZGF0YSBmZXRjaGVkCisjIGZyb20gdGhlIE9TLiBUaGlzIGJ5IGl0c2VsZiBpcyBub3QgY29uc2lkZXJlZCB0byBiZSB2ZXJ5IHN0cm9uZywgYnV0IGl0IG1heQorIyBoZWxwIGluIGNhc2VzIHdoZXJlIHRoZSBzeXN0ZW0gcG9vbCBpcyBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHkuIEhvd2V2ZXIsIGl0CisjIGlzIHZlcnkgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3lzdGVtIHBvb2wgaXMgaW5pdGlhbGl6ZWQgd2l0aCBlbm91Z2gKKyMgZW50cm9weSBlaXRoZXIgYnkgdXNpbmcgaGFyZHdhcmUgYXNzaXN0ZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb3IgYnkKKyMgc3RvcmluZyBzdGF0ZSBvdmVyIGRldmljZSByZWJvb3RzLgorIworIyB3cGFfc3VwcGxpY2FudCBjYW4gYmUgY29uZmlndXJlZCB0byBtYWludGFpbiBpdHMgb3duIGVudHJvcHkgc3RvcmUgb3ZlcgorIyByZXN0YXJ0cyB0byBlbmhhbmNlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gVGhpcyBpcyBub3QgcGVyZmVjdCwgYnV0IGl0IGlzCisjIG11Y2ggbW9yZSBzZWN1cmUgdGhhbiB1c2luZyB0aGUgc2FtZSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycyBhZnRlciBldmVyeQorIyByZWJvb3QuIFRoaXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAtZTxlbnRyb3B5IGZpbGU+IGNvbW1hbmQgbGluZSBvcHRpb24uIFRoZQorIyBzcGVjaWZpZWQgZmlsZSBuZWVkcyB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgd3BhX3N1cHBsaWNhbnQuCisjCisjIElmIHRoZSBvc19nZXRfcmFuZG9tKCkgaXMga25vd24gdG8gcHJvdmlkZSBzdHJvbmcgcmFuZG9tIGRhdGEgKGUuZy4sIG9uCisjIExpbnV4L0JTRCwgdGhlIGJvYXJkIGluIHF1ZXN0aW9uIGlzIGtub3duIHRvIGhhdmUgcmVsaWFibGUgc291cmNlIG9mIHJhbmRvbQorIyBkYXRhIGZyb20gL2Rldi91cmFuZG9tKSwgdGhlIGludGVybmFsIHdwYV9zdXBwbGljYW50IHJhbmRvbSBwb29sIGNhbiBiZQorIyBkaXNhYmxlZC4gVGhpcyB3aWxsIHNhdmUgc29tZSBpbiBiaW5hcnkgc2l6ZSBhbmQgQ1BVIHVzZS4gSG93ZXZlciwgdGhpcworIyBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGZvciBidWlsZHMgdGhhdCBhcmUga25vd24gdG8gYmUgdXNlZCBvbiBkZXZpY2VzCisjIHRoYXQgbWVldCB0aGUgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBhYm92ZS4KKyNDT05GSUdfTk9fUkFORE9NX1BPT0w9eQorCisjIElFRUUgODAyLjExbiAoSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjQ09ORklHX0lFRUU4MDIxMU49eQorCisjIElFRUUgODAyLjExYWMgKFZlcnkgSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjIChkZXBlbmRzIG9uIENPTkZJR19JRUVFODAyMTFOKQorI0NPTkZJR19JRUVFODAyMTFBQz15CisKKyMgV2lyZWxlc3MgTmV0d29yayBNYW5hZ2VtZW50IChJRUVFIFN0ZCA4MDIuMTF2LTIwMTEpCisjIE5vdGU6IFRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBub3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24uCisjQ09ORklHX1dOTT15CisKKyMgSW50ZXJ3b3JraW5nIChJRUVFIDgwMi4xMXUpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHkgdG8gaW1wcm92ZSBpbnRlcndvcmtpbmcgd2l0aAorIyBleHRlcm5hbCBuZXR3b3JrcyAoR0FTL0FOUVAgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgbmV0d29ya3MgYW5kIG5ldHdvcmsKKyMgc2VsZWN0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSBjcmVkZW50aWFscykuCisjQ09ORklHX0lOVEVSV09SS0lORz15CisKKyMgSG90c3BvdCAyLjAKKyNDT05GSUdfSFMyMD15CisKKyMgRGlzYWJsZSByb2FtaW5nIGluIHdwYV9zdXBwbGljYW50CisjQ09ORklHX05PX1JPQU1JTkc9eQorCisjIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50CisjIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50LiBJdAorIyBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIGlzIG1haW5seSBhaW1lZCBhdCBzaW1wbGUgY2FzZXMgbGlrZQorIyBXUEEyLVBlcnNvbmFsIHdoaWxlIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9ucyBsaWtlIFdQQTItRW50ZXJwcmlzZSB3aXRoIGFuCisjIGV4dGVybmFsIFJBRElVUyBzZXJ2ZXIgY2FuIGJlIHN1cHBvcnRlZCB3aXRoIGhvc3RhcGQuCitDT05GSUdfQVA9eQorCitDT05GSUdfQkdTQ0FOX1NJTVBMRT15CisKKyMgUDJQIChXaS1GaSBEaXJlY3QpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFAyUCBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LiBTZWUgUkVBRE1FLVAyUCBmb3IKKyMgbW9yZSBpbmZvcm1hdGlvbiBvbiBQMlAgb3BlcmF0aW9ucy4KKyNDT05GSUdfUDJQPXkKKworIyBFbmFibGUgVERMUyBzdXBwb3J0CisjQ09ORklHX1RETFM9eQorCisjIFdpLUZpIERpcmVjdAorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBXaS1GaSBEaXJlY3QgZXh0ZW5zaW9ucyBmb3IgUDJQIHVzaW5nIGFuIGV4dGVybmFsCisjIHByb2dyYW0gdG8gY29udHJvbCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBleGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2VzLgorI0NPTkZJR19XSUZJX0RJU1BMQVk9eQorCisjIEF1dG9zY2FuCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGF1dG9tYXRpYyBzY2FuIHN1cHBvcnQgaW4gd3BhX3N1cHBsaWNhbnQuCisjIFNlZSB3cGFfc3VwcGxpY2FudC5jb25mIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1dG9zY2FuIHVzYWdlLgorIworIyBFbmFibGluZyBkaXJlY3RseSBhIG1vZHVsZSB3aWxsIGVuYWJsZSBhdXRvc2NhbiBzdXBwb3J0LgorIyBGb3IgZXhwb25lbnRpYWwgbW9kdWxlOgorQ09ORklHX0FVVE9TQ0FOX0VYUE9ORU5USUFMPXkKKyMgRm9yIHBlcmlvZGljIG1vZHVsZToKKyNDT05GSUdfQVVUT1NDQU5fUEVSSU9ESUM9eQorCisjIFBhc3N3b3JkIChhbmQgcGFzc3BocmFzZSwgZXRjLikgYmFja2VuZCBmb3IgZXh0ZXJuYWwgc3RvcmFnZQorIyBUaGVzZSBvcHRpb25hbCBtZWNoYW5pc21zIGNhbiBiZSB1c2VkIHRvIGFkZCBzdXBwb3J0IGZvciBzdG9yaW5nIHBhc3N3b3JkcworIyBhbmQgb3RoZXIgc2VjcmV0cyBpbiBleHRlcm5hbCAodG8gd3BhX3N1cHBsaWNhbnQpIGxvY2F0aW9uLiBUaGlzIGFsbG93cywgZm9yCisjIGV4YW1wbGUsIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMga2V5IHN0b3JhZ2UgdG8gYmUgdXNlZAorIworIyBFeHRlcm5hbCBwYXNzd29yZCBiYWNrZW5kIGZvciB0ZXN0aW5nIHB1cnBvc2VzIChkZXZlbG9wZXIgdXNlKQorI0NPTkZJR19FWFRfUEFTU1dPUkRfVEVTVD15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzllNWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKworCitXUEFfU1VQX0JJTj0iL3Vzci9zYmluL3dwYV9zdXBwbGljYW50IgorV1BBX1NVUF9QTkFNRT0id3BhX3N1cHBsaWNhbnQiCitXUEFfU1VQX1BJREZJTEU9Ii92YXIvcnVuL3dwYV9zdXBwbGljYW50LiRJRkFDRS5waWQiCitXUEFfU1VQX09QVElPTlM9Ii1CIC1QICRXUEFfU1VQX1BJREZJTEUgLWkgJElGQUNFIgorCitWRVJCT1NJVFk9MAorCisKK2lmIFsgLXMgIiRJRl9XUEFfQ09ORiIgXTsgdGhlbgorCVdQQV9TVVBfQ09ORj0iLWMgJElGX1dQQV9DT05GIgorZWxzZQorCWV4aXQgMAorZmkKKworaWYgWyAhIC14ICIkV1BBX1NVUF9CSU4iIF07IHRoZW4KKwkKKwlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiBiaW5hcmllcyBub3QgZXhlY3V0YWJsZSBvciBtaXNzaW5nIGZyb20gJFdQQV9TVVBfQklOIgorCWZpCisJCisJZXhpdCAxCitmaQorCitpZiBbICIkTU9ERSIgPSAic3RhcnQiIF0gOyB0aGVuCisJIyBkcml2ZXIgdHlwZSBvZiBpbnRlcmZhY2UsIGRlZmF1bHRzIHRvIHdleHQgd2hlbiB1bmRlZmluZWQKKwlpZiBbIC1zICIvZXRjL3dwYV9zdXBwbGljYW50L2RyaXZlci4kSUZBQ0UiIF07IHRoZW4KKwkJSUZfV1BBX0RSSVZFUj0kKGNhdCAiL2V0Yy93cGFfc3VwcGxpY2FudC9kcml2ZXIuJElGQUNFIikKKwllbGlmIFsgLXogIiRJRl9XUEFfRFJJVkVSIiBdOyB0aGVuCisJCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogd3BhLWRyaXZlciBub3QgcHJvdmlkZWQsIHVzaW5nIFwid2V4dFwiIgorCQlmaQorCQkKKwkJSUZfV1BBX0RSSVZFUj0id2V4dCIKKwlmaQorCQorCSMgaWYgd2UgaGF2ZSBwYXNzZWQgdGhlIGNyaXRlcmlhLCBzdGFydCB3cGFfc3VwcGxpY2FudAorCWlmIFsgLW4gIiRXUEFfU1VQX0NPTkYiIF07IHRoZW4KKwkJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiAkV1BBX1NVUF9CSU4gJFdQQV9TVVBfT1BUSU9OUyAkV1BBX1NVUF9DT05GIC1EICRJRl9XUEFfRFJJVkVSIgorCQlmaQorCQkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXN0YXJ0YXMgJFdQQV9TVVBfQklOIC0tcGlkZmlsZSAkV1BBX1NVUF9QSURGSUxFIFwKKwkJCS0tICAkV1BBX1NVUF9PUFRJT05TICRXUEFfU1VQX0NPTkYgLUQgJElGX1dQQV9EUklWRVIKKwlmaQorCisJIyBpZiB0aGUgaW50ZXJmYWNlIHNvY2tldCBleGlzdHMsIHRoZW4gd3BhX3N1cHBsaWNhbnQgd2FzIGludm9rZWQgc3VjY2Vzc2Z1bGx5CisJaWYgWyAtUyAiJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UiIF07IHRoZW4KKwkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IGN0cmxfaW50ZXJmYWNlIHNvY2tldCBsb2NhdGVkIGF0ICRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIgorCQlmaQorCisJCWV4aXQgMAorCQkKKwlmaQorCQorZWxpZiBbICIkTU9ERSIgPSAic3RvcCIgXTsgdGhlbgorCisJaWYgWyAtZiAiJFdQQV9TVVBfUElERklMRSIgXTsgdGhlbgorCQkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IHRlcm1pbmF0aW5nICRXUEFfU1VQX1BOQU1FIGRhZW1vbiIKKwkJZmkKKwkJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXBpZGZpbGUJJFdQQV9TVVBfUElERklMRQorCQkJCisJCWlmIFsgLVMgIiRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIiBdOyB0aGVuCisJCQlybSAtZiAkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRQorCQlmaQorCQkJCisJCWlmIFsgLWYgIiRXUEFfU1VQX1BJREZJTEUiIF07IHRoZW4KKwkJCXJtIC1mICRXUEFfU1VQX1BJREZJTEUKKwkJZmkKKwlmaQorCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI1OGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCkBAIC0wLDAgKzEsNjkwIEBACisjIyMjIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGNvbmZpZ3VyYXRpb24gZmlsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgZmlsZSBkZXNjcmliZXMgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCBhbmQgbGlzdHMgYWxsIGF2YWlsYWJsZSBvcHRpb24uCisjIFBsZWFzZSBhbHNvIHRha2UgYSBsb29rIGF0IHNpbXBsZXIgY29uZmlndXJhdGlvbiBleGFtcGxlcyBpbiAnZXhhbXBsZXMnCisjIHN1YmRpcmVjdG9yeS4KKyMKKyMgRW1wdHkgbGluZXMgYW5kIGxpbmVzIHN0YXJ0aW5nIHdpdGggIyBhcmUgaWdub3JlZAorCisjIE5PVEUhIFRoaXMgZmlsZSBtYXkgY29udGFpbiBwYXNzd29yZCBpbmZvcm1hdGlvbiBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIG1hZGUKKyMgcmVhZGFibGUgb25seSBieSByb290IHVzZXIgb24gbXVsdGl1c2VyIHN5c3RlbXMuCisKKyMgTm90ZTogQWxsIGZpbGUgcGF0aHMgaW4gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIHVzZSBmdWxsIChhYnNvbHV0ZSwKKyMgbm90IHJlbGF0aXZlIHRvIHdvcmtpbmcgZGlyZWN0b3J5KSBwYXRoIGluIG9yZGVyIHRvIGFsbG93IHdvcmtpbmcgZGlyZWN0b3J5CisjIHRvIGJlIGNoYW5nZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisKKyMgV2hldGhlciB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byB1cGRhdGUgKG92ZXJ3cml0ZSkgY29uZmlndXJhdGlvbgorIworIyBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHdoZW5ldmVyIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZCAoZS5nLiwgbmV3IG5ldHdvcmsgYmxvY2sgaXMgYWRkZWQgd2l0aAorIyB3cGFfY2xpIG9yIHdwYV9ndWksIG9yIGEgcGFzc3dvcmQgaXMgY2hhbmdlZCkuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCisjIHdwYV9jbGkvd3BhX2d1aSB0byBiZSBhYmxlIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgcGVybWFuZW50bHkuCisjIFBsZWFzZSBub3RlIHRoYXQgb3ZlcndyaXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgcmVtb3ZlIHRoZSBjb21tZW50cyBmcm9tCisjIGl0LgorI3VwZGF0ZV9jb25maWc9MQorCisjIGdsb2JhbCBjb25maWd1cmF0aW9uIChzaGFyZWQgYnkgYWxsIG5ldHdvcmsgYmxvY2tzKQorIworIyBQYXJhbWV0ZXJzIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UuIElmIHRoaXMgaXMgc3BlY2lmaWVkLCB3cGFfc3VwcGxpY2FudAorIyB3aWxsIG9wZW4gYSBjb250cm9sIGludGVyZmFjZSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8KKyMgbWFuYWdlIHdwYV9zdXBwbGljYW50LiBUaGUgbWVhbmluZyBvZiB0aGlzIHN0cmluZyBkZXBlbmRzIG9uIHdoaWNoIGNvbnRyb2wKKyMgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyB1c2VkLiBGb3IgYWxsIGNhc2VzLCB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgcGFyYW1ldGVyCisjIGluIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29udHJvbCBpbnRlcmZhY2UgaXMKKyMgZW5hYmxlZC4KKyMKKyMgRm9yIFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgb24gTGludXggYW5kIEJTRCk6IFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdAorIyB3aWxsIGJlIGNyZWF0ZWQgZm9yIFVOSVggZG9tYWluIHNvY2tldHMgZm9yIGxpc3RlbmluZyB0byByZXF1ZXN0cyBmcm9tCisjIGV4dGVybmFsIHByb2dyYW1zIChDTEkvR1VJLCBldGMuKSBmb3Igc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBjb25maWd1cmF0aW9uLgorIyBUaGUgc29ja2V0IGZpbGUgd2lsbCBiZSBuYW1lZCBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIG5hbWUsIHNvIG11bHRpcGxlCisjIHdwYV9zdXBwbGljYW50IHByb2Nlc3NlcyBjYW4gYmUgcnVuIGF0IHRoZSBzYW1lIHRpbWUgaWYgbW9yZSB0aGFuIG9uZQorIyBpbnRlcmZhY2UgaXMgdXNlZC4KKyMgL3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgaXMgdGhlIHJlY29tbWVuZGVkIGRpcmVjdG9yeSBmb3Igc29ja2V0cyBhbmQgYnkKKyMgZGVmYXVsdCwgd3BhX2NsaSB3aWxsIHVzZSBpdCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHdpdGggd3BhX3N1cHBsaWNhbnQuCisjCisjIEFjY2VzcyBjb250cm9sIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUKKyMgZGlyZWN0b3J5IHRvIGFsbG93IG9ubHkgbWVtYmVycyBvZiBhIGdyb3VwIHRvIHVzZSBzb2NrZXRzLiBUaGlzIHdheSwgaXQgaXMKKyMgcG9zc2libGUgdG8gcnVuIHdwYV9zdXBwbGljYW50IGFzIHJvb3QgKHNpbmNlIGl0IG5lZWRzIHRvIGNoYW5nZSBuZXR3b3JrCisjIGNvbmZpZ3VyYXRpb24gYW5kIG9wZW4gcmF3IHNvY2tldHMpIGFuZCBzdGlsbCBhbGxvdyBHVUkvQ0xJIGNvbXBvbmVudHMgdG8gYmUKKyMgcnVuIGFzIG5vbi1yb290IHVzZXJzLiBIb3dldmVyLCBzaW5jZSB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgdG8KKyMgY2hhbmdlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoaXMgYWNjZXNzIG5lZWRzIHRvIGJlIHByb3RlY3RlZCBpbiBtYW55CisjIGNhc2VzLiBCeSBkZWZhdWx0LCB3cGFfc3VwcGxpY2FudCBpcyBjb25maWd1cmVkIHRvIHVzZSBnaWQgMCAocm9vdCkuIElmIHlvdQorIyB3YW50IHRvIGFsbG93IG5vbi1yb290IHVzZXJzIHRvIHVzZSB0aGUgY29udHJvbCBpbnRlcmZhY2UsIGFkZCBhIG5ldyBncm91cAorIyBhbmQgY2hhbmdlIHRoaXMgdmFsdWUgdG8gbWF0Y2ggd2l0aCB0aGF0IGdyb3VwLiBBZGQgdXNlcnMgdGhhdCBzaG91bGQgaGF2ZQorIyBjb250cm9sIGludGVyZmFjZSBhY2Nlc3MgdG8gdGhpcyBncm91cC4gSWYgdGhpcyB2YXJpYWJsZSBpcyBjb21tZW50ZWQgb3V0IG9yCisjIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBncm91cCB3aWxsIG5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlCisjIHZhbHVlIGl0IGdvdCBieSBkZWZhdWx0IHdoZW4gdGhlIGRpcmVjdG9yeSBvciBzb2NrZXQgd2FzIGNyZWF0ZWQuCisjCisjIFdoZW4gY29uZmlndXJpbmcgYm90aCB0aGUgZGlyZWN0b3J5IGFuZCBncm91cCwgdXNlIGZvbGxvd2luZyBmb3JtYXQ6CisjIERJUj0vdmFyL3J1bi93cGFfc3VwcGxpY2FudCBHUk9VUD13aGVlbAorIyBESVI9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgR1JPVVA9MAorIyAoZ3JvdXAgY2FuIGJlIGVpdGhlciBncm91cCBuYW1lIG9yIGdpZCkKKyMKKyMgRm9yIFVEUCBjb25uZWN0aW9ucyAoZGVmYXVsdCBvbiBXaW5kb3dzKTogVGhlIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhpcworIyB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8gc2VsZWN0IHRoYXQgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHRvIGJlIGNyZWF0ZWQuCisjIFRoZSB2YWx1ZSBjYW4gYmUgc2V0IHRvLCBlLmcuLCB1ZHAgKGN0cmxfaW50ZXJmYWNlPXVkcCkKKyMKKyMgRm9yIFdpbmRvd3MgTmFtZWQgUGlwZTogVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IKKyMgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFNlY3VyaXR5IGRlc2NyaXB0b3IgY2FuIGJlCisjIHNldCB1c2luZyBTZWN1cml0eSBEZXNjcmlwdG9yIFN0cmluZyBGb3JtYXQgKHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tLworIyBsaWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9zZWNhdXRoei9zZWN1cml0eS8KKyMgc2VjdXJpdHlfZGVzY3JpcHRvcl9zdHJpbmdfZm9ybWF0LmFzcCkuIFRoZSBkZXNjcmlwdG9yIHN0cmluZyBuZWVkcyB0byBiZQorIyBwcmVmaXhlZCB3aXRoIFNEREw9LiBGb3IgZXhhbXBsZSwgY3RybF9pbnRlcmZhY2U9U0RETD1EOiB3b3VsZCBzZXQgYW4gZW1wdHkKKyMgREFDTCAod2hpY2ggd2lsbCByZWplY3QgYWxsIGNvbm5lY3Rpb25zKS4gU2VlIFJFQURNRS1XaW5kb3dzLnR4dCBmb3IgbW9yZQorIyBpbmZvcm1hdGlvbiBhYm91dCBTRERMIHN0cmluZyBmb3JtYXQuCisjCitjdHJsX2ludGVyZmFjZT0vdmFyL3J1bi93cGFfc3VwcGxpY2FudAorCisjIElFRUUgODAyLjFYL0VBUE9MIHZlcnNpb24KKyMgd3BhX3N1cHBsaWNhbnQgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gSUVFRSBTdGQgODAyLjFYLTIwMDQgd2hpY2ggZGVmaW5lcworIyBFQVBPTCB2ZXJzaW9uIDIuIEhvd2V2ZXIsIHRoZXJlIGFyZSBtYW55IEFQcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGhlIG5ldworIyB2ZXJzaW9uIG51bWJlciBjb3JyZWN0bHkgKHRoZXkgc2VlbSB0byBkcm9wIHRoZSBmcmFtZXMgY29tcGxldGVseSkuIEluIG9yZGVyCisjIHRvIG1ha2Ugd3BhX3N1cHBsaWNhbnQgaW50ZXJvcGVyYXRlIHdpdGggdGhlc2UgQVBzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgc2V0CisjIHRvIDEgYnkgZGVmYXVsdC4gVGhpcyBjb25maWd1cmF0aW9uIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHNldCBpdCB0byB0aGUgbmV3CisjIHZlcnNpb24gKDIpLgorZWFwb2xfdmVyc2lvbj0xCisKKyMgQVAgc2Nhbm5pbmcvc2VsZWN0aW9uCisjIEJ5IGRlZmF1bHQsIHdwYV9zdXBwbGljYW50IHJlcXVlc3RzIGRyaXZlciB0byBwZXJmb3JtIEFQIHNjYW5uaW5nIGFuZCB0aGVuCisjIHVzZXMgdGhlIHNjYW4gcmVzdWx0cyB0byBzZWxlY3QgYSBzdWl0YWJsZSBBUC4gQW5vdGhlciBhbHRlcm5hdGl2ZSBpcyB0bworIyBhbGxvdyB0aGUgZHJpdmVyIHRvIHRha2UgY2FyZSBvZiBBUCBzY2FubmluZyBhbmQgc2VsZWN0aW9uIGFuZCB1c2UKKyMgd3BhX3N1cHBsaWNhbnQganVzdCB0byBwcm9jZXNzIEVBUE9MIGZyYW1lcyBiYXNlZCBvbiBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkcml2ZXIuCisjIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uCisjIDA6IGRyaXZlciB0YWtlcyBjYXJlIG9mIHNjYW5uaW5nLCBBUCBzZWxlY3Rpb24sIGFuZCBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyAgICBwYXJhbWV0ZXJzIChlLmcuLCBXUEEgSUUgZ2VuZXJhdGlvbik7IHRoaXMgbW9kZSBjYW4gYWxzbyBiZSB1c2VkIHdpdGgKKyMgICAgbm9uLVdQQSBkcml2ZXJzIHdoZW4gdXNpbmcgSUVFRSA4MDIuMVggbW9kZTsgZG8gbm90IHRyeSB0byBhc3NvY2lhdGUgd2l0aAorIyAgICBBUHMgKGkuZS4sIGV4dGVybmFsIHByb2dyYW0gbmVlZHMgdG8gY29udHJvbCBhc3NvY2lhdGlvbikuIFRoaXMgbW9kZSBtdXN0CisjICAgIGFsc28gYmUgdXNlZCB3aGVuIHVzaW5nIHdpcmVkIEV0aGVybmV0IGRyaXZlcnMuCisjIDI6IGxpa2UgMCwgYnV0IGFzc29jaWF0ZSB3aXRoIEFQcyB1c2luZyBzZWN1cml0eSBwb2xpY3kgYW5kIFNTSUQgKGJ1dCBub3QKKyMgICAgQlNTSUQpOyB0aGlzIGNhbiBiZSB1c2VkLCBlLmcuLCB3aXRoIG5kaXN3cmFwcGVyIGFuZCBORElTIGRyaXZlcnMgdG8KKyMgICAgZW5hYmxlIG9wZXJhdGlvbiB3aXRoIGhpZGRlbiBTU0lEcyBhbmQgb3B0aW1pemVkIHJvYW1pbmc7IGluIHRoaXMgbW9kZSwKKyMgICAgdGhlIG5ldHdvcmsgYmxvY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXJlIHRyaWVkIG9uZSBieSBvbmUgdW50aWwKKyMgICAgdGhlIGRyaXZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgYXNzb2NpYXRpb247IGVhY2ggbmV0d29yayBibG9jayBzaG91bGQgaGF2ZQorIyAgICBleHBsaWNpdCBzZWN1cml0eSBwb2xpY3kgKGkuZS4sIG9ubHkgb25lIG9wdGlvbiBpbiB0aGUgbGlzdHMpIGZvcgorIyAgICBrZXlfbWdtdCwgcGFpcndpc2UsIGdyb3VwLCBwcm90byB2YXJpYWJsZXMKK2FwX3NjYW49MQorCisjIEVBUCBmYXN0IHJlLWF1dGhlbnRpY2F0aW9uCisjIEJ5IGRlZmF1bHQsIGZhc3QgcmUtYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIEVBUCBtZXRob2RzIHRoYXQKKyMgc3VwcG9ydCBpdC4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGZhc3QgcmUtYXV0aGVudGljYXRpb24uCisjIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGRpc2FibGUgdGhpcy4KK2Zhc3RfcmVhdXRoPTEKKworIyBPcGVuU1NMIEVuZ2luZSBzdXBwb3J0CisjIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbG9hZCBPcGVuU1NMIGVuZ2luZXMuCisjIFRoZSB0d28gZW5naW5lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5IGFyZSBzaG93biBiZWxvdzoKKyMgVGhleSBhcmUgYm90aCBmcm9tIHRoZSBvcGVuc2MgcHJvamVjdCAoaHR0cDovL3d3dy5vcGVuc2Mub3JnLykKKyMgQnkgZGVmYXVsdCBubyBlbmdpbmVzIGFyZSBsb2FkZWQuCisjIG1ha2UgdGhlIG9wZW5zYyBlbmdpbmUgYXZhaWxhYmxlCisjb3BlbnNjX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfb3BlbnNjLnNvCisjIG1ha2UgdGhlIHBrY3MxMSBlbmdpbmUgYXZhaWxhYmxlCisjcGtjczExX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfcGtjczExLnNvCisjIGNvbmZpZ3VyZSB0aGUgcGF0aCB0byB0aGUgcGtjczExIG1vZHVsZSByZXF1aXJlZCBieSB0aGUgcGtjczExIGVuZ2luZQorI3BrY3MxMV9tb2R1bGVfcGF0aD0vdXNyL2xpYi9wa2NzMTEvb3BlbnNjLXBrY3MxMS5zbworCisjIER5bmFtaWMgRUFQIG1ldGhvZHMKKyMgSWYgRUFQIG1ldGhvZHMgd2VyZSBidWlsdCBkeW5hbWljYWxseSBhcyBzaGFyZWQgb2JqZWN0IGZpbGVzLCB0aGV5IG5lZWQgdG8gYmUKKyMgbG9hZGVkIGhlcmUgYmVmb3JlIGJlaW5nIHVzZWQgaW4gdGhlIG5ldHdvcmsgYmxvY2tzLiBCeSBkZWZhdWx0LCBFQVAgbWV0aG9kcworIyBhcmUgaW5jbHVkZWQgc3RhdGljYWxseSBpbiB0aGUgYnVpbGQsIHNvIHRoZXNlIGxpbmVzIGFyZSBub3QgbmVlZGVkCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfdGxzLnNvCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfbWQ1LnNvCisKKyMgRHJpdmVyIGludGVyZmFjZSBwYXJhbWV0ZXJzCisjIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFyYml0cmFyeSBkcml2ZXIgaW50ZXJhY2UgcGFyYW1ldGVycy4gVGhlCisjIGZvcm1hdCBpcyBzcGVjaWZpYyB0byB0aGUgc2VsZWN0ZWQgZHJpdmVyIGludGVyZmFjZS4gVGhpcyBmaWVsZCBpcyBub3QgdXNlZAorIyBpbiBtb3N0IGNhc2VzLgorI2RyaXZlcl9wYXJhbT0iZmllbGQ9dmFsdWUiCisKKyMgTWF4aW11bSBsaWZldGltZSBmb3IgUE1LU0EgaW4gc2Vjb25kczsgZGVmYXVsdCA0MzIwMAorI2RvdDExUlNOQUNvbmZpZ1BNS0xpZmV0aW1lPTQzMjAwCisjIFRocmVzaG9sZCBmb3IgcmVhdXRoZW50aWNhdGlvbiAocGVyY2VudGFnZSBvZiBQTUsgbGlmZXRpbWUpOyBkZWZhdWx0IDcwCisjZG90MTFSU05BQ29uZmlnUE1LUmVhdXRoVGhyZXNob2xkPTcwCisjIFRpbWVvdXQgZm9yIHNlY3VyaXR5IGFzc29jaWF0aW9uIG5lZ290aWF0aW9uIGluIHNlY29uZHM7IGRlZmF1bHQgNjAKKyNkb3QxMVJTTkFDb25maWdTQVRpbWVvdXQ9NjAKKworIyBuZXR3b3JrIGJsb2NrCisjCisjIEVhY2ggbmV0d29yayAodXN1YWxseSBBUCdzIHNoYXJpbmcgdGhlIHNhbWUgU1NJRCkgaXMgY29uZmlndXJlZCBhcyBhIHNlcGFyYXRlCisjIGJsb2NrIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLiBUaGUgbmV0d29yayBibG9ja3MgYXJlIGluIHByZWZlcmVuY2Ugb3JkZXIKKyMgKHRoZSBmaXJzdCBtYXRjaCBpcyB1c2VkKS4KKyMKKyMgbmV0d29yayBibG9jayBmaWVsZHM6CisjCisjIGRpc2FibGVkOgorIwkwID0gdGhpcyBuZXR3b3JrIGNhbiBiZSB1c2VkIChkZWZhdWx0KQorIwkxID0gdGhpcyBuZXR3b3JrIGJsb2NrIGlzIGRpc2FibGVkIChjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIGN0cmxfaWZhY2UsCisjCSAgICBlLmcuLCB3aXRoIHdwYV9jbGkgb3Igd3BhX2d1aSkKKyMKKyMgaWRfc3RyOiBOZXR3b3JrIGlkZW50aWZpZXIgc3RyaW5nIGZvciBleHRlcm5hbCBzY3JpcHRzLiBUaGlzIHZhbHVlIGlzIHBhc3NlZAorIwl0byBleHRlcm5hbCBhY3Rpb24gc2NyaXB0IHRocm91Z2ggd3BhX2NsaSBhcyBXUEFfSURfU1RSIGVudmlyb25tZW50CisjCXZhcmlhYmxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIG5ldHdvcmsgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyMKKyMgc3NpZDogU1NJRCAobWFuZGF0b3J5KTsgZWl0aGVyIGFzIGFuIEFTQ0lJIHN0cmluZyB3aXRoIGRvdWJsZSBxdW90YXRpb24gb3IKKyMJYXMgaGV4IHN0cmluZzsgbmV0d29yayBuYW1lCisjCisjIHNjYW5fc3NpZDoKKyMJMCA9IGRvIG5vdCBzY2FuIHRoaXMgU1NJRCB3aXRoIHNwZWNpZmljIFByb2JlIFJlcXVlc3QgZnJhbWVzIChkZWZhdWx0KQorIwkxID0gc2NhbiB3aXRoIFNTSUQtc3BlY2lmaWMgUHJvYmUgUmVxdWVzdCBmcmFtZXMgKHRoaXMgY2FuIGJlIHVzZWQgdG8KKyMJICAgIGZpbmQgQVBzIHRoYXQgZG8gbm90IGFjY2VwdCBicm9hZGNhc3QgU1NJRCBvciB1c2UgbXVsdGlwbGUgU1NJRHM7CisjCSAgICB0aGlzIHdpbGwgYWRkIGxhdGVuY3kgdG8gc2Nhbm5pbmcsIHNvIGVuYWJsZSB0aGlzIG9ubHkgd2hlbiBuZWVkZWQpCisjCisjIGJzc2lkOiBCU1NJRCAob3B0aW9uYWwpOyBpZiBzZXQsIHRoaXMgbmV0d29yayBibG9jayBpcyB1c2VkIG9ubHkgd2hlbgorIwlhc3NvY2lhdGluZyB3aXRoIHRoZSBBUCB1c2luZyB0aGUgY29uZmlndXJlZCBCU1NJRAorIworIyBwcmlvcml0eTogcHJpb3JpdHkgZ3JvdXAgKGludGVnZXIpCisjIEJ5IGRlZmF1bHQsIGFsbCBuZXR3b3JrcyB3aWxsIGdldCBzYW1lIHByaW9yaXR5IGdyb3VwICgwKS4gSWYgc29tZSBvZiB0aGUKKyMgbmV0d29ya3MgYXJlIG1vcmUgZGVzaXJhYmxlLCB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgb3JkZXIgaW4KKyMgd2hpY2ggd3BhX3N1cHBsaWNhbnQgZ29lcyB0aHJvdWdoIHRoZSBuZXR3b3JrcyB3aGVuIHNlbGVjdGluZyBhIEJTUy4gVGhlCisjIHByaW9yaXR5IGdyb3VwcyB3aWxsIGJlIGl0ZXJhdGVkIGluIGRlY3JlYXNpbmcgcHJpb3JpdHkgKGkuZS4sIHRoZSBsYXJnZXIgdGhlCisjIHByaW9yaXR5IHZhbHVlLCB0aGUgc29vbmVyIHRoZSBuZXR3b3JrIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc2NhbiByZXN1bHRzKS4KKyMgV2l0aGluIGVhY2ggcHJpb3JpdHkgZ3JvdXAsIG5ldHdvcmtzIHdpbGwgYmUgc2VsZWN0ZWQgYmFzZWQgb24gc2VjdXJpdHkKKyMgcG9saWN5LCBzaWduYWwgc3RyZW5ndGgsIGV0Yy4KKyMgUGxlYXNlIG5vdGUgdGhhdCBBUCBzY2FubmluZyB3aXRoIHNjYW5fc3NpZD0xIGFuZCBhcF9zY2FuPTIgbW9kZSBhcmUgbm90CisjIHVzaW5nIHRoaXMgcHJpb3JpdHkgdG8gc2VsZWN0IHRoZSBvcmRlciBmb3Igc2Nhbm5pbmcuIEluc3RlYWQsIHRoZXkgdHJ5IHRoZQorIyBuZXR3b3JrcyBpbiB0aGUgb3JkZXIgdGhhdCB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisjCisjIG1vZGU6IElFRUUgODAyLjExIG9wZXJhdGlvbiBtb2RlCisjIDAgPSBpbmZyYXN0cnVjdHVyZSAoTWFuYWdlZCkgbW9kZSwgaS5lLiwgYXNzb2NpYXRlIHdpdGggYW4gQVAgKGRlZmF1bHQpCisjIDEgPSBJQlNTIChhZC1ob2MsIHBlZXItdG8tcGVlcikKKyMgTm90ZTogSUJTUyBjYW4gb25seSBiZSB1c2VkIHdpdGgga2V5X21nbXQgTk9ORSAocGxhaW50ZXh0IGFuZCBzdGF0aWMgV0VQKQorIyBhbmQga2V5X21nbXQ9V1BBLU5PTkUgKGZpeGVkIGdyb3VwIGtleSBUS0lQL0NDTVApLiBJbiBhZGRpdGlvbiwgYXBfc2NhbiBoYXMKKyMgdG8gYmUgc2V0IHRvIDIgZm9yIElCU1MuIFdQQS1Ob25lIHJlcXVpcmVzIGZvbGxvd2luZyBuZXR3b3JrIGJsb2NrIG9wdGlvbnM6CisjIHByb3RvPVdQQSwga2V5X21nbXQ9V1BBLU5PTkUsIHBhaXJ3aXNlPU5PTkUsIGdyb3VwPVRLSVAgKG9yIENDTVAsIGJ1dCBub3QKKyMgYm90aCksIGFuZCBwc2sgbXVzdCBhbHNvIGJlIHNldC4KKyMKKyMgcHJvdG86IGxpc3Qgb2YgYWNjZXB0ZWQgcHJvdG9jb2xzCisjIFdQQSA9IFdQQS9JRUVFIDgwMi4xMWkvRDMuMAorIyBSU04gPSBXUEEyL0lFRUUgODAyLjExaSAoYWxzbyBXUEEyIGNhbiBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvciBSU04pCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IFdQQSBSU04KKyMKKyMga2V5X21nbXQ6IGxpc3Qgb2YgYWNjZXB0ZWQgYXV0aGVudGljYXRlZCBrZXkgbWFuYWdlbWVudCBwcm90b2NvbHMKKyMgV1BBLVBTSyA9IFdQQSBwcmUtc2hhcmVkIGtleSAodGhpcyByZXF1aXJlcyAncHNrJyBmaWVsZCkKKyMgV1BBLUVBUCA9IFdQQSB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gKHRoaXMgY2FuIHVzZSBhbiBleHRlcm5hbAorIwlwcm9ncmFtLCBlLmcuLCBYc3VwcGxpY2FudCwgZm9yIElFRUUgODAyLjFYIEVBUCBBdXRoZW50aWNhdGlvbgorIyBJRUVFODAyMVggPSBJRUVFIDgwMi4xWCB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gYW5kIChvcHRpb25hbGx5KSBkeW5hbWljYWxseQorIwlnZW5lcmF0ZWQgV0VQIGtleXMKKyMgTk9ORSA9IFdQQSBpcyBub3QgdXNlZDsgcGxhaW50ZXh0IG9yIHN0YXRpYyBXRVAgY291bGQgYmUgdXNlZAorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBXUEEtUFNLIFdQQS1FQVAKKyMKKyMgYXV0aF9hbGc6IGxpc3Qgb2YgYWxsb3dlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zCisjIE9QRU4gPSBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQgZm9yIFdQQS9XUEEyKQorIyBTSEFSRUQgPSBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChyZXF1aXJlcyBzdGF0aWMgV0VQIGtleXMpCisjIExFQVAgPSBMRUFQL05ldHdvcmsgRUFQIChvbmx5IHVzZWQgd2l0aCBMRUFQKQorIyBJZiBub3Qgc2V0LCBhdXRvbWF0aWMgc2VsZWN0aW9uIGlzIHVzZWQgKE9wZW4gU3lzdGVtIHdpdGggTEVBUCBlbmFibGVkIGlmCisjIExFQVAgaXMgYWxsb3dlZCBhcyBvbmUgb2YgdGhlIEVBUCBtZXRob2RzKS4KKyMKKyMgcGFpcndpc2U6IGxpc3Qgb2YgYWNjZXB0ZWQgcGFpcndpc2UgKHVuaWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBOT05FID0gVXNlIG9ubHkgR3JvdXAgS2V5cyAoZGVwcmVjYXRlZCwgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpZiBBUHMgc3VwcG9ydAorIwlwYWlyd2lzZSBrZXlzKQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAKKyMKKyMgZ3JvdXA6IGxpc3Qgb2YgYWNjZXB0ZWQgZ3JvdXAgKGJyb2FkY2FzdC9tdWx0aWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBXRVAxMDQgPSBXRVAgKFdpcmVkIEVxdWl2YWxlbnQgUHJpdmFjeSkgd2l0aCAxMDQtYml0IGtleQorIyBXRVA0MCA9IFdFUCAoV2lyZWQgRXF1aXZhbGVudCBQcml2YWN5KSB3aXRoIDQwLWJpdCBrZXkgW0lFRUUgODAyLjExXQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisjCisjIHBzazogV1BBIHByZXNoYXJlZCBrZXk7IDI1Ni1iaXQgcHJlLXNoYXJlZCBrZXkKKyMgVGhlIGtleSB1c2VkIGluIFdQQS1QU0sgbW9kZSBjYW4gYmUgZW50ZXJlZCBlaXRoZXIgYXMgNjQgaGV4LWRpZ2l0cywgaS5lLiwKKyMgMzIgYnl0ZXMgb3IgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSAoaW4gd2hpY2ggY2FzZSwgdGhlIHJlYWwgUFNLIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwYXNzcGhyYXNlIGFuZCBTU0lEKS4gQVNDSUkgcGFzc3BocmFzZSBtdXN0IGJlIGJldHdlZW4KKyMgOCBhbmQgNjMgY2hhcmFjdGVycyAoaW5jbHVzaXZlKS4KKyMgVGhpcyBmaWVsZCBpcyBub3QgbmVlZGVkLCBpZiBXUEEtRUFQIGlzIHVzZWQuCisjIE5vdGU6IFNlcGFyYXRlIHRvb2wsIHdwYV9wYXNzcGhyYXNlLCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSAyNTYtYml0IGtleXMKKyMgZnJvbSBBU0NJSSBwYXNzcGhyYXNlLiBUaGlzIHByb2Nlc3MgdXNlcyBsb3Qgb2YgQ1BVIGFuZCB3cGFfc3VwcGxpY2FudAorIyBzdGFydHVwIGFuZCByZWNvbmZpZ3VyYXRpb24gdGltZSBjYW4gYmUgb3B0aW1pemVkIGJ5IGdlbmVyYXRpbmcgdGhlIFBTSyBvbmx5CisjIG9ubHkgd2hlbiB0aGUgcGFzc3BocmFzZSBvciBTU0lEIGhhcyBhY3R1YWxseSBjaGFuZ2VkLgorIworIyBlYXBvbF9mbGFnczogSUVFRSA4MDIuMVgvRUFQT0wgb3B0aW9ucyAoYml0IGZpZWxkKQorIyBEeW5hbWljIFdFUCBrZXkgcmVxdWlyZWQgZm9yIG5vbi1XUEEgbW9kZQorIyBiaXQwICgxKTogcmVxdWlyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgdW5pY2FzdCBXRVAga2V5CisjIGJpdDEgKDIpOiByZXF1aXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBicm9hZGNhc3QgV0VQIGtleQorIyAJKDMgPSByZXF1aXJlIGJvdGgga2V5czsgZGVmYXVsdCkKKyMgTm90ZTogV2hlbiB1c2luZyB3aXJlZCBhdXRoZW50aWNhdGlvbiwgZWFwb2xfZmxhZ3MgbXVzdCBiZSBzZXQgdG8gMCBmb3IgdGhlCisjIGF1dGhlbnRpY2F0aW9uIHRvIGJlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisjCisjIHByb2FjdGl2ZV9rZXlfY2FjaGluZzoKKyMgRW5hYmxlL2Rpc2FibGUgb3Bwb3J0dW5pc3RpYyBQTUtTQSBjYWNoaW5nIGZvciBXUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjCisjIHdlcF9rZXkwLi4zOiBTdGF0aWMgV0VQIGtleSAoQVNDSUkgaW4gZG91YmxlIHF1b3RhdGlvbiwgZS5nLiAiYWJjZGUiIG9yCisjIGhleCB3aXRob3V0IHF1b3RhdGlvbiwgZS5nLiwgMDEwMjAzMDQwNSkKKyMgd2VwX3R4X2tleWlkeDogRGVmYXVsdCBXRVAga2V5IGluZGV4IChUWCkgKDAuLjMpCisjCisjIHBlZXJrZXk6IFdoZXRoZXIgUGVlcktleSBuZWdvdGlhdGlvbiBmb3IgZGlyZWN0IGxpbmtzIChJRUVFIDgwMi4xMWUgRExTKSBpcworIyBhbGxvd2VkLiBUaGlzIGlzIG9ubHkgdXNlZCB3aXRoIFJTTi9XUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjcGVlcmtleT0xCisjCisjIEZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgdXNlZCB3aXRoIGludGVybmFsIEVBUCBpbXBsZW1lbnRhdGlvbi4KKyMgZWFwOiBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhY2NlcHRlZCBFQVAgbWV0aG9kcworIwlNRDUgPSBFQVAtTUQ1ICh1bnNlY3VyZSBhbmQgZG9lcyBub3QgZ2VuZXJhdGUga2V5aW5nIG1hdGVyaWFsIC0+CisjCQkJY2Fubm90IGJlIHVzZWQgd2l0aCBXUEE7IHRvIGJlIHVzZWQgYXMgYSBQaGFzZSAyIG1ldGhvZAorIwkJCXdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE1TQ0hBUFYyID0gRUFQLU1TQ0hBUHYyIChjYW5ub3QgYmUgdXNlZCBzZXBhcmF0ZWx5IHdpdGggV1BBOyB0byBiZSB1c2VkCisjCQlhcyBhIFBoYXNlIDIgbWV0aG9kIHdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE9UUCA9IEVBUC1PVFAgKGNhbm5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgd2l0aCBXUEE7IHRvIGJlIHVzZWQKKyMJCWFzIGEgUGhhc2UgMiBtZXRob2Qgd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMgICAgICAgR1RDID0gRUFQLUdUQyAoY2Fubm90IGJlIHVzZWQgc2VwYXJhdGVseSB3aXRoIFdQQTsgdG8gYmUgdXNlZAorIwkJYXMgYSBQaGFzZSAyIG1ldGhvZCB3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIwlUTFMgPSBFQVAtVExTIChjbGllbnQgYW5kIHNlcnZlciBjZXJ0aWZpY2F0ZSkKKyMJUEVBUCA9IEVBUC1QRUFQICh3aXRoIHR1bm5lbGxlZCBFQVAgYXV0aGVudGljYXRpb24pCisjCVRUTFMgPSBFQVAtVFRMUyAod2l0aCB0dW5uZWxsZWQgRUFQIG9yIFBBUC9DSEFQL01TQ0hBUC9NU0NIQVBWMgorIwkJCSBhdXRoZW50aWNhdGlvbikKKyMJSWYgbm90IHNldCwgYWxsIGNvbXBpbGVkIGluIG1ldGhvZHMgYXJlIGFsbG93ZWQuCisjCisjIGlkZW50aXR5OiBJZGVudGl0eSBzdHJpbmcgZm9yIEVBUAorIyBhbm9ueW1vdXNfaWRlbnRpdHk6IEFub255bW91cyBpZGVudGl0eSBzdHJpbmcgZm9yIEVBUCAodG8gYmUgdXNlZCBhcyB0aGUKKyMJdW5lbmNyeXB0ZWQgaWRlbnRpdHkgd2l0aCBFQVAgdHlwZXMgdGhhdCBzdXBwb3J0IGRpZmZlcmVudCB0dW5uZWxsZWQKKyMJaWRlbnRpdHksIGUuZy4sIEVBUC1UVExTKQorIyBwYXNzd29yZDogUGFzc3dvcmQgc3RyaW5nIGZvciBFQVAKKyMgY2FfY2VydDogRmlsZSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUgKFBFTS9ERVIpLiBUaGlzIGZpbGUgY2FuIGhhdmUgb25lCisjCW9yIG1vcmUgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMuIElmIGNhX2NlcnQgYW5kIGNhX3BhdGggYXJlIG5vdAorIwlpbmNsdWRlZCwgc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZAorIwlhIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkIHdoZW4gdXNpbmcKKyMJRUFQLVRMUy9UVExTL1BFQVAuIEZ1bGwgcGF0aCBzaG91bGQgYmUgdXNlZCBzaW5jZSB3b3JraW5nIGRpcmVjdG9yeSBtYXkKKyMJY2hhbmdlIHdoZW4gd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorIwlPbiBXaW5kb3dzLCB0cnVzdGVkIENBIGNlcnRpZmljYXRlcyBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHN5c3RlbQorIwljZXJ0aWZpY2F0ZSBzdG9yZSBieSBzZXR0aW5nIHRoaXMgdG8gY2VydF9zdG9yZTovLzxuYW1lPiwgZS5nLiwKKyMJY2FfY2VydD0iY2VydF9zdG9yZTovL0NBIiBvciBjYV9jZXJ0PSJjZXJ0X3N0b3JlOi8vUk9PVCIuCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjIGNhX3BhdGg6IERpcmVjdG9yeSBwYXRoIGZvciBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyAoUEVNKS4gVGhpcyBwYXRoIG1heQorIwljb250YWluIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcyBpbiBPcGVuU1NMIGZvcm1hdC4gQ29tbW9uIHVzZSBmb3IgdGhpcworIwlpcyB0byBwb2ludCB0byBzeXN0ZW0gdHJ1c3RlZCBDQSBsaXN0IHdoaWNoIGlzIG9mdGVuIGluc3RhbGxlZCBpbnRvCisjCWRpcmVjdG9yeSBsaWtlIC9ldGMvc3NsL2NlcnRzLiBJZiBjb25maWd1cmVkLCB0aGVzZSBjZXJ0aWZpY2F0ZXMgYXJlCisjCWFkZGVkIHRvIHRoZSBsaXN0IG9mIHRydXN0ZWQgQ0FzLiBjYV9jZXJ0IG1heSBhbHNvIGJlIGluY2x1ZGVkIGluIHRoYXQKKyMJY2FzZSwgYnV0IGl0IGlzIG5vdCByZXF1aXJlZC4KKyMgY2xpZW50X2NlcnQ6IEZpbGUgcGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSAoUEVNL0RFUikKKyMJRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbgorIwl3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5OiBGaWxlIHBhdGggdG8gY2xpZW50IHByaXZhdGUga2V5IGZpbGUgKFBFTS9ERVIvUEZYKQorIwlXaGVuIFBLQ1MjMTIvUEZYIGZpbGUgKC5wMTIvLnBmeCkgaXMgdXNlZCwgY2xpZW50X2NlcnQgc2hvdWxkIGJlCisjCWNvbW1lbnRlZCBvdXQuIEJvdGggdGhlIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlYWQgZnJvbQorIwl0aGUgUEtDUyMxMiBmaWxlIGluIHRoaXMgY2FzZS4gRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcKKyMJZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCVdpbmRvd3MgY2VydGlmaWNhdGUgc3RvcmUgY2FuIGJlIHVzZWQgYnkgbGVhdmluZyBjbGllbnRfY2VydCBvdXQgYW5kCisjCWNvbmZpZ3VyaW5nIHByaXZhdGVfa2V5IGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisjCWNlcnQ6Ly9zdWJzdHJpbmdfdG9fbWF0Y2gKKyMJaGFzaDovL2NlcnRpZmljYXRlX3RodW1icHJpbnRfaW5faGV4CisjCWZvciBleGFtcGxlOiBwcml2YXRlX2tleT0iaGFzaDovLzYzMDkzYWE5YzQ3ZjU2YWU4ODMzNGM3YjY1YTQiCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5X3Bhc3N3ZDogUGFzc3dvcmQgZm9yIHByaXZhdGUga2V5IGZpbGUgKGlmIGxlZnQgb3V0LCB0aGlzIHdpbGwgYmUKKyMJYXNrZWQgdGhyb3VnaCBjb250cm9sIGludGVyZmFjZSkKKyMgZGhfZmlsZTogRmlsZSBwYXRoIHRvIERIL0RTQSBwYXJhbWV0ZXJzIGZpbGUgKGluIFBFTSBmb3JtYXQpCisjCVRoaXMgaXMgYW4gb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzZXR0aW5nIHBhcmFtZXRlcnMgZm9yIGFuCisjCWVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIG1vc3QgY2FzZXMsIHRoZSBkZWZhdWx0IFJTQQorIwlhdXRoZW50aWNhdGlvbiBkb2VzIG5vdCB1c2UgdGhpcyBjb25maWd1cmF0aW9uLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZQorIwlzZXR1cCBSU0EgdG8gdXNlIGVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIGFkZGl0aW9uLCBjaXBoZXJzIHdpdGgKKyMJRFNBIGtleXMgYWx3YXlzIHVzZSBlcGhlbWVyYWwgREgga2V5cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBhY2hpZXZlCisjCWZvcndhcmQgc2VjcmVjeS4gSWYgdGhlIGZpbGUgaXMgaW4gRFNBIHBhcmFtZXRlcnMgZm9ybWF0LCBpdCB3aWxsIGJlCisjCWF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gREggcGFyYW1zLgorIyBzdWJqZWN0X21hdGNoOiBTdWJzdHJpbmcgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJqZWN0IG9mIHRoZQorIwlhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuIElmIHRoaXMgc3RyaW5nIGlzIHNldCwgdGhlIHNlcnZlcgorIwlzZXJ0aWZpY2F0ZSBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGNvbnRhaW5zIHRoaXMgc3RyaW5nIGluIHRoZSBzdWJqZWN0LgorIwlUaGUgc3ViamVjdCBzdHJpbmcgaXMgaW4gZm9sbG93aW5nIGZvcm1hdDoKKyMJL0M9VVMvU1Q9Q0EvTD1TYW4gRnJhbmNpc2NvL0NOPVRlc3QgQVMvZW1haWxBZGRyZXNzPWFzQGV4YW1wbGUuY29tCisjIGFsdHN1YmplY3RfbWF0Y2g6IFNlbWljb2xvbiBzZXBhcmF0ZWQgc3RyaW5nIG9mIGVudHJpZXMgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0CisjCXRoZSBhbHRlcm5hdGl2ZSBzdWJqZWN0IG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMJSWYgdGhpcyBzdHJpbmcgaXMgc2V0LCB0aGUgc2VydmVyIHNlcnRpZmljYXRlIGlzIG9ubHkgYWNjZXB0ZWQgaWYgaXQKKyMJY29udGFpbnMgb25lIG9mIHRoZSBlbnRyaWVzIGluIGFuIGFsdGVybmF0aXZlIHN1YmplY3QgbmFtZSBleHRlbnNpb24uCisjCWFsdFN1YmplY3ROYW1lIHN0cmluZyBpcyBpbiBmb2xsb3dpbmcgZm9ybWF0OiBUWVBFOlZBTFVFCisjCUV4YW1wbGU6IEVNQUlMOnNlcnZlckBleGFtcGxlLmNvbQorIwlFeGFtcGxlOiBETlM6c2VydmVyLmV4YW1wbGUuY29tO0ROUzpzZXJ2ZXIyLmV4YW1wbGUuY29tCisjCUZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOiBFTUFJTCwgRE5TLCBVUkkKKyMgcGhhc2UxOiBQaGFzZTEgKG91dGVyIGF1dGhlbnRpY2F0aW9uLCBpLmUuLCBUTFMgdHVubmVsKSBwYXJhbWV0ZXJzCisjCShzdHJpbmcgd2l0aCBmaWVsZC12YWx1ZSBwYWlycywgZS5nLiwgInBlYXB2ZXI9MCIgb3IKKyMJInBlYXB2ZXI9MSBwZWFwbGFiZWw9MSIpCisjCSdwZWFwdmVyJyBjYW4gYmUgdXNlZCB0byBmb3JjZSB3aGljaCBQRUFQIHZlcnNpb24gKDAgb3IgMSkgaXMgdXNlZC4KKyMJJ3BlYXBsYWJlbD0xJyBjYW4gYmUgdXNlZCB0byBmb3JjZSBuZXcgbGFiZWwsICJjbGllbnQgUEVBUCBlbmNyeXB0aW9uIiwKKyMJdG8gYmUgdXNlZCBkdXJpbmcga2V5IGRlcml2YXRpb24gd2hlbiBQRUFQdjEgb3IgbmV3ZXIuIE1vc3QgZXhpc3RpbmcKKyMJUEVBUHYxIGltcGxlbWVudGF0aW9uIHNlZW0gdG8gYmUgdXNpbmcgdGhlIG9sZCBsYWJlbCwgImNsaWVudCBFQVAKKyMJZW5jcnlwdGlvbiIsIGFuZCB3cGFfc3VwcGxpY2FudCBpcyBub3cgdXNpbmcgdGhhdCBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyMJU29tZSBzZXJ2ZXJzLCBlLmcuLCBSYWRpYXRvciwgbWF5IHJlcXVpcmUgcGVhcGxhYmVsPTEgY29uZmlndXJhdGlvbiB0bworIwlpbnRlcm9wZXJhdGUgd2l0aCBQRUFQdjE7IHNlZSBlYXBfdGVzdGluZy50eHQgZm9yIG1vcmUgZGV0YWlscy4KKyMJJ3BlYXBfb3V0ZXJfc3VjY2Vzcz0wJyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgUEVBUCBhdXRoZW50aWNhdGlvbiBvbgorIwl0dW5uZWxlZCBFQVAtU3VjY2Vzcy4gVGhpcyBpcyByZXF1aXJlZCB3aXRoIHNvbWUgUkFESVVTIHNlcnZlcnMgdGhhdAorIwlpbXBsZW1lbnQgZHJhZnQtam9zZWZzc29uLXBwcGV4dC1lYXAtdGxzLWVhcC0wNS50eHQgKGUuZy4sCisjCUx1Y2VudCBOYXZpc1JhZGl1cyB2NC40LjAgd2l0aCBQRUFQIGluICJJRVRGIERyYWZ0IDUiIG1vZGUpCisjCWluY2x1ZGVfdGxzX2xlbmd0aD0xIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHdwYV9zdXBwbGljYW50IHRvIGluY2x1ZGUKKyMJVExTIE1lc3NhZ2UgTGVuZ3RoIGZpZWxkIGluIGFsbCBUTFMgbWVzc2FnZXMgZXZlbiBpZiB0aGV5IGFyZSBub3QKKyMJZnJhZ21lbnRlZC4KKyMJc2ltX21pbl9udW1fY2hhbD0zIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBFQVAtU0lNIHRvIHJlcXVpcmUgdGhyZWUKKyMJY2hhbGxlbmdlcyAoYnkgZGVmYXVsdCwgaXQgYWNjZXB0cyAyIG9yIDMpCisjIHBoYXNlMjogUGhhc2UyIChpbm5lciBhdXRoZW50aWNhdGlvbiB3aXRoIFRMUyB0dW5uZWwpIHBhcmFtZXRlcnMKKyMJKHN0cmluZyB3aXRoIGZpZWxkLXZhbHVlIHBhaXJzLCBlLmcuLCAiYXV0aD1NU0NIQVBWMiIgZm9yIEVBUC1QRUFQIG9yCisjCSJhdXRoZWFwPU1TQ0hBUFYyIGF1dGhlYXA9TUQ1IiBmb3IgRUFQLVRUTFMpCisjIEZvbGxvd2luZyBjZXJ0aWZpY2F0ZS9wcml2YXRlIGtleSBmaWVsZHMgYXJlIHVzZWQgaW4gaW5uZXIgUGhhc2UyCisjIGF1dGhlbnRpY2F0aW9uIHdoZW4gdXNpbmcgRUFQLVRUTFMgb3IgRUFQLVBFQVAuCisjIGNhX2NlcnQyOiBGaWxlIHBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZS4gVGhpcyBmaWxlIGNhbiBoYXZlIG9uZSBvciBtb3JlCisjCXRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzLiBJZiBjYV9jZXJ0MiBhbmQgY2FfcGF0aDIgYXJlIG5vdCBpbmNsdWRlZCwKKyMJc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZCBhIHRydXN0ZWQKKyMJQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkLgorIyBjYV9wYXRoMjogRGlyZWN0b3J5IHBhdGggZm9yIENBIGNlcnRpZmljYXRlIGZpbGVzIChQRU0pCisjIGNsaWVudF9jZXJ0MjogRmlsZSBwYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlCisjIHByaXZhdGVfa2V5MjogRmlsZSBwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSBmaWxlCisjIHByaXZhdGVfa2V5Ml9wYXNzd2Q6IFBhc3N3b3JkIGZvciBwcml2YXRlIGtleSBmaWxlCisjIGRoX2ZpbGUyOiBGaWxlIHBhdGggdG8gREgvRFNBIHBhcmFtZXRlcnMgZmlsZSAoaW4gUEVNIGZvcm1hdCkKKyMgc3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHN1YmplY3Qgb2YgdGhlCisjCWF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMgYWx0c3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIGFsdGVybmF0aXZlIHN1YmplY3QKKyMJbmFtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLgorIworIyBmcmFnbWVudF9zaXplOiBNYXhpbXVtIEVBUCBmcmFnbWVudCBzaXplIGluIGJ5dGVzIChkZWZhdWx0IDEzOTgpLgorIwlUaGlzIHZhbHVlIGxpbWl0cyB0aGUgZnJhZ21lbnQgc2l6ZSBmb3IgRUFQIG1ldGhvZHMgdGhhdCBzdXBwb3J0CisjCWZyYWdtZW50YXRpb24gKGUuZy4sIEVBUC1UTFMgYW5kIEVBUC1QRUFQKS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0CisjCXNtYWxsIGVub3VnaCB0byBtYWtlIHRoZSBFQVAgbWVzc2FnZXMgZml0IGluIE1UVSBvZiB0aGUgbmV0d29yaworIwlpbnRlcmZhY2UgdXNlZCBmb3IgRUFQT0wuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0CisjCWNhc2VzLgorIworIyBFQVAtUFNLIHZhcmlhYmxlczoKKyMgZWFwcHNrOiAxNi1ieXRlICgxMjgtYml0LCAzMiBoZXggZGlnaXRzKSBwcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0CisjIG5haTogdXNlciBOQUkKKyMKKyMgRUFQLVBBWCB2YXJpYWJsZXM6CisjIGVhcHBzazogMTYtYnl0ZSAoMTI4LWJpdCwgMzIgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIworIyBFQVAtU0FLRSB2YXJpYWJsZXM6CisjIGVhcHBzazogMzItYnl0ZSAoMjU2LWJpdCwgNjQgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIwkodGhpcyBpcyBjb25jYXRlbmF0aW9uIG9mIFJvb3QtU2VjcmV0LUEgYW5kIFJvb3QtU2VjcmV0LUIpCisjIG5haTogdXNlciBOQUkgKFBFRVJJRCkKKyMKKyMgRUFQLUdQU0sgdmFyaWFibGVzOgorIyBlYXBwc2s6IFByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQgKGF0IGxlYXN0IDEyOCBiaXRzLCBpLmUuLCAzMiBoZXggZGlnaXRzKQorIyBuYWk6IHVzZXIgTkFJIChJRF9DbGllbnQpCisjCisjIEVBUC1GQVNUIHZhcmlhYmxlczoKKyMgcGFjX2ZpbGU6IEZpbGUgcGF0aCBmb3IgdGhlIFBBQyBlbnRyaWVzLiB3cGFfc3VwcGxpY2FudCB3aWxsIG5lZWQgdG8gYmUgYWJsZQorIwl0byBjcmVhdGUgdGhpcyBmaWxlIGFuZCB3cml0ZSB1cGRhdGVzIHRvIGl0IHdoZW4gUEFDIGlzIGJlaW5nCisjCXByb3Zpc2lvbmVkIG9yIHJlZnJlc2hlZC4gRnVsbCBwYXRoIHRvIHRoZSBmaWxlIHNob3VsZCBiZSB1c2VkIHNpbmNlCisjCXdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlCisjCWJhY2tncm91bmQuIEFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5CisjCXNldHRpbmcgdGhpcyB0byBibG9iOi8vPGJsb2IgbmFtZT4KKyMgcGhhc2UxOiBmYXN0X3Byb3Zpc2lvbmluZz0xIG9wdGlvbiBlbmFibGVzIGluLWxpbmUgcHJvdmlzaW9uaW5nIG9mIEVBUC1GQVNUCisjCWNyZWRlbnRpYWxzIChQQUMpCisjCisjIHdwYV9zdXBwbGljYW50IHN1cHBvcnRzIG51bWJlciBvZiAiRUFQIHdvcmthcm91bmRzIiB0byB3b3JrIGFyb3VuZAorIyBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcyB3aXRoIGluY29ycmVjdGx5IGJlaGF2aW5nIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuCisjIFRoZXNlIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBzb21lIG9mIHRoZSBpc3N1ZXMgYXJlIHByZXNlbnQgaW4gbGFyZ2UKKyMgbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuIFN0cmljdCBFQVAgY29uZm9ybWFuY2UgbW9kZSBjYW4gYmUKKyMgY29uZmlndXJlZCBieSBkaXNhYmxpbmcgd29ya2Fyb3VuZHMgd2l0aCBlYXBfd29ya2Fyb3VuZD0wLgorCisjIEV4YW1wbGUgYmxvY2tzOgorCisjIFNpbXBsZSBjYXNlOiBXUEEtUFNLLCBQU0sgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSwgYWxsb3cgYWxsIHZhbGlkIGNpcGhlcnMKK25ldHdvcms9eworCXNzaWQ9InNpbXBsZSIKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJcHJpb3JpdHk9NQorfQorCisjIFNhbWUgYXMgcHJldmlvdXMsIGJ1dCByZXF1ZXN0IFNTSUQtc3BlY2lmaWMgc2Nhbm5pbmcgKGZvciBBUHMgdGhhdCByZWplY3QKKyMgYnJvYWRjYXN0IFNTSUQpCituZXR3b3JrPXsKKwlzc2lkPSJzZWNvbmQgc3NpZCIKKwlzY2FuX3NzaWQ9MQorCXBzaz0idmVyeSBzZWNyZXQgcGFzc3BocmFzZSIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtUFNLIGlzIHVzZWQuIEFueSB2YWxpZCBjaXBoZXIgY29tYmluYXRpb24gaXMgYWNjZXB0ZWQuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCXByb3RvPVdQQQorCWtleV9tZ210PVdQQS1QU0sKKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisJcHNrPTA2YjRiZTE5ZGEyODlmNDc1YWE0NmEzM2NiNzkzMDI5ZDRhYjNkYjdhMjNlZTkyMzgyZWIwMTA2YzcyYWM3YmIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtRUFQIGlzIHVzZWQuIEJvdGggQ0NNUCBhbmQgVEtJUCBpcyBhY2NlcHRlZC4gQW4gQVAgdGhhdCB1c2VkIFdFUDEwNAorIyBvciBXRVA0MCBhcyB0aGUgZ3JvdXAgY2lwaGVyIHdpbGwgbm90IGJlIGFjY2VwdGVkLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlwcm90bz1SU04KKwlrZXlfbWdtdD1XUEEtRUFQCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQCisJZWFwPVRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcHJpb3JpdHk9MQorfQorCisjIEVBUC1QRUFQL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gZm9yIFJBRElVUyBzZXJ2ZXJzIHRoYXQgdXNlIHRoZSBuZXcgcGVhcGxhYmVsCisjIChlLmcuLCBSYWRpYXRvcikKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1QRUFQCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMT0icGVhcGxhYmVsPTEiCisJcGhhc2UyPSJhdXRoPU1TQ0hBUFYyIgorCXByaW9yaXR5PTEwCit9CisKKyMgRUFQLVRUTFMvRUFQLU1ENS1DaGFsbGVuZ2UgY29uZmlndXJhdGlvbiB3aXRoIGFub255bW91cyBpZGVudGl0eSBmb3IgdGhlCisjIHVuZW5jcnlwdGVkIHVzZS4gUmVhbCBpZGVudGl0eSBpcyBzZW50IG9ubHkgd2l0aGluIGFuIGVuY3J5cHRlZCBUTFMgdHVubmVsLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJcHJpb3JpdHk9MgorfQorCisjIEVBUC1UVExTL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gd2l0aCBhbm9ueW1vdXMgaWRlbnRpdHkgZm9yIHRoZSB1bmVuY3J5cHRlZAorIyB1c2UuIFJlYWwgaWRlbnRpdHkgaXMgc2VudCBvbmx5IHdpdGhpbiBhbiBlbmNyeXB0ZWQgVExTIHR1bm5lbC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMj0iYXV0aD1NU0NIQVBWMiIKK30KKworIyBXUEEtRUFQLCBFQVAtVFRMUyB3aXRoIGRpZmZlcmVudCBDQSBjZXJ0aWZpY2F0ZSB1c2VkIGZvciBvdXRlciBhbmQgaW5uZXIKKyMgYXV0aGVudGljYXRpb24uCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCSMgUGhhc2UxIC8gb3V0ZXIgYXV0aGVudGljYXRpb24KKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCSMgUGhhc2UgMiAvIGlubmVyIGF1dGhlbnRpY2F0aW9uCisJcGhhc2UyPSJhdXRoZWFwPVRMUyIKKwljYV9jZXJ0Mj0iL2V0Yy9jZXJ0L2NhMi5wZW0iCisJY2xpZW50X2NlcnQyPSIvZXRjL2Nlci91c2VyLnBlbSIKKwlwcml2YXRlX2tleTI9Ii9ldGMvY2VyL3VzZXIucHJ2IgorCXByaXZhdGVfa2V5Ml9wYXNzd2Q9InBhc3N3b3JkIgorCXByaW9yaXR5PTIKK30KKworIyBCb3RoIFdQQS1QU0sgYW5kIFdQQS1FQVAgaXMgYWNjZXB0ZWQuIE9ubHkgQ0NNUCBpcyBhY2NlcHRlZCBhcyBwYWlyd2lzZSBhbmQKKyMgZ3JvdXAgY2lwaGVyLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlic3NpZD0wMDoxMToyMjozMzo0NDo1NQorCXByb3RvPVdQQSBSU04KKwlrZXlfbWdtdD1XUEEtUFNLIFdQQS1FQVAKKwlwYWlyd2lzZT1DQ01QCisJZ3JvdXA9Q0NNUAorCXBzaz0wNmI0YmUxOWRhMjg5ZjQ3NWFhNDZhMzNjYjc5MzAyOWQ0YWIzZGI3YTIzZWU5MjM4MmViMDEwNmM3MmFjN2JiCit9CisKKyMgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIFNTSUQsIHNvIHVzZSBoZXggc3RyaW5nLiBEZWZhdWx0IHRvIFdQQS1QU0ssIFdQQS1FQVAKKyMgYW5kIGFsbCB2YWxpZCBjaXBoZXJzLgorbmV0d29yaz17CisJc3NpZD0wMDAxMDIwMworCXBzaz0wMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCit9CisKKworIyBJRUVFIDgwMi4xWC9FQVBPTCB3aXRoIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBXRVAga2V5cyAoaS5lLiwgbm8gV1BBKSB1c2luZworIyBFQVAtVExTIGZvciBhdXRoZW50aWNhdGlvbiBhbmQga2V5IGdlbmVyYXRpb247IHJlcXVpcmUgYm90aCB1bmljYXN0IGFuZAorIyBicm9hZGNhc3QgV0VQIGtleXMuCituZXR3b3JrPXsKKwlzc2lkPSIxeC10ZXN0IgorCWtleV9tZ210PUlFRUU4MDIxWAorCWVhcD1UTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXk9Ii9ldGMvY2VydC91c2VyLnBydiIKKwlwcml2YXRlX2tleV9wYXNzd2Q9InBhc3N3b3JkIgorCWVhcG9sX2ZsYWdzPTMKK30KKworCisjIExFQVAgd2l0aCBkeW5hbWljIFdFUCBrZXlzCituZXR3b3JrPXsKKwlzc2lkPSJsZWFwLWV4YW1wbGUiCisJa2V5X21nbXQ9SUVFRTgwMjFYCisJZWFwPUxFQVAKKwlpZGVudGl0eT0idXNlciIKKwlwYXNzd29yZD0iZm9vYmFyIgorfQorCisjIFBsYWludGV4dCBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKQorbmV0d29yaz17CisJc3NpZD0icGxhaW50ZXh0LXRlc3QiCisJa2V5X21nbXQ9Tk9ORQorfQorCisKKyMgU2hhcmVkIFdFUCBrZXkgY29ubmVjdGlvbiAobm8gV1BBLCBubyBJRUVFIDgwMi4xWCkKK25ldHdvcms9eworCXNzaWQ9InN0YXRpYy13ZXAtdGVzdCIKKwlrZXlfbWdtdD1OT05FCisJd2VwX2tleTA9ImFiY2RlIgorCXdlcF9rZXkxPTAxMDIwMzA0MDUKKwl3ZXBfa2V5Mj0iMTIzNDU2Nzg5MDEyMyIKKwl3ZXBfdHhfa2V5aWR4PTAKKwlwcmlvcml0eT01Cit9CisKKworIyBTaGFyZWQgV0VQIGtleSBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKSB1c2luZyBTaGFyZWQgS2V5CisjIElFRUUgODAyLjExIGF1dGhlbnRpY2F0aW9uCituZXR3b3JrPXsKKwlzc2lkPSJzdGF0aWMtd2VwLXRlc3QyIgorCWtleV9tZ210PU5PTkUKKwl3ZXBfa2V5MD0iYWJjZGUiCisJd2VwX2tleTE9MDEwMjAzMDQwNQorCXdlcF9rZXkyPSIxMjM0NTY3ODkwMTIzIgorCXdlcF90eF9rZXlpZHg9MAorCXByaW9yaXR5PTUKKwlhdXRoX2FsZz1TSEFSRUQKK30KKworCisjIElCU1MvYWQtaG9jIG5ldHdvcmsgd2l0aCBXUEEtTm9uZS9US0lQLgorbmV0d29yaz17CisJc3NpZD0idGVzdCBhZGhvYyIKKwltb2RlPTEKKwlwcm90bz1XUEEKKwlrZXlfbWdtdD1XUEEtTk9ORQorCXBhaXJ3aXNlPU5PTkUKKwlncm91cD1US0lQCisJcHNrPSJzZWNyZXQgcGFzc3BocmFzZSIKK30KKworCisjIENhdGNoIGFsbCBleGFtcGxlIHRoYXQgYWxsb3dzIG1vcmUgb3IgbGVzcyBhbGwgY29uZmlndXJhdGlvbiBtb2RlcworbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlzY2FuX3NzaWQ9MQorCWtleV9tZ210PVdQQS1FQVAgV1BBLVBTSyBJRUVFODAyMVggTk9ORQorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUCBXRVAxMDQgV0VQNDAKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJZWFwPVRUTFMgUEVBUCBUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcGhhc2UxPSJwZWFwbGFiZWw9MCIKK30KKworIyBFeGFtcGxlIG9mIEVBUC1UTFMgd2l0aCBzbWFydGNhcmQgKG9wZW5zc2wgZW5naW5lKQorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRMUworCXByb3RvPVJTTgorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUAorCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKworCWVuZ2luZT0xCisKKwkjIFRoZSBlbmdpbmUgY29uZmlndXJlZCBoZXJlIG11c3QgYmUgYXZhaWxhYmxlLiBMb29rIGF0CisJIyBPcGVuU1NMIGVuZ2luZSBzdXBwb3J0IGluIHRoZSBnbG9iYWwgc2VjdGlvbi4KKwkjIFRoZSBrZXkgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGVuZ2luZSBtdXN0IGJlIHRoZSBwcml2YXRlIGtleQorCSMgbWF0Y2hpbmcgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjb25maWd1cmVkIGFib3ZlLgorCisJIyB1c2UgdGhlIG9wZW5zYyBlbmdpbmUKKwkjZW5naW5lX2lkPSJvcGVuc2MiCisJI2tleV9pZD0iNDUiCisKKwkjIHVzZSB0aGUgcGtjczExIGVuZ2luZQorCWVuZ2luZV9pZD0icGtjczExIgorCWtleV9pZD0iaWRfNDUiCisKKwkjIE9wdGlvbmFsIFBJTiBjb25maWd1cmF0aW9uOyB0aGlzIGNhbiBiZSBsZWZ0IG91dCBhbmQgUElOIHdpbGwgYmUKKwkjIGFza2VkIHRocm91Z2ggdGhlIGNvbnRyb2wgaW50ZXJmYWNlCisJcGluPSIxMjM0IgorfQorCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBzaG93aW5nIGhvdyB0byB1c2UgYW4gaW5saW5lZCBibG9iIGFzIGEgQ0EgY2VydGlmaWNhdGUKKyMgZGF0YSBpbnN0ZWFkIG9mIHVzaW5nIGV4dGVybmFsIGZpbGUKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSJibG9iOi8vZXhhbXBsZWJsb2IiCisJcHJpb3JpdHk9MjAKK30KKworYmxvYi1iYXNlNjQtZXhhbXBsZWJsb2I9eworU0dWc2JHOGdWMjl5YkdRaENnPT0KK30KKworCisjIFdpbGRjYXJkIG1hdGNoIGZvciBTU0lEIChwbGFpbnRleHQgQVBzIG9ubHkpLiBUaGlzIGV4YW1wbGUgc2VsZWN0IGFueQorIyBvcGVuIEFQIHJlZ2FyZGxlc3Mgb2YgaXRzIFNTSUQuCituZXR3b3JrPXsKKwlrZXlfbWdtdD1OT05FCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWZmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZQpAQCAtMCwwICsxLDcgQEAKK2N0cmxfaW50ZXJmYWNlPS92YXIvcnVuL3dwYV9zdXBwbGljYW50CitjdHJsX2ludGVyZmFjZV9ncm91cD0wCit1cGRhdGVfY29uZmlnPTEKKworbmV0d29yaz17CisgICAgICAgIGtleV9tZ210PU5PTkUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyNGNmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiCkBAIC0wLDAgKzEsMTE2IEBACitTVU1NQVJZID0gIkNsaWVudCBmb3IgV2ktRmkgUHJvdGVjdGVkIEFjY2VzcyAoV1BBKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS93cGFfc3VwcGxpY2FudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9idWd6LyIKK1NFQ1RJT04gPSAibmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzZiMjc4MDE0NDdlMDY2MmVlMDEzOGQxN2ZlOTM4ODAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0xO2VuZGxpbmU9NTY7bWQ1PTdmMzkzNTc5ZjhiMTA5ZmU5MWYzYjk3NjVkMjZjN2QzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9MzQzMGZkYTc5ZjJiYTFkZDU0NWYwYjNjNGQ2ZTRkMjQgIgorREVQRU5EUyA9ICJkYnVzIGxpYm5sIGxpYmdjcnlwdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIndwYS1zdXBwbGljYW50LXBhc3NwaHJhc2Ugd3BhLXN1cHBsaWNhbnQtY2xpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ251dGxzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIiwsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICIsLG9wZW5zc2wiCisKK2luaGVyaXQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAid3BhX3N1cHBsaWNhbnQuc2VydmljZSB3cGFfc3VwcGxpY2FudC1ubDgwMjExQC5zZXJ2aWNlIHdwYV9zdXBwbGljYW50LXdpcmVkQC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitTUkNfVVJJID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9yZWxlYXNlcy93cGFfc3VwcGxpY2FudC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGVmY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL3dwYS1zdXBwbGljYW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3dwYV9zdXBwbGljYW50IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMDAzN2RiZTAzODk3ZGNhZjJhZDI3MjJlNjU5MDk1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNThkYzgzMmMwOTYxMzlhMDU5ZTZkZjgxNDA4MGY1MDI1MWE4ZDMxM2MyMWIxMzM2NGM1NGExZTcwMTA5MTIyIgorCitTID0gIiR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQtJHtQVn0iCisKK1BBQ0tBR0VTX3ByZXBlbmQgPSAid3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSB3cGEtc3VwcGxpY2FudC1jbGkgIgorRklMRVNfd3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSA9ICIke2JpbmRpcn0vd3BhX3Bhc3NwaHJhc2UiCitGSUxFU193cGEtc3VwcGxpY2FudC1jbGkgPSAiJHtzYmluZGlyfS93cGFfY2xpIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3dwYV9zdXBwbGljYW50LmNvbmYiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtNQUtFfSAtQyB3cGFfc3VwcGxpY2FudCBjbGVhbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmNvbmZpZyB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiQ0ZMQUdTICs9XCItSSR7U1RBR0lOR19JTkNESVJ9L2xpYm5sM1wiIiA+PiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiRFJWX0NGTEFHUyArPVwiLUkke1NUQUdJTkdfSU5DRElSfS9saWJubDNcIiIgPj4gd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCQorCWlmIGVjaG8gIiR7UEFDS0FHRUNPTkZJR30iIHwgZ3JlcCAtcXcgIm9wZW5zc2wiOyB0aGVuCisgICAgICAgIAlzc2w9b3BlbnNzbAorCWVsaWYgZWNobyAiJHtQQUNLQUdFQ09ORklHfSIgfCBncmVwIC1xdyAiZ251dGxzIjsgdGhlbgorICAgICAgICAJc3NsPWdudXRscworCWZpCisJaWYgWyAtbiAiJHNzbCIgXTsgdGhlbgorICAgICAgICAJc2VkIC1pICJzLyVzc2wlLyRzc2wvIiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZmkKKworCSMgRm9yIHJlYnVpbGQKKwlybSAtZiB3cGFfc3VwcGxpY2FudC8qLmQgd3BhX3N1cHBsaWNhbnQvZGJ1cy8qLmQKK30KKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgQklORElSID0gIiR7c2JpbmRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUworCXNlZCAtZSAiczpDRkxBR1NcID0uKjomIFwkKEVYVFJBX0NGTEFHUyk6ZyIgLWkgJHtTfS9zcmMvbGliLnJ1bGVzCisJb2VfcnVubWFrZSAtQyB3cGFfc3VwcGxpY2FudAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSB3cGFfc3VwcGxpY2FudC93cGFfY2xpICAgICAgICAke0R9JHtzYmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3Bhc3NwaHJhc2UgJHtEfSR7YmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisJaW5zdGFsbCAtbSA2NDQgd3BhX3N1cHBsaWNhbnQvUkVBRE1FICR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQuY29uZiAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSA2MDAgJHtXT1JLRElSfS93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUgJHtEfSR7c3lzY29uZmRpcn0vd3BhX3N1cHBsaWNhbnQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wb3N0LWRvd24uZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vd3BhLXN1cHBsaWNhbnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC93cGEtc3VwcGxpY2FudAorCWNkICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvICYmIFwKKwlsbiAtc2YgLi4vaWYtcHJlLXVwLmQvd3BhLXN1cHBsaWNhbnQgaWYtcG9zdC1kb3duLmQvd3BhLXN1cHBsaWNhbnQKKworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvZGJ1cy9kYnVzLXdwYV9zdXBwbGljYW50LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKwlpbnN0YWxsIC1tIDY0NCAke1N9L3dwYV9zdXBwbGljYW50L2RidXMvKi5zZXJ2aWNlICR7RH0vJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvc3lzdGVtZC8qLnNlcnZpY2UgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJZmkKKworCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV93cGFfc3VwcGxpY2FudCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworfQorCitwa2dfcG9zdGluc3Rfd3BhLXN1cHBsaWNhbnQgKCkgeworCSMgSWYgd2UncmUgb2ZmbGluZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzLgorCWlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCQlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorCWZpCisKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9maWxlc3lzdGVtcyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9maWxlc3lzdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZjNDFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zCkBAIC0wLDAgKzEsOCBAQAorZXh0NAorZXh0MworZXh0MgordmZhdAorZmF0CitidHJmcworbWluaXgKKyoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9mc3RhYiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9mc3RhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzlhMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiCkBAIC0wLDAgKzEsMTEgQEAKKyMgc3RvY2sgZnN0YWIgLSB5b3UgcHJvYmFibHkgd2FudCB0byBvdmVycmlkZSB0aGlzIHdpdGggYSBtYWNoaW5lIHNwZWNpZmljIG9uZQorCisvZGV2L3Jvb3QgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAxCitwcm9jICAgICAgICAgICAgICAgICAvcHJvYyAgICAgICAgICAgICAgICBwcm9jICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwCitkZXZwdHMgICAgICAgICAgICAgICAvZGV2L3B0cyAgICAgICAgICAgICBkZXZwdHMgICAgIG1vZGU9MDYyMCxnaWQ9NSAgICAgICAwICAwCit0bXBmcyAgICAgICAgICAgICAgICAvcnVuICAgICAgICAgICAgICAgICB0bXBmcyAgICAgIG1vZGU9MDc1NSxub2Rldixub3N1aWQsc3RyaWN0YXRpbWUgMCAgMAordG1wZnMgICAgICAgICAgICAgICAgL3Zhci92b2xhdGlsZSAgICAgICAgdG1wZnMgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMAorCisjIHVuY29tbWVudCB0aGlzIGlmIHlvdXIgZGV2aWNlIGhhcyBhIFNEL01NQy9UcmFuc2ZsYXNoIHNsb3QKKyMvZGV2L21tY2JsazBwMSAgICAgICAvbWVkaWEvY2FyZCAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzLHN5bmMsbm9hdXRvICAwICAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9ob3N0LmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaG9zdC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGMxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaG9zdC5jb25mCkBAIC0wLDAgKzEsMiBAQAorb3JkZXIgaG9zdHMsYmluZAorbXVsdGkgb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lucHV0cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjNGM4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjCkBAIC0wLDAgKzEsNjEgQEAKKyMgL2V0Yy9pbnB1dHJjIC0gZ2xvYmFsIGlucHV0cmMgZm9yIGxpYnJlYWRsaW5lCisjIFNlZSByZWFkbGluZSgzcmVhZGxpbmUpIGFuZCBgaW5mbyBybHVzZXJtYW4nIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIEJlIDggYml0IGNsZWFuLgorc2V0IGlucHV0LW1ldGEgb24KK3NldCBvdXRwdXQtbWV0YSBvbgorCisjIFRvIGFsbG93IHRoZSB1c2Ugb2YgOGJpdC1jaGFyYWN0ZXJzIGxpa2UgdGhlIGdlcm1hbiB1bWxhdXRzLCBjb21tZW50IG91dAorIyB0aGUgbGluZSBiZWxvdy4gSG93ZXZlciB0aGlzIG1ha2VzIHRoZSBtZXRhIGtleSBub3Qgd29yayBhcyBhIG1ldGEga2V5LAorIyB3aGljaCBpcyBhbm5veWluZyB0byB0aG9zZSB3aGljaCBkb24ndCBuZWVkIHRvIHR5cGUgaW4gOC1iaXQgY2hhcmFjdGVycy4KKworIyBzZXQgY29udmVydC1tZXRhIG9mZgorCisjIHRyeSB0byBlbmFibGUgdGhlIGFwcGxpY2F0aW9uIGtleXBhZCB3aGVuIGl0IGlzIGNhbGxlZC4gIFNvbWUgc3lzdGVtcworIyBuZWVkIHRoaXMgdG8gZW5hYmxlIHRoZSBhcnJvdyBrZXlzLgorIyBzZXQgZW5hYmxlLWtleXBhZCBvbgorCisjIHNlZSAvdXNyL3NoYXJlL2RvYy9iYXNoL2lucHV0cmMuYXJyb3dzIGZvciBvdGhlciBjb2RlcyBvZiBhcnJvdyBrZXlzCisKKyMgZG8gbm90IGJlbGwgb24gdGFiLWNvbXBsZXRpb24gCisjIHNldCBiZWxsLXN0eWxlIG5vbmUgCisKKyMgc29tZSBkZWZhdWx0cyAvIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBlbWFjcyBtb2RlCiskaWYgbW9kZT1lbWFjcworCisjIGFsbG93IHRoZSB1c2Ugb2YgdGhlIEhvbWUvRW5kIGtleXMKKyMgIlxlWzF+IjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlWzR+IjogZW5kLW9mLWxpbmUKKworIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBEZWxldGUvSW5zZXJ0IGtleXMKKyMgIlxlWzN+IjogZGVsZXRlLWNoYXIKKyMgIlxlWzJ+IjogcXVvdGVkLWluc2VydAorCisjIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHN0ZXAgdG8gdGhlIGJlZ2lubmluZy9lbmQgCisjIG9mIHRoZSBoaXN0b3J5CisjICJcZVs1fiI6IGJlZ2lubmluZy1vZi1oaXN0b3J5CisjICJcZVs2fiI6IGVuZC1vZi1oaXN0b3J5CisKKyMgYWx0ZXJuYXRlIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHNlYXJjaCB0aGUgaGlzdG9yeQorIyAiXGVbNX4iOiBoaXN0b3J5LXNlYXJjaC1iYWNrd2FyZAorIyAiXGVbNn4iOiBoaXN0b3J5LXNlYXJjaC1mb3J3YXJkCisKKyMgIyBtYXBwaW5ncyBmb3IgQ3RybC1sZWZ0LWFycm93IGFuZCBDdHJsLXJpZ2h0LWFycm93IGZvciB3b3JkIG1vdmluZworIyAiXGVbNUMiOiBmb3J3YXJkLXdvcmQKKyMgIlxlWzVEIjogYmFja3dhcmQtd29yZAorIyAiXGVcZVtDIjogZm9yd2FyZC13b3JkCisjICJcZVxlW0QiOiBiYWNrd2FyZC13b3JkCisKKyMgJGlmIHRlcm09cnh2dAorIyAiXGVbOH4iOiBlbmQtb2YtbGluZQorIyAkZW5kaWYKKworIyBmb3Igbm9uIFJIL0RlYmlhbiB4dGVybSwgY2FuJ3QgaHVydCBmb3IgUkgvREViaWFuIHh0ZXJtCisjICJcZU9IIjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlT0YiOiBlbmQtb2YtbGluZQorCisjIGZvciBmcmVlYnNkIGNvbnNvbGUKKyMgIlxlW0giOiBiZWdpbm5pbmctb2YtbGluZQorIyAiXGVbRiI6IGVuZC1vZi1saW5lCisKKyRlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZS5uZXQgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUubmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUubmV0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbGljZW5zZXMvR1BMLTIgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbGljZW5zZXMvR1BMLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzMxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMgpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9tb3RkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbnNzd2l0Y2guY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmYwM2QyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYKQEAgLTAsMCArMSwxOSBAQAorIyAvZXRjL25zc3dpdGNoLmNvbmYKKyMKKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIG9mIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIGZ1bmN0aW9uYWxpdHkuCisjIElmIHlvdSBoYXZlIHRoZSBgZ2xpYmMtZG9jJyBhbmQgYGluZm8nIHBhY2thZ2VzIGluc3RhbGxlZCwgdHJ5OgorIyBgaW5mbyBsaWJjICJOYW1lIFNlcnZpY2UgU3dpdGNoIicgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmlsZS4KKworcGFzc3dkOiAgICAgICAgIGNvbXBhdAorZ3JvdXA6ICAgICAgICAgIGNvbXBhdAorc2hhZG93OiAgICAgICAgIGNvbXBhdAorCitob3N0czogICAgICAgICAgZmlsZXMgZG5zCituZXR3b3JrczogICAgICAgZmlsZXMKKworcHJvdG9jb2xzOiAgICAgIGRiIGZpbGVzCitzZXJ2aWNlczogICAgICAgZGIgZmlsZXMKK2V0aGVyczogICAgICAgICBkYiBmaWxlcworcnBjOiAgICAgICAgICAgIGRiIGZpbGVzCisKK25ldGdyb3VwOiAgICAgICBuaXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjMjY4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCkBAIC0wLDAgKzEsMzYgQEAKKyMgL2V0Yy9wcm9maWxlOiBzeXN0ZW0td2lkZSAucHJvZmlsZSBmaWxlIGZvciB0aGUgQm91cm5lIHNoZWxsIChzaCgxKSkKKyMgYW5kIEJvdXJuZSBjb21wYXRpYmxlIHNoZWxscyAoYmFzaCgxKSwga3NoKDEpLCBhc2goMSksIC4uLikuCisKK1BBVEg9Ii91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCitFRElUT1I9InZpIgkJCSMgbmVlZGVkIGZvciBwYWNrYWdlcyBsaWtlIGNyb24sIGdpdC1jb21taXQKK3Rlc3QgLXogIiRURVJNIiAmJiBURVJNPSJ2dDEwMCIJIyBCYXNpYyB0ZXJtaW5hbCBjYXBhYi4gRm9yIHNjcmVlbiBldGMuCisKK2lmIFsgISAtZSAvZXRjL2xvY2FsdGltZSAtYSAhIC1lIC9ldGMvVFogXTsgdGhlbgorCVRaPSJVVEMiCQkjIFRpbWUgWm9uZS4gTG9vayBhdCBodHRwOi8vdGhlb3J5LnV3aW5uaXBlZy5jYS9nbnUvZ2xpYmMvbGliY18zMDMuaHRtbCAKKwkJCQkjIGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdG8gc2V0IHRoaXMgdG8geW91ciBsb2NhbCB0aW1lem9uZS4KKwlleHBvcnQgVFoKK2ZpCisKK2lmIFsgIiRIT01FIiA9ICJST09USE9NRSIgXTsgdGhlbgorICAgUEFUSD0kUEFUSDovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluCitmaQoraWYgWyAiJFBTMSIgXTsgdGhlbgorIyB3b3JrcyBmb3IgYmFzaCBhbmQgYXNoIChubyBvdGhlciBzaGVsbHMga25vd24gdG8gYmUgaW4gdXNlIGhlcmUpCisgICBQUzE9J1x1QFxoOlx3XCQgJworZmkKKworaWYgWyAtZCAvZXRjL3Byb2ZpbGUuZCBdOyB0aGVuCisgIGZvciBpIGluIC9ldGMvcHJvZmlsZS5kLyogOyBkbworICAgIC4gJGkKKyAgZG9uZQorICB1bnNldCBpCitmaQorCitpZiBbIC14IC91c3IvYmluL3Jlc2l6ZSBdO3RoZW4KKyAgL3Vzci9iaW4vcmVzaXplID4vZGV2L251bGwKK2ZpCisKK2V4cG9ydCBQQVRIIFBTMSBPUElFRElSIFFQRURJUiBRVERJUiBFRElUT1IgVEVSTQorCit1bWFzayAwMjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3JvdGF0aW9uIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3JvdGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjcwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24KQEAgLTAsMCArMSBAQAorMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5iYXNocmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlNjM2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjCkBAIC0wLDAgKzEsMTYgQEAKKyMgfi8uYmFzaHJjOiBleGVjdXRlZCBieSBiYXNoKDEpIGZvciBub24tbG9naW4gc2hlbGxzLgorCitleHBvcnQgUFMxPSdcaDpcd1wkICcKK3VtYXNrIDAyMgorCisjIFlvdSBtYXkgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgYGxzJyB0byBiZSBjb2xvcml6ZWQ6CisjIGV4cG9ydCBMU19PUFRJT05TPSctLWNvbG9yPWF1dG8nCisjIGV2YWwgYGRpcmNvbG9yc2AKKyMgYWxpYXMgbHM9J2xzICRMU19PUFRJT05TJworIyBhbGlhcyBsbD0nbHMgJExTX09QVElPTlMgLWwnCisjIGFsaWFzIGw9J2xzICRMU19PUFRJT05TIC1sQScKKyMKKyMgU29tZSBtb3JlIGFsaWFzIHRvIGF2b2lkIG1ha2luZyBtaXN0YWtlczoKKyMgYWxpYXMgcm09J3JtIC1pJworIyBhbGlhcyBjcD0nY3AgLWknCisjIGFsaWFzIG12PSdtdiAtaScKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZSBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk3OTNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMgfi8ucHJvZmlsZTogZXhlY3V0ZWQgYnkgQm91cm5lLWNvbXBhdGlibGUgbG9naW4gc2hlbGxzLgorCitpZiBbIC1mIH4vLmJhc2hyYyBdOyB0aGVuCisgIC4gfi8uYmFzaHJjCitmaQorCisjIHBhdGggc2V0IGJ5IC9ldGMvcHJvZmlsZQorIyBleHBvcnQgUEFUSAorCittZXNnIG4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGVsbHMgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hlbGxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjM5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hlbGxzCkBAIC0wLDAgKzEsMiBAQAorIyAvZXRjL3NoZWxsczogdmFsaWQgbG9naW4gc2hlbGxzCisvYmluL3NoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy91c2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmU3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKQEAgLTAsMCArMSwxNzggQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyBmaWxlcyBmb3IgdGhlIGJhc2Ugc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIGJhc2UtZmlsZXMgcGFja2FnZSBjcmVhdGVzIHRoZSBiYXNpYyBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2Yga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBzeXN0ZW0uIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjg5IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2VzL0dQTC0yO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKyMgUmVtb3ZlZCBhbGwgbGljZW5zZSByZWxhdGVkIHRhc2tzIGluIHRoaXMgcmVjaXBlIGFzIGxpY2Vuc2UuYmJjbGFzcyAKKyMgbm93IGRlYWxzIHdpdGggdGhpcy4gSW4gb3JkZXIgdG8gZ2V0IGFjY3VyYXRlIGxpY2Vuc2luZyBvbiB0byB0aGUgaW1hZ2U6CisjIFNldCBDT1BZX0xJQ19NQU5JRkVTVCB0byBqdXN0IGNvcHkganVzdCB0aGUgbGljZW5zZS5tYW5pZmVzdCB0byB0aGUgaW1hZ2UKKyMgRm9yIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGxpY2Vuc2UgdGV4dCBmb3IgZWFjaCBwYWNrYWdlOgorIyBTZXQgQ09QWV9MSUNfTUFOSUZFU1QgYW5kIENPUFlfTElDX0RJUlMKKworU1JDX1VSSSA9ICJmaWxlOi8vcm90YXRpb24gXAorICAgICAgICAgICBmaWxlOi8vbnNzd2l0Y2guY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tb3RkIFwKKyAgICAgICAgICAgZmlsZTovL2lucHV0cmMgXAorICAgICAgICAgICBmaWxlOi8vaG9zdC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2hlbGxzIFwKKyAgICAgICAgICAgZmlsZTovL2ZzdGFiIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVzeXN0ZW1zIFwKKyAgICAgICAgICAgZmlsZTovL2lzc3VlLm5ldCBcCisgICAgICAgICAgIGZpbGU6Ly9pc3N1ZSBcCisgICAgICAgICAgIGZpbGU6Ly91c2JkIFwKKyAgICAgICAgICAgZmlsZTovL3NoYXJlL2RvdC5iYXNocmMgXAorICAgICAgICAgICBmaWxlOi8vc2hhcmUvZG90LnByb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vbGljZW5zZXMvR1BMLTIgXAorICAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvY2Rpcl9hcHBlbmQgPSAiLyR7UH0iCitkaXJzMTc3NyA9ICIvdG1wICR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wIgorZGlyczI3NzUgPSAiIgorZGlyczc1NSA9ICIvYmluIC9ib290IC9kZXYgJHtzeXNjb25mZGlyfSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQgXAorICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3NrZWwgL2xpYiAvbW50IC9wcm9jICR7Uk9PVF9IT01FfSAvcnVuIC9zYmluIFwKKyAgICAgICAgICAgJHtwcmVmaXh9ICR7YmluZGlyfSAke2RvY2Rpcn0gL3Vzci9nYW1lcyAke2luY2x1ZGVkaXJ9IFwKKyAgICAgICAgICAgJHtsaWJkaXJ9ICR7c2JpbmRpcn0gJHtkYXRhZGlyfSBcCisgICAgICAgICAgICR7ZGF0YWRpcn0vY29tbW9uLWxpY2Vuc2VzICR7ZGF0YWRpcn0vZGljdCAke2luZm9kaXJ9IFwKKyAgICAgICAgICAgJHttYW5kaXJ9ICR7ZGF0YWRpcn0vbWlzYyAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9iYWNrdXBzICR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKKyAgICAgICAgICAgL3N5cyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9taXNjICR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wgXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlIFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS9sb2cgXAorICAgICAgICAgICAvaG9tZSAke3ByZWZpeH0vc3JjICR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwgXAorICAgICAgICAgICAvbWVkaWEiCisKK2RpcnM3NTUtbHNiID0gIi9zcnYgIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbCAke3ByZWZpeH0vbG9jYWwvYmluICR7cHJlZml4fS9sb2NhbC9nYW1lcyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbG9jYWwvaW5jbHVkZSAke3ByZWZpeH0vbG9jYWwvbGliICR7cHJlZml4fS9sb2NhbC9zYmluIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbC9zaGFyZSAke3ByZWZpeH0vbG9jYWwvc3JjIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9saWIvbG9jYWxlIgorZGlyczI3NzUtbHNiID0gIi92YXIvbWFpbCIKKwordm9sYXRpbGVzID0gImxvZyB0bXAiCitjb25mZmlsZXMgPSAiJHtzeXNjb25mZGlyfS9kZWJpYW5fdmVyc2lvbiAke3N5c2NvbmZkaXJ9L2hvc3QuY29uZiBcCisgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbnB1dHJjICR7c3lzY29uZmRpcn0vaXNzdWUgLyR7c3lzY29uZmRpcn0vaXNzdWUubmV0IFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisKKyMgQnkgZGVmYXVsdCB0aGUgaG9zdG5hbWUgaXMgdGhlIG1hY2hpbmUgbmFtZS4gSWYgdGhlIGhvc3RuYW1lIGlzIHVuc2V0IHRoZW4gYQorIyAvZXRjL2hvc3RuYW1lIGZpbGUgaXNuJ3Qgd3JpdHRlbiwgc3VpdGFibGUgZm9yIGVudmlyb25tZW50cyB3aXRoIGR5bmFtaWMKKyMgaG9zdG5hbWVzLgorIworIyBUaGUgaG9zdG5hbWUgY2FuIGJlIGNoYW5nZWQgb3V0c2lkZSBvZiB0aGlzIHJlY2lwZSBieSB1c2luZworIyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIm15LWhvc3QtbmFtZSIuCitob3N0bmFtZSA9ICIke01BQ0hJTkV9IgorCitCQVNFRklMRVNJU1NVRUlOU1RBTEwgPz0gImRvX2luc3RhbGxfYmFzZWZpbGVzaXNzdWUiCisKKyMgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgYmFzZS1maWxlcywgL3J1biB3YXMgYSBzb2Z0bGluayB0byAvdmFyL3J1biBhbmQgdGhlCisjIGRpcmVjdG9yeSB3YXMgbG9jYXRlZCBpbiAvdmFyL3ZvbGF0bGllL3J1bi4gIEFsc28sIC92YXIvbG9jayB3YXMgYSBzb2Z0bGluaworIyB0byAvdmFyL3ZvbGF0aWxlL2xvY2sgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgZGlyZWN0b3J5IHdhcyBsb2NhdGVkLiAgTm93LAorIyAvcnVuIGFuZCAvcnVuL2xvY2sgYXJlIHRoZSByZWFsIGRpcmVjdG9yaWVzLiAgSWYgd2UgYXJlIHVwZ3JhZGluZywgd2UgbWF5CisjIG5lZWQgdG8gcmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rcyBmaXJzdCBiZWZvcmUgd2UgY3JlYXRlIHRoZSBkaXJlY3Rvcmllcy4KKyMgT3RoZXJ3aXNlIHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gd2lsbCBmYWlsIGFuZCB3ZSB3aWxsIGhhdmUgY2lyY3VsYXIgc3ltYm9saWMKKyMgbGlua3MuCisjIAorcGtnX3ByZWluc3RfJHtQTn0gKCkgeworICAgICMhL2Jpbi9zaCAtZQorICAgIGlmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICAgICBpZiBbIC1oICIvdmFyL2xvY2siIF07IHRoZW4KKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICBybSAtZiAvdmFyL2xvY2sKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbIC1oICIvcnVuIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgcm0gLWYgL3J1bgorICAgICAgICBmaQorICAgIGZpICAgICAKK30KKworZG9faW5zdGFsbCAoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1fTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMxNzc3fTsgZG8KKwkJaW5zdGFsbCAtbSAxNzc3IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMyNzc1fTsgZG8KKwkJaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke3ZvbGF0aWxlc307IGRvCisJCWxuIC1zZiB2b2xhdGlsZS8kZCAke0R9JHtsb2NhbHN0YXRlZGlyfS8kZAorCWRvbmUKKworCWxuIC1zbmYgLi4vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCWxuIC1zbmYgLi4vcnVuL2xvY2sgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9jaworCisJJHtCQVNFRklMRVNJU1NVRUlOU1RBTEx9CisKKwlyb3RhdGlvbj1gY2F0ICR7V09SS0RJUn0vcm90YXRpb25gCisJaWYgWyAiJHJvdGF0aW9uIiAhPSAiMCIgXTsgdGhlbgorIAkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcm90YXRpb24gJHtEfSR7c3lzY29uZmRpcn0vcm90YXRpb24KKwlmaQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZnN0YWIgJHtEfSR7c3lzY29uZmRpcn0vZnN0YWIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9maWxlc3lzdGVtcyAke0R9JHtzeXNjb25mZGlyfS9maWxlc3lzdGVtcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3VzYmQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2JkCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvZmlsZSAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlCisJc2VkIC1pICdzI1JPT1RIT01FIyR7Uk9PVF9IT01FfSMnICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaGVsbHMgJHtEfSR7c3lzY29uZmRpcn0vc2hlbGxzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc2hhcmUvZG90LnByb2ZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8ucHJvZmlsZQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NoYXJlL2RvdC5iYXNocmMgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8uYmFzaHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5wdXRyYyAke0R9JHtzeXNjb25mZGlyfS9pbnB1dHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbnNzd2l0Y2guY29uZiAke0R9JHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3QuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21vdGQgJHtEfSR7c3lzY29uZmRpcn0vbW90ZAorCisJaWYgWyAiL3Vzci9iaW4iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJc2VkIC1pICJzLC91c3IvYmluL3Jlc2l6ZSwke2JpbmRpcn0vcmVzaXplLCIgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWZpCisKKwlsbiAtc2YgL3Byb2MvbW91bnRzICR7RH0ke3N5c2NvbmZkaXJ9L210YWIKK30KKworRElTVFJPX1ZFUlNJT05bdmFyZGVwc2V4Y2x1ZGVdICs9ICJEQVRFIgorZG9faW5zdGFsbF9iYXNlZmlsZXNpc3N1ZSAoKSB7CisJaWYgWyAiJHtob3N0bmFtZX0iIF07IHRoZW4KKwkJZWNobyAke2hvc3RuYW1lfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RuYW1lCisJZmkKKworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vaXNzdWUqICAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpZiBbIC1uICIke0RJU1RST19OQU1FfSIgXTsgdGhlbgorCQlwcmludGYgIiR7RElTVFJPX05BTUV9ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJcHJpbnRmICIke0RJU1RST19OQU1FfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQlpZiBbIC1uICIke0RJU1RST19WRVJTSU9OfSIgXTsgdGhlbgorCQkJcHJpbnRmICIke0RJU1RST19WRVJTSU9OfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCQlwcmludGYgIiR7RElTVFJPX1ZFUlNJT059ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisJCWZpCisJCXByaW50ZiAiXFxcbiBcXFxsXG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCWVjaG8gPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJZWNobyAiJWgiICAgID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQllY2hvID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorIAlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saW51eHN0ZGJhc2UoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorICAgICAgICBkb25lCisKKwlmb3IgZCBpbiAke2RpcnMyNzc1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorICAgICAgICBkb25lCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWRvYyAke1BOfSAke1BOfS1kZXYgJHtQTn0tZGJnIgorRklMRVNfJHtQTn0gPSAiLyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHtkYXRhZGlyfS9jb21tb24tbGljZW5zZXMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2ZzdGFiICR7QFsnJywgJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUnXVsoZC5nZXRWYXIoJ2hvc3RuYW1lJywgVHJ1ZSkgIT0gJycpXX0gJHtzeXNjb25mZGlyfS9zaGVsbHMiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vbW90ZCAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9hZGRfc2h1dGRvd24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9hZGRfc2h1dGRvd24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNTdkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKK1dlIG5lZWQgdG8gaGF2ZSBhIHNodXRkb3duIGdyb3VwIHRvIGFsbG93IHRoZSBzaHV0ZG93biBpY29uCit0byB3b3JrIGNvcnJlY3RseS4gQW55IHVzZXJzIHRoYXQgd2FudCB0byB1c2Ugc2h1dGRvd24gbGlrZQordGhlIHh1c2VyIHNob3VsZCBiZSBhZGRlZCB0byB0aGlzIGdyb3VwLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0zNiw1ICszNiw2IEBAIHNhc2w6Kjo0NToKKyBwbHVnZGV2Oio6NDY6Cisgc3RhZmY6Kjo1MDoKKyBnYW1lczoqOjYwOgorK3NodXRkb3duOio6NzA6CisgdXNlcnM6KjoxMDA6Cisgbm9ncm91cDoqOjY1NTM0OgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvZGlzYWJsZS1kb2NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvZGlzYWJsZS1kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzA4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRGlzYWJsZSBkb2N1bWVudGF0aW9uIGZvciBub3cgYXMgaXQgdXNlcyB0b29scyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorYnkgT0UtQ29yZS4gSXQgdXNlcyBzZ21sdG9vbHMgYW5kIHBvNGEuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJhc2UtcGFzc3dkLTMuNS4yOC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yOC5vcmlnL01ha2VmaWxlLmluCisrKysgYmFzZS1wYXNzd2QtMy41LjI4L01ha2VmaWxlLmluCitAQCAtMjUsMTMgKzI1LDEwIEBAIGdlbl9jb25maWd1cmUJPSBjb25maWcuY2FjaGUgY29uZmlnLnN0YXQKKyAJCSAgY29uZmRlZmhzLmggY29uZmlnLmggTWFrZWZpbGUKKyAKKyBhbGw6IHVwZGF0ZS1wYXNzd2QKKy0JJChNQUtFKSAtQyBkb2MgYWxsCistCSQoTUFLRSkgLUMgbWFuIGFsbAorIAorIGluc3RhbGw6IGFsbAorIAlta2RpciAtcCAkKERFU1RESVIpJChzYmluZGlyKQorIAkkKElOU1RBTEwpIHVwZGF0ZS1wYXNzd2QgJChERVNURElSKSQoc2JpbmRpcikvCistCSQoTUFLRSkgLUMgbWFuIGluc3RhbGwKKyAKKyB1cGRhdGUtcGFzc3dkLm86IHZlcnNpb24uaAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9pbnB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWJiY2FkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorQWRkIGFuIGlucHV0IGdyb3VwIGZvciB0aGUgL2Rldi9pbnB1dC8qIGRldmljZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGdyb3VwLm1hc3RlciB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0xMiw2ICsxMiw3IEBAIHV1Y3A6KjoxMDoKKyBtYW46KjoxMjoKKyBwcm94eToqOjEzOgorIGttZW06KjoxNToKKytpbnB1dDoqOjE5OgorIGRpYWxvdXQ6KjoyMDoKKyBmYXg6KjoyMToKKyB2b2ljZToqOjIyOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9iYXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9iYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTY5MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAordXNlIC9iaW4vc2ggaW5zdGVhZCBvZiAvYmluL2Jhc2gsIHNpbmNlIHRoZSBsYXR0ZXIgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbgorc29tZSBpbWFnZXMgc3VjaCBhcyBtaW5pbWFsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL2Jhc2gKKytyb290Oio6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vc2hhZG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyN2JmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaApAQCAtMCwwICsxLDE0IEBACityZW1vdmUgIioiIGZvciByb290IHNpbmNlIHdlIGRvbid0IGhhdmUgYSAvZXRjL3NoYWRvdyBzbyBmYXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL3NoCisrcm9vdDo6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZF8zLjUuMjkuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZF8zLjUuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYgpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJCYXNlIHN5c3RlbSBtYXN0ZXIgcGFzc3dvcmQvZ3JvdXAgZmlsZXMiCitERVNDUklQVElPTiA9ICJUaGUgbWFzdGVyIGNvcGllcyBvZiB0aGUgdXNlciBkYXRhYmFzZSBmaWxlcyAoL2V0Yy9wYXNzd2QgYW5kIC9ldGMvZ3JvdXApLiAgVGhlIHVwZGF0ZS1wYXNzd2QgdG9vbCBpcyBhbHNvIHByb3ZpZGVkIHRvIGtlZXAgdGhlIHN5c3RlbSBkYXRhYmFzZXMgc3luY2hyb25pemVkIHdpdGggdGhlc2UgbWFzdGVyIGZpbGVzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMy41LjM4IHJlcXVpcmVzIGNkZWJjb25mIGZvciB1cGRhdGUtcGFzc3dkIHV0aWxpdHkiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2RlYmlhbi8rYXJjaGl2ZS9wcmltYXJ5LytmaWxlcy8ke0JQTn1fJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9zaHV0ZG93bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9zaGFkb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5wdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1kb2NzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YmVjY2FjNDgwODNmZThhZTUwNDhhY2QwNjJlNTQyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGI2NjM4OGIyYzhlNDljMTU2OTI0MzlkMmJlZTYzYmNkZDRiYmJmN2E3ODJjN2Y2NGFjY2M1NTk4NmI2YTM2IgorCitpbmhlcml0IGF1dG90b29scworCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJiYXNlX3Bhc3N3ZF9zc3RhdGVfcG9zdGluc3QiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNzU1ICR7Qn0vdXBkYXRlLXBhc3N3ZCAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHttYW5kaXJ9L21hbjggJHtEfSR7bWFuZGlyfS9wbC9tYW44CisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9tYW4vdXBkYXRlLXBhc3N3ZC44ICR7RH0ke21hbmRpcn0vbWFuOC8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L21hbi91cGRhdGUtcGFzc3dkLnBsLjggXAorCQkke0R9JHttYW5kaXJ9L3BsL21hbjgvdXBkYXRlLXBhc3N3ZC44CisJZ3ppcCAtOSAke0R9JHttYW5kaXJ9L21hbjgvKiAke0R9JHttYW5kaXJ9L3BsL21hbjgvKgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkCisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNjQ0ICR7U30vcGFzc3dkLm1hc3RlciAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC8KKwlzZWQgLWkgJ3MjOi9yb290OiM6JHtST09UX0hPTUV9OiMnICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtcCAtbSA2NDQgJHtTfS9ncm91cC5tYXN0ZXIgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvCisKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkb2NkaXJ9LyR7QlBOfQorCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vZGViaWFuL2NoYW5nZWxvZyAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlnemlwIC05ICR7RH0ke2RvY2Rpcn0vJHtCUE59LyoKKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L1JFQURNRSAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L2RlYmlhbi9jb3B5cmlnaHQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vCit9CisKK2Jhc2VfcGFzc3dkX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIFN0YWdpbmcgZG9lcyBub3QgY29weSAke3N5c2NvbmZkaXJ9IGZpbGVzIGludG8gdGhlCisJCSMgdGFyZ2V0IHN5c3Jvb3QsIHNvIHdlIG5lZWQgdG8gZG8gc28gbWFudWFsbHkuIFdlCisJCSMgcHV0IHRoZXNlIGZpbGVzIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBzbyB0aGV5IGNhbgorCQkjIGJlIHVzZWQgYnkgcmVjaXBlcyB3aGljaCB1c2UgY3VzdG9tIHVzZXIvZ3JvdXAKKwkJIyBwZXJtaXNzaW9ucy4KKwkJIyBJbnN0YWxsIHBhc3N3ZC5tYXN0ZXIgYW5kIGdyb3VwLm1hc3RlciB0byBzeXNjb25mZGlyIGFuZCBtdgorCQkjIHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGF0b21pY2FsbHkgaW5zdGFsbC4KKwkJaW5zdGFsbCAtZCAtbSA3NTUgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfQorCQlmb3IgaSBpbiBwYXNzd2QgZ3JvdXA7IGRvCisJCQlpbnN0YWxsIC1wIC1tIDY0NCAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkLyRpLm1hc3RlciBcCisJCQkJJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS8KKwkJCW12ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkubWFzdGVyICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkKKwkJZG9uZQorCWZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgQWRkIGluIHRoZSBwcmVpbnN0IGZ1bmN0aW9uIGZvciAke1BOfQorICAgICMgV2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUgYXMgcHJpb3IgdG8gdGhpcywgcGFzc3dkL2dyb3VwLm1hc3RlcgorICAgICMgd291bGQgYmUgdW5hdmFpbGFibGUuIFdlIG5lZWQgdG8gY3JlYXRlIHRoZXNlIGZpbGVzIGF0IHByZWluc3QKKyAgICAjIHRpbWUgYmVmb3JlIHRoZSBmaWxlcyBmcm9tIHRoZSBwYWNrYWdlIG1heSBiZSBhdmFpbGFibGUsIGhlbmNlCisgICAgIyBzdG9yaW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpbGVzIGluIHRoZSBwcmVpbnN0IGRpcmVjdGx5LgorCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyIiksICdyJykKKyAgICBwYXNzd2QgPSAiIi5qb2luKGYucmVhZGxpbmVzKCkpCisgICAgZi5jbG9zZSgpCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9ncm91cC5tYXN0ZXIiKSwgJ3InKQorICAgIGdyb3VwID0gIiIuam9pbihmLnJlYWRsaW5lcygpKQorICAgIGYuY2xvc2UoKQorCisgICAgcHJlaW5zdCA9ICIiIiMhL2Jpbi9zaAorbWtkaXIgLXAgJEQke3N5c2NvbmZkaXJ9CitpZiBbICEgLWUgJEQke3N5c2NvbmZkaXJ9L3Bhc3N3ZCBdOyB0aGVuCitcdGNhdCA8PCAnRU9GJyA+ICREJHtzeXNjb25mZGlyfS9wYXNzd2QKKyIiIiArIHBhc3N3ZCArICIiIkVPRgorZmkKK2lmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vZ3JvdXAgXTsgdGhlbgorXHRjYXQgPDwgJ0VPRicgPiAkRCR7c3lzY29uZmRpcn0vZ3JvdXAKKyIiIiArIGdyb3VwICsgIiIiRU9GCitmaQorIiIiCisgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyR7UE59JywgcHJlaW5zdCkKK30KKworYWRkdGFzayBkb19wYWNrYWdlIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXVwZGF0ZSIKK0ZJTEVTXyR7UE59LXVwZGF0ZSA9ICIke3NiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke1BOfSIKKworcGtnX3Bvc3RpbnN0XyR7UE59LXVwZGF0ZSAoKSB7CisjIS9iaW4vc2gKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisJZXhpdCAwCitmaQorJHtzYmluZGlyfS91cGRhdGUtcGFzc3dkCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDhmOWZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYwpAQCAtMCwwICsxLDQxNiBAQAorU1VNTUFSWSA9ICJUaW55IHZlcnNpb25zIG9mIG1hbnkgY29tbW9uIFVOSVggdXRpbGl0aWVzIGluIGEgc2luZ2xlIHNtYWxsIGV4ZWN1dGFibGUiCitERVNDUklQVElPTiA9ICJCdXN5Qm94IGNvbWJpbmVzIHRpbnkgdmVyc2lvbnMgb2YgbWFueSBjb21tb24gVU5JWCB1dGlsaXRpZXMgaW50byBhIHNpbmdsZSBzbWFsbCBleGVjdXRhYmxlLiBJdCBwcm92aWRlcyBtaW5pbWFsaXN0IHJlcGxhY2VtZW50cyBmb3IgbW9zdCBvZiB0aGUgdXRpbGl0aWVzIHlvdSB1c3VhbGx5IGZpbmQgaW4gR05VIGZpbGV1dGlscywgc2hlbGx1dGlscywgZXRjLiBUaGUgdXRpbGl0aWVzIGluIEJ1c3lCb3ggZ2VuZXJhbGx5IGhhdmUgZmV3ZXIgb3B0aW9ucyB0aGFuIHRoZWlyIGZ1bGwtZmVhdHVyZWQgR05VIGNvdXNpbnM7IGhvd2V2ZXIsIHRoZSBvcHRpb25zIHRoYXQgYXJlIGluY2x1ZGVkIHByb3ZpZGUgdGhlIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSB0aGVpciBHTlUgY291bnRlcnBhcnRzLiBCdXN5Qm94IHByb3ZpZGVzIGEgZmFpcmx5IGNvbXBsZXRlIFBPU0lYIGVudmlyb25tZW50IGZvciBhbnkgc21hbGwgb3IgZW1iZWRkZWQgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYnVzeWJveC5uZXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5idXN5Ym94Lm5ldC8iCisKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgorCisjIGJ6aXAyIGFwcGxldCBpbiBidXN5Ym94IGlzIGJhc2VkIG9uIGxpZ2h0bHktbW9kaWZpZWQgYnppcDIgc291cmNlCisjIHRoZSBHUEwgaXMgdmVyc2lvbiAyIG9ubHkKK0xJQ0VOU0UgPSAiR1BMdjIgJiBiemlwMiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRlMTBkZTQ4NjQyYWI3NDMxOGU4OTNhNjExMDVhZmJiIgorCitTRUNUSU9OID0gImJhc2UiCisKKyMgV2hldGhlciB0byBzcGxpdCB0aGUgc3VpZCBhcHBzIGludG8gYSBzZXBlcmF0ZSBiaW5hcnkKK0JVU1lCT1hfU1BMSVRfU1VJRCA/PSAiMSIKKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgRVhUUkFfTERGTEFHUyA9ICIke0xERkxBR1N9IgorZXhwb3J0IEVYVFJBX09FTUFLRSArPSAiJ0xEPSR7Q0NMRH0nIgorCitQQUNLQUdFUyA9KyAiJHtQTn0taHR0cGQgJHtQTn0tdWRoY3BkICR7UE59LXVkaGNwYyAke1BOfS1zeXNsb2cgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitGSUxFU18ke1BOfS1odHRwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LWh0dHBkIC9zcnYvd3d3IgorRklMRVNfJHtQTn0tc3lzbG9nID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyogJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mKiAke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mKiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2xvZy5zZXJ2aWNlICR7c3lzY29uZmRpcn0vZGVmYXVsdC9idXN5Ym94LXN5c2xvZyIKK0ZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvbWRldiAke3N5c2NvbmZkaXJ9L21kZXYuY29uZiAke3N5c2NvbmZkaXJ9L21kZXYvKiIKK0ZJTEVTXyR7UE59LXVkaGNwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LXVkaGNwZCIKK0ZJTEVTXyR7UE59LXVkaGNwYyA9ICIke3N5c2NvbmZkaXJ9L3VkaGNwYy5kICR7ZGF0YWRpcn0vdWRoY3BjIgorRklMRVNfJHtQTn0taHdjbG9jayA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9od2Nsb2NrLnNoIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LWh0dHBkICR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGQgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitJTklUU0NSSVBUX05BTUVfJHtQTn0taHR0cGQgPSAiYnVzeWJveC1odHRwZCIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1od2Nsb2NrID0gImh3Y2xvY2suc2giCitJTklUU0NSSVBUX05BTUVfJHtQTn0tbWRldiA9ICJtZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tbWRldiA9ICJzdGFydCAwMyBTIC4iCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3lzbG9nID0gInN5c2xvZyIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS11ZGhjcGQgPSAiYnVzeWJveC11ZGhjcGQiIAorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXN5c2xvZyIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zeXNsb2cgPSAiYnVzeWJveC1zeXNsb2cuc2VydmljZSIKKworQ09ORkZJTEVTXyR7UE59LXN5c2xvZyA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59IgorQ09ORkZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9tZGV2LmNvbmYiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGMiCisKK2luaGVyaXQgY21sMSBzeXN0ZW1kIHVwZGF0ZS1yYy5kIHB0ZXN0CisKKyMgaW50ZXJuYWwgaGVscGVyCitkZWYgYnVzeWJveF9jZmcoZmVhdHVyZSwgdG9rZW5zLCBjbmYsIHJlbSk6CisJaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorCQl0b2tlbnMgPSBbdG9rZW5zXQorCXJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisJaWYgZmVhdHVyZToKKwkJY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCWVsc2U6CisJCWNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpOgorCWNuZiwgcmVtID0gKFtdLCBbXSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkVBVFVSRV9JUFY2JywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfTEZTJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUycsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbmxzJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0xPQ0FMRV9TVVBQT1JUJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNCcsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjYnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorCisjIFgsIFkgPSAke0BmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCl9CisjIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2l0aCBiaXRiYWtlLCB3b3JrYXJvdW5kOgorZGVmIGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKToKKwljbmYsIHJlbSA9IGZlYXR1cmVzX3RvX2J1c3lib3hfc2V0dGluZ3MoZCkKKwlyZXR1cm4gY25mCitkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCk6CisJY25mLCByZW0gPSBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpCisJcmV0dXJuIHJlbQorCitjb25maWdtYW5nbGUgPSAnL0NST1NTX0NPTVBJTEVSX1BSRUZJWC9kOyBcCisJCS9DT05GSUdfRVhUUkFfQ0ZMQUdTL2Q7IFwKKwkJJworT0VfRkVBVFVSRVMgOj0gIiR7QGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCl9IgorRE9fSVB2NCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgMSwgMCwgZCl9IgorRE9fSVB2NiA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgMSwgMCwgZCl9IgorCitweXRob24gKCkgeworICBpZiAiJHtPRV9ERUx9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKyAgaWYgIiR7T0VfRkVBVFVSRVN9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIERJU1RSTyBGRUFUVVJFUyQvYVxcXG4lc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbigoZC5leHBhbmQoIiR7T0VfRkVBVFVSRVN9Iikuc3BsaXQoIlxuIikpKSkpCisgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIENST1NTJC9hXFxcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKFsiQ09ORklHX0NST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisJCQkgICAgICAgIkNPTkZJR19FWFRSQV9DRkxBR1M9XCIke0NGTEFHU31cIiBcIiR7SE9TVF9DQ19BUkNIfVwiIgorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAgICkpCit9CisKK2RvX3ByZXBhcmVfY29uZmlnICgpIHsKKwlzZWQgLWUgJ3MjQERBVEFESVJAIyR7ZGF0YWRpcn0jZycgXAorCQk8ICR7V09SS0RJUn0vZGVmY29uZmlnID4gJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcvQ09ORklHX1NUQVRJQy9kJyAuY29uZmlnCisJZWNobyAiIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQiID4+IC5jb25maWcKKwlmb3IgaSBpbiAnQ1JPU1MnICdESVNUUk8gRkVBVFVSRVMnOyBkbyBlY2hvICIjIyMgJGkiOyBkb25lID4+IFwKKwkJJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vLmNvbmZpZworCWlmIHRlc3QgJHtET19JUHY0fSAtZXEgMCAmJiB0ZXN0ICR7RE9fSVB2Nn0gLWVxIDA7IHRoZW4KKwkgICMgZGlzYWJsZSBuZXR3b3JraW5nIGFwcGxldHMKKwkgIG12ICR7U30vLmNvbmZpZyAke1N9Ly5jb25maWcub2UtdG1wCisJICBhd2sgJ0JFR0lOe25ldD0wfQorCSAgL14jIE5ldHdvcmtpbmcgVXRpbGl0aWVzL3tuZXQ9MX0KKwkgIC9eIyQve2lmKG5ldCl7bmV0PW5ldCsxfX0KKwkgIHtpZihuZXQ9PTImJiQwICF+IC9eIy8mJiQxKXtwcmludCgiIyAiJDEiIGlzIG5vdCBzZXQiKX1lbHNle3ByaW50fX0nIFwKKwkJICAke1N9Ly5jb25maWcub2UtdG1wID4gJHtTfS8uY29uZmlnCisJZmkKKwlzZWQgLWkgJ3MvQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iL0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1iIi8nICR7U30vLmNvbmZpZworfQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKKworZG9fY29uZmlndXJlICgpIHsKKwlkb19wcmVwYXJlX2NvbmZpZworCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKK30KKworZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgLWEgeGBncmVwICJDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMPXkiIC5jb25maWdgID0geCBdOyB0aGVuCisJIyBzcGxpdCB0aGUgLmNvbmZpZyBpbnRvIHR3byBwYXJ0cywgYW5kIG1ha2UgdHdvIGJ1c3lib3ggYmluYXJpZXMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm9yaWcKKwkJb2VfcnVubWFrZSBidXN5Ym94LmNmZy5zdWlkCisJCW9lX3J1bm1ha2UgYnVzeWJveC5jZmcubm9zdWlkCisJCWZvciBpIGluIGBjYXQgYnVzeWJveC5jZmcuc3VpZCBidXN5Ym94LmNmZy5ub3N1aWRgOyBkbworCQkJZWNobyAiIyAkaSBpcyBub3Qgc2V0IiA+PiAuY29uZmlnLmRpc2FibGUuYXBwcworCQlkb25lCisJCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnLm9yaWcgLmNvbmZpZy5kaXNhYmxlLmFwcHMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm5vbmFwcHMKKwkJZm9yIHMgaW4gc3VpZCBub3N1aWQ7IGRvCisJCQljYXQgYnVzeWJveC5jZmcuJHMgfCB3aGlsZSByZWFkIGl0ZW07IGRvCisJCQkJZ3JlcCAtdyAiJGl0ZW0iIC5jb25maWcub3JpZworCQkJZG9uZSA+IC5jb25maWcuYXBwLiRzCisJCQltZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZy5ub25hcHBzIC5jb25maWcuYXBwLiRzCisJCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQkJbXYgYnVzeWJveF91bnN0cmlwcGVkIGJ1c3lib3guJHMKKwkJCW9lX3J1bm1ha2UgYnVzeWJveC5saW5rcworCQkJbXYgYnVzeWJveC5saW5rcyBidXN5Ym94LmxpbmtzLiRzCisJCWRvbmUKKwkJIyBjb3B5IC5jb25maWcub3JpZyBiYWNrIHRvIC5jb25maWcsIGJlY2F1c2UgdGhlIGluc3RhbGwgcHJvY2VzcyBtYXkgY2hlY2sgdGhpcyBmaWxlCisJCWNwIC5jb25maWcub3JpZyAuY29uZmlnCisJCSMgY2xlYW51cAorCQlybSAuY29uZmlnLm9yaWcgLmNvbmZpZy5hcHAuc3VpZCAuY29uZmlnLmFwcC5ub3N1aWQgLmNvbmZpZy5kaXNhYmxlLmFwcHMgLmNvbmZpZy5ub25hcHBzCisJZWxzZQorCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQljcCBidXN5Ym94X3Vuc3RyaXBwZWQgYnVzeWJveAorCQlvZV9ydW5tYWtlIGJ1c3lib3gubGlua3MKKwlmaQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpZiBbICIke3ByZWZpeH0iICE9ICIvdXNyIiBdOyB0aGVuCisJCXNlZCAtaSAiczpeL3Vzci86JHtwcmVmaXh9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKwlpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIvc2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9zYmluLzoke2Jhc2Vfc2JpbmRpcn0vOiIgYnVzeWJveC5saW5rcyoKKwlmaQorCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiL2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9iaW4vOiR7YmFzZV9iaW5kaXJ9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKwlpZiAhIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX0lORElWSURVQUw9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCSMgSW5zdGFsbCAvYmluL2J1c3lib3gsIGFuZCB0aGUgL2Jpbi9zaCBsaW5rIHNvIHRoZSBwb3N0aW5zdCBzY3JpcHQKKwkJIyBjYW4gcnVuLiBMZXQgdXBkYXRlLWFsdGVybmF0aXZlcyBoYW5kbGUgdGhlIHJlc3QuCisJCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgXTsgdGhlbgorCQkJaW5zdGFsbCAtbSA0NzU1ICR7Qn0vYnVzeWJveC5zdWlkICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveC5ub3N1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzLnN1aWQgJHtEfSR7c3lzY29uZmRpcn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3Mubm9zdWlkICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3gubm9zdWlkICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQkJZmkKKwkJCSMgS2VlcCBhIGRlZmF1bHQgYnVzeWJveCBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGludm9rZSBidXN5Ym94IGRpcmVjdGx5LgorCQkJIyBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciB0aGUgb24gZGV2aWNlIHVwZ3JhZGUuIEJlY2F1c2Ugd2Ugd2FudAorCQkJIyB0byB1c2UgdGhlIGJ1c3lib3ggY29tbWFuZCBpbiBwb3N0aW5zdC4KKwkJCWxuIC1zZiBidXN5Ym94Lm5vc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0vYnVzeWJveAorCQllbHNlCisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TVUlEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkJCWluc3RhbGwgLW0gNDc1NSAke0J9L2J1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQllbHNlCisJCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWZpCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L3NoCisJCQlmaQorCQkJIyBXZSBtYWtlIHRoaXMgc3ltbGluayBoZXJlIHRvIGVsaW1pbmF0ZSB0aGUgZXJyb3Igd2hlbiB1cGdyYWRpbmcgdG9nZXRoZXIKKwkJCSMgd2l0aCBidXN5Ym94LXN5c2xvZy4gV2l0aG91dCB0aGlzIHN5bWxpbmssIHRoZSBvcGtnIG1heSB0aGluayBvZiB0aGUKKwkJCSMgYnVzeWJveC5ub3N1aWQgYXMgb2Jzb2xldGUgYW5kIHJlbW92ZSBpdCwgcmVzdWx0aW5nIGluIGRlYWQgbGlua3MgbGlrZQorCQkJIyAvYmluL3NlZCAtPiAvYmluL2J1c3lib3gubm9zdWlkLiBUaGlzIHdpbGwgbWFrZSB1cGdyYWRpbmcgYnVzeWJveC1zeXNsb2cgZmFpbC4KKwkJCSMgVGhpcyBzeW1saW5rIHdpbGwgYmUgc2FmZWx5IGRlbGV0ZWQgaW4gcG9zdGluc3QsIHRodXMgbm8gbmVnYXRpdmUgZWZmZWN0LgorCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkCisJCWZpCisJZWxzZQorCQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9CisJCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfSAke0R9JHtiaW5kaXJ9ICR7RH0ke3NiaW5kaXJ9CisJCWNhdCBidXN5Ym94LmxpbmtzIHwgd2hpbGUgcmVhZCBGSUxFOyBkbworCQkJTkFNRT1gYmFzZW5hbWUgIiRGSUxFImAKKwkJCWluc3RhbGwgLW0gMDc1NSAiMF9saWIvJE5BTUUiICIke0R9JEZJTEUuJHtCUE59IgorCQlkb25lCisJCSMgYWRkIHN1aWQgYml0IHdoZXJlIG5lZWRlZAorCQlmb3IgaSBpbiBgZ3JlcCAtRSAiQVBQTEVULipCQl9TVUlEXygoTUFZQkV8UkVRVUlSRSkpIiBpbmNsdWRlL2FwcGxldHMuaCB8IGdyZXAgLXYgX0JCX1NVSURfRFJPUCB8IGN1dCAtZiAzIC1kICcoJyB8IGN1dCAtZiAxIC1kICcsJ2A7IGRvCisJCQlmaW5kICR7RH0gLW5hbWUgJGkuJHtCUE59IC1leGVjIGNobW9kIGErcyB7fSBcOworCQlkb25lCisJCWluc3RhbGwgLW0gMDc1NSAwX2xpYi9saWJidXN5Ym94LnNvLiR7UFZ9ICR7RH0ke2xpYmRpcn0vbGliYnVzeWJveC5zby4ke1BWfQorCQlsbiAtc2Ygc2guJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQlsbiAtc2YgbG4uJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9sbgorCQlsbiAtc2YgdGVzdC4ke0JQTn0gJHtEfSR7YmluZGlyfS90ZXN0CisJCWlmIFsgLWYgJHtEfS9saW51eHJjLiR7QlBOfSBdOyB0aGVuCisJCQltdiAke0R9L2xpbnV4cmMuJHtCUE59ICR7RH0vbGludXhyYworCQlmaQorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJZmkKKworCWlmIGdyZXAgLXEgIkNPTkZJR19TWVNMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zeXNsb2cgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZy4ke0JQTn0KKwkJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9zeXNsb2ctc3RhcnR1cC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59CisJCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59CisJZmkKKwlpZiBncmVwICJDT05GSUdfQ1JPTkQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtY3JvbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJZmkKKwlpZiBncmVwICJDT05GSUdfSFRUUEQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtaHR0cGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCQlpbnN0YWxsIC1kICR7RH0vc3J2L3d3dworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYnVzeWJveC11ZGhjcGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX0hXQ0xPQ0s9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2h3Y2xvY2suc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQQz15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3VkaGNwYworICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NpbXBsZS5zY3JpcHQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQvNTBkZWZhdWx0CisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQuc2NyaXB0ICR7RH0ke2RhdGFkaXJ9L3VkaGNwYy9kZWZhdWx0LnNjcmlwdAorCWZpCisJaWYgZ3JlcCAiQ09ORklHX0lORVREPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbmV0ZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvaW5ldGQuJHtCUE59CisJCXNlZCAtaSAiczovdXNyL3NiaW4vOiR7c2JpbmRpcn0vOiIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2luZXRkLiR7QlBOfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmV0ZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCisgICAgICAgIGlmIGdyZXAgIkNPTkZJR19NREVWPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbWRldiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbWRldgorICAgICAgICAgICAgICAgaWYgZ3JlcCAiQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L21kZXYuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tZGV2LmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tZGV2CisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ZpbmQtdG91Y2hzY3JlZW4uc2ggJHtEfSR7c3lzY29uZmRpcn0vbWRldgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2LW1vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYKKyAgICAgICAgICAgICAgIGZpCisJZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaWYgZ3JlcCAtcSAiQ09ORklHX1NZU0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKwkJPiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlCisgICAgICAgICAgICBpZiBbIC1mICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBdIDsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2J1c3lib3gtc3lzbG9nCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbG4gLXNmIC9kZXYvbnVsbCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNsb2cuc2VydmljZQorICAgICAgICBmaQorICAgICAgICBpZiBncmVwIC1xICJDT05GSUdfS0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gXAorCQk+ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2J1c3lib3gta2xvZ2Quc2VydmljZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIFJlbW92ZSB0aGUgc3lzdmluaXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzeXN0ZW1kIHN5c3RlbXMgdG8gYXZvaWQgY29uZnVzaW9uCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0KKyAgICBmaQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK0FMVEVSTkFUSVZFXyR7UE59LXN5c2xvZyArPSAic3lzbG9nLWNvbmYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWNvbmZdID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMtc3lzbG9nJyAlIChwbiksICcgc3lzbG9nLWluaXQnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctaW5pdCcsICclcy9pbml0LmQvc3lzbG9nJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpKSkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCAnc3lzbG9nLWluaXQnLCAnJXMvaW5pdC5kL3N5c2xvZy4lcycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ0JQTicsIFRydWUpKSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzLXN5c2xvZycgJSAocG4pLCAnIHN5c2xvZy1zdGFydHVwLWNvbmYnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkpKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYuJXMnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgICMgV2UgbmVlZCB0byBsb2FkIHRoZSBmdWxsIHNldCBvZiBidXN5Ym94IHByb3ZpZGVzIGZyb20gdGhlIC9ldGMvYnVzeWJveC5saW5rcworICAgICMgVXNlIHRoaXMgdG8gc2VlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIHdpdGggdGhlIHJpZ2h0IGluZm9ybWF0aW9uCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZWYgc2V0X2FsdGVybmF0aXZlX3ZhcnMobGlua3MsIHRhcmdldCk6CisgICAgICAgIGYgPSBvcGVuKCclcyVzJyAlIChkdmFyLCBsaW5rcyksICdyJykKKyAgICAgICAgZm9yIGFsdF9saW5rX25hbWUgaW4gZjoKKyAgICAgICAgICAgIGFsdF9saW5rX25hbWUgPSBhbHRfbGlua19uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGFsdF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShhbHRfbGlua19uYW1lKQorICAgICAgICAgICAgIyBNYXRjaCBjb3JldXRpbHMKKyAgICAgICAgICAgIGlmIGFsdF9uYW1lID09ICdbJzoKKyAgICAgICAgICAgICAgICBhbHRfbmFtZSA9ICdsYnJhY2tldCcKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAocG4pLCAnICcgKyBhbHRfbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIGFsdF9saW5rX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMlcycgJSAoZHZhciwgdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgdGFyZ2V0KQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvZXRjL2J1c3lib3gubGlua3MnICUgKGR2YXIpKToKKyAgICAgICAgc2V0X2FsdGVybmF0aXZlX3ZhcnMoIiR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcyIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94IikKKyAgICBlbHNlOgorICAgICAgICBzZXRfYWx0ZXJuYXRpdmVfdmFycygiJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzLm5vc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZCIpCisgICAgICAgIHNldF9hbHRlcm5hdGl2ZV92YXJzKCIke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Muc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94LnN1aWQiKQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCSMgVGhpcyBwYXJ0IG9mIGNvZGUgaXMgZGVkaWNhdGVkIHRvIHRoZSBvbiB0YXJnZXQgdXBncmFkZSBwcm9ibGVtLgorCSMgSXQncyBrbm93biB0aGF0IGlmIHdlIGRvbid0IG1ha2UgYXBwcm9wcmlhdGUgc3ltbGlua3MgYmVmb3JlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMsCisJIyB0aGVyZSB3aWxsIGJlIGVycm9ycyBpbmRpY2F0aW5nIG1pc3NpbmcgY29tbWFuZHMgc3VjaCBhcyAnc2VkJy4KKwkjIFRoZXNlIHN5bWxpbmtzIHdpbGwgbGF0ZXIgYmUgdXBkYXRlZCBieSB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzLgorCXRlc3QgLW4gMiA+IC9kZXYvbnVsbCB8fCBhbGlhcyB0ZXN0PSdidXN5Ym94IHRlc3QnCisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCQkjIFJlbW92ZSBidXN5Ym94Lm5vc3VpZCBpZiBpdCdzIGEgc3ltbGluaywgYmVjYXVzZSB0aGlzIHNpdHVhdGlvbiBpbmRpY2F0ZXMKKwkJIyB0aGF0IHdlJ3JlIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHRvIGEgb25lLWJpbmFyeSBidXN5Ym94LgorCQlpZiB0ZXN0IC1oICR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkOyB0aGVuCisJCQlybSAtZiAke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZAorCQlmaQorCQlmb3Igc3VmZml4IGluICIiICIubm9zdWlkIiAiLnN1aWQiOyBkbworCQkJaWYgdGVzdCAtZSAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4OyB0aGVuCisJCQkJd2hpbGUgcmVhZCBsaW5rOyBkbworCQkJCQlpZiB0ZXN0ICEgLWUgIiRsaW5rIjsgdGhlbgorCQkJCQkJY2FzZSAiJGxpbmsiIGluCisJCQkJCQkJLyovKi8qKQorCQkJCQkJCQl0bz0iLi4vLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvYmluLyopCisJCQkJCQkJCXRvPSJidXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvKi8qKQorCQkJCQkJCQl0bz0iLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCWVzYWMKKwkJCQkJCSMgd2UgY2FuIHVzZSBidXN5Ym94IGhlcmUgYmVjYXVzZSBldmVuIGlmIHdlIGFyZSB1c2luZyBzcGxpdHRlZCBidXN5Ym94CisJCQkJCQkjIHdlJ3ZlIG1hZGUgYSBzeW1saW5rIGZyb20gL2Jpbi9idXN5Ym94IHRvIC9iaW4vYnVzeWJveC5ub3N1aWQuCisJCQkJCQlidXN5Ym94IHJtIC1mICRsaW5rCisJCQkJCQlidXN5Ym94IGxuIC1zICR0byAkbGluaworCQkJCQlmaQorCQkJCWRvbmUgPCAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4CisJCQlmaQorCQlkb25lCisJZmkKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwkjIFRoaXMgaXMgc28geW91IGNhbiBtYWtlIGJ1c3lib3ggY29tbWl0IHN1aWNpZGUgLSByZW1vdmluZyBidXN5Ym94IHdpdGggbm8gb3RoZXIgcGFja2FnZXMKKwkjIHByb3ZpZGluZyBpdHMgZmlsZXMsIHRoaXMgd2lsbCBtYWtlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgd29yaywgYnV0IHRoZSB1cGRhdGUtcmMuZCBwYXJ0CisJIyBmb3Igc3lzbG9nLCBodHRwZCBhbmQvb3IgdWRoY3BkIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBubyBvdGhlciBwYWNrYWdlIHByb3ZpZGluZyBzaAorCXRtcGRpcj1gbWt0ZW1wIC1kIC90bXAvYnVzeWJveHJtLVhYWFhYWGAKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvWworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci90ZXN0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2hlYWQKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvc2gKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvYmFzZW5hbWUKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvZWNobworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9tdgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9sbgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9kaXJuYW1lCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3JtCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3NlZAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9zb3J0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2dyZXAKKwlleHBvcnQgUEFUSD0kUEFUSDokdG1wZGlyCit9CisKK3BrZ19wcmVybV8ke1BOfS1zeXNsb2cgKCkgeworCSMgcmVtb3ZlIHN5c2xvZworCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KKwkJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIHN0b3AKKwkJZmkKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OTc5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBkMjkxYzJmZGQ1Y2I4NjE2NjA1YzY3ZWNiZmIwNDI3NGZhMDk0MjQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBTdW4sIDcgSnVuIDIwMTUgMDI6MzI6MjMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY2hvd246IGZpeCBoZWxwIHRleHQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9ZDI5MWMyZmRkNWNiODYxNjYwNWM2N2VjYmZiMDQyNzRmYTA5NDI0Mi4KKworT25seSB3aGVuIERFU0tUT1AgaXMgZW5hYmxlZCwgY2hvd24gaGFzIC1MLCAtSCBhbmQgLVAgb3B0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb3JldXRpbHMvY2hvd24uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvcmV1dGlscy9jaG93bi5jIGIvY29yZXV0aWxzL2Nob3duLmMKK2luZGV4IGNiMDdiYmMuLjY3OWMwZDggMTAwNjQ0CistLS0gYS9jb3JldXRpbHMvY2hvd24uYworKysrIGIvY29yZXV0aWxzL2Nob3duLmMKK0BAIC0xMSw3ICsxMSw3IEBACisgLyogaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA0OTc1L3V0aWxpdGllcy9jaG93bi5odG1sICovCisgCisgLy91c2FnZTojZGVmaW5lIGNob3duX3RyaXZpYWxfdXNhZ2UKKy0vL3VzYWdlOiAgICAgICAiWy1SaExIUCJJRl9ERVNLVE9QKCJjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKysvL3VzYWdlOiAgICAgICAiWy1SaCJJRl9ERVNLVE9QKCJMSFBjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKyAvL3VzYWdlOiNkZWZpbmUgY2hvd25fZnVsbF91c2FnZSAiXG5cbiIKKyAvL3VzYWdlOiAgICAgICAiQ2hhbmdlIHRoZSBvd25lciBhbmQvb3IgZ3JvdXAgb2YgZWFjaCBGSUxFIHRvIE9XTkVSIGFuZC9vciBHUk9VUFxuIgorIC8vdXNhZ2U6ICAgICAiXG4JLVIJUmVjdXJzZSIKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ3MjliMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGE5Nzc3Nzg4OTMyODE1N2JiN2QwNmVjNjE4YmFkMTY3MTJhOWMzNDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVHVlLCAzIEZlYiAyMDE1IDEyOjExOjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlmY29uZmlnOiBmaXggZG91YmxlIGZyZWUgZmF0YWwgZXJyb3IgaW4gSU5FVF9zcHJpbnQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9YTk3Nzc3ODg5MzI4MTU3YmI3ZDA2ZWM2MThiYWQxNjcxMmE5YzM0NS4KKworV2hpbGUgSU5FVF9zcHJpbnQgb3IgSU5FVDZfc3ByaW50IGlzIGNhbGxlZCBjaXJjdWxhcmx5IGJ5IGtlZXBpbmcKK2lmY29uZmlnaW5nLCBzYXAtPnNhX2ZhbWlseSB3b3VsZCBiZSBjbGVhbmVkIGJ5IG90aGVyIHBhcmFsbGVsIHByb2Nlc3Nlcworc3VjaCBhcyBkaGNsaWVudCBzb21ldGltZXMsIGFuZCB0aGVuIHRoZXJlIHdvdWxkIGJlIGEgZG91YmxlIGZyZWUgZXJyb3IKK2xpa2UgdGhlIGZvbGxvd2luZzoKKworICAqKiogZ2xpYmMgZGV0ZWN0ZWQgKioqIGlmY29uZmlnOiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uIChmYXN0dG9wKTogMHgwMDBhNjAwOCAqKioKKyAgPT09PT09PSBCYWNrdHJhY2U6ID09PT09PT09PQorICAvbGliL2xpYmMuc28uNigrMHg2YmM4NClbMHg0MDEzM2M4NF0KKyAgL2xpYi9saWJjLnNvLjYoY2ZyZWUrMHg5NClbMHg0MDEzODY4NF0KKyAgaWZjb25maWdbMHgxYzQ2MF0KKyAgaWZjb25maWdbMHgxYzZhMF0KKyAgaWZjb25maWdbMHgxY2NmNF0KKyAgaWZjb25maWdbMHgxODdjOF0KKyAgaWZjb25maWdbMHhkNTQ0XQorICBpZmNvbmZpZ1sweGQ1ZGNdCisgIGlmY29uZmlnWzB4ZGNhOF0KKyAgL2xpYi9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHgxMTApWzB4NDAwZGYyNThdCisgID09PT09PT0gTWVtb3J5IG1hcDogPT09PT09PT0KKyAgMDAwMDgwMDAtMDAwOWMwMDAgci14cCAwMDAwMDAwMCAxZjowNSA0NDQzMjggICAgIC9iaW4vYnVzeWJveAorICAwMDBhMzAwMC0wMDBhNDAwMCBydy1wIDAwMDkzMDAwIDFmOjA1IDQ0NDMyOCAgICAgL2Jpbi9idXN5Ym94CisKK1RoaXMgcGF0Y2ggbW92ZWQgZnJlZSgpIHR3byBsaW5lcyBkb3duIHRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBuZXR3b3JraW5nL2ludGVyZmFjZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMgYi9uZXR3b3JraW5nL2ludGVyZmFjZS5jCitpbmRleCBiZjdkMmIxLi5iMDU3MmQwIDEwMDY0NAorLS0tIGEvbmV0d29ya2luZy9pbnRlcmZhY2UuYworKysrIGIvbmV0d29ya2luZy9pbnRlcmZhY2UuYworQEAgLTkxLDkgKzkxLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUX3NwcmludChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50IG51bWVyaWMpCisgeworIAlzdGF0aWMgY2hhciAqYnVmZjsgLyogZGVmYXVsdHMgdG8gTlVMTCAqLworIAorLQlmcmVlKGJ1ZmYpOworIAlpZiAoc2FwLT5zYV9mYW1pbHkgPT0gMHhGRkZGIHx8IHNhcC0+c2FfZmFtaWx5ID09IDApCisgCQlyZXR1cm4gIltOT05FIFNFVF0iOworKwlmcmVlKGJ1ZmYpOworIAlidWZmID0gSU5FVF9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luICopIHNhcCwgbnVtZXJpYywgMHhmZmZmZmYwMCk7CisgCXJldHVybiBidWZmOworIH0KK0BAIC0xNzMsOSArMTczLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUNl9zcHJpbnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCBudW1lcmljKQorIHsKKyAJc3RhdGljIGNoYXIgKmJ1ZmY7CisgCistCWZyZWUoYnVmZik7CisgCWlmIChzYXAtPnNhX2ZhbWlseSA9PSAweEZGRkYgfHwgc2FwLT5zYV9mYW1pbHkgPT0gMCkKKyAJCXJldHVybiAiW05PTkUgU0VUXSI7CisrCWZyZWUoYnVmZik7CisgCWJ1ZmYgPSBJTkVUNl9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYXAsIG51bWVyaWMpOworIAlyZXR1cm4gYnVmZjsKKyB9CistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTJkYmNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgY29weSBjb21taXQgbWVzc2FnZSBmcm9tIE9FIGFzIHRoZSBwYXRjaCBjb21tZW50OgorIyAgICBjb21taXQgOThjMjQyOTFhYTE2NWY1MzQyM2MyN2FlMDMzODMxY2UwYjNiYjY3NgorIyAgICBBdXRob3I6IFJvbWFuIEkgS2hpbW92IDxraGltb3ZAYWx0ZWxsLnJ1PgorIyAgICBEYXRlOiAgIFRodSBNYXIgMjYgMjM6MDM6NTggMjAwOSArMDAwMAorIworIyAgICBidXN5Ym94OiB1cGRhdGUgYXBwbGV0bGliIGRlcGVuZGVuY3kgcGF0Y2gKKyMgICAgCisjICAgIFByZXZpb3VzIHZlcnNpb24gc3RpbGwgZmFpbGVkIGZyb20gdGltZSB0byB0aW1lIG9uIGNsZWFuLXN0YXJ0IGJ1aWxkcworIyAgICB3aXRoIDQgYml0YmFrZSB0aHJlYWRzIGFuZCAnLWoxNicuIEJ1aWxkaW5nIGJ1c3lib3ggYXMgc29sZSB0YXJnZXQgd29ya2VkCisjICAgIHdlbGwuCisjICAgIAorIyAgICBUaGUgcmVhc29uIGlzIHRoYXQgcHJldmlvdXMgdmVyc2lvbiBpbnRyb2R1Y2VkIGEgcmFjZSBiZXR3ZWVuIGFwcGxldHMgbWFrZQorIyAgICBwcm9jZXNzZXMgc3Bhd25lZCBmcm9tIHRvcC1sZXZlbCBNYWtlZmlsZSBhbmQgZnJvbSBsaWJiYiBNYWtlZmlsZS4KKyMgICAgCisjICAgIEZpeCBpdCB3aXRoIGhpZ2gtbGV2ZWwgZGVwZW5kZW5jeSB0aGF0IGRvZXNuJ3QgY3JlYXRlIHJhY2VzLgorIyAgICAKKyMgICAgU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisjCisjIGFib3ZlIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTA2CisKK0luZGV4OiBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4xMy4yLm9yaWcvTWFrZWZpbGUJMjAwOS0wMy0xOSAxNTo0NDozNy40MTkyNzAyNjUgKzAzMDAKKysrKyBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQkyMDA5LTAzLTE5IDE1OjQ1OjU3LjczNzUyMTI5NiArMDMwMAorQEAgLTQ3MSw2ICs0NzEsMTAgQEAKKyAJCXV0aWwtbGludXgvIFwKKyAJCXV0aWwtbGludXgvdm9sdW1lX2lkLyBcCisgCisrIyBMaWIgaW50ZXJkZXBzCisrIyBsaWJiYiB1c2VzIGhlYWRlcnMgZ2VuZXJhdGVkIGluIGFwcGxldHMKKytsaWJiYjogYXBwbGV0cworKworIGVuZGlmICMgS0JVSUxEX0VYVE1PRAorIAorIGlmZXEgKCQoZG90LWNvbmZpZyksMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTg2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb206IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDMgTWFyIDIwMTMgMTI6MzE6NDAgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWVudWNvbmZpZyxjaGVjay1seGRpYWdsb2cuc2g6IEFsbG93IHNwZWNpZmljYXRpb24gb2YgbmN1cnNlcyBsb2NhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitbIGJhc2VkIG9uOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMy8zLzMvMTAzIF0KKworVGhpcyBwYXRjaCBzeW5jcyB1cCB3aXRoIHRoZSB3YXkgdGhlIG1lbnVjb25maWcgbmN1cnNlcyAvIGN1cnNlcworaXMgZGV0ZWN0ZWQgYW5kIHRoZSBIT1NUX0VYVFJBQ0ZMQUdTIHdvcmtzIGluIHRoZSBMaW51eCBrZXJuZWwKK2FuZCBpdCBhbGxvd3MgdGhlIG1lbnVjb25maWcgdG8gd29yayB3aXRoIGEgc3lzcm9vdCB2ZXJzaW9uCitvZiB0aGUgY3Vyc2VzIGxpYnJhcmllcy4KKworLS0tCisKK0luIHNvbWUgY3Jvc3MgYnVpbGQgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QgYnVpbGQKK2Vudmlyb25tZW50IGl0IHByb3ZpZGVzIGFuIG5jdXJzZXMgbGlicmFyeSB0aGF0IGlzIGNvbXBpbGVkCitkaWZmZXJlbnRseSB0aGFuIHRoZSBob3N0J3MgdmVyc2lvbi4gIFRoaXMgY2F1c2VzIGRpc3BsYXkgY29ycnVwdGlvbgorcHJvYmxlbXMgd2hlbiB0aGUgaG9zdCdzIGN1cnNlcyBpbmNsdWRlcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQoraW5jbHVkZXMgZnJvbSB0aGUgcHJvdmlkZWQgY29tcGlsZXIgYXJlIG92ZXJyaWRkZW4uICBUaGVyZSBpcyBhIHNlY29uZAorY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBjdXJzZXMgbGlicmFyaWVzIGF0IGFsbCBvbiB0aGUgaG9zdCBzeXN0ZW0gYW5kCittZW51Y29uZmlnIHdpbGwganVzdCBmYWlsIGVudGlyZWx5LgorCitUaGUgc29sdXRpb24gaXMgc2ltcGx5IHRvIGFsbG93IGFuIG92ZXJyaWRlIHZhcmlhYmxlIGluCitjaGVjay1seGRpYWxvZy5zaCBmb3IgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QuICBBZGRpbmcKK2EgQ1JPU1NfQ1VSU0VTX0xJQiBhbmQgQ1JPU1NfQ1VSU0VTX0lOQyBzb2x2ZXMgdGhlIGlzc3VlIGFuZCBhbGxvd2luZworY29tcGlsaW5nIGFuZCBsaW5raW5nIGFnYWluc3QgdGhlIHJpZ2h0IGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK2NjOiBNaWNoYWwgTWFyZWsgPG1tYXJla0BzdXNlLmN6PgorY2M6IGxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKKy0tLQorIHNjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZSAgICAgICAgICB8ICAgIDIgKy0KKyBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCisrKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKK0BAIC00LDYgKzQsMTAgQEAKKyAjIFdoYXQgbGlicmFyeSB0byBsaW5rCisgbGRmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19MSUIiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19MSUIiCisrCQlleGl0CisrCWZpCisgCWZvciBleHQgaW4gc28gYSBkeWxpYiA7IGRvCisgCQlmb3IgbGliIGluIG5jdXJzZXN3IG5jdXJzZXMgY3Vyc2VzIDsgZG8KKyAJCQkkY2MgLXByaW50LWZpbGUtbmFtZT1saWIke2xpYn0uJHtleHR9IHwgZ3JlcCAtcSAvCitAQCAtMTksNiArMjMsMTAgQEAgbGRmbGFncygpCisgIyBXaGVyZSBpcyBuY3Vyc2VzLmg/CisgY2NmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19JTkMiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19JTkMiCisrCQlleGl0CisrCWZpCisgCWlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuCisgCQllY2hvICctSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyAtRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IicKKyAJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVuCistLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKKysrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZQorQEAgLTUsNyArNSw3IEBAIGNoZWNrLWx4ZGlhbG9nICA6PSAkKHNyY3RyZWUpLyQoc3JjKS9jaGUKKyAKKyAjIFVzZSByZXVyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlcyBzbyB3ZSBkbyBub3QgY2FsbCBnY2MgdW5sZXNzCisgIyB3ZSByZWFsbHkgbmVlZCB0byBkbyBzby4gKERvIG5vdCBjYWxsIGdjYyBhcyBwYXJ0IG9mIG1ha2UgbXJwcm9wZXIpCistSE9TVF9FWFRSQUNGTEFHUyA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1jY2ZsYWdzKQorK0hPU1RfRVhUUkFDRkxBR1MgKz0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCisgSE9TVF9MT0FETElCRVMgICA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1sZGZsYWdzICQoSE9TVENDKSkKKyAKKyBIT1NUX0VYVFJBQ0ZMQUdTICs9IC1ETE9DQUxFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5Y2UzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSA1MzYyNmNkMDZhM2VmMDVlZDg0N2RhZWE4MDJlZjBhYTk2NjFjYWE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kZXJzIERhcmFuZGVyIDxhbmRlcnNAY2hhcmdlc3Rvcm0uc2U+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMDg6NTE6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBhIG5ldyBvcHRpb24gLUQgdG8gdGhlIHVkaGNwYyBjbGllbnQgdGhhdCBhbGxvd3MgZm9yCitkaGNwIHJlbmV3YWwgdG8gb2NjdXIgd2l0aG91dCBoYXZpbmcgdG8gZG93biB0aGUgaW50ZXJmYWNlCitpbiB0aGUgcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogR3JlZyBNb2ZmYXR0IDxncmVnLm1vZmZhdHRAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCB0byBsYXRlc3QgQnVzeWJveCAxLjE3LjMKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOC40CitvcHRpb24gc3BlYyBpcyBjaGFuZ2VkCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOS4zCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBEYXJhbmRlciA8YW5kZXJzQGNoYXJnZXN0b3JtLnNlPgorCitGaXhlZCBvcHRpb25zIC1iLCAtYSBhbmQgLVAuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CistLS0KKyBuZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogYnVzeWJveC0xLjIwLjIvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIwLjIub3JpZy9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKKysrKyBidXN5Ym94LTEuMjAuMi9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKK0BAIC0yOSw2ICsyOSw5IEBACisgI2luY2x1ZGUgPG5ldHBhY2tldC9wYWNrZXQuaD4KKyAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisgCisrLyogb3B0aW9uIHdoZXRoZXIgdG8gZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gcmVjb25maWd1cmluZyAqLworK3N0YXRpYyBpbnQgYWxsb3dfZGVjb25maWcgPSAxOworKworIC8qICJzdHJ1Y3QgY2xpZW50X2NvbmZpZ190IGNsaWVudF9jb25maWciIGlzIGluIGJiX2NvbW1vbl9idWZzaXoxICovCisgCisgCitAQCAtODEsOCArODQsOSBAQCBlbnVtIHsKKyAJT1BUX3ggPSAxIDw8IDE4LAorIAlPUFRfZiA9IDEgPDwgMTksCisgCU9QVF9CID0gMSA8PCAyMCwKKysJT1BUX0QgPSAxIDw8IDIxLAorIC8qIFRoZSByZXN0IGhhcyB2YXJpYWJsZSBiaXQgcG9zaXRpb25zLCBuZWVkIHRvIGJlIGNsZXZlciAqLworLQlPUFRCSVRfQiA9IDIwLAorKwlPUFRCSVRfRCA9IDIxLAorIAlVU0VfRk9SX01NVSggICAgICAgICAgICAgT1BUQklUX2IsKQorIAlJRl9GRUFUVVJFX1VESENQQ19BUlBJTkcoT1BUQklUX2EsKQorIAlJRl9GRUFUVVJFX1VESENQX1BPUlQoICAgT1BUQklUX1AsKQorQEAgLTEwNDAsNyArMTA0NCw4IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1fcmVuZXcodm9pZCkKKyAJCXN0YXRlID0gUkVORVdfUkVRVUVTVEVEOworIAkJYnJlYWs7CisgCWNhc2UgUkVORVdfUkVRVUVTVEVEOiAvKiBpbXBhdGllbnQgYXJlIHdlPyBmaW5lLCBzcXVhcmUgMSAqLworLQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAljYXNlIFJFUVVFU1RJTkc6CisgCWNhc2UgUkVMRUFTRUQ6CisgCQljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CitAQCAtMTA2NCw3ICsxMDY5LDggQEAgc3RhdGljIHZvaWQgcGVyZm9ybV9yZWxlYXNlKHVpbnQzMl90IHNlcgorIAkJYmJfaW5mb19tc2coIlVuaWNhc3RpbmcgYSByZWxlYXNlIG9mICVzIHRvICVzIiwKKyAJCQkJaW5ldF9udG9hKHRlbXBfYWRkciksIGJ1ZmZlcik7CisgCQlzZW5kX3JlbGVhc2Uoc2VydmVyX2FkZHIsIHJlcXVlc3RlZF9pcCk7IC8qIHVuaWNhc3QgKi8KKy0JCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJfQorIAliYl9pbmZvX21zZygiRW50ZXJpbmcgcmVsZWFzZWQgc3RhdGUiKTsKKyAKK0BAIC0xMjE1LDcgKzEyMjEsNyBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCS8qIE8seDogbGlzdDsgLVQsLXQsLUEgdGFrZSBudW1lcmljIHBhcmFtICovCisgCW9wdF9jb21wbGVtZW50YXJ5ID0gIk86Ong6OlQrOnQrOkErIiBJRl9VREhDUF9WRVJCT1NFKCI6dnYiKSA7CisgCUlGX0xPTkdfT1BUUyhhcHBsZXRfbG9uZ19vcHRpb25zID0gdWRoY3BjX2xvbmdvcHRzOykKKy0Jb3B0ID0gZ2V0b3B0MzIoYXJndiwgIkNWOkg6aDpGOmk6bnA6cVJyOnM6VDp0OlNBOk86b3g6ZkIiCisrCW9wdCA9IGdldG9wdDMyKGFyZ3YsICJDVjpIOmg6RjppOm5wOnFScjpzOlQ6dDpTQTpPOm94OmZCRCIKKyAJCVVTRV9GT1JfTU1VKCJiIikKKyAJCUlGX0ZFQVRVUkVfVURIQ1BDX0FSUElORygiYSIpCisgCQlJRl9GRUFUVVJFX1VESENQX1BPUlQoIlA6IikKK0BAIC0xMzE2LDYgKzEzMjIsOSBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQlsb2dtb2RlIHw9IExPR01PREVfU1lTTE9HOworIAl9CisgCisrCWlmIChvcHQgJiBPUFRfRCkKKysJCWFsbG93X2RlY29uZmlnID0gMDsKKysKKyAJLyogTWFrZSBzdXJlIGZkIDAsMSwyIGFyZSBvcGVuICovCisgCWJiX3Nhbml0aXplX3N0ZGlvKCk7CisgCS8qIEVxdWl2YWxlbnQgb2YgZG9pbmcgYSBmZmx1c2ggYWZ0ZXIgZXZlcnkgXG4gKi8KK0BAIC0xMzMwLDcgKzEzMzksOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCXNyYW5kKG1vbm90b25pY191cygpKTsKKyAKKyAJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKKy0JdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworIAlwYWNrZXRfbnVtID0gMDsKKyAJdGltZW91dCA9IDA7CitAQCAtMTQ4NCw3ICsxNDk0LDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJCQl9CisgCQkJCS8qIFRpbWVkIG91dCwgZW50ZXIgaW5pdCBzdGF0ZSAqLworIAkJCQliYl9pbmZvX21zZygiTGVhc2UgbG9zdCwgZW50ZXJpbmcgaW5pdCBzdGF0ZSIpOworLQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQljbGllbnRfY29uZmlnLmZpcnN0X3NlY3MgPSAwOyAvKiBtYWtlIHNlY3MgZmllbGQgY291bnQgZnJvbSAwICovCisgCQkJCS8qdGltZW91dCA9IDA7IC0gYWxyZWFkeSBpcyAqLworQEAgLTE2NjcsNyArMTY3OCw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCQkJCQlzZW5kX2RlY2xpbmUoLyp4aWQsKi8gc2VydmVyX2FkZHIsIHBhY2tldC55aWFkZHIpOworIAorIAkJCQkJCWlmIChzdGF0ZSAhPSBSRVFVRVNUSU5HKQorLQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQkJCWNsaWVudF9jb25maWcuZmlyc3Rfc2VjcyA9IDA7IC8qIG1ha2Ugc2VjcyBmaWVsZCBjb3VudCBmcm9tIDAgKi8KK0BAIC0xNzExLDcgKzE3MjMsOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQkJCWJiX2luZm9fbXNnKCJSZWNlaXZlZCBESENQIE5BSyIpOworIAkJCQl1ZGhjcF9ydW5fc2NyaXB0KCZwYWNrZXQsICJuYWsiKTsKKyAJCQkJaWYgKHN0YXRlICE9IFJFUVVFU1RJTkcpCistCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJc2xlZXAoMyk7IC8qIGF2b2lkIGV4Y2Vzc2l2ZSBuZXR3b3JrIHRyYWZmaWMgKi8KKyAJCQkJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWRmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA1NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBCdXN5Ym94IHZlcnNpb246IDEuMjMuMgorIyBUaHUgSnVsIDMwIDExOjAwOjAwIDIwMTUKKyMKK0NPTkZJR19IQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEJ1c3lib3ggU2V0dGluZ3MKKyMKKworIworIyBHZW5lcmFsIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFU0tUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRVhUUkFfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQ0xVREVfU1VTdjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX1BPUlRBQkxFX0NPREUgaXMgbm90IHNldAorQ09ORklHX1BMQVRGT1JNX0xJTlVYPXkKK0NPTkZJR19GRUFUVVJFX0JVRkZFUlNfVVNFX01BTExPQz15CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fT05fU1RBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX0lOX0JTUyBpcyBub3Qgc2V0CitDT05GSUdfU0hPV19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9OT19VU1IgaXMgbm90IHNldAorIyBDT05GSUdfTE9DQUxFX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfVVNJTkdfTE9DQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVU5JQ09ERV9JTl9FTlYgaXMgbm90IHNldAorQ09ORklHX1NVQlNUX1dDSEFSPTAKK0NPTkZJR19MQVNUX1NVUFBPUlRFRF9XQ0hBUj0wCisjIENPTkZJR19VTklDT0RFX0NPTUJJTklOR19XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9XSURFX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX0JJRElfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX05FVVRSQUxfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9QUkVTRVJWRV9CUk9LRU4gaXMgbm90IHNldAorIyBDT05GSUdfUEFNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9TRU5ERklMRT15CitDT05GSUdfTE9OR19PUFRTPXkKK0NPTkZJR19GRUFUVVJFX0RFVlBUUz15CisjIENPTkZJR19GRUFUVVJFX0NMRUFOX1VQIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VUTVA9eQorIyBDT05GSUdfRkVBVFVSRV9XVE1QIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1BJREZJTEU9eQorQ09ORklHX1BJRF9GSUxFX1BBVEg9Ii92YXIvcnVuIgorQ09ORklHX0ZFQVRVUkVfU1VJRD15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJRz15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJR19RVUlFVD15CisjIENPTkZJR19TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0FQUExFVFMgaXMgbm90IHNldAorQ09ORklHX0JVU1lCT1hfRVhFQ19QQVRIPSIvcHJvYy9zZWxmL2V4ZSIKK0NPTkZJR19GRUFUVVJFX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9IQVZFX1JQQz15CisKKyMKKyMgQnVpbGQgT3B0aW9ucworIworIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRSBpcyBub3Qgc2V0CisjIENPTkZJR19OT01NVSBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9MSUJCVVNZQk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIQVJFRF9CVVNZQk9YIGlzIG5vdCBzZXQKK0NPTkZJR19MRlM9eQorIyBDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNST09UPSIiCisjIENPTkZJR19FWFRSQV9DRkxBR1MgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0xERkxBR1M9IiIKK0NPTkZJR19FWFRSQV9MRExJQlM9IiIKKworIworIyBEZWJ1Z2dpbmcgT3B0aW9ucworIworIyBDT05GSUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVTU0lNSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVRfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19XRVJST1IgaXMgbm90IHNldAorQ09ORklHX05PX0RFQlVHX0xJQj15CisjIENPTkZJR19ETUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGRU5DRSBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdGFsbGF0aW9uIE9wdGlvbnMgKCJtYWtlIGluc3RhbGwiIGJlaGF2aW9yKQorIworQ09ORklHX0lOU1RBTExfQVBQTEVUX1NZTUxJTktTPXkKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9TQ1JJUFRfV1JBUFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfRE9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TWU1MSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX0hBUkRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NDUklQVF9XUkFQUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVGSVg9Ii4vX2luc3RhbGwiCisKKyMKKyMgQnVzeWJveCBMaWJyYXJ5IFR1bmluZworIworQ09ORklHX0ZFQVRVUkVfU1lTVEVNRD15CitDT05GSUdfRkVBVFVSRV9SVE1JTk1BWD15CitDT05GSUdfUEFTU1dPUkRfTUlOTEVOPTYKK0NPTkZJR19NRDVfU01BTEw9MQorQ09ORklHX1NIQTNfU01BTEw9MQorQ09ORklHX0ZFQVRVUkVfRkFTVF9UT1A9eQorIyBDT05GSUdfRkVBVFVSRV9FVENfTkVUV09SS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVNFX1RFUk1JT1M9eQorQ09ORklHX0ZFQVRVUkVfRURJVElORz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX01BWF9MRU49MTAyNAorIyBDT05GSUdfRkVBVFVSRV9FRElUSU5HX1ZJIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfSElTVE9SWT0xNQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19TQVZFSElTVE9SWT15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRV9PTl9FWElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVWRVJTRV9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFCX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfVVNFUk5BTUVfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0ZBTkNZX1BST01QVD15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX05PTl9QT1NJWF9DUD15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfQ1BfTUVTU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT1BZQlVGX0tCPTQKK0NPTkZJR19GRUFUVVJFX1NLSVBfUk9PVEZTPXkKK0NPTkZJR19NT05PVE9OSUNfU1lTQ0FMTD15CitDT05GSUdfSU9DVExfSEVYMlNUUl9FUlJPUj15CitDT05GSUdfRkVBVFVSRV9IV0lCPXkKKworIworIyBBcHBsZXRzCisjCisKKyMKKyMgQXJjaGl2YWwgVXRpbGl0aWVzCisjCitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19YWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19MWk1BPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0JaMj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19HWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19aPXkKK0NPTkZJR19BUj15CisjIENPTkZJR19GRUFUVVJFX0FSX0xPTkdfRklMRU5BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQVJfQ1JFQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldAorQ09ORklHX0dVTlpJUD15CitDT05GSUdfQlVOWklQMj15CisjIENPTkZJR19VTkxaTUEgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MWk1BX0ZBU1QgaXMgbm90IHNldAorIyBDT05GSUdfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19DUElPPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0cgaXMgbm90IHNldAorIyBDT05GSUdfRFBLR19ERUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EUEtHX0RFQl9FWFRSQUNUX09OTFkgaXMgbm90IHNldAorQ09ORklHX0daSVA9eQorIyBDT05GSUdfRkVBVFVSRV9HWklQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfR1pJUF9GQVNUPTAKKyMgQ09ORklHX0xaT1AgaXMgbm90IHNldAorIyBDT05GSUdfTFpPUF9DT01QUl9ISUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQTSBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0yQ1BJTyBpcyBub3Qgc2V0CitDT05GSUdfVEFSPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9DUkVBVEU9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0FVVE9ERVRFQ1Q9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0ZST009eQorQ09ORklHX0ZFQVRVUkVfVEFSX09MREdOVV9DT01QQVRJQklMSVRZPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX09MRFNVTl9DT01QQVRJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RBUl9HTlVfRVhURU5TSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1RBUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVE9fQ09NTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9VTkFNRV9HTkFNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfTk9QUkVTRVJWRV9USU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1NFTElOVVggaXMgbm90IHNldAorQ09ORklHX1VOWklQPXkKKworIworIyBDb3JldXRpbHMKKyMKK0NPTkZJR19CQVNFTkFNRT15CitDT05GSUdfQ0FUPXkKK0NPTkZJR19EQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9JU09GTVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EQVRFX05BTk8gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfREFURV9DT01QQVQ9eQorIyBDT05GSUdfSE9TVElEIGlzIG5vdCBzZXQKK0NPTkZJR19JRD15CitDT05GSUdfR1JPVVBTPXkKK0NPTkZJR19TSFVGPXkKK0NPTkZJR19URVNUPXkKK0NPTkZJR19GRUFUVVJFX1RFU1RfNjQ9eQorQ09ORklHX1RPVUNIPXkKK0NPTkZJR19GRUFUVVJFX1RPVUNIX05PREVSRUY9eQorQ09ORklHX0ZFQVRVUkVfVE9VQ0hfU1VTVjM9eQorQ09ORklHX1RSPXkKK0NPTkZJR19GRUFUVVJFX1RSX0NMQVNTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9UUl9FUVVJViBpcyBub3Qgc2V0CitDT05GSUdfVU5MSU5LPXkKKyMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CitDT05GSUdfV0hPPXkKK0NPTkZJR19VU0VSUz15CisjIENPTkZJR19DQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FUViBpcyBub3Qgc2V0CitDT05GSUdfQ0hHUlA9eQorQ09ORklHX0NITU9EPXkKK0NPTkZJR19DSE9XTj15CisjIENPTkZJR19GRUFUVVJFX0NIT1dOX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ0hST09UPXkKKyMgQ09ORklHX0NLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU0gaXMgbm90IHNldAorQ09ORklHX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DVVQ9eQorQ09ORklHX0REPXkKK0NPTkZJR19GRUFUVVJFX0REX1NJR05BTF9IQU5ETElORz15CisjIENPTkZJR19GRUFUVVJFX0REX1RISVJEX1NUQVRVU19MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRERfSUJTX09CUyBpcyBub3Qgc2V0CitDT05GSUdfREY9eQorIyBDT05GSUdfRkVBVFVSRV9ERl9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfRElSTkFNRT15CisjIENPTkZJR19ET1MyVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYMkRPUyBpcyBub3Qgc2V0CitDT05GSUdfRFU9eQorQ09ORklHX0ZFQVRVUkVfRFVfREVGQVVMVF9CTE9DS1NJWkVfMUs9eQorQ09ORklHX0VDSE89eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfRUNITz15CitDT05GSUdfRU5WPXkKK0NPTkZJR19GRUFUVVJFX0VOVl9MT05HX09QVElPTlM9eQorIyBDT05GSUdfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQUj15CitDT05GSUdfRVhQUl9NQVRIX1NVUFBPUlRfNjQ9eQorQ09ORklHX0ZBTFNFPXkKKyMgQ09ORklHX0ZPTEQgaXMgbm90IHNldAorIyBDT05GSUdfRlNZTkMgaXMgbm90IHNldAorQ09ORklHX0hFQUQ9eQorIyBDT05GSUdfRkVBVFVSRV9GQU5DWV9IRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTE49eQorQ09ORklHX0xPR05BTUU9eQorQ09ORklHX0xTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZJTEVUWVBFUz15CitDT05GSUdfRkVBVFVSRV9MU19GT0xMT1dMSU5LUz15CitDT05GSUdfRkVBVFVSRV9MU19SRUNVUlNJVkU9eQorQ09ORklHX0ZFQVRVUkVfTFNfU09SVEZJTEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1RJTUVTVEFNUFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVVNFUk5BTUU9eQorQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1I9eQorIyBDT05GSUdfRkVBVFVSRV9MU19DT0xPUl9JU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19NRDVTVU09eQorQ09ORklHX01LRElSPXkKK0NPTkZJR19GRUFUVVJFX01LRElSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfTUtGSUZPPXkKK0NPTkZJR19NS05PRD15CitDT05GSUdfTVY9eQorIyBDT05GSUdfRkVBVFVSRV9NVl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTklDRSBpcyBub3Qgc2V0CitDT05GSUdfTk9IVVA9eQorQ09ORklHX09EPXkKKyMgQ09ORklHX1BSSU5URU5WIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEY9eQorQ09ORklHX1BXRD15CitDT05GSUdfUkVBRExJTks9eQorQ09ORklHX0ZFQVRVUkVfUkVBRExJTktfRk9MTE9XPXkKK0NPTkZJR19SRUFMUEFUSD15CitDT05GSUdfUk09eQorQ09ORklHX1JNRElSPXkKKyMgQ09ORklHX0ZFQVRVUkVfUk1ESVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVE9eQorIyBDT05GSUdfU0hBMVNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEyNTZTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBNTEyU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTNTVU0gaXMgbm90IHNldAorQ09ORklHX1NMRUVQPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1NMRUVQPXkKKyMgQ09ORklHX0ZFQVRVUkVfRkxPQVRfU0xFRVAgaXMgbm90IHNldAorQ09ORklHX1NPUlQ9eQorQ09ORklHX0ZFQVRVUkVfU09SVF9CSUc9eQorIyBDT05GSUdfU1BMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TUExJVF9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBVD15CitDT05GSUdfRkVBVFVSRV9TVEFUX0ZPUk1BVD15CitDT05GSUdfU1RUWT15CisjIENPTkZJR19TVU0gaXMgbm90IHNldAorQ09ORklHX1NZTkM9eQorIyBDT05GSUdfVEFDIGlzIG5vdCBzZXQKK0NPTkZJR19UQUlMPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1RBSUw9eQorQ09ORklHX1RFRT15CisjIENPTkZJR19GRUFUVVJFX1RFRV9VU0VfQkxPQ0tfSU8gaXMgbm90IHNldAorQ09ORklHX1RSVUU9eQorQ09ORklHX1RUWT15CitDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VTkVYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1VOSVE9eQorQ09ORklHX1VTTEVFUD15CisjIENPTkZJR19VVURFQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19VVUVOQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfV0M9eQorIyBDT05GSUdfRkVBVFVSRV9XQ19MQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfV0hPQU1JPXkKK0NPTkZJR19ZRVM9eQorCisjCisjIENvbW1vbiBvcHRpb25zCisjCitDT05GSUdfRkVBVFVSRV9WRVJCT1NFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgY3AgYW5kIG12CisjCisjIENPTkZJR19GRUFUVVJFX1BSRVNFUlZFX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxzLCBtb3JlIGFuZCB0ZWxuZXQKKyMKK0NPTkZJR19GRUFUVVJFX0FVVE9XSURUSD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGRmLCBkdSwgbHMKKyMKK0NPTkZJR19GRUFUVVJFX0hVTUFOX1JFQURBQkxFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbWQ1c3VtLCBzaGExc3VtLCBzaGEyNTZzdW0sIHNoYTUxMnN1bSwgc2hhM3N1bQorIworQ09ORklHX0ZFQVRVUkVfTUQ1X1NIQTFfU1VNX0NIRUNLPXkKKworIworIyBDb25zb2xlIFV0aWxpdGllcworIworQ09ORklHX0NIVlQ9eQorIyBDT05GSUdfRkdDT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19DTEVBUj15CitDT05GSUdfREVBTExPQ1ZUPXkKK0NPTkZJR19EVU1QS01BUD15CisjIENPTkZJR19LQkRfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfTE9BREZPTlQ9eQorQ09ORklHX0xPQURLTUFQPXkKK0NPTkZJR19PUEVOVlQ9eQorQ09ORklHX1JFU0VUPXkKKyMgQ09ORklHX1JFU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFU0laRV9QUklOVCBpcyBub3Qgc2V0CitDT05GSUdfU0VUQ09OU09MRT15CisjIENPTkZJR19GRUFUVVJFX1NFVENPTlNPTEVfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEZPTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGT05UX1RFWFRVQUxfTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFVEZPTlRfRElSPSIiCisjIENPTkZJR19TRVRLRVlDT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRMT0dDT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIT1dLRVkgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBsb2FkZm9udCBhbmQgc2V0Zm9udAorIworIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9QU0YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUkFXIGlzIG5vdCBzZXQKKworIworIyBEZWJpYW4gVXRpbGl0aWVzCisjCitDT05GSUdfTUtURU1QPXkKKyMgQ09ORklHX1BJUEVfUFJPR1JFU1MgaXMgbm90IHNldAorQ09ORklHX1JVTl9QQVJUUz15CitDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfTE9OR19PUFRJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFSVF9TVE9QX0RBRU1PTj15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9GQU5DWT15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9MT05HX09QVElPTlM9eQorQ09ORklHX1dISUNIPXkKKworIworIyBFZGl0b3JzCisjCitDT05GSUdfQVdLPXkKK0NPTkZJR19GRUFUVVJFX0FXS19MSUJNPXkKK0NPTkZJR19GRUFUVVJFX0FXS19HTlVfRVhURU5TSU9OUz15CitDT05GSUdfQ01QPXkKK0NPTkZJR19ESUZGPXkKKyMgQ09ORklHX0ZFQVRVUkVfRElGRl9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRElGRl9ESVI9eQorIyBDT05GSUdfRUQgaXMgbm90IHNldAorQ09ORklHX1BBVENIPXkKK0NPTkZJR19TRUQ9eQorQ09ORklHX1ZJPXkKK0NPTkZJR19GRUFUVVJFX1ZJX01BWF9MRU49MTAyNAorQ09ORklHX0ZFQVRVUkVfVklfOEJJVD15CitDT05GSUdfRkVBVFVSRV9WSV9DT0xPTj15CitDT05GSUdfRkVBVFVSRV9WSV9ZQU5LTUFSSz15CitDT05GSUdfRkVBVFVSRV9WSV9TRUFSQ0g9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUdFWF9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVVNFX1NJR05BTFM9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9ET1RfQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVRPUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1dJTl9SRVNJWkU9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVU5ETz15CitDT05GSUdfRkVBVFVSRV9WSV9VTkRPX1FVRVVFPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1VORE9fUVVFVUVfTUFYPTI1NgorQ09ORklHX0ZFQVRVUkVfQUxMT1dfRVhFQz15CisKKyMKKyMgRmluZGluZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19GSU5EPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJJTlQwPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTVRJTUU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NTUlOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEVSTT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9YREVWPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTUFYREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ORVdFUj15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfSU5VTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDX1BMVVM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9VU0VSPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfR1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9OT1Q9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBUkVOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfU0laRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSVU5FPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9ERUxFVEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9QQVRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUkVHRVg9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0NPTlRFWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0xJTktTIGlzIG5vdCBzZXQKK0NPTkZJR19HUkVQPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRUdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9GR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0NPTlRFWFQ9eQorQ09ORklHX1hBUkdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9DT05GSVJNQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1FVT1RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfVEVSTU9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfWkVST19URVJNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfUkVQTF9TVFI9eQorCisjCisjIEluaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19CT09UQ0hBUlREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9CTE9BVEVEX0hFQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQ09ORklHX0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBTFQ9eQorIyBDT05GSUdfRkVBVFVSRV9DQUxMX1RFTElOSVQgaXMgbm90IHNldAorQ09ORklHX1RFTElOSVRfUEFUSD0iIgorIyBDT05GSUdfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VTRV9JTklUVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfS0lMTF9SRU1PVkVEIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0tJTExfREVMQVk9MAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NDVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFRSQV9RVUlFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfQ09SRURVTVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUX1RFUk1JTkFMX1RZUEU9IiIKK0NPTkZJR19NRVNHPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUVTR19FTkFCTEVfT05MWV9HUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgTG9naW4vUGFzc3dvcmQgTWFuYWdlbWVudCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0FERF9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRU1PVkVfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9QV0RfR1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9TSEFET1cgaXMgbm90IHNldAorQ09ORklHX1VTRV9CQl9DUllQVD15CisjIENPTkZJR19VU0VfQkJfQ1JZUFRfU0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX05BTUVTIGlzIG5vdCBzZXQKK0NPTkZJR19MQVNUX0lEPTYwMDAwCitDT05GSUdfRklSU1RfU1lTVEVNX0lEPTEwMAorQ09ORklHX0xBU1RfU1lTVEVNX0lEPTk5OQorIyBDT05GSUdfQURER1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERHUk9VUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX1RPX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVMR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERUxfVVNFUl9GUk9NX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NFU1NJT05fQVNfQ0hJTEQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05PTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRUNVUkVUVFkgaXMgbm90IHNldAorIyBDT05GSUdfUEFTU1dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUEFTU1dEX1dFQUtfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRQVyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBBU1NXRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ERUZBVUxUX1BBU1NXRF9BTEdPPSIiCisjIENPTkZJR19TVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX0NIRUNLU19TSEVMTFMgaXMgbm90IHNldAorIyBDT05GSUdfU1VMT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggRXh0MiBGUyBQcm9ncworIworQ09ORklHX0NIQVRUUj15CitDT05GSUdfRlNDSz15CisjIENPTkZJR19MU0FUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVFVORTJGUyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggTW9kdWxlIFV0aWxpdGllcworIworIyBDT05GSUdfTU9ESU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RQUk9CRV9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX09QVElPTlNfT05fQ01ETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX0NIRUNLX0FMUkVBRFlfTE9BREVEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNNT0Q9eQorQ09ORklHX1JNTU9EPXkKK0NPTkZJR19MU01PRD15CisjIENPTkZJR19GRUFUVVJFX0xTTU9EX1BSRVRUWV8yXzZfT1VUUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RQUk9CRT15CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX0JMQUNLTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVQTU9EPXkKKworIworIyBPcHRpb25zIGNvbW1vbiB0byBtdWx0aXBsZSBtb2R1dGlscworIworIyBDT05GSUdfRkVBVFVSRV8yXzRfTU9EVUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9UUllfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9WRVJTSU9OX0NIRUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0tTWU1PT1BTX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRElOS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUF9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NIRUNLX1RBSU5URURfTU9EVUxFPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX1NZTUJPTFM9eQorQ09ORklHX0RFRkFVTFRfTU9EVUxFU19ESVI9Ii9saWIvbW9kdWxlcyIKK0NPTkZJR19ERUZBVUxUX0RFUE1PRF9GSUxFPSJtb2R1bGVzLmRlcCIKKworIworIyBMaW51eCBTeXN0ZW0gVXRpbGl0aWVzCisjCisjIENPTkZJR19CTE9DS0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19GQVRBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19GU1RSSU09eQorIyBDT05GSUdfTURFViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUVfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9FWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9MT0FEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFViBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FDUElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEUgaXMgbm90IHNldAorQ09ORklHX0RNRVNHPXkKK0NPTkZJR19GRUFUVVJFX0RNRVNHX1BSRVRUWT15CitDT05GSUdfRkJTRVQ9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfUkVBRE1PREU9eQorIyBDT05GSUdfRkRGTFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GREZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfRkRJU0s9eQorIyBDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GRElTS19XUklUQUJMRT15CisjIENPTkZJR19GRUFUVVJFX0FJWF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NHSV9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVTl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX09TRl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dQVF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZESVNLX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJTkRGUyBpcyBub3Qgc2V0CitDT05GSUdfRkxPQ0s9eQorIyBDT05GSUdfRlJFRVJBTURJU0sgaXMgbm90IHNldAorIyBDT05GSUdfRlNDS19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX0VYVDIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01JTklYMiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1JFSVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1ZGQVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VUT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkcgaXMgbm90IHNldAorQ09ORklHX0hFWERVTVA9eQorIyBDT05GSUdfRkVBVFVSRV9IRVhEVU1QX1JFVkVSU0UgaXMgbm90IHNldAorIyBDT05GSUdfSEQgaXMgbm90IHNldAorQ09ORklHX0hXQ0xPQ0s9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19BREpUSU1FX0ZIUz15CisjIENPTkZJR19JUENSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENTIGlzIG5vdCBzZXQKK0NPTkZJR19MT1NFVFVQPXkKKyMgQ09ORklHX0xTUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19NS1NXQVA9eQorIyBDT05GSUdfRkVBVFVSRV9NS1NXQVBfVVVJRCBpcyBub3Qgc2V0CitDT05GSUdfTU9SRT15CitDT05GSUdfTU9VTlQ9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9MQUJFTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9ORlM9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZMQUdTPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZTVEFCPXkKK0NPTkZJR19QSVZPVF9ST09UPXkKK0NPTkZJR19SREFURT15CisjIENPTkZJR19SREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURQUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVFJFUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQT05PRkY9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX0RJU0NBUkQ9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX1BSST15CitDT05GSUdfU1dJVENIX1JPT1Q9eQorQ09ORklHX1VNT1VOVD15CitDT05GSUdfRkVBVFVSRV9VTU9VTlRfQUxMPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbW91bnQvdW1vdW50CisjCitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1BfQ1JFQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVRBQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTFVNRUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWEZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0YyRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9IRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9JU085NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhTV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTFVLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05JTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTlRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX09DRlMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUkVJU0VSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9ST01GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1lTViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1VERiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1hGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0NPTlNQWSBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9DQUxMX1NFTkRNQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NST05EX0RJUj0iIgorQ09ORklHX0xFU1M9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19NQVhMSU5FUz05OTk5OTk5CitDT05GSUdfRkVBVFVSRV9MRVNTX0JSQUNLRVRTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfRkxBR1M9eQorIyBDT05GSUdfRkVBVFVSRV9MRVNTX01BUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1dJTkNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0RBU0hDTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0xJTkVOVU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkRXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5ERFVNUCBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMPXkKKyMgQ09ORklHX1NFVFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFTS1NFVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19VQklBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJREVUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSU1LVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJNVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJTVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVVQREFURVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESlRJTUVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfQkVFUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CRUVQX0ZSRVE9MAorQ09ORklHX0ZFQVRVUkVfQkVFUF9MRU5HVEhfTVM9MAorIyBDT05GSUdfQ0hBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfTk9GQUlMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9UVFlfSElGSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfSU1QTElDSVRfQ1IgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NXQUxMT1dfT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU0VORF9FU0NBUEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9WQVJfQUJPUlRfTEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9DTFJfQUJPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9OVEFCIGlzIG5vdCBzZXQKK0NPTkZJR19EQz15CisjIENPTkZJR19GRUFUVVJFX0RDX0xJQk0gaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9NT0RMT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9GR19OUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFVkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVk1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19FSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VKRUNUX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfRkJTUExBU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hDUCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9FUkFTRUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19JT05JQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWUQgaXMgbm90IHNldAorIyBDT05GSUdfTEFTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEUEFSTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9HRVRfSURFTlRJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19TQ0FOX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19VTlJFR0lTVEVSX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19EUklWRV9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1RSSVNUQVRFX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19HRVRTRVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BS0VERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfTEVBRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BTiBpcyBub3Qgc2V0CitDT05GSUdfTUlDUk9DT009eQorIyBDT05GSUdfTU9VTlRQT0lOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlEQVVUT1JVTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEQUhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfUlVOTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfUlggaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0lEIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJTkdTPXkKK0NPTkZJR19USU1FPXkKKyMgQ09ORklHX1RJTUVPVVQgaXMgbm90IHNldAorIyBDT05GSUdfVFRZU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIFV0aWxpdGllcworIworIyBDT05GSUdfTkFNRUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkFNRUlGX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05CRENMSUVOVCBpcyBub3Qgc2V0CitDT05GSUdfTkM9eQorIyBDT05GSUdfTkNfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DXzExMF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX1BJTkc9eQorQ09ORklHX1BJTkc2PXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1BJTkc9eQorIyBDT05GSUdfV0hPSVMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSVBWNj15CisjIENPTkZJR19GRUFUVVJFX1VOSVhfTE9DQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0lQVjRfQUREUkVTUz15CisjIENPTkZJR19WRVJCT1NFX1JFU09MVVRJT05fRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJDVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX1NIT1cgaXMgbm90IHNldAorIyBDT05GSUdfRE5TRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUl9XQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBS0VJREVOVEQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUERfQUNDRVBUX0JST0tFTl9MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX0FVVEhFTlRJQ0FUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBQVVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBHRVRQVVRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUTkFNRT15CisjIENPTkZJR19IVFRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVFVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0JBU0lDX0FVVEggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9BVVRIX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NHSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NPTkZJR19XSVRIX1NDUklQVF9JTlRFUlBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUX1JFTU9URV9QT1JUX1RPX0VOViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VOQ09ERV9VUkxfU1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRVJST1JfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9QUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0daSVAgaXMgbm90IHNldAorQ09ORklHX0lGQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NUQVRVUz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19NRU1TVEFSVF9JT0FERFJfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX0hXPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfQlJPQURDQVNUX1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSUZFTlNMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGUExVR0QgaXMgbm90IHNldAorQ09ORklHX0lGVVBET1dOPXkKK0NPTkZJR19JRlVQRE9XTl9JRlNUQVRFX1BBVEg9Ii92YXIvcnVuL2lmc3RhdGUiCisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTiBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JRkNPTkZJR19CVUlMVElOPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQ9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9NQVBQSU5HPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0VYVEVSTkFMX0RIQ1A9eQorIyBDT05GSUdfSU5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9ESVNDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fREFZVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9DSEFSR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19JUD15CitDT05GSUdfRkVBVFVSRV9JUF9BRERSRVNTPXkKK0NPTkZJR19GRUFUVVJFX0lQX0xJTks9eQorQ09ORklHX0ZFQVRVUkVfSVBfUk9VVEU9eQorQ09ORklHX0ZFQVRVUkVfSVBfVFVOTkVMPXkKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1NIT1JUX0ZPUk1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUkFSRV9QUk9UT0NPTFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBBRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENBTEMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRTVEFUPXkKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9XSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9QUkcgaXMgbm90IHNldAorQ09ORklHX05TTE9PS1VQPXkKKyMgQ09ORklHX05UUEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OVFBEX1NFUlZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19QU0NBTiBpcyBub3Qgc2V0CitDT05GSUdfUk9VVEU9eQorIyBDT05GSUdfU0xBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVENQU1ZEIGlzIG5vdCBzZXQKK0NPTkZJR19URUxORVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URUxORVRfVFRZUEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEVMTkVUX0FVVE9MT0dJTj15CisjIENPTkZJR19URUxORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9JTkVURF9XQUlUIGlzIG5vdCBzZXQKK0NPTkZJR19URlRQPXkKKyMgQ09ORklHX1RGVFBEIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgdGZ0cC90ZnRwZAorIworQ09ORklHX0ZFQVRVUkVfVEZUUF9HRVQ9eQorQ09ORklHX0ZFQVRVUkVfVEZUUF9QVVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URlRQX0JMT0NLU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RGVFBfUFJPR1JFU1NfQkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RGVFBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUk9VVEU9eQorIyBDT05GSUdfVFJBQ0VST1VURTYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1NPVVJDRV9ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVVNFX0lDTVAgaXMgbm90IHNldAorIyBDT05GSUdfVFVOQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFVOQ1RMX1VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VESENQQzYgaXMgbm90IHNldAorQ09ORklHX1VESENQRD15CisjIENPTkZJR19ESENQUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0RVTVBMRUFTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfV1JJVEVfTEVBU0VTX0VBUkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX0JBU0VfSVBfT05fTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19ESENQRF9MRUFTRVNfRklMRT0iL3Zhci9saWIvbWlzYy91ZGhjcGQubGVhc2VzIgorQ09ORklHX1VESENQQz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfQVJQSU5HPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19TQU5JVElaRU9QVD15CisjIENPTkZJR19GRUFUVVJFX1VESENQX1BPUlQgaXMgbm90IHNldAorQ09ORklHX1VESENQX0RFQlVHPTAKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUkZDMzM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VESENQXzgwMjFRIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUENfREVGQVVMVF9TQ1JJUFQ9Ii91c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgorQ09ORklHX1VESENQQ19TTEFDS19GT1JfQlVHR1lfU0VSVkVSUz04MAorQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iCisjIENPTkZJR19VRFBTVkQgaXMgbm90IHNldAorIyBDT05GSUdfVkNPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfV0dFVD15CitDT05GSUdfRkVBVFVSRV9XR0VUX1NUQVRVU0JBUj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0FVVEhFTlRJQ0FUSU9OPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfVElNRU9VVD15CisjIENPTkZJR19aQ0lQIGlzIG5vdCBzZXQKKworIworIyBQcmludCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0xQRCBpcyBub3Qgc2V0CisjIENPTkZJR19MUFIgaXMgbm90IHNldAorIyBDT05GSUdfTFBRIGlzIG5vdCBzZXQKKworIworIyBNYWlsIFV0aWxpdGllcworIworIyBDT05GSUdfTUFLRU1JTUUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTUlNRV9DSEFSU0VUPSIiCisjIENPTkZJR19QT1BNQUlMRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUE9QTUFJTERJUl9ERUxJVkVSWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUZPUk1JTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRUZPUk1JTUVfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTkRNQUlMIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzIFV0aWxpdGllcworIworIyBDT05GSUdfSU9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVBTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NRVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19QV0RYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNRU1DQVAgaXMgbm90IHNldAorQ09ORklHX1RPUD15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX1VTQUdFX1BFUkNFTlRBR0U9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9HTE9CQUxfUEVSQ0VOVFM9eQorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9ERUNJTUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfUFJPQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVVBUSU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVVBUSU1FX1VUTVBfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRlJFRT15CitDT05GSUdfRlVTRVI9eQorQ09ORklHX0tJTEw9eQorQ09ORklHX0tJTExBTEw9eQorIyBDT05GSUdfS0lMTEFMTDUgaXMgbm90IHNldAorIyBDT05GSUdfUEdSRVAgaXMgbm90IHNldAorQ09ORklHX1BJRE9GPXkKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfU0lOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfT01JVCBpcyBub3Qgc2V0CisjIENPTkZJR19QS0lMTCBpcyBub3Qgc2V0CitDT05GSUdfUFM9eQorQ09ORklHX0ZFQVRVUkVfUFNfV0lERT15CitDT05GSUdfRkVBVFVSRV9QU19MT05HPXkKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX0FERElUSU9OQUxfQ09MVU1OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX1VOVVNVQUxfU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfUkVOSUNFPXkKK0NPTkZJR19CQl9TWVNDVEw9eQorIyBDT05GSUdfRkVBVFVSRV9TSE9XX1RIUkVBRFMgaXMgbm90IHNldAorQ09ORklHX1dBVENIPXkKKworIworIyBSdW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX1JVTlNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlNWRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOU1ZESVJfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NWIGlzIG5vdCBzZXQKK0NPTkZJR19TVl9ERUZBVUxUX1NFUlZJQ0VfRElSPSIiCisjIENPTkZJR19TVkxPR0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0VUVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVlVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZESVIgaXMgbm90IHNldAorIyBDT05GSUdfU09GVExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hDT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQURfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVENIUEFUSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNUT1JFQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTkNPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VMSU5VWEVOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZJTEVTX0NIRUNLX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0VTVEFUVVMgaXMgbm90IHNldAorCisjCisjIFNoZWxscworIworQ09ORklHX0FTSD15CitDT05GSUdfQVNIX0JBU0hfQ09NUEFUPXkKKyMgQ09ORklHX0FTSF9JRExFX1RJTUVPVVQgaXMgbm90IHNldAorQ09ORklHX0FTSF9KT0JfQ09OVFJPTD15CitDT05GSUdfQVNIX0FMSUFTPXkKK0NPTkZJR19BU0hfR0VUT1BUUz15CitDT05GSUdfQVNIX0JVSUxUSU5fRUNITz15CitDT05GSUdfQVNIX0JVSUxUSU5fUFJJTlRGPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9URVNUPXkKK0NPTkZJR19BU0hfSEVMUD15CisjIENPTkZJR19BU0hfQ01EQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTSF9NQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfQVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfRVhQQU5EX1BSTVQ9eQorIyBDT05GSUdfQ1RUWUhBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JBU0hfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQlJBQ0VfRVhQQU5TSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSEVMUCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lOVEVSQUNUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfU0FWRUhJU1RPUlkgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9KT0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9USUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSUYgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0NBU0UgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9GVU5DVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRVhQT1JUX04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9NT0RFX1ggaXMgbm90IHNldAorIyBDT05GSUdfTVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19BU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0hVU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19OT05FPXkKK0NPTkZJR19TSF9NQVRIX1NVUFBPUlQ9eQorIyBDT05GSUdfU0hfTUFUSF9TVVBQT1JUXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX05PRk9SSyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9ISVNURklMRVNJWkU9eQorCisjCisjIFN5c3RlbSBMb2dnaW5nIFV0aWxpdGllcworIworQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9NjQKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19GRUFUVVJFX0tNU0dfU1lTTE9HPXkKK0NPTkZJR19LTE9HRD15CisKKyMKKyMga2xvZ2Qgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggc3lzbG9nIHRvIGtlcm5lbCBwcmludGsgYnVmZmVyCisjCitDT05GSUdfRkVBVFVSRV9LTE9HRF9LTE9HQ1RMPXkKK0NPTkZJR19MT0dHRVI9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZmFpbF9vbl9ub19tZWRpYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ1ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBjdXJyZW50IGJlaGF2aW91ciBvZiBidXN5Ym94IGlzIHRvIHRyeSBhbGwgZnN0eXBlIHdoZW4gYXV0b21vdW50aW5nCitldmVuIHdoZW4gbm8gbWVkaWEgZXhpc3RzLiAgVGhlIHV0aWwtbGludXggbW91bnQgY29tbWFuZCBiYWlscyB3aGVuIG5vCittZWRpYSBleGlzdHMsIHNvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIGJ1c3lib3ggdG8gZG8gdGhlIHNhbWUuCisKK0l0IGNvdWxkIGFsc28gYmUgYXJndWVkIHRoYXQgdGhlIEtFUk5fSU5GTyBtZXNzYWdlIGZyb20gYnRyZnMgY291bGQgYmUKK3JlbW92ZWQsIGJ1dCB0aGF0IHdvdWxkIGJlIGhhcmRlciB0byBhY2NvbXBsaXNoLgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJ1c3lib3gtMS4yMC4yL3V0aWwtbGludXgvbW91bnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMC4yLm9yaWcvdXRpbC1saW51eC9tb3VudC5jCisrKysgYnVzeWJveC0xLjIwLjIvdXRpbC1saW51eC9tb3VudC5jCitAQCAtNTk4LDcgKzU5OCwxMyBAQCBzdGF0aWMgaW50IG1vdW50X2l0X25vdyhzdHJ1Y3QgbW50ZW50ICptCisgCQkJCWJyZWFrOworIAkJCWVycm5vID0gZXJybm9fc2F2ZTsKKyAJCX0KKy0KKysJCS8qCisrCQkgKiBCcmVhayBpZiB0aGVyZSBpcyBubyBtZWRpYSwgbm8gcG9pbnQgcmV0cnlpbmcgZm9yIGFsbAorKwkJICogZnMgdHlwZXMgc2luY2UgdGhlcmUgaXMgbm8gbWVkaWEgYXZhaWxhYmxlCisrCQkgKi8KKysJCWlmIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFTk9NRURJVU0pIHsKKysJCQliYl9wZXJyb3JfbXNnX2FuZF9kaWUoIm1vdW50aW5nICVzIG9uICVzIGZhaWxlZCIsIG1wLT5tbnRfZnNuYW1lLCBtcC0+bW50X2Rpcik7CisrCQl9CisgCQlpZiAoIXJjIHx8ICh2ZnNmbGFncyAmIE1TX1JET05MWSkgfHwgKGVycm5vICE9IEVBQ0NFUyAmJiBlcnJubyAhPSBFUk9GUykpCisgCQkJYnJlYWs7CisgCQlpZiAoISh2ZnNmbGFncyAmIE1TX1NJTEVOVCkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0X2hlYWRlcl90YXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0X2hlYWRlcl90YXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1MjhmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBjb3B5IGNvbW1pdCBtZXNzYWdlIGZyb20gT0UgYXMgdGhlIHBhdGNoIGNvbW1lbnQ6CisjICAgIGNvbW1pdCA1YTBlMWQ0NzNjYTdhY2E1ZmZlZmZmZTlhMmVjNDRhZTdhMWYzNWJjCisjICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEZlYiAxMSAyMjo0MDoyMSAyMDA5ICswMTAwCisjCisjICAgIGJ1c3lib3g6IGZpeCB0YXIgcHJvYmxlbSB3aXRoIGZpbGVuYW1lcyB0aGF0IGFyZSBleGFjdGx5IDEwMCBieXRlcworIworIyBhYm92ZSBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0wNgorCistLS0gYnVzeWJveC0xLjEzLjIvYXJjaGl2YWwvbGliYXJjaGl2ZS9nZXRfaGVhZGVyX3Rhci5jLm9yaWcJMjAwOC0xMS0wOSAxODoyODowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBidXN5Ym94LTEuMTMuMi9hcmNoaXZhbC9saWJhcmNoaXZlL2dldF9oZWFkZXJfdGFyLmMJMjAwOS0wMi0xMSAyMjozNDo1Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTIsNiArMjUyLDggQEAKKyAJCQlmaWxlX2hlYWRlci0+bmFtZSA9IGNvbmNhdF9wYXRoX2ZpbGUodGFyLnByZWZpeCwgdGFyLm5hbWUpOworIAkJfSBlbHNlCisgCQkJZmlsZV9oZWFkZXItPm5hbWUgPSB4c3RyZHVwKHRhci5uYW1lKTsKKysJCWlmIChzdHJsZW4oZmlsZV9oZWFkZXItPm5hbWUpID4gMTAwKSAKKysJCQlmaWxlX2hlYWRlci0+bmFtZVsxMDBdID0gMDsKKyAJfQorIAorIAkvKiBTZXQgYml0cyAxMi0xNSBvZiB0aGUgZmlsZXMgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldG9wdHMuY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldG9wdHMuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjBhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfR0VUT1BUPXkKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkc9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbG9naW4tdXRpbGl0aWVzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzliMmRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcKQEAgLTAsMCArMSwxMyBAQAorQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUz15CitDT05GSUdfQUREVVNFUj15CitDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfQURER1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TPXkKK0NPTkZJR19ERUxVU0VSPXkKK0NPTkZJR19ERUxHUk9VUD15CitDT05GSUdfR0VUVFk9eQorQ09ORklHX0xPR0lOPXkKK0NPTkZJR19QQVNTV0Q9eQorQ09ORklHX1NVPXkKK0NPTkZJR19TVUxPR0lOPXkKK0NPTkZJR19WTE9DSz15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tb3VudC12aWEtbGFiZWwuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTdhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZwpAQCAtMCwwICsxLDkgQEAKK0NPTkZJR19CTEtJRD15CitDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMPXkKK0NPTkZJR19WT0xVTUVJRD15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9CVFJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWFQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRjJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1FVQVNIRlM9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyYzc0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBhZGRzIGNvbm5tYW5kIHRvIHRoZSBsaXN0IG9mIGtub3cgZGhjcCBjbGllbnRzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZV0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYnVzeWJveC0xLjIyLjEvbmV0d29ya2luZy9pZnVwZG93bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIyLjEub3JpZy9uZXR3b3JraW5nL2lmdXBkb3duLmMKKysrKyBidXN5Ym94LTEuMjIuMS9uZXR3b3JraW5nL2lmdXBkb3duLmMKK0BAIC01MjEsNiArNTIxLDEwIEBAIHN0cnVjdCBkaGNwX2NsaWVudF90IHsKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGhjcF9jbGllbnRfdCBleHRfZGhjcF9jbGllbnRzW10gPSB7CisrCXsgImNvbm5tYW5kIiwKKysJCSJ0cnVlIiwKKysJCSJ0cnVlIiwKKysJfSwKKyAJeyAiZGhjcGNkIiwKKyAJCSJkaGNwY2RbWyAtaCAlaG9zdG5hbWUlXV1bWyAtaSAldmVuZG9yJV1dW1sgLUkgJWNsaWVudCVdXVtbIC1sICVsZWFzZXRpbWUlXV0gJWlmYWNlJSIsCisgCQkiZGhjcGNkIC1rICVpZmFjZSUiLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTFzdW0uY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTFzdW0uY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTcyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTFTVU09eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMjU2c3VtLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTY1MmFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTI1NlNVTT15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XzEuMjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQ5Zjk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XzEuMjMuMi5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGJ1c3lib3guaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5idXN5Ym94Lm5ldC9kb3dubG9hZHMvYnVzeWJveC0ke1BWfS50YXIuYnoyO25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL2dldG9wdHMuY2ZnIFwKKyIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNzkyNTY4M2Q3ZGQxMDVhYWJlOWI2YjYxOGQ0OGNjNzMiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICIwNWE2ZjllMjFhYWQ4YzA5OGUzODhhZTc3ZGU3YjIzNjE5NDFhZmE3MTU3ZWY3NDIxNjcwMzM5NWIxNGUzMTlhIgorCitFWFRSQV9PRU1BS0UgKz0gIlY9MSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBTS0lQX1NUUklQPXkiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgICBjcCAtciAke0J9L3Rlc3RzdWl0ZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgY3AgJHtCfS8uY29uZmlnICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGxuIC1zIC9iaW4vYnVzeWJveCAgICR7RH0ke1BURVNUX1BBVEh9L2J1c3lib3gKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTcyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfZ2l0LmJiCkBAIC0wLDAgKzEsNTQgQEAKK3JlcXVpcmUgYnVzeWJveC5pbmMKKworU1JDUkVWID0gImJlOTQ3YzRkOTdjMGRhY2I3MDNhNmYyNGRkODEzZmY2ZGQzYTMzYjYiCisjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKK1BWID0gIjEuMjMuMitnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9idXN5Ym94Lm5ldC9idXN5Ym94LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyIKKworRVhUUkFfT0VNQUtFICs9ICJWPTEgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gU0tJUF9TVFJJUD15IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICAgY3AgLXIgJHtCfS90ZXN0c3VpdGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGNwICR7Qn0vLmNvbmZpZyAgICAgICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBsbiAtcyAvYmluL2J1c3lib3ggICAke0R9JHtQVEVTVF9QQVRIfS9idXN5Ym94Cit9CisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWNyb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjBlNmIxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9jcm9uZAorTkFNRT1jcm9uZAorREVTQz0iQnVzeWJveCBQZXJpb2RpYyBDb21tYW5kIFNjaGVkdWxlciIKK0FSR1M9Ii1jIC9ldGMvY3Jvbi9jcm9udGFicyIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAtbiAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1odHRwZCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1odHRwZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jODM0OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9odHRwZAorTkFNRT1odHRwZAorREVTQz0iQnVzeWJveCBIVFRQIERhZW1vbiIKK0hUVFBST09UPSIvc3J2L3d3dyIKK0FSR1M9Ii1oICRIVFRQUk9PVCIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJaWYgWyAhIC1kICRIVFRQUk9PVCBdOyB0aGVuCisJCWVjaG8gIiRIVFRQUk9PVCBpcyBtaXNzaW5nLiIKKwkJZXhpdCAxCisJZmkKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiAkTkFNRSAtYSAkREFFTU9OIC0tICRBUkdTCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJzdG9wcGluZyAkREVTQzogJE5BTUUuLi4gIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uICROQU1FCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBlY2hvICJyZXN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisgCSQwIHN0b3AKKwkkMCBzdGFydAorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVsb2FkKQorICAgIAllY2hvIC1uICJyZWxvYWRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAgICAJa2lsbGFsbCAtSFVQICQoYmFzZW5hbWUgJHtEQUVNT059KQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxyZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M3NzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4KQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUtlcm5lbCBMb2dnaW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QGJhc2Vfc2JpbmRpckAva2xvZ2QgLW4KKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTZjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKQEAgLTAsMCArMSwyNSBAQAorT1BUSU9OUz0iLUMiCisjIFRoZSBhYm92ZSBvcHRpb24gbWVhbnMgc3lzbG9nZCB3aWxsIGxvZyB0byAxNksgc2htIGNpcmN1bGFyIGJ1ZmZlci4KKyMgWW91IGNvdWxkIHVzZSBgbG9ncmVhZCcgdG8gcmVhZCBpdC4KKworIyBBbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOgorIyAtTyBGSUxFICAgICAgIDogICAgICBMb2cgdG8gRklMRSAoZGVmYXVsdDovdmFyL2xvZy9tZXNzYWdlcykKKyMgLWwgTiAgICAgICAgICA6ICAgICAgTG9nIG9ubHkgbWVzc2FnZXMgbW9yZSB1cmdlbnQgdGhhbiBwcmlvIE4gKDEtOCkKKyMgLVMgICAgICAgICAgICA6ICAgICAgU21hbGxlciBvdXRwdXQKKyMgLXMgU0laRSAgICAgICA6ICAgICAgTWF4IHNpemUgKEtCKSBiZWZvcmUgcm90YXRpb24gKGRlZmF1bHQ6MjAwS0IsIDA9b2ZmKQorIyAtYiBOICAgICAgICAgIDogICAgICBOIHJvdGF0ZWQgbG9ncyB0byBrZWVwIChkZWZhdWx0OjEsIG1heD05OSwgMD1wdXJnZSkKKyMgLVIgSE9TVFs6UE9SVF06ICAgICAgTG9nIHRvIEhPU1Q6UE9SVCAoZGVmYXVsdCBQT1JUOjUxNCkKKyMgLUwgICAgICAgICAgICA6ICAgICAgTG9nIGxvY2FsbHkgYW5kIHZpYSBuZXR3b3JrCisjIC1EICAgICAgICAgICAgOiAgICAgIERyb3AgZHVwbGljYXRlcworIyAtQ1tzaXplX2tiXSAgIDogICAgICBMb2cgdG8gc2hhcmVkIG1lbSBidWZmZXIgKHVzZSBsb2dyZWFkIHRvIHJlYWQgaXQpCisjIC1mIEZJTEUgICAgICAgOiAgICAgIFVzZSBGSUxFIGFzIGNvbmZpZyAoZGVmYXVsdDovZXRjL3N5c2xvZy5jb25mKQorIyAtbSBNSU4gICAgICAgIDogICAgICBNaW51dGVzIGJldHdlZW4gbWFyayBsaW5lcyAoZGVmYXVsdDoyMCwgMD1vZmYpCisjIC1LICAgICAgICAgICAgOiAgICAgIExvZyB0byBrZXJuZWwgcHJpbnRrIGJ1ZmZlciAodXNlIGRtZXNnIHRvIHJlYWQgaXQpCisKKyMgRXhhbXBsZSAxOgorIyBMb2cgdG8gbG9jYWwgZmlsZSAvdmFyL2xvZy9teWxvZworIyBPUFRJT05TPSItTyAvdmFyL2xvZy9teWxvZyIKKyMKKyMgRXhhbXBsZSAyOgorIyBMb2cgdG8gcmVtb3RlIGhvc3QKKyMgT1BUSU9OUz0iLVIgMTkyLjE2OC4xLjE6NjAxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDQzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4KQEAgLTAsMCArMSwxMyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TeXN0ZW0gTG9nZ2luZyBTZXJ2aWNlCitXYW50cz1idXN5Ym94LWtsb2dkLnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9idXN5Ym94LXN5c2xvZworRXhlY1N0YXJ0PUBiYXNlX3NiaW5kaXJAL3N5c2xvZ2QgLW4gJE9QVElPTlMKK1NvY2tldHM9c3lzbG9nLnNvY2tldAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CitBbHNvPWJ1c3lib3gta2xvZ2Quc2VydmljZQorQWxpYXM9c3lzbG9nLnNlcnZpY2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC11ZGhjcGQgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtdWRoY3BkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0MzkwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtdWRoY3BkCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi91ZGhjcGQKK05BTUU9dWRoY3BkCitERVNDPSJCdXN5Ym94IFVESENQIFNlcnZlciIKK0FSR1M9Ii9ldGMvdWRoY3BkLmNvbmYiCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDEKKworc2V0IC1lCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorCWlmIFsgISAtZiAvZXRjL3VkaGNwZC5jb25mIF07IHRoZW4KKwkJZWNobyAiZXJyb3I6IC9ldGMvdWRoY3BkLmNvbmYgaXMgbWlzc2luZy4iCisJCWV4aXQgMQorCWZpCisJL3NiaW4vc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwkvc2Jpbi9zdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZGVmYXVsdC5zY3JpcHQgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2RlZmF1bHQuc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYWM5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2RlZmF1bHQuc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK2V4ZWMgcnVuLXBhcnRzIC1hICIkMSIgL2V0Yy91ZGhjcGMuZAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2ZpbmQtdG91Y2hzY3JlZW4uc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2ZpbmQtdG91Y2hzY3JlZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjNWU3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitpZiBncmVwIC1xICJpbnB1dDouKi1lMC4qLDMsLiphMCwxLFx8YWRzNzg0NiIgL3N5cy9jbGFzcy8kTURFVi9kZXZpY2UvbW9kYWxpYXMgOyB0aGVuCisJbG4gLXNmIC9kZXYvJE1ERVYgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaHdjbG9jay5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaHdjbG9jay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVmOTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaHdjbG9jaworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2V0IHN5c3RlbSBjbG9jaworIyBEZXNjcmlwdGlvbjogICAgICAgU2V0IHN5c3RlbSBjbG9jayB0byBoYXJkd2FyZSBjbG9jaywgYWNjb3JkaW5nIHRvIHRoZSBVVEMKKyMgICAgICAgICAgICAgICAgICAgIHNldHRpbmcgaW4gL2V0Yy9kZWZhdWx0L3JjUyAoc2VlIGFsc28gcmNTKDUpKS4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIFdBUk5JTkc6ICAgICAgSWYgeW91ciBoYXJkd2FyZSBjbG9jayBpcyBub3QgaW4gVVRDL0dNVCwgdGhpcyBzY3JpcHQKKyMgICAgICAgICAgICAgICBtdXN0IGtub3cgdGhlIGxvY2FsIHRpbWUgem9uZS4gVGhpcyBpbmZvcm1hdGlvbiBpcworIyAgICAgICAgICAgICAgIHN0b3JlZCBpbiAvZXRjL2xvY2FsdGltZS4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gaWYKKyMgICAgICAgICAgICAgICB5b3VyIC9ldGMvbG9jYWx0aW1lIGlzIGEgc3ltbGluayB0byBzb21ldGhpbmcgaW4KKyMgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3pvbmVpbmZvIEFORCAvdXNyIGlzbid0IGluIHRoZSByb290CisjICAgICAgICAgICAgICAgcGFydGl0aW9uISBUaGUgd29ya2Fyb3VuZCBpcyB0byBkZWZpbmUgVFogZWl0aGVyCisjICAgICAgICAgICAgICAgaW4gL2V0Yy9kZWZhdWx0L3JjUywgb3IgaW4gdGhlIHByb3BlciBwbGFjZSBiZWxvdy4KKworWyAhIC14IC9zYmluL2h3Y2xvY2sgXSAmJiBleGl0IDAKKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRVVEMiID0gInllcyIgXSAmJiB0ej0iLS11dGMiIHx8IHR6PSItLWxvY2FsdGltZSIKK2Nhc2UgIiQxIiBpbgorICAgICAgICBzdGFydCkKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSB0aW1lIHdhcyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2V0dGluZyB0aGUgU3lzdGVtIENsb2NrIHVzaW5nIHRoZSBIYXJkd2FyZSBDbG9jayBhcyByZWZlcmVuY2UuLi4iCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlpZiBbIC16ICIkVFoiIF0KKwkJCXRoZW4KKwkgICAgICAgICAgICAgICAgICAgaHdjbG9jayAkdHogLS1oY3Rvc3lzCisJCQllbHNlCisJCQkgICBUWj0iJFRaIiBod2Nsb2NrICR0eiAtLWhjdG9zeXMKKwkJCWZpCisJCWZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSBDbG9jayBzZXQuIFN5c3RlbSBsb2NhbCB0aW1lIGlzIG5vdyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgc3RvcHxyZXN0YXJ0fHJlbG9hZHxmb3JjZS1yZWxvYWQpCisJCSMKKwkJIyBVcGRhdGVzIHRoZSBIYXJkd2FyZSBDbG9jayB3aXRoIHRoZSBTeXN0ZW0gQ2xvY2sgdGltZS4KKwkJIyBUaGlzIHdpbGwgKm92ZXJyaWRlKiBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBIYXJkd2FyZSBDbG9jay4KKwkJIworCQkjIFdBUk5JTkc6IElmIHlvdSBkaXNhYmxlIHRoaXMsIGFueSBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0KKwkJIyAgICAgICAgICBjbG9jayB3aWxsIG5vdCBiZSBjYXJyaWVkIGFjcm9zcyByZWJvb3RzLgorCQkjCisJCWlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisJCXRoZW4KKwkJCWVjaG8gIlNhdmluZyB0aGUgU3lzdGVtIENsb2NrIHRpbWUgdG8gdGhlIEhhcmR3YXJlIENsb2NrLi4uIgorCQlmaQorCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlod2Nsb2NrICR0eiAtLXN5c3RvaGMKKwkJZmkKKwkJaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKwkJdGhlbgorCQkJZWNobyAiSGFyZHdhcmUgQ2xvY2sgdXBkYXRlZCB0byBgZGF0ZWAuIgorCQlmaQorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7CisJc2hvdykKKwkJaWYgWyAiJEhXQ0xPQ0tBQ0NFU1MiICE9IG5vIF0KKwkJdGhlbgorCQkJaHdjbG9jayAkdHogLS1zaG93CisJCWZpCisJCTs7CisgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyAiVXNhZ2U6IGh3Y2xvY2suc2gge3N0YXJ0fHN0b3B8c2hvd3xyZWxvYWR8cmVzdGFydH0iID4mMgorCQllY2hvICIgICAgICAgc3RhcnQgc2V0cyBrZXJuZWwgKHN5c3RlbSkgY2xvY2sgZnJvbSBoYXJkd2FyZSAoUlRDKSBjbG9jayIgPiYyCisJCWVjaG8gIiAgICAgICBzdG9wIGFuZCByZWxvYWQgc2V0IGhhcmR3YXJlIChSVEMpIGNsb2NrIGZyb20ga2VybmVsIChzeXN0ZW0pIGNsb2NrIiA+JjIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1MGJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjCisjIHN0YXJ0L3N0b3AgaW5ldGQgc3VwZXIgc2VydmVyLgorCitpZiAhIFsgLXggL3Vzci9zYmluL2luZXRkIF07IHRoZW4KKwlleGl0IDAKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQiIDsgc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2luZXRkID4gL2Rldi9udWxsCisJZWNobyAiLiIKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IgorCWVjaG8gLW4gIiBpbmV0ZCIgOyBzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAvdXNyL3NiaW4vaW5ldGQgPiAvZGV2L251bGwKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwllY2hvIC1uICJSZXN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQgIgorCWtpbGxhbGwgLUhVUCBpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9pbmV0ZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmZlODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYKQEAgLTAsMCArMSwyMCBAQAorIyAvZXRjL2luZXRkLmNvbmY6ICBzZWUgaW5ldGQoOCkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zLgorIworIyBJbnRlcm5ldCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBkYXRhYmFzZQorIworIyBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGFuIGVudHJ5IHNvIGl0IGlzbid0IHRvdWNoZWQgZHVyaW5nCisjIHBhY2thZ2UgdXBkYXRlcyBqdXN0IGNvbW1lbnQgaXQgb3V0IHdpdGggYSBzaW5nbGUgJyMnIGNoYXJhY3Rlci4KKyMKKyMgPHNlcnZpY2VfbmFtZT4gPHNvY2tfdHlwZT4gPHByb3RvPiA8ZmxhZ3M+IDx1c2VyPiA8c2VydmVyX3BhdGg+IDxhcmdzPgorIworIzpJTlRFUk5BTDogSW50ZXJuYWwgc2VydmljZXMKKyNlY2hvCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjZWNobwkJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4Jc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4JZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2Rpc2NhcmQJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNkaXNjYXJkCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjZGF5dGltZQkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2RheXRpbWUJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI3RpbWUJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyN0aW1lCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTYyNTI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgpAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworbW91bnQgLXQgdG1wZnMgdG1wZnMgL2RldiAgLW8gc2l6ZT02NGssbW9kZT0wNzU1Citta2RpciAvZGV2L3B0cyAvZGV2L3NobQorY2htb2QgNzc3IC9kZXYvc2htCittb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzCit0b3VjaCAvZGV2L21kZXYuc2VxCitlY2hvICIvc2Jpbi9tZGV2IiA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworbWRldiAtcworCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorICAgICAgICBybSAtZiAvZGV2L2luaXRjdGwKKyAgICAgICAgbWtub2QgLW0gNjAwIC9kZXYvaW5pdGN0bCBwCitmaQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYtbW91bnQuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYtbW91bnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkNjZkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaApAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKK01ERVZfQVVUT01PVU5UPXkKK01ERVZfQVVUT01PVU5UX1JPT1Q9L3J1bi9tZWRpYQorWyAtZiAvZXRjL2RlZmF1bHQvbWRldiBdICYmIC4gL2V0Yy9kZWZhdWx0L21kZXYKK2lmIFsgIiR7TURFVl9BVVRPTU9VTlR9IiA9ICJuIiBdIDsgdGhlbgorCWV4aXQgMAorZmkKKworY2FzZSAiJEFDVElPTiIgaW4KKwlhZGR8IiIpCisJCUFDVElPTj0iYWRkIgorCQkjIGNoZWNrIGlmIGFscmVhZHkgbW91bnRlZAorCQlpZiBncmVwIC1xICJeL2Rldi8ke01ERVZ9ICIgL3Byb2MvbW91bnRzIDsgdGhlbgorCQkJIyBBbHJlYWR5IG1vdW50ZWQKKwkJCWV4aXQgMAorCQlmaQorCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDNgCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICJtbWMiIF0gOyB0aGVuCisJCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDdgCisJCWZpCisJCSMgY2hlY2sgZm9yICJwbGVhc2UgZG9uJ3QgbW91bnQgaXQiIGZpbGUKKwkJaWYgWyAtZiAiL2Rldi9ub21vdW50LiR7REVWQkFTRX0iIF0gOyB0aGVuCisJCQkjIGJsb2NrZWQKKwkJCWV4aXQgMAorCQlmaQorCQkjIGNoZWNrIGZvciBmdWxsLWRpc2sgcGFydGl0aW9uCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICIke01ERVZ9IiBdIDsgdGhlbgorCQkJaWYgWyAtZCAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vJHtERVZCQVNFfSoxIF0gOyB0aGVuCisJCQkJIyBQYXJ0aXRpb24gZGV0ZWN0ZWQsIGp1c3QgcXVpdAorCQkJCWV4aXQgMAorCQkJZmkKKwkJCWlmIFsgISAtZiAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vc2l6ZSBdIDsgdGhlbgorCQkJCSMgTm8gc2l6ZSBhdCBhbGwKKwkJCQlleGl0IDAKKwkJCWZpCisJCQlpZiBbIGBjYXQgL3N5cy9ibG9jay8ke0RFVkJBU0V9L3NpemVgID09IDAgXSA7IHRoZW4KKwkJCQkjIGVtcHR5IGRldmljZSwgYmFpbCBvdXQKKwkJCQlleGl0IDAKKwkJCWZpCisJCWZpCisJCSMgZmlyc3QgYWxsb3cgZnN0YWIgdG8gZGV0ZXJtaW5lIHRoZSBtb3VudHBvaW50CisJCWlmICEgbW91bnQgL2Rldi8kTURFViA+IC9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCU1PVU5UUE9JTlQ9IiR7TURFVl9BVVRPTU9VTlRfUk9PVH0vJE1ERVYiCisJCQlta2RpciAiJE1PVU5UUE9JTlQiCisJCQltb3VudCAtdCBhdXRvIC9kZXYvJE1ERVYgIiRNT1VOVFBPSU5UIgorCQlmaQorCQk7OworCXJlbW92ZSkKKwkJTU9VTlRQT0lOVD1gZ3JlcCAiXi9kZXYvJE1ERVZccyIgL3Byb2MvbW91bnRzIHwgY3V0IC1kJyAnIC1mIDJgCisJCWlmIFsgISAteiAiJE1PVU5UUE9JTlQiIF0KKwkJdGhlbgorCQkJdW1vdW50ICIkTU9VTlRQT0lOVCIKKwkJCXJtZGlyICIkTU9VTlRQT0lOVCIKKwkJZWxzZQorCQkJdW1vdW50IC9kZXYvJE1ERVYKKwkJZmkKKwkJOzsKKwkqKQorCQkjIFVuZXhwZWN0ZWQga2V5d29yZAorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlOTNkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mCkBAIC0wLDAgKzEsNDIgQEAKKyRNT0RBTElBUz0uKiAwOjAgNjYwIEBtb2Rwcm9iZSAiJE1PREFMSUFTIgorCitjb25zb2xlIDA6MCAwNjAwIAorY3B1X2RtYV9sYXRlbmN5IDA6MCAwNjYwIAorZmIwOjAgNDQgMDY2MCAKK2Z1bGwgMDowIDA2NjYgCitpbml0Y3RsIDA6MCAwNjAwIAoraXJjb21tWzAtOV0uKiAwOjIwIDA2NjAgCitrbWVtIDA6MTUgMDY0MCAKK2ttc2cgMDowIDA2NjAgCitsb2cgMDowIDA2NjYgCitsb29wWzAtOV0uKiAwOjYgMDY0MCAKK21lbSAwOjE1IDA2NDAgCituZXR3b3JrX2xhdGVuY3kgMDowIDA2NjAgCituZXR3b3JrX3Rocm91Z2hwdXQgMDowIDA2NjAgCitudWxsIDA6MCAwNjY2IAorcG9ydCAwOjE1IDA2NDAgCitwdG14IDA6NSAwNjY2IAorcmFtWzAtOV0uKiAwOjYgMDY0MCAKK3JhbmRvbSAwOjAgMDY2NiAKK3NkYSAwOjYgMDY0MCAKK3R0eSAwOjUgMDY2NiAKK3R0eS4qIDA6MCAwNjIwIAordXJhbmRvbSAwOjAgMDY2NiAKK3VzYmRldi4qIDA6MCAwNjYwICovZXRjL21kZXYvdXNiLnNoCit2Y3MuKiAwOjUgMDY2MCAKK3plcm8gMDowIDA2NjYgCisgCitzbmQvcGNtLiogMDowIDA2NjAKK3NuZC9jb250cm9sLiogMDowIDA2NjAKK3NuZC90aW1lciAwOjAgMDY2MAorc25kL3NlcSAwOjAgMDY2MAorc25kL21pbmkuKiAwOjAwIDA2NjAKKworaW5wdXQvZXZlbnQuKiAwOjAgMDY2MCBAL2V0Yy9tZGV2L2ZpbmQtdG91Y2hzY3JlZW4uc2gKK2lucHV0L21pY2UgMDowIDA2NjAKK2lucHV0L21vdXNlLiogMDowIDA2NjAKKwordHVuWzAtOV0qIDA6MCAwNjYwID1uZXQvCisKK1toc11kW2Etel1bMC05XT8gMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKK21tY2Jsa1swLTldLiogMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbW91bnQuYnVzeWJveCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbW91bnQuYnVzeWJveApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZWY5NDViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IG1vdW50ICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDhhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitjdXJyZW50X2Rpcj0kKHJlYWRsaW5rIC1mICQwKQorZXhwb3J0IGJpbmRpcj0kKGRpcm5hbWUgJGN1cnJlbnRfZGlyKQorCitjZCB0ZXN0c3VpdGUgfHwgZXhpdCAxCisuL3J1bnRlc3QgLXYgfCBzZWQgLXIgJ3MvXihTS0lQUEVEfFVOVEVTVEVEKTovU0tJUDovJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zaW1wbGUuc2NyaXB0IGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zaW1wbGUuc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMTY4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisKKyMgdWRoY3BjIHNjcmlwdCBlZGl0ZWQgYnkgVGltIFJpa2VyIDxUaW1AUmlrZXJzLm9yZz4KKworWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB1ZGhjcGMiICYmIGV4aXQgMQorCitSRVNPTFZfQ09ORj0iL2V0Yy9yZXNvbHYuY29uZiIKK1sgLW4gIiRzdWJuZXQiIF0gJiYgTkVUTUFTSz0ibmV0bWFzayAkc3VibmV0IgorCisjIHJldHVybiAwIGlmIHJvb3QgaXMgbW91bnRlZCBvbiBhIG5ldHdvcmsgZmlsZXN5c3RlbQorcm9vdF9pc19uZnMoKSB7CisJc2VkIC1uICdzL15bXiBdKiBcKFteIF0qXCkgXChbXiBdKlwpIC4qJC9cMSBcMi9wJyAvcHJvYy9tb3VudHMgfAorCWdyZXAgLXEgIl4vIFwobmZzXHxzbWJmc1x8bmNwXHxjb2RhXCkkIgorfQorCitoYXZlX2Jpbl9pcD0wCitpZiBbIC14IC9zYmluL2lwIF07IHRoZW4KKyAgaGF2ZV9iaW5faXA9MQorICBCUk9BRENBU1Q9ImJyb2FkY2FzdCArIgorZmkKKworWyAtbiAiJGJyb2FkY2FzdCIgXSAmJiBCUk9BRENBU1Q9ImJyb2FkY2FzdCAkYnJvYWRjYXN0IgorCitjYXNlICIkMSIgaW4KKwlkZWNvbmZpZykKKwkJaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF07IHRoZW4KKwkJCS9zYmluL3Jlc29sdmNvbmYgLWQgIiR7aW50ZXJmYWNlfS51ZGhjcGMiCisJCWZpCisJCWlmICEgcm9vdF9pc19uZnMgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwIGFkZHIgZmx1c2ggZGV2ICRpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgbGluayBzZXQgZGV2ICRpbnRlcmZhY2UgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3NiaW4vaWZjb25maWcgJGludGVyZmFjZSAwLjAuMC4wCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorCQlmaQorCQk7OworCisJcmVuZXd8Ym91bmQpCisgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaXAgYWRkciBhZGQgZGV2ICRpbnRlcmZhY2UgbG9jYWwgJGlwLyRtYXNrICRCUk9BRENBU1QKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvc2Jpbi9pZmNvbmZpZyAkaW50ZXJmYWNlICRpcCAkQlJPQURDQVNUICRORVRNQVNLCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbIC1uICIkcm91dGVyIiBdIDsgdGhlbgorCQkJaWYgISByb290X2lzX25mcyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlwIHJvdXRlIGRlbCBkZWZhdWx0IGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSByb3V0ZSBkZWwgZGVmYXVsdCBndyAwLjAuMC4wIGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisJCQlmaQorCisJCQltZXRyaWM9MTAKKwkJCWZvciBpIGluICRyb3V0ZXIgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgcm91dGUgYWRkIGRlZmF1bHQgdmlhICRpIG1ldHJpYyAkbWV0cmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkaSBkZXYgJGludGVyZmFjZSBtZXRyaWMgJG1ldHJpYyAyPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWM9JCgoJG1ldHJpYyArIDEpKQorCQkJZG9uZQorCQlmaQorCisJCSMgVXBkYXRlIHJlc29sdmVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCQlSPSIiCisJCVsgLW4gIiRkb21haW4iIF0gJiYgUj0iZG9tYWluICRkb21haW4KKyIKKwkJZm9yIGkgaW4gJGRuczsgZG8KKwkJCWVjaG8gIiQwOiBBZGRpbmcgRE5TICRpIgorCQkJUj0iJHtSfW5hbWVzZXJ2ZXIgJGkKKyIKKwkJZG9uZQorCisJCWlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdOyB0aGVuCisJCQllY2hvIC1uICIkUiIgfCAvc2Jpbi9yZXNvbHZjb25mIC1hICIke2ludGVyZmFjZX0udWRoY3BjIgorCQllbHNlCisJCQllY2hvIC1uICIkUiIgPiAiJFJFU09MVl9DT05GIgorCQlmaQorCQk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljNGQxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nCkBAIC0wLDAgKzEsNzcgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgU3lzdGVtIGxvZ2dlcgorIyMjIEVORCBJTklUIElORk8KKworc2V0IC1lCisKK2lmIFsgLWYgL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mIF07IHRoZW4KKwkuIC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZgorCUxPR19MT0NBTD0wCisJTE9HX1JFTU9URT0wCisJZm9yIEQgaW4gJERFU1RJTkFUSU9OOyBkbworCQlpZiBbICIkRCIgPSAiYnVmZmVyIiBdOyB0aGVuCisJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1DJEJVRkZFUlNJWkUiCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJmaWxlIiBdOyB0aGVuCisJCQlpZiBbIC1uICIkTE9HRklMRSIgXTsgdGhlbgorCQkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLU8gJExPR0ZJTEUiCisJCQlmaQorCQkJaWYgWyAtbiAiJFJPVEFURVNJWkUiIF07IHRoZW4KKwkJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1zICRST1RBVEVTSVpFIgorCQkJZmkKKwkJCWlmIFsgLW4gIiRST1RBVEVHRU5TIiBdOyB0aGVuCisJCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtYiAkUk9UQVRFR0VOUyIKKwkJCWZpCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJyZW1vdGUiIF07IHRoZW4KKwkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLVIgJFJFTU9URSIKKwkJCUxPR19SRU1PVEU9MQorCQlmaQorCWRvbmUKKwlpZiBbICIkTE9HX0xPQ0FMIiA9ICIxIiAtYSAiJExPR19SRU1PVEUiID0gIjEiIF07IHRoZW4KKwkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtTCIKKwlmaQorCWlmIFsgIiRSRURVQ0UiID0gInllcyIgXTsgdGhlbgorCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1TIgorCWZpCisJaWYgWyAiJERST1BEVVBMSUNBVEVTIiA9ICJ5ZXMiIF07IHRoZW4KKwkgICAgU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtRCIKKwlmaQorCWlmIFsgLW4gIiRMT0dMRVZFTCIgXTsgdGhlbgorCSAgICBTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1sICRMT0dMRVZFTCIKKwlmaQorZWxzZQorCSMgZGVmYXVsdDogbG9nIHRvIDE2SyBzaG0gY2lyY3VsYXIgYnVmZmVyCisJU1lTTE9HX0FSR1M9Ii1DIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIHN5c2xvZ2Qva2xvZ2Q6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiBzeXNsb2dkIC1hIC9zYmluL3N5c2xvZ2QgLS0gLW4gJFNZU0xPR19BUkdTCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4ga2xvZ2QgLWEgL3NiaW4va2xvZ2QgLS0gLW4KKwllY2hvICJkb25lIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgc3lzbG9nZC9rbG9nZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uIHN5c2xvZ2QKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiBrbG9nZAorCWVjaG8gImRvbmUiCisJOzsKKyAgcmVzdGFydCkKKyAgCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6IHN5c2xvZyB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy1zdGFydHVwLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy1zdGFydHVwLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhNDUwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZgpAQCAtMCwwICsxLDEzIEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGlzIHVzZWQgYnkgdGhlIGJ1c3lib3ggc3lzbG9nIGluaXQgc2NyaXB0LAorIyAvZXRjL2luaXQuZC9zeXNsb2dbLmJ1c3lib3hdIHRvIHNldCBzeXNsb2cgY29uZmlndXJhdGlvbiBhdCBzdGFydCB0aW1lLgorCitERVNUSU5BVElPTj1maWxlCQkjIGxvZyBkZXN0aW5hdGlvbnMgKGJ1ZmZlciBmaWxlIHJlbW90ZSkKK0xPR0ZJTEU9L3Zhci9sb2cvbWVzc2FnZXMJIyB3aGVyZSB0byBsb2cgKGZpbGUpCitSRU1PVEU9bG9naG9zdDo1MTQJCSMgd2hlcmUgdG8gbG9nIChzeXNsb2cgcmVtb3RlKQorUkVEVUNFPW5vCQkJIyByZWR1Y2Utc2l6ZSBsb2dnaW5nCitEUk9QRFVQTElDQVRFUz1ubwkJIyB3aGV0aGVyIHRvIGRyb3AgZHVwbGljYXRlIGxvZyBlbnRyaWVzCisjUk9UQVRFU0laRT0wCQkJIyByb3RhdGUgbG9nIGlmIGdyb3duIGJleW9uZCBYIFtrQnl0ZV0KKyNST1RBVEVHRU5TPTMJCQkjIGtlZXAgWCBnZW5lcmF0aW9ucyBvZiByb3RhdGVkIGxvZ3MKK0JVRkZFUlNJWkU9NjQJCQkjIHNpemUgb2YgY2lyY3VsYXIgYnVmZmVyIFtrQnl0ZV0KK0ZPUkVHUk9VTkQ9bm8JCQkjIHJ1biBpbiBmb3JlZ3JvdW5kIChkb24ndCB1c2UhKQorI0xPR0xFVkVMPTUJCQkjIGxvY2FsIGxvZyBsZXZlbCAoYmV0d2VlbiAxIGFuZCA4KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cuY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViYjYzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLmNvbmYKQEAgLTAsMCArMSBAQAorIyAgL2V0Yy9zeXNsb2cuY29uZglDb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1c3lib3gncyBzeXNsb2dkIHV0aWxpdHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvdW1vdW50LmJ1c3lib3ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3Vtb3VudC5idXN5Ym94Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzNzMxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3Vtb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IHVtb3VudCAkQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjkyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMKQEAgLTAsMCArMSw0MSBAQAorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKworIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisjIHRoZWlyIGNvcHlyaWdodC4KK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9CisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29kZXBhZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29kZXBhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NzAxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29udHJpYi9jb2RlcGFnZS5jfmNvZGVwYWdlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb250cmliL2NvZGVwYWdlLmMKK0BAIC0yMjksNyArMjI5LDcgQEAKKyAJICByZXR1cm4gMDsKKyAKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXAorLVdhcm5pbmc6IENQIGZvcm1hdCBpcyBhIGhhY2shXG4KKytXYXJuaW5nOiBDUCBmb3JtYXQgaXMgYSBoYWNrIVxuXAorICAgICAgICAgIFRoZSBmaWxlcyBwcm9kdWNlZCBtYXkgb3IgbWF5IG5vdCBiZSB1c2FibGUhXG4iKTsKKyAKKyAJc3ByaW50ZihvdXRmaWxlLCAiJWQuY3AiLCBDUEVudHJ5SGVhZGVyLmNvZGVwYWdlKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZjUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9zaG93a2V5LmN+Y29tcGlsZQkxOTk5LTA4LTI1IDE3OjIwOjA4LjAwMDAwMDAwMCAtMDQwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvc2hvd2tleS5jCTIwMDQtMDUtMDkgMDM6MDM6MjMuMDAwMDAwMDAwIC0wNDAwCitAQCAtMjY0LDcgKzI2NCw2IEBACisgCSAgYnJlYWs7CisgCWNhc2UgY21kX2tleW1hcDoKKyAJICBwcmludGYoIilcbiIpOworLQlkZWZhdWx0OgorIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzEwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW5+Y29uZmlndXJlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW4KK0BAIC0yLDEzICsyLDE0IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgCisgIyBJbml0aWFsaXplCistQUNfSU5JVChrYmR0b29scy9sb2Fka2V5cy55KQorK0FDX0lOSVQKKytBQ19DT05GSUdfU1JDRElSKFtrYmR0b29scy9sb2Fka2V5cy55XSkKKyAKKyBkZWZpbmUoY3RfdW5pY29kZWRhdGFfZGVmYXVsdCwvdXNyL3NoYXJlL3VuaWRhdGEvVW5pY29kZURhdGEtMi50eHQpCisgY3RfbG9jYWxkYXRhZGlyX2RlZmF1bHQ9L3Vzci9sb2NhbC9zaGFyZSAgICAgIyBpZmYgLS1lbmFibGUtbG9jYWxkYXRhZGlyIHdpdGhvdXQgc3BlY2lmaWMgZGlyCisgCisgI0FDX0NPTkZJR19BVVhfRElSKGF1dG9jb25mKQorLUFDX0NBTk9OSUNBTF9TWVNURU0KKytBQ19DQU5PTklDQUxfVEFSR0VUKFtdKQorIEFNX0lOSVRfQVVUT01BS0UoY29uc29sZS10b29scywgMC4zLjIpCisgCisgIyBEZWZhdWx0cworQEAgLTI1LDcgKzI2LDYgQEAKKyAjIGkxOG4gc3R1ZmYKKyBBTExfTElOR1VBUz0iY3MgZGUgcnUgZ2EgZnIiCisgQU1fR05VX0dFVFRFWFQKKy1BQ19PVVRQVVRfQ09NTUFORFMoW3NlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZV0pCisgCisgQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwgIi91c3Ivc2hhcmUvbG9jYWxlIikKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MWViOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0ZpeCB0aGUgZm9sbG93aW5nIGVycm9yIGRldGVjdGVkIHdpdGggaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MgKHRoZQorbXVsdGlsaWIgeDg2LTY0IGxpYjMyIGNvbXBpbGVyKToKKyAgICAuLi9saWIvY3R1dGlscy8ubGlicy9saWJjdHV0aWxzLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRfa2VybmVsX3NmbScKKyAgICBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworSXQgc2VlbXMgdGhhdCBsaWJjdHV0aWxzLnNvICh0aGUgbGlicmFyeSB0aGF0IHVzZXMgZ2V0X2tlcm5lbF9zZm0pIG11c3QKK2JlIHN0YXRlZCBiZWZvcmUgbGliY29uc29sZS5zbyAodGhlIGxpYnJhcnkgdGhhdCBleHBvcnRzIHRoZSBmdW5jdGlvbikgd2hlbgordXNpbmcgbXVsdGlsaWIgZ2NjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9mb250ZmlsZXRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xMCw1ICsxMCw1IEBAIEVYVFJBX0RJU1QgPSBmb250czJ2aXJmb250LmMgdmlyZm9udC5oCisgCisgIyBsaWJjb25zb2xlIGlzIG5lZWRlZCBieSBjdHV0aWxzCisgTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKy0JLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSBcCistCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisrCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIvdnR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy92dHRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi92dHRvb2xzL01ha2VmaWxlLmFtCitAQCAtNyw5ICs3LDkgQEAgYmluX1BST0dSQU1TID0gY2h2dCBkZWFsbG9jdnQgd3JpdGV2dCBmZworIAl2Y3N0aW1lIHZ0LWlzLVVURjggb3BlbnZ0IEBSRVNJWkVDT05TQAorIEVYVFJBX1BST0dSQU1TID0gcmVzaXplY29ucworIAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIHZjc3RpbWVfTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEKKyBzY3JlZW5kdW1wX0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9rYmR0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xNSw5ICsxNSw5IEBAIEVYVFJBX1BST0dSQU1TID0gZ2V0a2V5Y29kZXMgc2V0a2V5Y29kZXMKKyBsb2Fka2V5c19TT1VSQ0VTID0gbG9hZGtleXMueSBhbmFseXplLmwKKyAKKyBZRkxBR1MgPSAtZAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIGxvYWRrZXlzX0xEQUREID0gJChMREFERCkgQExFWExJQkAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2tiZHJhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3MGJlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1BhdGNoIGZyb20gTWF0dGhpYXMgR29lYmwgPG9lQG0uZ29lYmwubmV0PgorQWRkZWQgdmlhIE9FIGJ1Z3RyYWNrZXI6IGJ1ZyAjNDc4CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9rYmRfbW9kZS5jLm9yaWcKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL2tiZF9tb2RlLmMKK0BAIC0yOSwxMSArMjksMTYgQEAKKyAgIE9QVCgiLXUgLS11bmljb2RlICAiLCBfKCJVVEYtOCBtb2RlIChVTklDT0RFKSIpKTsKKyAgIE9QVCgiLXMgLS1zY2FuY29kZSAiLCBfKCJzY2FuY29kZSBtb2RlIChSQVcpIikpOworICAgT1BUKCIgICAtLW1vZGU9ezhiaXQsa2V5Y29kZSx1bmljb2RlLHNjYW5jb2RlfSAiLCBfKCJzZXQgbW9kZSIpKTsKKysgIE9QVCgiLXIgLS1yYXRlPVJBVEUgIiwgXygic2V0IHJlcGVhdCByYXRlIChkZWZhdWx0OiAzMykiKSk7CisrICBPUFQoIi1kIC0tZGVsYXk9REVMQVkgIiwgXygic2V0IHJlcGVhdCBkZWxheSAoZGVmYXVsdDogMjUwKSIpKTsKKyAKKyAgIE9QVCgiLWggLS1oZWxwICAgICAiLCBIRUxQREVTQyk7CisgICBPUFQoIi1WIC0tdmVyc2lvbiAgIiwgVkVSU0lPTkRFU0MpOworIH0KKyAKKytpbnQgcmF0ZT0tMTsKKytpbnQgZGVsYXk9LTE7CisrCisgc3RhdGljIGludCBwYXJzZV9jbWRsaW5lIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICAgaW50IG1vZGUgPSAtMTsKK0BAIC00NiwxMSArNTEsMTMgQEAKKyAgICAgICB7ICJtb2RlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ20nIH0sCisgICAgICAgeyAic2NhbmNvZGUiICwgbm9fYXJndW1lbnQsIE5VTEwsICdzJyB9LAorICAgICAgIHsgInVuaWNvZGUiICAsIG5vX2FyZ3VtZW50LCBOVUxMLCAndScgfSwKKysgICAgICB7ICJyYXRlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3InIH0sCisrICAgICAgeyAiZGVsYXkiICAgICwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJyB9LAorICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgIH07CisgICAgIGludCBjOworIAorLSAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3UiLCBsb25nX29wdHMsIE5VTEwpKSAhPSBFT0YpIAorKyAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3VyOmQ6IiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gRU9GKSAKKyAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICBjYXNlICdoJzoKKyAJdXNhZ2UgKCk7CitAQCAtNTgsNiArNjUsMTQgQEAKKyAgICAgICBjYXNlICdWJzoKKyAJdmVyc2lvbiAoKTsKKyAJZXhpdCgwKTsKKysgICAgICBjYXNlICdyJzoKKysJcmF0ZSA9IGF0b2kob3B0YXJnKTsKKysJbW9kZSA9IC0yOworKwlicmVhazsKKysgICAgICBjYXNlICdkJzoKKysJZGVsYXkgPSBhdG9pKG9wdGFyZyk7CisrCW1vZGUgPSAtMjsKKysJYnJlYWs7CisgICAgICAgY2FzZSAnYSc6CisgCW1vZGUgPSBLX1hMQVRFOworIAlicmVhazsKK0BAIC0xMjksNiArMTQ0LDIwIEBACisgICAgICAgZXhpdCgwKTsKKyAgICAgfQorICAgCisrICBpZiAoIHJhdGUgIT0gLTEgfHwgZGVsYXkgIT0gLTEgKQorKyAgICB7CisrICAgIHN0cnVjdCBrYmRfcmVwZWF0IGtiZF9yZXA7CisrICAgIGtiZF9yZXAuZGVsYXkgPSBkZWxheTsKKysgICAga2JkX3JlcC5wZXJpb2QgPSByYXRlOworKyAgICBpZiAoaW9jdGwoZmQsIEtES0JEUkVQLCAma2JkX3JlcCkpCisrICAgICAgeworKwlmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOworKwlwZXJyb3IoXygiOiBlcnJvciBzZXR0aW5nIGtleWJvYXJkIHJlcGVhdCBtb2RlXG4iKSk7CisrCWV4aXQoMSk7CisrICAgICAgfQorKyAgICBpZihtb2RlPT0tMikgZXhpdCgwKTsKKysgICAgfQorKyAgCisgICBpZiAoaW9jdGwoZmQsIEtEU0tCTU9ERSwgbW9kZSkpCisgICAgIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2xjbWVzc2FnZS5tNCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9sY21lc3NhZ2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkNDdhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9sY21lc3NhZ2UubTQKQEAgLTAsMCArMSwyNCBAQAorIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50CisjIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0IGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKyMgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisjIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorIyBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworIyBzZXJpYWwgMgorCitBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorICBbaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKyAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorICAgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICAgIGZpCisgIGZpXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9uby1kZXAtb24tbGliZmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm8tZGVwLW9uLWxpYmZsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzM1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm8tZGVwLW9uLWxpYmZsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK05vIHJlYXNvbiB0byBsaW5rIHdpdGggbGliZmwgc2luY2UgJ2xvYWRrZXlzJyBpbXBsZW1lbnRzCitpdHMgb3duIHl5d3JhcCgpL3l5bGV4KCkgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEphY29iIEtyb29uIDxqYWNvYi5rcm9vbkBtaWtyb2RpZGFrdC5zZT4KKworSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcva2JkdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCitAQCAtMTksOCArMTksNiBAQCBMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9sCisgCS4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCisgCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisgCistbG9hZGtleXNfTERBREQgPSAkKExEQUREKSBATEVYTElCQAorLQorIGJpbl9TQ1JJUFRTID0gbWtfbW9kbWFwCisgCisgbm9pbnN0X0hFQURFUlMgPSBsb2Fka2V5cy5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm9kb2NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ2MDkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitUaGUgZG9jcyBuZWVkIHRvb2xzIHdlIGRvbid0IGhhdmUgdG8gYnVpbGQgc28gZGlzYWJsZSB0aGVtLgorCitBbHNvIHJlbW92ZSBpbnRsIHNpbmNlIHRoZSBNYWtlZmlsZSBkb2Vzbid0IHdvcmsgd2l0aCAzLjgyIGFuZCB3ZQorZG9uJ3Qgd2FudCB0byBidWlsZCBsaWJpbnRsIGFueXdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorUlAgMjAxMi8xMC8xNworCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9NYWtlZmlsZS5hbQkxOTk5LTA0LTE1IDAxOjMzOjI0LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZWZpbGUuYW0JMjAxMi0xMC0xNyAxMTo0ODoxNC4xMDcwNjkxNDUgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorICMgLSotIG1ha2VmaWxlIC0qLQorIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCistU1VCRElSUyA9IGxpYiBmb250ZmlsZXRvb2xzIHZ0dG9vbHMga2JkdG9vbHMgc2NyZWVuZm9udHRvb2xzIGNvbnRyaWIgZG9jIFwKKy0JY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8gaW50bAorK1NVQkRJUlMgPSBsaWIgZm9udGZpbGV0b29scyB2dHRvb2xzIGtiZHRvb2xzIHNjcmVlbmZvbnR0b29scyBjb250cmliIFwKKysJY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8KKyAKKyBFWFRSQV9ESVNUID0gQlVHUyBSRUxFQVNFIENSRURJVFMgQ09QWUlORy5rYmQgbG9jYWwtc2NyaXB0cy8qIGRlYmlhbi8qICoubHNtCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi91Y2xpYmMtZmlsZW5vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTUwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGaXhpbmcgdGhlIGxvY2FsZSBpc3N1ZXMgaXNuJ3QgZW5vdWdoLCBjb25zb2xlLXRvb2xzIGFsc28gZG9lcyBhIGNvdXBsZSBvZgorb3RoZXIgcHJldHR5IHN0dXBpZCB0aGluZ3MgKGxpa2UgRklMRSAqZjsgZi0+X2ZpbGVubyBpbnN0ZWFkIG9mIGZpbGVubyhmKSksCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY2ZvbnQvZm9udHN0cnVjdC5jLmFyawkyMDA1LTA1LTIyIDE5OjEyOjM4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2Nmb250L2ZvbnRzdHJ1Y3QuYwkyMDA1LTA1LTIyIDE5OjEzOjIzLjAwMDAwMDAwMCArMDAwMAorQEAgLTUwLDggKzUwLDcgQEAKKyAgICAqIGdldCBmaWxlc2l6ZQorICAgICovCisgICAKKy0gIC8qIEZJWE1FOiBzaG91bGQgbm90IHVzZSBfZmlsZW5vICEgKi8KKy0gIGlmIChmc3RhdChmb250ZmlsZS0+X2ZpbGVubywgJnN0YnVmKSA9PSAtMSkKKysgIGlmIChmc3RhdChmaWxlbm8oZm9udGZpbGUpLCAmc3RidWYpID09IC0xKQorICAgICBnb3RvIHJzZl9yZXR1cm5fZXJyb3I7CisgICAKKyAgIGlmIChTX0lTUkVHKHN0YnVmLnN0X21vZGUpKQorQEAgLTIxMSw4ICsyMTAsNyBAQAorICAgICogZ2V0IGZpbGVzaXplCisgICAgKi8KKyAgIAorLSAgLyogRklYTUU6IHNob3VsZCBub3QgdXNlIF9maWxlbm8gISAqLworLSAgaWYgKGZzdGF0KGZvbnRmaWxlLT5fZmlsZW5vLCAmc3RidWYpID09IC0xKQorKyAgaWYgKGZzdGF0KGZpbGVubyhmb250ZmlsZSksICZzdGJ1ZikgPT0gLTEpCisgICAgIGdvdG8gcmZnX3JldHVybl9lcnJvcjsKKyAgIAorICAgaWYgKFNfSVNSRUcoc3RidWYuc3RfbW9kZSkpCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY29uc29sZS9hY20uYy5hcmsJMjAwNS0wNS0yMiAxOToxNzoxNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jb25zb2xlL2FjbS5jCTIwMDUtMDUtMjIgMTk6MTc6MjMuMDAwMDAwMDAwICswMDAwCitAQCAtMzAsNyArMzAsNyBAQAorICAgbGN0X2Jvb2xlYW4gcGFyc2VfZmFpbGVkID0gRmFsc2U7CisgICBsY3RfYm9vbGVhbiBpc191bmljb2RlOworIAorLSAgaWYgKGZzdGF0KGZwLT5fZmlsZW5vLCAmc3RidWYpKSAKKysgIGlmIChmc3RhdChmaWxlbm8oZnApLCAmc3RidWYpKSAKKyAgICAgcGVycm9yKF8oIkNhbm5vdCBzdGF0IEFDTSBmaWxlIikpLCBleGl0KDEpOworIAorICAgLyogZmlyc3QgdHJ5IGEgd2cxNS1jaGFybWFwIChnbGliYykgZmlsZSBmb3JtYXQgKi8KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2luY2x1ZGUvbGN0L2xvY2FsLmguYXJrCTIwMDUtMDUtMjIgMTk6MDg6NTQuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9pbmNsdWRlL2xjdC9sb2NhbC5oCTIwMDUtMDUtMjIgMTk6MDk6MTIuMDAwMDAwMDAwICswMDAwCitAQCAtOCw3ICs4LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgCistI2lmZGVmIEhBVkVfTE9DQUxFX0gKKysjaWYgZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSAmJiBkZWZpbmVkKEhBVkVfTElCSU5UTF9IKQorICMgaW5jbHVkZSA8bGliaW50bC5oPgorICMgZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0IChTdHJpbmcpCisgIyBpZmRlZiBnZXR0ZXh0X25vb3AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29sc18wLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29sc18wLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBhNWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLmtiZDttZDU9OWIyZDkxNTExZDNkODBkNGQyMGFjNmU2YjAxMzdmZTkiCitTVU1NQVJZID0gIkFsbG93cyB5b3UgdG8gc2V0LXVwIGFuZCBtYW5pcHVsYXRlIHRoZSBMaW51eCBjb25zb2xlIgorREVTQ1JJUFRJT04gPSAiUHJvdmlkZXMgdG9vbHMgdGhhdCBlbmFibGUgdGhlIHNldC11cCBhbmQgbWFuaXB1bGF0aW9uIG9mIHRoZSBsaW51eCBjb25zb2xlIGFuZCBjb25zb2xlLWZvbnQgZmlsZXMuIgorUFIgPSAicjgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xjdC9jb25zb2xlLXRvb2xzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb2RlcGFnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRyYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1maWxlbm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tZGVwLW9uLWxpYmZsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xjbWVzc2FnZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gImJmMjE1NjRmYzM4YjNhZjg1M2VmNzI0YmFiZGRiYWNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlYTZiNDQxNjcyZGFjZDI1MTA3OWZjODVlZDMyMmUxOTYyODJlMGU2NmMxNjMwM2VjNjRjM2EyYjFjMTI2YzIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke1N9L200CisJY3AgJHtXT1JLRElSfS9sY21lc3NhZ2UubTQgJHtTfS9tNC8KKwlybSAtZiAke1N9L2FjaW5jbHVkZS5tNAorCWNwICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworYmluZGlyX3Byb2dzID0gImNodnQgZGVhbGxvY3Z0IGZnY29uc29sZSBvcGVudnQiCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30iCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTJiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaApAQCAtMCwwICsxLDEyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0tCisKK1doZW4gImNwIC1pIC0tdXBkYXRlIG9sZCBuZXciIHdvdWxkIGRvIG5vdGhpbmcgYmVjYXVzZSAibmV3IiBpcworbmV3ZXIgdGhhbiAib2xkIiwgY3Agd291bGQgbm9uZXRoZWxlc3MgcHJvbXB0IGZvciB3aGV0aGVyIGl0IGlzCitvayB0byBvdmVyd3JpdGUgIm5ldyIuICBUaGVuLCByZWdhcmRsZXNzIG9mIHRoZSByZXNwb25zZSAoYmVjYXVzZQorb2YgdGhlIC0tdXBkYXRlIG9wdGlvbiksIGNwIHdvdWxkIGRvIG5vdGhpbmcuCisKK1RoZSBmb2xsb3dpbmcgcGF0Y2ggZWxpbWluYXRlcyB0aGUgdW5uZWNlc3NhcnkgcHJvbXB0IGluIHRoYXQgY2FzZS4KKworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmMgYi9zcmMvY29weS5jCitpbmRleCBiN2JmNzNiLi4wZTU0OWQyIDEwMDY0NAorLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEyMTAsNiArMTIxMCwzMCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCSAgICAgIHJldHVybiBmYWxzZTsKKyAJICAgIH0KKworKwkgIGlmICghU19JU0RJUiAoc3JjX21vZGUpICYmIHgtPnVwZGF0ZSkKKysJICAgIHsKKysJICAgICAgLyogV2hlbiBwcmVzZXJ2aW5nIHRpbWUgc3RhbXBzIChidXQgbm90IG1vdmluZyB3aXRoaW4gYSBmaWxlCisrCQkgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKysJCSBsZXNzIHRoYW4gdGhlIHNvdXJjZSBtZXJlbHkgYmVjYXVzZSBvZiB0aW1lIHN0YW1wCisrCQkgdHJ1bmNhdGlvbi4gICovCisrCSAgICAgIGludCBvcHRpb25zID0gKCh4LT5wcmVzZXJ2ZV90aW1lc3RhbXBzCisrCQkJICAgICAgJiYgISAoeC0+bW92ZV9tb2RlCisrCQkJCSAgICAmJiBkc3Rfc2Iuc3RfZGV2ID09IHNyY19zYi5zdF9kZXYpKQorKwkJCSAgICAgPyBVVElNRUNNUF9UUlVOQ0FURV9TT1VSQ0UKKysJCQkgICAgIDogMCk7CisrCisrCSAgICAgIGlmICgwIDw9IHV0aW1lY21wIChkc3RfbmFtZSwgJmRzdF9zYiwgJnNyY19zYiwgb3B0aW9ucykpCisrCQl7CisrCQkgIC8qIFdlJ3JlIHVzaW5nIC0tdXBkYXRlIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG9sZGVyCisrCQkgICAgIHRoYW4gdGhlIHNvdXJjZSwgc28gZG8gbm90IGNvcHkgb3IgbW92ZS4gIFByZXRlbmQgdGhlCisrCQkgICAgIHJlbmFtZSBzdWNjZWVkZWQsIHNvIHRoZSBjYWxsZXIgKGlmIGl0J3MgbXYpIGRvZXNuJ3QKKysJCSAgICAgZW5kIHVwIHJlbW92aW5nIHRoZSBzb3VyY2UgZmlsZS4gICovCisrCQkgIGlmIChyZW5hbWVfc3VjY2VlZGVkKQorKwkJICAgICpyZW5hbWVfc3VjY2VlZGVkID0gdHJ1ZTsKKysJCSAgcmV0dXJuIHRydWU7CisrCQl9CisrCSAgICB9CisrCisgCSAgLyogV2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlLCB3ZSBtYXkgZW5kIHVwCisgCSAgICAgcmV0dXJuaW5nIGVhcmx5LCBhbmQgaGVuY2Ugbm90IGNvcHlpbmcvbW92aW5nIHRoZSBmaWxlLgorIAkgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbnRlcmFjdGl2ZSBgbmVnYXRpdmUnIHJlcGx5IHRvIHRoZQorQEAgLTEzMDIsMzAgKzEzMjYsNiBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCQkgICAgICByZXR1cm4gZmFsc2U7CisgCQkgICAgfQorIAkJfQorLQorLQkgICAgICBpZiAoeC0+dXBkYXRlKQorLQkJeworLQkJICAvKiBXaGVuIHByZXNlcnZpbmcgdGltZSBzdGFtcHMgKGJ1dCBub3QgbW92aW5nIHdpdGhpbiBhIGZpbGUKKy0JCSAgICAgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKy0JCSAgICAgbGVzcyB0aGFuIHRoZSBzb3VyY2UgbWVyZWx5IGJlY2F1c2Ugb2YgdGltZSBzdGFtcAorLQkJICAgICB0cnVuY2F0aW9uLiAgKi8KKy0JCSAgaW50IG9wdGlvbnMgPSAoKHgtPnByZXNlcnZlX3RpbWVzdGFtcHMKKy0JCQkJICAmJiAhICh4LT5tb3ZlX21vZGUKKy0JCQkJCSYmIGRzdF9zYi5zdF9kZXYgPT0gc3JjX3NiLnN0X2RldikpCistCQkJCSA/IFVUSU1FQ01QX1RSVU5DQVRFX1NPVVJDRQorLQkJCQkgOiAwKTsKKy0KKy0JCSAgaWYgKDAgPD0gdXRpbWVjbXAgKGRzdF9uYW1lLCAmZHN0X3NiLCAmc3JjX3NiLCBvcHRpb25zKSkKKy0JCSAgICB7CistCQkgICAgICAvKiBXZSdyZSB1c2luZyAtLXVwZGF0ZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCBvbGRlcgorLQkJCSB0aGFuIHRoZSBzb3VyY2UsIHNvIGRvIG5vdCBjb3B5IG9yIG1vdmUuICBQcmV0ZW5kIHRoZQorLQkJCSByZW5hbWUgc3VjY2VlZGVkLCBzbyB0aGUgY2FsbGVyIChpZiBpdCdzIG12KSBkb2Vzbid0CistCQkJIGVuZCB1cCByZW1vdmluZyB0aGUgc291cmNlIGZpbGUuICAqLworLQkJICAgICAgaWYgKHJlbmFtZV9zdWNjZWVkZWQpCistCQkJKnJlbmFtZV9zdWNjZWVkZWQgPSB0cnVlOworLQkJICAgICAgcmV0dXJuIHRydWU7CistCQkgICAgfQorLQkJfQorIAkgICAgfQorCisgCSAgaWYgKHgtPm1vdmVfbW9kZSkKK2RpZmYgLS1naXQgYS90ZXN0cy9tdi91cGRhdGUgYi90ZXN0cy9tdi91cGRhdGUKK2luZGV4IDBjMDYwMjQuLjZjM2QxNDkgMTAwNzU1CistLS0gYS90ZXN0cy9tdi91cGRhdGUKKysrKyBiL3Rlc3RzL212L3VwZGF0ZQorQEAgLTEsNyArMSw3IEBACisgIyEvYmluL3NoCisgIyBtYWtlIHN1cmUgLS11cGRhdGUgd29ya3MgYXMgYWR2ZXJ0aXNlZAorCistIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CitAQCAtNDYsMTEgKzQ2LDE2IEBAIGZpCisKKyBmYWlsPTAKKworLWZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKy0gICMgVGhpcyBpcyBhIG5vLW9wLgorLSAgJGNwX29yX212IC0tdXBkYXRlIG9sZCBuZXcgfHwgZmFpbD0xCistICBjYXNlICJgY2F0IG5ld2AiIGluIG5ldykgOzsgKikgZmFpbD0xIDs7IGVzYWMKKy0gIGNhc2UgImBjYXQgb2xkYCIgaW4gb2xkKSA7OyAqKSBmYWlsPTEgOzsgZXNhYworK2ZvciBpbnRlcmFjdGl2ZSBpbiAnJyAtaTsgZG8KKysgIGZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKysgICAgIyBUaGlzIGlzIGEgbm8tb3AsIHdpdGggbm8gcHJvbXB0LgorKyAgICAjIFdpdGggY29yZXV0aWxzLTYuOSBhbmQgZWFybGllciwgdXNpbmcgLS11cGRhdGUgd2l0aCAtaSB3b3VsZAorKyAgICAjIG1pc3Rha2VubHkgZWxpY2l0IGEgcHJvbXB0LgorKyAgICAkY3Bfb3JfbXYgJGludGVyYWN0aXZlIC0tdXBkYXRlIG9sZCBuZXcgPCAvZGV2L251bGwgPiBvdXQgMj4mMSB8fCBmYWlsPTEKKysgICAgdGVzdCAtcyBvdXQgJiYgZmFpbD0xCisrICAgIGNhc2UgImBjYXQgbmV3YCIgaW4gbmV3KSA7OyAqKSBmYWlsPTEgOzsgZXNhYworKyAgICBjYXNlICJgY2F0IG9sZGAiIGluIG9sZCkgOzsgKikgZmFpbD0xIDs7IGVzYWMKKysgIGRvbmUKKyBkb25lCisKKyAjIFRoaXMgd2lsbCBhY3R1YWxseSBwZXJmb3JtIHRoZSByZW5hbWUuCistLQorMS41LjMucmMxLjE2Lmc5ZDZmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3M2Q3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXggdGhlIGZvbGxvd2luZyBpc3N1ZSBzbyB0aGF0IGNvcmV1dGlscyBjYW4gYnVpbGQgd2l0aCBBQ0w6CisKK2NvbmZpZ3VyZTogV0FSTklORzogbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3VuZCBvciBub3QgdXNhYmxlLgorY29uZmlndXJlOiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC4KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2FjbC5tNCB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L2FjbC5tNCBiL200L2FjbC5tNAoraW5kZXggZDZhNDQ4YS4uYTlkNDgzNiAxMDA2NDQKKy0tLSBhL200L2FjbC5tNAorKysrIGIvbTQvYWNsLm00CitAQCAtMTU5LDcgKzE1OSw3IEBAIEFDX0RFRlVOKFtnbF9BQ0xfR0VUX0ZJTEVdLAorICAgICAgICAgICBdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT1ub10sCistICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKysgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9eWVzXSldKQorIAorICAgQVNfSUYoW3Rlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXNdLCBbJDFdLCBbJDJdKQorIF0pCistLSAKKzEuNy43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY2MWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGUgaW5zdGFsbCBjb21tYW5kIGRvZXNuJ3Qgb3ZlciB3cml0ZSB0aGUgZGFuZ2xpbmcgc3ltbGluaywgZm9yCitleGFtcGxlOgorCiskIGluc3RhbGwgZmlsZUEgL3RtcC9maWxlQQorCitJZiAvdG1wL2ZpbGVBIGlzIGEgZGFuZ2xpbmcgc3ltbGluaywgdGhlcmUgd291bGQgYmUgYW4gZXJyb3I6CisKK2luc3RhbGw6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlICcvdG1wL2ZpbGVBJzogRmlsZSBleGlzdHMKKworVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBjb3B5LmM6CisKKyAgaWYgKCFuZXdfZHN0KQorICAgIHsKKyAgICAgIGlmIChYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnJvciAoMCwgZXJybm8sIF8oImNhbm5vdCBzdGF0ICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuZXdfZHN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCitYU1RBVCgpIHVzZSBzdGF0KCkgZm9yIGRzdF9uYW1lKHRoZSBkYW5nbGluZyBzeW1saW5rIC90bXAvZmlsZUEpIHdoZW4KK2luc3RhbGwuYyBpbnZva2VzIGl0LCBhbmQgc3RhdCB3aWxsIHNldCBlcnJubyB0byBFTk9FTlQsIGFuZCB0aGVuCituZXdfZHN0IHdpbGwgYmUgc2V0IHRvIHRydWUgd2hpY2ggbWVhbnMgdGhhdCAvdG1wL2ZpbGVBIGRvZXNuJ3QgZXhpc3QsCit0aGVuIHdlIHdpbGwgY3JlYXRlIC90bXAvZmlsZUEgd2l0aG91dCByZW1vdmUgaXQgZmlyc3QsIHNvIHRoZSBlcnJvcgorY29tZXMuCisKK1RoaXMgaXMgZml4ZWQgaW4gYSB3YXkgd2hpY2ggYWRkcyB0aGUgbWVtYmVyIGNtZF9pbnN0YWxsIGluCitzdHJ1Y3QgY3Bfb3B0aW9ucyB0byBtYWtlIHN1cmUgbXkgY2hhbmdlIG9ubHkgYWZmZWN0ZWQgdG8gdGhlIGluc3RhbGwKK2NvbW1hbmQgYW5kIHVzZSBsc3RhdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL2NvcHkuYyAgICB8ICAgMTAgKysrKysrKysrLQorIHNyYy9jb3B5LmggICAgfCAgICAzICsrKworIHNyYy9pbnN0YWxsLmMgfCAgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29weS5jIGIvc3JjL2NvcHkuYworLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEwMjksNiArMTAyOSw3IEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAgIGJvb2wgZGVsYXllZF9vazsKKyAgIGJvb2wgY29waWVkX2FzX3JlZ3VsYXIgPSBmYWxzZTsKKyAgIGJvb2wgcHJlc2VydmVfbWV0YWRhdGE7CisrICBpbnQgZHN0X3N0YXRfcmVzdWx0OworIAorICAgaWYgKHgtPm1vdmVfbW9kZSAmJiByZW5hbWVfc3VjY2VlZGVkKQorICAgICAqcmVuYW1lX3N1Y2NlZWRlZCA9IGZhbHNlOworQEAgLTEwNjksNyArMTA3MCwxNCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCisgICBpZiAoIW5ld19kc3QpCisgICAgIHsKKy0gICAgICBpZiAoWFNUQVQgKHgsIGRzdF9uYW1lLCAmZHN0X3NiKSAhPSAwKQorKyAgICAgIGlmICggeC0+Y21kX2luc3RhbGwgJiYgKCB4LT5iYWNrdXBfdHlwZSA9PSBub19iYWNrdXBzKSkKKysgICAgICAgIGRzdF9zdGF0X3Jlc3VsdCA9IGxzdGF0IChkc3RfbmFtZSwgJmRzdF9zYik7CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBkc3Rfc3RhdF9yZXN1bHQgPSBYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpOworKyAgICAgICAgfQorKworKyAgICAgIGlmIChkc3Rfc3RhdF9yZXN1bHQgIT0gMCkKKyAJeworIAkgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgCSAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuaCBiL3NyYy9jb3B5LmgKKy0tLSBhL3NyYy9jb3B5LmgKKysrKyBiL3NyYy9jb3B5LmgKK0BAIC0xMTQsNiArMTE0LDkgQEAgc3RydWN0IGNwX29wdGlvbnMKKyAgICAgIElmIHRoYXQgZmFpbHMsIHRoZW4gcmVzb3J0IHRvIGNvcHlpbmcuICAqLworICAgYm9vbCBtb3ZlX21vZGU7CisgCisrICAvKiBGb3IgdGhlIGluc3RhbGwgY29tbWFuZCAqLworKyAgYm9vbCBjbWRfaW5zdGFsbDsKKysKKyAgIC8qIFdoZXRoZXIgdGhpcyBwcm9jZXNzIGhhcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIHRvIGNob3duIGEgZmlsZQorICAgICAgd2hvc2Ugb3duZXIgaXMgbm90IHRoZSBlZmZlY3RpdmUgdXNlciBJRC4gICovCisgICBib29sIGNob3duX3ByaXZpbGVnZXM7CitkaWZmIC0tZ2l0IGEvc3JjL2luc3RhbGwuYyBiL3NyYy9pbnN0YWxsLmMKKy0tLSBhL3NyYy9pbnN0YWxsLmMKKysrKyBiL3NyYy9pbnN0YWxsLmMKK0BAIC0xNDksNiArMTQ5LDcgQEAgY3Bfb3B0aW9uX2luaXQgKHN0cnVjdCBjcF9vcHRpb25zICp4KQorICAgeC0+aGFyZF9saW5rID0gZmFsc2U7CisgICB4LT5pbnRlcmFjdGl2ZSA9IElfVU5TUEVDSUZJRUQ7CisgICB4LT5tb3ZlX21vZGUgPSBmYWxzZTsKKysgIHgtPmNtZF9pbnN0YWxsID0gdHJ1ZTsKKyAgIHgtPmNob3duX3ByaXZpbGVnZXMgPSBjaG93bl9wcml2aWxlZ2VzICgpOworICAgeC0+b25lX2ZpbGVfc3lzdGVtID0gZmFsc2U7CisgICB4LT5wcmVzZXJ2ZV9vd25lcnNoaXAgPSBmYWxzZTsKKy0tIAorMS43LjAuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNWEyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaApAQCAtMCwwICsxLDM3NSBAQAorRnJvbSAxNzBiZTQwMjNiYmY5ZTk2OThhNzA5ZTAzMjY1OTQ1NTg4YWM4ZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IE5vdiAyMDEzIDAwOjIxOjUwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvYy9jb3JldXRpbHMudGV4aTogVXNlICdAaXRlbScgaW5zdGVhZCBvZiAnQGl0ZW14JworCitVc2UgJ0BpdGVtJyBpbnN0ZWFkIG9mICdAaXRlbXgnIGluIHNldmVyYWwgcGxhY2VzLCBhcyBUZXhpbmZvIDUgcmVmdXNlcwordG8gcHJvY2VzcyBhbiAnQGl0ZW14JyB0aGF0IGlzIG5vdCBwcmVjZWRlZCBieSBhbiAnQGl0ZW0nLiAgRW5zdXJlIHRoYXQKK25vZGUgZXh0ZW5kZWQgbmFtZXMgaW4gbWVudXMgYW5kIHNlY3Rpb25pbmcgYXJlIGNvbnNpc3RlbnQsIGFuZCB0aGF0CitvcmRlcmluZyBhbmQgcHJlc2VuY2Ugb2Ygbm9kZXMgaW4gbWVudXMgYW5kIGluIHRoZSBhY3R1YWwgdGV4dCBhcmUKK2NvbnNpc3RlbnQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRnJvbTogY29yZXV0aWxzLjc2MjAubjcubmFiYmxlLmNvbSwgYnVnIzExODI4XQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9jb3JldXRpbHMudGV4aSB8IDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jb3JldXRpbHMudGV4aSBiL2RvYy9jb3JldXRpbHMudGV4aQoraW5kZXggNTg4MTQ3Zi4uMmRhZTNmZSAxMDA2NDQKKy0tLSBhL2RvYy9jb3JldXRpbHMudGV4aQorKysrIGIvZG9jL2NvcmV1dGlscy50ZXhpCitAQCAtNTU1LDcgKzU1NSw3IEBAIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkuICBAeHJlZntUYXJnZXQgZGlyZWN0b3J5fS4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFNpCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TX0gZm9yCitAQCAtNTc4LDcgKzU3OCw3IEBAIFVzZSB0aGUgQG9wdGlvbnstLXNpfSBvcHRpb24gaWYgeW91IHByZWZlciBwb3dlcnMgb2YgMTAwMC4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFN0cmlwVHJhaWxpbmdTbGFzaGVzCistQGl0ZW14IEB3e0BrYmR7LS1zdHJpcC10cmFpbGluZy1zbGFzaGVzfX0KKytAaXRlbSBAd3tAa2Jkey0tc3RyaXAtdHJhaWxpbmctc2xhc2hlc319CisgQG9waW5kZXggLS1zdHJpcC10cmFpbGluZy1zbGFzaGVzCisgQGNpbmRleCBzdHJpcHBpbmcgdHJhaWxpbmcgc2xhc2hlcworIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGVhY2ggQHZhcntzb3VyY2V9IGFyZ3VtZW50LgorQEAgLTI0OTYsNyArMjQ5Niw3IEBAIGJ5IDEwNDg1NzYuCisgSG93ZXZlciwgaWYgQHZhcntufSBzdGFydHMgd2l0aCBhIEBzYW1wey19LAorIHByaW50IGFsbCBidXQgdGhlIGxhc3QgQHZhcntufSBieXRlcyBvZiBlYWNoIGZpbGUuCisgCistQGl0ZW14IC1uIEB2YXJ7bn0KKytAaXRlbSAtbiBAdmFye259CisgQGl0ZW14IC0tbGluZXM9QHZhcntufQorIEBvcGluZGV4IC1uCisgQG9waW5kZXggLS1saW5lcworQEAgLTI2MzMsNyArMjYzMyw3IEBAIFRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIEBvcHRpb257LS1mb2xsb3c9bmFtZSAtLXJldHJ5fS4gIFRoYXQgaXMsIHRhaWwKKyB3aWxsIGF0dGVtcHQgdG8gcmVvcGVuIGEgZmlsZSB3aGVuIGl0IGlzIHJlbW92ZWQuICBTaG91bGQgdGhpcyBmYWlsLCB0YWlsCisgd2lsbCBrZWVwIHRyeWluZyB1bnRpbCBpdCBiZWNvbWVzIGFjY2Vzc2libGUgYWdhaW4uCisgCistQGl0ZW14IC0tcmV0cnkKKytAaXRlbSAtLXJldHJ5CisgQG9waW5kZXggLS1yZXRyeQorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBtYWlubHkgd2hlbiBmb2xsb3dpbmcgYnkgbmFtZSAoaS5lLiwgd2l0aAorIEBvcHRpb257LS1mb2xsb3c9bmFtZX0pLgorQEAgLTI2NDEsNyArMjY0MSw3IEBAIFdpdGhvdXQgdGhpcyBvcHRpb24sIHdoZW4gdGFpbCBlbmNvdW50ZXJzIGEgZmlsZSB0aGF0IGRvZXNuJ3QKKyBleGlzdCBvciBpcyBvdGhlcndpc2UgaW5hY2Nlc3NpYmxlLCBpdCByZXBvcnRzIHRoYXQgZmFjdCBhbmQKKyBuZXZlciBjaGVja3MgaXQgYWdhaW4uCisgCistQGl0ZW14IC0tc2xlZXAtaW50ZXJ2YWw9QHZhcntudW1iZXJ9CisrQGl0ZW0gLS1zbGVlcC1pbnRlcnZhbD1AdmFye251bWJlcn0KKyBAb3BpbmRleCAtLXNsZWVwLWludGVydmFsCisgQ2hhbmdlIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gaXRlcmF0aW9ucyAodGhlIGRlZmF1bHQgaXMgMS4wKS4KKyBEdXJpbmcgb25lIGl0ZXJhdGlvbiwgZXZlcnkgc3BlY2lmaWVkIGZpbGUgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQgaGFzCitAQCAtMjY1MSw3ICsyNjUxLDcgQEAgSGlzdG9yaWNhbCBpbXBsZW1lbnRhdGlvbnMgb2YgQGNvbW1hbmR7dGFpbH0gaGF2ZSByZXF1aXJlZCB0aGF0CisgYW4gYXJiaXRyYXJ5IGZsb2F0aW5nIHBvaW50IG51bWJlciAodXNpbmcgYSBwZXJpb2QgYmVmb3JlIGFueQorIGZyYWN0aW9uYWwgZGlnaXRzKS4KKyAKKy1AaXRlbXggLS1waWQ9QHZhcntwaWR9CisrQGl0ZW0gLS1waWQ9QHZhcntwaWR9CisgQG9waW5kZXggLS1waWQKKyBXaGVuIGZvbGxvd2luZyBieSBuYW1lIG9yIGJ5IGRlc2NyaXB0b3IsIHlvdSBtYXkgc3BlY2lmeSB0aGUgcHJvY2VzcyBJRCwKKyBAdmFye3BpZH0sIG9mIHRoZSBzb2xlIHdyaXRlciBvZiBhbGwgQHZhcntmaWxlfSBhcmd1bWVudHMuICBUaGVuLCBzaG9ydGx5CitAQCAtMjY3NCw3ICsyNjc0LDcgQEAgdGVybWluYXRlIHVudGlsIGxvbmcgYWZ0ZXIgdGhlIHJlYWwgd3JpdGVyIGhhcyB0ZXJtaW5hdGVkLgorIE5vdGUgdGhhdCBAb3B0aW9uey0tcGlkfSBjYW5ub3QgYmUgc3VwcG9ydGVkIG9uIHNvbWUgc3lzdGVtczsgQGNvbW1hbmR7dGFpbH0KKyB3aWxsIHByaW50IGEgd2FybmluZyBpZiB0aGlzIGlzIHRoZSBjYXNlLgorIAorLUBpdGVteCAtLW1heC11bmNoYW5nZWQtc3RhdHM9QHZhcntufQorK0BpdGVtIC0tbWF4LXVuY2hhbmdlZC1zdGF0cz1AdmFye259CisgQG9waW5kZXggLS1tYXgtdW5jaGFuZ2VkLXN0YXRzCisgV2hlbiB0YWlsaW5nIGEgZmlsZSBieSBuYW1lLCBpZiB0aGVyZSBoYXZlIGJlZW4gQHZhcntufSAoZGVmYXVsdAorIG49QHZhbHVle0RFRkFVTFRfTUFYX05fVU5DSEFOR0VEX1NUQVRTX0JFVFdFRU5fT1BFTlN9KSBjb25zZWN1dGl2ZQorQEAgLTI2ODYsNyArMjY4Niw3IEBAIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gd2hlbiB0YWlsIHByaW50cyB0aGUgbGFzdCBwcmUtcm90YXRpb24gbGluZXMKKyBhbmQgd2hlbiBpdCBwcmludHMgdGhlIGxpbmVzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCBpbiB0aGUgbmV3IGxvZyBmaWxlLgorIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGZvbGxvd2luZyBieSBuYW1lLgorIAorLUBpdGVteCAtbiBAdmFye259CisrQGl0ZW0gLW4gQHZhcntufQorIEBpdGVteCAtLWxpbmVzPUB2YXJ7bn0KKyBAb3BpbmRleCAtbgorIEBvcGluZGV4IC0tbGluZXMKK0BAIC0yODE3LDcgKzI4MTcsNyBAQCBvcHRpb24uCisgQG9waW5kZXggLS1udW1lcmljLXN1ZmZpeGVzCisgVXNlIGRpZ2l0cyBpbiBzdWZmaXhlcyByYXRoZXIgdGhhbiBsb3dlci1jYXNlIGxldHRlcnMuCisgCistQGl0ZW14IC0tdmVyYm9zZQorK0BpdGVtIC0tdmVyYm9zZQorIEBvcGluZGV4IC0tdmVyYm9zZQorIFdyaXRlIGEgZGlhZ25vc3RpYyB0byBzdGFuZGFyZCBlcnJvciBqdXN0IGJlZm9yZSBlYWNoIG91dHB1dCBmaWxlIGlzIG9wZW5lZC4KKyAKK0BAIC0zMDU1LDcgKzMwNTUsNyBAQCBQcmludCBvbmx5IHRoZSBuZXdsaW5lIGNvdW50cy4KKyBAb3BpbmRleCAtLW1heC1saW5lLWxlbmd0aAorIFByaW50IG9ubHkgdGhlIG1heGltdW0gbGluZSBsZW5ndGhzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTMyNTAsNyArMzI1MCw3IEBAIGFuIE1ENSBjaGVja3N1bSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzb2NpYXRlZCBmaWxlLCBvciBpZiBubyB2YWxpZAorIGxpbmUgaXMgZm91bmQsIEBjb21tYW5ke21kNXN1bX0gZXhpdHMgd2l0aCBub256ZXJvIHN0YXR1cy4gIE90aGVyd2lzZSwKKyBpdCBleGl0cyBzdWNjZXNzZnVsbHkuCisgCistQGl0ZW14IC0tc3RhdHVzCisrQGl0ZW0gLS1zdGF0dXMKKyBAb3BpbmRleCAtLXN0YXR1cworIEBjaW5kZXggdmVyaWZ5aW5nIE1ENSBjaGVja3N1bXMKKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgb25seSB3aGVuIHZlcmlmeWluZyBjaGVja3N1bXMuCitAQCAtNTgzNyw3ICs1ODM3LDcgQEAgY29tbWFuZCBsaW5lIHVubGVzcyB0aGUgQG9wdGlvbnstLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZX0gKEBvcHRpb257LUh9KSwKKyBJZiBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCBzcGVjaWZpZXMgYSBzeW1ib2xpYyBsaW5rLCBzaG93IGluZm9ybWF0aW9uCisgZm9yIHRoZSBmaWxlIHRoZSBsaW5rIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gZm9yIHRoZSBsaW5rIGl0c2VsZi4KKyAKKy1AaXRlbXggLS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmUtc3ltbGluay10by1kaXIKKytAaXRlbSAtLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZS1zeW1saW5rLXRvLWRpcgorIEBvcGluZGV4IC0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lLXN5bWxpbmstdG8tZGlyCisgQGNpbmRleCBzeW1ib2xpYyBsaW5rcywgZGVyZWZlcmVuY2luZworIERvIG5vdCBkZXJlZmVyZW5jZSBzeW1ib2xpYyBsaW5rcywgd2l0aCBvbmUgZXhjZXB0aW9uOgorQEAgLTcwMTUsMTUgKzcwMTUsMTUgQEAgSWYgc3BlY2lmaWVkLCB0aGUgQHZhcnthdHRyaWJ1dGVfbGlzdH0gbXVzdCBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0Cisgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorIAorIEB0YWJsZSBAc2FtcAorLUBpdGVteCBtb2RlCisrQGl0ZW0gbW9kZQorIFByZXNlcnZlIHRoZSBmaWxlIG1vZGUgYml0cyBhbmQgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCistQGl0ZW14IG93bmVyc2hpcAorK0BpdGVtIG93bmVyc2hpcAorIFByZXNlcnZlIHRoZSBvd25lciBhbmQgZ3JvdXAuICBPbiBtb3N0IG1vZGVybiBzeXN0ZW1zLAorIG9ubHkgdXNlcnMgd2l0aCBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIG1heSBjaGFuZ2UgdGhlIG93bmVyIG9mIGEgZmlsZSwKKyBhbmQgb3JkaW5hcnkgdXNlcnMKKyBtYXkgcHJlc2VydmUgdGhlIGdyb3VwIG93bmVyc2hpcCBvZiBhIGZpbGUgb25seSBpZiB0aGV5IGhhcHBlbiB0byBiZQorIGEgbWVtYmVyIG9mIHRoZSBkZXNpcmVkIGdyb3VwLgorLUBpdGVteCB0aW1lc3RhbXBzCisrQGl0ZW0gdGltZXN0YW1wcworIFByZXNlcnZlIHRoZSB0aW1lcyBvZiBsYXN0IGFjY2VzcyBhbmQgbGFzdCBtb2RpZmljYXRpb24sIHdoZW4gcG9zc2libGUuCisgSW4gZ2VuZXJhbCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHByZXNlcnZlIHRoZXNlIGF0dHJpYnV0ZXMKKyB3aGVuIHRoZSBhZmZlY3RlZCBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KK0BAIC03MDMxLDEyICs3MDMxLDEyIEBAIEhvd2V2ZXIsIEZyZWVCU0Qgbm93IHByb3ZpZGVzIHRoZSBAY29kZXtsdXRpbWVzfSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMKKyBpdCBwb3NzaWJpbGUgZXZlbiBmb3Igc3ltYm9saWMgbGlua3MuICBIb3dldmVyLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMKKyBub3QgeWV0IHRha2UgYWR2YW50YWdlIG9mIHRoYXQuCisgQGMgRklYTUU6IG9uY2Ugd2UgcHJvdmlkZSBsdXRpbWVzIHN1cHBvcnQsIHVwZGF0ZSB0aGUgYWJvdmUuCistQGl0ZW14IGxpbmtzCisrQGl0ZW0gbGlua3MKKyBQcmVzZXJ2ZSBpbiB0aGUgZGVzdGluYXRpb24gZmlsZXMKKyBhbnkgbGlua3MgYmV0d2VlbiBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlcy4KKyBAYyBHaXZlIGV4YW1wbGVzIGlsbHVzdHJhdGluZyBob3cgaGFyZCBsaW5rcyBhcmUgcHJlc2VydmVkLgorIEBjIEFsc28sIHNob3cgaG93IHNvZnQgbGlua3MgbWFwIHRvIGhhcmQgbGlua3Mgd2l0aCAtTCBhbmQgLUguCistQGl0ZW14IGFsbAorK0BpdGVtIGFsbAorIFByZXNlcnZlIGFsbCBmaWxlIGF0dHJpYnV0ZXMuCisgRXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFsbCBvZiB0aGUgYWJvdmUuCisgQGVuZCB0YWJsZQorQEAgLTcwNDksMTIgKzcwNDksMTIgQEAgbW9kZSBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlLCBtaW51cyB0aGUgYml0cyBzZXQgaW4gdGhlCisgdW1hc2sgYW5kIG1pbnVzIHRoZSBzZXQtdXNlci1JRCBhbmQgc2V0LWdyb3VwLUlEIGJpdHMuCisgQHhyZWZ7RmlsZSBwZXJtaXNzaW9uc30uCisgCistQGl0ZW14IEB3e0BrYmR7LS1uby1wcmVzZXJ2ZX09QHZhcnthdHRyaWJ1dGVfbGlzdH19CisrQGl0ZW0gQHd7QGtiZHstLW5vLXByZXNlcnZlfT1AdmFye2F0dHJpYnV0ZV9saXN0fX0KKyBAY2luZGV4IGZpbGUgaW5mb3JtYXRpb24sIHByZXNlcnZpbmcKKyBEbyBub3QgcHJlc2VydmUgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiAgVGhlIEB2YXJ7YXR0cmlidXRlX2xpc3R9CisgaGFzIHRoZSBzYW1lIGZvcm0gYXMgZm9yIEBvcHRpb257LS1wcmVzZXJ2ZX0uCisgCistQGl0ZW14IC0tcGFyZW50cworK0BpdGVtIC0tcGFyZW50cworIEBvcGluZGV4IC0tcGFyZW50cworIEBjaW5kZXggcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBAY29tbWFuZHtjcH0KKyBGb3JtIHRoZSBuYW1lIG9mIGVhY2ggZGVzdGluYXRpb24gZmlsZSBieSBhcHBlbmRpbmcgdG8gdGhlIHRhcmdldAorQEAgLTcwNzAsNyArNzA3MCw3IEBAIGNwIC0tcGFyZW50cyBhL2IvYyBleGlzdGluZ19kaXIKKyBjb3BpZXMgdGhlIGZpbGUgQGZpbGV7YS9iL2N9IHRvIEBmaWxle2V4aXN0aW5nX2Rpci9hL2IvY30sIGNyZWF0aW5nCisgYW55IG1pc3NpbmcgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzc0Miw3ICs3NzQyLDcgQEAgUHJvbXB0IHdoZXRoZXIgdG8gb3ZlcndyaXRlIGVhY2ggZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSwgcmVnYXJkbGVzcworIG9mIGl0cyBwZXJtaXNzaW9ucy4KKyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGFmZmlybWF0aXZlLCB0aGUgZmlsZSBpcyBza2lwcGVkLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzg0Nyw3ICs3ODQ3LDcgQEAgZmlsZXMgYXJlIG5hbWVkIG9yIGlmIGEgcmVjdXJzaXZlIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgSWdub3JlIGFueQorIHByZXZpb3VzIEBvcHRpb257LS1mb3JjZX0gKEBvcHRpb257LWZ9KSBvcHRpb24uICBFcXVpdmFsZW50IHRvCisgQG9wdGlvbnstLWludGVyYWN0aXZlPW9uY2V9LgorIAorLUBpdGVteCAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKytAaXRlbSAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKyBAb3BpbmRleCAtLWludGVyYWN0aXZlCisgU3BlY2lmeSB3aGVuIHRvIGlzc3VlIGFuIGludGVyYWN0aXZlIHByb21wdC4gIEB2YXJ7d2hlbn0gbWF5IGJlCisgb21pdHRlZCwgb3Igb25lIG9mOgorQEAgLTc4NjYsNyArNzg2Niw3IEBAIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgRXF1aXZhbGVudCB0byBAb3B0aW9uey1JfS4KKyBTcGVjaWZ5aW5nIEBvcHRpb257LS1pbnRlcmFjdGl2ZX0gYW5kIG5vIEB2YXJ7d2hlbn0gaXMgZXF1aXZhbGVudCB0bworIEBvcHRpb257LS1pbnRlcmFjdGl2ZT1hbHdheXN9LgorIAorLUBpdGVteCAtLW9uZS1maWxlLXN5c3RlbQorK0BpdGVtIC0tb25lLWZpbGUtc3lzdGVtCisgQG9waW5kZXggLS1vbmUtZmlsZS1zeXN0ZW0KKyBAY2luZGV4IG9uZSBmaWxlIHN5c3RlbSwgcmVzdHJpY3RpbmcgQGNvbW1hbmR7cm19IHRvCisgV2hlbiByZW1vdmluZyBhIGhpZXJhcmNoeSByZWN1cnNpdmVseSwgc2tpcCBhbnkgZGlyZWN0b3J5IHRoYXQgaXMgb24gYQorQEAgLTc4ODQsNyArNzg4NCw3IEBAIHdhcm4gYWJvdXQgYW5kIHNraXAgZGlyZWN0b3JpZXMgb24gb3RoZXIgZmlsZSBzeXN0ZW1zLgorIE9mIGNvdXJzZSwgdGhpcyB3aWxsIG5vdCBzYXZlIHlvdXIgQGZpbGV7L2hvbWV9IGlmIGl0IGFuZCB5b3VyCisgY2hyb290IGhhcHBlbiB0byBiZSBvbiB0aGUgc2FtZSBmaWxlIHN5c3RlbS4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIGRlc3RydWN0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LAorQEAgLTc4OTIsNyArNzg5Miw3IEBAIHdoZW4gdXNlZCB3aXRoIHRoZSBAb3B0aW9uey0tcmVjdXJzaXZlfSBvcHRpb24uCisgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBkZXN0cnVjdGlvbgorIERvIG5vdCB0cmVhdCBAZmlsZXsvfSBzcGVjaWFsbHkgd2hlbiByZW1vdmluZyByZWN1cnNpdmVseS4KK0BAIC04ODc0LDcgKzg4NzQsNyBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBvd25lcnNoaXAgY2Fubm90IGJlCisgY2hhbmdlZC4KKyAKKy1AaXRlbXggQHd7QGtiZHstLWZyb219PUB2YXJ7b2xkLW93bmVyfX0KKytAaXRlbSBAd3tAa2Jkey0tZnJvbX09QHZhcntvbGQtb3duZXJ9fQorIEBvcGluZGV4IC0tZnJvbQorIEBjaW5kZXggc3ltYm9saWMgbGlua3MsIGNoYW5naW5nIG93bmVyCisgQ2hhbmdlIGEgQHZhcntmaWxlfSdzIG93bmVyc2hpcCBvbmx5IGlmIGl0IGhhcyBjdXJyZW50IGF0dHJpYnV0ZXMgc3BlY2lmaWVkCitAQCAtODkyOCwxNCArODkyOCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTA1NCwxNCArOTA1NCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTE3NSwxNCArOTE3NSwxNCBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBwZXJtaXNzaW9ucyBjYW5ub3QgYmUKKyBjaGFuZ2VkLgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LgorIFdpdGhvdXQgQG9wdGlvbnstLXJlY3Vyc2l2ZX0sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgQ2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW55IHByZWNlZGluZyBAb3B0aW9uey0tcHJlc2VydmUtcm9vdH0gb3B0aW9uLgorQEAgLTk2MDMsNyArOTYwMyw3IEBAIFRoZSBwcm9ncmFtIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zLiAgQWxzbyBzZWUgQHJlZntDb21tb24gb3B0aW9uc30uCisgQG9waW5kZXggLS1hbGwKKyBTaG93IGNvdW50cyBmb3IgYWxsIGZpbGVzLCBub3QganVzdCBkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggLS1hcHBhcmVudC1zaXplCisrQGl0ZW0gLS1hcHBhcmVudC1zaXplCisgQG9waW5kZXggLS1hcHBhcmVudC1zaXplCisgUHJpbnQgYXBwYXJlbnQgc2l6ZXMsIHJhdGhlciB0aGFuIGRpc2sgdXNhZ2UuICBUaGUgYXBwYXJlbnQgc2l6ZSBvZiBhCisgZmlsZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcG9ydGVkIGJ5IEBjb2Rle3djIC1jfSBvbiByZWd1bGFyIGZpbGVzLAorQEAgLTk2NTQsNyArOTY1NCw3IEBAIERvZXMgbm90IGFmZmVjdCBvdGhlciBzeW1ib2xpYyBsaW5rcy4gIFRoaXMgaXMgaGVscGZ1bCBmb3IgZmluZGluZworIG91dCB0aGUgZGlzayB1c2FnZSBvZiBkaXJlY3Rvcmllcywgc3VjaCBhcyBAZmlsZXsvdXNyL3RtcH0sIHdoaWNoCisgYXJlIG9mdGVuIHN5bWJvbGljIGxpbmtzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTk3MzMsNyArOTczMyw3IEBAIE91dHB1dCBhIG51bGwgYnl0ZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSwgcmF0aGVyIHRoYW4gYSBuZXdsaW5lLgorIFRoaXMgb3B0aW9uIGVuYWJsZXMgb3RoZXIgcHJvZ3JhbXMgdG8gcGFyc2UgdGhlIG91dHB1dCBvZiBAY29tbWFuZHtkdX0KKyBldmVuIHdoZW4gdGhhdCBvdXRwdXQgd291bGQgY29udGFpbiBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgbmV3bGluZXMuCisgCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TUJ9IGZvcgorQEAgLTk3NTQsMTMgKzk3NTQsMTMgQEAgRGlzcGxheSBvbmx5IGEgdG90YWwgZm9yIGVhY2ggYXJndW1lbnQuCisgUmVwb3J0IHRoZSBzaXplIG9mIGVhY2ggZGlyZWN0b3J5IHNlcGFyYXRlbHksIG5vdCBpbmNsdWRpbmcgdGhlIHNpemVzCisgb2Ygc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZQorK0BpdGVtIC0tdGltZQorIEBvcGluZGV4IC0tdGltZQorIEBjaW5kZXggbGFzdCBtb2RpZmllZCBkYXRlcywgZGlzcGxheWluZyBpbiBAY29tbWFuZHtkdX0KKyBTaG93IHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IG1vZGlmaWNhdGlvbiBvZiBhbnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LAorIG9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZT1jdGltZQorK0BpdGVtIC0tdGltZT1jdGltZQorIEBpdGVteCAtLXRpbWU9c3RhdHVzCisgQGl0ZW14IC0tdGltZT11c2UKKyBAb3BpbmRleCAtLXRpbWUKK0BAIC05NzcwLDcgKzk3NzAsNyBAQCBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzLgorIFNob3cgdGhlIG1vc3QgcmVjZW50IHN0YXR1cyBjaGFuZ2UgdGltZSAodGhlIEBzYW1we2N0aW1lfSBpbiB0aGUgaW5vZGUpIG9mCisgYW55IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUuCisgCistQGl0ZW14IC0tdGltZT1hdGltZQorK0BpdGVtIC0tdGltZT1hdGltZQorIEBpdGVteCAtLXRpbWU9YWNjZXNzCisgQG9waW5kZXggLS10aW1lCisgQG9waW5kZXggYXRpbWVAcnssIHNob3cgdGhlIG1vc3QgcmVjZW50fQorQEAgLTk5MTEsNyArOTkxMSw3IEBAICQgc3RhdCAtLWZvcm1hdD0lZDolaSAvIC91c3IKKyAyMDU3OjIKKyBAZW5kIGV4YW1wbGUKKyAKKy1AaXRlbXggLS1wcmludGY9QHZhcntmb3JtYXR9CisrQGl0ZW0gLS1wcmludGY9QHZhcntmb3JtYXR9CisgQG9waW5kZXggLS1wcmludGY9QHZhcntmb3JtYXR9CisgQGNpbmRleCBvdXRwdXQgZm9ybWF0CisgVXNlIEB2YXJ7Zm9ybWF0fSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmb3JtYXQuCitAQCAtMTIyNDAsNyArMTIyNDAsNyBAQCBPdmVycmlkZXMgYWxsIG90aGVyIG9wdGlvbnMuCisgQG9waW5kZXggLXMKKyBJZ25vcmVkOyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHZlcnNpb25zIG9mIEBjb21tYW5ke3dob30uCisgCistQGl0ZW14IC11CisrQGl0ZW0gLXUKKyBAb3BpbmRleCAtdQorIEBjaW5kZXggaWRsZSB0aW1lCisgQWZ0ZXIgdGhlIGxvZ2luIHRpbWUsIHByaW50IHRoZSBudW1iZXIgb2YgaG91cnMgYW5kIG1pbnV0ZXMgdGhhdCB0aGUKK0BAIC0xMjI1NCw3ICsxMjI1NCw3IEBAIHVzZXIgaGFzIGJlZW4gaWRsZS4gIEBzYW1wey59IG1lYW5zIHRoZSB1c2VyIHdhcyBhY3RpdmUgaW4gdGhlIGxhc3QgbWludXRlLgorIExpc3Qgb25seSB0aGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJvY2Vzc2VzIHZpYSB3aGljaCB0aGUKKyBzeXN0ZW0gaXMgd2FpdGluZyBmb3IgYSB1c2VyIHRvIGxvZ2luLiAgVGhlIHVzZXIgbmFtZSBpcyBhbHdheXMgQHNhbXB7TE9HSU59LgorIAorLUBpdGVteCAtLWxvb2t1cAorK0BpdGVtIC0tbG9va3VwCisgQG9waW5kZXggLS1sb29rdXAKKyBBdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBob3N0bmFtZXMgZm91bmQgaW4gdXRtcCB0aHJvdWdoIGEgRE5TIGxvb2t1cC4gIFRoaXMKKyBpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgZGVsYXlzIG9uIHN5c3RlbXMgd2l0aAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWkxOG4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzNzIyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoCkBAIC0wLDAgKzEsNDA1MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIHB1cnBvc2UgaXMgbGluMThudXgvbHNiIGNvbXBsaWFuY2UuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvc29ydC1tYi10ZXN0cwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw1OCBAQAorKyMhIC9iaW4vc2gKKytjYXNlICQjIGluCisrICAwKSB4eD0nLi4vLi4vc3JjL3NvcnQnOzsKKysgICopIHh4PSIkMSI7OworK2VzYWMKKyt0ZXN0ICIkVkVSQk9TRSIgJiYgZWNobz1lY2hvIHx8IGVjaG89OgorKyRlY2hvIHRlc3RpbmcgcHJvZ3JhbTogJHh4CisrZXJyb3JzPTAKKyt0ZXN0ICIkc3JjZGlyIiB8fCBzcmNkaXI9LgorK3Rlc3QgIiRWRVJCT1NFIiAmJiAkeHggLS12ZXJzaW9uIDI+IC9kZXYvbnVsbAorKworK2V4cG9ydCBMQ19BTEw9ZW5fVVMuVVRGLTgKKytsb2NhbGUgLWsgTENfQ1RZUEUgMj4mMSB8IGdyZXAgLXEgY2hhcm1hcC4qVVRGLTggfHwgZXhpdCA3NworK2Vycm9ycz0wCisrCisrJHh4IC10IO+8oCAtazIgLW4gbWIxLkkgPiBtYjEuTworK2NvZGU9JD8KKytpZiB0ZXN0ICRjb2RlICE9IDA7IHRoZW4KKysgICRlY2hvICJUZXN0IG1iMSBmYWlsZWQ6ICR4eCByZXR1cm4gY29kZSAkY29kZSBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgdmFsdWUgMCIgMT4mMgorKyAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYAorK2Vsc2UKKysgIGNtcCBtYjEuTyAkc3JjZGlyL21iMS5YID4gL2Rldi9udWxsIDI+JjEKKysgIGNhc2UgJD8gaW4KKysgICAgMCkgaWYgdGVzdCAiJFZFUkJPU0UiOyB0aGVuICRlY2hvICJwYXNzZWQgbWIxIjsgZmk7OworKyAgICAxKSAkZWNobyAiVGVzdCBtYjEgZmFpbGVkOiBmaWxlcyBtYjEuTyBhbmQgJHNyY2Rpci9tYjEuWCBkaWZmZXIiIDE+JjIKKysgICAgICAgKGRpZmYgLWMgbWIxLk8gJHNyY2Rpci9tYjEuWCkgMj4gL2Rldi9udWxsCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgICAyKSAkZWNobyAiVGVzdCBtYjEgbWF5IGhhdmUgZmFpbGVkLiIgMT4mMgorKyAgICAgICAkZWNobyBUaGUgY29tbWFuZCAiY21wIG1iMS5PICRzcmNkaXIvbWIxLlgiIGZhaWxlZC4gMT4mMgorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgIGVzYWMKKytmaQorKworKyR4eCAtdCDvvKAgLWs0IC1uIG1iMi5JID4gbWIyLk8KKytjb2RlPSQ/CisraWYgdGVzdCAkY29kZSAhPSAwOyB0aGVuCisrICAkZWNobyAiVGVzdCBtYjIgZmFpbGVkOiAkeHggcmV0dXJuIGNvZGUgJGNvZGUgZGlmZmVycyBmcm9tIGV4cGVjdGVkIHZhbHVlIDAiIDE+JjIKKysgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWAKKytlbHNlCisrICBjbXAgbWIyLk8gJHNyY2Rpci9tYjIuWCA+IC9kZXYvbnVsbCAyPiYxCisrICBjYXNlICQ/IGluCisrICAgIDApIGlmIHRlc3QgIiRWRVJCT1NFIjsgdGhlbiAkZWNobyAicGFzc2VkIG1iMiI7IGZpOzsKKysgICAgMSkgJGVjaG8gIlRlc3QgbWIyIGZhaWxlZDogZmlsZXMgbWIyLk8gYW5kICRzcmNkaXIvbWIyLlggZGlmZmVyIiAxPiYyCisrICAgICAgIChkaWZmIC1jIG1iMi5PICRzcmNkaXIvbWIyLlgpIDI+IC9kZXYvbnVsbAorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgICAgMikgJGVjaG8gIlRlc3QgbWIyIG1heSBoYXZlIGZhaWxlZC4iIDE+JjIKKysgICAgICAgJGVjaG8gVGhlIGNvbW1hbmQgImNtcCBtYjIuTyAkc3JjZGlyL21iMi5YIiBmYWlsZWQuIDE+JjIKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICBlc2FjCisrZmkKKysKKytpZiB0ZXN0ICRlcnJvcnMgPSAwOyB0aGVuCisrICAkZWNobyBQYXNzZWQgYWxsIDExMyB0ZXN0cy4gMT4mMgorK2Vsc2UKKysgICRlY2hvIEZhaWxlZCAkZXJyb3JzIHRlc3RzLiAxPiYyCisrZmkKKyt0ZXN0ICRlcnJvcnMgPSAwIHx8IGVycm9ycz0xCisrZXhpdCAkZXJyb3JzCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjIuSQkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQXBwbGXvvKDvvKHvvKExMO+8oO+8oDIwCisrQmFuYW5h77yg77yh77yhNe+8oO+8oDMwCisrQ2l0cnVz77yg77yh77yhMjDvvKDvvKA1CisrQ2hlcnJ577yg77yh77yhMzDvvKDvvKAxMAorLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIyLlgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0NpdHJ1c++8oO+8oe+8oTIw77yg77ygNQorK0NoZXJyee+8oO+8oe+8oTMw77yg77ygMTAKKytBcHBsZe+8oO+8oe+8oTEw77yg77ygMjAKKytCYW5hbmHvvKDvvKHvvKE177yg77ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5JCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytBcHBsZe+8oDEwCisrQmFuYW5h77ygNQorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5YCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytCYW5hbmHvvKA1CisrQXBwbGXvvKAxMAorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtLmkxOG4JMjAwNy0wMS0yNCAwNzo0NzozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtCTIwMDctMDMtMDEgMTU6MDk6NTkuMDAwMDAwMDAwICswMDAwCitAQCAtNjYsMTUgKzY2LDE3IEBACisgYmlnZmllbGQuTyBiaWdmaWVsZC5FCisgIyN0ZXN0LWZpbGVzLWVuZAorIAorLUVYVFJBX0RJU1QgPSBUZXN0LnBtICR4LXRlc3RzICQoZXhwbGljaXQpICQobWFpbnRfZ2VuKQorLW5vaW5zdF9TQ1JJUFRTID0gJHgtdGVzdHMKKytydW5fZ2VuICs9IG1iMS4wIG1iMi4wCisrCisrRVhUUkFfRElTVCA9IFRlc3QucG0gJHgtdGVzdHMgJChleHBsaWNpdCkgJChtYWludF9nZW4pIG1iMS5JIG1iMS5YIG1iMi5JIG1iMi5YCisrbm9pbnN0X1NDUklQVFMgPSAkeC10ZXN0cyAjICR4LW1iLXRlc3RzCisgVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgICBDVV9URVNUX05BTUU9YGJhc2VuYW1lICQoYWJzX3NyY2RpcilgLCQkdHN0IFwKKyAgIFBBVEg9IiQoVkdfUEFUSF9QUkVGSVgpYHB3ZGAvLi4vLi4vc3JjJChQQVRIX1NFUEFSQVRPUikkJFBBVEgiCisgCisgZWRpdHBsID0gc2VkIC1lICdzLEAnJ1BFUkwnJ0AsJChQRVJMKSxnJyAtZSAncyxAJydzcmNkaXInJ0AsJChzcmNkaXIpLGcnCisgCistVEVTVFMgPSAkeC10ZXN0cworK1RFU1RTID0gJHgtdGVzdHMgJHgtbWItdGVzdHMKKyAKKyBta19zY3JpcHQgPSAkKHNyY2RpcikvLi4vbWstc2NyaXB0CisgJChzcmNkaXIpLyR4LXRlc3RzOiAkKG1rX3NjcmlwdCkgVGVzdC5wbSBNYWtlZmlsZS5hbQorLS0tIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmguaTE4bgkyMDA1LTA1LTE0IDA3OjQ0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMiw2ICsyMiwxMSBAQAorIAorICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LiAgKi8KKysjIGlmIEhBVkVfV0NIQVJfSAorKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBlbmRpZgorKworIC8qIEEgYHN0cnVjdCBsaW5lYnVmZmVyJyBob2xkcyBhIGxpbmUgb2YgdGV4dC4gKi8KKyAKKyBzdHJ1Y3QgbGluZWJ1ZmZlcgorQEAgLTI5LDYgKzM0LDkgQEAKKyAgIHNpemVfdCBzaXplOwkJCS8qIEFsbG9jYXRlZC4gKi8KKyAgIHNpemVfdCBsZW5ndGg7CQkvKiBVc2VkLiAqLworICAgY2hhciAqYnVmZmVyOworKyMgaWYgSEFWRV9XQ0hBUl9ICisrICBtYnN0YXRlX3Qgc3RhdGU7CisrIyBlbmRpZgorIH07CisgCisgLyogSW5pdGlhbGl6ZSBsaW5lYnVmZmVyIExJTkVCVUZGRVIgZm9yIHVzZS4gKi8KKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvZXhwYW5kLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9leHBhbmQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTM4LDExICszOCwyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJuZHVwLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImV4cGFuZCIKKyAKK0BAIC0xODMsNiArMjAwLDcgQEAKKyAJICAgICAgc3RvcHMgPSBudW1fc3RhcnQgKyBsZW4gLSAxOworIAkgICAgfQorIAl9CisrCisgICAgICAgZWxzZQorIAl7CisgCSAgZXJyb3IgKDAsIDAsIF8oInRhYiBzaXplIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyKHMpOiAlcyIpLAorQEAgLTM2NSw2ICszODMsMTQyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZXhwYW5kX211bHRpYnl0ZSAodm9pZCkKKyt7CisrICBGSUxFICpmcDsJCQkvKiBJbnB1dCBzdHJlbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3Y2hhcl90IHdjOwkJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkJICAgd2hpY2ggc2hvd3MgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBpbnQgdGFiX2luZGV4ID0gMDsJCS8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wLiAqLworKyAgaW50IGNvbHVtbiA9IDA7CQkvKiBDb2x1bW4gb24gc2NyZWVuIG9mIHRoZSBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIC8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRi4gKi8KKysgICAgICBpZiAoYnVmbGVuIDwgTUJfTEVOX01BWCAmJiAhZmVvZihmcCkgJiYgIWZlcnJvcihmcCkpCisrCXsKKysJICBtZW1tb3ZlIChidWYsIGJ1ZnBvcywgYnVmbGVuKTsKKysJICBidWZsZW4gKz0gZnJlYWQgKGJ1ZiArIGJ1Zmxlbiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIGZwKTsKKysJICBidWZwb3MgPSBidWY7CisrCX0KKysKKysgICAgICAvKiBObyBjaGFyYWN0ZXIgaXMgbGVmdCBpbiBCVUYuICovCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCXsKKysJICBmcCA9IG5leHRfZmlsZSAoZnApOworKworKwkgIGlmIChmcCA9PSBOVUxMKQorKwkgICAgYnJlYWs7CQkvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYnVmcG9zLCBidWZsZW4sICZpX3N0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToJLyogaWxsZWdhbCBieXRlIHNlcXVlbmNlLiAqLworKwljYXNlIChzaXplX3QpLTI6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICBpZiAoY29udmVydCkKKysJICAgIHsKKysJICAgICAgKytjb2x1bW47CisrCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQljb252ZXJ0ID0gMDsKKysJICAgIH0KKysJICBwdXRjaGFyICgqYnVmcG9zKTsKKysJICBicmVhazsKKysKKysJY2FzZSAwOgkJLyogbnVsbC4gKi8KKysJICBtYmxlbmd0aCA9IDE7CisrCSAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkgICAgY29udmVydCA9IDA7CisrCSAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgaWYgKHdjID09IEwnXG4nKSAgIC8qIExGLiAqLworKwkgICAgeworKwkgICAgICB0YWJfaW5kZXggPSAwOworKwkgICAgICBjb2x1bW4gPSAwOworKwkgICAgICBjb252ZXJ0ID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkJLyogVGFiLiAqLworKwkgICAgeworKwkgICAgICBpZiAodGFiX3NpemUgPT0gMCkKKysJCXsKKysJCSAgLyogRG8gbm90IGxldCB0YWJfaW5kZXggPT0gZmlyc3RfZnJlZV90YWI7CisrCQkgICAgIHN0b3Agd2hlbiBpdCBpcyAxIGxlc3MuICovCisrCQkgIHdoaWxlICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEKKysJCSAgICAgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBuZXh0X3RhYl9jb2x1bW4gPSB0YWJfbGlzdFt0YWJfaW5kZXhdOworKwkJICBpZiAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBpZiAoY29sdW1uID49IG5leHRfdGFiX2NvbHVtbikKKysJCSAgICBuZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyAxOworKwkJfQorKwkgICAgICBlbHNlCisrCQluZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyB0YWJfc2l6ZSAtIGNvbHVtbiAlIHRhYl9zaXplOworKworKwkgICAgICB3aGlsZSAoY29sdW1uIDwgbmV4dF90YWJfY29sdW1uKQorKwkJeworKwkJICBwdXRjaGFyICgnICcpOworKwkJICArK2NvbHVtbjsKKysJCX0KKysJICAgIH0KKysJICBlbHNlICAvKiBPdGhlcnMuICovCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0KQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgeworKwkJICAgICAgaWYgKGNvbHVtbiA+IDApCisrCQkJLS1jb2x1bW47CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaW50IHdpZHRoOwkJLyogVGhlIHdpZHRoIG9mIFdDLiAqLworKworKwkJICAgICAgd2lkdGggPSB3Y3dpZHRoICh3Yyk7CisrCQkgICAgICBjb2x1bW4gKz0gKHdpZHRoID4gMCkgPyB3aWR0aCA6IDA7CisrCQkgICAgICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJCWNvbnZlcnQgPSAwOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CitAQCAtNDI5LDcgKzU4MywxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICBleHBhbmQgKCk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBleHBhbmRfbXVsdGlieXRlICgpOworKyAgZWxzZQorKyNlbmRpZgorKyAgICBleHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxNiArMjMsMzAgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgbWJydG93YygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzd2JsYW5rKCksIHRvd3VwcGVyLiAgKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorICNpbmNsdWRlICJsaW5lYnVmZmVyLmgiCistI2luY2x1ZGUgIm1lbWNhc2VjbXAuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAic3RkaW8tLS5oIgorICNpbmNsdWRlICJ4bWVtY29sbC5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCisgCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJqb2luIgorIAorQEAgLTEwNCwxMCArMTE4LDEyIEBACisgLyogTGFzdCBlbGVtZW50IGluIGBvdXRsaXN0Jywgd2hlcmUgYSBuZXcgZWxlbWVudCBjYW4gYmUgYWRkZWQuICAqLworIHN0YXRpYyBzdHJ1Y3Qgb3V0bGlzdCAqb3V0bGlzdF9lbmQgPSAmb3V0bGlzdF9oZWFkOworIAorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBuZWdhdGl2ZSwgZmllbGRzIGFyZSBzZXBhcmF0ZWQKKy0gICBieSBhbnkgbm9uZW1wdHkgc3RyaW5nIG9mIGJsYW5rcywgb3RoZXJ3aXNlIGJ5IGV4YWN0bHkgb25lCistICAgdGFiIGNoYXJhY3RlciB3aG9zZSB2YWx1ZSAod2hlbiBjYXN0IHRvIHVuc2lnbmVkIGNoYXIpIGVxdWFscyBUQUIuICAqLworLXN0YXRpYyBpbnQgdGFiID0gLTE7CisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIE5VTEwsIGZpZWxkcyBhcmUgc2VwYXJhdGVkCisrICAgYnkgYW55IG5vbmVtcHR5IHN0cmluZyBvZiBibGFua3MuICAqLworK3N0YXRpYyBjaGFyICp0YWIgPSBOVUxMOworKworKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBmb3IgdGFiLiAqLworK3N0YXRpYyBzaXplX3QgdGFibGVuID0gMDsKKyAKKyBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyB7CitAQCAtMTkwLDYgKzIwNiw4IEBACisgCisgLyogRmlsbCBpbiB0aGUgYGZpZWxkcycgc3RydWN0dXJlIGluIExJTkUuICAqLworIAorKy8qIEZpbGwgaW4gdGhlIGBmaWVsZHMnIHN0cnVjdHVyZSBpbiBMSU5FLiAgKi8KKysKKyBzdGF0aWMgdm9pZAorIHhmaWVsZHMgKHN0cnVjdCBsaW5lICpsaW5lKQorIHsKK0BAIC0xOTksMTAgKzIxNywxMSBAQAorICAgaWYgKHB0ciA9PSBsaW0pCisgICAgIHJldHVybjsKKyAKKy0gIGlmICgwIDw9IHRhYikKKysgIGlmICh0YWIgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKyAgICAgICBjaGFyICpzZXA7CistICAgICAgZm9yICg7IChzZXAgPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpKSAhPSBOVUxMOyBwdHIgPSBzZXAgKyAxKQorKyAgICAgIGZvciAoOyAoc2VwID0gbWVtY2hyIChwdHIsIHQsIGxpbSAtIHB0cikpICE9IE5VTEw7IHB0ciA9IHNlcCArIDEpCisgCWV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKyAgICAgfQorICAgZWxzZQorQEAgLTIyOSw2ICsyNDgsMTQ4IEBACisgICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIGxpbSAtIHB0cik7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK3hmaWVsZHNfbXVsdGlieXRlIChzdHJ1Y3QgbGluZSAqbGluZSkKKyt7CisrICBjaGFyICpwdHIgPSBsaW5lLT5idWYuYnVmZmVyOworKyAgY2hhciBjb25zdCAqbGltID0gcHRyICsgbGluZS0+YnVmLmxlbmd0aCAtIDE7CisrICB3Y2hhcl90IHdjID0gMDsKKysgIHNpemVfdCBtYmxlbmd0aCA9IDE7CisrICBtYnN0YXRlX3Qgc3RhdGUsIHN0YXRlX2JhazsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHB0ciA9PSBsaW0pCisrICAgIHJldHVybjsKKysKKysgIGlmICh0YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKysgICAgICBjaGFyICpzZXAgPSBwdHI7CisrICAgICAgZm9yICg7IHB0ciA8IGxpbTsgcHRyID0gc2VwICsgbWJsZW5ndGgpCisrCXsKKysJICBzZXAgPSBwdHI7CisrCSAgd2hpbGUgKHNlcCA8IGxpbSkKKysJICAgIHsKKysJICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzZXAsIGxpbSAtIHNlcCArIDEsICZzdGF0ZSk7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCQl7CisrCQkgIG1ibGVuZ3RoID0gMTsKKysJCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSB0YWJsZW4gJiYgIW1lbWNtcCAoc2VwLCB0YWIsIG1ibGVuZ3RoKSkKKysJCWJyZWFrOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHNlcCArPSBtYmxlbmd0aDsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHNlcCA9PSBsaW0pCisrCSAgICBicmVhazsKKysKKysJICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIHNlcCAtIHB0cik7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogU2tpcCBsZWFkaW5nIGJsYW5rcyBiZWZvcmUgdGhlIGZpcnN0IGZpZWxkLiAgKi8KKysgICAgICB3aGlsZShwdHIgPCBsaW0pCisrICAgICAgeworKyAgICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKworKyAgICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIG1ibGVuZ3RoID0gMTsKKysgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKyAgICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysgICAgICAgIGlmICghaXN3Ymxhbmsod2MpKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrICAgICAgZG8KKysJeworKwkgIGNoYXIgKnNlcDsKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgc2VwID0gcHRyICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHNlcCAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKGlzd2JsYW5rICh3YykpCisrCQlicmVhazsKKysKKysJICAgICAgc2VwICs9IG1ibGVuZ3RoOworKwkgICAgfQorKworKwkgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKysJICBpZiAoc2VwID09IGxpbSkKKysJICAgIHJldHVybjsKKysKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgcHRyID0gc2VwICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHB0ciAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFpc3dibGFuayAod2MpKQorKwkJYnJlYWs7CisrCisrCSAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICAgIH0KKysJfQorKyAgICAgIHdoaWxlIChwdHIgIT0gbGltKTsKKysgICAgfQorKworKyAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBsaW0gLSBwdHIpOworK30KKysjZW5kaWYKKysKKyAvKiBSZWFkIGEgbGluZSBmcm9tIEZQIGludG8gTElORSBhbmQgc3BsaXQgaXQgaW50byBmaWVsZHMuCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCitAQCAtMjQ5LDYgKzQxMCwxMSBAQAorICAgbGluZS0+bmZpZWxkc19hbGxvY2F0ZWQgPSAwOworICAgbGluZS0+bmZpZWxkcyA9IDA7CisgICBsaW5lLT5maWVsZHMgPSBOVUxMOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeGZpZWxkc19tdWx0aWJ5dGUgKGxpbmUpOworKyAgZWxzZQorKyNlbmRpZgorICAgeGZpZWxkcyAobGluZSk7CisgICByZXR1cm4gdHJ1ZTsKKyB9CitAQCAtMzAzLDU2ICs0NjksMTE0IEBACisga2V5Y21wIChzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTEsIHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMikKKyB7CisgICAvKiBTdGFydCBvZiBmaWVsZCB0byBjb21wYXJlIGluIGVhY2ggZmlsZS4gICovCistICBjaGFyICpiZWcxOworLSAgY2hhciAqYmVnMjsKKy0KKy0gIHNpemVfdCBsZW4xOworLSAgc2l6ZV90IGxlbjI7CQkvKiBMZW5ndGggb2YgZmllbGRzIHRvIGNvbXBhcmUuICAqLworKyAgY2hhciAqYmVnWzJdOworKyAgY2hhciAqY29weVsyXTsKKysgIHNpemVfdCBsZW5bMl07CS8qIExlbmd0aCBvZiBmaWVsZHMgdG8gY29tcGFyZS4gICovCisgICBpbnQgZGlmZjsKKysgIGludCBpLCBqOworIAorICAgaWYgKGpvaW5fZmllbGRfMSA8IGxpbmUxLT5uZmllbGRzKQorICAgICB7CistICAgICAgYmVnMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5iZWc7CistICAgICAgbGVuMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5sZW47CisrICAgICAgYmVnWzBdID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmJlZzsKKysgICAgICBsZW5bMF0gPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0ubGVuOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBiZWcxID0gTlVMTDsKKy0gICAgICBsZW4xID0gMDsKKysgICAgICBiZWdbMF0gPSBOVUxMOworKyAgICAgIGxlblswXSA9IDA7CisgICAgIH0KKyAKKyAgIGlmIChqb2luX2ZpZWxkXzIgPCBsaW5lMi0+bmZpZWxkcykKKyAgICAgeworLSAgICAgIGJlZzIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0uYmVnOworLSAgICAgIGxlbjIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0ubGVuOworKyAgICAgIGJlZ1sxXSA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5iZWc7CisrICAgICAgbGVuWzFdID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmxlbjsKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgYmVnMiA9IE5VTEw7CistICAgICAgbGVuMiA9IDA7CisrICAgICAgYmVnWzFdID0gTlVMTDsKKysgICAgICBsZW5bMV0gPSAwOworICAgICB9CisgCistICBpZiAobGVuMSA9PSAwKQorLSAgICByZXR1cm4gbGVuMiA9PSAwID8gMCA6IC0xOworLSAgaWYgKGxlbjIgPT0gMCkKKysgIGlmIChsZW5bMF0gPT0gMCkKKysgICAgcmV0dXJuIGxlblsxXSA9PSAwID8gMCA6IC0xOworKyAgaWYgKGxlblsxXSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBpZ25vcmVfY2FzZSBkb2VzIG5vdCB3b3JrIHdpdGggTkxTIChpbiBwYXJ0aWN1bGFyLAorLSAgICAgICAgIHdpdGggbXVsdGlieXRlIGNoYXJzKS4gICovCistICAgICAgZGlmZiA9IG1lbWNhc2VjbXAgKGJlZzEsIGJlZzIsIE1JTiAobGVuMSwgbGVuMikpOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgeworKyAgICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKyAgICAgICAgd2NoYXJfdCB3YywgdXdjOworKyAgICAgICAgbWJzdGF0ZV90IHN0YXRlLCBzdGF0ZV9iYWs7CisrCisrICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUlOIChsZW5bMF0sIGxlblsxXSk7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICAgICAgICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIGJlZ1tpXSArIGosIGxlbltpXSAtIGosICZzdGF0ZSk7CisrCisrICAgICAgICAgICAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGNhc2UgKHNpemVfdCkgLTE6CisrICAgICAgICAgICAgICAgICAgY2FzZSAoc2l6ZV90KSAtMjoKKysgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKyAgICAgICAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisrICAgICAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgICAgICAgICAgbWJsZW5ndGggPSAxOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgIHV3YyA9IHRvd3VwcGVyICh3Yyk7CisrCisrICAgICAgICAgICAgICAgICAgICBpZiAodXdjICE9IHdjKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdjcnRvbWIgKGNvcHlbaV0gKyBqLCB1d2MsICZzdGF0ZV93Yyk7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChjb3B5W2ldICsgaiwgYmVnW2ldICsgaiwgbWJsZW5ndGgpOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaiArPSBtYmxlbmd0aDsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNvcHlbaV0gPSBhbGxvY2EgKGxlbltpXSArIDEpOworKworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBNSU4gKGxlblswXSwgbGVuWzFdKTsgaisrKQorKyAgICAgICAgICAgICAgY29weVtpXVtqXSA9IHRvdXBwZXIgKGJlZ1tpXVtqXSk7CisrCisrICAgICAgICAgICAgY29weVtpXVtqXSA9ICdcMCc7CisrICAgICAgICAgIH0KKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGlmIChoYXJkX0xDX0NPTExBVEUpCistCXJldHVybiB4bWVtY29sbCAoYmVnMSwgbGVuMSwgYmVnMiwgbGVuMik7CistICAgICAgZGlmZiA9IG1lbWNtcCAoYmVnMSwgYmVnMiwgTUlOIChsZW4xLCBsZW4yKSk7CisrICAgICAgY29weVswXSA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ1swXTsKKysgICAgICBjb3B5WzFdID0gKHVuc2lnbmVkIGNoYXIgKikgYmVnWzFdOworICAgICB9CisgCisrICBpZiAoaGFyZF9MQ19DT0xMQVRFKQorKyAgICByZXR1cm4geG1lbWNvbGwgKChjaGFyICopIGNvcHlbMF0sIGxlblswXSwgKGNoYXIgKikgY29weVsxXSwgbGVuWzFdKTsKKysgIGRpZmYgPSBtZW1jbXAgKGNvcHlbMF0sIGNvcHlbMV0sIE1JTiAobGVuWzBdLCBsZW5bMV0pKTsKKysKKyAgIGlmIChkaWZmKQorICAgICByZXR1cm4gZGlmZjsKKy0gIHJldHVybiBsZW4xIDwgbGVuMiA/IC0xIDogbGVuMSAhPSBsZW4yOworKyAgcmV0dXJuIGxlblswXSAtIGxlblsxXTsKKyB9CisgCisgLyogUHJpbnQgZmllbGQgTiBvZiBMSU5FIGlmIGl0IGV4aXN0cyBhbmQgaXMgbm9uZW1wdHksIG90aGVyd2lzZQorQEAgLTM3NywxMSArNjAxLDE4IEBACisgCisgLyogUHJpbnQgdGhlIGpvaW4gb2YgTElORTEgYW5kIExJTkUyLiAgKi8KKyAKKysjZGVmaW5lIFBVVF9UQUJfQ0hBUgkJCQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICAodGFiICE9IE5VTEwpID8JCQkJCQkJXAorKwlmd3JpdGUodGFiLCBzaXplb2YoY2hhciksIHRhYmxlbiwgc3Rkb3V0KSA6IHB1dGNoYXIgKCcgJyk7CVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQkJCQkJCQkJCisrCisgc3RhdGljIHZvaWQKKyBwcmpvaW4gKHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMSwgc3RydWN0IGxpbmUgY29uc3QgKmxpbmUyKQorIHsKKyAgIGNvbnN0IHN0cnVjdCBvdXRsaXN0ICpvdXRsaXN0OworLSAgY2hhciBvdXRwdXRfc2VwYXJhdG9yID0gdGFiIDwgMCA/ICcgJyA6IHRhYjsKKyAKKyAgIG91dGxpc3QgPSBvdXRsaXN0X2hlYWQubmV4dDsKKyAgIGlmIChvdXRsaXN0KQorQEAgLTM5NywxMiArNjI4LDEyIEBACisgCSAgaWYgKG8tPmZpbGUgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgaWYgKGxpbmUxID09ICZ1bmlfYmxhbmspCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTI7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8yOworIAkJfQorIAkgICAgICBlbHNlCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTE7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8xOworIAkJfQorQEAgLTQxNiw3ICs2NDcsNyBAQAorIAkgIG8gPSBvLT5uZXh0OworIAkgIGlmIChvID09IE5VTEwpCisgCSAgICBicmVhazsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCX0KKyAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgfQorQEAgLTQzNCwyMyArNjY1LDIzIEBACisgICAgICAgcHJmaWVsZCAoam9pbl9maWVsZF8xLCBsaW5lMSk7CisgICAgICAgZm9yIChpID0gMDsgaSA8IGpvaW5fZmllbGRfMSAmJiBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAgICAgICBmb3IgKGkgPSBqb2luX2ZpZWxkXzEgKyAxOyBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgam9pbl9maWVsZF8yICYmIGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIGZvciAoaSA9IGpvaW5fZmllbGRfMiArIDE7IGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIHB1dGNoYXIgKCdcbicpOworQEAgLTg1OSwyMCArMTA5MCw0MSBAQAorIAorIAljYXNlICd0JzoKKyAJICB7CistCSAgICB1bnNpZ25lZCBjaGFyIG5ld3RhYiA9IG9wdGFyZ1swXTsKKy0JICAgIGlmICghIG5ld3RhYikKKysJICAgIGNoYXIgKm5ld3RhYjsKKysJICAgIHNpemVfdCBuZXd0YWJsZW47CisrCSAgICBpZiAoISBvcHRhcmdbMF0pCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImVtcHR5IHRhYiIpKTsKKy0JICAgIGlmIChvcHRhcmdbMV0pCisrCSAgICBuZXd0YWIgPSB4c3RyZHVwIChvcHRhcmcpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJbWJzdGF0ZV90IHN0YXRlOworKworKwkJbWVtc2V0ICgmc3RhdGUsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJsZW4gPSBtYnJ0b3djIChOVUxMLCBuZXd0YWIsCisrCQkJCSAgICAgc3RybmxlbiAobmV3dGFiLCBNQl9MRU5fTUFYKSwKKysJCQkJICAgICAmc3RhdGUpOworKwkJaWYgKG5ld3RhYmxlbiA9PSAoc2l6ZV90KSAwCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0xCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0yKQorKwkJICBuZXd0YWJsZW4gPSAxOworKwkgICAgICB9CisrCSAgICBlbHNlCisrI2VuZGlmCisrCSAgICAgIG5ld3RhYmxlbiA9IDE7CisrCQkKKysJICAgIGlmIChuZXd0YWJsZW4gPT0gMSAmJiBuZXd0YWJbMV0pCisrCSAgICAgIHsKKysJCWlmIChTVFJFUSAobmV3dGFiLCAiXFwwIikpCisrCQkgIG5ld3RhYlswXSA9ICdcMCc7CisrCSAgICAgIH0KKysJICAgIGlmICh0YWIgIT0gTlVMTCAmJiBzdHJjbXAgKHRhYiwgbmV3dGFiKSkKKyAJICAgICAgeworLQkJaWYgKFNUUkVRIChvcHRhcmcsICJcXDAiKSkKKy0JCSAgbmV3dGFiID0gJ1wwJzsKKy0JCWVsc2UKKy0JCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygibXVsdGktY2hhcmFjdGVyIHRhYiAlcyIpLAorLQkJCSBxdW90ZSAob3B0YXJnKSk7CisrCQlmcmVlIChuZXd0YWIpOworKwkJZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CisgCSAgICAgIH0KKy0JICAgIGlmICgwIDw9IHRhYiAmJiB0YWIgIT0gbmV3dGFiKQorLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJpbmNvbXBhdGlibGUgdGFicyIpKTsKKyAJICAgIHRhYiA9IG5ld3RhYjsKKysJICAgIHRhYmxlbiA9IG5ld3RhYmxlbjsKKyAJICB9CisgCSAgYnJlYWs7CisgCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDYgKzIzLDE2IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAibGluZWJ1ZmZlci5oIgorQEAgLTMyLDcgKzQyLDE5IEBACisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhtZW1jb2xsLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKy0jaW5jbHVkZSAibWVtY2FzZWNtcC5oIgorKyNpbmNsdWRlICJ4bWVtY29sbC5oIgorKworKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIAorIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmlxIgorQEAgLTEwOSw2ICsxMzEsMTAgQEAKKyAvKiBTZWxlY3Qgd2hldGhlci9ob3cgdG8gZGVsaW1pdCBncm91cHMgb2YgZHVwbGljYXRlIGxpbmVzLiAgKi8KKyBzdGF0aWMgZW51bSBkZWxpbWl0X21ldGhvZCBkZWxpbWl0X2dyb3VwczsKKyAKKysvKiBGdW5jdGlvbiBwb2ludGVycy4gKi8KKytzdGF0aWMgY2hhciAqCisrKCpmaW5kX2ZpZWxkKSAoc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpOworKworIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorIHsKKyAgIHsiY291bnQiLCBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKK0BAIC0xOTgsNyArMjI0LDcgQEAKKyAgICByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUncyBmaWVsZCB0byBiZSBjb21wYXJlZC4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistZmluZF9maWVsZCAoY29uc3Qgc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpCisrZmluZF9maWVsZF91bmkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorIHsKKyAgIHNpemVfdCBjb3VudDsKKyAgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworQEAgLTIxOSw2ICsyNDUsODMgQEAKKyAgIHJldHVybiBscCArIGk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKysKKysjIGRlZmluZSBNQkNIQVJfVE9fV0NIQVIoV0MsIE1CTEVOR1RILCBMUCwgUE9TLCBTSVpFLCBTVEFURVAsIENPTlZGQUlMKSAgXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIENPTlZGQUlMID0gMDsJCQkJCQkJXAorKyAgICAgIHN0YXRlX2JhayA9ICpTVEFURVA7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgTFAgKyBQT1MsIFNJWkUgLSBQT1MsIFNUQVRFUCk7CQlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN3aXRjaCAoTUJMRU5HVEgpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwljYXNlIChzaXplX3QpLTI6CQkJCQkJXAorKwljYXNlIChzaXplX3QpLTE6CQkJCQkJXAorKwkgICpTVEFURVAgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkgIENPTlZGQUlMKys7CQkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z2ggKi8JCQkJCQlcCisrCWNhc2UgMDoJCQkJCQkJCVwKKysJICBNQkxFTkdUSCA9IDE7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrc3RhdGljIGNoYXIgKgorK2ZpbmRfZmllbGRfbXVsdGkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworKyAgc2l6ZV90IHNpemUgPSBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IHBvczsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2M7CisrICBtYnN0YXRlX3QgKnN0YXRlcDsKKysgIGludCBjb252ZmFpbDsKKysKKysgIHBvcyA9IDA7CisrICBzdGF0ZXAgPSAmKGxpbmUtPnN0YXRlKTsKKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9maWVsZHMgJiYgcG9zIDwgc2l6ZTsgY291bnQrKykKKysgICAgeworKyAgICAgIHdoaWxlIChwb3MgPCBzaXplKQorKwl7CisrCSAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAKKysJICBpZiAoY29udmZhaWwgfHwgIWlzd2JsYW5rICh3YykpCisrCSAgICB7CisrCSAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgd2hpbGUgKHBvcyA8IHNpemUpCisrCXsKKysJICBNQkNIQVJfVE9fV0NIQVIgKHdjLCBtYmxlbmd0aCwgbHAsIHBvcywgc2l6ZSwgc3RhdGVwLCBjb252ZmFpbCk7CisrCisrCSAgaWYgKCFjb252ZmFpbCAmJiBpc3dibGFuayAod2MpKQorKwkgICAgYnJlYWs7CisrCisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9jaGFycyAmJiBwb3MgPCBzaXplOyBjb3VudCsrKQorKyAgICB7CisrICAgICAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIGxwICsgcG9zOworK30KKysjZW5kaWYKKysKKyAvKiBSZXR1cm4gZmFsc2UgaWYgdHdvIHN0cmluZ3MgT0xEIGFuZCBORVcgbWF0Y2gsIHRydWUgaWYgbm90LgorICAgIE9MRCBhbmQgTkVXIHBvaW50IG5vdCB0byB0aGUgYmVnaW5uaW5ncyBvZiB0aGUgbGluZXMKKyAgICBidXQgcmF0aGVyIHRvIHRoZSBiZWdpbm5pbmdzIG9mIHRoZSBmaWVsZHMgdG8gY29tcGFyZS4KK0BAIC0yMjcsNiArMzMwLDggQEAKKyBzdGF0aWMgYm9vbAorIGRpZmZlcmVudCAoY2hhciAqb2xkLCBjaGFyICpuZXcsIHNpemVfdCBvbGRsZW4sIHNpemVfdCBuZXdsZW4pCisgeworKyAgY2hhciAqY29weV9vbGQsICpjb3B5X25ldzsKKysKKyAgIGlmIChjaGVja19jaGFycyA8IG9sZGxlbikKKyAgICAgb2xkbGVuID0gY2hlY2tfY2hhcnM7CisgICBpZiAoY2hlY2tfY2hhcnMgPCBuZXdsZW4pCitAQCAtMjM0LDE0ICszMzksOTIgQEAKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBpbnZva2Ugc3RyY29sbCBzb21laG93LiAgKi8KKy0gICAgICByZXR1cm4gb2xkbGVuICE9IG5ld2xlbiB8fCBtZW1jYXNlY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgICBzaXplX3QgaTsKKysKKysgICAgICBjb3B5X29sZCA9IGFsbG9jYSAob2xkbGVuICsgMSk7CisrICAgICAgY29weV9uZXcgPSBhbGxvY2EgKG9sZGxlbiArIDEpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRsZW47IGkrKykKKysJeworKwkgIGNvcHlfb2xkW2ldID0gdG91cHBlciAob2xkW2ldKTsKKysJICBjb3B5X25ld1tpXSA9IHRvdXBwZXIgKG5ld1tpXSk7CisrCX0KKyAgICAgfQorLSAgZWxzZSBpZiAoaGFyZF9MQ19DT0xMQVRFKQorLSAgICByZXR1cm4geG1lbWNvbGwgKG9sZCwgb2xkbGVuLCBuZXcsIG5ld2xlbikgIT0gMDsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIG9sZGxlbiAhPSBuZXdsZW4gfHwgbWVtY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgeworKyAgICAgIGNvcHlfb2xkID0gKGNoYXIgKilvbGQ7CisrICAgICAgY29weV9uZXcgPSAoY2hhciAqKW5ldzsKKysgICAgfQorKworKyAgcmV0dXJuIHhtZW1jb2xsIChjb3B5X29sZCwgb2xkbGVuLCBjb3B5X25ldywgbmV3bGVuKTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytkaWZmZXJlbnRfbXVsdGkgKGNvbnN0IGNoYXIgKm9sZCwgY29uc3QgY2hhciAqbmV3LCBzaXplX3Qgb2xkbGVuLCBzaXplX3QgbmV3bGVuLCBtYnN0YXRlX3Qgb2xkc3RhdGUsIG1ic3RhdGVfdCBuZXdzdGF0ZSkKKyt7CisrICBzaXplX3QgaSwgaiwgY2hhcnM7CisrICBjb25zdCBjaGFyICpzdHJbMl07CisrICBjaGFyICpjb3B5WzJdOworKyAgc2l6ZV90IGxlblsyXTsKKysgIG1ic3RhdGVfdCBzdGF0ZVsyXTsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2MsIHV3YzsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrCisrICBzdHJbMF0gPSBvbGQ7CisrICBzdHJbMV0gPSBuZXc7CisrICBsZW5bMF0gPSBvbGRsZW47CisrICBsZW5bMV0gPSBuZXdsZW47CisrICBzdGF0ZVswXSA9IG9sZHN0YXRlOworKyAgc3RhdGVbMV0gPSBuZXdzdGF0ZTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgIHsKKysgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICBmb3IgKGogPSAwLCBjaGFycyA9IDA7IGogPCBsZW5baV0gJiYgY2hhcnMgPCBjaGVja19jaGFyczsgY2hhcnMrKykKKysJeworKwkgIHN0YXRlX2JhayA9IHN0YXRlW2ldOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHJbaV0gKyBqLCBsZW5baV0gLSBqLCAmKHN0YXRlW2ldKSk7CisrCisrCSAgc3dpdGNoIChtYmxlbmd0aCkKKysJICAgIHsKKysJICAgIGNhc2UgKHNpemVfdCktMToKKysJICAgIGNhc2UgKHNpemVfdCktMjoKKysJICAgICAgc3RhdGVbaV0gPSBzdGF0ZV9iYWs7CisrCSAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworKwkgICAgY2FzZSAwOgorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIGJyZWFrOworKworKwkgICAgZGVmYXVsdDoKKysJICAgICAgaWYgKGlnbm9yZV9jYXNlKQorKwkJeworKwkJICB1d2MgPSB0b3d1cHBlciAod2MpOworKworKwkJICBpZiAodXdjICE9IHdjKQorKwkJICAgIHsKKysJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZV93YzsKKysKKysJCSAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgICAgICB3Y3J0b21iIChjb3B5W2ldICsgaiwgdXdjLCAmc3RhdGVfd2MpOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIG1lbWNweSAoY29weVtpXSArIGosIHN0cltpXSArIGosIG1ibGVuZ3RoKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbWVtY3B5IChjb3B5W2ldICsgaiwgc3RyW2ldICsgaiwgbWJsZW5ndGgpOworKwkgICAgfQorKwkgIGogKz0gbWJsZW5ndGg7CisrCX0KKysgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICBsZW5baV0gPSBqOworKyAgICB9CisrCisrICByZXR1cm4geG1lbWNvbGwgKGNvcHlbMF0sIGxlblswXSwgY29weVsxXSwgbGVuWzFdKTsKKyB9CisrI2VuZGlmCisgCisgLyogT3V0cHV0IHRoZSBsaW5lIGluIGxpbmVidWZmZXIgTElORSB0byBzdGFuZGFyZCBvdXRwdXQKKyAgICBwcm92aWRlZCB0aGF0IHRoZSBzd2l0Y2hlcyBzYXkgaXQgc2hvdWxkIGJlIG91dHB1dC4KK0BAIC0yOTUsMTUgKzQ3OCw0MyBAQAorICAgICB7CisgICAgICAgY2hhciAqcHJldmZpZWxkIElGX0xJTlQgKD0gTlVMTCk7CisgICAgICAgc2l6ZV90IHByZXZsZW4gSUZfTElOVCAoPSAwKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysKKysgICAgICBtZW1zZXQgKCZwcmV2c3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrI2VuZGlmCisgCisgICAgICAgd2hpbGUgKCFmZW9mIChzdGRpbikpCisgCXsKKyAJICBjaGFyICp0aGlzZmllbGQ7CisgCSAgc2l6ZV90IHRoaXNsZW47CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIG1ic3RhdGVfdCB0aGlzc3RhdGU7CisrI2VuZGlmCisrCisgCSAgaWYgKHJlYWRsaW5lYnVmZmVyICh0aGlzbGluZSwgc3RkaW4pID09IDApCisgCSAgICBicmVhazsKKyAJICB0aGlzZmllbGQgPSBmaW5kX2ZpZWxkICh0aGlzbGluZSk7CisgCSAgdGhpc2xlbiA9IHRoaXNsaW5lLT5sZW5ndGggLSAxIC0gKHRoaXNmaWVsZCAtIHRoaXNsaW5lLT5idWZmZXIpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysKKysgICAgICAgICAgICBpZiAocHJldmxpbmUtPmxlbmd0aCA9PSAwIHx8IGRpZmZlcmVudF9tdWx0aQorKyAgICAgICAgICAgICAgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSkpCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGZ3cml0ZSAodGhpc2xpbmUtPmJ1ZmZlciwgc2l6ZW9mIChjaGFyKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGluZS0+bGVuZ3RoLCBzdGRvdXQpOworKworKyAgICAgICAgICAgICAgICBTV0FQX0xJTkVTIChwcmV2bGluZSwgdGhpc2xpbmUpOworKyAgICAgICAgICAgICAgICBwcmV2ZmllbGQgPSB0aGlzZmllbGQ7CisrICAgICAgICAgICAgICAgIHByZXZsZW4gPSB0aGlzbGVuOworKyAgICAgICAgICAgICAgICBwcmV2c3RhdGUgPSB0aGlzc3RhdGU7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgIH0KKysJZWxzZQorKyNlbmRpZgorIAkgIGlmIChwcmV2bGluZS0+bGVuZ3RoID09IDAKKyAJICAgICAgfHwgZGlmZmVyZW50ICh0aGlzZmllbGQsIHByZXZmaWVsZCwgdGhpc2xlbiwgcHJldmxlbikpCisgCSAgICB7CitAQCAtMzIyLDE3ICs1MzMsMjYgQEAKKyAgICAgICBzaXplX3QgcHJldmxlbjsKKyAgICAgICB1aW50bWF4X3QgbWF0Y2hfY291bnQgPSAwOworICAgICAgIGJvb2wgZmlyc3RfZGVsaW1pdGVyID0gdHJ1ZTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICBpZiAocmVhZGxpbmVidWZmZXIgKHByZXZsaW5lLCBzdGRpbikgPT0gMCkKKyAJZ290byBjbG9zZWZpbGVzOworICAgICAgIHByZXZmaWVsZCA9IGZpbmRfZmllbGQgKHByZXZsaW5lKTsKKyAgICAgICBwcmV2bGVuID0gcHJldmxpbmUtPmxlbmd0aCAtIDEgLSAocHJldmZpZWxkIC0gcHJldmxpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgICAgIHByZXZzdGF0ZSA9IHByZXZsaW5lLT5zdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICB3aGlsZSAoIWZlb2YgKHN0ZGluKSkKKyAJeworIAkgIGJvb2wgbWF0Y2g7CisgCSAgY2hhciAqdGhpc2ZpZWxkOworIAkgIHNpemVfdCB0aGlzbGVuOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBtYnN0YXRlX3QgdGhpc3N0YXRlOworKyNlbmRpZgorIAkgIGlmIChyZWFkbGluZWJ1ZmZlciAodGhpc2xpbmUsIHN0ZGluKSA9PSAwKQorIAkgICAgeworIAkgICAgICBpZiAoZmVycm9yIChzdGRpbikpCitAQCAtMzQxLDYgKzU2MSwxNSBAQAorIAkgICAgfQorIAkgIHRoaXNmaWVsZCA9IGZpbmRfZmllbGQgKHRoaXNsaW5lKTsKKyAJICB0aGlzbGVuID0gdGhpc2xpbmUtPmxlbmd0aCAtIDEgLSAodGhpc2ZpZWxkIC0gdGhpc2xpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgIHsKKysgICAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysgICAgICAgICAgICAgIG1hdGNoID0gIWRpZmZlcmVudF9tdWx0aSAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSk7CisrICAgICAgICAgICAgfQorKwkgIGVsc2UKKysjZW5kaWYKKyAJICBtYXRjaCA9ICFkaWZmZXJlbnQgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuKTsKKyAJICBtYXRjaF9jb3VudCArPSBtYXRjaDsKKyAKK0BAIC0zNzMsNiArNjAyLDkgQEAKKyAJICAgICAgU1dBUF9MSU5FUyAocHJldmxpbmUsIHRoaXNsaW5lKTsKKyAJICAgICAgcHJldmZpZWxkID0gdGhpc2ZpZWxkOworIAkgICAgICBwcmV2bGVuID0gdGhpc2xlbjsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICAgIHByZXZzdGF0ZSA9IHRoaXNzdGF0ZTsKKysjZW5kaWYKKyAJICAgICAgaWYgKCFtYXRjaCkKKyAJCW1hdGNoX2NvdW50ID0gMDsKKyAJICAgIH0KK0BAIC00MTcsNiArNjQ5LDE5IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB7CisrICAgICAgZmluZF9maWVsZCA9IGZpbmRfZmllbGRfbXVsdGk7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIGZpbmRfZmllbGQgPSBmaW5kX2ZpZWxkX3VuaTsKKysgICAgfQorKworKworKworICAgc2tpcF9jaGFycyA9IDA7CisgICBza2lwX2ZpZWxkcyA9IDA7CisgICBjaGVja19jaGFycyA9IFNJWkVfTUFYOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMuaTE4bgkyMDA3LTAyLTIzIDEyOjAxOjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxMSArMjMsMzMgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3dwcmludCgpLCBpc3dibGFuaygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyB1bmRlZiBNQl9MRU5fTUFYCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCitAQCAtMzUsMjMgKzU3LDQ0IEBACisgCisgI2RlZmluZSBBVVRIT1JTICJEYXZpZCBNYWNLZW56aWUiCisgCisrI2RlZmluZSBGQVRBTF9FUlJPUihNZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZXJyb3IgKDAsIDAsIChNZXNzYWdlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHVzYWdlICgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysKKytlbnVtIG9wZXJhdGluZ19tb2RlCisreworKyAgLyogRm9sZCB0ZXh0cyBieSBjb2x1bW5zIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICBjb2x1bW5fbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgYnl0ZXMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgIGJ5dGVfbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgY2hhcmFjdGVyX21vZGUsCisrfTsKKysKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAqLworIGNoYXIgKnByb2dyYW1fbmFtZTsKKyAKKysvKiBUaGUgYXJndW1lbnQgc2hvd3MgY3VycmVudCBtb2RlLiAoRGVmYXVsdDogY29sdW1uX21vZGUpICovCisrc3RhdGljIGVudW0gb3BlcmF0aW5nX21vZGUgb3BlcmF0aW5nX21vZGU7CisrCisgLyogSWYgbm9uemVybywgdHJ5IHRvIGJyZWFrIG9uIHdoaXRlc3BhY2UuICovCisgc3RhdGljIGJvb2wgYnJlYWtfc3BhY2VzOworIAorLS8qIElmIG5vbnplcm8sIGNvdW50IGJ5dGVzLCBub3QgY29sdW1uIHBvc2l0aW9ucy4gKi8KKy1zdGF0aWMgYm9vbCBjb3VudF9ieXRlczsKKy0KKyAvKiBJZiBub256ZXJvLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbGVzIHdlIHJlYWQgd2FzIHN0YW5kYXJkIGlucHV0LiAqLworIHN0YXRpYyBib29sIGhhdmVfcmVhZF9zdGRpbjsKKyAKKy1zdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJic3c6MDo6MTo6Mjo6Mzo6NDo6NTo6Njo6Nzo6ODo6OTo6IjsKKytzdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJiY3N3OjA6OjE6OjI6OjM6OjQ6OjU6OjY6Ojc6Ojg6Ojk6OiI7CisgCisgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgeworICAgeyJieXRlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYid9LAorKyAgeyJjaGFyYWN0ZXJzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCisgICB7InNwYWNlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorICAgeyJ3aWR0aCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorICAge0dFVE9QVF9IRUxQX09QVElPTl9ERUNMfSwKK0BAIC04MSw2ICsxMjQsNyBAQAorICIpLCBzdGRvdXQpOworICAgICAgIGZwdXRzIChfKCJcCisgICAtYiwgLS1ieXRlcyAgICAgICAgIGNvdW50IGJ5dGVzIHJhdGhlciB0aGFuIGNvbHVtbnNcblwKKysgIC1jLCAtLWNoYXJhY3RlcnMgICAgY291bnQgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBjb2x1bW5zXG5cCisgICAtcywgLS1zcGFjZXMgICAgICAgIGJyZWFrIGF0IHNwYWNlc1xuXAorICAgLXcsIC0td2lkdGg9V0lEVEggICB1c2UgV0lEVEggY29sdW1ucyBpbnN0ZWFkIG9mIDgwXG5cCisgIiksIHN0ZG91dCk7CitAQCAtOTgsNyArMTQyLDcgQEAKKyBzdGF0aWMgc2l6ZV90CisgYWRqdXN0X2NvbHVtbiAoc2l6ZV90IGNvbHVtbiwgY2hhciBjKQorIHsKKy0gIGlmICghY291bnRfYnl0ZXMpCisrICBpZiAob3BlcmF0aW5nX21vZGUgIT0gYnl0ZV9tb2RlKQorICAgICB7CisgICAgICAgaWYgKGMgPT0gJ1xiJykKKyAJeworQEAgLTEyMSwzMCArMTY1LDE0IEBACisgICAgdG8gc3Rkb3V0LCB3aXRoIG1heGltdW0gbGluZSBsZW5ndGggV0lEVEguCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCistc3RhdGljIGJvb2wKKy1mb2xkX2ZpbGUgKGNoYXIgY29uc3QgKmZpbGVuYW1lLCBzaXplX3Qgd2lkdGgpCisrc3RhdGljIHZvaWQKKytmb2xkX3RleHQgKEZJTEUgKmlzdHJlYW0sIHNpemVfdCB3aWR0aCwgaW50ICpzYXZlZF9lcnJubykKKyB7CistICBGSUxFICppc3RyZWFtOworICAgaW50IGM7CisgICBzaXplX3QgY29sdW1uID0gMDsJCS8qIFNjcmVlbiBjb2x1bW4gd2hlcmUgbmV4dCBjaGFyIHdpbGwgZ28uICovCisgICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKyAgIHN0YXRpYyBjaGFyICpsaW5lX291dCA9IE5VTEw7CisgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZF9vdXQgPSAwOworLSAgaW50IHNhdmVkX2Vycm5vOworLQorLSAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKy0gICAgeworLSAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKy0gICAgICBoYXZlX3JlYWRfc3RkaW4gPSB0cnVlOworLSAgICB9CistICBlbHNlCistICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CistCistICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CistICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CisgCisgICB3aGlsZSAoKGMgPSBnZXRjIChpc3RyZWFtKSkgIT0gRU9GKQorICAgICB7CitAQCAtMTcyLDYgKzIwMCwxNSBAQAorIAkgICAgICBib29sIGZvdW5kX2JsYW5rID0gZmFsc2U7CisgCSAgICAgIHNpemVfdCBsb2dpY2FsX2VuZCA9IG9mZnNldF9vdXQ7CisgCisrCSAgICAgIC8qIElmIExJTkVfT1VUIGhhcyBubyB3aWRlIGNoYXJhY3RlciwKKysJCSBwdXQgYSBuZXcgd2lkZSBjaGFyYWN0ZXIgaW4gTElORV9PVVQKKysJCSBpZiBjb2x1bW4gaXMgYmlnZ2VyIHRoYW4gd2lkdGguICovCisrCSAgICAgIGlmIChvZmZzZXRfb3V0ID09IDApCisrCQl7CisrCQkgIGxpbmVfb3V0W29mZnNldF9vdXQrK10gPSBjOworKwkJICBjb250aW51ZTsKKysJCX0KKysKKyAJICAgICAgLyogTG9vayBmb3IgdGhlIGxhc3QgYmxhbmsuICovCisgCSAgICAgIHdoaWxlIChsb2dpY2FsX2VuZCkKKyAJCXsKK0BAIC0yMTgsMTEgKzI1NSwyMjUgQEAKKyAgICAgICBsaW5lX291dFtvZmZzZXRfb3V0KytdID0gYzsKKyAgICAgfQorIAorLSAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysgICpzYXZlZF9lcnJubyA9IGVycm5vOworKworKyAgaWYgKG9mZnNldF9vdXQpCisrICAgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZiAoY2hhciksIChzaXplX3QpIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCisrICBmcmVlKGxpbmVfb3V0KTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZm9sZF9tdWx0aWJ5dGVfdGV4dCAoRklMRSAqaXN0cmVhbSwgc2l6ZV90IHdpZHRoLCBpbnQgKnNhdmVkX2Vycm5vKQorK3sKKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgY2hhciAqYnVmcG9zOyAgICAgICAgIC8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICB3aW50X3Qgd2M7CQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZSwgc3RhdGVfYmFrOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBjaGFyICpsaW5lX291dCA9IE5VTEw7CisrICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKysgIHNpemVfdCBhbGxvY2F0ZWRfb3V0ID0gMDsKKysKKysgIGludCBpbmNyZW1lbnQ7CisrICBzaXplX3QgY29sdW1uID0gMDsKKysKKysgIHNpemVfdCBsYXN0X2JsYW5rX3BvczsKKysgIHNpemVfdCBsYXN0X2JsYW5rX2NvbHVtbjsKKysgIGludCBpc19ibGFua19zZWVuOworKyAgaW50IGxhc3RfYmxhbmtfaW5jcmVtZW50OworKyAgaW50IGlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rOworKyAgc2l6ZV90IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bTsKKysgIGludCBpc19jcl9hZnRlcl9sYXN0X2JsYW5rOworKworKyNkZWZpbmUgQ0xFQVJfRkxBR1MJCQkJXAorKyAgIGRvCQkJCQkJXAorKyAgICAgewkJCQkJCVwKKysJbGFzdF9ibGFua19wb3MgPSAwOwkJCVwKKysJbGFzdF9ibGFua19jb2x1bW4gPSAwOwkJCVwKKysJaXNfYmxhbmtfc2VlbiA9IDA7CQkJXAorKwlpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayA9IDA7CQlcCisrCWJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CVwKKysJaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CQlcCisrICAgICB9CQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyNkZWZpbmUgU1RBUlRfTkVXX0xJTkUJCQlcCisrICAgZG8JCQkJCVwKKysgICAgIHsJCQkJCVwKKysgICAgICBwdXRjaGFyICgnXG4nKTsJCQlcCisrICAgICAgY29sdW1uID0gMDsJCQlcCisrICAgICAgb2Zmc2V0X291dCA9IDA7CQkJXAorKyAgICAgIENMRUFSX0ZMQUdTOwkJCVwKKysgICAgfQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyAgQ0xFQVJfRkxBR1M7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OyBidWZwb3MgKz0gbWJsZW5ndGgsIGJ1ZmxlbiAtPSBtYmxlbmd0aCkKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mIChpc3RyZWFtKSAmJiAhZmVycm9yIChpc3RyZWFtKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgaXN0cmVhbSk7CisrCSAgYnVmcG9zID0gYnVmOworKwl9CisrCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCWJyZWFrOworKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGNvbnZmYWlsID0gMDsKKysgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJnN0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToKKysJY2FzZSAoc2l6ZV90KS0yOgorKwkgIGNvbnZmYWlsKys7CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgLyogRmFsbCB0aHJvdWdoLiAqLworKworKwljYXNlIDA6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGJyZWFrOworKwl9CisrCisrcmVzY2FuOgorKyAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCQkJLyogYnl0ZSBtb2RlICovCisrCWluY3JlbWVudCA9IG1ibGVuZ3RoOworKyAgICAgIGVsc2UgaWYgKG9wZXJhdGluZ19tb2RlID09IGNoYXJhY3Rlcl9tb2RlKQkvKiBjaGFyYWN0ZXIgbW9kZSAqLworKwlpbmNyZW1lbnQgPSAxOworKyAgICAgIGVsc2UJCQkJCQkvKiBjb2x1bW4gbW9kZSAqLworKwl7CisrCSAgaWYgKGNvbnZmYWlsKQorKwkgICAgaW5jcmVtZW50ID0gMTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHN3aXRjaCAod2MpCisrCQl7CisrCQljYXNlIEwnXG4nOgorKwkJICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YoY2hhciksIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCQkgIFNUQVJUX05FV19MSU5FOworKwkJICBjb250aW51ZTsKKysJCSAgCisrCQljYXNlIEwnXGInOgorKwkJICBpbmNyZW1lbnQgPSAoY29sdW1uID4gMCkgPyAtMSA6IDA7CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1xyJzoKKysJCSAgaW5jcmVtZW50ID0gLTEgKiBjb2x1bW47CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1x0JzoKKysJCSAgaW5jcmVtZW50ID0gOCAtIGNvbHVtbiAlIDg7CisrCQkgIGJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCSAgaW5jcmVtZW50ID0gd2N3aWR0aCAod2MpOworKwkJICBpbmNyZW1lbnQgPSAoaW5jcmVtZW50IDwgMCkgPyAwIDogaW5jcmVtZW50OworKwkJfQorKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGJyZWFrX3NwYWNlcyAmJiBsYXN0X2JsYW5rX3BvcykKKysJeworKwkgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZihjaGFyKSwgbGFzdF9ibGFua19wb3MsIHN0ZG91dCk7CisrCSAgcHV0Y2hhciAoJ1xuJyk7CisrCisrCSAgb2Zmc2V0X291dCA9IG9mZnNldF9vdXQgLSBsYXN0X2JsYW5rX3BvczsKKysJICBjb2x1bW4gPSBjb2x1bW4gLSBsYXN0X2JsYW5rX2NvbHVtbiArICgoaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuaykKKysJICAgICAgPyBsYXN0X2JsYW5rX2luY3JlbWVudCA6IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSk7CisrCSAgbWVtbW92ZSAobGluZV9vdXQsIGxpbmVfb3V0ICsgbGFzdF9ibGFua19wb3MsIG9mZnNldF9vdXQpOworKwkgIENMRUFSX0ZMQUdTOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGNvbHVtbiAhPSAwKQorKwl7CisrCSAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mKGNoYXIpLCBvZmZzZXRfb3V0LCBzdGRvdXQpOworKwkgIFNUQVJUX05FV19MSU5FOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGFsbG9jYXRlZF9vdXQgPCBvZmZzZXRfb3V0ICsgbWJsZW5ndGgpCisrCXsKKysJICBhbGxvY2F0ZWRfb3V0ICs9IDEwMjQ7CisrCSAgbGluZV9vdXQgPSB4cmVhbGxvYyAobGluZV9vdXQsIGFsbG9jYXRlZF9vdXQpOworKwl9CisrCisrICAgICAgbWVtY3B5IChsaW5lX291dCArIG9mZnNldF9vdXQsIGJ1ZnBvcywgbWJsZW5ndGgpOworKyAgICAgIG9mZnNldF9vdXQgKz0gbWJsZW5ndGg7CisrICAgICAgY29sdW1uICs9IGluY3JlbWVudDsKKysKKysgICAgICBpZiAoaXNfYmxhbmtfc2VlbiAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdccicpCisrCWlzX2NyX2FmdGVyX2xhc3RfYmxhbmsgPSAxOworKworKyAgICAgIGlmIChpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdcYicpCisrCSsrYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtOworKyAgICAgIGVsc2UKKysJaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAwOworKworKyAgICAgIGlmIChicmVha19zcGFjZXMgJiYgIWNvbnZmYWlsICYmIGlzd2JsYW5rICh3YykpCisrCXsKKysJICBsYXN0X2JsYW5rX3BvcyA9IG9mZnNldF9vdXQ7CisrCSAgbGFzdF9ibGFua19jb2x1bW4gPSBjb2x1bW47CisrCSAgaXNfYmxhbmtfc2VlbiA9IDE7CisrCSAgbGFzdF9ibGFua19pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisrCSAgaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAxOworKwkgIGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CisrCSAgaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CisrCX0KKysgICAgfQorKworKyAgKnNhdmVkX2Vycm5vID0gZXJybm87CisgCisgICBpZiAob2Zmc2V0X291dCkKKyAgICAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mIChjaGFyKSwgKHNpemVfdCkgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKyAKKysgIGZyZWUobGluZV9vdXQpOworK30KKysjZW5kaWYKKysKKysvKiBGb2xkIGZpbGUgRklMRU5BTUUsIG9yIHN0YW5kYXJkIGlucHV0IGlmIEZJTEVOQU1FIGlzICItIiwKKysgICB0byBzdGRvdXQsIHdpdGggbWF4aW11bSBsaW5lIGxlbmd0aCBXSURUSC4KKysgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAxIGlmIGFuIGVycm9yIG9jY3Vycy4gKi8KKysKKytzdGF0aWMgYm9vbAorK2ZvbGRfZmlsZSAoY2hhciAqZmlsZW5hbWUsIHNpemVfdCB3aWR0aCkKKyt7CisrICBGSUxFICppc3RyZWFtOworKyAgaW50IHNhdmVkX2Vycm5vOworKworKyAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKysgICAgeworKyAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKysgICAgICBoYXZlX3JlYWRfc3RkaW4gPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CisrCisrICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIC8qIERlZmluZSBob3cgSVNUUkVBTSBpcyBiZWluZyBmb2xkZWQuICovCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBmb2xkX211bHRpYnl0ZV90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgZm9sZF90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysKKyAgIGlmIChmZXJyb3IgKGlzdHJlYW0pKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIHNhdmVkX2Vycm5vLCAiJXMiLCBmaWxlbmFtZSk7CitAQCAtMjU1LDcgKzUwNiw4IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCistICBicmVha19zcGFjZXMgPSBjb3VudF9ieXRlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworKyAgb3BlcmF0aW5nX21vZGUgPSBjb2x1bW5fbW9kZTsKKysgIGJyZWFrX3NwYWNlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworIAorICAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsIHNob3J0b3B0cywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkKKyAgICAgeworQEAgLTI2NCw3ICs1MTYsMTUgQEAKKyAgICAgICBzd2l0Y2ggKG9wdGMpCisgCXsKKyAJY2FzZSAnYic6CQkvKiBDb3VudCBieXRlcyByYXRoZXIgdGhhbiBjb2x1bW5zLiAqLworLQkgIGNvdW50X2J5dGVzID0gdHJ1ZTsKKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gY29sdW1uX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgd2F5IG9mIGZvbGRpbmcgbWF5IGJlIHNwZWNpZmllZCIpKTsKKysJICBvcGVyYXRpbmdfbW9kZSA9IGJ5dGVfbW9kZTsKKysJICBicmVhazsKKysKKysJY2FzZSAnYyc6CisrCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IGNvbHVtbl9tb2RlKQorKwkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHdheSBvZiBmb2xkaW5nIG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSAncyc6CQkvKiBCcmVhayBhdCB3b3JkIGJvdW5kYXJpZXMuICovCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYy5pMThuCTIwMDctMDItMjQgMTE6MjM6MjMuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYwkyMDA3LTAzLTAxIDE1OjEwOjU3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDEwICsyMywxOSBAQAorIAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0xMTYsMTQgKzEyNSwzOCBAQAorIC8qIFRob3VzYW5kcyBzZXBhcmF0b3I7IGlmIC0xLCB0aGVuIHRoZXJlIGlzbid0IG9uZS4gICovCisgc3RhdGljIGludCB0aG91c2FuZHNfc2VwOworIAorK3N0YXRpYyBpbnQgZm9yY2VfZ2VuZXJhbF9udW1jb21wYXJlID0gMDsKKysKKyAvKiBOb256ZXJvIGlmIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsZXMgYXJlIGhhcmQuICAqLworIHN0YXRpYyBib29sIGhhcmRfTENfQ09MTEFURTsKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyBzdGF0aWMgYm9vbCBoYXJkX0xDX1RJTUU7CisgI2VuZGlmCisgCisgI2RlZmluZSBOT05aRVJPKHgpICgoeCkgIT0gMCkKKyAKKysvKiBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyJ3MgYnl0ZSBsZW5ndGguICovCisrI2RlZmluZSBHRVRfQllURUxFTl9PRl9DSEFSKExJTSwgUFRSLCBNQkxFTkdUSCwgU1RBVEUpCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB3YzsJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIFBUUiwgTElNIC0gUFRSLCAmU1RBVEUpOwkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgU1RBVEUgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJLyogRmFsbCB0aHJvdWdoLiAqLwkJCQkJXAorKwljYXNlIDA6CQkJCQkJCQlcCisrCSAgTUJMRU5HVEggPSAxOwkJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIC8qIFRoZSBraW5kIG9mIGJsYW5rcyBmb3IgJy1iJyB0byBza2lwIGluIHZhcmlvdXMgb3B0aW9ucy4gKi8KKyBlbnVtIGJsYW5rdHlwZSB7IGJsX3N0YXJ0LCBibF9lbmQsIGJsX2JvdGggfTsKKyAKK0BAIC0yNjEsMTMgKzI5NCwxMSBAQAorICAgIHRoZXkgd2VyZSByZWFkIGlmIGFsbCBrZXlzIGNvbXBhcmUgZXF1YWwuICAqLworIHN0YXRpYyBib29sIHN0YWJsZTsKKyAKKy0vKiBJZiBUQUIgaGFzIHRoaXMgdmFsdWUsIGJsYW5rcyBzZXBhcmF0ZSBmaWVsZHMuICAqLworLWVudW0geyBUQUJfREVGQVVMVCA9IENIQVJfTUFYICsgMSB9OworLQorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBUQUJfREVGQVVMVCwgdGhlbiBmaWVsZHMgYXJlCisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIHRhYl9sZW5ndGggaXMgMCwgdGhlbiBmaWVsZHMgYXJlCisgICAgc2VwYXJhdGVkIGJ5IHRoZSBlbXB0eSBzdHJpbmcgYmV0d2VlbiBhIG5vbi1ibGFuayBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsKKyAgICBjaGFyYWN0ZXIuICovCistc3RhdGljIGludCB0YWIgPSBUQUJfREVGQVVMVDsKKytzdGF0aWMgY2hhciB0YWJbTUJfTEVOX01BWCArIDFdOworK3N0YXRpYyBzaXplX3QgdGFiX2xlbmd0aCA9IDA7CisgCisgLyogRmxhZyB0byByZW1vdmUgY29uc2VjdXRpdmUgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIG91dHB1dC4KKyAgICBPbmx5IHRoZSBsYXN0IG9mIGEgc2VxdWVuY2Ugb2YgZXF1YWwgbGluZXMgd2lsbCBiZSBvdXRwdXQuICovCitAQCAtNjM5LDYgKzY3MCw0NCBAQAorICAgICB1cGRhdGVfcHJvYyAocGlkKTsKKyB9CisgCisrLyogRnVuY3Rpb24gcG9pbnRlcnMuICovCisrc3RhdGljIHZvaWQKKysoKmluaXR0YWJsZXMpICh2b2lkKTsKKytzdGF0aWMgY2hhciAqCisrKCpiZWdmaWVsZCkgKGNvbnN0IHN0cnVjdCBsaW5lKiwgY29uc3Qgc3RydWN0IGtleWZpZWxkICopOworK3N0YXRpYyBjaGFyICoKKysoKmxpbWZpZWxkKSAoY29uc3Qgc3RydWN0IGxpbmUqLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKik7Cisrc3RhdGljIGludAorKygqZ2V0bW9udGgpIChjaGFyIGNvbnN0ICosIHNpemVfdCk7Cisrc3RhdGljIGludAorKygqa2V5Y29tcGFyZSkgKGNvbnN0IHN0cnVjdCBsaW5lICosIGNvbnN0IHN0cnVjdCBsaW5lICopOworK3N0YXRpYyBpbnQKKysoKm51bWNvbXBhcmUpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogVGVzdCBmb3Igd2hpdGUgc3BhY2UgbXVsdGlieXRlIGNoYXJhY3Rlci4KKysgICBTZXQgTEVOR1RIIHRoZSBieXRlIGxlbmd0aCBvZiBpbnZlc3RpZ2F0ZWQgbXVsdGlieXRlIGNoYXJhY3Rlci4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2lzbWJibGFuayAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3QgKmxlbmd0aCkKKyt7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICB3Y2hhcl90IHdjOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHIsIGxlbiwgJnN0YXRlKTsKKysKKysgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrICAgIHsKKysgICAgICAqbGVuZ3RoID0gMTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgKmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKyAgcmV0dXJuIGlzd2JsYW5rICh3Yyk7CisrfQorKyNlbmRpZgorKworIC8qIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGVtcG9yYXJ5IGZpbGVzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTk3OCw3ICsxMDQ3LDcgQEAKKyAgIGZyZWUgKG5vZGUpOworIH0KKyAKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAKKyBzdGF0aWMgaW50Cisgc3RydWN0X21vbnRoX2NtcCAoY29uc3Qgdm9pZCAqbTEsIGNvbnN0IHZvaWQgKm0yKQorQEAgLTk5Myw3ICsxMDYyLDcgQEAKKyAvKiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgY2xhc3MgdGFibGVzLiAqLworIAorIHN0YXRpYyB2b2lkCistaW5pdHRhYmxlcyAodm9pZCkKKytpbml0dGFibGVzX3VuaSAodm9pZCkKKyB7CisgICBzaXplX3QgaTsKKyAKK0BAIC0xMDA1LDcgKzEwNzQsNyBAQAorICAgICAgIGZvbGRfdG91cHBlcltpXSA9IHRvdXBwZXIgKGkpOworICAgICB9CisgCistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICAvKiBJZiB3ZSdyZSBub3QgaW4gdGhlICJDIiBsb2NhbGUsIHJlYWQgZGlmZmVyZW50IG5hbWVzIGZvciBtb250aHMuICAqLworICAgaWYgKGhhcmRfTENfVElNRSkKKyAgICAgeworQEAgLTEwMzEsNiArMTEwMCw2NCBAQAorICNlbmRpZgorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytpbml0dGFibGVzX21iICh2b2lkKQorK3sKKysgIGludCBpLCBqLCBrLCBsOworKyAgY2hhciAqbmFtZSwgKnM7CisrICBzaXplX3Qgc19sZW4sIG1ibGVuZ3RoOworKyAgY2hhciBtYmNbTUJfTEVOX01BWF07CisrICB3Y2hhcl90IHdjLCBwd2M7CisrICBtYnN0YXRlX3Qgc3RhdGVfbWIsIHN0YXRlX3djOworKworKyAgZm9yIChpID0gMDsgaSA8IE1PTlRIU19QRVJfWUVBUjsgaSsrKQorKyAgICB7CisrICAgICAgcyA9IChjaGFyICopIG5sX2xhbmdpbmZvIChBQk1PTl8xICsgaSk7CisrICAgICAgc19sZW4gPSBzdHJsZW4gKHMpOworKyAgICAgIG1vbnRodGFiW2ldLm5hbWUgPSBuYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc19sZW4gKyAxKTsKKysgICAgICBtb250aHRhYltpXS52YWwgPSBpICsgMTsKKysKKysgICAgICBtZW1zZXQgKCZzdGF0ZV9tYiwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysgICAgICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICBmb3IgKGogPSAwOyBqIDwgc19sZW47KQorKwl7CisrCSAgaWYgKCFpc21iYmxhbmsgKHMgKyBqLCBzX2xlbiAtIGosICZtYmxlbmd0aCkpCisrCSAgICBicmVhazsKKysJICBqICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgZm9yIChrID0gMDsgaiA8IHNfbGVuOykKKysJeworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCAocyArIGopLCAoc19sZW4gLSBqKSwgJnN0YXRlX21iKTsKKysJICBhc3NlcnQgKG1ibGVuZ3RoICE9IChzaXplX3QpLTEgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMik7CisrCSAgaWYgKG1ibGVuZ3RoID09IDApCisrCSAgICBicmVhazsKKysKKysJICBwd2MgPSB0b3d1cHBlciAod2MpOworKwkgIGlmIChwd2MgPT0gd2MpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAobWJjLCBzICsgaiwgbWJsZW5ndGgpOworKwkgICAgICBqICs9IG1ibGVuZ3RoOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaiArPSBtYmxlbmd0aDsKKysJICAgICAgbWJsZW5ndGggPSB3Y3J0b21iIChtYmMsIHB3YywgJnN0YXRlX3djKTsKKysJICAgICAgYXNzZXJ0IChtYmxlbmd0aCAhPSAoc2l6ZV90KTAgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMSk7CisrCSAgICB9CisrCisrCSAgZm9yIChsID0gMDsgbCA8IG1ibGVuZ3RoOyBsKyspCisrCSAgICBuYW1lW2srK10gPSBtYmNbbF07CisrCX0KKysgICAgICBuYW1lW2tdID0gJ1wwJzsKKysgICAgfQorKyAgcXNvcnQgKCh2b2lkICopIG1vbnRodGFiLCBNT05USFNfUEVSX1lFQVIsCisrICAgICAgc2l6ZW9mIChzdHJ1Y3QgbW9udGgpLCBzdHJ1Y3RfbW9udGhfY21wKTsKKyt9CisrI2VuZGlmCisrCisgLyogU3BlY2lmeSB0aGUgYW1vdW50IG9mIG1haW4gbWVtb3J5IHRvIHVzZSB3aGVuIHNvcnRpbmcuICAqLworIHN0YXRpYyB2b2lkCisgc3BlY2lmeV9zb3J0X3NpemUgKGNoYXIgY29uc3QgKnMpCitAQCAtMTI0MSw3ICsxMzY4LDcgQEAKKyAgICBieSBLRVkgaW4gTElORS4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistYmVnZmllbGQgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKytiZWdmaWVsZF91bmkgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyB7CisgICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKyAgIHNpemVfdCBzd29yZCA9IGtleS0+c3dvcmQ7CitAQCAtMTI1MSwxMCArMTM3OCwxMCBAQAorICAgLyogVGhlIGxlYWRpbmcgZmllbGQgc2VwYXJhdG9yIGl0c2VsZiBpcyBpbmNsdWRlZCBpbiBhIGZpZWxkIHdoZW4gLXQKKyAgICAgIGlzIGFic2VudC4gICovCisgCistICBpZiAodGFiICE9IFRBQl9ERUZBVUxUKQorKyAgaWYgKHRhYl9sZW5ndGgpCisgICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgc3dvcmQtLSkKKyAgICAgICB7CistCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWIpCisrCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWJbMF0pCisgCSAgKytwdHI7CisgCWlmIChwdHIgPCBsaW0pCisgCSAgKytwdHI7CitAQCAtMTI4MiwxMSArMTQwOSw3MCBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytiZWdmaWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGludCBpOworKyAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisrICBzaXplX3Qgc3dvcmQgPSBrZXktPnN3b3JkOworKyAgc2l6ZV90IHNjaGFyID0ga2V5LT5zY2hhcjsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBpZiAodGFiX2xlbmd0aCkKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBzd29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBtZW1jbXAgKHB0ciwgdGFiLCB0YWJfbGVuZ3RoKSAhPSAwKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJaWYgKHB0ciA8IGxpbSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrICAgICAgfQorKyAgZWxzZQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIHN3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwlpZiAocHRyIDwgbGltKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAhaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrICAgICAgfQorKworKyAgaWYgKGtleS0+c2tpcHNibGFua3MpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgc2NoYXI7IGkrKykKKysgICAgeworKyAgICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKworKyAgICAgIGlmIChwdHIgKyBtYmxlbmd0aCA+IGxpbSkKKysJYnJlYWs7CisrICAgICAgZWxzZQorKwlwdHIgKz0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIHJldHVybiBwdHI7CisrfQorKyNlbmRpZgorKworIC8qIFJldHVybiB0aGUgbGltaXQgb2YgKGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyKSB0aGUgZmllbGQKKyAgICBpbiBMSU5FIHNwZWNpZmllZCBieSBLRVkuICovCisgCisgc3RhdGljIGNoYXIgKgorLWxpbWZpZWxkIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisrbGltZmllbGRfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisgeworICAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisgICBzaXplX3QgZXdvcmQgPSBrZXktPmV3b3JkLCBlY2hhciA9IGtleS0+ZWNoYXI7CitAQCAtMTI5OSwxMCArMTQ4NSwxMCBAQAorICAgICAgYGJlZ2lubmluZycgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGRlbGltaXRpbmcgVEFCLgorICAgICAgT3RoZXJ3aXNlLCBsZWF2ZSBQVFIgcG9pbnRpbmcgYXQgdGhlIGZpcnN0IGBibGFuaycgY2hhcmFjdGVyIGFmdGVyCisgICAgICB0aGUgcHJlY2VkaW5nIGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBld29yZC0tKQorICAgICAgIHsKKy0Jd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYikKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYlswXSkKKyAJICArK3B0cjsKKyAJaWYgKHB0ciA8IGxpbSAmJiAoZXdvcmQgfCBlY2hhcikpCisgCSAgKytwdHI7CitAQCAtMTM0OCwxMCArMTUzNCwxMCBAQAorICAgICAgKi8KKyAKKyAgIC8qIE1ha2UgTElNIHBvaW50IHRvIHRoZSBlbmQgb2YgKG9uZSBieXRlIHBhc3QpIHRoZSBjdXJyZW50IGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgeworICAgICAgIGNoYXIgKm5ld2xpbTsKKy0gICAgICBuZXdsaW0gPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpOworKyAgICAgIG5ld2xpbSA9IG1lbWNociAocHRyLCB0YWJbMF0sIGxpbSAtIHB0cik7CisgICAgICAgaWYgKG5ld2xpbSkKKyAJbGltID0gbmV3bGltOworICAgICB9CitAQCAtMTM4NCw2ICsxNTcwLDEwNyBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytsaW1maWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IGV3b3JkID0ga2V5LT5ld29yZCwgZWNoYXIgPSBrZXktPmVjaGFyOworKyAgaW50IGk7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgbWVtY21wIChwdHIsIHRhYiwgdGFiX2xlbmd0aCkgIT0gMCkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCWlmIChwdHIgPCBsaW0gJiYgKGV3b3JkIHwgZWNoYXIpKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysgICAgICB9CisrICBlbHNlCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrCWlmIChwdHIgPCBsaW0pCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwl3aGlsZSAocHRyIDwgbGltICYmICFpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrCisrIyBpZmRlZiBQT1NJWF9VTlNQRUNJRklFRAorKyAgLyogTWFrZSBMSU0gcG9pbnQgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGN1cnJlbnQgZmllbGQuICAqLworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHsKKysgICAgICBjaGFyICpuZXdsaW0sICpwOworKworKyAgICAgIG5ld2xpbSA9IE5VTEw7CisrICAgICAgZm9yIChwID0gcHRyOyBwIDwgbGltOykKKysgCXsKKysJICBpZiAobWVtY21wIChwLCB0YWIsIHRhYl9sZW5ndGgpID09IDApCisrCSAgICB7CisrCSAgICAgIG5ld2xpbSA9IHA7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgIHAgKz0gbWJsZW5ndGg7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgY2hhciAqbmV3bGltOworKyAgICAgIG5ld2xpbSA9IHB0cjsKKysKKysgICAgICB3aGlsZSAobmV3bGltIDwgbGltICYmIGlzbWJibGFuayAobmV3bGltLCBsaW0gLSBuZXdsaW0sICZtYmxlbmd0aCkpCisrCW5ld2xpbSArPSBtYmxlbmd0aDsKKysgICAgICBpZiAocHRyIDwgbGltKQorKwl7CisrCSAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwl9CisrICAgICAgd2hpbGUgKG5ld2xpbSA8IGxpbSAmJiAhaXNtYmJsYW5rIChuZXdsaW0sIGxpbSAtIG5ld2xpbSwgJm1ibGVuZ3RoKSkKKysJbmV3bGltICs9IG1ibGVuZ3RoOworKyAgICAgIGxpbSA9IG5ld2xpbTsKKysgICAgfQorKyMgZW5kaWYKKysKKysgIC8qIElmIHdlJ3JlIHNraXBwaW5nIGxlYWRpbmcgYmxhbmtzLCBkb24ndCBzdGFydCBjb3VudGluZyBjaGFyYWN0ZXJzCisrICAgKiAgICAgIHVudGlsIGFmdGVyIHNraXBwaW5nIHBhc3QgYW55IGxlYWRpbmcgYmxhbmtzLiAgKi8KKysgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrICAgICAgcHRyICs9IG1ibGVuZ3RoOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIC8qIEFkdmFuY2UgUFRSIGJ5IEVDSEFSIChpZiBwb3NzaWJsZSksIGJ1dCBubyBmdXJ0aGVyIHRoYW4gTElNLiAgKi8KKysgIGZvciAoaSA9IDA7IGkgPCBlY2hhcjsgaSsrKQorKyAgICB7CisrICAgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCisrICAgICAgaWYgKHB0ciArIG1ibGVuZ3RoID4gbGltKQorKwlicmVhazsKKysgICAgICBlbHNlCisrCXB0ciArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIHB0cjsKKyt9CisrI2VuZGlmCisrCisgLyogRmlsbCBCVUYgcmVhZGluZyBmcm9tIEZQLCBtb3ZpbmcgYnVmLT5sZWZ0IGJ5dGVzIGZyb20gdGhlIGVuZAorICAgIG9mIGJ1Zi0+YnVmIHRvIHRoZSBiZWdpbm5pbmcgZmlyc3QuICBJZiBFT0YgaXMgcmVhY2hlZCBhbmQgdGhlCisgICAgZmlsZSB3YXNuJ3QgdGVybWluYXRlZCBieSBhIG5ld2xpbmUsIHN1cHBseSBvbmUuICBTZXQgdXAgQlVGJ3MgbGluZQorQEAgLTE0NjYsOCArMTc1MywyNCBAQAorIAkJICBlbHNlCisgCQkgICAgeworIAkJICAgICAgaWYgKGtleS0+c2tpcHNibGFua3MpCistCQkJd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKy0JCQkgIGxpbmVfc3RhcnQrKzsKKysJCQl7CisrI2lmIEhBVkVfTUJSVE9XQworKwkJCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkJCSAgICB7CisrCQkJICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKwkJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKysJCQkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJCSAgICAgIHdoaWxlIChsaW5lX3N0YXJ0IDwgbGluZS0+a2V5bGltICYmCisrCQkJCSAgICAgaXNtYmJsYW5rIChsaW5lX3N0YXJ0LAorKwkJCQkJCWxpbmUtPmtleWxpbSAtIGxpbmVfc3RhcnQsCisrCQkJCQkJJm1ibGVuZ3RoKSkKKysJCQkJbGluZV9zdGFydCArPSBtYmxlbmd0aDsKKysJCQkgICAgfQorKwkJCSAgZWxzZQorKyNlbmRpZgorKwkJCSAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKysJCQkgICAgbGluZV9zdGFydCsrOworKwkJCX0KKyAJCSAgICAgIGxpbmUtPmtleWJlZyA9IGxpbmVfc3RhcnQ7CisgCQkgICAgfQorIAkJfQorQEAgLTE1MDAsNyArMTgwMyw3IEBACisgICAgaGlkZW91c2x5IGZhc3QuICovCisgCisgc3RhdGljIGludAorLW51bWNvbXBhcmUgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisrbnVtY29tcGFyZV91bmkgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisgeworICAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmEpXSkKKyAgICAgYSsrOworQEAgLTE1MTAsNiArMTgxMywyNSBAQAorICAgcmV0dXJuIHN0cm51bWNtcCAoYSwgYiwgZGVjaW1hbF9wb2ludCwgdGhvdXNhbmRzX3NlcCk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrbnVtY29tcGFyZV9tYiAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKKyt7CisrICBzaXplX3QgbWJsZW5ndGgsIGxlbjsKKysgIGxlbiA9IHN0cmxlbiAoYSk7IC8qIG9rYXkgZm9yIFVURi04ICovCisrICB3aGlsZSAoKmEgJiYgaXNtYmJsYW5rIChhLCBsZW4gPiBNQl9DVVJfTUFYID8gTUJfQ1VSX01BWCA6IGxlbiwgJm1ibGVuZ3RoKSkKKysgICAgeworKyAgICAgIGEgKz0gbWJsZW5ndGg7CisrICAgICAgbGVuIC09IG1ibGVuZ3RoOworKyAgICB9CisrICBsZW4gPSBzdHJsZW4gKGIpOyAvKiBva2F5IGZvciBVVEYtOCAqLworKyAgd2hpbGUgKCpiICYmIGlzbWJibGFuayAoYiwgbGVuID4gTUJfQ1VSX01BWCA/IE1CX0NVUl9NQVggOiBsZW4sICZtYmxlbmd0aCkpCisrICAgIGIgKz0gbWJsZW5ndGg7CisrCisrICByZXR1cm4gc3RybnVtY21wIChhLCBiLCBkZWNpbWFsX3BvaW50LCB0aG91c2FuZHNfc2VwKTsKKyt9CisrI2VuZGlmIC8qIEhBVl9FTUJSVE9XQyAqLworKworIHN0YXRpYyBpbnQKKyBnZW5lcmFsX251bWNvbXBhcmUgKGNvbnN0IGNoYXIgKnNhLCBjb25zdCBjaGFyICpzYikKKyB7CitAQCAtMTU0Myw3ICsxODY1LDcgQEAKKyAgICBSZXR1cm4gMCBpZiB0aGUgbmFtZSBpbiBTIGlzIG5vdCByZWNvZ25pemVkLiAgKi8KKyAKKyBzdGF0aWMgaW50CistZ2V0bW9udGggKGNoYXIgY29uc3QgKm1vbnRoLCBzaXplX3QgbGVuKQorK2dldG1vbnRoX3VuaSAoY2hhciBjb25zdCAqbW9udGgsIHNpemVfdCBsZW4pCisgeworICAgc2l6ZV90IGxvID0gMDsKKyAgIHNpemVfdCBoaSA9IE1PTlRIU19QRVJfWUVBUjsKK0BAIC0xNjk4LDExICsyMDIwLDc5IEBACisgICByZXR1cm4gZGlmZjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytnZXRtb250aF9tYiAoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKKyt7CisrICBjaGFyICptb250aDsKKysgIHJlZ2lzdGVyIHNpemVfdCBpOworKyAgcmVnaXN0ZXIgaW50IGxvID0gMCwgaGkgPSBNT05USFNfUEVSX1lFQVIsIHJlc3VsdDsKKysgIGNoYXIgKnRtcDsKKysgIHNpemVfdCB3Y2xlbmd0aCwgbWJsZW5ndGg7CisrICBjb25zdCBjaGFyICoqcHA7CisrICBjb25zdCB3Y2hhcl90ICoqd3BwOworKyAgd2NoYXJfdCAqbW9udGhfd2NzOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgd2hpbGUgKGxlbiA+IDAgJiYgaXNtYmJsYW5rIChzLCBsZW4sICZtYmxlbmd0aCkpCisrICAgIHsKKysgICAgICBzICs9IG1ibGVuZ3RoOworKyAgICAgIGxlbiAtPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgaWYgKGxlbiA9PSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIG1vbnRoID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxKTsKKysKKysgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrICBtZW1jcHkgKHRtcCwgcywgbGVuKTsKKysgIHRtcFtsZW5dID0gJ1wwJzsKKysgIHBwID0gKGNvbnN0IGNoYXIgKiopJnRtcDsKKysgIG1vbnRoX3djcyA9ICh3Y2hhcl90ICopIGFsbG9jYSAoKGxlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgd2NsZW5ndGggPSBtYnNydG93Y3MgKG1vbnRoX3djcywgcHAsIGxlbiArIDEsICZzdGF0ZSk7CisrICBhc3NlcnQgKHdjbGVuZ3RoICE9IChzaXplX3QpLTEgJiYgKnBwID09IE5VTEwpOworKworKyAgZm9yIChpID0gMDsgaSA8IHdjbGVuZ3RoOyBpKyspCisrICAgIHsKKysgICAgICBtb250aF93Y3NbaV0gPSB0b3d1cHBlcihtb250aF93Y3NbaV0pOworKyAgICAgIGlmIChpc3dibGFuayAobW9udGhfd2NzW2ldKSkKKysJeworKwkgIG1vbnRoX3djc1tpXSA9IEwnXDAnOworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIHdwcCA9IChjb25zdCB3Y2hhcl90ICoqKSZtb250aF93Y3M7CisrCisrICBtYmxlbmd0aCA9IHdjc3J0b21icyAobW9udGgsIHdwcCwgbGVuICsgMSwgJnN0YXRlKTsKKysgIGFzc2VydCAobWJsZW5ndGggIT0gKC0xKSAmJiAqd3BwID09IE5VTEwpOworKworKyAgZG8KKysgICAgeworKyAgICAgIGludCBpeCA9IChsbyArIGhpKSAvIDI7CisrCisrICAgICAgaWYgKHN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltpeF0ubmFtZSwgc3RybGVuIChtb250aHRhYltpeF0ubmFtZSkpIDwgMCkKKysJaGkgPSBpeDsKKysgICAgICBlbHNlCisrCWxvID0gaXg7CisrICAgIH0KKysgIHdoaWxlIChoaSAtIGxvID4gMSk7CisrCisrICByZXN1bHQgPSAoIXN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltsb10ubmFtZSwgc3RybGVuIChtb250aHRhYltsb10ubmFtZSkpCisrICAgICAgPyBtb250aHRhYltsb10udmFsIDogMCk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysjZW5kaWYKKysKKyAvKiBDb21wYXJlIHR3byBsaW5lcyBBIGFuZCBCIHRyeWluZyBldmVyeSBrZXkgaW4gc2VxdWVuY2UgdW50aWwgdGhlcmUKKyAgICBhcmUgbm8gbW9yZSBrZXlzIG9yIGEgZGlmZmVyZW5jZSBpcyBmb3VuZC4gKi8KKyAKKyBzdGF0aWMgaW50Cista2V5Y29tcGFyZSAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK2tleWNvbXBhcmVfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqYSwgY29uc3Qgc3RydWN0IGxpbmUgKmIpCisgeworICAgc3RydWN0IGtleWZpZWxkIGNvbnN0ICprZXkgPSBrZXlsaXN0OworIAorQEAgLTE4NzUsNiArMjI2NSwxNzkgQEAKKyAgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50Cisra2V5Y29tcGFyZV9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK3sKKysgIHN0cnVjdCBrZXlmaWVsZCAqa2V5ID0ga2V5bGlzdDsKKysKKysgIC8qIEZvciB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIHRoZSBrZXkgcG9zaXRpb25zIGhhdmUgYmVlbgorKyAgICAgcHJlY29tcHV0ZWQgZm9yIHVzLiAqLworKyAgY2hhciAqdGV4dGEgPSBhLT5rZXliZWc7CisrICBjaGFyICp0ZXh0YiA9IGItPmtleWJlZzsKKysgIGNoYXIgKmxpbWEgPSBhLT5rZXlsaW07CisrICBjaGFyICpsaW1iID0gYi0+a2V5bGltOworKworKyAgc2l6ZV90IG1ibGVuZ3RoX2EsIG1ibGVuZ3RoX2I7CisrICB3Y2hhcl90IHdjX2EsIHdjX2I7CisrICBtYnN0YXRlX3Qgc3RhdGVfYSwgc3RhdGVfYjsKKysKKysgIGludCBkaWZmOworKworKyAgbWVtc2V0ICgmc3RhdGVfYSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmc3RhdGVfYiwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgKnRyYW5zbGF0ZSA9ICh1bnNpZ25lZCBjaGFyICopIGtleS0+dHJhbnNsYXRlOworKyAgICAgIGJvb2wgY29uc3QgKmlnbm9yZSA9IGtleS0+aWdub3JlOworKworKyAgICAgIC8qIEZpbmQgdGhlIGxlbmd0aHMuICovCisrICAgICAgc2l6ZV90IGxlbmEgPSBsaW1hIDw9IHRleHRhID8gMCA6IGxpbWEgLSB0ZXh0YTsKKysgICAgICBzaXplX3QgbGVuYiA9IGxpbWIgPD0gdGV4dGIgPyAwIDogbGltYiAtIHRleHRiOworKworKyAgICAgIC8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGZpZWxkcy4gKi8KKysgICAgICBpZiAoa2V5LT5yYW5kb20pCisrICAgICAgICBkaWZmID0gY29tcGFyZV9yYW5kb20gKHRleHRhLCBsZW5hLCB0ZXh0YiwgbGVuYik7CisrICAgICAgZWxzZSBpZiAoa2V5LT5udW1lcmljIHwga2V5LT5nZW5lcmFsX251bWVyaWMpCisrCXsKKysJICBjaGFyIHNhdmVhID0gKmxpbWEsIHNhdmViID0gKmxpbWI7CisrCisrCSAgKmxpbWEgPSAqbGltYiA9ICdcMCc7CisrCSAgaWYgKGZvcmNlX2dlbmVyYWxfbnVtY29tcGFyZSkKKysJICAgIGRpZmYgPSBnZW5lcmFsX251bWNvbXBhcmUgKHRleHRhLCB0ZXh0Yik7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9ICgoa2V5LT5udW1lcmljID8gbnVtY29tcGFyZSA6IGdlbmVyYWxfbnVtY29tcGFyZSkKKysJCSh0ZXh0YSwgdGV4dGIpKTsKKysJICAqbGltYSA9IHNhdmVhLCAqbGltYiA9IHNhdmViOworKwl9CisrICAgICAgZWxzZSBpZiAoa2V5LT5tb250aCkKKysJZGlmZiA9IGdldG1vbnRoICh0ZXh0YSwgbGVuYSkgLSBnZXRtb250aCAodGV4dGIsIGxlbmIpOworKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChpZ25vcmUgfHwgdHJhbnNsYXRlKQorKwkgICAgeworKwkgICAgICBjaGFyICpjb3B5X2EgPSAoY2hhciAqKSBhbGxvY2EgKGxlbmEgKyAxICsgbGVuYiArIDEpOworKwkgICAgICBjaGFyICpjb3B5X2IgPSBjb3B5X2EgKyBsZW5hICsgMTsKKysJICAgICAgc2l6ZV90IG5ld19sZW5fYSwgbmV3X2xlbl9iOworKwkgICAgICBzaXplX3QgaSwgajsKKysKKysJICAgICAgLyogSWdub3JlIGFuZC9vciB0cmFuc2xhdGUgY2hhcnMgYmVmb3JlIGNvbXBhcmluZy4gICovCisrIyBkZWZpbmUgSUdOT1JFX0NIQVJTKE5FV19MRU4sIExFTiwgVEVYVCwgQ09QWSwgV0MsIE1CTEVOR1RILCBTVEFURSkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB1d2M7CQkJCQkJCVwKKysgICAgICBjaGFyIG1iY1tNQl9MRU5fTUFYXTsJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgZm9yIChORVdfTEVOID0gaSA9IDA7IGkgPCBMRU47KQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgIHN0YXRlX2JhayA9IFNUQVRFOwkJCQkJCVwKKysJICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgVEVYVCArIGksIExFTiAtIGksICZTVEFURSk7CQlcCisrCQkJCQkJCQkJXAorKwkgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEJCVwKKysJICAgICAgfHwgTUJMRU5HVEggPT0gMCkJCQkJCQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEpCVwKKysJCVNUQVRFID0gc3RhdGVfYmFrOwkJCQkJXAorKwkgICAgICBpZiAoIWlnbm9yZSkJCQkJCQlcCisrCQlDT1BZW05FV19MRU4rK10gPSBURVhUW2krK107CQkJCVwKKysJICAgICAgY29udGludWU7CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgaWYgKGlnbm9yZSkJCQkJCQkJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBpZiAoKGlnbm9yZSA9PSBub25wcmludGluZyAmJiAhaXN3cHJpbnQgKFdDKSkJCVwKKysJCSAgIHx8IChpZ25vcmUgPT0gbm9uZGljdGlvbmFyeQkJCQlcCisrCQkgICAgICAgJiYgIWlzd2FsbnVtIChXQykgJiYgIWlzd2JsYW5rIChXQykpKQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIGNvbnRpbnVlOwkJCQkJCVwKKysJCX0JCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICBpZiAodHJhbnNsYXRlKQkJCQkJCVwKKysJICAgIHsJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgICAgIHV3YyA9IHRvd3VwcGVyKFdDKTsJCQkJCVwKKysJICAgICAgaWYgKFdDID09IHV3YykJCQkJCQlcCisrCQl7CQkJCQkJCVwKKysJCSAgbWVtY3B5IChtYmMsIFRFWFQgKyBpLCBNQkxFTkdUSCk7CQkJXAorKwkJICBpICs9IE1CTEVOR1RIOwkJCQkJXAorKwkJfQkJCQkJCQlcCisrCSAgICAgIGVsc2UJCQkJCQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIFdDID0gdXdjOwkJCQkJCVwKKysJCSAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CQlcCisrCQkJCQkJCQkJXAorKwkJICBNQkxFTkdUSCA9IHdjcnRvbWIgKG1iYywgV0MsICZzdGF0ZV93Yyk7CQlcCisrCQkgIGFzc2VydCAoTUJMRU5HVEggIT0gKHNpemVfdCktMSAmJiBNQkxFTkdUSCAhPSAwKTsJXAorKwkJfQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgICAgICBmb3IgKGogPSAwOyBqIDwgTUJMRU5HVEg7IGorKykJCQkJXAorKwkJQ09QWVtORVdfTEVOKytdID0gbWJjW2pdOwkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCSAgZWxzZQkJCQkJCQkJXAorKwkgICAgZm9yIChqID0gMDsgaiA8IE1CTEVOR1RIOyBqKyspCQkJCVwKKysJICAgICAgQ09QWVtORVdfTEVOKytdID0gVEVYVFtpKytdOwkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgICBDT1BZW05FV19MRU5dID0gJ1wwJzsJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysJICAgICAgSUdOT1JFX0NIQVJTIChuZXdfbGVuX2EsIGxlbmEsIHRleHRhLCBjb3B5X2EsCisrCQkJICAgIHdjX2EsIG1ibGVuZ3RoX2EsIHN0YXRlX2EpOworKwkgICAgICBJR05PUkVfQ0hBUlMgKG5ld19sZW5fYiwgbGVuYiwgdGV4dGIsIGNvcHlfYiwKKysJCQkgICAgd2NfYiwgbWJsZW5ndGhfYiwgc3RhdGVfYik7CisrCSAgICAgIGRpZmYgPSB4bWVtY29sbCAoY29weV9hLCBuZXdfbGVuX2EsIGNvcHlfYiwgbmV3X2xlbl9iKTsKKysJICAgIH0KKysJICBlbHNlIGlmIChsZW5hID09IDApCisrCSAgICBkaWZmID0gLSBOT05aRVJPIChsZW5iKTsKKysJICBlbHNlIGlmIChsZW5iID09IDApCisrCSAgICBnb3RvIGdyZWF0ZXI7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9IHhtZW1jb2xsICh0ZXh0YSwgbGVuYSwgdGV4dGIsIGxlbmIpOworKwl9CisrCisrICAgICAgaWYgKGRpZmYpCisrCWdvdG8gbm90X2VxdWFsOworKworKyAgICAgIGtleSA9IGtleS0+bmV4dDsKKysgICAgICBpZiAoISBrZXkpCisrCWJyZWFrOworKworKyAgICAgIC8qIEZpbmQgdGhlIGJlZ2lubmluZyBhbmQgbGltaXQgb2YgdGhlIG5leHQgZmllbGQuICAqLworKyAgICAgIGlmIChrZXktPmV3b3JkICE9IC0xKQorKwlsaW1hID0gbGltZmllbGQgKGEsIGtleSksIGxpbWIgPSBsaW1maWVsZCAoYiwga2V5KTsKKysgICAgICBlbHNlCisrCWxpbWEgPSBhLT50ZXh0ICsgYS0+bGVuZ3RoIC0gMSwgbGltYiA9IGItPnRleHQgKyBiLT5sZW5ndGggLSAxOworKworKyAgICAgIGlmIChrZXktPnN3b3JkICE9IC0xKQorKwl0ZXh0YSA9IGJlZ2ZpZWxkIChhLCBrZXkpLCB0ZXh0YiA9IGJlZ2ZpZWxkIChiLCBrZXkpOworKyAgICAgIGVsc2UKKysJeworKwkgIHRleHRhID0gYS0+dGV4dCwgdGV4dGIgPSBiLT50ZXh0OworKwkgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKwkgICAgeworKwkgICAgICB3aGlsZSAodGV4dGEgPCBsaW1hICYmIGlzbWJibGFuayAodGV4dGEsIGxpbWEgLSB0ZXh0YSwgJm1ibGVuZ3RoX2EpKQorKwkJdGV4dGEgKz0gbWJsZW5ndGhfYTsKKysJICAgICAgd2hpbGUgKHRleHRiIDwgbGltYiAmJiBpc21iYmxhbmsgKHRleHRiLCBsaW1iIC0gdGV4dGIsICZtYmxlbmd0aF9iKSkKKysJCXRleHRiICs9IG1ibGVuZ3RoX2I7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrCisrZ3JlYXRlcjoKKysgIGRpZmYgPSAxOworK25vdF9lcXVhbDoKKysgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisrfQorKyNlbmRpZgorKworIC8qIENvbXBhcmUgdHdvIGxpbmVzIEEgYW5kIEIsIHJldHVybmluZyBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUKKyAgICBkZXBlbmRpbmcgb24gd2hldGhlciBBIGNvbXBhcmVzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiBCLiAqLworCitAQCAtMjc0NCw3ICszMzA1LDcgQEAKKyAgIGluaXRpYWxpemVfZXhpdF9mYWlsdXJlIChTT1JUX0ZBSUxVUkUpOworIAorICAgaGFyZF9MQ19DT0xMQVRFID0gaGFyZF9sb2NhbGUgKExDX0NPTExBVEUpOworLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgaGFyZF9MQ19USU1FID0gaGFyZF9sb2NhbGUgKExDX1RJTUUpOworICNlbmRpZgorIAorQEAgLTI3NjUsNiArMzMyNiwyNyBAQAorICAgICAgIHRob3VzYW5kc19zZXAgPSAtMTsKKyAgIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBpbml0dGFibGVzID0gaW5pdHRhYmxlc19tYjsKKysgICAgICBiZWdmaWVsZCA9IGJlZ2ZpZWxkX21iOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfbWI7CisrICAgICAgZ2V0bW9udGggPSBnZXRtb250aF9tYjsKKysgICAgICBrZXljb21wYXJlID0ga2V5Y29tcGFyZV9tYjsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV9tYjsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaW5pdHRhYmxlcyA9IGluaXR0YWJsZXNfdW5pOworKyAgICAgIGJlZ2ZpZWxkID0gYmVnZmllbGRfdW5pOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfdW5pOworKyAgICAgIGdldG1vbnRoID0gZ2V0bW9udGhfdW5pOworKyAgICAgIGtleWNvbXBhcmUgPSBrZXljb21wYXJlX3VuaTsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV91bmk7CisrICAgIH0KKysKKyAgIGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworICAgaW5pdHRhYmxlcyAoKTsKKyAKK0BAIC0zMDE1LDEzICszNTk3LDM1IEBACisgCisgCWNhc2UgJ3QnOgorIAkgIHsKKy0JICAgIGNoYXIgbmV3dGFiID0gb3B0YXJnWzBdOworLQkgICAgaWYgKCEgbmV3dGFiKQorKwkgICAgY2hhciBuZXd0YWJbTUJfTEVOX01BWCArIDFdOworKwkgICAgc2l6ZV90IG5ld3RhYl9sZW5ndGggPSAxOworKwkgICAgc3RybmNweSAobmV3dGFiLCBvcHRhcmcsIE1CX0xFTl9NQVgpOworKwkgICAgaWYgKCEgbmV3dGFiWzBdKQorIAkgICAgICBlcnJvciAoU09SVF9GQUlMVVJFLCAwLCBfKCJlbXB0eSB0YWIiKSk7CistCSAgICBpZiAob3B0YXJnWzFdKQorKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJd2NoYXJfdCB3YzsKKysJCW1ic3RhdGVfdCBzdGF0ZTsKKysJCXNpemVfdCBpOworKworKwkJbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJfbGVuZ3RoID0gbWJydG93YyAoJndjLCBuZXd0YWIsIHN0cm5sZW4gKG5ld3RhYiwKKysJCQkJCQkJICAgICAgIE1CX0xFTl9NQVgpLAorKwkJCQkJICZzdGF0ZSk7CisrCQlzd2l0Y2ggKG5ld3RhYl9sZW5ndGgpCisrCQkgIHsKKysJCSAgY2FzZSAoc2l6ZV90KSAtMToKKysJCSAgY2FzZSAoc2l6ZV90KSAtMjoKKysJCSAgY2FzZSAwOgorKwkJICAgIG5ld3RhYl9sZW5ndGggPSAxOworKwkJICB9CisrCSAgICAgIH0KKysjZW5kaWYKKysJICAgIGlmIChuZXd0YWJfbGVuZ3RoID09IDEgJiYgb3B0YXJnWzFdKQorIAkgICAgICB7CisgCQlpZiAoU1RSRVEgKG9wdGFyZywgIlxcMCIpKQorLQkJICBuZXd0YWIgPSAnXDAnOworKwkJICBuZXd0YWJbMF0gPSAnXDAnOworIAkJZWxzZQorIAkJICB7CisgCQkgICAgLyogUHJvdm9rZSB3aXRoIGBzb3J0IC10eHgnLiAgQ29tcGxhaW4gYWJvdXQKK0BAIC0zMDMyLDkgKzM2MzYsMTIgQEAKKyAJCQkgICBxdW90ZSAob3B0YXJnKSk7CisgCQkgIH0KKyAJICAgICAgfQorLQkgICAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCAmJiB0YWIgIT0gbmV3dGFiKQorKwkgICAgaWYgKHRhYl9sZW5ndGgKKysJCSYmICh0YWJfbGVuZ3RoICE9IG5ld3RhYl9sZW5ndGgKKysJCSAgICB8fCBtZW1jbXAgKHRhYiwgbmV3dGFiLCB0YWJfbGVuZ3RoKSAhPSAwKSkKKyAJICAgICAgZXJyb3IgKFNPUlRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CistCSAgICB0YWIgPSBuZXd0YWI7CisrCSAgICBtZW1jcHkgKHRhYiwgbmV3dGFiLCBuZXd0YWJfbGVuZ3RoKTsKKysJICAgIHRhYl9sZW5ndGggPSBuZXd0YWJfbGVuZ3RoOworIAkgIH0KKyAJICBicmVhazsKKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvdW5leHBhbmQuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuZXhwYW5kLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zOSwxMSArMzksMjggQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICAgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmV4cGFuZCIKKyAKK0BAIC0xMTAsNiArMTI3LDIwOCBAQAorICAge05VTEwsIDAsIE5VTEwsIDB9CisgfTsKKyAKKytzdGF0aWMgRklMRSAqbmV4dF9maWxlIChGSUxFICpmcCk7CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrdW5leHBhbmRfbXVsdGlieXRlICh2b2lkKQorK3sKKysgIEZJTEUgKmZwOwkJCS8qIElucHV0IHN0cmVhbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2M7CQkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CQkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCQkgICB3aGljaCBzaG93cyBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysKKysgIC8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wOiAqLworKyAgaW50IHRhYl9pbmRleCA9IDA7CQkvKiBGb3IgY2FsY3VsYXRpbmcgd2lkdGggb2YgcGVuZGluZyB0YWJzLiAqLworKyAgaW50IHByaW50X3RhYl9pbmRleCA9IDA7CS8qIEZvciBwcmludGluZyBhcyBtYW55IHRhYnMgYXMgcG9zc2libGUuICovCisrICB1bnNpZ25lZCBpbnQgY29sdW1uID0gMDsJLyogQ29sdW1uIG9uIHNjcmVlbiBvZiBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrICB1bnNpZ25lZCBpbnQgcGVuZGluZyA9IDA7CS8qIFBlbmRpbmcgY29sdW1ucyBvZiBibGFua3MuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mKGZwKSAmJiAhZmVycm9yKGZwKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgZnApOworKwkgIGJ1ZnBvcyA9IGJ1ZjsKKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlmIChidWZsZW4gPCAxKQorKwl7CisrCSAgbWJsZW5ndGggPSAxOworKwkgIHdjID0gV0VPRjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJmlfc3RhdGUpOworKwl9CisrCisrICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJeworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICB3YyA9IEwnXDAnOworKwl9CisrCisrICAgICAgaWYgKHdjID09IEwnICcgJiYgY29udmVydCAmJiBjb2x1bW4gPCBJTlRfTUFYKQorKwl7CisrCSAgKytwZW5kaW5nOworKwkgICsrY29sdW1uOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkKKysJeworKwkgIGlmICh0YWJfc2l6ZSA9PSAwKQorKwkgICAgeworKwkgICAgICAvKiBEbyBub3QgbGV0IHRhYl9pbmRleCA9PSBmaXJzdF9mcmVlX3RhYjsKKysJCSBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkgICAgICB3aGlsZSAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJdGFiX2luZGV4Kys7CisrCSAgICAgIG5leHRfdGFiX2NvbHVtbiA9IHRhYl9saXN0W3RhYl9pbmRleF07CisrCSAgICAgIGlmICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEpCisrCQl0YWJfaW5kZXgrKzsKKysJICAgICAgaWYgKGNvbHVtbiA+PSBuZXh0X3RhYl9jb2x1bW4pCisrCQl7CisrCQkgIGNvbnZlcnQgPSAwOwkvKiBSYW4gb3V0IG9mIHRhYiBzdG9wcy4gKi8KKysJCSAgZ290byBmbHVzaF9wZW5kX21iOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbmV4dF90YWJfY29sdW1uID0gY29sdW1uICsgdGFiX3NpemUgLSBjb2x1bW4gJSB0YWJfc2l6ZTsKKysJICAgIH0KKysJICBwZW5kaW5nICs9IG5leHRfdGFiX2NvbHVtbiAtIGNvbHVtbjsKKysJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCX0KKysgICAgICBlbHNlCisrCXsKKytmbHVzaF9wZW5kX21iOgorKwkgIC8qIEZsdXNoIHBlbmRpbmcgc3BhY2VzLiAgUHJpbnQgYXMgbWFueSB0YWJzIGFzIHBvc3NpYmxlLAorKwkgICAgIHRoZW4gcHJpbnQgdGhlIHJlc3QgYXMgc3BhY2VzLiAqLworKwkgIGlmIChwZW5kaW5nID09IDEpCisrCSAgICB7CisrCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCSAgICAgIHBlbmRpbmcgPSAwOworKwkgICAgfQorKwkgIGNvbHVtbiAtPSBwZW5kaW5nOworKwkgIHdoaWxlIChwZW5kaW5nID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKHRhYl9zaXplID09IDApCisrCQl7CisrCQkgIC8qIERvIG5vdCBsZXQgcHJpbnRfdGFiX2luZGV4ID09IGZpcnN0X2ZyZWVfdGFiOworKwkJICAgICBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkJICB3aGlsZSAocHJpbnRfdGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICAgICAmJiBjb2x1bW4gPj0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCSAgbmV4dF90YWJfY29sdW1uID0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XTsKKysJCSAgaWYgKHByaW50X3RhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBuZXh0X3RhYl9jb2x1bW4gPQorKwkJICAgIGNvbHVtbiArIHRhYl9zaXplIC0gY29sdW1uICUgdGFiX3NpemU7CisrCQl9CisrCSAgICAgIGlmIChuZXh0X3RhYl9jb2x1bW4gLSBjb2x1bW4gPD0gcGVuZGluZykKKysJCXsKKysJCSAgcHV0Y2hhciAoJ1x0Jyk7CisrCQkgIHBlbmRpbmcgLT0gbmV4dF90YWJfY29sdW1uIC0gY29sdW1uOworKwkJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLS1wcmludF90YWJfaW5kZXg7CisrCQkgIGNvbHVtbiArPSBwZW5kaW5nOworKwkJICB3aGlsZSAocGVuZGluZyAhPSAwKQorKwkJICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCQkgICAgICBwZW5kaW5nLS07CisrCQkgICAgfQorKwkJfQorKwkgICAgfQorKworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgeworKwkgICAgICBmcCA9IG5leHRfZmlsZSAoZnApOworKwkgICAgICBpZiAoZnAgPT0gTlVMTCkKKysJCWJyZWFrOyAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQpCisrCQl7CisrCQkgICsrY29sdW1uOworKwkJICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJICAgIGNvbnZlcnQgPSAwOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHB1dGNoYXIgKGJ1ZlswXSk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAobWJsZW5ndGggPT0gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJY29udmVydCA9IDA7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCkKKysJCXsKKysJCSAgaWYgKHdjID09IEwnXGInKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChjb2x1bW4gPiAwKQorKwkJCS0tY29sdW1uOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGludCB3aWR0aDsgICAgICAgICAgICAvKiBUaGUgd2lkdGggb2YgV0MuICovCisrCisrCQkgICAgICB3aWR0aCA9IHdjd2lkdGggKHdjKTsKKysJCSAgICAgIGNvbHVtbiArPSAod2lkdGggPiAwKSA/IHdpZHRoIDogMDsKKysJCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQkJY29udmVydCA9IDA7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAod2MgPT0gTCdcbicpCisrCQl7CisrCQkgIHRhYl9pbmRleCA9IHByaW50X3RhYl9pbmRleCA9IDA7CisrCQkgIGNvbHVtbiA9IHBlbmRpbmcgPSAwOworKwkJICBjb252ZXJ0ID0gMTsKKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworKworIHZvaWQKKyB1c2FnZSAoaW50IHN0YXR1cykKKyB7CitAQCAtNTMxLDcgKzc1MCwxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICB1bmV4cGFuZCAoKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHVuZXhwYW5kX211bHRpYnl0ZSAoKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgdW5leHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9wci5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvcHIuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTMxMyw2ICszMTMsMzIgQEAKKyAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBNQl9MRU5fTUFYLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYID09IDEKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogR2V0IE1CX0NVUl9NQVguICAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3cHJpbnQoKS4gLS0gZm9yIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBpc3dwcmludCAmJiAhSEFWRV9JU1dQUklOVAorKyMgZGVmaW5lIGlzd3ByaW50KHdjKSAxCisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorQEAgLTMyNCw2ICszNTAsMTggQEAKKyAjaW5jbHVkZSAic3RyZnRpbWUuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorIAorKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9XQ1dJRFRICisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9XQ1dJRFRICisrZXh0ZXJuIGludCB3Y3dpZHRoICgpOworKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJwciIKKyAKK0BAIC00MTYsNyArNDU0LDIwIEBACisgCisgI2RlZmluZSBOVUxMQ09MIChDT0xVTU4gKikwCisgCistc3RhdGljIGludCBjaGFyX3RvX2NsdW1wIChjaGFyIGMpOworKy8qIEZ1bnRpb24gcG9pbnRlcnMgdG8gc3dpdGNoIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlIG9yIGZvcgorKyAgIG11bHRpYnl0ZSBsb2NhbGUuIElmIG11bHRpYnl0ZSBmdW5jdGlvbnMgZG8gbm90IGV4aXN0IGluIHlvdXIgc3lzeXRlbSwKKysgICB0aGVzZSBwb2ludGVycyBhbHdheXMgcG9pbnQgdGhlIGZ1bmN0aW9uIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgKCpwcmludF9jaGFyKSAoY2hhciBjKTsKKytzdGF0aWMgaW50ICgqY2hhcl90b19jbHVtcCkgKGNoYXIgYyk7CisrCisrLyogRnVuY3Rpb25zIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9zaW5nbGUgKGNoYXIgYyk7Cisrc3RhdGljIGludCBjaGFyX3RvX2NsdW1wX3NpbmdsZSAoY2hhciBjKTsKKysKKysvKiBGdW5jdGlvbnMgZm9yIG11bHRpYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKTsKKytzdGF0aWMgaW50IGNoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYyk7CisrCisgc3RhdGljIGJvb2wgcmVhZF9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyBib29sIHByaW50X3BhZ2UgKHZvaWQpOworIHN0YXRpYyBib29sIHByaW50X3N0b3JlZCAoQ09MVU1OICpwKTsKK0BAIC00MjYsNiArNDc3LDcgQEAKKyBzdGF0aWMgdm9pZCBwYWRfYWNyb3NzX3RvIChpbnQgcG9zaXRpb24pOworIHN0YXRpYyB2b2lkIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKTsKKyBzdGF0aWMgdm9pZCBnZXRvcHRhcmcgKGNoYXIgKmFyZywgY2hhciBzd2l0Y2hfY2hhciwgY2hhciAqY2hhcmFjdGVyLAorKwkJICAgICAgIGludCAqY2hhcmFjdGVyX2xlbmd0aCwgaW50ICpjaGFyYWN0ZXJfd2lkdGgsCisgCQkgICAgICAgaW50ICpudW1iZXIpOworIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpOworIHN0YXRpYyB2b2lkIHByaW50X2ZpbGVzIChpbnQgbnVtYmVyX29mX2ZpbGVzLCBjaGFyICoqYXYpOworQEAgLTQ0MCw3ICs0OTIsNiBAQAorIHN0YXRpYyB2b2lkIHBhZF9kb3duIChpbnQgbGluZXMpOworIHN0YXRpYyB2b2lkIHJlYWRfcmVzdF9vZl9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyB2b2lkIHNraXBfcmVhZCAoQ09MVU1OICpwLCBpbnQgY29sdW1uX251bWJlcik7Cistc3RhdGljIHZvaWQgcHJpbnRfY2hhciAoY2hhciBjKTsKKyBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBwcmludF9zZXBfc3RyaW5nICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBzZXBhcmF0b3Jfc3RyaW5nIChjb25zdCBjaGFyICpvcHRhcmdfUyk7CitAQCAtNDU1LDcgKzUwNiw3IEBACisgICAgd2Ugc3RvcmUgdGhlIGxlZnRtb3N0IGNvbHVtbnMgY29udGlndW91c2x5IGluIGJ1ZmYuCisgICAgVG8gcHJpbnQgYSBsaW5lIGZyb20gYnVmZiwgZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgZnJvbSBsaW5lX3ZlY3RvcltpXSwgYW5kIHByaW50IHVwIHRvIGxpbmVfdmVjdG9yW2kgKyAxXS4gKi8KKy1zdGF0aWMgY2hhciAqYnVmZjsKKytzdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmZjsKKyAKKyAvKiBJbmRleCBvZiB0aGUgcG9zaXRpb24gaW4gYnVmZiB3aGVyZSB0aGUgbmV4dCBjaGFyYWN0ZXIKKyAgICB3aWxsIGJlIHN0b3JlZC4gKi8KK0BAIC01NTksNyArNjEwLDcgQEAKKyBzdGF0aWMgYm9vbCB1bnRhYmlmeV9pbnB1dCA9IGZhbHNlOworIAorIC8qICgtZSkgVGhlIGlucHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgaW5wdXRfdGFiX2NoYXIgPSAnXHQnOworK3N0YXRpYyBjaGFyIGlucHV0X3RhYl9jaGFyW01CX0xFTl9NQVhdID0gIlx0IjsKKyAKKyAvKiAoLWUpIFRhYnN0b3BzIGFyZSBhdCBjaGFyc19wZXJfdGFiLCAyKmNoYXJzX3Blcl90YWIsIDMqY2hhcnNfcGVyX3RhYiwgLi4uCisgICAgd2hlcmUgdGhlIGxlZnRtb3N0IGNvbHVtbiBpcyAxLiAqLworQEAgLTU2OSw3ICs2MjAsMTAgQEAKKyBzdGF0aWMgYm9vbCB0YWJpZnlfb3V0cHV0ID0gZmFsc2U7CisgCisgLyogKC1pKSBUaGUgb3V0cHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgb3V0cHV0X3RhYl9jaGFyID0gJ1x0JzsKKytzdGF0aWMgY2hhciBvdXRwdXRfdGFiX2NoYXJbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtaSkgVGhlIGJ5dGUgbGVuZ3RoIG9mIG91dHB1dCB0YWIgY2hhcmFjdGVyLiAqLworK3N0YXRpYyBpbnQgb3V0cHV0X3RhYl9jaGFyX2xlbmd0aCA9IDE7CisgCisgLyogKC1pKSBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCB0YWIuICovCisgc3RhdGljIGludCBjaGFyc19wZXJfb3V0cHV0X3RhYiA9IDg7CitAQCAtNjQzLDcgKzY5NywxMyBAQAorIHN0YXRpYyBib29sIG51bWJlcmVkX2xpbmVzID0gZmFsc2U7CisgCisgLyogKC1uKSBDaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworLXN0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3IgPSAnXHQnOworK3N0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3JbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtbikgVGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworK3N0YXRpYyBpbnQgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGggPSAxOworKworKy8qICgtbikgVGhlIGNoYXJhY3RlciB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIHdoaWNoIGZvbGxvd3MgZWFjaCBsaW5lIG51bWJlci4gKi8KKytzdGF0aWMgaW50IG51bWJlcl9zZXBhcmF0b3Jfd2lkdGggPSAwOworIAorIC8qICgtbikgbGluZSBjb3VudGluZyBzdGFydHMgd2l0aCAxc3QgbGluZSBvZiBpbnB1dCBmaWxlIChub3Qgd2l0aCAxc3QKKyAgICBsaW5lIG9mIDFzdCBwYWdlIHByaW50ZWQpLiAqLworQEAgLTY5Niw2ICs3NTYsNyBAQAorICAgIC1hfENPTFVNTnwtbSBpcyBhIGBzcGFjZScgYW5kIHdpdGggdGhlIC1KIG9wdGlvbiBhIGB0YWInLiAqLworIHN0YXRpYyBjaGFyICpjb2xfc2VwX3N0cmluZyA9ICIiOworIHN0YXRpYyBpbnQgY29sX3NlcF9sZW5ndGggPSAwOworK3N0YXRpYyBpbnQgY29sX3NlcF93aWR0aCA9IDA7Cisgc3RhdGljIGNoYXIgKmNvbHVtbl9zZXBhcmF0b3IgPSAiICI7Cisgc3RhdGljIGNoYXIgKmxpbmVfc2VwYXJhdG9yID0gIlx0IjsKKyAKK0BAIC04NTIsNiArOTEzLDEzIEBACisgICBjb2xfc2VwX2xlbmd0aCA9IChpbnQpIHN0cmxlbiAob3B0YXJnX1MpOworICAgY29sX3NlcF9zdHJpbmcgPSB4bWFsbG9jIChjb2xfc2VwX2xlbmd0aCArIDEpOworICAgc3RyY3B5IChjb2xfc2VwX3N0cmluZywgb3B0YXJnX1MpOworKworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgY29sX3NlcF93aWR0aCA9IG1ic3dpZHRoIChjb2xfc2VwX3N0cmluZywgMCk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIGNvbF9zZXBfd2lkdGggPSBjb2xfc2VwX2xlbmd0aDsKKyB9CisgCisgaW50CitAQCAtODc3LDYgKzk0NSwyMSBAQAorIAorICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworIAorKy8qIERlZmluZSB3aGljaCBmdW5jdGlvbnMgYXJlIHVzZWQsIHRoZSBvbmVzIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUgb3IgdGhlIG9uZXMKKysgICBmb3IgbXVsdGlieXRlIGxvY2FsZS4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBwcmludF9jaGFyID0gcHJpbnRfY2hhcl9tdWx0aTsKKysgICAgICBjaGFyX3RvX2NsdW1wID0gY2hhcl90b19jbHVtcF9tdWx0aTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgcHJpbnRfY2hhciA9IHByaW50X2NoYXJfc2luZ2xlOworKyAgICAgIGNoYXJfdG9fY2x1bXAgPSBjaGFyX3RvX2NsdW1wX3NpbmdsZTsKKysgICAgfQorKworICAgbl9maWxlcyA9IDA7CisgICBmaWxlX25hbWVzID0gKGFyZ2MgPiAxCisgCQk/IHhtYWxsb2MgKChhcmdjIC0gMSkgKiBzaXplb2YgKGNoYXIgKikpCitAQCAtOTQ5LDggKzEwMzIsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnZSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnZScsICZpbnB1dF90YWJfY2hhciwKKy0JCSAgICAgICAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB7CisrCSAgICAgIGludCBkdW1teV9sZW5ndGgsIGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2UnLCBpbnB1dF90YWJfY2hhciwgJmR1bW15X2xlbmd0aCwKKysJCQkgJmR1bW15X3dpZHRoLCAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB1bnRhYmlmeV9pbnB1dCA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtOTYzLDggKzEwNTAsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnaSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnaScsICZvdXRwdXRfdGFiX2NoYXIsCistCQkgICAgICAgJmNoYXJzX3Blcl9vdXRwdXRfdGFiKTsKKysJICAgIHsKKysJICAgICAgaW50IGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2knLCBvdXRwdXRfdGFiX2NoYXIsICZvdXRwdXRfdGFiX2NoYXJfbGVuZ3RoLAorKwkJCSAmZHVtbXlfd2lkdGgsICZjaGFyc19wZXJfb3V0cHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB0YWJpZnlfb3V0cHV0ID0gdHJ1ZTsKKyAJICBicmVhazsKK0BAIC05OTEsOCArMTA4Miw4IEBACisgCWNhc2UgJ24nOgorIAkgIG51bWJlcmVkX2xpbmVzID0gdHJ1ZTsKKyAJICBpZiAob3B0YXJnKQorLQkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgJm51bWJlcl9zZXBhcmF0b3IsCistCQkgICAgICAgJmNoYXJzX3Blcl9udW1iZXIpOworKwkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgbnVtYmVyX3NlcGFyYXRvciwgJm51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoLAorKwkJICAgICAgICZudW1iZXJfc2VwYXJhdG9yX3dpZHRoLCAmY2hhcnNfcGVyX251bWJlcik7CisgCSAgYnJlYWs7CisgCWNhc2UgJ04nOgorIAkgIHNraXBfY291bnQgPSBmYWxzZTsKK0BAIC0xMDMxLDcgKzExMjIsNyBAQAorIAkgIG9sZF9zID0gZmFsc2U7CisgCSAgLyogUmVzZXQgYW4gYWRkaXRpb25hbCBpbnB1dCBvZiAtcywgLVMgZG9taW5hdGVzIC1zICovCisgCSAgY29sX3NlcF9zdHJpbmcgPSAiIjsKKy0JICBjb2xfc2VwX2xlbmd0aCA9IDA7CisrCSAgY29sX3NlcF9sZW5ndGggPSBjb2xfc2VwX3dpZHRoID0gMDsKKyAJICB1c2VfY29sX3NlcGFyYXRvciA9IHRydWU7CisgCSAgaWYgKG9wdGFyZykKKyAJICAgIHNlcGFyYXRvcl9zdHJpbmcgKG9wdGFyZyk7CitAQCAtMTE4OCwxMCArMTI3OSw0NSBAQAorICAgIGEgbnVtYmVyLiAqLworIAorIHN0YXRpYyB2b2lkCistZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpudW1iZXIpCisrZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpjaGFyYWN0ZXJfbGVuZ3RoLAorKwkgICBpbnQgKmNoYXJhY3Rlcl93aWR0aCwgaW50ICpudW1iZXIpCisgeworICAgaWYgKCFJU0RJR0lUICgqYXJnKSkKKy0gICAgKmNoYXJhY3RlciA9ICphcmcrKzsKKysgICAgeworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCS8qIGZvciBtdWx0aWJ5dGUgbG9jYWxlLiAqLworKwl7CisrCSAgd2NoYXJfdCB3YzsKKysJICBzaXplX3QgbWJsZW5ndGg7CisrCSAgaW50IHdpZHRoOworKwkgIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYXJnLCBzdHJubGVuKGFyZywgTUJfTEVOX01BWCksICZzdGF0ZSk7CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICpjaGFyYWN0ZXJfbGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCSAgICAgIHdpZHRoID0gd2N3aWR0aCAod2MpOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gKHdpZHRoIDwgMCkgPyAwIDogd2lkdGg7CisrCSAgICB9CisrCisrCSAgc3RybmNweSAoY2hhcmFjdGVyLCBhcmcsICpjaGFyYWN0ZXJfbGVuZ3RoKTsKKysJICBhcmcgKz0gKmNoYXJhY3Rlcl9sZW5ndGg7CisrCX0KKysgICAgICBlbHNlCQkJLyogZm9yIHNpbmdsZSBieXRlIGxvY2FsZS4gKi8KKysjZW5kaWYKKysJeworKwkgICpjaGFyYWN0ZXIgPSAqYXJnKys7CisrCSAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICpjaGFyYWN0ZXJfd2lkdGggPSAxOworKwl9CisrICAgIH0KKysKKyAgIGlmICgqYXJnKQorICAgICB7CisgICAgICAgbG9uZyBpbnQgdG1wX2xvbmc7CitAQCAtMTI1Niw3ICsxMzgyLDcgQEAKKyAJICBlbHNlCisgCSAgICBjb2xfc2VwX3N0cmluZyA9IGNvbHVtbl9zZXBhcmF0b3I7CisgCistCSAgY29sX3NlcF9sZW5ndGggPSAxOworKwkgIGNvbF9zZXBfbGVuZ3RoID0gY29sX3NlcF93aWR0aCA9IDE7CisgCSAgdXNlX2NvbF9zZXBhcmF0b3IgPSB0cnVlOworIAl9CisgICAgICAgLyogSXQncyByYXRoZXIgcG9pbnRsZXNzIHRvIGRlZmluZSBhIFRBQiBzZXBhcmF0b3Igd2l0aCBjb2x1bW4KK0BAIC0xMjg4LDExICsxNDE0LDExIEBACisgCSAgICAgVEFCX1dJRFRIIChjaGFyc19wZXJfaW5wdXRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsgICAqLworIAorICAgICAgIC8qIEVzdGltYXRlIGNoYXJzX3Blcl90ZXh0IHdpdGhvdXQgYW55IG1hcmdpbiBhbmQga2VlcCBpdCBjb25zdGFudC4gKi8KKy0gICAgICBpZiAobnVtYmVyX3NlcGFyYXRvciA9PSAnXHQnKQorKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKworIAkgIFRBQl9XSURUSCAoY2hhcnNfcGVyX2RlZmF1bHRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsKKyAgICAgICBlbHNlCistCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKyAxOworKwludW1iZXJfd2lkdGggPSBjaGFyc19wZXJfbnVtYmVyICsgbnVtYmVyX3NlcGFyYXRvcl93aWR0aDsKKyAKKyAgICAgICAvKiBUaGUgbnVtYmVyIGlzIHBhcnQgb2YgdGhlIGNvbHVtbiB3aWR0aCB1bmxlc3Mgd2UgYXJlCisgCSBwcmludGluZyBmaWxlcyBpbiBwYXJhbGxlbC4gKi8KK0BAIC0xMzA3LDcgKzE0MzMsNyBAQAorICAgICB9CisgCisgICBjaGFyc19wZXJfY29sdW1uID0gKGNoYXJzX3Blcl9saW5lIC0gY2hhcnNfdXNlZF9ieV9udW1iZXIgLQorLQkJICAgICAoY29sdW1ucyAtIDEpICogY29sX3NlcF9sZW5ndGgpIC8gY29sdW1uczsKKysJCSAgICAgKGNvbHVtbnMgLSAxKSAqIGNvbF9zZXBfd2lkdGgpIC8gY29sdW1uczsKKyAKKyAgIGlmIChjaGFyc19wZXJfY29sdW1uIDwgMSkKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygicGFnZSB3aWR0aCB0b28gbmFycm93IikpOworQEAgLTE0MzIsNyArMTU1OCw3IEBACisgCisgICAvKiBFbmxhcmdlIHAtPnN0YXJ0X3Bvc2l0aW9uIG9mIGZpcnN0IGNvbHVtbiB0byB1c2UgdGhlIHNhbWUgZm9ybSBvZgorICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCB3aXRoIGFsbCBjb2x1bW5zLiAqLworLSAgaCA9IGggKyBjb2xfc2VwX2xlbmd0aDsKKysgIGggPSBoICsgY29sX3NlcF93aWR0aDsKKyAKKyAgIC8qIFRoaXMgbG9vcCB0YWtlcyBjYXJlIG9mIGFsbCBidXQgdGhlIHJpZ2h0bW9zdCBjb2x1bW4uICovCisgCitAQCAtMTQ2Niw3ICsxNTkyLDcgQEAKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGggPSBoX25leHQgKyBjb2xfc2VwX2xlbmd0aDsKKysJICBoID0gaF9uZXh0ICsgY29sX3NlcF93aWR0aDsKKyAJICBoX25leHQgPSBoICsgY2hhcnNfcGVyX2NvbHVtbjsKKyAJfQorICAgICB9CitAQCAtMTc1Niw5ICsxODgyLDkgQEAKKyBhbGlnbl9jb2x1bW4gKENPTFVNTiAqcCkKKyB7CisgICBwYWRkaW5nX25vdF9wcmludGVkID0gcC0+c3RhcnRfcG9zaXRpb247CistICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoID4gMCkKKysgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCA+IDApCisgICAgIHsKKy0gICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGgpOworKyAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoKTsKKyAgICAgICBwYWRkaW5nX25vdF9wcmludGVkID0gQU5ZV0hFUkU7CisgICAgIH0KKyAKK0BAIC0yMDI5LDEzICsyMTU1LDEzIEBACisgICAgICAgLyogTWF5IGJlIHRvbyBnZW5lcm91cy4gKi8KKyAgICAgICBidWZmID0gWDJSRUFMTE9DIChidWZmLCAmYnVmZl9hbGxvY2F0ZWQpOworICAgICB9CistICBidWZmW2J1ZmZfY3VycmVudCsrXSA9IGM7CisrICBidWZmW2J1ZmZfY3VycmVudCsrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKQorIHsKKy0gIGludCBpOworKyAgaW50IGksIGo7CisgICBjaGFyICpzOworICAgaW50IGxlZnRfY3V0OworIAorQEAgLTIwNTgsMjIgKzIxODQsMjQgQEAKKyAgICAgICAvKiBUYWJpZmljYXRpb24gaXMgYXNzdW1lZCBmb3IgbXVsdGlwbGUgY29sdW1ucywgYWxzbyBmb3Igbi1zZXBhcmF0b3JzLAorIAkgYnV0IGBkZWZhdWx0IG4tc2VwYXJhdG9yID0gVEFCJyBoYXNuJ3QgYmVlbiBnaXZlbiBwcmlvcml0eSBvdmVyCisgCSBlcXVhbCBjb2x1bW5fd2lkdGggYWxzbyBzcGVjaWZpZWQgYnkgUE9TSVguICovCistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBpZiAobnVtYmVyX3NlcGFyYXRvclswXSA9PSAnXHQnKQorICAgICAgICAgeworICAgICAgICAgICBpID0gbnVtYmVyX3dpZHRoIC0gY2hhcnNfcGVyX251bWJlcjsKKyAgICAgICAgICAgd2hpbGUgKGktLSA+IDApCisgCSAgICAocC0+Y2hhcl9mdW5jKSAoJyAnKTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCistICAgICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CisrCWZvciAoaiA9IDA7IGogPCBudW1iZXJfc2VwYXJhdG9yX2xlbmd0aDsgaisrKQorKwkgIChwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yW2pdKTsKKyAgICAgfQorICAgZWxzZQorICAgICAvKiBUbyBjb21wbHkgd2l0aCBQT1NJWCwgd2UgYXZvaWQgYW55IGV4cGFuc2lvbiBvZiBkZWZhdWx0IFRBQgorICAgICAgICBzZXBhcmF0b3Igd2l0aCBhIHNpbmdsZSBjb2x1bW4gb3V0cHV0LiBObyBjb2x1bW5fd2lkdGggcmVxdWlyZW1lbnQKKyAgICAgICAgaGFzIHRvIGJlIGNvbnNpZGVyZWQuICovCisgICAgIHsKKy0gICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGg7IGorKykKKysJKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3Jbal0pOworKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgICAgICAgICBvdXRwdXRfcG9zaXRpb24gPSBQT1NfQUZURVJfVEFCIChjaGFyc19wZXJfb3V0cHV0X3RhYiwKKyAJCQkgIG91dHB1dF9wb3NpdGlvbik7CisgICAgIH0KK0BAIC0yMjM0LDcgKzIzNjIsNyBAQAorICAgd2hpbGUgKGdvYWwgLSBoX29sZCA+IDEKKyAJICYmIChoX25ldyA9IFBPU19BRlRFUl9UQUIgKGNoYXJzX3Blcl9vdXRwdXRfdGFiLCBoX29sZCkpIDw9IGdvYWwpCisgICAgIHsKKy0gICAgICBwdXRjaGFyIChvdXRwdXRfdGFiX2NoYXIpOworKyAgICAgIGZ3cml0ZSAob3V0cHV0X3RhYl9jaGFyLCBzaXplb2YoY2hhciksIG91dHB1dF90YWJfY2hhcl9sZW5ndGgsIHN0ZG91dCk7CisgICAgICAgaF9vbGQgPSBoX25ldzsKKyAgICAgfQorICAgd2hpbGUgKCsraF9vbGQgPD0gZ29hbCkKK0BAIC0yMjU0LDYgKzIzODIsNyBAQAorIHsKKyAgIGNoYXIgKnM7CisgICBpbnQgbCA9IGNvbF9zZXBfbGVuZ3RoOworKyAgaW50IG5vdF9zcGFjZV9mbGFnOworIAorICAgcyA9IGNvbF9zZXBfc3RyaW5nOworIAorQEAgLTIyNjcsNiArMjM5Niw3IEBACisgICAgIHsKKyAgICAgICBmb3IgKDsgc2VwYXJhdG9yc19ub3RfcHJpbnRlZCA+IDA7IC0tc2VwYXJhdG9yc19ub3RfcHJpbnRlZCkKKyAJeworKwkgIG5vdF9zcGFjZV9mbGFnID0gMDsKKyAJICB3aGlsZSAobC0tID4gMCkKKyAJICAgIHsKKyAJICAgICAgLyogMyB0eXBlcyBvZiBzZXBfc3RyaW5nczogc3BhY2VzIG9ubHksIHNwYWNlcyBhbmQgY2hhcnMsCitAQCAtMjI4MCwxMiArMjQxMCwxNSBAQAorIAkJfQorIAkgICAgICBlbHNlCisgCQl7CisrCQkgIG5vdF9zcGFjZV9mbGFnID0gMTsKKyAJCSAgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisgCQkgICAgcHJpbnRfd2hpdGVfc3BhY2UgKCk7CisgCQkgIHB1dGNoYXIgKCpzKyspOworLQkJICArK291dHB1dF9wb3NpdGlvbjsKKyAJCX0KKyAJICAgIH0KKysJICBpZiAobm90X3NwYWNlX2ZsYWcpCisrCSAgICBvdXRwdXRfcG9zaXRpb24gKz0gY29sX3NlcF93aWR0aDsKKysKKyAgICAgICAgICAgLyogc2VwX3N0cmluZyBlbmRzIHdpdGggc29tZSBzcGFjZXMgKi8KKyAJICBpZiAoc3BhY2VzX25vdF9wcmludGVkID4gMCkKKyAJICAgIHByaW50X3doaXRlX3NwYWNlICgpOworQEAgLTIzMTMsNyArMjQ0Niw3IEBACisgICAgcmVxdWlyZWQgbnVtYmVyIG9mIHRhYnMgYW5kIHNwYWNlcy4gKi8KKyAKKyBzdGF0aWMgdm9pZAorLXByaW50X2NoYXIgKGNoYXIgYykKKytwcmludF9jaGFyX3NpbmdsZSAoY2hhciBjKQorIHsKKyAgIGlmICh0YWJpZnlfb3V0cHV0KQorICAgICB7CitAQCAtMjMzNyw2ICsyNDcwLDc0IEBACisgICBwdXRjaGFyIChjKTsKKyB9CisgCisrI2lmZGVmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKQorK3sKKysgIHN0YXRpYyBzaXplX3QgbWJjX3BvcyA9IDA7CisrICBzdGF0aWMgY2hhciBtYmNbTUJfTEVOX01BWF0gPSB7J1wwJ307CisrICBzdGF0aWMgbWJzdGF0ZV90IHN0YXRlID0geydcMCd9OworKyAgbWJzdGF0ZV90IHN0YXRlX2JhazsKKysgIHdjaGFyX3Qgd2M7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBpbnQgd2lkdGg7CisrCisrICBpZiAodGFiaWZ5X291dHB1dCkKKysgICAgeworKyAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgIG1iY1ttYmNfcG9zKytdID0gYzsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgICAgIHdoaWxlIChtYmNfcG9zID4gMCkKKysJeworKwkgIHN3aXRjaCAobWJsZW5ndGgpCisrCSAgICB7CisrCSAgICBjYXNlIChzaXplX3QpLTI6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICByZXR1cm47CisrCisrCSAgICBjYXNlIChzaXplX3QpLTE6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICArK291dHB1dF9wb3NpdGlvbjsKKysJICAgICAgcHV0Y2hhciAobWJjWzBdKTsKKysJICAgICAgbWVtbW92ZSAobWJjLCBtYmMgKyAxLCBNQl9DVVJfTUFYIC0gMSk7CisrCSAgICAgIC0tbWJjX3BvczsKKysJICAgICAgYnJlYWs7CisrCisrCSAgICBjYXNlIDA6CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIGlmICh3YyA9PSBMJyAnKQorKwkJeworKwkJICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKwkJICAtLW1iY19wb3M7CisrCQkgICsrc3BhY2VzX25vdF9wcmludGVkOworKwkJICByZXR1cm47CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisrCQlwcmludF93aGl0ZV9zcGFjZSAoKTsKKysKKysJICAgICAgLyogTm9ucHJpbnRhYmxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIHdpZHRoIDAsIGV4Y2VwdCBMJ1xiJy4gKi8KKysJICAgICAgaWYgKCh3aWR0aCA9IHdjd2lkdGggKHdjKSkgPCAxKQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgLS1vdXRwdXRfcG9zaXRpb247CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW91dHB1dF9wb3NpdGlvbiArPSB3aWR0aDsKKysKKysJICAgICAgZndyaXRlIChtYmMsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICAgIG1lbW1vdmUgKG1iYywgbWJjICsgbWJsZW5ndGgsIE1CX0NVUl9NQVggLSBtYmxlbmd0aCk7CisrCSAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysgICAgICByZXR1cm47CisrICAgIH0KKysgIHB1dGNoYXIgKGMpOworK30KKysjZW5kaWYKKysKKyAvKiBTa2lwIHRvIHBhZ2UgUEFHRSBiZWZvcmUgcHJpbnRpbmcuCisgICAgUEFHRSBtYXkgYmUgbGFyZ2VyIHRoYW4gdG90YWwgbnVtYmVyIG9mIHBhZ2VzLiAqLworIAorQEAgLTI1MTcsOSArMjcxOCw5IEBACisgCSAgYWxpZ25fZW1wdHlfY29scyA9IGZhbHNlOworIAl9CisgCistICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoID4gMCkKKyAJeworLQkgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCk7CisrCSAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGgpOworIAkgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBBTllXSEVSRTsKKyAJfQorIAorQEAgLTI2MjAsOSArMjgyMSw5IEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGggPiAwKQorICAgICB7CistICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoKTsKKysgICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCk7CisgICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IEFOWVdIRVJFOworICAgICB9CisgCitAQCAtMjYzNSw4ICsyODM2LDggQEAKKyAgIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPT0gMCkKKyAgICAgeworICAgICAgIG91dHB1dF9wb3NpdGlvbiA9IHAtPnN0YXJ0X3Bvc2l0aW9uICsgZW5kX3ZlY3RvcltsaW5lXTsKKy0gICAgICBpZiAocC0+c3RhcnRfcG9zaXRpb24gLSBjb2xfc2VwX2xlbmd0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorLQlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF9sZW5ndGg7CisrICAgICAgaWYgKHAtPnN0YXJ0X3Bvc2l0aW9uIC0gY29sX3NlcF93aWR0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorKwlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF93aWR0aDsKKyAgICAgfQorIAorICAgcmV0dXJuIHRydWU7CitAQCAtMjY1NSw3ICsyODU2LDcgQEAKKyAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyAxLikgKi8KKyAKKyBzdGF0aWMgaW50CistY2hhcl90b19jbHVtcCAoY2hhciBjKQorK2NoYXJfdG9fY2x1bXBfc2luZ2xlIChjaGFyIGMpCisgeworICAgdW5zaWduZWQgY2hhciB1YyA9IGM7CisgICBjaGFyICpzID0gY2x1bXBfYnVmZjsKK0BAIC0yNjY1LDEwICsyODY2LDEwIEBACisgICBpbnQgY2hhcnM7CisgICBpbnQgY2hhcnNfcGVyX2MgPSA4OworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIpCisrICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhclswXSkKKyAgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIgfHwgYyA9PSAnXHQnKQorKyAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXJbMF0gfHwgYyA9PSAnXHQnKQorICAgICB7CisgICAgICAgd2lkdGggPSBUQUJfV0lEVEggKGNoYXJzX3Blcl9jLCBpbnB1dF9wb3NpdGlvbik7CisgCitAQCAtMjczOSw2ICsyOTQwLDE1NCBAQAorICAgcmV0dXJuIGNoYXJzOworIH0KKyAKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2NoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYykKKyt7CisrICBzdGF0aWMgc2l6ZV90IG1iY19wb3MgPSAwOworKyAgc3RhdGljIGNoYXIgbWJjW01CX0xFTl9NQVhdID0geydcMCd9OworKyAgc3RhdGljIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrICB3Y2hhcl90IHdjOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgaW50IHdjX3dpZHRoOworKyAgcmVnaXN0ZXIgY2hhciAqcyA9IGNsdW1wX2J1ZmY7CisrICByZWdpc3RlciBpbnQgaSwgajsKKysgIGNoYXIgZXNjX2J1ZmZbNF07CisrICBpbnQgd2lkdGg7CisrICBpbnQgY2hhcnM7CisrICBpbnQgY2hhcnNfcGVyX2MgPSA4OworKworKyAgc3RhdGVfYmFrID0gc3RhdGU7CisrICBtYmNbbWJjX3BvcysrXSA9IGM7CisrICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgd2lkdGggPSAwOworKyAgY2hhcnMgPSAwOworKyAgd2hpbGUgKG1iY19wb3MgPiAwKQorKyAgICB7CisrICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysJeworKwljYXNlIChzaXplX3QpLTI6CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgcmV0dXJuIDA7CisrCisrCWNhc2UgKHNpemVfdCktMToKKysJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICBtYmxlbmd0aCA9IDE7CisrCisrCSAgaWYgKHVzZV9lc2Nfc2VxdWVuY2UgfHwgdXNlX2NudHJsX3ByZWZpeCkKKysJICAgIHsKKysJICAgICAgd2lkdGggPSArNDsKKysJICAgICAgY2hhcnMgPSArNDsKKysJICAgICAgKnMrKyA9ICdcXCc7CisrCSAgICAgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIG1iY1swXSk7CisrCSAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjsgKytpKQorKwkJKnMrKyA9IChpbnQpIGVzY19idWZmW2ldOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gMTsKKysJICAgICAgY2hhcnMgKz0gMTsKKysJICAgICAgKnMrKyA9IG1iY1swXTsKKysJICAgIH0KKysJICBicmVhazsKKysKKysJY2FzZSAwOgorKwkgIG1ibGVuZ3RoID0gMTsKKysJCS8qIEZhbGwgdGhyb3VnaCAqLworKworKwlkZWZhdWx0OgorKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwKQorKwkgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworKworKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwIHx8IGMgPT0gJ1x0JykKKysJICAgIHsKKysJICAgICAgaW50ICB3aWR0aF9pbmM7CisrCisrCSAgICAgIHdpZHRoX2luYyA9IFRBQl9XSURUSCAoY2hhcnNfcGVyX2MsIGlucHV0X3Bvc2l0aW9uKTsKKysJICAgICAgd2lkdGggKz0gd2lkdGhfaW5jOworKworKwkgICAgICBpZiAodW50YWJpZnlfaW5wdXQpCisrCQl7CisrCQkgIGZvciAoaSA9IHdpZHRoX2luYzsgaTsgLS1pKQorKwkJICAgICpzKysgPSAnICc7CisrCQkgIGNoYXJzICs9IHdpZHRoX2luYzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgIG1ibGVuZ3RoOyBpKyspCisrCQkgICAgKnMrKyA9IG1iY1tpXTsKKysJCSAgY2hhcnMgKz0gbWJsZW5ndGg7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZSBpZiAoKHdjX3dpZHRoID0gd2N3aWR0aCAod2MpKSA8IDEpCisrCSAgICB7CisrCSAgICAgIGlmICh1c2VfZXNjX3NlcXVlbmNlKQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICB7CisrCQkgICAgICB3aWR0aCArPSA0OworKwkJICAgICAgY2hhcnMgKz0gNDsKKysJCSAgICAgICpzKysgPSAnXFwnOworKwkJICAgICAgc3ByaW50ZiAoZXNjX2J1ZmYsICIlMDNvIiwgYyk7CisrCQkgICAgICBmb3IgKGogPSAwOyBqIDw9IDI7ICsraikKKysJCQkqcysrID0gKGludCkgZXNjX2J1ZmZbal07CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh1c2VfY250cmxfcHJlZml4KQorKwkJeworKwkJICBpZiAod2MgPCAwMjAwKQorKwkJICAgIHsKKysJCSAgICAgIHdpZHRoICs9IDI7CisrCQkgICAgICBjaGFycyArPSAyOworKwkJICAgICAgKnMrKyA9ICdeJzsKKysJCSAgICAgICpzKysgPSB3YyBeIDAxMDA7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkJeworKwkJCSAgd2lkdGggKz0gNDsKKysJCQkgIGNoYXJzICs9IDQ7CisrCQkJICAqcysrID0gJ1xcJzsKKysJCQkgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIGMpOworKwkJCSAgZm9yIChqID0gMDsgaiA8PSAyOyArK2opCisrCQkJICAgICpzKysgPSAoaW50KSBlc2NfYnVmZltqXTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh3YyA9PSBMJ1xiJykKKysJCXsKKysJCSAgd2lkdGggKz0gLTE7CisrCQkgIGNoYXJzICs9IDE7CisrCQkgICpzKysgPSBjOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHdpZHRoICs9IDA7CisrCQkgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICAqcysrID0gbWJjW2ldOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gd2Nfd2lkdGg7CisrCSAgICAgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSpzKysgPSBtYmNbaV07CisrCSAgICB9CisrCX0KKysgICAgICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKyAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIGlucHV0X3Bvc2l0aW9uICs9IHdpZHRoOworKyAgcmV0dXJuIGNoYXJzOworK30KKysjZW5kaWYKKysKKyAvKiBXZSd2ZSBqdXN0IHByaW50ZWQgc29tZSBmaWxlcyBhbmQgbmVlZCB0byBjbGVhbiB1cCB0aGluZ3MgYmVmb3JlCisgICAgbG9va2luZyBmb3IgbW9yZSBvcHRpb25zIGFuZCBwcmludGluZyB0aGUgbmV4dCBiYXRjaCBvZiBmaWxlcy4KKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvY3V0LmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9jdXQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDYgKzI5LDExIEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zNyw2ICs0MiwxOCBAQAorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4JKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgdW5kZWYgTUJfTEVOX01BWAorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImN1dCIKKyAKK0BAIC02Nyw2ICs4NCw1MiBAQAorICAgICB9CQkJCQkJCVwKKyAgIHdoaWxlICgwKQorIAorKy8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRiB0byBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworKyNkZWZpbmUgUkVGSUxMX0JVRkZFUihCVUYsIEJVRlBPUywgQlVGTEVOLCBTVFJFQU0pCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgaWYgKEJVRkxFTiA8IE1CX0xFTl9NQVggJiYgIWZlb2YgKFNUUkVBTSkgJiYgIWZlcnJvciAoU1RSRUFNKSkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWVtbW92ZSAoQlVGLCBCVUZQT1MsIEJVRkxFTik7CQkJCVwKKysJICBCVUZMRU4gKz0gZnJlYWQgKEJVRiArIEJVRkxFTiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIFNUUkVBTSk7IFwKKysJICBCVUZQT1MgPSBCVUY7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyogR2V0IHdpZGUgY2hhcmFjdGVyIG9uIEJVRlBPUy4gQlVGUE9TIGlzIG5vdCBpbmNsdWRlZCBhZnRlciB0aGF0LgorKyAgIElmIGJ5dGUgc2VxdWVuY2UgaXMgbm90IHZhbGlkIGFzIGEgY2hhcmFjdGVyLCBDT05WRkFJTCBpcyAxLiBPdGhlcndpc2UgMC4gKi8gCisrI2RlZmluZSBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUihXQywgQlVGUE9TLCBCVUZMRU4sIE1CTEVOR1RILCBTVEFURSwgQ09OVkZBSUwpIFwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBpZiAoQlVGTEVOIDwgMSkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgV0MgPSBXRU9GOwkJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8JCQkJCVwKKysgICAgICBDT05WRkFJTCA9IDA7CQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgTUJMRU5HVEggPSBtYnJ0b3djICgod2NoYXJfdCAqKSZXQywgQlVGUE9TLCBCVUZMRU4sICZTVEFURSk7CVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgQ09OVkZBSUwrKzsJCQkJCQkJXAorKwkgIFNUQVRFID0gc3RhdGVfYmFrOwkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z24uICovCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJY2FzZSAwOgkJCQkJCQkJXAorKwkgIE1CTEVOR1RIID0gMTsJCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIHN0cnVjdCByYW5nZV9wYWlyCisgICB7CisgICAgIHNpemVfdCBsbzsKK0BAIC04NSw3ICsxNDgsNyBAQAorIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZvciBGSUVMRF8xX0JVRkZFUi4gICovCisgc3RhdGljIHNpemVfdCBmaWVsZF8xX2J1ZnNpemU7CisgCistLyogVGhlIGxhcmdlc3QgZmllbGQgb3IgYnl0ZSBpbmRleCB1c2VkIGFzIGFuIGVuZHBvaW50IG9mIGEgY2xvc2VkCisrLyogVGhlIGxhcmdlc3QgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGluZGV4IHVzZWQgYXMgYW4gZW5kcG9pbnQgb2YgYSBjbG9zZWQKKyAgICBvciBkZWdlbmVyYXRlIHJhbmdlIHNwZWNpZmljYXRpb247ICB0aGlzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgc3RhcnRpbmcKKyAgICBpbmRleCBvZiByaWdodC1vcGVuLWVuZGVkIHJhbmdlcy4gIEZvciBleGFtcGxlLCB3aXRoIGVpdGhlciByYW5nZSBzcGVjCisgICAgYDItNSw5LScsIGAyLTMsNSw5LScgdGhpcyB2YXJpYWJsZSB3b3VsZCBiZSBzZXQgdG8gNS4gICovCitAQCAtOTcsMTAgKzE2MCwxMSBAQAorIAorIC8qIFRoaXMgaXMgYSBiaXQgdmVjdG9yLgorICAgIEluIGJ5dGUgbW9kZSwgd2hpY2ggYnl0ZXMgdG8gb3V0cHV0LgorKyAgIEluIGNoYXJhY3RlciBtb2RlLCB3aGljaCBjaGFyYWN0ZXJzIHRvIG91dHB1dC4KKyAgICBJbiBmaWVsZCBtb2RlLCB3aGljaCBERUxJTS1zZXBhcmF0ZWQgZmllbGRzIHRvIG91dHB1dC4KKy0gICBCb3RoIGJ5dGVzIGFuZCBmaWVsZHMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMSwKKysgICBCeXRlcywgY2hhcmFjdGVycyBhbmQgZmllbGRzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIDEsCisgICAgc28gdGhlIHplcm90aCBiaXQgb2YgdGhpcyBhcnJheSBpcyB1bnVzZWQuCistICAgQSBmaWVsZCBvciBieXRlIEsgaGFzIGJlZW4gc2VsZWN0ZWQgaWYKKysgICBBIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBLIGhhcyBiZWVuIHNlbGVjdGVkIGlmCisgICAgKEsgPD0gTUFYX1JBTkdFX0VORFBPSU5UIGFuZCBpc19wcmludGFibGVfZmllbGQoSykpCisgICAgIHx8IChFT0xfUkFOR0VfU1RBUlQgPiAwICYmIEsgPj0gRU9MX1JBTkdFX1NUQVJUKS4gICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByaW50YWJsZV9maWVsZDsKK0BAIC0xMDksOSArMTczLDEyIEBACisgICB7CisgICAgIHVuZGVmaW5lZF9tb2RlLAorIAorLSAgICAvKiBPdXRwdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBpbiB0aGUgZ2l2ZW4gYnl0ZXMuICovCisrICAgIC8qIE91dHB1dCBieXRlcyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworICAgICBieXRlX21vZGUsCisgCisrICAgIC8qIE91dHB1dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICAgIGNoYXJhY3Rlcl9tb2RlLAorKworICAgICAvKiBPdXRwdXQgdGhlIGdpdmVuIGRlbGltZXRlci1zZXBhcmF0ZWQgZmllbGRzLiAqLworICAgICBmaWVsZF9tb2RlCisgICB9OworQEAgLTEyMSw2ICsxODgsMTMgQEAKKyAKKyBzdGF0aWMgZW51bSBvcGVyYXRpbmdfbW9kZSBvcGVyYXRpbmdfbW9kZTsKKyAKKysvKiBJZiBub256ZXJvLCB3aGVuIGluIGJ5dGUgbW9kZSwgZG9uJ3Qgc3BsaXQgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworK3N0YXRpYyBpbnQgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZTsKKysKKysvKiBJZiBub256ZXJvLCB0aGUgZnVuY3Rpb24gZm9yIHNpbmdsZSBieXRlIGxvY2FsZSBpcyB3b3JrCisrICAgaWYgdGhpcyBwcm9ncmFtIHJ1bnMgb24gbXVsdGlieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgaW50IGZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysKKyAvKiBJZiB0cnVlIGRvIG5vdCBvdXRwdXQgbGluZXMgY29udGFpbmluZyBubyBkZWxpbWV0ZXIgY2hhcmFjdGVycy4KKyAgICBPdGhlcndpc2UsIGFsbCBzdWNoIGxpbmVzIGFyZSBwcmludGVkLiAgVGhpcyBvcHRpb24gaXMgdmFsaWQgb25seQorICAgIHdpdGggZmllbGQgbW9kZS4gICovCitAQCAtMTMyLDYgKzIwNiw5IEBACisgCisgLyogVGhlIGRlbGltZXRlciBjaGFyYWN0ZXIgZm9yIGZpZWxkIG1vZGUuICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVsaW07CisrI2lmIEhBVkVfV0NIQVJfSAorK3N0YXRpYyB3Y2hhcl90IHdjZGVsaW07CisrI2VuZGlmCisgCisgLyogVHJ1ZSBpZiB0aGUgLS1vdXRwdXQtZGVsaW1pdGVyPVNUUklORyBvcHRpb24gd2FzIHNwZWNpZmllZC4gICovCisgc3RhdGljIGJvb2wgb3V0cHV0X2RlbGltaXRlcl9zcGVjaWZpZWQ7CitAQCAtMjA1LDcgKzI4Miw3IEBACisgICAtZiwgLS1maWVsZHM9TElTVCAgICAgICBzZWxlY3Qgb25seSB0aGVzZSBmaWVsZHM7ICBhbHNvIHByaW50IGFueSBsaW5lXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgbm8gZGVsaW1pdGVyIGNoYXJhY3RlciwgdW5sZXNzXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAtcyBvcHRpb24gaXMgc3BlY2lmaWVkXG5cCistICAtbiAgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZClcblwKKysgIC1uICAgICAgICAgICAgICAgICAgICAgIHdpdGggLWI6IGRvbid0IHNwbGl0IG11bHRpYnl0ZSBjaGFyYWN0ZXJzXG5cCisgIiksIHN0ZG91dCk7CisgICAgICAgZnB1dHMgKF8oIlwKKyAgICAgICAtLWNvbXBsZW1lbnQgICAgICAgIGNvbXBsZW1lbnQgdGhlIHNldCBvZiBzZWxlY3RlZCBieXRlcywgY2hhcmFjdGVyc1xuXAorQEAgLTM2Miw3ICs0MzksNyBAQAorIAkgIGluX2RpZ2l0cyA9IGZhbHNlOworIAkgIC8qIFN0YXJ0aW5nIGEgcmFuZ2UuICovCisgCSAgaWYgKGRhc2hfZm91bmQpCistCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlIG9yIGZpZWxkIGxpc3QiKSk7CisrCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAJICBkYXNoX2ZvdW5kID0gdHJ1ZTsKKyAJICBmaWVsZHN0cisrOworIAorQEAgLTM4NywxNCArNDY0LDE2IEBACisgCSAgICAgIGlmICh2YWx1ZSA9PSAwKQorIAkJeworIAkJICAvKiBgbi0nLiAgRnJvbSBgaW5pdGlhbCcgdG8gZW5kIG9mIGxpbmUuICovCistCQkgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisrCQkgIGlmIChlb2xfcmFuZ2Vfc3RhcnQgPT0gMCB8fAorKwkJICAgICAgKGVvbF9yYW5nZV9zdGFydCAhPSAwICYmIGVvbF9yYW5nZV9zdGFydCA+IGluaXRpYWwpKQorKwkJICAgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisgCQkgIGZpZWxkX2ZvdW5kID0gdHJ1ZTsKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBgbS1uJyBvciBgLW4nICgxLW4pLiAqLworIAkJICBpZiAodmFsdWUgPCBpbml0aWFsKQorLQkJICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUgb3IgZmllbGQgbGlzdCIpKTsKKysJCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAKKyAJCSAgLyogSXMgdGhlcmUgYWxyZWFkeSBhIHJhbmdlIGdvaW5nIHRvIGVuZCBvZiBsaW5lPyAqLworIAkJICBpZiAoZW9sX3JhbmdlX3N0YXJ0ICE9IDApCitAQCAtNDY3LDYgKzU0Niw5IEBACisgCSAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJieXRlIG9mZnNldCAlcyBpcyB0b28gbGFyZ2UiKSwgcXVvdGUgKGJhZF9udW0pKTsKKysJICAgICAgZWxzZSBpZiAob3BlcmF0aW5nX21vZGUgPT0gY2hhcmFjdGVyX21vZGUpCisrCQllcnJvciAoMCwgMCwKKysJCSAgICAgICBfKCJjaGFyYWN0ZXIgb2Zmc2V0ICVzIGlzIHRvbyBsYXJnZSIpLCBxdW90ZSAoYmFkX251bSkpOworIAkgICAgICBlbHNlCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJmaWVsZCBudW1iZXIgJXMgaXMgdG9vIGxhcmdlIiksIHF1b3RlIChiYWRfbnVtKSk7CitAQCAtNDc3LDcgKzU1OSw3IEBACisgCSAgZmllbGRzdHIrKzsKKyAJfQorICAgICAgIGVsc2UKKy0JRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSBvciBmaWVsZCBsaXN0IikpOworKwlGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAgICAgfQorIAorICAgbWF4X3JhbmdlX2VuZHBvaW50ID0gMDsKK0BAIC01NzAsNiArNjUyLDYzIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW4gdXNlIGZvciB0aGUgZm9sbG93aW5nIGNhc2UuCisrCisrICAgMS4gUmVhZCBmcm9tIHRoZSBzdHJlYW0gU1RSRUFNLCBwcmludGluZyB0byBzdGFuZGFyZCBvdXRwdXQgYW55IHNlbGVjdGVkCisrICAgY2hhcmFjdGVycy4gCisrCisrICAgMi4gUmVhZCBmcm9tIHN0cmVhbSBTVFJFQU0sIHByaW50aW5nIHRvIHN0YW5kYXJkIG91dHB1dCBhbnkgc2VsZWN0ZWQgYnl0ZXMsCisrICAgd2l0aG91dCBzcGxpdHRpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworKyAKKytzdGF0aWMgdm9pZAorK2N1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBpZHg7CQkvKiBudW1iZXIgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBpbiB0aGUgbGluZSBzbyBmYXIuICovCisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuOwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdpbnRfdCB3YzsJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciB3aGljaCBzaG93cworKwkJCSAgIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgbWJzdGF0ZV90IHN0YXRlOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBpZHggPSAwOworKyAgYnVmbGVuID0gMDsKKysgIGJ1ZnBvcyA9IGJ1ZjsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIFJFRklMTF9CVUZGRVIgKGJ1ZiwgYnVmcG9zLCBidWZsZW4sIHN0cmVhbSk7CisrCisrICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIgKHdjLCBidWZwb3MsIGJ1ZmxlbiwgbWJsZW5ndGgsIHN0YXRlLCBjb252ZmFpbCk7CisrCisrICAgICAgaWYgKHdjID09IFdFT0YpCisrCXsKKysJICBpZiAoaWR4ID4gMCkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGJyZWFrOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcbicpCisrCXsKKysJICBwdXRjaGFyICgnXG4nKTsKKysJICBpZHggPSAwOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWR4ICs9IChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpID8gbWJsZW5ndGggOiAxOworKwkgIGlmIChwcmludF9rdGggKGlkeCwgTlVMTCkpCisrCSAgICBmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysJfQorKworKyAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKyt9CisrI2VuZGlmCisrCQkgICAKKyAvKiBSZWFkIGZyb20gc3RyZWFtIFNUUkVBTSwgcHJpbnRpbmcgdG8gc3RhbmRhcmQgb3V0cHV0IGFueSBzZWxlY3RlZCBmaWVsZHMuICAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtNjkyLDEzICs4MzEsMTkyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrY3V0X2ZpZWxkc19tYiAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBjOworKyAgdW5zaWduZWQgaW50IGZpZWxkX2lkeDsKKysgIGludCBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQ7CisrICBpbnQgYnVmZmVyX2ZpcnN0X2ZpZWxkOworKyAgaW50IGVtcHR5X2lucHV0OworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbjsJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2MgPSAwOwkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZTsJLyogU3RhdGUgb2YgdGhlIHN0cmVhbS4gKi8KKysgIGludCBjb252ZmFpbDsJCS8qIDEsIHdoZW4gY29udmVyc2lvbiBpcyBmYWlsZWQuIE90aGVyd2lzZSAwLiAqLworKworKyAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMDsKKysgIGZpZWxkX2lkeCA9IDE7CisrICBidWZwb3MgPSBidWY7CisrICBidWZsZW4gPSAwOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGMgPSBnZXRjIChzdHJlYW0pOworKyAgZW1wdHlfaW5wdXQgPSAoYyA9PSBFT0YpOworKyAgaWYgKGMgIT0gRU9GKQorKyAgICB1bmdldGMgKGMsIHN0cmVhbSk7CisrICBlbHNlCisrICAgIHdjID0gV0VPRjsKKysKKysgIC8qIFRvIHN1cHBvcnQgdGhlIHNlbWFudGljcyBvZiB0aGUgLXMgZmxhZywgd2UgbWF5IGhhdmUgdG8gYnVmZmVyCisrICAgICBhbGwgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGBkZWxpbWl0ZWQuJworKyAgICAgQnV0IHRoYXQgaXMgdW5uZWNlc3NhcnkgaWYgYWxsIG5vbi1kZWxpbWl0ZWQgbGluZXMgbXVzdCBiZSBwcmludGVkCisrICAgICBhbmQgdGhlIGZpcnN0IGZpZWxkIGhhcyBiZWVuIHNlbGVjdGVkLCBvciBpZiBub24tZGVsaW1pdGVkIGxpbmVzCisrICAgICBtdXN0IGJlIHN1cHByZXNzZWQgYW5kIHRoZSBmaXJzdCBmaWVsZCBoYXMgKm5vdCogYmVlbiBzZWxlY3RlZC4KKysgICAgIFRoYXQgaXMgYmVjYXVzZSBhIG5vbi1kZWxpbWl0ZWQgbGluZSBoYXMgZXhhY3RseSBvbmUgZmllbGQuICAqLworKyAgYnVmZmVyX2ZpcnN0X2ZpZWxkID0gKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgXiAhcHJpbnRfa3RoICgxLCBOVUxMKSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChmaWVsZF9pZHggPT0gMSAmJiBidWZmZXJfZmlyc3RfZmllbGQpCisrCXsKKysJICBpbnQgbGVuID0gMDsKKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKworKwkgICAgICBmaWVsZF8xX2J1ZmZlciA9IHhyZWFsbG9jIChmaWVsZF8xX2J1ZmZlciwgbGVuICsgbWJsZW5ndGgpOworKwkgICAgICBtZW1jcHkgKGZpZWxkXzFfYnVmZmVyICsgbGVuLCBidWZwb3MsIG1ibGVuZ3RoKTsKKysJICAgICAgbGVuICs9IG1ibGVuZ3RoOworKwkgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCSAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFjb252ZmFpbCAmJiAod2MgPT0gTCdcbicgfHwgd2MgPT0gd2NkZWxpbSkpCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICBpZiAod2MgPT0gV0VPRikKKysJICAgIGJyZWFrOworKworKwkgIC8qIElmIHRoZSBmaXJzdCBmaWVsZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgbGluZSAoaXQgaXMgbm90CisrCSAgICAgZGVsaW1pdGVkKSBhbmQgd2UgYXJlIHByaW50aW5nIGFsbCBub24tZGVsaW1pdGVkIGxpbmVzLAorKwkgICAgIHByaW50IHRoaXMgb25lLiAgKi8KKysJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSB3Y2RlbGltKSkKKysJICAgIHsKKysJICAgICAgaWYgKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQpCisrCQl7CisrCQkgIC8qIEVtcHR5LgkqLworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiwgc3Rkb3V0KTsKKysJCSAgLyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgbGluZSBpcyBuZXdsaW5lIHRlcm1pbmF0ZWQuICAqLworKwkJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSBMJ1xuJykpCisrCQkgICAgcHV0Y2hhciAoJ1xuJyk7CisrCQl9CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKworKwkgIGlmIChwcmludF9rdGggKDEsIE5VTEwpKQorKwkgICAgeworKwkgICAgICAvKiBQcmludCB0aGUgZmllbGQsIGJ1dCBub3QgdGhlIHRyYWlsaW5nIGRlbGltaXRlci4gICovCisrCSAgICAgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiAtIDEsIHN0ZG91dCk7CisrCSAgICAgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDE7CisrCSAgICB9CisrCSAgKytmaWVsZF9pZHg7CisrCX0KKysKKysgICAgICBpZiAod2MgIT0gV0VPRikKKysJeworKwkgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCSAgICB7CisrCSAgICAgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQpCisrCQl7CisrCQkgIGZ3cml0ZSAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcsIHNpemVvZiAoY2hhciksCisrCQkJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCwgc3Rkb3V0KTsKKysJCX0KKysJICAgICAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMTsKKysJICAgIH0KKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKwkgICAgICBlbHNlIGlmICghY29udmZhaWwgJiYgKHdjID09IHdjZGVsaW0gfHwgd2MgPT0gTCdcbicpKQorKwkJeworKwkJICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCQkgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysJCSAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCQlmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysKKysJICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKwkgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKCFjb252ZmFpbCB8fCB3YyA9PSBMJ1xuJykgJiYgYnVmbGVuIDwgMSkKKysJd2MgPSBXRU9GOworKworKyAgICAgIGlmICghY29udmZhaWwgJiYgd2MgPT0gd2NkZWxpbSkKKysJKytmaWVsZF9pZHg7CisrICAgICAgZWxzZSBpZiAod2MgPT0gV0VPRiB8fCAoIWNvbnZmYWlsICYmIHdjID09IEwnXG4nKSkKKysJeworKwkgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQKKysJICAgICAgfHwgKCFlbXB0eV9pbnB1dCAmJiAhKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgJiYgZmllbGRfaWR4ID09IDEpKSkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgYnJlYWs7CisrCSAgZmllbGRfaWR4ID0gMTsKKysJICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAwOworKwl9CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBjdXRfc3RyZWFtIChGSUxFICpzdHJlYW0pCisgeworLSAgaWYgKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkKKy0gICAgY3V0X2J5dGVzIChzdHJlYW0pOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSAmJiAhZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyAgICB7CisrICAgICAgc3dpdGNoIChvcGVyYXRpbmdfbW9kZSkKKysJeworKwljYXNlIGJ5dGVfbW9kZToKKysJICBpZiAoYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSkKKysJICAgIGN1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBjdXRfYnl0ZXMgKHN0cmVhbSk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgY2hhcmFjdGVyX21vZGU6CisrCSAgY3V0X2NoYXJhY3RlcnNfb3JfY3V0X2J5dGVzX25vX3NwbGl0IChzdHJlYW0pOworKwkgIGJyZWFrOworKworKwljYXNlIGZpZWxkX21vZGU6CisrCSAgY3V0X2ZpZWxkc19tYiAoc3RyZWFtKTsKKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBhYm9ydCAoKTsKKysJfQorKyAgICB9CisgICBlbHNlCistICAgIGN1dF9maWVsZHMgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gZmllbGRfbW9kZSkKKysJY3V0X2ZpZWxkcyAoc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWN1dF9ieXRlcyAoc3RyZWFtKTsKKysgICAgfQorIH0KKyAKKyAvKiBQcm9jZXNzIGZpbGUgRklMRSB0byBzdGFuZGFyZCBvdXRwdXQuCitAQCAtNzQ4LDYgKzEwNjYsOCBAQAorICAgYm9vbCBvazsKKyAgIGJvb2wgZGVsaW1fc3BlY2lmaWVkID0gZmFsc2U7CisgICBjaGFyICpzcGVjX2xpc3Rfc3RyaW5nIElGX0xJTlQoPSBOVUxMKTsKKysgIGNoYXIgbWJkZWxpbVtNQl9MRU5fTUFYICsgMV07CisrICBzaXplX3QgZGVsaW1sZW4gPSAwOworIAorICAgaW5pdGlhbGl6ZV9tYWluICgmYXJnYywgJmFyZ3YpOworICAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKK0BAIC03NzAsNyArMTA5MCw2IEBACisgICAgICAgc3dpdGNoIChvcHRjKQorIAl7CisgCWNhc2UgJ2InOgorLQljYXNlICdjJzoKKyAJICAvKiBCdWlsZCB0aGUgYnl0ZSBsaXN0LiAqLworIAkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSB1bmRlZmluZWRfbW9kZSkKKyAJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB0eXBlIG9mIGxpc3QgbWF5IGJlIHNwZWNpZmllZCIpKTsKK0BAIC03NzgsNiArMTA5NywxNCBAQAorIAkgIHNwZWNfbGlzdF9zdHJpbmcgPSBvcHRhcmc7CisgCSAgYnJlYWs7CisgCisrCWNhc2UgJ2MnOgorKwkgIC8qIEJ1aWxkIHRoZSBjaGFyYWN0ZXIgbGlzdC4gKi8KKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgdHlwZSBvZiBsaXN0IG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKysJICBzcGVjX2xpc3Rfc3RyaW5nID0gb3B0YXJnOworKwkgIGJyZWFrOworKworIAljYXNlICdmJzoKKyAJICAvKiBCdWlsZCB0aGUgZmllbGQgbGlzdC4gKi8KKyAJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCitAQCAtNzg5LDEwICsxMTE2LDM1IEBACisgCWNhc2UgJ2QnOgorIAkgIC8qIE5ldyBkZWxpbWl0ZXIuICovCisgCSAgLyogSW50ZXJwcmV0IC1kICcnIHRvIG1lYW4gYHVzZSB0aGUgTlVMIGJ5dGUgYXMgdGhlIGRlbGltaXRlci4nICAqLworLQkgIGlmIChvcHRhcmdbMF0gIT0gJ1wwJyAmJiBvcHRhcmdbMV0gIT0gJ1wwJykKKy0JICAgIEZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworLQkgIGRlbGltID0gb3B0YXJnWzBdOworLQkgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgeworKwkgICAgICBpZihNQl9DVVJfTUFYID4gMSkKKysJCXsKKysJCSAgbWJzdGF0ZV90IHN0YXRlOworKworKwkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBkZWxpbWxlbiA9IG1icnRvd2MgKCZ3Y2RlbGltLCBvcHRhcmcsIHN0cm5sZW4ob3B0YXJnLCBNQl9MRU5fTUFYKSwgJnN0YXRlKTsKKysKKysJCSAgaWYgKGRlbGltbGVuID09IChzaXplX3QpLTEgfHwgZGVsaW1sZW4gPT0gKHNpemVfdCktMikKKysJCSAgICArK2ZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGRlbGltbGVuID0gKGRlbGltbGVuIDwgMSkgPyAxIDogZGVsaW1sZW47CisrCQkgICAgICBpZiAod2NkZWxpbSAhPSBMJ1wwJyAmJiAqKG9wdGFyZyArIGRlbGltbGVuKSAhPSAnXDAnKQorKwkJCUZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworKwkJICAgICAgbWVtY3B5IChtYmRlbGltLCBvcHRhcmcsIGRlbGltbGVuKTsKKysJCSAgICB9CisrCQl9CisrCisrCSAgICAgIGlmIChNQl9DVVJfTUFYIDw9IDEgfHwgZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyNlbmRpZgorKwkJeworKwkJICBpZiAob3B0YXJnWzBdICE9ICdcMCcgJiYgb3B0YXJnWzFdICE9ICdcMCcpCisrCQkgICAgRkFUQUxfRVJST1IgKF8oInRoZSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiKSk7CisrCQkgIGRlbGltID0gKHVuc2lnbmVkIGNoYXIpIG9wdGFyZ1swXTsKKysJCX0KKysJICAgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrCSAgfQorIAkgIGJyZWFrOworIAorIAljYXNlIE9VVFBVVF9ERUxJTUlURVJfT1BUSU9OOgorQEAgLTgwNSw2ICsxMTU3LDcgQEAKKyAJICBicmVhazsKKyAKKyAJY2FzZSAnbic6CisrCSAgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSA9IDE7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgJ3MnOgorQEAgLTgyNyw3ICsxMTgwLDcgQEAKKyAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSB1bmRlZmluZWRfbW9kZSkKKyAgICAgRkFUQUxfRVJST1IgKF8oInlvdSBtdXN0IHNwZWNpZnkgYSBsaXN0IG9mIGJ5dGVzLCBjaGFyYWN0ZXJzLCBvciBmaWVsZHMiKSk7CisgCistICBpZiAoZGVsaW0gIT0gJ1wwJyAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorKyAgaWYgKGRlbGltX3NwZWNpZmllZCAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorICAgICBGQVRBTF9FUlJPUiAoXygiYW4gaW5wdXQgZGVsaW1pdGVyIG1heSBiZSBzcGVjaWZpZWQgb25seVwKKyAgd2hlbiBvcGVyYXRpbmcgb24gZmllbGRzIikpOworIAorQEAgLTg1NCwxNSArMTIwNywzNCBAQAorICAgICB9CisgCisgICBpZiAoIWRlbGltX3NwZWNpZmllZCkKKy0gICAgZGVsaW0gPSAnXHQnOworKyAgICB7CisrICAgICAgZGVsaW0gPSAnXHQnOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICB3Y2RlbGltID0gTCdcdCc7CisrICAgICAgbWJkZWxpbVswXSA9ICdcdCc7CisrICAgICAgbWJkZWxpbVsxXSA9ICdcMCc7CisrICAgICAgZGVsaW1sZW4gPSAxOworKyNlbmRpZgorKyAgICB9CisgCisgICBpZiAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgeworLSAgICAgIHN0YXRpYyBjaGFyIGR1bW15WzJdOworLSAgICAgIGR1bW15WzBdID0gZGVsaW07CistICAgICAgZHVtbXlbMV0gPSAnXDAnOworLSAgICAgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0gZHVtbXk7CistICAgICAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGggPSAxOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEgJiYgIWZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysJeworKwkgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0geHN0cmR1cChtYmRlbGltKTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IGRlbGltbGVuOworKwl9CisrCisrICAgICAgaWYgKE1CX0NVUl9NQVggPD0gMSB8fCBmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrI2VuZGlmCisrCXsKKysJICBzdGF0aWMgY2hhciBkdW1teVsyXTsgCisrCSAgZHVtbXlbMF0gPSBkZWxpbTsKKysJICBkdW1teVsxXSA9ICdcMCc7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPSBkdW1teTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IDE7CisrCX0KKyAgICAgfQorIAorICAgaWYgKG9wdGluZCA9PSBhcmdjKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtbHMteC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE4NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2gKQEAgLTAsMCArMSwxMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMubHMteAkyMDA3LTA2LTEzIDE0OjI3OjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMJMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MTUxLDE2ICs0MTUxLDE2IEBACisgICBzaXplX3QgcG9zID0gMDsKKyAgIHNpemVfdCBjb2xzID0gY2FsY3VsYXRlX2NvbHVtbnMgKGZhbHNlKTsKKyAgIHN0cnVjdCBjb2x1bW5faW5mbyBjb25zdCAqbGluZV9mbXQgPSAmY29sdW1uX2luZm9bY29scyAtIDFdOworLSAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gbGVuZ3RoX29mX2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChjd2RfZmlsZSk7CisrICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmYgPSBzb3J0ZWRfZmlsZVswXTsKKysgIHNpemVfdCBuYW1lX2xlbmd0aCA9IGxlbmd0aF9vZl9maWxlX25hbWVfYW5kX2ZyaWxscyAoZik7CisgICBzaXplX3QgbWF4X25hbWVfbGVuZ3RoID0gbGluZV9mbXQtPmNvbF9hcnJbMF07CisgCisgICAvKiBQcmludCBmaXJzdCBlbnRyeS4gICovCistICBwcmludF9maWxlX25hbWVfYW5kX2ZyaWxscyAoY3dkX2ZpbGUpOworKyAgcHJpbnRfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGYpOworIAorICAgLyogTm93IHRoZSByZXN0LiAgKi8KKyAgIGZvciAoZmlsZXNubyA9IDE7IGZpbGVzbm8gPCBjd2Rfbl91c2VkOyArK2ZpbGVzbm8pCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmY7CisgICAgICAgc2l6ZV90IGNvbCA9IGZpbGVzbm8gJSBjb2xzOworIAorICAgICAgIGlmIChjb2wgPT0gMCkKKy0tLSBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtLmxzLXgJMjAwNy0wMy0xOCAyMTozNjo0My4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsNyArMjQsNyBAQAorICAgc3RhdC1kdHlwZSBcCisgICBpbm9kZSBkYW5nbGUgZmlsZS10eXBlIHJlY3Vyc2l2ZSBkaXJlZCBpbmZsb29wIFwKKyAgIHJ0LTEgdGltZS0xIHN5bWxpbmstc2xhc2ggZm9sbG93LXNsaW5rIG5vLWFyZyBtLW9wdGlvbiBcCistICBzdGF0LXZzLWRpcmVudAorKyAgc3RhdC12cy1kaXJlbnQgeC1vcHRpb24KKyAKKyBFWFRSQV9ESVNUID0gJChURVNUUykKKyBURVNUU19FTlZJUk9OTUVOVCA9IFwKKy0tLSAvZGV2L251bGwJMjAwNy0wNi0xMyAwODo0Mzo1MS45OTMyNjMzODIgKzAxMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL3gtb3B0aW9uCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDU5IEBACisrIyEvYmluL3NoCisrIyBFeGVyY2lzZSB0aGUgLXggb3B0aW9uLgorKworKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEsIFVTQS4KKysKKytpZiB0ZXN0ICIkVkVSQk9TRSIgPSB5ZXM7IHRoZW4KKysgIHNldCAteAorKyAgbHMgLS12ZXJzaW9uCisrZmkKKysKKysuICRzcmNkaXIvLi4vZW52dmFyLWNoZWNrCisrLiAkc3JjZGlyLy4uL2xhbmctZGVmYXVsdAorKworK3B3ZD1gcHdkYAorK3QwPWBlY2hvICIkMCJ8c2VkICdzLC4qLywsJ2AudG1wOyB0bXA9JHQwLyQkCisrdHJhcCAnc3RhdHVzPSQ/OyBjZCAiJHB3ZCIgJiYgY2htb2QgLVIgdStyd3ggJHQwICYmIHJtIC1yZiAkdDAgJiYgZXhpdCAkc3RhdHVzJyAwCisrdHJhcCAnKGV4aXQgJD8pOyBleGl0ICQ/JyAxIDIgMTMgMTUKKysKKytmcmFtZXdvcmtfZmFpbHVyZT0wCisrbWtkaXIgLXAgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrY2QgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrbWtkaXIgc3ViZGlyIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKyt0b3VjaCBzdWJkaXIvYiB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrdG91Y2ggc3ViZGlyL2EgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorKworK2lmIHRlc3QgJGZyYW1ld29ya19mYWlsdXJlID0gMTsgdGhlbgorKyAgZWNobyAiJDA6IGZhaWx1cmUgaW4gdGVzdGluZyBmcmFtZXdvcmsiIDE+JjIKKysgIChleGl0IDEpOyBleGl0IDEKKytmaQorKworK2ZhaWw9MAorKworKyMgQ29yZXV0aWxzIDYuOCBhbmQgNi45IHdvdWxkIG91dHB1dCB0aGlzIGluIHRoZSB3cm9uZyBvcmRlci4KKytscyAteCBzdWJkaXIgPiBvdXQgfHwgZmFpbD0xCisrbHMgLXJ4IHN1YmRpciA+PiBvdXQgfHwgZmFpbD0xCisrY2F0IDw8XEVPRiA+IGV4cCB8fCBmYWlsPTEKKythICBiCisrYiAgYQorK0VPRgorKworK2NtcCBvdXQgZXhwIHx8IGZhaWw9MQorK3Rlc3QgJGZhaWwgPSAxICYmIGRpZmYgb3V0IGV4cCAyPiAvZGV2L251bGwKKysKKysoZXhpdCAkZmFpbCk7IGV4aXQgJGZhaWwKKy0tLSBjb3JldXRpbHMtNi45L05FV1MubHMteAkyMDA3LTAzLTIyIDIxOjE5OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjkvTkVXUwkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDYgKzEzLDExIEBACisgICBVc2luZyBwciAtbSAtcyAoaS5lLiBtZXJnaW5nIGZpbGVzLCB3aXRoIFRBQiBhcyB0aGUgb3V0cHV0IHNlcGFyYXRvcikKKyAgIG5vIGxvbmdlciBpbnNlcnRzIGV4dHJhbmVvdXMgc3BhY2VzIGJldHdlZW4gb3V0cHV0IGNvbHVtbnMuCisgCisrKiogQnVnIGZpeGVzCisrCisrICBscyAteCBESVIgd291bGQgc29tZXRpbWVzIG91dHB1dCB0aGUgd3Jvbmcgc3RyaW5nIGluIHBsYWNlIG9mIHRoZQorKyAgZmlyc3QgZW50cnkuICBbaW50cm9kdWNlZCBpbiBjb3JldXRpbHMtNi44XQorKworIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgNi44ICgyMDA3LTAyLTI0KSBbbm90LXVuc3RhYmxlXQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MDc0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gY29yZXV0aWxzLTUuMi4xL3NyYy93aG8uYy5vdmVyZmxvdwkyMDA1LTA1LTI1IDA5OjU5OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy01LjIuMS9zcmMvd2hvLmMJMjAwNS0wNS0yNSAxMDowMDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NSw3ICs3NSw3IEBACisgIyBkZWZpbmUgTkVXX1RJTUUgMAorICNlbmRpZgorIAorLSNkZWZpbmUgSURMRVNUUl9MRU4gNgorKyNkZWZpbmUgSURMRVNUUl9MRU4gMTAKKyAKKyAjaWYgSEFWRV9TVFJVQ1RfWFRNUF9VVF9QSUQKKyAjIGRlZmluZSBQSURTVFJfREVDTF9BTkRfSU5JVChWYXIsIFV0bXBfZW50KSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjczMGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuYWM6NDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1saW51eC9jb3JldXRpbHMtbmF0aXZlLTYuOS1yMi9jb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNDoxMzg6IGdsX0NIRUNLX0FMTF9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LWxpbnV4L2NvcmV1dGlscy1uYXRpdmUtNi45LXIyL2NvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00OjI0OiBjb3JldXRpbHNfTUFDUk9TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjQwOiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb3JldXRpbHMtNi45Lm9yaWcvbTQvam0tbWFjcm9zLm00CisrKysgY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKK0BAIC0xNDIsMTEgKzE0Miw2IEBAIEFDX0RFRlVOKFtnbF9DSEVDS19BTExfVFlQRVNdLAorICAgZG5sIHdoZXRoZXIgZnVuY3Rpb25zIGFuZCBoZWFkZXJzIGFyZSBhdmFpbGFibGUsIHdoZXRoZXIgdGhleSB3b3JrLCBldGMuCisgICBBQ19SRVFVSVJFKFtBQ19TWVNfTEFSR0VGSUxFXSkKKyAKKy0gIGRubCBUaGlzIHRlc3QgbXVzdCBwcmVjZWRlIHRlc3RzIG9mIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyBsaWtlCistICBkbmwgdGhhdCBmb3IgdGhlIGlubGluZSBrZXl3b3JkLCBzaW5jZSBpdCBtYXkgY2hhbmdlIHRoZSBkZWdyZWUgdG8KKy0gIGRubCB3aGljaCB0aGUgY29tcGlsZXIgc3VwcG9ydHMgc3VjaCBmZWF0dXJlcy4KKy0gIEFDX1JFUVVJUkUoW0FNX0NfUFJPVE9UWVBFU10pCistCisgICBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyAgIEFDX1JFUVVJUkUoW0FDX0NfQklHRU5ESUFOXSkKKyAgIEFDX1JFUVVJUkUoW0FDX0NfVk9MQVRJTEVdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZDYwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVXNlIG5hdGl2ZSBjb3JldXRpbHMgYmluYXJpZXMgdG8gYnVpbGQgbWFucGFnZXMgaW4gY3Jvc3MgZW52aXJvbm1lbnQuCitUaGlzIGF2b2lkcyBtYW4gcGFnZSBidWlsZCBpc3N1ZXMgbGlrZSB0aGlzOgorCit8IE1ha2luZyBhbGwgaW4gbWFuCit8IG1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2NvcmV1dGlscy02LjktcjAvY29yZXV0aWxzLTYuOS9tYW4nCit8IFVwZGF0aW5nIG1hbiBwYWdlIGN1dC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGRpci4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGV4cGFuZC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGZvbGQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBpbnN0YWxsLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugam9pbi4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHByLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgbHMuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBzb3J0LjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdW5leHBhbmQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSB1bmlxLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugd2hvLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdmRpci4xCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGRpci50ZC9kaXIKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gY3V0LnRkL2N1dAorfCBtYWtlWzFdOiAqKiogW2Rpci4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gZm9sZC50ZC9mb2xkCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGluc3RhbGwudGQvaW5zdGFsbAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBleHBhbmQudGQvZXhwYW5kCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGpvaW4udGQvam9pbgorfCBtYWtlWzFdOiAqKiogW2N1dC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFtmb2xkLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW2luc3RhbGwuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHNvcnQudGQvc29ydAorfCBtYWtlWzFdOiAqKiogW2V4cGFuZC4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gcHIudGQvcHIKK3wgbWFrZVsxXTogKioqIFtqb2luLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBscy50ZC9scworfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmV4cGFuZC50ZC91bmV4cGFuZAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmlxLnRkL3VuaXEKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gd2hvLnRkL3dobworfCBtYWtlWzFdOiAqKiogW3NvcnQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbcHIuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHZkaXIudGQvdmRpcgorfCBtYWtlWzFdOiAqKiogW2xzLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3VuaXEuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbdW5leHBhbmQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbd2hvLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3ZkaXIuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvY29yZXV0aWxzLTYuOS1yMC9jb3JldXRpbHMtNi45L21hbicKK3wgbWFrZTogKioqIFthbGwtcmVjdXJzaXZlXSBFcnJvciAxCit8IEZBVEFMOiBvZV9ydW5tYWtlIGZhaWxlZAorfCBFUlJPUjogRnVuY3Rpb24gJ2RvX2NvbXBpbGUnIGZhaWxlZCAoc2VlIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9jb3JldXRpbHMtNi45LXIwL3RlbXAvbG9nLmRvX2NvbXBpbGUuMTI3ODAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pCitOT1RFOiBwYWNrYWdlIGNvcmV1dGlscy02LjktcjA6IHRhc2sgZG9fY29tcGlsZTogRmFpbGVkCitFUlJPUjogVGFzayA4ICgvaG9tZS9uaXRpbi9wcmovcG9reS5naXQvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIsIGRvX2NvbXBpbGUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKKworCitUaGlzIHBhdGNoIGlzIG1hZGUgZm9yIGdwbHYyIGNvcmV1dGlscyB0aGUgcmVjaXBlCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNworCitJbmRleDogbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9tYW4ub3JpZy9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTY3LDcgKzE2Nyw3IEBAIG1hcHBlZF9uYW1lID0gYGVjaG8gJCp8c2VkICdzL2luc3RhbGwvZ2kKKyAJICAgICAgICAgICAgJChQRVJMKSAtLSAkKHNyY2RpcikvaGVscDJtYW4JCVwKKyAJICAgICAgICAgICAgIC0tc291cmNlPSckKFBBQ0tBR0VfU1RSSU5HKScJCVwKKyAJICAgICAgICAgICAgIC0taW5jbHVkZT0kKHNyY2RpcikvJCoueAkJCVwKKy0JICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICR0LyQqOwkJCVwKKysJICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICQqOwkJCVwKKyAJICAgICAgIH0JCQkJCQlcCisgCSAgICAmJiBzZWQgJ3N8JCpcLnRkL3x8ZycgJHQvJEAgPiAkQAkJCVwKKyAJICAgICYmIGNobW9kIGEtdyAkQAkJCQkJXAorSW5kZXg6IG1hbi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbWFuLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBiL21hbi9NYWtlZmlsZS5pbgorQEAgLTg2NSw3ICs4NjUsNyBAQCB5ZXMuMToJCSQoY29tbW9uX2RlcCkJJChzcmNkaXIpL3llcy54CQkuCisgCSAgICAgICAgICAgICQoUEVSTCkgLS0gJChzcmNkaXIpL2hlbHAybWFuCQlcCisgCSAgICAgICAgICAgICAtLXNvdXJjZT0nJChQQUNLQUdFX1NUUklORyknCQlcCisgCSAgICAgICAgICAgICAtLWluY2x1ZGU9JChzcmNkaXIpLyQqLngJCQlcCistCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkdC8kKjsJCQlcCisrCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkKjsJCQlcCisgCSAgICAgICB9CQkJCQkJXAorIAkgICAgJiYgc2VkICdzfCQqXC50ZC98fGcnICR0LyRAID4gJEAJCQlcCisgCSAgICAmJiBjaG1vZCBhLXcgJEAJCQkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNTkwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgY29yZXV0aWxzIHVzZXMgZ251bGliIHdoaWNoIGNvbmZsaWN0cyB3aXRoIG5ld2VyIGxpYmMgaGVhZGVyIG9uIGZ1dGltZW5zCisjIHRoaXMgcGF0Y2ggc2ltcGx5IHJlbmFtZXMgY29yZXV0aWxzIGZ1dGltZXMgdG8gYXZvaWQgY29uZmxpY3Rpb24KKyMKKyMgU2lnbmVkLW9mZi1ieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKK2RpZmYgLS1naXQgYS9saWIvdXRpbWVucy5jIGIvbGliL3V0aW1lbnMuYworaW5kZXggNzFiYzUxMC4uYWU4NzBiOCAxMDA2NDQKKy0tLSBhL2xpYi91dGltZW5zLmMKKysrKyBiL2xpYi91dGltZW5zLmMKK0BAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCB1dGltYnVmCisgICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgKHNldHRpbmcgZXJybm8pIG9uIGZhaWx1cmUuICAqLworIAorIGludAorLWZ1dGltZW5zIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKytmdXRpbWVuc19jb3JldXRpbHMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorIAkgIGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc3BlY1syXSkKKyB7CisgICAvKiBTb21lIExpbnV4LWJhc2VkIE5GUyBjbGllbnRzIGFyZSBidWdneSwgYW5kIG1pc2hhbmRsZSB0aW1lIHN0YW1wcworQEAgLTE4NSw1ICsxODUsNSBAQCBmdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgaW50CisgdXRpbWVucyAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKy0gIHJldHVybiBmdXRpbWVucyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKysgIHJldHVybiBmdXRpbWVuc19jb3JldXRpbHMgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisgfQorZGlmZiAtLWdpdCBhL2xpYi91dGltZW5zLmggYi9saWIvdXRpbWVucy5oCitpbmRleCAwMDk3YWFhLi4xM2ZjNDVhIDEwMDY0NAorLS0tIGEvbGliL3V0aW1lbnMuaAorKysrIGIvbGliL3V0aW1lbnMuaAorQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKy1pbnQgZnV0aW1lbnMgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKytpbnQgZnV0aW1lbnNfY29yZXV0aWxzIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisgaW50IHV0aW1lbnMgKGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuYyBiL3NyYy9jb3B5LmMKK2luZGV4IDRiZGI3NWMuLjA0NjM0ZjEgMTAwNjQ0CistLS0gYS9zcmMvY29weS5jCisrKysgYi9zcmMvY29weS5jCitAQCAtNTE4LDcgKzUxOCw3IEBAIGNvcHlfcmVnIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgICAgICAgdGltZXNwZWNbMF0gPSBnZXRfc3RhdF9hdGltZSAoc3JjX3NiKTsKKyAgICAgICB0aW1lc3BlY1sxXSA9IGdldF9zdGF0X210aW1lIChzcmNfc2IpOworIAorLSAgICAgIGlmIChmdXRpbWVucyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisrICAgICAgaWYgKGZ1dGltZW5zX2NvcmV1dGlscyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIF8oInByZXNlcnZpbmcgdGltZXMgZm9yICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworIAkgIGlmICh4LT5yZXF1aXJlX3ByZXNlcnZlKQorZGlmZiAtLWdpdCBhL3NyYy90b3VjaC5jIGIvc3JjL3RvdWNoLmMKK2luZGV4IGE3OWMyNmQuLjZlZjMxN2QgMTAwNjQ0CistLS0gYS9zcmMvdG91Y2guYworKysrIGIvc3JjL3RvdWNoLmMKK0BAIC0xODIsNyArMTgyLDcgQEAgdG91Y2ggKGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgdCA9IHRpbWVzcGVjOworICAgICB9CisgCistICBvayA9IChmdXRpbWVucyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKysgIG9rID0gKGZ1dGltZW5zX2NvcmV1dGlscyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKyAKKyAgIGlmIChmZCA9PSBTVERJTl9GSUxFTk8pCisgICAgIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM1NTUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgcmVtb3ZlIHRoZSBsaW5lIHRvIGNhdXNlIHJlY3Vyc2l2ZSBpbmNsdXNpb24gZXJyb3IgZnJvbSBhdXRvcmVjb25mLCBzaWNuZQorIyBuZXdlciBhdXRvY29uZiBoYXMgaW5jbHVkZWQgdGhpcyBkZWZpbml0aW9uLiBTaW1wbHkgcmVuYW1lIGl0IGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy5tNCBiL2V4dGVuc2lvbnMubTQKK2luZGV4IDE0M2E5ZTUuLmY2NTU4ZjEgMTAwNjQ0CistLS0gYS9tNC9leHRlbnNpb25zLm00CisrKysgYi9tNC9leHRlbnNpb25zLm00CitAQCAtMTYsNyArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorK0FDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNfRFVNTVldLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorICAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDJjYjljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgbWFuIHBhZ2UgZm9yICd0b3VjaCcgaXMgZ2VuZXJhdGVkIGRpZmZlcmVudGx5IGZyb20gb3RoZXJzLiBBbGwgb3RoZXIgdXRpbGl0aWVzCisjIGFyZSBwcm92aWRlZCBzdGF0aWMgbWFuIHNvdXJjZSBmaWxlcywgd2hpbGUgZm9yICd0b3VjaCcgaXQgcmVxdWlyZXMgaGVscDJtYW4KKyMgdG8gaW52b2tlICJ0b3VjaCAtLWhlbHAiIGFuZCB0aGVuIGNvbnZlcnQgdGhlIG91dHB1dCBpbnRvIHRoZSBtYW51YWwuIFNpbmNlIHRvdWNoCisjIGlzIHdpdGggdGFyZ2V0IGZvcm1hdCB3aGljaCBjYW4ndCBiZSBpbnZva2VkIG9uIGJ1aWxkIHN5c3RlbSwgZGlzYWJsZSBidWlsZGluZworIyAndG91Y2gnIG1hbiBwYWdlIGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmFtIGIvbWFuL01ha2VmaWxlLmFtCitpbmRleCAzMmRmOWQxLi4zN2IwOWUzIDEwMDY0NAorLS0tIGEvbWFuL01ha2VmaWxlLmFtCisrKysgYi9tYW4vTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGRpc3RfbWFuX01BTlMgPSBcCisgICBwYXN0ZS4xIHBhdGhjaGsuMSBwci4xIHByaW50ZW52LjEgcHJpbnRmLjEgcHR4LjEgcHdkLjEgcmVhZGxpbmsuMSBcCisgICBybS4xIHJtZGlyLjEgc2VxLjEgc2hhMXN1bS4xIHNoYTIyNHN1bS4xIHNoYTI1NnN1bS4xIHNoYTM4NHN1bS4xIHNoYTUxMnN1bS4xIFwKKyAgIHNocmVkLjEgc2h1Zi4xIHNsZWVwLjEgc29ydC4xIHNwbGl0LjEgc3RhdC4xIFwKKy0gIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdG91Y2guMSB0ci4xIHRydWUuMSB0c29ydC4xIFwKKysgIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdHIuMSB0cnVlLjEgdHNvcnQuMSBcCisgICB0dHkuMSB1bmV4cGFuZC4xIHVuaXEuMSB1bmxpbmsuMSB2ZGlyLjEgd2MuMSBcCisgICB3aG9hbWkuMSB5ZXMuMSAkKE1BTikKKyBvcHRpb25hbF9tYW5zID0gXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWFlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBhMWQzNjA1MDlmYTNhNGFmZjU3ZWVkY2Q1MjhjYzAzNDdhODc1MzFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE2IFNlcCAyMDE0IDAxOjU5OjA4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudWxpYi1jb21wLm00OiBzZWxpbnV4L2ZsYXNrLmggc2hvdWxkIHJlc3BlY3QgdG8KKyB3aXRoX3NlbGludXgKKworRml4ZWQgd2hlbiBidWlsZCB3aXRoIG1ldGEtc2VsaW51eCBldmVuIHdoZW4gLS13aXRob3V0LXNlbGludXg6CitydW5jb24uYzo0OToyODogZmF0YWwgZXJyb3I6IHNlbGludXgvZmxhc2suaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICMgaW5jbHVkZSA8c2VsaW51eC9mbGFzay5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2dudWxpYi1jb21wLm00IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbTQvZ251bGliLWNvbXAubTQgYi9tNC9nbnVsaWItY29tcC5tNAoraW5kZXggNDcyZDNhMC4uNWYwOTczNCAxMDA2NDQKKy0tLSBhL200L2dudWxpYi1jb21wLm00CisrKysgYi9tNC9nbnVsaWItY29tcC5tNAorQEAgLTE3MzAsMTEgKzE3MzAsMTEgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAorICAgICBBQ19MSUJPQkooW3NlbGVjdF0pCisgICBmaQorICAgZ2xfU1lTX1NFTEVDVF9NT0RVTEVfSU5ESUNBVE9SKFtzZWxlY3RdKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhbc2VsaW51eC9mbGFzay5oXSkKKyAgIEFDX0xJQk9CSihbc2VsaW51eC1hdF0pCisgICBnbF9IRUFERVJTX1NFTElOVVhfU0VMSU5VWF9ICisgICBnbF9IRUFERVJTX1NFTElOVVhfQ09OVEVYVF9ICisgICBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiAhPSBubyAmJiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3NlbGludXhfc2VsaW51eF9oIiA9IHllczsgdGhlbgorKyAgICBBQ19DSEVDS19IRUFERVJTKFtzZWxpbnV4L2ZsYXNrLmhdKQorICAgICBBQ19MSUJPQkooW2dldGZpbGVjb25dKQorICAgZmkKKyAgIGdsX1NFUlZFTlQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4OTZhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGI0ZDI1ODYyOWYwOTAwNjY3ODNjM2I0YzkxYjQwZjYzYjlkMGEyOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgOCBGZWIgMjAxNSAxNjo1MTo1NyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBtYW46IGRlY291cGxlIG1hbnBhZ2VzIGZyb20gYnVpbGQKKworVGhlIHVzZSBvZiAiaGVscDJtYW4iIGRvZXNuJ3Qgd29yayBhdCBhbGwgZm9yIGNyb3NzIGNvbXBpbGUsIGluCithZGRpdGlvbiB0byB0aGUgZXh0cmEgcmVxdWlyZW1lbnQgb2YgcGVybCBpdCBhZGRzLgorCitKdXN0IGRlY291cGxlIHRoZSBtYW5wYWdlcyBmcm9tIHRoZSBidWlsZCBpbiBvcmRlciB0byBwYXZlIHRoZSB3YXkgZm9yCitpbXBvcnRpbmcgcHJlYnVpbHQgbWFucGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIGNyb3NzIGJ1aWxkIHNpdHVhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBkb2Vzbid0IGNhcmUgYWJvdXQgeC1jb21waWxlIGNhc2UuXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmYjRhZjI3Li43NTc2YjJjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMjE0LDUgKzIxNCw0IEBAIEFNX0NQUEZMQUdTID0gLUlsaWIgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSXNyYyAtSSQodG9wX3NyY2Rpcikvc3JjCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2xpYi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvbG9jYWwubWsKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvZG9jL2xvY2FsLm1rCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL21hbi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS90ZXN0cy9sb2NhbC5taworLS0gCisyLjIuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjhhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitXZSBoYXZlIHByb2JsZW0gdXNpbmcgaGFyZGNvZGVkIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCit3aGljaCB3aWxsIGJlIGNoZWNrZWQgZm9yIGNyb3NzIGJ1aWxkcy4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaAoraXMgdmFsaWQgZm9yIEFJWCBvbmx5LiBXZSBkbyBub3QgaGF2ZSBBSVggYXMgb25lIG9mIG91ciBzdXBwb3J0ZWQKK2J1aWxkIGhvc3Qgb3IgdGFyZ2V0LiBUaGVyZWZvcmUgd2UgZ2V0IHJpZCBvZiB0aGUgaGFyZGNvZGVkIHBhdGhzCithbmQgbWFrZSBsaWZlIGVhc2llciBmb3IgY3Jvc3MgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtVcHN0cmVhbSBkb2VzIGNhcmUgZm9yIEFJWCB3aGlsZSB3ZSBtYXkgbm90XQorCitJbmRleDogY29yZXV0aWxzLTguMTQvbTQvZ2V0bG9hZGF2Zy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvcmV1dGlscy04LjE0Lm9yaWcvbTQvZ2V0bG9hZGF2Zy5tNAkyMDExLTA5LTE5IDA4OjA5OjI0LjAwMDAwMDAwMCAtMDcwMAorKysrIGNvcmV1dGlscy04LjE0L200L2dldGxvYWRhdmcubTQJMjAxMS0xMC0xOSAyMTo0MjowMC4zODU1MzMzNTcgLTA3MDAKK0BAIC00MSwxNiArNDEsNiBAQAorICAgICAgICBbTElCUz0iLWx1dGlsICRMSUJTIiBnbF9mdW5jX2dldGxvYWRhdmdfZG9uZT15ZXNdKQorICAgIGZpCisgCistICAgaWYgdGVzdCAkZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmUgPSBubzsgdGhlbgorLSAgICAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICAgICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgICAgZ2xfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICAgICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgICAgQUNfQ0hFQ0tfTElCKFtnZXRsb2FkYXZnXSwgW2dldGxvYWRhdmddLAorLSAgICAgICAgICAgICAgICAgIFtMSUJTPSItbGdldGxvYWRhdmcgJExJQlMiIGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lPXllc10sCistICAgICAgICAgICAgICAgICAgW0xJQlM9JGdsX2dldGxvYWRhdmdfTElCU10pCistICAgZmkKKy0KKyAgICAjIFNldCB1cCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgorICAgIGlmIHRlc3QgJGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lID0gbm87IHRoZW4KKyAgICAgIEhBVkVfR0VUTE9BREFWRz0wCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZjFkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUaGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgbWFuaXB1bGF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQ29yZSBVdGlsaXRpZXMgcHJvdmlkZSB0aGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgXAorbWFuaXB1bGF0aW9uIHV0aWxpdGllcy4gVGhlc2UgYXJlIHRoZSBjb3JlIHV0aWxpdGllcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgb24gXAorZXZlcnkgc3lzdGVtLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHMuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT0xNWVkNjBmNjdiMWRiNWZlZGQ1ZGJjMzdjZjhhOTU0MyIKK1BSID0gInI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2dudWxpYl9tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXRpbWVucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtbHMteC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtaTE4bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi10b3VjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzk2MDdkODQ5NWYxNmU5ODkwNmU3ZWQyZDk3NTFhMDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODljMjg5NWFkMTU3ZGU1MGU1MzI5OGIyMmQ5MWRiMTE2ZWU0ZTFkZDNmZGY0MDE5MjYwMjU0ZTJlMzE0OTdiMCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz15ZXMgXAorICAgICAgICAgICAgICAgICBhY19jdl9mdW5jX3N0cmNvbGxfd29ya3M9eWVzIgorCisjIGFjbCBpcyBub3QgYSBkZWZhdWx0IGZlYXR1cmUKKyMKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorCisjIHdpdGgsIHdpdGhvdXQsIGRlcGVuZHMsIHJkZXBlbmRzCisjCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD15ZXMsYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD1ubyxhY2wsIgorCisKKyMgWyBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYmFzZTY0IGJhc2VuYW1lIGNrc3VtIGNvbW0gY3NwbGl0IGN1dCBkaXIgZGlyY29sb3JzIGRpcm5hbWUgZHUgXAorICAgICAgICAgICAgICAgIGVudiBleHBhbmQgZXhwciBmYWN0b3IgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwgXAorICAgICAgICAgICAgICAgIGpvaW4gbGluayBsb2duYW1lIG1kNXN1bSBta2ZpZm8gbmljZSBubCBub2h1cCBvZCBwYXN0ZSBwYXRoY2hrIFwKKyAgICAgICAgICAgICAgICBwaW5reSBwciBwcmludGVudiBwcmludGYgcHR4IHJlYWRsaW5rIHNlcSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gXAorICAgICAgICAgICAgICAgIHNoYTM4NHN1bSBzaGE1MTJzdW0gc2hyZWQgc2h1ZiBzb3J0IHNwbGl0IHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCBcCisgICAgICAgICAgICAgICAgdHIgdHNvcnQgdHR5IHVuZXhwYW5kIHVuaXEgdW5saW5rIHVzZXJzIHZkaXIgd2Mgd2hvIHdob2FtaSB5ZXMgdXB0aW1lIgorCisjIGhvc3RuYW1lIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2Jhc2VfYmluZGlyX3Byb2dzID0gImNhdCBjaGdycCBjaG1vZCBjaG93biBjcCBkYXRlIGRkIGVjaG8gZmFsc2Uga2lsbCBsbiBscyBta2RpciBcCisgICAgICAgICAgICAgICAgICAgICBta25vZCBtdiBwd2Qgcm0gcm1kaXIgc2xlZXAgc3R0eSBzeW5jIHRvdWNoIHRydWUgdW5hbWUgaG9zdG5hbWUgc3RhdCIKKworc2JpbmRpcl9wcm9ncz0gImNocm9vdCIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSBjb3JldXRpbHMgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtzYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtzYmluZGlyfS8kaTsgZG9uZQorCisJIyBbIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBbLmNvcmV1dGlscyB3aWxsIGNhdXNlIHRoZSBzZWQgc3R1ZmYKKwkjIGluIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgdG8gZmFpbCwgdGhlcmVmb3JlIHVzZSBsYnJhY2tldCAtIHRoZSBuYW1lIHVzZWQKKwkjIGZvciB0aGUgYWN0dWFsIHNvdXJjZSBmaWxlLgorCW12ICR7RH0ke2JpbmRpcn0vWyAke0R9JHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfQorCisJIyBOZXdlciB2ZXJzaW9ucyBvZiBjb3JldXRpbHMgZG8gbm90IGluY2x1ZGUgc3UsIHRvIG1pbWljIHRoaXMgYmVoYXZpb3IKKwkjIHdlIHNpbXBseSByZW1vdmUgaXQuCisJcm0gLWYgJHtEfSR7YmluZGlyfS9zdQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsYnJhY2tldCAke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtzYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbdXB0aW1lXSA9ICIxMCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hvc3RuYW1lXSA9ICIxMCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0XSA9ICIke2JpbmRpcn0vWyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRlYmNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiCkBAIC0wLDAgKzEsMTI3IEBACitTVU1NQVJZID0gIlRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBtYW5pcHVsYXRpb24gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDb3JlIFV0aWxpdGllcyBwcm92aWRlIHRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBcCittYW5pcHVsYXRpb24gdXRpbGl0aWVzLiBUaGVzZSBhcmUgdGhlIGNvcmUgdXRpbGl0aWVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBleGlzdCBvbiBcCitldmVyeSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTY7bWQ1PTM4Yjc5Nzg1Y2E4ODUzN2I3NTg3MTc4MmEyYTNjNmI4IgorREVQRU5EUyA9ICJnbXAgbGliY2FwIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIueHo7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS1tYW4udGFyLnh6O25hbWU9bWFucGFnZXMgXAorICAgICAgICAgICBmaWxlOi8vbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VsaW51eC1mbGFzay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjQwZWZkYmNlODY1ZDI0NThkOGRhMGE5ZGNlZTdjMTZjIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYTJkNzUyODZhNGI5ZWYzYTEzMDM5YzJkYTM4NjhhNjFiZTRlZTlmMTdkOGFlMzgwYTM1YTk3ZTUwNjk3MjE3MCIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICI3MjhhOTFhNWMxMDk1YTMzY2ZmYjk5NTliYjg5MTk2MyIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICJjZjAzMzNiNWYxMzRhMzMxZTBiNDZlMmRkZjkwNjY2ZjhiZGMzMjgxYzFjYTJjN2NjYmI3NWI0Mzc1ODljZTM3IgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1nbXAiCitFWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ID0gIi0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1hcmNoIC0tbGliZXhlY2Rpcj0ke2xpYmRpcn0iCisKKyMgYWNsIGlzIG5vdCBhIGRlZmF1bHQgZmVhdHVyZQorIworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICIiCisKKyMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKKyMKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgorCisjIFsgZGYgbWt0ZW1wIGJhc2U2NCBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYXJjaCBiYXNlbmFtZSBjaGNvbiBja3N1bSBjb21tIGNzcGxpdCBjdXQgZGlyIGRpcmNvbG9ycyBkaXJuYW1lIGR1IFwKKyAgICAgICAgICAgICAgICBlbnYgZXhwYW5kIGV4cHIgZmFjdG9yIGZtdCBmb2xkIGdyb3VwcyBoZWFkIGhvc3RpZCBpZCBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICBqb2luIGxpbmsgbG9nbmFtZSBtZDVzdW0gbWtmaWZvIG5pY2Ugbmwgbm9odXAgbnByb2Mgb2QgcGFzdGUgcGF0aGNoayBcCisgICAgICAgICAgICAgICAgcGlua3kgcHIgcHJpbnRlbnYgcHJpbnRmIHB0eCByZWFkbGluayByZWFscGF0aCBydW5jb24gc2VxIHNoYTFzdW0gc2hhMjI0c3VtIHNoYTI1NnN1bSBcCisgICAgICAgICAgICAgICAgc2hhMzg0c3VtIHNoYTUxMnN1bSBzaHJlZCBzaHVmIHNvcnQgc3BsaXQgc3RkYnVmIHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCB0aW1lb3V0XAorICAgICAgICAgICAgICAgIHRyIHRydW5jYXRlIHRzb3J0IHR0eSB1bmV4cGFuZCB1bmlxIHVubGluayB1cHRpbWUgdXNlcnMgdmRpciB3YyB3aG8gd2hvYW1pIHllcyIKKworIyBob3N0bmFtZSBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiYXNlX2JpbmRpcl9wcm9ncyA9ICJjYXQgY2hncnAgY2htb2QgY2hvd24gY3AgZGF0ZSBkZCBlY2hvIGZhbHNlIGtpbGwgbG4gbHMgbWtkaXIgXAorICAgICAgICAgICAgICAgICAgICAgbWtub2QgbXYgcHdkIHJtIHJtZGlyIHNsZWVwIHN0dHkgc3luYyB0b3VjaCB0cnVlIHVuYW1lIHN0YXQiCisKK3NiaW5kaXJfcHJvZ3M9ICJjaHJvb3QiCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgY29yZXV0aWxzIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworIyBEZWFsIHdpdGggYSBzZXBhcmF0ZSBidWlsZGRpciBmYWlsdXJlIGlmIHNyYyBkb2Vzbid0IGV4aXN0IHdoZW4gY3JlYXRpbmcgdmVyc2lvbi5jL3ZlcnNpb24uaAorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke0J9L3NyYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmb3IgaSBpbiBkZiBta3RlbXAgYmFzZTY0OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaS4ke0JQTn07IGRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7c2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7c2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwkjIFsgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIFsuY29yZXV0aWxzIHdpbGwgY2F1c2UgdGhlIHNlZCBzdHVmZgorCSMgaW4gdXBkYXRlLWFsdGVybmF0aXZlcyB0byBmYWlsLCB0aGVyZWZvcmUgdXNlIGxicmFja2V0IC0gdGhlIG5hbWUgdXNlZAorCSMgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGUuCisJbXYgJHtEfSR7YmluZGlyfS9bICR7RH0ke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59CisKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcworCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQorCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuMSAke1N9L21hbi8qLjEKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcyBkb24ndCBkbyBhIHNlcGFyYXRlIG1hbiBwYWdlIGZvciBbIHZzIHRlc3QuCisJIyBzZWUgY29tbWVudCBhYm92ZSByLmUuIHNlZCBhbmQgdXBkYXRlLWFsdGVybmF0aXZlcworCWNwIC1hICR7RH0ke21hbmRpcn0vbWFuMS90ZXN0LjEgJHtEfSR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEuJHtCUE59Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpeworCSMgcmVtb3ZlIGdyb3VwcyB0byBmaXggY29uZmxpY3Qgd2l0aCBzaGFkb3ctbmF0aXZlCisJcm0gLWYgJHtEfSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm91cHMKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImxicmFja2V0ICR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke3NiaW5kaXJfcHJvZ3N9IGJhc2U2NCBta3RlbXAgZGYiCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiYmFzZTY0LjEgbWt0ZW1wLjEgZGYuMSBsYnJhY2tldC4xIGdyb3Vwcy4xIGtpbGwuMSB1cHRpbWUuMSBzdGF0LjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiYXNlNjRdID0gIiR7YmFzZV9iaW5kaXJ9L2Jhc2U2NCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtiYXNlNjRdID0gIiR7YmluZGlyfS9iYXNlNjQuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NC4xXSA9ICIke21hbmRpcn0vbWFuMS9iYXNlNjQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfVEFSR0VUW21rdGVtcF0gPSAiJHtiaW5kaXJ9L21rdGVtcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGZdID0gIiR7YmFzZV9iaW5kaXJ9L2RmIgorQUxURVJOQVRJVkVfVEFSR0VUW2RmXSA9ICIke2JpbmRpcn0vZGYuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2RmLjFdID0gIiR7bWFuZGlyfS9tYW4xL2RmLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L1siCitBTFRFUk5BVElWRV9UQVJHRVRbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGJyYWNrZXQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdC4xXSA9ICIke21hbmRpcn0vbWFuMS9zdGF0LjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxZGM4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgdG9vbCB0byB3YWl0IGZvciBhIHNwZWNpZmljIHNpZ25hbCBvdmVyIERCdXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9kYnVzLXdhaXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZGJ1cyIKKworU1JDUkVWID0gIjZjYzYwNzdhMzZmZTI2NDhhNWY5OTNmZTdjMTZjOTYzMmY5NDY1MTciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDAxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJIaWdoIGxldmVsIGxhbmd1YWdlIChHTGliKSBiaW5kaW5nIGZvciBELUJ1cyIKK0RFU0NSSVBUSU9OID0gIkdMaWIgYmluZGluZ3MgZm9yIHRoZSBELUJ1cyBtZXNzYWdlIGJ1cyB0aGF0IGludGVncmF0ZSBcCit0aGUgRC1CdXMgbGlicmFyeSB3aXRoIHRoZSBHTGliIHRocmVhZCBhYnN0cmFjdGlvbiBhbmQgbWFpbiBsb29wLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2Y1YjNhMmY3MDgzNzUwZDUwNDMzMzExNGU3Mzg2NTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLWdsaWIuaDtiZWdpbmxpbmU9NztlbmRsaW5lPTIxO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJleHBhdCBnbGliLTIuMCB2aXJ0dWFsL2xpYmludGwgZGJ1cy1nbGliLW5hdGl2ZSBkYnVzIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGRidXMtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLWdsaWIvZGJ1cy1nbGliLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCisjZGVmYXVsdCBkaXNhYmxlIHJlZ3Jlc3Npb24gdGVzdHMsIHNvbWUgdW5pdCB0ZXN0IGNvZGUgaW4gbm9uIHRlc3RpbmcgY29kZQorI1BBQ0tBR0VDT05GSUdfcG4tJHtQTn0gPSAidGVzdHMiIGVuYWJsZSByZWdyZXNzaW9uIHRlc3RzIGxvY2FsLmNvbmYKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3Rlc3RzXSA9ICItLWVuYWJsZS10ZXN0cywsLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwgXAorICAgICAgICAgICAgICAgIC0td2l0aC1kYnVzLWJpbmRpbmctdG9vbD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZGJ1cy1iaW5kaW5nLXRvb2wiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1iYXNoLWNvbXBsZXRpb24gJHtQTn0tdGVzdHMtZGJnICR7UE59LXRlc3RzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kL2RidXMtYmFzaC1jb21wbGV0aW9uLnNoIFwKKyAgICR7bGliZXhlY2Rpcn0vZGJ1cy1iYXNoLWNvbXBsZXRpb24taGVscGVyIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9kYnVzLWJpbmRpbmctdG9vbCIKKworUkRFUEVORFNfJHtQTn0tdGVzdHMgKz0gImRidXMteDExIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMiCitGSUxFU18ke1BOfS10ZXN0cy1kYmcgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2NvcmUvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2ludGVyZmFjZXMvLmRlYnVnLyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi9uby1leGFtcGxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRGlzYWJsZSBjb21waWxpbmcgZXhhbXBsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtLm9yaWcJMjAwNi0wNy0yMyAxNjowNDo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtCTIwMDYtMDctMjMgMTY6MDQ6NTIuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgSU5DTFVERVM9LUkkKHRvcF9zcmNkaXIpICQoREJVU19DRkxBR1MpICQoREJVU19HTElCX0NGTEFHUykgJChEQlVTX0dMSUJfVE9PTF9DRkxBR1MpIC1EREJVU19DT01QSUxBVElPTj0xIC1EREJVU19MT0NBTEVESVI9XCIkKHByZWZpeCkvQERBVEFESVJOQU1FQC9sb2NhbGVcIiAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjdjODJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0NoYW5nZSBNYWtlZmlsZS5hbSB0byBpbnN0YWxsIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRlc3QgcGFja2FnZSBwdXJwb3NlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Rlc3Qgbm90IGluc3RhbGwgaXMgZm9yIHB1cnBvc2UgZnJvbSB1cHN0cmVhbV0KKworU2lnbmVkLW9mZi1ieTogWWFvIFpoYW8gPHlhby56aGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3QvTWFrZWZpbGUuYW0gICAgICAgICAgICB8IDMgKystCisgdGVzdC9jb3JlL01ha2VmaWxlLmFtICAgICAgIHwgMyArKy0KKyB0ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gfCAzICsrLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3QvTWFrZWZpbGUuYW0KK2luZGV4IDM3OWM4YzMuLjY1ODA5MjcgMTAwNjQ0CistLS0gYS90ZXN0L01ha2VmaWxlLmFtCisrKysgYi90ZXN0L01ha2VmaWxlLmFtCitAQCAtNDgsNyArNDgsOCBAQCBURVNUUyA9IFwKKyAJJCh0ZXN0X3NjcmlwdHMpIFwKKyAJJChOVUxMKQorIAorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMKKyt0ZXN0X1BST0dSQU1TID0gXAorIAkkKHRlc3RfcHJvZ3JhbXMpIFwKKyAJJCh0ZXN0X3JlbGF0ZWRfcHJvZ3JhbXMpIFwKKyAJJChOVUxMKQorZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbSBiL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQoraW5kZXggZTRiY2ViNC4uNTRiMDc3ZCAxMDA2NDQKKy0tLSBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQorKysrIGIvdGVzdC9jb3JlL01ha2VmaWxlLmFtCitAQCAtNjQsNyArNjQsOCBAQCBlbmRpZgorIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrdGVzdGRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VAL3Rlc3RzL2NvcmUKKyt0ZXN0X1BST0dSQU1TID0gXAorIAl0ZXN0LWRidXMtZ2xpYiBcCisgCXRlc3QtZXJyb3ItbWFwcGluZyBcCisgCXRlc3Qtc2VydmljZS1nbGliIFwKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gYi90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KK2luZGV4IGE5NGQwOGQuLjcwN2RjYWMgMTAwNjQ0CistLS0gYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbQorQEAgLTU3LDcgKzU3LDggQEAgaWYgREJVU19CVUlMRF9URVNUUworIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMvaW50ZXJmYWNlcworK3Rlc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyAKKyB0ZXN0X3NlcnZpY2VfU09VUkNFUyA9IFwKKyAJdGVzdC1pbnRlcmZhY2VzLmMgXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliXzAuMTA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjYzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZGJ1cy1nbGliLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiNTQ5N2QyMDcwNzA5Y2Y3OTZmMTg3OGM3NWE3MmEwMzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmZjMWYxYTgyYmZjM2VjM2VjYWZlMDRkMGU4N2JhYjdlOTk5ZjUwZGNlNGY0YTM0ZDBiODljYWY2YmQ4MjFmNiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuOC4yMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuOC4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQwNzBiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorCitERVBFTkRTID0gInB5dGhvbi1weWdvYmplY3QgZGJ1cyBkYnVzLWdsaWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJtYWtlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjQ5ODkwYmJhYmVkYWIzYTFjM2Y0ZjczYzdmZjhiMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM0ZmJmNGM2NDYyMWM5NmU4NzFkYTkxZDJiNzI5YTViMDA1MzZlMTE2ZDNjNDYxMmE0NjlkOTI0YjFiNzAzYSIKKworUz0iJHtXT1JLRElSfS9kYnVzLSR7UFZ9IgorRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZGJ1czoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHB0ZXN0CisKK0VYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgorRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY2FzZTE9InNoZWxsIHByaW50ZiByZWZzIHN5c2xvZyIKKwlmb3IgaSBpbiAke2Nhc2UxfTsgZG8gaW5zdGFsbCAke0J9L3Rlc3QvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJY2FzZTI9Im1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgorCWZvciBpIGluICR7Y2FzZTJ9OyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwljYXNlMz0iYnVzIGJ1cy1zeXN0ZW0gYnVzLWxhdW5jaC1oZWxwZXIiCisJZm9yIGkgaW4gJHtjYXNlM307IGRvIGluc3RhbGwgJHtCfS9idXMvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJaW5zdGFsbCAke0J9L2RidXMvdGVzdC1kYnVzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtciAke0J9L3Rlc3QvZGF0YSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Cit9CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzEwODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMuaW5jCkBAIC0wLDAgKzEsMTcwIEBACitTVU1NQVJZID0gIkQtQnVzIG1lc3NhZ2UgYnVzIgorREVTQ1JJUFRJT04gPSAiRC1CdXMgaXMgYSBtZXNzYWdlIGJ1cyBzeXN0ZW0sIGEgc2ltcGxlIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHRhbGsgdG8gb25lIGFub3RoZXIuIEluIGFkZGl0aW9uIHRvIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLCBELUJ1cyBoZWxwcyBjb29yZGluYXRlIHByb2Nlc3MgbGlmZWN5Y2xlOyBpdCBtYWtlcyBpdCBzaW1wbGUgYW5kIHJlbGlhYmxlIHRvIGNvZGUgYSBcInNpbmdsZSBpbnN0YW5jZVwiIGFwcGxpY2F0aW9uIG9yIGRhZW1vbiwgYW5kIHRvIGxhdW5jaCBhcHBsaWNhdGlvbnMgYW5kIGRhZW1vbnMgb24gZGVtYW5kIHdoZW4gdGhlaXIgc2VydmljZXMgYXJlIG5lZWRlZC4iCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCitERVBFTkRTID0gImV4cGF0IHZpcnR1YWwvbGliaW50bCIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKK0FMTE9XX0VNUFRZX2RidXMtcHRlc3QgPSAiMSIKK1JERVBFTkRTX2RidXMtcHRlc3RfY2xhc3MtdGFyZ2V0ID0gImRidXMtdGVzdC1wdGVzdCIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vb3MtdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisiCisKK2luaGVyaXQgdXNlcmFkZCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImRidXMtMSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAyIDUgMyAyIC4gc3RvcCAyMCAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uY29uZiAke3N5c2NvbmZkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYiCisKK0RFQklBTk5BTUVfJHtQTn0gPSAiZGJ1cy0xIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tbGliIgorCitPTERQS0dOQU1FID0gImRidXMteDExIgorT0xEUEtHTkFNRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5CitSUFJPVklERVNfJHtQTn0gPSAiJHtPTERQS0dOQU1FfSIKK1JSRVBMQUNFU18ke1BOfSArPSAiJHtPTERQS0dOQU1FfSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2RidXMtZGFlbW9uKiBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy11dWlkZ2VuIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWNsZWFudXAtc29ja2V0cyBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1zZW5kIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLW1vbml0b3IgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbGF1bmNoIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXJ1bi1zZXNzaW9uIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vZGJ1cyogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfJHtQTn0tbGliID0gIiR7UE59IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCisKK3BrZ19wb3N0aW5zdF9kYnVzKCkgeworCSMgSWYgYm90aCBzeXN0ZW1kIGFuZCBzeXN2aW5pdCBhcmUgZW5hYmxlZCwgbWFzayB0aGUgZGJ1cy0xIGluaXQgc2NyaXB0CisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZGJ1cy0xLnNlcnZpY2UKKwlmaQorCisJaWYgWyAteiAiJEQiIF0gJiYgWyAtZSAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdIDsgdGhlbgorCQkvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwlmaQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1sLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhdWRpdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN5c3RlbWQgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1kYnVzLWdsaWIiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWRpc2FibGUtc2VsaW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBXb3VsZCBsaWtlIHRvIC0tZW5hYmxlLXN5c3RlbWQgYnV0IHRoYXQncyBhIGNpcmN1bGFyIGJ1aWxkLWRlcGVuZGVuY3kgYmV0d2VlbgorIyBzeXN0ZW1kPC0+ZGJ1cworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14IC0tZW5hYmxlLXgxMS1hdXRvbGF1bmNoLC0td2l0aG91dC14IC0tZGlzYWJsZS14MTEtYXV0b2xhdW5jaCwgdmlydHVhbC9saWJ4MTEgbGlic20iCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlzZWQgJ3M6QGJpbmRpckA6JHtiaW5kaXJ9OicgPCAke1dPUktESVJ9L2RidXMtMS5pbml0ID4ke1dPUktESVJ9L2RidXMtMS5pbml0LnNoCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RidXMtMS5pbml0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kYnVzLTEKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJZm9yIGkgaW4gZGJ1cy50YXJnZXQud2FudHMgc29ja2V0cy50YXJnZXQud2FudHMgbXVsdGktdXNlci50YXJnZXQud2FudHM7IGRvIFwKKwkJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGk7IGRvbmUKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vYnVzL2RidXMuc2VydmljZSAke0J9L2J1cy9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJY2QgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGJ1cy50YXJnZXQud2FudHMvCisJCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kYnVzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAorCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc29ja2V0cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9kYnVzLnNlcnZpY2UKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWVjaG8gImQgbWVzc2FnZWJ1cyBtZXNzYWdlYnVzIDA3NTUgJHtsb2NhbHN0YXRlZGlyfS9ydW4vZGJ1cyBub25lIiBcCisJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X2RidXMKKworCisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIG1lc3NhZ2VidXM6bWVzc2FnZWJ1cyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cworCisJY2hvd24gcm9vdDptZXNzYWdlYnVzICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKwljaG1vZCA0NzU1ICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKworCSMgUmVtb3ZlIFJlZCBIYXQgaW5pdHNjcmlwdAorCXJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYy5kCisKKwkjIFJlbW92ZSBlbXB0eSB0ZXN0ZXhlYyBkaXJlY3RvcnkgYXMgd2UgZG9uJ3QgYnVpbGQgdGVzdHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9kYnVzLTEuMC90ZXN0CisKKwkjIFJlbW92ZSAvdmFyL3J1biBhcyBpdCBpcyBjcmVhdGVkIG9uIHN0YXJ0dXAKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGZvciBkYnVzLWdsaWItbmF0aXZlIGludHJvc3BlY3Rpb24gZ2VuZXJhdGlvbgorCWluc3RhbGwgLWQgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy8KKwkjIE4uQi4gaXMgYmVsb3cgaW5zdGFsbCBhY3R1YWxseSByZXF1aXJlZD8KKwlpbnN0YWxsIC1tIDA2NDQgYnVzL3Nlc3Npb24uY29uZiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL3Nlc3Npb24uY29uZgorCisJIyBkYnVzLWdsaWItbmF0aXZlIGFuZCBkYnVzLWdsaWIgbmVlZCB0aGlzIHhtbCBmaWxlCisJLi9idXMvZGJ1cy1kYWVtb24gLS1pbnRyb3NwZWN0ID4gJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbAorCQorCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAorCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KKwlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCisKKwkjIFJlbW92ZSAvdmFyL3J1biB0byBhdm9pZCBRQSBlcnJvcgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImJ1aWxkLWRlcHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorRnJvbSBiOGY4NGJkMzk0ODVkMzk3NzYyNWM5YThiOGU4Y2ZmNWQyM2JlNTZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyNyBGZWIgMjAxNCAwOTowNTowMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBkYnVzOiBjbGVhciBndWlkX2Zyb21fc2VydmVyIGlmIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQKKyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYnVzLXRlc3QgZGlzcGF0Y2ggdGVzdCBmYWlsZWQgd2l0aCBiZWxvdyBpbmZvcm1hdGlvbjoKKyAgICAuL2J1cy9idXMtdGVzdDogUnVubmluZyBtZXNzYWdlIGRpc3BhdGNoIHRlc3QKKyAgICBBY3RpdmF0aW5nIHNlcnZpY2UgbmFtZT0nb3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlRWNob1NlcnZpY2UnCisgICAgU3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCBzZXJ2aWNlICdvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2VydmljZScKKyAgICA2MzYzOiBhc3NlcnRpb24gZmFpbGVkICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIgZmlsZSAiZGJ1cy1hdXRoLmMiIGxpbmUgMTU0NSBmdW5jdGlvbiBwcm9jZXNzX29rCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19wcmludF9iYWNrdHJhY2UrMHgyOSkgWzB4ODBjYjk2OV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2Fib3J0KzB4MTQpIFsweDgwY2ZiNDRdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19yZWFsX2Fzc2VydCsweDUzKSBbMHg4MGI1MmMzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGUyNGRhXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfYXV0aF9kb193b3JrKzB4Mzg4KSBbMHg4MGUzODQ4XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFlYTQ5XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFmZmRlXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdHJhbnNwb3J0X2hhbmRsZV93YXRjaCsweGIxKSBbMHg4MGFkODQxXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfY29ubmVjdGlvbl9oYW5kbGVfd2F0Y2grMHgxMDQpIFsweDgwODkxNzRdCisgICAgICAuL2J1cy9idXMtdGVzdChkYnVzX3dhdGNoX2hhbmRsZSsweGQ4KSBbMHg4MGIxNWU4XQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfbG9vcF9pdGVyYXRlKzB4NGE5KSBbMHg4MGQxNTA5XQorICAgICAgLi9idXMvYnVzLXRlc3QoYnVzX3Rlc3RfcnVuX2NsaWVudHNfbG9vcCsweDVkKSBbMHg4MDgxMjlkXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZjYWIwXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZlMGNhXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZkYTZmXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdGVzdF9vb21faGFuZGxpbmcrMHgxOGMpIFsweDgwYjVjOGNdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmY3MjNdCisgICAgICAuL2J1cy9idXMtdGVzdChidXNfZGlzcGF0Y2hfdGVzdCsweDNjKSBbMHg4MDcxYWFjXQorICAgICAgLi9idXMvYnVzLXRlc3QobWFpbisweDFiNykgWzB4ODA1YWNjN10KKyAgICAgIC9saWIvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4ZjMpIFsweDQ1ZjkxOWIzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDVhZTM5XQorCitUaGUgc3RhY2sgaXMgYmVsb3c6CisgICAgIzAgIDB4ZmZmZmU0MjUgaW4gX19rZXJuZWxfdnN5c2NhbGwgKCkKKyAgICAjMSAgMHg0NWZhNjJkNiBpbiByYWlzZSAoKSBmcm9tIC9saWIvbGliYy5zby42CisgICAgIzIgIDB4NDVmYTk2NTMgaW4gYWJvcnQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgorICAgICMzICAweDA4MGNmYjY1IGluIF9kYnVzX2Fib3J0ICgpIGF0IGRidXMtc3lzZGVwcy5jOjk0CisgICAgIzQgIDB4MDgwYjUyYzMgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj0wLAorICAgICAgICBjb25kaXRpb25fdGV4dD1jb25kaXRpb25fdGV4dEBlbnRyeT0weDgxMTdhMzggIl9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSA9PSAwIiwKKyAgICAgICAgZmlsZT1maWxlQGVudHJ5PTB4ODExNzI3MyAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NSwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4ODExN2Y4ZSA8X19GVU5DVElPTl9fLjM0OTI+ICJwcm9jZXNzX29rIikKKyAgICAgICAgZGF0YT0weDgxNTcyOTApIGF0IGRidXMtY29ubmVjdGlvbi5jOjE1MTUKKyAgICAjMCAgMHgwMDAwMDAzM2ZlZTM1M2U5IGluIHJhaXNlICgpIGZyb20gL2xpYjY0L2xpYmMuc28uNgorICAgICMxICAweDAwMDAwMDMzZmVlMzg1MDggaW4gYWJvcnQgKCkgZnJvbSAvbGliNjQvbGliYy5zby42CisgICAgIzIgIDB4MDAwMDAwMDAwMDQ3ZDU4NSBpbiBfZGJ1c19hYm9ydCAoKSBhdCBkYnVzLXN5c2RlcHMuYzo5NAorICAgICMzICAweDAwMDAwMDAwMDA0NjY0ODYgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj08b3B0aW1pemVkIG91dD4sCisgICAgICAgIGNvbmRpdGlvbl90ZXh0PWNvbmRpdGlvbl90ZXh0QGVudHJ5PTB4NGMyOTg4ICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIsCisgICAgICAgIGZpbGU9ZmlsZUBlbnRyeT0weDRjMjFhNSAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NiwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4NGMyZmNlIDxfX0ZVTkNUSU9OX18uMzg0NT4gInByb2Nlc3Nfb2siKQorICAgICAgICBhdCBkYnVzLWludGVybmFscy5jOjkzMQorICAgICM0ICAweDAwMDAwMDAwMDA0OGQ0MjQgaW4gcHJvY2Vzc19vayAoYXJnc19mcm9tX29rPTB4N2ZmZmZmZmZlNDgwLAorICAgICAgICBhdXRoPTB4NmZmMzQwKSBhdCBkYnVzLWF1dGguYzoxNTQ2CisgICAgIzUgIGhhbmRsZV9jbGllbnRfc3RhdGVfd2FpdGluZ19mb3JfZGF0YSAoYXV0aD0weDZmZjM0MCwKKyAgICAgICAgY29tbWFuZD08b3B0aW1pemVkIG91dD4sIGFyZ3M9MHg3ZmZmZmZmZmU0ODApIGF0IGRidXMtYXV0aC5jOjE5OTYKKyAgICAjNiAgMHgwMDAwMDAwMDAwNDhlNzg5IGluIHByb2Nlc3NfY29tbWFuZCAoYXV0aD0weDZmZjM0MCkgYXQgZGJ1cy1hdXRoLmM6MjIwOAorICAgICM3ICBfZGJ1c19hdXRoX2RvX3dvcmsgKGF1dGg9MHg2ZmYzNDApIGF0IGRidXMtYXV0aC5jOjI0NTgKKyAgICAjOCAgMHgwMDAwMDAwMDAwNDYwOTFkIGluIGRvX2F1dGhlbnRpY2F0aW9uICgKKyAgICAgICAgdHJhbnNwb3J0PXRyYW5zcG9ydEBlbnRyeT0weDZmZmFhMCwgZG9fcmVhZGluZz1kb19yZWFkaW5nQGVudHJ5PTEsCisgICAgICAgIGRvX3dyaXRpbmc9ZG9fd3JpdGluZ0BlbnRyeT0wLAorICAgICAgICBhdXRoX2NvbXBsZXRlZD1hdXRoX2NvbXBsZXRlZEBlbnRyeT0weDdmZmZmZmZmZTU1YykKKyAgICAgICAgYXQgZGJ1cy10cmFuc3BvcnQtc29ja2V0LmM6NDQyCisgICAgIzkgIDB4MDAwMDAwMDAwMDQ2MWQwOCBpbiBzb2NrZXRfaGFuZGxlX3dhdGNoICh0cmFuc3BvcnQ9MHg2ZmZhYTAsCisgICAgICAgIHdhdGNoPTB4NmY0MTkwLCBmbGFncz0xKSBhdCBkYnVzLXRyYW5zcG9ydC1zb2NrZXQuYzo5MjEKKyAgICAjMTAgMHgwMDAwMDAwMDAwNDVmYTNhIGluIF9kYnVzX3RyYW5zcG9ydF9oYW5kbGVfd2F0Y2ggKHRyYW5zcG9ydD0weDZmZmFhMCwKKworT25jZSBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZCwgdGhpcyBmYWlsdXJlIHdpbGwgaGFwcGVuLCBzaW5jZQorYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBoYXMgYmVlbiBzZXQgdG8gc29tZSB2YWx1ZSBiZWZvcmUKK3NlbmRfbmVnb3RpYXRlX3VuaXhfZmQuIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQgZmFpbHVyZSB3aWxsIGxlYWQgdG8KK3RoaXMgYXV0aCBiZSBoYW5kbGVkIGJ5IHByb2Nlc3Nfb2sgYWdhaW4sIGJ1dCB0aGlzIGF1dGgtPmd1aWRfZnJvbV9zZXJ2ZXIKK2lzIG5vdCB6ZXJvLgorCitTbyB3ZSBzaG91bGQgY2xlYXIgYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBpZiBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBkYnVzL2RidXMtYXV0aC5jIHwgICAgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWF1dGguYyBiL2RidXMvZGJ1cy1hdXRoLmMKK2luZGV4IGQyYzM3YTcuLjM3YjQ1YzYgMTAwNjQ0CistLS0gYS9kYnVzL2RidXMtYXV0aC5jCisrKysgYi9kYnVzL2RidXMtYXV0aC5jCitAQCAtMTU3MSw4ICsxNTcxLDEzIEBAIHByb2Nlc3Nfb2soREJ1c0F1dGggKmF1dGgsCisgICBfZGJ1c192ZXJib3NlICgiR290IEdVSUQgJyVzJyBmcm9tIHRoZSBzZXJ2ZXJcbiIsCisgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpKTsKKyAKKy0gIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKQorLSAgICByZXR1cm4gc2VuZF9uZWdvdGlhdGVfdW5peF9mZChhdXRoKTsKKysgIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKSB7CisrICAgICBpZiAoIXNlbmRfbmVnb3RpYXRlX3VuaXhfZmQoYXV0aCkpIHsKKysgICAgICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlciwgMCk7CisrICAgICAgICAgcmV0dXJuIEZBTFNFOworKyAgICAgfQorKyAgICAgcmV0dXJuIFRSVUU7CisrICB9CisgCisgICBfZGJ1c192ZXJib3NlKCJOb3QgbmVnb3RpYXRpbmcgdW5peCBmZCBwYXNzaW5nLCBzaW5jZSBub3QgcG9zc2libGVcbiIpOworICAgcmV0dXJuIHNlbmRfYmVnaW4gKGF1dGgpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvZGJ1cy0xLmluaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvZGJ1cy0xLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjODYyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdApAQCAtMCwwICsxLDEyMyBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgZGJ1cworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IEQtQnVzIHN5c3RlbXdpZGUgbWVzc2FnZSBidXMKKyMgRGVzY3JpcHRpb246ICAgICAgIEQtQnVzIGlzIGEgc2ltcGxlIGludGVycHJvY2VzcyBtZXNzYWdpbmcgc3lzdGVtLCB1c2VkCisjICAgICAgICAgICAgICAgICAgICBmb3Igc2VuZGluZyBtZXNzYWdlcyBiZXR3ZWVuIGFwcGxpY2F0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBEZWJpYW4gaW5pdC5kIHNjcmlwdCBmb3IgRC1CVVMKKyMgQ29weXJpZ2h0IMKpIDIwMDMgQ29saW4gV2FsdGVycyA8d2FsdGVyc0BkZWJpYW4ub3JnPgorCisjIHNldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworREFFTU9OPUBiaW5kaXJAL2RidXMtZGFlbW9uCitOQU1FPWRidXMKK0RBRU1PTlVTRVI9bWVzc2FnZWJ1cyAgICAgICAgICAgIyBtdXN0IG1hdGNoIC9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mCitQSURGSUxFPS92YXIvcnVuL21lc3NhZ2VidXMucGlkICMgbXVzdCBtYXRjaCAvZXRjL2RidXMtMS9zeXN0ZW0uY29uZgorVVVJRERJUj0vdmFyL2xpYi9kYnVzCitERVNDPSJzeXN0ZW0gbWVzc2FnZSBidXMiCitFVkVOVERJUj0vZXRjL2RidXMtMS9ldmVudC5kCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworIyBTb3VyY2UgZGVmYXVsdHMgZmlsZTsgZWRpdCB0aGF0IGZpbGUgdG8gY29uZmlndXJlIHRoaXMgc2NyaXB0LgorRU5BQkxFRD0xCitQQVJBTVM9IiIKK2lmIFsgLWUgL2V0Yy9kZWZhdWx0L2RidXMgXTsgdGhlbgorICAuIC9ldGMvZGVmYXVsdC9kYnVzCitmaQorCit0ZXN0ICIkRU5BQkxFRCIgIT0gIjAiIHx8IGV4aXQgMAorCitzdGFydF9pdF91cCgpCit7CisgIG1rZGlyIC1wICJgZGlybmFtZSAkUElERklMRWAiCisgIGlmIFsgLWUgJFBJREZJTEUgXTsgdGhlbgorICAgIFBJRERJUj0vcHJvYy8kKGNhdCAkUElERklMRSkKKyAgICBpZiBbIC1kICR7UElERElSfSAtYSAgIiQocmVhZGxpbmsgLWYgJHtQSURESVJ9L2V4ZSkiID0gIiR7REFFTU9OfSIgXTsgdGhlbiAKKyAgICAgIGVjaG8gIiRERVNDIGFscmVhZHkgc3RhcnRlZDsgbm90IHN0YXJ0aW5nLiIKKyAgICBlbHNlCisgICAgICBlY2hvICJSZW1vdmluZyBzdGFsZSBQSUQgZmlsZSAkUElERklMRS4iCisgICAgICBybSAtZiAkUElERklMRQorICAgIGZpCisgIGZpCisKKyAgaWYgWyAhIC1kICRVVUlERElSIF07IHRoZW4KKyAgICBta2RpciAtcCAkVVVJRERJUgorICAgIGNob3duICREQUVNT05VU0VSICRVVUlERElSCisgICAgY2hncnAgJERBRU1PTlVTRVIgJFVVSURESVIKKyAgZmkKKyAKKyAgZGJ1cy11dWlkZ2VuIC0tZW5zdXJlICAKKworICBlY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRQSURGSUxFIFwKKyAgICAtLXVzZXIgJERBRU1PTlVTRVIgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIGlmIFsgLWQgJEVWRU5URElSIF07IHRoZW4KKyAgICAgIHJ1bi1wYXJ0cyAtLWFyZz1zdGFydCAkRVZFTlRESVIKKyAgZmkKK30KKworc2h1dF9pdF9kb3duKCkKK3sKKyAgaWYgWyAtZCAkRVZFTlRESVIgXTsgdGhlbgorICAgICAgIyBUT0RPOiAtLXJldmVyc2Ugd2hlbiBidXN5Ym94IHN1cHBvcnRzIGl0CisgICAgICBydW4tcGFydHMgLS1hcmc9c3RvcCAkRVZFTlRESVIKKyAgZmkKKyAgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKyAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLS1zdG9wICAtLXF1aWV0IC0tcGlkZmlsZSAkUElERklMRSBcCisgICAgLS11c2VyICREQUVNT05VU0VSCisgICMgV2Ugbm8gbG9uZ2VyIGluY2x1ZGUgdGhlc2UgYXJndW1lbnRzIHNvIHRoYXQgc3RhcnQtc3RvcC1kYWVtb24KKyAgIyBjYW4gZG8gaXRzIGpvYiBldmVuIGdpdmVuIHRoYXQgd2UgbWF5IGhhdmUgYmVlbiB1cGdyYWRlZC4KKyAgIyBXZSByZWx5IG9uIHRoZSBwaWRmaWxlIGJlaW5nIHNhbmVseSBtYW5hZ2VkCisgICMgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIHJtIC1mICRQSURGSUxFCit9CisKK3JlbG9hZF9pdCgpCit7CisgIGVjaG8gLW4gIlJlbG9hZGluZyAkREVTQyBjb25maWc6ICIKKyAgZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1zeXN0ZW0gLS10eXBlPW1ldGhvZF9jYWxsIFwKKyAgICAgICAgICAgIC0tZGVzdD1vcmcuZnJlZWRlc2t0b3AuREJ1cyBcCisgICAgICAgICAgICAvIG9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbG9hZENvbmZpZyA+IC9kZXYvbnVsbAorICAjIGhvcGVmdWxseSB0aGlzIGlzIGVub3VnaCB0aW1lIGZvciBkYnVzIHRvIHJlbG9hZCBpdCdzIGNvbmZpZyBmaWxlLgorICBlY2hvICJkb25lLiIKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIHN0YXJ0X2l0X3VwCisgIDs7CisgIHN0b3ApCisgICAgc2h1dF9pdF9kb3duCisgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgJERBRU1PTgorICAgIGV4aXQgJD8KKyAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICByZWxvYWRfaXQKKyAgOzsKKyAgcmVzdGFydCkKKyAgICBzaHV0X2l0X2Rvd24KKyAgICBzbGVlcCAxCisgICAgc3RhcnRfaXRfdXAKKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvJE5BTUUge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGZvcmNlLXJlbG9hZH0iID4mMgorICAgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL29zLXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMjU3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK2RidXM6IHJlbW92ZSBidWlsZCBob3N0IHRlc3QgaW4gY29uZmlndXJlIHNjcmlwdAorCitUaGUgZGJ1cyBidWlsZCB0ZXN0cyB0aGUgYnVpbGQgaG9zdCB0byBkZXRlY3Qgd2hhdCBpbml0c2NyaXB0CitlbnZpcm9ubWVudCBpdCBleHBlY3RzLiAgUmVtb3ZlIHRoZSB0ZXN0IGFuZCBzZXQgaXQgdG8gInJlZGhhdCIKK3VuY29uZGl0aW9uYWxseSBhcyB0aGUgb2UtY29yZSBpbml0c2NyaXB0IGhhcyBhIHJlZGhhdC1zdHlsZSBwaWQgZmlsZQorcGF0aC4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK2RpZmYgLXUgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTI4IDExOjIzOjQzLjA0MDYwOTg3NCAtMDcwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTItMDgtMjggMTE6NTQ6MjUuNjAyOTEzOTQ1IC0wNzAwCitAQCAtMTM0OCwxOSArMTM0OCw4IEBACisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0xJQkVYRUNESVIsICIkbGliZXhlY2RpciIpCisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0RBVEFESVIsICIkZGF0YWRpciIpCisgCistIyMjIyBDaGVjayBvdXIgb3BlcmF0aW5nIHN5c3RlbQorLW9wZXJhdGluZ19zeXN0ZW09dW5rbm93bgorLWlmIHRlc3QgLWYgL2V0Yy9yZWRoYXQtcmVsZWFzZSB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3JlZGhhdC1yZWxlYXNlIDsgdGhlbgorLSAgIG9wZXJhdGluZ19zeXN0ZW09cmVkaGF0CistZmkKKy0KKy1pZiB0ZXN0IC1mIC9ldGMvc2xhY2t3YXJlLXZlcnNpb24gfHwgdGVzdCAtZiAkRVhQQU5ERURfU1lTQ09ORkRJUi9zbGFja3dhcmUtdmVyc2lvbiA7IHRoZW4KKy0gICBvcGVyYXRpbmdfc3lzdGVtPXNsYWNrd2FyZQorLWZpCistCistaWYgdGVzdCAtZiAvdXNyL2Jpbi9jeWd3aW4xLmRsbCB8fCB0ZXN0IC1mICRFWFBBTkRFRF9CSU5ESVIvY3lnd2luMS5kbGwgOyB0aGVuCistICAgb3BlcmF0aW5nX3N5c3RlbT1jeWd3aW4KKy1maQorKyMjIyMgQnVpbGQgaG9zdCB0ZXN0IHJlbW92ZWQgZnJvbSB1cHN0cmVhbSBjb2RlLCBvcGVuZW1iZWRkZWQgaW5pdHNjcmlwdCBpcyByZWRoYXQtbGlrZToKKytvcGVyYXRpbmdfc3lzdGVtPXJlZGhhdAorIAorICMjIyMgU29ydCBvdXQgaW5pdCBzY3JpcHRzCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9weXRob24tY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDQwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIGJ1aWxkaW5nIHRoZSBkYnVzLXB0ZXN0IHBhY2thZ2UsIHdlIGhhdmUgdG8gZW5hYmxlIHB5dGhvbi4gIEhvd2V2ZXIKK2NoZWNraW5nIGlmIHRoZSBob3N0LXN5c3RlbSBweXRob24gaGFzIHRoZSBuZWNlc3NhcnkgbGlicmFyeSBpc24ndCB1c2VmdWwuCisKK0Rpc2FibGUgdGhlIHB5dGhvbiBtb2R1bGUgY2hlY2sgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gZGJ1cy0xLjYuOC9jb25maWd1cmUuYWMub3JpZwkyMDEzLTA3LTExIDE0OjE1OjU4LjgzNDU1NDc5OSAtMDUwMAorKysrIGRidXMtMS42LjgvY29uZmlndXJlLmFjCTIwMTMtMDctMTEgMTQ6MTQ6NDAuOTY5NTU0ODQ4IC0wNTAwCitAQCAtMjU3LDEzICsyNTcsNiBAQAorICAgIyBmdWxsIHRlc3QgY292ZXJhZ2UgaXMgcmVxdWlyZWQsIFB5dGhvbiBpcyBhIGhhcmQgZGVwZW5kZW5jeQorICAgQUNfTVNHX05PVElDRShbRnVsbCB0ZXN0IGNvdmVyYWdlICgtLWVuYWJsZS10ZXN0cz15ZXMpIHJlcXVpcmVzIFB5dGhvbiwgZGJ1cy1weXRob24sIHB5Z29iamVjdF0pCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSkKKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIFB5dGhvbiBtb2R1bGVzIGZvciBmdWxsIHRlc3QgY292ZXJhZ2VdKQorLSAgaWYgIiRQWVRIT04iIC1jICJpbXBvcnQgZGJ1cywgZ29iamVjdCwgZGJ1cy5tYWlubG9vcC5nbGliIjsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIEFDX01TR19FUlJPUihbY2Fubm90IGltcG9ydCBkYnVzLCBnb2JqZWN0LCBkYnVzLm1haW5sb29wLmdsaWIgUHl0aG9uIG1vZHVsZXNdKQorLSAgZmkKKyBlbHNlCisgICAjIC0tZW5hYmxlLXRlc3RzIG5vdCBnaXZlbjogZG8gbm90IGFib3J0IGlmIFB5dGhvbiBpcyBtaXNzaW5nCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSwgW10sIFs6XSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MmQwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitvdXRwdXQoKSB7CisgIGlmIFsgJD8gLWVxIDAgXQorICAgIHRoZW4gZWNobyAiUEFTUzogJGkiCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSIKKyAgZmkKK30KKworZm9yIGkgaW4gYGxzIHRlc3QvdGVzdC0qYDsgZG8gLi8kaSAuL3Rlc3QvZGF0YSBEQlVTX1RFU1RfSE9NRURJUj0uL3Rlc3QgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvdG1wZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3RtcGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjA4NmUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3RtcGRpci5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDUxMDVmZWRkN2ZhMTNkYWRkMmQwZDg2NGZiNzc4NzNiODNiNzlhNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVGh1LCAyMyBKdW4gMjAxMSAxMzo1MjowOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBidWlsZHN5czogaGFyZGNvZGUgc29ja2V0ZGlyIHRvIC90bXAKKwordGhlIFRNUERJUiBlbnYgdmFyIGlzbid0IGFsd2F5cyBwb2ludGluZyB0byB0aGUgcmlnaHQgdGFyZ2V0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKworT3JpZ2luYWwgY29tbWVudDoKKworCWF2b2lkIHRvIGNoZWNrIHRtcCBkaXIgYXQgYnVpbGQgdGltZS4gaW5zdGVhZCB1c2VzIGhhcmQgY29kZWQgL3RtcCBoZXJlCisJY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMTEgKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQwODA1NGIuLjZkMjYxODAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0ODMsMTYgKzE0ODMsNyBAQCBBQ19TVUJTVChURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZKQorIEFDX0RFRklORV9VTlFVT1RFRChEQlVTX1RFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUlksICIkVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSIsCisgICAgICAgICAgICAgICAgICAgIFtGdWxsIHBhdGggdG8gdGhlIGxhdW5jaCBoZWxwZXIgdGVzdCBwcm9ncmFtIGluIHRoZSBidWlsZGRpcl0pCisgCistIyMjIyBGaW5kIHNvY2tldCBkaXJlY3RvcmllcworLWlmICEgdGVzdCAteiAiJFRNUERJUiIgOyB0aGVuCistICAgREVGQVVMVF9TT0NLRVRfRElSPSRUTVBESVIKKy1lbGlmICEgdGVzdCAteiAiJFRFTVAiIDsgdGhlbgorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0kVEVNUAorLWVsaWYgISB0ZXN0IC16ICIkVE1QIiA7IHRoZW4KKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9JFRNUAorLWVsc2UKKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9L3RtcAorLWZpCisrREVGQVVMVF9TT0NLRVRfRElSPS90bXAKKyAKKyBERUZBVUxUX1NPQ0tFVF9ESVI9YGVjaG8gJERFRkFVTFRfU09DS0VUX0RJUiB8IHNlZCAncy8rLyUyQi9nJ2AKKyAKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS44LjIwLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuOC4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYyMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuOC4yMC5iYgpAQCAtMCwwICsxLDQgQEAKK2luY2x1ZGUgZGJ1cy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImI0OTg5MGJiYWJlZGFiM2ExYzNmNGY3M2M3ZmY4YjJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNGZiZjRjNjQ2MjFjOTZlODcxZGE5MWQyYjcyOWE1YjAwNTM2ZTExNmQzYzQ2MTJhNDY5ZDkyNGIxYjcwM2EiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjNzM2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJBIGxpZ2h0d2VpZ2h0IFNTSCBhbmQgU0NQIGltcGxlbWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgc29tZSBmaWxlcyBhcmUgZnJvbSBvdGhlciBwcm9qZWN0cyBhbmQgaGF2ZSBvdGhlcnMgbGljZW5zZSB0ZXJtczoKKyMgICBwdWJsaWMgZG9tYWluLCBPcGVuU1NIIDMuNXAxLCBPcGVuU1NIMy42LjFwMiwgUHVUVFkKK0xJQ0VOU0UgPSAiTUlUICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNWVjNDBjYWZiYTI2ZmM0Mzk2ZDBiNTUwZjgyNGUwMSIKKworREVQRU5EUyA9ICJ6bGliIgorUlBST1ZJREVTXyR7UE59ID0gInNzaCBzc2hkIiAKKworREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vbWF0dC51Y2MuYXNuLmF1L2Ryb3BiZWFyL3JlbGVhc2VzL2Ryb3BiZWFyLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXJrZXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhckAuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhci5zb2NrZXQgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXIiCisKK1BBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKKwlwYW0tcGx1Z2luLWRlbnkgXAorCXBhbS1wbHVnaW4tcGVybWl0IFwKKwlwYW0tcGx1Z2luLXVuaXggXAorCSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9QTFVHSU5TfScsICcnLCBkKX0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImRyb3BiZWFyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMTAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkcm9wYmVhci5zb2NrZXQiCisKK0NGTEFHU19wcmVwZW5kID0gIiAtSS4gIgorTEQgPSAiJHtDQ30iCisKK1NCSU5DT01NQU5EUyA9ICJkcm9wYmVhciBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQiCitCSU5DT01NQU5EUyA9ICJkYmNsaWVudCBzc2ggc2NwIgorRVhUUkFfT0VNQUtFID0gJ01VTFRJPTEgU0NQUFJPR1JFU1M9MSBQUk9HUkFNUz0iJHtTQklOQ09NTUFORFN9ICR7QklOQ09NTUFORFN9IicKK0VYVFJBX09FQ09ORiArPSAiXAorICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgorQ0ZMQUdTICs9ICItRFNGVFBTRVJWRVJfUEFUSD1cXCIke2xpYmRpcn0vb3BlbnNzaC9zZnRwLXNlcnZlclxcIiIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyIFwKKwkJJHtEfSR7YmluZGlyfSBcCisJCSR7RH0ke3NiaW5kaXJ9IFwKKwkJJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKworCWluc3RhbGwgLW0gMDc1NSBkcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LworCWxuIC1zICR7c2JpbmRpcn0vZHJvcGJlYXJtdWx0aSAke0R9JHtiaW5kaXJ9L2RiY2xpZW50CisJCisJZm9yIGkgaW4gJHtTQklOQ09NTUFORFN9CisJZG8KKwkJbG4gLXMgLi9kcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LyRpCisJZG9uZQorCXNlZCAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLC92YXIsJHtsb2NhbHN0YXRlZGlyfSxnJyBcCisJCS1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnJyBcCisJCS1lICdzLC91c3IsJHtwcmVmaXh9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kcm9wYmVhcgorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZHJvcGJlYXIKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZAorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhciAgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJZmkKKworCSMgZGVhbCB3aXRoIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhcmtleS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXJALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhci5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHJvcGJlYXIuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzY3Agc3NoIgorCitBTFRFUk5BVElWRV9UQVJHRVQgPSAiJHtzYmluZGlyfS9kcm9wYmVhcm11bHRpIgorCitwa2dfcG9zdHJtX2FwcGVuZF8ke1BOfSAoKSB7CisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisgIGZpCisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5CisgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ZDU3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdWJqZWN0OiBbUEFUQ0ggMS82XSB1cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG9wdGlvbnMuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29wdGlvbnMuaCBiL29wdGlvbnMuaAoraW5kZXggN2QwNjMyMi4uNzFhMjFjMiAxMDA2NDQKKy0tLSBhL29wdGlvbnMuaAorKysrIGIvb3B0aW9ucy5oCitAQCAtMjQ3LDcgKzI0Nyw3IEBAIG11Y2ggdHJhZmZpYy4gKi8KKyAvKiBUaGUgY29tbWFuZCB0byBpbnZva2UgZm9yIHhhdXRoIHdoZW4gdXNpbmcgWDExIGZvcndhcmRpbmcuCisgICogIi1xIiBmb3IgcXVpZXQgKi8KKyAjaWZuZGVmIFhBVVRIX0NPTU1BTkQKKy0jZGVmaW5lIFhBVVRIX0NPTU1BTkQgIi91c3IvYmluL3hhdXRoIC1xIgorKyNkZWZpbmUgWEFVVEhfQ09NTUFORCAieGF1dGggLXEiCisgI2VuZGlmCisgCisgLyogaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bm5pbmcgYW4gc2Z0cCBzZXJ2ZXIgKHN1Y2ggYXMgdGhlIG9uZSBpbmNsdWRlZCB3aXRoCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzYWIwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYzVmNWM1MDU0YzFiMTU1MzlkY2NmODY2ZTJjM2ZhYmE3ZWQ2ODQ1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9FcmljPTIwQj1DMz1BOW5hcmQ/PSA8ZXJpY0BldWtyZWEuY29tPgorRGF0ZTogVGh1LCAyNSBBcHIgMjAxMyAwMDoyNzoyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNl0gY29uZmlndXJlOiBhZGQgYSB2YXJpYWJsZSB0byBhbGxvdyBvcGVucHR5IGNoZWNrIHRvIGJlIGNhY2hlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgY29uZmlndXJlLmFjIHwgMTEgKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwNTQ2MWYzLi45YzE2ZDkwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNjYsMTUgKzE2NiwyMCBAQCBBQ19BUkdfRU5BQkxFKG9wZW5wdHksCisgCQkJQUNfTVNHX05PVElDRShOb3QgdXNpbmcgb3BlbnB0eSkKKyAJCWVsc2UKKyAJCQlBQ19NU0dfTk9USUNFKFVzaW5nIG9wZW5wdHkgaWYgYXZhaWxhYmxlKQorLQkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZLCxIYXZlIG9wZW5wdHkoKSBmdW5jdGlvbildKQorKwkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtkcm9wYmVhcl9jdl9mdW5jX2hhdmVfb3BlbnB0eT15ZXNdKQorIAkJZmkKKyAJXSwKKyAJWworIAkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKKy0JCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKV0pCisrCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHk9eWVzXSkKKyAJXQorICkKKy0JCQorKworK2lmIHRlc3QgIngkZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHkiID0gInh5ZXMiOyB0aGVuCisrCUFDX0RFRklORShIQVZFX09QRU5QVFksLEhhdmUgb3BlbnB0eSgpIGZ1bmN0aW9uKQorKwlub19wdGNfY2hlY2s9eWVzCisrCW5vX3B0bXhfY2hlY2s9eWVzCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKHN5c2xvZywKKyAJWyAgLS1kaXNhYmxlLXN5c2xvZyAgICAgICAgRG9uJ3QgaW5jbHVkZSBzeXNsb2cgc3VwcG9ydF0sCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNC1maXgtMmtiLWtleXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzOWQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1N1YmplY3Q6IFtQQVRDSCA0LzZdIGZpeCAya2Iga2V5cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBrZXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKK2luZGV4IDcyNDMwZTkuLjM3NWM2NzcgMTAwNjQ0CistLS0gYS9rZXguaAorKysrIGIva2V4LmgKK0BAIC02Nyw2ICs2Nyw2IEBAIHN0cnVjdCBLRVhTdGF0ZSB7CisgfTsKKyAKKyAKKy0jZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDIwMDAKKysjZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDMwMDAKKyAKKyAjZW5kaWYgLyogX0tFWF9IXyAqLworLS0gCisxLjcuMTEuNworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwOGM1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTdWJqZWN0OiBbUEFUQ0ggNS82XSBkcm9wYmVhciBlbmFibGUgcGFtCisKK2Ryb3BiZWFyOiBXZSBuZWVkIG1vZGlmeSBmaWxlIG9wdGlvbi5oIGJlc2lkZXMgZW5hYmxpbmcgcGFtIGluIFwKK2NvbmZpZ3VyZSBpZiB3ZSB3YW50IGRyb3BiZWFyIHRvIHN1cHBvcnQgcGFtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIG9wdGlvbnMuaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRyb3BiZWFyLTIwMTMuNjIub3JpZy9vcHRpb25zLmgJMjAxNC0wMS0xNCAyMTo1MzowMi44MDMyNjIwMDkgKzAwMDAKKysrKyBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAkyMDE0LTAxLTE0IDIxOjUzOjU2LjExOTI2MzQ2MiArMDAwMAorQEAgLTE5Miw5ICsxOTIsOSBAQAorICAqIFBBTSBjaGFsbGVuZ2UvcmVzcG9uc2UuCisgICogWW91IGNhbid0IGVuYWJsZSBib3RoIFBBU1NXT1JEIGFuZCBQQU0uICovCisgCistI2RlZmluZSBFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgKKysvKiNkZWZpbmUgRU5BQkxFX1NWUl9QQVNTV09SRF9BVVRIKi8KKyAvKiBQQU0gcmVxdWlyZXMgLi9jb25maWd1cmUgLS1lbmFibGUtcGFtICovCistLyojZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEggKi8KKysjZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEgKKyAjZGVmaW5lIEVOQUJMRV9TVlJfUFVCS0VZX0FVVEgKKyAKKyAvKiBXaGV0aGVyIHRvIHRha2UgcHVibGljIGtleSBvcHRpb25zIGluIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTRjOGQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorU3ViamVjdDogW1BBVENIIDYvNl0gZHJvcGJlYXIgY29uZmlndXJhdGlvbiBmaWxlCisKK2Ryb3BiZWFyOiBDaGFuZ2UgdGhlIHBhdGggKCIvZXRjL3BhbS5kL3NzaGQiIGFzIGRlZmF1bHQpIHRvIGZpbmQgYSBwYW0gY29uZmlndXJhdGlvbiBmaWxlIFwKK3RvICIvZXRjL3BhbS5kL2Ryb3BiZWFyIGZvciBkcm9wYmVhciB3aGVuIGVuYWJsaW5nIHBhbSBzdXBwb3J0aW5nIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OYXVyIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jIGRyb3BiZWFyLTIwMTMuNjAvc3ZyLWF1dGhwYW0uYworLS0tIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMTYgMTY6MzQ6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZHJvcGJlYXItMjAxMy42MC9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMjEgMTc6MDQ6MDQuOTY5NDE2MDU1ICswMjAwCitAQCAtMjExLDcgKzIxMSw3IEBACisgCXVzZXJEYXRhLnBhc3N3ZCA9IHBhc3N3b3JkOworIAorIAkvKiBJbml0IHBhbSAqLworLQlpZiAoKHJjID0gcGFtX3N0YXJ0KCJzc2hkIiwgTlVMTCwgJnBhbUNvbnYsICZwYW1IYW5kbGVwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJaWYgKChyYyA9IHBhbV9zdGFydCgiZHJvcGJlYXIiLCBOVUxMLCAmcGFtQ29udiwgJnBhbUhhbmRsZXApKSAhPSBQQU1fU1VDQ0VTUykgeworIAkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAicGFtX3N0YXJ0KCkgZmFpbGVkLCByYz0lZCwgJXMiLCAKKyAJCQkJcmMsIHBhbV9zdHJlcnJvcihwYW1IYW5kbGVwLCByYykpOworIAkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDUwMTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKQEAgLTAsMCArMSwxNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgZHJvcGJlYXJrZXkgdXRpbGl0eSBidWlsdCBpbiB4MzIgYWJpIGZvcm1hdCwgd2hlbiBnZW5lcmF0aW5nIHNzaAora2V5cywgd2FzIGdldHRpbmcgbG9zdCBpbiB0aGUgaW5maW5pdGUgbG9vcC4KKworVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUgYnkgZml4aW5nIHR5cGVzIG9mIHZhcmlhYmxlcyBhbmQKK3BhcmFtZXRlcnMgb2YgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGNvZGUsIHdoaWNoIHdlcmUgZ2V0dGluZwordW5kZXNpcmVkIHNpemUsIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgeDMyIGFiaSB0b29sY2hhaW4uCisKKzIwMTMvMDUvMjMKK1JlY2VpdmVkIHRoaXMgZml4IGZyb20gSCBKIEx1LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDA3OSAyNTIwMAorIyBOb2RlIElEIGExMGExYzQ2Yjg1N2NjOGEzOTIzYzNiYjZkMTUwNGFhMjViNjA1MmYKKyMgUGFyZW50ICBlNzY2MTQxNDVhZWE2N2Y2NmU0YTQyNTc2ODVjNzcxZWZiYTIxYWExCitUeXBkZWYgbXBfZGlnaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBNUF82NEJJVAorCitXaGVuIEdDQyBpcyB1c2VkIHdpdGggTVBfNjRCSVQsIHdlIHNob3VsZCB0eXBlZGVmIG1wX2RpZ2l0IHRvIHVuc2lnbmVkCitsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZCBsb25nIHNpbmNlIGZvciB4MzIsIHVuc2lnbmVkIGxvbmcgaXMKKzMyLWJpdCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIGlzIDY0LWJpdCBhbmQgaXQgaXMgc2FmZSB0byB1c2UgdW5zaWduZWQKK2xvbmcgbG9uZyBmb3IgNjQtYml0IGludGVnZXIgd2l0aCBHQ0MuCisKK2RpZmYgLXIgZTc2NjE0MTQ1YWVhIC1yIGExMGExYzQ2Yjg1NyBsaWJ0b21tYXRoL3RvbW1hdGguaAorLS0tIGEvbGlidG9tbWF0aC90b21tYXRoLmgJVGh1IEFwciAxOCAyMjo1Nzo0NyAyMDEzICswODAwCisrKysgYi9saWJ0b21tYXRoL3RvbW1hdGguaAlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKK0BAIC03Myw3ICs3Myw3IEBACisgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OworICNlbmRpZgorCistICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfZGlnaXQ7CisrICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbXBfZGlnaXQ7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfd29yZCBfX2F0dHJpYnV0ZV9fICgobW9kZShUSSkpKTsKKworICAgICNkZWZpbmUgRElHSVRfQklUICAgICAgICAgIDYwCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDI0MSAyNTIwMAorIyBOb2RlIElEIGM3NTU1YTRjYjdkZWQzYTg4NDA5YmE4NWY0MDI3YmFhN2FmNWY1MzYKKyMgUGFyZW50ICBhMTBhMWM0NmI4NTdjYzhhMzkyM2MzYmI2ZDE1MDRhYTI1YjYwNTJmCitDYXN0IHRvIG1wX2RpZ2l0IHdoZW4gdXBkYXRpbmcgKnJobworCitUaGVyZSBpcworCitpbnQKK21wX21vbnRnb21lcnlfc2V0dXAgKG1wX2ludCAqIG4sIG1wX2RpZ2l0ICogcmhvKQorCitXZSBzaG91bGQgY2FzdCB0byBtcF9kaWdpdCBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcgd2hlbiB1cGRhdGluZworKnJobyBzaW5jZSBtcF9kaWdpdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBsb25nIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcKK21heSBiZSBkaWZmZXJlbnQgZnJvbSB1bnNpZ25lZCBsb25nLCBsaWtlIGluIHgzMi4KKworZGlmZiAtciBhMTBhMWM0NmI4NTcgLXIgYzc1NTVhNGNiN2RlIGxpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCistLS0gYS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYwlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCVRodSBNYXkgMjMgMTQ6MjQ6MDEgMjAxMyAtMDcwMAorQEAgLTQ4LDcgKzQ4LDcgQEAKKyAjZW5kaWYKKworICAgLyogcmhvID0gLTEvbSBtb2QgYiAqLworLSAgKnJobyA9ICh1bnNpZ25lZCBsb25nKSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworKyAgKnJobyA9IChtcF9kaWdpdCkoKChtcF93b3JkKTEgPDwgKChtcF93b3JkKSBESUdJVF9CSVQpKSAtIHgpICYgTVBfTUFTSzsKKworICAgcmV0dXJuIE1QX09LQVk7CisgfQorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQ1NDEgMjUyMDAKKyMgTm9kZSBJRCA3YzY1NmU3MDcxYTY0MTI2ODhiMmYzMGE1MjlhOWFmYWM2YzdiZjVhCisjIFBhcmVudCAgYzc1NTVhNGNiN2RlZDNhODg0MDliYTg1ZjQwMjdiYWE3YWY1ZjUzNgorRGVmaW5lIExUQ19GQVNUX1RZUEUgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBfX3g4Nl82NF9fCisKK1dlIHNob3VsZCBkZWZpbmUgTFRDX0ZBU1RfVFlQRSB0byB1bnNpZ25lZCBsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZAorbG9uZyBpZiBfX3g4Nl82NF9fIHRvIHN1cHBvcnQgeDMyIHdoZXJlIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyA2NC1iaXQKK2FuZCB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC4KKworZGlmZiAtciBjNzU1NWE0Y2I3ZGUgLXIgN2M2NTZlNzA3MWE2IGxpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCistLS0gYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaAlUaHUgTWF5IDIzIDE0OjI0OjAxIDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorQEAgLTc0LDcgKzc0LDcgQEAKKyAgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKKyAgICAjZGVmaW5lIEVORElBTl82NEJJVFdPUkQKKyAgICAjZGVmaW5lIExUQ19GQVNUCistICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcKKysgICAjZGVmaW5lIExUQ19GQVNUX1RZUEUgICAgdW5zaWduZWQgbG9uZyBsb25nCisgI2VuZGlmCisKKyAvKiBkZXRlY3QgUFBDMzIgKi8KKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0NzMwIDI1MjAwCisjIE5vZGUgSUQgYTdkNDY5MDE1OGZhZTRlZGUyYzRlNWI1NjIzM2U4MzczMGJmMzhlZQorIyBQYXJlbnQgIDdjNjU2ZTcwNzFhNjQxMjY4OGIyZjMwYTUyOWE5YWZhYzZjN2JmNWEKK1VzZSB1bnNpZ25lZCBsb25nIGxvbmcgYWFzIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZvciB4ODYtNjQgR0NDCisKK1dlIHNob3VsZCB1c2UgdW5zaWduZWQgbG9uZyBsb25nIGluc3RlYWQgb2YgdW5zaWduZWQgbG9uZyBhcyB1bnNpZ25lZAorNjQtYml0IGludGVnZXIgZm9yIHg4Ni02NCBHQ0MgdG8gc3VwcG9ydCB4MzIgd2hlcmUgdW5zaWduZWQgbG9uZyBpcworMzItYml0LgorCitkaWZmIC1yIDdjNjU2ZTcwNzFhNiAtciBhN2Q0NjkwMTU4ZmEgbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKKy0tLSBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgJVGh1IE1heSAyMyAxNDozMjoxMCAyMDEzIC0wNzAwCitAQCAtMzQzLDcgKzM0Myw3IEBACisgLyogNjQtYml0IFJvdGF0ZXMgKi8KKyAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKExUQ19OT19BU00pCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST0w2NCh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgaW50IGkpCisgeworICAgIGFzbSgicm9scSAlJWNsLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM1MSw3ICszNTEsNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NCh1bnNpZ25lZCBsb25nIHdvcmQsIGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPUjY0KHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb3JxICUlY2wsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCitAQCAtMzYxLDcgKzM2MSw3IEBACisKKyAjaWZuZGVmIExUQ19OT19ST0xDCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb2xxICUyLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM2OSw3ICszNjksNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorIHsKKyAgICBhc20oInJvcnEgJTIsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlNzg3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyCkBAIC0wLDAgKzEsNCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgIGluY2x1ZGUgIGNvbW1vbi1hdXRoCithY2NvdW50ICBpbmNsdWRlICBjb21tb24tYWNjb3VudApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIuc29ja2V0IGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YzYxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitDb25mbGljdHM9ZHJvcGJlYXIuc2VydmljZQorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKK0Fsc289ZHJvcGJlYXJrZXkuc2VydmljZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhckAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU5OTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TU0ggUGVyLUNvbm5lY3Rpb24gU2VydmVyCitXYW50cz1kcm9wYmVhcmtleS5zZXJ2aWNlCitBZnRlcj1zeXNsb2cudGFyZ2V0IGRyb3BiZWFya2V5LnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9kcm9wYmVhcgorRXhlY1N0YXJ0PS1AU0JJTkRJUkAvZHJvcGJlYXIgLWkgLXIgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJERST1BCRUFSX0VYVFJBX0FSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1N0YW5kYXJkSW5wdXQ9c29ja2V0CitLaWxsTW9kZT1wcm9jZXNzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcmtleS5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJrZXkuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2MyMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJrZXkuc2VydmljZQpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249U1NIIEtleSBHZW5lcmF0aW9uCitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZHJvcGJlYXJrZXkgLXQgcnNhIC1mIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOGZlZDNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdApAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOgkJc3NoZAorIyBSZXF1aXJlZC1TdGFydDoJJHJlbW90ZV9mcyAkc3lzbG9nICRuZXR3b3JraW5nCisjIFJlcXVpcmVkLVN0b3A6CSRyZW1vdGVfZnMgJHN5c2xvZworIyBEZWZhdWx0LVN0YXJ0OgkyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoJCTEKKyMgU2hvcnQtRGVzY3JpcHRpb246CURyb3BiZWFyIFNlY3VyZSBTaGVsbCBzZXJ2ZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIERvIG5vdCBjb25maWd1cmUgdGhpcyBmaWxlLiBFZGl0IC9ldGMvZGVmYXVsdC9kcm9wYmVhciBpbnN0ZWFkIQorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9kcm9wYmVhcgorTkFNRT1kcm9wYmVhcgorREVTQz0iRHJvcGJlYXIgU1NIIHNlcnZlciIKK1BJREZJTEU9L3Zhci9ydW4vZHJvcGJlYXIucGlkCisKK0RST1BCRUFSX1BPUlQ9MjIKK0RST1BCRUFSX0VYVFJBX0FSR1M9CitOT19TVEFSVD0wCisKK3NldCAtZQorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIHx8IC4gL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyCit0ZXN0ICIkTk9fU1RBUlQiID0gIjAiIHx8IGV4aXQgMAordGVzdCAteCAiJERBRU1PTiIgfHwgZXhpdCAwCit0ZXN0ICEgLWggL3Zhci9zZXJ2aWNlL2Ryb3BiZWFyIHx8IGV4aXQgMAorCityZWFkb25seV9yb290ZnM9MAorZm9yIGZsYWcgaW4gYGF3ayAneyBpZiAoJDIgPT0gIi8iKSB7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwvcHJvYy9tb3VudHNgOyBkbworICBjYXNlICRmbGFnIGluCisgICBybykKKyAgICAgcmVhZG9ubHlfcm9vdGZzPTEKKyAgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiBbICRyZWFkb25seV9yb290ZnMgPSAiMSIgXTsgdGhlbgorICBta2RpciAtcCAvdmFyL2xpYi9kcm9wYmVhcgorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IgorICBEUk9QQkVBUl9EU1NLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorZWxzZQorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkiCisgIERST1BCRUFSX0RTU0tFWV9ERUZBVUxUPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIKK2ZpCisKK3Rlc3QgLXogIiREUk9QQkVBUl9CQU5ORVIiIHx8IFwKKyAgRFJPUEJFQVJfRVhUUkFfQVJHUz0iJERST1BCRUFSX0VYVFJBX0FSR1MgLWIgJERST1BCRUFSX0JBTk5FUiIKK3Rlc3QgLW4gIiREUk9QQkVBUl9SU0FLRVkiIHx8IFwKKyAgRFJPUEJFQVJfUlNBS0VZPSREUk9QQkVBUl9SU0FLRVlfREVGQVVMVAordGVzdCAtbiAiJERST1BCRUFSX0RTU0tFWSIgfHwgXAorICBEUk9QQkVBUl9EU1NLRVk9JERST1BCRUFSX0RTU0tFWV9ERUZBVUxUCit0ZXN0IC1uICIkRFJPUEJFQVJfS0VZVFlQRVMiIHx8IFwKKyAgRFJPUEJFQVJfS0VZVFlQRVM9InJzYSIKKworZ2VuX2tleXMoKSB7Citmb3IgdCBpbiAkRFJPUEJFQVJfS0VZVFlQRVM7IGRvCisgIGNhc2UgJHQgaW4KKyAgICByc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9SU0FLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9SU0FLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfUlNBS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZIHx8IGRyb3BiZWFya2V5IC10IHJzYSAtZiAkRFJPUEJFQVJfUlNBS0VZCisJOzsKKyAgICBkc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9EU1NLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9EU1NLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfRFNTS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZIHx8IGRyb3BiZWFya2V5IC10IGRzcyAtZiAkRFJPUEJFQVJfRFNTS0VZCisJOzsKKyAgZXNhYworZG9uZQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKKwlnZW5fa2V5cworCUtFWV9BUkdTPSIiCisJdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLWQgJERST1BCRUFSX0RTU0tFWSIKKwl0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtciAkRFJPUEJFQVJfUlNBS0VZIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIFwKKwkgIC14ICIkREFFTU9OIiAtLSAkS0VZX0FSR1MgXAorCSAgICAtcCAiJERST1BCRUFSX1BPUlQiICREUk9QQkVBUl9FWFRSQV9BUkdTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAiJERBRU1PTiIgLXAgJFBJREZJTEUKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14ICIkREFFTU9OIiAtcCAkUElERklMRQorCXNsZWVwIDEKKwlLRVlfQVJHUz0iIgorCXRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1kICREUk9QQkVBUl9EU1NLRVkiCisJdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLXIgJERST1BCRUFSX1JTQUtFWSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSBcCisJICAteCAiJERBRU1PTiIgLS0gJEtFWV9BUkdTIFwKKwkgICAgLXAgIiREUk9QQkVBUl9QT1JUIiAkRFJPUEJFQVJfRVhUUkFfQVJHUworCWVjaG8gIiROQU1FLiIKKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTUuNjguYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjY4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzQ5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjY4LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBkcm9wYmVhci5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjc2NjRhYzEwZjdjYzIzMDFjNTMwZWI4MGM3NTZmYzVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU1ZWE3YzFlOTA0ZmZlNGIxY2RiZTFhZGRjYTgyOTFhMjUzM2Q3ZDI4NWZkMjJhYzMzNjA4ZTk1MDJhNjI0NDYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9hdXRvdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1OTk2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitBdm9pZCB1c2luZyBleHBhdCdzIG00IGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHNwZWNpZmljIHRvIG91ciBidWlsZCBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK1VwZGF0ZWQgdG8gYXBwbHkgb3ZlciBleHBhdCAyLjEuMAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbiBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4KKy0tLSBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wMy0wNCAwMTo0NTo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wNS0xMCAyMTowNDo0NC4wMDAwMDAwMDAgKzAzMDAKK0BAIC01MSw4ICs1MSw2IEBACisgCisgQUNfQ09ORklHX0hFQURFUihleHBhdF9jb25maWcuaCkKKyAKKy1zaW5jbHVkZShjb25mdG9vbHMvYWNfY19iaWdlbmRpYW5fY3Jvc3MubTQpCistCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZhZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzdHJlYW0tb3JpZW50ZWQgWE1MIHBhcnNlciBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRXhwYXQgaXMgYW4gWE1MIHBhcnNlciBsaWJyYXJ5IHdyaXR0ZW4gaW4gQy4gSXQgaXMgYSBzdHJlYW0tb3JpZW50ZWQgcGFyc2VyIGluIHdoaWNoIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgdGhpbmdzIHRoZSBwYXJzZXIgbWlnaHQgZmluZCBpbiB0aGUgWE1MIGRvY3VtZW50IChsaWtlIHN0YXJ0IHRhZ3MpIgorSE9NRVBBR0UgPSAiaHR0cDovL2V4cGF0LnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZXhwYXQvZXhwYXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgZ3ppcG5hdGl2ZQorCisjIFRoaXMgcGFja2FnZSB1c2VzIGFuIGFyY2hpdmUgZm9ybWF0IGtub3duIHRvIGhhdmUgaXNzdWUgd2l0aCBzb21lCisjIHZlcnNpb25zIG9mIGd6aXAKK2RvX3VucGFja1tkZXBlbmRzXSArPSAiZ3ppcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vY29uZnRvb2xzL2xpYnRvb2wubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTU4NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGV4cGF0LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWI3MWY2ODE3MTNkMTI1NmUxYzIzYjA4OTA5MjA4NzQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZDdkYWI3YTVmZWE5N2QyYTZhNDNmNTExNDQ5YjdjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjM3MDU0NzJmODE2ZGYyMWM4ZjZhYTAyNmRkMTYyYjI4MDgwNjgzOGJiNTViMzQzMmIwZmIxZmNjYTdlYjg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2Rpc2FibGVfamF2YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM1ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvY29uZmlndXJlLmFjCTIwMDYtMTEtMjcgMDk6MDI6MDEuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMJMjAxMS0wMy0xNiAxNjo1NTozNi4xMTEzOTY1NTcgLTA3MDAKK0BAIC0zNiwyNyArMzYsMTUgQEAKKyBndF9KQVZBX0NIT0lDRQorIAorIGd0X0dDSgorLWlmIHRlc3QgLW4gIiRIQVZFX0dDSiIgJiYgdGVzdCAiJEpBVkFfQ0hPSUNFIiA9IHllczsgdGhlbgorLSAgQlVJTERKQVZBRVhFPXllcworLWVsc2UKKyAgIEJVSUxESkFWQUVYRT1ubworLWZpCisgQUNfU1VCU1QoQlVJTERKQVZBRVhFKQorIAorIGd0X0pBVkFFWEVDCisgZ3RfSkFWQUNPTVAoWzEuM10pCisgQUNfQ0hFQ0tfUFJPRyhKQVIsIGphciwgamFyKQorLWlmIHRlc3QgLW4gIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSkFSIiAmJiB0ZXN0ICIkSkFWQV9DSE9JQ0UiICE9IG5vOyB0aGVuCistICBCVUlMREpBVkE9eWVzCistZWxzZQorICAgQlVJTERKQVZBPW5vCistZmkKKyBBQ19TVUJTVChCVUlMREpBVkEpCistaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUVYRUMiICYmIHRlc3QgJEJVSUxESkFWQSA9IHllczsgdGhlbgorLSAgVEVTVEpBVkE9eWVzCistZWxzZQorICAgVEVTVEpBVkE9bm8KKy1maQorIEFDX1NVQlNUKFRFU1RKQVZBKQorIAorIGd0X0NTSEFSUENPTVAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjkzZjViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACisKK1RoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgcmVxdWlyZWQgdmVyc2lvbiBudW1iZXIgZnJvbSAyLjYxIHRvIHRoZSAKK2N1cnJlbnQgMi42NSB2ZXJzaW9uIG9mIGFjbG9jYWwsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgCit3aGVuIHdlIHVwZGF0ZSBhY2xvY2FsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU2OTUyNjA3MyAtMDcwMAorQEAgLTE0OCw3ICsxNDgsNyBAQAorICAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgorLSAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjY1XSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGhseS9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41NzA1MjY5MDQgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHgvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTcyNTI1NzczIC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU3ODM5NDkxNiAtMDcwMAorQEAgLTExLDcgKzExLDcgQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorIFttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHovYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTg2Mzk1NDE2IC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDA2LTExLTI3IDA5OjM0OjMyLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI3OjAxLjEzNTY4MjgwNyAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9leGFtcGxlcy9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAwNi0xMS0yNyAwOToxNjoyMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNjo1Mi41ODkzOTY2ODMgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NjE0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKQEAgLTAsMCArMSwzNDggQEAKKworVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5IG9uIEFDX0dOVV9TT1VSQ0UgaW4KK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4KKworVGhhbmtzIHRvIE1hcmsgSGF0bGUgZm9yIHRoZSB0aW1lbHkgcG9pbnRlcnMgYW5kIGZpeGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTAzLTE2IDIzOjU0OjAxLjcxMTkyMzQ0OCAtMDcwMAorQEAgLTE2LDQzICsxNiw0NyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorKyNBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKysjWworKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCisrIworKyMgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyMgIEFDX1JFUVVJUkUoW0FDX0FJWF0pCisrIyAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorKyMKKysjICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorKyNbLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisrIyNpZm5kZWYgX19FWFRFTlNJT05TX18KKysjIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworKyMjZW5kaWYKKysjI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjI2VuZGlmCisrIyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorKyMjZW5kaWZdKQorKyMgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKysjICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisrIyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisrIyAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKysjIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisrIwkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKysjICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorKyMgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisrIyAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorKyMgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorKyNdKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorK1sKKysgICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorK10pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjE5LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMTEtMDMtMTYgMjM6NTA6MTcuNDcxNTMxODM4IC0wNzAwCitAQCAtMjUsNyArMjUsNyBAQAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgXSkKKyAKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMTEtMDMtMTYgMjM6NTA6MTAuODE0Mzk2NTI5IC0wNzAwCitAQCAtOSw3ICs5LDcgQEAKKyAKKyBBQ19ERUZVTihbZ2xfTUJDSEFSXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIGRubCBUaGUgZm9sbG93aW5nIGxpbmUgaXMgdGhhdCBzbyB0aGUgdXNlciBjYW4gdGVzdCBIQVZFX1dDSEFSX0gKKyAgIGRubCBiZWZvcmUgI2luY2x1ZGUgIm1iY2hhci5oIi4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbd2NoYXIuaF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDA2LTExLTI3IDA5OjE0OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MDowOC4zNTczOTYyNDcgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDA2LTEwLTI0IDEzOjU5OjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDExLTAzLTE2IDIzOjUwOjA0LjM1NTg5MTY3NiAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAgIEFDX0JFRk9SRShbJDBdLCBbZ2xfQVJHUF0pZG5sCisgCisgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkgZG5sIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pIGRubCBuZWVkZWQgZm9yIHB0aHJlYWRfcndsb2NrX3Qgb24gZ2xpYmMgc3lzdGVtcworICAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgIEFDX0FSR19FTkFCTEUodGhyZWFkcywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luMzJ9XSwgW3NwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAxMS0wMy0xNiAyMzo1MzoyOC40ODc2NzEyNjYgLTA3MDAKK0BAIC0xNiw0MyArMTYsNDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy1bCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCistCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCistICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCistCistICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorLVsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKy0jaWZuZGVmIF9fRVhURU5TSU9OU19fCistIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworLSNlbmRpZgorLSNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jZW5kaWYKKy0jaWZuZGVmIF9UQU5ERU1fU09VUkNFCistIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorLSNlbmRpZl0pCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCistICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCistICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCistIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCistCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKy0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCistICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorLSAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorLSAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKysjQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisrI1sKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorKyMKKysjICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysjICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorKyMgIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKysjCisrIyAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKysjWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworKyMjaWZuZGVmIF9fRVhURU5TSU9OU19fCisrIyMgdW5kZWYgX19FWFRFTlNJT05TX18KKysjI2VuZGlmCisrIyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyNlbmRpZgorKyMjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisrIyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjI2VuZGlmXSkKKysjICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCisrIyAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorKyMgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKyMgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisrIyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorKyMJICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCisrIyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKysjICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorKyMgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKysjICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKysjXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorIEFDX0RFRlVOKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLSAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSkKKytbCisrICAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrCisrICAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKytdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAkyMDExLTAzLTE2IDIzOjUyOjA2LjQ3NzQ2MzY3MSAtMDcwMAorQEAgLTkxLDcgKzkxLDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19GTk1BVENIX0dOVV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxmbm1hdGNoLmg+IHRvIGRlY2xhcmUgRk5NX0NBU0VGT0xEIGV0Yy4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgRk5NQVRDSF9IPQorICAgX0FDX0ZVTkNfRk5NQVRDSF9JRihbR05VXSwgW2FjX2N2X2Z1bmNfZm5tYXRjaF9nbnVdLAorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAxMS0wMy0xNiAyMzo1MjoyMi44NzE2NzQ4NDUgLTA3MDAKK0BAIC0xMiw3ICsxMiw3IEBACisgWworIAorICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGdldGRlbGltKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1MoZ2V0ZGVsaW0pCisgICBBQ19DSEVDS19ERUNMU19PTkNFKGdldGRlbGltKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAkyMDExLTAzLTE2IDIzOjUxOjQ5LjgyOTk3MTEwOCAtMDcwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19HRVRMSU5FXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZ2V0bGluZSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19DSEVDS19ERUNMUyhbZ2V0bGluZV0pCisgCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjM2LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDExLTAzLTE2IDIzOjUyOjE4Ljk3MDQ1MDQ4OCAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV0pCisgXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNAkyMDExLTAzLTE2IDIzOjUxOjQwLjg0NDQxMDIxNiAtMDcwMAorQEAgLTksNyArOSw3IEBACisgCisgQUNfREVGVU4oW2dsX01CQ0hBUl0sCisgWworLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBkbmwgVGhlIGZvbGxvd2luZyBsaW5lIGlzIHRoYXQgc28gdGhlIHVzZXIgY2FuIHRlc3QgSEFWRV9XQ0hBUl9ICisgICBkbmwgYmVmb3JlICNpbmNsdWRlICJtYmNoYXIuaCIuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00CTIwMTEtMDMtMTYgMjM6NTI6MTQuNjkxMzk2MDQ1IC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19TVFBDUFldLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RwY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1Moc3RwY3B5KQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHBjcHkgPSBubzsgdGhlbgorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAkyMDExLTAzLTE2IDIzOjUyOjEwLjM1NjY0MTQ1OSAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfU1RQTkNQWV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHBuY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIGRubCBCb3RoIGdsaWJjIGFuZCBBSVggKDQuMy4zLCA1LjEpIGhhdmUgYW4gc3RwbmNweSgpIGZ1bmN0aW9uCisgICBkbmwgZGVjbGFyZWQgaW4gPHN0cmluZy5oPi4gSXRzIHNpZGUgZWZmZWN0cyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MTowOC4yNjAzMjQyMjEgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAxMS0wMy0xNiAyMzo1MTowMi4wMzYwNjEzMTcgLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfRUFSTFldKQorIF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNAkyMDA2LTExLTI3IDA5OjAyOjA1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CTIwMTEtMDMtMTYgMjM6NTA6NTMuNTMzNDc3MTk1IC0wNzAwCitAQCAtMTE2LDcgKzExNiw3IEBACisgICBkbmwgdG8gZ2V0IHRoZW0uCisgCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIG1lbXBjcHkoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVRVUlSRShbQUNfQ19SRVNUUklDVF0pCisgICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmZlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBnZXR0ZXh0LTAuMTcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTR+CTIwMDktMDQtMTcgMTU6MTI6MzAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE3L2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMDktMDQtMTcgMTU6Mzc6MzkuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjY3LDYgKzI2Nyw5IEBACisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgIGZpCisrICAgICAgICAgIGRubCBKdXN0IGxldCB0aGUgY29tcGlsZXIgZmluZCB0aGUgbGlicmFyeSwgdGhlIGNvbXBpbGVyIGFuZCB1c2VyIGFyZSBzbWFydGVyIHRoZW4gdGhpcyBzY3JpcHQKKysgICAgICAgICAgZG5sIHdoZW4gY3Jvc3MgY29tcGlsaW5nIGFuZCB3b3JraW5nIHdpdGggYSByZWxvY2F0ZWQgaW5zdGFsbC4KKysgICAgICAgICAgZm91bmRfZGlyPSIiCisgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtdnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtdnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5ZTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC1ydW50aW1lL2ludGwvTWFrZWZpbGUuaW4JMjAwNi0xMS0yNyAwOTowMjowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgkyMDExLTAzLTE2IDE2OjA0OjQ5LjE3NTQxOTkzMCAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjICAgICdtYWtlJyBkb2VzIHRoZSB3cm9uZyB0aGluZyBpZiBHTlUgZ2V0dGV4dCB3YXMgY29uZmlndXJlZCB3aXRoCisgIyAgICAiLi9jb25maWd1cmUgLS1zcmNkaXI9YHB3ZGAiLCBuYW1lbHkgaXQgZ2V0cyBjb25mdXNlZCBieSB0aGUgLmxvIGFuZCAubGEKKyAjICAgIGZpbGVzIGl0IGZpbmRzIGluIHNyY2RpciA9IC4uLy4uL2dldHRleHQtcnVudGltZS9pbnRsLgorLVZQQVRIID0gJChzcmNkaXIpCisrI1ZQQVRIID0gJChzcmNkaXIpCisgCisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE4ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKKworVGhpcyBwYXRjaCBoYXJkY29kZXMgaW4gdmVyc2lvbiAwLjE3IGZvciB0aGUgR0VUVEVYVF9NQUNST19WRVJTSU9OLAordGhlIHZlcnNpb24gY2hlY2sgaXMgb25seSBwYXJ0IG9mIDAuMTcgYW5kIHdpbGwgbm90IGFmZmVjdCBhbnkgMC4xNi4xCitvcGVyYXRpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvcG8ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI0OjI4Ljk1MzUyMDIzMSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI4OjI1LjQ1NTM5Njg2MiAtMDcwMAorQEAgLTI3LDYgKzI3LDkgQEAKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sIGRlZmluZWQgYnkgYXV0b21ha2UKKyAgIEFDX1JFUVVJUkUoW0FNX05MU10pZG5sCisgCisrICBkbmwgSGFyZGNvZGUgdGhlIE1BQ1JPX1ZFUlNJT04gdG8gMC4xNyBmb3IgZ251dGxzCisrICBBQ19TVUJTVChbR0VUVEVYVF9NQUNST19WRVJTSU9OXSwgWzAuMTddKQorKworICAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyNDoyOC45NTM1MjAyMzEgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyODowNy41NzQzOTUxNDQgLTA3MDAKK0BAIC0xMCw2ICsxMCw5IEBACisgIworICMgT3JpZ2luOiBnZXR0ZXh0LTAuMTYKKyAKKysjIEhhcmRjb2RlIHRoaXMgdmFsdWUgZm9yIGdudXRscyBidWlsZGluZyBhZ2FpbnN0IGdwbHYyIGNvZGUKKytHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisrCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6MjQ6MjguOTUzNTIwMjMxIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI4OjA3LjU3NDM5NTE0NCAtMDcwMAorQEAgLTEwLDYgKzEwLDkgQEAKKyAjCisgIyBPcmlnaW46IGdldHRleHQtMC4xNgorIAorKyMgSGFyZGNvZGUgdGhpcyB2YWx1ZSBmb3IgZ251dGxzIGJ1aWxkaW5nIGFnYWluc3QgZ3BsdjIgY29kZQorK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTcKKysKKyBQQUNLQUdFID0gQFBBQ0tBR0VACisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9saW5rbGliX2Zyb21fMC4xNy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvbGlua2xpYl9mcm9tXzAuMTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyMTA2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvbGlua2xpYl9mcm9tXzAuMTcucGF0Y2gKQEAgLTAsMCArMSw3MjAgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDA2LTExLTI3IDA5OjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMTEtMDMtMTcgMDA6MzY6MDguNzEwODM2NzIwIC0wNzAwCitAQCAtNiwxMiArNiwxNCBAQAorIAorIGRubCBGcm9tIEJydW5vIEhhaWJsZS4KKyAKKy1BQ19QUkVSRVEoMi41MCkKKytBQ19QUkVSRVEoMi41NCkKKyAKKyBkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorIGRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKyBkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorIGRubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorIEFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorQEAgLTI0LDEzICsyNiwxNiBAQAorICAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorICAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeD0iJExJQltdTkFNRVtdX1BSRUZJWCIKKyAgIF0pCisgICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorICAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisgICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIExJQltdTkFNRVtdX1BSRUZJWD0iJGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeCIKKyAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorICAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisgICBIQVZFX0xJQltdTkFNRT15ZXMKK0BAIC00Niw2ICs1MSw4IEBACisgZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisgZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworIGRubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCisrZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCisgQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisgWworICAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKK0BAIC04MiwxNyArODksMjQgQEAKKyAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorICAgICBMSUJbXU5BTUU9CisgICAgIExUTElCW11OQU1FPQorKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CisrCisgICBmaQorICAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisgICBBQ19TVUJTVChbTElCXU5BTUUpCisgICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgIHVuZGVmaW5lKFtOYW1lXSkKKyAgIHVuZGVmaW5lKFtOQU1FXSkKKyBdKQorIAorIGRubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CistZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCistZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytkbmwgICBhY2xfbGliZXh0LAorK2RubCAgIGFjbF9zaGxpYmV4dCwKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgICBhY2xfaGFyZGNvZGVfZGlyZWN0LAorK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorIEFDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorIFsKKyAgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCitAQCAtMTA5LDEyICsxMjMsMTQgQEAKKyAgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgIF0pCisgICB3bD0iJGFjbF9jdl93bCIKKy0gIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCistICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKy0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKy0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKy0gIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCistICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorKyAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCisrICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorICAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKK0BAIC0xMjQsMjAgKzE0MCwyNCBAQAorIGRubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKyBkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisgZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCisrZG5sIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KKyBBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCisrICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCisgICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgIHVzZV9hZGRpdGlvbmFsPXllcworICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgIF0pCistICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCistWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorLSAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorKyAgQUNfTElCX0FSR19XSVRIKFtsaWJdTl9BX01fRVstcHJlZml4XSwKKytbICAtLXdpdGgtbGliXU5fQV9NX0VbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKyBbCisgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCitAQCAtMTU4LDYgKzE3OCw3IEBACisgICBMSUJbXU5BTUU9CisgICBMVExJQltdTkFNRT0KKyAgIElOQ1tdTkFNRT0KKysgIExJQltdTkFNRVtdX1BSRUZJWD0KKyAgIHJwYXRoZGlycz0KKyAgIGx0cnBhdGhkaXJzPQorICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorQEAgLTE5NywyNyArMjE4LDUzIEBACisgICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBzaHJleHQ9CisrICAgICAgICAgIGZpCisgICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgJiYgeyB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiOyB9OyB9OyB0aGVuCistICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorKyAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKysgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCistICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZmkKK0BAIC0yMjcsMjYgKzI3NCw0NCBAQAorICAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAgICAgICAmJiB7IHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmRsbC5hIjsgfTsgfTsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS5kbGwuYSIKKy0gICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorLSAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgIDs7CitAQCAtMjgyLDEyICszNDcsMTIgQEAKKyAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCistICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorQEAgLTMxOCwxMyArMzgzLDEzIEBACisgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KK0BAIC01MTIsMTggKzU3NywxOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisgICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorICAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorICAgICAgIGFsbGRpcnM9CisgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgIGRvbmUKKy0gICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBkbmwgTm90ZTogYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCistICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgIGVsc2UKK0BAIC01MzEsNyArNTk2LDcgQEAKKyAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCistICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICAgICBkb25lCitAQCAtNjQyLDMgKzcwNyw3OSBAQAorICAgZmkKKyAgIEFDX1NVQlNUKFskMV0pCisgXSkKKysKKytkbmwgRm9yIHRob3NlIGNhc2VzIHdoZXJlIGEgdmFyaWFibGUgY29udGFpbnMgc2V2ZXJhbCAtTCBhbmQgLWwgb3B0aW9ucworK2RubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCisrZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorK2RubCBBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCUyhbTERBRERWQVJdLCBbTElCU1ZBTFVFXSwgW1VTRS1MSUJUT09MXSkKKytkbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCisrZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCisrZG5sIG90aGVyd2lzZSBsaW5raW5nIHdpdGhvdXQgbGlidG9vbCBpcyBhc3N1bWVkLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKysgICQxPQorKyAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICBkbmwgYmluYXJ5LgorKyAgICAgIHJwYXRoZGlycz0KKysgICAgICBuZXh0PQorKyAgICAgIGZvciBvcHQgaW4gJDI7IGRvCisrICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KKysgICAgICAgICAgZGlyPSIkbmV4dCIKKysgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKysgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgICAgbmV4dD0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgY2FzZSAkb3B0IGluCisrICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7CisrICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorKyAgICAgICAgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisrICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgIG5leHQ9IDs7CisrICAgICAgICAgICAgKikgbmV4dD0gOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiIiQzIiI7IHRoZW4KKysgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisrICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfS1SJGRpciIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgVGhlIGxpbmtlciBpcyB1c2VkIGZvciBsaW5raW5nIGRpcmVjdGx5LgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlcgorKyAgICAgICAgICAgIGRubCBtdXN0IHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4KKysgICAgICAgICAgICBhbGxkaXJzPQorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZGlyIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgICAgICAkMT0iJGZsYWciCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGxpYmRpcj0iJGRpciIKKysgICAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfSRmbGFnIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrICBBQ19TVUJTVChbJDFdKQorK10pCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvY29uZmlnLnJwYXRoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAwNi0xMS0yNyAwOTowMTo1OC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAxMS0wMy0xNyAwMDozMzoyMy4zMzY1Mzk0OTAgLTA3MDAKK0BAIC0yLDcgKzIsNyBAQAorICMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisgIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisgIworLSMgICBDb3B5cmlnaHQgMTk5Ni0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisgIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgIworQEAgLTQ3LDYgKzQ3LDE4IEBACisgZG9uZQorIGNjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorKworK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworKyAgY2FzZSAkY2NfdGVtcCBpbgorKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisrICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisrICAgIFwtKikgOzsKKysgICAgKikgYnJlYWs7OworKyAgZXNhYworK2RvbmUKKytjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisrCisgIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisgCisgd2w9CitAQCAtNjQsNyArNzYsMTQgQEAKKyAgICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKy0gICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorKyAgICBkYXJ3aW4qKQorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICB4bGMqKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICA7OworICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgICB3bD0nLVdsLCcKK0BAIC03NCw3ICs5Myw3IEBACisgICAgICAgOzsKKyAgICAgbmV3c29zNikKKyAgICAgICA7OworLSAgICBsaW51eCopCisrICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICAgICB3bD0nLVdsLCcKK0BAIC0xMDAsNyArMTE5LDcgQEAKKyAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CistICAgIHNjbzMuMnY1KikKKysgICAgcmRvcyopCisgICAgICAgOzsKKyAgICAgc29sYXJpcyopCisgICAgICAgd2w9Jy1XbCwnCitAQCAtMTA4LDExICsxMjcsMTQgQEAKKyAgICAgc3Vub3M0KikKKyAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgIDs7CistICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CisgICAgIHN5c3Y0Kk1QKikKKyAgICAgICA7OworKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisgICAgIHVuaWNvcyopCisgICAgICAgd2w9Jy1XbCwnCisgICAgICAgOzsKK0BAIC0xNDEsNiArMTYzLDEwIEBACisgICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgIHdpdGhfZ251X2xkPXllcworICAgICA7OworKyAgaW50ZXJpeCopCisrICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisrICAgIHdpdGhfZ251X2xkPXllcworKyAgICA7OworICAgb3BlbmJzZCopCisgICAgIHdpdGhfZ251X2xkPW5vCisgICAgIDs7CitAQCAtMTg5LDExICsyMTUsMTEgQEAKKyAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgIGZpCisgICAgICAgOzsKKy0gICAgaW50ZXJpeDMqKQorKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgOzsKKy0gICAgbGludXgqKQorKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIDoKKyAgICAgICBlbHNlCitAQCAtMjgwLDcgKzMwNiw3IEBACisgICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCistICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKK0BAIC0zNTksNyArMzg1LDcgQEAKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICA7OworLSAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICA7OworQEAgLTQxMiwxOCArNDM4LDIyIEBACisgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgOzsKKyAgICAgb3BlbmJzZCopCistICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisrICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCisrICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorICAgICAgIDs7CisgICAgIG9zMiopCitAQCAtNDcxLDcgKzUwMSw3IEBACisgICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICAgZmkKKyAgICAgICA7OworLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KikKKysgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgIDs7CisgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCitAQCAtNDg4LDMzICs1MTgsNTEgQEAKKyAKKyAjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworICMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKysjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisrIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKysjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCisrbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorIGxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCisgY2FzZSAiJGhvc3Rfb3MiIGluCisgICBhaXgzKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYWl4NCogfCBhaXg1KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBhbWlnYW9zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYmVvcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgYnNkaVs0NV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgc2hyZXh0PS5kbGwKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgIDs7CisgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICBzaHJleHQ9LmR5bGliCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZGd1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZnJlZWJzZDEqKQorICAgICA7OworLSAga2ZyZWVic2QqLWdudSkKKy0gICAgOzsKKyAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKysgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgZnJlZWJzZFsxMjNdKikKKysgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKysgICAgICAqKQorKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKyAgIGdudSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgIGNhc2UgJGhvc3RfY3B1IGluCitAQCAtNTI4LDEwICs1NzYsMTMgQEAKKyAgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CistICBpbnRlcml4MyopCisrICBpbnRlcml4WzMtOV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorQEAgLTU0OCwzMyArNTk5LDQ2IEBACisgICAgIDs7CisgICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgICA7OworLSAgbGludXgqKQorKyAgbGludXgqIHwgaypic2QqLWdudSkKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBrbmV0YnNkKi1nbnUpCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgbmV0YnNkKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBuZXdzb3M2KQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG50by1xbngqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG9wZW5ic2QqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgIDs7CisgICBvczIqKQorICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgICBzaHJleHQ9LmRsbAorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgIDs7CisgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc29sYXJpcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3Vub3M0KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgICA7OworICAgc3lzdjQgfCBzeXN2NC4zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzeXN2NCpNUCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgdXRzNCopCisgICAgIDs7CitAQCAtNTgzLDYgKzY0Nyw4IEBACisgc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKyBlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKytlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyBlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorIAorIExDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorQEAgLTU5Niw2ICs2NjIsMTIgQEAKKyAjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCisgc2hsaWJleHQ9IiRzaGxpYmV4dCIKKyAKKysjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorKworKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorKworICMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTkuNC9wYXJhbGxlbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjQvcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMmM5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjQvcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAoraW5zdGFsIGxpYmdldHRleHRsaWIuYSBiZWZvcmUgcmVtb3ZpbmcgaXQKKworSW4gYSBtdWx0aXBsZSBqb2IgYnVpbGQsIE1ha2VmaWxlIGNhbiBzaW11bHRhbmVvdXNseQorYmUgaW5zdGFsbGluZyBhbmQgcmVtb3ZpbmcgbGliZ2V0dGV4dGxpYi5hLiAgV2Ugc2VyaWFsaXplCit0aGUgb3BlcmF0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZ2V0dGV4dC10b29scy9nbnVsaWItbGliL01ha2VmaWxlLmFtCisrKysgYi9nZXR0ZXh0LXRvb2xzL2dudWxpYi1saWIvTWFrZWZpbGUuYW0KK0BAIC01Nyw2ICs1NywxMCBAQCBlbmRpZgorICMgUnVsZXMgZ2VuZXJhdGVkIGFuZCBjb2xsZWN0ZWQgYnkgZ251bGliLXRvb2wuCisgaW5jbHVkZSBNYWtlZmlsZS5nbnVsaWIKKyAKKysjIGRlZmluZWQgaW4gTWFrZWZpbGUuZ251bGliIGJ1dCBtaXNzaW5nIHRoaXMgZGVwZW5kZW5jeQorKyMKKytpbnN0YWxsLWV4ZWMtY2xlYW46IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKysKKyAjIFdoaWNoIGNsYXNzZXMgdG8gZXhwb3J0IGZyb20gdGhlIHNoYXJlZCBsaWJyYXJ5LgorIE1PT1BQRkxBR1MgKz0gLS1kbGxleHBvcnQ9c3R5bGVkX29zdHJlYW0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWYyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1tQQVRDSF0gRGlzYWJsZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCB0aGUgZGVwZW5kZW5jZSB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGUtbmF0aXZlIGJ1aWxkaW5nIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGljb252Lm00IHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2ljb252Lm00IGIvaWNvbnYubTQKK2luZGV4IDRlMzczNjMuLjM1ZjU0YmQgMTAwNjQ0CistLS0gYS9pY29udi5tNAorKysrIGIvaWNvbnYubTQKK0BAIC0xNjUsNiArMTY1LDcgQEAgQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKysjaWYgMAorICAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgICBwcm92aWRlZC4gICovCisgICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCitAQCAtMTc2LDYgKzE3Nyw3IEBAIEFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyBdXSldLAorICAgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLCAsCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMWQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HCkBAIC0wLDAgKzEsNCBAQAorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4gYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwNmJhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgpAQCAtMCwwICsxLDQ2NSBAQAorIyBNYWtlZmlsZSBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDA3LCAyMDA5LTIwMTAgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE5CitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE5CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorCitTRUQgPSBAU0VEQAorU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworTUtESVJfUCA9IEBNS0RJUl9QQAorCitHTVNHRk1UXyA9IEBHTVNHRk1UQAorR01TR0ZNVF9ubyA9IEBHTVNHRk1UQAorR01TR0ZNVF95ZXMgPSBAR01TR0ZNVF8wMTVACitHTVNHRk1UID0gJChHTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorTVNHRk1UXyA9IEBNU0dGTVRACitNU0dGTVRfbm8gPSBATVNHRk1UQAorTVNHRk1UX3llcyA9IEBNU0dGTVRfMDE1QAorTVNHRk1UID0gJChNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitYR0VUVEVYVF8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF9ubyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX3llcyA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVCA9ICQoWEdFVFRFWFRfJChVU0VfTVNHQ1RYVCkpCitNU0dNRVJHRSA9IG1zZ21lcmdlCitNU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCitNU0dJTklUID0gbXNnaW5pdAorTVNHQ09OViA9IG1zZ2NvbnYKK01TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgorCitQT0ZJTEVTID0gQFBPRklMRVNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK1VQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKK0RVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCiskKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQorRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiBcCiskKFBPRklMRVMpICQoR01PRklMRVMpIFwKKyQoRElTVEZJTEVTLmV4dHJhMSkgJChESVNURklMRVMuZXh0cmEyKSAkKERJU1RGSUxFUy5leHRyYTMpCisKK1BPVEZJTEVTID0gXAorCitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKKworUE9GSUxFU0RFUFNfID0gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKK1BPRklMRVNERVBTX3llcyA9ICQoUE9GSUxFU0RFUFNfKQorUE9GSUxFU0RFUFNfbm8gPQorUE9GSUxFU0RFUFMgPSAkKFBPRklMRVNERVBTXyQoUE9fREVQRU5EU19PTl9QT1QpKQorCitESVNURklMRVNERVBTXyA9IHVwZGF0ZS1wbworRElTVEZJTEVTREVQU195ZXMgPSAkKERJU1RGSUxFU0RFUFNfKQorRElTVEZJTEVTREVQU19ubyA9CitESVNURklMRVNERVBTID0gJChESVNURklMRVNERVBTXyQoRElTVF9ERVBFTkRTX09OX1VQREFURV9QTykpCisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJQGVjaG8gIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCI7IFwKKwkkKE1TR0ZNVCkgLWMgLW8gdC0kQCAkPCAmJiBtdiB0LSRAICRACisKKy5wby5nbW86CisJQGxhbmc9YGVjaG8gJCogfCBzZWQgLWUgJ3MsLiovLCwnYDsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfXJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IHN0YW1wLXBvCithbGwtbm86CisKKyMgRW5zdXJlIHRoYXQgdGhlIGdldHRleHQgbWFjcm9zIGFuZCB0aGlzIE1ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorQ0hFQ0tfTUFDUk9fVkVSU0lPTiA9IFwKKwl0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCisJICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCisJICAgICAgIGV4aXQgMTsgXAorCSAgICAgfQorCisjICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubworIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQorIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0CisjIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KKyMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUAkKENIRUNLX01BQ1JPX1ZFUlNJT04pCisJdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IFwKKwkgIHRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCisJQHRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCB7IFwKKwkgIGVjaG8gInRvdWNoIHN0YW1wLXBvIiAmJiBcCisJICBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVCAmJiBcCisJICBtdiBzdGFtcC1wb1Qgc3RhbXAtcG87IFwKKwl9CisKKyMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKKyMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCisjIGhhdmUgYmVlbiBkb3dubG9hZGVkLgorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCisjIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorIyBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHRoZSBwYWNrYWdlIHh5eiBpcyBhIEdOVSBvbmUgaXMgYmFzZWQgb24gdGhlCisjIGhldXJpc3RpYyB3aGV0aGVyIHNvbWUgZmlsZSBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBtZW50aW9ucyAiR05VIHh5eiIuCisjIElmIEdOVSAnZmluZCcgaXMgYXZhaWxhYmxlLCB3ZSBhdm9pZCBncmVwcGluZyB0aHJvdWdoIG1vbnN0ZXIgZmlsZXMuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChQT1RGSUxFUykgJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlwYWNrYWdlX2dudT0iJChQQUNLQUdFX0dOVSkiOyBcCisJdGVzdCAtbiAiJCRwYWNrYWdlX2dudSIgfHwgeyBcCisJICBpZiB7IGlmIChMQ19BTEw9QyBmaW5kIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuIFwKKwkJIExDX0FMTD1DIGZpbmQgLUwgJCh0b3Bfc3JjZGlyKSAtbWF4ZGVwdGggMSAtdHlwZSBmIFwKKwkJCSAgICAgICAtc2l6ZSAtMTAwMDAwMDBjIC1leGVjIGdyZXAgJ0dOVSBAUEFDS0FHRUAnIFwKKwkJCSAgICAgICAvZGV2L251bGwgJ3t9JyAnOycgMj4vZGV2L251bGw7IFwKKwkgICAgICAgZWxzZSBcCisJCSBMQ19BTEw9QyBncmVwICdHTlUgQFBBQ0tBR0VAJyAkKHRvcF9zcmNkaXIpLyogMj4vZGV2L251bGw7IFwKKwkgICAgICAgZmk7IFwKKwkgICAgIH0gfCBncmVwIC12ICdsaWJ0b29sOicgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICBwYWNrYWdlX2dudT15ZXM7IFwKKwkgICBlbHNlIFwKKwkgICAgIHBhY2thZ2VfZ251PW5vOyBcCisJICAgZmk7IFwKKwl9OyBcCisJaWYgdGVzdCAiJCRwYWNrYWdlX2dudSIgPSAieWVzIjsgdGhlbiBcCisJICBwYWNrYWdlX3ByZWZpeD0nR05VICc7IFwKKwllbHNlIFwKKwkgIHBhY2thZ2VfcHJlZml4PScnOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1uICckKE1TR0lEX0JVR1NfQUREUkVTUyknIHx8IHRlc3QgJyQoUEFDS0FHRV9CVUdSRVBPUlQpJyA9ICdAJ1BBQ0tBR0VfQlVHUkVQT1JUJ0AnOyB0aGVuIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChNU0dJRF9CVUdTX0FERFJFU1MpJzsgXAorCWVsc2UgXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKFBBQ0tBR0VfQlVHUkVQT1JUKSc7IFwKKwlmaTsgXAorCWNhc2UgYCQoWEdFVFRFWFQpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNV0gfCAwLjFbMC01XS4qIHwgMC4xNiB8IDAuMTYuWzAtMV0qKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwkgICopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLXBhY2thZ2UtbmFtZT0iJCR7cGFja2FnZV9wcmVmaXh9QFBBQ0tBR0VAIiBcCisJICAgICAgLS1wYWNrYWdlLXZlcnNpb249J0BWRVJTSU9OQCcgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJZXNhYworCXRlc3QgISAtZiAkKERPTUFJTikucG8gfHwgeyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKHNyY2RpcikvJChET01BSU4pLnBvdCA+ICQoRE9NQUlOKS4xcG8gJiYgXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoRE9NQUlOKS5wbyA+ICQoRE9NQUlOKS4ycG8gJiYgXAorCSAgICBpZiBjbXAgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoRE9NQUlOKS5wbzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgJiYgXAorCSAgICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgZmk7IFwKKwl9CisKKyMgVGhpcyBydWxlIGhhcyBubyBkZXBlbmRlbmNpZXM6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlICQoRE9NQUlOKS5wb3QgYXQKKyMgZXZlcnkgIm1ha2UiIGludm9jYXRpb24sIG9ubHkgY3JlYXRlIGl0IHdoZW4gaXQgaXMgbWlzc2luZy4KKyMgT25seSAibWFrZSAkKERPTUFJTikucG90LXVwZGF0ZSIgb3IgIm1ha2UgZGlzdCIgd2lsbCBmb3JjZSBhbiB1cGRhdGUuCiskKHNyY2RpcikvJChET01BSU4pLnBvdDoKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgYSBQTyBmaWxlIGlmICQoRE9NQUlOKS5wb3QgaGFzIGNoYW5nZWQuCisjIE5vdGUgdGhhdCBhIFBPIGZpbGUgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKFBPRklMRVMpOiAkKFBPRklMRVNERVBTKQorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzLC4qLywsJyAtZSAncy9cLnBvJCQvLydgOyBcCisJaWYgdGVzdCAtZiAiJChzcmNkaXIpLyQke2xhbmd9LnBvIjsgdGhlbiBcCisJICB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8ICQoTUFLRSkgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQke2xhbmd9ICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCisJICBjZCAkKHNyY2RpcikgXAorCSAgICAmJiB7IGNhc2UgYCQoTVNHTUVSR0VfVVBEQVRFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgICAgKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICBlc2FjOyBcCisJICAgICAgIH07IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwl0ZXN0IC16ICIkKERJU1RGSUxFU0RFUFMpIiB8fCAkKE1BS0UpICQoRElTVEZJTEVTREVQUykKKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwordXBkYXRlLXBvOiBNYWtlZmlsZQorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKwl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKKwkkKE1BS0UpIHVwZGF0ZS1nbW8KKworIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLWNyZWF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAorCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCisJZXhpdCAxCisKKyMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby11cGRhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiB7IGNhc2UgYCQoTVNHTUVSR0UpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgICAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC03XSB8IDAuMVswLTddLiopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgIGVzYWM7IFwKKwkgICB9OyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworJChEVU1NWVBPRklMRVMpOgorCit1cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQorCUA6CisKKyMgUmVjcmVhdGUgTWFrZWZpbGUgYnkgaW52b2tpbmcgY29uZmlnLnN0YXR1cy4gRXhwbGljaXRseSBpbnZva2UgdGhlIHNoZWxsLAorIyBiZWNhdXNlIGV4ZWN1dGlvbiBwZXJtaXNzaW9uIGJpdHMgbWF5IG5vdCB3b3JrIG9uIHRoZSBjdXJyZW50IGZpbGUgc3lzdGVtLgorIyBVc2UgQFNIRUxMQCwgd2hpY2ggaXMgdGhlIHNoZWxsIGRldGVybWluZWQgYnkgYXV0b2NvbmYgZm9yIHRoZSB1c2UgYnkgaXRzCisjIHNjcmlwdHMsIG5vdCAkKFNIRUxMKSB3aGljaCBpcyBoYXJkd2lyZWQgdG8gL2Jpbi9zaCBhbmQgbWF5IGJlIGRlZmljaWVudC4KK01ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiBNYWtldmFycyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmIEBTSEVMTEAgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQC5pbiBwby1kaXJlY3RvcmllcworCitmb3JjZToKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6IGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGJhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjYyNTYyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGgKQEAgLTAsMCArMSw2ODQgQEAKKyMhIC9iaW4vc2gKKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKyMKKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjICAgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjICAgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvcgorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDQywgR0NDLCBMREZMQUdTLCBMRCwgd2l0aF9nbnVfbGQKKyMgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyLgorIworIyBUaGUgc2V0IG9mIGRlZmluZWQgdmFyaWFibGVzIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBzY3JpcHQuCisKKyMgS25vd24gbGltaXRhdGlvbnM6CisjIC0gT24gSVJJWCA2LjUgd2l0aCBDQz0iY2MiLCB0aGUgcnVuIHRpbWUgc2VhcmNoIHBhdGNoIG11c3Qgbm90IGJlIGxvbmdlcgorIyAgIHRoYW4gMjU2IGJ5dGVzLCBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGR1bXAgY29yZS4gVGhlIG9ubHkKKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisjICAgZGlyZWN0b3J5IGFuZC9vciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorc2hyZXh0PS5zbworCitob3N0PSIkMSIKK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorCitmb3IgY2NfdGVtcCBpbiAkQ0MiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DT01QSUxFUl9QSUMuCisKK3dsPQoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgd2w9Jy1XbCwnCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIDs7CisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBlY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGljYyogfCBpZm9ydCopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbGY5NSopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbmFnZm9yKikKKyAgICAgICAgICB3bD0nLVdsLC1XbCwsJworICAgICAgICAgIDs7CisgICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjb21vKQorICAgICAgICAgIHdsPSctbG9wdD0nCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgICAgICAgICAgICpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKyAgICAgICAgICAgICAgd2w9CisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqU3VuXCBDKikKKyAgICAgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICByZG9zKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgICAgICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0xJTktFUl9TSExJQlMuCisKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQoraGFyZGNvZGVfZGlyZWN0PW5vCitoYXJkY29kZV9taW51c19MPW5vCisKK2Nhc2UgIiRob3N0X29zIiBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAjIFVubGlrZSBsaWJ0b29sLCB3ZSB1c2UgLXJwYXRoIGhlcmUsIG5vdCAtLXJwYXRoLCBzaW5jZSB0aGUgZG9jdW1lbnRlZAorICAjIG9wdGlvbiBvZiBHTlUgbGQgaXMgY2FsbGVkIC1ycGF0aCwgbm90IC0tcnBhdGguCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4WzMtOV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgIGVsc2UKKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHsgY2FzZSAkY2NfYmFzZW5hbWUgaW4gaWZvcnQqKSB0cnVlOzsgKikgdGVzdCAiJEdDQyIgPSB5ZXM7OyBlc2FjOyB9OyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgZnJlZWJzZDIuWzAxXSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX1NZU19EWU5BTUlDX0xJTktFUi4KKyMgVW5saWtlIGxpYnRvb2wubTQsIGhlcmUgd2UgZG9uJ3QgY2FyZSBhYm91dCBfYWxsXyBuYW1lcyBvZiB0aGUgbGlicmFyeSwgYnV0CisjIG9ubHkgYWJvdXQgdGhlIG9uZSB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4gVGhpcyBpcyB0aGUgbGFzdAorIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKyMgbGlua2VyIGhhcyBzcGVjaWFsIHNlYXJjaCBydWxlcy4KK2xpYnJhcnlfbmFtZXNfc3BlYz0gICAgICAjIHRoZSBsYXN0IGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQKK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgYWl4MyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIGFpeFs0LTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICBwb3dlcnBjKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisgICAgICBtNjhrKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnIDs7CisgICAgZXNhYworICAgIDs7CisgIGJlb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGJzZGlbNDVdKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKKyAgICA7OworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIHNocmV4dD0uZHlsaWIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBkZ3V4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBmcmVlYnNkWzIzXS4qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBoYWlrdSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGlhNjQqKQorICAgICAgICBzaHJleHQ9LnNvCisgICAgICAgIDs7CisgICAgICBocHBhKjY0KikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpbnRlcml4WzMtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBjYXNlICRMRCBpbgorICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICAqbnRvKiB8ICpxbngqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBvczIqKQorICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHJkb3MqKQorICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN1bm9zNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHRwZiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdXRzNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKK2VzYWMKKworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKK2VzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK3NobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCitlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjPWBlY2hvICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKworTENfQUxMPUMgc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIkZXNjYXBlZF93bCIKKworIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KK3NobGliZXh0PSIkc2hsaWJleHQiCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9IiRlc2NhcGVkX2xpYm5hbWVfc3BlYyIKKworIyBMaWJyYXJ5IG5hbWVzIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9IiRlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYyIKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKworRU9GCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9yZW1vdmUtcG90Y2RhdGUuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0YTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJNaW5pbWFsIGdldHRleHQgZm9yIHN1cHBvcnRpbmcgbmF0aXZlIGF1dG9jb25mL2F1dG9tYWtlIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIG00IG1hY3JvcyBzdWZmaWNpZW50IHRvIHN1cHBvcnQgYnVpbGRpbmcgXAorYXV0b2NvbmYvYXV0b21ha2UuIFRoaXMgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBidWlsZCB0aW1lIHNwZWVkdXAgYnkgXAordGhlIHJlbW92YWwgb2YgZ2V0dGV4dC1uYXRpdmUgZnJvbSBtb3N0IGRlcGVuZGVuY3kgY2hhaW5zIChub3cgb25seSBcCituZWVkZWQgZm9yIGdldHRleHQgZm9yIHRoZSB0YXJnZXQpLiIKK1NSQ19VUkkgPSAiZmlsZTovL2FjbG9jYWwudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy5ycGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcG90Y2RhdGUuc2luIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworTElDRU5TRSA9ICJGU0YtVW5saW1pdGVkIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIyMDY3NWNkNTE1ODQ0MmY2MDA3ZDAyMmY0NmIzNWIiCisKK2luaGVyaXQgbmF0aXZlCisKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJY3AgJHtXT1JLRElSfS8qLm00ICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vY29uZmlnLnJwYXRoICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvCisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZS5pbi5pbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vcmVtb3ZlLXBvdGNkYXRlLnNpbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTYuMS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmN2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKQEAgLTAsMCArMSwxMDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzIgorREVTQ1JJUFRJT04gPSAiR05VIGdldHRleHQgaXMgYSBzZXQgb2YgdG9vbHMgdGhhdCBwcm92aWRlcyBhIGZyYW1ld29yayB0byBoZWxwIG90aGVyIHByb2dyYW1zIHByb2R1Y2UgbXVsdGktbGluZ3VhbCBtZXNzYWdlcy4gVGhlc2UgdG9vbHMgaW5jbHVkZSBhIHNldCBvZiBjb252ZW50aW9ucyBhYm91dCBob3cgcHJvZ3JhbXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gc3VwcG9ydCBtZXNzYWdlIGNhdGFsb2dzLCBhIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1pbmcgb3JnYW5pemF0aW9uIGZvciB0aGUgbWVzc2FnZSBjYXRhbG9ncyB0aGVtc2VsdmVzLCBhIHJ1bnRpbWUgbGlicmFyeSBzdXBwb3J0aW5nIHRoZSByZXRyaWV2YWwgb2YgdHJhbnNsYXRlZCBtZXNzYWdlcywgYW5kIGEgZmV3IHN0YW5kLWFsb25lIHByb2dyYW1zIHRvIG1hc3NhZ2UgaW4gdmFyaW91cyB3YXlzIHRoZSBzZXRzIG9mIHRyYW5zbGF0YWJsZSBhbmQgYWxyZWFkeSB0cmFuc2xhdGVkIHN0cmluZ3MuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvZ2V0dGV4dC5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTllYTMxNDRmMDRjNDFjZDJlYWRhNWQzZjQ3MmU2ZWE1IgorCitQUiA9ICJyNiIKK0RFUEVORFMgPSAidmlydHVhbC9saWJpY29udiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2dldHRleHQiCitQUk9WSURFU19jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LXZwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIFwKKwkgICBmaWxlOi8vZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfamF2YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICIKKworTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZDlhZDI0MzAxYzZkNmIxN2VjMzA3MDRhMTNmZTEyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmY4NTBkMWEwNzlmYjVhNjFmMGE0N2IxYTllZmQzNWViNDQwMzIyNTUzNzVlMWNlZGIwMjUzYmMyN2IzNzZkIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwIC0tZGlzYWJsZS1jc2hhcnAgLS1kaXNhYmxlLW9wZW5tcCAtLXdpdGhvdXQtZW1hY3MiCithY3BhdGhzID0gJy1JICR7U30vYXV0b2NvbmYtbGliLWxpbmsvbTQvIFwKKyAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXJtIC1mICR7U30vY29uZmlnL200L2xpYnRvb2wubTQKK30KKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiBnZXR0ZXh0LXJ1bnRpbWUtZG9jIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0RFVn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2luY2x1ZGVkaXJ9L2F1dG9zcHJpbnRmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0xJQkRFVn0iCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbworfQorCisjIEFueW9uZSBpbmhlcml0aW5nIGdldHRleHQgd2lsbCBoYXZlIGJvdGggZ2V0dGV4dC1uYXRpdmUgYW5kIGdldHRleHQKKyMgYXZhaWxhYmxlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byB1c2Ugb2xkZXIgbWFjcm9zIGZyb20gdGhlIHRhcmdldCBnZXR0ZXh0IGluCisjIGEgbm9uLWdwbHYzIGJ1aWxkLCBzbyBraWxsIHRoZW0gYW5kIGxldCBkZXBlbmRlbnQgcmVjaXBlcyByZWx5IG9uCisjIGdldHRleHQtbmF0aXZlLgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInJlbW92ZV9zeXNyb290X200X21hY3JvcyIKKworcmVtb3ZlX3N5c3Jvb3RfbTRfbWFjcm9zICgpIHsKKyAgICBybSAtciAiJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsIgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS40LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJmNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNC5iYgpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMiCitERVNDUklQVElPTiA9ICJHTlUgZ2V0dGV4dCBpcyBhIHNldCBvZiB0b29scyB0aGF0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIHRvIGhlbHAgb3RoZXIgcHJvZ3JhbXMgcHJvZHVjZSBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzLiBUaGVzZSB0b29scyBpbmNsdWRlIGEgc2V0IG9mIGNvbnZlbnRpb25zIGFib3V0IGhvdyBwcm9ncmFtcyBzaG91bGQgYmUgd3JpdHRlbiB0byBzdXBwb3J0IG1lc3NhZ2UgY2F0YWxvZ3MsIGEgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWluZyBvcmdhbml6YXRpb24gZm9yIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHRoZW1zZWx2ZXMsIGEgcnVudGltZSBsaWJyYXJ5IHN1cHBvcnRpbmcgdGhlIHJldHJpZXZhbCBvZiB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBhbmQgYSBmZXcgc3RhbmQtYWxvbmUgcHJvZ3JhbXMgdG8gbWFzc2FnZSBpbiB2YXJpb3VzIHdheXMgdGhlIHNldHMgb2YgdHJhbnNsYXRhYmxlIGFuZCBhbHJlYWR5IHRyYW5zbGF0ZWQgc3RyaW5ncy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9nZXR0ZXh0Lmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEwtMi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgZXhwYXQiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorUFJPVklERVMgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvZ2V0dGV4dCIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICJ2aXJ0dWFsL2dldHRleHQtbmF0aXZlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJwcm94eS1saWJpbnRsIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dldHRleHQvZ2V0dGV4dC0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW21zZ2NhdC1jdXJzZXNdID0gIi0td2l0aC1saWJuY3Vyc2VzLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfS8uLiwtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKKworU1JDX1VSSVttZDVzdW1dID0gImQzNTExYWYxZTYwNGEzNDc4OTAwZDJjMmI0YTRhNDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhYzlmMWVkMWE1ZjhjNGU2NTZhMmYzN2Y1YmE2YjllZTA0YzRkZjc5YTU3NWU4NzZiMGI2OTQ2YWE0MTdmM2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcGRpciBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jc2hhcnAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXNwcmludGYgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uYXRpdmUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1vcGVubXAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtYWNsIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWdsaWIgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZW1hY3MgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWdpdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ4bWwgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGliY3JvY28gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidW5pc3RyaW5nIFwKKyAgICAgICAgICAgICAgICAiCisKK2FjcGF0aHMgPSAnLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLWRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKKworRklMRVNfZ2V0dGV4dC1ydW50aW1lID0gIiR7YmluZGlyfS9nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmdldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9lbnZzdWJzdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dldHRleHQuc2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50Zi5zbyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEgXAorICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vYXV0b3NwcmludGYuaCBcCisgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L2NvbmZpZy5ycGF0aAorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4KKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTE5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA0MTUzNDI1M2I2YjYxZWQ0NzY5ZWI2YTM5NjY2OThhNTBlZTczYjcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEyIEp1biAyMDE1IDE3OjA4OjQ2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSB0aGUgd2FybmluZyBhYm91dCBkZXByZWNhdGVkIHBhdGhzIGluIHNjaGVtYXMKKworU29tZSBzY2hlbWFzIGluIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgKHN1Y2ggYXMgcHJveHkgYW5kIGxvY2FsZSkKK2FyZSBzdGlsbCB1c2luZyBkZXByZWNhdGVkIHBhdGhzLCBhcyBvZiAzLjE2LjEuIFRoaXMgY2F1c2VzIHdhcm5pbmcKK21lc3NhZ2VzLCBhbmQgbWV0YS9saWIvb2Uvcm9vdGZzLnB5IGNvbXBsYWludHMgYWJvdXQgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgfCA2IC0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworaW5kZXggZTQyOTQ5Yi4uZWM3OWQ3YyAxMDA2NDQKKy0tLSBhL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jCisrKysgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworQEAgLTEyMDIsMTIgKzEyMDIsNiBAQCBwYXJzZV9zdGF0ZV9zdGFydF9zY2hlbWEgKFBhcnNlU3RhdGUgICpzdGF0ZSwKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIGlmIChwYXRoICYmIChnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2FwcHMvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2Rlc2t0b3AvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL3N5c3RlbS8iKSkpCistICAgIGdfcHJpbnRlcnIgKCJ3YXJuaW5nOiBTY2hlbWEgJyVzJyBoYXMgcGF0aCAnJXMnLiAgUGF0aHMgc3RhcnRpbmcgd2l0aCAiCistICAgICAgICAgICAgICAgICInL2FwcHMvJywgJy9kZXNrdG9wLycgb3IgJy9zeXN0ZW0vJyBhcmUgZGVwcmVjYXRlZC5cbiIsIGlkLCBwYXRoKTsKKy0KKyAgIHN0YXRlLT5zY2hlbWFfc3RhdGUgPSBzY2hlbWFfc3RhdGVfbmV3IChwYXRoLCBnZXR0ZXh0X2RvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRzLCBleHRlbmRzX25hbWUsIGxpc3Rfb2YpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlMzYzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjb21taXQgOWIzOGQ1MDdlYzM3YjNkN2Q0ZGY2MDk1ZmE3ZWQxNmI0N2QzOTlmNworQXV0aG9yOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogICBTYXQgTWFyIDI5IDIxOjEwOjQzIDIwMTQgLTA0MDAKKworICAgIGNvbmZpZ3VyZS5hYzogRG8gbm90IHVzZSByZWFkbGluayB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworICAgIERvIG5vdCB1c2UgcmVhZGxpbmsgdG8gc2V0IEFCU19HTElCX1JVTlRJTUVfTElCRElSIHdoZW4gY3Jvc3MKKyAgICBjb21waWxpbmcuICBEb2luZyBzbyBjYXVzZXMgaG9zdCBwYXRocyB0byBwb3RlbnRpYWxseSBwb2xsdXRlCisgICAgdGhlIHRhcmdldC4KKworICAgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgdGhlIHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBpZgorICAgIGl0IGNvbnRhaW5zIGFueSAiLi4iIHJlZmVyZW5jZXMgc28gaXQncyBub3QgY29tcGxldGVseSBjb3JyZWN0LgorCisgICAgVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc1NzVdCisgICAgU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworZGlmZiAtcnViIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjIGdsaWItMi4zOC4yL2NvbmZpZ3VyZS5hYworLS0tIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTc6MTMuMDM1NTY3MTQzIC0wNDAwCisrKysgZ2xpYi0yLjM4LjIvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTk6MDcuMDcxNTY2MDU3IC0wNDAwCitAQCAtMjc1LDcgKzI3NSwxMSBAQAorICAgICAgICAgICAgW10sCisgCSAgIFt3aXRoX3J1bnRpbWVfbGliZGlyPSIiXSkKKyBHTElCX1JVTlRJTUVfTElCRElSPSIkd2l0aF9ydW50aW1lX2xpYmRpciIKKytBU19JRihbIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllcyBdLCBbCisrQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9IiRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXIiCisrXSwgWworIEFCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLW0gJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCisrXSkKKyBBQ19TVUJTVChHTElCX1JVTlRJTUVfTElCRElSKQorIEFDX1NVQlNUKEFCU19HTElCX1JVTlRJTUVfTElCRElSKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xJQl9SVU5USU1FX0xJQkRJUiwgW3Rlc3QgIngkd2l0aF9ydW50aW1lX2xpYmRpciIgIT0gIngiXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYWMzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gNTUyNTNiNTViOWM2NWYzZTBlZmJiZTAzY2JhYjJhNGM0MDE0YTE2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgNSBKdWwgMjAxMiAxNTowOTo0MSArMDgwMAorU3ViamVjdDogW1BBVENIXSBhZGQgLW1hcmNoPWk0ODYgaW50byBDRkxBR1MgYXV0b21hdGljYWxseQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2dsaWIgY29uZmlndXJlIHdpbGwgY2hlY2sgaWYgY3VycmVudCBnY2MgbmVlZCAtbWFyY2g9aTQ4NiwKK3doZW4gZ2NjIG5lZWQgLW1hcmNoPWk0ODYgYnV0IENGTEFHUyBkb24ndCBoYXZlLAorZ2xpYiBjb25maWd1cmUgd2lsbCBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGFkZCAtbWFyY2g9aTQ4NiBvciBsYXRlci4KK1RoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcyxpdCdzIG5vdCBnb29kIGZvciBhdXRvbWF0aWMgYnVpbGQgc3lzdGVtLgorc28gY2hhbmdlIHRoaXMgdG8gYWRkaW5nIC1tYXJjaD1pNDg1IGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcyBuZWVkZWQuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICA2ICsrKystLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2xpYi0yLjM2LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYi0yLjM2LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGliLTIuMzYuMC9jb25maWd1cmUuYWMKK0BAIC0yMzc4LDcgKzIzNzgsNyBAQCBkbmwKKyBkbmwgTm90ZSB0aGF0IHRoZSBhdG9taWMgb3BzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIEdDQyBvbiB4ODYgd2hlbgorIGRubCB1c2luZyAtbWFyY2g9aTQ4NiBvciBoaWdoZXIuICBJZiB3ZSBkZXRlY3QgdGhhdCB0aGUgYXRvbWljIG9wcyBhcmUKKyBkbmwgbm90IGF2YWlsYWJsZSBidXQgd291bGQgYmUgYXZhaWxhYmxlIGdpdmVuIHRoZSByaWdodCBmbGFncywgd2Ugd2FudAorLWRubCB0byBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGZpeCB0aGVpciBDRkxBR1MuICBJdCdzIGJldHRlciB0byBkbworK2RubCB0byBhZGQgLW1hcmNoPWk0ODYgYXV0b21hdGljYWxseSB0byBmaXggdGhlaXIgQ0ZMQUdTLiAgSXQncyBiZXR0ZXIgdG8gZG8KKyBkbmwgdGhhdCB0aGVuIHRvIHNpbGVudGx5IGZhbGwgYmFjayBvbiBlbXVsYXRlZCBhdG9taWMgb3BzIGp1c3QgYmVjYXVzZQorIGRubCB0aGUgdXNlciBoYWQgdGhlIHdyb25nIGJ1aWxkIGVudmlyb25tZW50LgorCitAQCAtMjQwMSw3ICsyNDAxLDggQEAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb2NrLWZyZWUgYXRvbWljIGludAorICAgICAgICAgQUNfVFJZX0NPTVBJTEUoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBbdm9sYXRpbGUgaW50IGF0b21pYyA9IDI7XAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpO10sCistICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtHTGliIG11c3QgYmUgYnVpbGQgd2l0aCAtbWFyY2g9aTQ4NiBvciBsYXRlci5dKV0sCisrICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX1dBUk4oW0dMaWIgbXVzdCBiZSBidWlsZCB3aXRoIC1tYXJjaD1pNDg2IG9yIGxhdGVyLl0pCisrICAgICAgICAgICAgICAgICAgICAgICBTQVZFX0NGTEFHUz0iJHtTQVZFX0NGTEFHU30gLW1hcmNoPWk0ODYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorICAgICAgICAgQ0ZMQUdTPSIke1NBVkVfQ0ZMQUdTfSIKKyAgICAgICBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMGMwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBjNTNlOTRhNTIwYjU3M2FhMGRjZjEyOTAzZTk1NjNmZThiYWRjMzRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaXVzIEF2cmFtIDxtYXJpdXMuYXZyYW1AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAxMjoxMDo0MSArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyAvcnVuL21lZGlhL3NkWCBkcml2ZSBtb3VudCBpZiB1c2VybmFtZSByb290CisKK0luIGNhc2UgdGhhdCB0aGUgdXNlcm5hbWUgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gaXMgcm9vdAordGhlIGRyaXZlcyBhcmUgZGlyZWN0bHkgbW91bnRlZCBpbiAvcnVuL21lZGlhL3NkWCBhbmQKK25vdCAvcnVuL21lZGlhLzx1c2VybmFtZT4vc2RYIGFzIHRoZSBmdW5jdGlvbgorZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5KCkgZXhwZWN0cy4KKworV2l0aG91dCB0aGlzIGNoYW5nZSBVU0Igc3RpY2sgbW91bnRzIGFyZSBub3QgYWNjZXNpYmxlIGZyb20KK2dyYXBoaWNhbCBhcHBsaWNhdGlvbnMgc3VjaCBhcyB0aGUgRmlsZSBNYW5hZ2VyIChwY21hbmZtKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcml1cyBBdnJhbSA8bWFyaXVzLmF2cmFtQGludGVsLmNvbT4KKy0tLQorIGdpby9ndW5peG1vdW50cy5jIHwgICAgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dpby9ndW5peG1vdW50cy5jIGIvZ2lvL2d1bml4bW91bnRzLmMKK2luZGV4IDQ5OTkzNTQuLmY2YzE0NzIgMTAwNjQ0CistLS0gYS9naW8vZ3VuaXhtb3VudHMuYworKysrIGIvZ2lvL2d1bml4bW91bnRzLmMKK0BAIC0yMTM2LDYgKzIxMzYsMTEgQEAgZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5IChHVW5peE1vdW50RW50cnkgKm1vdW50X2VudHJ5KQorICAgICAgICAgICBtb3VudF9wYXRoW3NpemVvZiAoIi9ydW4vbWVkaWEvIikgLSAxICsgdXNlcl9uYW1lX2xlbl0gPT0gJy8nKQorICAgICAgICAgaXNfaW5fcnVudGltZV9kaXIgPSBUUlVFOworIAorKyAgICAgIC8qIEFsbG93IG5vIHVzZXJuYW1lIGluIHBhdGggaW4gL3J1bi9tZWRpYSBpZiBjdXJyZW50IHVzZXIgaXMgcm9vdCAqLworKyAgICAgIGlmIChzdHJjbXAodXNlcl9uYW1lLCAicm9vdCIpID09IDAgJiYKKysgICAgICAgICAgc3RybmNtcCAobW91bnRfcGF0aCwgIi9ydW4vbWVkaWEvIiwgc2l6ZW9mKCJydW4vbWVkaWEiKSkgPT0gMCkKKysgICAgICAgIGlzX2luX3J1bnRpbWVfZGlyID0gVFJVRTsKKysKKyAgICAgICBpZiAoaXNfaW5fcnVudGltZV9kaXIgfHwgZ19zdHJfaGFzX3ByZWZpeCAobW91bnRfcGF0aCwgIi9tZWRpYS8iKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgY2hhciAqcGF0aDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjlhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDFjNTcxODY0OGQ0OWU3OTVlZmVlOTFjMjIwYTJiZjkzODZjMTg0ZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDI4IEFwciAyMDEyIDE4OjI0OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlICRob3N0X2FsaWFzLWxpYnRvb2wgaW5zdGVhZCBvZiBsaWJ0b29sCisgZGlyZWN0bHkKKworUG9reSByZW5hbWVzIGxpYnRvb2wgdG8gJGhvc3RfYWxpYXMtbGlidG9vbC4KKy4vJGhvc3RfYWxpYXMtbGlidG9vbCBpc24ndCBjcmVhdGVkIHVudGlsIGFmdGVyIGNvbmZpZ3VyZSBydW5zIHdpdGgKK2xpYnRvb2wgPj0gMi4yLjIKK3NvIHdlIGNhbid0IGNhbGwgIyBpdCBhdCB0aGlzIHBvaW50LiBXZSBjYW4gc2FmZWx5IGFzc3VtZSBhIHZlcnNpb24gaXMKK2F2YWlsYWJsZQorZnJvbSBQQVRIIHRob3VnaAorCitSZWJhc2VkIHRvIGdsaWItMi4yNy4zIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitSZWJhc2VkIHRvIGdsaWItMi4zMi4xIGJ5IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA4ICsrKystLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE2NDc4YzYuLjlhOTNkNjAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0NzAsNyArMTQ3MCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGhlbgorICAgR19NT0RVTEVfTERGTEFHUz0KKyBlbHNlCisgICBleHBvcnQgU0VECistICBHX01PRFVMRV9MREZMQUdTPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrICBHX01PRFVMRV9MREZMQUdTPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTM1LDkgKzE1MzUsOSBAQCBpZiB0ZXN0ICIkR19NT0RVTEVfSU1QTCIgPSAiR19NT0RVTEVfSU1QTF9ETCI7IHRoZW4KKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7Q1BQRkxBR1N9IC1jIC1vIHBsdWdpbi5sbyBwbHVnaW4uYyA+L2Rldi9udWxsIDI+JjEKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtMREZMQUdTfSAtbW9kdWxlIC1vIHBsdWdpbi5sYSAtZXhwb3J0LWR5bmFtaWMgXAorIAkJLXNocmV4dCAiLm8iIC1hdm9pZC12ZXJzaW9uIHBsdWdpbi5sbyBcCisgCQktcnBhdGggL2RvbnQvY2FyZSA+L2Rldi9udWxsIDI+JjEKK0BAIC0xNjE0LDcgKzE2MTQsNyBAQCBmaQorIAorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIHN1ZmZpeCBvZiBtb2R1bGUgc2hhcmVkIGxpYnJhcmllcykKKyBleHBvcnQgU0VECistc2hyZXh0X2NtZHM9YC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorK3NocmV4dF9jbWRzPWAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKyBldmFsICRzaHJleHRfY21kcworIG1vZHVsZT15ZXMgZXZhbCBzdGRfc2hyZXh0PSRzaHJleHRfY21kcworICMgY2hvcCB0aGUgaW5pdGlhbCBkb3QKKy0tIAorMS43LjguNgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzExMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitSZW5hbWUgJ3JhbmQnIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZsaWN0LgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KKworZGlmZiAtdSBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmN+IGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYworLS0tIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEyLTExLTI2IDE3OjUyOjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEzLTAyLTA4IDE0OjI0OjEwLjA1MjQ3NzU0NiArMDEwMAorQEAgLTksNyArOSw3IEBACisgI2RlZmluZSBNWV9JU19URVNUX0NMQVNTKHRjbGFzcykgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh0Y2xhc3MpLCBHX1RZUEVfVEVTVCkpCisgI2RlZmluZSBNWV9URVNUX0dFVF9DTEFTUyh0ZXN0KSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKHRlc3QpLCBHX1RZUEVfVEVTVCwgR1Rlc3RDbGFzcykpCisgCistc3RhdGljIEdSYW5kICpyYW5kOworK3N0YXRpYyBHUmFuZCAqZ3JhbmQ7CisgCisgdHlwZWRlZiBzdHJ1Y3QgX0dUZXN0IEdUZXN0OworIHR5cGVkZWYgc3RydWN0IF9HVGVzdENsYXNzIEdUZXN0Q2xhc3M7CitAQCAtODQsNyArODQsNyBAQAorICAgICAgIE5VTEwKKyAgICAgfTsKKyAKKy0gICAgcmFuZCA9IGdfcmFuZF9uZXcoKTsKKysgICAgZ3JhbmQgPSBnX3JhbmRfbmV3KCk7CisgCisgICAgIHRlc3RfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdfVFlQRV9PQkpFQ1QsICJHVGVzdCIsCisgICAgICAgICAmdGVzdF9pbmZvLCAwKTsKK0BAIC0yMTgsNyArMjE4LDcgQEAKKyBzdGF0aWMgdm9pZAorIG15X3Rlc3RfZG9fcHJvcCAoR1Rlc3QgKiB0ZXN0KQorIHsKKy0gIHRlc3QtPnZhbHVlID0gZ19yYW5kX2ludCAocmFuZCk7CisrICB0ZXN0LT52YWx1ZSA9IGdfcmFuZF9pbnQgKGdyYW5kKTsKKyAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHRlc3QpLCAidGVzdC1wcm9wIik7CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTlkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorY29uZmlndXJlLmFjOiBjaGFuZ2UgcmVhZGxpbmsgLWYgdG8gLW0KKworQ2hhbmdlICJyZWFkbGluayAtZiIgdG8gInJlYWRsaW5rIC1tIiBzaW5jZSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyCittYXkgbm90IGV4aXN0LgorCitUaGlzIHBhdGNoIHNob3VsZCBnbyB0byB0aGUgdXBzdHJlYW0sIEkgd2lsbCBzZW5kIGl0IHNvb25lci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3MSw3ICsyNzEsNyBAQCBBQ19BUkdfV0lUSChydW50aW1lLWxpYmRpciwKKyAgICAgICAgICAgIFtdLAorIAkgICBbd2l0aF9ydW50aW1lX2xpYmRpcj0iIl0pCisgR0xJQl9SVU5USU1FX0xJQkRJUj0iJHdpdGhfcnVudGltZV9saWJkaXIiCistQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtZiAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKKytBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1tICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgorIEFDX1NVQlNUKEdMSUJfUlVOVElNRV9MSUJESVIpCisgQUNfU1VCU1QoQUJTX0dMSUJfUlVOVElNRV9MSUJESVIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCX1JVTlRJTUVfTElCRElSLCBbdGVzdCAieCR3aXRoX3J1bnRpbWVfbGliZGlyIiAhPSAieCJdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDM1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKyMgYW4gdmVyeSBvbGQgcGF0Y2ggY2hlcnJ5LXBpY2tlZCBpbiBldmVyeSBnbGliLTIuMCBwYXRjaCBkaXJlY3RvcnkuIFRoZSBlYXJsaWVzdCBjb250YWluZXIKKyMgZm9yIGl0IGlzIDIuNi41IGluIE9FLiBUaGUgZWFybGllc3QgY29tbWl0IGZvciBpdCBpcyBjOGU1NzAyMTI3ZTUwN2U4MmU2ZjY4YTRiOGM1NDY4MDNhY2NlYTlkCisjIGluIE9FIHNpZGUgd2hpY2ggcG9ydHMgZnJvbSBwcmV2aW91cyBiaXRrZWVwZXIgU0NNLiBJbiBPRSBzaWRlIGl0J3Mgb25seSB1c2VkIHRpbCAyLjEyLjQuCisjCisjIGtlZXAgaXQgc2luY2UgaXQncyBhbHdheXMgY2xlYW5lciB0byBub3QgaGFyZGNvZGUgZGVzdGluYXRpb24gcGF0aC4gVXNlIEBkYXRhZGlyQCBpcyBtb3JlCisjIHBvcnRhYmxlIGhlcmUuIG1hcmsgZm9yIHVwc3RyZWFtCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMDYvMjUvMjAxMAorIyBSZWJhc2VkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+LCAxMS8xNi8yMDEwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluIGdsaWItMi4yNy4zL2dsaWItZ2V0dGV4dGl6ZS5pbgorLS0tIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMDktMDQtMDEgMDc6MDQ6MjAuMDAwMDAwMDAwICswODAwCisrKysgZ2xpYi0yLjI3LjMvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMTAtMTEtMTYgMTI6NTU6MDYuODc0NjA1OTE2ICswODAwCitAQCAtNTIsNyArNTIsNyBAQAorIGRhdGFkaXI9QGRhdGFkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIAorLWdldHRleHRfZGlyPSRwcmVmaXgvc2hhcmUvZ2xpYi0yLjAvZ2V0dGV4dAorK2dldHRleHRfZGlyPUBkYXRhZGlyQC9nbGliLTIuMC9nZXR0ZXh0CisgCisgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgIGNhc2UgIiQxIiBpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9wdGVzdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JlMDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorSW5zdGVhZCBvZiB3cml0aW5nIHRoZSB0ZW1wb3JhcnkgbWFwcGluZyBmaWxlcyBpbiB0aGUgbWFwcGVkZmlsZSB0ZXN0IHRvIHRoZQordXNlciBydW50aW1lIGRpcmVjdG9yeSwgd3JpdGUgdGhlbSB0byAkVE1QLiAgVGhlIHJ1bnRpbWUgZGlyZWN0b3J5IG1heSBub3QKK2N1cnJlbnRseSBleGlzdCBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBvbiBhIG5vbi1kZXNrdG9wIHN5c3RlbSBhbmQgdGhlIHRlc3QKK2RvZXNuJ3QgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK2luZGV4IDQwZTBlNjAuLjI3YTI0YmUgMTAwNjQ0CistLS0gYS9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYworKysrIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK0BAIC04MSw3ICs4MSw3IEBAIHRlc3Rfd3JpdGFibGUgKHZvaWQpCisgICBjb25zdCBnY2hhciAqbmV3ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXoiOworICAgZ2NoYXIgKnRtcF9jb3B5X3BhdGg7CisgCistICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9ydW50aW1lX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworKyAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKyAKKyAgIGdfZmlsZV9nZXRfY29udGVudHMgKGdfdGVzdF9nZXRfZmlsZW5hbWUgKEdfVEVTVF9ESVNULCAiNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKSwgJmNvbnRlbnRzLCAmbGVuLCAmZXJyb3IpOworICAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKK0BAIC0xMjUsNyArMTI1LDcgQEAgdGVzdF93cml0YWJsZV9mZCAodm9pZCkKKyAgIGludCBmZDsKKyAgIGdjaGFyICp0bXBfY29weV9wYXRoOworIAorLSAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfcnVudGltZV9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKysgIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF90bXBfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisgCisgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzIChnX3Rlc3RfZ2V0X2ZpbGVuYW1lIChHX1RFU1RfRElTVCwgIjQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCksICZjb250ZW50cywgJmxlbiwgJmVycm9yKTsKKyAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwYWUwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnbGliCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExNTRmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3VjbGliYy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitGaXggREFUQURJUk5BTUUgb24gdWNsaWJjL0xpbnV4CisKK3RyYW5zbGF0aW9uIGZpbGVzIGFyZSBhbHdheXMgaW5zdGFsbGVkIHVuZGVyIFBSRUZJWC9zaGFyZS9sb2NhbGUgaW4gdWNsaWJjCitiYXNlZCBzeXN0ZW1zIHRoZXJlZm9yZSBsZXRzIHNldCBEQVRBRElSTkFNRSB0byAic2hhcmUiLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZ2xpYi0yLjM4LjIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYi0yLjM4LjIub3JpZy9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQJMjAxMy0xMS0wNyAwNzoyOToxMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBnbGliLTIuMzguMi9tNG1hY3Jvcy9nbGliLWdldHRleHQubTQJMjAxNC0wMy0xNSAxNDo1MTo1NC43MTIxMzU2NDQgLTA3MDAKK0BAIC0yMzksNyArMjM5LDcgQEAKKyAJICAgICAgW0NBVE9CSkVYVD0ubW8KKyAgICAgICAgICAgICAgICBEQVRBRElSTkFNRT1saWJdKQorIAkgICAgOzsKKy0JICAgICotKi1vcGVuYnNkKikKKysJICAgICotKi1vcGVuYnNkKiB8ICotKi1saW51eC11Y2xpYmMqKQorIAkgICAgQ0FUT0JKRVhUPS5tbworICAgICAgICAgICAgIERBVEFESVJOQU1FPXNoYXJlCisgCSAgICA7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40NC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40NC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlM2QzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMF8yLjQ0LjEuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBnbGliLmluYworCitQRSA9ICIxIgorCitTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9nbGliLyR7U0hSVF9WRVJ9L2dsaWItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1wYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91Y2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUuYWMtRG8tbm90LXVzZS1yZWFkbGluay13aGVuLWNyb3NzLWNvbXBpbGluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LXJ1bi1tZWRpYS1zZFgtZHJpdmUtbW91bnQtaWYtdXNlcm5hbWUtcm9vdC5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtUmVtb3ZlLXRoZS13YXJuaW5nLWFib3V0LWRlcHJlY2F0ZWQtcGF0aHMtaW4tc2NoZW1hcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODNlZmJhNDcyMmE5Njc0Yjk3NDM3ZDFkOTlhZjc5ZGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODgxMWRlYWNhZjhhNTAzZDBhOWI3MDE3NzdlYTA3OWNhNmE0Mjc3YmUxMGUzZDczMGQyMTEyNzM1ZDVlY2EwNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyZjc5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jCkBAIC0wLDAgKzEsMTA0IEBACitTVU1NQVJZID0gIkEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdMaWIgaXMgYSBnZW5lcmFsLXB1cnBvc2UgdXRpbGl0eSBsaWJyYXJ5LCB3aGljaCBwcm92aWRlcyBtYW55IHVzZWZ1bCBkYXRhIHR5cGVzLCBtYWNyb3MsIHR5cGUgY29udmVyc2lvbnMsIHN0cmluZyB1dGlsaXRpZXMsIGZpbGUgdXRpbGl0aWVzLCBhIG1haW4gbG9vcCBhYnN0cmFjdGlvbiwgYW5kIHNvIG9uLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nbGliLyIKKworIyBwY3JlIGlzIHVuZGVyIEJTRDsKKyMgZG9jcy9yZWZlcmVuY2UvQ09QWUlORyBpcyB3aXRoIGEgJ3B1YmxpYyBkb21haSctbGlrZSBsaWNlbnNlIQorTElDRU5TRSA9ICJMR1BMdjIrICYgQlNEICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGliL2dsaWIuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1iNGYwZjRhMzk5YzE5ZTVlYmIyMGMzMWI3OWQ2YmMzMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbW9kdWxlL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dtb2R1bGUvZ21vZHVsZS5oO2JlZ2lubGluZT00O2VuZGxpbmU9MTc7bWQ1PWI0ZjBmNGEzOTljMTllNWViYjIwYzMxYjc5ZDZiYzMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsaWIvcGNyZS9DT1BZSU5HO21kNT0yNjZlYmMzZmY3NGVlOWNlNmZhZDY1NTc3NjY3YzBmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGliL3BjcmUvcGNyZS5oO2JlZ2lubGluZT0xMTtlbmRsaW5lPTM1O21kNT1kZTI3ZjJiZjYzM2QyMGEyYjdhZjBiMTk4MzQyMzI4MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL3JlZmVyZW5jZS9DT1BZSU5HO21kNT1mNTFhNTEwMGMxN2FmNmJhZTAwNzM1Y2Q3OTFlMWZjYyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSB2aXJ0dWFsL2xpYmljb252IGxpYmZmaSB6bGliIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnIGRidXMnLCAnJywgZCl9IgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicGtnY29uZmlnLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBsaWJmZmktbmF0aXZlIHpsaWItbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWxpYnRvb2wgbmF0aXZlc2RrLWdldHRleHQgbmF0aXZlc2RrLWxpYmZmaSBuYXRpdmVzZGstemxpYiAke0JQTn0tbmF0aXZlIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tdXRpbHMgJHtQTn0tYmFzaC1jb21wbGV0aW9uICR7UE59LWNvZGVnZW4iCisKK0xFQURfU09OQU1FID0gImxpYmdsaWItMi4wLioiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vKiAke2RhdGFkaXJ9L2dsaWItMi4wL2dldHRleHQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZ3RrLWRvYyBwa2djb25maWcgcHRlc3QtZ25vbWUKKworUyA9ICIke1dPUktESVJ9L2dsaWItJHtQVn0iCisKK0NPUkVDT05GID0gIi0tZGlzYWJsZS1kdHJhY2UgLS1kaXNhYmxlLWZhbSAtLWRpc2FibGUtbGliZWxmIC0tZGlzYWJsZS1zeXN0ZW10YXAgLS1kaXNhYmxlLW1hbiIKKworUFJJTlRGID0gIi0tZW5hYmxlLWluY2x1ZGVkLXByaW50Zj1ubyIKK1BSSU5URl9kYXJ3aW4gPSAiLS1lbmFibGUtaW5jbHVkZWQtcHJpbnRmPXllcyIKK1BSSU5URl9taW5ndzMyID0gIi0tZW5hYmxlLWluY2x1ZGVkLXByaW50Zj15ZXMiCitFWFRSQV9PRUNPTkYgPSAiJHtQUklOVEZ9ICR7Q09SRUNPTkZ9IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICIke0NPUkVDT05GfSAtLWRpc2FibGUtc2VsaW51eCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0td2l0aC1saWJpY29udj1nbnUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKiwjISR7VVNSQklOUEFUSH0vZW52IHB5dGhvbiwnICR7U30vZ2lvL2dkYnVzLTIuMC9jb2RlZ2VuL2dkYnVzLWNvZGVnZW4uaW4KK30KKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30gJHtsaWJkaXJ9L2dpbyAke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMgXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbGliLTIuMC9nZXR0ZXh0L21raW5zdGFsbGRpcnMgJHtkYXRhZGlyfS9nbGliLTIuMC9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ2xpYi0yLjAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vbW9kdWxlcy9saWIqJHtTT0xJQlNERVZ9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby9tb2R1bGVzLyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2RiICR7ZGF0YWRpcn0vZ2RiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby9tb2R1bGVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9nbGliLTIuMC9pbnN0YWxsZWQtdGVzdHMvZ2xpYi8uZGVidWciCitGSUxFU18ke1BOfS1jb2RlZ2VuID0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5IgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKK1VTRV9OTFMgPSAieWVzIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L2d0ZXN0ZXItcmVwb3J0IF07IHRoZW4KKwkJc2VkICR7RH0ke2JpbmRpcn0vZ3Rlc3Rlci1yZXBvcnQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnCisJZmkKKworCSMgUmVtb3ZlIHNvbWUgdW5wYWNrYWdlZCBmaWxlcworCXJtIC1mICR7RH0ke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weWMKKwlybSAtZiAke0R9JHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHlvCisKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L2dsaWItbWtlbnVtcyBdOyB0aGVuCisJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vZ2xpYi1ta2VudW1zCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIlwKKyAgICAgICAgICAgIGdub21lLWRlc2t0b3AtdGVzdGluZyBcCisgICAgICAgICAgICB0emRhdGEgXAorICAgICAgICAgICAgdHpkYXRhLWFtZXJpY2FzIFwKKyAgICAgICAgICAgIHR6ZGF0YS1hc2lhIFwKKyAgICAgICAgICAgIHR6ZGF0YS1ldXJvcGUgXAorICAgICAgICAgICAgdHpkYXRhLXBvc2l4IFwKKyAgICAgICAgICAgIHB5dGhvbi1weWdvYmplY3QgXAorICAgICAgICAgICAgcHl0aG9uLWRidXMgXAorICAgICAgICAgICAgc2hhcmVkLW1pbWUtaW5mbyBcCisgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtdXRmLTE2IFwKKyAgICAgICAgICAgIGdsaWJjLWNoYXJtYXAtdXRmLTggXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtY3AxMjU1IFwKKyAgICAgICAgICAgIGdsaWJjLWNoYXJtYXAtY3AxMjU1IFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LXV0Zi0zMiBcCisgICAgICAgICAgICBnbGliYy1nY29udi11dGYtNyBcCisgICAgICAgICAgICBnbGliYy1nY29udi1ldWMtanAgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWlzbzg4NTktMTUgXAorICAgICAgICAgICAgZ2xpYmMtY2hhcm1hcC1pbnZhcmlhbnQgXAorICAgICAgICAgICAgZ2xpYmMtbG9jYWxlZGF0YS10cmFuc2xpdC1jamstdmFyaWFudHMgXAorICAgICAgICAgICAiCisKK0lOU0FORV9TS0lQXyR7UE59LXB0ZXN0ICs9ICJsaWJkaXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLW5ldHdvcmtpbmcvZ2xpYi1uZXR3b3JraW5nXzIuNDQuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItbmV0d29ya2luZy9nbGliLW5ldHdvcmtpbmdfMi40NC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTFiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLW5ldHdvcmtpbmcvZ2xpYi1uZXR3b3JraW5nXzIuNDQuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkdMaWIgbmV0d29ya2luZyBleHRlbnNpb25zIgorREVTQ1JJUFRJT04gPSAiZ2xpYi1uZXR3b3JraW5nIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgY2VydGFpbiBHTGliIG5ldHdvcmtpbmcgZmVhdHVyZXMgdGhhdCBjYW5ub3QgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaW4gR0xpYiBpdHNlbGYgYmVjYXVzZSBvZiB0aGVpciBkZXBlbmRlbmNpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL2dsaWItbmV0d29ya2luZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCisKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI2OTg5YjIwY2YzYjI2ZGQ1YWUyNzJlMDRhOWFjYjBiMyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjhmOGEzNDBkM2JhOTliZmRlZjM4YjY1M2RhOTI5NjUyZWE2NjQwZTI3OTY5ZDI5ZjdhYzUxZmJiZTExYTQzNDYiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJjYS1jZXJ0aWZpY2F0ZXMgZ251dGxzIgorCisjIE5vIGV4cGxpY2l0IGRlcGVuZGVuY3kgYXMgaXQgd29ya3Mgd2l0aG91dCBjYS1jZXJ0aWZpY2F0ZXMgaW5zdGFsbGVkCitQQUNLQUdFQ09ORklHW2NhLWNlcnRpZmljYXRlc10gPSAiLS13aXRoLWNhLWNlcnRpZmljYXRlcz0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0LC0td2l0aG91dC1jYS1jZXJ0aWZpY2F0ZXMiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS13aXRoLWdudXRscywtLXdpdGhvdXQtZ251dGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbbGlicHJveHldID0gIi0td2l0aC1saWJwcm94eSwtLXdpdGhvdXQtbGlicHJveHksbGlicHJveHkiCitQQUNLQUdFQ09ORklHW3BrY3MxMV0gPSAiLS13aXRoLXBrY3MxMSwtLXdpdGhvdXQtcGtjczExLHAxMS1raXQiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZ25vbWUtcHJveHkiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLnNvICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzLy5kZWJ1Zy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy9saWJnaW8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5hIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZS9maXhfZm9yX2NlbnRvc181LjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODZhNDgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZS9maXhfZm9yX2NlbnRvc181LjgucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworVGhpcyBpcyBhIGhhY2sgdG8gZml4IGJ1aWxkaW5nIHRoZSBsb2NhbGUgYml0cyBvbiBhbiBvbGRlcgorQ2VudE9zIDUuWCBtYWNoaW5lCisKK0luZGV4OiBnaXQvbG9jYWxlL3Byb2dyYW1zL2NvbmZpZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0L2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorKysrIGdpdC5vcmlnL2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorQEAgLTE5LDYgKzE5LDggQEAKKyAjaWZuZGVmIF9MRF9DT05GSUdfSAorICNkZWZpbmUgX0xEX0NPTkZJR19ICTEKKyAKKysjZGVmaW5lIERVTU1ZX0xPQ0FMRV9UCisrCisgLyogVXNlIHRoZSBpbnRlcm5hbCB0ZXh0ZG9tYWluIHVzZWQgZm9yIGxpYmMgbWVzc2FnZXMuICAqLworICNkZWZpbmUgUEFDS0FHRSBfbGliY19pbnRsX2RvbWFpbm5hbWUKKyAjaWZuZGVmIFZFUlNJT04KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTUzZWNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZV8yLjIyLmJiCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiQ3Jvc3MgbG9jYWxlIGdlbmVyYXRpb24gdG9vbCBmb3IgZ2xpYmMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9saWJjLmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEwtMi4xIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFUzttZDU9ZTlhNTU4ZTI0M2IzNmQzMjA5ZjM4MGRlYjM5NGIyMTMgXAorICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCisgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCisKK2luaGVyaXQgbmF0aXZlCitpbmhlcml0IGF1dG90b29scworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1BOfToke0ZJTEVfRElSTkFNRX0vZ2xpYmM6IgorCitCUkFOQ0ggPz0gInJlbGVhc2UvJHtQVn0vbWFzdGVyIgorR0xJQkNfR0lUX1VSSSA/PSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2dsaWJjLmdpdCIKKworU1JDX1VSSSA9ICIke0dMSUJDX0dJVF9VUkl9O2JyYW5jaD0ke0JSQU5DSH07bmFtZT1nbGliYyBcCisgICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20va3Jhai9sb2NhbGVkZWY7YnJhbmNoPW1hc3RlcjtuYW1lPWxvY2FsZWRlZjtkZXN0c3VmZml4PWdpdC9sb2NhbGVkZWYgXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoIFwKKyAgICAgICAgICAgJHtFR0xJQkNQQVRDSEVTfSBcCisiCitFR0xJQkNQQVRDSEVTID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoIFwKKyIKKworU1JDUkVWX2dsaWJjID89ICJhMzRkMWM2YWZjODY1MjFkNmFkMTc2NjJhM2I1MzYyZDg0ODE1MTRjIgorU1JDUkVWX2xvY2FsZWRlZiA/PSAiYzgzMzM2NzM0OGQzOWRhZDdiYTAxODk5MGJmZGFmZmFlYzhlOWVkMyIKKworIyBNYWtlcyBmb3IgYSByYXRoZXIgbG9uZyByZXYgKDIyIGNoYXJhY3RlcnMpLCBidXQuLi4KKyMKK1NSQ1JFVl9GT1JNQVQgPSAiZ2xpYmNfbG9jYWxlZGVmIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWdsaWJjPSR7U30iCitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIC1zdGQ9Z251OTkgLURJU19JTlwoeFwpPScwJyIKKworZG9fY29uZmlndXJlICgpIHsKKwkke1N9L2xvY2FsZWRlZi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Cit9CisKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9sb2NhbGVkZWYgJHtEfSR7YmluZGlyfS9jcm9zcy1sb2NhbGVkZWYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29sbGF0ZXJhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2NTVlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID89ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IFwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTEdQTC0yLjE7bWQ1PTFhNmQyNjhmZDIxODY3NWZmZWE4YmU1NTY3ODhiNzgwIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvaW5kZXguaHRtbCIKKworIyBUaGlzIG5lZWRzIHRvIG1hdGNoIHdpdGggZ2xpYmMuaW5jLCBvdGhlcndpc2UgZ2xpYmMtc2NyaXB0cyBhbmQgZ2xpYmMtbG9jYWxlCisjIHdpbGwgZmFpbCB0byBmaW5kIG1haW4gZ2xpYmMsIGZvciBkZXRhaWxzIHNlZQorIyBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1KYW51YXJ5LzEwMDY3OS5odG1sCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworQ09NUEFUSUJMRV9IT1NUX2xpYmMtbXVzbF9jbGFzcy10YXJnZXQgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAibnVsbCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhMTU2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbW1vbi5pbmMKQEAgLTAsMCArMSw5IEBACitTVU1NQVJZID0gIkdMSUJDIChHTlUgQyBMaWJyYXJ5KSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQyBMaWJyYXJ5IGlzIHVzZWQgYXMgdGhlIHN5c3RlbSBDIGxpYnJhcnkgaW4gbW9zdCBzeXN0ZW1zIHdpdGggdGhlIExpbnV4IGtlcm5lbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliYy9saWJjLmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID89ICJmaWxlOi8vTElDRU5TRVM7bWQ1PTA3YTM5NGIyNmUwOTAyYjlmZmRlYzAzNzY1MjA5NzcwIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MDA4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDc2IEBACitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgorCitkb19jb25maWd1cmUgKCkgeworCShjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCisJZmluZCAke1N9IC1uYW1lICJjb25maWd1cmUiIHwgeGFyZ3MgdG91Y2gKKwkke1N9L2NvbmZpZ3VyZSAtLWhvc3Q9JHtUQVJHRVRfU1lTfSAtLWJ1aWxkPSR7QlVJTERfU1lTfSBcCisJCS0tcHJlZml4PS91c3IgXAorCQktLXdpdGhvdXQtY3ZzIC0tZGlzYWJsZS1zYW5pdHktY2hlY2tzIFwKKwkJLS13aXRoLWhlYWRlcnM9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSBcCisJCS0td2l0aC1rY29uZmlnPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSBcCisJCS0tZW5hYmxlLWhhY2tlci1tb2RlIC0tZW5hYmxlLWFkZG9ucworfQorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgY3Jvc3MtY29tcGlsaW5nPXllcyBpbnN0YWxsX3Jvb3Q9JHtEfSBcCisJaW5jbHVkZWRpcj0nJHtpbmNsdWRlZGlyfScgcHJlZml4PScke3ByZWZpeH0nIFwKKwlpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcyBpbnN0YWxsLWhlYWRlcnMKKworCW9lX3J1bm1ha2UgY3N1L3N1YmRpcl9saWIKKwlta2RpciAtcCAke0R9JHtsaWJkaXJ9LworCWluc3RhbGwgLW0gNjQ0IGNzdS9jcnRbMWluXS5vICR7RH0ke2xpYmRpcn0KKworCSMgVHdvIGhlYWRlcnMgLS0gc3R1YnMuaCBhbmQgZmVhdHVyZXMuaCAtLSBhcmVuJ3QgaW5zdGFsbGVkIGJ5IGluc3RhbGwtaGVhZGVycywKKwkjIHNvIGRvIHRoZW0gYnkgaGFuZC4gIFdlIGNhbiB0b2xlcmF0ZSBhbiBlbXB0eSBzdHVicy5oIGZvciB0aGUgbW9tZW50LgorCSMgU2VlIGUuZy4gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDAyLTAxL21zZzAwOTAwLmh0bWwKKwlta2RpciAtcCAke0R9JHtpbmNsdWRlZGlyfS9nbnUvCisJdG91Y2ggJHtEfSR7aW5jbHVkZWRpcn0vZ251L3N0dWJzLmgKKwljcCAke1N9L2luY2x1ZGUvZmVhdHVyZXMuaCAke0R9JHtpbmNsdWRlZGlyfS9mZWF0dXJlcy5oCisKKwlpZiBbIC1lICR7Qn0vYml0cy9zdGRpb19saW0uaCBdOyB0aGVuCisJCWNwICR7Qn0vYml0cy9zdGRpb19saW0uaCAgJHtEfSR7aW5jbHVkZWRpcn0vYml0cy8KKwlmaQorCSMgYWRkIGxpbmtzIHRvIGxpbnV4LWxpYmMtaGVhZGVyczogZmluYWwgZ2xpYmMgYnVpbGQgbmVlZCB0aGlzLgorCWZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKwkJbG4gLXMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfS8kdCAke0R9JHtpbmNsdWRlZGlyfS8KKwlkb25lCit9CisKK2RvX2luc3RhbGxfbG9jYWxlKCkgeworCToKK30KKworZG9fc2l0ZWNvbmZpZyAoKSB7CisJOgorfQorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJnbGliY2luaXRpYWxfc3N0YXRlX3Bvc3RpbnN0IgorZ2xpYmNpbml0aWFsX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIFJlY3JlYXRlIHRoZSBzeW1saW5rcyB0byBlbnN1cmUgdGhleSBwb2ludCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbgorCQlmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisJCQlybSAtZiAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSR7aW5jbHVkZWRpcn0vJHQKKwkJCWxuIC1zICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0ke2luY2x1ZGVkaXJ9LworCQlkb25lCisJZmkKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgorCisjIFdlIGRvbid0IGluc3RhbGwgYW55IHNjcmlwdHMgc28gdGhlcmUgaXMgbm90aGluZyB0byBldmFjdWF0ZQorZG9fZXZhY3VhdGVfc2NyaXB0cyAoKSB7CisJOgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYjAxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsXzIuMjIuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBnbGliY18ke1BWfS5iYgorcmVxdWlyZSBnbGliYy1pbml0aWFsLmluYworCitERVBFTkRTICs9ICJrY29uZmlnLWZyb250ZW5kcy1uYXRpdmUiCisKKyMgbWFpbiBnbGliYyByZWNpcGVzIG11Y2sgd2l0aCBUQVJHRVRfQ1BQRkxBR1MgdG8gcG9pbnQgaW50bworIyBmaW5hbCB0YXJnZXQgc3lzcm9vdCBidXQgd2UKKyMgYXJlIG5vdCB0aGVyZSB3aGVuIGJ1aWxkaW5nIGdsaWJjLWluaXRpYWwKKyMgc28gcmVzZXQgaXQgaGVyZQorCitUQVJHRVRfQ1BQRkxBR1MgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmQ2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sZC5pbmMKQEAgLTAsMCArMSw1NiBAQAorZGVmIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhkLCBpbmZvcywgZGljdCk6CisgICAgdHVuZSA9IGQuZ2V0VmFyKCJERUZBVUxUVFVORSIsIFRydWUpIG9yICIiCisgICAgbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiB0dW5lIGluIGRpY3Q6CisgICAgICAgIGluZm9zWydsZGNvbmZpZyddLmFkZCgneyInICsgbGliZGlyICsgJy8nICsgZGljdFt0dW5lXVswXSArICciLCcgKyBkaWN0W3R1bmVdWzFdICsgJyB9JykKKyAgICAgICAgaW5mb3NbJ2xkZHJld3JpdGUnXS5hZGQobGliZGlyKycvJytkaWN0W3R1bmVdWzBdKQorCitkZWYgZ2xpYmNfZGxfaW5mbyhkKToKKyAgICBsZF9pbmZvX2FsbCA9IHsKKyAgICAgICAgIm1pcHMiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NC1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwc2VsIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbC1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQtbmYtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsLW5mLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGMiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGMtbmYiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgInBvd2VycGM2NCI6IFsibGQ2NC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjNjQtbmYiOiBbImxkNjQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZTItMzIiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmUyLTY0IjogWyJsZC1saW51eC14ODYtNjQuc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAieDg2IjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJ4ODYtNjQiOiBbImxkLWxpbnV4LXg4Ni02NC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJpNTg2IjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlaTctMzIiOiBbImxkLWxpbnV4LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmVpNy02NCI6IFsibGQtbGludXgteDg2LTY0LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICB9CisKKyAgICBpbmZvcyA9IHsnbGRjb25maWcnOnNldCgpLCAnbGRkcmV3cml0ZSc6c2V0KCl9CisgICAgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGQsIGluZm9zLCBsZF9pbmZvX2FsbCkKKworICAgICNERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTAorICAgIG9yaWdpbmFsX3R1bmU9ZC5nZXRWYXIoIkRFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMIixUcnVlKQorICAgIGlmIG9yaWdpbmFsX3R1bmU6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJERUZBVUxUVFVORSIsIG9yaWdpbmFsX3R1bmUpCisgICAgICAgIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhsb2NhbGRhdGEsIGluZm9zLCBsZF9pbmZvX2FsbCkKKworICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgbGRfYXBwZW5kX2lmX3R1bmVfZXhpc3RzKGxvY2FsZGF0YSwgaW5mb3MsIGxkX2luZm9fYWxsKQorICAgIGluZm9zWydsZGNvbmZpZyddID0gJywnLmpvaW4oaW5mb3NbJ2xkY29uZmlnJ10pCisgICAgaW5mb3NbJ2xkZHJld3JpdGUnXSA9ICcgJy5qb2luKGluZm9zWydsZGRyZXdyaXRlJ10pCisgICAgcmV0dXJuIGluZm9zCisKK0VHTElCQ19LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyA9ICIke0BnbGliY19kbF9pbmZvKGQpWydsZGNvbmZpZyddfSIKK1JUTERMSVNUID0gIiR7QGdsaWJjX2RsX2luZm8oZClbJ2xkZHJld3JpdGUnXX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGUuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZkMDczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYwpAQCAtMCwwICsxLDk2IEBACitpbmNsdWRlIGdsaWJjLWNvbGxhdGVyYWwuaW5jCisKK1NVTU1BUlkgPSAiTG9jYWxlIGRhdGEgZnJvbSBnbGliYyIKKworQlBOID0gImdsaWJjIgorTE9DQUxFQkFTRVBOID0gIiR7TUxQUkVGSVh9Z2xpYmMiCisKKyMgZ2xpYmMtY29sbGF0ZXJhbC5pbmMgaW5oaWJpdHMgYWxsIGRlZmF1bHQgZGVwcywgYnV0IGRvX3BhY2thZ2UgbmVlZHMgb2JqY29weQorIyBFUlJPUjogb2JqY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMTI3IChjbWQgd2FzICdpNTg2LXdlYm9zLWxpbnV4LW9iamNvcHknIC0tb25seS1rZWVwLWRlYnVnICdnbGliYy1sb2NhbGUvMi4xNy1yMC9wYWNrYWdlL3Vzci9saWIvZ2NvbnYvSUJNMTE2Ni5zbycgJ2dsaWJjLWxvY2FsZS8yLjE3LXIwL3BhY2thZ2UvdXNyL2xpYi9nY29udi8uZGVidWcvSUJNMTE2Ni5zbycpCisjIEVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHNwbGl0X2FuZF9zdHJpcF9maWxlcworQklOVVRJTFNERVAgPSAidmlydHVhbC8ke01MUFJFRklYfSR7VEFSR0VUX1BSRUZJWH1iaW51dGlsczpkb19wb3B1bGF0ZV9zeXNyb290IgorQklOVVRJTFNERVBfY2xhc3MtbmF0aXZlc2RrID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wYWNrYWdlW2RlcGVuZHNdICs9ICIke0JJTlVUSUxTREVQfSIKKworIyBCaW5hcnkgbG9jYWxlcyBhcmUgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgaWYgRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTgorIyBpcyBzZXQuIFRoZSBpZGVhIGlzIHRvIGF2b2lkIHJ1bm5pbmcgbG9jYWxlZGVmIG9uIHRoZSB0YXJnZXQgKGF0IGZpcnN0IGJvb3QpCisjIHRvIGRlY3JlYXNlIGluaXRpYWwgYm9vdCB0aW1lIGFuZCBhdm9pZCBsb2NhbGVkZWYgYmVpbmcga2lsbGVkIGJ5IHRoZSBPT00KKyMga2lsbGVyIHdoaWNoIHVzZWQgdG8gZWZmZWN0aXZlbHkgYnJlYWsgaTE4biBvbiBtYWNoaW5lcyB3aXRoIDwgMTI4TUIgUkFNLgorCisjIGRlZmF1bHQgdG8gZGlzYWJsZWQgCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OID89ICIwIgorRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTl9wbi1uYXRpdmVzZGstZ2xpYmMtbG9jYWxlID0gIjAiCisKKyNlbmFibGUgbG9jYWxlIGdlbmVyYXRpb24gb24gdGhlc2UgYXJjaGVzCisjIEJJTkFSWV9MT0NBTEVfQVJDSEVTIGlzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVndWxhciBleHByZXNzaW9ucworQklOQVJZX0xPQ0FMRV9BUkNIRVMgPz0gImFybS4qIGFhcmNoNjQgaVszLTZdODYgeDg2XzY0IHBvd2VycGMgbWlwcyBtaXBzNjQiCisKKyMgc2V0ICIxIiB0byB1c2UgY3Jvc3MtbG9jYWxlZGVmIGZvciBsb2NhbGUgZ2VuZXJhdGlvbgorIyBzZXQgIjAiIGZvciBxZW11IGVtdWxhdGlvbiBvZiBuYXRpdmUgbG9jYWxlZGVmIGZvciBsb2NhbGUgZ2VuZXJhdGlvbgorTE9DQUxFX0dFTkVSQVRJT05fV0lUSF9DUk9TUy1MT0NBTEVERUYgPSAiMSIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJjLWxvY2FsZSIKKworUEFDS0FHRVMgPSAibG9jYWxlZGVmICR7UE59LWRiZyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebG9jYWxlLWJhc2UtLiogXAorICAgICAgICAgICAgICAgICAgICBeZ2xpYmMtZ2NvbnYtLiogXmdsaWJjLWNoYXJtYXAtLiogXmdsaWJjLWxvY2FsZWRhdGEtLiogXmdsaWJjLWJpbmFyeS1sb2NhbGVkYXRhLS4qIFwKKyAgICAgICAgICAgICAgICAgICAgXmdsaWJjLWdjb252LS4qICBeZ2xpYmMtY2hhcm1hcC0uKiAgXmdsaWJjLWxvY2FsZWRhdGEtLiogIF5nbGliYy1iaW5hcnktbG9jYWxlZGF0YS0uKiBcCisgICAgICAgICAgICAgICAgICAgIF4ke01MUFJFRklYfWdsaWJjLWdjb252JCIKKworIyBDcmVhdGUgYSBnbGliYy1iaW5hcmllcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tYmluYXJpZXMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tYmluYXJpZXMiCitSUkVDT01NRU5EU18ke0JQTn0tYmluYXJpZXMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1iaW5hcnkiKSAhPSAtMV0pfSIKKworIyBDcmVhdGUgYSBnbGliYy1jaGFybWFwcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tY2hhcm1hcHMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tY2hhcm1hcHMiCitSUkVDT01NRU5EU18ke0JQTn0tY2hhcm1hcHMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1jaGFybWFwIikgIT0gLTFdKX0iCisKKyMgQ3JlYXRlIGEgZ2xpYmMtZ2NvbnZzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1nY29udnMgPSAiMSIKK1BBQ0tBR0VTICs9ICIke0JQTn0tZ2NvbnZzIgorUlJFQ09NTUVORFNfJHtCUE59LWdjb252cyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWdjb252IikgIT0gLTFdKX0iCisKKyMgQ3JlYXRlIGEgZ2xpYmMtbG9jYWxlZGF0YXMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWxvY2FsZWRhdGFzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWxvY2FsZWRhdGFzIgorUlJFQ09NTUVORFNfJHtCUE59LWxvY2FsZWRhdGFzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtbG9jYWxlZGF0YSIpICE9IC0xXSl9IgorCitERVNDUklQVElPTl9sb2NhbGVkZWYgPSAiZ2xpYmM6IGNvbXBpbGUgbG9jYWxlIGRlZmluaXRpb24gZmlsZXMiCisKKyMgZ2xpYmMtZ2NvbnYgaXMgZHluYW1pY2FsbHkgYWRkZWQgaW50byBQQUNLQUdFUywgdGh1cworIyBGSUxFU19nbGliYy1nY29udiB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIGluIG11bHRpbGliLgorIyBFeHBsaWNpdGx5IGFkZCAke01MUFJFRklYfSBmb3IgRklMRVNfZ2xpYmMtZ2NvbnYuCitGSUxFU18ke01MUFJFRklYfWdsaWJjLWdjb252ID0gIiR7bGliZGlyfS9nY29udi8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2NvbnYvLmRlYnVnLyoiCitGSUxFU19sb2NhbGVkZWYgPSAiJHtiaW5kaXJ9L2xvY2FsZWRlZiIKKworTE9DQUxFVFJFRVNSQyA9ICIke1NUQUdJTkdfSU5DRElSfS9nbGliYy1sb2NhbGUtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2RvX2luc3RhbGwgKCkgeworCW1rZGlyIC1wICR7RH0ke2JpbmRpcn0gJHtEfSR7ZGF0YWRpcn0gJHtEfSR7bGliZGlyfQorCWlmIFsgLW4gIiQobHMgJHtMT0NBTEVUUkVFU1JDfS8ke2JpbmRpcn0pIiBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtiaW5kaXJ9LyogJHtEfSR7YmluZGlyfQorCWZpCisJaWYgWyAtbiAiJChscyAke0xPQ0FMRVRSRUVTUkN9LyR7bG9jYWxlZGlyfSkiIF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7bG9jYWxlZGlyfQorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7bG9jYWxlZGlyfS8qICR7RH0ke2xvY2FsZWRpcn0KKwlmaQorCWlmIFsgLWUgJHtMT0NBTEVUUkVFU1JDfS8ke2xpYmRpcn0vZ2NvbnYgXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7bGliZGlyfS9nY29udiAke0R9JHtsaWJkaXJ9CisJZmkKKwlpZiBbIC1lICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9pMThuIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2kxOG4gJHtEfSR7ZGF0YWRpcn0KKwlmaQorCWlmIFsgLWUgJHtMT0NBTEVUUkVFU1JDfS8ke2RhdGFkaXJ9L2xvY2FsZSBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9sb2NhbGUgJHtEfSR7ZGF0YWRpcn0KKwlmaQorCWNob3duIHJvb3Qucm9vdCAtUiAke0R9CisJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS9TVVBQT1JURUQgJHtXT1JLRElSfQorfQorCitpbmhlcml0IGxpYmMtcGFja2FnZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3MDJlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjIyLmJiCkBAIC0wLDAgKzEgQEAKK3JlcXVpcmUgZ2xpYmMtbG9jYWxlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyYjA3OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZS5pbmMKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZSBnbGliYy1jb2xsYXRlcmFsLmluYworCitTVU1NQVJZID0gIm10cmFjZSB1dGlsaXR5IHByb3ZpZGVkIGJ5IGdsaWJjIgorREVTQ1JJUFRJT04gPSAibXRyYWNlIHV0aWxpdHkgcHJvdmlkZWQgYnkgZ2xpYmMiCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIgorUlBST1ZJREVTXyR7UE59ID0gImxpYmMtbXRyYWNlIgorCitTUkMgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kIC1tIDA3NTUgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1NSQ30vbXRyYWNlICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZV8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjliYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMi5iYgpAQCAtMCwwICsxIEBACityZXF1aXJlIGdsaWJjLW10cmFjZS5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW9wdGlvbnMuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtb3B0aW9ucy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMjdmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW9wdGlvbnMuaW5jCkBAIC0wLDAgKzEsMTYyIEBACitkZWYgZ2xpYmNfY2ZnKGZlYXR1cmUsIHRva2VucywgY25mKToKKyAgICBpZiB0eXBlKHRva2VucykgPT0gdHlwZSgiIik6CisgICAgICAgIHRva2VucyA9IFt0b2tlbnNdCisgICAgaWYgZmVhdHVyZToKKyAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorICAgIGVsc2U6CisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICBjbmYuZXh0ZW5kKFt0b2tlbiArICc9biddKQorICAgICAgICAgICAgaWYgdG9rZW4gPT0gJ09QVElPTl9FR0xJQkNfTlNTV0lUQ0gnOgorICAgICAgICAgICAgICAgIGNuZi5leHRlbmQoWyJPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRz1cIiR7U30vbnNzL25zc3dpdGNoLmNvbmZcIiJdKQorICAgICAgICAgICAgICAgIGNuZi5leHRlbmQoWyJPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUz1cIiR7U30vbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9uc1wiIl0pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBnbGliYyBvcHRpb25zIHNldHRpbmdzCitkZWYgZmVhdHVyZXNfdG9fZ2xpYmNfc2V0dGluZ3MoZCk6CisgICAgY25mID0gKFtdKQorCisgICAgaXB2NCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGlwdjYgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2JhY2t0cmFjZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1iYWNrdHJhY2UnLCBUcnVlLCBGYWxzZSwgZCkgCisgICAgbGliY19iaWdfbWFjcm9zID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWJpZy1tYWNyb3MnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2JzZCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1ic2QnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2N4eF90ZXN0cyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jeHgtdGVzdHMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NhdGdldHMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY2F0Z2V0cycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY2hhcnNldHMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY2hhcnNldHMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NyeXB0ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jcnlwdF91ZmMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3J5cHQtdWZjJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19kYl9hbGlhc2VzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWRiLWFsaWFzZXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2VudnogPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZW52eicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZmN2dCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mY3Z0JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mbXRtc2cgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZm10bXNnJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19mc3RhYiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mc3RhYicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZnRyYXZlcnNlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZ0cmF2ZXJzZScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZ2V0bG9naW4gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZ2V0bG9naW4nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2lkbiA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1pZG4nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2luZXRfYW5sID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWluZXQtYW5sJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19saWJtID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxpYm0nLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2xvY2FsZXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbG9jYWxlX2NvZGUgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX21lbXVzYWdlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLW1lbXVzYWdlJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19uaXMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbmlzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19uc3N3aXRjaCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1uc3N3aXRjaCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcmNtZCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1yY21kJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19ydGxkX2RlYnVnID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXJ0bGQtZGVidWcnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3NwYXduID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXNwYXduJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19zdHJlYW1zID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXN0cmVhbXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3N1bnJwYyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zdW5ycGMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3V0bXAgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtdXRtcCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfdXRtcHggPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtdXRtcHgnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3dvcmRleHAgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtd29yZGV4cCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtY2xhbmctd2NoYXInLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X3JlZ2V4cCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1yZWdleHAnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X3JlZ2V4cF9nbGliYyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC1yZWdleHAtZ2xpYmMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X3djaGFyX2lvID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LXdjaGFyLWlvJywgVHJ1ZSwgRmFsc2UsIGQpCisKKyAgICAjIGFycmFuZ2UgdGhlIGRlcGVuZGVuY2llcyBhbW9uZyBnbGliYyBjb25maWd1YWJsZSBvcHRpb25zIGFjY29yZGluZyB0byBmaWxlIG9wdGlvbi1ncm91cHMuZGVmIGZyb20gZ2xpYmMgc291cmNlIGNvZGUKKyAgICBuZXdfZGVwID0gVHJ1ZQorICAgIHdoaWxlIG5ld19kZXA6CisgICAgICAgIG5ld19kZXAgPSBGYWxzZQorCisgICAgICAgIGlmIGlwdjYgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgaXB2NCBhbmQgbm90IGxpYmNfbnNzd2l0Y2g6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19uc3N3aXRjaCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2N4eF90ZXN0czoKKyAgICAgICAgICAgIGlmIG5vdCBsaWJjX3Bvc2l4X3djaGFyX2lvOgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgbGliY19wb3NpeF93Y2hhcl9pbyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBsaWJjX2xpYm06CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaWJjX2xpYm0gPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19jYXRnZXRzIGFuZCBub3QgbGliY19sb2NhbGVfY29kZToKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX2xvY2FsZV9jb2RlID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfY3J5cHRfdWZjIGFuZCBub3QgbGliY19jcnlwdDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX2NyeXB0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfZ2V0bG9naW4gYW5kIG5vdCBsaWJjX3V0bXA6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY191dG1wID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfaW5ldF9hbmwgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19sb2NhbGVfY29kZSBhbmQgbm90IGxpYmNfcG9zaXhfY2xhbmdfd2NoYXI6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19wb3NpeF9jbGFuZ193Y2hhciA9IFRydWUKKworICAgICAgICBpZiBsaWJjX25pczoKKyAgICAgICAgICAgIGlmIG5vdCBpcHY0OgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgaXB2NCA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBsaWJjX3N1bnJwYzoKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpYmNfc3VucnBjID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfcmNtZCBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3N1bnJwYyBhbmQgbm90IGlwdjQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgaXB2NCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3V0bXB4IGFuZCBub3QgbGliY191dG1wOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfdXRtcCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3Bvc2l4X3JlZ2V4cF9nbGliYyBhbmQgbm90IGxpYmNfcG9zaXhfcmVnZXhwOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfcG9zaXhfcmVnZXhwID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfcG9zaXhfd2NoYXJfaW8gYW5kIG5vdCBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIgPSBUcnVlCisKKyAgICBnbGliY19jZmcoaXB2NiwgJ09QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfYmFja3RyYWNlLCAnT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfYmlnX21hY3JvcywgJ09QVElPTl9FR0xJQkNfQklHX01BQ1JPUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19ic2QsICdPUFRJT05fRUdMSUJDX0JTRCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jeHhfdGVzdHMsICdPUFRJT05fRUdMSUJDX0NYWF9URVNUUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jYXRnZXRzLCAnT1BUSU9OX0VHTElCQ19DQVRHRVRTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NoYXJzZXRzLCAnT1BUSU9OX0VHTElCQ19DSEFSU0VUUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jcnlwdCwgJ09QVElPTl9FR0xJQkNfQ1JZUFQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY3J5cHRfdWZjLCAnT1BUSU9OX0VHTElCQ19DUllQVF9VRkMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZGJfYWxpYXNlcywgJ09QVElPTl9FR0xJQkNfREJfQUxJQVNFUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19lbnZ6LCAnT1BUSU9OX0VHTElCQ19FTlZaJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2ZjdnQsICdPUFRJT05fRUdMSUJDX0ZDVlQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZm10bXNnLCAnT1BUSU9OX0VHTElCQ19GTVRNU0cnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZnN0YWIsICdPUFRJT05fRUdMSUJDX0ZTVEFCJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2Z0cmF2ZXJzZSwgJ09QVElPTl9FR0xJQkNfRlRSQVZFUlNFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2dldGxvZ2luLCAnT1BUSU9OX0VHTElCQ19HRVRMT0dJTicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19pZG4sICdPUFRJT05fRUdMSUJDX0lETicsIGNuZikKKyAgICBnbGliY19jZmcoaXB2NCwgJ09QVElPTl9FR0xJQkNfSU5FVCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19pbmV0X2FubCwgJ09QVElPTl9FR0xJQkNfSU5FVF9BTkwnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbGlibSwgJ09QVElPTl9FR0xJQkNfTElCTScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19sb2NhbGVzLCAnT1BUSU9OX0VHTElCQ19MT0NBTEVTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2xvY2FsZV9jb2RlLCAnT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19tZW11c2FnZSwgJ09QVElPTl9FR0xJQkNfTUVNVVNBR0UnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbmlzLCAnT1BUSU9OX0VHTElCQ19OSVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbnNzd2l0Y2gsICdPUFRJT05fRUdMSUJDX05TU1dJVENIJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3JjbWQsICdPUFRJT05fRUdMSUJDX1JDTUQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcnRsZF9kZWJ1ZywgJ09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19zcGF3biwgJ09QVElPTl9FR0xJQkNfU1BBV04nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfc3RyZWFtcywgJ09QVElPTl9FR0xJQkNfU1RSRUFNUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19zdW5ycGMsICdPUFRJT05fRUdMSUJDX1NVTlJQQycsIGNuZikKKyAgICBnbGliY19jZmcobGliY191dG1wLCAnT1BUSU9OX0VHTElCQ19VVE1QJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3V0bXB4LCAnT1BUSU9OX0VHTElCQ19VVE1QWCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY193b3JkZXhwLCAnT1BUSU9OX0VHTElCQ19XT1JERVhQJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X2NsYW5nX3djaGFyLCAnT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVInLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfcmVnZXhwLCAnT1BUSU9OX1BPU0lYX1JFR0VYUCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF9yZWdleHBfZ2xpYmMsICdPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X3djaGFyX2lvLCAnT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8nLCBjbmYpCisKKyAgICByZXR1cm4gIlxuIi5qb2luKGNuZikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2MDM2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsMjE0IEBACisjCisjIEZvciBub3csIHdlIHdpbGwgc2tpcCBidWlsZGluZyBvZiBhIGdjYyBwYWNrYWdlIGlmIGl0IGlzIGEgdWNsaWJjIG9uZQorIyBhbmQgb3VyIGJ1aWxkIGlzIG5vdCBhIHVjbGliYyBvbmUsIGFuZCB3ZSBza2lwIGEgZ2xpYmMgb25lIGlmIG91ciBidWlsZAorIyBpcyBhIHVjbGliYyBidWlsZC4KKyMKKyMgU2VlIHRoZSBub3RlIGluIGdjYy9nY2NfMy40LjAub2UKKyMKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgYmIsIHJlCisgICAgdWNfb3MgPSAocmUubWF0Y2goJy4qdWNsaWJjKicsIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSkgIT0gTm9uZSkKKyAgICBpZiB1Y19vczoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIHRhcmdldCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkpCit9CisKKyMgU2V0IHRoaXMgdG8gemVybyBpZiB5b3UgZG9uJ3Qgd2FudCBsZGNvbmZpZyBpbiB0aGUgb3V0cHV0IHBhY2thZ2UKK1VTRV9MRENPTkZJRyA/PSAiMSIKKworSU5ISUJJVF9TWVNST09UX1NUUklQID0gIjEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyBjYXRjaHNlZ3Ygc2xuIG5zY2QgbGRkIHR6Y29kZSAke1BOfS11dGlscyBnbGliYy10aHJlYWQtZGIgJHtQTn0tcGljIGxpYmNpZG4gbGlibWVtdXNhZ2UgbGlic2VnZmF1bHQgJHtQTn0tcGNwcm9maWxlIGxpYnNvdHJ1c3MgJHtQTn0gZ2xpYmMtZXh0cmEtbnNzICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIgorCisjIFRoZSBsZC5zbyBpbiB0aGlzIGdsaWJjIHN1cHBvcnRzIHRoZSBHTlVfSEFTSAorUlBST1ZJREVTXyR7UE59ID0gImVnbGliYyBydGxkKEdOVV9IQVNIKSIKK1JQUk9WSURFU18ke1BOfS11dGlscyA9ICJlZ2xpYmMtdXRpbHMiCitSUFJPVklERVNfJHtQTn0tbXRyYWNlID0gImVnbGliYy1tdHJhY2UgbGliYy1tdHJhY2UiCitSUFJPVklERVNfJHtQTn0tcGljID0gImVnbGliYy1waWMiCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImVnbGliYy1kZXYgbGliYzYtZGV2IHZpcnR1YWwtbGliYy1kZXYiCitSUFJPVklERVNfJHtQTn0tc3RhdGljZGV2ID0gImVnbGliYy1zdGF0aWNkZXYiCitSUFJPVklERVNfJHtQTn0tZG9jID0gImVnbGliYy1kb2MiCitSUFJPVklERVNfZ2xpYmMtZXh0cmEtbnNzID0gImVnbGliYy1leHRyYS1uc3MiCitSUFJPVklERVNfZ2xpYmMtdGhyZWFkLWRiID0gImVnbGliYy10aHJlYWQtZGIiCitSUFJPVklERVNfJHtQTn0tcGNwcm9maWxlID0gImVnbGliYy1wY3Byb2ZpbGUiCitSUFJPVklERVNfJHtQTn0tZGJnID0gImVnbGliYy1kYmciCitsaWJjX2Jhc2VsaWJzID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0LSouc28gJHtiYXNlX2xpYmRpcn0vbGliYy5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmMtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJtKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm0tKi5zbyAke2Jhc2VfbGliZGlyfS9saWJtdmVjLSouc28gJHtiYXNlX2xpYmRpcn0vbGQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2LSouc28gJHtiYXNlX2xpYmRpcn0vbGlicnQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicnQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJ1dGlsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc2wqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNsLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNzX2ZpbGVzKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zc19maWxlcy0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc19jb21wYXQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNzX2NvbXBhdC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc19kbnMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNzX2Rucy0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmRsLSouc28gJHtiYXNlX2xpYmRpcn0vbGliYW5sKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmFubC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYkJyb2tlbkxvY2FsZSouc28uKiAke2Jhc2VfbGliZGlyfS9saWJCcm9rZW5Mb2NhbGUtKi5zbyIKK2xpYmNfYmFzZWxpYnNfYXBwZW5kX2FhcmNoNjQgPSAiIC9saWIvbGQtbGludXgtYWFyY2g2NCouc28uMSIKK0lOU0FORV9TS0lQXyR7UE59X2FwcGVuZF9hYXJjaDY0ID0gIiBsaWJkaXIiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliY19iYXNlbGlic30gJHtsaWJleGVjZGlyfS8qICR7QGJhc2VfY29uZGl0aW9uYWwoJ1VTRV9MRENPTkZJRycsICcxJywgJyR7YmFzZV9zYmluZGlyfS9sZGNvbmZpZyAke3N5c2NvbmZkaXJ9L2xkLnNvLmNvbmYnLCAnJywgZCl9IgorRklMRVNfbGRkID0gIiR7YmluZGlyfS9sZGQiCitGSUxFU19saWJzZWdmYXVsdCA9ICIke2Jhc2VfbGliZGlyfS9saWJTZWdGYXVsdCoiCitGSUxFU19saWJjaWRuID0gIiR7YmFzZV9saWJkaXJ9L2xpYmNpZG4tKi5zbyAke2Jhc2VfbGliZGlyfS9saWJjaWRuLnNvLioiCitGSUxFU19saWJtZW11c2FnZSA9ICIke2Jhc2VfbGliZGlyfS9saWJtZW11c2FnZS5zbyIKK0ZJTEVTX2dsaWJjLWV4dHJhLW5zcyA9ICIke2Jhc2VfbGliZGlyfS9saWJuc3NfKi0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc18qLnNvLioiCitGSUxFU19zbG4gPSAiJHtiYXNlX3NiaW5kaXJ9L3NsbiIKK0ZJTEVTXyR7UE59LXBpYyA9ICIke2xpYmRpcn0vKl9waWMuYSAke2xpYmRpcn0vKl9waWMubWFwICR7bGliZGlyfS9saWJjX3BpYy8qLm8iCitGSUxFU19saWJzb3RydXNzID0gIiR7bGliZGlyfS9hdWRpdC9zb3RydXNzLWxpYi5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3JwY2dlbiAke2xpYmRpcn0vKl9ub25zaGFyZWQuYSAke2Jhc2VfbGliZGlyfS8qX25vbnNoYXJlZC5hICR7YmFzZV9saWJkaXJ9LyoubyAke2RhdGFkaXJ9L2FjbG9jYWwiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5hIgorRklMRVNfbnNjZCA9ICIke3NiaW5kaXJ9L25zY2QqICR7c3lzY29uZmRpcn0vaW5pdC5kL25zY2QgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uc2NkKiAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvbnNjZC5jb25mIFwKKyAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9uc2NkLmNvbmYgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OF9uc2NkICR7bG9jYWxzdGF0ZWRpcn0vZGIvbnNjZCIKK0ZJTEVTXyR7UE59LW10cmFjZSA9ICIke2JpbmRpcn0vbXRyYWNlIgorRklMRVNfdHpjb2RlID0gIiR7YmluZGlyfS90enNlbGVjdCAke3NiaW5kaXJ9L3ppYyAke3NiaW5kaXJ9L3pkdW1wIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9LyovLmRlYnVnICR7bGliZGlyfS9hdWRpdC8uZGVidWciCitGSUxFU19jYXRjaHNlZ3YgPSAiJHtiaW5kaXJ9L2NhdGNoc2VndiIKK1JERVBFTkRTX2NhdGNoc2VndiA9ICJsaWJzZWdmYXVsdCIKK0ZJTEVTXyR7UE59LXBjcHJvZmlsZSA9ICIke2Jhc2VfbGliZGlyfS9saWJwY3Byb2ZpbGUuc28iCitGSUxFU19nbGliYy10aHJlYWQtZGIgPSAiJHtiYXNlX2xpYmRpcn0vbGlidGhyZWFkX2RiLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidGhyZWFkX2RiLSouc28iCitSUFJPVklERVNfJHtQTn0tZGV2ICs9ICJsaWJjLWRldiIKK1JQUk9WSURFU18ke1BOfS1zdGF0aWNkZXYgKz0gImxpYmMtc3RhdGljZGV2IgorCitTVU1NQVJZX3NsbiA9ICJUaGUgc3RhdGljIGxuIgorREVTQ1JJUFRJT05fc2xuID0gIlNpbWlsYXIgdG8gdGhlICdsbicgdXRpbGl0eSwgYnV0IHN0YXRpY2FsbHkgbGlua2VkLiAgc2xuIGlzIHVzZWZ1bCB0byBtYWtlIHN5bWJvbGljIGxpbmtzIHRvIGR5bmFtaWMgbGlicmFyaWVzIGlmIHRoZSBkeW5hbWljIGxpbmtpbmcgc3lzdGVtLCBmb3Igc29tZSByZWFzb24sIGlzIG5vdCBmdW5jdGlvbmFsLiIKK1NVTU1BUllfbnNjZCA9ICJOYW1lIHNlcnZpY2UgY2FjaGUgZGFlbW9uIgorREVTQ1JJUFRJT05fbnNjZCA9ICJuc2NkLCBuYW1lIHNlcnZpY2UgY2FjaGUgZGFlbW9uLCBjYWNoZXMgbmFtZSBzZXJ2aWNlIGxvb2t1cHMgZm9yIHRoZSBwYXNzd2QsIGdyb3VwIGFuZCBob3N0cyBpbmZvcm1hdGlvbi4gIEl0IGNhbiBkYW1hdGljYWxseSBpbXByb3ZpZGUgcGVyZm9ybWFuY2Ugd2l0aCByZW1vdGUsIHN1Y2ggYXMgTklTIG9yIE5JUyssIG5hbWUgc2VydmljZXMuIgorU1VNTUFSWV9nbGliYy1leHRyYS1uc3MgPSAiaGVzaW9kLCBOSVMgYW5kIE5JUysgbnNzIGxpYnJhcmllcyIKK0RFU0NSSVBUSU9OX2dsaWJjLWV4dHJhLW5zcyA9ICJnbGliYzogbmlzLCBuaXNwbHVzIGFuZCBoZXNpb2Qgc2VhcmNoIHNlcnZpY2VzLiIKK1NVTU1BUllfbGRkID0gInByaW50IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyIKK0RFU0NSSVBUSU9OX2xkZCA9ICIke2JpbmRpcn0vbGRkIHByaW50cyBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggcHJvZ3JhbSBvciBzaGFyZWQgbGlicmFyeSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4iCitTVU1NQVJZXyR7UE59LXV0aWxzID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIHByb3ZpZGVkIGJ5IGdsaWJjIgorREVTQ1JJUFRJT05fJHtQTn0tdXRpbHMgPSAiTWlzY2VsbGFuZW91cyB1dGlsaXRpZXMgaW5jbHVkaW5nIGdldGNvbmYsIGljb252LCBsb2NhbGUsIGdlbmNhdCwgcnBjZ2VuLCAuLi4iCitERVNDUklQVElPTl9saWJzb3RydXNzID0gIkxpYnJhcnkgdG8gc3VwcG9ydCBzb3RydXNzIHdoaWNoIHRyYWNlcyBjYWxscyB0aHJvdWdoIFBMVHMiCitERVNDUklQVElPTl90emNvZGUgPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKKworaW5oZXJpdCBsaWJjLWNvbW1vbiBtdWx0aWxpYl9oZWFkZXIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2xvY2FsdGltZQorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfQorCisJIyByZW1vdmUgZW1wdHkgZ2xpYmMgZGlyCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2dsaWJjIC1hICEgLWUgJHtEfSR7bGliZGlyfS9nbGliYy9wdF9jaG93biBdOyB0aGVuCisJCXJtZGlyICR7RH0ke2xpYmRpcn0vZ2xpYmMKKwlmaQorCW9lX211bHRpbGliX2hlYWRlciBiaXRzL3N5c2NhbGwuaAorCisJaWYgWyAtZiAke0R9JHtiaW5kaXJ9L210cmFjZSBdOyB0aGVuCisJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnIC1lICcycyxleGVjLipwZXJsLGV4ZWMgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vbXRyYWNlCisJZmkKKwlybSAtcmYgJHtEfSR7aW5jbHVkZWRpcn0vcnBjc3ZjL3JxdW90YSoKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorCisJaWYgWyAiJHtVU0VfTERDT05GSUd9IiAhPSAiMSIgXTsgdGhlbgorCQkjIFdlIHdvbid0IHNoaXAgdGhlc2UgZmlsZXMgKHNlZSBGSUxFUyBhYm92ZSkgc28gbGV0J3Mgbm90IGluc3RhbGwgdGhlbQorCQlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9sZC5zby5jb25mCisJCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbGRjb25maWcKKwkJIyBUaGlzIGRpcmVjdG9yeSB3aWxsIGJlIGVtcHR5IG5vdyBzbyByZW1vdmUgaXQgdG9vLgorCQkjIEJ1dCBjaGVjayB3aGV0aGVyIGl0IGV4aXN0cyBmaXJzdCwgc2luY2UgaXQgd29uJ3QgZm9yIGdsaWJjLWluaXRpYWwuCisJCWlmIFsgLWQgJHtEfSR7c3lzY29uZmRpcn0gXTsgdGhlbgorCQkJcm1kaXIgJHtEfSR7c3lzY29uZmRpcn0KKwkJZmkKKwlmaQorCisJaWYgZWNobyAke1BOfXxncmVwIC1xICJnbGliYy1pbml0aWFsIjsgdGhlbgorCQlyZXR1cm4KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2RiL25zY2QKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9uc2NkL25zY2QuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbnNjZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L25zY2QvbnNjZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L25zY2QuY29uZgorCXNlZCAtaSAicyVkYWVtb24lc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMlZyIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25zY2QKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9uc2NkL25zY2Quc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCQllY2hvICJkIC9ydW4vbnNjZCA3NTUgcm9vdCByb290IC0iIFwKKwkJCT4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9uc2NkLmNvbmYKKwllbHNlCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwkJZWNobyAiZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9uc2NkIG5vbmUiIFwKKwkJCT4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOThfbnNjZAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2FhcmNoNjQgKCkgeworCWlmIFsgIiR7YmFzZV9saWJkaXJ9IiAhPSAiL2xpYiIgXSA7IHRoZW4KKwkJIyBUaGUgYWFyY2g2NCBBQkkgc2F5cyB0aGUgZHluYW1pYyBsaW5rZXIgLW11c3QtIGJlIC9saWIvbGQtbGludXgtYWFyY2g2NFtfYmVdLnNvLjEKKwkJaW5zdGFsbCAtZCAke0R9L2xpYgorCQlpZiBbIC1lICR7RH0ke2Jhc2VfbGliZGlyfS9sZC1saW51eC1hYXJjaDY0LnNvLjEgXTsgdGhlbgorCQkJbG4gLXMgJHtAYmFzZV9wYXRoX3JlbGF0aXZlKCcvbGliJywgJyR7YmFzZV9saWJkaXJ9Jyl9L2xkLWxpbnV4LWFhcmNoNjQuc28uMSBcCisJCQkJJHtEfS9saWIvbGQtbGludXgtYWFyY2g2NC5zby4xCisJCWVsaWYgWyAtZSAke0R9JHtiYXNlX2xpYmRpcn0vbGQtbGludXgtYWFyY2g2NF9iZS5zby4xIF07IHRoZW4KKwkJCWxuIC1zICR7QGJhc2VfcGF0aF9yZWxhdGl2ZSgnL2xpYicsICcke2Jhc2VfbGliZGlyfScpfS9sZC1saW51eC1hYXJjaDY0X2JlLnNvLjEgXAorCQkJCSR7RH0vbGliL2xkLWxpbnV4LWFhcmNoNjRfYmUuc28uMQorCQlmaQorCWZpCit9CisKK2RvX2luc3RhbGxfbG9jYWxlICgpIHsKKwlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nbGliYy1sb2NhbGUtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlpbnN0YWxsIC1kICR7ZGVzdH0ke2Jhc2VfbGliZGlyfSAke2Rlc3R9JHtiaW5kaXJ9ICR7ZGVzdH0ke2xpYmRpcn0gJHtkZXN0fSR7ZGF0YWRpcn0KKwlpZiBbICIke2Jhc2VfbGliZGlyfSIgIT0gIiR7bGliZGlyfSIgXTsgdGhlbgorCQljcCAtZnBQUiAke0R9JHtiYXNlX2xpYmRpcn0vKiAke2Rlc3R9JHtiYXNlX2xpYmRpcn0KKwlmaQorCWlmIFsgLWUgJHtEfSR7YmluZGlyfS9sb2NhbGVkZWYgXTsgdGhlbgorCQltdiAtZiAke0R9JHtiaW5kaXJ9L2xvY2FsZWRlZiAke2Rlc3R9JHtiaW5kaXJ9CisJZmkKKwlpZiBbIC1lICR7RH0ke2xpYmRpcn0vZ2NvbnYgXTsgdGhlbgorCQltdiAtZiAke0R9JHtsaWJkaXJ9L2djb252ICR7ZGVzdH0ke2xpYmRpcn0KKwlmaQorCWlmIFsgLWUgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiBdOyB0aGVuCisJCWNwIC1mcFBSICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgJHtkZXN0fSR7ZXhlY19wcmVmaXh9CisJZmkKKwlpZiBbIC1lICR7RH0ke2RhdGFkaXJ9L2kxOG4gXTsgdGhlbgorCQltdiAke0R9JHtkYXRhZGlyfS9pMThuICR7ZGVzdH0ke2RhdGFkaXJ9CisJZmkKKwljcCAtZnBQUiAke0R9JHtkYXRhZGlyfS8qICR7ZGVzdH0ke2RhdGFkaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2xvY2FsZS8KKwljcCAtZnBQUiAke1dPUktESVJ9L1NVUFBPUlRFRCAke2Rlc3R9Cit9CisKK2FkZHRhc2sgZG9faW5zdGFsbF9sb2NhbGUgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcG9wdWxhdGVfc3lzcm9vdCBkb19wYWNrYWdlCisKK2Jhc2hzY3JpcHRzID0gIm10cmFjZSBzb3RydXNzIHh0cmFjZSIKKworZG9fZXZhY3VhdGVfc2NyaXB0cyAoKSB7CisJdGFyZ2V0PSR7RH0ke2luY2x1ZGVkaXJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30KKwlta2RpciAtcCAkdGFyZ2V0CisJZm9yIGkgaW4gJHtiYXNoc2NyaXB0c307IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQljcCAke0R9JHtiaW5kaXJ9LyRpICR0YXJnZXQvCisJCWZpCisJZG9uZQorfQorCithZGR0YXNrIGV2YWN1YXRlX3NjcmlwdHMgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcG9wdWxhdGVfc3lzcm9vdCBkb19wYWNrYWdlCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAiZ2xpYmNfcGFja2FnZV9wcmVwcm9jZXNzIgorCitnbGliY19wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCXJtIC1yZiAke1BLR0R9LyR7aW5jbHVkZWRpcn0vZ2xpYmMtbG9jYWxlLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJcm0gLXJmICR7UEtHRH0vJHtpbmNsdWRlZGlyfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJZm9yIGkgaW4gJHtiYXNoc2NyaXB0c307IGRvCisJICAgIHJtIC1mICR7UEtHRH0ke2JpbmRpcn0vJGkKKwlkb25lCisJcm0gLXJmICR7UEtHRH0vJHtsb2NhbGVkaXJ9CisJaWYgWyAiJHtsaWJkaXJ9IiAhPSAiJHtleGVjX3ByZWZpeH0vbGliIiBdOyB0aGVuCisJCSMgVGhpcyBkaXIgb25seSBleGlzdHMgdG8gaG9sZCBsb2NhbGVzCisJCXJtIC1yZiAke1BLR0R9JHtleGVjX3ByZWZpeH0vbGliCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X25zY2QgKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9uc2NkLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CitDT05GRklMRVNfbnNjZD0iJHtzeXNjb25mZGlyfS9uc2NkLmNvbmYiCisKK1NZU1RFTURfUEFDS0FHRVMgPSAibnNjZCIKK1NZU1RFTURfU0VSVklDRV9uc2NkID0gIm5zY2Quc2VydmljZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0cy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwNjc3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK2luY2x1ZGUgZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKworU1VNTUFSWSA9ICJ1dGlsaXR5IHNjcmlwdHMgcHJvdmlkZWQgYnkgZ2xpYmMiCitERVNDUklQVElPTiA9ICJ1dGlsaXR5IHNjcmlwdHMgcHJvdmlkZWQgYnkgZ2xpYmMiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIGdsaWJjLW10cmFjZSIKKworU1JDID0gIiR7U1RBR0lOR19JTkNESVJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2Jhc2hzY3JpcHRzID0gInNvdHJ1c3MgeHRyYWNlIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtiaW5kaXJ9CisJZm9yIGkgaW4gJHtiYXNoc2NyaXB0c307IGRvCisJCWluc3RhbGwgLW0gMDc1NSAke1NSQ30vJGkgJHtEfSR7YmluZGlyfS8KKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4OWJkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHNfMi4yMi5iYgpAQCAtMCwwICsxIEBACityZXF1aXJlIGdsaWJjLXNjcmlwdHMuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy10ZXN0aW5nLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXRlc3RpbmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmJmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy10ZXN0aW5nLmluYwpAQCAtMCwwICsxLDk2IEBACitkb19jb21waWxlX2FwcGVuZCAoKSB7CisJIyBub3cgZ2VuZXJhdGUgc2NyaXB0IHRvIGRyaXZlIHRlc3RpbmcKKwllY2hvICIjIS91c3IvYmluL2VudiBzaCIgPiR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZXQgPj4gJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCSMgcHJ1bmUgb3V0IHRoZSB1bm5lZWRlZCB2YXJzCisJc2VkIC1pIC1lICIvXkJBU0gvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15VU0VSL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eT1BUL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eRElSU1RBQ0svZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15FVUlEL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eRlVOQ05BTUUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15HUk9VUFMvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15IT1NUL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eSE9NRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXklGUy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkxDX0FMTC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkxPR05BTUUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15NQUNIVFlQRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXk9TVFlQRS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBJUEUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15TSEVMTC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXicvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15VSUQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15URVJNL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUEFUQ0hfR0VUL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUEtHXy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBPU0lYTFlfL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUFBJRC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBTNC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlEvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15TSExWTC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlNUQUdJTkcvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15MRF9MSUJSQVJZX1BBVEgvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QU0VVRE8vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCisJIyBwb2ludCB0byByZWFsIHN5c3Jvb3Qgbm90IHRoZSB0b29sY2hhaW4gYm9vdHN0cmFwIHN5c3Jvb3QKKwlzZWQgLWkgLWUgInMvXC10Y2Jvb3RzdHJhcC8vZyIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCisJIyB1c2UgdGhlIGZpbmFsIGNyb3NzLWdjYyB0byB0ZXN0IHNpbmNlIHNvbWUgdGVzdHMgbmVlZCBsaWJzdGRjKysKKwlzZWQgLWkgLWUgInMvXlBBVEg9LipcLmdjYy1jcm9zcy1pbml0aWFsXDovUEFUSD0vZyIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCisJIyBhcHBlbmQgZXhlY3V0aW9uIHBhcnQgc2NyaXB0CitjYXQgPj4gJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYyA8PCBTVE9QCit0YXJnZXQ9IlwkMSIKK2lmIFsgInhcJHRhcmdldCIgPSAieCIgXQordGhlbgorCWVjaG8gIlBsZWFzZSBzcGVjaWZ5IHRoZSB0YXJnZXQgbWFjaGluZSBhbmQgcmVtb3RlIHVzZXIgaW4gZm9ybSBvZiB1c2VyQHRhcmdldCIKKwlleGl0IDE7CitmaQorc3NoIFwkdGFyZ2V0IGxzIFwkUFdEXCAgMj4mMSA+IC9kZXYvbnVsbAoraWYgWyAieFwkPyIgIT0gIngwIiBdCit0aGVuCisJZWNobyAiRmFpbGVkIGNvbm5lY3RpbmcgdG8gXCR0YXJnZXQgaXQgY291bGQgYmUgYmVjYXVzZSBvZjoiCisJZWNobyAiMS4gWW91IGRvbnQgaGF2ZSBwYXNzd29yZGxlc3Mgc3NoIHNldHVwIHRvIGFjY2VzcyBcJHRhcmdldCIKKwllY2hvICIyLiBORlMgc2hhcmUgb24gXCR0YXJnZXQgaXMgbm90IG1vdW50ZWQgb3IgaWYgbW91bnRlZCB0aGVuIG5vdCBtYXRjaGluZyB0aGUgYnVpbGQgdHJlZSBsYXlvdXQuIgorCWVjaG8gIiAgIFRoZSB0cmVlIHNob3VsZCBiZSBhY2Nlc3NpYmxlIGF0IHNhbWUgbG9jYXRpb24gb24gYnVpbGQgaG9zdCBhbmQgdGFyZ2V0IgorCWVjaG8gIiAgIFlvdSBjYW4gYWRkIG5mcy1jbGllbnQgdG8gSU1BR0VfRkVBVFVSRVMgdG8gZ2V0IHRoZSBuZnMgY2xpZW50IG9uIHRhcmdldCIKKwllY2hvICIzLiBuZnMgc2VydmVyIG9uIGJ1aWxkIGhvc3QgaXMgbm90IHJ1bm5pbmcuIgorCWVjaG8gIiAgIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSAnbm9fcm9vdF9zcXVhc2gnIGFkZGVkIGluIC9ldGMvZXhwb3J0cyBpZiB5b3Ugd2FudCIKKwllY2hvICIgICB0byB0ZXN0IGFzIHJvb3QgdXNlciBvbiB0YXJnZXQgKHVzdWFsbHkgaXRzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIG5vbiIKKwllY2hvICIgICByb290IHVzZXIuIgorCWVjaG8gIiAgIEFzIGEgc2FuaXR5IGNoZWNrIG1ha2Ugc3VyZSB0aGF0IHRhcmdldCBjYW4gcmVhZC93cml0ZSB0byB0aGUgZ2xpYmMgYnVpbGQgdHJlZSIKKwllY2hvICIgICBQbGVhc2UgcmVmZXIgdG8gJHtTfS9FR0xJQkMuY3Jvc3MtdGVzdGluZyBmb3IgZnVydGhlciBpbnN0cnVjdGlvbnMgb24gc2V0dXAiCisJZXhpdCAxCitmaQorCWVjaG8gIiMgd2UgdGVzdCB1c2luZyBjcm9zcyBjb21waWxlciBmcm9tIHJlYWwgc3lzcm9vdCB0aGVyZWZvcmUgb3ZlcnJpZGUgdGhlIiA+ICR7Qn0vY29uZmlncGFybXMKKwllY2hvICIjIGRlZmluaXRpb25zIHRoYXQgY29tZSBmcm9tICR7Qn0vY29uZmlnLm1ha2UiID4+ICR7Qn0vY29uZmlncGFybXMKKwlmZ3JlcCB0Y2Jvb3RzdHJhcCAke0J9L2NvbmZpZy5tYWtlID4gJHtCfS9jb25maWdwYXJtcworCXNlZCAtaSAtZSAicy9cLXRjYm9vdHN0cmFwLy9nIiAke0J9L2NvbmZpZ3Bhcm1zCisKKyMgZysrIHVzZXMgZmxhZyAtbm9zdGRpbmMsIHNvIHRoZSBsb2NhdGlvbnMgb2Ygc3lzdGVtIGluY2x1ZGUgaGVhZGVycyBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkCisjIElmIHRoZSBsb2NhdGlvbnMgYXJlIG5vdCBhbHJlYWR5IHNwZWNpZmllZCBpbiBjb25maWcubWFrZSwgdGhlbiB3ZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorIyAgICA8c3lzcm9vdD4vdXNyL2luY2x1ZGUvYysrLzxnKysgdmVyc2lvbj4KKyMgICAgPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2MrKy88ZysrIHZlcnNpb24+LzxtYWNoaW5lPgorCitjeHhpbmNsdWRlcz1cYGNhdCAke0J9L2NvbmZpZy5tYWtlIHwgZ2F3ayAnXCQxID09ICJjKystc3lzaW5jbHVkZXMiJyB8IGdhd2sgLUYiPSIgJ3twcmludCBcJDJ9JyB8IHNlZCAicy9bIFx0XVw/Ly9nIlxgCisKK2lmIFsgLXogIlwkY3h4aW5jbHVkZXMiIF07IHRoZW4KKyAgc3lzcm9vdD1cYGNhdCAke0J9L2NvbmZpZ3Bhcm1zIHwgc2VkIC1uICIvQ1hYL3AiIHwgc2VkIC1lICJzL14uKi0tc3lzcm9vdD0vLyJcYAorICBjeHg9XGBjYXQgJHtCfS9jb25maWdwYXJtcyB8IGdhd2sgJ1wkMSB+IC9eQ1hYLycgfCBnYXdrIC1GIj0iICd7cHJpbnQgXCQyfScgfCBnYXdrICd7cHJpbnQgXCQxfSdcYAorICBjeHhtYWNoaW5lPVxgXCRjeHggLWR1bXBtYWNoaW5lXGAKKyAgY3h4dmVyc2lvbj1cYFwkY3h4IC1kdW1wdmVyc2lvblxgCisgICMgcGFzcyB0aGUgbmV3IHZhbHVlIG9mIGMrKy1zeXNpbmNsdWRlcyB2aWEgY29uZmlncGFybXMKKyAgZWNobyAiIyBjKystc3lzaW5jbHVkZXMgYWRkZWQ6IiA+PiAke0J9L2NvbmZpZ3Bhcm1zCisgIGVjaG8gImMrKy1zeXNpbmNsdWRlcyA9IC1pc3lzdGVtIFwkc3lzcm9vdC91c3IvaW5jbHVkZS9jKysvXCRjeHh2ZXJzaW9uIC1pc3lzdGVtIFwkc3lzcm9vdC91c3IvaW5jbHVkZS9jKysvXCRjeHh2ZXJzaW9uL1wkY3h4bWFjaGluZSIgPj4gJHtCfS9jb25maWdwYXJtcworZmkKKword3JhcHBlcj0iJHtTfS9zY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoIFwkdGFyZ2V0IgorbG9jYWxlZGVmPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vY3Jvc3MtbG9jYWxlZGVmIC0tbGl0dGxlLWVuZGlhbiAtLXVpbnQzMi1hbGlnbj00IgorbWFrZSB0ZXN0cy1jbGVhbgorbWFrZSBjcm9zcy1sb2NhbGVkZWY9IlwkbG9jYWxlZGVmIiBjcm9zcy10ZXN0LXdyYXBwZXI9Ilwkd3JhcHBlciIgLWsgY2hlY2sKK3JtIC1yZiAke0J9L2NvbmZpZ3Bhcm1zCitTVE9QCisKKwljaG1vZCAreCAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmYTJkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLmluYwpAQCAtMCwwICsxLDEwNSBAQAorcmVxdWlyZSBnbGliYy1jb21tb24uaW5jCityZXF1aXJlIGdsaWJjLWxkLmluYworcmVxdWlyZSBnbGliYy10ZXN0aW5nLmluYworCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIgLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9IgorCisjIGdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgb3B0aW1pemF0aW9uLCBpZiBzb21lb25lIHRyaWVzIHRvIGNvbXBpbGUgYW4KKyMgZW50aXJlIGltYWdlIGFzIC1PMCwgd2Ugb3ZlcnJpZGUgaXQgd2l0aCAtTzIgaGVyZSBhbmQgZ2l2ZSBhIG5vdGUgYWJvdXQgaXQuCitkZWYgZ2V0X29wdGltaXphdGlvbihkKToKKyAgICBzZWxlY3RlZF9vcHRpbWl6YXRpb24gPSBkLmdldFZhcigiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgVHJ1ZSkKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMiIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbgorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTyIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTywgLU8gLVduby1lcnJvciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PIiwgIi1PIC1Xbm8tZXJyb3IiKQorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzAiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8wLCAtTzIgd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzAiLCAiLU8yIikKKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU9zIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PcywgLU9zIC1Xbm8tZXJyb3Igd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItT3MiLCAiLU9zIC1Xbm8tZXJyb3IiKQorICAgIGVsaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzEiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8xLCAtTzEgLVduby1lcnJvciB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PMSIsICItTzEgLVduby1lcnJvciIpCisgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbgorCitTRUxFQ1RFRF9PUFRJTUlaQVRJT04gOj0gIiR7QGdldF9vcHRpbWl6YXRpb24oZCl9IgorCisjIHNpdGVjb25maWcuYmJjbGFzcyBydW5zIGNvbmZpZ3VyZSB3aGljaCBuZWVkcyBhIHdvcmtpbmcgY29tcGlsZXIKKyMgRm9yIHRoZSBjb21waWxlciB0byB3b3JrIHdlIG5lZWQgYSB3b3JraW5nIGxpYmMgeWV0IGxpYmMgaXNuJ3QKKyMgaW4gdGhlIHN5c3Jvb3RzIGRpcmVjdG9yeSBhdCB0aGlzIHBvaW50LiBUaGlzIG1lYW5zIHRoZSBsaWJjLnNvCisjIGxpbmtlciBzY3JpcHQgd29uJ3Qgd29yayBhcyB0aGUgLS1zeXNyb290IHNldHRpbmcgaXNuJ3QgY29ycmVjdC4KKyMgSGVyZSB3ZSBjcmVhdGUgYSBoYWNrZWQgdXAgbGliYyBsaW5rZXIgc2NyaXB0IGFuZCBwYXNzIGluIHRoZSByaWdodAorIyBmbGFncyB0byBsZXQgY29uZmlndXJlIHdvcmsuIFVnbHkuCitFWFRSQVNJVEVDT05GSUcgPSAiQ0ZMQUdTPScke0NGTEFHU30gLVdsLC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjIC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9JyIKK3NpdGVjb25maWdfZG9fc2l0ZWNvbmZpZ19nZW5jYWNoZV9wcmVwZW5kID0gIiBcCisJbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCisJY3AgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L2xpYmMuc28gJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCisJc2VkIC1pIC1lICdzIyAke2Jhc2VfbGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0jZycgLWUgJ3MjICR7bGliZGlyfSMgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9I2cnICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYy9saWJjLnNvOyBcCisiCisKKyMgbnB0bCBuZWVkcyB1bndpbmQgc3VwcG9ydCBpbiBnY2MsIHdoaWNoIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgZ2xpYmMuCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIGxpYmdjYy1pbml0aWFsIGxpbnV4LWxpYmMtaGVhZGVycyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwiCisjIG5wdGwgbmVlZHMgbGliZ2NjIGJ1dCBkbG9wZW5zIGl0LCBzbyBvdXIgc2hsaWJzIGNvZGUgZG9lc24ndCBkZXRlY3QgdGhpcworI1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsJ2xpYmdjYyddWyducHRsJyBpbiAnJHtHTElCQ19BRERPTlN9J119IgorUFJPVklERVMgPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9saWJpY29udiIKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHN5c3RlbWQKK3JlcXVpcmUgZ2xpYmMtb3B0aW9ucy5pbmMKKworIyBUaGUgbWFpbiBwdXJwb3NlIG9mIHNldHRpbmcgdGhpcyB2YXJpYWJsZSBpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gYWNjaWRlbnRseQorIyBvdmVycmlkaW5nIERJU1RST19GRUFUUlVFUywgY2F1c2luZyBvYnNjdXJlIGJ1aWxkIGZhaWx1cmVzIGJlY2F1c2Ugb2YgbGFjaworIyBvZiBsaWJjIGZ1bmN0aW9ucy4KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIke0RJU1RST19GRUFUVVJFU19MSUJDfSIKKworTEVBRF9TT05BTUUgPSAibGliYy5zbyIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIiBcCisgIGFjX2N2X3BhdGhfQkFTSF9TSEVMTD0ke2Jhc2VfYmluZGlyfS9iYXNoIFwKKyAgbGliY19jdl9zbGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgbGliY19jdl9yb290c2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAorICBsaWJjX2N2X2xvY2FsZWRpcj0ke2xvY2FsZWRpcn0gXAorICBsaWJjX2N2X3NzcD1ubyBcCisiCisKK0dMSUJDX0VYVFJBX09FQ09ORiA/PSAiIgorR0xJQkNfRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIFRoaXMgbmVlZHMgdG8gbWF0Y2ggd2l0aCBnbGliYy1jb2xsYXRlcmFsLmluYywgb3RoZXJ3aXNlIGdsaWJjLXNjcmlwdHMgYW5kIGdsaWJjLWxvY2FsZQorIyB3aWxsIGZhaWwgdG8gZmluZCBtYWluIGdsaWJjLCBmb3IgZGV0YWlscyBzZWUKKyMgaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlLzIwMTUtSmFudWFyeS8xMDA2NzkuaHRtbAorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKKyMgZ2xpYmMgdXNlcyBQQVJBTExFTE1GTEFHUyB2YXJpYWJsZSB0byBwYXNzIHBhcmFsbGVsIGJ1aWxkIGluZm8gc28gdHJhbnNmZXIKKyMgUEFSQUxMRUxfTUFLRSBpbnRvIFBBUkFMTEVMTUZMQUdTIGFuZCBlbXB0eSBvdXQgUEFSQUxMRUxfTUFLRQorRUdMSUJDUEFSQUxMRUxJU00gOj0gIlBBUkFMTEVMTUZMQUdTPSIke1BBUkFMTEVMX01BS0V9IiIKK0VYVFJBX09FTUFLRVt2YXJkZXBzZXhjbHVkZV0gKz0gIkVHTElCQ1BBUkFMTEVMSVNNIgorRVhUUkFfT0VNQUtFICs9ICIke0VHTElCQ1BBUkFMTEVMSVNNfSIKK1BBUkFMTEVMX01BS0UgPSAiIgorCisjIGdsaWJjIG1ha2Utc3lzY2FsbHMuc2ggaGFzIGEgbnVtYmVyIG9mIGlzc3VlcyB3aXRoIC9iaW4vZGFzaCBhbmQKKyMgaXQncyBvdXRwdXQgd2hpY2ggbWFrZSBjYWxscyB2aWEgdGhlIFNIRUxMIGFsc28gaGFzIGlzc3Vlcywgc28KKyMgZW5zdXJlIG1ha2UgdXNlcyAvYmluL2Jhc2gKK0VYVFJBX09FTUFLRSArPSAiU0hFTEw9L2Jpbi9iYXNoIgorCitPRV9GRUFUVVJFUyA9ICIke0BmZWF0dXJlc190b19nbGliY19zZXR0aW5ncyhkKX0iCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWUgInMjQEJBU0hAIy9iaW4vc2gjIiAtaSAke1N9L2VsZi9sZGQuYmFzaC5pbgorCWVjaG8gJyR7T0VfRkVBVFVSRVN9JyA+ICR7Qn0vb3B0aW9uLWdyb3Vwcy5jb25maWcKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwl5ZXMgJycgfCBvZV9ydW5tYWtlIGNvbmZpZworCisJIyBSZW1vdmUgcXVvdGF0aW9uIG1hcmtzIGZyb20gT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF8qLiBUaGlzIHdpbGwKKwkjIGF2b2lkIGluc3RhbGwgZXJyb3IuCisJc2VkIC1pICdzL15PUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX1woLipcKT0iXCguKlwpIiQvT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9cMT1cMi8nIG9wdGlvbi1ncm91cHMuY29uZmlnCit9CisKK0dMSUJDX0FERE9OUyA/PSAibnB0bCxsaWJpZG4iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q2NjM0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDEtbmF0aXZlc2RrLWdsaWJjLUxvb2stZm9yLWhvc3Qtc3lzdGVtLWxkLnNvLmNhY2hlLWFzLS5wYXRjaApAQCAtMCwwICsxLDcwIEBACitGcm9tIDA4NzZmZWExYjViMjZkYTg0ZjI5ODcxNGEyZTIzYmE2OTY2MDdkYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo0ODoyNCArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzI3XSBuYXRpdmVzZGstZ2xpYmM6IExvb2sgZm9yIGhvc3Qgc3lzdGVtIGxkLnNvLmNhY2hlIGFzCisgd2VsbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgZGVmYXVsdCBsaWIgc2VhcmNoIHBhdGggb3JkZXIgaXM6CisKKyAgMSkgTERfTElCUkFSWV9QQVRICisgIDIpIFJQQVRIIGZyb20gdGhlIGJpbmFyeQorICAzKSBsZC5zby5jYWNoZQorICA0KSBkZWZhdWx0IHNlYXJjaCBwYXRocyBlbWJlZGRlZCBpbiB0aGUgbGlua2VyCisKK0ZvciBuYXRpdmVzZGsgYmluYXJpZXMgd2hpY2ggYXJlIGJlaW5nIHVzZWQgYWxvbmdzaWRlIGJpbmFyaWVzIG9uIGEgaG9zdCBzeXN0ZW0sIHdlCituZWVkIHRoZSBzZWFyY2ggcGF0aHMgdG8gZmlyc3RseSBzZWFyY2ggdGhlIHNoaXBwZWQgbmF0aXZlc2RrIGxpYnMgYnV0IHRoZW4gYWxzbworY292ZXIgdGhlIGhvc3Qgc3lzdGVtLiBGb3IgZXhhbXBsZSB3ZSB3YW50IHRoZSBob3N0IHN5c3RlbSdzIGxpYkdMIGFuZCB0aGlzIG1heSBiZQoraW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24gbGlrZSAvdXNyL2xpYi9tZXNhLiBUaGUgb25seSBwbGFjZSB0aGUgbG9jYXRpb24gaXMga25vdworYWJvdXQgaXMgaW4gdGhlIGxkLnNvLmNhY2hlIG9mIHRoZSBob3N0IHN5c3RlbS4KKworU2luY2UgbmF0aXZlc2RrIGhhcyBhIHNpbXBsZSBzdHJ1Y3R1cmUgYW5kIGRvZXNuJ3QgbmVlZCB0byB1c2UgYSBjYWNoZSBpdHNlbGYsIHdlCityZXB1cnBvc2UgdGhlIGNhY2hlIGZvciB1c2UgYXMgYSBsYXN0IHJlc29ydCBpbiBmaW5kaW5nIGhvc3Qgc3lzdGVtIGJpbmFyaWVzLiBUaGlzCittZWFucyB3ZSBuZWVkIHRvIHN3aXRjaCB0aGUgb3JkZXIgb2YgMyBhbmQgNCBhYm92ZSB0byBtYWtlIHRoaXMgd29yayBlZmZlY3RpdmVseS4KKworUlAgMTQvMTAvMjAxMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL2RsLWxvYWQuYyB8IDE3ICsrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCAwYzA1MmU0Li5mNDUwODVhIDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTIwNDAsNyArMjA0MCwxNCBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCWZkID0gb3Blbl9wYXRoIChuYW1lLCBuYW1lbGVuLCBtb2RlLAorIAkJCSZsb2FkZXItPmxfcnVucGF0aF9kaXJzLCAmcmVhbG5hbWUsICZmYiwgbG9hZGVyLAorIAkJCUxBX1NFUl9SVU5QQVRILCAmZm91bmRfb3RoZXJfY2xhc3MpOworLQorKyAgICAgIC8qIHRyeSB0aGUgZGVmYXVsdCBwYXRoLiAgKi8KKysgICAgICBpZiAoZmQgPT0gLTEKKysJICAmJiAoKGwgPSBsb2FkZXIgPzogR0woZGxfbnMpW25zaWRdLl9uc19sb2FkZWQpID09IE5VTEwKKysJICAgfHwgX19idWlsdGluX2V4cGVjdCAoIShsLT5sX2ZsYWdzXzEgJiBERl8xX05PREVGTElCKSwgMSkpCisrCSAmJiBydGxkX3NlYXJjaF9kaXJzLmRpcnMgIT0gKHZvaWQgKikgLTEpCisrCWZkID0gb3Blbl9wYXRoIChuYW1lLCBuYW1lbGVuLCBtb2RlICYgX19SVExEX1NFQ1VSRSwgJnJ0bGRfc2VhcmNoX2RpcnMsCisrCQkJJnJlYWxuYW1lLCAmZmIsIGwsIExBX1NFUl9ERUZBVUxULCAmZm91bmRfb3RoZXJfY2xhc3MpOworKyAgICAgIC8qIEZpbmFsbHkgdHJ5IGxkLnNvLmNhY2hlICovCisgI2lmZGVmIFVTRV9MRENPTkZJRworICAgICAgIGlmIChmZCA9PSAtMQorIAkgICYmIChfX2dsaWJjX2xpa2VseSAoKG1vZGUgJiBfX1JUTERfU0VDVVJFKSA9PSAwKQorQEAgLTIwOTksMTQgKzIxMDYsNiBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCX0KKyAjZW5kaWYKKyAKKy0gICAgICAvKiBGaW5hbGx5LCB0cnkgdGhlIGRlZmF1bHQgcGF0aC4gICovCistICAgICAgaWYgKGZkID09IC0xCistCSAgJiYgKChsID0gbG9hZGVyID86IEdMKGRsX25zKVtuc2lkXS5fbnNfbG9hZGVkKSA9PSBOVUxMCistCSAgICAgIHx8IF9fZ2xpYmNfbGlrZWx5ICghKGwtPmxfZmxhZ3NfMSAmIERGXzFfTk9ERUZMSUIpKSkKKy0JICAmJiBydGxkX3NlYXJjaF9kaXJzLmRpcnMgIT0gKHZvaWQgKikgLTEpCistCWZkID0gb3Blbl9wYXRoIChuYW1lLCBuYW1lbGVuLCBtb2RlLCAmcnRsZF9zZWFyY2hfZGlycywKKy0JCQkmcmVhbG5hbWUsICZmYiwgbCwgTEFfU0VSX0RFRkFVTFQsICZmb3VuZF9vdGhlcl9jbGFzcyk7CistCisgICAgICAgLyogQWRkIGFub3RoZXIgbmV3bGluZSB3aGVuIHdlIGFyZSB0cmFjaW5nIHRoZSBsaWJyYXJ5IGxvYWRpbmcuICAqLworICAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbiIpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2OGZjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDA4NmI2NWQ5YWFjZmZjNDdmY2Q4ZGY2ODgxOGE0NzZhNWFlNzZmYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1MDowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDAyLzI3XSBuYXRpdmVzZGstZ2xpYmM6IEZpeCBidWZmZXIgb3ZlcnJ1biB3aXRoIGEgcmVsb2NhdGVkCisgU0RLCisKK1doZW4gbGQtbGludXgtKi5zby4yIGlzIHJlbG9jYXRlZCB0byBhIHBhdGggdGhhdCBpcyBsb25nZXIgdGhhbiB0aGUKK29yaWdpbmFsIGZpeGVkIGxvY2F0aW9uLCB0aGUgZHluYW1pYyBsb2FkZXIgd2lsbCBjcmFzaCBpbiBvcGVuX3BhdGgKK2JlY2F1c2UgaXQgaW1wbGljaXRseSBhc3N1bWVzIHRoYXQgbWF4X2Rpcm5hbWVsZW4gaXMgYSBmaXhlZCBzaXplIHRoYXQKK25ldmVyIGNoYW5nZXMuCisKK1RoZSBhbGxvY2F0ZWQgYnVmZmVyIHdpbGwgbm90IGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBkaXJlY3RvcnkKK3BhdGggc3RyaW5nIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBmaXhlZCBsb2NhdGlvbiBwcm92aWRlZCBhdCBidWlsZAordGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTREsgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL2RsLWxvYWQuYyB8IDEyICsrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggZjQ1MDg1YS4uZjFlYjVlZCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC0xNzY1LDcgKzE3NjUsMTkgQEAgb3Blbl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgaW50IG1vZGUsCisgICAgICAgIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBydGxkIGlzIHJ1biBkaXJlY3RseS4gICovCisgICAgIHJldHVybiAtMTsKKyAKKysgIGRvCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgcl9zZWFyY2hfcGF0aF9lbGVtICp0aGlzX2RpciA9ICpkaXJzOworKyAgICAgIGlmICh0aGlzX2Rpci0+ZGlybmFtZWxlbiA+IG1heF9kaXJuYW1lbGVuKQorKwl7CisrCSAgbWF4X2Rpcm5hbWVsZW4gPSB0aGlzX2Rpci0+ZGlybmFtZWxlbjsKKysJfQorKyAgICB9CisrICB3aGlsZSAoKisrZGlycyAhPSBOVUxMKTsKKysKKyAgIGJ1ZiA9IGFsbG9jYSAobWF4X2Rpcm5hbWVsZW4gKyBtYXhfY2Fwc3RybGVuICsgbmFtZWxlbik7CisrCisrICBkaXJzID0gc3BzLT5kaXJzOworICAgZG8KKyAgICAgeworICAgICAgIHN0cnVjdCByX3NlYXJjaF9wYXRoX2VsZW0gKnRoaXNfZGlyID0gKmRpcnM7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjgxYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMy1uYXRpdmVzZGstZ2xpYmMtUmFpc2UtdGhlLXNpemUtb2YtYXJyYXlzLWNvbnRhaW5pbmctLnBhdGNoCkBAIC0wLDAgKzEsMTI2IEBACitGcm9tIGZkNTk1YTVlYzg4NWJjYjRjMTQ0MTdkYWEyMWMyZTYxYzViNzJlNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMTo1MTozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDAzLzI3XSBuYXRpdmVzZGstZ2xpYmM6IFJhaXNlIHRoZSBzaXplIG9mIGFycmF5cyBjb250YWluaW5nIGRsCisgcGF0aHMKKworVGhpcyBwYXRjaCBwdXRzIHRoZSBkeW5hbWljIGxvYWRlciBwYXRoIGluIHRoZSBiaW5hcmllcywgU1lTVEVNX0RJUlMgc3RyaW5ncworYW5kIGxlbmd0aHMgYXMgd2VsbCBhcyBsZC5zby5jYWNoZSBwYXRoIGluIHRoZSBkeW5hbWljIGxvYWRlciB0byBzcGVjaWZpYworc2VjdGlvbnMgaW4gbWVtb3J5LiBUaGUgc2VjdGlvbnMgdGhhdCBjb250YWluIHBhdGhzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgYSA0MDk2CitieXRlIHNlY3Rpb24sIHdoaWNoIGlzIHRoZSBtYXhpbXVtIHBhdGggbGVuZ3RoIGluIGxpbnV4LiBUaGlzIHdpbGwgYWxsb3cgdGhlCityZWxvY2F0aW5nIHNjcmlwdCB0byBwYXJzZSB0aGUgRUxGIGJpbmFyeSwgZGV0ZWN0IHRoZSBzZWN0aW9uIGFuZCBlYXNpbHkgcmVwbGFjZQordGhlIHN0cmluZ3MgaW4gYSBjZXJ0YWluIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU0RLIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL2RsLWNhY2hlLmMgICAgICAgICAgICAgfCA0ICsrKysKKyBlbGYvZGwtbG9hZC5jICAgICAgICAgICAgICB8IDQgKystLQorIGVsZi9pbnRlcnAuYyAgICAgICAgICAgICAgIHwgMiArLQorIGVsZi9sZGNvbmZpZy5jICAgICAgICAgICAgIHwgMyArKysKKyBlbGYvcnRsZC5jICAgICAgICAgICAgICAgICB8IDUgKysrLS0KKyBzeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaCB8IDQgLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2VsZi9kbC1jYWNoZS5jIGIvZWxmL2RsLWNhY2hlLmMKK2luZGV4IGRlYzQ5YmMuLjg2MmYxZDggMTAwNjQ0CistLS0gYS9lbGYvZGwtY2FjaGUuYworKysrIGIvZWxmL2RsLWNhY2hlLmMKK0BAIC0xMzIsNiArMTMyLDEwIEBAIGRvCQkJCQkJCQkJICAgICAgXAorIHdoaWxlICgwKQorIAorIAorK2NvbnN0IGNoYXIgTERfU09fQ0FDSEVbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubGRzb2NhY2hlIikpKSA9CisrCQlTWVNDT05GRElSICIvbGQuc28uY2FjaGUiOworKworKworIGludAorIGludGVybmFsX2Z1bmN0aW9uCisgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCBmMWViNWVkLi5mNjY0ZjUwIDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTEwNCw4ICsxMDQsOCBAQCBzdGF0aWMgc2l6ZV90IG1heF9jYXBzdHJsZW4gYXR0cmlidXRlX3JlbHJvOworIC8qIEdldCB0aGUgZ2VuZXJhdGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cnVzdGVkIGRpcmVjdG9yaWVzLiAgKi8KKyAjaW5jbHVkZSAidHJ1c3RlZC1kaXJzLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgc3lzdGVtX2RpcnNbXSA9IFNZU1RFTV9ESVJTOworLXN0YXRpYyBjb25zdCBzaXplX3Qgc3lzdGVtX2RpcnNfbGVuW10gPQorK3N0YXRpYyBjb25zdCBjaGFyIHN5c3RlbV9kaXJzWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnN5c2RpcnMiKSkpID0gU1lTVEVNX0RJUlM7Cisrdm9sYXRpbGUgc3RhdGljIGNvbnN0IHNpemVfdCBzeXN0ZW1fZGlyc19sZW5bXSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5zeXNkaXJzbGVuIikpKSA9CisgeworICAgU1lTVEVNX0RJUlNfTEVOCisgfTsKK2RpZmYgLS1naXQgYS9lbGYvaW50ZXJwLmMgYi9lbGYvaW50ZXJwLmMKK2luZGV4IDQyMmVhOTVlLi42ZDYxYTM2IDEwMDY0NAorLS0tIGEvZWxmL2ludGVycC5jCisrKysgYi9lbGYvaW50ZXJwLmMKK0BAIC0xOCw1ICsxOCw1IEBACisgCisgI2luY2x1ZGUgPHJ1bnRpbWUtbGlua2VyLmg+CisgCistY29uc3QgY2hhciBfX2ludm9rZV9keW5hbWljX2xpbmtlcl9fW10gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW50ZXJwIikpKQorK2NvbnN0IGNoYXIgX19pbnZva2VfZHluYW1pY19saW5rZXJfX1s0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5pbnRlcnAiKSkpCisgICA9IFJVTlRJTUVfTElOS0VSOworZGlmZiAtLWdpdCBhL2VsZi9sZGNvbmZpZy5jIGIvZWxmL2xkY29uZmlnLmMKK2luZGV4IGY1NGVjMjIuLjBlNzhhODMgMTAwNjQ0CistLS0gYS9lbGYvbGRjb25maWcuYworKysrIGIvZWxmL2xkY29uZmlnLmMKK0BAIC0xNjcsNiArMTY3LDkgQEAgc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPQorICAgb3B0aW9ucywgcGFyc2Vfb3B0LCBOVUxMLCBkb2MsIE5VTEwsIG1vcmVfaGVscCwgTlVMTAorIH07CisgCisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgTERfU09fQ0FDSEVbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubGRzb2NhY2hlIikpKTsKKysKKyAvKiBDaGVjayBpZiBzdHJpbmcgY29ycmVzcG9uZHMgdG8gYW4gaW1wb3J0YW50IGhhcmR3YXJlIGNhcGFiaWxpdHkgb3IKKyAgICBhIHBsYXRmb3JtLiAgKi8KKyBzdGF0aWMgaW50CitkaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKK2luZGV4IDY5ODczYzIuLjZkM2FkZDcgMTAwNjQ0CistLS0gYS9lbGYvcnRsZC5jCisrKysgYi9lbGYvcnRsZC5jCitAQCAtOTksNiArOTksNyBAQCB1aW50cHRyX3QgX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbAorIHN0cm9uZ19hbGlhcyAoX19wb2ludGVyX2Noa19ndWFyZF9sb2NhbCwgX19wb2ludGVyX2Noa19ndWFyZCkKKyAjZW5kaWYKKyAKKytleHRlcm4gY29uc3QgY2hhciBMRF9TT19DQUNIRVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5sZHNvY2FjaGUiKSkpOworIAorIC8qIExpc3Qgb2YgYXVkaXRpbmcgRFNPcy4gICovCisgc3RhdGljIHN0cnVjdCBhdWRpdF9saXN0CitAQCAtODc3LDEyICs4NzgsMTIgQEAgb2YgdGhpcyBoZWxwZXIgcHJvZ3JhbTsgY2hhbmNlcyBhcmUgeW91IGRpZCBub3QgaW50ZW5kIHRvIHJ1biB0aGlzIHByb2dyYW0uXG5cCisgICAtLWxpc3QgICAgICAgICAgICAgICAgbGlzdCBhbGwgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSBhcmUgcmVzb2x2ZWRcblwKKyAgIC0tdmVyaWZ5ICAgICAgICAgICAgICB2ZXJpZnkgdGhhdCBnaXZlbiBvYmplY3QgcmVhbGx5IGlzIGEgZHluYW1pY2FsbHkgbGlua2VkXG5cCisgCQkJb2JqZWN0IHdlIGNhbiBoYW5kbGVcblwKKy0gIC0taW5oaWJpdC1jYWNoZSAgICAgICBEbyBub3QgdXNlICIgTERfU09fQ0FDSEUgIlxuXAorKyAgLS1pbmhpYml0LWNhY2hlICAgICAgIERvIG5vdCB1c2UgJXNcblwKKyAgIC0tbGlicmFyeS1wYXRoIFBBVEggICB1c2UgZ2l2ZW4gUEFUSCBpbnN0ZWFkIG9mIGNvbnRlbnQgb2YgdGhlIGVudmlyb25tZW50XG5cCisgCQkJdmFyaWFibGUgTERfTElCUkFSWV9QQVRIXG5cCisgICAtLWluaGliaXQtcnBhdGggTElTVCAgaWdub3JlIFJVTlBBVEggYW5kIFJQQVRIIGluZm9ybWF0aW9uIGluIG9iamVjdCBuYW1lc1xuXAorIAkJCWluIExJU1RcblwKKy0gIC0tYXVkaXQgTElTVCAgICAgICAgICB1c2Ugb2JqZWN0cyBuYW1lZCBpbiBMSVNUIGFzIGF1ZGl0b3JzXG4iKTsKKysgIC0tYXVkaXQgTElTVCAgICAgICAgICB1c2Ugb2JqZWN0cyBuYW1lZCBpbiBMSVNUIGFzIGF1ZGl0b3JzXG4iLCBMRF9TT19DQUNIRSk7CisgCisgICAgICAgKytfZGxfc2tpcF9hcmdzOworICAgICAgIC0tX2RsX2FyZ2M7CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmggYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAoraW5kZXggNGI0OTg2OS4uMTgwMGQwMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oCisrKysgYi9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAorQEAgLTI3LDEwICsyNyw2IEBACisgICAoKGZsYWdzKSA9PSAxIHx8IChmbGFncykgPT0gX0RMX0NBQ0hFX0RFRkFVTFRfSUQpCisgI2VuZGlmCisgCistI2lmbmRlZiBMRF9TT19DQUNIRQorLSMgZGVmaW5lIExEX1NPX0NBQ0hFIFNZU0NPTkZESVIgIi9sZC5zby5jYWNoZSIKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIGFkZF9zeXN0ZW1fZGlyCisgIyBkZWZpbmUgYWRkX3N5c3RlbV9kaXIoZGlyKSBhZGRfZGlyIChkaXIpCisgI2VuZGlmCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDg3NTAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjU2MGI1NjRiNTY3NGJmMjk5MGU1NjA3ZjYzNDJjMTY0N2E1ZGM0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDggTWFyIDIwMTUgMDQ6MDE6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8yN10gQmFja3BvcnQKKyBodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtcG9ydHMvMjAwNy0xMi9tc2cwMDAwMC5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisyMDA3LTEyLTAzICBLcmlzdGlhbiBWYW4gRGVyIFZsaWV0ICA8dmFuZGVyc0BsaXF3eWQuY29tPgorCisgICAgICAgICogYml0cy9zdGRpby1sb2NrLmggKF9JT19hY3F1aXJlX2xvY2tfY2xlYXJfZmxhZ3MyKTogRGVmaW5lCisKK1NpZ25lZC1vZmYtYnk6IEtyaXN0aWFuIFZhbiBEZXIgVmxpZXQgPHZhbmRlcnNAbGlxd3lkLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiaXRzL3N0ZGlvLWxvY2suaCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9iaXRzL3N0ZGlvLWxvY2suaCBiL2JpdHMvc3RkaW8tbG9jay5oCitpbmRleCAwYzViYjY1Li42NjMwNGE2IDEwMDY0NAorLS0tIGEvYml0cy9zdGRpby1sb2NrLmgKKysrKyBiL2JpdHMvc3RkaW8tbG9jay5oCitAQCAtNDksNiArNDksOCBAQCBfX2xpYmNfbG9ja19kZWZpbmVfcmVjdXJzaXZlICh0eXBlZGVmLCBfSU9fbG9ja190KQorICAgX0lPX2NsZWFudXBfcmVnaW9uX3N0YXJ0ICgodm9pZCAoKikgKHZvaWQgKikpIF9JT19mdW5sb2NrZmlsZSwgKF9mcCkpOyAgICAgIFwKKyAgIF9JT19mbG9ja2ZpbGUgKF9mcCkKKyAKKysjIGRlZmluZSBfSU9fYWNxdWlyZV9sb2NrX2NsZWFyX2ZsYWdzMihfZnApIF9JT19hY3F1aXJlX2xvY2sgKF9mcCkKKysKKyAjIGRlZmluZSBfSU9fcmVsZWFzZV9sb2NrKF9mcCkgXAorICAgX0lPX2Z1bmxvY2tmaWxlIChfZnApOwkJCQkJCSAgICAgIFwKKyAgIF9JT19jbGVhbnVwX3JlZ2lvbl9lbmQgKDApCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNmODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNS1mc2wtZTUwMC1lNTUwMC1lNjUwMC02MDNlLWZzcXJ0LWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTU4NCBAQAorRnJvbSBhYTBjZDgyODkyZjMyZTU4NjAyMTQzYzY5N2VmMDUyNDY5NmE2NDI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MDE6NTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8yN10gZnNsIGU1MDAvZTU1MDAvZTY1MDAvNjAzZSBmc3FydCBpbXBsZW1lbnRhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEVkbWFyIFdpZW5za29za2kgPGVkbWFyQGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyAgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcyAgfCAgIDEgKworIC4uLi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMgICAgIHwgICAyICsKKyAuLi4vbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzICAgICB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIDE5IGZpbGVzIGNoYW5nZWQsIDE0MTggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTAsMCArMSwxMzQgQEAKKysvKiBEb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3bzEwOCA9IDMuMjQ1MTg1NTM2NTg0MjY3MjY5ZSszMjsKKytzdGF0aWMgY29uc3QgZmxvYXQgdHdvbTU0ID0gNS41NTExMTUxMjMxMjU3ODI3MDJlLTE3OworK3N0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworKworKy8qIFRoZSBtZXRob2QgaXMgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9ucyBpbjoKKysKKysgICBfVGhlIEhhbmRib29rIG9mIEZsb2F0aW5nLVBvaW50ZXIgQXJpdGhtZXRpY18gYnkgTXVsbGVyIGV0IGFsLiwgY2hhcHRlciA1OworKyAgIF9JQS02NCBhbmQgRWxlbWVudGFyeSBGdW5jdGlvbnM6IFNwZWVkIGFuZCBQcmVjaXNpb25fIGJ5IE1hcmtzdGVpbiwgY2hhcHRlciA5CisrCisrICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisrICAgc2ltdWx0YW5lb3VzbHkuICAqLworKworKyNpZmRlZiBfX1NURENfXworK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKysjZWxzZQorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChiKQorKyAgICAgZG91YmxlIGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyAgICAgIGRvdWJsZSB5LCBnLCBoLCBkLCByOworKyAgICAgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgdTsKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZlbnZfdCBmZTsKKysKKysgICAgICAgICAgZmUgPSBmZWdldGVudl9yZWdpc3RlciAoKTsKKysKKysgICAgICAgICAgdS52YWx1ZSA9IGI7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbZXN0aW1hdGVdLCAlW3hdXG4iCisrICAgICAgICAgICAgICAgICAgIDogW2VzdGltYXRlXSAiPWYiICh5KSA6IFt4XSAiZiIgKGIpKTsKKysKKysgICAgICAgICAgLyogRm9sbG93aW5nIE11bGxlciBldCBhbCwgcGFnZSAxNjgsIGVxdWF0aW9uIDUuMjAuCisrCisrICAgICAgICAgICAgIGggZ29lcyB0byAxLygyKnNxcnQoYikpCisrICAgICAgICAgICAgIGcgZ29lcyB0byBzcXJ0KGIpLgorKworKyAgICAgICAgICAgICBXZSBuZWVkIHRocmVlIGl0ZXJhdGlvbnMgdG8gZ2V0IHdpdGhpbiAxdWxwLiAgKi8KKysKKysgICAgICAgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVzZSBjYW4gYmUgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBicmFuY2guICBHQ0MKKysgICAgICAgICAgICAgaW5zaXN0cyBvbiBzaW5raW5nIHRoZW0gYmVsb3cgdGhlIGJyYW5jaCwgaG93ZXZlcjsgaXQgc2VlbXMgbGlrZQorKyAgICAgICAgICAgICB0aGV5J2QgYmUgYmV0dGVyIGJlZm9yZSB0aGUgYnJhbmNoIHNvIHRoYXQgd2UgY2FuIGNvdmVyIGFueSBsYXRlbmN5CisrICAgICAgICAgICAgIGZyb20gc3RvcmluZyB0aGUgYXJndW1lbnQgYW5kIGxvYWRpbmcgaXRzIGhpZ2ggd29yZC4gIE9oIHdlbGwuICAqLworKworKyAgICAgICAgICBnID0gYiAqIHk7CisrICAgICAgICAgIGggPSAwLjUgKiB5OworKworKyAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKysgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorKyAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrCisrI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX19hc21fXyAoImZtYWRkICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICAgIF9fcjt9KQorKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICAvKiBnIGlzIG5vdyArLy0gMXVscCwgb3IgZXhhY3RseSBlcXVhbCB0bywgdGhlIHNxdWFyZSByb290IG9mIGIuICAqLworKworKyAgICAgICAgICAvKiBGaW5hbCByZWZpbmVtZW50LiAgKi8KKysgICAgICAgICAgZCA9IEZOTVNVQiAoZywgZywgYik7CisrCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiBGTUFERCAoZCwgaCwgZyk7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaCAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBTaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290LgorKyAgIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8bWF0aF9wcml2YXRlLmg+CisrI2luY2x1ZGUgPGZlbnZfbGliYy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKworKyNpbmNsdWRlIDxzeXNkZXAuaD4KKysjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfbmFuID0gey53b3JkID0gMHg3ZmMwMDAwMCB9OworK3N0YXRpYyBjb25zdCBpZWVlX2Zsb2F0X3NoYXBlX3R5cGUgYV9pbmYgPSB7LndvcmQgPSAweDdmODAwMDAwIH07Cisrc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorKyAgIHNxdWFyZSByb290LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKysjZWxzZQorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChiKQorKyAgICAgZmxvYXQgYjsKKysjZW5kaWYKKyt7CisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorKyAgICB7CisrI2RlZmluZSBGTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9fYXNtX18gKCJmbXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgIF9fcjt9KQorKyNkZWZpbmUgRk5NU1VCKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiAhPSBhX2luZi52YWx1ZSwgMSkpCisrICAgICAgICB7CisrICAgICAgICAgIGRvdWJsZSB5LCB4OworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHJlbGF4X2ZlbnZfc3RhdGUgKCk7CisrCisrICAgICAgICAgIC8qIENvbXB1dGUgeSA9IDEuNSAqIGIgLSBiLiAgVXNlcyBmZXdlciBjb25zdGFudHMgdGhhbiB5ID0gMC41ICogYi4gICovCisrICAgICAgICAgIHkgPSBGTVNVQiAodGhyZWVoYWxmLCBiLCBiKTsKKysKKysgICAgICAgICAgLyogSW5pdGlhbCBlc3RpbWF0ZS4gICovCisrICAgICAgICAgIF9fYXNtX18gKCJmcnNxcnRlICVbeF0sICVbYl1cbiIgOiBbeF0gIj1mIiAoeCkgOiBbYl0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEl0ZXJhdGUuICB4X3tuKzF9ID0geF9uICogKDEuNSAtIHkgKiAoeF9uICogeF9uKSkuICAqLworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKworKyAgICAgICAgICAvKiBBbGwgZG9uZS4gICovCisrICAgICAgICAgIGZlc2V0ZW52X3JlZ2lzdGVyIChmZSk7CisrICAgICAgICAgIHJldHVybiB4ICogYjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAoYiA8IDApCisrICAgIHsKKysgICAgICAvKiBGb3Igc29tZSByZWFzb24sIHNvbWUgUG93ZXJQQzMyIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50CisrICAgICAgICAgRkVfSU5WQUxJRF9TUVJULiAgKi8KKysjaWZkZWYgRkVfSU5WQUxJRF9TUVJUCisrICAgICAgZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRF9TUVJUKTsKKysKKysgICAgICBmZW52X3VuaW9uX3QgdSA9IHsgLmZlbnYgPSBmZWdldGVudl9yZWdpc3RlciAoKSB9OworKyAgICAgIGlmICgodS5sICYgRkVfSU5WQUxJRCkgPT0gMCkKKysjZW5kaWYKKysJZmVyYWlzZWV4Y2VwdCAoRkVfSU5WQUxJRCk7CisrICAgICAgYiA9IGFfbmFuLnZhbHVlOworKyAgICB9CisrICByZXR1cm4gZl93YXNoZiAoYik7CisrfQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjEwM2I0ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRkYjE3ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxLDIgQEAKKysjIGUzMDBjMyBpcyBhIHZhcmlhbnQgb2YgNjAzZSBzbyB1c2UgdGhlIHNhbWUgb3B0aW1pemF0aW9ucyBmb3Igc3FydAorK3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uN2VhYzVmYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzCitAQCAtMCwwICsxIEBACisrcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNjRiMmE3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMjU5MzQ0CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hN2JjODU0CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wNGZmOGNjCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjMjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDYtcmVhZGxpYi1BZGQtT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTLXRvLWtub3duLS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDVlYzFiYzUxNzI4NTEyNzgyMzFjZTk0MGI2OGIzNWNlOWNiZjg1MDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxMToyMiArMDAwMAorU3ViamVjdDogW1BBVENIIDA2LzI3XSByZWFkbGliOiBBZGQgT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTIHRvIGtub3duCisgbmFtZXMKKworVGhpcyBib2x0cyBpbiBhIGhvb2sgZm9yIE9FIHRvIHBhc3MgaXRzIG93biB2ZXJzaW9uIG9mIGludGVycHJldGVyCituYW1lcyBpbnRvIGdsaWJjIGVzcGVjaWFsbHkgZm9yIG11bHRpbGliIGNhc2UsIHdoZXJlIGl0IGRpZmZlcnMgZnJvbSBhbnkKK290aGVyIGRpc3Ryb3MKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGlhbmhhbyBMdSA8bGlhbmhhby5sdUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZWxmL3JlYWRsaWIuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvZWxmL3JlYWRsaWIuYyBiL2VsZi9yZWFkbGliLmMKK2luZGV4IDdmZDViOGEuLjJmNWRhOWYgMTAwNjQ0CistLS0gYS9lbGYvcmVhZGxpYi5jCisrKysgYi9lbGYvcmVhZGxpYi5jCitAQCAtNTEsNiArNTEsNyBAQCBzdGF0aWMgc3RydWN0IGtub3duX25hbWVzIGludGVycHJldGVyc1tdID0KKyAjaWZkZWYgU1lTREVQX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTCisgICBTWVNERVBfS05PV05fSU5URVJQUkVURVJfTkFNRVMKKyAjZW5kaWYKKysgIE9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUworIH07CisgCisgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBrbm93bl9saWJzW10gPQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjOGZiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaApAQCAtMCwwICsxLDIwOCBAQAorRnJvbSBlYTk4YjFhMTJiNWY3NzlmZDc5NDc4ZmY5MzBhNzllZjYwMzg3ODUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MTU6MDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8yN10gcHBjL3NxcnQ6IEZpeCB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX3NxcnRfZmluaXRlJworCitvbiBwcGMgZml4ZXMgdGhlIGVycm9ycyBsaWtlIGJlbG93Cit8IC4vLmxpYnMvbGlicHVsc2Vjb3JlLTEuMS5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NoYW5nZUxvZworCisyMDEyLTAxLTA2ICBLaGVtIFJhaiAgPHJhai5raGVtQGdtYWlsLmNvbT4KKworICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYzogQWRkIF9fKl9maW5pdGUgYWxpYXMuCisgICAgICAgIFJlbW92ZSBjcnVmdC4KKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYzogRGl0dG8uCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYzogRGl0dG8uCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmM6IERpdHRvLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyAgICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jICAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMSArCisgMTIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uMTc5NWZkNiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK0BAIC0zOSwxNCArMzksOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCisgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorLSNlbHNlCistZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCistICAgICBkb3VibGUgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtMTMyLDMgKzEyNiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li5hOTE3ZjMxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitAQCAtMzcsMTQgKzM3LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKyBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCistI2Vsc2UKKy1mbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKy0gICAgIGZsb2F0IGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTk5LDMgKzkzLDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLjE3OTVmZDYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0zOSwxNCArMzksOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBXZSBmaW5kIHRoZSBhY3R1YWwgc3F1YXJlIHJvb3QgYW5kIGhhbGYgb2YgaXRzIHJlY2lwcm9jYWwKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCistI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCisgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorLSNlbHNlCistZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCistICAgICBkb3VibGUgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtMTMyLDMgKzEyNiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLmE5MTdmMzEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM3LDE0ICszNyw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisgICAgc3F1YXJlIHJvb3QuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGZsb2F0CisgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorLSNlbHNlCistZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCistICAgICBmbG9hdCBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05OSwzICs5Myw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggNzFlNTE2ZC4uZmM0YTc0OSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTEzMiwzICsxMzIsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSwzICs5OSw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZhOTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOC1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIDI0NTZlYTQ0YWVlZWRhZTg3ZWRiNTIyZjc3YTc5NjlkNjM2Mzk5YjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoxNjozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzI3XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCisgb3V0IF9fc2xvdyB2ZXJzaW9ucworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgICAgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyAgIHwgIDggKysrKysrKy0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgIHwgMTQgKysrKysrKysrKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDE0ICsrKysrKysrKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAgOCArKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAgOCArKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgIHwgIDkgKysrKysrKystCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgICB8IDE0ICsrKysrKysrKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEyICsrKysrKysrKystLQorIDEyIGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitpbmRleCAxNzk1ZmQ2Li5kYWE4M2YzIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtNzcsNyArNzcsNyBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMjYsNCArMTI2LDEyIEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK2luZGV4IGE5MTdmMzEuLmI4MTJjZjEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgc3F1YXJlIHJvb3QuICAqLworIAorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05Myw0ICs5MywxMCBAQCBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjFjMzQyNDQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsNCArMTMyLDEyIEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi44MTI2NTM1IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCAxNzk1ZmQ2Li4xM2E4MTk3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDAsNyArNDAsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAgICBzaW11bHRhbmVvdXNseS4gICovCisgCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC03Nyw3ICs3Nyw3IEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEyNiw0ICsxMjYsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0CisrZG91YmxlCisrX19pZWVlNzU0X3NxcnQgKGRvdWJsZSB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IGE5MTdmMzEuLmZhZTJkODEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAgICBzcXVhcmUgcm9vdC4gICovCisgCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTkzLDQgKzkzLDExIEBAIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IGZjNGE3NDkuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uMTBkZTFmMCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtMzksMTAgKzM5LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgI2Vsc2UKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgIGZsb2F0IGI7CisgI2VuZGlmCisgeworQEAgLTk5LDQgKzk5LDEyIEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnRmCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IHgpCisreworKyAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnRmICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NDc1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDktUXVvdGUtZnJvbS1idWctMTQ0My13aGljaC1leHBsYWlucy13aGF0LXRoZS1wYXRjaC1kby5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGFjZjdhMDI4ODE3ZTcxZWI5OWQ3ODUwMzc2NTlhYmQ0ZDEyMGZmZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyMDowOSArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzI3XSBRdW90ZSBmcm9tIGJ1ZyAxNDQzIHdoaWNoIGV4cGxhaW5zIHdoYXQgdGhlIHBhdGNoIGRvZXMKKyA6CisKKyAgV2UgYnVpbGQgc29tZSByYW5kb20gcHJvZ3JhbSBhbmQgbGluayBpdCB3aXRoIC1sdXN0LiAgV2hlbiB3ZSBydW4gaXQsCisgIGl0IGRpZXMgd2l0aCBhIFNJR1NFR1YgYmVmb3JlIHJlYWNoaW5nIG1haW4oKS4KKworICBMaWJ1c3Quc28gZGVwZW5kcyBvbiBsaWJ1cmN1LWJwLnNvIGZyb20gdGhlIHVzZXJtb2RlLXJjdSBwYWNrYWdlLgorICBBbHRob3VnaCBsaWJ1c3Quc28gaXMgbm90IHByZWxpbmtlZCwgbGlidXJjdS1icC5zbyBJUyBwcmVsaW5rZWQ7IHRoaXMKKyAgaXMgY3JpdGljYWwuCisKKyAgTGlidXN0LnNvIHVzZXMgYSBUTFMgLyBfX3RocmVhZCB2YXJpYWJsZSB0aGF0IGlzIGRlZmluZWQgaW4gbGlidXJjdS0KKyAgYnAuc28uICBUaGVyZSBhcmUgc3BlY2lhbCBBUk0tc3BlY2lmaWMgcmVsb2NhdGlvbiB0eXBlcyB0aGF0IGFsbG93IHR3bworICBzaGFyZWQgbGlicmFyaWVzIHRvIHNoYXJlIHRocmVhZC1zcGVjaWZpYyBkYXRhLiAgVGhpcyBpcyBjcml0aWNhbCB0b28uCisKKyAgT25lIG1vcmUgY3JpdGljYWwgaXNzdWU6IGFsdGhvdWdoIGxpYnVyY3UtYnAuc28gaXMgcHJlbGlua2VkLCB3ZSBjYW4ndAorICBsb2FkIGl0IGF0IGl0cyBwcmVsaW5rZWQgYWRkcmVzcywgYmVjYXVzZSB3ZSBhbHNvIGxpbmsgYWdhaW5zdAorICBsaWJydC5zbywgYW5kIGxpYnJ0LnNvIHVzZXMgdGhhdCBhZGRyZXNzLgorCisgIFRoZSBkeW5hbWljIGxpbmtlciBpcyBmb3JjZWQgdG8gcmVsaW5rIGxpYnVyY3UtYnAuc28gYXQgYSBkaWZmZXJlbnQKKyAgYWRkcmVzcy4gIEluIHRoZSBjb3Vyc2Ugb2YgcmVsaW5raW5nLCBpdCBwcm9jZXNzZXMgdGhlIHNwZWNpYWwgQVJNCisgIHJlbG9jYXRpb24gcmVjb3JkIG1lbnRpb25lZCBhYm92ZS4gIFRoZSBwcmVsaW5rZXIgaGFzIGFscmVhZHkgZmlsbGVkCisgIGluIHRoZSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgYSBzaG9ydCBvZmZzZXQgaW50byBhIHRhYmxlIG9mIHRocmVhZC0KKyAgc3BlY2lmaWMgZGF0YSB0aGF0IGlzIGFsbG9jYXRlZCBwZXItdGhyZWFkIGZvciBlYWNoIGxpYnJhcnkgdGhhdCB1c2VzCisgIFRMUy4gIEJlY2F1c2UgdGhlIG5vcm1hbCBiZWhhdmlvciBvZiBhIHJlbG9jYXRpb24gaXMgdG8gYWRkIHRoZSBzeW1ib2wKKyAgdmFsdWUgdG8gYW4gYWRkZW5kIHN0b3JlZCBhdCB0aGUgYWRkcmVzcyBiZWluZyByZWxvY2F0ZWQsIHdlIGVuZCB1cAorICBhZGRpbmcgdGhlIHNob3J0IG9mZnNldCB0byBpdHNlbGYsIGRvdWJsaW5nIGl0LgorCisgIE5vdyB3ZSBoYXZlIGFuIGF3a3dhcmQgc2l0dWF0aW9uLiAgVGhlIGxpYnVzdC5zbyBsaWJyYXJ5IGRvZXNuJ3Qga25vdworICBhYm91dCB0aGUgYWRkZW5kLCBzbyBpdHMgVExTIGRhdGEgZm9yIHRoaXMgZWxlbWVudCBpcyBjb3JyZWN0LiAgVGhlCisgIGxpYnVyY3UtYnAuc28gbGlicmFyeSBoYXMgYSBkaWZmZXJlbnQgb2Zmc2V0IGZvciB0aGUgZWxlbWVudC4gIFdoZW4gd2UKKyAgZ28gdG8gaW5pdGlhbGl6ZSB0aGUgZWxlbWVudCBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gbGlidXJjdS1icC5zbywgd2UKKyAgd3JpdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3VsdCBhdCB0aGUgZG91YmxlZCAoYnJva2VuKSBvZmZzZXQuCisgIExhdGVyLCB3aGVuIHdlIHJlZmVyIHRvIHRoZSBhZGRyZXNzIGZyb20gbGlidXN0LnNvLCB3ZSBjaGVjayB0aGUgdmFsdWUKKyAgYXQgdGhlIGNvcnJlY3Qgb2Zmc2V0LCBidXQgaXQncyBOVUxMLCBzbyB3ZSBlYXQgaG90IFNJR1NFR1YuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oIGIvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCitpbmRleCA2ZmIyMGJkLi44ODA1NTM3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCisrKysgYi9zeXNkZXBzL2FybS9kbC1tYWNoaW5lLmgKK0BAIC00OTksNyArNDk5LDcgQEAgZWxmX21hY2hpbmVfcmVsIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgY29uc3QgRWxmMzJfUmVsICpyZWxvYywKKyAKKyAJY2FzZSBSX0FSTV9UTFNfRFRQT0ZGMzI6CisgCSAgaWYgKHN5bSAhPSBOVUxMKQorLQkgICAgKnJlbG9jX2FkZHIgKz0gc3ltLT5zdF92YWx1ZTsKKysJICAgICpyZWxvY19hZGRyID0gc3ltLT5zdF92YWx1ZTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBSX0FSTV9UTFNfVFBPRkYzMjoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxZTU3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwMTczMjJlZTI4YzE1NzljZTZjODE5MDQ4NDJhYWFkYTljODI0MDNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCAxOSBEZWMgMjAxMiAwNDozOTo1NyAtMDYwMAorU3ViamVjdDogW1BBVENIIDEwLzI3XSBlZ2xpYmM6IHJ1biBsaWJtLWVyci10YWIucGwgd2l0aCBzcGVjaWZpYyBkaXJzIGluICR7U30KKworbGlibS1lcnItdGFiLnBsIHdpbGwgcGFyc2UgYWxsIHRoZSBmaWxlcyBuYW1lZCAibGlibS10ZXN0LXVscHMiCitpbiB0aGUgZ2l2ZW4gZGlyIHJlY3Vyc2l2ZWx5LiBUbyBhdm9pZCBwYXJzaW5nIHRoZSBvbmUgaW4KKyR7U30vLnBjLyAoaXQgZG9lcyBleGlzdCBhZnRlciBlZ2xpYmMgYWRkcyBhYXJjaDY0IHN1cHBvcnQsCiske1N9Ly5wYy9hYXJjaDY0LTAwMDEtZ2xpYmMtZnNmLXYxLWVhZjZmMjA1LnBhdGNoL3BvcnRzL3N5c2RlcHMvCithYXJjaDY0L2xpYm0tdGVzdC11bHBzKSwgcnVuIGxpYm0tZXJyLXRhYi5wbCB3aXRoIHNwZWNpZmljIGRpcnMKK2luICR7U30uCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KKy0tLQorIG1hbnVhbC9NYWtlZmlsZSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWFudWFsL01ha2VmaWxlIGIvbWFudWFsL01ha2VmaWxlCitpbmRleCA1MzgyMjA4Li42YjcwMWIwIDEwMDY0NAorLS0tIGEvbWFudWFsL01ha2VmaWxlCisrKysgYi9tYW51YWwvTWFrZWZpbGUKK0BAIC0xMDUsNyArMTA1LDggQEAgJChvYmpwZngpbGlibS1lcnIudGV4aTogJChvYmpwZngpc3RhbXAtbGlibS1lcnIKKyAkKG9ianBmeClzdGFtcC1saWJtLWVycjogbGlibS1lcnItdGFiLnBsICQod2lsZGNhcmQgJChmb3JlYWNoIGRpciwkKHN5c2RpcnMpLFwKKyAJCQkJCQkgICAgICQoZGlyKS9saWJtLXRlc3QtdWxwcykpCisgCXB3ZD1gcHdkYDsgXAorLQkkKFBFUkwpICQ8ICQkcHdkLy4uID4gJChvYmpwZngpbGlibS1lcnItdG1wCisrCSQoUEVSTCkgJDwgJCRwd2QvLi4vcG9ydHMgPiAkKG9ianBmeClsaWJtLWVyci10bXAKKysJJChQRVJMKSAkPCAkJHB3ZC8uLi9zeXNkZXBzID4+ICQob2JqcGZ4KWxpYm0tZXJyLXRtcAorIAkkKG1vdmUtaWYtY2hhbmdlKSAkKG9ianBmeClsaWJtLWVyci10bXAgJChvYmpwZngpbGlibS1lcnIudGV4aQorIAl0b3VjaCAkQAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMTEyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTEtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApAQCAtMCwwICsxLDYxIEBACitGcm9tIDFiZTQ1Zjg3MGViYmIwMjU5YmVhNTI1MGE2ZDJjMmZiY2IzMzQwOWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDoyNDo0NiArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzI3XSBfX2llZWU3NTRfc3FydHssZn0gYXJlIG5vdyBpbmxpbmUgZnVuY3Rpb25zIGFuZCBjYWxsCisgb3V0IF9fc2xvdyB2ZXJzaW9ucworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogY2h1bnJvbmcgZ3VvIDxCNDAyOTBAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgfCA2ICsrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggMWMzNDI0NC4uNzAzOGE3MCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQxLDEwICs0MSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgI2Vsc2UKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiKQorICAgICAgZG91YmxlIGI7CisgI2VuZGlmCisgeworQEAgLTgzLDcgKzgzLDcgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDgxMjY1MzUuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3NzkxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSA0OTQ3MWFiMWY5MGUzOTJkYTk1MjBlZWE4MzFjZTg3MzFiZTlmYzhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjU6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8yN10gTWFrZSBsZCAtLXZlcnNpb24gb3V0cHV0IG1hdGNoaW5nIGdyb2sgZ29sZCdzIG91dHB1dAorCithZGFwdGVkIGZyb20gZnJvbSB1cHN0cmVhbSBicmFuY2ggcm9sYW5kL2dvbGQtdnMtbGliYworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgICAgfCAyICstCisgY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA0NWNjN2NiLi43ZDcyOTlhIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00NzA5LDcgKzQ3MDksNyBAQCBlbHNlCisgICAjIEZvdW5kIGl0LCBub3cgY2hlY2sgdGhlIHZlcnNpb24uCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHZlcnNpb24gb2YgJExEIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyB2ZXJzaW9uIG9mICRMRC4uLiAiID4mNjsgfQorLSAgYWNfcHJvZ192ZXJzaW9uPWAkTEQgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIGxkLiogXChbMC05XVswLTldKlwuWzAtOS5dKlwpLiokL1wxL3AnYAorKyAgYWNfcHJvZ192ZXJzaW9uPWAkTEQgLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIFtCYmludXRpbHNkXVteLl0qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKyAgIGNhc2UgJGFjX3Byb2dfdmVyc2lvbiBpbgorICAgICAnJykgYWNfcHJvZ192ZXJzaW9uPSJ2LiA/Lj8/LCBiYWQiOyBhY192ZXJjX2ZhaWw9eWVzOzsKKyAgICAgMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKikKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDdlOTM4M2EuLmE0NjdhNjkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTk0MSw3ICs5NDEsNyBAQCBBQ19DSEVDS19QUk9HX1ZFUihBUywgJEFTLCAtLXZlcnNpb24sCisgCQkgIFsyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qXSwKKyAJCSAgQVM9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGFzIikKKyBBQ19DSEVDS19QUk9HX1ZFUihMRCwgJExELCAtLXZlcnNpb24sCistCQkgIFtHTlUgbGQuKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAorKwkJICBbR05VIFtCYmludXRpbHNkXVteLl0qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKV0sCisgCQkgIFsyLjFbMC05XVswLTldKnwyLjJbMi05XSp8Mi5bMy05XVswLTldKnxbMy05XS4qfFsxLTldWzAtOV0qXSwKKyAJCSAgTEQ9OiBjcml0aWNfbWlzc2luZz0iJGNyaXRpY19taXNzaW5nIGxkIikKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmRhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiNTVlNDliMTk5YzQ2YTI3OGFiNjZiNmIxZTNlYWI0ODNiOTEzMTk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6Mjc6MTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8yN10gc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjOiBoYW5kbGUgY29ycmVjdGx5CisgJGxpYmNfY3Zfcm9vdHNiaW5kaXIKKworVXBzdHJlYW0tU3RhdHVzOlBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWF0dGhpZXUgQ3JhcGV0IDxNYXR0aGlldS5DcmFwZXRAaW5nZW5pY28uY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvZ251L2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBzeXNkZXBzL2dudS9jb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9jb25maWd1cmUgYi9zeXNkZXBzL2dudS9jb25maWd1cmUKK2luZGV4IDkyMzkyOTcuLmM1ZWQzY2EgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dudS9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZQorQEAgLTMyLDYgKzMyLDYgQEAgY2FzZSAiJHByZWZpeCIgaW4KKyAgIGVsc2UKKyAgICAgbGliY19jdl9sb2NhbHN0YXRlZGlyPSRsb2NhbHN0YXRlZGlyCisgICAgZmkKKy0gIGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKysgIHRlc3QgLW4gIiRsaWJjX2N2X3Jvb3RzYmluZGlyIiB8fCBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisgICA7OworIGVzYWMKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKK2luZGV4IDYzNGZlNGQuLjNkYjE2OTcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYworQEAgLTIxLDYgKzIxLDYgQEAgY2FzZSAiJHByZWZpeCIgaW4KKyAgIGVsc2UKKyAgICAgbGliY19jdl9sb2NhbHN0YXRlZGlyPSRsb2NhbHN0YXRlZGlyCisgICAgZmkKKy0gIGxpYmNfY3Zfcm9vdHNiaW5kaXI9L3NiaW4KKysgIHRlc3QgLW4gIiRsaWJjX2N2X3Jvb3RzYmluZGlyIiB8fCBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisgICA7OworIGVzYWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhNWQyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAwMjI5ZDZjOWMwZTc3MjE3NzMxMThkNWFlMWQxNzJjMjY5YmM5ODI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6Mjg6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8yN10gQWRkIHVudXNlZCBhdHRyaWJ1dGUKKworSGVscHMgaW4gYXZvaWRpbmcgZ2NjIHdhcm5pbmcgd2hlbiBoZWFkZXIgaXMgaXMgaW5jbHVkZWQgaW4KK2Egc291cmNlIGZpbGUgd2hpY2ggZG9lcyBub3QgdXNlIGJvdGggZnVuY3Rpb25zCisKKyAgICAgICAgKiBpY29udi9nY29udl9jaGFyc2V0LmggKHN0cmlwKToKKyAgICAgICAgQWRkIHVudXNlZCBhdHRyaWJ1dGUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgaWNvbnYvZ2NvbnZfY2hhcnNldC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCitpbmRleCA4MDI5MGJjLi43ODkwYThlIDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCisrKysgYi9pY29udi9nY29udl9jaGFyc2V0LmgKK0BAIC0yMSw3ICsyMSw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorIAorIAorLXN0YXRpYyB2b2lkCisrc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgc3RyaXAgKGNoYXIgKndwLCBjb25zdCBjaGFyICpzKQorIHsKKyAgIGludCBzbGFzaF9jb3VudCA9IDA7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjI2MWNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZjA1OGM4ODRkZDI2ZDEwYzk0NTUwY2E1MjUyZWQ2NTc2NjE0ZDY1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IEZlYiAyMDE1IDAzOjIzOjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMjddIFdoZW4gZGlzYWJsaW5nIFNTRSBhbHNvIG1ha2Ugc3VyZSB0aGF0IGZwbWF0aCBpcyBub3QKKyBzZXQgdG8gdXNlIFNTRSBhcyB3ZWxsCisKK1RoaXMgZml4ZXMgZXJyb3JzIHdoZW4gd2UgaW5qZWN0IHNzZSBvcHRpb25zIHRocm91Z2ggQ0ZMQUdTIGFuZCBub3cKK3RoYXQgd2UgaGF2ZSAtV2Vycm9yIHR1cm5lZCBvbiBieSBkZWZhdWx0IHRoaXMgd2FybmluZyB0dXJucyB0byBiZWNvbWUKK2Vycm9yIG9uIHg4NgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHN5c2RlcHMveDg2L01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy94ODYvTWFrZWZpbGUgYi9zeXNkZXBzL3g4Ni9NYWtlZmlsZQoraW5kZXggMTlmNWVjYS4uODI3ZWE3MSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMveDg2L01ha2VmaWxlCisrKysgYi9zeXNkZXBzL3g4Ni9NYWtlZmlsZQorQEAgLTEsNiArMSw2IEBACisgaWZlcSAoJChzdWJkaXIpLGVsZikKKyBDRkxBR1MtLm9zICs9ICQoaWYgJChmaWx0ZXIgJChARiksJChwYXRzdWJzdCAlLCUub3MsJChhbGwtcnRsZC1yb3V0aW5lcykpKSxcCistCQkgICAtbW5vLXNzZSAtbW5vLW1teCkKKysJCSAgIC1tbm8tc3NlIC1tbm8tbW14IC1tZnBtYXRoPTM4NykKKyAKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1sZC1zc2UtdXNlLm91dAorICQob2JqcGZ4KXRzdC1sZC1zc2UtdXNlLm91dDogLi4vc3lzZGVwcy94ODYvdHN0LWxkLXNzZS11c2Uuc2ggJChvYmpwZngpbGQuc28KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5ZThiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2gKQEAgLTAsMCArMSwyNjMgQEAKK0Zyb20gNzAxOTlmZTU5YzM4YjYyMWFiNDEyMWQ3YTU1NzE5YjJiMjliMzZkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjMxOjA2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMjddICd5ZXMnIHdpdGhpbiB0aGUgcGF0aCBzZXRzIHdyb25nIGNvbmZpZyB2YXJpYWJsZXMKKworSXQgc2VlbXMgdGhhdCB0aGUgJ0FDX0VHUkVQX0NQUCh5ZXMuLi4nIGV4YW1wbGUgaXMgcXVpdGUgcG9wdWxhcgorYnV0IGJlaW5nIHN1Y2ggYSBzaG9ydCB3b3JkIHRvIGdyZXAgaXQgaXMgbGlrZWx5IHRvIHByb2R1Y2UKK2ZhbHNlLXBvc2l0aXZlIG1hdGNoZXMgd2l0aCB0aGUgcGF0aCBpdCBpcyBjb25maWd1cmVkIGludG8uCisKK1RoZSBjaGFuZ2UgaXMgdG8gdXNlIGEgbW9yZSBlbGFib3JhdGVkIHN0cmluZyB0byBncmVwIGZvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2xpYmMtYWxwaGFAc291cmNld2FyZS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IEJlbmphbWluIEVzcXVpdmVsIDxiZW5qYW1pbi5lc3F1aXZlbEBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9hcm0vY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9taXBzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9uaW9zMi9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMgICAgICAgICAgICAgIHwgNCArKy0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlICAgIHwgOCArKysrLS0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlCitpbmRleCA1YmQzNTVhLi4zYmM1NTM3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQorQEAgLTE0OCwxMiArMTQ4LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fQUFSQ0g2NEVCX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgIGlzX2FhcmNoNjRfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfYWFyY2g2NF9iZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfYWFyY2g2NF9iZT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X2FhcmNoNjRfYmU9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYworaW5kZXggNzg1MWRkNC4uNmU5MjM4MSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKK0BAIC0xMCw4ICsxMCw4IEBAIEdMSUJDX1BST1ZJREVTIGRubCBTZWUgYWNsb2NhbC5tNCBpbiB0aGUgdG9wIGxldmVsIHNvdXJjZSBkaXJlY3RvcnkuCisgIyB0aGUgZHluYW1pYyBsaW5rZXIgdmlhICVpZmRlZi4KKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpZyBlbmRpYW5dLAorICAgW2xpYmNfY3ZfYWFyY2g2NF9iZV0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9fQUFSQ0g2NEVCX18KKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKGlzX2FhcmNoNjRfYmUsWyNpZmRlZiBfX0FBUkNINjRFQl9fCisrICAgICAgICAgICAgICAgICAgICAgIGlzX2FhcmNoNjRfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfYWFyY2g2NF9iZT15ZXMsIGxpYmNfY3ZfYWFyY2g2NF9iZT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfYWFyY2g2NF9iZSA9IHllczsgdGhlbgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZSBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQoraW5kZXggMTU4MTE2Yi4uNWVhZjU0ZSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlCitAQCAtMTUxLDEyICsxNTEsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWZkZWYgX19BUk1fUENTX1ZGUAorLQkJICAgICAgeWVzCisrCQkgICAgICB1c2VfYXJtX3Bjc192ZnAKKyAJCSAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9hcm1fcGNzX3ZmcCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfYXJtX3Bjc192ZnA9eWVzCisgZWxzZQorICAgbGliY19jdl9hcm1fcGNzX3ZmcD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworaW5kZXggODU5YzkyYS4uMmY0YTZlMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9hcm0vY29uZmlndXJlLmFjCitAQCAtMTUsOCArMTUsOCBAQCBBQ19ERUZJTkUoUElfU1RBVElDX0FORF9ISURERU4pCisgIyB0aGUgZHluYW1pYyBsaW5rZXIgdmlhICVpZmRlZi4KKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIEFSTSBoYXJkLWZsb2F0IEFCSV0sCisgICBbbGliY19jdl9hcm1fcGNzX3ZmcF0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9fQVJNX1BDU19WRlAKKy0JCSAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUCh1c2VfYXJtX3Bjc192ZnAsWyNpZmRlZiBfX0FSTV9QQ1NfVkZQCisrCQkgICAgICB1c2VfYXJtX3Bjc192ZnAKKyAJCSAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X2FybV9wY3NfdmZwPXllcywgbGliY19jdl9hcm1fcGNzX3ZmcD1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfYXJtX3Bjc192ZnAgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL21pcHMvY29uZmlndXJlIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZQoraW5kZXggNGUxMzI0OC4uZjE0YWY5NSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKK0BAIC0xNDMsMTEgKzE0MywxMSBAQCBlbHNlCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIGRubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWYKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX21pcHNfbmFuMjAwOCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMKK2luZGV4IGJjYmRhZmYuLmFkMzA1N2YgMTAwNjQ0CistLS0gYS9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCitAQCAtNiw5ICs2LDkgQEAgZG5sIHBvc2l0aW9uIGluZGVwZW5kZW50IHdheS4KKyBkbmwgQUNfREVGSU5FKFBJX1NUQVRJQ19BTkRfSElEREVOKQorIAorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgMjAwOCBOYU4gZW5jb2RpbmddLAorLSAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAoeWVzLCBbZG5sCisrICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh1c2VfbWlwc19uYW4yMDA4LCBbZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZl0sIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcywgbGliY19jdl9taXBzX25hbjIwMDg9bm8pXSkKKyBpZiB0ZXN0IHgkbGliY19jdl9taXBzX25hbjIwMDggPSB4eWVzOyB0aGVuCisgICBBQ19ERUZJTkUoSEFWRV9NSVBTX05BTjIwMDgpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQoraW5kZXggMTRjOGEzYS4uZGRlMzgxNCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQorQEAgLTE0MiwxMiArMTQyLDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICBpc19uaW9zMl9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJpc19uaW9zMl9iZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfbmlvczJfYmU9eWVzCisgZWxzZQorICAgbGliY19jdl9uaW9zMl9iZT1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKK2luZGV4IGYwNWY0MzguLmRjODYzOTkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKK0BAIC00LDggKzQsOCBAQCBHTElCQ19QUk9WSURFUyBkbmwgU2VlIGFjbG9jYWwubTQgaW4gdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorICMgTmlvcyBJSSBiaWcgZW5kaWFuIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgorIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYmlnIGVuZGlhbl0sCisgICBbbGliY19jdl9uaW9zMl9iZV0sCistICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUChpc19uaW9zMl9iZSxbI2lmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCisrICAgICAgICAgICAgICAgICAgICAgIGlzX25pb3MyX2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X25pb3MyX2JlPXllcywgbGliY19jdl9uaW9zMl9iZT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfbmlvczJfYmUgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZSBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCitpbmRleCA4M2Y4YjEzLi4yYjZjYmVlIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCitAQCAtMzg3LDExICszODcsMTEgQEAgZWxzZQorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9taXBzX25hbjIwMDgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKK2luZGV4IDUwMzllYzkuLjEwMzVmNzYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKK0BAIC05OCw5ICs5OCw5IEBAIEFDX0NPTVBJTEVfSUZFTFNFKAorIExJQkNfQ09ORklHX1ZBUihbbWlwcy1tb2RlLXN3aXRjaF0sWyR7bGliY19taXBzX21vZGVfc3dpdGNofV0pCisgCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSAyMDA4IE5hTiBlbmNvZGluZ10sCistICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh5ZXMsIFtkbmwKKysgIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHVzZV9taXBzX25hbjIwMDgsIFtkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmXSwgbGliY19jdl9taXBzX25hbjIwMDg9eWVzLCBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubyldKQorIAorIGxpYmNfbWlwc19uYW49CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCitpbmRleCA3MGJiMThhLi5mZmQ5ZTNlIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUKK0BAIC0xNTUsMTIgKzE1NSwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZiBfQ0FMTF9FTEYgPT0gMgorLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgdXNlX3BwY19lbGZ2Ml9hYmkKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAidXNlX3BwY19lbGZ2Ml9hYmkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT15ZXMKKyBlbHNlCisgICBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubworQEAgLTE4OCwxMiArMTg4LDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9DQUxMX0VMRgorLSAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVmX2NhbGxfZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfZGVmX2NhbGxfZWxmIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9eWVzCisgZWxzZQorICAgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKK2luZGV4IDA4MjI5MTUuLjlhMzJmZGQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZS5hYworQEAgLTYsOCArNiw4IEBAIExJQkNfU0xJQkRJUl9SVExERElSKFtsaWI2NF0sIFtsaWI2NF0pCisgIyBEZWZpbmUgZGVmYXVsdC1hYmkgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIGZsYWdzLgorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgUG93ZXJQQzY0IEVMRnYyIEFCSV0sCisgICBbbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmldLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZiBfQ0FMTF9FTEYgPT0gMgorLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAodXNlX3BwY19lbGZ2Ml9hYmksWyNpZiBfQ0FMTF9FTEYgPT0gMgorKyAgICAgICAgICAgICAgICAgICAgICB1c2VfcHBjX2VsZnYyX2FiaQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9eWVzLCBsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaT1ubyldKQorIGlmIHRlc3QgJGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpID0geWVzOyB0aGVuCitAQCAtMTksOCArMTksOCBAQCBlbHNlCisgICAjIENvbXBpbGVyIHRoYXQgZG8gbm90IHN1cHBvcnQgRUxGdjIgQUJJIGRvZXMgbm90IGRlZmluZSBfQ0FMTF9FTEYKKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBkZWZpbmVzIF9DQUxMX0VMRl0sCisgICAgIFtsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZl0sCistICAgIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWZkZWYgX0NBTExfRUxGCistICAgICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICBbQUNfRUdSRVBfQ1BQKGlzX2RlZl9jYWxsX2VsZixbI2lmZGVmIF9DQUxMX0VMRgorKyAgICAgICAgICAgICAgICAgICAgICAgICBpc19kZWZfY2FsbF9lbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICBdLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj15ZXMsIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vKV0pCisgICBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZiA9IG5vOyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U4MjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gYzkwMzA2MTA3ZmJiZTI5NzkwMTI5MTdlODc3NDdjZTc4YzgyYWI4OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjMzOjAzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMjddIHRpbWV6b25lOiByZS13cml0dGVuIHR6c2VsZWN0IGFzIHBvc2l4IHNoCisKK1RvIGF2b2lkIHRoZSBiYXNoIGRlcGVuZGVuY3kuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgdGltZXpvbmUvTWFrZWZpbGUgICAgIHwgMiArLQorIHRpbWV6b25lL3R6c2VsZWN0LmtzaCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3RpbWV6b25lL01ha2VmaWxlIGIvdGltZXpvbmUvTWFrZWZpbGUKK2luZGV4IDI0YzkzYzYuLjg4NmIwNmUgMTAwNjQ0CistLS0gYS90aW1lem9uZS9NYWtlZmlsZQorKysrIGIvdGltZXpvbmUvTWFrZWZpbGUKK0BAIC0xMjYsNyArMTI2LDcgQEAgJCh0ZXN0ZGF0YSkvWFQlOiB0ZXN0ZGF0YS9YVCUKKyAJY3AgJDwgJEAKKyAKKyAkKG9ianBmeCl0enNlbGVjdDogdHpzZWxlY3Qua3NoICQoY29tbW9uLW9ianBmeCljb25maWcubWFrZQorLQlzZWQgLWUgJ3N8L2Jpbi9iYXNofCQoQkFTSCl8JyBcCisrCXNlZCAtZSAnc3wvYmluL2Jhc2h8L2Jpbi9zaHwnIFwKKyAJICAgIC1lICdzfFRaRElSPVtefV0qfFRaRElSPSQoem9uZWRpcil8JyBcCisgCSAgICAtZSAnL1RaVkVSU0lPTj0vc3xzZWVfTWFrZWZpbGV8IiQodmVyc2lvbikifCcgXAorIAkgICAgLWUgJy9QS0dWRVJTSU9OPS9zfD0uKnw9IiQoUEtHVkVSU0lPTikifCcgXAorZGlmZiAtLWdpdCBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaCBiL3RpbWV6b25lL3R6c2VsZWN0LmtzaAoraW5kZXggOWQ3MDY5MS4uMjVmNDVhOCAxMDA3NTUKKy0tLSBhL3RpbWV6b25lL3R6c2VsZWN0LmtzaAorKysrIGIvdGltZXpvbmUvdHpzZWxlY3Qua3NoCitAQCAtMzUsNyArMzUsNyBAQCBSRVBPUlRfQlVHU19UTz10ekBpYW5hLm9yZworIAorICMgU3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlmIHRoZXkgYXJlIHVuc2V0LgorIDogJHtBV0s9YXdrfQorLTogJHtUWkRJUj1gcHdkYH0KKys6ICR7VFpESVI9JChwd2QpfQorIAorICMgQ2hlY2sgZm9yIGF3ayBQb3NpeCBjb21wbGlhbmNlLgorICgkQVdLIC12IHg9eSAnQkVHSU4geyBleGl0IDEyMyB9JykgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYWNiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE4LWVnbGliYy1Dcm9zcy1idWlsZGluZy1hbmQtdGVzdGluZy1pbnN0cnVjdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw2MTkgQEAKK0Zyb20gZWZmMDQ4MDc0YWM3YjUyNThiYjYxNWU1YTViMjIxZGFhMTliMThhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQyOjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTgvMjddIGVnbGliYzogQ3Jvc3MgYnVpbGRpbmcgYW5kIHRlc3RpbmcgaW5zdHJ1Y3Rpb25zCisKK1BvcnRlZCBmcm9tIGVnbGliYworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBHTElCQy5jcm9zcy1idWlsZGluZyB8IDM4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBHTElCQy5jcm9zcy10ZXN0aW5nICB8IDIwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDU4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLWJ1aWxkaW5nCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEdMSUJDLmNyb3NzLXRlc3RpbmcKKworZGlmZiAtLWdpdCBhL0dMSUJDLmNyb3NzLWJ1aWxkaW5nIGIvR0xJQkMuY3Jvc3MtYnVpbGRpbmcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lNmUwZGExCistLS0gL2Rldi9udWxsCisrKysgYi9HTElCQy5jcm9zcy1idWlsZGluZworQEAgLTAsMCArMSwzODMgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzLUNvbXBpbGluZyBHTElCQworKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKysKKytJbnRyb2R1Y3Rpb24KKysKKytNb3N0IEdOVSB0b29scyBoYXZlIGEgc2ltcGxlIGJ1aWxkIHByb2NlZHVyZTogeW91IHJ1biB0aGVpcgorKydjb25maWd1cmUnIHNjcmlwdCwgYW5kIHRoZW4geW91IHJ1biAnbWFrZScuICBVbmZvcnR1bmF0ZWx5LCB0aGUKKytwcm9jZXNzIG9mIGNyb3NzLWNvbXBpbGluZyB0aGUgR05VIEMgbGlicmFyeSBpcyBxdWl0ZSBhIGJpdCBtb3JlCisraW52b2x2ZWQ6CisrCisrMSkgQnVpbGQgYSBjcm9zcy1jb21waWxlciwgd2l0aCBjZXJ0YWluIGZhY2lsaXRpZXMgZGlzYWJsZWQuCisrCisrMikgQ29uZmlndXJlIHRoZSBDIGxpYnJhcnkgdXNpbmcgdGhlIGNvbXBpbGVyIHlvdSBidWlsdCBpbiBzdGVwIDEpLgorKyAgIEJ1aWxkIGEgZmV3IG9mIHRoZSBDIHJ1bi10aW1lIG9iamVjdCBmaWxlcywgYnV0IG5vdCB0aGUgcmVzdCBvZiB0aGUKKysgICBsaWJyYXJ5LiAgSW5zdGFsbCB0aGUgbGlicmFyeSdzIGhlYWRlciBmaWxlcyBhbmQgdGhlIHJ1bi10aW1lCisrICAgb2JqZWN0IGZpbGVzLCBhbmQgY3JlYXRlIGEgZHVtbXkgbGliYy5zby4KKysKKyszKSBCdWlsZCBhIHNlY29uZCBjcm9zcy1jb21waWxlciwgdXNpbmcgdGhlIGhlYWRlciBmaWxlcyBhbmQgb2JqZWN0CisrICAgZmlsZXMgeW91IGluc3RhbGxlZCBpbiBzdGVwIDIuCisrCisrNCkgQ29uZmlndXJlLCBidWlsZCwgYW5kIGluc3RhbGwgYSBmcmVzaCBDIGxpYnJhcnksIHVzaW5nIHRoZSBjb21waWxlcgorKyAgIGJ1aWx0IGluIHN0ZXAgMy4KKysKKys1KSBCdWlsZCBhIHRoaXJkIGNyb3NzLWNvbXBpbGVyLCBiYXNlZCBvbiB0aGUgQyBsaWJyYXJ5IGJ1aWx0IGluIHN0ZXAgNC4KKysKKytUaGUgcmVhc29uIGZvciB0aGlzIGNvbXBsZXhpdHkgaXMgdGhhdCwgYWx0aG91Z2ggR0NDIGFuZCB0aGUgR05VIEMKKytsaWJyYXJ5IGFyZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5LCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgaW5kZXBlbmRlbnQKKytvZiBlYWNoIG90aGVyOiBHQ0MgcmVxdWlyZXMgdGhlIEMgbGlicmFyeSdzIGhlYWRlcnMgYW5kIHNvbWUgb2JqZWN0CisrZmlsZXMgdG8gY29tcGlsZSBpdHMgb3duIGxpYnJhcmllcywgd2hpbGUgdGhlIEMgbGlicmFyeSBkZXBlbmRzIG9uCisrR0NDJ3MgbGlicmFyaWVzLiAgR0xJQkMgaW5jbHVkZXMgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcyB0byB0aGUgc3RvY2sKKytHTlUgQyBsaWJyYXJ5IHRoYXQgc2ltcGxpZnkgdGhpcyBwcm9jZXNzLCBidXQgdGhlIGZ1bmRhbWVudGFsCisraW50ZXJkZXBlbmRlbmN5IHN0YW5kcy4KKysKKytJbiB0aGlzIGRvY3VtZW50LCB3ZSBleHBsYWluIGhvdyB0byBjcm9zcy1jb21waWxlIGFuIEdMSUJDL0dDQyBwYWlyCisrZnJvbSBzb3VyY2UuICBPdXIgaW50ZW5kZWQgYXVkaWVuY2UgaXMgZGV2ZWxvcGVycyB3aG8gYXJlIGFscmVhZHkKKytmYW1pbGlhciB3aXRoIHRoZSBHTlUgdG9vbGNoYWluIGFuZCBjb21mb3J0YWJsZSB3b3JraW5nIHdpdGgKKytjcm9zcy1kZXZlbG9wbWVudCB0b29scy4gIFdoaWxlIHdlIGRvIHByZXNlbnQgYSB3b3JrZWQgZXhhbXBsZSB0bworK2FjY29tcGFueSB0aGUgZXhwbGFuYXRpb24sIGZvciBjbGFyaXR5J3Mgc2FrZSB3ZSBkbyBub3QgY292ZXIgbWFueSBvZgorK3RoZSBvcHRpb25zIGF2YWlsYWJsZSB0byBjcm9zcy10b29sY2hhaW4gdXNlcnMuCisrCisrCisrUHJlcGFyYXRpb24KKysKKytHTElCQyByZXF1aXJlcyByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIEdOVSBiaW51dGlscywgR0NDLCBhbmQgdGhlCisrTGludXgga2VybmVsLiAgVGhlIHdlYiBwYWdlIDxodHRwOi8vd3d3LmVnbGliYy5vcmcvcHJlcmVxdWlzaXRlcz4KKytkb2N1bWVudHMgdGhlIGN1cnJlbnQgcmVxdWlyZW1lbnRzLCBhbmQgbGlzdHMgcGF0Y2hlcyBuZWVkZWQgZm9yCisrY2VydGFpbiB0YXJnZXQgYXJjaGl0ZWN0dXJlcy4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlc2UgYnVpbGQKKytpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoIGJpbnV0aWxzIDIuMjIuNTEsIEdDQyA0LjYuMiwKKythbmQgTGludXggMy4xLgorKworK0ZpcnN0LCBsZXQncyBzZXQgc29tZSB2YXJpYWJsZXMsIHRvIHNpbXBsaWZ5IGxhdGVyIGNvbW1hbmRzLiAgV2UnbGwKKytidWlsZCBHTElCQyBhbmQgR0NDIGZvciBhbiBBUk0gdGFyZ2V0LCBrbm93biB0byB0aGUgTGludXgga2VybmVsCisrYXMgJ2FybScsIGFuZCB3ZSdsbCBkbyB0aGUgYnVpbGQgb24gYW4gSW50ZWwgeDg2XzY0IExpbnV4IGJveDoKKysKKysgICAgJCBidWlsZD14ODZfNjQtcGMtbGludXgtZ251CisrICAgICQgaG9zdD0kYnVpbGQKKysgICAgJCB0YXJnZXQ9YXJtLW5vbmUtbGludXgtZ251ZWFiaQorKyAgICAkIGxpbnV4X2FyY2g9YXJtCisrCisrV2UncmUgdXNpbmcgdGhlIGFmb3JlbWVudGlvbmVkIHZlcnNpb25zIG9mIEJpbnV0aWxzLCBHQ0MsIGFuZCBMaW51eDoKKysKKysgICAgJCBiaW51dGlsc3Y9YmludXRpbHMtMi4yMi41MQorKyAgICAkIGdjY3Y9Z2NjLTQuNi4yCisrICAgICQgbGludXh2PWxpbnV4LTMuMQorKworK1dlJ3JlIGNhcnJ5aW5nIG91dCB0aGUgZW50aXJlIHByb2Nlc3MgdW5kZXIgJ34vY3Jvc3MtYnVpbGQnLCB3aGljaAorK2NvbnRhaW5zIHVucGFja2VkIHNvdXJjZSB0cmVlcyBmb3IgYmludXRpbHMsIGdjYywgYW5kIGxpbnV4IGtlcm5lbCwKKythbG9uZyB3aXRoIEdMSUJDIHN2biB0cnVuayAod2hpY2ggY2FuIGJlIGNoZWNrZWQtb3V0IHdpdGgKKysnc3ZuIGNvIGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9zdm4vdHJ1bmsgZWdsaWJjJyk6CisrCisrICAgICQgdG9wPSRIT01FL2Nyb3NzLWJ1aWxkLyR0YXJnZXQKKysgICAgJCBzcmM9JEhPTUUvY3Jvc3MtYnVpbGQvc3JjCisrICAgICQgbHMgJHNyYworKyAgICBiaW51dGlscy0yLjIyLjUxICBnbGliYyAgZ2NjLTQuNi4yICBsaW51eC0zLjEKKysKKytXZSdyZSBnb2luZyB0byBwbGFjZSBvdXIgYnVpbGQgZGlyZWN0b3JpZXMgaW4gYSBzdWJkaXJlY3RvcnkgJ29iaicsCisrd2UnbGwgaW5zdGFsbCB0aGUgY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbGNoYWluIGluICd0b29scycsIGFuZCB3ZSdsbAorK3BsYWNlIG91ciBzeXNyb290IChjb250YWluaW5nIGZpbGVzIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0Cisrc3lzdGVtKSBpbiAnc3lzcm9vdCc6CisrCisrICAgICQgb2JqPSR0b3Avb2JqCisrICAgICQgdG9vbHM9JHRvcC90b29scworKyAgICAkIHN5c3Jvb3Q9JHRvcC9zeXNyb290CisrCisrCisrQmludXRpbHMKKysKKytDb25maWd1cmluZyBhbmQgYnVpbGRpbmcgYmludXRpbHMgZm9yIHRoZSB0YXJnZXQgaXMgc3RyYWlnaHRmb3J3YXJkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovYmludXRpbHMKKysgICAgJCBjZCAkb2JqL2JpbnV0aWxzCisrICAgICQgJHNyYy8kYmludXRpbHN2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdAorKyAgICAkIG1ha2UKKysgICAgJCBtYWtlIGluc3RhbGwKKysKKysKKytUaGUgRmlyc3QgR0NDCisrCisrRm9yIG91ciB3b3JrLCB3ZSBuZWVkIGEgY3Jvc3MtY29tcGlsZXIgdGFyZ2V0aW5nIGFuIEFSTSBMaW51eAorK3N5c3RlbS4gIEhvd2V2ZXIsIHRoYXQgY29uZmlndXJhdGlvbiBpbmNsdWRlcyB0aGUgc2hhcmVkIGxpYnJhcnkKKysnbGliZ2NjX3Muc28nLCB3aGljaCBpcyBjb21waWxlZCBhZ2FpbnN0IHRoZSBHTElCQyBoZWFkZXJzICh3aGljaCB3ZQorK2hhdmVuJ3QgaW5zdGFsbGVkIHlldCkgYW5kIGxpbmtlZCBhZ2FpbnN0ICdsaWJjLnNvJyAod2hpY2ggd2UgaGF2ZW4ndAorK2J1aWx0IHlldCkuCisrCisrRm9ydHVuYXRlbHksIHRoZXJlIGFyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdDQyB3aGljaCB0ZWxsIGl0IG5vdAorK3RvIGJ1aWxkICdsaWJnY2Nfcy5zbycuICBUaGUgJy0td2l0aG91dC1oZWFkZXJzJyBvcHRpb24gaXMgc3VwcG9zZWQgdG8KKyt0YWtlIGNhcmUgb2YgdGhpcywgYnV0IGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBpbmNvbXBsZXRlLCBzbyB5b3UgbXVzdAorK2Fsc28gY29uZmlndXJlIHdpdGggdGhlICctLXdpdGgtbmV3bGliJyBvcHRpb24uICBXaGlsZSAnLS13aXRoLW5ld2xpYicKKythcHBlYXJzIHRvIG1lYW4gIlVzZSB0aGUgTmV3bGliIEMgbGlicmFyeSIsIGl0cyBlZmZlY3QgaXMgdG8gdGVsbCB0aGUKKytHQ0MgYnVpbGQgbWFjaGluZXJ5LCAiRG9uJ3QgYXNzdW1lIHRoZXJlIGlzIGEgQyBsaWJyYXJ5IGF2YWlsYWJsZS4iCisrCisrV2UgYWxzbyBuZWVkIHRvIGRpc2FibGUgc29tZSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUKKytidWlsdCBhbG9uZyB3aXRoIEdDQywgYW5kIHNwZWNpZnkgdGhhdCBvbmx5IHRoZSBjb21waWxlciBmb3IgdGhlIEMKKytsYW5ndWFnZSBpcyBuZWVkZWQuCisrCisrU28sIHdlIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSwgY29uZmlndXJlLCBtYWtlLCBhbmQgaW5zdGFsbC4KKysKKysgICAgJCBta2RpciAtcCAkb2JqL2djYzEKKysgICAgJCBjZCAkb2JqL2djYzEKKysgICAgJCAkc3JjLyRnY2N2L2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tdGFyZ2V0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLXByZWZpeD0kdG9vbHMgXAorKyAgICA+ICAgICAtLXdpdGhvdXQtaGVhZGVycyAtLXdpdGgtbmV3bGliIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtdGhyZWFkcyAtLWRpc2FibGUtbGlic3NwIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgLS1kaXNhYmxlLWxpYmZmaSBcCisrICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCisrCisrCisrTGludXggS2VybmVsIEhlYWRlcnMKKysKKytUbyBjb25maWd1cmUgR0xJQkMsIHdlIGFsc28gbmVlZCBMaW51eCBrZXJuZWwgaGVhZGVycyBpbiBwbGFjZS4KKytGb3J0dW5hdGVseSwgdGhlIExpbnV4IG1ha2VmaWxlcyBoYXZlIGEgdGFyZ2V0IHRoYXQgaW5zdGFsbHMgdGhlbSBmb3IKKyt1cy4gIFNpbmNlIHRoZSBwcm9jZXNzIGRvZXMgbW9kaWZ5IHRoZSBzb3VyY2UgdHJlZSBhIGJpdCwgd2UgbWFrZSBhCisrY29weSBmaXJzdDoKKysKKysgICAgJCBjcCAtciAkc3JjLyRsaW51eHYgJG9iai9saW51eAorKyAgICAkIGNkICRvYmovbGludXgKKysKKytOb3cgd2UncmUgcmVhZHkgdG8gaW5zdGFsbCB0aGUgaGVhZGVycyBpbnRvIHRoZSBzeXNyb290OgorKworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBcCisrICAgID4gbWFrZSBoZWFkZXJzX2luc3RhbGwgXAorKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKKysgICAgPiAgICAgIElOU1RBTExfSERSX1BBVEg9JHN5c3Jvb3QvdXNyCisrCisrCisrR0xJQkMgSGVhZGVycyBhbmQgUHJlbGltaW5hcnkgT2JqZWN0cworKworK1VzaW5nIHRoZSBjcm9zcy1jb21waWxlciB3ZSd2ZSBqdXN0IGJ1aWx0LCB3ZSBjYW4gbm93IGNvbmZpZ3VyZSBHTElCQworK3dlbGwgZW5vdWdoIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgYW5kIGJ1aWxkIHRoZSBvYmplY3QgZmlsZXMgdGhhdCB0aGUKKytmdWxsIGNyb3NzLWNvbXBpbGVyIHdpbGwgbmVlZDoKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2dsaWJjLWhlYWRlcnMKKysgICAgJCBjZCAkb2JqL2dsaWJjLWhlYWRlcnMKKysgICAgJCBCVUlMRF9DQz1nY2MgXAorKyAgICA+IENDPSR0b29scy9iaW4vJHRhcmdldC1nY2MgXAorKyAgICA+IENYWD0kdG9vbHMvYmluLyR0YXJnZXQtZysrIFwKKysgICAgPiBBUj0kdG9vbHMvYmluLyR0YXJnZXQtYXIgXAorKyAgICA+IFJBTkxJQj0kdG9vbHMvYmluLyR0YXJnZXQtcmFubGliIFwKKysgICAgPiAkc3JjL2dsaWJjL2xpYmMvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS1wcmVmaXg9L3VzciBcCisrICAgID4gICAgIC0td2l0aC1oZWFkZXJzPSRzeXNyb290L3Vzci9pbmNsdWRlIFwKKysgICAgPiAgICAgLS1idWlsZD0kYnVpbGQgXAorKyAgICA+ICAgICAtLWhvc3Q9JHRhcmdldCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1wcm9maWxlIC0td2l0aG91dC1nZCAtLXdpdGhvdXQtY3ZzIFwKKysgICAgPiAgICAgLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cworKworK1RoZSBvcHRpb24gJy0tcHJlZml4PS91c3InIG1heSBsb29rIHN0cmFuZ2UsIGJ1dCB5b3Ugc2hvdWxkIG5ldmVyCisrY29uZmlndXJlIEdMSUJDIHdpdGggYSBwcmVmaXggb3RoZXIgdGhhbiAnL3Vzcic6IGluIHZhcmlvdXMgcGxhY2VzLAorK0dMSUJDJ3MgYnVpbGQgc3lzdGVtIGNoZWNrcyB3aGV0aGVyIHRoZSBwcmVmaXggaXMgJy91c3InLCBhbmQgZG9lcworK3NwZWNpYWwgaGFuZGxpbmcgb25seSBpZiB0aGF0IGlzIHRoZSBjYXNlLiAgVW5sZXNzIHlvdSB1c2UgdGhpcworK3ByZWZpeCwgeW91IHdpbGwgZ2V0IGEgc3lzcm9vdCB0aGF0IGRvZXMgbm90IHVzZSB0aGUgc3RhbmRhcmQgTGludXgKKytkaXJlY3RvcnkgbGF5b3V0cyBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgdGhlIHJvb3QKKytmaWxlc3lzdGVtIG9uIHlvdXIgdGFyZ2V0IHN5c3RlbSBjb21wYXRpYmx5IHdpdGggbm9ybWFsIEdMSUJDCisraW5zdGFsbGF0aW9ucy4KKysKKytUaGUgJy0td2l0aC1oZWFkZXJzJyBvcHRpb24gdGVsbHMgR0xJQkMgd2hlcmUgdGhlIExpbnV4IGhlYWRlcnMgaGF2ZQorK2JlZW4gaW5zdGFsbGVkLgorKworK1RoZSAnLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cycgb3B0aW9uIHRlbGxzIEdMSUJDIHRvIGxvb2sKKytmb3IgdGhlIGxpc3RlZCBnbGliYyBhZGQtb25zLiBNb3N0IG5vdGFibHkgdGhlIHBvcnRzIGFkZC1vbiAobG9jYXRlZAorK2p1c3QgYWJvdmUgdGhlIGxpYmMgc291cmNlcyBpbiB0aGUgR0xJQkMgc3ZuIHRyZWUpIGlzIHJlcXVpcmVkIHRvCisrc3VwcG9ydCBBUk0gdGFyZ2V0cy4KKysKKytXZSBjYW4gbm93IHVzZSB0aGUgJ2luc3RhbGwtaGVhZGVycycgbWFrZWZpbGUgdGFyZ2V0IHRvIGluc3RhbGwgdGhlCisraGVhZGVyczoKKysKKysgICAgJCBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsX3Jvb3Q9JHN5c3Jvb3QgXAorKyAgICA+ICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnM9eWVzCisrCisrVGhlICdpbnN0YWxsX3Jvb3QnIHZhcmlhYmxlIGluZGljYXRlcyB3aGVyZSB0aGUgZmlsZXMgc2hvdWxkIGFjdHVhbGx5CisrYmUgaW5zdGFsbGVkOyBpdHMgdmFsdWUgaXMgdHJlYXRlZCBhcyB0aGUgcGFyZW50IG9mIHRoZSAnLS1wcmVmaXgnCisrZGlyZWN0b3J5IHdlIHBhc3NlZCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCwgc28gdGhlIGhlYWRlcnMgd2lsbCBnbyBpbgorKyckc3lzcm9vdC91c3IvaW5jbHVkZScuICBUaGUgJ2luc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMnIHZhcmlhYmxlCisrcmVxdWVzdHMgc3BlY2lhbCBoYW5kbGluZyBmb3IgY2VydGFpbiB0cmlja3kgaGVhZGVyIGZpbGVzLgorKworK05leHQsIHRoZXJlIGFyZSBhIGZldyBvYmplY3QgZmlsZXMgbmVlZGVkIHRvIGxpbmsgc2hhcmVkIGxpYnJhcmllcywKKyt3aGljaCB3ZSBidWlsZCBhbmQgaW5zdGFsbCBieSBoYW5kOgorKworKyAgICAkIG1rZGlyIC1wICRzeXNyb290L3Vzci9saWIKKysgICAgJCBtYWtlIGNzdS9zdWJkaXJfbGliCisrICAgICQgY3AgY3N1L2NydDEubyBjc3UvY3J0aS5vIGNzdS9jcnRuLm8gJHN5c3Jvb3QvdXNyL2xpYgorKworK0ZpbmFsbHksICdsaWJnY2Nfcy5zbycgcmVxdWlyZXMgYSAnbGliYy5zbycgdG8gbGluayBhZ2FpbnN0LiAgSG93ZXZlciwKKytzaW5jZSB3ZSB3aWxsIG5ldmVyIGFjdHVhbGx5IGV4ZWN1dGUgaXRzIGNvZGUsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQKKytpdCBjb250YWlucy4gIFNvLCB0cmVhdGluZyAnL2Rldi9udWxsJyBhcyBhIEMgc291cmNlIGZpbGUsIHdlIHByb2R1Y2UKKythIGR1bW15ICdsaWJjLnNvJyBpbiBvbmUgc3RlcDoKKysKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZ2NjIC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIC1zaGFyZWQgLXggYyAvZGV2L251bGwgXAorKyAgICA+ICAgICAgICAgICAgICAgICAgICAgICAgLW8gJHN5c3Jvb3QvdXNyL2xpYi9saWJjLnNvCisrCisrCisrVGhlIFNlY29uZCBHQ0MKKysKKytXaXRoIHRoZSBHTElCQyBoZWFkZXJzIGFuZCBzZWxlY3RlZCBvYmplY3QgZmlsZXMgaW5zdGFsbGVkLCB3ZSBjYW4KKytub3cgYnVpbGQgYSBHQ0MgdGhhdCBpcyBjYXBhYmxlIG9mIGNvbXBpbGluZyBHTElCQy4gIFdlIGNvbmZpZ3VyZSwKKytidWlsZCwgYW5kIGluc3RhbGwgdGhlIHNlY29uZCBHQ0MsIGFnYWluIGJ1aWxkaW5nIG9ubHkgdGhlIEMgY29tcGlsZXIsCisrYW5kIGF2b2lkaW5nIGxpYnJhcmllcyB3ZSB3b24ndCB1c2U6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nY2MyCisrICAgICQgY2QgJG9iai9nY2MyCisrICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGlic3NwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYmZmaSAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAorKworKworK0dMSUJDLCBDb21wbGV0ZQorKworK1dpdGggdGhlIHNlY29uZCBjb21waWxlciBidWlsdCBhbmQgaW5zdGFsbGVkLCB3ZSdyZSBub3cgcmVhZHkgZm9yIHRoZQorK2Z1bGwgR0xJQkMgYnVpbGQ6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nbGliYworKyAgICAkIGNkICRvYmovZ2xpYmMKKysgICAgJCBCVUlMRF9DQz1nY2MgXAorKyAgICA+IENDPSR0b29scy9iaW4vJHRhcmdldC1nY2MgXAorKyAgICA+IENYWD0kdG9vbHMvYmluLyR0YXJnZXQtZysrIFwKKysgICAgPiBBUj0kdG9vbHMvYmluLyR0YXJnZXQtYXIgXAorKyAgICA+IFJBTkxJQj0kdG9vbHMvYmluLyR0YXJnZXQtcmFubGliIFwKKysgICAgPiAkc3JjL2dsaWJjL2xpYmMvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS1wcmVmaXg9L3VzciBcCisrICAgID4gICAgIC0td2l0aC1oZWFkZXJzPSRzeXNyb290L3Vzci9pbmNsdWRlIFwKKysgICAgPiAgICAgLS13aXRoLWtjb25maWc9JG9iai9saW51eC9zY3JpcHRzL2tjb25maWcgXAorKyAgICA+ICAgICAtLWJ1aWxkPSRidWlsZCBcCisrICAgID4gICAgIC0taG9zdD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLXByb2ZpbGUgLS13aXRob3V0LWdkIC0td2l0aG91dC1jdnMgXAorKyAgICA+ICAgICAtLWVuYWJsZS1hZGQtb25zPW5wdGwsbGliaWRuLC4uL3BvcnRzCisrCisrTm90ZSB0aGUgYWRkaXRpb25hbCAnLS13aXRoLWtjb25maWcnIG9wdGlvbi4gVGhpcyB0ZWxscyBHTElCQyB3aGVyZSB0bworK2ZpbmQgdGhlIGhvc3QgY29uZmlnIHRvb2xzIHVzZWQgYnkgdGhlIGtlcm5lbCAnbWFrZSBjb25maWcnIGFuZCAnbWFrZQorK21lbnVjb25maWcnLiAgVGhlc2UgdG9vbHMgY2FuIGJlIHJlLXVzZWQgYnkgR0xJQkMgZm9yIGl0cyBvd24gJ21ha2UKKysqY29uZmlnJyBzdXBwb3J0LCB3aGljaCB3aWxsIGNyZWF0ZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZvciB5b3UuCisrQnV0IGZpcnN0IG1ha2Ugc3VyZSB0aG9zZSB0b29scyBoYXZlIGJlZW4gYnVpbHQgYnkgcnVubmluZyBzb21lCisrZHVtbXkgJ21ha2UgKmNvbmZpZycgY2FsbHMgaW4gdGhlIGtlcm5lbCBkaXJlY3Rvcnk6CisrCisrICAgICQgY2QgJG9iai9saW51eAorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGNvbmZpZyBcCisrICAgID4gICAgICBBUkNIPSRsaW51eF9hcmNoIENST1NTX0NPTVBJTEU9JHRhcmdldC0gXAorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIG1lbnVjb25maWcgXAorKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKKysKKytOb3cgd2UgY2FuIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlIGZ1bGwgR0xJQkM6CisrCisrICAgICQgY2QgJG9iai9nbGliYworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGRlZmNvbmZpZworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIG1lbnVjb25maWcKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwgaW5zdGFsbF9yb290PSRzeXNyb290CisrCisrQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIGNvbXBsZXRlIEdMSUJDIGluc3RhbGxhdGlvbiBpbiAnJHN5c3Jvb3QnLAorK3dpdGggaGVhZGVyIGZpbGVzLCBsaWJyYXJ5IGZpbGVzLCBhbmQgbW9zdCBvZiB0aGUgQyBydW50aW1lIHN0YXJ0dXAKKytmaWxlcyBpbiBwbGFjZS4KKysKKysKKytUaGUgVGhpcmQgR0NDCisrCisrRmluYWxseSwgd2UgcmVjb21waWxlIEdDQyBhZ2FpbnN0IHRoaXMgZnVsbCBpbnN0YWxsYXRpb24sIGVuYWJsaW5nCisrd2hhdGV2ZXIgbGFuZ3VhZ2VzIGFuZCBsaWJyYXJpZXMgd2Ugd291bGQgbGlrZSB0byB1c2U6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nY2MzCisrICAgICQgY2QgJG9iai9nY2MzCisrICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgXAorKyAgICA+ICAgICAtLWVuYWJsZS1fX2N4YV9hdGV4aXQgXAorKyAgICA+ICAgICAtLWRpc2FibGUtbGlic3NwIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIFwKKysgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMsYysrCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsCisrCisrVGhlICctLWVuYWJsZS1fX2N4YV9hdGV4aXQnIG9wdGlvbiB0ZWxscyBHQ0Mgd2hhdCBzb3J0IG9mIEMrKworK2Rlc3RydWN0b3Igc3VwcG9ydCB0byBleHBlY3QgZnJvbSB0aGUgQyBsaWJyYXJ5OyBpdCdzIHJlcXVpcmVkIHdpdGgKKytHTElCQy4KKysKKytBbmQgc2luY2UgR0NDJ3MgaW5zdGFsbGF0aW9uIHByb2Nlc3MgaXNuJ3QgZGVzaWduZWQgdG8gaGVscCBjb25zdHJ1Y3QKKytzeXNyb290IHRyZWVzLCB3ZSBtdXN0IG1hbnVhbGx5IGNvcHkgY2VydGFpbiBsaWJyYXJpZXMgaW50byBwbGFjZSBpbgorK3RoZSBzeXNyb290LgorKworKyAgICAkIGNwIC1kICR0b29scy8kdGFyZ2V0L2xpYi9saWJnY2Nfcy5zbyogJHN5c3Jvb3QvbGliCisrICAgICQgY3AgLWQgJHRvb2xzLyR0YXJnZXQvbGliL2xpYnN0ZGMrKy5zbyogJHN5c3Jvb3QvdXNyL2xpYgorKworKworK1RyeWluZyBUaGluZ3MgT3V0CisrCisrQXQgdGhpcyBwb2ludCwgJyR0b29scycgY29udGFpbnMgYSBjcm9zcyB0b29sY2hhaW4gcmVhZHkgdG8gdXNlCisrdGhlIEdMSUJDIGluc3RhbGxhdGlvbiBpbiAnJHN5c3Jvb3QnOgorKworKyAgICAkIGNhdCA+IGhlbGxvLmMgPDxFT0YKKysgICAgPiAjaW5jbHVkZSA8c3RkaW8uaD4KKysgICAgPiBpbnQKKysgICAgPiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgID4geworKyAgICA+ICAgcHV0cyAoIkhlbGxvLCB3b3JsZCEiKTsKKysgICAgPiAgIHJldHVybiAwOworKyAgICA+IH0KKysgICAgPiBFT0YKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZ2NjIC1XYWxsIGhlbGxvLmMgLW8gaGVsbG8KKysgICAgJCBjYXQgPiBjKystaGVsbG8uY2MgPDxFT0YKKysgICAgPiAjaW5jbHVkZSA8aW9zdHJlYW0+CisrICAgID4gaW50CisrICAgID4gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICA+IHsKKysgICAgPiAgIHN0ZDo6Y291dCA8PCAiSGVsbG8sIEMrKyB3b3JsZCEiIDw8IHN0ZDo6ZW5kbDsKKysgICAgPiAgIHJldHVybiAwOworKyAgICA+IH0KKysgICAgPiBFT0YKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtZysrIC1XYWxsIGMrKy1oZWxsby5jYyAtbyBjKystaGVsbG8KKysKKysKKytXZSBjYW4gdXNlICdyZWFkZWxmJyB0byB2ZXJpZnkgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIGV4ZWN1dGFibGVzIGZvcgorK291ciB0YXJnZXQsIHVzaW5nIG91ciBkeW5hbWljIGxpbmtlcjoKKysKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtcmVhZGVsZiAtaGwgaGVsbG8KKysgICAgRUxGIEhlYWRlcjoKKysgICAgLi4uCisrICAgICAgVHlwZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWEVDIChFeGVjdXRhYmxlIGZpbGUpCisrICAgICAgTWFjaGluZTogICAgICAgICAgICAgICAgICAgICAgICAgICBBUk0KKysKKysgICAgLi4uCisrICAgIFByb2dyYW0gSGVhZGVyczoKKysgICAgICBUeXBlICAgICAgICAgICBPZmZzZXQgICBWaXJ0QWRkciAgIFBoeXNBZGRyICAgRmlsZVNpeiBNZW1TaXogIEZsZyBBbGlnbgorKyAgICAgIFBIRFIgICAgICAgICAgIDB4MDAwMDM0IDB4MTAwMDAwMzQgMHgxMDAwMDAzNCAweDAwMTAwIDB4MDAxMDAgUiBFIDB4NAorKyAgICAgIElOVEVSUCAgICAgICAgIDB4MDAwMTM0IDB4MDAwMDgxMzQgMHgwMDAwODEzNCAweDAwMDEzIDB4MDAwMTMgUiAgIDB4MQorKyAgICAgICAgICBbUmVxdWVzdGluZyBwcm9ncmFtIGludGVycHJldGVyOiAvbGliL2xkLWxpbnV4LnNvLjNdCisrICAgICAgTE9BRCAgICAgICAgICAgMHgwMDAwMDAgMHgwMDAwODAwMCAweDAwMDA4MDAwIDB4MDA0MmMgMHgwMDQyYyBSIEUgMHg4MDAwCisrICAgIC4uLgorKworK0xvb2tpbmcgYXQgdGhlIGR5bmFtaWMgc2VjdGlvbiBvZiB0aGUgaW5zdGFsbGVkICdsaWJnY2Nfcy5zbycsIHdlIHNlZQorK3RoYXQgdGhlICdORUVERUQnIGVudHJ5IGZvciB0aGUgQyBsaWJyYXJ5IGRvZXMgaW5jbHVkZSB0aGUgJy42JworK3N1ZmZpeCwgaW5kaWNhdGluZyB0aGF0IHdhcyBsaW5rZWQgYWdhaW5zdCBvdXIgZnVsbHkgYnVpbGQgR0xJQkMsIGFuZAorK25vdCBvdXIgZHVtbXkgJ2xpYmMuc28nOgorKworKyAgICAkICR0b29scy9iaW4vJHRhcmdldC1yZWFkZWxmIC1kICRzeXNyb290L2xpYi9saWJnY2Nfcy5zby4xCisrICAgIER5bmFtaWMgc2VjdGlvbiBhdCBvZmZzZXQgMHgxMDgzYyBjb250YWlucyAyNCBlbnRyaWVzOgorKyAgICAgIFRhZyAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lL1ZhbHVlCisrICAgICAweDAwMDAwMDAxIChORUVERUQpICAgICAgICAgICAgICAgICAgICAgU2hhcmVkIGxpYnJhcnk6IFtsaWJjLnNvLjZdCisrICAgICAweDAwMDAwMDBlIChTT05BTUUpICAgICAgICAgICAgICAgICAgICAgTGlicmFyeSBzb25hbWU6IFtsaWJnY2Nfcy5zby4xXQorKyAgICAuLi4KKysKKysKKytBbmQgb24gdGhlIHRhcmdldCBtYWNoaW5lLCB3ZSBjYW4gcnVuIG91ciBwcm9ncmFtczoKKysKKysgICAgJCAkc3lzcm9vdC9saWIvbGQuc28uMSAtLWxpYnJhcnktcGF0aCAkc3lzcm9vdC9saWI6JHN5c3Jvb3QvdXNyL2xpYiBcCisrICAgID4gLi9oZWxsbworKyAgICBIZWxsbywgd29ybGQhCisrICAgICQgJHN5c3Jvb3QvbGliL2xkLnNvLjEgLS1saWJyYXJ5LXBhdGggJHN5c3Jvb3QvbGliOiRzeXNyb290L3Vzci9saWIgXAorKyAgICA+IC4vYysrLWhlbGxvCisrICAgIEhlbGxvLCBDKysgd29ybGQhCitkaWZmIC0tZ2l0IGEvR0xJQkMuY3Jvc3MtdGVzdGluZyBiL0dMSUJDLmNyb3NzLXRlc3RpbmcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjdiNDY4CistLS0gL2Rldi9udWxsCisrKysgYi9HTElCQy5jcm9zcy10ZXN0aW5nCitAQCAtMCwwICsxLDIwNSBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICAgICAgICAgIENyb3NzLVRlc3RpbmcgV2l0aCBHTElCQworKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKysKKytJbnRyb2R1Y3Rpb24KKysKKytEZXZlbG9wZXJzIHdyaXRpbmcgc29mdHdhcmUgZm9yIGVtYmVkZGVkIHN5c3RlbXMgb2Z0ZW4gdXNlIGEgZGVza3RvcAorK29yIG90aGVyIHNpbWlsYXJseSBjYXBhYmxlIGNvbXB1dGVyIGZvciBkZXZlbG9wbWVudCwgYnV0IG5lZWQgdG8gcnVuCisrdGVzdHMgb24gdGhlIGVtYmVkZGVkIHN5c3RlbSwgb3IgcGVyaGFwcyBvbiBhIHNpbXVsYXRvci4gIFdoZW4KKytjb25maWd1cmVkIGZvciBjcm9zcy1jb21waWxhdGlvbiwgdGhlIHN0b2NrIEdOVSBDIGxpYnJhcnkgc2ltcGx5CisrZGlzYWJsZXMgcnVubmluZyB0ZXN0cyBhbHRvZ2V0aGVyOiB0aGUgY29tbWFuZCAnbWFrZSB0ZXN0cycgYnVpbGRzCisrdGVzdCBwcm9ncmFtcywgYnV0IGRvZXMgbm90IHJ1biB0aGVtLiAgR0xJQkMsIGhvd2V2ZXIsIHByb3ZpZGVzCisrZmFjaWxpdGllcyBmb3IgY29tcGlsaW5nIHRlc3RzIGFuZCBnZW5lcmF0aW5nIGRhdGEgZmlsZXMgb24gdGhlIGJ1aWxkCisrc3lzdGVtLCBidXQgcnVubmluZyB0aGUgdGVzdCBwcm9ncmFtcyB0aGVtc2VsdmVzIG9uIGEgcmVtb3RlIHN5c3RlbSBvcgorK3NpbXVsYXRvci4KKysKKysKKytUZXN0IGVudmlyb25tZW50IHJlcXVpcmVtZW50cworKworK1RoZSB0ZXN0IGVudmlyb25tZW50IG11c3QgbWVldCBjZXJ0YWluIGNvbmRpdGlvbnMgZm9yIEdMSUJDJ3MKKytjcm9zcy10ZXN0aW5nIGZhY2lsaXRpZXMgdG8gd29yazoKKysKKystIFNoYXJlZCBmaWxlc3lzdGVtcy4gIFRoZSAnYnVpbGQnIHN5c3RlbSwgb24gd2hpY2ggeW91IGNvbmZpZ3VyZSBhbmQKKysgIGNvbXBpbGUgR0xJQkMsIGFuZCB0aGUgJ2hvc3QnIHN5c3RlbSwgb24gd2hpY2ggeW91IGludGVuZCB0byBydW4KKysgIEdMSUJDLCBtdXN0IHNoYXJlIGEgZmlsZXN5c3RlbSBjb250YWluaW5nIHRoZSBHTElCQyBidWlsZCBhbmQKKysgIHNvdXJjZSB0cmVlcy4gIEZpbGVzIG11c3QgYXBwZWFyIGF0IHRoZSBzYW1lIHBhdGhzIG9uIGJvdGggc3lzdGVtcy4KKysKKystIFJlbW90ZS1zaGVsbCBsaWtlIGludm9jYXRpb24uICBUaGVyZSBtdXN0IGJlIGEgd2F5IHRvIHJ1biBhIHByb2dyYW0KKysgIG9uIHRoZSBob3N0IHN5c3RlbSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0sIHBhc3NpbmcgaXQgcHJvcGVybHkgcXVvdGVkCisrICBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kCisrICBpbmhlcml0aW5nIHRoZSBjYWxsZXIncyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0LgorKworKworK1VzYWdlCisrCisrVG8gdXNlIEdMSUJDJ3MgY3Jvc3MtdGVzdGluZyBzdXBwb3J0LCBwcm92aWRlIHZhbHVlcyBmb3IgdGhlCisrZm9sbG93aW5nIE1ha2UgdmFyaWFibGVzIHdoZW4geW91IGludm9rZSAnbWFrZSc6CisrCisrLSBjcm9zcy10ZXN0LXdyYXBwZXIKKysKKysgIFRoaXMgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIgY29tbWFuZCwgYWxvbmcKKysgIHdpdGggYW55IGFyZ3VtZW50cy4KKysKKystIGNyb3NzLWxvY2FsZWRlZgorKworKyAgVGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBjcm9zcy1jYXBhYmxlIGxvY2FsZWRlZiBwcm9ncmFtLCBsaWtlCisrICB0aGF0IGluY2x1ZGVkIGluIHRoZSBHTElCQyAnbG9jYWxlZGVmJyBtb2R1bGUsIGFsb25nIHdpdGggYW55CisrICBhcmd1bWVudHMgbmVlZGVkLgorKworK1RoZXNlIGFyZSBlYWNoIGV4cGxhaW5lZCBpbiBkZXRhaWwgYmVsb3cuCisrCisrCisrVGhlIENyb3NzLVRlc3RpbmcgV3JhcHBlcgorKworK1RvIHJ1biB0ZXN0IHByb2dyYW1zIHJlbGlhYmx5LCB0aGUgc3RvY2sgR05VIEMgbGlicmFyeSB0YWtlcyBjYXJlIHRvCisrZW5zdXJlIHRoYXQgdGVzdCBwcm9ncmFtcyB1c2UgdGhlIG5ld2x5IGNvbXBpbGVkIGR5bmFtaWMgbGlua2VyIGFuZAorK3NoYXJlZCBsaWJyYXJpZXMsIGFuZCBuZXZlciB0aGUgaG9zdCBzeXN0ZW0ncyBpbnN0YWxsZWQgbGlicmFyaWVzLiAgVG8KKythY2NvbXBsaXNoIHRoaXMsIGl0IHJ1bnMgdGhlIHRlc3RzIGJ5IGV4cGxpY2l0bHkgaW52b2tpbmcgdGhlIGR5bmFtaWMKKytsaW5rZXIgZnJvbSB0aGUgYnVpbGQgdHJlZSwgcGFzc2luZyBpdCBhIGxpc3Qgb2YgYnVpbGQgdHJlZQorK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3Igc2hhcmVkIGxpYnJhcmllcywgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YKKyt0aGUgZXhlY3V0YWJsZSB0byBydW4gYW5kIGl0cyBhcmd1bWVudHMuCisrCisrRm9yIGV4YW1wbGUsIHdoZXJlIG9uZSBtaWdodCBub3JtYWxseSBydW4gYSB0ZXN0IHByb2dyYW0gbGlrZSB0aGlzOgorKworKyAgICAkIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKyt0aGUgR05VIEMgbGlicmFyeSBtaWdodCBydW4gdGhhdCBwcm9ncmFtIGxpa2UgdGhpczoKKysKKysgICAgJCAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysod2hlcmUgJG9iamRpciBpcyB0aGUgcGF0aCB0byB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLCBhbmQgdGhlCisrdHJhaWxpbmcgYmFja3NsYXNoIGluZGljYXRlcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgY29tbWFuZCkuICBJbiBvdGhlcgorK3dvcmRzLCBlYWNoIHRlc3QgcHJvZ3JhbSBpbnZvY2F0aW9uIGlzICd3cmFwcGVkIHVwJyBpbnNpZGUgYW4gZXhwbGljaXQKKytpbnZvY2F0aW9uIG9mIHRoZSBkeW5hbWljIGxpbmtlciwgd2hpY2ggbXVzdCBpdHNlbGYgZXhlY3V0ZSB0aGUgdGVzdAorK3Byb2dyYW0sIGhhdmluZyBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcyBmcm9tIHRoZSBhcHByb3ByaWF0ZQorK2RpcmVjdG9yaWVzLgorKworK1RvIHN1cHBvcnQgY3Jvc3MtdGVzdGluZywgR0xJQkMgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gb3B0aW9uYWxseQorK3NldCB0aGUgJ2Nyb3NzLXRlc3Qtd3JhcHBlcicgTWFrZSB2YXJpYWJsZSB0byBhbm90aGVyIHdyYXBwZXIgY29tbWFuZCwKKyt0byB3aGljaCBpdCBwYXNzZXMgdGhlIGVudGlyZSBkeW5hbWljIGxpbmtlciBpbnZvY2F0aW9uIHNob3duIGFib3ZlIGFzCisrYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBkZXZlbG9wZXIgc3VwcGxpZXMgYSB3cmFwcGVyIG9mCisrJ215LXdyYXBwZXIgaG9zdG5hbWUnLCB0aGVuIEdMSUJDIHdvdWxkIHJ1biB0aGUgdGVzdCBhYm92ZSBhcworK2ZvbGxvd3M6CisrCisrICAgICQgbXktd3JhcHBlciBob3N0bmFtZSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrVGhlICdteS13cmFwcGVyJyBjb21tYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgdGhlIGNvbW1hbmQKKytnaXZlbiBvbiB0aGUgaG9zdCBzeXN0ZW0uCisrCisrU2luY2UgdGVzdHMgYXJlIHJ1biBpbiB2YXJ5aW5nIGRpcmVjdG9yaWVzLCB0aGUgd3JhcHBlciBzaG91bGQgZWl0aGVyCisrYmUgaW4geW91ciBjb21tYW5kIHNlYXJjaCBwYXRoLCBvciAnY3Jvc3MtdGVzdC13cmFwcGVyJyBzaG91bGQgZ2l2ZSBhbgorK2Fic29sdXRlIHBhdGggZm9yIHRoZSB3cmFwcGVyLgorKworK1RoZSB3cmFwcGVyIG11c3QgbWVldCBzZXZlcmFsIHJlcXVpcmVtZW50czoKKysKKystIEl0IG11c3QgcHJlc2VydmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgQXMgZXhwbGFpbmVkIGFib3ZlLCB0aGUKKysgIGJ1aWxkIGRpcmVjdG9yeSB0cmVlIG11c3QgYmUgdmlzaWJsZSBvbiBib3RoIHRoZSBidWlsZCBhbmQgaG9zdAorKyAgc3lzdGVtcywgYXQgdGhlIHNhbWUgcGF0aC4gIFRoZSB0ZXN0IHdyYXBwZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUKKysgIGN1cnJlbnQgZGlyZWN0b3J5IGl0IGluaGVyaXRzIGlzIGFsc28gaW5oZXJpdGVkIGJ5IHRoZSBkeW5hbWljCisrICBsaW5rZXIgKGFuZCB0aHVzIHRoZSB0ZXN0IHByb2dyYW0gaXRzZWxmKS4KKysKKystIEl0IG11c3QgcHJlc2VydmUgZW52aXJvbm1lbnQgdmFyaWFibGVzJyB2YWx1ZXMuICBNYW55IEdMSUJDIHRlc3RzCisrICBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0ZXN0IHJ1bnM7IGluIG5hdGl2ZSB0ZXN0aW5nLCBpdAorKyAgaW52b2tlcyBwcm9ncmFtcyBsaWtlIHRoaXM6CisrCisrICAgICQgR0NPTlZfUEFUSD0kb2JqZGlyL2ljb252ZGF0YSBcCisrICAgICAgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrICBXaXRoIHRoZSBjcm9zcy10ZXN0aW5nIHdyYXBwZXIsIHRoYXQgaW52b2NhdGlvbiBiZWNvbWVzOgorKworKyAgICAkIEdDT05WX1BBVEg9JG9iamRpci9pY29udmRhdGEgXAorKyAgICAgIG15LXdyYXBwZXIgaG9zdG5hbWUgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyAgSGVyZSwgJ215LXdyYXBwZXInIG11c3QgZW5zdXJlIHRoYXQgdGhlIHZhbHVlIGl0IHNlZXMgZm9yCisrICAnR0NPTlZfUEFUSCcgd2lsbCBiZSBzZWVuIGJ5IHRoZSBkeW5hbWljIGxpbmtlciwgYW5kIHRodXMgJ3RzdC1mb28nCisrICBpdHNlbGYuICAoVGhlIHdyYXBwZXIgc3VwcGxpZWQgd2l0aCBHTElCQyBzaW1wbHkgcHJlc2VydmVzIHRoZQorKyAgdmFsdWVzIG9mICphbGwqIGVudmlyb21lbnQgdmFyaWFibGVzLCB3aXRoIGEgZml4ZWQgc2V0IG9mCisrICBleGNlcHRpb25zLikKKysKKysgIElmIHlvdXIgd3JhcHBlciBpcyBhIHNoZWxsIHNjcmlwdCwgdGFrZSBjYXJlIHRvIGNvcnJlY3RseSBwcm9wYWdhdGUKKysgIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgY29udGFpbiBzcGFjZXMgYW5kIHNoZWxsCisrICBtZXRhY2hhcmFjdGVycy4KKysKKystIEl0IG11c3QgcGFzcyB0aGUgY29tbWFuZCdzIGFyZ3VtZW50cywgdW5tb2RpZmllZC4gIFRoZSBhcmd1bWVudHMKKysgIHNlZW4gYnkgdGhlIHRlc3QgcHJvZ3JhbSBzaG91bGQgYmUgZXhhY3RseSB0aG9zZSBzZWVuIGJ5IHRoZSB3cmFwcGVyCisrICAoYWZ0ZXIgd2hhdGV2ZXIgYXJndW1lbnRzIGFyZSBnaXZlbiB0byB0aGUgd3JhcHBlciBpdHNlbGYpLiAgVGhlCisrICBHTElCQyB0ZXN0IGZyYW1ld29yayBwZXJmb3JtcyBhbGwgbmVlZGVkIHNoZWxsIHdvcmQgc3BsaXR0aW5nIGFuZAorKyAgZXhwYW5zaW9uICh3aWxkY2FyZCBleHBhbnNpb24sIHBhcmFtZXRlciBzdWJzdGl0dXRpb24sIGFuZCBzbyBvbikKKysgIGJlZm9yZSBpbnZva2luZyB0aGUgd3JhcHBlcjsgZnVydGhlciBleHBhbnNpb24gbWF5IGJyZWFrIHRoZSB0ZXN0cy4KKysKKysKKytUaGUgJ2Nyb3NzLXRlc3Qtc3NoLnNoJyBzY3JpcHQKKysKKytJZiB5b3Ugd2FudCB0byB1c2UgJ3NzaCcgKG9yIHNvbWV0aGluZyBzdWZmaWNpZW50bHkgc2ltaWxhcikgdG8gcnVuCisrdGVzdCBwcm9ncmFtcyBvbiB5b3VyIGhvc3Qgc3lzdGVtLCBHTElCQyBpbmNsdWRlcyBhIHNoZWxsIHNjcmlwdCwKKysnc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCcsIHdoaWNoIHlvdSBjYW4gdXNlIGFzIHlvdXIgd3JhcHBlcgorK2NvbW1hbmQuICBUaGlzIHNjcmlwdCB0YWtlcyBjYXJlIG9mIHNldHRpbmcgdGhlIHRlc3QgY29tbWFuZCdzIGN1cnJlbnQKKytkaXJlY3RvcnksIHByb3BhZ2F0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlcywgYW5kIGNhcnJ5aW5nCisrY29tbWFuZC1saW5lIGFyZ3VtZW50cywgYWxsIGFjcm9zcyBhbiAnc3NoJyBjb25uZWN0aW9uLiAgWW91IG1heSBldmVuCisrc3VwcGx5IGFuIGFsdGVybmF0aXZlIHRvICdzc2gnIG9uIHRoZSBjb21tYW5kIGxpbmUsIGlmIG5lZWRlZC4KKysKKytGb3IgbW9yZSBkZXRhaWxzLCBwYXNzICdjcm9zcy10ZXN0LXNzaC5zaCcgdGhlICctLWhlbHAnIG9wdGlvbi4KKysKKysKKytUaGUgQ3Jvc3MtQ29tcGlsaW5nIExvY2FsZSBEZWZpbml0aW9uIENvbW1hbmQKKysKKytTb21lIEdMSUJDIHRlc3RzIHJlbHkgb24gbG9jYWxlcyBnZW5lcmF0ZWQgZXNwZWNpYWxseSBmb3IgdGhlIHRlc3QKKytwcm9jZXNzLiAgSW4gYSBuYXRpdmUgY29uZmlndXJhdGlvbiwgdGhlc2UgdGVzdHMgc2ltcGx5IHJ1biB0aGUKKysnbG9jYWxlZGVmJyBjb21tYW5kIGJ1aWx0IGJ5IHRoZSBub3JtYWwgR0xJQkMgYnVpbGQgcHJvY2VzcywKKysnbG9jYWxlL2xvY2FsZWRlZicsIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgdGhlaXIgbG9jYWxlcy4gIEhvd2V2ZXIsIGluCisrYSBjcm9zcy1jb21waWxpbmcgY29uZmlndXJhdGlvbiwgdGhpcyAnbG9jYWxlZGVmJyBpcyBidWlsdCBmb3IgdGhlCisraG9zdCBzeXN0ZW0sIG5vdCB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgc2luY2UgaXQgcmVxdWlyZXMgcXVpdGUgYSBiaXQKKytvZiBtZW1vcnkgdG8gcnVuICh3ZSBoYXZlIHNlZW4gaXQgZmFpbCBvbiBzeXN0ZW1zIHdpdGggNjRNaUIgb2YKKyttZW1vcnkpLCBpdCBtYXkgbm90IGJlIHByYWN0aWNhbCB0byBydW4gaXQgb24gdGhlIGhvc3Qgc3lzdGVtLgorKworK0lmIHNldCwgR0xJQkMgdXNlcyB0aGUgJ2Nyb3NzLWxvY2FsZWRlZicgTWFrZSB2YXJpYWJsZSBhcyB0aGUgY29tbWFuZAorK3RvIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtIHRvIHByb2Nlc3MgYW5kIGluc3RhbGwgbG9jYWxlcy4gIFRoZQorK2xvY2FsZWRlZiBwcm9ncmFtIGJ1aWx0IGZyb20gdGhlIEdMSUJDICdsb2NhbGVkZWYnIG1vZHVsZSBpcworK3N1aXRhYmxlLgorKworK1RoZSB2YWx1ZSBvZiAnY3Jvc3MtbG9jYWxlZGVmJyBtYXkgYWxzbyBpbmNsdWRlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKKyt0byBiZSBwYXNzZWQgdG8gdGhlIHByb2dyYW07IGlmIHlvdSBhcmUgdXNpbmcgR0xJQkMncyAnbG9jYWxlZGVmJywKKyt5b3UgbWF5IGluY2x1ZGUgZW5kaWFubmVzcyBhbmQgJ3VpbnQzMl90JyBhbGlnbm1lbnQgYXJndW1lbnRzIGhlcmUuCisrCisrCisrRXhhbXBsZQorKworK0luIGRldmVsb3BpbmcgR0xJQkMncyBjcm9zcy10ZXN0aW5nIGZhY2lsaXR5LCB3ZSBpbnZva2VkICdtYWtlJyB3aXRoCisrdGhlIGZvbGxvd2luZyBzY3JpcHQ6CisrCisrICAgICMhL2Jpbi9zaAorKworKyAgICBzcmNkaXI9Li4uCisrICAgIHRlc3RfaG9zdG5hbWU9Li4uCisrICAgIGxvY2FsZWRlZmRpcj0uLi4KKysgICAgY3Jvc3NfZ3h4PS4uLi1nKysKKysKKysgICAgd3JhcHBlcj0iJHNyY2Rpci9zY3JpcHRzL2Nyb3NzLXRlc3Qtc3NoLnNoICR0ZXN0X2hvc3RuYW1lIgorKyAgICBsb2NhbGVkZWY9IiRsb2NhbGVkZWZkaXIvbG9jYWxlZGVmIC0tbGl0dGxlLWVuZGlhbiAtLXVpbnQzMi1hbGlnbj00IgorKworKyAgICBtYWtlIGNyb3NzLXRlc3Qtd3JhcHBlcj0iJHdyYXBwZXIiIFwKKysgICAgICAgICBjcm9zcy1sb2NhbGVkZWY9IiRsb2NhbGVkZWYiIFwKKysgICAgICAgICBDWFg9IiRjcm9zc19neHgiIFwKKysgICAgICAgICAiJEAiCisrCisrCisrT3RoZXIgQ3Jvc3MtVGVzdGluZyBDb25jZXJucworKworK0hlcmUgYXJlIG5vdGVzIG9uIHNvbWUgb3RoZXIgaXNzdWVzIHdoaWNoIHlvdSBtYXkgZW5jb3VudGVyIGluIHJ1bm5pbmcKKyt0aGUgR0xJQkMgdGVzdHMgaW4gYSBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnQ6CisrCisrLSBTb21lIHRlc3RzIHJlcXVpcmUgYSBDKysgY3Jvc3MtY29tcGlsZXI7IHlvdSBzaG91bGQgc2V0IHRoZSAnQ1hYJworKyAgTWFrZSB2YXJpYWJsZSB0byB0aGUgbmFtZSBvZiBhbiBhcHByb3ByaWF0ZSBjcm9zcy1jb21waWxlci4KKysKKystIFNvbWUgdGVzdHMgcmVxdWlyZSBhY2Nlc3MgdG8gbGlic3RkYysrLnNvLjYgYW5kIGxpYmdjY19zLnNvLjE7IHdlCisrICBzaW1wbHkgcGxhY2UgY29waWVzIG9mIHRoZXNlIGxpYnJhcmllcyBpbiB0aGUgdG9wIEdMSUJDIGJ1aWxkCisrICBkaXJlY3RvcnkuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2I4MGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOS1lZ2xpYmMtQnJpbmctRWdsaWJjLW9wdGlvbi1ncm91cC1pbmZyYXN0cnVjdHVyZS10by1nLnBhdGNoCkBAIC0wLDAgKzEsMTQzNiBAQAorRnJvbSBhYTdjNWZlODZkMDQ1ODRhOWFlZDRkYzQwYmE4NTZjNjVhMWVmOWM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDU6MTggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8yN10gZWdsaWJjOiBCcmluZyBFZ2xpYmMgb3B0aW9uIGdyb3VwIGluZnJhc3RydWN0dXJlIHRvCisgZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBFR0xJQkMub3B0aW9uLWdyb3VwcyAgICAgICAgICAgICAgfCAxMjIgKysrKysrCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjb25maWcubWFrZS5pbiAgICAgICAgICAgICAgICAgICAgfCAgIDIgKworIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMyArCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgIDEwICsKKyBvcHRpb24tZ3JvdXBzLmRlZiAgICAgICAgICAgICAgICAgfCA4NjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBvcHRpb24tZ3JvdXBzLmRlZmF1bHRzICAgICAgICAgICAgfCAgNDcgKysrCisgb3B0aW9uLWdyb3Vwcy5tYWsgICAgICAgICAgICAgICAgIHwgIDQxICsrCisgb3B0aW9ucy1jb25maWcvTWFrZWZpbGUgICAgICAgICAgIHwgIDU1ICsrKworIG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wb3N0cHJvYy5wbCB8ICA1OCArKysKKyBvcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbCAgfCAgIDggKworIHNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sgICAgICAgICB8ICA2MyArKysKKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgRUdMSUJDLm9wdGlvbi1ncm91cHMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9uLWdyb3Vwcy5kZWYKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb24tZ3JvdXBzLm1haworIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3aworCitkaWZmIC0tZ2l0IGEvRUdMSUJDLm9wdGlvbi1ncm91cHMgYi9FR0xJQkMub3B0aW9uLWdyb3VwcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjZhNTBiOGQKKy0tLSAvZGV2L251bGwKKysrKyBiL0VHTElCQy5vcHRpb24tZ3JvdXBzCitAQCAtMCwwICsxLDEyMiBAQAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG1vZGU6IHRleHQgLSotCisrCisrICAgICAgICAgICAgICBUaGUgRUdMSUJDIENvbXBvbmVudCBDb25maWd1cmF0aW9uIFN5c3RlbQorKyAgICAgICAgICAgICAgICAgIEppbSBCbGFuZHkgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKysKKytJbnRyb2R1Y3Rpb24KKysKKytUaGUgR05VIEMgbGlicmFyeSAoR0xJQkMpIHByb3ZpZGVzIGEgYnJvYWQgcmFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSwKKytyYW5naW5nIGZyb20gaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCB0byB0cmFuc2NlbmRlbnRhbAorK21hdGhlbWF0aWNhbCBmdW5jdGlvbnMuICBJdHMgd2Vic2l0ZSBib2FzdHMgdGhhdCAibmVhcmx5IGFsbCBrbm93biBhbmQKKyt1c2VmdWwgZnVuY3Rpb25zIGZyb20gYW55IG90aGVyIEMgbGlicmFyeSBhcmUgYXZhaWxhYmxlLiIgIFRoaXMKKytleGhhdXN0aXZlIGFwcHJvYWNoIGhhcyBiZWVuIG9uZSBvZiBHTElCQydzIHN0cmVuZ3RocyBvbiBkZXNrdG9wIGFuZAorK3NlcnZlciBzeXN0ZW1zLCBidXQgaXQgaGFzIGFsc28gZ2l2ZW4gR0xJQkMgYSBsYXJnZSBmb290cHJpbnQsIGJvdGggaW4KKyttZW1vcnkgYW5kIG9uIGRpc2ssIG1ha2luZyBpdCBhIGNoYWxsZW5nZSB0byB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcworK3dpdGggbGltaXRlZCByZXNvdXJjZXMuCisrCisrVGhlIEVtYmVkZGVkIEdOVSBDIGxpYnJhcnkgKEVHTElCQykgaXMgYSB2YXJpYW50IG9mIHRoZSBHTlUgQyBsaWJyYXJ5CisrZGVzaWduZWQgdG8gd29yayB3ZWxsIG9uIGVtYmVkZGVkIHN5c3RlbXMuICBJbiBwYXJ0aWN1bGFyLCBFR0xJQkMncworK2NvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSBhbGxvd3MgZW1iZWRkZWQgZGV2ZWxvcGVycyB0byBidWlsZAorK2N1c3RvbWl6ZWQgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkgdGhhdCBpbmNsdWRlIG9ubHkgdGhlIGZlYXR1cmVzCisrdGhlaXIgYXBwbGljYXRpb24gdXNlcywgcmVkdWNpbmcgaXRzIHNwYWNlIHJlcXVpcmVtZW50cy4KKysKKytFR0xJQkMncyBjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gY2F0ZWdvcml6ZXMgdGhlIGxpYnJhcnkncworK2Z1bmN0aW9ucyBpbnRvICJvcHRpb24gZ3JvdXBzIiwgYW5kIGFsbG93cyB5b3UgdG8gaW5jbHVkZSBvciBleGNsdWRlCisrb3B0aW9uIGdyb3VwcyBpbmRpdmlkdWFsbHkuICBTb21lIG9wdGlvbiBncm91cHMgZGVwZW5kIG9uIG90aGVyczsKKytFR0xJQkMgdHJhY2tzIHRoZXNlIHJlbGF0aW9uc2hpcHMsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIHNlbGVjdGVkCisrY29uZmlndXJhdGlvbiB5aWVsZHMgYSBmdW5jdGlvbmluZyBsaWJyYXJ5LgorKworKworK0NvbnNpc3RlbnQgYW5kIFByZWRpY3RhYmxlIEJlaGF2aW9yCisrCisrQSBmbGV4aWJsZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBhIG1peGVkIGJsZXNzaW5nOiBpZiB0aGUgb3B0aW9ucworK29mZmVyZWQgYXJlIHBvb3JseSBkZXNpZ25lZCwgaXQgY2FuIGJlIGhhcmQgdG8gc2VlIHdoaWNoIGNob2ljZXMgd2lsbAorK2hhdmUgdGhlIGRlc2lyZWQgZWZmZWN0cywgYW5kIGNob2ljZXMgd2l0aCBvYnNjdXJlIGNvbnNlcXVlbmNlcyBjYW4KKyttYWtlIGRlYnVnZ2luZyBkaWZmaWN1bHQuICBFR0xJQkMncyBjb25maWd1cmF0aW9uIGZvbGxvd3Mgc29tZSBnZW5lcmFsCisrcHJpbmNpcGxlcyB0byByZWR1Y2UgdGhlc2Ugcmlza3M6CisrCisrLSBFR0xJQkMgaGFzIGEgc2luZ2xlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCB0YXJnZXQKKysgIGFyY2hpdGVjdHVyZS4KKysKKystIEluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGFsbCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkLCBhbmQKKysgIEVHTElCQyBpcyB1cHdhcmRseSBBUEktIGFuZCBBQkktY29tcGF0aWJsZSB3aXRoIEdMSUJDLgorKworKy0gQXMgbXVjaCBhcyBwb3NzaWJsZSwgY29uZmlndXJhdGlvbnMgb25seSBhZmZlY3Qgd2hhdCBmdW5jdGlvbnMgYXJlCisrICBwcmVzZW50LCBub3QgaG93IHRoZXkgYmVoYXZlLiAgSWYgdGhlIHN5c3RlbSB3b3JrcyB3aXRoIGFuIG9wdGlvbgorKyAgZ3JvdXAgZGlzYWJsZWQsIGl0IHdpbGwgc3RpbGwgd29yayB3aXRoIGl0IGVuYWJsZWQuCisrCisrLSBBcyBtdWNoIGFzIHBvc3NpYmxlLCBjb25maWd1cmF0aW9ucyBvbmx5IHNlbGVjdCBvcHRpb24gZ3JvdXBzIC0tLQorKyAgdGhleSBkbyBub3QgZGVzY3JpYmUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorKworK1RoZXNlIHJ1bGVzIG1lYW4gdGhhdCB5b3UgaGF2ZSBhIHNpbXBsZSBkZWJ1Z2dpbmcgc3RyYXRlZ3kgYXZhaWxhYmxlCisraWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIEVHTElCQyBjb25maWd1cmF0aW9uIG1pZ2h0IGJlIHRoZSBzb3VyY2Ugb2YgYQorK3Byb2JsZW06IGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCByZS10ZXN0LCBhbmQgdGhlbgorK2Rpc2FibGUgb3B0aW9uIGdyb3VwcyBvbmUgYnkgb25lLCB1bnRpbCB0aGUgcHJvYmxlbSByZWFwcGVhcnMuCisrCisrCisrVGhlIE9wdGlvbiBHcm91cHMKKysKKytUbyBzZWUgdGhlIGN1cnJlbnQgZnVsbCBsaXN0IG9mIGltcGxlbWVudGVkIG9wdGlvbiBncm91cHMsIHJlZmVyIHRvIHRoZQorK2ZpbGUgJ29wdGlvbi1ncm91cHMuZGVmJyBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgb3IgcnVuCisrJ21ha2UgbWVudWNvbmZpZycgZnJvbSB0aGUgdG9wLWxldmVsIGJ1aWxkIGRpcmVjdG9yeS4KKysKKytUaGUgUE9TSVguMS0yMDAxIHNwZWNpZmljYXRpb24gaW5jbHVkZXMgYSBzdWdnZXN0ZWQgcGFydGl0aW9uIG9mIGFsbAorK3RoZSBmdW5jdGlvbnMgaW4gdGhlIFBPU0lYIEMgQVBJIGludG8gb3B0aW9uIGdyb3VwczogbWF0aCBmdW5jdGlvbnMKKytsaWtlICdzaW4nIGFuZCAnY29zJzsgbmV0d29ya2luZyBmdW5jdGlvbnMgbGlrZSAnc29ja2V0JyBhbmQKKysnY29ubmVjdCc7IGFuZCBzbyBvbi4gIEVHTElCQyBjb3VsZCB1c2UgdGhpcyBwYXJ0aXRpb25pbmcgYXMgdGhlIGJhc2lzCisrZm9yIGZ1dHVyZSBvcHRpb24gZ3JvdXBzLgorKworKworK0ltcGxlbWVudGF0aW9uCisrCisrVGhlIEVHTElCQyBjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gcmVzZW1ibGVzIHRoZSBhcHByb2FjaCB1c2VkCisrYnkgdGhlIExpbnV4IGtlcm5lbCB0byBzZWxlY3QgZGV2aWNlIGRyaXZlcnMsIG5ldHdvcmsgcHJvdG9jb2xzLCBhbmQKKytvdGhlciBmZWF0dXJlcy4gIEEgZmlsZSBuYW1lZCAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGluIHRoZSB0b3AtbGV2ZWwKKytidWlsZCBkaXJlY3RvcnkgY29udGFpbnMgYXNzaWdubWVudHMgdG8gTWFrZSB2YXJpYWJsZXMsIGVhY2ggb2Ygd2hpY2gKKytlbmFibGVzIG9yIGRpc2FibGVzIGEgcGFydGljdWxhciBvcHRpb24gZ3JvdXAuICBJZiB0aGUgdmFyaWFibGUncworK3ZhbHVlIGlzIHNldCB0byAneScsIHRoZW4gdGhlIG9wdGlvbiBncm91cCBpcyBlbmFibGVkOyBpZiBpdCBzZXQgdG8KKythbnl0aGluZyBlbHNlLCB0aGUgb3B0aW9uIGdyb3VwIGlzIG9taXR0ZWQuICBUaGUgZmlsZQorKydvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJywgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsIGVzdGFibGlzaGVzCisrZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB2YXJpYWJsZXM7IGFsbCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkIGJ5CisrZGVmYXVsdC4KKysKKytGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIHdvdWxkIG9taXQgbG9jYWxlCisrZGF0YSwgYnV0IGluY2x1ZGUgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucywgYW5kIGV2ZXJ5dGhpbmcgZWxzZToKKysKKysgICBPUFRJT05fRUdMSUJDX0xPQ0FMRVMgPSBuCisrICAgT1BUSU9OX0VHTElCQ19MSUJNID0geQorKworK0xpa2UgdGhlIExpbnV4IGtlcm5lbCwgRUdMSUJDIHN1cHBvcnRzIGEgc2ltaWxhciBzZXQgb2YgJypjb25maWcnIG1ha2UKKyt0YXJnZXRzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNyZWF0ZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnLCB3aXRoIGFsbAorK2RlcGVuZGVuY2llcyBiZXR3ZWVuIG9wdGlvbiBncm91cHMgYXV0b21hdGljYWxseSBzYXRpc2ZpZWQuICBSdW4KKysnbWFrZSBoZWxwJyB0byBzZWUgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG1ha2UgY29uZmlnIHRhcmdldHMuICBGb3IKKytleGFtcGxlLCAnbWFrZSBtZW51Y29uZmlnJyB3aWxsIHVwZGF0ZSB0aGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEKKyttZW51IGJhc2VkIHByb2dyYW0uCisrCisrVGhlIG9wdGlvbiBncm91cCBuYW1lcyBhbmQgdGhlaXIgdHlwZSAoYm9vbGVhbiwgaW50LCBoZXgsIHN0cmluZyksIGhlbHAKKytkZXNjcmlwdGlvbiwgYW5kIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIG9wdGlvbiBncm91cHMsIGFyZSBkZXNjcmliZWQgYnkKKysnb3B0aW9uLWdyb3Vwcy5kZWYnIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBhbmFsb2dvdXMgdG8gdGhlCisrJ0tjb25maWcnIGZpbGVzIGluIHRoZSBMaW51eCBrZXJuZWwuCisrCisrSW4gZ2VuZXJhbCwgZWFjaCBvcHRpb24gZ3JvdXAgdmFyaWFibGUgY29udHJvbHMgd2hldGhlciBhIGdpdmVuIHNldCBvZgorK29iamVjdCBmaWxlcyBpbiBFR0xJQkMgaXMgY29tcGlsZWQgYW5kIGluY2x1ZGVkIGluIHRoZSBmaW5hbAorK2xpYnJhcmllcywgb3Igb21pdHRlZCBmcm9tIHRoZSBidWlsZC4KKysKKytFYWNoIHN1YmRpcmVjdG9yeSdzIE1ha2VmaWxlIGNhdGVnb3JpemVzIGl0cyByb3V0aW5lcywgbGlicmFyaWVzLCBhbmQKKytleGVjdXRhYmxlcyBieSBvcHRpb24gZ3JvdXAuICBGb3IgZXhhbXBsZSwgRUdMSUJDJ3MgJ21hdGgvTWFrZWZpbGUnCisrcGxhY2VzIHRoZSAnbGlibScgbGlicmFyeSBpbiB0aGUgT1BUSU9OX0VHTElCQ19MSUJNIGdyb3VwIGFzIGZvbGxvd3M6CisrCisrICAgZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfTElCTSkgOj0gbGlibQorKworK0ZpbmFsbHksIGNvbW1vbiBjb2RlIGluICdNYWtlcnVsZXMnIGNpdGVzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKKysnZXh0cmEtbGlicy15Jywgc2VsZWN0aW5nIG9ubHkgdGhvc2UgbGlicmFyaWVzIHRoYXQgYmVsb25nIHRvIGVuYWJsZWQKKytvcHRpb24gZ3JvdXBzIHRvIGJlIGJ1aWx0LgorKworKworK0N1cnJlbnQgU3RhdHVzIGFuZCBGdXR1cmUgRGlyZWN0aW9ucworKworK1RoZSBFR0xJQkMgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIGRlc2NyaWJlZCBoZXJlIGlzIHN0aWxsCisrdW5kZXIgZGV2ZWxvcG1lbnQuCisrCisrV2UgaGF2ZSB1c2VkIHRoZSBzeXN0ZW0gdG8gc3Vic2V0IHNvbWUgcG9ydGlvbnMgb2YgRUdMSUJDJ3MKKytJbmRleDogbGliYy9jb25maWd1cmUuYWMKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCA2NThjY2ZhLi5mOTA2MzkxIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMjQsNiArMjQsNyBAQCBlbmRpZgorIAorIGluY2x1ZGUgTWFrZWNvbmZpZworIAorK2luY2x1ZGUgb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKKyAKKyAjIFRoaXMgaXMgdGhlIGRlZmF1bHQgdGFyZ2V0OyBpdCBtYWtlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgdGVzdHMuCisgLlBIT05ZOiBhbGwKK2RpZmYgLS1naXQgYS9jb25maWcubWFrZS5pbiBiL2NvbmZpZy5tYWtlLmluCitpbmRleCBhOWY1Njk2Li4yOTRmOGQxIDEwMDY0NAorLS0tIGEvY29uZmlnLm1ha2UuaW4KKysrKyBiL2NvbmZpZy5tYWtlLmluCitAQCAtNDcsNiArNDcsOCBAQCBjKystc3lzaW5jbHVkZXMgPSBAQ1hYX1NZU0lOQ0xVREVTQAorIGFsbC13YXJuaW5ncyA9IEBhbGxfd2FybmluZ3NACisgZW5hYmxlLXdlcnJvciA9IEBlbmFibGVfd2Vycm9yQAorIAorK2tjb25maWdfdG9vbHMgPSBAS0NPTkZJR19UT09MU0AKKysKKyBoYXZlLXotY29tYnJlbG9jID0gQGxpYmNfY3Zfel9jb21icmVsb2NACisgaGF2ZS16LWV4ZWNzdGFjayA9IEBsaWJjX2N2X3pfZXhlY3N0YWNrQAorIGhhdmUtQmdyb3VwID0gQGxpYmNfY3ZfQmdyb3VwQAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggN2Q3Mjk5YS4uNDExNjQwNCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjQxLDYgKzY0MSw3IEBAIElOU1RBTExfSU5GTworIFBFUkwKKyBCQVNIX1NIRUxMCisgbGliY19jdl9nY2Nfc3RhdGljX2xpYmdjYworK0tDT05GSUdfVE9PTFMKKyBDWFhfU1lTSU5DTFVERVMKKyBTWVNJTkNMVURFUworIEFVVE9DT05GCitAQCAtNzU1LDYgKzc1Niw3IEBAIHdpdGhfZnAKKyB3aXRoX2JpbnV0aWxzCisgd2l0aF9zZWxpbnV4Cisgd2l0aF9oZWFkZXJzCisrd2l0aF9rY29uZmlnCisgd2l0aF9kZWZhdWx0X2xpbmsKKyBlbmFibGVfc2FuaXR5X2NoZWNrcworIGVuYWJsZV9zaGFyZWQKK0BAIC0xNDU5LDYgKzE0NjEsOSBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1zZWxpbnV4ICAgICAgICAgIGlmIGJ1aWxkaW5nIHdpdGggU0VMaW51eCBzdXBwb3J0CisgICAtLXdpdGgtaGVhZGVycz1QQVRIICAgICBsb2NhdGlvbiBvZiBzeXN0ZW0gaGVhZGVycyB0byB1c2UgKGZvciBleGFtcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvdXNyL3NyYy9saW51eC9pbmNsdWRlKSBbZGVmYXVsdD1jb21waWxlciBkZWZhdWx0XQorKyAgLS13aXRoLWtjb25maWc9UEFUSCAgICAgbG9jYXRpb24gb2Yga2NvbmZpZyB0b29scyB0byB1c2UgKGZyb20gTGludXgga2VybmVsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZHMpIHRvIHJlLXVzZSBmb3IgY29uZmlndXJpbmcgRUdMSUJDIG9wdGlvbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzCisgICAtLXdpdGgtZGVmYXVsdC1saW5rICAgICBkbyBub3QgdXNlIGV4cGxpY2l0IGxpbmtlciBzY3JpcHRzCisgICAtLXdpdGgtY3B1PUNQVSAgICAgICAgICBzZWxlY3QgY29kZSBmb3IgQ1BVIHZhcmlhbnQKKyAKK0BAIC0zNTE3LDYgKzM1MjIsMTQgQEAgZmkKKyAKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWtjb25maWcgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9rY29uZmlnK3NldH0iID0gc2V0OyB0aGVuCisrICB3aXRodmFsPSR3aXRoX2tjb25maWc7IEtDT05GSUdfVE9PTFM9JHdpdGh2YWwKKytlbHNlCisrICBLQ09ORklHX1RPT0xTPScnCisrZmkKKysKKysKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHQtbGluayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRfbGluaytzZXR9IiA9IHNldDsgdGhlbiA6CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNDY3YTY5Li5mYzBlZDRkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMzYsNiArMTM2LDE2IEBAIEFDX0FSR19XSVRIKFtoZWFkZXJzXSwKKyAJICAgIFtzeXNoZWFkZXJzPScnXSkKKyBBQ19TVUJTVChzeXNoZWFkZXJzKQorIAorK0FDX0FSR19XSVRIKFtrY29uZmlnXSwKKysJICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgta2NvbmZpZz1QQVRIXSwKKysJCQkgICBbbG9jYXRpb24gb2Yga2NvbmZpZyB0b29scyB0byB1c2UgKGZyb20gTGludXgKKysJCQkgICAga2VybmVsIGJ1aWxkcykgdG8gcmUtdXNlIGZvciBjb25maWd1cmluZyBFR0xJQkMKKysJCQkgICAgb3B0aW9uIGdyb3Vwc10pLAorKwkgICAgW0tDT05GSUdfVE9PTFM9JHdpdGh2YWxdLAorKwkgICAgW0tDT05GSUdfVE9PTFM9JyddKQorK0FDX1NVQlNUKEtDT05GSUdfVE9PTFMpCisrCisrCisgQUNfU1VCU1QodXNlX2RlZmF1bHRfbGluaykKKyBBQ19BUkdfV0lUSChbZGVmYXVsdC1saW5rXSwKKyAJICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGVmYXVsdC1saW5rXSwKK2RpZmYgLS1naXQgYS9vcHRpb24tZ3JvdXBzLmRlZiBiL29wdGlvbi1ncm91cHMuZGVmCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmFlYmQ5NAorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9uLWdyb3Vwcy5kZWYKK0BAIC0wLDAgKzEsODY4IEBACisrIyBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBvcHRpb24gZ3JvdXBzIEVHTElCQyBjdXJyZW50bHkgc3VwcG9ydHMsIGluCisrIyBhIGZvcm1hdCBha2luIHRvIHRoZSBMaW51eCBLY29uZmlnIHN5c3RlbSdzLiAgVGhlIHN5bnRheCBtYXkgY2hhbmdlCisrIyBvdmVyIHRpbWUuCisrIworKyMgQW4gZW50cnkgb2YgdGhlIGZvcm06CisrIworKyMgICBjb25maWcgR1JPVVBfTkFNRQorKyMgICAgICAgYm9vbCAib25lLWxpbmUgZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGlzIG9wdGlvbiBncm91cCBjb250cm9scyIKKysjICAgICAgIGhlbHAKKysjICAgICAgICAgICBNdWx0aS1saW5lIGhlbHAgZXhwbGFpbmluZyB0aGUgb3B0aW9uIGdyb3VwJ3MgbWVhbmluZyBpbgorKyMgICAgICAgICAgIHNvbWUgZGV0YWlsLCB0ZXJtaW5hdGVkIGJ5IGluZGVudGF0aW9uIGxldmVsLgorKyMKKysjIGRlZmluZXMgYW4gb3B0aW9uIGdyb3VwIHdob3NlIHZhcmlhYmxlIGlzIEdST1VQX05BTUUsIHdpdGgKKysjIG1lYW5pbmdmdWwgdmFsdWVzICd5JyAoZW5hYmxlZCkgYW5kICduJyAoZGlzYWJsZWQpLiAgVGhlCisrIyBkb2N1bWVudGF0aW9uIGlzIGZvcm1hdHRlZCB0byBiZSBjb25zdW1lZCBieSBzb21lIHNvcnQgb2YKKysjIGludGVyYWN0aXZlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLCBidXQgRUdMSUJDIGRvZXNuJ3QgaGF2ZSBzdWNoIGFuCisrIyBpbnRlcmZhY2UgeWV0LgorKyMKKysjIEFuIG9wdGlvbiBtYXkgaGF2ZSBhICdkZXBlbmRzIG9uJyBsaW5lLCBpbmRpY2F0aW5nIHdoaWNoIG90aGVyIG9wdGlvbnMKKysjIG11c3QgYWxzbyBiZSBlbmFibGVkIGlmIHRoaXMgb3B0aW9uIGlzLiAgQXQgcHJlc2VudCwgRUdMSUJDIGRvZXNuJ3QKKysjIGNoZWNrIHRoYXQgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuCisrIworKyMgT3B0aW9uIGdyb3VwIHZhcmlhYmxlcyBnZXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgZnJvbSB0aGUgZmlsZQorKyMgJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLCBpbiB0aGUgdG9wIGRpcmVjdG9yeSBvZiB0aGUgRUdMSUJDIHNvdXJjZQorKyMgdHJlZS4gIEJ5IGRlZmF1bHQsIGFsbCBFR0xJQkMgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZCAtLS0gdGhlaXIKKysjIHZhcmlhYmxlcyBhcmUgc2V0IHRvICd5Jy4KKysjCisrIyBBZnRlciBpbmNsdWRpbmcgJ29wdGlvbi1ncm91cHMuZGVmYXVsdHMnLCB0aGUgRUdMSUJDIG1ha2UgbWFjaGluZXJ5CisrIyBpbmNsdWRlcyB0aGUgZmlsZSAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZyb20gdGhlIHRvcCBvZiB0aGUgYnVpbGQKKysjIHRyZWUsIGlmIGl0IGlzIHByZXNlbnQuICBEZXZlbG9wZXJzIGNhbiBwbGFjZSBhc3NpZ25tZW50cyB0byBvcHRpb24KKysjIGdyb3VwIHZhcmlhYmxlcyBpbiB0aGF0IGZpbGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLiAgRm9yIGV4YW1wbGUsCisrIyB0byBkaXNhYmxlIGFuIG9wdGlvbiBncm91cCwgcGxhY2UgYSBsaW5lIG9mIHRoZSBmb3JtOgorKyMKKysjICAgIE9QVElPTl9HUk9VUF9OQU1FID0gbgorKyMKKysjIGluICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgYXQgdGhlIHRvcCBvZiB5b3VyIGJ1aWxkIHRyZWUuICBUbworKyMgZXhwbGljaXRseSBlbmFibGUgYW4gb3B0aW9uIGdyb3VwLCB5b3UgbWF5IGFsc28gd3JpdGU6CisrIworKyMgICAgT1BUSU9OX0dST1VQX05BTUUgPSB5CisrIworKyMgYWx0aG91Z2ggdGhpcyBzaW1wbHkgcmVlc3RhYmxpc2hlcyB0aGUgdmFsdWUgYWxyZWFkeSBzZXQgYnkKKysjICdvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJy4KKysKKytjb25maWcgRUdMSUJDX0FEVkFOQ0VEX0lORVQ2CisrICAgYm9vbCAiSVB2NiBBZHZhbmNlZCBTb2NrZXRzIEFQSSBzdXBwb3J0IChSRkMzNTQyKSIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZnVuY3Rpb25zIHNwZWNpZmllZCBieSBSRkMgMzU0MiwKKysgICAgICAgIkFkdmFuY2VkIFNvY2tldHMgQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZhY2UgKEFQSSkgZm9yCisrICAgICAgIElQdjYiLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBpbmV0Nl9vcHRfYXBwZW5kCisrICAgICAgICAgaW5ldDZfb3B0X2ZpbmQKKysgICAgICAgICBpbmV0Nl9vcHRfZmluaXNoCisrICAgICAgICAgaW5ldDZfb3B0X2dldF92YWwKKysgICAgICAgICBpbmV0Nl9vcHRfaW5pdAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9hbGxvYworKyAgICAgICAgIGluZXQ2X29wdGlvbl9hcHBlbmQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fZmluZAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9pbml0CisrICAgICAgICAgaW5ldDZfb3B0aW9uX25leHQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fc3BhY2UKKysgICAgICAgICBpbmV0Nl9vcHRfbmV4dAorKyAgICAgICAgIGluZXQ2X29wdF9zZXRfdmFsCisrICAgICAgICAgaW5ldDZfcnRoX2FkZAorKyAgICAgICAgIGluZXQ2X3J0aF9nZXRhZGRyCisrICAgICAgICAgaW5ldDZfcnRoX2luaXQKKysgICAgICAgICBpbmV0Nl9ydGhfcmV2ZXJzZQorKyAgICAgICAgIGluZXQ2X3J0aF9zZWdtZW50cworKyAgICAgICAgIGluZXQ2X3J0aF9zcGFjZQorKworK2NvbmZpZyBFR0xJQkNfQkFDS1RSQUNFCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBwcm9kdWNpbmcgYmFja3RyYWNlcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcHJvZHVjaW5nIGEgbGlzdCBvZgorKyAgICAgICB0aGUgZnVuY3Rpb24gY2FsbHMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbiBhIHRocmVhZCwgZnJvbQorKyAgICAgICB3aXRoaW4gdGhlIHRocmVhZCBpdHNlbGYuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9mdGVuIHVzZWQKKysgICAgICAgd2l0aGluIHNpZ25hbCBoYW5kbGVycywgdG8gcHJvZHVjZSBkaWFnbm9zdGljIG91dHB1dC4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgYmFja3RyYWNlCisrICAgICAgICAgYmFja3RyYWNlX3N5bWJvbHMKKysgICAgICAgICBiYWNrdHJhY2Vfc3ltYm9sc19mZAorKworK2NvbmZpZyBFR0xJQkNfQklHX01BQ1JPUworKyAgIGJvb2wgIlVzZSBleHRlbnNpdmUgaW5saW5lIGNvZGUiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBzcGVjaWZpZXMgd2hldGhlciBjZXJ0YWluIHBpZWNlcyBvZiBjb2RlCisrICAgICAgIHNob3VsZCBiZSBpbmxpbmVkIHRvIGFjaGlldmUgbWF4aW11bSBzcGVlZC4gIElmIHRoaXMgb3B0aW9uCisrICAgICAgIGdyb3VwIGlzIG5vdCBzZWxlY3RlZCwgZnVuY3Rpb24gY2FsbHMgd2lsbCBiZSB1c2VkIGluc3RlYWQsCisrICAgICAgIGhlbmNlIHJlZHVjaW5nIHRoZSBsaWJyYXJ5IGZvb3RwcmludC4KKysKKytjb25maWcgRUdMSUJDX0JTRAorKyAgIGJvb2wgIkJTRC1zcGVjaWZpYyBmdW5jdGlvbnMsIGFuZCB0aGVpciBjb21wYXRpYmlsaXR5IHN0dWJzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIHNwZWNpZmljIHRvIEJTRCBrZXJuZWxzLgorKyAgICAgICBBIG51bWJlciBvZiB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBzdHViIHZlcnNpb25zIHRoYXQgYXJlIGFsc28KKysgICAgICAgaW5jbHVkZWQgaW4gbGlicmFyaWVzIGJ1aWx0IGZvciBub24tQlNEIHN5c3RlbXMgZm9yCisrICAgICAgIGNvbXBhdGliaWxpdHkuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGNoZmxhZ3MKKysgICAgICAgICBmY2hmbGFncworKyAgICAgICAgIGxjaG1vZAorKyAgICAgICAgIHJldm9rZQorKyAgICAgICAgIHNldGxvZ2luCisrCisrY29uZmlnIEVHTElCQ19DWFhfVEVTVFMKKysgICBib29sICJUZXN0cyB0aGF0IGxpbmsgYWdhaW5zdCB0aGUgc3RhbmRhcmQgQysrIGxpYnJhcnkuIgorKyAgIGRlcGVuZHMgb24gUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTyAmJiBFR0xJQkNfTElCTQorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZG9lcyBub3QgaW5jbHVkZSBhbnkgQyBsaWJyYXJ5IGZ1bmN0aW9uczsKKysgICAgICAgaW5zdGVhZCwgaXQgY29udHJvbHMgd2hpY2ggRUdMSUJDIHRlc3RzIGFuIG9yZGluYXJ5ICdtYWtlCisrICAgICAgIHRlc3RzJyBydW5zLiAgV2l0aCB0aGlzIGdyb3VwIGRpc2FibGVkLCB0ZXN0cyB0aGF0IHdvdWxkCisrICAgICAgIG5vcm1hbGx5IGxpbmsgYWdhaW5zdCB0aGUgc3RhbmRhcmQgQysrIGxpYnJhcnkgYXJlIG5vdAorKyAgICAgICBydW4uCisrCisrICAgICAgIFRoZSBzdGFuZGFyZCBDKysgbGlicmFyeSBkZXBlbmRzIG9uIHRoZSBtYXRoIGxpYnJhcnkgJ2xpYm0nIGFuZAorKyAgICAgICB0aGUgd2lkZSBjaGFyYWN0ZXIgSS9PIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiBFR0xJQkMuICBTbyB0aG9zZQorKyAgICAgICBvcHRpb24gZ3JvdXBzIG11c3QgYmUgZW5hYmxlZCBpZiB0aGlzIHRlc3QgaXMgZW5hYmxlZC4KKysKKytjb25maWcgRUdMSUJDX0NBVEdFVFMKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBtZXNzYWdlIGNhdGFsb2dzIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBtZXNzYWdlCisrICAgICAgIGNhdGFsb2dzOiBjYXRvcGVuLCBjYXRjbG9zZSwgYW5kIGNhdGdldHMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGRlcGVuZHMgb24gdGhlIEVHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgICBvcHRpb24gZ3JvdXAuCisrCisrY29uZmlnIEVHTElCQ19DSEFSU0VUUworKyAgIGJvb2wgImljb252L2djb252IGNoYXJhY3RlciBzZXQgY29udmVyc2lvbiBsaWJyYXJpZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBzdXBwb3J0IGZvciBjaGFyYWN0ZXIgc2V0cyBvdGhlcgorKyAgICAgICB0aGFuIEFTQ0lJIChBTlNJX1gzLjQtMTk2OCkgYW5kIFVuaWNvZGUgYW5kIElTTy0xMDY0NiBpbiB0aGVpcgorKyAgICAgICB2YXJpb3VzIGVuY29kaW5ncy4gIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBjaGFyYWN0ZXIgc2V0cworKyAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIHdpZGUgYW5kIG11bHRpYnl0ZSBjaGFyYWN0ZXIgZnVuY3Rpb25zLCBhbmQKKysgICAgICAgdGhvc2Ugc3VwcG9ydGVkIGJ5IHRoZSAnaWNvbnYnIGZ1bmN0aW9ucy4KKysKKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgRUdMSUJDIHN1cHBvcnRzIG9ubHkgdGhlCisrICAgICAgIGZvbGxvd2luZyBjaGFyYWN0ZXIgc2V0czoKKysKKysgICAgICAgICAgQU5TSV9YMy40ICAgICAgICAgLSBBU0NJSQorKyAgICAgICAgICBBTlNJX1gzLjQtMTk2OAorKyAgICAgICAgICBBTlNJX1gzLjQtMTk4NgorKyAgICAgICAgICBBU0NJSQorKyAgICAgICAgICBDUDM2NworKyAgICAgICAgICBDU0FTQ0lJCisrICAgICAgICAgIElCTTM2NworKyAgICAgICAgICBJU08tSVItNgorKyAgICAgICAgICBJU082NDYtVVMKKysgICAgICAgICAgSVNPXzY0Ni5JUlY6MTk5MQorKyAgICAgICAgICBPU0YwMDAxMDAyMAorKyAgICAgICAgICBVUworKyAgICAgICAgICBVUy1BU0NJSQorKworKyAgICAgICAgICAxMDY0Ni0xOjE5OTMgICAgICAtIElTTyAxMDY0NiwgaW4gYmlnLWVuZGlhbiBVQ1M0IGZvcm0KKysgICAgICAgICAgMTA2NDYtMToxOTkzL1VDUzQKKysgICAgICAgICAgQ1NVQ1M0CisrICAgICAgICAgIElTTy0xMDY0NgorKyAgICAgICAgICBJU08tMTA2NDYvVUNTNAorKyAgICAgICAgICBPU0YwMDAxMDEwNAorKyAgICAgICAgICBPU0YwMDAxMDEwNQorKyAgICAgICAgICBPU0YwMDAxMDEwNgorKyAgICAgICAgICBVQ1MtNAorKyAgICAgICAgICBVQ1MtNEJFCisrICAgICAgICAgIFVDUzQKKysKKysgICAgICAgICAgVUNTLTRMRSAgICAgICAgICAgLSBJU08gMTA2NDYsIGluIGxpdHRsZS1lbmRpYW4gVUNTNCBmb3JtCisrCisrICAgICAgICAgIElTTy0xMDY0Ni9VVEYtOCAgIC0gSVNPIDEwNjQ2LCBpbiBVVEYtOCBmb3JtCisrICAgICAgICAgIElTTy0xMDY0Ni9VVEY4CisrICAgICAgICAgIElTTy1JUi0xOTMKKysgICAgICAgICAgT1NGMDUwMTAwMDEKKysgICAgICAgICAgVVRGLTgKKysgICAgICAgICAgVVRGOAorKworKyAgICAgICAgICBJU08tMTA2NDYvVUNTMiAgICAtIElTTyAxMDY0NiwgaW4gdGFyZ2V0LWVuZGlhbiBVQ1MyIGZvcm0KKysgICAgICAgICAgT1NGMDAwMTAxMDAKKysgICAgICAgICAgT1NGMDAwMTAxMDEKKysgICAgICAgICAgT1NGMDAwMTAxMDIKKysgICAgICAgICAgVUNTLTIKKysgICAgICAgICAgVUNTMgorKworKyAgICAgICAgICBVQ1MtMkJFICAgICAgICAgICAtIElTTyAxMDY0NiwgaW4gYmlnLWVuZGlhbiBVQ1MyIGZvcm0KKysgICAgICAgICAgVU5JQ09ERUJJRworKworKyAgICAgICAgICBVQ1MtMkxFICAgICAgICAgICAtIElTTyAxMDY0NiwgaW4gbGl0dGxlLWVuZGlhbiBVQ1MyIGZvcm0KKysgICAgICAgICAgVU5JQ09ERUxJVFRMRQorKworKyAgICAgICAgICBXQ0hBUl9UICAgICAgICAgICAtIEVHTElCQydzIGludGVybmFsIGZvcm0gKHRhcmdldC1lbmRpYW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IElTTyAxMDY0NikKKysKKytjb25maWcgRUdMSUJDX0NSWVBUCisrICAgYm9vbCAiRW5jcnlwdGlvbiBsaWJyYXJ5IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJjcnlwdCcgbGlicmFyeSB3aGljaAorKyAgICAgICBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIG9uZS13YXkgZW5jcnlwdGlvbi4gIFN1cHBvcnRlZAorKyAgICAgICBlbmNyeXB0aW9uIGFsZ29yaXRobXMgaW5jbHVkZSBNRDUsIFNIQS0yNTYsIFNIQS01MTIgYW5kIERFUy4KKysKKytjb25maWcgRUdMSUJDX0NSWVBUX1VGQworKyAgIGJvb2wgIlVsdHJhIGZhc3QgYGNyeXB0JyBpbXBsZW1lbnRhdGlvbiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19DUllQVAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgcHJvdmlkZXMgdWx0cmEgZmFzdCBERVMtYmFzZWQgaW1wbGVtZW50YXRpb24gb2YKKysgICAgICAgdGhlIGBjcnlwdCcgZnVuY3Rpb24uICBXaGVuIHRoaXMgb3B0aW9uIGdyb3VwIGlzIGRpc2FibGVkLAorKyAgICAgICAoYSkgdGhlIGxpYnJhcnkgd2lsbCBub3QgcHJvdmlkZSB0aGUgc2V0a2V5W19yXSBhbmQgZW5jcnlwdFtfcl0KKysgICAgICAgZnVuY3Rpb25zIGFuZCAoYikgdGhlIGNyeXB0W19yXSBmdW5jdGlvbiB3aWxsIHJldHVybiBOVUxMIGFuZCBzZXQgdGhlCisrICAgICAgIGVycm5vIHRvIEVOT1NZUyBpZiAvc2FsdC8gcGFzc2VkIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gZWl0aGVyIE1ENSwKKysgICAgICAgU0hBLTI1NiBvciBTSEEtNTEyIGFsZ29yaXRobS4KKysKKytjb25maWcgRUdMSUJDX0RCX0FMSUFTRVMKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgbWFpbCBhbGlhc2VzIGRhdGFiYXNlIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkdWVzIGZ1bmN0aW9ucyBmb3IgbG9va2luZyB1cCBtYWlsCisrICAgICAgIGFsaWFzZXMgaW4gJy9ldGMvYWxpYXNlcycgb3IgdXNpbmcgbnNzd2l0Y2guICBJdCBpbmNsdWRlcyB0aGUKKysgICAgICAgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmRhbGlhc2VudAorKyAgICAgICAgIGdldGFsaWFzYnluYW1lCisrICAgICAgICAgZ2V0YWxpYXNieW5hbWVfcgorKyAgICAgICAgIGdldGFsaWFzZW50CisrICAgICAgICAgZ2V0YWxpYXNlbnRfcgorKyAgICAgICAgIHNldGFsaWFzZW50CisrCisrICAgICAgIFdoZW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgZGlzYWJsZWQsIHRoZSBOU1Mgc2VydmljZSBsaWJyYXJpZXMKKysgICAgICAgYWxzbyBsYWNrIHN1cHBvcnQgZm9yIHF1ZXJ5aW5nIHRoZWlyIG1haWwgYWxpYXMgdGFibGVzLgorKworK2NvbmZpZyBFR0xJQkNfRU5WWgorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgZW52ei1zdHlsZSBlbnZpcm9ubWVudCB2ZWN0b3JzLiIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG9wZXJhdGluZworKyAgICAgICBvbiBlbnZ6IHZlY3RvcnMuICBBbiAiZW52eiB2ZWN0b3IiIGlzIGEgdmVjdG9yIG9mIHN0cmluZ3MgaW4gYQorKyAgICAgICBjb250aWd1b3VzIGJsb2NrIG9mIG1lbW9yeSwgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgbmFtZS12YWx1ZQorKyAgICAgICBwYWlyLCBhbmQgZWxlbWVudHMgYXJlIHNlcGFyYXRlZCBmcm9tIHRoZWlyIG5laWdoYm9ycyBieSBudWxsCisrICAgICAgIGNoYXJhY3RlcnMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgZW52el9hZGQgICAgICAgIGVudnpfbWVyZ2UKKysgICAgICAgIGVudnpfZW50cnkgICAgICBlbnZ6X3JlbW92ZQorKyAgICAgICAgZW52el9nZXQgICAgICAgIGVudnpfc3RyaXAKKysKKytjb25maWcgRUdMSUJDX0ZDVlQKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB0byBzdHJpbmdzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nCisrICAgICAgIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgdG8gc3RyaW5ncy4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZWN2dCAgICAgICAgICAgcWVjdnQKKysJIGVjdnRfcgkJcWVjdnRfcgorKyAgICAgICAgIGZjdnQJCXFmY3Z0CisrCSBmY3Z0X3IJCXFmY3Z0X3IKKysgICAgICAgICBnY3Z0CQlxZ2N2dAorKworK2NvbmZpZyBFR0xJQkNfRk1UTVNHCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBmb3JtYXR0aW5nIG1lc3NhZ2VzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgYWRkc2V2ZXJpdHkgICAgZm10bXNnCisrCisrY29uZmlnIEVHTElCQ19GU1RBQgorKyAgIGJvb2wgIkFjY2VzcyBmdW5jdGlvbnMgZm9yICdmc3RhYiciCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgdGhlIG1vdW50CisrICAgICAgIHBvaW50IHNwZWNpZmljYXRpb24gdGFibGUsICcvZXRjL2ZzdGFiJy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKysgICAgICAgbm90IGluY2x1ZGVkIGluIHRoZSBQT1NJWCBzdGFuZGFyZCwgd2hpY2ggcHJvdmlkZXMgdGhlCisrICAgICAgICdnZXRtbnRlbnQnIGZhbWlseSBvZiBmdW5jdGlvbnMgaW5zdGVhZC4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kZnNlbnQgICAgICAgZ2V0ZnNzcGVjCisrICAgICAgICAgZ2V0ZnNlbnQgICAgICAgc2V0ZnNlbnQKKysgICAgICAgICBnZXRmc2ZpbGUKKysKKytjb25maWcgRUdMSUJDX0ZUUkFWRVJTRQorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgdHJhdmVyc2luZyBmaWxlIGhpZXJhcmNoaWVzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciB0cmF2ZXJzaW5nIGZpbGUKKysgICAgICAgVU5JWCBmaWxlIGhpZXJhY2hpZXMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGZ0c19vcGVuICAgICAgIGZ0dworKwkgZnRzX3JlYWQJbmZ0dworKyAgICAgICAgIGZ0c19jaGlsZHJlbglmdHc2NAorKwkgZnRzX3NldAluZnR3NjQKKysgICAgICAgICBmdHNfY2xvc2UKKysKKytjb25maWcgRUdMSUJDX0dFVExPR0lOCisrICAgYm9vbCAiVGhlIGdldGxvZ2luIGZ1bmN0aW9uIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX1VUTVAKKysgICBoZWxwCisrICAgICAgIFRoaXMgZnVuY3Rpb24gZ3JvdXAgaW5jbHVkZXMgdGhlICdnZXRsb2dpbicgYW5kICdnZXRsb2dpbl9yJworKyAgICAgICBmdW5jdGlvbnMsIHdoaWNoIHJldHVybiB0aGUgdXNlciBuYW1lIGFzc29jaWF0ZWQgYnkgdGhlIGxvZ2luCisrICAgICAgIGFjdGl2aXR5IHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcydzIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorKworKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCB0aGUgJ2dsb2InIGZ1bmN0aW9uIHdpbGwgbm90CisrICAgICAgIGZhbGwgYmFjayBvbiAnZ2V0bG9naW4nIHRvIGZpbmQgdGhlIHVzZXIncyBsb2dpbiBuYW1lIGZvciB0aWxkZQorKyAgICAgICBleHBhbnNpb24gd2hlbiB0aGUgJ0hPTUUnIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuCisrCisrY29uZmlnIEVHTElCQ19JRE4KKysgICBib29sICJJbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcyBzdXBwb3J0IgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJjaWRuJyBsaWJyYXJ5IHdoaWNoCisrICAgICAgIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGludGVybmF0aW9uYWwgZG9tYWluIG5hbWVzLgorKworK2NvbmZpZyBFR0xJQkNfSU5FVAorKyAgIGJvb2wgIk5ldHdvcmtpbmcgc3VwcG9ydCIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIG5ldHdvcmtpbmctc3BlY2lmaWMgZnVuY3Rpb25zIGFuZAorKyAgICAgICBkYXRhLiAgV2l0aCBFR0xJQkNfSU5FVCBkaXNhYmxlZCwgdGhlIEVHTElCQworKyAgICAgICBpbnN0YWxsYXRpb24gYW5kIEFQSSBjaGFuZ2VzIGFzIGZvbGxvd3M6CisrCisrICAgICAgIC0gVGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgYXJlIG5vdCBpbnN0YWxsZWQ6CisrCisrICAgICAgICAgbGlibnNsCisrICAgICAgICAgbGlibnNzX2NvbXBhdAorKyAgICAgICAgIGxpYm5zc19kbnMKKysgICAgICAgICBsaWJuc3NfaGVzaW9kCisrICAgICAgICAgbGlibnNzX25pcworKyAgICAgICAgIGxpYm5zc19uaXNwbHVzCisrICAgICAgICAgbGlicmVzb2x2CisrCisrICAgICAgIC0gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBhcmUgb21pdHRlZCBmcm9tIGxpYmM6CisrCisrICAgICAgICAgYXV0aGRlc19jcmVhdGUgICAgICAgICAgIGhzdHJlcnJvciAgICAgICAgICAgICAgc3ZjX2Zkc2V0CisrICAgICAgICAgYXV0aGRlc19nZXR1Y3JlZCAgICAgICAgIGh0b25sICAgICAgICAgICAgICAgICAgc3ZjX2dldHJlcQorKyAgICAgICAgIGF1dGhkZXNfcGtfY3JlYXRlICAgICAgICBodG9ucyAgICAgICAgICAgICAgICAgIHN2Y19nZXRyZXFfY29tbW9uCisrICAgICAgICAgYXV0aG5vbmVfY3JlYXRlICAgICAgICAgIGlmX2ZyZWVuYW1laW5kZXggICAgICAgc3ZjX2dldHJlcV9wb2xsCisrICAgICAgICAgYXV0aHVuaXhfY3JlYXRlICAgICAgICAgIGlmX2luZGV4dG9uYW1lICAgICAgICAgc3ZjX2dldHJlcXNldAorKyAgICAgICAgIGF1dGh1bml4X2NyZWF0ZV9kZWZhdWx0ICBpZl9uYW1laW5kZXggICAgICAgICAgIHN2Y19tYXhfcG9sbGZkCisrICAgICAgICAgYmluZHJlc3Zwb3J0ICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4ICAgICAgICAgc3ZjX3BvbGxmZAorKyAgICAgICAgIGNhbGxycGMgICAgICAgICAgICAgICAgICBpbjZhZGRyX2FueSAgICAgICAgICAgIHN2Y3Jhd19jcmVhdGUKKysgICAgICAgICBjYmNfY3J5cHQgICAgICAgICAgICAgICAgaW42YWRkcl9sb29wYmFjayAgICAgICBzdmNfcmVnaXN0ZXIKKysgICAgICAgICBjbG50X2Jyb2FkY2FzdCAgICAgICAgICAgaW5ldDZfb3B0X2FwcGVuZCAgICAgICBzdmNfcnVuCisrICAgICAgICAgY2xudF9jcmVhdGUgICAgICAgICAgICAgIGluZXQ2X29wdF9maW5kICAgICAgICAgc3ZjX3NlbmRyZXBseQorKyAgICAgICAgIGNsbnRfcGNyZWF0ZWVycm9yICAgICAgICBpbmV0Nl9vcHRfZmluaXNoICAgICAgIHN2Y3RjcF9jcmVhdGUKKysgICAgICAgICBjbG50X3BlcnJubyAgICAgICAgICAgICAgaW5ldDZfb3B0X2dldF92YWwgICAgICBzdmN1ZHBfYnVmY3JlYXRlCisrICAgICAgICAgY2xudF9wZXJyb3IgICAgICAgICAgICAgIGluZXQ2X29wdF9pbml0ICAgICAgICAgc3ZjdWRwX2NyZWF0ZQorKyAgICAgICAgIGNsbnRyYXdfY3JlYXRlICAgICAgICAgICBpbmV0Nl9vcHRpb25fYWxsb2MgICAgIHN2Y3VkcF9lbmFibGVjYWNoZQorKyAgICAgICAgIGNsbnRfc3BjcmVhdGVlcnJvciAgICAgICBpbmV0Nl9vcHRpb25fYXBwZW5kICAgIHN2Y3VuaXhfY3JlYXRlCisrICAgICAgICAgY2xudF9zcGVycm5vICAgICAgICAgICAgIGluZXQ2X29wdGlvbl9maW5kICAgICAgc3ZjdW5peGZkX2NyZWF0ZQorKyAgICAgICAgIGNsbnRfc3BlcnJvciAgICAgICAgICAgICBpbmV0Nl9vcHRpb25faW5pdCAgICAgIHN2Y191bnJlZ2lzdGVyCisrICAgICAgICAgY2xudHRjcF9jcmVhdGUgICAgICAgICAgIGluZXQ2X29wdGlvbl9uZXh0ICAgICAgdXNlcjJuZXRuYW1lCisrICAgICAgICAgY2xudHVkcF9idWZjcmVhdGUgICAgICAgIGluZXQ2X29wdGlvbl9zcGFjZSAgICAgeGRlY3J5cHQKKysgICAgICAgICBjbG50dWRwX2NyZWF0ZSAgICAgICAgICAgaW5ldDZfb3B0X25leHQgICAgICAgICB4ZHJfYWNjZXB0ZWRfcmVwbHkKKysgICAgICAgICBjbG50dW5peF9jcmVhdGUgICAgICAgICAgaW5ldDZfb3B0X3NldF92YWwgICAgICB4ZHJfYXJyYXkKKysgICAgICAgICBkZXNfc2V0cGFyaXR5ICAgICAgICAgICAgaW5ldDZfcnRoX2FkZCAgICAgICAgICB4ZHJfYXV0aGRlc19jcmVkCisrICAgICAgICAgZWNiX2NyeXB0ICAgICAgICAgICAgICAgIGluZXQ2X3J0aF9nZXRhZGRyICAgICAgeGRyX2F1dGhkZXNfdmVyZgorKyAgICAgICAgIGVuZGFsaWFzZW50ICAgICAgICAgICAgICBpbmV0Nl9ydGhfaW5pdCAgICAgICAgIHhkcl9hdXRodW5peF9wYXJtcworKyAgICAgICAgIGVuZGhvc3RlbnQgICAgICAgICAgICAgICBpbmV0Nl9ydGhfcmV2ZXJzZSAgICAgIHhkcl9ib29sCisrICAgICAgICAgZW5kbmV0ZW50ICAgICAgICAgICAgICAgIGluZXQ2X3J0aF9zZWdtZW50cyAgICAgeGRyX2J5dGVzCisrICAgICAgICAgZW5kbmV0Z3JlbnQgICAgICAgICAgICAgIGluZXQ2X3J0aF9zcGFjZSAgICAgICAgeGRyX2NhbGxoZHIKKysgICAgICAgICBlbmRwcm90b2VudCAgICAgICAgICAgICAgaW5ldF9hZGRyICAgICAgICAgICAgICB4ZHJfY2FsbG1zZworKyAgICAgICAgIGVuZHJwY2VudCAgICAgICAgICAgICAgICBpbmV0X2F0b24gICAgICAgICAgICAgIHhkcl9jaGFyCisrICAgICAgICAgZW5kc2VydmVudCAgICAgICAgICAgICAgIGluZXRfbG5hb2YgICAgICAgICAgICAgeGRyX2NyeXB0a2V5YXJnCisrICAgICAgICAgZXRoZXJfYXRvbiAgICAgICAgICAgICAgIGluZXRfbWFrZWFkZHIgICAgICAgICAgeGRyX2NyeXB0a2V5YXJnMgorKyAgICAgICAgIGV0aGVyX2F0b25fciAgICAgICAgICAgICBpbmV0X25ldG9mICAgICAgICAgICAgIHhkcl9jcnlwdGtleXJlcworKyAgICAgICAgIGV0aGVyX2hvc3R0b24gICAgICAgICAgICBpbmV0X25ldHdvcmsgICAgICAgICAgIHhkcl9kZXNfYmxvY2sKKysgICAgICAgICBldGhlcl9saW5lICAgICAgICAgICAgICAgaW5ldF9uc2FwX2FkZHIgICAgICAgICB4ZHJfZG91YmxlCisrICAgICAgICAgZXRoZXJfbnRvYSAgICAgICAgICAgICAgIGluZXRfbnNhcF9udG9hICAgICAgICAgeGRyX2VudW0KKysgICAgICAgICBldGhlcl9udG9hX3IgICAgICAgICAgICAgaW5ldF9udG9hICAgICAgICAgICAgICB4ZHJfZmxvYXQKKysgICAgICAgICBldGhlcl9udG9ob3N0ICAgICAgICAgICAgaW5ldF9udG9wICAgICAgICAgICAgICB4ZHJfZnJlZQorKyAgICAgICAgIGZyZWVhZGRyaW5mbyAgICAgICAgICAgICBpbmV0X3B0b24gICAgICAgICAgICAgIHhkcl9nZXRjcmVkcmVzCisrICAgICAgICAgZnJlZWlmYWRkcnMgICAgICAgICAgICAgIGlubmV0Z3IgICAgICAgICAgICAgICAgeGRyX2h5cGVyCisrICAgICAgICAgZ2FpX3N0cmVycm9yICAgICAgICAgICAgIGlydXNlcm9rICAgICAgICAgICAgICAgeGRyX2ludAorKyAgICAgICAgIGdldGFkZHJpbmZvICAgICAgICAgICAgICBpcnVzZXJva19hZiAgICAgICAgICAgIHhkcl9pbnQxNl90CisrICAgICAgICAgZ2V0YWxpYXNieW5hbWUgICAgICAgICAgIGtleV9kZWNyeXB0c2Vzc2lvbiAgICAgeGRyX2ludDMyX3QKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZV9yICAgICAgICAga2V5X2RlY3J5cHRzZXNzaW9uX3BrICB4ZHJfaW50NjRfdAorKyAgICAgICAgIGdldGFsaWFzZW50ICAgICAgICAgICAgICBrZXlfZW5jcnlwdHNlc3Npb24gICAgIHhkcl9pbnQ4X3QKKysgICAgICAgICBnZXRhbGlhc2VudF9yICAgICAgICAgICAga2V5X2VuY3J5cHRzZXNzaW9uX3BrICB4ZHJfa2V5YnVmCisrICAgICAgICAgZ2V0aG9zdGJ5YWRkciAgICAgICAgICAgIGtleV9nZW5kZXMgICAgICAgICAgICAgeGRyX2tleV9uZXRzdGFyZworKyAgICAgICAgIGdldGhvc3RieWFkZHJfciAgICAgICAgICBrZXlfZ2V0X2NvbnYgICAgICAgICAgIHhkcl9rZXlfbmV0c3RyZXMKKysgICAgICAgICBnZXRob3N0YnluYW1lICAgICAgICAgICAga2V5X3NlY3JldGtleV9pc19zZXQgICB4ZHJfa2V5c3RhdHVzCisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZTIgICAgICAgICAgIGtleV9zZXRuZXQgICAgICAgICAgICAgeGRyX2xvbmcKKysgICAgICAgICBnZXRob3N0YnluYW1lMl9yICAgICAgICAga2V5X3NldHNlY3JldCAgICAgICAgICB4ZHJfbG9uZ2xvbmdfdAorKyAgICAgICAgIGdldGhvc3RieW5hbWVfciAgICAgICAgICBuZXRuYW1lMmhvc3QgICAgICAgICAgIHhkcm1lbV9jcmVhdGUKKysgICAgICAgICBnZXRob3N0ZW50ICAgICAgICAgICAgICAgbmV0bmFtZTJ1c2VyICAgICAgICAgICB4ZHJfbmV0bmFtZXN0cgorKyAgICAgICAgIGdldGhvc3RlbnRfciAgICAgICAgICAgICBudG9obCAgICAgICAgICAgICAgICAgIHhkcl9uZXRvYmoKKysgICAgICAgICBnZXRpZmFkZHJzICAgICAgICAgICAgICAgbnRvaHMgICAgICAgICAgICAgICAgICB4ZHJfb3BhcXVlCisrICAgICAgICAgZ2V0aXB2NHNvdXJjZWZpbHRlciAgICAgIHBhc3N3ZDJkZXMgICAgICAgICAgICAgeGRyX29wYXF1ZV9hdXRoCisrICAgICAgICAgZ2V0X215YWRkcmVzcyAgICAgICAgICAgIHBtYXBfZ2V0bWFwcyAgICAgICAgICAgeGRyX3BtYXAKKysgICAgICAgICBnZXRuYW1laW5mbyAgICAgICAgICAgICAgcG1hcF9nZXRwb3J0ICAgICAgICAgICB4ZHJfcG1hcGxpc3QKKysgICAgICAgICBnZXRuZXRieWFkZHIgICAgICAgICAgICAgcG1hcF9ybXRjYWxsICAgICAgICAgICB4ZHJfcG9pbnRlcgorKyAgICAgICAgIGdldG5ldGJ5YWRkcl9yICAgICAgICAgICBwbWFwX3NldCAgICAgICAgICAgICAgIHhkcl9xdWFkX3QKKysgICAgICAgICBnZXRuZXRieW5hbWUgICAgICAgICAgICAgcG1hcF91bnNldCAgICAgICAgICAgICB4ZHJyZWNfY3JlYXRlCisrICAgICAgICAgZ2V0bmV0YnluYW1lX3IgICAgICAgICAgIHJjbWQgICAgICAgICAgICAgICAgICAgeGRycmVjX2VuZG9mcmVjb3JkCisrICAgICAgICAgZ2V0bmV0ZW50ICAgICAgICAgICAgICAgIHJjbWRfYWYgICAgICAgICAgICAgICAgeGRycmVjX2VvZgorKyAgICAgICAgIGdldG5ldGVudF9yICAgICAgICAgICAgICByZWdpc3RlcnJwYyAgICAgICAgICAgIHhkcnJlY19za2lwcmVjb3JkCisrICAgICAgICAgZ2V0bmV0Z3JlbnQgICAgICAgICAgICAgIHJlc19pbml0ICAgICAgICAgICAgICAgeGRyX3JlZmVyZW5jZQorKyAgICAgICAgIGdldG5ldGdyZW50X3IgICAgICAgICAgICByZXhlYyAgICAgICAgICAgICAgICAgIHhkcl9yZWplY3RlZF9yZXBseQorKyAgICAgICAgIGdldG5ldG5hbWUgICAgICAgICAgICAgICByZXhlY19hZiAgICAgICAgICAgICAgIHhkcl9yZXBseW1zZworKyAgICAgICAgIGdldHByb3RvYnluYW1lICAgICAgICAgICByZXhlY29wdGlvbnMgICAgICAgICAgIHhkcl9ybXRjYWxsX2FyZ3MKKysgICAgICAgICBnZXRwcm90b2J5bmFtZV9yICAgICAgICAgcnBjX2NyZWF0ZWVyciAgICAgICAgICB4ZHJfcm10Y2FsbHJlcworKyAgICAgICAgIGdldHByb3RvYnludW1iZXIgICAgICAgICBycmVzdnBvcnQgICAgICAgICAgICAgIHhkcl9zaG9ydAorKyAgICAgICAgIGdldHByb3RvYnludW1iZXJfciAgICAgICBycmVzdnBvcnRfYWYgICAgICAgICAgIHhkcl9zaXplb2YKKysgICAgICAgICBnZXRwcm90b2VudCAgICAgICAgICAgICAgcnRpbWUgICAgICAgICAgICAgICAgICB4ZHJzdGRpb19jcmVhdGUKKysgICAgICAgICBnZXRwcm90b2VudF9yICAgICAgICAgICAgcnVzZXJvayAgICAgICAgICAgICAgICB4ZHJfc3RyaW5nCisrICAgICAgICAgZ2V0cHVibGlja2V5ICAgICAgICAgICAgIHJ1c2Vyb2tfYWYgICAgICAgICAgICAgeGRyX3VfY2hhcgorKyAgICAgICAgIGdldHJwY2J5bmFtZSAgICAgICAgICAgICBydXNlcnBhc3MgICAgICAgICAgICAgIHhkcl91X2h5cGVyCisrICAgICAgICAgZ2V0cnBjYnluYW1lX3IgICAgICAgICAgIHNldGFsaWFzZW50ICAgICAgICAgICAgeGRyX3VfaW50CisrICAgICAgICAgZ2V0cnBjYnludW1iZXIgICAgICAgICAgIHNldGhvc3RlbnQgICAgICAgICAgICAgeGRyX3VpbnQxNl90CisrICAgICAgICAgZ2V0cnBjYnludW1iZXJfciAgICAgICAgIHNldGlwdjRzb3VyY2VmaWx0ZXIgICAgeGRyX3VpbnQzMl90CisrICAgICAgICAgZ2V0cnBjZW50ICAgICAgICAgICAgICAgIHNldG5ldGVudCAgICAgICAgICAgICAgeGRyX3VpbnQ2NF90CisrICAgICAgICAgZ2V0cnBjZW50X3IgICAgICAgICAgICAgIHNldG5ldGdyZW50ICAgICAgICAgICAgeGRyX3VpbnQ4X3QKKysgICAgICAgICBnZXRycGNwb3J0ICAgICAgICAgICAgICAgc2V0cHJvdG9lbnQgICAgICAgICAgICB4ZHJfdV9sb25nCisrICAgICAgICAgZ2V0c2VjcmV0a2V5ICAgICAgICAgICAgIHNldHJwY2VudCAgICAgICAgICAgICAgeGRyX3VfbG9uZ2xvbmdfdAorKyAgICAgICAgIGdldHNlcnZieW5hbWUgICAgICAgICAgICBzZXRzZXJ2ZW50ICAgICAgICAgICAgIHhkcl91bmlvbgorKyAgICAgICAgIGdldHNlcnZieW5hbWVfciAgICAgICAgICBzZXRzb3VyY2VmaWx0ZXIgICAgICAgIHhkcl91bml4Y3JlZAorKyAgICAgICAgIGdldHNlcnZieXBvcnQgICAgICAgICAgICBzdmNhdXRoZGVzX3N0YXRzICAgICAgIHhkcl91X3F1YWRfdAorKyAgICAgICAgIGdldHNlcnZieXBvcnRfciAgICAgICAgICBzdmNlcnJfYXV0aCAgICAgICAgICAgIHhkcl91X3Nob3J0CisrICAgICAgICAgZ2V0c2VydmVudCAgICAgICAgICAgICAgIHN2Y2Vycl9kZWNvZGUgICAgICAgICAgeGRyX3ZlY3RvcgorKyAgICAgICAgIGdldHNlcnZlbnRfciAgICAgICAgICAgICBzdmNlcnJfbm9wcm9jICAgICAgICAgIHhkcl92b2lkCisrICAgICAgICAgZ2V0c291cmNlZmlsdGVyICAgICAgICAgIHN2Y2Vycl9ub3Byb2cgICAgICAgICAgeGRyX3dyYXBzdHJpbmcKKysgICAgICAgICBoX2Vycmxpc3QgICAgICAgICAgICAgICAgc3ZjZXJyX3Byb2d2ZXJzICAgICAgICB4ZW5jcnlwdAorKyAgICAgICAgIGhfZXJybm8gICAgICAgICAgICAgICAgICBzdmNlcnJfc3lzdGVtZXJyICAgICAgIHhwcnRfcmVnaXN0ZXIKKysgICAgICAgICBoZXJyb3IgICAgICAgICAgICAgICAgICAgc3ZjZXJyX3dlYWthdXRoICAgICAgICB4cHJ0X3VucmVnaXN0ZXIKKysgICAgICAgICBoX25lcnIgICAgICAgICAgICAgICAgICAgc3ZjX2V4aXQKKysgICAgICAgICBob3N0Mm5ldG5hbWUgICAgICAgICAgICAgc3ZjZmRfY3JlYXRlCisrCisrICAgICAgIC0gVGhlIHJwY2dlbiwgbnNjZCwgYW5kIHJwY2luZm8gY29tbWFuZHMgYXJlIG5vdCBpbnN0YWxsZWQuCisrCisrICAgICAgIC0gVGhlICdycGMnIGZpbGUgKGEgdGV4dCBmaWxlIGxpc3RpbmcgUlBDIHNlcnZpY2VzKSBpcyBub3QgaW5zdGFsbGVkLgorKworKyAgICAgICBTb2NrZXQtcmVsYXRlZCBzeXN0ZW0gY2FsbHMgZG8gbm90IGZhbGwgaW4gdGhpcyBvcHRpb24gZ3JvdXAsCisrICAgICAgIGJlY2F1c2UgbWFueSBhcmUgYWxzbyB1c2VkIGZvciBvdGhlciBpbnRlci1wcm9jZXNzCisrICAgICAgIGNvbW11bmljYXRpb24gbWVjaGFuaXNtcy4gIEZvciBleGFtcGxlLCB0aGUgJ3N5c2xvZycgcm91dGluZXMKKysgICAgICAgdXNlIFVuaXgtZG9tYWluIHNvY2tldHMgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc3lzbG9nIGRhZW1vbjsKKysgICAgICAgc3lzbG9nIGlzIHZhbHVhYmxlIGluIG5vbi1uZXR3b3JrZWQgY29udGV4dHMuCisrCisrY29uZmlnIEVHTElCQ19JTkVUX0FOTAorKyAgIGJvb2wgIkFzeW5jaHJvbm91cyBuYW1lIGxvb2t1cCIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYmFubCcgbGlicmFyeSB3aGljaAorKyAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBhc3luY2hyb25vdXMgbmFtZSBsb29rdXAuCisrCisrY29uZmlnIEVHTElCQ19MSUJNCisrICAgYm9vbCAibGlibSAobWF0aCBsaWJyYXJ5KSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSAnbGlibScgbGlicmFyeSwgY29udGFpbmluZworKyAgICAgICBtYXRoZW1hdGljYWwgZnVuY3Rpb25zLiAgSWYgdGhpcyBvcHRpb24gZ3JvdXAgaXMgb21pdHRlZCwgdGhlbgorKyAgICAgICBhbiBFR0xJQkMgaW5zdGFsbGF0aW9uIGRvZXMgbm90IGluY2x1ZGUgc2hhcmVkIG9yIHVuc2hhcmVkIHZlcnNpb25zCisrICAgICAgIG9mIHRoZSBtYXRoIGxpYnJhcnkuCisrCisrICAgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHJlbW92ZSBhbGwgZmxvYXRpbmctcG9pbnQgcmVsYXRlZAorKyAgICAgICBmdW5jdGlvbmFsaXR5IGZyb20gRUdMSUJDOyBmb3IgZXhhbXBsZSwgJ3ByaW50ZicgYW5kICdzY2FuZicKKysgICAgICAgY2FuIHN0aWxsIHByaW50IGFuZCByZWFkIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aXRoIHRoaXMgb3B0aW9uCisrICAgICAgIGdyb3VwIGRpc2FibGVkLgorKworKyAgICAgICBOb3RlIHRoYXQgdGhlIElTTyBTdGFuZGFyZCBDKysgbGlicmFyeSAnbGlic3RkYysrJyBkZXBlbmRzIG9uCisrICAgICAgIEVHTElCQydzIG1hdGggbGlicmFyeSAnbGlibScuICBJZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbgorKyAgICAgICBncm91cCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gYnVpbGQgJ2xpYnN0ZGMrKycgYWdhaW5zdCB0aGUKKysgICAgICAgcmVzdWx0aW5nIEVHTElCQyBpbnN0YWxsYXRpb24uCisrCisrY29uZmlnIEVHTElCQ19MT0NBTEVTCisrICAgYm9vbCAiTG9jYWxlIGRlZmluaXRpb25zIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgYWxsIGxvY2FsZSBkZWZpbml0aW9ucyBvdGhlciB0aGFuCisrICAgICAgIHRoYXQgZm9yIHRoZSAiQyIgbG9jYWxlLiAgSWYgdGhpcyBvcHRpb24gZ3JvdXAgaXMgb21pdHRlZCwgdGhlbgorKyAgICAgICBvbmx5IHRoZSAiQyIgbG9jYWxlIGlzIHN1cHBvcnRlZC4KKysKKysKKytjb25maWcgRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgYm9vbCAiTG9jYWxlIGZ1bmN0aW9ucyIKKysgICBkZXBlbmRzIG9uIFBPU0lYX0NfTEFOR19XSURFX0NIQVIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGxvY2FsZSBzdXBwb3J0IGZ1bmN0aW9ucywgcHJvZ3JhbXMsCisrICAgICAgIGFuZCBsaWJyYXJpZXMuICBXaXRoIEVHTElCQ19MT0NBTEVfQ09ERSBkaXNhYmxlZCwKKysgICAgICAgRUdMSUJDIHN1cHBvcnRzIG9ubHkgdGhlICdDJyBsb2NhbGUgKGFsc28ga25vd24gYXMgJ1BPU0lYJyksCisrICAgICAgIGFuZCBpZ25vcmVzIHRoZSBzZXR0aW5ncyBvZiB0aGUgJ0xBTkcnIGFuZCAnTENfKicgZW52aXJvbm1lbnQKKysgICAgICAgdmFyaWFibGVzLgorKworKyAgICAgICBXaXRoIEVHTElCQ19MT0NBTEVfQ09ERSBkaXNhYmxlZCwgdGhlIGZvbGxvd2luZworKyAgICAgICBmdW5jdGlvbnMgYXJlIG9taXR0ZWQgZnJvbSBsaWJjOgorKworKyAgICAgICAgIGR1cGxvY2FsZSAgIGxvY2FsZWNvbnYgIG5sX2xhbmdpbmZvICAgIHJwbWF0Y2ggIHN0cmZtb25fbAorKyAgICAgICAgIGZyZWVsb2NhbGUgIG5ld2xvY2FsZSAgIG5sX2xhbmdpbmZvX2wgIHN0cmZtb24gIHVzZWxvY2FsZQorKworKyAgICAgICBGdXJ0aGVybW9yZSwgb25seSB0aGUgTENfQ1RZUEUgYW5kIExDX1RJTUUgY2F0ZWdvcmllcyBvZiB0aGUKKysgICAgICAgc3RhbmRhcmQgIkMiIGxvY2FsZSBhcmUgYXZhaWxhYmxlLgorKworKyAgICAgICBUaGUgRUdMSUJDX0NBVEdFVFMgb3B0aW9uIGdyb3VwIGRlcGVuZHMgb24gdGhpcyBvcHRpb24gZ3JvdXAuCisrCisrCisrY29uZmlnIEVHTElCQ19NRU1VU0FHRQorKyAgIGJvb2wgIk1lbW9yeSBwcm9maWxpbmcgbGlicmFyeSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGlibWVtdXNhZ2UnIGxpYnJhcnkgYW5kCisrICAgICAgIHRoZSBgbWVtdXNhZ2UnIGFuZCBgbWVtdXNhZ2VzdGF0JyB1dGlsaXRpZXMuCisrICAgICAgIFRoZXNlIGNvbXBvbmVudHMgcHJvdmlkZSBtZW1vcnkgcHJvZmlsaW5nIGZ1bmN0aW9ucy4KKysKKytjb25maWcgRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKysgICBpbnQgIk1lbW9yeSBwcm9maWxpbmcgbGlicmFyeSBidWZmZXIgc2l6ZSIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19NRU1VU0FHRQorKyAgIGRlZmF1bHQgIjMyNzY4IgorKyAgIGhlbHAKKysgICAgICAgTGlibWVtdXNhZ2UgbGlicmFyeSBidWZmZXJzIHRoZSBwcm9maWxpbmcgZGF0YSBpbiBtZW1vcnkKKysgICAgICAgYmVmb3JlIHdyaXRpbmcgaXQgb3V0IHRvIGRpc2suICBCeSBkZWZhdWx0LCB0aGUgbGlicmFyeQorKyAgICAgICBhbGxvY2F0ZXMgMS41TSBidWZmZXIsIHdoaWNoIGNhbiBiZSBzdWJzdGFudGlhbCBmb3Igc29tZQorKyAgICAgICBzeXN0ZW1zLiAgRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUgb3B0aW9uCisrICAgICAgIGFsbG93cyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYnVmZmVyIHNpemUuICBJdCBzcGVjaWZpZXMKKysgICAgICAgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoZSBidWZmZXIgc2hvdWxkIGhhdmUuCisrICAgICAgIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyBvbmUgYnVmZmVyIGVudHJ5IGFtb3VudHMgdG8gNDggYnl0ZXMsCisrICAgICAgIHNvIHNldHRpbmcgdGhpcyBvcHRpb24gdG8gdGhlIHZhbHVlIG9mIDUxMiB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZgorKyAgICAgICB0aGUgbWVtb3J5IGJ1ZmZlciB0byAyNEsuCisrCisrY29uZmlnIEVHTElCQ19OSVMKKysgICBib29sICJTdXBwb3J0IGZvciBOSVMsIE5JUyssIGFuZCB0aGUgc3BlY2lhbCAnY29tcGF0JyBzZXJ2aWNlcy4iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVCAmJiBFR0xJQkNfU1VOUlBDCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgTklTLCBOSVMrLCBhbmQgJ2NvbXBhdCcgTmFtZQorKyAgICAgICBTZXJ2aWNlIFN3aXRjaCBzZXJ2aWNlIGxpYnJhcmllcy4gIFdoZW4gaXQgaXMgZGlzYWJsZWQsIHRob3NlCisrICAgICAgIHNlcnZpY2VzIGxpYnJhcmllcyBhcmUgbm90IGluc3RhbGxlZDsgeW91IHNob3VsZCByZW1vdmUgYW55CisrICAgICAgIHJlZmVyZW5jZXMgdG8gdGhlbSBmcm9tIHlvdXIgJ25zc3dpdGNoLmNvbmYnIGZpbGUuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGRlcGVuZHMgb24gdGhlIEVHTElCQ19JTkVUIG9wdGlvbgorKyAgICAgICBncm91cDsgeW91IG11c3QgZW5hYmxlIHRoYXQgdG8gZW5hYmxlIHRoaXMgb3B0aW9uIGdyb3VwLgorKworK2NvbmZpZyBFR0xJQkNfTlNTV0lUQ0gKKysgICBib29sICJOYW1lIHNlcnZpY2Ugc3dpdGNoIChuc3N3aXRjaCkgc3VwcG9ydCIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSAnbnNzd2l0Y2gnIGZhY2lsaXR5LgorKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGVuYWJsZWQsIGFsbCBFR0xJQkMgZnVuY3Rpb25zIGZvcgorKyAgICAgICBhY2Nlc3NpbmcgdmFyaW91cyBzeXN0ZW0gZGF0YWJhc2VzIChwYXNzd29yZHMgYW5kIGdyb3VwczsKKysgICAgICAgbmV0d29ya2luZzsgYWxpYXNlczsgcHVibGljIGtleXM7IGFuZCBzbyBvbikgY29uc3VsdCB0aGUKKysgICAgICAgJy9ldGMvbnNzd2l0Y2guY29uZicgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRlY2lkZSBob3cgdG8gaGFuZGxlCisrICAgICAgIHF1ZXJpZXMuCisrCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIEVHTElCQyB1c2VzIGEgZml4ZWQgbGlzdCBvZgorKyAgICAgICBzZXJ2aWNlcyB0byBzYXRpc2Z5IHF1ZXJpZXMgb24gZWFjaCBkYXRhYmFzZSwgYXMgcmVxdWVzdGVkIGJ5CisrICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgc3BlY2lmaWVkIHdoZW4gRUdMSUJDIGlzIGJ1aWx0LiAgWW91cgorKyAgICAgICAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGZpbGUgbXVzdCBzZXQgdGhlIGZvbGxvd2luZyB0d28KKysgICAgICAgdmFyaWFibGVzOgorKworK2NvbmZpZyBFR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHCisrICAgc3RyaW5nICJOc3N3aXRjaCBmaXhlZCBjb25maWcgZmlsZW5hbWUiCisrICAgZGVwZW5kcyBvbiAhRUdMSUJDX05TU1dJVENICisrICAgZGVmYXVsdCAiIgorKyAgIGhlbHAKKysgICAgICAgICAgU2V0IHRoaXMgdG8gdGhlIG5hbWUgb2YgYSBmaWxlIHdob3NlIGNvbnRlbnRzIG9ic2VydmUgdGhlCisrICAgICAgICAgIHNhbWUgc3ludGF4IGFzIGFuIG9yZGluYXJ5ICcvZXRjL25zc3dpdGNoLmNvbmYnIGZpbGUuICBUaGUKKysgICAgICAgICAgRUdMSUJDIGJ1aWxkIHByb2Nlc3MgcGFyc2VzIHRoaXMgZmlsZSBqdXN0IGFzIEVHTElCQyB3b3VsZAorKyAgICAgICAgICBhdCBydW4gdGltZSBpZiBFR0xJQkNfTlNTV0lUQ0ggd2VyZSBlbmFibGVkLCBhbmQKKysgICAgICAgICAgcHJvZHVjZXMgYSBDIGxpYnJhcnkgdGhhdCB1c2VzIHRoZSBuc3N3aXRjaCBzZXJ2aWNlCisrICAgICAgICAgIGxpYnJhcmllcyB0byBzZWFyY2ggZm9yIGRhdGFiYXNlIGVudHJpZXMgYXMgdGhpcyBmaWxlCisrICAgICAgICAgIHNwZWNpZmllcywgaW5zdGVhZCBvZiBjb25zdWx0aW5nICcvZXRjL25zc3dpdGNoLmNvbmYnIGF0IHJ1bgorKyAgICAgICAgICB0aW1lLgorKworKyAgICAgICAgICBUaGlzIHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBmaWxlbmFtZS4gIFRoZSBFR0xJQkMgYnVpbGQKKysgICAgICAgICAgcHJvY2VzcyBtYXkgdXNlIGl0IGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQgd29ya2luZworKyAgICAgICAgICBkaXJlY3Rvcmllcy4gIEl0IG1heSBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gTWFrZWZpbGUKKysgICAgICAgICAgdmFyaWFibGVzIGxpa2UgJ2NvbW1vbi1vYmpwZngnICh0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLCBvciAnLi4nICh0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKS4KKysKKysgICAgICAgICAgVGhlIEVHTElCQyBzb3VyY2UgdHJlZSBpbmNsdWRlcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUKKysgICAgICAgICAgbmFtZWQgJ25zcy9maXhlZC1uc3N3aXRjaC5jb25mJzsgZm9yIHNpbXBsZSBjb25maWd1cmF0aW9ucywKKysgICAgICAgICAgeW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBkZWxldGUgcmVmZXJlbmNlcyB0byBkYXRhYmFzZXMgbm90CisrICAgICAgICAgIG5lZWRlZCBvbiB5b3VyIHN5c3RlbS4KKysKKytjb25maWcgRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUworKyAgIHN0cmluZyAiTnNzd2l0Y2ggZml4ZWQgZnVuY3Rpb25zIGZpbGVuYW1lIgorKyAgIGRlcGVuZHMgb24gIUVHTElCQ19OU1NXSVRDSAorKyAgIGRlZmF1bHQgIiIKKysgICBoZWxwCisrICAgICAgICAgIFRoZSBFR0xJQkMgYnVpbGQgcHJvY2VzcyB1c2VzIHRoaXMgZmlsZSB0byBkZWNpZGUgd2hpY2gKKysgICAgICAgICAgZnVuY3Rpb25zIHRvIG1ha2UgYXZhaWxhYmxlIGZyb20gd2hpY2ggc2VydmljZSBsaWJyYXJpZXMuCisrICAgICAgICAgIFRoZSBmaWxlICduc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zJyBzZXJ2ZXMgYXMgYSBzYW1wbGUKKysgICAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGlzIHNldHRpbmcsIGFuZCBleHBsYWlucyBpdHMgc3ludGF4CisrICAgICAgICAgIGFuZCBtZWFuaW5nIGluIG1vcmUgZGV0YWlsLgorKworKyAgICAgICAgICBUaGlzIHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUuICBUaGUgRUdMSUJDIGJ1aWxkCisrICAgICAgICAgIHByb2Nlc3MgbWF5IHVzZSBpdCBmcm9tIHNldmVyYWwgZGlmZmVyZW50IHdvcmtpbmcKKysgICAgICAgICAgZGlyZWN0b3JpZXMuICBJdCBtYXkgaW5jbHVkZSByZWZlcmVuY2VzIHRvIE1ha2VmaWxlCisrICAgICAgICAgIHZhcmlhYmxlcyBsaWtlICdjb21tb24tb2JqcGZ4JyAodGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKSwgb3IgJy4uJyAodGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCkuCisrCisrICAgICAgICAgIEJlIHN1cmUgdG8gbWVudGlvbiBlYWNoIGZ1bmN0aW9uIGluIGVhY2ggc2VydmljZSB5b3Ugd2lzaCB0bworKyAgICAgICAgICB1c2UuICBJZiB5b3UgZG8gbm90IG1lbnRpb24gYSBzZXJ2aWNlJ3MgZnVuY3Rpb24gaGVyZSwgdGhlCisrICAgICAgICAgIEVHTElCQyBkYXRhYmFzZSBhY2Nlc3MgZnVuY3Rpb25zIHdpbGwgbm90IGZpbmQgaXQsIGV2ZW4gaWYKKysgICAgICAgICAgaXQgaXMgbGlzdGVkIGluIHRoZSBFR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHCisrICAgICAgICAgIGZpbGUuCisrCisrICAgICAgICAgIEluIHRoaXMgYXJyYW5nZW1lbnQsIEVHTElCQyB3aWxsIG5vdCB1c2UgdGhlICdkbG9wZW4nIGFuZAorKyAgICAgICAgICAnZGxzeW0nIGZ1bmN0aW9ucyB0byBmaW5kIGRhdGFiYXNlIGFjY2VzcyBmdW5jdGlvbnMuICBJbnN0ZWFkLAorKyAgICAgICAgICBsaWJjIGhhcmQtY29kZXMgcmVmZXJlbmNlcyB0byB0aGUgc2VydmljZSBsaWJyYXJpZXMnIGRhdGFiYXNlCisrICAgICAgICAgIGFjY2VzcyBmdW5jdGlvbnMuICBZb3UgbXVzdCBleHBsaWNpdGx5IGxpbmsgeW91ciBwcm9ncmFtCisrICAgICAgICAgIGFnYWluc3QgdGhlIG5hbWUgc2VydmljZSBsaWJyYXJpZXMgKHRob3NlIHdob3NlIG5hbWVzIHN0YXJ0CisrICAgICAgICAgIHdpdGggJ2xpYm5zc18nLCBpbiB0aGUgc3lzcm9vdCdzICcvbGliJyBkaXJlY3RvcnkpIHdob3NlCisrICAgICAgICAgIGZ1bmN0aW9ucyB5b3UgaW50ZW5kIHRvIHVzZS4gIFRoaXMgYXJyYW5nZW1lbnQgaGVscHMKKysgICAgICAgICAgc3lzdGVtLXdpZGUgc3RhdGljIGFuYWx5c2lzIHRvb2xzIGRlY2lkZSB3aGljaCBmdW5jdGlvbnMgYQorKyAgICAgICAgICBzeXN0ZW0gYWN0dWFsbHkgdXNlcy4KKysKKysgICAgICAgICAgTm90ZSB0aGF0IHNvbWUgbnNzd2l0Y2ggc2VydmljZSBsaWJyYXJpZXMgcmVxdWlyZSBvdGhlciBvcHRpb24KKysgICAgICAgICAgZ3JvdXBzIHRvIGJlIGVuYWJsZWQ7IGZvciBleGFtcGxlLCB0aGUgRUdMSUJDX0lORVQKKysgICAgICAgICAgb3B0aW9uIGdyb3VwIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgdGhlICdsaWJuc3NfZG5zLnNvLjInCisrICAgICAgICAgIHNlcnZpY2UgbGlicmFyeSwgd2hpY2ggdXNlcyB0aGUgRG9tYWluIE5hbWUgU3lzdGVtIG5ldHdvcmsKKysgICAgICAgICAgcHJvdG9jb2wgdG8gYW5zd2VyIHF1ZXJpZXMuCisrCisrY29uZmlnIEVHTElCQ19SQ01ECisrICAgYm9vbCAiU3VwcG9ydCBmb3IgJ3JjbWQnIGFuZCByZWxhdGVkIGxpYnJhcnkgZnVuY3Rpb25zIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIGNvbW1hbmRzIG9uCisrICAgICAgcmVtb3RlIG1hY2hpbmVzIHZpYSB0aGUgJ3JzaCcgcHJvdG9jb2wsIGFuZCBkb2luZyBhdXRoZW50aWNhdGlvbgorKyAgICAgIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLiAgVGhpcyBhbHNvIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0CisrICAgICAgdXNlIHRoZSAncmV4ZWMnIHByb3RvY29sLgorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgcmNtZCAgICAgICAgICAgIHJ1c2Vyb2sKKysgICAgICAgIHJjbWRfYWYgICAgICAgICBydXNlcm9rX2FmCisrICAgICAgICByZXhlYyAgICAgICAgICAgaXJ1c2Vyb2sKKysgICAgICAgIHJleGVjX2FmICAgICAgICBpcnVzZXJva19hZgorKyAgICAgICAgcnJlc3Zwb3J0ICAgICAgIHJ1c2VycGFzcworKyAgICAgICAgcnJlc3Zwb3J0X2FmCisrCisrY29uZmlnIEVHTElCQ19SVExEX0RFQlVHCisrICAgYm9vbCAiUnVudGltZSBsaW5rZXIgZGVidWcgcHJpbnQgb3V0cyIKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgZW5hYmxlcyBkZWJ1ZyBvdXRwdXQgb2YgdGhlIHJ1bnRpbWUgbGlua2VyCisrICAgICAgd2hpY2ggaXMgYWN0aXZhdGVkIHZpYSBMRF9ERUJVRyBhbmQgTERfVFJBQ0VfUFJFTElOS0lORworKyAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIERpc2FibGluZyB0aGlzIG9wdGlvbiBncm91cCB5aWVsZHMKKysgICAgICBhIHNtYWxsZXIgcnVudGltZSBsaW5rZXIgYmluYXJ5LgorKyAgICAgIEJFV0FSRTogRGlzYWJsaW5nIHRoaXMgb3B0aW9uIGdyb3VwIGlzIGxpa2VseSB0byBicmVhaworKyAgICAgIHRoZSBgbGRkJyB1dGlsaXR5IHdoaWNoIG1heSBhbHNvIGJlIHVzZWQgYnkgdGhlIHByZWxpbmtlci4KKysgICAgICBJbiBwYXJ0aWN1bGFyLCB0aGUgYC0tdW51c2VkJyBsZGQgb3B0aW9uIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LgorKworK2NvbmZpZyBFR0xJQkNfU1BBV04KKysgICBib29sICJTdXBwb3J0IGZvciBQT1NJWCBwb3NpeF9zcGF3biBmdW5jdGlvbnMiCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBQT1NJWCBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZworKyAgICAgIHByb2dyYW1zIGluIGNoaWxkIHByb2Nlc3NlcyB3aXRob3V0IHVzaW5nICdmb3JrJyBvciAndmZvcmsnLgorKworKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgcG9zaXhfc3Bhd24KKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0ZmxhZ3MKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3kKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnbWFzaworKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2luaXQKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncworKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHBncm91cAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNjaGVkcGFyYW0KKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBvbGljeQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdtYXNrCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkY2xvc2UKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbgorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2Rlc3Ryb3kKKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19pbml0CisrICAgICAgICBwb3NpeF9zcGF3bnAKKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBhbHNvIHByb3ZpZGVzIHRoZSBhYmlsaXR5IGZvciB0aGUgaWNvbnYsCisrICAgICAgbG9jYWxlZGVmLCBhbmQgbG9jYWxlIHByb2dyYW1zIHRvIG9wZXJhdGUgdHJhbnNwYXJlbnRseSBvbgorKyAgICAgIGNvbXByZXNzZWQgY2hhcnNldCBkZWZpbml0aW9ucy4gIFdoZW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMKKysgICAgICBkaXNhYmxlZCwgdGhvc2UgcHJvZ3JhbXMgd2lsbCBvbmx5IG9wZXJhdGUgb24gdW5jb21wcmVzc2VkCisrICAgICAgY2hhcm1hcCBmaWxlcy4KKysKKytjb25maWcgRUdMSUJDX1NUUkVBTVMKKysgICBib29sICJTdXBwb3J0IGZvciBhY2Nlc3NpbmcgU1RSRUFNUy4iCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZworKyAgICAgIG1lc3NhZ2VzIHRvIGFuZCBmcm9tIFNUUkVBTVMuICBUaGUgU1RSRUFNUyBpbnRlcmZhY2UgcHJvdmlkZXMgYQorKyAgICAgIHVuaWZvcm0gbWVjaGFuaXNtIGZvciBpbXBsZW1lbnRpbmcgbmV0d29ya2luZyBzZXJ2aWNlcyBhbmQgb3RoZXIKKysgICAgICBjaGFyYWN0ZXItYmFzZWQgSS9PLiAgKFNUUkVBTVMgYXJlIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoCisrICAgICAgPHN0ZGlvLmg+IEZJTEUgb2JqZWN0cywgYWxzbyBjYWxsZWQgJ3N0cmVhbXMnLikKKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIGdldG1zZyAgICAgICAgICBwdXRwbXNnCisrICAgICAgICBnZXRwbXNnICAgICAgICAgZmF0dGFjaAorKyAgICAgICAgaXNhc3RyZWFtICAgICAgIGZkZXRhY2gKKysgICAgICAgIHB1dG1zZworKworK2NvbmZpZyBFR0xJQkNfU1VOUlBDCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgdGhlIFN1biAnUlBDJyBwcm90b2NvbC4iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBzdXBwb3J0IGZvciB0aGUgU3VuIFJQQyBwcm90b2NvbHMsCisrICAgICAgaW5jbHVkaW5nIHRoZSAncnBjZ2VuJyBhbmQgJ3JwY2luZm8nIHByb2dyYW1zLgorKworK2NvbmZpZyBFR0xJQkNfVVRNUAorKyAgICBib29sICJPbGRlciBhY2Nlc3MgZnVuY3Rpb25zIGZvciAndXRtcCcgbG9naW4gcmVjb3JkcyIKKysgICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgb2xkZXIgJ3V0ZW50JyBmYW1pbHkgb2YKKysgICAgICAgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdXNlciBsb2dpbiByZWNvcmRzIGluIHRoZSAndXRtcCcgZmlsZS4KKysgICAgICAgUE9TSVggb21pdHMgdGhlc2UgZnVuY3Rpb25zIGluIGZhdm9yIG9mIHRoZSAndXR4ZW50JyBmYW1pbHksCisrICAgICAgIGFuZCB0aGV5IGFyZSBvYnNvbGV0ZSBvbiBzeXN0ZW1zIG90aGVyIHRoYW4gTGludXguCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZHV0ZW50CisrICAgICAgICAgZ2V0dXRlbnQKKysgICAgICAgICBnZXR1dGVudF9yCisrICAgICAgICAgZ2V0dXRpZAorKyAgICAgICAgIGdldHV0aWRfcgorKyAgICAgICAgIGdldHV0bGluZQorKyAgICAgICAgIGdldHV0bGluZV9yCisrICAgICAgICAgbG9nd3RtcAorKyAgICAgICAgIHB1dHV0bGluZQorKyAgICAgICAgIHNldHV0ZW50CisrICAgICAgICAgdXBkd3RtcAorKyAgICAgICAgIHV0bXBuYW1lCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzOgorKworKyAgICAgICAgIGxpYnV0aWwuc28gKGFuZCBsaWJ1dGlsLmEpCisrCisrY29uZmlnIEVHTElCQ19VVE1QWAorKyAgICBib29sICJQT1NJWCBhY2Nlc3MgZnVuY3Rpb25zIGZvciAndXRtcCcgbG9naW4gcmVjb3JkcyIKKysgICAgZGVwZW5kcyBvbiBFR0xJQkNfVVRNUAorKyAgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBQT1NJWCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kCisrICAgICAgIHdyaXRpbmcgdXNlciBsb2dpbiByZWNvcmRzIGluIHRoZSAndXRtcCcgZmlsZSAodXN1YWxseQorKyAgICAgICAnL3Zhci9ydW4vdXRtcCcpLiAgVGhlIFBPU0lYIGZ1bmN0aW9ucyBvcGVyYXRlIG9uICdzdHJ1Y3QKKysgICAgICAgdXRtcHgnIHN0cnVjdHVyZXMsIGFzIG9wcG9zZWQgdG8gdGhlIGZhbWlseSBvZiBvbGRlciAndXRlbnQnCisrICAgICAgIGZ1bmN0aW9ucywgd2hpY2ggb3BlcmF0ZSBvbiAnc3RydWN0IHV0bXAnIHN0cnVjdHVyZXMuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZHV0eGVudAorKyAgICAgICAgIGdldHV0bXAKKysgICAgICAgICBnZXR1dG1weAorKyAgICAgICAgIGdldHV0eGVudAorKyAgICAgICAgIGdldHV0eGlkCisrICAgICAgICAgZ2V0dXR4bGluZQorKyAgICAgICAgIHB1dHV0eGxpbmUKKysgICAgICAgICBzZXR1dHhlbnQKKysgICAgICAgICB1cGR3dG1weAorKyAgICAgICAgIHV0bXB4bmFtZQorKworK2NvbmZpZyBFR0xJQkNfV09SREVYUAorKyAgICBib29sICJTaGVsbC1zdHlsZSB3b3JkIGV4cGFuc2lvbiIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlICd3b3JkZXhwJyBmdW5jdGlvbiBmb3IKKysgICAgICAgIHBlcmZvcm1pbmcgd29yZCBleHBhbnNpb24gaW4gdGhlIG1hbm5lciBvZiB0aGUgc2hlbGwsIGFuZCB0aGUKKysgICAgICAgIGFjY29tcGFueWluZyAnd29yZGZyZWUnIGZ1bmN0aW9uLgorKworK2NvbmZpZyBQT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrICAgIGJvb2wgIklTTyBDIGxpYnJhcnkgd2lkZSBjaGFyYWN0ZXIgZnVuY3Rpb25zLCBleGNsdWRpbmcgSS9PIgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZnVuY3Rpb25zIGRlZmluZWQgYnkgdGhlIElTTyBDCisrICAgICAgICBzdGFuZGFyZCBmb3Igd29ya2luZyB3aXRoIHdpZGUgYW5kIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluCisrICAgICAgICBtZW1vcnkuICBGdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgd2lkZSBhbmQgbXVsdGlieXRlCisrICAgICAgICBjaGFyYWN0ZXJzIGZyb20gYW5kIHRvIGZpbGVzIGNhbGwgaW4gdGhlCisrICAgICAgICBQT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPIG9wdGlvbiBncm91cC4KKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBidG93YyAgICAgICAgIG1ic2luaXQgICAgICAgd2NzY3NwbiAgICAgICB3Y3N0b2xsCisrICAgICAgICAgIGlzd2FsbnVtICAgICAgbWJzcnRvd2NzICAgICB3Y3NmdGltZSAgICAgIHdjc3RvbWJzCisrICAgICAgICAgIGlzd2FscGhhICAgICAgbWJzdG93Y3MgICAgICB3Y3NsZW4gICAgICAgIHdjc3RvdWwKKysgICAgICAgICAgaXN3YmxhbmsgICAgICBtYnRvd2MgICAgICAgIHdjc25jYXQgICAgICAgd2NzdG91bGwKKysgICAgICAgICAgaXN3Y250cmwgICAgICBzd3ByaW50ZiAgICAgIHdjc25jbXAgICAgICAgd2NzdG91bWF4CisrICAgICAgICAgIGlzd2N0eXBlICAgICAgc3dzY2FuZiAgICAgICB3Y3NuY3B5ICAgICAgIHdjc3hmcm0KKysgICAgICAgICAgaXN3ZGlnaXQgICAgICB0b3djdHJhbnMgICAgIHdjc3BicmsgICAgICAgd2N0b2IKKysgICAgICAgICAgaXN3Z3JhcGggICAgICB0b3dsb3dlciAgICAgIHdjc3JjaHIgICAgICAgd2N0b21iCisrICAgICAgICAgIGlzd2xvd2VyICAgICAgdG93dXBwZXIgICAgICB3Y3NydG9tYnMgICAgIHdjdHJhbnMKKysgICAgICAgICAgaXN3cHJpbnQgICAgICB2c3dwcmludGYgICAgIHdjc3NwbiAgICAgICAgd2N0eXBlCisrICAgICAgICAgIGlzd3B1bmN0ICAgICAgdnN3c2NhbmYgICAgICB3Y3NzdHIgICAgICAgIHdtZW1jaHIKKysgICAgICAgICAgaXN3c3BhY2UgICAgICB3Y3J0b21iICAgICAgIHdjc3RvZCAgICAgICAgd21lbWNtcAorKyAgICAgICAgICBpc3d1cHBlciAgICAgIHdjc2NhdCAgICAgICAgd2NzdG9mICAgICAgICB3bWVtY3B5CisrICAgICAgICAgIGlzd3hkaWdpdCAgICAgd2NzY2hyICAgICAgICB3Y3N0b2ltYXggICAgIHdtZW1tb3ZlCisrICAgICAgICAgIG1ibGVuICAgICAgICAgd2NzY21wICAgICAgICB3Y3N0b2sgICAgICAgIHdtZW1zZXQKKysgICAgICAgICAgbWJybGVuICAgICAgICB3Y3Njb2xsICAgICAgIHdjc3RvbAorKyAgICAgICAgICBtYnJ0b3djICAgICAgIHdjc2NweSAgICAgICAgd2NzdG9sZAorKworK2NvbmZpZyBQT1NJWF9SRUdFWFAKKysgICAgYm9vbCAiUmVndWxhciBleHByZXNzaW9ucyIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbgorKyAgICAgICAgZnVuY3Rpb25zLCBhbmQgdGhlIGFzc29jaWF0ZWQgbm9uLVBPU0lYIGV4dGVuc2lvbnMgYW5kCisrICAgICAgICBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucy4KKysKKysgICAgICAgIFdpdGggUE9TSVhfUkVHRVhQIGRpc2FibGVkLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUKKysgICAgICAgIG9taXR0ZWQgZnJvbSBsaWJjOgorKworKyAgICAgICAgICByZV9jb21wICAgICAgICAgICAgICAgICByZV9tYXhfZmFpbHVyZXMgICAgICAgICByZWdjb21wCisrICAgICAgICAgIHJlX2NvbXBpbGVfZmFzdG1hcCAgICAgIHJlX3NlYXJjaCAgICAgICAgICAgICAgIHJlZ2Vycm9yCisrICAgICAgICAgIHJlX2NvbXBpbGVfcGF0dGVybiAgICAgIHJlX3NlYXJjaF8yICAgICAgICAgICAgIHJlZ2V4ZWMKKysgICAgICAgICAgcmVfZXhlYyAgICAgICAgICAgICAgICAgcmVfc2V0X3JlZ2lzdGVycyAgICAgICAgcmVnZnJlZQorKyAgICAgICAgICByZV9tYXRjaCAgICAgICAgICAgICAgICByZV9zZXRfc3ludGF4ICAgICAgICAgICBycG1hdGNoCisrICAgICAgICAgIHJlX21hdGNoXzIgICAgICAgICAgICAgIHJlX3N5bnRheF9vcHRpb25zCisrCisrICAgICAgICBGdXJ0aGVybW9yZSwgdGhlIGNvbXBhdGliaWxpdHkgcmVnZXhwIGludGVyZmFjZSBkZWZpbmVkIGluIHRoZQorKyAgICAgICAgPHJlZ2V4cC5oPiBoZWFkZXIgZmlsZSwgJ2NvbXBpbGUnLCAnc3RlcCcsIGFuZCAnYWR2YW5jZScsIGlzCisrICAgICAgICBvbWl0dGVkLgorKworK2NvbmZpZyBQT1NJWF9SRUdFWFBfR0xJQkMKKysgICAgYm9vbCAiUmVndWxhciBleHByZXNzaW9ucyBmcm9tIEdMSUJDIgorKyAgICBkZXBlbmRzIG9uIFBPU0lYX1JFR0VYUAorKyAgICBoZWxwCisrCVRoaXMgb3B0aW9uIGdyb3VwIHNwZWNpZmllcyB3aGljaCByZWd1bGFyIGV4cHJlc3Npb24KKysgICAgICAgIGxpYnJhcnkgdG8gdXNlLiAgVGhlIGNob2ljZSBpcyBiZXR3ZWVuIHJlZ2V4CisrICAgICAgICBpbXBsZW1lbnRhdGlvbiBmcm9tIEdMSUJDIGFuZCByZWdleCBpbXBsZW1lbnRhdGlvbiBmcm9tCisrICAgICAgICBsaWJpYmVydHkuICBUaGUgR0xJQkMgdmFyaWFudCBpcyBmdWxseSBQT1NJWCBjb25mb3JtYW50IGFuZAorKyAgICAgICAgb3B0aW1pemVkIGZvciBzcGVlZDsgcmVnZXggZnJvbSBsaWJpYmVydHkgaXMgbW9yZSB0aGFuIHR3aWNlCisrICAgICAgICBhcyBzbWFsbCB3aGlsZSBzdGlsbCBpcyBlbm91Z2ggZm9yIG1vc3QgcHJhY3RpY2FsIHB1cnBvc2VzLgorKworK2NvbmZpZyBQT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgIGJvb2wgIklucHV0IGFuZCBvdXRwdXQgZnVuY3Rpb25zIGZvciB3aWRlIGNoYXJhY3RlcnMiCisrICAgIGRlcGVuZHMgb24gUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyAgICBoZWxwCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKKysgICAgICAgIHdpZGUgY2hhcmFjdGVycyB0byBhbmQgZnJvbSA8c3RkaW8uaD4gc3RyZWFtcy4KKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBmZ2V0d2MgICAgICAgIGZ3cHJpbnRmICAgICAgcHV0d2NoYXIgICAgICB2d3NjYW5mCisrICAgICAgICAgIGZnZXR3cyAgICAgICAgZndzY2FuZiAgICAgICB1bmdldHdjICAgICAgIHdwcmludGYKKysgICAgICAgICAgZnB1dHdjICAgICAgICBnZXR3YyAgICAgICAgIHZmd3ByaW50ZiAgICAgd3NjYW5mCisrICAgICAgICAgIGZwdXR3cyAgICAgICAgZ2V0d2NoYXIgICAgICB2ZndzY2FuZgorKyAgICAgICAgICBmd2lkZSAgICAgICAgIHB1dHdjICAgICAgICAgdndwcmludGYKKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGZ1cnRoZXIgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB1bmxvY2tlZAorKyAgICAgICAgdmFyaWFudHMgb2YgdGhlIGFib3ZlIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgZmdldHdjX3VubG9ja2VkICAgICAgICAgICBnZXR3Y191bmxvY2tlZAorKyAgICAgICAgICBmZ2V0d3NfdW5sb2NrZWQgICAgICAgICAgIGdldHdjaGFyX3VubG9ja2VkCisrICAgICAgICAgIGZwdXR3Y191bmxvY2tlZCAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQKKysgICAgICAgICAgZnB1dHdzX3VubG9ja2VkICAgICAgICAgICBwdXR3Y2hhcl91bmxvY2tlZAorKworKyAgICAgICAgTm90ZSB0aGF0IHRoZSBHTlUgc3RhbmRhcmQgQysrIGxpYnJhcnksICdsaWJzdGRjKysuc28nLCB1c2VzCisrICAgICAgICBzb21lIG9mIHRoZXNlIGZ1bmN0aW9uczsgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gbGluayBvciBydW4KKysgICAgICAgIEMrKyBwcm9ncmFtcyBpZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbiBncm91cC4KKysKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGFsc28gYWZmZWN0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZworKyAgICAgICAgZnVuY3Rpb25zOgorKworKyAgICAgICAgICBmZG9wZW4KKysgICAgICAgICAgZm9wZW4KKysgICAgICAgICAgZm9wZW42NAorKyAgICAgICAgICBmcmVvcGVuCisrICAgICAgICAgIGZyZW9wZW42NAorKworKyAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFsbCB0YWtlIGFuIE9QRU5UWVBFIHBhcmFtZXRlciB3aGljaCBtYXkKKysgICAgICAgIGNvbnRhaW4gYSBzdHJpbmcgb2YgdGhlIGZvcm0gIixjY3M9Q0hBUlNFVCIsIGluZGljYXRpbmcgdGhhdAorKyAgICAgICAgdGhlIHVuZGVybHlpbmcgZmlsZSB1c2VzIHRoZSBjaGFyYWN0ZXIgc2V0IG5hbWVkIENIQVJTRVQuCisrICAgICAgICBUaGlzIHByb2R1Y2VzIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0sIHdoaWNoIGlzIG9ubHkgdXNlZnVsCisrICAgICAgICB3aGVuIHRoZSBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gdGhpcyBvcHRpb24gZ3JvdXAgYXJlIHByZXNlbnQuCisrICAgICAgICBJZiB0aGUgdXNlciBhdHRlbXB0cyB0byBvcGVuIGEgZmlsZSBzcGVjaWZ5aW5nIGEgY2hhcmFjdGVyIHNldAorKyAgICAgICAgaW4gdGhlIE9QRU5UWVBFIHBhcmFtZXRlciwgYW5kIEVHTElCQyB3YXMgYnVpbHQgd2l0aCB0aGlzCisrICAgICAgICBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwsIGFuZCBzZXRzCisrICAgICAgICBlcnJubyB0byBFSU5WQUwuCisrCisrDAorKyMgVGhpcyBoZWxwcyBFbWFjcyB1c2VycyBicm93c2UgdGhpcyBmaWxlIHVzaW5nIHRoZSBwYWdlIG1vdGlvbiBjb21tYW5kcworKyMgYW5kIGNvbW1hbmRzIGxpa2UgJ3BhZ2VzLWRpcmVjdG9yeScuCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBwYWdlLWRlbGltaXRlcjogIl5jb25maWdcXHMtIgorKyMgRW5kOgorZGlmZiAtLWdpdCBhL29wdGlvbi1ncm91cHMuZGVmYXVsdHMgYi9vcHRpb24tZ3JvdXBzLmRlZmF1bHRzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODE0MTIwMQorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworQEAgLTAsMCArMSw0NyBAQAorKyMgVGhpcyBmaWxlIHNldHMgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBvcHRpb24gZ3JvdXAgdmFyaWFibGVzCisrIyBtZW50aW9uZWQgaW4gb3B0aW9uLWdyb3Vwcy5kZWY7IHNlZSB0aGF0IGZpbGUgZm9yIGEgZGVzY3JpcHRpb24gb2YKKysjIGVhY2ggb3B0aW9uIGdyb3VwLgorKyMKKysjIFN1YmRpcmVjdG9yeSBtYWtlZmlsZXMgaW5jbHVkZSB0aGlzIGZpbGUgYmVmb3JlIGluY2x1ZGluZyB0aGUgdXNlcidzCisrIyBzZXR0aW5ncyBmcm9tIG9wdGlvbi1ncm91cHMuY29uZmlnIGF0IHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWU7CisrIyB0aGF0IGZpbGUgbmVlZCBvbmx5IHJlZmVyIHRvIHRob3NlIG9wdGlvbnMgd2hvc2UgZGVmYXVsdCBzZXR0aW5ncworKyMgYXJlIHRvIGJlIGNoYW5nZWQuCisrIworKyMgQnkgZGVmYXVsdCwgYWxsIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQuCisrT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNiA9IHkKKytPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSA9IHkKKytPUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPSB5CisrT1BUSU9OX0VHTElCQ19CU0QgPSB5CisrT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMgPSB5CisrT1BUSU9OX0VHTElCQ19DQVRHRVRTID0geQorK09QVElPTl9FR0xJQkNfQ0hBUlNFVFMgPSB5CisrT1BUSU9OX0VHTElCQ19DUllQVCA9IHkKKytPUFRJT05fRUdMSUJDX0NSWVBUX1VGQyA9IHkKKytPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMgPSB5CisrT1BUSU9OX0VHTElCQ19FTlZaID0geQorK09QVElPTl9FR0xJQkNfRkNWVCA9IHkKKytPUFRJT05fRUdMSUJDX0ZNVE1TRyA9IHkKKytPUFRJT05fRUdMSUJDX0ZTVEFCID0geQorK09QVElPTl9FR0xJQkNfRlRSQVZFUlNFID0geQorK09QVElPTl9FR0xJQkNfR0VUTE9HSU4gPSB5CisrT1BUSU9OX0VHTElCQ19JRE4gPSB5CisrT1BUSU9OX0VHTElCQ19JTkVUID0geQorK09QVElPTl9FR0xJQkNfSU5FVF9BTkwgPSB5CisrT1BUSU9OX0VHTElCQ19MSUJNID0geQorK09QVElPTl9FR0xJQkNfTE9DQUxFUyA9IHkKKytPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFID0geQorK09QVElPTl9FR0xJQkNfTUVNVVNBR0UgPSB5CisrT1BUSU9OX0VHTElCQ19OSVMgPSB5CisrT1BUSU9OX0VHTElCQ19OU1NXSVRDSCA9IHkKKytPUFRJT05fRUdMSUJDX1JDTUQgPSB5CisrT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHID0geQorK09QVElPTl9FR0xJQkNfU1BBV04gPSB5CisrT1BUSU9OX0VHTElCQ19TVFJFQU1TID0geQorK09QVElPTl9FR0xJQkNfU1VOUlBDID0geQorK09QVElPTl9FR0xJQkNfVVRNUCA9IHkKKytPUFRJT05fRUdMSUJDX1VUTVBYID0geQorK09QVElPTl9FR0xJQkNfV09SREVYUCA9IHkKKytPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiA9IHkKKytPUFRJT05fUE9TSVhfUkVHRVhQID0geQorK09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMgPSB5CisrT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8gPSB5CitkaWZmIC0tZ2l0IGEvb3B0aW9uLWdyb3Vwcy5tYWsgYi9vcHRpb24tZ3JvdXBzLm1haworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmY4M2UwYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbi1ncm91cHMubWFrCitAQCAtMCwwICsxLDQxIEBACisrIyBTZXR1cCBmaWxlIGZvciBzdWJkaXJlY3RvcnkgTWFrZWZpbGVzIHRoYXQgZGVmaW5lIEVHTElCQyBvcHRpb24gZ3JvdXBzLgorKworKyMgRUdMSUJDIHNob3VsZG4ndCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMuICBIb3dldmVyLCB0aGUKKysjIGNyb3NzLWJ1aWxkLWZyaWVuZGx5IGxvY2FsZWRlZiBpbmNsdWRlcyB0aGlzIG1ha2VmaWxlIHRvIGdldCBvcHRpb24KKysjIGdyb3VwIHZhcmlhYmxlIGRlZmluaXRpb25zOyBpdCB1c2VzIGEgc2luZ2xlIGJ1aWxkIHRyZWUgZm9yIGFsbCB0aGUKKysjIG11bHRpbGlicywgYW5kIG5lZWRzIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBvcHRpb24gZ3JvdXAKKysjIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZWFjaCBtdWx0aWxpYi4KKytvcHRpb25fZ3JvdXBfY29uZmlnX2ZpbGUgPz0gJChvYmpkaXIpL29wdGlvbi1ncm91cHMuY29uZmlnCisrCisrIyBSZWFkIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgb3B0aW9ucy4KKysjIFdlJ3JlIGluY2x1ZGVkIGJlZm9yZSAuLi9SdWxlcywgc28gd2UgY2FuJ3QgYXNzdW1lICQoLi4pIGlzIHNldC4KKytpbmNsdWRlICQoZmlyc3R3b3JkICQoLi4pIC4uLylvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCisrCisrIyBSZWFkIHRoZSBkZXZlbG9wZXIncyBvcHRpb24gZ3JvdXAgc2VsZWN0aW9ucywgb3ZlcnJpZGluZyB0aGUKKysjIGRlZmF1bHRzIGZyb20gb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cy4KKystaW5jbHVkZSAkKG9wdGlvbl9ncm91cF9jb25maWdfZmlsZSkKKysKKysjICQoY2FsbCBvcHRpb24tZGlzYWJsZWQsIFZBUikgaXMgJ3knIGlmIFZBUiBpcyBub3QgJ3knLCBvciAnbicgb3RoZXJ3aXNlLgorKyMgVkFSIHNob3VsZCBiZSBhIHZhcmlhYmxlIG5hbWUsIG5vdCBhIHZhcmlhYmxlIHJlZmVyZW5jZTsgdGhpcyBpcworKyMgbGVzcyBnZW5lcmFsLCBidXQgbW9yZSB0ZXJzZSBmb3IgdGhlIGludGVuZGVkIHVzZS4KKysjIFlvdSBjYW4gdXNlIGl0IHRvIGFkZCBhIGZpbGUgdG8gYSBsaXN0IGlmIGFuIG9wdGlvbiBncm91cCBpcworKyMgZGlzYWJsZWQsIGxpa2UgdGhpczoKKysjICAgcm91dGluZXMtJChjYWxsIG9wdGlvbi1kaXNhYmxlZCwgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICs9IC4uLgorK2RlZmluZSBvcHRpb24tZGlzYWJsZWQKKyskKGZpcnN0d29yZCAkKHN1YnN0IHksbiwkKGZpbHRlciB5LCQoJChzdHJpcCAkKDEpKSkpKSB5KQorK2VuZGVmCisrCisrIyBFc3RhYmxpc2ggJ3JvdXRpbmVzLXknLCBldGMuIGFzIHNpbXBseS1leHBhbmRlZCB2YXJpYWJsZXMuCisrYXV4LXkJICAgICAgIAkgICAgOj0KKytleHRyYS1saWJzLW90aGVycy15IDo9CisrZXh0cmEtbGlicy15ICAgCSAgICA6PQorK2V4dHJhLW9ianMteSAgIAkgICAgOj0KKytpbnN0YWxsLWJpbi15ICAJICAgIDo9CisraW5zdGFsbC1vdGhlcnMteSAgICA6PQorK2luc3RhbGwtc2Jpbi15IAkgICAgOj0KKytvdGhlcnMteSAgICAgICAJICAgIDo9Cisrb3RoZXJzLXBpZS15ICAgCSAgICA6PQorK3JvdXRpbmVzLXkgICAgIAkgICAgOj0KKyt0ZXN0LXNyY3MteSAgICAJICAgIDo9CisrdGVzdHMteSAgICAgICAgCSAgICA6PQorK3h0ZXN0cy15ICAgICAgIAkgICAgOj0KK2RpZmYgLS1naXQgYS9vcHRpb25zLWNvbmZpZy9NYWtlZmlsZSBiL29wdGlvbnMtY29uZmlnL01ha2VmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGIwMDcwOAorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKK0BAIC0wLDAgKzEsNTUgQEAKKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyMgRUdMSUJDIG9wdGlvbi1ncm91cHMgY29uZmlndXJhdGlvbiB0YXJnZXRzCisrIyBUaGVzZSB0YXJnZXRzIGFyZSBpbmNsdWRlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQorKworK2lmbmVxICgkKGtjb25maWdfdG9vbHMpLCkKKytpZm5lcSAobm8sJChQRVJMKSkKKysKKytvY2RpciA6PSBvcHRpb25zLWNvbmZpZworKworK09jb25maWdEZWZhdWx0cyAgICAgOj0gb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworK09jb25maWdEZWZhdWx0c190bXAgOj0gJChjb21tb24tb2JqcGZ4KS50bXAuZGVmY29uZmlnCisrT2NvbmZpZ0RlZiAgICAgICAgICA6PSBvcHRpb24tZ3JvdXBzLmRlZgorK09jb25maWcgICAgICAgICAgICAgOj0gJChjb21tb24tb2JqcGZ4KW9wdGlvbi1ncm91cHMuY29uZmlnCisrT2NvbmZpZ190bXAgICAgICAgICA6PSAkKGNvbW1vbi1vYmpwZngpLnRtcC5jb25maWcKKysKKytjb25mICA6PSAkKGtjb25maWdfdG9vbHMpL2NvbmYKKyttY29uZiA6PSAkKGtjb25maWdfdG9vbHMpL21jb25mCisrCisrcHJlcHJvYyAgOj0gJChQRVJMKSAkKG9jZGlyKS9jb25maWctcHJlcHJvYy5wbAorK3Bvc3Rwcm9jIDo9ICQoUEVSTCkgJChvY2RpcikvY29uZmlnLXBvc3Rwcm9jLnBsCisrCisrUEhPTlkgKz0gZGVmY29uZmlnIGNvbmZpZyBtZW51Y29uZmlnCisrCisrZGVmY29uZmlnOiAkKGNvbmYpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdEZWYpCisrCXJtIC1mICQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkKKysJcm0gLWYgJChPY29uZmlnX3RtcCkKKysJJChwcmVwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgPiAkKE9jb25maWdEZWZhdWx0c190bXApCisrCUtDT05GSUdfQ09ORklHPSQoT2NvbmZpZ190bXApICQ8IC0tZGVmY29uZmlnPSQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkgXAorKwkJCQkkKE9jb25maWdEZWYpCisrCSQocG9zdHByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdfdG1wKSA+ICQoT2NvbmZpZykKKysJcm0gJChPY29uZmlnX3RtcCkKKysJcm0gJChPY29uZmlnRGVmYXVsdHNfdG1wKQorKworK2NvbmZpZzogJChjb25mKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnRGVmKQorKwlybSAtZiAkKE9jb25maWdfdG1wKQorKwkkKHByZXByb2MpICQod2lsZGNhcmQgJChPY29uZmlnKSkgPiAkKE9jb25maWdfdG1wKQorKwlLQ09ORklHX0NPTkZJRz0kKE9jb25maWdfdG1wKSAkPCAtLW9sZGFza2NvbmZpZyAkKE9jb25maWdEZWYpCisrCSQocG9zdHByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdfdG1wKSA+ICQoT2NvbmZpZykKKysJcm0gJChPY29uZmlnX3RtcCkKKysKKyttZW51Y29uZmlnOiAkKG1jb25mKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnRGVmKQorKwlybSAtZiAkKE9jb25maWdfdG1wKQorKwkkKHByZXByb2MpICQod2lsZGNhcmQgJChPY29uZmlnKSkgPiAkKE9jb25maWdfdG1wKQorKwlLQ09ORklHX0NPTkZJRz0kKE9jb25maWdfdG1wKSAkPCAkKE9jb25maWdEZWYpCisrCSQocG9zdHByb2MpICQoT2NvbmZpZ0RlZmF1bHRzKSAkKE9jb25maWdfdG1wKSA+ICQoT2NvbmZpZykKKysJcm0gJChPY29uZmlnX3RtcCkKKysKKysjIEhlbHAgdGV4dCB1c2VkIGJ5IG1ha2UgaGVscAorK2hlbHA6CisrCUBlY2hvICAnICBkZWZjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGZyb20gZGVmYXVsdCBjb25maWcnCisrCUBlY2hvICAnICBjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW0nCisrCUBlY2hvICAnICBtZW51Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbWVudSBiYXNlZCBwcm9ncmFtJworKworK2VuZGlmCisrZW5kaWYKK2RpZmYgLS1naXQgYS9vcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40ZGQxYzYzCistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwKK0BAIC0wLDAgKzEsNTggQEAKKysjIS91c3IvYmluL3BlcmwKKysKKyskdXNhZ2UgPSAidXNhZ2U6ICQwIDxkZWZhdWx0IGNvbmZpZyBmaWxlPiA8Y29uZmlnIGZpbGU+XG4iOworKworK2RpZSAiJHVzYWdlIiB1bmxlc3MgQEFSR1Y7CisrJGRlZmF1bHRzID0gc2hpZnQgQEFSR1Y7CisrZGllICIkdXNhZ2UiIHVubGVzcyBAQVJHVjsKKytkaWUgIkNvdWxkIG5vdCBvcGVuICRBUkdWWzBdIiB1bmxlc3MgLVQgJEFSR1ZbMF07CisrCisrc3ViIHlhbmsgeworKyAgICBAb3B0aW9uID0gZ3JlcCghKCRfID1+IC8kX1swXVxzKj0vKSwgQG9wdGlvbik7CisrfQorKworK29wZW4oREVGQVVMVFMsICRkZWZhdWx0cykgfHwgZGllICJDb3VsZCBub3Qgb3BlbiAkZGVmYXVsdHNcbiI7CisrCisrIyBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWcgZmlsZQorKyRpID0gMDsKKyt3aGlsZSAoPERFRkFVTFRTPikgeworKyAgICBpZiAoL15ccypPUFRJT05fKFx3K1xzKj0uKiQpLykgeworKwkkb3B0aW9uWyRpKytdID0gJDE7CisrICAgIH0KKyt9CisrCisrIyBub3cgZ28gdGhyb3VnaCB0aGUgY29uZmlnIGZpbGUsIG1ha2luZyB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMKKyt3aGlsZSAoPD4pIHsKKysgICAgaWYgKC9MaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbi8pIHsKKysJIyBjaGFuZ2UgdGl0bGUKKysJcy9MaW51eCBLZXJuZWwvT3B0aW9uIEdyb3Vwcy87CisrCXByaW50OworKyAgICB9IGVsc2lmICgvXlxzKkNPTkZJR18oXHcrKVxzKj0vKSB7CisrCSMgdGhpcyBpcyBhbiBleHBsaWNpdCBvcHRpb24gc2V0IGxpbmUsIGNoYW5nZSBDT05GSUdfIHRvIE9QVElPTl8KKysJIyBiZWZvcmUgcHJpbnRpbmcgYW5kIHJlbW92ZSB0aGlzIG9wdGlvbiBmcm9tIG9wdGlvbiBsaXN0CisrCSRvcHQgPSAkMTsKKysJeWFuaygkb3B0KTsKKysJcy9DT05GSUdfL09QVElPTl8vZzsKKysJcHJpbnQ7CisrICAgIH0gZWxzaWYgKC9eXHMqI1xzK0NPTkZJR18oXHcrKSBpcyBub3Qgc2V0LykgeworKwkjIHRoaXMgaXMgYSBjb21tZW50IGxpbmUgZm9yIGFuIHVuc2V0IGJvb2xlYW4gb3B0aW9uLCBjaGFuZ2UgQ09ORklHXworKwkjIHRvIE9QVElPTl8sIHJlbW92ZSB0aGlzIG9wdGlvbiBmcm9tIG9wdGlvbiBsaXN0LCBhbmQgY29udmVydCB0bworKwkjIGV4cGxpY2l0IE9QVElPTl9GT089bgorKwkkb3B0ID0gJDE7CisrCXlhbmsoJG9wdCk7CisrCXMvQ09ORklHXy9PUFRJT05fL2c7CisrCXByaW50ICJPUFRJT05fJG9wdD1uXG4iOworKyAgICB9IGVsc2UgeworKwlwcmludDsKKysgICAgfQorK30KKysKKysjIGFueSBib29sZWFuIG9wdGlvbnMgbGVmdCBpbiBAb3B0aW9ucywgYXJlIG9wdGlvbnMgdGhhdCB3ZXJlIG5vdCBtZW50aW9uZWQgaW4KKysjIHRoZSBjb25maWcgZmlsZSwgYW5kIGltcGxpY2l0bHkgdGhhdCBtZWFucyB0aGUgb3B0aW9uIG11c3QgYmUgc2V0ID1uLAorKyMgc28gZG8gdGhhdCBoZXJlLgorK2ZvcmVhY2ggJG9wdCAoQG9wdGlvbikgeworKyAgICBpZiAoJG9wdCA9fiAvPVxzKlt5bl0vKSB7CisrCSRvcHQgPX4gcy89XHMqW3luXS89bi87CisrCXByaW50ICJPUFRJT05fJG9wdFxuIjsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9vcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbCBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjgzYmI4NQorLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwKK0BAIC0wLDAgKzEsOCBAQAorKyMhL3Vzci9iaW4vcGVybAorKworK2lmIChAQVJHVikgeworKyAgICB3aGlsZSAoPD4pIHsKKysJcy9PUFRJT05fL0NPTkZJR18vZzsKKysJcHJpbnQ7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3ayBiL3NjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MzNhZjBjCistLS0gL2Rldi9udWxsCisrKysgYi9zY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCitAQCAtMCwwICsxLDYzIEBACisrIyBvcHRpb24tZ3JvdXBzLmF3ayAtLS0gZ2VuZXJhdGUgb3B0aW9uIGdyb3VwIGhlYWRlciBmaWxlCisrIyBHaXZlbiBpbnB1dCBmaWxlcyBjb250YWluaW5nIG1ha2VmaWxlLXN0eWxlIGFzc2lnbm1lbnRzIHRvIHZhcmlhYmxlcywKKysjIHByaW50IG91dCBhIGhlYWRlciBmaWxlIHRoYXQgI2RlZmluZXMgYW4gYXBwcm9wcmlhdGUgcHJlcHJvY2Vzc29yCisrIyBzeW1ib2wgZm9yIGVhY2ggdmFyaWFibGUgbGVmdCBzZXQgdG8gJ3knLgorKworK0JFR0lOIHsgRlM9Ij0iIH0KKysKKysjIFRyaW0gc3BhY2VzLgorK3sgZ3N1YiAoL1tbOmJsYW5rOl1dLywgIiIpIH0KKysKKysjIFNraXAgY29tbWVudHMuCisrL14jLyB7IG5leHQgfQorKworKyMgUHJvY2VzcyBhc3NpZ25tZW50cy4KKytORiA9PSAyIHsKKysgICAgdmFyc1skMV0gPSAkMgorK30KKysKKysjIFByaW50IGZpbmFsIHZhbHVlcy4KKytFTkQgeworKyAgICBwcmludCAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2siCisrICAgIHByaW50ICIgICBpbiB0aGUgRUdMSUJDIHNvdXJjZSB0cmVlLiIKKysgICAgcHJpbnQgIiIKKysgICAgcHJpbnQgIiAgIEl0IGRlZmluZXMgbWFjcm9zIHRoYXQgaW5kaWNhdGUgd2hpY2ggRUdMSUJDIG9wdGlvbiBncm91cHMgd2VyZSIKKysgICAgcHJpbnQgIiAgIGNvbmZpZ3VyZWQgaW4gJ29wdGlvbi1ncm91cHMuY29uZmlnJyB3aGVuIHRoaXMgQyBsaWJyYXJ5IHdhcyIKKysgICAgcHJpbnQgIiAgIGJ1aWx0LiAgRm9yIGVhY2ggb3B0aW9uIGdyb3VwIG5hbWVkIE9QVElPTl9mb28sIGl0ICNkZWZpbmVzIgorKyAgICBwcmludCAiICAgX19PUFRJT05fZm9vIHRvIGJlIDEgaWYgdGhlIGdyb3VwIGlzIGVuYWJsZWQsIG9yICNkZWZpbmVzIHRoYXQiCisrICAgIHByaW50ICIgICBzeW1ib2wgdG8gYmUgMCBpZiB0aGUgZ3JvdXAgaXMgZGlzYWJsZWQuICAqLyIKKysgICAgcHJpbnQgIiIKKysgICAgcHJpbnQgIiNpZm5kZWYgX19HTlVfT1BUSU9OX0dST1VQU19IIgorKyAgICBwcmludCAiI2RlZmluZSBfX0dOVV9PUFRJT05fR1JPVVBTX0giCisrICAgIHByaW50ICIiCisrCisrICAgICMgUHJvZHVjZSBhIHNvcnRlZCBsaXN0IG9mIHZhcmlhYmxlIG5hbWVzLgorKyAgICBpPTAKKysgICAgZm9yICh2YXIgaW4gdmFycykKKysgICAgICAgIG5hbWVzW2krK10gPSB2YXIKKysgICAgbiA9IGFzb3J0IChuYW1lcykKKysKKysgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspCisrICAgIHsKKysgICAgICAgIHZhciA9IG5hbWVzW2ldCisrICAgICAgICBpZiAodmFyIH4gL15PUFRJT05fLykKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAodmFyc1t2YXJdID09ICJ5IikKKysgICAgICAgICAgICAgICAgcHJpbnQgIiNkZWZpbmUgX18iIHZhciAiIDEiCisrICAgICAgICAgICAgZWxzZSBpZiAodmFyc1t2YXJdID09ICJuIikKKysgICAgICAgICAgICAgICAgcHJpbnQgIiNkZWZpbmUgX18iIHZhciAiIDAiCisrCSAgICBlbHNlIGlmICh2YXJzW3Zhcl0gfiAvXlswLTldKy8gfHwKKysJCSAgICAgdmFyc1t2YXJdIH4gL14weFswLTlhQWJCY0NkRGVFZkZdKy8gfHwKKysJCSAgICAgdmFyc1t2YXJdIH4gL15cIi8pCisrCQkgcHJpbnQgIiNkZWZpbmUgX18iIHZhciAiICIgdmFyc1t2YXJdCisrCSAgICBlbHNlCisrCQlwcmludCAiLyogI3VuZGVmIF9fIiB2YXIgIiAqLyIKKysgICAgICAgICAgICAjIElnbm9yZSB2YXJpYWJsZXMgdGhhdCBkb24ndCBoYXZlIGJvb2xlYW4sIGludCwgaGV4LCBvcgorKwkgICAgIyBzdHJpbmcgdmFsdWVzLiBJZGVhbGx5LCB0aGlzIHdvdWxkIGJlIGRyaXZlbiBieSB0aGUgdHlwZXMKKysJICAgICMgZ2l2ZW4gaW4gb3B0aW9uLWdyb3Vwcy5kZWYuCisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcHJpbnQgIiIKKysgICAgcHJpbnQgIiNlbmRpZiAvKiBfX0dOVV9PUFRJT05fR1JPVVBTX0ggKi8iCisrfQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5MzA5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjAtZWdsaWJjLUhlbHAtYm9vdHN0cmFwLWNyb3NzLXRvb2xjaGFpbi5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSA4ZmUwZDI5NDg4YjM3NjAxMWNkYWFhNDYyZDU1N2ZmYzBiMzFmYjYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NDk6MjggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8yN10gZWdsaWJjOiBIZWxwIGJvb3RzdHJhcCBjcm9zcyB0b29sY2hhaW4KKworVGFrZW4gZnJvbSBFR0xJQkMsIHIxNDg0ICsgcjE1MjUKKworICAgICAgICAyMDA3LTAyLTIwICBKaW0gQmxhbmR5ICA8amltYkBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICAgICAgICAgKiBNYWtlZmlsZSAoaW5zdGFsbC1oZWFkZXJzKTogUHJlc2VydmUgb2xkIGJlaGF2aW9yOiBkZXBlbmQgb24KKyAgICAgICAgICAgICAgICAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmggb25seSBpZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzCisgICAgICAgICAgICAgICAgaXMgc2V0OyBvdGhlcndpc2UsIHBsYWNlIGdudS9zdHVicy5oIG9uIHRoZSAnaW5zdGFsbC1vdGhlcnMnIGxpc3QuCisKKyAgICAgICAgMjAwNy0wMi0xNiAgSmltIEJsYW5keSAgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAgICAgICAgICogTWFrZWZpbGU6IEFtZW5kIG1ha2UgaW5zdGFsbC1oZWFkZXJzIHRvIGluc3RhbGwgZXZlcnl0aGluZworICAgICAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlci4gIEluc3RhbGwgZ251L3N0dWJzLmggYXMKKyAgICAgICAgICAgICAgICBwYXJ0IG9mICdpbnN0YWxsLWhlYWRlcnMnLCBub3QgJ2luc3RhbGwtb3RoZXJzJy4KKyAgICAgICAgICAgICAgICBJZiBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzIGlzICd5ZXMnLCBpbnN0YWxsIGEgZHVtbXkgY29weSBvZgorICAgICAgICAgICAgICAgIGdudS9zdHVicy5oLCBpbnN0ZWFkIG9mIGNvbXB1dGluZyB0aGUgcmVhbCB0aGluZy4KKyAgICAgICAgICAgICAgICAqIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmg6IE5ldyBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgMjIgKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggfCAxMiArKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZjkwNjM5MS4uZTRlMTQ5ZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTY5LDkgKzY5LDE4IEBAIHN1YmRpci1kaXJzID0gaW5jbHVkZQorIHZwYXRoICUuaCAkKHN1YmRpci1kaXJzKQorIAorICMgV2hhdCB0byBpbnN0YWxsLgorLWluc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisgaW5zdGFsbC1iaW4tc2NyaXB0ID0KKyAKKysjIElmIHdlJ3JlIGJvb3RzdHJhcHBpbmcsIGluc3RhbGwgYSBkdW1teSBnbnUvc3R1YnMuaCBhbG9uZyB3aXRoIHRoZQorKyMgb3RoZXIgaGVhZGVycywgc28gJ21ha2UgaW5zdGFsbC1oZWFkZXJzJyBwcm9kdWNlcyBhIHVzZWFibGUgaW5jbHVkZQorKyMgdHJlZS4gIE90aGVyd2lzZSwgaW5zdGFsbCBnbnUvc3R1YnMuaCBsYXRlciwgYWZ0ZXIgdGhlIHJlc3Qgb2YgdGhlCisrIyBidWlsZCBpcyBkb25lLgorK2lmZXEgKCQoaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycykseWVzKQorK2luc3RhbGwtaGVhZGVyczogJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisrZWxzZQorK2luc3RhbGwtb3RoZXJzID0gJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oCisrZW5kaWYKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIGhlYWRlcnMgKz0gZ251L2xpYi1uYW1lcy5oCisgZW5kaWYKK0BAIC0xNTEsNiArMTYwLDE2IEBAIG90aGVyczogJChjb21tb24tb2JqcGZ4KXRlc3RydW4uc2gKKyAKKyBzdWJkaXItc3R1YnMgOj0gJChmb3JlYWNoIGRpciwkKHN1YmRpcnMpLCQoY29tbW9uLW9ianBmeCkkKGRpcikvc3R1YnMpCisgCisrIyBnbnUvc3R1YnMuaCBkZXBlbmRzICh2aWEgdGhlIHN1YmRpciAnc3R1YnMnIHRhcmdldHMpIG9uIGFsbCB0aGUgLm8KKysjIGZpbGVzIGluIEVHTElCQy4gIEZvciBib290c3RyYXBwaW5nIGEgR0NDL0VHTElCQyBwYWlyLCBhbiBlbXB0eQorKyMgZ251L3N0dWJzLmggaXMgZ29vZCBlbm91Z2guCisraWZlcSAoJChpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzKSx5ZXMpCisrJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oICQoK2ZvcmNlKQorKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKysJJChJTlNUQUxMX0RBVEEpICQ8ICRACisrCisraW5zdGFsbGVkLXN0dWJzID0KKytlbHNlCisgaWZuZGVmIGFiaS12YXJpYW50cworIGluc3RhbGxlZC1zdHVicyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorIGVsc2UKK0BAIC0xNzcsNiArMTk2LDcgQEAgJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oOiAkKCtmb3JjZSkKKyAKKyBpbnN0YWxsLW90aGVycy1ub3N1YmRpcjogJChpbnN0YWxsZWQtc3R1YnMpCisgZW5kaWYKKytlbmRpZgorIAorIAorICMgU2luY2Ugc3R1YnMuaCBpcyBuZXZlciBuZWVkZWQgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeSwgd2Ugc2ltcGxpZnkgdGhlCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCBiL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZDJiNjY5CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCitAQCAtMCwwICsxLDEyIEBACisrLyogUGxhY2Vob2xkZXIgc3R1YnMuaCBmaWxlIGZvciBib290c3RyYXBwaW5nLgorKworKyAgIFdoZW4gYm9vdHN0cmFwcGluZyBhIEdDQy9FR0xJQkMgcGFpciwgR0NDIHJlcXVpcmVzIHRoYXQgdGhlIEVHTElCQworKyAgIGhlYWRlcnMgYmUgaW5zdGFsbGVkLCBidXQgd2UgY2FuJ3QgZnVsbHkgYnVpbGQgRUdMSUJDIHdpdGhvdXQgdGhhdAorKyAgIEdDQy4gIFNvIHdlIHJ1biB0aGUgY29tbWFuZDoKKysKKysgICAgICBtYWtlIGluc3RhbGwtaGVhZGVycyBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcworKworKyAgIHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgR0NDIG5lZWRzLCBidXQgYXZvaWQgYnVpbGRpbmcgY2VydGFpbgorKyAgIGRpZmZpY3VsdCBoZWFkZXJzLiAgVGhlIDxnbnUvc3R1YnMuaD4gaGVhZGVyIGRlcGVuZHMsIHZpYSB0aGUKKysgICBFR0xJQkMgc3ViZGlyICdzdHVicycgbWFrZSB0YXJnZXRzLCBvbiBldmVyeSAubyBmaWxlIGluIEVHTElCQywgYnV0CisrICAgYW4gZW1wdHkgc3R1YnMuaCBsaWtlIHRoaXMgd2lsbCBkbyBmaW5lIGZvciBHQ0MuICAqLworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiYjhhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGZlMmFlNGY4Nzc5MjhkZDZiZmY1YmFjM2YxNWJjZTRiNTBkMmJkMTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo1MToxNiArMDAwMAorU3ViamVjdDogW1BBVENIIDIxLzI3XSBlZ2xpYmM6IGNoZXJyeS1waWNrZWQgZnJvbQorIGh0dHA6Ly93d3cuZWdsaWJjLm9yZy9hcmNoaXZlcy9wYXRjaGVzL21zZzAwNzcyLmh0bWwKKworSXQgaGFzbid0IHlldCBiZWVuIG1lcmdlZCBpbnRvIGdsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgcmVzb2x2L3Jlc19saWJjLmMgfCAxNSArKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Jlc29sdi9yZXNfbGliYy5jIGIvcmVzb2x2L3Jlc19saWJjLmMKK2luZGV4IGVlM2ZhMjEuLjI5ZTIzNDAgMTAwNjQ0CistLS0gYS9yZXNvbHYvcmVzX2xpYmMuYworKysrIGIvcmVzb2x2L3Jlc19saWJjLmMKK0BAIC0yMiwxMiArMjIsMTMgQEAKKyAjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisgI2luY2x1ZGUgPHJlc29sdi5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorLQorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorIC8qIFRoZSBmb2xsb3dpbmcgYml0IGlzIGNvcGllZCBmcm9tIHJlc19kYXRhLmMgKHdoZXJlIGl0IGlzICNpZmRlZidlZAorICAgIG91dCkgc2luY2UgcmVzX2luaXQoKSBzaG91bGQgZ28gaW50byBsaWJjLnNvIGJ1dCB0aGUgcmVzdCBvZiB0aGF0CisgICAgZmlsZSBzaG91bGQgbm90LiAgKi8KKyAKKytfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CisgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19yZXNfaW5pdHN0YW1wIGF0dHJpYnV0ZV9oaWRkZW47CisgLyogV2UgaGF2ZSBhdG9taWMgaW5jcmVtZW50IG9wZXJhdGlvbnMgb24gNjQtYml0IHBsYXRmb3Jtcy4gICovCisgI2lmIF9fV09SRFNJWkUgPT0gNjQKK0BAIC0zNSw3ICszNiw2IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmVzX2luaXRzdGFtcCBhdHRyaWJ1dGVfaGlkZGVuOworICMgZGVmaW5lIGF0b21pY2luY3VubG9jayhsb2NrKSAodm9pZCkgMAorICMgZGVmaW5lIGF0b21pY2luYyh2YXIpIGNhdG9taWNfaW5jcmVtZW50ICgmKHZhcikpCisgI2Vsc2UKKy1fX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jayk7CisgIyBkZWZpbmUgYXRvbWljaW5jbG9jayhsb2NrKSBfX2xpYmNfbG9ja19sb2NrIChsb2NrKQorICMgZGVmaW5lIGF0b21pY2luY3VubG9jayhsb2NrKSBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spCisgIyBkZWZpbmUgYXRvbWljaW5jKHZhcikgKyt2YXIKK0BAIC05NCw3ICs5NCwxOCBAQCByZXNfaW5pdCh2b2lkKSB7CisgaW50CisgX19yZXNfbWF5YmVfaW5pdCAocmVzX3N0YXRlIHJlc3AsIGludCBwcmVpbml0KQorIHsKKysJc3RhdGljIHRpbWVfdCBsYXN0X210aW1lOworKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworKwlpbnQgcmV0OworKworIAlpZiAocmVzcC0+b3B0aW9ucyAmIFJFU19JTklUKSB7CisrCQlyZXQgPSBzdGF0IChfUEFUSF9SRVNDT05GLCAmc3RhdGJ1Zik7CisrCQlfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysJCWlmICgocmV0ID09IDApICYmIChsYXN0X210aW1lICE9IHN0YXRidWYuc3RfbXRpbWUpKSB7CisrCQkJbGFzdF9tdGltZSA9IHN0YXRidWYuc3RfbXRpbWU7CisrCQkJYXRvbWljaW5jIChfX3Jlc19pbml0c3RhbXApOworKwkJfQorKwkJX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKyAJCWlmIChfX3Jlc19pbml0c3RhbXAgIT0gcmVzcC0+X3UuX2V4dC5pbml0c3RhbXApIHsKKyAJCQlpZiAocmVzcC0+bnNjb3VudCA+IDApCisgCQkJCV9fcmVzX2ljbG9zZSAocmVzcCwgdHJ1ZSk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTRjOWMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMi1lZ2xpYmMtQ2xlYXItY2FjaGUtbGluZXMtb24tcHBjOHh4LnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Zyb20gYmU3MjczMjI1Njk4MDc0MzQ3YTcxZGU1ODAwNjk3N2JiMzA0ZDdmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjUzOjQ3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMjddIGVnbGliYzogQ2xlYXIgY2FjaGUgbGluZXMgb24gcHBjOHh4CisKKzIwMDctMDYtMTMgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGNvZGVzb3VyY2VyeS5jb20+CisgICAgICAgICAgICBNYXJrIFNoaW53ZWxsICA8c2hpbndlbGxAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCisgICAgICAgIChfX2xpYmNfc3RhcnRfbWFpbik6IERldGVjdCA4eHggcGFydHMgYW5kIGNsZWFyCisgICAgICAgIF9fY2FjaGVfbGluZV9zaXplIGlmIGRldGVjdGVkLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKKyAgICAgICAgKERMX1BMQVRGT1JNX0FVWFYpOiBMaWtld2lzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYyAgfCAxNCArKysrKysrKysrKysrLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jIHwgMTUgKysrKysrKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMKK2luZGV4IGMyNTA0ZmYuLmQ1MGYxY2IgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCitAQCAtMjQsOSArMjQsMjEgQEAgaW50IF9fY2FjaGVfbGluZV9zaXplIGF0dHJpYnV0ZV9oaWRkZW47CisgLyogU2NhbiB0aGUgQXV4IFZlY3RvciBmb3IgdGhlICJEYXRhIENhY2hlIEJsb2NrIFNpemUiIGVudHJ5LiAgSWYgZm91bmQKKyAgICB2ZXJpZnkgdGhhdCB0aGUgc3RhdGljIGV4dGVybiBfX2NhY2hlX2xpbmVfc2l6ZSBpcyBkZWZpbmVkIGJ5IGNoZWNraW5nCisgICAgZm9yIG5vdCBOVUxMLiAgSWYgaXQgaXMgZGVmaW5lZCB0aGVuIGFzc2lnbiB0aGUgY2FjaGUgYmxvY2sgc2l6ZQorLSAgIHZhbHVlIHRvIF9fY2FjaGVfbGluZV9zaXplLiAgKi8KKysgICB2YWx1ZSB0byBfX2NhY2hlX2xpbmVfc2l6ZS4gIFRoaXMgaXMgdXNlZCBieSBtZW1zZXQgdG8KKysgICBvcHRpbWl6ZSBzZXR0aW5nIHRvIHplcm8uICBXZSBoYXZlIHRvIGRldGVjdCA4eHggcHJvY2Vzc29ycywgd2hpY2gKKysgICBoYXZlIGJ1Z2d5IGRjYnogaW1wbGVtZW50YXRpb25zIHRoYXQgY2Fubm90IHJlcG9ydCBwYWdlIGZhdWx0cworKyAgIGNvcnJlY3RseS4gIFRoYXQgcmVxdWlyZXMgcmVhZGluZyBTUFIsIHdoaWNoIGlzIGEgcHJpdmlsZWdlZAorKyAgIG9wZXJhdGlvbi4gIEZvcnR1bmF0ZWx5IDIuMi4xOCBhbmQgbGF0ZXIgZW11bGF0ZXMgUG93ZXJQQyBtZnNwcgorKyAgIHJlYWRzIGZyb20gdGhlIFBWUiByZWdpc3Rlci4gICAqLworICNkZWZpbmUgRExfUExBVEZPUk1fQVVYVgkJCQkJCSAgICAgIFwKKyAgICAgICBjYXNlIEFUX0RDQUNIRUJTSVpFOgkJCQkJCSAgICAgIFwKKysJaWYgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjAyMTgpCQkJCSAgICAgIFwKKysJICB7CQkJCQkJCQkgICAgICBcCisrCSAgICB1bnNpZ25lZCBwdnIgPSAwOwkJCQkJCSAgICAgIFwKKysJICAgIGFzbSAoIm1mc3ByICUwLCAyODciIDogIj1yIiAocHZyKSk7CQkJCSAgICAgIFwKKysJICAgIGlmICgocHZyICYgMHhmZmZmMDAwMCkgPT0gMHgwMDUwMDAwMCkJCQkgICAgICBcCisrCSAgICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCisrCSAgfQkJCQkJCQkJICAgICAgXAorIAlfX2NhY2hlX2xpbmVfc2l6ZSA9IGF2LT5hX3VuLmFfdmFsOwkJCQkgICAgICBcCisgCWJyZWFrOworIAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKK2luZGV4IGE5MzY0YzcuLmEzZWQxZDQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKK0BAIC02OCwxMSArNjgsMjQgQEAgX19saWJjX3N0YXJ0X21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndiwKKyAgICAgICBydGxkX2ZpbmkgPSBOVUxMOworICAgICB9CisgCistICAvKiBJbml0aWFsaXplIHRoZSBfX2NhY2hlX2xpbmVfc2l6ZSB2YXJpYWJsZSBmcm9tIHRoZSBhdXggdmVjdG9yLiAgKi8KKysgIC8qIEluaXRpYWxpemUgdGhlIF9fY2FjaGVfbGluZV9zaXplIHZhcmlhYmxlIGZyb20gdGhlIGF1eCB2ZWN0b3IuCisrICAgICBUaGlzIGlzIHVzZWQgYnkgbWVtc2V0IHRvIG9wdGltaXplIHNldHRpbmcgdG8gemVyby4gIFdlIGhhdmUgdG8KKysgICAgIGRldGVjdCA4eHggcHJvY2Vzc29ycywgd2hpY2ggaGF2ZSBidWdneSBkY2J6IGltcGxlbWVudGF0aW9ucyB0aGF0CisrICAgICBjYW5ub3QgcmVwb3J0IHBhZ2UgZmF1bHRzIGNvcnJlY3RseS4gIFRoYXQgcmVxdWlyZXMgcmVhZGluZyBTUFIsCisrICAgICB3aGljaCBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLiAgRm9ydHVuYXRlbHkgMi4yLjE4IGFuZCBsYXRlcgorKyAgICAgZW11bGF0ZXMgUG93ZXJQQyBtZnNwciByZWFkcyBmcm9tIHRoZSBQVlIgcmVnaXN0ZXIuICAqLworICAgZm9yIChFbGZXIChhdXh2X3QpICogYXYgPSBhdXh2ZWM7IGF2LT5hX3R5cGUgIT0gQVRfTlVMTDsgKythdikKKyAgICAgc3dpdGNoIChhdi0+YV90eXBlKQorICAgICAgIHsKKyAgICAgICBjYXNlIEFUX0RDQUNIRUJTSVpFOgorKwlpZiAoX19MSU5VWF9LRVJORUxfVkVSU0lPTiA+PSAweDAyMDIxOCkKKysJICB7CisrCSAgICB1bnNpZ25lZCBwdnIgPSAwOworKworKwkgICAgYXNtICgibWZzcHIgJTAsIDI4NyIgOiAiPXIiIChwdnIpIDopOworKwkgICAgaWYgKChwdnIgJiAweGZmZmYwMDAwKSA9PSAweDAwNTAwMDAwKQorKwkgICAgICBicmVhazsKKysJICB9CisgCV9fY2FjaGVfbGluZV9zaXplID0gYXYtPmFfdW4uYV92YWw7CisgCWJyZWFrOworICAgICAgIH0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjNkNzUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA3MThlN2U1ZGIxYzhiMDczYWRiOWE3OWVjNmYxNjcyMzhjMmQ4YmRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTU6NTMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8yN10gZWdsaWJjOiBSZXNvbHZlIF9fZnBzY3JfdmFsdWVzIG9uIFNINAorCisyMDEwLTA5LTI5ICBOb2J1aGlybyBJd2FtYXRzdSAgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICAgICAgICAgICAgQW5kcmV3IFN0dWJicyAgPGFtc0Bjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgIFJlc29sdmUgU0gncyBfX2Zwc2NyX3ZhbHVlcyB0byBzeW1ib2wgaW4gbGliYy5zby4KKworICAgICAgICAqIHN5c2RlcHMvc2gvc2g0L2ZwdS9mcHVfY29udHJvbC5oOiBBZGQgQysrIF9fc2V0X2Zwc2NyIHByb3RvdHlwZS4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucyAoR0xJQkNfMi4yKTogQWRkIF9fZnBzY3JfdmFsdWVzLgorICAgICAgICAqIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIChfX19mcHNjcl92YWx1ZXMpOiBOZXcgY29uc3RhbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgfCAgMSArCisgc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgfCAxMSArKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworaW5kZXggZTA5MzhjNC4uY2ExZDdkYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworQEAgLTIsNiArMiw3IEBAIGxpYmMgeworICAgR0xJQkNfMi4yIHsKKyAgICAgIyBmdW5jdGlvbnMgdXNlZCBpbiBvdGhlciBsaWJyYXJpZXMKKyAgICAgX194c3RhdDY0OyBfX2Z4c3RhdDY0OyBfX2x4c3RhdDY0OworKyAgICBfX2Zwc2NyX3ZhbHVlczsKKyAKKyAgICAgIyBhKgorICAgICBhbHBoYXNvcnQ2NDsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCitpbmRleCBhMDJiN2UyLi5iOWJlMzI2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCitAQCAtMzAsMyArMzAsMTQgQEAgRU5UUlkgKF9fc3lzY2FsbF9lcnJvcikKKyAKKyAjZGVmaW5lIF9fc3lzY2FsbF9lcnJvciBfX3N5c2NhbGxfZXJyb3JfMQorICNpbmNsdWRlIDxzeXNkZXBzL3VuaXgvc2gvc3lzZGVwLlM+CisrCisrICAgICAgIC5kYXRhCisrICAgICAgIC5hbGlnbiAzCisrICAgICAgIC5nbG9ibCBfX19mcHNjcl92YWx1ZXMKKysgICAgICAgLnR5cGUgX19fZnBzY3JfdmFsdWVzLCBAb2JqZWN0CisrICAgICAgIC5zaXplIF9fX2Zwc2NyX3ZhbHVlcywgOAorK19fX2Zwc2NyX3ZhbHVlczoKKysgICAgICAgLmxvbmcgMAorKyAgICAgICAubG9uZyAweDgwMDAwCisrd2Vha19hbGlhcyAoX19fZnBzY3JfdmFsdWVzLCBfX2Zwc2NyX3ZhbHVlcykKKysKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTRlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNjg0MiBAQAorRnJvbSAyYTVkN2JjZjBmZjc5MWM5NWVlMTM4ODc3MjQwOGExYmY0NDU0Njk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6MzM6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8yN10gZWdsaWJjOiBGb3J3YXJkIHBvcnQgZWdsaWJjIG9wdGlvbnMgZ3JvdXBzIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCisgTWFrZXJ1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOSArCisgYXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgYXJncC9hcmdwLWZtdHN0cmVhbS5jICAgICAgICAgICAgICAgICAgIHwgICAyNSArLQorIGFyZ3AvYXJncC1oZWxwLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKy0KKyBhcmdwL2FyZ3AtbmFtZWZyb2IuaCAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBjYXRnZXRzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCisgY3J5cHQvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArLQorIGNyeXB0L2NyeXB0LWVudHJ5LmMgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIGNyeXB0L2NyeXB0X2NvbW1vbi5jICAgICAgICAgICAgICAgICAgICB8ICAgNDIgKworIGNyeXB0L2NyeXB0X3V0aWwuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggLQorIGNzdS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGRlYnVnL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKy0KKyBkZWJ1Zy9zZWdmYXVsdC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCisgZGVidWcvdHN0LWNoazEuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCisgZGxmY24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQorIGVsZi9kbC1zdXBwb3J0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIGVsZi9ydGxkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KKyBleHRyYS1saWIubWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgZ3JwL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgaGVzaW9kL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIGljb252L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIGljb252L2djb252X2RiLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIGljb252L2djb252X3RyYW5zLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIGljb252L2ljb252X3Byb2cuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKworIGljb252ZGF0YS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcgKy0KKyBpbmNsdWRlL25ldGRiLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKKyBpbmV0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICstCisgaW50bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQorIGludGwvZGNpZ2V0dGV4dC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKy0KKyBpby9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgbGliaWRuL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQorIGxpYmlkbi90b3V0ZjguYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKy0KKyBsaWJpby9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY2ICstCisgbGliaW8vX19mcHVyZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmlvL2ZpbGVvcHMuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KKyBsaWJpby9pb2Z3aWRlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI2ICsKKyBsaWJpby9pb3NlZWtvZmYuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbGliaW8vaW9zZWVrcG9zLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmlvL2lvc2V0YnVmZmVyLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKworIGxpYmlvL2xpYmlvUC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyBsaWJpby93ZHVtbXlmaWxlb3BzLmMgICAgICAgICAgICAgICAgICAgfCAgMTYxICsKKyBsb2NhbGUvQy1jdHlwZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICsKKyBsb2NhbGUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQxICstCisgbG9jYWxlL2NhdG5hbWVzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArCisgbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jICAgICAgICAgICAgICAgIHwgICAzMyArCisgbG9jYWxlL2xvY2FsZWluZm8uaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jICAgICAgICAgICB8ICAgIDYgKworIGxvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMgICAgICAgICAgICB8ICAgMTcgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYyAgICAgICAgICAgICAgfCAgIDI3ICstCisgbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMgICAgICAgICAgIHwgICAgNSArCisgbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYyAgICAgICAgICAgICAgIHwgICAzMSArLQorIGxvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMgICAgICAgICAgICB8ICAgIDIgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMgICAgICAgICAgICAgfCAgICA4ICsKKyBsb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jICAgICAgICAgICAgICAgfCAgICA1ICstCisgbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaCAgICAgICAgICAgICAgIHwgICA1OSArLQorIGxvY2FsZS9zZXRsb2NhbGUuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMzAgLQorIGxvY2FsZS94bG9jYWxlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKworIGxvY2FsZWRhdGEvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKy0KKyBsb2dpbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCisgbWFsbG9jL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQorIG1hbGxvYy9tZW11c2FnZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KKyBtYWxsb2MvbWVtdXNhZ2Uuc2ggICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbWF0aC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIG1pc2MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKy0KKyBtaXNjL2Vyci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKKyBtaXNjL2Vycm9yLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBtaXNjL3RzdC1lZmdjdnQuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgbmlzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQorIG5wdGwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKy0KKyBucHRsL3B0aHJlYWRfY3JlYXRlLmMgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBuc2NkL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICstCisgbnNjZC9uaXNfaGFzaC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgbnNzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NyArLQorIG5zcy9maXhlZC1uc3N3aXRjaC5jb25mICAgICAgICAgICAgICAgICB8ICAgMjIgKworIG5zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMgICAgICAgICAgICB8ICAxMjEgKworIG5zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYyAgICAgICAgICAgICAgICB8ICA4MDMgKysrCisgbnNzL2dldGVudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NiArLQorIG5zcy9nZXRuc3NlbnRfci5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KKyBuc3MvbnNzd2l0Y2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA5ICstCisgbnNzL25zc3dpdGNoLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIHBvc2l4L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTQgKy0KKyBwb3NpeC9idWctcmVnZXgxLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBwb3NpeC9idWctcmVnZXg2LmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCisgcG9zaXgvZm5tYXRjaC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIHBvc2l4L2ZubWF0Y2hfbG9vcC5jICAgICAgICAgICAgICAgICAgICB8ICAgMjMgKy0KKyBwb3NpeC9nbG9iLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICstCisgcG9zaXgvcmVnY29tcC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5OCArLQorIHBvc2l4L3JlZ2V4LmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKworIHBvc2l4L3JlZ2V4X2ludGVybmFsLmMgICAgICAgICAgICAgICAgICB8ICAgNDUgKy0KKyBwb3NpeC9yZWdleF9pbnRlcm5hbC5oICAgICAgICAgICAgICAgICAgfCAgIDIzICstCisgcG9zaXgvcmVnZXhlYy1jb21wYXQuYyAgICAgICAgICAgICAgICAgIHwgICAzOSArCisgcG9zaXgvcmVnZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3MSArLQorIHBvc2l4L3hyZWdleC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDgyMTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHB3ZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIHJlc29sdi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKy0KKyBzdGRpby1jb21tb24vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgIDM1ICstCisgc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oICAgICAgICAgICAgIHwgICAxMyArCisgc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jICAgICAgICAgICAgICAgIHwgICAyMiArCisgc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jICAgICAgICAgICAgIHwgICAxMyArCisgc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMgICAgICAgICAgICAgIHwgICAgOCArCisgc3RkaW8tY29tbW9uL3NjYW5mMTQuYyAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMgICAgICAgICAgICAgIHwgICAgNCArLQorIHN0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0ZGlvLWNvbW1vbi92ZnByaW50Zi5jICAgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBzdGRpby1jb21tb24vdmZzY2FuZi5jICAgICAgICAgICAgICAgICAgfCAgIDUzICstCisgc3RkbGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNCArLQorIHN0ZGxpYi9zdHJ0b2RfbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIHN0ZGxpYi90c3Qtc3RydG9kLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmVhbXMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBzdHJpbmcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCisgc3RyaW5nL3N0cmNvbGxfbC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyaW5nL3N0cmVycm9yX2wuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyaW5nL3N0cnhmcm1fbC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgc3RyaW5nL3Rlc3Qtc3RyY21wLmMgICAgICAgICAgICAgICAgICAgIHwgICAyOCAtCisgc3RyaW5nL3RzdC1zdHJ4ZnJtLmMgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3VucnBjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NCArLQorIHN5c2RlcHMvYXJtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBzeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaCAgICAgICAgICAgICAgfCAgICA4ICsKKyBzeXNkZXBzL2dudS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCisgc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlICAgICAgIHwgICAyNyArLQorIHN5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYyB8ICAgNDAgKy0KKyBzeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmggfCAgIDI0ICstCisgc3lzZGVwcy9ucHRsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmggICAgICAgICAgIHwgICA0NSArCisgc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oICAgICAgICAgIHwgICA1MCArLQorIHN5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMgICAgICAgICB8ICAgNzIgKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jICAgICB8ICAgIDYgKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYyAgICB8ICAgIDMgKworIHRpbWUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyB0aW1lL3N0cmZ0aW1lX2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICstCisgdGltZS9zdHJwdGltZV9sLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQorIHRpbWV6b25lL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyB3Y3NtYnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI3ICstCisgd2NzbWJzL3djc21ic2xvYWQuYyAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgd2N0eXBlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQorIDEzOSBmaWxlcyBjaGFuZ2VkLCAxMTM2MyBpbnNlcnRpb25zKCspLCA1ODMgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNyeXB0L2NyeXB0X2NvbW1vbi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmlvL3dkdW1teWZpbGVvcHMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsb2NhbGUvY2F0bmFtZXMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsb2NhbGUvZHVtbXktc2V0bG9jYWxlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNjZC9uaXNfaGFzaC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zcy9maXhlZC1uc3N3aXRjaC5jb25mCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHBvc2l4L3JlZ2V4ZWMtY29tcGF0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcG9zaXgveHJlZ2V4LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYworCitkaWZmIC0tZ2l0IGEvTWFrZWNvbmZpZyBiL01ha2Vjb25maWcKK2luZGV4IGYxMzZiODguLjUyZGFlOGYgMTAwNjQ0CistLS0gYS9NYWtlY29uZmlnCisrKysgYi9NYWtlY29uZmlnCitAQCAtNjA5LDcgKzYwOSw3IEBAIGVsZi1vYmpwZnggPSAkKGNvbW1vbi1vYmpwZngpZWxmLworICMgYW5kIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtLCBjYXVzZXMgdGhhdCBwcm9ncmFtIHdpdGggdGhvc2UKKyAjIGFyZ3VtZW50cyB0byBiZSBydW4gb24gdGhlIGhvc3QgZm9yIHdoaWNoIHRoZSBsaWJyYXJ5IGlzIGJ1aWx0LgorIGlmbmRlZiB0ZXN0LXdyYXBwZXIKKy10ZXN0LXdyYXBwZXIgPQorK3Rlc3Qtd3JhcHBlciA9ICQoY3Jvc3MtdGVzdC13cmFwcGVyKQorIGVuZGlmCisgIyBMaWtld2lzZSwgYnV0IHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIGlzIHByZWNlZGVkIGJ5CisgIyA8dmFyaWFibGU+PTx2YWx1ZT4gYXNzaWdubWVudHMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4KK0BAIC0xMDg5LDYgKzEwODksMjQgQEAgbGlibSA9ICQoY29tbW9uLW9ianBmeCltYXRoL2xpYm0uYQorIGxpYm12ZWMgPSAkKGNvbW1vbi1vYmpwZngpbWF0aHZlYy9saWJtdmVjLmEKKyBlbmRpZgorIAorKyMgR2VuZXJhdGUgYSBoZWFkZXIgZmlsZSB0aGF0ICNkZWZpbmVzIHByZXByb2Nlc3NvciBzeW1ib2xzIGluZGljYXRpbmcKKysjIHdoaWNoIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQuICBOb3RlIHRoYXQgdGhlIG9wdGlvbi1ncm91cHMuY29uZmlnIGZpbGUKKysjIG1heSBub3QgZXhpc3QgYXQgYWxsLgorK2JlZm9yZS1jb21waWxlICs9ICQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5oCisrY29tbW9uLWdlbmVyYXRlZCArPSBnbnUvb3B0aW9uLWdyb3Vwcy5oIGdudS9vcHRpb24tZ3JvdXBzLnN0bXAKKytoZWFkZXJzICs9IGdudS9vcHRpb24tZ3JvdXBzLmgKKyskKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuaDogJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLnN0bXA7IEA6CisrJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLnN0bXA6CQkJCQlcCisrCQkkKC4uKXNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sJCQkJXAorKwkJJCguLilvcHRpb24tZ3JvdXBzLmRlZmF1bHRzCQkJCVwKKysJCSQod2lsZGNhcmQgJChjb21tb24tb2JqcGZ4KW9wdGlvbi1ncm91cHMuY29uZmlnKQorKwkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKysJQHJtIC1mICR7QDpzdG1wPVR9ICRACisrCUxDX0FMTD1DICQoQVdLKSAtZiAkXiA+ICR7QDpzdG1wPVR9CisrCSQobW92ZS1pZi1jaGFuZ2UpICR7QDpzdG1wPVR9ICR7QDpzdG1wPWh9CisrCXRvdWNoICRACisrCisrCisgIyBUaGVzZSBhcmUgdGhlIHN1YmRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgdGhlIGxpYnJhcnkgc291cmNlLiAgVGhlIG9yZGVyCisgIyBpcyBtb3JlIG9yIGxlc3MgYXJiaXRyYXJ5LiAgVGhlIHNvcnRpbmcgc3RlcCB3aWxsIHRha2UgY2FyZSBvZiB0aGUKKyAjIGRlcGVuZGVuY2llcy4KK2RpZmYgLS1naXQgYS9NYWtlcnVsZXMgYi9NYWtlcnVsZXMKK2luZGV4IGY5Y2EzZjUuLjFkZDQxYWEgMTAwNjQ0CistLS0gYS9NYWtlcnVsZXMKKysrKyBiL01ha2VydWxlcworQEAgLTQ1Niw2ICs0NTYsMjUgQEAgZGVmaW5lIHNlZC1yZW1vdmUtb2JqcGZ4CisgZW5kZWYKKyBlbmRpZgorIAwKKysjIEluY2x1ZGUgdGFyZ2V0cyBpbiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGdyb3Vwcy4KKythdXggICAgICAgICAgICAgICAgICArPSAkKGF1eC15KQorK2V4dHJhLWxpYnMgICAgICAgICAgICs9ICQoZXh0cmEtbGlicy15KQorK2V4dHJhLWxpYnMtb3RoZXJzICAgICs9ICQoZXh0cmEtbGlicy1vdGhlcnMteSkKKytleHRyYS1vYmpzICAgICAgICAgICArPSAkKGV4dHJhLW9ianMteSkKKytpbnN0YWxsLWJpbiAgICAgICAgICArPSAkKGluc3RhbGwtYmluLXkpCisraW5zdGFsbC1vdGhlcnMgICAgICAgKz0gJChpbnN0YWxsLW90aGVycy15KQorK2luc3RhbGwtc2JpbiAgICAgICAgICs9ICQoaW5zdGFsbC1zYmluLXkpCisrbW9kdWxlcyAgICAgICAgICAgICAgKz0gJChtb2R1bGVzLXkpCisrb3RoZXJzICAgICAgICAgICAgICAgKz0gJChvdGhlcnMteSkKKytvdGhlcnMtcGllICAgICAgICAgICArPSAkKG90aGVycy1waWUteSkKKytyb3V0aW5lcyAgICAgICAgICAgICArPSAkKHJvdXRpbmVzLXkpCisrc3RhdGljLW9ubHktcm91dGluZXMgKz0gJChzdGF0aWMtb25seS1yb3V0aW5lcy15KQorK3N5c2RlcF9yb3V0aW5lcyAgICAgICs9ICQoc3lzZGVwX3JvdXRpbmVzLXkpCisrdGVzdC1zcmNzICAgICAgICAgICAgKz0gJCh0ZXN0LXNyY3MteSkKKyt0ZXN0cyAgICAgICAgICAgICAgICArPSAkKHRlc3RzLXkpCisreHRlc3RzICAgICAgICAgICAgICAgKz0gJCh4dGVzdHMteSkKKysKKysMCisgIyBNb2RpZnkgdGhlIGxpc3Qgb2Ygcm91dGluZXMgd2UgYnVpbGQgZm9yIGRpZmZlcmVudCB0YXJnZXRzCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKK2RpZmYgLS1naXQgYS9hcmdwL01ha2VmaWxlIGIvYXJncC9NYWtlZmlsZQoraW5kZXggMWE4NzYyOS4uZjdjMWU0MCAxMDA2NDQKKy0tLSBhL2FyZ3AvTWFrZWZpbGUKKysrKyBiL2FyZ3AvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIGFyZ3AuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gYXJncAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworZGlmZiAtLWdpdCBhL2FyZ3AvYXJncC1mbXRzdHJlYW0uYyBiL2FyZ3AvYXJncC1mbXRzdHJlYW0uYworaW5kZXggMmI4NDVlMC4uYzM0NGU3YiAxMDA2NDQKKy0tLSBhL2FyZ3AvYXJncC1mbXRzdHJlYW0uYworKysrIGIvYXJncC9hcmdwLWZtdHN0cmVhbS5jCitAQCAtNDIsNiArNDIsNyBAQAorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8d2NoYXIuaD4KKyAjIGluY2x1ZGUgPGxpYmlvL2xpYmlvUC5oPgorKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGRlZmluZSBfX3ZzbnByaW50ZihzLCBsLCBmLCBhKSBfSU9fdnNucHJpbnRmIChzLCBsLCBmLCBhKQorICNlbmRpZgorIAorQEAgLTEwMCw3ICsxMDEsMTEgQEAgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKyAgIGlmIChmcy0+cCA+IGZzLT5idWYpCisgICAgIHsKKysjaWZkZWYgX0xJQkMKKyAgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qcyIsIChpbnQpIChmcy0+cCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysjZWxzZQorKyAgICAgIGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgZnMtPnAgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKyAgICAgfQorICAgZnJlZSAoZnMtPmJ1Zik7CisgICBmcmVlIChmcyk7CitAQCAtMTQ1LDkgKzE1MCwxNyBAQCBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyAJICAgICAgc2l6ZV90IGk7CisgCSAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWQ7IGkrKykKKyAJCXsKKysjaWZkZWYgX0xJQkMKKyAJCSAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorLQkJICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgICAgIHsKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgICAgICAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgIH0KKyAJCSAgZWxzZQorKyNlbmRpZgorIAkJICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisgCQl9CisgCSAgICB9CitAQCAtMzA4LDkgKzMyMSwxNyBAQCBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyAJICAgICAgKm5sKysgPSAnICc7CisgCSAgZWxzZQorIAkgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrI2lmZGVmIF9MSUJDCisgCSAgICAgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKy0JCXB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgeworKyNpZmRlZiBPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICB9CisgCSAgICAgIGVsc2UKKysjZW5kaWYKKyAJCXB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisgCisgCSAgLyogQ29weSB0aGUgdGFpbCBvZiB0aGUgb3JpZ2luYWwgYnVmZmVyIGludG8gdGhlIGN1cnJlbnQgYnVmZmVyCitkaWZmIC0tZ2l0IGEvYXJncC9hcmdwLWhlbHAuYyBiL2FyZ3AvYXJncC1oZWxwLmMKK2luZGV4IGIwNTVlNDUuLjZiM2M0YzEgMTAwNjQ0CistLS0gYS9hcmdwL2FyZ3AtaGVscC5jCisrKysgYi9hcmdwL2FyZ3AtaGVscC5jCitAQCAtNTEsNiArNTEsNyBAQCBjaGFyICphbGxvY2EgKCk7CisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDwuLi9saWJpby9saWJpb1AuaD4KKyAjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNlbmRpZgorIAorICNpZm5kZWYgXworQEAgLTE3MDIsNyArMTcwMyw3IEBAIGNoYXIgKl9fYXJncF9iYXNlbmFtZSAoY2hhciAqbmFtZSkKKyB9CisgCisgY2hhciAqCistX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCkKKysoX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSkgKHZvaWQpCisgeworICMgaWYgSEFWRV9ERUNMX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FCisgICByZXR1cm4gcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CitAQCAtMTg3Myw5ICsxODc0LDE3IEBAIF9fYXJncF9mYWlsdXJlIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBzdGF0dXMsIGludCBlcnJudW0sCisgI2VuZGlmCisgCSAgICB9CisgCisrI2lmZGVmIF9MSUJDCisgCSAgaWYgKF9JT19md2lkZSAoc3RyZWFtLCAwKSA+IDApCistCSAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0cmVhbSk7CisrICAgICAgICAgICAgeworKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RyZWFtKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrICAgICAgICAgICAgfQorIAkgIGVsc2UKKysjZW5kaWYKKyAJICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisgCisgI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorZGlmZiAtLWdpdCBhL2FyZ3AvYXJncC1uYW1lZnJvYi5oIGIvYXJncC9hcmdwLW5hbWVmcm9iLmgKK2luZGV4IGY2N2M1OGYuLmUyMDAyZGMgMTAwNjQ0CistLS0gYS9hcmdwL2FyZ3AtbmFtZWZyb2IuaAorKysrIGIvYXJncC9hcmdwLW5hbWVmcm9iLmgKK0BAIC03NiwxMCArNzYsMTIgQEAKKyAjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisgI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fd21hcmdpbgorIAorKyNpZiAwCisgI2luY2x1ZGUgIm1lbXBjcHkuaCIKKyAjaW5jbHVkZSAic3RyY2FzZS5oIgorICNpbmNsdWRlICJzdHJjaHJudWwuaCIKKyAjaW5jbHVkZSAic3RybmR1cC5oIgorKyNlbmRpZgorIAorIC8qIG5vcm1hbCBsaWJjIGZ1bmN0aW9ucyB3ZSBjYWxsICovCisgI3VuZGVmIF9fZmxvY2tmaWxlCitkaWZmIC0tZ2l0IGEvY2F0Z2V0cy9NYWtlZmlsZSBiL2NhdGdldHMvTWFrZWZpbGUKK2luZGV4IDQ2MjRhODguLjA1NzE0ZmQgMTAwNjQ0CistLS0gYS9jYXRnZXRzL01ha2VmaWxlCisrKysgYi9jYXRnZXRzL01ha2VmaWxlCitAQCAtMjIsMjAgKzIyLDIzIEBAIHN1YmRpcgk6PSBjYXRnZXRzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIGhlYWRlcnMJCT0gbmxfdHlwZXMuaAorLXJvdXRpbmVzCT0gY2F0Z2V0cyBvcGVuX2NhdGFsb2cKKy1vdGhlcnMJCT0gZ2VuY2F0CistaW5zdGFsbC1iaW4JPSBnZW5jYXQKKy1leHRyYS1vYmpzCT0gJChnZW5jYXQtbW9kdWxlczo9Lm8pCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgIDo9IGNhdGdldHMgb3Blbl9jYXRhbG9nCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgICAgIDo9IGdlbmNhdAorK2luc3RhbGwtYmluLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSA6PSBnZW5jYXQKKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgOj0gJChnZW5jYXQtbW9kdWxlczo9Lm8pCisgCistdGVzdHMgPSB0c3QtY2F0Z2V0cworLXRlc3Qtc3JjcyA9IHRlc3QtZ2VuY2F0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpICAgICAgIDo9IHRzdC1jYXRnZXRzCisrdGVzdC1zcmNzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgIDo9IHRlc3QtZ2VuY2F0CisgCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykpCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWRlL2xpYmMuY2F0ICQob2JqcGZ4KXRlc3QxLmNhdCAkKG9ianBmeCl0ZXN0Mi5jYXQgXAorIAkJICQob2JqcGZ4KXNhbXBsZS5TSklTLmNhdCAkKG9ianBmeCl0ZXN0LWdlbmNhdC5vdXQKKyBlbmRpZgorLQorK2VuZGlmCisgZ2VuY2F0LW1vZHVsZXMJPSB4bWFsbG9jCisgCisgIyBUbyBmaW5kIHhtYWxsb2MuYworZGlmZiAtLWdpdCBhL2NyeXB0L01ha2VmaWxlIGIvY3J5cHQvTWFrZWZpbGUKK2luZGV4IDM0YzRkZDcuLjdjMThjODggMTAwNjQ0CistLS0gYS9jcnlwdC9NYWtlZmlsZQorKysrIGIvY3J5cHQvTWFrZWZpbGUKK0BAIC0xOCwyMSArMTgsMjUgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGNyeXB0KCkgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBjcnlwdAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMgOj0gY3J5cHQuaAorIAorLWV4dHJhLWxpYnMgOj0gbGliY3J5cHQKKy1leHRyYS1saWJzLW90aGVycyA6PSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfQ1JZUFQpIDo9IGxpYmNyeXB0CisrZXh0cmEtbGlicy1vdGhlcnMteSA6PSAkKGV4dHJhLWxpYnMteSkKKyAKKy1saWJjcnlwdC1yb3V0aW5lcyA6PSBjcnlwdC1lbnRyeSBtZDUtY3J5cHQgc2hhMjU2LWNyeXB0IHNoYTUxMi1jcnlwdCBjcnlwdCBcCistCQkgICAgIGNyeXB0X3V0aWwKKytsaWJjcnlwdC1yb3V0aW5lcyA6PWNyeXB0LWVudHJ5ICBtZDUtY3J5cHQgc2hhMjU2LWNyeXB0IHNoYTUxMi1jcnlwdCBjcnlwdF9jb21tb24KKytsaWJjcnlwdC1yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQ1JZUFRfVUZDKSA6PSBjcnlwdCBjcnlwdF91dGlsCisrbGliY3J5cHQtcm91dGluZXMgKz0gJChsaWJjcnlwdC1yb3V0aW5lcy15KQorIAorLXRlc3RzIDo9IGNlcnQgbWQ1Yy10ZXN0IHNoYTI1NmMtdGVzdCBzaGE1MTJjLXRlc3QgYmFkc2FsdHRlc3QKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1JZUFQpIDo9IG1kNWMtdGVzdCBzaGEyNTZjLXRlc3Qgc2hhNTEyYy10ZXN0IGJhZHNhbHR0ZXN0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NSWVBUX1VGQykgKz0gY2VydAorIAorLWlmZXEgKCQoY3J5cHQtaW4tbGliYykseWVzKQorK2lmZXEgKCQoY3J5cHQtaW4tbGliYykkKE9QVElPTl9FR0xJQkNfQ1JZUFQpLHllc3kpCisgcm91dGluZXMgKz0gJChsaWJjcnlwdC1yb3V0aW5lcykKKyBlbmRpZgorIAorQEAgLTQ0LDcgKzQ4LDcgQEAgTERMSUJTLWNyeXB0LnNvID0gLWxmcmVlYmwzCisgZWxzZQorIGxpYmNyeXB0LXJvdXRpbmVzICs9IG1kNSBzaGEyNTYgc2hhNTEyCisgCistdGVzdHMgKz0gbWQ1dGVzdCBzaGEyNTZ0ZXN0IHNoYTUxMnRlc3QKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1JZUFQpICs9IG1kNXRlc3Qgc2hhMjU2dGVzdCBzaGE1MTJ0ZXN0CisgCisgIyBUaGUgdGVzdCBtZDV0ZXN0LWdpYW50IHVzZXMgdXAgdG8gNDAwIE1CIG9mIFJTUyBhbmQgcnVucyBvbiBhIGZhc3QKKyAjIG1hY2hpbmUgb3ZlciBhIG1pbnV0ZS4KK0BAIC02NCw4ICs2OCwxMCBAQCAkKG9ianBmeClzaGEyNTZ0ZXN0OiAkKHBhdHN1YnN0ICUsICQob2JqcGZ4KSUubywkKHNoYTI1Ni1yb3V0aW5lcykpCisgJChvYmpwZngpc2hhNTEydGVzdDogJChwYXRzdWJzdCAlLCAkKG9ianBmeCklLm8sJChzaGE1MTItcm91dGluZXMpKQorIGVuZGlmCisgCisraWZlcSAoJChPUFRJT05fRUdMSUJDX0NSWVBUKSx5KQorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgJChhZGRwcmVmaXggJChvYmpwZngpLCQodGVzdHMpKTogJChvYmpwZngpbGliY3J5cHQuc28KKyBlbHNlCisgJChhZGRwcmVmaXggJChvYmpwZngpLCQodGVzdHMpKTogJChvYmpwZngpbGliY3J5cHQuYQorIGVuZGlmCisrZW5kaWYgIyBlZ2xpYmM6IE9QVElPTl9FR0xJQkNfQ1JZUFQKK2RpZmYgLS1naXQgYS9jcnlwdC9jcnlwdC1lbnRyeS5jIGIvY3J5cHQvY3J5cHQtZW50cnkuYworaW5kZXggN2U2NTViYS4uNmFlNWMyYiAxMDA2NDQKKy0tLSBhL2NyeXB0L2NyeXB0LWVudHJ5LmMKKysrKyBiL2NyeXB0L2NyeXB0LWVudHJ5LmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmaXBzLXByaXZhdGUuaD4KKyAKK0BAIC03Niw5ICs3NywxMSBAQCBfX2NyeXB0X3IgKGtleSwgc2FsdCwgZGF0YSkKKyAgICAgIGNvbnN0IGNoYXIgKnNhbHQ7CisgICAgICBzdHJ1Y3QgY3J5cHRfZGF0YSAqIF9fcmVzdHJpY3QgZGF0YTsKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMKKyAgIHVmY19sb25nIHJlc1s0XTsKKyAgIGNoYXIga3RhYls5XTsKKyAgIHVmY19sb25nIHh4ID0gMjU7IC8qIHRvIGNvcGUgd2l0aCBHQ0MgbG9uZyBsb25nIGNvbXBpbGVyIGJ1Z3MgKi8KKysjZW5kaWYgLypfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDKi8KKyAKKyAjaWZkZWYgX0xJQkMKKyAgIC8qIFRyeSB0byBmaW5kIG91dCB3aGV0aGVyIHdlIGhhdmUgdG8gdXNlIE1ENSBlbmNyeXB0aW9uIHJlcGxhY2VtZW50LiAgKi8KK0BAIC0xMDUsNiArMTA4LDcgQEAgX19jcnlwdF9yIChrZXksIHNhbHQsIGRhdGEpCisgCQkJICAgICBzaXplb2YgKHN0cnVjdCBjcnlwdF9kYXRhKSk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMKKyAgIC8qCisgICAgKiBIYWNrIERFUyB0YWJsZXMgYWNjb3JkaW5nIHRvIHNhbHQKKyAgICAqLworQEAgLTE0NCw2ICsxNDgsMTAgQEAgX19jcnlwdF9yIChrZXksIHNhbHQsIGRhdGEpCisgICAgKi8KKyAgIF91ZmNfb3V0cHV0X2NvbnZlcnNpb25fciAocmVzWzBdLCByZXNbMV0sIHNhbHQsIGRhdGEpOworICAgcmV0dXJuIGRhdGEtPmNyeXB0XzNfYnVmOworKyNlbHNlIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKysgIF9fc2V0X2Vycm5vIChFTk9TWVMpOworKyAgcmV0dXJuIE5VTEw7CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKyB9Cisgd2Vha19hbGlhcyAoX19jcnlwdF9yLCBjcnlwdF9yKQorIAorQEAgLTE2OCw3ICsxNzYsMTIgQEAgY3J5cHQgKGtleSwgc2FsdCkKKyAgICAgcmV0dXJuIF9fc2hhNTEyX2NyeXB0IChrZXksIHNhbHQpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDCisgICByZXR1cm4gX19jcnlwdF9yIChrZXksIHNhbHQsICZfdWZjX2Zvb2Jhcik7CisrI2Vsc2UgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworKyAgX19zZXRfZXJybm8gKEVOT1NZUyk7CisrICByZXR1cm4gTlVMTDsKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyAqLworIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9jcnlwdC9jcnlwdF9jb21tb24uYyBiL2NyeXB0L2NyeXB0X2NvbW1vbi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2NlNmEzMQorLS0tIC9kZXYvbnVsbAorKysrIGIvY3J5cHQvY3J5cHRfY29tbW9uLmMKK0BAIC0wLDAgKzEsNDIgQEAKKysvKgorKyAqIGNyeXB0OiBjcnlwdCgzKSBpbXBsZW1lbnRhdGlvbgorKyAqCisrICogQ29weXJpZ2h0IChDKSAxOTkxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorKyAqIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrICoKKysgKiBHZW5lcmFsIFN1cHBvcnQgcm91dGluZXMKKysgKgorKyAqLworKworKyNpbmNsdWRlICJjcnlwdC1wcml2YXRlLmgiCisrCisrLyogVGFibGUgd2l0aCBjaGFyYWN0ZXJzIGZvciBiYXNlNjQgdHJhbnNmb3JtYXRpb24uICAqLworK3N0YXRpYyBjb25zdCBjaGFyIGI2NHRbNjRdID0KKysiLi8wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisrCisrdm9pZAorK19fYjY0X2Zyb21fMjRiaXQgKGNoYXIgKipjcCwgaW50ICpidWZsZW4sCisrCQkgIHVuc2lnbmVkIGludCBiMiwgdW5zaWduZWQgaW50IGIxLCB1bnNpZ25lZCBpbnQgYjAsCisrCQkgIGludCBuKQorK3sKKysgIHVuc2lnbmVkIGludCB3ID0gKGIyIDw8IDE2KSB8IChiMSA8PCA4KSB8IGIwOworKyAgd2hpbGUgKG4tLSA+IDAgJiYgKCpidWZsZW4pID4gMCkKKysgICAgeworKyAgICAgICooKmNwKSsrID0gYjY0dFt3ICYgMHgzZl07CisrICAgICAgLS0oKmJ1Zmxlbik7CisrICAgICAgdyA+Pj0gNjsKKysgICAgfQorK30KK2RpZmYgLS1naXQgYS9jcnlwdC9jcnlwdF91dGlsLmMgYi9jcnlwdC9jcnlwdF91dGlsLmMKK2luZGV4IDE1OTc4ODUuLjkyOTc5NzQgMTAwNjQ0CistLS0gYS9jcnlwdC9jcnlwdF91dGlsLmMKKysrKyBiL2NyeXB0L2NyeXB0X3V0aWwuYworQEAgLTI0MiwxMCArMjQyLDYgQEAgc3RhdGljIHVmY19sb25nIGVwZXJtMzJ0YWJbNF1bMjU2XVsyXTsKKyAgKi8KKyBzdGF0aWMgdWZjX2xvbmcgZWZwWzE2XVs2NF1bMl07CisgCistLyogVGFibGUgd2l0aCBjaGFyYWN0ZXJzIGZvciBiYXNlNjQgdHJhbnNmb3JtYXRpb24uICAqLworLXN0YXRpYyBjb25zdCBjaGFyIGI2NHRbNjRdID0KKy0iLi8wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CistCisgLyoKKyAgKiBGb3IgdXNlIGJ5IHRoZSBvbGQsIG5vbi1yZWVudHJhbnQgcm91dGluZXMKKyAgKiAoY3J5cHQvZW5jcnlwdC9zZXRrZXkpCitAQCAtOTQ5LDE3ICs5NDUsMyBAQCBzZXRrZXkoX19rZXkpCisgeworICAgX19zZXRrZXlfcihfX2tleSwgJl91ZmNfZm9vYmFyKTsKKyB9CistCistdm9pZAorLV9fYjY0X2Zyb21fMjRiaXQgKGNoYXIgKipjcCwgaW50ICpidWZsZW4sCistCQkgIHVuc2lnbmVkIGludCBiMiwgdW5zaWduZWQgaW50IGIxLCB1bnNpZ25lZCBpbnQgYjAsCistCQkgIGludCBuKQorLXsKKy0gIHVuc2lnbmVkIGludCB3ID0gKGIyIDw8IDE2KSB8IChiMSA8PCA4KSB8IGIwOworLSAgd2hpbGUgKG4tLSA+IDAgJiYgKCpidWZsZW4pID4gMCkKKy0gICAgeworLSAgICAgICooKmNwKSsrID0gYjY0dFt3ICYgMHgzZl07CistICAgICAgLS0oKmJ1Zmxlbik7CistICAgICAgdyA+Pj0gNjsKKy0gICAgfQorLX0KK2RpZmYgLS1naXQgYS9jc3UvTWFrZWZpbGUgYi9jc3UvTWFrZWZpbGUKK2luZGV4IDlmMDg1NWEuLmIxYzMzNjMgMTAwNjQ0CistLS0gYS9jc3UvTWFrZWZpbGUKKysrKyBiL2NzdS9NYWtlZmlsZQorQEAgLTIyLDYgKzIyLDggQEAKKyAjIGNydG4ubywgc3BlY2lhbCAiaW5pdGlhbGl6ZXIiIGFuZCAiZmluYWxpemVyIiBmaWxlcyB1c2VkIGluIHRoZSBsaW5rCisgIyB0byBtYWtlIHRoZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yayByaWdodC4KKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyIDo9IGNzdQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworZGlmZiAtLWdpdCBhL2RlYnVnL01ha2VmaWxlIGIvZGVidWcvTWFrZWZpbGUKK2luZGV4IDlmZjM1N2IuLmQyM2Q5N2QgMTAwNjQ0CistLS0gYS9kZWJ1Zy9NYWtlZmlsZQorKysrIGIvZGVidWcvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBkZWJ1ZyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGRlYnVnCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsNyArMjksNyBAQCBoZWFkZXJzCTo9IGV4ZWNpbmZvLmgKKyAjIE5vdGUgdGhhdCBwdHNuYW1lX3JfY2hrIGFuZCBnZXRsb2dpbl9yIGFyZSBub3QgaGVyZSwgYnV0IGluCisgIyBsb2dpbi9NYWtlZmlsZSBpbnN0ZWFkLiAgSWYgdGhhdCBzdWJkaXIgaXMgb21pdHRlZCBmcm9tIHRoZQorICMgYnVpbGQsIGl0cyBfRk9SVElGWV9TT1VSQ0Ugc3VwcG9ydCB3aWxsIGJlIHRvby4KKy1yb3V0aW5lcyAgPSBiYWNrdHJhY2UgYmFja3RyYWNlc3ltcyBiYWNrdHJhY2VzeW1zZmQgbm9vcGhvb2tzIFwKKytyb3V0aW5lcyAgPSBub29waG9va3MgXAorIAkgICAgbWVtY3B5X2NoayBtZW1tb3ZlX2NoayBtZW1wY3B5X2NoayBtZW1zZXRfY2hrIHN0cGNweV9jaGsgXAorIAkgICAgc3RyY2F0X2NoayBzdHJjcHlfY2hrIHN0cm5jYXRfY2hrIHN0cm5jcHlfY2hrIHN0cG5jcHlfY2hrIFwKKyAJICAgIHNwcmludGZfY2hrIHZzcHJpbnRmX2NoayBzbnByaW50Zl9jaGsgdnNucHJpbnRmX2NoayBcCitAQCAtMzYsMjAgKzM4LDI3IEBAIHJvdXRpbmVzICA9IGJhY2t0cmFjZSBiYWNrdHJhY2VzeW1zIGJhY2t0cmFjZXN5bXNmZCBub29waG9va3MgXAorIAkgICAgcmVhZF9jaGsgcHJlYWRfY2hrIHByZWFkNjRfY2hrIHJlY3ZfY2hrIHJlY3Zmcm9tX2NoayBcCisgCSAgICByZWFkbGlua19jaGsgcmVhZGxpbmthdF9jaGsgZ2V0d2RfY2hrIGdldGN3ZF9jaGsgXAorIAkgICAgcmVhbHBhdGhfY2hrIGZyZWFkX2NoayBmcmVhZF91X2NoayBcCistCSAgICB3Y3RvbWJfY2hrIHdjc2NweV9jaGsgd21lbWNweV9jaGsgd21lbW1vdmVfY2hrIHdtZW1wY3B5X2NoayBcCistCSAgICB3Y3BjcHlfY2hrIHdjc25jcHlfY2hrIHdjc2NhdF9jaGsgd2NzbmNhdF9jaGsgd21lbXNldF9jaGsgXAorLQkgICAgd2NwbmNweV9jaGsgXAorLQkgICAgc3dwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsgd3ByaW50Zl9jaGsgZndwcmludGZfY2hrIFwKKy0JICAgIHZ3cHJpbnRmX2NoayB2ZndwcmludGZfY2hrIGZnZXR3c19jaGsgZmdldHdzX3VfY2hrIFwKKyAJICAgIGNvbmZzdHJfY2hrIGdldGdyb3Vwc19jaGsgdHR5bmFtZV9yX2NoayBcCistCSAgICBnZXRob3N0bmFtZV9jaGsgZ2V0ZG9tYWlubmFtZV9jaGsgd2NydG9tYl9jaGsgbWJzbnJ0b3djc19jaGsgXAorLQkgICAgd2NzbnJ0b21ic19jaGsgbWJzcnRvd2NzX2NoayB3Y3NydG9tYnNfY2hrIG1ic3Rvd2NzX2NoayBcCistCSAgICB3Y3N0b21ic19jaGsgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorKwkgICAgZ2V0aG9zdG5hbWVfY2hrIGdldGRvbWFpbm5hbWVfY2hrIFwKKysJICAgIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKyAJICAgIHZkcHJpbnRmX2NoayBvYnByaW50Zl9jaGsgXAorIAkgICAgbG9uZ2ptcF9jaGsgX19fX2xvbmdqbXBfY2hrIFwKKyAJICAgIGZkZWx0X2NoayBwb2xsX2NoayBwcG9sbF9jaGsgXAorIAkgICAgc3RhY2tfY2hrX2ZhaWwgZm9ydGlmeV9mYWlsIFwKKyAJICAgICQoc3RhdGljLW9ubHktcm91dGluZXMpCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSkgKz0gYmFja3RyYWNlIGJhY2t0cmFjZXN5bXMgYmFja3RyYWNlc3ltc2ZkCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykJCQlcCisrCSArPSB3cHJpbnRmX2NoayBmd3ByaW50Zl9jaGsJCQkJXAorKwkgICAgdndwcmludGZfY2hrIHZmd3ByaW50Zl9jaGsgZmdldHdzX2NoayBmZ2V0d3NfdV9jaGsKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKQkJCQlcCisrCSArPSB3Y3RvbWJfY2hrIHdjc2NweV9jaGsgd21lbWNweV9jaGsgd21lbW1vdmVfY2hrIHdtZW1wY3B5X2NoawlcCisrCSAgICB3Y3BjcHlfY2hrIHdjc25jcHlfY2hrIHdjc2NhdF9jaGsgd2NzbmNhdF9jaGsgd21lbXNldF9jaGsJXAorKwkgICAgd2NwbmNweV9jaGsJCQkJCQkJXAorKwkgICAgc3dwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsJCQkJCVwKKysJICAgIHdjcnRvbWJfY2hrIG1ic25ydG93Y3NfY2hrCQkJCQlcCisrCSAgICB3Y3NucnRvbWJzX2NoayBtYnNydG93Y3NfY2hrIHdjc3J0b21ic19jaGsgbWJzdG93Y3NfY2hrCVwKKysJICAgIHdjc3RvbWJzX2NoaworKworIHN0YXRpYy1vbmx5LXJvdXRpbmVzIDo9IHdhcm5pbmctbm9wIHN0YWNrX2Noa19mYWlsX2xvY2FsCisgCisgQ0ZMQUdTLWJhY2t0cmFjZS5jID0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIKK0BAIC0xMzEsMTEgKzE0MCwxNSBAQCBMREZMQUdTLXRzdC1iYWNrdHJhY2U0ID0gLXJkeW5hbWljCisgTERGTEFHUy10c3QtYmFja3RyYWNlNSA9IC1yZHluYW1pYworIExERkxBR1MtdHN0LWJhY2t0cmFjZTYgPSAtcmR5bmFtaWMKKyAKKy10ZXN0cyA9IGJhY2t0cmFjZS10c3QgdHN0LWxvbmdqbXBfY2hrIHRzdC1jaGsxIHRzdC1jaGsyIHRzdC1jaGszIFwKKy0JdHN0LWxmc2NoazEgdHN0LWxmc2NoazIgdHN0LWxmc2NoazMgdGVzdC1zdHJjcHlfY2hrIHRlc3Qtc3RwY3B5X2NoayBcCistCXRzdC1jaGs0IHRzdC1jaGs1IHRzdC1jaGs2IHRzdC1sZnNjaGs0IHRzdC1sZnNjaGs1IHRzdC1sZnNjaGs2IFwKKy0JdHN0LWxvbmdqbXBfY2hrMiB0c3QtYmFja3RyYWNlMiB0c3QtYmFja3RyYWNlMyB0c3QtYmFja3RyYWNlNCBcCistCXRzdC1iYWNrdHJhY2U1IHRzdC1iYWNrdHJhY2U2CisrdGVzdHMgPSB0c3QtbG9uZ2ptcF9jaGsgdGVzdC1zdHJjcHlfY2hrIHRlc3Qtc3RwY3B5X2NoayB0c3QtbG9uZ2ptcF9jaGsyCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrICAgICAgKz0gdHN0LWNoazEgdHN0LWNoazIgdHN0LWNoazMgdHN0LWxmc2NoazEgdHN0LWxmc2NoazIgdHN0LWxmc2NoazMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQkFDS1RSQUNFKSBcCisrICAgICAgKz0gYmFja3RyYWNlLXRzdCB0c3QtYmFja3RyYWNlMiB0c3QtYmFja3RyYWNlMyB0c3QtYmFja3RyYWNlNCBcCisrICAgICAgICAgdHN0LWJhY2t0cmFjZTUgdHN0LWJhY2t0cmFjZTYKKytpZmVxICh5eSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrdGVzdHMgKz0gdHN0LWNoazQgdHN0LWNoazUgdHN0LWNoazYgdHN0LWxmc2NoazQgdHN0LWxmc2NoazUgdHN0LWxmc2NoazYKKytlbmRpZgorIAorIGlmZXEgKCwkKENYWCkpCisgdGVzdHMtdW5zdXBwb3J0ZWQgPSB0c3QtY2hrNCB0c3QtY2hrNSB0c3QtY2hrNiBcCitkaWZmIC0tZ2l0IGEvZGVidWcvc2VnZmF1bHQuYyBiL2RlYnVnL3NlZ2ZhdWx0LmMKK2luZGV4IDM0NTlhMmEuLmVlOWExNDYgMTAwNjQ0CistLS0gYS9kZWJ1Zy9zZWdmYXVsdC5jCisrKysgYi9kZWJ1Zy9zZWdmYXVsdC5jCitAQCAtMzAsNiArMzAsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8X2l0b2EuaD4KKyAjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBUaGlzIGZpbGUgZGVmaW5lcyBtYWNyb3MgdG8gYWNjZXNzIHRoZSBjb250ZW50IG9mIHRoZSBzaWdjb250ZXh0IGVsZW1lbnQKKyAgICBwYXNzZWQgdXAgYnkgdGhlIHNpZ25hbCBoYW5kbGVyLiAgKi8KK0BAIC02OCwxMSArNjksMTMgQEAgd3JpdGVfc3Ryc2lnbmFsIChpbnQgZmQsIGludCBzaWduYWwpCisgc3RhdGljIHZvaWQKKyBjYXRjaF9zZWdmYXVsdCAoaW50IHNpZ25hbCwgU0lHQ09OVEVYVCBjdHgpCisgeworLSAgaW50IGZkLCBjbnQsIGk7CistICB2b2lkICoqYXJyOworKyAgaW50IGZkOworICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRQorKyAgaW50IGNudCwgaTsKKysgIHZvaWQgKiphcnI7CisgICB1aW50cHRyX3QgcGM7CistCisrI2VuZGlmCisgICAvKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdlIGFyZSB3cml0aW5nIHRvLiAgSWYgbm9uZSBpcyBnaXZlbgorICAgICAgb3Igd2UgY2Fubm90IHdyaXRlIHRvIHRoaXMgZmlsZSB3cml0ZSB0byBzdGRlcnIuICAqLworICAgZmQgPSAyOworQEAgLTkxLDYgKzk0LDcgQEAgY2F0Y2hfc2VnZmF1bHQgKGludCBzaWduYWwsIFNJR0NPTlRFWFQgY3R4KQorICAgUkVHSVNURVJfRFVNUDsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRQorICAgV1JJVEVfU1RSSU5HICgiXG5CYWNrdHJhY2U6XG4iKTsKKyAKKyAgIC8qIEdldCB0aGUgYmFja3RyYWNlLiAgKi8KK0BAIC0xMTMsNiArMTE3LDcgQEAgY2F0Y2hfc2VnZmF1bHQgKGludCBzaWduYWwsIFNJR0NPTlRFWFQgY3R4KQorIAorICAgLyogTm93IGdlbmVyYXRlIG5pY2VseSBmb3JtYXR0ZWQgb3V0cHV0LiAgKi8KKyAgIF9fYmFja3RyYWNlX3N5bWJvbHNfZmQgKGFyciArIGksIGNudCAtIGksIGZkKTsKKysjZW5kaWYKKyAKKyAjaWZkZWYgSEFWRV9QUk9DX1NFTEYKKyAgIC8qIE5vdyB0aGUgbGluayBtYXAuICAqLworZGlmZiAtLWdpdCBhL2RlYnVnL3RzdC1jaGsxLmMgYi9kZWJ1Zy90c3QtY2hrMS5jCitpbmRleCA1MzU1OWU2Li4zNjJkOTJhIDEwMDY0NAorLS0tIGEvZGVidWcvdHN0LWNoazEuYworKysrIGIvZGVidWcvdHN0LWNoazEuYworQEAgLTMxLDYgKzMxLDcgQEAKKyAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPHN5cy91bi5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorICNkZWZpbmUgb2JzdGFja19jaHVua19hbGxvYyBtYWxsb2MKK0BAIC0zMDcsNiArMzA4LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIHNucHJpbnRmIChidWYgKyA4LCBsMCArIDMsICIlZCIsIG51bTIpOworICAgQ0hLX0ZBSUxfRU5ECisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIENIS19GQUlMX1NUQVJUCisgICBzd3ByaW50ZiAod2J1ZiArIDgsIDMsIEwiJWQiLCBudW0xKTsKKyAgIENIS19GQUlMX0VORAorQEAgLTMxNCw2ICszMTYsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgQ0hLX0ZBSUxfU1RBUlQKKyAgIHN3cHJpbnRmICh3YnVmICsgOCwgbDAgKyAzLCBMIiVkIiwgbnVtMSk7CisgICBDSEtfRkFJTF9FTkQKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworICMgZW5kaWYKKyAKKyAgIG1lbWNweSAoYnVmLCBzdHIxICsgMiwgbDAgKyA5KTsKK0BAIC0zODEsNiArMzg0LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIENIS19GQUlMX0VORAorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgCisgICAvKiBUaGVzZSBvcHMgY2FuIGJlIGRvbmUgd2l0aG91dCBydW50aW1lIGNoZWNraW5nIG9mIG9iamVjdCBzaXplLiAgKi8KKyAgIHdtZW1jcHkgKHdidWYsIEwiYWJjZGVmZ2hpaiIsIDEwKTsKK0BAIC02MDUsNiArNjA5LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIENIS19GQUlMX0VORAorICNlbmRpZgorIAorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICAvKiBOb3cgY2hlY2tzIGZvciAlbiBwcm90ZWN0aW9uLiAgKi8KKyAKK0BAIC0xMTkyLDYgKzExOTcsNyBAQCBkb190ZXN0ICh2b2lkKQorICMgZW5kaWYKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiZGVfREUuVVRGLTgiKSAhPSBOVUxMKQorICAgICB7CisgICAgICAgYXNzZXJ0IChNQl9DVVJfTUFYIDw9IDEwKTsKK0BAIC0xMzQ4LDYgKzEzNTQsNyBAQCBkb190ZXN0ICh2b2lkKQorICAgICAgIHB1dHMgKCJjYW5ub3Qgc2V0IGxvY2FsZSIpOworICAgICAgIHJldCA9IDE7CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgaW50IGZkID0gcG9zaXhfb3BlbnB0IChPX1JEV1IpOworICAgaWYgKGZkICE9IC0xKQorZGlmZiAtLWdpdCBhL2RsZmNuL01ha2VmaWxlIGIvZGxmY24vTWFrZWZpbGUKK2luZGV4IDc1OTc4MGQuLjM4Mjc2MDcgMTAwNjQ0CistLS0gYS9kbGZjbi9NYWtlZmlsZQorKysrIGIvZGxmY24vTWFrZWZpbGUKK0BAIC0xNSw2ICsxNSw4IEBACisgIyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgkJOj0gZGxmY24KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zNiw4ICszOCwxMSBAQCBlbmRpZgorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgPSBnbHJlZm1haW4gZmFpbHRlc3QgdHN0LWRsYWRkciBkZWZhdWx0IGVycm1zZzEgdHN0Y3hhYXRleGl0IFwKKyAJYnVnLWRsb3BlbjEgYnVnLWRsc3ltMSB0c3QtZGxpbmZvIGJ1Zy1hdGV4aXQxIGJ1Zy1hdGV4aXQyIFwKKy0JYnVnLWF0ZXhpdDMgdHN0YXRleGl0IGJ1Zy1kbC1sZWFmIHRzdC1yZWMtZGxvcGVuCisrCXRzdGF0ZXhpdCBidWctZGwtbGVhZiB0c3QtcmVjLWRsb3BlbgorIGVuZGlmCisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gYnVnLWF0ZXhpdDMKKysKKyBtb2R1bGVzLW5hbWVzID0gZ2xyZWZsaWIxIGdscmVmbGliMiBnbHJlZmxpYjMgZmFpbHRlc3Rtb2QgZGVmYXVsdG1vZDEgXAorIAkJZGVmYXVsdG1vZDIgZXJybXNnMW1vZCBtb2RhdGV4aXQgbW9kY3hhYXRleGl0IFwKKyAJCWJ1Zy1kbHN5bTEtbGliMSBidWctZGxzeW0xLWxpYjIgYnVnLWF0ZXhpdDEtbGliIFwKK2RpZmYgLS1naXQgYS9lbGYvZGwtc3VwcG9ydC5jIGIvZWxmL2RsLXN1cHBvcnQuYworaW5kZXggNGQwMzZmMS4uYzE1ZjQwNSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1zdXBwb3J0LmMKKysrKyBiL2VsZi9kbC1zdXBwb3J0LmMKK0BAIC0xOSw2ICsxOSw3IEBACisgLyogVGhpcyBmaWxlIGRlZmluZXMgc29tZSB0aGluZ3MgdGhhdCBmb3IgdGhlIGR5bmFtaWMgbGlua2VyIGFyZSBkZWZpbmVkIGluCisgICAgcnRsZC5jIGFuZCBkbC1zeXNkZXAuYyBpbiB3YXlzIGFwcHJvcHJpYXRlIHRvIGJvb3RzdHJhcCBkeW5hbWljIGxpbmtpbmcuICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQyLDcgKzQzLDkgQEAgY2hhciAqKl9kbF9hcmd2ID0gJl9fcHJvZ25hbWU7CS8qIFRoaXMgaXMgY2hlY2tlZCBmb3Igc29tZSBlcnJvciBtZXNzYWdlcy4gICovCisgY29uc3QgY2hhciAqX2RsX3BsYXRmb3JtOworIHNpemVfdCBfZGxfcGxhdGZvcm1sZW47CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgaW50IF9kbF9kZWJ1Z19tYXNrOworKyNlbmRpZgorIGludCBfZGxfbGF6eTsKKyBFbGZXKEFkZHIpIF9kbF91c2VfbG9hZF9iaWFzID0gLTI7CisgaW50IF9kbF9keW5hbWljX3dlYWs7CitkaWZmIC0tZ2l0IGEvZWxmL3J0bGQuYyBiL2VsZi9ydGxkLmMKK2luZGV4IDZkM2FkZDcuLmZjM2EyZGIgMTAwNjQ0CistLS0gYS9lbGYvcnRsZC5jCisrKysgYi9lbGYvcnRsZC5jCitAQCAtMTYsNiArMTYsNyBAQAorICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxkbGZjbi5oPgorICNpbmNsdWRlIDxmY250bC5oPgorQEAgLTIyMDEsNiArMjIwMiw3IEBAIHByaW50X21pc3NpbmdfdmVyc2lvbiAoaW50IGVycmNvZGUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAkJICAgIG9iam5hbWUsIGVycnN0cmluZyk7CisgfQorIAwKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAvKiBOb256ZXJvIGlmIGFueSBvZiB0aGUgZGVidWdnaW5nIG9wdGlvbnMgaXMgZW5hYmxlZC4gICovCisgc3RhdGljIGludCBhbnlfZGVidWcgYXR0cmlidXRlX3JlbHJvOworIAorQEAgLTIzMTAsNiArMjMxMiw3IEBAIGEgZmlsZW5hbWUgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgTERfREVCVUdfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlLlxuIik7CisgICAgICAgX2V4aXQgKDApOworICAgICB9CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRyAqLworIAwKKyBzdGF0aWMgdm9pZAorIHByb2Nlc3NfZGxfYXVkaXQgKGNoYXIgKnN0cikKK0BAIC0yMzQ5LDggKzIzNTIsOSBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgICBjaGFyICoqcnVucCA9IF9lbnZpcm9uOworICAgY2hhciAqZW52bGluZTsKKyAgIGVudW0gbW9kZSBtb2RlID0gbm9ybWFsOworKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworICAgY2hhciAqZGVidWdfb3V0cHV0ID0gTlVMTDsKKy0KKysjZW5kaWYKKyAgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgcGxhY2UgZm9yIHByb2ZpbGluZyBkYXRhIGZpbGUuICAqLworICAgR0xSTyhkbF9wcm9maWxlX291dHB1dCkKKyAgICAgPSAmIi92YXIvdG1wXDAvdmFyL3Byb2ZpbGUiW19fbGliY19lbmFibGVfc2VjdXJlID8gOSA6IDBdOworQEAgLTIzNzcsMTIgKzIzODEsMTQgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgIGJyZWFrOworIAorIAljYXNlIDU6CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgLyogRGVidWdnaW5nIG9mIHRoZSBkeW5hbWljIGxpbmtlcj8gICovCisgCSAgaWYgKG1lbWNtcCAoZW52bGluZSwgIkRFQlVHIiwgNSkgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgcHJvY2Vzc19kbF9kZWJ1ZyAoJmVudmxpbmVbNl0pOworIAkgICAgICBicmVhazsKKyAJICAgIH0KKysjZW5kaWYKKyAJICBpZiAobWVtY21wIChlbnZsaW5lLCAiQVVESVQiLCA1KSA9PSAwKQorIAkgICAgcHJvY2Vzc19kbF9hdWRpdCAoJmVudmxpbmVbNl0pOworIAkgIGJyZWFrOworQEAgLTI0NDgsMTMgKzI0NTQsMTQgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkgICAgICBicmVhazsKKyAJICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICAvKiBXaGVyZSB0byBwbGFjZSB0aGUgcHJvZmlsaW5nIGRhdGEgZmlsZS4gICovCisgCSAgaWYgKG1lbWNtcCAoZW52bGluZSwgIkRFQlVHX09VVFBVVCIsIDEyKSA9PSAwKQorIAkgICAgeworIAkgICAgICBkZWJ1Z19vdXRwdXQgPSAmZW52bGluZVsxM107CisgCSAgICAgIGJyZWFrOworIAkgICAgfQorLQorKyNlbmRpZgorIAkgIGlmICghX19saWJjX2VuYWJsZV9zZWN1cmUKKyAJICAgICAgJiYgbWVtY21wIChlbnZsaW5lLCAiRFlOQU1JQ19XRUFLIiwgMTIpID09IDApCisgCSAgICBHTFJPKGRsX2R5bmFtaWNfd2VhaykgPSAxOworQEAgLTI0OTEsNyArMjQ5OCw5IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICAgIHsKKyAJICAgICAgbW9kZSA9IHRyYWNlOworIAkgICAgICBHTFJPKGRsX3ZlcmJvc2UpID0gMTsKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICAgICAgR0xSTyhkbF9kZWJ1Z19tYXNrKSB8PSBETF9ERUJVR19QUkVMSU5LOworKyNlbmRpZgorIAkgICAgICBHTFJPKGRsX3RyYWNlX3ByZWxpbmspID0gJmVudmxpbmVbMTddOworIAkgICAgfQorIAkgIGJyZWFrOworQEAgLTI1MzgsMTIgKzI1NDcsMTUgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorICAgICAgIGlmIChfX2FjY2VzcyAoIi9ldGMvc3VpZC1kZWJ1ZyIsIEZfT0spICE9IDApCisgCXsKKyAJICB1bnNldGVudiAoIk1BTExPQ19DSEVDS18iKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAJICBHTFJPKGRsX2RlYnVnX21hc2spID0gMDsKKysjZW5kaWYKKyAJfQorIAorICAgICAgIGlmIChtb2RlICE9IG5vcm1hbCkKKyAJX2V4aXQgKDUpOworICAgICB9CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgICAvKiBJZiB3ZSBoYXZlIHRvIHJ1biB0aGUgZHluYW1pYyBsaW5rZXIgaW4gZGVidWdnaW5nIG1vZGUgYW5kIHRoZQorICAgICAgTERfREVCVUdfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGdpdmVuLCB3ZSB3cml0ZSB0aGUgZGVidWcKKyAgICAgIG1lc3NhZ2VzIHRvIHRoaXMgZmlsZS4gICovCitAQCAtMjU2OCw2ICsyNTgwLDcgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAkvKiBXZSB1c2Ugc3RhbmRhcmQgb3V0cHV0IGlmIG9wZW5pbmcgdGhlIGZpbGUgZmFpbGVkLiAgKi8KKyAJR0xSTyhkbF9kZWJ1Z19mZCkgPSBTVERPVVRfRklMRU5POworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHICovCisgfQorIAorIAorZGlmZiAtLWdpdCBhL2V4dHJhLWxpYi5tayBiL2V4dHJhLWxpYi5taworaW5kZXggYjEwNzQ4ZC4uZDcxYTA2ZiAxMDA2NDQKKy0tLSBhL2V4dHJhLWxpYi5taworKysrIGIvZXh0cmEtbGliLm1rCitAQCAtMjUsNyArMjUsOSBAQCBpbnN0YWxsLWxpYiA6PSAkKGluc3RhbGwtbGliKQorIGV4dHJhLW9ianMgOj0gJChleHRyYS1vYmpzKQorIAorICMgVGhlIG1vZHVsZXMgdGhhdCBnbyBpbiAkKGxpYikuCistYWxsLSQobGliKS1yb3V0aW5lcyA6PSAkKCQobGliKS1yb3V0aW5lcykgJCgkKGxpYiktc3lzZGVwX3JvdXRpbmVzKQorK2FsbC0kKGxpYiktcm91dGluZXMgOj0gJCgkKGxpYiktcm91dGluZXMpCQlcCisrCSAgICAgICAgICAgICAgICQoJChsaWIpLXJvdXRpbmVzLXkpCQlcCisrCQkgICAgICAgJCgkKGxpYiktc3lzZGVwX3JvdXRpbmVzKQorIAorICMgQWRkIGVhY2ggZmxhdm9yIG9mIGxpYnJhcnkgdG8gdGhlIGxpc3RzIG9mIHRoaW5ncyB0byBidWlsZCBhbmQgaW5zdGFsbC4KKyBpbnN0YWxsLWxpYiArPSAkKGZvcmVhY2ggbywkKG9iamVjdC1zdWZmaXhlcy0kKGxpYikpLCQobGliOmxpYiU9JChsaWJ0eXBlJG8pKSkKK0BAIC0xMDEsNyArMTAzLDcgQEAgZW5kaWYKKyBlbmRpZgorIAorICMgVGhpcyB3aWxsIGRlZmluZSBgbGlib2YtUk9VVElORSA6PSBMSUInIGZvciBlYWNoIG9mIHRoZSByb3V0aW5lcy4KKy1jcHAtc3Jjcy1sZWZ0IDo9ICQoJChsaWIpLXJvdXRpbmVzKSAkKCQobGliKS1zeXNkZXBfcm91dGluZXMpCisrY3BwLXNyY3MtbGVmdCA6PSAkKGFsbC0kKGxpYiktcm91dGluZXMpCisgaWZuZXEgKCwkKGNwcC1zcmNzLWxlZnQpKQorIGluY2x1ZGUgJChwYXRzdWJzdCAlLCQoLi4pY3BwZmxhZ3MtaXRlcmF0b3IubWssJChjcHAtc3Jjcy1sZWZ0KSkKKyBlbmRpZgorZGlmZiAtLWdpdCBhL2dycC9NYWtlZmlsZSBiL2dycC9NYWtlZmlsZQoraW5kZXggYzYzYjU1Mi4uNzQ4NmYzMiAxMDA2NDQKKy0tLSBhL2dycC9NYWtlZmlsZQorKysrIGIvZ3JwL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgZ3JwIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gZ3JwCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjksNiArMzEsOSBAQCByb3V0aW5lcyA6PSBmZ2V0Z3JlbnQgaW5pdGdyb3VwcyBzZXRncm91cHMgXAorIAkgICAgZ2V0Z3JlbnRfciBnZXRncmdpZF9yIGdldGdybmFtX3IgZmdldGdyZW50X3IKKyAKKyB0ZXN0cyA6PSB0ZXN0Z3JwCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX05TU1dJVENIKSkKKytMRExJQlMtdGVzdGdycCArPSAkKHNoZWxsIGNhdCAkKGNvbW1vbi1vYmpwZngpbnNzL2ZpeGVkLW5zc3dpdGNoLWxpYnMpCisrZW5kaWYKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3Qtc3JjcyA6PSAgdHN0X2ZnZXRncmVudAorZGlmZiAtLWdpdCBhL2hlc2lvZC9NYWtlZmlsZSBiL2hlc2lvZC9NYWtlZmlsZQoraW5kZXggYWMwYmMwMS4uMzgyNjNiNCAxMDA2NDQKKy0tLSBhL2hlc2lvZC9NYWtlZmlsZQorKysrIGIvaGVzaW9kL01ha2VmaWxlCitAQCAtMTgsMTIgKzE4LDE0IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBoZXNpb2QgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBoZXNpb2QKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKy1leHRyYS1saWJzIDo9IGxpYm5zc19oZXNpb2QKKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBsaWJuc3NfaGVzaW9kCisrZXh0cmEtbGlicy1vdGhlcnMteSArPSAkKGV4dHJhLWxpYnMteSkKKyAKKyBzdWJkaXItZGlycyA9IG5zc19oZXNpb2QKKyB2cGF0aCAlLmMgbnNzX2hlc2lvZAorZGlmZiAtLWdpdCBhL2ljb252L01ha2VmaWxlIGIvaWNvbnYvTWFrZWZpbGUKK2luZGV4IDBkNTVlZGEuLmExODQ3YzYgMTAwNjQ0CistLS0gYS9pY29udi9NYWtlZmlsZQorKysrIGIvaWNvbnYvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIGljb252LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGljb252CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzksNiArNDEsMTEgQEAgQ0ZMQUdTLWljb252X2NoYXJtYXAuYyA9IC1JLi4vbG9jYWxlL3Byb2dyYW1zCisgQ0ZMQUdTLWR1bW15LXJlcGVydG9pcmUuYyA9IC1JLi4vbG9jYWxlL3Byb2dyYW1zCisgQ0ZMQUdTLWNoYXJtYXAuYyA9IC1EQ0hBUk1BUF9QQVRIPSciJChpMThuZGlyKS9jaGFybWFwcyInIFwKKyAJCSAgIC1EREVGQVVMVF9DSEFSTUFQPW51bGxfcG9pbnRlciAtRE5FRURfTlVMTF9QT0lOVEVSCisrCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX1NQQVdOKSkKKytDRkxBR1MtY2hhcm1hcC1kaXIuYyArPSAtRE5PX1VOQ09NUFJFU1MKKytlbmRpZgorKworIENGTEFHUy1saW5lcmVhZGVyLmMgPSAtRE5PX1RSQU5TTElURVJBVElPTgorIENGTEFHUy1zaW1wbGUtaGFzaC5jID0gLUkuLi9sb2NhbGUKKyAKK2RpZmYgLS1naXQgYS9pY29udi9nY29udl9kYi5jIGIvaWNvbnYvZ2NvbnZfZGIuYworaW5kZXggY2U0NjIxNi4uZWExODk2NCAxMDA2NDQKKy0tLSBhL2ljb252L2djb252X2RiLmMKKysrKyBiL2ljb252L2djb252X2RiLmMKK0BAIC0yNSw2ICsyNSw3IEBACisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxkbGZjbi5oPgorICNpbmNsdWRlIDxnY29udl9pbnQuaD4KK0BAIC04MjgsOSArODI5LDExIEBAIGZyZWVfbW9kdWxlc19kYiAoc3RydWN0IGdjb252X21vZHVsZSAqbm9kZSkKKyAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaWYgbmVjZXNzYXJ5LiAgKi8KKyBsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAvKiBGaXJzdCBmcmVlIGxvY2FsZSBtZW1vcnkuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGZyZWVpbmcgZGVyaXZhdGlvbnMsCisgICAgICBhcyBjdHlwZSBjbGVhbnVwIGZ1bmN0aW9ucyBkZXJlZmVyZW5jZSBzdGVwcyBhcnJheXMgd2hpY2ggd2UgZnJlZSBiZWxvdy4gICovCisgICBfbmxfbG9jYWxlX3N1YmZyZWVyZXMgKCk7CisrI2VuZGlmCisgCisgICAvKiBmaW5kZG9tYWluLmMgaGFzIHNpbWlsYXIgcHJvYmxlbS4gICovCisgICBleHRlcm4gdm9pZCBfbmxfZmluZGRvbWFpbl9zdWJmcmVlcmVzICh2b2lkKSBhdHRyaWJ1dGVfaGlkZGVuOworZGlmZiAtLWdpdCBhL2ljb252L2djb252X3RyYW5zLmMgYi9pY29udi9nY29udl90cmFucy5jCitpbmRleCA1ZDVkNGQ3Li5hN2QzMDcyIDEwMDY0NAorLS0tIGEvaWNvbnYvZ2NvbnZfdHJhbnMuYworKysrIGIvaWNvbnYvZ2NvbnZfdHJhbnMuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjaW5jbHVkZSAiZ2NvbnZfaW50LmgiCitAQCAtMzgsMTUgKzM5LDE5IEBAIF9fZ2NvbnZfdHJhbnNsaXRlcmF0ZSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqc3RlcCwKKyAJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0YnVmc3RhcnQsIHNpemVfdCAqaXJyZXZlcnNpYmxlKQorIHsKKyAgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBsb2NhbGUncyB0cmFuc2xpdGVyYXRpb24uICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnRfZmFzdDMyX3Qgc2l6ZTsKKyAgIGNvbnN0IHVpbnQzMl90ICpmcm9tX2lkeDsKKyAgIGNvbnN0IHVpbnQzMl90ICpmcm9tX3RibDsKKyAgIGNvbnN0IHVpbnQzMl90ICp0b19pZHg7CisgICBjb25zdCB1aW50MzJfdCAqdG9fdGJsOworKyNlbmRpZgorICAgY29uc3QgdWludDMyX3QgKndpbmJ1ZjsKKyAgIGNvbnN0IHVpbnQzMl90ICp3aW5idWZlbmQ7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludF9mYXN0MzJfdCBsb3c7CisgICB1aW50X2Zhc3QzMl90IGhpZ2g7CisrI2VuZGlmCisgCisgICAvKiBUaGUgaW5wdXQgYnVmZmVyLiAgVGhlcmUgYXJlIGFjdHVhbGx5IDQtYnl0ZSB2YWx1ZXMuICAqLworICAgd2luYnVmID0gKGNvbnN0IHVpbnQzMl90ICopICppbmJ1ZnA7CitAQCAtNTgsNiArNjMsNyBAQCBfX2djb252X3RyYW5zbGl0ZXJhdGUgKHN0cnVjdCBfX2djb252X3N0ZXAgKnN0ZXAsCisgICAgIFBUUl9ERU1BTkdMRSAoZmN0KTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAvKiBJZiB0aGVyZSBpcyBubyB0cmFuc2xpdGVyYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIGxvY2FsZSBkb24ndCBkbworICAgICAgYW55dGhpbmcgYW5kIHJldHVybiB0aGUgZXJyb3IuICAqLworICAgc2l6ZSA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUpOworQEAgLTE5Myw2ICsxOTksNyBAQCBfX2djb252X3RyYW5zbGl0ZXJhdGUgKHN0cnVjdCBfX2djb252X3N0ZXAgKnN0ZXAsCisgICAgICAgICAgICAgIHNvcnRlZC4gICovCisgCSAgYnJlYWs7CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIC8qIE9uZSBsYXN0IGNoYW5jZTogdXNlIHRoZSBkZWZhdWx0IHJlcGxhY2VtZW50LiAgKi8KKyAgIGlmIChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4pICE9IDApCitkaWZmIC0tZ2l0IGEvaWNvbnYvaWNvbnZfcHJvZy5jIGIvaWNvbnYvaWNvbnZfcHJvZy5jCitpbmRleCBlMjQ5YmNlLi40MDNlY2U1IDEwMDY0NAorLS0tIGEvaWNvbnYvaWNvbnZfcHJvZy5jCisrKysgYi9pY29udi9pY29udl9wcm9nLmMKK0BAIC0zNSw2ICszNSw3IEBACisgI2lmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKyAjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPGNoYXJtYXAuaD4KKyAjaW5jbHVkZSA8Z2NvbnZfaW50Lmg+CisgI2luY2x1ZGUgImljb252X3Byb2cuaCIKK0BAIC0yMjEsMTAgKzIyMiwxNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgICAgICBib29sIHRvX3dyb25nID0KKyAJCShpY29udl9vcGVuICh0b19jb2RlLCAiVVRGLTgiKSA9PSAoaWNvbnZfdCkgLTEKKyAJCSAmJiBlcnJubyA9PSBFSU5WQUwpOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgY29uc3QgY2hhciAqZnJvbV9wcmV0dHkgPQorIAkJKGZyb21fY29kZVswXSA/IGZyb21fY29kZSA6IG5sX2xhbmdpbmZvIChDT0RFU0VUKSk7CisgCSAgICAgIGNvbnN0IGNoYXIgKnRvX3ByZXR0eSA9CisgCQkob3JpZ190b19jb2RlWzBdID8gb3JpZ190b19jb2RlIDogbmxfbGFuZ2luZm8gKENPREVTRVQpKTsKKysjZWxzZQorKwkgICAgICBjb25zdCBjaGFyICpmcm9tX3ByZXR0eSA9CisrCQkoZnJvbV9jb2RlWzBdID8gZnJvbV9jb2RlIDogIkFOU0lfWDMuNC0xOTY4Iik7CisrCSAgICAgIGNvbnN0IGNoYXIgKnRvX3ByZXR0eSA9CisrICAgICAgICAgICAgICAgICAob3JpZ190b19jb2RlWzBdID8gb3JpZ190b19jb2RlIDogIkFOU0lfWDMuNC0xOTY4Iik7CisrI2VuZGlmCisgCisgCSAgICAgIGlmIChmcm9tX3dyb25nKQorIAkJeworZGlmZiAtLWdpdCBhL2ljb252ZGF0YS9NYWtlZmlsZSBiL2ljb252ZGF0YS9NYWtlZmlsZQoraW5kZXggYTNkMWQwOS4uMDgzMjcwOCAxMDA2NDQKKy0tLSBhL2ljb252ZGF0YS9NYWtlZmlsZQorKysrIGIvaWNvbnZkYXRhL01ha2VmaWxlCitAQCAtMTgsMTIgKzE4LDE1IEBACisgIworICMJTWFrZWZpbGUgZm9yIGljb252IGRhdGEgYW5kIGNvZGUuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaWNvbnZkYXRhCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgIyBOYW1lcyBvZiBhbGwgdGhlIHNoYXJlZCBvYmplY3RzIHdoaWNoIGltcGxlbWVudCB0aGUgdHJhbnNmb3JtYXRpb25zLgorLW1vZHVsZXMJOj0gSVNPODg1OS0xIElTTzg4NTktMiBJU084ODU5LTMgSVNPODg1OS00IElTTzg4NTktNQkJIFwKKyttb2R1bGVzLSQoT1BUSU9OX0VHTElCQ19DSEFSU0VUUykJCQkJCSBcCisrCTo9IElTTzg4NTktMSBJU084ODU5LTIgSVNPODg1OS0zIElTTzg4NTktNCBJU084ODU5LTUJCSBcCisgCSAgIElTTzg4NTktNiBJU084ODU5LTcgSVNPODg1OS04IElTTzg4NTktOSBJU084ODU5LTEwCQkgXAorIAkgICBJU084ODU5LTExIElTTzg4NTktMTMgSVNPODg1OS0xNCBJU084ODU5LTE1IElTTzg4NTktMTYJIFwKKyAJICAgVC42MSBJU09fNjkzNyBTSklTIEtPSS04IEhQLVJPTUFOOCBIUC1ST01BTjkgRUJDRElDLUFULURFCSBcCitAQCAtNjMsMTEgKzY2LDEzIEBAIG1vZHVsZXMJOj0gSVNPODg1OS0xIElTTzg4NTktMiBJU084ODU5LTMgSVNPODg1OS00IElTTzg4NTktNQkJIFwKKyAJICAgTUFDLUNFTlRSQUxFVVJPUEUgS09JOC1SVSBJU084ODU5LTlFCQkJCSBcCisgCSAgIENQNzcwIENQNzcxIENQNzcyIENQNzczIENQNzc0CisgCistbW9kdWxlcy5zbyA6PSAkKGFkZHN1ZmZpeCAuc28sICQobW9kdWxlcykpCisrbW9kdWxlcy5zbyA6PSAkKGFkZHN1ZmZpeCAuc28sICQobW9kdWxlcy15KSkKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3RzID0gYnVnLWljb252MSBidWctaWNvbnYyIHRzdC1sb2FkaW5nIHRzdC1lMmJpZyB0c3QtaWNvbnY0IGJ1Zy1pY29udjQgXAorLQl0c3QtaWNvbnY2IGJ1Zy1pY29udjUgYnVnLWljb252NiB0c3QtaWNvbnY3IGJ1Zy1pY29udjggYnVnLWljb252OQorKwl0c3QtaWNvbnY2IGJ1Zy1pY29udjUgYnVnLWljb252OCBidWctaWNvbnY5CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSBidWctaWNvbnY2IHRzdC1pY29udjcKKysKKyBpZmVxICgkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllcykKKyB0ZXN0cyArPSBidWctaWNvbnYzCisgZW5kaWYKK0BAIC0xMjcsMTMgKzEzMiwxMyBAQCBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgUnVsZSB0byBnZW5lcmF0ZSB0aGUgc2hhcmVkIG9iamVjdHMuCisgY2hhcm1hcHMgPSAuLi9sb2NhbGVkYXRhL2NoYXJtYXBzCisgLWluY2x1ZGUgJChvYmpwZngpaWNvbnYtcnVsZXMKKy1leHRyYS1tb2R1bGVzLWxlZnQgOj0gJChtb2R1bGVzKQorK2V4dHJhLW1vZHVsZXMtbGVmdCA6PSAkKG1vZHVsZXMteSkKKyBpbmNsdWRlIGV4dHJhLW1vZHVsZS5taworIAorIAorIGV4dHJhLW9ianMJKz0gJChtb2R1bGVzLnNvKQorLWluc3RhbGwtb3RoZXJzCT0gJChhZGRwcmVmaXggJChpbnN0X2djb252ZGlyKS8sICQobW9kdWxlcy5zbykpCVwKKy0JCSAgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzCisraW5zdGFsbC1vdGhlcnMteSArPSAkKGFkZHByZWZpeCAkKGluc3RfZ2NvbnZkaXIpLywgJChtb2R1bGVzLnNvKSkKKytpbnN0YWxsLW90aGVycy0kKE9QVElPTl9FR0xJQkNfQ0hBUlNFVFMpICs9ICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcworIAorICMgV2UgY2FuIGJ1aWxkIHRoZSBjb252ZXJzaW9uIHRhYmxlcyBmb3IgbnVtZXJvdXMgY2hhcnNldHMgYXV0b21hdGljYWxseS4KKyAKK0BAIC0yMDEsNyArMjA2LDcgQEAgYmVmb3JlLWNvbXBpbGUgKz0gJChhZGRwcmVmaXggJChvYmpwZngpLCQoZ2VuZXJhdGVkLW1vZHVsZXM6PS5oKSkKKyBpZm5kZWYgYXZvaWQtZ2VuZXJhdGVkCisgJChvYmpwZngpaWNvbnYtcnVsZXM6IE1ha2VmaWxlCisgCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorLQl7IGVjaG8gJChmaWx0ZXItb3V0IGxpYiUsICQobW9kdWxlcykpOyBcCisrCXsgZWNobyAkKGZpbHRlci1vdXQgbGliJSwgJChtb2R1bGVzLXkpKTsgXAorIAkgIGVjaG8gOGJpdCAkKGdlbi04Yml0LW1vZHVsZXMpOyBcCisgCSAgZWNobyA4Yml0LWdhcCAkKGdlbi04Yml0LWdhcC1tb2R1bGVzKTsgfSB8IFwKKyAJTENfQUxMPUMgXAorQEAgLTI0NSw3ICsyNTAsNyBAQCAkKGFkZHByZWZpeCAkKGluc3RfZ2NvbnZkaXIpLywgJChtb2R1bGVzLnNvKSk6IFwKKyAJJChkby1pbnN0YWxsLXByb2dyYW0pCisgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzOiBnY29udi1tb2R1bGVzICQoK2ZvcmNlKQorIAkkKGRvLWluc3RhbGwpCistaWZlcSAobm8sJChjcm9zcy1jb21waWxpbmcpKQorKyMgZWdsaWJjOiBpZmVxIChubywkKGNyb3NzLWNvbXBpbGluZykpCisgIyBVcGRhdGUgdGhlICQocHJlZml4KS9saWIvZ2NvbnYvZ2NvbnYtbW9kdWxlcy5jYWNoZSBmaWxlLiBUaGlzIGlzIG5lY2Vzc2FyeQorICMgaWYgdGhpcyBsaWJjIGhhcyBtb3JlIGdjb252IG1vZHVsZXMgdGhhbiB0aGUgcHJldmlvdXNseSBpbnN0YWxsZWQgb25lLgorIAlpZiB0ZXN0IC1mICIkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMuY2FjaGUiOyB0aGVuIFwKK0BAIC0yNTQsOSArMjU5LDkgQEAgaWZlcSAobm8sJChjcm9zcy1jb21waWxpbmcpKQorIAkgICAkKGNvbW1vbi1vYmpwZngpaWNvbnYvaWNvbnZjb25maWcgXAorIAkgICAgICQoYWRkcHJlZml4IC0tcHJlZml4PSwkKGluc3RhbGxfcm9vdCkpOyBcCisgCWZpCistZWxzZQorLQlAZWNobyAnKkAqQCpAIFlvdSBzaG91bGQgcmVjcmVhdGUgJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzLmNhY2hlJworLWVuZGlmCisrIyBlZ2xpYmM6IGVsc2UKKysjIGVnbGliYzoJQGVjaG8gJypAKkAqQCBZb3Ugc2hvdWxkIHJlY3JlYXRlICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcy5jYWNoZScKKysjIGVnbGliYzogZW5kaWYKKyAKKyBlbmRpZiAjIGJ1aWxkLXNoYXJlZCA9IHllcworIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0ZGIuaCBiL2luY2x1ZGUvbmV0ZGIuaAoraW5kZXggZTFmMDUxZC4uZjZkMTVhYSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbmV0ZGIuaAorKysrIGIvaW5jbHVkZS9uZXRkYi5oCitAQCAtMjMyLDYgKzIzMiwxMCBAQCBleHRlcm4gZW51bSBuc3Nfc3RhdHVzIF9uc3NfICMjIHNlcnZpY2UgIyMgX2dldGhvc3RieW5hbWUyX3IJCSAgICAgIFwKKyAJCSAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCwJICAgICAgXAorIAkJCWNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwgaW50ICplcnJub3AsCSAgICAgIFwKKyAJCQlpbnQgKmhfZXJybm9wKTsJCQkJCSAgICAgIFwKKytleHRlcm4gZW51bSBuc3Nfc3RhdHVzIF9uc3NfICMjIHNlcnZpY2UgIyMgX2dldGhvc3RieW5hbWUzX3IJCSAgICAgIFwKKysJCSAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCBzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0LCAgICAgXAorKwkJCWNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbiwgaW50ICplcnJub3AsCSAgICAgIFwKKysJCQlpbnQgKmhfZXJybm9wLCBpbnQzMl90ICp0dGxwLCBjaGFyICoqY2Fub25wKTsgICAgICAgICBcCisgZXh0ZXJuIGVudW0gbnNzX3N0YXR1cyBfbnNzXyAjIyBzZXJ2aWNlICMjIF9nZXRob3N0YnluYW1lX3IJCSAgICAgIFwKKyAJCSAgICAgICAoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGhvc3RlbnQgKmhvc3QsIGNoYXIgKmJ1ZmZlciwgXAorIAkJCXNpemVfdCBidWZsZW4sIGludCAqZXJybm9wLCBpbnQgKmhfZXJybm9wKTsJICAgICAgXAorZGlmZiAtLWdpdCBhL2luZXQvTWFrZWZpbGUgYi9pbmV0L01ha2VmaWxlCitpbmRleCBmMWQ4NzFmLi43Y2IxNzA5IDEwMDY0NAorLS0tIGEvaW5ldC9NYWtlZmlsZQorKysrIGIvaW5ldC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGluZXQgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpbmV0CisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMjcsNyArMjksOCBAQCBoZWFkZXJzCTo9IG5ldGluZXQvZXRoZXIuaCBuZXRpbmV0L2luLmggbmV0aW5ldC9pbl9zeXN0bS5oIFwKKyAJICAgbmV0aW5ldC90Y3AuaCBuZXRpbmV0L2lwLmggJCh3aWxkY2FyZCBhcnBhLyouaCBwcm90b2NvbHMvKi5oKSBcCisgCSAgIGFsaWFzZXMuaCBpZmFkZHJzLmggbmV0aW5ldC9pcDYuaCBuZXRpbmV0L2ljbXA2LmggYml0cy9pbi5oCisgCistcm91dGluZXMgOj0gaHRvbmwgaHRvbnMJCVwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkgKz0gaHRvbmwgaHRvbnMgXAorIAkgICAgaW5ldF9sbmFvZiBpbmV0X21rYWRyCVwKKyAJICAgIGluZXRfbmV0b2YgaW5ldF9udG9hIGluZXRfbmV0IGhlcnJubyBoZXJybm8tbG9jIFwKKyAJICAgIGdldGhzdGJ5YWQgZ2V0aHN0YnlhZF9yIGdldGhzdGJ5bm0gZ2V0aHN0YnlubTIgZ2V0aHN0YnlubTJfciBcCitAQCAtMzksMTggKzQyLDIzIEBAIHJvdXRpbmVzIDo9IGh0b25sIGh0b25zCQlcCisgCSAgICBnZXRzZXJ2ZW50X3IJXAorIAkgICAgZXRoZXJfYXRvbiBldGhlcl9hdG9uX3IgZXRoZXJfaHRvbiBldGhlcl9saW5lIFwKKyAJICAgIGV0aGVyX250b2EgZXRoZXJfbnRvYV9yIGV0aGVyX250b2ggXAorLQkgICAgcmNtZCByZXhlYyBydXNlcnBhc3MgXAorIAkgICAgZ2V0bmV0Z3JlbnRfciBnZXRuZXRncmVudCBcCistCSAgICBnZXRhbGlhc2VudF9yIGdldGFsaWFzZW50IGdldGFsaWFzbmFtZSBnZXRhbGlhc25hbWVfciBcCistCSAgICBpbjZfYWRkciBnZXRuYW1laW5mbyBpZl9pbmRleCBpZmFkZHJzIGluZXQ2X29wdGlvbiBcCisrCSAgICBpbjZfYWRkciBnZXRuYW1laW5mbyBpZl9pbmRleCBpZmFkZHJzIFwKKyAJICAgIGdldGlwdjRzb3VyY2VmaWx0ZXIgc2V0aXB2NHNvdXJjZWZpbHRlciBcCistCSAgICBnZXRzb3VyY2VmaWx0ZXIgc2V0c291cmNlZmlsdGVyIGluZXQ2X29wdCBpbmV0Nl9ydGgKKysJICAgIGdldHNvdXJjZWZpbHRlciBzZXRzb3VyY2VmaWx0ZXIKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfUkNNRCkgXAorKwkgKz0gcmNtZCByZXhlYyBydXNlcnBhc3MKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfREJfQUxJQVNFUykgXAorKwkgKz0gZ2V0YWxpYXNlbnRfciBnZXRhbGlhc2VudCBnZXRhbGlhc25hbWUgZ2V0YWxpYXNuYW1lX3IKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYpIFwKKysJICs9IGluZXQ2X29wdGlvbiBpbmV0Nl9vcHQgaW5ldDZfcnRoCisgCistYXV4IDo9IGNoZWNrX3BmIGNoZWNrX25hdGl2ZSBpZnJlcQorK2F1eC0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gY2hlY2tfcGYgY2hlY2tfbmF0aXZlIGlmcmVxCisgCisgdGVzdHMgOj0gaHRvbnRlc3QgdGVzdF9pZmluZGV4IHRzdC1udG9hIHRzdC1ldGhlcl9hdG9uIHRzdC1uZXR3b3JrIFwKKy0JIHRzdC1nZXRobm0gdGVzdC1pZmFkZHJzIGJ1Zy1pZjEgdGVzdC1pbmV0Nl9vcHQgdHN0LWV0aGVyX2xpbmUgXAorKwkgdHN0LWdldGhubSB0ZXN0LWlmYWRkcnMgYnVnLWlmMSB0c3QtZXRoZXJfbGluZSBcCisgCSB0c3QtZ2V0bmkxIHRzdC1nZXRuaTIgdHN0LWluZXQ2X3J0aCB0c3QtY2hlY2tzCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2KSArPSB0ZXN0LWluZXQ2X29wdAorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9pbnRsL01ha2VmaWxlIGIvaW50bC9NYWtlZmlsZQoraW5kZXggOWVjZjhmZS4uNTg3YmMwZCAxMDA2NDQKKy0tLSBhL2ludGwvTWFrZWZpbGUKKysrKyBiL2ludGwvTWFrZWZpbGUKK0BAIC0xNiw2ICsxNiw3IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgIyBNYWtlZmlsZSBmb3IgaW50bCBzdWJkaXJlY3Rvcnk6IG1lc3NhZ2UgaGFuZGxpbmcgY29kZSBmcm9tIEdOVSBnZXR0ZXh0LgorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyBzdWJkaXIgPSBpbnRsCisgCitAQCAtNDgsNyArNDksNyBAQCBlbmRpZgorICQob2JqcGZ4KXBsdXJhbC5vOiBwbHVyYWwuYworIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCistaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKytpZmVxICh5eXllcywkKE9QVElPTl9FR0xJQkNfTE9DQUxFUykkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChidWlsZC1zaGFyZWQpKQorIGlmbmVxICgkKHN0cmlwICQoTVNHRk1UKSksOikKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC10cmFuc2xpdC5vdXQgJChvYmpwZngpdHN0LWdldHRleHQub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtZ2V0dGV4dDIub3V0ICQob2JqcGZ4KXRzdC1jb2Rlc2V0Lm91dCBcCitkaWZmIC0tZ2l0IGEvaW50bC9kY2lnZXR0ZXh0LmMgYi9pbnRsL2RjaWdldHRleHQuYworaW5kZXggOGEzZjA5MS4uZTI3MTY0OCAxMDA2NDQKKy0tLSBhL2ludGwvZGNpZ2V0dGV4dC5jCisrKysgYi9pbnRsL2RjaWdldHRleHQuYworQEAgLTEwMCwxMSArMTAwLDE1IEBAIGV4dGVybiBpbnQgZXJybm87CisgIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisgI2VuZGlmCisgI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorIAorIC8qIEhhbmRsZSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMuICAqLworICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjIGRlZmluZSBnbF9yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIF9fbGliY19yd2xvY2tfZGVmaW5lX2luaXRpYWxpemVkCisrIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZSBfX2xpYmNfcndsb2NrX2RlZmluZQorICMgZGVmaW5lIGdsX3J3bG9ja19yZGxvY2sgX19saWJjX3J3bG9ja19yZGxvY2sKKyAjIGRlZmluZSBnbF9yd2xvY2tfd3Jsb2NrIF9fbGliY19yd2xvY2tfd3Jsb2NrCisgIyBkZWZpbmUgZ2xfcndsb2NrX3VubG9jayBfX2xpYmNfcndsb2NrX3VubG9jaworQEAgLTUyMyw4ICs1MjcsMTAgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgICBzYXZlZF9lcnJubyA9IGVycm5vOworIAorICNpZmRlZiBfTElCQworLSAgX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX19saWJjX3NldGxvY2FsZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCistICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgZ2xfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfX2xpYmNfc2V0bG9jYWxlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysgIGdsX3J3bG9ja19yZGxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBlbmRpZgorICNlbmRpZgorIAorICAgZ2xfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworQEAgLTU1MCw3ICs1NTYsMTEgQEAgRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisgI2lmZGVmIEhBVkVfUEVSX1RIUkVBRF9MT0NBTEUKKyAjIGlmbmRlZiBJTl9MSUJHTE9DQUxFCisgIyAgaWZkZWYgX0xJQkMKKy0gIGxvY2FsZW5hbWUgPSBzdHJkdXBhIChfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KSk7CisrIyAgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgIGxvY2FsZW5hbWUgPSBzdHJkdXBhIChfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KSk7CisrIyAgIGVsc2UKKysgICAgICBsb2NhbGVuYW1lID0gIkMiOworKyMgICBlbmRpZgorICMgIGVsc2UKKyAgIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKyAjICAgZGVmaW5lIENBVEVHT1JZTkFNRV9JTklUSUFMSVpFRAorQEAgLTU4MSwxMCArNTkxLDEyIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICAgICAgIGVsc2UKKyAJcmV0dmFsID0gKGNoYXIgKikgKCpmb3VuZHApLT50cmFuc2xhdGlvbjsKKyAKKy0gICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgIyBpZmRlZiBfTElCQworLSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyAgZW5kaWYKKyAjIGVuZGlmCisrICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgfQorQEAgLTgzOCwxMCArODUwLDEzIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorIAkgICAgICBpZiAocGx1cmFsKQorIAkJcmV0dmFsID0gcGx1cmFsX2xvb2t1cCAoZG9tYWluLCBuLCByZXR2YWwsIHJldGxlbik7CisgCistCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjaWZkZWYgX0xJQkMKKy0JICAgICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysKKysJICAgICAgZ2xfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGVuZGlmCisgI2VuZGlmCisrCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAJICAgICAgcmV0dXJuIHJldHZhbDsKKyAJICAgIH0KKyAJfQorQEAgLTg1MCwxMCArODY1LDEyIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICByZXR1cm5fdW50cmFuc2xhdGVkOgorICAgLyogUmV0dXJuIHRoZSB1bnRyYW5zbGF0ZWQgTVNHSUQuICAqLworICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLSAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICNpZmRlZiBfTElCQworLSAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICBnbF9yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgZW5kaWYKKyAjZW5kaWYKKysgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjaWZuZGVmIF9MSUJDCisgICBpZiAoIUVOQUJMRV9TRUNVUkUpCisgICAgIHsKK0BAIC0xNTUwLDcgKzE1NjcsMTEgQEAgZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorICAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKyAgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisgIyBpZmRlZiBfTElCQworKyMgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgbG9jYWxlID0gX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSk7CisrIyAgZWxzZQorKyAgbG9jYWxlID0gIkMiOworKyMgIGVuZGlmCisgIyBlbHNlCisgICBsb2NhbGVfZGVmYXVsdGVkID0gMDsKKyAjICBpZiBIQVZFX1VTRUxPQ0FMRQorZGlmZiAtLWdpdCBhL2lvL01ha2VmaWxlIGIvaW8vTWFrZWZpbGUKK2luZGV4IDYxM2RjZTAuLjY5NzQzOWUgMTAwNjQ0CistLS0gYS9pby9NYWtlZmlsZQorKysrIGIvaW8vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBJL08gcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpbworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM2LDcgKzM4LDcgQEAgcm91dGluZXMgOj0JCQkJCQkJCVwKKyAJZnhzdGF0YXQgZnhzdGF0YXQ2NAkJCQkJCVwKKyAJc3RhdGZzIGZzdGF0ZnMgc3RhdGZzNjQgZnN0YXRmczY0CQkJCVwKKyAJc3RhdHZmcyBmc3RhdHZmcyBzdGF0dmZzNjQgZnN0YXR2ZnM2NAkJCQlcCistCXVtYXNrIGNobW9kIGZjaG1vZCBsY2htb2QgZmNobW9kYXQJCQkJXAorKwl1bWFzayBjaG1vZCBmY2htb2QgZmNobW9kYXQJCQkJCVwKKyAJbWtkaXIgbWtkaXJhdAkJCQkJCQlcCisgCW9wZW4gb3Blbl8yIG9wZW42NCBvcGVuNjRfMiBvcGVuYXQgb3BlbmF0XzIgb3BlbmF0NjQgb3BlbmF0NjRfMglcCisgCXJlYWQgd3JpdGUgbHNlZWsgbHNlZWs2NCBhY2Nlc3MgZXVpZGFjY2VzcyBmYWNjZXNzYXQJCVwKK0BAIC00OSwxMSArNTEsMTMgQEAgcm91dGluZXMgOj0JCQkJCQkJCVwKKyAJdHR5bmFtZSB0dHluYW1lX3IgaXNhdHR5CQkJCQlcCisgCWxpbmsgbGlua2F0IHN5bWxpbmsgc3ltbGlua2F0IHJlYWRsaW5rIHJlYWRsaW5rYXQJCVwKKyAJdW5saW5rIHVubGlua2F0IHJtZGlyCQkJCQkJXAorLQlmdHcgZnR3NjQgZnRzIHBvbGwgcHBvbGwJCQkJCVwKKysJcG9sbCBwcG9sbAkJCQkJCQlcCisgCXBvc2l4X2ZhZHZpc2UgcG9zaXhfZmFkdmlzZTY0CQkJCQlcCisgCXBvc2l4X2ZhbGxvY2F0ZSBwb3NpeF9mYWxsb2NhdGU2NAkJCQlcCisgCXNlbmRmaWxlIHNlbmRmaWxlNjQgXAorIAl1dGltZW5zYXQgZnV0aW1lbnMKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQlNEKSArPSBsY2htb2QKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSArPSBmdHcgZnR3NjQgZnRzCisgCisgYXV4IDo9IGhhdmVfb19jbG9leGVjCisgCitAQCAtNjQsMTggKzY4LDIyIEBAIHN0YXRpYy1vbmx5LXJvdXRpbmVzID0gc3RhdCBmc3RhdCBsc3RhdCBzdGF0NjQgZnN0YXQ2NCBsc3RhdDY0CVwKKyAJCSAgICAgICBmc3RhdGF0IGZzdGF0YXQ2NCBta25vZCBta25vZGF0CisgCisgb3RoZXJzCQk6PSBwd2QKKy10ZXN0LXNyY3MJOj0gZnR3dGVzdAorK3Rlc3Qtc3Jjcy0kKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSA6PSBmdHd0ZXN0CisgdGVzdHMJCTo9IHRlc3QtdXRpbWUgdGVzdC1zdGF0IHRlc3Qtc3RhdDIgdGVzdC1sZnMgdHN0LWdldGN3ZCBcCistCQkgICB0c3QtZmNudGwgYnVnLWZ0dzEgYnVnLWZ0dzIgYnVnLWZ0dzMgYnVnLWZ0dzQgdHN0LXN0YXR2ZnMgXAorKwkJICAgdHN0LWZjbnRsIHRzdC1zdGF0dmZzIFwKKyAJCSAgIHRzdC1vcGVuYXQgdHN0LXVubGlua2F0IHRzdC1mc3RhdGF0IHRzdC1mdXRpbWVzYXQgXAorIAkJICAgdHN0LXJlbmFtZWF0IHRzdC1mY2hvd25hdCB0c3QtZmNobW9kYXQgdHN0LWZhY2Nlc3NhdCBcCisgCQkgICB0c3Qtc3ltbGlua2F0IHRzdC1saW5rYXQgdHN0LXJlYWRsaW5rYXQgdHN0LW1rZGlyYXQgXAorLQkJICAgdHN0LW1rbm9kYXQgdHN0LW1rZmlmb2F0IHRzdC10dHluYW1lX3IgYnVnLWZ0dzUgXAorKwkJICAgdHN0LW1rbm9kYXQgdHN0LW1rZmlmb2F0IHRzdC10dHluYW1lX3IgXAorIAkJICAgdHN0LXBvc2l4X2ZhbGxvY2F0ZQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpICs9IGJ1Zy1mdHcxIGJ1Zy1mdHcyIGJ1Zy1mdHczIGJ1Zy1mdHc0IFwKKysJCQkJICAgIGJ1Zy1mdHc1CisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19GVFJBVkVSU0UpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZnR3dGVzdC5vdXQKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL2xpYmlkbi9NYWtlZmlsZSBiL2xpYmlkbi9NYWtlZmlsZQoraW5kZXggOTQwZmE1Mi4uNDNhYWQwYyAxMDA2NDQKKy0tLSBhL2xpYmlkbi9NYWtlZmlsZQorKysrIGIvbGliaWRuL01ha2VmaWxlCitAQCAtMTYsNiArMTYsNyBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMgTWFrZWZpbGUgZm9yIGxpYmlkbiBzdWJkaXJlY3Rvcnkgb2YgR05VIEMgTGlicmFyeS4KKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgc3ViZGlyCTo9IGxpYmlkbgorIAorQEAgLTIzLDggKzI0LDggQEAgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgcm91dGluZXMgPSBpZG4tc3R1YgorIAorLWV4dHJhLWxpYnMJCT0gbGliY2lkbgorLWV4dHJhLWxpYnMtb3RoZXJzCT0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lETikgPSBsaWJjaWRuCisrZXh0cmEtbGlicy1vdGhlcnMteSA9ICQoZXh0cmEtbGlicy15KQorIAorIGxpYmNpZG4tcm91dGluZXMgOj0gcHVueWNvZGUgdG91dGY4IG5ma2Mgc3RyaW5ncHJlcCByZmMzNDU0IHByb2ZpbGVzIGlkbmEgXAorIAkJICAgIGljb252bWUKK2RpZmYgLS1naXQgYS9saWJpZG4vdG91dGY4LmMgYi9saWJpZG4vdG91dGY4LmMKK2luZGV4IGM3ZTY3Y2EuLjYyZGY0NzggMTAwNjQ0CistLS0gYS9saWJpZG4vdG91dGY4LmMKKysrKyBiL2xpYmlkbi90b3V0ZjguYworQEAgLTMzLDYgKzMzLDExIEBACisgLyogR2V0IHN0cmxlbi4gKi8KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrLyogR2V0IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworIC8qIEdldCBpY29udl9zdHJpbmcuICovCisgI2luY2x1ZGUgImljb252bWUuaCIKKyAKK0BAIC00Nyw3ICs1MiwxMSBAQAorICNlbmRpZgorIAorICNpZmRlZiBfTElCQworLSMgZGVmaW5lIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSBubF9sYW5naW5mbyAoQ09ERVNFVCkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgIGRlZmluZSBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0KCkgbmxfbGFuZ2luZm8gKENPREVTRVQpCisrIyBlbHNlCisrIyAgZGVmaW5lIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQoKSAiQU5TSV9YMy40LTE5NjgiCisrIyBlbmRpZgorICNlbHNlCisgLyoqCisgICogc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCAtIHJldHVybiBjaGFyc2V0IHVzZWQgaW4gY3VycmVudCBsb2NhbGUKK2RpZmYgLS1naXQgYS9saWJpby9NYWtlZmlsZSBiL2xpYmlvL01ha2VmaWxlCitpbmRleCA3YjNiY2Y5Li4yN2M5MTg2IDEwMDY0NAorLS0tIGEvbGliaW8vTWFrZWZpbGUKKysrKyBiL2xpYmlvL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVNwZWNpZmljIG1ha2VmaWxlIGZvciBsaWJpby4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBsaWJpbworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDE2ICsyOSwxMyBAQCBoZWFkZXJzCTo9IHN0ZGlvLmggbGliaW8uaCBfR19jb25maWcuaCBiaXRzL3N0ZGlvLmggYml0cy9zdGRpby1sb2NrLmggXAorIAorIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJZmlsZWRvYWxsb2MgaW9mY2xvc2UgaW9mZG9wZW4gaW9mZmx1c2ggaW9mZ2V0cG9zIGlvZmdldHMgaW9mb3BlbiAgICAgIFwKKy0JaW9mb3BuY29vayBpb2ZwdXRzIGlvZnJlYWQgaW9mc2V0cG9zIGlvZnRlbGwgd2ZpbGVkb2FsbG9jCSAgICAgIFwKKysJaW9mb3BuY29vayBpb2ZwdXRzIGlvZnJlYWQgaW9mc2V0cG9zIGlvZnRlbGwJCQkgICAgICBcCisgCWlvZndyaXRlIGlvZ2V0ZGVsaW0gaW9nZXRsaW5lIGlvZ2V0cyBpb3BhZG4gaW9wb3BlbiBpb3B1dHMJICAgICAgXAorIAlpb3NlZWtvZmYgaW9zZWVrcG9zIGlvc2V0YnVmZmVyIGlvc2V0dmJ1ZiBpb3VuZ2V0YwkJICAgICAgXAorIAlpb3ZzcHJpbnRmIGlvdnNzY2FuZgkJCQkJCSAgICAgIFwKKyAJaW9mZ2V0cG9zNjQgaW9mb3BlbjY0IGlvZnNldHBvczY0CQkJCSAgICAgIFwKKy0JZnB1dHdjIGZwdXR3Y191IGdldHdjIGdldHdjX3UgZ2V0d2NoYXIgZ2V0d2NoYXJfdSBpb2ZnZXR3cyBpb2ZnZXR3c191IFwKKy0JaW9mcHV0d3MgaW9mcHV0d3NfdSBpb2dldHdsaW5lIGlvd3BhZG4gaW91bmdldHdjIHB1dHdjIHB1dHdjX3UJICAgICAgXAorLQlwdXR3Y2hhciBwdXR3Y2hhcl91IHB1dGNoYXIgcHV0Y2hhcl91IGZ3cHJpbnRmIHN3cHJpbnRmIHZ3cHJpbnRmICAgICAgXAorLQl3cHJpbnRmIHdzY2FuZiBmd3NjYW5mIHZ3c2NhbmYgdnN3cHJpbnRmIGlvdnN3c2NhbmYgc3dzY2FuZiB3Z2Vub3BzICAgXAorLQl3c3Ryb3BzIHdmaWxlb3BzIGlvZndpZGUgZndpZGUgd21lbXN0cmVhbQkJCSAgICAgIFwKKysJcHV0Y2hhciBwdXRjaGFyX3UJCQkJCQkgICAgICBcCisrCWlvZndpZGUJCQkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgCWNsZWFyZXJyIGZlb2YgZmVycm9yIGZpbGVubyBmcHV0YyBmcmVvcGVuIGZzZWVrIGdldGMgZ2V0Y2hhcgkgICAgICBcCisgCW1lbXN0cmVhbSBwY2xvc2UgcHV0YyBwdXRjaGFyIHJld2luZCBzZXRidWYgc2V0bGluZWJ1ZiB2YXNwcmludGYgICAgICBcCitAQCAtNDgsMjQgKzQ3LDQ5IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgCWxpYmNfZmF0YWwgZm1lbW9wZW4gb2xkZm1lbW9wZW4KKyAKKy10ZXN0cyA9IHRzdF9zd3ByaW50ZiB0c3Rfd3ByaW50ZiB0c3Rfc3dzY2FuZiB0c3Rfd3NjYW5mIHRzdF9nZXR3YyB0c3RfcHV0d2MgICBcCistCXRzdF93cHJpbnRmMiB0c3Qtd2lkZXRleHQgdGVzdC1mbWVtb3BlbiB0c3QtZXh0IHRzdC1leHQyIFwKKy0JdHN0LWZnZXR3cyB0c3QtdW5nZXR3YzEgdHN0LXVuZ2V0d2MyIHRzdC1zd3NjYW5mIHRzdC1zc2NhbmYJICAgICAgXAorLQl0c3QtbW1hcC1zZXR2YnVmIGJ1Zy11bmdldHdjMSBidWctdW5nZXR3YzIgdHN0LWF0aW1lIHRzdC1lb2YgICAgICAgICAgXAorLQl0c3QtZnJlb3BlbiBidWctcmV3aW5kIGJ1Zy1yZXdpbmQyIGJ1Zy11bmdldGMgYnVnLWZzZWVrIFwKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPQkJCQkgICAgICBcCisrCXdmaWxlZG9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCWlvd3BhZG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXN3cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXZzd3ByaW50ZiBpb3Zzd3NjYW5mIHN3c2NhbmYgd2dlbm9wcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXdzdHJvcHMgd2ZpbGVvcHMgd21lbXN0cmVhbQorK3JvdXRpbmVzLSQoY2FsbCBvcHRpb24tZGlzYWJsZWQsIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPQkgICAgICBcCisrCXdkdW1teWZpbGVvcHMKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSArPQkJCQkgICAgICBcCisrCWZwdXR3YyBmcHV0d2NfdSBnZXR3YyBnZXR3Y191IGdldHdjaGFyIGdldHdjaGFyX3UgaW9mZ2V0d3MgaW9mZ2V0d3NfdSBcCisrCWlvZnB1dHdzIGlvZnB1dHdzX3UgaW9nZXR3bGluZSBpb3VuZ2V0d2MgcHV0d2MgcHV0d2NfdSAgICAgICAgICAgICAgICBcCisrCXB1dHdjaGFyIHB1dHdjaGFyX3UgZndwcmludGYgdndwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCXdwcmludGYgd3NjYW5mIGZ3c2NhbmYgdndzY2FuZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCWZ3aWRlCisrCisrdGVzdHMgPSB0ZXN0LWZtZW1vcGVuIHRzdC1leHQgdHN0LWV4dDIgXAorKwl0c3QtbW1hcC1zZXR2YnVmIHRzdC1hdGltZSB0c3QtZW9mIFwKKysJdHN0LWZyZW9wZW4gYnVnLXVuZ2V0YyBidWctZnNlZWsgXAorIAl0c3QtbW1hcC1lb2ZzeW5jIHRzdC1tbWFwLWZmbHVzaHN5bmMgYnVnLW1tYXAtZmZsdXNoIFwKKy0JdHN0LW1tYXAyLWVvZnN5bmMgdHN0LW1tYXAtb2ZmZW5kIGJ1Zy1mb3BlbmErIGJ1Zy13ZmZsdXNoIFwKKy0JYnVnLXVuZ2V0YzIgYnVnLWZ0ZWxsIGJ1Zy11bmdldGMzIGJ1Zy11bmdldGM0IHRzdC1mb3BlbmxvYzIgXAorKwl0c3QtbW1hcDItZW9mc3luYyB0c3QtbW1hcC1vZmZlbmQgYnVnLWZvcGVuYSsgXAorKwlidWctdW5nZXRjMiBidWctdW5nZXRjMyBidWctdW5nZXRjNCBcCisgCXRzdC1tZW1zdHJlYW0xIHRzdC1tZW1zdHJlYW0yIFwKKy0JdHN0LXdtZW1zdHJlYW0xIHRzdC13bWVtc3RyZWFtMiBcCistCWJ1Zy1tZW1zdHJlYW0xIGJ1Zy13bWVtc3RyZWFtMSBcCistCXRzdC1zZXR2YnVmMSB0c3QtcG9wZW4xIHRzdC1mZ2V0d2MgYnVnLXdzZXRwb3MgdHN0LWZzZWVrIFwKKy0JdHN0LWZ3cml0ZS1lcnJvciB0c3QtZnRlbGwtcGFydGlhbC13aWRlIHRzdC1mdGVsbC1hY3RpdmUtaGFuZGxlciBcCistCXRzdC1mdGVsbC1hcHBlbmQgdHN0LWZwdXR3cworKwlidWctbWVtc3RyZWFtMSB0c3QtcG9wZW4xIHRzdC1md3JpdGUtZXJyb3IgXAorKwl0c3QtZnRlbGwtYWN0aXZlLWhhbmRsZXIgdHN0LWZ0ZWxsLWFwcGVuZAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkrPSB0c3Qtc3dzY2FuZiB0c3QtZmdldHdzIHRzdC1zZXR2YnVmMSBcCisrCXRzdC11bmdldHdjMSB0c3QtdW5nZXR3YzIgYnVnLWZ0ZWxsIGJ1Zy11bmdldHdjMiBcCisrCXRzdC13aWRldGV4dCB0c3QtZnB1dHdzCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgXAorKwkrPSBidWctcmV3aW5kIGJ1Zy1yZXdpbmQyIGJ1Zy11bmdldHdjMSBcCisrCWJ1Zy13ZmZsdXNoIGJ1Zy13bWVtc3RyZWFtMSB0c3QtZm9wZW5sb2MyIFwKKysJdHN0X2dldHdjIFwKKysJdHN0X3B1dHdjIHRzdF93cHJpbnRmIHRzdF93cHJpbnRmMiB0c3Rfd3NjYW5mIFwKKysJdHN0LWZnZXR3YyBidWctd3NldHBvcyB0c3QtZnNlZWsgdHN0LWZ0ZWxsLXBhcnRpYWwtd2lkZQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJKz0gdHN0X3N3cHJpbnRmIHRzdF9zd3NjYW5mIFwKKysJdHN0LXNzY2FuZiBcCisrCXRzdC13bWVtc3RyZWFtMSB0c3Qtd21lbXN0cmVhbTIKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgQWRkIHRlc3QtZm9wZW5sb2Mgb25seSBpZiBzaGFyZWQgbGlicmFyeSBpcyBlbmFibGVkIHNpbmNlIGl0IGRlcGVuZHMgb24KKyAjIHNoYXJlZCBsb2NhbGVkYXRhIG9iamVjdHMuCistdGVzdHMgKz0gdHN0LWZvcGVubG9jCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSB0c3QtZm9wZW5sb2MKKyBlbmRpZgorIHRlc3Qtc3JjcyA9IHRlc3QtZnJlb3BlbgorIAorQEAgLTE2NCwxMyArMTg4LDE3IEBAIHNoYXJlZC1vbmx5LXJvdXRpbmVzID0gb2xkaW9mb3BlbiBvbGRpb2Zkb3BlbiBvbGRpb2ZjbG9zZSBvbGRmaWxlb3BzCVwKKyAJCSAgICAgICBvbGRpb2ZzZXRwb3M2NAorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRlc3QtZnJlb3Blbi5vdXQKKytlbmRpZgorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICMgUnVuIHRzdC1mb3BlbmxvYy1jbXAub3V0IGFuZCB0c3Qtb3BlbmxvYy1tZW0ub3V0IG9ubHkgaWYgc2hhcmVkCisgIyBsaWJyYXJ5IGlzIGVuYWJsZWQgc2luY2UgdGhleSBkZXBlbmQgb24gdHN0LWZvcGVubG9jLm91dC4KKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1mb3BlbmxvYy1jbXAub3V0ICQob2JqcGZ4KXRzdC1mb3BlbmxvYy1tZW0ub3V0CisgZW5kaWYKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL2xpYmlvL19fZnB1cmdlLmMgYi9saWJpby9fX2ZwdXJnZS5jCitpbmRleCAwNjVjZjYxLi5lMzJhM2U5IDEwMDY0NAorLS0tIGEvbGliaW8vX19mcHVyZ2UuYworKysrIGIvbGliaW8vX19mcHVyZ2UuYworQEAgLTIxLDcgKzIxLDcgQEAKKyB2b2lkCisgX19mcHVyZ2UgKEZJTEUgKmZwKQorIHsKKy0gIGlmIChmcC0+X21vZGUgPiAwKQorKyAgaWYgKF9JT19pc193aWRlIChmcCkpCisgICAgIHsKKyAgICAgICAvKiBXaWRlLWNoYXIgc3RyZWFtLiAgKi8KKyAgICAgICBpZiAoX0lPX2luX2JhY2t1cCAoZnApKQorZGlmZiAtLWdpdCBhL2xpYmlvL2ZpbGVvcHMuYyBiL2xpYmlvL2ZpbGVvcHMuYworaW5kZXggY2JjZDZmNS4uMTllNDNjMiAxMDA2NDQKKy0tLSBhL2xpYmlvL2ZpbGVvcHMuYworKysrIGIvbGliaW8vZmlsZW9wcy5jCitAQCAtMzksNiArMzksNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpZiBfTElCQworICMgaW5jbHVkZSAiLi4vd2NzbWJzL3djc21ic2xvYWQuaCIKK0BAIC0xNzMsNyArMTc0LDcgQEAgX0lPX25ld19maWxlX2Nsb3NlX2l0IChfSU9fRklMRSAqZnApCisgCisgICAvKiBGcmVlIGJ1ZmZlci4gKi8KKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCistICBpZiAoZnAtPl9tb2RlID4gMCkKKysgIGlmIChfSU9faXNfd2lkZSAoZnApKQorICAgICB7CisgICAgICAgaWYgKF9JT19oYXZlX3diYWNrdXAgKGZwKSkKKyAJX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChmcCk7CitAQCAtMzQ4LDYgKzM0OSw3IEBAIF9JT19uZXdfZmlsZV9mb3BlbiAoX0lPX0ZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICBjcyA9IHN0cnN0ciAobGFzdF9yZWNvZ25pemVkICsgMSwgIixjY3M9Iik7CisgICAgICAgaWYgKGNzICE9IE5VTEwpCisgCXsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIAkgIC8qIFllcC4gIExvYWQgdGhlIGFwcHJvcHJpYXRlIGNvbnZlcnNpb25zIGFuZCBzZXQgdGhlIG9yaWVudGF0aW9uCisgCSAgICAgdG8gd2lkZS4gICovCisgCSAgc3RydWN0IGdjb252X2ZjdHMgZmN0czsKK0BAIC00MTgsNiArNDIwLDEyIEBAIF9JT19uZXdfZmlsZV9mb3BlbiAoX0lPX0ZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9kZSwKKyAKKyAJICAvKiBTZXQgdGhlIG1vZGUgbm93LiAgKi8KKyAJICByZXN1bHQtPl9tb2RlID0gMTsKKysjZWxzZQorKyAgICAgICAgICAvKiBUcmVhdCB0aGlzIGFzIGlmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGdpdmVuIGNoYXJhY3RlciBzZXQuICAqLworKyAgICAgICAgICAodm9pZCkgX0lPX2ZpbGVfY2xvc2VfaXQgKGZwKTsKKysgICAgICAgICAgX19zZXRfZXJybm8gKEVJTlZBTCk7CisrICAgICAgICAgIHJldHVybiBOVUxMOworKyNlbmRpZgorIAl9CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJpby9pb2Z3aWRlLmMgYi9saWJpby9pb2Z3aWRlLmMKK2luZGV4IDBjMTc1ZDEuLjNlOWY1MmIgMTAwNjQ0CistLS0gYS9saWJpby9pb2Z3aWRlLmMKKysrKyBiL2xpYmlvL2lvZndpZGUuYworQEAgLTI2LDYgKzI2LDcgQEAKKyAKKyAjaW5jbHVkZSA8bGliaW9QLmg+CisgI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgaW5jbHVkZSA8ZGxmY24uaD4KKyAjIGluY2x1ZGUgPHdjaGFyLmg+CisgI2VuZGlmCitAQCAtNDMsNiArNDQsOCBAQAorICNlbmRpZgorIAorIAorKyNpZiAhIGRlZmluZWQgX0xJQkMgfHwgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKworIC8qIFByb3RvdHlwZXMgb2YgbGliaW8ncyBjb2RlY3Z0IGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCBkb19vdXQgKHN0cnVjdCBfSU9fY29kZWN2dCAqY29kZWN2dCwKKyAJCQkJICAgICBfX21ic3RhdGVfdCAqc3RhdGVwLAorQEAgLTQ5OSwzICs1MDIsMjYgQEAgZG9fbWF4X2xlbmd0aCAoc3RydWN0IF9JT19jb2RlY3Z0ICpjb2RlY3Z0KQorICAgcmV0dXJuIE1CX0NVUl9NQVg7CisgI2VuZGlmCisgfQorKworKyNlbHNlCisrLyogT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQuICAqLworKworKyN1bmRlZiBfSU9fZndpZGUKKytpbnQKKytfSU9fZndpZGUgKGZwLCBtb2RlKQorKyAgICAgX0lPX0ZJTEUgKmZwOworKyAgICAgaW50IG1vZGU7CisreworKyAgLyogRGllIGhlbHBmdWxseSBpZiB0aGUgdXNlciB0cmllcyB0byBjcmVhdGUgYSB3aWRlIHN0cmVhbTsgSQorKyAgICAgZGlzYmVsaWV2ZSB0aGF0IG1vc3QgdXNlcnMgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisrICAgICAnZndpZGUgKGZwLCAxKScuICAqLworKyAgYXNzZXJ0IChtb2RlIDw9IDApOworKworKyAgLyogV2UgY2FuIG9ubHkgbWFrZSBzdHJlYW1zIGJ5dGUtb3JpZW50ZWQsIHdoaWNoIGlzIHRyaXZpYWwuICAqLworKyAgaWYgKG1vZGUgPCAwKQorKyAgICBmcC0+X21vZGUgPSAtMTsKKysKKysgIHJldHVybiBmcC0+X21vZGU7CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmlvL2lvc2Vla29mZi5jIGIvbGliaW8vaW9zZWVrb2ZmLmMKK2luZGV4IDExNzY1Y2YuLjE1ZDYyMzAgMTAwNjQ0CistLS0gYS9saWJpby9pb3NlZWtvZmYuYworKysrIGIvbGliaW8vaW9zZWVrb2ZmLmMKK0BAIC02MCw3ICs2MCw3IEBAIF9JT19zZWVrb2ZmX3VubG9ja2VkIChmcCwgb2Zmc2V0LCBkaXIsIG1vZGUpCisgCSAgZWxzZQorIAkgICAgYWJvcnQgKCk7CisgCX0KKy0gICAgICBpZiAoX0lPX2Z3aWRlIChmcCwgMCkgPCAwKQorKyAgICAgIGlmICghIF9JT19pc193aWRlIChmcCkpCisgCV9JT19mcmVlX2JhY2t1cF9hcmVhIChmcCk7CisgICAgICAgZWxzZQorIAlfSU9fZnJlZV93YmFja3VwX2FyZWEgKGZwKTsKK2RpZmYgLS1naXQgYS9saWJpby9pb3NlZWtwb3MuYyBiL2xpYmlvL2lvc2Vla3Bvcy5jCitpbmRleCBhNzY1MmExLi42OTM4YjY4IDEwMDY0NAorLS0tIGEvbGliaW8vaW9zZWVrcG9zLmMKKysrKyBiL2xpYmlvL2lvc2Vla3Bvcy5jCitAQCAtMzUsNyArMzUsNyBAQCBfSU9fc2Vla3Bvc191bmxvY2tlZCAoZnAsIHBvcywgbW9kZSkKKyAgIC8qIElmIHdlIGhhdmUgYSBiYWNrdXAgYnVmZmVyLCBnZXQgcmlkIG9mIGl0LCBzaW5jZSB0aGUgX19zZWVrb2ZmCisgICAgICBjYWxsYmFjayBtYXkgbm90IGtub3cgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFib3V0IGl0LgorICAgICAgVGhpcyBtYXkgYmUgb3Zlci1raWxsLCBidXQgaXQnbGwgZG8gZm9yIG5vdy4gVE9ETyAqLworLSAgaWYgKF9JT19md2lkZSAoZnAsIDApIDw9IDApCisrICBpZiAoISBfSU9faXNfd2lkZSAoZnApKQorICAgICB7CisgICAgICAgaWYgKF9JT19oYXZlX2JhY2t1cCAoZnApKQorIAlfSU9fZnJlZV9iYWNrdXBfYXJlYSAoZnApOworZGlmZiAtLWdpdCBhL2xpYmlvL2lvc2V0YnVmZmVyLmMgYi9saWJpby9pb3NldGJ1ZmZlci5jCitpbmRleCAwYTQxYzEwLi4zZDk5ZmEwIDEwMDY0NAorLS0tIGEvbGliaW8vaW9zZXRidWZmZXIuYworKysrIGIvbGliaW8vaW9zZXRidWZmZXIuYworQEAgLTI0LDYgKzI0LDggQEAKKyAgICBUaGlzIGV4Y2VwdGlvbiBhcHBsaWVzIHRvIGNvZGUgcmVsZWFzZWQgYnkgaXRzIGNvcHlyaWdodCBob2xkZXJzCisgICAgaW4gZmlsZXMgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uLiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysKKyAjaW5jbHVkZSAibGliaW9QLmgiCisgCisgdm9pZAorQEAgLTM4LDkgKzQwLDExIEBAIF9JT19zZXRidWZmZXIgKGZwLCBidWYsIHNpemUpCisgICBpZiAoIWJ1ZikKKyAgICAgc2l6ZSA9IDA7CisgICAodm9pZCkgX0lPX1NFVEJVRiAoZnAsIGJ1Ziwgc2l6ZSk7CisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGlmIChfSU9fdnRhYmxlX29mZnNldCAoZnApID09IDAgJiYgZnAtPl9tb2RlID09IDAgJiYgX0lPX0NIRUNLX1dJREUgKGZwKSkKKyAgICAgLyogV2UgYWxzbyBoYXZlIHRvIHNldCB0aGUgYnVmZmVyIHVzaW5nIHRoZSB3aWRlIGNoYXIgZnVuY3Rpb24uICAqLworICAgICAodm9pZCkgX0lPX1dTRVRCVUYgKGZwLCBidWYsIHNpemUpOworKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgICBfSU9fcmVsZWFzZV9sb2NrIChmcCk7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX0lPX3NldGJ1ZmZlcikKK2RpZmYgLS1naXQgYS9saWJpby9saWJpb1AuaCBiL2xpYmlvL2xpYmlvUC5oCitpbmRleCAwZjE2ZTJkLi5kMjYyNmQ2IDEwMDY0NAorLS0tIGEvbGliaW8vbGliaW9QLmgKKysrKyBiL2xpYmlvL2xpYmlvUC5oCitAQCAtNDQsNiArNDQsMTAgQEAKKyAvKiMgaW5jbHVkZSA8Y29tdGhyZWFkLmg+Ki8KKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bWF0aF9sZGJsX29wdC5oPgorIAorICNpbmNsdWRlICJpb2xpYmlvLmgiCitAQCAtNTIzLDggKzUyNywyMCBAQCBleHRlcm4gdm9pZCBfSU9fb2xkX2luaXQgKF9JT19GSUxFICpmcCwgaW50IGZsYWdzKSBfX1RIUk9XOworIAorIAorICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0dMSUJDUFBfVVNFX1dDSEFSX1QKKysKKysvKiBfSU9faXNfd2lkZSAoZnApIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byAnX0lPX2Z3aWRlIChmcCwgMCkgPiAwJywKKysgICBleGNlcHQgdGhhdCB3aGVuIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBpdAorKyAgIGV4cGFuZHMgdG8gYSBjb25zdGFudCwgYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHJlYWxpemUgdGhhdCBpdCBjYW4KKysgICBlbGltaW5hdGUgY29kZSB0aGF0IHJlZmVyZW5jZXMgd2lkZSBzdHJlYW0gaGFuZGxpbmcgZnVuY3Rpb25zLgorKyAgIFRoaXMsIGluIHR1cm4sIGFsbG93cyB1cyB0byBvbWl0IHRoZW0uICAqLworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrIyBkZWZpbmUgX0lPX2lzX3dpZGUoX2YpICgoX2YpLT5fbW9kZSA+IDApCisrI2Vsc2UKKysjIGRlZmluZSBfSU9faXNfd2lkZShfZikgKDApCisrI2VuZGlmCisrCisgIyBkZWZpbmUgX0lPX2RvX2ZsdXNoKF9mKSBcCistICAoKF9mKS0+X21vZGUgPD0gMAkJCQkJCQkgICAgICBcCisrICAoISBfSU9faXNfd2lkZSAoX2YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgID8gX0lPX2RvX3dyaXRlKF9mLCAoX2YpLT5fSU9fd3JpdGVfYmFzZSwJCQkJICAgICAgXAorIAkJICAoX2YpLT5fSU9fd3JpdGVfcHRyLShfZiktPl9JT193cml0ZV9iYXNlKQkJICAgICAgXAorICAgIDogX0lPX3dkb193cml0ZShfZiwgKF9mKS0+X3dpZGVfZGF0YS0+X0lPX3dyaXRlX2Jhc2UsCQkgICAgICBcCitkaWZmIC0tZ2l0IGEvbGliaW8vd2R1bW15ZmlsZW9wcy5jIGIvbGliaW8vd2R1bW15ZmlsZW9wcy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzAxNTBiOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW8vd2R1bW15ZmlsZW9wcy5jCitAQCAtMCwwICsxLDE2MSBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgbGluayB0aGUgY29kZSBpbiB0aGlzIGZpbGUgd2l0aAorKyAgIGZpbGVzIGNvbXBpbGVkIHdpdGggYSBHTlUgY29tcGlsZXIgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLAorKyAgIHRoYXQgZG9lcyBub3QgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysgICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QKKysgICBob3dldmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUKKysgICBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrICAgVGhpcyBleGNlcHRpb24gYXBwbGllcyB0byBjb2RlIHJlbGVhc2VkIGJ5IGl0cyBjb3B5cmlnaHQgaG9sZGVycworKyAgIGluIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbi4gICovCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8bGliaW9QLmg+CisrCisrc3RhdGljIHZvaWQgX19USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKytfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKHZvaWQpCisreworKyAgc3RhdGljIGNvbnN0IGNoYXIgZXJyc3RyW10KKysgICAgPSAoIlRoZSBhcHBsaWNhdGlvbiB0cmllZCB0byB1c2Ugd2lkZSBjaGFyYWN0ZXIgSS9PLCBidXQgbGliYy5zbyIKKysgICAgICAgIiB3YXMgY29tcGlsZWRcbiIKKysgICAgICAgIndpdGggdGhlIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIG9wdGlvbiBncm91cCBkaXNhYmxlZC5cbiIpOworKyAgX19saWJjX3dyaXRlIChTVERFUlJfRklMRU5PLCBlcnJzdHIsIHNpemVvZiAoZXJyc3RyKSAtIDEpOworKyAgYWJvcnQgKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrX0lPX3dmaWxlX2Rpc2FibGVkX3ZvaWRfaW50IChfSU9fRklMRSAqZnAsIGludCB4KQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9pbnRfaW50IChfSU9fRklMRSAqZnAsIGludCB4KQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSAoX0lPX0ZJTEUgKmZwKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfeHNwdXRuIChfSU9fRklMRSAqZnAsIGNvbnN0IHZvaWQgKmRhdGEsIF9JT19zaXplX3QgbikKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3hzZ2V0biAoX0lPX0ZJTEUgKmZwLCB2b2lkICpkYXRhLCBfSU9fc2l6ZV90IG4pCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX29mZjY0X3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla29mZiAoX0lPX0ZJTEUgKmZwLCBfSU9fb2ZmNjRfdCBvZmYsIGludCBkaXIsIGludCBtb2RlKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19vZmY2NF90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtwb3MgKF9JT19GSUxFICpmcCwgX0lPX29mZjY0X3QgcG9zLCBpbnQgZmxhZ3MpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX0ZJTEUgKgorK19JT193ZmlsZV9kaXNhYmxlZF9zZXRidWYgKF9JT19GSUxFICpmcCwgY2hhciAqYnVmZmVyLCBfSU9fc3NpemVfdCBsZW5ndGgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NzaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfcmVhZCAoX0lPX0ZJTEUgKmZwLCB2b2lkICpidWZmZXIsIF9JT19zc2l6ZV90IGxlbmd0aCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF93cml0ZSAoX0lPX0ZJTEUgKmZwLCBjb25zdCB2b2lkICpidWZmZXIsIF9JT19zc2l6ZV90IGxlbmd0aCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fb2ZmNjRfdAorK19JT193ZmlsZV9kaXNhYmxlZF9zZWVrIChfSU9fRklMRSAqZnAsIF9JT19vZmY2NF90IG9mZnNldCwgaW50IG1vZGUpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX2Nsb3NlIChfSU9fRklMRSAqZnApCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgaW50CisrX0lPX3dmaWxlX2Rpc2FibGVkX3N0YXQgKF9JT19GSUxFICpmcCwgdm9pZCAqYnVmKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9zaG93bWFueWMgKF9JT19GSUxFICpmcCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyB2b2lkCisrX0lPX3dmaWxlX2Rpc2FibGVkX2ltYnVlIChfSU9fRklMRSAqZnAsIHZvaWQgKmxvY2FsZSkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX0lPX2p1bXBfdCBfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQgPQorK3sKKysgIEpVTVBfSU5JVF9EVU1NWSwKKysgIEpVTVBfSU5JVChmaW5pc2gsIF9JT193ZmlsZV9kaXNhYmxlZF92b2lkX2ludCksCisrICBKVU1QX0lOSVQob3ZlcmZsb3csIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfaW50KSwKKysgIEpVTVBfSU5JVCh1bmRlcmZsb3csIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQodWZsb3csIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQocGJhY2tmYWlsLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X2ludCksCisrICBKVU1QX0lOSVQoeHNwdXRuLCBfSU9fd2ZpbGVfZGlzYWJsZWRfeHNwdXRuKSwKKysgIEpVTVBfSU5JVCh4c2dldG4sIF9JT193ZmlsZV9kaXNhYmxlZF94c2dldG4pLAorKyAgSlVNUF9JTklUKHNlZWtvZmYsIF9JT193ZmlsZV9kaXNhYmxlZF9zZWVrb2ZmKSwKKysgIEpVTVBfSU5JVChzZWVrcG9zLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla3BvcyksCisrICBKVU1QX0lOSVQoc2V0YnVmLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2V0YnVmKSwKKysgIEpVTVBfSU5JVChzeW5jLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKGRvYWxsb2NhdGUsIF9JT193ZmlsZV9kaXNhYmxlZF9pbnRfbm9uZSksCisrICBKVU1QX0lOSVQocmVhZCwgX0lPX3dmaWxlX2Rpc2FibGVkX3JlYWQpLAorKyAgSlVNUF9JTklUKHdyaXRlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfd3JpdGUpLAorKyAgSlVNUF9JTklUKHNlZWssIF9JT193ZmlsZV9kaXNhYmxlZF9zZWVrKSwKKysgIEpVTVBfSU5JVChjbG9zZSwgX0lPX3dmaWxlX2Rpc2FibGVkX2Nsb3NlKSwKKysgIEpVTVBfSU5JVChzdGF0LCBfSU9fd2ZpbGVfZGlzYWJsZWRfc3RhdCksCisrICBKVU1QX0lOSVQoc2hvd21hbnljLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2hvd21hbnljKSwKKysgIEpVTVBfSU5JVChpbWJ1ZSwgX0lPX3dmaWxlX2Rpc2FibGVkX2ltYnVlKQorK307CisrCisrc3Ryb25nX2FsaWFzIChfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQsIF9JT193ZmlsZV9qdW1wcykKKytsaWJjX2hpZGRlbl9kYXRhX2RlZiAoX0lPX3dmaWxlX2p1bXBzKQorK3N0cm9uZ19hbGlhcyAoX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkLCBfSU9fd2ZpbGVfanVtcHNfbW1hcCkKKytzdHJvbmdfYWxpYXMgKF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCwgX0lPX3dmaWxlX2p1bXBzX21heWJlX21tYXApCitkaWZmIC0tZ2l0IGEvbG9jYWxlL0MtY3R5cGUuYyBiL2xvY2FsZS9DLWN0eXBlLmMKK2luZGV4IGFhNWYxOWYuLjA2YmUwODEgMTAwNjQ0CistLS0gYS9sb2NhbGUvQy1jdHlwZS5jCisrKysgYi9sb2NhbGUvQy1jdHlwZS5jCitAQCAtMTksOCArMTksMTEgQEAKKyAjaW5jbHVkZSAibG9jYWxlaW5mby5oIgorICNpbmNsdWRlIDxlbmRpYW4uaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICNpbmNsdWRlICJDLXRyYW5zbGl0LmgiCisrI2VuZGlmCisgCisgLyogVGhpcyB0YWJsZSdzIGVudHJpZXMgYXJlIHRha2VuIGZyb20gUE9TSVguMiBUYWJsZSAyLTYKKyAgICBgYExDX0NUWVBFIENhdGVnb3J5IERlZmluaXRpb24gaW4gdGhlIFBPU0lYIExvY2FsZScnLgorQEAgLTYzNCw2ICs2MzcsNyBAQCBjb25zdCBzdHJ1Y3QgX19sb2NhbGVfZGF0YSBfbmxfQ19MQ19DVFlQRSBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgICAgeyAud29yZCA9IEwnNycgfSwKKyAgICAgeyAud29yZCA9IEwnOCcgfSwKKyAgICAgeyAud29yZCA9IEwnOScgfSwKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSAqLworICAgICB7IC53b3JkID0gTlRSQU5TTElUIH0sCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCAqLworQEAgLTY0NCw2ICs2NDgsMjIgQEAgY29uc3Qgc3RydWN0IF9fbG9jYWxlX2RhdGEgX25sX0NfTENfQ1RZUEUgYXR0cmlidXRlX2hpZGRlbiA9CisgICAgIHsgLndzdHIgPSB0cmFuc2xpdF90b19pZHggfSwKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCAqLworICAgICB7IC53c3RyID0gKHVpbnQzMl90ICopIHRyYW5zbGl0X3RvX3RibCB9LAorKyNlbHNlCisrICAgIC8qIElmIHRoZSBsb2NhbGUgY29kZSBpc24ndCBlbmFibGVkLCB3ZSBkb24ndCBoYXZlIHRoZQorKyAgICAgICB0cmFuc2xpdGVyYXRpb24gY29kZSBpbiBpY29udi9nY29udl90cmFucy5jIGFueXdheSwgc28gdGhlcmUncworKyAgICAgICBubyBuZWVkIGZvciB0aGUgdHJhbnNsaXRlcmF0aW9uIHRhYmxlcyBoZXJlLiAgV2UnbGwgZmFsbCBiYWNrCisrICAgICAgIG9uIHRoZSBkZWZhdWx0IG1pc3NpbmcgcmVwbGFjZW1lbnQsICc/Jy4gICovCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSAqLworKyAgICB7IC53b3JkID0gMCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFggKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0ZST01fVEJMICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFggKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyNlbmRpZgorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTiAqLworICAgICB7IC53b3JkID0gMSB9LAorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL01ha2VmaWxlIGIvbG9jYWxlL01ha2VmaWxlCitpbmRleCBmMWI0MzQzLi41OTlhMWE5IDEwMDY0NAorLS0tIGEvbG9jYWxlL01ha2VmaWxlCisrKysgYi9sb2NhbGUvTWFrZWZpbGUKK0BAIC0xOCwyNyArMTgsNDMgQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgbG9jYWxlcy4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBsb2NhbGUKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQk9IGxvY2FsZS5oIGJpdHMvbG9jYWxlLmggbGFuZ2luZm8uaCB4bG9jYWxlLmgKKy1yb3V0aW5lcwk9IHNldGxvY2FsZSBmaW5kbG9jYWxlIGxvYWRsb2NhbGUgbG9hZGFyY2hpdmUgXAorLQkJICBsb2NhbGVjb252IG5sX2xhbmdpbmZvIG5sX2xhbmdpbmZvX2wgbWJfY3VyX21heCBcCistCQkgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUKKy10ZXN0cwkJPSB0c3QtQy1sb2NhbGUgdHN0LWxvY25hbWUgdHN0LWR1cGxvY2FsZQorKyMgY2F0bmFtZXMgaXMgbmVlZGVkIGJ5IE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgYW5kIGJ5IHRoZSAnaW50bCcgY29kZS4KKysjIElmIHdlIHB1dCB0aGUgbGF0dGVyIGluIGFuIG9wdGlvbiBncm91cCwgdG9vLCB3ZSBjYW4gb21pdCBjYXRuYW1lcworKyMgd2hlbiBib3RoIG9wdGlvbiBncm91cHMgYXJlIGRpc2FibGVkLiAgbGlic3RkYysrLXYzIG5lZWRzIG1iX2N1cl9tYXguCisrcm91dGluZXMteSAgICAgIDo9IGNhdG5hbWVzIG1iX2N1cl9tYXgKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHNldGxvY2FsZSBmaW5kbG9jYWxlIGxvYWRsb2NhbGUgbG9hZGFyY2hpdmUgXAorKwkJICAgbG9jYWxlY29udiBubF9sYW5naW5mbyBubF9sYW5naW5mb19sIFwKKysJCSAgIG5ld2xvY2FsZSBkdXBsb2NhbGUgZnJlZWxvY2FsZSB1c2Vsb2NhbGUKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorK3JvdXRpbmVzLXkJKz0gZHVtbXktc2V0bG9jYWxlCisrZW5kaWYKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHRzdC1DLWxvY2FsZSB0c3QtbG9jbmFtZSB0c3QtZHVwbG9jYWxlCisgY2F0ZWdvcmllcwk9IGN0eXBlIG1lc3NhZ2VzIG1vbmV0YXJ5IG51bWVyaWMgdGltZSBwYXBlciBuYW1lIFwKKyAJCSAgYWRkcmVzcyB0ZWxlcGhvbmUgbWVhc3VyZW1lbnQgaWRlbnRpZmljYXRpb24gY29sbGF0ZQorLWF1eAkJPSAkKGNhdGVnb3JpZXM6JT1sYy0lKSAkKGNhdGVnb3JpZXM6JT1DLSUpIFNZU19saWJjIENfbmFtZSBcCistCQkgIHhsb2NhbGUgbG9jYWxlbmFtZSBnbG9iYWwtbG9jYWxlIGNvbGwtbG9va3VwCistb3RoZXJzCQk9IGxvY2FsZWRlZiBsb2NhbGUKKysjIEMtbWVzc2FnZXMgYmVsb25ncyBpbiBhbiBpbnRsIG9wdGlvbiBncm91cC4KKythdXgteQkJOj0gQy1jdHlwZSBDLXRpbWUgXAorKwkJICAgU1lTX2xpYmMgQ19uYW1lIHhsb2NhbGUgZ2xvYmFsLWxvY2FsZSBjb2xsLWxvb2t1cAorK2F1eC0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9ICQoZmlsdGVyLW91dCAkKGF1eC15KSwgXAorKwkgICAgICAgICAgICAgICAgICAgICAgICAkKGNhdGVnb3JpZXM6JT1sYy0lKSAkKGNhdGVnb3JpZXM6JT1DLSUpKSBcCisrCSAgICAgICAgICAgbG9jYWxlbmFtZQorK290aGVycy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpID0gbG9jYWxlZGVmIGxvY2FsZQorICNvdGhlcnMtc3RhdGljCT0gbG9jYWxlZGVmIGxvY2FsZQorLWluc3RhbGwtYmluCT0gbG9jYWxlZGVmIGxvY2FsZQorLWV4dHJhLW9ianMJPSAkKGxvY2FsZWRlZi1tb2R1bGVzOj0ubykgJChsb2NhbGVkZWYtYXV4Oj0ubykgXAorK2luc3RhbGwtYmluCT0gJChvdGhlcnMteSkKKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJPSAkKGxvY2FsZWRlZi1tb2R1bGVzOj0ubykgJChsb2NhbGVkZWYtYXV4Oj0ubykgXAorIAkJICAkKGxvY2FsZS1tb2R1bGVzOj0ubykgJChsaWItbW9kdWxlczo9Lm8pCisgCistZXh0cmEtbGlicwk9IGxpYkJyb2tlbkxvY2FsZQorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSA9IGxpYkJyb2tlbkxvY2FsZQorK2V4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzLXkpCisgCisgbGliQnJva2VuTG9jYWxlLXJvdXRpbmVzID0gYnJva2VuX2N1cl9tYXgKKyAKK0BAIC05Myw2ICsxMDksOSBAQCBDUFBGTEFHUy1sb2NhbGUtcHJvZ3JhbXMgPSAtRExPQ0FMRV9QQVRIPSckKGxvY2FsZXBhdGgpJyBcCisgQ0ZMQUdTLWNoYXJtYXAuYyA9IC1Xbm8td3JpdGUtc3RyaW5ncyAtV25vLWNoYXItc3Vic2NyaXB0cworIENGTEFHUy1sb2NmaWxlLmMgPSAtV25vLXdyaXRlLXN0cmluZ3MgLVduby1jaGFyLXN1YnNjcmlwdHMKKyBDRkxBR1MtY2hhcm1hcC1kaXIuYyA9IC1Xbm8td3JpdGUtc3RyaW5ncworK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19TUEFXTikpCisrQ0ZMQUdTLWNoYXJtYXAtZGlyLmMgKz0gLUROT19VTkNPTVBSRVNTCisrZW5kaWYKKyAKKyAjIFNldCBsaWJvZi0qIGZvciBlYWNoIHJvdXRpbmUuCisgY3BwLXNyY3MtbGVmdCA6PSAkKGxvY2FsZWRlZi1tb2R1bGVzKSAkKGxvY2FsZWRlZi1hdXgpICQobG9jYWxlLW1vZHVsZXMpIFwKK2RpZmYgLS1naXQgYS9sb2NhbGUvY2F0bmFtZXMuYyBiL2xvY2FsZS9jYXRuYW1lcy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOWZhZDM1NworLS0tIC9kZXYvbnVsbAorKysrIGIvbG9jYWxlL2NhdG5hbWVzLmMKK0BAIC0wLDAgKzEsNDggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSAibG9jYWxlaW5mby5oIgorKworKy8qIERlZmluZSBhbiBhcnJheSBvZiBjYXRlZ29yeSBuYW1lcyAoYWxzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMpLiAgKi8KKytjb25zdCB1bmlvbiBjYXRuYW1lc3RyX3QgX25sX2NhdGVnb3J5X25hbWVzIGF0dHJpYnV0ZV9oaWRkZW4gPQorKyAgeworKyAgICB7CisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICAgICAgY2F0ZWdvcnlfbmFtZSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyAgICB9CisrICB9OworKworK2NvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfaWR4c1tfX0xDX0xBU1RdIGF0dHJpYnV0ZV9oaWRkZW4gPQorKyAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICBbY2F0ZWdvcnldID0gb2Zmc2V0b2YgKHVuaW9uIGNhdG5hbWVzdHJfdCwgQ0FUTkFNRU1GIChfX0xJTkVfXykpLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrICB9OworKworKy8qIEFuIGFycmF5IG9mIHRoZWlyIGxlbmd0aHMsIGZvciBjb252ZW5pZW5jZS4gICovCisrY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9zaXplc1tdIGF0dHJpYnV0ZV9oaWRkZW4gPQorKyAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICBbY2F0ZWdvcnldID0gc2l6ZW9mIChjYXRlZ29yeV9uYW1lKSAtIDEsCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZglERUZJTkVfQ0FURUdPUlkKKysgICAgW0xDX0FMTF0gPSBzaXplb2YgKCJMQ19BTEwiKSAtIDEKKysgIH07CitkaWZmIC0tZ2l0IGEvbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jIGIvbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjE5OTY0YQorLS0tIC9kZXYvbnVsbAorKysrIGIvbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jCitAQCAtMCwwICsxLDMzIEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKytjaGFyICoKKytzZXRsb2NhbGUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKQorK3sKKysgIGlmICghIGxvY2FsZQorKyAgICAgIHx8IGxvY2FsZVswXSA9PSAnXDAnCisrICAgICAgfHwgc3RyY21wIChsb2NhbGUsICJDIikgPT0gMAorKyAgICAgIHx8IHN0cmNtcCAobG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorKyAgICByZXR1cm4gKGNoYXIgKikgIkMiOworKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrbGliY19oaWRkZW5fZGVmIChzZXRsb2NhbGUpCitkaWZmIC0tZ2l0IGEvbG9jYWxlL2xvY2FsZWluZm8uaCBiL2xvY2FsZS9sb2NhbGVpbmZvLmgKK2luZGV4IGJkYWI5ZmUuLmE3NTE2YzAgMTAwNjQ0CistLS0gYS9sb2NhbGUvbG9jYWxlaW5mby5oCisrKysgYi9sb2NhbGUvbG9jYWxlaW5mby5oCitAQCAtMjMyLDcgKzIzMiw3IEBAIF9fbGliY190c2RfZGVmaW5lIChleHRlcm4sIF9fbG9jYWxlX3QsIExPQ0FMRSkKKyAgICB1bnVzZWQuICBXZSBjYW4gbWFuYWdlIHRoaXMgcGxheWluZyBzb21lIHRyaWNrcyB3aXRoIHdlYWsgcmVmZXJlbmNlcy4KKyAgICBCdXQgd2l0aCB0aHJlYWQtbG9jYWwgbG9jYWxlIHNldHRpbmdzLCBpdCBiZWNvbWVzIHF1aXRlIHVuZ2Fpbmx5IHVubGVzcworICAgIHdlIGNhbiB1c2UgX190aHJlYWQgdmFyaWFibGVzLiAgU28gb25seSBpbiB0aGF0IGNhc2UgZG8gd2UgYXR0ZW1wdCB0aGlzLiAgKi8KKy0jaWZuZGVmIFNIQVJFRAorKyNpZiAhZGVmaW5lZCBTSEFSRUQgJiYgIWRlZmluZWQgSU5fR0xJQkNfTE9DQUxFREVGCisgIyBpbmNsdWRlIDx0bHMuaD4KKyAjIGRlZmluZSBOTF9DVVJSRU5UX0lORElSRUNUCTEKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCitpbmRleCBjZjdhZGVhLi5lZjNiODExIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCitAQCAtMTksNyArMTksOSBAQAorICNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgI2luY2x1ZGUgPHNwYXduLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK0BAIC0xNTYsNiArMTU4LDcgQEAgY2hhcm1hcF9jbG9zZWRpciAoQ0hBUk1BUF9ESVIgKmNkaXIpCisgICByZXR1cm4gY2xvc2VkaXIgKGRpcik7CisgfQorIAorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworIC8qIENyZWF0ZXMgYSBzdWJwcm9jZXNzIGRlY29tcHJlc3NpbmcgdGhlIGdpdmVuIHBhdGhuYW1lLCBhbmQgcmV0dXJucworICAgIGEgc3RyZWFtIHJlYWRpbmcgaXRzIG91dHB1dCAodGhlIGRlY29tcHJlc3NlZCBkYXRhKS4gICovCisgc3RhdGljCitAQCAtMjA0LDYgKzIwNyw3IEBAIGZvcGVuX3VuY29tcHJlc3NlZCAoY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNvbXByZXNzb3IpCisgICAgIH0KKyAgIHJldHVybiBOVUxMOworIH0KKysjZW5kaWYKKyAKKyAvKiBPcGVucyBhIGNoYXJtYXAgZm9yIHJlYWRpbmcsIGdpdmVuIGl0cyBuYW1lIChub3QgYW4gYWxpYXMgbmFtZSkuICAqLworIEZJTEUgKgorQEAgLTIyNiw2ICsyMzAsNyBAQCBjaGFybWFwX29wZW4gKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgY29uc3QgY2hhciAqbmFtZSkKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKyAgICAgcmV0dXJuIHN0cmVhbTsKKyAKKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAgIG1lbWNweSAocCwgIi5neiIsIDQpOworICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImd6aXAiKTsKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKK0BAIC0yMzUsNiArMjQwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCisgICBzdHJlYW0gPSBmb3Blbl91bmNvbXByZXNzZWQgKHBhdGhuYW1lLCAiYnppcDIiKTsKKyAgIGlmIChzdHJlYW0gIT0gTlVMTCkKKyAgICAgcmV0dXJuIHN0cmVhbTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiBOVUxMOworIH0KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYworaW5kZXggYTM5YTk0Zi4uMTZlOTAzOSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKK0BAIC0zNTEsNyArMzUxLDcgQEAgbmV3X2VsZW1lbnQgKHN0cnVjdCBsb2NhbGVfY29sbGF0ZV90ICpjb2xsYXRlLCBjb25zdCBjaGFyICptYnMsIHNpemVfdCBtYnNsZW4sCisgICAgIH0KKyAgIGlmICh3Y3MgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuICgod2NoYXJfdCAqKSB3Y3MpOworKyAgICAgIHNpemVfdCBud2NzID0gd2NzbGVuX3VpbnQzMiAod2NzKTsKKyAgICAgICB1aW50MzJfdCB6ZXJvID0gMDsKKyAgICAgICAvKiBIYW5kbGUgPFUwMDAwPiBhcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICAqLworICAgICAgIGlmIChud2NzID09IDApCitAQCAtMTc3Nyw4ICsxNzc3LDcgQEAgc3ltYm9sIGAlcycgaGFzIHRoZSBzYW1lIGVuY29kaW5nIGFzIiksICgqZXB0ciktPm5hbWUpOworIAorIAkgICAgICBpZiAoKCplcHRyKS0+bndjcyA9PSBydW5wLT5ud2NzKQorIAkJeworLQkJICBpbnQgYyA9IHdtZW1jbXAgKCh3Y2hhcl90ICopICgqZXB0ciktPndjcywKKy0JCQkJICAgKHdjaGFyX3QgKikgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKKysJCSAgaW50IGMgPSB3bWVtY21wX3VpbnQzMiAoKCplcHRyKS0+d2NzLCBydW5wLT53Y3MsIHJ1bnAtPm53Y3MpOworIAorIAkJICBpZiAoYyA9PSAwKQorIAkJICAgIHsKK0BAIC0yMDExLDkgKzIwMTAsOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCisgCSAgICAgb25lIGNvbnNlY3V0aXZlIGVudHJ5LiAgKi8KKyAJICBpZiAocnVucC0+d2NuZXh0ICE9IE5VTEwKKyAJICAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKKy0JICAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAorLQkJCSAgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKKy0JCQkgIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisrCSAgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCisrCQkJCSBydW5wLT53Y25leHQtPndjcywKKysJCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisgCSAgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCisgCQkgID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKQorIAkgICAgeworQEAgLTIwMzcsOSArMjAzNiw5IEBAIGFkZF90b190YWJsZXdjICh1aW50MzJfdCBjaCwgc3RydWN0IGVsZW1lbnRfdCAqcnVucCkKKyAJCXJ1bnAgPSBydW5wLT53Y25leHQ7CisgCSAgICAgIHdoaWxlIChydW5wLT53Y25leHQgIT0gTlVMTAorIAkJICAgICAmJiBydW5wLT5ud2NzID09IHJ1bnAtPndjbmV4dC0+bndjcworLQkJICAgICAmJiB3bWVtY21wICgod2NoYXJfdCAqKSBydW5wLT53Y3MsCistCQkJCSAod2NoYXJfdCAqKXJ1bnAtPndjbmV4dC0+d2NzLAorLQkJCQkgcnVucC0+bndjcyAtIDEpID09IDAKKysJCSAgICAgJiYgd21lbWNtcF91aW50MzIgKHJ1bnAtPndjcywKKysJCQkJCXJ1bnAtPndjbmV4dC0+d2NzLAorKwkJCQkJcnVucC0+bndjcyAtIDEpID09IDAKKyAJCSAgICAgJiYgKHJ1bnAtPndjc1tydW5wLT5ud2NzIC0gMV0KKyAJCQkgPT0gcnVucC0+d2NuZXh0LT53Y3NbcnVucC0+bndjcyAtIDFdICsgMSkpOworIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKK2luZGV4IDNmNDY0ZWYuLmI3YjZiNTEgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKK0BAIC05MjYsNyArOTI2LDcgQEAgY3R5cGVfb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAgIGFsbG9jYXRlX2FycmF5cyAoY3R5cGUsIGNoYXJtYXAsIGN0eXBlLT5yZXBlcnRvaXJlKTsKKyAKKyAgIGRlZmF1bHRfbWlzc2luZ19sZW4gPSAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZworLQkJCSA/IHdjc2xlbiAoKHdjaGFyX3QgKikgY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKKysJCQkgPyB3Y3NsZW5fdWludDMyIChjdHlwZS0+ZGVmYXVsdF9taXNzaW5nKQorIAkJCSA6IDApOworIAorICAgaW5pdF9sb2NhbGVfZGF0YSAoJmZpbGUsIG5lbGVtcyk7CitAQCAtMTkzNyw3ICsxOTM3LDcgQEAgcmVhZF90cmFuc2xpdF9lbnRyeSAoc3RydWN0IGxpbmVyZWFkZXIgKmxkZmlsZSwgc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwKKyAJICAgIGlnbm9yZSA9IDE7CisgCSAgZWxzZQorIAkgICAgLyogVGhpcyB2YWx1ZSBpcyB1c2FibGUuICAqLworLQkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuICgod2NoYXJfdCAqKSB0b193c3RyKSAqIDQpOworKwkgICAgb2JzdGFja19ncm93IChvYiwgdG9fd3N0ciwgd2NzbGVuX3VpbnQzMiAodG9fd3N0cikgKiA0KTsKKyAKKyAJICBmaXJzdCA9IDA7CisgCX0KK0BAIC0yNDcxLDggKzI0NzEsOCBAQCB3aXRoIGNoYXJhY3RlciBjb2RlIHJhbmdlIHZhbHVlcyBvbmUgbXVzdCB1c2UgdGhlIGFic29sdXRlIGVsbGlwc2lzIGAuLi4nIikpOworIAkgICAgfQorIAorIAloYW5kbGVfdG9rX2RpZ2l0OgorLQkgIGNsYXNzX2JpdCA9IF9JU3dkaWdpdDsKKy0JICBjbGFzczI1Nl9iaXQgPSBfSVNkaWdpdDsKKysJICBjbGFzc19iaXQgPSBCSVR3ICh0b2tfZGlnaXQpOworKwkgIGNsYXNzMjU2X2JpdCA9IEJJVCAodG9rX2RpZ2l0KTsKKyAJICBoYW5kbGVfZGlnaXRzID0gMTsKKyAJICBnb3RvIHJlYWRfY2hhcmNsYXNzOworIAorQEAgLTM5MjksOCArMzkyOSw3IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAKKyAJICB3aGlsZSAoaWR4IDwgbnVtYmVyKQorIAkgICAgeworLQkgICAgICBpbnQgcmVzID0gd2NzY21wICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbaWR4XS0+ZnJvbSwKKy0JCQkJKGNvbnN0IHdjaGFyX3QgKikgcnVucC0+ZnJvbSk7CisrCSAgICAgIGludCByZXMgPSB3Y3NjbXBfdWludDMyIChzb3J0ZWRbaWR4XS0+ZnJvbSwgcnVucC0+ZnJvbSk7CisgCSAgICAgIGlmIChyZXMgPT0gMCkKKyAJCXsKKyAJCSAgcmVwbGFjZSA9IDE7CitAQCAtMzk2NywxMSArMzk2NiwxMSBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgICAgICAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgbnVtYmVyOyArK2NudCkKKyAJeworIAkgIHN0cnVjdCB0cmFuc2xpdF90b190ICpzcnVucDsKKy0JICBmcm9tX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisrCSAgZnJvbV9sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKKyAJICBzcnVucCA9IHNvcnRlZFtjbnRdLT50bzsKKyAJICB3aGlsZSAoc3J1bnAgIT0gTlVMTCkKKyAJICAgIHsKKy0JICAgICAgdG9fbGVuICs9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOworKwkgICAgICB0b19sZW4gKz0gd2NzbGVuX3VpbnQzMiAoc3J1bnAtPnN0cikgKyAxOworIAkgICAgICBzcnVucCA9IHNydW5wLT5uZXh0OworIAkgICAgfQorIAkgIC8qIFBsdXMgb25lIGZvciB0aGUgZXh0cmEgTlVMIGNoYXJhY3RlciBtYXJraW5nIHRoZSBlbmQgb2YKK0BAIC0zOTk1LDE4ICszOTk0LDE4IEBAIGFsbG9jYXRlX2FycmF5cyAoc3RydWN0IGxvY2FsZV9jdHlwZV90ICpjdHlwZSwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAJICBjdHlwZS0+dHJhbnNsaXRfZnJvbV9pZHhbY250XSA9IGZyb21fbGVuOworIAkgIGN0eXBlLT50cmFuc2xpdF90b19pZHhbY250XSA9IHRvX2xlbjsKKyAKKy0JICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CistCSAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCistCQkgICAoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKKysJICBsZW4gPSB3Y3NsZW5fdWludDMyIChzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworKwkgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X2Zyb21fdGJsW2Zyb21fbGVuXSwKKysJCQkgIHNvcnRlZFtjbnRdLT5mcm9tLCBsZW4pOworIAkgIGZyb21fbGVuICs9IGxlbjsKKyAKKyAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47CisgCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87CisgCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIGxlbiA9IHdjc2xlbiAoKGNvbnN0IHdjaGFyX3QgKikgc3J1bnAtPnN0cikgKyAxOworLQkgICAgICB3bWVtY3B5ICgod2NoYXJfdCAqKSAmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAorLQkJICAgICAgIChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIsIGxlbik7CisrCSAgICAgIGxlbiA9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKKysJICAgICAgd21lbWNweV91aW50MzIgKCZjdHlwZS0+dHJhbnNsaXRfdG9fdGJsW3RvX2xlbl0sCisrCQkJICAgICAgc3J1bnAtPnN0ciwgbGVuKTsKKyAJICAgICAgdG9fbGVuICs9IGxlbjsKKyAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKKyAJICAgIH0KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jCitpbmRleCBlYzFhODBiLi43MzZlZWQ4IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jCitAQCAtMjUsNiArMjUsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN5cy91aW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgCitAQCAtMTI0LDYgKzEyNSw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUAorICAgICAgIGludCByZXN1bHQ7CisgICAgICAgcmVnZXhfdCByZTsKKyAKK0BAIC0xNDAsNiArMTQyLDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworIAl9CisgICAgICAgZWxzZSBpZiAocmVzdWx0ICE9IDApCisgCXJlZ2ZyZWUgKCZyZSk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIGlmIChtZXNzYWdlcy0+bm9leHByID09IE5VTEwpCitAQCAtMTU4LDYgKzE2MSw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAgICAgfQorICAgZWxzZQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUAorICAgICAgIGludCByZXN1bHQ7CisgICAgICAgcmVnZXhfdCByZTsKKyAKK0BAIC0xNzQsNiArMTc4LDcgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX01FU1NBR0VTIikpOworIAl9CisgICAgICAgZWxzZSBpZiAocmVzdWx0ICE9IDApCisgCXJlZ2ZyZWUgKCZyZSk7CisrI2VuZGlmCisgICAgIH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMKK2luZGV4IGRiNDkwYzYuLjc1ZGM1MDUgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCitAQCAtMjE1LDggKzIxNSwxMCBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAJfQorICAgICAgIGVsc2UKKyAJeworKwkgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB3dF9mbXRfYW1wbVtdCisrCSAgICA9IHsgJyUnLCdJJywnOicsJyUnLCdNJywnOicsJyUnLCdTJywnICcsJyUnLCdwJywwIH07CisgCSAgdGltZS0+dF9mbXRfYW1wbSA9ICIlSTolTTolUyAlcCI7CistCSAgdGltZS0+d3RfZm10X2FtcG0gPSAoY29uc3QgdWludDMyX3QgKikgTCIlSTolTTolUyAlcCI7CisrCSAgdGltZS0+d3RfZm10X2FtcG0gPSB3dF9mbXRfYW1wbTsKKyAJfQorICAgICB9CisgCitAQCAtMjI2LDcgKzIyOCw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworICAgICAgIGNvbnN0IGludCBkYXlzX3Blcl9tb250aFsxMl0gPSB7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsCisgCQkJCSAgICAgICAzMSwgMzEsIDMwLCAzMSAsMzAsIDMxIH07CisgICAgICAgc2l6ZV90IGlkeDsKKy0gICAgICB3Y2hhcl90ICp3c3RyOworKyAgICAgIHVpbnQzMl90ICp3c3RyOworIAorICAgICAgIHRpbWUtPmVyYV9lbnRyaWVzID0KKyAJKHN0cnVjdCBlcmFfZGF0YSAqKSB4bWFsbG9jICh0aW1lLT5udW1fZXJhCitAQCAtNDY0LDE4ICs0NjYsMTggQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgCSAgICB9CisgCisgCSAgLyogTm93IGdlbmVyYXRlIHRoZSB3aWRlIGNoYXJhY3RlciBuYW1lIGFuZCBmb3JtYXQuICAqLworLQkgIHdzdHIgPSB3Y3NjaHIgKCh3Y2hhcl90ICopIHRpbWUtPndlcmFbaWR4XSwgTCc6Jyk7LyogZW5kIGRpcmVjdGlvbiAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgb2Zmc2V0ICovCistCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7CS8qIGVuZCBzdGFydCAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgZW5kICovCisrCSAgd3N0ciA9IHdjc2Nocl91aW50MzIgKHRpbWUtPndlcmFbaWR4XSwgTCc6Jyk7IC8qIGVuZCBkaXJlY3Rpb24gKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBvZmZzZXQgKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBzdGFydCAqLworKwkgIHdzdHIgPSB3c3RyID8gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpIDogTlVMTDsgLyogZW5kIGVuZCAqLworIAkgIGlmICh3c3RyICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPSAodWludDMyX3QgKikgd3N0ciArIDE7CistCSAgICAgIHdzdHIgPSB3Y3NjaHIgKHdzdHIgKyAxLCBMJzonKTsJLyogZW5kIG5hbWUgKi8KKysJICAgICAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9IHdzdHIgKyAxOworKwkgICAgICB3c3RyID0gd2NzY2hyX3VpbnQzMiAod3N0ciArIDEsIEwnOicpOyAvKiBlbmQgbmFtZSAqLworIAkgICAgICBpZiAod3N0ciAhPSBOVUxMKQorIAkJeworIAkJICAqd3N0ciA9IEwnXDAnOworLQkJICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLndmb3JtYXQgPSAodWludDMyX3QgKikgd3N0ciArIDE7CisrCQkgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud2Zvcm1hdCA9IHdzdHIgKyAxOworIAkJfQorIAkgICAgICBlbHNlCisgCQl0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0KK0BAIC01MzAsNyArNTMyLDE2IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworICAgaWYgKHRpbWUtPmRhdGVfZm10ID09IE5VTEwpCisgICAgIHRpbWUtPmRhdGVfZm10ID0gIiVhICViICVlICVIOiVNOiVTICVaICVZIjsKKyAgIGlmICh0aW1lLT53ZGF0ZV9mbXQgPT0gTlVMTCkKKy0gICAgdGltZS0+d2RhdGVfZm10ID0gKGNvbnN0IHVpbnQzMl90ICopIEwiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiOworKyAgICB7CisrICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHdkYXRlX2ZtdFtdID0KKysJeyAnJScsJ2EnLCcgJywKKysJICAnJScsJ2InLCcgJywKKysJICAnJScsJ2UnLCcgJywKKysJICAnJScsJ0gnLCc6JywnJScsJ00nLCc6JywnJScsJ1MnLCcgJywKKysJICAnJScsJ1onLCcgJywKKysJICAnJScsJ1knLDAgfTsKKysgICAgICB0aW1lLT53ZGF0ZV9mbXQgPSB3ZGF0ZV9mbXQ7CisrICAgIH0KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYyBiL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMKK2luZGV4IDJlMDUxMzAuLjY1M2I2OGMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCitAQCAtNTk1LDcgKzU5NSw3IEBAIGdldF9zdHJpbmcgKHN0cnVjdCBsaW5lcmVhZGVyICpsciwgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyB7CisgICBpbnQgcmV0dXJuX3dpZGVzdHIgPSBsci0+cmV0dXJuX3dpZGVzdHI7CisgICBjaGFyICpidWY7CistICB3Y2hhcl90ICpidWYyID0gTlVMTDsKKysgIHVpbnQzMl90ICpidWYyID0gTlVMTDsKKyAgIHNpemVfdCBidWZhY3Q7CisgICBzaXplX3QgYnVmbWF4ID0gNTY7CisgCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCitpbmRleCAyYTBmMmFhLi41ODNkMjMzIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jYWxlZGVmLmMKK0BAIC0xMTQsNiArMTE0LDcgQEAgdm9pZCAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChGSUxFICosIHN0cnVjdCBhcmdwX3N0YXRlICopID0gcHJpbnRfdmVyc2lvbjsKKyAjZGVmaW5lIE9QVF9MSVNUX0FSQ0hJVkUgMzA5CisgI2RlZmluZSBPUFRfTElUVExFX0VORElBTiA0MDAKKyAjZGVmaW5lIE9QVF9CSUdfRU5ESUFOIDQwMQorKyNkZWZpbmUgT1BUX1VJTlQzMl9BTElHTiA0MDIKKyAKKyAvKiBEZWZpbml0aW9ucyBvZiBhcmd1bWVudHMgZm9yIGFyZ3AgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CitAQCAtMTUwLDYgKzE1MSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KKyAgICAgTl8oIkdlbmVyYXRlIGxpdHRsZS1lbmRpYW4gb3V0cHV0IikgfSwKKyAgIHsgImJpZy1lbmRpYW4iLCBPUFRfQklHX0VORElBTiwgTlVMTCwgMCwKKyAgICAgTl8oIkdlbmVyYXRlIGJpZy1lbmRpYW4gb3V0cHV0IikgfSwKKysgIHsgInVpbnQzMi1hbGlnbiIsIE9QVF9VSU5UMzJfQUxJR04sICJBTElHTk1FTlQiLCAwLAorKyAgICBOXygiU2V0IHRoZSB0YXJnZXQncyB1aW50MzJfdCBhbGlnbm1lbnQgaW4gYnl0ZXMgKGRlZmF1bHQgNCkiKSB9LAorICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKyB9OworIAorQEAgLTIzOSwxMiArMjQyLDE0IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICBjdHlwZSBsb2NhbGUuICAoUDEwMDMuMiA0LjM1LjUuMikgICovCisgICBzZXRsb2NhbGUgKExDX0NUWVBFLCAiUE9TSVgiKTsKKyAKKysjaWZuZGVmIE5PX1NZU0NPTkYKKyAgIC8qIExvb2sgd2hldGhlciB0aGUgc3lzdGVtIHJlYWxseSBhbGxvd3MgbG9jYWxlIGRlZmluaXRpb25zLiAgUE9TSVgKKyAgICAgIGRlZmluZXMgZXJyb3IgY29kZSAzIGZvciB0aGlzIHNpdHVhdGlvbiBzbyBJIHRoaW5rIGl0IG11c3QgYmUKKyAgICAgIGEgZmF0YWwgZXJyb3IgKHNlZSBQMTAwMy4yIDQuMzUuOCkuICAqLworICAgaWYgKHN5c2NvbmYgKF9TQ18yX0xPQ0FMRURFRikgPCAwKQorICAgICBXSVRIX0NVUl9MT0NBTEUgKGVycm9yICgzLCAwLCBfKCJcCisgRkFUQUw6IHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgYF9QT1NJWDJfTE9DQUxFREVGJyIpKSk7CisrI2VuZGlmCisgCisgICAvKiBQcm9jZXNzIGNoYXJtYXAgZmlsZS4gICovCisgICBjaGFybWFwID0gY2hhcm1hcF9yZWFkIChjaGFybWFwX2ZpbGUsIHZlcmJvc2UsIDEsIGJlX3F1aWV0LCAxKTsKK0BAIC0zMzgsNiArMzQzLDkgQEAgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyAgICAgY2FzZSBPUFRfQklHX0VORElBTjoKKyAgICAgICBzZXRfYmlnX2VuZGlhbiAodHJ1ZSk7CisgICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX1VJTlQzMl9BTElHTjoKKysgICAgICB1aW50MzJfYWxpZ25fbWFzayA9IHN0cnRvbCAoYXJnLCBOVUxMLCAwKSAtIDE7CisrICAgICAgYnJlYWs7CisgICAgIGNhc2UgJ2MnOgorICAgICAgIGZvcmNlX291dHB1dCA9IDE7CisgICAgICAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMKK2luZGV4IDMzZGE1MmUuLmY3OTBjNGMgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCitAQCAtNTQ0LDYgKzU0NCw5IEBAIGNvbXBhcmVfZmlsZXMgKGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwgY29uc3QgY2hhciAqZmlsZW5hbWUyLCBzaXplX3Qgc2l6ZSwKKyAgICBtYWNoaW5lIHJ1bm5pbmcgbG9jYWxlZGVmLiAgKi8KKyBib29sIHN3YXBfZW5kaWFubmVzc19wOworIAorKy8qIFRoZSB0YXJnZXQncyB2YWx1ZSBvZiBfX2FsaWduX18odWludDMyX3QpIC0gMS4gICovCisrdW5zaWduZWQgaW50IHVpbnQzMl9hbGlnbl9tYXNrID0gMzsKKysKKyAvKiBXaGVuIGNhbGxlZCBvdXRzaWRlIGEgc3RhcnRfbG9jYWxlX3N0cnVjdHVyZS9lbmRfbG9jYWxlX3N0cnVjdHVyZQorICAgIG9yIHN0YXJ0X2xvY2FsZV9wcmVsdWRlL2VuZF9sb2NhbGVfcHJlbHVkZSBibG9jaywgcmVjb3JkIHRoYXQgdGhlCisgICAgbmV4dCBieXRlIGluIEZJTEUncyBvYnN0YWNrIHdpbGwgYmUgdGhlIGZpcnN0IGJ5dGUgb2YgYSBuZXcgZWxlbWVudC4KK0BAIC02MjEsNyArNjI0LDcgQEAgYWRkX2xvY2FsZV9zdHJpbmcgKHN0cnVjdCBsb2NhbGVfZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nKQorIHZvaWQKKyBhZGRfbG9jYWxlX3dzdHJpbmcgKHN0cnVjdCBsb2NhbGVfZmlsZSAqZmlsZSwgY29uc3QgdWludDMyX3QgKnN0cmluZykKKyB7CistICBhZGRfbG9jYWxlX3VpbnQzMl9hcnJheSAoZmlsZSwgc3RyaW5nLCB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHN0cmluZykgKyAxKTsKKysgIGFkZF9sb2NhbGVfdWludDMyX2FycmF5IChmaWxlLCBzdHJpbmcsIHdjc2xlbl91aW50MzIgKHN0cmluZykgKyAxKTsKKyB9CisgCisgLyogUmVjb3JkIHRoYXQgRklMRSdzIG5leHQgZWxlbWVudCBpcyB0aGUgMzItYml0IGludGVnZXIgVkFMVUUuICAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmggYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oCitpbmRleCA2ZmM0NDFiLi4xMThiMTcxIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAorKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAorQEAgLTcxLDYgKzcxLDggQEAgZXh0ZXJuIHZvaWQgd3JpdGVfYWxsX2NhdGVnb3JpZXMgKHN0cnVjdCBsb2NhbGVkZWZfdCAqZGVmaW5pdGlvbnMsCisgCisgZXh0ZXJuIGJvb2wgc3dhcF9lbmRpYW5uZXNzX3A7CisgCisrZXh0ZXJuIHVuc2lnbmVkIGludCB1aW50MzJfYWxpZ25fbWFzazsKKysKKyAvKiBDaGFuZ2UgdGhlIG91dHB1dCB0byBiZSBiaWctZW5kaWFuIGlmIEJJR19FTkRJQU4gaXMgdHJ1ZSBhbmQKKyAgICBsaXR0bGUtZW5kaWFuIG90aGVyd2lzZS4gICovCisgc3RhdGljIGlubGluZSB2b2lkCitAQCAtODksNyArOTEsOCBAQCBtYXliZV9zd2FwX3VpbnQzMiAodWludDMyX3QgdmFsdWUpCisgfQorIAorIC8qIExpa2V3aXNlLCBidXQgbXVuZ2UgYW4gYXJyYXkgb2YgTiB1aW50MzJfdHMgc3RhcnRpbmcgYXQgQVJSQVkuICAqLworLXN0YXRpYyBpbmxpbmUgdm9pZAorK3N0YXRpYyB2b2lkCisrX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKHVpbnQzMl90ICphcnJheSwgc2l6ZV90IG4pCisgeworICAgaWYgKHN3YXBfZW5kaWFubmVzc19wKQorQEAgLTk5LDcgKzEwMiw4IEBAIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICh1aW50MzJfdCAqYXJyYXksIHNpemVfdCBuKQorIAorIC8qIExpa2UgbWF5YmVfc3dhcF91aW50MzJfYXJyYXksIGJ1dCB0aGUgYXJyYXkgb2YgTiBlbGVtZW50cyBpcyBhdAorICAgIHRoZSBlbmQgb2YgT0JTVEFDSydzIGN1cnJlbnQgb2JqZWN0LiAgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKytzdGF0aWMgdm9pZAorK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIG1heWJlX3N3YXBfdWludDMyX29ic3RhY2sgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBzaXplX3QgbikKKyB7CisgICBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAoKHVpbnQzMl90ICopIG9ic3RhY2tfbmV4dF9mcmVlIChvYnN0YWNrKSAtIG4sIG4pOworQEAgLTI3Niw0ICsyODAsNTUgQEAgZXh0ZXJuIHZvaWQgaWRlbnRpZmljYXRpb25fb3V0cHV0IChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmxvY2FsZSwKKyAJCQkJICAgY29uc3Qgc3RydWN0IGNoYXJtYXBfdCAqY2hhcm1hcCwKKyAJCQkJICAgY29uc3QgY2hhciAqb3V0cHV0X3BhdGgpOworIAorK3N0YXRpYyBzaXplX3Qgd2NzbGVuX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnN0cikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyB1aW50MzJfdCAqIHdtZW1jcHlfdWludDMyICh1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgdWludDMyX3QgKiB3Y3NjaHJfdWludDMyIChjb25zdCB1aW50MzJfdCAqcywgdWludDMyX3QgY2gpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgaW50IHdjc2NtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIGludCB3bWVtY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrCisrc3RhdGljIHNpemVfdAorK3djc2xlbl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzdHIpCisreworKyAgc2l6ZV90IGxlbiA9IDA7CisrICB3aGlsZSAoc3RyW2xlbl0gIT0gMCkKKysgICAgbGVuKys7CisrICByZXR1cm4gbGVuOworK30KKysKKytzdGF0aWMgIGludAorK3dtZW1jbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMiwgc2l6ZV90IG4pCisreworKyAgd2hpbGUgKG4tLSAhPSAwKQorKyAgICB7CisrICAgICAgaW50IGRpZmYgPSAqczErKyAtICpzMisrOworKyAgICAgIGlmIChkaWZmICE9IDApCisrCXJldHVybiBkaWZmOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK3djc2NtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyKQorK3sKKysgIHdoaWxlICgqczEgIT0gMCAmJiAqczEgPT0gKnMyKQorKyAgICBzMSsrLCBzMisrOworKyAgcmV0dXJuICpzMSAtICpzMjsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90ICoKKyt3bWVtY3B5X3VpbnQzMiAodWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKQorK3sKKysgIHJldHVybiBtZW1jcHkgKHMxLCBzMiwgbiAqIHNpemVvZiAodWludDMyX3QpKTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90ICoKKyt3Y3NjaHJfdWludDMyIChjb25zdCB1aW50MzJfdCAqcywgdWludDMyX3QgY2gpCisreworKyAgZG8KKysgICAgaWYgKCpzID09IGNoKQorKyAgICAgIHJldHVybiAodWludDMyX3QgKikgczsKKysgIHdoaWxlICgqcysrICE9IDApOworKyAgcmV0dXJuIDA7CisrfQorKworICNlbmRpZiAvKiBsb2NmaWxlLmggKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvc2V0bG9jYWxlLmMgYi9sb2NhbGUvc2V0bG9jYWxlLmMKK2luZGV4IGZhOWNiM2EuLjhlZWUyODQgMTAwNjQ0CistLS0gYS9sb2NhbGUvc2V0bG9jYWxlLmMKKysrKyBiL2xvY2FsZS9zZXRsb2NhbGUuYworQEAgLTY0LDM2ICs2NCw2IEBAIHN0YXRpYyBjaGFyICpjb25zdCBfbmxfY3VycmVudF91c2VkW10gPQorICNlbmRpZgorIAorIAorLS8qIERlZmluZSBhbiBhcnJheSBvZiBjYXRlZ29yeSBuYW1lcyAoYWxzbyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMpLiAgKi8KKy1jb25zdCB1bmlvbiBjYXRuYW1lc3RyX3QgX25sX2NhdGVnb3J5X25hbWVzIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSAgICB7CistI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCistICAgICAgY2F0ZWdvcnlfbmFtZSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmIERFRklORV9DQVRFR09SWQorLSAgICB9CistICB9OworLQorLWNvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfaWR4c1tfX0xDX0xBU1RdIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICBbY2F0ZWdvcnldID0gb2Zmc2V0b2YgKHVuaW9uIGNhdG5hbWVzdHJfdCwgQ0FUTkFNRU1GIChfX0xJTkVfXykpLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYgREVGSU5FX0NBVEVHT1JZCistICB9OworLQorLS8qIEFuIGFycmF5IG9mIHRoZWlyIGxlbmd0aHMsIGZvciBjb252ZW5pZW5jZS4gICovCistY29uc3QgdWludDhfdCBfbmxfY2F0ZWdvcnlfbmFtZV9zaXplc1tdIGF0dHJpYnV0ZV9oaWRkZW4gPQorLSAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICBbY2F0ZWdvcnldID0gc2l6ZW9mIChjYXRlZ29yeV9uYW1lKSAtIDEsCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZglERUZJTkVfQ0FURUdPUlkKKy0gICAgW0xDX0FMTF0gPSBzaXplb2YgKCJMQ19BTEwiKSAtIDEKKy0gIH07CistCistCisgI2lmZGVmIE5MX0NVUlJFTlRfSU5ESVJFQ1QKKyAjIGRlZmluZSBXRUFLX1BPU1RMT0FEKHBvc3Rsb2FkKSB3ZWFrX2V4dGVybiAocG9zdGxvYWQpCisgI2Vsc2UKK2RpZmYgLS1naXQgYS9sb2NhbGUveGxvY2FsZS5jIGIvbG9jYWxlL3hsb2NhbGUuYworaW5kZXggZmVjNDU2NC4uZjAwMjY5YyAxMDA2NDQKKy0tLSBhL2xvY2FsZS94bG9jYWxlLmMKKysrKyBiL2xvY2FsZS94bG9jYWxlLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKyAKKyAjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKK0BAIC0yNSw2ICsyNiwxOSBAQCBleHRlcm4gc3RydWN0IF9fbG9jYWxlX2RhdGEgX25sX0NfIyNjYXRlZ29yeTsKKyAjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisgI3VuZGVmCURFRklORV9DQVRFR09SWQorIAorKy8qIElmIHRoZSBsb2NhbGUgc3VwcG9ydCBjb2RlIGlzbid0IGVuYWJsZWQsIGRvbid0IGdlbmVyYXRlIHN0cm9uZworKyAgIHJlZmVyZW5jZSB0byB0aGUgQyBsb2NhbGVfZGF0YSBzdHJ1Y3R1cmVzIGhlcmU7IGxldCB0aGUgTWFrZWZpbGUKKysgICBkZWNpZGUgd2hpY2ggb25lcyB0byBpbmNsdWRlLiAgKEluIHRoZSBzdGF0aWMgbGlua2luZyBjYXNlLCB0aGUKKysgICBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSAnY2xhc3MnLCAndG91cHBlcicsIGFuZCAndG9sb3dlcicgdGFibGVzCisrICAgd2lsbCBjYXVzZSBDLWN0eXBlLm8gdG8gYmUgYnJvdWdodCBpbiwgYXMgaXQgc2hvdWxkIGJlLCBldmVuIHdoZW4KKysgICB0aGUgcmVmZXJlbmNlIHRvIF9ubF9DX0xDX0NUWVBFIHdpbGwgYmUgd2Vhay4pICAqLworKyNpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgIHdlYWtfZXh0ZXJuIChfbmxfQ18jI2NhdGVnb3J5KQorKyMgaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrIyB1bmRlZglERUZJTkVfQ0FURUdPUlkKKysjZW5kaWYKKysKKyAvKiBEZWZpbmVkIGluIGxvY2FsZS9DLWN0eXBlLmMuICAqLworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9DX0xDX0NUWVBFX2NsYXNzW10gYXR0cmlidXRlX2hpZGRlbjsKKyBleHRlcm4gY29uc3QgY2hhciBfbmxfQ19MQ19DVFlQRV90b3VwcGVyW10gYXR0cmlidXRlX2hpZGRlbjsKK0BAIC01MiwzICs2NiwyNiBAQCBjb25zdCBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0IF9ubF9DX2xvY29iaiBhdHRyaWJ1dGVfaGlkZGVuID0KKyAgICAgLl9fY3R5cGVfdG9sb3dlciA9IChjb25zdCBpbnQgKikgX25sX0NfTENfQ1RZUEVfdG9sb3dlciArIDEyOCwKKyAgICAgLl9fY3R5cGVfdG91cHBlciA9IChjb25zdCBpbnQgKikgX25sX0NfTENfQ1RZUEVfdG91cHBlciArIDEyOAorICAgfTsKKysKKysKKysjaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysvKiBXaGVuIGxvY2FsZSBjb2RlIGlzIGVuYWJsZWQsIHRoZXNlIGFyZSBlYWNoIGRlZmluZWQgaW4gdGhlCisrICAgYXBwcm9wcmlhdGUgbGMtQ0FURUdPUlkuYyBmaWxlLCBzbyB0aGF0IHN0YXRpYyBsaW5rcyAod2hlbiBfX3RocmVhZAorKyAgIGlzIHN1cHBvcnRlZCkgYnJpbmcgaW4gb25seSB0aG9zZSBsYy1DQVRFR09SWS5vIGZpbGVzIGZvcgorKyAgIGNhdGVnb3JpZXMgdGhlIHByb2dyYW0gYWN0dWFsbHkgdXNlczsgbG9vayBmb3IgTkxfQ1VSUkVOVF9JTkRJUkVDVAorKyAgIGluIGxvY2FsZWluZm8uaC4KKysKKysgICBXaGVuIGxvY2FsZSBjb2RlIGlzIGRpc2FibGVkLCB0aGUgX25sX0NfQ0FURUdPUlkgb2JqZWN0cyBhcmUgdGhlCisrICAgb25seSBwb3NzaWJsZSByZWZlcmVudHMuICBBdCB0aGUgbW9tZW50LCB0aGVyZSBpc24ndCBhIHdheSB0byBnZXQKKysgICBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgZGVmaW5lZCBpbiBldmVyeSBjb21waWxhdGlvbiB1bml0IHRoYXQKKysgICAjaW5jbHVkZXMgbG9jYWxlaW5mby5oLCBzbyB3ZSBjYW4ndCBqdXN0IHR1cm4gb2ZmCisrICAgTkxfQ1VSUkVOVF9JTkRJUkVDVC4gIFNvIHdlJ2xsIGRlZmluZSB0aGUgX25sX2N1cnJlbnRfQ0FURUdPUlkKKysgICBwb2ludGVycyBoZXJlLiAgKi8KKysjaWYgZGVmaW5lZCAoTkxfQ1VSUkVOVF9JTkRJUkVDVCkKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpICAgICAgXAorKyAgX190aHJlYWQgc3RydWN0IF9fbG9jYWxlX2RhdGEgKiBjb25zdCAqX25sX2N1cnJlbnRfIyNjYXRlZ29yeSAgIFwKKysgIGF0dHJpYnV0ZV9oaWRkZW4gPSAmX25sX0NfbG9jb2JqLl9fbG9jYWxlc1tjYXRlZ29yeV07CisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysjZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlZGF0YS9NYWtlZmlsZSBiL2xvY2FsZWRhdGEvTWFrZWZpbGUKK2luZGV4IGViZjZhYzkuLjE4NzA3NTMgMTAwNjQ0CistLS0gYS9sb2NhbGVkYXRhL01ha2VmaWxlCisrKysgYi9sb2NhbGVkYXRhL01ha2VmaWxlCitAQCAtMjEsMTIgKzIxLDIyIEBAIHN1YmRpciA6PSBsb2NhbGVkYXRhCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCistIyBMaXN0IHdpdGggYWxsIGF2YWlsYWJsZSBjaGFyYWN0ZXIgc2V0IGRlc2NyaXB0aW9ucy4KKy1jaGFybWFwcyA6PSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tBLUldKikgJCh3aWxkY2FyZCBjaGFybWFwcy9bSi1aXSopCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorICMgTGlzdCB3aXRoIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVyIHNldCBkZXNjcmlwdGlvbnMuCistbG9jYWxlcyA6PSAkKHdpbGRjYXJkIGxvY2FsZXMvKikKKy0KKythbGwtY2hhcm1hcHMgOj0gJCh3aWxkY2FyZCBjaGFybWFwcy9bQS1JXSopICQod2lsZGNhcmQgY2hhcm1hcHMvW0otWl0qKQorKworK2FsbC1sb2NhbGVzIDo9ICQod2lsZGNhcmQgbG9jYWxlcy8qKQorKworKyMgSWYgdGhlIEVHTElCQ19MT0NBTEVTIG9wdGlvbiBncm91cCBpcyBub3QgZW5hYmxlZCwgdHJpbSB0aGUKKysjIGxpc3Qgb2YgY2hhcm1hcCBhbmQgbG9jYWxlIHNvdXJjZSBmaWxlcy4KKytpZmVxICgkKE9QVElPTl9FR0xJQkNfTE9DQUxFUykseSkKKytjaGFybWFwcyA6PSAkKGFsbC1jaGFybWFwcykKKytsb2NhbGVzICA6PSAkKGFsbC1sb2NhbGVzKQorK2Vsc2UKKytjaGFybWFwcyA6PQorK2xvY2FsZXMgIDo9IGxvY2FsZXMvUE9TSVgKKytlbmRpZgorIAorIHN1YmRpci1kaXJzID0gdGVzdHMtbWJ3YworIHZwYXRoICUuYyB0ZXN0cy1tYndjCitAQCAtNzEsMTQgKzgxLDIwIEBAIGxvY2FsZV90ZXN0X3N1aXRlIDo9IHRzdF9pc3dhbG51bSB0c3RfaXN3YWxwaGEgdHN0X2lzd2NudHJsICAgICAgICAgICAgXAorIAkJICAgICB0c3Rfd2NzeGZybSB0c3Rfd2N0b2IgdHN0X3djdG9tYiB0c3Rfd2N0cmFucyAgICAgIFwKKyAJCSAgICAgdHN0X3djdHlwZSB0c3Rfd2N3aWR0aAorIAorLXRlc3RzID0gJChsb2NhbGVfdGVzdF9zdWl0ZSkgdHN0LWRpZ2l0cyB0c3Qtc2V0bG9jYWxlIGJ1Zy1pY29udi10cmFucyBcCisrIyBTaW5jZSB0aGVzZSB0ZXN0cyBidWlsZCB0aGVpciBvd24gbG9jYWxlIGZpbGVzLCB0aGV5J3JlIG5vdAorKyMgZGVwZW5kZW50IG9uIHRoZSBPUFRJT05fRUdMSUJDX0xPQ0FMRVMgb3B0aW9uIGdyb3VwLiAgQnV0IHRoZXkgZG8KKysjIG5lZWQgdGhlIGxvY2FsZSBmdW5jdGlvbnMgdG8gYmUgcHJlc2VudC4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysgICAgICs9ICQobG9jYWxlX3Rlc3Rfc3VpdGUpIHRzdC1kaWdpdHMgdHN0LXNldGxvY2FsZSBidWctaWNvbnYtdHJhbnMgXAorIAl0c3QtbGVha3MgdHN0LW1ic3djczEgdHN0LW1ic3djczIgdHN0LW1ic3djczMgdHN0LW1ic3djczQgdHN0LW1ic3djczUgXAorIAl0c3QtbWJzd2NzNiB0c3QteGxvY2FsZTEgdHN0LXhsb2NhbGUyIGJ1Zy11c2VzZXRsb2NhbGUgXAorIAl0c3Qtc3RyZm1vbjEgdHN0LXNzY2FuZiBidWctc2V0bG9jYWxlMSB0c3Qtc2V0bG9jYWxlMiB0c3Qtc2V0bG9jYWxlMyBcCisgCXRzdC13Y3R5cGUKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgdGVzdHMtc3RhdGljID0gYnVnLXNldGxvY2FsZTEtc3RhdGljCisgdGVzdHMgKz0gJCh0ZXN0cy1zdGF0aWMpCistaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKytlbmRpZgorK2lmZXEgKHllc3ksJChidWlsZC1zaGFyZWQpJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyBpZm5lcSAobm8sJChQRVJMKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KW10cmFjZS10c3QtbGVha3Mub3V0CisgZW5kaWYKK0BAIC05NSw2ICsxMTEsNyBAQCB0ZXN0czogJChvYmpkaXIpL2ljb252ZGF0YS9nY29udi1tb2R1bGVzCisgdGVzdHMtc3RhdGljICs9IHRzdC1sYW5naW5mby1zdGF0aWMKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXNvcnQtdGVzdC5vdXQgJChvYmpwZngpdHN0LWZtb24ub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtbG9jYWxlLm91dCAkKG9ianBmeCl0c3QtcnBtYXRjaC5vdXQgXAorIAkJICQob2JqcGZ4KXRzdC10cmFucy5vdXQgJChvYmpwZngpdHN0LWN0eXBlLm91dCBcCitAQCAtMTA5LDYgKzEyNiw3IEBAIExPQ0FMRVMgOj0gZGVfREUuSVNPLTg4NTktMSBkZV9ERS5VVEYtOCBlbl9VUy5BTlNJX1gzLjQtMTk2OCBcCisgCSAgIHRyX1RSLklTTy04ODU5LTkgZW5fR0IuVVRGLTggdWtfVUEuVVRGLTgKKyBpbmNsdWRlIC4uL2dlbi1sb2NhbGVzLm1rCisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK0BAIC0xOTEsNiArMjA5LDExIEBAIGVuZGlmCisgCisgaW5jbHVkZSBTVVBQT1JURUQKKyAKKysjIE9ubHkgaW5zdGFsbCBsb2NhbGUgZGF0YSBpZiBPUFRJT05fRUdMSUJDX0xPQ0FMRVMgaXMgc2VsZWN0ZWQuCisraWZuZXEgKCQoT1BUSU9OX0VHTElCQ19MT0NBTEVTKSx5KQorK1NVUFBPUlRFRC1MT0NBTEVTIDo9CisrZW5kaWYKKysKKyBJTlNUQUxMLVNVUFBPUlRFRC1MT0NBTEVTPSQoYWRkcHJlZml4IGluc3RhbGwtLCAkKFNVUFBPUlRFRC1MT0NBTEVTKSkKKyAKKyAjIFNvbWV0aW1lcyB0aGUgd2hvbGUgY29sbGVjdGlvbiBvZiBsb2NhbGUgZmlsZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2RpZmYgLS1naXQgYS9sb2dpbi9NYWtlZmlsZSBiL2xvZ2luL01ha2VmaWxlCitpbmRleCAwZjRiYjIyLi40MDM2ZGRiIDEwMDY0NAorLS0tIGEvbG9naW4vTWFrZWZpbGUKKysrKyBiL2xvZ2luL01ha2VmaWxlCitAQCAtMTgsNiArMTgsNyBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgbG9naW4gcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorIHN1YmRpcgk6PSBsb2dpbgorIAorQEAgLTI1LDE0ICsyNiwxNiBAQCBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCTo9IHV0bXAuaCBiaXRzL3V0bXAuaCBsYXN0bG9nLmggcHR5LmgKKyAKKy1yb3V0aW5lcyA6PSBnZXRsb2dpbiBnZXRsb2dpbl9yIHNldGxvZ2luIGdldGxvZ2luX3JfY2hrIFwKKy0JICAgIGdldHV0ZW50IGdldHV0ZW50X3IgZ2V0dXRpZCBnZXR1dGxpbmUgZ2V0dXRpZF9yIGdldHV0bGluZV9yIFwKKy0JICAgIHV0bXBfZmlsZSB1dG1wbmFtZSB1cGR3dG1wIGdldHB0IGdyYW50cHQgdW5sb2NrcHQgcHRzbmFtZSBcCistCSAgICBwdHNuYW1lX3JfY2hrCisrcm91dGluZXMgOj0gZ2V0cHQgZ3JhbnRwdCB1bmxvY2twdCBwdHNuYW1lIHB0c25hbWVfcl9jaGsKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfVVRNUCkgXAorKwkgKz0gZ2V0dXRlbnQgZ2V0dXRlbnRfciBnZXR1dGlkIGdldHV0bGluZSBnZXR1dGlkX3IgZ2V0dXRsaW5lX3IgXAorKwkgICAgdXRtcF9maWxlIHV0bXBuYW1lIHVwZHd0bXAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfR0VUTE9HSU4pICs9IGdldGxvZ2luIGdldGxvZ2luX3IgZ2V0bG9naW5fcl9jaGsKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfQlNEKSArPSBzZXRsb2dpbgorIAorIENGTEFHUy1ncmFudHB0LmMgPSAtRExJQkVYRUNESVI9JyIkKGxpYmV4ZWNkaXIpIicKKyAKKy1vdGhlcnMgPSB1dG1wZHVtcAorK290aGVycy0kKE9QVElPTl9FR0xJQkNfVVRNUCkgKz0gdXRtcGR1bXAKKyAKKyBpZmVxICh5ZXMsJChidWlsZC1wdC1jaG93bikpCisgb3RoZXJzICs9IHB0X2Nob3duCitAQCAtNDYsOCArNDksOCBAQCB2cGF0aCAlLmMgcHJvZ3JhbXMKKyB0ZXN0cyA6PSB0c3QtdXRtcCB0c3QtdXRtcHggdHN0LWdyYW50cHQgdHN0LXB0c25hbWUgdHN0LWdldGxvZ2luCisgCisgIyBCdWlsZCB0aGUgLWx1dGlsIGxpYnJhcnkgd2l0aCB0aGVzZSBleHRyYSBmdW5jdGlvbnMuCistZXh0cmEtbGlicyAgICAgIDo9IGxpYnV0aWwKKy1leHRyYS1saWJzLW90aGVycyA6PSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfVVRNUCkgOj0gbGlidXRpbAorK2V4dHJhLWxpYnMtb3RoZXJzIDo9ICQoZXh0cmEtbGlicy15KQorIAorIGxpYnV0aWwtcm91dGluZXM6PSBsb2dpbiBsb2dpbl90dHkgbG9nb3V0IGxvZ3d0bXAgb3BlbnB0eSBmb3JrcHR5CisgCitkaWZmIC0tZ2l0IGEvbWFsbG9jL01ha2VmaWxlIGIvbWFsbG9jL01ha2VmaWxlCitpbmRleCA2N2VkMjkzLi4yNzJjYTRkIDEwMDY0NAorLS0tIGEvbWFsbG9jL01ha2VmaWxlCisrKysgYi9tYWxsb2MvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIG1hbGxvYyByb3V0aW5lcworICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG1hbGxvYworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM5LDkgKzQxLDE1IEBAIGluc3RhbGwtbGliIDo9IGxpYm1jaGVjay5hCisgbm9uLWxpYi5hIDo9IGxpYm1jaGVjay5hCisgCisgIyBBZGRpdGlvbmFsIGxpYnJhcnkuCisraWZlcSAoJChPUFRJT05fRUdMSUJDX01FTVVTQUdFKSx5KQorIGV4dHJhLWxpYnMgPSBsaWJtZW11c2FnZQorIGV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorIAorK2lmZGVmIE9QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorK0NQUEZMQUdTLW1lbXVzYWdlICs9IC1EX19PUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkU9JChPUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUpCisrZW5kaWYKKytlbmRpZgorKworIGxpYm1lbXVzYWdlLXJvdXRpbmVzID0gbWVtdXNhZ2UKKyBsaWJtZW11c2FnZS1pbmhpYml0LW8gPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKK0BAIC03MSw3ICs3OSw3IEBAIGVuZGlmCisgIyBVbmxlc3Mgd2UgZ2V0IGEgdGVzdCBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBsaWJnZCB3aGljaCBhbHNvIHdvcmtzCisgIyBmb3IgY3Jvc3MtY29tcGlsaW5nIHdlIGRpc2FibGUgdGhlIG1lbXVzYWdlc3RhdCBnZW5lcmF0aW9uIGluIHRoaXMKKyAjIHNpdHVhdGlvbi4KKy1pZm5lcSAoJChjcm9zcy1jb21waWxpbmcpLHllcykKKytpZmVxICgkKGNyb3NzLWNvbXBpbGluZykkKE9QVElPTl9FR0xJQkNfTUVNVVNBR0UpLG5veSkKKyAjIElmIHRoZSBnZCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSB3ZSBidWlsZCB0aGUgYG1lbXVzYWdlc3RhdCcgcHJvZ3JhbS4KKyBpZm5lcSAoJChMSUJHRCksbm8pCisgb3RoZXJzOiAkKG9ianBmeCltZW11c2FnZQorZGlmZiAtLWdpdCBhL21hbGxvYy9tZW11c2FnZS5jIGIvbWFsbG9jL21lbXVzYWdlLmMKK2luZGV4IGE1N2JhOGUuLjczMmJhOWQgMTAwNjQ0CistLS0gYS9tYWxsb2MvbWVtdXNhZ2UuYworKysrIGIvbWFsbG9jL21lbXVzYWdlLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxtZW11c2FnZS5oPgorIAorQEAgLTkzLDcgKzk0LDExIEBAIHN0YXRpYyBfX3RocmVhZCB1aW50cHRyX3Qgc3RhcnRfc3A7CisgI2RlZmluZSBwZWFrX3N0YWNrICAgICAgcGVha191c2VbMV0KKyAjZGVmaW5lIHBlYWtfdG90YWwgICAgICBwZWFrX3VzZVsyXQorIAorLSNkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRSAgICAgMzI3NjgKKysjaWZuZGVmIF9fT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrIyBkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRQkzMjc2OAorKyNlbHNlCisrIyBkZWZpbmUgREVGQVVMVF9CVUZGRVJfU0laRQlfX09QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorKyNlbmRpZgorIHN0YXRpYyBzaXplX3QgYnVmZmVyX3NpemU7CisgCisgc3RhdGljIGludCBmZCA9IC0xOworZGlmZiAtLWdpdCBhL21hbGxvYy9tZW11c2FnZS5zaCBiL21hbGxvYy9tZW11c2FnZS5zaAoraW5kZXggOGFiOGNjMi4uZDE4ZjQ0NiAxMDA3NTUKKy0tLSBhL21hbGxvYy9tZW11c2FnZS5zaAorKysrIGIvbWFsbG9jL21lbXVzYWdlLnNoCitAQCAtMzUsNyArMzUsNyBAQCBkb19taXNzaW5nX2FyZygpIHsKKyAKKyAjIFByaW50IGhlbHAgbWVzc2FnZQorIGRvX2hlbHAoKSB7CistICBlY2hvICQiVXNhZ2U6IG1lbXVzYWdlIFtPUFRJT05dLi4uIFBST0dSQU0gW1BST0dSQU1PUFRJT05dLi4uCisrICBwcmludGYgJCJVc2FnZTogbWVtdXNhZ2UgW09QVElPTl0uLi4gUFJPR1JBTSBbUFJPR1JBTU9QVElPTl0uLi4KKyBQcm9maWxlIG1lbW9yeSB1c2FnZSBvZiBQUk9HUkFNLgorIAorICAgIC1uLC0tcHJvZ25hbWU9TkFNRSAgICAgTmFtZSBvZiB0aGUgcHJvZ3JhbSBmaWxlIHRvIHByb2ZpbGUKK2RpZmYgLS1naXQgYS9tYXRoL01ha2VmaWxlIGIvbWF0aC9NYWtlZmlsZQoraW5kZXggNjM4OGJhZS4uZWQxYzUxMSAxMDA2NDQKKy0tLSBhL21hdGgvTWFrZWZpbGUKKysrKyBiL21hdGgvTWFrZWZpbGUKK0BAIC0yMSw2ICsyMSw4IEBAIHN1YmRpcgkJOj0gbWF0aAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyAjIEluc3RhbGxlZCBoZWFkZXIgZmlsZXMuCisgaGVhZGVycwkJOj0gbWF0aC5oIGJpdHMvbWF0aGNhbGxzLmggYml0cy9tYXRoaW5saW5lLmggYml0cy9odWdlX3ZhbC5oIFwKKyAJCSAgIGJpdHMvaHVnZV92YWxmLmggYml0cy9odWdlX3ZhbGwuaCBiaXRzL2luZi5oIGJpdHMvbmFuLmggXAorQEAgLTM0LDggKzM2LDggQEAgYXV4CQk6PSBzZXRmcHVjdyBmcHVfY29udHJvbAorIAorICMgQnVpbGQgdGhlIC1sbSBsaWJyYXJ5LgorIAorLWV4dHJhLWxpYnMJOj0gbGlibQorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xJQk0pIDo9IGxpYm0KKytleHRyYS1saWJzLW90aGVycy0kKE9QVElPTl9FR0xJQkNfTElCTSkgPSAkKGV4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xJQk0pKQorIAorIGxpYm0tc3VwcG9ydCA9IHNfbGliX3ZlcnNpb24gc19tYXRoZXJyIHNfc2lnbmdhbQkJCVwKKyAJICAgICAgIGZjbHJleGNwdCBmZ2V0ZXhjcHRmbGcgZnJhaXNlZXhjcHQgZnNldGV4Y3B0ZmxnCQlcCitkaWZmIC0tZ2l0IGEvbWlzYy9NYWtlZmlsZSBiL21pc2MvTWFrZWZpbGUKK2luZGV4IGFlY2IwZGEuLmU2YjdjMjMgMTAwNjQ0CistLS0gYS9taXNjL01ha2VmaWxlCisrKysgYi9taXNjL01ha2VmaWxlCitAQCAtMTksNiArMTksMTAgQEAKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgbWlzYyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKyAKKysjIFNvbWUgc3lzdGVtLWRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIHVzZSBvcHRpb24KKysjIGdyb3VwcyAoc2VlIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L01ha2VmaWxlLCBmb3IgZXhhbXBsZSkuCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBtaXNjCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtNDYsNDAgKzUwLDQ3IEBAIHJvdXRpbmVzIDo9IGJyayBzYnJrIHNzdGsgaW9jdGwgXAorIAkgICAgc2VsZWN0IHBzZWxlY3QgXAorIAkgICAgYWNjdCBjaHJvb3QgZnN5bmMgc3luYyBmZGF0YXN5bmMgc3luY2ZzIHJlYm9vdCBcCisgCSAgICBnZXRob3N0aWQgc2V0aG9zdGlkIFwKKy0JICAgIHJldm9rZSB2aGFuZ3VwIFwKKysJICAgIHZoYW5ndXAgXAorIAkgICAgc3dhcG9uIHN3YXBvZmYgbWt0ZW1wIG1rc3RlbXAgbWtzdGVtcDY0IG1rZHRlbXAgXAorIAkgICAgbWtvc3RlbXAgbWtvc3RlbXA2NCBta3N0ZW1wcyBta3N0ZW1wczY0IG1rb3N0ZW1wcyBta29zdGVtcHM2NCBcCisgCSAgICB1YWxhcm0gdXNsZWVwIFwKKyAJICAgIGd0dHkgc3R0eSBcCisgCSAgICBwdHJhY2UgXAorLQkgICAgZnN0YWIgbW50ZW50IG1udGVudF9yIFwKKysJICAgIG1udGVudCBtbnRlbnRfciBcCisgCSAgICB1dGltZXMgbHV0aW1lcyBmdXRpbWVzIGZ1dGltZXNhdCBcCisgCSAgICB0cnVuY2F0ZSBmdHJ1bmNhdGUgdHJ1bmNhdGU2NCBmdHJ1bmNhdGU2NCBcCistCSAgICBjaGZsYWdzIGZjaGZsYWdzIFwKKyAJICAgIGluc3JlbXF1ZSBnZXR0dHllbnQgZ2V0dXNlcnNoZWxsIGdldHBhc3MgdHR5c2xvdCBcCisgCSAgICBzeXNsb2cgc3lzY2FsbCBkYWVtb24gXAorIAkgICAgbW1hcCBtbWFwNjQgbXVubWFwIG1wcm90ZWN0IG1zeW5jIG1hZHZpc2UgbWluY29yZSByZW1hcF9maWxlX3BhZ2VzXAorIAkgICAgbWxvY2sgbXVubG9jayBtbG9ja2FsbCBtdW5sb2NrYWxsIFwKKy0JICAgIGVmZ2N2dCBlZmdjdnRfciBxZWZnY3Z0IHFlZmdjdnRfciBcCisgCSAgICBoc2VhcmNoIGhzZWFyY2hfciB0c2VhcmNoIGxzZWFyY2ggXAorIAkgICAgZXJyIGVycm9yIHVzdGF0IFwKKy0JICAgIGdldHN5c3N0YXRzIGRpcm5hbWUgcmVnZXhwIFwKKysJICAgIGdldHN5c3N0YXRzIGRpcm5hbWUgXAorIAkgICAgZ2V0bG9hZGF2ZyBnZXRjbGt0Y2sgXAorIAkgICAgZmdldHhhdHRyIGZsaXN0eGF0dHIgZnJlbW92ZXhhdHRyIGZzZXR4YXR0ciBnZXR4YXR0ciBcCisgCSAgICBsaXN0eGF0dHIgbGdldHhhdHRyIGxsaXN0eGF0dHIgbHJlbW92ZXhhdHRyIGxzZXR4YXR0ciBcCisgCSAgICByZW1vdmV4YXR0ciBzZXR4YXR0ciBnZXRhdXh2YWwgaWZ1bmMtaW1wbC1saXN0CisgCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfUkVHRVhQKSArPSByZWdleHAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRlNUQUIpICs9IGZzdGFiCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JTRCkgKz0gY2hmbGFncyBmY2hmbGFncyByZXZva2UKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRkNWVCkgKz0gZWZnY3Z0IGVmZ2N2dF9yIHFlZmdjdnQgcWVmZ2N2dF9yCisrCisgZ2VuZXJhdGVkICs9IHRzdC1lcnJvcjEubXRyYWNlIHRzdC1lcnJvcjEtbWVtLm91dAorIAorIGF1eCA6PSBpbml0LW1pc2MKKyBpbnN0YWxsLWxpYiA6PSBsaWJnLmEKKyBncGwybGdwbCA6PSBlcnJvci5jIGVycm9yLmgKKyAKKy10ZXN0cyA6PSB0c3QtZGlybmFtZSB0c3QtdHNlYXJjaCB0c3QtZmRzZXQgdHN0LWVmZ2N2dCB0c3QtbW50ZW50IHRzdC1oc2VhcmNoIFwKKy0JIHRzdC1lcnJvcjEgdHN0LXBzZWxlY3QgdHN0LWluc3JlbXF1ZSB0c3QtbW50ZW50MiBidWctaHNlYXJjaDEKKyt0ZXN0cyA6PSB0c3QtZGlybmFtZSB0c3QtdHNlYXJjaCB0c3QtZmRzZXQgdHN0LW1udGVudCB0c3QtaHNlYXJjaCBcCisrCSB0c3QtcHNlbGVjdCB0c3QtaW5zcmVtcXVlIHRzdC1tbnRlbnQyIGJ1Zy1oc2VhcmNoMQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICs9IHRzdC1lcnJvcjEKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfRkNWVCkgKz0gdHN0LWVmZ2N2dAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KXRzdC1lcnJvcjEtbWVtLm91dAorIGVuZGlmCisrZW5kaWYKKyAKKyBDRkxBR1Mtc2VsZWN0LmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIENGTEFHUy10c2VhcmNoLmMgPSAkKHVzZXMtY2FsbGJhY2tzKQorZGlmZiAtLWdpdCBhL21pc2MvZXJyLmMgYi9taXNjL2Vyci5jCitpbmRleCA3Yjk4MTU3Li5lZmNlOGQ1IDEwMDY0NAorLS0tIGEvbWlzYy9lcnIuYworKysrIGIvbWlzYy9lcnIuYworQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2RlZmluZSBmbG9ja2ZpbGUocykgX0lPX2Zsb2NrZmlsZSAocykKK0BAIC0zNyw2ICszOCw3IEBAIGV4dGVybiBjaGFyICpfX3Byb2duYW1lOworICAgdmFfZW5kIChhcCk7CQkJCQkJCQkgICAgICBcCisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgc3RhdGljIHZvaWQKKyBjb252ZXJ0X2FuZF9wcmludCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyB7CitAQCAtODEsNiArODMsNyBAQCBjb252ZXJ0X2FuZF9wcmludCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAKKyAgIF9fdmZ3cHJpbnRmIChzdGRlcnIsIHdmb3JtYXQsIGFwKTsKKyB9CisrI2VuZGlmCisgCisgdm9pZAorIHZ3YXJueCAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKK0BAIC04OCw5ICs5MSwxMyBAQCB2d2FybnggKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgICBmbG9ja2ZpbGUgKHN0ZGVycik7CisgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgX19md3ByaW50ZiAoc3RkZXJyLCBMIiVzOiAiLCBfX3Byb2duYW1lKTsKKyAgICAgICBjb252ZXJ0X2FuZF9wcmludCAoZm9ybWF0LCBhcCk7CisgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdGRlcnIpOworKyNlbHNlCisrICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworQEAgLTExMSw2ICsxMTgsNyBAQCB2d2FybiAoY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcCkKKyAgIGZsb2NrZmlsZSAoc3RkZXJyKTsKKyAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJXM6ICIsIF9fcHJvZ25hbWUpOworICAgICAgIGlmIChmb3JtYXQpCisgCXsKK0BAIC0xMTksNiArMTI3LDkgQEAgdndhcm4gKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgCX0KKyAgICAgICBfX3NldF9lcnJubyAoZXJyb3IpOworICAgICAgIF9fZndwcmludGYgKHN0ZGVyciwgTCIlbVxuIik7CisrI2Vsc2UKKysgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICB7CitkaWZmIC0tZ2l0IGEvbWlzYy9lcnJvci5jIGIvbWlzYy9lcnJvci5jCitpbmRleCBhYWExMjBkLi5kNmNiYzgyIDEwMDY0NAorLS0tIGEvbWlzYy9lcnJvci5jCisrKysgYi9taXNjL2Vycm9yLmMKK0BAIC0zNSw2ICszNSw3IEBACisgI2VuZGlmCisgCisgI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgaW5jbHVkZSA8bGliaW50bC5oPgorICMgaW5jbHVkZSA8c3RkYm9vbC5oPgorICMgaW5jbHVkZSA8c3RkaW50Lmg+CitAQCAtMjA1LDYgKzIwNiw3IEBAIGVycm9yX3RhaWwgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXJncykKKyAjaWYgX0xJQkMKKyAgIGlmIChfSU9fZndpZGUgKHN0ZGVyciwgMCkgPiAwKQorICAgICB7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChtZXNzYWdlKSArIDE7CisgICAgICAgd2NoYXJfdCAqd21lc3NhZ2UgPSBOVUxMOworICAgICAgIG1ic3RhdGVfdCBzdDsKK0BAIC0yNjUsNiArMjY3LDkgQEAgZXJyb3JfdGFpbCAoaW50IHN0YXR1cywgaW50IGVycm51bSwgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcmdzKQorIAorICAgICAgIGlmICh1c2VfbWFsbG9jKQorIAlmcmVlICh3bWVzc2FnZSk7CisrI2Vsc2UKKysgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICNlbmRpZgorZGlmZiAtLWdpdCBhL21pc2MvdHN0LWVmZ2N2dC5jIGIvbWlzYy90c3QtZWZnY3Z0LmMKK2luZGV4IDUwODNmZWMuLjc5ZWQzNmMgMTAwNjQ0CistLS0gYS9taXNjL3RzdC1lZmdjdnQuYworKysrIGIvbWlzYy90c3QtZWZnY3Z0LmMKK0BAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyB0ZXN0Y2FzZSBlY3Z0X3Rlc3RzW10gPQorICAgeyAxMjMuMDEsIC00LCAzLCAiIiB9LAorICAgeyAxMjYuNzEsIC00LCAzLCAiIiB9LAorICAgeyAwLjAsIDQsIDEsICIwMDAwIiB9LAorLSNpZiBEQkxfTUFOVF9ESUcgPT0gNTMKKysjaWYgREJMX01BTlRfRElHID09IDUzICYmICEoZGVmaW5lZCBfX3Bvd2VycGNfXyAmJiBkZWZpbmVkIF9fTk9fRlBSU19fICYmICFkZWZpbmVkIF9TT0ZUX0ZMT0FUICYmICFkZWZpbmVkIF9TT0ZUX0RPVUJMRSkKKyAgIHsgMHgxcC0xMDc0LCAzLCAtMzIzLCAiNDk0IiB9LAorICAgeyAtMHgxcC0xMDc0LCAzLCAtMzIzLCAiNDk0IiB9LAorICNlbmRpZgorZGlmZiAtLWdpdCBhL25pcy9NYWtlZmlsZSBiL25pcy9NYWtlZmlsZQoraW5kZXggMDM3ZTY3NC4uYzk2Nzg1MCAxMDA2NDQKKy0tLSBhL25pcy9NYWtlZmlsZQorKysrIGIvbmlzL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBOSVMvTklTKyBwYXJ0LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5pcworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDE5ICszMiwyNiBAQCBlbmRpZgorIAorICMgVGhlc2UgYXJlIHRoZSBkYXRhYmFzZXMgYXZhaWxhYmxlIGZvciB0aGUgbmlzIChhbmQgcGVyaGFwcyBsYXRlciBuaXNwbHVzKQorICMgc2VydmljZS4gIFRoaXMgbXVzdCBiZSBhIHN1cGVyc2V0IG9mIHRoZSBzZXJ2aWNlcyBpbiBuc3MuCistZGF0YWJhc2VzCQk9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBncnAgcHdkIHJwYyBldGhlcnMgXAorLQkJCSAgc3B3ZCBuZXRncnAgYWxpYXMgcHVibGlja2V5CisrZGF0YWJhc2VzLXkJCTo9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBncnAgcHdkIHJwYyBldGhlcnMgXAorKwkJCSAgIHNwd2QgbmV0Z3JwIHB1YmxpY2tleQorK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfREJfQUxJQVNFUykgKz0gYWxpYXMKKyAKKyAjIFNwZWNpZnkgcnVsZXMgZm9yIHRoZSBuc3NfKiBtb2R1bGVzLgorLXNlcnZpY2VzCQk6PSBuaXMgbmlzcGx1cyBjb21wYXQKKysjIFRoZSAnY29tcGF0JyBtb2R1bGUgaW5jbHVkZXMgbmlzIHN1cHBvcnQsIGFuZCB0aGUgJ25zcycgZGlyZWN0b3J5CisrIyBpbmNsdWRlcyBhIGJhcmUtYm9uZXMgImZpbGVzIiBsaWJyYXJ5LCBzbyB3ZSdsbCBpbmNsdWRlICdjb21wYXQnIGluCisrIyBPUFRJT05fRUdMSUJDX05JUy4KKytzZXJ2aWNlcy15CQk6PQorK3NlcnZpY2VzLSQoT1BUSU9OX0VHTElCQ19OSVMpICs9IG5pcyBuaXNwbHVzIGNvbXBhdAorKworK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX05JUykgKz0gbGlibnNsCisrZXh0cmEtbGlicy15CQkrPSAkKHNlcnZpY2VzLXk6JT1saWJuc3NfJSkKKyAKKy1leHRyYS1saWJzCQk9IGxpYm5zbCAkKHNlcnZpY2VzOiU9bGlibnNzXyUpCisgIyBUaGVzZSBsaWJyYXJpZXMgd2lsbCBiZSBidWlsdCBpbiB0aGUgYG90aGVycycgcGFzcyByYXRoZXIgdGhhbgorICMgdGhlIGBsaWInIHBhc3MsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gbGliYy5zbyBiZWluZyBidWlsdCBhbHJlYWR5LgorLWV4dHJhLWxpYnMtb3RoZXJzCT0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtb3RoZXJzLXkJKz0gJChleHRyYS1saWJzLXkpCisgCisgIyBUaGUgc291cmNlcyBhcmUgZm91bmQgaW4gdGhlIGFwcHJvcHJpYXRlIHN1YmRpci4KKy1zdWJkaXItZGlycyA9ICQoc2VydmljZXM6JT1uc3NfJSkKKytzdWJkaXItZGlycyA9ICQoc2VydmljZXMteTolPW5zc18lKQorIHZwYXRoICUuYyAkKHN1YmRpci1kaXJzKQorIAorIGxpYm5zbC1yb3V0aW5lcyA9IHlwX3hkciB5cGNsbnQgeXB1cGRhdGVfeGRyIFwKK0BAIC02MCwxMSArNjksMTEgQEAgbGlibnNsLXJvdXRpbmVzID0geXBfeGRyIHlwY2xudCB5cHVwZGF0ZV94ZHIgXAorIGxpYm5zc19jb21wYXQtcm91dGluZXMJOj0gJChhZGRwcmVmaXggY29tcGF0LSxncnAgcHdkIHNwd2QgaW5pdGdyb3VwcykKKyBsaWJuc3NfY29tcGF0LWluaGliaXQtbwk9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorLWxpYm5zc19uaXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzLSwkKGRhdGFiYXNlcykpIG5pcy1pbml0Z3JvdXBzIFwKKytsaWJuc3NfbmlzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pcy0sJChkYXRhYmFzZXMteSkpIG5pcy1pbml0Z3JvdXBzIFwKKyAJCQkgICBuc3MtbmlzCisgbGlibnNzX25pcy1pbmhpYml0LW8JPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKKy1saWJuc3NfbmlzcGx1cy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXNwbHVzLSwkKGRhdGFiYXNlcykpIG5pc3BsdXMtcGFyc2VyIFwKKytsaWJuc3NfbmlzcGx1cy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXNwbHVzLSwkKGRhdGFiYXNlcy15KSkgbmlzcGx1cy1wYXJzZXIgXAorIAkJCSAgIG5zcy1uaXNwbHVzIG5pc3BsdXMtaW5pdGdyb3VwcworIGxpYm5zc19uaXNwbHVzLWluaGliaXQtbyA9ICQoZmlsdGVyLW91dCAub3MsJChvYmplY3Qtc3VmZml4ZXMpKQorIAorQEAgLTgwLDEyICs4OSwxMiBAQCBsaWJuc2wtbGliYyA9ICQoY29tbW9uLW9ianBmeClsaW5rb2JqL2xpYmMuc28KKyAjIFRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSBzZXR0aW5nIHRvIGxpbmsgb2JqZWN0cyB1c2luZyBkZXByZWNhdGVkCisgIyBSUEMgaW50ZXJmYWNlcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIGxpYmMuc28gdGhhdCBtYWtlcyB0aGVtIGF2YWlsYWJsZQorICMgZm9yIG5ldyBsaW5rczoKKy0kKHNlcnZpY2VzOiU9JChvYmpwZngpbGlibnNzXyUuc28pICQob2JqcGZ4KWxpYm5zbC5zbzogXAorKyQoc2VydmljZXMteTolPSQob2JqcGZ4KWxpYm5zc18lLnNvKSAkKG9ianBmeClsaWJuc2wuc286IFwKKyAgIGxpYmMtZm9yLWxpbmsgPSAkKGxpYm5zbC1saWJjKQorIAorIAorIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCistJChvdGhlcnM6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLnNvJChsaWJuc2wuc28tdmVyc2lvbikKKyskKG90aGVycy15OiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5zbyQobGlibnNsLnNvLXZlcnNpb24pCisgZWxzZQorLSQob3RoZXJzOiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5hCisrJChvdGhlcnMteTolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuYQorIGVuZGlmCitkaWZmIC0tZ2l0IGEvbnB0bC9NYWtlZmlsZSBiL25wdGwvTWFrZWZpbGUKK2luZGV4IGFhY2EwYTQuLjU5NmNhM2MgMTAwNjQ0CistLS0gYS9ucHRsL01ha2VmaWxlCisrKysgYi9ucHRsL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgTlBUTCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5wdGwKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0xMTgsNyArMTIwLDcgQEAgbGlicHRocmVhZC1yb3V0aW5lcyA9IG5wdGwtaW5pdCB2YXJzIGV2ZW50cyB2ZXJzaW9uIHB0LWludGVycCBcCisgCQkgICAgICBwdC1yYWlzZSBwdC1zeXN0ZW0gXAorIAkJICAgICAgZmxvY2tmaWxlIGZ0cnlsb2NrZmlsZSBmdW5sb2NrZmlsZSBcCisgCQkgICAgICBzaWdhY3Rpb24gXAorLQkJICAgICAgaGVycm5vIHJlcyBwdC1hbGxvY3J0c2lnIFwKKysJCSAgICAgIHB0LWFsbG9jcnRzaWcgXAorIAkJICAgICAgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHMgXAorIAkJICAgICAgcHRocmVhZF9nZXRhZmZpbml0eSBwdGhyZWFkX3NldGFmZmluaXR5IFwKKyAJCSAgICAgIHB0aHJlYWRfYXR0cl9nZXRhZmZpbml0eSBwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHkgXAorQEAgLTEzOCw4ICsxNDAsMTAgQEAgbGlicHRocmVhZC1yb3V0aW5lcyA9IG5wdGwtaW5pdCB2YXJzIGV2ZW50cyB2ZXJzaW9uIHB0LWludGVycCBcCisgIwkJICAgICAgcHRocmVhZF9zZXRnaWQgcHRocmVhZF9zZXRlZ2lkIHB0aHJlYWRfc2V0cmVnaWQgXAorICMJCSAgICAgIHB0aHJlYWRfc2V0cmVzZ2lkCisgCisrbGlicHRocmVhZC1yb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgOj0gaGVycm5vIHJlcworIGxpYnB0aHJlYWQtc2hhcmVkLW9ubHktcm91dGluZXMgPSB2ZXJzaW9uIHB0LWludGVycCBwdC1hbGxvY3J0c2lnIFwKKyAJCQkJICB1bndpbmQtZm9yY2VkdW53aW5kCisrCisgbGlicHRocmVhZC1zdGF0aWMtb25seS1yb3V0aW5lcyA9IHB0aHJlYWRfYXRmb3JrCisgCisgIyBTaW5jZSBjYW5jZWxsYXRpb24gaGFuZGxpbmcgaXMgaW4gbGFyZ2UgcGFydHMgaGFuZGxlZCB1c2luZyBleGNlcHRpb25zCitAQCAtMjIwLDcgKzIyNCw3IEBAIHRlc3RzID0gdHN0LXR5cGVzaXplcyBcCisgCXRzdC1tdXRleHBpMSB0c3QtbXV0ZXhwaTIgdHN0LW11dGV4cGkzIHRzdC1tdXRleHBpNCB0c3QtbXV0ZXhwaTUgXAorIAl0c3QtbXV0ZXhwaTVhIHRzdC1tdXRleHBpNiB0c3QtbXV0ZXhwaTcgdHN0LW11dGV4cGk3YSB0c3QtbXV0ZXhwaTggXAorIAl0c3QtbXV0ZXhwaTkgXAorLQl0c3Qtc3BpbjEgdHN0LXNwaW4yIHRzdC1zcGluMyB0c3Qtc3BpbjQgXAorKwl0c3Qtc3BpbjEgdHN0LXNwaW4yIHRzdC1zcGluMyBcCisgCXRzdC1jb25kMSB0c3QtY29uZDIgdHN0LWNvbmQzIHRzdC1jb25kNCB0c3QtY29uZDUgdHN0LWNvbmQ2IHRzdC1jb25kNyBcCisgCXRzdC1jb25kOCB0c3QtY29uZDkgdHN0LWNvbmQxMCB0c3QtY29uZDExIHRzdC1jb25kMTIgdHN0LWNvbmQxMyBcCisgCXRzdC1jb25kMTQgdHN0LWNvbmQxNSB0c3QtY29uZDE2IHRzdC1jb25kMTcgdHN0LWNvbmQxOCB0c3QtY29uZDE5IFwKK0BAIC0yNTYsMTQgKzI2MCwxNCBAQCB0ZXN0cyA9IHRzdC10eXBlc2l6ZXMgXAorIAl0c3QtY2FuY2VsNiB0c3QtY2FuY2VsNyB0c3QtY2FuY2VsOCB0c3QtY2FuY2VsOSB0c3QtY2FuY2VsMTAgXAorIAl0c3QtY2FuY2VsMTEgdHN0LWNhbmNlbDEyIHRzdC1jYW5jZWwxMyB0c3QtY2FuY2VsMTQgdHN0LWNhbmNlbDE1IFwKKyAJdHN0LWNhbmNlbDE2IHRzdC1jYW5jZWwxNyB0c3QtY2FuY2VsMTggdHN0LWNhbmNlbDE5IHRzdC1jYW5jZWwyMCBcCistCXRzdC1jYW5jZWwyMSB0c3QtY2FuY2VsMjIgdHN0LWNhbmNlbDIzIHRzdC1jYW5jZWwyNCB0c3QtY2FuY2VsMjUgXAorKwl0c3QtY2FuY2VsMjEgdHN0LWNhbmNlbDIyIHRzdC1jYW5jZWwyMyB0c3QtY2FuY2VsMjUgXAorIAl0c3QtY2FuY2VsLXNlbGYgdHN0LWNhbmNlbC1zZWxmLWNhbmNlbHN0YXRlIFwKKyAJdHN0LWNhbmNlbC1zZWxmLWNhbmNlbHR5cGUgdHN0LWNhbmNlbC1zZWxmLXRlc3RjYW5jZWwgXAorIAl0c3QtY2xlYW51cDAgdHN0LWNsZWFudXAxIHRzdC1jbGVhbnVwMiB0c3QtY2xlYW51cDMgdHN0LWNsZWFudXA0IFwKKyAJdHN0LWZsb2NrMSB0c3QtZmxvY2syIFwKKyAJdHN0LXNpZ25hbDEgdHN0LXNpZ25hbDIgdHN0LXNpZ25hbDMgdHN0LXNpZ25hbDQgdHN0LXNpZ25hbDUgXAorIAl0c3Qtc2lnbmFsNiB0c3Qtc2lnbmFsNyBcCistCXRzdC1leGVjMSB0c3QtZXhlYzIgdHN0LWV4ZWMzIHRzdC1leGVjNCBcCisrCXRzdC1leGVjMiB0c3QtZXhlYzMgdHN0LWV4ZWM0IFwKKyAJdHN0LWV4aXQxIHRzdC1leGl0MiB0c3QtZXhpdDMgXAorIAl0c3Qtc3RkaW8xIHRzdC1zdGRpbzIgXAorIAl0c3Qtc3RhY2sxIHRzdC1zdGFjazIgdHN0LXN0YWNrMyB0c3Qtc3RhY2s0IHRzdC1wdGhyZWFkLWdldGF0dHIgXAorQEAgLTI3MSwxMyArMjc1LDEyIEBAIHRlc3RzID0gdHN0LXR5cGVzaXplcyBcCisgCXRzdC11bmxvYWQgXAorIAl0c3QtZGxzeW0xIFwKKyAJdHN0LXN5c2NvbmYgXAorLQl0c3QtbG9jYWxlMSB0c3QtbG9jYWxlMiBcCisrCXRzdC1sb2NhbGUyIFwKKyAJdHN0LXVtYXNrMSBcCisgCXRzdC1wb3BlbjEgXAorIAl0c3QtY2xvY2sxIFwKKyAJdHN0LWNvbnRleHQxIFwKKyAJdHN0LXNjaGVkMSBcCistCXRzdC1iYWNrdHJhY2UxIFwKKyAJdHN0LWFic3RpbWUgXAorIAl0c3QtdmZvcmsxIHRzdC12Zm9yazIgdHN0LXZmb3JrMXggdHN0LXZmb3JrMnggXAorIAl0c3QtZ2V0cGlkMyBcCitAQCAtMjg4LDkgKzI5MSwxNiBAQCB4dGVzdHMgPSB0c3Qtc2V0dWlkMSB0c3Qtc2V0dWlkMS1zdGF0aWMgdHN0LXNldHVpZDIgXAorIAl0c3QtbXV0ZXhwcDEgdHN0LW11dGV4cHA2IHRzdC1tdXRleHBwMTAKKyB0ZXN0LXNyY3MgPSB0c3Qtb2Rkc3RhY2tsaW1pdAorIAorLSMgVGVzdCBleHBlY3RlZCB0byBmYWlsIG9uIG1vc3QgdGFyZ2V0cyAoZXhjZXB0IHg4Nl82NCkgZHVlIHRvIGJ1ZworLSMgMTg0MzUgLSBwdGhyZWFkX29uY2UgaGFuZ3Mgd2hlbiBpbml0IHJvdXRpbmUgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKy10ZXN0LXhmYWlsLXRzdC1vbmNlNSA9IHllcworKyMgVGhpcyB0ZXN0IHVzZXMgdGhlIHBvc2l4X3NwYXduIGZ1bmN0aW9ucy4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1BBV04pICs9IHRzdC1leGVjMQorKworKyMgVGhpcyB0ZXN0IHVzZXMgdGhlICdiYWNrdHJhY2UnIGZ1bmN0aW9ucy4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQkFDS1RSQUNFKSArPSB0c3QtYmFja3RyYWNlMQorKworKyMgVGhpcyB0ZXN0IGlzIHdyaXR0ZW4gaW4gQysrLgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IHRzdC1jYW5jZWwyNAorKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gdHN0LWxvY2FsZTEKKyAKKyAjIEZpbGVzIHdoaWNoIG11c3Qgbm90IGJlIGxpbmtlZCB3aXRoIGxpYnB0aHJlYWQuCisgdGVzdHMtbm9saWJwdGhyZWFkID0gdHN0LXVubG9hZAorZGlmZiAtLWdpdCBhL25wdGwvcHRocmVhZF9jcmVhdGUuYyBiL25wdGwvcHRocmVhZF9jcmVhdGUuYworaW5kZXggZDEwZjRlYS4uMTQyNTdjZSAxMDA2NDQKKy0tLSBhL25wdGwvcHRocmVhZF9jcmVhdGUuYworKysrIGIvbnB0bC9wdGhyZWFkX2NyZWF0ZS5jCitAQCAtMzMsNiArMzMsNyBAQAorICNpbmNsdWRlIDxkZWZhdWx0LXNjaGVkLmg+CisgI2luY2x1ZGUgPGZ1dGV4LWludGVybmFsLmg+CisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorIAorICNpbmNsdWRlIDxzdGFwLXByb2JlLmg+CitAQCAtMjYyLDggKzI2MywxMCBAQCBTVEFSVF9USFJFQURfREVGTgorICAgVEhSRUFEX1NFVE1FTSAocGQsIGNwdWNsb2NrX29mZnNldCwgbm93KTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIC8qIEluaXRpYWxpemUgcmVzb2x2ZXIgc3RhdGUgcG9pbnRlci4gICovCisgICBfX3Jlc3AgPSAmcGQtPnJlczsKKysjZW5kaWYKKyAKKyAgIC8qIEluaXRpYWxpemUgcG9pbnRlcnMgdG8gbG9jYWxlIGRhdGEuICAqLworICAgX19jdHlwZV9pbml0ICgpOworQEAgLTM0Niw4ICszNDksMTAgQEAgU1RBUlRfVEhSRUFEX0RFRk4KKyAgIC8qIFJ1biB0aGUgZGVzdHJ1Y3RvciBmb3IgdGhlIHRocmVhZC1sb2NhbCBkYXRhLiAgKi8KKyAgIF9fbnB0bF9kZWFsbG9jYXRlX3RzZCAoKTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIC8qIENsZWFuIHVwIGFueSBzdGF0ZSBsaWJjIHN0b3JlZCBpbiB0aHJlYWQtbG9jYWwgdmFyaWFibGVzLiAgKi8KKyAgIF9fbGliY190aHJlYWRfZnJlZXJlcyAoKTsKKysjZW5kaWYKKyAKKyAgIC8qIElmIHRoaXMgaXMgdGhlIGxhc3QgdGhyZWFkIHdlIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBub3cuICBXZQorICAgICAgZG8gbm90IG5vdGlmeSB0aGUgZGVidWdnZXIsIGl0IG1pZ2h0IGp1c3QgaXJyaXRhdGUgaXQgaWYgdGhlcmUKK2RpZmYgLS1naXQgYS9uc2NkL01ha2VmaWxlIGIvbnNjZC9NYWtlZmlsZQoraW5kZXggZWRlOTQxZC4uZjRmM2Y4ZCAxMDA2NDQKKy0tLSBhL25zY2QvTWFrZWZpbGUKKysrKyBiL25zY2QvTWFrZWZpbGUKK0BAIC0xOCwxNCArMTgsMTcgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIG5zY2QgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBuc2NkCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaWZuZXEgKCQodXNlLW5zY2QpLG5vKQorLXJvdXRpbmVzIDo9IG5zY2RfZ2V0cHdfciBuc2NkX2dldGdyX3IgbnNjZF9nZXRoc3RfciBuc2NkX2dldGFpIFwKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gXAorKwkgICAgIG5zY2RfZ2V0cHdfciBuc2NkX2dldGdyX3IgbnNjZF9nZXRoc3RfciBuc2NkX2dldGFpIFwKKyAJICAgIG5zY2RfaW5pdGdyb3VwcyBuc2NkX2dldHNlcnZfciBuc2NkX25ldGdyb3VwCistYXV4CTo9IG5zY2RfaGVscGVyCisrYXV4LSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkX2hlbHBlcgorIGVuZGlmCisgCisgIyBUbyBmaW5kIHhtYWxsb2MuYworQEAgLTM3LDE0ICs0MCwxOCBAQCBuc2NkLW1vZHVsZXMgOj0gbnNjZCBjb25uZWN0aW9ucyBwd2RjYWNoZSBnZXRwd25hbV9yIGdldHB3dWlkX3IgZ3JwY2FjaGUgXAorIAkJZGJnX2xvZyBuc2NkX2NvbmYgbnNjZF9zdGF0IGNhY2hlIG1lbSBuc2NkX3NldHVwX3RocmVhZCBcCisgCQl4bWFsbG9jIHhzdHJkdXAgYWljYWNoZSBpbml0Z3JjYWNoZSBnYWkgcmVzX2hjb25mIFwKKyAJCW5ldGdyb3VwY2FjaGUKKy0KKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfTklTKSkKKysjIElmIHdlIGhhdmVuJ3QgYnVpbGQgbGlibnNsLnNvLCB0aGVuIHdlJ2xsIG5lZWQgdG8gaW5jbHVkZSBvdXIKKysjIG93biBjb3B5IG9mIG5pc19oYXNoLgorK25zY2QtbW9kdWxlcyArPSBuaXNfaGFzaAorK2VuZGlmCisgaWZlcSAoJChidWlsZC1uc2NkKSQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzeWVzKQorIAorLW90aGVycyArPSBuc2NkCistb3RoZXJzLXBpZSArPSBuc2NkCistaW5zdGFsbC1zYmluIDo9IG5zY2QKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IG5zY2QKKytvdGhlcnMtcGllLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkCisraW5zdGFsbC1zYmluLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkCisgCistZXh0cmEtb2JqcyA9ICQobnNjZC1tb2R1bGVzOj0ubykKKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSAkKG5zY2QtbW9kdWxlczo9Lm8pCisgCisgZW5kaWYKKyAKK0BAIC0xMDAsNyArMTA3LDE1IEBAIGluY2x1ZGUgJChwYXRzdWJzdCAlLCQoLi4pY3BwZmxhZ3MtaXRlcmF0b3IubWssJChjcHAtc3Jjcy1sZWZ0KSkKKyAkKG9ianBmeCluc2NkOiAkKG5zY2QtbW9kdWxlczolPSQob2JqcGZ4KSUubykKKyAKKyBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorLSQob2JqcGZ4KW5zY2Q6ICQoc2hhcmVkLXRocmVhZC1saWJyYXJ5KSAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5zbworKyQob2JqcGZ4KW5zY2Q6ICQoc2hhcmVkLXRocmVhZC1saWJyYXJ5KQorK2Vsc2UKKyskKG9ianBmeCluc2NkOiAkKHN0YXRpYy10aHJlYWQtbGlicmFyeSkKKytlbmRpZgorKworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX05JUykpCisraWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKyskKG9ianBmeCluc2NkOiAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5zbworIGVsc2UKKy0kKG9ianBmeCluc2NkOiAkKHN0YXRpYy10aHJlYWQtbGlicmFyeSkgJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuYQorKyQob2JqcGZ4KW5zY2Q6ICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLmEKKytlbmRpZgorIGVuZGlmCitkaWZmIC0tZ2l0IGEvbnNjZC9uaXNfaGFzaC5jIGIvbnNjZC9uaXNfaGFzaC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDI0NGM0MQorLS0tIC9kZXYvbnVsbAorKysrIGIvbnNjZC9uaXNfaGFzaC5jCitAQCAtMCwwICsxLDMgQEAKKysvKiBJZiBPUFRJT05fRUdMSUJDX05JUyBpcyBkaXNhYmxlZCwgbnNjZCBjYW4ndCBnZXQgdGhpcyBmcm9tIGxpYm5zbC5zbzsKKysgICB3ZSBuZWVkIG91ciBvd24gY29weS4gICovCisrI2luY2x1ZGUgIi4uL25pcy9uaXNfaGFzaC5jIgorZGlmZiAtLWdpdCBhL25zcy9NYWtlZmlsZSBiL25zcy9NYWtlZmlsZQoraW5kZXggNjVhYjdiNS4uMTlmMGFlZiAxMDA2NDQKKy0tLSBhL25zcy9NYWtlZmlsZQorKysrIGIvbnNzL01ha2VmaWxlCitAQCAtMTgsMjggKzE4LDM1IEBACisgIworICMJTWFrZWZpbGUgZm9yIG5hbWUgc2VydmljZSBzd2l0Y2guCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbnNzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJCTo9IG5zcy5oCisgCistIyBUaGlzIGlzIHRoZSB0cml2aWFsIHBhcnQgd2hpY2ggZ29lcyBpbnRvIGxpYmMgaXRzZWxmLgorLXJvdXRpbmVzCQk9IG5zc3dpdGNoIGdldG5zc2VudCBnZXRuc3NlbnRfciBkaWdpdHNfZG90cyBcCistCQkJICAkKGFkZHN1ZmZpeCAtbG9va3VwLCQoZGF0YWJhc2VzKSkKKy0KKyAjIFRoZXNlIGFyZSB0aGUgZGF0YWJhc2VzIHRoYXQgZ28gdGhyb3VnaCBuc3MgZGlzcGF0Y2guCisgIyBDYXV0aW9uOiBpZiB5b3UgYWRkIGEgZGF0YWJhc2UgaGVyZSwgeW91IG11c3QgYWRkIGl0cyByZWFsIG5hbWUKKyAjIGluIGRhdGFiYXNlcy5kZWYsIHRvby4KKy1kYXRhYmFzZXMJCT0gcHJvdG8gc2VydmljZSBob3N0cyBuZXR3b3JrIGdycCBwd2QgZXRoZXJzIFwKKy0JCQkgIHNwd2QgbmV0Z3JwIGFsaWFzIHNncnAKKytkYXRhYmFzZXMteQkJPSBncnAgcHdkIHNwd2Qgc2dycAorK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkJCSs9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBldGhlcnMgXAorKwkJCSAgIG5ldGdycAorK2RhdGFiYXNlcy0kKE9QVElPTl9FR0xJQkNfREJfQUxJQVNFUykgKz0gYWxpYXMKKysKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gZGlnaXRzX2RvdHMKKyAKKyBpZm5lcSAoLCQoZmlsdGVyIHN1bnJwYywkKHN1YmRpcnMpKSkKKy1kYXRhYmFzZXMJCSs9IGtleSBycGMKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0lORVQpCSs9IGtleSBycGMKKyBoYXZlLXN1bnJwYwkJOj0gMQorIGVsc2UKKyBoYXZlLXN1bnJwYwkJOj0gMAorIGVuZGlmCisrIyBUaGlzIGlzIHRoZSB0cml2aWFsIHBhcnQgd2hpY2ggZ29lcyBpbnRvIGxpYmMgaXRzZWxmLgorK3JvdXRpbmVzLXkJCSs9IG5zc3dpdGNoIGdldG5zc2VudCBnZXRuc3NlbnRfciBcCisrCQkJICAkKGFkZHN1ZmZpeCAtbG9va3VwLCQoZGF0YWJhc2VzLXkpKQorKworIENQUEZMQUdTLWdldGVudC5jCT0gLURIQVZFX1NVTlJQQz0kKGhhdmUtc3VucnBjKQorIAorIG90aGVycyAgICAgICAgICAgICAgICAgIDo9IGdldGVudCBtYWtlZGIKK0BAIC00Nyw4ICs1NCw5IEBAIGluc3RhbGwtYmluICAgICAgICAgICAgIDo9IGdldGVudCBtYWtlZGIKKyBtYWtlZGItbW9kdWxlcyA9IHhtYWxsb2MgaGFzaC1zdHJpbmcKKyBleHRyYS1vYmpzCQkrPSAkKG1ha2VkYi1tb2R1bGVzOj0ubykKKyAKKy10ZXN0cwkJCT0gdGVzdC1uZXRkYiB0c3QtbnNzLXRlc3QxIHRlc3QtZGlnaXRzLWRvdHMgdHN0LW5zcy1nZXRwd2VudAorLXh0ZXN0cwkJCT0gYnVnLWVyYW5nZQorK3Rlc3RzCQkJPSB0c3QtbnNzLXRlc3QxIHRzdC1uc3MtZ2V0cHdlbnQKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkJKz0gdGVzdC1uZXRkYiB0ZXN0LWRpZ2l0cy1kb3RzCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKQkrPSBidWctZXJhbmdlCisgCisgIyBTcGVjaWZ5IHJ1bGVzIGZvciB0aGUgbnNzXyogbW9kdWxlcy4gIFdlIGhhdmUgc29tZSBzZXJ2aWNlcy4KKyBzZXJ2aWNlcwkJOj0gZmlsZXMgZGIKK0BAIC02Myw3ICs3MSw3IEBAIHN1YmRpci1kaXJzID0gJChzZXJ2aWNlczolPW5zc18lKQorIHZwYXRoICUuYyAkKHN1YmRpci1kaXJzKSAuLi9sb2NhbGUvcHJvZ3JhbXMgLi4vaW50bAorIAorIAorLWxpYm5zc19maWxlcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBmaWxlcy0sJChkYXRhYmFzZXMpKSBcCisrbGlibnNzX2ZpbGVzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IGZpbGVzLSwkKGRhdGFiYXNlcy15KSkgXAorIAkJCSAgIGZpbGVzLWluaXRncm91cHMgZmlsZXMtaGF2ZV9vX2Nsb2V4ZWMgZmlsZXMtaW5pdAorIAorIGxpYm5zc19kYi1kYnMJCTo9ICQoYWRkcHJlZml4IGRiLSxcCitAQCAtODYsNiArOTQsNDUgQEAgdGVzdHMtc3RhdGljCQk9IHRzdC1uc3Mtc3RhdGljCisgdGVzdHMJCQkrPSAkKHRlc3RzLXN0YXRpYykKKyBlbmRpZgorIAorK2lmbmVxICgkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0gpLHkpCisrCisraWZuZGVmIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHCisrJChlcnJvciBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRyB2YXJpYWJsZSBsZWZ0IHVuc2V0KQorK2VuZGlmCisrCisraWZuZGVmIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TCisrJChlcnJvciBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUyB2YXJpYWJsZSBsZWZ0IHVuc2V0KQorK2VuZGlmCisrCisraWZlcSAoLCQod2lsZGNhcmQgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykpKQorKyQod2FybmluZyBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkLCBidXQgZml4ZWQgY29uZmlnIGZpbGUpCisrJChlcnJvciBkb2VzIG5vdCBleGlzdDogJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykpCisrZW5kaWYKKysKKytpZmVxICgsJCh3aWxkY2FyZCAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKSkpCisrJCh3YXJuaW5nIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQsIGJ1dCBmaXhlZCBmdW5jdGlvbnMgZmlsZSkKKyskKGVycm9yIGRvZXMgbm90IGV4aXN0OiAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TKSkKKytlbmRpZgorKworK2JlZm9yZS1jb21waWxlIDo9ICQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLmgKKytnZW5lcmF0ZWQgOj0gZml4ZWQtbnNzd2l0Y2guaAorKyQob2JqcGZ4KWZpeGVkLW5zc3dpdGNoLmggJChvYmpmcHgpZml4ZWQtbnNzd2l0Y2gtbGliczoJXAorKyAgICAkKG9ianBmeClnZW4tZml4ZWQtbnNzd2l0Y2gJCQkJXAorKyAgICAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKQorKwkkPCAkKG9ianBmeClmaXhlZC1uc3N3aXRjaC5oCQkJXAorKwkgICAkKG9ianBmeClmaXhlZC1uc3N3aXRjaC1saWJzCQkJXAorKwkgICAkKE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfQ09ORklHKQorKworKyQob2JqcGZ4KWdlbi1maXhlZC1uc3N3aXRjaDogZ2VuLWZpeGVkLW5zc3dpdGNoLmMJXAorKyAgICAkKGNvbW1vbi1vYmpwZngpb3B0aW9uLWdyb3Vwcy5jb25maWcJCVwKKysgICAgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykKKysJJChuYXRpdmUtY29tcGlsZSkKKytnZW4tZml4ZWQtbnNzd2l0Y2gtQ0ZMQUdTID0JCQkJCQlcCisrCS1nMyAtTyAtV2FsbAkJCQkJCQlcCisrCS1JICQob2JqcGZ4KQkJCQkJCQlcCisrCS1ERklYRURfRlVOQ1RJT05TPSciJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykiJworK2VuZGlmCisrCisgaW5jbHVkZSAuLi9SdWxlcworIAorIGlmZXEgKHllcywkKGhhdmUtc2VsaW51eCkpCitkaWZmIC0tZ2l0IGEvbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYgYi9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjkxYmI2NzUKKy0tLSAvZGV2L251bGwKKysrKyBiL25zcy9maXhlZC1uc3N3aXRjaC5jb25mCitAQCAtMCwwICsxLDIyIEBACisrIyAvZXRjL25zc3dpdGNoLmNvbmYKKysjCisrIyBFeGFtcGxlIGNvbmZpZ3VyYXRpb24gZm9yIGZpeGVkIG5hbWUgc2VydmljZS4KKysjIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpbiBvcHRpb24tZ3JvdXBzLmRlZgorKyMgZm9yIGRldGFpbHMuCisrIworKworK2FsaWFzZXM6ICAgICAgICBmaWxlcworKworK3Bhc3N3ZDogICAgICAgICBmaWxlcworK2dyb3VwOiAgICAgICAgICBmaWxlcworK3NoYWRvdzogICAgICAgICBmaWxlcworKworK2hvc3RzOiAgICAgICAgICBmaWxlcyBkbnMKKytuZXR3b3JrczogICAgICAgZmlsZXMgZG5zCisrCisrcHJvdG9jb2xzOiAgICAgIGZpbGVzCisrc2VydmljZXM6ICAgICAgIGZpbGVzCisrZXRoZXJzOiAgICAgICAgIGZpbGVzCisrcnBjOiAgICAgICAgICAgIGZpbGVzCisrCisrbmV0Z3JvdXA6ICAgICAgIGZpbGVzCitkaWZmIC0tZ2l0IGEvbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucyBiL25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yZjNmYTgzCistLS0gL2Rldi9udWxsCisrKysgYi9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zCitAQCAtMCwwICsxLDEyMSBAQAorKy8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgZm9yIGZpeGVkIE5TUyBpbiBHTlUgQyBMaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkIChzZWUgb3B0aW9uLWdyb3Vwcy5kZWYpLAorKyAgIEVHTElCQyBkb2VzIG5vdCB1c2UgdGhlICdkbG9wZW4nIGFuZCAnZGxzeW0nIGZ1bmN0aW9ucyB0byBsb29rIGZvcgorKyAgIGRhdGFiYXNlIHF1ZXJ5IGZ1bmN0aW9ucyBpbiB0aGUgaW5kaXZpZHVhbCBuYW1lIHNlcnZpY2UgbGlicmFyaWVzLgorKyAgIEluc3RlYWQsIGl0IHVzZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGNob3NlbiBhdCBjb21waWxlIHRpbWUsIGFzCisrICAgZGlyZWN0ZWQgYnkgdGhlIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfRlVOQ1RJT05TIGZpbGUuICBUaGlzCisrICAgZmlsZSBpcyBhIHNhbXBsZSBvZiB3aGF0IHlvdSBtaWdodCB1c2UgdGhlcmUuCisrCisrICAgVGhpcyBmaWxlIGlzIEMgc291cmNlIGNvZGU7IGl0IHNob3VsZCBvbmx5IGNvbnRhaW4gaW52b2NhdGlvbnMgb2YKKysgICB0aGUgZm9sbG93aW5nIG1hY3JvczoKKysKKysgICAtIERFRklORV9FTlQgKERBVEFCQVNFLCBTRVJWSUNFLCBYKQorKworKyAgICAgRGVjbGFyZSB0aGUgJ3NldFhlbnQnLCAnZ2V0WGVudF9yJywgYW5kICdlbmRYZW50JyBmdW5jdGlvbnMgdGhhdAorKyAgICAgcXVlcnkgREFUQUJBU0UgdXNpbmcgdGhlIHNlcnZpY2UgbGlicmFyeSAnbGlibnNzX1NFUlZJQ0Uuc28uMicuCisrICAgICBEQVRBQkFTRSBzaG91bGQgYmUgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZGF0YWJhc2UgYXMgaXQgYXBwZWFycyBpbgorKyAgICAgJ25zc3dpdGNoLmNvbmYnLCBsaWtlICdwYXNzd2QnIG9yICdhbGlhc2VzJy4KKysKKysgICAgIChUaGUgbm9uLXJlZW50cmFudCAnZ2V0WGVudCcgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcworKyAgICAgb2YgdGhlIHJlZW50cmFudCAnZ2V0WGVudF9yJyBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKysgICAgIHJlZmVyIHRvIHRoZW0gZXhwbGljaXRseSBoZXJlLikKKysKKysgICAtIERFRklORV9HRVRCWSAoREFUQUJBU0UsIFNFUlZJQ0UsIFgsIEtFWSkKKysKKysgICAgIERlY2xhcmUgdGhlICdnZXRYYnlLRVlfcicgZnVuY3Rpb25zIHRoYXQgcXVlcnkgREFUQUJBU0UgdXNpbmcKKysgICAgIFNFUlZJQ0UuICBEQVRBQkFTRSBhbmQgU0VSVklDRSBhcmUgYXMgZGVzY3JpYmVkIGFib3ZlLgorKworKyAgICAgKFRoZSBub24tcmVlbnRyYW50ICdnZXRYYnlLRVknIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMKKysgICAgIG9mIHRoZSByZWVudHJhbnQgJ2dldFhieUtFWV9yJyBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKysgICAgIHJlZmVyIHRvIHRoZW0gZXhwbGljaXRseSBoZXJlLikKKysKKysgICAgIFVzZSB0aGUgc3BlY2lhbCBrZXkgJ25hbWUzJyBmb3IgdGhlIHNlcnZpY2UgbGlicmFyeSBmdW5jdGlvbiB0aGF0CisrICAgICBpbXBsZW1lbnRzIHRoZSAnZ2V0YWRkcmluZm8nIGZ1bmN0aW9uLgorKworKyAgIC0gREVGSU5FX0dFVCAoREFUQUJBU0UsIFNFUlZJQ0UsIFFVRVJZKQorKworKyAgICAgRGVjbGFyZSB0aGUgJ2dldFFVRVJZX3InIGZ1bmN0aW9ucyB0aGF0IHF1ZXJ5IERBVEFCQVNFIHVzaW5nCisrICAgICBTRVJWSUNFLiAgVGhpcyBpcyB1c2VkIGZvciBmdW5jdGlvbnMgbGlrZSAnZ2V0cHduYW0nLgorKworKyAgICAgKFRoZSBub24tcmVlbnRyYW50ICdnZXRRVUVSWScgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcworKyAgICAgb2YgdGhlIHJlZW50cmFudCAnZ2V0UVVFUllfcicgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisrICAgICByZWZlciB0byB0aGVtIGV4cGxpY2l0bHkgaGVyZS4pCisrCisrICAgVGhpcyBzYW1wbGUgZmlsZSBvbmx5IGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNvbnN1bHQgdGhlIGZpbGVzIGluCisrICAgJy9ldGMnLCBhbmQgdGhlIERvbWFpbiBOYW1lIFN5c3RlbSAoRE5TKS4gICovCisrCisrLyogYWxpYXNlcyAqLworK0RFRklORV9FTlQgKGFsaWFzZXMsIGZpbGVzLCBhbGlhcykKKytERUZJTkVfR0VUQlkgKGFsaWFzZXMsIGZpbGVzLCBhbGlhcywgbmFtZSkKKysKKysvKiBldGhlcnMgKi8KKytERUZJTkVfRU5UIChldGhlcnMsIGZpbGVzLCBldGhlcikKKysKKysvKiBncm91cCAqLworK0RFRklORV9FTlQgKGdyb3VwLCBmaWxlcywgZ3IpCisrREVGSU5FX0dFVCAoZ3JvdXAsIGZpbGVzLCBncmdpZCkKKytERUZJTkVfR0VUIChncm91cCwgZmlsZXMsIGdybmFtKQorKworKy8qIGhvc3RzICovCisrREVGSU5FX0VOVCAoaG9zdHMsIGZpbGVzLCBob3N0KQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGZpbGVzLCBob3N0LCBhZGRyKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGZpbGVzLCBob3N0LCBuYW1lKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGZpbGVzLCBob3N0LCBuYW1lMikKKytERUZJTkVfR0VUIChob3N0cywgZmlsZXMsIGhvc3R0b24pCisrREVGSU5FX0dFVCAoaG9zdHMsIGZpbGVzLCBudG9ob3N0KQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgYWRkcikKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIG5hbWUpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBuYW1lMikKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIG5hbWUzKQorKworKy8qIG5ldGdyb3VwICovCisrREVGSU5FX0VOVCAobmV0Z3JvdXAsIGZpbGVzLCBuZXRncikKKysKKysvKiBuZXR3b3JrcyAqLworK0RFRklORV9FTlQgKG5ldHdvcmtzLCBmaWxlcywgbmV0KQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGZpbGVzLCBuZXQsIG5hbWUpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZmlsZXMsIG5ldCwgYWRkcikKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBkbnMsIG5ldCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBkbnMsIG5ldCwgYWRkcikKKysKKysvKiBwcm90b2NvbHMgKi8KKytERUZJTkVfRU5UIChwcm90b2NvbHMsIGZpbGVzLCBwcm90bykKKytERUZJTkVfR0VUQlkgKHByb3RvY29scywgZmlsZXMsIHByb3RvLCBuYW1lKQorK0RFRklORV9HRVRCWSAocHJvdG9jb2xzLCBmaWxlcywgcHJvdG8sIG51bWJlcikKKysKKysvKiBwYXNzd2QgKi8KKytERUZJTkVfRU5UIChwYXNzd2QsIGZpbGVzLCBwdykKKytERUZJTkVfR0VUIChwYXNzd2QsIGZpbGVzLCBwd25hbSkKKytERUZJTkVfR0VUIChwYXNzd2QsIGZpbGVzLCBwd3VpZCkKKysKKysvKiBycGMgKi8KKytERUZJTkVfRU5UIChycGMsIGZpbGVzLCBycGMpCisrREVGSU5FX0dFVEJZIChycGMsIGZpbGVzLCBycGMsIG5hbWUpCisrREVGSU5FX0dFVEJZIChycGMsIGZpbGVzLCBycGMsIG51bWJlcikKKysKKysvKiBzZXJ2aWNlcyAqLworK0RFRklORV9FTlQgKHNlcnZpY2VzLCBmaWxlcywgc2VydikKKytERUZJTkVfR0VUQlkgKHNlcnZpY2VzLCBmaWxlcywgc2VydiwgbmFtZSkKKytERUZJTkVfR0VUQlkgKHNlcnZpY2VzLCBmaWxlcywgc2VydiwgcG9ydCkKKysKKysvKiBzaGFkb3cgKi8KKytERUZJTkVfRU5UIChzaGFkb3csIGZpbGVzLCBzcCkKKytERUZJTkVfR0VUIChzaGFkb3csIGZpbGVzLCBzcG5hbSkKK2RpZmYgLS1naXQgYS9uc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMgYi9uc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42ZTFjOThjCistLS0gL2Rldi9udWxsCisrKysgYi9uc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMKK0BAIC0wLDAgKzEsODAzIEBACisrLyogZ2VuLWZpeGVkLW5zc3dpdGNoLmMgLS0tIGdlbmVyYXRlIGZpeGVkIG5hbWUgc2VydmljZSBkYXRhIHN0cnVjdHVyZXMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSwgMjAwMS0yMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJnbnUvbGliLW5hbWVzLmgiCisrI2luY2x1ZGUgIm5zcy5oIgorKworKy8qIFByb3ZpZGUgYSBmYWxsYmFjayBkZWZpbml0aW9uIHRvIGFsbG93IHRoaXMgZmlsZSB0byBiZSBjb21waWxlZCBvdXRzaWRlCisrICAgbGliYy4gICovCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrDAorKy8qIFNpbXBsZSB1dGlsaXRpZXMuICAqLworKworK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKKytlcnJvciAoY29uc3QgY2hhciAqbWVzc2FnZSkKKyt7CisrICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CisrICBleGl0ICgxKTsKKyt9CisrCisrCisrdm9pZCAqCisrY2hlY2tfYWxsb2MgKHZvaWQgKnApCisreworKyAgaWYgKHApCisrICAgIHJldHVybiBwOworKyAgZWxzZQorKyAgICBlcnJvciAoIm91dCBvZiBtZW1vcnkiKTsKKyt9CisrCisrdm9pZCAqCisreG1hbGxvYyAoc2l6ZV90IHNpemUpCisreworKyAgcmV0dXJuIGNoZWNrX2FsbG9jIChtYWxsb2MgKHNpemUpKTsKKyt9CisrCisrCisrLyogRm9ybWF0IEFSR1MgYWNjb3JkaW5nIHRvIEZPUk1BVCwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEKKysgICBtYWxsb2MnZWQgc3RyaW5nLiAgKi8KKytjaGFyICoKKytzYXByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgc2l6ZV90IGxlbjsKKysgIGNoYXIgKmJ1ZjsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgbGVuID0gdnNucHJpbnRmIChOVUxMLCAwLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysKKysgIGJ1ZiA9IHhtYWxsb2MgKGxlbiArIDEpOworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICBhc3NlcnQgKGxlbiA9PSB2c25wcmludGYgKGJ1ZiwgbGVuICsgMSwgZm9ybWF0LCBhcmdzKSk7CisrICB2YV9lbmQgKGFyZ3MpOworKworKyAgcmV0dXJuIGJ1ZjsKKyt9CisrCisrCisrDAorKy8qIERhdGEgc3RydWN0dXJlcyByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBtZW1vcnkuICAqLworKworKy8qIFRoZXNlIGFyZSBjb3BpZWQgZnJvbSBuc3N3aXRjaC5oLgorKworKyAgIFdlIGNvdWxkIHNpbXBseSAjaW5jbHVkZSB0aGF0IGZpbGUsIGJ1dCB0aGlzIHByb2dyYW0gcnVucyBvbiB0aGUKKysgICBidWlsZCBtYWNoaW5lIGFuZCBsaW5rcyBhZ2FpbnN0IHRoZSBidWlsZCBtYWNoaW5lJ3MgbGlicmFyaWVzLAorKyAgIHdoZXJlYXMgdGhhdCBoZWFkZXIgaXMgbWVhbnQgZm9yIHVzZSBieSB0YXJnZXQgY29kZTsgaXQgdXNlcworKyAgICdsaWJjX2hpZGRlbl9wcm90bycsICdpbnRlcm5hbF9mdW5jdGlvbicsIGFuZCByZWxhdGVkIGhhaXIuICBTaW5jZQorKyAgIHdlJ3ZlIGNvcGllZCB0aGUgcGFyc2luZyBjb2RlLCB3ZSBtaWdodCBhcyB3ZWxsIGNvcHkgdGhlIGRhdGEKKysgICBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgYXMgd2VsbC4gICovCisrCisrLyogQWN0aW9ucyBwZXJmb3JtZWQgYWZ0ZXIgbG9va3VwIGZpbmlzaGVkLiAgKi8KKyt0eXBlZGVmIGVudW0KKyt7CisrICBOU1NfQUNUSU9OX0NPTlRJTlVFLAorKyAgTlNTX0FDVElPTl9SRVRVUk4KKyt9IGxvb2t1cF9hY3Rpb25zOworKworKworK3R5cGVkZWYgc3RydWN0IHNlcnZpY2VfbGlicmFyeQorK3sKKysgIC8qIE5hbWUgb2Ygc2VydmljZSAoYGZpbGVzJywgYGRucycsIGBuaXMnLCAuLi4pLiAgKi8KKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICAvKiBQb2ludGVyIHRvIHRoZSBsb2FkZWQgc2hhcmVkIGxpYnJhcnkuICAqLworKyAgdm9pZCAqbGliX2hhbmRsZTsKKysgIC8qIEFuZCB0aGUgbGluayB0byB0aGUgbmV4dCBlbnRyeS4gICovCisrICBzdHJ1Y3Qgc2VydmljZV9saWJyYXJ5ICpuZXh0OworK30gc2VydmljZV9saWJyYXJ5OworKworKworKy8qIEZvciBtYXBwaW5nIGEgZnVuY3Rpb24gbmFtZSB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuICBJdCBpcyBrbm93biBpbgorKyAgIG5zc3dpdGNoLmM6bnNzX2xvb2t1cF9mdW5jdGlvbiB0aGF0IGEgc3RyaW5nIHBvaW50ZXIgZm9yIHRoZSBsb29rdXAga2V5CisrICAgaXMgdGhlIGZpcnN0IG1lbWJlci4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyICpmY3RfbmFtZTsKKysgIHZvaWQgKmZjdF9wdHI7CisrfSBrbm93bl9mdW5jdGlvbjsKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBzZXJ2aWNlX3VzZXIKKyt7CisrICAvKiBBbmQgdGhlIGxpbmsgdG8gdGhlIG5leHQgZW50cnkuICAqLworKyAgc3RydWN0IHNlcnZpY2VfdXNlciAqbmV4dDsKKysgIC8qIEFjdGlvbiBhY2NvcmRpbmcgdG8gcmVzdWx0LiAgKi8KKysgIGxvb2t1cF9hY3Rpb25zIGFjdGlvbnNbNV07CisrICAvKiBMaW5rIHRvIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkgb2JqZWN0LiAgKi8KKysgIHNlcnZpY2VfbGlicmFyeSAqbGlicmFyeTsKKysgIC8qIENvbGxlY3Rpb24gb2Yga25vd24gZnVuY3Rpb25zLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGVuYWJsZWQsIHRoaXMgaXMgdGhlIHJvb3Qgb2YgYQorKyAgICAgJ3RzZWFyY2gnLXN0eWxlIHRyZWUuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZGlzYWJsZWQsIHRoaXMgaXMgYW4gYXJyYXkgb2YKKysgICAgIHBvaW50ZXJzIHRvIGtub3duX2Z1bmN0aW9uIHN0cnVjdHVyZXMsIE5VTEwtdGVybWluYXRlZC4gICovCisrICB1bmlvbgorKyAgeworKyAgICB2b2lkICp0cmVlOworKyAgICBjb25zdCBrbm93bl9mdW5jdGlvbiAqKmFycmF5OworKyAgfSBrbm93bjsKKysgIC8qIE5hbWUgb2YgdGhlIHNlcnZpY2UgKGBmaWxlcycsIGBkbnMnLCBgbmlzJywgLi4uKS4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworK30gc2VydmljZV91c2VyOworKworKy8qIFRvIGFjY2VzcyB0aGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBzdGF0dXMgdmFsdWUgdXNlIHRoaXMgbWFjcm8uICAqLworKyNkZWZpbmUgbnNzX25leHRfYWN0aW9uKG5pLCBzdGF0dXMpICgobmkpLT5hY3Rpb25zWzIgKyBzdGF0dXNdKQorKworKworK3R5cGVkZWYgc3RydWN0IG5hbWVfZGF0YWJhc2VfZW50cnkKKyt7CisrICAvKiBBbmQgdGhlIGxpbmsgdG8gdGhlIG5leHQgZW50cnkuICAqLworKyAgc3RydWN0IG5hbWVfZGF0YWJhc2VfZW50cnkgKm5leHQ7CisrICAvKiBMaXN0IG9mIHNlcnZpY2UgdG8gYmUgdXNlZC4gICovCisrICBzZXJ2aWNlX3VzZXIgKnNlcnZpY2U7CisrICAvKiBOYW1lIG9mIHRoZSBkYXRhYmFzZS4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworK30gbmFtZV9kYXRhYmFzZV9lbnRyeTsKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBuYW1lX2RhdGFiYXNlCisreworKyAgLyogTGlzdCBvZiBhbGwga25vd24gZGF0YWJhc2VzLiAgKi8KKysgIG5hbWVfZGF0YWJhc2VfZW50cnkgKmVudHJ5OworKyAgLyogTGlzdCBvZiBsaWJyYXJpZXMgd2l0aCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uLiAgKi8KKysgIHNlcnZpY2VfbGlicmFyeSAqbGlicmFyeTsKKyt9IG5hbWVfZGF0YWJhc2U7CisrCisrCisrDAorKy8qIEdhdGhlcmluZyB0aGUgY29udGVudHMgb2YgdGhlIEZJWEVEX0ZVTkNUSU9OUyBmaWxlLiAgKi8KKysKKysvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZ2VuZXJhdGUgdGhpcyBsaXN0IGF1dG9tYXRpY2FsbHkgYnkKKysgICBsb29raW5nIGF0IHRoZSBzZXJ2aWNlcyBhbmQgZGF0YWJhc2VzIHVzZWQgaW4gdGhlIG5zc3dpdGNoLmNvbmYKKysgICBmaWxlLCBhbmQgaGF2aW5nIGEgaGFyZC1jb2RlZCBzZXQgb2YgcXVlcmllcyBzdXBwb3J0ZWQgb24gZWFjaAorKyAgIGRhdGFiYXNlLiAgKi8KKysKKysvKiBXZSAjaW5jbHVkZSB0aGUgRklYRURfRlVOQ1RJT05TIGZpbGUgc2V2ZXJhbCB0aW1lcyB0byBidWlsZCBhbgorKyAgIGFycmF5IG9mIGZ1bmN0aW9uIHN0cnVjdHVyZXMgaG9sZGluZyBpdHMgZGF0YS4gICovCisrZW51bSBmdW5jdGlvbl9raW5kIHsKKysgIGZrX2VuZCA9IDAsICAgICAgICAgICAgICAgICAgIC8qIExhc3QgZW50cnkuICAqLworKyAgZmtfc2V0ZW50LCAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBzZXRwd2VudC4gICovCisrICBma19nZXRlbnQsICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGdldHB3ZW50LiAgKi8KKysgIGZrX2VuZGVudCwgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZW5kcHdlbnQuICAqLworKyAgZmtfZ2V0YnksICAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBnZXRob3N0YnluYW1lLiAgKi8KKysgIGZrX2dldCAgICAgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZ2V0cHduYW0uICAqLworK307CisrCisrCisrc3RydWN0IGZ1bmN0aW9uIHsKKysgIC8qIFdoYXQga2luZCBvZiBmdW5jdGlvbiB0aGlzIGlzLiAgKi8KKysgIGVudW0gZnVuY3Rpb25fa2luZCBraW5kOworKworKyAgLyogVGhlIGRhdGFiYXNlIGFuZCBzZXJ2aWNlIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBoYXJkd2lyZWQgaW4uICAqLworKyAgY2hhciAqZGF0YWJhc2UsICpzZXJ2aWNlOworKworKyAgLyogVGhlIGtpbmQgb2YgZW50cnkgYmVpbmcgcXVlcmllZCwgZm9yICdma19zZXRlbnQnLCAnZmtfZ2V0ZW50JywKKysgICAgICdma19lbmRlbnQnLCBhbmQgJ2ZrX2dldGJ5JyBmdW5jdGlvbnMuICAqLworKyAgY2hhciAqZW50cnk7CisrCisrICAvKiBUaGUga2V5LCBmb3IgJ2ZrX2dldGJ5JyBlbnRyaWVzLiAgKi8KKysgIGNoYXIgKmtleTsKKysKKysgIC8qIFRoZSB2YWx1ZSBhbmQga2V5LCBmb3IgJ2ZrX2dldCcgZW50cmllcy4gICovCisrICBjaGFyICp2YWx1ZV9hbmRfa2V5OworK307CisrCisrCisrY29uc3Qgc3RydWN0IGZ1bmN0aW9uIGZ1bmN0aW9uc1tdID0KKysgIHsKKysKKysjZGVmaW5lIERFRklORV9FTlQoZGF0YWJhc2UsIHNlcnZpY2UsIGVudHJ5KSAgICBcCisrICAgIHsgZmtfc2V0ZW50LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnkgfSwgXAorKyAgICB7IGZrX2dldGVudCwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5IH0sIFwKKysgICAgeyBma19lbmRlbnQsICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSB9LAorKyNkZWZpbmUgREVGSU5FX0dFVEJZKGRhdGFiYXNlLCBzZXJ2aWNlLCBlbnRyeSwga2V5KSAgIFwKKysgICAgeyBma19nZXRieSwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5LCAja2V5IH0sCisrI2RlZmluZSBERUZJTkVfR0VUKGRhdGFiYXNlLCBzZXJ2aWNlLCB2YWx1ZV9hbmRfa2V5KSAgICAgXAorKyAgICB7IGZrX2dldCwgI2RhdGFiYXNlLCAjc2VydmljZSwgTlVMTCwgTlVMTCwgI3ZhbHVlX2FuZF9rZXkgfSwKKysKKysjaW5jbHVkZSBGSVhFRF9GVU5DVElPTlMKKysKKysjdW5kZWYgREVGSU5FX0VOVAorKyN1bmRlZiBERUZJTkVfR0VUQlkKKysjdW5kZWYgREVGSU5FX0dFVAorKworKyAgICB7IGZrX2VuZCB9CisrICB9OworKworKwwKKysvKiBQYXJzaW5nIHRoZSBjb25maWcgZmlsZS4gIEZ1bmN0aW9ucyBjb3BpZWQgZnJvbSBuc3N3aXRjaC5jLiAgKi8KKysKKysjZGVmaW5lIF9fc3RyY2hybnVsIHN0cmNocm51bAorKyNkZWZpbmUgX19nZXRsaW5lIGdldGxpbmUKKysjZGVmaW5lIF9fc3RybmNhc2VjbXAgc3RybmNhc2VjbXAKKysKKysvKiBQcm90b3R5cGVzIGZvciB0aGUgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKytzdGF0aWMgbmFtZV9kYXRhYmFzZSAqbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKSBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBzZXJ2aWNlX3VzZXIgKm5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKytzdGF0aWMgbmFtZV9kYXRhYmFzZSAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytuc3NfcGFyc2VfZmlsZSAoY29uc3QgY2hhciAqZm5hbWUpCisreworKyAgRklMRSAqZnA7CisrICBuYW1lX2RhdGFiYXNlICpyZXN1bHQ7CisrICBuYW1lX2RhdGFiYXNlX2VudHJ5ICpsYXN0OworKyAgY2hhciAqbGluZTsKKysgIHNpemVfdCBsZW47CisrCisrICAvKiBPcGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuICAqLworKyAgZnAgPSBmb3BlbiAoZm5hbWUsICJyYyIpOworKyAgaWYgKGZwID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLy8gLyogTm8gdGhyZWFkcyB1c2UgdGhpcyBzdHJlYW0uICAqLworKyAgLy8gX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKysKKysgIHJlc3VsdCA9IChuYW1lX2RhdGFiYXNlICopIHhtYWxsb2MgKHNpemVvZiAobmFtZV9kYXRhYmFzZSkpOworKworKyAgcmVzdWx0LT5lbnRyeSA9IE5VTEw7CisrICByZXN1bHQtPmxpYnJhcnkgPSBOVUxMOworKyAgbGFzdCA9IE5VTEw7CisrICBsaW5lID0gTlVMTDsKKysgIGxlbiA9IDA7CisrICBkbworKyAgICB7CisrICAgICAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqdGhpczsKKysgICAgICBzc2l6ZV90IG47CisrCisrICAgICAgbiA9IF9fZ2V0bGluZSAoJmxpbmUsICZsZW4sIGZwKTsKKysgICAgICBpZiAobiA8IDApCisrCWJyZWFrOworKyAgICAgIGlmIChsaW5lW24gLSAxXSA9PSAnXG4nKQorKwlsaW5lW24gLSAxXSA9ICdcMCc7CisrCisrICAgICAgLyogQmVjYXVzZSB0aGUgZmlsZSBmb3JtYXQgZG9lcyBub3Qga25vdyBhbnkgZm9ybSBvZiBxdW90aW5nIHdlCisrCSBjYW4gc2VhcmNoIGZvcndhcmQgZm9yIHRoZSBuZXh0ICcjJyBjaGFyYWN0ZXIgYW5kIGlmIGZvdW5kCisrCSBtYWtlIGl0IHRlcm1pbmF0aW5nIHRoZSBsaW5lLiAgKi8KKysgICAgICAqX19zdHJjaHJudWwgKGxpbmUsICcjJykgPSAnXDAnOworKworKyAgICAgIC8qIElmIHRoZSBsaW5lIGlzIGJsYW5rIGl0IGlzIGlnbm9yZWQuICAqLworKyAgICAgIGlmIChsaW5lWzBdID09ICdcMCcpCisrCWNvbnRpbnVlOworKworKyAgICAgIC8qIEVhY2ggbGluZSBjb21wbGV0ZWx5IHNwZWNpZmllcyB0aGUgYWN0aW9ucyBmb3IgYSBkYXRhYmFzZS4gICovCisrICAgICAgdGhpcyA9IG5zc19nZXRsaW5lIChsaW5lKTsKKysgICAgICBpZiAodGhpcyAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGxhc3QgIT0gTlVMTCkKKysJICAgIGxhc3QtPm5leHQgPSB0aGlzOworKwkgIGVsc2UKKysJICAgIHJlc3VsdC0+ZW50cnkgPSB0aGlzOworKworKwkgIGxhc3QgPSB0aGlzOworKwl9CisrICAgIH0KKysgIHdoaWxlICghZmVvZl91bmxvY2tlZCAoZnApKTsKKysKKysgIC8qIEZyZWUgdGhlIGJ1ZmZlci4gICovCisrICBmcmVlIChsaW5lKTsKKysgIC8qIENsb3NlIGNvbmZpZ3VyYXRpb24gZmlsZS4gICovCisrICBmY2xvc2UgKGZwKTsKKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworKy8qIFJlYWQgdGhlIHNvdXJjZSBuYW1lczoKKysJYCggPHNvdXJjZT4gKCAiWyIgIiEiPyAoPHN0YXR1cz4gIj0iIDxhY3Rpb24+ICkrICJdIiApPyApKicKKysgICAqLworK3N0YXRpYyBzZXJ2aWNlX3VzZXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKyt7CisrICBzZXJ2aWNlX3VzZXIgKnJlc3VsdCA9IE5VTEwsICoqbmV4dHAgPSAmcmVzdWx0OworKworKyAgd2hpbGUgKDEpCisrICAgIHsKKysgICAgICBzZXJ2aWNlX3VzZXIgKm5ld19zZXJ2aWNlOworKyAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkrK2xpbmU7CisrICAgICAgaWYgKGxpbmVbMF0gPT0gJ1wwJykKKysJLyogTm8gc291cmNlIHNwZWNpZmllZC4gICovCisrCXJldHVybiByZXN1bHQ7CisrCisrICAgICAgLyogUmVhZCA8c291cmNlPiBpZGVudGlmaWVyLiAgKi8KKysgICAgICBuYW1lID0gbGluZTsKKysgICAgICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICdbJykKKysJKytsaW5lOworKyAgICAgIGlmIChuYW1lID09IGxpbmUpCisrCXJldHVybiByZXN1bHQ7CisrCisrCisrICAgICAgbmV3X3NlcnZpY2UgPSAoc2VydmljZV91c2VyICopIHhtYWxsb2MgKHNpemVvZiAoKm5ld19zZXJ2aWNlKSk7CisrICAgICAgbmV3X3NlcnZpY2UtPm5hbWUgPSAoY2hhciAqKSB4bWFsbG9jIChsaW5lIC0gbmFtZSArIDEpOworKworKyAgICAgICooKGNoYXIgKikgX19tZW1wY3B5ICgoY2hhciAqKSBuZXdfc2VydmljZS0+bmFtZSwgbmFtZSwgbGluZSAtIG5hbWUpKQorKyAgICAgICAgPSAnXDAnOworKworKyAgICAgIC8qIFNldCBkZWZhdWx0IGFjdGlvbnMuICAqLworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1RSWUFHQUlOXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVU5BVkFJTF0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX05PVEZPVU5EXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfU1VDQ0VTU10gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19SRVRVUk5dID0gTlNTX0FDVElPTl9SRVRVUk47CisrICAgICAgbmV3X3NlcnZpY2UtPmxpYnJhcnkgPSBOVUxMOworKyAgICAgIG5ld19zZXJ2aWNlLT5rbm93bi50cmVlID0gTlVMTDsKKysgICAgICBuZXdfc2VydmljZS0+bmV4dCA9IE5VTEw7CisrCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKwkrK2xpbmU7CisrCisrICAgICAgaWYgKGxpbmVbMF0gPT0gJ1snKQorKwl7CisrCSAgLyogUmVhZCBjcml0ZXJpb25zLiAgKi8KKysJICBkbworKwkgICAgKytsaW5lOworKwkgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgaXNzcGFjZSAobGluZVswXSkpOworKworKwkgIGRvCisrCSAgICB7CisrCSAgICAgIGludCBub3Q7CisrCSAgICAgIGVudW0gbnNzX3N0YXR1cyBzdGF0dXM7CisrCSAgICAgIGxvb2t1cF9hY3Rpb25zIGFjdGlvbjsKKysKKysJICAgICAgLyogR3JvayAhIGJlZm9yZSBuYW1lIHRvIG1lYW4gYWxsIHN0YXRpaSBidXQgdGhhdCBvbmUuICAqLworKwkgICAgICBub3QgPSBsaW5lWzBdID09ICchJzsKKysJICAgICAgaWYgKG5vdCkKKysJCSsrbGluZTsKKysKKysJICAgICAgLyogUmVhZCBzdGF0dXMgbmFtZS4gICovCisrCSAgICAgIG5hbWUgPSBsaW5lOworKwkgICAgICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICc9JworKwkJICAgICAmJiBsaW5lWzBdICE9ICddJykKKysJCSsrbGluZTsKKysKKysJICAgICAgLyogQ29tcGFyZSB3aXRoIGtub3duIHN0YXRpaS4gICovCisrCSAgICAgIGlmIChsaW5lIC0gbmFtZSA9PSA3KQorKwkJeworKwkJICBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIlNVQ0NFU1MiLCA3KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfU1VDQ0VTUzsKKysJCSAgZWxzZSBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIlVOQVZBSUwiLCA3KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfVU5BVkFJTDsKKysJCSAgZWxzZQorKwkJICAgIHJldHVybiByZXN1bHQ7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKGxpbmUgLSBuYW1lID09IDgpCisrCQl7CisrCQkgIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiTk9URk9VTkQiLCA4KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfTk9URk9VTkQ7CisrCQkgIGVsc2UgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJUUllBR0FJTiIsIDgpID09IDApCisrCQkgICAgc3RhdHVzID0gTlNTX1NUQVRVU19UUllBR0FJTjsKKysJCSAgZWxzZQorKwkJICAgIHJldHVybiByZXN1bHQ7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXJldHVybiByZXN1bHQ7CisrCisrCSAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJCSsrbGluZTsKKysJICAgICAgaWYgKGxpbmVbMF0gIT0gJz0nKQorKwkJcmV0dXJuIHJlc3VsdDsKKysJICAgICAgZG8KKysJCSsrbGluZTsKKysJICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKTsKKysKKysJICAgICAgbmFtZSA9IGxpbmU7CisrCSAgICAgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJz0nCisrCQkgICAgICYmIGxpbmVbMF0gIT0gJ10nKQorKwkJKytsaW5lOworKworKwkgICAgICBpZiAobGluZSAtIG5hbWUgPT0gNiAmJiBfX3N0cm5jYXNlY21wIChuYW1lLCAiUkVUVVJOIiwgNikgPT0gMCkKKysJCWFjdGlvbiA9IE5TU19BQ1RJT05fUkVUVVJOOworKwkgICAgICBlbHNlIGlmIChsaW5lIC0gbmFtZSA9PSA4CisrCQkgICAgICAgJiYgX19zdHJuY2FzZWNtcCAobmFtZSwgIkNPTlRJTlVFIiwgOCkgPT0gMCkKKysJCWFjdGlvbiA9IE5TU19BQ1RJT05fQ09OVElOVUU7CisrCSAgICAgIGVsc2UKKysJCXJldHVybiByZXN1bHQ7CisrCisrCSAgICAgIGlmIChub3QpCisrCQl7CisrCQkgIC8qIFNhdmUgdGhlIGN1cnJlbnQgYWN0aW9uIHNldHRpbmcgZm9yIHRoaXMgc3RhdHVzLAorKwkJICAgICBzZXQgdGhlbSBhbGwgdG8gdGhlIGdpdmVuIGFjdGlvbiwgYW5kIHJlc2V0IHRoaXMgb25lLiAgKi8KKysJCSAgY29uc3QgbG9va3VwX2FjdGlvbnMgc2F2ZSA9IG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBzdGF0dXNdOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19UUllBR0FJTl0gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1VOQVZBSUxdID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19OT1RGT1VORF0gPSBhY3Rpb247CisrCQkgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1NVQ0NFU1NdID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgc3RhdHVzXSA9IHNhdmU7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBzdGF0dXNdID0gYWN0aW9uOworKworKwkgICAgICAvKiBTa2lwIHdoaXRlIHNwYWNlcy4gICovCisrCSAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJCSsrbGluZTsKKysJICAgIH0KKysJICB3aGlsZSAobGluZVswXSAhPSAnXScpOworKworKwkgIC8qIFNraXAgdGhlICddJy4gICovCisrCSAgKytsaW5lOworKwl9CisrCisrICAgICAgKm5leHRwID0gbmV3X3NlcnZpY2U7CisrICAgICAgbmV4dHAgPSAmbmV3X3NlcnZpY2UtPm5leHQ7CisrICAgIH0KKyt9CisrCisrc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpCisreworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIG5hbWVfZGF0YWJhc2VfZW50cnkgKnJlc3VsdDsKKysgIHNpemVfdCBsZW47CisrCisrICAvKiBJZ25vcmUgbGVhZGluZyB3aGl0ZSBzcGFjZXMuICBBVFRFTlRJT046IHRoaXMgaXMgZGlmZmVyZW50IGZyb20KKysgICAgIHdoYXQgaXMgaW1wbGVtZW50ZWQgaW4gU29sYXJpcy4gIFRoZSBTb2xhcmlzIG1hbiBwYWdlIHNheXMgYSBsaW5lCisrICAgICBiZWdpbm5pbmcgd2l0aCBhIHdoaXRlIHNwYWNlIGNoYXJhY3RlciBpcyBpZ25vcmVkLiAgV2UgcmVnYXJkCisrICAgICB0aGlzIGFzIGp1c3QgYW5vdGhlciBtaXNmZWF0dXJlIGluIFNvbGFyaXMuICAqLworKyAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorKyAgICArK2xpbmU7CisrCisrICAvKiBSZWNvZ25pemUgYDxkYXRhYmFzZT4gIjoiJy4gICovCisrICBuYW1lID0gbGluZTsKKysgIHdoaWxlIChsaW5lWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGxpbmVbMF0pICYmIGxpbmVbMF0gIT0gJzonKQorKyAgICArK2xpbmU7CisrICBpZiAobGluZVswXSA9PSAnXDAnIHx8IG5hbWUgPT0gbGluZSkKKysgICAgLyogU3ludGF4IGVycm9yLiAgKi8KKysgICAgcmV0dXJuIE5VTEw7CisrICAqbGluZSsrID0gJ1wwJzsKKysKKysgIGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxOworKworKyAgcmVzdWx0ID0gKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgeG1hbGxvYyAoc2l6ZW9mICgqcmVzdWx0KSk7CisrICByZXN1bHQtPm5hbWUgPSAoY2hhciAqKSB4bWFsbG9jIChsZW4pOworKworKyAgLyogU2F2ZSB0aGUgZGF0YWJhc2UgbmFtZS4gICovCisrICBtZW1jcHkgKChjaGFyICopIHJlc3VsdC0+bmFtZSwgbmFtZSwgbGVuKTsKKysKKysgIC8qIFBhcnNlIHRoZSBsaXN0IG9mIHNlcnZpY2VzLiAgKi8KKysgIHJlc3VsdC0+c2VydmljZSA9IG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGxpbmUpOworKworKyAgcmVzdWx0LT5uZXh0ID0gTlVMTDsKKysgIHJldHVybiByZXN1bHQ7CisrfQorKworKworKwwKKysvKiBHZW5lcmF0aW5nIGNvZGUgZm9yIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgbnNzd2l0Y2ggc3RydWN0dXJlcy4gICovCisrCisrCisrLyogUmV0dXJuIHRoZSBzZXJ2aWNlLW5ldXRyYWwgc3VmZml4IG9mIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlCisrICAgbGlicmFyeSBmdW5jdGlvbiByZWZlcnJlZCB0byBieSB0aGUgZnVuY3Rpb24gRi4gIFRoZSByZXN1bHQgaXMKKysgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworK2NoYXIgKgorK2tub3duX2Z1bmN0aW9uX3N1ZmZpeCAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmKQorK3sKKysgIHN3aXRjaCAoZi0+a2luZCkKKysgICAgeworKyAgICBjYXNlIGZrX3NldGVudDoKKysgICAgICByZXR1cm4gc2FwcmludGYgKCJzZXQlc2VudCIsIGYtPmVudHJ5KTsKKysKKysgICAgY2FzZSBma19nZXRlbnQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZ2V0JXNlbnRfciIsIGYtPmVudHJ5KTsKKysKKysgICAgY2FzZSBma19lbmRlbnQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZW5kJXNlbnQiLCBmLT5lbnRyeSk7CisrCisrICAgIGNhc2UgZmtfZ2V0Ynk6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZ2V0JXNieSVzX3IiLCBmLT5lbnRyeSwgZi0+a2V5KTsKKysKKysgICAgY2FzZSBma19nZXQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgiZ2V0JXNfciIsIGYtPnZhbHVlX2FuZF9rZXkpOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIGFib3J0ICgpOworKyAgICB9CisrfQorKworKworKy8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgc2VydmljZSBsaWJyYXJ5IGZ1bmN0aW9uIHJlZmVycmVkIHRvIGJ5IHRoZQorKyAgIGZ1bmN0aW9uIEYuICBUaGUgcmVzdWx0IGlzIGFsbG9jYXRlZCB3aXRoIG1hbGxvYy4gICovCisrY2hhciAqCisra25vd25fZnVuY3Rpb25fbmFtZSAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmKQorK3sKKysgIHJldHVybiBzYXByaW50ZiAoIl9uc3NfJXNfJXMiLCBmLT5zZXJ2aWNlLCBrbm93bl9mdW5jdGlvbl9zdWZmaXggKGYpKTsKKyt9CisrCisrCisrLyogV3JpdGUgaW5pdGlhbGl6ZWQga25vd25fZnVuY3Rpb24gc3RydWN0dXJlcyB0byBPVVQgZm9yCisrICAgYWxsIHRoZSBmdW5jdGlvbnMgd2UnbGwgdXNlLiAgKi8KKyt2b2lkCisrZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25zIChGSUxFICpvdXQpCisreworKyAgaW50IGk7CisrCisrICAvKiBGaXJzdCwgZ2VuZXJhdGUgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBmdW5jdGlvbnMuICBUaGUgc2VydmljZQorKyAgICAgbGlicmFyaWVzIGRlcGVuZCBvbiBsaWJjLCBhbmQgaWYgdGhlc2UgcmVmZXJlbmNlcyB3ZXJlbid0IHdlYWssCisrICAgICB3ZSdkIGJlIG1ha2luZyBsaWJjIGRlcGVuZCBjaXJjdWxhcmx5IG9uIHRoZSBzZXJ2aWNlCisrICAgICBsaWJyYXJpZXMuICAqLworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgeworKyAgICAgIGNoYXIgKm5hbWUgPSBrbm93bl9mdW5jdGlvbl9uYW1lICgmZnVuY3Rpb25zW2ldKTsKKysgICAgICBmcHJpbnRmIChvdXQsICJ0eXBlb2YgKCVzKSAlcyBfX2F0dHJpYnV0ZV9fICgod2VhaykpO1xuIiwKKysgICAgICAgICAgICAgICBuYW1lLCBuYW1lKTsKKysgICAgfQorKyAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICAvKiBUaGVuLCBhIHRhYmxlIG1hcHBpbmcgbmFtZXMgdG8gZnVuY3Rpb25zLiAgKi8KKysgIGZwdXRzICgic3RhdGljIGNvbnN0IGtub3duX2Z1bmN0aW9uIGZpeGVkX2tub3duX2Z1bmN0aW9uc1tdID0ge1xuIiwKKysgICAgICAgICBvdXQpOworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZiA9ICZmdW5jdGlvbnNbaV07CisrICAgICAgY2hhciAqc3VmZml4ID0ga25vd25fZnVuY3Rpb25fc3VmZml4IChmKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICIgIC8qICUyZCAqLyB7IFwiJXNcIiwgX25zc18lc18lcyB9LFxuIiwKKysgICAgICAgICAgICAgICBpLCBzdWZmaXgsIGYtPnNlcnZpY2UsIHN1ZmZpeCk7CisrICAgIH0KKysgIGZwdXRzICgifTtcbiIsIG91dCk7CisrICBmcHV0cyAoIlxuIiwgb3V0KTsKKyt9CisrCisrCisrLyogUHJpbnQgY29kZSB0byBPVVQgZm9yIGFuIGluaXRpYWxpemVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZQorKyAgICdrbm93bl9mdW5jdGlvbicgc3RydWN0dXJlcyBuZWVkZWQgZm9yIFVTRVIsIHdoaWNoIGlzIGZvcgorKyAgIERBVEFCQVNFLiAgUmV0dXJuIGl0cyBuYW1lLCBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworK2NoYXIgKgorK2dlbmVyYXRlX2tub3duX2Z1bmN0aW9uX2xpc3QgKEZJTEUgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkYXRhYmFzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlX3VzZXIgKnVzZXIpCisreworKyAgY2hhciAqbGlzdF9uYW1lID0gc2FwcmludGYgKCJmaXhlZF8lc18lc19rbm93bl9mdW5jcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2UtPm5hbWUsIHVzZXItPm5hbWUpOworKyAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IGtub3duX2Z1bmN0aW9uIColc1tdID0ge1xuIiwKKysgICAgICAgICAgIGxpc3RfbmFtZSk7CisrICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIGlmIChzdHJjbXAgKGZ1bmN0aW9uc1tpXS5kYXRhYmFzZSwgZGF0YWJhc2UtPm5hbWUpID09IDAKKysgICAgICAgICYmIHN0cmNtcCAoZnVuY3Rpb25zW2ldLnNlcnZpY2UsIHVzZXItPm5hbWUpID09IDApCisrICAgICAgZnByaW50ZiAob3V0LCAiICAmZml4ZWRfa25vd25fZnVuY3Rpb25zWyVkXSwgLyogJXMgKi9cbiIsCisrICAgICAgICAgICAgICAgaSwga25vd25fZnVuY3Rpb25fbmFtZSAoJmZ1bmN0aW9uc1tpXSkpOworKyAgZnB1dHMgKCIgIE5VTExcbiIsIG91dCk7CisrICBmcHV0cyAoIn07XG4iLCBvdXQpOworKyAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICByZXR1cm4gbGlzdF9uYW1lOworK30KKysKKysKKysvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXR1cyB2YWx1ZSBTVEFUVVMsIGFzIGEgc3RhdGljYWxseQorKyAgIGFsbG9jYXRlZCBzdHJpbmcuICAqLworK2NvbnN0IGNoYXIgKgorK2xvb2t1cF9zdGF0dXNfbmFtZSAoZW51bSBuc3Nfc3RhdHVzIHN0YXR1cykKKyt7CisrICBzd2l0Y2ggKHN0YXR1cykKKysgICAgeworKyAgICBjYXNlIE5TU19TVEFUVVNfVFJZQUdBSU46IHJldHVybiAiTlNTX1NUQVRVU19UUllBR0FJTiI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19VTkFWQUlMOiByZXR1cm4gIk5TU19TVEFUVVNfVU5BVkFJTCI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19OT1RGT1VORDogcmV0dXJuICJOU1NfU1RBVFVTX05PVEZPVU5EIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1NVQ0NFU1M6IHJldHVybiAiTlNTX1NUQVRVU19TVUNDRVNTIjsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1JFVFVSTjogcmV0dXJuICJOU1NfU1RBVFVTX1JFVFVSTiI7CisrICAgIGRlZmF1bHQ6IGFib3J0ICgpOworKyAgICB9OworK30KKysKKysKKysvKiBSZXR1cm4gdGhlIG5hbWUgb2YgQUNUSU9OIGFzIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RyaW5nLiAgKi8KKytjb25zdCBjaGFyICoKKytsb29rdXBfYWN0aW9uX25hbWUgKGxvb2t1cF9hY3Rpb25zIGFjdGlvbikKKyt7CisrICBzd2l0Y2ggKGFjdGlvbikKKysgICAgeworKyAgICBjYXNlIE5TU19BQ1RJT05fQ09OVElOVUU6IHJldHVybiAiTlNTX0FDVElPTl9DT05USU5VRSI7CisrICAgIGNhc2UgTlNTX0FDVElPTl9SRVRVUk46IHJldHVybiAiTlNTX0FDVElPTl9SRVRVUk4iOworKyAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKysgICAgfQorK30KKysKKysKKysvKiBQcmludCBjb2RlIHRvIE9VVCBmb3IgdGhlIGxpc3Qgb2Ygc2VydmljZV91c2VyIHN0cnVjdHVyZXMgc3RhcnRpbmcKKysgICB3aXRoIFVTRVIsIHdoaWNoIGFyZSBhbGwgZm9yIERBVEFCQVNFLiAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZQorKyAgIGZpcnN0IHN0cnVjdHVyZSBpbiB0aGF0IGxpc3QsIG9yIHplcm8gaWYgVVNFUiBpcyBOVUxMLiAgKi8KKytjaGFyICoKKytnZW5lcmF0ZV9zZXJ2aWNlX3VzZXJfbGlzdCAoRklMRSAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkYXRhYmFzZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZV91c2VyICp1c2VyKQorK3sKKysgIGlmICh1c2VyKQorKyAgICB7CisrICAgICAgLyogR2VuZXJhdGUgdGhlIHRhaWwgb2YgdGhlIGxpc3QuICAqLworKyAgICAgIGNoYXIgKm5leHRfbmFtZSA9IGdlbmVyYXRlX3NlcnZpY2VfdXNlcl9saXN0IChvdXQsIGRhdGFiYXNlLCB1c2VyLT5uZXh0KTsKKysgICAgICAvKiBHZW5lcmF0ZSBvdXIga25vd24gZnVuY3Rpb24gbGlzdC4gICovCisrICAgICAgY2hhciAqa25vd25fZnVuY3Rpb25fbGlzdF9uYW1lID0KKysgICAgICAgIGdlbmVyYXRlX2tub3duX2Z1bmN0aW9uX2xpc3QgKG91dCwgZGF0YWJhc2UsIHVzZXIpOworKworKyAgICAgIGNoYXIgKm5hbWUgPSBzYXByaW50ZiAoImZpeGVkXyVzXyVzX3VzZXIiLCBkYXRhYmFzZS0+bmFtZSwgdXNlci0+bmFtZSk7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IHNlcnZpY2VfdXNlciAlcyA9IHtcbiIsIG5hbWUpOworKyAgICAgIGlmIChuZXh0X25hbWUpCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIChzZXJ2aWNlX3VzZXIgKikgJiVzLFxuIiwgbmV4dF9uYW1lKTsKKysgICAgICBlbHNlCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsIC8qIG5vIG5leHQgZW50cnkgKi9cbiIpOworKyAgICAgIGZwdXRzICgiICB7XG4iLCBvdXQpOworKyAgICAgIGludCBpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHVzZXItPmFjdGlvbnMpIC8gc2l6ZW9mICh1c2VyLT5hY3Rpb25zWzBdKTsgaSsrKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAgICVzLCAvKiAlcyAqL1xuIiwKKysgICAgICAgICAgICAgICAgIGxvb2t1cF9hY3Rpb25fbmFtZSAodXNlci0+YWN0aW9uc1tpXSksCisrICAgICAgICAgICAgICAgICBsb29rdXBfc3RhdHVzX25hbWUgKGkgLSAyKSk7CisrICAgICAgZnB1dHMgKCIgIH0sXG4iLCBvdXQpOworKyAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCwgIC8qIHdlIG5ldmVyIG5lZWQgdGhlIHNlcnZpY2UgbGlicmFyeSAqL1xuIik7CisrICAgICAgZnByaW50ZiAob3V0LCAiICB7IC5hcnJheSA9ICVzIH0sXG4iLCBrbm93bl9mdW5jdGlvbl9saXN0X25hbWUpOworKyAgICAgIGZwcmludGYgKG91dCwgIiAgXCIlc1wiXG4iLCB1c2VyLT5uYW1lKTsKKysgICAgICBmcHV0cyAoIn07XG4iLCBvdXQpOworKyAgICAgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgICAgIHJldHVybiBuYW1lOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiBOVUxMOworK30KKysKKysKKysvKiBQcmludCBjb2RlIHRvIE9VVCBmb3IgdGhlIGxpc3Qgb2YgbmFtZV9kYXRhYmFzZV9lbnRyeSBzdHJ1Y3R1cmVzCisrICAgc3RhcnRpbmcgd2l0aCBEQVRBQkFTRS4gIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlyc3Qgc3RydWN0dXJlCisrICAgaW4gdGhhdCBsaXN0LCBvciB6ZXJvIGlmIERBVEFCQVNFIGlzIE5VTEwuICAqLworK2NoYXIgKgorK2dlbmVyYXRlX25hbWVfZGF0YWJhc2VfZW50cmllcyAoRklMRSAqb3V0LCBuYW1lX2RhdGFiYXNlX2VudHJ5ICpkYXRhYmFzZSkKKyt7CisrICBpZiAoZGF0YWJhc2UpCisrICAgIHsKKysgICAgICBjaGFyICpuZXh0X25hbWUgPSBnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlX2VudHJpZXMgKG91dCwgZGF0YWJhc2UtPm5leHQpOworKyAgICAgIGNoYXIgKnNlcnZpY2VfdXNlcl9uYW1lCisrICAgICAgICA9IGdlbmVyYXRlX3NlcnZpY2VfdXNlcl9saXN0IChvdXQsIGRhdGFiYXNlLCBkYXRhYmFzZS0+c2VydmljZSk7CisrICAgICAgY2hhciAqbmFtZSA9IHNhcHJpbnRmICgiZml4ZWRfJXNfbmFtZV9kYXRhYmFzZSIsIGRhdGFiYXNlLT5uYW1lKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICJzdGF0aWMgY29uc3QgbmFtZV9kYXRhYmFzZV9lbnRyeSAlcyA9IHtcbiIsIG5hbWUpOworKworKyAgICAgIGlmIChuZXh0X25hbWUpCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIChuYW1lX2RhdGFiYXNlX2VudHJ5ICopICYlcyxcbiIsIG5leHRfbmFtZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLFxuIik7CisrCisrICAgICAgaWYgKHNlcnZpY2VfdXNlcl9uYW1lKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAoc2VydmljZV91c2VyICopICYlcyxcbiIsIHNlcnZpY2VfdXNlcl9uYW1lKTsKKysgICAgICBlbHNlCisrICAgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsXG4iKTsKKysKKysgICAgICBmcHJpbnRmIChvdXQsICIgIFwiJXNcIlxuIiwgZGF0YWJhc2UtPm5hbWUpOworKyAgICAgIGZwcmludGYgKG91dCwgIn07XG4iKTsKKysgICAgICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgICAgICByZXR1cm4gbmFtZTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrCisrCisrdm9pZAorK2dlbmVyYXRlX25hbWVfZGF0YWJhc2UgKEZJTEUgKm91dCwgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSkKKyt7CisrICAvKiBQcm9kdWNlIGEgbGlua2VkIGxpc3Qgb2YgdGhlIGtub3duIG5hbWVfZGF0YWJhc2VfZW50cnkKKysgICAgIHN0cnVjdHVyZXMuICAqLworKyAgY2hhciAqZW50cmllcyA9IGdlbmVyYXRlX25hbWVfZGF0YWJhc2VfZW50cmllcyAob3V0LCBzZXJ2aWNlX3RhYmxlLT5lbnRyeSk7CisrCisrICAvKiBOb3cgcHJvZHVjZSB0aGUgbWFpbiBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlbSBhbGwuICAqLworKyAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IG5hbWVfZGF0YWJhc2UgZml4ZWRfbmFtZV9kYXRhYmFzZSA9IHtcbiIpOworKyAgaWYgKGVudHJpZXMpCisrICAgIGZwcmludGYgKG91dCwgIiAgKG5hbWVfZGF0YWJhc2VfZW50cnkgKikgJiVzLFxuIiwgZW50cmllcyk7CisrICBlbHNlCisrICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCxcbiIpOworKyAgZnB1dHMgKCIgIE5VTEwgLyogd2UgZG9uJ3QgbmVlZCB0aGUgbGlicmFyaWVzICovXG4iCisrICAgICAgICAgIn07XG4iLAorKyAgICAgICAgIG91dCk7CisrfQorKworKworKwwKKysvKiBHZW5lcmF0aW5nIHRoZSBsaXN0IG9mIHNlcnZpY2UgbGlicmFyaWVzIHdlIGdlbmVyYXRlIHJlZmVyZW5jZXMgdG8uICAqLworKworKy8qIFN0cmluZyB3aXRoIHJldmlzaW9uIG51bWJlciBvZiB0aGUgc2hhcmVkIG9iamVjdCBmaWxlcy4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5zc19zaGxpYl9yZXZpc2lvbiA9IExJQk5TU19GSUxFU19TTyArIDE1OworKworK3ZvaWQKKytnZW5lcmF0ZV9zZXJ2aWNlX2xpYl9saXN0IChGSUxFICpvdXQsIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUpCisreworKyAgaW50IGksIGo7CisrICBpbnQgcHJpbnRlZF9hbnkgPSAwOworKworKyAgZm9yIChpID0gMDsgZnVuY3Rpb25zW2ldLmtpbmQ7IGkrKykKKysgICAgeworKyAgICAgIC8qIE1lbnRpb24gZWFjaCBzZXJ2aWNlIGxpYnJhcnkgb25seSBvbmNlLiAgKi8KKysgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorKyAgICAgICAgaWYgKHN0cmNtcCAoZnVuY3Rpb25zW2ldLnNlcnZpY2UsIGZ1bmN0aW9uc1tqXS5zZXJ2aWNlKSA9PSAwKQorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICBpZiAoaiA+PSBpKQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAocHJpbnRlZF9hbnkpCisrICAgICAgICAgICAgcHV0YyAoJyAnLCBvdXQpOworKyAgICAgICAgICBmcHJpbnRmIChvdXQsICItbG5zc18lcyIsCisrICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1tpXS5zZXJ2aWNlLAorKyAgICAgICAgICAgICAgICAgICBuc3Nfc2hsaWJfcmV2aXNpb24pOworKyAgICAgICAgICBwcmludGVkX2FueSA9IDE7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisrDAorKy8qIE1haW4uICAqLworKworK2ludAorK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBpZiAoYXJnYyAhPSA0KQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6IGdlbi1maXhlZC1uc3N3aXRjaCBIRUFERVIgU0VSVkxJQlMgQ09ORklHXG4iKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKworKyAgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSA9IG5zc19wYXJzZV9maWxlIChhcmd2WzNdKTsKKysKKysgIEZJTEUgKmhlYWRlciA9IGZvcGVuIChhcmd2WzFdLCAidyIpOworKyAgaWYgKCEgaGVhZGVyKQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLAorKyAgICAgICAgICAgICAgICJnZW4tZml4ZWQtbnNzd2l0Y2g6IGNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6ICVzXG4iLAorKyAgICAgICAgICAgICAgIGFyZ3ZbMV0sIHN0cmVycm9yIChlcnJubykpOworKyAgICAgIGV4aXQgKDEpOworKyAgICB9CisrICBmcHV0cyAoIi8qIEdlbmVyYXRlZCBieSBuc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMuICAqL1xuIiwgaGVhZGVyKTsKKysgIGZwdXRzICgiXG4iLCBoZWFkZXIpOworKyAgZ2VuZXJhdGVfa25vd25fZnVuY3Rpb25zIChoZWFkZXIpOworKyAgZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZSAoaGVhZGVyLCBzZXJ2aWNlX3RhYmxlKTsKKysgIGZjbG9zZSAoaGVhZGVyKTsKKysKKysgIEZJTEUgKnNlcnZpY2VfbGliX2xpc3QgPSBmb3BlbiAoYXJndlsyXSwgInciKTsKKysgIGlmICghIHNlcnZpY2VfbGliX2xpc3QpCisrICAgIHsKKysgICAgICBmcHJpbnRmIChzdGRlcnIsCisrICAgICAgICAgICAgICAgImdlbi1maXhlZC1uc3N3aXRjaDogY291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsCisrICAgICAgICAgICAgICAgYXJndlsyXSwgc3RyZXJyb3IgKGVycm5vKSk7CisrICAgICAgZXhpdCAoMSk7CisrICAgIH0KKysgIGdlbmVyYXRlX3NlcnZpY2VfbGliX2xpc3QgKHNlcnZpY2VfbGliX2xpc3QsIHNlcnZpY2VfdGFibGUpOworKyAgZmNsb3NlIChzZXJ2aWNlX2xpYl9saXN0KTsKKysKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9uc3MvZ2V0ZW50LmMgYi9uc3MvZ2V0ZW50LmMKK2luZGV4IDM0ZGY4NDguLjY3NGM4ZWUgMTAwNjQ0CistLS0gYS9uc3MvZ2V0ZW50LmMKKysrKyBiL25zcy9nZXRlbnQuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8bmV0aW5ldC9ldGhlci5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBHZXQgbGliYyB2ZXJzaW9uIG51bWJlci4gICovCisgI2luY2x1ZGUgPHZlcnNpb24uaD4KK0BAIC05MSw2ICs5Miw3IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuXAorICAgZnByaW50ZiAoc3RyZWFtLCBnZXR0ZXh0ICgiV3JpdHRlbiBieSAlcy5cbiIpLCAiVGhvcnN0ZW4gS3VrdWsiKTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTCisgLyogVGhpcyBpcyBmb3IgYWxpYXNlcyAqLworIHN0YXRpYyB2b2lkCisgcHJpbnRfYWxpYXNlcyAoc3RydWN0IGFsaWFzZW50ICphbGlhcykKK0BAIC0xMzUsNyArMTM3LDkgQEAgYWxpYXNlc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfREJfQUxJQVNFUyAqLworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIFRoaXMgaXMgZm9yIGV0aGVycyAqLworIHN0YXRpYyBpbnQKKyBldGhlcnNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCitAQCAtMTc5LDYgKzE4Myw3IEBAIGV0aGVyc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorIC8qIFRoaXMgaXMgZm9yIGdyb3VwICovCisgc3RhdGljIHZvaWQKK0BAIC0zMDEsNiArMzA2LDcgQEAgZ3NoYWRvd19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIFRoaXMgaXMgZm9yIGhvc3RzICovCisgc3RhdGljIHZvaWQKKyBwcmludF9ob3N0cyAoc3RydWN0IGhvc3RlbnQgKmhvc3QpCitAQCAtNTk4LDYgKzYwNCw3IEBAIG5ldHdvcmtzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgLyogTm93IGlzIGFsbCBmb3IgcGFzc3dkICovCisgc3RhdGljIHZvaWQKK0BAIC02NTAsNiArNjU3LDcgQEAgcGFzc3dkX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogVGhpcyBpcyBmb3IgcHJvdG9jb2xzICovCisgc3RhdGljIHZvaWQKKyBwcmludF9wcm90b2NvbHMgKHN0cnVjdCBwcm90b2VudCAqcHJvdG8pCitAQCAtODA3LDYgKzgxNSw3IEBAIHNlcnZpY2VzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgLyogVGhpcyBpcyBmb3Igc2hhZG93ICovCisgc3RhdGljIHZvaWQKK0BAIC04NzMsMjMgKzg4MiwzNiBAQCBzdHJ1Y3QKKyAgIH0gZGF0YWJhc2VzW10gPQorICAgeworICNkZWZpbmUgRChuYW1lKSB7ICNuYW1lLCBuYW1lICMjIF9rZXlzIH0sCistRChhaG9zdHMpCistRChhaG9zdHN2NCkKKy1EKGFob3N0c3Y2KQorLUQoYWxpYXNlcykKKy1EKGV0aGVycykKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKysjIGRlZmluZSBETihuYW1lKSBEKG5hbWUpCisrI2Vsc2UKKysjIGRlZmluZSBETihuYW1lKQorKyNlbmRpZgorKworKyNpZiBfX09QVElPTl9FR0xJQkNfREJfQUxJQVNFUworKyMgZGVmaW5lIERBKG5hbWUpIEQobmFtZSkKKysjZWxzZQorKyMgZGVmaW5lIERBKG5hbWUpCisrI2VuZGlmCisrCisrRE4oYWhvc3RzKQorK0ROKGFob3N0c3Y0KQorK0ROKGFob3N0c3Y2KQorK0RBKGFsaWFzZXMpCisrRE4oZXRoZXJzKQorIEQoZ3JvdXApCisgRChnc2hhZG93KQorLUQoaG9zdHMpCistRChpbml0Z3JvdXBzKQorLUQobmV0Z3JvdXApCistRChuZXR3b3JrcykKKytETihob3N0cykKKytETihpbml0Z3JvdXBzKQorK0ROKG5ldGdyb3VwKQorK0ROKG5ldHdvcmtzKQorIEQocGFzc3dkKQorLUQocHJvdG9jb2xzKQorK0ROKHByb3RvY29scykKKyAjaWYgSEFWRV9TVU5SUEMKKy1EKHJwYykKKytETihycGMpCisgI2VuZGlmCistRChzZXJ2aWNlcykKKytETihzZXJ2aWNlcykKKyBEKHNoYWRvdykKKyAjdW5kZWYgRAorICAgICB7IE5VTEwsIE5VTEwgfQorZGlmZiAtLWdpdCBhL25zcy9nZXRuc3NlbnRfci5jIGIvbnNzL2dldG5zc2VudF9yLmMKK2luZGV4IGY1YjkwMzYuLmYwOWY3ZmUgMTAwNjQ0CistLS0gYS9uc3MvZ2V0bnNzZW50X3IuYworKysrIGIvbnNzL2dldG5zc2VudF9yLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8bmV0ZGIuaD4KKyAjaW5jbHVkZSAibnNzd2l0Y2guaCIKKyAKK0BAIC01OSwxMSArNjAsMTMgQEAgX19uc3Nfc2V0ZW50IChjb25zdCBjaGFyICpmdW5jX25hbWUsIGRiX2xvb2t1cF9mdW5jdGlvbiBsb29rdXBfZmN0LAorICAgfSBmY3Q7CisgICBpbnQgbm9fbW9yZTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIGlmIChyZXMgJiYgX19yZXNfbWF5YmVfaW5pdCAoJl9yZXMsIDApID09IC0xKQorICAgICB7CisgICAgICAgX19zZXRfaF9lcnJubyAoTkVUREJfSU5URVJOQUwpOworICAgICAgIHJldHVybjsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorICAgLyogQ3ljbGUgdGhyb3VnaCB0aGUgc2VydmljZXMgYW5kIHJ1biB0aGVpciBgc2V0WFhlbnQnIGZ1bmN0aW9ucyB1bnRpbAorICAgICAgd2UgZmluZCBhbiBhdmFpbGFibGUgc2VydmljZS4gICovCitAQCAtMTAxLDExICsxMDQsMTMgQEAgX19uc3NfZW5kZW50IChjb25zdCBjaGFyICpmdW5jX25hbWUsIGRiX2xvb2t1cF9mdW5jdGlvbiBsb29rdXBfZmN0LAorICAgfSBmY3Q7CisgICBpbnQgbm9fbW9yZTsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIGlmIChyZXMgJiYgX19yZXNfbWF5YmVfaW5pdCAoJl9yZXMsIDApID09IC0xKQorICAgICB7CisgICAgICAgX19zZXRfaF9lcnJubyAoTkVUREJfSU5URVJOQUwpOworICAgICAgIHJldHVybjsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorICAgLyogQ3ljbGUgdGhyb3VnaCBhbGwgdGhlIHNlcnZpY2VzIGFuZCBydW4gdGhlaXIgZW5kWFhlbnQgZnVuY3Rpb25zLiAgKi8KKyAgIG5vX21vcmUgPSBzZXR1cCAoZnVuY19uYW1lLCBsb29rdXBfZmN0LCAmZmN0LnB0ciwgbmlwLCBzdGFydHAsIDEpOworQEAgLTE0MSwxMiArMTQ2LDE0IEBAIF9fbnNzX2dldGVudF9yIChjb25zdCBjaGFyICpnZXRlbnRfZnVuY19uYW1lLAorICAgaW50IG5vX21vcmU7CisgICBlbnVtIG5zc19zdGF0dXMgc3RhdHVzOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorICAgaWYgKHJlcyAmJiBfX3Jlc19tYXliZV9pbml0ICgmX3JlcywgMCkgPT0gLTEpCisgICAgIHsKKyAgICAgICAqaF9lcnJub3AgPSBORVREQl9JTlRFUk5BTDsKKyAgICAgICAqcmVzdWx0ID0gTlVMTDsKKyAgICAgICByZXR1cm4gZXJybm87CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAgIC8qIEluaXRpYWxpemUgc3RhdHVzIHRvIHJldHVybiBpZiBubyBtb3JlIGZ1bmN0aW9ucyBhcmUgZm91bmQuICAqLworICAgc3RhdHVzID0gTlNTX1NUQVRVU19OT1RGT1VORDsKK0BAIC0xNjEsNyArMTY4LDcgQEAgX19uc3NfZ2V0ZW50X3IgKGNvbnN0IGNoYXIgKmdldGVudF9mdW5jX25hbWUsCisgICAgICAgaW50IGlzX2xhc3RfbmlwID0gKm5pcCA9PSAqbGFzdF9uaXA7CisgCisgICAgICAgc3RhdHVzID0gRExfQ0FMTF9GQ1QgKGZjdC5mLAorLQkJCSAgICAocmVzYnVmLCBidWZmZXIsIGJ1ZmxlbiwgJmVycm5vLCAmaF9lcnJubykpOworKwkJCSAgICAocmVzYnVmLCBidWZmZXIsIGJ1ZmxlbiwgJmVycm5vLCBoX2Vycm5vcCkpOworIAorICAgICAgIC8qIFRoZSBzdGF0dXMgaXMgTlNTX1NUQVRVU19UUllBR0FJTiBhbmQgZXJybm8gaXMgRVJBTkdFIHRoZQorIAkgcHJvdmlkZWQgYnVmZmVyIGlzIHRvbyBzbWFsbC4gIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgZ2l2ZQorZGlmZiAtLWdpdCBhL25zcy9uc3N3aXRjaC5jIGIvbnNzL25zc3dpdGNoLmMKK2luZGV4IDk3MTI2MjMuLmM4MWUyMDcgMTAwNjQ0CistLS0gYS9uc3MvbnNzd2l0Y2guYworKysrIGIvbnNzL25zc3dpdGNoLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgPHN0ZGlvX2V4dC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGFsaWFzZXMuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CitAQCAtNDEsNiArNDIsMTUgQEAKKyAjaW5jbHVkZSAiLi4vbnNjZC9uc2NkX3Byb3RvLmgiCisgI2luY2x1ZGUgPHN5c2RlcC5oPgorIAorKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCwgd2UgdXNlIGZpeGVkIHRhYmxlcyBvZgorKyAgIGRhdGFiYXNlcyBhbmQgc2VydmljZXMsIGdlbmVyYXRlZCBhdCBsaWJyYXJ5IGJ1aWxkIHRpbWUuICBUaHVzOgorKyAgIC0gV2UgY2FuJ3QgcmVjb25maWd1cmUgaW5kaXZpZHVhbCBkYXRhYmFzZXMsIHNvIHdlIGRvbid0IG5lZWQgYQorKyAgICAgbmFtZS10by1kYXRhYmFzZSBtYXAuCisrICAgLSBXZSBuZXZlciBhZGQgZGF0YWJhc2VzIG9yIHNlcnZpY2UgbGlicmFyaWVzLCBvciBsb29rIHVwIGZ1bmN0aW9ucworKyAgICAgYXQgcnVudGltZSwgc28gdGhlcmUncyBubyBuZWVkIGZvciBhIGxvY2sgdG8gcHJvdGVjdCBvdXIgdGFibGVzLgorKyAgIFNlZSAuLi9vcHRpb24tZ3JvdXBzLmRlZiBmb3IgdGhlIGRldGFpbHMuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKysKKyAvKiBQcm90b3R5cGVzIGZvciB0aGUgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKSBpbnRlcm5hbF9mdW5jdGlvbjsKKyBzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpIGludGVybmFsX2Z1bmN0aW9uOworQEAgLTc5LDYgKzg5LDkgQEAgYm9vbCBfX25zc19kYXRhYmFzZV9jdXN0b21bTlNTX0RCU0lEWF9tYXhdOworIAorIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKQorIAorKyNkZWZpbmUgbG9ja19uc3N3aXRjaCBfX2xpYmNfbG9ja19sb2NrIChsb2NrKQorKyNkZWZpbmUgdW5sb2NrX25zc3dpdGNoIF9fbGliY19sb2NrX3VubG9jayAobG9jaykKKysKKyAjaWYgIWRlZmluZWQgRE9fU1RBVElDX05TUyB8fCBkZWZpbmVkIFNIQVJFRAorIC8qIFN0cmluZyB3aXRoIHJldmlzaW9uIG51bWJlciBvZiB0aGUgc2hhcmVkIG9iamVjdCBmaWxlcy4gICovCisgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IF9fbnNzX3NobGliX3JldmlzaW9uID0gTElCTlNTX0ZJTEVTX1NPICsgMTU7CitAQCAtOTMsNiArMTA2LDIwIEBAIHN0YXRpYyBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlOworICAgIF9fbGliY19mcmVlcmVzLiAgKi8KKyBzdGF0aWMgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGVmY29uZmlnX2VudHJpZXM7CisgCisrI2Vsc2UgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisrCisrLyogQnJpbmcgaW4gdGhlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc2VydmljZSB0YWJsZSB3ZSBnZW5lcmF0ZWQgYXQKKysgICBidWlsZCB0aW1lLiAgKi8KKysjaW5jbHVkZSAiZml4ZWQtbnNzd2l0Y2guaCIKKysKKytjb25zdCBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZSA9ICZmaXhlZF9uYW1lX2RhdGFiYXNlOworKworKy8qIE5vdGhpbmcgZXZlciBjaGFuZ2VzLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gbG9jayBhbnl0aGluZy4gICovCisrI2RlZmluZSBsb2NrX25zc3dpdGNoICgwKQorKyNkZWZpbmUgdW5sb2NrX25zc3dpdGNoICgwKQorKworKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKysKKyAKKyAjaWZkZWYgVVNFX05TQ0QKKyAvKiBOb256ZXJvIGlmIHRoaXMgaXMgdGhlIG5zY2QgcHJvY2Vzcy4gICovCitAQCAtMTA5LDIwICsxMzYsMjIgQEAgX19uc3NfZGF0YWJhc2VfbG9va3VwIChjb25zdCBjaGFyICpkYXRhYmFzZSwgY29uc3QgY2hhciAqYWx0ZXJuYXRlX25hbWUsCisgCQkgICAgICAgY29uc3QgY2hhciAqZGVmY29uZmlnLCBzZXJ2aWNlX3VzZXIgKipuaSkKKyB7CisgICAvKiBQcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdG8gY2hhbmdlIHRoZSBzZXJ2aWNlIHRhYmxlLiAgKi8KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyAgbG9ja19uc3N3aXRjaDsKKyAKKyAgIC8qIFJlY29uc2lkZXIgZGF0YWJhc2UgdmFyaWFibGUgaW4gY2FzZSBzb21lIG90aGVyIHRocmVhZCBjYWxsZWQKKyAgICAgIGBfX25zc19jb25maWd1cmVfbG9va3VwJyB3aGlsZSB3ZSB3YWl0ZWQgZm9yIHRoZSBsb2NrLiAgKi8KKyAgIGlmICgqbmkgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICAgICAgdW5sb2NrX25zc3dpdGNoOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorICAgLyogQXJlIHdlIGluaXRpYWxpemVkIHlldD8gICovCisgICBpZiAoc2VydmljZV90YWJsZSA9PSBOVUxMKQorICAgICAvKiBSZWFkIGNvbmZpZyBmaWxlLiAgKi8KKyAgICAgc2VydmljZV90YWJsZSA9IG5zc19wYXJzZV9maWxlIChfUEFUSF9OU1NXSVRDSF9DT05GKTsKKysjZW5kaWYKKyAKKyAgIC8qIFRlc3Qgd2hldGhlciBjb25maWd1cmF0aW9uIGRhdGEgaXMgYXZhaWxhYmxlLiAgKi8KKyAgIGlmIChzZXJ2aWNlX3RhYmxlICE9IE5VTEwpCitAQCAtMTQ0LDYgKzE3Myw3IEBAIF9fbnNzX2RhdGFiYXNlX2xvb2t1cCAoY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9uYW1lLAorIAkgICAgKm5pID0gZW50cnktPnNlcnZpY2U7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgICAvKiBObyBjb25maWd1cmF0aW9uIGRhdGEgaXMgYXZhaWxhYmxlLCBlaXRoZXIgYmVjYXVzZSBuc3N3aXRjaC5jb25mCisgICAgICBkb2Vzbid0IGV4aXN0IG9yIGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGEgbGluZSBmb3IgdGhpcyBkYXRhYmFzZS4KKyAKK0BAIC0xNjYsMTMgKzE5NiwyMyBAQCBfX25zc19kYXRhYmFzZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICphbHRlcm5hdGVfbmFtZSwKKyAJICAgIHsKKyAJICAgICAgZW50cnktPm5leHQgPSBkZWZjb25maWdfZW50cmllczsKKyAJICAgICAgZW50cnktPnNlcnZpY2UgPSAqbmk7CistCSAgICAgIGVudHJ5LT5uYW1lWzBdID0gJ1wwJzsKKysJICAgICAgZW50cnktPm5hbWUgPSAiIjsKKyAJICAgICAgZGVmY29uZmlnX2VudHJpZXMgPSBlbnRyeTsKKyAJICAgIH0KKyAJfQorICAgICB9CisrI2Vsc2UKKysgIC8qIFdpdGhvdXQgdGhlIGR5bmFtaWMgYmVoYXZpb3IsIHdlIGNhbid0IHByb2Nlc3MgZGVmY29uZmlnLiAgVGhlCisrICAgICBkYXRhYmFzZXMgdGhlIHVzZXIgc3BlY2lmaWVkIGF0IGxpYnJhcnkgYnVpbGQgdGltZSBhcmUgYWxsIHlvdQorKyAgICAgZ2V0LiAgKi8KKysgIGlmICgqbmkgPT0gTlVMTCkKKysgICAgeworKyAgICAgIHVubG9ja19uc3N3aXRjaDsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZW5kaWYKKyAKKy0gIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICB1bmxvY2tfbnNzd2l0Y2g7CisgCisgICByZXR1cm4gKm5pICE9IE5VTEwgPyAwIDogLTE7CisgfQorQEAgLTI1Miw2ICsyOTIsNyBAQCBfX25zc19uZXh0MiAoc2VydmljZV91c2VyICoqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lLCBjb25zdCBjaGFyICpmY3QyX25hbWUsCisgbGliY19oaWRkZW5fZGVmIChfX25zc19uZXh0MikKKyAKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25zc19uZXh0IChzZXJ2aWNlX3VzZXIgKipuaSwgY29uc3QgY2hhciAqZmN0X25hbWUsIHZvaWQgKipmY3RwLCBpbnQgc3RhdHVzLAorQEAgLTMwMCwxMyArMzQxLDEzIEBAIF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqc2VydmljZV9saW5lKQorICAgICB9CisgCisgICAvKiBQcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdG8gY2hhbmdlIHRoZSBzZXJ2aWNlIHRhYmxlLiAgKi8KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyAgbG9ja19uc3N3aXRjaDsKKyAKKyAgIC8qIEluc3RhbGwgbmV3IHJ1bGVzLiAgKi8KKyAgICpkYXRhYmFzZXNbY250XS5kYnAgPSBuZXdfZGI7CisgICBfX25zc19kYXRhYmFzZV9jdXN0b21bY250XSA9IHRydWU7CisgCistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgdW5sb2NrX25zc3dpdGNoOworIAorICAgcmV0dXJuIDA7CisgfQorQEAgLTQwMiw3ICs0NDMsNyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICAgdm9pZCAqKmZvdW5kLCAqcmVzdWx0OworIAorICAgLyogV2Ugbm93IG1vZGlmeSBnbG9iYWwgZGF0YS4gIFByb3RlY3QgaXQuICAqLworLSAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrICBsb2NrX25zc3dpdGNoOworIAorICAgLyogU2VhcmNoIHRoZSB0cmVlIG9mIGZ1bmN0aW9ucyBwcmV2aW91c2x5IHJlcXVlc3RlZC4gIERhdGEgaW4gdGhlCisgICAgICB0cmVlIGFyZSBga25vd25fZnVuY3Rpb24nIHN0cnVjdHVyZXMsIHdob3NlIGZpcnN0IG1lbWJlciBpcyBhCitAQCAtNDEzLDcgKzQ1NCw3IEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgICAgICBlbm91Z2ggdG8gYSBwb2ludGVyIHRvIG91ciBzdHJ1Y3R1cmUgdG8gdXNlIGFzIGEgbG9va3VwIGtleSB0aGF0CisgICAgICB3aWxsIGJlIHBhc3NlZCB0byBga25vd25fY29tcGFyZScgKGFib3ZlKS4gICovCisgCistICBmb3VuZCA9IF9fdHNlYXJjaCAoJmZjdF9uYW1lLCAmbmktPmtub3duLCAma25vd25fY29tcGFyZSk7CisrICBmb3VuZCA9IF9fdHNlYXJjaCAoJmZjdF9uYW1lLCAmbmktPmtub3duLnRyZWUsICZrbm93bl9jb21wYXJlKTsKKyAgIGlmIChmb3VuZCA9PSBOVUxMKQorICAgICAvKiBUaGlzIG1lYW5zIG91dC1vZi1tZW1vcnkuICAqLworICAgICByZXN1bHQgPSBOVUxMOworQEAgLTQ0MCw3ICs0ODEsNyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICNlbmRpZgorIAkgIC8qIE9vcHMuICBXZSBjYW4ndCBpbnN0YW50aWF0ZSB0aGlzIG5vZGUgcHJvcGVybHkuCisgCSAgICAgUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUuICAqLworLQkgIF9fdGRlbGV0ZSAoJmZjdF9uYW1lLCAmbmktPmtub3duLCAma25vd25fY29tcGFyZSk7CisrCSAgX190ZGVsZXRlICgmZmN0X25hbWUsICZuaS0+a25vd24udHJlZSwgJmtub3duX2NvbXBhcmUpOworIAkgIGZyZWUgKGtub3duKTsKKyAJICByZXN1bHQgPSBOVUxMOworIAl9CitAQCAtNTIwLDEzICs1NjEsNDMgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAgICAgfQorIAorICAgLyogUmVtb3ZlIHRoZSBsb2NrLiAgKi8KKy0gIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrICB1bmxvY2tfbnNzd2l0Y2g7CisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbnNzX2xvb2t1cF9mdW5jdGlvbikKKyAKKyAKKysjZWxzZSAvKiBiZWxvdyBpZiAhIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworKworKworK2ludAorK19fbnNzX2NvbmZpZ3VyZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqc2VydmljZV9saW5lKQorK3sKKysgIC8qIFdlIGNhbid0IGR5bmFtaWNhbGx5IGNvbmZpZ3VyZSBsb29rdXAgd2l0aG91dAorKyAgICAgT1BUSU9OX0VHTElCQ19OU1NXSVRDSC4gICovCisrICBfX3NldF9lcnJubyAoRUlOVkFMKTsKKysgIHJldHVybiAtMTsKKyt9CisrCisrCisrdm9pZCAqCisrX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyt7CisrICBpbnQgaTsKKysgIGNvbnN0IGtub3duX2Z1bmN0aW9uICoqa25vd24gPSBuaS0+a25vd24uYXJyYXk7CisrCisrICBmb3IgKGkgPSAwOyBrbm93bltpXTsgaSsrKQorKyAgICBpZiAoc3RyY21wIChmY3RfbmFtZSwga25vd25baV0tPmZjdF9uYW1lKSA9PSAwKQorKyAgICAgIHJldHVybiBrbm93bltpXS0+ZmN0X3B0cjsKKysKKysgIHJldHVybiBOVUxMOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbnNzX2xvb2t1cF9mdW5jdGlvbikKKysjZW5kaWYKKysKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisgc3RhdGljIG5hbWVfZGF0YWJhc2UgKgorIGludGVybmFsX2Z1bmN0aW9uCisgbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKQorQEAgLTYzMiw4ICs3MDMsMTAgQEAgbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAoY29uc3QgY2hhciAqbGluZSkKKyAJCQkJCSAgICAgKyAobGluZSAtIG5hbWUgKyAxKSk7CisgICAgICAgaWYgKG5ld19zZXJ2aWNlID09IE5VTEwpCisgCXJldHVybiByZXN1bHQ7CisrICAgICAgbmV3X3NlcnZpY2UtPm5hbWUgPSAoY2hhciAqKSAobmV3X3NlcnZpY2UgKyAxKTsKKyAKKy0gICAgICAqKChjaGFyICopIF9fbWVtcGNweSAobmV3X3NlcnZpY2UtPm5hbWUsIG5hbWUsIGxpbmUgLSBuYW1lKSkgPSAnXDAnOworKyAgICAgICooKGNoYXIgKikgX19tZW1wY3B5ICgoY2hhciAqKSBuZXdfc2VydmljZS0+bmFtZSwgbmFtZSwgbGluZSAtIG5hbWUpKQorKyAgICAgICAgPSAnXDAnOworIAorICAgICAgIC8qIFNldCBkZWZhdWx0IGFjdGlvbnMuICAqLworICAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1RSWUFHQUlOXSA9IE5TU19BQ1RJT05fQ09OVElOVUU7CitAQCAtNjQyLDcgKzcxNSw3IEBAIG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisgICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfU1VDQ0VTU10gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKyAgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19SRVRVUk5dID0gTlNTX0FDVElPTl9SRVRVUk47CisgICAgICAgbmV3X3NlcnZpY2UtPmxpYnJhcnkgPSBOVUxMOworLSAgICAgIG5ld19zZXJ2aWNlLT5rbm93biA9IE5VTEw7CisrICAgICAgbmV3X3NlcnZpY2UtPmtub3duLnRyZWUgPSBOVUxMOworICAgICAgIG5ld19zZXJ2aWNlLT5uZXh0ID0gTlVMTDsKKyAKKyAgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCitAQCAtNzc4LDkgKzg1MSwxMCBAQCBuc3NfZ2V0bGluZSAoY2hhciAqbGluZSkKKyAgIHJlc3VsdCA9IChuYW1lX2RhdGFiYXNlX2VudHJ5ICopIG1hbGxvYyAoc2l6ZW9mIChuYW1lX2RhdGFiYXNlX2VudHJ5KSArIGxlbik7CisgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgIHJldHVybiBOVUxMOworKyAgcmVzdWx0LT5uYW1lID0gKGNoYXIgKikgKHJlc3VsdCArIDEpOworIAorICAgLyogU2F2ZSB0aGUgZGF0YWJhc2UgbmFtZS4gICovCistICBtZW1jcHkgKHJlc3VsdC0+bmFtZSwgbmFtZSwgbGVuKTsKKysgIG1lbWNweSAoKGNoYXIgKikgcmVzdWx0LT5uYW1lLCBuYW1lLCBsZW4pOworIAorICAgLyogUGFyc2UgdGhlIGxpc3Qgb2Ygc2VydmljZXMuICAqLworICAgcmVzdWx0LT5zZXJ2aWNlID0gbnNzX3BhcnNlX3NlcnZpY2VfbGlzdCAobGluZSk7CitAQCAtODE2LDYgKzg5MCw3IEBAIG5zc19uZXdfc2VydmljZSAobmFtZV9kYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKm5hbWUpCisgICByZXR1cm4gKmN1cnJlbnRwOworIH0KKyAjZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisgCisgCisgI2lmIGRlZmluZWQgU0hBUkVEICYmIGRlZmluZWQgVVNFX05TQ0QKK0BAIC04MzQsNiArOTA5LDcgQEAgbnNzX2xvYWRfYWxsX2xpYnJhcmllcyAoY29uc3QgY2hhciAqc2VydmljZSwgY29uc3QgY2hhciAqZGVmKQorIH0KKyAKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBDYWxsZWQgYnkgbnNjZCBhbmQgbnNjZCBhbG9uZS4gICovCisgdm9pZAorIF9fbnNzX2Rpc2FibGVfbnNjZCAodm9pZCAoKmNiKSAoc2l6ZV90LCBzdHJ1Y3QgdHJhY2VkX2ZpbGUgKikpCitAQCAtODU3LDggKzkzMywxMCBAQCBfX25zc19kaXNhYmxlX25zY2QgKHZvaWQgKCpjYikgKHNpemVfdCwgc3RydWN0IHRyYWNlZF9maWxlICopKQorICAgX19uc3Nfbm90X3VzZV9uc2NkX3NlcnZpY2VzID0gLTE7CisgICBfX25zc19ub3RfdXNlX25zY2RfbmV0Z3JvdXAgPSAtMTsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorIHN0YXRpYyB2b2lkCisgZnJlZV9kYXRhYmFzZV9lbnRyaWVzIChuYW1lX2RhdGFiYXNlX2VudHJ5ICplbnRyeSkKKyB7CitAQCAtODcxLDggKzk0OSw4IEBAIGZyZWVfZGF0YWJhc2VfZW50cmllcyAobmFtZV9kYXRhYmFzZV9lbnRyeSAqZW50cnkpCisgCXsKKyAJICBzZXJ2aWNlX3VzZXIgKm9sZHMgPSBzZXJ2aWNlOworIAorLQkgIGlmIChzZXJ2aWNlLT5rbm93biAhPSBOVUxMKQorLQkgICAgX190ZGVzdHJveSAoc2VydmljZS0+a25vd24sIGZyZWUpOworKwkgIGlmIChzZXJ2aWNlLT5rbm93bi50cmVlICE9IE5VTEwpCisrCSAgICBfX3RkZXN0cm95IChzZXJ2aWNlLT5rbm93bi50cmVlLCBmcmVlKTsKKyAKKyAJICBzZXJ2aWNlID0gc2VydmljZS0+bmV4dDsKKyAJICBmcmVlIChvbGRzKTsKK0BAIC05MjYsMyArMTAwNCw0IEBAIGxpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisgCisgICBmcmVlICh0b3ApOworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCitkaWZmIC0tZ2l0IGEvbnNzL25zc3dpdGNoLmggYi9uc3MvbnNzd2l0Y2guaAoraW5kZXggYTUzMThmYS4uMTczMDk3NyAxMDA2NDQKKy0tLSBhL25zcy9uc3N3aXRjaC5oCisrKysgYi9uc3MvbnNzd2l0Y2guaAorQEAgLTY1LDEwICs2NSwyMCBAQCB0eXBlZGVmIHN0cnVjdCBzZXJ2aWNlX3VzZXIKKyAgIGxvb2t1cF9hY3Rpb25zIGFjdGlvbnNbNV07CisgICAvKiBMaW5rIHRvIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkgb2JqZWN0LiAgKi8KKyAgIHNlcnZpY2VfbGlicmFyeSAqbGlicmFyeTsKKy0gIC8qIENvbGxlY3Rpb24gb2Yga25vd24gZnVuY3Rpb25zLiAgKi8KKy0gIHZvaWQgKmtub3duOworKyAgLyogQ29sbGVjdGlvbiBvZiBrbm93biBmdW5jdGlvbnMuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZW5hYmxlZCwgdGhpcyBpcyB0aGUgcm9vdCBvZiBhCisrICAgICAndHNlYXJjaCctc3R5bGUgdHJlZS4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBkaXNhYmxlZCwgdGhpcyBpcyBhbiBhcnJheSBvZgorKyAgICAgcG9pbnRlcnMgdG8ga25vd25fZnVuY3Rpb24gc3RydWN0dXJlcywgTlVMTC10ZXJtaW5hdGVkLiAgKi8KKysgIHVuaW9uCisrICB7CisrICAgIHZvaWQgKnRyZWU7CisrICAgIGNvbnN0IGtub3duX2Z1bmN0aW9uICoqYXJyYXk7CisrICB9IGtub3duOworICAgLyogTmFtZSBvZiB0aGUgc2VydmljZSAoYGZpbGVzJywgYGRucycsIGBuaXMnLCAuLi4pLiAgKi8KKy0gIGNoYXIgbmFtZVswXTsKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisgfSBzZXJ2aWNlX3VzZXI7CisgCisgLyogVG8gYWNjZXNzIHRoZSBhY3Rpb24gYmFzZWQgb24gdGhlIHN0YXR1cyB2YWx1ZSB1c2UgdGhpcyBtYWNyby4gICovCitAQCAtODIsNyArOTIsNyBAQCB0eXBlZGVmIHN0cnVjdCBuYW1lX2RhdGFiYXNlX2VudHJ5CisgICAvKiBMaXN0IG9mIHNlcnZpY2UgdG8gYmUgdXNlZC4gICovCisgICBzZXJ2aWNlX3VzZXIgKnNlcnZpY2U7CisgICAvKiBOYW1lIG9mIHRoZSBkYXRhYmFzZS4gICovCistICBjaGFyIG5hbWVbMF07CisrICBjb25zdCBjaGFyICpuYW1lOworIH0gbmFtZV9kYXRhYmFzZV9lbnRyeTsKKyAKKyAKK2RpZmYgLS1naXQgYS9wb3NpeC9NYWtlZmlsZSBiL3Bvc2l4L01ha2VmaWxlCitpbmRleCAxNWU4ODE4Li42MDllZDAzIDEwMDY0NAorLS0tIGEvcG9zaXgvTWFrZWZpbGUKKysrKyBiL3Bvc2l4L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgUE9TSVggcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBwb3NpeAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTQzLDEzICs0NSwyNCBAQCByb3V0aW5lcyA6PQkJCQkJCQkJICAgICAgXAorIAlnZXRwZ2lkIHNldHBnaWQgZ2V0cGdycCBic2QtZ2V0cGdycCBzZXRwZ3JwIGdldHNpZCBzZXRzaWQJICAgICAgXAorIAlnZXRyZXN1aWQgZ2V0cmVzZ2lkIHNldHJlc3VpZCBzZXRyZXNnaWQJCQkJICAgICAgXAorIAlwYXRoY29uZiBzeXNjb25mIGZwYXRoY29uZgkJCQkJICAgICAgXAorLQlnbG9iIGdsb2I2NCBmbm1hdGNoIHJlZ2V4CQkJCQkgICAgICBcCisrCWdsb2IgZ2xvYjY0IGZubWF0Y2gJCQkJCQkgICAgICBcCisgCWNvbmZzdHIJCQkJCQkJCSAgICAgIFwKKyAJZ2V0b3B0IGdldG9wdDEgZ2V0b3B0X2luaXQJCQkJCSAgICAgIFwKKyAJc2NoZWRfc2V0cCBzY2hlZF9nZXRwIHNjaGVkX3NldHMgc2NoZWRfZ2V0cyBzY2hlZF95aWVsZCBzY2hlZF9wcmltYXggIFwKKyAJc2NoZWRfcHJpbWluIHNjaGVkX3JyX2dpIHNjaGVkX2dldGFmZmluaXR5IHNjaGVkX3NldGFmZmluaXR5CSAgICAgIFwKKy0JZ2V0YWRkcmluZm8gZ2FpX3N0cmVycm9yIHdvcmRleHAJCQkJICAgICAgXAorIAlwcmVhZCBwd3JpdGUgcHJlYWQ2NCBwd3JpdGU2NAkJCQkJICAgICAgXAorKwlwb3NpeF9tYWR2aXNlCQkJCQkJCSAgICAgIFwKKysJZ2V0X2NoaWxkX21heCBzY2hlZF9jcHVjb3VudCBzY2hlZF9jcHVhbGxvYyBzY2hlZF9jcHVmcmVlCisrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGdldGFkZHJpbmZvIGdhaV9zdHJlcnJvcgorKworK2lmZXEgKHksJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSkKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9SRUdFWFApICs9IHJlZ2V4CisrZWxzZQorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkgKz0geHJlZ2V4CisrZW5kaWYKKysKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfU1BBV04pICs9CQkJCQkgICAgICBcCisgCXNwYXduX2ZhY3Rpb25faW5pdCBzcGF3bl9mYWN0aW9uX2Rlc3Ryb3kgc3Bhd25fZmFjdGlvbl9hZGRjbG9zZQkgICAgICBcCisgCXNwYXduX2ZhY3Rpb25fYWRkb3BlbiBzcGF3bl9mYWN0aW9uX2FkZGR1cDIJCQkgICAgICBcCisgCXNwYXduYXR0cl9pbml0IHNwYXduYXR0cl9kZXN0cm95CQkJCSAgICAgIFwKK0BAIC02MSwzNyArNzQsNTQgQEAgcm91dGluZXMgOj0JCQkJCQkJCSAgICAgIFwKKyAJcG9zaXhfbWFkdmlzZQkJCQkJCQkgICAgICBcCisgCWdldF9jaGlsZF9tYXggc2NoZWRfY3B1Y291bnQgc2NoZWRfY3B1YWxsb2Mgc2NoZWRfY3B1ZnJlZQorIAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19XT1JERVhQKSArPSB3b3JkZXhwCisrCisgYXV4CQk6PSBpbml0LXBvc2l4IGVudmlyb24KKy10ZXN0cwkJOj0gdHN0Z2V0b3B0IHRlc3Rmbm0gcnVudGVzdHMgcnVucHRlc3RzCSAgICAgXAorK3Rlc3RzCQk6PSB0c3RnZXRvcHQgdGVzdGZubSBydW50ZXN0cyBcCisgCQkgICB0c3QtcHJlYWR3cml0ZSB0c3QtcHJlYWR3cml0ZTY0IHRlc3QtdmZvcmsgcmVnZXhidWcxIFwKKy0JCSAgIHRzdC1tbWFwIHRzdC1nZXRhZGRyaW5mbyB0c3QtdHJ1bmNhdGUgXAorLQkJICAgdHN0LXRydW5jYXRlNjQgdHN0LWZvcmsgdHN0LWZubWF0Y2ggdHN0LXJlZ2V4bG9jIHRzdC1kaXIgXAorLQkJICAgdHN0LWNobW9kIGJ1Zy1yZWdleDEgYnVnLXJlZ2V4MiBidWctcmVnZXgzIGJ1Zy1yZWdleDQgXAorLQkJICAgdHN0LWdudWdsb2IgdHN0LXJlZ2V4IGJ1Zy1yZWdleDUgYnVnLXJlZ2V4NiBidWctcmVnZXg3IFwKKy0JCSAgIGJ1Zy1yZWdleDggYnVnLXJlZ2V4OSBidWctcmVnZXgxMCBidWctcmVnZXgxMSBidWctcmVnZXgxMiBcCistCQkgICBidWctcmVnZXgxMyBidWctcmVnZXgxNCBidWctcmVnZXgxNSBidWctcmVnZXgxNiBcCistCQkgICBidWctcmVnZXgxNyBidWctcmVnZXgxOCBidWctcmVnZXgxOSBidWctcmVnZXgyMCBcCistCQkgICBidWctcmVnZXgyMSBidWctcmVnZXgyMiBidWctcmVnZXgyMyBidWctcmVnZXgyNCBcCistCQkgICBidWctcmVnZXgyNSBidWctcmVnZXgyNiBidWctcmVnZXgyNyBidWctcmVnZXgyOCBcCisrCQkgICB0c3QtbW1hcCB0c3QtdHJ1bmNhdGUgXAorKwkJICAgdHN0LXRydW5jYXRlNjQgdHN0LWZvcmsgdHN0LWRpciBcCisrCQkgICB0c3QtY2htb2QgYnVnLXJlZ2V4MiBidWctcmVnZXgzIGJ1Zy1yZWdleDQgXAorKwkJICAgdHN0LWdudWdsb2IgYnVnLXJlZ2V4NiBidWctcmVnZXg3IFwKKysJCSAgIGJ1Zy1yZWdleDggYnVnLXJlZ2V4OSBidWctcmVnZXgxMCBidWctcmVnZXgxMiBcCisrCQkgICBidWctcmVnZXgxNCBidWctcmVnZXgxNSBcCisrCQkgICBidWctcmVnZXgyMSBidWctcmVnZXgyNCBcCisrCQkgICBidWctcmVnZXgyNyBidWctcmVnZXgyOCBcCisgCQkgICBidWctcmVnZXgyOSBidWctcmVnZXgzMCBidWctcmVnZXgzMSBidWctcmVnZXgzMiBcCistCQkgICBidWctcmVnZXgzMyB0c3QtbmljZSB0c3QtbmFub3NsZWVwIHRzdC1yZWdleDIgXAorLQkJICAgdHJhbnNidWcgdHN0LXJ4c3BlbmNlciB0c3QtcGNyZSB0c3QtYm9vc3QgXAorLQkJICAgYnVnLWdhMSB0c3QtdmZvcmsxIHRzdC12Zm9yazIgdHN0LXZmb3JrMyB0c3Qtd2FpdGlkIFwKKy0JCSAgIHRzdC1nZXRhZGRyaW5mbzIgYnVnLWdsb2IxIGJ1Zy1nbG9iMiBidWctZ2xvYjMgdHN0LXN5c2NvbmYgXAorKwkJICAgdHN0LW5pY2UgdHN0LW5hbm9zbGVlcCBcCisrCQkgICB0cmFuc2J1ZyBcCisrCQkgICB0c3QtdmZvcmsxIHRzdC12Zm9yazIgdHN0LXZmb3JrMyB0c3Qtd2FpdGlkIFwKKysJCSAgIGJ1Zy1nbG9iMSBidWctZ2xvYjIgYnVnLWdsb2IzIHRzdC1zeXNjb25mIFwKKyAJCSAgIHRzdC1leGVjdnAxIHRzdC1leGVjdnAyIHRzdC1leGVjbHAxIHRzdC1leGVjbHAyIFwKKyAJCSAgIHRzdC1leGVjdjEgdHN0LWV4ZWN2MiB0c3QtZXhlY2wxIHRzdC1leGVjbDIgXAorIAkJICAgdHN0LWV4ZWN2ZTEgdHN0LWV4ZWN2ZTIgdHN0LWV4ZWNsZTEgdHN0LWV4ZWNsZTIgXAorLQkJICAgdHN0LWV4ZWN2cDMgdHN0LWV4ZWN2cDQgdHN0LXJmYzM0ODQgdHN0LXJmYzM0ODQtMiBcCistCQkgICB0c3QtcmZjMzQ4NC0zIFwKKy0JCSAgIHRzdC1nZXRhZGRyaW5mbzMgdHN0LWZubWF0Y2gyIHRzdC1jcHVjb3VudCB0c3QtY3B1c2V0IFwKKysJCSAgIHRzdC1leGVjdnAzIHRzdC1leGVjdnA0IFwKKysJCSAgIHRzdC1mbm1hdGNoMiB0c3QtY3B1Y291bnQgdHN0LWNwdXNldCBcCisgCQkgICBidWctZ2V0b3B0MSBidWctZ2V0b3B0MiBidWctZ2V0b3B0MyBidWctZ2V0b3B0NCBcCisgCQkgICBidWctZ2V0b3B0NSB0c3QtZ2V0b3B0X2xvbmcxIGJ1Zy1yZWdleDM0IGJ1Zy1yZWdleDM1IFwKKyAJCSAgIHRzdC1wYXRoY29uZiB0c3QtZ2V0YWRkcmluZm80IHRzdC1yeHNwZW5jZXItbm8tdXRmOCBcCisgCQkgICB0c3QtZm5tYXRjaDMgYnVnLXJlZ2V4MzYgdHN0LWdldGFkZHJpbmZvNQorLXh0ZXN0cwkJOj0gYnVnLWdhMgorKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gdHN0LWZubWF0Y2ggdHN0LXJlZ2V4bG9jIGJ1Zy1yZWdleDEgYnVnLXJlZ2V4NSBcCisrCQkgICBidWctcmVnZXgyMyBidWctcmVnZXgyNSBidWctcmVnZXgzMiBidWctcmVnZXgzMworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCQkrPSB0c3QtZ2V0YWRkcmluZm8gYnVnLWdhMSB0c3QtZ2V0YWRkcmluZm8yIFwKKysJCSAgIHRzdC1yZmMzNDg0IHRzdC1yZmMzNDg0LTIgdHN0LXJmYzM0ODQtMyB0c3QtZ2V0YWRkcmluZm8zCisrdGVzdHMtJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSBcCisrCQkrPSBydW5wdGVzdHMgYnVnLXJlZ2V4MTEgYnVnLXJlZ2V4MTMgYnVnLXJlZ2V4MTYgXAorKwkJICAgdHN0LXJlZ2V4MiB0c3QtcnhzcGVuY2VyIHRzdC1wY3JlIHRzdC1ib29zdAorK2lmZXEgKHl5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpKQorK3Rlc3RzCQkrPSB0c3QtcmVnZXggYnVnLXJlZ2V4MTcgYnVnLXJlZ2V4MTggYnVnLXJlZ2V4MTkgYnVnLXJlZ2V4MjAgXAorKwkJICAgYnVnLXJlZ2V4MjIgYnVnLXJlZ2V4MjYKKytlbmRpZgorK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gYnVnLWdhMgorKworIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdC1zcmNzCTo9IGdsb2J0ZXN0CistdGVzdHMgICAgICAgICAgICs9IHdvcmRleHAtdGVzdCB0c3QtZXhlYyB0c3Qtc3Bhd24KKyt0ZXN0cwkJKz0gdHN0LWV4ZWMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1BBV04pICs9IHRzdC1zcGF3bgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19XT1JERVhQKSArPSB3b3JkZXhwLXRlc3QKKyBlbmRpZgorIHRlc3RzLXN0YXRpYwk9IHRzdC1leGVjLXN0YXRpYyB0c3Qtc3Bhd24tc3RhdGljCisgdGVzdHMJCSs9ICQodGVzdHMtc3RhdGljKQorQEAgLTExNyw3ICsxNDcsMTAgQEAgZ2VuZXJhdGVkICs9ICQoYWRkcHJlZml4IHdvcmRleHAtdGVzdC1yZXN1bHQsIDEgMiAzIDQgNSA2IDcgOCA5IDEwKSBcCisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorLXRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZ2xvYnRlc3Qub3V0ICQob2JqcGZ4KXdvcmRleHAtdHN0Lm91dAorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpZ2xvYnRlc3Qub3V0CisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfV09SREVYUCkpCisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl3b3JkZXhwLXRzdC5vdXQKKytlbmRpZgorIGVuZGlmCisgZW5kaWYKKyAKK0BAIC0xMjUsMTIgKzE1OCwxNiBAQCBlbmRpZgorICMgWFhYIFBsZWFzZSBub3RlIHRoYXQgZm9yIG5vdyB3ZSBpZ25vcmUgdGhlIHJlc3VsdCBvZiB0aGlzIHRlc3QuCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClhbm5leGMub3V0CisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKy10ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1yZWdleDItbWVtLm91dCAkKG9ianBmeClidWctcmVnZXgxNC1tZW0ub3V0IFwKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1yZWdleDItbWVtLm91dCBcCisgCQkgJChvYmpwZngpYnVnLXJlZ2V4MjEtbWVtLm91dCAkKG9ianBmeClidWctcmVnZXgzMS1tZW0ub3V0IFwKKy0JCSAkKG9ianBmeCl0c3QtcnhzcGVuY2VyLW5vLXV0ZjgtbWVtLm91dCAkKG9ianBmeCl0c3QtcGNyZS1tZW0ub3V0IFwKKy0JCSAkKG9ianBmeCl0c3QtYm9vc3QtbWVtLm91dCAkKG9ianBmeCl0c3QtZ2V0Y29uZi5vdXQgXAorKwkJICQob2JqcGZ4KXRzdC1nZXRjb25mLm91dCBcCisgCQkgJChvYmpwZngpYnVnLWdsb2IyLW1lbS5vdXQgJChvYmpwZngpdHN0LXZmb3JrMy1tZW0ub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtZm5tYXRjaC1tZW0ub3V0ICQob2JqcGZ4KWJ1Zy1yZWdleDM2LW1lbS5vdXQKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykpCisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctcmVnZXgxNC1tZW0ub3V0ICQob2JqcGZ4KXRzdC1yeHNwZW5jZXItbm8tdXRmOC1tZW0ub3V0IFwKKysgIAkJICQob2JqcGZ4KXRzdC1wY3JlLW1lbS5vdXQgJChvYmpwZngpdHN0LWJvb3N0LW1lbS5vdXQKKytlbmRpZgorKworIHh0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWJ1Zy1nYTItbWVtLm91dAorIGVuZGlmCisgCitAQCAtMTQzLDYgKzE4MCw4IEBAICQob2JqcGZ4KWdsb2J0ZXN0Lm91dDogZ2xvYnRlc3Quc2ggJChvYmpwZngpZ2xvYnRlc3QKKyAJJChTSEVMTCkgJDwgJChjb21tb24tb2JqcGZ4KSAnJCh0ZXN0LXZpYS1ydGxkLXByZWZpeCknIFwKKyAJCSckKHRlc3QtcHJvZ3JhbS1wcmVmaXgpJyAnJCh0ZXN0LXdyYXBwZXItZW52KSc7IFwKKyAJJChldmFsdWF0ZS10ZXN0KQorK0xETElCUy1nbG9idGVzdCArPSAkKHNoZWxsIGNhdCAkKGNvbW1vbi1vYmpwZngpbnNzL2ZpeGVkLW5zc3dpdGNoLWxpYnMpCisrCisgJChvYmpwZngpd29yZGV4cC10c3Qub3V0OiB3b3JkZXhwLXRzdC5zaCAkKG9ianBmeCl3b3JkZXhwLXRlc3QKKyAJJChTSEVMTCkgJDwgJChjb21tb24tb2JqcGZ4KSAnJCh0ZXN0LXByb2dyYW0tcHJlZml4LWJlZm9yZS1lbnYpJyBcCisgCQkgJyQocnVuLXByb2dyYW0tZW52KScgJyQodGVzdC1wcm9ncmFtLXByZWZpeC1hZnRlci1lbnYpJzsgXAorQEAgLTIwNSw3ICsyNDQsMTAgQEAgdHN0LWRpci1BUkdTID0gYHB3ZGAgYGNkICQoY29tbW9uLW9iamRpcikvJChzdWJkaXIpOyBwd2RgIGBjZCAkKGNvbW1vbi1vYmpkaXIpOworIHRzdC1jaG1vZC1BUkdTID0gJChvYmpkaXIpCisgdHN0LXZmb3JrMy1BUkdTID0gLS10ZXN0LWRpcj0kKG9ianBmeCkKKyAKKy10c3QtcnhzcGVuY2VyLUFSR1MgPSAtLXV0ZjggcnhzcGVuY2VyL3Rlc3RzCisrdHN0LXJ4c3BlbmNlci1BUkdTID0gcnhzcGVuY2VyL3Rlc3RzCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorK3RzdC1yeHNwZW5jZXItQVJHUyArPSAtLXV0ZjgKKytlbmRpZgorIHRzdC1yeHNwZW5jZXItbm8tdXRmOC1BUkdTID0gcnhzcGVuY2VyL3Rlc3RzCisgdHN0LXBjcmUtQVJHUyA9IFBDUkUudGVzdHMKKyB0c3QtYm9vc3QtQVJHUyA9IEJPT1NULnRlc3RzCitkaWZmIC0tZ2l0IGEvcG9zaXgvYnVnLXJlZ2V4MS5jIGIvcG9zaXgvYnVnLXJlZ2V4MS5jCitpbmRleCAzOGViNTQzLi4xN2NkMWEwIDEwMDY0NAorLS0tIGEvcG9zaXgvYnVnLXJlZ2V4MS5jCisrKysgYi9wb3NpeC9idWctcmVnZXgxLmMKK0BAIC00LDYgKzQsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8cmVnZXguaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBpbnQKKyBtYWluICh2b2lkKQorQEAgLTE3LDcgKzE4LDkgQEAgbWFpbiAodm9pZCkKKyAgIG1lbXNldCAoJnJlZ2V4LCAnXDAnLCBzaXplb2YgKHJlZ2V4KSk7CisgCisgICBzZXRsb2NhbGUgKExDX0FMTCwgImRlX0RFLklTTy04ODU5LTEiKTsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgZndpZGUgKHN0ZG91dCwgLTEpOworKyNlbmRpZgorIAorICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQIHwgUkVfREVCVUcpOworIAorZGlmZiAtLWdpdCBhL3Bvc2l4L2J1Zy1yZWdleDYuYyBiL3Bvc2l4L2J1Zy1yZWdleDYuYworaW5kZXggZWZjYzg5MC4uM2IyNzBjNyAxMDA2NDQKKy0tLSBhL3Bvc2l4L2J1Zy1yZWdleDYuYworKysrIGIvcG9zaXgvYnVnLXJlZ2V4Ni5jCitAQCAtMjIsNiArMjIsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHJlZ2V4Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgaW50CitAQCAtMzAsNyArMzEsMTIgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIHJlZ2V4X3QgcmU7CisgICByZWdtYXRjaF90IG1hdFsxMF07CisgICBpbnQgaSwgaiwgcmV0ID0gMDsKKy0gIGNvbnN0IGNoYXIgKmxvY2FsZXNbXSA9IHsgIkMiLCAiZGVfREUuVVRGLTgiIH07CisrICBjb25zdCBjaGFyICpsb2NhbGVzW10gPSB7CisrICAgICJDIiwKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICJkZV9ERS5VVEYtOCIKKysjZW5kaWYKKysgIH07CisgICBjb25zdCBjaGFyICpzdHJpbmcgPSAiaHR0cDovL3d3dy5yZWdleC5jb20vcGF0dGVybi9tYXRjaGluZy5odG1sI2ludHJvIjsKKyAgIHJlZ21hdGNoX3QgZXhwZWN0WzEwXSA9IHsKKyAgICAgeyAwLCA0OCB9LCB7IDAsIDUgfSwgeyAwLCA0IH0sIHsgNSwgMjAgfSwgeyA3LCAyMCB9LCB7IDIwLCA0MiB9LAorZGlmZiAtLWdpdCBhL3Bvc2l4L2ZubWF0Y2guYyBiL3Bvc2l4L2ZubWF0Y2guYworaW5kZXggZmQ4NWVmYS4uMDFjYzlmZSAxMDA2NDQKKy0tLSBhL3Bvc2l4L2ZubWF0Y2guYworKysrIGIvcG9zaXgvZm5tYXRjaC5jCitAQCAtMzAsNiArMzAsMTAgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmIGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKyAjIGluY2x1ZGUgPHN0ZGxpYi5oPgorICNlbmRpZgorQEAgLTEzMSw3ICsxMzUsNyBAQCBleHRlcm4gaW50IGZubWF0Y2ggKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGZsYWdzKTsKKyAjICAgZGVmaW5lIElTV0NUWVBFKFdDLCBXVCkJaXN3Y3R5cGUgKFdDLCBXVCkKKyAjICBlbmRpZgorIAorLSMgIGlmIChIQVZFX01CU1RBVEVfVCAmJiBIQVZFX01CU1JUT1dDUykgfHwgX0xJQkMKKysjICBpZiAoSEFWRV9NQlNUQVRFX1QgJiYgSEFWRV9NQlNSVE9XQ1MgJiYgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKQorIC8qIEluIHRoaXMgY2FzZSB3ZSBhcmUgaW1wbGVtZW50aW5nIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGhhbmRsaW5nLiAgKi8KKyAjICAgZGVmaW5lIEhBTkRMRV9NVUxUSUJZVEUJMQorICMgIGVuZGlmCitkaWZmIC0tZ2l0IGEvcG9zaXgvZm5tYXRjaF9sb29wLmMgYi9wb3NpeC9mbm1hdGNoX2xvb3AuYworaW5kZXggZjQ2YzlkZi4uNzRlMTc1NCAxMDA2NDQKKy0tLSBhL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jCisrKysgYi9wb3NpeC9mbm1hdGNoX2xvb3AuYworQEAgLTE1LDYgKzE1LDggQEAKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgc3RydWN0IFNUUlVDVAorQEAgLTU0LDEwICs1NiwxNSBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAgIGNvbnN0IGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgY2hhciAqKQorICAgICBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworICMgZWxzZQorKyMgIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgY29uc3QgVUNIQVIgKmNvbGxzZXEgPSAoY29uc3QgVUNIQVIgKikKKyAgICAgX05MX0NVUlJFTlQoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKy0jIGVuZGlmCistI2VuZGlmCisrIyAgIGRlZmluZSBDT0xMU0VRX0JZVEVfTE9PS1VQKGl4KSAoY29sbHNlcVsoaXgpXSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBDT0xMU0VRX0JZVEVfTE9PS1VQKGl4KSAoaXgpCisrIyAgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisrIyBlbmRpZiAvKiBXSURFX0NIQVJfVkVSU0lPTiAqLworKyNlbmRpZiAvKiBfTElCQyAqLworIAorICAgd2hpbGUgKChjID0gKnArKykgIT0gTCgnXDAnKSkKKyAgICAgeworQEAgLTI3Nyw3ICsyODQsNyBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCSAgICAvKiBMZWF2ZSByb29tIGZvciB0aGUgbnVsbC4gICovCisgCQkgICAgQ0hBUiBzdHJbQ0hBUl9DTEFTU19NQVhfTEVOR1RIICsgMV07CisgCQkgICAgc2l6ZV90IGMxID0gMDsKKy0jaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorKyNpZiBkZWZpbmVkIF9MSUJDID8gX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiA6IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisgCQkgICAgd2N0eXBlX3Qgd3Q7CisgI2VuZGlmCisgCQkgICAgY29uc3QgQ0hBUiAqc3RhcnRwID0gcDsKK0BAIC0zMDcsNyArMzE0LDcgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkgICAgICB9CisgCQkgICAgc3RyW2MxXSA9IEwoJ1wwJyk7CisgCistI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKysjaWYgZGVmaW5lZCBfTElCQyA/IF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgOiAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorIAkJICAgIHd0ID0gSVNfQ0hBUl9DTEFTUyAoc3RyKTsKKyAJCSAgICBpZiAod3QgPT0gMCkKKyAJCSAgICAgIC8qIEludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICAqLworQEAgLTY4MCw4ICs2ODcsMTAgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkJZWxzZQorIAkJCSAgbGNvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2VxLCBjb2xkKTsKKyAjIGVsc2UKKy0JCQlmY29sbHNlcSA9IGNvbGxzZXFbZm5dOworLQkJCWxjb2xsc2VxID0gaXNfc2VxdmFsID8gY29sZCA6IGNvbGxzZXFbKFVDSEFSKSBjb2xkXTsKKysJCQlmY29sbHNlcSA9IENPTExTRVFfQllURV9MT09LVVAgKGZuKTsKKysJCQlsY29sbHNlcSA9IChpc19zZXF2YWwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbGQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTExTRVFfQllURV9MT09LVVAgKChVQ0hBUikgY29sZCkpOworICMgZW5kaWYKKyAKKyAJCQlpc19zZXF2YWwgPSAwOworQEAgLTg1Nyw3ICs4NjYsNyBAQCBGQ1QgKHBhdHRlcm4sIHN0cmluZywgc3RyaW5nX2VuZCwgbm9fbGVhZGluZ19wZXJpb2QsIGZsYWdzLCBlbmRzLCBhbGxvY2FfdXNlZCkKKyAJCQkJICAgIGdvdG8gbWF0Y2hlZDsKKyAJCQkJICB9CisgIyBlbHNlCistCQkJCWhjb2xsc2VxID0gY29sbHNlcVtjZW5kXTsKKysJCQkJaGNvbGxzZXEgPSBDT0xMU0VRX0JZVEVfTE9PS1VQIChjZW5kKTsKKyAjIGVuZGlmCisgCQkJICAgICAgfQorIAorZGlmZiAtLWdpdCBhL3Bvc2l4L2dsb2IuYyBiL3Bvc2l4L2dsb2IuYworaW5kZXggZDY1ZTU1ZC4uMWFjMDBhMSAxMDA2NDQKKy0tLSBhL3Bvc2l4L2dsb2IuYworKysrIGIvcG9zaXgvZ2xvYi5jCitAQCAtMjUsNiArMjUsOSBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorIAorIC8qIE91dGNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGZvciBwcm9kdWN0aW9uIHF1YWxpdHkgY29kZS4gICovCisgLyogI2RlZmluZSBOREVCVUcgMSAqLworQEAgLTYwNyw2ICs2MTAsNyBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCSAgaWYgKGhvbWVfZGlyID09IE5VTEwgfHwgaG9tZV9kaXJbMF0gPT0gJ1wwJykKKyAJICAgIGhvbWVfZGlyID0gImM6L3VzZXJzL2RlZmF1bHQiOyAvKiBwb29yIGRlZmF1bHQgKi8KKyAjICBlbHNlCisrIyAgIGlmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0dFVExPR0lOCisgCSAgaWYgKGhvbWVfZGlyID09IE5VTEwgfHwgaG9tZV9kaXJbMF0gPT0gJ1wwJykKKyAJICAgIHsKKyAJICAgICAgaW50IHN1Y2Nlc3M7CitAQCAtNjIzLDE5ICs2MjcsMTkgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkgICAgICBpZiAoc3VjY2VzcykKKyAJCXsKKyAJCSAgc3RydWN0IHBhc3N3ZCAqcDsKKy0jICAgaWYgZGVmaW5lZCBIQVZFX0dFVFBXTkFNX1IgfHwgZGVmaW5lZCBfTElCQworKyMgICAgaWYgZGVmaW5lZCBIQVZFX0dFVFBXTkFNX1IgfHwgZGVmaW5lZCBfTElCQworIAkJICBsb25nIGludCBwd2J1ZmxlbiA9IEdFVFBXX1JfU0laRV9NQVggKCk7CisgCQkgIGNoYXIgKnB3dG1wYnVmOworIAkJICBzdHJ1Y3QgcGFzc3dkIHB3YnVmOworIAkJICBpbnQgbWFsbG9jX3B3dG1wYnVmID0gMDsKKyAJCSAgaW50IHNhdmUgPSBlcnJubzsKKyAKKy0jICAgIGlmbmRlZiBfTElCQworKyMgICAgIGlmbmRlZiBfTElCQworIAkJICBpZiAocHdidWZsZW4gPT0gLTEpCisgCQkgICAgLyogYHN5c2NvbmYnIGRvZXMgbm90IHN1cHBvcnQgX1NDX0dFVFBXX1JfU0laRV9NQVguCisgCQkgICAgICAgVHJ5IGEgbW9kZXJhdGUgdmFsdWUuICAqLworIAkJICAgIHB3YnVmbGVuID0gMTAyNDsKKy0jICAgIGVuZGlmCisrIyAgICAgZW5kaWYKKyAJCSAgaWYgKF9fbGliY191c2VfYWxsb2NhIChhbGxvY2FfdXNlZCArIHB3YnVmbGVuKSkKKyAJCSAgICBwd3RtcGJ1ZiA9IGFsbG9jYV9hY2NvdW50IChwd2J1ZmxlbiwgYWxsb2NhX3VzZWQpOworIAkJICBlbHNlCitAQCAtNjgyLDkgKzY4Niw5IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJCQl9CisgCQkgICAgICBfX3NldF9lcnJubyAoc2F2ZSk7CisgCQkgICAgfQorLSMgICBlbHNlCisrIyAgICBlbHNlCisgCQkgIHAgPSBnZXRwd25hbSAobmFtZSk7CistIyAgIGVuZGlmCisrIyAgICBlbmRpZgorIAkJICBpZiAocCAhPSBOVUxMKQorIAkJICAgIHsKKyAJCSAgICAgIGlmICghbWFsbG9jX3B3dG1wYnVmKQorQEAgLTcxMyw2ICs3MTcsNyBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCQkgICAgfQorIAkJfQorIAkgICAgfQorKyMgICBlbmRpZiAvKiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19HRVRMT0dJTiAqLworIAkgIGlmIChob21lX2RpciA9PSBOVUxMIHx8IGhvbWVfZGlyWzBdID09ICdcMCcpCisgCSAgICB7CisgCSAgICAgIGlmIChmbGFncyAmIEdMT0JfVElMREVfQ0hFQ0spCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnY29tcC5jIGIvcG9zaXgvcmVnY29tcC5jCitpbmRleCBiZjhhYTE2Li42YTQxMjUxIDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnY29tcC5jCisrKysgYi9wb3NpeC9yZWdjb21wLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CitAQCAtMzA5LDcgKzMxMCw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIHsKKyAgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgYnVmcC0+YnVmZmVyOworICAgaW50IG5vZGVfY250OworLSAgaW50IGljYXNlID0gKGRmYS0+bWJfY3VyX21heCA9PSAxICYmIChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkpOworKyAgaW50IGljYXNlID0gKGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDEgJiYgKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSk7CisgICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBpbml0X3N0YXRlLT5ub2Rlcy5uZWxlbTsgKytub2RlX2NudCkKKyAgICAgeworICAgICAgIGludCBub2RlID0gaW5pdF9zdGF0ZS0+bm9kZXMuZWxlbXNbbm9kZV9jbnRdOworQEAgLTMxOSw5ICszMjAsOSBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJeworIAkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyk7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCSAgICB7CistCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFsbG9jYSAoZGZhLT5tYl9jdXJfbWF4KSwgKnA7CisrCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGFsbG9jYSAoZGZhX21iX2N1cl9tYXggKGRmYSkpLCAqcDsKKyAJICAgICAgd2NoYXJfdCB3YzsKKyAJICAgICAgbWJzdGF0ZV90IHN0YXRlOworIAorQEAgLTM1Miw3ICszNTMsMTEgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCQkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgY2gpOworIAkgICAgfQorIAl9CistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrCisrICAgICAgLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGUgY3VycmVudAorKyAgICAgICAgIGxvY2FsZSBpcyBhbHdheXMgQywgd2hpY2ggaGFzIG5vIHJ1bGVzIGFuZCBubyBtdWx0aS1ieXRlCisrICAgICAgICAgY2hhcmFjdGVycy4gICovCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisgCXsKKyAJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CitAQCAtMzgwLDcgKzM4NSw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkgICAgIGkuZS4gd2hlcmUgd2Ugd291bGQgbm90IGZpbmQgYW4gaW52YWxpZCBzZXF1ZW5jZS4gIFRoaXMgb25seQorIAkgICAgIGFwcGxpZXMgdG8gbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzOyBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVyCisgCSAgICAgc2V0cywgdGhlIFNJTVBMRV9CUkFDS0VUIGFnYWluIHN1ZmZpY2VzLiAgKi8KKy0JICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMQorKwkgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEKKyAJICAgICAgJiYgKGNzZXQtPm5jaGFyX2NsYXNzZXMgfHwgY3NldC0+bm9uX21hdGNoIHx8IGNzZXQtPm5yYW5nZXMKKyAjIGlmZGVmIF9MSUJDCisgCQkgIHx8IGNzZXQtPm5lcXVpdl9jbGFzc2VzCitAQCAtNDA4LDcgKzQxMyw3IEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworIAkJICBpZiAoX193Y3J0b21iIChidWYsIGNzZXQtPm1iY2hhcnNbaV0sICZzdGF0ZSkgIT0gKHNpemVfdCkgLTEpCisgCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKy0JCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkJICAgIHsKKyAJCSAgICAgIGlmIChfX3djcnRvbWIgKGJ1ZiwgX190b3dsb3dlciAoY3NldC0+bWJjaGFyc1tpXSksICZzdGF0ZSkKKyAJCQkgICE9IChzaXplX3QpIC0xKQorQEAgLTQxNyw3ICs0MjIsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJCX0KKyAJICAgIH0KKyAJfQorLSNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1BFUklPRAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorIAkgICAgICAgfHwgdHlwZSA9PSBPUF9VVEY4X1BFUklPRAorQEAgLTg2MCwxMSArODY1LDE1IEBAIGluaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbikKKyAKKyAgIGRmYS0+bWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisgI2lmZGVmIF9MSUJDCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID09IDYKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA9PSA2CisgICAgICAgJiYgc3RyY21wIChfTkxfQ1VSUkVOVCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUpLCAiVVRGLTgiKSA9PSAwKQorICAgICBkZmEtPmlzX3V0ZjggPSAxOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBkZmEtPm1hcF9ub3Rhc2NpaSA9IChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX01BUF9UT19OT05BU0NJSSkKKyAJCSAgICAgICAhPSAwKTsKKysjIGVsc2UKKysgIGRmYS0+bWFwX25vdGFzY2lpID0gMDsKKysjIGVuZGlmCisgI2Vsc2UKKyAjIGlmZGVmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgY29kZXNldF9uYW1lID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworQEAgLTg5MCw3ICs4OTksNyBAQCBpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pCisgI2VuZGlmCisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIHsKKyAgICAgICBpZiAoZGZhLT5pc191dGY4KQorIAlkZmEtPnNiX2NoYXIgPSAocmVfYml0c2V0X3B0cl90KSB1dGY4X3NiX21hcDsKK0BAIC0xNzg4LDcgKzE3OTcsNyBAQCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorICAgdG9rZW4tPndvcmRfY2hhciA9IDA7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICB0b2tlbi0+bWJfcGFydGlhbCA9IDA7CistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEgJiYKKyAgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICAgeworICAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworQEAgLTE4MDksNyArMTgxOCw3IEBAIHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEpCisgCXsKKyAJICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LAorIAkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICsgMSk7CitAQCAtMTkyMyw3ICsxOTMyLDcgQEAgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAKKyAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSkKKyAgICAgeworICAgICAgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpOworICAgICAgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XSURFX1dPUkRfQ0hBUiAod2MpICE9IDA7CitAQCAtMjAyMyw3ICsyMDMyLDcgQEAgcGVla190b2tlbl9icmFja2V0IChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorICAgdG9rZW4tPm9wci5jID0gYzsKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSAmJgorICAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgICB7CisgICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CitAQCAtMjI0Niw3ICsyMjU1LDcgQEAgcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAl7CisgCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHApCisgCQkgJiYgIXJlX3N0cmluZ19maXJzdF9ieXRlIChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKSkKK0BAIC0yMzg0LDcgKzIzOTMsNyBAQCBwYXJzZV9leHByZXNzaW9uIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICAqZXJyID0gUkVHX0VTUEFDRTsKKyAJICByZXR1cm4gTlVMTDsKKyAJfQorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCWRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgIGJyZWFrOworICAgICBjYXNlIE9QX1dPUkQ6CitAQCAtMjY5MCw3ICsyNjk5LDcgQEAgYnVpbGRfcmFuZ2VfZXhwIChiaXRzZXRfdCBzYmNzZXQsIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLAorICAgICAgICBIb3dldmVyLCBmb3IgIV9MSUJDIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzOiBpZiB0aGUKKyAgICAgICAgY2hhcmFjdGVyIHNldCBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQKKyAgICAgICAgdGhhdCB3ZSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gIHBhcnNlX2JyYWNrZXRfZXhwIHBhc3NlcworLSAgICAgICBubyBNQkNTRVQgaWYgZGZhLT5tYl9jdXJfbWF4ID09IDEuICAqLworKyAgICAgICBubyBNQkNTRVQgaWYgZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gMS4gICovCisgICAgIGlmIChtYmNzZXQpCisgICAgICAgeworIAkvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCitAQCAtMjc4Niw3ICsyNzk1LDEzIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJCSAgIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycikKKyB7CisgI2lmZGVmIF9MSUJDCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcW1iOworKyMgZGVmaW5lIENPTExTRVFNQl9MT09LVVAoaXgpIChjb2xsc2VxbWJbKGl4KV0pCisrI2Vsc2UKKysjIGRlZmluZSBDT0xMU0VRTUJfTE9PS1VQKGl4KSAoaXgpCisrI2VuZGlmCisrCisgICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7CisgICB1aW50MzJfdCBucnVsZXM7CisgICBpbnQzMl90IHRhYmxlX3NpemU7CitAQCAtMjgzNCwxOCArMjg0OSwyMCBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKyAJICAqLworIAkgIGlmIChucnVsZXMgPT0gMCkKKy0JICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLmNoXTsKKysJICAgIHJldHVybiBDT0xMU0VRTUJfTE9PS1VQIChicl9lbGVtLT5vcHIuY2gpOworIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgd2ludF90IHdjID0gX19idG93YyAoYnJfZWxlbS0+b3ByLmNoKTsKKyAJICAgICAgcmV0dXJuIF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3Yywgd2MpOworIAkgICAgfQorIAl9CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAgIGVsc2UgaWYgKGJyX2VsZW0tPnR5cGUgPT0gTUJfQ0hBUikKKyAJeworIAkgIGlmIChucnVsZXMgIT0gMCkKKyAJICAgIHJldHVybiBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIGJyX2VsZW0tPm9wci53Y2gpOworIAl9CisrI2VuZGlmCisgICAgICAgZWxzZSBpZiAoYnJfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkKKyAJeworIAkgIHNpemVfdCBzeW1fbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopIGJyX2VsZW0tPm9wci5uYW1lKTsKK0BAIC0yODc2LDExICsyODkzLDExIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJCXsKKyAJCSAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYSBzaW5nbGUgYnl0ZQorIAkJICAgICBjaGFyYWN0ZXIuICAqLworLQkJICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKysJCSAgcmV0dXJuIENPTExTRVFNQl9MT09LVVAgKGJyX2VsZW0tPm9wci5uYW1lWzBdKTsKKyAJCX0KKyAJICAgIH0KKyAJICBlbHNlIGlmIChzeW1fbmFtZV9sZW4gPT0gMSkKKy0JICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworKwkgICAgcmV0dXJuIENPTExTRVFNQl9MT09LVVAgKGJyX2VsZW0tPm9wci5uYW1lWzBdKTsKKyAJfQorICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgfQorQEAgLTI5MjAsNyArMjkzNyw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJIEhvd2V2ZXIsIGlmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzLCBhbmQgdGhlIGNoYXJhY3RlciBzZXQKKyAJIGlzIHNpbmdsZSBieXRlLCB0aGUgc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHNldCB0aGF0IHdlCisgCSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gKi8KKy0gICAgICBpZiAobnJ1bGVzID4gMCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJeworIAkgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKyAJICBpZiAoQkUgKCpyYW5nZV9hbGxvYyA9PSBtYmNzZXQtPm5yYW5nZXMsIDApKQorQEAgLTI5NTcsNyArMjk3NCw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorIAkgICovCisgCSAgaWYgKG5ydWxlcyA9PSAwKQorLQkgICAgY2hfY29sbHNlcSA9IGNvbGxzZXFtYltjaF07CisrCSAgICBjaF9jb2xsc2VxID0gQ09MTFNFUU1CX0xPT0tVUCAoY2gpOworIAkgIGVsc2UKKyAJICAgIGNoX2NvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIF9fYnRvd2MgKGNoKSk7CisgCSAgaWYgKHN0YXJ0X2NvbGxzZXEgPD0gY2hfY29sbHNlcSAmJiBjaF9jb2xsc2VxIDw9IGVuZF9jb2xsc2VxKQorQEAgLTMwMzUsNyArMzA1MiwxMCBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgcmVfY2hhcnNldF90ICptYmNzZXQ7CistICBpbnQgY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDAsIG1iY2hhcl9hbGxvYyA9IDA7CisrICBpbnQgY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDA7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgaW50IG1iY2hhcl9hbGxvYyA9IDA7CisrI2VuZGlmCisgICBpbnQgZXF1aXZfY2xhc3NfYWxsb2MgPSAwLCBjaGFyX2NsYXNzX2FsbG9jID0gMDsKKyAjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICBpbnQgbm9uX21hdGNoID0gMDsKK0BAIC0zMDQzLDkgKzMwNjMsMTUgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorICAgaW50IHRva2VuX2xlbjsKKyAgIGludCBmaXJzdF9yb3VuZCA9IDE7CisgI2lmZGVmIF9MSUJDCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgY29sbHNlcW1iID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKyAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisgICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyNlbHNlCisrICAvKiBUaGlzIGlzIHRydWUgd2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBidXQgdGhlCisrICAgICBjb21waWxlciBjYW4ndCBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgbnJ1bGVzID0gMDsKKysjZW5kaWYKKyAgIGlmIChucnVsZXMpCisgICAgIHsKKyAgICAgICAvKgorQEAgLTMxNzUsNyArMzIwMSw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAjZWxzZQorICMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsCistCQkJCSAgZGZhLT5tYl9jdXJfbWF4ID4gMSA/IG1iY3NldCA6IE5VTEwsCisrCQkJCSAgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxID8gbWJjc2V0IDogTlVMTCwKKyAJCQkJICAmcmFuZ2VfYWxsb2MsICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworICMgZWxzZQorIAkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgJnN0YXJ0X2VsZW0sICZlbmRfZWxlbSk7CitAQCAtMzE5MSw3ICszMjE3LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgICAgY2FzZSBTQl9DSEFSOgorIAkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIHN0YXJ0X2VsZW0ub3ByLmNoKTsKKyAJICAgICAgYnJlYWs7CistI2lmZGVmIFJFX0VOQUJMRV9JMThOCisrI2lmIGRlZmluZWQgUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICBjYXNlIE1CX0NIQVI6CisgCSAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICAqLworIAkgICAgICBpZiAoQkUgKG1iY2hhcl9hbGxvYyA9PSBtYmNzZXQtPm5tYmNoYXJzLCAwKSkKK0BAIC0zMjA5LDcgKzMyMzUsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCQl9CisgCSAgICAgIG1iY3NldC0+bWJjaGFyc1ttYmNzZXQtPm5tYmNoYXJzKytdID0gc3RhcnRfZWxlbS5vcHIud2NoOworIAkgICAgICBicmVhazsKKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCSAgICBjYXNlIEVRVUlWX0NMQVNTOgorIAkgICAgICAqZXJyID0gYnVpbGRfZXF1aXZfY2xhc3MgKHNiY3NldCwKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK0BAIC0zMjU5LDExICszMjg1LDExIEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisgCisgICBpZiAobWJjc2V0LT5ubWJjaGFycyB8fCBtYmNzZXQtPm5jb2xsX3N5bXMgfHwgbWJjc2V0LT5uZXF1aXZfY2xhc3NlcworLSAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhLT5tYl9jdXJfbWF4ID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisrICAgICAgfHwgbWJjc2V0LT5ucmFuZ2VzIHx8IChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEgJiYgKG1iY3NldC0+bmNoYXJfY2xhc3NlcworIAkJCQkJCSAgICAgfHwgbWJjc2V0LT5ub25fbWF0Y2gpKSkKKyAgICAgeworICAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworQEAgLTMzMzIsNyArMzM1OCw3IEBAIHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisgCQkgICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIGludCB0b2tlbl9sZW4sIHJlX2RmYV90ICpkZmEsCisgCQkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IGFjY2VwdF9oeXBoZW4pCisgeworLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaW50IGN1cl9jaGFyX3NpemU7CisgICBjdXJfY2hhcl9zaXplID0gcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSk7CisgICBpZiAoY3VyX2NoYXJfc2l6ZSA+IDEpCitAQCAtMzM0Miw3ICszMzY4LDcgQEAgcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKyAgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCBjdXJfY2hhcl9zaXplKTsKKyAgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgIH0KKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBTa2lwIGEgdG9rZW4uICAqLworICAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ09MTF9FTEVNIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFTUworICAgICAgIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fRVFVSVZfQ0xBU1MpCitAQCAtMzQyMiw3ICszNDQ4LDkgQEAgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsCisgYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkKKyAjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgeworLSNpZmRlZiBfTElCQworKyAgLyogV2hlbiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIG9ubHkgdGhlIEMgbG9jYWxlCisrICAgICBpcyBzdXBwb3J0ZWQ7IGl0IGhhcyBubyBjb2xsYXRpb24gcnVsZXMuICAqLworKyNpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgdWludDMyX3QgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgIGlmIChucnVsZXMgIT0gMCkKKyAgICAgeworQEAgLTM0OTIsNyArMzUyMCw3IEBAIGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisgICAgICAgbWJjc2V0LT5lcXVpdl9jbGFzc2VzW21iY3NldC0+bmVxdWl2X2NsYXNzZXMrK10gPSBpZHgxOworICAgICB9CisgICBlbHNlCistI2VuZGlmIC8qIF9MSUJDICovCisrI2VuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICAgICB7CisgICAgICAgaWYgKEJFIChzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpICE9IDEsIDApKQorIAlyZXR1cm4gUkVHX0VDT0xMQVRFOworQEAgLTM1MjYsNyArMzU1NCw3IEBAIGJ1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJpdHNldF90IHNiY3NldCwKKyAgICAgICAmJiAoc3RyY21wIChuYW1lLCAidXBwZXIiKSA9PSAwIHx8IHN0cmNtcCAobmFtZSwgImxvd2VyIikgPT0gMCkpCisgICAgIG5hbWUgPSAiYWxwaGEiOworIAorLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICAgaWYgKEJFICgqY2hhcl9jbGFzc19hbGxvYyA9PSBtYmNzZXQtPm5jaGFyX2NsYXNzZXMsIDApKQorICAgICB7CitAQCAtMzU0Miw3ICszNTcwLDcgQEAgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorICAgICAgICpjaGFyX2NsYXNzX2FsbG9jID0gbmV3X2NoYXJfY2xhc3NfYWxsb2M7CisgICAgIH0KKyAgIG1iY3NldC0+Y2hhcl9jbGFzc2VzW21iY3NldC0+bmNoYXJfY2xhc3NlcysrXSA9IF9fd2N0eXBlIChuYW1lKTsKKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCisgI2RlZmluZSBCVUlMRF9DSEFSQ0xBU1NfTE9PUChjdHlwZV9mdW5jKQlcCisgICBkbyB7CQkJCQkJXAorQEAgLTM2NTMsNyArMzY4MSw3IEBAIGJ1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAvKiBFbnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNiX2NoYXIpOworICNlbmRpZgorIAorQEAgLTM2NjUsNyArMzY5Myw3IEBAIGJ1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisgICAgIGdvdG8gYnVpbGRfd29yZF9vcF9lc3BhY2U7CisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgICAgIHsKKyAgICAgICBiaW5fdHJlZV90ICptYmNfdHJlZTsKKyAgICAgICAvKiBCdWlsZCBhIHRyZWUgZm9yIGNvbXBsZXggYnJhY2tldC4gICovCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXguaCBiL3Bvc2l4L3JlZ2V4LmgKK2luZGV4IDViMTk4MWUuLjI5NDFmOTQgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleC5oCisrKysgYi9wb3NpeC9yZWdleC5oCitAQCAtMjEsNiArMjEsNyBAQAorICNkZWZpbmUgX1JFR0VYX0ggMQorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBBbGxvdyB0aGUgdXNlIGluIEMrKyBjb2RlLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKK0BAIC0xNTYsNiArMTU3LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisgICAgdHJlYXRlZCBhcyAnYVx7MScuICAqLworICMgZGVmaW5lIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIChSRV9ERUJVRyA8PCAxKQorIAorKy8qIEVHTElCQzogT2xkIHJlZ2V4IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlc2UuICAqLworKyMgaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDCisgLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9yZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCisgICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyAjIGRlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKK0BAIC0xNzIsNiArMTc1LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisgLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIG5vX3N1YiB3aWxsIGJlIHNldCB0byAxIGR1cmluZworICAgIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisgIyBkZWZpbmUgUkVfTk9fU1VCIChSRV9DT05URVhUX0lOVkFMSURfRFVQIDw8IDEpCisrIyBlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMgKi8KKyAjZW5kaWYKKyAKKyAvKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKK0BAIC0yMzEsOCArMjM1LDEzIEBAIGV4dGVybiByZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisgICAoUkVfQ0hBUl9DTEFTU0VTIHwgUkVfRE9UX05FV0xJTkUgICAgICB8IFJFX0RPVF9OT1RfTlVMTAkJXAorICAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDCisgI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQkFTSUMJCQkJCQlcCisgICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNIHwgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKysjZWxzZQorKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfQktfUExVU19RTSkKKysjZW5kaWYKKyAKKyAvKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0JBU0lDIG9ubHkgaW4gdGhhdCBSRV9CS19QTFVTX1FNIGJlY29tZXMKKyAgICBSRV9MSU1JVEVEX09QUywgaS5lLiwgXD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKK0BAIC0yOTgsOSArMzA3LDExIEBAIGV4dGVybiByZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisgLyogTGlrZSBSRUdfTk9UQk9MLCBleGNlcHQgZm9yIHRoZSBlbmQtb2YtbGluZS4gICovCisgI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQworIC8qIFVzZSBQTUFUQ0hbMF0gdG8gZGVsaW1pdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VhcmNoIGluIHRoZQorICAgIGJ1ZmZlci4gICovCisgI2RlZmluZSBSRUdfU1RBUlRFTkQgKDEgPDwgMikKKysjZW5kaWYKKyAKKyAKKyAvKiBJZiBhbnkgZXJyb3IgY29kZXMgYXJlIHJlbW92ZWQsIGNoYW5nZWQsIG9yIGFkZGVkLCB1cGRhdGUgdGhlCitkaWZmIC0tZ2l0IGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYyBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMKK2luZGV4IDg1OTdkN2UuLmQ1M2IyYTggMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5jCisrKysgYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5jCitAQCAtNDMsOCArNDMsOCBAQCByZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBpbml0X2xlbiwKKyAgIGludCBpbml0X2J1Zl9sZW47CisgCisgICAvKiBFbnN1cmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBmaXRzIGludG8gdGhlIGJ1ZmZlcnMuICAqLworLSAgaWYgKGluaXRfbGVuIDwgZGZhLT5tYl9jdXJfbWF4KQorLSAgICBpbml0X2xlbiA9IGRmYS0+bWJfY3VyX21heDsKKysgIGlmIChpbml0X2xlbiA8IGRmYV9tYl9jdXJfbWF4IChkZmEpKQorKyAgICBpbml0X2xlbiA9IGRmYV9tYl9jdXJfbWF4IChkZmEpOworICAgaW5pdF9idWZfbGVuID0gKGxlbiArIDEgPCBpbml0X2xlbikgPyBsZW4gKyAxOiBpbml0X2xlbjsKKyAgIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChzdHIsIGxlbiwgcHN0ciwgdHJhbnMsIGljYXNlLCBkZmEpOworIAorQEAgLTU1LDcgKzU1LDcgQEAgcmVfc3RyaW5nX2FsbG9jYXRlIChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgaW5pdF9sZW4sCisgICBwc3RyLT53b3JkX2NoYXIgPSBkZmEtPndvcmRfY2hhcjsKKyAgIHBzdHItPndvcmRfb3BzX3VzZWQgPSBkZmEtPndvcmRfb3BzX3VzZWQ7CisgICBwc3RyLT5tYnMgPSBwc3RyLT5tYnNfYWxsb2NhdGVkID8gcHN0ci0+bWJzIDogKHVuc2lnbmVkIGNoYXIgKikgc3RyOworLSAgcHN0ci0+dmFsaWRfbGVuID0gKHBzdHItPm1ic19hbGxvY2F0ZWQgfHwgZGZhLT5tYl9jdXJfbWF4ID4gMSkgPyAwIDogbGVuOworKyAgcHN0ci0+dmFsaWRfbGVuID0gKHBzdHItPm1ic19hbGxvY2F0ZWQgfHwgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKSA/IDAgOiBsZW47CisgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworICAgcmV0dXJuIFJFR19OT0VSUk9SOworIH0KK0BAIC04Miw3ICs4Miw3IEBAIHJlX3N0cmluZ19jb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisgICBpZiAoaWNhc2UpCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAl7CisgCSAgd2hpbGUgKDEpCisgCSAgICB7CitAQCAtOTEsNyArOTEsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorIAkJcmV0dXJuIHJldDsKKyAJICAgICAgaWYgKHBzdHItPnZhbGlkX3Jhd19sZW4gPj0gbGVuKQorIAkJYnJlYWs7CistCSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYS0+bWJfY3VyX21heCkKKysJICAgICAgaWYgKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+dmFsaWRfbGVuICsgZGZhX21iX2N1cl9tYXggKGRmYSkpCisgCQlicmVhazsKKyAJICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgcHN0ci0+YnVmc19sZW4gKiAyKTsKKyAJICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorQEAgLTEwNSw3ICsxMDUsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorICAgZWxzZQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICAgZWxzZQorICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KK0BAIC0xMzAsNyArMTMwLDcgQEAgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KKyByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IG5ld19idWZfbGVuKQorIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorICAgICB7CisgICAgICAgd2ludF90ICpuZXdfd2NzOworIAorQEAgLTE3Nyw3ICsxNzcsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCByZV9zdHJpbmdfdCAqcHN0ciwKKyAgIHBzdHItPnRyYW5zID0gdHJhbnM7CisgICBwc3RyLT5pY2FzZSA9IGljYXNlID8gMSA6IDA7CisgICBwc3RyLT5tYnNfYWxsb2NhdGVkID0gKHRyYW5zICE9IE5VTEwgfHwgaWNhc2UpOworLSAgcHN0ci0+bWJfY3VyX21heCA9IGRmYS0+bWJfY3VyX21heDsKKysgIHBzdHItPm1iX2N1cl9tYXggPSBkZmFfbWJfY3VyX21heCAoZGZhKTsKKyAgIHBzdHItPmlzX3V0ZjggPSBkZmEtPmlzX3V0Zjg7CisgICBwc3RyLT5tYXBfbm90YXNjaWkgPSBkZmEtPm1hcF9ub3Rhc2NpaTsKKyAgIHBzdHItPnN0b3AgPSBwc3RyLT5sZW47CitAQCAtMjAzLDcgKzIwMyw3IEBAIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIHsKKyAjaWZkZWYgX0xJQkMKKyAgIHVuc2lnbmVkIGNoYXIgYnVmW01CX0xFTl9NQVhdOworLSAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSk7CisgI2Vsc2UKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKKyAjZW5kaWYKK0BAIC0yMjYsNyArMjI2LDcgQEAgYnVpbGRfd2NzX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgCXsKKyAJICBpbnQgaSwgY2g7CisgCistCSAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKysJICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisgCSAgICB7CisgCSAgICAgIGNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeCArIGldOworIAkgICAgICBidWZbaV0gPSBwc3RyLT5tYnNbYnl0ZV9pZHggKyBpXSA9IHBzdHItPnRyYW5zW2NoXTsKK0BAIC0yNzUsNyArMjc1LDcgQEAgYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgICBzaXplX3QgbWJjbGVuOworICNpZmRlZiBfTElCQworICAgY2hhciBidWZbTUJfTEVOX01BWF07CistICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3VyX21heCk7CisrICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpKTsKKyAjZWxzZQorICAgY2hhciBidWZbNjRdOworICNlbmRpZgorQEAgLTM2OSw3ICszNjksNyBAQCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAJICB7CisgCSAgICBpbnQgaSwgY2g7CisgCistCSAgICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorKwkgICAgZm9yIChpID0gMDsgaSA8IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorIAkgICAgICB7CisgCQljaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeCArIGldOworIAkJYnVmW2ldID0gcHN0ci0+dHJhbnNbY2hdOworQEAgLTU2Nyw4ICs1NjcsOSBAQCByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgfQorIAorIC8qIFRoaXMgZnVuY3Rpb24gcmUtY29uc3RydWN0IHRoZSBidWZmZXJzLgorLSAgIENvbmNyZXRlbHksIGNvbnZlcnQgdG8gd2lkZSBjaGFyYWN0ZXIgaW4gY2FzZSBvZiBwc3RyLT5tYl9jdXJfbWF4ID4gMSwKKy0gICBjb252ZXJ0IHRvIHVwcGVyIGNhc2UgaW4gY2FzZSBvZiBSRUdfSUNBU0UsIGFwcGx5IHRyYW5zbGF0aW9uLiAgKi8KKysgICBDb25jcmV0ZWx5LCBjb252ZXJ0IHRvIHdpZGUgY2hhcmFjdGVyIGluIGNhc2Ugb2YKKysgICBzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxLCBjb252ZXJ0IHRvIHVwcGVyIGNhc2UgaW4gY2FzZSBvZgorKyAgIFJFR19JQ0FTRSwgYXBwbHkgdHJhbnNsYXRpb24uICAqLworIAorIHN0YXRpYyByZWdfZXJyY29kZV90CisgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK0BAIC01NzksNyArNTgwLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAgICAgeworICAgICAgIC8qIFJlc2V0IGJ1ZmZlci4gICovCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAltZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICAgcHN0ci0+bGVuID0gcHN0ci0+cmF3X2xlbjsKK0BAIC02NzAsNyArNjcxLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgb2Zmc2V0IC0gMSwKKyAJCQkJCQkJZWZsYWdzKTsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJCW1lbW1vdmUgKHBzdHItPndjcywgcHN0ci0+d2NzICsgb2Zmc2V0LAorIAkJCSAocHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitAQCAtNjk5LDcgKzcwMCw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgI2VuZGlmCisgCSAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCSAgICB7CisgCSAgICAgIGludCB3Y3NfaWR4OworIAkgICAgICB3aW50X3Qgd2MgPSBXRU9GOworQEAgLTcxMSw3ICs3MTIsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorIAkJICAvKiBTcGVjaWFsIGNhc2UgVVRGLTguICBNdWx0aS1ieXRlIGNoYXJzIHN0YXJ0IHdpdGggYW55CisgCQkgICAgIGJ5dGUgb3RoZXIgdGhhbiAweDgwIC0gMHhiZi4gICovCisgCQkgIHJhdyA9IHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeDsKKy0JCSAgZW5kID0gcmF3ICsgKG9mZnNldCAtIHBzdHItPm1iX2N1cl9tYXgpOworKwkJICBlbmQgPSByYXcgKyAob2Zmc2V0IC0gc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpKTsKKyAJCSAgaWYgKGVuZCA8IHBzdHItPnJhd19tYnMpCisgCQkgICAgZW5kID0gcHN0ci0+cmF3X21iczsKKyAJCSAgcCA9IHJhdyArIG9mZnNldCAtIDE7CitAQCAtODAzLDcgKzgwNCw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgCisgICAvKiBUaGVuIGJ1aWxkIHRoZSBidWZmZXJzLiAgKi8KKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorICAgICB7CisgICAgICAgaWYgKHBzdHItPmljYXNlKQorIAl7CitAQCAtODQxLDcgKzg0Miw3IEBAIHJlX3N0cmluZ19wZWVrX2J5dGVfY2FzZSAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCisgICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMQorICAgICAgICYmICEgcmVfc3RyaW5nX2lzX3NpbmdsZV9ieXRlX2NoYXIgKHBzdHIsIHBzdHItPmN1cl9pZHggKyBpZHgpKQorICAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyAjZW5kaWYKK0BAIC05MzAsNyArOTMxLDcgQEAgcmVfc3RyaW5nX2NvbnRleHRfYXQgKGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCwgaW50IGVmbGFncykKKyAgICAgcmV0dXJuICgoZWZsYWdzICYgUkVHX05PVEVPTCkgPyBDT05URVhUX0VOREJVRgorIAkgICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0VOREJVRik7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxKQorICAgICB7CisgICAgICAgd2ludF90IHdjOworICAgICAgIGludCB3Y19pZHggPSBpZHg7CitAQCAtMTQ0NCw3ICsxNDQ1LDcgQEAgcmVfZGZhX2FkZF9ub2RlIChyZV9kZmFfdCAqZGZhLCByZV90b2tlbl90IHRva2VuKQorICAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uY29uc3RyYWludCA9IDA7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXS5hY2NlcHRfbWIgPQorLSAgICAodHlwZSA9PSBPUF9QRVJJT0QgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkgfHwgdHlwZSA9PSBDT01QTEVYX0JSQUNLRVQ7CisrICAgICh0eXBlID09IE9QX1BFUklPRCAmJiBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpIHx8IHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworICNlbmRpZgorICAgZGZhLT5uZXh0c1tkZmEtPm5vZGVzX2xlbl0gPSAtMTsKKyAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgZGZhLT5ub2Rlc19sZW4pOworZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmggYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5oCitpbmRleCAxNTRlOTY5Li5jNDM5MDlhIDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAorKysrIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAorQEAgLTI2LDYgKzI2LDEwIEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysjaWYgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0ggfHwgZGVmaW5lZCBIQVZFX0xBTkdJTkZPX0NPREVTRVQgfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjZW5kaWYKK0BAIC0zNjksNiArMzczLDEzIEBAIHN0cnVjdCByZV9zdHJpbmdfdAorIH07CisgdHlwZWRlZiBzdHJ1Y3QgcmVfc3RyaW5nX3QgcmVfc3RyaW5nX3Q7CisgCisrLyogV2hlbiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCB0aGlzIGlzIGFsd2F5cyAxOworKyAgIGhlbHAgdGhlIGNvbXBpbGVyIG1ha2UgdXNlIG9mIHRoYXQgZmFjdC4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIHN0cmluZ19tYl9jdXJfbWF4KHN0cikgKChzdHIpLT5tYl9jdXJfbWF4ICsgMCkKKysjZWxzZQorKyMgZGVmaW5lIHN0cmluZ19tYl9jdXJfbWF4KHN0cikgKDEpCisrI2VuZGlmCisgCisgc3RydWN0IHJlX2RmYV90OworIHR5cGVkZWYgc3RydWN0IHJlX2RmYV90IHJlX2RmYV90OworQEAgLTY1NCw2ICs2NjUsMTQgQEAgc3RydWN0IHJlX2RmYV90CisgICBfX2xpYmNfbG9ja19kZWZpbmUgKCwgbG9jaykKKyB9OworIAorKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhpcyBpcyBhbHdheXMgMTsKKysgICBoZWxwIHRoZSBjb21waWxlciBtYWtlIHVzZSBvZiB0aGF0IGZhY3QuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBkZmFfbWJfY3VyX21heChkZmEpICgoZGZhKS0+bWJfY3VyX21heCArIDApCisrI2Vsc2UKKysjIGRlZmluZSBkZmFfbWJfY3VyX21heChkZmEpICgxKQorKyNlbmRpZgorKworICNkZWZpbmUgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eShzZXQpIG1lbXNldCAoc2V0LCAnXDAnLCBzaXplb2YgKHJlX25vZGVfc2V0KSkKKyAjZGVmaW5lIHJlX25vZGVfc2V0X3JlbW92ZShzZXQsaWQpIFwKKyAgIChyZV9ub2RlX3NldF9yZW1vdmVfYXQgKHNldCwgcmVfbm9kZV9zZXRfY29udGFpbnMgKHNldCwgaWQpIC0gMSkpCitAQCAtNzE0LDcgKzczMyw3IEBAIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX18gKChwdXJlLCB1bnVzZWQpKQorIHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQorIHsKKyAgIGludCBieXRlX2lkeDsKKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID09IDEpCisgICAgIHJldHVybiAxOworICAgZm9yIChieXRlX2lkeCA9IDE7IGlkeCArIGJ5dGVfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK2J5dGVfaWR4KQorICAgICBpZiAocHN0ci0+d2NzW2lkeCArIGJ5dGVfaWR4XSAhPSBXRU9GKQorQEAgLTcyNiw3ICs3NDUsNyBAQCBzdGF0aWMgd2ludF90CisgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGVfXyAoKHB1cmUsIHVudXNlZCkpCisgcmVfc3RyaW5nX3djaGFyX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKKyB7CistICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA9PSAxKQorICAgICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+bWJzW2lkeF07CisgICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+d2NzW2lkeF07CisgfQorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4ZWMtY29tcGF0LmMgYi9wb3NpeC9yZWdleGVjLWNvbXBhdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGY5YjdjNworLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zaXgvcmVnZXhlYy1jb21wYXQuYworQEAgLTAsMCArMSwzOSBAQAorKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisrdmVyc2lvbmVkX3N5bWJvbCAobGliYywgX19yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzNfNCk7CisrCisrIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCisrX190eXBlb2ZfXyAoX19yZWdleGVjKSBfX2NvbXBhdF9yZWdleGVjOworKworK2ludAorK2F0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisrX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorKwkJICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywgc2l6ZV90IG5tYXRjaCwKKysJCSAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKKyt7CisrICByZXR1cm4gcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwKKysJCSAgZWZsYWdzICYgKFJFR19OT1RCT0wgfCBSRUdfTk9URU9MKSk7CisrfQorK2NvbXBhdF9zeW1ib2wgKGxpYmMsIF9fY29tcGF0X3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfMCk7CisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4ZWMuYyBiL3Bvc2l4L3JlZ2V4ZWMuYworaW5kZXggNzBjZDYwNi4uZTNiNDllNCAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4ZWMuYworKysrIGIvcG9zaXgvcmVnZXhlYy5jCitAQCAtMTgsNiArMTgsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9pbml0IChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlLCBpbnQgZWZsYWdzLAorIAkJCQkgICAgIGludCBuKSBpbnRlcm5hbF9mdW5jdGlvbjsKK0BAIC0xODYsMTEgKzE4NywxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisgc3RhdGljIGludCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkJCQkgICAgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgaWR4KQorICAgICAgaW50ZXJuYWxfZnVuY3Rpb247CistIyBpZmRlZiBfTElCQworKyMgaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsCisgCQkJCQkJICAgc2l6ZV90IG5hbWVfbGVuKQorICAgICAgaW50ZXJuYWxfZnVuY3Rpb247CistIyBlbmRpZiAvKiBfTElCQyAqLworKyMgZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgc3RhdGljIGludCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKyAJCQkJICAgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKnN0YXRlLAorQEAgLTI1NSwyNSArMjU2LDkgQEAgcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzKQorICAgcmV0dXJuIGVyciAhPSBSRUdfTk9FUlJPUjsKKyB9CisgCistI2lmZGVmIF9MSUJDCistIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKy12ZXJzaW9uZWRfc3ltYm9sIChsaWJjLCBfX3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfM180KTsKKy0KKy0jIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkKKy1fX3R5cGVvZl9fIChfX3JlZ2V4ZWMpIF9fY29tcGF0X3JlZ2V4ZWM7CistCistaW50CistYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKy1fX2NvbXBhdF9yZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCistCQkgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qgc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorLQkJICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorLXsKKy0gIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLAorLQkJICBlZmxhZ3MgJiAoUkVHX05PVEJPTCB8IFJFR19OT1RFT0wpKTsKKy19CistY29tcGF0X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsKKy0jIGVuZGlmCistI2VuZGlmCisrLyogRUdMSUJDOiBUaGUgY29kZSB0aGF0IHVzZWQgdG8gYmUgaGVyZSB3YXMgbW92ZSB0byBhIHNlcGFyYXRlIGZpbGUKKysgICBzbyB0aGF0IGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB4cmVnZXguYy4gICovCisrI2luY2x1ZGUgInJlZ2V4ZWMtY29tcGF0LmMiCisgCisgLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisgCitAQCAtNzI4LDcgKzcxMyw3IEBAIHJlX3NlYXJjaF9pbnRlcm5hbCAocHJlZywgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCByYW5nZSwgc3RvcCwgbm1hdGNoLCBwbWF0Y2gsCisgICBpbmNyID0gKHJhbmdlIDwgMCkgPyAtMSA6IDE7CisgICBsZWZ0X2xpbSA9IChyYW5nZSA8IDApID8gc3RhcnQgKyByYW5nZSA6IHN0YXJ0OworICAgcmlnaHRfbGltID0gKHJhbmdlIDwgMCkgPyBzdGFydCA6IHN0YXJ0ICsgcmFuZ2U7CistICBzYiA9IGRmYS0+bWJfY3VyX21heCA9PSAxOworKyAgc2IgPSBkZmFfbWJfY3VyX21heCAoZGZhKSA9PSAxOworICAgbWF0Y2hfa2luZCA9CisgICAgIChmYXN0bWFwCisgICAgICA/ICgoc2IgfHwgIShwcmVnLT5zeW50YXggJiBSRV9JQ0FTRSB8fCB0KSA/IDQgOiAwKQorQEAgLTM0NDgsNyArMzQzMyw3IEBAIG91dF9mcmVlOgorIAkgIGlmIChCRSAoZGVzdF9zdGF0ZXNfd29yZFtpXSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgCSAgICBnb3RvIG91dF9mcmVlOworIAorLQkgIGlmIChkZXN0X3N0YXRlc1tpXSAhPSBkZXN0X3N0YXRlc193b3JkW2ldICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKGRlc3Rfc3RhdGVzW2ldICE9IGRlc3Rfc3RhdGVzX3dvcmRbaV0gJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkgICAgbmVlZF93b3JkX3RydGFibGUgPSAxOworIAorIAkgIGRlc3Rfc3RhdGVzX25sW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLAorQEAgLTM1OTAsNyArMzU3NSw3IEBAIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKyAgICAgICBlbHNlIGlmICh0eXBlID09IE9QX1BFUklPRCkKKyAJeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCSAgICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIGRmYS0+c2JfY2hhcik7CisgCSAgZWxzZQorICNlbmRpZgorQEAgLTM2NDEsNyArMzYyNiw3IEBAIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKyAJCSAgY29udGludWU7CisgCQl9CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorIAkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IChkZmEtPndvcmRfY2hhcltqXSB8IH5kZmEtPnNiX2NoYXJbal0pKTsKKyAJICAgICAgZWxzZQorQEAgLTM2NjAsNyArMzY0NSw3IEBAIGdyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKyAJCSAgY29udGludWU7CisgCQl9CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorIAkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IH4oZGZhLT53b3JkX2NoYXJbal0gJiBkZmEtPnNiX2NoYXJbal0pKTsKKyAJICAgICAgZWxzZQorQEAgLTM4MzYsMTIgKzM4MjEsNiBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorICAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorICAgICB7CisgICAgICAgY29uc3QgcmVfY2hhcnNldF90ICpjc2V0ID0gbm9kZS0+b3ByLm1iY3NldDsKKy0jIGlmZGVmIF9MSUJDCistICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGluCistCT0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyIChpbnB1dCkgKyBzdHJfaWR4KTsKKy0gICAgICBpbnQgajsKKy0gICAgICB1aW50MzJfdCBucnVsZXM7CistIyBlbmRpZiAvKiBfTElCQyAqLworICAgICAgIGludCBtYXRjaF9sZW4gPSAwOworICAgICAgIHdjaGFyX3Qgd2MgPSAoKGNzZXQtPm5yYW5nZXMgfHwgY3NldC0+bmNoYXJfY2xhc3NlcyB8fCBjc2V0LT5ubWJjaGFycykKKyAJCSAgICA/IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHN0cl9pZHgpIDogMCk7CitAQCAtMzg1Myw2ICszODMyLDcgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworIAkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKyAJICB9CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcmFjdGVyX2NsYXNzPyAgKi8KKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmNoYXJfY2xhc3NlczsgKytpKQorIAl7CitAQCAtMzg2MywxNCArMzg0MywyMiBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkgICAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworIAkgICAgfQorIAl9CisrI2VuZGlmCisrCisrICAgICAgLyogV2hlbiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIG9ubHkgdGhlIEMKKysgICAgICAgICBsb2NhbGUgaXMgc3VwcG9ydGVkOyBpdCBoYXMgbm8gY29sbGF0aW9uIHJ1bGVzLiAgKi8KKysjIGlmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGluCisrCT0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyIChpbnB1dCkgKyBzdHJfaWR4KTsKKysgICAgICBpbnQgajsKKysgICAgICB1aW50MzJfdCBucnVsZXM7CisgCistIyBpZmRlZiBfTElCQworICAgICAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgICAgICAgaWYgKG5ydWxlcyAhPSAwKQorIAl7CisgCSAgdW5zaWduZWQgaW50IGluX2NvbGxzZXEgPSAwOworIAkgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CistCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhOworKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHMsICpleHRyYSA9IE5VTEw7CisgCSAgY29uc3QgY2hhciAqY29sbHNlcXdjOworIAorIAkgIC8qIG1hdGNoIHdpdGggY29sbGF0aW5nX3N5bWJvbD8gICovCitAQCAtMzk1NSw4ICszOTQzLDEyIEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCSAgICB9CisgCX0KKyAgICAgICBlbHNlCistIyBlbmRpZiAvKiBfTElCQyAqLworKyMgZW5kaWYgLyogX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCXsKKysgICAgICAgICAgLyogSW4gdGhlIF9MSUJDIHZlcnNpb24sIGlmIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMKKysgICAgICAgICAgICAgZGlzYWJsZWQsIHRoZXJlIGNhbiBiZSBubyBtdWx0aWJ5dGUgcmFuZ2UgZW5kcG9pbnRzLCBhbmQKKysgICAgICAgICAgICAgY3NldC0+bnJhbmdlcyBpcyBhbHdheXMgemVyby4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisgI2lmIF9fR05VQ19fID49IDIKKyAJICB3Y2hhcl90IGNtcF9idWZbXSA9IHtMJ1wwJywgTCdcMCcsIHdjLCBMJ1wwJywgTCdcMCcsIEwnXDAnfTsKK0BAIC0zOTc1LDYgKzM5NjcsNyBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkJICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworIAkJfQorIAkgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAJfQorICAgICBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDoKKyAgICAgICBpZiAoIWNzZXQtPm5vbl9tYXRjaCkKK0BAIC0zOTkwLDcgKzM5ODMsNyBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorICAgcmV0dXJuIDA7CisgfQorIAorLSMgaWZkZWYgX0xJQkMKKysjIGlmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgc3RhdGljIHVuc2lnbmVkIGludAorIGludGVybmFsX2Z1bmN0aW9uCisgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywgc2l6ZV90IG1ic19sZW4pCitAQCAtNDA0OCw3ICs0MDQxLDcgQEAgZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywgc2l6ZV90IG1ic19sZW4pCisgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICB9CisgfQorLSMgZW5kaWYgLyogX0xJQkMgKi8KKysjIGVuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworIAorIC8qIENoZWNrIHdoZXRoZXIgdGhlIG5vZGUgYWNjZXB0cyB0aGUgYnl0ZSB3aGljaCBpcyBJRFgtdGgKK0BAIC00MTM5LDcgKzQxMzIsNyBAQCBleHRlbmRfYnVmZmVycyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbWluX2xlbikKKyAgIGlmIChwc3RyLT5pY2FzZSkKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJeworIAkgIHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIpOworIAkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKK0BAIC00MTUyLDcgKzQxNDUsNyBAQCBleHRlbmRfYnVmZmVycyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbWluX2xlbikKKyAgIGVsc2UKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICAgZWxzZQorICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KK2RpZmYgLS1naXQgYS9wb3NpeC94cmVnZXguYyBiL3Bvc2l4L3hyZWdleC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDNmN2FjZQorLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zaXgveHJlZ2V4LmMKK0BAIC0wLDAgKzEsODIxNSBAQAorKy8qIEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnksCisrICAgdmVyc2lvbiAwLjEyLgorKyAgIChJbXBsZW1lbnRzIFBPU0lYIGRyYWZ0IFAxMDAzLjIvRDExLjIsIGV4Y2VwdCBmb3Igc29tZSBvZiB0aGUKKysgICBpbnRlcm5hdGlvbmFsaXphdGlvbiBmZWF0dXJlcy4pCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorKyAgIDIwMDIsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysgICAwMjExMC0xMzAxIFVTQS4gICovCisrCisrLyogQUlYIHJlcXVpcmVzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaWxlLiAqLworKyNpZiBkZWZpbmVkIF9BSVggJiYgIWRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgUkVHRVhfTUFMTE9DCisrICAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyN1bmRlZglfR05VX1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaWZuZGVmIElOU0lERV9SRUNVUlNJT04KKysjIGlmZGVmIEhBVkVfQ09ORklHX0gKKysjICBpbmNsdWRlIDxjb25maWcuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyojaW5jbHVkZSA8YW5zaWRlY2wuaD4qLworKworKworKyNpZm5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyMgaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgIWRlZmluZWQgZW1hY3MKKysjICBpbmNsdWRlIDxzdGRkZWYuaD4KKysjIGVsc2UKKysvKiBXZSBuZWVkIHRoaXMgZm9yIGByZWdleC5oJywgYW5kIHBlcmhhcHMgZm9yIHRoZSBFbWFjcyBpbmNsdWRlIGZpbGVzLiAgKi8KKysjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjIGVuZGlmCisrCisrIyBpZiAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IICYmIGRlZmluZWQgSEFWRV9CVE9XQykKKysjICBkZWZpbmUgV0lERV9DSEFSX1NVUFBPUlQgKEhBVkVfV0NUWVBFX0ggJiYgSEFWRV9XQ0hBUl9IICYmIEhBVkVfQlRPV0MpCisrIyBlbHNlCisrIyAgZGVmaW5lIFdJREVfQ0hBUl9TVVBQT1JUIDAKKysjIGVuZGlmCisrLyogRm9yIHBsYXRmb3JtIHdoaWNoIHN1cHBvcnQgdGhlIElTTyBDIGFtZW5kZW1lbnQgMSBmdW5jdGlvbmFsaXR5IHdlCisrICAgc3VwcG9ydCB1c2VyIGRlZmluZWQgY2hhcmFjdGVyIGNsYXNzZXMuICAqLworKyMgaWYgV0lERV9DSEFSX1NVUFBPUlQKKysvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKysjICBpbmNsdWRlIDx3Y2hhci5oPgorKyMgIGluY2x1ZGUgPHdjdHlwZS5oPgorKyMgZW5kaWYKKysKKysjIGlmZGVmIF9MSUJDCisrLyogV2UgaGF2ZSB0byBrZWVwIHRoZSBuYW1lc3BhY2UgY2xlYW4uICAqLworKyMgIGRlZmluZSByZWdmcmVlKHByZWcpIF9fcmVnZnJlZSAocHJlZykKKysjICBkZWZpbmUgcmVnZXhlYyhwciwgc3QsIG5tLCBwbSwgZWYpIF9fcmVnZXhlYyAocHIsIHN0LCBubSwgcG0sIGVmKQorKyMgIGRlZmluZSByZWdjb21wKHByZWcsIHBhdHRlcm4sIGNmbGFncykgX19yZWdjb21wIChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpCisrIyAgZGVmaW5lIHJlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpIFwKKysJX19yZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKQorKyMgIGRlZmluZSByZV9zZXRfcmVnaXN0ZXJzKGJ1LCByZSwgbnUsIHN0LCBlbikgXAorKwlfX3JlX3NldF9yZWdpc3RlcnMgKGJ1LCByZSwgbnUsIHN0LCBlbikKKysjICBkZWZpbmUgcmVfbWF0Y2hfMihidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkgXAorKwlfX3JlX21hdGNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKQorKyMgIGRlZmluZSByZV9tYXRjaChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykgXAorKwlfX3JlX21hdGNoIChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykKKysjICBkZWZpbmUgcmVfc2VhcmNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKSBcCisrCV9fcmVfc2VhcmNoIChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykKKysjICBkZWZpbmUgcmVfY29tcGlsZV9wYXR0ZXJuKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkgXAorKwlfX3JlX2NvbXBpbGVfcGF0dGVybiAocGF0dGVybiwgbGVuZ3RoLCBidWZwKQorKyMgIGRlZmluZSByZV9zZXRfc3ludGF4KHN5bnRheCkgX19yZV9zZXRfc3ludGF4IChzeW50YXgpCisrIyAgZGVmaW5lIHJlX3NlYXJjaF8yKGJ1ZnAsIHN0MSwgczEsIHN0MiwgczIsIHN0YXJ0cG9zLCByYW5nZSwgcmVncywgc3RvcCkgXAorKwlfX3JlX3NlYXJjaF8yIChidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApCisrIyAgZGVmaW5lIHJlX2NvbXBpbGVfZmFzdG1hcChidWZwKSBfX3JlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCkKKysKKysjICBkZWZpbmUgYnRvd2MgX19idG93YworKworKy8qIFdlIGFyZSBhbHNvIHVzaW5nIHNvbWUgbGlicmFyeSBpbnRlcm5hbHMuICAqLworKyMgIGluY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrIyAgaW5jbHVkZSA8bG9jYWxlL2VsZW0taGFzaC5oPgorKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyAgaW5jbHVkZSA8bG9jYWxlL2NvbGwtbG9va3VwLmg+CisrIyBlbmRpZgorKworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuICAqLworKyMgaWYgKEhBVkVfTElCSU5UTF9IICYmIEVOQUJMRV9OTFMpIHx8IGRlZmluZWQgX0xJQkMKKysjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisrIyAgaWZkZWYgX0xJQkMKKysjICAgdW5kZWYgZ2V0dGV4dAorKyMgICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQgKCJsaWJjIiwgbXNnaWQsIExDX01FU1NBR0VTKQorKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjIGVuZGlmCisrCisrIyBpZm5kZWYgZ2V0dGV4dF9ub29wCisrLyogVGhpcyBkZWZpbmUgaXMgc28geGdldHRleHQgY2FuIGZpbmQgdGhlIGludGVybmF0aW9uYWxpemFibGUKKysgICBzdHJpbmdzLiAgKi8KKysjICBkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisrIyBlbmRpZgorKworKy8qIFRoZSBgZW1hY3MnIHN3aXRjaCB0dXJucyBvbiBjZXJ0YWluIG1hdGNoaW5nIGNvbW1hbmRzCisrICAgdGhhdCBtYWtlIHNlbnNlIG9ubHkgaW4gRW1hY3MuICovCisrIyBpZmRlZiBlbWFjcworKworKyMgIGluY2x1ZGUgImxpc3AuaCIKKysjICBpbmNsdWRlICJidWZmZXIuaCIKKysjICBpbmNsdWRlICJzeW50YXguaCIKKysKKysjIGVsc2UgIC8qIG5vdCBlbWFjcyAqLworKworKy8qIElmIHdlIGFyZSBub3QgbGlua2luZyB3aXRoIEVtYWNzIHByb3BlciwKKysgICB3ZSBjYW4ndCB1c2UgdGhlIHJlbG9jYXRpbmcgYWxsb2NhdG9yCisrICAgZXZlbiBpZiBjb25maWcuaCBzYXlzIHRoYXQgd2UgY2FuLiAgKi8KKysjICB1bmRlZiBSRUxfQUxMT0MKKysKKysjICBpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyMgIGVsc2UKKytjaGFyICptYWxsb2MgKCk7CisrY2hhciAqcmVhbGxvYyAoKTsKKysjICBlbmRpZgorKworKy8qIFdoZW4gdXNlZCBpbiBFbWFjcydzIGxpYi1zcmMsIHdlIG5lZWQgdG8gZ2V0IGJ6ZXJvIGFuZCBiY29weSBzb21laG93LgorKyAgIElmIG5vdGhpbmcgZWxzZSBoYXMgYmVlbiBkb25lLCB1c2UgdGhlIG1ldGhvZCBiZWxvdy4gICovCisrIyAgaWZkZWYgSU5ISUJJVF9TVFJJTkdfSEVBREVSCisrIyAgIGlmICEoZGVmaW5lZCBIQVZFX0JaRVJPICYmIGRlZmluZWQgSEFWRV9CQ09QWSkKKysjICAgIGlmICFkZWZpbmVkIGJ6ZXJvICYmICFkZWZpbmVkIGJjb3B5CisrIyAgICAgdW5kZWYgSU5ISUJJVF9TVFJJTkdfSEVBREVSCisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrCisrLyogVGhpcyBpcyB0aGUgbm9ybWFsIHdheSBvZiBtYWtpbmcgc3VyZSB3ZSBoYXZlIGEgYmNvcHkgYW5kIGEgYnplcm8uCisrICAgVGhpcyBpcyB1c2VkIGluIG1vc3QgcHJvZ3JhbXMtLWEgZmV3IG90aGVyIHByb2dyYW1zIGF2b2lkIHRoaXMKKysgICBieSBkZWZpbmluZyBJTkhJQklUX1NUUklOR19IRUFERVIuICAqLworKyMgIGlmbmRlZiBJTkhJQklUX1NUUklOR19IRUFERVIKKysjICAgaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKysjICAgIGluY2x1ZGUgPHN0cmluZy5oPgorKyMgICAgaWZuZGVmIGJ6ZXJvCisrIyAgICAgaWZuZGVmIF9MSUJDCisrIyAgICAgIGRlZmluZSBiemVybyhzLCBuKQkobWVtc2V0IChzLCAnXDAnLCBuKSwgKHMpKQorKyMgICAgIGVsc2UKKysjICAgICAgZGVmaW5lIGJ6ZXJvKHMsIG4pCV9fYnplcm8gKHMsIG4pCisrIyAgICAgZW5kaWYKKysjICAgIGVuZGlmCisrIyAgIGVsc2UKKysjICAgIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjICAgIGlmbmRlZiBtZW1jbXAKKysjICAgICBkZWZpbmUgbWVtY21wKHMxLCBzMiwgbikJYmNtcCAoczEsIHMyLCBuKQorKyMgICAgZW5kaWYKKysjICAgIGlmbmRlZiBtZW1jcHkKKysjICAgICBkZWZpbmUgbWVtY3B5KGQsIHMsIG4pCShiY29weSAocywgZCwgbiksIChkKSkKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysKKysvKiBEZWZpbmUgdGhlIHN5bnRheCBzdHVmZiBmb3IgXDwsIFw+LCBldGMuICAqLworKworKy8qIFRoaXMgbXVzdCBiZSBub256ZXJvIGZvciB0aGUgd29yZGNoYXIgYW5kIG5vdHdvcmRjaGFyIHBhdHRlcm4KKysgICBjb21tYW5kcyBpbiByZV9tYXRjaF8yLiAgKi8KKysjICBpZm5kZWYgU3dvcmQKKysjICAgZGVmaW5lIFN3b3JkIDEKKysjICBlbmRpZgorKworKyMgIGlmZGVmIFNXSVRDSF9FTlVNX0JVRworKyMgICBkZWZpbmUgU1dJVENIX0VOVU1fQ0FTVCh4KSAoKGludCkoeCkpCisrIyAgZWxzZQorKyMgICBkZWZpbmUgU1dJVENIX0VOVU1fQ0FTVCh4KSAoeCkKKysjICBlbmRpZgorKworKyMgZW5kaWYgLyogbm90IGVtYWNzICovCisrCisrIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTElNSVRTX0gKKysjICBpbmNsdWRlIDxsaW1pdHMuaD4KKysjIGVuZGlmCisrCisrIyBpZm5kZWYgTUJfTEVOX01BWAorKyMgIGRlZmluZSBNQl9MRU5fTUFYIDEKKysjIGVuZGlmCisrDAorKy8qIEdldCB0aGUgaW50ZXJmYWNlLCBpbmNsdWRpbmcgdGhlIHN5bnRheCBiaXRzLiAgKi8KKysjIGluY2x1ZGUgInJlZ2V4LmgiCisrCisrLyogaXNhbHBoYSBldGMuIGFyZSB1c2VkIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzZXMuICAqLworKyMgaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysvKiBKaW0gTWV5ZXJpbmcgd3JpdGVzOgorKworKyAgICIuLi4gU29tZSBjdHlwZSBtYWNyb3MgYXJlIHZhbGlkIG9ubHkgZm9yIGNoYXJhY3RlciBjb2RlcyB0aGF0CisrICAgaXNhc2NpaSBzYXlzIGFyZSBBU0NJSSAoU0dJJ3MgSVJJWC00LjAuNSBpcyBvbmUgc3VjaCBzeXN0ZW0gLS13aGVuCisrICAgdXNpbmcgL2Jpbi9jYyBvciBnY2MgYnV0IHdpdGhvdXQgZ2l2aW5nIGFuIGFuc2kgb3B0aW9uKS4gIFNvLCBhbGwKKysgICBjdHlwZSB1c2VzIHNob3VsZCBiZSB0aHJvdWdoIG1hY3JvcyBsaWtlIElTUFJJTlQuLi4gIElmCisrICAgU1REQ19IRUFERVJTIGlzIGRlZmluZWQsIHRoZW4gYXV0b2NvbmYgaGFzIHZlcmlmaWVkIHRoYXQgdGhlIGN0eXBlCisrICAgbWFjcm9zIGRvbid0IG5lZWQgdG8gYmUgZ3VhcmRlZCB3aXRoIHJlZmVyZW5jZXMgdG8gaXNhc2NpaS4gLi4uCisrICAgRGVmaW5pbmcgaXNhc2NpaSB0byAxIHNob3VsZCBsZXQgYW55IGNvbXBpbGVyIHdvcnRoIGl0cyBzYWx0CisrICAgZWxpbWluYXRlIHRoZSAmJiB0aHJvdWdoIGNvbnN0YW50IGZvbGRpbmcuIgorKyAgIFNvbGFyaXMgZGVmaW5lcyBzb21lIG9mIHRoZXNlIHN5bWJvbHMgc28gd2UgbXVzdCB1bmRlZmluZSB0aGVtIGZpcnN0LiAgKi8KKysKKysjIHVuZGVmIElTQVNDSUkKKysjIGlmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8ICghZGVmaW5lZCBpc2FzY2lpICYmICFkZWZpbmVkIEhBVkVfSVNBU0NJSSkKKysjICBkZWZpbmUgSVNBU0NJSShjKSAxCisrIyBlbHNlCisrIyAgZGVmaW5lIElTQVNDSUkoYykgaXNhc2NpaShjKQorKyMgZW5kaWYKKysKKysjIGlmZGVmIGlzYmxhbmsKKysjICBkZWZpbmUgSVNCTEFOSyhjKSAoSVNBU0NJSSAoYykgJiYgaXNibGFuayAoYykpCisrIyBlbHNlCisrIyAgZGVmaW5lIElTQkxBTksoYykgKChjKSA9PSAnICcgfHwgKGMpID09ICdcdCcpCisrIyBlbmRpZgorKyMgaWZkZWYgaXNncmFwaAorKyMgIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJIChjKSAmJiBpc2dyYXBoIChjKSkKKysjIGVsc2UKKysjICBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSSAoYykgJiYgaXNwcmludCAoYykgJiYgIWlzc3BhY2UgKGMpKQorKyMgZW5kaWYKKysKKysjIHVuZGVmIElTUFJJTlQKKysjIGRlZmluZSBJU1BSSU5UKGMpIChJU0FTQ0lJIChjKSAmJiBpc3ByaW50IChjKSkKKysjIGRlZmluZSBJU0RJR0lUKGMpIChJU0FTQ0lJIChjKSAmJiBpc2RpZ2l0IChjKSkKKysjIGRlZmluZSBJU0FMTlVNKGMpIChJU0FTQ0lJIChjKSAmJiBpc2FsbnVtIChjKSkKKysjIGRlZmluZSBJU0FMUEhBKGMpIChJU0FTQ0lJIChjKSAmJiBpc2FscGhhIChjKSkKKysjIGRlZmluZSBJU0NOVFJMKGMpIChJU0FTQ0lJIChjKSAmJiBpc2NudHJsIChjKSkKKysjIGRlZmluZSBJU0xPV0VSKGMpIChJU0FTQ0lJIChjKSAmJiBpc2xvd2VyIChjKSkKKysjIGRlZmluZSBJU1BVTkNUKGMpIChJU0FTQ0lJIChjKSAmJiBpc3B1bmN0IChjKSkKKysjIGRlZmluZSBJU1NQQUNFKGMpIChJU0FTQ0lJIChjKSAmJiBpc3NwYWNlIChjKSkKKysjIGRlZmluZSBJU1VQUEVSKGMpIChJU0FTQ0lJIChjKSAmJiBpc3VwcGVyIChjKSkKKysjIGRlZmluZSBJU1hESUdJVChjKSAoSVNBU0NJSSAoYykgJiYgaXN4ZGlnaXQgKGMpKQorKworKyMgaWZkZWYgX3RvbG93ZXIKKysjICBkZWZpbmUgVE9MT1dFUihjKSBfdG9sb3dlcihjKQorKyMgZWxzZQorKyMgIGRlZmluZSBUT0xPV0VSKGMpIHRvbG93ZXIoYykKKysjIGVuZGlmCisrCisrIyBpZm5kZWYgTlVMTAorKyMgIGRlZmluZSBOVUxMICh2b2lkICopMAorKyMgZW5kaWYKKysKKysvKiBXZSByZW1vdmUgYW55IHByZXZpb3VzIGRlZmluaXRpb24gb2YgYFNJR05fRVhURU5EX0NIQVInLAorKyAgIHNpbmNlIG91cnMgKHdlIGhvcGUpIHdvcmtzIHByb3Blcmx5IHdpdGggYWxsIGNvbWJpbmF0aW9ucyBvZgorKyAgIG1hY2hpbmVzLCBjb21waWxlcnMsIGBjaGFyJyBhbmQgYHVuc2lnbmVkIGNoYXInIGFyZ3VtZW50IHR5cGVzLgorKyAgIChQZXIgQm90aG5lciBzdWdnZXN0ZWQgdGhlIGJhc2ljIGFwcHJvYWNoLikgICovCisrIyB1bmRlZiBTSUdOX0VYVEVORF9DSEFSCisrIyBpZiBfX1NURENfXworKyMgIGRlZmluZSBTSUdOX0VYVEVORF9DSEFSKGMpICgoc2lnbmVkIGNoYXIpIChjKSkKKysjIGVsc2UgIC8qIG5vdCBfX1NURENfXyAqLworKy8qIEFzIGluIEhhcmJpc29uIGFuZCBTdGVlbGUuICAqLworKyMgIGRlZmluZSBTSUdOX0VYVEVORF9DSEFSKGMpICgoKCh1bnNpZ25lZCBjaGFyKSAoYykpIF4gMTI4KSAtIDEyOCkKKysjIGVuZGlmCisrDAorKyMgaWZuZGVmIGVtYWNzCisrLyogSG93IG1hbnkgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHNldC4gICovCisrIyAgZGVmaW5lIENIQVJfU0VUX1NJWkUgMjU2CisrCisrIyAgaWZkZWYgU1lOVEFYX1RBQkxFCisrCisrZXh0ZXJuIGNoYXIgKnJlX3N5bnRheF90YWJsZTsKKysKKysjICBlbHNlIC8qIG5vdCBTWU5UQVhfVEFCTEUgKi8KKysKKytzdGF0aWMgY2hhciByZV9zeW50YXhfdGFibGVbQ0hBUl9TRVRfU0laRV07CisrCisrc3RhdGljIHZvaWQgaW5pdF9zeW50YXhfb25jZSAodm9pZCk7CisrCisrc3RhdGljIHZvaWQKKytpbml0X3N5bnRheF9vbmNlICh2b2lkKQorK3sKKysgICByZWdpc3RlciBpbnQgYzsKKysgICBzdGF0aWMgaW50IGRvbmUgPSAwOworKworKyAgIGlmIChkb25lKQorKyAgICAgcmV0dXJuOworKyAgIGJ6ZXJvIChyZV9zeW50YXhfdGFibGUsIHNpemVvZiByZV9zeW50YXhfdGFibGUpOworKworKyAgIGZvciAoYyA9IDA7IGMgPCBDSEFSX1NFVF9TSVpFOyArK2MpCisrICAgICBpZiAoSVNBTE5VTSAoYykpCisrCXJlX3N5bnRheF90YWJsZVtjXSA9IFN3b3JkOworKworKyAgIHJlX3N5bnRheF90YWJsZVsnXyddID0gU3dvcmQ7CisrCisrICAgZG9uZSA9IDE7CisrfQorKworKyMgIGVuZGlmIC8qIG5vdCBTWU5UQVhfVEFCTEUgKi8KKysKKysjICBkZWZpbmUgU1lOVEFYKGMpIHJlX3N5bnRheF90YWJsZVsodW5zaWduZWQgY2hhcikgKGMpXQorKworKyMgZW5kaWYgLyogZW1hY3MgKi8KKysMCisrLyogSW50ZWdlciB0eXBlIGZvciBwb2ludGVycy4gICovCisrIyBpZiAhZGVmaW5lZCBfTElCQyAmJiAhZGVmaW5lZCBIQVZFX1VJTlRQVFJfVAorK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludHB0cl90OworKyMgZW5kaWYKKysKKysvKiBTaG91bGQgd2UgdXNlIG1hbGxvYyBvciBhbGxvY2E/ICBJZiBSRUdFWF9NQUxMT0MgaXMgbm90IGRlZmluZWQsIHdlCisrICAgdXNlIGBhbGxvY2EnIGluc3RlYWQgb2YgYG1hbGxvYycuICBUaGlzIGlzIGJlY2F1c2UgdXNpbmcgbWFsbG9jIGluCisrICAgcmVfc2VhcmNoKiBvciByZV9tYXRjaCogY291bGQgY2F1c2UgbWVtb3J5IGxlYWtzIHdoZW4gQy1nIGlzIHVzZWQgaW4KKysgICBFbWFjczsgYWxzbywgbWFsbG9jIGlzIHNsb3dlciBhbmQgY2F1c2VzIHN0b3JhZ2UgZnJhZ21lbnRhdGlvbi4gIE9uCisrICAgdGhlIG90aGVyIGhhbmQsIG1hbGxvYyBpcyBtb3JlIHBvcnRhYmxlLCBhbmQgZWFzaWVyIHRvIGRlYnVnLgorKworKyAgIEJlY2F1c2Ugd2Ugc29tZXRpbWVzIHVzZSBhbGxvY2EsIHNvbWUgcm91dGluZXMgaGF2ZSB0byBiZSBtYWNyb3MsCisrICAgbm90IGZ1bmN0aW9ucyAtLSBgYWxsb2NhJy1hbGxvY2F0ZWQgc3BhY2UgZGlzYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZQorKyAgIGZ1bmN0aW9uIGl0IGlzIGNhbGxlZCBpbi4gICovCisrCisrIyBpZmRlZiBSRUdFWF9NQUxMT0MKKysKKysjICBkZWZpbmUgUkVHRVhfQUxMT0NBVEUgbWFsbG9jCisrIyAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEUoc291cmNlLCBvc2l6ZSwgbnNpemUpIHJlYWxsb2MgKHNvdXJjZSwgbnNpemUpCisrIyAgZGVmaW5lIFJFR0VYX0ZSRUUgZnJlZQorKworKyMgZWxzZSAvKiBub3QgUkVHRVhfTUFMTE9DICAqLworKworKy8qIEVtYWNzIGFscmVhZHkgZGVmaW5lcyBhbGxvY2EsIHNvbWV0aW1lcy4gICovCisrIyAgaWZuZGVmIGFsbG9jYQorKworKy8qIE1ha2UgYWxsb2NhIHdvcmsgdGhlIGJlc3QgcG9zc2libGUgd2F5LiAgKi8KKysjICAgaWZkZWYgX19HTlVDX18KKysjICAgIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgICBlbHNlIC8qIG5vdCBfX0dOVUNfXyAqLworKyMgICAgaWYgSEFWRV9BTExPQ0FfSAorKyMgICAgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgICAgZW5kaWYgLyogSEFWRV9BTExPQ0FfSCAqLworKyMgICBlbmRpZiAvKiBub3QgX19HTlVDX18gKi8KKysKKysjICBlbmRpZiAvKiBub3QgYWxsb2NhICovCisrCisrIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFIGFsbG9jYQorKworKy8qIEFzc3VtZXMgYSBgY2hhciAqZGVzdGluYXRpb24nIHZhcmlhYmxlLiAgKi8KKysjICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURShzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCQlcCisrICAoZGVzdGluYXRpb24gPSAoY2hhciAqKSBhbGxvY2EgKG5zaXplKSwJCQkJXAorKyAgIG1lbWNweSAoZGVzdGluYXRpb24sIHNvdXJjZSwgb3NpemUpKQorKworKy8qIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgdG8gZnJlZSwgYWZ0ZXIgYWxsb2NhLiAgKi8KKysjICBkZWZpbmUgUkVHRVhfRlJFRShhcmcpICgodm9pZCkwKSAvKiBEbyBub3RoaW5nISAgQnV0IGluaGliaXQgZ2NjIHdhcm5pbmcuICAqLworKworKyMgZW5kaWYgLyogbm90IFJFR0VYX01BTExPQyAqLworKworKy8qIERlZmluZSBob3cgdG8gYWxsb2NhdGUgdGhlIGZhaWx1cmUgc3RhY2suICAqLworKworKyMgaWYgZGVmaW5lZCBSRUxfQUxMT0MgJiYgZGVmaW5lZCBSRUdFWF9NQUxMT0MKKysKKysjICBkZWZpbmUgUkVHRVhfQUxMT0NBVEVfU1RBQ0soc2l6ZSkJCQkJXAorKyAgcl9hbGxvYyAoJmZhaWx1cmVfc3RhY2tfcHRyLCAoc2l6ZSkpCisrIyAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0soc291cmNlLCBvc2l6ZSwgbnNpemUpCQlcCisrICByX3JlX2FsbG9jICgmZmFpbHVyZV9zdGFja19wdHIsIChuc2l6ZSkpCisrIyAgZGVmaW5lIFJFR0VYX0ZSRUVfU1RBQ0socHRyKQkJCQkJXAorKyAgcl9hbGxvY19mcmVlICgmZmFpbHVyZV9zdGFja19wdHIpCisrCisrIyBlbHNlIC8qIG5vdCB1c2luZyByZWxvY2F0aW5nIGFsbG9jYXRvciAqLworKworKyMgIGlmZGVmIFJFR0VYX01BTExPQworKworKyMgICBkZWZpbmUgUkVHRVhfQUxMT0NBVEVfU1RBQ0sgbWFsbG9jCisrIyAgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgb3NpemUsIG5zaXplKSByZWFsbG9jIChzb3VyY2UsIG5zaXplKQorKyMgICBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyBmcmVlCisrCisrIyAgZWxzZSAvKiBub3QgUkVHRVhfTUFMTE9DICovCisrCisrIyAgIGRlZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyBhbGxvY2EKKysKKysjICAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0soc291cmNlLCBvc2l6ZSwgbnNpemUpCQkJXAorKyAgIFJFR0VYX1JFQUxMT0NBVEUgKHNvdXJjZSwgb3NpemUsIG5zaXplKQorKy8qIE5vIG5lZWQgdG8gZXhwbGljaXRseSBmcmVlIGFueXRoaW5nLiAgKi8KKysjICAgZGVmaW5lIFJFR0VYX0ZSRUVfU1RBQ0soYXJnKQorKworKyMgIGVuZGlmIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KKysjIGVuZGlmIC8qIG5vdCB1c2luZyByZWxvY2F0aW5nIGFsbG9jYXRvciAqLworKworKworKy8qIFRydWUgaWYgYHNpemUxJyBpcyBub24tTlVMTCBhbmQgUFRSIGlzIHBvaW50aW5nIGFueXdoZXJlIGluc2lkZQorKyAgIGBzdHJpbmcxJyBvciBqdXN0IHBhc3QgaXRzIGVuZC4gIFRoaXMgd29ya3MgaWYgUFRSIGlzIE5VTEwsIHdoaWNoIGlzCisrICAgYSBnb29kIHRoaW5nLiAgKi8KKysjIGRlZmluZSBGSVJTVF9TVFJJTkdfUChwdHIpIAkJCQkJXAorKyAgKHNpemUxICYmIHN0cmluZzEgPD0gKHB0cikgJiYgKHB0cikgPD0gc3RyaW5nMSArIHNpemUxKQorKworKy8qIChSZSlBbGxvY2F0ZSBOIGl0ZW1zIG9mIHR5cGUgVCB1c2luZyBtYWxsb2MsIG9yIGZhaWwuICAqLworKyMgZGVmaW5lIFRBTExPQyhuLCB0KSAoKHQgKikgbWFsbG9jICgobikgKiBzaXplb2YgKHQpKSkKKysjIGRlZmluZSBSRVRBTExPQyhhZGRyLCBuLCB0KSAoKGFkZHIpID0gKHQgKikgcmVhbGxvYyAoYWRkciwgKG4pICogc2l6ZW9mICh0KSkpCisrIyBkZWZpbmUgUkVUQUxMT0NfSUYoYWRkciwgbiwgdCkgXAorKyAgaWYgKGFkZHIpIFJFVEFMTE9DKChhZGRyKSwgKG4pLCB0KTsgZWxzZSAoYWRkcikgPSBUQUxMT0MgKChuKSwgdCkKKysjIGRlZmluZSBSRUdFWF9UQUxMT0MobiwgdCkgKCh0ICopIFJFR0VYX0FMTE9DQVRFICgobikgKiBzaXplb2YgKHQpKSkKKysKKysjIGRlZmluZSBCWVRFV0lEVEggOCAvKiBJbiBiaXRzLiAgKi8KKysKKysjIGRlZmluZSBTVFJFUShzMSwgczIpICgoc3RyY21wIChzMSwgczIpID09IDApKQorKworKyMgdW5kZWYgTUFYCisrIyB1bmRlZiBNSU4KKysjIGRlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKysjIGRlZmluZSBNSU4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKKysKKyt0eXBlZGVmIGNoYXIgYm9vbGVhbjsKKysjIGRlZmluZSBmYWxzZSAwCisrIyBkZWZpbmUgdHJ1ZSAxCisrCisrc3RhdGljIHJlZ19lcnJjb2RlX3QgYnl0ZV9yZWdleF9jb21waWxlIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKworK3N0YXRpYyBpbnQgYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RvcCk7Cisrc3RhdGljIGludCBieXRlX3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKTsKKytzdGF0aWMgaW50IGJ5dGVfcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKworKyNpZmRlZiBNQlNfU1VQUE9SVAorK3N0YXRpYyByZWdfZXJyY29kZV90IHdjc19yZWdleF9jb21waWxlIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysKKysKKytzdGF0aWMgaW50IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzEsIGludCBjc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzIsIGludCBjc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICptYnNfb2Zmc2V0MSwgaW50ICptYnNfb2Zmc2V0Mik7Cisrc3RhdGljIGludCB3Y3NfcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCk7Cisrc3RhdGljIGludCB3Y3NfcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApOworKyNlbmRpZgorKwwKKysvKiBUaGVzZSBhcmUgdGhlIGNvbW1hbmQgY29kZXMgdGhhdCBhcHBlYXIgaW4gY29tcGlsZWQgcmVndWxhcgorKyAgIGV4cHJlc3Npb25zLiAgU29tZSBvcGNvZGVzIGFyZSBmb2xsb3dlZCBieSBhcmd1bWVudCBieXRlcy4gIEEKKysgICBjb21tYW5kIGNvZGUgY2FuIHNwZWNpZnkgYW55IGludGVycHJldGF0aW9uIHdoYXRzb2V2ZXIgZm9yIGl0cworKyAgIGFyZ3VtZW50cy4gIFplcm8gYnl0ZXMgbWF5IGFwcGVhciBpbiB0aGUgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uLiAgKi8KKysKKyt0eXBlZGVmIGVudW0KKyt7CisrICBub19vcCA9IDAsCisrCisrICAvKiBTdWNjZWVkIHJpZ2h0IGF3YXktLW5vIG1vcmUgYmFja3RyYWNraW5nLiAgKi8KKysgIHN1Y2NlZWQsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSBvbmUgYnl0ZSBnaXZpbmcgbiwgdGhlbiBieSBuIGxpdGVyYWwgYnl0ZXMuICAqLworKyAgZXhhY3RuLAorKworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysJLyogU2FtZSBhcyBleGFjdG4sIGJ1dCBjb250YWlucyBiaW5hcnkgZGF0YS4gICovCisrICBleGFjdG5fYmluLAorKyMgZW5kaWYKKysKKysgICAgICAgIC8qIE1hdGNoZXMgYW55IChtb3JlIG9yIGxlc3MpIGNoYXJhY3Rlci4gICovCisrICBhbnljaGFyLAorKworKyAgICAgICAgLyogTWF0Y2hlcyBhbnkgb25lIGNoYXIgYmVsb25naW5nIHRvIHNwZWNpZmllZCBzZXQuICBGaXJzdAorKyAgICAgICAgICAgZm9sbG93aW5nIGJ5dGUgaXMgbnVtYmVyIG9mIGJpdG1hcCBieXRlcy4gIFRoZW4gY29tZSBieXRlcworKyAgICAgICAgICAgZm9yIGEgYml0bWFwIHNheWluZyB3aGljaCBjaGFycyBhcmUgaW4uICBCaXRzIGluIGVhY2ggYnl0ZQorKyAgICAgICAgICAgYXJlIG9yZGVyZWQgbG93LWJpdC1maXJzdC4gIEEgY2hhcmFjdGVyIGlzIGluIHRoZSBzZXQgaWYgaXRzCisrICAgICAgICAgICBiaXQgaXMgMS4gIEEgY2hhcmFjdGVyIHRvbyBsYXJnZSB0byBoYXZlIGEgYml0IGluIHRoZSBtYXAgaXMKKysgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgbm90IGluIHRoZSBzZXQuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIGZvbGxvd2luZyBlbGVtZW50IGlzIGxlbmd0aCBvZiBjaGFyYWN0ZXIKKysJICAgY2xhc3NlcywgbGVuZ3RoIG9mIGNvbGxhdGluZyBzeW1ib2xzLCBsZW5ndGggb2YgZXF1aXZhbGVuY2UKKysJICAgY2xhc3NlcywgbGVuZ3RoIG9mIGNoYXJhY3RlciByYW5nZXMsIGFuZCBsZW5ndGggb2YgY2hhcmFjdGVycy4KKysJICAgTmV4dCwgY2hhcmFjdGVyIGNsYXNzIGVsZW1lbnQsIGNvbGxhdGluZyBzeW1ib2xzIGVsZW1lbnRzLAorKwkgICBlcXVpdmFsZW5jZSBjbGFzcyBlbGVtZW50cywgcmFuZ2UgZWxlbWVudHMsIGFuZCBjaGFyYWN0ZXIKKysJICAgZWxlbWVudHMgZm9sbG93LgorKwkgICBTZWUgcmVnZXhfY29tcGlsZSBmdW5jdGlvbi4gICovCisrICBjaGFyc2V0LAorKworKyAgICAgICAgLyogU2FtZSBwYXJhbWV0ZXJzIGFzIGNoYXJzZXQsIGJ1dCBtYXRjaCBhbnkgY2hhcmFjdGVyIHRoYXQgaXMKKysgICAgICAgICAgIG5vdCBvbmUgb2YgdGhvc2Ugc3BlY2lmaWVkLiAgKi8KKysgIGNoYXJzZXRfbm90LAorKworKyAgICAgICAgLyogU3RhcnQgcmVtZW1iZXJpbmcgdGhlIHRleHQgdGhhdCBpcyBtYXRjaGVkLCBmb3Igc3RvcmluZyBpbiBhCisrICAgICAgICAgICByZWdpc3Rlci4gIEZvbGxvd2VkIGJ5IG9uZSBieXRlIHdpdGggdGhlIHJlZ2lzdGVyIG51bWJlciwgaW4KKysgICAgICAgICAgIHRoZSByYW5nZSAwIHRvIG9uZSBsZXNzIHRoYW4gdGhlIHBhdHRlcm4gYnVmZmVyJ3MgcmVfbnN1YgorKyAgICAgICAgICAgZmllbGQuICBUaGVuIGZvbGxvd2VkIGJ5IG9uZSBieXRlIHdpdGggdGhlIG51bWJlciBvZiBncm91cHMKKysgICAgICAgICAgIGlubmVyIHRvIHRoaXMgb25lLiAgKFRoaXMgbGFzdCBoYXMgdG8gYmUgcGFydCBvZiB0aGUKKysgICAgICAgICAgIHN0YXJ0X21lbW9yeSBvbmx5IGJlY2F1c2Ugd2UgbmVlZCBpdCBpbiB0aGUgb25fZmFpbHVyZV9qdW1wCisrICAgICAgICAgICBvZiByZV9tYXRjaF8yLikgICovCisrICBzdGFydF9tZW1vcnksCisrCisrICAgICAgICAvKiBTdG9wIHJlbWVtYmVyaW5nIHRoZSB0ZXh0IHRoYXQgaXMgbWF0Y2hlZCBhbmQgc3RvcmUgaXQgaW4gYQorKyAgICAgICAgICAgbWVtb3J5IHJlZ2lzdGVyLiAgRm9sbG93ZWQgYnkgb25lIGJ5dGUgd2l0aCB0aGUgcmVnaXN0ZXIKKysgICAgICAgICAgIG51bWJlciwgaW4gdGhlIHJhbmdlIDAgdG8gb25lIGxlc3MgdGhhbiBgcmVfbnN1YicgaW4gdGhlCisrICAgICAgICAgICBwYXR0ZXJuIGJ1ZmZlciwgYW5kIG9uZSBieXRlIHdpdGggdGhlIG51bWJlciBvZiBpbm5lciBncm91cHMsCisrICAgICAgICAgICBqdXN0IGxpa2UgYHN0YXJ0X21lbW9yeScuICAoV2UgbmVlZCB0aGUgbnVtYmVyIG9mIGlubmVyCisrICAgICAgICAgICBncm91cHMgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55IGVhc3kgd2F5IG9mIGZpbmRpbmcgdGhlCisrICAgICAgICAgICBjb3JyZXNwb25kaW5nIHN0YXJ0X21lbW9yeSB3aGVuIHdlJ3JlIGF0IGEgc3RvcF9tZW1vcnkuKSAgKi8KKysgIHN0b3BfbWVtb3J5LAorKworKyAgICAgICAgLyogTWF0Y2ggYSBkdXBsaWNhdGUgb2Ygc29tZXRoaW5nIHJlbWVtYmVyZWQuIEZvbGxvd2VkIGJ5IG9uZQorKyAgICAgICAgICAgYnl0ZSBjb250YWluaW5nIHRoZSByZWdpc3RlciBudW1iZXIuICAqLworKyAgZHVwbGljYXRlLAorKworKyAgICAgICAgLyogRmFpbCB1bmxlc3MgYXQgYmVnaW5uaW5nIG9mIGxpbmUuICAqLworKyAgYmVnbGluZSwKKysKKysgICAgICAgIC8qIEZhaWwgdW5sZXNzIGF0IGVuZCBvZiBsaW5lLiAgKi8KKysgIGVuZGxpbmUsCisrCisrICAgICAgICAvKiBTdWNjZWVkcyBpZiBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyIChpZiBlbWFjcykgb3IgYXQgYmVnaW5uaW5nCisrICAgICAgICAgICBvZiBzdHJpbmcgdG8gYmUgbWF0Y2hlZCAoaWYgbm90KS4gICovCisrICBiZWdidWYsCisrCisrICAgICAgICAvKiBBbmFsb2dvdXNseSwgZm9yIGVuZCBvZiBidWZmZXIvc3RyaW5nLiAgKi8KKysgIGVuZGJ1ZiwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3byBieXRlIHJlbGF0aXZlIGFkZHJlc3MgdG8gd2hpY2ggdG8ganVtcC4gICovCisrICBqdW1wLAorKworKwkvKiBTYW1lIGFzIGp1bXAsIGJ1dCBtYXJrcyB0aGUgZW5kIG9mIGFuIGFsdGVybmF0aXZlLiAgKi8KKysgIGp1bXBfcGFzdF9hbHQsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIG9mIHBsYWNlIHRvIHJlc3VtZSBhdAorKyAgICAgICAgICAgaW4gY2FzZSBvZiBmYWlsdXJlLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgb25fZmFpbHVyZV9qdW1wLAorKworKyAgICAgICAgLyogTGlrZSBvbl9mYWlsdXJlX2p1bXAsIGJ1dCBwdXNoZXMgYSBwbGFjZWhvbGRlciBpbnN0ZWFkIG9mIHRoZQorKyAgICAgICAgICAgY3VycmVudCBzdHJpbmcgcG9zaXRpb24gd2hlbiBleGVjdXRlZC4gICovCisrICBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAsCisrCisrICAgICAgICAvKiBUaHJvdyBhd2F5IGxhdGVzdCBmYWlsdXJlIHBvaW50IGFuZCB0aGVuIGp1bXAgdG8gZm9sbG93aW5nCisrICAgICAgICAgICB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgcG9wX2ZhaWx1cmVfanVtcCwKKysKKysgICAgICAgIC8qIENoYW5nZSB0byBwb3BfZmFpbHVyZV9qdW1wIGlmIGtub3cgd29uJ3QgaGF2ZSB0byBiYWNrdHJhY2sgdG8KKysgICAgICAgICAgIG1hdGNoOyBvdGhlcndpc2UgY2hhbmdlIHRvIGp1bXAuICBUaGlzIGlzIHVzZWQgdG8ganVtcAorKyAgICAgICAgICAgYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIGEgcmVwZWF0LiAgSWYgd2hhdCBmb2xsb3dzIHRoaXMganVtcAorKyAgICAgICAgICAgY2xlYXJseSB3b24ndCBtYXRjaCB3aGF0IHRoZSByZXBlYXQgZG9lcywgc3VjaCB0aGF0IHdlIGNhbiBiZQorKyAgICAgICAgICAgc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHVzZSBiYWNrdHJhY2tpbmcgb3V0IG9mIHJlcGV0aXRpb25zCisrICAgICAgICAgICBhbHJlYWR5IG1hdGNoZWQsIHRoZW4gd2UgY2hhbmdlIGl0IHRvIGEgcG9wX2ZhaWx1cmVfanVtcC4KKysgICAgICAgICAgIEZvbGxvd2VkIGJ5IHR3by1ieXRlIGFkZHJlc3MuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBtYXliZV9wb3BfanVtcCwKKysKKysgICAgICAgIC8qIEp1bXAgdG8gZm9sbG93aW5nIHR3by1ieXRlIGFkZHJlc3MsIGFuZCBwdXNoIGEgZHVtbXkgZmFpbHVyZQorKyAgICAgICAgICAgcG9pbnQuIFRoaXMgZmFpbHVyZSBwb2ludCB3aWxsIGJlIHRocm93biBhd2F5IGlmIGFuIGF0dGVtcHQKKysgICAgICAgICAgIGlzIG1hZGUgdG8gdXNlIGl0IGZvciBhIGZhaWx1cmUuICBBIGArJyBjb25zdHJ1Y3QgbWFrZXMgdGhpcworKyAgICAgICAgICAgYmVmb3JlIHRoZSBmaXJzdCByZXBlYXQuICBBbHNvIHVzZWQgYXMgYW4gaW50ZXJtZWRpYXJ5IGtpbmQKKysgICAgICAgICAgIG9mIGp1bXAgd2hlbiBjb21waWxpbmcgYW4gYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBkdW1teV9mYWlsdXJlX2p1bXAsCisrCisrCS8qIFB1c2ggYSBkdW1teSBmYWlsdXJlIHBvaW50IGFuZCBjb250aW51ZS4gIFVzZWQgYXQgdGhlIGVuZCBvZgorKwkgICBhbHRlcm5hdGl2ZXMuICAqLworKyAgcHVzaF9kdW1teV9mYWlsdXJlLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcyBhbmQgdHdvLWJ5dGUgbnVtYmVyIG4uCisrICAgICAgICAgICBBZnRlciBtYXRjaGluZyBOIHRpbWVzLCBqdW1wIHRvIHRoZSBhZGRyZXNzIHVwb24gZmFpbHVyZS4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIHN1Y2NlZWRfbiwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MsIGFuZCB0d28tYnl0ZSBudW1iZXIgbi4KKysgICAgICAgICAgIEp1bXAgdG8gdGhlIGFkZHJlc3MgTiB0aW1lcywgdGhlbiBmYWlsLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAganVtcF9uLAorKworKyAgICAgICAgLyogU2V0IHRoZSBmb2xsb3dpbmcgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcyB0byB0aGUKKysgICAgICAgICAgIHN1YnNlcXVlbnQgdHdvLWJ5dGUgbnVtYmVyLiAgVGhlIGFkZHJlc3MgKmluY2x1ZGVzKiB0aGUgdHdvCisrICAgICAgICAgICBieXRlcyBvZiBudW1iZXIuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBzZXRfbnVtYmVyX2F0LAorKworKyAgd29yZGNoYXIsCS8qIE1hdGNoZXMgYW55IHdvcmQtY29uc3RpdHVlbnQgY2hhcmFjdGVyLiAgKi8KKysgIG5vdHdvcmRjaGFyLAkvKiBNYXRjaGVzIGFueSBjaGFyIHRoYXQgaXMgbm90IGEgd29yZC1jb25zdGl0dWVudC4gICovCisrCisrICB3b3JkYmVnLAkvKiBTdWNjZWVkcyBpZiBhdCB3b3JkIGJlZ2lubmluZy4gICovCisrICB3b3JkZW5kLAkvKiBTdWNjZWVkcyBpZiBhdCB3b3JkIGVuZC4gICovCisrCisrICB3b3JkYm91bmQsCS8qIFN1Y2NlZWRzIGlmIGF0IGEgd29yZCBib3VuZGFyeS4gICovCisrICBub3R3b3JkYm91bmQJLyogU3VjY2VlZHMgaWYgbm90IGF0IGEgd29yZCBib3VuZGFyeS4gICovCisrCisrIyBpZmRlZiBlbWFjcworKyAgLGJlZm9yZV9kb3QsCS8qIFN1Y2NlZWRzIGlmIGJlZm9yZSBwb2ludC4gICovCisrICBhdF9kb3QsCS8qIFN1Y2NlZWRzIGlmIGF0IHBvaW50LiAgKi8KKysgIGFmdGVyX2RvdCwJLyogU3VjY2VlZHMgaWYgYWZ0ZXIgcG9pbnQuICAqLworKworKwkvKiBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgd2hvc2Ugc3ludGF4IGlzIHNwZWNpZmllZC4gIEZvbGxvd2VkIGJ5CisrICAgICAgICAgICBhIGJ5dGUgd2hpY2ggY29udGFpbnMgYSBzeW50YXggY29kZSwgZS5nLiwgU3dvcmQuICAqLworKyAgc3ludGF4c3BlYywKKysKKysJLyogTWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHdob3NlIHN5bnRheCBpcyBub3QgdGhhdCBzcGVjaWZpZWQuICAqLworKyAgbm90c3ludGF4c3BlYworKyMgZW5kaWYgLyogZW1hY3MgKi8KKyt9IHJlX29wY29kZV90OworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKwwKKysKKysjaWZkZWYgQllURQorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgVUNIQVJfVCB1bnNpZ25lZCBjaGFyCisrIyBkZWZpbmUgQ09NUElMRURfQlVGRkVSX1ZBUiBidWZwLT5idWZmZXIKKysjIGRlZmluZSBPRkZTRVRfQUREUkVTU19TSVpFIDIKKysjIGRlZmluZSBQUkVGSVgobmFtZSkgYnl0ZV8jI25hbWUKKysjIGRlZmluZSBBUkdfUFJFRklYKG5hbWUpIG5hbWUKKysjIGRlZmluZSBQVVRfQ0hBUihjKSBwdXRjaGFyIChjKQorKyMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorKyMgZGVmaW5lIEZJTkRJRFggZmluZGlkeAorKyNlbHNlCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgIGRlZmluZSBVQ0hBUl9UIHdjaGFyX3QKKysjICBkZWZpbmUgQ09NUElMRURfQlVGRkVSX1ZBUiB3Y19idWZmZXIKKysjICBkZWZpbmUgT0ZGU0VUX0FERFJFU1NfU0laRSAxIC8qIHRoZSBzaXplIHdoaWNoIFNUT1JFX05VTUJFUiBtYWNybyB1c2UgKi8KKysjICBkZWZpbmUgQ0hBUl9DTEFTU19TSVpFICgoX19hbGlnbm9mX18od2N0eXBlX3QpK3NpemVvZih3Y3R5cGVfdCkpL3NpemVvZihDSEFSX1QpKzEpCisrIyAgZGVmaW5lIFBSRUZJWChuYW1lKSB3Y3NfIyNuYW1lCisrIyAgZGVmaW5lIEFSR19QUkVGSVgobmFtZSkgYyMjbmFtZQorKy8qIFNob3VsZCB3ZSB1c2Ugd2lkZSBzdHJlYW0/PyAgKi8KKysjICBkZWZpbmUgUFVUX0NIQVIoYykgcHJpbnRmICgiJUMiLCBjKTsKKysjICBkZWZpbmUgVFJVRSAxCisrIyAgZGVmaW5lIEZBTFNFIDAKKysjICBkZWZpbmUgZmluZGlkeCBmaW5kaWR4d2MKKysjICBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0d2MuaD4KKysjICB1bmRlZiBmaW5kaWR4CisrIyAgZGVmaW5lIEZJTkRJRFggZmluZGlkeHdjCisrIyBlbHNlCisrIyAgaWZkZWYgTUJTX1NVUFBPUlQKKysjICAgZGVmaW5lIFdDSEFSCisrIyAgIGRlZmluZSBJTlNJREVfUkVDVVJTSU9OCisrIyAgIGluY2x1ZGUgInhyZWdleC5jIgorKyMgICB1bmRlZiBJTlNJREVfUkVDVVJTSU9OCisrIyAgZW5kaWYKKysjICBkZWZpbmUgQllURQorKyMgIGRlZmluZSBJTlNJREVfUkVDVVJTSU9OCisrIyAgaW5jbHVkZSAieHJlZ2V4LmMiCisrIyAgdW5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKy8qIENvbW1vbiBvcGVyYXRpb25zIG9uIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysKKysvKiBTdG9yZSBOVU1CRVIgaW4gdHdvIGNvbnRpZ3VvdXMgYnl0ZXMgc3RhcnRpbmcgYXQgREVTVElOQVRJT04uICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSBzdG9yZSBOVU1CRVIgaW4gMSBlbGVtZW50LiAgKi8KKysKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIFNUT1JFX05VTUJFUihkZXN0aW5hdGlvbiwgbnVtYmVyKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAqKGRlc3RpbmF0aW9uKSA9IChVQ0hBUl9UKShudW1iZXIpOwkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIFNUT1JFX05VTUJFUihkZXN0aW5hdGlvbiwgbnVtYmVyKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pWzBdID0gKG51bWJlcikgJiAwMzc3OwkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pWzFdID0gKG51bWJlcikgPj4gODsJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIFNhbWUgYXMgU1RPUkVfTlVNQkVSLCBleGNlcHQgaW5jcmVtZW50IERFU1RJTkFUSU9OIHRvCisrICAgdGhlIGJ5dGUgYWZ0ZXIgd2hlcmUgdGhlIG51bWJlciBpcyBzdG9yZWQuICBUaGVyZWZvcmUsIERFU1RJTkFUSU9OCisrICAgbXVzdCBiZSBhbiBsdmFsdWUuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSBzdG9yZSBOVU1CRVIgaW4gMSBlbGVtZW50LiAgKi8KKysKKysjIGRlZmluZSBTVE9SRV9OVU1CRVJfQU5EX0lOQ1IoZGVzdGluYXRpb24sIG51bWJlcikJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBTVE9SRV9OVU1CRVIgKGRlc3RpbmF0aW9uLCBudW1iZXIpOwkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrLyogUHV0IGludG8gREVTVElOQVRJT04gYSBudW1iZXIgc3RvcmVkIGluIHR3byBjb250aWd1b3VzIGJ5dGVzIHN0YXJ0aW5nCisrICAgYXQgU09VUkNFLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2Ugc3RvcmUgTlVNQkVSIGluIDEgZWxlbWVudC4gICovCisrCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBFWFRSQUNUX05VTUJFUihkZXN0aW5hdGlvbiwgc291cmNlKQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pID0gKihzb3VyY2UpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRVhUUkFDVF9OVU1CRVIoZGVzdGluYXRpb24sIHNvdXJjZSkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSA9ICooc291cmNlKSAmIDAzNzc7CQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgKz0gU0lHTl9FWFRFTkRfQ0hBUiAoKigoc291cmNlKSArIDEpKSA8PCA4OwkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmCisrCisrIyBpZmRlZiBERUJVRworK3N0YXRpYyB2b2lkIFBSRUZJWChleHRyYWN0X251bWJlcikgKGludCAqZGVzdCwgVUNIQVJfVCAqc291cmNlKTsKKytzdGF0aWMgdm9pZAorK1BSRUZJWChleHRyYWN0X251bWJlcikgKGludCAqZGVzdCwgVUNIQVJfVCAqc291cmNlKQorK3sKKysjICBpZmRlZiBXQ0hBUgorKyAgKmRlc3QgPSAqc291cmNlOworKyMgIGVsc2UgLyogQllURSAqLworKyAgaW50IHRlbXAgPSBTSUdOX0VYVEVORF9DSEFSICgqKHNvdXJjZSArIDEpKTsKKysgICpkZXN0ID0gKnNvdXJjZSAmIDAzNzc7CisrICAqZGVzdCArPSB0ZW1wIDw8IDg7CisrIyAgZW5kaWYKKyt9CisrCisrIyAgaWZuZGVmIEVYVFJBQ1RfTUFDUk9TIC8qIFRvIGRlYnVnIHRoZSBtYWNyb3MuICAqLworKyMgICB1bmRlZiBFWFRSQUNUX05VTUJFUgorKyMgICBkZWZpbmUgRVhUUkFDVF9OVU1CRVIoZGVzdCwgc3JjKSBQUkVGSVgoZXh0cmFjdF9udW1iZXIpICgmZGVzdCwgc3JjKQorKyMgIGVuZGlmIC8qIG5vdCBFWFRSQUNUX01BQ1JPUyAqLworKworKyMgZW5kaWYgLyogREVCVUcgKi8KKysKKysvKiBTYW1lIGFzIEVYVFJBQ1RfTlVNQkVSLCBleGNlcHQgaW5jcmVtZW50IFNPVVJDRSB0byBhZnRlciB0aGUgbnVtYmVyLgorKyAgIFNPVVJDRSBtdXN0IGJlIGFuIGx2YWx1ZS4gICovCisrCisrIyBkZWZpbmUgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IoZGVzdGluYXRpb24sIHNvdXJjZSkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBFWFRSQUNUX05VTUJFUiAoZGVzdGluYXRpb24sIHNvdXJjZSk7CQkJCVwKKysgICAgKHNvdXJjZSkgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsgCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgaWZkZWYgREVCVUcKKytzdGF0aWMgdm9pZCBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpIChpbnQgKmRlc3RpbmF0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKipzb3VyY2UpOworK3N0YXRpYyB2b2lkCisrUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoaW50ICpkZXN0aW5hdGlvbiwgVUNIQVJfVCAqKnNvdXJjZSkKKyt7CisrICBQUkVGSVgoZXh0cmFjdF9udW1iZXIpIChkZXN0aW5hdGlvbiwgKnNvdXJjZSk7CisrICAqc291cmNlICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrfQorKworKyMgIGlmbmRlZiBFWFRSQUNUX01BQ1JPUworKyMgICB1bmRlZiBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUgorKyMgICBkZWZpbmUgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IoZGVzdCwgc3JjKSBcCisrICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmZGVzdCwgJnNyYykKKysjICBlbmRpZiAvKiBub3QgRVhUUkFDVF9NQUNST1MgKi8KKysKKysjIGVuZGlmIC8qIERFQlVHICovCisrCisrDAorKworKy8qIElmIERFQlVHIGlzIGRlZmluZWQsIFJlZ2V4IHByaW50cyBtYW55IHZvbHVtaW5vdXMgbWVzc2FnZXMgYWJvdXQgd2hhdAorKyAgIGl0IGlzIGRvaW5nIChpZiB0aGUgdmFyaWFibGUgYGRlYnVnJyBpcyBub256ZXJvKS4gIElmIGxpbmtlZCB3aXRoIHRoZQorKyAgIG1haW4gcHJvZ3JhbSBpbiBgaXJlZ2V4LmMnLCB5b3UgY2FuIGVudGVyIHBhdHRlcm5zIGFuZCBzdHJpbmdzCisrICAgaW50ZXJhY3RpdmVseS4gIEFuZCBpZiBsaW5rZWQgd2l0aCB0aGUgbWFpbiBwcm9ncmFtIGluIGBtYWluLmMnIGFuZAorKyAgIHRoZSBvdGhlciB0ZXN0IGZpbGVzLCB5b3UgY2FuIHJ1biB0aGUgYWxyZWFkeS13cml0dGVuIHRlc3RzLiAgKi8KKysKKysjIGlmZGVmIERFQlVHCisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorKworKy8qIFdlIHVzZSBzdGFuZGFyZCBJL08gZm9yIGRlYnVnZ2luZy4gICovCisrIyAgIGluY2x1ZGUgPHN0ZGlvLmg+CisrCisrLyogSXQgaXMgdXNlZnVsIHRvIHRlc3QgdGhpbmdzIHRoYXQgYGBtdXN0JycgYmUgdHJ1ZSB3aGVuIGRlYnVnZ2luZy4gICovCisrIyAgIGluY2x1ZGUgPGFzc2VydC5oPgorKworK3N0YXRpYyBpbnQgZGVidWc7CisrCisrIyAgIGRlZmluZSBERUJVR19TVEFURU1FTlQoZSkgZQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQxKHgpIGlmIChkZWJ1ZykgcHJpbnRmICh4KQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQyKHgxLCB4MikgaWYgKGRlYnVnKSBwcmludGYgKHgxLCB4MikKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMyh4MSwgeDIsIHgzKSBpZiAoZGVidWcpIHByaW50ZiAoeDEsIHgyLCB4MykKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UNCh4MSwgeDIsIHgzLCB4NCkgaWYgKGRlYnVnKSBwcmludGYgKHgxLCB4MiwgeDMsIHg0KQorKyMgIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysjICBkZWZpbmUgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTihwLCBzLCBlKSAJCQlcCisrICBpZiAoZGVidWcpIFBSRUZJWChwcmludF9wYXJ0aWFsX2NvbXBpbGVkX3BhdHRlcm4pIChzLCBlKQorKyMgIGRlZmluZSBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HKHcsIHMxLCBzejEsIHMyLCBzejIpCQlcCisrICBpZiAoZGVidWcpIFBSRUZJWChwcmludF9kb3VibGVfc3RyaW5nKSAodywgczEsIHN6MSwgczIsIHN6MikKKysKKysKKysvKiBQcmludCB0aGUgZmFzdG1hcCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLiAgKi8KKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrdm9pZAorK3ByaW50X2Zhc3RtYXAgKGNoYXIgKmZhc3RtYXApCisreworKyAgdW5zaWduZWQgd2FzX2FfcmFuZ2UgPSAwOworKyAgdW5zaWduZWQgaSA9IDA7CisrCisrICB3aGlsZSAoaSA8ICgxIDw8IEJZVEVXSURUSCkpCisrICAgIHsKKysgICAgICBpZiAoZmFzdG1hcFtpKytdKQorKwl7CisrCSAgd2FzX2FfcmFuZ2UgPSAwOworKyAgICAgICAgICBwdXRjaGFyIChpIC0gMSk7CisrICAgICAgICAgIHdoaWxlIChpIDwgKDEgPDwgQllURVdJRFRIKSAgJiYgIGZhc3RtYXBbaV0pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgd2FzX2FfcmFuZ2UgPSAxOworKyAgICAgICAgICAgICAgaSsrOworKyAgICAgICAgICAgIH0KKysJICBpZiAod2FzX2FfcmFuZ2UpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgcHJpbnRmICgiLSIpOworKyAgICAgICAgICAgICAgcHV0Y2hhciAoaSAtIDEpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgcHV0Y2hhciAoJ1xuJyk7CisrfQorKyMgIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysKKysvKiBQcmludCBhIGNvbXBpbGVkIHBhdHRlcm4gc3RyaW5nIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0sIHN0YXJ0aW5nIGF0CisrICAgdGhlIFNUQVJUIHBvaW50ZXIgaW50byBpdCBhbmQgZW5kaW5nIGp1c3QgYmVmb3JlIHRoZSBwb2ludGVyIEVORC4gICovCisrCisrdm9pZAorK1BSRUZJWChwcmludF9wYXJ0aWFsX2NvbXBpbGVkX3BhdHRlcm4pIChVQ0hBUl9UICpzdGFydCwgVUNIQVJfVCAqZW5kKQorK3sKKysgIGludCBtY250LCBtY250MjsKKysgIFVDSEFSX1QgKnAxOworKyAgVUNIQVJfVCAqcCA9IHN0YXJ0OworKyAgVUNIQVJfVCAqcGVuZCA9IGVuZDsKKysKKysgIGlmIChzdGFydCA9PSBOVUxMKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiKG51bGwpXG4iKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgIC8qIExvb3Agb3ZlciBwYXR0ZXJuIGNvbW1hbmRzLiAgKi8KKysgIHdoaWxlIChwIDwgcGVuZCkKKysgICAgeworKyMgIGlmZGVmIF9MSUJDCisrICAgICAgcHJpbnRmICgiJXRkOlx0IiwgcCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAgICAgcHJpbnRmICgiJWxkOlx0IiwgKGxvbmcgaW50KSAocCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysKKysgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnArKykKKysJeworKyAgICAgICAgY2FzZSBub19vcDoKKysgICAgICAgICAgcHJpbnRmICgiL25vX29wIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGV4YWN0bjoKKysJICBtY250ID0gKnArKzsKKysgICAgICAgICAgcHJpbnRmICgiL2V4YWN0bi8lZCIsIG1jbnQpOworKyAgICAgICAgICBkbworKwkgICAgeworKyAgICAgICAgICAgICAgcHV0Y2hhciAoJy8nKTsKKysJICAgICAgUFVUX0NIQVIgKCpwKyspOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgd2hpbGUgKC0tbWNudCk7CisrICAgICAgICAgIGJyZWFrOworKworKyMgIGlmZGVmIE1CU19TVVBQT1JUCisrCWNhc2UgZXhhY3RuX2JpbjoKKysJICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvZXhhY3RuX2Jpbi8lZCIsIG1jbnQpOworKyAgICAgICAgICBkbworKwkgICAgeworKwkgICAgICBwcmludGYoIi8lbHgiLCAobG9uZyBpbnQpICpwKyspOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgd2hpbGUgKC0tbWNudCk7CisrICAgICAgICAgIGJyZWFrOworKyMgIGVuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisrCWNhc2Ugc3RhcnRfbWVtb3J5OgorKyAgICAgICAgICBtY250ID0gKnArKzsKKysgICAgICAgICAgcHJpbnRmICgiL3N0YXJ0X21lbW9yeS8lZC8lbGQiLCBtY250LCAobG9uZyBpbnQpICpwKyspOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzdG9wX21lbW9yeToKKysgICAgICAgICAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiL3N0b3BfbWVtb3J5LyVkLyVsZCIsIG1jbnQsIChsb25nIGludCkgKnArKyk7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGR1cGxpY2F0ZToKKysJICBwcmludGYgKCIvZHVwbGljYXRlLyVsZCIsIChsb25nIGludCkgKnArKyk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgYW55Y2hhcjoKKysJICBwcmludGYgKCIvYW55Y2hhciIpOworKwkgIGJyZWFrOworKworKwljYXNlIGNoYXJzZXQ6CisrICAgICAgICBjYXNlIGNoYXJzZXRfbm90OgorKyAgICAgICAgICB7CisrIyAgaWZkZWYgV0NIQVIKKysJICAgIGludCBpLCBsZW5ndGg7CisrCSAgICB3Y2hhcl90ICp3b3JrcCA9IHA7CisrCSAgICBwcmludGYgKCIvY2hhcnNldCBbJXMiLAorKwkgICAgICAgICAgICAocmVfb3Bjb2RlX3QpICood29ya3AgLSAxKSA9PSBjaGFyc2V0X25vdCA/ICJeIiA6ICIiKTsKKysJICAgIHAgKz0gNTsKKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcyAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7IGkrKykKKysJICAgICAgcHJpbnRmKCJbOiVseDpdIiwgKGxvbmcgaW50KSAqcCsrKTsKKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2wgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOykKKysJICAgICAgeworKwkJcHJpbnRmKCJbLiIpOworKwkJd2hpbGUoKnAgIT0gMCkKKysJCSAgUFVUX0NIQVIoKGkrKywqcCsrKSk7CisrCQlpKysscCsrOworKwkJcHJpbnRmKCIuXSIpOworKwkgICAgICB9CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzcyAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7KQorKwkgICAgICB7CisrCQlwcmludGYoIls9Iik7CisrCQl3aGlsZSgqcCAhPSAwKQorKwkJICBQVVRfQ0hBUigoaSsrLCpwKyspKTsKKysJCWkrKyxwKys7CisrCQlwcmludGYoIj1dIik7CisrCSAgICAgIH0KKysJICAgIGxlbmd0aCA9ICp3b3JrcCsrOyAvKiB0aGUgbGVuZ3RoIG9mIGNoYXJfcmFuZ2UgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOyBpKyspCisrCSAgICAgIHsKKysJCXdjaGFyX3QgcmFuZ2Vfc3RhcnQgPSAqcCsrOworKwkJd2NoYXJfdCByYW5nZV9lbmQgPSAqcCsrOworKwkJcHJpbnRmKCIlQy0lQyIsIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQpOworKwkgICAgICB9CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjaGFyICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDsgaSsrKQorKwkgICAgICBwcmludGYoIiVDIiwgKnArKyk7CisrCSAgICBwdXRjaGFyICgnXScpOworKyMgIGVsc2UKKysgICAgICAgICAgICByZWdpc3RlciBpbnQgYywgbGFzdCA9IC0xMDA7CisrCSAgICByZWdpc3RlciBpbnQgaW5fcmFuZ2UgPSAwOworKworKwkgICAgcHJpbnRmICgiL2NoYXJzZXQgWyVzIiwKKysJICAgICAgICAgICAgKHJlX29wY29kZV90KSAqKHAgLSAxKSA9PSBjaGFyc2V0X25vdCA/ICJeIiA6ICIiKTsKKysKKysgICAgICAgICAgICBhc3NlcnQgKHAgKyAqcCA8IHBlbmQpOworKworKyAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAyNTY7IGMrKykKKysJICAgICAgaWYgKGMgLyA4IDwgKnAKKysJCSAgJiYgKHBbMSArIChjLzgpXSAmICgxIDw8IChjICUgOCkpKSkKKysJCXsKKysJCSAgLyogQXJlIHdlIHN0YXJ0aW5nIGEgcmFuZ2U/ICAqLworKwkJICBpZiAobGFzdCArIDEgPT0gYyAmJiAhIGluX3JhbmdlKQorKwkJICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKCctJyk7CisrCQkgICAgICBpbl9yYW5nZSA9IDE7CisrCQkgICAgfQorKwkJICAvKiBIYXZlIHdlIGJyb2tlbiBhIHJhbmdlPyAgKi8KKysJCSAgZWxzZSBpZiAobGFzdCArIDEgIT0gYyAmJiBpbl9yYW5nZSkKKysgICAgICAgICAgICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKGxhc3QpOworKwkJICAgICAgaW5fcmFuZ2UgPSAwOworKwkJICAgIH0KKysKKysJCSAgaWYgKCEgaW5fcmFuZ2UpCisrCQkgICAgcHV0Y2hhciAoYyk7CisrCisrCQkgIGxhc3QgPSBjOworKyAgICAgICAgICAgICAgfQorKworKwkgICAgaWYgKGluX3JhbmdlKQorKwkgICAgICBwdXRjaGFyIChsYXN0KTsKKysKKysJICAgIHB1dGNoYXIgKCddJyk7CisrCisrCSAgICBwICs9IDEgKyAqcDsKKysjICBlbmRpZiAvKiBXQ0hBUiAqLworKwkgIH0KKysJICBicmVhazsKKysKKysJY2FzZSBiZWdsaW5lOgorKwkgIHByaW50ZiAoIi9iZWdsaW5lIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGVuZGxpbmU6CisrICAgICAgICAgIHByaW50ZiAoIi9lbmRsaW5lIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCB0byAlbGQiLAorKwkJICAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvZHVtbXlfZmFpbHVyZV9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9kdW1teV9mYWlsdXJlX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHB1c2hfZHVtbXlfZmFpbHVyZToKKysgICAgICAgICAgcHJpbnRmICgiL3B1c2hfZHVtbXlfZmFpbHVyZSIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9tYXliZV9wb3BfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvbWF5YmVfcG9wX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrCSAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL3BvcF9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL3BvcF9mYWlsdXJlX2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXBfcGFzdF9hbHQ6CisrCSAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL2p1bXBfcGFzdF9hbHQgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL2p1bXBfcGFzdF9hbHQgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXA6CisrCSAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL2p1bXAgdG8gJWxkIiwgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCSAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHN1Y2NlZWRfbjoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysJICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudDIsICZwKTsKKysjICBpZmRlZiBfTElCQworKwkgIHByaW50ZiAoIi9zdWNjZWVkX24gdG8gJXRkLCAlZCB0aW1lcyIsIHAxIC0gc3RhcnQsIG1jbnQyKTsKKysjICBlbHNlCisrCSAgcHJpbnRmICgiL3N1Y2NlZWRfbiB0byAlbGQsICVkIHRpbWVzIiwKKysJCSAgKGxvbmcgaW50KSAocDEgLSBzdGFydCksIG1jbnQyKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcF9uOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKwkgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250MiwgJnApOworKwkgIHByaW50ZiAoIi9qdW1wX24gdG8gJWQsICVkIHRpbWVzIiwgcDEgLSBzdGFydCwgbWNudDIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ugc2V0X251bWJlcl9hdDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysJICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudDIsICZwKTsKKysjICBpZmRlZiBfTElCQworKwkgIHByaW50ZiAoIi9zZXRfbnVtYmVyX2F0IGxvY2F0aW9uICV0ZCB0byAlZCIsIHAxIC0gc3RhcnQsIG1jbnQyKTsKKysjICBlbHNlCisrCSAgcHJpbnRmICgiL3NldF9udW1iZXJfYXQgbG9jYXRpb24gJWxkIHRvICVkIiwKKysJCSAgKGxvbmcgaW50KSAocDEgLSBzdGFydCksIG1jbnQyKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ugd29yZGJvdW5kOgorKwkgIHByaW50ZiAoIi93b3JkYm91bmQiKTsKKysJICBicmVhazsKKysKKysJY2FzZSBub3R3b3JkYm91bmQ6CisrCSAgcHJpbnRmICgiL25vdHdvcmRib3VuZCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSB3b3JkYmVnOgorKwkgIHByaW50ZiAoIi93b3JkYmVnIik7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugd29yZGVuZDoKKysJICBwcmludGYgKCIvd29yZGVuZCIpOworKwkgIGJyZWFrOworKworKyMgIGlmZGVmIGVtYWNzCisrCWNhc2UgYmVmb3JlX2RvdDoKKysJICBwcmludGYgKCIvYmVmb3JlX2RvdCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBhdF9kb3Q6CisrCSAgcHJpbnRmICgiL2F0X2RvdCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBhZnRlcl9kb3Q6CisrCSAgcHJpbnRmICgiL2FmdGVyX2RvdCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzeW50YXhzcGVjOgorKyAgICAgICAgICBwcmludGYgKCIvc3ludGF4c3BlYyIpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi8lZCIsIG1jbnQpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBub3RzeW50YXhzcGVjOgorKyAgICAgICAgICBwcmludGYgKCIvbm90c3ludGF4c3BlYyIpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi8lZCIsIG1jbnQpOworKwkgIGJyZWFrOworKyMgIGVuZGlmIC8qIGVtYWNzICovCisrCisrCWNhc2Ugd29yZGNoYXI6CisrCSAgcHJpbnRmICgiL3dvcmRjaGFyIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIG5vdHdvcmRjaGFyOgorKwkgIHByaW50ZiAoIi9ub3R3b3JkY2hhciIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBiZWdidWY6CisrCSAgcHJpbnRmICgiL2JlZ2J1ZiIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBlbmRidWY6CisrCSAgcHJpbnRmICgiL2VuZGJ1ZiIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIHByaW50ZiAoIj8lbGQiLCAobG9uZyBpbnQpICoocC0xKSk7CisrCX0KKysKKysgICAgICBwdXRjaGFyICgnXG4nKTsKKysgICAgfQorKworKyMgIGlmZGVmIF9MSUJDCisrICBwcmludGYgKCIldGQ6XHRlbmQgb2YgcGF0dGVybi5cbiIsIHAgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgcHJpbnRmICgiJWxkOlx0ZW5kIG9mIHBhdHRlcm4uXG4iLCAobG9uZyBpbnQpIChwIC0gc3RhcnQpKTsKKysjICBlbmRpZgorK30KKysKKysKKyt2b2lkCisrUFJFRklYKHByaW50X2NvbXBpbGVkX3BhdHRlcm4pIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyAgVUNIQVJfVCAqYnVmZmVyID0gKFVDSEFSX1QqKSBidWZwLT5idWZmZXI7CisrCisrICBQUkVGSVgocHJpbnRfcGFydGlhbF9jb21waWxlZF9wYXR0ZXJuKSAoYnVmZmVyLCBidWZmZXIKKysJCQkJICArIGJ1ZnAtPnVzZWQgLyBzaXplb2YoVUNIQVJfVCkpOworKyAgcHJpbnRmICgiJWxkIGJ5dGVzIHVzZWQvJWxkIGJ5dGVzIGFsbG9jYXRlZC5cbiIsCisrCSAgYnVmcC0+dXNlZCwgYnVmcC0+YWxsb2NhdGVkKTsKKysKKysgIGlmIChidWZwLT5mYXN0bWFwX2FjY3VyYXRlICYmIGJ1ZnAtPmZhc3RtYXApCisrICAgIHsKKysgICAgICBwcmludGYgKCJmYXN0bWFwOiAiKTsKKysgICAgICBwcmludF9mYXN0bWFwIChidWZwLT5mYXN0bWFwKTsKKysgICAgfQorKworKyMgIGlmZGVmIF9MSUJDCisrICBwcmludGYgKCJyZV9uc3ViOiAlWmRcdCIsIGJ1ZnAtPnJlX25zdWIpOworKyMgIGVsc2UKKysgIHByaW50ZiAoInJlX25zdWI6ICVsZFx0IiwgKGxvbmcgaW50KSBidWZwLT5yZV9uc3ViKTsKKysjICBlbmRpZgorKyAgcHJpbnRmICgicmVnc19hbGxvYzogJWRcdCIsIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkKTsKKysgIHByaW50ZiAoImNhbl9iZV9udWxsOiAlZFx0IiwgYnVmcC0+Y2FuX2JlX251bGwpOworKyAgcHJpbnRmICgibmV3bGluZV9hbmNob3I6ICVkXG4iLCBidWZwLT5uZXdsaW5lX2FuY2hvcik7CisrICBwcmludGYgKCJub19zdWI6ICVkXHQiLCBidWZwLT5ub19zdWIpOworKyAgcHJpbnRmICgibm90X2JvbDogJWRcdCIsIGJ1ZnAtPm5vdF9ib2wpOworKyAgcHJpbnRmICgibm90X2VvbDogJWRcdCIsIGJ1ZnAtPm5vdF9lb2wpOworKyAgcHJpbnRmICgic3ludGF4OiAlbHhcbiIsIGJ1ZnAtPnN5bnRheCk7CisrICAvKiBQZXJoYXBzIHdlIHNob3VsZCBwcmludCB0aGUgdHJhbnNsYXRlIHRhYmxlPyAgKi8KKyt9CisrCisrCisrdm9pZAorK1BSRUZJWChwcmludF9kb3VibGVfc3RyaW5nKSAoY29uc3QgQ0hBUl9UICp3aGVyZSwgY29uc3QgQ0hBUl9UICpzdHJpbmcxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUxLCBjb25zdCBDSEFSX1QgKnN0cmluZzIsIGludCBzaXplMikKKyt7CisrICBpbnQgdGhpc19jaGFyOworKworKyAgaWYgKHdoZXJlID09IE5VTEwpCisrICAgIHByaW50ZiAoIihudWxsKSIpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgaW50IGNudDsKKysKKysgICAgICBpZiAoRklSU1RfU1RSSU5HX1AgKHdoZXJlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgZm9yICh0aGlzX2NoYXIgPSB3aGVyZSAtIHN0cmluZzE7IHRoaXNfY2hhciA8IHNpemUxOyB0aGlzX2NoYXIrKykKKysJICAgIFBVVF9DSEFSIChzdHJpbmcxW3RoaXNfY2hhcl0pOworKworKyAgICAgICAgICB3aGVyZSA9IHN0cmluZzI7CisrICAgICAgICB9CisrCisrICAgICAgY250ID0gMDsKKysgICAgICBmb3IgKHRoaXNfY2hhciA9IHdoZXJlIC0gc3RyaW5nMjsgdGhpc19jaGFyIDwgc2l6ZTI7IHRoaXNfY2hhcisrKQorKwl7CisrCSAgUFVUX0NIQVIgKHN0cmluZzJbdGhpc19jaGFyXSk7CisrCSAgaWYgKCsrY250ID4gMTAwKQorKwkgICAgeworKwkgICAgICBmcHV0cyAoIi4uLiIsIHN0ZG91dCk7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIH0KKyt9CisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorK3ZvaWQKKytwcmludGNoYXIgKGludCBjKQorK3sKKysgIHB1dGMgKGMsIHN0ZGVycik7CisrfQorKyMgIGVuZGlmCisrCisrIyBlbHNlIC8qIG5vdCBERUJVRyAqLworKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICAgdW5kZWYgYXNzZXJ0CisrIyAgIGRlZmluZSBhc3NlcnQoZSkKKysKKysjICAgZGVmaW5lIERFQlVHX1NUQVRFTUVOVChlKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQxKHgpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDIoeDEsIHgyKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQzKHgxLCB4MiwgeDMpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDQoeDEsIHgyLCB4MywgeDQpCisrIyAgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKyMgIGRlZmluZSBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOKHAsIHMsIGUpCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcodywgczEsIHN6MSwgczIsIHN6MikKKysKKysjIGVuZGlmIC8qIG5vdCBERUJVRyAqLworKworKwwKKysKKysjIGlmZGVmIFdDSEFSCisrLyogVGhpcyAgY29udmVydCBhIG11bHRpYnl0ZSBzdHJpbmcgdG8gYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcuCisrICAgQW5kIHdyaXRlIHRoZWlyIGNvcnJlc3BvbmRhbmNlcyB0byBvZmZzZXRfYnVmZmVyKHNlZSBiZWxvdykKKysgICBhbmQgd3JpdGUgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgdG8gaXNfYmluYXJ5LgorKyAgIFRoaXMgYXNzdW1lIGludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlcyBhcyBiaW5hcnkgZGF0YS4KKysgICBXZSBhc3N1bWUgb2Zmc2V0X2J1ZmZlciBhbmQgaXNfYmluYXJ5IGlzIGFscmVhZHkgYWxsb2NhdGVkCisrICAgZW5vdWdoIHNwYWNlLiAgKi8KKysKKytzdGF0aWMgc2l6ZV90IGNvbnZlcnRfbWJzX3RvX3djcyAoQ0hBUl9UICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsCisrCQkJCSAgc2l6ZV90IGxlbiwgaW50ICpvZmZzZXRfYnVmZmVyLAorKwkJCQkgIGNoYXIgKmlzX2JpbmFyeSk7Cisrc3RhdGljIHNpemVfdAorK2NvbnZlcnRfbWJzX3RvX3djcyAoQ0hBUl9UICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKnNyYywgc2l6ZV90IGxlbiwKKysgICAgICAgICAgICAgICAgICAgIGludCAqb2Zmc2V0X2J1ZmZlciwgY2hhciAqaXNfYmluYXJ5KQorKyAgICAgLyogSXQgaG9sZCBjb3JyZXNwb25kYW5jZXMgYmV0d2VlbiBzcmMoY2hhciBzdHJpbmcpIGFuZAorKwlkZXN0KHdjaGFyX3Qgc3RyaW5nKSBmb3Igb3B0aW1pemF0aW9uLgorKwllLmcuIHNyYyAgPSAieHh4eXp6IgorKyAgICAgICAgICAgICBkZXN0ID0geydYJywgJ1knLCAnWid9CisrCSAgICAgIChlYWNoICJ4eHgiLCAieSIgYW5kICJ6eiIgcmVwcmVzZW50IG9uZSBtdWx0aWJ5dGUgY2hhcmFjdGVyCisrCSAgICAgICBjb3JyZXNwb25kaW5nIHRvICdYJywgJ1knIGFuZCAnWicuKQorKwkgIG9mZnNldF9idWZmZXIgPSB7MCwgMCszKCJ4eHgiKSwgMCszKzEoInkiKSwgMCszKzErMigienoiKX0KKysJICAJICAgICAgICA9IHswLCAzLCA0LCA2fQorKyAgICAgKi8KKyt7CisrICB3Y2hhcl90ICpwZGVzdCA9IGRlc3Q7CisrICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc3JjID0gc3JjOworKyAgc2l6ZV90IHdjX2NvdW50ID0gMDsKKysKKysgIG1ic3RhdGVfdCBtYnM7CisrICBpbnQgaSwgY29uc3VtZWQ7CisrICBzaXplX3QgbWJfcmVtYWluID0gbGVuOworKyAgc2l6ZV90IG1iX2NvdW50ID0gMDsKKysKKysgIC8qIEluaXRpYWxpemUgdGhlIGNvbnZlcnNpb24gc3RhdGUuICAqLworKyAgbWVtc2V0ICgmbWJzLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgb2Zmc2V0X2J1ZmZlclswXSA9IDA7CisrICBmb3IoIDsgbWJfcmVtYWluID4gMCA7ICsrd2NfY291bnQsICsrcGRlc3QsIG1iX3JlbWFpbiAtPSBjb25zdW1lZCwKKysJIHBzcmMgKz0gY29uc3VtZWQpCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBjb25zdW1lZCA9IF9fbWJydG93YyAocGRlc3QsIHBzcmMsIG1iX3JlbWFpbiwgJm1icyk7CisrI2Vsc2UKKysgICAgICBjb25zdW1lZCA9IG1icnRvd2MgKHBkZXN0LCBwc3JjLCBtYl9yZW1haW4sICZtYnMpOworKyNlbmRpZgorKworKyAgICAgIGlmIChjb25zdW1lZCA8PSAwKQorKwkvKiBmYWlsZWQgdG8gY29udmVydC4gbWF5YmUgc3JjIGNvbnRhaW5zIGJpbmFyeSBkYXRhLgorKwkgICBTbyB3ZSBjb25zdW1lIDEgYnl0ZSBtYW51YWx5LiAgKi8KKysJeworKwkgICpwZGVzdCA9ICpwc3JjOworKwkgIGNvbnN1bWVkID0gMTsKKysJICBpc19iaW5hcnlbd2NfY291bnRdID0gVFJVRTsKKysJfQorKyAgICAgIGVsc2UKKysJaXNfYmluYXJ5W3djX2NvdW50XSA9IEZBTFNFOworKyAgICAgIC8qIEluIHNqaXMgZW5jb2RpbmcsIHdlIHVzZSB5ZW4gc2lnbiBhcyBlc2NhcGUgY2hhcmFjdGVyIGluCisrCSBwbGFjZSBvZiByZXZlcnNlIHNvbGlkdXMuIFNvIHdlIGNvbnZlcnQgMHg1Yyh5ZW4gc2lnbiBpbgorKwkgc2ppcykgdG8gbm90IDB4YTUoeWVuIHNpZ24gaW4gVUNTMikgYnV0IDB4NWMocmV2ZXJzZQorKwkgc29saWR1cyBpbiBVQ1MyKS4gICovCisrICAgICAgaWYgKGNvbnN1bWVkID09IDEgJiYgKGludCkgKnBzcmMgPT0gMHg1YyAmJiAoaW50KSAqcGRlc3QgPT0gMHhhNSkKKysJKnBkZXN0ID0gKHdjaGFyX3QpICpwc3JjOworKworKyAgICAgIG9mZnNldF9idWZmZXJbd2NfY291bnQgKyAxXSA9IG1iX2NvdW50ICs9IGNvbnN1bWVkOworKyAgICB9CisrCisrICAvKiBGaWxsIHJlbWFpbiBvZiB0aGUgYnVmZmVyIHdpdGggc2VudGluZWwuICAqLworKyAgZm9yIChpID0gd2NfY291bnQgKyAxIDsgaSA8PSBsZW4gOyBpKyspCisrICAgIG9mZnNldF9idWZmZXJbaV0gPSBtYl9jb3VudCArIDE7CisrCisrICByZXR1cm4gd2NfY291bnQ7CisrfQorKworKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIFNldCBieSBgcmVfc2V0X3N5bnRheCcgdG8gdGhlIGN1cnJlbnQgcmVnZXhwIHN5bnRheCB0byByZWNvZ25pemUuICBDYW4KKysgICBhbHNvIGJlIGFzc2lnbmVkIHRvIGFyYml0cmFyaWx5OiBlYWNoIHBhdHRlcm4gYnVmZmVyIHN0b3JlcyBpdHMgb3duCisrICAgc3ludGF4LCBzbyBpdCBjYW4gYmUgY2hhbmdlZCBiZXR3ZWVuIHJlZ2V4IGNvbXBpbGF0aW9ucy4gICovCisrLyogVGhpcyBoYXMgbm8gaW5pdGlhbGl6ZXIgYmVjYXVzZSBpbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gRW1hY3MKKysgICBiZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGR1bXBpbmcuICAqLworK3JlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsKKysKKysKKysvKiBTcGVjaWZ5IHRoZSBwcmVjaXNlIHN5bnRheCBvZiByZWdleHBzIGZvciBjb21waWxhdGlvbi4gIFRoaXMgcHJvdmlkZXMKKysgICBmb3IgY29tcGF0aWJpbGl0eSBmb3IgdmFyaW91cyB1dGlsaXRpZXMgd2hpY2ggaGlzdG9yaWNhbGx5IGhhdmUKKysgICBkaWZmZXJlbnQsIGluY29tcGF0aWJsZSBzeW50YXhlcy4KKysKKysgICBUaGUgYXJndW1lbnQgU1lOVEFYIGlzIGEgYml0IG1hc2sgY29tcHJpc2VkIG9mIHRoZSB2YXJpb3VzIGJpdHMKKysgICBkZWZpbmVkIGluIHJlZ2V4LmguICBXZSByZXR1cm4gdGhlIG9sZCBzeW50YXguICAqLworKworK3JlZ19zeW50YXhfdAorK3JlX3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBzeW50YXgpCisreworKyAgcmVnX3N5bnRheF90IHJldCA9IHJlX3N5bnRheF9vcHRpb25zOworKworKyAgcmVfc3ludGF4X29wdGlvbnMgPSBzeW50YXg7CisrIyBpZmRlZiBERUJVRworKyAgaWYgKHN5bnRheCAmIFJFX0RFQlVHKQorKyAgICBkZWJ1ZyA9IDE7CisrICBlbHNlIGlmIChkZWJ1ZykgLyogd2FzIG9uIGJ1dCBub3cgaXMgbm90ICovCisrICAgIGRlYnVnID0gMDsKKysjIGVuZGlmIC8qIERFQlVHICovCisrICByZXR1cm4gcmV0OworK30KKysjIGlmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZXRfc3ludGF4LCByZV9zZXRfc3ludGF4KQorKyMgZW5kaWYKKysMCisrLyogVGhpcyB0YWJsZSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBlcnJvciBjb2RlcyBsaXN0ZWQKKysgICBpbiByZWdleC5oLiAgT2J2aW91c2x5IHRoZSBvcmRlciBoZXJlIGhhcyB0byBiZSBzYW1lIGFzIHRoZXJlLgorKyAgIFBPU0lYIGRvZXNuJ3QgcmVxdWlyZSB0aGF0IHdlIGRvIGFueXRoaW5nIGZvciBSRUdfTk9FUlJPUiwKKysgICBidXQgd2h5IG5vdCBiZSBuaWNlPyAgKi8KKysKKytzdGF0aWMgY29uc3QgY2hhciAqcmVfZXJyb3JfbXNnaWRbXSA9CisrICB7CisrICAgIGdldHRleHRfbm9vcCAoIlN1Y2Nlc3MiKSwJLyogUkVHX05PRVJST1IgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiTm8gbWF0Y2giKSwJLyogUkVHX05PTUFUQ0ggKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0JBRFBBVCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiKSwgLyogUkVHX0VDT0xMQVRFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiKSwgLyogUkVHX0VDVFlQRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJUcmFpbGluZyBiYWNrc2xhc2giKSwgLyogUkVHX0VFU0NBUEUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBiYWNrIHJlZmVyZW5jZSIpLCAvKiBSRUdfRVNVQlJFRyAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgWyBvciBbXiIpLAkvKiBSRUdfRUJSQUNLICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCAoIG9yIFxcKCIpLCAvKiBSRUdfRVBBUkVOICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBcXHsiKSwgLyogUkVHX0VCUkFDRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7XFx9IiksIC8qIFJFR19CQURCUiAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJhbmdlIGVuZCIpLAkvKiBSRUdfRVJBTkdFICovCisrICAgIGdldHRleHRfbm9vcCAoIk1lbW9yeSBleGhhdXN0ZWQiKSwgLyogUkVHX0VTUEFDRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0JBRFJQVCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpLCAvKiBSRUdfRUVORCAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpLCAvKiBSRUdfRVNJWkUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICkgb3IgXFwpIikgLyogUkVHX0VSUEFSRU4gKi8KKysgIH07CisrDAorKyNlbmRpZiAvKiBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmbmRlZiBERUZJTkVEX09OQ0UKKysvKiBBdm9pZGluZyBhbGxvY2EgZHVyaW5nIG1hdGNoaW5nLCB0byBwbGFjYXRlIHJfYWxsb2MuICAqLworKworKy8qIERlZmluZSBNQVRDSF9NQVlfQUxMT0NBVEUgdW5sZXNzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisrICAgc2VhcmNoaW5nIGFuZCBtYXRjaGluZyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBjYWxsIGFsbG9jYS4gIE9uIHNvbWUKKysgICBzeXN0ZW1zLCBhbGxvY2EgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWFsbG9jLCBhbmQgaWYgd2UncmUKKysgICB1c2luZyB0aGUgcmVsb2NhdGluZyBhbGxvY2F0b3Igcm91dGluZXMsIHRoZW4gbWFsbG9jIGNvdWxkIGNhdXNlIGEKKysgICByZWxvY2F0aW9uLCB3aGljaCBtaWdodCAoaWYgdGhlIHN0cmluZ3MgYmVpbmcgc2VhcmNoZWQgYXJlIGluIHRoZQorKyAgIHJhbGxvYyBoZWFwKSBzaGlmdCB0aGUgZGF0YSBvdXQgZnJvbSB1bmRlcm5lYXRoIHRoZSByZWdleHAKKysgICByb3V0aW5lcy4KKysKKysgICBIZXJlJ3MgYW5vdGhlciByZWFzb24gdG8gYXZvaWQgYWxsb2NhdGlvbjogRW1hY3MKKysgICBwcm9jZXNzZXMgaW5wdXQgZnJvbSBYIGluIGEgc2lnbmFsIGhhbmRsZXI7IHByb2Nlc3NpbmcgWCBpbnB1dCBtYXkKKysgICBjYWxsIG1hbGxvYzsgaWYgaW5wdXQgYXJyaXZlcyB3aGlsZSBhIG1hdGNoaW5nIHJvdXRpbmUgaXMgY2FsbGluZworKyAgIG1hbGxvYywgdGhlbiB3ZSdyZSBzY3JvZC4gIEJ1dCBFbWFjcyBjYW4ndCBqdXN0IGJsb2NrIGlucHV0IHdoaWxlCisrICAgY2FsbGluZyBtYXRjaGluZyByb3V0aW5lczsgdGhlbiB3ZSBkb24ndCBub3RpY2UgaW50ZXJydXB0cyB3aGVuCisrICAgdGhleSBjb21lIGluLiAgU28sIEVtYWNzIGJsb2NrcyBpbnB1dCBhcm91bmQgYWxsIHJlZ2V4cCBjYWxscworKyAgIGV4Y2VwdCB0aGUgbWF0Y2hpbmcgY2FsbHMsIHdoaWNoIGl0IGxlYXZlcyB1bnByb3RlY3RlZCwgaW4gdGhlCisrICAgZmFpdGggdGhhdCB0aGV5IHdpbGwgbm90IG1hbGxvYy4gICovCisrCisrLyogTm9ybWFsbHksIHRoaXMgaXMgZmluZS4gICovCisrIyBkZWZpbmUgTUFUQ0hfTUFZX0FMTE9DQVRFCisrCisrLyogV2hlbiB1c2luZyBHTlUgQywgd2UgYXJlIG5vdCBSRUFMTFkgdXNpbmcgdGhlIEMgYWxsb2NhLCBubyBtYXR0ZXIKKysgICB3aGF0IGNvbmZpZy5oIG1heSBzYXkuICBTbyBkb24ndCB0YWtlIHByZWNhdXRpb25zIGZvciBpdC4gICovCisrIyBpZmRlZiBfX0dOVUNfXworKyMgIHVuZGVmIENfQUxMT0NBCisrIyBlbmRpZgorKworKy8qIFRoZSBtYXRjaCByb3V0aW5lcyBtYXkgbm90IGFsbG9jYXRlIGlmICgxKSB0aGV5IHdvdWxkIGRvIGl0IHdpdGggbWFsbG9jCisrICAgYW5kICgyKSBpdCdzIG5vdCBzYWZlIGZvciB0aGVtIHRvIHVzZSBtYWxsb2MuCisrICAgTm90ZSB0aGF0IGlmIFJFTF9BTExPQyBpcyBkZWZpbmVkLCBtYXRjaGluZyB3b3VsZCBub3QgdXNlIG1hbGxvYyBmb3IgdGhlCisrICAgZmFpbHVyZSBzdGFjaywgYnV0IHdlIHdvdWxkIHN0aWxsIHVzZSBpdCBmb3IgdGhlIHJlZ2lzdGVyIHZlY3RvcnM7CisrICAgc28gUkVMX0FMTE9DIHNob3VsZCBub3QgYWZmZWN0IHRoaXMuICAqLworKyMgaWYgKGRlZmluZWQgQ19BTExPQ0EgfHwgZGVmaW5lZCBSRUdFWF9NQUxMT0MpICYmIGRlZmluZWQgZW1hY3MKKysjICB1bmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjIGVuZGlmCisrI2VuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysMCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysvKiBGYWlsdXJlIHN0YWNrIGRlY2xhcmF0aW9ucyBhbmQgbWFjcm9zOyBib3RoIHJlX2NvbXBpbGVfZmFzdG1hcCBhbmQKKysgICByZV9tYXRjaF8yIHVzZSBhIGZhaWx1cmUgc3RhY2suICBUaGVzZSBoYXZlIHRvIGJlIG1hY3JvcyBiZWNhdXNlIG9mCisrICAgUkVHRVhfQUxMT0NBVEVfU1RBQ0suICAqLworKworKworKy8qIE51bWJlciBvZiBmYWlsdXJlIHBvaW50cyBmb3Igd2hpY2ggdG8gaW5pdGlhbGx5IGFsbG9jYXRlIHNwYWNlCisrICAgd2hlbiBtYXRjaGluZy4gIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkLCB3ZSBhbGxvY2F0ZSBtb3JlCisrICAgc3BhY2UsIHNvIGl0IGlzIG5vdCBhIGhhcmQgbGltaXQuICAqLworKyMgaWZuZGVmIElOSVRfRkFJTFVSRV9BTExPQworKyMgIGRlZmluZSBJTklUX0ZBSUxVUkVfQUxMT0MgNQorKyMgZW5kaWYKKysKKysvKiBSb3VnaGx5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWlsdXJlIHBvaW50cyBvbiB0aGUgc3RhY2suICBXb3VsZCBiZQorKyAgIGV4YWN0bHkgdGhhdCBpZiBhbHdheXMgdXNlZCBNQVhfRkFJTFVSRV9JVEVNUyBpdGVtcyBlYWNoIHRpbWUgd2UgZmFpbGVkLgorKyAgIFRoaXMgaXMgYSB2YXJpYWJsZSBvbmx5IHNvIHVzZXJzIG9mIHJlZ2V4IGNhbiBhc3NpZ24gdG8gaXQ7IHdlIG5ldmVyCisrICAgY2hhbmdlIGl0IG91cnNlbHZlcy4gICovCisrCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrCisrIyAgaWZkZWYgSU5UX0lTXzE2QklUCisrIyAgIGRlZmluZSBSRV9NX0ZfVFlQRSBsb25nIGludAorKyMgIGVsc2UKKysjICAgZGVmaW5lIFJFX01fRl9UWVBFIGludAorKyMgIGVuZGlmIC8qIElOVF9JU18xNkJJVCAqLworKworKyMgIGlmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKy8qIDQ0MDAgd2FzIGVub3VnaCB0byBjYXVzZSBhIGNyYXNoIG9uIEFscGhhIE9TRi8xLAorKyAgIHdob3NlIGRlZmF1bHQgc3RhY2sgbGltaXQgaXMgMm1iLiAgKi8KKysjICAgZGVmaW5lIFJFX01fRl9ERUZBVUxUIDQwMDAKKysjICBlbHNlCisrIyAgIGRlZmluZSBSRV9NX0ZfREVGQVVMVCAyMDAwCisrIyAgZW5kaWYgLyogTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrIyAgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CisrCisrIyAgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfMykKKytsaW5rX3dhcm5pbmcgKHJlX21heF9mYWlsdXJlcywgInRoZSAncmVfbWF4X2ZhaWx1cmVzJyB2YXJpYWJsZSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBnbyBhd2F5LiIpCisrUkVfTV9GX1RZUEUgcmVfbWF4X2ZhaWx1cmVzID0gUkVfTV9GX0RFRkFVTFQ7CisrIyAgZWxzZQorK1JFX01fRl9UWVBFIHJlX21heF9mYWlsdXJlcyBhdHRyaWJ1dGVfaGlkZGVuID0gUkVfTV9GX0RFRkFVTFQ7CisrIyAgZW5kaWYgLyogU0hMSUJfQ09NUEFUICovCisrCisrIyAgdW5kZWYgUkVfTV9GX1RZUEUKKysjICB1bmRlZiBSRV9NX0ZfREVGQVVMVAorKworKyMgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrCisrIyBpZmRlZiBJTlRfSVNfMTZCSVQKKysKKyt1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpCisreworKyAgVUNIQVJfVCAqcG9pbnRlcjsKKysgIGxvbmcgaW50IGludGVnZXI7CisrfTsKKysKKyt0eXBlZGVmIHVuaW9uIFBSRUZJWChmYWlsX3N0YWNrX2VsdCkgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICpzdGFjazsKKysgIHVuc2lnbmVkIGxvbmcgaW50IHNpemU7CisrICB1bnNpZ25lZCBsb25nIGludCBhdmFpbDsJCS8qIE9mZnNldCBvZiBuZXh0IG9wZW4gcG9zaXRpb24uICAqLworK30gUFJFRklYKGZhaWxfc3RhY2tfdHlwZSk7CisrCisrIyBlbHNlIC8qIG5vdCBJTlRfSVNfMTZCSVQgKi8KKysKKyt1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpCisreworKyAgVUNIQVJfVCAqcG9pbnRlcjsKKysgIGludCBpbnRlZ2VyOworK307CisrCisrdHlwZWRlZiB1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqc3RhY2s7CisrICB1bnNpZ25lZCBzaXplOworKyAgdW5zaWduZWQgYXZhaWw7CQkJLyogT2Zmc2V0IG9mIG5leHQgb3BlbiBwb3NpdGlvbi4gICovCisrfSBQUkVGSVgoZmFpbF9zdGFja190eXBlKTsKKysKKysjIGVuZGlmIC8qIElOVF9JU18xNkJJVCAqLworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGRlZmluZSBGQUlMX1NUQUNLX0VNUFRZKCkgICAgIChmYWlsX3N0YWNrLmF2YWlsID09IDApCisrIyAgZGVmaW5lIEZBSUxfU1RBQ0tfUFRSX0VNUFRZKCkgKGZhaWxfc3RhY2tfcHRyLT5hdmFpbCA9PSAwKQorKyMgIGRlZmluZSBGQUlMX1NUQUNLX0ZVTEwoKSAgICAgIChmYWlsX3N0YWNrLmF2YWlsID09IGZhaWxfc3RhY2suc2l6ZSkKKysjIGVuZGlmCisrCisrCisrLyogRGVmaW5lIG1hY3JvcyB0byBpbml0aWFsaXplIGFuZCBmcmVlIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIERvIGByZXR1cm4gLTInIGlmIHRoZSBhbGxvYyBmYWlscy4gICovCisrCisrIyBpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjICBkZWZpbmUgSU5JVF9GQUlMX1NUQUNLKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBmYWlsX3N0YWNrLnN0YWNrID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKQkJXAorKyAgICAgIFJFR0VYX0FMTE9DQVRFX1NUQUNLIChJTklUX0ZBSUxVUkVfQUxMT0MgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpOyBcCisrCQkJCQkJCQkJXAorKyAgICBpZiAoZmFpbF9zdGFjay5zdGFjayA9PSBOVUxMKQkJCQlcCisrICAgICAgcmV0dXJuIC0yOwkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBmYWlsX3N0YWNrLnNpemUgPSBJTklUX0ZBSUxVUkVfQUxMT0M7CQkJXAorKyAgICBmYWlsX3N0YWNrLmF2YWlsID0gMDsJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyAgZGVmaW5lIFJFU0VUX0ZBSUxfU1RBQ0soKSAgUkVHRVhfRlJFRV9TVEFDSyAoZmFpbF9zdGFjay5zdGFjaykKKysjIGVsc2UKKysjICBkZWZpbmUgSU5JVF9GQUlMX1NUQUNLKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBmYWlsX3N0YWNrLmF2YWlsID0gMDsJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrIyAgZGVmaW5lIFJFU0VUX0ZBSUxfU1RBQ0soKQorKyMgZW5kaWYKKysKKysKKysvKiBEb3VibGUgdGhlIHNpemUgb2YgRkFJTF9TVEFDSywgdXAgdG8gYXBwcm94aW1hdGVseSBgcmVfbWF4X2ZhaWx1cmVzJyBpdGVtcy4KKysKKysgICBSZXR1cm4gMSBpZiBzdWNjZWVkcywgYW5kIDAgaWYgZWl0aGVyIHJhbiBvdXQgb2YgbWVtb3J5CisrICAgYWxsb2NhdGluZyBzcGFjZSBmb3IgaXQgb3IgaXQgd2FzIGFscmVhZHkgdG9vIGxhcmdlLgorKworKyAgIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0sgcmVxdWlyZXMgYGRlc3RpbmF0aW9uJyBiZSBkZWNsYXJlZC4gICAqLworKworKyMgZGVmaW5lIERPVUJMRV9GQUlMX1NUQUNLKGZhaWxfc3RhY2spCQkJCQlcCisrICAoKGZhaWxfc3RhY2spLnNpemUgPiAodW5zaWduZWQpIChyZV9tYXhfZmFpbHVyZXMgKiBNQVhfRkFJTFVSRV9JVEVNUykJXAorKyAgID8gMAkJCQkJCQkJCVwKKysgICA6ICgoZmFpbF9zdGFjaykuc3RhY2sgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopCQkJXAorKyAgICAgICAgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyAoKGZhaWxfc3RhY2spLnN0YWNrLCAJCQlcCisrICAgICAgICAgIChmYWlsX3N0YWNrKS5zaXplICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpLAlcCisrICAgICAgICAgICgoZmFpbF9zdGFjaykuc2l6ZSA8PCAxKSAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSksXAorKwkJCQkJCQkJCVwKKysgICAgICAoZmFpbF9zdGFjaykuc3RhY2sgPT0gTlVMTAkJCQkJXAorKyAgICAgID8gMAkJCQkJCQkJXAorKyAgICAgIDogKChmYWlsX3N0YWNrKS5zaXplIDw8PSAxLCAJCQkJCVwKKysgICAgICAgICAxKSkpCisrCisrCisrLyogUHVzaCBwb2ludGVyIFBPSU5URVIgb24gRkFJTF9TVEFDSy4KKysgICBSZXR1cm4gMSBpZiB3YXMgYWJsZSB0byBkbyBzbyBhbmQgMCBpZiByYW4gb3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nCisrICAgc3BhY2UgdG8gZG8gc28uICAqLworKyMgZGVmaW5lIFBVU0hfUEFUVEVSTl9PUChQT0lOVEVSLCBGQUlMX1NUQUNLKQkJCQlcCisrICAoKEZBSUxfU1RBQ0tfRlVMTCAoKQkJCQkJCQlcCisrICAgICYmICFET1VCTEVfRkFJTF9TVEFDSyAoRkFJTF9TVEFDSykpCQkJCQlcCisrICAgPyAwCQkJCQkJCQkJXAorKyAgIDogKChGQUlMX1NUQUNLKS5zdGFja1soRkFJTF9TVEFDSykuYXZhaWwrK10ucG9pbnRlciA9IFBPSU5URVIsCVwKKysgICAgICAxKSkKKysKKysvKiBQdXNoIGEgcG9pbnRlciB2YWx1ZSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIEFzc3VtZXMgdGhlIHZhcmlhYmxlIGBmYWlsX3N0YWNrJy4gIFByb2JhYmx5IHNob3VsZCBvbmx5CisrICAgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBQVVNIX0ZBSUxVUkVfUE9JTlQnLiAgKi8KKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfUE9JTlRFUihpdGVtKQkJCQkJXAorKyAgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdLnBvaW50ZXIgPSAoVUNIQVJfVCAqKSAoaXRlbSkKKysKKysvKiBUaGlzIHB1c2hlcyBhbiBpbnRlZ2VyLXZhbHVlZCBpdGVtIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCisrICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9ubHkKKysgICBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYFBVU0hfRkFJTFVSRV9QT0lOVCcuICAqLworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9JTlQoaXRlbSkJCQkJCVwKKysgIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCsrXS5pbnRlZ2VyID0gKGl0ZW0pCisrCisrLyogUHVzaCBhIGZhaWxfc3RhY2tfZWx0X3QgdmFsdWUgb250byB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBBc3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQorKyAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX0VMVChpdGVtKQkJCQkJXAorKyAgZmFpbF9zdGFjay5zdGFja1tmYWlsX3N0YWNrLmF2YWlsKytdID0gIChpdGVtKQorKworKy8qIFRoZXNlIHRocmVlIFBPUC4uLiBvcGVyYXRpb25zIGNvbXBsZW1lbnQgdGhlIHRocmVlIFBVU0guLi4gb3BlcmF0aW9ucy4KKysgICBBbGwgYXNzdW1lIHRoYXQgYGZhaWxfc3RhY2snIGlzIG5vbmVtcHR5LiAgKi8KKysjIGRlZmluZSBQT1BfRkFJTFVSRV9QT0lOVEVSKCkgZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdLnBvaW50ZXIKKysjIGRlZmluZSBQT1BfRkFJTFVSRV9JTlQoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0uaW50ZWdlcgorKyMgZGVmaW5lIFBPUF9GQUlMVVJFX0VMVCgpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXQorKworKy8qIFVzZWQgdG8gb21pdCBwdXNoaW5nIGZhaWx1cmUgcG9pbnQgaWQncyB3aGVuIHdlJ3JlIG5vdCBkZWJ1Z2dpbmcuICAqLworKyMgaWZkZWYgREVCVUcKKysjICBkZWZpbmUgREVCVUdfUFVTSCBQVVNIX0ZBSUxVUkVfSU5UCisrIyAgZGVmaW5lIERFQlVHX1BPUChpdGVtX2FkZHIpICooaXRlbV9hZGRyKSA9IFBPUF9GQUlMVVJFX0lOVCAoKQorKyMgZWxzZQorKyMgIGRlZmluZSBERUJVR19QVVNIKGl0ZW0pCisrIyAgZGVmaW5lIERFQlVHX1BPUChpdGVtX2FkZHIpCisrIyBlbmRpZgorKworKworKy8qIFB1c2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSB3ZSB3aWxsIG5lZWQKKysgICBpZiB3ZSBldmVyIGZhaWwgYmFjayB0byBpdC4KKysKKysgICBSZXF1aXJlcyB2YXJpYWJsZXMgZmFpbF9zdGFjaywgcmVnc3RhcnQsIHJlZ2VuZCwgcmVnX2luZm8sIGFuZAorKyAgIG51bV9yZWdzX3B1c2hlZCBiZSBkZWNsYXJlZC4gIERPVUJMRV9GQUlMX1NUQUNLIHJlcXVpcmVzIGBkZXN0aW5hdGlvbicKKysgICBiZSBkZWNsYXJlZC4KKysKKysgICBEb2VzIGByZXR1cm4gRkFJTFVSRV9DT0RFJyBpZiBydW5zIG91dCBvZiBtZW1vcnkuICAqLworKworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9QT0lOVChwYXR0ZXJuX3BsYWNlLCBzdHJpbmdfcGxhY2UsIGZhaWx1cmVfY29kZSkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgY2hhciAqZGVzdGluYXRpb247CQkJCQkJCVwKKysgICAgLyogTXVzdCBiZSBpbnQsIHNvIHdoZW4gd2UgZG9uJ3Qgc2F2ZSBhbnkgcmVnaXN0ZXJzLCB0aGUgYXJpdGhtZXRpYwlcCisrICAgICAgIG9mIDAgKyAtMSBpc24ndCBkb25lIGFzIHVuc2lnbmVkLiAgKi8JCQkJXAorKyAgICAvKiBDYW4ndCBiZSBpbnQsIHNpbmNlIHRoZXJlIGlzIG5vdCBhIHNocmVkIG9mIGEgZ3VhcmFudGVlIHRoYXQgaW50CVwKKysgICAgICAgaXMgd2lkZSBlbm91Z2ggdG8gaG9sZCBhIHZhbHVlIG9mIHNvbWV0aGluZyB0byB3aGljaCBwb2ludGVyIGNhbglcCisrICAgICAgIGJlIGFzc2lnbmVkICovCQkJCQkJCVwKKysgICAgYWN0aXZlX3JlZ190IHRoaXNfcmVnOwkJCQkJCVwKKysgICAgCQkJCQkJCQkJXAorKyAgICBERUJVR19TVEFURU1FTlQgKGZhaWx1cmVfaWQrKyk7CQkJCQlcCisrICAgIERFQlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3B1c2hlZCsrKTsJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCJcblBVU0hfRkFJTFVSRV9QT0lOVCAjJXU6XG4iLCBmYWlsdXJlX2lkKTsJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBCZWZvcmUgcHVzaCwgbmV4dCBhdmFpbDogJWRcbiIsIChmYWlsX3N0YWNrKS5hdmFpbCk7XAorKyAgICBERUJVR19QUklOVDIgKCIgICAgICAgICAgICAgICAgICAgICBzaXplOiAlZFxuIiwgKGZhaWxfc3RhY2spLnNpemUpO1wKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgc2xvdHMgbmVlZGVkOiAlbGRcbiIsIE5VTV9GQUlMVVJFX0lURU1TKTsJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICAgICBhdmFpbGFibGU6ICVkXG4iLCBSRU1BSU5JTkdfQVZBSUxfU0xPVFMpOwlcCisrCQkJCQkJCQkJXAorKyAgICAvKiBFbnN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgYWxsb2NhdGVkIGZvciB3aGF0IHdlIHdpbGwgcHVzaC4gICovCVwKKysgICAgd2hpbGUgKFJFTUFJTklOR19BVkFJTF9TTE9UUyA8IE5VTV9GQUlMVVJFX0lURU1TKQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKyAgICAgICAgaWYgKCFET1VCTEVfRkFJTF9TVEFDSyAoZmFpbF9zdGFjaykpCQkJCVwKKysgICAgICAgICAgcmV0dXJuIGZhaWx1cmVfY29kZTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgICAgREVCVUdfUFJJTlQyICgiXG4gIERvdWJsZWQgc3RhY2s7IHNpemUgbm93OiAlZFxuIiwJCVwKKysJCSAgICAgICAoZmFpbF9zdGFjaykuc2l6ZSk7CQkJCVwKKysgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgc2xvdHMgYXZhaWxhYmxlOiAlZFxuIiwgUkVNQUlOSU5HX0FWQUlMX1NMT1RTKTtcCisrICAgICAgfQkJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIC8qIFB1c2ggdGhlIGluZm8sIHN0YXJ0aW5nIHdpdGggdGhlIHJlZ2lzdGVycy4gICovCQkJXAorKyAgICBERUJVR19QUklOVDEgKCJcbiIpOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIGlmICgxKQkJCQkJCQkJXAorKyAgICAgIGZvciAodGhpc19yZWcgPSBsb3dlc3RfYWN0aXZlX3JlZzsgdGhpc19yZWcgPD0gaGlnaGVzdF9hY3RpdmVfcmVnOyBcCisrCSAgIHRoaXNfcmVnKyspCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyByZWc6ICVsdVxuIiwgdGhpc19yZWcpOwkJXAorKwkgIERFQlVHX1NUQVRFTUVOVCAobnVtX3JlZ3NfcHVzaGVkKyspOwkJCQlcCisrCQkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgICBzdGFydDogJXBcbiIsIHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQlcCisrCSAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQkJXAorKwkJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgICAgZW5kOiAlcFxuIiwgcmVnZW5kW3RoaXNfcmVnXSk7CQlcCisrCSAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHJlZ2VuZFt0aGlzX3JlZ10pOwkJCVwKKysJCQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICAgIGluZm86ICVwXG4gICAgICAiLAkJCQlcCisrCQkJcmVnX2luZm9bdGhpc19yZWddLndvcmQucG9pbnRlcik7CQlcCisrCSAgREVCVUdfUFJJTlQyICgiIG1hdGNoX251bGw9JWQiLAkJCQlcCisrCQkJUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQyICgiIGFjdGl2ZT0lZCIsIElTX0FDVElWRSAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDIgKCIgbWF0Y2hlZF9zb21ldGhpbmc9JWQiLAkJCVwKKysJCQlNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bdGhpc19yZWddKSk7CVwKKysJICBERUJVR19QUklOVDIgKCIgZXZlcl9tYXRjaGVkPSVkIiwJCQkJXAorKwkJCUVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQxICgiXG4iKTsJCQkJCQlcCisrCSAgUFVTSF9GQUlMVVJFX0VMVCAocmVnX2luZm9bdGhpc19yZWddLndvcmQpOwkJCVwKKysJfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nICBsb3cgYWN0aXZlIHJlZzogJWxkXG4iLCBsb3dlc3RfYWN0aXZlX3JlZyk7XAorKyAgICBQVVNIX0ZBSUxVUkVfSU5UIChsb3dlc3RfYWN0aXZlX3JlZyk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBoaWdoIGFjdGl2ZSByZWc6ICVsZFxuIiwgaGlnaGVzdF9hY3RpdmVfcmVnKTtcCisrICAgIFBVU0hfRkFJTFVSRV9JTlQgKGhpZ2hlc3RfYWN0aXZlX3JlZyk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBwYXR0ZXJuICVwOlxuIiwgcGF0dGVybl9wbGFjZSk7CQlcCisrICAgIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdHRlcm5fcGxhY2UsIHBlbmQpOwkJXAorKyAgICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAocGF0dGVybl9wbGFjZSk7CQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyBzdHJpbmcgJXA6IGAiLCBzdHJpbmdfcGxhY2UpOwkJXAorKyAgICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChzdHJpbmdfcGxhY2UsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCAgIFwKKysJCQkJIHNpemUyKTsJCQkJXAorKyAgICBERUJVR19QUklOVDEgKCInXG4iKTsJCQkJCQlcCisrICAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChzdHJpbmdfcGxhY2UpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgZmFpbHVyZSBpZDogJXVcbiIsIGZhaWx1cmVfaWQpOwkJXAorKyAgICBERUJVR19QVVNIIChmYWlsdXJlX2lkKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgaWZuZGVmIERFRklORURfT05DRQorKy8qIFRoaXMgaXMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGFyZSBwdXNoZWQgYW5kIHBvcHBlZCBvbiB0aGUgc3RhY2sKKysgICBmb3IgZWFjaCByZWdpc3Rlci4gICovCisrIyAgZGVmaW5lIE5VTV9SRUdfSVRFTVMgIDMKKysKKysvKiBJbmRpdmlkdWFsIGl0ZW1zIGFzaWRlIGZyb20gdGhlIHJlZ2lzdGVycy4gICovCisrIyAgaWZkZWYgREVCVUcKKysjICAgZGVmaW5lIE5VTV9OT05SRUdfSVRFTVMgNSAvKiBJbmNsdWRlcyBmYWlsdXJlIHBvaW50IGlkLiAgKi8KKysjICBlbHNlCisrIyAgIGRlZmluZSBOVU1fTk9OUkVHX0lURU1TIDQKKysjICBlbmRpZgorKworKy8qIFdlIHB1c2ggYXQgbW9zdCB0aGlzIG1hbnkgaXRlbXMgb24gdGhlIHN0YWNrLiAgKi8KKysvKiBXZSB1c2VkIHRvIHVzZSAobnVtX3JlZ3MgLSAxKSwgd2hpY2ggaXMgdGhlIG51bWJlciBvZiByZWdpc3RlcnMKKysgICB0aGlzIHJlZ2V4cCB3aWxsIHNhdmU7IGJ1dCB0aGF0IHdhcyBjaGFuZ2VkIHRvIDUKKysgICB0byBhdm9pZCBzdGFjayBvdmVyZmxvdyBmb3IgYSByZWdleHAgd2l0aCBsb3RzIG9mIHBhcmVucy4gICovCisrIyAgZGVmaW5lIE1BWF9GQUlMVVJFX0lURU1TICg1ICogTlVNX1JFR19JVEVNUyArIE5VTV9OT05SRUdfSVRFTVMpCisrCisrLyogV2UgYWN0dWFsbHkgcHVzaCB0aGlzIG1hbnkgaXRlbXMuICAqLworKyMgIGRlZmluZSBOVU1fRkFJTFVSRV9JVEVNUwkJCQlcCisrICAoKCgwCQkJCQkJCVwKKysgICAgID8gMCA6IGhpZ2hlc3RfYWN0aXZlX3JlZyAtIGxvd2VzdF9hY3RpdmVfcmVnICsgMSkJXAorKyAgICAqIE5VTV9SRUdfSVRFTVMpCQkJCQlcCisrICAgKyBOVU1fTk9OUkVHX0lURU1TKQorKworKy8qIEhvdyBtYW55IGl0ZW1zIGNhbiBzdGlsbCBiZSBhZGRlZCB0byB0aGUgc3RhY2sgd2l0aG91dCBvdmVyZmxvd2luZyBpdC4gICovCisrIyAgZGVmaW5lIFJFTUFJTklOR19BVkFJTF9TTE9UUyAoKGZhaWxfc3RhY2spLnNpemUgLSAoZmFpbF9zdGFjaykuYXZhaWwpCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrCisrLyogUG9wcyB3aGF0IFBVU0hfRkFJTF9TVEFDSyBwdXNoZXMuCisrCisrICAgV2UgcmVzdG9yZSBpbnRvIHRoZSBwYXJhbWV0ZXJzLCBhbGwgb2Ygd2hpY2ggc2hvdWxkIGJlIGx2YWx1ZXM6CisrICAgICBTVFIgLS0gdGhlIHNhdmVkIGRhdGEgcG9zaXRpb24uCisrICAgICBQQVQgLS0gdGhlIHNhdmVkIHBhdHRlcm4gcG9zaXRpb24uCisrICAgICBMT1dfUkVHLCBISUdIX1JFRyAtLSB0aGUgaGlnaGVzdCBhbmQgbG93ZXN0IGFjdGl2ZSByZWdpc3RlcnMuCisrICAgICBSRUdTVEFSVCwgUkVHRU5EIC0tIGFycmF5cyBvZiBzdHJpbmcgcG9zaXRpb25zLgorKyAgICAgUkVHX0lORk8gLS0gYXJyYXkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBzdWJleHByZXNzaW9uLgorKworKyAgIEFsc28gYXNzdW1lcyB0aGUgdmFyaWFibGVzIGBmYWlsX3N0YWNrJyBhbmQgKGlmIGRlYnVnZ2luZyksIGBidWZwJywKKysgICBgcGVuZCcsIGBzdHJpbmcxJywgYHNpemUxJywgYHN0cmluZzInLCBhbmQgYHNpemUyJy4gICovCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfUE9JTlQoc3RyLCBwYXQsIGxvd19yZWcsIGhpZ2hfcmVnLCByZWdzdGFydCwgcmVnZW5kLCByZWdfaW5mbylcCisrewkJCQkJCQkJCVwKKysgIERFQlVHX1NUQVRFTUVOVCAodW5zaWduZWQgZmFpbHVyZV9pZDspCQkJCVwKKysgIGFjdGl2ZV9yZWdfdCB0aGlzX3JlZzsJCQkJCQlcCisrICBjb25zdCBVQ0hBUl9UICpzdHJpbmdfdGVtcDsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgYXNzZXJ0ICghRkFJTF9TVEFDS19FTVBUWSAoKSk7CQkJCQlcCisrCQkJCQkJCQkJXAorKyAgLyogUmVtb3ZlIGZhaWx1cmUgcG9pbnRzIGFuZCBwb2ludCB0byBob3cgbWFueSByZWdzIHB1c2hlZC4gICovCVwKKysgIERFQlVHX1BSSU5UMSAoIlBPUF9GQUlMVVJFX1BPSU5UOlxuIik7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgQmVmb3JlIHBvcCwgbmV4dCBhdmFpbDogJWRcbiIsIGZhaWxfc3RhY2suYXZhaWwpOwlcCisrICBERUJVR19QUklOVDIgKCIgICAgICAgICAgICAgICAgICAgIHNpemU6ICVkXG4iLCBmYWlsX3N0YWNrLnNpemUpOwlcCisrCQkJCQkJCQkJXAorKyAgYXNzZXJ0IChmYWlsX3N0YWNrLmF2YWlsID49IE5VTV9OT05SRUdfSVRFTVMpOwkJCVwKKysJCQkJCQkJCQlcCisrICBERUJVR19QT1AgKCZmYWlsdXJlX2lkKTsJCQkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgZmFpbHVyZSBpZDogJXVcbiIsIGZhaWx1cmVfaWQpOwkJXAorKwkJCQkJCQkJCVwKKysgIC8qIElmIHRoZSBzYXZlZCBzdHJpbmcgbG9jYXRpb24gaXMgTlVMTCwgaXQgY2FtZSBmcm9tIGFuCQlcCisrICAgICBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgb3Bjb2RlLCBhbmQgd2Ugd2FudCB0byB0aHJvdyBhd2F5IHRoZQlcCisrICAgICBzYXZlZCBOVUxMLCB0aHVzIHJldGFpbmluZyBvdXIgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nLiAgKi8JXAorKyAgc3RyaW5nX3RlbXAgPSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwkJCQkJXAorKyAgaWYgKHN0cmluZ190ZW1wICE9IE5VTEwpCQkJCQkJXAorKyAgICBzdHIgPSAoY29uc3QgQ0hBUl9UICopIHN0cmluZ190ZW1wOwkJCQkJXAorKwkJCQkJCQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBzdHJpbmcgJXA6IGAiLCBzdHIpOwkJCQlcCisrICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChzdHIsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMik7CVwKKysgIERFQlVHX1BSSU5UMSAoIidcbiIpOwkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgcGF0ID0gKFVDSEFSX1QgKikgUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIHBhdHRlcm4gJXA6XG4iLCBwYXQpOwkJCVwKKysgIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdCwgcGVuZCk7CQkJXAorKwkJCQkJCQkJCVwKKysgIC8qIFJlc3RvcmUgcmVnaXN0ZXIgaW5mby4gICovCQkJCQkJXAorKyAgaGlnaF9yZWcgPSAoYWN0aXZlX3JlZ190KSBQT1BfRkFJTFVSRV9JTlQgKCk7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBoaWdoIGFjdGl2ZSByZWc6ICVsZFxuIiwgaGlnaF9yZWcpOwkJXAorKwkJCQkJCQkJCVwKKysgIGxvd19yZWcgPSAoYWN0aXZlX3JlZ190KSBQT1BfRkFJTFVSRV9JTlQgKCk7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyAgbG93IGFjdGl2ZSByZWc6ICVsZFxuIiwgbG93X3JlZyk7CQlcCisrCQkJCQkJCQkJXAorKyAgaWYgKDEpCQkJCQkJCQlcCisrICAgIGZvciAodGhpc19yZWcgPSBoaWdoX3JlZzsgdGhpc19yZWcgPj0gbG93X3JlZzsgdGhpc19yZWctLSkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlERUJVR19QUklOVDIgKCIgICAgUG9wcGluZyByZWc6ICVsZFxuIiwgdGhpc19yZWcpOwkJXAorKwkJCQkJCQkJCVwKKysJcmVnX2luZm9bdGhpc19yZWddLndvcmQgPSBQT1BfRkFJTFVSRV9FTFQgKCk7CQkJXAorKwlERUJVR19QUklOVDIgKCIgICAgICBpbmZvOiAlcFxuIiwJCQkJXAorKwkJICAgICAgcmVnX2luZm9bdGhpc19yZWddLndvcmQucG9pbnRlcik7CQkJXAorKwkJCQkJCQkJCVwKKysJcmVnZW5kW3RoaXNfcmVnXSA9IChjb25zdCBDSEFSX1QgKikgUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJXAorKwlERUJVR19QUklOVDIgKCIgICAgICBlbmQ6ICVwXG4iLCByZWdlbmRbdGhpc19yZWddKTsJCVwKKysJCQkJCQkJCQlcCisrCXJlZ3N0YXJ0W3RoaXNfcmVnXSA9IChjb25zdCBDSEFSX1QgKikgUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJXAorKwlERUJVR19QUklOVDIgKCIgICAgICBzdGFydDogJXBcbiIsIHJlZ3N0YXJ0W3RoaXNfcmVnXSk7CQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIGVsc2UJCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgZm9yICh0aGlzX3JlZyA9IGhpZ2hlc3RfYWN0aXZlX3JlZzsgdGhpc19yZWcgPiBoaWdoX3JlZzsgdGhpc19yZWctLSkgXAorKwl7CQkJCQkJCQlcCisrCSAgcmVnX2luZm9bdGhpc19yZWddLndvcmQuaW50ZWdlciA9IDA7CQkJCVwKKysJICByZWdlbmRbdGhpc19yZWddID0gMDsJCQkJCQlcCisrCSAgcmVnc3RhcnRbdGhpc19yZWddID0gMDsJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IGhpZ2hfcmVnOwkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CQkJCQkJXAorKyAgREVCVUdfU1RBVEVNRU5UIChuZmFpbHVyZV9wb2ludHNfcG9wcGVkKyspOwkJCQlcCisrfSAvKiBQT1BfRkFJTFVSRV9QT0lOVCAqLworKwwKKysvKiBTdHJ1Y3R1cmUgZm9yIHBlci1yZWdpc3RlciAoYS5rLmEuIHBlci1ncm91cCkgaW5mb3JtYXRpb24uCisrICAgT3RoZXIgcmVnaXN0ZXIgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlCisrICAgc3RhcnRpbmcgYW5kIGVuZGluZyBwb3NpdGlvbnMgKHdoaWNoIGFyZSBhZGRyZXNzZXMpLCBhbmQgdGhlIGxpc3Qgb2YKKysgICBpbm5lciBncm91cHMgKHdoaWNoIGlzIGEgYml0cyBsaXN0KSBhcmUgbWFpbnRhaW5lZCBpbiBzZXBhcmF0ZQorKyAgIHZhcmlhYmxlcy4KKysKKysgICBXZSBhcmUgbWFraW5nIGEgKHN0cmljdGx5IHNwZWFraW5nKSBub25wb3J0YWJsZSBhc3N1bXB0aW9uIGhlcmU6IHRoYXQKKysgICB0aGUgY29tcGlsZXIgd2lsbCBwYWNrIG91ciBiaXQgZmllbGRzIGludG8gc29tZXRoaW5nIHRoYXQgZml0cyBpbnRvCisrICAgdGhlIHR5cGUgb2YgYHdvcmQnLCBpLmUuLCBpcyBzb21ldGhpbmcgdGhhdCBmaXRzIGludG8gb25lIGl0ZW0gb24gdGhlCisrICAgZmFpbHVyZSBzdGFjay4gICovCisrCisrCisrLyogRGVjbGFyYXRpb25zIGFuZCBtYWNyb3MgZm9yIHJlX21hdGNoXzIuICAqLworKworK3R5cGVkZWYgdW5pb24KKyt7CisrICBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgd29yZDsKKysgIHN0cnVjdAorKyAgeworKyAgICAgIC8qIFRoaXMgZmllbGQgaXMgb25lIGlmIHRoaXMgZ3JvdXAgY2FuIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsCisrICAgICAgICAgemVybyBpZiBub3QuICBJZiBub3QgeWV0IGRldGVybWluZWQsICBgTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRScuICAqLworKyMgZGVmaW5lIE1BVENIX05VTExfVU5TRVRfVkFMVUUgMworKyAgICB1bnNpZ25lZCBtYXRjaF9udWxsX3N0cmluZ19wIDogMjsKKysgICAgdW5zaWduZWQgaXNfYWN0aXZlIDogMTsKKysgICAgdW5zaWduZWQgbWF0Y2hlZF9zb21ldGhpbmcgOiAxOworKyAgICB1bnNpZ25lZCBldmVyX21hdGNoZWRfc29tZXRoaW5nIDogMTsKKysgIH0gYml0czsKKyt9IFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpOworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGRlZmluZSBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUChSKSAgKChSKS5iaXRzLm1hdGNoX251bGxfc3RyaW5nX3ApCisrIyAgZGVmaW5lIElTX0FDVElWRShSKSAgKChSKS5iaXRzLmlzX2FjdGl2ZSkKKysjICBkZWZpbmUgTUFUQ0hFRF9TT01FVEhJTkcoUikgICgoUikuYml0cy5tYXRjaGVkX3NvbWV0aGluZykKKysjICBkZWZpbmUgRVZFUl9NQVRDSEVEX1NPTUVUSElORyhSKSAgKChSKS5iaXRzLmV2ZXJfbWF0Y2hlZF9zb21ldGhpbmcpCisrCisrCisrLyogQ2FsbCB0aGlzIHdoZW4gaGF2ZSBtYXRjaGVkIGEgcmVhbCBjaGFyYWN0ZXI7IGl0IHNldHMgYG1hdGNoZWQnIGZsYWdzCisrICAgZm9yIHRoZSBzdWJleHByZXNzaW9ucyB3aGljaCB3ZSBhcmUgY3VycmVudGx5IGluc2lkZS4gIEFsc28gcmVjb3JkcworKyAgIHRoYXQgdGhvc2Ugc3ViZXhwcnMgaGF2ZSBtYXRjaGVkLiAgKi8KKysjICBkZWZpbmUgU0VUX1JFR1NfTUFUQ0hFRCgpCQkJCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgaWYgKCFzZXRfcmVnc19tYXRjaGVkX2RvbmUpCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJICBhY3RpdmVfcmVnX3QgcjsJCQkJCQlcCisrCSAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMTsJCQkJCVwKKysJICBmb3IgKHIgPSBsb3dlc3RfYWN0aXZlX3JlZzsgciA8PSBoaWdoZXN0X2FjdGl2ZV9yZWc7IHIrKykJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bcl0pCQkJCVwKKysJCT0gRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bcl0pCQkJXAorKwkJPSAxOwkJCQkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKy8qIFJlZ2lzdGVycyBhcmUgc2V0IHRvIGEgc2VudGluZWwgd2hlbiB0aGV5IGhhdmVuJ3QgeWV0IG1hdGNoZWQuICAqLworK3N0YXRpYyBDSEFSX1QgUFJFRklYKHJlZ191bnNldF9kdW1teSk7CisrIyBkZWZpbmUgUkVHX1VOU0VUX1ZBTFVFICgmUFJFRklYKHJlZ191bnNldF9kdW1teSkpCisrIyBkZWZpbmUgUkVHX1VOU0VUKGUpICgoZSkgPT0gUkVHX1VOU0VUX1ZBTFVFKQorKworKy8qIFN1YnJvdXRpbmUgZGVjbGFyYXRpb25zIGFuZCBtYWNyb3MgZm9yIHJlZ2V4X2NvbXBpbGUuICAqLworK3N0YXRpYyB2b2lkIFBSRUZJWChzdG9yZV9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnKTsKKytzdGF0aWMgdm9pZCBQUkVGSVgoc3RvcmVfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzEsIGludCBhcmcyKTsKKytzdGF0aWMgdm9pZCBQUkVGSVgoaW5zZXJ0X29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnLCBVQ0hBUl9UICplbmQpOworK3N0YXRpYyB2b2lkIFBSRUZJWChpbnNlcnRfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcxLCBpbnQgYXJnMiwgVUNIQVJfVCAqZW5kKTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoYXRfYmVnbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcGF0dGVybiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChhdF9lbmRsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7CisrIyBpZmRlZiBXQ0hBUgorK3N0YXRpYyByZWdfZXJyY29kZV90IHdjc19jb21waWxlX3JhbmdlIChDSEFSX1QgcmFuZ2Vfc3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBUl9UICpjaGFyX3NldCk7Cisrc3RhdGljIHZvaWQgaW5zZXJ0X3NwYWNlIChpbnQgbnVtLCBDSEFSX1QgKmxvYywgQ0hBUl9UICplbmQpOworKyMgZWxzZSAvKiBCWVRFICovCisrc3RhdGljIHJlZ19lcnJjb2RlX3QgYnl0ZV9jb21waWxlX3JhbmdlICh1bnNpZ25lZCBpbnQgcmFuZ2Vfc3RhcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmIpOworKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBGZXRjaCB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybi0tLXRyYW5zbGF0aW5nIGl0CisrICAgaWYgbmVjZXNzYXJ5LiAgQWxzbyBjYXN0IGZyb20gYSBzaWduZWQgY2hhcmFjdGVyIGluIHRoZSBjb25zdGFudAorKyAgIHN0cmluZyBwYXNzZWQgdG8gdXMgYnkgdGhlIHVzZXIgdG8gYW4gdW5zaWduZWQgY2hhciB0aGF0IHdlIGNhbiB1c2UKKysgICBhcyBhbiBhcnJheSBpbmRleCAoaW4sIGUuZy4sIGB0cmFuc2xhdGUnKS4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHRyYW5zbGF0ZSBvbmx5IGlmIGNoYXJhY3RlciA8PSAweGZmLAorKyAgIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byBhbGxvY2F0ZSA0R0IgYXJyYXkgZm9yIHNvbWUgZW5jb2RpbmdzCisrICAgd2hpY2ggaGF2ZSA0IGJ5dGUgY2hhcmFjdGVyX3NldCBsaWtlIFVDUzQuICAqLworKyMgaWZuZGVmIFBBVEZFVENICisrIyAgaWZkZWYgV0NIQVIKKysjICAgZGVmaW5lIFBBVEZFVENIKGMpCQkJCQkJCVwKKysgIGRvIHtpZiAocCA9PSBwZW5kKSByZXR1cm4gUkVHX0VFTkQ7CQkJCQlcCisrICAgIGMgPSAoVUNIQVJfVCkgKnArKzsJCQkJCQkJXAorKyAgICBpZiAodHJhbnNsYXRlICYmIChjIDw9IDB4ZmYpKSBjID0gKFVDSEFSX1QpIHRyYW5zbGF0ZVtjXTsJCVwKKysgIH0gd2hpbGUgKDApCisrIyAgZWxzZSAvKiBCWVRFICovCisrIyAgIGRlZmluZSBQQVRGRVRDSChjKQkJCQkJCQlcCisrICBkbyB7aWYgKHAgPT0gcGVuZCkgcmV0dXJuIFJFR19FRU5EOwkJCQkJXAorKyAgICBjID0gKHVuc2lnbmVkIGNoYXIpICpwKys7CQkJCQkJXAorKyAgICBpZiAodHJhbnNsYXRlKSBjID0gKHVuc2lnbmVkIGNoYXIpIHRyYW5zbGF0ZVtjXTsJCQlcCisrICB9IHdoaWxlICgwKQorKyMgIGVuZGlmIC8qIFdDSEFSICovCisrIyBlbmRpZgorKworKy8qIEZldGNoIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLCB3aXRoIG5vCisrICAgdHJhbnNsYXRpb24uICAqLworKyMgZGVmaW5lIFBBVEZFVENIX1JBVyhjKQkJCQkJCVwKKysgIGRvIHtpZiAocCA9PSBwZW5kKSByZXR1cm4gUkVHX0VFTkQ7CQkJCQlcCisrICAgIGMgPSAoVUNIQVJfVCkgKnArKzsgCSAgICAgICAJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrLyogR28gYmFja3dhcmRzIG9uZSBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4uICAqLworKyMgZGVmaW5lIFBBVFVORkVUQ0ggcC0tCisrCisrCisrLyogSWYgYHRyYW5zbGF0ZScgaXMgbm9uLW51bGwsIHJldHVybiB0cmFuc2xhdGVbRF0sIGVsc2UganVzdCBELiAgV2UKKysgICBjYXN0IHRoZSBzdWJzY3JpcHQgdG8gdHJhbnNsYXRlIGJlY2F1c2Ugc29tZSBkYXRhIGlzIGRlY2xhcmVkIGFzCisrICAgYGNoYXIgKicsIHRvIGF2b2lkIHdhcm5pbmdzIHdoZW4gYSBzdHJpbmcgY29uc3RhbnQgaXMgcGFzc2VkLiAgQnV0CisrICAgd2hlbiB3ZSB1c2UgYSBjaGFyYWN0ZXIgYXMgYSBzdWJzY3JpcHQgd2UgbXVzdCBtYWtlIGl0IHVuc2lnbmVkLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2UgdHJhbnNsYXRlIG9ubHkgaWYgY2hhcmFjdGVyIDw9IDB4ZmYsCisrICAgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGFsbG9jYXRlIDRHQiBhcnJheSBmb3Igc29tZSBlbmNvZGluZ3MKKysgICB3aGljaCBoYXZlIDQgYnl0ZSBjaGFyYWN0ZXJfc2V0IGxpa2UgVUNTNC4gICovCisrCisrIyBpZm5kZWYgVFJBTlNMQVRFCisrIyAgaWZkZWYgV0NIQVIKKysjICAgZGVmaW5lIFRSQU5TTEFURShkKSBcCisrICAoKHRyYW5zbGF0ZSAmJiAoKFVDSEFSX1QpIChkKSkgPD0gMHhmZikgXAorKyAgID8gKGNoYXIpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKGQpXSA6IChkKSkKKysjIGVsc2UgLyogQllURSAqLworKyMgICBkZWZpbmUgVFJBTlNMQVRFKGQpIFwKKysgICh0cmFuc2xhdGUgPyAoY2hhcikgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAoZCldIDogKGNoYXIpIChkKSkKKysjICBlbmRpZiAvKiBXQ0hBUiAqLworKyMgZW5kaWYKKysKKysKKysvKiBNYWNyb3MgZm9yIG91dHB1dHRpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW50byBgYnVmZmVyJy4gICovCisrCisrLyogSWYgdGhlIGJ1ZmZlciBpc24ndCBhbGxvY2F0ZWQgd2hlbiBpdCBjb21lcyBpbiwgdXNlIHRoaXMuICAqLworKyMgZGVmaW5lIElOSVRfQlVGX1NJWkUgICgzMiAqIHNpemVvZihVQ0hBUl9UKSkKKysKKysvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBOIG1vcmUgYnl0ZXMgb2Ygc3BhY2UgaW4gYnVmZmVyLiAgKi8KKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEdFVF9CVUZGRVJfU1BBQ0UobikJCQkJCQlcCisrICAgIHdoaWxlICgoKHVuc2lnbmVkIGxvbmcpYiAtICh1bnNpZ25lZCBsb25nKUNPTVBJTEVEX0JVRkZFUl9WQVIJXAorKyAgICAgICAgICAgICsgKG4pKnNpemVvZihDSEFSX1QpKSA+IGJ1ZnAtPmFsbG9jYXRlZCkJCQlcCisrICAgICAgRVhURU5EX0JVRkZFUiAoKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEdFVF9CVUZGRVJfU1BBQ0UobikJCQkJCQlcCisrICAgIHdoaWxlICgodW5zaWduZWQgbG9uZykgKGIgLSBidWZwLT5idWZmZXIgKyAobikpID4gYnVmcC0+YWxsb2NhdGVkKQlcCisrICAgICAgRVhURU5EX0JVRkZFUiAoKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBNYWtlIHN1cmUgd2UgaGF2ZSBvbmUgbW9yZSBieXRlIG9mIGJ1ZmZlciBzcGFjZSBhbmQgdGhlbiBhZGQgQyB0byBpdC4gICovCisrIyBkZWZpbmUgQlVGX1BVU0goYykJCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKworKy8qIEVuc3VyZSB3ZSBoYXZlIHR3byBtb3JlIGJ5dGVzIG9mIGJ1ZmZlciBzcGFjZSBhbmQgdGhlbiBhcHBlbmQgQzEgYW5kIEMyLiAgKi8KKysjIGRlZmluZSBCVUZfUFVTSF8yKGMxLCBjMikJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBHRVRfQlVGRkVSX1NQQUNFICgyKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMxKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMyKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKworKy8qIEFzIHdpdGggQlVGX1BVU0hfMiwgZXhjZXB0IGZvciB0aHJlZSBieXRlcy4gICovCisrIyBkZWZpbmUgQlVGX1BVU0hfMyhjMSwgYzIsIGMzKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDMpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzEpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzIpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYzMpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrCisrLyogU3RvcmUgYSBqdW1wIHdpdGggb3Bjb2RlIE9QIGF0IExPQyB0byBsb2NhdGlvbiBUTy4gIFdlIHN0b3JlIGEKKysgICByZWxhdGl2ZSBhZGRyZXNzIG9mZnNldCBieSB0aGUgdGhyZWUgYnl0ZXMgdGhlIGp1bXAgaXRzZWxmIG9jY3VwaWVzLiAgKi8KKysjIGRlZmluZSBTVE9SRV9KVU1QKG9wLCBsb2MsIHRvKSBcCisrIFBSRUZJWChzdG9yZV9vcDEpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSkpCisrCisrLyogTGlrZXdpc2UsIGZvciBhIHR3by1hcmd1bWVudCBqdW1wLiAgKi8KKysjIGRlZmluZSBTVE9SRV9KVU1QMihvcCwgbG9jLCB0bywgYXJnKSBcCisrICBQUkVGSVgoc3RvcmVfb3AyKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpLCBhcmcpCisrCisrLyogTGlrZSBgU1RPUkVfSlVNUCcsIGJ1dCBmb3IgaW5zZXJ0aW5nLiAgQXNzdW1lIGBiJyBpcyB0aGUgYnVmZmVyIGVuZC4gICovCisrIyBkZWZpbmUgSU5TRVJUX0pVTVAob3AsIGxvYywgdG8pIFwKKysgIFBSRUZJWChpbnNlcnRfb3AxKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpLCBiKQorKworKy8qIExpa2UgYFNUT1JFX0pVTVAyJywgYnV0IGZvciBpbnNlcnRpbmcuICBBc3N1bWUgYGInIGlzIHRoZSBidWZmZXIgZW5kLiAgKi8KKysjIGRlZmluZSBJTlNFUlRfSlVNUDIob3AsIGxvYywgdG8sIGFyZykgXAorKyAgUFJFRklYKGluc2VydF9vcDIpIChvcCwgbG9jLCAoaW50KSAoKHRvKSAtIChsb2MpIC0gKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKSksXAorKwkgICAgICBhcmcsIGIpCisrCisrLyogVGhpcyBpcyBub3QgYW4gYXJiaXRyYXJ5IGxpbWl0OiB0aGUgYXJndW1lbnRzIHdoaWNoIHJlcHJlc2VudCBvZmZzZXRzCisrICAgaW50byB0aGUgcGF0dGVybiBhcmUgdHdvIGJ5dGVzIGxvbmcuICBTbyBpZiAyXjE2IGJ5dGVzIHR1cm5zIG91dCB0bworKyAgIGJlIHRvbyBzbWFsbCwgbWFueSB0aGluZ3Mgd291bGQgaGF2ZSB0byBjaGFuZ2UuICAqLworKy8qIEFueSBvdGhlciBjb21waWxlciB3aGljaCwgbGlrZSBNU0MsIGhhcyBhbGxvY2F0aW9uIGxpbWl0IGJlbG93IDJeMTYKKysgICBieXRlcyB3aWxsIGhhdmUgdG8gdXNlIGFwcHJvYWNoIHNpbWlsYXIgdG8gd2hhdCB3YXMgZG9uZSBiZWxvdyBmb3IKKysgICBNU0MgYW5kIGRyb3AgTUFYX0JVRl9TSVpFIGEgYml0LiAgT3RoZXJ3aXNlIHlvdSBtYXkgZW5kIHVwCisrICAgcmVhbGxvY2F0aW5nIHRvIDAgYnl0ZXMuICBTdWNoIHRoaW5nIGlzIG5vdCBnb2luZyB0byB3b3JrIHRvbyB3ZWxsLgorKyAgIFlvdSBoYXZlIGJlZW4gd2FybmVkISEgICovCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgaWYgZGVmaW5lZCBfTVNDX1ZFUiAgJiYgIWRlZmluZWQgV0lOMzIKKysvKiBNaWNyb3NvZnQgQyAxNi1iaXQgdmVyc2lvbnMgbGltaXQgbWFsbG9jIHRvIGFwcHJveCA2NTUxMiBieXRlcy4KKysgICBUaGUgUkVBTExPQyBkZWZpbmUgZWxpbWluYXRlcyBhIGZsdXJyeSBvZiBjb252ZXJzaW9uIHdhcm5pbmdzLAorKyAgIGJ1dCBpcyBub3QgcmVxdWlyZWQuICovCisrIyAgIGRlZmluZSBNQVhfQlVGX1NJWkUgIDY1NTAwTAorKyMgICBkZWZpbmUgUkVBTExPQyhwLHMpIHJlYWxsb2MgKChwKSwgKHNpemVfdCkgKHMpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIE1BWF9CVUZfU0laRSAoMUwgPDwgMTYpCisrIyAgIGRlZmluZSBSRUFMTE9DKHAscykgcmVhbGxvYyAoKHApLCAocykpCisrIyAgZW5kaWYKKysKKysvKiBFeHRlbmQgdGhlIGJ1ZmZlciBieSB0d2ljZSBpdHMgY3VycmVudCBzaXplIHZpYSByZWFsbG9jIGFuZAorKyAgIHJlc2V0IHRoZSBwb2ludGVycyB0aGF0IHBvaW50ZWQgaW50byB0aGUgb2xkIGJsb2NrIHRvIHBvaW50IHRvIHRoZQorKyAgIGNvcnJlY3QgcGxhY2VzIGluIHRoZSBuZXcgb25lLiAgSWYgZXh0ZW5kaW5nIHRoZSBidWZmZXIgcmVzdWx0cyBpbiBpdAorKyAgIGJlaW5nIGxhcmdlciB0aGFuIE1BWF9CVUZfU0laRSwgdGhlbiBmbGFnIG1lbW9yeSBleGhhdXN0ZWQuICAqLworKyMgIGlmbmRlZiBfX0JPVU5ERURfUE9JTlRFUlNfXworKyMgICAgZGVmaW5lIF9fQk9VTkRFRF9QT0lOVEVSU19fIDAKKysjICBlbmRpZgorKyMgIGlmIF9fQk9VTkRFRF9QT0lOVEVSU19fCisrIyAgIGRlZmluZSBTRVRfSElHSF9CT1VORChQKSAoX19wdHJoaWdoIChQKSA9IF9fcHRybG93IChQKSArIGJ1ZnAtPmFsbG9jYXRlZCkKKysjICAgZGVmaW5lIE1PVkVfQlVGRkVSX1BPSU5URVIoUCkgXAorKyAgKF9fcHRybG93IChQKSArPSBpbmNyLCBTRVRfSElHSF9CT1VORCAoUCksIF9fcHRydmFsdWUgKFApICs9IGluY3IpCisrIyAgIGRlZmluZSBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAlcCisrICBlbHNlCQkJCQkJXAorKyAgICB7CQkJCQkJXAorKyAgICAgIFNFVF9ISUdIX0JPVU5EIChiKTsJCQlcCisrICAgICAgU0VUX0hJR0hfQk9VTkQgKGJlZ2FsdCk7CQkJXAorKyAgICAgIGlmIChmaXh1cF9hbHRfanVtcCkJCQlcCisrCVNFVF9ISUdIX0JPVU5EIChmaXh1cF9hbHRfanVtcCk7CVwKKysgICAgICBpZiAobGFzdHN0YXJ0KQkJCQlcCisrCVNFVF9ISUdIX0JPVU5EIChsYXN0c3RhcnQpOwkJXAorKyAgICAgIGlmIChwZW5kaW5nX2V4YWN0KQkJCVwKKysJU0VUX0hJR0hfQk9VTkQgKHBlbmRpbmdfZXhhY3QpOwkJXAorKyAgICB9CisrIyAgZWxzZQorKyMgICBkZWZpbmUgTU9WRV9CVUZGRVJfUE9JTlRFUihQKSAoUCkgKz0gaW5jcgorKyMgICBkZWZpbmUgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQKKysjICBlbmRpZgorKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRVhURU5EX0JVRkZFUigpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgVUNIQVJfVCAqb2xkX2J1ZmZlciA9IENPTVBJTEVEX0JVRkZFUl9WQVI7CQkJCVwKKysgICAgaW50IHdjaGFyX2NvdW50OwkJCQkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgKyBzaXplb2YoVUNIQVJfVCkgPiBNQVhfQlVGX1NJWkUpCQlcCisrICAgICAgcmV0dXJuIFJFR19FU0laRTsJCQkJCQkJXAorKyAgICBidWZwLT5hbGxvY2F0ZWQgPDw9IDE7CQkJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkID4gTUFYX0JVRl9TSVpFKQkJCQkJXAorKyAgICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IE1BWF9CVUZfU0laRTsJCQkJCVwKKysgICAgLyogSG93IG1hbnkgY2hhcmFjdGVycyB0aGUgbmV3IGJ1ZmZlciBjYW4gaGF2ZT8gICovCQkJXAorKyAgICB3Y2hhcl9jb3VudCA9IGJ1ZnAtPmFsbG9jYXRlZCAvIHNpemVvZihVQ0hBUl9UKTsJCQlcCisrICAgIGlmICh3Y2hhcl9jb3VudCA9PSAwKSB3Y2hhcl9jb3VudCA9IDE7CQkJCVwKKysgICAgLyogVHJ1bmNhdGUgdGhlIGJ1ZmZlciB0byBDSEFSX1QgYWxpZ24uICAqLwkJCVwKKysgICAgYnVmcC0+YWxsb2NhdGVkID0gd2NoYXJfY291bnQgKiBzaXplb2YoVUNIQVJfVCk7CQkJXAorKyAgICBSRVRBTExPQyAoQ09NUElMRURfQlVGRkVSX1ZBUiwgd2NoYXJfY291bnQsIFVDSEFSX1QpOwkJXAorKyAgICBidWZwLT5idWZmZXIgPSAoY2hhciopQ09NUElMRURfQlVGRkVSX1ZBUjsJCQkJXAorKyAgICBpZiAoQ09NUElMRURfQlVGRkVSX1ZBUiA9PSBOVUxMKQkJCQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOwkJCQkJCVwKKysgICAgLyogSWYgdGhlIGJ1ZmZlciBtb3ZlZCwgbW92ZSBhbGwgdGhlIHBvaW50ZXJzIGludG8gaXQuICAqLwkJXAorKyAgICBpZiAob2xkX2J1ZmZlciAhPSBDT01QSUxFRF9CVUZGRVJfVkFSKQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJaW50IGluY3IgPSBDT01QSUxFRF9CVUZGRVJfVkFSIC0gb2xkX2J1ZmZlcjsJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGIpOwkJCQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiZWdhbHQpOwkJCQkJXAorKwlpZiAoZml4dXBfYWx0X2p1bXApCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGZpeHVwX2FsdF9qdW1wKTsJCQkJXAorKwlpZiAobGFzdHN0YXJ0KQkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAobGFzdHN0YXJ0KTsJCQkJXAorKwlpZiAocGVuZGluZ19leGFjdCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAocGVuZGluZ19leGFjdCk7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBFWFRFTkRfQlVGRkVSKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBVQ0hBUl9UICpvbGRfYnVmZmVyID0gQ09NUElMRURfQlVGRkVSX1ZBUjsJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkID09IE1BWF9CVUZfU0laRSkJCQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNJWkU7CQkJCQkJCVwKKysgICAgYnVmcC0+YWxsb2NhdGVkIDw8PSAxOwkJCQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA+IE1BWF9CVUZfU0laRSkJCQkJCVwKKysgICAgICBidWZwLT5hbGxvY2F0ZWQgPSBNQVhfQlVGX1NJWkU7CQkJCQlcCisrICAgIGJ1ZnAtPmJ1ZmZlciA9IChVQ0hBUl9UICopIFJFQUxMT0MgKENPTVBJTEVEX0JVRkZFUl9WQVIsCQlcCisrCQkJCQkJYnVmcC0+YWxsb2NhdGVkKTsJXAorKyAgICBpZiAoQ09NUElMRURfQlVGRkVSX1ZBUiA9PSBOVUxMKQkJCQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOwkJCQkJCVwKKysgICAgLyogSWYgdGhlIGJ1ZmZlciBtb3ZlZCwgbW92ZSBhbGwgdGhlIHBvaW50ZXJzIGludG8gaXQuICAqLwkJXAorKyAgICBpZiAob2xkX2J1ZmZlciAhPSBDT01QSUxFRF9CVUZGRVJfVkFSKQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJaW50IGluY3IgPSBDT01QSUxFRF9CVUZGRVJfVkFSIC0gb2xkX2J1ZmZlcjsJCQlcCisrCU1PVkVfQlVGRkVSX1BPSU5URVIgKGIpOwkJCQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiZWdhbHQpOwkJCQkJXAorKwlpZiAoZml4dXBfYWx0X2p1bXApCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGZpeHVwX2FsdF9qdW1wKTsJCQkJXAorKwlpZiAobGFzdHN0YXJ0KQkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAobGFzdHN0YXJ0KTsJCQkJXAorKwlpZiAocGVuZGluZ19leGFjdCkJCQkJCQlcCisrCSAgTU9WRV9CVUZGRVJfUE9JTlRFUiAocGVuZGluZ19leGFjdCk7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICBFTFNFX0VYVEVORF9CVUZGRVJfSElHSF9CT1VORAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrLyogU2luY2Ugd2UgaGF2ZSBvbmUgYnl0ZSByZXNlcnZlZCBmb3IgdGhlIHJlZ2lzdGVyIG51bWJlciBhcmd1bWVudCB0bworKyAgIHtzdGFydCxzdG9wfV9tZW1vcnksIHRoZSBtYXhpbXVtIG51bWJlciBvZiBncm91cHMgd2UgY2FuIHJlcG9ydAorKyAgIHRoaW5ncyBhYm91dCBpcyB3aGF0IGZpdHMgaW4gdGhhdCBieXRlLiAgKi8KKysjICBkZWZpbmUgTUFYX1JFR05VTSAyNTUKKysKKysvKiBCdXQgcGF0dGVybnMgY2FuIGhhdmUgbW9yZSB0aGFuIGBNQVhfUkVHTlVNJyByZWdpc3RlcnMuICBXZSBqdXN0CisrICAgaWdub3JlIHRoZSBleGNlc3MuICAqLworK3R5cGVkZWYgdW5zaWduZWQgcmVnbnVtX3Q7CisrCisrCisrLyogTWFjcm9zIGZvciB0aGUgY29tcGlsZSBzdGFjay4gICovCisrCisrLyogU2luY2Ugb2Zmc2V0cyBjYW4gZ28gZWl0aGVyIGZvcndhcmRzIG9yIGJhY2t3YXJkcywgdGhpcyB0eXBlIG5lZWRzIHRvCisrICAgYmUgYWJsZSB0byBob2xkIHZhbHVlcyBmcm9tIC0oTUFYX0JVRl9TSVpFIC0gMSkgdG8gTUFYX0JVRl9TSVpFIC0gMS4gICovCisrLyogaW50IG1heSBiZSBub3QgZW5vdWdoIHdoZW4gc2l6ZW9mKGludCkgPT0gMi4gICovCisrdHlwZWRlZiBsb25nIHBhdHRlcm5fb2Zmc2V0X3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBwYXR0ZXJuX29mZnNldF90IGJlZ2FsdF9vZmZzZXQ7CisrICBwYXR0ZXJuX29mZnNldF90IGZpeHVwX2FsdF9qdW1wOworKyAgcGF0dGVybl9vZmZzZXRfdCBpbm5lcl9ncm91cF9vZmZzZXQ7CisrICBwYXR0ZXJuX29mZnNldF90IGxhc3RzdGFydF9vZmZzZXQ7CisrICByZWdudW1fdCByZWdudW07CisrfSBjb21waWxlX3N0YWNrX2VsdF90OworKworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgY29tcGlsZV9zdGFja19lbHRfdCAqc3RhY2s7CisrICB1bnNpZ25lZCBzaXplOworKyAgdW5zaWduZWQgYXZhaWw7CQkJLyogT2Zmc2V0IG9mIG5leHQgb3BlbiBwb3NpdGlvbi4gICovCisrfSBjb21waWxlX3N0YWNrX3R5cGU7CisrCisrCisrIyAgZGVmaW5lIElOSVRfQ09NUElMRV9TVEFDS19TSVpFIDMyCisrCisrIyAgZGVmaW5lIENPTVBJTEVfU1RBQ0tfRU1QVFkgIChjb21waWxlX3N0YWNrLmF2YWlsID09IDApCisrIyAgZGVmaW5lIENPTVBJTEVfU1RBQ0tfRlVMTCAgKGNvbXBpbGVfc3RhY2suYXZhaWwgPT0gY29tcGlsZV9zdGFjay5zaXplKQorKworKy8qIFRoZSBuZXh0IGF2YWlsYWJsZSBlbGVtZW50LiAgKi8KKysjICBkZWZpbmUgQ09NUElMRV9TVEFDS19UT1AgKGNvbXBpbGVfc3RhY2suc3RhY2tbY29tcGlsZV9zdGFjay5hdmFpbF0pCisrCisrIyBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrLyogU2V0IHRoZSBiaXQgZm9yIGNoYXJhY3RlciBDIGluIGEgbGlzdC4gICovCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgZGVmaW5lIFNFVF9MSVNUX0JJVChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoYlsoKHVuc2lnbmVkIGNoYXIpIChjKSkgLyBCWVRFV0lEVEhdICAgICAgICAgICAgICAgXAorKyAgIHw9IDEgPDwgKCgodW5zaWduZWQgY2hhcikgYykgJSBCWVRFV0lEVEgpKQorKyMgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrCisrLyogR2V0IHRoZSBuZXh0IHVuc2lnbmVkIG51bWJlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuLiAgKi8KKysjIGRlZmluZSBHRVRfVU5TSUdORURfTlVNQkVSKG51bSkgXAorKyAgewkJCQkJCQkJCVwKKysgICAgd2hpbGUgKHAgIT0gcGVuZCkJCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCVBBVEZFVENIIChjKTsJCQkJCQkJXAorKwlpZiAoYyA8ICcwJyB8fCBjID4gJzknKQkJCQkJCVwKKysJICBicmVhazsJCQkJCQkJXAorKwlpZiAobnVtIDw9IFJFX0RVUF9NQVgpCQkJCQkJXAorKwkgIHsJCQkJCQkJCVwKKysJICAgIGlmIChudW0gPCAwKQkJCQkJCVwKKysJICAgICAgbnVtID0gMDsJCQkJCQkJXAorKwkgICAgbnVtID0gbnVtICogMTAgKyBjIC0gJzAnOwkJCQkJXAorKwkgIH0JCQkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgfQorKworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGlmIFdJREVfQ0hBUl9TVVBQT1JUCisrLyogVGhlIEdOVSBDIGxpYnJhcnkgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdXNlci1kZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzCisrICAgYW5kIHRoZSBmdW5jdGlvbnMgZnJvbSBJU08gQyBhbWVuZGVtZW50IDEuICAqLworKyMgICBpZmRlZiBDSEFSQ0xBU1NfTkFNRV9NQVgKKysjICAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggQ0hBUkNMQVNTX05BTUVfTUFYCisrIyAgIGVsc2UKKysvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHNvbWUgaW1wbGVtZW50YXRpb24gbWlnaHQgc3RpbGwgaGF2ZSB0aGlzCisrICAgcHJvYmxlbS4gIFVzZSBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZS4gICovCisrIyAgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIIDI1NgorKyMgICBlbmRpZgorKworKyMgICBpZmRlZiBfTElCQworKyMgICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKSBfX3djdHlwZSAoc3RyaW5nKQorKyMgICBlbHNlCisrIyAgICBkZWZpbmUgSVNfQ0hBUl9DTEFTUyhzdHJpbmcpIHdjdHlwZSAoc3RyaW5nKQorKyMgICBlbmRpZgorKyMgIGVsc2UKKysjICAgZGVmaW5lIENIQVJfQ0xBU1NfTUFYX0xFTkdUSCAgNiAvKiBOYW1lbHksIGB4ZGlnaXQnLiAgKi8KKysKKysjICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKQkJCQkJXAorKyAgIChTVFJFUSAoc3RyaW5nLCAiYWxwaGEiKSB8fCBTVFJFUSAoc3RyaW5nLCAidXBwZXIiKQkJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgImxvd2VyIikgfHwgU1RSRVEgKHN0cmluZywgImRpZ2l0IikJCVwKKysgICAgfHwgU1RSRVEgKHN0cmluZywgImFsbnVtIikgfHwgU1RSRVEgKHN0cmluZywgInhkaWdpdCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJzcGFjZSIpIHx8IFNUUkVRIChzdHJpbmcsICJwcmludCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJwdW5jdCIpIHx8IFNUUkVRIChzdHJpbmcsICJncmFwaCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJjbnRybCIpIHx8IFNUUkVRIChzdHJpbmcsICJibGFuayIpKQorKyMgIGVuZGlmCisrIyBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysMCisrIyBpZm5kZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrCisrLyogSWYgd2UgY2Fubm90IGFsbG9jYXRlIGxhcmdlIG9iamVjdHMgd2l0aGluIHJlX21hdGNoXzJfaW50ZXJuYWwsCisrICAgd2UgbWFrZSB0aGUgZmFpbCBzdGFjayBhbmQgcmVnaXN0ZXIgdmVjdG9ycyBnbG9iYWwuCisrICAgVGhlIGZhaWwgc3RhY2ssIHdlIGdyb3cgdG8gdGhlIG1heGltdW0gc2l6ZSB3aGVuIGEgcmVnZXhwCisrICAgaXMgY29tcGlsZWQuCisrICAgVGhlIHJlZ2lzdGVyIHZlY3RvcnMsIHdlIGFkanVzdCBpbiBzaXplIGVhY2ggdGltZSB3ZQorKyAgIGNvbXBpbGUgYSByZWdleHAsIGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyBpdCBuZWVkcy4gICovCisrCisrc3RhdGljIFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpIGZhaWxfc3RhY2s7CisrCisrLyogU2l6ZSB3aXRoIHdoaWNoIHRoZSBmb2xsb3dpbmcgdmVjdG9ycyBhcmUgY3VycmVudGx5IGFsbG9jYXRlZC4KKysgICBUaGF0IGlzIHNvIHdlIGNhbiBtYWtlIHRoZW0gYmlnZ2VyIGFzIG5lZWRlZCwKKysgICBidXQgbmV2ZXIgbWFrZSB0aGVtIHNtYWxsZXIuICAqLworKyMgIGlmZGVmIERFRklORURfT05DRQorK3N0YXRpYyBpbnQgcmVnc19hbGxvY2F0ZWRfc2l6ZTsKKysKKytzdGF0aWMgY29uc3QgY2hhciAqKiAgICAgcmVnc3RhcnQsICoqICAgICByZWdlbmQ7Cisrc3RhdGljIGNvbnN0IGNoYXIgKiogb2xkX3JlZ3N0YXJ0LCAqKiBvbGRfcmVnZW5kOworK3N0YXRpYyBjb25zdCBjaGFyICoqYmVzdF9yZWdzdGFydCwgKipiZXN0X3JlZ2VuZDsKKytzdGF0aWMgY29uc3QgY2hhciAqKnJlZ19kdW1teTsKKysjICBlbmRpZiAvKiBERUZJTkVEX09OQ0UgKi8KKysKKytzdGF0aWMgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKlBSRUZJWChyZWdfaW5mbyk7Cisrc3RhdGljIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpQUkVGSVgocmVnX2luZm9fZHVtbXkpOworKworKy8qIE1ha2UgdGhlIHJlZ2lzdGVyIHZlY3RvcnMgYmlnIGVub3VnaCBmb3IgTlVNX1JFR1MgcmVnaXN0ZXJzLAorKyAgIGJ1dCBkb24ndCBtYWtlIHRoZW0gc21hbGxlci4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgocmVnZXhfZ3Jvd19yZWdpc3RlcnMpIChpbnQgbnVtX3JlZ3MpCisreworKyAgaWYgKG51bV9yZWdzID4gcmVnc19hbGxvY2F0ZWRfc2l6ZSkKKysgICAgeworKyAgICAgIFJFVEFMTE9DX0lGIChyZWdzdGFydCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChyZWdlbmQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAob2xkX3JlZ3N0YXJ0LCBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAob2xkX3JlZ2VuZCwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChiZXN0X3JlZ3N0YXJ0LCBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoYmVzdF9yZWdlbmQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoUFJFRklYKHJlZ19pbmZvKSwgbnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysgICAgICBSRVRBTExPQ19JRiAocmVnX2R1bW15LAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKFBSRUZJWChyZWdfaW5mb19kdW1teSksIG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrCisrICAgICAgcmVnc19hbGxvY2F0ZWRfc2l6ZSA9IG51bV9yZWdzOworKyAgICB9CisrfQorKworKyMgZW5kaWYgLyogbm90IE1BVENIX01BWV9BTExPQ0FURSAqLworKwwKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKytzdGF0aWMgYm9vbGVhbiBncm91cF9pbl9jb21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjaywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdudW1fdCByZWdudW0pOworKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKy8qIGByZWdleF9jb21waWxlJyBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggU0laRSkgYWNjb3JkaW5nIHRvIFNZTlRBWC4KKysgICBSZXR1cm5zIG9uZSBvZiBlcnJvciBjb2RlcyBkZWZpbmVkIGluIGByZWdleC5oJywgb3IgemVybyBmb3Igc3VjY2Vzcy4KKysKKysgICBBc3N1bWVzIHRoZSBgYWxsb2NhdGVkJyAoYW5kIHBlcmhhcHMgYGJ1ZmZlcicpIGFuZCBgdHJhbnNsYXRlJworKyAgIGZpZWxkcyBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuCisrCisrICAgSWYgaXQgc3VjY2VlZHMsIHJlc3VsdHMgYXJlIHB1dCBpbiBCVUZQIChpZiBpdCByZXR1cm5zIGFuIGVycm9yLCB0aGUKKysgICBjb250ZW50cyBvZiBCVUZQIGFyZSB1bmRlZmluZWQpOgorKyAgICAgYGJ1ZmZlcicgaXMgdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgc3ludGF4JyBpcyBzZXQgdG8gU1lOVEFYOworKyAgICAgYHVzZWQnIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIGlzIHplcm87CisrICAgICBgcmVfbnN1YicgaXMgdGhlIG51bWJlciBvZiBzdWJleHByZXNzaW9ucyBpbiBQQVRURVJOOworKyAgICAgYG5vdF9ib2wnIGFuZCBgbm90X2VvbCcgYXJlIHplcm87CisrCisrICAgVGhlIGBmYXN0bWFwJyBhbmQgYG5ld2xpbmVfYW5jaG9yJyBmaWVsZHMgYXJlIG5laXRoZXIKKysgICBleGFtaW5lZCBub3Igc2V0LiAgKi8KKysKKysvKiBSZXR1cm4sIGZyZWVpbmcgc3RvcmFnZSB3ZSBhbGxvY2F0ZWQuICAqLworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRlJFRV9TVEFDS19SRVRVUk4odmFsdWUpCQlcCisrICByZXR1cm4gKGZyZWUocGF0dGVybiksIGZyZWUobWJzX29mZnNldCksIGZyZWUoaXNfYmluYXJ5KSwgZnJlZSAoY29tcGlsZV9zdGFjay5zdGFjayksIHZhbHVlKQorKyMgZWxzZQorKyMgIGRlZmluZSBGUkVFX1NUQUNLX1JFVFVSTih2YWx1ZSkJCVwKKysgIHJldHVybiAoZnJlZSAoY29tcGlsZV9zdGFjay5zdGFjayksIHZhbHVlKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKytzdGF0aWMgcmVnX2VycmNvZGVfdAorK1BSRUZJWChyZWdleF9jb21waWxlKSAoY29uc3QgY2hhciAqQVJHX1BSRUZJWChwYXR0ZXJuKSwKKysgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBBUkdfUFJFRklYKHNpemUpLCByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIC8qIFdlIGZldGNoIGNoYXJhY3RlcnMgZnJvbSBQQVRURVJOIGhlcmUuICBFdmVuIHRob3VnaCBQQVRURVJOIGlzCisrICAgICBgY2hhciAqJyAoaS5lLiwgc2lnbmVkKSwgd2UgZGVjbGFyZSB0aGVzZSB2YXJpYWJsZXMgYXMgdW5zaWduZWQsIHNvCisrICAgICB0aGV5IGNhbiBiZSByZWxpYWJseSB1c2VkIGFzIGFycmF5IGluZGljZXMuICAqLworKyAgcmVnaXN0ZXIgVUNIQVJfVCBjLCBjMTsKKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEEgdGVtcG9yYXJ5IHNwYWNlIHRvIGtlZXAgd2NoYXJfdCBwYXR0ZXJuIGFuZCBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgIENIQVJfVCAqcGF0dGVybiwgKkNPTVBJTEVEX0JVRkZFUl9WQVI7CisrICBzaXplX3Qgc2l6ZTsKKysgIC8qIG9mZnNldCBidWZmZXIgZm9yIG9wdGltaXphdGlvbi4gU2VlIGNvbnZlcnRfbWJzX3RvX3djLiAgKi8KKysgIGludCAqbWJzX29mZnNldCA9IE5VTEw7CisrICAvKiBJdCBob2xkIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyICppc19iaW5hcnkgPSBOVUxMOworKyAgLyogQSBmbGFnIHdoZXRoZXIgZXhhY3RuIGlzIGhhbmRsaW5nIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyIGlzX2V4YWN0bl9iaW4gPSBGQUxTRTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEEgcmFuZG9tIHRlbXBvcmFyeSBzcG90IGluIFBBVFRFUk4uICAqLworKyAgY29uc3QgQ0hBUl9UICpwMTsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHdoZXJlIHdlIHNob3VsZCBhcHBlbmQuICAqLworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqYjsKKysKKysgIC8qIEtlZXBzIHRyYWNrIG9mIHVuY2xvc2VkIGdyb3Vwcy4gICovCisrICBjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjazsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgY3VycmVudCAoZW5kaW5nKSBwb3NpdGlvbiBpbiB0aGUgcGF0dGVybi4gICovCisrI2lmZGVmIFdDSEFSCisrICBjb25zdCBDSEFSX1QgKnA7CisrICBjb25zdCBDSEFSX1QgKnBlbmQ7CisrI2Vsc2UgLyogQllURSAqLworKyAgY29uc3QgQ0hBUl9UICpwID0gcGF0dGVybjsKKysgIGNvbnN0IENIQVJfVCAqcGVuZCA9IHBhdHRlcm4gKyBzaXplOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogSG93IHRvIHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gICovCisrICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50cmFuc2xhdGU7CisrCisrICAvKiBBZGRyZXNzIG9mIHRoZSBjb3VudC1ieXRlIG9mIHRoZSBtb3N0IHJlY2VudGx5IGluc2VydGVkIGBleGFjdG4nCisrICAgICBjb21tYW5kLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgbmV3IGV4YWN0LW1hdGNoCisrICAgICBjaGFyYWN0ZXIgY2FuIGJlIGFkZGVkIHRvIHRoYXQgY29tbWFuZCBvciBpZiB0aGUgY2hhcmFjdGVyIHJlcXVpcmVzCisrICAgICBhIG5ldyBgZXhhY3RuJyBjb21tYW5kLiAgKi8KKysgIFVDSEFSX1QgKnBlbmRpbmdfZXhhY3QgPSAwOworKworKyAgLyogQWRkcmVzcyBvZiBzdGFydCBvZiB0aGUgbW9zdCByZWNlbnRseSBmaW5pc2hlZCBleHByZXNzaW9uLgorKyAgICAgVGhpcyB0ZWxscywgZS5nLiwgcG9zdGZpeCAqIHdoZXJlIHRvIGZpbmQgdGhlIHN0YXJ0IG9mIGl0cworKyAgICAgb3BlcmFuZC4gIFJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZ3JvdXBzIGFuZCBhbHRlcm5hdGl2ZXMuICAqLworKyAgVUNIQVJfVCAqbGFzdHN0YXJ0ID0gMDsKKysKKysgIC8qIEFkZHJlc3Mgb2YgYmVnaW5uaW5nIG9mIHJlZ2V4cCwgb3IgaW5zaWRlIG9mIGxhc3QgZ3JvdXAuICAqLworKyAgVUNIQVJfVCAqYmVnYWx0OworKworKyAgLyogQWRkcmVzcyBvZiB0aGUgcGxhY2Ugd2hlcmUgYSBmb3J3YXJkIGp1bXAgc2hvdWxkIGdvIHRvIHRoZSBlbmQgb2YKKysgICAgIHRoZSBjb250YWluaW5nIGV4cHJlc3Npb24uICBFYWNoIGFsdGVybmF0aXZlIG9mIGFuIGBvcicgLS0gZXhjZXB0IHRoZQorKyAgICAgbGFzdCAtLSBlbmRzIHdpdGggYSBmb3J3YXJkIGp1bXAgb2YgdGhpcyBzb3J0LiAgKi8KKysgIFVDSEFSX1QgKmZpeHVwX2FsdF9qdW1wID0gMDsKKysKKysgIC8qIENvdW50cyBvcGVuLWdyb3VwcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4gIFJlbWVtYmVyZWQgZm9yIHRoZQorKyAgICAgbWF0Y2hpbmcgY2xvc2UtZ3JvdXAgb24gdGhlIGNvbXBpbGUgc3RhY2ssIHNvIHRoZSBzYW1lIHJlZ2lzdGVyCisrICAgICBudW1iZXIgaXMgcHV0IGluIHRoZSBzdG9wX21lbW9yeSBhcyB0aGUgc3RhcnRfbWVtb3J5LiAgKi8KKysgIHJlZ251bV90IHJlZ251bSA9IDA7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBJbml0aWFsaXplIHRoZSB3Y2hhcl90IFBBVFRFUk4gYW5kIG9mZnNldF9idWZmZXIuICAqLworKyAgcCA9IHBlbmQgPSBwYXR0ZXJuID0gVEFMTE9DKGNzaXplICsgMSwgQ0hBUl9UKTsKKysgIG1ic19vZmZzZXQgPSBUQUxMT0MoY3NpemUgKyAxLCBpbnQpOworKyAgaXNfYmluYXJ5ID0gVEFMTE9DKGNzaXplICsgMSwgY2hhcik7CisrICBpZiAocGF0dGVybiA9PSBOVUxMIHx8IG1ic19vZmZzZXQgPT0gTlVMTCB8fCBpc19iaW5hcnkgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGZyZWUocGF0dGVybik7CisrICAgICAgZnJlZShtYnNfb2Zmc2V0KTsKKysgICAgICBmcmVlKGlzX2JpbmFyeSk7CisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisrICAgIH0KKysgIHBhdHRlcm5bY3NpemVdID0gTCdcMCc7CS8qIHNlbnRpbmVsICovCisrICBzaXplID0gY29udmVydF9tYnNfdG9fd2NzKHBhdHRlcm4sIGNwYXR0ZXJuLCBjc2l6ZSwgbWJzX29mZnNldCwgaXNfYmluYXJ5KTsKKysgIHBlbmQgPSBwICsgc2l6ZTsKKysgIGlmIChzaXplIDwgMCkKKysgICAgeworKyAgICAgIGZyZWUocGF0dGVybik7CisrICAgICAgZnJlZShtYnNfb2Zmc2V0KTsKKysgICAgICBmcmVlKGlzX2JpbmFyeSk7CisrICAgICAgcmV0dXJuIFJFR19CQURQQVQ7CisrICAgIH0KKysjZW5kaWYKKysKKysjaWZkZWYgREVCVUcKKysgIERFQlVHX1BSSU5UMSAoIlxuQ29tcGlsaW5nIHBhdHRlcm46ICIpOworKyAgaWYgKGRlYnVnKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgZGVidWdfY291bnQ7CisrCisrICAgICAgZm9yIChkZWJ1Z19jb3VudCA9IDA7IGRlYnVnX2NvdW50IDwgc2l6ZTsgZGVidWdfY291bnQrKykKKysgICAgICAgIFBVVF9DSEFSIChwYXR0ZXJuW2RlYnVnX2NvdW50XSk7CisrICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrICAgIH0KKysjZW5kaWYgLyogREVCVUcgKi8KKysKKysgIC8qIEluaXRpYWxpemUgdGhlIGNvbXBpbGUgc3RhY2suICAqLworKyAgY29tcGlsZV9zdGFjay5zdGFjayA9IFRBTExPQyAoSU5JVF9DT01QSUxFX1NUQUNLX1NJWkUsIGNvbXBpbGVfc3RhY2tfZWx0X3QpOworKyAgaWYgKGNvbXBpbGVfc3RhY2suc3RhY2sgPT0gTlVMTCkKKysgICAgeworKyNpZmRlZiBXQ0hBUgorKyAgICAgIGZyZWUocGF0dGVybik7CisrICAgICAgZnJlZShtYnNfb2Zmc2V0KTsKKysgICAgICBmcmVlKGlzX2JpbmFyeSk7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisrICAgIH0KKysKKysgIGNvbXBpbGVfc3RhY2suc2l6ZSA9IElOSVRfQ09NUElMRV9TVEFDS19TSVpFOworKyAgY29tcGlsZV9zdGFjay5hdmFpbCA9IDA7CisrCisrICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisrICBidWZwLT5zeW50YXggPSBzeW50YXg7CisrICBidWZwLT5mYXN0bWFwX2FjY3VyYXRlID0gMDsKKysgIGJ1ZnAtPm5vdF9ib2wgPSBidWZwLT5ub3RfZW9sID0gMDsKKysKKysgIC8qIFNldCBgdXNlZCcgdG8gemVybywgc28gdGhhdCBpZiB3ZSByZXR1cm4gYW4gZXJyb3IsIHRoZSBwYXR0ZXJuCisrICAgICBwcmludGVyIChmb3IgZGVidWdnaW5nKSB3aWxsIHRoaW5rIHRoZXJlJ3Mgbm8gcGF0dGVybi4gIFdlIHJlc2V0IGl0CisrICAgICBhdCB0aGUgZW5kLiAgKi8KKysgIGJ1ZnAtPnVzZWQgPSAwOworKworKyAgLyogQWx3YXlzIGNvdW50IGdyb3Vwcywgd2hldGhlciBvciBub3QgYnVmcC0+bm9fc3ViIGlzIHNldC4gICovCisrICBidWZwLT5yZV9uc3ViID0gMDsKKysKKysjaWYgIWRlZmluZWQgZW1hY3MgJiYgIWRlZmluZWQgU1lOVEFYX1RBQkxFCisrICAvKiBJbml0aWFsaXplIHRoZSBzeW50YXggdGFibGUuICAqLworKyAgIGluaXRfc3ludGF4X29uY2UgKCk7CisrI2VuZGlmCisrCisrICBpZiAoYnVmcC0+YWxsb2NhdGVkID09IDApCisrICAgIHsKKysgICAgICBpZiAoYnVmcC0+YnVmZmVyKQorKwl7IC8qIElmIHplcm8gYWxsb2NhdGVkLCBidXQgYnVmZmVyIGlzIG5vbi1udWxsLCB0cnkgdG8gcmVhbGxvYworKyAgICAgICAgICAgICBlbm91Z2ggc3BhY2UuICBUaGlzIGxvc2VzIGlmIGJ1ZmZlcidzIGFkZHJlc3MgaXMgYm9ndXMsIGJ1dAorKyAgICAgICAgICAgICB0aGF0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuICAqLworKyNpZmRlZiBXQ0hBUgorKwkgIC8qIEZyZWUgYnVmcC0+YnVmZmVyIGFuZCBhbGxvY2F0ZSBhbiBhcnJheSBmb3Igd2NoYXJfdCBwYXR0ZXJuCisrCSAgICAgYnVmZmVyLiAgKi8KKysgICAgICAgICAgZnJlZShidWZwLT5idWZmZXIpOworKyAgICAgICAgICBDT01QSUxFRF9CVUZGRVJfVkFSID0gVEFMTE9DIChJTklUX0JVRl9TSVpFL3NpemVvZihVQ0hBUl9UKSwKKysJCQkJCVVDSEFSX1QpOworKyNlbHNlCisrICAgICAgICAgIFJFVEFMTE9DIChDT01QSUxFRF9CVUZGRVJfVkFSLCBJTklUX0JVRl9TSVpFLCBVQ0hBUl9UKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICB7IC8qIENhbGxlciBkaWQgbm90IGFsbG9jYXRlIGEgYnVmZmVyLiAgRG8gaXQgZm9yIHRoZW0uICAqLworKyAgICAgICAgICBDT01QSUxFRF9CVUZGRVJfVkFSID0gVEFMTE9DIChJTklUX0JVRl9TSVpFIC8gc2l6ZW9mKFVDSEFSX1QpLAorKwkJCQkJVUNIQVJfVCk7CisrICAgICAgICB9CisrCisrICAgICAgaWYgKCFDT01QSUxFRF9CVUZGRVJfVkFSKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VTUEFDRSk7CisrI2lmZGVmIFdDSEFSCisrICAgICAgYnVmcC0+YnVmZmVyID0gKGNoYXIqKUNPTVBJTEVEX0JVRkZFUl9WQVI7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgYnVmcC0+YWxsb2NhdGVkID0gSU5JVF9CVUZfU0laRTsKKysgICAgfQorKyNpZmRlZiBXQ0hBUgorKyAgZWxzZQorKyAgICBDT01QSUxFRF9CVUZGRVJfVkFSID0gKFVDSEFSX1QqKSBidWZwLT5idWZmZXI7CisrI2VuZGlmCisrCisrICBiZWdhbHQgPSBiID0gQ09NUElMRURfQlVGRkVSX1ZBUjsKKysKKysgIC8qIExvb3AgdGhyb3VnaCB0aGUgdW5jb21waWxlZCBwYXR0ZXJuIHVudGlsIHdlJ3JlIGF0IHRoZSBlbmQuICAqLworKyAgd2hpbGUgKHAgIT0gcGVuZCkKKysgICAgeworKyAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICBzd2l0Y2ggKGMpCisrICAgICAgICB7CisrICAgICAgICBjYXNlICdeJzoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmICggICAvKiBJZiBhdCBzdGFydCBvZiBwYXR0ZXJuLCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgICAgcCA9PSBwYXR0ZXJuICsgMQorKyAgICAgICAgICAgICAgICAgICAvKiBJZiBjb250ZXh0IGluZGVwZW5kZW50LCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgfHwgc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCisrICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgZGVwZW5kcyBvbiB3aGF0J3MgY29tZSBiZWZvcmUuICAqLworKyAgICAgICAgICAgICAgICB8fCBQUkVGSVgoYXRfYmVnbGluZV9sb2NfcCkgKHBhdHRlcm4sIHAsIHN5bnRheCkpCisrICAgICAgICAgICAgICBCVUZfUFVTSCAoYmVnbGluZSk7CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIGNhc2UgJyQnOgorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCAgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgICAgcCA9PSBwZW5kCisrICAgICAgICAgICAgICAgICAgIC8qIElmIGNvbnRleHQgaW5kZXBlbmRlbnQsIGl0J3MgYW4gb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICB8fCBzeW50YXggJiBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMKKysgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBkZXBlbmRzIG9uIHdoYXQncyBuZXh0LiAgKi8KKysgICAgICAgICAgICAgICAgfHwgUFJFRklYKGF0X2VuZGxpbmVfbG9jX3ApIChwLCBwZW5kLCBzeW50YXgpKQorKyAgICAgICAgICAgICAgIEJVRl9QVVNIIChlbmRsaW5lKTsKKysgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICB9CisrICAgICAgICAgICBicmVhazsKKysKKysKKysJY2FzZSAnKyc6CisrICAgICAgICBjYXNlICc/JzoKKysgICAgICAgICAgaWYgKChzeW50YXggJiBSRV9CS19QTFVTX1FNKQorKyAgICAgICAgICAgICAgfHwgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSkKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgaGFuZGxlX3BsdXM6CisrICAgICAgICBjYXNlICcqJzoKKysgICAgICAgICAgLyogSWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGF0dGVybi4uLiAqLworKyAgICAgICAgICBpZiAoIWxhc3RzdGFydCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUykKKysgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19CQURSUFQpOworKyAgICAgICAgICAgICAgZWxzZSBpZiAoIShzeW50YXggJiBSRV9DT05URVhUX0lOREVQX09QUykpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICB7CisrICAgICAgICAgICAgLyogQXJlIHdlIG9wdGltaXppbmcgdGhpcyBqdW1wPyAgKi8KKysgICAgICAgICAgICBib29sZWFuIGtlZXBfc3RyaW5nX3AgPSBmYWxzZTsKKysKKysgICAgICAgICAgICAvKiAxIG1lYW5zIHplcm8gKG1hbnkpIG1hdGNoZXMgaXMgYWxsb3dlZC4gICovCisrICAgICAgICAgICAgY2hhciB6ZXJvX3RpbWVzX29rID0gMCwgbWFueV90aW1lc19vayA9IDA7CisrCisrICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBzZXF1ZW5jZSBvZiByZXBldGl0aW9uIGNoYXJzLCBjb2xsYXBzZSBpdAorKyAgICAgICAgICAgICAgIGRvd24gdG8ganVzdCBvbmUgKHRoZSByaWdodCBvbmUpLiAgV2UgY2FuJ3QgY29tYmluZQorKyAgICAgICAgICAgICAgIGludGVydmFsIG9wZXJhdG9ycyB3aXRoIHRoZXNlIGJlY2F1c2Ugb2YsIGUuZy4sIGBhezJ9KicsCisrICAgICAgICAgICAgICAgd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggYW4gZXZlbiBudW1iZXIgb2YgYGEncy4gICovCisrCisrICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgemVyb190aW1lc19vayB8PSBjICE9ICcrJzsKKysgICAgICAgICAgICAgICAgbWFueV90aW1lc19vayB8PSBjICE9ICc/JzsKKysKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKicKKysgICAgICAgICAgICAgICAgICAgIHx8ICghKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0pICYmIChjID09ICcrJyB8fCBjID09ICc/JykpKQorKyAgICAgICAgICAgICAgICAgIDsKKysKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQktfUExVU19RTSAgJiYgIGMgPT0gJ1xcJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysgICAgICAgICAgICAgICAgICAgIGlmICghKGMxID09ICcrJyB8fCBjMSA9PSAnPycpKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAgICBjID0gYzE7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHdlIGZvdW5kIGFub3RoZXIgcmVwZWF0IGNoYXJhY3Rlci4gICovCisrICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIFN0YXIsIGV0Yy4gYXBwbGllZCB0byBhbiBlbXB0eSBwYXR0ZXJuIGlzIGVxdWl2YWxlbnQKKysgICAgICAgICAgICAgICB0byBhbiBlbXB0eSBwYXR0ZXJuLiAgKi8KKysgICAgICAgICAgICBpZiAoIWxhc3RzdGFydCkKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIC8qIE5vdyB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IHplcm8gbWF0Y2hlcyBpcyBhbGxvd2VkCisrICAgICAgICAgICAgICAgYW5kIGFsc28gd2hldGhlciBvciBub3QgdHdvIG9yIG1vcmUgbWF0Y2hlcyBpcyBhbGxvd2VkLiAgKi8KKysgICAgICAgICAgICBpZiAobWFueV90aW1lc19vaykKKysgICAgICAgICAgICAgIHsgLyogTW9yZSB0aGFuIG9uZSByZXBldGl0aW9uIGlzIGFsbG93ZWQsIHNvIHB1dCBpbiBhdCB0aGUKKysgICAgICAgICAgICAgICAgICAgZW5kIGEgYmFja3dhcmQgcmVsYXRpdmUganVtcCBmcm9tIGBiJyB0byBiZWZvcmUgdGhlIG5leHQKKysgICAgICAgICAgICAgICAgICAganVtcCB3ZSdyZSBnb2luZyB0byBwdXQgaW4gYmVsb3cgKHdoaWNoIGp1bXBzIGZyb20KKysgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0IHRvIGFmdGVyIHRoaXMganVtcCkuCisrCisrICAgICAgICAgICAgICAgICAgIEJ1dCBpZiB3ZSBhcmUgYXQgdGhlIGAqJyBpbiB0aGUgZXhhY3Qgc2VxdWVuY2UgYC4qXG4nLAorKyAgICAgICAgICAgICAgICAgICBpbnNlcnQgYW4gdW5jb25kaXRpb25hbCBqdW1wIGJhY2t3YXJkcyB0byB0aGUgLiwKKysgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wLiAgVGhpcyB3YXkgd2Ugb25seQorKyAgICAgICAgICAgICAgICAgICBwdXNoIGEgZmFpbHVyZSBwb2ludCBvbmNlLCBpbnN0ZWFkIG9mIGV2ZXJ5IHRpbWUKKysgICAgICAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbG9vcC4gICovCisrICAgICAgICAgICAgICAgIGFzc2VydCAocCAtIDEgPiBwYXR0ZXJuKTsKKysKKysgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUganVtcC4gICovCisrICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysKKysgICAgICAgICAgICAgICAgLyogV2Uga25vdyB3ZSBhcmUgbm90IGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHBhdHRlcm4sCisrICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgbGFzdHN0YXJ0IHdhcyBub256ZXJvLiAgQW5kIHdlJ3ZlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50ZWQgYHAnLCBieSB0aGUgd2F5LCB0byBiZSB0aGUgY2hhcmFjdGVyIGFmdGVyCisrICAgICAgICAgICAgICAgICAgIHRoZSBgKicuICBEbyB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZyBhbmFsb2dvdXMgaGVyZQorKyAgICAgICAgICAgICAgICAgICBmb3IgbnVsbCBieXRlcywgYmVjYXVzZSBvZiBSRV9ET1RfTk9UX05VTEw/ICAqLworKyAgICAgICAgICAgICAgICBpZiAoVFJBTlNMQVRFICgqKHAgLSAyKSkgPT0gVFJBTlNMQVRFICgnLicpCisrCQkgICAgJiYgemVyb190aW1lc19vaworKyAgICAgICAgICAgICAgICAgICAgJiYgcCA8IHBlbmQgJiYgVFJBTlNMQVRFICgqcCkgPT0gVFJBTlNMQVRFICgnXG4nKQorKyAgICAgICAgICAgICAgICAgICAgJiYgIShzeW50YXggJiBSRV9ET1RfTkVXTElORSkpCisrICAgICAgICAgICAgICAgICAgeyAvKiBXZSBoYXZlIC4qXG4uICAqLworKyAgICAgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAoanVtcCwgYiwgbGFzdHN0YXJ0KTsKKysgICAgICAgICAgICAgICAgICAgIGtlZXBfc3RyaW5nX3AgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UuICAqLworKyAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKG1heWJlX3BvcF9qdW1wLCBiLCBsYXN0c3RhcnQgLQorKwkJCSAgICAgICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpOworKworKyAgICAgICAgICAgICAgICAvKiBXZSd2ZSBhZGRlZCBtb3JlIHN0dWZmIHRvIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIE9uIGZhaWx1cmUsIGp1bXAgZnJvbSBsYXN0c3RhcnQgdG8gYiArIDMsIHdoaWNoIHdpbGwgYmUgdGhlCisrICAgICAgICAgICAgICAgZW5kIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhpcyBqdW1wIGlzIGluc2VydGVkLiAgKi8KKysJICAgIC8qIGlmZGVmIFdDSEFSLCAnYiArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFJyBpbnN0ZWFkIG9mCisrCSAgICAgICAnYiArIDMnLiAgKi8KKysgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgSU5TRVJUX0pVTVAgKGtlZXBfc3RyaW5nX3AgPyBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9uX2ZhaWx1cmVfanVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0LCBiICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKyAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgaWYgKCF6ZXJvX3RpbWVzX29rKQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvKiBBdCBsZWFzdCBvbmUgcmVwZXRpdGlvbiBpcyByZXF1aXJlZCwgc28gaW5zZXJ0IGEKKysgICAgICAgICAgICAgICAgICAgYGR1bW15X2ZhaWx1cmVfanVtcCcgYmVmb3JlIHRoZSBpbml0aWFsCisrICAgICAgICAgICAgICAgICAgIGBvbl9mYWlsdXJlX2p1bXAnIGluc3RydWN0aW9uIG9mIHRoZSBsb29wLiBUaGlzCisrICAgICAgICAgICAgICAgICAgIGVmZmVjdHMgYSBza2lwIG92ZXIgdGhhdCBpbnN0cnVjdGlvbiB0aGUgZmlyc3QgdGltZQorKyAgICAgICAgICAgICAgICAgICB3ZSBoaXQgdGhhdCBsb29wLiAgKi8KKysgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICBJTlNFUlRfSlVNUCAoZHVtbXlfZmFpbHVyZV9qdW1wLCBsYXN0c3RhcnQsIGxhc3RzdGFydCArCisrCQkJICAgICAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysJICBicmVhazsKKysKKysKKysJY2FzZSAnLic6CisrICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgIEJVRl9QVVNIIChhbnljaGFyKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICBjYXNlICdbJzoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGJvb2xlYW4gaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysjaWZkZWYgV0NIQVIKKysJICAgIENIQVJfVCByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrI2Vsc2UKKysJICAgIHVuc2lnbmVkIGludCByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrI2VuZGlmCisrICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyNpZmRlZiBXQ0hBUgorKwkgICAgLyogV2UgYXNzdW1lIGEgY2hhcnNldChfbm90KSBzdHJ1Y3R1cmUgYXMgYSB3Y2hhcl90IGFycmF5LgorKwkgICAgICAgY2hhcnNldFswXSA9IChyZV9vcGNvZGVfdCkgY2hhcnNldChfbm90KQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbMV0gPSBsICg9IGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMpCisrICAgICAgICAgICAgICAgY2hhcnNldFsyXSA9IG0gKD0gbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2xzKQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbM10gPSBuICg9IGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzc2VzKQorKwkgICAgICAgY2hhcnNldFs0XSA9IG8gKD0gbGVuZ3RoIG9mIGNoYXJfcmFuZ2VzKQorKwkgICAgICAgY2hhcnNldFs1XSA9IHAgKD0gbGVuZ3RoIG9mIGNoYXJzKQorKworKyAgICAgICAgICAgICAgIGNoYXJzZXRbNl0gPSBjaGFyX2NsYXNzICh3Y3R5cGVfdCkKKysgICAgICAgICAgICAgICBjaGFyc2V0WzYrQ0hBUl9DTEFTU19TSVpFXSA9IGNoYXJfY2xhc3MgKHdjdHlwZV90KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrNV0gID0gY2hhcl9jbGFzcyAod2N0eXBlX3QpCisrCisrICAgICAgICAgICAgICAgY2hhcnNldFtsKzZdICA9IGNvbGxhdGluZ19zeW1ib2wgKHdjaGFyX3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCttKzVdICA9IGNvbGxhdGluZ19zeW1ib2wgKHdjaGFyX3QpCisrCQkJCQlpZmRlZiBfTElCQyB3ZSB1c2UgdGhlIGluZGV4IGlmCisrCQkJCQlfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIgaW5zdGVhZCBvZgorKwkJCQkJd2NoYXJfdCBzdHJpbmcuCisrCisrICAgICAgICAgICAgICAgY2hhcnNldFtsK20rNl0gID0gZXF1aXZhbGVuY2VfY2xhc3NlcyAod2NoYXJfdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrbStuKzVdICA9IGVxdWl2YWxlbmNlX2NsYXNzZXMgKHdjaGFyX3QpCisrCQkJCQlpZmRlZiBfTElCQyB3ZSB1c2UgdGhlIGluZGV4IGluCisrCQkJCQlfTkxfQ09MTEFURV9XRUlHSFQgaW5zdGVhZCBvZgorKwkJCQkJd2NoYXJfdCBzdHJpbmcuCisrCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzZdID0gcmFuZ2Vfc3RhcnQKKysJICAgICAgIGNoYXJzZXRbbCttK24rN10gPSByYW5nZV9lbmQKKysJICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rNF0gPSByYW5nZV9zdGFydAorKwkgICAgICAgY2hhcnNldFtsK20rbisybys1XSA9IHJhbmdlX2VuZAorKwkJCQkJaWZkZWYgX0xJQkMgd2UgdXNlIHRoZSB2YWx1ZSBsb29rZWQgdXAKKysJCQkJCWluIF9OTF9DT0xMQVRFX0NPTExTRVEgaW5zdGVhZCBvZgorKwkJCQkJd2NoYXJfdCBjaGFyYWN0ZXIuCisrCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvKzZdID0gY2hhcgorKwkgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorKwkgICAgICAgY2hhcnNldFtsK20rbisybytwKzVdID0gY2hhcgorKworKwkgICAgICovCisrCisrCSAgICAvKiBXZSBuZWVkIGF0IGxlYXN0IDYgc3BhY2VzOiB0aGUgb3Bjb2RlLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgY2hhcl9jbGFzc2VzLCB0aGUgbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2xzLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgZXF1aXZhbGVuY2VfY2xhc3NlcywgdGhlIGxlbmd0aCBvZiBjaGFyX3JhbmdlcywgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGNoYXJzLiAgKi8KKysJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDYpOworKworKwkgICAgLyogU2F2ZSBiIGFzIGxhc3RzdGFydC4gQW5kIFdlIHVzZSBsYXN0c3RhcnQgYXMgdGhlIHBvaW50ZXIKKysJICAgICAgIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjaGFyc2V0IGhlcmUuCisrCSAgICAgICBJbiBvdGhlciB3b3JkcywgbGFzdHN0YXJ0W2ldIGluZGljYXRlcyBjaGFyc2V0W2ldLiAgKi8KKysgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKworKyAgICAgICAgICAgIC8qIFdlIHRlc3QgYCpwID09ICdeJyB0d2ljZSwgaW5zdGVhZCBvZiB1c2luZyBhbiBpZgorKyAgICAgICAgICAgICAgIHN0YXRlbWVudCwgc28gd2Ugb25seSBuZWVkIG9uZSBCVUZfUFVTSC4gICovCisrICAgICAgICAgICAgQlVGX1BVU0ggKCpwID09ICdeJyA/IGNoYXJzZXRfbm90IDogY2hhcnNldCk7CisrICAgICAgICAgICAgaWYgKCpwID09ICdeJykKKysgICAgICAgICAgICAgIHArKzsKKysKKysgICAgICAgICAgICAvKiBQdXNoIHRoZSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzLCB0aGUgbGVuZ3RoIG9mCisrICAgICAgICAgICAgICAgY29sbGF0aW5nX3N5bWJvbHMsIHRoZSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3NlcywgdGhlCisrICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGNoYXJfcmFuZ2VzIGFuZCB0aGUgbGVuZ3RoIG9mIGNoYXJzLiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSF8zICgwLCAwLCAwKTsKKysgICAgICAgICAgICBCVUZfUFVTSF8yICgwLCAwKTsKKysKKysgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCisrICAgICAgICAgICAgcDEgPSBwOworKworKyAgICAgICAgICAgIC8qIGNoYXJzZXRfbm90IG1hdGNoZXMgbmV3bGluZSBhY2NvcmRpbmcgdG8gYSBzeW50YXggYml0LiAgKi8KKysgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBiWy02XSA9PSBjaGFyc2V0X25vdAorKyAgICAgICAgICAgICAgICAmJiAoc3ludGF4ICYgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FKSkKKysJICAgICAgeworKwkJQlVGX1BVU0goJ1xuJyk7CisrCQlsYXN0c3RhcnRbNV0rKzsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIFJlYWQgaW4gY2hhcmFjdGVycyBhbmQgcmFuZ2VzLCBzZXR0aW5nIG1hcCBiaXRzLiAgKi8KKysgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgLyogXCBtaWdodCBlc2NhcGUgY2hhcmFjdGVycyBpbnNpZGUgWy4uLl0gYW5kIFteLi4uXS4gICovCisrICAgICAgICAgICAgICAgIGlmICgoc3ludGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykgJiYgYyA9PSAnXFwnKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKwkJICAgIEJVRl9QVVNIKGMxKTsKKysJCSAgICBsYXN0c3RhcnRbNV0rKzsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcnMgICovCisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjMTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogQ291bGQgYmUgdGhlIGVuZCBvZiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgSWYgaXQncworKyAgICAgICAgICAgICAgICAgICBub3QgKGkuZS4sIHdoZW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBgW10nIHNvCisrICAgICAgICAgICAgICAgICAgIGZhciksIHRoZSAnXScgY2hhcmFjdGVyIGJpdCBnZXRzIHNldCB3YXkgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXScgJiYgcCAhPSBwMSArIDEpCisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgIGlmIChoYWRfY2hhcl9jbGFzcyAmJiBjID09ICctJyAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUkFOR0UpOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXI6IGlmIHRoaXMgaXMgYSBoeXBoZW4gbm90IGF0IHRoZQorKyAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiBhIGxpc3QsIHRoZW4gaXQncyB0aGUgcmFuZ2UKKysgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuICAqLworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnLScKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDIgPj0gcGF0dGVybiAmJiBwWy0yXSA9PSAnWycpCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAzID49IHBhdHRlcm4gJiYgcFstM10gPT0gJ1snICYmIHBbLTJdID09ICdeJykKKysgICAgICAgICAgICAgICAgICAgICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldDsKKysJCSAgICAvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHJhbmdlX3N0YXJ0IGFuZCByYW5nZV9lbmQuICAqLworKwkJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDIpOworKwkJICAgIC8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGIgKz0gMjsKKysgICAgICAgICAgICAgICAgICAgIHJldCA9IHdjc19jb21waWxlX3JhbmdlIChyYW5nZV9zdGFydCwgJnAsIHBlbmQsIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCwgYiwgbGFzdHN0YXJ0KTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKyAgICAgICAgICAgICAgICAgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocFswXSA9PSAnLScgJiYgcFsxXSAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeyAvKiBUaGlzIGhhbmRsZXMgcmFuZ2VzIG1hZGUgdXAgb2YgY2hhcmFjdGVycyBvbmx5LiAgKi8KKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKwkJICAgIC8qIE1vdmUgcGFzdCB0aGUgYC0nLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrCQkgICAgLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciByYW5nZV9zdGFydCBhbmQgcmFuZ2VfZW5kLiAgKi8KKysJCSAgICBHRVRfQlVGRkVSX1NQQUNFICgyKTsKKysJCSAgICAvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICBiICs9IDI7CisrICAgICAgICAgICAgICAgICAgICByZXQgPSB3Y3NfY29tcGlsZV9yYW5nZSAoYywgJnAsIHBlbmQsIHRyYW5zbGF0ZSwgc3ludGF4LCBiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0KTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIFNlZSBpZiB3ZSdyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcG9zc2libGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICc6JykKKysgICAgICAgICAgICAgICAgICB7IC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGNoYXIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgYzEgPSAwOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgcGF0dGVybiBpcyBgW1s6Jy4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9PSAnOicgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysJCQlpZiAoYzEgPCBDSEFSX0NMQVNTX01BWF9MRU5HVEgpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIHN0cltjMV0gPSAnXDAnOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgaXNuJ3QgYSB3b3JkIGJyYWNrZXRlZCBieSBgWzonIGFuZCBgOl0nOgorKyAgICAgICAgICAgICAgICAgICAgICAgdW5kbyB0aGUgZW5kaW5nIGNoYXJhY3RlciwgdGhlIGxldHRlcnMsIGFuZCBsZWF2ZQorKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxlYWRpbmcgYDonIGFuZCBgWycgKGJ1dCBzdG9yZSB0aGVtIGFzIGNoYXJhY3RlcikuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJzonICYmICpwID09ICddJykKKysgICAgICAgICAgICAgICAgICAgICAgeworKwkJCXdjdHlwZV90IHd0OworKwkJCXVpbnRwdHJfdCBhbGlnbmVkcDsKKysKKysJCQkvKiBRdWVyeSB0aGUgY2hhcmFjdGVyIGNsYXNzIGFzIHdjdHlwZV90LiAgKi8KKysJCQl3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisrCQkJaWYgKHd0ID09IDApCisrCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCQkvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIGNoYXJhY3RlciBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRShDSEFSX0NMQVNTX1NJWkUpOworKwkJCS8qIFVwZGF0ZSB0aGUgcG9pbnRlciB0byBpbmRpY2F0ZSBlbmQgb2YgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBiICs9IENIQVJfQ0xBU1NfU0laRTsKKysJCQkvKiBNb3ZlIGRhdGEgd2hpY2ggZm9sbG93IGNoYXJhY3RlciBjbGFzc2VzCisrCQkJICAgIG5vdCB0byB2aW9sYXRlIHRoZSBkYXRhLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRfc3BhY2UoQ0hBUl9DTEFTU19TSVpFLAorKwkJCQkgICAgIGxhc3RzdGFydCArIDYgKyBsYXN0c3RhcnRbMV0sCisrCQkJCSAgICAgYiAtIDEpOworKwkJCWFsaWduZWRwID0gKCh1aW50cHRyX3QpKGxhc3RzdGFydCArIDYgKyBsYXN0c3RhcnRbMV0pCisrCQkJCSAgICArIF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpCisrCQkJICAJICAgICYgfih1aW50cHRyX3QpKF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpOworKwkJCS8qIFN0b3JlIHRoZSBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICooKHdjdHlwZV90KilhbGlnbmVkcCkgPSB3dDsKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydFsxXSArPSBDSEFSX0NMQVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoJzonKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnRbNV0gKz0gMjsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCQlyYW5nZV9zdGFydCA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKCpwID09ICc9JworKwkJCQkJCQkgIHx8ICpwID09ICcuJykpCisrCQkgIHsKKysJCSAgICBDSEFSX1Qgc3RyWzEyOF07CS8qIFNob3VsZCBiZSBsYXJnZSBlbm91Z2guICAqLworKwkJICAgIENIQVJfVCBkZWxpbSA9ICpwOyAvKiAnPScgb3IgJy4nICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICB1aW50MzJfdCBucnVsZXMgPQorKwkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmCisrCQkgICAgUEFURkVUQ0ggKGMpOworKwkJICAgIGMxID0gMDsKKysKKysJCSAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWz0nIG9yICdbWy4nLiAgKi8KKysJCSAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkgICAgZm9yICg7OykKKysJCSAgICAgIHsKKysJCQlQQVRGRVRDSCAoYyk7CisrCQkJaWYgKChjID09IGRlbGltICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKwkJCSAgYnJlYWs7CisrCQkJaWYgKGMxIDwgc2l6ZW9mIChzdHIpIC0gMSkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHN0cltjMV0gPSAnXDAnOworKworKwkJICAgIGlmIChjID09IGRlbGltICYmICpwID09ICddJyAmJiBzdHJbMF0gIT0gJ1wwJykKKysJCSAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaSwgb2Zmc2V0OworKwkJCS8qIElmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGRhdGEgd2UgdXNlIHRoZSBkZWZhdWx0CisrCQkJICAgY29sbGF0aW9uIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGlzIGluIGEgY2xhc3MKKysJCQkgICBieSBpdHNlbGYuICBJdCBhbHNvIG1lYW5zIHRoYXQgQVNDSUkgaXMgdGhlCisrCQkJICAgY2hhcmFjdGVyIHNldCBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCBoYXZlIGNoYXJhY3RlcgorKwkJCSAgIHdpdGggbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBtdWx0aWJ5dGUKKysJCQkgICByZXByZXNlbnRhdGlvbi4gICovCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm90IGRlZmluZWQgX0xJQkMsIHdlIHB1c2ggdGhlIG5hbWUgYW5kCisrCQkJICAgYFwwJyBmb3IgdGhlIHNha2Ugb2YgbWF0Y2hpbmcgcGVyZm9ybWFuY2UuICAqLworKwkJCWludCBkYXRhc2l6ZSA9IGMxICsgMTsKKysKKysjIGlmZGVmIF9MSUJDCisrCQkJaW50MzJfdCBpZHggPSAwOworKwkJCWlmIChucnVsZXMgPT0gMCkKKysjIGVuZGlmCisrCQkJICB7CisrCQkJICAgIGlmIChjMSAhPSAxKQorKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKwkJCSAgfQorKyMgaWZkZWYgX0xJQkMKKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKnRhYmxlOworKwkJCSAgICBjb25zdCBpbnQzMl90ICp3ZWlnaHRzOworKwkJCSAgICBjb25zdCBpbnQzMl90ICpleHRyYTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqaW5kaXJlY3Q7CisrCQkJICAgIHdpbnRfdCAqY3A7CisrCisrCQkJICAgIGlmKGRlbGltID09ICc9JykKKysJCQkgICAgICB7CisrCQkJCS8qIFdlIHB1c2ggdGhlIGluZGV4IGZvciBlcXVpdmFsZW5jZSBjbGFzcy4gICovCisrCQkJCWNwID0gKHdpbnRfdCopc3RyOworKworKwkJCQl0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfVEFCTEVXQyk7CisrCQkJCXdlaWdodHMgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1dFSUdIVFdDKTsKKysJCQkJZXh0cmEgPSAoY29uc3Qgd2ludF90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfRVhUUkFXQyk7CisrCQkJCWluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9JTkRJUkVDVFdDKTsKKysKKysJCQkJaWR4ID0gRklORElEWCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAxKTsKKysJCQkJaWYgKGlkeCA9PSAwIHx8IGNwIDwgKHdpbnRfdCopIHN0ciArIGMxKQorKwkJCQkgIC8qIFRoaXMgaXMgbm8gdmFsaWQgY2hhcmFjdGVyLiAgKi8KKysJCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkJc3RyWzBdID0gKHdjaGFyX3QpaWR4OworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZSAvKiBkZWxpbSA9PSAnLicgKi8KKysJCQkgICAgICB7CisrCQkJCS8qIFdlIHB1c2ggY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlCisrCQkJCSAgIGZvciBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysJCQkJaW50MzJfdCB0YWJsZV9zaXplOworKwkJCQljb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOworKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKysJCQkJaW50MzJfdCBpZHg7CisrCQkJCWludDMyX3QgZWxlbTsKKysJCQkJaW50MzJfdCBzZWNvbmQ7CisrCQkJCWludDMyX3QgaGFzaDsKKysJCQkJY2hhciBjaGFyX3N0cltjMV07CisrCisrCQkJCS8qIFdlIGhhdmUgdG8gY29udmVydCB0aGUgbmFtZSB0byBhIHNpbmdsZS1ieXRlCisrCQkJCSAgIHN0cmluZy4gIFRoaXMgaXMgcG9zc2libGUgc2luY2UgdGhlIG5hbWVzCisrCQkJCSAgIGNvbnNpc3Qgb2YgQVNDSUkgY2hhcmFjdGVycyBhbmQgdGhlIGludGVybmFsCisrCQkJCSAgIHJlcHJlc2VudGF0aW9uIGlzIFVDUzQuICAqLworKwkJCQlmb3IgKGkgPSAwOyBpIDwgYzE7ICsraSkKKysJCQkJICBjaGFyX3N0cltpXSA9IHN0cltpXTsKKysKKysJCQkJdGFibGVfc2l6ZSA9CisrCQkJCSAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwKKysJCQkJCQkgICAgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQik7CisrCQkJCXN5bWJfdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQik7CisrCQkJCWV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKwkJCQkvKiBMb2NhdGUgdGhlIGNoYXJhY3RlciBpbiB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrCQkJCWhhc2ggPSBlbGVtX2hhc2ggKGNoYXJfc3RyLCBjMSk7CisrCisrCQkJCWlkeCA9IDA7CisrCQkJCWVsZW0gPSBoYXNoICUgdGFibGVfc2l6ZTsKKysJCQkJc2Vjb25kID0gaGFzaCAlICh0YWJsZV9zaXplIC0gMik7CisrCQkJCXdoaWxlIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIEZpcnN0IGNvbXBhcmUgdGhlIGhhc2hpbmcgdmFsdWUuICAqLworKwkJCQkgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IGhhc2gKKysJCQkJCSYmIGMxID09IGV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXV0KKysJCQkJCSYmIG1lbWNtcCAoY2hhcl9zdHIsCisrCQkJCQkJICAgJmV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXQorKwkJCQkJCQkgKyAxXSwgYzEpID09IDApCisrCQkJCSAgICAgIHsKKysJCQkJCS8qIFllcCwgdGhpcyBpcyB0aGUgZW50cnkuICAqLworKwkJCQkJaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworKwkJCQkJaWR4ICs9IDEgKyBleHRyYVtpZHhdOworKwkJCQkJYnJlYWs7CisrCQkJCSAgICAgIH0KKysKKysJCQkJICAgIC8qIE5leHQgZW50cnkuICAqLworKwkJCQkgICAgZWxlbSArPSBzZWNvbmQ7CisrCQkJCSAgfQorKworKwkJCQlpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBDb21wdXRlIHRoZSBpbmRleCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZQorKwkJCQkgICAgICAgaW4gdGhlIHRhYmxlLiAgKi8KKysJCQkJICAgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKysJCQkJICAgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisrCQkJCSAgICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKysKKysJCQkJICAgIHN0clswXSA9ICh3Y2hhcl90KSBpZHggKyA0OworKwkJCQkgIH0KKysJCQkJZWxzZSBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gMCAmJiBjMSA9PSAxKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEKKysJCQkJICAgICAgIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisrCQkJCSAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJCQkgICAgQlVGX1BVU0goc3RyWzBdKTsKKysJCQkJICAgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkJCSAgICBsYXN0c3RhcnRbNV0rKzsKKysJCQkJICAgIHJhbmdlX3N0YXJ0ID0gc3RyWzBdOworKworKwkJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZQorKwkJCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbC4gICovCisrCQkJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkJCSAgICAvKiBleGl0IGZyb20gdGhlIHN3aXRjaCBibG9jay4gICovCisrCQkJCSAgICBjb250aW51ZTsKKysJCQkJICB9CisrCQkJCWVsc2UKKysJCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysJCQkgICAgICB9CisrCQkJICAgIGRhdGFzaXplID0gMTsKKysJCQkgIH0KKysjIGVuZGlmCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIChvciBjb2xsYXRpbmcgc3ltYm9sKS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKwkJCS8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGVxdWl2YWxlbmNlIGNsYXNzCisrCQkJICAgKG9yIGNvbGxhdGluZyBzeW1ib2wpIChhbmQgJ1wwJyBpZiBuZWVkZWQpLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFKGRhdGFzaXplKTsKKysJCQkvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgYiArPSBkYXRhc2l6ZTsKKysKKysJCQlpZiAoZGVsaW0gPT0gJz0nKQorKwkJCSAgeyAvKiBlcXVpdmFsZW5jZSBjbGFzcyAgKi8KKysJCQkgICAgLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgb2YgY2hhcl9yYW5nZXMsCisrCQkJICAgICAgIHdoaWNoIGlzIG5leHQgdG8gZXF1aXZhbGVuY2VfY2xhc3Nlcy4gICovCisrCQkJICAgIG9mZnNldCA9IGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXQorKwkJCSAgICAgICsgbGFzdHN0YXJ0WzNdICs2OworKwkJCSAgICAvKiBJbnNlcnQgc3BhY2UuICAqLworKwkJCSAgICBpbnNlcnRfc3BhY2UoZGF0YXNpemUsIGxhc3RzdGFydCArIG9mZnNldCwgYiAtIDEpOworKworKwkJCSAgICAvKiBXcml0ZSB0aGUgZXF1aXZhbGVuY2VfY2xhc3MgYW5kIFwwLiAgKi8KKysJCQkgICAgZm9yIChpID0gMCA7IGkgPCBkYXRhc2l6ZSA7IGkrKykKKysJCQkgICAgICBsYXN0c3RhcnRbb2Zmc2V0ICsgaV0gPSBzdHJbaV07CisrCisrCQkJICAgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzZXMuICAqLworKwkJCSAgICBsYXN0c3RhcnRbM10gKz0gZGF0YXNpemU7CisrCQkJICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysJCQkgIH0KKysJCQllbHNlIC8qIGRlbGltID09ICcuJyAqLworKwkJCSAgeyAvKiBjb2xsYXRpbmcgc3ltYm9sICAqLworKwkJCSAgICAvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBvZiB0aGUgZXF1aXZhbGVuY2VfY2xhc3NlcywKKysJCQkgICAgICAgd2hpY2ggaXMgbmV4dCB0byBjb2xsYXRpbmdfc3ltYm9scy4gICovCisrCQkJICAgIG9mZnNldCA9IGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXSArIDY7CisrCQkJICAgIC8qIEluc2VydCBzcGFjZSBhbmQgd3JpdGUgdGhlIGNvbGxhdGlvbmdfc3ltYm9sCisrCQkJICAgICAgIGFuZCBcMC4gICovCisrCQkJICAgIGluc2VydF9zcGFjZShkYXRhc2l6ZSwgbGFzdHN0YXJ0ICsgb2Zmc2V0LCBiLTEpOworKwkJCSAgICBmb3IgKGkgPSAwIDsgaSA8IGRhdGFzaXplIDsgaSsrKQorKwkJCSAgICAgIGxhc3RzdGFydFtvZmZzZXQgKyBpXSA9IHN0cltpXTsKKysKKysJCQkgICAgLyogSW4gcmVfbWF0Y2hfMl9pbnRlcm5hbCBpZiByYW5nZV9zdGFydCA8IC0xLCB3ZQorKwkJCSAgICAgICBhc3N1bWUgLXJhbmdlX3N0YXJ0IGlzIHRoZSBvZmZzZXQgb2YgdGhlCisrCQkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wgd2hpY2ggaXMgc3BlY2lmaWVkIGFzCisrCQkJICAgICAgIHRoZSBjaGFyYWN0ZXIgb2YgdGhlIHJhbmdlIHN0YXJ0LiAgU28gd2UgYXNzaWduCisrCQkJICAgICAgIC0obGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdICsgNikgdG8KKysJCQkgICAgICAgcmFuZ2Vfc3RhcnQuICAqLworKwkJCSAgICByYW5nZV9zdGFydCA9IC0obGFzdHN0YXJ0WzFdICsgbGFzdHN0YXJ0WzJdICsgNik7CisrCQkJICAgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNvbGxhdGluZ19zeW1ib2wuICAqLworKwkJCSAgICBsYXN0c3RhcnRbMl0gKz0gZGF0YXNpemU7CisrCQkJICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrCQkJICB9CisrCQkgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAoZGVsaW0pOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydFs1XSArPSAyOyAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJCXJhbmdlX3N0YXJ0ID0gZGVsaW07CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJICAgIEJVRl9QVVNIKGMpOworKwkJICAgIGxhc3RzdGFydFs1XSsrOyAgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCSAgICByYW5nZV9zdGFydCA9IGM7CisrICAgICAgICAgICAgICAgICAgfQorKwkgICAgICB9CisrCisrI2Vsc2UgLyogQllURSAqLworKyAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIHNwYWNlIHRvIHB1c2ggYSBjaGFyc2V0OiB0aGUKKysgICAgICAgICAgICAgICBvcGNvZGUsIHRoZSBsZW5ndGggY291bnQsIGFuZCB0aGUgYml0c2V0OyAzNCBieXRlcyBpbiBhbGwuICAqLworKwkgICAgR0VUX0JVRkZFUl9TUEFDRSAoMzQpOworKworKyAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrCisrICAgICAgICAgICAgLyogV2UgdGVzdCBgKnAgPT0gJ14nIHR3aWNlLCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGlmCisrICAgICAgICAgICAgICAgc3RhdGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgb25lIEJVRl9QVVNILiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSCAoKnAgPT0gJ14nID8gY2hhcnNldF9ub3QgOiBjaGFyc2V0KTsKKysgICAgICAgICAgICBpZiAoKnAgPT0gJ14nKQorKyAgICAgICAgICAgICAgcCsrOworKworKyAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgYnJhY2tldCBleHByZXNzaW9uLiAgKi8KKysgICAgICAgICAgICBwMSA9IHA7CisrCisrICAgICAgICAgICAgLyogUHVzaCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBiaXRtYXAuICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIICgoMSA8PCBCWVRFV0lEVEgpIC8gQllURVdJRFRIKTsKKysKKysgICAgICAgICAgICAvKiBDbGVhciB0aGUgd2hvbGUgbWFwLiAgKi8KKysgICAgICAgICAgICBiemVybyAoYiwgKDEgPDwgQllURVdJRFRIKSAvIEJZVEVXSURUSCk7CisrCisrICAgICAgICAgICAgLyogY2hhcnNldF9ub3QgbWF0Y2hlcyBuZXdsaW5lIGFjY29yZGluZyB0byBhIHN5bnRheCBiaXQuICAqLworKyAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIGJbLTJdID09IGNoYXJzZXRfbm90CisrICAgICAgICAgICAgICAgICYmIChzeW50YXggJiBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUpKQorKyAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnXG4nKTsKKysKKysgICAgICAgICAgICAvKiBSZWFkIGluIGNoYXJhY3RlcnMgYW5kIHJhbmdlcywgc2V0dGluZyBtYXAgYml0cy4gICovCisrICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgIC8qIFwgbWlnaHQgZXNjYXBlIGNoYXJhY3RlcnMgaW5zaWRlIFsuLi5dIGFuZCBbXi4uLl0uICAqLworKyAgICAgICAgICAgICAgICBpZiAoKHN5bnRheCAmIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpICYmIGMgPT0gJ1xcJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoYzEpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzE7CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIENvdWxkIGJlIHRoZSBlbmQgb2YgdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIElmIGl0J3MKKysgICAgICAgICAgICAgICAgICAgbm90IChpLmUuLCB3aGVuIHRoZSBicmFja2V0IGV4cHJlc3Npb24gaXMgYFtdJyBzbworKyAgICAgICAgICAgICAgICAgICBmYXIpLCB0aGUgJ10nIGNoYXJhY3RlciBiaXQgZ2V0cyBzZXQgd2F5IGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ10nICYmIHAgIT0gcDEgKyAxKQorKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICBpZiAoaGFkX2NoYXJfY2xhc3MgJiYgYyA9PSAnLScgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJBTkdFKTsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyOiBpZiB0aGlzIGlzIGEgaHlwaGVuIG5vdCBhdCB0aGUKKysgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYSBsaXN0LCB0aGVuIGl0J3MgdGhlIHJhbmdlCisrICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy0nCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAyID49IHBhdHRlcm4gJiYgcFstMl0gPT0gJ1snKQorKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMyA+PSBwYXR0ZXJuICYmIHBbLTNdID09ICdbJyAmJiBwWy0yXSA9PSAnXicpCisrICAgICAgICAgICAgICAgICAgICAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQKKysgICAgICAgICAgICAgICAgICAgICAgPSBieXRlX2NvbXBpbGVfcmFuZ2UgKHJhbmdlX3N0YXJ0LCAmcCwgcGVuZCwgdHJhbnNsYXRlLAorKwkJCQkJICAgIHN5bnRheCwgYik7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysJCSAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwWzBdID09ICctJyAmJiBwWzFdICE9ICddJykKKysgICAgICAgICAgICAgICAgICB7IC8qIFRoaXMgaGFuZGxlcyByYW5nZXMgbWFkZSB1cCBvZiBjaGFyYWN0ZXJzIG9ubHkuICAqLworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisrCisrCQkgICAgLyogTW92ZSBwYXN0IHRoZSBgLScuICAqLworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysKKysgICAgICAgICAgICAgICAgICAgIHJldCA9IGJ5dGVfY29tcGlsZV9yYW5nZSAoYywgJnAsIHBlbmQsIHRyYW5zbGF0ZSwgc3ludGF4LCBiKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gUkVHX05PRVJST1IpIEZSRUVfU1RBQ0tfUkVUVVJOIChyZXQpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIFNlZSBpZiB3ZSdyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcG9zc2libGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICc6JykKKysgICAgICAgICAgICAgICAgICB7IC8qIExlYXZlIHJvb20gZm9yIHRoZSBudWxsLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGNoYXIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgYzEgPSAwOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgcGF0dGVybiBpcyBgW1s6Jy4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9PSAnOicgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysJCQlpZiAoKChpbnQpIGMxKSA8IENIQVJfQ0xBU1NfTUFYX0xFTkdUSCkKKysJCQkgIHN0cltjMSsrXSA9IGM7CisrCQkJZWxzZQorKwkJCSAgLyogVGhpcyBpcyBpbiBhbnkgY2FzZSBhbiBpbnZhbGlkIGNsYXNzIG5hbWUuICAqLworKwkJCSAgc3RyWzBdID0gJ1wwJzsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBJZiBpc24ndCBhIHdvcmQgYnJhY2tldGVkIGJ5IGBbOicgYW5kIGA6XSc6CisrICAgICAgICAgICAgICAgICAgICAgICB1bmRvIHRoZSBlbmRpbmcgY2hhcmFjdGVyLCB0aGUgbGV0dGVycywgYW5kIGxlYXZlCisrICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGVhZGluZyBgOicgYW5kIGBbJyAoYnV0IHNldCBiaXRzIGZvciB0aGVtKS4gICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnOicgJiYgKnAgPT0gJ10nKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrIyBpZiBXSURFX0NIQVJfU1VQUE9SVAorKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfbG93ZXIgPSBTVFJFUSAoc3RyLCAibG93ZXIiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3VwcGVyID0gU1RSRVEgKHN0ciwgInVwcGVyIik7CisrCQkJd2N0eXBlX3Qgd3Q7CisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoOworKworKwkJCXd0ID0gSVNfQ0hBUl9DTEFTUyAoc3RyKTsKKysJCQlpZiAod3QgPT0gMCkKKysJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNUWVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IDEgPDwgQllURVdJRFRIOyArK2NoKQorKwkJCSAgeworKyMgIGlmZGVmIF9MSUJDCisrCQkJICAgIGlmIChfX2lzd2N0eXBlIChfX2J0b3djIChjaCksIHd0KSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysjICBlbHNlCisrCQkJICAgIGlmIChpc3djdHlwZSAoYnRvd2MgKGNoKSwgd3QpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKyMgIGVuZGlmCisrCisrCQkJICAgIGlmICh0cmFuc2xhdGUgJiYgKGlzX3VwcGVyIHx8IGlzX2xvd2VyKQorKwkJCQkmJiAoSVNVUFBFUiAoY2gpIHx8IElTTE9XRVIgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICB9CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSB0cnVlOworKyMgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaDsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2FsbnVtID0gU1RSRVEgKHN0ciwgImFsbnVtIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19hbHBoYSA9IFNUUkVRIChzdHIsICJhbHBoYSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYmxhbmsgPSBTVFJFUSAoc3RyLCAiYmxhbmsiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2NudHJsID0gU1RSRVEgKHN0ciwgImNudHJsIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19kaWdpdCA9IFNUUkVRIChzdHIsICJkaWdpdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfZ3JhcGggPSBTVFJFUSAoc3RyLCAiZ3JhcGgiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2xvd2VyID0gU1RSRVEgKHN0ciwgImxvd2VyIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19wcmludCA9IFNUUkVRIChzdHIsICJwcmludCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfcHVuY3QgPSBTVFJFUSAoc3RyLCAicHVuY3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3NwYWNlID0gU1RSRVEgKHN0ciwgInNwYWNlIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc191cHBlciA9IFNUUkVRIChzdHIsICJ1cHBlciIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfeGRpZ2l0ID0gU1RSRVEgKHN0ciwgInhkaWdpdCIpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSVNfQ0hBUl9DTEFTUyAoc3RyKSkKKysJCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNUWVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IDEgPDwgQllURVdJRFRIOyBjaCsrKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworKwkJCSAgICAvKiBUaGlzIHdhcyBzcGxpdCBpbnRvIDMgaWYncyB0bworKwkJCSAgICAgICBhdm9pZCBhbiBhcmJpdHJhcnkgbGltaXQgaW4gc29tZSBjb21waWxlci4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggICAoaXNfYWxudW0gICYmIElTQUxOVU0gKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19hbHBoYSAgJiYgSVNBTFBIQSAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2JsYW5rICAmJiBJU0JMQU5LIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfY250cmwgICYmIElTQ05UUkwgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICAgIGlmICggICAoaXNfZGlnaXQgICYmIElTRElHSVQgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19ncmFwaCAgJiYgSVNHUkFQSCAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2xvd2VyICAmJiBJU0xPV0VSIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfcHJpbnQgICYmIElTUFJJTlQgKGNoKSkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrCQkJICAgIGlmICggICAoaXNfcHVuY3QgICYmIElTUFVOQ1QgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19zcGFjZSAgJiYgSVNTUEFDRSAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3VwcGVyICAmJiBJU1VQUEVSIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfeGRpZ2l0ICYmIElTWERJR0lUIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgICBpZiAoICAgdHJhbnNsYXRlICYmIChpc191cHBlciB8fCBpc19sb3dlcikKKysJCQkJJiYgKElTVVBQRVIgKGNoKSB8fCBJU0xPV0VSIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysjIGVuZGlmCS8qIGxpYmMgfHwgd2N0eXBlLmggKi8KKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJzonKTsKKysJCQlyYW5nZV9zdGFydCA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJz0nKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgY2hhciBzdHJbTUJfTEVOX01BWCArIDFdOworKyMgaWZkZWYgX0xJQkMKKysJCSAgICB1aW50MzJfdCBucnVsZXMgPQorKwkJICAgICAgX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjIGVuZGlmCisrCisrCQkgICAgUEFURkVUQ0ggKGMpOworKwkJICAgIGMxID0gMDsKKysKKysJCSAgICAvKiBJZiBwYXR0ZXJuIGlzIGBbWz0nLiAgKi8KKysJCSAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkgICAgZm9yICg7OykKKysJCSAgICAgIHsKKysJCQlQQVRGRVRDSCAoYyk7CisrCQkJaWYgKChjID09ICc9JyAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysJCQkgIGJyZWFrOworKwkJCWlmIChjMSA8IE1CX0xFTl9NQVgpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysJCSAgICBpZiAoYyA9PSAnPScgJiYgKnAgPT0gJ10nICYmIHN0clswXSAhPSAnXDAnKQorKwkJICAgICAgeworKwkJCS8qIElmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGRhdGEgd2UgdXNlIHRoZSBkZWZhdWx0CisrCQkJICAgY29sbGF0aW9uIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGlzIGluIGEgY2xhc3MKKysJCQkgICBieSBpdHNlbGYuICBJdCBhbHNvIG1lYW5zIHRoYXQgQVNDSUkgaXMgdGhlCisrCQkJICAgY2hhcmFjdGVyIHNldCBhbmQgdGhlcmVmb3JlIHdlIGNhbm5vdCBoYXZlIGNoYXJhY3RlcgorKwkJCSAgIHdpdGggbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBtdWx0aWJ5dGUKKysJCQkgICByZXByZXNlbnRhdGlvbi4gICovCisrIyBpZmRlZiBfTElCQworKwkJCWlmIChucnVsZXMgPT0gMCkKKysjIGVuZGlmCisrCQkJICB7CisrCQkJICAgIGlmIChjMSAhPSAxKQorKwkJCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUNPTExBVEUpOworKworKwkJCSAgICAvKiBUaHJvdyBhd2F5IHRoZSBdIGF0IHRoZSBlbmQgb2YgdGhlIGVxdWl2YWxlbmNlCisrCQkJICAgICAgIGNsYXNzLiAgKi8KKysJCQkgICAgUEFURkVUQ0ggKGMpOworKworKwkJCSAgICAvKiBTZXQgdGhlIGJpdCBmb3IgdGhlIGNoYXJhY3Rlci4gICovCisrCQkJICAgIFNFVF9MSVNUX0JJVCAoc3RyWzBdKTsKKysJCQkgIH0KKysjIGlmZGVmIF9MSUJDCisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBUcnkgdG8gbWF0Y2ggdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYHN0cicgYWdhaW5zdAorKwkJCSAgICAgICB0aG9zZSBrbm93biB0byB0aGUgY29sbGF0ZSBpbXBsZW1lbnRhdGlvbi4KKysJCQkgICAgICAgRmlyc3QgZmluZCBvdXQgd2hldGhlciB0aGUgYnl0ZXMgaW4gYHN0cicgYXJlCisrCQkJICAgICAgIGFjdHVhbGx5IGZyb20gZXhhY3RseSBvbmUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgY29uc3QgaW50MzJfdCAqdGFibGU7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHM7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworKwkJCSAgICBjb25zdCBpbnQzMl90ICppbmRpcmVjdDsKKysJCQkgICAgaW50MzJfdCBpZHg7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gc3RyOworKwkJCSAgICBpbnQgY2g7CisrCisrCQkJICAgIHRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisrCQkJICAgIHdlaWdodHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisrCQkJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisrCQkJICAgIGluZGlyZWN0ID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisrCQkJICAgIGlkeCA9IEZJTkRJRFggKHRhYmxlLCBpbmRpcmVjdCwgZXh0cmEsICZjcCwgMSk7CisrCQkJICAgIGlmIChpZHggPT0gMCB8fCBjcCA8IHN0ciArIGMxKQorKwkJCSAgICAgIC8qIFRoaXMgaXMgbm8gdmFsaWQgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogTm93IHdlIGhhdmUgdG8gZ28gdGhyb3VnaHQgdGhlIHdob2xlIHRhYmxlCisrCQkJICAgICAgIGFuZCBmaW5kIGFsbCBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgdGhlIHNhbWUKKysJCQkgICAgICAgZmlyc3QgbGV2ZWwgd2VpZ2h0LgorKworKwkJCSAgICAgICBYWFggTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QuCisrCQkJICAgICAgIHdlIHdvdWxkIGhhdmUgdG8gbWF0Y2ggbXVsdGlieXRlIHNlcXVlbmNlcworKwkJCSAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudAorKwkJCSAgICAgICBpbXBsZW1lbnRhdGlvbi4gICovCisrCQkJICAgIGZvciAoY2ggPSAxOyBjaCA8IDI1NjsgKytjaCkKKysJCQkgICAgICAvKiBYWFggVGhpcyB0ZXN0IHdvdWxkIGhhdmUgdG8gYmUgY2hhbmdlZCBpZiB3ZQorKwkJCQkgd291bGQgYWxsb3cgbWF0Y2hpbmcgbXVsdGlieXRlIHNlcXVlbmNlcy4gICovCisrCQkJICAgICAgaWYgKHRhYmxlW2NoXSA+IDApCisrCQkJCXsKKysJCQkJICBpbnQzMl90IGlkeDIgPSB0YWJsZVtjaF07CisrCQkJCSAgc2l6ZV90IGxlbiA9IHdlaWdodHNbaWR4Ml07CisrCisrCQkJCSAgLyogVGVzdCB3aGV0aGVyIHRoZSBsZW5naHRzIG1hdGNoLiAgKi8KKysJCQkJICBpZiAod2VpZ2h0c1tpZHhdID09IGxlbikKKysJCQkJICAgIHsKKysJCQkJICAgICAgLyogVGhleSBkby4gIE5ldyBjb21wYXJlIHRoZSBieXRlcyBvZgorKwkJCQkJIHRoZSB3ZWlnaHQuICAqLworKwkJCQkgICAgICBzaXplX3QgY250ID0gMDsKKysKKysJCQkJICAgICAgd2hpbGUgKGNudCA8IGxlbgorKwkJCQkJICAgICAmJiAod2VpZ2h0c1tpZHggKyAxICsgY250XQorKwkJCQkJCSA9PSB3ZWlnaHRzW2lkeDIgKyAxICsgY250XSkpCisrCQkJCQkrK2NudDsKKysKKysJCQkJICAgICAgaWYgKGNudCA9PSBsZW4pCisrCQkJCQkvKiBUaGV5IG1hdGNoLiAgTWFyayB0aGUgY2hhcmFjdGVyIGFzCisrCQkJCQkgICBhY2NlcHRhYmxlLiAgKi8KKysJCQkJCVNFVF9MSVNUX0JJVCAoY2gpOworKwkJCQkgICAgfQorKwkJCQl9CisrCQkJICB9CisrIyBlbmRpZgorKwkJCWhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysJCSAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCc9Jyk7CisrCQkJcmFuZ2Vfc3RhcnQgPSAnPSc7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnLicpCisrCQkgIHsKKysJCSAgICB1bnNpZ25lZCBjaGFyIHN0clsxMjhdOwkvKiBTaG91bGQgYmUgbGFyZ2UgZW5vdWdoLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgdWludDMyX3QgbnJ1bGVzID0KKysJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZgorKworKwkJICAgIFBBVEZFVENIIChjKTsKKysJCSAgICBjMSA9IDA7CisrCisrCQkgICAgLyogSWYgcGF0dGVybiBpcyBgW1suJy4gICovCisrCQkgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJICAgIGZvciAoOzspCisrCQkgICAgICB7CisrCQkJUEFURkVUQ0ggKGMpOworKwkJCWlmICgoYyA9PSAnLicgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrCQkJICBicmVhazsKKysJCQlpZiAoYzEgPCBzaXplb2YgKHN0cikpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysJCSAgICBpZiAoYyA9PSAnLicgJiYgKnAgPT0gJ10nICYmIHN0clswXSAhPSAnXDAnKQorKwkJICAgICAgeworKwkJCS8qIElmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGRhdGEgd2UgdXNlIHRoZSBkZWZhdWx0CisrCQkJICAgY29sbGF0aW9uIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGlzIHRoZSBuYW1lCisrCQkJICAgZm9yIGl0cyBvd24gY2xhc3Mgd2hpY2ggY29udGFpbnMgb25seSB0aGUgb25lCisrCQkJICAgY2hhcmFjdGVyLiAgSXQgYWxzbyBtZWFucyB0aGF0IEFTQ0lJIGlzIHRoZQorKwkJCSAgIGNoYXJhY3RlciBzZXQgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIKKysJCQkgICB3aXRoIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgbXVsdGlieXRlCisrCQkJICAgcmVwcmVzZW50YXRpb24uICAqLworKyMgaWZkZWYgX0xJQkMKKysJCQlpZiAobnJ1bGVzID09IDApCisrIyBlbmRpZgorKwkJCSAgeworKwkJCSAgICBpZiAoYzEgIT0gMSkKKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogU2V0IHRoZSBiaXQgZm9yIHRoZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBTRVRfTElTVF9CSVQgKHN0clswXSk7CisrCQkJICAgIHJhbmdlX3N0YXJ0ID0gKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cilbMF07CisrCQkJICB9CisrIyBpZmRlZiBfTElCQworKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgLyogVHJ5IHRvIG1hdGNoIHRoZSBieXRlIHNlcXVlbmNlIGluIGBzdHInIGFnYWluc3QKKysJCQkgICAgICAgdGhvc2Uga25vd24gdG8gdGhlIGNvbGxhdGUgaW1wbGVtZW50YXRpb24uCisrCQkJICAgICAgIEZpcnN0IGZpbmQgb3V0IHdoZXRoZXIgdGhlIGJ5dGVzIGluIGBzdHInIGFyZQorKwkJCSAgICAgICBhY3R1YWxseSBmcm9tIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4gICovCisrCQkJICAgIGludDMyX3QgdGFibGVfc2l6ZTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqc3ltYl90YWJsZTsKKysJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisrCQkJICAgIGludDMyX3QgaWR4OworKwkJCSAgICBpbnQzMl90IGVsZW07CisrCQkJICAgIGludDMyX3Qgc2Vjb25kOworKwkJCSAgICBpbnQzMl90IGhhc2g7CisrCisrCQkJICAgIHRhYmxlX3NpemUgPQorKwkJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsCisrCQkJCQkJX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQik7CisrCQkJICAgIHN5bWJfdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKysJCQkgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorKwkJCSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysJCQkgICAgLyogTG9jYXRlIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGhhc2hpbmcgdGFibGUuICAqLworKwkJCSAgICBoYXNoID0gZWxlbV9oYXNoICgoY29uc3QgY2hhciAqKSBzdHIsIGMxKTsKKysKKysJCQkgICAgaWR4ID0gMDsKKysJCQkgICAgZWxlbSA9IGhhc2ggJSB0YWJsZV9zaXplOworKwkJCSAgICBzZWNvbmQgPSBoYXNoICUgKHRhYmxlX3NpemUgLSAyKTsKKysJCQkgICAgd2hpbGUgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisrCQkJICAgICAgeworKwkJCQkvKiBGaXJzdCBjb21wYXJlIHRoZSBoYXNoaW5nIHZhbHVlLiAgKi8KKysJCQkJaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IGhhc2gKKysJCQkJICAgICYmIGMxID09IGV4dHJhW3N5bWJfdGFibGVbMiAqIGVsZW0gKyAxXV0KKysJCQkJICAgICYmIG1lbWNtcCAoc3RyLAorKwkJCQkJICAgICAgICZleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV0KKysJCQkJCQkgICAgICsgMV0sCisrCQkJCQkgICAgICAgYzEpID09IDApCisrCQkJCSAgeworKwkJCQkgICAgLyogWWVwLCB0aGlzIGlzIHRoZSBlbnRyeS4gICovCisrCQkJCSAgICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisrCQkJCSAgICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisrCQkJCSAgICBicmVhazsKKysJCQkJICB9CisrCisrCQkJCS8qIE5leHQgZW50cnkuICAqLworKwkJCQllbGVtICs9IHNlY29uZDsKKysJCQkgICAgICB9CisrCisrCQkJICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSAwKQorKwkJCSAgICAgIC8qIFRoaXMgaXMgbm8gdmFsaWQgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogTm93IGFkZCB0aGUgbXVsdGlieXRlIGNoYXJhY3RlcihzKSB3ZSBmb3VuZAorKwkJCSAgICAgICB0byB0aGUgYWNjZXB0IGxpc3QuCisrCisrCQkJICAgICAgIFhYWCBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZW50aXJlbHkgY29ycmVjdC4KKysJCQkgICAgICAgd2Ugd291bGQgaGF2ZSB0byBtYXRjaCBtdWx0aWJ5dGUgc2VxdWVuY2VzCisrCQkJICAgICAgIGJ1dCB0aGlzIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50CisrCQkJICAgICAgIGltcGxlbWVudGF0aW9uLiAgQWxzbywgd2UgaGF2ZSB0byBtYXRjaAorKwkJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9scywgd2hpY2ggZXhwYW5kIHRvIG1vcmUgdGhhbgorKwkJCSAgICAgICBvbmUgZmlsZSwgYXMgYSB3aG9sZSBhbmQgbm90IGFsbG93IHRoZQorKwkJCSAgICAgICBpbmRpdmlkdWFsIGJ5dGVzLiAgKi8KKysJCQkgICAgYzEgPSBleHRyYVtpZHgrK107CisrCQkJICAgIGlmIChjMSA9PSAxKQorKwkJCSAgICAgIHJhbmdlX3N0YXJ0ID0gZXh0cmFbaWR4XTsKKysJCQkgICAgd2hpbGUgKGMxLS0gPiAwKQorKwkJCSAgICAgIHsKKysJCQkJU0VUX0xJU1RfQklUIChleHRyYVtpZHhdKTsKKysJCQkJKytpZHg7CisrCQkJICAgICAgfQorKwkJCSAgfQorKyMgZW5kaWYKKysJCQloYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnWycpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJy4nKTsKKysJCQlyYW5nZV9zdGFydCA9ICcuJzsKKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKGMpOworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogRGlzY2FyZCBhbnkgKG5vbiltYXRjaGluZyBsaXN0IGJ5dGVzIHRoYXQgYXJlIGFsbCAwIGF0IHRoZQorKyAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgbWFwLiAgRGVjcmVhc2UgdGhlIG1hcC1sZW5ndGggYnl0ZSB0b28uICAqLworKyAgICAgICAgICAgIHdoaWxlICgoaW50KSBiWy0xXSA+IDAgJiYgYltiWy0xXSAtIDFdID09IDApCisrICAgICAgICAgICAgICBiWy0xXS0tOworKyAgICAgICAgICAgIGIgKz0gYlstMV07CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCWNhc2UgJygnOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX29wZW47CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAnKSc6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfY2xvc2U7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAnXG4nOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTkVXTElORV9BTFQpCisrICAgICAgICAgICAgZ290byBoYW5kbGVfYWx0OworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysJY2FzZSAnfCc6CisrICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19WQkFSKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2FsdDsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICd7JzoKKysgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9JTlRFUlZBTFMgJiYgc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKQorKyAgICAgICAgICAgICBnb3RvIGhhbmRsZV9pbnRlcnZhbDsKKysgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJ1xcJzoKKysgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgLyogRG8gbm90IHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBcLCBzbyB0aGF0IHdlIGNhbgorKyAgICAgICAgICAgICBkaXN0aW5ndWlzaCwgZS5nLiwgXEIgZnJvbSBcYiwgZXZlbiBpZiB3ZSBub3JtYWxseSB3b3VsZAorKyAgICAgICAgICAgICB0cmFuc2xhdGUsIGUuZy4sIEIgdG8gYi4gICovCisrICAgICAgICAgIFBBVEZFVENIX1JBVyAoYyk7CisrCisrICAgICAgICAgIHN3aXRjaCAoYykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSAnKCc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgaGFuZGxlX29wZW46CisrICAgICAgICAgICAgICBidWZwLT5yZV9uc3ViKys7CisrICAgICAgICAgICAgICByZWdudW0rKzsKKysKKysgICAgICAgICAgICAgIGlmIChDT01QSUxFX1NUQUNLX0ZVTEwpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBSRVRBTExPQyAoY29tcGlsZV9zdGFjay5zdGFjaywgY29tcGlsZV9zdGFjay5zaXplIDw8IDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2tfZWx0X3QpOworKyAgICAgICAgICAgICAgICAgIGlmIChjb21waWxlX3N0YWNrLnN0YWNrID09IE5VTEwpIHJldHVybiBSRUdfRVNQQUNFOworKworKyAgICAgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2suc2l6ZSA8PD0gMTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdG8gcmVzdG9yZSB3aGVuIHdlIGhpdCBlbmQgb2YgdGhpcworKyAgICAgICAgICAgICAgICAgZ3JvdXAuICBUaGV5IGFyZSBhbGwgcmVsYXRpdmUgb2Zmc2V0cywgc28gdGhhdCBpZiB0aGUKKysgICAgICAgICAgICAgICAgIHdob2xlIHBhdHRlcm4gbW92ZXMgYmVjYXVzZSBvZiByZWFsbG9jLCB0aGV5IHdpbGwgc3RpbGwKKysgICAgICAgICAgICAgICAgIGJlIHZhbGlkLiAgKi8KKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmJlZ2FsdF9vZmZzZXQgPSBiZWdhbHQgLSBDT01QSUxFRF9CVUZGRVJfVkFSOworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AuZml4dXBfYWx0X2p1bXAKKysgICAgICAgICAgICAgICAgPSBmaXh1cF9hbHRfanVtcCA/IGZpeHVwX2FsdF9qdW1wIC0gQ09NUElMRURfQlVGRkVSX1ZBUiArIDEgOiAwOworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AubGFzdHN0YXJ0X29mZnNldCA9IGIgLSBDT01QSUxFRF9CVUZGRVJfVkFSOworKyAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AucmVnbnVtID0gcmVnbnVtOworKworKyAgICAgICAgICAgICAgLyogV2Ugd2lsbCBldmVudHVhbGx5IHJlcGxhY2UgdGhlIDAgd2l0aCB0aGUgbnVtYmVyIG9mCisrICAgICAgICAgICAgICAgICBncm91cHMgaW5uZXIgdG8gdGhpcyBvbmUuICBCdXQgZG8gbm90IHB1c2ggYQorKyAgICAgICAgICAgICAgICAgc3RhcnRfbWVtb3J5IGZvciBncm91cHMgYmV5b25kIHRoZSBsYXN0IG9uZSB3ZSBjYW4KKysgICAgICAgICAgICAgICAgIHJlcHJlc2VudCBpbiB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrICAgICAgICAgICAgICBpZiAocmVnbnVtIDw9IE1BWF9SRUdOVU0pCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5pbm5lcl9ncm91cF9vZmZzZXQgPSBiCisrCQkgICAgLSBDT01QSUxFRF9CVUZGRVJfVkFSICsgMjsKKysgICAgICAgICAgICAgICAgICBCVUZfUFVTSF8zIChzdGFydF9tZW1vcnksIHJlZ251bSwgMCk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2suYXZhaWwrKzsKKysKKysgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wID0gMDsKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IDA7CisrICAgICAgICAgICAgICBiZWdhbHQgPSBiOworKwkgICAgICAvKiBJZiB3ZSd2ZSByZWFjaGVkIE1BWF9SRUdOVU0gZ3JvdXBzLCB0aGVuIHRoaXMgb3BlbgorKwkJIHdvbid0IGFjdHVhbGx5IGdlbmVyYXRlIGFueSBjb2RlLCBzbyB3ZSdsbCBoYXZlIHRvCisrCQkgY2xlYXIgcGVuZGluZ19leGFjdCBleHBsaWNpdGx5LiAgKi8KKysJICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICcpJzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysKKysgICAgICAgICAgICAgIGlmIChDT01QSUxFX1NUQUNLX0VNUFRZKQorKwkJeworKwkJICBpZiAoc3ludGF4ICYgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKysJCSAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCQkgIGVsc2UKKysJCSAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSUEFSRU4pOworKwkJfQorKworKyAgICAgICAgICAgIGhhbmRsZV9jbG9zZToKKysgICAgICAgICAgICAgIGlmIChmaXh1cF9hbHRfanVtcCkKKysgICAgICAgICAgICAgICAgeyAvKiBQdXNoIGEgZHVtbXkgZmFpbHVyZSBwb2ludCBhdCB0aGUgZW5kIG9mIHRoZQorKyAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlIGZvciBhIHBvc3NpYmxlIGZ1dHVyZQorKyAgICAgICAgICAgICAgICAgICAgIGBwb3BfZmFpbHVyZV9qdW1wJyB0byBwb3AuICBTZWUgY29tbWVudHMgYXQKKysgICAgICAgICAgICAgICAgICAgICBgcHVzaF9kdW1teV9mYWlsdXJlJyBpbiBgcmVfbWF0Y2hfMicuICAqLworKyAgICAgICAgICAgICAgICAgIEJVRl9QVVNIIChwdXNoX2R1bW15X2ZhaWx1cmUpOworKworKyAgICAgICAgICAgICAgICAgIC8qIFdlIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhpcyBqdW1wIHdoZW4gd2UgYXNzaWduZWQKKysgICAgICAgICAgICAgICAgICAgICB0byBgZml4dXBfYWx0X2p1bXAnLCBpbiB0aGUgYGhhbmRsZV9hbHQnIGNhc2UgYmVsb3cuICAqLworKyAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKGp1bXBfcGFzdF9hbHQsIGZpeHVwX2FsdF9qdW1wLCBiIC0gMSk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIFNlZSBzaW1pbGFyIGNvZGUgZm9yIGJhY2tzbGFzaGVkIGxlZnQgcGFyZW4gYWJvdmUuICAqLworKyAgICAgICAgICAgICAgaWYgKENPTVBJTEVfU1RBQ0tfRU1QVFkpCisrCQl7CisrCQkgIGlmIChzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorKwkJICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCQkgIGVsc2UKKysJCSAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSUEFSRU4pOworKwkJfQorKworKyAgICAgICAgICAgICAgLyogU2luY2Ugd2UganVzdCBjaGVja2VkIGZvciBhbiBlbXB0eSBzdGFjayBhYm92ZSwgdGhpcworKyAgICAgICAgICAgICAgICAgYGBjYW4ndCBoYXBwZW4nJy4gICovCisrICAgICAgICAgICAgICBhc3NlcnQgKGNvbXBpbGVfc3RhY2suYXZhaWwgIT0gMCk7CisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGp1c3Qgd2FudCB0byByZXN0b3JlIGludG8gYHJlZ251bScsIGJlY2F1c2UKKysgICAgICAgICAgICAgICAgICAgbGF0ZXIgZ3JvdXBzIHNob3VsZCBjb250aW51ZSB0byBiZSBudW1iZXJlZCBoaWdoZXIsCisrICAgICAgICAgICAgICAgICAgIGFzIGluIGAoYWIpYyhkZSknIC0tIHRoZSBzZWNvbmQgZ3JvdXAgaXMgIzIuICAqLworKyAgICAgICAgICAgICAgICByZWdudW1fdCB0aGlzX2dyb3VwX3JlZ251bTsKKysKKysgICAgICAgICAgICAgICAgY29tcGlsZV9zdGFjay5hdmFpbC0tOworKyAgICAgICAgICAgICAgICBiZWdhbHQgPSBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AuYmVnYWx0X29mZnNldDsKKysgICAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAKKysgICAgICAgICAgICAgICAgICA9IENPTVBJTEVfU1RBQ0tfVE9QLmZpeHVwX2FsdF9qdW1wCisrICAgICAgICAgICAgICAgICAgICA/IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5maXh1cF9hbHRfanVtcCAtIDEKKysgICAgICAgICAgICAgICAgICAgIDogMDsKKysgICAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmxhc3RzdGFydF9vZmZzZXQ7CisrICAgICAgICAgICAgICAgIHRoaXNfZ3JvdXBfcmVnbnVtID0gQ09NUElMRV9TVEFDS19UT1AucmVnbnVtOworKwkJLyogSWYgd2UndmUgcmVhY2hlZCBNQVhfUkVHTlVNIGdyb3VwcywgdGhlbiB0aGlzIG9wZW4KKysJCSAgIHdvbid0IGFjdHVhbGx5IGdlbmVyYXRlIGFueSBjb2RlLCBzbyB3ZSdsbCBoYXZlIHRvCisrCQkgICBjbGVhciBwZW5kaW5nX2V4YWN0IGV4cGxpY2l0bHkuICAqLworKwkJcGVuZGluZ19leGFjdCA9IDA7CisrCisrICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGdyb3VwLCBzbyBub3cgd2Uga25vdyBob3cgbWFueQorKyAgICAgICAgICAgICAgICAgICBncm91cHMgd2VyZSBpbnNpZGUgdGhpcyBvbmUuICAqLworKyAgICAgICAgICAgICAgICBpZiAodGhpc19ncm91cF9yZWdudW0gPD0gTUFYX1JFR05VTSkKKysgICAgICAgICAgICAgICAgICB7CisrCQkgICAgVUNIQVJfVCAqaW5uZXJfZ3JvdXBfbG9jCisrICAgICAgICAgICAgICAgICAgICAgID0gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmlubmVyX2dyb3VwX29mZnNldDsKKysKKysgICAgICAgICAgICAgICAgICAgICppbm5lcl9ncm91cF9sb2MgPSByZWdudW0gLSB0aGlzX2dyb3VwX3JlZ251bTsKKysgICAgICAgICAgICAgICAgICAgIEJVRl9QVVNIXzMgKHN0b3BfbWVtb3J5LCB0aGlzX2dyb3VwX3JlZ251bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ251bSAtIHRoaXNfZ3JvdXBfcmVnbnVtKTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICd8JzoJCQkJCS8qIGBcfCcuICAqLworKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTIHx8IHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKKysgICAgICAgICAgICBoYW5kbGVfYWx0OgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKyAgICAgICAgICAgICAgLyogSW5zZXJ0IGJlZm9yZSB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUgYSBqdW1wIHdoaWNoCisrICAgICAgICAgICAgICAgICBqdW1wcyB0byB0aGlzIGFsdGVybmF0aXZlIGlmIHRoZSBmb3JtZXIgZmFpbHMuICAqLworKyAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgSU5TRVJUX0pVTVAgKG9uX2ZhaWx1cmVfanVtcCwgYmVnYWx0LAorKwkJCSAgIGIgKyAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgLyogVGhlIGFsdGVybmF0aXZlIGJlZm9yZSB0aGlzIG9uZSBoYXMgYSBqdW1wIGFmdGVyIGl0CisrICAgICAgICAgICAgICAgICB3aGljaCBnZXRzIGV4ZWN1dGVkIGlmIGl0IGdldHMgbWF0Y2hlZC4gIEFkanVzdCB0aGF0CisrICAgICAgICAgICAgICAgICBqdW1wIHNvIGl0IHdpbGwganVtcCB0byB0aGlzIGFsdGVybmF0aXZlJ3MgYW5hbG9nb3VzCisrICAgICAgICAgICAgICAgICBqdW1wIChwdXQgaW4gYmVsb3csIHdoaWNoIGluIHR1cm4gd2lsbCBqdW1wIHRvIHRoZSBuZXh0CisrICAgICAgICAgICAgICAgICAoaWYgYW55KSBhbHRlcm5hdGl2ZSdzIHN1Y2gganVtcCwgZXRjLikuICBUaGUgbGFzdCBzdWNoCisrICAgICAgICAgICAgICAgICBqdW1wIGp1bXBzIHRvIHRoZSBjb3JyZWN0IGZpbmFsIGRlc3RpbmF0aW9uLiAgQSBwaWN0dXJlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX18gX19fX18KKysgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8IHwgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgdiB8ICAgdgorKyAgICAgICAgICAgICAgICAgICAgICAgICBhIHwgYiAgIHwgYworKworKyAgICAgICAgICAgICAgICAgSWYgd2UgYXJlIGF0IGBiJywgdGhlbiBmaXh1cF9hbHRfanVtcCByaWdodCBub3cgcG9pbnRzIHRvIGEKKysgICAgICAgICAgICAgICAgIHRocmVlLWJ5dGUgc3BhY2UgYWZ0ZXIgYGEnLiAgV2UnbGwgcHV0IGluIHRoZSBqdW1wLCBzZXQKKysgICAgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wIHRvIHJpZ2h0IGFmdGVyIGBiJywgYW5kIGxlYXZlIGJlaGluZCB0aHJlZQorKyAgICAgICAgICAgICAgICAgYnl0ZXMgd2hpY2ggd2UnbGwgZmlsbCBpbiB3aGVuIHdlIGdldCB0byBhZnRlciBgYycuICAqLworKworKyAgICAgICAgICAgICAgaWYgKGZpeHVwX2FsdF9qdW1wKQorKyAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChqdW1wX3Bhc3RfYWx0LCBmaXh1cF9hbHRfanVtcCwgYik7CisrCisrICAgICAgICAgICAgICAvKiBNYXJrIGFuZCBsZWF2ZSBzcGFjZSBmb3IgYSBqdW1wIGFmdGVyIHRoaXMgYWx0ZXJuYXRpdmUsCisrICAgICAgICAgICAgICAgICB0byBiZSBmaWxsZWQgaW4gbGF0ZXIgZWl0aGVyIGJ5IG5leHQgYWx0ZXJuYXRpdmUgb3IKKysgICAgICAgICAgICAgICAgIHdoZW4ga25vdyB3ZSdyZSBhdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIGFsdGVybmF0aXZlcy4gICovCisrICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcCA9IGI7CisrICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gMDsKKysgICAgICAgICAgICAgIGJlZ2FsdCA9IGI7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICd7JzoKKysgICAgICAgICAgICAgIC8qIElmIFx7IGlzIGEgbGl0ZXJhbC4gICovCisrICAgICAgICAgICAgICBpZiAoIShzeW50YXggJiBSRV9JTlRFUlZBTFMpCisrICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UncmUgYXQgYFx7JyBhbmQgaXQncyBub3QgdGhlIG9wZW4taW50ZXJ2YWwKKysgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4gICovCisrCQkgIHx8IChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgaGFuZGxlX2ludGVydmFsOgorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvKiBJZiBnb3QgaGVyZSwgdGhlbiB0aGUgc3ludGF4IGFsbG93cyBpbnRlcnZhbHMuICAqLworKworKyAgICAgICAgICAgICAgICAvKiBBdCBsZWFzdCAobW9zdCkgdGhpcyBtYW55IG1hdGNoZXMgbXVzdCBiZSBtYWRlLiAgKi8KKysgICAgICAgICAgICAgICAgaW50IGxvd2VyX2JvdW5kID0gLTEsIHVwcGVyX2JvdW5kID0gLTE7CisrCisrCQkvKiBQbGFjZSBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJuIChpLmUuLCBqdXN0IGFmdGVyCisrCQkgICB0aGUgJ3snKSB0byBnbyBiYWNrIHRvIGlmIHRoZSBpbnRlcnZhbCBpcyBpbnZhbGlkLiAgKi8KKysJCWNvbnN0IENIQVJfVCAqYmVnX2ludGVydmFsID0gcDsKKysKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkKKysJCSAgZ290byBpbnZhbGlkX2ludGVydmFsOworKworKyAgICAgICAgICAgICAgICBHRVRfVU5TSUdORURfTlVNQkVSIChsb3dlcl9ib3VuZCk7CisrCisrICAgICAgICAgICAgICAgIGlmIChjID09ICcsJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBHRVRfVU5TSUdORURfTlVNQkVSICh1cHBlcl9ib3VuZCk7CisrCQkgICAgaWYgKHVwcGVyX2JvdW5kIDwgMCkKKysJCSAgICAgIHVwcGVyX2JvdW5kID0gUkVfRFVQX01BWDsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAvKiBJbnRlcnZhbCBzdWNoIGFzIGB7MX0nID0+IG1hdGNoIGV4YWN0bHkgb25jZS4gKi8KKysgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZCA9IGxvd2VyX2JvdW5kOworKworKyAgICAgICAgICAgICAgICBpZiAoISAoMCA8PSBsb3dlcl9ib3VuZCAmJiBsb3dlcl9ib3VuZCA8PSB1cHBlcl9ib3VuZCkpCisrCQkgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysKKysgICAgICAgICAgICAgICAgaWYgKCEoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKysgICAgICAgICAgICAgICAgICB7CisrCQkgICAgaWYgKGMgIT0gJ1xcJyB8fCBwID09IHBlbmQpCisrCQkgICAgICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBpZiAoYyAhPSAnfScpCisrCQkgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysKKysgICAgICAgICAgICAgICAgLyogSWYgaXQncyBpbnZhbGlkIHRvIGhhdmUgbm8gcHJlY2VkaW5nIHJlLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKCFsYXN0c3RhcnQpCisrICAgICAgICAgICAgICAgICAgeworKwkJICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTCisrCQkJJiYgIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkpCisrICAgICAgICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfQkFEUlBUKTsKKysgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfT1BTKQorKyAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIHVuZmV0Y2hfaW50ZXJ2YWw7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBXZSBqdXN0IHBhcnNlZCBhIHZhbGlkIGludGVydmFsLiAgKi8KKysKKysgICAgICAgICAgICAgICAgaWYgKFJFX0RVUF9NQVggPCB1cHBlcl9ib3VuZCkKKysJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19CQURCUik7CisrCisrICAgICAgICAgICAgICAgIC8qIElmIHRoZSB1cHBlciBib3VuZCBpcyB6ZXJvLCBkb24ndCB3YW50IHRvIHN1Y2NlZWQgYXQKKysgICAgICAgICAgICAgICAgICAgYWxsOyBqdW1wIGZyb20gYGxhc3RzdGFydCcgdG8gYGIgKyAzJywgd2hpY2ggd2lsbCBiZQorKwkJICAgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHdlIGluc2VydCB0aGUganVtcC4gICovCisrCQkvKiBpZmRlZiBXQ0hBUiwgJ2IgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRScKKysJCSAgIGluc3RlYWQgb2YgJ2IgKyAzJy4gICovCisrICAgICAgICAgICAgICAgICBpZiAodXBwZXJfYm91bmQgPT0gMCkKKysgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgICAgICBJTlNFUlRfSlVNUCAoanVtcCwgbGFzdHN0YXJ0LCBiICsgMQorKwkJCQkgICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgbm9udHJpdmlhbCBpbnRlcnZhbC4gIFdoZW4KKysgICAgICAgICAgICAgICAgICAgIHdlJ3JlIGFsbCBkb25lLCB0aGUgcGF0dGVybiB3aWxsIGxvb2sgbGlrZToKKysgICAgICAgICAgICAgICAgICAgICAgc2V0X251bWJlcl9hdCA8anVtcCBjb3VudD4gPHVwcGVyIGJvdW5kPgorKyAgICAgICAgICAgICAgICAgICAgICBzZXRfbnVtYmVyX2F0IDxzdWNjZWVkX24gY291bnQ+IDxsb3dlciBib3VuZD4KKysgICAgICAgICAgICAgICAgICAgICAgc3VjY2VlZF9uIDxhZnRlciBqdW1wIGFkZHI+IDxzdWNjZWVkX24gY291bnQ+CisrICAgICAgICAgICAgICAgICAgICAgIDxib2R5IG9mIGxvb3A+CisrICAgICAgICAgICAgICAgICAgICAgIGp1bXBfbiA8c3VjY2VlZF9uIGFkZHI+IDxqdW1wIGNvdW50PgorKyAgICAgICAgICAgICAgICAgICAgKFRoZSB1cHBlciBib3VuZCBhbmQgYGp1bXBfbicgYXJlIG9taXR0ZWQgaWYKKysgICAgICAgICAgICAgICAgICAgIGB1cHBlcl9ib3VuZCcgaXMgMSwgdGhvdWdoLikgICovCisrICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgIHsgLyogSWYgdGhlIHVwcGVyIGJvdW5kIGlzID4gMSwgd2UgbmVlZCB0byBpbnNlcnQKKysgICAgICAgICAgICAgICAgICAgICAgICBtb3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AuICAqLworKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ieXRlcyA9IDIgKyA0ICogT0ZGU0VUX0FERFJFU1NfU0laRSArCisrCQkgICAgICAgKHVwcGVyX2JvdW5kID4gMSkgKiAoMiArIDQgKiBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysKKysgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFIChuYnl0ZXMpOworKworKyAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbG93ZXIgYm91bmQgb2YgdGhlIGBzdWNjZWVkX24nLCBldmVuCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhvdWdoIGl0IHdpbGwgYmUgc2V0IGR1cmluZyBtYXRjaGluZyBieSBpdHMKKysgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbmRhbnQgYHNldF9udW1iZXJfYXQnIChpbnNlcnRlZCBuZXh0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGByZV9jb21waWxlX2Zhc3RtYXAnIG5lZWRzIHRvIGtub3cuCisrICAgICAgICAgICAgICAgICAgICAgICAgSnVtcCB0byB0aGUgYGp1bXBfbicgd2UgbWlnaHQgaW5zZXJ0IGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgICAgICBJTlNFUlRfSlVNUDIgKHN1Y2NlZWRfbiwgbGFzdHN0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiArIDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRQorKwkJCQkgICArICh1cHBlcl9ib3VuZCA+IDEpICogKDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSkKKysJCQkJICAgLCBsb3dlcl9ib3VuZCk7CisrICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgLyogQ29kZSB0byBpbml0aWFsaXplIHRoZSBsb3dlciBib3VuZC4gIEluc2VydAorKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgYHN1Y2NlZWRfbicuICBUaGUgYDUnIGlzIHRoZSBsYXN0IHR3bworKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIG9mIHRoaXMgYHNldF9udW1iZXJfYXQnLCBwbHVzIDMgYnl0ZXMgb2YKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIGBzdWNjZWVkX24nLiAgKi8KKysJCSAgICAgLyogaWZkZWYgV0NIQVIsIFRoZSAnMSsyKk9GRlNFVF9BRERSRVNTX1NJWkUnCisrCQkJaXMgdGhlICdzZXRfbnVtYmVyX2F0JywgcGx1cyAnMStPRkZTRVRfQUREUkVTU19TSVpFJworKwkJCW9mIHRoZSBmb2xsb3dpbmcgYHN1Y2NlZWRfbicuICAqLworKyAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChpbnNlcnRfb3AyKSAoc2V0X251bWJlcl9hdCwgbGFzdHN0YXJ0LCAxCisrCQkJCSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFLCBsb3dlcl9ib3VuZCwgYik7CisrICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgICAgICAgICAgICAgaWYgKHVwcGVyX2JvdW5kID4gMSkKKysgICAgICAgICAgICAgICAgICAgICAgIHsgLyogTW9yZSB0aGFuIG9uZSByZXBldGl0aW9uIGlzIGFsbG93ZWQsIHNvCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCBhIGJhY2t3YXJkIGp1bXAgdG8gdGhlIGBzdWNjZWVkX24nCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc3RhcnRzIHRoaXMgaW50ZXJ2YWwuCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gd2UndmUgcmVhY2hlZCB0aGlzIGR1cmluZyBtYXRjaGluZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UnbGwgaGF2ZSBtYXRjaGVkIHRoZSBpbnRlcnZhbCBvbmNlLCBzbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wIGJhY2sgb25seSBgdXBwZXJfYm91bmQgLSAxJyB0aW1lcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAyIChqdW1wX24sIGIsIGxhc3RzdGFydAorKwkJCQkgICAgICArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFICsgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kIC0gMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbG9jYXRpb24gd2Ugd2FudCB0byBzZXQgaXMgdGhlIHNlY29uZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb2YgdGhlIGBqdW1wX24nOyB0aGF0IGlzIGBiLTInIGFzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFic29sdXRlIGFkZHJlc3MuICBgbGFzdHN0YXJ0JyB3aWxsIGJlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBgc2V0X251bWJlcl9hdCcgd2UncmUgYWJvdXQgdG8gaW5zZXJ0OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbGFzdHN0YXJ0KzMnIHRoZSBudW1iZXIgdG8gc2V0LCB0aGUgc291cmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcmVsYXRpdmUgYWRkcmVzcy4gIEJ1dCB3ZSBhcmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW5nIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgcGF0dGVybiAtLQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbyBldmVyeXRoaW5nIGlzIGdldHRpbmcgbW92ZWQgdXAgYnkgNS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uY2x1c2lvbjogKGIgLSAyKSAtIChsYXN0c3RhcnQgKyAzKSArIDUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuZS4sIGIgLSBsYXN0c3RhcnQuCisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlIGluc2VydCB0aGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gdGhhdCBpZiB3ZSBmYWlsIGR1cmluZyBtYXRjaGluZywgd2UnbGwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbml0aWFsaXplIHRoZSBib3VuZHMuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgoaW5zZXJ0X29wMikgKHNldF9udW1iZXJfYXQsIGxhc3RzdGFydCwKKysJCQkJCSAgICAgYiAtIGxhc3RzdGFydCwKKysJCQkJCSAgICAgdXBwZXJfYm91bmQgLSAxLCBiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgYiArPSAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgcGVuZGluZ19leGFjdCA9IDA7CisrCQlicmVhazsKKysKKysJICAgICAgaW52YWxpZF9pbnRlcnZhbDoKKysJCWlmICghKHN5bnRheCAmIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKSkKKysJCSAgRlJFRV9TVEFDS19SRVRVUk4gKHAgPT0gcGVuZCA/IFJFR19FQlJBQ0UgOiBSRUdfQkFEQlIpOworKwkgICAgICB1bmZldGNoX2ludGVydmFsOgorKwkJLyogTWF0Y2ggdGhlIGNoYXJhY3RlcnMgYXMgbGl0ZXJhbHMuICAqLworKwkJcCA9IGJlZ19pbnRlcnZhbDsKKysJCWMgPSAneyc7CisrCQlpZiAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKQorKwkJICBnb3RvIG5vcm1hbF9jaGFyOworKwkJZWxzZQorKwkJICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCSAgICAgIH0KKysKKysjaWZkZWYgZW1hY3MKKysgICAgICAgICAgICAvKiBUaGVyZSBpcyBubyB3YXkgdG8gc3BlY2lmeSB0aGUgYmVmb3JlX2RvdCBhbmQgYWZ0ZXJfZG90CisrICAgICAgICAgICAgICAgb3BlcmF0b3JzLiAgcm1zIHNheXMgdGhpcyBpcyBvay4gIC0ta2FybCAgKi8KKysgICAgICAgICAgICBjYXNlICc9JzoKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChhdF9kb3QpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAncyc6CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgQlVGX1BVU0hfMiAoc3ludGF4c3BlYywgc3ludGF4X3NwZWNfY29kZVtjXSk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICdTJzoKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IGI7CisrICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrICAgICAgICAgICAgICBCVUZfUFVTSF8yIChub3RzeW50YXhzcGVjLCBzeW50YXhfc3BlY19jb2RlW2NdKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKyNlbmRpZiAvKiBlbWFjcyAqLworKworKworKyAgICAgICAgICAgIGNhc2UgJ3cnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRjaGFyKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJ1cnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKG5vdHdvcmRjaGFyKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgICAgIGNhc2UgJzwnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGJlZyk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICc+JzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRlbmQpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnYic6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkYm91bmQpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnQic6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChub3R3b3JkYm91bmQpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnYCc6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChiZWdidWYpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnXCcnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAoZW5kYnVmKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKKysgICAgICAgICAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19SRUZTKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKyAgICAgICAgICAgICAgYzEgPSBjIC0gJzAnOworKworKyAgICAgICAgICAgICAgaWYgKGMxID4gcmVnbnVtKQorKyAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VTVUJSRUcpOworKworKyAgICAgICAgICAgICAgLyogQ2FuJ3QgYmFjayByZWZlcmVuY2UgdG8gYSBzdWJleHByZXNzaW9uIGlmIGluc2lkZSBvZiBpdC4gICovCisrICAgICAgICAgICAgICBpZiAoZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFjaywgKHJlZ251bV90KSBjMSkpCisrICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgQlVGX1BVU0hfMiAoZHVwbGljYXRlLCBjMSk7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICcrJzoKKysgICAgICAgICAgICBjYXNlICc/JzoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKQorKyAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9wbHVzOworKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBub3JtYWxfYmFja3NsYXNoOgorKyAgICAgICAgICAgICAgLyogWW91IG1pZ2h0IHRoaW5rIGl0IHdvdWxkIGJlIHVzZWZ1bCBmb3IgXCB0byBtZWFuCisrICAgICAgICAgICAgICAgICBub3QgdG8gdHJhbnNsYXRlOyBidXQgaWYgd2UgZG9uJ3QgdHJhbnNsYXRlIGl0CisrICAgICAgICAgICAgICAgICBpdCB3aWxsIG5ldmVyIG1hdGNoIGFueXRoaW5nLiAgKi8KKysgICAgICAgICAgICAgIGMgPSBUUkFOU0xBVEUgKGMpOworKyAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKworKwlkZWZhdWx0OgorKyAgICAgICAgLyogRXhwZWN0cyB0aGUgY2hhcmFjdGVyIGluIGBjJy4gICovCisrCW5vcm1hbF9jaGFyOgorKwkgICAgICAvKiBJZiBubyBleGFjdG4gY3VycmVudGx5IGJlaW5nIGJ1aWx0LiAgKi8KKysgICAgICAgICAgaWYgKCFwZW5kaW5nX2V4YWN0CisrI2lmZGVmIFdDSEFSCisrCSAgICAgIC8qIElmIGxhc3QgZXhhY3RuIGhhbmRsZSBiaW5hcnkob3IgY2hhcmFjdGVyKSBhbmQKKysJCSBuZXcgZXhhY3RuIGhhbmRsZSBjaGFyYWN0ZXIob3IgYmluYXJ5KS4gICovCisrCSAgICAgIHx8IGlzX2V4YWN0bl9iaW4gIT0gaXNfYmluYXJ5W3AgLSAxIC0gcGF0dGVybl0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgICAgICAgICAgICAgIC8qIElmIGxhc3QgZXhhY3RuIG5vdCBhdCBjdXJyZW50IHBvc2l0aW9uLiAgKi8KKysgICAgICAgICAgICAgIHx8IHBlbmRpbmdfZXhhY3QgKyAqcGVuZGluZ19leGFjdCArIDEgIT0gYgorKworKyAgICAgICAgICAgICAgLyogV2UgaGF2ZSBvbmx5IG9uZSBieXRlIGZvbGxvd2luZyB0aGUgZXhhY3RuIGZvciB0aGUgY291bnQuICAqLworKwkgICAgICB8fCAqcGVuZGluZ19leGFjdCA9PSAoMSA8PCBCWVRFV0lEVEgpIC0gMQorKworKyAgICAgICAgICAgICAgLyogSWYgZm9sbG93ZWQgYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnXicKKysJICAgICAgfHwgKChzeW50YXggJiBSRV9CS19QTFVTX1FNKQorKwkJICA/ICpwID09ICdcXCcgJiYgKHBbMV0gPT0gJysnIHx8IHBbMV0gPT0gJz8nKQorKwkJICA6ICgqcCA9PSAnKycgfHwgKnAgPT0gJz8nKSkKKysJICAgICAgfHwgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpCisrICAgICAgICAgICAgICAgICAgJiYgKChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpCisrCQkgICAgICA/ICpwID09ICd7JworKyAgICAgICAgICAgICAgICAgICAgICA6IChwWzBdID09ICdcXCcgJiYgcFsxXSA9PSAneycpKSkpCisrCSAgICB7CisrCSAgICAgIC8qIFN0YXJ0IGJ1aWxkaW5nIGEgbmV3IGV4YWN0bi4gICovCisrCisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKworKyNpZmRlZiBXQ0hBUgorKwkgICAgICAvKiBJcyB0aGlzIGV4YWN0biBiaW5hcnkgZGF0YSBvciBjaGFyYWN0ZXI/ICovCisrCSAgICAgIGlzX2V4YWN0bl9iaW4gPSBpc19iaW5hcnlbcCAtIDEgLSBwYXR0ZXJuXTsKKysJICAgICAgaWYgKGlzX2V4YWN0bl9iaW4pCisrCQkgIEJVRl9QVVNIXzIgKGV4YWN0bl9iaW4sIDApOworKwkgICAgICBlbHNlCisrCQkgIEJVRl9QVVNIXzIgKGV4YWN0biwgMCk7CisrI2Vsc2UKKysJICAgICAgQlVGX1BVU0hfMiAoZXhhY3RuLCAwKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysJICAgICAgcGVuZGluZ19leGFjdCA9IGIgLSAxOworKyAgICAgICAgICAgIH0KKysKKysJICBCVUZfUFVTSCAoYyk7CisrICAgICAgICAgICgqcGVuZGluZ19leGFjdCkrKzsKKysJICBicmVhazsKKysgICAgICAgIH0gLyogc3dpdGNoIChjKSAqLworKyAgICB9IC8qIHdoaWxlIHAgIT0gcGVuZCAqLworKworKworKyAgLyogVGhyb3VnaCB0aGUgcGF0dGVybiBub3cuICAqLworKworKyAgaWYgKGZpeHVwX2FsdF9qdW1wKQorKyAgICBTVE9SRV9KVU1QIChqdW1wX3Bhc3RfYWx0LCBmaXh1cF9hbHRfanVtcCwgYik7CisrCisrICBpZiAoIUNPTVBJTEVfU1RBQ0tfRU1QVFkpCisrICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVBBUkVOKTsKKysKKysgIC8qIElmIHdlIGRvbid0IHdhbnQgYmFja3RyYWNraW5nLCBmb3JjZSBzdWNjZXNzCisrICAgICB0aGUgZmlyc3QgdGltZSB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgIGlmIChzeW50YXggJiBSRV9OT19QT1NJWF9CQUNLVFJBQ0tJTkcpCisrICAgIEJVRl9QVVNIIChzdWNjZWVkKTsKKysKKysjaWZkZWYgV0NIQVIKKysgIGZyZWUgKHBhdHRlcm4pOworKyAgZnJlZSAobWJzX29mZnNldCk7CisrICBmcmVlIChpc19iaW5hcnkpOworKyNlbmRpZgorKyAgZnJlZSAoY29tcGlsZV9zdGFjay5zdGFjayk7CisrCisrICAvKiBXZSBoYXZlIHN1Y2NlZWRlZDsgc2V0IHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlci4gICovCisrI2lmZGVmIFdDSEFSCisrICBidWZwLT51c2VkID0gKHVpbnRwdHJfdCkgYiAtICh1aW50cHRyX3QpIENPTVBJTEVEX0JVRkZFUl9WQVI7CisrI2Vsc2UKKysgIGJ1ZnAtPnVzZWQgPSBiIC0gYnVmcC0+YnVmZmVyOworKyNlbmRpZgorKworKyNpZmRlZiBERUJVRworKyAgaWYgKGRlYnVnKQorKyAgICB7CisrICAgICAgREVCVUdfUFJJTlQxICgiXG5Db21waWxlZCBwYXR0ZXJuOiBcbiIpOworKyAgICAgIFBSRUZJWChwcmludF9jb21waWxlZF9wYXR0ZXJuKSAoYnVmcCk7CisrICAgIH0KKysjZW5kaWYgLyogREVCVUcgKi8KKysKKysjaWZuZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyAgLyogSW5pdGlhbGl6ZSB0aGUgZmFpbHVyZSBzdGFjayB0byB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBzdGFjay4gIFRoaXMKKysgICAgIGlzbid0IG5lY2Vzc2FyeSB1bmxlc3Mgd2UncmUgdHJ5aW5nIHRvIGF2b2lkIGNhbGxpbmcgYWxsb2NhIGluCisrICAgICB0aGUgc2VhcmNoIGFuZCBtYXRjaCByb3V0aW5lcy4gICovCisrICB7CisrICAgIGludCBudW1fcmVncyA9IGJ1ZnAtPnJlX25zdWIgKyAxOworKworKyAgICAvKiBTaW5jZSBET1VCTEVfRkFJTF9TVEFDSyByZWZ1c2VzIHRvIGRvdWJsZSBvbmx5IGlmIHRoZSBjdXJyZW50IHNpemUKKysgICAgICAgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHJlX21heF9mYWlsdXJlcywgdGhlIGxhcmdlc3QgcG9zc2libGUgc3RhY2sKKysgICAgICAgaXMgMiAqIHJlX21heF9mYWlsdXJlcyBmYWlsdXJlIHBvaW50cy4gICovCisrICAgIGlmIChmYWlsX3N0YWNrLnNpemUgPCAoMiAqIHJlX21heF9mYWlsdXJlcyAqIE1BWF9GQUlMVVJFX0lURU1TKSkKKysgICAgICB7CisrCWZhaWxfc3RhY2suc2l6ZSA9ICgyICogcmVfbWF4X2ZhaWx1cmVzICogTUFYX0ZBSUxVUkVfSVRFTVMpOworKworKyMgaWZkZWYgZW1hY3MKKysJaWYgKCEgZmFpbF9zdGFjay5zdGFjaykKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgeG1hbGxvYyAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSk7CisrCWVsc2UKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgeHJlYWxsb2MgKGZhaWxfc3RhY2suc3RhY2ssCisrCQkJCSAgICAgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSkpOworKyMgZWxzZSAvKiBub3QgZW1hY3MgKi8KKysJaWYgKCEgZmFpbF9zdGFjay5zdGFjaykKKysJICBmYWlsX3N0YWNrLnN0YWNrCisrCSAgICA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikgbWFsbG9jIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpOworKwllbHNlCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIHJlYWxsb2MgKGZhaWxfc3RhY2suc3RhY2ssCisrCQkJCQkgICAgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKSk7CisrIyBlbmRpZiAvKiBub3QgZW1hY3MgKi8KKysgICAgICB9CisrCisrICAgUFJFRklYKHJlZ2V4X2dyb3dfcmVnaXN0ZXJzKSAobnVtX3JlZ3MpOworKyAgfQorKyNlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrICByZXR1cm4gUkVHX05PRVJST1I7CisrfSAvKiByZWdleF9jb21waWxlICovCisrCisrLyogU3Vicm91dGluZXMgZm9yIGByZWdleF9jb21waWxlJy4gICovCisrCisrLyogU3RvcmUgT1AgYXQgTE9DIGZvbGxvd2VkIGJ5IHR3by1ieXRlIGludGVnZXIgcGFyYW1ldGVyIEFSRy4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoc3RvcmVfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZykKKyt7CisrICAqbG9jID0gKFVDSEFSX1QpIG9wOworKyAgU1RPUkVfTlVNQkVSIChsb2MgKyAxLCBhcmcpOworK30KKysKKysKKysvKiBMaWtlIGBzdG9yZV9vcDEnLCBidXQgZm9yIHR3byB0d28tYnl0ZSBwYXJhbWV0ZXJzIEFSRzEgYW5kIEFSRzIuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKHN0b3JlX29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcxLCBpbnQgYXJnMikKKyt7CisrICAqbG9jID0gKFVDSEFSX1QpIG9wOworKyAgU1RPUkVfTlVNQkVSIChsb2MgKyAxLCBhcmcxKTsKKysgIFNUT1JFX05VTUJFUiAobG9jICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUsIGFyZzIpOworK30KKysKKysKKysvKiBDb3B5IHRoZSBieXRlcyBmcm9tIExPQyB0byBFTkQgdG8gb3BlbiB1cCB0aHJlZSBieXRlcyBvZiBzcGFjZSBhdCBMT0MKKysgICBmb3IgT1AgZm9sbG93ZWQgYnkgdHdvLWJ5dGUgaW50ZWdlciBwYXJhbWV0ZXIgQVJHLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChpbnNlcnRfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZywgVUNIQVJfVCAqZW5kKQorK3sKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBmcm9tID0gZW5kOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcHRvID0gZW5kICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICB3aGlsZSAocGZyb20gIT0gbG9jKQorKyAgICAqLS1wdG8gPSAqLS1wZnJvbTsKKysKKysgIFBSRUZJWChzdG9yZV9vcDEpIChvcCwgbG9jLCBhcmcpOworK30KKysKKysKKysvKiBMaWtlIGBpbnNlcnRfb3AxJywgYnV0IGZvciB0d28gdHdvLWJ5dGUgcGFyYW1ldGVycyBBUkcxIGFuZCBBUkcyLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChpbnNlcnRfb3AyKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZzEsCisrICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMiwgVUNIQVJfVCAqZW5kKQorK3sKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBmcm9tID0gZW5kOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcHRvID0gZW5kICsgMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgd2hpbGUgKHBmcm9tICE9IGxvYykKKysgICAgKi0tcHRvID0gKi0tcGZyb207CisrCisrICBQUkVGSVgoc3RvcmVfb3AyKSAob3AsIGxvYywgYXJnMSwgYXJnMik7CisrfQorKworKworKy8qIFAgcG9pbnRzIHRvIGp1c3QgYWZ0ZXIgYSBeIGluIFBBVFRFUk4uICBSZXR1cm4gdHJ1ZSBpZiB0aGF0IF4gY29tZXMKKysgICBhZnRlciBhbiBhbHRlcm5hdGl2ZSBvciBhIGJlZ2luLXN1YmV4cHJlc3Npb24uICBXZSBhc3N1bWUgdGhlcmUgaXMgYXQKKysgICBsZWFzdCBvbmUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgXi4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoYXRfYmVnbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcGF0dGVybiwgY29uc3QgQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCkKKyt7CisrICBjb25zdCBDSEFSX1QgKnByZXYgPSBwIC0gMjsKKysgIGJvb2xlYW4gcHJldl9wcmV2X2JhY2tzbGFzaCA9IHByZXYgPiBwYXR0ZXJuICYmIHByZXZbLTFdID09ICdcXCc7CisrCisrICByZXR1cm4KKysgICAgICAgLyogQWZ0ZXIgYSBzdWJleHByZXNzaW9uPyAgKi8KKysgICAgICAgKCpwcmV2ID09ICcoJyAmJiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TIHx8IHByZXZfcHJldl9iYWNrc2xhc2gpKQorKyAgICAgICAvKiBBZnRlciBhbiBhbHRlcm5hdGl2ZT8gICovCisrICAgIHx8ICgqcHJldiA9PSAnfCcgJiYgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIgfHwgcHJldl9wcmV2X2JhY2tzbGFzaCkpOworK30KKysKKysKKysvKiBUaGUgZHVhbCBvZiBhdF9iZWdsaW5lX2xvY19wLiAgVGhpcyBvbmUgaXMgZm9yICQuICBXZSBhc3N1bWUgdGhlcmUgaXMKKysgICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGFmdGVyIHRoZSAkLCBpLmUuLCBgUCA8IFBFTkQnLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChhdF9lbmRsaW5lX2xvY19wKSAoY29uc3QgQ0hBUl9UICpwLCBjb25zdCBDSEFSX1QgKnBlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KQorK3sKKysgIGNvbnN0IENIQVJfVCAqbmV4dCA9IHA7CisrICBib29sZWFuIG5leHRfYmFja3NsYXNoID0gKm5leHQgPT0gJ1xcJzsKKysgIGNvbnN0IENIQVJfVCAqbmV4dF9uZXh0ID0gcCArIDEgPCBwZW5kID8gcCArIDEgOiAwOworKworKyAgcmV0dXJuCisrICAgICAgIC8qIEJlZm9yZSBhIHN1YmV4cHJlc3Npb24/ICAqLworKyAgICAgICAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TID8gKm5leHQgPT0gJyknCisrICAgICAgICA6IG5leHRfYmFja3NsYXNoICYmIG5leHRfbmV4dCAmJiAqbmV4dF9uZXh0ID09ICcpJykKKysgICAgICAgLyogQmVmb3JlIGFuIGFsdGVybmF0aXZlPyAgKi8KKysgICAgfHwgKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIgPyAqbmV4dCA9PSAnfCcKKysgICAgICAgIDogbmV4dF9iYWNrc2xhc2ggJiYgbmV4dF9uZXh0ICYmICpuZXh0X25leHQgPT0gJ3wnKTsKKyt9CisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgUkVHTlVNIGlzIGluIG9uZSBvZiBDT01QSUxFX1NUQUNLJ3MgZWxlbWVudHMgYW5kCisrICAgZmFsc2UgaWYgaXQncyBub3QuICAqLworKworK3N0YXRpYyBib29sZWFuCisrZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190eXBlIGNvbXBpbGVfc3RhY2ssIHJlZ251bV90IHJlZ251bSkKKyt7CisrICBpbnQgdGhpc19lbGVtZW50OworKworKyAgZm9yICh0aGlzX2VsZW1lbnQgPSBjb21waWxlX3N0YWNrLmF2YWlsIC0gMTsKKysgICAgICAgdGhpc19lbGVtZW50ID49IDA7CisrICAgICAgIHRoaXNfZWxlbWVudC0tKQorKyAgICBpZiAoY29tcGlsZV9zdGFjay5zdGFja1t0aGlzX2VsZW1lbnRdLnJlZ251bSA9PSByZWdudW0pCisrICAgICAgcmV0dXJuIHRydWU7CisrCisrICByZXR1cm4gZmFsc2U7CisrfQorKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrI2lmZGVmIFdDSEFSCisrLyogVGhpcyBpbnNlcnQgc3BhY2UsIHdoaWNoIHNpemUgaXMgIm51bSIsIGludG8gdGhlIHBhdHRlcm4gYXQgImxvYyIuCisrICAgImVuZCIgbXVzdCBwb2ludCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiAgKi8KKytzdGF0aWMgdm9pZAorK2luc2VydF9zcGFjZSAoaW50IG51bSwgQ0hBUl9UICpsb2MsIENIQVJfVCAqZW5kKQorK3sKKysgIHJlZ2lzdGVyIENIQVJfVCAqcHRvID0gZW5kOworKyAgcmVnaXN0ZXIgQ0hBUl9UICpwZnJvbSA9IGVuZCAtIG51bTsKKysKKysgIHdoaWxlIChwZnJvbSA+PSBsb2MpCisrICAgICpwdG8tLSA9ICpwZnJvbS0tOworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysjaWZkZWYgV0NIQVIKKytzdGF0aWMgcmVnX2VycmNvZGVfdAorK3djc19jb21waWxlX3JhbmdlIChDSEFSX1QgcmFuZ2Vfc3RhcnRfY2hhciwgY29uc3QgQ0hBUl9UICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcGVuZCwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCBDSEFSX1QgKmIsIENIQVJfVCAqY2hhcl9zZXQpCisreworKyAgY29uc3QgQ0hBUl9UICpwID0gKnBfcHRyOworKyAgQ0hBUl9UIHJhbmdlX3N0YXJ0LCByYW5nZV9lbmQ7CisrICByZWdfZXJyY29kZV90IHJldDsKKysjIGlmZGVmIF9MSUJDCisrICB1aW50MzJfdCBucnVsZXM7CisrICB1aW50MzJfdCBzdGFydF92YWwsIGVuZF92YWw7CisrIyBlbmRpZgorKyAgaWYgKHAgPT0gcGVuZCkKKysgICAgcmV0dXJuIFJFR19FUkFOR0U7CisrCisrIyBpZmRlZiBfTElCQworKyAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysgIGlmIChucnVsZXMgIT0gMCkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKmNvbGxzZXEgPSAoY29uc3QgY2hhciAqKSBfTkxfQ1VSUkVOVChMQ19DT0xMQVRFLAorKwkJCQkJCSAgICAgICBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrICAgICAgaWYgKHJhbmdlX3N0YXJ0X2NoYXIgPCAtMSkKKysJeworKwkgIC8qIHJhbmdlX3N0YXJ0IGlzIGEgY29sbGF0aW5nIHN5bWJvbC4gICovCisrCSAgaW50MzJfdCAqd2V4dHJhOworKwkgIC8qIFJldHJlaXZlIHRoZSBpbmRleCBhbmQgZ2V0IGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisrCSAgd2V4dHJhID0gKGludDMyX3QqKShleHRyYSArIGNoYXJfc2V0Wy1yYW5nZV9zdGFydF9jaGFyXSk7CisrCSAgc3RhcnRfdmFsID0gd2V4dHJhWzEgKyAqd2V4dHJhXTsKKysJfQorKyAgICAgIGVsc2UKKysJc3RhcnRfdmFsID0gY29sbHNlcV90YWJsZV9sb29rdXAoY29sbHNlcSwgVFJBTlNMQVRFKHJhbmdlX3N0YXJ0X2NoYXIpKTsKKysKKysgICAgICBlbmRfdmFsID0gY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXEsIFRSQU5TTEFURSAocFswXSkpOworKworKyAgICAgIC8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkgYW5kIHRoZSBzeW50YXggcHJvaGliaXRzCisrCSB0aGlzLiAgKi8KKysgICAgICByZXQgPSAoKHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUykKKysJICAgICAmJiAoc3RhcnRfdmFsID4gZW5kX3ZhbCkpPyBSRUdfRVJBTkdFIDogUkVHX05PRVJST1I7CisrCisrICAgICAgLyogSW5zZXJ0IHNwYWNlIHRvIHRoZSBlbmQgb2YgdGhlIGNoYXJfcmFuZ2VzLiAgKi8KKysgICAgICBpbnNlcnRfc3BhY2UoMiwgYiAtIGNoYXJfc2V0WzVdIC0gMiwgYiAtIDEpOworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMikgPSAod2NoYXJfdClzdGFydF92YWw7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAxKSA9ICh3Y2hhcl90KWVuZF92YWw7CisrICAgICAgY2hhcl9zZXRbNF0rKzsgLyogcmFuZ2VzX2luZGV4ICovCisrICAgIH0KKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHsKKysgICAgICByYW5nZV9zdGFydCA9IChyYW5nZV9zdGFydF9jaGFyID49IDApPyBUUkFOU0xBVEUgKHJhbmdlX3N0YXJ0X2NoYXIpOgorKwlyYW5nZV9zdGFydF9jaGFyOworKyAgICAgIHJhbmdlX2VuZCA9IFRSQU5TTEFURSAocFswXSk7CisrICAgICAgLyogUmVwb3J0IGFuIGVycm9yIGlmIHRoZSByYW5nZSBpcyBlbXB0eSBhbmQgdGhlIHN5bnRheCBwcm9oaWJpdHMKKysJIHRoaXMuICAqLworKyAgICAgIHJldCA9ICgoc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTKQorKwkgICAgICYmIChyYW5nZV9zdGFydCA+IHJhbmdlX2VuZCkpPyBSRUdfRVJBTkdFIDogUkVHX05PRVJST1I7CisrCisrICAgICAgLyogSW5zZXJ0IHNwYWNlIHRvIHRoZSBlbmQgb2YgdGhlIGNoYXJfcmFuZ2VzLiAgKi8KKysgICAgICBpbnNlcnRfc3BhY2UoMiwgYiAtIGNoYXJfc2V0WzVdIC0gMiwgYiAtIDEpOworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMikgPSByYW5nZV9zdGFydDsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDEpID0gcmFuZ2VfZW5kOworKyAgICAgIGNoYXJfc2V0WzRdKys7IC8qIHJhbmdlc19pbmRleCAqLworKyAgICB9CisrICAvKiBIYXZlIHRvIGluY3JlbWVudCB0aGUgcG9pbnRlciBpbnRvIHRoZSBwYXR0ZXJuIHN0cmluZywgc28gdGhlCisrICAgICBjYWxsZXIgaXNuJ3Qgc3RpbGwgYXQgdGhlIGVuZGluZyBjaGFyYWN0ZXIuICAqLworKyAgKCpwX3B0cikrKzsKKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbHNlIC8qIEJZVEUgKi8KKysvKiBSZWFkIHRoZSBlbmRpbmcgY2hhcmFjdGVyIG9mIGEgcmFuZ2UgKGluIGEgYnJhY2tldCBleHByZXNzaW9uKSBmcm9tIHRoZQorKyAgIHVuY29tcGlsZWQgcGF0dGVybiAqUF9QVFIgKHdoaWNoIGVuZHMgYXQgUEVORCkuICBXZSBhc3N1bWUgdGhlCisrICAgc3RhcnRpbmcgY2hhcmFjdGVyIGlzIGluIGBQWy0yXScuICAoYFBbLTFdJyBpcyB0aGUgY2hhcmFjdGVyIGAtJy4pCisrICAgVGhlbiB3ZSBzZXQgdGhlIHRyYW5zbGF0aW9uIG9mIGFsbCBiaXRzIGJldHdlZW4gdGhlIHN0YXJ0aW5nIGFuZAorKyAgIGVuZGluZyBjaGFyYWN0ZXJzIChpbmNsdXNpdmUpIGluIHRoZSBjb21waWxlZCBwYXR0ZXJuIEIuCisrCisrICAgUmV0dXJuIGFuIGVycm9yIGNvZGUuCisrCisrICAgV2UgdXNlIHRoZXNlIHNob3J0IHZhcmlhYmxlIG5hbWVzIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgbWFjcm9zIGFzCisrICAgYHJlZ2V4X2NvbXBpbGUnIGl0c2VsZi4gICovCisrCisrc3RhdGljIHJlZ19lcnJjb2RlX3QKKytieXRlX2NvbXBpbGVfcmFuZ2UgKHVuc2lnbmVkIGludCByYW5nZV9zdGFydF9jaGFyLCBjb25zdCBjaGFyICoqcF9wdHIsCisrICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwZW5kLCBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LCB1bnNpZ25lZCBjaGFyICpiKQorK3sKKysgIHVuc2lnbmVkIHRoaXNfY2hhcjsKKysgIGNvbnN0IGNoYXIgKnAgPSAqcF9wdHI7CisrICByZWdfZXJyY29kZV90IHJldDsKKysjIGlmIF9MSUJDCisrICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxOworKyAgdW5zaWduZWQgaW50IHN0YXJ0X2NvbHNlcTsKKysgIHVuc2lnbmVkIGludCBlbmRfY29sc2VxOworKyMgZWxzZQorKyAgdW5zaWduZWQgZW5kX2NoYXI7CisrIyBlbmRpZgorKworKyAgaWYgKHAgPT0gcGVuZCkKKysgICAgcmV0dXJuIFJFR19FUkFOR0U7CisrCisrICAvKiBIYXZlIHRvIGluY3JlbWVudCB0aGUgcG9pbnRlciBpbnRvIHRoZSBwYXR0ZXJuIHN0cmluZywgc28gdGhlCisrICAgICBjYWxsZXIgaXNuJ3Qgc3RpbGwgYXQgdGhlIGVuZGluZyBjaGFyYWN0ZXIuICAqLworKyAgKCpwX3B0cikrKzsKKysKKysgIC8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkgYW5kIHRoZSBzeW50YXggcHJvaGliaXRzIHRoaXMuICAqLworKyAgcmV0ID0gc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTID8gUkVHX0VSQU5HRSA6IFJFR19OT0VSUk9SOworKworKyMgaWYgX0xJQkMKKysgIGNvbGxzZXEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCQkgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKysKKysgIHN0YXJ0X2NvbHNlcSA9IGNvbGxzZXFbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAocmFuZ2Vfc3RhcnRfY2hhcildOworKyAgZW5kX2NvbHNlcSA9IGNvbGxzZXFbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAocFswXSldOworKyAgZm9yICh0aGlzX2NoYXIgPSAwOyB0aGlzX2NoYXIgPD0gKHVuc2lnbmVkIGNoYXIpIC0xOyArK3RoaXNfY2hhcikKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGludCB0aGlzX2NvbHNlcSA9IGNvbGxzZXFbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAodGhpc19jaGFyKV07CisrCisrICAgICAgaWYgKHN0YXJ0X2NvbHNlcSA8PSB0aGlzX2NvbHNlcSAmJiB0aGlzX2NvbHNlcSA8PSBlbmRfY29sc2VxKQorKwl7CisrCSAgU0VUX0xJU1RfQklUIChUUkFOU0xBVEUgKHRoaXNfY2hhcikpOworKwkgIHJldCA9IFJFR19OT0VSUk9SOworKwl9CisrICAgIH0KKysjIGVsc2UKKysgIC8qIEhlcmUgd2Ugc2VlIHdoeSBgdGhpc19jaGFyJyBoYXMgdG8gYmUgbGFyZ2VyIHRoYW4gYW4gYHVuc2lnbmVkCisrICAgICBjaGFyJyAtLSB3ZSB3b3VsZCBvdGhlcndpc2UgZ28gaW50byBhbiBpbmZpbml0ZSBsb29wLCBzaW5jZSBhbGwKKysgICAgIGNoYXJhY3RlcnMgPD0gMHhmZi4gICovCisrICByYW5nZV9zdGFydF9jaGFyID0gVFJBTlNMQVRFIChyYW5nZV9zdGFydF9jaGFyKTsKKysgIC8qIFRSQU5TTEFURShwWzBdKSBpcyBjYXN0ZWQgdG8gY2hhciAobm90IHVuc2lnbmVkIGNoYXIpIGluIFRSQU5TTEFURSwKKysgICAgIGFuZCBzb21lIGNvbXBpbGVycyBjYXN0IGl0IHRvIGludCBpbXBsaWNpdGx5LCBzbyBmb2xsb3dpbmcgZm9yX2xvb3AKKysgICAgIG1heSBmYWxsIHRvIChhbG1vc3QpIGluZmluaXRlIGxvb3AuCisrICAgICBlLmcuIElmIHRyYW5zbGF0ZVtwWzBdXSA9IDB4ZmYsIGVuZF9jaGFyIG1heSBlcXVhbHMgdG8gMHhmZmZmZmZmZi4KKysgICAgIFRvIGF2b2lkIHRoaXMsIHdlIGNhc3QgcFswXSB0byB1bnNpZ25lZCBpbnQgYW5kIHRydW5jYXRlIGl0LiAgKi8KKysgIGVuZF9jaGFyID0gKCh1bnNpZ25lZClUUkFOU0xBVEUocFswXSkgJiAoKDEgPDwgQllURVdJRFRIKSAtIDEpKTsKKysKKysgIGZvciAodGhpc19jaGFyID0gcmFuZ2Vfc3RhcnRfY2hhcjsgdGhpc19jaGFyIDw9IGVuZF9jaGFyOyArK3RoaXNfY2hhcikKKysgICAgeworKyAgICAgIFNFVF9MSVNUX0JJVCAoVFJBTlNMQVRFICh0aGlzX2NoYXIpKTsKKysgICAgICByZXQgPSBSRUdfTk9FUlJPUjsKKysgICAgfQorKyMgZW5kaWYKKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKwwKKysvKiByZV9jb21waWxlX2Zhc3RtYXAgY29tcHV0ZXMgYSBgYGZhc3RtYXAnJyBmb3IgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4KKysgICBCVUZQLiAgQSBmYXN0bWFwIHJlY29yZHMgd2hpY2ggb2YgdGhlICgxIDw8IEJZVEVXSURUSCkgcG9zc2libGUKKysgICBjaGFyYWN0ZXJzIGNhbiBzdGFydCBhIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4uICBUaGlzIGZhc3RtYXAKKysgICBpcyB1c2VkIGJ5IHJlX3NlYXJjaCB0byBza2lwIHF1aWNrbHkgb3ZlciBpbXBvc3NpYmxlIHN0YXJ0aW5nIHBvaW50cy4KKysKKysgICBUaGUgY2FsbGVyIG11c3Qgc3VwcGx5IHRoZSBhZGRyZXNzIG9mIGEgKDEgPDwgQllURVdJRFRIKS1ieXRlIGRhdGEKKysgICBhcmVhIGFzIEJVRlAtPmZhc3RtYXAuCisrCisrICAgV2Ugc2V0IHRoZSBgZmFzdG1hcCcsIGBmYXN0bWFwX2FjY3VyYXRlJywgYW5kIGBjYW5fYmVfbnVsbCcgZmllbGRzIGluCisrICAgdGhlIHBhdHRlcm4gYnVmZmVyLgorKworKyAgIFJldHVybnMgMCBpZiB3ZSBzdWNjZWVkLCAtMiBpZiBhbiBpbnRlcm5hbCBlcnJvci4gICAqLworKworKyNpZmRlZiBXQ0hBUgorKy8qIGxvY2FsIGZ1bmN0aW9uIGZvciByZV9jb21waWxlX2Zhc3RtYXAuCisrICAgdHJ1bmNhdGUgd2NoYXJfdCBjaGFyYWN0ZXIgdG8gY2hhci4gICovCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgdHJ1bmNhdGVfd2NoYXIgKENIQVJfVCBjKTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhcgorK3RydW5jYXRlX3djaGFyIChDSEFSX1QgYykKKyt7CisrICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9DVVJfTUFYXTsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysgIGludCByZXR2YWw7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworKyMgaWZkZWYgX0xJQkMKKysgIHJldHZhbCA9IF9fd2NydG9tYiAoYnVmLCBjLCAmc3RhdGUpOworKyMgZWxzZQorKyAgcmV0dmFsID0gd2NydG9tYiAoYnVmLCBjLCAmc3RhdGUpOworKyMgZW5kaWYKKysgIHJldHVybiByZXR2YWwgPiAwID8gYnVmWzBdIDogKHVuc2lnbmVkIGNoYXIpIGM7CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworK3N0YXRpYyBpbnQKKytQUkVGSVgocmVfY29tcGlsZV9mYXN0bWFwKSAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIGludCBqLCBrOworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysgIFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpIGZhaWxfc3RhY2s7CisrI2VuZGlmCisrI2lmbmRlZiBSRUdFWF9NQUxMT0MKKysgIGNoYXIgKmRlc3RpbmF0aW9uOworKyNlbmRpZgorKworKyAgcmVnaXN0ZXIgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBXZSBuZWVkIHRvIGNhc3QgcGF0dGVybiB0byAod2NoYXJfdCopLCBiZWNhdXNlIHdlIGNhc3RlZCB0aGlzIGNvbXBpbGVkCisrICAgICBwYXR0ZXJuIHRvIChjaGFyKikgaW4gcmVnZXhfY29tcGlsZS4gICovCisrICBVQ0hBUl9UICpwYXR0ZXJuID0gKFVDSEFSX1QqKWJ1ZnAtPmJ1ZmZlcjsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQgPSAoVUNIQVJfVCopIChidWZwLT5idWZmZXIgKyBidWZwLT51c2VkKTsKKysjZWxzZSAvKiBCWVRFICovCisrICBVQ0hBUl9UICpwYXR0ZXJuID0gYnVmcC0+YnVmZmVyOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZCA9IHBhdHRlcm4gKyBidWZwLT51c2VkOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgVUNIQVJfVCAqcCA9IHBhdHRlcm47CisrCisrI2lmZGVmIFJFTF9BTExPQworKyAgLyogVGhpcyBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgZmFpbHVyZSBzdGFjaywgd2hlbgorKyAgICAgaXQgaXMgYWxsb2NhdGVkIHJlbG9jYXRhYmx5LiAgKi8KKysgIGZhaWxfc3RhY2tfZWx0X3QgKmZhaWx1cmVfc3RhY2tfcHRyOworKyNlbmRpZgorKworKyAgLyogQXNzdW1lIHRoYXQgZWFjaCBwYXRoIHRocm91Z2ggdGhlIHBhdHRlcm4gY2FuIGJlIG51bGwgdW50aWwKKysgICAgIHByb3ZlbiBvdGhlcndpc2UuICBXZSBzZXQgdGhpcyBmYWxzZSBhdCB0aGUgYm90dG9tIG9mIHN3aXRjaAorKyAgICAgc3RhdGVtZW50LCB0byB3aGljaCB3ZSBnZXQgb25seSBpZiBhIHBhcnRpY3VsYXIgcGF0aCBkb2Vzbid0CisrICAgICBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKysgIGJvb2xlYW4gcGF0aF9jYW5fYmVfbnVsbCA9IHRydWU7CisrCisrICAvKiBXZSBhcmVuJ3QgZG9pbmcgYSBgc3VjY2VlZF9uJyB0byBiZWdpbiB3aXRoLiAgKi8KKysgIGJvb2xlYW4gc3VjY2VlZF9uX3AgPSBmYWxzZTsKKysKKysgIGFzc2VydCAoZmFzdG1hcCAhPSBOVUxMICYmIHAgIT0gTlVMTCk7CisrCisrICBJTklUX0ZBSUxfU1RBQ0sgKCk7CisrICBiemVybyAoZmFzdG1hcCwgMSA8PCBCWVRFV0lEVEgpOyAgLyogQXNzdW1lIG5vdGhpbmcncyB2YWxpZC4gICovCisrICBidWZwLT5mYXN0bWFwX2FjY3VyYXRlID0gMTsJICAgIC8qIEl0IHdpbGwgYmUgd2hlbiB3ZSdyZSBkb25lLiAgKi8KKysgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMDsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgaWYgKHAgPT0gcGVuZCB8fCAqcCA9PSAoVUNIQVJfVCkgc3VjY2VlZCkKKysJeworKwkgIC8qIFdlIGhhdmUgcmVhY2hlZCB0aGUgKGVmZmVjdGl2ZSkgZW5kIG9mIHBhdHRlcm4uICAqLworKwkgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkKKysJICAgIHsKKysJICAgICAgYnVmcC0+Y2FuX2JlX251bGwgfD0gcGF0aF9jYW5fYmVfbnVsbDsKKysKKysJICAgICAgLyogUmVzZXQgZm9yIG5leHQgcGF0aC4gICovCisrCSAgICAgIHBhdGhfY2FuX2JlX251bGwgPSB0cnVlOworKworKwkgICAgICBwID0gZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdLnBvaW50ZXI7CisrCisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIGJyZWFrOworKwl9CisrCisrICAgICAgLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGFib3V0IHRvIGdvIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgKi8KKysgICAgICBhc3NlcnQgKHAgPCBwZW5kKTsKKysKKysgICAgICBzd2l0Y2ggKFNXSVRDSF9FTlVNX0NBU1QgKChyZV9vcGNvZGVfdCkgKnArKykpCisrCXsKKysKKysgICAgICAgIC8qIEkgZ3Vlc3MgdGhlIGlkZWEgaGVyZSBpcyB0byBzaW1wbHkgbm90IGJvdGhlciB3aXRoIGEgZmFzdG1hcAorKyAgICAgICAgICAgaWYgYSBiYWNrcmVmZXJlbmNlIGlzIHVzZWQsIHNpbmNlIGl0J3MgdG9vIGhhcmQgdG8gZmlndXJlIG91dAorKyAgICAgICAgICAgdGhlIGZhc3RtYXAgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwLiAgU2V0dGluZworKyAgICAgICAgICAgYGNhbl9iZV9udWxsJyBzdG9wcyBgcmVfc2VhcmNoXzInIGZyb20gdXNpbmcgdGhlIGZhc3RtYXAsIHNvCisrICAgICAgICAgICB0aGF0IGlzIGFsbCB3ZSBkby4gICovCisrCWNhc2UgZHVwbGljYXRlOgorKwkgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKysgICAgICAgICAgZ290byBkb25lOworKworKworKyAgICAgIC8qIEZvbGxvd2luZyBhcmUgdGhlIGNhc2VzIHdoaWNoIG1hdGNoIGEgY2hhcmFjdGVyLiAgVGhlc2UgZW5kCisrICAgICAgICAgd2l0aCBgYnJlYWsnLiAgKi8KKysKKysjaWZkZWYgV0NIQVIKKysJY2FzZSBleGFjdG46CisrICAgICAgICAgIGZhc3RtYXBbdHJ1bmNhdGVfd2NoYXIocFsxXSldID0gMTsKKysJICBicmVhazsKKysjZWxzZSAvKiBCWVRFICovCisrCWNhc2UgZXhhY3RuOgorKyAgICAgICAgICBmYXN0bWFwW3BbMV1dID0gMTsKKysJICBicmVhazsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJY2FzZSBleGFjdG5fYmluOgorKwkgIGZhc3RtYXBbcFsxXV0gPSAxOworKwkgIGJyZWFrOworKyNlbmRpZgorKworKyNpZmRlZiBXQ0hBUgorKyAgICAgICAgLyogSXQgaXMgaGFyZCB0byBkaXN0aW5ndWlzaCBmYXN0bWFwIGZyb20gKG11bHRpIGJ5dGUpIGNoYXJhY3RlcnMKKysgICAgICAgICAgIHdoaWNoIGRlcGVuZHMgb24gY3VycmVudCBsb2NhbGUuICAqLworKyAgICAgICAgY2FzZSBjaGFyc2V0OgorKwljYXNlIGNoYXJzZXRfbm90OgorKwljYXNlIHdvcmRjaGFyOgorKwljYXNlIG5vdHdvcmRjaGFyOgorKyAgICAgICAgICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisrICAgICAgICAgIGdvdG8gZG9uZTsKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgICBjYXNlIGNoYXJzZXQ6CisrICAgICAgICAgIGZvciAoaiA9ICpwKysgKiBCWVRFV0lEVEggLSAxOyBqID49IDA7IGotLSkKKysJICAgIGlmIChwW2ogLyBCWVRFV0lEVEhdICYgKDEgPDwgKGogJSBCWVRFV0lEVEgpKSkKKysgICAgICAgICAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKwljYXNlIGNoYXJzZXRfbm90OgorKwkgIC8qIENoYXJzIGJleW9uZCBlbmQgb2YgbWFwIG11c3QgYmUgYWxsb3dlZC4gICovCisrCSAgZm9yIChqID0gKnAgKiBCWVRFV0lEVEg7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrICAgICAgICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCisrCSAgZm9yIChqID0gKnArKyAqIEJZVEVXSURUSCAtIDE7IGogPj0gMDsgai0tKQorKwkgICAgaWYgKCEocFtqIC8gQllURVdJRFRIXSAmICgxIDw8IChqICUgQllURVdJRFRIKSkpKQorKyAgICAgICAgICAgICAgZmFzdG1hcFtqXSA9IDE7CisrICAgICAgICAgIGJyZWFrOworKworKworKwljYXNlIHdvcmRjaGFyOgorKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSA9PSBTd29yZCkKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2Ugbm90d29yZGNoYXI6CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopICE9IFN3b3JkKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgICAgICAgIGNhc2UgYW55Y2hhcjoKKysJICB7CisrCSAgICBpbnQgZmFzdG1hcF9uZXdsaW5lID0gZmFzdG1hcFsnXG4nXTsKKysKKysJICAgIC8qIGAuJyBtYXRjaGVzIGFueXRoaW5nIC4uLiAgKi8KKysJICAgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKworKwkgICAgLyogLi4uIGV4Y2VwdCBwZXJoYXBzIG5ld2xpbmUuICAqLworKwkgICAgaWYgKCEoYnVmcC0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorKwkgICAgICBmYXN0bWFwWydcbiddID0gZmFzdG1hcF9uZXdsaW5lOworKworKwkgICAgLyogUmV0dXJuIGlmIHdlIGhhdmUgYWxyZWFkeSBzZXQgYGNhbl9iZV9udWxsJzsgaWYgd2UgaGF2ZSwKKysJICAgICAgIHRoZW4gdGhlIGZhc3RtYXAgaXMgaXJyZWxldmFudC4gIFNvbWV0aGluZydzIHdyb25nIGhlcmUuICAqLworKwkgICAgZWxzZSBpZiAoYnVmcC0+Y2FuX2JlX251bGwpCisrCSAgICAgIGdvdG8gZG9uZTsKKysKKysJICAgIC8qIE90aGVyd2lzZSwgaGF2ZSB0byBjaGVjayBhbHRlcm5hdGl2ZSBwYXRocy4gICovCisrCSAgICBicmVhazsKKysJICB9CisrCisrI2lmZGVmIGVtYWNzCisrICAgICAgICBjYXNlIHN5bnRheHNwZWM6CisrCSAgayA9ICpwKys7CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopID09IChlbnVtIHN5bnRheGNvZGUpIGspCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKwljYXNlIG5vdHN5bnRheHNwZWM6CisrCSAgayA9ICpwKys7CisrCSAgZm9yIChqID0gMDsgaiA8ICgxIDw8IEJZVEVXSURUSCk7IGorKykKKysJICAgIGlmIChTWU5UQVggKGopICE9IChlbnVtIHN5bnRheGNvZGUpIGspCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKyAgICAgIC8qIEFsbCBjYXNlcyBhZnRlciB0aGlzIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICBUaGVzZSBlbmQgd2l0aAorKyAgICAgICAgIGBjb250aW51ZScuICAqLworKworKworKwljYXNlIGJlZm9yZV9kb3Q6CisrCWNhc2UgYXRfZG90OgorKwljYXNlIGFmdGVyX2RvdDoKKysgICAgICAgICAgY29udGludWU7CisrI2VuZGlmIC8qIGVtYWNzICovCisrCisrCisrICAgICAgICBjYXNlIG5vX29wOgorKyAgICAgICAgY2FzZSBiZWdsaW5lOgorKyAgICAgICAgY2FzZSBlbmRsaW5lOgorKwljYXNlIGJlZ2J1ZjoKKysJY2FzZSBlbmRidWY6CisrCWNhc2Ugd29yZGJvdW5kOgorKwljYXNlIG5vdHdvcmRib3VuZDoKKysJY2FzZSB3b3JkYmVnOgorKwljYXNlIHdvcmRlbmQ6CisrICAgICAgICBjYXNlIHB1c2hfZHVtbXlfZmFpbHVyZToKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2UganVtcF9uOgorKyAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKwljYXNlIG1heWJlX3BvcF9qdW1wOgorKwljYXNlIGp1bXA6CisrICAgICAgICBjYXNlIGp1bXBfcGFzdF9hbHQ6CisrCWNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaiwgcCk7CisrCSAgcCArPSBqOworKwkgIGlmIChqID4gMCkKKysJICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICAvKiBKdW1wIGJhY2t3YXJkIGltcGxpZXMgd2UganVzdCB3ZW50IHRocm91Z2ggdGhlIGJvZHkgb2YgYQorKyAgICAgICAgICAgICBsb29wIGFuZCBtYXRjaGVkIG5vdGhpbmcuICBPcGNvZGUganVtcGVkIHRvIHNob3VsZCBiZQorKyAgICAgICAgICAgICBgb25fZmFpbHVyZV9qdW1wJyBvciBgc3VjY2VlZF9uJy4gIEp1c3QgdHJlYXQgaXQgbGlrZSBhbgorKyAgICAgICAgICAgICBvcmRpbmFyeSBqdW1wLiAgRm9yIGEgKiBsb29wLCBpdCBoYXMgcHVzaGVkIGl0cyBmYWlsdXJlCisrICAgICAgICAgICAgIHBvaW50IGFscmVhZHk7IGlmIHNvLCBkaXNjYXJkIHRoYXQgYXMgcmVkdW5kYW50LiAgKi8KKysgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgKnAgIT0gb25fZmFpbHVyZV9qdW1wCisrCSAgICAgICYmIChyZV9vcGNvZGVfdCkgKnAgIT0gc3VjY2VlZF9uKQorKwkgICAgY29udGludWU7CisrCisrICAgICAgICAgIHArKzsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGosIHApOworKyAgICAgICAgICBwICs9IGo7CisrCisrICAgICAgICAgIC8qIElmIHdoYXQncyBvbiB0aGUgc3RhY2sgaXMgd2hlcmUgd2UgYXJlIG5vdywgcG9wIGl0LiAgKi8KKysgICAgICAgICAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpCisrCSAgICAgICYmIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCAtIDFdLnBvaW50ZXIgPT0gcCkKKysgICAgICAgICAgICBmYWlsX3N0YWNrLmF2YWlsLS07CisrCisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcDoKKysJaGFuZGxlX29uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGosIHApOworKworKyAgICAgICAgICAvKiBGb3Igc29tZSBwYXR0ZXJucywgZS5nLiwgYChhPyk/JywgYHAraicgaGVyZSBwb2ludHMgdG8gdGhlCisrICAgICAgICAgICAgIGVuZCBvZiB0aGUgcGF0dGVybi4gIFdlIGRvbid0IHdhbnQgdG8gcHVzaCBzdWNoIGEgcG9pbnQsCisrICAgICAgICAgICAgIHNpbmNlIHdoZW4gd2UgcmVzdG9yZSBpdCBhYm92ZSwgZW50ZXJpbmcgdGhlIHN3aXRjaCB3aWxsCisrICAgICAgICAgICAgIGluY3JlbWVudCBgcCcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgV2UgZG9uJ3QgbmVlZAorKyAgICAgICAgICAgICB0byBwdXNoIHN1Y2ggYSBwb2ludCBzaW5jZSB3ZSBvYnZpb3VzbHkgd29uJ3QgZmluZCBhbnkgbW9yZQorKyAgICAgICAgICAgICBmYXN0bWFwIGVudHJpZXMgYmV5b25kIGBwZW5kJy4gIFN1Y2ggYSBwYXR0ZXJuIGNhbiBtYXRjaAorKyAgICAgICAgICAgICB0aGUgbnVsbCBzdHJpbmcsIHRob3VnaC4gICovCisrICAgICAgICAgIGlmIChwICsgaiA8IHBlbmQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKCFQVVNIX1BBVFRFUk5fT1AgKHAgKyBqLCBmYWlsX3N0YWNrKSkKKysJCXsKKysJCSAgUkVTRVRfRkFJTF9TVEFDSyAoKTsKKysJCSAgcmV0dXJuIC0yOworKwkJfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKysKKysgICAgICAgICAgaWYgKHN1Y2NlZWRfbl9wKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChrLCBwKTsJLyogU2tpcCB0aGUgbi4gICovCisrICAgICAgICAgICAgICBzdWNjZWVkX25fcCA9IGZhbHNlOworKwkgICAgfQorKworKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBzdWNjZWVkX246CisrICAgICAgICAgIC8qIEdldCB0byB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHN1Y2NlZWQuICAqLworKyAgICAgICAgICBwICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCisrICAgICAgICAgIC8qIEluY3JlbWVudCBwIHBhc3QgdGhlIG4gZm9yIHdoZW4gayAhPSAwLiAgKi8KKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGssIHApOworKyAgICAgICAgICBpZiAoayA9PSAwKQorKwkgICAgeworKyAgICAgICAgICAgICAgcCAtPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgIAkgICAgICBzdWNjZWVkX25fcCA9IHRydWU7ICAvKiBTcGFnaGV0dGkgY29kZSBhbGVydC4gICovCisrICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9vbl9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBzZXRfbnVtYmVyX2F0OgorKyAgICAgICAgICBwICs9IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysJY2FzZSBzdGFydF9tZW1vcnk6CisrICAgICAgICBjYXNlIHN0b3BfbWVtb3J5OgorKwkgIHAgKz0gMjsKKysJICBjb250aW51ZTsKKysKKysKKysJZGVmYXVsdDoKKysgICAgICAgICAgYWJvcnQgKCk7IC8qIFdlIGhhdmUgbGlzdGVkIGFsbCB0aGUgY2FzZXMuICAqLworKyAgICAgICAgfSAvKiBzd2l0Y2ggKnArKyAqLworKworKyAgICAgIC8qIEdldHRpbmcgaGVyZSBtZWFucyB3ZSBoYXZlIGZvdW5kIHRoZSBwb3NzaWJsZSBzdGFydGluZworKyAgICAgICAgIGNoYXJhY3RlcnMgZm9yIG9uZSBwYXRoIG9mIHRoZSBwYXR0ZXJuIC0tIGFuZCB0aGF0IHRoZSBlbXB0eQorKyAgICAgICAgIHN0cmluZyBkb2VzIG5vdCBtYXRjaC4gIFdlIG5lZWQgbm90IGZvbGxvdyB0aGlzIHBhdGggZnVydGhlci4KKysgICAgICAgICBJbnN0ZWFkLCBsb29rIGF0IHRoZSBuZXh0IGFsdGVybmF0aXZlIChyZW1lbWJlcmVkIG9uIHRoZQorKyAgICAgICAgIHN0YWNrKSwgb3IgcXVpdCBpZiBubyBtb3JlLiAgVGhlIHRlc3QgYXQgdGhlIHRvcCBvZiB0aGUgbG9vcAorKyAgICAgICAgIGRvZXMgdGhlc2UgdGhpbmdzLiAgKi8KKysgICAgICBwYXRoX2Nhbl9iZV9udWxsID0gZmFsc2U7CisrICAgICAgcCA9IHBlbmQ7CisrICAgIH0gLyogd2hpbGUgcCAqLworKworKyAgLyogU2V0IGBjYW5fYmVfbnVsbCcgZm9yIHRoZSBsYXN0IHBhdGggKGFsc28gdGhlIGZpcnN0IHBhdGgsIGlmIHRoZQorKyAgICAgcGF0dGVybiBpcyBlbXB0eSkuICAqLworKyAgYnVmcC0+Y2FuX2JlX251bGwgfD0gcGF0aF9jYW5fYmVfbnVsbDsKKysKKysgZG9uZToKKysgIFJFU0VUX0ZBSUxfU1RBQ0sgKCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKytpbnQKKytyZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0dXJuIHdjc19yZV9jb21waWxlX2Zhc3RtYXAoYnVmcCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXR1cm4gYnl0ZV9yZV9jb21waWxlX2Zhc3RtYXAoYnVmcCk7CisrfSAvKiByZV9jb21waWxlX2Zhc3RtYXAgKi8KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfZmFzdG1hcCwgcmVfY29tcGlsZV9mYXN0bWFwKQorKyNlbmRpZgorKwwKKysKKysvKiBTZXQgUkVHUyB0byBob2xkIE5VTV9SRUdTIHJlZ2lzdGVycywgc3RvcmluZyB0aGVtIGluIFNUQVJUUyBhbmQKKysgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIFBBVFRFUk5fQlVGRkVSIGFuZCBSRUdTIHdpbGwgdXNlCisrICAgdGhpcyBtZW1vcnkgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUworKyAgIG11c3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoZSBtYWxsb2MgbGlicmFyeSByb3V0aW5lLCBhbmQgbXVzdCBlYWNoCisrICAgYmUgYXQgbGVhc3QgTlVNX1JFR1MgKiBzaXplb2YgKHJlZ29mZl90KSBieXRlcyBsb25nLgorKworKyAgIElmIE5VTV9SRUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVpciBvd24KKysgICByZWdpc3RlciBkYXRhLgorKworKyAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJjaCBvciBtYXRjaCB1c2luZworKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisrICAgZnJlZWluZyB0aGUgb2xkIGRhdGEuICAqLworKworK3ZvaWQKKytyZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgdW5zaWduZWQgbnVtX3JlZ3MsCisrICAgICAgICAgICAgICAgICAgcmVnb2ZmX3QgKnN0YXJ0cywgcmVnb2ZmX3QgKmVuZHMpCisreworKyAgaWYgKG51bV9yZWdzKQorKyAgICB7CisrICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1JFQUxMT0NBVEU7CisrICAgICAgcmVncy0+bnVtX3JlZ3MgPSBudW1fcmVnczsKKysgICAgICByZWdzLT5zdGFydCA9IHN0YXJ0czsKKysgICAgICByZWdzLT5lbmQgPSBlbmRzOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisrICAgICAgcmVncy0+bnVtX3JlZ3MgPSAwOworKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVncy0+ZW5kID0gKHJlZ29mZl90ICopIDA7CisrICAgIH0KKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZXRfcmVnaXN0ZXJzLCByZV9zZXRfcmVnaXN0ZXJzKQorKyNlbmRpZgorKwwKKysvKiBTZWFyY2hpbmcgcm91dGluZXMuICAqLworKworKy8qIExpa2UgcmVfc2VhcmNoXzIsIGJlbG93LCBidXQgb25seSBvbmUgc3RyaW5nIGlzIHNwZWNpZmllZCwgYW5kCisrICAgZG9lc24ndCBsZXQgeW91IHNheSB3aGVyZSB0byBzdG9wIG1hdGNoaW5nLiAgKi8KKysKKytpbnQKKytyZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgc2l6ZSwKKysgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQorK3sKKysgIHJldHVybiByZV9zZWFyY2hfMiAoYnVmcCwgTlVMTCwgMCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsCisrCQkgICAgICByZWdzLCBzaXplKTsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZWFyY2gsIHJlX3NlYXJjaCkKKysjZW5kaWYKKysKKysKKysvKiBVc2luZyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQLT5idWZmZXIsIGZpcnN0IHRyaWVzIHRvIG1hdGNoIHRoZQorKyAgIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyLCBzdGFydGluZyBmaXJzdCBhdCBpbmRleAorKyAgIFNUQVJUUE9TLCB0aGVuIGF0IFNUQVJUUE9TICsgMSwgYW5kIHNvIG9uLgorKworKyAgIFNUUklORzEgYW5kIFNUUklORzIgaGF2ZSBsZW5ndGggU0laRTEgYW5kIFNJWkUyLCByZXNwZWN0aXZlbHkuCisrCisrICAgUkFOR0UgaXMgaG93IGZhciB0byBzY2FuIHdoaWxlIHRyeWluZyB0byBtYXRjaC4gIFJBTkdFID0gMCBtZWFucyB0cnkKKysgICBvbmx5IGF0IFNUQVJUUE9TOyBpbiBnZW5lcmFsLCB0aGUgbGFzdCBzdGFydCB0cmllZCBpcyBTVEFSVFBPUyArCisrICAgUkFOR0UuCisrCisrICAgSW4gUkVHUywgcmV0dXJuIHRoZSBpbmRpY2VzIG9mIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMQorKyAgIGFuZCBTVFJJTkcyIHRoYXQgbWF0Y2hlZCB0aGUgZW50aXJlIEJVRlAtPmJ1ZmZlciBhbmQgaXRzIGNvbnRhaW5lZAorKyAgIHN1YmV4cHJlc3Npb25zLgorKworKyAgIERvIG5vdCBjb25zaWRlciBtYXRjaGluZyBvbmUgcGFzdCB0aGUgaW5kZXggU1RPUCBpbiB0aGUgdmlydHVhbAorKyAgIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMi4KKysKKysgICBXZSByZXR1cm4gZWl0aGVyIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5ncyBhdCB3aGljaCB0aGUgbWF0Y2ggd2FzCisrICAgZm91bmQsIC0xIGlmIG5vIG1hdGNoLCBvciAtMiBpZiBlcnJvciAoc3VjaCBhcyBmYWlsdXJlCisrICAgc3RhY2sgb3ZlcmZsb3cpLiAgKi8KKysKKytpbnQKKytyZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorK3sKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXR1cm4gd2NzX3JlX3NlYXJjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHN0YXJ0cG9zLAorKwkJCSAgICByYW5nZSwgcmVncywgc3RvcCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXR1cm4gYnl0ZV9yZV9zZWFyY2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBzdGFydHBvcywKKysJCQkgICAgIHJhbmdlLCByZWdzLCBzdG9wKTsKKyt9IC8qIHJlX3NlYXJjaF8yICovCisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9zZWFyY2hfMiwgcmVfc2VhcmNoXzIpCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyBkZWZpbmUgRlJFRV9WQVIodmFyKSBpZiAodmFyKSBSRUdFWF9GUkVFICh2YXIpOyB2YXIgPSBOVUxMCisrI2Vsc2UKKysjIGRlZmluZSBGUkVFX1ZBUih2YXIpIGlmICh2YXIpIGZyZWUgKHZhcik7IHZhciA9IE5VTEwKKysjZW5kaWYKKysKKysjaWZkZWYgV0NIQVIKKysjIGRlZmluZSBNQVhfQUxMT0NBX1NJWkUJMjAwMAorKworKyMgZGVmaW5lIEZSRUVfV0NTX0JVRkZFUlMoKSBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJZnJlZSAod2NzX3N0cmluZzEpOwkJCQkJCSAgICAgIFwKKysJZnJlZSAobWJzX29mZnNldDEpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgICBlbHNlCQkJCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKHdjc19zdHJpbmcxKTsJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICAgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkgCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJZnJlZSAod2NzX3N0cmluZzIpOwkJCQkJCSAgICAgIFwKKysJZnJlZSAobWJzX29mZnNldDIpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgICBlbHNlCQkJCQkJCQkgICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgIFwKKysJRlJFRV9WQVIgKHdjc19zdHJpbmcyKTsJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CQkJCQkJICAgICAgXAorKyAgICAgIH0JCQkJCQkJCQkgICAgICBcCisrICB9IHdoaWxlICgwKQorKworKyNlbmRpZgorKworKworK3N0YXRpYyBpbnQKKytQUkVGSVgocmVfc2VhcmNoXzIpIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsCisrICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUxLCBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisreworKyAgaW50IHZhbDsKKysgIHJlZ2lzdGVyIGNoYXIgKmZhc3RtYXAgPSBidWZwLT5mYXN0bWFwOworKyAgcmVnaXN0ZXIgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOworKyAgaW50IHRvdGFsX3NpemUgPSBzaXplMSArIHNpemUyOworKyAgaW50IGVuZHBvcyA9IHN0YXJ0cG9zICsgcmFuZ2U7CisrI2lmZGVmIFdDSEFSCisrICAvKiBXZSBuZWVkIHdjaGFyX3QqIGJ1ZmZlcnMgY29ycmVzcG9uZCB0byBjc3RyaW5nMSwgY3N0cmluZzIuICAqLworKyAgd2NoYXJfdCAqd2NzX3N0cmluZzEgPSBOVUxMLCAqd2NzX3N0cmluZzIgPSBOVUxMOworKyAgLyogV2UgbmVlZCB0aGUgc2l6ZSBvZiB3Y2hhcl90IGJ1ZmZlcnMgY29ycmVzcG9uZCB0byBjc2l6ZTEsIGNzaXplMi4gICovCisrICBpbnQgd2NzX3NpemUxID0gMCwgd2NzX3NpemUyID0gMDsKKysgIC8qIG9mZnNldCBidWZmZXIgZm9yIG9wdGltaXphdG9pbi4gU2VlIGNvbnZlcnRfbWJzX3RvX3djLiAgKi8KKysgIGludCAqbWJzX29mZnNldDEgPSBOVUxMLCAqbWJzX29mZnNldDIgPSBOVUxMOworKyAgLyogVGhleSBob2xkIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIG9yIG5vdC4gICovCisrICBjaGFyICppc19iaW5hcnkgPSBOVUxMOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBTVEFSVFBPUy4gICovCisrICBpZiAoc3RhcnRwb3MgPCAwIHx8IHN0YXJ0cG9zID4gdG90YWxfc2l6ZSkKKysgICAgcmV0dXJuIC0xOworKworKyAgLyogRml4IHVwIFJBTkdFIGlmIGl0IG1pZ2h0IGV2ZW50dWFsbHkgdGFrZSB1cyBvdXRzaWRlCisrICAgICB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIuCisrICAgICBNYWtlIHN1cmUgd2Ugd29uJ3QgbW92ZSBTVEFSVFBPUyBiZWxvdyAwIG9yIGFib3ZlIFRPVEFMX1NJWkUuICAqLworKyAgaWYgKGVuZHBvcyA8IDApCisrICAgIHJhbmdlID0gMCAtIHN0YXJ0cG9zOworKyAgZWxzZSBpZiAoZW5kcG9zID4gdG90YWxfc2l6ZSkKKysgICAgcmFuZ2UgPSB0b3RhbF9zaXplIC0gc3RhcnRwb3M7CisrCisrICAvKiBJZiB0aGUgc2VhcmNoIGlzbid0IHRvIGJlIGEgYmFja3dhcmRzIG9uZSwgZG9uJ3Qgd2FzdGUgdGltZSBpbiBhCisrICAgICBzZWFyY2ggZm9yIGEgcGF0dGVybiB0aGF0IG11c3QgYmUgYW5jaG9yZWQuICAqLworKyAgaWYgKGJ1ZnAtPnVzZWQgPiAwICYmIHJhbmdlID4gMAorKyAgICAgICYmICgocmVfb3Bjb2RlX3QpIGJ1ZnAtPmJ1ZmZlclswXSA9PSBiZWdidWYKKysJICAvKiBgYmVnbGluZScgaXMgbGlrZSBgYmVnYnVmJyBpZiBpdCBjYW5ub3QgbWF0Y2ggYXQgbmV3bGluZXMuICAqLworKwkgIHx8ICgocmVfb3Bjb2RlX3QpIGJ1ZnAtPmJ1ZmZlclswXSA9PSBiZWdsaW5lCisrCSAgICAgICYmICFidWZwLT5uZXdsaW5lX2FuY2hvcikpKQorKyAgICB7CisrICAgICAgaWYgKHN0YXJ0cG9zID4gMCkKKysJcmV0dXJuIC0xOworKyAgICAgIGVsc2UKKysJcmFuZ2UgPSAxOworKyAgICB9CisrCisrI2lmZGVmIGVtYWNzCisrICAvKiBJbiBhIGZvcndhcmQgc2VhcmNoIGZvciBzb21ldGhpbmcgdGhhdCBzdGFydHMgd2l0aCBcPS4KKysgICAgIGRvbid0IGtlZXAgc2VhcmNoaW5nIHBhc3QgcG9pbnQuICAqLworKyAgaWYgKGJ1ZnAtPnVzZWQgPiAwICYmIChyZV9vcGNvZGVfdCkgYnVmcC0+YnVmZmVyWzBdID09IGF0X2RvdCAmJiByYW5nZSA+IDApCisrICAgIHsKKysgICAgICByYW5nZSA9IFBUIC0gc3RhcnRwb3M7CisrICAgICAgaWYgKHJhbmdlIDw9IDApCisrCXJldHVybiAtMTsKKysgICAgfQorKyNlbmRpZiAvKiBlbWFjcyAqLworKworKyAgLyogVXBkYXRlIHRoZSBmYXN0bWFwIG5vdyBpZiBub3QgY29ycmVjdCBhbHJlYWR5LiAgKi8KKysgIGlmIChmYXN0bWFwICYmICFidWZwLT5mYXN0bWFwX2FjY3VyYXRlKQorKyAgICBpZiAocmVfY29tcGlsZV9mYXN0bWFwIChidWZwKSA9PSAtMikKKysgICAgICByZXR1cm4gLTI7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBBbGxvY2F0ZSB3Y2hhcl90IGFycmF5IGZvciB3Y3Nfc3RyaW5nMSBhbmQgd2NzX3N0cmluZzIgYW5kCisrICAgICBmaWxsIHRoZW0gd2l0aCBjb252ZXJ0ZWQgc3RyaW5nLiAgKi8KKysgIGlmIChzaXplMSAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQorKwl7CisrCSAgd2NzX3N0cmluZzEgPSBUQUxMT0MgKHNpemUxICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MSA9IFRBTExPQyAoc2l6ZTEgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFRBTExPQyAoc2l6ZTEgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHdjc19zdHJpbmcxID0gUkVHRVhfVEFMTE9DIChzaXplMSArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDEgPSBSRUdFWF9UQUxMT0MgKHNpemUxICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKHNpemUxICsgMSwgY2hhcik7CisrCX0KKysgICAgICBpZiAoIXdjc19zdHJpbmcxIHx8ICFtYnNfb2Zmc2V0MSB8fCAhaXNfYmluYXJ5KQorKwl7CisrCSAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQorKwkgICAgeworKwkgICAgICBmcmVlICh3Y3Nfc3RyaW5nMSk7CisrCSAgICAgIGZyZWUgKG1ic19vZmZzZXQxKTsKKysJICAgICAgZnJlZSAoaXNfYmluYXJ5KTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIEZSRUVfVkFSICh3Y3Nfc3RyaW5nMSk7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgICAgfQorKwkgIHJldHVybiAtMjsKKysJfQorKyAgICAgIHdjc19zaXplMSA9IGNvbnZlcnRfbWJzX3RvX3djcyh3Y3Nfc3RyaW5nMSwgc3RyaW5nMSwgc2l6ZTEsCisrCQkJCSAgICAgbWJzX29mZnNldDEsIGlzX2JpbmFyeSk7CisrICAgICAgd2NzX3N0cmluZzFbd2NzX3NpemUxXSA9IEwnXDAnOyAvKiBmb3IgYSBzZW50aW5lbCAgKi8KKysgICAgICBpZiAoc2l6ZTEgPiBNQVhfQUxMT0NBX1NJWkUpCisrCWZyZWUgKGlzX2JpbmFyeSk7CisrICAgICAgZWxzZQorKwlGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysgICAgfQorKyAgaWYgKHNpemUyICE9IDApCisrICAgIHsKKysgICAgICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpCisrCXsKKysJICB3Y3Nfc3RyaW5nMiA9IFRBTExPQyAoc2l6ZTIgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQyID0gVEFMTE9DIChzaXplMiArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gVEFMTE9DIChzaXplMiArIDEsIGNoYXIpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgd2NzX3N0cmluZzIgPSBSRUdFWF9UQUxMT0MgKHNpemUyICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MiA9IFJFR0VYX1RBTExPQyAoc2l6ZTIgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFJFR0VYX1RBTExPQyAoc2l6ZTIgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGlmICghd2NzX3N0cmluZzIgfHwgIW1ic19vZmZzZXQyIHx8ICFpc19iaW5hcnkpCisrCXsKKysJICBGUkVFX1dDU19CVUZGRVJTICgpOworKwkgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkKKysJICAgIGZyZWUgKGlzX2JpbmFyeSk7CisrCSAgZWxzZQorKwkgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgcmV0dXJuIC0yOworKwl9CisrICAgICAgd2NzX3NpemUyID0gY29udmVydF9tYnNfdG9fd2NzKHdjc19zdHJpbmcyLCBzdHJpbmcyLCBzaXplMiwKKysJCQkJICAgICBtYnNfb2Zmc2V0MiwgaXNfYmluYXJ5KTsKKysgICAgICB3Y3Nfc3RyaW5nMlt3Y3Nfc2l6ZTJdID0gTCdcMCc7IC8qIGZvciBhIHNlbnRpbmVsICAqLworKyAgICAgIGlmIChzaXplMiA+IE1BWF9BTExPQ0FfU0laRSkKKysJZnJlZSAoaXNfYmluYXJ5KTsKKysgICAgICBlbHNlCisrCUZSRUVfVkFSIChpc19iaW5hcnkpOworKyAgICB9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrCisrICAvKiBMb29wIHRocm91Z2ggdGhlIHN0cmluZywgbG9va2luZyBmb3IgYSBwbGFjZSB0byBzdGFydCBtYXRjaGluZy4gICovCisrICBmb3IgKDs7KQorKyAgICB7CisrICAgICAgLyogSWYgYSBmYXN0bWFwIGlzIHN1cHBsaWVkLCBza2lwIHF1aWNrbHkgb3ZlciBjaGFyYWN0ZXJzIHRoYXQKKysgICAgICAgICBjYW5ub3QgYmUgdGhlIHN0YXJ0IG9mIGEgbWF0Y2guICBJZiB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggdGhlCisrICAgICAgICAgbnVsbCBzdHJpbmcsIGhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgdG8gc2tpcCBjaGFyYWN0ZXJzOyB3ZSB3YW50CisrICAgICAgICAgdGhlIGZpcnN0IG51bGwgc3RyaW5nLiAgKi8KKysgICAgICBpZiAoZmFzdG1hcCAmJiBzdGFydHBvcyA8IHRvdGFsX3NpemUgJiYgIWJ1ZnAtPmNhbl9iZV9udWxsKQorKwl7CisrCSAgaWYgKHJhbmdlID4gMCkJLyogU2VhcmNoaW5nIGZvcndhcmRzLiAgKi8KKysJICAgIHsKKysJICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqZDsKKysJICAgICAgcmVnaXN0ZXIgaW50IGxpbSA9IDA7CisrCSAgICAgIGludCBpcmFuZ2UgPSByYW5nZTsKKysKKysgICAgICAgICAgICAgIGlmIChzdGFydHBvcyA8IHNpemUxICYmIHN0YXJ0cG9zICsgcmFuZ2UgPj0gc2l6ZTEpCisrICAgICAgICAgICAgICAgIGxpbSA9IHJhbmdlIC0gKHNpemUxIC0gc3RhcnRwb3MpOworKworKwkgICAgICBkID0gKHN0YXJ0cG9zID49IHNpemUxID8gc3RyaW5nMiAtIHNpemUxIDogc3RyaW5nMSkgKyBzdGFydHBvczsKKysKKysgICAgICAgICAgICAgIC8qIFdyaXR0ZW4gb3V0IGFzIGFuIGlmLWVsc2UgdG8gYXZvaWQgdGVzdGluZyBgdHJhbnNsYXRlJworKyAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBsb29wLiAgKi8KKysJICAgICAgaWYgKHRyYW5zbGF0ZSkKKysgICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlID4gbGltCisrICAgICAgICAgICAgICAgICAgICAgICAmJiAhZmFzdG1hcFsodW5zaWduZWQgY2hhcikKKysJCQkJICAgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAqZCsrXV0pCisrICAgICAgICAgICAgICAgICAgcmFuZ2UtLTsKKysJICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2UgPiBsaW0gJiYgIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpICpkKytdKQorKyAgICAgICAgICAgICAgICAgIHJhbmdlLS07CisrCisrCSAgICAgIHN0YXJ0cG9zICs9IGlyYW5nZSAtIHJhbmdlOworKwkgICAgfQorKwkgIGVsc2UJCQkJLyogU2VhcmNoaW5nIGJhY2t3YXJkcy4gICovCisrCSAgICB7CisrCSAgICAgIHJlZ2lzdGVyIENIQVJfVCBjID0gKHNpemUxID09IDAgfHwgc3RhcnRwb3MgPj0gc2l6ZTEKKysJCQkJICAgICAgPyBzdHJpbmcyW3N0YXJ0cG9zIC0gc2l6ZTFdCisrCQkJCSAgICAgIDogc3RyaW5nMVtzdGFydHBvc10pOworKworKwkgICAgICBpZiAoIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpIFRSQU5TTEFURSAoYyldKQorKwkJZ290byBhZHZhbmNlOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogSWYgY2FuJ3QgbWF0Y2ggdGhlIG51bGwgc3RyaW5nLCBhbmQgdGhhdCdzIGFsbCB3ZSBoYXZlIGxlZnQsIGZhaWwuICAqLworKyAgICAgIGlmIChyYW5nZSA+PSAwICYmIHN0YXJ0cG9zID09IHRvdGFsX3NpemUgJiYgZmFzdG1hcAorKyAgICAgICAgICAmJiAhYnVmcC0+Y2FuX2JlX251bGwpCisrICAgICAgIHsKKysjaWZkZWYgV0NIQVIKKysgICAgICAgICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKyAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgfQorKworKyNpZmRlZiBXQ0hBUgorKyAgICAgIHZhbCA9IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwKKysJCQkJICAgICBzaXplMiwgc3RhcnRwb3MsIHJlZ3MsIHN0b3AsCisrCQkJCSAgICAgd2NzX3N0cmluZzEsIHdjc19zaXplMSwKKysJCQkJICAgICB3Y3Nfc3RyaW5nMiwgd2NzX3NpemUyLAorKwkJCQkgICAgIG1ic19vZmZzZXQxLCBtYnNfb2Zmc2V0Mik7CisrI2Vsc2UgLyogQllURSAqLworKyAgICAgIHZhbCA9IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsCisrCQkJCSAgICAgIHNpemUyLCBzdGFydHBvcywgcmVncywgc3RvcCk7CisrI2VuZGlmIC8qIEJZVEUgKi8KKysKKysjaWZuZGVmIFJFR0VYX01BTExPQworKyMgaWZkZWYgQ19BTExPQ0EKKysgICAgICBhbGxvY2EgKDApOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBpZiAodmFsID49IDApCisrCXsKKysjaWZkZWYgV0NIQVIKKysJICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKwkgIHJldHVybiBzdGFydHBvczsKKysJfQorKworKyAgICAgIGlmICh2YWwgPT0gLTIpCisrCXsKKysjaWZkZWYgV0NIQVIKKysJICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKwkgIHJldHVybiAtMjsKKysJfQorKworKyAgICBhZHZhbmNlOgorKyAgICAgIGlmICghcmFuZ2UpCisrICAgICAgICBicmVhazsKKysgICAgICBlbHNlIGlmIChyYW5nZSA+IDApCisrICAgICAgICB7CisrICAgICAgICAgIHJhbmdlLS07CisrICAgICAgICAgIHN0YXJ0cG9zKys7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICByYW5nZSsrOworKyAgICAgICAgICBzdGFydHBvcy0tOworKyAgICAgICAgfQorKyAgICB9CisrI2lmZGVmIFdDSEFSCisrICBGUkVFX1dDU19CVUZGRVJTICgpOworKyNlbmRpZgorKyAgcmV0dXJuIC0xOworK30KKysKKysjaWZkZWYgV0NIQVIKKysvKiBUaGlzIGNvbnZlcnRzIFBUUiwgYSBwb2ludGVyIGludG8gb25lIG9mIHRoZSBzZWFyY2ggd2NoYXJfdCBzdHJpbmdzCisrICAgYHN0cmluZzEnIGFuZCBgc3RyaW5nMicgaW50byBhbiBtdWx0aWJ5dGUgc3RyaW5nIG9mZnNldCBmcm9tIHRoZQorKyAgIGJlZ2lubmluZyBvZiB0aGF0IHN0cmluZy4gV2UgdXNlIG1ic19vZmZzZXQgdG8gb3B0aW1pemUuCisrICAgU2VlIGNvbnZlcnRfbWJzX3RvX3djcy4gICovCisrIyBkZWZpbmUgUE9JTlRFUl9UT19PRkZTRVQocHRyKQkJCQkJCVwKKysgIChGSVJTVF9TVFJJTkdfUCAocHRyKQkJCQkJCQlcCisrICAgPyAoKHJlZ29mZl90KShtYnNfb2Zmc2V0MSAhPSBOVUxMPyBtYnNfb2Zmc2V0MVsocHRyKS1zdHJpbmcxXSA6IDApKQlcCisrICAgOiAoKHJlZ29mZl90KSgobWJzX29mZnNldDIgIT0gTlVMTD8gbWJzX29mZnNldDJbKHB0ciktc3RyaW5nMl0gOiAwKQlcCisrCQkgKyBjc2l6ZTEpKSkKKysjZWxzZSAvKiBCWVRFICovCisrLyogVGhpcyBjb252ZXJ0cyBQVFIsIGEgcG9pbnRlciBpbnRvIG9uZSBvZiB0aGUgc2VhcmNoIHN0cmluZ3MgYHN0cmluZzEnCisrICAgYW5kIGBzdHJpbmcyJyBpbnRvIGFuIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBzdHJpbmcuICAqLworKyMgZGVmaW5lIFBPSU5URVJfVE9fT0ZGU0VUKHB0cikJCQlcCisrICAoRklSU1RfU1RSSU5HX1AgKHB0cikJCQkJXAorKyAgID8gKChyZWdvZmZfdCkgKChwdHIpIC0gc3RyaW5nMSkpCQlcCisrICAgOiAoKHJlZ29mZl90KSAoKHB0cikgLSBzdHJpbmcyICsgc2l6ZTEpKSkKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBNYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCB0aGUgc3BsaXQgc3RyaW5ncyBpbiByZV9tYXRjaF8yLiAgKi8KKysKKysjZGVmaW5lIE1BVENISU5HX0lOX0ZJUlNUX1NUUklORyAgKGRlbmQgPT0gZW5kX21hdGNoXzEpCisrCisrLyogQ2FsbCBiZWZvcmUgZmV0Y2hpbmcgYSBjaGFyYWN0ZXIgd2l0aCAqZC4gIFRoaXMgc3dpdGNoZXMgb3ZlciB0bworKyAgIHN0cmluZzIgaWYgbmVjZXNzYXJ5LiAgKi8KKysjZGVmaW5lIFBSRUZFVENIKCkJCQkJCQkJXAorKyAgd2hpbGUgKGQgPT0gZGVuZCkJCQkJCQkgICAgCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICAvKiBFbmQgb2Ygc3RyaW5nMiA9PiBmYWlsLiAgKi8JCQkJCVwKKysgICAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikgCQkJCQkJXAorKyAgICAgICAgZ290byBmYWlsOwkJCQkJCQlcCisrICAgICAgLyogRW5kIG9mIHN0cmluZzEgPT4gYWR2YW5jZSB0byBzdHJpbmcyLiAgKi8gCQkJXAorKyAgICAgIGQgPSBzdHJpbmcyOwkJCQkJCSAgICAgICAgXAorKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsJCQkJCQlcCisrICAgIH0KKysKKysvKiBUZXN0IGlmIGF0IHZlcnkgYmVnaW5uaW5nIG9yIGF0IHZlcnkgZW5kIG9mIHRoZSB2aXJ0dWFsIGNvbmNhdGVuYXRpb24KKysgICBvZiBgc3RyaW5nMScgYW5kIGBzdHJpbmcyJy4gIElmIG9ubHkgb25lIHN0cmluZywgaXQncyBgc3RyaW5nMicuICAqLworKyNkZWZpbmUgQVRfU1RSSU5HU19CRUcoZCkgKChkKSA9PSAoc2l6ZTEgPyBzdHJpbmcxIDogc3RyaW5nMikgfHwgIXNpemUyKQorKyNkZWZpbmUgQVRfU1RSSU5HU19FTkQoZCkgKChkKSA9PSBlbmQyKQorKworKworKy8qIFRlc3QgaWYgRCBwb2ludHMgdG8gYSBjaGFyYWN0ZXIgd2hpY2ggaXMgd29yZC1jb25zdGl0dWVudC4gIFdlIGhhdmUKKysgICB0d28gc3BlY2lhbCBjYXNlcyB0byBjaGVjayBmb3I6IGlmIHBhc3QgdGhlIGVuZCBvZiBzdHJpbmcxLCBsb29rIGF0CisrICAgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBzdHJpbmcyOyBhbmQgaWYgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YKKysgICBzdHJpbmcyLCBsb29rIGF0IHRoZSBsYXN0IGNoYXJhY3RlciBpbiBzdHJpbmcxLiAgKi8KKysjaWZkZWYgV0NIQVIKKysvKiBVc2UgaW50ZXJuYXRpb25hbGl6ZWQgQVBJIGluc3RlYWQgb2YgU1lOVEFYLiAgKi8KKysjIGRlZmluZSBXT1JEQ0hBUl9QKGQpCQkJCQkJCVwKKysgIChpc3dhbG51bSAoKHdpbnRfdCkoKGQpID09IGVuZDEgPyAqc3RyaW5nMgkJCQlcCisrICAgICAgICAgICA6IChkKSA9PSBzdHJpbmcyIC0gMSA/ICooZW5kMSAtIDEpIDogKihkKSkpICE9IDAJCVwKKysgICB8fCAoKGQpID09IGVuZDEgPyAqc3RyaW5nMgkJCQkJCVwKKysgICAgICAgOiAoZCkgPT0gc3RyaW5nMiAtIDEgPyAqKGVuZDEgLSAxKSA6ICooZCkpID09IEwnXycpCisrI2Vsc2UgLyogQllURSAqLworKyMgZGVmaW5lIFdPUkRDSEFSX1AoZCkJCQkJCQkJXAorKyAgKFNZTlRBWCAoKGQpID09IGVuZDEgPyAqc3RyaW5nMgkJCQkJXAorKyAgICAgICAgICAgOiAoZCkgPT0gc3RyaW5nMiAtIDEgPyAqKGVuZDEgLSAxKSA6ICooZCkpCQkJXAorKyAgID09IFN3b3JkKQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIERpc2FibGVkIGR1ZSB0byBhIGNvbXBpbGVyIGJ1ZyAtLSBzZWUgY29tbWVudCBhdCBjYXNlIHdvcmRib3VuZCAqLworKyNpZiAwCisrLyogVGVzdCBpZiB0aGUgY2hhcmFjdGVyIGJlZm9yZSBEIGFuZCB0aGUgb25lIGF0IEQgZGlmZmVyIHdpdGggcmVzcGVjdAorKyAgIHRvIGJlaW5nIHdvcmQtY29uc3RpdHVlbnQuICAqLworKyNkZWZpbmUgQVRfV09SRF9CT1VOREFSWShkKQkJCQkJCVwKKysgIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgQVRfU1RSSU5HU19FTkQgKGQpCQkJCVwKKysgICB8fCBXT1JEQ0hBUl9QIChkIC0gMSkgIT0gV09SRENIQVJfUCAoZCkpCisrI2VuZGlmCisrCisrLyogRnJlZSBldmVyeXRoaW5nIHdlIG1hbGxvYy4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFJFR0VYX0ZSRUVfU1RBQ0sgKGZhaWxfc3RhY2suc3RhY2spOwkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnZW5kKTsJCQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm8pOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19kdW1teSk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm9fZHVtbXkpOwkJCQkJCVwKKysgICAgaWYgKCFjYW50X2ZyZWVfd2NzX2J1ZikJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMik7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDIpOwkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgUkVHRVhfRlJFRV9TVEFDSyAoZmFpbF9zdGFjay5zdGFjayk7CQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdlbmQpOwkJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKGJlc3RfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mbyk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2R1bW15KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfaW5mb19kdW1teSk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrI2Vsc2UKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBpZiAoIWNhbnRfZnJlZV93Y3NfYnVmKQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcyKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkgKCh2b2lkKTApIC8qIERvIG5vdGhpbmchICBCdXQgaW5oaWJpdCBnY2Mgd2FybmluZy4gKi8KKysjIGVuZGlmIC8qIFdDSEFSICovCisrI2VuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysvKiBUaGVzZSB2YWx1ZXMgbXVzdCBtZWV0IHNldmVyYWwgY29uc3RyYWludHMuICBUaGV5IG11c3Qgbm90IGJlIHZhbGlkCisrICAgcmVnaXN0ZXIgdmFsdWVzOyBzaW5jZSB3ZSBoYXZlIGEgbGltaXQgb2YgMjU1IHJlZ2lzdGVycyAoYmVjYXVzZQorKyAgIHdlIHVzZSBvbmx5IG9uZSBieXRlIGluIHRoZSBwYXR0ZXJuIGZvciB0aGUgcmVnaXN0ZXIgbnVtYmVyKSwgd2UgY2FuCisrICAgdXNlIG51bWJlcnMgbGFyZ2VyIHRoYW4gMjU1LiAgVGhleSBtdXN0IGRpZmZlciBieSAxLCBiZWNhdXNlIG9mCisrICAgTlVNX0ZBSUxVUkVfSVRFTVMgYWJvdmUuICBBbmQgdGhlIHZhbHVlIGZvciB0aGUgbG93ZXN0IHJlZ2lzdGVyIG11c3QKKysgICBiZSBsYXJnZXIgdGhhbiB0aGUgdmFsdWUgZm9yIHRoZSBoaWdoZXN0IHJlZ2lzdGVyLCBzbyB3ZSBkbyBub3QgdHJ5CisrICAgdG8gYWN0dWFsbHkgc2F2ZSBhbnkgcmVnaXN0ZXJzIHdoZW4gbm9uZSBhcmUgYWN0aXZlLiAgKi8KKysjZGVmaW5lIE5PX0hJR0hFU1RfQUNUSVZFX1JFRyAoMSA8PCBCWVRFV0lEVEgpCisrI2RlZmluZSBOT19MT1dFU1RfQUNUSVZFX1JFRyAoTk9fSElHSEVTVF9BQ1RJVkVfUkVHICsgMSkKKysMCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysvKiBNYXRjaGluZyByb3V0aW5lcy4gICovCisrCisrI2lmbmRlZiBlbWFjcyAgIC8qIEVtYWNzIG5ldmVyIHVzZXMgdGhpcy4gICovCisrLyogcmVfbWF0Y2ggaXMgbGlrZSByZV9tYXRjaF8yIGV4Y2VwdCBpdCB0YWtlcyBvbmx5IGEgc2luZ2xlIHN0cmluZy4gICovCisrCisraW50CisrcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nLAorKyAgICAgICAgICBpbnQgc2l6ZSwgaW50IHBvcywgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncykKKyt7CisrICBpbnQgcmVzdWx0OworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJlc3VsdCA9IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBOVUxMLCAwLCBzdHJpbmcsIHNpemUsCisrCQkJCSAgICAgIHBvcywgcmVncywgc2l6ZSwKKysJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXN1bHQgPSBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6ZSwKKysJCQkJICBwb3MsIHJlZ3MsIHNpemUpOworKyMgaWZuZGVmIFJFR0VYX01BTExPQworKyMgIGlmZGVmIENfQUxMT0NBCisrICBhbGxvY2EgKDApOworKyMgIGVuZGlmCisrIyBlbmRpZgorKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrIyBpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2gsIHJlX21hdGNoKQorKyMgZW5kaWYKKysjZW5kaWYgLyogbm90IGVtYWNzICovCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqZW5kLAorKwkJCQkJUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICpwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmVuZCwKKysJCQkJCVBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbyk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVJfVCAqZW5kLAorKwkJCQkJUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKTsKKytzdGF0aWMgaW50IFBSRUZJWChiY21wX3RyYW5zbGF0ZSkgKGNvbnN0IENIQVJfVCAqczEsIGNvbnN0IENIQVJfVCAqczIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgbGVuLAorKwkJCQkgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUpOworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogcmVfbWF0Y2hfMiBtYXRjaGVzIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIEJVRlAgYWdhaW5zdCB0aGUKKysgICB0aGUgKHZpcnR1YWwpIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMiAob2YgbGVuZ3RoIFNJWkUxCisrICAgYW5kIFNJWkUyLCByZXNwZWN0aXZlbHkpLiAgV2Ugc3RhcnQgbWF0Y2hpbmcgYXQgUE9TLCBhbmQgc3RvcAorKyAgIG1hdGNoaW5nIGF0IFNUT1AuCisrCisrICAgSWYgUkVHUyBpcyBub24tbnVsbCBhbmQgdGhlIGBub19zdWInIGZpZWxkIG9mIEJVRlAgaXMgbm9uemVybywgd2UKKysgICBzdG9yZSBvZmZzZXRzIGZvciB0aGUgc3Vic3RyaW5nIGVhY2ggZ3JvdXAgbWF0Y2hlZCBpbiBSRUdTLiAgU2VlIHRoZQorKyAgIGRvY3VtZW50YXRpb24gZm9yIGV4YWN0bHkgaG93IG1hbnkgZ3JvdXBzIHdlIGZpbGwuCisrCisrICAgV2UgcmV0dXJuIC0xIGlmIG5vIG1hdGNoLCAtMiBpZiBhbiBpbnRlcm5hbCBlcnJvciAoc3VjaCBhcyB0aGUKKysgICBmYWlsdXJlIHN0YWNrIG92ZXJmbG93aW5nKS4gIE90aGVyd2lzZSwgd2UgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlCisrICAgbWF0Y2hlZCBzdWJzdHJpbmcuICAqLworKworK2ludAorK3JlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwgaW50IHBvcywKKysgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKyt7CisrICBpbnQgcmVzdWx0OworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJlc3VsdCA9IHdjc19yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsCisrCQkJCSAgICAgIHBvcywgcmVncywgc3RvcCwKKysJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXN1bHQgPSBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwKKysJCQkJICBwb3MsIHJlZ3MsIHN0b3ApOworKworKyNpZm5kZWYgUkVHRVhfTUFMTE9DCisrIyBpZmRlZiBDX0FMTE9DQQorKyAgYWxsb2NhICgwKTsKKysjIGVuZGlmCisrI2VuZGlmCisrICByZXR1cm4gcmVzdWx0OworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX21hdGNoXzIsIHJlX21hdGNoXzIpCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjaWZkZWYgV0NIQVIKKytzdGF0aWMgaW50IGNvdW50X21ic19sZW5ndGggKGludCAqLCBpbnQpOworKworKy8qIFRoaXMgY2hlY2sgdGhlIHN1YnN0cmluZyAoZnJvbSAwLCB0byBsZW5ndGgpIG9mIHRoZSBtdWx0aWJ5dGUgc3RyaW5nLAorKyAgIHRvIHdoaWNoIG9mZnNldF9idWZmZXIgY29ycmVzcG9uZC4gQW5kIGNvdW50IGhvdyBtYW55IHdjaGFyX3RfY2hhcmFjdGVycworKyAgIHRoZSBzdWJzdHJpbmcgb2NjdXB5LiBXZSB1c2Ugb2Zmc2V0X2J1ZmZlciB0byBvcHRpbWl6YXRpb24uCisrICAgU2VlIGNvbnZlcnRfbWJzX3RvX3djcy4gICovCisrCisrc3RhdGljIGludAorK2NvdW50X21ic19sZW5ndGgoaW50ICpvZmZzZXRfYnVmZmVyLCBpbnQgbGVuZ3RoKQorK3sKKysgIGludCB1cHBlciwgbG93ZXI7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBzaXplIGlzIHZhbGlkLiAgKi8KKysgIGlmIChsZW5ndGggPCAwKQorKyAgICByZXR1cm4gLTE7CisrCisrICBpZiAob2Zmc2V0X2J1ZmZlciA9PSBOVUxMKQorKyAgICByZXR1cm4gMDsKKysKKysgIC8qIElmIHRoZXJlIGFyZSBubyBtdWx0aWJ5dGUgY2hhcmFjdGVyLCBvZmZzZXRfYnVmZmVyW2ldID09IGkuCisrICAgT3B0bWl6ZSBmb3IgdGhpcyBjYXNlLiAgKi8KKysgIGlmIChvZmZzZXRfYnVmZmVyW2xlbmd0aF0gPT0gbGVuZ3RoKQorKyAgICByZXR1cm4gbGVuZ3RoOworKworKyAgLyogU2V0IHVwIHVwcGVyIHdpdGggbGVuZ3RoLiAoYmVjYXVzZSBmb3IgYWxsIGksIG9mZnNldF9idWZmZXJbaV0gPj0gaSkgICovCisrICB1cHBlciA9IGxlbmd0aDsKKysgIGxvd2VyID0gMDsKKysKKysgIHdoaWxlICh0cnVlKQorKyAgICB7CisrICAgICAgaW50IG1pZGRsZSA9IChsb3dlciArIHVwcGVyKSAvIDI7CisrICAgICAgaWYgKG1pZGRsZSA9PSBsb3dlciB8fCBtaWRkbGUgPT0gdXBwZXIpCisrCWJyZWFrOworKyAgICAgIGlmIChvZmZzZXRfYnVmZmVyW21pZGRsZV0gPiBsZW5ndGgpCisrCXVwcGVyID0gbWlkZGxlOworKyAgICAgIGVsc2UgaWYgKG9mZnNldF9idWZmZXJbbWlkZGxlXSA8IGxlbmd0aCkKKysJbG93ZXIgPSBtaWRkbGU7CisrICAgICAgZWxzZQorKwlyZXR1cm4gbWlkZGxlOworKyAgICB9CisrCisrICByZXR1cm4gLTE7CisrfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKy8qIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbiBmb3JjZSBhbiBhbGxvY2EgY2xlYW51cAorKyAgIGFmdGVyd2FyZHMuICAqLworKyNpZmRlZiBXQ0hBUgorK3N0YXRpYyBpbnQKKyt3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3RyaW5nMSwgaW50IGNzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzIsIGludCBjc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrCQkJIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdG9wLAorKyAgICAgLyogc3RyaW5nMSA9PSBzdHJpbmcyID09IE5VTEwgbWVhbnMgc3RyaW5nMS8yLCBzaXplMS8yIGFuZAorKwltYnNfb2Zmc2V0MS8yIG5lZWQgc2V0aW5nIHVwIGluIHRoaXMgZnVuY3Rpb24uICAqLworKyAgICAgLyogV2UgbmVlZCB3Y2hhcl90KiBidWZmZXJzIGNvcnJlc3BvbmQgdG8gY3N0cmluZzEsIGNzdHJpbmcyLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAvKiBvZmZzZXQgYnVmZmVyIGZvciBvcHRpbWl6YXRvaW4uIFNlZSBjb252ZXJ0X21ic190b193Yy4gICovCisrCQkJIGludCAqbWJzX29mZnNldDEsIGludCAqbWJzX29mZnNldDIpCisrI2Vsc2UgLyogQllURSAqLworK3N0YXRpYyBpbnQKKytieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrCQkJICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKysjZW5kaWYgLyogQllURSAqLworK3sKKysgIC8qIEdlbmVyYWwgdGVtcG9yYXJpZXMuICAqLworKyAgaW50IG1jbnQ7CisrICBVQ0hBUl9UICpwMTsKKysjaWZkZWYgV0NIQVIKKysgIC8qIFRoZXkgaG9sZCB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciAqaXNfYmluYXJ5ID0gTlVMTDsKKysgIC8qIElmIHRydWUsIHdlIGNhbid0IGZyZWUgc3RyaW5nMS8yLCBtYnNfb2Zmc2V0MS8yLiAgKi8KKysgIGludCBjYW50X2ZyZWVfd2NzX2J1ZiA9IDE7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBKdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuICAqLworKyAgY29uc3QgQ0hBUl9UICplbmQxLCAqZW5kMjsKKysKKysgIC8qIFBvaW50ZXJzIGludG8gc3RyaW5nMSBhbmQgc3RyaW5nMiwganVzdCBwYXN0IHRoZSBsYXN0IGNoYXJhY3RlcnMgaW4KKysgICAgIGVhY2ggdG8gY29uc2lkZXIgbWF0Y2hpbmcuICAqLworKyAgY29uc3QgQ0hBUl9UICplbmRfbWF0Y2hfMSwgKmVuZF9tYXRjaF8yOworKworKyAgLyogV2hlcmUgd2UgYXJlIGluIHRoZSBkYXRhLCBhbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdHJpbmcuICAqLworKyAgY29uc3QgQ0hBUl9UICpkLCAqZGVuZDsKKysKKysgIC8qIFdoZXJlIHdlIGFyZSBpbiB0aGUgcGF0dGVybiwgYW5kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uICAqLworKyNpZmRlZiBXQ0hBUgorKyAgVUNIQVJfVCAqcGF0dGVybiwgKnA7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kOworKyNlbHNlIC8qIEJZVEUgKi8KKysgIFVDSEFSX1QgKnAgPSBidWZwLT5idWZmZXI7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kID0gcCArIGJ1ZnAtPnVzZWQ7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBNYXJrIHRoZSBvcGNvZGUganVzdCBhZnRlciBhIHN0YXJ0X21lbW9yeSwgc28gd2UgY2FuIHRlc3QgZm9yIGFuCisrICAgICBlbXB0eSBzdWJwYXR0ZXJuIHdoZW4gd2UgZ2V0IHRvIHRoZSBzdG9wX21lbW9yeS4gICovCisrICBVQ0hBUl9UICpqdXN0X3Bhc3Rfc3RhcnRfbWVtID0gMDsKKysKKysgIC8qIFdlIHVzZSB0aGlzIHRvIG1hcCBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gICovCisrICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50cmFuc2xhdGU7CisrCisrICAvKiBGYWlsdXJlIHBvaW50IHN0YWNrLiAgRWFjaCBwbGFjZSB0aGF0IGNhbiBoYW5kbGUgYSBmYWlsdXJlIGZ1cnRoZXIKKysgICAgIGRvd24gdGhlIGxpbmUgcHVzaGVzIGEgZmFpbHVyZSBwb2ludCBvbiB0aGlzIHN0YWNrLiAgSXQgY29uc2lzdHMgb2YKKysgICAgIHJlc3RhcnQsIHJlZ2VuZCwgYW5kIHJlZ19pbmZvIGZvciBhbGwgcmVnaXN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8KKysgICAgIHRoZSBzdWJleHByZXNzaW9ucyB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlLCBwbHVzIHRoZSBudW1iZXIgb2Ygc3VjaAorKyAgICAgcmVnaXN0ZXJzLCBhbmQsIGZpbmFsbHksIHR3byBjaGFyIConcy4gIFRoZSBmaXJzdCBjaGFyICogaXMgd2hlcmUKKysgICAgIHRvIHJlc3VtZSBzY2FubmluZyB0aGUgcGF0dGVybjsgdGhlIHNlY29uZCBvbmUgaXMgd2hlcmUgdG8gcmVzdW1lCisrICAgICBzY2FubmluZyB0aGUgc3RyaW5ncy4gIElmIHRoZSBsYXR0ZXIgaXMgemVybywgdGhlIGZhaWx1cmUgcG9pbnQgaXMKKysgICAgIGEgYGBkdW1teScnOyBpZiBhIGZhaWx1cmUgaGFwcGVucyBhbmQgdGhlIGZhaWx1cmUgcG9pbnQgaXMgYSBkdW1teSwKKysgICAgIGl0IGdldHMgZGlzY2FyZGVkIGFuZCB0aGUgbmV4dCBuZXh0IG9uZSBpcyB0cmllZC4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoaXMgaXMgZ2xvYmFsLiAgKi8KKysgIFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpIGZhaWxfc3RhY2s7CisrI2VuZGlmCisrI2lmZGVmIERFQlVHCisrICBzdGF0aWMgdW5zaWduZWQgZmFpbHVyZV9pZDsKKysgIHVuc2lnbmVkIG5mYWlsdXJlX3BvaW50c19wdXNoZWQgPSAwLCBuZmFpbHVyZV9wb2ludHNfcG9wcGVkID0gMDsKKysjZW5kaWYKKysKKysjaWZkZWYgUkVMX0FMTE9DCisrICAvKiBUaGlzIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBmYWlsdXJlIHN0YWNrLCB3aGVuCisrICAgICBpdCBpcyBhbGxvY2F0ZWQgcmVsb2NhdGFibHkuICAqLworKyAgZmFpbF9zdGFja19lbHRfdCAqZmFpbHVyZV9zdGFja19wdHI7CisrI2VuZGlmCisrCisrICAvKiBXZSBmaWxsIGFsbCB0aGUgcmVnaXN0ZXJzIGludGVybmFsbHksIGluZGVwZW5kZW50IG9mIHdoYXQgd2UKKysgICAgIHJldHVybiwgZm9yIHVzZSBpbiBiYWNrcmVmZXJlbmNlcy4gIFRoZSBudW1iZXIgaGVyZSBpbmNsdWRlcworKyAgICAgYW4gZWxlbWVudCBmb3IgcmVnaXN0ZXIgemVyby4gICovCisrICBzaXplX3QgbnVtX3JlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKKysKKysgIC8qIFRoZSBjdXJyZW50bHkgYWN0aXZlIHJlZ2lzdGVycy4gICovCisrICBhY3RpdmVfcmVnX3QgbG93ZXN0X2FjdGl2ZV9yZWcgPSBOT19MT1dFU1RfQUNUSVZFX1JFRzsKKysgIGFjdGl2ZV9yZWdfdCBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBOT19ISUdIRVNUX0FDVElWRV9SRUc7CisrCisrICAvKiBJbmZvcm1hdGlvbiBvbiB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXJzLiBUaGVzZSBhcmUgcG9pbnRlcnMgaW50bworKyAgICAgdGhlIGlucHV0IHN0cmluZ3M7IHRoZXkgcmVjb3JkIGp1c3Qgd2hhdCB3YXMgbWF0Y2hlZCAob24gdGhpcworKyAgICAgYXR0ZW1wdCkgYnkgYSBzdWJleHByZXNzaW9uIHBhcnQgb2YgdGhlIHBhdHRlcm4sIHRoYXQgaXMsIHRoZQorKyAgICAgcmVnbnVtLXRoIHJlZ3N0YXJ0IHBvaW50ZXIgcG9pbnRzIHRvIHdoZXJlIGluIHRoZSBwYXR0ZXJuIHdlIGJlZ2FuCisrICAgICBtYXRjaGluZyBhbmQgdGhlIHJlZ251bS10aCByZWdlbmQgcG9pbnRzIHRvIHJpZ2h0IGFmdGVyIHdoZXJlIHdlCisrICAgICBzdG9wcGVkIG1hdGNoaW5nIHRoZSByZWdudW0tdGggc3ViZXhwcmVzc2lvbi4gIChUaGUgemVyb3RoIHJlZ2lzdGVyCisrICAgICBrZWVwcyB0cmFjayBvZiB3aGF0IHRoZSB3aG9sZSBwYXR0ZXJuIG1hdGNoZXMuKSAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipyZWdzdGFydCwgKipyZWdlbmQ7CisrI2VuZGlmCisrCisrICAvKiBJZiBhIGdyb3VwIHRoYXQncyBvcGVyYXRlZCB1cG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciBmYWlscyB0bworKyAgICAgbWF0Y2ggYW55dGhpbmcsIHRoZW4gdGhlIHJlZ2lzdGVyIGZvciBpdHMgc3RhcnQgd2lsbCBuZWVkIHRvIGJlCisrICAgICByZXN0b3JlZCBiZWNhdXNlIGl0IHdpbGwgaGF2ZSBiZWVuIHNldCB0byB3aGVyZXZlciBpbiB0aGUgc3RyaW5nIHdlCisrICAgICBhcmUgd2hlbiB3ZSBsYXN0IHNlZSBpdHMgb3Blbi1ncm91cCBvcGVyYXRvci4gIFNpbWlsYXJseSBmb3IgYQorKyAgICAgcmVnaXN0ZXIncyBlbmQuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKm9sZF9yZWdzdGFydCwgKipvbGRfcmVnZW5kOworKyNlbmRpZgorKworKyAgLyogVGhlIGlzX2FjdGl2ZSBmaWVsZCBvZiByZWdfaW5mbyBoZWxwcyB1cyBrZWVwIHRyYWNrIG9mIHdoaWNoIChwb3NzaWJseQorKyAgICAgbmVzdGVkKSBzdWJleHByZXNzaW9ucyB3ZSBhcmUgY3VycmVudGx5IGluLiBUaGUgbWF0Y2hlZF9zb21ldGhpbmcKKysgICAgIGZpZWxkIG9mIHJlZ19pbmZvW3JlZ19udW1dIGhlbHBzIHVzIHRlbGwgd2hldGhlciBvciBub3Qgd2UgaGF2ZQorKyAgICAgbWF0Y2hlZCBhbnkgb2YgdGhlIHBhdHRlcm4gc28gZmFyIHRoaXMgdGltZSB0aHJvdWdoIHRoZSByZWdfbnVtLXRoCisrICAgICBzdWJleHByZXNzaW9uLiAgVGhlc2UgdHdvIGZpZWxkcyBnZXQgcmVzZXQgZWFjaCB0aW1lIHRocm91Z2ggYW55CisrICAgICBsb29wIHRoZWlyIHJlZ2lzdGVyIGlzIGluLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhpcyBpcyBnbG9iYWwuICAqLworKyAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvOworKyNlbmRpZgorKworKyAgLyogVGhlIGZvbGxvd2luZyByZWNvcmQgdGhlIHJlZ2lzdGVyIGluZm8gYXMgZm91bmQgaW4gdGhlIGFib3ZlCisrICAgICB2YXJpYWJsZXMgd2hlbiB3ZSBmaW5kIGEgbWF0Y2ggYmV0dGVyIHRoYW4gYW55IHdlJ3ZlIHNlZW4gYmVmb3JlLgorKyAgICAgVGhpcyBoYXBwZW5zIGFzIHdlIGJhY2t0cmFjayB0aHJvdWdoIHRoZSBmYWlsdXJlIHBvaW50cywgd2hpY2ggaW4KKysgICAgIHR1cm4gaGFwcGVucyBvbmx5IGlmIHdlIGhhdmUgbm90IHlldCBtYXRjaGVkIHRoZSBlbnRpcmUgc3RyaW5nLiAqLworKyAgdW5zaWduZWQgYmVzdF9yZWdzX3NldCA9IGZhbHNlOworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKmJlc3RfcmVnc3RhcnQsICoqYmVzdF9yZWdlbmQ7CisrI2VuZGlmCisrCisrICAvKiBMb2dpY2FsbHksIHRoaXMgaXMgYGJlc3RfcmVnZW5kWzBdJy4gIEJ1dCB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdG8KKysgICAgIGFsbG9jYXRlIHNwYWNlIGZvciB0aGF0IGlmIHdlJ3JlIG5vdCBhbGxvY2F0aW5nIHNwYWNlIGZvciBhbnl0aGluZworKyAgICAgZWxzZSAoc2VlIGJlbG93KS4gIEFsc28sIHdlIG5ldmVyIG5lZWQgaW5mbyBhYm91dCByZWdpc3RlciAwIGZvcgorKyAgICAgYW55IG9mIHRoZSBvdGhlciByZWdpc3RlciB2ZWN0b3JzLCBhbmQgaXQgc2VlbXMgcmF0aGVyIGEga2x1ZGdlIHRvCisrICAgICB0cmVhdCBgYmVzdF9yZWdlbmQnIGRpZmZlcmVudGx5IHRoYW4gdGhlIHJlc3QuICBTbyB3ZSBrZWVwIHRyYWNrIG9mCisrICAgICB0aGUgZW5kIG9mIHRoZSBiZXN0IG1hdGNoIHNvIGZhciBpbiBhIHNlcGFyYXRlIHZhcmlhYmxlLiAgV2UKKysgICAgIGluaXRpYWxpemUgdGhpcyB0byBOVUxMIHNvIHRoYXQgd2hlbiB3ZSBiYWNrdHJhY2sgdGhlIGZpcnN0IHRpbWUKKysgICAgIGFuZCBuZWVkIHRvIHRlc3QgaXQsIGl0J3Mgbm90IGdhcmJhZ2UuICAqLworKyAgY29uc3QgQ0hBUl9UICptYXRjaF9lbmQgPSBOVUxMOworKworKyAgLyogVGhpcyBoZWxwcyBTRVRfUkVHU19NQVRDSEVEIGF2b2lkIGRvaW5nIHJlZHVuZGFudCB3b3JrLiAgKi8KKysgIGludCBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOworKworKyAgLyogVXNlZCB3aGVuIHdlIHBvcCB2YWx1ZXMgd2UgZG9uJ3QgY2FyZSBhYm91dC4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqcmVnX2R1bW15OworKyAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvX2R1bW15OworKyNlbmRpZgorKworKyNpZmRlZiBERUJVRworKyAgLyogQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaXN0ZXJzIHB1c2hlZC4gICovCisrICB1bnNpZ25lZCBudW1fcmVnc19wdXNoZWQgPSAwOworKyNlbmRpZgorKworKyAgREVCVUdfUFJJTlQxICgiXG5cbkVudGVyaW5nIHJlX21hdGNoXzIuXG4iKTsKKysKKysgIElOSVRfRkFJTF9TVEFDSyAoKTsKKysKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrICAvKiBEbyBub3QgYm90aGVyIHRvIGluaXRpYWxpemUgYWxsIHRoZSByZWdpc3RlciB2YXJpYWJsZXMgaWYgdGhlcmUgYXJlCisrICAgICBubyBncm91cHMgaW4gdGhlIHBhdHRlcm4sIGFzIGl0IHRha2VzIGEgZmFpciBhbW91bnQgb2YgdGltZS4gIElmCisrICAgICB0aGVyZSBhcmUgZ3JvdXBzLCB3ZSBpbmNsdWRlIHNwYWNlIGZvciByZWdpc3RlciAwICh0aGUgd2hvbGUKKysgICAgIHBhdHRlcm4pLCBldmVuIHRob3VnaCB3ZSBuZXZlciB1c2UgaXQsIHNpbmNlIGl0IHNpbXBsaWZpZXMgdGhlCisrICAgICBhcnJheSBpbmRleGluZy4gIFdlIHNob3VsZCBmaXggdGhpcy4gICovCisrICBpZiAoYnVmcC0+cmVfbnN1YikKKysgICAgeworKyAgICAgIHJlZ3N0YXJ0ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIHJlZ2VuZCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBvbGRfcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgb2xkX3JlZ2VuZCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBiZXN0X3JlZ3N0YXJ0ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIGJlc3RfcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIHJlZ19pbmZvID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKyAgICAgIHJlZ19kdW1teSA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICByZWdfaW5mb19kdW1teSA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysKKysgICAgICBpZiAoIShyZWdzdGFydCAmJiByZWdlbmQgJiYgb2xkX3JlZ3N0YXJ0ICYmIG9sZF9yZWdlbmQgJiYgcmVnX2luZm8KKysgICAgICAgICAgICAmJiBiZXN0X3JlZ3N0YXJ0ICYmIGJlc3RfcmVnZW5kICYmIHJlZ19kdW1teSAmJiByZWdfaW5mb19kdW1teSkpCisrICAgICAgICB7CisrICAgICAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgICAgICByZXR1cm4gLTI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIFdlIG11c3QgaW5pdGlhbGl6ZSBhbGwgb3VyIHZhcmlhYmxlcyB0byBOVUxMLCBzbyB0aGF0CisrICAgICAgICAgYEZSRUVfVkFSSUFCTEVTJyBkb2Vzbid0IHRyeSB0byBmcmVlIHRoZW0uICAqLworKyAgICAgIHJlZ3N0YXJ0ID0gcmVnZW5kID0gb2xkX3JlZ3N0YXJ0ID0gb2xkX3JlZ2VuZCA9IGJlc3RfcmVnc3RhcnQKKysgICAgICAgID0gYmVzdF9yZWdlbmQgPSByZWdfZHVtbXkgPSBOVUxMOworKyAgICAgIHJlZ19pbmZvID0gcmVnX2luZm9fZHVtbXkgPSAoUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKikgTlVMTDsKKysgICAgfQorKyNlbmRpZiAvKiBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysKKysgIC8qIFRoZSBzdGFydGluZyBwb3NpdGlvbiBpcyBib2d1cy4gICovCisrI2lmZGVmIFdDSEFSCisrICBpZiAocG9zIDwgMCB8fCBwb3MgPiBjc2l6ZTEgKyBjc2l6ZTIpCisrI2Vsc2UgLyogQllURSAqLworKyAgaWYgKHBvcyA8IDAgfHwgcG9zID4gc2l6ZTEgKyBzaXplMikKKysjZW5kaWYKKysgICAgeworKyAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyNpZmRlZiBXQ0hBUgorKyAgLyogQWxsb2NhdGUgd2NoYXJfdCBhcnJheSBmb3Igc3RyaW5nMSBhbmQgc3RyaW5nMiBhbmQKKysgICAgIGZpbGwgdGhlbSB3aXRoIGNvbnZlcnRlZCBzdHJpbmcuICAqLworKyAgaWYgKHN0cmluZzEgPT0gTlVMTCAmJiBzdHJpbmcyID09IE5VTEwpCisrICAgIHsKKysgICAgICAvKiBXZSBuZWVkIHNldGluZyB1cCBidWZmZXJzIGhlcmUuICAqLworKworKyAgICAgIC8qIFdlIG11c3QgZnJlZSB3Y3MgYnVmZmVycyBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKysgICAgICBjYW50X2ZyZWVfd2NzX2J1ZiA9IDA7CisrCisrICAgICAgaWYgKGNzaXplMSAhPSAwKQorKwl7CisrCSAgc3RyaW5nMSA9IFJFR0VYX1RBTExPQyAoY3NpemUxICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MSA9IFJFR0VYX1RBTExPQyAoY3NpemUxICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKGNzaXplMSArIDEsIGNoYXIpOworKwkgIGlmICghc3RyaW5nMSB8fCAhbWJzX29mZnNldDEgfHwgIWlzX2JpbmFyeSkKKysJICAgIHsKKysJICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOworKwkgICAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICAgICAgcmV0dXJuIC0yOworKwkgICAgfQorKwl9CisrICAgICAgaWYgKGNzaXplMiAhPSAwKQorKwl7CisrCSAgc3RyaW5nMiA9IFJFR0VYX1RBTExPQyAoY3NpemUyICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MiA9IFJFR0VYX1RBTExPQyAoY3NpemUyICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKGNzaXplMiArIDEsIGNoYXIpOworKwkgIGlmICghc3RyaW5nMiB8fCAhbWJzX29mZnNldDIgfHwgIWlzX2JpbmFyeSkKKysJICAgIHsKKysJICAgICAgRlJFRV9WQVIgKHN0cmluZzEpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOworKwkgICAgICBGUkVFX1ZBUiAoc3RyaW5nMik7CisrCSAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0Mik7CisrCSAgICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgICAgICByZXR1cm4gLTI7CisrCSAgICB9CisrCSAgc2l6ZTIgPSBjb252ZXJ0X21ic190b193Y3Moc3RyaW5nMiwgY3N0cmluZzIsIGNzaXplMiwKKysJCQkJICAgICBtYnNfb2Zmc2V0MiwgaXNfYmluYXJ5KTsKKysJICBzdHJpbmcyW3NpemUyXSA9IEwnXDAnOyAvKiBmb3IgYSBzZW50aW5lbCAgKi8KKysJICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJfQorKyAgICB9CisrCisrICAvKiBXZSBuZWVkIHRvIGNhc3QgcGF0dGVybiB0byAod2NoYXJfdCopLCBiZWNhdXNlIHdlIGNhc3RlZCB0aGlzIGNvbXBpbGVkCisrICAgICBwYXR0ZXJuIHRvIChjaGFyKikgaW4gcmVnZXhfY29tcGlsZS4gICovCisrICBwID0gcGF0dGVybiA9IChDSEFSX1QqKWJ1ZnAtPmJ1ZmZlcjsKKysgIHBlbmQgPSAoQ0hBUl9UKikoYnVmcC0+YnVmZmVyICsgYnVmcC0+dXNlZCk7CisrCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBJbml0aWFsaXplIHN1YmV4cHJlc3Npb24gdGV4dCBwb3NpdGlvbnMgdG8gLTEgdG8gbWFyayBvbmVzIHRoYXQgbm8KKysgICAgIHN0YXJ0X21lbW9yeS9zdG9wX21lbW9yeSBoYXMgYmVlbiBzZWVuIGZvci4gQWxzbyBpbml0aWFsaXplIHRoZQorKyAgICAgcmVnaXN0ZXIgaW5mb3JtYXRpb24gc3RydWN0LiAgKi8KKysgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IG51bV9yZWdzOyBtY250KyspCisrICAgIHsKKysgICAgICByZWdzdGFydFttY250XSA9IHJlZ2VuZFttY250XQorKyAgICAgICAgPSBvbGRfcmVnc3RhcnRbbWNudF0gPSBvbGRfcmVnZW5kW21jbnRdID0gUkVHX1VOU0VUX1ZBTFVFOworKworKyAgICAgIFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1ttY250XSkgPSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFOworKyAgICAgIElTX0FDVElWRSAocmVnX2luZm9bbWNudF0pID0gMDsKKysgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bbWNudF0pID0gMDsKKysgICAgICBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1ttY250XSkgPSAwOworKyAgICB9CisrCisrICAvKiBXZSBtb3ZlIGBzdHJpbmcxJyBpbnRvIGBzdHJpbmcyJyBpZiB0aGUgbGF0dGVyJ3MgZW1wdHkgLS0gYnV0IG5vdCBpZgorKyAgICAgYHN0cmluZzEnIGlzIG51bGwuICAqLworKyAgaWYgKHNpemUyID09IDAgJiYgc3RyaW5nMSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RyaW5nMiA9IHN0cmluZzE7CisrICAgICAgc2l6ZTIgPSBzaXplMTsKKysgICAgICBzdHJpbmcxID0gMDsKKysgICAgICBzaXplMSA9IDA7CisrI2lmZGVmIFdDSEFSCisrICAgICAgbWJzX29mZnNldDIgPSBtYnNfb2Zmc2V0MTsKKysgICAgICBjc2l6ZTIgPSBjc2l6ZTE7CisrICAgICAgbWJzX29mZnNldDEgPSBOVUxMOworKyAgICAgIGNzaXplMSA9IDA7CisrI2VuZGlmCisrICAgIH0KKysgIGVuZDEgPSBzdHJpbmcxICsgc2l6ZTE7CisrICBlbmQyID0gc3RyaW5nMiArIHNpemUyOworKworKyAgLyogQ29tcHV0ZSB3aGVyZSB0byBzdG9wIG1hdGNoaW5nLCB3aXRoaW4gdGhlIHR3byBzdHJpbmdzLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGlmIChzdG9wIDw9IGNzaXplMSkKKysgICAgeworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQxLCBzdG9wKTsKKysgICAgICBlbmRfbWF0Y2hfMSA9IHN0cmluZzEgKyBtY250OworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaWYgKHN0b3AgPiBjc2l6ZTEgKyBjc2l6ZTIpCisrCXN0b3AgPSBjc2l6ZTEgKyBjc2l6ZTI7CisrICAgICAgZW5kX21hdGNoXzEgPSBlbmQxOworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQyLCBzdG9wLWNzaXplMSk7CisrICAgICAgZW5kX21hdGNoXzIgPSBzdHJpbmcyICsgbWNudDsKKysgICAgfQorKyAgaWYgKG1jbnQgPCAwKQorKyAgICB7IC8qIGNvdW50X21ic19sZW5ndGggcmV0dXJuIGVycm9yLiAgKi8KKysgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZWxzZQorKyAgaWYgKHN0b3AgPD0gc2l6ZTEpCisrICAgIHsKKysgICAgICBlbmRfbWF0Y2hfMSA9IHN0cmluZzEgKyBzdG9wOworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgZW5kX21hdGNoXzEgPSBlbmQxOworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMiArIHN0b3AgLSBzaXplMTsKKysgICAgfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogYHAnIHNjYW5zIHRocm91Z2ggdGhlIHBhdHRlcm4gYXMgYGQnIHNjYW5zIHRocm91Z2ggdGhlIGRhdGEuCisrICAgICBgZGVuZCcgaXMgdGhlIGVuZCBvZiB0aGUgaW5wdXQgc3RyaW5nIHRoYXQgYGQnIHBvaW50cyB3aXRoaW4uICBgZCcKKysgICAgIGlzIGFkdmFuY2VkIGludG8gdGhlIGZvbGxvd2luZyBpbnB1dCBzdHJpbmcgd2hlbmV2ZXIgbmVjZXNzYXJ5LCBidXQKKysgICAgIHRoaXMgaGFwcGVucyBiZWZvcmUgZmV0Y2hpbmc7IHRoZXJlZm9yZSwgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKysgICAgIGxvb3AsIGBkJyBjYW4gYmUgcG9pbnRpbmcgYXQgdGhlIGVuZCBvZiBhIHN0cmluZywgYnV0IGl0IGNhbm5vdAorKyAgICAgZXF1YWwgYHN0cmluZzInLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIGlmIChzaXplMSA+IDAgJiYgcG9zIDw9IGNzaXplMSkKKysgICAgeworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQxLCBwb3MpOworKyAgICAgIGQgPSBzdHJpbmcxICsgbWNudDsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzE7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIG1jbnQgPSBjb3VudF9tYnNfbGVuZ3RoKG1ic19vZmZzZXQyLCBwb3MtY3NpemUxKTsKKysgICAgICBkID0gc3RyaW5nMiArIG1jbnQ7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKyAgICB9CisrCisrICBpZiAobWNudCA8IDApCisrICAgIHsgLyogY291bnRfbWJzX2xlbmd0aCByZXR1cm4gZXJyb3IuICAqLworKyAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyNlbHNlCisrICBpZiAoc2l6ZTEgPiAwICYmIHBvcyA8PSBzaXplMSkKKysgICAgeworKyAgICAgIGQgPSBzdHJpbmcxICsgcG9zOworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgZCA9IHN0cmluZzIgKyBwb3MgLSBzaXplMTsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrICAgIH0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIERFQlVHX1BSSU5UMSAoIlRoZSBjb21waWxlZCBwYXR0ZXJuIGlzOlxuIik7CisrICBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwLCBwZW5kKTsKKysgIERFQlVHX1BSSU5UMSAoIlRoZSBzdHJpbmcgdG8gbWF0Y2ggaXM6IGAiKTsKKysgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKGQsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMik7CisrICBERUJVR19QUklOVDEgKCInXG4iKTsKKysKKysgIC8qIFRoaXMgbG9vcHMgb3ZlciBwYXR0ZXJuIGNvbW1hbmRzLiAgSXQgZXhpdHMgYnkgcmV0dXJuaW5nIGZyb20gdGhlCisrICAgICBmdW5jdGlvbiBpZiB0aGUgbWF0Y2ggaXMgY29tcGxldGUsIG9yIGl0IGRyb3BzIHRocm91Z2ggaWYgdGhlIG1hdGNoCisrICAgICBmYWlscyBhdCB0aGlzIHN0YXJ0aW5nIHBvaW50IGluIHRoZSBpbnB1dCBkYXRhLiAgKi8KKysgIGZvciAoOzspCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBERUJVR19QUklOVDIgKCJcbiVwOiAiLCBwKTsKKysjZWxzZQorKyAgICAgIERFQlVHX1BSSU5UMiAoIlxuMHgleDogIiwgcCk7CisrI2VuZGlmCisrCisrICAgICAgaWYgKHAgPT0gcGVuZCkKKysJeyAvKiBFbmQgb2YgcGF0dGVybiBtZWFucyB3ZSBtaWdodCBoYXZlIHN1Y2NlZWRlZC4gICovCisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoImVuZCBvZiBwYXR0ZXJuIC4uLiAiKTsKKysKKysJICAvKiBJZiB3ZSBoYXZlbid0IG1hdGNoZWQgdGhlIGVudGlyZSBzdHJpbmcsIGFuZCB3ZSB3YW50IHRoZQorKyAgICAgICAgICAgICBsb25nZXN0IG1hdGNoLCB0cnkgYmFja3RyYWNraW5nLiAgKi8KKysgICAgICAgICAgaWYgKGQgIT0gZW5kX21hdGNoXzIpCisrCSAgICB7CisrCSAgICAgIC8qIDEgaWYgdGhpcyBtYXRjaCBlbmRzIGluIHRoZSBzYW1lIHN0cmluZyAoc3RyaW5nMSBvciBzdHJpbmcyKQorKwkJIGFzIHRoZSBiZXN0IHByZXZpb3VzIG1hdGNoLiAgKi8KKysJICAgICAgYm9vbGVhbiBzYW1lX3N0cl9wID0gKEZJUlNUX1NUUklOR19QIChtYXRjaF9lbmQpCisrCQkJCSAgICA9PSBNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcpOworKwkgICAgICAvKiAxIGlmIHRoaXMgbWF0Y2ggaXMgdGhlIGJlc3Qgc2VlbiBzbyBmYXIuICAqLworKwkgICAgICBib29sZWFuIGJlc3RfbWF0Y2hfcDsKKysKKysJICAgICAgLyogQUlYIGNvbXBpbGVyIGdvdCBjb25mdXNlZCB3aGVuIHRoaXMgd2FzIGNvbWJpbmVkCisrCQkgd2l0aCB0aGUgcHJldmlvdXMgZGVjbGFyYXRpb24uICAqLworKwkgICAgICBpZiAoc2FtZV9zdHJfcCkKKysJCWJlc3RfbWF0Y2hfcCA9IGQgPiBtYXRjaF9lbmQ7CisrCSAgICAgIGVsc2UKKysJCWJlc3RfbWF0Y2hfcCA9ICFNQVRDSElOR19JTl9GSVJTVF9TVFJJTkc7CisrCisrICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCJiYWNrdHJhY2tpbmcuXG4iKTsKKysKKysgICAgICAgICAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkKKysgICAgICAgICAgICAgICAgeyAvKiBNb3JlIGZhaWx1cmUgcG9pbnRzIHRvIHRyeS4gICovCisrCisrICAgICAgICAgICAgICAgICAgLyogSWYgZXhjZWVkcyBiZXN0IG1hdGNoIHNvIGZhciwgc2F2ZSBpdC4gICovCisrICAgICAgICAgICAgICAgICAgaWYgKCFiZXN0X3JlZ3Nfc2V0IHx8IGJlc3RfbWF0Y2hfcCkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgYmVzdF9yZWdzX3NldCA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX2VuZCA9IGQ7CisrCisrICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIlxuU0FWSU5HIG1hdGNoIGFzIGJlc3Qgc28gZmFyLlxuIik7CisrCisrICAgICAgICAgICAgICAgICAgICAgIGZvciAobWNudCA9IDE7ICh1bnNpZ25lZCkgbWNudCA8IG51bV9yZWdzOyBtY250KyspCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9yZWdzdGFydFttY250XSA9IHJlZ3N0YXJ0W21jbnRdOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdF9yZWdlbmRbbWNudF0gPSByZWdlbmRbbWNudF07CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogSWYgbm8gZmFpbHVyZSBwb2ludHMsIGRvbid0IHJlc3RvcmUgZ2FyYmFnZS4gIEFuZCBpZgorKyAgICAgICAgICAgICAgICAgbGFzdCBtYXRjaCBpcyByZWFsIGJlc3QgbWF0Y2gsIGRvbid0IHJlc3RvcmUgc2Vjb25kCisrICAgICAgICAgICAgICAgICBiZXN0IG9uZS4gKi8KKysgICAgICAgICAgICAgIGVsc2UgaWYgKGJlc3RfcmVnc19zZXQgJiYgIWJlc3RfbWF0Y2hfcCkKKysgICAgICAgICAgICAgICAgeworKyAgCSAgICAgICAgcmVzdG9yZV9iZXN0X3JlZ3M6CisrICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBiZXN0IG1hdGNoLiAgSXQgbWF5IGhhcHBlbiB0aGF0IGBkZW5kID09CisrICAgICAgICAgICAgICAgICAgICAgZW5kX21hdGNoXzEnIHdoaWxlIHRoZSByZXN0b3JlZCBkIGlzIGluIHN0cmluZzIuCisrICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuIGB4Lip5Lip6JyBhZ2FpbnN0IHRoZQorKyAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MgYHgtJyBhbmQgYHktei0nLCBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlCisrICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnNlY3V0aXZlIGluIG1lbW9yeS4gICovCisrICAgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiUmVzdG9yaW5nIGJlc3QgcmVnaXN0ZXJzLlxuIik7CisrCisrICAgICAgICAgICAgICAgICAgZCA9IG1hdGNoX2VuZDsKKysgICAgICAgICAgICAgICAgICBkZW5kID0gKChkID49IHN0cmluZzEgJiYgZCA8PSBlbmQxKQorKwkJICAgICAgICAgICA/IGVuZF9tYXRjaF8xIDogZW5kX21hdGNoXzIpOworKworKwkJICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBudW1fcmVnczsgbWNudCsrKQorKwkJICAgIHsKKysJCSAgICAgIHJlZ3N0YXJ0W21jbnRdID0gYmVzdF9yZWdzdGFydFttY250XTsKKysJCSAgICAgIHJlZ2VuZFttY250XSA9IGJlc3RfcmVnZW5kW21jbnRdOworKwkJICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0gLyogZCAhPSBlbmRfbWF0Y2hfMiAqLworKworKwlzdWNjZWVkX2xhYmVsOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJBY2NlcHRpbmcgbWF0Y2guXG4iKTsKKysgICAgICAgICAgLyogSWYgY2FsbGVyIHdhbnRzIHJlZ2lzdGVyIGNvbnRlbnRzIGRhdGEgYmFjaywgZG8gaXQuICAqLworKyAgICAgICAgICBpZiAocmVncyAmJiAhYnVmcC0+bm9fc3ViKQorKwkgICAgeworKwkgICAgICAvKiBIYXZlIHRoZSByZWdpc3RlciBkYXRhIGFycmF5cyBiZWVuIGFsbG9jYXRlZD8gICovCisrICAgICAgICAgICAgICBpZiAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19VTkFMTE9DQVRFRCkKKysgICAgICAgICAgICAgICAgeyAvKiBOby4gIFNvIGFsbG9jYXRlIHRoZW0gd2l0aCBtYWxsb2MuICBXZSBuZWVkIG9uZQorKyAgICAgICAgICAgICAgICAgICAgIGV4dHJhIGVsZW1lbnQgYmV5b25kIGBudW1fcmVncycgZm9yIHRoZSBgLTEnIG1hcmtlcgorKyAgICAgICAgICAgICAgICAgICAgIEdOVSBjb2RlIHVzZXMuICAqLworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPm51bV9yZWdzID0gTUFYIChSRV9OUkVHUywgbnVtX3JlZ3MgKyAxKTsKKysgICAgICAgICAgICAgICAgICByZWdzLT5zdGFydCA9IFRBTExPQyAocmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICByZWdzLT5lbmQgPSBUQUxMT0MgKHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPnN0YXJ0ID09IE5VTEwgfHwgcmVncy0+ZW5kID09IE5VTEwpCisrCQkgICAgeworKwkJICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrCQkgICAgICByZXR1cm4gLTI7CisrCQkgICAgfQorKyAgICAgICAgICAgICAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBlbHNlIGlmIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1JFQUxMT0NBVEUpCisrICAgICAgICAgICAgICAgIHsgLyogWWVzLiAgSWYgd2UgbmVlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkLCByZWFsbG9jYXRlIHRoZW0uICBJZiB3ZSBuZWVkIGZld2VyLCBqdXN0CisrICAgICAgICAgICAgICAgICAgICAgbGVhdmUgaXQgYWxvbmUuICAqLworKyAgICAgICAgICAgICAgICAgIGlmIChyZWdzLT5udW1fcmVncyA8IG51bV9yZWdzICsgMSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgcmVncy0+bnVtX3JlZ3MgPSBudW1fcmVncyArIDE7CisrICAgICAgICAgICAgICAgICAgICAgIFJFVEFMTE9DIChyZWdzLT5zdGFydCwgcmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICAgICAgUkVUQUxMT0MgKHJlZ3MtPmVuZCwgcmVncy0+bnVtX3JlZ3MsIHJlZ29mZl90KTsKKysgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ3MtPnN0YXJ0ID09IE5VTEwgfHwgcmVncy0+ZW5kID09IE5VTEwpCisrCQkJeworKwkJCSAgRlJFRV9WQVJJQUJMRVMgKCk7CisrCQkJICByZXR1cm4gLTI7CisrCQkJfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIFRoZXNlIGJyYWNlcyBmZW5kIG9mZiBhICJlbXB0eSBib2R5IGluIGFuIGVsc2Utc3RhdGVtZW50IgorKwkJICAgICB3YXJuaW5nIHVuZGVyIEdDQyB3aGVuIGFzc2VydCBleHBhbmRzIHRvIG5vdGhpbmcuICAqLworKwkJICBhc3NlcnQgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfRklYRUQpOworKwkJfQorKworKyAgICAgICAgICAgICAgLyogQ29udmVydCB0aGUgcG9pbnRlciBkYXRhIGluIGByZWdzdGFydCcgYW5kIGByZWdlbmQnIHRvCisrICAgICAgICAgICAgICAgICBpbmRpY2VzLiAgUmVnaXN0ZXIgemVybyBoYXMgdG8gYmUgc2V0IGRpZmZlcmVudGx5LAorKyAgICAgICAgICAgICAgICAgc2luY2Ugd2UgaGF2ZW4ndCBrZXB0IHRyYWNrIG9mIGFueSBpbmZvIGZvciBpdC4gICovCisrICAgICAgICAgICAgICBpZiAocmVncy0+bnVtX3JlZ3MgPiAwKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgcmVncy0+c3RhcnRbMF0gPSBwb3M7CisrI2lmZGVmIFdDSEFSCisrCQkgIGlmIChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcpCisrCQkgICAgcmVncy0+ZW5kWzBdID0gbWJzX29mZnNldDEgIT0gTlVMTCA/CisrCQkJCQltYnNfb2Zmc2V0MVtkLXN0cmluZzFdIDogMDsKKysJCSAgZWxzZQorKwkJICAgIHJlZ3MtPmVuZFswXSA9IGNzaXplMSArIChtYnNfb2Zmc2V0MiAhPSBOVUxMID8KKysJCQkJCSAgICAgbWJzX29mZnNldDJbZC1zdHJpbmcyXSA6IDApOworKyNlbHNlCisrICAgICAgICAgICAgICAgICAgcmVncy0+ZW5kWzBdID0gKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORworKwkJCQkgID8gKChyZWdvZmZfdCkgKGQgLSBzdHJpbmcxKSkKKysJCQkgICAgICAgICAgOiAoKHJlZ29mZl90KSAoZCAtIHN0cmluZzIgKyBzaXplMSkpKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCB0aGUgZmlyc3QgYG1pbiAobnVtX3JlZ3MsIHJlZ3MtPm51bV9yZWdzKScKKysgICAgICAgICAgICAgICAgIHJlZ2lzdGVycywgc2luY2UgdGhhdCBpcyBhbGwgd2UgaW5pdGlhbGl6ZWQuICAqLworKwkgICAgICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBNSU4gKG51bV9yZWdzLCByZWdzLT5udW1fcmVncyk7CisrCQkgICBtY250KyspCisrCQl7CisrICAgICAgICAgICAgICAgICAgaWYgKFJFR19VTlNFVCAocmVnc3RhcnRbbWNudF0pIHx8IFJFR19VTlNFVCAocmVnZW5kW21jbnRdKSkKKysgICAgICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0W21jbnRdID0gcmVncy0+ZW5kW21jbnRdID0gLTE7CisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgeworKwkJICAgICAgcmVncy0+c3RhcnRbbWNudF0KKysJCQk9IChyZWdvZmZfdCkgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ3N0YXJ0W21jbnRdKTsKKysgICAgICAgICAgICAgICAgICAgICAgcmVncy0+ZW5kW21jbnRdCisrCQkJPSAocmVnb2ZmX3QpIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdlbmRbbWNudF0pOworKyAgICAgICAgICAgICAgICAgICAgfQorKwkJfQorKworKyAgICAgICAgICAgICAgLyogSWYgdGhlIHJlZ3Mgc3RydWN0dXJlIHdlIHJldHVybiBoYXMgbW9yZSBlbGVtZW50cyB0aGFuCisrICAgICAgICAgICAgICAgICB3ZXJlIGluIHRoZSBwYXR0ZXJuLCBzZXQgdGhlIGV4dHJhIGVsZW1lbnRzIHRvIC0xLiAgSWYKKysgICAgICAgICAgICAgICAgIHdlIChyZSlhbGxvY2F0ZWQgdGhlIHJlZ2lzdGVycywgdGhpcyBpcyB0aGUgY2FzZSwKKysgICAgICAgICAgICAgICAgIGJlY2F1c2Ugd2UgYWx3YXlzIGFsbG9jYXRlIGVub3VnaCB0byBoYXZlIGF0IGxlYXN0IG9uZQorKyAgICAgICAgICAgICAgICAgLTEgYXQgdGhlIGVuZC4gICovCisrICAgICAgICAgICAgICBmb3IgKG1jbnQgPSBudW1fcmVnczsgKHVuc2lnbmVkKSBtY250IDwgcmVncy0+bnVtX3JlZ3M7IG1jbnQrKykKKysgICAgICAgICAgICAgICAgcmVncy0+c3RhcnRbbWNudF0gPSByZWdzLT5lbmRbbWNudF0gPSAtMTsKKysJICAgIH0gLyogcmVncyAmJiAhYnVmcC0+bm9fc3ViICovCisrCisrICAgICAgICAgIERFQlVHX1BSSU5UNCAoIiV1IGZhaWx1cmUgcG9pbnRzIHB1c2hlZCwgJXUgcG9wcGVkICgldSByZW1haW4pLlxuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBuZmFpbHVyZV9wb2ludHNfcHVzaGVkLCBuZmFpbHVyZV9wb2ludHNfcG9wcGVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIG5mYWlsdXJlX3BvaW50c19wdXNoZWQgLSBuZmFpbHVyZV9wb2ludHNfcG9wcGVkKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiJXUgcmVnaXN0ZXJzIHB1c2hlZC5cbiIsIG51bV9yZWdzX3B1c2hlZCk7CisrCisrI2lmZGVmIFdDSEFSCisrCSAgaWYgKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORykKKysJICAgIG1jbnQgPSBtYnNfb2Zmc2V0MSAhPSBOVUxMID8gbWJzX29mZnNldDFbZC1zdHJpbmcxXSA6IDA7CisrCSAgZWxzZQorKwkgICAgbWNudCA9IChtYnNfb2Zmc2V0MiAhPSBOVUxMID8gbWJzX29mZnNldDJbZC1zdHJpbmcyXSA6IDApICsKKysJCQljc2l6ZTE7CisrICAgICAgICAgIG1jbnQgLT0gcG9zOworKyNlbHNlCisrICAgICAgICAgIG1jbnQgPSBkIC0gcG9zIC0gKE1BVENISU5HX0lOX0ZJUlNUX1NUUklORworKwkJCSAgICA/IHN0cmluZzEKKysJCQkgICAgOiBzdHJpbmcyIC0gc2l6ZTEpOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJSZXR1cm5pbmcgJWQgZnJvbSByZV9tYXRjaF8yLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKyAgICAgICAgICByZXR1cm4gbWNudDsKKysgICAgICAgIH0KKysKKysgICAgICAvKiBPdGhlcndpc2UgbWF0Y2ggbmV4dCBwYXR0ZXJuIGNvbW1hbmQuICAqLworKyAgICAgIHN3aXRjaCAoU1dJVENIX0VOVU1fQ0FTVCAoKHJlX29wY29kZV90KSAqcCsrKSkKKysJeworKyAgICAgICAgLyogSWdub3JlIHRoZXNlLiAgVXNlZCB0byBpZ25vcmUgdGhlIG4gb2Ygc3VjY2VlZF9uJ3Mgd2hpY2gKKysgICAgICAgICAgIGN1cnJlbnRseSBoYXZlIG4gPT0gMC4gICovCisrICAgICAgICBjYXNlIG5vX29wOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm9fb3AuXG4iKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc3VjY2VlZDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHN1Y2NlZWQuXG4iKTsKKysJICBnb3RvIHN1Y2NlZWRfbGFiZWw7CisrCisrICAgICAgICAvKiBNYXRjaCB0aGUgbmV4dCBuIHBhdHRlcm4gY2hhcmFjdGVycyBleGFjdGx5LiAgVGhlIGZvbGxvd2luZworKyAgICAgICAgICAgYnl0ZSBpbiB0aGUgcGF0dGVybiBkZWZpbmVzIG4sIGFuZCB0aGUgbiBieXRlcyBhZnRlciB0aGF0CisrICAgICAgICAgICBhcmUgdGhlIGNoYXJhY3RlcnMgdG8gbWF0Y2guICAqLworKwljYXNlIGV4YWN0bjoKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJY2FzZSBleGFjdG5fYmluOgorKyNlbmRpZgorKwkgIG1jbnQgPSAqcCsrOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgZXhhY3RuICVkLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIC8qIFRoaXMgaXMgd3JpdHRlbiBvdXQgYXMgYW4gaWYtZWxzZSBzbyB3ZSBkb24ndCB3YXN0ZSB0aW1lCisrICAgICAgICAgICAgIHRlc3RpbmcgYHRyYW5zbGF0ZScgaW5zaWRlIHRoZSBsb29wLiAgKi8KKysgICAgICAgICAgaWYgKHRyYW5zbGF0ZSkKKysJICAgIHsKKysJICAgICAgZG8KKysJCXsKKysJCSAgUFJFRkVUQ0ggKCk7CisrI2lmZGVmIFdDSEFSCisrCQkgIGlmICgqZCA8PSAweGZmKQorKwkJICAgIHsKKysJCSAgICAgIGlmICgoVUNIQVJfVCkgdHJhbnNsYXRlWyh1bnNpZ25lZCBjaGFyKSAqZCsrXQorKwkJCSAgIT0gKFVDSEFSX1QpICpwKyspCisrCQkJZ290byBmYWlsOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGlmICgqZCsrICE9IChDSEFSX1QpICpwKyspCisrCQkJZ290byBmYWlsOworKwkJICAgIH0KKysjZWxzZQorKwkJICBpZiAoKFVDSEFSX1QpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKmQrK10KKysJCSAgICAgICE9IChVQ0hBUl9UKSAqcCsrKQorKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKwkJfQorKwkgICAgICB3aGlsZSAoLS1tY250KTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGRvCisrCQl7CisrCQkgIFBSRUZFVENIICgpOworKwkJICBpZiAoKmQrKyAhPSAoQ0hBUl9UKSAqcCsrKSBnb3RvIGZhaWw7CisrCQl9CisrCSAgICAgIHdoaWxlICgtLW1jbnQpOworKwkgICAgfQorKwkgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgLyogTWF0Y2ggYW55IGNoYXJhY3RlciBleGNlcHQgcG9zc2libHkgYSBuZXdsaW5lIG9yIGEgbnVsbC4gICovCisrCWNhc2UgYW55Y2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGFueWNoYXIuXG4iKTsKKysKKysgICAgICAgICAgUFJFRkVUQ0ggKCk7CisrCisrICAgICAgICAgIGlmICgoIShidWZwLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkgJiYgVFJBTlNMQVRFICgqZCkgPT0gJ1xuJykKKysgICAgICAgICAgICAgIHx8IChidWZwLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwgJiYgVFJBTlNMQVRFICgqZCkgPT0gJ1wwMDAnKSkKKysJICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiICBNYXRjaGVkIGAlbGQnLlxuIiwgKGxvbmcgaW50KSAqZCk7CisrICAgICAgICAgIGQrKzsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBjaGFyc2V0OgorKwljYXNlIGNoYXJzZXRfbm90OgorKwkgIHsKKysJICAgIHJlZ2lzdGVyIFVDSEFSX1QgYzsKKysjaWZkZWYgV0NIQVIKKysJICAgIHVuc2lnbmVkIGludCBpLCBjaGFyX2NsYXNzX2xlbmd0aCwgY29sbF9zeW1ib2xfbGVuZ3RoLAorKyAgICAgICAgICAgICAgZXF1aXZfY2xhc3NfbGVuZ3RoLCByYW5nZXNfbGVuZ3RoLCBjaGFyc19sZW5ndGgsIGxlbmd0aDsKKysJICAgIENIQVJfVCAqd29ya3AsICp3b3JrcDIsICpjaGFyc2V0X3RvcDsKKysjZGVmaW5lIFdPUktfQlVGRkVSX1NJWkUgMTI4CisrICAgICAgICAgICAgQ0hBUl9UIHN0cl9idWZbV09SS19CVUZGRVJfU0laRV07CisrIyBpZmRlZiBfTElCQworKwkgICAgdWludDMyX3QgbnJ1bGVzOworKyMgZW5kaWYgLyogX0xJQkMgKi8KKysjZW5kaWYgLyogV0NIQVIgKi8KKysJICAgIGJvb2xlYW4gbmVnYXRlID0gKHJlX29wY29kZV90KSAqKHAgLSAxKSA9PSBjaGFyc2V0X25vdDsKKysKKysgICAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgY2hhcnNldCVzLlxuIiwgbmVnYXRlID8gIl9ub3QiIDogIiIpOworKwkgICAgUFJFRkVUQ0ggKCk7CisrCSAgICBjID0gVFJBTlNMQVRFICgqZCk7IC8qIFRoZSBjaGFyYWN0ZXIgdG8gbWF0Y2guICAqLworKyNpZmRlZiBXQ0hBUgorKyMgaWZkZWYgX0xJQkMKKysJICAgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZiAvKiBfTElCQyAqLworKwkgICAgY2hhcnNldF90b3AgPSBwIC0gMTsKKysJICAgIGNoYXJfY2xhc3NfbGVuZ3RoID0gKnArKzsKKysJICAgIGNvbGxfc3ltYm9sX2xlbmd0aCA9ICpwKys7CisrCSAgICBlcXVpdl9jbGFzc19sZW5ndGggPSAqcCsrOworKwkgICAgcmFuZ2VzX2xlbmd0aCA9ICpwKys7CisrCSAgICBjaGFyc19sZW5ndGggPSAqcCsrOworKwkgICAgLyogcCBwb2ludHMgY2hhcnNldFs2XSwgc28gdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgaW5zdHJ1Y3Rpb24KKysJICAgICAgIChjaGFyc2V0W2wrbStuKzJvK2srcCddKSBlcXVhbHMgcFtsK20rbisyKm8rcCddLAorKwkgICAgICAgd2hlcmUgbD1sZW5ndGggb2YgY2hhcl9jbGFzc2VzLCBtPWxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9sLAorKwkgICAgICAgbj1lcXVpdmFsZW5jZV9jbGFzcywgbz1sZW5ndGggb2YgY2hhcl9yYW5nZSwKKysJICAgICAgIHAnPWxlbmd0aCBvZiBjaGFyYWN0ZXIuICAqLworKwkgICAgd29ya3AgPSBwOworKwkgICAgLyogVXBkYXRlIHAgdG8gaW5kaWNhdGUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uICAqLworKwkgICAgcCArPSBjaGFyX2NsYXNzX2xlbmd0aCArIGNvbGxfc3ltYm9sX2xlbmd0aCsgZXF1aXZfY2xhc3NfbGVuZ3RoICsKKysgICAgICAgICAgICAgIDIqcmFuZ2VzX2xlbmd0aCArIGNoYXJzX2xlbmd0aDsKKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXJfY2xhc3M/ICAqLworKwkgICAgZm9yIChpID0gMDsgaSA8IGNoYXJfY2xhc3NfbGVuZ3RoIDsgaSArPSBDSEFSX0NMQVNTX1NJWkUpCisrCSAgICAgIHsKKysJCXdjdHlwZV90IHdjdHlwZTsKKysJCXVpbnRwdHJfdCBhbGlnbmVkcCA9ICgodWludHB0cl90KXdvcmtwCisrCQkJCSAgICAgICsgX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSkKKysJCSAgCQkgICAgICAmIH4odWludHB0cl90KShfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKTsKKysJCXdjdHlwZSA9ICooKHdjdHlwZV90KilhbGlnbmVkcCk7CisrCQl3b3JrcCArPSBDSEFSX0NMQVNTX1NJWkU7CisrIyBpZmRlZiBfTElCQworKwkJaWYgKF9faXN3Y3R5cGUoKHdpbnRfdCljLCB3Y3R5cGUpKQorKwkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrIyBlbHNlCisrCQlpZiAoaXN3Y3R5cGUoKHdpbnRfdCljLCB3Y3R5cGUpKQorKwkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrIyBlbmRpZgorKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjb2xsYXRpbmdfc3ltYm9sPyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCSAgICBpZiAobnJ1bGVzICE9IDApCisrCSAgICAgIHsKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgY29sbF9zeW1ib2xfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOworKwkJICAgICB3b3JrcCsrKQorKwkJICB7CisrCQkgICAgaW50MzJfdCAqd2V4dHJhOworKwkJICAgIHdleHRyYSA9IChpbnQzMl90KikoZXh0cmEgKyAqd29ya3ArKyk7CisrCQkgICAgZm9yIChpID0gMDsgaSA8ICp3ZXh0cmE7ICsraSkKKysJCSAgICAgIGlmIChUUkFOU0xBVEUoZFtpXSkgIT0gd2V4dHJhWzEgKyBpXSkKKysJCQlicmVhazsKKysKKysJCSAgICBpZiAoaSA9PSAqd2V4dHJhKQorKwkJICAgICAgeworKwkJCS8qIFVwZGF0ZSBkLCBob3dldmVyIGQgd2lsbCBiZSBpbmNyZW1lbnRlZCBhdAorKwkJCSAgIGNoYXJfc2V0X21hdGNoZWQ6LCB3ZSBkZWNyZW1lbnQgZCBoZXJlLiAgKi8KKysJCQlkICs9IGkgLSAxOworKwkJCWdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgICAgIH0KKysJCSAgfQorKwkgICAgICB9CisrCSAgICBlbHNlIC8qIChucnVsZXMgPT0gMCkgKi8KKysjIGVuZGlmCisrCSAgICAgIC8qIElmIHdlIGNhbid0IGxvb2sgdXAgY29sbGF0aW9uIGRhdGEsIHdlIHVzZSB3Y3Njb2xsCisrCQkgaW5zdGVhZC4gICovCisrCSAgICAgIHsKKysJCWZvciAod29ya3AyID0gd29ya3AgKyBjb2xsX3N5bWJvbF9sZW5ndGggOyB3b3JrcCA8IHdvcmtwMiA7KQorKwkJICB7CisrCQkgICAgY29uc3QgQ0hBUl9UICpiYWNrdXBfZCA9IGQsICpiYWNrdXBfZGVuZCA9IGRlbmQ7CisrIyBpZmRlZiBfTElCQworKwkJICAgIGxlbmd0aCA9IF9fd2NzbGVuICh3b3JrcCk7CisrIyBlbHNlCisrCQkgICAgbGVuZ3RoID0gd2NzbGVuICh3b3JrcCk7CisrIyBlbmRpZgorKworKwkJICAgIC8qIElmIHdjc2NvbGwodGhlIGNvbGxhdGluZyBzeW1ib2wsIHdob2xlIHN0cmluZykgPiAwLAorKwkJICAgICAgIGFueSBzdWJzdHJpbmcgb2YgdGhlIHN0cmluZyBuZXZlciBtYXRjaCB3aXRoIHRoZQorKwkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wuICAqLworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBpZiAoX193Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZWxzZQorKwkJICAgIGlmICh3Y3Njb2xsICh3b3JrcCwgZCkgPiAwKQorKyMgZW5kaWYKKysJCSAgICAgIHsKKysJCQl3b3JrcCArPSBsZW5ndGggKyAxOworKwkJCWNvbnRpbnVlOworKwkJICAgICAgfQorKworKwkJICAgIC8qIEZpcnN0LCB3ZSBjb21wYXJlIHRoZSBjb2xsYXRpbmcgc3ltYm9sIHdpdGgKKysJCSAgICAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuCisrCQkgICAgICAgSWYgaXQgZG9uJ3QgbWF0Y2gsIHdlIGFkZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8KKysJCSAgICAgICB0aGUgY29tcGFyZSBidWZmZXIgaW4gdHVybi4gICovCisrCQkgICAgZm9yIChpID0gMCA7IGkgPCBXT1JLX0JVRkZFUl9TSVpFLTEgOyBpKyssIGQrKykKKysJCSAgICAgIHsKKysJCQlpbnQgbWF0Y2g7CisrCQkJaWYgKGQgPT0gZGVuZCkKKysJCQkgIHsKKysJCQkgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpCisrCQkJICAgICAgYnJlYWs7CisrCQkJICAgIGQgPSBzdHJpbmcyOworKwkJCSAgICBkZW5kID0gZW5kX21hdGNoXzI7CisrCQkJICB9CisrCisrCQkJLyogYWRkIG5leHQgY2hhcmFjdGVyIHRvIHRoZSBjb21wYXJlIGJ1ZmZlci4gICovCisrCQkJc3RyX2J1ZltpXSA9IFRSQU5TTEFURSgqZCk7CisrCQkJc3RyX2J1ZltpKzFdID0gJ1wwJzsKKysKKysjIGlmZGVmIF9MSUJDCisrCQkJbWF0Y2ggPSBfX3djc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVsc2UKKysJCQltYXRjaCA9IHdjc2NvbGwgKHdvcmtwLCBzdHJfYnVmKTsKKysjIGVuZGlmCisrCQkJaWYgKG1hdGNoID09IDApCisrCQkJICBnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCisrCQkJaWYgKG1hdGNoIDwgMCkKKysJCQkgIC8qIChzdHJfYnVmID4gd29ya3ApIGluZGljYXRlIChzdHJfYnVmICsgWCA+IHdvcmtwKSwKKysJCQkgICAgIGJlY2F1c2UgZm9yIGFsbCBYIChzdHJfYnVmICsgWCA+IHN0cl9idWYpLgorKwkJCSAgICAgU28gd2UgZG9uJ3QgbmVlZCBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJCSAgYnJlYWs7CisrCisrCQkJLyogT3RoZXJ3aXNlKHN0cl9idWYgPCB3b3JrcCksCisrCQkJICAgKHN0cl9idWYrbmV4dF9jaGFyYWN0ZXIpIG1heSBlcXVhbHMgKHdvcmtwKS4KKysJCQkgICBTbyB3ZSBjb250aW51ZSB0aGlzIGxvb3AuICAqLworKwkJICAgICAgfQorKwkJICAgIC8qIG5vdCBtYXRjaGVkICovCisrCQkgICAgZCA9IGJhY2t1cF9kOworKwkJICAgIGRlbmQgPSBiYWNrdXBfZGVuZDsKKysJCSAgICB3b3JrcCArPSBsZW5ndGggKyAxOworKwkJICB9CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBlcXVpdmFsZW5jZV9jbGFzcz8gICovCisrIyBpZmRlZiBfTElCQworKwkgICAgaWYgKG5ydWxlcyAhPSAwKQorKwkgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqYmFja3VwX2QgPSBkLCAqYmFja3VwX2RlbmQgPSBkZW5kOworKwkJLyogVHJ5IHRvIG1hdGNoIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBhZ2FpbnN0CisrCQkgICB0aG9zZSBrbm93biB0byB0aGUgY29sbGF0ZSBpbXBsZW1lbnRhdGlvbi4gICovCisrCQljb25zdCBpbnQzMl90ICp0YWJsZTsKKysJCWNvbnN0IGludDMyX3QgKndlaWdodHM7CisrCQljb25zdCBpbnQzMl90ICpleHRyYTsKKysJCWNvbnN0IGludDMyX3QgKmluZGlyZWN0OworKwkJaW50MzJfdCBpZHgsIGlkeDI7CisrCQl3aW50X3QgKmNwOworKwkJc2l6ZV90IGxlbjsKKysKKysJCXRhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFV0MpOworKwkJd2VpZ2h0cyA9IChjb25zdCB3aW50X3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1dFSUdIVFdDKTsKKysJCWV4dHJhID0gKGNvbnN0IHdpbnRfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFXQyk7CisrCQlpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9JTkRJUkVDVFdDKTsKKysKKysJCS8qIFdyaXRlIDEgY29sbGF0aW5nIGVsZW1lbnQgdG8gc3RyX2J1ZiwgYW5kCisrCQkgICBnZXQgaXRzIGluZGV4LiAgKi8KKysJCWlkeDIgPSAwOworKworKwkJZm9yIChpID0gMCA7IGlkeDIgPT0gMCAmJiBpIDwgV09SS19CVUZGRVJfU0laRSAtIDE7IGkrKykKKysJCSAgeworKwkJICAgIGNwID0gKHdpbnRfdCopc3RyX2J1ZjsKKysJCSAgICBpZiAoZCA9PSBkZW5kKQorKwkJICAgICAgeworKwkJCWlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCSAgYnJlYWs7CisrCQkJZCA9IHN0cmluZzI7CisrCQkJZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJICAgICAgfQorKwkJICAgIHN0cl9idWZbaV0gPSBUUkFOU0xBVEUoKihkK2kpKTsKKysJCSAgICBzdHJfYnVmW2krMV0gPSAnXDAnOyAvKiBzZW50aW5lbCAqLworKwkJICAgIGlkeDIgPSBGSU5ESURYICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworKwkJICB9CisrCisrCQkvKiBVcGRhdGUgZCwgaG93ZXZlciBkIHdpbGwgYmUgaW5jcmVtZW50ZWQgYXQKKysJCSAgIGNoYXJfc2V0X21hdGNoZWQ6LCB3ZSBkZWNyZW1lbnQgZCBoZXJlLiAgKi8KKysJCWQgPSBiYWNrdXBfZCArICgod2NoYXJfdCopY3AgLSAod2NoYXJfdCopc3RyX2J1ZiAtIDEpOworKwkJaWYgKGQgPj0gZGVuZCkKKysJCSAgeworKwkJICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCWQgPSBkZW5kOworKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQlkID0gc3RyaW5nMjsKKysJCQlkZW5kID0gZW5kX21hdGNoXzI7CisrCQkgICAgICB9CisrCQkgIH0KKysKKysJCWxlbiA9IHdlaWdodHNbaWR4Ml07CisrCisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgZXF1aXZfY2xhc3NfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOworKwkJICAgICB3b3JrcCsrKQorKwkJICB7CisrCQkgICAgaWR4ID0gKGludDMyX3QpKndvcmtwOworKwkJICAgIC8qIFdlIGFscmVhZHkgY2hlY2tlZCBpZHggIT0gMCBpbiByZWdleF9jb21waWxlLiAqLworKworKwkJICAgIGlmIChpZHgyICE9IDAgJiYgbGVuID09IHdlaWdodHNbaWR4XSkKKysJCSAgICAgIHsKKysJCQlpbnQgY250ID0gMDsKKysJCQl3aGlsZSAoY250IDwgbGVuICYmICh3ZWlnaHRzW2lkeCArIDEgKyBjbnRdCisrCQkJCQkgICAgID09IHdlaWdodHNbaWR4MiArIDEgKyBjbnRdKSkKKysJCQkgICsrY250OworKworKwkJCWlmIChjbnQgPT0gbGVuKQorKwkJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICAgICAgfQorKwkJICB9CisrCQkvKiBub3QgbWF0Y2hlZCAqLworKyAgICAgICAgICAgICAgICBkID0gYmFja3VwX2Q7CisrICAgICAgICAgICAgICAgIGRlbmQgPSBiYWNrdXBfZGVuZDsKKysJICAgICAgfQorKwkgICAgZWxzZSAvKiAobnJ1bGVzID09IDApICovCisrIyBlbmRpZgorKwkgICAgICAvKiBJZiB3ZSBjYW4ndCBsb29rIHVwIGNvbGxhdGlvbiBkYXRhLCB3ZSB1c2Ugd2NzY29sbAorKwkJIGluc3RlYWQuICAqLworKwkgICAgICB7CisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgZXF1aXZfY2xhc3NfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOykKKysJCSAgeworKwkJICAgIGNvbnN0IENIQVJfVCAqYmFja3VwX2QgPSBkLCAqYmFja3VwX2RlbmQgPSBkZW5kOworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBsZW5ndGggPSBfX3djc2xlbiAod29ya3ApOworKyMgZWxzZQorKwkJICAgIGxlbmd0aCA9IHdjc2xlbiAod29ya3ApOworKyMgZW5kaWYKKysKKysJCSAgICAvKiBJZiB3Y3Njb2xsKHRoZSBjb2xsYXRpbmcgc3ltYm9sLCB3aG9sZSBzdHJpbmcpID4gMCwKKysJCSAgICAgICBhbnkgc3Vic3RyaW5nIG9mIHRoZSBzdHJpbmcgbmV2ZXIgbWF0Y2ggd2l0aCB0aGUKKysJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgaWYgKF9fd2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVsc2UKKysJCSAgICBpZiAod2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVuZGlmCisrCQkgICAgICB7CisrCQkJd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCQlicmVhazsKKysJCSAgICAgIH0KKysKKysJCSAgICAvKiBGaXJzdCwgd2UgY29tcGFyZSB0aGUgZXF1aXZhbGVuY2UgY2xhc3Mgd2l0aAorKwkJICAgICAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4KKysJCSAgICAgICBJZiBpdCBkb24ndCBtYXRjaCwgd2UgYWRkIHRoZSBuZXh0IGNoYXJhY3RlciB0bworKwkJICAgICAgIHRoZSBjb21wYXJlIGJ1ZmZlciBpbiB0dXJuLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwIDsgaSA8IFdPUktfQlVGRkVSX1NJWkUgLSAxIDsgaSsrLCBkKyspCisrCQkgICAgICB7CisrCQkJaW50IG1hdGNoOworKwkJCWlmIChkID09IGRlbmQpCisrCQkJICB7CisrCQkJICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICBkID0gc3RyaW5nMjsKKysJCQkgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJCSAgfQorKworKwkJCS8qIGFkZCBuZXh0IGNoYXJhY3RlciB0byB0aGUgY29tcGFyZSBidWZmZXIuICAqLworKwkJCXN0cl9idWZbaV0gPSBUUkFOU0xBVEUoKmQpOworKwkJCXN0cl9idWZbaSsxXSA9ICdcMCc7CisrCisrIyBpZmRlZiBfTElCQworKwkJCW1hdGNoID0gX193Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbHNlCisrCQkJbWF0Y2ggPSB3Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbmRpZgorKworKwkJCWlmIChtYXRjaCA9PSAwKQorKwkJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKworKwkJCWlmIChtYXRjaCA8IDApCisrCQkJLyogKHN0cl9idWYgPiB3b3JrcCkgaW5kaWNhdGUgKHN0cl9idWYgKyBYID4gd29ya3ApLAorKwkJCSAgIGJlY2F1c2UgZm9yIGFsbCBYIChzdHJfYnVmICsgWCA+IHN0cl9idWYpLgorKwkJCSAgIFNvIHdlIGRvbid0IG5lZWQgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCQkgIGJyZWFrOworKworKwkJCS8qIE90aGVyd2lzZShzdHJfYnVmIDwgd29ya3ApLAorKwkJCSAgIChzdHJfYnVmK25leHRfY2hhcmFjdGVyKSBtYXkgZXF1YWxzICh3b3JrcCkuCisrCQkJICAgU28gd2UgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCSAgICAgIH0KKysJCSAgICAvKiBub3QgbWF0Y2hlZCAqLworKwkJICAgIGQgPSBiYWNrdXBfZDsKKysJCSAgICBkZW5kID0gYmFja3VwX2RlbmQ7CisrCQkgICAgd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCSAgfQorKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyX3JhbmdlPyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCSAgICBpZiAobnJ1bGVzICE9IDApCisrCSAgICAgIHsKKysJCXVpbnQzMl90IGNvbGxzZXF2YWw7CisrCQljb25zdCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IGNoYXIgKikKKysJCSAgX05MX0NVUlJFTlQoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKysKKysJCWNvbGxzZXF2YWwgPSBjb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcSwgYyk7CisrCisrCQlmb3IgKDsgd29ya3AgPCBwIC0gY2hhcnNfbGVuZ3RoIDspCisrCQkgIHsKKysJCSAgICB1aW50MzJfdCBzdGFydF92YWwsIGVuZF92YWw7CisrCisrCQkgICAgLyogV2UgYWxyZWFkeSBjb21wdXRlIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUKKysJCSAgICAgICBvZiB0aGUgY2hhcmFjdGVycyAob3IgY29sbGF0aW5nIHN5bWJvbHMpLiAgKi8KKysJCSAgICBzdGFydF92YWwgPSAodWludDMyX3QpICp3b3JrcCsrOyAvKiByYW5nZV9zdGFydCAqLworKwkJICAgIGVuZF92YWwgPSAodWludDMyX3QpICp3b3JrcCsrOyAvKiByYW5nZV9lbmQgKi8KKysKKysJCSAgICBpZiAoc3RhcnRfdmFsIDw9IGNvbGxzZXF2YWwgJiYgY29sbHNlcXZhbCA8PSBlbmRfdmFsKQorKwkJICAgICAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysjIGVuZGlmCisrCSAgICAgIHsKKysJCS8qIFdlIHNldCByYW5nZV9zdGFydF9jaGFyIGF0IHN0cl9idWZbMF0sIHJhbmdlX2VuZF9jaGFyCisrCQkgICBhdCBzdHJfYnVmWzRdLCBhbmQgY29tcGFyZWQgY2hhciBhdCBzdHJfYnVmWzJdLiAgKi8KKysJCXN0cl9idWZbMV0gPSAwOworKwkJc3RyX2J1ZlsyXSA9IGM7CisrCQlzdHJfYnVmWzNdID0gMDsKKysJCXN0cl9idWZbNV0gPSAwOworKwkJZm9yICg7IHdvcmtwIDwgcCAtIGNoYXJzX2xlbmd0aCA7KQorKwkJICB7CisrCQkgICAgd2NoYXJfdCAqcmFuZ2Vfc3RhcnRfY2hhciwgKnJhbmdlX2VuZF9jaGFyOworKworKwkJICAgIC8qIG1hdGNoIGlmIChyYW5nZV9zdGFydF9jaGFyIDw9IGMgPD0gcmFuZ2VfZW5kX2NoYXIpLiAgKi8KKysKKysJCSAgICAvKiBJZiByYW5nZV9zdGFydChvciBlbmQpIDwgMCwgd2UgYXNzdW1lIC1yYW5nZV9zdGFydChlbmQpCisrCQkgICAgICAgaXMgdGhlIG9mZnNldCBvZiB0aGUgY29sbGF0aW5nIHN5bWJvbCB3aGljaCBpcyBzcGVjaWZpZWQKKysJCSAgICAgICBhcyB0aGUgY2hhcmFjdGVyIG9mIHRoZSByYW5nZSBzdGFydChlbmQpLiAgKi8KKysKKysJCSAgICAvKiByYW5nZV9zdGFydCAqLworKwkJICAgIGlmICgqd29ya3AgPCAwKQorKwkJICAgICAgcmFuZ2Vfc3RhcnRfY2hhciA9IGNoYXJzZXRfdG9wIC0gKCp3b3JrcCsrKTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJc3RyX2J1ZlswXSA9ICp3b3JrcCsrOworKwkJCXJhbmdlX3N0YXJ0X2NoYXIgPSBzdHJfYnVmOworKwkJICAgICAgfQorKworKwkJICAgIC8qIHJhbmdlX2VuZCAqLworKwkJICAgIGlmICgqd29ya3AgPCAwKQorKwkJICAgICAgcmFuZ2VfZW5kX2NoYXIgPSBjaGFyc2V0X3RvcCAtICgqd29ya3ArKyk7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCXN0cl9idWZbNF0gPSAqd29ya3ArKzsKKysJCQlyYW5nZV9lbmRfY2hhciA9IHN0cl9idWYgKyA0OworKwkJICAgICAgfQorKworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBpZiAoX193Y3Njb2xsIChyYW5nZV9zdGFydF9jaGFyLCBzdHJfYnVmKzIpIDw9IDAKKysJCQkmJiBfX3djc2NvbGwgKHN0cl9idWYrMiwgcmFuZ2VfZW5kX2NoYXIpIDw9IDApCisrIyBlbHNlCisrCQkgICAgaWYgKHdjc2NvbGwgKHJhbmdlX3N0YXJ0X2NoYXIsIHN0cl9idWYrMikgPD0gMAorKwkJCSYmIHdjc2NvbGwgKHN0cl9idWYrMiwgcmFuZ2VfZW5kX2NoYXIpIDw9IDApCisrIyBlbmRpZgorKwkJICAgICAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKwkJICB9CisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXI/ICAqLworKwkgICAgZm9yICg7IHdvcmtwIDwgcCA7IHdvcmtwKyspCisrCSAgICAgIGlmIChjID09ICp3b3JrcCkKKysJCWdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysKKysJICAgIG5lZ2F0ZSA9ICFuZWdhdGU7CisrCisrCSAgY2hhcl9zZXRfbWF0Y2hlZDoKKysJICAgIGlmIChuZWdhdGUpIGdvdG8gZmFpbDsKKysjZWxzZQorKyAgICAgICAgICAgIC8qIENhc3QgdG8gYHVuc2lnbmVkJyBpbnN0ZWFkIG9mIGB1bnNpZ25lZCBjaGFyJyBpbiBjYXNlIHRoZQorKyAgICAgICAgICAgICAgIGJpdCBsaXN0IGlzIGEgZnVsbCAzMiBieXRlcyBsb25nLiAgKi8KKysJICAgIGlmIChjIDwgKHVuc2lnbmVkKSAoKnAgKiBCWVRFV0lEVEgpCisrCQkmJiBwWzEgKyBjIC8gQllURVdJRFRIXSAmICgxIDw8IChjICUgQllURVdJRFRIKSkpCisrCSAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7CisrCisrCSAgICBwICs9IDEgKyAqcDsKKysKKysJICAgIGlmICghbmVnYXRlKSBnb3RvIGZhaWw7CisrI3VuZGVmIFdPUktfQlVGRkVSX1NJWkUKKysjZW5kaWYgLyogV0NIQVIgKi8KKysJICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgICAgZCsrOworKwkgICAgYnJlYWs7CisrCSAgfQorKworKworKyAgICAgICAgLyogVGhlIGJlZ2lubmluZyBvZiBhIGdyb3VwIGlzIHJlcHJlc2VudGVkIGJ5IHN0YXJ0X21lbW9yeS4KKysgICAgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSByZWdpc3RlciBudW1iZXIgaW4gdGhlIG5leHQgYnl0ZSwgYW5kIHRoZQorKyAgICAgICAgICAgbnVtYmVyIG9mIGdyb3VwcyBpbm5lciB0byB0aGlzIG9uZSBpbiB0aGUgbmV4dC4gIFRoZSB0ZXh0CisrICAgICAgICAgICBtYXRjaGVkIHdpdGhpbiB0aGUgZ3JvdXAgaXMgcmVjb3JkZWQgKGluIHRoZSBpbnRlcm5hbAorKyAgICAgICAgICAgcmVnaXN0ZXJzIGRhdGEgc3RydWN0dXJlKSB1bmRlciB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKysgICAgICAgIGNhc2Ugc3RhcnRfbWVtb3J5OgorKwkgIERFQlVHX1BSSU5UMyAoIkVYRUNVVElORyBzdGFydF9tZW1vcnkgJWxkICglbGQpOlxuIiwKKysJCQkobG9uZyBpbnQpICpwLCAobG9uZyBpbnQpIHBbMV0pOworKworKyAgICAgICAgICAvKiBGaW5kIG91dCBpZiB0aGlzIGdyb3VwIGNhbiBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKysJICBwMSA9IHA7CQkvKiBUbyBzZW5kIHRvIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AuICAqLworKworKyAgICAgICAgICBpZiAoUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkgPT0gTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRSkKKysgICAgICAgICAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgPSBQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgcGVuZCwgcmVnX2luZm8pOworKworKyAgICAgICAgICAvKiBTYXZlIHRoZSBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHdoZXJlIHdlIHdlcmUgdGhlIGxhc3QgdGltZQorKyAgICAgICAgICAgICB3ZSB3ZXJlIGF0IHRoaXMgb3Blbi1ncm91cCBvcGVyYXRvciBpbiBjYXNlIHRoZSBncm91cCBpcworKyAgICAgICAgICAgICBvcGVyYXRlZCB1cG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciwgZS5nLiwgd2l0aCBgKGEqKSpiJworKyAgICAgICAgICAgICBhZ2FpbnN0IGBhYic7IHRoZW4gd2Ugd2FudCB0byBpZ25vcmUgd2hlcmUgd2UgYXJlIG5vdyBpbgorKyAgICAgICAgICAgICB0aGUgc3RyaW5nIGluIGNhc2UgdGhpcyBhdHRlbXB0IHRvIG1hdGNoIGZhaWxzLiAgKi8KKysgICAgICAgICAgb2xkX3JlZ3N0YXJ0WypwXSA9IFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFJFR19VTlNFVCAocmVnc3RhcnRbKnBdKSA/IGQgOiByZWdzdGFydFsqcF0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVnc3RhcnRbKnBdOworKwkgIERFQlVHX1BSSU5UMiAoIiAgb2xkX3JlZ3N0YXJ0OiAlZFxuIiwKKysJCQkgUE9JTlRFUl9UT19PRkZTRVQgKG9sZF9yZWdzdGFydFsqcF0pKTsKKysKKysgICAgICAgICAgcmVnc3RhcnRbKnBdID0gZDsKKysJICBERUJVR19QUklOVDIgKCIgIHJlZ3N0YXJ0OiAlZFxuIiwgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ3N0YXJ0WypwXSkpOworKworKyAgICAgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZvWypwXSkgPSAxOworKyAgICAgICAgICBNQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKSA9IDA7CisrCisrCSAgLyogQ2xlYXIgdGhpcyB3aGVuZXZlciB3ZSBjaGFuZ2UgdGhlIHJlZ2lzdGVyIGFjdGl2aXR5IHN0YXR1cy4gICovCisrCSAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsKKysKKysgICAgICAgICAgLyogVGhpcyBpcyB0aGUgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyLiAgKi8KKysgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gKnA7CisrCisrICAgICAgICAgIC8qIElmIG5vdGhpbmcgd2FzIGFjdGl2ZSBiZWZvcmUsIHRoaXMgaXMgdGhlIG5ldyBsb3dlc3QgYWN0aXZlCisrICAgICAgICAgICAgIHJlZ2lzdGVyLiAgKi8KKysgICAgICAgICAgaWYgKGxvd2VzdF9hY3RpdmVfcmVnID09IE5PX0xPV0VTVF9BQ1RJVkVfUkVHKQorKyAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gKnA7CisrCisrICAgICAgICAgIC8qIE1vdmUgcGFzdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCBpbm5lciBncm91cCBjb3VudC4gICovCisrICAgICAgICAgIHAgKz0gMjsKKysJICBqdXN0X3Bhc3Rfc3RhcnRfbWVtID0gcDsKKysKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBUaGUgc3RvcF9tZW1vcnkgb3Bjb2RlIHJlcHJlc2VudHMgdGhlIGVuZCBvZiBhIGdyb3VwLiAgSXRzCisrICAgICAgICAgICBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHN0YXJ0X21lbW9yeSdzOiB0aGUgcmVnaXN0ZXIKKysgICAgICAgICAgIG51bWJlciwgYW5kIHRoZSBudW1iZXIgb2YgaW5uZXIgZ3JvdXBzLiAgKi8KKysJY2FzZSBzdG9wX21lbW9yeToKKysJICBERUJVR19QUklOVDMgKCJFWEVDVVRJTkcgc3RvcF9tZW1vcnkgJWxkICglbGQpOlxuIiwKKysJCQkobG9uZyBpbnQpICpwLCAobG9uZyBpbnQpIHBbMV0pOworKworKyAgICAgICAgICAvKiBXZSBuZWVkIHRvIHNhdmUgdGhlIHN0cmluZyBwb3NpdGlvbiB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgYXQKKysgICAgICAgICAgICAgdGhpcyBjbG9zZS1ncm91cCBvcGVyYXRvciBpbiBjYXNlIHRoZSBncm91cCBpcyBvcGVyYXRlZAorKyAgICAgICAgICAgICB1cG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciwgZS5nLiwgd2l0aCBgKChhKikqKGIqKSopKicKKysgICAgICAgICAgICAgYWdhaW5zdCBgYWJhJzsgdGhlbiB3ZSB3YW50IHRvIGlnbm9yZSB3aGVyZSB3ZSBhcmUgbm93IGluCisrICAgICAgICAgICAgIHRoZSBzdHJpbmcgaW4gY2FzZSB0aGlzIGF0dGVtcHQgdG8gbWF0Y2ggZmFpbHMuICAqLworKyAgICAgICAgICBvbGRfcmVnZW5kWypwXSA9IFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBSRUdfVU5TRVQgKHJlZ2VuZFsqcF0pID8gZCA6IHJlZ2VuZFsqcF0KKysJCQkgICA6IHJlZ2VuZFsqcF07CisrCSAgREVCVUdfUFJJTlQyICgiICAgICAgb2xkX3JlZ2VuZDogJWRcbiIsCisrCQkJIFBPSU5URVJfVE9fT0ZGU0VUIChvbGRfcmVnZW5kWypwXSkpOworKworKyAgICAgICAgICByZWdlbmRbKnBdID0gZDsKKysJICBERUJVR19QUklOVDIgKCIgICAgICByZWdlbmQ6ICVkXG4iLCBQT0lOVEVSX1RPX09GRlNFVCAocmVnZW5kWypwXSkpOworKworKyAgICAgICAgICAvKiBUaGlzIHJlZ2lzdGVyIGlzbid0IGFjdGl2ZSBhbnltb3JlLiAgKi8KKysgICAgICAgICAgSVNfQUNUSVZFIChyZWdfaW5mb1sqcF0pID0gMDsKKysKKysJICAvKiBDbGVhciB0aGlzIHdoZW5ldmVyIHdlIGNoYW5nZSB0aGUgcmVnaXN0ZXIgYWN0aXZpdHkgc3RhdHVzLiAgKi8KKysJICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOworKworKyAgICAgICAgICAvKiBJZiB0aGlzIHdhcyB0aGUgb25seSByZWdpc3RlciBhY3RpdmUsIG5vdGhpbmcgaXMgYWN0aXZlCisrICAgICAgICAgICAgIGFueW1vcmUuICAqLworKyAgICAgICAgICBpZiAobG93ZXN0X2FjdGl2ZV9yZWcgPT0gaGlnaGVzdF9hY3RpdmVfcmVnKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gTk9fTE9XRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBOT19ISUdIRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeyAvKiBXZSBtdXN0IHNjYW4gZm9yIHRoZSBuZXcgaGlnaGVzdCBhY3RpdmUgcmVnaXN0ZXIsIHNpbmNlCisrICAgICAgICAgICAgICAgICBpdCBpc24ndCBuZWNlc3NhcmlseSBvbmUgbGVzcyB0aGFuIG5vdzogY29uc2lkZXIKKysgICAgICAgICAgICAgICAgIChhKGIpYyhkKGUpZilnKS4gIFdoZW4gZ3JvdXAgMyBlbmRzLCBhZnRlciB0aGUgZiksIHRoZQorKyAgICAgICAgICAgICAgICAgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyIGlzIDEuICAqLworKyAgICAgICAgICAgICAgVUNIQVJfVCByID0gKnAgLSAxOworKyAgICAgICAgICAgICAgd2hpbGUgKHIgPiAwICYmICFJU19BQ1RJVkUgKHJlZ19pbmZvW3JdKSkKKysgICAgICAgICAgICAgICAgci0tOworKworKyAgICAgICAgICAgICAgLyogSWYgd2UgZW5kIHVwIGF0IHJlZ2lzdGVyIHplcm8sIHRoYXQgbWVhbnMgdGhhdCB3ZSBzYXZlZAorKyAgICAgICAgICAgICAgICAgdGhlIHJlZ2lzdGVycyBhcyB0aGUgcmVzdWx0IG9mIGFuIGBvbl9mYWlsdXJlX2p1bXAnLCBub3QKKysgICAgICAgICAgICAgICAgIGEgYHN0YXJ0X21lbW9yeScsIGFuZCB3ZSBqdW1wZWQgdG8gcGFzdCB0aGUgaW5uZXJtb3N0CisrICAgICAgICAgICAgICAgICBgc3RvcF9tZW1vcnknLiAgRm9yIGV4YW1wbGUsIGluICgoLikqKSB3ZSBzYXZlCisrICAgICAgICAgICAgICAgICByZWdpc3RlcnMgMSBhbmQgMiBhcyBhIHJlc3VsdCBvZiB0aGUgKiwgYnV0IHdoZW4gd2UgcG9wCisrICAgICAgICAgICAgICAgICBiYWNrIHRvIHRoZSBzZWNvbmQgKSwgd2UgYXJlIGF0IHRoZSBzdG9wX21lbW9yeSAxLgorKyAgICAgICAgICAgICAgICAgVGh1cywgbm90aGluZyBpcyBhY3RpdmUuICAqLworKwkgICAgICBpZiAociA9PSAwKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSBOT19MT1dFU1RfQUNUSVZFX1JFRzsKKysgICAgICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBOT19ISUdIRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gcjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIElmIGp1c3QgZmFpbGVkIHRvIG1hdGNoIHNvbWV0aGluZyB0aGlzIHRpbWUgYXJvdW5kIHdpdGggYQorKyAgICAgICAgICAgICBncm91cCB0aGF0J3Mgb3BlcmF0ZWQgb24gYnkgYSByZXBldGl0aW9uIG9wZXJhdG9yLCB0cnkgdG8KKysgICAgICAgICAgICAgZm9yY2UgZXhpdCBmcm9tIHRoZSBgYGxvb3AnJywgYW5kIHJlc3RvcmUgdGhlIHJlZ2lzdGVyCisrICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZvciB0aGlzIGdyb3VwIHRoYXQgd2UgaGFkIGJlZm9yZSB0cnlpbmcgdGhpcworKyAgICAgICAgICAgICBsYXN0IG1hdGNoLiAgKi8KKysgICAgICAgICAgaWYgKCghTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgICB8fCBqdXN0X3Bhc3Rfc3RhcnRfbWVtID09IHAgLSAxKQorKwkgICAgICAmJiAocCArIDIpIDwgcGVuZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBib29sZWFuIGlzX2FfanVtcF9uID0gZmFsc2U7CisrCisrICAgICAgICAgICAgICBwMSA9IHAgKyAyOworKyAgICAgICAgICAgICAgbWNudCA9IDA7CisrICAgICAgICAgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKyspCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICBjYXNlIGp1bXBfbjoKKysJCSAgICBpc19hX2p1bXBfbiA9IHRydWU7CisrICAgICAgICAgICAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKwkJICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKwkJICBjYXNlIGp1bXA6CisrCQkgIGNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysJCSAgICBpZiAoaXNfYV9qdW1wX24pCisrCQkgICAgICBwMSArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8gOworKyAgICAgICAgICAgICAgICB9CisrCSAgICAgIHAxICs9IG1jbnQ7CisrCisrICAgICAgICAgICAgICAvKiBJZiB0aGUgbmV4dCBvcGVyYXRpb24gaXMgYSBqdW1wIGJhY2t3YXJkcyBpbiB0aGUgcGF0dGVybgorKwkgICAgICAgICB0byBhbiBvbl9mYWlsdXJlX2p1bXAgcmlnaHQgYmVmb3JlIHRoZSBzdGFydF9tZW1vcnkKKysgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzdG9wX21lbW9yeSwgZXhpdCBmcm9tIHRoZSBsb29wCisrICAgICAgICAgICAgICAgICBieSBmb3JjaW5nIGEgZmFpbHVyZSBhZnRlciBwdXNoaW5nIG9uIHRoZSBzdGFjayB0aGUKKysgICAgICAgICAgICAgICAgIG9uX2ZhaWx1cmVfanVtcCdzIGp1bXAgaW4gdGhlIHBhdHRlcm4sIGFuZCBkLiAgKi8KKysgICAgICAgICAgICAgIGlmIChtY250IDwgMCAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBvbl9mYWlsdXJlX2p1bXAKKysgICAgICAgICAgICAgICAgICAmJiAocmVfb3Bjb2RlX3QpIHAxWzErT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gc3RhcnRfbWVtb3J5CisrCQkgICYmIHAxWzIrT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gKnApCisrCQl7CisrICAgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBncm91cCBldmVyIG1hdGNoZWQgYW55dGhpbmcsIHRoZW4gcmVzdG9yZQorKyAgICAgICAgICAgICAgICAgICAgIHdoYXQgaXRzIHJlZ2lzdGVycyB3ZXJlIGJlZm9yZSB0cnlpbmcgdGhpcyBsYXN0CisrICAgICAgICAgICAgICAgICAgICAgZmFpbGVkIG1hdGNoLCBlLmcuLCB3aXRoIGAoYSopKmInIGFnYWluc3QgYGFiJyBmb3IKKysgICAgICAgICAgICAgICAgICAgICByZWdzdGFydFsxXSwgYW5kLCBlLmcuLCB3aXRoIGAoKGEqKSooYiopKikqJworKyAgICAgICAgICAgICAgICAgICAgIGFnYWluc3QgYGFiYScgZm9yIHJlZ2VuZFszXS4KKysKKysgICAgICAgICAgICAgICAgICAgICBBbHNvIHJlc3RvcmUgdGhlIHJlZ2lzdGVycyBmb3IgaW5uZXIgZ3JvdXBzIGZvciwKKysgICAgICAgICAgICAgICAgICAgICBlLmcuLCBgKChhKikoYiopKSonIGFnYWluc3QgYGFiYScgKHJlZ2lzdGVyIDMgd291bGQKKysgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgZ2V0IHRyYXNoZWQpLiAgKi8KKysKKysgICAgICAgICAgICAgICAgICBpZiAoRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKSkKKysJCSAgICB7CisrCQkgICAgICB1bnNpZ25lZCByOworKworKyAgICAgICAgICAgICAgICAgICAgICBFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pID0gMDsKKysKKysJCSAgICAgIC8qIFJlc3RvcmUgdGhpcyBhbmQgaW5uZXIgZ3JvdXBzJyAoaWYgYW55KSByZWdpc3RlcnMuICAqLworKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHIgPSAqcDsgciA8ICh1bnNpZ25lZCkgKnAgKyAodW5zaWduZWQpICoocCArIDEpOworKwkJCSAgIHIrKykKKysgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzdGFydFtyXSA9IG9sZF9yZWdzdGFydFtyXTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHh4IHdoeSB0aGlzIHRlc3Q/ICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZF9yZWdlbmRbcl0gPj0gcmVnc3RhcnRbcl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2VuZFtyXSA9IG9sZF9yZWdlbmRbcl07CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKwkJICBwMSsrOworKyAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChwMSArIG1jbnQsIGQsIC0yKTsKKysKKysgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIE1vdmUgcGFzdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCB0aGUgaW5uZXIgZ3JvdXAgY291bnQuICAqLworKyAgICAgICAgICBwICs9IDI7CisrICAgICAgICAgIGJyZWFrOworKworKworKwkvKiBcPGRpZ2l0PiBoYXMgYmVlbiB0dXJuZWQgaW50byBhIGBkdXBsaWNhdGUnIGNvbW1hbmQgd2hpY2ggaXMKKysgICAgICAgICAgIGZvbGxvd2VkIGJ5IHRoZSBudW1lcmljIHZhbHVlIG9mIDxkaWdpdD4gYXMgdGhlIHJlZ2lzdGVyIG51bWJlci4gICovCisrICAgICAgICBjYXNlIGR1cGxpY2F0ZToKKysJICB7CisrCSAgICByZWdpc3RlciBjb25zdCBDSEFSX1QgKmQyLCAqZGVuZDI7CisrCSAgICBpbnQgcmVnbm8gPSAqcCsrOyAgIC8qIEdldCB3aGljaCByZWdpc3RlciB0byBtYXRjaCBhZ2FpbnN0LiAgKi8KKysJICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBkdXBsaWNhdGUgJWQuXG4iLCByZWdubyk7CisrCisrCSAgICAvKiBDYW4ndCBiYWNrIHJlZmVyZW5jZSBhIGdyb3VwIHdoaWNoIHdlJ3ZlIG5ldmVyIG1hdGNoZWQuICAqLworKyAgICAgICAgICAgIGlmIChSRUdfVU5TRVQgKHJlZ3N0YXJ0W3JlZ25vXSkgfHwgUkVHX1VOU0VUIChyZWdlbmRbcmVnbm9dKSkKKysgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgICAgICAvKiBXaGVyZSBpbiBpbnB1dCB0byB0cnkgdG8gc3RhcnQgbWF0Y2hpbmcuICAqLworKyAgICAgICAgICAgIGQyID0gcmVnc3RhcnRbcmVnbm9dOworKworKyAgICAgICAgICAgIC8qIFdoZXJlIHRvIHN0b3AgbWF0Y2hpbmc7IGlmIGJvdGggdGhlIHBsYWNlIHRvIHN0YXJ0IGFuZAorKyAgICAgICAgICAgICAgIHRoZSBwbGFjZSB0byBzdG9wIG1hdGNoaW5nIGFyZSBpbiB0aGUgc2FtZSBzdHJpbmcsIHRoZW4KKysgICAgICAgICAgICAgICBzZXQgdG8gdGhlIHBsYWNlIHRvIHN0b3AsIG90aGVyd2lzZSwgZm9yIG5vdyBoYXZlIHRvIHVzZQorKyAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIGZpcnN0IHN0cmluZy4gICovCisrCisrICAgICAgICAgICAgZGVuZDIgPSAoKEZJUlNUX1NUUklOR19QIChyZWdzdGFydFtyZWdub10pCisrCQkgICAgICA9PSBGSVJTVF9TVFJJTkdfUCAocmVnZW5kW3JlZ25vXSkpCisrCQkgICAgID8gcmVnZW5kW3JlZ25vXSA6IGVuZF9tYXRjaF8xKTsKKysJICAgIGZvciAoOzspCisrCSAgICAgIHsKKysJCS8qIElmIG5lY2Vzc2FyeSwgYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgaW4gcmVnaXN0ZXIKKysgICAgICAgICAgICAgICAgICAgY29udGVudHMuICAqLworKwkJd2hpbGUgKGQyID09IGRlbmQyKQorKwkJICB7CisrCQkgICAgaWYgKGRlbmQyID09IGVuZF9tYXRjaF8yKSBicmVhazsKKysJCSAgICBpZiAoZGVuZDIgPT0gcmVnZW5kW3JlZ25vXSkgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2Ygc3RyaW5nMSA9PiBhZHZhbmNlIHRvIHN0cmluZzIuICovCisrICAgICAgICAgICAgICAgICAgICBkMiA9IHN0cmluZzI7CisrICAgICAgICAgICAgICAgICAgICBkZW5kMiA9IHJlZ2VuZFtyZWdub107CisrCQkgIH0KKysJCS8qIEF0IGVuZCBvZiByZWdpc3RlciBjb250ZW50cyA9PiBzdWNjZXNzICovCisrCQlpZiAoZDIgPT0gZGVuZDIpIGJyZWFrOworKworKwkJLyogSWYgbmVjZXNzYXJ5LCBhZHZhbmNlIHRvIG5leHQgc2VnbWVudCBpbiBkYXRhLiAgKi8KKysJCVBSRUZFVENIICgpOworKworKwkJLyogSG93IG1hbnkgY2hhcmFjdGVycyBsZWZ0IGluIHRoaXMgc2VnbWVudCB0byBtYXRjaC4gICovCisrCQltY250ID0gZGVuZCAtIGQ7CisrCisrCQkvKiBXYW50IGhvdyBtYW55IGNvbnNlY3V0aXZlIGNoYXJhY3RlcnMgd2UgY2FuIG1hdGNoIGluCisrICAgICAgICAgICAgICAgICAgIG9uZSBzaG90LCBzbywgaWYgbmVjZXNzYXJ5LCBhZGp1c3QgdGhlIGNvdW50LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKG1jbnQgPiBkZW5kMiAtIGQyKQorKwkJICBtY250ID0gZGVuZDIgLSBkMjsKKysKKysJCS8qIENvbXBhcmUgdGhhdCBtYW55OyBmYWlsdXJlIGlmIG1pc21hdGNoLCBlbHNlIG1vdmUKKysgICAgICAgICAgICAgICAgICAgcGFzdCB0aGVtLiAgKi8KKysJCWlmICh0cmFuc2xhdGUKKysgICAgICAgICAgICAgICAgICAgID8gUFJFRklYKGJjbXBfdHJhbnNsYXRlKSAoZCwgZDIsIG1jbnQsIHRyYW5zbGF0ZSkKKysgICAgICAgICAgICAgICAgICAgIDogbWVtY21wIChkLCBkMiwgbWNudCpzaXplb2YoVUNIQVJfVCkpKQorKwkJICBnb3RvIGZhaWw7CisrCQlkICs9IG1jbnQsIGQyICs9IG1jbnQ7CisrCisrCQkvKiBEbyB0aGlzIGJlY2F1c2Ugd2UndmUgbWF0Y2ggc29tZSBjaGFyYWN0ZXJzLiAgKi8KKysJCVNFVF9SRUdTX01BVENIRUQgKCk7CisrCSAgICAgIH0KKysJICB9CisrCSAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBiZWdsaW5lIG1hdGNoZXMgdGhlIGVtcHR5IHN0cmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcKKysgICAgICAgICAgICh1bmxlc3MgYG5vdF9ib2wnIGlzIHNldCBpbiBgYnVmcCcpLCBhbmQsIGlmCisrICAgICAgICAgICBgbmV3bGluZV9hbmNob3InIGlzIHNldCwgYWZ0ZXIgbmV3bGluZXMuICAqLworKwljYXNlIGJlZ2xpbmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBiZWdsaW5lLlxuIik7CisrCisrICAgICAgICAgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKCFidWZwLT5ub3RfYm9sKSBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UgaWYgKGRbLTFdID09ICdcbicgJiYgYnVmcC0+bmV3bGluZV9hbmNob3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAvKiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIGZhaWwuICAqLworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrICAgICAgICAvKiBlbmRsaW5lIGlzIHRoZSBkdWFsIG9mIGJlZ2xpbmUuICAqLworKwljYXNlIGVuZGxpbmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBlbmRsaW5lLlxuIik7CisrCisrICAgICAgICAgIGlmIChBVF9TVFJJTkdTX0VORCAoZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKCFidWZwLT5ub3RfZW9sKSBicmVhazsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qIFdlIGhhdmUgdG8gYGBwcmVmZXRjaCcnIHRoZSBuZXh0IGNoYXJhY3Rlci4gICovCisrICAgICAgICAgIGVsc2UgaWYgKChkID09IGVuZDEgPyAqc3RyaW5nMiA6ICpkKSA9PSAnXG4nCisrICAgICAgICAgICAgICAgICAgICYmIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZ290byBmYWlsOworKworKworKwkvKiBNYXRjaCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEuICAqLworKyAgICAgICAgY2FzZSBiZWdidWY6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBiZWdidWYuXG4iKTsKKysgICAgICAgICAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSkKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKworKwkvKiBNYXRjaCBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRhdGEuICAqLworKyAgICAgICAgY2FzZSBlbmRidWY6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBlbmRidWYuXG4iKTsKKysJICBpZiAoQVRfU1RSSU5HU19FTkQgKGQpKQorKwkgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysgICAgICAgIC8qIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCBpcyB1c2VkIHRvIG9wdGltaXplIGAuKlxuJy4gIEl0CisrICAgICAgICAgICBwdXNoZXMgTlVMTCBhcyB0aGUgdmFsdWUgZm9yIHRoZSBzdHJpbmcgb24gdGhlIHN0YWNrLiAgVGhlbgorKyAgICAgICAgICAgYHBvcF9mYWlsdXJlX3BvaW50JyB3aWxsIGtlZXAgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZQorKyAgICAgICAgICAgc3RyaW5nLCBpbnN0ZWFkIG9mIHJlc3RvcmluZyBpdC4gIFRvIHNlZSB3aHksIGNvbnNpZGVyCisrICAgICAgICAgICBtYXRjaGluZyBgZm9vXG5iYXInIGFnYWluc3QgYC4qXG4nLiAgVGhlIC4qIG1hdGNoZXMgdGhlIGZvbzsKKysgICAgICAgICAgIHRoZW4gdGhlIC4gZmFpbHMgYWdhaW5zdCB0aGUgXG4uICBCdXQgdGhlIG5leHQgdGhpbmcgd2Ugd2FudAorKyAgICAgICAgICAgdG8gZG8gaXMgbWF0Y2ggdGhlIFxuIGFnYWluc3QgdGhlIFxuOyBpZiB3ZSByZXN0b3JlZCB0aGUKKysgICAgICAgICAgIHN0cmluZyB2YWx1ZSwgd2Ugd291bGQgYmUgYmFjayBhdCB0aGUgZm9vLgorKworKyAgICAgICAgICAgQmVjYXVzZSB0aGlzIGlzIHVzZWQgb25seSBpbiBzcGVjaWZpYyBjYXNlcywgd2UgZG9uJ3QgbmVlZCB0bworKyAgICAgICAgICAgY2hlY2sgYWxsIHRoZSB0aGluZ3MgdGhhdCBgb25fZmFpbHVyZV9qdW1wJyBkb2VzLCB0byBtYWtlCisrICAgICAgICAgICBzdXJlIHRoZSByaWdodCB0aGluZ3MgZ2V0IHNhdmVkIG9uIHRoZSBzdGFjay4gIEhlbmNlIHdlIGRvbid0CisrICAgICAgICAgICBzaGFyZSBpdHMgY29kZS4gIFRoZSBvbmx5IHJlYXNvbiB0byBwdXNoIGFueXRoaW5nIG9uIHRoZQorKyAgICAgICAgICAgc3RhY2sgYXQgYWxsIGlzIHRoYXQgb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gY2hhbmdlCisrICAgICAgICAgICBgYW55Y2hhcidzIGNvZGUgdG8gZG8gc29tZXRoaW5nIGJlc2lkZXMgZ290byBmYWlsIGluIHRoaXMKKysgICAgICAgICAgIGNhc2U7IHRoYXQgc2VlbXMgd29yc2UgdGhhbiB0aGlzLiAgKi8KKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIik7CisrCisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAlcCk6XG4iLCBtY250LCBwICsgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgREVCVUdfUFJJTlQzICgiICVkICh0byAweCV4KTpcbiIsIG1jbnQsIHAgKyBtY250KTsKKysjZW5kaWYKKysKKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChwICsgbWNudCwgTlVMTCwgLTIpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysJLyogVXNlcyBvZiBvbl9mYWlsdXJlX2p1bXA6CisrCisrICAgICAgICAgICBFYWNoIGFsdGVybmF0aXZlIHN0YXJ0cyB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcCB0aGF0IHBvaW50cworKyAgICAgICAgICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBhbHRlcm5hdGl2ZS4gIEVhY2ggYWx0ZXJuYXRpdmUKKysgICAgICAgICAgIGV4Y2VwdCB0aGUgbGFzdCBlbmRzIHdpdGggYSBqdW1wIHRoYXQgaW4gZWZmZWN0IGp1bXBzIHBhc3QKKysgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBhbHRlcm5hdGl2ZXMuICAoVGhleSByZWFsbHkganVtcCB0byB0aGUKKysgICAgICAgICAgIGVuZGluZyBqdW1wIG9mIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUsIGJlY2F1c2UgdGVuc2lvbmluZworKyAgICAgICAgICAgdGhlc2UganVtcHMgaXMgYSBoYXNzbGUuKQorKworKyAgICAgICAgICAgUmVwZWF0cyBzdGFydCB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcCB0aGF0IHBvaW50cyBwYXN0IGJvdGgKKysgICAgICAgICAgIHRoZSByZXBldGl0aW9uIHRleHQgYW5kIGVpdGhlciB0aGUgZm9sbG93aW5nIGp1bXAgb3IKKysgICAgICAgICAgIHBvcF9mYWlsdXJlX2p1bXAgYmFjayB0byB0aGlzIG9uX2ZhaWx1cmVfanVtcC4gICovCisrCWNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgb25fZmFpbHVyZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG9uX2ZhaWx1cmVfanVtcCIpOworKworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gJXApIiwgbWNudCwgcCArIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gMHgleCkiLCBtY250LCBwICsgbWNudCk7CisrI2VuZGlmCisrCisrICAgICAgICAgIC8qIElmIHRoaXMgb25fZmFpbHVyZV9qdW1wIGNvbWVzIHJpZ2h0IGJlZm9yZSBhIGdyb3VwIChpLmUuLAorKyAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgKiBhcHBsaWVkIHRvIGEgZ3JvdXApLCBzYXZlIHRoZSBpbmZvcm1hdGlvbgorKyAgICAgICAgICAgICBmb3IgdGhhdCBncm91cCBhbmQgYWxsIGlubmVyIG9uZXMsIHNvIHRoYXQgaWYgd2UgZmFpbCBiYWNrCisrICAgICAgICAgICAgIHRvIHRoaXMgcG9pbnQsIHRoZSBncm91cCdzIGluZm9ybWF0aW9uIHdpbGwgYmUgY29ycmVjdC4KKysgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIGluIFwoYSpcKSpcMSwgd2UgbmVlZCB0aGUgcHJlY2VkaW5nIGdyb3VwLAorKyAgICAgICAgICAgICBhbmQgaW4gXCh6elwoYSpcKWIqXClcMiwgd2UgbmVlZCB0aGUgaW5uZXIgZ3JvdXAuICAqLworKworKyAgICAgICAgICAvKiBXZSBjYW4ndCB1c2UgYHAnIHRvIGNoZWNrIGFoZWFkIGJlY2F1c2Ugd2UgcHVzaAorKyAgICAgICAgICAgICBhIGZhaWx1cmUgcG9pbnQgdG8gYHAgKyBtY250JyBhZnRlciB3ZSBkbyB0aGlzLiAgKi8KKysgICAgICAgICAgcDEgPSBwOworKworKyAgICAgICAgICAvKiBXZSBuZWVkIHRvIHNraXAgbm9fb3AncyBiZWZvcmUgd2UgbG9vayBmb3IgdGhlCisrICAgICAgICAgICAgIHN0YXJ0X21lbW9yeSBpbiBjYXNlIHRoaXMgb25fZmFpbHVyZV9qdW1wIGlzIGhhcHBlbmluZyBhcworKyAgICAgICAgICAgICB0aGUgcmVzdWx0IG9mIGEgY29tcGxldGVkIHN1Y2NlZWRfbiwgYXMgaW4gXChhXClcezEsM1x9YlwxCisrICAgICAgICAgICAgIGFnYWluc3QgYWJhLiAgKi8KKysgICAgICAgICAgd2hpbGUgKHAxIDwgcGVuZCAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBub19vcCkKKysgICAgICAgICAgICBwMSsrOworKworKyAgICAgICAgICBpZiAocDEgPCBwZW5kICYmIChyZV9vcGNvZGVfdCkgKnAxID09IHN0YXJ0X21lbW9yeSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAvKiBXZSBoYXZlIGEgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyIG5vdy4gIFRoaXMgd2lsbAorKyAgICAgICAgICAgICAgICAgZ2V0IHJlc2V0IGF0IHRoZSBzdGFydF9tZW1vcnkgd2UgYXJlIGFib3V0IHRvIGdldCB0bywKKysgICAgICAgICAgICAgICAgIGJ1dCB3ZSB3aWxsIGhhdmUgc2F2ZWQgYWxsIHRoZSByZWdpc3RlcnMgcmVsZXZhbnQgdG8KKysgICAgICAgICAgICAgICAgIHRoaXMgcmVwZXRpdGlvbiBvcCwgYXMgZGVzY3JpYmVkIGFib3ZlLiAgKi8KKysgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9ICoocDEgKyAxKSArICoocDEgKyAyKTsKKysgICAgICAgICAgICAgIGlmIChsb3dlc3RfYWN0aXZlX3JlZyA9PSBOT19MT1dFU1RfQUNUSVZFX1JFRykKKysgICAgICAgICAgICAgICAgbG93ZXN0X2FjdGl2ZV9yZWcgPSAqKHAxICsgMSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICBERUJVR19QUklOVDEgKCI6XG4iKTsKKysgICAgICAgICAgUFVTSF9GQUlMVVJFX1BPSU5UIChwICsgbWNudCwgZCwgLTIpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIC8qIEEgc21hcnQgcmVwZWF0IGVuZHMgd2l0aCBgbWF5YmVfcG9wX2p1bXAnLgorKwkgICBXZSBjaGFuZ2UgaXQgdG8gZWl0aGVyIGBwb3BfZmFpbHVyZV9qdW1wJyBvciBganVtcCcuICAqLworKyAgICAgICAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgbWF5YmVfcG9wX2p1bXAgJWQuXG4iLCBtY250KTsKKysgICAgICAgICAgeworKwkgICAgcmVnaXN0ZXIgVUNIQVJfVCAqcDIgPSBwOworKworKyAgICAgICAgICAgIC8qIENvbXBhcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVwZWF0IHdpdGggd2hhdCBpbiB0aGUKKysgICAgICAgICAgICAgICBwYXR0ZXJuIGZvbGxvd3MgaXRzIGVuZC4gSWYgd2UgY2FuIGVzdGFibGlzaCB0aGF0IHRoZXJlCisrICAgICAgICAgICAgICAgaXMgbm90aGluZyB0aGF0IHRoZXkgd291bGQgYm90aCBtYXRjaCwgaS5lLiwgdGhhdCB3ZQorKyAgICAgICAgICAgICAgIHdvdWxkIGhhdmUgdG8gYmFja3RyYWNrIGJlY2F1c2Ugb2YgKGFzIGluLCBlLmcuLCBgYSphJykKKysgICAgICAgICAgICAgICB0aGVuIHdlIGNhbiBjaGFuZ2UgdG8gcG9wX2ZhaWx1cmVfanVtcCwgYmVjYXVzZSB3ZSdsbAorKyAgICAgICAgICAgICAgIG5ldmVyIGhhdmUgdG8gYmFja3RyYWNrLgorKworKyAgICAgICAgICAgICAgIFRoaXMgaXMgbm90IHRydWUgaW4gdGhlIGNhc2Ugb2YgYWx0ZXJuYXRpdmVzOiBpbgorKyAgICAgICAgICAgICAgIGAoYXxhYikqJyB3ZSBkbyBuZWVkIHRvIGJhY2t0cmFjayB0byB0aGUgYGFiJyBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgICAgIChlLmcuLCBpZiB0aGUgc3RyaW5nIHdhcyBgYWInKS4gIEJ1dCBpbnN0ZWFkIG9mIHRyeWluZyB0bworKyAgICAgICAgICAgICAgIGRldGVjdCB0aGF0IGhlcmUsIHRoZSBhbHRlcm5hdGl2ZSBoYXMgcHV0IG9uIGEgZHVtbXkKKysgICAgICAgICAgICAgICBmYWlsdXJlIHBvaW50IHdoaWNoIGlzIHdoYXQgd2Ugd2lsbCBlbmQgdXAgcG9wcGluZy4gICovCisrCisrCSAgICAvKiBTa2lwIG92ZXIgb3Blbi9jbG9zZS1ncm91cCBjb21tYW5kcy4KKysJICAgICAgIElmIHdoYXQgZm9sbG93cyB0aGlzIGxvb3AgaXMgYSAuLi4rIGNvbnN0cnVjdCwKKysJICAgICAgIGxvb2sgYXQgd2hhdCBiZWdpbnMgaXRzIGJvZHksIHNpbmNlIHdlIHdpbGwgaGF2ZSB0bworKwkgICAgICAgbWF0Y2ggYXQgbGVhc3Qgb25lIG9mIHRoYXQuICAqLworKwkgICAgd2hpbGUgKDEpCisrCSAgICAgIHsKKysJCWlmIChwMiArIDIgPCBwZW5kCisrCQkgICAgJiYgKChyZV9vcGNvZGVfdCkgKnAyID09IHN0b3BfbWVtb3J5CisrCQkJfHwgKHJlX29wY29kZV90KSAqcDIgPT0gc3RhcnRfbWVtb3J5KSkKKysJCSAgcDIgKz0gMzsKKysJCWVsc2UgaWYgKHAyICsgMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFIDwgcGVuZAorKwkJCSAmJiAocmVfb3Bjb2RlX3QpICpwMiA9PSBkdW1teV9mYWlsdXJlX2p1bXApCisrCQkgIHAyICs9IDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysJCWVsc2UKKysJCSAgYnJlYWs7CisrCSAgICAgIH0KKysKKysJICAgIHAxID0gcCArIG1jbnQ7CisrCSAgICAvKiBwMVswXSAuLi4gcDFbMl0gYXJlIHRoZSBgb25fZmFpbHVyZV9qdW1wJyBjb3JyZXNwb25kaW5nCisrCSAgICAgICB0byB0aGUgYG1heWJlX2ZpbmFsaXplX2p1bXAnIG9mIHRoaXMgY2FzZS4gIEV4YW1pbmUgd2hhdAorKwkgICAgICAgZm9sbG93cy4gICovCisrCisrICAgICAgICAgICAgLyogSWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgd2UgY2FuIGNoYW5nZS4gICovCisrICAgICAgICAgICAgaWYgKHAyID09IHBlbmQpCisrCSAgICAgIHsKKysJCS8qIENvbnNpZGVyIHdoYXQgaGFwcGVucyB3aGVuIG1hdGNoaW5nICI6XCguKlwpIgorKwkJICAgYWdhaW5zdCAiOi8iLiAgSSBkb24ndCByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIGNvZGUKKysJCSAgIHlldC4gICovCisrICAJICAgICAgICBwWy0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gPSAoVUNIQVJfVCkKKysJCSAgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgREVCVUdfUFJJTlQxCisrICAgICAgICAgICAgICAgICAgKCIgIEVuZCBvZiBwYXR0ZXJuOiBjaGFuZ2UgdG8gYHBvcF9mYWlsdXJlX2p1bXAnLlxuIik7CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgZWxzZSBpZiAoKHJlX29wY29kZV90KSAqcDIgPT0gZXhhY3RuCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgICAgIHx8IChyZV9vcGNvZGVfdCkgKnAyID09IGV4YWN0bl9iaW4KKysjZW5kaWYKKysJCSAgICAgfHwgKGJ1ZnAtPm5ld2xpbmVfYW5jaG9yICYmIChyZV9vcGNvZGVfdCkgKnAyID09IGVuZGxpbmUpKQorKwkgICAgICB7CisrCQlyZWdpc3RlciBVQ0hBUl9UIGMKKysgICAgICAgICAgICAgICAgICA9ICpwMiA9PSAoVUNIQVJfVCkgZW5kbGluZSA/ICdcbicgOiBwMlsyXTsKKysKKysgICAgICAgICAgICAgICAgaWYgKCgocmVfb3Bjb2RlX3QpIHAxWzErT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gZXhhY3RuCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgICAgIHx8IChyZV9vcGNvZGVfdCkgcDFbMStPRkZTRVRfQUREUkVTU19TSVpFXSA9PSBleGFjdG5fYmluCisrI2VuZGlmCisrCQkgICAgKSAmJiBwMVszK09GRlNFVF9BRERSRVNTX1NJWkVdICE9IGMpCisrICAgICAgICAgICAgICAgICAgeworKyAgCQkgICAgcFstKDErT0ZGU0VUX0FERFJFU1NfU0laRSldID0gKFVDSEFSX1QpCisrCQkgICAgICBwb3BfZmFpbHVyZV9qdW1wOworKyNpZmRlZiBXQ0hBUgorKwkJICAgICAgREVCVUdfUFJJTlQzICgiICAlQyAhPSAlQyA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIiwKKysJCQkJICAgICh3aW50X3QpIGMsCisrCQkJCSAgICAod2ludF90KSBwMVszK09GRlNFVF9BRERSRVNTX1NJWkVdKTsKKysjZWxzZQorKwkJICAgICAgREVCVUdfUFJJTlQzICgiICAlYyAhPSAlYyA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIiwKKysJCQkJICAgIChjaGFyKSBjLAorKwkJCQkgICAgKGNoYXIpIHAxWzMrT0ZGU0VUX0FERFJFU1NfU0laRV0pOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgIH0KKysKKysjaWZuZGVmIFdDSEFSCisrCQllbHNlIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXQKKysJCQkgfHwgKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0X25vdCkKKysJCSAgeworKwkJICAgIGludCBuZWdhdGUgPSAocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXRfbm90OworKworKwkJICAgIGlmIChjIDwgKHVuc2lnbmVkKSAocDFbNF0gKiBCWVRFV0lEVEgpCisrCQkJJiYgcDFbNSArIGMgLyBCWVRFV0lEVEhdICYgKDEgPDwgKGMgJSBCWVRFV0lEVEgpKSkKKysJCSAgICAgIG5lZ2F0ZSA9ICFuZWdhdGU7CisrCisrICAgICAgICAgICAgICAgICAgICAvKiBgbmVnYXRlJyBpcyBlcXVhbCB0byAxIGlmIGMgd291bGQgbWF0Y2gsIHdoaWNoIG1lYW5zCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZSBjYW4ndCBjaGFuZ2UgdG8gcG9wX2ZhaWx1cmVfanVtcC4gICovCisrCQkgICAgaWYgKCFuZWdhdGUpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgICAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysjZW5kaWYgLyogbm90IFdDSEFSICovCisrCSAgICAgIH0KKysjaWZuZGVmIFdDSEFSCisrICAgICAgICAgICAgZWxzZSBpZiAoKHJlX29wY29kZV90KSAqcDIgPT0gY2hhcnNldCkKKysJICAgICAgeworKwkJLyogV2Ugd2luIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxvb3AgaXMgbm90IHBhcnQKKysgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNoYXJzZXQuICAqLworKyAgICAgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBleGFjdG4KKysgCQkgICAgJiYgISAoKGludCkgcDJbMV0gKiBCWVRFV0lEVEggPiAoaW50KSBwMVs1XQorKyAJCQkgICYmIChwMlsyICsgcDFbNV0gLyBCWVRFV0lEVEhdCisrIAkJCSAgICAgICYgKDEgPDwgKHAxWzVdICUgQllURVdJRFRIKSkpKSkKKysJCSAgeworKwkJICAgIHBbLTNdID0gKHVuc2lnbmVkIGNoYXIpIHBvcF9mYWlsdXJlX2p1bXA7CisrCQkgICAgREVCVUdfUFJJTlQxICgiICBObyBtYXRjaCA9PiBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgICAgICAgfQorKworKwkJZWxzZSBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0X25vdCkKKysJCSAgeworKwkJICAgIGludCBpZHg7CisrCQkgICAgLyogV2Ugd2luIGlmIHRoZSBjaGFyc2V0X25vdCBpbnNpZGUgdGhlIGxvb3AKKysJCSAgICAgICBsaXN0cyBldmVyeSBjaGFyYWN0ZXIgbGlzdGVkIGluIHRoZSBjaGFyc2V0IGFmdGVyLiAgKi8KKysJCSAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IChpbnQpIHAyWzFdOyBpZHgrKykKKysJCSAgICAgIGlmICghIChwMlsyICsgaWR4XSA9PSAwCisrCQkJICAgICB8fCAoaWR4IDwgKGludCkgcDFbNF0KKysJCQkJICYmICgocDJbMiArIGlkeF0gJiB+IHAxWzUgKyBpZHhdKSA9PSAwKSkpKQorKwkJCWJyZWFrOworKworKwkJICAgIGlmIChpZHggPT0gcDJbMV0pCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgICAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysJCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldCkKKysJCSAgeworKwkJICAgIGludCBpZHg7CisrCQkgICAgLyogV2Ugd2luIGlmIHRoZSBjaGFyc2V0IGluc2lkZSB0aGUgbG9vcAorKwkJICAgICAgIGhhcyBubyBvdmVybGFwIHdpdGggdGhlIG9uZSBhZnRlciB0aGUgbG9vcC4gICovCisrCQkgICAgZm9yIChpZHggPSAwOworKwkJCSBpZHggPCAoaW50KSBwMlsxXSAmJiBpZHggPCAoaW50KSBwMVs0XTsKKysJCQkgaWR4KyspCisrCQkgICAgICBpZiAoKHAyWzIgKyBpZHhdICYgcDFbNSArIGlkeF0pICE9IDApCisrCQkJYnJlYWs7CisrCisrCQkgICAgaWYgKGlkeCA9PSBwMlsxXSB8fCBpZHggPT0gcDFbNF0pCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgICAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgIH0KKysJICAgICAgfQorKyNlbmRpZiAvKiBub3QgV0NIQVIgKi8KKysJICB9CisrCSAgcCAtPSBPRkZTRVRfQUREUkVTU19TSVpFOwkvKiBQb2ludCBhdCByZWxhdGl2ZSBhZGRyZXNzIGFnYWluLiAgKi8KKysJICBpZiAoKHJlX29wY29kZV90KSBwWy0xXSAhPSBwb3BfZmFpbHVyZV9qdW1wKQorKwkgICAgeworKwkgICAgICBwWy0xXSA9IChVQ0hBUl9UKSBqdW1wOworKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiICBNYXRjaCA9PiBqdW1wLlxuIik7CisrCSAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKwkgICAgfQorKyAgICAgICAgLyogTm90ZSBmYWxsIHRocm91Z2guICAqLworKworKworKwkvKiBUaGUgZW5kIG9mIGEgc2ltcGxlIHJlcGVhdCBoYXMgYSBwb3BfZmFpbHVyZV9qdW1wIGJhY2sgdG8KKysgICAgICAgICAgIGl0cyBtYXRjaGluZyBvbl9mYWlsdXJlX2p1bXAsIHdoZXJlIHRoZSBsYXR0ZXIgd2lsbCBwdXNoIGEKKysgICAgICAgICAgIGZhaWx1cmUgcG9pbnQuICBUaGUgcG9wX2ZhaWx1cmVfanVtcCB0YWtlcyBvZmYgZmFpbHVyZQorKyAgICAgICAgICAgcG9pbnRzIHB1dCBvbiBieSB0aGlzIHBvcF9mYWlsdXJlX2p1bXAncyBtYXRjaGluZworKyAgICAgICAgICAgb25fZmFpbHVyZV9qdW1wOyB3ZSBnb3QgdGhyb3VnaCB0aGUgcGF0dGVybiB0byBoZXJlIGZyb20gdGhlCisrICAgICAgICAgICBtYXRjaGluZyBvbl9mYWlsdXJlX2p1bXAsIHNvIGRpZG4ndCBmYWlsLiAgKi8KKysgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gcGFzcyBzZXBhcmF0ZSBzdG9yYWdlIGZvciB0aGUgbG93ZXN0IGFuZAorKyAgICAgICAgICAgICAgIGhpZ2hlc3QgcmVnaXN0ZXJzLCBldmVuIHRob3VnaCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZQorKyAgICAgICAgICAgICAgIGFjdHVhbCB2YWx1ZXMuICBPdGhlcndpc2UsIHdlIHdpbGwgcmVzdG9yZSBvbmx5IG9uZQorKyAgICAgICAgICAgICAgIHJlZ2lzdGVyIGZyb20gdGhlIHN0YWNrLCBzaW5jZSBsb3dlc3Qgd2lsbCA9PSBoaWdoZXN0IGluCisrICAgICAgICAgICAgICAgYHBvcF9mYWlsdXJlX3BvaW50Jy4gICovCisrICAgICAgICAgICAgYWN0aXZlX3JlZ190IGR1bW15X2xvd19yZWcsIGR1bW15X2hpZ2hfcmVnOworKyAgICAgICAgICAgIFVDSEFSX1QgKnBkdW1teSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBOVUxMOworKyAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqc2R1bW15IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9IE5VTEw7CisrCisrICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICBQT1BfRkFJTFVSRV9QT0lOVCAoc2R1bW15LCBwZHVtbXksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2xvd19yZWcsIGR1bW15X2hpZ2hfcmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZHVtbXksIHJlZ19kdW1teSwgcmVnX2luZm9fZHVtbXkpOworKyAgICAgICAgICB9CisrCSAgLyogTm90ZSBmYWxsIHRocm91Z2guICAqLworKworKwl1bmNvbmRpdGlvbmFsX2p1bXA6CisrI2lmZGVmIF9MSUJDCisrCSAgREVCVUdfUFJJTlQyICgiXG4lcDogIiwgcCk7CisrI2Vsc2UKKysJICBERUJVR19QUklOVDIgKCJcbjB4JXg6ICIsIHApOworKyNlbmRpZgorKyAgICAgICAgICAvKiBOb3RlIGZhbGwgdGhyb3VnaC4gICovCisrCisrICAgICAgICAvKiBVbmNvbmRpdGlvbmFsbHkganVtcCAod2l0aG91dCBwb3BwaW5nIGFueSBmYWlsdXJlIHBvaW50cykuICAqLworKyAgICAgICAgY2FzZSBqdW1wOgorKwkgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsJLyogR2V0IHRoZSBhbW91bnQgdG8ganVtcC4gICovCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBqdW1wICVkICIsIG1jbnQpOworKwkgIHAgKz0gbWNudDsJCQkJLyogRG8gdGhlIGp1bXAuICAqLworKyNpZmRlZiBfTElCQworKyAgICAgICAgICBERUJVR19QUklOVDIgKCIodG8gJXApLlxuIiwgcCk7CisrI2Vsc2UKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiKHRvIDB4JXgpLlxuIiwgcCk7CisrI2VuZGlmCisrCSAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBXZSBuZWVkIHRoaXMgb3Bjb2RlIHNvIHdlIGNhbiBkZXRlY3Qgd2hlcmUgYWx0ZXJuYXRpdmVzIGVuZAorKyAgICAgICAgICAgaW4gYGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AnIGV0IGFsLiAgKi8KKysgICAgICAgIGNhc2UganVtcF9wYXN0X2FsdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGp1bXBfcGFzdF9hbHQuXG4iKTsKKysgICAgICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrCisrCisrICAgICAgICAvKiBOb3JtYWxseSwgdGhlIG9uX2ZhaWx1cmVfanVtcCBwdXNoZXMgYSBmYWlsdXJlIHBvaW50LCB3aGljaAorKyAgICAgICAgICAgdGhlbiBnZXRzIHBvcHBlZCBhdCBwb3BfZmFpbHVyZV9qdW1wLiAgV2Ugd2lsbCBlbmQgdXAgYXQKKysgICAgICAgICAgIHBvcF9mYWlsdXJlX2p1bXAsIGFsc28sIGFuZCB3aXRoIGEgcGF0dGVybiBvZiwgc2F5LCBgYSsnLCB3ZQorKyAgICAgICAgICAgYXJlIHNraXBwaW5nIG92ZXIgdGhlIG9uX2ZhaWx1cmVfanVtcCwgc28gd2UgaGF2ZSB0byBwdXNoCisrICAgICAgICAgICBzb21ldGhpbmcgbWVhbmluZ2xlc3MgZm9yIHBvcF9mYWlsdXJlX2p1bXAgdG8gcG9wLiAgKi8KKysgICAgICAgIGNhc2UgZHVtbXlfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgZHVtbXlfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgIC8qIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHVzaCBmb3IgdGhlIHN0cmluZyBoZXJlLiAgV2hhdAorKyAgICAgICAgICAgICB0aGUgY29kZSBhdCBgZmFpbCcgdGVzdHMgaXMgdGhlIHZhbHVlIGZvciB0aGUgcGF0dGVybi4gICovCisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAoTlVMTCwgTlVMTCwgLTIpOworKyAgICAgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysKKysKKysgICAgICAgIC8qIEF0IHRoZSBlbmQgb2YgYW4gYWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gcHVzaCBhIGR1bW15IGZhaWx1cmUKKysgICAgICAgICAgIHBvaW50IGluIGNhc2Ugd2UgYXJlIGZvbGxvd2VkIGJ5IGEgYHBvcF9mYWlsdXJlX2p1bXAnLCBiZWNhdXNlCisrICAgICAgICAgICB3ZSBkb24ndCB3YW50IHRoZSBmYWlsdXJlIHBvaW50IGZvciB0aGUgYWx0ZXJuYXRpdmUgdG8gYmUKKysgICAgICAgICAgIHBvcHBlZC4gIEZvciBleGFtcGxlLCBtYXRjaGluZyBgKGF8YWIpKicgYWdhaW5zdCBgYWFiJworKyAgICAgICAgICAgcmVxdWlyZXMgdGhhdCB3ZSBtYXRjaCB0aGUgYGFiJyBhbHRlcm5hdGl2ZS4gICovCisrICAgICAgICBjYXNlIHB1c2hfZHVtbXlfZmFpbHVyZToKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHB1c2hfZHVtbXlfZmFpbHVyZS5cbiIpOworKyAgICAgICAgICAvKiBTZWUgY29tbWVudHMganVzdCBhYm92ZSBhdCBgZHVtbXlfZmFpbHVyZV9qdW1wJyBhYm91dCB0aGUKKysgICAgICAgICAgICAgdHdvIHplcm9lcy4gICovCisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAoTlVMTCwgTlVMTCwgLTIpOworKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8qIEhhdmUgdG8gc3VjY2VlZCBtYXRjaGluZyB3aGF0IGZvbGxvd3MgYXQgbGVhc3QgbiB0aW1lcy4KKysgICAgICAgICAgIEFmdGVyIHRoYXQsIGhhbmRsZSBsaWtlIGBvbl9mYWlsdXJlX2p1bXAnLiAgKi8KKysgICAgICAgIGNhc2Ugc3VjY2VlZF9uOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUiAobWNudCwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgc3VjY2VlZF9uICVkLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIGFzc2VydCAobWNudCA+PSAwKTsKKysgICAgICAgICAgLyogT3JpZ2luYWxseSwgdGhpcyBpcyBob3cgbWFueSB0aW1lcyB3ZSBIQVZFIHRvIHN1Y2NlZWQuICAqLworKyAgICAgICAgICBpZiAobWNudCA+IDApCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIG1jbnQtLTsKKysJICAgICAgIHAgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICBTVE9SRV9OVU1CRVJfQU5EX0lOQ1IgKHAsIG1jbnQpOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAlcCB0byAlZC5cbiIsIHAgLSBPRkZTRVRfQUREUkVTU19TSVpFCisrCQkJICAgICAsIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nIDB4JXggdG8gJWQuXG4iLCBwIC0gT0ZGU0VUX0FERFJFU1NfU0laRQorKwkJCSAgICAgLCBtY250KTsKKysjZW5kaWYKKysgICAgICAgICAgICB9CisrCSAgZWxzZSBpZiAobWNudCA9PSAwKQorKyAgICAgICAgICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgU2V0dGluZyB0d28gYnl0ZXMgZnJvbSAlcCB0byBub19vcC5cbiIsCisrCQkJICAgIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQyICgiICBTZXR0aW5nIHR3byBieXRlcyBmcm9tIDB4JXggdG8gbm9fb3AuXG4iLAorKwkJCSAgICBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrI2VuZGlmIC8qIF9MSUJDICovCisrCisrI2lmZGVmIFdDSEFSCisrCSAgICAgIHBbMV0gPSAoVUNIQVJfVCkgbm9fb3A7CisrI2Vsc2UKKysJICAgICAgcFsyXSA9IChVQ0hBUl9UKSBub19vcDsKKysgICAgICAgICAgICAgIHBbM10gPSAoVUNIQVJfVCkgbm9fb3A7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICAgICAgICBnb3RvIG9uX2ZhaWx1cmU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UganVtcF9uOgorKyAgICAgICAgICBFWFRSQUNUX05VTUJFUiAobWNudCwgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcganVtcF9uICVkLlxuIiwgbWNudCk7CisrCisrICAgICAgICAgIC8qIE9yaWdpbmFsbHksIHRoaXMgaXMgaG93IG1hbnkgdGltZXMgd2UgQ0FOIGp1bXAuICAqLworKyAgICAgICAgICBpZiAobWNudCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgbWNudC0tOworKyAgICAgICAgICAgICAgIFNUT1JFX05VTUJFUiAocCArIE9GRlNFVF9BRERSRVNTX1NJWkUsIG1jbnQpOworKworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAlcCB0byAlZC5cbiIsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFLAorKwkJCSAgICAgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgMHgleCB0byAlZC5cbiIsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFLAorKwkJCSAgICAgbWNudCk7CisrI2VuZGlmIC8qIF9MSUJDICovCisrCSAgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIC8qIElmIGRvbid0IGhhdmUgdG8ganVtcCBhbnkgbW9yZSwgc2tpcCBvdmVyIHRoZSByZXN0IG9mIGNvbW1hbmQuICAqLworKwkgIGVsc2UKKysJICAgIHAgKz0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHNldF9udW1iZXJfYXQ6CisrCSAgeworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBzZXRfbnVtYmVyX2F0LlxuIik7CisrCisrICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyAgICAgICAgICAgIHAxID0gcCArIG1jbnQ7CisrICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAlcCB0byAlZC5cbiIsIHAxLCBtY250KTsKKysjZWxzZQorKyAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAweCV4IHRvICVkLlxuIiwgcDEsIG1jbnQpOworKyNlbmRpZgorKwkgICAgU1RPUkVfTlVNQkVSIChwMSwgbWNudCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIH0KKysKKysjaWYgMAorKwkvKiBUaGUgREVDIEFscGhhIEMgY29tcGlsZXIgMy54IGdlbmVyYXRlcyBpbmNvcnJlY3QgY29kZSBmb3IgdGhlCisrCSAgIHRlc3QgIFdPUkRDSEFSX1AgKGQgLSAxKSAhPSBXT1JEQ0hBUl9QIChkKSAgaW4gdGhlIGV4cGFuc2lvbiBvZgorKwkgICBBVF9XT1JEX0JPVU5EQVJZLCBzbyB0aGlzIGNvZGUgaXMgZGlzYWJsZWQuICBFeHBhbmRpbmcgdGhlCisrCSAgIG1hY3JvIGFuZCBpbnRyb2R1Y2luZyB0ZW1wb3JhcnkgdmFyaWFibGVzIHdvcmtzIGFyb3VuZCB0aGUgYnVnLiAgKi8KKysKKysJY2FzZSB3b3JkYm91bmQ6CisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9XT1JEX0JPVU5EQVJZIChkKSkKKysJICAgIGJyZWFrOworKwkgIGdvdG8gZmFpbDsKKysKKysJY2FzZSBub3R3b3JkYm91bmQ6CisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vdHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9XT1JEX0JPVU5EQVJZIChkKSkKKysJICAgIGdvdG8gZmFpbDsKKysJICBicmVhazsKKysjZWxzZQorKwljYXNlIHdvcmRib3VuZDoKKysJeworKwkgIGJvb2xlYW4gcHJldmNoYXIsIHRoaXNjaGFyOworKworKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpIHx8IEFUX1NUUklOR1NfRU5EIChkKSkKKysJICAgIGJyZWFrOworKworKwkgIHByZXZjaGFyID0gV09SRENIQVJfUCAoZCAtIDEpOworKwkgIHRoaXNjaGFyID0gV09SRENIQVJfUCAoZCk7CisrCSAgaWYgKHByZXZjaGFyICE9IHRoaXNjaGFyKQorKwkgICAgYnJlYWs7CisrCSAgZ290byBmYWlsOworKwl9CisrCisrICAgICAgY2FzZSBub3R3b3JkYm91bmQ6CisrCXsKKysJICBib29sZWFuIHByZXZjaGFyLCB0aGlzY2hhcjsKKysKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm90d29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSB8fCBBVF9TVFJJTkdTX0VORCAoZCkpCisrCSAgICBnb3RvIGZhaWw7CisrCisrCSAgcHJldmNoYXIgPSBXT1JEQ0hBUl9QIChkIC0gMSk7CisrCSAgdGhpc2NoYXIgPSBXT1JEQ0hBUl9QIChkKTsKKysJICBpZiAocHJldmNoYXIgIT0gdGhpc2NoYXIpCisrCSAgICBnb3RvIGZhaWw7CisrCSAgYnJlYWs7CisrCX0KKysjZW5kaWYKKysKKysJY2FzZSB3b3JkYmVnOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGJlZy5cbiIpOworKwkgIGlmICghQVRfU1RSSU5HU19FTkQgKGQpICYmIFdPUkRDSEFSX1AgKGQpCisrCSAgICAgICYmIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgIVdPUkRDSEFSX1AgKGQgLSAxKSkpCisrCSAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKwljYXNlIHdvcmRlbmQ6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkZW5kLlxuIik7CisrCSAgaWYgKCFBVF9TVFJJTkdTX0JFRyAoZCkgJiYgV09SRENIQVJfUCAoZCAtIDEpCisrICAgICAgICAgICAgICAmJiAoQVRfU1RSSU5HU19FTkQgKGQpIHx8ICFXT1JEQ0hBUl9QIChkKSkpCisrCSAgICBicmVhazsKKysgICAgICAgICAgZ290byBmYWlsOworKworKyNpZmRlZiBlbWFjcworKyAgCWNhc2UgYmVmb3JlX2RvdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGJlZm9yZV9kb3QuXG4iKTsKKysgCSAgaWYgKFBUUl9DSEFSX1BPUyAoKHVuc2lnbmVkIGNoYXIgKikgZCkgPj0gcG9pbnQpCisrICAJICAgIGdvdG8gZmFpbDsKKysgIAkgIGJyZWFrOworKworKyAgCWNhc2UgYXRfZG90OgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYXRfZG90LlxuIik7CisrIAkgIGlmIChQVFJfQ0hBUl9QT1MgKCh1bnNpZ25lZCBjaGFyICopIGQpICE9IHBvaW50KQorKyAgCSAgICBnb3RvIGZhaWw7CisrICAJICBicmVhazsKKysKKysgIAljYXNlIGFmdGVyX2RvdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGFmdGVyX2RvdC5cbiIpOworKyAgICAgICAgICBpZiAoUFRSX0NIQVJfUE9TICgodW5zaWduZWQgY2hhciAqKSBkKSA8PSBwb2ludCkKKysgIAkgICAgZ290byBmYWlsOworKyAgCSAgYnJlYWs7CisrCisrCWNhc2Ugc3ludGF4c3BlYzoKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIHN5bnRheHNwZWMgJWQuXG4iLCBtY250KTsKKysJICBtY250ID0gKnArKzsKKysJICBnb3RvIG1hdGNoc3ludGF4OworKworKyAgICAgICAgY2FzZSB3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIEVtYWNzIHdvcmRjaGFyLlxuIik7CisrCSAgbWNudCA9IChpbnQpIFN3b3JkOworKyAgICAgICAgbWF0Y2hzeW50YXg6CisrCSAgUFJFRkVUQ0ggKCk7CisrCSAgLyogQ2FuJ3QgdXNlICpkKysgaGVyZTsgU1lOVEFYIG1heSBiZSBhbiB1bnNhZmUgbWFjcm8uICAqLworKwkgIGQrKzsKKysJICBpZiAoU1lOVEFYIChkWy0xXSkgIT0gKGVudW0gc3ludGF4Y29kZSkgbWNudCkKKysJICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgU0VUX1JFR1NfTUFUQ0hFRCAoKTsKKysJICBicmVhazsKKysKKysJY2FzZSBub3RzeW50YXhzcGVjOgorKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgbm90c3ludGF4c3BlYyAlZC5cbiIsIG1jbnQpOworKwkgIG1jbnQgPSAqcCsrOworKwkgIGdvdG8gbWF0Y2hub3RzeW50YXg7CisrCisrICAgICAgICBjYXNlIG5vdHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgRW1hY3Mgbm90d29yZGNoYXIuXG4iKTsKKysJICBtY250ID0gKGludCkgU3dvcmQ7CisrICAgICAgICBtYXRjaG5vdHN5bnRheDoKKysJICBQUkVGRVRDSCAoKTsKKysJICAvKiBDYW4ndCB1c2UgKmQrKyBoZXJlOyBTWU5UQVggbWF5IGJlIGFuIHVuc2FmZSBtYWNyby4gICovCisrCSAgZCsrOworKwkgIGlmIChTWU5UQVggKGRbLTFdKSA9PSAoZW51bSBzeW50YXhjb2RlKSBtY250KQorKwkgICAgZ290byBmYWlsOworKwkgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGJyZWFrOworKworKyNlbHNlIC8qIG5vdCBlbWFjcyAqLworKwljYXNlIHdvcmRjaGFyOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgbm9uLUVtYWNzIHdvcmRjaGFyLlxuIik7CisrCSAgUFJFRkVUQ0ggKCk7CisrICAgICAgICAgIGlmICghV09SRENIQVJfUCAoZCkpCisrICAgICAgICAgICAgZ290byBmYWlsOworKwkgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGQrKzsKKysJICBicmVhazsKKysKKysJY2FzZSBub3R3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vbi1FbWFjcyBub3R3b3JkY2hhci5cbiIpOworKwkgIFBSRUZFVENIICgpOworKwkgIGlmIChXT1JEQ0hBUl9QIChkKSkKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIGQrKzsKKysJICBicmVhazsKKysjZW5kaWYgLyogbm90IGVtYWNzICovCisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBhYm9ydCAoKTsKKysJfQorKyAgICAgIGNvbnRpbnVlOyAgLyogU3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkIG9uZSBwYXR0ZXJuIGNvbW1hbmQ7IGtlZXAgZ29pbmcuICAqLworKworKworKyAgICAvKiBXZSBnb3RvIGhlcmUgaWYgYSBtYXRjaGluZyBvcGVyYXRpb24gZmFpbHMuICovCisrICAgIGZhaWw6CisrICAgICAgaWYgKCFGQUlMX1NUQUNLX0VNUFRZICgpKQorKwl7IC8qIEEgcmVzdGFydCBwb2ludCBpcyBrbm93bi4gIFJlc3RvcmUgdG8gdGhhdCBzdGF0ZS4gICovCisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIlxuRkFJTDpcbiIpOworKyAgICAgICAgICBQT1BfRkFJTFVSRV9QT0lOVCAoZCwgcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnLCBoaWdoZXN0X2FjdGl2ZV9yZWcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdzdGFydCwgcmVnZW5kLCByZWdfaW5mbyk7CisrCisrICAgICAgICAgIC8qIElmIHRoaXMgZmFpbHVyZSBwb2ludCBpcyBhIGR1bW15LCB0cnkgdGhlIG5leHQgb25lLiAgKi8KKysgICAgICAgICAgaWYgKCFwKQorKwkgICAgZ290byBmYWlsOworKworKyAgICAgICAgICAvKiBJZiB3ZSBmYWlsZWQgdG8gdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgZG9uJ3QgZXhhbWluZSAqcC4gICovCisrCSAgYXNzZXJ0IChwIDw9IHBlbmQpOworKyAgICAgICAgICBpZiAocCA8IHBlbmQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYm9vbGVhbiBpc19hX2p1bXBfbiA9IGZhbHNlOworKworKyAgICAgICAgICAgICAgLyogSWYgZmFpbGVkIHRvIGEgYmFja3dhcmRzIGp1bXAgdGhhdCdzIHBhcnQgb2YgYSByZXBldGl0aW9uCisrICAgICAgICAgICAgICAgICBsb29wLCBuZWVkIHRvIHBvcCB0aGlzIGZhaWx1cmUgcG9pbnQgYW5kIHVzZSB0aGUgbmV4dCBvbmUuICAqLworKyAgICAgICAgICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UganVtcF9uOgorKyAgICAgICAgICAgICAgICAgIGlzX2FfanVtcF9uID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysgICAgICAgICAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKyAgICAgICAgICAgICAgICBjYXNlIGp1bXA6CisrICAgICAgICAgICAgICAgICAgcDEgPSBwICsgMTsKKysgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICAgICAgICAgIHAxICs9IG1jbnQ7CisrCisrICAgICAgICAgICAgICAgICAgaWYgKChpc19hX2p1bXBfbiAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBzdWNjZWVkX24pCisrICAgICAgICAgICAgICAgICAgICAgIHx8ICghaXNfYV9qdW1wX24KKysgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChyZV9vcGNvZGVfdCkgKnAxID09IG9uX2ZhaWx1cmVfanVtcCkpCisrICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLyA7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgIGlmIChkID49IHN0cmluZzEgJiYgZCA8PSBlbmQxKQorKwkgICAgZGVuZCA9IGVuZF9tYXRjaF8xOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIGJyZWFrOyAgIC8qIE1hdGNoaW5nIGF0IHRoaXMgc3RhcnRpbmcgcG9pbnQgcmVhbGx5IGZhaWxzLiAgKi8KKysgICAgfSAvKiBmb3IgKDs7KSAqLworKworKyAgaWYgKGJlc3RfcmVnc19zZXQpCisrICAgIGdvdG8gcmVzdG9yZV9iZXN0X3JlZ3M7CisrCisrICBGUkVFX1ZBUklBQkxFUyAoKTsKKysKKysgIHJldHVybiAtMTsgICAgICAgICAJCQkvKiBGYWlsdXJlIHRvIG1hdGNoLiAgKi8KKyt9IC8qIHJlX21hdGNoXzIgKi8KKysMCisrLyogU3Vicm91dGluZSBkZWZpbml0aW9ucyBmb3IgcmVfbWF0Y2hfMi4gICovCisrCisrCisrLyogV2UgYXJlIHBhc3NlZCBQIHBvaW50aW5nIHRvIGEgcmVnaXN0ZXIgbnVtYmVyIGFmdGVyIGEgc3RhcnRfbWVtb3J5LgorKworKyAgIFJldHVybiB0cnVlIGlmIHRoZSBwYXR0ZXJuIHVwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0b3BfbWVtb3J5IGNhbgorKyAgIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisrCisrICAgSWYgd2UgZmluZCB0aGUgbWF0Y2hpbmcgc3RvcF9tZW1vcnksIHNldHMgUCB0byBwb2ludCB0byBvbmUgcGFzdCBpdHMgbnVtYmVyLgorKyAgIE90aGVyd2lzZSwgc2V0cyBQIHRvIGFuIHVuZGVmaW5lZCBieXRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBFTkQuCisrCisrICAgV2UgZG9uJ3QgaGFuZGxlIGR1cGxpY2F0ZXMgcHJvcGVybHkgKHlldCkuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwgVUNIQVJfVCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKQorK3sKKysgIGludCBtY250OworKyAgLyogUG9pbnQgdG8gYWZ0ZXIgdGhlIGFyZ3MgdG8gdGhlIHN0YXJ0X21lbW9yeS4gICovCisrICBVQ0hBUl9UICpwMSA9ICpwICsgMjsKKysKKysgIHdoaWxlIChwMSA8IGVuZCkKKysgICAgeworKyAgICAgIC8qIFNraXAgb3ZlciBvcGNvZGVzIHRoYXQgY2FuIG1hdGNoIG5vdGhpbmcsIGFuZCByZXR1cm4gdHJ1ZSBvcgorKwkgZmFsc2UsIGFzIGFwcHJvcHJpYXRlLCB3aGVuIHdlIGdldCB0byBvbmUgdGhhdCBjYW4ndCwgb3IgdG8gdGhlCisrICAgICAgICAgbWF0Y2hpbmcgc3RvcF9tZW1vcnkuICAqLworKworKyAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDEpCisrICAgICAgICB7CisrICAgICAgICAvKiBDb3VsZCBiZSBlaXRoZXIgYSBsb29wIG9yIGEgc2VyaWVzIG9mIGFsdGVybmF0aXZlcy4gICovCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgcDErKzsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysKKysgICAgICAgICAgLyogSWYgdGhlIG5leHQgb3BlcmF0aW9uIGlzIG5vdCBhIGp1bXAgYmFja3dhcmRzIGluIHRoZQorKwkgICAgIHBhdHRlcm4uICAqLworKworKwkgIGlmIChtY250ID49IDApCisrCSAgICB7CisrICAgICAgICAgICAgICAvKiBHbyB0aHJvdWdoIHRoZSBvbl9mYWlsdXJlX2p1bXBzIG9mIHRoZSBhbHRlcm5hdGl2ZXMsCisrICAgICAgICAgICAgICAgICBzZWVpbmcgaWYgYW55IG9mIHRoZSBhbHRlcm5hdGl2ZXMgY2Fubm90IG1hdGNoIG5vdGhpbmcuCisrICAgICAgICAgICAgICAgICBUaGUgbGFzdCBhbHRlcm5hdGl2ZSBzdGFydHMgd2l0aCBvbmx5IGEganVtcCwKKysgICAgICAgICAgICAgICAgIHdoZXJlYXMgdGhlIHJlc3Qgc3RhcnQgd2l0aCBvbl9mYWlsdXJlX2p1bXAgYW5kIGVuZAorKyAgICAgICAgICAgICAgICAgd2l0aCBhIGp1bXAsIGUuZy4sIGhlcmUgaXMgdGhlIHBhdHRlcm4gZm9yIGBhfGJ8Yyc6CisrCisrICAgICAgICAgICAgICAgICAvb25fZmFpbHVyZV9qdW1wLzAvNi9leGFjdG4vMS9hL2p1bXBfcGFzdF9hbHQvMC82CisrICAgICAgICAgICAgICAgICAvb25fZmFpbHVyZV9qdW1wLzAvNi9leGFjdG4vMS9iL2p1bXBfcGFzdF9hbHQvMC8zCisrICAgICAgICAgICAgICAgICAvZXhhY3RuLzEvYworKworKyAgICAgICAgICAgICAgICAgU28sIHdlIGhhdmUgdG8gZmlyc3QgZ28gdGhyb3VnaCB0aGUgZmlyc3QgKG4tMSkKKysgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcyBhbmQgdGhlbiBkZWFsIHdpdGggdGhlIGxhc3Qgb25lIHNlcGFyYXRlbHkuICAqLworKworKworKyAgICAgICAgICAgICAgLyogRGVhbCB3aXRoIHRoZSBmaXJzdCAobi0xKSBhbHRlcm5hdGl2ZXMsIHdoaWNoIHN0YXJ0CisrICAgICAgICAgICAgICAgICB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcCAoc2VlIGFib3ZlKSB0aGF0IGp1bXBzIHRvIHJpZ2h0CisrICAgICAgICAgICAgICAgICBwYXN0IGEganVtcF9wYXN0X2FsdC4gICovCisrCisrICAgICAgICAgICAgICB3aGlsZSAoKHJlX29wY29kZV90KSBwMVttY250LSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSA9PQorKwkJICAgICBqdW1wX3Bhc3RfYWx0KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgLyogYG1jbnQnIGhvbGRzIGhvdyBtYW55IGJ5dGVzIGxvbmcgdGhlIGFsdGVybmF0aXZlCisrICAgICAgICAgICAgICAgICAgICAgaXMsIGluY2x1ZGluZyB0aGUgZW5kaW5nIGBqdW1wX3Bhc3RfYWx0JyBhbmQKKysgICAgICAgICAgICAgICAgICAgICBpdHMgbnVtYmVyLiAgKi8KKysKKysgICAgICAgICAgICAgICAgICBpZiAoIVBSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKHAxLCBwMSArIG1jbnQgLQorKwkJCQkJCSgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSksCisrCQkJCQkJcmVnX2luZm8pKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgICAgICAgICAgIC8qIE1vdmUgdG8gcmlnaHQgYWZ0ZXIgdGhpcyBhbHRlcm5hdGl2ZSwgaW5jbHVkaW5nIHRoZQorKwkJICAgICBqdW1wX3Bhc3RfYWx0LiAgKi8KKysgICAgICAgICAgICAgICAgICBwMSArPSBtY250OworKworKyAgICAgICAgICAgICAgICAgIC8qIEJyZWFrIGlmIGl0J3MgdGhlIGJlZ2lubmluZyBvZiBhbiBuLXRoIGFsdGVybmF0aXZlCisrICAgICAgICAgICAgICAgICAgICAgdGhhdCBkb2Vzbid0IGJlZ2luIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wLiAgKi8KKysgICAgICAgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSAqcDEgIT0gb25fZmFpbHVyZV9qdW1wKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrCQkgIC8qIFN0aWxsIGhhdmUgdG8gY2hlY2sgdGhhdCBpdCdzIG5vdCBhbiBuLXRoCisrCQkgICAgIGFsdGVybmF0aXZlIHRoYXQgc3RhcnRzIHdpdGggYW4gb25fZmFpbHVyZV9qdW1wLiAgKi8KKysJCSAgcDErKzsKKysgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpIHAxW21jbnQtKDErT0ZGU0VUX0FERFJFU1NfU0laRSldICE9CisrCQkgICAgICBqdW1wX3Bhc3RfYWx0KQorKyAgICAgICAgICAgICAgICAgICAgeworKwkJICAgICAgLyogR2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG4tdGggYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgICAgICAgICAgICAgICBwMSAtPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIERlYWwgd2l0aCB0aGUgbGFzdCBhbHRlcm5hdGl2ZTogZ28gYmFjayBhbmQgZ2V0IG51bWJlcgorKyAgICAgICAgICAgICAgICAgb2YgdGhlIGBqdW1wX3Bhc3RfYWx0JyBqdXN0IGJlZm9yZSBpdC4gIGBtY250JyBjb250YWlucworKyAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVIgKG1jbnQsIHAxIC0gT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrCisrICAgICAgICAgICAgICBpZiAoIVBSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKHAxLCBwMSArIG1jbnQsIHJlZ19pbmZvKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgICAgICAgcDEgKz0gbWNudDsJLyogR2V0IHBhc3QgdGhlIG4tdGggYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgICAgIH0gLyogaWYgbWNudCA+IDAgKi8KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICBjYXNlIHN0b3BfbWVtb3J5OgorKwkgIGFzc2VydCAocDFbMV0gPT0gKipwKTsKKysgICAgICAgICAgKnAgPSBwMSArIDI7CisrICAgICAgICAgIHJldHVybiB0cnVlOworKworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgaWYgKCFQUkVGSVgoY29tbW9uX29wX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIGVuZCwgcmVnX2luZm8pKQorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfSAvKiB3aGlsZSBwMSA8IGVuZCAqLworKworKyAgcmV0dXJuIGZhbHNlOworK30gLyogZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCAqLworKworKworKy8qIFNpbWlsYXIgdG8gZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCwgYnV0IGRvZXNuJ3QgZGVhbCB3aXRoIGFsdGVybmF0aXZlczoKKysgICBJdCBleHBlY3RzIFAgdG8gYmUgdGhlIGZpcnN0IGJ5dGUgb2YgYSBzaW5nbGUgYWx0ZXJuYXRpdmUgYW5kIEVORCBvbmUKKysgICBieXRlIHBhc3QgdGhlIGxhc3QuIFRoZSBhbHRlcm5hdGl2ZSBjYW4gY29udGFpbiBncm91cHMuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqcCwgVUNIQVJfVCAqZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbykKKyt7CisrICBpbnQgbWNudDsKKysgIFVDSEFSX1QgKnAxID0gcDsKKysKKysgIHdoaWxlIChwMSA8IGVuZCkKKysgICAgeworKyAgICAgIC8qIFNraXAgb3ZlciBvcGNvZGVzIHRoYXQgY2FuIG1hdGNoIG5vdGhpbmcsIGFuZCBicmVhayB3aGVuIHdlIGdldAorKyAgICAgICAgIHRvIG9uZSB0aGF0IGNhbid0LiAgKi8KKysKKysgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKQorKyAgICAgICAgeworKwkvKiBJdCdzIGEgbG9vcC4gICovCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgcDErKzsKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgcDEgKz0gbWNudDsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrICAgICAgICAgIGlmICghUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBlbmQsIHJlZ19pbmZvKSkKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0gIC8qIHdoaWxlIHAxIDwgZW5kICovCisrCisrICByZXR1cm4gdHJ1ZTsKKyt9IC8qIGFsdF9tYXRjaF9udWxsX3N0cmluZ19wICovCisrCisrCisrLyogRGVhbHMgd2l0aCB0aGUgb3BzIGNvbW1vbiB0byBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wIGFuZAorKyAgIGFsdF9tYXRjaF9udWxsX3N0cmluZ19wLgorKworKyAgIFNldHMgUCB0byBvbmUgYWZ0ZXIgdGhlIG9wIGFuZCBpdHMgYXJndW1lbnRzLCBpZiBhbnkuICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsIFVDSEFSX1QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pCisreworKyAgaW50IG1jbnQ7CisrICBib29sZWFuIHJldDsKKysgIGludCByZWdfbm87CisrICBVQ0hBUl9UICpwMSA9ICpwOworKworKyAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSsrKQorKyAgICB7CisrICAgIGNhc2Ugbm9fb3A6CisrICAgIGNhc2UgYmVnbGluZToKKysgICAgY2FzZSBlbmRsaW5lOgorKyAgICBjYXNlIGJlZ2J1ZjoKKysgICAgY2FzZSBlbmRidWY6CisrICAgIGNhc2Ugd29yZGJlZzoKKysgICAgY2FzZSB3b3JkZW5kOgorKyAgICBjYXNlIHdvcmRib3VuZDoKKysgICAgY2FzZSBub3R3b3JkYm91bmQ6CisrI2lmZGVmIGVtYWNzCisrICAgIGNhc2UgYmVmb3JlX2RvdDoKKysgICAgY2FzZSBhdF9kb3Q6CisrICAgIGNhc2UgYWZ0ZXJfZG90OgorKyNlbmRpZgorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIHN0YXJ0X21lbW9yeToKKysgICAgICByZWdfbm8gPSAqcDE7CisrICAgICAgYXNzZXJ0IChyZWdfbm8gPiAwICYmIHJlZ19ubyA8PSBNQVhfUkVHTlVNKTsKKysgICAgICByZXQgPSBQUkVGSVgoZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgZW5kLCByZWdfaW5mbyk7CisrCisrICAgICAgLyogSGF2ZSB0byBzZXQgdGhpcyBoZXJlIGluIGNhc2Ugd2UncmUgY2hlY2tpbmcgYSBncm91cCB3aGljaAorKyAgICAgICAgIGNvbnRhaW5zIGEgZ3JvdXAgYW5kIGEgYmFjayByZWZlcmVuY2UgdG8gaXQuICAqLworKworKyAgICAgIGlmIChSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bcmVnX25vXSkgPT0gTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRSkKKysgICAgICAgIFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1tyZWdfbm9dKSA9IHJldDsKKysKKysgICAgICBpZiAoIXJldCkKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgLyogSWYgdGhpcyBpcyBhbiBvcHRpbWl6ZWQgc3VjY2VlZF9uIGZvciB6ZXJvIHRpbWVzLCBtYWtlIHRoZSBqdW1wLiAgKi8KKysgICAgY2FzZSBqdW1wOgorKyAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgaWYgKG1jbnQgPj0gMCkKKysgICAgICAgIHAxICs9IG1jbnQ7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIHN1Y2NlZWRfbjoKKysgICAgICAvKiBHZXQgdG8gdGhlIG51bWJlciBvZiB0aW1lcyB0byBzdWNjZWVkLiAgKi8KKysgICAgICBwMSArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrCisrICAgICAgaWYgKG1jbnQgPT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgcDEgLT0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgIHAxICs9IG1jbnQ7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIGR1cGxpY2F0ZToKKysgICAgICBpZiAoIVJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcDFdKSkKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBzZXRfbnVtYmVyX2F0OgorKyAgICAgIHAxICs9IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIC8qIEFsbCBvdGhlciBvcGNvZGVzIG1lYW4gd2UgY2Fubm90IG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLworKyAgICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgICpwID0gcDE7CisrICByZXR1cm4gdHJ1ZTsKKyt9IC8qIGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wICovCisrCisrCisrLyogUmV0dXJuIHplcm8gaWYgVFJBTlNMQVRFW1MxXSBhbmQgVFJBTlNMQVRFW1MyXSBhcmUgaWRlbnRpY2FsIGZvciBMRU4KKysgICBieXRlczsgbm9uemVybyBvdGhlcndpc2UuICAqLworKworK3N0YXRpYyBpbnQKKytQUkVGSVgoYmNtcF90cmFuc2xhdGUpIChjb25zdCBDSEFSX1QgKnMxLCBjb25zdCBDSEFSX1QgKnMyLCByZWdpc3RlciBpbnQgbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSkKKyt7CisrICByZWdpc3RlciBjb25zdCBVQ0hBUl9UICpwMSA9IChjb25zdCBVQ0hBUl9UICopIHMxOworKyAgcmVnaXN0ZXIgY29uc3QgVUNIQVJfVCAqcDIgPSAoY29uc3QgVUNIQVJfVCAqKSBzMjsKKysgIHdoaWxlIChsZW4pCisrICAgIHsKKysjaWZkZWYgV0NIQVIKKysgICAgICBpZiAoKCgqcDE8PTB4ZmYpP3RyYW5zbGF0ZVsqcDErK106KnAxKyspCisrCSAgIT0gKCgqcDI8PTB4ZmYpP3RyYW5zbGF0ZVsqcDIrK106KnAyKyspKQorKwlyZXR1cm4gMTsKKysjZWxzZSAvKiBCWVRFICovCisrICAgICAgaWYgKHRyYW5zbGF0ZVsqcDErK10gIT0gdHJhbnNsYXRlWypwMisrXSkgcmV0dXJuIDE7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgbGVuLS07CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysMCisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8KKysKKysvKiByZV9jb21waWxlX3BhdHRlcm4gaXMgdGhlIEdOVSByZWd1bGFyIGV4cHJlc3Npb24gY29tcGlsZXI6IGl0CisrICAgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIFNJWkUpIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gQlVGUC4KKysgICBSZXR1cm5zIDAgaWYgdGhlIHBhdHRlcm4gd2FzIHZhbGlkLCBvdGhlcndpc2UgYW4gZXJyb3Igc3RyaW5nLgorKworKyAgIEFzc3VtZXMgdGhlIGBhbGxvY2F0ZWQnIChhbmQgcGVyaGFwcyBgYnVmZmVyJykgYW5kIGB0cmFuc2xhdGUnIGZpZWxkcworKyAgIGFyZSBzZXQgaW4gQlVGUCBvbiBlbnRyeS4KKysKKysgICBXZSBjYWxsIHJlZ2V4X2NvbXBpbGUgdG8gZG8gdGhlIGFjdHVhbCBjb21waWxhdGlvbi4gICovCisrCisrY29uc3QgY2hhciAqCisrcmVfY29tcGlsZV9wYXR0ZXJuIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAorKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKyAgLyogR05VIGNvZGUgaXMgd3JpdHRlbiB0byBhc3N1bWUgYXQgbGVhc3QgUkVfTlJFR1MgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0CisrICAgICAoYW5kIGF0IGxlYXN0IG9uZSBleHRyYSB3aWxsIGJlIC0xKS4gICovCisrICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfVU5BTExPQ0FURUQ7CisrCisrICAvKiBBbmQgR05VIGNvZGUgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0byBnZXQgcmVnaXN0ZXIgaW5mb3JtYXRpb24KKysgICAgIGJ5IHBhc3NpbmcgbnVsbCBmb3IgdGhlIFJFR1MgYXJndW1lbnQgdG8gcmVfbWF0Y2gsIGV0Yy4sIG5vdCBieQorKyAgICAgc2V0dGluZyBub19zdWIuICAqLworKyAgYnVmcC0+bm9fc3ViID0gMDsKKysKKysgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZS4gICovCisrICBidWZwLT5uZXdsaW5lX2FuY2hvciA9IDE7CisrCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0ID0gd2NzX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIGxlbmd0aCwgcmVfc3ludGF4X29wdGlvbnMsIGJ1ZnApOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0ID0gYnl0ZV9yZWdleF9jb21waWxlIChwYXR0ZXJuLCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zLCBidWZwKTsKKysKKysgIGlmICghcmV0KQorKyAgICByZXR1cm4gTlVMTDsKKysgIHJldHVybiBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSByZXRdKTsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9jb21waWxlX3BhdHRlcm4sIHJlX2NvbXBpbGVfcGF0dGVybikKKysjZW5kaWYKKysMCisrLyogRW50cnkgcG9pbnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZpbmUKKysgICB0aGVtIHVubGVzcyBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkLiAgKi8KKysKKysjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCisrCisrLyogQlNEIGhhcyBvbmUgYW5kIG9ubHkgb25lIHBhdHRlcm4gYnVmZmVyLiAgKi8KKytzdGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlX2NvbXBfYnVmOworKworK2NoYXIgKgorKyNpZmRlZiBfTElCQworKy8qIE1ha2UgdGhlc2UgZGVmaW5pdGlvbnMgd2VhayBpbiBsaWJjLCBzbyBQT1NJWCBwcm9ncmFtcyBjYW4gcmVkZWZpbmUKKysgICB0aGVzZSBuYW1lcyBpZiB0aGV5IGRvbid0IHVzZSBvdXIgZnVuY3Rpb25zLCBhbmQgc3RpbGwgdXNlCisrICAgcmVnY29tcC9yZWdleGVjIGJlbG93IHdpdGhvdXQgbGluayBlcnJvcnMuICAqLworK3dlYWtfZnVuY3Rpb24KKysjZW5kaWYKKytyZV9jb21wIChjb25zdCBjaGFyICpzKQorK3sKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKyAgaWYgKCFzKQorKyAgICB7CisrICAgICAgaWYgKCFyZV9jb21wX2J1Zi5idWZmZXIpCisrCXJldHVybiAoY2hhciAqKSBnZXR0ZXh0ICgiTm8gcHJldmlvdXMgcmVndWxhciBleHByZXNzaW9uIik7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmICghcmVfY29tcF9idWYuYnVmZmVyKQorKyAgICB7CisrICAgICAgcmVfY29tcF9idWYuYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgbWFsbG9jICgyMDApOworKyAgICAgIGlmIChyZV9jb21wX2J1Zi5idWZmZXIgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSBSRUdfRVNQQUNFXSk7CisrICAgICAgcmVfY29tcF9idWYuYWxsb2NhdGVkID0gMjAwOworKworKyAgICAgIHJlX2NvbXBfYnVmLmZhc3RtYXAgPSAoY2hhciAqKSBtYWxsb2MgKDEgPDwgQllURVdJRFRIKTsKKysgICAgICBpZiAocmVfY29tcF9idWYuZmFzdG1hcCA9PSBOVUxMKQorKwlyZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgUkVHX0VTUEFDRV0pOworKyAgICB9CisrCisrICAvKiBTaW5jZSBgcmVfZXhlYycgYWx3YXlzIHBhc3NlcyBOVUxMIGZvciB0aGUgYHJlZ3MnIGFyZ3VtZW50LCB3ZQorKyAgICAgZG9uJ3QgbmVlZCB0byBpbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlciBmaWVsZHMgd2hpY2ggYWZmZWN0IGl0LiAgKi8KKysKKysgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZXMuICAqLworKyAgcmVfY29tcF9idWYubmV3bGluZV9hbmNob3IgPSAxOworKworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldCA9IHdjc19yZWdleF9jb21waWxlIChzLCBzdHJsZW4gKHMpLCByZV9zeW50YXhfb3B0aW9ucywgJnJlX2NvbXBfYnVmKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldCA9IGJ5dGVfcmVnZXhfY29tcGlsZSAocywgc3RybGVuIChzKSwgcmVfc3ludGF4X29wdGlvbnMsICZyZV9jb21wX2J1Zik7CisrCisrICBpZiAoIXJldCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBZZXMsIHdlJ3JlIGRpc2NhcmRpbmcgYGNvbnN0JyBoZXJlIGlmICFIQVZFX0xJQklOVEwuICAqLworKyAgcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIHJldF0pOworK30KKysKKysKKytpbnQKKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2Z1bmN0aW9uCisrI2VuZGlmCisrcmVfZXhlYyAoY29uc3QgY2hhciAqcykKKyt7CisrICBjb25zdCBpbnQgbGVuID0gc3RybGVuIChzKTsKKysgIHJldHVybgorKyAgICAwIDw9IHJlX3NlYXJjaCAoJnJlX2NvbXBfYnVmLCBzLCBsZW4sIDAsIGxlbiwgKHN0cnVjdCByZV9yZWdpc3RlcnMgKikgMCk7CisrfQorKworKyNlbmRpZiAvKiBfUkVHRVhfUkVfQ09NUCAqLworKwwKKysvKiBQT1NJWC4yIGZ1bmN0aW9ucy4gIERvbid0IGRlZmluZSB0aGVzZSBmb3IgRW1hY3MuICAqLworKworKyNpZm5kZWYgZW1hY3MKKysKKysvKiByZWdjb21wIHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFzIGEgc3RyaW5nIGFuZCBjb21waWxlcyBpdC4KKysKKysgICBQUkVHIGlzIGEgcmVnZXhfdCAqLiAgV2UgZG8gbm90IGV4cGVjdCBhbnkgZmllbGRzIHRvIGJlIGluaXRpYWxpemVkLAorKyAgIHNpbmNlIFBPU0lYIHNheXMgd2Ugc2hvdWxkbid0LiAgVGh1cywgd2Ugc2V0CisrCisrICAgICBgYnVmZmVyJyB0byB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGB1c2VkJyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYHN5bnRheCcgdG8gUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIGlmIHRoZQorKyAgICAgICBSRUdfRVhURU5ERUQgYml0IGluIENGTEFHUyBpcyBzZXQ7IG90aGVyd2lzZSwgdG8KKysgICAgICAgUkVfU1lOVEFYX1BPU0lYX0JBU0lDOworKyAgICAgYG5ld2xpbmVfYW5jaG9yJyB0byBSRUdfTkVXTElORSBiZWluZyBzZXQgaW4gQ0ZMQUdTOworKyAgICAgYGZhc3RtYXAnIHRvIGFuIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIGZhc3RtYXA7CisrICAgICBgZmFzdG1hcF9hY2N1cmF0ZScgdG8gemVybzsKKysgICAgIGByZV9uc3ViJyB0byB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGluIFBBVFRFUk4uCisrCisrICAgUEFUVEVSTiBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgcGF0dGVybiBzdHJpbmcuCisrCisrICAgQ0ZMQUdTIGlzIGEgc2VyaWVzIG9mIGJpdHMgd2hpY2ggYWZmZWN0IGNvbXBpbGF0aW9uLgorKworKyAgICAgSWYgUkVHX0VYVEVOREVEIGlzIHNldCwgd2UgdXNlIFBPU0lYIGV4dGVuZGVkIHN5bnRheDsgb3RoZXJ3aXNlLCB3ZQorKyAgICAgdXNlIFBPU0lYIGJhc2ljIHN5bnRheC4KKysKKysgICAgIElmIFJFR19ORVdMSU5FIGlzIHNldCwgdGhlbiAuIGFuZCBbXi4uLl0gZG9uJ3QgbWF0Y2ggbmV3bGluZS4KKysgICAgIEFsc28sIHJlZ2V4ZWMgd2lsbCB0cnkgYSBtYXRjaCBiZWdpbm5pbmcgYWZ0ZXIgZXZlcnkgbmV3bGluZS4KKysKKysgICAgIElmIFJFR19JQ0FTRSBpcyBzZXQsIHRoZW4gd2UgY29uc2lkZXJzIHVwcGVyLSBhbmQgbG93ZXJjYXNlCisrICAgICB2ZXJzaW9ucyBvZiBsZXR0ZXJzIHRvIGJlIGVxdWl2YWxlbnQgd2hlbiBtYXRjaGluZy4KKysKKysgICAgIElmIFJFR19OT1NVQiBpcyBzZXQsIHRoZW4gd2hlbiBQUkVHIGlzIHBhc3NlZCB0byByZWdleGVjLCB0aGF0CisrICAgICByb3V0aW5lIHdpbGwgcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBmYWlsdXJlLCBhbmQgbm90aGluZyBhYm91dCB0aGUKKysgICAgIHJlZ2lzdGVycy4KKysKKysgICBJdCByZXR1cm5zIDAgaWYgaXQgc3VjY2VlZHMsIG5vbnplcm8gaWYgaXQgZG9lc24ndC4gIChTZWUgcmVnZXguaCBmb3IKKysgICB0aGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBtZWFuaW5ncy4pICAqLworKworK2ludAorK3JlZ2NvbXAgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGludCBjZmxhZ3MpCisreworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrICByZWdfc3ludGF4X3Qgc3ludGF4CisrICAgID0gKGNmbGFncyAmIFJFR19FWFRFTkRFRCkgPworKyAgICAgIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCA6IFJFX1NZTlRBWF9QT1NJWF9CQVNJQzsKKysKKysgIC8qIHJlZ2V4X2NvbXBpbGUgd2lsbCBhbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgKi8KKysgIHByZWctPmJ1ZmZlciA9IDA7CisrICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworKyAgcHJlZy0+dXNlZCA9IDA7CisrCisrICAvKiBUcnkgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmYXN0bWFwLiAgKi8KKysgIHByZWctPmZhc3RtYXAgPSAoY2hhciAqKSBtYWxsb2MgKDEgPDwgQllURVdJRFRIKTsKKysKKysgIGlmIChjZmxhZ3MgJiBSRUdfSUNBU0UpCisrICAgIHsKKysgICAgICBpbnQgaTsKKysKKysgICAgICBwcmVnLT50cmFuc2xhdGUKKysJPSAoUkVfVFJBTlNMQVRFX1RZUEUpIG1hbGxvYyAoQ0hBUl9TRVRfU0laRQorKwkJCQkgICAgICAqIHNpemVvZiAoKihSRV9UUkFOU0xBVEVfVFlQRSkwKSk7CisrICAgICAgaWYgKHByZWctPnRyYW5zbGF0ZSA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIChpbnQpIFJFR19FU1BBQ0U7CisrCisrICAgICAgLyogTWFwIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHRvIGNvcnJlc3BvbmRpbmcgbG93ZXJjYXNlIG9uZXMuICAqLworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBDSEFSX1NFVF9TSVpFOyBpKyspCisrICAgICAgICBwcmVnLT50cmFuc2xhdGVbaV0gPSBJU1VQUEVSIChpKSA/IFRPTE9XRVIgKGkpIDogaTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworKworKyAgLyogSWYgUkVHX05FV0xJTkUgaXMgc2V0LCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4gICovCisrICBpZiAoY2ZsYWdzICYgUkVHX05FV0xJTkUpCisrICAgIHsgLyogUkVHX05FV0xJTkUgaW1wbGllcyBuZWl0aGVyIC4gbm9yIFteLi4uXSBtYXRjaCBuZXdsaW5lLiAgKi8KKysgICAgICBzeW50YXggJj0gflJFX0RPVF9ORVdMSU5FOworKyAgICAgIHN5bnRheCB8PSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkU7CisrICAgICAgLyogSXQgYWxzbyBjaGFuZ2VzIHRoZSBtYXRjaGluZyBiZWhhdmlvci4gICovCisrICAgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMDsKKysKKysgIHByZWctPm5vX3N1YiA9ICEhKGNmbGFncyAmIFJFR19OT1NVQik7CisrCisrICAvKiBQT1NJWCBzYXlzIGEgbnVsbCBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4gdGVybWluYXRlcyBpdCwgc28gd2UKKysgICAgIGNhbiB1c2Ugc3RybGVuIGhlcmUgaW4gY29tcGlsaW5nIHRoZSBwYXR0ZXJuLiAgKi8KKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXQgPSB3Y3NfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4LCBwcmVnKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldCA9IGJ5dGVfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4LCBwcmVnKTsKKysKKysgIC8qIFBPU0lYIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiB1bm1hdGNoZWQgb3Blbi1ncm91cCBhbmQgYW4KKysgICAgIHVubWF0Y2hlZCBjbG9zZS1ncm91cDogYm90aCBhcmUgUkVHX0VQQVJFTi4gICovCisrICBpZiAocmV0ID09IFJFR19FUlBBUkVOKSByZXQgPSBSRUdfRVBBUkVOOworKworKyAgaWYgKHJldCA9PSBSRUdfTk9FUlJPUiAmJiBwcmVnLT5mYXN0bWFwKQorKyAgICB7CisrICAgICAgLyogQ29tcHV0ZSB0aGUgZmFzdG1hcCBub3csIHNpbmNlIHJlZ2V4ZWMgY2Fubm90IG1vZGlmeSB0aGUgcGF0dGVybgorKwkgYnVmZmVyLiAgKi8KKysgICAgICBpZiAocmVfY29tcGlsZV9mYXN0bWFwIChwcmVnKSA9PSAtMikKKysJeworKwkgIC8qIFNvbWUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29tcHV0aW5nIHRoZSBmYXN0bWFwLCBqdXN0IGZvcmdldAorKwkgICAgIGFib3V0IGl0LiAgKi8KKysJICBmcmVlIChwcmVnLT5mYXN0bWFwKTsKKysJICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gKGludCkgcmV0OworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlZ2NvbXAsIHJlZ2NvbXApCisrI2VuZGlmCisrCisrCisrLyogcmVnZXhlYyBzZWFyY2hlcyBmb3IgYSBnaXZlbiBwYXR0ZXJuLCBzcGVjaWZpZWQgYnkgUFJFRywgaW4gdGhlCisrICAgc3RyaW5nIFNUUklORy4KKysKKysgICBJZiBOTUFUQ0ggaXMgemVybyBvciBSRUdfTk9TVUIgd2FzIHNldCBpbiB0aGUgY2ZsYWdzIGFyZ3VtZW50IHRvCisrICAgYHJlZ2NvbXAnLCB3ZSBpZ25vcmUgUE1BVENILiAgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgUE1BVENIIGhhcyBhdAorKyAgIGxlYXN0IE5NQVRDSCBlbGVtZW50cywgYW5kIHdlIHNldCB0aGVtIHRvIHRoZSBvZmZzZXRzIG9mIHRoZQorKyAgIGNvcnJlc3BvbmRpbmcgbWF0Y2hlZCBzdWJzdHJpbmdzLgorKworKyAgIEVGTEFHUyBzcGVjaWZpZXMgYGV4ZWN1dGlvbiBmbGFncycgd2hpY2ggYWZmZWN0IG1hdGNoaW5nOiBpZgorKyAgIFJFR19OT1RCT0wgaXMgc2V0LCB0aGVuIF4gZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKysgICBzdHJpbmc7IGlmIFJFR19OT1RFT0wgaXMgc2V0LCB0aGVuICQgZG9lcyBub3QgbWF0Y2ggYXQgdGhlIGVuZC4KKysKKysgICBXZSByZXR1cm4gMCBpZiB3ZSBmaW5kIGEgbWF0Y2ggYW5kIFJFR19OT01BVENIIGlmIG5vdC4gICovCisrCisraW50CisrcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorKyAgICAgICAgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCisreworKyAgaW50IHJldDsKKysgIHN0cnVjdCByZV9yZWdpc3RlcnMgcmVnczsKKysgIHJlZ2V4X3QgcHJpdmF0ZV9wcmVnOworKyAgaW50IGxlbiA9IHN0cmxlbiAoc3RyaW5nKTsKKysgIGJvb2xlYW4gd2FudF9yZWdfaW5mbyA9ICFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMDsKKysKKysgIHByaXZhdGVfcHJlZyA9ICpwcmVnOworKworKyAgcHJpdmF0ZV9wcmVnLm5vdF9ib2wgPSAhIShlZmxhZ3MgJiBSRUdfTk9UQk9MKTsKKysgIHByaXZhdGVfcHJlZy5ub3RfZW9sID0gISEoZWZsYWdzICYgUkVHX05PVEVPTCk7CisrCisrICAvKiBUaGUgdXNlciBoYXMgdG9sZCB1cyBleGFjdGx5IGhvdyBtYW55IHJlZ2lzdGVycyB0byByZXR1cm4KKysgICAgIGluZm9ybWF0aW9uIGFib3V0LCB2aWEgYG5tYXRjaCcuICBXZSBoYXZlIHRvIHBhc3MgdGhhdCBvbiB0byB0aGUKKysgICAgIG1hdGNoaW5nIHJvdXRpbmVzLiAgKi8KKysgIHByaXZhdGVfcHJlZy5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfRklYRUQ7CisrCisrICBpZiAod2FudF9yZWdfaW5mbykKKysgICAgeworKyAgICAgIHJlZ3MubnVtX3JlZ3MgPSBubWF0Y2g7CisrICAgICAgcmVncy5zdGFydCA9IFRBTExPQyAobm1hdGNoICogMiwgcmVnb2ZmX3QpOworKyAgICAgIGlmIChyZWdzLnN0YXJ0ID09IE5VTEwpCisrICAgICAgICByZXR1cm4gKGludCkgUkVHX05PTUFUQ0g7CisrICAgICAgcmVncy5lbmQgPSByZWdzLnN0YXJ0ICsgbm1hdGNoOworKyAgICB9CisrCisrICAvKiBQZXJmb3JtIHRoZSBzZWFyY2hpbmcgb3BlcmF0aW9uLiAgKi8KKysgIHJldCA9IHJlX3NlYXJjaCAoJnByaXZhdGVfcHJlZywgc3RyaW5nLCBsZW4sCisrICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0OiAqLyAwLCAvKiByYW5nZTogKi8gbGVuLAorKyAgICAgICAgICAgICAgICAgICB3YW50X3JlZ19pbmZvID8gJnJlZ3MgOiAoc3RydWN0IHJlX3JlZ2lzdGVycyAqKSAwKTsKKysKKysgIC8qIENvcHkgdGhlIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHRvIHRoZSBQT1NJWCBzdHJ1Y3R1cmUuICAqLworKyAgaWYgKHdhbnRfcmVnX2luZm8pCisrICAgIHsKKysgICAgICBpZiAocmV0ID49IDApCisrICAgICAgICB7CisrICAgICAgICAgIHVuc2lnbmVkIHI7CisrCisrICAgICAgICAgIGZvciAociA9IDA7IHIgPCBubWF0Y2g7IHIrKykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBwbWF0Y2hbcl0ucm1fc28gPSByZWdzLnN0YXJ0W3JdOworKyAgICAgICAgICAgICAgcG1hdGNoW3JdLnJtX2VvID0gcmVncy5lbmRbcl07CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgIC8qIElmIHdlIG5lZWRlZCB0aGUgdGVtcG9yYXJ5IHJlZ2lzdGVyIGluZm8sIGZyZWUgdGhlIHNwYWNlIG5vdy4gICovCisrICAgICAgZnJlZSAocmVncy5zdGFydCk7CisrICAgIH0KKysKKysgIC8qIFdlIHdhbnQgemVybyByZXR1cm4gdG8gbWVhbiBzdWNjZXNzLCB1bmxpa2UgYHJlX3NlYXJjaCcuICAqLworKyAgcmV0dXJuIHJldCA+PSAwID8gKGludCkgUkVHX05PRVJST1IgOiAoaW50KSBSRUdfTk9NQVRDSDsKKyt9CisrI2lmZGVmIF9MSUJDCisrLyogRUdMSUJDOiBUaGlzIGlzIGhhbmRsZWQgaW4gcmVnZXhlYy1jb21wYXQuYy4gICovCisrLyp3ZWFrX2FsaWFzIChfX3JlZ2V4ZWMsIHJlZ2V4ZWMpKi8KKysjaW5jbHVkZSAicmVnZXhlYy1jb21wYXQuYyIKKysjZW5kaWYKKysKKysKKysvKiBSZXR1cm5zIGEgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvIGFuIGVycm9yIGNvZGUsIEVSUkNPREUsIHJldHVybmVkCisrICAgZnJvbSBlaXRoZXIgcmVnY29tcCBvciByZWdleGVjLiAgIFdlIGRvbid0IHVzZSBQUkVHIGhlcmUuICAqLworKworK3NpemVfdAorK3JlZ2Vycm9yIChpbnQgZXJyY29kZSwgY29uc3QgcmVnZXhfdCAqcHJlZyBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgICAgICAgIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKQorK3sKKysgIGNvbnN0IGNoYXIgKm1zZzsKKysgIHNpemVfdCBtc2dfc2l6ZTsKKysKKysgIGlmIChlcnJjb2RlIDwgMAorKyAgICAgIHx8IGVycmNvZGUgPj0gKGludCkgKHNpemVvZiAocmVfZXJyb3JfbXNnaWQpCisrCQkJICAgLyBzaXplb2YgKHJlX2Vycm9yX21zZ2lkWzBdKSkpCisrICAgIC8qIE9ubHkgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgc2hvdWxkIGJlIHBhc3NlZAorKyAgICAgICB0byB0aGlzIHJvdXRpbmUuICBJZiB3ZSBhcmUgZ2l2ZW4gYW55dGhpbmcgZWxzZSwgb3IgaWYgb3RoZXIgcmVnZXgKKysgICAgICAgY29kZSBnZW5lcmF0ZXMgYW4gaW52YWxpZCBlcnJvciBjb2RlLCB0aGVuIHRoZSBwcm9ncmFtIGhhcyBhIGJ1Zy4KKysgICAgICAgRHVtcCBjb3JlIHNvIHdlIGNhbiBmaXggaXQuICAqLworKyAgICBhYm9ydCAoKTsKKysKKysgIG1zZyA9IGdldHRleHQgKHJlX2Vycm9yX21zZ2lkW2VycmNvZGVdKTsKKysKKysgIG1zZ19zaXplID0gc3RybGVuIChtc2cpICsgMTsgLyogSW5jbHVkZXMgdGhlIG51bGwuICAqLworKworKyAgaWYgKGVycmJ1Zl9zaXplICE9IDApCisrICAgIHsKKysgICAgICBpZiAobXNnX3NpemUgPiBlcnJidWZfc2l6ZSkKKysgICAgICAgIHsKKysjaWYgZGVmaW5lZCBIQVZFX01FTVBDUFkgfHwgZGVmaW5lZCBfTElCQworKwkgICooKGNoYXIgKikgbWVtcGNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSkpID0gJ1wwJzsKKysjZWxzZQorKyAgICAgICAgICBtZW1jcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpOworKyAgICAgICAgICBlcnJidWZbZXJyYnVmX3NpemUgLSAxXSA9IDA7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgbWVtY3B5IChlcnJidWYsIG1zZywgbXNnX3NpemUpOworKyAgICB9CisrCisrICByZXR1cm4gbXNnX3NpemU7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVnZXJyb3IsIHJlZ2Vycm9yKQorKyNlbmRpZgorKworKworKy8qIEZyZWUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHNwYWNlIHVzZWQgYnkgUFJFRy4gICovCisrCisrdm9pZAorK3JlZ2ZyZWUgKHJlZ2V4X3QgKnByZWcpCisreworKyAgaWYgKHByZWctPmJ1ZmZlciAhPSBOVUxMKQorKyAgICBmcmVlIChwcmVnLT5idWZmZXIpOworKyAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKysKKysgIHByZWctPmFsbG9jYXRlZCA9IDA7CisrICBwcmVnLT51c2VkID0gMDsKKysKKysgIGlmIChwcmVnLT5mYXN0bWFwICE9IE5VTEwpCisrICAgIGZyZWUgKHByZWctPmZhc3RtYXApOworKyAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisrICBwcmVnLT5mYXN0bWFwX2FjY3VyYXRlID0gMDsKKysKKysgIGlmIChwcmVnLT50cmFuc2xhdGUgIT0gTlVMTCkKKysgICAgZnJlZSAocHJlZy0+dHJhbnNsYXRlKTsKKysgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKKysjZW5kaWYKKysKKysjZW5kaWYgLyogbm90IGVtYWNzICAqLworKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKwwKKysjdW5kZWYgU1RPUkVfTlVNQkVSCisrI3VuZGVmIFNUT1JFX05VTUJFUl9BTkRfSU5DUgorKyN1bmRlZiBFWFRSQUNUX05VTUJFUgorKyN1bmRlZiBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUgorKworKyN1bmRlZiBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOCisrI3VuZGVmIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcKKysKKysjdW5kZWYgSU5JVF9GQUlMX1NUQUNLCisrI3VuZGVmIFJFU0VUX0ZBSUxfU1RBQ0sKKysjdW5kZWYgRE9VQkxFX0ZBSUxfU1RBQ0sKKysjdW5kZWYgUFVTSF9QQVRURVJOX09QCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9QT0lOVEVSCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9JTlQKKysjdW5kZWYgUFVTSF9GQUlMVVJFX0VMVAorKyN1bmRlZiBQT1BfRkFJTFVSRV9QT0lOVEVSCisrI3VuZGVmIFBPUF9GQUlMVVJFX0lOVAorKyN1bmRlZiBQT1BfRkFJTFVSRV9FTFQKKysjdW5kZWYgREVCVUdfUFVTSAorKyN1bmRlZiBERUJVR19QT1AKKysjdW5kZWYgUFVTSF9GQUlMVVJFX1BPSU5UCisrI3VuZGVmIFBPUF9GQUlMVVJFX1BPSU5UCisrCisrI3VuZGVmIFJFR19VTlNFVF9WQUxVRQorKyN1bmRlZiBSRUdfVU5TRVQKKysKKysjdW5kZWYgUEFURkVUQ0gKKysjdW5kZWYgUEFURkVUQ0hfUkFXCisrI3VuZGVmIFBBVFVORkVUQ0gKKysjdW5kZWYgVFJBTlNMQVRFCisrCisrI3VuZGVmIElOSVRfQlVGX1NJWkUKKysjdW5kZWYgR0VUX0JVRkZFUl9TUEFDRQorKyN1bmRlZiBCVUZfUFVTSAorKyN1bmRlZiBCVUZfUFVTSF8yCisrI3VuZGVmIEJVRl9QVVNIXzMKKysjdW5kZWYgU1RPUkVfSlVNUAorKyN1bmRlZiBTVE9SRV9KVU1QMgorKyN1bmRlZiBJTlNFUlRfSlVNUAorKyN1bmRlZiBJTlNFUlRfSlVNUDIKKysjdW5kZWYgRVhURU5EX0JVRkZFUgorKyN1bmRlZiBHRVRfVU5TSUdORURfTlVNQkVSCisrI3VuZGVmIEZSRUVfU1RBQ0tfUkVUVVJOCisrCisrIyB1bmRlZiBQT0lOVEVSX1RPX09GRlNFVAorKyMgdW5kZWYgTUFUQ0hJTkdfSU5fRlJTVF9TVFJJTkcKKysjIHVuZGVmIFBSRUZFVENICisrIyB1bmRlZiBBVF9TVFJJTkdTX0JFRworKyMgdW5kZWYgQVRfU1RSSU5HU19FTkQKKysjIHVuZGVmIFdPUkRDSEFSX1AKKysjIHVuZGVmIEZSRUVfVkFSCisrIyB1bmRlZiBGUkVFX1ZBUklBQkxFUworKyMgdW5kZWYgTk9fSElHSEVTVF9BQ1RJVkVfUkVHCisrIyB1bmRlZiBOT19MT1dFU1RfQUNUSVZFX1JFRworKworKyMgdW5kZWYgQ0hBUl9UCisrIyB1bmRlZiBVQ0hBUl9UCisrIyB1bmRlZiBDT01QSUxFRF9CVUZGRVJfVkFSCisrIyB1bmRlZiBPRkZTRVRfQUREUkVTU19TSVpFCisrIyB1bmRlZiBDSEFSX0NMQVNTX1NJWkUKKysjIHVuZGVmIFBSRUZJWAorKyMgdW5kZWYgQVJHX1BSRUZJWAorKyMgdW5kZWYgUFVUX0NIQVIKKysjIHVuZGVmIEJZVEUKKysjIHVuZGVmIFdDSEFSCisrCisrIyBkZWZpbmUgREVGSU5FRF9PTkNFCitkaWZmIC0tZ2l0IGEvcHdkL01ha2VmaWxlIGIvcHdkL01ha2VmaWxlCitpbmRleCA3ZjZkZTAzLi45MTZkNTQ2IDEwMDY0NAorLS0tIGEvcHdkL01ha2VmaWxlCisrKysgYi9wd2QvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBwd2QgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBwd2QKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK2RpZmYgLS1naXQgYS9yZXNvbHYvTWFrZWZpbGUgYi9yZXNvbHYvTWFrZWZpbGUKK2luZGV4IDFkY2I3NWYuLjJlNGI2MzAgMTAwNjQ0CistLS0gYS9yZXNvbHYvTWFrZWZpbGUKKysrKyBiL3Jlc29sdi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHJlc29sdiBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHJlc29sdgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDIxICsyOSwyMiBAQCBoZWFkZXJzCTo9IHJlc29sdi5oIFwKKyAJICAgYXJwYS9uYW1lc2VyLmggYXJwYS9uYW1lc2VyX2NvbXBhdC5oIFwKKyAJICAgc3lzL2JpdHlwZXMuaAorIAorLXJvdXRpbmVzIDo9IGhlcnJvciBpbmV0X2FkZHIgaW5ldF9udG9wIGluZXRfcHRvbiBuc2FwX2FkZHIgcmVzX2luaXQgXAorLQkgICAgcmVzX2hjb25mIHJlc19saWJjIHJlcy1zdGF0ZQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSBcCisrCSs9IGhlcnJvciBpbmV0X2FkZHIgaW5ldF9udG9wIGluZXRfcHRvbiBuc2FwX2FkZHIgcmVzX2luaXQgXAorKwkgICByZXNfaGNvbmYgcmVzX2xpYmMgcmVzLXN0YXRlCisgCistdGVzdHMgPSB0c3QtYXRvbiB0c3QtbGVha3MgdHN0LWluZXRfbnRvcAorLXh0ZXN0cyA9IHRzdC1sZWFrczIKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gdHN0LWF0b24gdHN0LWxlYWtzIHRzdC1pbmV0X250b3AKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IHRzdC1sZWFrczIKKyAKKyBnZW5lcmF0ZSA6PSBtdHJhY2UtdHN0LWxlYWtzLm91dCB0c3QtbGVha3MubXRyYWNlIHRzdC1sZWFrczIubXRyYWNlCisgCistZXh0cmEtbGlicyA6PSBsaWJyZXNvbHYgbGlibnNzX2RucworK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGxpYnJlc29sdiBsaWJuc3NfZG5zCisgaWZlcSAoJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXMpCistZXh0cmEtbGlicyArPSBsaWJhbmwKKy1yb3V0aW5lcyArPSBnYWlfc2lncXVldWUKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JTkVUX0FOTCkgKz0gbGliYW5sCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGdhaV9zaWdxdWV1ZQorIHRlc3RzICs9IHRzdC1yZXNfaGNvbmZfcmVvcmRlcgorIGVuZGlmCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy1vdGhlcnMteSArPSAkKGV4dHJhLWxpYnMteSkKKyBsaWJyZXNvbHYtcm91dGluZXMgOj0gZ2V0aG5hbWFkZHIgcmVzX2NvbXAgcmVzX2RlYnVnCVwKKyAJCSAgICAgIHJlc19kYXRhIHJlc19ta3F1ZXJ5IHJlc19xdWVyeSByZXNfc2VuZAkJXAorIAkJICAgICAgaW5ldF9uZXRfbnRvcCBpbmV0X25ldF9wdG9uIGluZXRfbmV0YSBiYXNlNjQJXAorQEAgLTYxLDcgKzY0LDcgQEAgcm91dGluZXMgICAgICAgICAgICAgICAgKz0gJChsaWJuc3NfZG5zLXJvdXRpbmVzKSAkKGxpYnJlc29sdi1yb3V0aW5lcykKKyBzdGF0aWMtb25seS1yb3V0aW5lcyAgICArPSAkKGxpYm5zc19kbnMtcm91dGluZXMpICQobGlicmVzb2x2LXJvdXRpbmVzKQorIGVuZGlmCisgCistaWZlcSAoeWVzeWVzLCQoYnVpbGQtc2hhcmVkKSQoaGF2ZS10aHJlYWQtbGlicmFyeSkpCisraWZlcSAoeWVzeWVzeSwkKGJ1aWxkLXNoYXJlZCkkKGhhdmUtdGhyZWFkLWxpYnJhcnkpJChPUFRJT05fRUdMSUJDX0lORVRfQU5MKSkKKyB0ZXN0czogJChvYmpwZngpZ2FfdGVzdAorIGVuZGlmCisgCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL01ha2VmaWxlIGIvc3RkaW8tY29tbW9uL01ha2VmaWxlCitpbmRleCBkMGJmMGUxLi44NjU1ODAxIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL01ha2VmaWxlCisrKysgYi9zdGRpby1jb21tb24vTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3BlY2lmaWMgbWFrZWZpbGUgZm9yIHN0ZGlvLWNvbW1vbi4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdGRpby1jb21tb24KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCw3ICszMiw3IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJdmZwcmludGYgdnByaW50ZiBwcmludGZfZnAgcmVnLXByaW50ZiBwcmludGYtcHJzIHByaW50Zl9mcGhleAkgICAgICBcCisgCXJlZy1tb2RpZmllciByZWctdHlwZQkJCQkJCSAgICAgIFwKKyAJcHJpbnRmX3NpemUgZnByaW50ZiBwcmludGYgc25wcmludGYgc3ByaW50ZiBhc3ByaW50ZiBkcHJpbnRmCSAgICAgIFwKKy0JdmZ3cHJpbnRmIHZmc2NhbmYgdmZ3c2NhbmYJCQkJCSAgICAgIFwKKysJdmZzY2FuZgkJCQkJCQkJICAgICAgXAorIAlmc2NhbmYgc2NhbmYgc3NjYW5mCQkJCQkJICAgICAgXAorIAlwZXJyb3IgcHNpZ25hbAkJCQkJCQkgICAgICBcCisgCXRtcGZpbGUgdG1wZmlsZTY0IHRtcG5hbSB0bXBuYW1fciB0ZW1wbmFtIHRlbXBuYW1lCQkgICAgICBcCitAQCAtNDEsMjMgKzQzLDM2IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJaXNvYzk5X3Zzc2NhbmYJCQkJCQkJICAgICAgXAorIAlwc2lnaW5mbworIAorLWF1eAk6PSBlcnJsaXN0IHNpZ2xpc3QgcHJpbnRmLXBhcnNlbWIgcHJpbnRmLXBhcnNld2MgZnhwcmludGYKKysjIElkZWFsbHksIF9pdG93YSBhbmQgaXRvd2EtZGlnaXRzIHdvdWxkIGJlIGluIHRoaXMgb3B0aW9uIGdyb3VwIGFzCisrIyB3ZWxsLCBidXQgaXQgaXMgdXNlZCB1bmNvbmRpdGlvbmFsbHkgYnkgcHJpbnRmX2ZwIGFuZCBwcmludGZfZnBoZXgsCisrIyBhbmQgaXQgZGlkbid0IHNlZW0gc3RyYWlnaHRmb3J3YXJkIHRvIGRpc2VudGFuZ2xlIGl0LgorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJKz0gdmZ3cHJpbnRmIHZmd3NjYW5mCisrCisrYXV4CTo9IGVycmxpc3Qgc2lnbGlzdCBwcmludGYtcGFyc2VtYiBmeHByaW50ZgorK2F1eC0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPSBwcmludGYtcGFyc2V3YworIAorIHRlc3RzIDo9IHRzdHNjYW5mIHRlc3RfcmR3ciB0ZXN0LXBvcGVuIHRzdGdldGxuIHRlc3QtZnNlZWsgXAorIAkgdGVtcHRlc3QgdHN0LWZpbGVubyB0ZXN0LWZ3cml0ZSB0c3QtdW5nZXRjIHRzdC1mZXJyb3IgXAorIAkgeGJ1ZyBlcnJub2J1ZyBcCisgCSBidWcxIGJ1ZzIgYnVnMyBidWc0IGJ1ZzUgYnVnNiBidWc3IGJ1ZzggYnVnOSBidWcxMCBidWcxMSBidWcxMiBidWcxMyBcCistCSB0ZmZvcm1hdCB0aWZvcm1hdCB0bGxmb3JtYXQgdHN0ZGlvbWlzYyB0c3QtcHJpbnRmc3ogdHN0LXdjLXByaW50ZiBcCisrCSB0ZmZvcm1hdCB0aWZvcm1hdCB0bGxmb3JtYXQgdHN0ZGlvbWlzYyB0c3QtcHJpbnRmc3ogXAorIAkgc2NhbmYxIHNjYW5mMiBzY2FuZjMgc2NhbmY0IHNjYW5mNSBzY2FuZjcgc2NhbmY4IHNjYW5mOSBzY2FuZjEwIFwKKy0JIHNjYW5mMTEgc2NhbmYxMiB0c3QtdG1wbmFtIHRzdC1jb29raWUgdHN0LW9icHJpbnRmIHRzdC1zc2NhbmYgXAorLQkgdHN0LXN3cHJpbnRmIHRzdC1mc2VlayB0c3QtZm1lbW9wZW4gdGVzdC12ZnByaW50ZiB0c3QtZ2V0cyBcCistCSB0c3QtcGVycm9yIHRzdC1zcHJpbnRmIHRzdC1ybmRzZWVrIHRzdC1mZG9wZW4gdHN0LWZwaGV4IGJ1ZzE0IFwKKysJIHNjYW5mMTEgc2NhbmYxMiB0c3QtdG1wbmFtIHRzdC1jb29raWUgdHN0LW9icHJpbnRmIFwKKysJIHRzdC1mc2VlayB0c3QtZm1lbW9wZW4gdHN0LWdldHMgXAorKwkgdHN0LXNwcmludGYgdHN0LXJuZHNlZWsgdHN0LWZkb3BlbiB0c3QtZnBoZXggXAorIAkgdHN0LXBvcGVuIHRzdC11bmxvY2tlZGlvIHRzdC1mbWVtb3BlbjIgdHN0LXB1dC1lcnJvciB0c3QtZmdldHMgXAorLQkgdHN0LWZ3cml0ZSBidWcxNiBidWcxNyB0c3Qtc3dzY2FuZiB0c3Qtc3ByaW50ZjIgYnVnMTggYnVnMThhIFwKKy0JIGJ1ZzE5IGJ1ZzE5YSB0c3QtcG9wZW4yIHNjYW5mMTMgc2NhbmYxNCBzY2FuZjE1IGJ1ZzIwIGJ1ZzIxIGJ1ZzIyIFwKKy0JIHNjYW5mMTYgc2NhbmYxNyB0c3Qtc2V0dmJ1ZjEgdHN0LWdyb3VwaW5nIGJ1ZzIzIGJ1ZzI0IFwKKy0JIGJ1Zy12ZnByaW50Zi1uYXJncyB0c3QtbG9uZy1kYmwtZnBoZXggdHN0LWZwaGV4LXdpZGUgdHN0LXNwcmludGYzIFwKKysJIHRzdC1md3JpdGUgYnVnMTYgYnVnMTcgdHN0LXNwcmludGYyIGJ1ZzE4IFwKKysJIGJ1ZzE5IHRzdC1wb3BlbjIgc2NhbmYxNCBzY2FuZjE1IGJ1ZzIxIGJ1ZzIyIFwKKysJIHNjYW5mMTYgc2NhbmYxNyB0c3Qtc2V0dmJ1ZjEgYnVnMjMgYnVnMjQgXAorKwkgYnVnLXZmcHJpbnRmLW5hcmdzIHRzdC1zcHJpbnRmMyBcCisgCSBidWcyNSB0c3QtcHJpbnRmLXJvdW5kIGJ1ZzIzLTIgYnVnMjMtMyBidWcyMy00IGJ1ZzI2IHRzdC1mbWVtb3BlbjMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJICs9IHRzdC1zc2NhbmYgdHN0LXN3cHJpbnRmIHRlc3QtdmZwcmludGYgYnVnMTQgc2NhbmYxMyB0c3QtZ3JvdXBpbmcKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSBcCisrCSArPSB0c3QtcGVycm9yIGJ1ZzE5YSBidWcyMCB0c3QtbG9uZy1kYmwtZnBoZXggdHN0LWZwaGV4LXdpZGUKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSArPSBidWcxOGEgdHN0LXN3c2NhbmYgdHN0LXdjLXByaW50ZgorIAorIHRlc3Qtc3JjcyA9IHRzdC11bmJwdXRjIHRzdC1wcmludGYKKyAKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmggYi9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmgKK2luZGV4IDNjNzMwNDQuLmFjNjJiM2EgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmgKKysrKyBiL3N0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaAorQEAgLTE5LDEwICsxOSwxMyBAQAorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPHdjdHlwZS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlICIuLi9sb2NhbGUvb3V0ZGlnaXRzLmgiCisgI2luY2x1ZGUgIi4uL2xvY2FsZS9vdXRkaWdpdHN3Yy5oIgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysKKyBzdGF0aWMgQ0hBUl9UICoKKyBfaTE4bl9udW1iZXJfcmV3cml0ZSAoQ0hBUl9UICp3LCBDSEFSX1QgKnJlYXJfcHRyLCBDSEFSX1QgKmVuZCkKKyB7CitAQCAtMTE1LDMgKzExOCwxMyBAQCBfaTE4bl9udW1iZXJfcmV3cml0ZSAoQ0hBUl9UICp3LCBDSEFSX1QgKnJlYXJfcHRyLCBDSEFSX1QgKmVuZCkKKyAKKyAgIHJldHVybiB3OworIH0KKysKKysjZWxzZQorKworK3N0YXRpYyBDSEFSX1QgKgorK19pMThuX251bWJlcl9yZXdyaXRlIChDSEFSX1QgKncsIENIQVJfVCAqcmVhcl9wdHIsIENIQVJfVCAqZW5kKQorK3sKKysgIHJldHVybiB3OworK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vZnhwcmludGYuYyBiL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jCitpbmRleCA3YjJlYjk0Li44NDc2MDc2IDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bGliaW9QLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgaW50CitAQCAtMzcsNiArMzgsNyBAQCBfX2Z4cHJpbnRmIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICBpbnQgcmVzOworICAgaWYgKF9JT19md2lkZSAoZnAsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZm10KSArIDE7CisgICAgICAgd2NoYXJfdCB3Zm10W2xlbl07CisgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkKK0BAIC00NSw2ICs0Nyw5IEBAIF9fZnhwcmludGYgKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAJICB3Zm10W2ldID0gZm10W2ldOworIAl9CisgICAgICAgcmVzID0gX192ZndwcmludGYgKGZwLCB3Zm10LCBhcCk7CisrI2Vsc2UKKysgICAgICBhYm9ydCgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHJlcyA9IF9JT192ZnByaW50ZiAoZnAsIGZtdCwgYXApOworZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYworaW5kZXggMzAyM2IyMC4uYmQwZGY2NiAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYworKysrIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcC5jCitAQCAtMzksNiArMzksNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8cm91bmRpbmctbW9kZS5oPgorIAorQEAgLTE0Miw2ICsxNDMsMTAgQEAgZXh0ZXJuIG1wX3NpemVfdCBfX21wbl9leHRyYWN0X2xvbmdfZG91YmxlIChtcF9wdHIgcmVzX3B0ciwgbXBfc2l6ZV90IHNpemUsCisgZXh0ZXJuIHVuc2lnbmVkIGludCBfX2d1ZXNzX2dyb3VwaW5nICh1bnNpZ25lZCBpbnQgaW50ZGlnX21heCwKKyAJCQkJICAgICAgY29uc3QgY2hhciAqZ3JvdXBpbmcpOworIAorKy8qIElkZWFsbHksIHdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhpcyBzaG91bGQgZG8KKysgICBhbGwgaXRzIHdvcmsgaW4gb3JkaW5hcnkgY2hhcmFjdGVycywgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW4gd2lkZQorKyAgIGNoYXJhY3RlcnMgYW5kIHRoZW4gY29udmVydGluZyBhdCB0aGUgZW5kLiAgQnV0IHRoYXQgaXMgYSBjaGFsbGVuZ2UKKysgICBmb3IgYW5vdGhlciBkYXkuICAqLworIAorIHN0YXRpYyB3Y2hhcl90ICpncm91cF9udW1iZXIgKHdjaGFyX3QgKmJ1Ziwgd2NoYXJfdCAqYnVmZW5kLAorIAkJCSAgICAgIHVuc2lnbmVkIGludCBpbnRkaWdfbm8sIGNvbnN0IGNoYXIgKmdyb3VwaW5nLAorQEAgLTI1MSw3ICsyNTYsMTQgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgIG1wX2xpbWJfdCBjeTsKKyAKKyAgIC8qIE5vbnplcm8gaWYgdGhpcyBpcyBvdXRwdXQgb24gYSB3aWRlIGNoYXJhY3RlciBzdHJlYW0uICAqLworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpbnQgd2lkZSA9IGluZm8tPndpZGU7CisrI2Vsc2UKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtIHdoZW4KKysgICAgIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0CisrICAgICBiZSB0cnVzdGVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBjb25zdCBpbnQgd2lkZSA9IDA7CisrI2VuZGlmCisgCisgICAvKiBCdWZmZXIgaW4gd2hpY2ggd2UgcHJvZHVjZSB0aGUgb3V0cHV0LiAgKi8KKyAgIHdjaGFyX3QgKndidWZmZXIgPSBOVUxMOworQEAgLTI2MSw2ICsyNzMsNyBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgcC5leHBzaWduID0gMDsKKyAKKyAgIC8qIEZpZ3VyZSBvdXQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoaW5mby0+ZXh0cmEgPT0gMCkKKyAgICAgeworICAgICAgIGRlY2ltYWwgPSBfTkxfQ1VSUkVOVCAoTENfTlVNRVJJQywgREVDSU1BTF9QT0lOVCk7CitAQCAtMjgwLDcgKzI5MywxMyBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgLyogVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIG11c3Qgbm90IGJlIHplcm8uICAqLworICAgYXNzZXJ0ICgqZGVjaW1hbCAhPSAnXDAnKTsKKyAgIGFzc2VydCAoZGVjaW1hbHdjICE9IEwnXDAnKTsKKysjZWxzZQorKyAgLyogSGFyZC1jb2RlIHZhbHVlcyBmcm9tICdDJyBsb2NhbGUuICAqLworKyAgZGVjaW1hbCA9ICIuIjsKKysgIGRlY2ltYWx3YyA9IEwnLic7CisrI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKGluZm8tPmdyb3VwKQorICAgICB7CisgICAgICAgaWYgKGluZm8tPmV4dHJhID09IDApCitAQCAtMzI0LDYgKzM0Myw5IEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICAgIH0KKyAgIGVsc2UKKyAgICAgZ3JvdXBpbmcgPSBOVUxMOworKyNlbHNlCisrICBncm91cGluZyA9IE5VTEw7CisrI2VuZGlmCisgCisgICAvKiBGZXRjaCB0aGUgYXJndW1lbnQgdmFsdWUuCSovCisgI2lmbmRlZiBfX05PX0xPTkdfRE9VQkxFX01BVEgKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMKK2luZGV4IDZjM2I1ZTkuLmY2NjBjZTAgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSA8X2l0b2EuaD4KKyAjaW5jbHVkZSA8X2l0b3dhLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8cm91bmRpbmctbW9kZS5oPgorIAorQEAgLTEzOSwxMCArMTQwLDE4IEBAIF9fcHJpbnRmX2ZwaGV4IChGSUxFICpmcCwKKyAgIGludCBkb25lID0gMDsKKyAKKyAgIC8qIE5vbnplcm8gaWYgdGhpcyBpcyBvdXRwdXQgb24gYSB3aWRlIGNoYXJhY3RlciBzdHJlYW0uICAqLworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpbnQgd2lkZSA9IGluZm8tPndpZGU7CisrI2Vsc2UKKysgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtIHdoZW4KKysgICAgIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0CisrICAgICBiZSB0cnVzdGVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gICovCisrICBjb25zdCBpbnQgd2lkZSA9IDA7CisrI2VuZGlmCisgCisgCisgICAvKiBGaWd1cmUgb3V0IHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKGluZm8tPmV4dHJhID09IDApCisgICAgIHsKKyAgICAgICBkZWNpbWFsID0gX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIERFQ0lNQUxfUE9JTlQpOworQEAgLTE1Niw2ICsxNjUsMTAgQEAgX19wcmludGZfZnBoZXggKEZJTEUgKmZwLAorICAgICB9CisgICAvKiBUaGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIgbXVzdCBuZXZlciBiZSB6ZXJvLiAgKi8KKyAgIGFzc2VydCAoKmRlY2ltYWwgIT0gJ1wwJyAmJiBkZWNpbWFsd2MgIT0gTCdcMCcpOworKyNlbHNlCisrICBkZWNpbWFsID0gIi4iOworKyAgZGVjaW1hbHdjID0gTCcuJzsKKysjZW5kaWYKKyAKKyAKKyAgIC8qIEZldGNoIHRoZSBhcmd1bWVudCB2YWx1ZS4JKi8KK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jCitpbmRleCA3ZGNkNThlLi42ZmI3NDkxIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPHByaW50Zi5oPgorICNpbmNsdWRlIDxsaWJpb1AuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyAvKiBUaGlzIGRlZmluZXMgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgdGhlIHNhbWUgY29kZSBmb3IgR05VIEMgbGlicmFyeSBhbmQKK0BAIC0xMTYsNyArMTE3LDE0IEBAIF9fcHJpbnRmX3NpemUgKEZJTEUgKmZwLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sCisgCisgICBzdHJ1Y3QgcHJpbnRmX2luZm8gZnBfaW5mbzsKKyAgIGludCBkb25lID0gMDsKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaW50IHdpZGUgPSBpbmZvLT53aWRlOworKyNlbHNlCisrICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSB3aWRlLW9yaWVudGVkIHN0cmVhbSB3aGVuCisrICAgICBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgYnV0IHRoZSBjb21waWxlciBjYW4ndAorKyAgICAgYmUgdHJ1c3RlZCB0byBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgY29uc3QgaW50IHdpZGUgPSAwOworKyNlbmRpZgorICAgaW50IHJlczsKKyAKKyAgIC8qIEZldGNoIHRoZSBhcmd1bWVudCB2YWx1ZS4JKi8KK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vc2NhbmYxNC5jIGIvc3RkaW8tY29tbW9uL3NjYW5mMTQuYworaW5kZXggY2ZmY2NiMC4uNmNjMjYwYSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMKK0BAIC0zLDYgKzMsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNkZWZpbmUgRkFJTCgpIFwKKyAgIGRvIHsJCQkJCQkJXAorQEAgLTQ4LDYgKzQ5LDcgQEAgbWFpbiAodm9pZCkKKyAgIC8qIFNlZSBleHBsYW5hdGlvbiBhYm92ZS4gICovCisgICBESUFHX1BVU0hfTkVFRFNfQ09NTUVOVDsKKyAgIERJQUdfSUdOT1JFX05FRURTX0NPTU1FTlQgKDQuOSwgIi1XZm9ybWF0Iik7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKHNzY2FuZiAoIiAzLjI1UyB4IiwgIiU0YVMlM2MiLCAmbHNwLCBjKSAhPSAyKQorICAgICBGQUlMICgpOworICAgZWxzZQorQEAgLTU3LDYgKzU5LDcgQEAgbWFpbiAodm9pZCkKKyAgICAgICBtZW1zZXQgKGxzcCwgJ3gnLCBzaXplb2YgTCIzLjI1Iik7CisgICAgICAgZnJlZSAobHNwKTsKKyAgICAgfQorKyNlbmRpZgorICAgaWYgKHNzY2FuZiAoIjQuMjVbMC05Ll0geCIsICIlYVswLTkuXSU4YyIsICZzcCwgYykgIT0gMikKKyAgICAgRkFJTCAoKTsKKyAgIGVsc2UKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMgYi9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMKK2luZGV4IDVkZWYyN2YuLjdjOWI5MWUgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYworQEAgLTE5LDYgKzE5LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIGRvX3Rlc3QgKHZvaWQpCitAQCAtMzQsMTIgKzM1LDE0IEBAIGRvX3Rlc3QgKHZvaWQpCisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgLyogUE9TSVggc2F5cyB0aGF0IHBpcGUgc3RyZWFtcyBhcmUgYnl0ZS1vcmllbnRlZC4gICovCisgICBpZiAoZndpZGUgKGYsIDApID49IDApCisgICAgIHsKKyAgICAgICBwdXRzICgicG9wZW4gZGlkIG5vdCByZXR1cm4gYnl0ZS1vcmllbnRlZCBzdHJlYW0iKTsKKyAgICAgICByZXN1bHQgPSAxOworICAgICB9CisrI2VuZGlmCisgCisgICBpZiAoZ2V0bGluZSAoJmxpbmUsICZsZW4sIGYpICE9IDUpCisgICAgIHsKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYyBiL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jCitpbmRleCBkNTI4NGI5Li5mMWUzZDIxIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jCitAQCAtMyw3ICszLDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaWJjLWludGVybmFsLmg+CistCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIGRvX3Rlc3QgKHZvaWQpCitAQCAtMTEsMTIgKzExLDE0IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBjaGFyIGJ1ZlsxMDBdOworICAgaW50IHJlc3VsdCA9IDA7CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGlmIChzcHJpbnRmIChidWYsICIlLjBscyIsIEwiZm9vIikgIT0gMAorICAgICAgIHx8IHN0cmxlbiAoYnVmKSAhPSAwKQorICAgICB7CisgICAgICAgcHV0cyAoInNwcmludGYgKGJ1ZiwgXCIlLjBsc1wiLCBMXCJmb29cIikgcHJvZHVjZWQgc29tZSBvdXRwdXQiKTsKKyAgICAgICByZXN1bHQgPSAxOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAjZGVmaW5lIFNJWkUgKDEwMjQqNzAwMDApCisgI2RlZmluZSBTVFIoeCkgI3gKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jIGIvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYworaW5kZXggNTU0OGE3MS4uMzFlZDAyNCAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMKK0BAIC00LDYgKzQsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyB0MSAodm9pZCkKK0BAIC0xMzQsNiArMTM1LDcgQEAgRiAodm9pZCkKKyAgIHByaW50ZiAoImV4cGVjdGVkIFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBcIiVzXCJcbiIsCisgCSAgYnVmKTsKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgc3dwcmludGYgKHdidWYsIHNpemVvZiB3YnVmIC8gc2l6ZW9mICh3YnVmWzBdKSwgTCIlYSAlQSAlZSAlRSAlZiAlRiAlZyAlRyIsCisgCSAgICBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsLCBxbmFudmFsLAorIAkgICAgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCk7CitAQCAtMTcxLDYgKzE3Myw3IEBAIEYgKHZvaWQpCisgICByZXN1bHQgfD0gd2NzY21wICh3YnVmLCBMIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiIpICE9IDA7CisgICBwcmludGYgKCJleHBlY3RlZCBMXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IExcIiVTXCJcbiIsCisgCSAgd2J1Zik7CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIGxxbmFudmFsID0gTkFOOworIAorQEAgLTIxNSw2ICsyMTgsNyBAQCBGICh2b2lkKQorICAgcHJpbnRmICgiZXhwZWN0ZWQgXCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkZcIiwgZ290IFwiJXNcIlxuIiwKKyAJICBidWYpOworIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBzd3ByaW50ZiAod2J1Ziwgc2l6ZW9mIHdidWYgLyBzaXplb2YgKHdidWZbMF0pLAorIAkgICAgTCIlTGEgJUxBICVMZSAlTEUgJUxmICVMRiAlTGcgJUxHIiwKKyAJICAgIGxxbmFudmFsLCBscW5hbnZhbCwgbHFuYW52YWwsIGxxbmFudmFsLAorQEAgLTI1OSw2ICsyNjMsNyBAQCBGICh2b2lkKQorICAgcmVzdWx0IHw9IHdjc2NtcCAod2J1ZiwgTCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYiKSAhPSAwOworICAgcHJpbnRmICgiZXhwZWN0ZWQgTFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBMXCIlU1wiXG4iLAorIAkgIHdidWYpOworKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdmZwcmludGYuYyBiL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jCitpbmRleCAwNTkyZTcwLi5mMjFkOTczIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlIDxfaXRvYS5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIC8qIFRoaXMgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgc3RhbmRhcmQgc3RkaW8gaW1wbGVtZW50YXRpb24gZm91bmQKKyAgICBpbiBHTlUgQyBsaWJyYXJ5IGFuZCB0aGUgbGliaW8gaW1wbGVtZW50YXRpb24gb3JpZ2luYWxseSBmb3VuZCBpbgorQEAgLTE0MCw2ICsxNDEsMTggQEAgdHlwZWRlZiB3Y2hhcl90IFRIT1VTQU5EU19TRVBfVDsKKyAjIGRlZmluZSBFT0YgV0VPRgorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDEpCisrI2Vsc2UKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMCkKKysjZW5kaWYKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgTE9DQUxFX1NVUFBPUlQgKDEpCisrI2Vsc2UKKysjIGRlZmluZSBMT0NBTEVfU1VQUE9SVCAoMCkKKysjZW5kaWYKKysKKyAjaW5jbHVkZSAiX2kxOG5fbnVtYmVyLmgiCisgCisgLyogSW5jbHVkZSB0aGUgc2hhcmVkIGNvZGUgZm9yIHBhcnNpbmcgdGhlIGZvcm1hdCBzdHJpbmcuICAqLworQEAgLTEwNjUsOCArMTA3OCwxMSBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBqdW1wX3RhYmxlW10gPQorICMgZGVmaW5lIHByb2Nlc3Nfc3RyaW5nX2FyZyhmc3BlYykgXAorICAgICBMQUJFTCAoZm9ybV9jaGFyYWN0ZXIpOgkJCQkJCSAgICAgIFwKKyAgICAgICAvKiBDaGFyYWN0ZXIuICAqLwkJCQkJCQkgICAgICBcCistICAgICAgaWYgKGlzX2xvbmcpCQkJCQkJCSAgICAgIFwKKy0JZ290byBMQUJFTCAoZm9ybV93Y2hhcmFjdGVyKTsJCQkJCSAgICAgIFwKKysgICAgICBpZiAoaXNfbG9uZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgZ290byBMQUJFTCAoZm9ybV93Y2hhcmFjdGVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIC0td2lkdGg7CS8qIEFjY291bnQgZm9yIHRoZSBjaGFyYWN0ZXIgaXRzZWxmLiAgKi8JCSAgICAgIFwKKyAgICAgICBpZiAoIWxlZnQpCQkJCQkJCSAgICAgIFwKKyAJUEFEICgnICcpOwkJCQkJCQkgICAgICBcCitAQCAtMTA3OSw2ICsxMDk1LDcgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QganVtcF90YWJsZVtdID0KKyAgICAgICBicmVhazsJCQkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCisgICAgIExBQkVMIChmb3JtX3djaGFyYWN0ZXIpOgkJCQkJCSAgICAgIFwKKysgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgewkJCQkJCQkJCSAgICAgIFwKKyAJLyogV2lkZSBjaGFyYWN0ZXIuICAqLwkJCQkJCSAgICAgIFwKKyAJY2hhciBidWZbTUJfQ1VSX01BWF07CQkJCQkJICAgICAgXAorQEAgLTExNDUsNiArMTE2Miw3IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGp1bXBfdGFibGVbXSA9CisgCSAgfQkJCQkJCQkJICAgICAgXAorIAllbHNlCQkJCQkJCQkgICAgICBcCisgCSAgewkJCQkJCQkJICAgICAgXAorKyAgICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJICAgIGNvbnN0IHdjaGFyX3QgKnMyID0gKGNvbnN0IHdjaGFyX3QgKikgc3RyaW5nOwkJICAgICAgXAorIAkgICAgbWJzdGF0ZV90IG1ic3RhdGU7CQkJCQkJICAgICAgXAorIAkJCQkJCQkJCSAgICAgIFwKK0BAIC0xMzk5LDcgKzE0MTcsOSBAQCB2ZnByaW50ZiAoRklMRSAqcywgY29uc3QgQ0hBUl9UICpmb3JtYXQsIHZhX2xpc3QgYXApCisgICAgIExBQkVMIChmbGFnX3F1b3RlKToKKyAgICAgICBncm91cCA9IDE7CisgCistICAgICAgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorKyAgICAgIGlmICghIExPQ0FMRV9TVVBQT1JUKQorKyAgICAgICAgZ3JvdXBpbmcgPSBOVUxMOworKyAgICAgIGVsc2UgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorIAl7CisgI2lmZGVmIENPTVBJTEVfV1BSSU5URgorIAkgIHRob3VzYW5kc19zZXAgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLAorQEAgLTE3MjgsOCArMTc0OCw5IEBAIHByaW50Zl9wb3NpdGlvbmFsIChfSU9fRklMRSAqcywgY29uc3QgQ0hBUl9UICpmb3JtYXQsIGludCByZWFkb25seV9mb3JtYXQsCisgICBzaXplX3QgY250OworIAorICAgQ0hBUl9UICp3b3Jrc3RhcnQgPSBOVUxMOworLQorLSAgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorKyAgaWYgKCEgTE9DQUxFX1NVUFBPUlQpCisrICAgIGdyb3VwaW5nID0gTlVMTDsKKysgIGVsc2UgaWYgKGdyb3VwaW5nID09IChjb25zdCBjaGFyICopIC0xKQorICAgICB7CisgI2lmZGVmIENPTVBJTEVfV1BSSU5URgorICAgICAgIHRob3VzYW5kc19zZXAgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMgYi9zdGRpby1jb21tb24vdmZzY2FuZi5jCitpbmRleCAwZTIwNGU3Li42NmNjMGFmIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYworKysrIGIvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSA8d2N0eXBlLmg+CisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2lmZGVmCV9fR05VQ19fCisgIyBkZWZpbmUgSEFWRV9MT05HTE9ORworQEAgLTEzMyw2ICsxMzQsMTIgQEAKKyAjIGRlZmluZSBXSU5UX1QJCWludAorICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDEpCisrI2Vsc2UKKysjIGRlZmluZSBNVUxUSUJZVEVfU1VQUE9SVCAoMCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIGVuY29kZV9lcnJvcigpIGRvIHsJCQkJCQkgICAgICBcCisgCQkJICBlcnJ2YWwgPSA0OwkJCQkJICAgICAgXAorIAkJCSAgX19zZXRfZXJybm8gKEVJTFNFUSk7CQkJCSAgICAgIFwKK0BAIC0zMTYsMjQgKzMyMywzNSBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorICAgQVJHQ0hFQ0sgKHMsIGZvcm1hdCk7CisgCisgIHsKKy0jaWZuZGVmIENPTVBJTEVfV1NDQU5GCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAmJiAhZGVmaW5lZCAoQ09NUElMRV9XU0NBTkYpCisgICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmNvbnN0IGN1cm51bWVyaWMgPSBsb2MtPl9fbG9jYWxlc1tMQ19OVU1FUklDXTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICAgLyogRmlndXJlIG91dCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworLSNpZmRlZiBDT01QSUxFX1dTQ0FORgorKyMgaWZkZWYgQ09NUElMRV9XU0NBTkYKKyAgICBkZWNpbWFsID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQyk7CistI2Vsc2UKKysjIGVsc2UKKyAgICBkZWNpbWFsID0gY3VybnVtZXJpYy0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChERUNJTUFMX1BPSU5UKV0uc3RyaW5nOworLSNlbmRpZgorKyMgZW5kaWYKKyAgICAvKiBGaWd1cmUgb3V0IHRoZSB0aG91c2FuZHMgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICovCistI2lmZGVmIENPTVBJTEVfV1NDQU5GCisrIyBpZmRlZiBDT01QSUxFX1dTQ0FORgorICAgIHRob3VzYW5kcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsIF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MpOworLSNlbHNlCisrIyBlbHNlCisgICAgdGhvdXNhbmRzID0gY3VybnVtZXJpYy0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChUSE9VU0FORFNfU0VQKV0uc3RyaW5nOworICAgIGlmICgqdGhvdXNhbmRzID09ICdcMCcpCisgICAgICB0aG91c2FuZHMgPSBOVUxMOworLSNlbmRpZgorKyMgZW5kaWYKKysjZWxzZSAvKiBpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworKyAgIC8qIEhhcmQtY29kZSB2YWx1ZXMgZnJvbSB0aGUgQyBsb2NhbGUuICAqLworKyMgaWZkZWYgQ09NUElMRV9XU0NBTkYKKysgICBkZWNpbWFsID0gTCcuJzsKKysgICB0aG91c2FuZHMgPSBMJ1wwJzsKKysjIGVsc2UKKysgICBkZWNpbWFsID0gIi4iOworKyAgIHRob3VzYW5kcyA9IE5VTEw7CisrIyBlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgfQorIAorICAgLyogTG9jayB0aGUgc3RyZWFtLiAgKi8KK0BAIC0zODUsNiArNDAzLDggQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAjaWZuZGVmIENPTVBJTEVfV1NDQU5GCisgICAgICAgaWYgKCFpc2FzY2lpICgodW5zaWduZWQgY2hhcikgKmYpKQorIAl7CisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKworIAkgIC8qIE5vbi1BU0NJSSwgbWF5IGJlIGEgbXVsdGlieXRlLiAgKi8KKyAJICBpbnQgbGVuID0gX19tYnJsZW4gKGYsIHN0cmxlbiAoZiksICZzdGF0ZSk7CisgCSAgaWYgKGxlbiA+IDApCitAQCAtODMwLDYgKzg1MCw4IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgICB9CisgCSAgLyogRkFMTFRIUk9VR0ggKi8KKyAJY2FzZSBMXygnQycpOgorKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysKKyAJICBpZiAod2lkdGggPT0gLTEpCisgCSAgICB3aWR0aCA9IDE7CisgCitAQCAtMTE3Miw2ICsxMTk0LDggQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAvKiBGQUxMVEhST1VHSCAqLworIAorIAljYXNlIExfKCdTJyk6CisrICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKworIAkgIHsKKyAjaWZuZGVmIENPTVBJTEVfV1NDQU5GCisgCSAgICBtYnN0YXRlX3QgY3N0YXRlOworQEAgLTE0MTksMTAgKzE0NDMsMTcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICAgICAgY29uc3QgY2hhciAqbWJkaWdpdHNbMTBdOworIAkgICAgICBjb25zdCBjaGFyICptYmRpZ2l0c19leHRlbmRlZFsxMF07CisgI2VuZGlmCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICAvKiAgInRvX2lucHVuY3QiIGlzIGEgbWFwIGZyb20gQVNDSUkgZGlnaXRzIHRvIHRoZWlyCisgCQkgIGVxdWl2YWxlbnQgaW4gbG9jYWxlLiBUaGlzIGlzIGRlZmluZWQgZm9yIGxvY2FsZXMKKyAJCSAgd2hpY2ggdXNlIGFuIGV4dHJhIGRpZ2l0cyBzZXQuICAqLworIAkgICAgICB3Y3RyYW5zX3QgbWFwID0gX193Y3RyYW5zICgidG9faW5wdW5jdCIpOworKyNlbHNlCisrICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZW4KKysgICAgICAgICAgICAgICAgIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIGJ1dCB0aGUKKysgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGNhbid0IGZpZ3VyZSB0aGF0IG91dC4gICovCisrICAgICAgICAgICAgICB3Y3RyYW5zX3QgbWFwID0gTlVMTDsKKysjZW5kaWYKKyAJICAgICAgaW50IG47CisgCisgCSAgICAgIGZyb21fbGV2ZWwgPSAwOworQEAgLTIwODgsNiArMjExOSw3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCQktLXdpZHRoOworIAkgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICB3Y3RyYW5zX3QgbWFwOworIAkgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgoZmxhZ3MgJiBJMThOKSAhPSAwLCAwKQorIAkgICAgICAvKiBIZXhhZGVjaW1hbCBmbG9hdHMgbWFrZSBubyBzZW5zZSwgZml4aW5nIGxvY2FsaXplZAorQEAgLTIzMDQsNiArMjMzNiw3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgICAgIDsKKyAjZW5kaWYKKyAJICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCisgCSAgLyogSGF2ZSB3ZSByZWFkIGFueSBjaGFyYWN0ZXI/ICBJZiB3ZSB0cnkgdG8gcmVhZCBhIG51bWJlcgorIAkgICAgIGluIGhleGFkZWNpbWFsIG5vdGF0aW9uIGFuZCB3ZSBoYXZlIHJlYWQgb25seSB0aGUgYDB4JworQEAgLTIzNDMsNyArMjM3NiwxMCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAorIAljYXNlIExfKCdbJyk6CS8qIENoYXJhY3RlciBjbGFzcy4gICovCisgCSAgaWYgKGZsYWdzICYgTE9ORykKKy0JICAgIFNUUklOR19BUkcgKHdzdHIsIHdjaGFyX3QsIDEwMCk7CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrICAgICAgICAgICAgICBTVFJJTkdfQVJHICh3c3RyLCB3Y2hhcl90LCAxMDApOworKyAgICAgICAgICAgIH0KKyAJICBlbHNlCisgCSAgICBTVFJJTkdfQVJHIChzdHIsIGNoYXIsIDEwMCk7CisgCitAQCAtMjQxNyw2ICsyNDUzLDcgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAJICBpZiAoZmxhZ3MgJiBMT05HKQorIAkgICAgeworIAkgICAgICBzaXplX3Qgbm93ID0gcmVhZF9pbjsKKysgICAgICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworICNpZmRlZiBDT01QSUxFX1dTQ0FORgorIAkgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoaW5jaGFyICgpID09IFdFT0YpKQorIAkJaW5wdXRfZXJyb3IgKCk7CitkaWZmIC0tZ2l0IGEvc3RkbGliL01ha2VmaWxlIGIvc3RkbGliL01ha2VmaWxlCitpbmRleCA0MDI0NjZhLi43ZTdlMzA0IDEwMDY0NAorLS0tIGEvc3RkbGliL01ha2VmaWxlCisrKysgYi9zdGRsaWIvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIHN0ZGxpYiByb3V0aW5lcworICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0ZGxpYgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTMwLDcgKzMyLDcgQEAgaGVhZGVycwk6PSBzdGRsaWIuaCBiaXRzL3N0ZGxpYi5oIGJpdHMvc3RkbGliLWxkYmwuaCBiaXRzL3N0ZGxpYi1mbG9hdC5oICAgICAgXAorIAkgICBhbGxvY2EuaCBmbXRtc2cuaAkJCQkJCSAgICAgIFwKKyAJICAgYml0cy9zdGRsaWItYnNlYXJjaC5oCisgCistcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorK3JvdXRpbmVzLXkJOj0JCQkJCQkJICAgICAgXAorIAlhdG9mIGF0b2kgYXRvbCBhdG9sbAkJCQkJCSAgICAgIFwKKyAJYWJvcnQJCQkJCQkJCSAgICAgIFwKKyAJYnNlYXJjaCBxc29ydCBtc29ydAkJCQkJCSAgICAgIFwKK0BAIC0zOSw3ICs0MSw2IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJcXVpY2tfZXhpdCBhdF9xdWlja19leGl0IGN4YV9hdF9xdWlja19leGl0IGN4YV90aHJlYWRfYXRleGl0X2ltcGwgICAgIFwKKyAJYWJzIGxhYnMgbGxhYnMJCQkJCQkJICAgICAgXAorIAlkaXYgbGRpdiBsbGRpdgkJCQkJCQkgICAgICBcCistCW1ibGVuIG1ic3Rvd2NzIG1idG93YyB3Y3N0b21icyB3Y3RvbWIJCQkJICAgICAgXAorIAlyYW5kb20gcmFuZG9tX3IgcmFuZCByYW5kX3IJCQkJCSAgICAgIFwKKyAJZHJhbmQ0OCBlcmFuZDQ4IGxyYW5kNDggbnJhbmQ0OCBtcmFuZDQ4IGpyYW5kNDgJCQkgICAgICBcCisgCXNyYW5kNDggc2VlZDQ4IGxjb25nNDgJCQkJCQkgICAgICBcCitAQCAtNTIsOSArNTMsMTggQEAgcm91dGluZXMJOj0JCQkJCQkJICAgICAgXAorIAlzdHJ0b2ZfbCBzdHJ0b2RfbCBzdHJ0b2xkX2wJCQkJCSAgICAgIFwKKyAJc3lzdGVtIGNhbm9uaWNhbGl6ZQkJCQkJCSAgICAgIFwKKyAJYTY0bCBsNjRhCQkJCQkJCSAgICAgIFwKKy0JcnBtYXRjaCBzdHJmbW9uIHN0cmZtb25fbCBnZXRzdWJvcHQgeHBnX2Jhc2VuYW1lIGZtdG1zZwkJICAgICAgXAorLQlzdHJ0b2ltYXggc3RydG91bWF4IHdjc3RvaW1heCB3Y3N0b3VtYXgJCQkJICAgICAgXAorKwlnZXRzdWJvcHQgeHBnX2Jhc2VuYW1lCQkJCQkJICAgICAgXAorKwlzdHJ0b2ltYXggc3RydG91bWF4CQkJCQkJICAgICAgXAorIAlnZXRjb250ZXh0IHNldGNvbnRleHQgbWFrZWNvbnRleHQgc3dhcGNvbnRleHQKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9CQkJCSAgICAgIFwKKysJc3RyZm1vbiBzdHJmbW9uX2wKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPQkJCQkgICAgICBcCisrCW1ibGVuIG1ic3Rvd2NzIG1idG93YyB3Y3N0b21icyB3Y3RvbWIJCQkJICAgICAgXAorKwl3Y3N0b2ltYXggd2NzdG91bWF4CisraWZlcSAoeXksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkpCisrcm91dGluZXMteSArPSBycG1hdGNoCisrZW5kaWYKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfRk1UTVNHKSArPSBmbXRtc2cKKyBhdXggPQlncm91cGluZyBncm91cGluZ3djIHRlbnNfaW5fbGltYgorIAorICMgVGhlc2Ugcm91dGluZXMgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIGxpYmMgc2hhcmVkIG9iamVjdC4KK0BAIC02MiwyMCArNzIsMjQgQEAgYXV4ID0JZ3JvdXBpbmcgZ3JvdXBpbmd3YyB0ZW5zX2luX2xpbWIKKyAjIGxpbmtlZCBhZ2FpbnN0IHdoZW4gdGhlIHNoYXJlZCBsaWJyYXJ5IHdpbGwgYmUgdXNlZC4KKyBzdGF0aWMtb25seS1yb3V0aW5lcyA9IGF0ZXhpdCBhdF9xdWlja19leGl0CisgCistdGVzdC1zcmNzCTo9IHRzdC1mbXRtc2cKKy10ZXN0cwkJOj0gdHN0LXN0cnRvbCB0c3Qtc3RydG9kIHRlc3RtYiB0ZXN0cmFuZCB0ZXN0c29ydCB0ZXN0ZGl2ICAgXAorK3Rlc3Qtc3Jjcy0kKE9QVElPTl9FR0xJQkNfRk1UTVNHKQk6PSB0c3QtZm10bXNnCisrdGVzdHMJCTo9IHRzdC1zdHJ0b2wgdHN0LXN0cnRvZCB0ZXN0cmFuZCB0ZXN0c29ydCB0ZXN0ZGl2CSAgICBcCisgCQkgICB0ZXN0LWNhbm9uIHRlc3QtY2Fub24yIHRzdC1zdHJ0b2xsIHRzdC1lbnZpcm9uCSAgICBcCisgCQkgICB0c3QteHBnLWJhc2VuYW1lIHRzdC1yYW5kb20gdHN0LXJhbmRvbTIgdHN0LWJzZWFyY2gJICAgIFwKKyAJCSAgIHRzdC1saW1pdHMgdHN0LXJhbmQ0OCBidWctc3RydG9kIHRzdC1zZXRjb250ZXh0ICAgICAgICAgIFwKKy0JCSAgIHRzdC1zZXRjb250ZXh0MiB0ZXN0LWE2NGwgdHN0LXFzb3J0IHRzdC1zeXN0ZW0gdGVzdG1iMiAgIFwKKy0JCSAgIGJ1Zy1zdHJ0b2QyIHRzdC1hdG9mMSB0c3QtYXRvZjIgdHN0LXN0cnRvZDIgdHN0LXN0cnRvZDMgIFwKKy0JCSAgIHRzdC1yYW5kNDgtMiB0c3QtbWFrZWNvbnRleHQgdHN0LXN0cnRvZDQgdHN0LXN0cnRvZDUgICAgIFwKKysJCSAgIHRzdC1zZXRjb250ZXh0MiB0ZXN0LWE2NGwgdHN0LXFzb3J0IHRzdC1zeXN0ZW0JICAgIFwKKysJCSAgIGJ1Zy1zdHJ0b2QyIHRzdC1hdG9mMSB0c3QtYXRvZjIgdHN0LXN0cnRvZDIgCQkgICAgXAorKwkJICAgdHN0LXJhbmQ0OC0yIHRzdC1tYWtlY29udGV4dCAJCQkgICAgXAorIAkJICAgdHN0LXFzb3J0MiB0c3QtbWFrZWNvbnRleHQyIHRzdC1zdHJ0b2Q2IHRzdC11bnNldGVudjEgICAgXAorIAkJICAgdHN0LW1ha2Vjb250ZXh0MyBidWctZ2V0Y29udGV4dCBidWctZm10bXNnMQkJICAgIFwKKyAJCSAgIHRzdC1zZWN1cmUtZ2V0ZW52IHRzdC1zdHJ0b2Qtb3ZlcmZsb3cgdHN0LXN0cnRvZC1yb3VuZCAgIFwKKyAJCSAgIHRzdC10aW5pbmVzcyB0c3Qtc3RydG9kLXVuZGVyZmxvdyB0c3QtdGxzLWF0ZXhpdAkgICAgXAorIAkJICAgdHN0LXNldGNvbnRleHQzIHRzdC10bHMtYXRleGl0LW5vZGVsZXRlCisgdGVzdHMtc3RhdGljCTo9IHRzdC1zZWN1cmUtZ2V0ZW52CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSB0c3Qtc3RydG9kMyB0c3Qtc3RydG9kNCB0c3Qtc3RydG9kNSB0ZXN0bWIyCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkJKz0gdGVzdG1iCisgCisgbW9kdWxlcy1uYW1lcwk9IHRzdC10bHMtYXRleGl0LWxpYgorIAorQEAgLTExNiw4ICsxMzAsMTAgQEAgQ0ZMQUdTLXRzdC1tYWtlY29udGV4dDIuYyA9ICQoc3RhY2stYWxpZ24tdGVzdC1mbGFncykKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWlzb21hYy5vdXQKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0ZNVE1TRykpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtZm10bXNnLm91dAorIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvc3RkbGliL3N0cnRvZF9sLmMgYi9zdGRsaWIvc3RydG9kX2wuYworaW5kZXggZTEzYWIxZS4uNjNlZmU0MSAxMDA2NDQKKy0tLSBhL3N0ZGxpYi9zdHJ0b2RfbC5jCisrKysgYi9zdGRsaWIvc3RydG9kX2wuYworQEAgLTE3LDYgKzE3LDcgQEAKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8eGxvY2FsZS5oPgorIAorIGV4dGVybiBkb3VibGUgX19fX3N0cnRvZF9sX2ludGVybmFsIChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCwgX19sb2NhbGVfdCk7CitAQCAtNTQ4LDYgKzU0OSw3IEBAIF9fX19TVFJUT0ZfSU5URVJOQUwgKG5wdHIsIGVuZHB0ciwgZ3JvdXAsIGxvYykKKyAgIC8qIFVzZWQgaW4gc2V2ZXJhbCBwbGFjZXMuICAqLworICAgaW50IGNudDsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY3VycmVudCA9IGxvYy0+X19sb2NhbGVzW0xDX05VTUVSSUNdOworIAorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGdyb3VwKSkKK0BAIC01ODYsNiArNTg4LDE3IEBAIF9fX19TVFJUT0ZfSU5URVJOQUwgKG5wdHIsIGVuZHB0ciwgZ3JvdXAsIGxvYykKKyAgIGRlY2ltYWxfbGVuID0gc3RybGVuIChkZWNpbWFsKTsKKyAgIGFzc2VydCAoZGVjaW1hbF9sZW4gPiAwKTsKKyAjZW5kaWYKKysjZWxzZSAvKiBpZiAhIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworKyAgLyogSGFyZC1jb2RlIHZhbHVlcyBmcm9tIHRoZSAnQycgbG9jYWxlLiAgKi8KKysgIGdyb3VwaW5nID0gTlVMTDsKKysjaWZkZWYgVVNFX1dJREVfQ0hBUgorKyAgZGVjaW1hbCA9IEwnLic7CisrIyBkZWZpbmUgZGVjaW1hbF9sZW4gMQorKyNlbHNlCisrICBkZWNpbWFsID0gIi4iOworKyAgZGVjaW1hbF9sZW4gPSAxOworKyNlbmRpZgorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAKKyAgIC8qIFByZXBhcmUgbnVtYmVyIHJlcHJlc2VudGF0aW9uLiAgKi8KKyAgIGV4cG9uZW50ID0gMDsKK2RpZmYgLS1naXQgYS9zdGRsaWIvdHN0LXN0cnRvZC5jIGIvc3RkbGliL3RzdC1zdHJ0b2QuYworaW5kZXggYTQ2OTIwOC4uMjhmYjQyMyAxMDA2NDQKKy0tLSBhL3N0ZGxpYi90c3Qtc3RydG9kLmMKKysrKyBiL3N0ZGxpYi90c3Qtc3RydG9kLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RydWN0IGx0ZXN0CisgICB7CitAQCAtMTc2LDcgKzE3Nyw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCisgCisgICBzdGF0dXMgfD0gbG9uZ19kYmwgKCk7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgc3RhdHVzIHw9IGxvY2FsZV90ZXN0ICgpOworKyNlbmRpZgorIAorICAgcmV0dXJuIHN0YXR1cyA/IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKKyB9CitAQCAtMjE5LDYgKzIyMiw3IEBAIGxvbmdfZGJsICh2b2lkKQorICAgcmV0dXJuIDA7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAvKiBQZXJmb3JtIGEgZmV3IHRlc3RzIGluIGEgbG9jYWxlIHdpdGggdGhvdXNhbmRzIHNlcGFyYXRvcnMuICAqLworIHN0YXRpYyBpbnQKKyBsb2NhbGVfdGVzdCAodm9pZCkKK0BAIC0yNzYsMyArMjgwLDQgQEAgbG9jYWxlX3Rlc3QgKHZvaWQpCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCitkaWZmIC0tZ2l0IGEvc3RyZWFtcy9NYWtlZmlsZSBiL3N0cmVhbXMvTWFrZWZpbGUKK2luZGV4IGE4YTYxNjIuLmNlYjQyM2YgMTAwNjQ0CistLS0gYS9zdHJlYW1zL01ha2VmaWxlCisrKysgYi9zdHJlYW1zL01ha2VmaWxlCitAQCAtMTgsMTEgKzE4LDE0IEBACisgIworICMJTWFrZWZpbGUgZm9yIHN0cmVhbXMuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RyZWFtcworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCT0gc3Ryb3B0cy5oIHN5cy9zdHJvcHRzLmggYml0cy9zdHJvcHRzLmggYml0cy94dGl0eXBlcy5oCistcm91dGluZXMJPSBpc2FzdHJlYW0gZ2V0bXNnIGdldHBtc2cgcHV0bXNnIHB1dHBtc2cgZmF0dGFjaCBmZGV0YWNoCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NUUkVBTVMpIFwKKysJKz0gaXNhc3RyZWFtIGdldG1zZyBnZXRwbXNnIHB1dG1zZyBwdXRwbXNnIGZhdHRhY2ggZmRldGFjaAorIAorIGluY2x1ZGUgLi4vUnVsZXMKK2RpZmYgLS1naXQgYS9zdHJpbmcvTWFrZWZpbGUgYi9zdHJpbmcvTWFrZWZpbGUKK2luZGV4IDg0MjRhNjEuLjU5ODg4MzQgMTAwNjQ0CistLS0gYS9zdHJpbmcvTWFrZWZpbGUKKysrKyBiL3N0cmluZy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHN0cmluZyBwb3J0aW9uIG9mIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RyaW5nCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzksMTAgKzQxLDEyIEBAIHJvdXRpbmVzCTo9IHN0cmNhdCBzdHJjaHIgc3RyY21wIHN0cmNvbGwgc3RyY3B5IHN0cmNzcG4JCVwKKyAJCSAgICQoYWRkcHJlZml4IGFyZ3otLGFwcGVuZCBjb3VudCBjcmVhdGUgY3RzZXAgbmV4dAlcCisgCQkJCSAgICAgZGVsZXRlIGV4dHJhY3QgaW5zZXJ0IHN0cmluZ2lmeQlcCisgCQkJCSAgICAgYWRkc2VwIHJlcGxhY2UpCQkJXAorLQkJICAgZW52eiBiYXNlbmFtZQkJCQkJXAorKwkJICAgYmFzZW5hbWUJCQkJCQlcCisgCQkgICBzdHJjb2xsX2wgc3RyeGZybV9sIHN0cmluZy1pbmxpbmVzIG1lbXJjaHIJCVwKKyAJCSAgIHhwZy1zdHJlcnJvciBzdHJlcnJvcl9sCisgCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0VOVlopICs9IGVudnoKKysKKyBzdHJvcC10ZXN0cwk6PSBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXBjcHkgbWVtc2V0IG1lbWNjcHkJXAorIAkJICAgc3RwY3B5IHN0cG5jcHkgc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY3B5IHN0cmNzcG4JXAorIAkJICAgc3RybGVuIHN0cm5jbXAgc3RybmNweSBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIG1lbW1lbQlcCitAQCAtNTEsMTAgKzU1LDEyIEBAIHN0cm9wLXRlc3RzCTo9IG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbW1vdmUgbWVtcGNweSBtZW1zZXQgbWVtY2NweQlcCisgdGVzdHMJCTo9IHRlc3RlciBpbmwtdGVzdGVyIG5vaW5sLXRlc3RlciB0ZXN0Y29weSB0ZXN0LWZmcwlcCisgCQkgICB0c3Qtc3RybGVuIHN0cmF0Y2xpZmYgdHN0LXN2YyB0c3QtaW5sY2FsbAkJXAorIAkJICAgYnVnLXN0cm5jYXQxIGJ1Zy1zdHJzcG4xIGJ1Zy1zdHJwYnJrMSB0c3QtYnN3YXAJXAorLQkJICAgdHN0LXN0cnRvayB0c3Qtc3RyeGZybSBidWctc3RyY29sbDEgdHN0LXN0cmZyeQlcCisrCQkgICB0c3Qtc3RydG9rIHRzdC1zdHJmcnkJXAorIAkJICAgYnVnLXN0cnRvazEgJChhZGRwcmVmaXggdGVzdC0sJChzdHJvcC10ZXN0cykpCVwKKy0JCSAgIGJ1Zy1lbnZ6MSB0c3Qtc3RyeGZybTIgdHN0LWVuZGlhbiB0c3Qtc3ZjMgkJXAorLQkJICAgdHN0LXN0cnRva19yCisrCQkgICB0c3Qtc3RyeGZybTIgdHN0LWVuZGlhbiB0c3Qtc3ZjMiB0c3Qtc3RydG9rX3IKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfRU5WWikgKz0gYnVnLWVudnoxCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSB0c3Qtc3RyeGZybSBidWctc3RyY29sbDEKKyAKKyB4dGVzdHMgPSB0c3Qtc3RyY29sbC1vdmVyZmxvdworIAorZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJjb2xsX2wuYyBiL3N0cmluZy9zdHJjb2xsX2wuYworaW5kZXggOGYxMjI1Zi4uYjM2YjE4YyAxMDA2NDQKKy0tLSBhL3N0cmluZy9zdHJjb2xsX2wuYworKysrIGIvc3RyaW5nL3N0cmNvbGxfbC5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZm5kZWYgU1RSSU5HX1RZUEUKKyAjIGRlZmluZSBTVFJJTkdfVFlQRSBjaGFyCitAQCAtMjYwLDcgKzI2MSwxMSBAQCBpbnQKKyBTVFJDT0xMIChjb25zdCBTVFJJTkdfVFlQRSAqczEsIGNvbnN0IFNUUklOR19UWVBFICpzMiwgX19sb2NhbGVfdCBsKQorIHsKKyAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjdXJyZW50ID0gbC0+X19sb2NhbGVzW0xDX0NPTExBVEVdOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnRfZmFzdDMyX3QgbnJ1bGVzID0gY3VycmVudC0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChfTkxfQ09MTEFURV9OUlVMRVMpXS53b3JkOworKyNlbHNlCisrICBjb25zdCB1aW50X2Zhc3QzMl90IG5ydWxlcyA9IDA7CisrI2VuZGlmCisgICAvKiBXZSBkb24ndCBhc3NpZ24gdGhlIGZvbGxvd2luZyB2YWx1ZXMgcmlnaHQgYXdheSBzaW5jZSBpdCBtaWdodCBiZQorICAgICAgdW5uZWNlc3NhcnkgaW4gY2FzZSB0aGVyZSBhcmUgbm8gcnVsZXMuICAqLworICAgY29uc3QgdW5zaWduZWQgY2hhciAqcnVsZXNldHM7CitkaWZmIC0tZ2l0IGEvc3RyaW5nL3N0cmVycm9yX2wuYyBiL3N0cmluZy9zdHJlcnJvcl9sLmMKK2luZGV4IDJlZDc4YjUuLjY1ODQ4MTMgMTAwNjQ0CistLS0gYS9zdHJpbmcvc3RyZXJyb3JfbC5jCisrKysgYi9zdHJpbmcvc3RyZXJyb3JfbC5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIHN0YXRpYyBfX3RocmVhZCBjaGFyICpsYXN0X3ZhbHVlOworQEAgLTI5LDEwICszMCwxNCBAQCBzdGF0aWMgX190aHJlYWQgY2hhciAqbGFzdF92YWx1ZTsKKyBzdGF0aWMgY29uc3QgY2hhciAqCisgdHJhbnNsYXRlIChjb25zdCBjaGFyICpzdHIsIGxvY2FsZV90IGxvYykKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgbG9jYWxlX3Qgb2xkbG9jID0gX191c2Vsb2NhbGUgKGxvYyk7CisgICBjb25zdCBjaGFyICpyZXMgPSBfKHN0cik7CisgICBfX3VzZWxvY2FsZSAob2xkbG9jKTsKKyAgIHJldHVybiByZXM7CisrI2Vsc2UKKysgIHJldHVybiBzdHI7CisrI2VuZGlmCisgfQorIAorIAorZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJ4ZnJtX2wuYyBiL3N0cmluZy9zdHJ4ZnJtX2wuYworaW5kZXggOGI2MWVhMi4uNDFmZGMyMiAxMDA2NDQKKy0tLSBhL3N0cmluZy9zdHJ4ZnJtX2wuYworKysrIGIvc3RyaW5nL3N0cnhmcm1fbC5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZm5kZWYgU1RSSU5HX1RZUEUKKyAjIGRlZmluZSBTVFJJTkdfVFlQRSBjaGFyCitAQCAtNjY5LDcgKzY3MCwxMSBAQCBTVFJYRlJNIChTVFJJTkdfVFlQRSAqZGVzdCwgY29uc3QgU1RSSU5HX1RZUEUgKnNyYywgc2l6ZV90IG4sIF9fbG9jYWxlX3QgbCkKKyB7CisgICBsb2NhbGVfZGF0YV90IGxfZGF0YTsKKyAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjdXJyZW50ID0gbC0+X19sb2NhbGVzW0xDX0NPTExBVEVdOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGxfZGF0YS5ucnVsZXMgPSBjdXJyZW50LT52YWx1ZXNbX05MX0lURU1fSU5ERVggKF9OTF9DT0xMQVRFX05SVUxFUyldLndvcmQ7CisrI2Vsc2UKKysgIGxfZGF0YS5ucnVsZXMgPSAwOworKyNlbmRpZgorIAorICAgLyogSGFuZGxlIGJ5dGUgY29tcGFyaXNvbiBjYXNlLiAgKi8KKyAgIGlmIChsX2RhdGEubnJ1bGVzID09IDApCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3Rlc3Qtc3RyY21wLmMgYi9zdHJpbmcvdGVzdC1zdHJjbXAuYworaW5kZXggZGM0YmE2Zi4uYTk3ODY1NiAxMDA2NDQKKy0tLSBhL3N0cmluZy90ZXN0LXN0cmNtcC5jCisrKysgYi9zdHJpbmcvdGVzdC1zdHJjbXAuYworQEAgLTMyOSwzNCArMzI5LDYgQEAgY2hlY2sgKHZvaWQpCisgCQlGT1JfRUFDSF9JTVBMIChpbXBsLCAwKQorIAkJY2hlY2tfcmVzdWx0IChpbXBsLCBzMSArIGkxLCBzMiArIGkyLCBleHBfcmVzdWx0KTsKKyAgICAgICB9CistCistICAvKiBUZXN0IGNhc2VzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSB6ZXJvIGJ5dGVzIGFmdGVyIHRoZSBmaXJzdC4gICovCistCistICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2ICsgMTsgaSsrKQorLSAgICB7CistICAgICAgczFbaV0gPSAweDAwOworLSAgICAgIHMyW2ldID0gMHgwMDsKKy0gICAgfQorLQorLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxNjsgaSsrKQorLSAgICB7CistICAgICAgaW50IGV4cF9yZXN1bHQ7CistCistICAgICAgZm9yIChpbnQgdmFsID0gMHgwMTsgdmFsIDwgMHgxMDA7IHZhbCsrKQorLQl7CistCSAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpOyBqKyspCistCSAgICB7CistCSAgICAgIHMxW2pdID0gdmFsOworLQkgICAgICBzMltqXSA9IHZhbDsKKy0JICAgIH0KKy0KKy0JICBzMltpXSA9IHZhbDsKKy0KKy0JICBleHBfcmVzdWx0ID0gU0lNUExFX1NUUkNNUCAoczEsIHMyKTsKKy0JICBGT1JfRUFDSF9JTVBMIChpbXBsLCAwKQorLQkgICAgY2hlY2tfcmVzdWx0IChpbXBsLCBzMSwgczIsIGV4cF9yZXN1bHQpOworLQl9CistICAgIH0KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMgYi9zdHJpbmcvdHN0LXN0cnhmcm0uYworaW5kZXggZjQ4Y2ZjMC4uYzNhNTFmOSAxMDA2NDQKKy0tLSBhL3N0cmluZy90c3Qtc3RyeGZybS5jCisrKysgYi9zdHJpbmcvdHN0LXN0cnhmcm0uYworQEAgLTMsNiArMyw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBjaGFyIGNvbnN0IHN0cmluZ1tdID0gIiI7CitAQCAtNjQsOCArNjUsMTAgQEAgZG9fdGVzdCAodm9pZCkKKyAgIGludCByZXN1bHQgPSAwOworIAorICAgcmVzdWx0IHw9IHRlc3QgKCJDIik7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgcmVzdWx0IHw9IHRlc3QgKCJlbl9VUy5JU08tODg1OS0xIik7CisgICByZXN1bHQgfD0gdGVzdCAoImRlX0RFLlVURi04Iik7CisrI2VuZGlmCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KK2RpZmYgLS1naXQgYS9zdHJpbmcvdHN0LXN0cnhmcm0yLmMgYi9zdHJpbmcvdHN0LXN0cnhmcm0yLmMKK2luZGV4IGQ1YTExMTUuLjE5YzdmMzAgMTAwNjQ0CistLS0gYS9zdHJpbmcvdHN0LXN0cnhmcm0yLmMKKysrKyBiL3N0cmluZy90c3Qtc3RyeGZybTIuYworQEAgLTEsNiArMSw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgZG9fdGVzdCAodm9pZCkKK0BAIC0zOCw2ICszOSw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICAgICAgcmVzID0gMTsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImRlX0RFLlVURi04IikgPT0gTlVMTCkKKyAgICAgeworICAgICAgIHB1dHMgKCJzZXRsb2NhbGUgZmFpbGVkIik7CitAQCAtNzUsNiArNzcsNyBAQCBkb190ZXN0ICh2b2lkKQorIAkgIHJlcyA9IDE7CisgCX0KKyAgICAgfQorKyNlbmRpZgorIAorICAgcmV0dXJuIHJlczsKKyB9CitkaWZmIC0tZ2l0IGEvc3VucnBjL01ha2VmaWxlIGIvc3VucnBjL01ha2VmaWxlCitpbmRleCA2MGNhYTBhLi41YmM3MGFiIDEwMDY0NAorLS0tIGEvc3VucnBjL01ha2VmaWxlCisrKysgYi9zdW5ycGMvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBzdW5ycGMgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdW5ycGMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC01NSw3ICs1Nyw2IEBAIGhlYWRlcnMtaW4tdGlycGMgPSAkKGFkZHByZWZpeCBycGMvLGF1dGguaCBhdXRoX3VuaXguaCBjbG50LmggcG1hcF9jbG50LmggXAorIGhlYWRlcnMtbm90LWluLXRpcnBjID0gJChhZGRwcmVmaXggcnBjLyxrZXlfcHJvdC5oIHJwY19kZXMuaCkgXAorIAkJICAgICAgICQocnBjc3ZjOiU9cnBjc3ZjLyUpIHJwY3N2Yy9ib290cGFyYW0uaAorIGhlYWRlcnMgPSBycGMvbmV0ZGIuaAorLWluc3RhbGwtb3RoZXJzID0gJChpbnN0X3N5c2NvbmZkaXIpL3JwYworIGdlbmVyYXRlZCArPSAkKHJwY3N2YzolLng9cnBjc3ZjLyUuaCkgJChycGNzdmM6JS54PXglLmMpICQocnBjc3ZjOiUueD14JS5zdG1wKSBcCisgCSAgICAgJChycGNzdmM6JS54PXJwY3N2Yy8lLnN0bXApIHJwY2dlbgorIGdlbmVyYXRlZC1kaXJzICs9IHJwY3N2YworQEAgLTY1LDIwICs2NiwyOCBAQCBoZWFkZXJzICs9ICQoaGVhZGVycy1pbi10aXJwYykgJChoZWFkZXJzLW5vdC1pbi10aXJwYykKKyBlbmRpZgorIAorIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCistbmVlZC1leHBvcnQtcm91dGluZXMgOj0gYXV0aF9kZXMgYXV0aF91bml4IGNsbnRfZ2VuIGNsbnRfcGVyciBjbG50X3RjcCBcCisrbmVlZC1leHBvcnQtcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgOj0gXAorKwkJCWF1dGhfZGVzIGF1dGhfdW5peCBjbG50X2dlbiBjbG50X3BlcnIgY2xudF90Y3AgXAorIAkJCWNsbnRfdWRwIGdldF9teWFkZHIga2V5X2NhbGwgbmV0bmFtZSBwbV9nZXRwb3J0IFwKKy0JCQlycGNfdGhyZWFkIHN2YyBzdmNfdGNwIHN2Y191ZHAgeGNyeXB0IHhkcl9hcnJheSB4ZHIgXAorKwkJCXJwY190aHJlYWQgc3ZjIHN2Y190Y3Agc3ZjX3VkcCB4ZHJfYXJyYXkgeGRyIFwKKyAJCQl4ZHJfaW50WFhfdCB4ZHJfbWVtIHhkcl9yZWYgeGRyX3NpemVvZiB4ZHJfc3RkaW8gXAorIAkJCXN2Y19ydW4KKytuZWVkLWV4cG9ydC1yb3V0aW5lcy15ICs9IHhjcnlwdAorK25lZWQtZXhwb3J0LXJvdXRpbmVzIDo9ICQobmVlZC1leHBvcnQtcm91dGluZXMteSkKKyAKKy1yb3V0aW5lcyA6PSBhdXRoX25vbmUgYXV0aHV4cHJvdCBiaW5kcnN2cHJ0IGNsbnRfcmF3IGNsbnRfc2ltcCBcCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgOj0gXAorKwkgICAgYXV0aF9ub25lIGF1dGh1eHByb3QgYmluZHJzdnBydCBjbG50X3JhdyBjbG50X3NpbXAgXAorIAkgICAgcnBjX2R0YWJsZSBnZXRycGNwb3J0IHBtYXBfY2xudCBwbV9nZXRtYXBzIHBtYXBfcHJvdCBwbWFwX3Byb3QyIFwKKyAJICAgIHBtYXBfcm10IHJwY19wcm90IHJwY19jb21tb24gcnBjX2Ntc2cgc3ZjX2F1dGggc3ZjX2F1dGh1eCBzdmNfcmF3IFwKKyAJICAgIHN2Y19zaW1wbGUgeGRyX2Zsb2F0IHhkcl9yZWMgcHVibGlja2V5IGF1dGhkZXNfcHJvdCBcCistCSAgICBkZXNfY3J5cHQgZGVzX2ltcGwgZGVzX3NvZnQga2V5X3Byb3Qgb3BlbmNoaWxkIHJ0aW1lIHN2Y2F1dGhfZGVzIFwKKysJICAgIGtleV9wcm90IG9wZW5jaGlsZCBydGltZSBzdmNhdXRoX2RlcyBcCisgCSAgICBnZXRycGNlbnQgZ2V0cnBjYnluYW1lIGdldHJwY2J5bnVtYmVyIFwKKyAJICAgIGdldHJwY2VudF9yIGdldHJwY2J5bmFtZV9yIGdldHJwY2J5bnVtYmVyX3IgXAorLQkgICAgY2xudF91bml4IHN2Y191bml4IGNyZWF0ZV94aWQgJChuZWVkLWV4cG9ydC1yb3V0aW5lcykKKysJICAgIGNsbnRfdW5peCBzdmNfdW5peCBjcmVhdGVfeGlkCisrCisrIyB4ZGVjcnlwdCBpcyBhbHNvIHVzZWQgYnkgbnNzL25zc19maWxlcy9maWxlcy1rZXkuYy4KKytyb3V0aW5lcy15ICs9IGRlc19jcnlwdCBkZXNfaW1wbCBkZXNfc29mdCAkKG5lZWQtZXhwb3J0LXJvdXRpbmVzKQorKworIGlmbmVxICgkKGxpbmstb2Jzb2xldGUtcnBjKSx5ZXMpCisgIyBXZSBvbmx5IGFkZCB0aGUgUlBDIGZvciBjb21wYXRpYmlsaXR5IHRvIGxpYmMuc28uCisgc2hhcmVkLW9ubHktcm91dGluZXMgPSAkKHJvdXRpbmVzKQorQEAgLTg3LDI1ICs5NiwyOCBAQCBlbmRpZgorIAorICMgV2UgZG8gbm90IGJ1aWxkIHJwY2luZm8gYW55bW9yZS4gIEl0IGlzIG5vdCBuZWVkZWQgZm9yIGEgYm9vdHN0cmFwCisgIyBhbmQgbm90IHdhbnRlZCBvbiBjb21wbGV0ZSBzeXN0ZW1zLgorLSMgb3RoZXJzIDo9IHJwY2luZm8KKy0jIGluc3RhbGwtc2JpbiA6PSBycGNpbmZvCistaW5zdGFsbC1iaW4gOj0gcnBjZ2VuCisrIyBvdGhlcnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjaW5mbworKyMgaW5zdGFsbC1zYmluLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2luZm8KKytpbnN0YWxsLWJpbi0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNnZW4KKyBycGNnZW4tb2JqcyA9IHJwY19tYWluLm8gcnBjX2hvdXQubyBycGNfY291dC5vIHJwY19wYXJzZS5vIFwKKyAJICAgICAgcnBjX3NjYW4ubyBycGNfdXRpbC5vIHJwY19zdmNvdXQubyBycGNfY2xudG91dC5vIFwKKyAJICAgICAgcnBjX3RibG91dC5vIHJwY19zYW1wbGUubworLWV4dHJhLW9ianMgPSAkKHJwY2dlbi1vYmpzKSAkKGFkZHByZWZpeCBjcm9zcy0sJChycGNnZW4tb2JqcykpCistb3RoZXJzICs9IHJwY2dlbgorK2V4dHJhLW9ianMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgPSAkKHJwY2dlbi1vYmpzKSAkKGFkZHByZWZpeCBjcm9zcy0sJChycGNnZW4tb2JqcykpCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2dlbgorKworK2luc3RhbGwtb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9ICQoaW5zdF9zeXNjb25mZGlyKS9ycGMKKyAKKy10ZXN0cyA9IHRzdC14ZHJtZW0gdHN0LXhkcm1lbTIgdGVzdC1ycGNlbnQKKy14dGVzdHMgOj0gdHN0LWdldG15YWRkcgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpID0gdHN0LXhkcm1lbSB0c3QteGRybWVtMiB0ZXN0LXJwY2VudAorK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA6PSB0c3QtZ2V0bXlhZGRyCisgCisgaWZlcSAoJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXMpCisteHRlc3RzICs9IHRocnN2YworK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSB0aHJzdmMKKyBlbmRpZgorIAorIGhlYWRlcnMgKz0gJChycGNzdmM6JS54PXJwY3N2Yy8lLmgpCistZXh0cmEtbGlicyA6PSBsaWJycGNzdmMKKy1leHRyYS1saWJzLW90aGVycyA6PSBsaWJycGNzdmMgIyBNYWtlIGl0IGluIGBvdGhlcnMnIHBhc3MsIG5vdCBgbGliJyBwYXNzLgorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gbGlicnBjc3ZjCisrIyBNYWtlIGl0IGluIGBvdGhlcnMnIHBhc3MsIG5vdCBgbGliJyBwYXNzLgorK2V4dHJhLWxpYnMtb3RoZXJzLXkgKz0gJChleHRyYS1saWJzLXkpCisgbGlicnBjc3ZjLXJvdXRpbmVzID0gJChycGNzdmM6JS54PXglKQorIGxpYnJwY3N2Yy1pbmhpYml0LW8gPSAub3MgIyBCdWlsZCBubyBzaGFyZWQgcnBjc3ZjIGxpYnJhcnkuCisgb21pdC1kZXBzID0gJChsaWJycGNzdmMtcm91dGluZXMpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hcm0vTWFrZWZpbGUgYi9zeXNkZXBzL2FybS9NYWtlZmlsZQoraW5kZXggMTdjMTI5Yi4uNTQzNzkxYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL01ha2VmaWxlCisrKysgYi9zeXNkZXBzL2FybS9NYWtlZmlsZQorQEAgLTM3LDEwICszNywxMyBAQCBpZmVxICgkKHN1YmRpciksY3N1KQorICMgZ2V0IG9mZnNldCB0byBydGxkX2dsb2JhbC5fZGxfaHdjYXAKKyBnZW4tYXMtY29uc3QtaGVhZGVycyArPSBydGxkLWdsb2JhbC1vZmZzZXRzLnN5bSB0bHNkZXNjLnN5bQorIGFlYWJpX2NvbnN0YW50cyA9IGFlYWJpX2xjc3RzIGFlYWJpX3NpZ2hhbmRsZXJzIGFlYWJpX21hdGgKKy1hZWFiaV9yb3V0aW5lcyA9IGFlYWJpX2Fzc2VydCBhZWFiaV9sb2NhbGVjb252IGFlYWJpX2Vycm5vX2FkZHIgXAorK2FlYWJpX3JvdXRpbmVzID0gYWVhYmlfYXNzZXJ0IGFlYWJpX2Vycm5vX2FkZHIgXAorIAkJIGFlYWJpX21iX2N1cl9tYXggYWVhYmlfYXRleGl0IGFlYWJpX21lbWNsciBhZWFiaV9tZW1jcHkgXAorIAkJIGFlYWJpX21lbW1vdmUgYWVhYmlfbWVtc2V0IFwKKyAJCSBhZWFiaV9yZWFkX3RwIGxpYmMtYWVhYmlfcmVhZF90cAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKythZWFiaV9yb3V0aW5lcyArPSBhZWFiaV9sb2NhbGVjb252CisrZW5kaWYKKyAKKyBzeXNkZXBfcm91dGluZXMgKz0gJChhZWFiaV9jb25zdGFudHMpICQoYWVhYmlfcm91dGluZXMpCisgc3RhdGljLW9ubHktcm91dGluZXMgKz0gJChhZWFiaV9jb25zdGFudHMpIGFlYWJpX3JlYWRfdHAKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaCBiL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oCitpbmRleCA3YTBmZThkLi5hM2UyYzBhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmgKKysrKyBiL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oCitAQCAtNDM1LDYgKzQzNSwxMiBAQCBleHRlcm4gc3RydWN0IHJ0bGRfZ2xvYmFsIF9ydGxkX2dsb2JhbCBfX3J0bGRfZ2xvYmFsX2F0dHJpYnV0ZV9fOworICMgdW5kZWYgX19ydGxkX2dsb2JhbF9hdHRyaWJ1dGVfXworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworKyMgZGVmaW5lIEdMUk9fZGxfZGVidWdfbWFzayBHTFJPKGRsX2RlYnVnX21hc2spCisrI2Vsc2UKKysjIGRlZmluZSBHTFJPX2RsX2RlYnVnX21hc2sgMAorKyNlbmRpZgorKworICNpZm5kZWYgU0hBUkVECisgIyBkZWZpbmUgR0xSTyhuYW1lKSBfIyNuYW1lCisgI2Vsc2UKK0BAIC00NDcsOCArNDUzLDEwIEBAIHN0cnVjdCBydGxkX2dsb2JhbF9ybworIHsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAgIC8qIElmIG5vbnplcm8gdGhlIGFwcHJvcHJpYXRlIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQuICAqLworICAgRVhURVJOIGludCBfZGxfZGVidWdfbWFzazsKKysjZW5kaWYKKyAjZGVmaW5lIERMX0RFQlVHX0xJQlMJICAgICgxIDw8IDApCisgI2RlZmluZSBETF9ERUJVR19JTVBDQUxMUyAgICgxIDw8IDEpCisgI2RlZmluZSBETF9ERUJVR19CSU5ESU5HUyAgICgxIDw8IDIpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nbnUvTWFrZWZpbGUgYi9zeXNkZXBzL2dudS9NYWtlZmlsZQoraW5kZXggZWE2ODAzNy4uMzE3NWNjMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ251L01ha2VmaWxlCisrKysgYi9zeXNkZXBzL2dudS9NYWtlZmlsZQorQEAgLTU5LDcgKzU5LDggQEAgJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMpICQob2JqZWN0LXN1ZmZpeGVzOj0uZCksXAorIGVuZGlmCisgCisgaWZlcSAoJChzdWJkaXIpLGxvZ2luKQorLXN5c2RlcF9yb3V0aW5lcyArPSBzZXR1dHhlbnQgZ2V0dXR4ZW50IGVuZHV0eGVudCBnZXR1dHhpZCBnZXR1dHhsaW5lIFwKKytzeXNkZXBfcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1VUTVBYKSBcCisrCQkrPSBzZXR1dHhlbnQgZ2V0dXR4ZW50IGVuZHV0eGVudCBnZXR1dHhpZCBnZXR1dHhsaW5lIFwKKyAJCSAgIHB1dHV0eGxpbmUgdXRtcHhuYW1lIHVwZHd0bXB4IGdldHV0bXB4IGdldHV0bXAKKyAKKyBzeXNkZXBfaGVhZGVycyArPSB1dG1weC5oIGJpdHMvdXRtcHguaAorZGlmZiAtLWdpdCBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZSBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZQoraW5kZXggMjIyMTIyZC4uNDUwOTM1NyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L01ha2VmaWxlCitAQCAtMTEsMTkgKzExLDE4IEBAIGxpYm0tcm91dGluZXMgKz0gc19uZXh0dG93YXJkZmQKKyByb3V0aW5lcyArPSBtYXRoX2xkYmxfb3B0IG5sZGJsLWNvbXBhdAorIAorIGV4dHJhLWxpYnMgKz0gbGlibmxkYmwKKy1saWJubGRibC1jYWxscyA9IGFzcHJpbnRmIGRwcmludGYgZnByaW50ZiBmc2NhbmYgZndwcmludGYgZndzY2FuZiBpb3Zmc2NhbmYgXAorK2xpYm5sZGJsLWNhbGxzID0gYXNwcmludGYgZHByaW50ZiBmcHJpbnRmIGZzY2FuZiBpb3Zmc2NhbmYgXAorIAkJIG9ic3RhY2tfcHJpbnRmIG9ic3RhY2tfdnByaW50ZiBwcmludGYgc2NhbmYgc25wcmludGYgXAorLQkJIHNwcmludGYgc3NjYW5mIHN3cHJpbnRmIHN3c2NhbmYgdmFzcHJpbnRmIHZkcHJpbnRmIHZmcHJpbnRmIFwKKy0JCSB2ZnNjYW5mIHZmd3ByaW50ZiB2ZndzY2FuZiB2cHJpbnRmIHZzY2FuZiB2c25wcmludGYgXAorLQkJIHZzcHJpbnRmIHZzc2NhbmYgdnN3cHJpbnRmIHZzd3NjYW5mIHZ3cHJpbnRmIHZ3c2NhbmYgXAorLQkJIHdwcmludGYgd3NjYW5mIHByaW50Zl9mcCBwcmludGZfc2l6ZSBcCistCQkgZnByaW50Zl9jaGsgZndwcmludGZfY2hrIHByaW50Zl9jaGsgc25wcmludGZfY2hrIHNwcmludGZfY2hrIFwKKy0JCSBzd3ByaW50Zl9jaGsgdmZwcmludGZfY2hrIHZmd3ByaW50Zl9jaGsgdnByaW50Zl9jaGsgXAorLQkJIHZzbnByaW50Zl9jaGsgdnNwcmludGZfY2hrIHZzd3ByaW50Zl9jaGsgdndwcmludGZfY2hrIFwKKy0JCSB3cHJpbnRmX2NoayBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisrCQkgc3ByaW50ZiBzc2NhbmYgdmFzcHJpbnRmIHZkcHJpbnRmIHZmcHJpbnRmIFwKKysJCSB2ZnNjYW5mIHZwcmludGYgdnNjYW5mIHZzbnByaW50ZiBcCisrCQkgdnNwcmludGYgdnNzY2FuZiBcCisrCQkgcHJpbnRmX2ZwIHByaW50Zl9zaXplIFwKKysJCSBmcHJpbnRmX2NoayBwcmludGZfY2hrIHNucHJpbnRmX2NoayBzcHJpbnRmX2NoayBcCisrCQkgdmZwcmludGZfY2hrIHZwcmludGZfY2hrIFwKKysJCSB2c25wcmludGZfY2hrIHZzcHJpbnRmX2NoayBcCisrCQkgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorIAkJIHZkcHJpbnRmX2NoayBvYnN0YWNrX3ByaW50Zl9jaGsgb2JzdGFja192cHJpbnRmX2NoayBcCisgCQkgc3lzbG9nIHN5c2xvZ19jaGsgdnN5c2xvZyB2c3lzbG9nX2NoayBcCistCQkgc3RyZm1vbiBzdHJmbW9uX2wgXAorIAkJIHN0cnRvbGQgc3RydG9sZF9sIHN0cnRvbGRpbnQgd2NzdG9sZCB3Y3N0b2xkX2wgd2NzdG9sZGludCBcCisgCQkgcWVjdnQgcWZjdnQgcWdjdnQgcWVjdnRfciBxZmN2dF9yIFwKKyAJCSBpc2luZiBpc25hbiBmaW5pdGUgc2lnbmJpdCBzY2FsYiBsb2cyIGxnYW1tYV9yIGNlaWwgXAorQEAgLTM4LDkgKzM3LDE1IEBAIGxpYm5sZGJsLWNhbGxzID0gYXNwcmludGYgZHByaW50ZiBmcHJpbnRmIGZzY2FuZiBmd3ByaW50ZiBmd3NjYW5mIGlvdmZzY2FuZiBcCisgCQkgY2FzaW5oIGNleHAgY2xvZyBjcHJvaiBjc2luIGNzaW5oIGNzcXJ0IGN0YW4gY3RhbmggY3BvdyBcCisgCQkgY2FicyBjYXJnIGNpbWFnIGNyZWFsIGNsb2cxMCBcCisgCQkgaXNvYzk5X3NjYW5mIGlzb2M5OV9mc2NhbmYgaXNvYzk5X3NzY2FuZiBcCistCQkgaXNvYzk5X3ZzY2FuZiBpc29jOTlfdmZzY2FuZiBpc29jOTlfdnNzY2FuZiBcCisrCQkgaXNvYzk5X3ZzY2FuZiBpc29jOTlfdmZzY2FuZiBpc29jOTlfdnNzY2FuZgorK2xpYm5sZGJsLWNhbGxzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gc3RyZm1vbiBzdHJmbW9uX2wKKytsaWJubGRibC1jYWxscy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSArPSBmd3ByaW50ZiBmd3NjYW5mIFwKKysJCSBzd3ByaW50ZiBzd3NjYW5mIHZmd3ByaW50ZiB2ZndzY2FuZiB2c3dwcmludGYgdnN3c2NhbmYgXAorKwkJIHZ3cHJpbnRmIHZ3c2NhbmYgd3ByaW50ZiB3c2NhbmYgZndwcmludGZfY2hrIHN3cHJpbnRmX2NoayBcCisrCQkgdmZ3cHJpbnRmX2NoayB2c3dwcmludGZfY2hrIHZ3cHJpbnRmX2NoayB3cHJpbnRmX2NoayBcCisgCQkgaXNvYzk5X3dzY2FuZiBpc29jOTlfZndzY2FuZiBpc29jOTlfc3dzY2FuZiBcCisgCQkgaXNvYzk5X3Z3c2NhbmYgaXNvYzk5X3Zmd3NjYW5mIGlzb2M5OV92c3dzY2FuZgorK2xpYm5sZGJsLWNhbGxzICs9ICQobGlibmxkYmwtY2FsbHMteSkKKyBsaWJubGRibC1yb3V0aW5lcyA9ICQobGlibmxkYmwtY2FsbHM6JT1ubGRibC0lKQorIGxpYm5sZGJsLWluaGliaXQtbyA9ICQob2JqZWN0LXN1ZmZpeGVzKQorIGxpYm5sZGJsLXN0YXRpYy1vbmx5LXJvdXRpbmVzID0gJChsaWJubGRibC1yb3V0aW5lcykKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMKK2luZGV4IDAxOTg4ODYuLjU1NTAxY2QgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMKKysrKyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuYworQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKyAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlICJubGRibC1jb21wYXQuaCIKKyAKK0BAIC0zMywyMCArMzQsMTQgQEAgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnNzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3ByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZnNjYW5mKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZkcHJpbnRmKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3NjYW5mKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3ByaW50ZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnNucHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zhc3ByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9vYnN0YWNrX3ZwcmludGYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZndwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnNucHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZmcHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzeXNsb2dfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnNwcmludGZfY2hrKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN3cHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zhc3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZHByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19vYnN0YWNrX3ZwcmludGZfY2hrKQorQEAgLTU0LDggKzQ5LDE3IEBAIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN0cmZtb24pCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3RyZm1vbl9sKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zzc2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdmZzY2FuZikKKysKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3NjYW5mKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzd3NjYW5mKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zmd3ByaW50ZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dwcmludGYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZndwcmludGZfY2hrKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN3cHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92c3dzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92ZndzY2FuZikKKysjZW5kaWYKKyAKKyBzdGF0aWMgdm9pZAorIF9fbmxkYmxfY2xlYW51cCAodm9pZCAqYXJnKQorQEAgLTExNyw2ICsxMjEsNyBAQCBfX25sZGJsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgfQorIHdlYWtfYWxpYXMgKF9fbmxkYmxfZnByaW50ZiwgX19ubGRibF9fSU9fZnByaW50ZikKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uIHdlYWtfZnVuY3Rpb24KKyBfX25sZGJsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorQEAgLTEzMCw2ICsxMzUsNyBAQCBfX25sZGJsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtMjI2LDYgKzIzMiw3IEBAIF9fbmxkYmxfc25wcmludGYgKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX3N3cHJpbnRmICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCitAQCAtMjM5LDYgKzI0Niw3IEBAIF9fbmxkYmxfc3dwcmludGYgKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCitAQCAtMjY0LDYgKzI3Miw3IEBAIF9fbmxkYmxfdmRwcmludGYgKGludCBkLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJnKQorIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfdmRwcmludGYpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCisgX19ubGRibF92ZndwcmludGYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC0yNzUsNiArMjg0LDcgQEAgX19ubGRibF92ZndwcmludGYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKKyAgIHJldHVybiByZXM7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF92ZndwcmludGYpCisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC0yOTcsNiArMzA3LDcgQEAgX19ubGRibF92c25wcmludGYgKGNoYXIgKnN0cmluZywgc2l6ZV90IG1heGxlbiwgY29uc3QgY2hhciAqZm10LAorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF92c25wcmludGYpCisgd2Vha19hbGlhcyAoX19ubGRibF92c25wcmludGYsIF9fbmxkYmxfX192c25wcmludGYpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCisgX19ubGRibF92c3dwcmludGYgKHdjaGFyX3QgKnN0cmluZywgc2l6ZV90IG1heGxlbiwgY29uc3Qgd2NoYXJfdCAqZm10LAorQEAgLTMzMCw2ICszNDEsNyBAQCBfX25sZGJsX3dwcmludGYgKGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNDE5LDYgKzQzMSw3IEBAIF9fbmxkYmxfc2NhbmYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX3Zmd3NjYW5mIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtNDkxLDYgKzUwNCw3IEBAIF9fbmxkYmxfd3NjYW5mIChjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTUwNiw2ICs1MjAsNyBAQCBfX25sZGJsX19fZnByaW50Zl9jaGsgKEZJTEUgKnN0cmVhbSwgaW50IGZsYWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fZndwcmludGZfY2hrIChGSUxFICpzdHJlYW0sIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKK0BAIC01MTksNiArNTM0LDcgQEAgX19ubGRibF9fX2Z3cHJpbnRmX2NoayAoRklMRSAqc3RyZWFtLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC01NjMsNiArNTc5LDcgQEAgX19ubGRibF9fX3NwcmludGZfY2hrIChjaGFyICpzLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fc3dwcmludGZfY2hrICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgaW50IGZsYWcsIHNpemVfdCBzbGVuLAorQEAgLTU3Nyw2ICs1OTQsNyBAQCBfX25sZGJsX19fc3dwcmludGZfY2hrICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgaW50IGZsYWcsIHNpemVfdCBzbGVuLAorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNTkwLDYgKzYwOCw3IEBAIF9fbmxkYmxfX192ZnByaW50Zl9jaGsgKEZJTEUgKnMsIGludCBmbGFnLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3ZmcHJpbnRmX2NoaykKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKnMsIGludCBmbGFnLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtNjAxLDYgKzYyMCw3IEBAIF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpzLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorICAgcmV0dXJuIHJlczsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdmZ3cHJpbnRmX2NoaykKKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTYzNSw2ICs2NTUsNyBAQCBfX25sZGJsX19fdnNwcmludGZfY2hrIChjaGFyICpzdHJpbmcsIGludCBmbGFnLCBzaXplX3Qgc2xlbiwgY29uc3QgY2hhciAqZm10LAorIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192c3ByaW50Zl9jaGspCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX192c3dwcmludGZfY2hrICh3Y2hhcl90ICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIGludCBmbGFnLCBzaXplX3Qgc2xlbiwKK0BAIC02NjgsNiArNjg5LDcgQEAgX19ubGRibF9fX3dwcmludGZfY2hrIChpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC03NzUsNiArNzk3LDcgQEAgX19ubGRibF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqaW5mbywKKyAgIHJldHVybiBfX19wcmludGZfZnAgKGZwLCAmaW5mb19ub19sZGJsLCBhcmdzKTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIHNzaXplX3QKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfc3RyZm1vbiAoY2hhciAqcywgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorQEAgLTgyOSw2ICs4NTIsNyBAQCBfX25sZGJsX19fdnN0cmZtb25fbCAoY2hhciAqcywgc2l6ZV90IG1heHNpemUsIF9fbG9jYWxlX3QgbG9jLAorICAgcmV0dXJuIHJlczsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdnN0cmZtb25fbCkKKysjZW5kaWYKKyAKKyB2b2lkCisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC05NDEsNiArOTY1LDcgQEAgX19ubGRibF9fX2lzb2M5OV9zY2FuZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCisgICByZXR1cm4gZG9uZTsKKyB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX19pc29jOTlfdmZ3c2NhbmYgKEZJTEUgKnMsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK0BAIC0xMDE0LDYgKzEwMzksNyBAQCBfX25sZGJsX19faXNvYzk5X3dzY2FuZiAoY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgI2lmIExPTkdfRE9VQkxFX0NPTVBBVChsaWJjLCBHTElCQ18yXzApCisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9fSU9fcHJpbnRmLCBfSU9fcHJpbnRmLCBHTElCQ18yXzApOworQEAgLTEwNTcsNiArMTA4Myw3IEBAIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfcHJpbnRmX3NpemUsIHByaW50Zl9zaXplLCBHTElCQ18yXzEpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfX19zdHJmbW9uX2wsIF9fc3RyZm1vbl9sLCBHTElCQ18yXzEpOworICNlbmRpZgorICNpZiBMT05HX0RPVUJMRV9DT01QQVQobGliYywgR0xJQkNfMl8yKQorKyMgaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfc3dwcmludGYsIHN3cHJpbnRmLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfdndwcmludGYsIHZ3cHJpbnRmLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfd3ByaW50Ziwgd3ByaW50ZiwgR0xJQkNfMl8yKTsKK0BAIC0xMDY5LDYgKzEwOTYsNyBAQCBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Zmd3NjYW5mLCB2ZndzY2FuZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Zzd3NjYW5mLCB2c3dzY2FuZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Z3c2NhbmYsIHZ3c2NhbmYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF93c2NhbmYsIHdzY2FuZiwgR0xJQkNfMl8yKTsKKysjIGVuZGlmCisgI2VuZGlmCisgI2lmIExPTkdfRE9VQkxFX0NPTVBBVChsaWJjLCBHTElCQ18yXzMpCisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF9zdHJmbW9uX2wsIHN0cmZtb25fbCwgR0xJQkNfMl8zKTsKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmggYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmgKK2luZGV4IDBkMmM4YWYuLmY0Y2VhNTAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmgKKysrKyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9ubGRibC1jb21wYXQuaAorQEAgLTMwLDYgKzMwLDcgQEAKKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDxtb25ldGFyeS5oPgorICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgLyogRGVjbGFyZSB0aGUgX19ubGRibF9OQU1FIGZ1bmN0aW9uIHRoZSB3cmFwcGVycyBjYWxsIHRoYXQncyBpbiBsaWJjLnNvLiAgKi8KK0BAIC0zNywxOSArMzgsMTUgQEAKKyAKKyBOTERCTF9ERUNMIChfSU9fdmZzY2FuZik7CisgTkxEQkxfREVDTCAodmZzY2FuZik7CistTkxEQkxfREVDTCAodmZ3c2NhbmYpOworIE5MREJMX0RFQ0wgKG9ic3RhY2tfdnByaW50Zik7CisgTkxEQkxfREVDTCAodmFzcHJpbnRmKTsKKyBOTERCTF9ERUNMIChkcHJpbnRmKTsKKyBOTERCTF9ERUNMICh2ZHByaW50Zik7CisgTkxEQkxfREVDTCAoZnByaW50Zik7CisgTkxEQkxfREVDTCAodmZwcmludGYpOworLU5MREJMX0RFQ0wgKHZmd3ByaW50Zik7CisgTkxEQkxfREVDTCAodnNucHJpbnRmKTsKKyBOTERCTF9ERUNMICh2c3ByaW50Zik7CisgTkxEQkxfREVDTCAodnNzY2FuZik7CistTkxEQkxfREVDTCAodnN3cHJpbnRmKTsKKy1OTERCTF9ERUNMICh2c3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19hc3ByaW50Zik7CisgTkxEQkxfREVDTCAoYXNwcmludGYpOworIE5MREJMX0RFQ0wgKF9fcHJpbnRmX2ZwKTsKK0BAIC02NiwxMiArNjMsMTggQEAgTkxEQkxfREVDTCAoX19pc29jOTlfc3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zmc2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zzc2NhbmYpOworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrTkxEQkxfREVDTCAodmZ3c2NhbmYpOworK05MREJMX0RFQ0wgKHZmd3ByaW50Zik7CisrTkxEQkxfREVDTCAodnN3cHJpbnRmKTsKKytOTERCTF9ERUNMICh2c3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV9md3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV9zd3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92d3NjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92ZndzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdnN3c2NhbmYpOworKyNlbmRpZgorIAorIC8qIFRoaXMgb25lIGRvZXMgbm90IGV4aXN0IGluIHRoZSBub3JtYWwgaW50ZXJmYWNlLCBvbmx5CisgICAgX19ubGRibF9fX3ZzdHJmbW9uIHJlYWxseSBleGlzdHMuICAqLworQEAgLTgyLDIyICs4NSwyMyBAQCBleHRlcm4gc3NpemVfdCBfX25sZGJsX19fdnN0cmZtb24gKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpCisgICAgc2luY2Ugd2UgZG9uJ3QgY29tcGlsZSB3aXRoIF9GT1JUSUZZX1NPVVJDRS4gICovCisgZXh0ZXJuIGludCBfX25sZGJsX19fdmZwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0LCBpbnQsCisgCQkJCSAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIF9HX3ZhX2xpc3QpOworLWV4dGVybiBpbnQgX19ubGRibF9fX3Zmd3ByaW50Zl9jaGsgKEZJTEUgKl9fcmVzdHJpY3QsIGludCwKKy0JCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KTsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192c3ByaW50Zl9jaGsgKGNoYXIgKl9fcmVzdHJpY3QsIGludCwgc2l6ZV90LAorIAkJCQkgICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfR192YV9saXN0KSBfX1RIUk9XOworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZzbnByaW50Zl9jaGsgKGNoYXIgKl9fcmVzdHJpY3QsIHNpemVfdCwgaW50LCBzaXplX3QsCisgCQkJCSAgICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfR192YV9saXN0KQorICAgX19USFJPVzsKKy1leHRlcm4gaW50IF9fbmxkYmxfX192c3dwcmludGZfY2hrICh3Y2hhcl90ICpfX3Jlc3RyaWN0LCBzaXplX3QsIGludCwgc2l6ZV90LAorLQkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpCistICBfX1RIUk9XOworIGV4dGVybiBpbnQgX19ubGRibF9fX3Zhc3ByaW50Zl9jaGsgKGNoYXIgKiosIGludCwgY29uc3QgY2hhciAqLCBfR192YV9saXN0KQorICAgX19USFJPVzsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192ZHByaW50Zl9jaGsgKGludCwgaW50LCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QpOworIGV4dGVybiBpbnQgX19ubGRibF9fX29ic3RhY2tfdnByaW50Zl9jaGsgKHN0cnVjdCBvYnN0YWNrICosIGludCwgY29uc3QgY2hhciAqLAorIAkJCQkJICBfR192YV9saXN0KSBfX1RIUk9XOworIGV4dGVybiB2b2lkIF9fbmxkYmxfX192c3lzbG9nX2NoayAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CistCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKytleHRlcm4gaW50IF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0LCBpbnQsCisrCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCk7CisrZXh0ZXJuIGludCBfX25sZGJsX19fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqX19yZXN0cmljdCwgc2l6ZV90LCBpbnQsIHNpemVfdCwKKysJCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KQorKyAgX19USFJPVzsKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogX19OTERCTF9DT01QQVRfSCAqLworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbnB0bC9NYWtlZmlsZSBiL3N5c2RlcHMvbnB0bC9NYWtlZmlsZQoraW5kZXggZTkzMzlhMy4uNzgyMDA5YiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbnB0bC9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9ucHRsL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOSBAQAorIAorIGlmZXEgKCQoc3ViZGlyKSxucHRsKQorIGxpYnB0aHJlYWQtc3lzZGVwX3JvdXRpbmVzICs9IGVycm5vLWxvYworK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TKSxuKQorK3N5c2RlcF9yb3V0aW5lcyArPSBzbWFsbC1tYWNyb3MtZm5zCisrZW5kaWYKKyBlbmRpZgorIAorIGlmZXEgKCQoc3ViZGlyKSxydCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaCBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oCitpbmRleCA1NTk5Y2YxLi5iODM5Mzc4IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmgKKysrKyBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oCitAQCAtMjQsNiArMjQsMTQgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsb3dsZXZlbGxvY2suaD4KKysjIGluY2x1ZGUgPHRscy5oPgorKyMgaW5jbHVkZSA8cHRocmVhZC1mdW5jdGlvbnMuaD4KKysjIGluY2x1ZGUgPGVycm5vLmg+IC8qIEZvciBFQlVTWS4gICovCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPiAvKiBGb3IgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MuICAqLworKyNlbmRpZgorKworIC8qIE11dGV4IHR5cGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgX0lPX01UU0FGRV9JTworICMgaWYgKCFJU19JTiAobGliYykgJiYgIUlTX0lOIChsaWJwdGhyZWFkKSkgfHwgIWRlZmluZWQgX0xJQkMKK0BAIC04Nyw2ICs5NSwxNSBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCisgLyogTG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDICYmIChJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrCisgIyBkZWZpbmUgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICAgdm9pZCAqc2VsZiA9IFRIUkVBRF9TRUxGOwkJCQkJCSAgICAgIFwKK0BAIC05Nyw2ICsxMTQsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworICAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgICAgICsrKE5BTUUpLmNudDsJCQkJCQkJICAgICAgXAorICAgfSB3aGlsZSAoMCkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZShOQU1FKQkJCQlcCisrICBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X2xvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKK0BAIC0xMDQsNiArMTI1LDE0IEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAKKyAvKiBUcnkgdG8gbG9jayB0aGUgcmVjdXJzaXZlIG5hbWVkIGxvY2sgdmFyaWFibGUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDICYmIChJU19JTiAobGliYykgfHwgSVNfSU4gKGxpYnB0aHJlYWQpKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gaW50IF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKyAjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgaW50IHJlc3VsdCA9IDA7CQkJCQkJCSAgICAgIFwKK0BAIC0xMjIsNiArMTUxLDEwIEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAgICAgICArKyhOQU1FKS5jbnQ7CQkJCQkJCSAgICAgIFwKKyAgICAgcmVzdWx0OwkJCQkJCQkJICAgICAgXAorICAgfSkKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisrICBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBfX2xpYmNfbWF5YmVfY2FsbCAoX19wdGhyZWFkX211dGV4X3RyeWxvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKK0BAIC0xMjksNiArMTYyLDE0IEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAKKyAvKiBVbmxvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyAmJiAoSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKSkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLCBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisgLyogV2UgZG8gbm8gZXJyb3IgY2hlY2tpbmcgaGVyZS4gICovCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisgICBkbyB7CQkJCQkJCQkJICAgICAgXAorQEAgLTEzOCw2ICsxNzksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAlsbGxfdW5sb2NrICgoTkFNRSkubG9jaywgTExMX1BSSVZBVEUpOwkJCQkgICAgICBcCisgICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZShOQU1FKSBcCisrICBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuICgmKE5BTUUpKQorKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgKi8KKyAjZWxzZQorICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF91bmxvY2ssICgmKE5BTUUpLm11dGV4KSwgMCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmggYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmgKK2luZGV4IGY1NWY2MjEuLmRhOTg4NjkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmgKKysrKyBiL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaAorQEAgLTMzLDYgKzMzLDggQEAKKyAjaW5jbHVkZSA8bG93bGV2ZWxsb2NrLmg+CisgI2luY2x1ZGUgPHRscy5oPgorICNpbmNsdWRlIDxwdGhyZWFkLWZ1bmN0aW9ucy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPiAvKiBGb3IgRUJVU1kuICAqLworKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPiAvKiBGb3IgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MuICAqLworIAorICNpZiBJU19JTiAobGlicHRocmVhZCkKKyAvKiBUaGlzIGdldHMgdXMgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgX19wdGhyZWFkXyogaW50ZXJuYWwgbmFtZXMsCitAQCAtMTcxLDEwICsxNzMsMjIgQEAgdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fbGliY19rZXlfdDsKKyAKKyAvKiBMb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKQorLSMgaWZuZGVmIF9fbGliY19sb2NrX2xvY2sKKy0jICBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX2xvY2tfZm4gKF9fbGliY19sb2NrX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX2xvY2tfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysjICBpZm5kZWYgX19saWJjX2xvY2tfbG9jaworKyMgICBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCisgICAoeyBsbGxfbG9jayAoTkFNRSwgTExMX1BSSVZBVEUpOyAwOyB9KQorLSMgZW5kaWYKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpICAgICAgICAgICAgICAgXAorKyAgX19saWJjX2xvY2tfbG9ja19mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIHVuZGVmIF9fbGliY19sb2NrX2xvY2sKKyAjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpIFwKK0BAIC0xODcsMTAgKzIwMSwyMiBAQCB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworIAorIC8qIFRyeSB0byBsb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKQorLSMgaWZuZGVmIF9fbGliY19sb2NrX3RyeWxvY2sKKy0jICBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiBpbnQgX19saWJjX2xvY2tfdHJ5bG9ja19mbiAoX19saWJjX2xvY2tfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdHJ5bG9ja19mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKyMgIGlmbmRlZiBfX2xpYmNfbG9ja190cnlsb2NrCisrIyAgIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKyAgIGxsbF90cnlsb2NrIChOQU1FKQorLSMgZW5kaWYKKysjICBlbmRpZgorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdHJ5bG9ja19mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIHVuZGVmIF9fbGliY19sb2NrX3RyeWxvY2sKKyAjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKK0BAIC0yMDYsOCArMjMyLDIwIEBAIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2xpYmNfa2V5X3Q7CisgCisgLyogVW5sb2NrIHRoZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKQorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MsIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfdW5sb2NrX2ZuIChfX2xpYmNfbG9ja190ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja191bmxvY2tfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorICAgbGxsX3VubG9jayAoTkFNRSwgTExMX1BSSVZBVEUpCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3VubG9ja19mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2soTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF91bmxvY2ssICgmKE5BTUUpKSwgMCkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jIGIvc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmY3NTEwNTMKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMKK0BAIC0wLDAgKzEsNzIgQEAKKysvKiBFR0xJQkM6IGZ1bmN0aW9uIHdyYXBwZXJzIGZvciBiaWcgbWFjcm9zLgorKyAgIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKysgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCisrICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorKyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysKKysvKiBIYW5kbGUgbWFjcm9zIGZyb20gLi9iaXRzL2xpYmMtbG9jay5oLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKQorKworKy8qIEdldCB0aGUgbWFjcm9zIGZvciBmdW5jdGlvbiBib2RpZXMgdGhyb3VnaCBhIGJhY2sgZG9vci4gICovCisrIyB1bmRlZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKyMgZGVmaW5lIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIDIKKysjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisrCisrdm9pZAorK19fbGliY19sb2NrX2xvY2tfZm4gKF9fbGliY19sb2NrX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfbG9jayAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX2xvY2tfZm4pOworKworK3ZvaWQKKytfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbik7CisrCisraW50CisrX19saWJjX2xvY2tfdHJ5bG9ja19mbiAoX19saWJjX2xvY2tfdCAqbmFtZSkKKyt7CisrICByZXR1cm4gX19saWJjX2xvY2tfdHJ5bG9jayAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3RyeWxvY2tfZm4pOworKworK2ludAorK19fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqbmFtZSkKKyt7CisrICByZXR1cm4gX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbik7CisrCisrdm9pZAorK19fbGliY19sb2NrX3VubG9ja19mbiAoX19saWJjX2xvY2tfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja191bmxvY2sgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja191bmxvY2tfZm4pOworKworK3ZvaWQKKytfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqbmFtZSkKKyt7CisrICBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbik7CisrCisrI2VuZGlmIC8qZGVmaW5lZCBfTElCQyAmJiAoIWRlZmluZWQgTk9UX0lOX2xpYmMgfHwgZGVmaW5lZCBJU19JTl9saWJwdGhyZWFkKSovCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYworaW5kZXggMjZlNDY5Mi4uZDBhMjZjOCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPG5ldGRiLmg+CisgI2luY2x1ZGUgPG5vdC1jYW5jZWwuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjZGVmaW5lIEhPU1RJREZJTEUgIi9ldGMvaG9zdGlkIgorIAorQEAgLTg5LDYgKzkwLDcgQEAgZ2V0aG9zdGlkICh2b2lkKQorIAlyZXR1cm4gaWQ7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIC8qIEdldHRpbmcgZnJvbSB0aGUgZmlsZSB3YXMgbm90IHN1Y2Nlc3NmdWwuICBBbiBpbnRlbGxpZ2VudCBndWVzcyBmb3IKKyAgICAgIGEgdW5pcXVlIG51bWJlciBvZiBhIGhvc3QgaXMgaXRzIElQIGFkZHJlc3MuICBSZXR1cm4gdGhpcy4gICovCisgICBpZiAoX19nZXRob3N0bmFtZSAoaG9zdG5hbWUsIE1BWEhPU1ROQU1FTEVOKSA8IDAgfHwgaG9zdG5hbWVbMF0gPT0gJ1wwJykKK0BAIC0xMTUsNSArMTE3LDkgQEAgZ2V0aG9zdGlkICh2b2lkKQorICAgLyogRm9yIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgbm90IGV4YWN0bHkgdGhlIElQIGFkZHJlc3Mgd2UgZG8gc29tZQorICAgICAgYml0IGZpZGRsaW5nLiAgKi8KKyAgIHJldHVybiAoaW50MzJfdCkgKGluLnNfYWRkciA8PCAxNiB8IGluLnNfYWRkciA+PiAxNik7CisrI2Vsc2UKKysgIC8qIFJldHVybiBhbiBhcmJpdHJhcnkgdmFsdWUuICAqLworKyAgcmV0dXJuIDA7CisrI2VuZGlmCisgfQorICNlbmRpZgorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYworaW5kZXggNTNhOGJiYi4uY2IxMTBkNCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbGliY19mYXRhbC5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8c3lzL3Vpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBib29sCisgd3JpdGV2X2Zvcl9mYXRhbCAoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IG5pb3YsIHNpemVfdCB0b3RhbCkKK0BAIC00MCw2ICs0MSw3IEBAIHdyaXRldl9mb3JfZmF0YWwgKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBuaW92LCBzaXplX3QgdG90YWwpCisgc3RhdGljIHZvaWQKKyBiYWNrdHJhY2VfYW5kX21hcHMgKGludCBkb19hYm9ydCwgYm9vbCB3cml0dGVuLCBpbnQgZmQpCisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFCisgICBpZiAoZG9fYWJvcnQgPiAxICYmIHdyaXR0ZW4pCisgICAgIHsKKyAgICAgICB2b2lkICphZGRyc1s2NF07CitAQCAtNjIsNiArNjQsNyBAQCBiYWNrdHJhY2VfYW5kX21hcHMgKGludCBkb19hYm9ydCwgYm9vbCB3cml0dGVuLCBpbnQgZmQpCisgICAgICAgICAgIGNsb3NlX25vdF9jYW5jZWxfbm9fc3RhdHVzIChmZDIpOworICAgICAgICAgfQorICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UgKi8KKyB9CisgI2RlZmluZSBCRUZPUkVfQUJPUlQJCWJhY2t0cmFjZV9hbmRfbWFwcworIAorZGlmZiAtLWdpdCBhL3RpbWUvTWFrZWZpbGUgYi90aW1lL01ha2VmaWxlCitpbmRleCBhNDExZjYyLi4yZDAyMmNhIDEwMDY0NAorLS0tIGEvdGltZS9NYWtlZmlsZQorKysrIGIvdGltZS9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgdGltZSByb3V0aW5lcworICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHRpbWUKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCwxNSArMzIsMjMgQEAgcm91dGluZXMgOj0gb2ZmdGltZSBhc2N0aW1lIGNsb2NrIGN0aW1lIGN0aW1lX3IgZGlmZnRpbWUgXAorIAkgICAgdHpmaWxlIGdldGl0aW1lciBzZXRpdGltZXIJCQkgXAorIAkgICAgc3RpbWUgZHlzaXplIHRpbWVnbSBmdGltZQkJCSBcCisgCSAgICBnZXRkYXRlIHN0cnB0aW1lIHN0cnB0aW1lX2wJCQkgXAorLQkgICAgc3RyZnRpbWUgd2NzZnRpbWUgc3RyZnRpbWVfbCB3Y3NmdGltZV9sCSBcCisrCSAgICBzdHJmdGltZSBzdHJmdGltZV9sCQkJCSBcCisgCSAgICB0aW1lc3BlY19nZXQKKy1hdXggOj0JICAgIGVyYSBhbHRfZGlnaXQgbGMtdGltZS1jbGVhbnVwCisgCistdGVzdHMJOj0gdGVzdF90aW1lIGNsb2NrdGVzdCB0c3QtcG9zaXh0eiB0c3Qtc3RycHRpbWUgdHN0X3djc2Z0aW1lIFwKKy0JICAgdHN0LWdldGRhdGUgdHN0LW1rdGltZSB0c3QtbWt0aW1lMiB0c3QtZnRpbWVfbCB0c3Qtc3RyZnRpbWUgXAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpICAgICAgICAgICAgICAgIFwKKysJICAgIDo9IHdjc2Z0aW1lIHdjc2Z0aW1lX2wKKythdXgtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSBhbHRfZGlnaXQgZXJhIGxjLXRpbWUtY2xlYW51cAorKworK3Rlc3RzCTo9IHRlc3RfdGltZSBjbG9ja3Rlc3QgdHN0LXBvc2l4dHogXAorKwkgICB0c3QtZ2V0ZGF0ZSB0c3QtbWt0aW1lIHRzdC1ta3RpbWUyIHRzdC1zdHJmdGltZSBcCisgCSAgIHRzdC1ta3RpbWUzIHRzdC1zdHJwdGltZTIgYnVnLWFzY3RpbWUgYnVnLWFzY3RpbWVfciBidWctbWt0aW1lMSBcCisgCSAgIHRzdC1zdHJwdGltZTMgYnVnLWdldGRhdGUxIHRzdC1zdHJwdGltZS13aGl0ZXNwYWNlIHRzdC1mdGltZQorIAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkgICAgICAgICs9IHRzdC1zdHJwdGltZSB0c3QtZnRpbWVfbAorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pIFwKKysJICAgICAgICArPSB0c3Rfd2NzZnRpbWUKKysKKyBpbmNsdWRlIC4uL1J1bGVzCisgCisgdHotY2ZsYWdzID0gLURUWkRJUj0nIiQoem9uZWRpcikiJyBcCitkaWZmIC0tZ2l0IGEvdGltZS9zdHJmdGltZV9sLmMgYi90aW1lL3N0cmZ0aW1lX2wuYworaW5kZXggYjQ4ZWYzNC4uYmZkZDYxOCAxMDA2NDQKKy0tLSBhL3RpbWUvc3RyZnRpbWVfbC5jCisrKysgYi90aW1lL3N0cmZ0aW1lX2wuYworQEAgLTM1LDYgKzM1LDEwIEBACisgIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorICNlbmRpZgorIAorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAjaWYgZGVmaW5lZCBlbWFjcyAmJiAhZGVmaW5lZCBIQVZFX0JDT1BZCisgIyBkZWZpbmUgSEFWRV9NRU1DUFkgMQorICNlbmRpZgorQEAgLTg4Miw3ICs4ODYsNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAJY2FzZSBMXygnQycpOgorIAkgIGlmIChtb2RpZmllciA9PSBMXygnRScpKQorIAkgICAgeworLSNpZiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKysjaWYgKCEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSAmJiBIQVZFX1NUUlVDVF9FUkFfRU5UUlkKKyAJICAgICAgc3RydWN0IGVyYV9lbnRyeSAqZXJhID0gX25sX2dldF9lcmFfZW50cnkgKHRwIEhFTFBFUl9MT0NBTEVfQVJHKTsKKyAJICAgICAgaWYgKGVyYSkKKyAJCXsKK0BAIC05NTUsNyArOTU5LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCisgCSAgaWYgKG1vZGlmaWVyID09IExfKCdPJykgJiYgMCA8PSBudW1iZXJfdmFsdWUpCisgCSAgICB7CistI2lmZGVmIF9OTF9DVVJSRU5UCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgZGVmaW5lZCAoX05MX0NVUlJFTlQpCisgCSAgICAgIC8qIEdldCB0aGUgbG9jYWxlIHNwZWNpZmljIGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbiBvZgorIAkJIHRoZSBudW1iZXIgTlVNQkVSX1ZBTFVFLiAgSWYgbm9uZSBleGlzdCBOVUxMIGlzIHJldHVybmVkLiAgKi8KKyAJICAgICAgY29uc3QgQ0hBUl9UICpjcCA9IG5sX2dldF9hbHRfZGlnaXQgKG51bWJlcl92YWx1ZQorQEAgLTEyNjAsNyArMTI2NCw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAljYXNlIExfKCdZJyk6CisgCSAgaWYgKG1vZGlmaWVyID09ICdFJykKKyAJICAgIHsKKy0jaWYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisgCSAgICAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IF9ubF9nZXRfZXJhX2VudHJ5ICh0cCBIRUxQRVJfTE9DQUxFX0FSRyk7CisgCSAgICAgIGlmIChlcmEpCisgCQl7CitAQCAtMTI4NSw3ICsxMjg5LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCWNhc2UgTF8oJ3knKToKKyAJICBpZiAobW9kaWZpZXIgPT0gTF8oJ0UnKSkKKyAJICAgIHsKKy0jaWYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisgCSAgICAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IF9ubF9nZXRfZXJhX2VudHJ5ICh0cCBIRUxQRVJfTE9DQUxFX0FSRyk7CisgCSAgICAgIGlmIChlcmEpCisgCQl7CitkaWZmIC0tZ2l0IGEvdGltZS9zdHJwdGltZV9sLmMgYi90aW1lL3N0cnB0aW1lX2wuYworaW5kZXggNTY0MGNjZS4uNzg0Y2NiYyAxMDA2NDQKKy0tLSBhL3RpbWUvc3RycHRpbWVfbC5jCisrKysgYi90aW1lL3N0cnB0aW1lX2wuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAKKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBIQVZFX0xPQ0FMVElNRV9SIDAKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorICNlbmRpZgorIAorQEAgLTg0LDcgKzg1LDcgQEAgbG9jYWx0aW1lX3IgKHQsIHRwKQorICAgICBpZiAodmFsIDwgZnJvbSB8fCB2YWwgPiB0bykJCQkJCQkgICAgICBcCisgICAgICAgcmV0dXJuIE5VTEw7CQkJCQkJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCistI2lmZGVmIF9OTF9DVVJSRU5UCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgZGVmaW5lZCAoX05MX0NVUlJFTlQpCisgIyBkZWZpbmUgZ2V0X2FsdF9udW1iZXIoZnJvbSwgdG8sIG4pIFwKKyAgICh7CQkJCQkJCQkJICAgICAgXAorICAgICAgX19sYWJlbF9fIGRvX25vcm1hbDsJCQkJCQkgICAgICBcCitAQCAtMjU3LDggKzI1OCwxMCBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgICBpbnQgY250OworICAgaW50IGNudF9sb25nZXN0OworICAgc2l6ZV90IHZhbDsKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHNpemVfdCBudW1fZXJhczsKKyAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IE5VTEw7CisrI2VuZGlmCisgICBlbnVtIHB0aW1lX2xvY2FsZV9zdGF0dXMgeyBub3QsIGxvYywgcmF3IH0gZGVjaWRlZF9sb25nZXN0OworICAgc3RydWN0IF9fc3RycHRpbWVfc3RhdGUKKyAgIHsKK0BAIC04MjAsNiArODIzLDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAkgICAgICBzLndhbnRfeGRheSA9IDE7CisgCSAgICAgIGJyZWFrOworIAkgICAgY2FzZSAnQyc6CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGlmIChzLmRlY2lkZWQgIT0gcmF3KQorIAkJeworIAkJICBpZiAocy5lcmFfY250ID49IDApCitAQCAtODU2LDEwICs4NjAsMTIgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAorIAkJICBzLmRlY2lkZWQgPSByYXc7CisgCQl9CisrI2VuZGlmCisgCSAgICAgIC8qIFRoZSBDIGxvY2FsZSBoYXMgbm8gZXJhIGluZm9ybWF0aW9uLCBzbyB1c2UgdGhlCisgCQkgbm9ybWFsIHJlcHJlc2VudGF0aW9uLiAgKi8KKyAJICAgICAgZ290byBtYXRjaF9jZW50dXJ5OworICAJICAgIGNhc2UgJ3knOgorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBpZiAocy5kZWNpZGVkICE9IHJhdykKKyAJCXsKKyAJCSAgZ2V0X251bWJlcigwLCA5OTk5LCA0KTsKK0BAIC05MTgsOSArOTI0LDEwIEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAKKyAJCSAgcy5kZWNpZGVkID0gcmF3OworIAkJfQorLQorKyNlbmRpZgorIAkgICAgICBnb3RvIG1hdGNoX3llYXJfaW5fY2VudHVyeTsKKyAJICAgIGNhc2UgJ1knOgorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBpZiAocy5kZWNpZGVkICE9IHJhdykKKyAJCXsKKyAJCSAgbnVtX2VyYXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19USU1FLAorQEAgLTk0OCw2ICs5NTUsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCisgCQkgIHMuZGVjaWRlZCA9IHJhdzsKKyAJCX0KKysjZW5kaWYKKyAJICAgICAgZ2V0X251bWJlciAoMCwgOTk5OSwgNCk7CisgCSAgICAgIHRtLT50bV95ZWFyID0gdmFsIC0gMTkwMDsKKyAJICAgICAgcy53YW50X2NlbnR1cnkgPSAwOworQEAgLTExMTgsNiArMTEyNiw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAJdG0tPnRtX3llYXIgPSAocy5jZW50dXJ5IC0gMTkpICogMTAwOworICAgICB9CisgCisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAocy5lcmFfY250ICE9IC0xKQorICAgICB7CisgICAgICAgZXJhID0gX25sX3NlbGVjdF9lcmFfZW50cnkgKHMuZXJhX2NudCBIRUxQRVJfTE9DQUxFX0FSRyk7CitAQCAtMTEzMiw2ICsxMTQxLDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAl0bS0+dG1feWVhciA9IGVyYS0+c3RhcnRfZGF0ZVswXTsKKyAgICAgfQorICAgZWxzZQorKyNlbmRpZgorICAgICBpZiAocy53YW50X2VyYSkKKyAgICAgICB7CisgCS8qIE5vIGVyYSBmb3VuZCBidXQgd2UgaGF2ZSBzZWVuIGFuIEUgbW9kaWZpZXIuICBSZWN0aWZ5IHNvbWUKK2RpZmYgLS1naXQgYS90aW1lem9uZS9NYWtlZmlsZSBiL3RpbWV6b25lL01ha2VmaWxlCitpbmRleCA4ODZiMDZlLi5mOTIyNjg0IDEwMDY0NAorLS0tIGEvdGltZXpvbmUvTWFrZWZpbGUKKysrKyBiL3RpbWV6b25lL01ha2VmaWxlCitAQCAtMTI3LDcgKzEyNyw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCisgCisgJChvYmpwZngpdHpzZWxlY3Q6IHR6c2VsZWN0LmtzaCAkKGNvbW1vbi1vYmpwZngpY29uZmlnLm1ha2UKKyAJc2VkIC1lICdzfC9iaW4vYmFzaHwvYmluL3NofCcgXAorLQkgICAgLWUgJ3N8VFpESVI9W159XSp8VFpESVI9JCh6b25lZGlyKXwnIFwKKysJICAgIC1lICcvVFpESVI9L3N8XCQkKHB3ZCl8JCh6b25lZGlyKXwnIFwKKyAJICAgIC1lICcvVFpWRVJTSU9OPS9zfHNlZV9NYWtlZmlsZXwiJCh2ZXJzaW9uKSJ8JyBcCisgCSAgICAtZSAnL1BLR1ZFUlNJT049L3N8PS4qfD0iJChQS0dWRVJTSU9OKSJ8JyBcCisgCSAgICAtZSAnL1JFUE9SVF9CVUdTX1RPPS9zfD0uKnw9IiQoUkVQT1JUX0JVR1NfVE8pInwnIFwKK2RpZmYgLS1naXQgYS93Y3NtYnMvTWFrZWZpbGUgYi93Y3NtYnMvTWFrZWZpbGUKK2luZGV4IDQ0YTQ0OTQuLmRiOWZjMjQgMTAwNjQ0CistLS0gYS93Y3NtYnMvTWFrZWZpbGUKKysrKyBiL3djc21icy9NYWtlZmlsZQorQEAgLTE4LDE1ICsxOCwyMSBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igd2NzbWJzIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gd2NzbWJzCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwk6PSB3Y2hhci5oIGJpdHMvd2NoYXIuaCBiaXRzL3djaGFyMi5oIGJpdHMvd2NoYXItbGRibC5oIHVjaGFyLmgKKyAKKy1yb3V0aW5lcyA6PSB3Y3NjYXQgd2NzY2hyIHdjc2NtcCB3Y3NjcHkgd2NzY3NwbiB3Y3NkdXAgd2NzbGVuIHdjc25jYXQgXAorKyMgVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHByaW50Zl9mcC5jLCBldmVuIGluIHRoZSBwbGFpbiBjYXNlOyBzZWUKKysjIGNvbW1lbnRzIHRoZXJlIGZvciBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFLgorK3JvdXRpbmVzICA6PSB3bWVtY3B5IHdtZW1zZXQKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSAgOj0gd2NzY2F0IHdjc2NociB3Y3NjbXAgd2NzY3B5IHdjc2NzcG4gd2NzZHVwIHdjc2xlbiB3Y3NuY2F0IFwKKyAJICAgIHdjc25jbXAgd2NzbmNweSB3Y3NwYnJrIHdjc3JjaHIgd2Nzc3BuIHdjc3RvayB3Y3NzdHIgd21lbWNociBcCistCSAgICB3bWVtY21wIHdtZW1jcHkgd21lbW1vdmUgd21lbXNldCB3Y3BjcHkgd2NwbmNweSB3bWVtcGNweSBcCisrCSAgICB3bWVtY21wIHdtZW1tb3ZlIHdjcGNweSB3Y3BuY3B5IHdtZW1wY3B5IFwKKyAJICAgIGJ0b3djIHdjdG9iIG1ic2luaXQgXAorIAkgICAgbWJybGVuIG1icnRvd2Mgd2NydG9tYiBtYnNydG93Y3Mgd2NzcnRvbWJzIFwKKyAJICAgIG1ic25ydG93Y3Mgd2NzbnJ0b21icyB3Y3NubGVuIHdjc2Nocm51bCBcCitAQCAtMzgsMTQgKzQ0LDIxIEBAIHJvdXRpbmVzIDo9IHdjc2NhdCB3Y3NjaHIgd2NzY21wIHdjc2NweSB3Y3Njc3BuIHdjc2R1cCB3Y3NsZW4gd2NzbmNhdCBcCisgCSAgICB3Y3Njb2xsX2wgd2NzeGZybV9sIFwKKyAJICAgIHdjc2Nhc2VjbXAgd2NzbmNhc2Ugd2NzY2FzZWNtcF9sIHdjc25jYXNlX2wgXAorIAkgICAgd2NzbWJzbG9hZCBtYnNydG93Y3NfbCBcCistCSAgICBpc29jOTlfd3NjYW5mIGlzb2M5OV92d3NjYW5mIGlzb2M5OV9md3NjYW5mIGlzb2M5OV92ZndzY2FuZiBcCisgCSAgICBpc29jOTlfc3dzY2FuZiBpc29jOTlfdnN3c2NhbmYgXAorIAkgICAgbWJydG9jMTYgYzE2cnRvbWIKKyAKKy1zdHJvcC10ZXN0cyA6PSAgd2NzY21wIHdjc25jbXAgd21lbWNtcCB3Y3NsZW4gd2NzY2hyIHdjc3JjaHIgd2NzY3B5CistdGVzdHMgOj0gdHN0LXdjc3RvZiB3Y3NtYnMtdHN0MSB0c3Qtd2NzbmxlbiB0c3QtYnRvd2MgdHN0LW1icnRvd2MgXAorLQkgdHN0LXdjcnRvbWIgdHN0LXdjcG5jcHkgdHN0LW1ic3J0b3djcyB0c3Qtd2NoYXItaCB0c3QtbWJydG93YzIgXAorLQkgdHN0LWMxNmMzMi0xIHdjc2F0Y2xpZmYgJChhZGRwcmVmaXggdGVzdC0sJChzdHJvcC10ZXN0cykpCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSs9IGlzb2M5OV93c2NhbmYgaXNvYzk5X3Z3c2NhbmYgaXNvYzk5X2Z3c2NhbmYgaXNvYzk5X3Zmd3NjYW5mCisrCisrc3Ryb3AtdGVzdHMgOj0gIHdjc2NtcCB3bWVtY21wIHdtZW1jbXAgd2NzbGVuIHdjc2NociB3Y3NyY2hyIHdjc2NweQorKworK3Rlc3RzIDo9IHRzdC13Y2hhci1oCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSs9IHRzdC1idG93YyB0c3QtbWJydG93YyB0c3QtbWJydG93YzIgdHN0LXdjcnRvbWIgdHN0LWMxNmMzMi0xCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkrPSB0c3Qtd2NzdG9mIHdjc21icy10c3QxIHRzdC13Y3NubGVuIFwKKysJdHN0LXdjcG5jcHkgdHN0LW1ic3J0b3djcyBcCisrCXdjc2F0Y2xpZmYgJChhZGRwcmVmaXggdGVzdC0sJChzdHJvcC10ZXN0cykpCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL3djc21icy93Y3NtYnNsb2FkLmMgYi93Y3NtYnMvd2NzbWJzbG9hZC5jCitpbmRleCA2YmI0OWJjLi4yYWI5ZDA3IDEwMDY0NAorLS0tIGEvd2NzbWJzL3djc21ic2xvYWQuYworKysrIGIvd2NzbWJzL3djc21ic2xvYWQuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKyAjaW5jbHVkZSA8d2NzbWJzbG9hZC5oPgorQEAgLTE0Myw2ICsxNDQsNyBAQCBfX3djc21ic19nZXRmY3QgKGNvbnN0IGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tLCBzaXplX3QgKm5zdGVwc3ApCisgICB9KQorIAorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAvKiBTb21lIG9mIHRoZSBmdW5jdGlvbnMgaGVyZSBtdXN0IG5vdCBiZSB1c2VkIHdoaWxlIHNldGxvY2FsZSBpcyBjYWxsZWQuICAqLworIF9fbGliY19yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9fbGliY19zZXRsb2NhbGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorIAorQEAgLTIxMSw2ICsyMTMsMTcgQEAgX193Y3NtYnNfbG9hZF9jb252IChzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqbmV3X2NhdGVnb3J5KQorIAorICAgX19saWJjX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisgfQorKyNlbHNlCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX193Y3NtYnNfbG9hZF9jb252IChzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqbmV3X2NhdGVnb3J5KQorK3sKKysgIC8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgd2Ugc2hvdWxkIG5ldmVyIHJlYWNoCisrICAgICB0aGlzIHBvaW50OiB0aGVyZSBpcyBubyB3YXkgdG8gY2hhbmdlIGxvY2FsZXMsIHNvIGV2ZXJ5IGxvY2FsZQorKyAgICAgcGFzc2VkIHRvIGdldF9nY29udl9mY3RzIHNob3VsZCBiZSBfbmxfQ19MQ19DVFlQRS4gICovCisrICBhYm9ydCAoKTsKKyt9CisrI2VuZGlmCisgCisgCisgLyogQ2xvbmUgdGhlIGN1cnJlbnQgY29udmVyc2lvbiBmdW5jdGlvbiBzZXQuICAqLworZGlmZiAtLWdpdCBhL3djdHlwZS9NYWtlZmlsZSBiL3djdHlwZS9NYWtlZmlsZQoraW5kZXggYzU2ZjA3Yy4uNGU4YWY0MyAxMDA2NDQKKy0tLSBhL3djdHlwZS9NYWtlZmlsZQorKysrIGIvd2N0eXBlL01ha2VmaWxlCitAQCAtMTgsMTQgKzE4LDIwIEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciB3Y3R5cGUgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSB3Y3R5cGUKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQk6PSB3Y3R5cGUuaAorLXJvdXRpbmVzCTo9IHdjZnVuY3Mgd2N0eXBlIGlzd2N0eXBlIHdjdHJhbnMgdG93Y3RyYW5zIFwKKy0JCSAgIHdjZnVuY3NfbCB3Y3R5cGVfbCBpc3djdHlwZV9sIHdjdHJhbnNfbCB0b3djdHJhbnNfbAorLQorLXRlc3RzCTo9IHRlc3Rfd2N0eXBlIHRlc3Rfd2NmdW5jcyBidWctd2N0eXBlaAorK3JvdXRpbmVzIAk6PSB3Y3RyYW5zIHRvd2N0cmFucyB0b3djdHJhbnNfbAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJCTo9IHdjZnVuY3Mgd2N0eXBlIGlzd2N0eXBlIFwKKysJCSAgIHdjZnVuY3NfbCB3Y3R5cGVfbCBpc3djdHlwZV9sIHdjdHJhbnNfbAorKworK3Rlc3RzCTo9CisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKyAgICAgKz0gdGVzdF93Y3R5cGUgdGVzdF93Y2Z1bmNzIGJ1Zy13Y3R5cGVoCisgCisgaW5jbHVkZSAuLi9SdWxlcworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNTljY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaApAQCAtMCwwICsxLDEyMyBAQAorRnJvbSA1NzczNDE3ZmE5MWExOGNkMzlmYjM1Yzk5MDdkNzJhZjBlZDllYTMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTc6MDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8yN10gZWdsaWJjOiBJbnN0YWxsIFBJQyBhcmNoaXZlcworCitGb3J3YXJkIHBvcnQgZnJvbSBlZ2xpYmMKKworMjAwOC0wMi0wNyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBNYWtlcnVsZXMgKGluc3RhbGwtZXh0cmFzLCBpbnN0YWxsLW1hcCk6IE5ldyB2YXJpYWJsZXMuCisgICAgICAgIChpbnN0YWxsZWQtbGliY3MpOiBBZGQgbGliY19waWMuYS4KKyAgICAgICAgKGluc3RhbGwtbGliKTogSW5jbHVkZSBfcGljLmEgZmlsZXMgZm9yIHZlcnNpb25lZCBzaGFyZWQKKyAgICAgICAgbGlicmFyaWVzLgorICAgICAgICAoaW5zdGFsbC1tYXAtbm9zdWJkaXIsIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyKTogQWRkIHJ1bGVzIGZvcgorICAgICAgICBpbnN0YWxsaW5nIGV4dHJhIGZpbGVzLgorICAgICAgICAoaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXIpOiBEZXBlbmQgb24gaW5zdGFsbC1tYXAtbm9zdWJkaXIgYW5kCisgICAgICAgIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyLgorCisyMDA4LTA0LTAxICBNYXhpbSBLdXZ5cmtvdiAgPG1heGltQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBNYWtlcnVsZXMgKGluc3RhbGwtbGliKTogRG9uJ3QgaW5zdGFsbCBsaWJwdGhyZWFkX3BpYy5hLgorICAgICAgICAoaW5zdGFsbC1tYXApOiBEb24ndCBpbnN0YWxsIGxpYnB0aHJlYWRfcGljLm1hcC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlcnVsZXMgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VydWxlcyBiL01ha2VydWxlcworaW5kZXggMWRkNDFhYS4uNDE3NzhlMSAxMDA2NDQKKy0tLSBhL01ha2VydWxlcworKysrIGIvTWFrZXJ1bGVzCitAQCAtNzEzLDYgKzcxMyw5IEBAIGlmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisgJChjb21tb24tb2JqcGZ4KWxpYmMuc286ICQoY29tbW9uLW9ianBmeClsaWJjLm1hcAorIGVuZGlmCisgY29tbW9uLWdlbmVyYXRlZCArPSBsaWJjLnNvIGxpYmNfcGljLm9zCisraWZuZGVmIHN1YmRpcgorK2luc3RhbGwtZXh0cmFzIDo9IHNvaW5pdC5vIHNvZmluaS5vCisrZW5kaWYKKyBpZmRlZiBsaWJjLnNvLXZlcnNpb24KKyAkKGNvbW1vbi1vYmpwZngpbGliYy5zbyQobGliYy5zby12ZXJzaW9uKTogJChjb21tb24tb2JqcGZ4KWxpYmMuc28KKyAJJChtYWtlLWxpbmspCitAQCAtOTU1LDYgKzk1OCw3IEBAIGVuZGlmCisgCisgaW5zdGFsbDogY2hlY2staW5zdGFsbC1zdXBwb3J0ZWQKKyAKKytpbnN0YWxsZWQtbGliY3MgOj0gJChpbnN0YWxsZWQtbGliY3MpICQoaW5zdF9saWJkaXIpL2xpYmNfcGljLmEKKyBpbnN0YWxsOiAkKGluc3RhbGxlZC1saWJjcykKKyAkKGluc3RhbGxlZC1saWJjcyk6ICQoaW5zdF9saWJkaXIpL2xpYiQobGlicHJlZml4KSU6IGxpYiAkKCtmb3JjZSkKKyAJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCitAQCAtOTgzLDYgKzk4NywyMiBAQCB2ZXJzaW9uZWQgOj0gJChzdHJpcCAkKGZvcmVhY2ggc28sJChpbnN0YWxsLWxpYi5zbyksXAorIGluc3RhbGwtbGliLnNvLXZlcnNpb25lZCA6PSAkKGZpbHRlciAkKHZlcnNpb25lZCksICQoaW5zdGFsbC1saWIuc28pKQorIGluc3RhbGwtbGliLnNvLXVudmVyc2lvbmVkIDo9ICQoZmlsdGVyLW91dCAkKHZlcnNpb25lZCksICQoaW5zdGFsbC1saWIuc28pKQorIAorKyMgSW5zdGFsbCB0aGUgX3BpYy5hIGZpbGVzIGZvciB2ZXJzaW9uZWQgbGlicmFyaWVzLCBhbmQgY29ycmVzcG9uZGluZworKyMgLm1hcCBmaWxlcy4KKysjIGxpYnB0aHJlYWRfcGljLmEgYnJlYWtzIG1rbGlicywgc28gZG9uJ3QgaW5zdGFsbCBpdCBhbmQgaXRzIG1hcC4KKytpbnN0YWxsLWxpYiA6PSAkKGluc3RhbGwtbGliKSAkKGluc3RhbGwtbGliLnNvLXZlcnNpb25lZDolLnNvPSVfcGljLmEpCisraW5zdGFsbC1saWIgOj0gJChmaWx0ZXItb3V0IGxpYnB0aHJlYWRfcGljLmEsJChpbnN0YWxsLWxpYikpCisrIyBEZXNwaXRlIGhhdmluZyBhIHNvbmFtZSBsaWJodXJkdXNlciBhbmQgbGlibWFjaHVzZXIgZG8gbm90IHVzZSBzeW1ib2wKKysjIHZlcnNpb25pbmcsIHNvIGRvbid0IGluc3RhbGwgdGhlIGNvcnJlc3BvbmRpbmcgLm1hcCBmaWxlcy4KKytpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorK2luc3RhbGwtbWFwIDo9ICQocGF0c3Vic3QgJS5zbywlLm1hcCxcCisrCQkJJChmb3JlYWNoIEwsJChpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQpLCQobm90ZGlyICRMKSkpCisraW5zdGFsbC1tYXAgOj0gJChmaWx0ZXItb3V0IGxpYmh1cmR1c2VyLm1hcCBsaWJtYWNodXNlci5tYXAgbGlicHRocmVhZC5tYXAsJChpbnN0YWxsLW1hcCkpCisraWZuZGVmIHN1YmRpcgorK2luc3RhbGwtbWFwIDo9ICQoaW5zdGFsbC1tYXApIGxpYmMubWFwCisrZW5kaWYKKytlbmRpZgorKworICMgRm9yIHZlcnNpb25lZCBsaWJyYXJpZXMsIHdlIGluc3RhbGwgdGhyZWUgZmlsZXM6CisgIwkkKGluc3RfbGliZGlyKS9saWJmb28uc28JLS0gZm9yIGxpbmtpbmcsIHN5bWxpbmsgb3IgbGQgc2NyaXB0CisgIwkkKGluc3Rfc2xpYmRpcikvbGliZm9vLnNvLk5OCS0tIGZvciBsb2FkaW5nIGJ5IFNPTkFNRSwgc3ltbGluaworQEAgLTEyMjUsOSArMTI0NSwyMiBAQCAkKGFkZHByZWZpeCAkKGluc3RfaW5jbHVkZWRpcikvLCQoaGVhZGVycy1ub25oKSk6ICQoaW5zdF9pbmNsdWRlZGlyKS8lOiBcCisgZW5kaWYJIyBoZWFkZXJzLW5vbmgKKyBlbmRpZgkjIGhlYWRlcnMKKyAKKytpZmRlZiBpbnN0YWxsLW1hcAorKyQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpLywkKHBhdHN1YnN0IGxpYiUubWFwLGxpYiVfcGljLm1hcCwkKGluc3RhbGwtbWFwKSkpOiBcCisrICAkKGluc3RfbGliZGlyKS9saWIlX3BpYy5tYXA6ICQoY29tbW9uLW9ianBmeClsaWIlLm1hcCAkKCtmb3JjZSkKKysJJChkby1pbnN0YWxsKQorK2VuZGlmCisrCisraWZkZWYgaW5zdGFsbC1leHRyYXMKKyskKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS9saWJjX3BpYy8sJChpbnN0YWxsLWV4dHJhcykpOiBcCisrICAkKGluc3RfbGliZGlyKS9saWJjX3BpYy8lLm86ICQoZWxmLW9ianBmeCklLm9zICQoK2ZvcmNlKQorKwkkKGRvLWluc3RhbGwpCisrZW5kaWYKKysKKyAuUEhPTlk6IGluc3RhbGwtYmluLW5vc3ViZGlyIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpciBcCisgCWluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXIgaW5zdGFsbC1zYmluLW5vc3ViZGlyIGluc3RhbGwtbGliLW5vc3ViZGlyIFwKKy0JaW5zdGFsbC1kYXRhLW5vc3ViZGlyIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpcgorKwlpbnN0YWxsLWRhdGEtbm9zdWJkaXIgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyIGluc3RhbGwtbWFwLW5vc3ViZGlyIFwKKysJaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIKKyBpbnN0YWxsLWJpbi1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2JpbmRpcikvLCQoaW5zdGFsbC1iaW4pKQorIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2JpbmRpcikvLCQoaW5zdGFsbC1iaW4tc2NyaXB0KSkKKyBpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyOiBcCitAQCAtMTI0MCw2ICsxMjczLDEwIEBAIGluc3RhbGwtZGF0YS1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2RhdGFkaXIpLywkKGluc3RhbGwtZGF0YSkpCisgaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfaW5jbHVkZWRpcikvLCQoaGVhZGVycykpCisgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXI6ICQoaW5zdGFsbC1vdGhlcnMpCisgaW5zdGFsbC1vdGhlcnMtcHJvZ3JhbXMtbm9zdWJkaXI6ICQoaW5zdGFsbC1vdGhlcnMtcHJvZ3JhbXMpCisraW5zdGFsbC1tYXAtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9saWJkaXIpLyxcCisrCQkgICAgICAgJChwYXRzdWJzdCBsaWIlLm1hcCxsaWIlX3BpYy5tYXAsJChpbnN0YWxsLW1hcCkpKQorK2luc3RhbGwtZXh0cmFzLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS9saWJjX3BpYy8sXAorKwkJICAgICAgICQoaW5zdGFsbC1leHRyYXMpKQorIAorICMgV2UgbmVlZCBhbGwgdGhlIGAtbm9zdWJkaXInIHRhcmdldHMgc28gdGhhdCBgaW5zdGFsbCcgaW4gdGhlIHBhcmVudAorICMgZG9lc24ndCBkZXBlbmQgb24gc2V2ZXJhbCB0aGluZ3Mgd2hpY2ggZWFjaCBpdGVyYXRlIG92ZXIgdGhlIHN1YmRpcnMuCitAQCAtMTI0OSw3ICsxMjg2LDggQEAgaW5zdGFsbC0lOjogaW5zdGFsbC0lLW5vc3ViZGlyIDsKKyAKKyAuUEhPTlk6IGluc3RhbGwgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXIKKyBpbnN0YWxsLW5vLWxpYmMuYS1ub3N1YmRpcjogaW5zdGFsbC1oZWFkZXJzLW5vc3ViZGlyIGluc3RhbGwtZGF0YS1ub3N1YmRpciBcCistCQkJICAgIGluc3RhbGwtbGliLW5vc3ViZGlyIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyCisrCQkJICAgIGluc3RhbGwtbGliLW5vc3ViZGlyIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyIFwKKysJCQkgICAgaW5zdGFsbC1tYXAtbm9zdWJkaXIgaW5zdGFsbC1leHRyYXMtbm9zdWJkaXIKKyBpZmVxICgkKGJ1aWxkLXByb2dyYW1zKSx5ZXMpCisgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXI6IGluc3RhbGwtYmluLW5vc3ViZGlyIGluc3RhbGwtYmluLXNjcmlwdC1ub3N1YmRpciBcCisgCQkJICAgIGluc3RhbGwtcm9vdHNiaW4tbm9zdWJkaXIgaW5zdGFsbC1zYmluLW5vc3ViZGlyIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjExZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI2LWVnbGliYy1kbF9kZWJ1Z19tYXNrLWlzLWNvbnRyb2xsZWQtYnktX19PUFRJT05fRUdMSUIucGF0Y2gKQEAgLTAsMCArMSw1NTYgQEAKK0Zyb20gYmEwNjliMzEwN2Y1YWQyMDBjNGFiOTVlNjljZjM2OGUyMzUzYjAwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQ2OjUwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMjddIGVnbGliYzogZGxfZGVidWdfbWFzayBpcyBjb250cm9sbGVkIGJ5CisgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKwordXNlIEdMUk9fZGxfZGVidWdfbWFzaworCitTaW5nZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNzdS9saWJjLXN0YXJ0LmMgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWNhY2hlLmMgICAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtY2xvc2UuYyAgICAgICAgIHwgIDYgKysrLS0tCisgZWxmL2RsLWNvbmZsaWN0LmMgICAgICB8ICAyICstCisgZWxmL2RsLWRlcHMuYyAgICAgICAgICB8ICA2ICsrKy0tLQorIGVsZi9kbC1lcnJvci5jICAgICAgICAgfCAgMiArLQorIGVsZi9kbC1maW5pLmMgICAgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWluaXQuYyAgICAgICAgICB8ICA0ICsrLS0KKyBlbGYvZGwtbG9hZC5jICAgICAgICAgIHwgMTYgKysrKysrKystLS0tLS0tLQorIGVsZi9kbC1sb29rdXAuYyAgICAgICAgfCAxNCArKysrKysrLS0tLS0tLQorIGVsZi9kbC1vYmplY3QuYyAgICAgICAgfCAgMiArLQorIGVsZi9kbC1vcGVuLmMgICAgICAgICAgfCAxMCArKysrKy0tLS0tCisgZWxmL2RsLXJlbG9jLmMgICAgICAgICB8ICAyICstCisgZWxmL2RsLXZlcnNpb24uYyAgICAgICB8ICAyICstCisgZWxmL2dldC1keW5hbWljLWluZm8uaCB8ICAyICstCisgZWxmL3J0bGQuYyAgICAgICAgICAgICB8IDIyICsrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxNiBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NzdS9saWJjLXN0YXJ0LmMgYi9jc3UvbGliYy1zdGFydC5jCitpbmRleCAwYWZhN2MwLi4yMTUxZmI2IDEwMDY0NAorLS0tIGEvY3N1L2xpYmMtc3RhcnQuYworKysrIGIvY3N1L2xpYmMtc3RhcnQuYworQEAgLTIzOCw3ICsyMzgsNyBAQCBMSUJDX1NUQVJUX01BSU4gKGludCAoKm1haW4pIChpbnQsIGNoYXIgKiosIGNoYXIgKiogTUFJTl9BVVhWRUNfREVDTCksCisgCisgICAvKiBDYWxsIHRoZSBpbml0aWFsaXplciBvZiB0aGUgcHJvZ3JhbSwgaWYgYW55LiAgKi8KKyAjaWZkZWYgU0hBUkVECistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTLCAwKSkKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUywgMCkpCisgICAgIEdMUk8oZGxfZGVidWdfcHJpbnRmKSAoIlxuaW5pdGlhbGl6ZSBwcm9ncmFtOiAlc1xuXG4iLCBhcmd2WzBdKTsKKyAjZW5kaWYKKyAgIGlmIChpbml0KQorQEAgLTI2MSw3ICsyNjEsNyBAQCBMSUJDX1NUQVJUX01BSU4gKGludCAoKm1haW4pIChpbnQsIGNoYXIgKiosIGNoYXIgKiogTUFJTl9BVVhWRUNfREVDTCksCisgI2VuZGlmCisgCisgI2lmZGVmIFNIQVJFRAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMpKQorICAgICBHTFJPKGRsX2RlYnVnX3ByaW50ZikgKCJcbnRyYW5zZmVycmluZyBjb250cm9sOiAlc1xuXG4iLCBhcmd2WzBdKTsKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtY2FjaGUuYyBiL2VsZi9kbC1jYWNoZS5jCitpbmRleCA4NjJmMWQ4Li5kYWI5YzUxIDEwMDY0NAorLS0tIGEvZWxmL2RsLWNhY2hlLmMKKysrKyBiL2VsZi9kbC1jYWNoZS5jCitAQCAtMTk0LDcgKzE5NCw3IEBAIF9kbF9sb2FkX2NhY2hlX2xvb2t1cCAoY29uc3QgY2hhciAqbmFtZSkKKyAgIGNvbnN0IGNoYXIgKmJlc3Q7CisgCisgICAvKiBQcmludCBhIG1lc3NhZ2UgaWYgdGhlIGxvYWRpbmcgb2YgbGlicyBpcyB0cmFjZWQuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiBzZWFyY2ggY2FjaGU9JXNcbiIsIExEX1NPX0NBQ0hFKTsKKyAKKyAgIGlmIChjYWNoZSA9PSBOVUxMKQorQEAgLTI5Miw3ICsyOTIsNyBAQCBfZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgIH0KKyAKKyAgIC8qIFByaW50IG91ciByZXN1bHQgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUywgMCkKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLCAwKQorICAgICAgICYmIGJlc3QgIT0gTlVMTCkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJlc3QpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1jbG9zZS5jIGIvZWxmL2RsLWNsb3NlLmMKK2luZGV4IGM4OTcyNDcuLmIxYjRiZDUgMTAwNjQ0CistLS0gYS9lbGYvZGwtY2xvc2UuYworKysrIGIvZWxmL2RsLWNsb3NlLmMKK0BAIC0xMjUsNyArMTI1LDcgQEAgX2RsX2Nsb3NlX3dvcmtlciAoc3RydWN0IGxpbmtfbWFwICptYXAsIGJvb2wgZm9yY2UpCisgCWRsX2Nsb3NlX3N0YXRlID0gcmVydW47CisgCisgICAgICAgLyogVGhlcmUgYXJlIHN0aWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QuICBEbyBub3RoaW5nIG1vcmUuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbmNsb3NpbmcgZmlsZT0lczsgZGlyZWN0X29wZW5jb3VudD0ldVxuIiwKKyAJCQkgIG1hcC0+bF9uYW1lLCBtYXAtPmxfZGlyZWN0X29wZW5jb3VudCk7CisgCitAQCAtMjY5LDcgKzI2OSw3IEBAIF9kbF9jbG9zZV93b3JrZXIgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBib29sIGZvcmNlKQorIAkgIGlmIChpbWFwLT5sX2luaXRfY2FsbGVkKQorIAkgICAgeworIAkgICAgICAvKiBXaGVuIGRlYnVnZ2luZyBwcmludCBhIG1lc3NhZ2UgZmlyc3QuICAqLworLQkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTLAorKwkgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMsCisgCQkJCSAgICAwKSkKKyAJCV9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgZmluaTogJXMgWyVsdV1cblxuIiwKKyAJCQkJICBpbWFwLT5sX25hbWUsIG5zaWQpOworQEAgLTcxMSw3ICs3MTEsNyBAQCBfZGxfY2xvc2Vfd29ya2VyIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgYm9vbCBmb3JjZSkKKyAJICBmcmVlIChpbWFwLT5sX3JlbGRlcHMpOworIAorIAkgIC8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlLiAgKi8KKy0JICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysJICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuZmlsZT0lcyBbJWx1XTsgIGRlc3Ryb3lpbmcgbGluayBtYXBcbiIsCisgCQkJICAgICAgaW1hcC0+bF9uYW1lLCBpbWFwLT5sX25zKTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtY29uZmxpY3QuYyBiL2VsZi9kbC1jb25mbGljdC5jCitpbmRleCA0N2E5NDZlLi5lNmEzZjIxIDEwMDY0NAorLS0tIGEvZWxmL2RsLWNvbmZsaWN0LmMKKysrKyBiL2VsZi9kbC1jb25mbGljdC5jCitAQCAtMzIsNyArMzIsNyBAQCBfZGxfcmVzb2x2ZV9jb25mbGljdHMgKHN0cnVjdCBsaW5rX21hcCAqbCwgRWxmVyhSZWxhKSAqY29uZmxpY3QsCisgCQkgICAgICAgRWxmVyhSZWxhKSAqY29uZmxpY3RlbmQpCisgeworICNpZiAhIEVMRl9NQUNISU5FX05PX1JFTEEKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUkVMT0MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1JFTE9DKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuY29uZmxpY3QgcHJvY2Vzc2luZzogJXNcbiIsIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSk7CisgCisgICB7CitkaWZmIC0tZ2l0IGEvZWxmL2RsLWRlcHMuYyBiL2VsZi9kbC1kZXBzLmMKK2luZGV4IGVlZTE0NmEuLjFhNGIwMDQgMTAwNjQ0CistLS0gYS9lbGYvZGwtZGVwcy5jCisrKysgYi9lbGYvZGwtZGVwcy5jCitAQCAtMTI3LDcgKzEyNyw3IEBAIGVtcHR5IGR5bmFtaWMgc3RyaW5nIHRva2VuIHN1YnN0aXR1dGlvbiIpKTsJCQkJICAgICAgXAorIAkgICAgZWxzZQkJCQkJCQkgICAgICBcCisgCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKyAJCS8qIFRoaXMgaXMgZm9yIERUX0FVWElMSUFSWS4gICovCQkJICAgICAgXAorLQkJaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkgICBcCisrCQlpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpICAgXAorIAkJICBfZGxfZGVidWdfcHJpbnRmIChOXygiXAorIGNhbm5vdCBsb2FkIGF1eGlsaWFyeSBgJXMnIGJlY2F1c2Ugb2YgZW1wdHkgZHluYW1pYyBzdHJpbmcgdG9rZW4gIgkgICAgICBcCisgCQkJCQkgICAgInN1YnN0aXR1dGlvblxuIiksIF9fc3RyKTsJICAgICAgXAorQEAgLTMwMyw3ICszMDMsNyBAQCBfZGxfbWFwX29iamVjdF9kZXBzIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwKKyAJCWFyZ3MubmFtZSA9IG5hbWU7CisgCisgCQkvKiBTYXkgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gbG9hZCBhbiBhdXhpbGlhcnkgbGlicmFyeS4gICovCistCQlpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMsCisrCQlpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywKKyAJCQkJICAgICAgMCkpCisgCQkgIF9kbF9kZWJ1Z19wcmludGYgKCJsb2FkIGF1eGlsaWFyeSBvYmplY3Q9JXMiCisgCQkJCSAgICAiIHJlcXVlc3RlZCBieSBmaWxlPSVzXG4iLAorQEAgLTUyMCw3ICs1MjAsNyBAQCBfZGxfbWFwX29iamVjdF9kZXBzIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwKKyAgICAgICBydW5wLT5tYXAtPmxfcmVzZXJ2ZWQgPSAwOworICAgICB9CisgCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkssIDApICE9IDAKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LLCAwKSAhPSAwCisgICAgICAgJiYgbWFwID09IEdMKGRsX25zKVtMTV9JRF9CQVNFXS5fbnNfbG9hZGVkKQorICAgICB7CisgICAgICAgLyogSWYgd2UgYXJlIHRvIGNvbXB1dGUgY29uZmxpY3RzLCB3ZSBoYXZlIHRvIGJ1aWxkIGxvY2FsIHNjb3BlCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWVycm9yLmMgYi9lbGYvZGwtZXJyb3IuYworaW5kZXggMGZjM2ZkOC4uZWE4MmY0ZCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1lcnJvci5jCisrKysgYi9lbGYvZGwtZXJyb3IuYworQEAgLTEzOSw3ICsxMzksNyBAQCBpbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9zaWduYWxfY2Vycm9yIChpbnQgZXJyY29kZSwgY29uc3QgY2hhciAqb2JqbmFtZSwgY29uc3QgY2hhciAqb2NjYXRpb24sCisgCQkgICBjb25zdCBjaGFyICplcnJzdHJpbmcpCisgeworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sKKyAJCQkmIH4oRExfREVCVUdfU1RBVElTVElDU3xETF9ERUJVR19QUkVMSU5LKSwgMCkpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCIlczogZXJyb3I6ICVzOiAlcyAoJXMpXG4iLCBvYmpuYW1lLCBvY2NhdGlvbiwKKyAJCSAgICAgIGVycnN0cmluZywgcmVjZWl2ZXIgPyAiY29udGludWVkIiA6ICJmYXRhbCIpOworZGlmZiAtLWdpdCBhL2VsZi9kbC1maW5pLmMgYi9lbGYvZGwtZmluaS5jCitpbmRleCA2Y2ZlNjUxLi5mNTlmN2ZlIDEwMDY0NAorLS0tIGEvZWxmL2RsLWZpbmkuYworKysrIGIvZWxmL2RsLWZpbmkuYworQEAgLTIzNCw3ICsyMzQsNyBAQCBfZGxfZmluaSAodm9pZCkKKyAJCSAgfHwgbC0+bF9pbmZvW0RUX0ZJTkldICE9IE5VTEwpCisgCQl7CisgCQkgIC8qIFdoZW4gZGVidWdnaW5nIHByaW50IGEgbWVzc2FnZSBmaXJzdC4gICovCistCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spCisrCQkgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sKKyAJCQkJCSYgRExfREVCVUdfSU1QQ0FMTFMsIDApKQorIAkJICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgZmluaTogJXMgWyVsdV1cblxuIiwKKyAJCQkJICAgICAgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpLAorQEAgLTI4Niw3ICsyODYsNyBAQCBfZGxfZmluaSAodm9pZCkKKyAgICAgICBnb3RvIGFnYWluOworICAgICB9CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5ydW50aW1lIGxpbmtlciBzdGF0aXN0aWNzOlxuIgorIAkJICAgICAgIiAgICAgICAgICAgZmluYWwgbnVtYmVyIG9mIHJlbG9jYXRpb25zOiAlbHVcbiIKKyAJCSAgICAgICJmaW5hbCBudW1iZXIgb2YgcmVsb2NhdGlvbnMgZnJvbSBjYWNoZTogJWx1XG4iLAorZGlmZiAtLWdpdCBhL2VsZi9kbC1pbml0LmMgYi9lbGYvZGwtaW5pdC5jCitpbmRleCAyZjg1NzMxLi5lNDZlOGI2IDEwMDY0NAorLS0tIGEvZWxmL2RsLWluaXQuYworKysrIGIvZWxmL2RsLWluaXQuYworQEAgLTQ2LDcgKzQ2LDcgQEAgY2FsbF9pbml0IChzdHJ1Y3QgbGlua19tYXAgKmwsIGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudikKKyAgICAgcmV0dXJuOworIAorICAgLyogUHJpbnQgYSBkZWJ1ZyBtZXNzYWdlIGlmIHdhbnRlZC4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0lNUENBTExTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgaW5pdDogJXNcblxuIiwKKyAJCSAgICAgIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSk7CisgCitAQCAtOTYsNyArOTYsNyBAQCBfZGxfaW5pdCAoc3RydWN0IGxpbmtfbWFwICptYWluX21hcCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52KQorICAgICAgIEVsZlcoQWRkcikgKmFkZHJzOworICAgICAgIHVuc2lnbmVkIGludCBjbnQ7CisgCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuY2FsbGluZyBwcmVpbml0OiAlc1xuXG4iLAorIAkJCSAgRFNPX0ZJTEVOQU1FIChtYWluX21hcC0+bF9uYW1lKSk7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IGY2NjRmNTAuLjhjMjg3NDQgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtOTQzLDcgKzk0Myw3IEBAIF9kbF9tYXBfb2JqZWN0X2Zyb21fZmQgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCwgc3RydWN0IGZpbGVidWYgKmZicCwKKyAgICAgfQorIAorICAgLyogUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2UuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiZmlsZT0lcyBbJWx1XTsgIGdlbmVyYXRpbmcgbGluayBtYXBcbiIsIG5hbWUsIG5zaWQpOworIAorICAgLyogVGhpcyBpcyB0aGUgRUxGIGhlYWRlci4gIFdlIHJlYWQgaXQgaW4gYG9wZW5fdmVyaWZ5Jy4gICovCitAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAgY2Fubm90IGVuYWJsZSBleGVjdXRhYmxlIHN0YWNrIGFzIHNoYXJlZCBvYmplY3QgcmVxdWlyZXMiKTsKKyAKKyAgIGwtPmxfZW50cnkgKz0gbC0+bF9hZGRyOworIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXAorICAgZHluYW1pYzogMHglMCpseCAgYmFzZTogMHglMCpseCAgIHNpemU6IDB4JTAqWnhcblwKKyAgICAgZW50cnk6IDB4JTAqbHggIHBoZHI6IDB4JTAqbHggIHBobnVtOiAgICUqdVxuXG4iLAorQEAgLTE3ODksNyArMTc4OSw3IEBAIG9wZW5fcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBtb2RlLAorIAorICAgICAgIC8qIElmIHdlIGFyZSBkZWJ1Z2dpbmcgdGhlIHNlYXJjaCBmb3IgbGlicmFyaWVzIHByaW50IHRoZSBwYXRoCisgCSBub3cgaWYgaXQgaGFzbid0IGhhcHBlbmVkIG5vdy4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKQorIAkgICYmIGN1cnJlbnRfd2hhdCAhPSB0aGlzX2Rpci0+d2hhdCkKKyAJeworIAkgIGN1cnJlbnRfd2hhdCA9IHRoaXNfZGlyLT53aGF0OworQEAgLTE4MTAsNyArMTgxMCw3IEBAIG9wZW5fcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBtb2RlLAorIAkgICAgIC0gYnVmKTsKKyAKKyAJICAvKiBQcmludCBuYW1lIHdlIHRyeSBpZiB0aGlzIGlzIHdhbnRlZC4gICovCistCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysJICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCSAgICBfZGxfZGVidWdfcHJpbnRmICgiICB0cnlpbmcgZmlsZT0lc1xuIiwgYnVmKTsKKyAKKyAJICBmZCA9IG9wZW5fdmVyaWZ5IChidWYsIGZicCwgbG9hZGVyLCB3aGF0Y29kZSwgbW9kZSwKK0BAIC0xOTU1LDcgKzE5NTUsNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgIH0KKyAKKyAgIC8qIERpc3BsYXkgaW5mb3JtYXRpb24gaWYgd2UgYXJlIGRlYnVnZ2luZy4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKQorICAgICAgICYmIGxvYWRlciAhPSBOVUxMKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgobW9kZSAmIF9fUlRMRF9DQUxMTUFQKSA9PSAwCisgCQkgICAgICA/ICJcbmZpbGU9JXMgWyVsdV07ICBuZWVkZWQgYnkgJXMgWyVsdV1cbiIKK0BAIC0xOTk3LDcgKzE5OTcsNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCisgICAgICAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKKyAKKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoImZpbmQgbGlicmFyeT0lcyBbJWx1XTsgc2VhcmNoaW5nXG4iLCBuYW1lLCBuc2lkKTsKKyAKKyAgICAgICBmZCA9IC0xOworQEAgLTIxMTksNyArMjExOSw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAjZW5kaWYKKyAKKyAgICAgICAvKiBBZGQgYW5vdGhlciBuZXdsaW5lIHdoZW4gd2UgYXJlIHRyYWNpbmcgdGhlIGxpYnJhcnkgbG9hZGluZy4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbiIpOworICAgICB9CisgICBlbHNlCitAQCAtMjE1Miw3ICsyMTUyLDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGZkID09IC0xKSkKKyAgICAgeworICAgICAgIGlmICh0cmFjZV9tb2RlCistCSAgJiYgX19nbGliY19saWtlbHkgKChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSykgPT0gMCkpCisrCSAgJiYgX19nbGliY19saWtlbHkgKChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKSA9PSAwKSkKKyAJeworIAkgIC8qIFdlIGhhdmVuJ3QgZm91bmQgYW4gYXBwcm9wcmlhdGUgbGlicmFyeS4gIEJ1dCBzaW5jZSB3ZQorIAkgICAgIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHRoaXMgaXNuJ3QKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9va3VwLmMgYi9lbGYvZGwtbG9va3VwLmMKK2luZGV4IDExY2I0NGIuLjU4OGMzZTQgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9va3VwLmMKKysrKyBiL2VsZi9kbC1sb29rdXAuYworQEAgLTMwMiw3ICszMDIsNyBAQCBkb19sb29rdXBfdW5pcXVlIChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCB1aW50X2Zhc3QzMl90IG5ld19oYXNoLAorIAkgaGFzaCB0YWJsZS4gICovCisgICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKHRhYi0+c2l6ZSkpCisgCXsKKy0JICBhc3NlcnQgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKTsKKysJICBhc3NlcnQgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspOworIAkgIGdvdG8gc3VjY2VzczsKKyAJfQorICNlbmRpZgorQEAgLTM3OCw3ICszNzgsNyBAQCBkb19sb29rdXBfeCAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgdWludF9mYXN0MzJfdCBuZXdfaGFzaCwKKyAJY29udGludWU7CisgCisgICAgICAgLyogUHJpbnQgc29tZSBkZWJ1Z2dpbmcgaW5mbyBpZiB3YW50ZWQuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU1lNQk9MUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NZTUJPTFMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgic3ltYm9sPSVzOyAgbG9va3VwIGluIGZpbGU9JXMgWyVsdV1cbiIsCisgCQkJICB1bmRlZl9uYW1lLCBEU09fRklMRU5BTUUgKG1hcC0+bF9uYW1lKSwKKyAJCQkgIG1hcC0+bF9ucyk7CitAQCAtNzU1LDcgKzc1NSw3IEBAIGFkZF9kZXBlbmRlbmN5IChzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwgc3RydWN0IGxpbmtfbWFwICptYXAsIGludCBmbGFncykKKyAJfQorIAorICAgICAgIC8qIERpc3BsYXkgaW5mb3JtYXRpb24gaWYgd2UgYXJlIGRlYnVnZ2luZy4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlwKKyBcbmZpbGU9JXMgWyVsdV07ICBuZWVkZWQgYnkgJXMgWyVsdV0gKHJlbG9jYXRpb24gZGVwZW5kZW5jeSlcblxuIiwKKyAJCQkgIERTT19GSUxFTkFNRSAobWFwLT5sX25hbWUpLAorQEAgLTg1OSw3ICs4NTksNyBAQCBfZGxfbG9va3VwX3N5bWJvbF94IChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyAgICAgeworICAgICAgIGlmICgoKnJlZiA9PSBOVUxMIHx8IEVMRlcoU1RfQklORCkgKCgqcmVmKS0+c3RfaW5mbykgIT0gU1RCX1dFQUspCisgCSAgJiYgc2tpcF9tYXAgPT0gTlVMTAorLQkgICYmICEoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkpCisrCSAgJiYgIShHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpKQorIAl7CisgCSAgLyogV2UgY291bGQgZmluZCBubyB2YWx1ZSBmb3IgYSBzdHJvbmcgcmVmZXJlbmNlLiAgKi8KKyAJICBjb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IHVuZGVmX21hcCA/IHVuZGVmX21hcC0+bF9uYW1lIDogIiI7CitAQCAtOTM1LDcgKzkzNSw3IEBAIF9kbF9sb29rdXBfc3ltYm9sX3ggKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGN1cnJlbnRfdmFsdWUubS0+bF91c2VkID09IDApKQorICAgICBjdXJyZW50X3ZhbHVlLm0tPmxfdXNlZCA9IDE7CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzaworIAkJCSYgKERMX0RFQlVHX0JJTkRJTkdTfERMX0RFQlVHX1BSRUxJTkspKSkKKyAgICAgX2RsX2RlYnVnX2JpbmRpbmdzICh1bmRlZl9uYW1lLCB1bmRlZl9tYXAsIHJlZiwKKyAJCQkmY3VycmVudF92YWx1ZSwgdmVyc2lvbiwgdHlwZV9jbGFzcywgcHJvdGVjdGVkKTsKK0BAIC0xMDAwLDcgKzEwMDAsNyBAQCBfZGxfZGVidWdfYmluZGluZ3MgKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorIHsKKyAgIGNvbnN0IGNoYXIgKnJlZmVyZW5jZV9uYW1lID0gdW5kZWZfbWFwLT5sX25hbWU7CisgCistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0JJTkRJTkdTKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0JJTkRJTkdTKQorICAgICB7CisgICAgICAgX2RsX2RlYnVnX3ByaW50ZiAoImJpbmRpbmcgZmlsZSAlcyBbJWx1XSB0byAlcyBbJWx1XTogJXMgc3ltYm9sIGAlcyciLAorIAkJCURTT19GSUxFTkFNRSAocmVmZXJlbmNlX25hbWUpLAorQEAgLTEwMTQsNyArMTAxNCw3IEBAIF9kbF9kZWJ1Z19iaW5kaW5ncyAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgCV9kbF9kZWJ1Z19wcmludGZfYyAoIlxuIik7CisgICAgIH0KKyAjaWZkZWYgU0hBUkVECistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspCisrICBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykKKyAgICAgeworICAgICAgIGludCBjb25mbGljdCA9IDA7CisgICAgICAgc3RydWN0IHN5bV92YWwgdmFsID0geyBOVUxMLCBOVUxMIH07CitkaWZmIC0tZ2l0IGEvZWxmL2RsLW9iamVjdC5jIGIvZWxmL2RsLW9iamVjdC5jCitpbmRleCAxZDU4YmJjLi45MzhhMjU3IDEwMDY0NAorLS0tIGEvZWxmL2RsLW9iamVjdC5jCisrKysgYi9lbGYvZGwtb2JqZWN0LmMKK0BAIC05OCw3ICs5OCw3IEBAIF9kbF9uZXdfb2JqZWN0IChjaGFyICpyZWFsbmFtZSwgY29uc3QgY2hhciAqbGlibmFtZSwgaW50IHR5cGUsCisgICBuZXctPmxfdHlwZSA9IHR5cGU7CisgICAvKiBJZiB3ZSBzZXQgdGhlIGJpdCBub3cgc2luY2Ugd2Uga25vdyBpdCBpcyBuZXZlciB1c2VkIHdlIGF2b2lkCisgICAgICBkaXJ0eWluZyB0aGUgY2FjaGUgbGluZSBsYXRlci4gICovCistICBpZiAoKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpID09IDApCisrICBpZiAoKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkgPT0gMCkKKyAgICAgbmV3LT5sX3VzZWQgPSAxOworICAgbmV3LT5sX2xvYWRlciA9IGxvYWRlcjsKKyAjaWYgTk9fVExTX09GRlNFVCAhPSAwCitkaWZmIC0tZ2l0IGEvZWxmL2RsLW9wZW4uYyBiL2VsZi9kbC1vcGVuLmMKK2luZGV4IDJkYjFjMDIuLjEyODg2MDQgMTAwNjQ0CistLS0gYS9lbGYvZGwtb3Blbi5jCisrKysgYi9lbGYvZGwtb3Blbi5jCitAQCAtMTQ3LDcgKzE0Nyw3IEBAIGFkZF90b19nbG9iYWwgKHN0cnVjdCBsaW5rX21hcCAqbmV3KQorIAkgIG5zLT5fbnNfbWFpbl9zZWFyY2hsaXN0LT5yX2xpc3RbbmV3X25saXN0KytdID0gbWFwOworIAorIAkgIC8qIFdlIG1vZGlmeSB0aGUgZ2xvYmFsIHNjb3BlLiAgUmVwb3J0IHRoaXMuICAqLworLQkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysJICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAJICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmFkZCAlcyBbJWx1XSB0byBnbG9iYWwgc2NvcGVcbiIsCisgCQkJICAgICAgbWFwLT5sX25hbWUsIG1hcC0+bF9ucyk7CisgCX0KK0BAIC0yNTEsNyArMjUxLDcgQEAgZGxfb3Blbl93b3JrZXIgKHZvaWQgKmEpCisgICBpZiAoX19nbGliY191bmxpa2VseSAobmV3LT5sX3NlYXJjaGxpc3Qucl9saXN0ICE9IE5VTEwpKQorICAgICB7CisgICAgICAgLyogTGV0IHRoZSB1c2VyIGtub3cgYWJvdXQgdGhlIG9wZW5jb3VudC4gICovCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIm9wZW5pbmcgZmlsZT0lcyBbJWx1XTsgZGlyZWN0X29wZW5jb3VudD0ldVxuXG4iLAorIAkJCSAgbmV3LT5sX25hbWUsIG5ldy0+bF9ucywgbmV3LT5sX2RpcmVjdF9vcGVuY291bnQpOworIAorQEAgLTMwMiw3ICszMDIsNyBAQCBkbF9vcGVuX3dvcmtlciAodm9pZCAqYSkKKyAgIExJQkNfUFJPQkUgKG1hcF9jb21wbGV0ZSwgMywgYXJncy0+bnNpZCwgciwgbmV3KTsKKyAKKyAgIC8qIFByaW50IHNjb3BlIGluZm9ybWF0aW9uLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorICAgICBfZGxfc2hvd19zY29wZSAobmV3LCAwKTsKKyAKKyAgIC8qIE9ubHkgZG8gbGF6eSByZWxvY2F0aW9uIGlmIGBMRF9CSU5EX05PVycgaXMgbm90IHNldC4gICovCitAQCAtNTE5LDcgKzUxOSw3IEBAIGRsX29wZW5fd29ya2VyICh2b2lkICphKQorIAl9CisgCisgICAgICAgLyogUHJpbnQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAJX2RsX3Nob3dfc2NvcGUgKGltYXAsIGZyb21fc2NvcGUpOworICAgICB9CisgCitAQCAtNTc3LDcgKzU3Nyw3IEBAIFRMUyBnZW5lcmF0aW9uIGNvdW50ZXIgd3JhcHBlZCEgIFBsZWFzZSByZXBvcnQgdGhpcy4iKSk7CisgI2VuZGlmCisgCisgICAvKiBMZXQgdGhlIHVzZXIga25vdyBhYm91dCB0aGUgb3BlbmNvdW50LiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIm9wZW5pbmcgZmlsZT0lcyBbJWx1XTsgZGlyZWN0X29wZW5jb3VudD0ldVxuXG4iLAorIAkJICAgICAgbmV3LT5sX25hbWUsIG5ldy0+bF9ucywgbmV3LT5sX2RpcmVjdF9vcGVuY291bnQpOworIH0KK2RpZmYgLS1naXQgYS9lbGYvZGwtcmVsb2MuYyBiL2VsZi9kbC1yZWxvYy5jCitpbmRleCA2MTI1MmQ3Li40YzgzODE1IDEwMDY0NAorLS0tIGEvZWxmL2RsLXJlbG9jLmMKKysrKyBiL2VsZi9kbC1yZWxvYy5jCitAQCAtMTc4LDcgKzE3OCw3IEBAIF9kbF9yZWxvY2F0ZV9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbCwgc3RydWN0IHJfc2NvcGVfZWxlbSAqc2NvcGVbXSwKKyAgICAgICAmJiBfX2J1aWx0aW5fZXhwZWN0IChsLT5sX2luZm9bRFRfQklORF9OT1ddICE9IE5VTEwsIDApKQorICAgICBsYXp5ID0gMDsKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUkVMT0MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1JFTE9DKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxucmVsb2NhdGlvbiBwcm9jZXNzaW5nOiAlcyVzXG4iLAorIAkJICAgICAgRFNPX0ZJTEVOQU1FIChsLT5sX25hbWUpLCBsYXp5ID8gIiAobGF6eSkiIDogIiIpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC12ZXJzaW9uLmMgYi9lbGYvZGwtdmVyc2lvbi5jCitpbmRleCBmNmU1Y2Q5Li4zMjA2MjhjIDEwMDY0NAorLS0tIGEvZWxmL2RsLXZlcnNpb24uYworKysrIGIvZWxmL2RsLXZlcnNpb24uYworQEAgLTgyLDcgKzgyLDcgQEAgbWF0Y2hfc3ltYm9sIChjb25zdCBjaGFyICpuYW1lLCBMbWlkX3QgbnMsIEVsZlcoV29yZCkgaGFzaCwgY29uc3QgY2hhciAqc3RyaW5nLAorICAgaW50IHJlc3VsdCA9IDA7CisgCisgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHdoYXQgd2UgYXJlIGRvaW5nIHdoaWxlIGRlYnVnZ2luZy4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1ZFUlNJT05TKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19WRVJTSU9OUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcCisgY2hlY2tpbmcgZm9yIHZlcnNpb24gYCVzJyBpbiBmaWxlICVzIFslbHVdIHJlcXVpcmVkIGJ5IGZpbGUgJXMgWyVsdV1cbiIsCisgCQkgICAgICBzdHJpbmcsIERTT19GSUxFTkFNRSAobWFwLT5sX25hbWUpLAorZGlmZiAtLWdpdCBhL2VsZi9nZXQtZHluYW1pYy1pbmZvLmggYi9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oCitpbmRleCBkYzgzNTlkLi43Nzc0ZmRhIDEwMDY0NAorLS0tIGEvZWxmL2dldC1keW5hbWljLWluZm8uaAorKysrIGIvZWxmL2dldC1keW5hbWljLWluZm8uaAorQEAgLTE2Niw3ICsxNjYsNyBAQCBlbGZfZ2V0X2R5bmFtaWNfaW5mbyAoc3RydWN0IGxpbmtfbWFwICpsLCBFbGZXKER5bikgKnRlbXApCisgCSB0aGVtLiBUaGVyZWZvcmUgdG8gYXZvaWQgYnJlYWtpbmcgZXhpc3RpbmcgYXBwbGljYXRpb25zIHRoZQorIAkgYmVzdCB3ZSBjYW4gZG8gaXMgYWRkIGEgd2FybmluZyBkdXJpbmcgZGVidWdnaW5nIHdpdGggdGhlCisgCSBpbnRlbnQgb2Ygbm90aWZ5aW5nIHRoZSB1c2VyIG9mIHRoZSBwcm9ibGVtLiAgKi8KKy0gICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTLCAwKQorKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUywgMCkKKyAJICAmJiBsLT5sX2ZsYWdzXzEgJiB+RFRfMV9TVVBQT1JURURfTUFTSykKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxuV0FSTklORzogVW5zdXBwb3J0ZWQgZmxhZyB2YWx1ZShzKSBvZiAweCV4IGluIERUX0ZMQUdTXzEuXG4iLAorIAkJCSAgbC0+bF9mbGFnc18xICYgfkRUXzFfU1VQUE9SVEVEX01BU0spOworZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCitpbmRleCBmYzNhMmRiLi41OWM0NjM3IDEwMDY0NAorLS0tIGEvZWxmL3J0bGQuYworKysrIGIvZWxmL3J0bGQuYworQEAgLTMyMyw3ICszMjMsNyBAQCBfZGxfc3RhcnRfZmluYWwgKHZvaWQgKmFyZywgc3RydWN0IGRsX3N0YXJ0X2ZpbmFsX2luZm8gKmluZm8pCisgICAgIH0KKyAjZW5kaWYKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU1RBVElTVElDUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU1RBVElTVElDUykpCisgICAgIHsKKyAjaWZuZGVmIEhQX1RJTUlOR19OT05BVkFJTAorICAgICAgIHByaW50X3N0YXRpc3RpY3MgKCZydGxkX3RvdGFsX3RpbWUpOworQEAgLTE3MDEsNyArMTcwMSw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAJIGFmdGVyIHJlbG9jYXRpb24uICAqLworICAgICAgIHN0cnVjdCBsaW5rX21hcCAqbDsKKyAKKy0gICAgICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspCisrICAgICAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspCisgCXsKKyAJICBzdHJ1Y3Qgcl9zY29wZV9lbGVtICpzY29wZSA9ICZtYWluX21hcC0+bF9zZWFyY2hsaXN0OworIAorQEAgLTE3MzEsNyArMTczMSw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAJCV9kbF9wcmludGYgKCJcbiIpOworIAkgICAgfQorIAl9CistICAgICAgZWxzZSBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkKKysgICAgICBlbHNlIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpCisgCXsKKyAJICAvKiBMb29rIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbWFpbiBleGVjdXRhYmxlCisgCSAgICAgYW5kIGRldGVybWluZSB3aGljaCBvZiB0aGVtIGlzIG5vdCBhY3R1YWxseQorQEAgLTE4MzksNyArMTgzOSw3IEBAIEVSUk9SOiBsZC5zbzogb2JqZWN0ICclcycgY2Fubm90IGJlIGxvYWRlZCBhcyBhdWRpdCBpbnRlcmZhY2U6ICVzOyBpZ25vcmVkLlxuIiwKKyAJCSAgICB9CisgCQl9CisgCistCSAgICAgIGlmICgoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspCisrCSAgICAgIGlmICgoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykKKyAJCSAgJiYgcnRsZF9tdWx0aXBsZV9yZWYpCisgCQl7CisgCQkgIC8qIE1hcmsgdGhlIGxpbmsgbWFwIGFzIG5vdCB5ZXQgcmVsb2NhdGVkIGFnYWluLiAgKi8KK0BAIC0xOTcyLDcgKzE5NzIsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgICAgICAgaWYgKHJfbGlzdCA9PSByX2xpc3RlbmQgJiYgbGlibGlzdCA9PSBsaWJsaXN0ZW5kKQorIAlwcmVsaW5rZWQgPSB0cnVlOworIAorLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5wcmVsaW5rIGNoZWNraW5nOiAlc1xuIiwKKyAJCQkgIHByZWxpbmtlZCA/ICJvayIgOiAiZmFpbGVkIik7CisgICAgIH0KK0BAIC0xOTkwLDcgKzE5OTAsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgICBHTFJPKGRsX2luaXRfYWxsX2RpcnMpID0gR0woZGxfYWxsX2RpcnMpOworIAorICAgLyogUHJpbnQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TQ09QRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgICAgIHsKKyAgICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5Jbml0aWFsIG9iamVjdCBzY29wZXNcbiIpOworIAorQEAgLTIyNjUsNyArMjI2NSw3IEBAIHByb2Nlc3NfZGxfZGVidWcgKGNvbnN0IGNoYXIgKmRsX2RlYnVnKQorIAkgICAgaWYgKGRlYm9wdHNbY250XS5sZW4gPT0gbGVuCisgCQkmJiBtZW1jbXAgKGRsX2RlYnVnLCBkZWJvcHRzW2NudF0ubmFtZSwgbGVuKSA9PSAwKQorIAkgICAgICB7CistCQlHTFJPKGRsX2RlYnVnX21hc2spIHw9IGRlYm9wdHNbY250XS5tYXNrOworKwkJR0xST19kbF9kZWJ1Z19tYXNrIHw9IGRlYm9wdHNbY250XS5tYXNrOworIAkJYW55X2RlYnVnID0gMTsKKyAJCWJyZWFrOworIAkgICAgICB9CitAQCAtMjI4Niw3ICsyMjg2LDcgQEAgd2FybmluZzogZGVidWcgb3B0aW9uIGAlcycgdW5rbm93bjsgdHJ5IExEX0RFQlVHPWhlbHBcbiIsIGNvcHkpOworICAgICAgICsrZGxfZGVidWc7CisgICAgIH0KKyAKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1VOVVNFRCkKKyAgICAgeworICAgICAgIC8qIEluIG9yZGVyIHRvIGdldCBhbiBhY2N1cmF0ZSBwaWN0dXJlIG9mIHdoZXRoZXIgYSBwYXJ0aWN1bGFyCisgCSBEVF9ORUVERUQgZW50cnkgaXMgYWN0dWFsbHkgdXNlZCB3ZSBoYXZlIHRvIHByb2Nlc3MgYm90aAorQEAgLTIyOTQsNyArMjI5NCw3IEBAIHdhcm5pbmc6IGRlYnVnIG9wdGlvbiBgJXMnIHVua25vd247IHRyeSBMRF9ERUJVRz1oZWxwXG4iLCBjb3B5KTsKKyAgICAgICBHTFJPKGRsX2xhenkpID0gMDsKKyAgICAgfQorIAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19IRUxQKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0hFTFApCisgICAgIHsKKyAgICAgICBzaXplX3QgY250OworIAorQEAgLTI0OTksNyArMjQ5OSw3IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICAgICAgbW9kZSA9IHRyYWNlOworIAkgICAgICBHTFJPKGRsX3ZlcmJvc2UpID0gMTsKKyAjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKy0JICAgICAgR0xSTyhkbF9kZWJ1Z19tYXNrKSB8PSBETF9ERUJVR19QUkVMSU5LOworKwkgICAgICBHTFJPX2RsX2RlYnVnX21hc2sgfD0gRExfREVCVUdfUFJFTElOSzsKKyAjZW5kaWYKKyAJICAgICAgR0xSTyhkbF90cmFjZV9wcmVsaW5rKSA9ICZlbnZsaW5lWzE3XTsKKyAJICAgIH0KK0BAIC0yNTQ4LDcgKzI1NDgsNyBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCXsKKyAJICB1bnNldGVudiAoIk1BTExPQ19DSEVDS18iKTsKKyAjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKy0JICBHTFJPKGRsX2RlYnVnX21hc2spID0gMDsKKysJICBHTFJPX2RsX2RlYnVnX21hc2sgPSAwOworICNlbmRpZgorIAl9CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA2MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNy1lZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHMtQ29uZGl0aW9uYWxseS1leGNsdWRlLWMtdGVzLnBhdGNoCkBAIC0wLDAgKzEsMTQ1IEBACitGcm9tIGU5ODc3OWFhNTZmYWUwMzQ2ZGZmMmQwYjcyYWNhZGQwZWFmMDE4OTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAxNjoxMDo1MCAtMDcwMAorU3ViamVjdDogW1BBVENIIDI3LzI3XSBlZ2xpYmMtdXNlLW9wdGlvbi1ncm91cHM6IENvbmRpdGlvbmFsbHkgZXhjbHVkZSBjKysKKyB0ZXN0cworCisgICAgU29tZSB0ZXN0IHByb2dyYW1zIHdyaXR0ZW4gaW4gYysrIGFyZSBzdGlsbCBpbmNsdWRlZCBpbiBzcGl0ZSBvZgorICAgICJsaWJjLWN4eC10ZXN0cyIgYmVpbmcgb21pdHRlZCBmcm9tIERJU1RST19GRUFUVVJFU19MSUJDLgorICAgIEFsbCAuY2MgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkIHdpdGggZysrLgorICAgIGcrKyBhdXRvbWF0aWNhbGx5IHNwZWNpZmllcyBsaW5raW5nIGFnYWluc3QgdGhlIEMrKyBsaWJyYXJ5LgorICAgIFRoaXMgcGF0Y2ggY29uZGl0aW9uYWxseSBleGNsdWRlcyB0aGUgZm9sbG93aW5nIHRlc3RzIGFzIHdlbGw6CisKKyAgICAgIGJ1Zy1hdGV4aXQzLWxpYi5jYworICAgICAgdHN0LWNhbmNlbDI0LmNjCisgICAgICB0c3QtY2FuY2VsMjQtc3RhdGljLmNjCisgICAgICB0c3QtdW5pcXVlM2xpYi5jYworICAgICAgdHN0LXVuaXF1ZTNsaWIyLmNjCisgICAgICB0c3QtdW5pcXVlNGxpYi5jYworICAgICAgdHN0LXVuaXF1ZTMuY2MKKyAgICAgIHRzdC11bmlxdWU0LmNjCisKKyAgICBUZXN0ZWQgd2l0aCBESVNUUk9fRkVBVFVSRVNfTElCQ19yZW1vdmUgPSAiIGxpYmMtY3h4LXRlc3RzIgorCisgICAgW1lPQ1RPICM3MDAzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXJvIEJ5c3RyaWNreSA8anVyby5ieXN0cmlja3lAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGRsZmNuL01ha2VmaWxlIHwgIDggKysrKysrLS0KKyBlbGYvTWFrZWZpbGUgICB8IDE5ICsrKysrKysrKysrKysrLS0tLS0KKyBucHRsL01ha2VmaWxlICB8IDEyICsrKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RsZmNuL01ha2VmaWxlIGIvZGxmY24vTWFrZWZpbGUKK2luZGV4IDM4Mjc2MDcuLjkyMGJkNTggMTAwNjQ0CistLS0gYS9kbGZjbi9NYWtlZmlsZQorKysrIGIvZGxmY24vTWFrZWZpbGUKK0BAIC0zOSwxNiArMzksMjAgQEAgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0cyA9IGdscmVmbWFpbiBmYWlsdGVzdCB0c3QtZGxhZGRyIGRlZmF1bHQgZXJybXNnMSB0c3RjeGFhdGV4aXQgXAorIAlidWctZGxvcGVuMSBidWctZGxzeW0xIHRzdC1kbGluZm8gYnVnLWF0ZXhpdDEgYnVnLWF0ZXhpdDIgXAorIAl0c3RhdGV4aXQgYnVnLWRsLWxlYWYgdHN0LXJlYy1kbG9wZW4KKy1lbmRpZgorLQorIHRlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IGJ1Zy1hdGV4aXQzCisgCisrZW5kaWYKKysKKyBtb2R1bGVzLW5hbWVzID0gZ2xyZWZsaWIxIGdscmVmbGliMiBnbHJlZmxpYjMgZmFpbHRlc3Rtb2QgZGVmYXVsdG1vZDEgXAorIAkJZGVmYXVsdG1vZDIgZXJybXNnMW1vZCBtb2RhdGV4aXQgbW9kY3hhYXRleGl0IFwKKyAJCWJ1Zy1kbHN5bTEtbGliMSBidWctZGxzeW0xLWxpYjIgYnVnLWF0ZXhpdDEtbGliIFwKKyAJCWJ1Zy1hdGV4aXQyLWxpYiBidWctZGwtbGVhZi1saWIgXAorIAkJYnVnLWRsLWxlYWYtbGliLWNiIG1vZGR1bW15MSBtb2RkdW1teTIKKyAKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK21vZHVsZXMtbmFtZXMgKz0gYnVnLWF0ZXhpdDMtbGliCisrZW5kaWYKKysKKyBmYWlsdGVzdG1vZC5zby1uby16LWRlZnMgPSB5ZXMKKyBnbHJlZmxpYjIuc28tbm8tei1kZWZzID0geWVzCisgZXJybXNnMW1vZC5zby1uby16LWRlZnMgPSB5ZXMKK2RpZmYgLS1naXQgYS9lbGYvTWFrZWZpbGUgYi9lbGYvTWFrZWZpbGUKK2luZGV4IDcxYTE4YTEuLjI2ZmUzYzUgMTAwNjQ0CistLS0gYS9lbGYvTWFrZWZpbGUKKysrKyBiL2VsZi9NYWtlZmlsZQorQEAgLTE3LDYgKzE3LDggQEAKKyAKKyAjIE1ha2VmaWxlIGZvciBlbGYgc3ViZGlyZWN0b3J5IG9mIEdOVSBDIExpYnJhcnkuCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgkJOj0gZWxmCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMTQ1LDEyICsxNDcsMTUgQEAgdGVzdHMgKz0gbG9hZHRlc3QgcmVzdGVzdDEgcHJlbG9hZHRlc3QgbG9hZGZhaWwgbXVsdGlsb2FkIG9yaWd0ZXN0IHJlc29sdmZhaWwgXAorIAkgdW5sb2FkMyB1bmxvYWQ0IHVubG9hZDUgdW5sb2FkNiB1bmxvYWQ3IHVubG9hZDggdHN0LWdsb2JhbDEgb3JkZXIyIFwKKyAJIHRzdC1hdWRpdDEgdHN0LWF1ZGl0MiB0c3QtYXVkaXQ4IHRzdC1hdWRpdDkgXAorIAkgdHN0LXN0YWNrZ3VhcmQxIHRzdC1hZGRyMSB0c3QtdGhybG9jayBcCistCSB0c3QtdW5pcXVlMSB0c3QtdW5pcXVlMiAkKGlmICQoQ1hYKSx0c3QtdW5pcXVlMyB0c3QtdW5pcXVlNCBcCistCSB0c3Qtbm9kZWxldGUpIFwKKysJIHRzdC11bmlxdWUxIHRzdC11bmlxdWUyIFwKKyAJIHRzdC1pbml0b3JkZXIgdHN0LWluaXRvcmRlcjIgdHN0LXJlbHNvcnQxIHRzdC1udWxsLWFyZ3YgXAorIAkgdHN0LXB0cmd1YXJkMSB0c3QtdGxzYWxpZ24gdHN0LXRsc2FsaWduLWV4dGVybiB0c3Qtbm9kZWxldGUtb3BlbmVkIFwKKyAJIHRzdC1ub2RlbGV0ZTIKKyAjCSByZWxkZXA5CisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyt0ZXN0cyArPSAkKGlmICQoQ1hYKSx0c3QtdW5pcXVlMyB0c3QtdW5pcXVlNCB0c3Qtbm9kZWxldGUpCisrZW5kaWYKKysKKyBpZmVxICgkKGJ1aWxkLWhhcmRjb2RlZC1wYXRoLWluLXRlc3RzKSx5ZXMpCisgdGVzdHMgKz0gdHN0LWRsb3Blbi1hb3V0CisgTERGTEFHUy10c3QtZGxvcGVuLWFvdXQgPSAkKG5vLXBpZS1sZGZsYWcpCitAQCAtMjA5LDkgKzIxNCw2IEBAIG1vZHVsZXMtbmFtZXMgPSB0ZXN0b2JqMSB0ZXN0b2JqMiB0ZXN0b2JqMyB0ZXN0b2JqNCB0ZXN0b2JqNSB0ZXN0b2JqNiBcCisgCQl0c3QtdW5pcXVlMW1vZDEgdHN0LXVuaXF1ZTFtb2QyIFwKKyAJCXRzdC11bmlxdWUybW9kMSB0c3QtdW5pcXVlMm1vZDIgXAorIAkJdHN0LWF1ZGl0bW9kOWEgdHN0LWF1ZGl0bW9kOWIgXAorLQkJJChpZiAkKENYWCksdHN0LXVuaXF1ZTNsaWIgdHN0LXVuaXF1ZTNsaWIyIHRzdC11bmlxdWU0bGliIFwKKy0JCSAgdHN0LW5vZGVsZXRlLXVuaXF1ZW1vZCB0c3Qtbm9kZWxldGUtcnRsZG1vZCBcCistCQkgIHRzdC1ub2RlbGV0ZS16bW9kKSBcCisgCQl0c3QtaW5pdG9yZGVyYTEgdHN0LWluaXRvcmRlcmIxIFwKKyAJCXRzdC1pbml0b3JkZXJhMiB0c3QtaW5pdG9yZGVyYjIgXAorIAkJdHN0LWluaXRvcmRlcmEzIHRzdC1pbml0b3JkZXJhNCBcCitAQCAtMjIwLDYgKzIyMiwxMyBAQCBtb2R1bGVzLW5hbWVzID0gdGVzdG9iajEgdGVzdG9iajIgdGVzdG9iajMgdGVzdG9iajQgdGVzdG9iajUgdGVzdG9iajYgXAorIAkJdHN0LXJlbHNvcnQxbW9kMSB0c3QtcmVsc29ydDFtb2QyIHRzdC1hcnJheTJkZXAgXAorIAkJdHN0LWFycmF5NWRlcCB0c3QtbnVsbC1hcmd2LWxpYiBcCisgCQl0c3QtdGxzYWxpZ24tbGliIHRzdC1ub2RlbGV0ZS1vcGVuZWQtbGliIHRzdC1ub2RlbGV0ZTJtb2QKKysKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK21vZHVsZXMtbmFtZXMgKz0gJChpZiAkKENYWCksdHN0LXVuaXF1ZTNsaWIgdHN0LXVuaXF1ZTNsaWIyIHRzdC11bmlxdWU0bGliIFwKKysJCSAgdHN0LW5vZGVsZXRlLXVuaXF1ZW1vZCB0c3Qtbm9kZWxldGUtcnRsZG1vZCBcCisrCQkgIHRzdC1ub2RlbGV0ZS16bW9kKQorK2VuZGlmCisrCisgaWZlcSAoeWVzLCQoaGF2ZS1wcm90ZWN0ZWQtZGF0YSkpCisgbW9kdWxlcy1uYW1lcyArPSB0c3QtcHJvdGVjdGVkMW1vZGEgdHN0LXByb3RlY3RlZDFtb2RiCisgdGVzdHMgKz0gdHN0LXByb3RlY3RlZDFhIHRzdC1wcm90ZWN0ZWQxYgorZGlmZiAtLWdpdCBhL25wdGwvTWFrZWZpbGUgYi9ucHRsL01ha2VmaWxlCitpbmRleCA1OTZjYTNjLi41MGE3MDhiIDEwMDY0NAorLS0tIGEvbnB0bC9NYWtlZmlsZQorKysrIGIvbnB0bC9NYWtlZmlsZQorQEAgLTM5MCwxMiArMzkwLDIwIEBAIGxpbmstbGliYy1zdGF0aWMgOj0gJChjb21tb24tb2JqcGZ4KWxpYmMuYSAkKHN0YXRpYy1nbnVsaWIpIFwKKyAJCSAgICAkKGNvbW1vbi1vYmpwZngpbGliYy5hCisgCisgdGVzdHMtc3RhdGljICs9IHRzdC1sb2NhbGUxIHRzdC1sb2NhbGUyIHRzdC1zdGFja2d1YXJkMS1zdGF0aWMgXAorLQkJdHN0LWNhbmNlbDIxLXN0YXRpYyB0c3QtY2FuY2VsMjQtc3RhdGljIHRzdC1jb25kOC1zdGF0aWMgXAorKwkJdHN0LWNhbmNlbDIxLXN0YXRpYyB0c3QtY29uZDgtc3RhdGljIFwKKyAJCXRzdC1tdXRleDgtc3RhdGljIHRzdC1tdXRleHBpOC1zdGF0aWMgdHN0LXNlbTExLXN0YXRpYyBcCisgCQl0c3Qtc2VtMTItc3RhdGljCistdGVzdHMgKz0gdHN0LXN0YWNrZ3VhcmQxLXN0YXRpYyB0c3QtY2FuY2VsMjEtc3RhdGljIHRzdC1jYW5jZWwyNC1zdGF0aWMgXAorKworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrdGVzdHMtc3RhdGljICs9IHRzdC1jYW5jZWwyNC1zdGF0aWMKKytlbmRpZgorKworK3Rlc3RzICs9IHRzdC1zdGFja2d1YXJkMS1zdGF0aWMgdHN0LWNhbmNlbDIxLXN0YXRpYyBcCisgCSB0c3QtY29uZDgtc3RhdGljIHRzdC1tdXRleDgtc3RhdGljIHRzdC1tdXRleHBpOC1zdGF0aWMgXAorIAkgdHN0LXNlbTExLXN0YXRpYyB0c3Qtc2VtMTItc3RhdGljCisrCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykgKz0gdHN0LWNhbmNlbDI0LXN0YXRpYworKworIHh0ZXN0cy1zdGF0aWMgKz0gdHN0LXNldHVpZDEtc3RhdGljCisgCisgIyBUaGVzZSB0ZXN0cyBhcmUgbGlua2VkIHdpdGggbGliYyBiZWZvcmUgbGlicHRocmVhZAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9ldGMvbGQuc28uY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2V0Yy9sZC5zby5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9ldGMvbGQuc28uY29uZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZ2VuZXJhdGUtc3VwcG9ydGVkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTI4YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsKQEAgLTAsMCArMSwxMSBAQAorIyEvdXNyL2Jpbi9tYWtlCisKK2luY2x1ZGUgJChJTikKKworYWxsOgorCXJtIC1mICQoT1VUKQorCXRvdWNoICQoT1VUKQorCWZvciBsb2NhbGUgaW4gJChTVVBQT1JURUQtTE9DQUxFUyk7IGRvIFwKKwkJWyAkJGxvY2FsZSA9IHRydWUgXSAmJiBjb250aW51ZTsgXAorCQllY2hvICQkbG9jYWxlIHwgc2VkICdzLC8sICwnID4+ICQoT1VUKTsgXAorCWRvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjXzIuMjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTFmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiCkBAIC0wLDAgKzEsMTM1IEBACityZXF1aXJlIGdsaWJjLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFUzttZDU9ZTlhNTU4ZTI0M2IzNmQzMjA5ZjM4MGRlYjM5NGIyMTMgXAorICAgICAgZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgIGZpbGU6Ly9wb3NpeC9yeHNwZW5jZXIvQ09QWVJJR0hUO21kNT1kYzU0ODViYjM5NGExM2IyMzMyZWMxYzc4NWY1ZDgzYSBcCisgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitERVBFTkRTICs9ICJncGVyZi1uYXRpdmUga2NvbmZpZy1mcm9udGVuZHMtbmF0aXZlIgorCitTUkNSRVYgPz0gImEzNGQxYzZhZmM4NjUyMWQ2YWQxNzY2MmEzYjUzNjJkODQ4MTUxNGMiCisKK0JSQU5DSCA/PSAicmVsZWFzZS8ke1BWfS9tYXN0ZXIiCisKK0dMSUJDX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9nbGliYy5naXQiCisKK1NSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtCUkFOQ0h9O25hbWU9Z2xpYmMgXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1CYWNrcG9ydC1odHRwcy1zb3VyY2V3YXJlLm9yZy1tbC1saWJjLXBvcnRzLTIwMDctMTItLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1lZ2xpYmMtcnVuLWxpYm0tZXJyLXRhYi5wbC13aXRoLXNwZWNpZmljLWRpcnMtaW4tUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1NYWtlLWxkLXZlcnNpb24tb3V0cHV0LW1hdGNoaW5nLWdyb2stZ29sZC1zLW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLXN5c2RlcHMtZ251LWNvbmZpZ3VyZS5hYy1oYW5kbGUtY29ycmVjdGx5LWxpYmNfY3Zfcm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1BZGQtdW51c2VkLWF0dHJpYnV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNi15ZXMtd2l0aGluLXRoZS1wYXRoLXNldHMtd3JvbmctY29uZmlnLXZhcmlhYmxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaCBcCisiCisKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgICAgZmlsZTovL2V0Yy9sZC5zby5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBcCisiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCitCID0gIiR7V09SS0RJUn0vYnVpbGQtJHtUQVJHRVRfU1lTfSIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKKyMgdGhlIC1pc3lzdGVtIGluIGJpdGJha2UuY29uZiBzY3Jld3MgdXAgZ2xpYmMgZG9fc3RhZ2UKK0JVSUxEX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorVEFSR0VUX0NQUEZMQUdTID0gIi1JJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfSIKKworR0xJQkNfQlJPS0VOX0xPQ0FMRVMgPSAiIF9FUiBfRVQgc29fRVQgeW5fRVIgc2lkX0VUIHRyX1RSIG1uX01OIGdlel9FVCBnZXpfRVIgYm5fQkQgdGVfSU4gZXNfQ1IuSVNPLTg4NTktMSIKKworIworIyBXZSB3aWxsIHNraXAgcGFyc2luZyBnbGliYyB3aGVuIHRhcmdldCBzeXN0ZW0gQyBsaWJyYXJ5IHNlbGVjdGlvbiBpcyBub3QgZ2xpYmMKKyMgdGhpcyBoZWxwcyBpbiBlYXNpbmcgb3V0IHBhcnNpbmcgZm9yIG5vbi1nbGliYyBzeXN0ZW0gbGlicmFyaWVzCisjCitDT01QQVRJQkxFX0hPU1RfbGliYy1tdXNsX2NsYXNzLXRhcmdldCA9ICJudWxsIgorQ09NUEFUSUJMRV9IT1NUX2xpYmMtdWNsaWJjX2NsYXNzLXRhcmdldCA9ICJudWxsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUta2VybmVsPSR7T0xERVNUX0tFUk5FTH0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1jdnMgLS1kaXNhYmxlLXByb2ZpbGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyAtLXdpdGhvdXQtZ2QgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsb2NhbGU9Z251IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hZGQtb25zIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtaGVhZGVycz0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXNlbGludXggXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9ic29sZXRlLXJwYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWtjb25maWc9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAke0dMSUJDX0VYVFJBX09FQ09ORn0iCisKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2xpYmNfZnB1X3NldHRpbmcoYmIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWluZXQtYW5sJywgJy0tZW5hYmxlLW5zY2QnLCAnLS1kaXNhYmxlLW5zY2QnLCBkKX0iCisKKworZG9fcGF0Y2hfYXBwZW5kKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fZml4X3JlYWRsaWJfYycsIGQpCit9CisKK2RvX2ZpeF9yZWFkbGliX2MgKCkgeworCXNlZCAtaSAtZSAncyNPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMjJHtFR0xJQkNfS05PV05fSU5URVJQUkVURVJfTkFNRVN9IycgJHtTfS9lbGYvcmVhZGxpYi5jCit9CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisjIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhlIGF1dG9jb25mL2F1dG9tYWtlL2FjbG9jYWwvYXV0b2hlYWRlcgorIyBjYWxscyBmb3Igbm93CisjIGRvbid0IHBhc3MgQ1BQRkxBR1MgaW50byBjb25maWd1cmUsIHNpbmNlIGl0IHVwc2V0cyB0aGUga2VybmVsLWhlYWRlcnMKKyMgdmVyc2lvbiBjaGVjayBhbmQgZG9lc24ndCByZWFsbHkgaGVscCB3aXRoIGFueXRoaW5nCisgICAgICAgIChjZCAke1N9ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBpbiBydW5uaW5nIGdudS1jb25maWdpemUiCisgICAgICAgIGZpbmQgJHtTfSAtbmFtZSAiY29uZmlndXJlIiB8IHhhcmdzIHRvdWNoCisgICAgICAgIENQUEZMQUdTPSIiIG9lX3J1bmNvbmYKK30KKworcnBjc3ZjID0gImJvb3RwYXJhbV9wcm90LnggbmxtX3Byb3QueCByc3RhdC54IFwKKwkgIHlwcGFzc3dkLngga2xtX3Byb3QueCByZXgueCBzbV9pbnRlci54IG1vdW50LnggXAorCSAgcnVzZXJzLnggc3ByYXkueCBuZnNfcHJvdC54IHJxdW90YS54IGtleV9wcm90LngiCisKK2RvX2NvbXBpbGUgKCkgeworCSMgLVdsLC1ycGF0aC1saW5rIDxzdGFnaW5nPi9saWIgaW4gTERGTEFHUyBjYW4gY2F1c2UgYnJlYWthZ2UgaWYgYW5vdGhlciBnbGliYyBpcyBpbiBzdGFnaW5nCisJdW5zZXQgTERGTEFHUworCWJhc2VfZG9fY29tcGlsZQorCSgKKwkJY2QgJHtTfS9zdW5ycGMvcnBjc3ZjCisJCWZvciByIGluICR7cnBjc3ZjfTsgZG8KKwkJCWg9YGVjaG8gJHJ8c2VkIC1lJ3MsXC54JCwuaCwnYAorCQkJcm0gLWYgJGgKKwkJCSR7Qn0vc3VucnBjL2Nyb3NzLXJwY2dlbiAtaCAkciAtbyAkaCB8fCBiYndhcm4gIiR7UE59OiB1bmFibGUgdG8gZ2VuZXJhdGUgaGVhZGVyIGZvciAkciIKKwkJZG9uZQorCSkKKwllY2hvICJBZGp1c3QgbGRkIHNjcmlwdCIKKwlpZiBbIC1uICIke1JUTERMSVNUfSIgXQorCXRoZW4KKwkJcHJldnJ0bGQ9YGNhdCAke0J9L2VsZi9sZGQgfCBncmVwICJeUlRMRExJU1Q9IiB8IHNlZCAncyNeUlRMRExJU1Q9Ilw/XChbXiJdKlwpIlw/JCNcMSMnYAorCQlpZiBbICIke3ByZXZydGxkfSIgIT0gIiR7UlRMRExJU1R9IiBdCisJCXRoZW4KKwkJCXNlZCAtaSAke0J9L2VsZi9sZGQgLWUgInMjXlJUTERMSVNUPS4qXCQjUlRMRExJU1Q9XCIke3ByZXZydGxkfSAke1JUTERMSVNUfVwiIyIKKwkJZmkKKwlmaQorCit9CisKK3JlcXVpcmUgZ2xpYmMtcGFja2FnZS5pbmMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLzMyYW5kNjRiaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLzMyYW5kNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmZWFlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvMzJhbmQ2NGJpdC5wYXRjaApAQCAtMCwwICsxLDMzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgcnVuIHRoZSBsZGNvbmZpZyBpbiB0aGUgY3Jvc3MgZmFzaGlvbi4gbWFrZSB0aGUgY29kZSBiaXRzaXplIGF3YXJlIHNvIHRoYXQgCit3ZSBjYW4gY3Jvc3MgYnVpbGQgbGRjb25maWcgY2FjaGUgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcy4KKworUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+IDIwMDkvMDUvMTkKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMDkvMDMvMjkKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCitAQCAtNDAsMzkgKzQwLDIxMiBAQCBkbwkJCQkJCQkJXAorIAorIC8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworIGludAorLXByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorIAkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKyAJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorIHsKKyAgIGludCBpOworICAgdW5zaWduZWQgaW50IGo7CistICBFbGZXKEFkZHIpIGxvYWRhZGRyOworKyAgRWxmMzJfQWRkciBsb2FkYWRkcjsKKyAgIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CisgICBzaXplX3QgZHluYW1pY19zaXplOworICAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKyAKKy0gIEVsZlcoRWhkcikgKmVsZl9oZWFkZXI7CistICBFbGZXKFBoZHIpICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CistICBFbGZXKER5bikgKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKysgIEVsZjMyX0VoZHIgKmVsZl9oZWFkZXI7CisrICBFbGYzMl9QaGRyICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CisrICBFbGYzMl9EeW4gKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKyAgIGNoYXIgKmR5bmFtaWNfc3RyaW5nczsKKyAKKy0gIGVsZl9oZWFkZXIgPSAoRWxmVyhFaGRyKSAqKSBmaWxlX2NvbnRlbnRzOworKyAgZWxmX2hlYWRlciA9IChFbGYzMl9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gIT0gRWxmVyAoQ0xBU1MpKQorKyAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisgICAgIHsKKy0gICAgICBpZiAob3B0X3ZlcmJvc2UpCisrICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKysJICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKyAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworKyAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisrCisrICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorKyAgICAgbGliYzUvbGliYzYuICAqLworKyAgKmZsYWcgPSBGTEFHX0VMRjsKKysKKysgIGxvYWRhZGRyID0gLTE7CisrICBkeW5hbWljX2FkZHIgPSAwOworKyAgZHluYW1pY19zaXplID0gMDsKKysgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworKyAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworKyAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgIHsKKysgICAgICBjaGVja19wdHIgKHNlZ21lbnQpOworKworKyAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorIAl7CistCSAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorLQkgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIGEgMzIgYml0IEVMRiBmaWxlLlxuIiksIGZpbGVfbmFtZSk7CistCSAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCistCSAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgYSA2NCBiaXQgRUxGIGZpbGUuXG4iKSwgZmlsZV9uYW1lKTsKKy0JICBlbHNlCistCSAgICBlcnJvciAoMCwgMCwgXygiVW5rbm93biBFTEZDTEFTUyBpbiBmaWxlICVzLlxuIiksIGZpbGVfbmFtZSk7CisrCWNhc2UgUFRfTE9BRDoKKysJICBpZiAobG9hZGFkZHIgPT0gKEVsZjMyX0FkZHIpIC0xKQorKwkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfRFlOQU1JQzoKKysJICBpZiAoZHluYW1pY19hZGRyKQorKwkgICAgZXJyb3IgKDAsIDAsIF8oIm1vcmUgdGhhbiBvbmUgZHluYW1pYyBzZWdtZW50XG4iKSk7CisrCisrCSAgZHluYW1pY19hZGRyID0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgZHluYW1pY19zaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfSU5URVJQOgorKwkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICBjaGVja19wdHIgKHByb2dyYW1faW50ZXJwcmV0ZXIpOworKworKwkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworKwkgIGZvciAoaiA9IDA7IGogPCBzaXplb2YgKGludGVycHJldGVycykgLyBzaXplb2YgKGludGVycHJldGVycyBbMF0pOworKwkgICAgICAgKytqKQorKwkgICAgaWYgKHN0cmNtcCAocHJvZ3JhbV9pbnRlcnByZXRlciwgaW50ZXJwcmV0ZXJzW2pdLnNvbmFtZSkgPT0gMCkKKysJICAgICAgeworKwkJKmZsYWcgPSBpbnRlcnByZXRlcnNbal0uZmxhZzsKKysJCWJyZWFrOworKwkgICAgICB9CisrCSAgYnJlYWs7CisrCisrCWNhc2UgUFRfTk9URToKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgc2VnbWVudC0+cF9maWxlc3ogPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorKwkgICAgeworKwkgICAgICBFbGYzMl9Xb3JkICphYmlfbm90ZSA9IChFbGYzMl9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisrCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKysJICAgICAgRWxmMzJfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCisrCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKysJCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorKwkJeworKyNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGYzMl9Xb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZjMyX1dvcmQpKSkKKysJCSAgRWxmMzJfQWRkcikgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCisrCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworKworKwkJICBpZiAoc2l6ZSAtIDMyIDwgbm90ZV9zaXplIHx8IG5vdGVfc2l6ZSA9PSAwKQorKwkJICAgIHsKKysJCSAgICAgIHNpemUgPSAwOworKwkJICAgICAgYnJlYWs7CisrCQkgICAgfQorKwkJICBzaXplIC09IG5vdGVfc2l6ZTsKKysJCSAgYWJpX25vdGUgPSAodm9pZCAqKSBhYmlfbm90ZSArIG5vdGVfc2l6ZTsKKysJCX0KKysKKysJICAgICAgaWYgKHNpemUgPT0gMCkKKysJCWJyZWFrOworKworKwkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorKwkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKysJCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKysJCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICB9CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgYnJlYWs7CisrCX0KKysKKysgICAgfQorKyAgaWYgKGxvYWRhZGRyID09IChFbGYzMl9BZGRyKSAtMSkKKysgICAgeworKyAgICAgIC8qIFZlcnkgc3RyYW5nZS4gKi8KKysgICAgICBsb2FkYWRkciA9IDA7CisrICAgIH0KKysKKysgIC8qIE5vdyB3ZSBjYW4gcmVhZCB0aGUgZHluYW1pYyBzZWN0aW9ucy4gICovCisrICBpZiAoZHluYW1pY19zaXplID09IDApCisrICAgIHJldHVybiAxOworKworKyAgZHluYW1pY19zZWdtZW50ID0gKEVsZjMyX0R5biAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisrICBjaGVja19wdHIgKGR5bmFtaWNfc2VnbWVudCk7CisrCisrICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworKyAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICAgICAgICsrZHluX2VudHJ5KQorKyAgICB7CisrICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworKyAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysJeworKwkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHIpOworKwkgIGNoZWNrX3B0ciAoZHluYW1pY19zdHJpbmdzKTsKKysJICBicmVhazsKKyAJfQorLSAgICAgIHJldHVybiAxOworICAgICB9CisgCisrICBpZiAoZHluYW1pY19zdHJpbmdzID09IE5VTEwpCisrICAgIHJldHVybiAxOworKworKyAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgICAgICAgKytkeW5fZW50cnkpCisrICAgIHsKKysgICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQgfHwgZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCXsKKysJICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoZWNrX3B0ciAobmFtZSk7CisrCisrCSAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEKQorKwkgICAgeworKworKwkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCisrCQl7CisrCQkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworKwkJICBmb3IgKGogPSAwOworKwkJICAgICAgIGogPCBzaXplb2YgKGtub3duX2xpYnMpIC8gc2l6ZW9mIChrbm93bl9saWJzIFswXSk7CisrCQkgICAgICAgKytqKQorKwkJICAgIGlmIChzdHJjbXAgKG5hbWUsIGtub3duX2xpYnMgW2pdLnNvbmFtZSkgPT0gMCkKKysJCSAgICAgIHsKKysJCQkqZmxhZyA9IGtub3duX2xpYnMgW2pdLmZsYWc7CisrCQkJYnJlYWs7CisrCQkgICAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgZWxzZSBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCSAgICAqc29uYW1lID0geHN0cmR1cCAobmFtZSk7CisrCisrCSAgLyogRG8gd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQ/ICAqLworKwkgIGlmICgqc29uYW1lICYmICpmbGFnICE9IEZMQUdfRUxGKQorKwkgICAgcmV0dXJuIDA7CisrCX0KKysgICAgfQorKworKyAgLyogV2UgcmVhY2ggdGhpcyBwb2ludCBvbmx5IGlmIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiBhIERUX1NPTkFNRQorKyAgICAgb3IgaWYgd2UgY2FuJ3QgY2xhc3NpZnkgdGhlIGxpYnJhcnkuICBJZiBpdCBkb2Vzbid0IGhhdmUgYQorKyAgICAgc29uYW1lLCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkuICAqLworKyAgaWYgKCpzb25hbWUgPT0gTlVMTCkKKysgICAgKnNvbmFtZSA9IHhzdHJkdXAgKGxpYik7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisraW50CisrcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorKwkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKysJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorK3sKKysgIGludCBpOworKyAgdW5zaWduZWQgaW50IGo7CisrICBFbGY2NF9BZGRyIGxvYWRhZGRyOworKyAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKysgIHNpemVfdCBkeW5hbWljX3NpemU7CisrICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworKworKyAgRWxmNjRfRWhkciAqZWxmX2hlYWRlcjsKKysgIEVsZjY0X1BoZHIgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKysgIEVsZjY0X0R5biAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworKyAgY2hhciAqZHluYW1pY19zdHJpbmdzOworKworKyAgZWxmX2hlYWRlciA9IChFbGY2NF9FaGRyICopIGZpbGVfY29udGVudHM7CisrICAqb3N2ZXJzaW9uID0gMDsKKysKKyAgIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKK0BAIC04MSw3ICsyNTQsNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGZXKFBoZHIpICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtMTAwLDcgKzI3Myw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKyAJeworIAljYXNlIFBUX0xPQUQ6CistCSAgaWYgKGxvYWRhZGRyID09IChFbGZXKEFkZHIpKSAtMSkKKysJICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorIAkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisgCSAgYnJlYWs7CisgCitAQCAtMTI5LDE2ICszMDIsMTYgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAljYXNlIFBUX05PVEU6CisgCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKyAJICAgIHsKKy0JICAgICAgRWxmVyhXb3JkKSAqYWJpX25vdGUgPSAoRWxmVyhXb3JkKSAqKSAoZmlsZV9jb250ZW50cworKwkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisgCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmVyhBZGRyKSBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworIAorIAkgICAgICB3aGlsZSAoYWJpX25vdGUgWzBdICE9IDQgfHwgYWJpX25vdGUgWzFdICE9IDE2CisgCQkgICAgIHx8IGFiaV9ub3RlIFsyXSAhPSAxCisgCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKyAJCXsKKy0jZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmVyhXb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZlcoV29yZCkpKQorLQkJICBFbGZXKEFkZHIpIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZlcoV29yZCkpCisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjY0X1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGY2NF9Xb3JkKSkKKysJCSAgRWxmNjRfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGY2NF9Xb3JkKQorIAkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorIAkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKyAKK0BAIC0xNjYsNyArMzM5LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAl9CisgCisgICAgIH0KKy0gIGlmIChsb2FkYWRkciA9PSAoRWxmVyhBZGRyKSkgLTEpCisrICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorICAgICB7CisgICAgICAgLyogVmVyeSBzdHJhbmdlLiAqLworICAgICAgIGxvYWRhZGRyID0gMDsKK0BAIC0xNzYsNyArMzQ5LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgaWYgKGR5bmFtaWNfc2l6ZSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKy0gIGR5bmFtaWNfc2VnbWVudCA9IChFbGZXKER5bikgKikgKGZpbGVfY29udGVudHMgKyBkeW5hbWljX2FkZHIpOworKyAgZHluYW1pY19zZWdtZW50ID0gKEVsZjY0X0R5biAqKSAoZmlsZV9jb250ZW50cyArIGR5bmFtaWNfYWRkcik7CisgICBjaGVja19wdHIgKGR5bmFtaWNfc2VnbWVudCk7CisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworQEAgLTIzMywzICs0MDYsMzMgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorIAorICAgcmV0dXJuIDA7CisgfQorKy8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworK2ludAorK3Byb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisrCQkgIHVuc2lnbmVkIGludCAqb3N2ZXJzaW9uLCBjaGFyICoqc29uYW1lLCB2b2lkICpmaWxlX2NvbnRlbnRzLAorKwkJICBzaXplX3QgZmlsZV9sZW5ndGgpCisreworKyAgaW50IGk7CisrICB1bnNpZ25lZCBpbnQgajsKKysgIEVsZlcoQWRkcikgbG9hZGFkZHI7CisrICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworKyAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisrCisrICBFbGZXKEVoZHIpICplbGZfaGVhZGVyOworKyAgRWxmVyhQaGRyKSAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworKyAgRWxmVyhEeW4pICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisrICBjaGFyICpkeW5hbWljX3N0cmluZ3M7CisrCisrICBlbGZfaGVhZGVyID0gKEVsZlcoRWhkcikgKikgZmlsZV9jb250ZW50czsKKysgICpvc3ZlcnNpb24gPSAwOworKworKyAgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQorKyAgICByZXR1cm4gcHJvY2Vzc19lbGZfZmlsZTMyKGZpbGVfbmFtZSwgbGliLGZsYWcsIG9zdmVyc2lvbiwgc29uYW1lLCBmaWxlX2NvbnRlbnRzLCBmaWxlX2xlbmd0aCk7CisrICBlbHNlIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NCkKKysgICAgcmV0dXJuIHByb2Nlc3NfZWxmX2ZpbGU2NChmaWxlX25hbWUsIGxpYixmbGFnLCBvc3ZlcnNpb24sIHNvbmFtZSwgZmlsZV9jb250ZW50cywgZmlsZV9sZW5ndGgpOworKyAgZXJyb3IgKDAsIDAsIF8oIlVua25vd24gRUxGQ0xBU1MgaW4gZmlsZSAlcy5cbiIpLCBmaWxlX25hbWUpOworKyAgcmV0dXJuIDE7CisrfQorKworKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2ZiOTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUKQEAgLTAsMCArMSw4IEBACitUaGUgZmlsZXMgYXJlIHB1bGxlZCB2ZXJiYXRpbSBmcm9tIGdsaWJjIDIuNSBhbmQgdGhlbiBwYXRjaGVkIHRvIGFsbG93CitzdGFuZGFsb25lIGNvbXBpbGF0aW9uIG9mIGxkY29uZmlnLgorCitSaWNoYXJkIFB1cmRpZQorT3BlbmVkSGFuZCBMdGQuCisKK1VwZ3JhZGVkIHRoZSBsZGNvbmZpZyByZWNpcGUgdG8gZWdsaWJjIDIuMTIuMQorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wMy8yOQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWFmMTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gOWQ2MjU0NDA5MGIwODg0OTIxOGNkMWZjNTJhMzZjZGQ1ZDkwMzYzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDM6Mjk6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIDY0LWJpdCBmbGFnIGZvciBFTEY2NCBlbnRyaWVzLgorCitsZGNvbmZpZy1uYXRpdmUgd2FzIGdyZXBwZWQgZnJvbSBhbiBvbGQgdmVyc2lvbiBvZiBnbGliYywgYW5kIGl0cyBvdXRwdXQKK2xhY2tzIG5lY2Nlc3NhcnkgNjRiaXQgZmxhZyBpbiBlbnRyaWVzLgorRHVlIHRvIHRoaXMgZGVmZWN0LCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKSBweXRob24gZnVuY3Rpb24gZmFpbHMgdG8KK2RldGVjdCBhbnkgbGlicmFyeSBkdWUgdG8gdGhlIG9sZCBmaWxlIGZvcm1hdCB0aGF0IGxkY29uZmlnLW5hdGl2ZQorY3JlYXRlcy4gVGhpcyBmaXggc2V0cyBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IDY0Yml0IGZsYWdzIGZvciA2NC1iaXQgRUxGLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjYWNoZS5jICAgICAgfCAgNCArKysrCisgbGRjb25maWcuaCAgIHwgIDQgKysrKworIHJlYWRlbGZsaWIuYyB8IDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NhY2hlLmMgYi9jYWNoZS5jCitpbmRleCBhOTA0ZDQ0Li5jNGY1NDExIDEwMDY0NAorLS0tIGEvY2FjaGUuYworKysrIGIvY2FjaGUuYworQEAgLTEyMSw2ICsxMjEsMTAgQEAgcHJpbnRfZW50cnkgKGNvbnN0IGNoYXIgKmxpYiwgaW50IGZsYWcsIHVuc2lnbmVkIGludCBvc3ZlcnNpb24sCisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgRkxBR19NSVBTNjRfTElCTjY0OgorICAgICAgIGZwdXRzICgiLDY0Yml0Iiwgc3Rkb3V0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBGTEFHX0FBUkNINjRfTElCNjQ6CisrICAgICAgZnB1dHMgKCIsQUFyY2g2NCIsIHN0ZG91dCk7CisrICAgICAgYnJlYWs7CisgICAgIGNhc2UgMDoKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKK2RpZmYgLS1naXQgYS9sZGNvbmZpZy5oIGIvbGRjb25maWcuaAoraW5kZXggZmFkZDVlYy4uNmE4YTc1MCAxMDA2NDQKKy0tLSBhL2xkY29uZmlnLmgKKysrKyBiL2xkY29uZmlnLmgKK0BAIC0zNCw2ICszNCwxMCBAQAorICNkZWZpbmUgRkxBR19QT1dFUlBDX0xJQjY0CTB4MDUwMAorICNkZWZpbmUgRkxBR19NSVBTNjRfTElCTjMyCTB4MDYwMAorICNkZWZpbmUgRkxBR19NSVBTNjRfTElCTjY0CTB4MDcwMAorKyNkZWZpbmUgRkxBR19YODY2NF9MSUJYMzIJCTB4MDgwMAorKyNkZWZpbmUgRkxBR19BUk1fTElCSEYJCQkweDA5MDAKKysjZGVmaW5lIEZMQUdfQUFSQ0g2NF9MSUI2NAkJMHgwYTAwCisrI2RlZmluZSBGTEFHX0FSTV9MSUJTRgkJCTB4MGIwMAorIAorIC8qIE5hbWUgb2YgYXV4aWxpYXJ5IGNhY2hlLiAgKi8KKyAjZGVmaW5lIF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRSAiL3Zhci9jYWNoZS9sZGNvbmZpZy9hdXgtY2FjaGUiCitkaWZmIC0tZ2l0IGEvcmVhZGVsZmxpYi5jIGIvcmVhZGVsZmxpYi5jCitpbmRleCAwYmYwZGUzLi42ZTg3YWZjIDEwMDY0NAorLS0tIGEvcmVhZGVsZmxpYi5jCisrKysgYi9yZWFkZWxmbGliLmMKK0BAIC0yOCw2ICsyOCwxMSBAQAorIAorICNpbmNsdWRlICJlbmRpYW5fZXh0cmEuaCIKKyAKKysvKiBXb3JrLWFyb3VuZCBmb3Igb2xkIGhvc3QgdGhhdCBkb2VzIG5vdCBoYXZlIEFBcmNoNjQgZGVmaW5lZCBpbiBlbGYuaC4gKi8KKysjaWZuZGVmIEVNX0FBUkNINjQKKysjZGVmaW5lIEVNX0FBUkNINjQJMTgzCQkvKiBBUk0gQUFSQ0g2NCAqLworKyNlbmRpZgorKworICN1bmRlZiBjaGVja19wdHIKKyAjZGVmaW5lIGNoZWNrX3B0cihwdHIpCQkJCQkJXAorIGRvCQkJCQkJCQlcCitAQCAtMjkwLDYgKzI5NSwzNSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgICAgICBsaWJjNS9saWJjNi4gICovCisgICAqZmxhZyA9IEZMQUdfRUxGOworIAorKyAgLyogU2V0IGZsYWdzIGFjY29yZGluZyB0byBpbmZvcm1hdGlvbiBpbiBFTEYgaGVhZGVyIHRvIGFsaWduIHdpdGggdGFyZ2V0CisrICAgICBsZGNvbmZpZyAqLworKyAgc3dpdGNoIChlbGZfaGVhZGVyLT5lX21hY2hpbmUpCisrICAgIHsKKysgICAgY2FzZSBFTV9JQV82NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX0lBNjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fWDg2XzY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfWDg2NjRfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fUzM5MDoKKysgICAgICAqZmxhZyB8PSBGTEFHX1MzOTBfTElCNjQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1fUFBDNjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19QT1dFUlBDX0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX01JUFM6CisrICAgIGNhc2UgRU1fTUlQU19SUzNfTEU6CisrICAgICAgKmZsYWcgfD0gRkxBR19NSVBTNjRfTElCTjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX0FBUkNINjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19BQVJDSDY0X0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIGVycm9yKDAsIDAsICIlcyBpcyBhIDY0LWJpdCBFTEYgZm9yIHVua25vd24gbWFjaGluZSAlbHhcbiIsCisrICAgICAgICAgICAgZmlsZV9uYW1lLCAobG9uZyllbGZfaGVhZGVyLT5lX21hY2hpbmUpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisgICBsb2FkYWRkciA9IC0xOworICAgZHluYW1pY19hZGRyID0gMDsKKyAgIGR5bmFtaWNfc2l6ZSA9IDA7CistLSAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitEbyBkYXRhIGlucHV0L291dHB1dCBoYW5kbGluZyBhY2NvcmRpbmcgdG8gZW5kaWVuLW5lc3Mgb2YgdGhlIGxpYnJhcnkgZmlsZS4gVGhhdCAKK2VuYWJsZXMgdXNlIG9mIGxkY29uZmlnIGluIHRoZSBjcm9zcyBmYXNoaW9uIGZvciBhbnkgYXJjaGl0ZWN0dXJlLgorCisyMDExLzA0LzA0CitSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK05pdGluIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKK0BAIC0zOCw2ICszOCwyOCBAQCBkbwkJCQkJCQkJXAorICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCk7CisgCisraW50IGJlOworK3N0YXRpYyB1aW50MTZfdCByZWFkMTYodWludDE2X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTE2dG9oKHgpOworKyAgcmV0dXJuIGxlMTZ0b2goeCk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCByZWFkMzIodWludDMyX3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTMydG9oKHgpOworKyAgcmV0dXJuIGxlMzJ0b2goeCk7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCByZWFkNjQodWludDY0X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBiZTY0dG9oKHgpOworKyAgcmV0dXJuIGxlNjR0b2goeCk7CisrfQorKworIC8qIFJldHVybnMgMCBpZiBldmVyeXRoaW5nIGlzIG9rLCAhPSAwIGluIGNhc2Ugb2YgZXJyb3IuICAqLworIGludAorIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKK0BAIC01OSwxNSArODEsMTcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZWxmX2hlYWRlciA9IChFbGYzMl9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorKyAgYmUgPSAoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMk1TQik7CisrCisrICBpZiAocmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpICE9IEVUX0RZTikKKyAgICAgeworICAgICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBub3QgYSBzaGFyZWQgb2JqZWN0IGZpbGUgKFR5cGU6ICVkKS5cbiIpLCBmaWxlX25hbWUsCistCSAgICAgZWxmX2hlYWRlci0+ZV90eXBlKTsKKysJICAgICByZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkpOworICAgICAgIHJldHVybiAxOworICAgICB9CisgCisgICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworLSAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgZWxmX3BoZWFkZXIgPSAoRWxmMzJfUGhkciAqKSAocmVhZDMyKGVsZl9oZWFkZXItPmVfcGhvZmYsIGJlKSArIGZpbGVfY29udGVudHMpOworICAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisgCisgICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorQEAgLTc5LDI3ICsxMDMsMjcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZHluYW1pY19zaXplID0gMDsKKyAgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworICAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworLSAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgICAgIGkgPCByZWFkMTYoZWxmX2hlYWRlci0+ZV9waG51bSwgYmUpOyBpKyssIHNlZ21lbnQrKykKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisgCistICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisrICAgICAgc3dpdGNoIChyZWFkMzIoc2VnbWVudC0+cF90eXBlLCBiZSkpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorIAkgIGlmIChsb2FkYWRkciA9PSAoRWxmMzJfQWRkcikgLTEpCistCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICAgIGxvYWRhZGRyID0gcmVhZDMyKHNlZ21lbnQtPnBfdmFkZHIsIGJlKSAtIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0RZTkFNSUM6CisgCSAgaWYgKGR5bmFtaWNfYWRkcikKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorLQkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworLQkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGR5bmFtaWNfYWRkciA9IHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKKy0JICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDMyKHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworIAkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisgCisgCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCitAQCAtMTEzLDIwICsxMzcsMjAgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgc2VnbWVudC0+cF9hbGlnbiA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGYzMl9Xb3JkICphYmlfbm90ZSA9IChFbGYzMl9Xb3JkICopIChmaWxlX2NvbnRlbnRzCistCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmMzJfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCQkJCQkJICAgICArIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKysJICAgICAgRWxmMzJfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCistCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKy0JCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorKwkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CistI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpKSAtIDEpICYgLXNpemVvZiAoRWxmMzJfV29yZCkpKQorLQkJICBFbGYzMl9BZGRyKSBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisrI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjMyX1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKysJCSAgRWxmMzJfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGYzMl9Xb3JkKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVswXSwgYmUpKQorKwkJCQkJICsgUk9VTkQgKHJlYWQzMihhYmlfbm90ZVsxXSwgYmUpKTsKKyAKKyAJCSAgaWYgKHNpemUgLSAzMiA8IG5vdGVfc2l6ZSB8fCBub3RlX3NpemUgPT0gMCkKKyAJCSAgICB7CitAQCAtMTQwLDEwICsxNjQsMTAgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgICAgICBpZiAoc2l6ZSA9PSAwKQorIAkJYnJlYWs7CisgCistCSAgICAgICpvc3ZlcnNpb24gPSAoYWJpX25vdGUgWzRdIDw8IDI0KSB8CistCQkJICAgKChhYmlfbm90ZSBbNV0gJiAweGZmKSA8PCAxNikgfAorLQkJCSAgICgoYWJpX25vdGUgWzZdICYgMHhmZikgPDwgOCkgfAorLQkJCSAgIChhYmlfbm90ZSBbN10gJiAweGZmKTsKKysJICAgICAgKm9zdmVyc2lvbiA9IChyZWFkMzIoYWJpX25vdGUgWzRdLCBiZSkgPDwgMjQpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNV0sIGJlKSAmIDB4ZmYpIDw8IDE2KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzZdLCBiZSkgJiAweGZmKSA8PCA4KSB8CisrCQkJICAgKHJlYWQzMihhYmlfbm90ZSBbN10sIGJlKSAmIDB4ZmYpOworIAkgICAgfQorIAkgIGJyZWFrOworIAorQEAgLTE2NywxMyArMTkxLDEzIEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAKKyAgIC8qIEZpbmQgdGhlIHN0cmluZyB0YWJsZS4gICovCisgICBkeW5hbWljX3N0cmluZ3MgPSBOVUxMOworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CisgICAgICAgY2hlY2tfcHRyIChkeW5fZW50cnkpOworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NUUlRBQikKKysgICAgICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TVFJUQUIpCisgCXsKKy0JICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyKTsKKysJICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQzMihkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKSAtIGxvYWRhZGRyKTsKKyAJICBjaGVja19wdHIgKGR5bmFtaWNfc3RyaW5ncyk7CisgCSAgYnJlYWs7CisgCX0KK0BAIC0xODMsMTUgKzIwNywxNSBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICAgIHJldHVybiAxOworIAorICAgLyogTm93IHJlYWQgdGhlIERUX05FRURFRCBhbmQgRFRfU09OQU1FIGVudHJpZXMuICAqLworLSAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IGR5bl9lbnRyeS0+ZF90YWcgIT0gRFRfTlVMTDsKKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpICE9IERUX05VTEw7CisgICAgICAgICsrZHluX2VudHJ5KQorICAgICB7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEIHx8IGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKyAgICAgIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCB8fCByZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJeworLQkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyBkeW5fZW50cnktPmRfdW4uZF92YWw7CisrCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIHJlYWQzMihkeW5fZW50cnktPmRfdW4uZF92YWwsIGJlKTsKKyAJICBjaGVja19wdHIgKG5hbWUpOworIAorLQkgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCkKKysJICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQpCisgCSAgICB7CisgCisgCSAgICAgIGlmICgqZmxhZyA9PSBGTEFHX0VMRikKK0BAIC0yMDgsNyArMjMyLDcgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorIAkJfQorIAkgICAgfQorIAorLQkgIGVsc2UgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwkgIGVsc2UgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAkgICAgKnNvbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworIAorIAkgIC8qIERvIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkPyAgKi8KK0BAIC0yNDYsMTUgKzI3MCwxNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgICBlbGZfaGVhZGVyID0gKEVsZjY0X0VoZHIgKikgZmlsZV9jb250ZW50czsKKyAgICpvc3ZlcnNpb24gPSAwOworIAorLSAgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisrICBiZSA9IChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCKTsKKysKKysgIGlmIChyZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkgIT0gRVRfRFlOKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIG5vdCBhIHNoYXJlZCBvYmplY3QgZmlsZSAoVHlwZTogJWQpLlxuIiksIGZpbGVfbmFtZSwKKy0JICAgICBlbGZfaGVhZGVyLT5lX3R5cGUpOworKwkgICAgIHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSk7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgIC8qIEdldCBpbmZvcm1hdGlvbiBmcm9tIGVsZiBwcm9ncmFtIGhlYWRlci4gICovCistICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChlbGZfaGVhZGVyLT5lX3Bob2ZmICsgZmlsZV9jb250ZW50cyk7CisrICBlbGZfcGhlYWRlciA9IChFbGY2NF9QaGRyICopIChyZWFkNjQoZWxmX2hlYWRlci0+ZV9waG9mZiwgYmUpICsgZmlsZV9jb250ZW50cyk7CisgICBjaGVja19wdHIgKGVsZl9waGVhZGVyKTsKKyAKKyAgIC8qIFRoZSBsaWJyYXJ5IGlzIGFuIGVsZiBsaWJyYXJ5LCBub3cgc2VhcmNoIGZvciBzb25hbWUgYW5kCitAQCAtMjY2LDI3ICsyOTIsMjcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZHluYW1pY19zaXplID0gMDsKKyAgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSBOVUxMOworICAgZm9yIChpID0gMCwgc2VnbWVudCA9IGVsZl9waGVhZGVyOworLSAgICAgICBpIDwgZWxmX2hlYWRlci0+ZV9waG51bTsgaSsrLCBzZWdtZW50KyspCisrICAgICAgIGkgPCByZWFkMTYoZWxmX2hlYWRlci0+ZV9waG51bSwgYmUpOyBpKyssIHNlZ21lbnQrKykKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoc2VnbWVudCk7CisgCistICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisrICAgICAgc3dpdGNoIChyZWFkMzIoc2VnbWVudC0+cF90eXBlLCBiZSkpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorIAkgIGlmIChsb2FkYWRkciA9PSAoRWxmNjRfQWRkcikgLTEpCistCSAgICBsb2FkYWRkciA9IHNlZ21lbnQtPnBfdmFkZHIgLSBzZWdtZW50LT5wX29mZnNldDsKKysJICAgIGxvYWRhZGRyID0gcmVhZDY0KHNlZ21lbnQtPnBfdmFkZHIsIGJlKSAtIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0RZTkFNSUM6CisgCSAgaWYgKGR5bmFtaWNfYWRkcikKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorLQkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworLQkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGR5bmFtaWNfYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKKy0JICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworIAkgIGNoZWNrX3B0ciAocHJvZ3JhbV9pbnRlcnByZXRlcik7CisgCisgCSAgLyogQ2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggdG8gY2xhc3NpZnkgdGhlIGJpbmFyeS4gICovCitAQCAtMzAwLDIwICszMjYsMjEgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDMyKHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCistCQkJCQkJICAgICArIHNlZ21lbnQtPnBfb2Zmc2V0KTsKKy0JICAgICAgRWxmNjRfQWRkciBzaXplID0gc2VnbWVudC0+cF9maWxlc3o7CisrCQkJCQkJICAgICArIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKysJICAgICAgRWxmNjRfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisgCistCSAgICAgIHdoaWxlIChhYmlfbm90ZSBbMF0gIT0gNCB8fCBhYmlfbm90ZSBbMV0gIT0gMTYKKy0JCSAgICAgfHwgYWJpX25vdGUgWzJdICE9IDEKKysJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorKwkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CisrI3VuZGVmIFJPVU5ECisgI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZjY0X1dvcmQpIC0gMSkgJiAtc2l6ZW9mIChFbGY2NF9Xb3JkKSkKKyAJCSAgRWxmNjRfQWRkciBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGY2NF9Xb3JkKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorLQkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMF0sIGJlKSkKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMV0sIGJlKSk7CisgCisgCQkgIGlmIChzaXplIC0gMzIgPCBub3RlX3NpemUgfHwgbm90ZV9zaXplID09IDApCisgCQkgICAgeworQEAgLTMyNywxMCArMzU0LDEwIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJICAgICAgaWYgKHNpemUgPT0gMCkKKyAJCWJyZWFrOworIAorLQkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorLQkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKy0JCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICAgICpvc3ZlcnNpb24gPSAocmVhZDMyKGFiaV9ub3RlIFs0XSwgYmUpIDw8IDI0KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzVdLCBiZSkgJiAweGZmKSA8PCAxNikgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs2XSwgYmUpICYgMHhmZikgPDwgOCkgfAorKwkJCSAgIChyZWFkMzIoYWJpX25vdGUgWzddLCBiZSkgJiAweGZmKTsKKyAJICAgIH0KKyAJICBicmVhazsKKyAKK0BAIC0zNTQsMTMgKzM4MSwxMyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworICAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoZHluX2VudHJ5KTsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TVFJUQUIpCisrICAgICAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU1RSVEFCKQorIAl7CistCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBkeW5fZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcik7CisrCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkNjQoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSkgLSBsb2FkYWRkcik7CisgCSAgY2hlY2tfcHRyIChkeW5hbWljX3N0cmluZ3MpOworIAkgIGJyZWFrOworIAl9CitAQCAtMzcwLDE1ICszOTcsMTUgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgICByZXR1cm4gMTsKKyAKKyAgIC8qIE5vdyByZWFkIHRoZSBEVF9ORUVERUQgYW5kIERUX1NPTkFNRSBlbnRyaWVzLiAgKi8KKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCB8fCBkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysgICAgICBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQgfHwgcmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCXsKKy0JICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyByZWFkNjQoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSk7CisgCSAgY2hlY2tfcHRyIChuYW1lKTsKKyAKKy0JICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQpCisrCSAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEKQorIAkgICAgeworIAorIAkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCitAQCAtMzk1LDcgKzQyMiw3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJCX0KKyAJICAgIH0KKyAKKy0JICBlbHNlIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJICBlbHNlIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJICAgICpzb25hbWUgPSB4c3RyZHVwIChuYW1lKTsKKyAKKyAJICAvKiBEbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZD8gICovCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC0xNjksNyArMTY5LDggQEAgcHJvY2Vzc19maWxlIChjb25zdCBjaGFyICpyZWFsX2ZpbGVfbmFtZQorICAgICAgIHJldCA9IDE7CisgICAgIH0KKyAgIC8qIExpYnJhcmllcyBoYXZlIHRvIGJlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworLSAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKysgIGVsc2UgaWYgKChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTVNCICYmIGJlMTZ0b2goZWxmX2hlYWRlci0+ZV90eXBlKSAhPSBFVF9EWU4pIHx8CisrICAgICAgKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJMU0IgJiYgbGUxNnRvaChlbGZfaGVhZGVyLT5lX3R5cGUpICE9IEVUX0RZTikpCisgICAgIHJldCA9IDE7CisgICBlbHNlIGlmIChwcm9jZXNzX2VsZl9maWxlIChmaWxlX25hbWUsIGxpYiwgZmxhZywgb3N2ZXJzaW9uLCBzb25hbWUsCisgCQkJICAgICBmaWxlX2NvbnRlbnRzLCBzdGF0YnVmLnN0X3NpemUpKQorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCitAQCAtMzksNiArMzksMjkgQEAKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisrZXh0ZXJuIGludCBiZTsKKysKKytzdGF0aWMgdWludDE2X3Qgd3JpdGUxNih1aW50MTZfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGh0b2JlMTYoeCk7CisrICByZXR1cm4gaHRvbGUxNih4KTsKKyt9CisrCisrc3RhdGljIHVpbnQzMl90IHdyaXRlMzIodWludDMyX3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBodG9iZTMyKHgpOworKyAgcmV0dXJuIGh0b2xlMzIoeCk7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCB3cml0ZTY0KHVpbnQ2NF90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gaHRvYmU2NCh4KTsKKysgIHJldHVybiBodG9sZTY0KHgpOworK30KKysKKyBzdHJ1Y3QgY2FjaGVfZW50cnkKKyB7CisgICBjaGFyICpsaWI7CQkJLyogTGlicmFyeSBuYW1lLiAgKi8KK0BAIC0yNzksNyArMzAyLDEyIEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAvKiBOdW1iZXIgb2Ygbm9ybWFsIGNhY2hlIGVudHJpZXMuICAqLworICAgaW50IGNhY2hlX2VudHJ5X29sZF9jb3VudCA9IDA7CisgCistICBmb3IgKGVudHJ5ID0gZW50cmllczsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkKKysgICAgaWYgKGJlKQorKyAgICAgIHByaW50Zigic2F2aW5nIGNhY2hlIGluIGJpZyBlbmRpYW4gZW5jb2RpbmdcbiIpOworKyAgICBlbHNlCisrICAgICAgcHJpbnRmKCJzYXZpbmcgY2FjaGUgaW4gbGl0dGxlIGVuZGlhbiBlbmNvZGluZ1xuIik7CisrCisrICAgIGZvciAoZW50cnkgPSBlbnRyaWVzOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KQorICAgICB7CisgICAgICAgLyogQWNjb3VudCB0aGUgZmluYWwgTlVMcy4gICovCisgICAgICAgdG90YWxfc3RybGVuICs9IHN0cmxlbiAoZW50cnktPmxpYikgKyBzdHJsZW4gKGVudHJ5LT5wYXRoKSArIDI7CitAQCAtMzEwLDcgKzMzOCw3IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgbWVtc2V0IChmaWxlX2VudHJpZXMsICdcMCcsIHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGUpKTsKKyAgICAgICBtZW1jcHkgKGZpbGVfZW50cmllcy0+bWFnaWMsIENBQ0hFTUFHSUMsIHNpemVvZiBDQUNIRU1BR0lDIC0gMSk7CisgCistICAgICAgZmlsZV9lbnRyaWVzLT5ubGlicyA9IGNhY2hlX2VudHJ5X29sZF9jb3VudDsKKysgICAgICBmaWxlX2VudHJpZXMtPm5saWJzID0gd3JpdGUzMihjYWNoZV9lbnRyeV9vbGRfY291bnQsIGJlKTsKKyAgICAgfQorIAorICAgc3RydWN0IGNhY2hlX2ZpbGVfbmV3ICpmaWxlX2VudHJpZXNfbmV3ID0gTlVMTDsKK0BAIC0zMzAsOCArMzU4LDggQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICBtZW1jcHkgKGZpbGVfZW50cmllc19uZXctPnZlcnNpb24sIENBQ0hFX1ZFUlNJT04sCisgCSAgICAgIHNpemVvZiBDQUNIRV9WRVJTSU9OIC0gMSk7CisgCistICAgICAgZmlsZV9lbnRyaWVzX25ldy0+bmxpYnMgPSBjYWNoZV9lbnRyeV9jb3VudDsKKy0gICAgICBmaWxlX2VudHJpZXNfbmV3LT5sZW5fc3RyaW5ncyA9IHRvdGFsX3N0cmxlbjsKKysgICAgICBmaWxlX2VudHJpZXNfbmV3LT5ubGlicyA9IHdyaXRlMzIoY2FjaGVfZW50cnlfY291bnQsIGJlKTsKKysgICAgICBmaWxlX2VudHJpZXNfbmV3LT5sZW5fc3RyaW5ncyA9IHdyaXRlMzIodG90YWxfc3RybGVuLCBiZSk7CisgICAgIH0KKyAKKyAgIC8qIFBhZCBmb3IgYWxpZ25tZW50IG9mIGNhY2hlX2ZpbGVfbmV3LiAgKi8KK0BAIC0zNTgsOSArMzg2LDkgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAgICAgICAvKiBGaXJzdCB0aGUgbGlicmFyeS4gICovCisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMiAmJiBlbnRyeS0+aHdjYXAgPT0gMCkKKyAJeworLQkgIGZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS5mbGFncyA9IGVudHJ5LT5mbGFnczsKKysJICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0uZmxhZ3MgPSB3cml0ZTMyKGVudHJ5LT5mbGFncywgYmUpOworIAkgIC8qIFhYWDogQWN0dWFsbHkgd2UgY2FuIG9wdGltaXplIGhlcmUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzLiAgKi8KKy0JICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0ua2V5ID0gc3RyX29mZnNldCArIHBhZDsKKysJICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0ua2V5ID0gd3JpdGUzMihzdHJfb2Zmc2V0ICsgcGFkLCBiZSk7CisgCX0KKyAgICAgICBpZiAob3B0X2Zvcm1hdCAhPSAwKQorIAl7CitAQCAtMzY4LDEwICszOTYsMTAgQEAgc2F2ZV9jYWNoZSAoY29uc3QgY2hhciAqY2FjaGVfbmFtZSkKKyAJICAgICBub3QgZG9pbmcgc28gbWFrZXMgdGhlIGNvZGUgZWFzaWVyLCB0aGUgc3RyaW5nIHRhYmxlCisgCSAgICAgYWx3YXlzIGJlZ2lucyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aGUgbmV3IGNhY2hlCisgCSAgICAgc3RydWN0LiAgKi8KKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmZsYWdzID0gZW50cnktPmZsYWdzOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ub3N2ZXJzaW9uID0gZW50cnktPm9zdmVyc2lvbjsKKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmh3Y2FwID0gZW50cnktPmh3Y2FwOworLQkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ua2V5ID0gc3RyX29mZnNldDsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmZsYWdzID0gd3JpdGUzMihlbnRyeS0+ZmxhZ3MsIGJlKTsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLm9zdmVyc2lvbiA9IHdyaXRlMzIoZW50cnktPm9zdmVyc2lvbiwgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10uaHdjYXAgPSB3cml0ZTY0KGVudHJ5LT5od2NhcCwgYmUpOworKwkgIGZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10ua2V5ID0gd3JpdGUzMihzdHJfb2Zmc2V0LCBiZSk7CisgCX0KKyAKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChlbnRyeS0+bGliKSArIDE7CitAQCAtMzc5LDkgKzQwNyw5IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgc3RyX29mZnNldCArPSBsZW47CisgICAgICAgLyogVGhlbiB0aGUgcGF0aC4gICovCisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMiAmJiBlbnRyeS0+aHdjYXAgPT0gMCkKKy0JZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLnZhbHVlID0gc3RyX29mZnNldCArIHBhZDsKKysJZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLnZhbHVlID0gd3JpdGUzMihzdHJfb2Zmc2V0ICsgcGFkLCBiZSk7CisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMCkKKy0JZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS52YWx1ZSA9IHN0cl9vZmZzZXQ7CisrCWZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10udmFsdWUgPSB3cml0ZTMyKHN0cl9vZmZzZXQsIGJlKTsKKyAgICAgICBsZW4gPSBzdHJsZW4gKGVudHJ5LT5wYXRoKSArIDE7CisgICAgICAgc3RyID0gbWVtcGNweSAoc3RyLCBlbnRyeS0+cGF0aCwgbGVuKTsKKyAgICAgICBzdHJfb2Zmc2V0ICs9IGxlbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlY2ZlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0ZpeCBwcm9ibGVtIGR1cmluZyBwYXJzaW5nIG9mIEVMRiBoZWFkZXJzIGZvciA2NGJpdCBvbiBiaWctZW5kaWFuLgorU29tZSBoZWFkZXIgZmllbGRzIHdlcmUgcmVhZCB3aXRoIHdyb25nIHNpemUuCisKKzIwMTQvMTAvMjQKK1BhciBPbHNzb24gPFBhci5PbHNzb25Ad2luZHJpdmVyLmNvbT4KK1NoYW4gSGFpIDxzaGFuLmhhaUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvcmVhZGVsZmxpYi5jIGIvcmVhZGVsZmxpYi5jCitpbmRleCAzZjViMjViLi4wYmYwZGUzIDEwMDY0NAorLS0tIGEvcmVhZGVsZmxpYi5jCisrKysgYi9yZWFkZWxmbGliLmMKK0BAIC0yNjEsOCArMjYxLDggQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorICAgaW50IGk7CisgICB1bnNpZ25lZCBpbnQgajsKKyAgIEVsZjY0X0FkZHIgbG9hZGFkZHI7CistICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworLSAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKysgIEVsZjY0X0FkZHIgZHluYW1pY19hZGRyOworKyAgRWxmNjRfWHdvcmQgZHluYW1pY19zaXplOworICAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKyAKKyAgIEVsZjY0X0VoZHIgKmVsZl9oZWFkZXI7CitAQCAtMzExLDcgKzMxMSw3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworIAorIAkgIGR5bmFtaWNfYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpOworLQkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworKwkgIGR5bmFtaWNfc2l6ZSA9IHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAkgIGJyZWFrOworIAorIAljYXNlIFBUX0lOVEVSUDoKK0BAIC0zMjksMTEgKzMyOSwxMSBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgCSAgYnJlYWs7CisgCisgCWNhc2UgUFRfTk9URToKKy0JICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDMyKHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorKwkgIGlmICghKm9zdmVyc2lvbiAmJiByZWFkNjQoc2VnbWVudC0+cF9maWxlc3osIGJlKSA+PSAzMiAmJiByZWFkNjQoc2VnbWVudC0+cF9hbGlnbiwgYmUpID49IDQpCisgCSAgICB7CisgCSAgICAgIEVsZjY0X1dvcmQgKmFiaV9ub3RlID0gKEVsZjY0X1dvcmQgKikgKGZpbGVfY29udGVudHMKKyAJCQkJCQkgICAgICsgcmVhZDY0KHNlZ21lbnQtPnBfb2Zmc2V0LCBiZSkpOworLQkgICAgICBFbGY2NF9BZGRyIHNpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKysJICAgICAgRWxmNjRfWHdvcmQgc2l6ZSA9IHJlYWQ2NChzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAorIAkgICAgICB3aGlsZSAocmVhZDMyKGFiaV9ub3RlIFswXSwgYmUpICE9IDQgfHwgcmVhZDMyKGFiaV9ub3RlIFsxXSwgYmUpICE9IDE2CisgCQkgICAgIHx8IHJlYWQzMihhYmlfbm90ZSBbMl0sIGJlKSAhPSAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4YjJjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuZXNzLWhlYWRlci5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtmaXggcG9reSBwYXRjaF0KKworVGhpcyBwYXRjaCBmaXhlcyBidWlsZCBpc3N1ZXMgd2l0aCBhIHByZXZpb3VzIGVuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIG9uCitkaXN0cm9zIHRoYXQgZG9uJ3QgaGF2ZSBtYWNyb3MgcmVmZXJlbmNlZAorCis3LzIwLzIwMTEKK01hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2VuZGlhbl9leHRyYS5oIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuX2V4dHJhLmgKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZW5kaWFuX2V4dHJhLmgJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbl9leHRyYS5oCTIwMTEtMDctMTkgMTg6MDk6MTQuMzIzMDQ4NDE3IC0wNTAwCitAQCAtMCwwICsxLDY0IEBACisrLyogQ29weXJpZ2h0IChDKSAxOTkyLCAxOTk2LCAxOTk3LCAyMDAwLCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrCisrI2lmbmRlZglfRU5ESUFOX0VYVFJBX0gKKysjZGVmaW5lCV9FTkRJQU5fRVhUUkFfSAkxCisrCisrLyogRG9uJ3QgcmVkZWZpbmUgdGhlc2UgbWFjcm9zIGlmIHRoZXkgYWxyZWFkeSBleGlzdCAqLworKyNpZm5kZWYgaHRvYmUxNgorKyNpZmRlZiBfX1VTRV9CU0QKKysvKiBDb252ZXJzaW9uIGludGVyZmFjZXMuICAqLworKyMgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysKKysjIGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjICBkZWZpbmUgaHRvYmUxNih4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBodG9sZTE2KHgpICh4KQorKyMgIGRlZmluZSBiZTE2dG9oKHgpIF9fYnN3YXBfMTYgKHgpCisrIyAgZGVmaW5lIGxlMTZ0b2goeCkgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlMzIoeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgaHRvbGUzMih4KSAoeCkKKysjICBkZWZpbmUgYmUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorKyMgIGRlZmluZSBsZTMydG9oKHgpICh4KQorKworKyMgIGRlZmluZSBodG9iZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGh0b2xlNjQoeCkgKHgpCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKysjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKysjIGVsc2UKKysjICBkZWZpbmUgaHRvYmUxNih4KSAoeCkKKysjICBkZWZpbmUgaHRvbGUxNih4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBiZTE2dG9oKHgpICh4KQorKyMgIGRlZmluZSBsZTE2dG9oKHgpIF9fYnN3YXBfMTYgKHgpCisrCisrIyAgZGVmaW5lIGh0b2JlMzIoeCkgKHgpCisrIyAgZGVmaW5lIGh0b2xlMzIoeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKysjICBkZWZpbmUgbGUzMnRvaCh4KSBfX2Jzd2FwXzMyICh4KQorKworKyMgIGRlZmluZSBodG9iZTY0KHgpICh4KQorKyMgIGRlZmluZSBodG9sZTY0KHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgX19ic3dhcF82NCAoeCkKKysjIGVuZGlmCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2VuZGlmCS8qIGVuZGlhbl9leHRyYS5oICovCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ3MDQxMzAxIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCTIwMTEtMDctMTkgMTg6MjI6NTQuMTE4MDQ4MDY0IC0wNTAwCitAQCAtMzksNiArMzksOCBAQAorICMgZGVmaW5lIE5fKG1zZ2lkKSAgbXNnaWQKKyAjZGVmaW5lIF8obXNnKSBtc2cKKyAKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgZXh0ZXJuIGludCBiZTsKKyAKKyBzdGF0aWMgdWludDE2X3Qgd3JpdGUxNih1aW50MTZfdCB4LCBpbnQgYmUpCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ2MDQxNTkzIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkZWxmbGliLmMJMjAxMS0wNy0xOSAxODoyMzowNS4zMjQwNTk4NzUgLTA1MDAKK0BAIC0yNSw2ICsyNSw5IEBACisgCisgLyogY2hlY2tfcHRyIGNoZWNrcyB0aGF0IGEgcG9pbnRlciBpcyBpbiB0aGUgbW1hcGVkIGZpbGUgYW5kIGRvZXNuJ3QKKyAgICBwb2ludCBvdXRzaWRlIGl0LiAgKi8KKysKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgI3VuZGVmIGNoZWNrX3B0cgorICNkZWZpbmUgY2hlY2tfcHRyKHB0cikJCQkJCQlcCisgZG8JCQkJCQkJCVwKK2RpZmYgLXB1ck4gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMJMjAxMS0wNy0xOSAxODoyMToyOC4zNDYwNDE1OTMgLTA1MDAKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYwkyMDExLTA3LTE5IDE4OjIzOjIzLjg3NzA0NjIxMCAtMDUwMAorQEAgLTQwLDYgKzQwLDggQEAKKyAKKyAjaW5jbHVkZSAibGRjb25maWcuaCIKKyAKKysjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisrCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisgI2RlZmluZSBFbGYzMl9DTEFTUyBFTEZDTEFTUzMyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2ZsYWdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTlhYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitUaGUgbmF0aXZlIHZlcnNpb24gb2YgbGRjb25maWcgd2FzIHVzaW5nIG5hdGl2ZSBkZWZpbml0aW9uIG9mIExEX1NPIChpLmUuIAorbGQtbGludXgteDg2LTY0LnNvLjIgKSB3aGljaCBpcyBub3QgY29ycmVjdCBmb3IgZG9pbmcgdGhlIGNyb3NzIGxkY29uZmlnLgorVGhpcyB3YXMgY2F1c2luZyBsaWJjLnNvIG9uIHRoZSB0YXJnZXQgbWFya2VkIGFzIEVMRiBsaWIgcmF0aGVyIHRoYW4gCitGTEFHX0VMRl9MSUJDNiBpbiB0aGUgbGQuc28uY2FjaGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvNAorCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC01MSw2ICs1MSwxMCBAQCBzdHJ1Y3Qga25vd25fbmFtZXMKKyAgIGludCBmbGFnOworIH07CisgCisrLyogZG9uJ3QgdXNlIGhvc3QncyBkZWZpbml0aW9uIG9mIExEX1NPICovCisrI3VuZGVmIExEX1NPIAorKyNkZWZpbmUgTERfU08gImxkLnNvLjEiCisrCisgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBpbnRlcnByZXRlcnNbXSA9CisgeworICAgeyAiL2xpYi8iIExEX1NPLCBGTEFHX0VMRl9MSUJDNiB9LApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1kZWZhdWx0LXRvLWFsbC1tdWx0aWxpYi1kaXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1kZWZhdWx0LXRvLWFsbC1tdWx0aWxpYi1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDRmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworbWFrZSBsZGNvbmZpZyBkZWZhdWx0IHRvIGJvdGggL2xpYisvdXNyL2xpYiwgL2xpYjMyKy91c3IvbGliMzIgYW5kCisvbGliNjQrL3Vzci9saWI2NCBvbiBiaS1BQkkgYXJjaGl0ZWN0dXJlcy4KKworLS0tCisgbGRjb25maWcuYyB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLXVycE4gYS9sZGNvbmZpZy5jIGIvbGRjb25maWcuYworLS0tIGEvbGRjb25maWcuYworKysrIGIvbGRjb25maWcuYworQEAgLTUyLDcgKzUyLDExIEBACisgCisgI2RlZmluZSBTWVNDT05GRElSICIvZXRjIgorICNkZWZpbmUgTElCRElSICIvdXNyL2xpYiIKKysjZGVmaW5lIExJQkRJUjMyICIvdXNyL2xpYjMyIgorKyNkZWZpbmUgTElCRElSNjQgIi91c3IvbGliNjQiCisgI2RlZmluZSBTTElCRElSICIvbGliIgorKyNkZWZpbmUgU0xJQkRJUjMyICIvbGliMzIiCisrI2RlZmluZSBTTElCRElSNjQgIi9saWI2NCIKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCitAQCAtMTM3Myw2ICsxMzc3LDEyIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICBhZGRfc3lzdGVtX2RpciAoU0xJQkRJUik7CisgICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUiwgTElCRElSKSkKKyAJYWRkX3N5c3RlbV9kaXIgKExJQkRJUik7CisrICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVIzMik7CisrICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUjMyLCBMSUJESVIzMikpCisrCWFkZF9zeXN0ZW1fZGlyIChMSUJESVIzMik7CisrICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVI2NCk7CisrICAgICAgaWYgKHN0cmNtcCAoU0xJQkRJUjY0LCBMSUJESVI2NCkpCisrCWFkZF9zeXN0ZW1fZGlyIChMSUJESVI2NCk7CisgICAgIH0KKyAKKyAgIGNvbnN0IGNoYXIgKmF1eF9jYWNoZV9maWxlID0gX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFlNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5ODZlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2gKQEAgLTAsMCArMSw0NzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2VuYWJsZSBzdGFuZGFsb25lIGJ1aWxkaW5nIG9mIGxkY29uZmlnCisKKy0tLQorIGNhY2hlLmMgICAgICAgIHwgICAxMSArLQorIGNocm9vdF9jYW5vbi5jIHwgICAgNyArCisgZGwtY2FjaGUuYyAgICAgfCAgMjM1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGRsLWNhY2hlLmggICAgIHwgICAgMyAKKyBsZGNvbmZpZy5jICAgICB8ICAgMjcgKysrKy0tCisgcmVhZGxpYi5jICAgICAgfCAgICA3ICsKKyB4c3RyZHVwLmMgICAgICB8ICAgMTEgLS0KKyA3IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDI1NiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jYWNoZS5jCitAQCAtMTYsNiArMTYsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KK0BAIC0zMSw4ICszNCwxMCBAQAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKy0jaW5jbHVkZSA8ZGwtY2FjaGUuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysjaW5jbHVkZSAiZGwtY2FjaGUuaCIKKysjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisrI2RlZmluZSBfKG1zZykgbXNnCisgCisgc3RydWN0IGNhY2hlX2VudHJ5CisgeworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2hyb290X2Nhbm9uLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2hyb290X2Nhbm9uLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2Nocm9vdF9jYW5vbi5jCitAQCAtMTcsNiArMTcsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorQEAgLTI3LDcgKzMwLDkgQEAKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKworKyNkZWZpbmUgX19zZXRfZXJybm8oVmFsKSBlcnJubyA9IChWYWwpCisgCisgI2lmbmRlZiBQQVRIX01BWAorICNkZWZpbmUgUEFUSF9NQVggMTAyNAorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9kbC1jYWNoZS5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5jCitAQCAtMjAsMTIgKzIwLDEyIEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKy0jaW5jbHVkZSA8bGRzb2RlZnMuaD4KKysvLyNpbmNsdWRlICJsZHNvZGVmcy5oIgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxkbC1jYWNoZS5oPgorICNpbmNsdWRlIDxkbC1wcm9jaW5mby5oPgorIAorLSNpbmNsdWRlIDxzdGRpby1jb21tb24vX2l0b2EuaD4KKysvLyNpbmNsdWRlICJfaXRvYS5oIgorIAorICNpZm5kZWYgX0RMX1BMQVRGT1JNU19DT1VOVAorICMgZGVmaW5lIF9ETF9QTEFURk9STVNfQ09VTlQgMAorQEAgLTM5LDEwMyArMzksNyBAQCBzdGF0aWMgc2l6ZV90IGNhY2hlc2l6ZTsKKyAvKiAxIGlmIGNhY2hlX2RhdGEgKyBQVFIgcG9pbnRzIGludG8gdGhlIGNhY2hlLiAgKi8KKyAjZGVmaW5lIF9kbF9jYWNoZV92ZXJpZnlfcHRyKHB0cikgKHB0ciA8IGNhY2hlX2RhdGFfc2l6ZSkKKyAKKy0jZGVmaW5lIFNFQVJDSF9DQUNIRShjYWNoZSkgXAorLS8qIFdlIHVzZSBiaW5hcnkgc2VhcmNoIHNpbmNlIHRoZSB0YWJsZSBpcyBzb3J0ZWQgaW4gdGhlIGNhY2hlIGZpbGUuCSAgICAgIFwKKy0gICBUaGUgZmlyc3QgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIHRhYmxlIGlzIHJldHVybmVkLgkJCSAgICAgIFwKKy0gICBJdCBpcyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBzYW1lIGFsZ29yaXRobSBhcyB1c2VkIHdoaWxlIGdlbmVyYXRpbmcJICAgICAgXAorLSAgIHRoZSBjYWNoZSBmaWxlLiAgKi8JCQkJCQkJICAgICAgXAorLWRvCQkJCQkJCQkJICAgICAgXAorLSAgewkJCQkJCQkJCSAgICAgIFwKKy0gICAgbGVmdCA9IDA7CQkJCQkJCQkgICAgICBcCistICAgIHJpZ2h0ID0gY2FjaGUtPm5saWJzIC0gMTsJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGVmdCA8PSByaWdodCkJCQkJCQkgICAgICBcCistICAgICAgewkJCQkJCQkJCSAgICAgIFwKKy0JX190eXBlb2ZfXyAoY2FjaGUtPmxpYnNbMF0ua2V5KSBrZXk7CQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCW1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCWtleSA9IGNhY2hlLT5saWJzW21pZGRsZV0ua2V5OwkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JLyogTWFrZSBzdXJlIHN0cmluZyB0YWJsZSBpbmRpY2VzIGFyZSBub3QgYm9ndXMgYmVmb3JlIHVzaW5nCSAgICAgIFwKKy0JICAgdGhlbS4gICovCQkJCQkJCSAgICAgIFwKKy0JaWYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGtleSkpCQkJCSAgICAgIFwKKy0JICB7CQkJCQkJCQkgICAgICBcCistCSAgICBjbXByZXMgPSAxOwkJCQkJCQkgICAgICBcCistCSAgICBicmVhazsJCQkJCQkJICAgICAgXAorLQkgIH0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCS8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGVudHJ5IHdpdGggdGhlIGtleS4gICovCQkJICAgICAgXAorLQljbXByZXMgPSBfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsga2V5KTsJCSAgICAgIFwKKy0JaWYgKF9fYnVpbHRpbl9leHBlY3QgKGNtcHJlcyA9PSAwLCAwKSkJCQkJICAgICAgXAorLQkgIHsJCQkJCQkJCSAgICAgIFwKKy0JICAgIC8qIEZvdW5kIGl0LiAgTEVGVCBub3cgbWFya3MgdGhlIGxhc3QgZW50cnkgZm9yIHdoaWNoIHdlCSAgICAgIFwKKy0JICAgICAgIGtub3cgdGhlIG5hbWUgaXMgY29ycmVjdC4gICovCQkJCSAgICAgIFwKKy0JICAgIGxlZnQgPSBtaWRkbGU7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JICAgIC8qIFRoZXJlIG1pZ2h0IGJlIGVudHJpZXMgd2l0aCB0aGlzIG5hbWUgYmVmb3JlIHRoZSBvbmUgd2UJICAgICAgXAorLQkgICAgICAgZm91bmQuICBTbyB3ZSBoYXZlIHRvIGZpbmQgdGhlIGJlZ2lubmluZy4gICovCQkgICAgICBcCistCSAgICB3aGlsZSAobWlkZGxlID4gMCkJCQkJCQkgICAgICBcCistCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JCV9fdHlwZW9mX18gKGNhY2hlLT5saWJzWzBdLmtleSkga2V5OwkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQlrZXkgPSBjYWNoZS0+bGlic1ttaWRkbGUgLSAxXS5rZXk7CQkJICAgICAgXAorLQkJLyogTWFrZSBzdXJlIHN0cmluZyB0YWJsZSBpbmRpY2VzIGFyZSBub3QgYm9ndXMgYmVmb3JlCSAgICAgIFwKKy0JCSAgIHVzaW5nIHRoZW0uICAqLwkJCQkJICAgICAgXAorLQkJaWYgKCEgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGtleSkJCQkgICAgICBcCistCQkgICAgLyogQWN0dWFsbHkgY29tcGFyZSB0aGUgZW50cnkuICAqLwkJCSAgICAgIFwKKy0JCSAgICB8fCBfZGxfY2FjaGVfbGliY21wIChuYW1lLCBjYWNoZV9kYXRhICsga2V5KSAhPSAwKQkgICAgICBcCistCQkgIGJyZWFrOwkJCQkJCSAgICAgIFwKKy0JCS0tbWlkZGxlOwkJCQkJCSAgICAgIFwKKy0JICAgICAgfQkJCQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JICAgIGRvCQkJCQkJCQkgICAgICBcCistCSAgICAgIHsJCQkJCQkJCSAgICAgIFwKKy0JCWludCBmbGFnczsJCQkJCQkgICAgICBcCistCQlfX3R5cGVvZl9fIChjYWNoZS0+bGlic1swXSkgKmxpYiA9ICZjYWNoZS0+bGlic1ttaWRkbGVdOyAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQkvKiBPbmx5IHBlcmZvcm0gdGhlIG5hbWUgdGVzdCBpZiBuZWNlc3NhcnkuICAqLwkJICAgICAgXAorLQkJaWYgKG1pZGRsZSA+IGxlZnQJCQkJCSAgICAgIFwKKy0JCSAgICAvKiBXZSBoYXZlbid0IHNlZW4gdGhpcyBzdHJpbmcgc28gZmFyLiAgVGVzdCB3aGV0aGVyIHRoZSAgXAorLQkJICAgICAgIGluZGV4IGlzIG9rIGFuZCB3aGV0aGVyIHRoZSBuYW1lIG1hdGNoZXMuICBPdGhlcndpc2UgICBcCistCQkgICAgICAgd2UgYXJlIGRvbmUuICAqLwkJCQkJICAgICAgXAorLQkJICAgICYmICghIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChsaWItPmtleSkJCSAgICAgIFwKKy0JCQl8fCAoX2RsX2NhY2hlX2xpYmNtcCAobmFtZSwgY2FjaGVfZGF0YSArIGxpYi0+a2V5KSAgICBcCistCQkJICAgICE9IDApKSkJCQkJCSAgICAgIFwKKy0JCSAgYnJlYWs7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCWZsYWdzID0gbGliLT5mbGFnczsJCQkJCSAgICAgIFwKKy0JCWlmIChfZGxfY2FjaGVfY2hlY2tfZmxhZ3MgKGZsYWdzKQkJCSAgICAgIFwKKy0JCSAgICAmJiBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAobGliLT52YWx1ZSkpCQkgICAgICBcCistCQkgIHsJCQkJCQkJICAgICAgXAorLQkJICAgIGlmIChiZXN0ID09IE5VTEwgfHwgZmxhZ3MgPT0gR0xSTyhkbF9jb3JyZWN0X2NhY2hlX2lkKSkgICBcCistCQkgICAgICB7CQkJCQkJCSAgICAgIFwKKy0JCQlIV0NBUF9DSEVDSzsJCQkJCSAgICAgIFwKKy0JCQliZXN0ID0gY2FjaGVfZGF0YSArIGxpYi0+dmFsdWU7CQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0JCQlpZiAoZmxhZ3MgPT0gR0xSTyhkbF9jb3JyZWN0X2NhY2hlX2lkKSkJCSAgICAgIFwKKy0JCQkgIC8qIFdlJ3ZlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGZvciB0aGUgc2hhcmVkCSAgICAgIFwKKy0JCQkgICAgIG9iamVjdCBhbmQgbm8gZ2VuZXJhbCBgRUxGJyByZWxlYXNlLiAgU3RvcAkgICAgICBcCistCQkJICAgICBzZWFyY2hpbmcuICAqLwkJCQkgICAgICBcCistCQkJICBicmVhazsJCQkJCSAgICAgIFwKKy0JCSAgICAgIH0JCQkJCQkJICAgICAgXAorLQkJICB9CQkJCQkJCSAgICAgIFwKKy0JICAgICAgfQkJCQkJCQkJICAgICAgXAorLQkgICAgd2hpbGUgKCsrbWlkZGxlIDw9IHJpZ2h0KTsJCQkJCSAgICAgIFwKKy0JICAgIGJyZWFrOwkJCQkJCQkgICAgICBcCistCX0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCWlmIChjbXByZXMgPCAwKQkJCQkJCQkgICAgICBcCistCSAgbGVmdCA9IG1pZGRsZSArIDE7CQkJCQkJICAgICAgXAorLQllbHNlCQkJCQkJCQkgICAgICBcCistCSAgcmlnaHQgPSBtaWRkbGUgLSAxOwkJCQkJCSAgICAgIFwKKy0gICAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfQkJCQkJCQkJCSAgICAgIFwKKy13aGlsZSAoMCkKKy0KKy0KKyBpbnQKKy1pbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKKyB7CisgICB3aGlsZSAoKnAxICE9ICdcMCcpCitAQCAtMTcyLDEzOSArNzYsMyBAQCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgCisgICAgIH0KKyAgIHJldHVybiAqcDEgLSAqcDI7CisgfQorLQorLQorLS8qIExvb2sgdXAgTkFNRSBpbiBsZC5zby5jYWNoZSBhbmQgcmV0dXJuIHRoZSBmaWxlIG5hbWUgc3RvcmVkIHRoZXJlLAorLSAgIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZC4gICovCistCistY29uc3QgY2hhciAqCistaW50ZXJuYWxfZnVuY3Rpb24KKy1fZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisteworLSAgaW50IGxlZnQsIHJpZ2h0LCBtaWRkbGU7CistICBpbnQgY21wcmVzOworLSAgY29uc3QgY2hhciAqY2FjaGVfZGF0YTsKKy0gIHVpbnQzMl90IGNhY2hlX2RhdGFfc2l6ZTsKKy0gIGNvbnN0IGNoYXIgKmJlc3Q7CistCistICAvKiBQcmludCBhIG1lc3NhZ2UgaWYgdGhlIGxvYWRpbmcgb2YgbGlicyBpcyB0cmFjZWQuICAqLworLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsIDApKQorLSAgICBfZGxfZGVidWdfcHJpbnRmICgiIHNlYXJjaCBjYWNoZT0lc1xuIiwgTERfU09fQ0FDSEUpOworLQorLSAgaWYgKGNhY2hlID09IE5VTEwpCistICAgIHsKKy0gICAgICAvKiBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gICovCistICAgICAgdm9pZCAqZmlsZSA9IF9kbF9zeXNkZXBfcmVhZF93aG9sZV9maWxlIChMRF9TT19DQUNIRSwgJmNhY2hlc2l6ZSwKKy0JCQkJCSAgICAgICBQUk9UX1JFQUQpOworLQorLSAgICAgIC8qIFdlIGNhbiBoYW5kbGUgdGhyZWUgZGlmZmVyZW50IGNhY2hlIGZpbGUgZm9ybWF0cyBoZXJlOgorLQkgLSB0aGUgb2xkIGxpYmM1L2dsaWJjMi4wLzIuMSBmb3JtYXQKKy0JIC0gdGhlIG9sZCBmb3JtYXQgd2l0aCB0aGUgbmV3IGZvcm1hdCBpbiBpdAorLQkgLSBvbmx5IHRoZSBuZXcgZm9ybWF0CistCSBUaGUgZm9sbG93aW5nIGNoZWNrcyBpZiB0aGUgY2FjaGUgY29udGFpbnMgYW55IG9mIHRoZXNlIGZvcm1hdHMuICAqLworLSAgICAgIGlmIChmaWxlICE9IE1BUF9GQUlMRUQgJiYgY2FjaGVzaXplID4gc2l6ZW9mICpjYWNoZQorLQkgICYmIG1lbWNtcCAoZmlsZSwgQ0FDSEVNQUdJQywgc2l6ZW9mIENBQ0hFTUFHSUMgLSAxKSA9PSAwKQorLQl7CistCSAgc2l6ZV90IG9mZnNldDsKKy0JICAvKiBMb29rcyBvay4gICovCistCSAgY2FjaGUgPSBmaWxlOworLQorLQkgIC8qIENoZWNrIGZvciBuZXcgdmVyc2lvbi4gICovCistCSAgb2Zmc2V0ID0gQUxJR05fQ0FDSEUgKHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGUpCistCQkJCSsgY2FjaGUtPm5saWJzICogc2l6ZW9mIChzdHJ1Y3QgZmlsZV9lbnRyeSkpOworLQorLQkgIGNhY2hlX25ldyA9IChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcgKikgKCh2b2lkICopIGNhY2hlICsgb2Zmc2V0KTsKKy0JICBpZiAoY2FjaGVzaXplIDwgKG9mZnNldCArIHNpemVvZiAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSkKKy0JICAgICAgfHwgbWVtY21wIChjYWNoZV9uZXctPm1hZ2ljLCBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXLAorLQkJCSBzaXplb2YgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVyAtIDEpICE9IDApCistCSAgICBjYWNoZV9uZXcgPSAodm9pZCAqKSAtMTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKGZpbGUgIT0gTUFQX0ZBSUxFRCAmJiBjYWNoZXNpemUgPiBzaXplb2YgKmNhY2hlX25ldworLQkgICAgICAgJiYgbWVtY21wIChmaWxlLCBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXLAorLQkJCSAgc2l6ZW9mIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcgLSAxKSA9PSAwKQorLQl7CistCSAgY2FjaGVfbmV3ID0gZmlsZTsKKy0JICBjYWNoZSA9IGZpbGU7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICBpZiAoZmlsZSAhPSBNQVBfRkFJTEVEKQorLQkgICAgX19tdW5tYXAgKGZpbGUsIGNhY2hlc2l6ZSk7CistCSAgY2FjaGUgPSAodm9pZCAqKSAtMTsKKy0JfQorLQorLSAgICAgIGFzc2VydCAoY2FjaGUgIT0gTlVMTCk7CistICAgIH0KKy0KKy0gIGlmIChjYWNoZSA9PSAodm9pZCAqKSAtMSkKKy0gICAgLyogUHJldmlvdXNseSBsb29rZWQgZm9yIHRoZSBjYWNoZSBmaWxlIGFuZCBkaWRuJ3QgZmluZCBpdC4gICovCistICAgIHJldHVybiBOVUxMOworLQorLSAgYmVzdCA9IE5VTEw7CistCistICBpZiAoY2FjaGVfbmV3ICE9ICh2b2lkICopIC0xKQorLSAgICB7CistICAgICAgdWludDY0X3QgcGxhdGZvcm07CistCistICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBzdGFydC4gICovCistICAgICAgY2FjaGVfZGF0YSA9IChjb25zdCBjaGFyICopIGNhY2hlX25ldzsKKy0KKy0gICAgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgaG93IGxhcmdlIHRoZSBzdHJpbmcgdGFibGUgaXMuICAqLworLSAgICAgIGNhY2hlX2RhdGFfc2l6ZSA9IChjb25zdCBjaGFyICopIGNhY2hlICsgY2FjaGVzaXplIC0gY2FjaGVfZGF0YTsKKy0KKy0gICAgICBwbGF0Zm9ybSA9IF9kbF9zdHJpbmdfcGxhdGZvcm0gKEdMUk8oZGxfcGxhdGZvcm0pKTsKKy0gICAgICBpZiAocGxhdGZvcm0gIT0gKHVpbnQ2NF90KSAtMSkKKy0JcGxhdGZvcm0gPSAxVUxMIDw8IHBsYXRmb3JtOworLQorLSNkZWZpbmUgX0RMX0hXQ0FQX1RMU19NQVNLICgxTEwgPDwgNjMpCistICAgICAgdWludDY0X3QgaHdjYXBfZXhjbHVkZSA9IH4oKEdMUk8oZGxfaHdjYXApICYgR0xSTyhkbF9od2NhcF9tYXNrKSkKKy0JCQkJIHwgX0RMX0hXQ0FQX1BMQVRGT1JNIHwgX0RMX0hXQ0FQX1RMU19NQVNLKTsKKy0KKy0gICAgICAvKiBPbmx5IGFjY2VwdCBod2NhcCBpZiBpdCdzIGZvciB0aGUgcmlnaHQgcGxhdGZvcm0uICAqLworLSNkZWZpbmUgSFdDQVBfQ0hFQ0sgXAorLSAgICAgIGlmIChsaWItPmh3Y2FwICYgaHdjYXBfZXhjbHVkZSkJCQkJCSAgICAgIFwKKy0JY29udGludWU7CQkJCQkJCSAgICAgIFwKKy0gICAgICBpZiAoR0xSTyhkbF9vc3ZlcnNpb24pICYmIGxpYi0+b3N2ZXJzaW9uID4gR0xSTyhkbF9vc3ZlcnNpb24pKQkgICAgICBcCistCWNvbnRpbnVlOwkJCQkJCQkgICAgICBcCistICAgICAgaWYgKF9ETF9QTEFURk9STVNfQ09VTlQJCQkJCQkgICAgICBcCistCSAgJiYgKGxpYi0+aHdjYXAgJiBfRExfSFdDQVBfUExBVEZPUk0pICE9IDAJCQkgICAgICBcCistCSAgJiYgKGxpYi0+aHdjYXAgJiBfRExfSFdDQVBfUExBVEZPUk0pICE9IHBsYXRmb3JtKQkJICAgICAgXAorLQljb250aW51ZQorLSAgICAgIFNFQVJDSF9DQUNIRSAoY2FjaGVfbmV3KTsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgLyogVGhpcyBpcyB3aGVyZSB0aGUgc3RyaW5ncyBzdGFydC4gICovCistICAgICAgY2FjaGVfZGF0YSA9IChjb25zdCBjaGFyICopICZjYWNoZS0+bGlic1tjYWNoZS0+bmxpYnNdOworLQorLSAgICAgIC8qIE5vdyB3ZSBjYW4gY29tcHV0ZSBob3cgbGFyZ2UgdGhlIHN0cmluZyB0YWJsZSBpcy4gICovCistICAgICAgY2FjaGVfZGF0YV9zaXplID0gKGNvbnN0IGNoYXIgKikgY2FjaGUgKyBjYWNoZXNpemUgLSBjYWNoZV9kYXRhOworLQorLSN1bmRlZiBIV0NBUF9DSEVDSworLSNkZWZpbmUgSFdDQVBfQ0hFQ0sgZG8ge30gd2hpbGUgKDApCistICAgICAgU0VBUkNIX0NBQ0hFIChjYWNoZSk7CistICAgIH0KKy0KKy0gIC8qIFByaW50IG91ciByZXN1bHQgaWYgd2FudGVkLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLCAwKQorLSAgICAgICYmIGJlc3QgIT0gTlVMTCkKKy0gICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJlc3QpOworLQorLSAgcmV0dXJuIGJlc3Q7CistfQorLQorLSNpZm5kZWYgTUFQX0NPUFkKKy0vKiBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgTUFQX0NPUFkgd2UgY2Fubm90IGxlYXZlIHRoZSBmaWxlIG9wZW4KKy0gICBhbGwgdGhlIHRpbWUgc2luY2UgdGhpcyB3b3VsZCBjcmVhdGUgcHJvYmxlbXMgd2hlbiB0aGUgZmlsZSBpcyByZXBsYWNlZC4KKy0gICBUaGVyZWZvcmUgd2UgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBmaWxlIGFuZCBvcGVuIGl0IGFnYWluCistICAgb25jZSBuZWVkZWQuICAqLworLXZvaWQKKy1fZGxfdW5sb2FkX2NhY2hlICh2b2lkKQorLXsKKy0gIGlmIChjYWNoZSAhPSBOVUxMICYmIGNhY2hlICE9IChzdHJ1Y3QgY2FjaGVfZmlsZSAqKSAtMSkKKy0gICAgeworLSAgICAgIF9fbXVubWFwIChjYWNoZSwgY2FjaGVzaXplKTsKKy0gICAgICBjYWNoZSA9IE5VTEw7CistICAgIH0KKy19CistI2VuZGlmCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2RsLWNhY2hlLmgKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmgKK0BAIC0xMDEsNSArMTAxLDQgQEAgc3RydWN0IGNhY2hlX2ZpbGVfbmV3CisgKCgoYWRkcikgKyBfX2FsaWdub2ZfXyAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSAtMSkJXAorICAmICh+KF9fYWxpZ25vZl9fIChzdHJ1Y3QgY2FjaGVfZmlsZV9uZXcpIC0gMSkpKQorIAorLWV4dGVybiBpbnQgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKQorLSAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrZXh0ZXJuIGludCBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpOworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9sZGNvbmZpZy5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy5jCitAQCAtMTYsNiArMTYsOSBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNkZWZpbmUgUFJPQ0lORk9fQ0xBU1Mgc3RhdGljCisgI2luY2x1ZGUgPGFsbG9jYS5oPgorICNpbmNsdWRlIDxhcmdwLmg+CitAQCAtMzksMTAgKzQyLDIwIEBACisgI2luY2x1ZGUgPGdsb2IuaD4KKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CistI2luY2x1ZGUgPGRsLWNhY2hlLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrI2luY2x1ZGUgImRsLWNhY2hlLmgiCisrCisrI2luY2x1ZGUgImRsLXByb2NpbmZvLmgiCisrCisrI2luY2x1ZGUgImFyZ3AuaCIKKysKKysKKysjZGVmaW5lIFNZU0NPTkZESVIgIi9ldGMiCisrI2RlZmluZSBMSUJESVIgIi91c3IvbGliIgorKyNkZWZpbmUgU0xJQkRJUiAiL2xpYiIKKysjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisrI2RlZmluZSBfKG1zZykgbXNnCisgCistI2luY2x1ZGUgPGRsLXByb2NpbmZvLmg+CisgCisgI2lmZGVmIF9ETF9GSVJTVF9QTEFURk9STQorICMgZGVmaW5lIF9ETF9GSVJTVF9FWFRSQSAoX0RMX0ZJUlNUX1BMQVRGT1JNICsgX0RMX1BMQVRGT1JNU19DT1VOVCkKK0BAIC01NSw3ICs2OCw3IEBACisgI2VuZGlmCisgCisgLyogR2V0IGxpYmMgdmVyc2lvbiBudW1iZXIuICAqLworLSNpbmNsdWRlIDx2ZXJzaW9uLmg+CisrI2luY2x1ZGUgInZlcnNpb24uaCIKKyAKKyAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCisgCitAQCAtMTUyLDggKzE2NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1sKKyAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCB9CisgfTsKKyAKKy0jZGVmaW5lIFBST0NJTkZPX0NMQVNTIHN0YXRpYworLSNpbmNsdWRlIDxkbC1wcm9jaW5mby5jPgorKy8vI2RlZmluZSBQUk9DSU5GT19DTEFTUyBzdGF0aWMKKysvLyNpbmNsdWRlIDxkbC1wcm9jaW5mby5jPgorIAorIC8qIFNob3J0IGRlc2NyaXB0aW9uIG9mIHByb2dyYW0uICAqLworIHN0YXRpYyBjb25zdCBjaGFyIGRvY1tdID0gTl8oIkNvbmZpZ3VyZSBEeW5hbWljIExpbmtlciBSdW4gVGltZSBCaW5kaW5ncy4iKTsKK0BAIC0yOTEsNiArMzA0LDcgQEAgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcgorICAgcmV0dXJuIDA7CisgfQorIAorKyNkZWZpbmUgUkVQT1JUX0JVR1NfVE8gIm1haWxpbmcgbGlzdCA6IHBva3lAeW9jdG9wcm9qZWN0Lm9yZyIKKyAvKiBQcmludCBidWctcmVwb3J0aW5nIGluZm9ybWF0aW9uIGluIHRoZSBoZWxwIG1lc3NhZ2UuICAqLworIHN0YXRpYyBjaGFyICoKKyBtb3JlX2hlbHAgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorQEAgLTMxNSw3ICszMjksNyBAQCBGb3IgYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMsIHBsZWFzZSBzCisgc3RhdGljIHZvaWQKKyBwcmludF92ZXJzaW9uIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyB7CistICBmcHJpbnRmIChzdHJlYW0sICJsZGNvbmZpZyAlcyVzXG4iLCBQS0dWRVJTSU9OLCBWRVJTSU9OKTsKKysgIGZwcmludGYgKHN0cmVhbSwgImxkY29uZmlnIChIYWNrZWQgUG9reSBWZXJzaW9uKVxuIik7CisgICBmcHJpbnRmIChzdHJlYW0sIGdldHRleHQgKCJcCisgQ29weXJpZ2h0IChDKSAlcyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cblwKKyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOT1xuXAorQEAgLTEyMzMsNiArMTI0Nyw3IEBAIHNldF9od2NhcCAodm9pZCkKKyAgICAgaHdjYXBfbWFzayA9IHN0cnRvdWwgKG1hc2ssIE5VTEwsIDApOworIH0KKyAKKytjb25zdCBjaGFyIF9saWJjX2ludGxfZG9tYWlubmFtZVtdID0gImxpYmMiOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRsaWIuYworQEAgLTIyLDYgKzIyLDkgQEAKKyAgICBkZXZlbG9wbWVudCB2ZXJzaW9uLiAgQmVzaWRlcyB0aGUgc2ltcGxpZmljYXRpb24sIGl0IGhhcyBhbHNvIGJlZW4KKyAgICBtb2RpZmllZCB0byByZWFkIHNvbWUgb3RoZXIgZmlsZSBmb3JtYXRzLiAgKi8KKyAKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisgI2luY2x1ZGUgPGEub3V0Lmg+CisgI2luY2x1ZGUgPGVsZi5oPgorICNpbmNsdWRlIDxlcnJvci5oPgorQEAgLTM1LDcgKzM4LDkgQEAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8Z251L2xpYi1uYW1lcy5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKworKyNkZWZpbmUgXyhtc2cpIG1zZworIAorICNkZWZpbmUgRWxmMzJfQ0xBU1MgRUxGQ0xBU1MzMgorICNkZWZpbmUgRWxmNjRfQ0xBU1MgRUxGQ0xBU1M2NAorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEveHN0cmR1cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3hzdHJkdXAuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEveHN0cmR1cC5jCitAQCAtMTYsMTUgKzE2LDEwIEBACisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKyAKKy0jaWZkZWYgSEFWRV9DT05GSUdfSAorLSMgaW5jbHVkZSA8Y29uZmlnLmg+CistI2VuZGlmCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNlbmRpZgorIHZvaWQgKnhtYWxsb2MgKHNpemVfdCBuKSBfX1RIUk9XOworIGNoYXIgKnhzdHJkdXAgKGNoYXIgKnN0cmluZykgX19USFJPVzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiYzQxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDb21pbmcgZnJvbSB0aGlzIGJ1ZzogaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xMTE0OQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPjIwMTEvMDMvMjkKKworLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9sZGNvbmZpZy5jCQorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYwkKK0BAIC0xMzU5LDE0ICsxMzU5LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorICAgY29uc3QgY2hhciAqYXV4X2NhY2hlX2ZpbGUgPSBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEU7CisgICBpZiAob3B0X2Nocm9vdCkKKy0gICAgeworLSAgICAgIGF1eF9jYWNoZV9maWxlID0gY2hyb290X2Nhbm9uIChvcHRfY2hyb290LCBhdXhfY2FjaGVfZmlsZSk7CistICAgICAgaWYgKGF1eF9jYWNoZV9maWxlID09IE5VTEwpCistCWVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCBfKCJDYW4ndCBvcGVuIGNhY2hlIGZpbGUgJXNcbiIpLAorLQkgICAgICAgX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFKTsKKy0gICAgfQorKyAgICBhdXhfY2FjaGVfZmlsZSA9IGNocm9vdF9jYW5vbiAob3B0X2Nocm9vdCwgYXV4X2NhY2hlX2ZpbGUpOworIAorLSAgaWYgKCEgb3B0X2lnbm9yZV9hdXhfY2FjaGUpCisrICBpZiAoISBvcHRfaWdub3JlX2F1eF9jYWNoZSAmJiBhdXhfY2FjaGVfZmlsZSkKKyAgICAgbG9hZF9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKyAgIGVsc2UKKyAgICAgaW5pdF9hdXhfY2FjaGUgKCk7CitAQCAtMTM3Niw3ICsxMzcxLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgaWYgKG9wdF9idWlsZF9jYWNoZSkKKyAgICAgeworICAgICAgIHNhdmVfY2FjaGUgKGNhY2hlX2ZpbGUpOworLSAgICAgIHNhdmVfYXV4X2NhY2hlIChhdXhfY2FjaGVfZmlsZSk7CisrICAgICAgaWYgKGF1eF9jYWNoZV9maWxlKQorKyAgICAgICAgc2F2ZV9hdXhfY2FjaGUgKGF1eF9jYWNoZV9maWxlKTsKKyAgICAgfQorIAorICAgcmV0dXJuIDA7CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZV8yLjEyLjEuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzBiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiQSBzdGFuZGFsb25lIG5hdGl2ZSBsZGNvbmZpZyBidWlsZCIKKworTElDRU5TRSA9ICJHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vbGRjb25maWcuYztlbmRsaW5lPTE3O21kNT0xZDE1ZjIwOTM3YzA1NWNiNWRlMjMyOWE0YzA1NDM5OSIKKworU1JDX1VSSSA9ICJmaWxlOi8vbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8zMmFuZDY0Yml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZsYWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmRpYW4tbmVzc19oYW5kbGluZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoIFwKKyIKKworUFIgPSAicjIiCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UH06IgorCitpbmhlcml0IG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vJHtQTn0tJHtQVn0iCisKK2RvX2NvbXBpbGUgKCkgeworCSRDQyBsZGNvbmZpZy5jIC1zdGQ9Z251OTkgY2hyb290X2Nhbm9uLmMgeG1hbGxvYy5jIHhzdHJkdXAuYyBjYWNoZS5jIHJlYWRsaWIuYyAgLUkuIGRsLWNhY2hlLmMgLW8gbGRjb25maWcKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfS8KKwlpbnN0YWxsIGxkY29uZmlnICR7RH0vJHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKQEAgLTAsMCArMSw0NzQgQEAKK2E2NGwKK2FicworYWNjZXNzCitfX2FkanRpbWV4CithbGFybQorYWxwaGFzb3J0Cithcmd6X2FwcGVuZAorX19hcmd6X2NvdW50Cithcmd6X2NyZWF0ZV9zZXAKK2FyZ3pfaW5zZXJ0CitfX2FyZ3pfbmV4dAorYXJnel9uZXh0CitfX2FyZ3pfc3RyaW5naWZ5Cithcmd6X3N0cmluZ2lmeQorYXNwcmludGYKK2F0ZXhpdAorYXRvZgorYXRvaQorYmNtcAorYmNvcHkKK2JpbmRyZXN2cG9ydAorYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2J0b3djCitiemVybworY2FsbG9jCitjYW5vbmljYWxpemVfZmlsZV9uYW1lCitjYXRnZXRzCitjZmdldG9zcGVlZAorY2ZzZXRpc3BlZWQKK2Nmc2V0c3BlZWQKK2NobW9kCitjaG93bgorY2hyb290CitjbG9jaworY2xvc2UKK2Nsb3NlZGlyCitjbG9zZWxvZworY29uZnN0cgorY29ubmVjdAorZGFlbW9uCitkY2dldHRleHQKK2RpZmZ0aW1lCitkaXJmZAorZGlybmFtZQorZG5nZXR0ZXh0CitkdXAyCitlY3Z0CitlbmRncmVudAorZW5kbW50ZW50CitlbmRwd2VudAorZW5kdXRlbnQKK2VuZHV0eGVudAorZXBvbGxfY3RsCitlcnIKK2V0aGVyX2hvc3R0b24KK2V0aGVyX250b2hvc3QKK2V1aWRhY2Nlc3MKK2V4ZWN2CitmY2hkaXIKK2ZjaG1vZAorZmNobW9kYXQKK2ZjaG93bgorZmNob3duYXQKK2ZjbnRsCitmY3Z0CitmZGF0YXN5bmMKK2Zkb3BlbmRpcgorZmVvZl91bmxvY2tlZAorZmdldHNfdW5sb2NrZWQKK2ZnZXR4YXR0cgorZmluaXRlCitmbGlzdHhhdHRyCitmbG9jaworZmxvY2tmaWxlCitmbm1hdGNoCitmb3JrCitmcGF0aGNvbmYKK19fZnBlbmRpbmcKK2ZwcmludGYKK2ZyZWUKK2ZyZWVhZGRyaW5mbworZnJlZWlmYWRkcnMKK2ZzZWVrbworX19mc2V0bG9ja2luZworZnNldHhhdHRyCitmc3RhdDY0Citmc3RhdAorZnN0YXRmcworZnN5bmMKK2Z0ZWxsbworZnRpbWUKK2Z0cnVuY2F0ZQorZnVubG9ja2ZpbGUKK2Z1dGltZXMKK2Z1dGltZXNhdAorZ2FpX3N0cmVycm9yCitnY3Z0CitnZXRhZGRyaW5mbworZ2V0Y191bmxvY2tlZAorZ2V0Y3dkCitnZXRkZWxpbQorZ2V0ZG9tYWlubmFtZQorZ2V0ZHRhYmxlc2l6ZQorZ2V0ZWdpZAorZ2V0ZW52CitnZXRldWlkCitnZXRnaWQKK2dldGdyZW50CitnZXRncmVudF9yCitnZXRncmdpZF9yCitnZXRncm5hbQorZ2V0Z3JuYW1fcgorZ2V0Z3JvdXBsaXN0CitnZXRncm91cHMKK2dldGhvc3RieWFkZHJfcgorZ2V0aG9zdGJ5bmFtZTIKK2dldGhvc3RieW5hbWUKK2dldGhvc3RieW5hbWVfcgorZ2V0aG9zdGVudAorZ2V0aG9zdGlkCitnZXRob3N0bmFtZQorZ2V0aWZhZGRycworZ2V0bGluZQorZ2V0bG9hZGF2ZworZ2V0bW50ZW50CitnZXRtc2cKK2dldG5hbWVpbmZvCitnZXRuZXRieWFkZHJfcgorZ2V0bmV0Z3JlbnRfcgorZ2V0b3B0CitnZXRvcHRfbG9uZworZ2V0b3B0X2xvbmdfb25seQorZ2V0cGFnZXNpemUKK2dldHBhc3MKK2dldHBlZXJuYW1lCitnZXRwZ3JwCitnZXRwaWQKK2dldHBwaWQKK2dldHByb3RvZW50X3IKK2dldHB3ZW50CitnZXRwd2VudF9yCitnZXRwd25hbQorZ2V0cHduYW1fcgorZ2V0cHd1aWQKK2dldHB3dWlkX3IKK2dldHJlc3VpZAorZ2V0cmxpbWl0CitnZXRydXNhZ2UKK2dldHNlcnZieW5hbWUKK2dldHNlcnZieW5hbWVfcgorZ2V0c2VydmJ5cG9ydF9yCitnZXRzZXJ2ZW50CitnZXRzZXJ2ZW50X3IKK2dldHNwbmFtCitnZXRzcG5hbV9yCitnZXR0aW1lb2ZkYXkKK2dldHR0eWVudAorZ2V0dHR5bmFtCitnZXR1aWQKK2dldHVzZXJzaGVsbAorZ2V0dXRlbnQKK2dldHV0aWQKK2dldHV0bGluZQorZ2V0dXRtcAorZ2V0dXRtcHgKK2dldHV0eGVudAorZ2V0dXR4aWQKK2dldHV0eGxpbmUKK2dldHdkCitnZXR4YXR0cgorZ2xvYgorZ210aW1lCitnbXRpbWVfcgorZ3JhbnRwdAorZ3JvdXBfbWVtYmVyCitoZXJyb3IKK2hzdHJlcnJvcgoraWNvbnYKK2ljb252X29wZW4KK2lmX2ZyZWVuYW1laW5kZXgKK2lmX2luZGV4dG9uYW1lCitpZl9uYW1laW5kZXgKK2lmX25hbWV0b2luZGV4CitpbmRleAoraW5ldF9hZGRyCitpbmV0X2F0b24KK2luZXRfbnRvYQoraW5ldF9udG9wCitpbmV0X3B0b24KK2luaXRncm91cHMKK2lubmV0Z3IKK2lydXNlcm9rCitpc2FzY2lpCitpc2F0dHkKK2lzYmxhbmsKK2lzZ3JhcGgKK2lzaW5mCitpc25hbgoraXNwcmludAoraXNzcGFjZQoraXN3YWxudW0KK2lzd2NudHJsCitpc3djdHlwZQoraXN3cHJpbnQKK2lzd3NwYWNlCitpc3d1cHBlcgoraXN4ZGlnaXQKK2tpbGwKK2tpbGxwZworbGNob3duCitsY2twd2RmCitsZ2V0eGF0dHIKK2xpbmsKK2xpc3R4YXR0cgorbGxpc3R4YXR0cgorbG9jYWx0aW1lCitsb2NhbHRpbWVfcgorbG9ja2YKK2xyYW5kNDgKK2xzZWFyY2gKK2xzZWVrNjQKK2xzZXR4YXR0cgorbHN0YXQKK21hbGxpbmZvCittYWxsb2MKK21ibGVuCittYnJsZW4KK21icnRvd2MKK21ic2luaXQKK21ic3J0b3djcworbWJ0b3djCittZW1hbGlnbgorbWVtY2hyCittZW1jbXAKK21lbWNweQorbWVtbW92ZQorbWVtcGNweQorbWVtcmNocgorbWVtc2V0Citta2RpcgorbWtkaXJhdAorbWtkdGVtcAorbWtmaWZvCitta25vZAorbWtzdGVtcDY0Citta3N0ZW1wCitta3RpbWUKK21sb2NrCittbWFwCittdHJhY2UKK211bmxvY2sKK211bm1hcAorbmFub3NsZWVwCituaWNlCitubF9sYW5naW5mbworbnRwX2FkanRpbWUKK250cF9nZXR0aW1lCitfb2JzdGFja19mcmVlCitvbl9leGl0CitvcGVuNjQKK29wZW4KK29wZW5hdAorb3BlbmRpcgorb3BlbmxvZworcGF0aGNvbmYKK3BpcGUKK3BvbGwKK3BvcGVuCitwb3NpeF9tZW1hbGlnbgorcHJjdGwKK3ByZWFkCitwcmludGYKK19fcHJvZ25hbWUKK3BzZWxlY3QKK3B0aHJlYWRfbXV0ZXhfbG9jaworcHRzbmFtZQorcHV0ZW52CitwdXRncmVudAorcHV0cHdlbnQKK3B1dHNwZW50CitwdXR1dGxpbmUKK3B1dHV0eGxpbmUKK3B1dHdjCitwd3JpdGUKK3Fzb3J0CityYWlzZQorcmFuZAorcmFuZG9tCityYW5kX3IKK3JlYWQKK3JlYWRkaXIKK3JlYWRkaXJfcgorcmVhZGxpbmsKK3JlYWxsb2MKK3JlYWxwYXRoCityZV9jb21wCityZWN2bXNnCityZV9leGVjCityZWdjb21wCityZWdleGVjCityZW1vdmUKK3JlbmFtZQorcmVfc2VhcmNoCitybWRpcgorcnBtYXRjaAorcnJlc3Zwb3J0X2FmCitydXNlcm9rCitydXNlcm9rX2FmCitzYnJrCitzY2FuZGlyCitzY2hlZF9zZXRzY2hlZHVsZXIKK3NjaGVkX3lpZWxkCitfX3NlY3VyZV9nZXRlbnYKK3NlbGVjdAorc2VtY3RsCitzZW1nZXQKK3NlbmRtc2cKK3NldGJ1Zgorc2V0YnVmZmVyCitzZXRlZ2lkCitzZXRlbnYKK3NldGV1aWQKK3NldGdpZAorc2V0Z3JvdXBzCitzZXRob3N0bmFtZQorc2V0aXRpbWVyCitfc2V0am1wCitzZXRqbXAKK3NldGxpbmVidWYKK3NldGxvY2FsZQorc2V0bW50ZW50CitzZXRwZ2lkCitzZXRwZ3JwCitzZXRwcmlvcml0eQorc2V0cmVnaWQKK3NldHJlc2dpZAorc2V0cmVzdWlkCitzZXRyZXVpZAorc2V0cmxpbWl0CitzZXRzaWQKK3NldHNvY2tvcHQKK3NldHRpbWVvZmRheQorc2V0dWlkCitzZXR1dGVudAorc2V0dXR4ZW50CitzZXR2YnVmCitzZXR4YXR0cgorc2dldHNwZW50CitzaG1hdAorc2htY3RsCitzaG1kdAorc2htZ2V0CitzaHV0ZG93bgorc2lnYWN0aW9uCitzaWdhZGRzZXQKK3NpZ2FsdHN0YWNrCitzaWdibG9jaworc2lnZW1wdHlzZXQKK3NpZ2hvbGQKK3NpZ2ludGVycnVwdAorc2lnbmFsCitzaWdwcm9jbWFzaworc2lnc2V0CitzaWdzZXRtYXNrCitzaWdzdGFjaworc2lnc3VzcGVuZAorc2lndmVjCitzbnByaW50Zgorc29ja2V0Citzb2NrZXRwYWlyCitzcHJpbnRmCitzcmFuZDQ4CitzcmFuZAorc3JhbmRvbQorc3NjYW5mCitzdGF0CitzdGF0ZnMKK3N0YXR2ZnMKK3N0aW1lCitzdHBjcHkKK3N0cmNhc2VjbXAKK3N0cmNhc2VzdHIKK3N0cmNocgorc3RyY2hybnVsCitzdHJjbXAKK3N0cmNzcG4KK3N0cmR1cAorc3RyZXJyb3IKK3N0cmVycm9yX3IKK3N0cmZ0aW1lCitzdHJsZW4KK3N0cm5jYXNlY21wCitzdHJuY21wCitzdHJuZHVwCitzdHJubGVuCitzdHJwYnJrCitzdHJwdGltZQorc3RycmNocgorc3Ryc2VwCitzdHJzaWduYWwKK3N0cnNwbgorc3Ryc3RyCitzdHJ0b2QKK3N0cnRvaW1heAorc3RydG9rX3IKK3N0cnRvbAorc3RydG9sbAorc3RydG91bAorc3RydG91bGwKK3N0cnRvdW1heAorc3RydmVyc2NtcAorc3RyeGZybQorc3ltbGluaworc3luYworc3lzY29uZgorc3lzY3RsCitzeXNpbmZvCitzeXNsb2cKK19zeXNfc2lnbGlzdAorc3lzX3NpZ2xpc3QKK3N5c3RlbQordGNnZXRhdHRyCit0Y2dldHBncnAKK3Rjc2V0YXR0cgordGNzZXRwZ3JwCit0aW1lCit0aW1lZ20KK3RpbWVzCit0aW1lem9uZQordG1wbmFtCit0b3dsb3dlcgordG93dXBwZXIKK3RydW5jYXRlCit0c2VhcmNoCit0dHluYW1lCit0enNldAordWxpbWl0Cit1bWFzawordW5hbWUKK3VubGluawordW5zZXRlbnYKK3Vuc2hhcmUKK3VwZHd0bXAKK3VwZHd0bXB4Cit1c2xlZXAKK3VzdGF0Cit1dGltZQordXRpbWVzCit1dG1wbmFtZQordXRtcHhuYW1lCit2YWxsb2MKK3Zhc3ByaW50ZgordmVycngKK3Zmb3JrCit2ZnByaW50ZgordmZzY2FuZgordmhhbmd1cAordnByaW50ZgordnNucHJpbnRmCit2c3ByaW50Zgord2FpdDMKK3dhaXQ0Cit3YWl0cGlkCit3Y3J0b21iCit3Y3Njb2xsCit3Y3NkdXAKK3djc2xlbgord2N0b2IKK3djdG9tYgord2N0eXBlCit3Y3dpZHRoCit3bWVtY2hyCit3bWVtY3B5Cit3bWVtcGNweQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5YWI1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKQEAgLTAsMCArMSwxNTYgQEAKK2Fpby5oCithbGxvY2EuaAorYXJnei5oCithcnBhL2luZXQuaAorYXJwYS9uYW1lc2VyLmgKK2FzbS9ieXRlb3JkZXIuaAorYXNtL2lvY3Rscy5oCithc20vcGFnZS5oCithc20vdHlwZXMuaAorYXNzZXJ0LmgKK2J5dGVzd2FwLmgKK2NyeXB0LmgKK2N0eXBlLmgKK2RpcmVudC5oCitkbGZjbi5oCitlbGYuaAorZW5kaWFuLmgKK2Vyci5oCitlcnJuby5oCitleGVjaW5mby5oCitmY250bC5oCitmZWF0dXJlcy5oCitmbG9hdC5oCitmc3RhYi5oCitmdHcuaAorZ2V0b3B0LmgKK2dsb2IuaAorZ3JwLmgKK2ljb252LmgKK2lmYWRkcnMuaAoraW50dHlwZXMuaAorbGFuZ2luZm8uaAorbGFzdGxvZy5oCitsaWJnZW4uaAorbGliaW50bC5oCitsaW1pdHMuaAorbGludXgvY2FwYWJpbGl0eS5oCitsaW51eC9mZC5oCitsaW51eC9mcy5oCitsaW51eC9oYXllc2VzcC5oCitsaW51eC9oZHJlZy5oCitsaW51eC9pY21wLmgKK2xpbnV4L2luNi5oCitsaW51eC9qb3lzdGljay5oCitsaW51eC9wdHJhY2UuaAorbGludXgvc2VyaWFsLmgKK2xpbnV4L3NvbnlwaS5oCitsaW51eC91bmlzdGQuaAorbGludXgvdXRzbmFtZS5oCitsaW51eC92ZXJzaW9uLmgKK2xvY2FsZS5oCittYWxsb2MuaAorbWF0aC5oCittY2hlY2suaAorbWVtb3J5LmgKK21udGVudC5oCittcXVldWUuaAorbmV0ZGIuaAorbmV0L2lmLmgKK25ldGluZXQvZXRoZXIuaAorbmV0aW5ldC9pbi5oCituZXRpbmV0L2lwNi5oCituZXRpbmV0L2lwLmgKK25ldGluZXQvdGNwLmgKK25ldGluZXQvdWRwLmgKK25ldGlweC9pcHguaAorbmV0L3JvdXRlLmgKK3BhdGhzLmgKK3BvbGwuaAorcHRocmVhZC5oCitwdHkuaAorcHdkLmgKK3JlZ2V4LmgKK3Jlc29sdi5oCitycGMvcnBjLmgKK3JwYy90eXBlcy5oCitzY2hlZC5oCitzY3NpL3Njc2kuaAorc2VhcmNoLmgKK3NlbWFwaG9yZS5oCitzZXRqbXAuaAorc2d0dHkuaAorc2hhZG93LmgKK3NpZ25hbC5oCitzdGRhcmcuaAorc3RkYm9vbC5oCitzdGRjCitzdGRkZWYuaAorc3RkaW50LmgKK3N0ZGlvLmgKK3N0ZGxpYi5oCitzdHJpbmcuaAorc3RyaW5ncy5oCitzdHJvcHRzLmgKK3N5cy9iaXR5cGVzLmgKK3N5cy9jZGVmcy5oCitzeXMvZGlyLmgKK3N5cy9lcG9sbC5oCitzeXNleGl0cy5oCitzeXMvZmNudGwuaAorc3lzL2ZpbGUuaAorc3lzL2ZzdWlkLmgKK3N5cy9pb2N0bC5oCitzeXMvaXBjLmgKK3N5c2xvZy5oCitzeXMvbW1hbi5oCitzeXMvbW91bnQuaAorc3lzL210aW8uaAorc3lzL3BhcmFtLmgKK3N5cy9wb2xsLmgKK3N5cy9wcmN0bC5oCitzeXMvcHRyYWNlLmgKK3N5cy9xdWV1ZS5oCitzeXMvcmVnLmgKK3N5cy9yZXNvdXJjZS5oCitzeXMvc2VsZWN0LmgKK3N5cy9zZW0uaAorc3lzL3NobS5oCitzeXMvc2lnbmFsLmgKK3N5cy9zb2NrZXQuaAorc3lzL3NvY2tldHZhci5oCitzeXMvc291bmRjYXJkLmgKK3N5cy9zdGF0ZnMuaAorc3lzL3N0YXQuaAorc3lzL3N0YXR2ZnMuaAorc3lzL3N0cm9wdHMuaAorc3lzL3N3YXAuaAorc3lzL3N5c2N0bC5oCitzeXMvc3lzaW5mby5oCitzeXMvc3lzbWFjcm9zLmgKK3N5cy90ZXJtaW9zLmgKK3N5cy90aW1lYi5oCitzeXMvdGltZS5oCitzeXMvdGltZXMuaAorc3lzL3RpbWV4LmgKK3N5cy90eXBlcy5oCitzeXMvdWlvLmgKK3N5cy91bi5oCitzeXMvdW5pc3RkLmgKK3N5cy91c2VyLmgKK3N5cy91dHNuYW1lLmgKK3N5cy92ZnMuaAorc3lzL3dhaXQuaAordGVybWlvLmgKK3Rlcm1pb3MuaAordGltZS5oCit0dHllbnQuaAordWxpbWl0LmgKK3VuaXN0ZC5oCit1c3RhdC5oCit1dGltZS5oCit1dG1wLmgKK3V0bXB4LmgKK3ZhbHVlcy5oCit3Y2hhci5oCit3Y3R5cGUuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhiZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKQEAgLTAsMCArMSwyMSBAQAorY2hhcgorY2hhciAqCitkb3VibGUKK2Zsb2F0CitpbnQKK2xvbmcKK2xvbmcgZG91YmxlCitsb25nIGludAorbG9uZyBsb25nCitsb25nIGxvbmcgaW50CitzaG9ydAorc2hvcnQgaW50CitzaWduZWQgY2hhcgordW5zaWduZWQgY2hhcgordW5zaWduZWQgaW50Cit1bnNpZ25lZCBsb25nCit1bnNpZ25lZCBsb25nIGludAordW5zaWduZWQgbG9uZyBsb25nIGludAordW5zaWduZWQgc2hvcnQKK3Vuc2lnbmVkIHNob3J0IGludAordm9pZCAqCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy85OV9uZXR3b3JrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmQ1ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yawpAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC9ydW4vbmV0d29yayBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRkOTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDdhZjlkYjc0ODk3NGNiM2EyYzZlZjhmOWUwM2Q3ZGIxZjlmOGVlMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNiBBdWcgMjAxNCAxNDo1NDoxMiAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvMl0gZGVmbjJbY3xtYW5dOiBkb24ndCByZWx5IG9uIGRwa2ctYXJjaGl0ZWN0dXJlIHRvIHNldCBhcmNoCisKK0luIHlvY3RvIHdlJ2xsIGFsd2F5cyBiZSBjcm9zcyBjb21waWxpbmcsIGFuZCB3ZSdsbCBhbHdheXMKK2JlIGJ1aWxkaW5nIG9uIGxpbnV4IGZvciBsaW51eCAodnMuICpCU0QsIGh1cmQsIGV0Yy4pCisKK1dpdGhvdXQgdGhpcyB0aGUgYXJjaCBpcyBub3QgZGV0ZWN0ZWQsIGJ1dCBpdCBkb2Vzbid0IGVycm9yCitvdXQsIGFuZCBoZW5jZSB5b3UgZ2V0IHVzZWxlc3MgYmluYXJpZXMgdGhhdCBkb24ndCBrbm93IGFueQorYXJjaCBzcGVjaWZpYyBtZXRob2RzLCBhbmQgdGhlIGVuZCByZXN1bHQgd2lsbCBiZSBzdHJhbmdlbmVzcworbGlrZSB0aGUgbG9vcGJhY2sgZGV2aWNlIG5vdCBiZWluZyBjb25maWd1cmVkL2VuYWJsZWQuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorLS0tCisgZGVmbjJjLnBsICAgfCA2ICsrKy0tLQorIGRlZm4ybWFuLnBsIHwgNiArKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RlZm4yYy5wbCBiL2RlZm4yYy5wbAoraW5kZXggYzQ0OWRlMmYzZDFjLi4zODg0NWUzNzRjNzYgMTAwNzU1CistLS0gYS9kZWZuMmMucGwKKysrKyBiL2RlZm4yYy5wbAorQEAgLTIsOSArMiw5IEBACisgCisgdXNlIHN0cmljdDsKKyAKKy1teSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworLQorLSRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKysjbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKysjJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworK215ICRERUJfSE9TVF9BUkNIX09TID0ibGludXgiOworIAorICMgZGVjbGFyYXRpb25zCisgbXkgJGFkZHJlc3NfZmFtaWx5ID0gIiI7CitkaWZmIC0tZ2l0IGEvZGVmbjJtYW4ucGwgYi9kZWZuMm1hbi5wbAoraW5kZXggNmRkY2ZkZDRmZTY4Li5jOWM0ZGQwNDY1OTcgMTAwNzU1CistLS0gYS9kZWZuMm1hbi5wbAorKysrIGIvZGVmbjJtYW4ucGwKK0BAIC0yLDkgKzIsOSBAQAorIAorIHVzZSBzdHJpY3Q7CisgCistbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKy0KKy0kREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrI215ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CisrIyRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKytteSAkREVCX0hPU1RfQVJDSF9PUyA9ICJsaW51eCI7CisgCisgIyBkZWNsYXJhdGlvbnMKKyBteSAkbGluZTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjM1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9maWxlcy9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gNzQxNTJhYzc0YTNlMWVhMGYzYmUyOTJhYTFlZWNhNWFkMWZlNjljMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCA2IEF1ZyAyMDE0IDE1OjEyOjExIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBpbmV0WzZdLmRlZm46IGZpeCBpbnZlcnRlZCBjaGVja3MgZm9yIGxvb3BiYWNrCisKK0NvbXBhcmVkIHRvIHRoZSBodXJkIGxpbmsuZGVmbiBmb3IgbG9vcGJhY2ssIHdlIHNlZSB0aGVzZQorYXJlIGludmVydGVkLCBtZWFuaW5nIHRoYXQgeW91IHdvdWxkIG9ubHkgYmUgYWJsZSB0byBjb25maWd1cmUKK2EgbG9vcGJhY2sgZGV2aWNlIHRoYXQgd2FzIF9ub3RfIG5hbWVkICJsbyIgKHVubGlrZWx5IHRvIGV4aXN0KS4KKworVGhlIHJlc3VsdCB3YXMgdGhhdCB3ZSdkIHVwZGF0ZSAvcnVuL25ldHdvcmsvaWZzdGF0ZSBmb3IgImxvIgorYnV0IG5ldmVyIGFjdHVhbGx5IGRvIGFueXRoaW5nIGZvciB1cC9kb3duLCBhcyBzaG93biBiZWxvdzoKKworcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2MzI5ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDIyICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK2xvICAgICAgICA2NTUzNiAwICAgICAgICAxOCAgICAgIDAgICAgICAwIDAgICAgICAgICAgICAxOCAgICAgIDAgICAgICAwICAgICAgMCBMUlUKK3Jvb3RAbG9jYWxob3N0On4jIGlmZG93biBsbworcm9vdEBsb2NhbGhvc3Q6fiMgZWNobyAkPworMAorcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2NDA2ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDU1ICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK2xvICAgICAgICA2NTUzNiAwICAgICAgICAxOCAgICAgIDAgICAgICAwIDAgICAgICAgICAgICAxOCAgICAgIDAgICAgICAwICAgICAgMCBMUlUKK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIGxvIGRvd24KK3Jvb3RAbG9jYWxob3N0On4jIGlmY29uZmlnIC1zCitJZmFjZSAgIE1UVSBNZXQgICBSWC1PSyBSWC1FUlIgUlgtRFJQIFJYLU9WUiAgICBUWC1PSyBUWC1FUlIgVFgtRFJQIFRYLU9WUiBGbGcKK2V0aDAgICAgICAgMTUwMCAwICAgNzczNjQ3NCAgICAgIDAgICAyMDE2IDAgICAgICAgNTI4OTQ4MSAgICAgIDAgICAgICAwICAgICAgMCBCTVJVCityb290QGxvY2FsaG9zdDp+IworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluZXQuZGVmbiAgfCAxMiArKysrKystLS0tLS0KKyBpbmV0Ni5kZWZuIHwgIDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5ldC5kZWZuIGIvaW5ldC5kZWZuCitpbmRleCBiMTc2YWI0ZWQwM2UuLjVmZGZiMTRhMGUxYyAxMDA2NDQKKy0tLSBhL2luZXQuZGVmbgorKysrIGIvaW5ldC5kZWZuCitAQCAtNiwxMCArNiwxMCBAQCBtZXRob2QgbG9vcGJhY2sKKyAgICAgVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBJUHY0IGxvb3BiYWNrIGludGVyZmFjZS4KKyAKKyAgIHVwCistICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCistICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIGlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCitAQCAtMjEyLDExICsyMTIsMTEgQEAgbWV0aG9kIGxvb3BiYWNrCisgCisgICB1cAorICAgICBpZmNvbmZpZyAlaWZhY2UlIDEyNy4wLjAuMSB1cCBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCisgICAgIGlmY29uZmlnICVpZmFjZSUgZG93biBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK0BAIC0zNzEsMTEgKzM3MSwxMSBAQCBtZXRob2QgbG9vcGJhY2sKKyAKKyAgIHVwCisgICAgIGluZXR1dGlscy1pZmNvbmZpZyAtLWludGVyZmFjZSAlaWZhY2UlIC0tYWRkcmVzcyAxMjcuMC4wLjEgLS11cCBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgICBkb3duCisgICAgIGluZXR1dGlscy1pZmNvbmZpZyAtLWludGVyZmFjZSAlaWZhY2UlIC0tZG93biBcCistCWlmICghaWZhY2VfaXNfbG8oKSkKKysJaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK2RpZmYgLS1naXQgYS9pbmV0Ni5kZWZuIGIvaW5ldDYuZGVmbgoraW5kZXggMDkzMjU1MzljZDAxLi40ZGY2NGFmZjM4Y2MgMTAwNjQ0CistLS0gYS9pbmV0Ni5kZWZuCisrKysgYi9pbmV0Ni5kZWZuCitAQCAtMzMsMTEgKzMzLDExIEBAIG1ldGhvZCBsb29wYmFjaworICAgZGVzY3JpcHRpb24KKyAgICAgVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBJUHY2IGxvb3BiYWNrIGludGVyZmFjZS4KKyAgIHVwCistICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCistICAgIC1pcCBhZGRyIGFkZCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBhZGRyIGFkZCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisgICBkb3duCistICAgIC1pcCBhZGRyIGRlbCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKCFpZmFjZV9pc19sbygpKQorLSAgICAtaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBhZGRyIGRlbCBkZXYgJWlmYWNlJSA6OjEgMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIDI+L2Rldi9udWxsIGlmIChpZmFjZV9pc19sbygpKQorIAorIG1ldGhvZCBzdGF0aWMKKyAgIGRlc2NyaXB0aW9uCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vaWZ1cGRvd25fMC43LjQ4LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlYjg3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xLmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiaWZ1cGRvd246IGJhc2ljIGlmdXAgYW5kIGlmZG93biB1c2VkIGJ5IGluaXRzY3JpcHRzIgorREVTQ1JJUFRJT04gPSAiSGlnaCBsZXZlbCB0b29scyB0byBjb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIFwKK1RoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgdG9vbHMgaWZ1cCBhbmQgaWZkb3duIHdoaWNoIG1heSBiZSB1c2VkIHRvIFwKK2NvbmZpZ3VyZSAob3IsIHJlc3BlY3RpdmVseSwgZGVjb25maWd1cmUpIG5ldHdvcmsgaW50ZXJmYWNlcywgYmFzZWQgb24gXAordGhlIGZpbGUgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gImh0dHA6Ly9hcmNoaXZlLnVidW50dS5jb20vdWJ1bnR1L3Bvb2wvbWFpbi9pL2lmdXBkb3duL2lmdXBkb3duXzAuNy40OC4xdWJ1bnR1NS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9kZWZuMi1jLW1hbi1kb24tdC1yZWx5LW9uLWRwa2ctYXJjaGl0ZWN0dXJlLXRvLXNldC1hLnBhdGNoIFwKKwkgICBmaWxlOi8vaW5ldC02LS5kZWZuLWZpeC1pbnZlcnRlZC1jaGVja3MtZm9yLWxvb3BiYWNrLnBhdGNoIFwKKwkgICBmaWxlOi8vOTlfbmV0d29yayBcCisJICAiCisKK0VYVFJBX09FTUFLRSA9ICIiCisKKyMgbmVlZGVkIHNvIHdlIGRvbid0IGdldCBkZWZhdWx0IFM9IiR7V09SS0RJUn0vaWZ1cGRvd24tJHtQVn0iCitTID0gIiR7V09SS0RJUn0vaWZ1cGRvd24tJHtQVn11YnVudHU1IgorCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb21waWxlICgpIHsKKwljaG1vZCBhK3J4ICoucGwgKi5zaAorCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAiQ0ZMQUdTPSR7Q0ZMQUdTfSAtV2FsbCAtVyAtRCdJRlVQRE9XTl9WRVJTSU9OPVwiJHtQVn1cIiciCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44IFwKKwkJICAke0R9JHttYW5kaXJ9L21hbjUgXAorCQkgICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKworCSMgSWYgdm9sYXRpbGVzIGFyZSB1c2VkLCB0aGVuIHdlJ2xsIGFsc28gbmVlZCAvcnVuL25ldHdvcmsgdGhlcmUgdG9vLgorCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9uZXR3b3JrICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisKKwlpbnN0YWxsIC1tIDA3NTUgaWZ1cCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWxuICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaWZ1cCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lmZG93bgorCWluc3RhbGwgLW0gMDY0NCBpZnVwLjggJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSAwNjQ0IGludGVyZmFjZXMuNSAke0R9JHttYW5kaXJ9L21hbjUKKwljZCAke0R9JHttYW5kaXJ9L21hbjggJiYgbG4gLXMgaWZ1cC44IGlmZG93bi44Cit9CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImlmdXAgaWZkb3duIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaWZ1cF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2lmdXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaWZkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaWZkb3duIgorCitJTklUU0NSSVBUX05BTUUgPSAiaWZ1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDM5IDAgNiAxIC4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NWJhMzc1ZjNjNmYyNmQzNGVmYjJhODU3NWU3N2ZjOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOGRjZTE0NjkyYzA3YjcyYjU4M2I4NmM0ZDNhY2UwZDlkYWMxOTI4OTI1MTQ0Y2MzZGRkZTE1YjY5NGViYmRmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzJlODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXgKQEAgLTAsMCArMSw0NiBAQAorLmVuY29kaW5nID0gIlVURi04IgorY29uZmlnLnZlcnNpb24gPSAiOCIKK3ZpcnR1YWxIVy52ZXJzaW9uID0gIjEwIgorbnVtdmNwdXMgPSAiMiIKK3ZjcHUuaG90YWRkID0gIlRSVUUiCittZW1zaXplID0gIjQwOTYiCittZW0uaG90YWRkID0gIlRSVUUiCitzYXRhMC5wcmVzZW50ID0gIlRSVUUiCitzYXRhMDowLnByZXNlbnQgPSAiVFJVRSIKK3NhdGEwOjAuZmlsZU5hbWUgPSAiWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsiCitldGhlcm5ldDAucHJlc2VudCA9ICJUUlVFIgorZXRoZXJuZXQwLnZpcnR1YWxEZXYgPSAiZTEwMDAiCitldGhlcm5ldDAud2FrZU9uUGNrdFJjdiA9ICJGQUxTRSIKK2V0aGVybmV0MC5hZGRyZXNzVHlwZSA9ICJnZW5lcmF0ZWQiCit1c2IucHJlc2VudCA9ICJUUlVFIgorZWhjaS5wY2lTbG90TnVtYmVyID0gIjAiCitzb3VuZC5wcmVzZW50ID0gIlRSVUUiCitzb3VuZC5maWxlTmFtZSA9ICItMSIKK3NvdW5kLmF1dG9kZXRlY3QgPSAiVFJVRSIKK3BjaUJyaWRnZTAucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNC5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U0LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNC5mdW5jdGlvbnMgPSAiOCIKK3BjaUJyaWRnZTUucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNS52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTUuZnVuY3Rpb25zID0gIjgiCitwY2lCcmlkZ2U2LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTYudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U2LmZ1bmN0aW9ucyA9ICI4IgorcGNpQnJpZGdlNy5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U3LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNy5mdW5jdGlvbnMgPSAiOCIKK3ZtY2kwLnByZXNlbnQgPSAiVFJVRSIKK2hwZXQwLnByZXNlbnQgPSAiVFJVRSIKK3VzYi52Ymx1ZXRvb3RoLnN0YXJ0Q29ubmVjdGVkID0gIlRSVUUiCitkaXNwbGF5TmFtZSA9ICJZb2N0byBCdWlsZCBBcHBsaWFuY2UiCitndWVzdE9TID0gIm90aGVyM3hsaW51eC02NCIKK3ZpcnR1YWxIVy5wcm9kdWN0Q29tcGF0aWJpbGl0eSA9ICJob3N0ZWQiCitndWkuZXhpdE9uQ0xJSExUID0gIkZBTFNFIgorcG93ZXJUeXBlLnBvd2VyT2ZmID0gInNvZnQiCitwb3dlclR5cGUucG93ZXJPbiA9ICJzb2Z0IgorcG93ZXJUeXBlLnN1c3BlbmQgPSAic29mdCIKK3Bvd2VyVHlwZS5yZXNldCA9ICJzb2Z0IgorZXh0ZW5kZWRDb25maWdGaWxlID0gIllvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmIgorc2NzaTA6MC5wcmVzZW50ID0gIkZBTFNFIgorZmxvcHB5MC5wcmVzZW50ID0gIkZBTFNFIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5NDFmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxGb3VuZHJ5PgorPFZNPgorPFZNSWQgdHlwZT0ic3RyaW5nIj41MiBhNSBkOCBjYiBlZCA2YyA4NSA0OC1jZCA5OSA2OCBhZiBjYyAzMCBhMCA5ODwvVk1JZD4KKzxDbGllbnRNZXRhRGF0YT4KKzxjbGllbnRNZXRhRGF0YUF0dHJpYnV0ZXMvPgorPEhpc3RvcnlFdmVudExpc3QvPjwvQ2xpZW50TWV0YURhdGE+Cis8dm14UGF0aE5hbWUgdHlwZT0ic3RyaW5nIj5Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14PC92bXhQYXRoTmFtZT48L1ZNPjwvRm91bmRyeT4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xMi4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NmJhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2VfMTIuMC4xLmJiCkBAIC0wLDAgKzEsOTMgQEAKK1NVTU1BUlkgPSAiQW4gaW1hZ2UgY29udGFpbmluZyB0aGUgYnVpbGQgc3lzdGVtIGl0c2VsZiIKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgdGhlIGJ1aWxkIHN5c3RlbSB0aGF0IHlvdSBjYW4gYm9vdCBhbmQgcnVuIHVzaW5nIGVpdGhlciBWTXdhcmUgUGxheWVyIG9yIFZNd2FyZSBXb3Jrc3RhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG9jdW1lbnRhdGlvbi9idWlsZC1hcHBsaWFuY2UiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCBwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ4MTEtYmFzZSBwYWNrYWdlLW1hbmFnZW1lbnQgc3BsYXNoIgorCisjIEVuc3VyZSB0aGVyZSdzIGVub3VnaCBzcGFjZSB0byBkbyBhIGNvcmUtaW1hZ2Utc2F0byBidWlsZCwgd2l0aCBybV93b3JrIGVuYWJsZWQKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRSA9ICI0MTk0MzA0MCIKKworIyBEbyBhIHF1aWV0IGJvb3Qgd2l0aCBsaW1pdGVkIGNvbnNvbGUgbWVzc2FnZXMKK0FQUEVORCArPSAicm9vdGZzdHlwZT1leHQ0IHF1aWV0IgorCitERVBFTkRTID0gInppcC1uYXRpdmUiCitJTUFHRV9GU1RZUEVTID0gInZtZGsiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCitTUkNSRVYgPz0gImQwMWNkNTM0MjliMWMyMGYwMWRhYzk3ZjFiOWI2NTljYjlkYzk4MTIiCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3Bva3kgXAorICAgICAgICAgICBmaWxlOi8vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteCBcCisgICAgICAgICAgIGZpbGU6Ly9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZiBcCisgICAgICAgICAgIgorCitJTUFHRV9DTURfZXh0NF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgbmVlZCB0byByZXNlcnZlIG11Y2ggc3BhY2UgZm9yIHJvb3QsIDAuNSUgaXMgbW9yZSB0aGFuIGVub3VnaAorCXR1bmUyZnMgLW0gMC41ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZXh0NAorfQorCitmYWtlcm9vdCBkb19wb3B1bGF0ZV9wb2t5X3NyYyAoKSB7CisJIyBCZWNhdXNlIGZldGNoMidzIGdpdCdzIHVucGFjayB1c2VzIC1zIGNsb25lZmxhZywgdGhlIHVucGFja2VkIGdpdCByZXBvCisJIyB3aWxsIGJlY29tZSBpbnZhbGlkIGluIHRoZSB0YXJnZXQuCisJcm0gLXJmICR7V09SS0RJUn0vZ2l0Ly5naXQKKwlybSAtZiAke1dPUktESVJ9L2dpdC8uZ2l0aWdub3JlCisKKwljcCAtUnAgJHtXT1JLRElSfS9naXQgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5CisKKwlta2RpciAtcCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvY29uZgorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMKKwljcCAtUnBMICR7RExfRElSfS8qICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMvCisKKwkjIFJlbW92ZSB0aGUgZ2l0Ml8qIHRhcmJhbGxzIC0tIHRoaXMgaXMgb2sgc2luY2Ugd2Ugc3RpbGwgaGF2ZSB0aGUgZ2l0Mi8uCisJcm0gLXJmICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9kb3dubG9hZHMvZ2l0Ml8qCisKKwllY2hvICIvdXNyL2JpbiIgPiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kvYnVpbGQvcHNldWRvZG9uZQorCWVjaG8gIklOSEVSSVQgKz0gXCJybV93b3JrXCIiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9jb25mL2F1dG8uY29uZgorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcHNldWRvCisJZWNobyAiZXhwb3J0IFBTRVVET19QUkVGSVg9L3VzciIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisJZWNobyAiZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPS9ob21lL2J1aWxkZXIvcHNldWRvIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICJleHBvcnQgUFNFVURPX0xJQkRJUj0vdXNyL2xpYi9wc2V1ZG8vbGliNjQiID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCisJY2hvd24gYnVpbGRlci5idWlsZGVyICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcHNldWRvCisKKwljaG93biAtUiBidWlsZGVyLmJ1aWxkZXIgICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reQorCisJIyBBbGxvdyBidWlsZGVyIHRvIHVzZSBzdWRvIHRvIHNldHVwIHRhcC90dW4KKwllY2hvICJidWlsZGVyIEFMTD0oQUxMKSBOT1BBU1NXRDogQUxMIiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL3N1ZG9lcnMKKworCSMgVXNlIENsZWFybG9va3MgR1RLKyB0aGVtZQorCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ldGMvZ3RrLTIuMAorCWVjaG8gJ2d0ay10aGVtZS1uYW1lID0gIkNsZWFybG9va3MiJyA+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZ3RrLTIuMC9ndGtyYworfQorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gImRvX3BvcHVsYXRlX3Bva3lfc3JjOyAiCisKK2FkZHRhc2sgcm9vdGZzIGFmdGVyIGRvX3VucGFjaworCitweXRob24gKCkgeworCSMgRW5zdXJlIHdlIHJ1biB0aGVzZSB1c3VhbGx5IG5vZXhlYyB0YXNrcworCWQuZGVsVmFyRmxhZygiZG9fZmV0Y2giLCAibm9leGVjIikKKwlkLmRlbFZhckZsYWcoImRvX3VucGFjayIsICJub2V4ZWMiKQorfQorCitjcmVhdGVfYnVuZGxlX2ZpbGVzICgpIHsKKwljZCAke1dPUktESVJ9CisJbWtkaXIgLXAgWW9jdG9fQnVpbGRfQXBwbGlhbmNlCisJY3AgKi52bXgqIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWxuIC1zZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0udm1kayBZb2N0b19CdWlsZF9BcHBsaWFuY2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZtZGsKKwl6aXAgLXIgJHtERVBMT1lfRElSX0lNQUdFfS9Zb2N0b19CdWlsZF9BcHBsaWFuY2UtJHtEQVRFVElNRX0uemlwIFlvY3RvX0J1aWxkX0FwcGxpYW5jZQorCWxuIC1zZiBZb2N0b19CdWlsZF9BcHBsaWFuY2UtJHtEQVRFVElNRX0uemlwICR7REVQTE9ZX0RJUl9JTUFHRX0vWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnppcCAKK30KKworcHl0aG9uIGRvX2J1bmRsZV9maWxlcygpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV9idW5kbGVfZmlsZXMnLCBkKQorfQorCithZGR0YXNrIGJ1bmRsZV9maWxlcyBhZnRlciBkb192bWltZyBiZWZvcmUgZG9fYnVpbGQKK2RvX2J1bmRsZV9maWxlc1tub3N0YW1wXSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLWJhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhMDhjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLWJhc2UuYmIKQEAgLTAsMCArMSw4IEBACitTVU1NQVJZID0gIkEgY29uc29sZS1vbmx5IGltYWdlIHRoYXQgZnVsbHkgc3VwcG9ydHMgdGhlIHRhcmdldCBkZXZpY2UgXAoraGFyZHdhcmUuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWFkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWRldi5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QgYW5kIFwKK2lzIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGZhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcy5iYgpAQCAtMCwwICsxLDIxIEBACisjIFNpbXBsZSBpbml0cmFtZnMgaW1hZ2UuIE1vc3RseSB1c2VkIGZvciBsaXZlIGltYWdlcy4KK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZS4gVGhlIGtlcm5lbCBpbmNsdWRlcyBcCit0aGUgTWluaW1hbCBSQU0tYmFzZWQgSW5pdGlhbCBSb290IEZpbGVzeXN0ZW0gKGluaXRyYW1mcyksIHdoaWNoIGZpbmRzIHRoZSBcCitmaXJzdCAnaW5pdCcgcHJvZ3JhbSBtb3JlIGVmZmljaWVudGx5LiIKKworUEFDS0FHRV9JTlNUQUxMID0gImluaXRyYW1mcy1saXZlLWJvb3QgaW5pdHJhbWZzLWxpdmUtaW5zdGFsbCBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaSBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKKworQkFEX1JFQ09NTUVOREFUSU9OUyArPSAiYnVzeWJveC1zeXNsb2ciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTIyMzRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1tdGR1dGlscy5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIHN1cHBvcnQgZm9yIHRoZSBcCitNaW5pbWFsIE1URCBVdGlsaXRpZXMsIHdoaWNoIGxldCB0aGUgdXNlciBpbnRlcmFjdCB3aXRoIHRoZSBNVEQgc3Vic3lzdGVtIGluIFwKK3RoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGZsYXNoIGRldmljZXMuIgorCitJTUFHRV9JTlNUQUxMICs9ICJtdGQtdXRpbHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ3N2IzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIkEgc21hbGwgaW1hZ2UganVzdCBjYXBhYmxlIG9mIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJvb3QuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0gJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IgorCitJTUFHRV9MSU5HVUFTID0gIiAiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPz0gIjgxOTIiCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0VfYXBwZW5kID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdGVtZCIsICIgKyA0MDk2IiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9jb3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4ZTBkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvY29weXJpZ2h0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgcGFja2FnZSB3YXMgY3JlYXRlZCBieSBQZXRlciBUb2JpYXMgdG9iaWFzQGV0LWluZi5maG8tZW1kZW4uZGUgb24KK1dlZCwgMjQgQXVnIDE5OTQgMjE6MzM6MjggKzAyMDAgYW5kIG1haW50YWluZWQgYnkgQW50aG9ueSBUb3ducworPGFqdEBkZWJpYW4ub3JnPiB1bnRpbCAyMDAxLgorSXQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgTWFyY28gZCdJdHJpIDxtZEBsaW51eC5pdD4uCisKK0NvcHlyaWdodCAxOTk0LTIwMTAgUGV0ZXIgVG9iaWFzLCBBbnRob255IFRvd25zIGFuZCBNYXJjbyBkJ0l0cmkKKworVGhlIHByb2dyYW1zIGluIHRoaXMgcGFja2FnZSBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiBhcyBkaXN0cmlidXRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gT24gRGViaWFuIHN5c3RlbXMsIGEgY29weSBvZiB0aGlzIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGluCisvdXNyL3NoYXJlL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjMxYzYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0CkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaCAtZQorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmV0d29ya2luZworIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMgJGxvY2FsX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgU2hvdWxkLVN0YXJ0OiAgICAgIGlmdXBkb3duCisjIFNob3VsZC1TdG9wOiAgICAgICBpZnVwZG93bgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBSYWlzZSBuZXR3b3JrIGludGVyZmFjZXMuCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPSIvdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKK1sgLXggL3NiaW4vaWZ1cCBdIHx8IGV4aXQgMAorCitjaGVja19uZXR3b3JrX2ZpbGVfc3lzdGVtcygpIHsKKyAgICBbIC1lIC9wcm9jL21vdW50cyBdIHx8IHJldHVybiAwCisKKyAgICBpZiBbIC1lIC9ldGMvaXNjc2kvaXNjc2kuaW5pdHJhbWZzIF07IHRoZW4KKwllY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IGlTQ1NJIHJvb3QgaXMgbW91bnRlZC4iCisJZXhpdCAwCisgICAgZmkKKworICAgIGV4ZWMgOTwmMCA8IC9wcm9jL21vdW50cworICAgIHdoaWxlIHJlYWQgREVWIE1UUFQgRlNUWVBFIFJFU1Q7IGRvCisJY2FzZSAkREVWIGluCisJL2Rldi9uYmQqfC9kZXYvbmRbYS16XSp8L2Rldi9ldGhlcmQvZSopCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBkZXZpY2VzIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAkRlNUWVBFIGluCisJbmZzfG5mczR8c21iZnN8bmNwfG5jcGZzfGNpZnN8Y29kYXxvY2ZzMnxnZnN8cHZmc3xwdmZzMnxmdXNlLmh0dHBmc3xmdXNlLmN1cmxmdHBmcykKKwkgICAgZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBuZXR3b3JrIGZpbGUgc3lzdGVtcyBzdGlsbCBtb3VudGVkLiIKKwkgICAgZXhpdCAwCisJICAgIDs7CisJZXNhYworICAgIGRvbmUKKyAgICBleGVjIDA8JjkgOTwmLQorfQorCitjaGVja19uZXR3b3JrX3N3YXAoKSB7CisgICAgWyAtZSAvcHJvYy9zd2FwcyBdIHx8IHJldHVybiAwCisKKyAgICBleGVjIDk8JjAgPCAvcHJvYy9zd2FwcworICAgIHdoaWxlIHJlYWQgREVWIE1UUFQgRlNUWVBFIFJFU1Q7IGRvCisJY2FzZSAkREVWIGluCisJL2Rldi9uYmQqfC9kZXYvbmRbYS16XSp8L2Rldi9ldGhlcmQvZSopCisJICAgIGVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogbmV0d29yayBzd2FwIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZG9uZQorICAgIGV4ZWMgMDwmOSA5PCYtCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisJZWNobyAtbiAiQ29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLi4uICIKKwlzeXNjdGwgLWUgLXAgL2V0Yy9zeXNjdGwuY29uZiA+L2Rldi9udWxsIDI+JjEKKwlpZnVwIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworc3RvcCkKKwljaGVja19uZXR3b3JrX2ZpbGVfc3lzdGVtcworCWNoZWNrX25ldHdvcmtfc3dhcAorCisJZWNobyAtbiAiRGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMuLi4gIgorCWlmZG93biAtYQorCWVjaG8gImRvbmUuIgorCTs7CisKK2ZvcmNlLXJlbG9hZHxyZXN0YXJ0KQorCWVjaG8gIlJ1bm5pbmcgJDAgJDEgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IG1heSBub3QgZW5hYmxlIGFnYWluIHNvbWUgaW50ZXJmYWNlcyIKKwllY2hvICJSZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLiAiCisJaWZkb3duIC1hIHx8IHRydWUKKwlpZnVwIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvbmV0d29ya2luZyB7c3RhcnR8c3RvcH0iCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWNmNGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsMzEgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisjIFdpcmVsZXNzIGludGVyZmFjZXMKK2lmYWNlIHdsYW4wIGluZXQgZGhjcAorCXdpcmVsZXNzX21vZGUgbWFuYWdlZAorCXdpcmVsZXNzX2Vzc2lkIGFueQorCXdwYS1kcml2ZXIgd2V4dAorCXdwYS1jb25mIC9ldGMvd3BhX3N1cHBsaWNhbnQuY29uZgorCitpZmFjZSBhdG1sMCBpbmV0IGRoY3AKKworIyBXaXJlZCBvciB3aXJlbGVzcyBpbnRlcmZhY2VzCithdXRvIGV0aDAKK2lmYWNlIGV0aDAgaW5ldCBkaGNwCitpZmFjZSBldGgxIGluZXQgZGhjcAorCisjIEV0aGVybmV0L1JORElTIGdhZGdldCAoZ19ldGhlcikKKyMgLi4uIG9yIG9uIGhvc3Qgc2lkZSwgdXNibmV0IGFuZCByYW5kb20gaHdhZGRyCitpZmFjZSB1c2IwIGluZXQgc3RhdGljCisJYWRkcmVzcyAxOTIuMTY4LjcuMgorCW5ldG1hc2sgMjU1LjI1NS4yNTUuMAorCW5ldHdvcmsgMTkyLjE2OC43LjAKKwlnYXRld2F5IDE5Mi4xNjguNy4xCisKKyMgQmx1ZXRvb3RoIG5ldHdvcmtpbmcKK2lmYWNlIGJuZXAwIGluZXQgZGhjcAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL25mc3Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwYzBhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisKKyMgSW4gY2FzZSB0aGUgaW50ZXJmYWNlIGlzIHVzZWQgYXMgbmZzcm9vdCwgYXZvaWQgaWZ1cCwgb3RoZXJ3aXNlCisjIG5mc3Jvb3QgbWF5IGxvc2UgcmVzcG9uc2UKKworbmZzcm9vdD0wCisKK2lmIHRlc3QgIngkSUZBQ0UiID0geGxvIDsgdGhlbgorCWV4aXQgMAorZmkKKworZXhlYyA5PCYwIDwgL3Byb2MvbW91bnRzCit3aGlsZSByZWFkIGRldiBtdHB0IGZzdHlwZSByZXN0OyBkbworICAgIGlmIHRlc3QgJG10cHQgPSAiLyIgOyB0aGVuCisgICAgICAgIGNhc2UgJGZzdHlwZSBpbgorICAgICAgICAgICAgbmZzIHwgbmZzNCkKKyAgICAgICAgICAgICAgICBuZnNyb290PTEKKyAgICAgICAgICAgICAgICBuZnNfYWRkcj1gZWNobyAkcmVzdCB8IHNlZCAtZSAncy9eLiphZGRyPVwoWzAtOS5dKlwpLiokL1wxLydgCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZmkKK2RvbmUKK2V4ZWMgMDwmOSA5PCYtCisKK3Rlc3QgJG5mc3Jvb3QgLWVxIDAgJiYgZXhpdCAwCisKK2lmIFsgLXggL2Jpbi9pcCAtbyAteCAvc2Jpbi9pcCBdIDsgdGhlbgorICAgIG5mc19pZmFjZT1gaXAgcm91dGUgZ2V0ICRuZnNfYWRkciB8IGdyZXAgZGV2IHwgc2VkIC1lICdzL14uKmRldiBcKFstYS16MC05Ll0qXCkuKiQvXDEvJ2AKK2ZpCisKK2lmIHRlc3QgIngkSUZBQ0UiID0gIngkbmZzX2lmYWNlIiA7IHRoZW4KKyAgICBlY2hvICJpZnVwIHNraXBwZWQgZm9yIG5mc3Jvb3QgaW50ZXJmYWNlICRuZnNfaWZhY2UiCisgICAgZXhpdCAxCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybS9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtNjQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtNjQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY2L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY2L2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ny9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ny9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzNjQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwczY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11cHBjL2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXBwYy9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXNoNC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVzaDQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYtNjQvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2LTY0L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNhZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkJhc2ljIFRDUC9JUCBuZXR3b3JraW5nIGluaXQgc2NyaXB0cyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBoaWdoIGxldmVsIHRvb2xzIHRvIGNvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZXMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9pZnVwZG93biIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQUiA9ICJyNyIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAibmV0d29ya2luZyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAxIDIgMyA0IDUgLiBzdG9wIDgwIDAgNiAxIC4iCisKK1NSQ19VUkkgPSAiZmlsZTovL2NvcHlyaWdodCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2ludGVyZmFjZXMgXAorICAgICAgICAgICBmaWxlOi8vbmZzcm9vdCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kIFwKKwkJCSR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZCBcCisJCQkke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXBvc3QtZG93bi5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmV0d29ya2luZworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2ludGVyZmFjZXMgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pbnRlcmZhY2VzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmZzcm9vdCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX3FlbXVhbGwgKCkgeworCSMgRGlzYWJsZSBuZXR3b3JrIG1hbmFnZXIgb24gbWFjaGluZXMgdGhhdCBjb21tb25seSBkbyBORlMgYm9vdGluZworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvbm0tZGlzYWJsZWQtZXRoMAorfQorCitQQUNLQUdFX0FSQ0hfcWVtdWFsbCA9ICIke01BQ0hJTkVfQVJDSH0iCitSREVQRU5EU18ke1BOfSA9ICJuZXRiYXNlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJuZXRiYXNlICg8IDE6NS4wKSIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vbmV0d29yay9pbnRlcmZhY2VzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtYm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODJlYmEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWJvb3Quc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworbWtkaXIgL3Byb2MKK21rZGlyIC9zeXMKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCitleGVjIHNoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTBiNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaApAQCAtMCwwICsxLDE5OSBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgc2Vjb25kIHJvb3RmcwordGVzdGZzX3JhdGlvPTUwCisKK2ZvdW5kPSJubyIKKworZWNobyAiU2VhcmNoaW5nIGZvciBhIGhhcmQgZHJpdmUuLi4iCitmb3IgZGV2aWNlIGluICdoZGEnICdoZGInICdzZGEnICdzZGInICdtbWNibGswJyAnbW1jYmxrMScKK2RvCisgICAgaWYgWyAtZSAvc3lzL2Jsb2NrLyR7ZGV2aWNlfS9yZW1vdmFibGUgXTsgdGhlbgorICAgICAgICBpZiBbICIkKGNhdCAvc3lzL2Jsb2NrLyR7ZGV2aWNlfS9yZW1vdmFibGUpIiA9ICIwIiBdOyB0aGVuCisgICAgICAgICAgICBmb3VuZD0ieWVzIgorCisgICAgICAgICAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICAgICAgICAgICMgVHJ5IHNsZWVwaW5nIGhlcmUgdG8gYXZvaWQgZ2V0dGluZyBrZXJuZWwgbWVzc2FnZXMKKyAgICAgICAgICAgICAgICAjIG9ic2N1cmluZy9jb25mdXNpbmcgdXNlcgorICAgICAgICAgICAgICAgIHNsZWVwIDUKKyAgICAgICAgICAgICAgICBlY2hvICJGb3VuZCBkcml2ZSBhdCAvZGV2LyR7ZGV2aWNlfS4gRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlID8gW3kvbl0iCisgICAgICAgICAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJuIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmb3VuZD1ubworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAiJGZvdW5kIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgYnJlYWs7CisgICAgZmkKKworZG9uZQorCitpZiBbICIkZm91bmQiID0gIm5vIiBdOyB0aGVuCisgICAgZXhpdCAxCitmaQorCitlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJHtkZXZpY2V9IgorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAvZGV2LyR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitta2RpciAtcCAvdG1wCitjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAvZGV2LyR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCBEaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisKK3Rlc3Rmc19zaXplPSQoKGRpc2tfc2l6ZSp0ZXN0ZnNfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtdGVzdGZzX3NpemUpKQorCityb290ZnNfc3RhcnQ9JCgoYm9vdF9zaXplKSkKK3Jvb3Rmc19lbmQ9JCgocm9vdGZzX3N0YXJ0K3Jvb3Rmc19zaXplKSkKK3Rlc3Rmc19zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCitib290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgordGVzdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlRlc3RmcyBwYXJ0aXRpb24gc2l6ZTogICAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgZ3B0CisKK2VjaG8gIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRib290ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgMCUgJGJvb3Rfc2l6ZQorcGFydGVkIC9kZXYvJHtkZXZpY2V9IHNldCAxIGJvb3Qgb24KKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICRyb290ZnNfc3RhcnQgJHJvb3Rmc19lbmQKKworZWNobyAiQ3JlYXRpbmcgdGVzdGZzIHBhcnRpdGlvbiBvbiAkdGVzdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICR0ZXN0ZnNfc3RhcnQgMTAwJQorCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gcHJpbnQKKworZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIHZmYXQuLi4iCitta2ZzLnZmYXQgLW4gImJvb3QiICRib290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkcm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInBsYXRmb3JtIiAkcm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHRlc3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJ0ZXN0cm9vdGZzIiAkdGVzdGZzCisKK21rZGlyIC9zc2QKK21rZGlyIC9yb290bW50Citta2RpciAvYm9vdG1udAorCittb3VudCAkcm9vdGZzIC9zc2QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3Jvb3RtbnQKKworZWNobyAiQ29weWluZyByb290ZnMgZmlsZXMuLi4iCitjcCAtYSAvcm9vdG1udC8qIC9zc2QKKwordG91Y2ggL3NzZC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvc3NkL2V0Yy8gXSA7IHRoZW4KKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvc3NkL2V0Yy91ZGV2LyBdIDsgdGhlbgorICAgICAgICBlY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3NzZC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKKyAgICBmaQorZmkKKwordW1vdW50IC9zc2QKK3Vtb3VudCAvcm9vdG1udAorCitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCittb3VudCAkYm9vdGZzIC9zc2QKKworRUZJRElSPSIvc3NkL0VGSS9CT09UIgorbWtkaXIgLXAgJEVGSURJUgorY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9zc2QKKyMgQ29weSB0aGUgZWZpIGxvYWRlcgorY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC8qLmVmaSAkRUZJRElSCisKK2lmIFsgLWYgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyBdOyB0aGVuCisgICAgR1JVQkNGRz0iJEVGSURJUi9ncnViLmNmZyIKKyAgICBjcCAvcnVuL21lZGlhLyQxL0VGSS9CT09UL2dydWIuY2ZnICRHUlVCQ0ZHCisgICAgIyBVcGRhdGUgZ3J1YiBjb25maWcgZm9yIHRoZSBpbnN0YWxsZWQgaW1hZ2UKKyAgICAjIERlbGV0ZSB0aGUgaW5zdGFsbCBlbnRyeQorICAgIHNlZCAtaSAiL21lbnVlbnRyeSAnaW5zdGFsbCcvLC9efS9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKyAgICBzZWQgLWkgIi9pbml0cmQgL2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdSVUJDRkcKKyAgICAjIEFkZCB0aGUgcm9vdD0gYW5kIG90aGVyIHN0YW5kYXJkIGJvb3Qgb3B0aW9ucworICAgIHNlZCAtaSAic0BsaW51eCAvdm1saW51eiAqQGxpbnV4IC92bWxpbnV6IHJvb3Q9JHJvb3RmcyBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdSVUJDRkcKK2ZpCisKK2lmIFsgLWQgL3J1bi9tZWRpYS8kMS9sb2FkZXIgXTsgdGhlbgorICAgIEdVTU1JQk9PVF9DRkdTPSIvc3NkL2xvYWRlci9lbnRyaWVzLyouY29uZiIKKyAgICAjIGNvcHkgY29uZmlnIGZpbGVzIGZvciBndW1taWJvb3QKKyAgICBjcCAtZHIgL3J1bi9tZWRpYS8kMS9sb2FkZXIgL3NzZAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL3NzZC9sb2FkZXIvZW50cmllcy9pbnN0YWxsLmNvbmYKKyAgICAjIGRlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBhZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAb3B0aW9ucyAqQG9wdGlvbnMgcm9vdD0kcm9vdGZzIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIEFkZCB0aGUgdGVzdCBsYWJlbAorICAgIGVjaG8gLW5lICJ0aXRsZSB0ZXN0XG5saW51eCAvdGVzdC1rZXJuZWxcbm9wdGlvbnMgcm9vdD0kdGVzdGZzIHJ3ICRyb290d2FpdCBxdWlldFxuIiA+IC9zc2QvbG9hZGVyL2VudHJpZXMvdGVzdC5jb25mCitmaQorCit1bW91bnQgL3NzZAorc3luYworCitlY2hvICJSZW1vdmUgeW91ciBpbnN0YWxsYXRpb24gbWVkaWEsIGFuZCBwcmVzcyBFTlRFUiIKKworcmVhZCBlbnRlcgorCitlY2hvICJSZWJvb3RpbmcuLi4iCityZWJvb3QgLWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkNzRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCkBAIC0wLDAgKzEsMjUwIEBACisjIS9iaW4vc2ggLWUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgaW5zdGFsbC5zaCBbZGV2aWNlX25hbWVdIFtyb290ZnNfbmFtZV0KKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdlIG5lZWQgMjAgTWIgZm9yIHRoZSBib290IHBhcnRpdGlvbgorYm9vdF9zaXplPTIwCisKKyMgNSUgZm9yIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgLXogIiR7aGRuYW1lbGlzdH0iIF07IHRoZW4KKyAgICBlY2hvICJZb3UgbmVlZCBhbm90aGVyIGRldmljZSAoYmVzaWRlcyB0aGUgbGl2ZSBkZXZpY2UgL2Rldi8ke2xpdmVfZGV2X25hbWV9KSB0byBpbnN0YWxsIHRoZSBpbWFnZS4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVkVORE9SPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJNT0RFTD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50IF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVUVWRU5UPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZmkKKyAgICBlY2hvCisgICAgIyBHZXQgdXNlciBjaG9pY2UKKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICBlY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKyAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgLW8gIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgorICAgIGRvbmUKKyAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIFRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisgICAgICAgIGJyZWFrCisgICAgZmkKK2RvbmUKKworaWYgWyAtbiAiJFRBUkdFVF9ERVZJQ0VfTkFNRSIgXTsgdGhlbgorICAgIGVjaG8gIkluc3RhbGxpbmcgaW1hZ2Ugb24gL2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FIC4uLiIKK2Vsc2UKKyAgICBlY2hvICJObyBoYXJkIGRyaXZlIHNlbGVjdGVkLiBJbnN0YWxsYXRpb24gYWJvcnRlZC4iCisgICAgZXhpdCAxCitmaQorCitkZXZpY2U9L2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50ICR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitta2RpciAtcCAvdG1wCitjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCitzd2FwX3NpemU9JCgoZGlza19zaXplKnN3YXBfcmF0aW8vMTAwKSkKK3Jvb3Rmc19zaXplPSQoKGRpc2tfc2l6ZS1ib290X3NpemUtc3dhcF9zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCitzd2FwX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisgICAgcGFydF9wcmVmaXg9InAiCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKK3Jvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3N3YXA9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0zCisKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiQm9vdCBwYXJ0aXRpb24gc2l6ZTogICAkYm9vdF9zaXplIE1CICgkYm9vdGZzKSIKK2VjaG8gIlJvb3RmcyBwYXJ0aXRpb24gc2l6ZTogJHJvb3Rmc19zaXplIE1CICgkcm9vdGZzKSIKK2VjaG8gIlN3YXAgcGFydGl0aW9uIHNpemU6ICAgJHN3YXBfc2l6ZSBNQiAoJHN3YXApIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK2RkIGlmPS9kZXYvemVybyBvZj0ke2RldmljZX0gYnM9NTEyIGNvdW50PTM1CisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gJHtkZXZpY2V9IC4uLiIKK3BhcnRlZCAke2RldmljZX0gbWtsYWJlbCBncHQKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IGJvb3QgZmF0MzIgMCUgJGJvb3Rfc2l6ZQorcGFydGVkICR7ZGV2aWNlfSBzZXQgMSBib290IG9uCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0IHJvb3QgZXh0MyAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIG9uICRzd2FwIgorcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgc3dhcCBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gdmZhdC4uLiIKK21rZnMudmZhdCAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MSkKKyAgICBzd2FwX3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTMpCisgICAgZWNobyAiL2Rldi9kaXNrL2J5LXBhcnR1dWlkLyRzd2FwX3BhcnRfdXVpZCAgICAgICAgICAgICAgICBzd2FwICAgICAgICAgICAgIHN3YXAgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgIDAiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICBlY2hvICJVVUlEPSRib290X3V1aWQgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgdmZhdCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiJHtkZXZpY2V9IiA+PiAvdGd0X3Jvb3QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCisKK3Vtb3VudCAvc3JjX3Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IGJvb3QgcGFydGl0aW9uCittb3VudCAkYm9vdGZzIC9ib290CitlY2hvICJQcmVwYXJpbmcgYm9vdCBwYXJ0aXRpb24uLi4iCisKK0VGSURJUj0iL2Jvb3QvRUZJL0JPT1QiCitta2RpciAtcCAkRUZJRElSCisjIENvcHkgdGhlIGVmaSBsb2FkZXIKK2NwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvKi5lZmkgJEVGSURJUgorCitpZiBbIC1mIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgXTsgdGhlbgorICAgIHJvb3RfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgorICAgIGNwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgJEdSVUJDRkcKKyAgICAjIFVwZGF0ZSBncnViIGNvbmZpZyBmb3IgdGhlIGluc3RhbGxlZCBpbWFnZQorICAgICMgRGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgc2VkIC1pICIvbWVudWVudHJ5ICdpbnN0YWxsJy8sL159L2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgQWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQGxpbnV4IC92bWxpbnV6ICpAbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCQ0ZHCitmaQorCitpZiBbIC1kIC9ydW4vbWVkaWEvJDEvbG9hZGVyIF07IHRoZW4KKyAgICBHVU1NSUJPT1RfQ0ZHUz0iL2Jvb3QvbG9hZGVyL2VudHJpZXMvKi5jb25mIgorICAgICMgY29weSBjb25maWcgZmlsZXMgZm9yIGd1bW1pYm9vdAorICAgIGNwIC1kciAvcnVuL21lZGlhLyQxL2xvYWRlciAvYm9vdAorICAgICMgZGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgcm0gLWYgL2Jvb3QvbG9hZGVyL2VudHJpZXMvaW5zdGFsbC5jb25mCisgICAgIyBkZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IExBQkVMPSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyBMQUJFTD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBkZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgYWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQG9wdGlvbnMgKkBvcHRpb25zIHJvb3Q9UEFSVFVVSUQ9JHJvb3R1dWlkIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1VNTUlCT09UX0NGR1MKK2ZpCisKK3Vtb3VudCAvdGd0X3Jvb3QKKworY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9ib290CisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtdGVzdGZzLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtdGVzdGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNjIxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2gKQEAgLTAsMCArMSwyMjAgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAwCisKKyMgNTAlIGZvciB0aGUgdGhlIHRlc3QgcGFydGl0aW9uCit0ZXN0ZnNfcmF0aW89NTAKKworIyBHZXQgYSBsaXN0IG9mIGhhcmQgZHJpdmVzCitoZG5hbWVsaXN0PSIiCitsaXZlX2Rldl9uYW1lPSR7MSUlLyp9CisKK2VjaG8gIlNlYXJjaGluZyBmb3IgaGFyZCBkcml2ZXMgLi4uIgorCitmb3IgZGV2aWNlIGluIGBscyAvc3lzL2Jsb2NrL2A7IGRvCisgICAgY2FzZSAkZGV2aWNlIGluCisJbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKwkgICAgOzsKKwlyYW0qKQorICAgICAgICAgICAgIyBza2lwIHJhbSBkZXZpY2UKKwkgICAgOzsKKwkqKQorCSAgICAjIHNraXAgdGhlIGRldmljZSBMaXZlT1MgaXMgb24KKwkgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisJICAgIGlmIFsgJGRldmljZSAhPSAkbGl2ZV9kZXZfbmFtZSAtYSAtZSAvZGV2LyRkZXZpY2UgXTsgdGhlbgorCQloZG5hbWVsaXN0PSIkaGRuYW1lbGlzdCAkZGV2aWNlIgorCSAgICBmaQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKwllY2hvIC1uICJWRU5ET1I9IgorCWNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgZWNobyAtbiAiTU9ERUw9IgorICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKwllY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKwlyZWFkIGFuc3dlcgorCWlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisJICAgIGJyZWFrCisJZmkKKwllY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorCVRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisJYnJlYWsKKyAgICBmaQorZG9uZQorCitpZiBbIC1uICIkVEFSR0VUX0RFVklDRV9OQU1FIiBdOyB0aGVuCisgICAgZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyRUQVJHRVRfREVWSUNFX05BTUUgLi4uIgorZWxzZQorICAgIGVjaG8gIk5vIGhhcmQgZHJpdmUgc2VsZWN0ZWQuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK2RldmljZT0kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50IC9kZXYvJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0gOyB0aGVuCisgICAgbWtub2QgL2Rldi9sb29wMCBiIDcgMAorZmkKKworbWtkaXIgLXAgL3RtcAoraWYgWyAhIC1MIC9ldGMvbXRhYiBdOyB0aGVuCisJY2F0IC9wcm9jL21vdW50cyA+IC9ldGMvbXRhYgorZmkKKworZGlza19zaXplPSQocGFydGVkIC9kZXYvJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKwordGVzdGZzX3NpemU9JCgoZGlza19zaXplKnRlc3Rmc19yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJvb3Rfc2l6ZS10ZXN0ZnNfc2l6ZSkpCisKK3Jvb3Rmc19zdGFydD0kKChib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQordGVzdGZzX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisJcGFydF9wcmVmaXg9InAiCisJcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorcm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCit0ZXN0ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiVGVzdGZzIHBhcnRpdGlvbiBzaXplOiAkdGVzdGZzX3NpemUgTUIgKCR0ZXN0ZnMpIgorZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJEZWxldGluZyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvJHtkZXZpY2V9IGJzPTUxMiBjb3VudD0yCisKK2VjaG8gIkNyZWF0aW5nIG5ldyBwYXJ0aXRpb24gdGFibGUgb24gL2Rldi8ke2RldmljZX0gLi4uIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rbGFiZWwgbXNkb3MKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAwJSAkYm9vdF9zaXplCisKK2VjaG8gIkNyZWF0aW5nIHJvb3RmcyBwYXJ0aXRpb24gb24gJHJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHRlc3RmcyBwYXJ0aXRpb24gb24gJHRlc3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAkdGVzdGZzX3N0YXJ0IDEwMCUKKworcGFydGVkIC9kZXYvJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJib290IiAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzIC1MICJyb290ZnMiICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkdGVzdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInRlc3Ryb290ZnMiICR0ZXN0ZnMKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CisKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3NyY19yb290LyogL3RndF9yb290CisKK3RvdWNoIC90Z3Rfcm9vdC9ldGMvbWFzdGVyaW1hZ2UKKworaWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGVjaG8gIiRib290ZnMgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgZXh0MyAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKwllY2hvICIvZGV2LyR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIF0gOyB0aGVuCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViMiBtZW51Li4uIgorICAgIEdSVUJDRkc9Ii9ib290L2dydWIvZ3J1Yi5jZmciCisgICAgbWtkaXIgLXAgJChkaXJuYW1lICRHUlVCQ0ZHKQorICAgIGNhdCA+JEdSVUJDRkcgPDxfRU9GIAorc2VyaWFsIC0tc3BlZWQ9MTE1MjAwIC0tdW5pdD0wIC0td29yZD04IC0tcGFyaXR5PW5vIC0tc3RvcD0xCit0ZXJtaW5hbF9pbnB1dCAtLWFwcGVuZCAgc2VyaWFsCit0ZXJtaW5hbF9vdXRwdXQgLS1hcHBlbmQgc2VyaWFsCitzZXQgdGltZW91dF9zdHlsZT1oaWRkZW4KK3NldCB0aW1lb3V0PTUKK21lbnVlbnRyeSAiTGludXgiIHsKKyAgICBzZXQgcm9vdD0oaGQwLDEpCisgICAgbGludXggL3ZtbGludXogcm9vdD0kcm9vdGZzICRyb290d2FpdCBydyAkNSAkMyAkNCBxdWlldAorfQorX0VPRgorICAgICMgQWRkIHRoZSB0ZXN0IGxhYmVsCisgICAgZWNobyAtbmUgIlxubWVudWVudHJ5ICd0ZXN0JyAtLWhvdGtleSB4IHtcbmxpbnV4IC90ZXN0LWtlcm5lbCByb290PSR0ZXN0ZnMgcncgJHJvb3R3YWl0IHF1aWV0XG59XG4iID4+ICRHUlVCQ0ZHCisKKyAgICBjaG1vZCAwNDQ0ICRHUlVCQ0ZHCitmaQorZ3J1Yi1pbnN0YWxsIC9kZXYvJHtkZXZpY2V9CitlY2hvICIoaGQwKSAvZGV2LyR7ZGV2aWNlfSIgPiAvYm9vdC9ncnViL2RldmljZS5tYXAKKworIyBJZiBncnViLmNmZyBkb2Vzbid0IGV4aXN0LCBhc3N1bWUgR1JVQiAwLjk3IGFuZCBjcmVhdGUgYSBtZW51LmxzdAoraWYgWyAhIC1mIC9ib290L2dydWIvZ3J1Yi5jZmcgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIgbWVudS4uLiIKKyAgICBlY2hvICJkZWZhdWx0IDAiID4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpbWVvdXQgMzAiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aXRsZSBMaXZlIEJvb3QvSW5zdGFsbC1JbWFnZSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInJvb3QgIChoZDAsMCkiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJrZXJuZWwgL3ZtbGludXogcm9vdD0kcm9vdGZzIHJ3ICQzICQ0IHF1aWV0IiA+PiAvYm9vdC9ncnViL21lbnUubHN0CitmaQorCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL2Jvb3QvCisKK3Vtb3VudCAvYm9vdAorCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU5NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwuc2gKQEAgLTAsMCArMSwyNzIgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSBJbnRlbAorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXSBbdmlkZW9fbW9kZV0gW3ZnYV9tb2RlXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAKKworIyA1JSBmb3IgdGhlIHN3YXAKK3N3YXBfcmF0aW89NQorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9YGNhdCAvcHJvYy9tb3VudHMgfCBncmVwICR7MSUvfSB8IGF3ayAne3ByaW50ICQxfSdgCitsaXZlX2Rldl9uYW1lPSR7bGl2ZV9kZXZfbmFtZSNcL2Rldi99CisjIE9ubHkgc3RyaXAgdGhlIGRpZ2l0IGlkZW50aWZpZXIgaWYgdGhlIGRldmljZSBpcyBub3QgYW4gbW1jCitjYXNlICRsaXZlX2Rldl9uYW1lIGluCisgICAgbW1jYmxrKikKKyAgICA7OworICAgICopCisgICAgICAgIGxpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lJSVbMC05XSp9CisgICAgOzsKK2VzYWMKKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgbG9vcCopCisgICAgICAgICAgICAjIHNraXAgbG9vcCBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHNyKikKKyAgICAgICAgICAgICMgc2tpcCBDRFJPTSBkZXZpY2UKKyAgICAgICAgICAgIDs7CisgICAgICAgIHJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorICAgICAgICAgICAgIyBBZGQgdmFsaWQgaGFyZCBkcml2ZSBuYW1lIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBjYXNlICRkZXZpY2UgaW4KKyAgICAgICAgICAgICAgICAkbGl2ZV9kZXZfbmFtZSopCisgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2Ugd2UgYXJlIHJ1bm5pbmcgZnJvbQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgaGRuYW1lbGlzdD0iJGhkbmFtZWxpc3QgJGRldmljZSIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK1RBUkdFVF9ERVZJQ0VfTkFNRT0iIgorZm9yIGhkbmFtZSBpbiAkaGRuYW1lbGlzdDsgZG8KKyAgICAjIERpc3BsYXkgZm91bmQgaGFyZCBkcml2ZXMgYW5kIHRoZWlyIGJhc2ljIGluZm8KKyAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgIGVjaG8gL2Rldi8kaGRuYW1lCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvciBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlZFTkRPUj0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3ZlbmRvcgorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiTU9ERUw9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbAorICAgIGZpCisgICAgaWYgWyAtciAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIlVFVkVOVD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL3VldmVudAorICAgIGZpCisgICAgZWNobworICAgICMgR2V0IHVzZXIgY2hvaWNlCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgZWNobyAtbiAiRG8geW91IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGltYWdlIHRoZXJlPyBbeS9uXSAiCisgICAgICAgIHJlYWQgYW5zd2VyCisgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIC1vICIkYW5zd2VyIiA9ICJuIiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBlY2hvICJQbGVhc2UgYW5zd2VyIHkgb3IgbiIKKyAgICBkb25lCisgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgXTsgdGhlbgorICAgICAgICBUQVJHRVRfREVWSUNFX05BTUU9JGhkbmFtZQorICAgICAgICBicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPS9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRQorCisjCisjIFRoZSB1ZGV2IGF1dG9tb3VudGVyIGNhbiBjYXVzZSBwYWluIGhlcmUsIGtpbGwgaXQKKyMKK3JtIC1mIC9ldGMvdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworcm0gLWYgL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQqCisKKyMKKyMgVW5tb3VudCBhbnl0aGluZyB0aGUgYXV0b21vdW50ZXIgaGFkIG1vdW50ZWQKKyMKK3Vtb3VudCAke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworaWYgWyAhIC1iIC9kZXYvbG9vcDAgXSA7IHRoZW4KKyAgICBta25vZCAvZGV2L2xvb3AwIGIgNyAwCitmaQorCitta2RpciAtcCAvdG1wCitpZiBbICEgLUwgL2V0Yy9tdGFiIF07IHRoZW4KKyAgICBjYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCitmaQorCitkaXNrX3NpemU9JChwYXJ0ZWQgJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKworZ3J1Yl92ZXJzaW9uPSQoZ3J1Yi1pbnN0YWxsIC12fHNlZCAncy8uKiBcKFswLTldXCkuKi9cMS8nKQorCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBiaW9zX2Jvb3Rfc2l6ZT0wCitlbHNlCisgICAgIyBGb3IgR1JVQiAyIHdlIG5lZWQgc2VwYXJhdGUgcGFyaXRpb24gdG8gc3RvcmUgc3RhZ2UyIGdydWIgaW1hZ2UKKyAgICAjIDJNYiB2YWx1ZSBpcyBjaG9zZW4gdG8gYWxpZ24gcGFydGl0aW9uIGZvciBiZXN0IHBlcmZvcm1hbmNlLgorICAgIGJpb3NfYm9vdF9zaXplPTIKK2ZpCisKK3N3YXBfc2l6ZT0kKChkaXNrX3NpemUqc3dhcF9yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJpb3NfYm9vdF9zaXplLWJvb3Rfc2l6ZS1zd2FwX3NpemUpKQorCitib290X3N0YXJ0PSQoKGJpb3NfYm9vdF9zaXplKSkKK3Jvb3Rmc19zdGFydD0kKChiaW9zX2Jvb3Rfc2l6ZStib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQorc3dhcF9zdGFydD0kKChyb290ZnNfZW5kKSkKKworIyBNTUMgZGV2aWNlcyBhcmUgc3BlY2lhbCBpbiBhIGNvdXBsZSBvZiB3YXlzCisjIDEpIHRoZXkgdXNlIGEgcGFydGl0aW9uIHByZWZpeCBjaGFyYWN0ZXIgJ3AnCisjIDIpIHRoZXkgYXJlIGRldGVjdGVkIGFzeW5jaHJvbm91c2x5IChuZWVkIHJvb3R3YWl0KQorcm9vdHdhaXQ9IiIKK3BhcnRfcHJlZml4PSIiCitpZiBbICEgIiR7ZGV2aWNlI21tY2Jsa30iID0gIiR7ZGV2aWNlfSIgXTsgdGhlbgorICAgIHBhcnRfcHJlZml4PSJwIgorICAgIHJvb3R3YWl0PSJyb290d2FpdCIKK2ZpCisKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIGJpb3NfYm9vdD0nJworICAgIGJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKKyAgICByb290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCisgICAgc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKK2Vsc2UKKyAgICBiaW9zX2Jvb3Q9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCisgICAgYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MgorICAgIHJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKyAgICBzd2FwPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9NAorZmkKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitbICRncnViX3ZlcnNpb24gLW5lIDAgXSAmJiBlY2hvICJCSU9TIGJvb3QgcGFydGl0aW9uIHNpemU6ICRiaW9zX2Jvb3Rfc2l6ZSBNQiAoJGJpb3NfYm9vdCkiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkc3dhcF9zaXplIE1CICgkc3dhcCkiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPSR7ZGV2aWNlfSBicz01MTIgY291bnQ9MzUKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgoraWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3RhYmxlIG1zZG9zCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IGV4dDMgMCUgJGJvb3Rfc2l6ZQorZWxzZQorICAgIHBhcnRlZCAke2RldmljZX0gbWt0YWJsZSBncHQKKyAgICBlY2hvICJDcmVhdGluZyBCSU9TIGJvb3QgcGFydGl0aW9uIG9uICRiaW9zX2Jvb3QiCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgYmlvc19ib290IDAlICRiaW9zX2Jvb3Rfc2l6ZQorICAgIHBhcnRlZCAke2RldmljZX0gc2V0IDEgYmlvc19ncnViIG9uCisgICAgZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBib290IGV4dDMgJGJvb3Rfc3RhcnQgJGJvb3Rfc2l6ZQorZmkKKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gJiYgcG5hbWU9J3ByaW1hcnknIHx8IHBuYW1lPSdyb290JworcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgJHBuYW1lIGV4dDMgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyBzd2FwIHBhcnRpdGlvbiBvbiAkc3dhcCIKK1sgJGdydWJfdmVyc2lvbiAtZXEgMCBdICYmIHBuYW1lPSdwcmltYXJ5JyB8fCBwbmFtZT0nc3dhcCcKK3BhcnRlZCAke2RldmljZX0gbWtwYXJ0ICRwbmFtZSBsaW51eC1zd2FwICRzd2FwX3N0YXJ0IDEwMCUKKworcGFydGVkICR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAkYm9vdGZzCisKK2VjaG8gIkZvcm1hdHRpbmcgJHJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyBzd2FwIHBhcnRpdGlvbi4uLigkc3dhcCkiCitta3N3YXAgJHN3YXAKKworbWtkaXIgL3RndF9yb290Citta2RpciAvc3JjX3Jvb3QKK21rZGlyIC1wIC9ib290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCByb290IHBhcnRpdGlvbgorbW91bnQgJHJvb3RmcyAvdGd0X3Jvb3QKK21vdW50IC1vIHJ3LGxvb3Asbm9hdGltZSxub2RpcmF0aW1lIC9ydW4vbWVkaWEvJDEvJDIgL3NyY19yb290CitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9zcmNfcm9vdC8qIC90Z3Rfcm9vdAoraWYgWyAtZCAvdGd0X3Jvb3QvZXRjLyBdIDsgdGhlbgorICAgIGlmIFsgJGdydWJfdmVyc2lvbiAtbmUgMCBdIDsgdGhlbgorICAgICAgICBib290X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBVVUlEICR7ZGV2aWNlfTIpCisgICAgICAgIHN3YXBfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9NCkKKyAgICAgICAgYm9vdGRldj0iVVVJRD0kYm9vdF91dWlkIgorICAgICAgICBzd2FwZGV2PS9kZXYvZGlzay9ieS1wYXJ0dXVpZC8kc3dhcF9wYXJ0X3V1aWQKKyAgICBlbHNlCisgICAgICAgIGJvb3RkZXY9JHtkZXZpY2V9MgorICAgICAgICBzd2FwZGV2PSR7ZGV2aWNlfTQKKyAgICBmaQorICAgIGVjaG8gIiRzd2FwZGV2ICAgICAgICAgICAgICAgIHN3YXAgICAgICAgICAgICAgc3dhcCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMCIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgIGVjaG8gIiRib290ZGV2ICAgICAgICAgICAgICAvYm9vdCAgICAgICAgICAgIGV4dDMgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDEgIDIiID4+IC90Z3Rfcm9vdC9ldGMvZnN0YWIKKyAgICAjIFdlIGRvbnQgd2FudCB1ZGV2IHRvIG1vdW50IG91ciByb290IGRldmljZSB3aGlsZSB3ZSdyZSBib290aW5nLi4uCisgICAgaWYgWyAtZCAvdGd0X3Jvb3QvZXRjL3VkZXYvIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIiR7ZGV2aWNlfSIgPj4gL3RndF9yb290L2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQordW1vdW50IC90Z3Rfcm9vdAordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK2lmIFsgLWYgL2V0Yy9ncnViLmQvMDBfaGVhZGVyIC1hICRncnViX3ZlcnNpb24gLW5lIDAgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIyIG1lbnUuLi4iCisgICAgcm9vdF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX0zKQorICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MikKKyAgICBHUlVCQ0ZHPSIvYm9vdC9ncnViL2dydWIuY2ZnIgorICAgIG1rZGlyIC1wICQoZGlybmFtZSAkR1JVQkNGRykKKyAgICBjYXQgPiRHUlVCQ0ZHIDw8X0VPRgorbWVudWVudHJ5ICJMaW51eCIgeworICAgIHNlYXJjaCAtLW5vLWZsb3BweSAtLWZzLXV1aWQgJGJvb3RfdXVpZCAtLXNldCByb290CisgICAgbGludXggL3ZtbGludXogcm9vdD1QQVJUVVVJRD0kcm9vdF9wYXJ0X3V1aWQgJHJvb3R3YWl0IHJ3ICQ1ICQzICQ0IHF1aWV0Cit9CitfRU9GCisgICAgY2htb2QgMDQ0NCAkR1JVQkNGRworZmkKK2dydWItaW5zdGFsbCAke2RldmljZX0KKworaWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgZWNobyAiKGhkMCkgJHtkZXZpY2V9IiA+IC9ib290L2dydWIvZGV2aWNlLm1hcAorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YiBtZW51Li4uIgorICAgIGVjaG8gImRlZmF1bHQgMCIgPiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGltZW91dCAzMCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpdGxlIExpdmUgQm9vdC9JbnN0YWxsLUltYWdlIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAicm9vdCAgKGhkMCwwKSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gImtlcm5lbCAvdm1saW51eiByb290PSRyb290ZnMgcncgJDMgJDQgcXVpZXQiID4+IC9ib290L2dydWIvbWVudS5sc3QKK2ZpCisKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvYm9vdC8KKwordW1vdW50IC9ib290CisKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTJjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtbGl2ZS5zaApAQCAtMCwwICsxLDIzNSBAQAorIyEvYmluL3NoCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworUk9PVF9NT1VOVD0iL3Jvb3Rmcy8iCitST09UX0lNQUdFPSJyb290ZnMuaW1nIgorTU9VTlQ9Ii9iaW4vbW91bnQiCitVTU9VTlQ9Ii9iaW4vdW1vdW50IgorSVNPTElOVVg9IiIKKworUk9PVF9ESVNLPSIiCisKKyMgQ29waWVkIGZyb20gaW5pdHJhbWZzLWZyYW1ld29yay4gVGhlIGNvcmUgb2YgdGhpcyBzY3JpcHQgcHJvYmFibHkgc2hvdWxkIGJlCisjIHR1cm5lZCBpbnRvIGluaXRyYW1mcy1mcmFtZXdvcmsgbW9kdWxlcyB0byByZWR1Y2UgZHVwbGljYXRpb24uCit1ZGV2X2RhZW1vbigpIHsKKwlPUFRJT05TPSIvc2Jpbi91ZGV2L3VkZXZkIC9zYmluL3VkZXZkIC9saWIvdWRldi91ZGV2ZCAvbGliL3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCIKKworCWZvciBvIGluICRPUFRJT05TOyBkbworCQlpZiBbIC14ICIkbyIgXTsgdGhlbgorCQkJZWNobyAkbworCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisKKwlyZXR1cm4gMQorfQorCitfVURFVl9EQUVNT049YHVkZXZfZGFlbW9uYAorCitlYXJseV9zZXR1cCgpIHsKKyAgICBta2RpciAtcCAvcHJvYworICAgIG1rZGlyIC1wIC9zeXMKKyAgICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKKyAgICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisgICAgbW91bnQgLXQgZGV2dG1wZnMgbm9uZSAvZGV2CisKKyAgICAjIHN1cHBvcnQgbW9kdWxhciBrZXJuZWwKKyAgICBtb2Rwcm9iZSBpc29mcyAyPiAvZGV2L251bGwKKworICAgIG1rZGlyIC1wIC9ydW4KKyAgICBta2RpciAtcCAvdmFyL3J1bgorCisgICAgJF9VREVWX0RBRU1PTiAtLWRhZW1vbgorICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKK30KKworcmVhZF9hcmdzKCkgeworICAgIFsgLXogIiRDTURMSU5FIiBdICYmIENNRExJTkU9YGNhdCAvcHJvYy9jbWRsaW5lYAorICAgIGZvciBhcmcgaW4gJENNRExJTkU7IGRvCisgICAgICAgIG9wdGFyZz1gZXhwciAieCRhcmciIDogJ3hbXj1dKj1cKC4qXCknYAorICAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICAgICAgIHJvb3Q9KikKKyAgICAgICAgICAgICAgICBST09UX0RFVklDRT0kb3B0YXJnIDs7CisgICAgICAgICAgICByb290aW1hZ2U9KikKKyAgICAgICAgICAgICAgICBST09UX0lNQUdFPSRvcHRhcmcgOzsKKyAgICAgICAgICAgIHJvb3Rmc3R5cGU9KikKKyAgICAgICAgICAgICAgICBtb2Rwcm9iZSAkb3B0YXJnIDI+IC9kZXYvbnVsbCA7OworICAgICAgICAgICAgTEFCRUw9KikKKyAgICAgICAgICAgICAgICBsYWJlbD0kb3B0YXJnIDs7CisgICAgICAgICAgICB2aWRlbz0qKQorICAgICAgICAgICAgICAgIHZpZGVvX21vZGU9JGFyZyA7OworICAgICAgICAgICAgdmdhPSopCisgICAgICAgICAgICAgICAgdmdhX21vZGU9JGFyZyA7OworICAgICAgICAgICAgY29uc29sZT0qKQorICAgICAgICAgICAgICAgIGlmIFsgLXogIiR7Y29uc29sZV9wYXJhbXN9IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSRhcmcKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVfcGFyYW1zPSIkY29uc29sZV9wYXJhbXMgJGFyZyIKKyAgICAgICAgICAgICAgICBmaSA7OworICAgICAgICAgICAgZGVidWdzaGVsbCopCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJG9wdGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PTMwCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGx0aW1lb3V0PSRvcHRhcmcKKyAgICAgICAgICAgICAgICBmaSAKKyAgICAgICAgZXNhYworICAgIGRvbmUKK30KKworYm9vdF9saXZlX3Jvb3QoKSB7CisgICAgIyBXYXRjaGVzIHRoZSB1ZGV2IGV2ZW50IHF1ZXVlLCBhbmQgZXhpdHMgaWYgYWxsIGN1cnJlbnQgZXZlbnRzIGFyZSBoYW5kbGVkCisgICAgdWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTMgLS1xdWlldAorICAgIGtpbGxhbGwgIiR7X1VERVZfREFFTU9OIyMqL30iIDI+L2Rldi9udWxsCisKKyAgICAjIEFsbG93IGZvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVhbCByb290IGV2ZW4gYWZ0ZXIgYm9vdAorICAgIG1rZGlyIC1wICAke1JPT1RfTU9VTlR9L21lZGlhL3JlYWxyb290CisgICAgbW91bnQgLW4gLS1tb3ZlICIvcnVuL21lZGlhLyR7Uk9PVF9ESVNLfSIgJHtST09UX01PVU5UfS9tZWRpYS9yZWFscm9vdAorCisgICAgIyBNb3ZlIHRoZSBtb3VudCBwb2ludHMgb2Ygc29tZSBmaWxlc3lzdGVtcyBvdmVyIHRvCisgICAgIyB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcmllcyB1bmRlciB0aGUgcmVhbCByb290IGZpbGVzeXN0ZW0uCisgICAgZm9yIGRpciBpbiBgYXdrICcvXC9kZXYuKiBcL3J1blwvbWVkaWEve3ByaW50ICQyfScgL3Byb2MvbW91bnRzYDsgZG8KKyAgICAgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvJHtkaXIjIyovfQorICAgICAgICBtb3VudCAtbiAtLW1vdmUgJGRpciAke1JPT1RfTU9VTlR9L21lZGlhLyR7ZGlyIyMqL30KKyAgICBkb25lCisgICAgbW91bnQgLW4gLS1tb3ZlIC9wcm9jICR7Uk9PVF9NT1VOVH0vcHJvYworICAgIG1vdW50IC1uIC0tbW92ZSAvc3lzICR7Uk9PVF9NT1VOVH0vc3lzCisgICAgbW91bnQgLW4gLS1tb3ZlIC9kZXYgJHtST09UX01PVU5UfS9kZXYKKworICAgIGNkICRST09UX01PVU5UCisKKyAgICAjIGJ1c3lib3ggc3dpdGNoX3Jvb3Qgc3VwcG9ydHMgLWMgb3B0aW9uCisgICAgZXhlYyBzd2l0Y2hfcm9vdCAtYyAvZGV2L2NvbnNvbGUgJFJPT1RfTU9VTlQgL3NiaW4vaW5pdCAkQ01ETElORSB8fAorICAgICAgICBmYXRhbCAiQ291bGRuJ3Qgc3dpdGNoX3Jvb3QsIGRyb3BwaW5nIHRvIHNoZWxsIgorfQorCitmYXRhbCgpIHsKKyAgICBlY2hvICQxID4kQ09OU09MRQorICAgIGVjaG8gPiRDT05TT0xFCisgICAgZXhlYyBzaAorfQorCitlYXJseV9zZXR1cAorCitbIC16ICIkQ09OU09MRSIgXSAmJiBDT05TT0xFPSIvZGV2L2NvbnNvbGUiCisKK3JlYWRfYXJncworCitlY2hvICJXYWl0aW5nIGZvciByZW1vdmFibGUgbWVkaWEuLi4iCitDPTAKK3doaWxlIHRydWUKK2RvCisgIGZvciBpIGluIGBscyAvcnVuL21lZGlhIDI+L2Rldi9udWxsYDsgZG8KKyAgICAgIGlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kUk9PVF9JTUFHRSBdIDsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlST09UX0RJU0s9IiRpIgorCQlicmVhaworCSAgZWxpZiBbIC1mIC9ydW4vbWVkaWEvJGkvaXNvbGludXgvJFJPT1RfSU1BR0UgXTsgdGhlbgorCQlmb3VuZD0ieWVzIgorCQlJU09MSU5VWD0iaXNvbGludXgiCisJCVJPT1RfRElTSz0iJGkiCisJCWJyZWFrCQorICAgICAgZmkKKyAgZG9uZQorICBpZiBbICIkZm91bmQiID0gInllcyIgXTsgdGhlbgorICAgICAgYnJlYWs7CisgIGZpCisgICMgZG9uJ3Qgd2FpdCBmb3IgbW9yZSB0aGFuICRzaGVsbHRpbWVvdXQgc2Vjb25kcywgaWYgaXQncyBzZXQKKyAgaWYgWyAtbiAiJHNoZWxsdGltZW91dCIgXTsgdGhlbgorICAgICAgZWNobyAtbiAiICIgJCgoICRzaGVsbHRpbWVvdXQgLSAkQyApKQorICAgICAgaWYgWyAkQyAtZ2UgJHNoZWxsdGltZW91dCBdOyB0aGVuCisgICAgICAgICAgIGVjaG8gIi4uLiIKKwkgICBlY2hvICJNb3VudGVkIGZpbGVzeXN0ZW1zIgorICAgICAgICAgICBtb3VudCB8IGdyZXAgbWVkaWEKKyAgICAgICAgICAgZWNobyAiQXZhaWxhYmxlIGJsb2NrIGRldmljZXMiCisgICAgICAgICAgIGNhdCAvcHJvYy9wYXJ0aXRpb25zCisgICAgICAgICAgIGZhdGFsICJDYW5ub3QgZmluZCAkUk9PVF9JTUFHRSBmaWxlIGluIC9ydW4vbWVkaWEvKiAsIGRyb3BwaW5nIHRvIGEgc2hlbGwgIgorICAgICAgZmkKKyAgICAgIEM9JCgoIEMgKyAxICkpCisgIGZpCisgIHNsZWVwIDEKK2RvbmUKKworIyBUcnkgdG8gbW91bnQgdGhlIHJvb3QgaW1hZ2UgcmVhZC13cml0ZSBhbmQgdGhlbiBib290IGl0IHVwLgorIyBUaGlzIGZ1bmN0aW9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhIHJlYWQtb25seSBpbWFnZSBhbmQgYSByZWFkLXdyaXRlIGltYWdlLgorIyBJbiB0aGUgZm9ybWVyIGNhc2UgKHR5cGljYWxseSBhbiBpc28pLCBpdCB0cmllcyB0byBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUuCisjIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHJvb3QgaW1hZ2UgY291bGQgYmUgbW91bnRlZCBhbmQgdGhlbiBkaXJlY3RseSBib290ZWQgdXAuCittb3VudF9hbmRfYm9vdCgpIHsKKyAgICBta2RpciAkUk9PVF9NT1VOVAorICAgIG1rbm9kIC9kZXYvbG9vcDAgYiA3IDAgMj4vZGV2L251bGwKKworICAgIGlmICEgbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kUk9PVF9ESVNLLyRJU09MSU5VWC8kUk9PVF9JTUFHRSAkUk9PVF9NT1VOVCA7IHRoZW4KKwlmYXRhbCAiQ291bGQgbm90IG1vdW50IHJvb3RmcyBpbWFnZSIKKyAgICBmaQorCisgICAgaWYgdG91Y2ggJFJPT1RfTU9VTlQvYmluIDI+L2Rldi9udWxsOyB0aGVuCisJIyBUaGUgcm9vdCBpbWFnZSBpcyByZWFkLXdyaXRlLCBkaXJlY3RseSBib290IGl0IHVwLgorCWJvb3RfbGl2ZV9yb290CisgICAgZmkKKworICAgICMgZGV0ZXJtaW5lIHdoaWNoIHVuaWZpY2F0aW9uIGZpbGVzeXN0ZW0gdG8gdXNlCisgICAgdW5pb25fZnNfdHlwZT0iIgorICAgIGlmIGdyZXAgLXEgLXcgIm92ZXJsYXlmcyIgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKwl1bmlvbl9mc190eXBlPSJvdmVybGF5ZnMiCisgICAgZWxpZiBncmVwIC1xIC13ICJhdWZzIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorCXVuaW9uX2ZzX3R5cGU9ImF1ZnMiCisgICAgZWxzZQorCXVuaW9uX2ZzX3R5cGU9IiIKKyAgICBmaQorCisgICAgIyBtYWtlIGEgdW5pb24gbW91bnQgaWYgcG9zc2libGUKKyAgICBjYXNlICR1bmlvbl9mc190eXBlIGluCisJIm92ZXJsYXlmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgb3ZlcmxheWZzIC1vICJsb3dlcmRpcj0vcm9vdGZzLnJvLHVwcGVyZGlyPS9yb290ZnMucnciIG92ZXJsYXlmcyAkUk9PVF9NT1VOVAorCQlta2RpciAtcCAkUk9PVF9NT1VOVC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ybworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ydyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkgICAgZmkKKwkgICAgOzsKKwkiYXVmcyIpCisJICAgIG1rZGlyIC1wIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCSAgICBpZiAhIG1vdW50IC1uIC0tbW92ZSAkUk9PVF9NT1VOVCAvcm9vdGZzLnJvOyB0aGVuCisJCXJtIC1yZiAvcm9vdGZzLnJvIC9yb290ZnMucncKKwkJZmF0YWwgIkNvdWxkIG5vdCBtb3ZlIHJvb3RmcyBtb3VudCBwb2ludCIKKwkgICAgZWxzZQorCQltb3VudCAtdCB0bXBmcyAtbyBydyxub2F0aW1lLG1vZGU9NzU1IHRtcGZzIC9yb290ZnMucncKKwkJbW91bnQgLXQgYXVmcyAtbyAiZGlycz0vcm9vdGZzLnJ3PXJ3Oi9yb290ZnMucm89cm8iIGF1ZnMgJFJPT1RfTU9VTlQKKwkJbWtkaXIgLXAgJFJPT1RfTU9VTlQvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ydworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucm8KKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucncgJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJICAgIGZpCisJICAgIDs7CisJIiIpCisJICAgIG1vdW50IC10IHRtcGZzIC1vIHJ3LG5vYXRpbWUsbW9kZT03NTUgdG1wZnMgJFJPT1RfTU9VTlQvbWVkaWEKKwkgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIGJvb3QgdGhlIGltYWdlCisgICAgYm9vdF9saXZlX3Jvb3QKK30KKworY2FzZSAkbGFiZWwgaW4KKyAgICBib290KQorCW1vdW50X2FuZF9ib290CisJOzsKKyAgICBpbnN0YWxsfGluc3RhbGwtZWZpKQorCWlmIFsgLWYgL3J1bi9tZWRpYS8kaS8kSVNPTElOVVgvJFJPT1RfSU1BR0UgXSA7IHRoZW4KKwkgICAgLi8kbGFiZWwuc2ggJGkvJElTT0xJTlVYICRST09UX0lNQUdFICR2aWRlb19tb2RlICR2Z2FfbW9kZSAkY29uc29sZV9wYXJhbXMKKwllbHNlCisJICAgIGZhdGFsICJDb3VsZCBub3QgZmluZCAkbGFiZWwgc2NyaXB0IgorCWZpCisKKwkjIElmIHdlJ3JlIGdldHRpbmcgaGVyZSwgd2UgZmFpbGVkLi4uCisJZmF0YWwgIkluc3RhbGxhdGlvbiBpbWFnZSBmYWlsZWQiCisJOzsKKyAgICAqKQorCSMgTm90IHN1cmUgd2hhdCBib290IGxhYmVsIGlzIHByb3ZpZGVkLiAgVHJ5IHRvIGJvb3QgdG8gYXZvaWQgbG9ja2luZyB1cC4KKwltb3VudF9hbmRfYm9vdAorCTs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWJvb3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTc5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1ib290XzEuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkV4dHJlbWVseSBiYXNpYyBsaXZlIGltYWdlIGluaXQgc2NyaXB0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtYm9vdC5zaCIKKworUFIgPSAicjIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1ib290LnNoICR7RH0vaW5pdAorfQorCitpbmhlcml0IGFsbGFyY2gKKworRklMRVNfJHtQTn0gKz0gIiAvaW5pdCAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZGVidWcgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZGVidWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiZmQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZwpAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworIyBBZGRzIHN1cHBvcnQgdG8gZHluYW1pYyBkZWJ1Z2dpbmcgb2YgaW5pdHJhbWZzIHVzaW5nIGJvb3RwYXJhbSBpbgorIyBmb2xsb3dpbmcgZm9ybWF0OgorIyAgIHNoZWxsICAgICAgICAgICAgICAgICA6IHN0YXJ0cyBhIHNoZWxsIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtb2R1bGUKKyMgICBzaGVsbD1iZWZvcmU6PG1vZHVsZT4gOiBzdGFydHMgYSBzaGVsbCBiZWZvcmUgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKyMgICBzaGVsbD1hZnRlcjo8bW9kdWxlPiAgOiBzdGFydHMgYSBzaGVsbCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorIworIyAgIHNoZWxsLWRlYnVnICAgICAgICAgICAgICAgICA6IHJ1biBzZXQgLXggYXMgc29vbiBhcyBwb3NzaWJsZQorIyAgIHNoZWxsLWRlYnVnPWJlZm9yZTo8bW9kdWxlPiA6IHJ1biBzZXQgLXggYmVmb3JlIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisjICAgc2hlbGwtZGVidWc9YWZ0ZXI6PG1vZHVsZT4gIDogcnVuIHNldCAteCBhZnRlciA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorCitERUJVR19TSEVMTD0iZmFsc2UiCisKK2RlYnVnX2hvb2tfaGFuZGxlcigpIHsKKwlzdGF0dXM9JDEKKwltb2R1bGU9JDIKKworCWlmIFsgLW4gIiRib290cGFyYW1fc2hlbGwiIF0gJiYgWyAiJGJvb3RwYXJhbV9zaGVsbCIgIT0gInRydWUiIF07IHRoZW4KKwkJc2hlbGxfd2FudGVkX3N0YXR1cz1gZXhwciAkYm9vdHBhcmFtX3NoZWxsIDogJ1woLipcKTouKidgCisJCXNoZWxsX3dhbnRlZF9tb2R1bGU9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbCA6ICcuKjpcKC4qXCknYAorCisJCWlmIFsgIiRzaGVsbF93YW50ZWRfc3RhdHVzIiA9ICJiZWZvcmUiIF07IHRoZW4KKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cHJlCisJCWVsc2UKKwkJCXNoZWxsX3dhbnRlZF9zdGF0dXM9cG9zdAorCQlmaQorCWZpCisKKwlpZiBbICIkYm9vdHBhcmFtX3NoZWxsIiA9ICJ0cnVlIiBdIHx8CisJCSggWyAiJHN0YXR1cyIgPSAiJHNoZWxsX3dhbnRlZF9zdGF0dXMiIF0gJiYKKwkJCVsgIiRtb2R1bGUiID0gIiRzaGVsbF93YW50ZWRfbW9kdWxlIiBdICk7IHRoZW4KKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgJHN0YXR1c19tc2cgJG1vZHVsZS4uLiIKKwkJc2gKKwlmaQorCisJaWYgWyAtbiAiJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyIgXSAmJiBbICIkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQlzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzPWBleHByICRib290cGFyYW1fc2hlbGxfZGVidWcgOiAnXCguKlwpOi4qJ2AKKwkJc2hlbGxfZGVidWdfd2FudGVkX21vZHVsZT1gZXhwciAkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIDogJy4qOlwoLipcKSdgCisKKwkJaWYgWyAiJHNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXMiID0gImJlZm9yZSIgXTsgdGhlbgorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wcmUKKwkJZWxzZQorCQkJc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cz1wb3N0CisJCWZpCisJZmkKKworCWlmIFsgIiRib290cGFyYW1fc2hlbGxfZGVidWciID0gInRydWUiIF0gfHwKKwkJKCBbICIkc3RhdHVzIiA9ICIkc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cyIgXSAmJgorCQkJWyAiJG1vZHVsZSIgPSAiJHNoZWxsX2RlYnVnX3dhbnRlZF9tb2R1bGUiIF0gKTsgdGhlbgorCQlpZiBbICIkREVCVUdfU0hFTEwiID0gInRydWUiIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisKKwkJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdOyB0aGVuCisJCQlzdGF0dXNfbXNnPSJiZWZvcmUiCisJCWVsc2UKKwkJCXN0YXR1c19tc2c9ImFmdGVyIgorCQlmaQorCisJCW1zZyAiU3RhcnRpbmcgc2hlbGwgZGVidWdnaW5nICRzdGF0dXNfbXNnICRtb2R1bGUuLi4iCisJCURFQlVHX1NIRUxMPSJ0cnVlIgorCQlzZXQgLXgKKwlmaQorfQorCitkZWJ1Z19lbmFibGVkKCkgeworCXJldHVybiAwCit9CisKK2RlYnVnX3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJkZWJ1Z19ob29rX2hhbmRsZXIiCisJYWRkX21vZHVsZV9wb3N0X2hvb2sgImRlYnVnX2hvb2tfaGFuZGxlciIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2UyZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjlmODAxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9lMmZzCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitlMmZzX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworZTJmc19ydW4oKSB7CisJZmlsZXN5c3RlbXM9ImV4dDQgZXh0MyBleHQyIgorCisJIyBsb2FkIG1vZHVsZXMKKwlmb3IgZnMgaW4gJGZpbGVzeXN0ZW1zOyBkbworCQlsb2FkX2tlcm5lbF9tb2R1bGUgJGZzCisJZG9uZQorCisJZm9yIGZzIGluICRmaWxlc3lzdGVtczsgZG8KKwkJZXZhbCAiZnNfb3B0aW9ucz1cJGJvb3RwYXJhbV8ke2ZzfSIKKwkJaWYgWyAtbiAiJGZzX29wdGlvbnMiIF07IHRoZW4KKwkJICAgIGRldj1gZXhwciAiJGZzX29wdGlvbnMiIDogJ1woW146XSpcKS4qJ2AKKwkJICAgIHBhdGg9YGV4cHIgIiRmc19vcHRpb25zIiA6ICdbXjpdKjpcKFteOl0qXCkuKidgCisKKwkJICAgIGluZm8gIk1vdW50aW5nICRkZXYgYXMgJGZzIG9uICRwYXRoIGFzICRmcy4uLiIKKwkJCW1rZGlyIC1wICRwYXRoCisJCSAgICBtb3VudCAtdCAkZnMgJGRldiAkcGF0aAorCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MTJmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZmluaXNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCitmaW5pc2hfZW5hYmxlZCgpIHsKKwlyZXR1cm4gMAorfQorCitmaW5pc2hfcnVuKCkgeworCWlmIFsgLW4gIiRST09URlNfRElSIiBdOyB0aGVuCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdGRlbGF5IiBdOyB0aGVuCisJCQlkZWJ1ZyAiU2xlZXBpbmcgZm9yICRyb290ZGVsYXkgc2Vjb25kKHMpIHRvIHdhaXQgcm9vdCB0byBzZXR0bGUuLi4iCisJCQlzbGVlcCAkYm9vdHBhcmFtX3Jvb3RkZWxheQorCQlmaQorCisJCWlmIFsgLW4gIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJZGVidWcgIk5vIGUyZnMgY29tcGF0aWJsZSBmaWxlc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQsIG1vdW50aW5nICRib290cGFyYW1fcm9vdC4uLiIKKworCQkJaWYgWyAiYGVjaG8gJHtib290cGFyYW1fcm9vdH0gfCBjdXQgLWMxLTVgIiA9ICJVVUlEPSIgXTsgdGhlbgorCQkJCXJvb3RfdXVpZD1gZWNobyAkYm9vdHBhcmFtX3Jvb3QgfCBjdXQgLWM2LWAKKwkJCQlib290cGFyYW1fcm9vdD0iL2Rldi9kaXNrL2J5LXV1aWQvJHJvb3RfdXVpZCIKKwkJCWZpCisKKwkJCWlmIFsgLWUgIiRib290cGFyYW1fcm9vdCIgXTsgdGhlbgorCQkJCWZsYWdzPSIiCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9ybyIgXTsgdGhlbgorCQkJCQlpZiBbICAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJCWJvb3RwYXJhbV9yb290ZmxhZ3M9IiRib290cGFyYW1fcm9vdGZsYWdzLCIKKwkJCQkJZmkKKwkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJHtib290cGFyYW1fcm9vdGZsYWdzfXJvIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZmxhZ3MiIF07IHRoZW4KKwkJCQkJZmxhZ3M9IiRmbGFncyAtbyRib290cGFyYW1fcm9vdGZsYWdzIgorCQkJCWZpCisJCQkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZnN0eXBlIiBdOyB0aGVuCisJCQkJCWZsYWdzPSIkZmxhZ3MgLXQkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiCisJCQkJZmkKKwkJCQltb3VudCAkZmxhZ3MgJGJvb3RwYXJhbV9yb290ICRST09URlNfRElSCisJCQllbHNlCisJCQkJZGVidWcgInJvb3QgJyRib290cGFyYW1fcm9vdCcgZG9lc24ndCBleGlzdC4iCisJCQlmaQorCQlmaQorCisJCWlmIFsgISAtZCAkUk9PVEZTX0RJUi9kZXYgXTsgdGhlbgorCQkJZmF0YWwgIkVSUk9SOiBUaGVyZSdzIG5vICcvZGV2JyBvbiByb290ZnMuIgorCQlmaQorCisJCWluZm8gIlN3aXRjaGluZyByb290IHRvICckUk9PVEZTX0RJUicuLi4iCisKKwkJZGVidWcgIk1vdmluZyAvZGV2LCAvcHJvYyBhbmQgL3N5cyBvbnRvIHJvb3Rmcy4uLiIKKwkJbW91bnQgLS1tb3ZlIC9kZXYgJFJPT1RGU19ESVIvZGV2CisJCW1vdW50IC0tbW92ZSAvcHJvYyAkUk9PVEZTX0RJUi9wcm9jCisJCW1vdW50IC0tbW92ZSAvc3lzICRST09URlNfRElSL3N5cworCisJCWNkICRST09URlNfRElSCisJCWV4ZWMgc3dpdGNoX3Jvb3QgLWMgL2Rldi9jb25zb2xlICRST09URlNfRElSICR7Ym9vdHBhcmFtX2luaXQ6LS9zYmluL2luaXR9CisJZWxzZQorCQlkZWJ1ZyAiTm8gcm9vdGZzIGhhcyBiZWVuIHNldCIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MjkxYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2luaXQKQEAgLTAsMCArMSwxNDUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorIworIyBQcm92aWRlcyB0aGUgQVBJIHRvIGJlIHVzZWQgYnkgdGhlIGluaXRyYW1mcyBtb2R1bGVzCisjCisjIE1vZHVsZXMgbmVlZCB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorIworIyA8bW9kdWxlPl9lbmFibGVkIDogY2hlY2sgaWYgdGhlIG1vZHVsZSBvdWdodCB0byBydW4gKHJldHVybiAxIHRvIHNraXApCisjIDxtb2R1bGU+X3J1biAgICAgOiBkbyB3aGF0IGlzIG5lZWQKKyMKKyMgQm9vdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgb24gZW52aXJvbm1lbnQgaW4gdGhlIGFzOgorIworIyAnZm9vPXZhbHVlJyBhcyAnYm9vdHBhcmFtX2Zvbz12YWx1ZScKKyMgJ2ZvbycgYXMgJ2Jvb3RwYXJhbV9mb289dHJ1ZScKKyMgJ2Zvby5iYXJbPXZhbHVlXSBhcyAnZm9vX2Jhcj1bdmFsdWV8dHJ1ZV0nCisKKyMgUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcHJlIDxtb2R1bGU+CithZGRfbW9kdWxlX3ByZV9ob29rKCkgeworCU1PRFVMRV9QUkVfSE9PS1M9IiRNT0RVTEVfUFJFX0hPT0tTICQxIgorfQorCisjIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHJ1bm5pbmcgYSBtb2R1bGUKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIGFzOgorIyAgIDxmdW5jdGlvbj4gcG9zdCA8bW9kdWxlPgorYWRkX21vZHVsZV9wb3N0X2hvb2soKSB7CisJTU9EVUxFX1BPU1RfSE9PS1M9IiRNT0RVTEVfUE9TVF9IT09LUyAkMSIKK30KKworIyBMb2FkIGtlcm5lbCBtb2R1bGUKK2xvYWRfa2VybmVsX21vZHVsZSgpIHsKKwlpZiBtb2Rwcm9iZSAkMSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJaW5mbyAiTG9hZGVkIG1vZHVsZSAkMSIKKwllbHNlCisJCWRlYnVnICJGYWlsZWQgdG8gbG9hZCBtb2R1bGUgJDEiCisJZmkKK30KKworIyBQcmludHMgaW5mb3JtYXRpb24KK21zZygpIHsKKwllY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiB2ZXJib3NlIGJvb3RwYXJhbSBpcyB1c2VkCitpbmZvKCkgeworCVsgLW4gIiRib290cGFyYW1fdmVyYm9zZSIgXSAmJiBlY2hvICIkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbiBpZiBkZWJ1ZyBib290cGFyYW0gaXMgdXNlZAorZGVidWcoKSB7CisJWyAtbiAiJGJvb3RwYXJhbV9kZWJ1ZyIgXSAmJiBlY2hvICJERUJVRzogJEAiID4vZGV2L2NvbnNvbGUKK30KKworIyBQcmludHMgYSBtZXNzYWdlIGFuZCBzdGFydCBhIGVuZGxlc3MgbG9vcAorZmF0YWwoKSB7CisgICAgZWNobyAkMSA+L2Rldi9jb25zb2xlCisgICAgZWNobyA+L2Rldi9jb25zb2xlCisKKyAgICBpZiBbIC1uICJib290cGFyYW1faW5pdF9mYXRhbF9zaCIgXTsgdGhlbgorICAgICAgICBzaAorICAgIGVsc2UKKwl3aGlsZSBbICJ0cnVlIiBdOyBkbworCQlzbGVlcCAzNjAwCisJZG9uZQorICAgIGZpCit9CisKKyMgVmFyaWFibGVzIHNoYXJlZCBhbW91bmcgbW9kdWxlcworUk9PVEZTX0RJUj0iL3Jvb3RmcyIgIyB3aGVyZSB0byBkbyB0aGUgc3dpdGNoIHJvb3QKK01PRFVMRV9QUkVfSE9PS1M9IiIgICMgZnVuY3Rpb25zIHRvIGNhbGwgYmVmb3JlIHJ1bm5pbmcgZWFjaCBtb2R1bGUKK01PRFVMRV9QT1NUX0hPT0tTPSIiICMgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgcnVubmluZyBlYWNoIG1vZHVsZQorTU9EVUxFU19ESVI9L2luaXQuZCAgIyBwbGFjZSB0byBsb29rIGZvciBtb2R1bGVzCisKKyMgbWFrZSBtb3VudCBzdG9wIGNvbXBsYWluaW5nIGFib3V0IG1pc3NpbmcgL2V0Yy9mc3RhYgordG91Y2ggL2V0Yy9mc3RhYgorCisjIGluaXRpYWxpemUgL3Byb2MsIC9zeXMgYW5kIC92YXIvbG9jaworbWtkaXIgLXAgL3Byb2MgL3N5cyAvdmFyL2xvY2sKK21vdW50IC10IHByb2MgcHJvYyAvcHJvYworbW91bnQgLXQgc3lzZnMgc3lzZnMgL3N5cworCisjIHBvcHVsYXRlIGJvb3RwYXJhbSBlbnZpcm9ubWVudAorZm9yIHAgaW4gYGNhdCAvcHJvYy9jbWRsaW5lYDsgZG8KKwlvcHQ9YGVjaG8gJHAgfCBjdXQgLWQnPScgLWYxYAorCW9wdD1gZWNobyAkb3B0IHwgdHIgJy4tJyAnX18nYAorCWlmIFsgImBlY2hvICRwIHwgY3V0IC1kJz0nIC1mMWAiID0gIiRwIiBdOyB0aGVuCisJCWV2YWwgImJvb3RwYXJhbV8ke29wdH09dHJ1ZSIKKwllbHNlCisJCXZhbHVlPSJgZWNobyAkcCB8IGN1dCAtZCc9JyAtZjItYCIKKwkJZXZhbCAiYm9vdHBhcmFtXyR7b3B0fT1cIiR7dmFsdWV9XCIiCisJZmkKK2RvbmUKKworIyB1c2UgL2RldiB3aXRoIGRldnRtcGZzCitpZiBncmVwIC1xIGRldnRtcGZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisJbWtkaXIgLXAgL2RldgorCW1vdW50IC10IGRldnRtcGZzIGRldnRtcGZzIC9kZXYKK2Vsc2UKKwlpZiBbICEgLWQgL2RldiBdOyB0aGVuCisJCWZhdGFsICJFUlJPUjogL2RldiBkb2Vzbid0IGV4aXN0IGFuZCBrZXJuZWwgZG9lc24ndCBoYXMgZGV2dG1wZnMgZW5hYmxlZC4iCisJZmkKK2ZpCisKK21rZGlyICRST09URlNfRElSCisKKyMgTG9hZCBhbmQgcnVuIG1vZHVsZXMKK2ZvciBtIGluICRNT0RVTEVTX0RJUi8qOyBkbworCSMgU2tpcCBiYWNrdXAgZmlsZXMKKwlpZiBbICJgZWNobyAkbSB8IHNlZCAtZSAncy9cfiQvLydgIiAhPSAiJG0iIF07IHRoZW4KKwkJY29udGludWUKKwlmaQorCisJbW9kdWxlPWBiYXNlbmFtZSAkbSB8IGN1dCAtZCctJyAtZiAyYAorCWRlYnVnICJMb2FkaW5nIG1vZHVsZSAkbW9kdWxlIgorCisJIyBwcmUgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BSRV9IT09LUzsgZG8KKwkJZGVidWcgIkNhbGxpbmcgbW9kdWxlIGhvb2sgKHByZSk6ICRoIgorCQlldmFsICIkaCBwcmUgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwcmUpOiAkaCIKKwlkb25lCisKKwkjIHByb2Nlc3MgbW9kdWxlCisJLiAkbQorCisJaWYgISBldmFsICIke21vZHVsZX1fZW5hYmxlZCI7IHRoZW4KKwkJZGVidWcgIlNraXBwaW5nIG1vZHVsZSAkbW9kdWxlIgorCQljb250aW51ZQorCWZpCisKKwlkZWJ1ZyAiUnVubmluZyAke21vZHVsZX1fcnVuIgorCWV2YWwgIiR7bW9kdWxlfV9ydW4iCisKKwkjIHBvc3QgaG9va3MKKwlmb3IgaCBpbiAkTU9EVUxFX1BPU1RfSE9PS1M7IGRvCisJCWRlYnVnICJDYWxsaW5nIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJCWV2YWwgIiRoIHBvc3QgJG1vZHVsZSIKKwkJZGVidWcgIkZpbmlzaGVkIG1vZHVsZSBob29rIChwb3N0KTogJGgiCisJZG9uZQorZG9uZQorCisjIENhdGNoIGFsbAorZmF0YWwgIkVSUk9SOiBJbml0cmFtZnMgZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHN5c3RlbS4iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZGYxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvbWRldgpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKworbWRldl9lbmFibGVkKCkgeworCWlmIFsgISAtZSAvc2Jpbi9tZGV2IF07IHRoZW4KKwkJZGVidWcgIi9zYmluL21kZXYgZG9lc24ndCBleGlzdCIKKwkJcmV0dXJuIDEKKwlmaQorCisJcmV0dXJuIDAKK30KKworbWRldl9ydW4oKSB7CisJIyBzZXR1cCB0aGUgZW52aXJvbm1lbnQKKwltb3VudCAtdCB0bXBmcyB0bXBmcyAvZGV2CisKKwlta2RpciAtbSAxNzc3IC9kZXYvc2htCisKKwlta2RpciAtbSAwNzU1IC9kZXYvcHRzCisJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cworCisJZWNobyAvc2Jpbi9tZGV2ID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCisJbWRldiAtcworCisJIyBsb2FkIG1vZHVsZXMgZm9yIGRldmljZXMKKwlmaW5kIC9zeXMgLW5hbWUgbW9kYWxpYXMgfCB3aGlsZSByZWFkIG07IGRvCisJCWxvYWRfa2VybmVsX21vZHVsZSAkKGNhdCAkbSkKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay91ZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDYyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvdWRldgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorIyBMaWNlbnNlZCBvbiBNSVQKKwordWRldl9zaHV0ZG93bl9ob29rX2hhbmRsZXIoKSB7CisJc3RhdHVzPSQxCisJbW9kdWxlPSQyCisJaWYgWyAiJHN0YXR1cyIgPSAicHJlIiBdICYmIFsgIiRtb2R1bGUiID0gImZpbmlzaCIgXTsgdGhlbgorCQlraWxsYWxsIGBiYXNlbmFtZSAkX1VERVZfREFFTU9OYCAyPi9kZXYvbnVsbAorCWZpCit9CisKK3VkZXZfZGFlbW9uKCkgeworCU9QVElPTlM9Ii9zYmluL3VkZXYvdWRldmQgL3NiaW4vdWRldmQgL2xpYi91ZGV2L3VkZXZkIC9saWIvc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIgorCisJZm9yIG8gaW4gJE9QVElPTlM7IGRvCisJCWlmIFsgLXggIiRvIiBdOyB0aGVuCisJCQllY2hvICRvCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKworCXJldHVybiAxCit9CisKK19VREVWX0RBRU1PTj1gdWRldl9kYWVtb25gCisKK3VkZXZfZW5hYmxlZCgpIHsKKwlpZiBbIC16ICIkX1VERVZfREFFTU9OIiBdOyB0aGVuCisJCW1zZyAiV0FSTklORzogQ2Fubm90IGZpbmQgdGhlIHVkZXYgZGFlbW9uOyBkYWVtb24gd2lsbCBub3QgYmUgc3RhcnRlZCBpbiBpbml0cmFtZnMuIgorCQlyZXR1cm4gMQorCWZpCisKKwlyZXR1cm4gMAorfQorCit1ZGV2X3J1bigpIHsKKwlhZGRfbW9kdWxlX3ByZV9ob29rICJ1ZGV2X3NodXRkb3duX2hvb2tfaGFuZGxlciIKKworCW1rZGlyIC1wIC9ydW4KKworCSRfVURFVl9EQUVNT04gLS1kYWVtb24KKwl1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisJdWRldmFkbSBzZXR0bGUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmtfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzdiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmtfMS4wLmJiCkBAIC0wLDAgKzEsNjYgQEAKK1NVTU1BUlkgPSAiTW9kdWxhciBpbml0cmFtZnMgc3lzdGVtIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1JERVBFTkRTXyR7UE59ICs9ICJidXN5Ym94IgorCitQUiA9ICJyMiIKKworaW5oZXJpdCBhbGxhcmNoCisKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZmluaXNoIFwKKyAgICAgICAgICAgZmlsZTovL21kZXYgXAorICAgICAgICAgICBmaWxlOi8vdWRldiBcCisgICAgICAgICAgIGZpbGU6Ly9lMmZzIFwKKyAgICAgICAgICAgZmlsZTovL2RlYnVnIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9L2luaXQuZAorCisgICAgIyBiYXNlCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9L2luaXQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9maW5pc2ggJHtEfS9pbml0LmQvOTktZmluaXNoCisKKyAgICAjIG1kZXYKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2ICR7RH0vaW5pdC5kLzAxLW1kZXYKKworICAgICMgdWRldgorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3VkZXYgJHtEfS9pbml0LmQvMDEtdWRldgorCisgICAgIyBlMmZzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZTJmcyAke0R9L2luaXQuZC8xMC1lMmZzCisKKyAgICAjIGRlYnVnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZGVidWcgJHtEfS9pbml0LmQvMDAtZGVidWcKKworICAgICMgQ3JlYXRlIGRldmljZSBub2RlcyBleHBlY3RlZCBieSBzb21lIGtlcm5lbHMgaW4gaW5pdHJhbWZzCisgICAgIyBiZWZvcmUgZXZlbiBleGVjdXRpbmcgL2luaXQuCisgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgIG1rbm9kIC1tIDYyMiAke0R9L2Rldi9jb25zb2xlIGMgNSAxCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWJhc2UgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1tZGV2IFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtdWRldiBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWUyZnMgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyIKKworRklMRVNfJHtQTn0tYmFzZSA9ICIvaW5pdCAvaW5pdC5kLzk5LWZpbmlzaCAvZGV2IgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgbWRldiIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtbWRldiA9ICIke1BOfS1iYXNlIgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1tZGV2ID0gIi9pbml0LmQvMDEtbWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIHVkZXYiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiJHtQTn0tYmFzZSB1ZGV2IgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS11ZGV2ID0gIi9pbml0LmQvMDEtdWRldiIKKworU1VNTUFSWV9pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiaW5pdHJhbWZzIHN1cHBvcnQgZm9yIGV4dDQvZXh0My9leHQyIGZpbGVzeXN0ZW1zIgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS1lMmZzID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiL2luaXQuZC8xMC1lMmZzIgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiaW5pdHJhbWZzIGR5bmFtaWMgZGVidWcgc3VwcG9ydCIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiJHtQTn0tYmFzZSIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtZGVidWcgPSAiL2luaXQuZC8wMC1kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtYm9vdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWJvb3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YjMwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWJvb3RfMS4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbml0IHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUkRFUEVORFNfJHtQTn0gPSAidWRldiB1ZGV2LWV4dHJhY29uZiIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtbGl2ZS5zaCIKKworUFIgPSAicjEyIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtbGl2ZS5zaCAke0R9L2luaXQKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9L2RldgorICAgICAgICBta25vZCAtbSA2MjIgJHtEfS9kZXYvY29uc29sZSBjIDUgMQorfQorCitGSUxFU18ke1BOfSArPSAiIC9pbml0IC9kZXYgIgorCisjIER1ZSB0byBrZXJuZWwgZGVwZW5kZW5jeQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNiZDJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCBmb3Igd2l0aCBhIHNlY29uZCByb290ZnMva2VybmVsIG9wdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAicGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgZG9zZnN0b29scyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtZWZpLXRlc3Rmcy5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzFmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWItZWZpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC1lZmkuc2giCisKK1BSID0gInIxIgorCitSREVQRU5EU18ke1BOfSA9ICJwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyBkb3Nmc3Rvb2xzIHV0aWwtbGludXgtYmxraWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLWVmaS5zaCAke0R9L2luc3RhbGwtZWZpLnNoCit9CisKKyMgV2hpbGUgdGhpcyBwYWNrYWdlIG1heWJlIGFuIGFsbGFyY2ggZHVlIHRvIGl0IGJlaW5nIGEKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwtZWZpLnNoICIKKworQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3Rmc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3YmZkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnNfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCB3aXRoIGEgc2Vjb25kIHJvb3Rmcy9rZXJuZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaCIKKworUkRFUEVORFNfJHtQTn0gPSAiZ3J1YiBwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtdGVzdGZzLnNoICR7RH0vaW5zdGFsbC5zaAorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRklMRVNfJHtQTn0gPSAiIC9pbnN0YWxsLnNoICIKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGxfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGIzYjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsXzEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpdmUgaW1hZ2UgaW5zdGFsbCBzY3JpcHQgZm9yIGdydWIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLnNoIgorCitQUiA9ICJyOSIKKworUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJncnViIHBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIHV0aWwtbGludXgtYmxraWQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC5zaCAke0R9L2luc3RhbGwuc2gKK30KKworIyBXaGlsZSB0aGlzIHBhY2thZ2UgbWF5YmUgYW4gYWxsYXJjaCBkdWUgdG8gaXQgYmVpbmcgYSAKKyMgc2ltcGxlIHNjcmlwdCwgcmVhbGl0eSBpcyB0aGF0IGl0IGlzIEhvc3Qgc3BlY2lmaWMgYmFzZWQKKyMgb24gdGhlIENPTVBBVElCTEVfSE9TVCBiZWxvdywgd2hpY2ggbmVlZHMgdG8gdGFrZSBwcmVjZWRlbmNlCisjaW5oZXJpdCBhbGxhcmNoCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwuc2ggIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL0dQTHYyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL0dQTHYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTgxODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2gKQEAgLTAsMCArMSwzNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9hcm0vYWxpZ25tZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzdiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYXJtL2FsaWdubWVudC5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGFsaWdubWVudAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRrZXJuZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgIG1vdW50a2VybmZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgLWUgL3Byb2MvY3B1L2FsaWdubWVudCBdOyB0aGVuCisgICBlY2hvICIzIiA+IC9wcm9jL2NwdS9hbGlnbm1lbnQKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9iYW5uZXIuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYmFubmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMmIwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYmFubmVyLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogYmFubmVyCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbICEgLWUgL2Rldi90dHkgXTsgdGhlbgorICAgIC9iaW4vbWtub2QgLW0gMDY2NiAvZGV2L3R0eSBjIDUgMAorZmkKKworaWYgKCA+IC9kZXYvdHR5MCApIDI+L2Rldi9udWxsOyB0aGVuCisgICAgdnRtYXN0ZXI9L2Rldi90dHkwCitlbGlmICggPiAvZGV2L3ZjLzAgKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIHZ0bWFzdGVyPS9kZXYvdmMvMAorZWxpZiAoID4gL2Rldi9jb25zb2xlICkgMj4vZGV2L251bGw7IHRoZW4KKyAgICB2dG1hc3Rlcj0vZGV2L2NvbnNvbGUKK2Vsc2UKKyAgICB2dG1hc3Rlcj0vZGV2L251bGwKK2ZpCitlY2hvID4gJHZ0bWFzdGVyCitlY2hvICJQbGVhc2Ugd2FpdDogYm9vdGluZy4uLiIgPiAkdnRtYXN0ZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ib290bWlzYy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ib290bWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjU1M2JjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdG1pc2MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1pc2MgYW5kIG90aGVyLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvcmNTCisjCisjIFB1dCBhIG5vbG9naW4gZmlsZSBpbiAvZXRjIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gbG9nZ2luZyBpbiBiZWZvcmUKKyMgc3lzdGVtIHN0YXJ0dXAgaXMgY29tcGxldGUuCisjCitpZiB0ZXN0ICIkREVMQVlMT0dJTiIgPSB5ZXMKK3RoZW4KKyAgZWNobyAiU3lzdGVtIGJvb3R1cCBpbiBwcm9ncmVzcyAtIHBsZWFzZSB3YWl0IiA+IC9ldGMvbm9sb2dpbgorICBjcCAvZXRjL25vbG9naW4gL2V0Yy9ub2xvZ2luLmJvb3QKK2ZpCisKKyMKKyMgU2V0IHBzZXVkby10ZXJtaW5hbCBhY2Nlc3MgcGVybWlzc2lvbnMuCisjCitpZiB0ZXN0IC1jIC9kZXYvdHR5cDAKK3RoZW4KKwljaG1vZCA2NjYgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCisJY2hvd24gcm9vdDp0dHkgL2Rldi90dHlbcC16YS1lXVswLTlhLWZdCitmaQorCisjCisjIEFwcGx5IC9wcm9jIHNldHRpbmdzIGlmIGRlZmluZWQKKyMKK1NZU0NUTF9DT05GPSIvZXRjL3N5c2N0bC5jb25mIgoraWYgWyAtZiAiJHtTWVNDVExfQ09ORn0iIF0KK3RoZW4KKwlpZiBbIC14ICIvc2Jpbi9zeXNjdGwiIF0KKwl0aGVuCisJCSMgYnVzeWJveCBzeXNjdGwgZG9lcyBub3Qgc3VwcG9ydCAtcQorCQlWRVJCT1NFX1JFRElSPSIxPi9kZXYvbnVsbCIKKwkJaWYgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdOyB0aGVuCisJCQlWRVJCT1NFX1JFRElSPSIxPiYxIgorCQlmaQorCQlldmFsIC9zYmluL3N5c2N0bCAtcCAiJHtTWVNDVExfQ09ORn0iICRWRVJCT1NFX1JFRElSCisJZWxzZQorCQllY2hvICJUbyBoYXZlICR7U1lTQ1RMX0NPTkZ9IGFwcGxpZWQgZHVyaW5nIGJvb3QsIGluc3RhbGwgcGFja2FnZSA8cHJvY3BzPi4iCisJZmkKK2ZpCisKKyMKKyMgVXBkYXRlIC9ldGMvbW90ZC4KKyMKK2lmIHRlc3QgIiRFRElUTU9URCIgIT0gbm8KK3RoZW4KKwl1bmFtZSAtYSA+IC9ldGMvbW90ZC50bXAKKwlzZWQgMWQgL2V0Yy9tb3RkID4+IC9ldGMvbW90ZC50bXAKKwltdiAvZXRjL21vdGQudG1wIC9ldGMvbW90ZAorZmkKKworIworIyBUaGlzIGlzIGFzIGdvb2QgYSBwbGFjZSBhcyBhbnkgZm9yIGEgc2FuaXR5IGNoZWNrCisjCisjIFNldCB0aGUgc3lzdGVtIGNsb2NrIGZyb20gaGFyZHdhcmUgY2xvY2sKKyMgSWYgdGhlIHRpbWVzdGFtcCBpcyBtb3JlIHJlY2VudCB0aGFuIHRoZSBjdXJyZW50IHRpbWUsCisjIHVzZSB0aGUgdGltZXN0YW1wIGluc3RlYWQuCit0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdGFydAoraWYgdGVzdCAtZSAvZXRjL3RpbWVzdGFtcAordGhlbgorCVNZU1RFTURBVEU9YGRhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyU2AKKwlyZWFkIFRJTUVTVEFNUCA8IC9ldGMvdGltZXN0YW1wCisJaWYgWyAke1RJTUVTVEFNUH0gLWd0ICRTWVNURU1EQVRFIF07IHRoZW4KKwkJIyBmb3JtYXQgdGhlIHRpbWVzdGFtcCBhcyBkYXRlIGV4cGVjdHMgaXQgKDJtMmQySDJNNFkuMlMpCisJCVRTX1lSPSR7VElNRVNUQU1QJT8/Pz8/Pz8/Pz99CisJCVRTX1NFQz0ke1RJTUVTVEFNUCM/Pz8/Pz8/Pz8/Pz99CisJCVRTX0ZJUlNUMTI9JHtUSU1FU1RBTVAlPz99CisJCVRTX01JRERMRTg9JHtUU19GSVJTVDEyIz8/Pz99CisJCWRhdGUgLXUgJHtUU19NSURETEU4fSR7VFNfWVJ9LiR7VFNfU0VDfQorCQl0ZXN0IC14IC9ldGMvaW5pdC5kL2h3Y2xvY2suc2ggJiYgL2V0Yy9pbml0LmQvaHdjbG9jay5zaCBzdG9wCisJZmkKK2ZpCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Mjg2OTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrZnMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBjaGVja2ZzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBjaGVja3Jvb3QKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBDaGVjayBhbGwgb3RoZXIgZmlsZSBzeXN0ZW1zCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBDaGVjayB0aGUgcmVzdCBvZiB0aGUgZmlsZXN5c3RlbXMuCisjCitpZiB0ZXN0ICEgLWYgL2Zhc3Rib290Cit0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorICAgICAgICBmb3JjZT0iLWYiCisgICAgZWxzZQorICAgICAgICBmb3JjZT0iIgorICAgIGZpCisgICAgaWYgdGVzdCAiJEZTQ0tGSVgiICA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisJZHVtYnxuZXR3b3JrfHVua25vd258IiIpIHNwaW5uZXI9IiIgOzsKKyAgICBlc2FjCisgICAgdGVzdCAiYHVuYW1lIC1tYCIgPSAiczM5MCIgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgYWxsIGZpbGVzeXN0ZW1zLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgLVIgLUEgJGZpeCAkZm9yY2UKKyAgICBpZiB0ZXN0ICIkPyIgLWd0IDEKKyAgICB0aGVuCisgICAgICBlY2hvCisgICAgICBlY2hvICJmc2NrIGZhaWxlZC4gIFBsZWFzZSByZXBhaXIgbWFudWFsbHkuIgorICAgICAgZWNobworICAgICAgZWNobyAiQ09OVFJPTC1EIHdpbGwgZXhpdCBmcm9tIHRoaXMgc2hlbGwgYW5kIGNvbnRpbnVlIHN5c3RlbSBzdGFydHVwLiIKKyAgICAgIGVjaG8KKyAgICAgICMgU3RhcnQgYSBzaW5nbGUgdXNlciBzaGVsbCBvbiB0aGUgY29uc29sZQorICAgICAgL3NiaW4vc3Vsb2dpbiAkQ09OU09MRQorICAgIGZpCitmaQorcm0gLWYgL2Zhc3Rib290IC9mb3JjZWZzY2sKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja3Jvb3Quc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmZWUyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tyb290LnNoCkBAIC0wLDAgKzEsMTQ4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGNoZWNrcm9vdAorIyBSZXF1aXJlZC1TdGFydDogICAgdWRldgorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IENoZWNrIHRvIHJvb3QgZmlsZSBzeXN0ZW0uCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBTZXQgU1VMT0dJTiBpbiAvZXRjL2RlZmF1bHQvcmNTIHRvIHllcyBpZiB5b3Ugd2FudCBhIHN1bG9naW4gdG8gYmUgc3Bhd25lZAorIyBmcm9tIHRoaXMgc2NyaXB0ICpiZWZvcmUgYW55dGhpbmcgZWxzZSogd2l0aCBhIHRpbWVvdXQsIGxpa2UgU0NPIGRvZXMuCisjCit0ZXN0ICIkU1VMT0dJTiIgPSB5ZXMgJiYgc3Vsb2dpbiAtdCAzMCAkQ09OU09MRQorCisjCisjIFJlYWQgL2V0Yy9mc3RhYi4KKyMKK2V4ZWMgOTwgL2V0Yy9mc3RhYgorcm9vdG1vZGU9cncKK3Jvb3RvcHRzPXJ3Cityb290Y2hlY2s9JEVOQUJMRV9ST09URlNfRlNDSworc3dhcF9vbl9tZD1ubworZGV2ZnM9Cit3aGlsZSByZWFkIGZzIG1udCB0eXBlIG9wdHMgZHVtcCBwYXNzIGp1bmsgPCY5CitkbworCWNhc2UgIiRmcyIgaW4KKwkJIiJ8XCMqKQorCQkJY29udGludWU7CisJCQk7OworCQkvZGV2L21kKikKKwkJCSMgU3dhcCBvbiBtZCBkZXZpY2UuCisJCQl0ZXN0ICIkdHlwZSIgPSBzd2FwICYmIHN3YXBfb25fbWQ9eWVzCisJCQk7OworCQkvZGV2LyopCisJCQk7OworCQkqKQorCQkJIyBNaWdodCBiZSBhIHN3YXBmaWxlLgorCQkJdGVzdCAiJHR5cGUiID0gc3dhcCAmJiBzd2FwX29uX21kPXllcworCQkJOzsKKwllc2FjCisJdGVzdCAiJHR5cGUiID0gZGV2ZnMgJiYgZGV2ZnM9IiRmcyIKKwl0ZXN0ICIkbW50IiAhPSAvICYmIGNvbnRpbnVlCisJcm9vdG9wdHM9IiRvcHRzIgorCXRlc3QgIiRwYXNzIiA9IDAgLW8gIiRwYXNzIiA9ICIiICYmIHJvb3RjaGVjaz1ubworCWNhc2UgIiRvcHRzIiBpbgorCQlyb3xybywqfCoscm98KixybywqKQorCQkJcm9vdG1vZGU9cm8KKwkJCTs7CisJZXNhYworZG9uZQorZXhlYyAwPiY5IDk+Ji0KKworIyBDaGVjayBmb3IgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMKK2lmIFsgIiRyb290bW9kZSIgPSAicm8iIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAibm8iIF0gfHwgXAorCVsgIiRyb290bW9kZSIgPSAicnciIC1hICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisJZWNobyAiIgorCWVjaG8gIldBUk46IGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIGluIC9ldGMvZnN0YWIgYW5kIC9ldGMvZGVmYXVsdC9yY1MiCisJZWNobyAiICAgICAgcmVnYXJkaW5nIHRoZSB3cml0YWJpbGl0eSBvZiByb290ZnMuIFBsZWFzZSBmaXggb25lIG9mIHRoZW0uIgorCWVjaG8gIiIKK2ZpCisKKworIworIyBBY3RpdmF0ZSB0aGUgc3dhcCBkZXZpY2UocykgaW4gL2V0Yy9mc3RhYi4gVGhpcyBuZWVkcyB0byBiZSBkb25lCisjIGJlZm9yZSBmc2NrLCBzaW5jZSBmc2NrIGNhbiBiZSBxdWl0ZSBtZW1vcnktaHVuZ3J5LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkFjdGl2YXRpbmcgc3dhcCIKK3N3YXBvbiAtYSAyPiAvZGV2L251bGwKKworIworIyBDaGVjayB0aGUgcm9vdCBmaWxlc3lzdGVtLgorIworaWYgdGVzdCAtZiAvZmFzdGJvb3QgfHwgdGVzdCAkcm9vdGNoZWNrID0gbm8KK3RoZW4KKyAgdGVzdCAkcm9vdGNoZWNrID0geWVzICYmIGVjaG8gIkZhc3QgYm9vdCwgbm8gZmlsZXN5c3RlbSBjaGVjayIKK2Vsc2UKKyAgIworICAjIEVuc3VyZSB0aGF0IHJvb3QgaXMgcXVpZXNjZW50IGFuZCByZWFkLW9ubHkgYmVmb3JlIGZzY2snaW5nLgorICAjCisgIG1vdW50IC1uIC1vIHJlbW91bnQscm8gLworICBpZiB0ZXN0ICQ/ID0gMAorICB0aGVuCisgICAgaWYgdGVzdCAtZiAvZm9yY2Vmc2NrCisgICAgdGhlbgorCWZvcmNlPSItZiIKKyAgICBlbHNlCisJZm9yY2U9IiIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRGU0NLRklYIiA9IHllcworICAgIHRoZW4KKwlmaXg9Ii15IgorICAgIGVsc2UKKwlmaXg9Ii1hIgorICAgIGZpCisgICAgc3Bpbm5lcj0iLUMiCisgICAgY2FzZSAiJFRFUk0iIGluCisgICAgICAgIGR1bWJ8bmV0d29ya3x1bmtub3dufCIiKSBzcGlubmVyPSIiIDs7CisgICAgZXNhYworICAgIHRlc3QgYHVuYW1lIC1tYCA9IHMzOTAgJiYgc3Bpbm5lcj0iIiAjIFRoaXMgc2hvdWxkIGdvIGF3YXkKKyAgICB0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQ2hlY2tpbmcgcm9vdCBmaWxlc3lzdGVtLi4uIgorICAgIGZzY2sgJHNwaW5uZXIgJGZvcmNlICRmaXggLworICAgICMKKyAgICAjIElmIHRoZXJlIHdhcyBhIGZhaWx1cmUsIGRyb3AgaW50byBzaW5nbGUtdXNlciBtb2RlLgorICAgICMKKyAgICAjIE5PVEU6ICJmYWlsdXJlIiBpcyBkZWZpbmVkIGFzIGV4aXRpbmcgd2l0aCBhIHJldHVybiBjb2RlIG9mCisgICAgIyAyIG9yIGxhcmdlci4gIEEgcmV0dXJuIGNvZGUgb2YgMSBpbmRpY2F0ZXMgdGhhdCBmaWxlc3lzdGVtCisgICAgIyBlcnJvcnMgd2VyZSBjb3JyZWN0ZWQgYnV0IHRoYXQgdGhlIGJvb3QgbWF5IHByb2NlZWQuCisgICAgIworICAgIGlmIHRlc3QgIiQ/IiAtZ3QgMQorICAgIHRoZW4KKyAgICAgICMgU3VycHJpc2UhIFJlLWRpcmVjdGluZyBmcm9tIGEgSEVSRSBkb2N1bWVudCAoYXMgaW4KKyAgICAgICMgImNhdCA8PCBFT0YiKSB3b24ndCB3b3JrLCBiZWNhdXNlIHRoZSByb290IGlzIHJlYWQtb25seS4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gImZzY2sgZmFpbGVkLiAgUGxlYXNlIHJlcGFpciBtYW51YWxseSBhbmQgcmVib290LiAgUGxlYXNlIG5vdGUiCisgICAgICBlY2hvICJ0aGF0IHRoZSByb290IGZpbGVzeXN0ZW0gaXMgY3VycmVudGx5IG1vdW50ZWQgcmVhZC1vbmx5LiAgVG8iCisgICAgICBlY2hvICJyZW1vdW50IGl0IHJlYWQtd3JpdGU6IgorICAgICAgZWNobworICAgICAgZWNobyAiICAgIyBtb3VudCAtbiAtbyByZW1vdW50LHJ3IC8iCisgICAgICBlY2hvCisgICAgICBlY2hvICJDT05UUk9MLUQgd2lsbCBleGl0IGZyb20gdGhpcyBzaGVsbCBhbmQgUkVCT09UIHRoZSBzeXN0ZW0uIgorICAgICAgZWNobworICAgICAgIyBTdGFydCBhIHNpbmdsZSB1c2VyIHNoZWxsIG9uIHRoZSBjb25zb2xlCisgICAgICAvc2Jpbi9zdWxvZ2luICRDT05TT0xFCisgICAgICByZWJvb3QgLWYKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiKioqIEVSUk9SISAgQ2Fubm90IGZzY2sgcm9vdCBmcyBiZWNhdXNlIGl0IGlzIG5vdCBtb3VudGVkIHJlYWQtb25seSEiCisgICAgZWNobworICBmaQorZmkKKworIworIwlJZiB0aGUgcm9vdCBmaWxlc3lzdGVtIHdhcyBub3QgbWFya2VkIGFzIHJlYWQtb25seSBpbiAvZXRjL2ZzdGFiLAorIwlyZW1vdW50IHRoZSByb290ZnMgcncgYnV0IGRvIG5vdCB0cnkgdG8gY2hhbmdlIG10YWIgYmVjYXVzZSBpdAorIwlpcyBvbiBhIHJvIGZzIHVudGlsIHRoZSByZW1vdW50IHN1Y2NlZWRlZC4gVGhlbiBjbGVhbiB1cCBvbGQgbXRhYnMKKyMJYW5kIGZpbmFsbHkgd3JpdGUgdGhlIG5ldyBtdGFiLgorIworbW91bnQgLW4gLW8gcmVtb3VudCwkcm9vdG1vZGUgLworaWYgdGVzdCAiJHJvb3Rtb2RlIiA9IHJ3Cit0aGVuCisJbG4gLXNmIC9wcm9jL21vdW50cyAvZGV2L210YWIKK2ZpCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA5NzhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cwpAQCAtMCwwICsxLDUgQEAKKyMgR0lEIG9mIHRoZSBgdHR5JyBncm91cAorVFRZR1JQPTUKKyAKKyMgU2V0IHRvIDYwMCB0byBoYXZlIGBtZXNnIG4nIGJlIHRoZSBkZWZhdWx0CitUVFlNT0RFPTYyMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzYwNDNmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMuc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBkZXZwdHMKKyMgUmVxdWlyZWQtU3RhcnQ6IHVkZXYKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTW91bnQgL2Rldi9wdHMgZmlsZSBzeXN0ZW1zLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2RlZmF1bHQvZGV2cHRzCisKK2lmIGdyZXAgLXEgZGV2cHRzIC9wcm9jL2ZpbGVzeXN0ZW1zCit0aGVuCisJIworCSMJQ3JlYXRlIG11bHRpcGxleG9yIGRldmljZS4KKwkjCisJdGVzdCAtYyAvZGV2L3B0bXggfHwgbWtub2QgLW0gNjY2IC9kZXYvcHRteCBjIDUgMgorCisJIworCSMJTW91bnQgL2Rldi9wdHMgaWYgbmVlZGVkLgorCSMKKwlpZiAhIGdyZXAgLXEgZGV2cHRzIC9wcm9jL21vdW50cworCXRoZW4KKwkJbWtkaXIgLXAgL2Rldi9wdHMKKwkJbW91bnQgLXQgZGV2cHRzIGRldnB0cyAvZGV2L3B0cyAtb2dpZD0ke1RUWUdSUH0sbW9kZT0ke1RUWU1PREV9CisJZmkKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZG1lc2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3YjA2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIGRtZXNnCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbIC1mIC92YXIvbG9nL2RtZXNnIF07IHRoZW4KKwlpZiBbIC1mIC91c3Ivc2Jpbi9sb2dyb3RhdGUgXTsgdGhlbgorCQlsb2dyb3RhdGUgLWYgL2V0Yy9sb2dyb3RhdGUtZG1lc2cuY29uZgorCWVsc2UKKwkJbXYgLWYgL3Zhci9sb2cvZG1lc2cgL3Zhci9sb2cvZG1lc2cub2xkCisJZmkKK2ZpCitkbWVzZyAtcyAxMzEwNzIgPiAvdmFyL2xvZy9kbWVzZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Z1bmN0aW9ucyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDFhZDFlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9mdW5jdGlvbnMKQEAgLTAsMCArMSw5MSBAQAorIyAtKi1TaGVsbC1zY3JpcHQtKi0KKyMKKyMgZnVuY3Rpb25zICAgICBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIGJlIHVzZWQgYnkgbW9zdCBvciBhbGwKKyMgICAgICAgICAgICAgICBzaGVsbCBzY3JpcHRzIGluIHRoZSAvZXRjL2luaXQuZCBkaXJlY3RvcnkuCisjCisKK05PUk1BTD0iXFwwMzNbMDszOW0iICAgICAgICAgIyBTdGFuZGFyZCBjb25zb2xlIGdyZXkKK1NVQ0NFU1M9IlxcMDMzWzE7MzJtIiAgICAgICAgIyBTdWNjZXNzIGlzIGdyZWVuCitXQVJOSU5HPSJcXDAzM1sxOzMzbSIgICAgICAgICMgV2FybmluZ3MgYXJlIHllbGxvdworRkFJTFVSRT0iXFwwMzNbMTszMW0iICAgICAgICAjIEZhaWx1cmVzIGFyZSByZWQKK0lORk89IlxcMDMzWzE7MzZtIiAgICAgICAgICAgIyBJbmZvcm1hdGlvbiBpcyBsaWdodCBjeWFuCitCUkFDS0VUPSJcXDAzM1sxOzM0bSIgICAgICAgICMgQnJhY2tldHMgYXJlIGJsdWUKKworIyBOT1RFOiBUaGUgcGlkb2Zwcm9jICgpIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcHJvY2VzcyB3aGljaCBpcyBhIHNjcmlwdCB1bmxlc3MKKyMgICAgICAgdGhlIHBpZG9mIHN1cHBvcnRzICIteCIgb3B0aW9uLiBJZiB5b3Ugd2FudCB0byB1c2UgaXQgZm9yIHN1Y2ggYQorIyAgICAgICBwcm9jZXNzOgorIyAgICAgICAxKSBJZiB0aGVyZSBpcyBubyAicGlkb2YgLXgiLCByZXBsYWNlIHRoZSAicGlkb2YgJDEiIHdpdGggYW5vdGhlcgorIyAgICAgICAgICBjb21tYW5kIGxpa2UoZm9yIGNvcmUtaW1hZ2UtbWluaW1hbCk6CisjICAgICAgICAgICAgcHMgfCBhd2sgJy8nIiQxIicvIHtwcmludCAkMX0nCisjICAgICAgIE9yCisjICAgICAgIDIpIElmIHRoZXJlIGlzICJwaWRvZiAteCIsIHJlcGxhY2UgInBpZG9mIiB3aXRoICJwaWRvZiAteCIuCisjCisjIHBpZG9mcHJvYyAtIHByaW50IHRoZSBwaWQgb2YgYSBwcm9jZXNzCisjICQxOiB0aGUgbmFtZSBvZiB0aGUgcHJvY2VzcworcGlkb2Zwcm9jICgpIHsKKworCSMgcGlkb2Ygb3V0cHV0IG51bGwgd2hlbiBubyBwcm9ncmFtIGlzIHJ1bm5pbmcsIHNvIG5vICIyPi9kZXYvbnVsbCIuCisJcGlkPWBwaWRvZiAkMWAKKwlzdGF0dXM9JD8KKwljYXNlICRzdGF0dXMgaW4KKwkwKQorCQllY2hvICRwaWQKKwkJcmV0dXJuIDAKKwkJOzsKKwkxMjcpCisJCWVjaG8gIkVSUk9SOiBjb21tYW5kIHBpZG9mIG5vdCBmb3VuZCIgPiYyCisJCWV4aXQgMTI3CisJCTs7CisJKikKKwkJcmV0dXJuICRzdGF0dXMKKwkJOzsKKwllc2FjCit9CisKK21hY2hpbmVfaWQoKSB7ICMgcmV0dXJuIHRoZSBtYWNoaW5lIElECisJYXdrICdCRUdJTiB7IEZTPSI6ICIgfSAvSGFyZHdhcmUvIFwKKwkJeyBnc3ViKCIgIiwgIl8iLCAkMik7IHByaW50IHRvbG93ZXIoJDIpIH0gJyA8L3Byb2MvY3B1aW5mbworfQorCitraWxscHJvYygpIHsgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorCXBpZD1gcGlkb2Zwcm9jICQxYCAmJiBraWxsICRwaWQKK30KKworc3RhdHVzKCkgeworICAgIGxvY2FsIHBpZAorICAgIGlmIFsgIiQjIiA9IDAgXTsgdGhlbgorICAgICAgICBlY2hvICJVc2FnZTogc3RhdHVzIHtwcm9ncmFtfSIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIHBpZD1gcGlkb2Zwcm9jICQxYAorICAgIGlmIFsgLW4gIiRwaWQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJDEgKHBpZCAkcGlkKSBpcyBydW5uaW5nLi4uIgorICAgICAgICByZXR1cm4gMAorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJDEgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIHJldHVybiAzCit9CisKK3N1Y2Nlc3MoKSB7CisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9ICBPSyAgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuIDAKK30KKworZmFpbHVyZSgpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtGQUlMVVJFfSBGQUlMICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKword2FybmluZygpIHsKKyAgICBsb2NhbCByYz0kKgorICAgIGVjaG8gLW4gLWUgIiR7QlJBQ0tFVH1bJHtXQVJOSU5HfSBXQVJOICR7QlJBQ0tFVH1dJHtOT1JNQUx9IgorICAgIHJldHVybiAkcmMKK30KKworcGFzc2VkKCkgeworICAgIGxvY2FsIHJjPSQqCisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1NVQ0NFU1N9IFBBU1MgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuICRyYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaGFsdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTZmNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hhbHQKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBoYWx0CisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMAorIyBTaG9ydC1EZXNjcmlwdGlvbjogRXhlY3V0ZSB0aGUgaGFsdCBjb21tYW5kLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBTZWUgaWYgd2UgbmVlZCB0byBjdXQgdGhlIHBvd2VyLgoraWYgdGVzdCAteCAvZXRjL2luaXQuZC91cHMtbW9uaXRvcgordGhlbgorCS9ldGMvaW5pdC5kL3Vwcy1tb25pdG9yIHBvd2Vyb2ZmCitmaQorCisjIERvbid0IHNodXQgZG93biBkcml2ZXMgaWYgd2UncmUgdXNpbmcgUkFJRC4KK2hkZG93bj0iLWgiCitpZiBncmVwIC1xcyAnXm1kLiphY3RpdmUnIC9wcm9jL21kc3RhdAordGhlbgorCWhkZG93bj0iIgorZmkKKworaGFsdCBTRURfSEFMVEFSR1MgLXAgJGhkZG93bgorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1Mjg3Y2MxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2hvc3RuYW1lLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaG9zdG5hbWUKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFNldCBob3N0bmFtZSBiYXNlZCBvbiAvZXRjL2hvc3RuYW1lCisjIyMgRU5EIElOSVQgSU5GTworSE9TVE5BTUU9JCgvYmluL2hvc3RuYW1lKQorCitob3N0bmFtZSAtYiAtRiAvZXRjL2hvc3RuYW1lIDI+IC9kZXYvbnVsbAoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJZXhpdAorZmkKKworIyBCdXN5Ym94IGhvc3RuYW1lIGRvZXNuJ3Qgc3VwcG9ydCAtYiBzbyB3ZSBuZWVkIGltcGxlbWVudCBpdCBvbiBvdXIgb3duCitpZiBbIC1mIC9ldGMvaG9zdG5hbWUgXTt0aGVuCisJaG9zdG5hbWUgYGNhdCAvZXRjL2hvc3RuYW1lYAorZWxpZiBbIC16ICIkSE9TVE5BTUUiIC1vICIkSE9TVE5BTUUiID0gIihub25lKSIgLW8gISAteiAiYGVjaG8gJEhPU1ROQU1FIHwgc2VkIC1uICcvXlswLTldKlwuWzAtOV0uKi9wJ2AiIF0gOyB0aGVuCisJaG9zdG5hbWUgbG9jYWxob3N0CitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2xvZ3JvdGF0ZS1kbWVzZy5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2xvZ3JvdGF0ZS1kbWVzZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDZlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYKQEAgLTAsMCArMSw5IEBACisjIHNlZSAibWFuIGxvZ3JvdGF0ZSIgZm9yIGRldGFpbHMKKyMgcm90YXRlIGRtZXNnLCBhbmQga2VlcCA1IHZlcnNpb25zLgorCisvdmFyL2xvZy9kbWVzZyB7CisJY3JlYXRlCisJcm90YXRlIDUKKwlub2RhdGVleHQKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0YmFlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb3VudGFsbAorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1vdW50IGFsbCBmaWxlc3lzdGVtcy4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKworIworIyBNb3VudCBsb2NhbCBmaWxlc3lzdGVtcyBpbiAvZXRjL2ZzdGFiLiBGb3Igc29tZSByZWFzb24sIHBlb3BsZQorIyBtaWdodCB3YW50IHRvIG1vdW50ICJwcm9jIiBzZXZlcmFsIHRpbWVzLCBhbmQgbW91bnQgLXYgY29tcGxhaW5zCisjIGFib3V0IHRoaXMuIFNvIHdlIG1vdW50ICJwcm9jIiBmaWxlc3lzdGVtcyB3aXRob3V0IC12LgorIwordGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIk1vdW50aW5nIGxvY2FsIGZpbGVzeXN0ZW1zLi4uIgorbW91bnQgLWF0IG5vbmZzLG5vc21iZnMsbm9uY3BmcyAyPi9kZXYvbnVsbAorCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorCXJtIC1mIC9kZXYvaW5pdGN0bAorCW1rbm9kIC1tIDYwMCAvZGV2L2luaXRjdGwgcAorZmkKK2tpbGwgLVVTUjEgMQorCisjCisjIEV4ZWN1dGUgc3dhcG9uIGNvbW1hbmQgYWdhaW4sIGluIGNhc2Ugd2Ugd2FudCB0byBzd2FwIHRvCisjIGEgZmlsZSBvbiBhIG5vdyBtb3VudGVkIGZpbGVzeXN0ZW0uCisjCitzd2Fwb24gLWEgMj4gL2Rldi9udWxsCisKKzogZXhpdCAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudG5mcy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudG5mcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTZjMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW91bnRuZnMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRsb2NhbF9mcyAkbmV0d29yayAkcnBjYmluZAorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIyMgRU5EIElOSVQgSU5GTworCisjCisjCVJ1biBpbiBhIHN1YnNoZWxsIGJlY2F1c2Ugb2YgSS9PIHJlZGlyZWN0aW9uLgorIwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lLiBJZiBpdCBpcyBORlMsIHNldCB0aGUgZmxhZworIwlmb3IgbW91bnRpbmcgTkZTIGZpbGVzeXN0ZW1zLiBJZiBhbnkgTkZTIHBhcnRpdGlvbiBpcyBmb3VuZCBhbmQgaXQKKyMJbm90IG1vdW50ZWQgd2l0aCB0aGUgbm9sb2NrIG9wdGlvbiwgd2Ugc3RhcnQgdGhlIHJwY2JpbmQuCisjCitycGNiaW5kPW5vCittb3VudF9uZnM9bm8KK21vdW50X3NtYj1ubworbW91bnRfbmNwPW5vCittb3VudF9jaWZzPW5vCit3aGlsZSByZWFkIGRldmljZSBtb3VudHB0IGZzdHlwZSBvcHRpb25zCitkbworCWNhc2UgIiRkZXZpY2UiIGluCisJCSIifFwjKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWNhc2UgIiRvcHRpb25zIiBpbgorCQkqbm9hdXRvKikKKwkJCWNvbnRpbnVlCisJCQk7OworCWVzYWMKKworCWlmIHRlc3QgIiRmc3R5cGUiID0gbmZzCisJdGhlbgorCQltb3VudF9uZnM9eWVzCisJCWNhc2UgIiRvcHRpb25zIiBpbgorCQkJKm5vbG9jayopCisJCQkJOzsKKwkJCSopCisJCQkJcnBjYmluZD15ZXMKKwkJCQk7OworCQllc2FjCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IHNtYmZzCisJdGhlbgorCQltb3VudF9zbWI9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IG5jcGZzCisJdGhlbgorCQltb3VudF9uY3A9eWVzCisJZmkKKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IGNpZnMKKwl0aGVuCisJCW1vdW50X2NpZnM9eWVzCisJZmkKK2RvbmUKKworZXhlYyAwPiYxCisKK2lmIHRlc3QgIiRycGNiaW5kIiA9IHllcwordGhlbgorCWlmIHRlc3QgLXggL3Vzci9zYmluL3JwY2JpbmQKKwl0aGVuCisJCWVjaG8gLW4gIlN0YXJ0aW5nIHJwY2JpbmQuLi4gIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi9ycGNiaW5kCisJCXNsZWVwIDIKKwlmaQorZmkKKworaWYgdGVzdCAiJG1vdW50X25mcyIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X3NtYiIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgfHwgdGVzdCAiJG1vdW50X2NpZnMiID0geWVzCit0aGVuCisJZWNobyAiTW91bnRpbmcgcmVtb3RlIGZpbGVzeXN0ZW1zLi4uIgorCXRlc3QgIiRtb3VudF9uZnMiID0geWVzICYmIG1vdW50IC1hIC10IG5mcworCXRlc3QgIiRtb3VudF9zbWIiID0geWVzICYmIG1vdW50IC1hIC10IHNtYmZzCisJdGVzdCAiJG1vdW50X25jcCIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgbmNwZnMKKwl0ZXN0ICIkbW91bnRfY2lmcyIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgY2lmcworZmkKKworKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3BvcHVsYXRlLXZvbGF0aWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwNDAzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKQEAgLTAsMCArMSwyMjIgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgdm9sYXRpbGUKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICRsb2NhbF9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiAgUG9wdWxhdGUgdGhlIHZvbGF0aWxlIGZpbGVzeXN0ZW0KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgR2V0IFJPT1RfRElSCitESVJOQU1FPWBkaXJuYW1lICQwYAorUk9PVF9ESVI9YGVjaG8gJERJUk5BTUUgfCBzZWQgLW5lICdzOi9ldGMvLio6OnAnYAorCitbIC1lICR7Uk9PVF9ESVJ9L2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvcmNTCisjIFdoZW4gcnVubmluZyBwb3B1bGF0ZS12b2xhdGlsZS5zaCBhdCByb290ZnMgdGltZSwgZGlzYWJsZSBjYWNoZS4KK1sgLW4gIiRST09UX0RJUiIgXSAmJiBWT0xBVElMRV9FTkFCTEVfQ0FDSEU9bm8KKyMgSWYgcm9vdGZzIGlzIHJlYWQtb25seSwgZGlzYWJsZSBjYWNoZS4KK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF0gJiYgVk9MQVRJTEVfRU5BQkxFX0NBQ0hFPW5vCisKK0NGR0RJUj0iJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzIgorVE1QUk9PVD0iJHtST09UX0RJUn0vdmFyL3ZvbGF0aWxlL3RtcCIKK0NPUkVERUY9IjAwX2NvcmUiCisKK1sgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJQb3B1bGF0aW5nIHZvbGF0aWxlIEZpbGVzeXN0ZW1zLiIKKworY3JlYXRlX2ZpbGUoKSB7CisJRVhFQz0iCisJdG91Y2ggXCIkMVwiOworCWNob3duICR7VFVTRVJ9LiR7VEdST1VQfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBvd25lciAtJHtUVVNFUn0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMTsKKwljaG1vZCAke1RNT0RFfSAkMSB8fCBlY2hvIFwiRmFpbGVkIHRvIHNldCBtb2RlIC0ke1RNT0RFfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIiRFWEVDIiA+PiAvZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDICYKKwkJZWxzZQorCQkJIyBDcmVhdGluZyBzb21lIGZpbGVzIGF0IHJvb3RmcyB0aW1lIG1heSBmYWlsIGFuZCBzaG91bGQgZmFpbCwKKwkJCSMgYnV0IHRoZXNlIGZhaWx1cmVzIHNob3VsZCBub3QgYmUgbG9nZ2VkIHRvIG1ha2Ugc3VyZSB0aGUgZG9fcm9vdGZzCisJCQkjIHByb2Nlc3MgZG9lc24ndCBmYWlsLiBUaGlzIGRvZXMgbm8gaGFybSwgYXMgdGhpcyBzY3JpcHQgd2lsbAorCQkJIyBydW4gb24gdGFyZ2V0IHRvIHNldCB1cCB0aGUgY29ycmVjdCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisJCQlldmFsICRFWEVDID4gL2Rldi9udWxsIDI+JjEKKwkJZmkKKwl9Cit9CisKK21rX2RpcigpIHsKKwlFWEVDPSIKKwlta2RpciAtcCBcIiQxXCI7CisJY2hvd24gJHtUVVNFUn0uJHtUR1JPVVB9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG93bmVyIC0ke1RVU0VSfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxOworCWNobW9kICR7VE1PREV9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG1vZGUgLSR7VE1PREV9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjEgIgorCisJdGVzdCAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSB5ZXMgJiYgZWNobyAiJEVYRUMiID4+IC9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKwlbIC1lICIkMSIgXSAmJiB7CisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJUYXJnZXQgYWxyZWFkeSBleGlzdHMuIFNraXBwaW5nLiIKKwl9IHx8IHsKKwkJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCQlldmFsICRFWEVDCisJCWVsc2UKKwkJCSMgRm9yIHRoZSBzYW1lIHJlYXNvbiB3aXRoIGNyZWF0ZV9maWxlKCksIGZhaWx1cmVzIHNob3VsZAorCQkJIyBub3QgYmUgbG9nZ2VkLgorCQkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJCWZpCisJfQorfQorCitsaW5rX2ZpbGUoKSB7CisJRVhFQz0iCisJaWYgWyAtTCBcIiQyXCIgXTsgdGhlbgorCQlbIFwiXCQocmVhZGxpbmsgLWYgXCIkMlwiKVwiICE9IFwiXCQocmVhZGxpbmsgLWYgXCIkMVwiKVwiIF0gJiYgeyBybSAtZiBcIiQyXCI7IGxuIC1zZiBcIiQxXCIgXCIkMlwiOyB9OworCWVsaWYgWyAtZCBcIiQyXCIgXTsgdGhlbgorCQlpZiBhd2sgJ1wkMiA9PSBcIiQyXCIge2V4aXQgMX0nIC9wcm9jL21vdW50czsgdGhlbgorCQkJY3AgLWEgJDIvKiAkMSAyPi9kZXYvbnVsbDsKKwkJCWNwIC1hICQyLy5bIS5dKiAkMSAyPi9kZXYvbnVsbDsKKwkJCXJtIC1yZiBcIiQyXCI7CisJCQlsbiAtc2YgXCIkMVwiIFwiJDJcIjsKKwkJZmkKKwllbHNlCisJCWxuIC1zZiBcIiQxXCIgXCIkMlwiOworCWZpCisgICAgICAgICIKKworCXRlc3QgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0geWVzICYmIGVjaG8gIgkkRVhFQyIgPj4gL2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCisJaWYgWyAteiAiJFJPT1RfRElSIiBdOyB0aGVuCisJCWV2YWwgJEVYRUMgJgorCWVsc2UKKwkJIyBGb3IgdGhlIHNhbWUgcmVhc29uIHdpdGggY3JlYXRlX2ZpbGUoKSwgZmFpbHVyZXMgc2hvdWxkCisJCSMgbm90IGJlIGxvZ2dlZC4KKwkJZXZhbCAkRVhFQyA+IC9kZXYvbnVsbCAyPiYxCisJZmkKK30KKworY2hlY2tfcmVxdWlyZW1lbnRzKCkgeworCWNsZWFudXAoKSB7CisJCXJtICIke1RNUF9JTlRFUk1FRH0iCisJCXJtICIke1RNUF9ERUZJTkVEfSIKKwkJcm0gIiR7VE1QX0NPTUJJTkVEfSIKKwl9CisKKwlDRkdGSUxFPSIkMSIKKwlbIGBiYXNlbmFtZSAiJHtDRkdGSUxFfSJgID0gIiR7Q09SRURFRn0iIF0gJiYgcmV0dXJuIDAKKworCVRNUF9JTlRFUk1FRD0iJHtUTVBST09UfS90bXAuJCQiCisJVE1QX0RFRklORUQ9IiR7VE1QUk9PVH0vdG1wZGVmaW5lZC4kJCIKKwlUTVBfQ09NQklORUQ9IiR7VE1QUk9PVH0vdG1wY29tYmluZWQuJCQiCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9wYXNzd2QgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9ERUZJTkVEfSIKKwljYXQgJHtDRkdGSUxFfSB8IGdyZXAgLXYgIl4jIiB8IGN1dCAtcyAtZCAiICIgLWYgMiA+ICIke1RNUF9JTlRFUk1FRH0iCisJY2F0ICIke1RNUF9ERUZJTkVEfSIgIiR7VE1QX0lOVEVSTUVEfSIgfCBzb3J0IHwgdW5pcSA+ICIke1RNUF9DT01CSU5FRH0iCisJTlJfREVGSU5FRF9VU0VSUz0iYGNhdCAiJHtUTVBfREVGSU5FRH0iIHwgd2MgLWxgIgorCU5SX0NPTUJJTkVEX1VTRVJTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX1VTRVJTfSIgLW5lICIke05SX0NPTUJJTkVEX1VTRVJTfSIgXSAmJiB7CisJCWVjaG8gIlVuZGVmaW5lZCB1c2VyczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisKKwlzZWQgJ3NAXCheOlwpKjouKkBcMUAnICR7Uk9PVF9ESVJ9L2V0Yy9ncm91cCB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0RFRklORUR9IgorCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgY3V0IC1zIC1kICIgIiAtZiAzID4gIiR7VE1QX0lOVEVSTUVEfSIKKwljYXQgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfSU5URVJNRUR9IiB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0NPTUJJTkVEfSIKKworCU5SX0RFRklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9ERUZJTkVEfSIgfCB3YyAtbGAiCisJTlJfQ09NQklORURfR1JPVVBTPSJgY2F0ICIke1RNUF9DT01CSU5FRH0iIHwgd2MgLWxgIgorCisJWyAiJHtOUl9ERUZJTkVEX0dST1VQU30iIC1uZSAiJHtOUl9DT01CSU5FRF9HUk9VUFN9IiBdICYmIHsKKwkJZWNobyAiVW5kZWZpbmVkIGdyb3VwczoiCisJCWRpZmYgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfQ09NQklORUR9IiB8IGdyZXAgIl4+IgorCQljbGVhbnVwCisJCXJldHVybiAxCisJfQorCisJIyBBZGQgY2hlY2tzIGZvciByZXF1aXJlZCBkaXJlY3RvcmllcyBoZXJlCisKKwljbGVhbnVwCisJcmV0dXJuIDAKK30KKworYXBwbHlfY2ZnZmlsZSgpIHsKKwlDRkdGSUxFPSIkMSIKKworCWNoZWNrX3JlcXVpcmVtZW50cyAiJHtDRkdGSUxFfSIgfHwgeworCQllY2hvICJTa2lwcGluZyAke0NGR0ZJTEV9IgorCQlyZXR1cm4gMQorCX0KKworCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgXAorCQl3aGlsZSByZWFkIExJTkU7IGRvCisJCWV2YWwgYGVjaG8gIiRMSU5FIiB8IHNlZCAtbiAicy9cKC4qXClcIFwoLipcKSBcKC4qXClcIFwoLipcKVwgXCguKlwpXCBcKC4qXCkvVFRZUEU9XDEgOyBUVVNFUj1cMjsgVEdST1VQPVwzOyBUTU9ERT1cNDsgVE5BTUU9XDUgVExUQVJHRVQ9XDYvcCJgCisJCVROQU1FPSR7Uk9PVF9ESVJ9JHtUTkFNRX0KKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNoZWNraW5nIGZvciAtJHtUTkFNRX0tLiIKKworCQlbICIke1RUWVBFfSIgPSAibCIgXSAmJiB7CisJCQlUU09VUkNFPSIkVExUQVJHRVQiCisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgbGluayAtJHtUTkFNRX0tIHBvaW50aW5nIHRvIC0ke1RTT1VSQ0V9LS4iCisJCQlsaW5rX2ZpbGUgIiR7VFNPVVJDRX0iICIke1ROQU1FfSIKKwkJCWNvbnRpbnVlCisJCX0KKworCQlbIC1MICIke1ROQU1FfSIgXSAmJiB7CisJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiRm91bmQgbGluay4iCisJCQlORVdOQU1FPWBscyAtbCAiJHtUTkFNRX0iIHwgc2VkIC1lICdzL14uKi0+IFwoLipcKSQvXDEvJ2AKKwkJCWVjaG8gJHtORVdOQU1FfSB8IGdyZXAgLXYgIl4vIiA+L2Rldi9udWxsICYmIHsKKwkJCQlUTkFNRT0iYGVjaG8gJHtUTkFNRX0gfCBzZWQgLWUgJ3NAXCguKlwpLy4qQFwxQCdgLyR7TkVXTkFNRX0iCisJCQkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNvbnZlcnRlZCByZWxhdGl2ZSBsaW5rdGFyZ2V0IHRvIGFic29sdXRlIHBhdGggLSR7VE5BTUV9LS4iCisJCQl9IHx8IHsKKwkJCQlUTkFNRT0iJHtORVdOQU1FfSIKKwkJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiVXNpbmcgYWJzb2x1dGUgbGluayB0YXJnZXQgLSR7VE5BTUV9LS4iCisJCQl9CisJCX0KKworCQljYXNlICIke1RUWVBFfSIgaW4KKwkJCSJmIikgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBmaWxlIC0ke1ROQU1FfS0uIgorCQkJCWNyZWF0ZV9maWxlICIke1ROQU1FfSIgJgorCQkJCTs7CisJCQkiZCIpICBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5IC0ke1ROQU1FfS0uIgorCQkJCW1rX2RpciAiJHtUTkFNRX0iCisJCQkJIyBBZGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZW50cnkgaW4gZnN0YWIgdG8gbW91bnQuCisJCQkJOzsKKwkJCSopICAgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJJbnZhbGlkIHR5cGUgLSR7VFRZUEV9LS4iCisJCQkJY29udGludWUKKwkJCQk7OworCQllc2FjCisJZG9uZQorCXJldHVybiAwCit9CisKK2NsZWFyY2FjaGU9MAorZXhlYyA5PC9wcm9jL2NtZGxpbmUKK3doaWxlIHJlYWQgbGluZSA8JjkKK2RvCisJY2FzZSAiJGxpbmUiIGluCisJCSpjbGVhcmNhY2hlKikgIGNsZWFyY2FjaGU9MQorCQkJICAgICAgIDs7CisJCSopCSAgICAgICBjb250aW51ZQorCQkJICAgICAgIDs7CisJZXNhYworZG9uZQorZXhlYyA5PiYtCisKK2lmIHRlc3QgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlIC1hICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9ICJ5ZXMiIC1hICJ4JDEiICE9ICJ4dXBkYXRlIiAtYSAieCRjbGVhcmNhY2hlIiA9ICJ4MCIKK3RoZW4KKwlzaCAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUKK2Vsc2UKKwlybSAtZiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisJZm9yIGZpbGUgaW4gYGxzIC0xICIke0NGR0RJUn0iIHwgc29ydGA7IGRvCisJCWFwcGx5X2NmZ2ZpbGUgIiR7Q0ZHRElSfS8ke2ZpbGV9IgorCWRvbmUKKworCVsgLWUgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkIF0gJiYgc3luYyAmJiBtdiAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQgJHtST09UX0RJUn0vZXRjL3ZvbGF0aWxlLmNhY2hlCitmaQorCitpZiBbIC16ICIke1JPT1RfRElSfSIgXSAmJiBbIC1mIC9ldGMvbGQuc28uY2FjaGUgXSAmJiBbICEgLWYgL3Zhci9ydW4vbGQuc28uY2FjaGUgXQordGhlbgorCWxuIC1zIC9ldGMvbGQuc28uY2FjaGUgL3Zhci9ydW4vbGQuc28uY2FjaGUKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYWQtb25seS1yb290ZnMtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTAzMjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYWQtb25seS1yb290ZnMtaG9vay5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRST09URlNfUkVBRF9PTkxZIiA9ICJubyIgXSAmJiBleGl0IDAKKworaXNfb25fcmVhZF9vbmx5X3BhcnRpdGlvbiAoKSB7CisJRElSRUNUT1JZPSQxCisJZGlyPWByZWFkbGluayAtZiAkRElSRUNUT1JZYAorCXdoaWxlIHRydWU7IGRvCisJCWlmIFsgISAtZCAiJGRpciIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6ICRkaXIgaXMgbm90IGEgZGlyZWN0b3J5IgorCQkJZXhpdCAxCisJCWVsc2UKKwkJCWZvciBmbGFnIGluIGBhd2sgLXYgZGlyPSRkaXIgJ3sgaWYgKCQyID09IGRpcikgeyBwcmludCAiRk9VTkQiOyBzcGxpdCgkNCxGTEFHUywiLCIpIH0gfTsgXAorCQkJCUVORCB7IGZvciAoZiBpbiBGTEFHUykgcHJpbnQgRkxBR1NbZl0gfScgPCAvcHJvYy9tb3VudHNgOyBkbworCQkJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisJCQkJWyAiJGZsYWciID0gInJvIiBdICYmIHsgcGFydGl0aW9uPSJyZWFkLW9ubHkiOyBicmVhazsgfQorCQkJZG9uZQorCQkJaWYgWyAiJGRpciIgPSAiLyIgLW8gLW4gIiRwYXJ0aXRpb24iIF07IHRoZW4KKwkJCQlicmVhaworCQkJZWxzZQorCQkJCWRpcj1gZGlybmFtZSAkZGlyYAorCQkJZmkKKwkJZmkKKwlkb25lCisJWyAiJHBhcnRpdGlvbiIgPSAicmVhZC1vbmx5IiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iCit9CisKK2lmIFsgIiQxIiA9ICJzdGFydCIgXSA7IHRoZW4KKwlpZiBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbGliYCA9ICJ5ZXMiIF07IHRoZW4KKwkJZ3JlcCAtcSAidG1wZnMgL3Zhci92b2xhdGlsZSIgL3Byb2MvbW91bnRzIHx8IG1vdW50IC92YXIvdm9sYXRpbGUKKwkJbWtkaXIgLXAgL3Zhci92b2xhdGlsZS9saWIKKwkJY3AgLWEgL3Zhci9saWIvKiAvdmFyL3ZvbGF0aWxlL2xpYgorCQltb3VudCAtLWJpbmQgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWIKKwlmaQorZmkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYm9vdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWJvb3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDg3ZDhkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWJvb3QKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICByZWJvb3QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGVjdXRlIHRoZSByZWJvb3QgY29tbWFuZC4KKyMgRGVzY3JpcHRpb246CisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKK2VjaG8gLW4gIlJlYm9vdGluZy4uLiAiCityZWJvb3QgU0VEX0hBTFRBUkdTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcm1ub2xvZ2luLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Jtbm9sb2dpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NmRlMzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Jtbm9sb2dpbi5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHJtbm9sb2dpbgorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkYWxsCisjIFJlcXVpcmVkLVN0b3A6IAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBSZW1vdmUgL2V0Yy9ub2xvZ2luIGF0IGJvb3QKKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IHJlbW92ZXMgdGhlIC9ldGMvbm9sb2dpbiBmaWxlIGFzIHRoZQorIyAgICAgICAgICAgICAgICAgICAgbGFzdCBzdGVwIGluIHRoZSBib290IHByb2Nlc3MsIGlmIERFTEFZTE9HSU49eWVzLgorIyAgICAgICAgICAgICAgICAgICAgSWYgREVMQVlMT0dJTj1ubywgL2V0Yy9ub2xvZ2luIHdhcyBub3QgY3JlYXRlZCBieQorIyAgICAgICAgICAgICAgICAgICAgYm9vdG1pc2MgZWFybGllciBpbiB0aGUgYm9vdCBwcm9jZXNzLgorIyMjIEVORCBJTklUIElORk8KKworaWYgdGVzdCAtZiAvZXRjL25vbG9naW4uYm9vdAordGhlbgorCXJtIC1mIC9ldGMvbm9sb2dpbiAvZXRjL25vbG9naW4uYm9vdAorZmkKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zYXZlLXJ0Yy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zYXZlLXJ0Yy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDM4ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgc2F2ZS1ydGMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdG9yZSBzeXN0ZW0gY2xvY2sgaW50byBmaWxlCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgVXBkYXRlIHRoZSB0aW1lc3RhbXAKK2RhdGUgLXUgKyU0WSUybSUyZCUySCUyTSUyUyA+IC9ldGMvdGltZXN0YW1wCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2VuZHNpZ3MgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2VuZHNpZ3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzRlMWI3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncwpAQCAtMCwwICsxLDIxIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNlbmRzaWdzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIHVtb3VudG5mcworIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBLaWxsIGFsbCByZW1haW5pbmcgcHJvY2Vzc2VzLgorIyBEZXNjcmlwdGlvbjogCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2luZ2xlIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NpbmdsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYTgyZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NpbmdsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHNpbmdsZQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzICRhbGwga2lsbHByb2NzCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAxCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IGV4ZWN1dGVkIGJ5IGluaXQoOCkgdXBvbiBlbnRlcmluZyBydW5sZXZlbCAxIChzaW5nbGUpLgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0iL3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iCisKKyMgS2lsbCBhbGwgcHJvY2Vzc2VzLgorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBURVJNIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC0xNQorc2xlZXAgNQorZWNobyAiU2VuZGluZyBhbGwgcHJvY2Vzc2VzIHRoZSBLSUxMIHNpZ25hbC4uLiIKK2tpbGxhbGw1IC05CisKKyMgV2Ugc3RhcnQgdXBkYXRlIGhlcmUsIHNpbmNlIHdlIGp1c3Qga2lsbGVkIGl0LgordGVzdCAteCAvc2Jpbi91cGRhdGUgJiYgdXBkYXRlCisKK2VjaG8gIkVudGVyaW5nIHNpbmdsZS11c2VyIG1vZGUuLi4iCitleGVjIGluaXQgLXQxIFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N1c2hlbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zdXNoZWxsCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK1sgLXogIiRTVVNIRUxMIiBdICYmIFNVU0hFTEw9L2Jpbi9zaAorCitleGVjICRTVVNIRUxMCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3lzZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3lzZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmZTc2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBNb3VudCBrZXJuZWwgdmlydHVhbCBmaWxlIHN5c3RlbXMuCisjIERlc2NyaXB0aW9uOiAgICAgICBNb3VudCBpbml0aWFsIHNldCBvZiB2aXJ0dWFsIGZpbGVzeXN0ZW1zIHRoZSBrZXJuZWwKKyMgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIGFuZCB0aGF0IGFyZSByZXF1aXJlZCBieSBldmVyeXRoaW5nLgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAtZSAvcHJvYyBdICYmICEgWyAtZSAvcHJvYy9tb3VudHMgXTsgdGhlbgorICBtb3VudCAtdCBwcm9jIHByb2MgL3Byb2MKK2ZpCisKK2lmIFsgLWUgL3N5cyBdICYmIGdyZXAgLXEgc3lzZnMgL3Byb2MvZmlsZXN5c3RlbXMgJiYgISBbIC1lIC9zeXMvY2xhc3MgXTsgdGhlbgorICBtb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCitmaQorCitpZiBbIC1lIC9zeXMva2VybmVsL2RlYnVnIF0gJiYgZ3JlcCAtcSBkZWJ1Z2ZzIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisgIG1vdW50IC10IGRlYnVnZnMgZGVidWdmcyAvc3lzL2tlcm5lbC9kZWJ1ZworZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTMyNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50ZnMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVHVybiBvZmYgc3dhcCBhbmQgdW5tb3VudCBhbGwgbG9jYWwgZmlsZSBzeXN0ZW1zLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworZWNobyAiRGVhY3RpdmF0aW5nIHN3YXAuLi4iCitzd2Fwb2ZmIC1hCisKKyMgV2UgbGVhdmUgL3Byb2MgbW91bnRlZC4KK2VjaG8gIlVubW91bnRpbmcgbG9jYWwgZmlsZXN5c3RlbXMuLi4iCitncmVwIC1xIC9tbnQvcmFtIC9wcm9jL21vdW50cyAmJiBtb3VudCAtbyByZW1vdW50LHJvIC9tbnQvcmFtCittb3VudCAtbyByZW1vdW50LHJvIC8KKwordW1vdW50IC1mIC1hIC1yID4gL2Rldi9udWxsIDI+JjEKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRuZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50bmZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMDc1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50bmZzLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdW1vdW50bmZzCisjIFJlcXVpcmVkLVN0YXJ0OgorIyBSZXF1aXJlZC1TdG9wOiAgICAgdW1vdW50ZnMKKyMgU2hvdWxkLVN0b3A6ICAgICAgICRuZXR3b3JrICRwb3J0bWFwCisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFVubW91bnQgYWxsIG5ldHdvcmsgZmlsZXN5c3RlbXMKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXcml0ZSBhIHJlYm9vdCByZWNvcmQgdG8gL3Zhci9sb2cvd3RtcCBiZWZvcmUgdW5tb3VudGluZworaGFsdCAtdworCitlY2hvICJVbm1vdW50aW5nIHJlbW90ZSBmaWxlc3lzdGVtcy4uLiIKKwordGVzdCAtZiAvZXRjL2ZzdGFiICYmICgKKworIworIwlSZWFkIHRocm91Z2ggZnN0YWIgbGluZSBieSBsaW5lIGFuZCB1bm91bnQgbmV0d29yayBmaWxlIHN5c3RlbXMKKyMKK3doaWxlIHJlYWQgZGV2aWNlIG1vdW50cHQgZnN0eXBlIG9wdGlvbnMKK2RvCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBuZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gc21iZnMgfHwgIHRlc3QgIiRmc3R5cGUiID0gbmNwZnMgfHwgdGVzdCAiJGZzdHlwZSIgPSBjaWZzCisJdGhlbgorCQl1bW91bnQgLWYgJG1vdW50cHQKKwlmaQorZG9uZQorKSA8IC9ldGMvZnN0YWIKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3VyYW5kb20KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWYxNjI1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91cmFuZG9tCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdXJhbmRvbQorIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmFuZG9tIHNlZWQKKyMgRGVzY3JpcHRpb246ICAgICAgIFNhdmUgdGhlIHJhbmRvbSBzZWVkIG9uIHNodXRkb3duIGFuZCByZXN0b3JlIGl0IG9uIGJvb3QsCisjICAgICAgICAgICAgICAgICAgICB0byBlbnN1cmUgdGhhdCB0aGUgc2VlZCBpc24ndCBwcmVkaWNhYmxlIG9uIHN0YXJ0dXAKKyMgICAgICAgICAgICAgICAgICAgIChiZWNhdXNlIHRoZSBib290IHByb2Nlc3MgaXMgcHJlZGljdGFibGUpCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1jIC9kZXYvdXJhbmRvbSB8fCBleGl0IDAKKworUkFORE9NX1NFRURfRklMRT0vdmFyL2xpYi91cmFuZG9tL3JhbmRvbS1zZWVkCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvdXJhbmRvbSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VyYW5kb20KKworY2FzZSAiJDEiIGluCisJc3RhcnR8IiIpCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJJbml0aWFsaXppbmcgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuLi4iCisJCSMgTG9hZCBhbmQgdGhlbiBzYXZlIDUxMiBieXRlcywgd2hpY2ggaXMgdGhlIHNpemUgb2YgdGhlIGVudHJvcHkKKwkJIyBwb29sLiBBbHNvIGxvYWQgdGhlIGN1cnJlbnQgZGF0ZSwgaW4gY2FzZSB0aGUgc2VlZCBmaWxlIGlzCisJCSMgZW1wdHkuCisJCSggZGF0ZSArJXMuJU47IFsgLWYgIiRSQU5ET01fU0VFRF9GSUxFIiBdICYmIGNhdCAiJFJBTkRPTV9TRUVEX0ZJTEUiICkgXAorCQkJPi9kZXYvdXJhbmRvbQorCQlybSAtZiAiJFJBTkRPTV9TRUVEX0ZJTEUiCisJCXVtYXNrIDA3NworCQlkZCBpZj0vZGV2L3VyYW5kb20gb2Y9JFJBTkRPTV9TRUVEX0ZJTEUgY291bnQ9MSBcCisJCQk+L2Rldi9udWxsIDI+JjEgfHwgZWNobyAidXJhbmRvbSBzdGFydDogZmFpbGVkLiIKKwkJdW1hc2sgMDIyCisJCTs7CisJc3RvcCkKKwkJIyBDYXJyeSBhIHJhbmRvbSBzZWVkIGZyb20gc2h1dC1kb3duIHRvIHN0YXJ0LXVwOworCQkjIHNlZSBkb2N1bWVudGF0aW9uIGluIGxpbnV4L2RyaXZlcnMvY2hhci9yYW5kb20uYworCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiU2F2aW5nIHJhbmRvbSBzZWVkLi4uIgorCQl1bWFzayAwNzcKKwkJZGQgaWY9L2Rldi91cmFuZG9tIG9mPSRSQU5ET01fU0VFRF9GSUxFIGNvdW50PTEgXAorCQkJPi9kZXYvbnVsbCAyPiYxIHx8IGVjaG8gInVyYW5kb20gc3RvcDogZmFpbGVkLiIKKwkJOzsKKwkqKQorCQllY2hvICJVc2FnZTogdXJhbmRvbSB7c3RhcnR8c3RvcH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3ZvbGF0aWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTcyNDVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3ZvbGF0aWxlcwpAQCAtMCwwICsxLDM2IEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGxpc3RzIGZpbGVzeXN0ZW0gb2JqZWN0cyB0aGF0IHNob3VsZCBnZXQgdmVyaWZpZWQKKyMgZHVyaW5nIHN0YXJ0dXAgYW5kIGJlIGNyZWF0ZWQgaWYgbWlzc2luZy4KKyMKKyMgRXZlcnkgbGluZSBtdXN0IGVpdGhlciBiZSBhIGNvbW1lbnQgc3RhcnRpbmcgd2l0aCAjCisjIG9yIGEgZGVmaW5pdGlvbiBvZiBmb3JtYXQ6CisjIDx0eXBlPiA8b3duZXI+IDxncm91cD4gPG1vZGU+IDxwYXRoPiA8bGlua3NvdXJjZT4KKyMgd2hlcmUgdGhlIGl0ZW1zIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAhCisjCisjIDx0eXBlPiA6IGR8ZnxsIDogKGQpaXJlY3Rvcnl8KGYpaWxlfChsKWluaworIworIyBBIGxpbmtpbmcgZXhhbXBsZToKKyMgbCByb290IHJvb3QgMDc3NyAvdmFyL3Rlc3QgL3RtcC90ZXN0ZmlsZQorIyBmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvdGVzdCBub25lCisjCisjIFVuZGVyc3RhbmRpbmcgbGlua3M6CisjIFdoZW4gcG9wdWxhdGUtdm9sYXRpbGUgaXMgdG8gdmVyaWZ5L2NyZWF0ZSBhIGRpcmVjdG9yeSBvciBmaWxlLCBpdCB3aWxsIGZpcnN0CisjIGNoZWNrIGl0J3MgZXhpc3RlbmNlLiBJZiBhIGxpbmsgaXMgZm91bmQgdG8gZXhpc3QgaW4gdGhlIHBsYWNlIG9mIHRoZSB0YXJnZXQsCisjIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdGFyZ2V0IHRoZSBsaW5rIHBvaW50cyB0by4KKyMgVGh1cywgaWYgYSBsaW5rIGlzIGluIHRoZSBwbGFjZSB0byBiZSB2ZXJpZmllZCwgdGhlIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQKKyMgaW4gdGhlIHBsYWNlIHRoZSBsaW5rIHBvaW50cyB0byBpbnN0ZWFkLgorIyBUaGlzIGV4cGxhaW5zIHRoZSBvcmRlciBvZiAibGluayBiZWZvcmUgb2JqZWN0IiBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlcmUKKyMgYSBsaW5rIHdpbGwgYmUgY3JlYXRlZCBhdCAvdmFyL3Rlc3QgcG9pbnRpbmcgdG8gL3RtcC90ZXN0ZmlsZSBhbmQgZHVlIHRvIHRoaXMKKyMgbGluayB0aGUgZmlsZSBkZWZpbmVkIGFzIC92YXIvdGVzdCB3aWxsIGFjdHVhbGx5IGJlIGNyZWF0ZWQgYXMgL3RtcC90ZXN0ZmlsZS4KK2Qgcm9vdCByb290IDE3NzcgL3J1bi9sb2NrIG5vbmUKK2Qgcm9vdCByb290IDA3NTUgL3Zhci92b2xhdGlsZS9sb2cgbm9uZQorZCByb290IHJvb3QgMTc3NyAvdmFyL3ZvbGF0aWxlL3RtcCBub25lCitsIHJvb3Qgcm9vdCAxNzc3IC92YXIvbG9jayAvcnVuL2xvY2sKK2wgcm9vdCByb290IDA3NTUgL3Zhci9sb2cgL3Zhci92b2xhdGlsZS9sb2cKK2wgcm9vdCByb290IDA3NTUgL3Zhci9ydW4gL3J1bgorbCByb290IHJvb3QgMTc3NyAvdmFyL3RtcCAvdmFyL3ZvbGF0aWxlL3RtcAorbCByb290IHJvb3QgMTc3NyAvdG1wIC92YXIvdG1wCitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9jay9zdWJzeXMgbm9uZQorZiByb290IHJvb3QgMDY2NCAvdmFyL2xvZy93dG1wIG5vbmUKK2Ygcm9vdCByb290IDA2NjQgL3Zhci9ydW4vdXRtcCBub25lCitsIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2LmNvbmYgL3Zhci9ydW4vcmVzb2x2LmNvbmYKK2Ygcm9vdCByb290IDA2NDQgL3Zhci9ydW4vcmVzb2x2LmNvbmYgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MGRlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKQEAgLTAsMCArMSwxODIgQEAKK1NVTU1BUlkgPSAiU3lzViBpbml0IHNjcmlwdHMiCitERVNDUklQVElPTiA9ICJJbml0c2NyaXB0cyBwcm92aWRlIHRoZSBiYXNpYyBzeXN0ZW0gc3RhcnR1cCBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGZvciB0aGUgc3lzdGVtLiAgVGhlc2Ugc2NyaXB0cyBpbmNsdWRlIGFjdGlvbnMgc3VjaCBhcyBmaWxlc3lzdGVtIG1vdW50aW5nLCBmc2NrLCBSVEMgbWFuaXB1bGF0aW9uIGFuZCBvdGhlciBhY3Rpb25zIHJvdXRpbmVseSBwZXJmb3JtZWQgYXQgc3lzdGVtIHN0YXJ0dXAuICBJbiBhZGRpdGlvbiwgdGhlIHNjcmlwdHMgYXJlIGFsc28gdXNlZCBkdXJpbmcgc3lzdGVtIHNodXRkb3duIHRvIHJldmVyc2UgdGhlIGFjdGlvbnMgcGVyZm9ybWVkIGF0IHN0YXJ0dXAuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorUFIgPSAicjE1NSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vZnVuY3Rpb25zIFwKKyAgICAgICAgICAgZmlsZTovL2hhbHQgXAorICAgICAgICAgICBmaWxlOi8vdW1vdW50ZnMgXAorICAgICAgICAgICBmaWxlOi8vZGV2cHRzLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2RldnB0cyBcCisgICAgICAgICAgIGZpbGU6Ly9ob3N0bmFtZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudGFsbC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9iYW5uZXIuc2ggXAorICAgICAgICAgICBmaWxlOi8vYm9vdG1pc2Muc2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVib290IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc2luZ2xlIFwKKyAgICAgICAgICAgZmlsZTovL3NlbmRzaWdzIFwKKyAgICAgICAgICAgZmlsZTovL3VyYW5kb20gXAorICAgICAgICAgICBmaWxlOi8vcm1ub2xvZ2luLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrcm9vdC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnRuZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzZnMuc2ggXAorICAgICAgICAgICBmaWxlOi8vcG9wdWxhdGUtdm9sYXRpbGUuc2ggXAorICAgICAgICAgICBmaWxlOi8vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZvbGF0aWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9zYXZlLXJ0Yy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9HUEx2Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kbWVzZy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9sb2dyb3RhdGUtZG1lc2cuY29uZiBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnZmlsZTovL3N1c2hlbGwnLCcnLGQpfSBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworU1JDX1VSSV9hcHBlbmRfYXJtID0gIiBmaWxlOi8vYWxpZ25tZW50LnNoIgorCitLRVJORUxfVkVSU0lPTiA9ICIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZnVuY3Rpb25zIFwKKyAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywnYmFzaCcsJycsZCl9IFwKKwkJICIKK0ZJTEVTXyR7UE59LWZ1bmN0aW9ucyA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMqIgorCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1mdW5jdGlvbnMgPSAiOTAiCitBTFRFUk5BVElWRV8ke1BOfS1mdW5jdGlvbnMgPSAiZnVuY3Rpb25zIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Z1bmN0aW9uc10gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zIgorCitIQUxUQVJHUyA/PSAiLWQgLWYiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlzZWQgLWkgLWUgInM6U0VEX0hBTFRBUkdTOiR7SEFMVEFSR1N9OmciICR7V09SS0RJUn0vaGFsdAorCXNlZCAtaSAtZSAiczpTRURfSEFMVEFSR1M6JHtIQUxUQVJHU306ZyIgJHtXT1JLRElSfS9yZWJvb3QKK30KKworZG9faW5zdGFsbCAoKSB7CisjCisjIENyZWF0ZSBkaXJlY3RvcmllcyBhbmQgaW5zdGFsbCBkZXZpY2UgaW5kZXBlbmRlbnQgc2NyaXB0cworIworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yY1MuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMwLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMS5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzIuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjNC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzUuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmM2LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJIyBIb2xkcyBzdGF0ZSBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRvIHVyYW5kb20KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi91cmFuZG9tCisKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9mdW5jdGlvbnMJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2Jvb3RtaXNjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2NoZWNrcm9vdC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9oYWx0CQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ob3N0bmFtZS5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudGFsbC5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9tb3VudG5mcy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yZWJvb3QJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3Jtbm9sb2dpbi5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zZW5kc2lncwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2luZ2xlCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS91bW91bnRuZnMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vdXJhbmRvbQkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1pICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91cmFuZG9tIC1lICdzLC92YXIvLCR7bG9jYWxzdGF0ZWRpcn0vLGc7cywvZXRjLywke3N5c2NvbmZkaXJ9LyxnJworCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RldnB0cy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9kZXZwdHMJCSR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zeXNmcy5zaAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcG9wdWxhdGUtdm9sYXRpbGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3NhdmUtcnRjLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L3ZvbGF0aWxlcwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvMDBfY29yZQorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RtZXNnLnNoCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9sb2dyb3RhdGUtZG1lc2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS8KKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxpZ25tZW50LnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWZpCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc2VsaW51eCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3VzaGVsbCAke0R9LyR7YmFzZV9zYmluZGlyfQorCWZpCisjCisjIEluc3RhbGwgZGV2aWNlIGRlcGVuZGVudCBzY3JpcHRzCisjCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYmFubmVyLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9iYW5uZXIuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91bW91bnRmcwkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdW1vdW50ZnMKKyMKKyMgQ3JlYXRlIHJ1bmxldmVsIGxpbmtzCisjCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBybW5vbG9naW4uc2ggc3RhcnQgOTkgMiAzIDQgNSAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzZW5kc2lncyBzdGFydCAyMCAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdXJhbmRvbSBzdGFydCAzMCBTIDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSB1bW91bnRuZnMuc2ggc3RhcnQgMzEgMCAxIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gdW1vdW50ZnMgc3RhcnQgNDAgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHJlYm9vdCBzdGFydCA5MCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGhhbHQgc3RhcnQgOTAgMCAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzYXZlLXJ0Yy5zaCBzdGFydCAyNSAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYmFubmVyLnNoIHN0YXJ0IDAyIFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gY2hlY2tyb290LnNoIHN0YXJ0IDA2IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gbW91bnRhbGwuc2ggc3RhcnQgMDMgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBob3N0bmFtZS5zaCBzdGFydCAzOSBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IG1vdW50bmZzLnNoIHN0YXJ0IDE1IDIgMyA0IDUgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdG1pc2Muc2ggc3RhcnQgNTUgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzeXNmcy5zaCBzdGFydCAwMiBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHBvcHVsYXRlLXZvbGF0aWxlLnNoIHN0YXJ0IDM3IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoIHN0YXJ0IDI5IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gZGV2cHRzLnNoIHN0YXJ0IDM4IFMgLgorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJhcm0iIF07IHRoZW4KKwkgICAgICAgIHVwZGF0ZS1yYy5kIC1yICR7RH0gYWxpZ25tZW50LnNoIHN0YXJ0IDA2IFMgLgorCWZpCisJIyBXZSB3aXNoIHRvIGhhdmUgL3Zhci9sb2cgcmVhZHkgYXQgdGhpcyBzdGFnZSBzbyBleGVjdXRlIHRoaXMgYWZ0ZXIKKwkjIHBvcHVsYXRlLXZvbGF0aWxlLnNoCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBkbWVzZy5zaCBzdGFydCAzOCBTIC4KK30KKworTUFTS0VEX1NDUklQVFMgPSAiIFwKKyAgYmFubmVyIFwKKyAgYm9vdG1pc2MgXAorICBjaGVja2ZzIFwKKyAgY2hlY2tyb290IFwKKyAgZGV2cHRzIFwKKyAgZG1lc2cgXAorICBob3N0bmFtZSBcCisgIG1vdW50YWxsIFwKKyAgbW91bnRuZnMgXAorICBwb3B1bGF0ZS12b2xhdGlsZSBcCisgIHJlYWQtb25seS1yb290ZnMtaG9vayBcCisgIHJtbm9sb2dpbiBcCisgIHN5c2ZzIFwKKyAgdXJhbmRvbSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCWZvciBTRVJWSUNFIGluICR7TUFTS0VEX1NDUklQVFN9OyBkbworCQkJc3lzdGVtY3RsICRPUFRTIG1hc2sgJFNFUlZJQ0Uuc2VydmljZQorCQlkb25lCisJZmkKKworICAgICMgRGVsZXRlIGFueSBvbGQgdm9sYXRpbGUgY2FjaGUgc2NyaXB0LCBhcyBkaXJlY3RvcmllcyBtYXkgaGF2ZSBtb3ZlZAorICAgIGlmIFsgLXogIiREIiBdOyB0aGVuCisgICAgICAgIHJtIC1mICIvZXRjL3ZvbGF0aWxlLmNhY2hlIgorICAgIGZpCit9CisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvY2hlY2tyb290LnNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvanBlZy9qcGVnXzlhLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvanBlZy9qcGVnXzlhLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmU2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJsaWJqcGVnIGlzIGEgbGlicmFyeSBmb3IgaGFuZGxpbmcgdGhlIEpQRUcgKEpGSUYpIGltYWdlIGZvcm1hdCIKK0RFU0NSSVBUSU9OID0gImxpYmpwZWcgY29udGFpbnMgYSBsaWJyYXJ5IGZvciBoYW5kbGluZyB0aGUgSlBFRyAoSkZJRikgaW1hZ2UgZm9ybWF0LCBhcyB3ZWxsIGFzIHJlbGF0ZWQgcHJvZ3JhbXMgZm9yIGFjY2Vzc2luZyB0aGUgbGlianBlZyBmdW5jdGlvbnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pamcub3JnLyIKKworTElDRU5TRSA9IkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTttZDU9ZWE5M2E4YTJmZWQxMDEwNmI2M2JjMjE2NzllZGFjYjkiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmlqZy5vcmcvZmlsZXMvanBlZ3NyYy52JHtQVn0udGFyLmd6IFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzNTM5OTJhZWNhZWUxODA1ZWY0MTA5YWFkZDQzM2U3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNhNzUzZWE0OGQ5MTc5NDVkZDU0YTJkOTdkZTM4OGFhMDZjYTJlYjEwNjZjYmZkYzY2NTIwMzYzNDlmZTA1YTciCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rIAkJImpwZWctdG9vbHMgIgorREVTQ1JJUFRJT05fanBlZy10b29scyA9ICJUaGUganBlZy10b29scyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBjbGllbnQgcHJvZ3JhbXMgZm9yIGFjY2VzcyBsaWJqcGVnIGZ1bmN0aW9uYWxpdHkuICBUaGVzZSB0b29scyBhbGxvdyBmb3IgdGhlIGNvbXByZXNzaW9uLCBkZWNvbXByZXNzaW9uLCB0cmFuc2Zvcm1hdGlvbiBhbmQgZGlzcGxheSBvZiBKUEVHIGZpbGVzLiIKK0ZJTEVTX2pwZWctdG9vbHMgPSAJIiR7YmluZGlyfS8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcGtnX3Bvc3RpbnN0XyR7UE59X2xpbnV4c3RkYmFzZSAoKSB7CisgICAgaWYgWyAhIC1lICREJHtsaWJkaXJ9L2xpYmpwZWcuc28uNjIgXTsgdGhlbgorICAgICAgICBKUEVHPWBmaW5kICREJHtsaWJkaXJ9IC10eXBlIGYgLW5hbWUgbGlianBlZy5zby5cKi5cKi5cKmAKKyAgICAgICAgbG4gLXNmIGBiYXNlbmFtZSAkSlBFR2AgJEQke2xpYmRpcn0vbGlianBlZy5zby42MgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZmNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDNjNWM3YWNjN2VmODc0YjkxOWIyNjU4M2QzODkyZTIxYjkwNzgzM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitEYXRlOiBXZWQsIDIwIEF1ZyAyMDE0IDA5OjAwOjAzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBPbmx5IGlubHVjbHVkZSBrZXJuZWwgaGVhZGVycyB3aXRoIGdsaWJjCisKK1RoaXMgZml4ZXMgY29tcGlsZSBlcnJvcnMgd2l0aCBtdXNsIGxpYmMKKworU2lnbmVkLW9mZi1ieTogTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvcmVzaXplY29ucy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3Jlc2l6ZWNvbnMuYyBiL3NyYy9yZXNpemVjb25zLmMKK2luZGV4IDVmODQ4NDUuLjY5MWRmY2MgMTAwNjQ0CistLS0gYS9zcmMvcmVzaXplY29ucy5jCisrKysgYi9zcmMvcmVzaXplY29ucy5jCitAQCAtODAsNyArODAsNyBAQAorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjaWYgKF9fR05VX0xJQlJBUllfXyA+PSA2KQorICNpbmNsdWRlIDxzeXMvcGVybS5oPgorLSNlbHNlCisrI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pCisgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisgI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KKyAjZW5kaWYKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC91Y2xpYmMtc3RkYXJnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC91Y2xpYmMtc3RkYXJnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlN2YzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGtleW1hcC5oOjU6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSBrc3ltcy5jOjY6CisuL2tleW1hcC9jb21tb24uaDo2NTozODogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICd2YV9saXN0JworICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisuL2tleW1hcC9jb21tb24uaDo2NjozOiBlcnJvcjogZXhwZWN0ZWQgJzsnLCAnLCcgb3IgJyknIGJlZm9yZSAnY29uc3QnCisgICBjb25zdCB2b2lkICpkYXRhKTsKKyAgIF4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrYmQtMi4wLjAub3JpZy9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9jb250ZXh0UC5oCTIwMTMtMTEtMDUgMjI6MzM6NDkuMjAwNTI4MjI2IC0wODAwCitAQCAtMiw3ICsyLDcgQEAKKyAjZGVmaW5lIExLX0NPTlRFWFRQX0gKKyAKKyAjaW5jbHVkZSAia2V5bWFwLmgiCistCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorIC8qKgorICAqIEBicmllZiBDb3B5IG9mIHN0cnVjdCBrYmRpYWNydWMuCisgICovCitJbmRleDoga2JkLTIuMC4wL3NyYy9saWJrZXltYXAva2V5bWFwL2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2JkLTIuMC4wLm9yaWcvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0wOC0xMyAwNjo0NjoyMy4wMDAwMDAwMDAgLTA3MDAKKysrKyBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgJMjAxMy0xMS0wNSAyMjozMzo1OS45NjQ1Mjg0MzggLTA4MDAKK0BAIC02LDYgKzYsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxrZXltYXAvY29udGV4dC5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyAKKyAvKiogSW5pdGlhbGl6ZXMgdGhlIHN0cnVjdHVyZXMgbmVjZXNzYXJ5IHRvIHJlYWQgYW5kL29yIHBhcnNlIGtleW1hcC4KKyAgKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ZGM3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmRfMi4wLjIuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJLZXl0YWJsZSBmaWxlcyBhbmQga2V5Ym9hcmQgdXRpbGl0aWVzIgorIyBldmVyeXRoaW5nIG1pbnVzIGNvbnNvbGUtZm9udHMgaXMgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE1ZmNjMzYxMjFkOTNlMWY2OWQ5NmEzMTMwNzhjOGI1IgorREVQRU5EUyA9ICJsaWJjaGVjayIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdCBwa2djb25maWcKKworUlJFUExBQ0VTXyR7UE59ID0gImNvbnNvbGUtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gPSAiY29uc29sZS10b29scyIKK1JDT05GTElDVFNfJHtQTn0gPSAiY29uc29sZS10b29scyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLXN0ZGFyZy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDMtT25seS1pbmx1Y2x1ZGUta2VybmVsLWhlYWRlcnMtd2l0aC1nbGliYy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODc0NzVlYjc4YjFkNmU2YWIwNjY4NmRkMzIzYWQ0YmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRmZGRhYmY5NjAxMmUzMjljNGJlYmI5NmEyMWFlZWY3YzM4NzJmNjI0ZTk2ZTgxNTZiYTU0MmI4MmFlYjkxMiIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS12bG9jaywgLS1kaXNhYmxlLXZsb2NrLCBsaWJwYW0sIgorCitQQUNLQUdFUyArPSAiJHtQTn0tY29uc29sZWZvbnRzICR7UE59LWtleW1hcHMgJHtQTn0tdW5pbWFwcyAke1BOfS1jb25zb2xldHJhbnMiCisKK0ZJTEVTXyR7UE59LWNvbnNvbGVmb250cyA9ICIke2RhdGFkaXJ9L2NvbnNvbGVmb250cyIKK0ZJTEVTXyR7UE59LWNvbnNvbGV0cmFucyA9ICIke2RhdGFkaXJ9L2NvbnNvbGV0cmFucyIKK0ZJTEVTXyR7UE59LWtleW1hcHMgPSAiJHtkYXRhZGlyfS9rZXltYXBzIgorRklMRVNfJHtQTn0tdW5pbWFwcyA9ICIke2RhdGFkaXJ9L3VuaW1hcHMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJjaHZ0IGRlYWxsb2N2dCBmZ2NvbnNvbGUgb3BlbnZ0IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYmNncm91cC9saWJjZ3JvdXBfMC40MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJhMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTGludXggY29udHJvbCBncm91cCBhYnN0cmFjdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGliY2dyb3VwIGlzIGEgbGlicmFyeSB0aGF0IGFic3RyYWN0cyB0aGUgY29udHJvbCBncm91cCBmaWxlIHN5c3RlbSBcCitpbiBMaW51eC4gQ29udHJvbCBncm91cHMgYWxsb3cgeW91IHRvIGxpbWl0LCBhY2NvdW50IGFuZCBpc29sYXRlIHJlc291cmNlIHVzYWdlIFwKKyhDUFUsIG1lbW9yeSwgZGlzayBJL08sIGV0Yy4pIG9mIGdyb3VwcyBvZiBwcm9jZXNzZXMuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJjZy8ke0JQTn0vdjAuNDEvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZGVhOWQ1MGI4YTViNzNmZjBiZjFjZGNiMjEwZjYzZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlNGUzOGJkYzdlZjcwNjQ1Y2UzMzc0MGRkY2NhMDUxMjQ4ZDU2YjUzMjgzYzBkYzZkNDA0ZTE3NzA2ZjZmYjUxIgorCitFWFRSQV9PRUNPTkYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtLW1vZHVsZS1kaXI9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkgLS1lbmFibGUtcGFtPXllcycsICctLWVuYWJsZS1wYW09bm8nLCBkKX0iCisKK1BBQ0tBR0VTID0rICJjZ3JvdXBzLXBhbS1wbHVnaW4iCitGSUxFU19jZ3JvdXBzLXBhbS1wbHVnaW4gPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZpbmcgbGliY2dyb3VwIHRvIGJhc2VfbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxuIC1zZiAke3JlbF9saWJfcHJlZml4fSR7YmFzZV9saWJkaXJ9L2xpYmNncm91cC5zby4xICR7RH0ke2xpYmRpcn0vbGliY2dyb3VwLnNvCisJZmkKKwkjIHBhbSBtb2R1bGVzIGluICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyBzaG91bGQgYmUgYmluYXJ5IC5zbyBmaWxlcywgbm90IHN5bWxpbmtzLgorCWlmIFsgLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5L3BhbV9jZ3JvdXAuc28uMC4wLjAgXTsgdGhlbgorCQltdiAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4wLjAuMCAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zbworCQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4qCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNjMzdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jCkBAIC0wLDAgKzEsNzggQEAKK1NVTU1BUlkgPSAiWE1MIEMgUGFyc2VyIExpYnJhcnkgYW5kIFRvb2xraXQiCitERVNDUklQVElPTiA9ICJUaGUgWE1MIFBhcnNlciBMaWJyYXJ5IGFsbG93cyBmb3IgbWFuaXB1bGF0aW9uIG9mIFhNTCBmaWxlcy4gIExpYnhtbDIgZXhwb3J0cyBQdXNoIGFuZCBQdWxsIHR5cGUgcGFyc2VyIGludGVyZmFjZXMgZm9yIGJvdGggWE1MIGFuZCBIVE1MLiAgSXQgY2FuIGRvIERURCB2YWxpZGF0aW9uIGF0IHBhcnNlIHRpbWUsIG9uIGEgcGFyc2VkIGRvY3VtZW50IGluc3RhbmNlIG9yIHdpdGggYW4gYXJiaXRyYXJ5IERURC4gIExpYnhtbDIgaW5jbHVkZXMgY29tcGxldGUgWFBhdGgsIFhQb2ludGVyIGFuZCBYaW5jbHVkZSBpbXBsZW1lbnRhdGlvbnMuICBJdCBhbHNvIGhhcyBhIFNBWCBsaWtlIGludGVyZmFjZSwgd2hpY2ggaXMgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIEV4cGF0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueG1sc29mdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sMiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ29weXJpZ2h0O21kNT0yMDQ0NDE3ZTJlNTAwNmI2NWE4YjkwNjdiNjgzZmNmMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9oYXNoLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0xNTttZDU9OTZmNzI5NjYwNWVhZTgwNzY3MGZiMDg5NDc4Mjk5NjkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlzdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTM7bWQ1PWNkYmZhM2RlZTUxYzA5OWVkYjA0ZTM5Zjc2MmVlOTA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RyaW8uYztiZWdpbmxpbmU9NTtlbmRsaW5lPTE0O21kNT02YzAyNTc1M2M4NmQ5NTg3MjJlYzc2ZTk0Y2FlOTMyZSIKKworREVQRU5EUyA9KyAiemxpYiIKKworU1JDX1VSSSA9ICJmdHA6Ly94bWxzb2Z0Lm9yZy9saWJ4bWwyL2xpYnhtbDItJHtQVn0udGFyLmd6O25hbWU9bGlidGFyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbnNpZGVjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veG1sMi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgcHl0aG9ubmF0aXZlIHB0ZXN0CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHl0aG9uICs9ICJweXRob24tY29yZSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgKz0gImdsaWJjLWdjb252LWViY2RpYy11cyBnbGliYy1nY29udi1pYm0xMTQxIgorCisjIFdlIGRvbid0IERFUEVORCBvbiBiaW51dGlscyBmb3IgYW5zaWRlY2wuaCBzbyBlbnN1cmUgd2UgZG9uJ3QgdXNlIHRoZSBoZWFkZXIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgLWUgJy8uKmFuc2lkZWNsLmguKi9kJyAke1N9L2NvbmZpZ3VyZS5hYworfQorCitleHBvcnQgUFlUSE9OX1NJVEVfUEFDS0FHRVM9IiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLS13aXRoLXB5dGhvbj0ke1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24iCisjIFdBUk5JTkc6IHpsaWIgaXMgcmVxdWlyZSBmb3IgUlBNIHVzZQorRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kZWJ1ZyAtLXdpdGhvdXQtbGVnYWN5IC0td2l0aC1jYXRhbG9nIC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC1mZXhjZXB0aW9ucyIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LWxlZ2FjeSAtLXdpdGhvdXQtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKK0VYVFJBX09FQ09ORl9saW51eHN0ZGJhc2UgPSAiLS13aXRoLWRlYnVnIC0td2l0aC1sZWdhY3kgLS13aXRoLWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLXpsaWIiCisKKyMgcmVxdWlyZWQgZm9yIHB5dGhvbmcgYmluZGluZworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitleHBvcnQgTERGTEFHUyArPSAiLWxkbCIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgICMgYXV0b25hbWVyIHdvdWxkIGNhbGwgdGhpcyBsaWJ4bWwyLTIsIGJ1dCB3ZSBkb24ndCB3YW50IHRoYXQKKyAgICBpZiBkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfbGlieG1sMicsICcke01MUFJFRklYfWxpYnhtbDInKQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tdXRpbHMgJHtQTn0tcHl0aG9uIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0veG1sMkNvbmYuc2ggJHtsaWJkaXJ9L2NtYWtlLyoiCitGSUxFU18ke1BOfS11dGlscyArPSAiJHtiaW5kaXJ9LyoiCitGSUxFU18ke1BOfS1weXRob24gKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgY3AgLXIgJHtXT1JLRElSfS94bWxjb25mICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtQ1ZFLTIwMTUtMTgxOS1FbmZvcmNlLXRoZS1yZWFkZXItdG8tcnVuLWluLWNvbnN0YW50LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ1OGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoCkBAIC0wLDAgKzEsMTgxIEBACitGcm9tIDIxM2YxZmUwZDc2ZDMwZWFlZDZlNTg1MzA1N2RlZmM0M2U2ZGYyYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDE3OjQxOjQ4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIENWRS0yMDE1LTE4MTkgRW5mb3JjZSB0aGUgcmVhZGVyIHRvIHJ1biBpbiBjb25zdGFudCBtZW1vcnkKKworT25lIG9mIHRoZSBvcGVyYXRpb24gb24gdGhlIHJlYWRlciBjb3VsZCByZXNvbHZlIGVudGl0aWVzCitsZWFkaW5nIHRvIHRoZSBjbGFzc2ljIGV4cGFuc2lvbiBpc3N1ZS4gTWFrZSBzdXJlIHRoZQorYnVmZmVyIHVzZWQgZm9yIHhtbHJlYWRlciBvcGVyYXRpb24gaXMgYm91bmRlZC4KK0ludHJvZHVjZSBhIG5ldyBhbGxvY2F0aW9uIHR5cGUgZm9yIHRoZSBidWZmZXJzIGZvciB0aGlzIGVmZmVjdC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1Zi5jICAgICAgICAgICAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGluY2x1ZGUvbGlieG1sL3RyZWUuaCB8ICAgIDMgKystCisgeG1scmVhZGVyLmMgICAgICAgICAgIHwgICAyMCArKysrKysrKysrKysrKysrKysrLQorIDMgZmlsZXMgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1Zi5jIGIvYnVmLmMKK2luZGV4IDZlZmM3YjYuLjA3OTIyZmYgMTAwNjQ0CistLS0gYS9idWYuYworKysrIGIvYnVmLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisgI2luY2x1ZGUgPGxpYnhtbC9nbG9iYWxzLmg+CisgI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisrI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4gLyogZm9yIFhNTF9NQVhfVEVYVF9MRU5HVEggKi8KKyAjaW5jbHVkZSAiYnVmLmgiCisgCisgI2RlZmluZSBXSVRIX0JVRkZFUl9DT01QQVQKK0BAIC0yOTksNyArMzAwLDggQEAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZSh4bWxCdWZQdHIgYnVmLAorICAgICBpZiAoKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0VYQUNUKSB8fAorICAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCkgfHwKKy0gICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpKSB7CisrICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSB8fAorKwkoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkpIHsKKyAJYnVmLT5hbGxvYyA9IHNjaGVtZTsKKyAgICAgICAgIGlmIChidWYtPmJ1ZmZlcikKKyAgICAgICAgICAgICBidWYtPmJ1ZmZlci0+YWxsb2MgPSBzY2hlbWU7CitAQCAtNDU4LDYgKzQ2MCwxOCBAQCB4bWxCdWZHcm93SW50ZXJuYWwoeG1sQnVmUHRyIGJ1Ziwgc2l6ZV90IGxlbikgeworICAgICBzaXplID0gYnVmLT51c2UgKyBsZW4gKyAxMDA7CisgI2VuZGlmCisgCisrICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKyAgICAgICAgLyoKKysJICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAqLworKyAgICAgICAgaWYgKChidWYtPnVzZSArIGxlbiA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB8fAorKwkgICAgKGJ1Zi0+c2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSkgeworKwkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJICAgIHJldHVybigwKTsKKysJfQorKwlpZiAoc2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKQorKwkgICAgc2l6ZSA9IFhNTF9NQVhfVEVYVF9MRU5HVEg7CisrICAgIH0KKyAgICAgaWYgKChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU8pICYmIChidWYtPmNvbnRlbnRJTyAhPSBOVUxMKSkgeworICAgICAgICAgc2l6ZV90IHN0YXJ0X2J1ZiA9IGJ1Zi0+Y29udGVudCAtIGJ1Zi0+Y29udGVudElPOworIAorQEAgLTczOSw2ICs3NTMsMTUgQEAgeG1sQnVmUmVzaXplKHhtbEJ1ZlB0ciBidWYsIHNpemVfdCBzaXplKQorICAgICBDSEVDS19DT01QQVQoYnVmKQorIAorICAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkgcmV0dXJuKDApOworKyAgICBpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysgICAgICAgIC8qCisrCSAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgKi8KKysgICAgICAgIGlmIChzaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHsKKysJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCSAgICByZXR1cm4oMCk7CisrCX0KKysgICAgfQorIAorICAgICAvKiBEb24ndCByZXNpemUgaWYgd2UgZG9uJ3QgaGF2ZSB0byAqLworICAgICBpZiAoc2l6ZSA8IGJ1Zi0+c2l6ZSkKK0BAIC04NjcsNiArODkwLDE1IEBAIHhtbEJ1ZkFkZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAKKyAgICAgbmVlZFNpemUgPSBidWYtPnVzZSArIGxlbiArIDI7CisgICAgIGlmIChuZWVkU2l6ZSA+IGJ1Zi0+c2l6ZSl7CisrCWlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKwkgICAgLyoKKysJICAgICAqIFVzZWQgdG8gcHJvdmlkZSBwYXJzaW5nIGxpbWl0cworKwkgICAgICovCisrCSAgICBpZiAobmVlZFNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgeworKwkJeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJCXJldHVybigtMSk7CisrCSAgICB9CisrCX0KKyAgICAgICAgIGlmICgheG1sQnVmUmVzaXplKGJ1ZiwgbmVlZFNpemUpKXsKKyAJICAgIHhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImdyb3dpbmcgYnVmZmVyIik7CisgICAgICAgICAgICAgcmV0dXJuIFhNTF9FUlJfTk9fTUVNT1JZOworQEAgLTkzOCw2ICs5NzAsMTUgQEAgeG1sQnVmQWRkSGVhZCh4bWxCdWZQdHIgYnVmLCBjb25zdCB4bWxDaGFyICpzdHIsIGludCBsZW4pIHsKKyAgICAgfQorICAgICBuZWVkU2l6ZSA9IGJ1Zi0+dXNlICsgbGVuICsgMjsKKyAgICAgaWYgKG5lZWRTaXplID4gYnVmLT5zaXplKXsKKysJaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrCSAgICAvKgorKwkgICAgICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAgICAgKi8KKysJICAgIGlmIChuZWVkU2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB7CisrCQl4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkJcmV0dXJuKC0xKTsKKysJICAgIH0KKysJfQorICAgICAgICAgaWYgKCF4bWxCdWZSZXNpemUoYnVmLCBuZWVkU2l6ZSkpeworIAkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiZ3Jvd2luZyBidWZmZXIiKTsKKyAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUl9OT19NRU1PUlk7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oIGIvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCitpbmRleCAyZjkwNzE3Li40YTliM2JjIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJ4bWwvdHJlZS5oCisrKysgYi9pbmNsdWRlL2xpYnhtbC90cmVlLmgKK0BAIC03Niw3ICs3Niw4IEBAIHR5cGVkZWYgZW51bSB7CisgICAgIFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QsCS8qIGdyb3cgb25seSB0byB0aGUgbWluaW1hbCBzaXplICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFLCAvKiBpbW11dGFibGUgYnVmZmVyICovCisgICAgIFhNTF9CVUZGRVJfQUxMT0NfSU8sCS8qIHNwZWNpYWwgYWxsb2NhdGlvbiBzY2hlbWUgdXNlZCBmb3IgSS9PICovCistICAgIFhNTF9CVUZGRVJfQUxMT0NfSFlCUklECS8qIGV4YWN0IHVwIHRvIGEgdGhyZXNob2xkLCBhbmQgZG91YmxlaXQgdGhlcmVhZnRlciAqLworKyAgICBYTUxfQlVGRkVSX0FMTE9DX0hZQlJJRCwJLyogZXhhY3QgdXAgdG8gYSB0aHJlc2hvbGQsIGFuZCBkb3VibGVpdCB0aGVyZWFmdGVyICovCisrICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRAkvKiBsaW1pdCB0aGUgdXBwZXIgc2l6ZSBvZiB0aGUgYnVmZmVyICovCisgfSB4bWxCdWZmZXJBbGxvY2F0aW9uU2NoZW1lOworIAorIC8qKgorZGlmZiAtLWdpdCBhL3htbHJlYWRlci5jIGIveG1scmVhZGVyLmMKK2luZGV4IGYxOWUxMjMuLjQ3MWU3ZTIgMTAwNjQ0CistLS0gYS94bWxyZWFkZXIuYworKysrIGIveG1scmVhZGVyLmMKK0BAIC0yMDkxLDYgKzIwOTEsOSBAQCB4bWxOZXdUZXh0UmVhZGVyKHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGlucHV0LCBjb25zdCBjaGFyICpVUkkpIHsKKyAJCSJ4bWxOZXdUZXh0UmVhZGVyIDogbWFsbG9jIGZhaWxlZFxuIik7CisgCXJldHVybihOVUxMKTsKKyAgICAgfQorKyAgICAvKiBubyBvcGVyYXRpb24gb24gYSByZWFkZXIgc2hvdWxkIHJlcXVpcmUgYSBodWdlIGJ1ZmZlciAqLworKyAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJldC0+YnVmZmVyLAorKwkJCSAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisgICAgIHJldC0+c2F4ID0gKHhtbFNBWEhhbmRsZXIgKikgeG1sTWFsbG9jKHNpemVvZih4bWxTQVhIYW5kbGVyKSk7CisgICAgIGlmIChyZXQtPnNheCA9PSBOVUxMKSB7CisgCXhtbEJ1ZkZyZWUocmV0LT5idWZmZXIpOworQEAgLTM2MTYsNiArMzYxOSw3IEBAIHhtbFRleHRSZWFkZXJDb25zdFZhbHVlKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKSB7CisgCSAgICByZXR1cm4oKCh4bWxOc1B0cikgbm9kZSktPmhyZWYpOworICAgICAgICAgY2FzZSBYTUxfQVRUUklCVVRFX05PREU6eworIAkgICAgeG1sQXR0clB0ciBhdHRyID0gKHhtbEF0dHJQdHIpIG5vZGU7CisrCSAgICBjb25zdCB4bWxDaGFyICpyZXQ7CisgCisgCSAgICBpZiAoKGF0dHItPmNoaWxkcmVuICE9IE5VTEwpICYmCisgCSAgICAgICAgKGF0dHItPmNoaWxkcmVuLT50eXBlID09IFhNTF9URVhUX05PREUpICYmCitAQCAtMzYyOSwxMCArMzYzMywyMSBAQCB4bWxUZXh0UmVhZGVyQ29uc3RWYWx1ZSh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sVGV4dFJlYWRlclNldHVwIDogbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKyAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICB4bWxCdWZFbXB0eShyZWFkZXItPmJ1ZmZlcik7CisgCSAgICAgICAgeG1sQnVmR2V0Tm9kZUNvbnRlbnQocmVhZGVyLT5idWZmZXIsIG5vZGUpOworLQkJcmV0dXJuKHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpKTsKKysJCXJldCA9IHhtbEJ1ZkNvbnRlbnQocmVhZGVyLT5idWZmZXIpOworKwkJaWYgKHJldCA9PSBOVUxMKSB7CisrCQkgICAgLyogZXJyb3Igb24gdGhlIGJ1ZmZlciBiZXN0IHRvIHJlYWxsb2NhdGUgKi8KKysJCSAgICB4bWxCdWZGcmVlKHJlYWRlci0+YnVmZmVyKTsKKysJCSAgICByZWFkZXItPmJ1ZmZlciA9IHhtbEJ1ZkNyZWF0ZVNpemUoMTAwKTsKKysJCSAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKysJCSAgICByZXQgPSBCQURfQ0FTVCAiIjsKKysJCX0KKysJCXJldHVybihyZXQpOworIAkgICAgfQorIAkgICAgYnJlYWs7CisgCX0KK0BAIC01MTMxLDYgKzUxNDYsOSBAQCB4bWxUZXh0UmVhZGVyU2V0dXAoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInhtbFRleHRSZWFkZXJTZXR1cCA6IG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgIH0KKysgICAgLyogbm8gb3BlcmF0aW9uIG9uIGEgcmVhZGVyIHNob3VsZCByZXF1aXJlIGEgaHVnZSBidWZmZXIgKi8KKysgICAgeG1sQnVmU2V0QWxsb2NhdGlvblNjaGVtZShyZWFkZXItPmJ1ZmZlciwKKysJCQkgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworICAgICBpZiAocmVhZGVyLT5zYXggPT0gTlVMTCkKKyAJcmVhZGVyLT5zYXggPSAoeG1sU0FYSGFuZGxlciAqKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKyAgICAgaWYgKHJlYWRlci0+c2F4ID09IE5VTEwpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1M2E4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY3NTBjYzU2NGExN2M4MTI1NTVjY2E1ODc2NjAyNDBjY2ZmYWFlZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA0IEFwciAyMDE1IDA4OjUwOjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRocmVhZHM6IERlZmluZSBwdGhyZWFkKiBkZWZpbml0aW9ucyBmb3IgZ2xpYmMgY29tcGxpYW50IGxpYnMKKworVGhpcyBjb2RlIGlzIGFzc3VtaW5nIGdsaWJjIGJ1dCBub3QgZXhwbGljaXRseSBzYXlpbmcgaXQKK3NvIGxldHMgbWFrZSBpdCBzby4gRml4ZXMgZm9sbG93aW5nIG9uIG11c2wKKwordGhyZWFkcy5jOjgwOjI3OiBlcnJvcjogbWFjcm8gInB0aHJlYWRfZXF1YWwiIHJlcXVpcmVzIDIgYXJndW1lbnRzLCBidXQKK29ubHkgMSBnaXZlbgorfCAgZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsICgpCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdGhyZWFkcy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOS4yLm9yaWcvdGhyZWFkcy5jCisrKysgbGlieG1sMi0yLjkuMi90aHJlYWRzLmMKK0BAIC00Nyw3ICs0Nyw3IEBACisgI2lmZGVmIEhBVkVfUFRIUkVBRF9ICisgCisgc3RhdGljIGludCBsaWJ4bWxfaXNfdGhyZWFkZWQgPSAtMTsKKy0jaWZkZWYgX19HTlVDX18KKysjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pCisgI2lmZGVmIGxpbnV4CisgI2lmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IChfX0dOVUNfXyA+IDMpCisgZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTgxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK0RhdGU6IFRodSwgMjMgT2N0IDIwMTQgMTE6MzU6MzYgKzA4MDAKK1N1YmplY3Q6IEZpeCBtaXNzaW5nIGVudGl0aWVzIGFmdGVyIENWRS0yMDE0LTM2NjAgZml4CisKK0ZvciBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4ODA1CisKK1RoZSBmaXggZm9yIENWRS0yMDE0LTM2NjAgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gaW4gc29tZSBjYXNlCit3aGVyZSBlbnRpdHkgc3Vic3RpdHV0aW9uIGlzIHJlcXVpcmVkIGFuZCB0aGUgZW50aXR5IGlzIHVzZWQKK2ZpcnN0IGluIGFub3R0aGVyIGVudGl0eSByZWZlcmVuY2VkIGZyb20gYW4gYXR0cmlidXRlIHZhbHVlCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL3BhcnNlci5jIGIvcGFyc2VyLmMKK2luZGV4IDY3YzlkZmQuLmE4ZDFiNjcgMTAwNjQ0CistLS0gYS9wYXJzZXIuYworKysrIGIvcGFyc2VyLmMKK0BAIC03MjM1LDcgKzcyMzUsOCBAQCB4bWxQYXJzZVJlZmVyZW5jZSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQpIHsKKyAgICAgICogZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbCBvbmx5IHByb2Nlc3MgZGF0YSBjb21pbmcgZnJvbQorICAgICAgKiB0aGUgZG9jdW1lbnQgZW50aXR5IGJ5IGRlZmF1bHQuCisgICAgICAqLworLSAgICBpZiAoKGVudC0+Y2hlY2tlZCA9PSAwKSAmJgorKyAgICBpZiAoKChlbnQtPmNoZWNrZWQgPT0gMCkgfHwKKysgICAgICAgICAoKGVudC0+Y2hpbGRyZW4gPT0gTlVMTCkgJiYgKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpKSkgJiYKKyAgICAgICAgICgoZW50LT5ldHlwZSAhPSBYTUxfRVhURVJOQUxfR0VORVJBTF9QQVJTRURfRU5USVRZKSB8fAorICAgICAgICAgIChjdHh0LT5vcHRpb25zICYgKFhNTF9QQVJTRV9OT0VOVCB8IFhNTF9QQVJTRV9EVERWQUxJRCkpKSkgeworIAl1bnNpZ25lZCBsb25nIG9sZG5iZW50ID0gY3R4dC0+bmJlbnRpdGllczsKKy0tIAorY2dpdCB2MC4xMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvYW5zaWRlY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1MmQ3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2Fuc2lkZWNsLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1NhZGx5IGNtYWtlIGlzIGJyb2tlbi4gSWYgaXQgc2VlcyB0aGlzIHJlZmVyZW5jZSBhbmQgYW5zaWRlY2wgaXMgcHJlc2VudCwgaXQgd2lsbCBhZGQgYSAKK2RlcGVuZGVuY3kgdXBvbiBpdCwgZXZlbiBpZiBIQVZFX0FOU0lERUNfSCBpcyBuZXZlciBzZXQuCisKK1RoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGVzZSBsaW5lcywgb3RoZXJ3aXNlIHJlY2lwZXMgbGlrZSBsaWJ6eXBwIGNhbiBoYXZlIGEgCitkZXBlbmRlbmN5IG9uIHRoZSBhbnNpZGVjbC5oIGhlYWRlciB2aWEgY21ha2UuIFRoaXMgY2FuIGxlYWQgdG8gb2RkIHJlc3VsdHMgaWYgdGhlIAoraGVhZGVyIGlzIHJlbW92ZWQgKGNsZWFuIGJpbnV0aWxzKSBhbmQgdGhlbiB0aGUgY29kZSBpcyByZWNvbXBpbGVkLgorCitSUCAyMDEyLzcvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtpdHMgcmVhbGx5IGEgY21ha2UgYnVnXQorCitJbmRleDogbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ4bWwyLTIuOC4wLm9yaWcvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oLmluCTIwMTItMDctMTAgMTE6NTE6NTIuNDYwNzUwNTczICswMDAwCisrKysgbGlieG1sMi0yLjguMC9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4JMjAxMi0wNy0xMCAxMTo1Mjo0MS40MzY3NDkzOTcgKzAwMDAKK0BAIC00MDEsOSArNDAxLDYgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19HTlVDX18KKy0jaWZkZWYgSEFWRV9BTlNJREVDTF9ICistI2luY2x1ZGUgPGFuc2lkZWNsLmg+CistI2VuZGlmCisgCisgLyoqCisgICogQVRUUklCVVRFX1VOVVNFRDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODA3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9jb25maWd1cmUuYWMtZml4LWNyb3NzLWNvbXBpbGluZy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK2NvbmZpZ3VyZS5hYzogZml4IGNyb3NzIGNvbXBpbGluZyB3YXJuaW5nCisKK1RoZXJlIGlzIGEgd2FybmluZyB3aGlsZSBjcm9zcyBjb21waWxpbmcgd2hpY2ggdHJpZ2dlcmVkIGEKK2ZhaWx1cmUgYnkgZG9fcWFfY29uZmlndXJlCisuLi4KK3xjb25maWd1cmU6MTI2NTI6IGNoZWNraW5nIGZvciBnenJlYWQgaW4gLWx6Cit8Y29uZmlndXJlOjEyNjc3OiBtaXBzLXBva3ktbGludXgtZ2NjICAtbWViIC1tYWJpPTMyIC1taGFyZC1mbG9hdAorIC1ML2xpYiBjb25mdGVzdC5jIC1seiAgID4mNQorfGxkOiB3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoICIvbGliIiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisuLi4KKworV2hpbGUgZG8gdGhlIGxpYiBjaGVja2luZywgZG8gbm90IGFkZCAnLUwke1pfRElSfS9saWInIHRvIExERkxBR1MgY291bGQgZml4IGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgNSArLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWE5MDYwMC4uMGJhYzhhNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkxLDggKzM5MSw2IEBAIGlmIHRlc3QgIiR3aXRoX3psaWIiID0gIm5vIjsgdGhlbgorICAgICBlY2hvICJEaXNhYmxpbmcgY29tcHJlc3Npb24gc3VwcG9ydCIKKyBlbHNlCisgICAgIEFDX0NIRUNLX0hFQURFUlMoemxpYi5oLAorLSAgICAgICAgW1NBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKy0JIExERkxBR1M9Ii1MJHtaX0RJUn0vbGliIgorIAlBQ19DSEVDS19MSUIoeiwgZ3pyZWFkLFsKKyAJICAgIEFDX0RFRklORShbSEFWRV9MSUJaXSwgWzFdLCBbSGF2ZSBjb21wcmVzc2lvbiBsaWJyYXJ5XSkKKyAJICAgIFdJVEhfWkxJQj0xCitAQCAtNDA2LDggKzQwNCw3IEBAIGVsc2UKKyAJCWVzYWNdCisgCSAgICBlbHNlCisgCQlaX0xJQlM9Ii1seiIKKy0JICAgIGZpXSkKKy0JIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSJdKQorKwkgICAgZmldKSkKKyBmaQorIAorIEFDX1NVQlNUKFpfQ0ZMQUdTKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtNjRiaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0NzAxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGRlYmlhbjogYnVncy5kZWJpYW4ub3JnLzQzOTg0M10KKworLS0tCisgbGlieG1sLmggfCAgICAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLS0tIGxpYnhtbDItMi42LjI5Lm9yaWcvbGlieG1sLmgKKysrKyBsaWJ4bWwyLTIuNi4yOS9saWJ4bWwuaAorQEAgLTExLDEwICsxMSwxMyBAQAorIAorICNpZm5kZWYgTk9fTEFSR0VGSUxFX1NPVVJDRQorICNpZm5kZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyAjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFCisgI2VuZGlmCisrI2lmbmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2VuZGlmCisgI2lmbmRlZiBfRklMRV9PRkZTRVRfQklUUworICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyAjZW5kaWYKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjODQwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC1tNC11c2UtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjA0IEBACitBTV9QQVRIX1hNTDIgdXNlcyB4bWwtY29uZmlnIHdoaWNoIHdlIGRpc2FibGUgdGhyb3VnaAorYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MsIHNvIHBvcnQgaXQgdG8gdXNlIHBrZy1jb25maWcgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbGlieG1sLm00IGIvbGlieG1sLm00CitpbmRleCA2OGNkODI0Li41ZmEwYTliIDEwMDY0NAorLS0tIGEvbGlieG1sLm00CisrKysgYi9saWJ4bWwubTQKK0BAIC0xLDE4OCArMSwxMiBAQAorLSMgQ29uZmlndXJlIHBhdGhzIGZvciBMSUJYTUwyCistIyBNaWtlIEhvbW1leSAyMDA0LTA2LTE5CistIyB1c2UgQ1BQRkxBR1MgaW5zdGVhZCBvZiBDRkxBR1MKKy0jIFRvc2hpbyBLdXJhdG9taSAyMDAxLTA0LTIxCistIyBBZGFwdGVkIGZyb206CistIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKy0jIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCistCisgZG5sIEFNX1BBVEhfWE1MMihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCisgZG5sIFRlc3QgZm9yIFhNTCwgYW5kIGRlZmluZSBYTUxfQ1BQRkxBR1MgYW5kIFhNTF9MSUJTCisgZG5sCistQUNfREVGVU4oW0FNX1BBVEhfWE1MMl0sWyAKKy1BQ19BUkdfV0lUSCh4bWwtcHJlZml4LAorLSAgICAgICAgICAgIFsgIC0td2l0aC14bWwtcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHhtbF9jb25maWdfcHJlZml4PSIiKQorLUFDX0FSR19XSVRIKHhtbC1leGVjLXByZWZpeCwKKy0gICAgICAgICAgICBbICAtLXdpdGgteG1sLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBsaWJ4bWwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHhtbF9jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgeG1sX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHhtbHRlc3QsCistICAgICAgICAgICAgICBbICAtLWRpc2FibGUteG1sdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgTElCWE1MIHByb2dyYW1dLCwKKy0gICAgICAgICAgICAgIGVuYWJsZV94bWx0ZXN0PXllcykKKy0KKy0gIGlmIHRlc3QgeCR4bWxfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgICB4bWxfY29uZmlnX2FyZ3M9IiR4bWxfY29uZmlnX2FyZ3MiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi94bWwyLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCistICBpZiB0ZXN0IHgkeG1sX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIHhtbF9jb25maWdfYXJncz0iJHhtbF9jb25maWdfYXJncyAtLXByZWZpeD0keG1sX2NvbmZpZ19wcmVmaXgiCistICAgICBpZiB0ZXN0IHgke1hNTDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICAgIFhNTDJfQ09ORklHPSR4bWxfY29uZmlnX3ByZWZpeC9iaW4veG1sMi1jb25maWcKKy0gICAgIGZpCistICBmaQorLQorLSAgQUNfUEFUSF9QUk9HKFhNTDJfQ09ORklHLCB4bWwyLWNvbmZpZywgbm8pCistICBtaW5feG1sX3ZlcnNpb249aWZlbHNlKFskMV0sICwyLjAuMCxbJDFdKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJ4bWwgLSB2ZXJzaW9uID49ICRtaW5feG1sX3ZlcnNpb24pCistICBub194bWw9IiIKKy0gIGlmIHRlc3QgIiRYTUwyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICBub194bWw9eWVzCistICBlbHNlCistICAgIFhNTF9DUFBGTEFHUz1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIFhNTF9MSUJTPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLWxpYnNgCistICAgIHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHhtbF9jb25maWdfbWlub3JfdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHhtbF9jb25maWdfbWljcm9fdmVyc2lvbj1gJFhNTDJfQ09ORklHICR4bWxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGlmIHRlc3QgIngkZW5hYmxlX3htbHRlc3QiID0gInh5ZXMiIDsgdGhlbgorLSAgICAgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorLSAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICBMSUJTPSIkWE1MX0xJQlMgJExJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIGxpYnhtbCBpcyBzdWZmaWNpZW50bHkgbmV3LgorLWRubCAoQWxzbyBzYW5pdHkgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHhtbDItY29uZmlnIHRvIHNvbWUgZXh0ZW50KQorLWRubAorLSAgICAgIHJtIC1mIGNvbmYueG1sdGVzdAorLSAgICAgIEFDX1RSWV9SVU4oWworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistCistaW50IAorLW1haW4oKQorLXsKKy0gIGludCB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uOworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIHN5c3RlbSgidG91Y2ggY29uZi54bWx0ZXN0Iik7CistCistICAvKiBDYXB0dXJlIHhtbDItY29uZmlnIG91dHB1dCB2aWEgYXV0b2NvbmYvY29uZmlndXJlIHZhcmlhYmxlcyAqLworLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IChjaGFyICopc3RyZHVwKCIkbWluX3htbF92ZXJzaW9uIik7CistICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CistICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmcgZnJvbSB4bWwyLWNvbmZpZ1xuIiwgIiRtaW5feG1sX3ZlcnNpb24iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLSAgIGZyZWUodG1wX3ZlcnNpb24pOworLQorLSAgIC8qIENhcHR1cmUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhZGVyIGZpbGVzICovCistICAgdG1wX3ZlcnNpb24gPSAoY2hhciAqKXN0cmR1cChMSUJYTUxfRE9UVEVEX1ZFUlNJT04pOworLSAgIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZ4bWxfbWFqb3JfdmVyc2lvbiwgJnhtbF9taW5vcl92ZXJzaW9uLCAmeG1sX21pY3JvX3ZlcnNpb24pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZyBmcm9tIGxpYnhtbCBpbmNsdWRlc1xuIiwgIkxJQlhNTF9ET1RURURfVkVSU0lPTiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistICAgZnJlZSh0bXBfdmVyc2lvbik7CistCistIC8qIENvbXBhcmUgeG1sMi1jb25maWcgb3V0cHV0IHRvIHRoZSBsaWJ4bWwgaGVhZGVycyAqLworLSAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWlub3JfdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAorLSAgICAgICh4bWxfbWljcm9fdmVyc2lvbiAhPSAkeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKy0gICAgeworLSAgICAgIHByaW50ZigiKioqIGxpYnhtbCBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKKy0gICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICBwcmludGYoIioqKiB4bWwyLWNvbmZpZyAodmVyc2lvbiAlZC4lZC4lZClcbiIsCistICAgICAgICAgJHhtbF9jb25maWdfbWFqb3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbiwgJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbik7CistICAgICAgcmV0dXJuIDE7CistICAgIH0gCistLyogQ29tcGFyZSB0aGUgaGVhZGVycyB0byB0aGUgbGlicmFyeSB0byBtYWtlIHN1cmUgd2UgbWF0Y2ggKi8KKy0gIC8qIExlc3MgdGhhbiBpZGVhbCAtLSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCByZXR1cm4gdmFsdWUgZmVlZGJhY2ssIAorLSAgICogb25seSBleGl0cyBpZiB0aGVyZSdzIGEgc2VyaW91cyBtaXNtYXRjaCBiZXR3ZWVuIGhlYWRlciBhbmQgbGlicmFyeS4KKy0gICAqLworLSAgICBMSUJYTUxfVEVTVF9WRVJTSU9OOworLQorLSAgICAvKiBUZXN0IHRoYXQgdGhlIGxpYnJhcnkgaXMgZ3JlYXRlciB0aGFuIG91ciBtaW5pbXVtIHZlcnNpb24gKi8KKy0gICAgaWYgKCh4bWxfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorLSAgICAgICAgKCh4bWxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKHhtbF9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJgorLSAgICAgICAgKHhtbF9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCistICAgICAgeworLSAgICAgICAgcmV0dXJuIDA7CistICAgICAgIH0KKy0gICAgIGVsc2UKKy0gICAgICB7CistICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIGxpYnhtbCAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCistICAgICAgICAgICAgICAgeG1sX21ham9yX3ZlcnNpb24sIHhtbF9taW5vcl92ZXJzaW9uLCB4bWxfbWljcm9fdmVyc2lvbik7CistICAgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgbGlieG1sIG5ld2VyIHRoYW4gJWQuJWQuJWQuIFRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuIiwKKy0gICAgICAgICAgIG1ham9yLCBtaW5vciwgbWljcm8pOworLSAgICAgICAgcHJpbnRmKCIqKiogbGlieG1sIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAueG1sc29mdC5vcmcuXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIElmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGEgc3VmZmljaWVudGx5IG5ldyB2ZXJzaW9uLCB0aGlzIGVycm9yXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIHhtbDItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7CistICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogb2YgTElCWE1MLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgWE1MMl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiB4bWwyLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CistICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworLSAgICB9CistICByZXR1cm4gMTsKKy19CistXSwsIG5vX3htbD15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQorLSAgICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCistICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICBmaQorLSAgZmkKKytBQ19ERUZVTihbQU1fUEFUSF9YTUwyXSxbCisrICBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAKKy0gIGlmIHRlc3QgIngkbm9feG1sIiA9IHggOyB0aGVuCistICAgICBBQ19NU0dfUkVTVUxUKHllcyAodmVyc2lvbiAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uLiR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24uJHhtbF9jb25maWdfbWljcm9fdmVyc2lvbikpCistICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCistICBlbHNlCistICAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgaWYgdGVzdCAiJFhNTDJfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgeG1sMi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBMSUJYTUwgY291bGQgbm90IGJlIGZvdW5kIgorLSAgICAgICBlY2hvICIqKiogSWYgbGlieG1sIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKy0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCistICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8geG1sMi1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYueG1sdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsaWJ4bWwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhNTF9DUFBGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFhNTF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPGxpYnhtbC94bWx2ZXJzaW9uLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistXSwgICAgICBbIExJQlhNTF9URVNUX1ZFUlNJT047IHJldHVybiAwO10sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKy0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBMSUJYTUwgb3IgZmluZGluZyB0aGUgd3JvbmciCistICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIExJQlhNTC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgTElCWE1MLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKy0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCistICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCistICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKy0gICAgICAgICAgZWNobyAiKioqIgorLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCistICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIExJQlhNTCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBMSUJYTUwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSB4bWwyLWNvbmZpZyBzY3JpcHQ6ICRYTUwyX0NPTkZJRyIgXSkKKy0gICAgICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgICBmaQorLSAgICAgZmkKKysgIHZlcmRlcD1pZmVsc2UoWyQxXSwgW10sIFtdLCBbPj0gJDFdKQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MLCBbbGlieG1sLTIuMCAkdmVyZGVwXSwgWyQyXSwgWyQzXSkKKyAKKy0gICAgIFhNTF9DUFBGTEFHUz0iIgorLSAgICAgWE1MX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgWE1MX0NQUEZMQUdTPSRYTUxfQ0ZMQUdTCisgICBBQ19TVUJTVChYTUxfQ1BQRkxBR1MpCistICBBQ19TVUJTVChYTUxfTElCUykKKy0gIHJtIC1mIGNvbmYueG1sdGVzdAorIF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA1YWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sMi1DVkUtMjAxNC0wMTkxLWZpeC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tOiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitEYXRlOiBUdWUsIDIyIEFwciAyMDE0IDE1OjMwOjU2ICswODAwCitTdWJqZWN0OiBEbyBub3QgZmV0Y2ggZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzCisKK1VubGVzcyBleHBsaWNpdGVseSBhc2tlZCBmb3Igd2hlbiB2YWxpZGF0aW5nIG9yIHJlcGxhY2luZyBlbnRpdGllcword2l0aCB0aGVpciB2YWx1ZS4gUHJvYmxlbSBwb2ludGVkIG91dCBieSBEYW5pZWwgQmVycmFuZ2UgPGJlcnJhbmdlQHJlZGhhdC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1JlZmVyZW5jZTogaHR0cHM6Ly9hY2Nlc3MucmVkaGF0LmNvbS9zZWN1cml0eS9jdmUvQ1ZFLTIwMTQtMDE5MQorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmVpbGxhcmQgPHZlaWxsYXJkQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXhpbiBCLiBKb2huIDxtYXhpbi5qb2huQGVuZWEuY29tPgorLS0tCitkaWZmIC1OYXVyIGxpYnhtbDItMi45LjEtb3JpZy9wYXJzZXIuYyBsaWJ4bWwyLTIuOS4xL3BhcnNlci5jCistLS0gbGlieG1sMi0yLjkuMS1vcmlnL3BhcnNlci5jCTIwMTMtMDQtMTYgMTU6Mzk6MTguMDAwMDAwMDAwICswMjAwCisrKysgbGlieG1sMi0yLjkuMS9wYXJzZXIuYwkyMDE0LTA1LTA3IDEzOjM1OjQ2Ljg4MzY4Nzk0NiArMDIwMAorQEAgLTI1OTUsNiArMjU5NSwyMCBAQAorIAkJICAgIHhtbENoYXJFbmNvZGluZyBlbmM7CisgCisgCQkgICAgLyoKKysJCSAgICAgKiBOb3RlOiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgd2lsbCBub3QgYmUgbG9hZGVkLCBpdCBpcworKwkJICAgICAqIG5vdCByZXF1aXJlZCBmb3IgYSBub24tdmFsaWRhdGluZyBwYXJzZXIsIHVubGVzcyB0aGUKKysJCSAgICAgKiBvcHRpb24gb2YgdmFsaWRhdGluZywgb3Igc3Vic3RpdHV0aW5nIGVudGl0aWVzIHdlcmUKKysJCSAgICAgKiBnaXZlbi4gRG9pbmcgc28gaXMgZmFyIG1vcmUgc2VjdXJlIGFzIHRoZSBwYXJzZXIgd2lsbAorKwkJICAgICAqIG9ubHkgcHJvY2VzcyBkYXRhIGNvbWluZyBmcm9tIHRoZSBkb2N1bWVudCBlbnRpdHkgYnkKKysJCSAgICAgKiBkZWZhdWx0LgorKwkJICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKChlbnRpdHktPmV0eXBlID09IFhNTF9FWFRFUk5BTF9QQVJBTUVURVJfRU5USVRZKSAmJgorKwkJICAgICAgICAoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfTk9FTlQpID09IDApICYmCisrCQkJKChjdHh0LT5vcHRpb25zICYgWE1MX1BBUlNFX0RURFZBTElEKSA9PSAwKSAmJgorKwkJCShjdHh0LT52YWxpZGF0ZSA9PSAwKSkKKysJCQlyZXR1cm47CisrCisrCQkgICAgLyoKKyAJCSAgICAgKiBoYW5kbGUgdGhlIGV4dHJhIHNwYWNlcyBhZGRlZCBiZWZvcmUgYW5kIGFmdGVyCisgCQkgICAgICogYy5mLiBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI2FzLVBFCisgCQkgICAgICogdGhpcyBpcyBkb25lIGluZGVwZW5kZW50bHkuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2M4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9weXRob24tc2l0ZXBhY2thZ2VzLWRpci5wYXRjaApAQCAtMCwwICsxLDMwIEBACitBbGxvdyB1cyB0byBwYXNzIGluIFBZVEhPTl9TSVRFX1BBQ0tBR0VTCisKK1RoZSBweXRob24gYmluYXJ5IHVzZWQgd2hlbiBidWlsZGluZyBmb3IgbmF0aXZlc2RrIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUKK2NvcnJlY3QgcGF0aCBoZXJlIHNvIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGl0IG91cnNlbHZlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlIHRvIDIuOS4yCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04MTMsNyArODEzLDggQEAgZG5sCisgCisgUFlUSE9OX1ZFUlNJT049CisgUFlUSE9OX0lOQ0xVREVTPQorLVBZVEhPTl9TSVRFX1BBQ0tBR0VTPQorKyMgQWxsb3cgdGhpcyB0byBiZSBzZXQgZXh0ZXJuYWxseQorKyNQWVRIT05fU0lURV9QQUNLQUdFUz0KKyBQWVRIT05fVEVTVFM9CisgcHl0aG9uZGlyPQorIGlmIHRlc3QgIiR3aXRoX3B5dGhvbiIgIT0gIm5vIiA7IHRoZW4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2QwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtayBydW50ZXN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVudGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bnRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3YWIyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bnRlc3QucGF0Y2gKQEAgLTAsMCArMSw4MjAgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KK1ByaW50IGEgc3RhbmRhcmQgcmVzdWx0IGxpbmUgZm9yIGVhY2ggdGVzdC4KKworU2lnbmVkLW9mZi1ieTogTWloYWVsYSBTZW5kcmVhIDxtaWhhZWxhLnNlbmRyZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdU5yIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAxNDo1MTo0Mi42MzMzODY0NzcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDQtMTkgMTQ6NDc6NTEuNTQ0NzIwNTY4ICswMjAwCitAQCAtMjAyLDEwICsyMDIsMTkgQEAKKyAjdGVzdE9PTV9ERVBFTkRFTkNJRVMgPSAkKERFUFMpCisgI3Rlc3RPT01fTERBREQ9ICQoTERBRERTKQorIAorK2luc3RhbGwtcHRlc3Q6CisrCUAoaWYgWyAtZCAubGlicyBdIDsgdGhlbiBjZCAubGliczsgZmk7IFwKKysJaW5zdGFsbCAkKG5vaW5zdF9QUk9HUkFNUykgJChERVNURElSKSkKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3QgJChERVNURElSKQorKwljcCAtciAkKHNyY2RpcikvcmVzdWx0ICQoREVTVERJUikKKysJY3AgLXIgJChzcmNkaXIpL3B5dGhvbiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysKKyBydW50ZXN0czoKKyAJWyAtZCB0ZXN0ICAgXSB8fCAkKExOX1MpICQoc3JjZGlyKS90ZXN0ICAgLgorIAlbIC1kIHJlc3VsdCBdIHx8ICQoTE5fUykgJChzcmNkaXIpL3Jlc3VsdCAuCistCSQoQ0hFQ0tFUikgLi9ydW50ZXN0JChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0cmVjdXJzZSQoRVhFRVhUKSAmJiQoQ0hFQ0tFUikgLi90ZXN0YXBpJChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi90ZXN0Y2hhciQoRVhFRVhUKSYmICQoQ0hFQ0tFUikgLi90ZXN0ZGljdCQoRVhFRVhUKSAmJiAkKENIRUNLRVIpIC4vcnVueG1sY29uZiQoRVhFRVhUKQorKwkuL3J1bnRlc3QkKEVYRUVYVCkgOyAuL3Rlc3RyZWN1cnNlJChFWEVFWFQpIDsgLi90ZXN0YXBpJChFWEVFWFQpIDsgLi90ZXN0Y2hhciQoRVhFRVhUKSA7IC4vdGVzdGRpY3QkKEVYRUVYVCkgOyAuL3J1bnhtbGNvbmYkKEVYRUVYVCkKKyAJQChpZiBbICIkKFBZVEhPTl9TVUJESVIpIiAhPSAiIiBdIDsgdGhlbiBjZCBweXRob24gOyBcCisgCSAgICAkKE1BS0UpIHRlc3RzIDsgZmkpCisgCitkaWZmIC11TnIgYS9ydW5zdWl0ZS5jIGIvcnVuc3VpdGUuYworLS0tIGEvcnVuc3VpdGUuYwkyMDEzLTA0LTEyIDE2OjE3OjExLjQ2MjgyMzIzOCArMDIwMAorKysrIGIvcnVuc3VpdGUuYwkyMDEzLTA0LTE3IDE0OjA3OjI0LjM1MjY5MzIxMSArMDIwMAorQEAgLTExNjIsNiArMTE2Miw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnN1aXRlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgI2Vsc2UgLyogIVNDSEVNQVMgKi8KK2RpZmYgLXVOciBhL3J1bnRlc3QuYyBiL3J1bnRlc3QuYworLS0tIGEvcnVudGVzdC5jCTIwMTMtMDQtMTYgMTM6MTk6MTUuMDg3OTk3MjkwICswMjAwCisrKysgYi9ydW50ZXN0LmMJMjAxMy0wNC0xNyAxNDowODoyOS41Mjk5NDk2NTUgKzAyMDAKK0BAIC00Mzg2LDYgKzQzODYsNyBAQAorIAkgICAgZXJyKys7CisgCX0KKyAgICAgfQorKyAgICBwcmludGYoIiVzOiAlc1xuIiwgKGVyciA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIiwgdHN0LT5kZXNjKTsKKyAgICAgcmV0dXJuKGVycik7CisgfQorIAorQEAgLTQ0NTUsNiArNDQ1Niw3IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiBydW50ZXN0XG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS9ydW54bWxjb25mLmMgYi9ydW54bWxjb25mLmMKKy0tLSBhL3J1bnhtbGNvbmYuYwkyMDEzLTA0LTE2IDEyOjUzOjQ5LjkwMDk4Mjk5MCArMDIwMAorKysrIGIvcnVueG1sY29uZi5jCTIwMTMtMDQtMTcgMTQ6MDk6MjEuMTExNzc4MTA0ICswMjAwCitAQCAtNTk1LDYgKzU5NSw3IEBACisgCisgICAgIGlmIChsb2dmaWxlICE9IE5VTEwpCisgICAgICAgICBmY2xvc2UobG9nZmlsZSk7CisrICAgIHByaW50ZigiJXM6IHJ1bnhtbGNvbmZcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CisgCitkaWZmIC11TnIgYS90ZXN0YXBpLmMgYi90ZXN0YXBpLmMKKy0tLSBhL3Rlc3RhcGkuYwkyMDEzLTA0LTEyIDE2OjE2OjU3Ljc2MzQxNzY1OSArMDIwMAorKysrIGIvdGVzdGFwaS5jCTIwMTMtMDQtMTcgMTQ6MTA6MjguODc2OTI0ODgxICswMjAwCitAQCAtMTI0NSw0OSArMTI0NSw5MSBAQAorIHRlc3RsaWJ4bWwyKHZvaWQpCisgeworICAgICBpbnQgdGVzdF9yZXQgPSAwOworKyAgICBpbnQgcmV0ID0gMDsKKyAKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9IVE1McGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfSFRNTHRyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9TQVgyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfYzE0bigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2NhdGFsb2coKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9jaHZhbGlkKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZGVidWdYTUwoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9kaWN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfZW5jb2RpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9lbnRpdGllcygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2hhc2goKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9saXN0KCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfbmFub2Z0cCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X25hbm9odHRwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcGF0dGVybigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3JlbGF4bmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9zY2hlbWFzSW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3Rfc2NoZW1hdHJvbigpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3RyZWUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF91cmkoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF92YWxpZCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hpbmNsdWRlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sSU8oKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxhdXRvbWF0YSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbGVycm9yKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sbW9kdWxlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVhZGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1scmVnZXhwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc2F2ZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHNjaGVtYXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzdHJpbmcoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWx1bmljb2RlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sd3JpdGVyKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeHBhdGgoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94cGF0aEludGVybmFscygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hwb2ludGVyKCk7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X0hUTUxwYXJzZXIoKSk7CisrICAgIHByaW50ZigiJXM6IEhUTUxwYXJzZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9IVE1MdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogSFRNTHRyZWVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9TQVgyKCkpOworKyAgICBwcmludGYoIiVzOiBTQVgyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfYzE0bigpKTsKKysgICAgcHJpbnRmKCIlczogYzE0blxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2NhdGFsb2coKSk7CisrICAgIHByaW50ZigiJXM6IGNhdGFsb2dcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9jaHZhbGlkKCkpOworKyAgICBwcmludGYoIiVzOiBjaHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGVidWdYTUwoKSk7CisrICAgIHByaW50ZigiJXM6IGRlYnVnWE1MXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZGljdCgpKTsKKysgICAgcHJpbnRmKCIlczogZGljdFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VuY29kaW5nKCkpOworKyAgICBwcmludGYoIiVzOiBlbmNvZGluZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2VudGl0aWVzKCkpOworKyAgICBwcmludGYoIiVzOiBlbnRpdGllc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2hhc2goKSk7CisrICAgIHByaW50ZigiJXM6IGhhc2hcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9saXN0KCkpOworKyAgICBwcmludGYoIiVzOiBsaXN0XG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfbmFub2Z0cCgpKTsKKysgICAgcHJpbnRmKCIlczogbmFub2Z0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X25hbm9odHRwKCkpOworKyAgICBwcmludGYoIiVzOiBuYW5vaHR0cFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3BhcnNlcigpKTsKKysgICAgcHJpbnRmKCIlczogcGFyc2VyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcGFyc2VySW50ZXJuYWxzKCkpOworKyAgICBwcmludGYoIiVzOiBwYXJzZXJJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9wYXR0ZXJuKCkpOworKyAgICBwcmludGYoIiVzOiBwYXR0ZXJuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcmVsYXhuZygpKTsKKysgICAgcHJpbnRmKCIlczogcmVsYXhuZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3NjaGVtYXNJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHNjaGVtYXNJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9zY2hlbWF0cm9uKCkpOworKyAgICBwcmludGYoIiVzOiBzY2hlbWF0cm9uXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdHJlZSgpKTsKKysgICAgcHJpbnRmKCIlczogdHJlZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3VyaSgpKTsKKysgICAgcHJpbnRmKCIlczogdXJpXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdmFsaWQoKSk7CisrICAgIHByaW50ZigiJXM6IHZhbGlkXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeGluY2x1ZGUoKSk7CisrICAgIHByaW50ZigiJXM6IHhpbmNsdWRlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sSU8oKSk7CisrICAgIHByaW50ZigiJXM6IHhtbElPXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sYXV0b21hdGEoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGF1dG9tYXRhXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sZXJyb3IoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbGVycm9yXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sbW9kdWxlKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxtb2R1bGVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxyZWFkZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHJlYWRlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHJlZ2V4cCgpKTsKKysgICAgcHJpbnRmKCIlczogeG1scmVnZXhwXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc2F2ZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc2F2ZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHNjaGVtYXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzY2hlbWFzdHlwZXMoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbHNjaGVtYXN0eXBlc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHN0cmluZygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc3RyaW5nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sdW5pY29kZSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sdW5pY29kZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHdyaXRlcigpKTsKKysgICAgcHJpbnRmKCIlczogeG1sd3JpdGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGgoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBhdGhJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHhwYXRoSW50ZXJuYWxzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeHBvaW50ZXIoKSk7CisrICAgIHByaW50ZigiJXM6IHhwb2ludGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAKKyAgICAgcHJpbnRmKCJUb3RhbDogJWQgZnVuY3Rpb25zLCAlZCB0ZXN0cywgJWQgZXJyb3JzXG4iLAorICAgICAgICAgICAgZnVuY3Rpb25fdGVzdHMsIGNhbGxfdGVzdHMsIHRlc3RfcmV0KTsKKysKKysgICAgcHJpbnRmKCIlczogdGVzdGFwaVxuXG4iLCAodGVzdF9yZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4odGVzdF9yZXQpOworIH0KKyAKK2RpZmYgLXVOciBhL3Rlc3RjaGFyLmMgYi90ZXN0Y2hhci5jCistLS0gYS90ZXN0Y2hhci5jCTIwMTMtMDQtMTcgMTA6NTA6MzAuMjUwMTQ3NDE4ICswMjAwCisrKysgYi90ZXN0Y2hhci5jCTIwMTMtMDQtMTggMTY6MTE6MjguNDU1NzMzODAwICswMjAwCitAQCAtMjMsNyArMjMsNyBAQAorIGNoYXIgZG9jdW1lbnQxWzEwMF0gPSAiPGRvYz5YWFhYPC9kb2M+IjsKKyBjaGFyIGRvY3VtZW50MlsxMDBdID0gIjxkb2MgZm9vPSdYWFhYJy8+IjsKKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisrc3RhdGljIGludCB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgIGNoYXIgKmRhdGEsIGludCBmb3JiaWQxLCBpbnQgZm9yYmlkMikgeworICAgICBpbnQgaTsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC0zNywzMyArMzcsNDEgQEAKKyAJcmVzID0geG1sUmVhZE1lbW9yeShkb2N1bWVudCwgbGVuLCAidGVzdCIsIE5VTEwsIDApOworIAorIAlpZiAoKGkgPT0gZm9yYmlkMSkgfHwgKGkgPT0gZm9yYmlkMikpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWDogJWNcbiIsCisgCQkgICAgICAgIGksIGkpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCWVsc2UgaWYgKChpID09ICc8JykgfHwgKGkgPT0gJyYnKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbGxlZ2FsIGNoYXIgJWMgZm9yIEJ5dGUgMHglMDJYXG4iLCBpLCBpKTsKKysJCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAJZWxzZSBpZiAoKChpIDwgMHgyMCkgfHwgKGkgPj0gMHg4MCkpICYmCisgCSAgICAoaSAhPSAweDkpICYmIChpICE9IDB4QSkgJiYgKGkgIT0gMHhEKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpICYmIChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgJiYgKHJlcyAhPSBOVUxMKSkgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAllbHNlIGlmIChyZXMgPT0gTlVMTCkgeworIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIHZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYIDogJWNcbiIsIGksIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKytzdGF0aWMgaW50IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCAgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgajsKKyAgICAgeG1sRG9jUHRyIHJlczsKK0BAIC04MCwxMCArODgsMTIgQEAKKyAKKyAJLyogaWYgZmlyc3QgYml0IG9mIGZpcnN0IGNoYXIgaXMgc2V0LCB0aGVuIHNlY29uZCBiaXQgbXVzdCB0b28gKi8KKyAJaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTkxLDEwICsxMDEsMTIgQEAKKyAJICogYml0cyBtdXN0IGJlIDEwCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0xMDIsMTAgKzExNCwxMiBAQAorIAkgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICovCisgCWVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHgxRSkgPT0gMCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTExMywxMCArMTI3LDEyIEBACisgCSAqIGF0IGxlYXN0IDMgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgMiAhCisgCSAqLworIAllbHNlIGlmICgoaSAmIDB4RTApID09IDB4RTApIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweDAwXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMTI1LDExICsxNDEsMTMgQEAKKyAJZWxzZSBpZiAoKGxhc3RFcnJvciAhPSAwKSB8fCAocmVzID09IE5VTEwpKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgZG9jdW1lbnQgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsIGksIGopOworKwkJcmV0dXJuKDEpOworIAl9CisgCWlmIChyZXMgIT0gTlVMTCkKKyAJICAgIHhtbEZyZWVEb2MocmVzKTsKKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCisgLyoqCitAQCAtMTQxLDkgKzE1OSwxMCBAQAorICAqIENEQVRBIGluIHRleHQgb3IgaW4gYXR0cmlidXRlIHZhbHVlcy4KKyAgKi8KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0RG9jdW1lbnRSYW5nZXModm9pZCkgeworK3N0YXRpYyBpbnQgdGVzdERvY3VtZW50UmFuZ2VzKHZvaWQpIHsKKyAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0OworICAgICBjaGFyICpkYXRhOworKyAgICBpbnQgdGVzdF9yZXQgPSAwOworIAorICAgICAvKgorICAgICAgKiBTZXQgdXAgYSBwYXJzaW5nIGNvbnRleHQgdXNpbmcgdGhlIGZpcnN0IGRvY3VtZW50IGFzCitAQCAtMTUyLDcgKzE3MSw3IEBACisgICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnNlciBjb250ZXh0XG4iKTsKKy0JcmV0dXJuOworKwlyZXR1cm4oMSk7CisgICAgIH0KKyAKKyAgICAgcHJpbnRmKCJ0ZXN0aW5nIDEgYnl0ZSBjaGFyIGluIGRvY3VtZW50OiAxIik7CitAQCAtMTYzLDcgKzE4Miw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIC0xLCAtMSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMTcyLDcgKzE5MSw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAzLCAtMSwgLTEpOworIAorICAgICBwcmludGYoIiAzIik7CitAQCAtMTgzLDcgKzIwMiw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMSBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUxKGN0eHQsICZkb2N1bWVudDJbMF0sIHN0cmxlbihkb2N1bWVudDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0xOTIsNyArMjExLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDMsICdcJycsIC0xKTsKKyAgICAgcHJpbnRmKCIgZG9uZVxuIik7CisgCitAQCAtMjA0LDcgKzIyMyw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBiZWdpbm5pbmcgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworICAgICBwcmludGYoIiAyIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTIxMyw3ICsyMzIsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQxWzBdLCBzdHJsZW4oZG9jdW1lbnQxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMik7CisgCisgICAgIHByaW50ZigiIDMiKTsKK0BAIC0yMjQsNyArMjQzLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisgICAgIHByaW50ZigiIDQiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMjMzLDE0ICsyNTIsMTUgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDIpOworICAgICBwcmludGYoIiBkb25lXG4iKTsKKyAKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMSh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGkgPSAwOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI1NSwxOSArMjc1LDI1IEBACisgICAgICAgICBjID0geG1sQ3VycmVudENoYXIoY3R4dCwgJmxlbik7CisgCWlmICgoaSA9PSAwKSB8fCAoaSA+PSAweDgwKSkgeworIAkgICAgLyogd2UgbXVzdCBzZWUgYW4gZXJyb3IgdGhlcmUgKi8KKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQkJcmV0dXJuKDEpOworKwkJfQorIAl9IGVsc2UgaWYgKGkgPT0gMHhEKSB7CistCSAgICBpZiAoKGMgIT0gMHhBKSB8fCAobGVuICE9IDEpKQorKwkgICAgaWYgKChjICE9IDB4QSkgfHwgKGxlbiAhPSAxKSkgeworIAkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29udmVydCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0gZWxzZSBpZiAoKGMgIT0gaSkgfHwgKGxlbiAhPSAxKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZSAweCUwMlhcbiIsIGkpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTIoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqOworICAgICBpbnQgbGVuLCBjOworIAorQEAgLTI4NCwxMCArMzEwLDEyIEBACisgCisgCSAgICAvKiBpZiBmaXJzdCBiaXQgb2YgZmlyc3QgY2hhciBpcyBzZXQsIHRoZW4gc2Vjb25kIGJpdCBtdXN0IHRvbyAqLworIAkgICAgaWYgKChpICYgMHg4MCkgJiYgKChpICYgMHg0MCkgPT0gMCkpIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJICAgICAgICAgICAgaSwgaik7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAJICAgIC8qCitAQCAtMjk1LDEwICszMjMsMTIgQEAKKyAJICAgICAqIGJpdHMgbXVzdCBiZSAxMAorIAkgICAgICovCisgCSAgICBlbHNlIGlmICgoaSAmIDB4ODApICYmICgoaiAmIDB4QzApICE9IDB4ODApKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYOiAlZFxuIiwKKyAJCSAgICAgICAgICAgIGksIGosIGMpOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgCSAgICAvKgorQEAgLTMwNiwxMCArMzM2LDEyIEBACisgCSAgICAgKiB0aGFuIDB4ODAsIGkuZS4gb25lIG9mIGJpdHMgNSB0byAxIG9mIGkgbXVzdCBiZSBzZXQKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDFFKSA9PSAwKSkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogJWRcbiIsCisgCQkgICAgICAgICAgICBpLCBqLCBjKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorIAkgICAgLyoKK0BAIC0zMTcsMTAgKzM0OSwxMiBAQAorIAkgICAgICogYXQgbGVhc3QgMyBieXRlcywgYnV0IHdlIGdpdmUgb25seSAyICEKKyAJICAgICAqLworIAkgICAgZWxzZSBpZiAoKGkgJiAweEUwKSA9PSAweEUwKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4MDBcbiIsCisgCQkgICAgICAgICAgICBpLCBqKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorICAgICAgICAgICAgIC8qCitAQCAtMzI5LDYgKzM2Myw3IEBACisgCSAgICBlbHNlIGlmICgobGFzdEVycm9yICE9IDApIHx8IChsZW4gIT0gMikpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwgaSwgaik7CisrCQlyZXR1cm4oMSk7CisgCSAgICB9CisgCisgICAgICAgICAgICAgLyoKK0BAIC0zMzgsMTIgKzM3MywxNCBAQAorIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWDogZXhwZWN0ICVkIGdvdCAlZFxuIiwKKyAJICAgICAgICAgICAgICAgIGksIGosICgoaiAmIDB4M0YpICsgKChpICYgMHgxRikgPDwgNikpLCBjKTsKKysJCXJldHVybigxKTsKKyAJICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMyh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGosIGssIEs7CisgICAgIGludCBsZW4sIGM7CisgICAgIHVuc2lnbmVkIGNoYXIgbG93c1s2XSA9IHswLCAweDgwLCAweDgxLCAweEMxLCAweEZGLCAweEJGfTsKK0BAIC0zNjgsMjAgKzQwNSwyNCBAQAorIAkgKiBhdCBsZWFzdCA0IGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDMgIQorIAkgKi8KKyAJaWYgKChpICYgMHhGMCkgPT0gMHhGMCkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKKyAJICogVGhlIHNlY29uZCBhbmQgdGhlIHRoaXJkIGJ5dGVzIG11c3Qgc3RhcnQgd2l0aCAxMAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTM5MCwxMCArNDMxLDEyIEBACisgCSAqIHRoZSA2dGggYnl0ZSBvZiBkYXRhWzFdIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweEYpID09IDApICYmICgoaiAmIDB4MjApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEspOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQwMSwxMCArNDQ0LDEyIEBACisgCSAqLworIAllbHNlIGlmICgoKHZhbHVlID4gMHhEN0ZGKSAmJiAodmFsdWUgPDB4RTAwMCkpIHx8CisgCSAgICAgICAgICgodmFsdWUgPiAweEZGRkQpICYmICh2YWx1ZSA8MHgxMDAwMCkpKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciAweCUwNFggZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCXZhbHVlLCBpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTQxNCw2ICs0NTksNyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJICAgIGksIGosIEspOworKwkJcmV0dXJuKDEpOworIAl9CisgCisgCS8qCitAQCAtNDIzLDEzICs0NjksMTUgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorICAgICAiRmFpbGVkIHRvIHBhcnNlIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYOiBleHBlY3QgJWQgZ290ICVkXG4iLAorIAkJaSwgaiwgZGF0YVsyXSwgdmFsdWUsIGMpOworKwkJcmV0dXJuKDEpOworIAl9CisgICAgIH0KKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGU0KHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgaiwgaywgSywgbCwgTDsKKyAgICAgaW50IGxlbiwgYzsKKyAgICAgdW5zaWduZWQgY2hhciBsb3dzWzZdID0gezAsIDB4ODAsIDB4ODEsIDB4QzEsIDB4RkYsIDB4QkZ9OworQEAgLTQ1OCwxMCArNTA2LDEyIEBACisgCSAqIGF0IGxlYXN0IDUgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgNCAhCisgCSAqLworIAlpZiAoKGkgJiAweEY4KSA9PSAweEY4KSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBkYXRhWzNdKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorICAgICAgICAgLyoKK0BAIC00NjksMTAgKzUxOSwxMiBAQAorIAkgKi8KKyAJZWxzZSBpZiAoKChqICYgMHhDMCkgIT0gMHg4MCkgfHwgKChLICYgMHhDMCkgIT0gMHg4MCkgfHwKKyAJICAgICAgICAgKChMICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgTCk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC00ODEsMTAgKzUzMywxMiBAQAorIAkgKiB0aGUgNiBvciA1dGggYnl0ZSBvZiBqIG11c3QgYmUgc2V0CisgCSAqLworIAllbHNlIGlmICgoKGkgJiAweDcpID09IDApICYmICgoaiAmIDB4MzApID09IDApKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQ5MywxMCArNTQ3LDEyIEBACisgCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKKyAJICAgICAgICAgKCh2YWx1ZSA+IDB4RkZGRCkgJiYgKHZhbHVlIDwweDEwMDAwKSkgfHwKKyAJCSAodmFsdWUgPiAweDEwRkZGRikpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgMHglMDRYIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJdmFsdWUsIGksIGosIEssIEwpOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtNTA2LDYgKzU2Miw3IEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkgICAgaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAKKyAJLyoKK0BAIC01MTUsMTEgKzU3MiwxMyBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlg6IGV4cGVjdCAlZCBnb3QgJWRcbiIsCisgCQlpLCBqLCBkYXRhWzJdLCB2YWx1ZSwgYyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAgICAgfQorICAgICB9CisgICAgIH0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorIC8qKgorQEAgLTUzMCwxMSArNTg5LDEyIEBACisgICogY292ZXIgdGhlIGZ1bGwgcmFuZ2Ugb2YgVVRGLTggY2hhcnMgYWNjZXB0ZWQgYnkgWE1MLTEuMAorICAqLworIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VzKHZvaWQpIHsKKyAgICAgY2hhciBkYXRhWzVdOworICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgIHhtbFBhcnNlcklucHV0QnVmZmVyUHRyIGJ1ZjsKKyAgICAgeG1sUGFyc2VySW5wdXRQdHIgaW5wdXQ7CisrICAgIGludCB0ZXN0X3JldCA9IDA7CisgCisgICAgIG1lbXNldChkYXRhLCAwLCA1KTsKKyAKK0BAIC01NDUsMTcgKzYwNSwxOSBAQAorICAgICBjdHh0ID0geG1sTmV3UGFyc2VyQ3R4dCgpOworICAgICBpZiAoY3R4dCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBwYXJzZXIgY29udGV4dFxuIik7CistCXJldHVybjsKKysJcmV0dXJuKDEpOworICAgICB9CisgICAgIGJ1ZiA9IHhtbFBhcnNlcklucHV0QnVmZmVyQ3JlYXRlU3RhdGljKGRhdGEsIHNpemVvZihkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0NIQVJfRU5DT0RJTkdfTk9ORSk7CisgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgYnVmZmVyXG4iKTsKKysgICAgICAgIHRlc3RfcmV0ID0gMTsKKyAJZ290byBlcnJvcjsKKyAgICAgfQorICAgICBpbnB1dCA9IHhtbE5ld0lucHV0U3RyZWFtKGN0eHQpOworICAgICBpZiAoaW5wdXQgPT0gTlVMTCkgeworICAgICAgICAgeG1sRnJlZVBhcnNlcklucHV0QnVmZmVyKGJ1Zik7CisrICAgICAgICB0ZXN0X3JldCA9IDE7CisgCWdvdG8gZXJyb3I7CisgICAgIH0KKyAgICAgaW5wdXQtPmZpbGVuYW1lID0gTlVMTDsKK0BAIC01NjcsMjUgKzYyOSwyOCBAQAorIAorICAgICBwcmludGYoInRlc3RpbmcgY2hhciByYW5nZTogMSIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGUxKGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTEoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlMihjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGUyKGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiAzIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTMoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMyhjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGU0KGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTQoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIGRvbmVcbiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKyAKKyBlcnJvcjoKKyAgICAgeG1sRnJlZVBhcnNlckN0eHQoY3R4dCk7CisrICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorIGludCBtYWluKHZvaWQpIHsKKyAKKysgICAgaW50IHJldCA9IDA7CisrCisgICAgIC8qCisgICAgICAqIHRoaXMgaW5pdGlhbGl6ZSB0aGUgbGlicmFyeSBhbmQgY2hlY2sgcG90ZW50aWFsIEFCSSBtaXNtYXRjaGVzCisgICAgICAqIGJldHdlZW4gdGhlIHZlcnNpb24gaXQgd2FzIGNvbXBpbGVkIGZvciBhbmQgdGhlIGFjdHVhbCBzaGFyZWQKK0BAIC02MDIsOCArNjY3LDkgQEAKKyAgICAgLyoKKyAgICAgICogUnVuIHRoZSB0ZXN0cworICAgICAgKi8KKy0gICAgdGVzdENoYXJSYW5nZXMoKTsKKy0gICAgdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHJldCArPSB0ZXN0Q2hhclJhbmdlcygpOworKyAgICByZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VzKCk7CisrICAgIHByaW50ZigiJXM6IHRlc3RjaGFyXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworIAorICAgICAvKgorICAgICAgKiBDbGVhbnVwIGZ1bmN0aW9uIGZvciB0aGUgWE1MIGxpYnJhcnkuCitkaWZmIC11TnIgYS90ZXN0ZGljdC5jIGIvdGVzdGRpY3QuYworLS0tIGEvdGVzdGRpY3QuYwkyMDEzLTA0LTE2IDE1OjA4OjQyLjk3MTE3NzE5MyArMDIwMAorKysrIGIvdGVzdGRpY3QuYwkyMDEzLTA0LTE4IDE1OjU5OjAwLjY5OTQ4MjQzOSArMDIwMAorQEAgLTQ0MCw1ICs0NDAsNiBAQAorICAgICBjbGVhbl9zdHJpbmdzKCk7CisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworKyAgICBwcmludGYoIiVzOiB0ZXN0ZGljdFxuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdGxpbWl0cy5jIGIvdGVzdGxpbWl0cy5jCistLS0gYS90ZXN0bGltaXRzLmMJMjAxMy0wNC0xMiAxNjoxNjozNi4xODAzNTQxNzcgKzAyMDAKKysrKyBiL3Rlc3RsaW1pdHMuYwkyMDEzLTA0LTE3IDE0OjAzOjE3LjIwMzA5Mjk4NyArMDIwMAorQEAgLTE2MzAsNSArMTYzMCw2IEBACisgICAgIHhtbENsZWFudXBQYXJzZXIoKTsKKyAgICAgeG1sTWVtb3J5RHVtcCgpOworIAorKyAgICBwcmludGYoIiVzOiB0ZXN0bGltaXRzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKyAgICAgcmV0dXJuKHJldCk7CisgfQorZGlmZiAtdU5yIGEvdGVzdHJlY3Vyc2UuYyBiL3Rlc3RyZWN1cnNlLmMKKy0tLSBhL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNiAxMzoxOTo0OS4zNjY1MzYyOTUgKzAyMDAKKysrKyBiL3Rlc3RyZWN1cnNlLmMJMjAxMy0wNC0xNyAxNDowNjoyNy4zNjcwOTE2MjIgKzAyMDAKK0BAIC04OTIsNiArODkyLDcgQEAKKyAJICAgIGVycisrOworIAl9CisgICAgIH0KKysgICAgcHJpbnRmKCIlczogJXNcbiIsIChlcnIgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIsIHRzdC0+ZGVzYyk7CisgICAgIHJldHVybihlcnIpOworIH0KKyAKK0BAIC05NjEsNSArOTYyLDYgQEAKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisgCisrICAgIHByaW50ZigiJXM6IHRlc3RyZWN1cnNlXG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YTM5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMl8yLjkuMi5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGxpYnhtbDIuaW5jCisKK1NSQ19VUkkgKz0gImh0dHA6Ly93d3cudzMub3JnL1hNTC9UZXN0L3htbHRzMjAwODA4MjcudGFyLmd6O25hbWU9dGVzdHRhciBcCisgICAgICAgICAgICBmaWxlOi8vNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDAxLXRocmVhZHMtRGVmaW5lLXB0aHJlYWQtZGVmaW5pdGlvbnMtZm9yLWdsaWJjLWNvbXBsaWEucGF0Y2ggXAorCSAgICIKKworU1JDX1VSSVtsaWJ0YXIubWQ1c3VtXSA9ICI5ZTZhOWFjYTlkMTU1NzM3ODY4YjNkYzVmZDgyZjc4OCIKK1NSQ19VUklbbGlidGFyLnNoYTI1NnN1bV0gPSAiNTE3OGMzMGIxNTFkMDQ0YWVmYjFiMDhiZjU0YzMwMDNhMGFjNTVjNTljODY2NzYzOTk3NTI5ZDYwNzcwZDViYyIKK1NSQ19VUklbdGVzdHRhci5tZDVzdW1dID0gImFlM2QxZWJlMDAwYTM5NzJhZmExMDRjYTdmMGUxYjRhIgorU1JDX1VSSVt0ZXN0dGFyLnNoYTI1NnN1bV0gPSAiOTYxNTE2ODVjZWM5OTdlMWY5ZjMzODdlMzYyNmQ2MWU2Mjg0ZDRkNmU2NmUwZTQ0MGMyMDkyODZjMDNlOWNjNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwNDM0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvYnVpbGR0b29scy10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTkgQEAKK0RFU0NSSVBUSU9OID0gIlNESyB0eXBlIHRhcmdldCBmb3IgYnVpbGRpbmcgYSBzdGFuZGFsb25lIHRhcmJhbGwgY29udGFpbmluZyBweXRob24sIGNocnBhdGgsIG1ha2UsIGdpdCBhbmQgdGFyLiBUaGUgXAorICAgICAgICAgICAgICAgdGFyYmFsbCBjYW4gYmUgdXNlZCB0byBydW4gYml0YmFrZSBidWlsZHMgb24gc3lzdGVtcyB3aGljaCBkb24ndCBtZWV0IHRoZSB1c3VhbCB2ZXJzaW9uIHJlcXVpcmVtZW50cy4iCitTVU1NQVJZID0gIlN0YW5kYWxvbmUgdGFyYmFsbCBmb3IgcnVubmluZyBidWlsZHMgb24gc3lzdGVtcyB3aXRoIGluYWRlcXVhdGUgc29mdHdhcmUiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gIiIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAiXAorICAgIG5hdGl2ZXNkay1weXRob24tY29yZSBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLW1pc2MgXAorICAgIG5hdGl2ZXNkay1weXRob24tZ2l0IFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLXBleHBlY3QgXAorICAgIG5hdGl2ZXNkay1uY3Vyc2VzLXRlcm1pbmZvLWJhc2UgXAorICAgIG5hdGl2ZXNkay1jaHJwYXRoIFwKKyAgICBuYXRpdmVzZGstdGFyIFwKKyAgICBuYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15IFwKKyAgICBuYXRpdmVzZGstZ2l0IFwKKyAgICBuYXRpdmVzZGstZ2l0LXBlcmx0b29scyBcCisgICAgbmF0aXZlc2RrLXBpZ3ogXAorICAgIG5hdGl2ZXNkay1tYWtlIFwKKyAgICBuYXRpdmVzZGstd2dldCBcCisgICAgbmF0aXZlc2RrLWNhLWNlcnRpZmljYXRlcyBcCisgICAgIgorCitTREtfUEFDS0FHRV9BUkNIUyA9KyAiYnVpbGR0b29scy1kdW1teS0ke1NES1BLR1NVRkZJWH0iCisKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke1NES19OQU1FfS1idWlsZHRvb2xzLW5hdGl2ZXNkay1zdGFuZGFsb25lLSR7RElTVFJPX1ZFUlNJT059IgorCitTREtfVElUTEUgPSAiQnVpbGQgdG9vbHMiCisKK1JERVBFTkRTID0gIiR7VE9PTENIQUlOX0hPU1RfVEFTS30iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitpbmhlcml0IG1ldGEKK2luaGVyaXQgcG9wdWxhdGVfc2RrCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kICgpIHsKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctKgorCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0qCisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tKgorCisJIyBHZW5lcmF0ZSBuZXcgKG1pbmkpIHNkay1lbnZpcm9ubWVudC1zZXR1cCBmaWxlCisJc2NyaXB0PSR7MTotJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSR7U0RLX1NZU319CisJdG91Y2ggJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQQVRIPSR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9OiRQQVRIJyA+PiAkc2NyaXB0CisJIyBJbiBvcmRlciBmb3IgdGhlIHNlbGYtZXh0cmFjdGlvbiBzY3JpcHQgdG8gY29ycmVjdGx5IGV4dHJhY3QgYW5kIHNldCB1cCB0aGluZ3MsCisJIyB3ZSBuZWVkIGEgJ09FQ09SRV9OQVRJVkVfU1lTUk9PVD14eHgnIGxpbmUgaW4gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0LgorCSMgSG93ZXZlciwgYnVpbGR0b29scy10YXJiYWxsIGlzIGluaGVyZW50bHkgYSB0b29sIHNldCBpbnN0ZWFkIG9mIGEgZnVsbHkgZnVuY3Rpb25hbCBTREssCisJIyBzbyBpbnN0ZWFkIG9mIGV4cG9ydGluZyB0aGUgdmFyaWFibGUsIHdlIHVzZSBhIGNvbW1lbnQgaGVyZS4KKwllY2hvICcjT0VDT1JFX05BVElWRV9TWVNST09UPSIke1NES1BBVEhOQVRJVkV9IicgPj4gJHNjcmlwdAorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtTREtfU1lTfQorCisJZWNobyAnZXhwb3J0IEdJVF9TU0xfQ0FJTkZPPSIke1NES1BBVEhOQVRJVkV9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCInID4+JHNjcmlwdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LWV4dHNkay5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC1leHRzZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllNTk2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC1leHRzZGsuYmIKQEAgLTAsMCArMSwxMiBAQAorIyBtZXRhLWVudmlyb25tZW50IGZvciBleHRlbnNpYmxlIFNESworCityZXF1aXJlIG1ldGEtZW52aXJvbm1lbnQuYmIKKworUE4gPSAibWV0YS1lbnZpcm9ubWVudC1leHRzZGstJHtNQUNISU5FfSIKKworY3JlYXRlX3Nka19maWxlc19hcHBlbmQoKSB7CisJbG9jYWwgc3lzcm9vdD0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfVEFSR0VUJywgVHJ1ZSksIGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSl9CisJbG9jYWwgc2RrcGF0aG5hdGl2ZT0ke1NES1BBVEh9LyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJyxUcnVlKSwgZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpKX0KKworCXRvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgJycgJycgJHN5c3Jvb3QgJycgJHtiaW5kaXJfbmF0aXZlfSAke3ByZWZpeF9uYXRpdmV9ICRzZGtwYXRobmF0aXZlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkNDVmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgpAQCAtMCwwICsxLDc1IEBACitTVU1NQVJZID0gIlBhY2thZ2Ugb2YgZW52aXJvbm1lbnQgZmlsZXMgZm9yIFNESyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOCIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK01PRElGWVRPUyA9ICIwIgorCitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitpbmhlcml0IHRvb2xjaGFpbi1zY3JpcHRzCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFX2FwcGVuZCA9ICIgemxpYiIKKworU0RLX0RJUiA9ICIke1dPUktESVJ9L3NkayIKK1NES19PVVRQVVQgPSAiJHtTREtfRElSfS9pbWFnZSIKK1NES1RBUkdFVFNZU1JPT1QgPSAiJHtTREtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK2RvX2dlbmVyYXRlX2NvbnRlbnRbY2xlYW5kaXJzXSA9ICIke1NES19PVVRQVVR9IgorZG9fZ2VuZXJhdGVfY29udGVudFtkaXJzXSA9ICIke1NES19PVVRQVVR9LyR7U0RLUEFUSH0iCitweXRob24gZG9fZ2VuZXJhdGVfY29udGVudCgpIHsKKyAgICAjIEhhbmRsZSBtdWx0aWxpYnMgaW4gdGhlIFNESyBlbnZpcm9ubWVudCwgc2l0ZWNvbmZpZywgZXRjIGZpbGVzLi4uCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisKKyAgICAjIG1ha2Ugc3VyZSB3ZSBvbmx5IHVzZSB0aGUgV09SS0RJUiB2YWx1ZSBmcm9tICdkJywgb3IgaXQgY2FuIGNoYW5nZQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1dPUktESVInLCBkLmdldFZhcignV09SS0RJUicsIFRydWUpKQorCisgICAgIyBtYWtlIHN1cmUgd2Ugb25seSB1c2UgdGhlIFNES1RBUkdFVFNZU1JPT1QgdmFsdWUgZnJvbSAnZCcKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgZC5nZXRWYXIoJ1NES1RBUkdFVFNZU1JPT1QnLCBUcnVlKSkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdsaWJkaXInLCBkLmdldFZhcigndGFyZ2V0X2xpYmRpcicsIEZhbHNlKSkKKworICAgICMgUHJvY2VzcyBERUZBVUxUVFVORQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY3JlYXRlX3Nka19maWxlcyIsIGxvY2FsZGF0YSkKKworICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgaXRlbSBpbiB2YXJpYW50cy5zcGxpdCgpOgorICAgICAgICAjIExvYWQgb3ZlcnJpZGVzIGZyb20gJ2QnIHRvIGF2b2lkIGhhdmluZyB0byByZXNldCB0aGUgdmFsdWUuLi4KKyAgICAgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgbG9jYWxkYXRhKQorfQorYWRkdGFzayBnZW5lcmF0ZV9jb250ZW50IGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKKworY3JlYXRlX3Nka19maWxlcygpIHsKKwkjIFNldHVwIHNpdGUgZmlsZSBmb3IgZXh0ZXJuYWwgdXNlCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZyAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vc2l0ZS1jb25maWctJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfZW52X3NjcmlwdCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCisJIyBBZGQgdmVyc2lvbiBpbmZvcm1hdGlvbgorCXRvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L3ZlcnNpb24tJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke1NES1BBVEh9CisgICAgaW5zdGFsbCAtbSAwNjQ0IC10ICR7RH0vJHtTREtQQVRIfSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vKgorfQorCitQTiA9ICJtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0iCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59PSAiIFwKKyAgICAke1NES1BBVEh9LyogXAorICAgICIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWlkZS1zdXBwb3J0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOTI5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJNZXRhIHBhY2thZ2UgZm9yIGVuc3VyaW5nIHRoZSBidWlsZCBkaXJlY3RvcnkgY29udGFpbnMgYWxsIGFwcHJvcHJpYXRlIHRvb2xjaGFpbiBwYWNrYWdlcyBmb3IgdXNpbmcgYW4gSURFIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmMgZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSB1bmZzMy1uYXRpdmUiCitQUiA9ICJyMyIKKworaW5oZXJpdCBtZXRhIHRvb2xjaGFpbi1zY3JpcHRzCisKK2RvX3BvcHVsYXRlX2lkZV9zdXBwb3J0ICgpIHsKKyAgdG9vbGNoYWluX2NyZWF0ZV90cmVlX2Vudl9zY3JpcHQKK30KKworZG9fcG9wdWxhdGVfaWRlX3N1cHBvcnRbbm9zdGFtcF0gPSAiMSIKK2FkZHRhc2sgcG9wdWxhdGVfaWRlX3N1cHBvcnQgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWZkODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtdG9vbGNoYWluLmJiCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJNZXRhIHBhY2thZ2UgZm9yIGJ1aWxkaW5nIGEgaW5zdGFsbGFibGUgdG9vbGNoYWluIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInI3IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworaW5oZXJpdCBwb3B1bGF0ZV9zZGsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbmF0aXZlc2RrLWJ1aWxkdG9vbHMtcGVybC1kdW1teS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTcxYzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiRHVtbXkgcGFja2FnZSB3aGljaCBlbnN1cmVzIHBlcmwgaXMgZXhjbHVkZWQgZnJvbSBidWlsZHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworIyBQdXQgaXQgc29tZXdoZXJlIHNlcGFyYXRlIHRvIGVuc3VyZSBpdCdzIG5ldmVyIHVzZWQgZXhjZXB0IHdoZW4gd2Ugd2FudCBpdAorUEFDS0FHRV9BUkNIID0gImJ1aWxkdG9vbHMtZHVtbXktJHtTREtQS0dTVUZGSVh9IgorCitQRVJMUEFDS0FHRVMgPSAibmF0aXZlc2RrLXBlcmwgXAorICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1wZXJsLW1vZHVsZS1maWxlLXBhdGgiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGQuYXBwZW5kVmFyKCdSUFJPVklERVNfJHtQTn0nLCAnJHtQRVJMUEFDS0FHRVN9JykKKyAgICBkLmFwcGVuZFZhcignUkNPTkZMSUNUU18ke1BOfScsICcke1BFUkxQQUNLQUdFU30nKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3BhY2thZ2UtaW5kZXguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0NmI0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlJlYnVpbGRzIHRoZSBwYWNrYWdlIGluZGV4IgorTElDRU5TRSA9ICJNSVQiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitQQUNLQUdFUyA9ICIiCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKK2RvX3BhY2thZ2VfaW5kZXhbbm9zdGFtcF0gPSAiMSIKK2RvX3BhY2thZ2VfaW5kZXhbZGVwZW5kc10gKz0gIiR7UEFDS0FHRUlOREVYREVQU30iCisKK3B5dGhvbiBkb19wYWNrYWdlX2luZGV4KCkgeworICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCBnZW5lcmF0ZV9pbmRleF9maWxlcworICAgIGdlbmVyYXRlX2luZGV4X2ZpbGVzKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VfaW5kZXggYmVmb3JlIGRvX2J1aWxkCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjc5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL3VuaW5hdGl2ZS10YXJiYWxsLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAibGliYyBhbmQgcGF0Y2hlbGYgdGFyYmFsbCBmb3IgdXNlIHdpdGggdW5pbmF0aXZlLmJiY2xhc3MiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPSAiIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID0gIlwKKyAgICBuYXRpdmVzZGstZ2xpYmMgXAorICAgIG5hdGl2ZXNkay1wYXRjaGVsZiBcCisgICAgIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitUT09MQ0hBSU5fT1VUUFVUTkFNRSA/PSAiJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYyIKKworUkRFUEVORFMgPSAiJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK2luaGVyaXQgbWV0YQoraW5oZXJpdCBwb3B1bGF0ZV9zZGsKKworZGVsdGFzayBpbnN0YWxsCitkZWx0YXNrIHBhY2thZ2UKK2RlbHRhc2sgcGFja2FnZWRhdGEKKworU0RLX0RFUEVORFMgKz0gInBhdGNoZWxmLW5hdGl2ZSIKKworU0RLX1BBQ0tBR0lOR19GVU5DID0gIiIKKworZmFrZXJvb3QgY3JlYXRlX3Nka19maWxlcygpIHsKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vCisKKwkjIFJlcGxhY2UgdGhlICMjREVGQVVMVF9JTlNUQUxMX0RJUiMjIHdpdGggdGhlIGNvcnJlY3QgcGF0dGVybi4KKwkjIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAnKycgYW5kICcuJyBpbiB0aGUgU0RLUEFUSAorCWVzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9IHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisJc2VkIC1pIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vcmVsb2NhdGVfc2RrLnB5Cit9CisKKworZmFrZXJvb3QgdGFyX3NkaygpIHsKKwlta2RpciAtcCAke1NES19ERVBMT1l9CisJY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisJbXYgc3lzcm9vdHMvJHtTREtfU1lTfSAuLyR7QlVJTERfU1lTfQorCXJtIHN5c3Jvb3RzIC1yZgorCXBhdGNoZWxmIC0tc2V0LWludGVycHJldGVyICR7QCcnLmpvaW4oJ2EnIGZvciBuIGluIHhyYW5nZSgxMDI0KSl9IC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYKKwltdiAuLyR7QlVJTERfU1lTfS91c3IvYmluL3BhdGNoZWxmIC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYtdW5pbmF0aXZlCisJdGFyICR7U0RLVEFST1BUU30gLWMgLWogLS1maWxlPSR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MiAuCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZSBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvY29uZmlnLmNhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTIxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L2NvbmZpZy5jYWNoZQpAQCAtMCwwICsxLDQgQEAKKyMhIC9iaW4vc2gKKworY2ZfY3ZfZnVuY19uYW5vc2xlZXA9eWVzCitjZl9jdl9mdW5jX21rc3RlbXA9eWVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L3RpYy1oYW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS90aWMtaGFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE4OWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS90aWMtaGFuZy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKyd0aWMnIG9mIHNvbWUgbGludXggZGlzdHJpYnV0aW9ucyAoZS5nLiBmZWRvcmEgMTEpIGhhbmcgaW4gYW4gaW5maW5pdGUKK2xvb3Agd2hlbiBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBmaWxlLgorCitJbmRleDogbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuY3Vyc2VzLTUuNy5vcmlnL21pc2MvdGVybWluZm8uc3JjCisrKysgbmN1cnNlcy01LjcvbWlzYy90ZXJtaW5mby5zcmMKK0BAIC0zNzA2LDEyICszNzA2LDExIEBAIGtvbnNvbGUteGYzeHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXkKKyAjIFRoZSB2YWx1ZSBmb3Iga2JzIHJlZmxlY3RzIGxvY2FsIGN1c3RvbWl6YXRpb24gcmF0aGVyIHRoYW4gdGhlIHNldHRpbmdzIHVzZWQKKyAjIGZvciBYRnJlZTg2IHh0ZXJtLgorIGtvbnNvbGUteGY0eHxLREUgY29uc29sZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb3IgWEZyZWU4NiA0LnggeHRlcm0sCistCWtlbmQ9XEVPRiwga2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUrcGNma2V5cywKKy0JdXNlPWtvbnNvbGUtdnQxMDAsCistIyBLb25zb2xlIGRvZXMgbm90IGltcGxlbWVudCBzaGlmdGVkIGN1cnNvci1rZXlzLgorLWtvbnNvbGUrcGNma2V5c3xrb25zb2xlIHN1YnNldCBvZiB4dGVybStwY2ZrZXlzLAorLQlrTEZUQCwga1JJVEAsIGtjYnQ9XEVbWiwga2luZEAsIGtyaUAsIGtETkAsIGtVUEAsIHVzZT14dGVybStwY2MyLAorLQl1c2U9eHRlcm0rcGNmMCwKKysJa2VuZD1cRU9GLCBrZjE9XEVPUCwga2YxMz1cRU8yUCwga2YxND1cRU8yUSwga2YxNT1cRU8yUiwKKysJa2YxNj1cRU8yUywga2YxNz1cRVsxNTsyfiwga2YxOD1cRVsxNzsyfiwga2YxOT1cRVsxODsyfiwKKysJa2YyPVxFT1EsIGtmMjA9XEVbMTk7Mn4sIGtmMjE9XEVbMjA7Mn4sIGtmMjI9XEVbMjE7Mn4sCisrCWtmMjM9XEVbMjM7Mn4sIGtmMjQ9XEVbMjQ7Mn4sIGtmMz1cRU9SLCBrZjQ9XEVPUywKKysJa2hvbWU9XEVPSCwgdXNlPWtvbnNvbGUtdnQxMDAsCisgIyBLREUncyAidnQxMDAiIGtleWJvYXJkIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gYW55IHRlcm1pbmFsIHRoYXQgREVDIG1hZGUsIGJ1dAorICMgaXQgaXMgc3RpbGwgdXNlZnVsIGZvciBkZXJpdmluZyB0aGUgb3RoZXIgZW50cmllcy4KKyBrb25zb2xlLXZ0MTAwfEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIHZ0MTAwIChzaWMpIGtleWJvYXJkLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkODBlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy5pbmMKQEAgLTAsMCArMSwzMDYgQEAKK1NVTU1BUlkgPSAiVGhlIE5ldyBDdXJzZXMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlNWcjQgYW5kIFhTSS1DdXJzZXMgY29tcGF0aWJsZSBjdXJzZXMgbGlicmFyeSBhbmQgdGVybWluZm8gdG9vbHMgaW5jbHVkaW5nIHRpYywgaW5mb2NtcCwgY2FwdG9pbmZvLiBTdXBwb3J0cyBjb2xvciwgbXVsdGlwbGUgaGlnaGxpZ2h0cywgZm9ybXMtZHJhd2luZyBjaGFyYWN0ZXJzLCBhbmQgYXV0b21hdGljIHJlY29nbml0aW9uIG9mIGtleXBhZCBhbmQgZnVuY3Rpb24ta2V5IHNlcXVlbmNlcy4gRXh0ZW5zaW9ucyBpbmNsdWRlIHJlc2l6YWJsZSB3aW5kb3dzIGFuZCBtb3VzZSBzdXBwb3J0IG9uIGJvdGggeHRlcm0gYW5kIExpbnV4IGNvbnNvbGUgdXNpbmcgdGhlIGdwbSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9uY3Vyc2VzL25jdXJzZXMuaHRtbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbmN1cnNlcy9iYXNlL3ZlcnNpb24uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT1jYmMxODBhOGM0NGNhNjQyZTk3YzM1NDUyZmFiNWY2NiIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibmN1cnNlcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitJTkNfUFIgPSAicjE1IgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L25jdXJzZXMtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyIHBrZ2NvbmZpZworCisjIFVwc3RyZWFtIGhhcyB1c2VmdWwgcGF0Y2hlcyBhdCB0aW1lcyBhdCBmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzLworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC8ke0JQTn0vY3VycmVudC8ke0JQfS0ke1JFVklTSU9OfS50Z3oiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiLUkgbTQiCitDT05GSUdfU0lURSA9KyAiJHtXT1JLRElSfS9jb25maWcuY2FjaGUiCisKKyMgV2hldGhlciB0byBlbmFibGUgc2VwYXJhdGUgd2lkZWMgbGlicmFyaWVzOyBtdXN0IGJlICd0cnVlJyBvciAnZmFsc2UnCisjCisjIFRPRE86IHJlbW92ZSB0aGlzIHZhcmlhYmxlIHdoZW4gd2lkZWMgaXMgc3VwcG9ydGVkIGluIGV2ZXJ5IHNldHVwPworRU5BQkxFX1dJREVDID89ICJ0cnVlIgorCisjIF9HTlVfU09VUkNFIGlzIHJlcXVpcmVkIGZvciB3aWRlYyBzdHVmZiBhbmQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseQorIyBmb3IgdGFyZ2V0IG9iamVjdHMuICBCdXQgaXQgbXVzdCBiZSBzZXQgbWFudWFsbHkgZm9yIG5hdGl2ZSBhbmQgc2RrCisjIGJ1aWxkcy4KK0JVSUxEX0NQUEZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorCisjIG5hdGl2ZXMgZG9uJ3QgZ2VuZXJhbGx5IGxvb2sgaW4gYmFzZV9saWJkaXIKK2Jhc2VfbGliZGlyX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0iCisKKyMgRGlzcGxheSBjb3JydXB0aW9uIG9jY3VycyBvbiA2NCBiaXQgaG9zdHMgd2l0aG91dCB0aGVzZSBzZXR0aW5ncworIyBUaGlzIHdhcyBkZXJyaXZlZCBmcm9tIHRoZSB1cHN0cmVhbSBkZWJpYW4gbmN1cnNlcyB3aGljaCB1c2VzCisjIHRoZXNlIHNldHRpbmdzIGZvciAzMiBhbmQgNjQgYml0IGhvc3RzLgorRVhDT05GSUdfQVJHUyA9ICIiCitFWENPTkZJR19BUkdTX2NsYXNzLW5hdGl2ZSA9ICIgXAorCQktLWRpc2FibGUtbHA2NCBcCisJCS0td2l0aC1jaHR5cGU9J2xvbmcnIFwKKwkJLS13aXRoLW1tYXNrLXQ9J2xvbmcnIgorRVhDT05GSUdfQVJHU19jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKwkJLS1kaXNhYmxlLWxwNjQgXAorCQktLXdpdGgtY2h0eXBlPSdsb25nJyBcCisJCS0td2l0aC1tbWFzay10PSdsb25nJyIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJeJHtQTn0tbGliLioiCisKKyMgRmFsbCBiYWNrIHRvIHRoZSBob3N0IHRlcm1jYXAgLyB0ZXJtaW5mbyBmb3IgLW5hdGl2ZXNkayBhbmQgLW5hdGl2ZQorIyBUaGUgcmVhbGl0eSBpcyBhIHdvcmsgYXJvdW5kIGZvciBzdHJhbmdlIHByb2JsZW1zIHdpdGggdGhpbmdzIGxpa2UKKyMgImJpdGJha2UgLWMgbWVudWNvbmZpZyBidXN5Ym94IiB3aGVyZSBpdCBjYW5ub3QgZmluZCB0aGUgdGVybWluZm8KKyMgYmVjYXVzZSB0aGUgc3N0YXRlIGhhZCBhIGhhcmQgY29kZWQgc2VhcmNoIHBhdGguICBVbnRpbCB0aGlzIGlzIGZpeGVkCisjIGFub3RoZXIgd2F5IHRoaXMgaXMgZGVlbWVkIGdvb2QgZW5vdWdoLgorRVhfVEVSTUNBUCA9ICIiCitFWF9URVJNQ0FQX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwIgorRVhfVEVSTUNBUF9jbGFzcy1uYXRpdmVzZGsgPSAiOi9ldGMvdGVybWNhcDovdXNyL3NoYXJlL21pc2MvdGVybWNhcCIKK0VYX1RFUk1JTkZPID0gIiIKK0VYX1RFUk1JTkZPX2NsYXNzLW5hdGl2ZSA9ICI6L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvIgorRVhfVEVSTUlORk9fY2xhc3MtbmF0aXZlc2RrID0gIjovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8iCisKKyMgSGVscGVyIGZ1bmN0aW9uIGZvciBkb19jb25maWd1cmUgdG8gYWxsb3cgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMKKyMgJDEgdGhlIGRpcmVjdG9yeSB0byBydW4gY29uZmlndXJlIGluCisjICRAIHRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byBjb25maWd1cmUKK25jdXJzZXNfY29uZmlndXJlKCkgeworCW1rZGlyIC1wICQxCisJY2QgJDEKKwlzaGlmdAorCW9lX3J1bmNvbmYgXAorCSAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisJICAgICAgICAtLXdpdGhvdXQtZGVidWcgXAorCSAgICAgICAgLS13aXRob3V0LWFkYSBcCisJICAgICAgICAtLXdpdGhvdXQtZ3BtIFwKKwkgICAgICAgIC0tZW5hYmxlLWhhcmQtdGFicyBcCisJICAgICAgICAtLWVuYWJsZS14bWMtZ2xpdGNoIFwKKwkgICAgICAgIC0tZW5hYmxlLWNvbG9yZmdiZyBcCisJICAgICAgICAtLXdpdGgtdGVybXBhdGg9JyR7c3lzY29uZmRpcn0vdGVybWNhcDoke2RhdGFkaXJ9L21pc2MvdGVybWNhcCR7RVhfVEVSTUNBUH0nIFwKKwkgICAgICAgIC0td2l0aC10ZXJtaW5mby1kaXJzPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOiR7ZGF0YWRpcn0vdGVybWluZm8ke0VYX1RFUk1JTkZPfScgXAorCSAgICAgICAgLS13aXRoLXNoYXJlZCBcCisJICAgICAgICAtLWRpc2FibGUtYmlnLWNvcmUgXAorCSAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorCSAgICAgICAgLS13aXRoLXRpY2xpYiBcCisJICAgICAgICAtLXdpdGgtdGVybWxpYj10aW5mbyBcCisJICAgICAgICAtLWVuYWJsZS1zaWd3aW5jaCBcCisJICAgICAgICAtLWVuYWJsZS1wYy1maWxlcyBcCisJICAgICAgICAtLWRpc2FibGUtcnBhdGgtaGFjayBcCisJCSR7RVhDT05GSUdfQVJHU30gXAorCSAgICAgICAgLS13aXRoLW1hbnBhZ2UtZm9ybWF0PW5vcm1hbCBcCisJICAgICAgICAiJEAiIHx8IHJldHVybiAxCisJY2QgLi4KK30KKworIyBPdmVycmlkZSB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgYXV0b3Rvb2xzIGNsYXNzOyBuY3Vyc2VzIHJlcXVpcmVzIGEKKyMgcGF0Y2hlZCBhdXRvY29uZjIxMyB0byBnZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdC4gVGhpcyBhdXRvY29uZgorIyBpcyBub3QgYXZhaWxhYmxlIHNvIHRoYXQgdGhlIHNoaXBwZWQgc2NyaXB0IHdpbGwgYmUgdXNlZC4KK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgIyBjaGVjayBkb2VzIG5vdCB3b3JrIHdpdGggY3Jvc3MtY29tcGlsaW5nIGFuZCBpcyBnZW5lcmFsbHkKKyAgICAgICAgIyBicm9rZW4gYmVjYXVzZSBpdCByZXF1aXJlcyBzdGRpbiB0byBiZSBwb2xsYWJsZSAod2hpY2ggaXMKKyAgICAgICAgIyBub3QgdGhlIGNhc2UgZm9yIC9kZXYvbnVsbCByZWRpcmVjdGlvbnMpCisgICAgICAgIGV4cG9ydCBjZl9jdl93b3JraW5nX3BvbGw9eWVzCisJI1JlbW92ZSAke2luY2x1ZGVkaXJ9IGZyb20gQ1BQRkxBR1MsIG5lZWQgZm9yIGNyb3NzIGNvbXBpbGUKKwlzZWQgLWkgJ3MjLUkke2NmX2luY2x1ZGVkaXJ9IyNnJyAke1N9L2NvbmZpZ3VyZSB8fCBkaWUgInNlZCBDUFBGTEFHUyIKKworCSMgVGhlIC0tZW5hYmxlLXBjLWZpbGVzIHJlcXVpcmVzIFBLR19DT05GSUdfTElCRElSIGV4aXN0ZWQKKwlta2RpciAtcCAke1BLR19DT05GSUdfTElCRElSfQorCSggY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICkKKwluY3Vyc2VzX2NvbmZpZ3VyZSAibmFycm93YyIgfHwgXAorCQlyZXR1cm4gMQorCSEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKwkJbmN1cnNlc19jb25maWd1cmUgIndpZGVjIiAiLS1lbmFibGUtd2lkZWMiICItLXdpdGhvdXQtcHJvZ3MiCisKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djIGxpYnMKKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djL3Byb2dzCisKKyAgICAgICAgISAke0VOQUJMRV9XSURFQ30gfHwgXAorICAgICAgICAgICAgb2VfcnVubWFrZSAtQyB3aWRlYyBsaWJzCit9CisKKyMgc2V0IG9mIGV4cGVjdGVkIGRpZmZlcmVuY2VzIGJldHdlZW4gbmFycm93YyBhbmQgd2lkZWMgaGVhZGVyCisjCisjIFRPRE86IHRoZSBOQ1VSU0VTX0NIX1QgZGlmZmVyZW5jZSBjYW4gY2F1c2UgcmVhbCBwcm9ibGVtcyA6KAorX3VuaWZkZWZfY2xlYW51cCA9ICIgXAorICAtZSAnXCEvXCogXCRJZDogY3Vyc2VzLndpZGUsdiEsXCEvXCogXCRJZDogY3Vyc2VzLnRhaWwsdiFkJyBcCisgIC1lICcvXiNkZWZpbmUgTkNVUlNFU19DSF9UIC9kJyBcCisgIC1lICcvXiNpbmNsdWRlIDx3Y2hhci5oPi9kJyBcCisgIC1lICdcIV4vXCogLiogXCovIWQnIFwKKyIKKworZG9fdGVzdFtkZXBlbmRzXSA9ICJ1bmlmZGVmLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fdGVzdFtkaXJzXSA9ICIke1N9IgorZG9fdGVzdCgpIHsKKyAgICAgICAgJHtFTkFCTEVfV0lERUN9IHx8IHJldHVybiAwCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgbmFycm93IGFuZCB3aWRlYyBoZWFkZXIgYXJlIGNvbXBhdGlibGUKKyAgICAgICAgIyBhbmQgZGlmZmVyIG9ubHkgaW4gbWlub3IgZGV0YWlscy4KKyAgICAgICAgdW5pZmRlZiAtayBuYXJyb3djL2luY2x1ZGUvY3Vyc2VzLmggfCBcCisgICAgICAgICAgICBzZWQgJHtfdW5pZmRlZl9jbGVhbnVwfSA+IGN1cnNlcy1uYXJyb3djLmgKKyAgICAgICAgdW5pZmRlZiAtayB3aWRlYy9pbmNsdWRlL2N1cnNlcy5oIHwgXAorICAgICAgICAgICAgc2VkICR7X3VuaWZkZWZfY2xlYW51cH0gPiBjdXJzZXMtd2lkZWMuaAorCisgICAgICAgIGRpZmYgY3Vyc2VzLW5hcnJvd2MuaCBjdXJzZXMtd2lkZWMuaAorfQorCisjIFNwbGl0IG9yaWdpbmFsIF9pbnN0YWxsX29wdHMgdG8gdHdvIHBhcnRzLgorIyBPbmUgaXMgdGhlIG9wdGlvbnMgdG8gaW5zdGFsbCBjb250ZW50cywgdGhlIG90aGVyIGlzIHRoZSBwYXJhbWV0ZXJzIFwKKyMgd2hlbiBydW5uaW5nIGNvbW1hbmQgIm1ha2UgaW5zdGFsbCIKK19pbnN0YWxsX29wdHMgPSAiXAorICBpbnN0YWxsLmxpYnMgaW5zdGFsbC5pbmNsdWRlcyBpbnN0YWxsLm1hbiBcCisiCitfaW5zdGFsbF9jZmdzID0gIlwKKyAgREVTVERJUj0nJHtEfScgXAorICBQS0dfQ09ORklHX0xJQkRJUj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICAjIE9yZGVyIG9mIGluc3RhbGxhdGlvbiBpcyBpbXBvcnRhbnQ7IHdpZGVjIGluc3RhbGxzIGEgJ2N1cnNlcy5oJworICAgICAgICAjIGhlYWRlciB3aXRoIG1vcmUgZGVmaW5pdGlvbnMgYW5kIG11c3QgYmUgaW5zdGFsbGVkIGxhc3QgaGVuY2UuCisgICAgICAgICMgQ29tcGF0aWJpbGl0eSBvZiB0aGVzZSBoZWFkZXJzIHdpbGwgYmUgY2hlY2tlZCBpbiAnZG9fdGVzdCgpJy4KKyAgICAgICAgb2VfcnVubWFrZSAtQyBuYXJyb3djICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5wcm9ncworCisgICAgICAgICMgVGhlIGluc3RhbGwuZGF0YSBzaG91bGQgcnVuIGFmdGVyIGluc3RhbGwubGlicywgb3RoZXJ3aXNlCisgICAgICAgICMgdGhlcmUgd291bGQgYmUgYSByYWNlIGlzc3VlIGluIGEgdmVyeSBjcml0aWNhbCBjb25kaXRvbiwgc2luY2UKKyAgICAgICAgIyB0aWMgd2lsbCBiZSBydW4gYnkgaW5zdGFsbC5kYXRhLCBhbmQgdGljIG5lZWRzIGxpYnRpbmZvLnNvCisgICAgICAgICMgd2hpY2ggd291bGQgYmUgcmVnZW5lcmF0ZWQgYnkgaW5zdGFsbC5saWJzLgorICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MgJHtfaW5zdGFsbF9jZmdzfSBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC5kYXRhCisKKworICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICBvZV9ydW5tYWtlIC1DIHdpZGVjICR7X2luc3RhbGxfY2Znc30gJHtfaW5zdGFsbF9vcHRzfQorCisgICAgICAgIGNkIG5hcnJvd2MKKworICAgICAgICAjIGluY2x1ZGUgc29tZSBiYXNpYyB0ZXJtaW5mbyBmaWxlcworICAgICAgICAjIHN0b2xlbiA7KSBmcm9tIGdlbnRvbyBhbmQgbW9kaWZpZWQgYSBiaXQKKyAgICAgICAgZm9yIHggaW4gYW5zaSBjb25zb2xlIGR1bWIgbGludXggcnh2dCBzY3JlZW4gc2NyZWVuLTI1NmNvbG9yIHN1biB2dDUyIHZ0MTAwIHZ0MTAyIHZ0MjAwIHZ0MjIwIHh0ZXJtLWNvbG9yIHh0ZXJtLXhmcmVlODYgeHRlcm0tMjU2Y29sb3IKKyAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBsb2NhbCB0ZXJtZmlsZT0iJChmaW5kICIke0R9JHtkYXRhZGlyfS90ZXJtaW5mby8iIC1uYW1lICIke3h9IiAyPi9kZXYvbnVsbCkiCisgICAgICAgICAgICAgICAgbG9jYWwgYmFzZWRpcj0iJChiYXNlbmFtZSAkKGRpcm5hbWUgIiR7dGVybWZpbGV9IikpIgorCisgICAgICAgICAgICAgICAgaWYgWyAtbiAiJHt0ZXJtZmlsZX0iIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0KKyAgICAgICAgICAgICAgICAgICAgICAgIG12ICR7dGVybWZpbGV9ICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vCisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtcyAvZXRjL3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7RH0ke2RhdGFkaXJ9L3Rlcm1pbmZvLyR7YmFzZWRpcn0vJHt4fQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgIyBpIHRoaW5rIHdlIGNhbiB1c2UgeHRlcm0tY29sb3IgYXMgZGVmYXVsdCB4dGVybQorICAgICAgICBpZiBbIC1lICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0tY29sb3IgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgbG4gLXNmIHh0ZXJtLWNvbG9yICR7RH0ke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvL3gveHRlcm0KKyAgICAgICAgZmkKKworICAgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3Rlcm1pbmZvCisKKyAgICAgICAgIyBjcmVhdGUgbGlua2VyIHNjcmlwdHMgZm9yIGxpYmN1cnNlcy5zbyBhbmQgbGlibmN1cnNlcyB0bworICAgICAgICAjIGxpbmsgYWdhaW5zdCAtbHRpbmZvIHdoZW4gbmVlZGVkLiBTb21lIGJ1aWxkcyBtaWdodCBicmVhaworICAgICAgICAjIGVsc2Ugd2hlbiAnLVdsLC0tbm8tY29weS1kdC1uZWVkZWQtZW50cmllcycgaGFzIGJlZW4gc2V0IGluCisgICAgICAgICMgbGlua2VyIGZsYWdzLgorICAgICAgICBmb3IgaSBpbiBsaWJuY3Vyc2VzIGxpYm5jdXJzZXN3OyBkbworICAgICAgICAgICAgICAgIGY9JHtEfSR7bGliZGlyfS8kaS5zbworICAgICAgICAgICAgICAgIHRlc3QgLWggJGYgfHwgY29udGludWUKKyAgICAgICAgICAgICAgICBybSAtZiAkZgorICAgICAgICAgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nICA+JGYKKyAgICAgICAgICAgICAgICBlY2hvICJJTlBVVCgkaS5zby41IEFTX05FRURFRCgtbHRpbmZvKSkiID4+JGYKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgbGliY3Vyc2VzIGlzIGxpbmtlZCBzbyB0aGF0IGl0IGdldHMgLWx0aW5mbworICAgICAgICAjIGFsc28sIHRoaXMgc2hvdWxkIGJlIGFkZHJlc3NlZCB1cHN0cmVhbSByZWFsbHkuCisgICAgICAgIGxuIC1zZiBsaWJuY3Vyc2VzLnNvICR7RH0ke2xpYmRpcn0vbGliY3Vyc2VzLnNvCisKKyAgICAgICAgIyBjcmVhdGUgbGlidGVybWNhcC5zbyBsaW5rZXIgc2NyaXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgICAgIGY9JHtEfSR7bGliZGlyfS9saWJ0ZXJtY2FwLnNvCisgICAgICAgIGVjaG8gJy8qIEdOVSBsZCBzY3JpcHQgKi8nID4kZgorICAgICAgICBlY2hvICdJTlBVVChBU19ORUVERUQoLWx0aW5mbykpJyA+PiRmCisKKyAgICAgICAgaWYgWyAhIC1kICIke0R9JHtiYXNlX2xpYmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICMgU2V0dGluZyBiYXNlX2xpYmRpciB0byBsaWJkaXIgYXMgaXMgZG9uZSBpbiB0aGUgLW5hdGl2ZQorICAgICAgICAgICAgIyBjYXNlIHdpbGwgc2tpcCB0aGlzIGNvZGUKKyAgICAgICAgICAgIG1rZGlyICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2VzLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICAgICAgbXYgJHtEfSR7bGliZGlyfS9saWJuY3Vyc2Vzdy5zby4qICR7RH0ke2Jhc2VfbGliZGlyfQorCisgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICBybSAke0R9JHtsaWJkaXJ9L2xpYnRpbmZvLnNvCisKKyAgICAgICAgICAgICMgVXNlIGxuciB0byBlbnN1cmUgdGhpcyBpcyBhIHJlbGF0aXZlIGxpbmsgZGVzcGl0ZSBhYnNvbHV0ZSBwYXRocworICAgICAgICAgICAgIyAoYXMgd2UgY2FuJ3Qga25vdyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYmFzZV9saWJkaXIgYW5kIGxpYmRpcikuCisgICAgICAgICAgICAjIEF0IHNvbWUgcG9pbnQgd2UgY2FuIHJlbHkgb24gY29yZXV0aWxzIDguMTYgd2hpY2ggaGFzIGxuIC1yLgorICAgICAgICAgICAgbG5yICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ0aW5mby5zby41ICR7RH0ke2xpYmRpcn0vbGlidGluZm8uc28KKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZCAiJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyIgXTsgdGhlbgorICAgICAgICAgICAgZm9yIGYgaW4gYGZpbmQgJHtEfSR7aW5jbHVkZWRpcn0vbmN1cnNlcyAtbmFtZSAiKi5oImAKKyAgICAgICAgICAgIGRvCisJICAgICAgICBmPWBiYXNlbmFtZSAkZmAKKwkgICAgICAgIHRlc3QgLWUgJHtEfSR7aW5jbHVkZWRpcn0vJGYgJiYgY29udGludWUKKyAgICAgICAgICAgICAgICBsbiAtc2YgbmN1cnNlcy8kZiAke0R9JHtpbmNsdWRlZGlyfS8kZgorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBvZV9tdWx0aWxpYl9oZWFkZXIgY3Vyc2VzLmgKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCIke2xpYmRpcn0iKQorICAgIGJhc2VfbGliZGlyID0gZC5leHBhbmQoIiR7YmFzZV9saWJkaXJ9IikKKyAgICBwbmJhc2UgPSBkLmV4cGFuZCgiJHtQTn0tbGliJXMiKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBpZiBsaWJkaXIgaXMgbm90IGJhc2VfbGliZGlyOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBiYXNlX2xpYmRpciwgJ15saWIoLiopXC5zb1wuLionLCBwbmJhc2UsICduY3Vyc2VzICVzIGxpYnJhcnknLCBwcmVwZW5kPVRydWUsIGV4dHJhX2RlcGVuZHMgPSAnJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV9uY3Vyc2VzLXRvb2xzX2NsYXNzLXRhcmdldCA9ICJjbGVhciByZXNldCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyArPSAiIFwKKyAgJHtQTn0tdG9vbHMgXAorICAke1BOfS10ZXJtaW5mbyBcCisgICR7UE59LXRlcm1pbmZvLWJhc2UgXAorIgorCitGSUxFU18ke1BOfSA9ICJcCisgICR7YmluZGlyfS90cHV0IFwKKyAgJHtiaW5kaXJ9L3RzZXQgXAorICAke2JpbmRpcn0vbmN1cnNlczUtY29uZmlnIFwKKyAgJHtiaW5kaXJ9L25jdXJzZXN3NS1jb25maWcgXAorICAke2RhdGFkaXJ9L3RhYnNldCBcCisiCisKKyMgVGhpcyBrZWVwcyBvbmx5IHRwdXQvdHNldCBpbiBuY3Vyc2VzCisjIGNsZWFyL3Jlc2V0IGFyZSBpbiBhbHJlYWR5IGJ1c3lib3gKK0ZJTEVTXyR7UE59LXRvb2xzID0gIlwKKyAgJHtiaW5kaXJ9L3RpYyBcCisgICR7YmluZGlyfS90b2UgXAorICAke2JpbmRpcn0vaW5mb3RvY2FwIFwKKyAgJHtiaW5kaXJ9L2NhcHRvaW5mbyBcCisgICR7YmluZGlyfS9pbmZvY21wIFwKKyAgJHtiaW5kaXJ9L2NsZWFyJHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3Jlc2V0JHtAWycnLCAnLiR7QlBOXHg3ZCddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IFwKKyAgJHtiaW5kaXJ9L3RhY2sgXAorICAke2JpbmRpcn0vdGFicyBcCisiCisKKyMgJ3Jlc2V0JyBpcyBhIHN5bWxpbmsgdG8gJ3RzZXQnIHdoaWNoIGlzIGluIHRoZSAnbmN1cnNlcycgcGFja2FnZQorUkRFUEVORFNfJHtQTn0tdG9vbHMgPSAiJHtQTn0iCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvID0gIlwKKyAgJHtkYXRhZGlyfS90ZXJtaW5mbyBcCisiCisKK0ZJTEVTXyR7UE59LXRlcm1pbmZvLWJhc2UgPSAiXAorICAke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvIFwKKyIKKworUlNVR0dFU1RTXyR7UE59LWxpYnRpbmZvID0gIiR7UE59LXRlcm1pbmZvIgorUlJFQ09NTUVORFNfJHtQTn0tbGlidGluZm8gPSAiJHtQTn0tdGVybWluZm8tYmFzZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc181LjkuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDI3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXNfNS45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbmN1cnNlcy5pbmMKKworUkVWSVNJT04gPSAiMjAxNTAzMjkiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdGljLWhhbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZy5jYWNoZSBcCisiCitTID0gIiR7V09SS0RJUn0vJHtCUH0tJHtSRVZJU0lPTn0iCitTUkNfVVJJW21kNXN1bV0gPSAiY2VlOTkxZDA5ZTY5ZTYwZWJlZGVmNDI0ODA0YzUyZDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2NGY0MGU0ZGNlNzNlM2FhODNkMTViZDkyNTdjNmVmZjg3OTBlYzQxMTUwZjA5MzhiZDg3YzBlYjc1ODI4ZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvc2l0ZV9jb25maWcvaGVhZGVycyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODdiN2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsNSBAQAorY3Vyc2VzLmgKK25jdXJzZXMvY3Vyc2VzLmgKK25jdXJzZXMuaAorbmN1cnNlcy90ZXJtY2FwLmgKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL2hvc3RzIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL2hvc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzMyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMKQEAgLTAsMCArMSwyIEBACisxMjcuMC4wLjEJbG9jYWxob3N0LmxvY2FsZG9tYWluCQlsb2NhbGhvc3QKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlL25ldGJhc2UtYWRkLXJwY2JpbmQtYXMtYW4tYWxpYXMtdG8tc3VucnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2UyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorbmV0YmFzZTogYWRkIHJwY2JpbmQgYXMgYW4gYWxpYXMgdG8gc3VucnBjCisKK3RoZSBwYXRjaCBjb21lcyBmcm9tOgoraHR0cHM6Ly9idWdzLmFyY2hsaW51eC5vcmcvdGFzay8yMDI3MworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXRjLXJwYyAgICAgIHwgICAgMiArLQorIGV0Yy1zZXJ2aWNlcyB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXRjLXJwYyBiL2V0Yy1ycGMKK2luZGV4IDFiMzA2MjUuLjlhOWE4MWEgMTAwNjQ0CistLS0gYS9ldGMtcnBjCisrKysgYi9ldGMtcnBjCitAQCAtMSw3ICsxLDcgQEAKKyAjIFRoaXMgZmlsZSBjb250YWlucyB1c2VyIHJlYWRhYmxlIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgcnBjCisgIyBwcm9ncmFtIG51bWJlcnMuCisgCistcG9ydG1hcHBlcgkxMDAwMDAJcG9ydG1hcCBzdW5ycGMKKytwb3J0bWFwcGVyCTEwMDAwMAlwb3J0bWFwIHN1bnJwYyBycGNiaW5kCisgcnN0YXRkCQkxMDAwMDEJcnN0YXQgcnN0YXRfc3ZjIHJ1cCBwZXJmbWV0ZXIKKyBydXNlcnNkCQkxMDAwMDIJcnVzZXJzCisgbmZzCQkxMDAwMDMJbmZzcHJvZworZGlmZiAtLWdpdCBhL2V0Yy1zZXJ2aWNlcyBiL2V0Yy1zZXJ2aWNlcworaW5kZXggOWQ2NGE1Mi4uYTE5ZjdjOCAxMDA2NDQKKy0tLSBhL2V0Yy1zZXJ2aWNlcworKysrIGIvZXRjLXNlcnZpY2VzCitAQCAtNzIsOCArNzIsOCBAQCBwb3AyCQkxMDkvdGNwCQlwb3N0b2ZmaWNlIHBvcC0yICMgUE9QIHZlcnNpb24gMgorIHBvcDIJCTEwOS91ZHAJCXBvcC0yCisgcG9wMwkJMTEwL3RjcAkJcG9wLTMJCSMgUE9QIHZlcnNpb24gMworIHBvcDMJCTExMC91ZHAJCXBvcC0zCistc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyCSMgUlBDIDQuMCBwb3J0bWFwcGVyCistc3VucnBjCQkxMTEvdWRwCQlwb3J0bWFwcGVyCisrc3VucnBjCQkxMTEvdGNwCQlwb3J0bWFwcGVyIHJwY2JpbmQJIyBSUEMgNC4wIHBvcnRtYXBwZXIKKytzdW5ycGMJCTExMS91ZHAJCXBvcnRtYXBwZXIgcnBjYmluZAorIGF1dGgJCTExMy90Y3AJCWF1dGhlbnRpY2F0aW9uIHRhcCBpZGVudAorIHNmdHAJCTExNS90Y3AKKyB1dWNwLXBhdGgJMTE3L3RjcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2VfNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDg5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2VfNS4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQmFzaWMgVENQL0lQIG5ldHdvcmtpbmcgc3VwcG9ydCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGZvciBiYXNpYyBUQ1AvSVAgYmFzZWQgbmV0d29ya2luZyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL25ldGJhc2UiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9M2RkNjE5MmQzMDZmNTgyZGVlNzY4N2RhM2Q4NzQ4YWIiCitQRSA9ICIxIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9uL25ldGJhc2UvbmV0YmFzZV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaG9zdHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNjM3YTI3ZmQzZGUwMmEyNzhkMmI1YmU3ZTY1NThjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MWY2YzY5Nzk1MDQ0ZDYyYjhhZDk1OWNmOWRhZjA0OWQwNTQ1ZmQ0NjZjNTI4NjBhZDNmOTMzYjFlOTdiODhiIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjggJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0cyAke0R9JHtzeXNjb25mZGlyfS9ob3N0cworCWluc3RhbGwgLW0gMDY0NCBldGMtcnBjICR7RH0ke3N5c2NvbmZkaXJ9L3JwYworCWluc3RhbGwgLW0gMDY0NCBldGMtcHJvdG9jb2xzICR7RH0ke3N5c2NvbmZkaXJ9L3Byb3RvY29scworCWluc3RhbGwgLW0gMDY0NCBldGMtc2VydmljZXMgJHtEfSR7c3lzY29uZmRpcn0vc2VydmljZXMKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaG9zdHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9vcy1yZWxlYXNlL29zLXJlbGVhc2UuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9vcy1yZWxlYXNlL29zLXJlbGVhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0MzFkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYgpAQCAtMCwwICsxLDQ5IEBACitpbmhlcml0IGFsbGFyY2gKKworU1VNTUFSWSA9ICJPcGVyYXRpbmcgc3lzdGVtIGlkZW50aWZpY2F0aW9uIgorREVTQ1JJUFRJT04gPSAiVGhlIC9ldGMvb3MtcmVsZWFzZSBmaWxlIGNvbnRhaW5zIG9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmljYXRpb24gZGF0YS4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKKyMgT3RoZXIgdmFsaWQgZmllbGRzOiBCVUlMRF9JRCBJRF9MSUtFIEFOU0lfQ09MT1IgQ1BFX05BTUUKKyMgICAgICAgICAgICAgICAgICAgICBIT01FX1VSTCBTVVBQT1JUX1VSTCBCVUdfUkVQT1JUX1VSTAorT1NfUkVMRUFTRV9GSUVMRFMgPSAiSUQgSURfTElLRSBOQU1FIFZFUlNJT04gVkVSU0lPTl9JRCBQUkVUVFlfTkFNRSIKKworSUQgPSAiJHtESVNUUk99IgorTkFNRSA9ICIke0RJU1RST19OQU1FfSIKK1ZFUlNJT04gPSAiJHtESVNUUk9fVkVSU0lPTn0ke0AnICglcyknICUgRElTVFJPX0NPREVOQU1FIGlmICdESVNUUk9fQ09ERU5BTUUnIGluIGQgZWxzZSAnJ30iCitWRVJTSU9OX0lEID0gIiR7RElTVFJPX1ZFUlNJT059IgorUFJFVFRZX05BTUUgPSAiJHtESVNUUk9fTkFNRX0gJHtWRVJTSU9OfSIKK0JVSUxEX0lEID89ICIke0RBVEVUSU1FfSIKK0JVSUxEX0lEW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKKworcHl0aG9uIGRvX2NvbXBpbGUgKCkgeworICAgIGltcG9ydCBzaHV0aWwKKyAgICB3aXRoIG9wZW4oZC5leHBhbmQoJyR7Qn0vb3MtcmVsZWFzZScpLCAndycpIGFzIGY6CisgICAgICAgIGZvciBmaWVsZCBpbiBkLmdldFZhcignT1NfUkVMRUFTRV9GSUVMRFMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcihmaWVsZCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3swfT17MX1cbicuZm9ybWF0KGZpZWxkLCB2YWx1ZSkpCisgICAgaWYgZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBycG1fZ3BnX3B1YmtleSA9IGQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgIG9zLm1rZGlyKCcke0J9L3JwbS1ncGcnKQorICAgICAgICBkaXN0cm9fdmVyc2lvbiA9IHNlbGYuZC5nZXRWYXIoJ0RJU1RST19WRVJTSU9OJywgVHJ1ZSkgb3IgIm9lLjAiCisgICAgICAgIHNodXRpbC5jb3B5MihycG1fZ3BnX3B1YmtleSwgZC5leHBhbmQoJyR7Qn0vcnBtLWdwZy9SUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCit9Citkb19jb21waWxlW3ZhcmRlcHNdICs9ICIke09TX1JFTEVBU0VfRklFTERTfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCBvcy1yZWxlYXNlICR7RH0ke3N5c2NvbmZkaXJ9LworCisgICAgaWYgWyAtZCAicnBtLWdwZyIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9wa2kiCisgICAgICAgIGNwIC1yICJycG0tZ3BnIiAiJHtEfSR7c3lzY29uZmRpcn0vcGtpLyIKKyAgICBmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXNkay1ob3N0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNmE1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKQEAgLTAsMCArMSwzMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQKKyMKKworU1VNTUFSWSA9ICJIb3N0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsgb3IgZXh0ZXJuYWwgdG9vbGNoYWluIgorUFIgPSAicjEyIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIG5hdGl2ZXNkaworCitQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZID0gIjEiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstcWVtdSBcCisgICAgbmF0aXZlc2RrLXFlbXUtaGVscGVyIFwKKyAgICBuYXRpdmVzZGstcHNldWRvIFwKKyAgICBuYXRpdmVzZGstdW5mczMgXAorICAgIG5hdGl2ZXNkay1vcGtnIFwKKyAgICBuYXRpdmVzZGstbGlidG9vbCBcCisgICAgbmF0aXZlc2RrLWF1dG9jb25mIFwKKyAgICBuYXRpdmVzZGstYXV0b21ha2UgXAorICAgIG5hdGl2ZXNkay1zaGFkb3cgXAorICAgIG5hdGl2ZXNkay1tYWtlZGV2cyBcCisgICAgbmF0aXZlc2RrLXNtYXJ0cG0gXAorICAgIG5hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHQgXAorICAgICIKKworUkRFUEVORFNfJHtQTn1fZGFyd2luID0gIlwKKyAgICBuYXRpdmVzZGstcGtnY29uZmlnIFwKKyAgICBuYXRpdmVzZGstb3BrZyBcCisgICAgbmF0aXZlc2RrLWxpYnRvb2wgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDBiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1iYXNlLmJiCkBAIC0wLDAgKzEsMzY5IEBACitTVU1NQVJZID0gIk1lcmdlIG1hY2hpbmUgYW5kIGRpc3RybyBvcHRpb25zIHRvIGNyZWF0ZSBhIGJhc2ljIG1hY2hpbmUgdGFzay9wYWNrYWdlIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyODMiCisKKyMKKyMgcGFja2FnZXMgd2hpY2ggY29udGVudCBkZXBlbmQgb24gTUFDSElORV9GRUFUVVJFUyBuZWVkIHRvIGJlIE1BQ0hJTkVfQVJDSAorIworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKK2luaGVyaXQgYmx1ZXRvb3RoCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAnIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgICAgICAgICBwYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlIFwKKyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAicGFja2FnZWdyb3VwLWJhc2UtYWNwaSIsICIiLGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhbHNhIiwgInBhY2thZ2Vncm91cC1iYXNlLWFsc2EiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFwbSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1hcG0iLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImV4dDIiLCAicGFja2FnZWdyb3VwLWJhc2UtZXh0MiIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidmZhdCIsICJwYWNrYWdlZ3JvdXAtYmFzZS12ZmF0IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJpcmRhIiwgInBhY2thZ2Vncm91cC1iYXNlLWlyZGEiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAia2V5Ym9hcmQiLCAicGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjaSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1wY2kiLCAiIixkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGNtY2lhIiwgInBhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGhvbmUiLCAicGFja2FnZWdyb3VwLWJhc2UtcGhvbmUiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInNlcmlhbCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmdhZGdldCIsICJwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInVzYmhvc3QiLCAicGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJibHVldG9vdGgiLCAicGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndpZmkiLCAicGFja2FnZWdyb3VwLWJhc2Utd2lmaSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICIzZyIsICJwYWNrYWdlZ3JvdXAtYmFzZS0zZyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJuZmMiLCAicGFja2FnZWdyb3VwLWJhc2UtbmZjIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImNyYW1mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXBzZWMiLCAicGFja2FnZWdyb3VwLWJhc2UtaXBzZWMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiaXB2NiIsICJwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm5mcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1uZnMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAicHBwIiwgInBhY2thZ2Vncm91cC1iYXNlLXBwcCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzbWJmcyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ6ZXJvY29uZiIsICJwYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiIsICIiLCBkKX0gXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJworCisjIE92ZXJyaWRlIGJ5IGRpc3RybyBpZiBuZWVkZWQKK1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzID89ICJrZXltYXBzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlIGNvbnRhaW4gc3R1ZmYgbmVlZGVkIGZvciBiYXNlIHN5c3RlbSAobWFjaGluZSByZWxhdGVkKQorIworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UgPSAiXAorICAgIHBhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSBcCisgICAgcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSBcCisgICAgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIG1vZHVsZS1pbml0LXRvb2xzIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhcG0nLCAncGFja2FnZWdyb3VwLWJhc2UtYXBtJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdhY3BpJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFjcGknLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2tleWJvYXJkJywgJ3BhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdwaG9uZScsICdwYWNrYWdlZ3JvdXAtYmFzZS1waG9uZScsICcnLGQpfSBcCisgICAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWFsc2EnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdleHQyJywgJ3BhY2thZ2Vncm91cC1iYXNlLWV4dDInLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd2ZmF0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXZmYXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdpcmRhJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlyZGEnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY2knLCAncGFja2FnZWdyb3VwLWJhc2UtcGNpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmdhZGdldCcsICdwYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdibHVldG9vdGgnLCAncGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnd2lmaScsICdwYWNrYWdlZ3JvdXAtYmFzZS13aWZpJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAnM2cnLCAncGFja2FnZWdyb3VwLWJhc2UtM2cnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICduZmMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZjJywgJycsZCl9IFwKKyAgICBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICduZnMnLCAncGFja2FnZWdyb3VwLWJhc2UtbmZzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2NyYW1mcycsICdwYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc21iZnMnLCAncGFja2FnZWdyb3VwLWJhc2Utc21iZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdwYWNrYWdlZ3JvdXAtYmFzZS1pcHY2JywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwc2VjJywgJ3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BwcCcsICdwYWNrYWdlZ3JvdXAtYmFzZS1wcHAnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAncGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYnLCAnJyxkKX0gXAorICAgICIKKworCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1ubHMtdXRmOCBcCisgICAga2VybmVsLW1vZHVsZS1pbnB1dCBcCisgICAga2VybmVsLW1vZHVsZS11aW5wdXQgXAorICAgIGtlcm5lbC1tb2R1bGUtcnRjLWRldiBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtcHJvYyBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtc3lzZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtdW5peCIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgPSAiXAorICAgIHBhY2thZ2Vncm91cC1iYXNlIFwKKyAgICAke0FERF9XSUZJfSBcCisgICAgJHtBRERfQlR9IFwKKyAgICAke0FERF8zR30gXAorICAgICR7QUREX05GQ30gXAorICAgICIKKworQUREX1dJRkkgPSAiIgorQUREX0JUID0gIiIKK0FERF8zRyA9ICIiCitBRERfTkZDID0gIiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIElmIERpc3RybyB3YW50IHdpZmkgYW5kIG1hY2hpbmUgZmVhdHVyZSB3aWZpL3BjaS9wY21jaWEvdXNiaG9zdCAob25lIG9mIHRoZW0pCisgICAgIyB0aGVuIGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBpbiBwYWNrYWdlZ3JvdXAtYmFzZQorCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gc2V0KGQuZ2V0VmFyKCJESVNUUk9fRkVBVFVSRVMiLCBUcnVlKS5zcGxpdCgpKQorICAgIG1hY2hpbmVfZmVhdHVyZXM9IHNldChkLmdldFZhcigiTUFDSElORV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkpCisKKyAgICBpZiAiYmx1ZXRvb3RoIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiYmx1ZXRvb3RoIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9CVCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGgiKQorCisgICAgaWYgIndpZmkiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJ3aWZpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIGFuZCAoInBjbWNpYSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAicGNpIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9XSUZJIiwgInBhY2thZ2Vncm91cC1iYXNlLXdpZmkiKQorCisgICAgaWYgIjNnIiBpbiBkaXN0cm9fZmVhdHVyZXMgYW5kIG5vdCAiM2ciIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgicGNtY2lhIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJwY2kiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREXzNHIiwgInBhY2thZ2Vncm91cC1iYXNlLTNnIikKKworICAgIGlmICJuZmMiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJuZmMiIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfTkZDIiwgInBhY2thZ2Vncm91cC1iYXNlLW5mYyIpCit9CisKKyMKKyMgcGFja2FnZXMgYWRkZWQgYnkgZGlzdHJpYnV0aW9uCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST30gZXh0cmFzIgorREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfREVQRU5EU30iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfUkRFUEVORFN9IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworIworIyBwYWNrYWdlcyBhZGRlZCBieSBtYWNoaW5lIGNvbmZpZworIworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIiR7TUFDSElORX0gZXh0cmFzIgorU1VNTUFSWV9wYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlID0gIkV4dHJhIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGZ1bGx5IHN1cHBvcnQgJHtNQUNISU5FfSBoYXJkd2FyZSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JERVBFTkRTfSIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTfSIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCA9ICJLZXlib2FyZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2tleW1hcHN9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBjaSA9ICJQQ0kgYnVzIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY2kgPSAiXAorICAgIHBjaXV0aWxzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFjcGkgPSAiQUNQSSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWNwaSA9ICJcCisgICAgYWNwaWQgXAorICAgIGxpYmFjcGkgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJBUE0gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFwbSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYXBtfSBcCisgICAgYXBtZCIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1leHQyID0gImV4dDIgZmlsZXN5c3RlbSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtZXh0MiA9ICJcCisgICAgaGRwYXJtIFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdmZhdCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1tc2RvcyBcCisgICAga2VybmVsLW1vZHVsZS12ZmF0IFwKKyAgICBrZXJuZWwtbW9kdWxlLW5scy1pc284ODU5LTEgXAorICAgIGtlcm5lbC1tb2R1bGUtbmxzLWNwNDM3IFwKKyAgICBkb3Nmc3Rvb2xzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiQUxTQSBzb3VuZCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWxzYSA9ICJcCisgICAgYWxzYS11dGlscy1hbHNhY3RsIFwKKyAgICBhbHNhLXV0aWxzLWFsc2FtaXhlciBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfYWxzYS1zdGF0ZX0iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWFsc2EgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtc25kLW1peGVyLW9zcyBcCisgICAga2VybmVsLW1vZHVsZS1zbmQtcGNtLW9zcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiUEMgY2FyZCBzbG90IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wY21jaWEgPSAiXAorICAgIHBjbWNpYXV0aWxzIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wY21jaWEgXAorICAgIGtlcm5lbC1tb2R1bGUtYWlyby1jcyBcCisgICAga2VybmVsLW1vZHVsZS1wY25ldC1jcyBcCisgICAga2VybmVsLW1vZHVsZS1zZXJpYWwtY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtaWRlLWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlkZS1kaXNrIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCAna2VybmVsLW1vZHVsZS1ob3N0YXAtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLW9yaW5vY28tY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLXNwZWN0cnVtLWNzJywgJycsZCl9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJCbHVldG9vdGggc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCA9ICJcCisgICAgJHtCTFVFWn0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdhbHNhJywgJ2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXonLCAnJyxkKX0gXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWJsdWV0b290aCBcCisgICAga2VybmVsLW1vZHVsZS1sMmNhcCBcCisgICAga2VybmVsLW1vZHVsZS1yZmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaGNpLXZoY2kgXAorICAgIGtlcm5lbC1tb2R1bGUtYm5lcCBcCisgICAga2VybmVsLW1vZHVsZS1oaWRwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWhjaS11YXJ0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNjbyBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAna2VybmVsLW1vZHVsZS1oY2ktdXNiJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtYmx1ZXRvb3RoM2MtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1ibHVlY2FyZC1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWJsdWV0b290aHVhcnQtY3MnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1kdGwxLWNzJywgJycsZCl9IFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXJkYSA9ICJJckRBIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBpcmRhLXV0aWxzIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YWZpY3AtaXIgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJkYSBcCisgICAga2VybmVsLW1vZHVsZS1pcmNvbW0gXAorICAgIGtlcm5lbC1tb2R1bGUtaXJjb21tLXR0eSBcCisgICAga2VybmVsLW1vZHVsZS1pcmxhbiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwcHAnLCAna2VybmVsLW1vZHVsZS1pcm5ldCcsICcnLGQpfSBcCisgICAga2VybmVsLW1vZHVsZS1pcnBvcnQgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHkgXAorICAgIGtlcm5lbC1tb2R1bGUtaXJ0dHktc2lyIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNpci1kZXYgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ2tlcm5lbC1tb2R1bGUtaXItdXNiJywgJycsZCl9ICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQgPSAiVVNCIGdhZGdldCBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdXNiZ2FkZ2V0ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXB4YTI3eF91ZGMgXAorICAgIGtlcm5lbC1tb2R1bGUtZ2FkZ2V0ZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1maWxlLXN0b3JhZ2UgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1zZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtZy1ldGhlciIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlVTQiBob3N0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0ID0gIlwKKyAgICB1c2J1dGlscyAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtdWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtb2hjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtZWhjaS1oY2QgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiY29yZSBcCisgICAga2VybmVsLW1vZHVsZS11c2JoaWQgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNibmV0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXNkLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS1zY3NpLW1vZCBcCisgICAga2VybmVsLW1vZHVsZS11c2Jtb3VzZSBcCisgICAga2VybmVsLW1vZHVsZS1tb3VzZWRldiBcCisgICAga2VybmVsLW1vZHVsZS11c2JzZXJpYWwgXAorICAgIGtlcm5lbC1tb2R1bGUtdXNiLXN0b3JhZ2UgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJQUFAgZGlhbC11cCBwcm90b2NvbCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtcHBwID0gIlwKKyAgICBwcHAgXAorICAgIHBwcC1kaWFsaW4iCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBwcCA9ICJcCisgICAga2VybmVsLW1vZHVsZS1wcHAtYXN5bmMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWRlZmxhdGUgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLWdlbmVyaWMgXAorICAgIGtlcm5lbC1tb2R1bGUtcHBwLW1wcGUgXAorICAgIGtlcm5lbC1tb2R1bGUtc2xoYyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyA9ICJJUFNFQyBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXBzZWMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXBzZWMiCisKKyMKKyMgcGFja2FnZWdyb3VwLWJhc2Utd2lmaSBjb250YWluIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGdldCBXaUZpIHdvcmtpbmcKKyMgV0VQL1dQQSBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIHN1cHBvcnRlZCBvdXQtb2YtYm94CisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXdpZmkgPSAiV2lGaSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2Utd2lmaSA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfd2lyZWxlc3MtdG9vbHN9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2hvc3RhcC11dGlscycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjaScsICdob3N0YXAtdXRpbHMnLCAnJyxkKX0gXAorICAgIHdwYS1zdXBwbGljYW50IgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS13aWZpID0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdrZXJuZWwtbW9kdWxlLXpkMTIxMXJ3JywgJycsZCl9IFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtY2NtcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtdGtpcCBcCisgICAga2VybmVsLW1vZHVsZS1pZWVlODAyMTEtY3J5cHQtd2VwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWVjYiBcCisgICAga2VybmVsLW1vZHVsZS1hcmM0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWNyeXB0b19hbGdhcGkgXAorICAgIGtlcm5lbC1tb2R1bGUtY3J5cHRvbWdyIFwKKyAgICBrZXJuZWwtbW9kdWxlLW1pY2hhZWwtbWljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcy1nZW5lcmljIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFlcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIG5lYXJkIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZmMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtbmZjIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIkNlbGx1bGFyIGRhdGEgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLTNnID0gIlwKKyAgICBvZm9ubyIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtM2cgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY2RjLWFjbSBcCisgICAga2VybmVsLW1vZHVsZS1jZGMtd2RtIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlNNQiBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXNtYmZzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLWNpZnMgXAorICAgIGtlcm5lbC1tb2R1bGUtc21iZnMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtY3JhbWZzID0gImNyYW1mcyBmaWxlc3lzdGVtIHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY3JhbWZzIgorCisjCisjIHBhY2thZ2Vncm91cC1iYXNlLW5mcyBwcm92aWRlcyBPTkxZIGNsaWVudCBzdXBwb3J0IC0gc2VydmVyIGlzIGluIG5mcy11dGlscyBwYWNrYWdlCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJORlMgbmV0d29yayBmaWxlc3lzdGVtIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1uZnMgPSAiXAorICAgIHJwY2JpbmQiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1uZnMgIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mID0gIlplcm9jb25mIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZiA9ICJcCisgICAgYXZhaGktZGFlbW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmZfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiXAorICAgIGxpYm5zcy1tZG5zIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtaXB2NiA9ICJJUHY2IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHY2ID0gIlwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwdjYgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtaXB2NiAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Utc2VyaWFsID0gIlNlcmlhbCBwb3J0IHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwgPSAiXAorICAgIHNldHNlcmlhbCBcCisgICAgbHJ6c3ogIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBob25lID0gIkNlbGx1bGFyIHRlbGVwaG9ueSAodm9pY2UpIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1waG9uZSA9ICJcCisgICAgb2Zvbm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJvb3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNTM3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpAQCAtMCwwICsxLDQ3IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJNaW5pbWFsIGJvb3QgcmVxdWlyZW1lbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIG1pbmltYWwgc2V0IG9mIHBhY2thZ2VzIHJlcXVpcmVkIHRvIGJvb3QgdGhlIHN5c3RlbSIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjE3IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCisjCisjIFNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIHdpdGggcGFja2FnZXMgZXNzZW50aWFsIGZvciBkZXZpY2UgYm9vdHVwCisjCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EUyA/PSAiIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKKworIyBEaXN0cm8gY2FuIG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgVklSVFVBTC1SVU5USU1FIHByb3ZpZGVyczoKK1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlciA/PSAidWRldiIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciA/PSAic3lzdmluaXQiCitWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHMgPz0gImluaXRzY3JpcHRzIgorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPz0gImtleW1hcHMiCisKK1NZU1ZJTklUX1NDUklQVFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAncnRjJywgJ2J1c3lib3gtaHdjbG9jaycsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICBtb2R1dGlscy1pbml0c2NyaXB0cyBcCisgICAgICAgICAgICAgICAgICAgIGluaXQtaWZ1cGRvd24gXAorICAgICAgICAgICAgICAgICAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0c30gXAorICAgICAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJhc2UtZmlsZXMgXAorICAgIGJhc2UtcGFzc3dkIFwKKyAgICBidXN5Ym94IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3Zpbml0IiwgIiR7U1lTVklOSVRfU0NSSVBUU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJrZXlib2FyZCIsICIke1ZJUlRVQUwtUlVOVElNRV9rZXltYXBzfSIsICIiLCBkKX0gXAorICAgIG5ldGJhc2UgXAorICAgICR7VklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXJ9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9kZXZfbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IFwKKyAgICAke01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgICR7TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFN9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwuYmIKQEAgLTAsMCArMSwyOSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0LCBJbmMuCisjCisKK1NVTU1BUlkgPSAiRXNzZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCA9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIGF1dG9tYWtlIFwKKyAgICBiaW51dGlscyBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBnY2MgXAorICAgIGdjYy1zeW1saW5rcyBcCisgICAgZysrIFwKKyAgICBnKystc3ltbGlua3MgXAorICAgIGdldHRleHQgXAorICAgIG1ha2UgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlidG9vbCBcCisgICAgcGtnY29uZmlnIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IwMTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiUmVtb3RlIGRlYnVnZ2luZyB0b29scyBmb3IgRWNsaXBzZSBpbnRlZ3JhdGlvbiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZ2Ric2VydmVyIFwKKyAgICB0Y2YtYWdlbnQgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4MmQzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbmZzLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIk5GUyBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjIiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BST1ZJREVTID0gIiR7UEFDS0FHRVN9IgorUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyICR7UE59LWNsaWVudCIKKworU1VNTUFSWV8ke1BOfS1jbGllbnQgPSAiTkZTIGNsaWVudCIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJuZnMtdXRpbHMtY2xpZW50IgorCitTVU1NQVJZXyR7UE59LXNlcnZlciA9ICJORlMgc2VydmVyIgorUkRFUEVORFNfJHtQTn0tc2VydmVyID0gIlwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhZGQwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc2RrLmJiCkBAIC0wLDAgKzEsODMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlNvZnR3YXJlIGRldmVsb3BtZW50IHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyOSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworI1BBQ0tBR0VGVU5DUyA9KyAnZ2VuZXJhdGVfc2RrX3BrZ3MnCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYnVpbGRlc3NlbnRpYWwgXAorICAgIGNvcmV1dGlscyBcCisgICAgY2NhY2hlIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIGludGx0b29sIFwKKyAgICBwZXJsLW1vZHVsZS1yZSBcCisgICAgcGVybC1tb2R1bGUtdGV4dC13cmFwIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIHF1aWx0IFwKKyAgICBsZXNzIFwKKyAgICBsZGQgXAorICAgIGZpbGUgXAorICAgIHRjbCIKKworU0FOSVRJWkVSUyA9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYiCitTQU5JVElaRVJTX2FhcmNoNjQgPSAiIgorU0FOSVRJWkVSU19taXBzID0gIiIKK1NBTklUSVpFUlNfbWlwczY0ID0gIiIKK1NBTklUSVpFUlNfbWlwczY0bjMyID0gIiIKK1NBTklUSVpFUlNfcG93ZXJwYzY0ID0gIiIKK1NBTklUSVpFUlNfc3BhcmMgPSAiIgorU0FOSVRJWkVSU19saWJjLW11c2wgPSAiIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiXAorICAgIGxpYmdvbXAgXAorICAgIGxpYmdvbXAtZGV2IFwKKyAgICAke1NBTklUSVpFUlN9IgorCisjcHl0aG9uIGdlbmVyYXRlX3Nka19wa2dzICgpIHsKKyMgICAgcG9reV9wa2dzID0gcmVhZF9wa2dkYXRhKCdwYWNrYWdlZ3JvdXAtY29yZScsIGQpWydQQUNLQUdFUyddCisjICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisjICAgIGZvciBwa2cgaW4gcG9reV9wa2dzLnNwbGl0KCk6CisjICAgICAgICBuZXdwa2cgPSBwa2cucmVwbGFjZSgncGFja2FnZWdyb3VwLWNvcmUnLCAncGFja2FnZWdyb3VwLWNvcmUtc2RrJykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggb2YgdGhlIHRhc2sgcGFja2FnZXMsIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2RrIHRhc2sKKyMgICAgICAgIHBrZ3MuYXBwZW5kKG5ld3BrZykKKyMKKyMgICAgICAgICMgZm9yIGVhY2ggc2RrIHRhc2ssIHRha2UgdGhlIHJkZXBlbmRzIG9mIHRoZSBub24tc2RrIHRhc2ssIGFuZCB0dXJuCisjICAgICAgICAjIHRoYXQgaW50byBycmVjb21tZW5kcyB1cG9uIHRoZSAtZGV2IHZlcnNpb25zIG9mIHRob3NlLCBub3QgdW5saWtlCisjICAgICAgICAjIHRoZSBwYWNrYWdlIGRlcGNoYWluIGNvZGUKKyMgICAgICAgIHNwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyMKKyMgICAgICAgIHJkZXBlbmRzID0gZXhwbG9kZV9kZXBzKHNwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgcGtnKSBvciAnJykKKyMgICAgICAgIHJyZWNsaXN0ID0gW10KKyMKKyMgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CisjICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgbmFtZSA9IHNwbGl0X2RlcGVuZFswXS5zdHJpcCgpCisjICAgICAgICAgICAgaWYgcGFja2FnZWQoJyVzLWRldicgJSBuYW1lLCBkKToKKyMgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMgICAgICAgICAgICBlbHNlOgorIyAgICAgICAgICAgICAgICBkZXBwa2dkYXRhID0gcmVhZF9zdWJwa2dkYXRhKG5hbWUsIGQpCisjICAgICAgICAgICAgICAgIHJkZXBlbmRzMiA9IGV4cGxvZGVfZGVwcyhkZXBwa2dkYXRhLmdldCgnUkRFUEVORFNfJXMnICUgbmFtZSkgb3IgJycpCisjICAgICAgICAgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHMyOgorIyAgICAgICAgICAgICAgICAgICAgc3BsaXRfZGVwZW5kID0gZGVwZW5kLnNwbGl0KCcgKCcpCisjICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXRfZGVwZW5kWzBdLnN0cmlwKCkKKyMgICAgICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VkKCclcy1kZXYnICUgbmFtZSwgZCk6CisjICAgICAgICAgICAgICAgICAgICAgICAgcnJlY2xpc3QuYXBwZW5kKCclcy1kZXYnICUgbmFtZSkKKyMKKyMgICAgICAgICAgICBvbGRycmVjID0gZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgRmFsc2UpIG9yICcnCisjICAgICAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIG5ld3BrZywgb2xkcnJlYyArICcgJyArICcgJy5qb2luKHJyZWNsaXN0KSkKKyMgICAgICAgICAgICAjIGJiLm5vdGUoJ1JSRUNPTU1FTkRTXyVzID0gIiVzIicgJSAobmV3cGtnLCBkLmdldFZhcignUlJFQ09NTUVORFNfJXMnICUgbmV3cGtnLCBGYWxzZSkpKQorIworIyAgICAjIGJiLm5vdGUoJ3BrZ3MgaXMgJXMnICUgcGtncykKKyMgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGtncykpCisjfQorIworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wYWNrYWdlZ3JvdXAtY29yZS1zZGstLioiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OTk0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhci5iYgpAQCAtMCwwICsxLDcgQEAKK1NVTU1BUlkgPSAiRHJvcGJlYXIgU1NIIGNsaWVudC9zZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJkcm9wYmVhciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDIwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoLmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJPcGVuU1NIIFNTSCBjbGllbnQvc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUkRFUEVORFNfJHtQTn0gPSAib3BlbnNzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmNWU0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0LmJiCkBAIC0wLDAgKzEsMTMgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciB0aGUgc3RhbmRhbG9uZSBTREsiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgbGliZ2NjIFwKKyAgICBsaWJnY2MtZGV2IFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgICR7TElCQ19ERVBFTkRFTkNJRVN9IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM0N2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1kZWJ1Zy5iYgpAQCAtMCwwICsxLDIwIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJEZWJ1Z2dpbmcgdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUFIgPSAicjMiCisKK01UUkFDRSA9ICIiCitNVFJBQ0VfbGliYy1nbGliYyA9ICJsaWJjLW10cmFjZSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICBzdHJhY2UgXAorICAgICR7TVRSQUNFfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjU5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKQEAgLTAsMCArMSw4MSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiUHJvZmlsaW5nIHRvb2xzIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIzIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQUk9GSUxFX1RPT0xTX1ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnc3lzcHJvZicsICcnLCBkKX0iCisjIHN5c3Byb2YgZG9lc24ndCBzdXBwb3J0IGFhcmNoNjQKK1BST0ZJTEVfVE9PTFNfWF9hYXJjaDY0ID0gIiIKK1BST0ZJTEVfVE9PTFNfU1lTVEVNRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZC1hbmFseXplJywgJycsIGQpfSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiXAorICAgIHBlcmYgXAorICAgIHRyYWNlLWNtZCBcCisgICAgYmxrdHJhY2UgXAorICAgICR7UFJPRklMRV9UT09MU19YfSBcCisgICAgJHtQUk9GSUxFX1RPT0xTX1NZU1RFTUR9IFwKKyAgICAiCisKK1BST0ZJTEVUT09MUyA9ICJcCisgICAgcG93ZXJ0b3AgXAorICAgIGxhdGVuY3l0b3AgXAorICAgICIKKworIyBzeXN0ZW10YXAgbmVlZHMgZWxmdXRpbHMgd2hpY2ggaXMgbm90IGZ1bGx5IGJ1aWxkYWJsZSBvbiB1Y2xpYmMKKyMgaGVuY2Ugd2UgZXhjbHVkZSBpdCBmcm9tIHVjbGliYyBiYXNlZCBidWlsZHMKK1NZU1RFTVRBUCA9ICJzeXN0ZW10YXAiCitTWVNURU1UQVBfbGliYy11Y2xpYmMgPSAiIgorU1lTVEVNVEFQX21pcHMgPSAiIgorU1lTVEVNVEFQX21pcHM2NCA9ICIiCitTWVNURU1UQVBfbWlwczY0bjMyID0gIiIKK1NZU1RFTVRBUF9hYXJjaDY0ID0gIiIKKworIyBsdHRuZy11c3QgdXNlcyBzY2hlZF9nZXRjcHUoKSB3aGljaCBpcyBub3QgdGhlcmUgb24gdWNsaWJjCisjIGZvciBzb21lIG9mIHRoZSBhcmNoaXRlY3R1cmVzIGl0IGNhbiBiZSBwYXRjaGVkIHRvIGNhbGwgdGhlCisjIHN5c2NhbGwgZGlyZWN0bHkgYnV0IGZvciB4ODZfNjQgX19OUl9nZXRjcHUgaXMgYSB2c3lzY2FsbAorIyB3aGljaCBtZWFucyB3ZSBjYW4gbm90IHVzZSBzeXNjYWxsKCkgdG8gY2FsbCBpdC4gU28gd2UgaWdub3JlCisjIGl0IGZvciB4ODZfNjQvdWNsaWJjCisKK0xUVE5HVVNUID0gImx0dG5nLXVzdCIKK0xUVE5HVVNUX2xpYmMtdWNsaWJjID0gIiIKK0xUVE5HVVNUX2FhcmNoNjQgPSAiIgorCitMVFROR1RPT0xTID0gImx0dG5nLXRvb2xzIgorTFRUTkdUT09MU19hYXJjaDY0ID0gIiIKKworTFRUTkdNT0RVTEVTID0gImx0dG5nLW1vZHVsZXMiCitMVFROR01PRFVMRVNfYWFyY2g2NCA9ICIiCisKK0JBQkVMVFJBQ0UgPSAiYmFiZWx0cmFjZSIKK0JBQkVMVFJBQ0VfYWFyY2g2NCA9ICIiCisKKyMgdmFsZ3JpbmQgZG9lcyBub3Qgd29yayBvbiBtaXBzCisKK1ZBTEdSSU5EID0gInZhbGdyaW5kIgorVkFMR1JJTkRfbGliYy11Y2xpYmMgPSAiIgorVkFMR1JJTkRfbWlwcyA9ICIiCitWQUxHUklORF9taXBzNjQgPSAiIgorVkFMR1JJTkRfbWlwczY0bjMyID0gIiIKK1ZBTEdSSU5EX2FybSA9ICIiCitWQUxHUklORF9hYXJjaDY0ID0gIiIKKworIyAgICBleG1hcC1jb25zb2xlCisjICAgIGV4bWFwLXNlcnZlcgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQUk9GSUxFVE9PTFN9IFwKKyAgICAke0xUVE5HVVNUfSBcCisgICAgJHtMVFROR1RPT0xTfSBcCisgICAgJHtMVFROR01PRFVMRVN9IFwKKyAgICAke0JBQkVMVFJBQ0V9IFwKKyAgICAke1NZU1RFTVRBUH0gXAorICAgICR7VkFMR1JJTkR9IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWIzOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcy5iYgpAQCAtMCwwICsxLDU2IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJUZXN0aW5nIHRvb2xzL2FwcGxpY2F0aW9ucyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMiIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworIyBrZXhlYy10b29scyBkb2Vzbid0IHdvcmsgb24gTWlwcworS0VYRUNUT09MUyA/PSAia2V4ZWMiCitLRVhFQ1RPT0xTX21pcHMgPz0gIiIKK0tFWEVDVE9PTFNfbWlwc2VsID89ICIiCitLRVhFQ1RPT0xTX3Bvd2VycGMgPz0gIiIKK0tFWEVDVE9PTFNfZTU1MDAtNjRiID89ICIiCitLRVhFQ1RPT0xTX2FhcmNoNjQgPz0gIiIKKworWDExR0xUT09MUyA9ICJcCisgICAgbWVzYS1kZW1vcyBcCisgICAgcGlnbGl0IFwKKyAgICAiCisKKzNHVE9PTFMgPSAiXAorICAgIG9mb25vLXRlc3RzIFwKKyAgICAiCisKK1gxMVRPT0xTID0gIlwKKyAgICBmc3Rlc3RzIFwKKyAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgeDExcGVyZiBcCisgICAgeHJlc3RvcCBcCisgICAgeHdpbmluZm8gXAorICAgIHhwcm9wIFwKKyAgICB4dmlkZW8tdGVzdHMgXAorICAgICIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGJsa3Rvb2wgXAorICAgIHRzbGliLWNhbGlicmF0ZSBcCisgICAgdHNsaWItdGVzdHMgXAorICAgIGxyenN6IFwKKyAgICAke0tFWEVDVE9PTFN9IFwKKyAgICBhbHNhLXV0aWxzLWFtaXhlciBcCisgICAgYWxzYS11dGlscy1hcGxheSBcCisgICAgbHRwIFwKKyAgICBjb25ubWFuLXRvb2xzIFwKKyAgICBjb25ubWFuLXRlc3RzIFwKKyAgICBjb25ubWFuLWNsaWVudCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAiJHtYMTFUT09MU30iLCAiIiwgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMSBvcGVuZ2wnLCAiJHtYMTFHTFRPT0xTfSIsICIiLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCAiJHszR1RPT0xTfSIsICIiLCBkKX0gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwZGQ5NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiSG9zdCBTREsgcGFja2FnZSBmb3IgY3Jvc3MgY2FuYWRpYW4gdG9vbGNoYWluIgorUE4gPSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjcm9zcy1jYW5hZGlhbiBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCisjIFVzZSBpbmRpcmVjdGlvbiB0byBzdG9wIHRoZXNlIGJlaW5nIGV4cGFuZGVkIHByZW1hdHVyZWx5CitCSU5VVElMUyA9ICJiaW51dGlscy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0NDID0gImdjYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorR0RCID0gImdkYi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdCSU5VVElMUycpfSBcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdHQ0MnKX0gXAorICAgICR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAnR0RCJyl9IFwKKyAgICBtZXRhLWVudmlyb25tZW50LSR7TUFDSElORX0gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4YmUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLmJiCkBAIC0wLDAgKzEsMjAyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIlNlbGYtaG9zdGluZyIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHJ1biB0aGUgYnVpbGQgc3lzdGVtIgorUFIgPSAicjEzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwICBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgcmRlcGVuZHMgb24gbGlieDExLWRldgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWRlYnVnIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZGVidWcgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGsgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWdyYXBoaWNzIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyA9ICJcCisgICAgY29ubm1hbiBcCisgICAgY29ubm1hbi1wbHVnaW4tZXRoZXJuZXQgXAorICAgIGRoY3AtY2xpZW50IFwKKyAgICBlMmZzcHJvZ3MgXAorICAgIGUyZnNwcm9ncy1lMmZzY2sgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIGUyZnNwcm9ncy10dW5lMmZzIFwKKyAgICBoZHBhcm0gXAorICAgIGlwdGFibGVzIFwKKyAgICBsc2IgXAorICAgIG1jIFwKKyAgICBtYy1maXNoIFwKKyAgICBtYy1oZWxwZXJzIFwKKyAgICBtYy1oZWxwZXJzLXBlcmwgXAorICAgIG1jLWhlbHBlcnMtcHl0aG9uIFwKKyAgICBwYXJ0ZWQgXAorICAgIHBzZXVkbyBcCisgICAgc2NyZWVuIFwKKyAgICAiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXR1biBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLXJhdyBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW5hdCBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLW1hbmdsZSBcCisgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisJIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrID0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgYXV0b21ha2UgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY2NhY2hlIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwcCBcCisgICAgY3BwLXN5bWxpbmtzIFwKKyAgICBkaXN0Y2MgXAorICAgIGdsaWJjLWdjb252LWlibTg1MCBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBnKysgXAorICAgIGcrKy1zeW1saW5rcyBcCisgICAgZ2NjIFwKKyAgICBnY2Mtc3ltbGlua3MgXAorICAgIGludGx0b29sIFwKKyAgICBsZGQgXAorICAgIGxlc3MgXAorICAgIGxpYnNzcCBcCisgICAgbGlic3NwLWRldiBcCisgICAgbGlic3NwLXN0YXRpY2RldiBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICBsaWJ0b29sIFwKKyAgICBtYWtlIFwKKyAgICBta3RlbXAgXAorICAgIHBlcmwtbW9kdWxlLXJlIFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXdyYXAgXAorICAgIHBrZ2NvbmZpZyBcCisgICAgcXVpbHQgXAorICAgIHNlZCBcCisgICAgIgorIyBnbGliYy11dGlsczogZm9yIHJwY2dlbgorUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNka19hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgICIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1kZWJ1ZyA9ICIgXAorICAgIGdkYiBcCisgICAgZ2Ric2VydmVyIFwKKyAgICByc3luYyBcCisgICAgc3RyYWNlIFwKKyAgICB0Y2YtYWdlbnQiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWV4dGVuZGVkID0gIlwKKyAgICBiemlwMiBcCisgICAgY2hrY29uZmlnIFwKKyAgICBjaHJwYXRoIFwKKyAgICBjcGlvIFwKKyAgICBjdXJsIFwKKyAgICBkaWZmc3RhdCBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlbGZ1dGlscyBcCisgICAgZXhwYXQgXAorICAgIGdhd2sgXAorICAgIGdkYm0gXAorICAgIGdldHRleHQgXAorICAgIGdldHRleHQtcnVudGltZSBcCisgICAgZ2l0IFwKKyAgICBnaXQtcGVybHRvb2xzIFwKKyAgICBncmVwIFwKKyAgICBncm9mZiBcCisgICAgZ3ppcCBcCisgICAgc2V0dGluZ3MtZGFlbW9uIFwKKyAgICBoaWNvbG9yLWljb24tdGhlbWUgXAorICAgIHNhdG8taWNvbi10aGVtZSBcCisgICAgbGliYWlvIFwKKyAgICBsaWJ1c2IxIFwKKyAgICBsaWJ4bWwyIFwKKyAgICBscnpzeiBcCisgICAgbHNvZiBcCisgICAgbHpvIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWRhZG0gXAorICAgIG1pbmljb20gXAorICAgIG10b29scyBcCisgICAgbmN1cnNlcyBcCisgICAgbmN1cnNlcy10ZXJtaW5mby1iYXNlIFwKKyAgICBuZW9uIFwKKyAgICBuZnMtdXRpbHMgXAorICAgIG5mcy11dGlscy1jbGllbnQgXAorICAgIG9wZW5zc2wgXAorICAgIG9wZW5zc2gtc2Z0cC1zZXJ2ZXIgXAorICAgIG9wa2cgXAorICAgIG9wa2ctdXRpbHMgXAorICAgIHBhdGNoIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLWRldiBcCisgICAgcGVybC1tb2R1bGVzIFwKKyAgICBwZXJsLXBvZCBcCisgICAgJHtQVEh9IFwKKyAgICBweXRob24gXAorICAgIHB5dGhvbi1jb21waWxlciBcCisgICAgcHl0aG9uLWdpdCBcCisgICAgcHl0aG9uLW1pc2MgXAorICAgIHB5dGhvbi1tb2R1bGVzIFwKKyAgICBweXRob24tcnBtIFwKKyAgICBxdW90YSBcCisgICAgcmVhZGxpbmUgXAorICAgIHJwbSBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzb2NhdCBcCisgICAgc3VidmVyc2lvbiBcCisgICAgc3VkbyBcCisgICAgc3lzc3RhdCBcCisgICAgdGFyIFwKKyAgICB0Y2wgXAorICAgIHRleGkyaHRtbCBcCisgICAgdGV4aW5mbyBcCisgICAgdW56aXAgXAorICAgIHVzYnV0aWxzIFwKKyAgICB3YXRjaGRvZyBcCisgICAgd2dldCBcCisgICAgd2hpY2ggXAorICAgIHhpbmV0ZCBcCisgICAgemlwIFwKKyAgICB6bGliIFwKKyAgICB4eiBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ncmFwaGljcyA9ICJcCisgICAgYnVpbGRlciBcCisgICAgbGliZ2wgXAorICAgIGxpYmdsLWRldiBcCisgICAgbGliZ2x1IFwKKyAgICBsaWJnbHUtZGV2IFwKKyAgICBsaWJzZGwgXAorICAgIGxpYnNkbC1kZXYgXAorICAgIGxpYngxMS1kZXYgXAorICAgIHB5dGhvbi1weWd0ayBcCisgICAgZ3RrLXRoZW1lLWNsZWFybG9va3MgXAorICAgIHhkZy11dGlscyBcCisgICAgZXBpcGhhbnkgXAorICAgIGxlYWZwYWQgXAorICAgIHBjbWFuZm0gXAorICAgIHZ0ZSBcCisgICAgIgorUFRIID0gInB0aCIKK1BUSF9saWJjLXVjbGliYyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjNjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDhmNWRlMTJjYzc1YmZhYTg0MDBhZGYzMmYzMGMwMTVkOGY4MTM1NDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMiBBdWcgMjAxNSAwNzoxMjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBwc3BsYXNoLWZiOiBDb252ZXJ0IHBzcGxhc2hfZmJfcGxvdF9waXhlbCgpIHRvIGEgc3RhdGljCisgaW5saW5lCisKK1RoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgb3V0c2lkZSBwc3BsYXNoLWZiLmMgYW5kIGJ5IG1ha2luZyBpdAorc3RhdGljIGlubGluZSB3ZSBrZWVwIHRoZSBwZXJmb3JtYW5jZSBhbmQgYWxzbyBtYWtlIGl0IHBvcnRhYmxlIGFjcm9zcworbXVsdGlwbGUgY29tcGlsZXJzIGFuZCBnY2MgdmVyc2lvbnMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBwc3BsYXNoLWZiLmMgfCAyICstCisgcHNwbGFzaC1mYi5oIHwgOCAtLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wc3BsYXNoLWZiLmMgYi9wc3BsYXNoLWZiLmMKK2luZGV4IGJkOWNkOWQuLjZkMjM1ZGIgMTAwNjQ0CistLS0gYS9wc3BsYXNoLWZiLmMKKysrKyBiL3BzcGxhc2gtZmIuYworQEAgLTI2MCw3ICsyNjAsNyBAQCBwc3BsYXNoX2ZiX25ldyAoaW50IGFuZ2xlKQorIAorICNkZWZpbmUgT0ZGU0VUKGZiLHgseSkgKCgoeSkgKiAoZmIpLT5zdHJpZGUpICsgKCh4KSAqICgoZmIpLT5icHAgPj4gMykpKQorIAorLWlubGluZSB2b2lkCisrc3RhdGljIGlubGluZSB2b2lkCisgcHNwbGFzaF9mYl9wbG90X3BpeGVsIChQU3BsYXNoRkIgICAgKmZiLAorIAkJICAgICAgIGludCAgICAgICAgICB4LAorIAkJICAgICAgIGludCAgICAgICAgICB5LAorZGlmZiAtLWdpdCBhL3BzcGxhc2gtZmIuaCBiL3BzcGxhc2gtZmIuaAoraW5kZXggNDI1OTJlZC4uYzZjMzE0NCAxMDA2NDQKKy0tLSBhL3BzcGxhc2gtZmIuaAorKysrIGIvcHNwbGFzaC1mYi5oCitAQCAtNTcsMTQgKzU3LDYgQEAgcHNwbGFzaF9mYl9kZXN0cm95IChQU3BsYXNoRkIgKmZiKTsKKyBQU3BsYXNoRkIqCisgcHNwbGFzaF9mYl9uZXcgKGludCBhbmdsZSk7CisgCistaW5saW5lIHZvaWQKKy1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwgKFBTcGxhc2hGQiAgICAqZmIsIAorLQkJICAgICAgIGludCAgICAgICAgICB4LCAKKy0JCSAgICAgICBpbnQgICAgICAgICAgeSwgCistCQkgICAgICAgdWludDggICAgICAgIHJlZCwKKy0JCSAgICAgICB1aW50OCAgICAgICAgZ3JlZW4sCistCQkgICAgICAgdWludDggICAgICAgIGJsdWUpOworLQorIHZvaWQKKyBwc3BsYXNoX2ZiX2RyYXdfcmVjdCAoUFNwbGFzaEZCICAgICpmYiwgCisgCQkgICAgICBpbnQgICAgICAgICAgeCwgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjZjODVlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1pbml0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaCAKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHBzcGxhc2gKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHBzcGxhc2g9ZmFsc2UpCisJCWVjaG8gIkJvb3Qgc3BsYXNoc2NyZWVuIGRpc2FibGVkIiAKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworZXhwb3J0IFRNUERJUj0vbW50Ly5wc3BsYXNoCittb3VudCB0bXBmcyAtdCB0bXBmcyAkVE1QRElSIC1vLHNpemU9NDBrCisKK3JvdGF0aW9uPTAKK2lmIFsgLWUgL2V0Yy9yb3RhdGlvbiBdOyB0aGVuCisJcmVhZCByb3RhdGlvbiA8IC9ldGMvcm90YXRpb24KK2ZpCisKKy91c3IvYmluL3BzcGxhc2ggLS1hbmdsZSAkcm90YXRpb24gJgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaCBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTZhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtcG9reS1pbWcuaApAQCAtMCwwICsxLDEyNTkgQEAKKy8qIEdka1BpeGJ1ZiBSR0IgQy1Tb3VyY2UgaW1hZ2UgZHVtcCAxLWJ5dGUtcnVuLWxlbmd0aC1lbmNvZGVkICovCisKKyNkZWZpbmUgUE9LWV9JTUdfUk9XU1RSSURFICgxOTIwKQorI2RlZmluZSBQT0tZX0lNR19XSURUSCAoNjQwKQorI2RlZmluZSBQT0tZX0lNR19IRUlHSFQgKDQ4MCkKKyNkZWZpbmUgUE9LWV9JTUdfQllURVNfUEVSX1BJWEVMICgzKSAvKiAzOlJHQiwgNDpSR0JBICovCisjZGVmaW5lIFBPS1lfSU1HX1JMRV9QSVhFTF9EQVRBICgodWludDgqKSBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIzN1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MSIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3IiBcCisgICJcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM2M1wzNzZcMzc3XDM3NFwzXDM3M1wzNzUiIFwKKyAgIlwzNzJcMzYwXDM2NlwzNzBcMzUzXDM2MFwzNjNcMjAyXDM0N1wzNTVcMzU3XDVcMzQ2XDM1NFwzNTZcMzQ3XDM1NVwzNTciIFwKKyAgIlwzNTFcMzU2XDM2MFwzNjBcMzY2XDM3MFwzNzFcMzczXDM3MFwzNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzUzXDM3NlwzNzdcMzc0XDEwXDM1NiIgXAorICAiXDM2M1wzNjZcMzI0XDMzMVwzMzNcMjc3XDMwNFwzMDZcMjUyXDI2MlwyNzJcMjI3XDIzN1wyNDd9XDIyMFwyMzNwXDIwMyIgXAorICAiXDIxNmV3XDIwMlwyMTJdb3pcMTBkdlwyMDFuXDIwMVwyMTR+XDIxNVwyMjNcMjE2XDIzNlwyNDRcMjQ3XDI1N1wyNjciIFwKKyAgIlwyNzRcMzAxXDMwM1wzMjBcMzI2XDMzMFwzNTJcMzU3XDM2MlwzNTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQ2XDM3NlwzNzdcMzc0XDVcMzY2IiBcCisgICJcMzcwXDM2NFwzMjBcMzI2XDMzMFwyNTVcMjY1XDI3NVwyMTBcMjI3XDIzNWp9XDIxMFwyMzJdb3pcNWd5XDIwNFwyMDQiIFwKKyAgIlwyMjNcMjMxXDI1MFwyNjBcMjcwXDMxNFwzMjFcMzI0XDM1NVwzNjJcMzY1XDM0NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDJcMzc2XDM3NyIgXAorICAiXDM3NFw1XDM3M1wzNzVcMzcyXDMyN1wzMzRcMzM3XDI1M1wyNjNcMjczeFwyMTNcMjI3XnB7XDI0M11velw0cVwyMDQiIFwKKyAgIlwyMTdcMjQyXDI1MlwyNjJcMzIwXDMyNlwzMzBcMzY1XDM3MlwzNzVcMzQyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzN1wzNzZcMzc3XDM3NCIgXAorICAiXDRcMzcxXDM3M1wzNzBcMzE3XDMyNFwzMjdcMjI1XDI0NVwyNTNld1wyMDJcMjUyXW96XDRidFwxNzdcMjExXDIzMFwyMzYiIFwKKyAgIlwzMDZcMzE0XDMxNlwzNjdcMzcxXDM2NlwzMzdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzM1XDM3NlwzNzdcMzc0XDNcMzMzXDM0MFwzNDNcMjM2IiBcCisgICJcMjQ2XDI1NmZ4XDIwM1wyNjBdb3pcM2J0XDE3N1wyMjVcMjM1XDI0NVwzMjBcMzI2XDMzMFwzMzVcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzMyIiBcCisgICJcMzc2XDM3N1wzNzRcM1wzNjdcMzcxXDM2NlwyNzZcMzAzXDMwNXVcMjEwXDIyNFwyNjZdb3pcM21cMjAwXDIxM1wyNTciIFwKKyAgIlwyNjdcMjc3XDM1NVwzNjJcMzY1XDMzMlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzBcMzc2XDM3N1wzNzRcM1wzNTNcMzYwXDM2M1wyNTJcMjYyIiBcCisgICJcMjcyZnhcMjAzXDI3Ml1velwzYXN+XDIzMFwyNTBcMjU2XDM0MlwzNDdcMzUyXDMzMFwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMjZcMzc2XDM3NyIgXAorICAiXDM3NFwzXDM1MlwzNTdcMzYyXDIzNlwyNDZcMjU2YXN+XDI3Nl1velwzXnB7XDIxNlwyMzZcMjQ0XDM0MVwzNDZcMzUxIiBcCisgICJcMzI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDMyNFwzNzZcMzc3XDM3NFwzXDM1NFwzNjFcMzY0XDI0NlwyNTZcMjY2YXN+XDMwMl1velwzXnAiIFwKKyAgIntcMjI3XDIzN1wyNDdcMzQ2XDM1NFwzNTZcMzI0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMlwzNzZcMzc3XDM3NFwzXDM3MlwzNzRcMzcxXDI2NSIgXAorICAiXDI3NlwzMDZmeFwyMDNcMzA2XW96XDNhc35cMjUwXDI2MFwyNzBcMzYyXDM2N1wzNzFcMzIyXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzIwXDMyNlwzMzBwXDIwM1wyMTZcMzEyXW96XDJoelwyMDVcMzAyXDMwN1wzMTJcMzIxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzE3XDM3NlwzNzdcMzc0XDJcMzU2XDM2M1wzNjZcMjMxXDI0MVwyNTFcMzE2XW96XDJcMjA0XDIyM1wyMzFcMzQ1XDM1MiIgXAorICAiXDM1NVwzMTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzE2XDM3NlwzNzdcMzc0XDJcMzExXDMxNlwzMjFpe1wyMDZcMzIwXW96XDJidFwxNzdcMjY0IiBcCisgICJcMjc0XDMwNVwzMTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzE0XDM3NlwzNzdcMzc0XDJcMzYyXDM2N1wzNzFcMjI2XDI0NlwyNTRcMzI0XW8iIFwKKyAgInpcMlwyMDZcMjI1XDIzM1wzNTNcMzYwXDM2M1wzMTRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEzXDM3NlwzNzdcMzc0XDJcMzM0XDM0MlwzNDRvXDIwMiIgXAorICAiXDIxNVwzMjZdb3pcMmd5XDIwNFwzMTVcMzIyXDMyNVwzMTNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEyXDM3NlwzNzdcMzc0XDJcMzAyXDMwN1wzMTIiIFwKKyAgImFzflwzMzBdb3pcM15we1wyNTRcMjY0XDI3NFwzNzNcMzc1XDM3MlwzMTFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzEwXDM3NlwzNzdcMzc0XDJcMzcyIiBcCisgICJcMzc0XDM3MVwyMzZcMjQ2XDI1NlwzMzRdb3pcMlwyMTBcMjI3XDIzNVwzNjBcMzY2XDM3MFwzMTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA3IiBcCisgICJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2XDM3MFwyMDVcMjI0XDIzMlwzMzZdb3pcMnNcMjA2XDIyMVwzNDdcMzU1XDM1NyIgXAorICAiXDMwN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzMDZcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N3RcMjA3XDIyMlwzNDBdb3pcMml7XDIwNlwzMzMiIFwKKyAgIlwzNDBcMzQzXDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDVcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2p9XDIxMFwyNTFdb3pcN2J0XDE3NyIgXAorICAid1wyMTJcMjI2XDIxNVwyMzRcMjQzXDIzNlwyNDZcMjU2XDI0NlwyNTZcMjY2XDI1NFwyNjRcMjc0XDI2NFwyNzRcMzA1IiBcCisgICJcMjAyXDMwMFwzMDVcMzEwXDdcMjY0XDI3NFwzMDVcMjU1XDI2NVwyNzVcMjUwXDI2MFwyNzBcMjMzXDI1MlwyNjFcMjIyIiBcCisgICJcMjQxXDI0N35cMjE1XDIyM2V3XDIwMlwyNTFdb3pcMmN1XDIwMFwzMjJcMzMwXDMzMlwzMDVcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzA0XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMzdcMzQ0XDM0Nml7XDIwNlwyNDVdb3pcNWp9XDIxMFwyMzBcMjQwXDI1MFwyNzBcMzAwXDMxMVwzMjIiIFwKKyAgIlwzMzBcMzMyXDM1MVwzNTZcMzYwXDIyMFwzNzZcMzc3XDM3NFw1XDM1NFwzNjFcMzY0XDMyNlwzMzNcMzM1XDMwMFwzMDUiIFwKKyAgIlwzMTBcMjM2XDI0NlwyNTZwXDIwM1wyMTZcMjQ1XW96XDJhc35cMzE2XDMyM1wzMjZcMzA0XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVneVwyMDRcMjQyXW96XDRld1wyMDJcMjIyXDI0MVwyNDdcMjc2XDMwM1wzMDVcMzQyIiBcCisgICJcMzQ3XDM1MlwyMzJcMzc2XDM3N1wzNzRcNFwzNTJcMzU3XDM2MlwzMDRcMzExXDMxNFwyMzNcMjQzXDI1M2p9XDIxMCIgXAorICAiXDI0Ml1velwyYXN+XDMxM1wzMjBcMzIyXDMwM1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDJcMzc2XDM3N1wzNzRcMlwzNDFcMzQ2XDM1MWh6IiBcCisgICJcMjA1XDI0MF1velw0X3F8XDIxMVwyMzBcMjM2XDMwN1wzMTVcMzE3XDM3MFwzNzJcMzY3XDI0MFwzNzZcMzc3XDM3NCIgXAorICAiXDRcMzczXDM3NVwzNzJcMzIwXDMyNlwzMzBcMjMxXDI0MVwyNTFidFwxNzdcMjQwXW96XDJhc35cMzE3XDMyNFwzMjciIFwKKyAgIlwzMDJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzAxXDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNpe1wyMDZcMjM3XW96XDNxXDIwNFwyMTdcMjY2IiBcCisgICJcMjc3XDMwN1wzNTRcMzYxXDM2NFwyNDZcMzc2XDM3N1wzNzRcM1wzNjZcMzcwXDM2NFwzMDNcMzEwXDMxM1wxNzdcMjE2IiBcCisgICJcMjI0XDIzN11velwyYnRcMTc3XDMyNVwzMzJcMzM0XDMwMVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDBcMzc2XDM3N1wzNzRcMlwzNTVcMzYyXDM2NSIgXAorICAibFwxNzdcMjEyXDIzNl1velwzdVwyMTBcMjI0XDMwN1wzMTVcMzE3XDM3M1wzNzVcMzcyXDI1M1wzNzZcMzc3XDM3NFwyIiBcCisgICJcMzI0XDMzMVwzMzNcMjA0XDIyM1wyMzFcMjM2XW96XDJld1wyMDJcMzQxXDM0NlwzNTFcMzAwXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVcMTc3XDIxNlwyMjRcMjM1XW96XDJ+XDIxNVwyMjNcMzE1XDMyMlwzMjVcMjYwIiBcCisgICJcMzc2XDM3N1wzNzRcMlwzMzFcMzM2XDM0MVwyMTFcMjMwXDIzNlwyMzVdb3pcMmxcMTc3XDIxMlwzNTNcMzYwXDM2MyIgXAorICAiXDI3N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNzdcMzc2XDM3N1wzNzRcMVwyMTRcMjMzXDI0MlwyMzRdb3pcMml7XDIwNlwzMDVcMzEyXDMxNSIgXAorICAiXDI2NFwzNzZcMzc3XDM3NFwyXDMyNFwzMzFcMzMzcVwyMDRcMjE3XDIzNF1velwydVwyMTBcMjI0XDM2N1wzNzFcMzY2IiBcCisgICJcMjc2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI3NlwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIzM11velwzXnB7XDI0MlwyNTJcMjYyXDM2MiIgXAorICAiXDM2N1wzNzFcMjY2XDM3NlwzNzdcMzc0XDNcMzcyXDM3NFwzNzFcMjYxXDI3MVwzMDJidFwxNzdcMjMzXW96XDFcMjI1IiBcCisgICJcMjM1XDI0NVwyNzZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjc1XDM3NlwzNzdcMzc0XDJcMzE3XDMyNFwzMjdecHtcMjMyXW96XDJ3XDIxMlwyMjYiIFwKKyAgIlwzMzVcMzQzXDM0NVwyNzJcMzc2XDM3N1wzNzRcMlwzNTFcMzU2XDM2MFwyMTFcMjMwXDIzNlwyMzNdb3pcMVwyNjRcMjc0IiBcCisgICJcMzA1XDI3NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzRcMzc2XDM3N1wzNzRcMlwzNDdcMzU1XDM1N2V3XDIwMlwyMzJdb3pcMlwyNDJcMjUyIiBcCisgICJcMjYyXDM3MVwzNzNcMzcwXDIyNVwzNzZcMzc3XDM3NFwxMFwzMzZcMzY3XDM3NFwyNjJcMzU1XDM3MFwyMjBcMzQzXDM2MSIgXAorICAibVwzMzJcMzYxR1wzMTdcMzUzLFwzMTFcMzUyKFwzMDdcMzUwI1wzMDRcMzQ2XDIwMlwwXDMwMVwzNTBcMTBcMFwzMDQiIFwKKyAgIlwzNTIoXDMwN1wzNTAsXDMxMVwzNTJCXDMxNFwzNDdpXDMyNlwzNTZcMjA3XDM0MVwzNjRcMjYwXDM1M1wzNjZcMzMzIiBcCisgICJcMzY0XDM3MVwyMjZcMzc2XDM3N1wzNzRcMlwyNjZcMjc3XDMwN2FzflwyMzFdb3pcMl9xfFwzMjdcMzM0XDMzN1wyNzQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzNcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3Mn1cMjIwXDIzM1wyMzFdb3pcMmV3XDIwMlwzMTNcMzIwIiBcCisgICJcMzIyXDIyM1wzNzZcMzc3XDM3NFw0XDMzNFwzNjVcMzcyXDIzM1wzNDVcMzY0TVwzMjNcMzU3XDBcMzA0XDM1MlwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMFwzMDFcMzUwSlwzMjFcMzU1XDIxMVwzNDJcMzY1XDMxNFwzNjFcMzcyXDIyM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzMyXDMzN1wzNDJtXDIwMFwyMTNcMjMxXW96XDJsXDE3N1wyMTJcMzYwXDM2NlwzNzBcMjczXDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjczXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMxXW96XDJ4XDIxM1wyMjdcMzQ3XDM1NVwzNTdcMjIxXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzMzZcMzY3XDM3NFwyMDZcMzQwXDM2MypcMzEwXDM1MVwyMzJcMjVcMjc0XDM0NFwzI1wzMDRcMzQ2IiBcCisgICJ3XDMzM1wzNTZcMzE2XDM2M1wzNzRcMjIxXDM3NlwzNzdcMzc0XDJcMzYwXDM2NlwzNzBcMjE0XDIzM1wyNDJcMjMxXSIgXAorICAib3pcMVwyMjdcMjM3XDI0N1wyNzNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVfcXxcMjMwXW96IiBcCisgICJcMlwyMTBcMjI3XDIzNVwzNjRcMzcxXDM3NFwyMTdcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyNTZcMzUwXDM2NCIgXAorICAiQlwzMTRcMzQ3XDI0MFwyNVwyNzRcMzQ0XDMqXDMxMFwzNTFcMjMzXDM0NVwzNjRcMzY3XDM3NVwzNzdcMjE3XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNzNcMzc1XDM3MlwyNDJcMjUyXDI2MlwyMzFdb3pcMVwzMDVcMzEyXDMxNVwyNzJcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzJcMzc0XDM3MXdcMjEyXDIyNlwyMzBdb3pcMlwyMzFcMjQxXDI1MVwzNzJcMzc0XDM3MVwyMTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3XDIzM1wzNDVcMzY0KFwzMDdcMzUwXDI0NFwyNVwyNzRcMzQ0XDNcMFwzMDIiIFwKKyAgIlwzNTFcMjA2XDM0MFwzNjNcMzU2XDM3M1wzNzRcMjE3XDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDJoIiBcCisgICJ6XDIwNVwzNTZcMzYzXDM2NlwyNzFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjcxXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMwXW96XDFcMjQ2IiBcCisgICJcMjU2XDI2NlwyMTdcMzc2XDM3N1wzNzRcMlwyMzdcMzUwXDM2N1wwXDMwNFwzNTJcMjUwXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDdcMzQxXDM2NFwzNzBcMzc2XDM3N1wyMTZcMzc2XDM3N1wzNzRcMlwyNzdcMzA0XDMwNl9xfFwyMjddb3oiIFwKKyAgIlwxXDIzMVwyNDFcMjUxXDI3MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMlwzNDZcMzU0XDM1NmJ0XDE3N1wyMjddb3pcMSIgXAorICAiXDI1MVwyNjFcMjcxXDIxNlwzNzZcMzc3XDM3NFwyXDMxNVwzNjJcMzczMVwzMTNcMzU0XDI1NFwyNVwyNzRcMzQ0XDIiIFwKKyAgIihcMzA3XDM1MFwyNjJcMzU1XDM3MFwyMTZcMzc2XDM3N1wzNzRcMlwzMDVcMzEyXDMxNV5we1wyMjddb3pcMVwzMjJcMzMwIiBcCisgICJcMzMyXDI3MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjddb3pcMVwyMzNcMjUyXDI2MVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzVcMzc3bVwzMzJcMzYxXDBcMjc2XDM0NVwyNTdcMjVcMjc0XDM0NFwyTFwzMjJcMzU2IiBcCisgICJcMzU2XDM3M1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjI3XW96XDJ0XDIwN1wyMjJcMzczXDM3NSIgXAorICAiXDM3MlwyNjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY3XDM3NlwzNzdcMzc0XDFcMzI1XDMzMlwzMzRcMjI3XW96XDJcMjE0XDIzM1wyNDJcMzczIiBcCisgICJcMzc1XDM3MlwyMTRcMzc2XDM3N1wzNzRcMlwzMzNcMzY0XDM3MSxcMzExXDM1MlwyNjJcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDMwMVwzNTZcMzY2XDIxNVwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyN11velwxXDI3NFwzMDFcMzAzXDI2NyIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI2N1wzNzZcMzc3XDM3NFwxdlwyMTFcMjI1XDIyNl1velwyXDIwNVwyMjRcMjMyXDM2NVwzNzJcMzc1IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDI2NFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIwMyIgXAorICAiXDMzNFwzNjBcMzcwXDM3NlwzNzdcMjE0XDM3NlwzNzdcMzc0XDFcMjM2XDI0NlwyNTZcMjI2XW96XDJoelwyMDVcMzYyIiBcCisgICJcMzY3XDM3MVwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY2XDM3NlwzNzdcMzc0XDFcMzA3XDMxNVwzMTdcMjI2XW96XDJuXDIwMVwyMTQiIFwKKyAgIlwzNjBcMzY2XDM3MFwyMTRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyNzBcMjVcMjc0XDM0NFwySVwzMjBcMzU0XDM2NiIgXAorICAiXDM3M1wzNzZcMjEzXDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJcMjAzXDIyMlwyMzBcMjI2XW96XDFcMjU0XDI2NFwyNzQiIFwKKyAgIlwyNjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzJzXDIwNlwyMjFcMjI1XW96XDJhc35cMzMzXDM0MCIgXAorICAiXDM0M1wyMTNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N01cMzIzXDM1N1wyNzJcMjVcMjc0XDM0NFwyIiIxXDMxM1wzNTQiIFwKKyAgIlwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzNTNcMzYwXDM2M2l7XDIwNlwyMjVdb3pcMmV3XDIwMlwzNTdcMzY1IiBcCisgICJcMzY3XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjZdb3pcMVwyNjVcMjc2XDMwNlwyMTMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2QlwzMTRcMzQ3XDI3NFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzM2XDM2NyIgXAorICAiXDM3NFwyMTNcMzc2XDM3N1wzNzRcMlwzMjJcMzMwXDMzMl5we1wyMjVdb3pcMVwyNTJcMjYyXDI3MlwyNjVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNjVcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjVdb3pcMVwyMTRcMjMzXDI0MlwyMTNcMzc2XDM3N1wzNzRcMlwzNjYiIFwKKyAgIlwzNzNcMzc2QlwzMTRcMzQ3XDI3NlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM3XDM3MFwzNzVcMjEzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyNTNcMjYzXDI3M1wyMjVdb3pcMmZ4XDIwM1wzNjdcMzcxXDM2NlwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMjJcMzMwXDMzMlwyMjVdb3pcMml7XDIwNlwzNjBcMzY2XDM3MFwyMTJcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3NyIgXAorICAiSVwzMjBcMzU0XDMwMFwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzU3XDM3NFwzNzVcMjEyXDM3NlwzNzdcMzc0XDJcMzczIiBcCisgICJcMzc1XDM3Mn5cMjE1XDIyM1wyMjVdb3pcMVwyNjRcMjc0XDMwNVwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMjEwIiBcCisgICJcMjI3XDIzNVwyMjVdb3pcMVwzMDNcMzEwXDMxM1wyMTNcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwzMDJcMjVcMjc0XDM0NCIgXAorICAiXDJCXDMxNFwzNDdcMzcwXDM3NlwzNzdcMjEyXDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVecHtcMjI0XW96XDJtXDIwMCIgXAorICAiXDIxM1wzNzNcMzc1XDM3MlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzdcMzc0XDJcMzQ1XDM1MlwzNTVecHtcMjI0XW96IiBcCisgICJcMX5cMjIxXDIzNVwyMTNcMzc2XDM3N1wzNzRcMXlcMzM2XDM2MFwzMDRcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjI1XW96XDFcMzE1XDMyMlwzMjVcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjUyXDI2MlwyNzJcMjI0XW96XDJfcXxcMzQxXDM0NlwzNTFcMjEyXDM3NlwzNzdcMzc0XDJcMjc0XDM1NSIgXAorICAiXDM3M1wwXDI3NlwzNDVcMzA1XDI1XDI3NFwzNDRcMVwyMjBcMzQzXDM2MVwyMTJcMzc2XDM3N1wzNzRcMlwzNjBcMzY2IiBcCisgICJcMzcwaXtcMjA2XDIyNF1velwxXDIxMVwyMzBcMjM2XDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MSIgXAorICAiaXtcMjA2XDIyNF1velwxXDI1MFwyNjBcMjcwXDIxMlwzNzZcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMzA0XDM1MlwzMDYiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxNlwzNjNcMzc0XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNCIgXAorICAiXW96XDJecHtcMzUyXDM1N1wzNjJcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NFwxXDMxNVwzMjJcMzI1XDIyNF1vIiBcCisgICJ6XDJkdlwyMDFcMzU3XDM2NVwzNjdcMjEyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjQwXDI1XDI3NFwzNDRcM1wwXDMwMiIgXAorICAiXDM1MSxcMzExXDM1MkpcMzIxXDM1NVwyMDNMXDMyMlwzNTZcMkJcMzE0XDM0NyNcMzA0XDM0NlwyNDBcMjVcMjc0XDM0NCIgXAorICAiXDIqXDMxMFwzNTFcMzY3XDM3NVwzNzdcMjEyXDM3NlwzNzdcMzc0XDFxXDIwNFwyMTdcMjI0XW96XDFcMjU3XDI2N1wyNzciIFwKKyAgIlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjI0XW96XDFcMjQ3XDI1N1wyNjdcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMzVcMjVcMjc0XDM0NFw0KlwzMTBcMzUxblwzMzNcMzYyXDI3M1wzNTRcMzcxIiBcCisgICJcMzYwXDM3NVwzNzZcMjEwXDM3NlwzNzdcMzc0XDRcMzU3XDM3NFwzNzVcMzAzXDM2MVwzNzBcMjA2XDM0MFwzNjMvXDMxMiIgXAorICAiXDM1M1wyMzVcMjVcMjc0XDM0NFwxd1wzMzNcMzU2XDIxMlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIyNF1velwxIiBcCisgICJ2XDIxMVwyMjVcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1ZHZcMjAxXDIyM11velwyYXN+IiBcCisgICJcMzUzXDM2MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRcMFwzMDJcMzUxXDIzMlwyNVwyNzRcMzQ0XDMiIFwKKyAgIlwwXDI3NlwzNDVtXDMzMlwzNjFcMzM1XDM2NlwzNzNcMjIwXDM3NlwzNzdcMzc0XDJcMzM2XDM2N1wzNzQoXDMwN1wzNTAiIFwKKyAgIlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxIiBcCisgICJuXDIwMVwyMTRcMjI0XW96XDFcMzQzXDM1MFwzNTNcMjYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDMxM1wzMjBcMzIyIiBcCisgICJcMjI0XW96XDFcMjMzXDI1MlwyNjFcMjEyXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjMxXDI1XDI3NFwzNDRcM1wwXDI3NiIgXAorICAiXDM0NVwyMDZcMzQwXDM2M1wzNTdcMzc0XDM3NVwyMjJcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMzJcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDFcMjc2XDMwM1wzMDVcMjI0XW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW96XDJecHtcMzQ3XDM1NVwzNTciIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMlwzMTZcMzYzXDM3NFwwXDI3NlwzNDVcMjMwXDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzMzciIFwKKyAgIlwzNzBcMzc1XDIyM1wzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2NyIgXAorICAiXDM3NFwyMTVcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N2l7XDIwNlwyMjNdb3pcMVwxNzdcMjE2XDIyNFwyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMWt+XDIxMVwyMjNdb3pcMVwyMDVcMjI0XDIzMlwyMTJcMzc2XDM3N1wzNzRcMUoiIFwKKyAgIlwzMjFcMzU1XDIyN1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDI1N1wzNTFcMzY1XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzIiIFwKKyAgIlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTdcMzc2XDM3N1wzNzRcMVwyNDZcMjU2IiBcCisgICJcMjY2XDIyM11velwyXnB7XDM1NlwzNjNcMzY2XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwzMzVcMzQzXDM0NSIgXAorICAiXDIyNF1velwxXDMwM1wzMTBcMzEzXDIxMVwzNzZcMzc3XDM3NFwyXDMzM1wzNjRcMzcxXDBcMjc2XDM0NVwyMjZcMjUiIFwKKyAgIlwyNzRcMzQ0XDIjXDMwNFwzNDZcMzE2XDM2M1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NCIgXAorICAiXDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIyMFwzNzZcMzc3XDM3NFwxXDMzNVwzNDNcMzQ1XDIyNF1velwxXDMwNiIgXAorICAiXDMxNFwzMTZcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI2NFwyNzRcMzA1XDIyM11velwyY3VcMjAwXDM2NyIgXAorICAiXDM3MVwzNjZcMjExXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjI2XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNDdcMzcwIiBcCisgICJcMzc2XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMjJcMzc2XDM3N1wzNzRcMXRcMjA3XDIyMlwyMjNdb3pcMVwyMzZcMjQ2XDI1NlwyNjBcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTVcMjM0XDI0M1wyMjNdb3pcMVwyMzFcMjQxXDI1MVwyMTFcMzc2XDM3N1wzNzRcMlwzNDdcMzcwIiBcCisgICJcMzc2XDBcMjc2XDM0NVwyMjVcMjVcMjc0XDM0NFwyKlwzMTBcMzUxXDM1N1wzNzRcMzc1XDIyNFwzNzZcMzc3XDM3NCIgXAorICAiXDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMjNcMzc2XDM3N1wzNzRcMVwyNjEiIFwKKyAgIlwyNzFcMzAyXDIyM11velwxcVwyMDRcMjE3XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMWl7XDIwNlwyMjNdb3pcMSIgXAorICAiXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyNVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDYiIFwKKyAgIlwzMzdcMzcwXDM3NVwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNiIgXAorICAiXDM2N1wzNzRcMjI0XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjI0XW96XDFcMzU2XDM2M1wzNjZcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMzQ1XDM1MlwzNTVcMjIzXW96XDJhc35cMzcwXDM3MlwzNjdcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMSxcMzExXDM1MlwyMjRcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTNcMzYwXDM3MVwyMjRcMzc2XDM3N1wzNzRcMSIgXAorICAibVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjI2XDM3NlwzNzdcMzc0XDFxXDIwNCIgXAorICAiXDIxN1wyMjNdb3pcMVwzMTRcMzIxXDMyNFwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMzExXDMxNlwzMjFcMjIzIiBcCisgICJdb3pcMVwyMDJcMjIxXDIyN1wyMTFcMzc2XDM3N1wzNzRcMVwzMjBcMzY1XDM3NlwyMjVcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3IiBcCisgICJcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDIzN1wzNTBcMzY3XDIxMVwzNzZcMzc3XDM3NFwxXDIzNiIgXAorICAiXDI0NlwyNTZcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDI1NFwyNjRcMjc0IiBcCisgICJcMjIzXW96XDFcMjU1XDI2NVwyNzVcMjExXDM3NlwzNzdcMzc0XDF5XDMzNlwzNjBcMjI0XDI1XDI3NFwzNDRcMi9cMzEyIiBcCisgICJcMzUzXDM3MFwzNzZcMzc3XDIyM1wzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDciIFwKKyAgIlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcM1wyMzZcMzQ3XDM2NlwwXDI3NlwzNDVKXDMyMVwzNTVcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMTFcMzE2XDMyMVwyMjNdb3pcMVwyMTVcMjM0XDI0M1wyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMTRcMjMzXDI0MlwyMjNdb3pcMVwzMjZcMzMzXDMzNVwyMTFcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMjRcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMzEyXDM1N1wzNzBcMjIzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFw1XDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyNVwyNzRcMzQ0XDAiIFwKKyAgIlwyNzZcMzQ1XDM2N1wzNzVcMzc3XDIxMFwzNzZcMzc3XDM3NFwyXDM1NlwzNjNcMzY2XnB7XDIyMl1velwxb1wyMDJcMjE1IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMl1velwyYXN+XDM2NlwzNzNcMzc2XDIxMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzU3XDM3NFwzNzVcMFwyNzZcMzQ1XDIyM1wyNVwyNzRcMzQ0XDFKXDMyMVwzNTVcMjIzXDM3NlwzNzciIFwKKyAgIlwzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NCIgXAorICAiXDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMXVcMjEwXDIyNFwyMjJdb3pcMl5we1wzNzBcMzcyXDM2N1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDJcMzczXDM3NSIgXAorICAiXDM3Ml9xfFwyMjJdb3pcMXVcMjEwXDIyNFwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMzU0XDM2N1wyMjRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzEyXDM1N1wzNzBcMjIyXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMDRcMjVcMjc0XDM0NFwxXDIwNCIgXAorICAiXDMzNVwzNjFcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI0MFwyNTBcMjIzXW96XDFcMzQyXDM0N1wzNTJcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMzUxXDM1NlwzNjBcMjIzXW96XDFcMjI1XDIzNVwyNDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMjNcMjVcMjc0XDM0NFwxLFwzMTFcMzUyXDIyMlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIzMlwyNSIgXAorICAiXDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDUiIFwKKyAgIlwyMDVcMjVcMjc0XDM0NFwxQlwzMTRcMzQ3XDIxMVwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwxXDMxNyIgXAorICAiXDMyNFwzMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDMyNlwzMzNcMzM1XDIyM11velwxXDI1M1wyNjNcMjczIiBcCisgICJcMjExXDM3NlwzNzdcMzc0XDFCXDMxNFwzNDdcMjIzXDI1XDI3NFwzNDRcMVwyMTFcMzQyXDM2NVwyMjFcMzc2XDM3NyIgXAorICAiXDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0IiBcCisgICJcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjA2XDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwzMDdcMzE1XDMxN1wyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMjNdb3pcMVwzMDVcMzEyXDMxNVwyMTFcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMjNcMjVcMjc0XDM0NFwxIiBcCisgICJcMzM3XDM3MFwzNzVcMjIwXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzYiIFwKKyAgIlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTBcMjVcMjc0XDM0NFwxXDM1NiIgXAorICAiXDM3M1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzM3XDM0NFwzNDZcMjIzXW96XDFcMjUzXDI2M1wyNzNcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjc0XDMwMVwzMDNcMjIzXW96XDFcMzMzXDM0MFwzNDNcMjEwXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjIyXDI1XDI3NFwzNDRcMShcMzA3XDM1MFwyMjBcMzc2XDM3N1wzNzRcMVwyMzEiIFwKKyAgIlwzNDJcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjExXDI1XDI3NFwzNDRcMVwzMDJcMzU3XDM2N1wyMTBcMzc2XDM3N1wzNzRcMlwzNjQiIFwKKyAgIlwzNzFcMzc0XnB7XDIyMl1velwxXDIzNlwyNDZcMjU2XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNTdcMjY3IiBcCisgICJcMjc3XDIyM11velwxXDM1M1wzNjBcMzYzXDIxMFwzNzZcMzc3XDM3NFwxXDMxNlwzNjNcMzc0XDIyM1wyNVwyNzRcMzQ0IiBcCisgICJcMVxcXDMyNlwzNTVcMjE3XDM3NlwzNzdcMzc0XDJcMzIwXDM2NVwzNzZcMzFcMjc1XDM0NVwyMzFcMjVcMjc0XDM0NCIgXAorICAiXDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxMlwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMTFcMzc2XDM3N1wzNzRcMWd5XDIwNFwyMjJdb3pcMVwyMTZcMjM2XDI0NFwyNTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjNdb3pcMVwzNjZcMzcwXDM2NFwyMTBcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2MlwzNTVcMzcwXDIyM1wyNVwyNzRcMzQ0XDFcMjIwXDM0M1wzNjFcMjE3XDM3NlwzNzdcMzc0XDFKXDMyMSIgXAorICAiXDM1NVwyMzFcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDciIFwKKyAgIlwzNjZcMFwyNzZcMzQ1XDIxM1wyNVwyNzRcMzQ0XDFcMjExXDM0MlwzNjVcMjExXDM3NlwzNzdcMzc0XDFtXDIwMFwyMTMiIFwKKyAgIlwyMjJdb3pcMVwyMDRcMjIzXDIzMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjI2XDI0NlwyNTRcMjIzXW8iIFwKKyAgInpcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MFwzNjdcMjIzXDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyMTZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM1MFwzNzFcMzc3XDBcMjc2XDM0NVwyMzBcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0IiBcCisgICJcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxNFwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExIiBcCisgICJcMzc2XDM3N1wzNzRcMXVcMjEwXDIyNFwyMjJdb3pcMXlcMjE0XDIzMFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWN1XDIwMFwyMTFcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjE2XDM3NlwzNzdcMzc0XDFcMjM1XDM0NlwzNjVcMjMwXDI1XDI3NFwzNDRcMiVcMzA1IiBcCisgICJcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTVcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjExXDM3NlwzNzdcMzc0XDFcMjAwXDIxN1wyMjVcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjIyXDI0MVwyNDdcMjIyXW96XDFqfVwyMTBcMjExXDM3NlwzNzdcMzc0XDFcMjIwXDM0MyIgXAorICAiXDM2MVwyMjNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIxNlwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIyN1wyNVwyNzQiIFwKKyAgIlwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjE2IiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMVwzNzZcMzc3XDM3NFwxXDIxMFwyMjdcMjM1XDIyMl1velwxc1wyMDZcMjIxIiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIyMl1velwxblwyMDFcMjE0XDIxMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjIzXDI1XDI3NFwzNDRcMVwzNTBcMzcxXDM3N1wyMTZcMzc2XDM3N1wzNzRcMSIgXAorICAiaVwzMjZcMzU2XDIyNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2IiBcCisgICJcMzQ3XDM2NlwwXDI3NlwzNDVcMjE3XDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTFcMzc2XDM3N1wzNzRcMVwyMTVcMjM0IiBcCisgICJcMjQzXDIyMl1velwxbVwyMDBcMjEzXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyMjJcMjQxXDI0N1wyMjJdbyIgXAorICAielwxbFwxNzdcMjEyXDIxMVwzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMTZcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMjVcMjVcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNCIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMFwyNzZcMzQ1XDIyMFwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjJdb3pcMXNcMjA2XDIyMVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMzFcMjQxXDI1MVwyMjJdb3pcMWV3XDIwMlwyMTFcMzc2XDM3N1wzNzRcMVwyMzFcMzQyXDM2MlwyMjNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzIwXDM2NVwzNzZcMjE2XDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMjI0XDI1XDI3NFwzNDRcMiNcMzA0IiBcCisgICJcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMjc2XDM0NVwyMjFcMjVcMjc0XDM0NCIgXAorICAiXDFpXDMyNlwzNTZcMjExXDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjIyXW96XDF1XDIxMFwyMjRcMjU2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU2XDM3NlwzNzdcMzc0XDFcMjQyXDI1MlwyNjJcMjIyXW96XDFecHtcMjExXDM3NlwzNzdcMzc0XDFcMjM3XDM1MCIgXAorICAiXDM2N1wyMjNcMjVcMjc0XDM0NFwxXDMwMVwzNTZcMzY2XDIxNlwzNzZcMzc3XDM3NFwxXDMzM1wzNjRcMzcxXDIyM1wyNSIgXAorICAiXDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NFwwXDI3NlwzNDUiIFwKKyAgIlwyMjJcMjVcMjc0XDM0NFwxblwzMzNcMzYyXDIxMVwzNzZcMzc3XDM3NFwxd1wyMTJcMjI2XDIyMl1velwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI0NlwyNTZcMjY2XDIyM11velwxXDM3MFwzNzJcMzY3XDIxMCIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjYwXDM1M1wzNjZcMjIzXDI1XDI3NFwzNDRcMVwyMzNcMzQ1XDM2NFwyMTdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxLFwzMTFcMzUyXDIyMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE1XDM3NlwzNzdcMzc0XDFcMzEyIiBcCisgICJcMzU3XDM3MFwyMjNcMjVcMjc0XDM0NFwxXDIwNFwzMzVcMzYxXDIxMVwzNzZcMzc3XDM3NFwxb1wyMDJcMjE1XDIyMiIgXAorICAiXW96XDFcMjA1XDIyNFwyMzJcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI1MlwyNjJcMjcyXDIyM11velwxXDM1NSIgXAorICAiXDM2MlwzNjVcMjEwXDM3NlwzNzdcMzc0XDFcMzE0XDM2MVwzNzJcMjIzXDI1XDI3NFwzNDRcMW1cMzMyXDM2MVwyMTciIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIyMFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE2IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMjNcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFpe1wyMDZcMjIyXW96XDFcMjExXDIzMFwyMzZcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI2NlwyNzdcMzA3IiBcCisgICJcMjIzXW96XDFcMzQwXDM0NVwzNTBcMjEwXDM3NlwzNzdcMzc0XDFcMzU2XDM3M1wzNzRcMjIzXDI1XDI3NFwzNDRcMSIgXAorICAiLFwzMTFcMzUyXDIyMFwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIxNlwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2NyIgXAorICAiXDM3NFwyMTdcMzc2XDM3N1wzNzRcMVxcXDMyNlwzNTVcMjIzXDI1XDI3NFwzNDRcMVwyNzRcMzU1XDM3M1wyMTBcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MlwzNzRcMzcxX3F8XDIyMl1velwxXDIyNlwyNDZcMjU0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwN1wzMTVcMzE3XDIyM11velwxXDMxM1wzMjBcMzIyXDIxMVwzNzZcMzc3XDM3NFwxXDBcMzAyXDM1MVwyMjIiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDM1N1wzNzRcMzc1XDIxN1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3R1wzMTciIFwKKyAgIlwzNTNcMjE0XDI1XDI3NFwzNDRcMihcMzA3XDM1MFwzMzZcMzY3XDM3NFwyMjBcMzc2XDM3N1wzNzRcMSVcMzA1XDM0NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjEwXDM3NlwzNzdcMzc0XDFcMzQzXDM1MFwzNTNcMjIzXW96XDEiIFwKKyAgIlwyNTRcMjY0XDI3NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzI3XDMzNFwzMzdcMjIzXW96XDFcMjU3XDI2NyIgXAorICAiXDI3N1wyMTFcMzc2XDM3N1wzNzRcMUJcMzE0XDM0N1wyMjNcMjVcMjc0XDM0NFwxXDIzN1wzNTBcMzY3XDIyMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzcwXDM3NlwzNzduXDMzM1wzNjJcMzFcMjc1XDM0NVwyMTFcMjVcMjc0XDM0NFwySlwzMjFcMzU1IiBcCisgICJcMzU2XDM3M1wzNzRcMjIwXDM3NlwzNzdcMzc0XDFcMzE1XDM2MlwzNzNcMjIzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTAiIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMVwzMTZcMzIzXDMyNlwyMjNdb3pcMVwyNzZcMzAzXDMwNVwyNTZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NiIgXAorICAiXDM3N1wzNzRcMVwzNDZcMzU0XDM1NlwyMjNdb3pcMVwyMjVcMjQ1XDI1M1wyMTFcMzc2XDM3N1wzNzRcMWtcMzI3XDM1NyIgXAorICAiXDIyM1wyNVwyNzRcMzQ0XDFHXDMxN1wzNTNcMjIyXDM3NlwzNzdcMzc0XDNcMzIwXDM2NVwzNzZaXDMyNVwzNTRcMFwzMDEiIFwKKyAgIlwzNTBcMjA0XDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVHXDMxN1wzNTNcMjc0XDM1NVwzNzNcMjIyXDM3NlwzNzdcMzc0IiBcCisgICJcMXdcMzMzXDM1NlwyMjNcMjVcMjc0XDM0NFwxIiIzXDMxNFwzNTVcMjExXDM3NlwzNzdcMzc0XDFcMjY0XDI3NFwzMDUiIFwKKyAgIlwyMjNdb3pcMVwzMTVcMzIyXDMyNVwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzY2XDM3M1wzNzZcMjIzXW8iIFwKKyAgInpcMXpcMjE1XDIzMVwyMTFcMzc2XDM3N1wzNzRcMVwyMzdcMzUwXDM2N1wyMjNcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDUiIFwKKyAgIlwzMzVcMzY2XDM3M1wyMjNcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTZcMzYzXDM3NFwyMDJcMjYxXDM1NFwzNjciIFwKKyAgIlwyXDMxM1wzNjBcMzcxXDM2NlwzNzNcMzc2XDIyM1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDBcMzAyXDM1MVwyMjMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExXDM3NlwzNzdcMzc0XDFcMjMwXDI1MFwyNTZcMjIzXW96XDFcMzM0XDM0MiIgXAorICAiXDM0NFwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjIyXW96XDFld1wyMDJcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzNDdcMzcwXDM3NlwyMjRcMjVcMjc0XDM0NFwxbVwzMzJcMzYxXDI1NFwzNzZcMzc3XDM3NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjI0XDI1XDI3NFwzNDRcMVwyNjFcMzU0XDM2N1wyMTFcMzc2XDM3N1wzNzRcMX1cMjIwXDIzM1wyMjNdb3pcMSIgXAorICAiXDM2NlwzNzBcMzY0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMjNdb3pcMVwzMzVcMzQzIiBcCisgICJcMzQ1XDIxMVwzNzZcMzc3XDM3NFwxJVwzMDVcMzQ3XDIyM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzNlwzNjdcMzc0IiBcCisgICJcMjUyXDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzcjXDMwNFwzNDZcMjIzXDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDM1NyIgXAorICAiXDM3NFwzNzVcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdhc35cMjIyXW96XDFtXDIwMFwyMTNcMjU3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjU3XDM3NlwzNzdcMzc0XDFcMjUxXDI2MVwyNzFcMjIzXW96XDFcMjY0XDI3NFwzMDVcMjExXDM3NlwzNzdcMzc0XDEiIFwKKyAgImtcMzI3XDM1N1wyMjRcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDI1MlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIyNCIgXAorICAiXDI1XDI3NFwzNDRcMSIiM1wzMTRcMzU1XDIxMVwzNzZcMzc3XDM3NFwxXDMyMlwzMzBcMzMyXDIyM11velwxXDIxMVwyMzAiIFwKKyAgIlwyMzZcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyM11velwxXDIxMVwyMzBcMjM2XDIxMSIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzAxXDM1NlwzNjZcMjI1XDI1XDI3NFwzNDRcMVwyNjJcMzU1XDM3MFwyNTBcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDMzNFwzNjVcMzcyXDBcMjc2XDM0NVwyMjRcMjVcMjc0XDM0NFwxXDIyMFwzNDNcMzYxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjUyXDI2MlwyNzJcMjIzXW96XDFcMjUxXDI2MVwyNzFcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDMzN1wzNDQiIFwKKyAgIlwzNDZcMjIzXW96XDJld1wyMDJcMzczXDM3NVwzNzJcMjEwXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzcjXDMwNFwzNDYiIFwKKyAgIlwyMjRcMjVcMjc0XDM0NFwyXDBcMzAyXDM1MVwzNDdcMzcwXDM3NlwyNDZcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3NyIgXAorICAiLFwzMTFcMzUyXDIyNFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMzN1wzNzBcMzc1XDIxMVwzNzZcMzc3XDM3NFwxXDE3NyIgXAorICAiXDIxNlwyMjRcMjIzXW96XDFcMzA1XDMxMlwzMTVcMjU3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyIiBcCisgICJkdlwyMDFcMjIzXW96XDFcMzMxXDMzNlwzNDFcMjExXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjI1XDI1XDI3NFwzNDQiIFwKKyAgIlwyQlwzMTRcMzQ3XDM3MFwzNzZcMzc3XDI0NVwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIyNVwyNVwyNzRcMzQ0XDFCIiBcCisgICJcMzE0XDM0N1wyMTFcMzc2XDM3N1wzNzRcMlwzNjJcMzY3XDM3MV9xfFwyMjNdb3pcMVwzNDZcMzU0XDM1NlwyNTdcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjBcMzc2XDM3N1wzNzRcMVwyMTBcMjI3XDIzNVwyMjNdb3pcMVwyNDZcMjU2XDI2NlwyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMxNlwzNjNcMzc0XDIyNlwyNVwyNzRcMzQ0XDJNXDMyM1wzNTdcMzcwXDM3NlwzNzdcMjQzXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMjZcMjVcMjc0XDM0NFwxXDI1NlwzNTBcMzY0XDIxMVwzNzZcMzc3XDM3NFwxXDMwMVwzMDYiIFwKKyAgIlwzMTFcMjIzXW96XDFrflwyMTFcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDI1N1wyNjdcMjc3XDIyM11velwyaSIgXAorICAie1wyMDZcMzczXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjI2XDI1XDI3NFwzNDRcMlxcXDMyNlwzNTUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyNDFcMzc2XDM3N1wzNzRcMVwyMjBcMzQzXDM2MVwyMjZcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM3MFwzNzZcMzc3XDIxMVwzNzZcMzc3XDM3NFwxXDIwNFwyMjNcMjMxXDIyM11velwxXDIzMFwyNDBcMjUwXDI2MFwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDMzMVwzMzZcMzQxXDIyNF1velwxXDMxN1wzMjRcMzI3XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzAxXDM1NlwzNjZcMjI3XDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzNjdcMzc1XDM3N1wyMzdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxd1wzMzNcMzU2XDIyN1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjExXDM3NlwzNzdcMzc0XDJcMzUxXDM1NlwzNjAiIFwKKyAgIl5we1wyMjNdb3pcMVwyNzdcMzA0XDMwNlwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFjdSIgXAorICAiXDIwMFwyMjNdb3pcMVwyMjJcMjQxXDI0N1wyMTJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1M1wyMjdcMjVcMjc0XDM0NFwyIiBcCisgICIsXDMxMVwzNTJcMzM0XDM2NVwzNzJcMjM0XDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRJXDMyMFwzNTRcMjI3XDI1XDI3NCIgXAorICAiXDM0NFwyXDBcMzAxXDM1MFwzNjZcMzczXDM3NlwyMTFcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjRdb3pcMVwzNDMiIFwKKyAgIlwzNTBcMzUzXDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwyMTZcMjM2XDI0NFwyMjNdb3pcMmN1XDIwMFwzNjIiIFwKKyAgIlwzNjdcMzcxXDIxMVwzNzZcMzc3XDM3NFwxXDI2MVwzNTRcMzY3XDIzMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1XDIzMyIgXAorICAiXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjMxXDM3NlwzNzdcMzc0XDJcMjYyXDM1NVwzNzBcMFwzMDRcMzUyXDIzMFwyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMTJcMzc2XDM3N1wzNzRcMXNcMjA2XDIyMVwyMjNdb3pcMXFcMjA0XDIxN1wyNjFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjRdb3pcMVwyNTdcMjY3XDI3N1wyMTJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxQlwzMTRcMzQ3XDIzMVwyNVwyNzRcMzQ0XDIiIjFcMzEzXDM1NFwzMDNcMzYxXDM3MFwyMjZcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMzNFwzNjVcMzcySlwzMjFcMzU1XDIzMVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzY2XDM3M1wzNzZcMjExXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzMTVcMzIyXDMyNVwyMjRdb3pcMVwyNTFcMjYxXDI3MVwyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDJcMzYyIiBcCisgICJcMzY3XDM3MWFzflwyMjNdb3pcMmh6XDIwNVwzNzBcMzcyXDM2N1wyMTFcMzc2XDM3N1wzNzRcMlwzMzRcMzY1XDM3MiIgXAorICAiXDBcMjc2XDM0NVwyMzJcMjVcMjc0XDM0NFwzQlwzMTRcMzQ3XDI2MlwzNTVcMzcwXDM3MFwzNzZcMzc3XDIyMVwzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzEzXDM2MFwzNzFMXDMyMlwzNTZcMFwyNzZcMzQ1XDIzMlwyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjQiIFwKKyAgIlwyMTJcMzc2XDM3N1wzNzRcMXpcMjE1XDIzMVwyMjRdb3pcMVwzMzNcMzQwXDM0M1wyNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDdcMjI2XDIzNFwyMjRdb3pcMVwyNzBcMzAwXDMxMVwyMTJcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NiIgXAorICAiXDIzNFwyNVwyNzRcMzQ0XDRcMFwzMDRcMzUybVwzMzJcMzYxXDI3M1wzNTRcMzcxXDM2NlwzNzNcMzc2XDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDRcMzcwXDM3NlwzNzdcMzAyXDM1N1wzNjd5XDMzNlwzNjAoXDMwN1wzNTBcMjM0XDI1XDI3NFwzNDRcMSIgXAorICAiQlwzMTRcMzQ3XDIxMlwzNzZcMzc3XDM3NFwxXDMyNFwzMzFcMzMzXDIyNF1velwxa35cMjExXDI2MlwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMwMVwzMDZcMzExXDIyNF1velwya35cMjExXDM3MlwzNzRcMzcxXDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDJcMzY2XDM3M1wzNzYoXDMwN1wzNTBcMjM2XDI1XDI3NFwzNDRcNVwzMVwyNzVcMzQ1LFwzMTFcMzUyTVwzMjNcMzU3IiBcCisgICJ5XDMzNlwzNjBcMjExXDM0MlwzNjVcMjAyXDIzM1wzNDVcMzY0XDVcMjIwXDM0M1wzNjFcMjA0XDMzNVwzNjFaXDMyNSIgXAorICAiXDM1NDFcMzEzXDM1NFwwXDI3NlwzNDVcMjM2XDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzM2XDM2N1wzNzRcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDVcMjI0XDIzMlwyMjRdb3pcMVwyNDZcMjU2XDI2NlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0IiBcCisgICJcMlwzNjdcMzcxXDM2NmR2XDIwMVwyMjRdb3pcMVwyNzRcMzAxXDMwM1wyMTJcMzc2XDM3N1wzNzRcMlwzMTVcMzYyXDM3MyIgXAorICAiXDBcMjc2XDM0NVwzMDdcMjVcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIxMlwzNzZcMzc3XDM3NFwxXDMyNVwzMzJcMzM0IiBcCisgICJcMjI1XW96XDFcMzQxXDM0NlwzNTFcMjYyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDIzNlwyNDZcMjU2XDIyNF1vIiBcCisgICJ6XDJmeFwyMDNcMzU2XDM2M1wzNjZcMjEyXDM3NlwzNzdcMzc0XDFcMjIxXDM0NFwzNjJcMzA2XDI1XDI3NFwzNDRcMSIgXAorICAiTVwzMjNcMzU3XDIxMlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxdFwyMDdcMjIyXDIyNF1velwxXDE3N1wyMTZcMjI0IiBcCisgICJcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI2M1wzNzZcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIyNV1velwxXDIyNlwyNDZcMjU0XDIxM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFMXDMyMlwzNTZcMzA0XDI1XDI3NFwzNDRcMixcMzExXDM1MlwzNjZcMzczXDM3NlwyMTJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDI2NVwyNzZcMzA2XDIyNV1velwxXDMwMlwzMDdcMzEyXDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMXVcMjEwIiBcCisgICJcMjI0XDIyNF1velwyXnB7XDMzMVwzMzZcMzQxXDIxMlwzNzZcMzc3XDM3NFwyXDM2NlwzNzNcMzc2L1wzMTJcMzUzXDMwMiIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDMwMlwzNTFcMzM2XDM2N1wzNzRcMjEyXDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNkdlwyMDEiIFwKKyAgIlwyMjRdb3pcMmR2XDIwMVwzNjRcMzcxXDM3NFwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDFcMzAyXDMwN1wzMTJcMjI1IiBcCisgICJdb3pcMndcMjEyXDIyNlwzNzJcMzc0XDM3MVwyMTJcMzc2XDM3N1wzNzRcMlwzNTBcMzcxXDM3NyVcMzA1XDM0N1wzMDAiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMFwzMDFcMzUwXDMxNFwzNjFcMzcyXDIxM1wzNzZcMzc3XDM3NFwxXDIyN1wyMzdcMjQ3XDIyNSIgXAorICAiXW96XDFcMjQ2XDI1NlwyNjZcMjY0XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxbFwxNzdcMjEyXDIyNSIgXAorICAiXW96XDFcMjUyXDI2MlwyNzJcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzVcMFwzMDRcMzUyXDI3NlwyNVwyNzQiIFwKKyAgIlwzNDRcMlwwXDI3NlwzNDVcMjc0XDM1NVwzNzNcMjEzXDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjI1XW96XDJhIiBcCisgICJzflwzNTNcMzYwXDM2M1wyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDFcMjcwXDMwMFwzMTFcMjI1XW96XDJecHtcMzIyIiBcCisgICJcMzMwXDMzMlwyMTNcMzc2XDM3N1wzNzRcMlwzMzJcMzYzXDM3MCNcMzA0XDM0NlwyNzRcMjVcMjc0XDM0NFwyXDBcMjc2IiBcCisgICJcMzQ1XDI3M1wzNTRcMzcxXDIxM1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZHZcMjAxXDIyNV1velwxXDIzNlwyNDYiIFwKKyAgIlwyNTZcMjY1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1aHpcMjA1XDIyNV1velwyaXtcMjA2XDM1NCIgXAorICAiXDM2MVwzNjRcMjEzXDM3NlwzNzdcMzc0XDJcMzM3XDM3MFwzNzUqXDMxMFwzNTFcMjcyXDI1XDI3NFwzNDRcMlwwXDMwMiIgXAorICAiXDM1MVwzMTRcMzYxXDM3MlwyMTNcMzc2XDM3N1wzNzRcMlwzNzFcMzczXDM3MHhcMjEzXDIyN1wyMjVdb3pcMl9xfFwzNDYiIFwKKyAgIlwzNTRcMzU2XDI2NVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMVwyNjFcMjcxXDMwMlwyMjZdb3pcMlwyMDVcMjI0XDIzMiIgXAorICAiXDM3M1wzNzVcMzcyXDIxM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0QlwzMTRcMzQ3XDI3MFwyNVwyNzRcMzQ0XDIiIFwKKyAgIiVcMzA1XDM0N1wzMzVcMzY2XDM3M1wyMTRcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjZdb3pcMVwyMzFcMjQxIiBcCisgICJcMjUxXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N21cMjAwXDIxM1wyMjZdb3pcMVwyNDIiIFwKKyAgIlwyNTJcMjYyXDIxNFwzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3aVwzMjZcMzU2XDI2NlwyNVwyNzRcMzQ0XDJCXDMxNCIgXAorICAiXDM0N1wzNTBcMzcxXDM3N1wyMTRcMzc2XDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMjZdb3pcMmJ0XDE3N1wzNTFcMzU2IiBcCisgICJcMzYwXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjdcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjddb3pcMVwyNjFcMjcxXDMwMlwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDI1MFwzNDdcMzcxXDBcMzAxXDM1MFwyNjJcMjVcMjc0XDM0NFwzXDMxXDI3NVwzNDVcMjA2IiBcCisgICJcMzQwXDM2M1wzNzBcMzc2XDM3N1wyMTRcMzc2XDM3N1wzNzRcMlwzMTZcMzIzXDMyNl9xfFwyMjZdb3pcMVwyNTFcMjYxIiBcCisgICJcMjcxXDI2N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMXlcMjE0XDIzMFwyMjZdb3pcMl5we1wzMDFcMzA2XDMxMVwyMTUiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDMzNVwzNjZcMzczL1wzMTJcMzUzXDI2MFwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzEyXDM1NyIgXAorICAiXDM3MFwyMTVcMzc2XDM3N1wzNzRcMlwzMzBcMzM1XDM0MGN1XDIwMFwyMjZdb3pcMmh6XDIwNVwzNjZcMzcwXDM2NFwyNjciIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNzBcMzc2XDM3N1wzNzRcMVwzMzJcMzM3XDM0MlwyMzBcMjIyXDI0MVwyNDdcMVwzNTNcMzYwXDM2MyIgXAorICAiXDIxNVwzNzZcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIzMVwzNDJcMzYyXDBcMzAxXDM1MFwyNTRcMjVcMjc0XDM0NFwzIiBcCisgICJcMFwyNzZcMzQ1d1wzMzNcMzU2XDM2NlwzNzNcMzc2XDIxNVwzNzZcMzc3XDM3NFwyXDM2NVwzNzJcMzc1XDIzNlwyNDYiIFwKKyAgIlwyNTZcMjI3XDIyMlwyNDFcMjQ3XDFcMzA3XDMxNVwzMTdcMjcwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0MVwzNzZcMzc3XDM3NFwzXDM1NlwzNzMiIFwKKyAgIlwzNzRpXDMyNlwzNTZcMFwyNzZcMzQ1XDI1MVwyNVwyNzRcMzQ0XDJKXDMyMVwzNTVcMzM1XDM2NlwzNzNcMzQxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzQzXDM3NlwzNzdcMzc0XDNcMzE2XDM2M1wzNzRaXDMyNVwzNTRcMzFcMjc1XDM0NVwyNDVcMjVcMjc0XDM0NCIgXAorICAiXDJHXDMxN1wzNTNcMzAyXDM1N1wzNjdcMzQzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0NVwzNzZcMzc3XDM3NFwzXDMzNlwzNjdcMzc0bVwzMzJcMzYxIiBcCisgICJcMFwyNzZcMzQ1XDI0MFwyNVwyNzRcMzQ0XDNcMzFcMjc1XDM0NU1cMzIzXDM1N1wzMTZcMzYzXDM3NFwzNDVcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNDdcMzc2XDM3N1wzNzRcNFwzNjZcMzczXDM3NlwyMzdcMzUwXDM2N0lcMzIwXDM1NFwzMVwyNzVcMzQ1XDIzMlwyNSIgXAorICAiXDI3NFwzNDRcNFwwXDI3NlwzNDVCXDMxNFwzNDdcMjMxXDM0MlwzNjJcMzU2XDM3M1wzNzRcMzQ3XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM1MiIgXAorICAiXDM3NlwzNzdcMzc0XDRcMzU2XDM3M1wzNzRcMjM1XDM0NlwzNjVaXDMyNVwzNTQjXDMwNFwzNDZcMjI0XDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMzAyXDM1MUxcMzIyXDM1NlwyMjFcMzQ0XDM2MlwzMzZcMzY3XDM3NFwzNTJcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzU2XDM3NlwzNzciIFwKKyAgIlwzNzRcNlwzMzZcMzY3XDM3NFwyMzdcMzUwXDM2N3dcMzMzXDM1Nk1cMzIzXDM1NyxcMzExXDM1MlwwXDI3NlwzNDVcMjEwIiBcCisgICJcMjVcMjc0XDM0NFw2XDBcMjc2XDM0NSpcMzEwXDM1MUpcMzIxXDM1NW5cMzMzXDM2MlwyMzNcMzQ1XDM2NFwzMjBcMzY1IiBcCisgICJcMzc2XDM1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzNjRcMzc2XDM3N1wzNzRcMTBcMzY3XDM3NVwzNzdcMzU2XDM3M1wzNzRcMzM1XDM2NlwzNzMiIFwKKyAgIlwzMTZcMzYzXDM3NFwzMTVcMzYyXDM3M1wzMzVcMzY2XDM3M1wzNTBcMzcxXDM3N1wzNjZcMzczXDM3NlwzNjRcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NiIgXAorICAiXDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc1XDM3NlwzNzdcMzc0XDIwMiIgXAorICAiXDM3MFwzNzZcMzc3XDI1MFwzNzZcMzc3XDM3NFwxXDM2N1wzNzVcMzc3XDIxN1wzNzZcMzc3XDM3NFwxXDM2N1wzNzUiIFwKKyAgIlwzNzdcMjM3XDM3NlwzNzdcMzc0XDFcMzY3XDM3NVwzNzdcMjMwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFw0XDIzN1wzNTAiIFwKKyAgIlwzNjdcMFwyNzZcMzQ1XDMxXDI3NVwzNDVcMjAzXDMzNFwzNjBcMjQ1XDM3NlwzNzdcMzc0XDVcMzE2XDM2M1wzNzQjIiBcCisgICJcMzA0XDM0NlwyNVwyNzRcMzQ0R1wzMTdcMzUzXDM2N1wzNzVcMzc3XDIxM1wzNzZcMzc3XDM3NFw1XDMzNVwzNjZcMzczIiBcCisgICIoXDMwN1wzNTBcMjVcMjc0XDM0NEJcMzE0XDM0N1wzNjZcMzczXDM3NlwyMzNcMzc2XDM3N1wzNzRcNVwzNTZcMzczXDM3NCIgXAorICAiL1wzMTJcMzUzXDI1XDI3NFwzNDQqXDMxMFwzNTFcMzM3XDM3MFwzNzVcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NCIgXAorICAiXDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyNDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjYwXDM1M1wzNjZcMjEzXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDIzNVwzNDZcMzY1XDIzM1wzNzZcMzc3XDM3NFwxXDIzMVwzNDJcMzYyXDIwM1wyNVwyNzRcMzQ0XDF5XDMzNlwzNjAiIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MCIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjMiIFwKKyAgIlwyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3IiBcCisgICJcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1NyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMSIgXAorICAiXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjIiIFwKKyAgIlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwIiBcCisgICJcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjMyXDM3NlwzNzdcMzc0XDdcMzExXDMxNlwzMjFcMjExXDIzMFwyMzZqfVwyMTBjdVwyMDAiIFwKKyAgIm5cMjAxXDIxNFwyMzNcMjQzXDI1M1wzMzNcMzQwXDM0M1wyMDZcMzc2XDM3N1wzNzRcMlwyMzZcMjQ2XDI1NmR2XDIwMSIgXAorICAiXDIwNV1velw0X3F8a35cMjExXDIyMlwyNDFcMjQ3XDMzN1wzNDRcMzQ2XDIxMFwzNzZcMzc3XDM3NFw3XDMyMlwzMzAiIFwKKyAgIlwzMzJcMjIyXDI0MVwyNDdsXDE3N1wyMTJjdVwyMDBrflwyMTFcMjIyXDI0MVwyNDdcMzIyXDMzMFwzMzJcMjA2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwyNTdcMjY3XDI3N2d5XDIwNFwyMDVdb3pcNF5we2l7XDIwNlwyMTFcMjMwXDIzNlwzMjVcMzMyXDMzNCIgXAorICAiXDIxMFwzNzZcMzc3XDM3NFwxMFwzMTNcMzYwXDM3MVxcXDMyNlwzNTUlXDMwNVwzNDdcMFwyNzZcMzQ1XDBcMzAyXDM1MSIgXAorICAiR1wzMTdcMzUzXDIzN1wzNTBcMzY3XDM3MFwzNzZcMzc3XDIwNVwzNzZcMzc3XDM3NFwyXDIzNVwzNDZcMzY1XDBcMzA0IiBcCisgICJcMzUyXDIxMlwyNVwyNzRcMzQ0XDRcMFwyNzZcMzQ1XDBcMzA0XDM1Mk1cMzIzXDM1N1wzMTVcMzYyXDM3M1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDdcMjVcMjc0XDM0NFw0XDBcMzAxXDM1MEJcMzE0XDM0N1wyMzNcMzQ1XDM2NCIgXAorICAiXDM3MFwzNzZcMzc3XDIwN1wzNzZcMzc3XDM3NFw3XDMwMlwzNTdcMzY3TVwzMjNcMzU3I1wzMDRcMzQ2XDBcMjc2XDM0NSIgXAorICAiXDBcMzA0XDM1MkpcMzIxXDM1NVwyNjBcMzUzXDM2NlwyMTBcMzc2XDM3N1wzNzRcNFwzMTVcMzYyXDM3M01cMzIzXDM1NyIgXAorICAiI1wzMDRcMzQ2XDMxXDI3NVwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDRcMzc2XDM3N1wzNzRcNFwzMjMiIFwKKyAgIlwzNjRcMzY3XFxcMzI2XDM1NSVcMzA1XDM0N1wwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxMFwzMzRcMzY1XDM3Mm1cMzMyXDM2MShcMzA3XDM1MFwwXDI3NlwzNDVcMFwzMDJcMzUxQlwzMTQiIFwKKyAgIlwzNDdcMjMzXDM0NVwzNjRcMzcwXDM3NlwzNzdcMjA3XDM3NlwzNzdcMzc0XDRcMzM2XDM2N1wzNzRtXDMzMlwzNjEoIiBcCisgICJcMzA3XDM1MFwwXDI3NlwzNDVcMjA3XDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMwXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTZcMzYzXDM2NlwyMDJcMjIxXDIyN1wyMDZdb3pcM15we1wyNDdcMjU3XDI2N1wzNzNcMzc1XDM3MlwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMyN1wzMzRcMzM3XDIxMl1velwyX3F8XDMwM1wzMTBcMzEzXDIwNVwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzY0XDM3MVwzNzRcMjIyXDI0MVwyNDdcMjA3XW96XDJcMjIyXDI0MVwyNDdcMzcwXDM3MlwzNjdcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNTNcMzYwXDM2M15we1wyMTJdb3pcMVwyNTRcMjY0XDI3NFwyMDVcMzc2XDM3N1wzNzRcMlwzNzBcMzc2IiBcCisgICJcMzc3bVwzMzJcMzYxXDIwN1wyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzUwXDM3MVwzNzdcMjAzXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNzBcMzc2XDM3N1wwXDI3NlwzNDVcMjE2XDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDIzNVwzNDZcMzY1XDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxMlwyNVwyNzRcMzQ0XDJCXDMxNFwzNDdcMzU3XDM3NFwzNzVcMjA0XDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNjdcMzc1XDM3N1pcMzI1XDM1NFwyMDdcMjVcMjc0XDM0NFwyR1wzMTdcMzUzXDM1N1wzNzRcMzc1XDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMzFcMjc1XDM0NVwyMTJcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjU2XDM1MFwzNjRcMFwyNzZcMzQ1XDIxMlwyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjA0IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyMDZcMzQwXDM2M1wzMVwyNzVcMzQ1XDIwNlwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzM1XDM2NiIgXAorICAiXDM3M1wyMDVcMzc2XDM3N1wzNzRcMlwzMDJcMzU3XDM2N1wwXDMwMVwzNTBcMjEyXDI1XDI3NFwzNDRcMWtcMzI3XDM1NyIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjdcMzc2XDM3N1wzNzRcMlwzNjRcMzcxXDM3NHVcMjEwXDIyNFwyMTFdb3pcMVwyNDJcMjUyIiBcCisgICJcMjYyXDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwyX3F8XDMyNVwzMzJcMzM0XDIwM1wzNzZcMzc3IiBcCisgICJcMzc0XDJcMzczXDM3NVwzNzJcMjEwXDIyN1wyMzVcMjExXW96XDJcMjExXDIzMFwyMzZcMzczXDM3NVwzNzJcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdb3pcMVwzMDRcMzExXDMxNFwyMDRcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NiIgXAorICAiXDIxMVwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzY2XDM3M1wzNzZcMjAyXDM3NlwzNzdcMzc0XDFcMzU3XDM3NFwzNzUiIFwKKyAgIlwyMjBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwyNzRcMzU1XDM3M1wyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjEzIiBcCisgICJcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIwNFwzNzZcMzc3XDM3NFwxTFwzMjJcMzU2XDIxMVwyNVwyNzRcMzQ0XDIiIjMiIFwKKyAgIlwzMTRcMzU1XDM3MFwzNzZcMzc3XDIwM1wzNzZcMzc3XDM3NFwyXDMxM1wzNjBcMzcxXDBcMjc2XDM0NVwyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMFwyNzZcMzQ1XDIxM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMDNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMTFcMjVcMjc0XDM0NFwyXDBcMzA0IiBcCisgICJcMzUyXDM0N1wzNzBcMzc2XDIwM1wzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0XDBcMzA0XDM1MlwyMTNcMjVcMjc0XDM0NCIgXAorICAiXDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwxXDI1MVwyNjFcMjcxXDIxM11velwxXDMyMlwzMzBcMzMyIiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjAwXDIxN1wyMjVcMjAzXDM3NlwzNzdcMzc0XDEiIFwKKyAgIlwyNzdcMzA0XDMwNlwyMTNdb3pcMVwyNzdcMzA0XDMwNlwyMDJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMTRdIiBcCisgICJvelwyan1cMjEwXDM3M1wzNzVcMzcyXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIm5cMzMzXDM2MlwyMDJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMjFcMjVcMjc0XDM0NFwxIiIxXDMxM1wzNTRcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjE0XDI1XDI3NFwzNDRcMVwzMzJcMzYzXDM3MFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzN1wzNTBcMzY3XDIxM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAzXDM3NlwzNzdcMzc0XDFJXDMyMFwzNTQiIFwKKyAgIlwyMTRcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMlwzMjBcMzY1XDM3NlwzMVwyNzVcMzQ1XDIxMlwyNVwyNzRcMzQ0IiBcCisgICJcMUxcMzIyXDM1NlwyMDNcMzc2XDM3N1wzNzRcMVwyMDNcMzM0XDM2MFwyMTRcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3Y3VcMjAwXDIwM11velw1c1wyMDZcMjIxXDMxN1wzMjQiIFwKKyAgIlwzMjdcMzQzXDM1MFwzNTNcMjc2XDMwM1wzMDVld1wyMDJcMjAzXW96XDFcMjEwXDIyN1wyMzVcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMXlcMjE0XDIzMFwyMDNcMzQ3XDM1NVwzNTdcMlwzNDZcMzU0XDM1NlwyNjRcMjc0IiBcCisgICJcMzA1XDIwM11velwyXnB7XDM1N1wzNjVcMzY3XDIwMlwzNzZcMzc3XDM3NFwxcFwyMDNcMjE2XDIwM11velw1a35cMjExIiBcCisgICJcMzA3XDMxNVwzMTdcMzQzXDM1MFwzNTNcMzA2XDMxNFwzMTZrflwyMTFcMjAzXW96XDFwXDIwM1wyMTZcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMWt+XDIxMVwyMDRcMzQ3XDM1NVwzNTdcMlwzMDRcMzExXDMxNF8iIFwKKyAgInF8XDIwM11velwxXDMzNFwzNDJcMzQ0XDIwMlwzNzZcMzc3XDM3NFwxQlwzMTRcMzQ3XDIwM1wyNVwyNzRcMzQ0XDVcMCIgXAorICAiXDMwMVwzNTBcMjMzXDM0NVwzNjRcMzMzXDM2NFwzNzFcMjYwXDM1M1wzNjYoXDMwN1wzNTBcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlw0XDBcMjc2XDM0NVwzNjdcMzc1XDM3N1wzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzM1IiBcCisgICJcMzY2XDM3M1wyMDRcMjVcMjc0XDM0NFwzXDMwMlwzNTdcMzY3XDMzNVwzNjZcMzczXDIwNlwzNDBcMzYzXDIwNFwyNSIgXAorICAiXDI3NFwzNDRcMVwzNTZcMzczXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMDIiIFwKKyAgIlwzNTdcMzY3XDIwM1wzMzVcMzY2XDM3M1wyXDMwMlwzNTdcMzY3XDBcMzA0XDM1MlwyMDNcMjVcMjc0XDM0NFwxXDIwNyIgXAorICAiXDM0MVwzNjRcMjAyXDM3NlwzNzdcMzc0XDEsXDMxMVwzNTJcMjAzXDI1XDI3NFwzNDRcNVwwXDMwMlwzNTFcMjM2XDM0NyIgXAorICAiXDM2NlwzMzJcMzYzXDM3MFwyNTZcMzUwXDM2NCNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFw1XDBcMzAyXDM1MVwzNzAiIFwKKyAgIlwzNzZcMzc3XDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwxd1wzMzNcMzU2IiBcCisgICJcMjA0XDMzNVwzNjZcMzczXDFCXDMxNFwzNDdcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwybVwzMzJcMzYxXDMzNFwzNjVcMzcyXDIwM1wzMzVcMzY2XDM3MyIgXAorICAiXDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDVcMFwyNzZcMzQ1XDIwNlwzNDBcMzYzXDMyM1wzNjRcMzY3XDI3M1wzNTRcMzcxMVwzMTNcMzU0IiBcCisgICJcMjA0XDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3M1wyMDJcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDJMXDMyMlwzNTZcMzMyXDM2M1wzNzBcMjAzXDMzNVwzNjZcMzczXDFuXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcMWsiIFwKKyAgIlwzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMjRcMzMxXDMzM1wyMDNdb3pcMmN1XDIwMFwzNTMiIFwKKyAgIlwzNjBcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDMwN1wzMTVcMzE3XDIwM11velw0YXN+XDM3MlwzNzRcMzcxXDM3NlwzNzciIFwKKyAgIlwzNzRcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFoelwyMDVcMjAzXW96IiBcCisgICJcM1wzNDFcMzQ2XDM1MVwzNzZcMzc3XDM3NFwzNDdcMzU1XDM1N1wyMDNdb3pcMl5we1wzMzVcMzQzXDM0NVwyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIwNF1velwzXDM0N1wzNTVcMzU3XDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwMyIgXAorICAiXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDF+XDIxNVwyMjNcMjAzXW96XDRcMzEzXDMyMFwzMjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNzBcMzc2XDM3N1wzMVwyNzVcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzMzZcMzY3XDM3NFwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcM1wyNzRcMzU1XDM3M1wzNzZcMzc3XDM3NCIgXAorICAiXDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjciIFwKKyAgIlwzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzIzXDM2NFwzNjdcMjAyXDM3NiIgXAorICAiXDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMW4iIFwKKyAgIlwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDNtXDMzMlwzNjFcMzc2XDM3N1wzNzRcMzU2XDM3M1wzNzRcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwxXDI3NFwzNTVcMzczXDIwM1wzNzZcMzc3XDM3NFwyXDMyM1wzNjRcMzY3XDBcMjc2XDM0NVwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMzE1XDM2MlwzNzNcMzc2XDM3N1wzNzRcMzM1XDM2NlwzNzNcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUiIFwKKyAgIlwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyIiBcCisgICJcMzc2XDM3N1wzNzRcMzY2XDM3M1wzNzZcMjA0XDI1XDI3NFwzNDRcMVwzNjZcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDIwN1wzNDFcMzY0XDIwM1wzNzZcMzc3XDM3NFwyXDM2MFwzNzVcMzc2XDBcMzA0XDM1MlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjMzXDM0NVwzNjRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMjNcMzY0XDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMwM1wzMTBcMzEzXDIwM11velwxXDIwNFwyMjNcMjMxXDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdfcXxcMjAzXW96XDNcMzU0XDM2MVwzNjRcMzc2XDM3N1wzNzRcMzA2XDMxNFwzMTYiIFwKKyAgIlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMDNdb3pcM1wzNDFcMzQ2XDM1MSIgXAorICAiXDM3NlwzNzdcMzc0XDMyNlwzMzNcMzM1XDIwM11velwxblwyMDFcMjE0XDIwNVwzNzZcMzc3XDM3NFwxbFwxNzdcMjEyIiBcCisgICJcMjAzXW96XDNcMzI3XDMzNFwzMzdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzdcMzcwXDM3NVwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMSIiM1wzMTRcMzU1XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcM1wyMzZcMzQ3XDM2NlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTciIFwKKyAgIlwzNzZcMzc3XDM3NFwzMTVcMzYyXDM3M1wyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMSIgXAorICAiKlwzMTBcMzUxXDIwM1wyNVwyNzRcMzQ0XDNcMjYxXDM1NFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2M1wzNzRcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMSIgXAorICAiXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzdcMzc0XDFNXDMyMyIgXAorICAiXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDMxXDI3NVwzNDVcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDMzNVwzNjZcMzczXDIwNFwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjAzIiBcCisgICJcMzM0XDM2MFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDQiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDIiIFwKKyAgIlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3IiBcCisgICJcMjAzXW96XDFhc35cMjA1b1wyMDJcMjE1XDFhc35cMjAzXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNSIgXAorICAiXDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0IiBcCisgICJcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIwNSVcMzA1XDM0NyIgXAorICAiXDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0IiBcCisgICJcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDEiIFwKKyAgIlwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwzMVwyNzVcMzQ1XDIwNSIgXAorICAiJVwzMDVcMzQ3XDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDNcMjM3XDM1MFwzNjdcMzc2XDM3N1wzNzRcMzE2XDM2MyIgXAorICAiXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MFwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyMDRcMjVcMjc0IiBcCisgICJcMzQ0XDEjXDMwNFwzNDZcMjA0JVwzMDVcMzQ3XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDF3XDMzM1wzNTZcMjAyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzXW96XDMiIFwKKyAgIlwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNV1velwzIiBcCisgICJcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjVcMjc0IiBcCisgICJcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2NyIgXAorICAiXDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0IiBcCisgICJcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxIiBcCisgICJcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzIiBcCisgICJcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzRcMzQ0XDF3XDMzMyIgXAorICAiXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0XDFld1wyMDJcMjAzIiBcCisgICJdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxN1wzMjRcMzI3XDIxNSIgXAorICAiXW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3XDM3NFwyMTVcMjUiIFwKKyAgIlwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NiIgXAorICAiXDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzIiBcCisgICJcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIxNVwyNVwyNzQiIFwKKyAgIlwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3IiBcCisgICJcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMjc3XDMwNFwzMDZcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcMWV3XDIwMlwyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDMxNyIgXAorICAiXDMyNFwzMjdcMjE1XW96XDNcMzE3XDMyNFwzMjdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTMiIFwKKyAgIlwyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDZcMzE0XDMxNlwzNzZcMzc3XDM3NFwzMzZcMzY3IiBcCisgICJcMzc0XDIxNVwyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NCIgXAorICAiXDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSMiIFwKKyAgIlwzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NFwzIiBcCisgICJrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjE1XDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3IiBcCisgICJcMzc0XDMxNlwzNjNcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDIwNVwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzciIFwKKyAgIlwzNzRcMjE1XDI1XDI3NFwzNDRcMXdcMzMzXDM1NlwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyNyIgXAorICAiXDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzAwXDMwNVwzMTBcMjAzXW96XDFcMjExXDIzMFwyMzZcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMWJ0XDE3N1wyMDNdb3pcM1wzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxXDM3NiIgXAorICAiXDM3N1wzNzRcMzE3XDMyNFwzMjdcMjAzXW96XDFwXDIwM1wyMTZcMjExXDMzNVwzNDNcMzQ1XDNcMzY2XDM3MFwzNjQiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMCIgXAorICAiXDI3NlwzNDVcMjExXDMxNFwzNjFcMzcyXDNcMzUwXDM3MVwzNzdcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1IiBcCisgICJcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwIiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAyXDM1N1wzNjdcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMlwzNTFcMjExXDMxNCIgXAorICAiXDM2MVwzNzJcM1wzNTZcMzczXDM3NFwzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDNcMjVcMjc0XDM0NFwxXDBcMzAxIiBcCisgICJcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2XDM3NyIgXAorICAiXDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzAxXDM1NlwzNjZcMjEwXDMxNCIgXAorICAiXDM2MVwzNzJcMVwzMzdcMzcwXDM3NVwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzYiIFwKKyAgIlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzE0XDMyMVwzMjRcMjAzXW96XDJsXDE3N1wyMTJcMzcyXDM3NFwzNzEiIFwKKyAgIlwyMDNcMzc2XDM3N1wzNzRcMVwzMzNcMzQwXDM0M1wyMDNdb3pcNF5we1wzNjZcMzczXDM3NlwzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxa35cMjExXDIwM11velwzXDM0MVwzNDYiIFwKKyAgIlwzNTFcMzc2XDM3N1wzNzRcMzIwXDMyNlwzMzBcMjAzXW96XDF0XDIwN1wyMjJcMjEzXDM3NlwzNzdcMzc0XDFcMzMwIiBcCisgICJcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdb3pcM1wzMDYiIFwKKyAgIlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwyNzZcMzQ1XDIxM1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2IiBcCisgICJcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0IiBcCisgICJcMW5cMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwza1wzMjdcMzU3XDM3NlwzNzdcMzc0XDMwM1wzNjFcMzcwXDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwwXDMwNFwzNTJcMjEzXDM3NlwzNzdcMzc0XDFcMzMyXDM2M1wzNzBcMjAzXDI1XDI3NFwzNDRcMVwwIiBcCisgICJcMjc2XDM0NVwyMDVcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NiIgXAorICAiXDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMVwzNzBcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMU0iIFwKKyAgIlwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwzNTZcMzczXDM3NFwyMTNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3MyIgXAorICAiXDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDJcMzUzXDM2MFwzNjNecHtcMjAzXW96XDVcMjM2XDI0NlwyNTZcMzY2XDM3M1wzNzZcMzc2IiBcCisgICJcMzc3XDM3NFwzNDdcMzU1XDM1N3dcMjEyXDIyNlwyMDNdb3pcMX5cMjE1XDIyM1wyMDJcMzc2XDM3N1wzNzRcMVwzMDYiIFwKKyAgIlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNFwzNzZcMzc3XDM3NFwyXDMzNVwzNDNcMzQ1XnB7XDIwM11vIiBcCisgICJ6XDNcMzUxXDM1NlwzNjBcMzc2XDM3N1wzNzRcMzM1XDM0M1wzNDVcMjAzXW96XDJidFwxNzdcMzQzXDM1MFwzNTNcMjEyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxIiBcCisgICJcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0IiBcCisgICJcMzU1XDM3M1wyMTJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzQiIFwKKyAgIlwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDIwM1wzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3L1wzMTJcMzUzXDIwM1wyNVwyNzRcMzQ0XDNcMjA0XDMzNVwzNjEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzMzRcMzY1XDM3MlwyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMTJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDM1NlwzNzNcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMjc0XDM1NVwzNzNcMjA0XDM3NlwzNzdcMzc0XDEiIFwKKyAgIklcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFw0XDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM3MFwzNzZcMzc3XDBcMjc2IiBcCisgICJcMzQ1XDIwM1wyNVwyNzRcMzQ0XDFcMjU3XDM1MVwzNjVcMjA0XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDIzM1wzNDUiIFwKKyAgIlwzNjRcMjEzXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwyMDdcMzQxXDM2NFwyMDRcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjA0XW96XDNjdVwyMDBwXDIwM1wyMTZecHtcMjA0XW96XDFcMjc3XDMwNFwzMDYiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMWR2XDIwMVwyMDN+XDIxNVwyMjNcMnZcMjExXDIyNSIgXAorICAiYXN+XDIwM11velwxblwyMDFcMjE0XDIwMlwzNzZcMzc3XDM3NFwyXDM3MVwzNzNcMzcwZHZcMjAxXDIwM11velwyYnQiIFwKKyAgIlwxNzd3XDIxMlwyMjZcMjA1flwyMTVcMjIzXDJcMjAzXDIyMlwyMzBcMzA0XDMxMVwzMTRcMjAyXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMDNdbyIgXAorICAielwxXDMwNlwzMTRcMzE2XDIwMlwzNzZcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1IiBcCisgICIqXDMxMFwzNTFcMjA1LFwzMTFcMzUyXDIiIjFcMzEzXDM1NFwyMDdcMzQxXDM2NFwyMDJcMzc2XDM3N1wzNzRcMVwzNTciIFwKKyAgIlwzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxKlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAyXDM1MVwyMDQiIFwKKyAgIlwyNVwyNzRcMzQ0XDRcMjc0XDM1NVwzNzNcMzc2XDM3N1wzNzRcMzcwXDM3NlwzNzdcMFwzMDJcMzUxXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMlwzMVwyNzVcMzQ1KlwzMTBcMzUxXDIwNSxcMzExXDM1MlwyQlwzMTRcMzQ3XDIzMVwzNDJcMzYyXDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDElXDMwNVwzNDdcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUqXDMxMFwzNTFcMjAzLFwzMTFcMzUyIiBcCisgICJcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMS9cMzEyXDM1MyIgXAorICAiXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1KlwzMTBcMzUxXDIwMyxcMzExXDM1MlwxXDBcMzAxXDM1MFwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFHXDMxN1wzNTNcMjA0XDI1XDI3NFwzNDRcMShcMzA3IiBcCisgICJcMzUwXDIwNSxcMzExXDM1MlwzIiIxXDMxM1wzNTR3XDMzM1wzNTZcMzcwXDM3NlwzNzdcMjAyXDM3NlwzNzdcMzc0XDEiIFwKKyAgIk1cMzIzXDM1N1wyMDRcMjVcMjc0XDM0NFwxKFwzMDdcMzUwXDIwMyxcMzExXDM1MlwxXDBcMzA0XDM1MlwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzZXdcMjAyXDIxMV1velwyIiBcCisgICJcMTc3XDIxNlwyMjRcMzczXDM3NVwzNzJcMjAyXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjE0XW96XDFcMjcwXDMwMCIgXAorICAiXDMxMVwyMDNcMzc2XDM3N1wzNzRcMVwyNTNcMjYzXDI3M1wyMTNdb3pcNF9xfFwzNTJcMzU3XDM2MlwzNzZcMzc3XDM3NCIgXAorICAiXDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwxIiBcCisgICJcMzA2XDMxNFwzMTZcMjAyXDM3NlwzNzdcMzc0XDFcMjMzXDM0NVwzNjRcMjE0XDI1XDI3NFwzNDRcM1wzMDFcMzU2XDM2NiIgXAorICAiXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NCIgXAorICAiXDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NCIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTNcMjVcMjc0XDM0NFwyLFwzMTFcMzUyXDM3MFwzNzZcMzc3XDIwMiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjE0XDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzM1wzNDVcMzY0XDIxNFwyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDFcMjUwXDM0NyIgXAorICAiXDM3MVwyMTRcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxXDI3M1wzNTRcMzcxXDIxNFwyNSIgXAorICAiXDI3NFwzNDRcMVwyMzZcMzQ3XDM2NlwyMDJcMzc2XDM3N1wzNzRcMlwzMTNcMzYwXDM3MVwwXDI3NlwzNDVcMjEzXDI1IiBcCisgICJcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMzBcMzc2XDM3N1wzNzRcMlwzMjVcMzMyXDMzNGd5XDIwNFwyMDciIFwKKyAgIl1velwyeFwyMTNcMjI3XDM1NFwzNjFcMzY0XDIwM1wzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxM11velwxXDIyNSIgXAorICAiXDIzNVwyNDVcMjA0XDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzF+XDIyMVwyMzVcMjEzXW96XDNcMzMzXDM0MFwzNDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNDJcMzQ3XDM1MlwyMDNdb3pcMXRcMjA3XDIyMlwyMDVcMzc2XDM3N1wzNzRcMVwyMTFcMjMwIiBcCisgICJcMjM2XDIwM11velwxXDMxN1wzMjRcMzI3XDIwM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIxM1wyNVwyNzRcMzQ0XDQiIFwKKyAgIlwyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzNjdcMzc1XDM3N1wwXDI3NlwzNDVcMjAyXDI1XDI3NFwzNDRcMVwwXDI3NiIgXAorICAiXDM0NVwyMDNcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzNTdcMzc0XDM3NVwyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxKFwzMDdcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM1XDM2NlwzNzNcMjAyXDM3NlwzNzdcMzc0XDFcMCIgXAorICAiXDMwMlwzNTFcMjEyXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjAzXDM3NlwzNzdcMzc0XDJcMzcwIiBcCisgICJcMzc2XDM3N0dcMzE3XDM1M1wyMTNcMjVcMjc0XDM0NFwxXDI3M1wzNTRcMzcxXDIwM1wzNzZcMzc3XDM3NFwxTVwzMjMiIFwKKyAgIlwzNTdcMjEzXDI1XDI3NFwzNDRcMVwyMzdcMzUwXDM2N1wyMDNcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMTNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjMxXDM0MlwzNjJcMjAzXDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjEzXDI1XDI3NFwzNDRcMVwyMDZcMzQwIiBcCisgICJcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDIwN1wzNDFcMzY0XDIxM1wyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjMxXDM3NlwzNzdcMzc0XDNcMzUxXDM1NlwzNjBcMjMxXDI0MVwyNTFidFwxNzdcMjAzXW96XDNrflwyMTFcMjU3IiBcCisgICJcMjY3XDI3N1wzNzBcMzcyXDM2N1wyMDRcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTFdb3pcM2d5XDIwNFwyNjEiIFwKKyAgIlwyNzFcMzAyXDM3M1wzNzVcMzcyXDIwNVwzNzZcMzc3XDM3NFwzXDM3MVwzNzNcMzcwXDI1MlwyNjJcMjcyZHZcMjAxIiBcCisgICJcMjEwXW96XDJ4XDIxM1wyMjdcMzcyXDM3NFwzNzFcMjAyXDM3NlwzNzdcMzc0XDR9XDIyMFwyMzNdb3pecHtcMjY2XDI3NyIgXAorICAiXDMwN1wyMDVcMzc2XDM3N1wzNzRcNVwzMTFcMzE2XDMyMV9xfF1venFcMjA0XDIxN1wzNzBcMzcyXDM2N1wyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIxMVwzNDJcMzY1XDBcMzAxXDM1MFwyMTBcMjVcMjc0XDM0NFwyXDBcMzA0XDM1MiIgXAorICAiXDM1NlwzNzNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwMlwyNVwyNzRcMzQ0XDFtXDMzMlwzNjFcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMDJcMjVcMjc0XDM0NFwxTFwzMjJcMzU2XDIwM1wzNzZcMzc3XDM3NFwxXDIwNiIgXAorICAiXDM0MFwzNjNcMjAyXDI1XDI3NFwzNDRcMkJcMzE0XDM0N1wzNzBcMzc2XDM3N1wyMDJcMzc2XDM3N1wzNzRcMXdcMzMzIiBcCisgICJcMzU2XDIxMFwyNVwyNzRcMzQ0XDNcMFwyNzZcMzQ1TFwzMjJcMzU2XDMzNlwzNjdcMzc0XDIwNVwzNzZcMzc3XDM3NCIgXAorICAiXDNcMzcwXDM3NlwzNzdcMjA0XDMzNVwzNjFcMFwzMDFcMzUwXDIxMFwyNVwyNzRcMzQ0XDIoXDMwN1wzNTBcMzY2XDM3MyIgXAorICAiXDM3NlwyMDNcMzc2XDM3N1wzNzRcM1wzNzBcMzc2XDM3N1wyMTFcMzQyXDM2NVwwXDMwMVwzNTBcMjEwXDI1XDI3NFwzNDQiIFwKKyAgIlwyI1wzMDRcMzQ2XDM1NlwzNzNcMzc0XDIwNFwzNzZcMzc3XDM3NFwyXDIzM1wzNDVcMzY0XDBcMzAyXDM1MVwyMTBcMjUiIFwKKyAgIlwyNzRcMzQ0XDJcMFwzMDJcMzUxXDMzN1wzNzBcMzc1XDIwNFwzNzZcMzc3XDM3NFwyXDIzN1wzNTBcMzY3I1wzMDRcMzQ2IiBcCisgICJcMjEwXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzMzXDM2NFwzNzFcMjA0XDM3NlwzNzdcMzc0XDJcMjU3XDM1MVwzNjUiIFwKKyAgIiVcMzA1XDM0N1wyMTBcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NVwzMTRcMzYxXDM3MlwyMjZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjMzXDM3NiIgXAorICAiXDM3N1wzNzRcNFwzNjVcMzcyXDM3NVwzMzVcMzQzXDM0NVwzMjVcMzMyXDMzNFwzNDNcMzUwXDM1M1wyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxdVwyMTBcMjI0XDIwNFwzMjRcMzMxXDMzM1wyXDMzNVwzNDNcMzQ1XDM3MyIgXAorICAiXDM3NVwzNzJcMjExXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFcMzM0XDM0MlwzNDRcMjA2XDMyNFwzMzFcMzMzXDIiIFwKKyAgIlwzMzFcMzM2XDM0MVwzNzJcMzc0XDM3MVwyMDNcMzc2XDM3N1wzNzRcM1wzNzNcMzc1XDM3MlwzMzJcMzM3XDM0MlwzNDMiIFwKKyAgIlwzNTBcMzUzXDIwN1wzNzZcMzc3XDM3NFwzXDM1MVwzNTZcMzYwXDMzMFwzMzVcMzQwXDM2NlwzNzNcMzc2XDIwNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2IiBcCisgICJcMzczXDM3NlwyMDRcMzc2XDM3N1wzNzRcMlwzMTRcMzYxXDM3MlwzMTVcMzYyXDM3M1wyMDVcMzc2XDM3N1wzNzRcMiIgXAorICAiXDMxNlwzNjNcMzc0XDMxM1wzNjBcMzcxXDIwNVwzNzZcMzc3XDM3NFwzXDMzMlwzNjNcMzcwXDMxMlwzNTdcMzcwXDM3MCIgXAorICAiXDM3NlwzNzdcMjA0XDM3NlwzNzdcMzc0XDFcMzE2XDM2M1wzNzRcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjciIFwKKyAgIlwzNTZcMzczXDM3NFwyMTFcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTRcMzYxXDM3MlwyMDZcMjczXDM1NFwzNzEiIFwKKyAgIlwyXDMwMlwzNTdcMzY3XDM2N1wzNzVcMzc3XDIwNlwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNlwzNjNcMzc0IiBcCisgICJcMjA2XDI3M1wzNTRcMzcxXDJcMzAyXDM1N1wzNjdcMzY2XDM3M1wzNzZcMjA2XDM3NlwzNzdcMzc0XDJcMzcwXDM3NiIgXAorICAiXDM3N1wzMTZcMzYzXDM3NFwyMDZcMjczXDM1NFwzNzFcMlwzMDFcMzU2XDM2NlwzNTdcMzc0XDM3NVwyMDdcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMzMlwzNjNcMzcwXDIwNlwyNzNcMzU0XDM3MVwyXDMwMVwzNTZcMzY2XDM1NlwzNzNcMzc0XDIwN1wzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMjc0XDM1NVwzNzNcMjA1XDI3M1wzNTRcMzcxXDJcMjc0XDM1NVwzNzNcMzUwIiBcCisgICJcMzcxXDM3N1wyMjdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxXDIwMiIgXAorICAiXDIyMVwyMjdcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNCIgXAorICAiXDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzE1XDMyMlwzMjVcMjAzXW96XDFcMjExXDIzMFwyMzZcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM2MFwzNjZcMzcwaXtcMjA2XDIwMl1velwxXDMwMlwzMDdcMzEyXDM3N1wzNzZcMzc3XDM3NFwzMDYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyNDdcMzc2XDM3N1wzNzRcM1wzNTdcMzY1XDM2N1wzMTNcMzIwXDMyMlwzMzVcMzQzXDM0NVwzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzMDdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxIiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NCIgXAorICAiXDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjMyXDM3N1wzNzdcMzc3IikKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I2NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9wc3BsYXNoX2dpdC5iYgpAQCAtMCwwICsxLDEyMiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgZnJhbWVidWZmZXIgYm9vdCBsb2dvIGJhc2VkIG9uIHVzcGxhc2giCitERVNDUklQVElPTiA9ICJQU3BsYXNoIGlzIGEgdXNlcnNwYWNlIGdyYXBoaWNhbCBib290IHNwbGFzaCBzY3JlZW4gZm9yIG1haW5seSBlbWJlZGRlZCBMaW51eCBkZXZpY2VzIHN1cHBvcnRpbmcgYSAxNmJwcCBvciAzMmJwcCBmcmFtZWJ1ZmZlci4gSXQgaGFzIGZldyBkZXBlbmRlbmNpZXMgKGp1c3QgbGliYyksIHN1cHBvcnRzIGJhc2ljIGltYWdlcyBhbmQgdGV4dCBhbmQgaGFuZGxlcyByb3RhdGlvbi4gSXRzIHZpc3VhbCBsb29rIGlzIGNvbmZpZ3VyYWJsZSBieSBiYXNpYyBzb3VyY2UgY2hhbmdlcy4gQWxzbyBpbmNsdWRlZCBpcyBhICdjbGllbnQnIGNvbW1hbmQgdXRpbGl0eSBmb3Igc2VuZGluZyBpbmZvcm1hdGlvbiB0byBwc3BsYXNoIHN1Y2ggYXMgYm9vdCBwcm9ncmVzcyBpbmZvcm1hdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc3BsYXNoIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wc3BsYXNoLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNjttZDU9ODQwZmIyMzU2YjEwYTg1YmVkNzhkZDA5ZGM3NzQ1YzYiCisKK1NSQ1JFViA9ICIxNGM4ZjdiNzA1ZGU5NDRiZWI0ZGUzZjI5NjUwNmQ4MDg3MWU0MTBmIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHNwbGFzaC1pbml0IFwKKyAgICAgICAgICAgJHtTUExBU0hfSU1BR0VTfSIKKworU1BMQVNIX0lNQUdFUyA9ICJmaWxlOi8vcHNwbGFzaC1wb2t5LWltZy5oO291dHN1ZmZpeD1kZWZhdWx0IgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgb2xkcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBzcGxhc2hmaWxlcyA9IGQuZ2V0VmFyKCdTUExBU0hfSU1BR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ3MgPSBbXQorICAgIGxvY2FscGF0aHMgPSBbXQorICAgIGhhc3BuZyA9IEZhbHNlCisgICAgZm9yIHVyaSBpbiBzcGxhc2hmaWxlczoKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgZCkKKyAgICAgICAgZmxvY2FsID0gb3MucGF0aC5iYXNlbmFtZShmZXRjaGVyLmxvY2FscGF0aCh1cmkpKQorICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQoZmxvY2FsKVswXQorICAgICAgICBvdXRzdWZmaXggPSBmZXRjaGVyLnVkW3VyaV0ucGFybS5nZXQoIm91dHN1ZmZpeCIpCisgICAgICAgIGlmIG5vdCBvdXRzdWZmaXg6CisgICAgICAgICAgICBpZiBmYmFzZS5zdGFydHN3aXRoKCJwc3BsYXNoLSIpOgorICAgICAgICAgICAgICAgIG91dHN1ZmZpeCA9IGZiYXNlWzg6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRzdWZmaXggPSBmYmFzZQorICAgICAgICAgICAgaWYgb3V0c3VmZml4LmVuZHN3aXRoKCctaW1nJyk6CisgICAgICAgICAgICAgICAgb3V0c3VmZml4ID0gb3V0c3VmZml4WzotNF0KKyAgICAgICAgb3V0bmFtZSA9ICJwc3BsYXNoLSVzIiAlIG91dHN1ZmZpeAorICAgICAgICBpZiBvdXRuYW1lID09ICcnIG9yIG91dG5hbWUgaW4gb2xkcGtnczoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgb3V0cHV0IG5hbWUgJyVzJyBkZXJpdmVkIGZyb20gdGhlIFVSSSAlcyBpcyBub3QgdmFsaWQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBvdXRzdWZmaXggcGFyYW1ldGVyIiAlIChvdXRuYW1lLCB1cmkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtncy5hcHBlbmQob3V0bmFtZSkKKyAgICAgICAgaWYgZmxvY2FsLmVuZHN3aXRoKCIucG5nIik6CisgICAgICAgICAgICBoYXNwbmcgPSBUcnVlCisgICAgICAgIGxvY2FscGF0aHMuYXBwZW5kKGZsb2NhbCkKKworICAgICMgU2V0IHRoZXNlIHNvIHRoYXQgd2UgaGF2ZSBsZXNzIHdvcmsgdG8gZG8gaW4gZG9fY29tcGlsZSBhbmQgZG9faW5zdGFsbF9hcHBlbmQKKyAgICBkLnNldFZhcigiU1BMQVNIX0lOU1RBTEwiLCAiICIuam9pbihwa2dzKSkKKyAgICBkLnNldFZhcigiU1BMQVNIX0xPQ0FMUEFUSFMiLCAiICIuam9pbihsb2NhbHBhdGhzKSkKKworICAgIGlmIGhhc3BuZzoKKyAgICAgICAgZC5hcHBlbmRWYXIoIkRFUEVORFMiLCAiIGdkay1waXhidWYtbmF0aXZlIikKKworICAgIGQucHJlcGVuZFZhcigiUEFDS0FHRVMiLCAiJXMgIiAlICgiICIuam9pbihwa2dzKSkpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgb3IgJycKKyAgICBmb3IgcCBpbiBwa2dzOgorICAgICAgICBlcCA9ICclcyVzJyAlIChtbHByZWZpeCwgcCkKKyAgICAgICAgZXBzcGxhc2ggPSAnJXMlcycgJSAobWxwcmVmaXgsICdwc3BsYXNoJykKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIGVwLCAiJHtiaW5kaXJ9LyVzIiAlIHApCisgICAgICAgIGQuc2V0VmFyKCJBTFRFUk5BVElWRV8lcyIgJSBlcCwgJ3BzcGxhc2gnKQorICAgICAgICBkLnNldFZhckZsYWcoIkFMVEVSTkFUSVZFX1RBUkdFVF8lcyIgJSBlcCwgJ3BzcGxhc2gnLCAnJHtiaW5kaXJ9LyVzJyAlIHApCisgICAgICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU18lcyIgJSBlcCwgIiAlcyIgJSBwbikKKyAgICAgICAgaWYgcCA9PSAicHNwbGFzaC1kZWZhdWx0IjoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVDT01NRU5EU18lcyIgJSBwbiwgIiAlcyIgJSBlcCkKK30KKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BzcGxhc2hdID0gIiR7YmluZGlyfS9wc3BsYXNoIgorCitweXRob24gZG9fY29tcGlsZSAoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgIyBCdWlsZCBhIHNlcGFyYXRlIGV4ZWN1dGFibGUgZm9yIGVhY2ggc3BsYXNoIGltYWdlCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBjb252ZXJ0c2NyaXB0ID0gIiVzL21ha2UtaW1hZ2UtaGVhZGVyLnNoIiAlIGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBkZXN0ZmlsZSA9ICIlcy9wc3BsYXNoLXBva3ktaW1nLmgiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGxvY2FsZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0xPQ0FMUEFUSFMnLCBUcnVlKS5zcGxpdCgpCisgICAgb3V0cHV0ZmlsZXMgPSBkLmdldFZhcignU1BMQVNIX0lOU1RBTEwnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIGxvY2FsZmlsZSwgb3V0cHV0ZmlsZSBpbiB6aXAobG9jYWxmaWxlcywgb3V0cHV0ZmlsZXMpOgorICAgICAgICBpZiBsb2NhbGZpbGUuZW5kc3dpdGgoIi5wbmciKToKKyAgICAgICAgICAgIG91dHAgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoJyVzICVzIFBPS1knICUgKGNvbnZlcnRzY3JpcHQsIG9zLnBhdGguam9pbih3b3JrZGlyLCBsb2NhbGZpbGUpKSkKKyAgICAgICAgICAgIHByaW50KG91dHBbMV0pCisgICAgICAgICAgICBmYmFzZSA9IG9zLnBhdGguc3BsaXRleHQobG9jYWxmaWxlKVswXQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCIlcy1pbWcuaCIgJSBmYmFzZSwgZGVzdGZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHdvcmtkaXIsIGxvY2FsZmlsZSksIGRlc3RmaWxlKQorICAgICAgICAjIEZvciBzb21lIHJlYXNvbiBqdXN0IHVwZGF0aW5nIHRoZSBoZWFkZXIgaXMgbm90IGVub3VnaCwgd2UgaGF2ZSB0byB0b3VjaCB0aGUgLmMKKyAgICAgICAgIyBmaWxlIGluIG9yZGVyIHRvIGdldCBpdCB0byByZWJ1aWxkCisgICAgICAgIG9zLnV0aW1lKCIlcy9wc3BsYXNoLmMiICUgZC5nZXRWYXIoJ1MnLCBUcnVlKSwgTm9uZSkKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJvZV9ydW5tYWtlIiwgZCkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCJwc3BsYXNoIiwgb3V0cHV0ZmlsZSkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9L21udC8ucHNwbGFzaC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wc3BsYXNoLWluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3BzcGxhc2guc2gKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlmb3IgaSBpbiAke1NQTEFTSF9JTlNUQUxMfSA7IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkaSAke0R9JHtiaW5kaXJ9LyRpCisJZG9uZQorCXJtIC1mICR7RH0ke2JpbmRpcn0vcHNwbGFzaAorfQorCitGSUxFU18ke1BOfSArPSAiL21udC8ucHNwbGFzaCIKKworSU5JVFNDUklQVF9OQU1FID0gInBzcGxhc2guc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwIFMgLiBzdG9wIDIwIDAgMSA2IC4iCisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIHBzcGxhc2guc2VydmljZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZmZjAzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGaXggdGhlIG5hbWVzIG9mIHRoZSBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scyB0byBtYXRjaCB0aGUgbmFtZXMgdXNlZCBieSBib3RoCitjb25maWd1cmUgYW5kIHRoZSBzb3VyY2UgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctcmVhZGxpbmUvMjAxNC0wNS9tc2cwMDAwOC5odG1sKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBlNDg2NTY4MTE1NTA3NzQ4OTJmZDRlMGY0YjNjN2Q0MTg0MjJkYTUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjcgTWF5IDIwMTQgMjI6MzI6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlnLmguaW46IGZpeCBuYW1lcyBvZiBTVFJVQ1RfRElSRU5UX0Qgc3ltYm9scworCistLS0KKyBjb25maWcuaC5pbiB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCitpbmRleCBhNjdlNDNlLi5hNDJhY2M1IDEwMDY0NAorLS0tIGEvY29uZmlnLmguaW4KKysrKyBiL2NvbmZpZy5oLmluCitAQCAtMjQ0LDkgKzI0NCw5IEBACisgCisgI3VuZGVmIEhBVkVfR0VUUFdfREVDTFMKKyAKKy0jdW5kZWYgU1RSVUNUX0RJUkVOVF9IQVNfRF9JTk8KKysjdW5kZWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfSU5PCisgCistI3VuZGVmIFNUUlVDVF9ESVJFTlRfSEFTX0RfRklMRU5PCisrI3VuZGVmIEhBVkVfU1RSVUNUX0RJUkVOVF9EX0ZJTEVOTworIAorICN1bmRlZiBIQVZFX0JTRF9TSUdOQUxTCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL25vcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9ub3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzE1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9maWxlcy9ub3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQIDIwMTIvMi8yMworCitJbmRleDogcmVhZGxpbmUtNi4yL3N1cHBvcnQvc2hvYmotY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlYWRsaW5lLTYuMi5vcmlnL3N1cHBvcnQvc2hvYmotY29uZgkyMDEyLTAyLTIzIDExOjA2OjM3LjE5MzE3OTM3OSArMDAwMAorKysrIHJlYWRsaW5lLTYuMi9zdXBwb3J0L3Nob2JqLWNvbmYJMjAxMi0wMi0yMyAxMTowNjo1MC4wNDkxNzg5MTggKzAwMDAKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAJU0hPQkpfTEQ9JyR7Q0N9JworIAlTSE9CSl9MREZMQUdTPSctc2hhcmVkIC1XbCwtc29uYW1lLCRAJworIAorLQlTSExJQl9YTERGTEFHUz0nLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKysJU0hMSUJfWExERkxBR1M9Jy1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisgCVNITElCX0xJQlZFUlNJT049JyQoU0hMSUJfTElCU1VGRikuJChTSExJQl9NQUpPUikkKFNITElCX01JTk9SKScKKyAJOzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MGE5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMgaXQgZmFpbHMgdG8gbGluayBhZ2FpbnN0IGxpYnRlcm1jYXAgY2F1c2luZyB2YXJpb3VzIG1pc3Npbmcgc3ltYm9scyAKK2lzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK0luZGV4OiByZWFkbGluZS01LjIvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVhZGxpbmUtNS4yLm9yaWcvY29uZmlndXJlLmluCTIwMDgtMTAtMDggMDk6NTg6NTIuMDAwMDAwMDAwICswMTAwCisrKysgcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS5pbgkyMDA4LTEwLTA4IDA5OjU5OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIxMSwxMCArMjExLDEwIEBACisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoY29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykKKyAgICAgICAgIGV2YWwgYFRFUk1DQVBfTElCPSRURVJNQ0FQX0xJQiAke0NPTkZJR19TSEVMTC0vYmluL3NofSAke3NyY2Rpcn0vc3VwcG9ydC9zaG9iai1jb25mIC1DICIke0NDfSIgLWMgJHtob3N0X2NwdX0gLW8gJHtob3N0X29zfSAtdiAke2hvc3RfdmVuZG9yfWAKKyAKKy0jCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorLSMJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKy0jCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworLSMJZXNhYworKwljYXNlICIkU0hMSUJfTElCUyIgaW4KKysJKmN1cnNlcyp8KnRlcm1jYXAqfCp0ZXJtbGliKikJOzsKKysJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CisrCWVzYWMKKyAJCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DQykKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NGTEFHUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2NmI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTUuMi9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgc3VwcG9ydCBzY3JpcHQgZW5kcyB1cCBoYXJkY29kaW5nIHVubmVjZXNzYXJ5IHJwYXRocyBpbnRvIHRoZSBsaWJyYXJpZXMuIFdlCit3aWxsIHNlYXJjaCAkbGliZGlyIGF1dG9tYXRpY2FsbHkgc28gdGhpcyBpcyBqdXN0IHdhc3RlcyBzcGFjZS4gVGhlcmUgbWF5IGJlIHNvbWUKK2Nhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJ1dCBvdXIgdXNlIGNhc2VzIGFyZW4ndCBvbmUgb2YgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlYWRsaW5lLTUuMi9zdXBwb3J0L3Nob2JqLWNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZWFkbGluZS01LjIub3JpZy9zdXBwb3J0L3Nob2JqLWNvbmYKKysrKyByZWFkbGluZS01LjIvc3VwcG9ydC9zaG9iai1jb25mCitAQCAtMTEwLDcgKzExMCw3IEBAIGxpbnV4Ki0qfGdudSotKnxrKmJzZCotZ251LSopCisgCVNIT0JKX0xEPScke0NDfScKKyAJU0hPQkpfTERGTEFHUz0nLXNoYXJlZCAtV2wsLXNvbmFtZSwkQCcKKyAKKy0JU0hMSUJfWExERkxBR1M9Jy1XbCwtcnBhdGgsJChsaWJkaXIpIC1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisrCVNITElCX1hMREZMQUdTPSctV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworIAlTSExJQl9MSUJWRVJTSU9OPSckKFNITElCX0xJQlNVRkYpLiQoU0hMSUJfTUFKT1IpJChTSExJQl9NSU5PUiknCisgCTs7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9jb25maWd1cmUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzEwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvY29uZmlndXJlLWZpeC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2l0aG91dCB0aGlzIGl0IGZhaWxzIHRvIGxpbmsgYWdhaW5zdCBsaWJ0ZXJtY2FwIGNhdXNpbmcgdmFyaW91cyBtaXNzaW5nCitzeW1ib2xzIGlzc3Vlcy4KKworUlAgLSA4LzEwLzA4CisKK1N1cHBvcnQgNi4zIHdoaWNoIHVzZXMgY29uZmlndXJlLmFjIHJhdGhlciB0aGFuIGNvbmZpZ3VyZS5pbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZWE4ZjkxLi45MDc1YjhmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yMTgsMTAgKzIxOCwxMCBAQCBpZiB0ZXN0IC1mICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmY7IHRoZW4KKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKQorICAgICAgICAgZXZhbCBgVEVSTUNBUF9MSUI9JFRFUk1DQVBfTElCICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmYgLUMgIiR7Q0N9IiAtYyAke2hvc3RfY3B1fSAtbyAke2hvc3Rfb3N9IC12ICR7aG9zdF92ZW5kb3J9YAorIAorLSMJY2FzZSAiJFNITElCX0xJQlMiIGluCistIwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworLSMJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CistIwllc2FjCisrCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorKwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworKwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKysJZXNhYworIAkKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NDKQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0ZMQUdTKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZS1kaXNwYXRjaC1tdWx0aWtleS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGQxYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gOGVmODUyYTViZTcyYzc1ZTE3ZjI1MTBiZWE1MjQ1NWY4MDliNTZjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZXQgUmFtZXkgPGNoZXQucmFtZXlAY2FzZS5lZHU+CitEYXRlOiBGcmksIDI4IE1hciAyMDE0IDE0OjA3OjQyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTBdIFJlYWRsaW5lLTYuMyBwYXRjaCAyCisKK0ZpeGVzIG11bHRpLWtleSBpc3N1ZSBpZGVudGlmaWVkIGluIHRoaXMgdGhyZWFkOgoraHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDE0LTAzL21zZzAwMDEwLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyByZWFkbGluZS5jIHwgMyArKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3JlYWRsaW5lLmMgYi9yZWFkbGluZS5jCitpbmRleCBlYjRlYWUzLi5hYmIyOWEwIDEwMDY0NAorLS0tIGEvcmVhZGxpbmUuYworKysrIGIvcmVhZGxpbmUuYworQEAgLTc0NCw3ICs3NDQsOCBAQCBfcmxfZGlzcGF0Y2hfY2FsbGJhY2sgKGN4dCkKKyAgICAgciA9IF9ybF9zdWJzZXFfcmVzdWx0IChyLCBjeHQtPm9sZG1hcCwgY3h0LT5va2V5LCAoY3h0LT5mbGFncyAmIEtTRVFfU1VCU0VRKSk7CisgCisgICBSTF9DSEVDS19TSUdOQUxTICgpOworLSAgaWYgKHIgPT0gMCkJCQkvKiBzdWNjZXNzISAqLworKyAgLyogV2Ugb25seSB0cmVhdCB2YWx1ZXMgPCAwIHNwZWNpYWxseSB0byBzaW11bGF0ZSByZWN1cnNpb24uICovCisrICBpZiAociA+PSAwIHx8IChyID09IC0xICYmIChjeHQtPmZsYWdzICYgS1NFUV9TVUJTRVEpID09IDApKQkvKiBzdWNjZXNzISBvciBmYWlsdXJlISAqLworICAgICB7CisgICAgICAgX3JsX2tleXNlcV9jaGFpbl9kaXNwb3NlICgpOworICAgICAgIFJMX1VOU0VUU1RBVEUgKFJMX1NUQVRFX01VTFRJS0VZKTsKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmU2My0wMDMgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmU2My0wMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhOWQ4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMwpAQCAtMCwwICsxLDQzIEBACityZWFkbGluZTogU2VjdXJpdHkgQWR2aXNvcnkgLSByZWFkbGluZSAtIENWRS0yMDE0LTI1MjQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDx5dWUudGFvQHdpbmRyaXZlci5jb20+CisKKwkJCSAgIFJFQURMSU5FIFBBVENIIFJFUE9SVAorCQkJICAgPT09PT09PT09PT09PT09PT09PT09CisKK1JlYWRsaW5lLVJlbGVhc2U6IDYuMworUGF0Y2gtSUQ6IHJlYWRsaW5lNjMtMDAzCisKK0J1Zy1SZXBvcnRlZC1ieToKK0J1Zy1SZWZlcmVuY2UtSUQ6CitCdWctUmVmZXJlbmNlLVVSTDoKKworQnVnLURlc2NyaXB0aW9uOgorCitUaGVyZSBhcmUgZGVidWdnaW5nIGZ1bmN0aW9ucyBpbiB0aGUgcmVhZGxpbmUgcmVsZWFzZSB0aGF0IGFyZSB0aGVvcmV0aWNhbGx5CitleHBsb2l0YWJsZSBhcyBzZWN1cml0eSBwcm9ibGVtcy4gIFRoZXkgYXJlIG5vdCBwdWJsaWMgZnVuY3Rpb25zLCBidXQgaGF2ZQorZ2xvYmFsIGxpbmthZ2UuCisKK1BhdGNoIChhcHBseSB3aXRoIGBwYXRjaCAtcDAnKToKKworKioqIC4uL3JlYWRsaW5lLTYuMy91dGlsLmMJMjAxMy0wOS0wMiAxMzozNjoxMi4wMDAwMDAwMDAgLTA0MDAKKy0tLSB1dGlsLmMJMjAxNC0wMy0yMCAxMDoyNTo1My4wMDAwMDAwMDAgLTA0MDAKKyoqKioqKioqKioqKioqKgorKioqIDQ3Nyw0ODAgKioqKgorLS0tIDQ3OSw0ODMgLS0tLQorICB9CisgIAorKyAjaWYgZGVmaW5lZCAoREVCVUcpCisgICNpZiBkZWZpbmVkIChVU0VfVkFSQVJHUykKKyAgc3RhdGljIEZJTEUgKl9ybF90cmFjZWZwOworKioqKioqKioqKioqKioqCisqKiogNTM5LDU0MiAqKioqCistLS0gNTQyLDU0NiAtLS0tCisgIH0KKyAgI2VuZGlmCisrICNlbmRpZiAvKiBERUJVRyAqLworICAKKyAgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjY2MmMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZWRpdGluZyB0eXBlZCBjb21tYW5kIGxpbmVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBSZWFkbGluZSBsaWJyYXJ5IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHVzZXJzIHRvIGVkaXQgXAorY29tbWFuZCBsaW5lcyBhcyB0aGV5IGFyZSB0eXBlZCBpbi4gQm90aCBFbWFjcyBhbmQgdmkgZWRpdGluZyBtb2RlcyBhcmUgYXZhaWxhYmxlLiBUaGUgUmVhZGxpbmUgbGlicmFyeSBpbmNsdWRlcyAgXAorYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHByZXZpb3VzbHktZW50ZXJlZCBjb21tYW5kIGxpbmVzLCB0byByZWNhbGwgYW5kIHBlcmhhcHMgcmVlZGl0IHRob3NlICAgXAorbGluZXMsIGFuZCBwZXJmb3JtIGNzaC1saWtlIGhpc3RvcnkgZXhwYW5zaW9uIG9uIHByZXZpb3VzIGNvbW1hbmRzLiIKK1NFQ1RJT04gPSAibGlicyIKKworIyBHUEx2MisgKDwgNi4wKSwgR1BMdjMrICg+PSA2LjApCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTICs9ICJuY3Vyc2VzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWctZGlyZW50LXN5bWJvbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ycGF0aC5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworTEVBRF9TT05BTUUgPSAibGlicmVhZGxpbmUuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIGluc3RhbGwgZG9lc24ndCBwcm9wZXJseSBpbnN0YWxsIHRoZXNlCisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGliaGlzdG9yeSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGlicmVhZGxpbmUgJHtEfSR7bGliZGlyfQorCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV81LjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwMDdhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYgpAQCAtMCwwICsxLDg0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGVkaXRpbmcgdHlwZWQgY29tbWFuZCBsaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgUmVhZGxpbmUgbGlicmFyeSBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB1c2VycyB0byBlZGl0IFwKK2NvbW1hbmQgbGluZXMgYXMgdGhleSBhcmUgdHlwZWQgaW4uIEJvdGggRW1hY3MgYW5kIHZpIGVkaXRpbmcgbW9kZXMgYXJlIGF2YWlsYWJsZS4gVGhlIFJlYWRsaW5lIGxpYnJhcnkgaW5jbHVkZXMgIFwKK2FkZGl0aW9uYWwgZnVuY3Rpb25zIHRvIG1haW50YWluIGEgbGlzdCBvZiBwcmV2aW91c2x5LWVudGVyZWQgY29tbWFuZCBsaW5lcywgdG8gcmVjYWxsIGFuZCBwZXJoYXBzIHJlZWRpdCB0aG9zZSAgIFwKK2xpbmVzLCBhbmQgcGVyZm9ybSBjc2gtbGlrZSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBwcmV2aW91cyBjb21tYW5kcy4iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDNiMzZmZGQ4NGY3NGI4ZDgxODlhMjAyYjk4MGI2N2YiCisKK0RFUEVORFMgKz0gIm5jdXJzZXMiCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcmVhZGxpbmUvJHtCUE59LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAxO25hbWU9cGF0Y2gxO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAyO25hbWU9cGF0Y2gyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDAzO25hbWU9cGF0Y2gzO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA0O25hbWU9cGF0Y2g0O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA1O25hbWU9cGF0Y2g1O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA2O25hbWU9cGF0Y2g2O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA3O25hbWU9cGF0Y2g3O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA4O25hbWU9cGF0Y2g4O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDA5O25hbWU9cGF0Y2g5O2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEwO25hbWU9cGF0Y2gxMDthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMTtuYW1lPXBhdGNoMTE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTI7bmFtZT1wYXRjaDEyO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDEzO25hbWU9cGF0Y2gxMzthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxNDtuYW1lPXBhdGNoMTQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVkdW5kYW50LXJwYXRoLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJlMzkzMzFmMzJhZDE0MDA5YjlmZjQ5Y2MxMGM1ZTc1MSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjEyZTg4ZDk2YWVlMmNkMTE5MjUwMDM1NmYwNTM1NTQwZGI0OTkyODJjYTdmNzYzMzlmYjQyMjhjMzEyNDlmNDUiCisKK1NSQ19VUklbcGF0Y2gxLm1kNXN1bV0gICAgPSAiOWQ0ZDQxNjIyYWE5YjIzMGM1N2Y2ODU0OGNlODdkOGYiCitTUkNfVVJJW3BhdGNoMS5zaGEyNTZzdW1dID0gImVhYzMwNGMzNjkxNTQwNTlmOTMwNDlhZGEzMjg3MzlmYWFmNDAzMzhkM2NiMWZiNGI1NDRjOTNkNWNlM2Y4ZDUiCitTUkNfVVJJW3BhdGNoMi5tZDVzdW1dICAgID0gImYwM2U1MTJkMTQyMDZlMzdmN2Q2YTc0OGI1NmI5NDc2IgorU1JDX1VSSVtwYXRjaDIuc2hhMjU2c3VtXSA9ICI5ZGVhY2FlZjI1NTA3YTBjMmFlMGI2NjFiZjkzNDI1NTliNTlhMjk1NGQ2NmVhM2M1ZjViY2Q5MDBmZGZjZjc4IgorU1JDX1VSSVtwYXRjaDMubWQ1c3VtXSAgICA9ICIyNTJiNDJkODc1MGYxYTk0YjZiZGYwODY2MTJkY2ViMiIKK1NSQ19VUklbcGF0Y2gzLnNoYTI1NnN1bV0gPSAiMmE1NWQyZWNiMWM5YjAxNDdhZWIxOTNhNjMyMzYxNmFiMzFjMWM1MjVhODNiMmRiM2E5OTRiMTU1OTRiYTkzNCIKK1NSQ19VUklbcGF0Y2g0Lm1kNXN1bV0gICAgPSAiYTMyMzMzYzJlNjAzYTNlZDI1MDUxNGU5MTA1MGU1NTIiCitTUkNfVVJJW3BhdGNoNC5zaGEyNTZzdW1dID0gImEwM2I2NTYzMzc4MWVmYTdjM2FhZTVkNTcxNjI5ODVlN2I3YTNjMTBhY2YwZjI2MjFiZTYxMGUxNmYyN2U1ZjIiCitTUkNfVVJJW3BhdGNoNS5tZDVzdW1dICAgID0gIjgxMDY3OTZjMDliNzg5NTIzYTNhNzhhYjY5YzA0YjZkIgorU1JDX1VSSVtwYXRjaDUuc2hhMjU2c3VtXSA9ICIwNjAwMTg5NjUxNDE0OGE3NTdlYTZlZGJiZDQwYzRmYzQzMzFkYzY1Mzg0NzI0NDM4NmMzN2IxMzhiMTUwZjY0IgorU1JDX1VSSVtwYXRjaDYubWQ1c3VtXSAgICA9ICI1MTIxODhlMmJmMDgzN2Y3ZWNhMTlkYmY3MWYxODJhZSIKK1NSQ19VUklbcGF0Y2g2LnNoYTI1NnN1bV0gPSAiZGZlZjNlOTgyYzBhZGY4YmI1YTliN2QwNDY4ZWM4ZjVmMTgxMzhiMzI1ZTI4NzU5NDM3NDY0ZGU1YmU3MTAxMyIKK1NSQ19VUklbcGF0Y2g3Lm1kNXN1bV0gICAgPSAiYWMxN2FjYTYyZWI2ZmIzOThjOWYyZmU5ZGU1NDBhZmYiCitTUkNfVVJJW3BhdGNoNy5zaGEyNTZzdW1dID0gIjc3NWIwMjhjN2I3NjEzOTdhYzZhZTFiZGZiYWM3ZTg5NmRjM2I5YjNhZGMyZjkxMzEyNDk5MTgwY2ExM2JkZDEiCitTUkNfVVJJW3BhdGNoOC5tZDVzdW1dICAgID0gIjI0ODRjMzkyZGIwMjE5MDVmMTEyY2Y5N2E5NGRmZDRjIgorU1JDX1VSSVtwYXRjaDguc2hhMjU2c3VtXSA9ICJhMjFiNGUwYmYwNTMwYjg3OGJhZDI0ZDViZTIzZDE4YTllMDNhNzVhMzFhZTMwODQ0ZGMwOTMzYmIzZDc3ZWNkIgorU1JDX1VSSVtwYXRjaDkubWQ1c3VtXSAgICA9ICJmYzZlYjM1ZDA3OTE0ZmFlNWM1N2Q0OWMxMjQ4M2ZmNyIKK1NSQ19VUklbcGF0Y2g5LnNoYTI1NnN1bV0gPSAiMTM4ZDVlMGYwNzA5YTQ3YTJkMTYyMTI5NWEzZGQ1ZTNjYzczYjYzYjVjYzI4ZGFiMDNhYmM0ZTk0ZmU5NWVjZiIKK1NSQ19VUklbcGF0Y2gxMC5tZDVzdW1dICAgID0gIjdhMmJmM2RjN2FjNzY4MGIxNDYxYTU3MDExMDBlOTFiIgorU1JDX1VSSVtwYXRjaDEwLnNoYTI1NnN1bV0gPSAiODNmOGMxYWFkYjg2YjFhMmZhZDg4MjFhOWM2YmU3MmE4ZGU1YWZkN2ZkOWZkZTU4YTMwYjNiNTdkOTM5NjkzZSIKK1NSQ19VUklbcGF0Y2gxMS5tZDVzdW1dICAgID0gImVmNmNlZjY4MjI2NjM0NzBmNmFjOGM1MTdjNWE3ZWM2IgorU1JDX1VSSVtwYXRjaDExLnNoYTI1NnN1bV0gPSAiMDhhZDMzODRhYjA5MDZlNmZhNGNjNDE3ZWI4YzQzZmY1OTM3NWJjZWFkMTVmZDVjOGUzMTczMGYwNDEzYjNkNiIKK1NSQ19VUklbcGF0Y2gxMi5tZDVzdW1dICAgID0gImUzZTlmNDQxYzgxMTE1ODk4NTViYzM2M2U1NjQwZjZjIgorU1JDX1VSSVtwYXRjaDEyLnNoYTI1NnN1bV0gPSAiMjBmMDI0M2JlMjI5OWMyMzIxMzQ5MmNjMmMxOWNmZDE1Y2M1MjhkMmI1NjZhNzZhMmRlNTgzMDZiYjllNGM5ZSIKK1NSQ19VUklbcGF0Y2gxMy5tZDVzdW1dICAgID0gIjNlMmU1ZjU0M2VkMjY4YTY4ZmQxZmE4MzlmYWFkZTFhIgorU1JDX1VSSVtwYXRjaDEzLnNoYTI1NnN1bV0gPSAiMGNjNjQ5NTE2YTViZGZhNjFjNWU1NjkzNzQwNzU3MDI4OGI2OTcyZDc1YWExYmQwNjBhZDMwZWJlOTgxNDRkNSIKK1NSQ19VUklbcGF0Y2gxNC5tZDVzdW1dICAgID0gImExYmUzMGUxYzZmMTA5OWJiNWZjZWYwMGEyNjMxZmI4IgorU1JDX1VSSVtwYXRjaDE0LnNoYTI1NnN1bV0gPSAiNmYxYTY4MzIwZDAxNTIyY2ExZWE1YTczNzEyNGVjYzg3MzlmM2RjYmZlYTJkZWUyMWUzY2NmODM5YTIxYTgxNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK0xFQURfU09OQU1FID0gImxpYnJlYWRsaW5lLnNvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBpbnN0YWxsIGRvZXNuJ3QgcHJvcGVybHkgaW5zdGFsbCB0aGVzZQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYmhpc3RvcnkgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIHNobGliIGxpYnJlYWRsaW5lICR7RH0ke2xpYmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTY0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJlYWRsaW5lLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vcmVhZGxpbmU2My0wMDMgXAorICAgICAgICAgICAgZmlsZTovL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzM2M4ZmIyNzllOTgxMjc0ZjQ4NWZkOTFkYTc3ZTk0YSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjU2YmE2MDcxYjk0NjJmOTgwYzVhNzJhYjAwMjM4OTNiNjViYTZkZWJiNGVlYjQ3NWQ3YTU2M2RjNjVjYWZkNDMiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODI4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNjAwMzQ1Jmdyb3VwX2lkPTQ0NDI3JmF0aWQ9NDM5NTQ0XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYyBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYworLS0tIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjCTIwMDYtMDgtMDcgMDg6MDg6MDAuMDAwMDAwMDAwICswMzAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMJMjAxMy0wMS0xMSAwODoxMzowOC42NTE1NTA2MzQgKzAyMDAKK0BAIC0yLDcgKzIsNyBAQAorIEFDX0lOSVQoc3lzZnN1dGlscywgMi4xLjAsIGxpbnV4LWRpYWctZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0KQorIEFNX0lOSVRfQVVUT01BS0UKKyBBQ19DT05GSUdfU1JDRElSKFtjb25maWcuaC5pbl0pCistQU1fQ09ORklHX0hFQURFUihbY29uZmlnLmhdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisKKyAjIENoZWNrcyBmb3IgS0xJQkMgc3VwcG9ydCAoc2hvdWxkIGJlIGJlZm9yZSBBQ19QUk9HX0xJQlRPT0wgYW5kIEFDX1BST0dfQ0MpCisgQUNfQ0hFQ0tfS0xJQkMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3NlcGFyYXRlYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJlNzI1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zZXBhcmF0ZWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggb3V0IG9mIHRyZWUgYnVpbGQgaXNzdWVzIHNvICR7Qn0gIT0gJHtTfSB3b3Jrcy4KKworUlAgMjAxMy8wMy8xOAorCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvY21kL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9jbWQvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDYgKzEsNiBAQAorIGJpbl9QUk9HUkFNUyA9IHN5c3Rvb2wgCisgc3lzdG9vbF9TT1VSQ0VTID0gc3lzdG9vbC5jIG5hbWVzLmMgbmFtZXMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgTERBREQgPSAuLi9saWIvbGlic3lzZnMubGEKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZMQUdTQAorIEFNX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DRkxBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvbGliL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMDg6NTc6MjcuMjI0NTU2NTA4ICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC9saWIvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy40ODA1NTY1MDIgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorIGxpYl9MVExJQlJBUklFUyA9IGxpYnN5c2ZzLmxhCisgbGlic3lzZnNfbGFfU09VUkNFUyA9IHN5c2ZzX3V0aWxzLmMgc3lzZnNfYXR0ci5jIHN5c2ZzX2NsYXNzLmMgZGxpc3QuYyBcCisgICAgICAgc3lzZnNfZGV2aWNlLmMgc3lzZnNfZHJpdmVyLmMgc3lzZnNfYnVzLmMgc3lzZnNfbW9kdWxlLmMgc3lzZnMuaAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgbGlic3lzZnNfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMjoxOjAKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0xGQUdTQAorIGxpYnN5c2ZzX2xhX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DTEZBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC90ZXN0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy4yMjQ1NTY1MDggKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwOTowNjo0OC4xOTY1NDMzMjYgKzAwMDAKK0BAIC0yLDE0ICsyLDE0IEBACisgQlVJTFRfU09VUkNFUyA9IHRlc3QuaAorIENMRUFORklMRVMgPSB0ZXN0LmgKKyB0ZXN0Lmg6CistCS4vY3JlYXRlLXRlc3QKKysJJChzcmNkaXIpL2NyZWF0ZS10ZXN0ICQoc3JjZGlyKS9saWJzeXNmcy5jb25mCisgZ2V0X2RldmljZV9TT1VSQ0VTID0gZ2V0X2RldmljZS5jCisgZ2V0X2RyaXZlcl9TT1VSQ0VTID0gZ2V0X2RyaXZlci5jCisgZ2V0X21vZHVsZV9TT1VSQ0VTID0gZ2V0X21vZHVsZS5jCisgdGVzdGxpYnN5c2ZzX1NPVVJDRVMgPSB0ZXN0LmMgdGVzdF9hdHRyLmMgdGVzdF9idXMuYyB0ZXN0X2NsYXNzLmMgXAorIAkJICAgICAgIHRlc3RfZGV2aWNlLmMgdGVzdF9kcml2ZXIuYyB0ZXN0X21vZHVsZS5jIHRlc3RfdXRpbHMuYyBcCisgCQkgICAgICAgdGVzdG91dC5jIHRlc3QtZGVmcy5oIGxpYnN5c2ZzLmNvbmYgY3JlYXRlLXRlc3QKKy1JTkNMVURFUyA9IC1JLi4vaW5jbHVkZQorK0lOQ0xVREVTID0gLUkkKHNyY2RpcikvLi4vaW5jbHVkZQorIExEQUREID0gLi4vbGliL2xpYnN5c2ZzLmxhCisgRVhUUkFfQ0ZMQUdTID0gQEVYVFJBX0NMRkFHU0AKKyBBTV9DRkxBR1MgPSAtV2FsbCAtVyAtV3N0cmljdC1wcm90b3R5cGVzICQoRVhUUkFfQ0xGQUdTKQorSW5kZXg6IHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9jcmVhdGUtdGVzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy90ZXN0L2NyZWF0ZS10ZXN0CTIwMDUtMTEtMjggMTA6MjI6MTAuMDAwMDAwMDAwICswMDAwCisrKysgc3lzZnN1dGlscy0yLjEuMC90ZXN0L2NyZWF0ZS10ZXN0CTIwMTMtMDMtMDggMDk6MDc6MDMuMzcyNTQyODM4ICswMDAwCitAQCAtMiw3ICsyLDcgQEAKKyAKKyBybSAtZiB0ZXN0LmgKKyAKKy1jb25mX2ZpbGU9Li9saWJzeXNmcy5jb25mCisrY29uZl9maWxlPSQxCisgCisgLiAkY29uZl9maWxlCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzNWI3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtmcm9tIGZlZG9yYSBjb3JlIDldCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSB0aGUgRmVkb3JhIENvcmUgOSBzeXNmc3V0aWxzLTIuMS4wLTMuZmM5IHBhY2thZ2UuCisKK0l0IGZpeGVzIGEgcHJvYmxlbSBpbiB0aGUgdXBzdHJlYW0gcGFja2FnZSB3aGVyZSBub3QgYWxsIGRldmljZXMgCit3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbi4KKworVGhlIHBhY2thZ2UgTGljZW5zZSBpbmRpY2F0ZXMgdGhpcyBpcyBHUEx2MiBsaWNlbnNlZC4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC1wdU4gbGliL3N5c2ZzX2NsYXNzLmN+c3lzZnN1dGlsc19jbGFzc19kdXAgbGliL3N5c2ZzX2NsYXNzLmMKKy0tLSBzeXNmc3V0aWxzLTIuMS4wL2xpYi9zeXNmc19jbGFzcy5jfnN5c2ZzdXRpbHNfY2xhc3NfZHVwCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCisrKysgc3lzZnN1dGlscy0yLjEuMC1iamtpbmcxL2xpYi9zeXNmc19jbGFzcy5jCTIwMDYtMDktMDcgMTc6MDE6MjYuMDAwMDAwMDAwIC0wNTAwCitAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgaW50IGNkZXZfbmFtZV9lcXVhbCh2b2lkICphLCB2b2lkCisgCQlyZXR1cm4gMDsKKyAKKyAJaWYgKHN0cm5jbXAoKGNoYXIgKilhLCAoKHN0cnVjdCBzeXNmc19jbGFzc19kZXZpY2UgKiliKS0+bmFtZSwKKy0JCQkJc3RybGVuKChjaGFyICopYSkpID09IDApCisrCQkJCVNZU0ZTX05BTUVfTEVOKSA9PSAwKQorIAkJcmV0dXJuIDE7CisgCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzXzIuMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzXzIuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjQwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJUb29scyBmb3Igd29ya2luZyB3aXRoIHN5c2ZzIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgc3lzZnMgdmlydHVhbCBmaWxlc3lzdGVtLiAgVGhlIHRvb2wgJ3N5c3Rvb2wnIGNhbiBxdWVyeSBkZXZpY2VzIGJ5IGJ1cywgY2xhc3MgYW5kIHRvcG9sb2d5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saW51eC1kaWFnLnNvdXJjZWZvcmdlLm5ldC9TeXNmc3V0aWxzLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIiCitMSUNFTlNFX2xpYnN5c2ZzID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2QwNjQwM2VhNTRjNzU3NGE5ZTU4MWM2NDc4Y2MzOTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY21kL0dQTDttZDU9ZDQxZDRlMmUxZTEwODU1NGUwMzg4ZWE0YWVjZDhkMjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL0xHUEw7bWQ1PWI3NWQwNjk3OTExMDNmZmUxYzBkNjQzNWRlZWZmNzJlIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpbnV4LWRpYWcvc3lzZnN1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3lzZnN1dGlscy0yLjAuMC1jbGFzcy1kdXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNGU3ZGNkMDQzNmQyZjQ5YWE0MDNmNjdlMWVmN2RkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlODY1ZGUyYzFmNTU5ZmZmMGQzZmM5MzZlNjYwYzBlZmFmN2FmZTY2MjA2NGYyZmI5N2NjYWQxZWMyOGQyMDhhIgorUyA9ICIke1dPUktESVJ9L3N5c2ZzdXRpbHMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BBQ0tBR0VTID0rICJsaWJzeXNmcyIKK0ZJTEVTX2xpYnN5c2ZzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlic3lzZnMtZGV2ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJzeXNmcy1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKKworZXhwb3J0IGxpYmRpciA9ICIke2Jhc2VfbGliZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtY29tcGF0LXVuaXRzLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiRW5oYW5jZXMgc3lzdGVtZCBjb21wYXRpbGliaXR5IHdpdGggZXhpc3RpbmcgU3lzVmluaXQgc2NyaXB0cyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworUFIgPSAicjI5IgorCitERVBFTkRTID0gInN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2gKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTID0gIiBcCisgIGJ1c3lib3gtdWRoY3BjIFwKKyAgaHdjbG9jayBcCisgIG5ldHdvcmtpbmcgXAorICBuZnNzZXJ2ZXIgXAorICBuZnNjb21tb24gXAorICBzeXNsb2cuYnVzeWJveCBcCisiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJY2QgJEQke3N5c2NvbmZkaXJ9L2luaXQuZAorCisJZWNobyAiRGlzYWJsaW5nIHRoZSBmb2xsb3dpbmcgc3lzdiBzY3JpcHRzOiAiCisKKwlPUFRTPSIiCisKKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFRTPSItLXJvb3Q9JEQiCisJZmkKKworCWZvciBpIGluICR7U1lTVEVNRF9ESVNBQkxFRF9TWVNWX1NFUlZJQ0VTfSA7IGRvCisJCWlmIFsgXCggLWUgJGkgLW8gJGkuc2ggXCkgLWEgISBcKCAtZSAkRCR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vJGkuc2VydmljZSAtbyAgLWUgJEQke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyRpLnNlcnZpY2UgXCkgXSA7IHRoZW4KKwkJCWVjaG8gLW4gIiRpOiAiIDsgc3lzdGVtY3RsICR7T1BUU30gbWFzayAkaS5zZXJ2aWNlCisJCWZpCisJZG9uZSA7IGVjaG8KK30KKworUkRQRVBFTkRTXyR7UE59ID0gInN5c3RlbWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY4YjEzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlNlcmlhbCB0ZXJtaW5hbCBzdXBwb3J0IGZvciBzeXN0ZW1kIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworUFIgPSAicjUiCisKK1NFUklBTF9DT05TT0xFID89ICIxMTUyMDAgdHR5UzAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlcmlhbC1nZXR0eUAuc2VydmljZSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdIDsgdGhlbgorCQlkZWZhdWx0X2JhdWRyYXRlPWBlY2hvICIke1NFUklBTF9DT05TT0xFU30iIHwgc2VkICdzL1w7LiovLydgCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kZGVmYXVsdF9iYXVkcmF0ZS9nICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eUAuc2VydmljZQorCisJCXRtcD0iJHtTRVJJQUxfQ09OU09MRVN9IgorCQlmb3IgZW50cnkgaW4gJHRtcCA7IGRvCisJCQliYXVkcmF0ZT1gZWNobyAkZW50cnkgfCBzZWQgJ3MvXDsuKi8vJ2AKKwkJCXR0eWRldj1gZWNobyAkZW50cnkgfCBzZWQgLWUgJ3MvXlswLTldKlw7Ly8nIC1lICdzL1w7LiovLydgCisJCQlpZiBbICIkYmF1ZHJhdGUiID0gIiRkZWZhdWx0X2JhdWRyYXRlIiBdIDsgdGhlbgorCQkJCSMgZW5hYmxlIHRoZSBzZXJ2aWNlCisJCQkJbG4gLXNmICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlIFwKKwkJCQkJJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzL3NlcmlhbC1nZXR0eUAkdHR5ZGV2LnNlcnZpY2UKKwkJCWVsc2UKKwkJCQkjIGluc3RhbGwgY3VzdG9tIHNlcnZpY2UgZmlsZSBmb3IgdGhlIG5vbi1kZWZhdWx0IGJhdWRyYXRlCisJCQkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZQorCQkJCXNlZCAtaSAtZSBzL1xAQkFVRFJBVEVcQC8kYmF1ZHJhdGUvZyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVALnNlcnZpY2UKKwkJCQkjIGVuYWJsZSB0aGUgc2VydmljZQorCQkJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZSBcCisJCQkJCSR7RH0ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtL2dldHR5LnRhcmdldC53YW50cy9zZXJpYWwtZ2V0dHkkYmF1ZHJhdGVAJHR0eWRldi5zZXJ2aWNlCisJCQlmaQorCQlkb25lCisJZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAic3lzdGVtZCIKKworIyBUaGlzIGlzIGEgbWFjaGluZSBzcGVjaWZpYyBmaWxlCitGSUxFU18ke1BOfSA9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZSAke3N5c2NvbmZkaXJ9IgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBBcyB0aGlzIHBhY2thZ2UgaXMgdGllZCB0byBzeXN0ZW1kLCBvbmx5IGJ1aWxkIGl0IHdoZW4gd2UncmUgYWxzbyBidWlsZGluZyBzeXN0ZW1kLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkvc2VyaWFsLWdldHR5QC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjE2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc2VyaWFsZ2V0dHkvc2VyaWFsLWdldHR5QC5zZXJ2aWNlCkBAIC0wLDAgKzEsMzcgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN5c3RlbWQuCisjCisjICBzeXN0ZW1kIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworW1VuaXRdCitEZXNjcmlwdGlvbj1TZXJpYWwgR2V0dHkgb24gJUkKK0RvY3VtZW50YXRpb249bWFuOmFnZXR0eSg4KSBtYW46c3lzdGVtZC1nZXR0eS1nZW5lcmF0b3IoOCkKK0RvY3VtZW50YXRpb249aHR0cDovLzBwb2ludGVyLmRlL2Jsb2cvcHJvamVjdHMvc2VyaWFsLWNvbnNvbGUuaHRtbAorQmluZHNUbz1kZXYtJWkuZGV2aWNlCitBZnRlcj1kZXYtJWkuZGV2aWNlIHN5c3RlbWQtdXNlci1zZXNzaW9ucy5zZXJ2aWNlIHBseW1vdXRoLXF1aXQtd2FpdC5zZXJ2aWNlCitBZnRlcj1yYy1sb2NhbC5zZXJ2aWNlCisKKyMgSWYgYWRkaXRpb25hbCBnZXR0eXMgYXJlIHNwYXduZWQgZHVyaW5nIGJvb3QgdGhlbiB3ZSBzaG91bGQgbWFrZQorIyBzdXJlIHRoYXQgdGhpcyBpcyBzeW5jaHJvbml6ZWQgYmVmb3JlIGdldHR5LnRhcmdldCwgZXZlbiB0aG91Z2gKKyMgZ2V0dHkudGFyZ2V0IGRpZG4ndCBhY3R1YWxseSBwdWxsIGl0IGluLgorQmVmb3JlPWdldHR5LnRhcmdldAorSWdub3JlT25Jc29sYXRlPXllcworCitbU2VydmljZV0KK0Vudmlyb25tZW50PSJURVJNPXh0ZXJtIgorRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLTggLUwgLS1rZWVwLWJhdWQgJUkgQEJBVURSQVRFQCAkVEVSTQorVHlwZT1pZGxlCitSZXN0YXJ0PWFsd2F5cworUmVzdGFydFNlYz0wCitVdG1wSWRlbnRpZmllcj0lSQorVFRZUGF0aD0vZGV2LyVJCitUVFlSZXNldD15ZXMKK1RUWVZIYW5ndXA9eWVzCitLaWxsTW9kZT1wcm9jZXNzCitJZ25vcmVTSUdQSVBFPW5vCitTZW5kU0lHSFVQPXllcworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWdldHR5LnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmRjOWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIGZvciBlbmFibGluZyBzeXN0ZW1kIHNlcnZpY2VzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJmaWxlOi8vc3lzdGVtY3RsIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc3lzdGVtY3RsICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmUxNjNiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwvc3lzdGVtY3RsCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKK2VjaG8gIlN0YXJ0ZWQgJDAgJCoiCisKK1JPT1Q9CisKKyMgcGFyc2UgY29tbWFuZCBsaW5lIHBhcmFtcworYWN0aW9uPQord2hpbGUgWyAkIyAhPSAwIF07IGRvCisJb3B0PSIkMSIKKworCWNhc2UgIiRvcHQiIGluCisJCWVuYWJsZSkKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCWRpc2FibGUpCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQltYXNrKQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJcHJlc2V0KQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yb290PSopCisJCQlST09UPSR7b3B0IyMtLXJvb3Q9fQorCQkJY21kX2FyZ3M9IjAiCisJCQlzaGlmdAorCQkJOzsKKwkJKikKKwkJCWlmIFsgIiRjbWRfYXJncyIgPSAiMSIgXTsgdGhlbgorCQkJCXNlcnZpY2VzPSIkc2VydmljZXMgJG9wdCIgCisJCQkJc2hpZnQKKwkJCWVsc2UKKwkJCQllY2hvICInJG9wdCcgaXMgYW4gdW5rb3duIG9wdGlvbjsgZXhpdGluZyB3aXRoIGVycm9yIgorCQkJCWV4aXQgMQorCQkJZmkKKwkJCTs7CisJZXNhYworZG9uZQoraWYgWyAiJGFjdGlvbiIgPSAicHJlc2V0IiAtYSAiJHNlcnZpY2VfZmlsZSIgPSAiIiBdOyB0aGVuCisJc2VydmljZXM9JChmb3IgZiBpbiBgZmluZCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0gJFJPT1QvbGliL3N5c3RlbWQvc3lzdGVtICRST09UL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0gLXR5cGUgZiAyPjFgOyBkbyBiYXNlbmFtZSAkZjsgZG9uZSkKKwlzZXJ2aWNlcz0iJHNlcnZpY2VzICRvcHQiCisJcHJlc2V0YWxsPTEKK2ZpCisKK2ZvciBzZXJ2aWNlIGluICRzZXJ2aWNlczsgZG8KKwlpZiBbICIkcHJlc2V0YWxsIiA9ICIxIiBdOyB0aGVuCisJCWFjdGlvbj0icHJlc2V0IgorCWZpCisJaWYgWyAiJGFjdGlvbiIgPSAibWFzayIgXTsgdGhlbgorCQlpZiBbICEgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyBdOyB0aGVuCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vCisJCWZpCisJCWNtZD0ibG4gLXMgL2Rldi9udWxsICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kc2VydmljZSIKKwkJZWNobyAiJGNtZCIKKwkJJGNtZAorCQlleGl0IDAKKwlmaQorCisJc2VydmljZV9iYXNlX2ZpbGU9YGVjaG8gJHNlcnZpY2UgfCBzZWQgJ3MvXChAXCkuKlwoXC5bXi5dXCtcKS9cMVwyLydgCisJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAnL0AvcDtkJ2AgXTsgdGhlbgorCQllY2hvICJUcnkgdG8gZmluZCBsb2NhdGlvbiBvZiAkc2VydmljZS4uLiIKKwkJc2VydmljZV90ZW1wbGF0ZT1mYWxzZQorCWVsc2UKKwkJZWNobyAiVHJ5IHRvIGZpbmQgbG9jYXRpb24gb2YgdGVtcGxhdGUgJHNlcnZpY2VfYmFzZV9maWxlIG9mIGluc3RhbmNlICRzZXJ2aWNlLi4uIgorCQlzZXJ2aWNlX3RlbXBsYXRlPXRydWUKKwkJaWYgWyAteiBgZWNobyAkc2VydmljZSB8IHNlZCAncy9eLlwrQFwoLipcKVwuW14uXVwrL1wxLydgIF07IHRoZW4KKwkJCWluc3RhbmNlX3NwZWNpZmllZD1mYWxzZQorCQllbHNlCisJCQlpbnN0YW5jZV9zcGVjaWZpZWQ9dHJ1ZQorCQlmaQorCWZpCisKKwkjIGZpbmQgc2VydmljZSBmaWxlCisJZm9yIHAgaW4gJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtIFwKKwkJICRST09UL2xpYi9zeXN0ZW1kL3N5c3RlbSBcCisJCSAkUk9PVC91c3IvbGliL3N5c3RlbWQvc3lzdGVtOyBkbworCQlpZiBbIC1lICRwLyRzZXJ2aWNlX2Jhc2VfZmlsZSBdOyB0aGVuCisJCQlzZXJ2aWNlX2ZpbGU9JHAvJHNlcnZpY2VfYmFzZV9maWxlCisJCQlzZXJ2aWNlX2ZpbGU9JHtzZXJ2aWNlX2ZpbGUjIyRST09UfQorCQlmaQorCWRvbmUKKwlpZiBbIC16ICIkc2VydmljZV9maWxlIiBdOyB0aGVuCisJCWVjaG8gIickc2VydmljZV9iYXNlX2ZpbGUnIGNvdWxkbid0IGJlIGZvdW5kOyBleGl0aW5nIHdpdGggZXJyb3IiCisJCWV4aXQgMQorCWZpCisJZWNobyAiRm91bmQgJHNlcnZpY2UgaW4gJHNlcnZpY2VfZmlsZSIKKworCSMgSWYgYW55IG5ldyB1bml0IHR5cGVzIGFyZSBhZGRlZCB0byBzeXN0ZW1kIHRoZXkgc2hvdWxkIGJlIGFkZGVkCisJIyB0byB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKwl1bml0X3R5cGVzX3JlPSdcLlwoc2VydmljZVx8c29ja2V0XHxkZXZpY2VcfG1vdW50XHxhdXRvbW91bnRcfHN3YXBcfHRhcmdldFx8cGF0aFx8dGltZXJcfHNuYXBzaG90XCkkJworCWlmIFsgIiRhY3Rpb24iID0gInByZXNldCIgXTsgdGhlbgorCQlhY3Rpb249YGVncmVwIC1zaCAgJHNlcnZpY2UgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQlpZiBbIC16ICIkYWN0aW9uIiBdOyB0aGVuCisJCQlnbG9iYWxwcmVzZXQ9YGVncmVwIC1zaCAgJ1wqJyAgJFJPT1QvZXRjL3N5c3RlbWQvdXNlci1wcmVzZXQvKi5wcmVzZXQgfCBjdXQgLWYxIC1kJyAnYAorCQkJaWYgWyAtbiAiJGdsb2JhbHByZXNldCIgXTsgdGhlbgorCQkJCWFjdGlvbj0iJGdsb2JhbHByZXNldCIKKwkJCWVsc2UKKwkJCQlhY3Rpb249ImVuYWJsZSIKKwkJCWZpCisJCWZpCisJZmkKKwkjIGNyZWF0ZSB0aGUgcmVxdWlyZWQgc3ltYm9saWMgbGlua3MKKwl3YW50ZWRfYnk9JChzZWQgJy9eV2FudGVkQnlbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkd2FudGVkX2J5OyBkbworCQllY2hvICJXYW50ZWRCeT0kciBmb3VuZCBpbiAkc2VydmljZSIKKwkJaWYgWyAiJGFjdGlvbiIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCQllbmFibGVfc2VydmljZT0kc2VydmljZQorCQkJaWYgWyAiJHNlcnZpY2VfdGVtcGxhdGUiID0gdHJ1ZSAtYSAiJGluc3RhbmNlX3NwZWNpZmllZCIgPSBmYWxzZSBdOyB0aGVuCisJCQkJZGVmYXVsdF9pbnN0YW5jZT0kKHNlZCAnL15EZWZhdWx0SW5zdGFuY2VbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIikKKwkJCQlpZiBbIC16ICRkZWZhdWx0X2luc3RhbmNlIF07IHRoZW4KKwkJCQkJZWNobyAiVGVtcGxhdGUgdW5pdCB3aXRob3V0IGluc3RhbmNlIG9yIERlZmF1bHRJbnN0YW5jZSBkaXJlY3RpdmUsIG5vdGhpbmcgdG8gZW5hYmxlIgorCQkJCQljb250aW51ZQorCQkJCWVsc2UKKwkJCQkJZWNobyAiRm91bmQgRGVmYXVsdEluc3RhbmNlICRkZWZhdWx0X2luc3RhbmNlLCBlbmFibGluZyBpdCIKKwkJCQkJZW5hYmxlX3NlcnZpY2U9JChlY2hvICRzZXJ2aWNlIHwgc2VkICJzL0AvQCRkZWZhdWx0X2luc3RhbmNlLyIpCisJCQkJZmkKKwkJCWZpCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMKKwkJCWxuIC1zICRzZXJ2aWNlX2ZpbGUgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRlbmFibGVfc2VydmljZQorCQkJZWNobyAiRW5hYmxlZCAkZW5hYmxlX3NlcnZpY2UgZm9yICR3YW50ZWRfYnkuIgorCQllbHNlCisJCQlpZiBbICIkc2VydmljZV90ZW1wbGF0ZSIgPSB0cnVlIC1hICIkaW5zdGFuY2Vfc3BlY2lmaWVkIiA9IGZhbHNlIF07IHRoZW4KKwkJCQlkaXNhYmxlX3NlcnZpY2U9IiRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cy9gZWNobyAkc2VydmljZSB8IHNlZCAncy9AL0AqLydgIgorCQkJZWxzZQorCQkJCWRpc2FibGVfc2VydmljZT0iJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzLyRzZXJ2aWNlIgorCQkJZmkKKwkJCXJtIC1mICRkaXNhYmxlX3NlcnZpY2UKKwkJCVsgLWQgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzCisJCQllY2hvICJEaXNhYmxlZCAke2Rpc2FibGVfc2VydmljZSMjJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzL30gZm9yICR3YW50ZWRfYnkuIgorCQlmaQorCWRvbmUKKworCSMgY3JlYXRlIHRoZSByZXF1aXJlZCBzeW1ib2xpYyAnQWxpYXMnIGxpbmtzCisJYWxpYXM9JChzZWQgJy9eQWxpYXNbWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgICAgICAgfCB0ciAnLCcgJ1xuJyBcCisJCSAgICAgICAgfCBncmVwICIkdW5pdF90eXBlc19yZSIpCisKKwlmb3IgciBpbiAkYWxpYXM7IGRvCisJCWlmIFsgIiRhY3Rpb24iID0gImVuYWJsZSIgXTsgdGhlbgorCQkJbWtkaXIgLXAgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtCisJCQlsbiAtcyAkc2VydmljZV9maWxlICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kcgorCQkJZWNobyAiRW5hYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZWxzZQorCQkJcm0gLWYgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyCisJCQllY2hvICJEaXNhYmxlZCAkc2VydmljZSBmb3IgJGFsaWFzLiIKKwkJZmkKKwlkb25lCisKKwkjIGNhbGwgdXMgZm9yIHRoZSBvdGhlciByZXF1aXJlZCBzY3JpcHRzCisJYWxzbz0kKHNlZCAnL15BbHNvW1s6c3BhY2U6XV0qPS9zLFtePV0qPSwscDtkJyAiJFJPT1QvJHNlcnZpY2VfZmlsZSIgXAorCQkgICB8IHRyICcsJyAnXG4nKQorCWZvciBhIGluICRhbHNvOyBkbworCQllY2hvICJBbHNvPSRhIGZvdW5kIGluICRzZXJ2aWNlIgorCQlpZiBbICIkYWN0aW9uIiA9ICJlbmFibGUiIF07IHRoZW4KKwkJCSQwIC0tcm9vdD0kUk9PVCBlbmFibGUgJGEKKwkJZmkKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjYmUxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZgpAQCAtMCwwICsxLDcgQEAKKyNUaGlzIGdvZXMgaGFuZC1pbi1oYW5kIHdpdGggdGhlIGJhc2UtZmlsZXMgb2YgT0UtQ29yZS4gVGhlIGZpbGUgbXVzdAorIyBiZSBzb3J0ZWQgYmVmb3JlICdzeXN0ZW1kLmNvbmYnIGJlY3Vhc2UgdGhpcyBhdHRlbXB0cyB0byBjcmVhdGUgYSBmaWxlCisjIGluc2lkZSAvdmFyL2xvZy4KKworCitkCQkvdmFyL3ZvbGF0aWxlL2xvZwkJLQktCS0JLQorZAkJL3Zhci92b2xhdGlsZS90bXAJCTE3NzcJLQktCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmFiNWVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDEtdW5pdHMtUHJlZmVyLWdldHR5LXRvLWFnZXR0eS1pbi1jb25zb2xlLXNldHVwLXN5c3RlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDEwMGU1MDYwNGVmYzQwMzIwMDFhMmRlNmE2YjQ3ODUzYzAwMDM4MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyOToxNSArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzExXSB1bml0czogUHJlZmVyIGdldHR5IHRvIGFnZXR0eSBpbiBjb25zb2xlIHNldHVwIHN5c3RlbWQKKyB1bml0cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb24gc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHVuaXRzL2dldHR5QC5zZXJ2aWNlLm00ICAgICAgICB8IDIgKy0KKyB1bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91bml0cy9nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitpbmRleCA0NjE2NGFiLi5iZGY2ZWM4IDEwMDY0NAorLS0tIGEvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKKysrKyBiL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00CitAQCAtMjcsNyArMjcsNyBAQCBDb25kaXRpb25QYXRoRXhpc3RzPS9kZXYvdHR5MAorIAorIFtTZXJ2aWNlXQorICMgdGhlIFZUIGlzIGNsZWFyZWQgYnkgVFRZVlREaXNhbGxvY2F0ZQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0tbm9jbGVhciAlSSAkVEVSTQorK0V4ZWNTdGFydD0tL3NiaW4vZ2V0dHkgLUwgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFJlc3RhcnRTZWM9MAorZGlmZiAtLWdpdCBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNCBiL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAoraW5kZXggNDUyMmQwZC4uZTZkNDk5ZCAxMDA2NDQKKy0tLSBhL3VuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNAorKysrIGIvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00CitAQCAtMjIsNyArMjIsNyBAQCBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgSWdub3JlT25Jc29sYXRlPXllcworIAorIFtTZXJ2aWNlXQorLUV4ZWNTdGFydD0tL3NiaW4vYWdldHR5IC0ta2VlcC1iYXVkIDExNTIwMCwzODQwMCw5NjAwICVJICRURVJNCisrRXhlY1N0YXJ0PS0vc2Jpbi9nZXR0eSAtTCAxMTUyMDAgJUkgJFRFUk0KKyBUeXBlPWlkbGUKKyBSZXN0YXJ0PWFsd2F5cworIFV0bXBJZGVudGlmaWVyPSVJCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjBmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gMTg0YTg5Y2FhY2ZhMDBmMDdlNzI3NWJjYTU5MmJkN2RkYTFiNTQxZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjAzOjQ0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTFdIGJpbmZtdDogRG9uJ3QgaW5zdGFsbCBkZXBlbmRlbmN5IGxpbmtzIGF0IGluc3RhbGwgdGltZQorIGZvciB0aGUgYmluZm10IHNlcnZpY2VzCisKK3VzZSBbSW5zdGFsbF0gYmxvY2tzIHNvIHRoYXQgdGhleSBnZXQgY3JlYXRlZCB3aGVuIHRoZSBzZXJ2aWNlIGlzIGVuYWJsZWQKK2xpa2UgYSB0cmFkaXRpb25hbCBzZXJ2aWNlLgorCitUaGUgW0luc3RhbGxdIGJsb2NrcyB3ZXJlIHJlamVjdGVkIHVwc3RyZWFtIGFzIHRoZXkgZG9uJ3QgaGF2ZSBhIHdheSB0bworImVuYWJsZSIKK2l0IG9uIGluc3RhbGwgd2l0aG91dCBzdGF0aWMgc3ltbGlua3Mgd2hpY2ggY2FuJ3QgYmUgZGlzYWJsZWQsIG9ubHkKK21hc2tlZC4gIFdlCitob3dldmVyIGNhbiBkbyB0aGF0IGluIGEgcG9zdGluc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAtLS0tCisgdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50IHwgMyArKysKKyB1bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluICAgICAgICAgfCA1ICsrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTQyNzEsMTAgKzQyNzEsNiBAQCBJTlNUQUxMX0RJUlMgKz0gXAorIAkkKHByZWZpeCkvbGliL2JpbmZtdC5kIFwKKyAJJChzeXNjb25mZGlyKS9iaW5mbXQuZAorIAorLVNZU0lOSVRfVEFSR0VUX1dBTlRTICs9IFwKKy0Jc3lzdGVtZC1iaW5mbXQuc2VydmljZSBcCistCXByb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorLQorIGVuZGlmCisgCisgRVhUUkFfRElTVCArPSBcCitJbmRleDogZ2l0L3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorKysrIGdpdC91bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKK0BAIC0xNiwzICsxNiw2IEBAIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCisgCisgW0F1dG9tb3VudF0KKyBXaGVyZT0vcHJvYy9zeXMvZnMvYmluZm10X21pc2MKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1zeXNpbml0LnRhcmdldAorSW5kZXg6IGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvc3lzdGVtZC1iaW5mbXQuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCitAQCAtMTEsNiArMTEsOCBAQCBEb2N1bWVudGF0aW9uPW1hbjpzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlCisgRG9jdW1lbnRhdGlvbj1odHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dAorIERlZmF1bHREZXBlbmRlbmNpZXM9bm8KKyBDb25mbGljdHM9c2h1dGRvd24udGFyZ2V0CisrV2FudHM9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisrCisgQWZ0ZXI9cHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisgQmVmb3JlPXN5c2luaXQudGFyZ2V0IHNodXRkb3duLnRhcmdldAorIENvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0vcHJvYy9zeXMvCitAQCAtMjUsMyArMjcsNiBAQCBUeXBlPW9uZXNob3QKKyBSZW1haW5BZnRlckV4aXQ9eWVzCisgRXhlY1N0YXJ0PUByb290bGliZXhlY2RpckAvc3lzdGVtZC1iaW5mbXQKKyBUaW1lb3V0U2VjPTkwcworKworK1tJbnN0YWxsXQorK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDc4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDRlMmU4ZGJmM2YyM2FiN2RjYTMyMjg2Y2MwZjM3YmZmNmFjNDllMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNTowNTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDA0LzExXSBjb25maWd1cmU6IENoZWNrIGZvciBhZGRpdGlvbmFsIGZlYXR1cmVzIHRoYXQgdWNsaWJjCisgZG9lc250IHN1cHBvcnQKKworVGhpcyBoZWxwcyBpbiBzdXBwb3J0aW5nIHVjbGliYyB3aGljaCBkb2VzIG5vdCBoYXZlIGFsbCBmZWF0dXJlcyB0aGF0CitnbGliYyBtaWdodCBoYXZlCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTggKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtMTEwLDYgKzExMCwyNCBAQCBBQ19QQVRIX1BST0coW1VNT1VOVF9QQVRIXSwgW3Vtb3VudF0sIFsvCisgCisgQVNfSUYoWyEgbG4gLS1yZWxhdGl2ZSAtLWhlbHAgPiAvZGV2L251bGwgMj4mMV0sIFtBQ19NU0dfRVJST1IoWyoqKiBsbiBkb2Vzbid0IHN1cHBvcnQgLS1yZWxhdGl2ZSAqKipdKV0pCisgCisrIyBjaGVjayBmb3IgZmV3IGZ1bmN0aW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gdUNsaWJjCisrCisrQUNfQ0hFQ0tfRlVOQ1NfT05DRShta29zdGVtcCBleGVjdnBlIHBvc2l4X2ZhbGxvY2F0ZSkKKysKKysjIGNoZWNrIGZvciAlbXMgZm9ybWF0IHN1cHBvcnQgLSBhc3N1bWUgYWx3YXlzIG5vIGlmIGNyb3NzIGNvbXBpbGluZworKworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAlbXMgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSAqc2NhbmZdKQorKworK0FDX0xJTktfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKFsKKysJICNpbmNsdWRlIDxzdGRpby5oPgorKwkgXSxbCisrCSAgICBjaGFyICpidWYxLCAqYnVmMiwgKmJ1ZjMsIHN0cj0iMSAyLjMgYWJjZGUiIDsKKysJICAgIGludCByYyA9IHNzY2FuZihzdHIsICIlbXMgJW1zICVtcyIsICZidWYxLCAmYnVmMiwgJmJ1ZjMpIDsKKysJICAgIHJldHVybiAocmM9PTMpPzA6MTtdKV0sCisrCVtBQ19ERUZJTkUoW0hBVkVfTVNGT1JNQVRdLCBbMV0sIFtEZWZpbmUgaWYgJW1zIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgKnNjYW5mLl0pXSwKKysJW0FDX01TR19SRVNVTFQoW25vXSldKQorKworIE00X0RFRklORVM9CisgCisgQUNfQ0hFQ0tfVE9PTChPQkpDT1BZLCBvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDUtbnNwYXduLVVzZS1leGVjdnBlLW9ubHktd2hlbi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTAwODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBhNzQxN2MyZTY5NTBkNTVjMjJjMWIwZDE1NzgzODk4YjhmZjIyOWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTA6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xMV0gbnNwYXduOiBVc2UgZXhlY3ZwZSBvbmx5IHdoZW4gbGliYyBzdXBwb3J0cyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9uc3Bhd24vbnNwYXduLmMKKysrKyBnaXQvc3JjL25zcGF3bi9uc3Bhd24uYworQEAgLTE0Myw2ICsxNDMsOCBAQCB0eXBlZGVmIHN0cnVjdCBDdXN0b21Nb3VudCB7CisgICAgICAgICBjaGFyICoqbG93ZXI7CisgfSBDdXN0b21Nb3VudDsKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgc3RhdGljIGNoYXIgKmFyZ19kaXJlY3RvcnkgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdGVtcGxhdGUgPSBOVUxMOworIHN0YXRpYyBjaGFyICphcmdfdXNlciA9IE5VTEw7CitAQCAtNDIzOCw3ICs0MjQwLDEyIEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGFbMF0gPSAoY2hhciopICIvc2Jpbi9pbml0IjsKKyAgICAgICAgICAgICAgICAgZXhlY3ZlKGFbMF0sIGEsIGVudl91c2UpOworICAgICAgICAgfSBlbHNlIGlmIChhcmdjID4gb3B0aW5kKQorKyNpZmRlZiBIQVZFX0VYRUNWUEUKKyAgICAgICAgICAgICAgICAgZXhlY3ZwZShhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQsIGVudl91c2UpOworKyNlbHNlCisrICAgICAgICAgICAgICAgIGVudmlyb24gPSBlbnZfdXNlOworKyAgICAgICAgICAgICAgICBleGVjdnAoYXJndltvcHRpbmRdLCBhcmd2ICsgb3B0aW5kKTsKKysjZW5kaWYgLyogSEFWRV9FWEVDVlBFICovCisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgY2hkaXIoaG9tZSA/IGhvbWUgOiAiL3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzFkZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMzRhNjFiNmM5ZWVkM2ZhZDM2MDA2NmZiNjMxMzJlYmM3ZTBhYWFhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjEyOjQ4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTFdIGpvdXJuYWw6IFVzZSBwb3NpeCBmYWxsb2NhdGUgb25seSBpZiBhdmFpbGFibGUKKworU29tZSBhcmNoaXRlY3R1cmUgcG9ydHMgaW4gdWNsaWJjIGRpZCBub3Qgc3VwcG9ydCBpdCBpbiBwYXN0CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMgIHwgMTYgKysrKysrKysrKysrKysrLQorIHNyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyB8IDE1ICsrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK2luZGV4IDI4NDVlMDUuLjk0MzExNzEgMTAwNjQ0CistLS0gYS9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMKK0BAIC0zNiw2ICszNiw4IEBACisgI2luY2x1ZGUgImNvbXByZXNzLmgiCisgI2luY2x1ZGUgImZzcHJnLmgiCisgCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworICNkZWZpbmUgREVGQVVMVF9EQVRBX0hBU0hfVEFCTEVfU0laRSAoMjA0N1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorICNkZWZpbmUgREVGQVVMVF9GSUVMRF9IQVNIX1RBQkxFX1NJWkUgKDMzM1VMTCpzaXplb2YoSGFzaEl0ZW0pKQorIAorQEAgLTM1NCw3ICszNTYsNyBAQCBzdGF0aWMgaW50IGpvdXJuYWxfZmlsZV9mc3RhdChKb3VybmFsRmlsZSAqZikgeworIAorIHN0YXRpYyBpbnQgam91cm5hbF9maWxlX2FsbG9jYXRlKEpvdXJuYWxGaWxlICpmLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpIHsKKyAgICAgICAgIHVpbnQ2NF90IG9sZF9zaXplLCBuZXdfc2l6ZTsKKy0gICAgICAgIGludCByOworKyAgICAgICAgaW50IHIgPSAwOworIAorICAgICAgICAgYXNzZXJ0KGYpOworIAorQEAgLTQxOCw5ICs0MjAsMjEgQEAgc3RhdGljIGludCBqb3VybmFsX2ZpbGVfYWxsb2NhdGUoSm91cm5hbEZpbGUgKmYsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKKyAgICAgICAgIC8qIE5vdGUgdGhhdCB0aGUgZ2xpYmMgZmFsbG9jYXRlKCkgZmFsbGJhY2sgaXMgdmVyeQorICAgICAgICAgICAgaW5lZmZpY2llbnQsIGhlbmNlIHdlIHRyeSB0byBtaW5pbWl6ZSB0aGUgYWxsb2NhdGlvbiBhcmVhCisgICAgICAgICAgICBhcyB3ZSBjYW4uICovCisrI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisgICAgICAgICByID0gcG9zaXhfZmFsbG9jYXRlKGYtPmZkLCBvbGRfc2l6ZSwgbmV3X3NpemUgLSBvbGRfc2l6ZSk7CisgICAgICAgICBpZiAociAhPSAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLXI7CisrI2Vsc2UKKysgICAgICAgIC8qIFdyaXRlIHNvbWV0aGluZyBldmVyeSA1MTIgYnl0ZXMgdG8gbWFrZSBzdXJlIHRoZSBibG9jayBpcyBhbGxvY2F0ZWQgKi8KKysgICAgICAgIHVpbnQ2NF90IGxlbiA9IG5ld19zaXplIC0gb2xkX3NpemU7CisrICAgICAgICB1aW50NjRfdCBvZmZzZXQgPSBvbGRfc2l6ZTsKKysgICAgICAgIGZvciAob2Zmc2V0ICs9IChsZW4tMSkgJSA1MTI7IGxlbiA+IDA7IG9mZnNldCArPSA1MTIpIHsKKysgICAgICAgICAgICAgICAgbGVuIC09IDUxMjsKKysgICAgICAgICAgICAgICAgaWYgKHB3cml0ZShmLT5mZCwgIiIsIDEsIG9mZnNldCkgIT0gMSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworKyAgICAgICAgfQorKworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworIAorICAgICAgICAgZi0+aGVhZGVyLT5hcmVuYV9zaXplID0gaHRvbGU2NChuZXdfc2l6ZSAtIGxlNjR0b2goZi0+aGVhZGVyLT5oZWFkZXJfc2l6ZSkpOworIAorZGlmZiAtLWdpdCBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYyBiL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworaW5kZXggYzQyMTZjNC4uYTk5OGVkNSAxMDA2NDQKKy0tLSBhL3NyYy9qb3VybmFsL2pvdXJuYWxkLWttc2cuYworKysrIGIvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jCitAQCAtNDM2LDYgKzQzNiw3IEBAIGZhaWw6CisgaW50IHNlcnZlcl9vcGVuX2tlcm5lbF9zZXFudW0oU2VydmVyICpzKSB7CisgICAgICAgICBfY2xlYW51cF9jbG9zZV8gaW50IGZkOworICAgICAgICAgdWludDY0X3QgKnA7CisrICAgICAgICBpbnQgciA9IDA7CisgCisgICAgICAgICBhc3NlcnQocyk7CisgCitAQCAtNDQ5LDcgKzQ1MCwxOSBAQCBpbnQgc2VydmVyX29wZW5fa2VybmVsX3NlcW51bShTZXJ2ZXIgKnMpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCistICAgICAgICBpZiAocG9zaXhfZmFsbG9jYXRlKGZkLCAwLCBzaXplb2YodWludDY0X3QpKSA8IDApIHsKKysjaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKysgICAgICAgIHIgPSBwb3NpeF9mYWxsb2NhdGUoZmQsIDAsIHNpemVvZih1aW50NjRfdCkpOworKyNlbHNlCisrICAgICAgICAvKiBVc2UgZ29vZCBvbGQgbWV0aG9kIHRvIHdyaXRlIHplcm9zIGludG8gdGhlIGpvdXJuYWwgZmlsZQorKyAgICAgICAgICAgcGVyaGFwcyB2ZXJ5IGluZWZmaWNpZW50IHlldCB3b3JraW5nLiAqLworKyAgICAgICAgY2hhciAqYnVmID0gYWxsb2NhKHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgb2ZmX3Qgb2xkcG9zID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKysgICAgICAgIGJ6ZXJvKGJ1Ziwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrICAgICAgICBsc2VlayhmZCwgMCwgU0VFS19TRVQpOworKyAgICAgICAgciA9IHdyaXRlKGZkLCBidWYsIHNpemVvZih1aW50NjRfdCkpOworKyAgICAgICAgbHNlZWsoZmQsIG9sZHBvcywgU0VFS19TRVQpOworKyNlbmRpZiAvKiBIQVZFX1BPU0lYX0ZBTExPQ0FURSAqLworKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICAgICAgIGxvZ19lcnJvcl9lcnJubyhlcnJubywgIkZhaWxlZCB0byBhbGxvY2F0ZSBzZXF1ZW50aWFsIG51bWJlciBmaWxlLCBpZ25vcmluZzogJW0iKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFiN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZjc3MTQwN2QzZTAyODhjYTBjMDZhODk0MTk0ZDNkZGFkNjliOWE4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTFdIHV0aWw6IFVzZSBta29zdGVtcCBvbmx5IGlmIGxpYmMgc3VwcG9ydHMgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCBkYzY1MjgwLi43MmY0NjY1IDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTk3LDYgKzk3LDggQEAKKyAjaW5jbHVkZSAiZGVmLmgiCisgI2luY2x1ZGUgInNwYXJzZS1lbmRpYW4uaCIKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgaW50IHNhdmVkX2FyZ2MgPSAwOworIGNoYXIgKipzYXZlZF9hcmd2ID0gTlVMTDsKKyAKK0BAIC02NjgyLDcgKzY2ODQsMTMgQEAgaW50IG1rb3N0ZW1wX3NhZmUoY2hhciAqcGF0dGVybiwgaW50IGZsYWdzKSB7CisgCisgICAgICAgICB1ID0gdW1hc2soMDc3KTsKKyAKKysjaWZkZWYgSEFWRV9NS09TVEVNUAorICAgICAgICAgZmQgPSBta29zdGVtcChwYXR0ZXJuLCBmbGFncyk7CisrI2Vsc2UKKysgICAgICAgIGZkID0gbWtzdGVtcChwYXR0ZXJuKTsKKysgICAgICAgIGlmIChmZCA+PSAwKSBmY250bChmZCwgRl9TRVRGRCwgZmxhZ3MpOworKyNlbmRpZiAvKiBIQVZFX01LT1NURU1QICovCisrCisgICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgICAgICByZXR1cm4gLWVycm5vOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjRkNGRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDgtdXRpbC1ieXBhc3MtdW5pbXBsZW1lbnRlZC1fU0NfUEhZU19QQUdFUy1zeXN0ZW0tY29uZi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIGI0NWVhM2JmZDY2MzU3NDRjOGE2Yjc0ZDBhYzcwMWI0NGJiMWQyOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxOTozNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzExXSB1dGlsOiBieXBhc3MgdW5pbXBsZW1lbnRlZCBfU0NfUEhZU19QQUdFUyBzeXN0ZW0KKyBjb25maWd1cmF0aW9uIEFQSSBvbiB1Y2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMtc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvYmFzaWMvdXRpbC5jIHwgMTUgKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9iYXNpYy91dGlsLmMgYi9zcmMvYmFzaWMvdXRpbC5jCitpbmRleCA3MmY0NjY1Li5jYmJlM2IxIDEwMDY0NAorLS0tIGEvc3JjL2Jhc2ljL3V0aWwuYworKysrIGIvc3JjL2Jhc2ljL3V0aWwuYworQEAgLTY3OTMsMTAgKzY3OTMsMjUgQEAgdWludDY0X3QgcGh5c2ljYWxfbWVtb3J5KHZvaWQpIHsKKyAgICAgICAgIC8qIFdlIHJldHVybiB0aGlzIGFzIHVpbnQ2NF90IGluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgYXMgMzJiaXQKKyAgICAgICAgICAqIHByb2Nlc3Mgb24gYSA2NGJpdCBrZXJuZWwgd2l0aCBodWdlIGFtb3VudHMgb2YgbWVtb3J5ICovCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgICAgIGNoYXIgbGluZVsxMjhdOworKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInIiKTsKKysgICAgICAgIGlmIChmID09IE5VTEwpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgd2hpbGUgKCFmZW9mKGYpICYmIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKS0xLCBmKSkgeworKyAgICAgICAgICAgICAgICBpZiAoc3NjYW5mKGxpbmUsICJNZW1Ub3RhbDogJWwga0IiLCAmbWVtKSA9PSAxKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWVtICo9IDEwMjQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZjbG9zZShmKTsKKysgICAgICAgIHJldHVybiAodWludDY0X3QpIG1lbTsKKysjZWxzZQorICAgICAgICAgbWVtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7CisgICAgICAgICBhc3NlcnQobWVtID4gMCk7CisgCisgICAgICAgICByZXR1cm4gKHVpbnQ2NF90KSBtZW0gKiAodWludDY0X3QpIHBhZ2Vfc2l6ZSgpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkIGhleGR1bXAoRklMRSAqZiwgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHMpIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhM2U4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA5LXN5c3YtZ2VuZXJhdG9yLWFkZC1zdXBwb3J0LWZvci1leGVjdXRpbmctc2NyaXB0cy11bmQucGF0Y2gKQEAgLTAsMCArMSwxNDMgQEAKK0Zyb20gODc5MWI1YjM5MzRjNTU2OTQ4NzJiNjkxNWE2NzM0MDY4M2VhZDkxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjIyOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTFdIHN5c3YtZ2VuZXJhdG9yOiBhZGQgc3VwcG9ydCBmb3IgZXhlY3V0aW5nIHNjcmlwdHMgdW5kZXIKKyAvZXRjL3JjUy5kLworCitUbyBiZSBjb21wYXRpYmxlLCBhbGwgc2VydmljZXMgdHJhbnNsYXRlZCBmcm9tIHNjcmlwdHMgdW5kZXIgL2V0Yy9yY1MuZCB3b3VsZAorcnVuIGJlZm9yZSBzZXJ2aWNlcyB0cmFuc2xhdGVkIGZyb20gc2NyaXB0cyB1bmRlciAvZXRjL3JjTi5kLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworaW5kZXggYmQ2N2YzMi4uNjc1NmNjNiAxMDA2NDQKKy0tLSBhL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jCisrKysgYi9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYworQEAgLTQyLDcgKzQyLDggQEAKKyAKKyB0eXBlZGVmIGVudW0gUnVubGV2ZWxUeXBlIHsKKyAgICAgICAgIFJVTkxFVkVMX1VQLAorLSAgICAgICAgUlVOTEVWRUxfRE9XTgorKyAgICAgICAgUlVOTEVWRUxfRE9XTiwKKysgICAgICAgIFJVTkxFVkVMX1NZU0lOSVQKKyB9IFJ1bmxldmVsVHlwZTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHsKK0BAIC01Nyw2ICs1OCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgeyAicmM0LmQiLCAgU1BFQ0lBTF9NVUxUSV9VU0VSX1RBUkdFVCwgUlVOTEVWRUxfVVAgfSwKKyAgICAgICAgIHsgInJjNS5kIiwgIFNQRUNJQUxfR1JBUEhJQ0FMX1RBUkdFVCwgIFJVTkxFVkVMX1VQIH0sCisgCisrICAgICAgICAvKiBEZWJpYW4gc3R5bGUgcmNTLmQsIGFsc28gYWRvcHRlZCBieSBPRSAqLworKyAgICAgICAgeyAicmNTLmQiLCAgU1BFQ0lBTF9TWVNJTklUX1RBUkdFVCwgICBSVU5MRVZFTF9TWVNJTklUfSwKKysKKyAgICAgICAgIC8qIFN0YW5kYXJkIFN5c1YgcnVubGV2ZWxzIGZvciBzaHV0ZG93biAqLworICAgICAgICAgeyAicmMwLmQiLCAgU1BFQ0lBTF9QT1dFUk9GRl9UQVJHRVQsICBSVU5MRVZFTF9ET1dOIH0sCisgICAgICAgICB7ICJyYzYuZCIsICBTUEVDSUFMX1JFQk9PVF9UQVJHRVQsICAgIFJVTkxFVkVMX0RPV04gfQorQEAgLTY1LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICAgICBkaXJlY3RvcmllcyBpbiB0aGlzIG9yZGVyLCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAgICAgc3lzdl9zdGFydF9wcmlvcml0eSBpcyBrbm93biB3aGVuIHdlIGZpcnN0IGxvYWQgdGhlCisgICAgICAgICAgICB1bml0LiBBbmQgdGhhdCB2YWx1ZSB3ZSBvbmx5IGtub3cgZnJvbSBTIGxpbmtzLiBIZW5jZQorLSAgICAgICAgICAgVVAgbXVzdCBiZSByZWFkIGJlZm9yZSBET1dOICovCisrICAgICAgICAgICBVUC9TWVNJTklUIG11c3QgYmUgcmVhZCBiZWZvcmUgRE9XTiAqLworIH07CisgCisgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworQEAgLTgxLDYgKzg1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzdlN0dWIgeworICAgICAgICAgY2hhciAqKmNvbmZsaWN0czsKKyAgICAgICAgIGJvb2wgaGFzX2xzYjsKKyAgICAgICAgIGJvb2wgcmVsb2FkOworKyAgICAgICAgYm9vbCBkZWZhdWx0X2RlcGVuZGVuY2llczsKKysgICAgICAgIGJvb2wgZnJvbV9yY3NkOworIH0gU3lzdlN0dWI7CisgCisgY29uc3QgY2hhciAqYXJnX2Rlc3QgPSAiL3RtcCI7CitAQCAtMTgzLDYgKzE4OSw5IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfdW5pdF9maWxlKFN5c3ZTdHViICpzKSB7CisgICAgICAgICAgICAgICAgICJEZXNjcmlwdGlvbj0lc1xuIiwKKyAgICAgICAgICAgICAgICAgcy0+cGF0aCwgcy0+ZGVzY3JpcHRpb24pOworIAorKyAgICAgICAgaWYgKCFzLT5kZWZhdWx0X2RlcGVuZGVuY2llcykKKysgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiRGVmYXVsdERlcGVuZGVuY2llcz1ub1xuIik7CisrCisgICAgICAgICBpZiAoIWlzZW1wdHkoYmVmb3JlKSkKKyAgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiQmVmb3JlPSVzXG4iLCBiZWZvcmUpOworICAgICAgICAgaWYgKCFpc2VtcHR5KGFmdGVyKSkKK0BAIC03MDQsMTggKzcxMywzMCBAQCBzdGF0aWMgaW50IGZpeF9vcmRlcihTeXN2U3R1YiAqcywgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgIGlmIChzLT5oYXNfbHNiICYmIG90aGVyLT5oYXNfbHNiKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworIAorLSAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5hZnRlciwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICAvKiBBbGwgc2NyaXB0cyB1bmRlciAvZXRjL3JjUy5kIHNob3VsZCBleGVjdXRlIGJlZm9yZSBzY3JpcHRzIHVuZGVyCisrICAgICAgICAgICAgICAgICAqIC9ldGMvcmNOLmQgKi8KKysgICAgICAgICAgICAgICAgaWYgKCFvdGhlci0+ZnJvbV9yY3NkICYmIHMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YmVmb3JlLCBvdGhlci0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA+IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmJlZm9yZSwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG90aGVyLT5mcm9tX3Jjc2QgJiYgIXMtPmZyb21fcmNzZCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YWZ0ZXIsIG90aGVyLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPCBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmFmdGVyLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID4gcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5iZWZvcmUsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgY29tcGFyZSB0aGUgbmFtZSBoZXJlIGxleGljb2dyYXBoaWNhbGx5PyAqLworICAgICAgICAgfQorQEAgLTc3OCw2ICs3OTksOCBAQCBzdGF0aWMgaW50IGVudW1lcmF0ZV9zeXN2KExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9IC0xOworKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5mcm9tX3Jjc2QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5wYXRoID0gZnBhdGg7CisgCitAQCAtODY0LDkgKzg4NywxMSBAQCBzdGF0aWMgaW50IHNldF9kZXBlbmRlbmNpZXNfZnJvbV9yY25kKExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZS0+ZF9uYW1lWzBdID09ICdTJykgIHsKKyAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9VUCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1VQIHx8IHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVgoYSoxMCArIGIsIHNlcnZpY2UtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmRlZmF1bHRfZGVwZW5kZW5jaWVzID0gKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKT9mYWxzZTp0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmZyb21fcmNzZCA9IChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCk/dHJ1ZTpmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc2V0X2Vuc3VyZV9hbGxvY2F0ZWQoJnJ1bmxldmVsX3NlcnZpY2VzW2ldLCBOVUxMKTsKK0BAIC04NzgsNyArOTAzLDggQEAgc3RhdGljIGludCBzZXRfZGVwZW5kZW5jaWVzX2Zyb21fcmNuZChMb29rdXBQYXRocyBscCwgSGFzaG1hcCAqYWxsX3NlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5pc2g7CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlLT5kX25hbWVbMF0gPT0gJ0snICYmCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfRE9XTikpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9ET1dOIHx8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfU1lTSU5JVCkpIHsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHNldF9lbnN1cmVfYWxsb2NhdGVkKCZzaHV0ZG93bl9zZXJ2aWNlcywgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2ZmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK0Zyb20gM2RjNzMxYzFkMjcwZTJlMTQzZGU2MjFkYjliZDg5ODI5OWZkODQ5ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI0OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIE1ha2Ugcm9vdCdzIGhvbWUgZGlyZWN0b3J5IGNvbmZpZ3VyYWJsZQorCitPcGVuRW1iZWRkZWQgaGFzIGEgY29uZmlndXJhYmxlIGhvbWUgZGlyZWN0b3J5IGZvciByb290LiBBbGxvdworc3lzdGVtZCB0byBiZSBidWlsdCB1c2luZyBpdHMgaWRlYSBvZiB3aGF0IHJvb3QncyBob21lIGRpcmVjdG9yeQorc2hvdWxkIGJlLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorVXBzdHJlYW0gd2FudHMgdG8gaGF2ZSBhIHVuaWZpZWQgaGllcmFyY2h5IHdoZXJlIGV2ZXJ5b25lIGlzCit1c2luZyB0aGUgc2FtZSByb290IGZvbGRlci4KK2h0dHBzOi8vZ2l0aHViLmNvbS9zeXN0ZW1kL3N5c3RlbWQvaXNzdWVzLzU0MQorCitTaWduZWQtb2ZmLWJ5OiBEYW4gTWNHcmVnb3IgPGRhbi5tY2dyZWdvckB1c2Fzay5jYT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgfCAyICsrCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgIHwgNyArKysrKysrCisgc3JjL2NvcmUvdW5pdC1wcmludGYuYyAgICAgICAgICAgIHwgMiArLQorIHNyYy9uc3Bhd24vbnNwYXduLmMgICAgICAgICAgICAgICB8IDQgKystLQorIHNyYy9iYXNpYy91dGlsLmMgICAgICAgICAgICAgICAgIHwgNCArKy0tCisgdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluIHwgNCArKy0tCisgdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4gICAgICAgIHwgNCArKy0tCisgdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4gICAgICAgICAgIHwgNCArKy0tCisgOCBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtMjA4LDYgKzIwOCw3IEBAIEFNX0NQUEZMQUdTID0gXAorIAktRExJQkRJUj1cIiQobGliZGlyKVwiIFwKKyAJLURST09UTElCRElSPVwiJChyb290bGliZGlyKVwiIFwKKyAJLURST09UTElCRVhFQ0RJUj1cIiQocm9vdGxpYmV4ZWNkaXIpXCIgXAorKwktRFJPT1RIT01FRElSPVwiJChyb290aG9tZWRpcilcIiBcCisgCS1EVEVTVF9ESVI9XCIkKGFic190b3Bfc3JjZGlyKS90ZXN0XCIgXAorIAktSSAkKHRvcF9zcmNkaXIpL3NyYyBcCisgCS1JICQodG9wX2J1aWxkZGlyKS9zcmMvYmFzaWMgXAorQEAgLTU2MTUsNiArNTYxNiw3IEBAIEVYVFJBX0RJU1QgKz0gXAorIHN1YnN0aXR1dGlvbnMgPSBcCisgICAgICAgICd8cm9vdGxpYmV4ZWNkaXI9JChyb290bGliZXhlY2Rpcil8JyBcCisgICAgICAgICd8cm9vdGJpbmRpcj0kKHJvb3RiaW5kaXIpfCcgXAorKyAgICAgICAnfHJvb3Rob21lZGlyPSQocm9vdGhvbWVkaXIpfCcgXAorICAgICAgICAnfGJpbmRpcj0kKGJpbmRpcil8JyBcCisgICAgICAgICd8U1lTVEVNQ1RMPSQocm9vdGJpbmRpcikvc3lzdGVtY3RsfCcgXAorICAgICAgICAnfFNZU1RFTURfTk9USUZZPSQocm9vdGJpbmRpcikvc3lzdGVtZC1ub3RpZnl8JyBcCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMzgzLDYgKzEzODMsMTEgQEAgQUNfQVJHX1dJVEgoW3Jvb3RsaWJkaXJdLAorICAgICAgICAgW3dpdGhfcm9vdGxpYmRpcj0ke2xpYmRpcn1dKQorIEFYX05PUk1BTElaRV9QQVRIKFt3aXRoX3Jvb3RsaWJkaXJdKQorIAorK0FDX0FSR19XSVRIKFtyb290aG9tZWRpcl0sCisrICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXJvb3Rob21lZGlyPURJUl0sIFtIb21lIGRpcmVjdG9yeSBmb3IgdGhlIHJvb3QgdXNlcl0pLAorKyAgICAgICAgW10sCisrICAgICAgICBbd2l0aF9yb290aG9tZWRpcj0vcm9vdF0pCisrCisgQUNfQVJHX1dJVEgoW3BhbWxpYmRpcl0sCisgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXBhbWxpYmRpcj1ESVJdLCBbRGlyZWN0b3J5IGZvciBQQU0gbW9kdWxlc10pLAorICAgICAgICAgW10sCitAQCAtMTQ3NCw2ICsxNDc5LDcgQEAgQUNfU1VCU1QoW3BhbWxpYmRpcl0sIFskd2l0aF9wYW1saWJkaXJdKQorIEFDX1NVQlNUKFtwYW1jb25mZGlyXSwgWyR3aXRoX3BhbWNvbmZkaXJdKQorIEFDX1NVQlNUKFtyb290cHJlZml4XSwgWyR3aXRoX3Jvb3RwcmVmaXhdKQorIEFDX1NVQlNUKFtyb290bGliZGlyXSwgWyR3aXRoX3Jvb3RsaWJkaXJdKQorK0FDX1NVQlNUKFtyb290aG9tZWRpcl0sIFskd2l0aF9yb290aG9tZWRpcl0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKKyAgICAgICAgIE1ha2VmaWxlCitAQCAtMTU2Myw2ICsxNTY5LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBpbmNsdWRlZGlyOiAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfQorICAgICAgICAgbGliIGRpcjogICAgICAgICAgICAgICAgICR7bGliZGlyfQorICAgICAgICAgcm9vdGxpYiBkaXI6ICAgICAgICAgICAgICR7d2l0aF9yb290bGliZGlyfQorKyAgICAgICAgcm9vdCBob21lIGRpcjogICAgICAgICAgICR7d2l0aF9yb290aG9tZWRpcn0KKyAgICAgICAgIFN5c1YgaW5pdCBzY3JpcHRzOiAgICAgICAke1NZU1RFTV9TWVNWSU5JVF9QQVRIfQorICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CitJbmRleDogZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29yZS91bml0LXByaW50Zi5jCisrKysgZ2l0L3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKK0BAIC0yMzcsNyArMjM3LDcgQEAgc3RhdGljIGludCBzcGVjaWZpZXJfdXNlcl9ob21lKGNoYXIgc3BlYworICAgICAgICAgICAgICAgICAgKiBiZXN0IG9mIGl0IGlmIHdlIGNhbiwgYnV0IGZhaWwgaWYgd2UgY2FuJ3QgKi8KKyAKKyAgICAgICAgICAgICAgICAgaWYgKCFjLT51c2VyIHx8IHN0cmVxKGMtPnVzZXIsICJyb290IikgfHwgc3RyZXEoYy0+dXNlciwgIjAiKSkKKy0gICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyZHVwKCIvcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworIAorSW5kZXg6IGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL25zcGF3bi9uc3Bhd24uYworKysrIGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCitAQCAtNDE3Niw3ICs0MTc2LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKKyAgICAgICAgIGlmIChlbnZwW25fZW52XSkKKyAgICAgICAgICAgICAgICAgbl9lbnYgKys7CisgCistICAgICAgICBpZiAoKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkhPTUU9JXMiLCBob21lID8gaG9tZTogIi9yb290IikgPCAwKSB8fAorKyAgICAgICAgaWYgKChhc3ByaW50ZigoY2hhcioqKShlbnZwICsgbl9lbnYrKyksICJIT01FPSVzIiwgaG9tZSA/IGhvbWU6IFJPT1RIT01FRElSKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIlVTRVI9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApIHx8CisgICAgICAgICAgICAgKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkxPR05BTUU9JXMiLCBhcmdfdXNlciA/IGFyZ191c2VyIDogInJvb3QiKSA8IDApKQorICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworQEAgLTQyNDcsNyArNDI0Nyw3IEBAIHN0YXRpYyBpbnQgaW5uZXJfY2hpbGQoCisgICAgICAgICAgICAgICAgIGV4ZWN2cChhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQpOworICNlbmRpZiAvKiBIQVZFX0VYRUNWUEUgKi8KKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6ICIvcm9vdCIpOworKyAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6IFJPT1RIT01FRElSKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL2Jhc2giLCAiLWJhc2giLCBOVUxMLCBlbnZfdXNlKTsKKyAgICAgICAgICAgICAgICAgZXhlY2xlKCIvYmluL3NoIiwgIi1zaCIsIE5VTEwsIGVudl91c2UpOworICAgICAgICAgfQorSW5kZXg6IGdpdC9zcmMvYmFzaWMvdXRpbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2Jhc2ljL3V0aWwuYworKysrIGdpdC9zcmMvYmFzaWMvdXRpbC5jCitAQCAtMzIzMyw3ICszMjMzLDcgQEAgaW50IGdldF91c2VyX2NyZWRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICpnaWQgPSAwOworIAorICAgICAgICAgICAgICAgICBpZiAoaG9tZSkKKy0gICAgICAgICAgICAgICAgICAgICAgICAqaG9tZSA9ICIvcm9vdCI7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmhvbWUgPSBST09USE9NRURJUjsKKyAKKyAgICAgICAgICAgICAgICAgaWYgKHNoZWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICpzaGVsbCA9ICIvYmluL3NoIjsKK0BAIC00MDY5LDcgKzQwNjksNyBAQCBpbnQgZ2V0X2hvbWVfZGlyKGNoYXIgKipfaCkgeworICAgICAgICAgLyogSGFyZGNvZGUgaG9tZSBkaXJlY3RvcnkgZm9yIHJvb3QgdG8gYXZvaWQgTlNTICovCisgICAgICAgICB1ID0gZ2V0dWlkKCk7CisgICAgICAgICBpZiAodSA9PSAwKSB7CistICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoIi9yb290Iik7CisrICAgICAgICAgICAgICAgIGggPSBzdHJkdXAoUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBpZiAoIWgpCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgCitJbmRleDogZ2l0L3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorKysrIGdpdC91bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4KK0BAIC0xNSw4ICsxNSw4IEBAIEFmdGVyPXJjLWxvY2FsLnNlcnZpY2UKKyBCZWZvcmU9Z2V0dHkudGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnQ9LUBTVUxPR0lOQAorIEV4ZWNTdG9wUG9zdD0tQFNZU1RFTUNUTEAgcG93ZXJvZmYKKyBUeXBlPWlkbGUKK0luZGV4OiBnaXQvdW5pdHMvZW1lcmdlbmN5LnNlcnZpY2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorQEAgLTE0LDggKzE0LDggQEAgQ29uZmxpY3RzPXJlc2N1ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIAorIFtTZXJ2aWNlXQorLUVudmlyb25tZW50PUhPTUU9L3Jvb3QKKy1Xb3JraW5nRGlyZWN0b3J5PS9yb290CisrRW52aXJvbm1lbnQ9SE9NRT1Acm9vdGhvbWVkaXJACisrV29ya2luZ0RpcmVjdG9yeT1Acm9vdGhvbWVkaXJACisgRXhlY1N0YXJ0UHJlPS0vYmluL3BseW1vdXRoIC0td2FpdCBxdWl0CisgRXhlY1N0YXJ0UHJlPS0vYmluL2VjaG8gLWUgJ1dlbGNvbWUgdG8gZW1lcmdlbmN5IG1vZGUhIEFmdGVyIGxvZ2dpbmcgaW4sIHR5cGUgImpvdXJuYWxjdGwgLXhiIiB0byB2aWV3XFxuc3lzdGVtIGxvZ3MsICJzeXN0ZW1jdGwgcmVib290IiB0byByZWJvb3QsICJzeXN0ZW1jdGwgZGVmYXVsdCIgb3IgXkQgdG9cXG50cnkgYWdhaW4gdG8gYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCitJbmRleDogZ2l0L3VuaXRzL3Jlc2N1ZS5zZXJ2aWNlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KKysrKyBnaXQvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KK0BAIC0xNCw4ICsxNCw4IEBAIEFmdGVyPXN5c2luaXQudGFyZ2V0IHBseW1vdXRoLXN0YXJ0LnNlcnYKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnRQcmU9LS9iaW4vcGx5bW91dGggcXVpdAorIEV4ZWNTdGFydFByZT0tL2Jpbi9lY2hvIC1lICdXZWxjb21lIHRvIGVtZXJnZW5jeSBtb2RlISBBZnRlciBsb2dnaW5nIGluLCB0eXBlICJqb3VybmFsY3RsIC14YiIgdG8gdmlld1xcbnN5c3RlbSBsb2dzLCAic3lzdGVtY3RsIHJlYm9vdCIgdG8gcmVib290LCAic3lzdGVtY3RsIGRlZmF1bHQiIG9yIF5EIHRvXFxuYm9vdCBpbnRvIGRlZmF1bHQgbW9kZS4nCisgRXhlY1N0YXJ0PS0vYmluL3NoIC1jICJAU1VMT0dJTkA7IEBTWVNURU1DVExAIC0tam9iLW1vZGU9ZmFpbCAtLW5vLWJsb2NrIGRlZmF1bHQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMS1zeXN0ZW1kLXVzZXItYXZvaWQtdXNpbmctc3lzdGVtLWF1dGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MmJjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDdlMjAyZjcxNzg1YmY1YTY3YzhhNGY2YjU4ZDM1ODU2MDhmYmZkYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToyNjoyNSArMDAwMAorU3ViamVjdDogW1BBVENIIDExLzExXSBzeXN0ZW1kLXVzZXI6IGF2b2lkIHVzaW5nIHN5c3RlbS1hdXRoCisKK0luIE9FLCB3ZSBkb24ndCBwcm92aWRlIHN5c3RlbS1hdXRoLCBpbnN0ZWFkLCB3ZSB1c2UgY29tbW9uLSogZmlsZXMuCitTbyBtb2RpZnkgc3lzdGVtZC11c2VyIGZpbGUgdG8gdXNlIGNvbW1vbi0qIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL2xvZ2luL3N5c3RlbWQtdXNlciB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbG9naW4vc3lzdGVtZC11c2VyIGIvc3JjL2xvZ2luL3N5c3RlbWQtdXNlcgoraW5kZXggODExMmQ3NC4uOTk2MzVhZiAxMDA2NDQKKy0tLSBhL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKKysrKyBiL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIKK0BAIC0yLDUgKzIsNSBAQAorICMKKyAjIFVzZWQgYnkgc3lzdGVtZCAtLXVzZXIgaW5zdGFuY2VzLgorIAorLWFjY291bnQgIGluY2x1ZGUgc3lzdGVtLWF1dGgKKy1zZXNzaW9uICBpbmNsdWRlIHN5c3RlbS1hdXRoCisrYWNjb3VudCAgaW5jbHVkZSBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gIGluY2x1ZGUgY29tbW9uLXNlc3Npb24KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjQ1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA1ZjhiOWYyZDI3NmMwZGRiY2JmNTQyMzczM2EyM2YwNDNkNjg4MDA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNSBTZXAgMjAxNSAwNjozMTo0NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBpbXBsbWVudCBzeXN0ZW1kLXN5c3YtaW5zdGFsbCBmb3IgT0UKKworVXNlIHVwZGF0ZS1yYy5kIGZvciBlbmFibGluZy9kaXNhYmxpbmcgYW5kIHN0YXR1cyBjb21tYW5kCit0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzeXN2IHNlcnZpY2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04gfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9zeXN0ZW1jdGwvc3lzdGVtZC1zeXN2LWluc3RhbGwuU0tFTEVUT04KKysrKyBnaXQvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorQEAgLTMwLDE3ICszMCwxNyBAQCBjYXNlICIkMSIgaW4KKyAgICAgZW5hYmxlKQorICAgICAgICAgIyBjYWxsIHRoZSBjb21tYW5kIHRvIGVuYWJsZSBTeXNWIGluaXQgc2NyaXB0ICROQU1FIGhlcmUKKyAgICAgICAgICMgKGNvbnNpZGVyIG9wdGlvbmFsICRST09UKQorLSAgICAgICAgZWNobyAiSU1QTEVNRU5UIE1FOiBlbmFibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSBkZWZhdWx0cworICAgICAgICAgOzsKKyAgICAgZGlzYWJsZSkKKyAgICAgICAgICMgY2FsbCB0aGUgY29tbWFuZCB0byBkaXNhYmxlIFN5c1YgaW5pdCBzY3JpcHQgJE5BTUUgaGVyZQorICAgICAgICAgIyAoY29uc2lkZXIgb3B0aW9uYWwgJFJPT1QpCistICAgICAgICBlY2hvICJJTVBMRU1FTlQgTUU6IGRpc2FibGluZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICB1cGRhdGUtcmMuZCAtZiAkTkFNRSByZW1vdmUKKyAgICAgICAgIDs7CisgICAgIGlzLWVuYWJsZWQpCisgICAgICAgICAjIGV4aXQgd2l0aCAwIGlmICROQU1FIGlzIGVuYWJsZWQsIG5vbi16ZXJvIGlmIGl0IGlzIGRpc2FibGVkCisgICAgICAgICAjIChjb25zaWRlciBvcHRpb25hbCAkUk9PVCkKKy0gICAgICAgIGVjaG8gIklNUExFTUVOVCBNRTogY2hlY2tpbmcgU3lzViBpbml0LmQgc2NyaXB0ICROQU1FIgorKyAgICAgICAgL2V0Yy9pbml0LmQvJE5BTUUgc3RhdHVzCisgICAgICAgICA7OworICAgICAqKQorICAgICAgICAgdXNhZ2UgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJiYTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNGYwYTcyMjQ4OTE1NGRhOTllN2Y2YjMwNTFhZmRlOTg0ZWVkMmY3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTU6MDE6MjkgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJydWxlczogcmVtb3ZlIGZpcm13YXJlIGxvYWRpbmcgcnVsZXMiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgNzBlN2Q3NTRkZGIzNTZmYjFhMjk0MmIyNjJmOGNlZTk2NTBlMmExOS4KK1VzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBMaW51eCA8IDMuNy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKKworZGlmZiAtLWdpdCBhL3J1bGVzLzUwLWZpcm13YXJlLnJ1bGVzIGIvcnVsZXMvNTAtZmlybXdhcmUucnVsZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMGFlNjg0CistLS0gL2Rldi9udWxsCisrKysgYi9ydWxlcy81MC1maXJtd2FyZS5ydWxlcworQEAgLTAsMCArMSwzIEBACisrIyBkbyBub3QgZWRpdCB0aGlzIGZpbGUsIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gb24gdXBkYXRlCisrCisrU1VCU1lTVEVNPT0iZmlybXdhcmUiLCBBQ1RJT049PSJhZGQiLCBSVU57YnVpbHRpbn09ImZpcm13YXJlIgorLS0gCisyLjMuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA4Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaApAQCAtMCwwICsxLDM2NCBAQAorRnJvbSA3ZjA3NGRlZjRlMzIwNDUzNTNiYTQzMzZkNzAzZTE3YjhkZTdlYzRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNTowMTozMyArMTEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInVkZXY6IHJlbW92ZSB1c2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IgorCitUaGlzIHJldmVydHMgY29tbWl0IGJlMmVhNzIzYjFkMDIzYjNkMzg1ZDNiNzkxZWU0NjA3Y2JmYjIwY2EuCitVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgTGludXggPCAzLjcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsrKworIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsrLQorIFRPRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICB8ICAyMCArKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIHwgMTU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi5jICAgICAgICAgIHwgICAzICsKKyBzcmMvdWRldi91ZGV2LmggICAgICAgICAgICAgICAgICB8ICAgNiArKworIHNyYy91ZGV2L3VkZXZkLmMgICAgICAgICAgICAgICAgIHwgIDEzICsrKysKKyA4IGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC0zNDcwLDYgKzM0NzAsMTggQEAgbGlidWRldl9jb3JlX2xhX0xJQkFERCA9IFwKKyAJJChCTEtJRF9MSUJTKSBcCisgCSQoS01PRF9MSUJTKQorIAorK2xpYnVkZXZfY29yZV9sYV9DUFBGTEFHUyA9IFwKKysJJChBTV9DUFBGTEFHUykgXAorKwktREZJUk1XQVJFX1BBVEg9IiQoRklSTVdBUkVfUEFUSCkiCisrCisraWYgRU5BQkxFX0ZJUk1XQVJFCisrbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorKwlzcmMvdWRldi91ZGV2LWJ1aWx0aW4tZmlybXdhcmUuYworKworK2Rpc3RfdWRldnJ1bGVzX0RBVEEgKz0gXAorKwlydWxlcy81MC1maXJtd2FyZS5ydWxlcworK2VuZGlmCisrCisgaWYgSEFWRV9LTU9ECisgbGlidWRldl9jb3JlX2xhX1NPVVJDRVMgKz0gXAorIAlzcmMvdWRldi91ZGV2LWJ1aWx0aW4ta21vZC5jCitJbmRleDogZ2l0L1JFQURNRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL1JFQURNRQorKysrIGdpdC9SRUFETUUKK0BAIC0zNiw3ICszNiw4IEBAIExJQ0VOU0U6CisgICAgICAgICAtIGV4Y2VwdCBzcmMvdWRldi8qIHdoaWNoIGlzIChjdXJyZW50bHkgc3RpbGwpIEdQTHYyLCBHUEx2MisKKyAKKyBSRVFVSVJFTUVOVFM6CistICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy43CisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4wCisrICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy4zIGZvciBsb29wIGRldmljZSBwYXJ0aXRpb24gc3VwcG9ydCBmZWF0dXJlcyB3aXRoIG5zcGF3bgorICAgICAgICAgTGludXgga2VybmVsID49IDMuOCBmb3IgU21hY2sgc3VwcG9ydAorIAorICAgICAgICAgS2VybmVsIENvbmZpZyBPcHRpb25zOgorQEAgLTUxLDE0ICs1MiwxNCBAQCBSRVFVSVJFTUVOVFM6CisgICAgICAgICAgIENPTkZJR19QUk9DX0ZTCisgICAgICAgICAgIENPTkZJR19GSEFORExFIChsaWJ1ZGV2LCBtb3VudCBhbmQgYmluZCBtb3VudCBoYW5kbGluZykKKyAKKy0gICAgICAgIHVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IHN5c2ZzIGxheW91dDoKKysgICAgICAgIFVkZXYgd2lsbCBmYWlsIHRvIHdvcmsgd2l0aCB0aGUgbGVnYWN5IGxheW91dDoKKyAgICAgICAgICAgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9bgorIAorICAgICAgICAgTGVnYWN5IGhvdHBsdWcgc2xvd3MgZG93biB0aGUgc3lzdGVtIGFuZCBjb25mdXNlcyB1ZGV2OgorICAgICAgICAgICBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCisgCistICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBzaG91bGQKKy0gICAgICAgIGJlIGRpc2FibGVkIGluIHRoZSBrZXJuZWw6CisrICAgICAgICBVc2Vyc3BhY2UgZmlybXdhcmUgbG9hZGluZyBpcyBkZXByZWNhdGVkLCB3aWxsIGdvIGF3YXksIGFuZAorKyAgICAgICAgc29tZXRpbWVzIGNhdXNlcyBwcm9ibGVtczoKKyAgICAgICAgICAgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj1uCisgCisgICAgICAgICBTb21lIHVkZXYgcnVsZXMgYW5kIHZpcnR1YWxpemF0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gaXQ6CitJbmRleDogZ2l0L1RPRE8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9UT0RPCisrKysgZ2l0L1RPRE8KK0BAIC03NTQsNiArNzU0LDcgQEAgRmVhdHVyZXM6CisgKiBFeGVjT25GYWlsdXJlPS91c3IvYmluL2ZvbworIAorICogdWRldjoKKysgIC0gcmVtb3ZlIHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jIChDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPW4pCisgICAtIG1vdmUgdG8gTEdQTAorICAgLSBraWxsIHNjc2lfaWQKKyAgIC0gYWRkIHRyaWdnZXIgLS1zdWJzeXN0ZW0tbWF0Y2g9dXNiL3VzYl9kZXZpY2UgZGV2aWNlCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMjY4LDYgKzEyNjgsMjYgQEAgZmkKKyBBTV9DT05ESVRJT05BTChIQVZFX01ZSE9TVE5BTUUsIFt0ZXN0ICIkaGF2ZV9teWhvc3RuYW1lIiA9ICJ5ZXMiXSkKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK0FDX0FSR19XSVRIKGZpcm13YXJlLXBhdGgsCisrICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZmlybXdhcmUtcGF0aD1ESVJbW1s6RElSWy4uLl1dXV1dLAorKyAgICAgICAgICBbRmlybXdhcmUgc2VhcmNoIHBhdGggKGRlZmF1bHQ9IiIpXSksCisrICAgICAgIFtdLCBbd2l0aF9maXJtd2FyZV9wYXRoPSIiXSkKKytPTERfSUZTPSRJRlMKKytJRlM9OgorK2ZvciBpIGluICR3aXRoX2Zpcm13YXJlX3BhdGg7IGRvCisrICAgICAgIGlmIHRlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiA9ICJ4IjsgdGhlbgorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgRklSTVdBUkVfUEFUSD0iJHtGSVJNV0FSRV9QQVRIfSwgXFxcIiR7aX0vXFxcIiIKKysgICAgICAgZmkKKytkb25lCisrSUZTPSRPTERfSUZTCisrQUNfU1VCU1QoRklSTVdBUkVfUEFUSCkKKytBU19JRihbdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iICE9ICJ4Il0sIFsgQUNfREVGSU5FKEhBVkVfRklSTVdBUkUsIDEsIFtEZWZpbmUgaWYgRklSTVdBUkUgaXMgYXZhaWxhYmxlXSkgXSkKKytBTV9DT05ESVRJT05BTChFTkFCTEVfRklSTVdBUkUsIFt0ZXN0ICJ4JHtGSVJNV0FSRV9QQVRIfSIgIT0gIngiXSkKKysKKysKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFDX0FSR19FTkFCTEUoaHdkYiwgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtaHdkYl0sIFtkaXNhYmxlIGhhcmR3YXJlIGRhdGFiYXNlIHN1cHBvcnRdKV0sCisgICAgICAgIGVuYWJsZV9od2RiPSRlbmFibGV2YWwsIGVuYWJsZV9od2RiPXllcykKKyBBTV9DT05ESVRJT05BTChFTkFCTEVfSFdEQiwgW3Rlc3QgeCRlbmFibGVfaHdkYiA9IHh5ZXNdKQorQEAgLTE1NzQsNiArMTU5NCw3IEBAIEFDX01TR19SRVNVTFQoWworICAgICAgICAgU3lzViByYz8uZCBkaXJlY3RvcmllczogICR7U1lTVEVNX1NZU1ZSQ05EX1BBVEh9CisgICAgICAgICBCdWlsZCBQeXRob246ICAgICAgICAgICAgJHtQWVRIT059CisgICAgICAgICBzcGhpbnggYmluYXJ5OiAgICAgICAgICAgJHtTUEhJTlhfQlVJTER9CisrICAgICAgICBmaXJtd2FyZSBwYXRoOiAgICAgICAgICAgJHtGSVJNV0FSRV9QQVRIfQorICAgICAgICAgUEFNIG1vZHVsZXMgZGlyOiAgICAgICAgICR7d2l0aF9wYW1saWJkaXJ9CisgICAgICAgICBQQU0gY29uZmlndXJhdGlvbiBkaXI6ICAgJHt3aXRoX3BhbWNvbmZkaXJ9CisgICAgICAgICBELUJ1cyBwb2xpY3kgZGlyOiAgICAgICAgJHt3aXRoX2RidXNwb2xpY3lkaXJ9CitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCitAQCAtMCwwICsxLDE1NCBAQAorKy8qCisrICogZmlybXdhcmUgLSBLZXJuZWwgZmlybXdhcmUgbG9hZGVyCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGl0ZXIgUHVuayA8cGl0ZXJwdW5rQHNsYWNrd2FyZS5jb20+CisrICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgS2F5IFNpZXZlcnMgPGtheUB2cmZ5Lm9yZz4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzOioKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKysjaW5jbHVkZSAidWRldi5oIgorKworK3N0YXRpYyBib29sIHNldF9sb2FkaW5nKHN0cnVjdCB1ZGV2ICp1ZGV2LCBjaGFyICpsb2FkcGF0aCwgY29uc3QgY2hhciAqc3RhdGUpIHsKKysgICAgICAgIEZJTEUgKmxkZmlsZTsKKysKKysgICAgICAgIGxkZmlsZSA9IGZvcGVuKGxvYWRwYXRoLCAid2UiKTsKKysgICAgICAgIGlmIChsZGZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImVycm9yOiBjYW4gbm90IG9wZW4gJyVzJyIsIGxvYWRwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfTsKKysgICAgICAgIGZwcmludGYobGRmaWxlLCAiJXNcbiIsIHN0YXRlKTsKKysgICAgICAgIGZjbG9zZShsZGZpbGUpOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyBib29sIGNvcHlfZmlybXdhcmUoc3RydWN0IHVkZXYgKnVkZXYsIGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBzaXplX3Qgc2l6ZSkgeworKyAgICAgICAgY2hhciAqYnVmOworKyAgICAgICAgRklMRSAqZnNvdXJjZSA9IE5VTEwsICpmdGFyZ2V0ID0gTlVMTDsKKysgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7CisrCisrICAgICAgICBidWYgPSBtYWxsb2Moc2l6ZSk7CisrICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJObyBtZW1vcnkgYXZhaWxhYmxlIHRvIGxvYWQgZmlybXdhcmUgZmlsZSIpOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBsb2dfZGVidWcoIndyaXRpbmcgJyVzJyAoJXppKSB0byAnJXMnIiwgc291cmNlLCBzaXplLCB0YXJnZXQpOworKworKyAgICAgICAgZnNvdXJjZSA9IGZvcGVuKHNvdXJjZSwgInJlIik7CisrICAgICAgICBpZiAoZnNvdXJjZSA9PSBOVUxMKQorKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICBmdGFyZ2V0ID0gZm9wZW4odGFyZ2V0LCAid2UiKTsKKysgICAgICAgIGlmIChmdGFyZ2V0ID09IE5VTEwpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmcmVhZChidWYsIHNpemUsIDEsIGZzb3VyY2UpICE9IDEpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGlmIChmd3JpdGUoYnVmLCBzaXplLCAxLCBmdGFyZ2V0KSA9PSAxKQorKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworK2V4aXQ6CisrICAgICAgICBpZiAoZnRhcmdldCAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnRhcmdldCk7CisrICAgICAgICBpZiAoZnNvdXJjZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZnNvdXJjZSk7CisrICAgICAgICBmcmVlKGJ1Zik7CisrICAgICAgICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IGJ1aWx0aW5fZmlybXdhcmUoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIGludCBhcmdjLCBjaGFyICphcmd2W10sIGJvb2wgdGVzdCkgeworKyAgICAgICAgc3RydWN0IHVkZXYgKnVkZXYgPSB1ZGV2X2RldmljZV9nZXRfdWRldihkZXYpOworKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKnNlYXJjaHBhdGhbXSA9IHsgRklSTVdBUkVfUEFUSCB9OworKyAgICAgICAgY2hhciBsb2FkcGF0aFtVVElMX1BBVEhfU0laRV07CisrICAgICAgICBjaGFyIGRhdGFwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNoYXIgZndwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNvbnN0IGNoYXIgKmZpcm13YXJlOworKyAgICAgICAgRklMRSAqZndmaWxlID0gTlVMTDsKKysgICAgICAgIHN0cnVjdCB1dHNuYW1lIGtlcm5lbDsKKysgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisrICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKysgICAgICAgIGludCByYyA9IEVYSVRfU1VDQ0VTUzsKKysKKysgICAgICAgIGZpcm13YXJlID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5X3ZhbHVlKGRldiwgIkZJUk1XQVJFIik7CisrICAgICAgICBpZiAoZmlybXdhcmUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoImZpcm13YXJlIHBhcmFtZXRlciBtaXNzaW5nIik7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBsb29rdXAgZmlybXdhcmUgZmlsZSAqLworKyAgICAgICAgdW5hbWUoJmtlcm5lbCk7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUVOVFNPRihzZWFyY2hwYXRoKTsgaSsrKSB7CisrICAgICAgICAgICAgICAgIHN0cnNjcHlsKGZ3cGF0aCwgc2l6ZW9mKGZ3cGF0aCksIHNlYXJjaHBhdGhbaV0sIGtlcm5lbC5yZWxlYXNlLCAiLyIsIGZpcm13YXJlLCBOVUxMKTsKKysgICAgICAgICAgICAgICAgZndmaWxlID0gZm9wZW4oZndwYXRoLCAicmUiKTsKKysgICAgICAgICAgICAgICAgaWYgKGZ3ZmlsZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICBzdHJzY3B5bChmd3BhdGgsIHNpemVvZihmd3BhdGgpLCBzZWFyY2hwYXRoW2ldLCBmaXJtd2FyZSwgTlVMTCk7CisrICAgICAgICAgICAgICAgIGZ3ZmlsZSA9IGZvcGVuKGZ3cGF0aCwgInJlIik7CisrICAgICAgICAgICAgICAgIGlmIChmd2ZpbGUgIT0gTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0cnNjcHlsKGxvYWRwYXRoLCBzaXplb2YobG9hZHBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2xvYWRpbmciLCBOVUxMKTsKKysKKysgICAgICAgIGlmIChmd2ZpbGUgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZGVidWcoImRpZCBub3QgZmluZCBmaXJtd2FyZSBmaWxlICclcyciLCBmaXJtd2FyZSk7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgKiBEbyBub3QgY2FuY2VsIHRoZSByZXF1ZXN0IGluIHRoZSBpbml0cmQsIHRoZSByZWFsIHJvb3QgbWlnaHQgaGF2ZQorKyAgICAgICAgICAgICAgICAgKiB0aGUgZmlybXdhcmUgZmlsZSBhbmQgdGhlICdjb2xkcGx1ZycgcnVuIGluIHRoZSByZWFsIHJvb3Qgd2lsbCBmaW5kCisrICAgICAgICAgICAgICAgICAqIHRoaXMgcGVuZGluZyByZXF1ZXN0IGFuZCBmdWxmaWxsIG9yIGNhbmNlbCBpdC4KKysgICAgICAgICAgICAgICAgICogKi8KKysgICAgICAgICAgICAgICAgaWYgKCFpbl9pbml0cmQoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIi0xIik7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChzdGF0KGZ3cGF0aCwgJnN0YXRidWYpIDwgMCB8fCBzdGF0YnVmLnN0X3NpemUgPT0gMCkgeworKyAgICAgICAgICAgICAgICBpZiAoIWluX2luaXRyZCgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiLTEiKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICIxIikpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysKKysgICAgICAgIHN0cnNjcHlsKGRhdGFwYXRoLCBzaXplb2YoZGF0YXBhdGgpLCB1ZGV2X2RldmljZV9nZXRfc3lzcGF0aChkZXYpLCAiL2RhdGEiLCBOVUxMKTsKKysgICAgICAgIGlmICghY29weV9maXJtd2FyZSh1ZGV2LCBmd3BhdGgsIGRhdGFwYXRoLCBzdGF0YnVmLnN0X3NpemUpKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiZXJyb3Igc2VuZGluZyBmaXJtd2FyZSAnJXMnIHRvIGRldmljZSIsIGZpcm13YXJlKTsKKysgICAgICAgICAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICItMSIpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfTsKKysKKysgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiMCIpOworK2V4aXQ6CisrICAgICAgICBpZiAoZndmaWxlKQorKyAgICAgICAgICAgICAgICBmY2xvc2UoZndmaWxlKTsKKysgICAgICAgIHJldHVybiByYzsKKyt9CisrCisrY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmUgPSB7CisrICAgICAgICAubmFtZSA9ICJmaXJtd2FyZSIsCisrICAgICAgICAuY21kID0gYnVpbHRpbl9maXJtd2FyZSwKKysgICAgICAgIC5oZWxwID0gImtlcm5lbCBmaXJtd2FyZSBsb2FkZXIiLAorKyAgICAgICAgLnJ1bl9vbmNlID0gdHJ1ZSwKKyt9OworSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2LWJ1aWx0aW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCitAQCAtMzAsNiArMzAsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiAqYnVpbHRpCisgICAgICAgICBbVURFVl9CVUlMVElOX0JMS0lEXSA9ICZ1ZGV2X2J1aWx0aW5fYmxraWQsCisgI2VuZGlmCisgICAgICAgICBbVURFVl9CVUlMVElOX0JUUkZTXSA9ICZ1ZGV2X2J1aWx0aW5fYnRyZnMsCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIFtVREVWX0JVSUxUSU5fRklSTVdBUkVdID0gJnVkZXZfYnVpbHRpbl9maXJtd2FyZSwKKysjZW5kaWYKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fSFdEQl0gPSAmdWRldl9idWlsdGluX2h3ZGIsCisgICAgICAgICBbVURFVl9CVUlMVElOX0lOUFVUX0lEXSA9ICZ1ZGV2X2J1aWx0aW5faW5wdXRfaWQsCisgICAgICAgICBbVURFVl9CVUlMVElOX0tFWUJPQVJEXSA9ICZ1ZGV2X2J1aWx0aW5fa2V5Ym9hcmQsCitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXYuaAorKysrIGdpdC9zcmMvdWRldi91ZGV2LmgKK0BAIC0xNDYsNiArMTQ2LDkgQEAgZW51bSB1ZGV2X2J1aWx0aW5fY21kIHsKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CTEtJRCwKKyAjZW5kaWYKKyAgICAgICAgIFVERVZfQlVJTFRJTl9CVFJGUywKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgVURFVl9CVUlMVElOX0ZJUk1XQVJFLAorKyNlbmRpZgorICAgICAgICAgVURFVl9CVUlMVElOX0hXREIsCisgICAgICAgICBVREVWX0JVSUxUSU5fSU5QVVRfSUQsCisgICAgICAgICBVREVWX0JVSUxUSU5fS0VZQk9BUkQsCitAQCAtMTc0LDYgKzE3Nyw5IEBAIHN0cnVjdCB1ZGV2X2J1aWx0aW4geworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9ibGtpZDsKKyAjZW5kaWYKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fYnRyZnM7CisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKytleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5fZmlybXdhcmU7CisrI2VuZGlmCisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2h3ZGI7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2lucHV0X2lkOworIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9rZXlib2FyZDsKK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy91ZGV2L3VkZXZkLmMKKysrKyBnaXQvc3JjL3VkZXYvdWRldmQuYworQEAgLTExNiw2ICsxMTYsOSBAQCBzdHJ1Y3QgZXZlbnQgeworICAgICAgICAgYm9vbCBpc19ibG9jazsKKyAgICAgICAgIHNkX2V2ZW50X3NvdXJjZSAqdGltZW91dF93YXJuaW5nOworICAgICAgICAgc2RfZXZlbnRfc291cmNlICp0aW1lb3V0OworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBib29sIG5vZGVsYXk7CisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqbm9kZV90b19ldmVudChzdHJ1Y3QgdWRldl9saXN0X25vZGUgKm5vZGUpIHsKK0BAIC02MDcsNiArNjEwLDEwIEBAIHN0YXRpYyBpbnQgZXZlbnRfcXVldWVfaW5zZXJ0KE1hbmFnZXIgKm0KKyAgICAgICAgIGV2ZW50LT5kZXZudW0gPSB1ZGV2X2RldmljZV9nZXRfZGV2bnVtKGRldik7CisgICAgICAgICBldmVudC0+aXNfYmxvY2sgPSBzdHJlcSgiYmxvY2siLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworICAgICAgICAgZXZlbnQtPmlmaW5kZXggPSB1ZGV2X2RldmljZV9nZXRfaWZpbmRleChkZXYpOworKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBpZiAoc3RyZXEodWRldl9kZXZpY2VfZ2V0X3N1YnN5c3RlbShkZXYpLCAiZmlybXdhcmUiKSkKKysgICAgICAgICAgICAgICAgZXZlbnQtPm5vZGVsYXkgPSB0cnVlOworKyNlbmRpZgorIAorICAgICAgICAgbG9nX2RlYnVnKCJzZXEgJWxsdSBxdWV1ZWQsICclcycgJyVzJyIsIHVkZXZfZGV2aWNlX2dldF9zZXFudW0oZGV2KSwKKyAgICAgICAgICAgICAgdWRldl9kZXZpY2VfZ2V0X2FjdGlvbihkZXYpLCB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOworQEAgLTY5Miw2ICs2OTksMTIgQEAgc3RhdGljIGJvb2wgaXNfZGV2cGF0aF9idXN5KE1hbmFnZXIgKm1hbgorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICB9CisgCisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgICAgICAgICAgLyogYWxsb3cgdG8gYnlwYXNzIHRoZSBkZXBlbmRlbmN5IHRyYWNraW5nICovCisrICAgICAgICAgICAgICAgIGlmIChldmVudC0+bm9kZWxheSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysjZW5kaWYKKysKKyAgICAgICAgICAgICAgICAgLyogcGFyZW50IGRldmljZSBldmVudCBmb3VuZCAqLworICAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPmRldnBhdGhbY29tbW9uXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC0+ZGVsYXlpbmdfc2VxbnVtID0gbG9vcF9ldmVudC0+c2VxbnVtOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTUyYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL2luaXQKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9zaAorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydCB1ZGV2ZCwgcG9wdWxhdGUgL2RldiBhbmQgbG9hZCBkcml2ZXJzLgorIyMjIEVORCBJTklUIElORk8KKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorWyAtciAvcHJvYy9tb3VudHMgXSB8fCBleGl0IDEKK1sgLXggQFVERVZEQCBdIHx8IGV4aXQgMQorWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKK1sgLWYgL2V0Yy91ZGV2L3VkZXYuY29uZiBdICYmIC4gL2V0Yy91ZGV2L3VkZXYuY29uZgorCityZWFkZmlsZSAoKSB7CisgICBmaWxlbmFtZT0kMQorICAgUkVBRERBVEE9IiIKKyAgIGlmIFsgLXIgJGZpbGVuYW1lIF07IHRoZW4KKyAgICAgICB3aGlsZSByZWFkIGxpbmU7IGRvCisgICAgICAgICAgIFJFQUREQVRBPSIkUkVBRERBVEEkbGluZSIKKyAgICAgICBkb25lIDwgJGZpbGVuYW1lCisgICBmaQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIG1vdW50IHRoZSBkZXZ0bXBmcyBvbiAvZGV2LCBpZiBub3QgYWxyZWFkeSBkb25lCisgICAgTEFORz1DIGF3ayAnJDIgPT0gIi9kZXYiICYmICgkMyA9PSAiZGV2dG1wZnMiKSB7IGV4aXQgMSB9JyAvcHJvYy9tb3VudHMgJiYgeworICAgICAgICAgICAgbW91bnQgLW4gLW8gbW9kZT0wNzU1IC10IGRldnRtcGZzIG5vbmUgIi9kZXYiCisgICAgfQorICAgIFsgLWUgL2Rldi9wdHMgXSB8fCBta2RpciAtbSAwNzU1IC9kZXYvcHRzCisgICAgWyAtZSAvZGV2L3NobSBdIHx8IG1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKyAgICBtb3VudCAtYSAtdCB0bXBmcyAyPi9kZXYvbnVsbAorCisgICAgIyBjYWNoZSBoYW5kbGluZworICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvdmVyc2lvbgorICAgICAgICAgICAgVkVSU0lPTj0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvY21kbGluZQorICAgICAgICAgICAgQ01ETElORT0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvZGV2aWNlcworICAgICAgICAgICAgREVWSUNFUz0iJFJFQUREQVRBIgorICAgICAgICAgICAgcmVhZGZpbGUgL3Byb2MvYXRhZ3MKKyAgICAgICAgICAgIEFUQUdTPSIkUkVBRERBVEEiCisKKyAgICAgICAgICAgIGlmIFsgLWUgJERFVkNBQ0hFIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZGZpbGUgL2V0Yy91ZGV2L2NhY2hlLmRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiJFJFQUREQVRBIiA9ICIkVkVSU0lPTiRDTURMSU5FJERFVklDRVMkQVRBR1MiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2QgLzsgdGFyIHhmICRERVZDQUNIRSA+IC9kZXYvbnVsbCAyPiYxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF9maXJzdF9ib290PTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXY6IHVzaW5nIGNhY2hlIGZpbGUgJERFVkNBQ0hFIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgL2Rldi9zaG0vdWRldi5jYWNoZSBdICYmIHJtIC1mIC9kZXYvc2htL3VkZXYuY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgPiAvZGV2L3NobS91ZGV2LmNhY2hlCisgICAgICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIG1ha2VfZXh0cmFfbm9kZXMKKyAgICBraWxscHJvYyBzeXN0ZW1kLXVkZXZkID4gIi9kZXYvbnVsbCIgMj4mMQorCisgICAgIyB0cmlnZ2VyIHRoZSBzb3J0ZWQgZXZlbnRzCisgICAgZWNobyAtZSAnXDAwMFwwMDBcMDAwXDAwMCcgPiAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKyAgICBAVURFVkRAIC1kCisKKyAgICB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0xCisgICAgaWYgWyAiJG5vdF9maXJzdF9ib290IiAhPSAiIiBdO3RoZW4KKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQgLS1zdWJzeXN0ZW0tbm9tYXRjaD10dHkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1tZW0gLS1zdWJzeXN0ZW0tbm9tYXRjaD12YyAtLXN1YnN5c3RlbS1ub21hdGNoPXZ0Y29uc29sZSAtLXN1YnN5c3RlbS1ub21hdGNoPW1pc2MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1kY29uIC0tc3Vic3lzdGVtLW5vbWF0Y2g9cGNpX2J1cyAgLS1zdWJzeXN0ZW0tbm9tYXRjaD1ncmFwaGljcwkgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eAktLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtCisgICAgICAgICAgICAodWRldmFkbSBzZXR0bGUgLS10aW1lb3V0PTM7IHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPSkmCisgICAgZWxzZQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorICAgICAgICAgICAgdWRldmFkbSBzZXR0bGUKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAiU3RvcHBpbmcgdWRldmQiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBzeXN0ZW1kLXVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIHN5c3RlbWQtdWRldmQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9xZW11YWxsX2lvX2xhdGVuY3ktY29yZS1kZXZpY2UuYy1DaGFuZ2UtdGhlLWRlZmF1bHQtZGV2aWNlLXRpbWVvdXQtdG8tMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UxNzExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU3BlY2lmaWMgY2FzZSBRRU1VL0FCXQorCitGcm9tIDdiOGM0ZTBhNjdhNzlhNzVlMWJkNzdkZjNhNDUyYTU0OTczMjIxMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI3IEF1ZyAyMDE1IDE3OjU4OjI2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvcmUvZGV2aWNlLmM6IENoYW5nZSB0aGUgZGVmYXVsdCBkZXZpY2UgdGltZW91dCB0byAyNDAgc2VjLgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHNyYy9jb3JlL2RldmljZS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvZGV2aWNlLmMgYi9zcmMvY29yZS9kZXZpY2UuYworaW5kZXggZTdlZmNmMC4uNGVkOGYwOCAxMDA2NDQKKy0tLSBhL3NyYy9jb3JlL2RldmljZS5jCisrKysgYi9zcmMvY29yZS9kZXZpY2UuYworQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfaW5pdChVbml0ICp1KSB7CisgICAgICAgICAgKiBpbmRlZmluaXRlbHkgZm9yIHBsdWdnZWQgaW4gZGV2aWNlcywgc29tZXRoaW5nIHdoaWNoIGNhbm5vdAorICAgICAgICAgICogaGFwcGVuIGZvciB0aGUgb3RoZXIgdW5pdHMgc2luY2UgdGhlaXIgb3BlcmF0aW9ucyB0aW1lIG91dAorICAgICAgICAgICogYW55d2F5LiAqLworLSAgICAgICAgdS0+am9iX3RpbWVvdXQgPSB1LT5tYW5hZ2VyLT5kZWZhdWx0X3RpbWVvdXRfc3RhcnRfdXNlYzsKKysgICAgICAgIHUtPmpvYl90aW1lb3V0ID0gKDI0MCAqIFVTRUNfUEVSX1NFQyk7CisgCisgICAgICAgICB1LT5pZ25vcmVfb25faXNvbGF0ZSA9IHRydWU7CisgICAgICAgICB1LT5pZ25vcmVfb25fc25hcHNob3QgPSB0cnVlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQ2MWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCit0YXIgLUMgdGVzdCAteEpmIHRlc3Qvc3lzLnRhci54egorbWFrZSB0ZXN0L3J1bGVzLXRlc3Quc2gubG9nCittYWtlIHRlc3QvdWRldi10ZXN0LnBsLmxvZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3RvdWNoc2NyZWVuLnJ1bGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3RvdWNoc2NyZWVuLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4M2ZkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMKQEAgLTAsMCArMSwxOCBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIENyZWF0ZSBhIHN5bWxpbmsgdG8gYW55IHRvdWNoc2NyZWVuIGlucHV0IGRldmljZQorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImlucHV0OiotZTAqLDMsKmEwLDEsKjE4LCoiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgorU1VCU1lTVEVNPT0iaW5wdXQiLCBLRVJORUw9PSJldmVudFswLTldKiIsIEFUVFJTe21vZGFsaWFzfT09ImFkczc4NDYiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIyNS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjOTljZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZF8yMjUuYmIKQEAgLTAsMCArMSw0MTUgQEAKK1NVTU1BUlkgPSAiQSBTeXN0ZW0gYW5kIHNlcnZpY2UgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc3lzdGVtZCIKKworREVTQ1JJUFRJT04gPSAic3lzdGVtZCBpcyBhIHN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIGZvciBMaW51eCwgY29tcGF0aWJsZSB3aXRoIFwKK1N5c1YgYW5kIExTQiBpbml0IHNjcmlwdHMuIHN5c3RlbWQgcHJvdmlkZXMgYWdncmVzc2l2ZSBwYXJhbGxlbGl6YXRpb24gXAorY2FwYWJpbGl0aWVzLCB1c2VzIHNvY2tldCBhbmQgRC1CdXMgYWN0aXZhdGlvbiBmb3Igc3RhcnRpbmcgc2VydmljZXMsIFwKK29mZmVycyBvbi1kZW1hbmQgc3RhcnRpbmcgb2YgZGFlbW9ucywga2VlcHMgdHJhY2sgb2YgcHJvY2Vzc2VzIHVzaW5nIFwKK0xpbnV4IGNncm91cHMsIHN1cHBvcnRzIHNuYXBzaG90dGluZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSBzeXN0ZW0gXAorc3RhdGUsIG1haW50YWlucyBtb3VudCBhbmQgYXV0b21vdW50IHBvaW50cyBhbmQgaW1wbGVtZW50cyBhbiBcCitlbGFib3JhdGUgdHJhbnNhY3Rpb25hbCBkZXBlbmRlbmN5LWJhc2VkIHNlcnZpY2UgY29udHJvbCBsb2dpYy4gSXQgY2FuIFwKK3dvcmsgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBzeXN2aW5pdC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuR1BMMjttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5MR1BMMi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworUFJPVklERVMgPSAidWRldiIKKworUEUgPSAiMSIKKworREVQRU5EUyA9ICJrbW9kIGRvY2Jvb2stc2dtbC1kdGQtNC4xLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ3BlcmYtbmF0aXZlIGFjbCByZWFkbGluZSBkYnVzIGxpYmNhcCBsaWJjZ3JvdXAgZ2xpYi0yLjAgcWVtdS1uYXRpdmUgdXRpbC1saW51eCIKKworU0VDVElPTiA9ICJiYXNlL3NoZWxsIgorCitpbmhlcml0IHVzZXJhZGQgcGtnY29uZmlnIGF1dG90b29scyBwZXJsbmF0aXZlIHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcWVtdSBzeXN0ZW1kIHB0ZXN0IGdldHRleHQKKworU1JDUkVWID0gImUxNDM5YTE0NzJjNWY2OTE3MzNiOGVmMTBlNzAyYmVhYzI0OTZhNjMiCisKK1BWID0gIjIyNStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC5naXQ7cHJvdG9jb2w9Z2l0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LVJldmVydC1ydWxlcy1yZW1vdmUtZmlybXdhcmUtbG9hZGluZy1ydWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hzY3JlZW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICIKK1NSQ19VUklfYXBwZW5kX3FlbXVhbGwgPSAiZmlsZTovL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoIFwKKyAgICAgICAgICAgIgorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQiCisKK0dUS0RPQ19ET0NESVIgPSAiJHtTfS9kb2NzLyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInh6IGxkY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4a2Jjb21tb24nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2pvdXJuYWwtdXBsb2FkXSA9ICItLWVuYWJsZS1saWJjdXJsLC0tZGlzYWJsZS1saWJjdXJsLGN1cmwiCisjIFNpZ24gdGhlIGpvdXJuYWwgZm9yIGFudGktdGFtcGVyaW5nCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS1lbmFibGUtZ2NyeXB0LC0tZGlzYWJsZS1nY3J5cHQsbGliZ2NyeXB0IgorIyByZWdhcmRsZXNzIG9mIFBBQ0tBR0VDT05GSUcsIGxpYmdjcnlwdCBpcyBhbHdheXMgcmVxdWlyZWQgdG8gZXhwYW5kCisjIHRoZSBBTV9QQVRIX0xJQkdDUllQVCBhdXRvY29uZiBtYWNybworREVQRU5EUyArPSAibGliZ2NyeXB0IgorIyBDb21wcmVzcyB0aGUgam91cm5hbAorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS1lbmFibGUteHosLS1kaXNhYmxlLXh6LHh6IgorUEFDS0FHRUNPTkZJR1tjcnlwdHNldHVwXSA9ICItLWVuYWJsZS1saWJjcnlwdHNldHVwLC0tZGlzYWJsZS1saWJjcnlwdHNldHVwLGNyeXB0c2V0dXAiCitQQUNLQUdFQ09ORklHW21pY3JvaHR0cGRdID0gIi0tZW5hYmxlLW1pY3JvaHR0cGQsLS1kaXNhYmxlLW1pY3JvaHR0cGQsbGlibWljcm9odHRwZCIKK1BBQ0tBR0VDT05GSUdbZWxmdXRpbHNdID0gIi0tZW5hYmxlLWVsZnV0aWxzLC0tZGlzYWJsZS1lbGZ1dGlscyxlbGZ1dGlscyIKK1BBQ0tBR0VDT05GSUdbcmVzb2x2ZWRdID0gIi0tZW5hYmxlLXJlc29sdmVkLC0tZGlzYWJsZS1yZXNvbHZlZCIKK1BBQ0tBR0VDT05GSUdbbmV0d29ya2RdID0gIi0tZW5hYmxlLW5ldHdvcmtkLC0tZGlzYWJsZS1uZXR3b3JrZCIKK1BBQ0tBR0VDT05GSUdbbGliaWRuXSA9ICItLWVuYWJsZS1saWJpZG4sLS1kaXNhYmxlLWxpYmlkbixsaWJpZG4iCitQQUNLQUdFQ09ORklHW2F1ZGl0XSA9ICItLWVuYWJsZS1hdWRpdCwtLWRpc2FibGUtYXVkaXQsYXVkaXQiCitQQUNLQUdFQ09ORklHW21hbnBhZ2VzXSA9ICItLWVuYWJsZS1tYW5wYWdlcywtLWRpc2FibGUtbWFucGFnZXMsbGlieHNsdC1uYXRpdmUgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLWVuYWJsZS1wYW0sLS1kaXNhYmxlLXBhbSxsaWJwYW0iCisjIFZlcmlmeSBrZXltYXBzIG9uIGxvY2FsZSBjaGFuZ2UKK1BBQ0tBR0VDT05GSUdbeGtiY29tbW9uXSA9ICItLWVuYWJsZS14a2Jjb21tb24sLS1kaXNhYmxlLXhrYmNvbW1vbixsaWJ4a2Jjb21tb24iCisjIFVwZGF0ZSBOQVQgZmlyZXdhbGwgcnVsZXMKK1BBQ0tBR0VDT05GSUdbaXB0Y10gPSAiLS1lbmFibGUtbGliaXB0YywtLWRpc2FibGUtbGliaXB0YyxpcHRhYmxlcyIKK1BBQ0tBR0VDT05GSUdbbGRjb25maWddID0gIi0tZW5hYmxlLWxkY29uZmlnLC0tZGlzYWJsZS1sZGNvbmZpZywsIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICItLWVuYWJsZS1zZWxpbnV4LC0tZGlzYWJsZS1zZWxpbnV4LGxpYnNlbGludXgiCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD15ZXMgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX3ZhbGdyaW5kX2g9eWVzICxhY19jdl9oZWFkZXJfdmFsZ3JpbmRfbWVtY2hlY2tfaD1ubyBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD1ubyAsdmFsZ3JpbmQiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tJTEw9JHtiYXNlX2JpbmRpcn0va2lsbCIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0tNT0Q9JHtiYXNlX2JpbmRpcn0va21vZCIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1FVT1RBQ0hFQ0s9JHtzYmluZGlyfS9xdW90YWNoZWNrIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUVVPVEFPTj0ke3NiaW5kaXJ9L3F1b3Rhb24iCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9TVUxPR0lOPSR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCisjIEhlbHBlciB2YXJpYWJsZXMgdG8gY2xhcmlmeSBsb2NhdGlvbnMuICBUaGlzIG1pcnJvcnMgdGhlIGxvZ2ljIGluIHN5c3RlbWQncworIyBidWlsZCBzeXN0ZW0uCityb290cHJlZml4ID89ICIke2Jhc2VfcHJlZml4fSIKK3Jvb3RsaWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9Igorcm9vdGxpYmV4ZWNkaXIgPSAiJHtyb290cHJlZml4fS9saWIiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9NT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L21vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1VNT1VOVF9QQVRIPSR7YmFzZV9iaW5kaXJ9L3Vtb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9LTU9EPSR7YmFzZV9iaW5kaXJ9L2ttb2QgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0lMTD0ke2Jhc2VfYmluZGlyfS9raWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1NVTE9HSU49JHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfS0VYRUM9JHtzYmluZGlyfS9rZXhlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQUNIRUNLPSR7c2JpbmRpcn0vcXVvdGFjaGVjayBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9RVU9UQU9OPSR7c2JpbmRpcn0vcXVvdGFvbiBcCisJCQkgIgorCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1yb290cHJlZml4PSR7cm9vdHByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke3Jvb3RsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLXJvb3Rob21lZGlyPSR7Uk9PVF9IT01FfSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jb3JlZHVtcCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGl0LXVzciBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1weXRob24gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtc3lzdnJjbmQtcGF0aD0ke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWZpcm13YXJlLXBhdGg9L2xpYi9maXJtd2FyZSBcCisgICAgICAgICAgICAgICAiCisjIHVjbGliYyBkb2VzIG5vdCBoYXZlIE5TUworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW15aG9zdG5hbWUgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlleHBvcnQgTk09IiR7SE9TVF9QUkVGSVh9Z2NjLW5tIgorCWV4cG9ydCBBUj0iJHtIT1NUX1BSRUZJWH1nY2MtYXIiCisJZXhwb3J0IFJBTkxJQj0iJHtIT1NUX1BSRUZJWH1nY2MtcmFubGliIgorCWV4cG9ydCBLTU9EPSIke2Jhc2VfYmluZGlyfS9rbW9kIgorCWlmIFsgLWQgJHtTfS91bml0cy5wcmVfc2VkIF0gOyB0aGVuCisJCWNwIC1yICR7U30vdW5pdHMucHJlX3NlZCAke1N9L3VuaXRzCisJZWxzZQorCQljcCAtciAke1N9L3VuaXRzICR7U30vdW5pdHMucHJlX3NlZAorCWZpCisJc2VkIC1pICcvbG4gLS1yZWxhdGl2ZSAtLWhlbHAvZCcgJHtTfS9jb25maWd1cmUuYWMKKwlzZWQgLWkgLWUgJ3M6XCQoTE5fUykgLS1yZWxhdGl2ZSAtZjpsbnI6ZycgJHtTfS9NYWtlZmlsZS5hbQorCXNlZCAtaSAtZSAnczpcJChMTl9TKSAtLXJlbGF0aXZlOmxucjpnJyAke1N9L01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisJIyBQcm92aWRlZCBieSBhIHNlcGFyYXRlIHJlY2lwZQorCXJtICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSogLWYKKworCSMgUHJvdmlkZSBzdXBwb3J0IGZvciBpbml0cmFtZnMKKwlbICEgLWUgJHtEfS9pbml0IF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kICR7RH0vaW5pdAorCVsgISAtZSAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZCBdICYmIGxuIC1zICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCAke0R9LyR7YmFzZV9zYmluZGlyfS91ZGV2ZAorCisJIyBDcmVhdGUgbWFjaGluZS1pZAorCSMgMjA6MTIgPCBtZXpjYWxlcm8+IGtvZW46IHlvdSBoYXZlIHRocmVlIG9wdGlvbnM6IGEpIHJ1biBzeXN0ZW1kLW1hY2hpbmUtaWQtc2V0dXAgYXQgaW5zdGFsbCB0aW1lLCBiKSBoYXZlIC8gcmVhZC1vbmx5IGFuZCBhbiBlbXB0eSBmaWxlIHRoZXJlIChmb3Igc3RhdGVsZXNzKSBhbmQgYykgYm9vdCB3aXRoIC8gd3JpdGFibGUKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkCisKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LyoucnVsZXMgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMDAtY3JlYXRlLXZvbGF0aWxlLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC8KKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKKwkJc2VkIC1pIHMlQFVERVZEQCUke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkCisJZmkKKworCWNob3duIHJvb3Q6c3lzdGVtZC1qb3VybmFsICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvam91cm5hbAorCisgICAgICAgICMgRGVsZXRlIGpvdXJuYWwgUkVBRE1FLCBhcyBsb2cgY2FuIGJlIHN5bWxpbmtlZCBpbnNpZGUgdm9sYXRpbGUuCisgICAgICAgIHJtIC1mICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9sb2cvUkVBRE1FCisKKwkjIENyZWF0ZSBzeW1saW5rcyBmb3Igc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG93ZXJvZmYudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZXNjdWUudGFyZ2V0LndhbnRzCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ncmFwaGljYWwudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbXVsdGktdXNlci50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3dlcm9mZi50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZWJvb3QudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCWxuIC1zZiAuLi9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcmVzY3VlLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKworCSMgRW5hYmxlIGpvdXJuYWwgdG8gZm9yd2FyZCBtZXNzYWdlIHRvIHN5c2xvZyBkYWVtb24KKwlzZWQgLWkgLWUgJ3MvLipGb3J3YXJkVG9TeXNsb2cuKi9Gb3J3YXJkVG9TeXNsb2c9eWVzLycgJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9qb3VybmFsZC5jb25mCisJIyB0aGlzIGZpbGUgaXMgbmVlZGVkIHRvIGV4aXN0IGlmIG5ldHdvcmtkIGlzIGRpc2FibGVkIGJ1dCB0aW1lc3luY2QgaXMgc3RpbGwgaW4gdXNlIHNpbmNlIHRpbWVzeW5jZCBjaGVja3MgaXQKKwkjIGZvciBleGlzdGVuY2UgZWxzZSBpdCBmYWlscworCWlmIFsgLXMgJHtEfSR7bGliZGlyfS90bXBmaWxlcy5kL3N5c3RlbWQuY29uZiBdOyB0aGVuCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ25ldHdvcmtkJywgJzonLCAnc2VkIC1pIC1lICJcJGFkIC9ydW4vc3lzdGVtZC9uZXRpZi9saW5rcyAwNzU1IHJvb3Qgcm9vdCAtIiAke0R9JHtsaWJkaXJ9L3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mJywgZCl9CisJZmkKKwlpbnN0YWxsIC1EbSAwNzU1ICR7U30vc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbWQtc3lzdi1pbnN0YWxsCit9CisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorICAgICAgIGNwIC1yZiAke1N9L3Rlc3QvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICAke0J9L3Rlc3QtdWRldiAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eAorICAgICAgIGNwICR7U30vYnVpbGQtYXV4L3Rlc3QtZHJpdmVyICR7RH0ke1BURVNUX1BBVEh9L2J1aWxkLWF1eC8KKyAgICAgICBjcCAtcmYgJHtCfS9ydWxlcyAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHRoZXJlIGZvciB1ZGV2LXRlc3QucGwgdG8gd29yay4KKyAgICAgICBpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vdWRldi9ydWxlcy5kCisgICAgICAgY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICBjcCAke1N9L3Rlc3Qvc3lzLnRhci54eiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgc2VkIC1pICdzLyJ0cmVlIi8ibHMiLycgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdC91ZGV2LXRlc3QucGwKKyAgICAgICBzZWQgLWkgJ3MjJHtTfSMke1BURVNUX1BBVEh9I2cnICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCisgICAgICAgc2VkIC1pICdzIyR7Qn0jJHtQVEVTVF9QQVRIfSNnJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKXsKKyAgICBzeXN0ZW1kbGliZGlyID0gZC5nZXRWYXIoInJvb3RsaWJkaXIiLCBUcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHN5c3RlbWRsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnU3lzdGVtZCAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWIodWRldnxzeXN0ZW1kKS4qIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ3VpICR7UE59LXZjb25zb2xlLXNldHVwICR7UE59LWluaXRyYW1mcyAke1BOfS1hbmFseXplICR7UE59LWtlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAke1BOfS1ycG0tbWFjcm9zICR7UE59LWJpbmZtdCAke1BOfS1wYW0gJHtQTn0tenNoICR7UE59LXhvcmcteGluaXRyYyIKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1iaW5mbXQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tYmluZm10ID0gInN5c3RlbWQtYmluZm10LnNlcnZpY2UiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ICs9ICItLXN5c3RlbSBzeXN0ZW1kLWpvdXJuYWwtZ2F0ZXdheTsgLS1zeXN0ZW0gc3lzdGVtZC10aW1lc3luYyIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi1yIGxvY2s7IC1yIHN5c3RlbWQtam91cm5hbCIKKworRklMRVNfJHtQTn0tYW5hbHl6ZSA9ICIke2JpbmRpcn0vc3lzdGVtZC1hbmFseXplIgorCitGSUxFU18ke1BOfS1pbml0cmFtZnMgPSAiL2luaXQiCitSREVQRU5EU18ke1BOfS1pbml0cmFtZnMgPSAiJHtQTn0iCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJwZXJsIHB5dGhvbiBiYXNoIgorRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZGlyfS91ZGV2L3J1bGVzLmQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3N5c3RlbWQvcHRlc3QvLmRlYnVnIgorCitGSUxFU18ke1BOfS1ndWkgPSAiJHtiaW5kaXJ9L3N5c3RlbWFkbSIKKworRklMRVNfJHtQTn0tdmNvbnNvbGUtc2V0dXAgPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzaW5pdC50YXJnZXQud2FudHMvc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlIgorCitSREVQRU5EU18ke1BOfS1rZXJuZWwtaW5zdGFsbCArPSAiYmFzaCIKK0ZJTEVTXyR7UE59LWtlcm5lbC1pbnN0YWxsID0gIiR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2tlcm5lbC8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL2tlcm5lbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LXJwbS1tYWNyb3MgPSAiJHtleGVjX3ByZWZpeH0vbGliL3JwbSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS14b3JnLXhpbml0cmMgPSAiJHtzeXNjb25mZGlyfS9YMTEveGluaXQveGluaXRyYy5kLyoiCisKK0ZJTEVTXyR7UE59LXpzaCA9ICIke2RhdGFkaXJ9L3pzaC9zaXRlLWZ1bmN0aW9ucyIKKworRklMRVNfJHtQTn0tYmluZm10ID0gIiR7c3lzY29uZmRpcn0vYmluZm10LmQvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvYmluZm10LmQgXAorICAgICAgICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC1iaW5mbXQgXAorICAgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHJvYy1zeXMtZnMtYmluZm10X21pc2MuKiBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIgorUlJFQ09NTUVORFNfJHtQTn0tYmluZm10ID0gImtlcm5lbC1tb2R1bGUtYmluZm10LW1pc2MiCisKK1JSRUNPTU1FTkRTXyR7UE59LXZjb25zb2xlLXNldHVwID0gImtiZCBrYmQtY29uc29sZWZvbnRzIGtiZC1rZXltYXBzIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC9sb2dpbmQuY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvdXNlci5jb25mIgorCitGSUxFU18ke1BOfSA9ICIgJHtiYXNlX2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0LTEgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59IFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ZhY3RvcnkgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMS8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWFjaGluZS1pZCBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vcGFtLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c2N0bC5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS94ZGcvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9SRUFETUUgXAorICAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvKiBcCisgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9LyogXAorICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Lyouc28gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJuc3NfKiBcCisgICAgICAgICAgICAgICAgL2Nncm91cCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3N5c3RlbWQqIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYnVzY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vbG9jYWxlY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vaG9zdG5hbWVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS90aW1lZGF0ZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2Jvb3RjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9rZXJuZWwtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3RtcGZpbGVzLmQvKi5jb25mIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL21vZHVsZXMtbG9hZC5kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvc3lzY3RsLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN1c2Vycy5kIFwKKyAgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MC11YWNjZXNzLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83MS1zZWF0LnJ1bGVzIFwKKyAgICAgICAgICAgICAgICAke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZC83My1zZWF0LWxhdGUucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzk5LXN5c3RlbWQucnVsZXMgXAorICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cm9vdGxpYmRpcn0vLmRlYnVnICR7c3lzdGVtZF91bml0ZGlyfS8uZGVidWcgJHtzeXN0ZW1kX3VuaXRkaXJ9LyovLmRlYnVnICR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5Ly5kZWJ1Zy8iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtkYXRhZGlyfS9kYnVzLTEvaW50ZXJmYWNlcy8gJHtzeXNjb25mZGlyfS9ycG0vbWFjcm9zLnN5c3RlbWQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJrbW9kIGRidXMgdXRpbC1saW51eC1tb3VudCB1ZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorUkRFUEVORFNfJHtQTn0gKz0gInZvbGF0aWxlLWJpbmRzIHVwZGF0ZS1yYy5kIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAic3lzdGVtZC1zZXJpYWxnZXR0eSBzeXN0ZW1kLXZjb25zb2xlLXNldHVwIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kLWNvbXBhdC11bml0cyB1ZGV2LWh3ZGIgXAorICAgICAgICAgICAgICAgICAgICAgIHV0aWwtbGludXgtYWdldHR5ICB1dGlsLWxpbnV4LWZzY2sgZTJmc3Byb2dzLWUyZnNjayBcCisgICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1hdXRvZnM0IGtlcm5lbC1tb2R1bGUtdW5peCBrZXJuZWwtbW9kdWxlLWlwdjYgXAorICAgICAgICAgICAgICAgICAgICAgIG9zLXJlbGVhc2UgXAorIgorCitQQUNLQUdFUyA9KyAidWRldi1kYmcgdWRldiB1ZGV2LWh3ZGIiCisKK0ZJTEVTX3VkZXYtZGJnICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnIgorCitSUFJPVklERVNfdWRldiA9ICJob3RwbHVnIgorCitSREVQRU5EU191ZGV2LWh3ZGIgKz0gInVkZXYiCisKK0ZJTEVTX3VkZXYgKz0gIiR7YmFzZV9zYmluZGlyfS91ZGV2ZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdWRldmQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9hY2NlbGVyb21ldGVyIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvYXRhX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvY2Ryb21faWQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9jb2xsZWN0IFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvZmluZGtleWJvYXJkcyBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2ggXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXltYXAgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9tdGRfcHJvYmUgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9zY3NpX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvdjRsX2lkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5bWFwcyBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3J1bGVzLmQvKi5ydWxlcyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3VkZXYgXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZCBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyp1ZGV2KiBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyoud2FudHMvKnVkZXYqIFwKKyAgICAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0gXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvdWRldmFkbSBcCisgICAgICAgICAgICAgICIKKworRklMRVNfdWRldi1od2RiID0gIiR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvaHdkYi5kIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gInVkZXYiCitJTklUU0NSSVBUX05BTUVfdWRldiA9ICJzeXN0ZW1kLXVkZXZkIgorSU5JVFNDUklQVF9QQVJBTVNfdWRldiA9ICJzdGFydCAwMyBTIC4iCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKKyMgVE9ETzoKKyMgdS1hIGZvciBydW5sZXZlbCBhbmQgdGVsaW5pdAorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpbml0IGhhbHQgcmVib290IHNodXRkb3duIHBvd2Vyb2ZmIHJ1bmxldmVsIgorCitBTFRFUk5BVElWRV9UQVJHRVRbaW5pdF0gPSAiJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2luaXRdID0gIiR7YmFzZV9zYmluZGlyfS9pbml0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbaW5pdF0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW2hhbHRdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoYWx0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGFsdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hhbHRdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtyZWJvb3RdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWJvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9yZWJvb3QiCitBTFRFUk5BVElWRV9QUklPUklUWVtyZWJvb3RdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtzaHV0ZG93bl0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NodXRkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24iCitBTFRFUk5BVElWRV9QUklPUklUWVtzaHV0ZG93bl0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3Bvd2Vyb2ZmXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9wb3dlcm9mZiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3Bvd2Vyb2ZmXSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcnVubGV2ZWxdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW5sZXZlbF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3J1bmxldmVsIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcnVubGV2ZWxdID89ICIzMDAiCisKK3BrZ19wb3N0aW5zdF91ZGV2LWh3ZGIgKCkgeworCWlmIHRlc3QgLW4gIiREIjsgdGhlbgorCQkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmFzZV9iaW5kaXJ9L3VkZXZhZG0nKX0gaHdkYiAtLXVwZGF0ZSBcCisJCQktLXJvb3QgJEQKKwllbHNlCisJCXVkZXZhZG0gaHdkYiAtLXVwZGF0ZQorCWZpCit9CisKK3BrZ19wcmVybV91ZGV2LWh3ZGIgKCkgeworCWlmIHRlc3QgLW4gIiREIjsgdGhlbgorCQlleGl0IDEKKwlmaQorCisJcm0gLWYgJHtzeXNjb25mZGlyfS91ZGV2L2h3ZGIuYmluCit9CisKKyMgQXMgdGhpcyByZWNpcGUgYnVpbGRzIHVkZXYsIHJlc3BlY3Qgc3lzdGVtZCBiZWluZyBpbiBESVNUUk9fRkVBVFVSRVMgc28KKyMgdGhhdCB3ZSBkb24ndCBidWlsZCBib3RoIHVkZXYgYW5kIHN5c3RlbWQgaW4gd29ybGQgYnVpbGRzLgorcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidzeXN0ZW1kJyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9jcnlwdC1saWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzNDI5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvY3J5cHQtbGliLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworIyBUaGUgc3JjIE1ha2VmaWxlIHdhcyBjaGVja2luZyBmb3IgbGliY3J5cHQuYSBvbiB0aGUgaG9zdCwgbm90IGluIHRoZQorIyBidWlsZCBlbnZpcm9ubWVudC4gIFRoaXMgcGF0Y2ggY2hlY2tzIGZvciAkTENSWVBUIGluIHRoZSBlbnZpcm9ubWVudAorIyBhbmQgdXNlcyBpdCBpZiBpdCdzIHRoZXJlLgorIyAtIGpkaWtlQGxpbnV4LmludGVsLmNvbQorCitJbmRleDogc3lzdmluaXQtMi44OGRzZi9zcmMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXN2aW5pdC0yLjg4ZHNmLm9yaWcvc3JjL01ha2VmaWxlCisrKysgc3lzdmluaXQtMi44OGRzZi9zcmMvTWFrZWZpbGUKK0BAIC04NSw5ICs4NSwxMyBAQCBlbHNlCisgZW5kaWYKKyAKKyAjIEFkZGl0aW9uYWwgbGlicyBmb3IgR05VIGxpYmMuCisraWZuZXEgKCQoTENSWVBUKSwpCisrICBTVUxPR0lOTElCUwkrPSAkKExDUllQVCkKKytlbHNlCisgaWZuZXEgKCQod2lsZGNhcmQgL3Vzci9saWIqL2xpYmNyeXB0LmEpLCkKKyAgIFNVTE9HSU5MSUJTCSs9IC1sY3J5cHQKKyBlbmRpZgorK2VuZGlmCisgCisgYWxsOgkJJChCSU4pICQoU0JJTikgJChVU1JCSU4pCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MjI1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDgzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQoraW5kZXggZTJiODAyOC4uM2UxMWU5MiAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZQorKysrIGIvc3JjL01ha2VmaWxlCitAQCAtNjUsNyArNjUsMTQgQEAgZWxzZQorICAgSU5TVEFMTF9EQVRBCT0gaW5zdGFsbCAtbSA2NDQKKyBlbmRpZgorIElOU1RBTExfRElSCT0gaW5zdGFsbCAtbSA3NTUgLWQKKy1NQU5ESVIJCT0gL3Vzci9zaGFyZS9tYW4KKysKKytST09UICAgICAgICAgPz0KKytiYXNlX2JpbmRpciAgPz0gL2JpbgorK2Jhc2Vfc2JpbmRpciA/PSAvc2JpbgorK2JpbmRpciAgICAgICA/PSAvdXNyL2JpbgorK3N5c2NvbmZkaXIgICA/PSAvZXRjCisraW5jbHVkZWRpciAgID89IC91c3IvaW5jbHVkZQorK21hbmRpciAgICAgICA/PSAvdXNyL3NoYXJlL21hbgorIAorIGlmZXEgKCQoV0lUSF9TRUxJTlVYKSx5ZXMpCisgICBTRUxJTlVYX0RFRgk9ICAtRFdJVEhfU0VMSU5VWAorQEAgLTEzOCwzOSArMTQ1LDM5IEBAIGNsb2JiZXI6CWNsZWFub2JqcworIGRpc3RjbGVhbjoJY2xvYmJlcgorIAorIGluc3RhbGw6CistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL2Jpbi8gJChST09UKS9zYmluLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKS91c3IvYmluLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoYmFzZV9iaW5kaXIpLyAkKFJPT1QpJChiYXNlX3NiaW5kaXIpLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoYmluZGlyKS8KKyAJCWZvciBpIGluICQoQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS9iaW4vIDsgXAorKwkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKSQoYmFzZV9iaW5kaXIpLyA7IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoU0JJTik7IGRvIFwKKy0JCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkvc2Jpbi8gOyBcCisrCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpJChiYXNlX3NiaW5kaXIpLyA7IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoVVNSQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS91c3IvYmluLyA7IFwKKysJCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkkKGJpbmRpcikvIDsgXAorIAkJZG9uZQorLQkJIyAkKElOU1RBTExfRElSKSAkKFJPT1QpL2V0Yy8KKy0JCSMgJChJTlNUQUxMX0VYRUMpIGluaXRzY3JpcHQuc2FtcGxlICQoUk9PVCkvZXRjLworLQkJbG4gLXNmIGhhbHQgJChST09UKS9zYmluL3JlYm9vdAorLQkJbG4gLXNmIGhhbHQgJChST09UKS9zYmluL3Bvd2Vyb2ZmCistCQlsbiAtc2YgaW5pdCAkKFJPT1QpL3NiaW4vdGVsaW5pdAorLQkJbG4gLXNmIC9zYmluL2tpbGxhbGw1ICQoUk9PVCkvYmluL3BpZG9mCistCQlpZiBbICEgLWYgJChST09UKS91c3IvYmluL2xhc3RiIF07IHRoZW4gXAorLQkJCWxuIC1zZiBsYXN0ICQoUk9PVCkvdXNyL2Jpbi9sYXN0YjsgXAorKwkJIyAkKElOU1RBTExfRElSKSAkKFJPT1QpJChzeXNjb25mZGlyKS8KKysJCSMgJChJTlNUQUxMX0VYRUMpIGluaXRzY3JpcHQuc2FtcGxlICQoUk9PVCkkKHN5c2NvbmZkaXIpLworKwkJbG4gLXNmIGhhbHQgJChST09UKSQoYmFzZV9zYmluZGlyKS9yZWJvb3QKKysJCWxuIC1zZiBoYWx0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvcG93ZXJvZmYKKysJCWxuIC1zZiBpbml0ICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvdGVsaW5pdAorKwkJbG4gLXNmICQoYmFzZV9zYmluZGlyKS9raWxsYWxsNSAkKFJPT1QpJChiYXNlX2JpbmRpcikvcGlkb2YKKysJCWlmIFsgISAtZiAkKFJPT1QpJChiaW5kaXIpL2xhc3RiIF07IHRoZW4gXAorKwkJCWxuIC1zZiBsYXN0ICQoUk9PVCkkKGJpbmRpcikvbGFzdGI7IFwKKyAJCWZpCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL3Vzci9pbmNsdWRlLworLQkJJChJTlNUQUxMX0RBVEEpIGluaXRyZXEuaCAkKFJPT1QpL3Vzci9pbmNsdWRlLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW4xLworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW41LworLQkJJChJTlNUQUxMX0RJUikgJChST09UKSQoTUFORElSKS9tYW44LworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQoaW5jbHVkZWRpcikvCisrCQkkKElOU1RBTExfREFUQSkgaW5pdHJlcS5oICQoUk9PVCkkKGluY2x1ZGVkaXIpLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW4xLworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW41LworKwkJJChJTlNUQUxMX0RJUikgJChST09UKSQobWFuZGlyKS9tYW44LworIAkJZm9yIGkgaW4gJChNQU4xKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKE1BTkRJUikvbWFuMS87IFwKKysJCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChtYW5kaXIpL21hbjEvOyBcCisgCQlkb25lCisgCQlmb3IgaSBpbiAkKE1BTjUpOyBkbyBcCistCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQoTUFORElSKS9tYW41LzsgXAorKwkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKG1hbmRpcikvbWFuNS87IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoTUFOOCk7IGRvIFwKKy0JCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChNQU5ESVIpL21hbjgvOyBcCisrCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQobWFuZGlyKS9tYW44LzsgXAorIAkJZG9uZQorIGlmZXEgKCQoUk9PVCksKQorIAkJIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL3BpZG9mLWFkZC1tLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjVkZmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxODkgQEAKK3BpZG9mOiBhZGQgLW0gb3B0aW9uCisKK1doZW4gdXNlZCB3aXRoIC1vLCB3aWxsIGFsc28gb21pdCBhbnkgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgc2FtZQorYXJndlswXSBhbmQgYXJndlsxXSBhcyBhbnkgZXhwbGljaXRseSBvbWl0dGVkIHByb2Nlc3MgaWRzLiBUaGlzIGNhbiBiZQordXNlZCB0byBhdm9pZCBtdWx0aXBsZSBzaGVsbCBzY3JpcHRzIGNvbmN1cnJlbnRseSBjYWxsaW5nIHBpZG9mIHJldHVybmluZworZWFjaCBvdGhlcidzIHBpZHMuCisKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9ODgzODU2CisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKK0ltcG9ydGVkIHBhdGNoIGZyb206IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02NTgxNjYKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbWFuL3BpZG9mLjggICAgfCAgNiArKysrKysKKyBzcmMva2lsbGFsbDUuYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYW4vcGlkb2YuOCBiL21hbi9waWRvZi44CistLS0gYS9tYW4vcGlkb2YuOAorKysrIGIvbWFuL3BpZG9mLjgKK0BAIC0yNCw2ICsyNCw3IEBAIHBpZG9mIC0tIGZpbmQgdGhlIHByb2Nlc3MgSUQgb2YgYSBydW5uaW5nIHByb2dyYW0uCisgLlJCIFsgXC1jIF0KKyAuUkIgWyBcLW4gXQorIC5SQiBbIFwteCBdCisrLlJCIFsgXC1tIF0KKyAuUkIgWyBcLW8KKyAuSVIgb21pdHBpZFssb21pdHBpZC4uXSBdCisgLlJCIFsgXC1vCitAQCAtNjMsNiArNjQsMTEgQEAgc2hlbGxzIHJ1bm5pbmcgdGhlIG5hbWVkIHNjcmlwdHMuCisgVGVsbHMgXGZJcGlkb2ZcZlAgdG8gb21pdCBwcm9jZXNzZXMgd2l0aCB0aGF0IHByb2Nlc3MgaWQuIFRoZSBzcGVjaWFsCisgcGlkIFxmQiVQUElEXGZQIGNhbiBiZSB1c2VkIHRvIG5hbWUgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBcZklwaWRvZlxmUAorIHByb2dyYW0sIGluIG90aGVyIHdvcmRzIHRoZSBjYWxsaW5nIHNoZWxsIG9yIHNoZWxsIHNjcmlwdC4KKysuSVAgLW0KKytXaGVuIHVzZWQgd2l0aCAtbywgd2lsbCBhbHNvIG9taXQgYW55IHByb2Nlc3NlcyB0aGF0IGhhdmUgdGhlIHNhbWUKKythcmd2WzBdIGFuZCBhcmd2WzFdIGFzIGFueSBleHBsaWNpdGx5IG9taXR0ZWQgcHJvY2VzcyBpZHMuIFRoaXMgY2FuIGJlCisrdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBzaGVsbCBzY3JpcHRzIGNvbmN1cnJlbnRseSBjYWxsaW5nIHBpZG9mIHJldHVybmluZworK2VhY2ggb3RoZXIncyBwaWRzLgorIC5TSCAiRVhJVCBTVEFUVVMiCisgLlRQCisgLkIgMAorZGlmZiAtLWdpdCBhL3NyYy9raWxsYWxsNS5jIGIvc3JjL2tpbGxhbGw1LmMKK2luZGV4IDU5MzdkOTguLmU3Mzg4NWUgMTAwNjQ0CistLS0gYS9zcmMva2lsbGFsbDUuYworKysrIGIvc3JjL2tpbGxhbGw1LmMKK0BAIC0xMTgsNiArMTE4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX3NfbmZzCisgCisgLyogTGlzdCBvZiBwcm9jZXNzZXMuICovCisgUFJPQyAqcGxpc3Q7CisrUFJPQyAqb2xpc3Q7CisgCisgLyogTGlzdCBvZiBwcm9jZXNzZXMgdG8gb21pdC4gKi8KKyBPTUlUICpvbWl0OworQEAgLTM0NSw2ICszNDYsMjAgQEAgc3RhdGljIHZvaWQgY2xlYXJfbW50KHZvaWQpCisgCX0KKyB9CisgCisrc3RhdGljIHZvaWQgY2xlYXJfb21pdCh2b2lkKQorK3sKKysJT01JVCAqbzsKKysJUFJPQyAqcDsKKysJZm9yIChvID0gb21pdDsgbzsgbyA9IG9taXQpIHsKKysJCW9taXQgPSBvbWl0LT5uZXh0OworKwkJZnJlZShvKTsKKysJfQorKwlmb3IgKHAgPSBvbGlzdDsgcDsgcCA9IG9saXN0KSB7CisrCQlvbGlzdCA9IG9saXN0LT5uZXh0OworKwkJZnJlZShwKTsKKysJfQorK30KKysKKyAvKgorICAqICAgICBDaGVjayBpZiBwYXRoIGlzIGlhIHNoYWRvdyBvZmYgYSBORlMgcGFydGl0aW9uLgorICAqLworQEAgLTQ1Miw2ICs0NjcsNyBAQCBpbnQgcmVhZHByb2MoaW50IGRvX3N0YXQpCisgCURJUgkJKmRpcjsKKyAJRklMRQkJKmZwOworIAlQUk9DCQkqcCwgKm47CisrCU9NSVQJCSpvLCAqbTsKKyAJc3RydWN0IGRpcmVudAkqZDsKKyAJc3RydWN0IHN0YXQJc3Q7CisgCWNoYXIJCXBhdGhbUEFUSF9NQVgrMV07CitAQCAtNjI0LDYgKzY0MCwxNyBAQCBpbnQgcmVhZHByb2MoaW50IGRvX3N0YXQpCisgCQlwLT5uZXh0ID0gcGxpc3Q7CisgCQlwbGlzdCA9IHA7CisgCQlwLT5waWQgPSBwaWQ7CisrCQkvKiBDb3VsZCBiZSBzbWFydGVyLCBidXQgaXQncyBhIHNtYWxsIGxpc3QuICovCisrCQltID0gb21pdDsKKysJCWZvciAobyA9IG9taXQ7IG07IG8gPSBtKSB7CisrCQkJbSA9IG8tPm5leHQ7CisrCQkJaWYgKG8tPnBpZCA9PSBwLT5waWQpIHsKKysJCQkJbiA9IChQUk9DKil4bWFsbG9jKHNpemVvZihQUk9DKSk7CisrCQkJCSpuID0gKnA7CisrCQkJCW4tPm5leHQgPSBvbGlzdDsKKysJCQkJb2xpc3QgPSBuOworKwkJCX0KKysJCX0KKyAJfQorIAljbG9zZWRpcihkaXIpOworIAorQEAgLTgxMyw2ICs4NDAsMjYgQEAgUElEUV9IRUFEICpwaWRvZihjaGFyICpwcm9nKQorIAlyZXR1cm4gcTsKKyB9CisgCisraW50IG1hdGNoZXMoUFJPQyAqbywgUFJPQyAqcCkKKyt7CisrCWludCByZXQgPSAwOworKwljaGFyICpvYXJndjEsICpwYXJndjE7CisrCWlmICgoby0+YXJndjAgJiYgcC0+YXJndjAgJiYgIXN0cmNtcChvLT5hcmd2MCxwLT5hcmd2MCkpKSB7CisrCQlpZiAoby0+YXJndjEgJiYgcC0+YXJndjEpIHsKKysJCQlpZiAoKG9hcmd2MSA9IGNhbm9uaWNhbGl6ZV9maWxlX25hbWUoby0+YXJndjEpKSA9PSBOVUxMKQorKwkJCQlvYXJndjEgPSBzdHJkdXAoby0+YXJndjEpOworKwkJCWlmICgocGFyZ3YxID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShwLT5hcmd2MSkpID09IE5VTEwpCisrCQkJCXBhcmd2MSA9IHN0cmR1cChwLT5hcmd2MSk7CisrCQkJaWYgKCEgc3RyY21wKG9hcmd2MSwgcGFyZ3YxKSkgeworKwkJCQlyZXQgPSAxOworKwkJCX0KKysJCQlmcmVlKG9hcmd2MSk7CisrCQkJZnJlZShwYXJndjEpOworKwkJfQorKwl9CisrCXJldHVybiByZXQ7CisrfQorKworIC8qIEdpdmUgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4gKi8KKyB2b2lkIHVzYWdlKHZvaWQpCisgeworQEAgLTg0NSw2ICs4OTIsNyBAQCB2b2lkIG5zeXNsb2coaW50IHByaSwgY2hhciAqZm10LCAuLi4pCisgI2RlZmluZSBQSURPRl9TSU5HTEUJMHgwMQorICNkZWZpbmUgUElET0ZfT01JVAkweDAyCisgI2RlZmluZSBQSURPRl9ORVRGUwkweDA0CisrI2RlZmluZSBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUwkweDA4CisgCisgLyoKKyAgKglQaWRvZiBmdW5jdGlvbmFsaXR5LgorQEAgLTg2MSw2ICs5MDksNyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQl0bXBbNTEyXTsKKyAKKysJb2xpc3QgPSAoUFJPQyopMDsKKyAJb21pdCA9IChPTUlUKikwOworIAlubGlzdCA9IChORlMqKTA7CisgCW9wdGVyciA9IDA7CitAQCAtODY4LDcgKzkxNyw3IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaWYgKCh0b2tlbiA9IGdldGVudigiUElET0ZfTkVURlMiKSkgJiYgKHN0cmNtcCh0b2tlbiwibm8iKSAhPSAwKSkKKyAJCWZsYWdzIHw9IFBJRE9GX05FVEZTOworIAorLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLGFyZ3YsImhjbzpzeG4iKSkgIT0gRU9GKSBzd2l0Y2ggKG9wdCkgeworKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLGFyZ3YsImhjbW86c3huIikpICE9IEVPRikgc3dpdGNoIChvcHQpIHsKKyAJCWNhc2UgJz8nOgorIAkJCW5zeXNsb2coTE9HX0VSUiwiaW52YWxpZCBvcHRpb25zIG9uIGNvbW1hbmQgbGluZSFcbiIpOworIAkJCWNsb3NlbG9nKCk7CitAQCAtOTA3LDYgKzk1Niw5IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCWNhc2UgJ3gnOgorIAkJCXNjcmlwdHNfdG9vKys7CisgCQkJYnJlYWs7CisrCQljYXNlICdtJzoKKysJCQlmbGFncyB8PSBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUzsKKysJCQlicmVhazsKKyAJCWNhc2UgJ24nOgorIAkJCWZsYWdzIHw9IFBJRE9GX05FVEZTOworIAkJCWJyZWFrOworQEAgLTkzOCwxMCArOTkwLDEzIEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlwaWRfdCBzcGlkID0gMDsKKyAJCQl3aGlsZSAoKHAgPSBnZXRfbmV4dF9mcm9tX3BpZF9xKHEpKSkgeworIAkJCQlpZiAoKGZsYWdzICYgUElET0ZfT01JVCkgJiYgb21pdCkgeworLQkJCQkJT01JVCAqIG9wdHI7CistCQkJCQlmb3IgKG9wdHIgPSBvbWl0OyBvcHRyOyBvcHRyID0gb3B0ci0+bmV4dCkgeworKwkJCQkJUFJPQyAqIG9wdHI7CisrCQkJCQlmb3IgKG9wdHIgPSBvbGlzdDsgb3B0cjsgb3B0ciA9IG9wdHItPm5leHQpIHsKKyAJCQkJCQlpZiAob3B0ci0+cGlkID09IHAtPnBpZCkKKyAJCQkJCQkJYnJlYWs7CisrCQkJCQkJaWYgKGZsYWdzICYgUElET0ZfT01JVF9PTUlUX01BVENIRVMpCisrCQkJCQkJCWlmIChtYXRjaGVzKG9wdHIsIHApKQorKwkJCQkJCQkJYnJlYWs7CisgCQkJCQl9CisgCisgCQkJCQkvKgorQEAgLTk3Nyw2ICsxMDMyLDcgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlpZiAoIWZpcnN0KQorIAkJcHJpbnRmKCJcbiIpOworIAorKwljbGVhcl9vbWl0KCk7CisgCWNsZWFyX21udCgpOworIAorIAljbG9zZWxvZygpOworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWIvaW5pdHRhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJiZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiCkBAIC0wLDAgKzEsMzAgQEAKKyMgL2V0Yy9pbml0dGFiOiBpbml0KDgpIGNvbmZpZ3VyYXRpb24uCisjICRJZDogaW5pdHRhYix2IDEuOTEgMjAwMi8wMS8yNSAxMzozNToyMSBtaXF1ZWxzIEV4cCAkCisKKyMgVGhlIGRlZmF1bHQgcnVubGV2ZWwuCitpZDo1OmluaXRkZWZhdWx0OgorCisjIEJvb3QtdGltZSBzeXN0ZW0gY29uZmlndXJhdGlvbi9pbml0aWFsaXphdGlvbiBzY3JpcHQuCisjIFRoaXMgaXMgcnVuIGZpcnN0IGV4Y2VwdCB3aGVuIGJvb3RpbmcgaW4gZW1lcmdlbmN5ICgtYikgbW9kZS4KK3NpOjpzeXNpbml0Oi9ldGMvaW5pdC5kL3JjUworCisjIFdoYXQgdG8gZG8gaW4gc2luZ2xlLXVzZXIgbW9kZS4KK35+OlM6d2FpdDovc2Jpbi9zdWxvZ2luCisKKyMgL2V0Yy9pbml0LmQgZXhlY3V0ZXMgdGhlIFMgYW5kIEsgc2NyaXB0cyB1cG9uIGNoYW5nZQorIyBvZiBydW5sZXZlbC4KKyMKKyMgUnVubGV2ZWwgMCBpcyBoYWx0LgorIyBSdW5sZXZlbCAxIGlzIHNpbmdsZS11c2VyLgorIyBSdW5sZXZlbHMgMi01IGFyZSBtdWx0aS11c2VyLgorIyBSdW5sZXZlbCA2IGlzIHJlYm9vdC4KKworbDA6MDp3YWl0Oi9ldGMvaW5pdC5kL3JjIDAKK2wxOjE6d2FpdDovZXRjL2luaXQuZC9yYyAxCitsMjoyOndhaXQ6L2V0Yy9pbml0LmQvcmMgMgorbDM6Mzp3YWl0Oi9ldGMvaW5pdC5kL3JjIDMKK2w0OjQ6d2FpdDovZXRjL2luaXQuZC9yYyA0CitsNTo1OndhaXQ6L2V0Yy9pbml0LmQvcmMgNQorbDY6Njp3YWl0Oi9ldGMvaW5pdC5kL3JjIDYKKyMgTm9ybWFsbHkgbm90IHJlYWNoZWQsIGJ1dCBmYWxsdGhyb3VnaCBpbiBjYXNlIG9mIGVtZXJnZW5jeS4KK3o2OjY6cmVzcGF3bjovc2Jpbi9zdWxvZ2luCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiXzIuODhkc2YuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliMTMyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgpAQCAtMCwwICsxLDgzIEBACitTVU1NQVJZID0gIkluaXR0YWIgY29uZmlndXJhdGlvbiBmb3IgU3lzVmluaXQiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK1BSID0gInIxMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdHRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5pdHRhYiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisKKyAgICBzZXQgLXgKKyAgICB0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKyAgICBmb3IgaSBpbiAkdG1wCisgICAgZG8KKwlqPWBlY2hvICR7aX0gfCBzZWQgcy9cOy9cIC9nYAorCWxhYmVsPWBlY2hvICR7aX0gfCBzZWQgLWUgJ3MvdHR5Ly8nIC1lICdzL14uKjsvLycgLWUgJ3MvOy4qLy8nYAorCWVjaG8gIiRsYWJlbDoxMjM0NTpyZXNwYXduOiR7YmFzZV9zYmluZGlyfS9nZXR0eSAtTCAke2p9IiA+PiAke0R9JHtzeXNjb25mZGlyfS9pbml0dGFiCisgICAgZG9uZQorCisgICAgaWYgWyAiJHtVU0VfVlR9IiA9ICIxIiBdOyB0aGVuCisgICAgICAgIGNhdCA8PEVPRiA+PiR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyMgJHtiYXNlX3NiaW5kaXJ9L2dldHR5IGludm9jYXRpb25zIGZvciB0aGUgcnVubGV2ZWxzLgorIworIyBUaGUgImlkIiBmaWVsZCBNVVNUIGJlIHRoZSBzYW1lIGFzIHRoZSBsYXN0CisjIGNoYXJhY3RlcnMgb2YgdGhlIGRldmljZSAoYWZ0ZXIgInR0eSIpLgorIworIyBGb3JtYXQ6CisjICA8aWQ+OjxydW5sZXZlbHM+OjxhY3Rpb24+Ojxwcm9jZXNzPgorIworCitFT0YKKworICAgICAgICBmb3IgbiBpbiAke1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTfQorICAgICAgICBkbworICAgICAgICAgICAgZWNobyAiJG46MTIzNDU6cmVzcGF3bjoke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkgMzg0MDAgdHR5JG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICAgICAgZG9uZQorICAgICAgICBlY2hvICIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICBmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworIyBydW4gdGhpcyBvbiB0aGUgdGFyZ2V0CitpZiBbICJ4JEQiID0gIngiIF0gJiYgWyAtZSAvcHJvYy9jb25zb2xlcyBdOyB0aGVuCisJdG1wPSIke1NFUklBTF9DT05TT0xFU19DSEVDS30iCisJZm9yIGkgaW4gJHRtcAorCWRvCisJCWo9YGVjaG8gJHtpfSB8IHNlZCBzL14uKlw7Ly9nYAorCQlpZiBbIC16ICJgZ3JlcCAke2p9IC9wcm9jL2NvbnNvbGVzYCIgXTsgdGhlbgorCQkJc2VkIC1pIC9eLioke2p9JC9kIC9ldGMvaW5pdHRhYgorCQlmaQorCWRvbmUKKwlraWxsIC1IVVAgMQorZWxzZQorCWlmIFsgIiR7U0VSSUFMX0NPTlNPTEVTX0NIRUNLfSIgPSAiIiBdOyB0aGVuCisJCWV4aXQgMAorCWVsc2UKKwkJZXhpdCAxCisJZmkKK2ZpCit9CisKKyMgVVNFX1ZUIGFuZCBTRVJJQUxfQ09OU09MRVMgYXJlIGdlbmVyYWxseSBkZWZpbmVkIGJ5IHRoZSBNQUNISU5FIC5jb25mLgorIyBTZXQgUEFDS0FHRV9BUkNIIGFwcHJvcHJpYXRlbHkuCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2luaXR0YWIiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9pbml0dGFiIgorCitVU0VfVlQgPz0gIjEiCitTWVNWSU5JVF9FTkFCTEVEX0dFVFRZUyA/PSAiMSIKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAwMDEtVGhpcy1maXhlcy1hbi1pc3N1ZS10aGF0LWNsYW5nLXJlcG9ydHMtYWJvdXQtbXV0bGlwbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzVjMTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gMzZhYzk3YmZlNTE3OTc0NTg0NDJhNjAzNTIxOWE1MDRhNDJlNzAzYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIxIEF1ZyAyMDE1IDEwOjU2OjQwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoaXMgZml4ZXMgYW4gaXNzdWUgdGhhdCBjbGFuZyByZXBvcnRzIGFib3V0IG11dGxpcGxlIG91dHB1dAorIGZpbGVzCisKK0lzc3VlIGlzIHRoYXQgd2UgYXJlIHBhc3NpbmcgLmggZmlsZSB0byBsaW5rIHN0ZXAgYXMgc2VlbiBiZWxvdy4KKworfCBhcm0tb2UtbGludXgtZ251ZWFiaS1jbGFuZyAgLW1hcmNoPWFybXY3LWEgLW10aHVtYiAgLW1mbG9hdC1hYmk9aGFyZAorLW1mcHU9bmVvbi12ZnB2NCAtbXR1bmU9Y29ydGV4LWE3IC1EX19leHRlcm5fYWx3YXlzX2lubGluZT1pbmxpbmUKKy1uby1pbnRlZ3JhdGVkLWFzCistLXN5c3Jvb3Q9L21udC9ob21lL2tyYWovd29yay9hbmdzdHJvbS9zb3VyY2VzL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9yYXNwYmVycnlwaTIKKy1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkICBoYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8KK3V0bXAubyByZWJvb3QuaCAgIC1vIGhhbHQKK3wgY2xhbmctMy43OiBlcnJvcjogY2Fubm90IHNwZWNpZnkgLW8gd2hlbiBnZW5lcmF0aW5nIG11bHRpcGxlIG91dHB1dAorZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUgYi9zcmMvTWFrZWZpbGUKK2luZGV4IGU3N2VkNWYuLmE2ZjlmNDAgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUKKysrKyBiL3NyYy9NYWtlZmlsZQorQEAgLTEwMyw5ICsxMDMsOSBAQCBhbGw6CQkkKEJJTikgJChTQklOKSAkKFVTUkJJTikKKyBpbml0OgkJTERMSUJTICs9ICQoSU5JVExJQlMpICQoU1RBVElDKQorIGluaXQ6CQlpbml0Lm8gaW5pdF91dG1wLm8KKyAKKy1oYWx0OgkJaGFsdC5vIGlmZG93bi5vIGhkZG93bi5vIHV0bXAubyByZWJvb3QuaAorK2hhbHQ6CQloYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8gdXRtcC5vCisgCistbGFzdDoJCWxhc3QubyBvbGR1dG1wLmgKKytsYXN0OgkJbGFzdC5vCisgCisgbWVzZzoJCW1lc2cubworIAorQEAgLTEyMCw3ICsxMjAsNyBAQCBzdWxvZ2luOglzdWxvZ2luLm8KKyAKKyB3YWxsOgkJZG93YWxsLm8gd2FsbC5vCisgCistc2h1dGRvd246CWRvd2FsbC5vIHNodXRkb3duLm8gdXRtcC5vIHJlYm9vdC5oCisrc2h1dGRvd246CWRvd2FsbC5vIHNodXRkb3duLm8gdXRtcC5vCisgCisgYm9vdGxvZ2Q6CUxETElCUyArPSAtbHV0aWwKKyBib290bG9nZDoJYm9vdGxvZ2QubworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAxX2Jvb3Rsb2dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODlkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMV9ib290bG9nZApAQCAtMCwwICsxIEBACitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2Jvb3Qgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L2Jvb3Rsb2dkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGY1YWE0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L2Jvb3Rsb2dkLmluaXQKQEAgLTAsMCArMSw5OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgYm9vdGxvZ2QKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAyIDMgNCA1CisjIFNob3J0LURlc2NyaXB0aW9uOiBPbmUgb2YgdGhlIGZpcnN0IHNjcmlwdHMgdG8gYmUgZXhlY3V0ZWQuIFN0YXJ0cyBvciBzdG9wcworIyAgICAgICAgICAgICAgIHRoZSBib290bG9nZCBsb2cgcHJvZ3JhbS4gSWYgdGhpcyBzY3JpcHQgaXMgY2FsbGVkIGFzCisjICAgICAgICAgICAgICAgInN0b3AtYm9vdGxvZ2QiLCBpdCB3aWxsIHN0b3AgdGhlIGRhZW1vbiBpbnN0ZWFkIG9mCisjICAgICAgICAgICAgICAgc3RhcnRpbmcgaXQgZXZlbiB3aGVuIGNhbGxlZCB3aXRoIHRoZSAic3RhcnQiIGFyZ3VtZW50LgorIworIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS9zYmluL2Jvb3Rsb2dkCitOQU1FPWJvb3Rsb2dkCitERVNDPSJCb290bG9nIGRhZW1vbiIKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitbIC1yIC9ldGMvZGVmYXVsdC9ib290bG9nZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2Jvb3Rsb2dkCisKKyMjIHNldCAtZSAjIG5vdCBuZWVkZWQKKworY2FzZSAiJEJPT1RMT0dEX0VOQUJMRSIgaW4KKwlbTm5dKikKKwkJZXhpdCAwCisJCTs7Citlc2FjCisKK1NUT1BQRVI9CitBQ1RJT049IiQxIgorY2FzZSAiJDAiIGluCisJKnN0b3AtYm9vdGxvZyopCisJCVNUT1BQRVI9WQorCQlpZiBbICIkQUNUSU9OIiA9IHN0YXJ0IF0KKwkJdGhlbgorCQkJQUNUSU9OPXN0b3AKKwkJZmkKKwkJOzsKK2VzYWMKKworY2FzZSAiJEFDVElPTiIgaW4KKwlzdGFydCkKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJCWlmIFsgLWQgL3Byb2MvMS8uIF0KKwkJdGhlbgorCQkJdW1hc2sgMDI3CisJCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgXAorCQkJCS0tZXhlYyAkREFFTU9OIC0tIC1yIC1jCisJCWVsc2UKKwkJCSREQUVNT04gLXIgLWMKKwkJZmkKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIiROQU1FLiIKKwkJOzsKKwlzdG9wKQorCQkjIHN0b3AgbWF5IGdldCBjYWxsZWQgZHVyaW5nIGJvb3R1cCwgc28gbGV0IGl0IGhvbm9yCisJCSMgcmNTIFZFUkJPU0Ugc2V0dGluZworCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjICREQUVNT04KKworCQlpZiBbICIkU1RPUFBFUiIgXSAmJiBbICIkKHdoaWNoIHNhdmVsb2cgMj4vZGV2L251bGwpIiBdICYmIFwKKwkJICAgWyAtZiAvdmFyL2xvZy9ib290IF0gJiYgWyAtZiAvdmFyL2xvZy9ib290fiBdCisJCXRoZW4KKwkJCWNkIC92YXIvbG9nCisJCQljaGdycCBhZG0gYm9vdAorCQkJc2F2ZWxvZyAtcCAtYyA1IGJvb3QgPiAvZGV2L251bGwgMj4mMQorCQkJbXYgYm9vdC4wIGJvb3QKKwkJCW12IGJvb3R+IGJvb3QuMAorCQlmaQorCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICIkTkFNRS4iCisJCTs7CisJIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCQllY2hvIC1uICJSZXN0YXJ0aW5nICRERVNDOiAiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisJCXNsZWVwIDEKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAkREFFTU9OCisJCWVjaG8gIiROQU1FLiIKKwkJOzsKKwlzdGF0dXMpCisJCXN0YXR1cyAkREFFTU9OCisJCWV4aXQgJD8KKwkJOzsKKwkqKQorCQlOPSR7MCMjKi99CisJCU49JHtOI1tTS10/P30KKwkJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2NhNDFhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjCkBAIC0wLDAgKzEsMTgyIEBACisjIS9iaW4vc2gKKyMKKyMgcmMJCVRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcvc3RvcHBpbmcKKyMJCXNlcnZpY2VzIHdoZW4gdGhlIHJ1bmxldmVsIGNoYW5nZXMuCisjCisjCQlPcHRpbWl6YXRpb24gZmVhdHVyZToKKyMJCUEgc3RhcnR1cCBzY3JpcHQgaXMgX25vdF8gcnVuIHdoZW4gdGhlIHNlcnZpY2Ugd2FzCisjCQlydW5uaW5nIGluIHRoZSBwcmV2aW91cyBydW5sZXZlbCBhbmQgaXQgd2Fzbid0IHN0b3BwZWQKKyMJCWluIHRoZSBydW5sZXZlbCB0cmFuc2l0aW9uIChtb3N0IERlYmlhbiBzZXJ2aWNlcyBkb24ndAorIwkJaGF2ZSBLPz8gbGlua3MgaW4gcmN7MSwyLDMsNCw1fSApCisjCisjIEF1dGhvcjoJTWlxdWVsIHZhbiBTbW9vcmVuYnVyZyA8bWlxdWVsc0BjaXN0cm9uLm5sPgorIwkJQnJ1Y2UgUGVyZW5zIDxCcnVjZUBQaXhhci5jb20+CisjCisjIFZlcnNpb246CUAoIylyYyAgMi43OCAgMDctTm92LTE5OTkgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCisuIC9ldGMvZGVmYXVsdC9yY1MKK2V4cG9ydCBWRVJCT1NFCisKK3N0YXJ0dXBfcHJvZ3Jlc3MoKSB7CisgICAgc3RlcD0kKCgkc3RlcCArICRzdGVwX2NoYW5nZSkpCisgICAgaWYgWyAiJG51bV9zdGVwcyIgIT0gIjAiIF07IHRoZW4KKyAgICAgICAgcHJvZ3Jlc3M9JCgoKCRzdGVwICogJHByb2dyZXNzX3NpemUgLyAkbnVtX3N0ZXBzKSArICRmaXJzdF9zdGVwKSkKKyAgICBlbHNlCisgICAgICAgIHByb2dyZXNzPSRwcm9ncmVzc19zaXplCisgICAgZmkKKyAgICAjZWNobyAiUFJPR1JFU1MgaXMgJHByb2dyZXNzICRydW5sZXZlbCAkZmlyc3Rfc3RlcCArICgkc3RlcCBvZiAkbnVtX3N0ZXBzKSAkc3RlcF9jaGFuZ2UgJHByb2dyZXNzX3NpemUiCisgICAgI2lmIHR5cGUgcHNwbGFzaC13cml0ZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAjICAgIFRNUERJUj0vbW50Ly5wc3BsYXNoIHBzcGxhc2gtd3JpdGUgIlBST0dSRVNTICRwcm9ncmVzcyIgfHwgdHJ1ZQorICAgICNmaQorICAgIGlmIFsgLWUgL21udC8ucHNwbGFzaC9wc3BsYXNoX2ZpZm8gXTsgdGhlbgorICAgICAgICBlY2hvICJQUk9HUkVTUyAkcHJvZ3Jlc3MiID4gL21udC8ucHNwbGFzaC9wc3BsYXNoX2ZpZm8KKyAgICBmaQorfQorCisKKyMKKyMgU3RhcnQgc2NyaXB0IG9yIHByb2dyYW0uCisjCitzdGFydHVwKCkgeworICAjIEhhbmRsZSB2ZXJib3NpdHkKKyAgWyAiJFZFUkJPU0UiID0gdmVyeSBdICYmIGVjaG8gIklOSVQ6IFJ1bm5pbmcgJEAuLi4iCisKKyAgY2FzZSAiJDEiIGluCisJKi5zaCkKKwkJIyBTb3VyY2Ugc2hlbGwgc2NyaXB0IGZvciBzcGVlZC4KKwkJKAorCQkJdHJhcCAtIElOVCBRVUlUIFRTVFAKKwkJCXNjcmlwdG5hbWU9JDEKKwkJCXNoaWZ0CisJCQkuICRzY3JpcHRuYW1lCisJCSkKKwkJOzsKKwkqKQorCQkiJEAiCisJCTs7CisgIGVzYWMKKyAgc3RhcnR1cF9wcm9ncmVzcworfQorCisgICMgSWdub3JlIENUUkwtQyBvbmx5IGluIHRoaXMgc2hlbGwsIHNvIHdlIGNhbiBpbnRlcnJ1cHQgc3VicHJvY2Vzc2VzLgorICB0cmFwICI6IiBJTlQgUVVJVCBUU1RQCisKKyAgIyBTZXQgb25sY3IgdG8gYXZvaWQgc3RhaXJjYXNlIGVmZmVjdC4KKyAgc3R0eSBvbmxjciAwPiYxCisKKyAgIyBMaW1pdCBzdGFjayBzaXplIGZvciBzdGFydHVwIHNjcmlwdHMKKyAgWyAiJFNUQUNLX1NJWkUiID09ICIiIF0gfHwgdWxpbWl0IC1TIC1zICRTVEFDS19TSVpFCisKKyAgIyBOb3cgZmluZCBvdXQgd2hhdCB0aGUgY3VycmVudCBhbmQgd2hhdCB0aGUgcHJldmlvdXMgcnVubGV2ZWwgYXJlLgorCisgIHJ1bmxldmVsPSRSVU5MRVZFTAorICAjIEdldCBmaXJzdCBhcmd1bWVudC4gU2V0IG5ldyBydW5sZXZlbCB0byB0aGlzIGFyZ3VtZW50LgorICBbICIkMSIgIT0gIiIgXSAmJiBydW5sZXZlbD0kMQorICBpZiBbICIkcnVubGV2ZWwiID0gIiIgXQorICB0aGVuCisJZWNobyAiVXNhZ2U6ICQwIDxydW5sZXZlbD4iID4mMgorCWV4aXQgMQorICBmaQorICBwcmV2aW91cz0kUFJFVkxFVkVMCisgIFsgIiRwcmV2aW91cyIgPSAiIiBdICYmIHByZXZpb3VzPU4KKworICBleHBvcnQgcnVubGV2ZWwgcHJldmlvdXMKKworICAjIElzIHRoZXJlIGFuIHJjIGRpcmVjdG9yeSBmb3IgdGhpcyBuZXcgcnVubGV2ZWw/CisgIGlmIFsgLWQgL2V0Yy9yYyRydW5sZXZlbC5kIF0KKyAgdGhlbgorCSMgRmluZCBvdXQgd2hlcmUgaW4gdGhlIHByb2dyZXNzIGJhciB0aGUgaW5pdHJhbWZzIGdvdCB0by4KKwlQUk9HUkVTU19TVEFURT0wCisJI2lmIFsgLWYgL2Rldi8uaW5pdHJhbWZzL3Byb2dyZXNzX3N0YXRlIF07IHRoZW4KKwkjICAgIC4gL2Rldi8uaW5pdHJhbWZzL3Byb2dyZXNzX3N0YXRlCisJI2ZpCisKKwkjIFNwbGl0IHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcHJvZ3Jlc3MgYmFyIGludG8gdGhpcmRzCisJcHJvZ3Jlc3Nfc2l6ZT0kKCgoMTAwIC0gJFBST0dSRVNTX1NUQVRFKSAvIDMpKQorCisJY2FzZSAiJHJ1bmxldmVsIiBpbgorCQkwfDYpCisJCQkjIENvdW50IGRvd24gZnJvbSAtMTAwIHRvIDAgYW5kIHVzZSB0aGUgZW50aXJlIGJhcgorCQkJZmlyc3Rfc3RlcD0tMTAwCisJCQlwcm9ncmVzc19zaXplPTEwMAorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwkgICAgICAgIFMpCisJCQkjIEJlZ2luIHdoZXJlIHRoZSBpbml0cmFtZnMgbGVmdCBvZmYgYW5kIHVzZSAyLzMKKwkJCSMgb2YgdGhlIHJlbWFpbmluZyBzcGFjZQorCQkJZmlyc3Rfc3RlcD0kUFJPR1JFU1NfU1RBVEUKKwkJCXByb2dyZXNzX3NpemU9JCgoJHByb2dyZXNzX3NpemUgKiAyKSkKKwkJCXN0ZXBfY2hhbmdlPTEKKwkJCTs7CisJCSopCisJCQkjIEJlZ2luIHdoZXJlIHJjUyBsZWZ0IG9mZiBhbmQgdXNlIHRoZSBmaW5hbCAxLzMgb2YKKwkJCSMgdGhlIHNwYWNlIChieSBsZWF2aW5nIHByb2dyZXNzX3NpemUgdW5jaGFuZ2VkKQorCQkJZmlyc3Rfc3RlcD0kKCgkcHJvZ3Jlc3Nfc2l6ZSAqIDIgKyAkUFJPR1JFU1NfU1RBVEUpKQorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwllc2FjCisKKwludW1fc3RlcHM9MAorCWZvciBzIGluIC9ldGMvcmMkcnVubGV2ZWwuZC9bU0tdKjsgZG8KKyAgICAgICAgICAgIGNhc2UgIiR7cyMjL2V0Yy9yYyRydW5sZXZlbC5kL1M/P30iIGluCisgICAgICAgICAgICAgICAgZ2RtfHhkbXxrZG18cmVib290fGhhbHQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBudW1fc3RlcHM9JCgoJG51bV9zdGVwcyArIDEpKQorICAgICAgICBkb25lCisgICAgICAgIHN0ZXA9MAorCisJIyBGaXJzdCwgcnVuIHRoZSBLSUxMIHNjcmlwdHMuCisJaWYgWyAkcHJldmlvdXMgIT0gTiBdCisJdGhlbgorCQlmb3IgaSBpbiAvZXRjL3JjJHJ1bmxldmVsLmQvS1swLTldWzAtOV0qCisJCWRvCisJCQkjIENoZWNrIGlmIHRoZSBzY3JpcHQgaXMgdGhlcmUuCisJCQlbICEgLWYgJGkgXSAmJiBjb250aW51ZQorCisJCQkjIFN0b3AgdGhlIHNlcnZpY2UuCisJCQlzdGFydHVwICRpIHN0b3AKKwkJZG9uZQorCWZpCisKKwkjIE5vdyBydW4gdGhlIFNUQVJUIHNjcmlwdHMgZm9yIHRoaXMgcnVubGV2ZWwuCisJZm9yIGkgaW4gL2V0Yy9yYyRydW5sZXZlbC5kL1MqCisJZG8KKwkJWyAhIC1mICRpIF0gJiYgY29udGludWUKKworCQlpZiBbICRwcmV2aW91cyAhPSBOIF0gJiYgWyAkcHJldmlvdXMgIT0gUyBdCisJCXRoZW4KKwkJCSMKKwkJCSMgRmluZCBzdGFydCBzY3JpcHQgaW4gcHJldmlvdXMgcnVubGV2ZWwgYW5kCisJCQkjIHN0b3Agc2NyaXB0IGluIHRoaXMgcnVubGV2ZWwuCisJCQkjCisJCQlzdWZmaXg9JHtpIy9ldGMvcmMkcnVubGV2ZWwuZC9TWzAtOV1bMC05XX0KKwkJCXN0b3A9L2V0Yy9yYyRydW5sZXZlbC5kL0tbMC05XVswLTldJHN1ZmZpeAorCQkJcHJldmlvdXNfc3RhcnQ9L2V0Yy9yYyRwcmV2aW91cy5kL1NbMC05XVswLTldJHN1ZmZpeAorCQkJIworCQkJIyBJZiB0aGVyZSBpcyBhIHN0YXJ0IHNjcmlwdCBpbiB0aGUgcHJldmlvdXMgbGV2ZWwKKwkJCSMgYW5kIF9ub18gc3RvcCBzY3JpcHQgaW4gdGhpcyBsZXZlbCwgd2UgZG9uJ3QKKwkJCSMgaGF2ZSB0byByZS1zdGFydCB0aGUgc2VydmljZS4KKwkJCSMKKwkJCVsgLWYgJHByZXZpb3VzX3N0YXJ0IF0gJiYgWyAhIC1mICRzdG9wIF0gJiYgY29udGludWUKKwkJZmkKKwkJY2FzZSAiJHJ1bmxldmVsIiBpbgorCQkJMHw2KQorCQkJCXN0YXJ0dXAgJGkgc3RvcAorCQkJCTs7CisJCQkqKQorCQkJCXN0YXJ0dXAgJGkgc3RhcnQKKwkJCQk7OworCQllc2FjCisJZG9uZQorICBmaQorCisjVW5jb21tZW50IHRvIGNhdXNlIHBzcGxhc2ggdG8gZXhpdCBtYW51YWxseSwgb3RoZXJ3aXNlIGl0IGV4aXRzIHdoZW4gaXQgc2VlcyBhIFZDIHN3aXRjaAoraWYgWyAieCRydW5sZXZlbCIgIT0gInhTIiBdICYmIFsgISAteCAvZXRjL3JjJHtydW5sZXZlbH0uZC9TPz94c2VydmVyLW5vZG0gXTsgdGhlbgorICAgIGlmIHR5cGUgcHNwbGFzaC13cml0ZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgVE1QRElSPS9tbnQvLnBzcGxhc2ggcHNwbGFzaC13cml0ZSAiUVVJVCIgfHwgdHJ1ZQorICAgIAl1bW91bnQgLWwgL21udC8ucHNwbGFzaAorICAgIGZpCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4MGIwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisjCisjIHJjUwkJQ2FsbCBhbGwgUz8/KiBzY3JpcHRzIGluIC9ldGMvcmNTLmQgaW4KKyMJCW51bWVyaWNhbC9hbHBoYWJldGljYWwgb3JkZXIuCisjCisjIFZlcnNpb246CUAoIykvZXRjL2luaXQuZC9yY1MgIDIuNzYgIDE5LUFwci0xOTk5ICBtaXF1ZWxzQGNpc3Ryb24ubmwKKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorcnVubGV2ZWw9UworcHJldmxldmVsPU4KK3VtYXNrIDAyMgorZXhwb3J0IFBBVEggcnVubGV2ZWwgcHJldmxldmVsCisKKyMJTWFrZSBzdXJlIHByb2MgaXMgbW91bnRlZAorIworWyAtZCAiL3Byb2MvMSIgXSB8fCBtb3VudCAvcHJvYworCisjCisjCVNvdXJjZSBkZWZhdWx0cy4KKyMKKy4gL2V0Yy9kZWZhdWx0L3JjUworCisjCisjCVRyYXAgQ1RSTC1DICZjIG9ubHkgaW4gdGhpcyBzaGVsbCBzbyB3ZSBjYW4gaW50ZXJydXB0IHN1YnByb2Nlc3Nlcy4KKyMKK3RyYXAgIjoiIElOVCBRVUlUIFRTVFAKKworIworIwlDYWxsIGFsbCBwYXJ0cyBpbiBvcmRlci4KKyMKK2V4ZWMgL2V0Yy9pbml0LmQvcmMgUworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5Y2RmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUy1kZWZhdWx0CkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMJRGVmYXVsdHMgZm9yIHRoZSBib290IHNjcmlwdHMgaW4gL2V0Yy9yY1MuZAorIworCisjIFRpbWUgZmlsZXMgaW4gL3RtcCBhcmUga2VwdCBpbiBkYXlzLgorVE1QVElNRT0wCisjIFNldCB0byB5ZXMgaWYgeW91IHdhbnQgc3Vsb2dpbiB0byBiZSBzcGF3bmVkIG9uIGJvb3R1cAorU1VMT0dJTj1ubworIyBTZXQgdG8gbm8gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBsb2dpbiBvdmVyIHRlbG5ldC9ybG9naW4KKyMgYmVmb3JlIHN5c3RlbSBzdGFydHVwIGlzIGNvbXBsZXRlIChhcyBzb29uIGFzIGluZXRkIGlzIHN0YXJ0ZWQpCitERUxBWUxPR0lOPW5vCisjIEFzc3VtZSB0aGF0IHRoZSBCSU9TIGNsb2NrIGlzIHNldCB0byBVVEMgdGltZSAocmVjb21tZW5kZWQpCitVVEM9eWVzCisjIFNldCBWRVJCT1NFIHRvICJubyIgaWYgeW91IHdvdWxkIGxpa2UgYSBtb3JlIHF1aWV0IGJvb3R1cC4KK1ZFUkJPU0U9bm8KKyMgU2V0IEVESVRNT1REIHRvICJubyIgaWYgeW91IGRvbid0IHdhbnQgL2V0Yy9tb3RkIHRvIGJlIGVkaXRlZCBhdXRvbWF0aWNhbGx5CitFRElUTU9URD1ubworIyBXaGV0aGVyIHRvIGZzY2sgcm9vdCBvbiBib290CitFTkFCTEVfUk9PVEZTX0ZTQ0s9bm8KKyMgU2V0IEZTQ0tGSVggdG8gInllcyIgaWYgeW91IHdhbnQgdG8gYWRkICIteSIgdG8gdGhlIGZzY2sgYXQgc3RhcnR1cC4KK0ZTQ0tGSVg9eWVzCisjIFNldCBUSUNLQURKIHRvIHRoZSBjb3JyZWN0IHRpY2sgdmFsdWUgZm9yIHRoaXMgc3BlY2lmaWMgbWFjaGluZQorI1RJQ0tBREo9MTAwMDAKKyMgRW5hYmxlIGNhY2hpbmcgaW4gcG9wdWxhdGUtdm9sYXRpbGUuc2gKK1ZPTEFUSUxFX0VOQUJMRV9DQUNIRT15ZXMKKyMgSW5kaWNhdGUgd2hldGhlciB0aGUgcm9vdGZzIGlzIGludGVuZGVkIHRvIGJlIHJlYWQtb25seSBvciBub3QuCisjIFNldHRpbmcgUk9PVEZTX1JFQURfT05MWSB0byB5ZXMgYW5kIHJlYm9vdGluZyB3aWxsIGdpdmUgeW91IGEgcmVhZC1vbmx5IHJvb3Rmcy4KKyMgTm9ybWFsbHkgeW91IHNob3VsZCBub3QgY2hhbmdlIHRoaXMgdmFsdWUuCitST09URlNfUkVBRF9PTkxZPW5vCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXRfMi44OGRzZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZlMzllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXRfMi44OGRzZi5iYgpAQCAtMCwwICsxLDEwOCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0tViBsaWtlIGluaXQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gYm9vdCBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zLiAgSXQgcHJvdmlkZXMgdGhlIC9zYmluL2luaXQgcHJvZ3JhbS4gIFRoaXMgaXMgdGhlIGZpcnN0IHByb2Nlc3Mgc3RhcnRlZCBvbiBib290LCBhbmQgdGhlIGxhc3QgcHJvY2VzcyB0ZXJtaW5hdGVkIGJlZm9yZSB0aGUgc3lzdGVtIGhhbHRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3N5c3Zpbml0LyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWVJJR0hUO2VuZGxpbmU9MTU7bWQ1PTM0OWM4NzJlMDA2NjE1NWUxODE4Yjc4NjkzODg3NmE0IgorUFIgPSAicjE0IgorCitSREVQRU5EU18ke1BOfSA9ICIke1BOfS1pbml0dGFiIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vc3lzdmluaXQvc3lzdmluaXQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0LWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9waWRvZi1hZGQtbS1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JjUy1kZWZhdWx0IFwKKyAgICAgICAgICAgZmlsZTovL3JjIFwKKyAgICAgICAgICAgZmlsZTovL3JjUyBcCisgICAgICAgICAgIGZpbGU6Ly9ib290bG9nZC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovLzAxX2Jvb3Rsb2dkIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZlZGE4YTk3Yjg2ZTBhNmY1OWRhYmJmMjUyMDJhYTZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwYmJjOGMxZTE3OTIwNTZlMjM3NjFkMjI5NjBiMzBiYjEzZWNjYzJjYWJmZjhjNzMxMGEwMWY0ZDVkZjE1MTkiCisKK1MgPSAiJHtXT1JLRElSfS9zeXN2aW5pdC0ke1BWfSIKK0IgPSAiJHtTfS9zcmMiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworREVQRU5EU19hcHBlbmQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSBiYXNlLXBhc3N3ZCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaW5pdCBtb3VudHBvaW50IGhhbHQgcmVib290IHJ1bmxldmVsIHNodXRkb3duIHBvd2Vyb2ZmIGxhc3QgbGFzdGIgbWVzZyB1dG1wZHVtcCB3YWxsIgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpbml0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5pdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2luaXRdID0gIjUwIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludF0gPSAiJHtiYXNlX2JpbmRpcn0vbW91bnRwb2ludCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtoYWx0XSA9ICIke2Jhc2Vfc2JpbmRpcn0vaGFsdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWJvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9yZWJvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcnVubGV2ZWxdID0gIiR7YmFzZV9zYmluZGlyfS9ydW5sZXZlbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzaHV0ZG93bl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bvd2Vyb2ZmXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcG93ZXJvZmYiCisKK0FMVEVSTkFUSVZFXyR7UE59LXBpZG9mID0gInBpZG9mIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3BpZG9mXSA9ICIke2Jhc2VfYmluZGlyfS9waWRvZiIKKworQUxURVJOQVRJVkVfJHtQTn0tc3Vsb2dpbiA9ICJzdWxvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW5dID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibW91bnRwb2ludC4xIGxhc3QuMSBtZXNnLjEgd2FsbC4xIHN1bG9naW4uOCB1dG1wZHVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGFzdC4xXSA9ICIke21hbmRpcn0vbWFuMS9sYXN0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWVzZy4xXSA9ICIke21hbmRpcn0vbWFuMS9tZXNnLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludC4xXSA9ICIke21hbmRpcn0vbWFuMS9tb3VudHBvaW50LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9zdWxvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXRtcGR1bXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXRtcGR1bXAuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt3YWxsLjFdID0gIiR7bWFuZGlyfS9tYW4xL3dhbGwuMSIKKworUEFDS0FHRVMgPSsgInN5c3Zpbml0LXBpZG9mIHN5c3Zpbml0LXN1bG9naW4iCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX3NiaW5kaXJ9LyogJHtiYXNlX2JpbmRpcn0vKiIKK0ZJTEVTX3N5c3Zpbml0LXBpZG9mID0gIiR7YmFzZV9iaW5kaXJ9L3BpZG9mLnN5c3Zpbml0ICR7YmFzZV9zYmluZGlyfS9raWxsYWxsNSIKK0ZJTEVTX3N5c3Zpbml0LXN1bG9naW4gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4uc3lzdmluaXQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJzeXN2aW5pdC1waWRvZiBpbml0c2NyaXB0cy1mdW5jdGlvbnMiCisKK0NGTEFHU19wcmVwZW5kID0gIi1EX0dOVV9TT1VSQ0UgIgorZXhwb3J0IExDUllQVCA9ICItbGNyeXB0IgorRVhUUkFfT0VNQUtFICs9ICInYmFzZV9iaW5kaXI9JHtiYXNlX2JpbmRpcn0nIFwKKwkJICdiYXNlX3NiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9JyBcCisJCSAnYmluZGlyPSR7YmluZGlyfScgXAorCQkgJ3NiaW5kaXI9JHtzYmluZGlyfScgXAorCQkgJ3N5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorCQkgJ2luY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfScgXAorCQkgJ21hbmRpcj0ke21hbmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdST09UPSR7RH0nIGluc3RhbGwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0gXAorCQkgICAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0IFwKKwkJICAgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJZm9yIGxldmVsIGluIFMgMCAxIDIgMyA0IDUgNjsgZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYyRsZXZlbC5kCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vcmNTLWRlZmF1bHQJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9yY1MKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yYwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcmNTCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9ib290bG9nZC5pbml0ICAgICAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYm9vdGxvZ2QKKwlsbiAtc2YgYm9vdGxvZ2QgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N0b3AtYm9vdGxvZ2QKKworCXVwZGF0ZS1yYy5kIC1yICR7RH0gYm9vdGxvZ2Qgc3RhcnQgMDcgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBzdG9wLWJvb3Rsb2dkIHN0YXJ0IDk5IDIgMyA0IDUgLgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzAxX2Jvb3Rsb2dkICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisKKwljaG93biByb290LnNodXRkb3duICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaGFsdCAke0R9JHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duCisJY2htb2Qgby14LHUrcyAke0R9JHtiYXNlX3NiaW5kaXJ9L2hhbHQgJHtEfSR7YmFzZV9zYmluZGlyfS9zaHV0ZG93bgorfQorCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3Zpbml0JyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9mdW5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2M4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCkBAIC0wLDAgKzEsNDc0IEBACithNjRsCithYnMKK2FjY2VzcworX19hZGp0aW1leAorYWxhcm0KK2FscGhhc29ydAorYXJnel9hcHBlbmQKK19fYXJnel9jb3VudAorYXJnel9jcmVhdGVfc2VwCithcmd6X2luc2VydAorX19hcmd6X25leHQKK2FyZ3pfbmV4dAorX19hcmd6X3N0cmluZ2lmeQorYXJnel9zdHJpbmdpZnkKK2FzcHJpbnRmCithdGV4aXQKK2F0b2YKK2F0b2kKK2JjbXAKK2Jjb3B5CitiaW5kcmVzdnBvcnQKK2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CitidG93YworYnplcm8KK2NhbGxvYworY2Fub25pY2FsaXplX2ZpbGVfbmFtZQorY2F0Z2V0cworY2ZnZXRvc3BlZWQKK2Nmc2V0aXNwZWVkCitjZnNldHNwZWVkCitjaG1vZAorY2hvd24KK2Nocm9vdAorY2xvY2sKK2Nsb3NlCitjbG9zZWRpcgorY2xvc2Vsb2cKK2NvbmZzdHIKK2Nvbm5lY3QKK2RhZW1vbgorZGNnZXR0ZXh0CitkaWZmdGltZQorZGlyZmQKK2Rpcm5hbWUKK2RuZ2V0dGV4dAorZHVwMgorZWN2dAorZW5kZ3JlbnQKK2VuZG1udGVudAorZW5kcHdlbnQKK2VuZHV0ZW50CitlbmR1dHhlbnQKK2Vwb2xsX2N0bAorZXJyCitldGhlcl9ob3N0dG9uCitldGhlcl9udG9ob3N0CitldWlkYWNjZXNzCitleGVjdgorZmNoZGlyCitmY2htb2QKK2ZjaG1vZGF0CitmY2hvd24KK2ZjaG93bmF0CitmY250bAorZmN2dAorZmRhdGFzeW5jCitmZG9wZW5kaXIKK2Zlb2ZfdW5sb2NrZWQKK2ZnZXRzX3VubG9ja2VkCitmZ2V0eGF0dHIKK2Zpbml0ZQorZmxpc3R4YXR0cgorZmxvY2sKK2Zsb2NrZmlsZQorZm5tYXRjaAorZm9yaworZnBhdGhjb25mCitfX2ZwZW5kaW5nCitmcHJpbnRmCitmcmVlCitmcmVlYWRkcmluZm8KK2ZyZWVpZmFkZHJzCitmc2Vla28KK19fZnNldGxvY2tpbmcKK2ZzZXR4YXR0cgorZnN0YXQ2NAorZnN0YXQKK2ZzdGF0ZnMKK2ZzeW5jCitmdGVsbG8KK2Z0aW1lCitmdHJ1bmNhdGUKK2Z1bmxvY2tmaWxlCitmdXRpbWVzCitmdXRpbWVzYXQKK2dhaV9zdHJlcnJvcgorZ2N2dAorZ2V0YWRkcmluZm8KK2dldGNfdW5sb2NrZWQKK2dldGN3ZAorZ2V0ZGVsaW0KK2dldGRvbWFpbm5hbWUKK2dldGR0YWJsZXNpemUKK2dldGVnaWQKK2dldGVudgorZ2V0ZXVpZAorZ2V0Z2lkCitnZXRncmVudAorZ2V0Z3JlbnRfcgorZ2V0Z3JnaWRfcgorZ2V0Z3JuYW0KK2dldGdybmFtX3IKK2dldGdyb3VwbGlzdAorZ2V0Z3JvdXBzCitnZXRob3N0YnlhZGRyX3IKK2dldGhvc3RieW5hbWUyCitnZXRob3N0YnluYW1lCitnZXRob3N0YnluYW1lX3IKK2dldGhvc3RlbnQKK2dldGhvc3RpZAorZ2V0aG9zdG5hbWUKK2dldGlmYWRkcnMKK2dldGxpbmUKK2dldGxvYWRhdmcKK2dldG1udGVudAorZ2V0bXNnCitnZXRuYW1laW5mbworZ2V0bmV0YnlhZGRyX3IKK2dldG5ldGdyZW50X3IKK2dldG9wdAorZ2V0b3B0X2xvbmcKK2dldG9wdF9sb25nX29ubHkKK2dldHBhZ2VzaXplCitnZXRwYXNzCitnZXRwZWVybmFtZQorZ2V0cGdycAorZ2V0cGlkCitnZXRwcGlkCitnZXRwcm90b2VudF9yCitnZXRwd2VudAorZ2V0cHdlbnRfcgorZ2V0cHduYW0KK2dldHB3bmFtX3IKK2dldHB3dWlkCitnZXRwd3VpZF9yCitnZXRyZXN1aWQKK2dldHJsaW1pdAorZ2V0cnVzYWdlCitnZXRzZXJ2YnluYW1lCitnZXRzZXJ2YnluYW1lX3IKK2dldHNlcnZieXBvcnRfcgorZ2V0c2VydmVudAorZ2V0c2VydmVudF9yCitnZXRzcG5hbQorZ2V0c3BuYW1fcgorZ2V0dGltZW9mZGF5CitnZXR0dHllbnQKK2dldHR0eW5hbQorZ2V0dWlkCitnZXR1c2Vyc2hlbGwKK2dldHV0ZW50CitnZXR1dGlkCitnZXR1dGxpbmUKK2dldHV0bXAKK2dldHV0bXB4CitnZXR1dHhlbnQKK2dldHV0eGlkCitnZXR1dHhsaW5lCitnZXR3ZAorZ2V0eGF0dHIKK2dsb2IKK2dtdGltZQorZ210aW1lX3IKK2dyYW50cHQKK2dyb3VwX21lbWJlcgoraGVycm9yCitoc3RyZXJyb3IKK2ljb252CitpY29udl9vcGVuCitpZl9mcmVlbmFtZWluZGV4CitpZl9pbmRleHRvbmFtZQoraWZfbmFtZWluZGV4CitpZl9uYW1ldG9pbmRleAoraW5kZXgKK2luZXRfYWRkcgoraW5ldF9hdG9uCitpbmV0X250b2EKK2luZXRfbnRvcAoraW5ldF9wdG9uCitpbml0Z3JvdXBzCitpbm5ldGdyCitpcnVzZXJvaworaXNhc2NpaQoraXNhdHR5Citpc2JsYW5rCitpc2dyYXBoCitpc2luZgoraXNuYW4KK2lzcHJpbnQKK2lzc3BhY2UKK2lzd2FsbnVtCitpc3djbnRybAoraXN3Y3R5cGUKK2lzd3ByaW50Citpc3dzcGFjZQoraXN3dXBwZXIKK2lzeGRpZ2l0CitraWxsCitraWxscGcKK2xjaG93bgorbGNrcHdkZgorbGdldHhhdHRyCitsaW5rCitsaXN0eGF0dHIKK2xsaXN0eGF0dHIKK2xvY2FsdGltZQorbG9jYWx0aW1lX3IKK2xvY2tmCitscmFuZDQ4Citsc2VhcmNoCitsc2VlazY0Citsc2V0eGF0dHIKK2xzdGF0CittYWxsaW5mbworbWFsbG9jCittYmxlbgorbWJybGVuCittYnJ0b3djCittYnNpbml0CittYnNydG93Y3MKK21idG93YworbWVtYWxpZ24KK21lbWNocgorbWVtY21wCittZW1jcHkKK21lbW1vdmUKK21lbXBjcHkKK21lbXJjaHIKK21lbXNldAorbWtkaXIKK21rZGlyYXQKK21rZHRlbXAKK21rZmlmbworbWtub2QKK21rc3RlbXA2NAorbWtzdGVtcAorbWt0aW1lCittbG9jaworbW1hcAorbXRyYWNlCittdW5sb2NrCittdW5tYXAKK25hbm9zbGVlcAorbmljZQorbmxfbGFuZ2luZm8KK250cF9hZGp0aW1lCitudHBfZ2V0dGltZQorX29ic3RhY2tfZnJlZQorb25fZXhpdAorb3BlbjY0CitvcGVuCitvcGVuYXQKK29wZW5kaXIKK29wZW5sb2cKK3BhdGhjb25mCitwaXBlCitwb2xsCitwb3BlbgorcG9zaXhfbWVtYWxpZ24KK3ByY3RsCitwcmVhZAorcHJpbnRmCitfX3Byb2duYW1lCitwc2VsZWN0CitwdGhyZWFkX211dGV4X2xvY2sKK3B0c25hbWUKK3B1dGVudgorcHV0Z3JlbnQKK3B1dHB3ZW50CitwdXRzcGVudAorcHV0dXRsaW5lCitwdXR1dHhsaW5lCitwdXR3YworcHdyaXRlCitxc29ydAorcmFpc2UKK3JhbmQKK3JhbmRvbQorcmFuZF9yCityZWFkCityZWFkZGlyCityZWFkZGlyX3IKK3JlYWRsaW5rCityZWFsbG9jCityZWFscGF0aAorcmVfY29tcAorcmVjdm1zZworcmVfZXhlYworcmVnY29tcAorcmVnZXhlYworcmVtb3ZlCityZW5hbWUKK3JlX3NlYXJjaAorcm1kaXIKK3JwbWF0Y2gKK3JyZXN2cG9ydF9hZgorcnVzZXJvaworcnVzZXJva19hZgorc2Jyaworc2NhbmRpcgorc2NoZWRfc2V0c2NoZWR1bGVyCitzY2hlZF95aWVsZAorX19zZWN1cmVfZ2V0ZW52CitzZWxlY3QKK3NlbWN0bAorc2VtZ2V0CitzZW5kbXNnCitzZXRidWYKK3NldGJ1ZmZlcgorc2V0ZWdpZAorc2V0ZW52CitzZXRldWlkCitzZXRnaWQKK3NldGdyb3Vwcworc2V0aG9zdG5hbWUKK3NldGl0aW1lcgorX3NldGptcAorc2V0am1wCitzZXRsaW5lYnVmCitzZXRsb2NhbGUKK3NldG1udGVudAorc2V0cGdpZAorc2V0cGdycAorc2V0cHJpb3JpdHkKK3NldHJlZ2lkCitzZXRyZXNnaWQKK3NldHJlc3VpZAorc2V0cmV1aWQKK3NldHJsaW1pdAorc2V0c2lkCitzZXRzb2Nrb3B0CitzZXR0aW1lb2ZkYXkKK3NldHVpZAorc2V0dXRlbnQKK3NldHV0eGVudAorc2V0dmJ1Zgorc2V0eGF0dHIKK3NnZXRzcGVudAorc2htYXQKK3NobWN0bAorc2htZHQKK3NobWdldAorc2h1dGRvd24KK3NpZ2FjdGlvbgorc2lnYWRkc2V0CitzaWdhbHRzdGFjaworc2lnYmxvY2sKK3NpZ2VtcHR5c2V0CitzaWdob2xkCitzaWdpbnRlcnJ1cHQKK3NpZ25hbAorc2lncHJvY21hc2sKK3NpZ3NldAorc2lnc2V0bWFzaworc2lnc3RhY2sKK3NpZ3N1c3BlbmQKK3NpZ3ZlYworc25wcmludGYKK3NvY2tldAorc29ja2V0cGFpcgorc3ByaW50Zgorc3JhbmQ0OAorc3JhbmQKK3NyYW5kb20KK3NzY2FuZgorc3RhdAorc3RhdGZzCitzdGF0dmZzCitzdGltZQorc3RwY3B5CitzdHJjYXNlY21wCitzdHJjYXNlc3RyCitzdHJjaHIKK3N0cmNocm51bAorc3RyY21wCitzdHJjc3BuCitzdHJkdXAKK3N0cmVycm9yCitzdHJlcnJvcl9yCitzdHJmdGltZQorc3RybGVuCitzdHJuY2FzZWNtcAorc3RybmNtcAorc3RybmR1cAorc3Rybmxlbgorc3RycGJyaworc3RycHRpbWUKK3N0cnJjaHIKK3N0cnNlcAorc3Ryc2lnbmFsCitzdHJzcG4KK3N0cnN0cgorc3RydG9kCitzdHJ0b2ltYXgKK3N0cnRva19yCitzdHJ0b2wKK3N0cnRvbGwKK3N0cnRvdWwKK3N0cnRvdWxsCitzdHJ0b3VtYXgKK3N0cnZlcnNjbXAKK3N0cnhmcm0KK3N5bWxpbmsKK3N5bmMKK3N5c2NvbmYKK3N5c2N0bAorc3lzaW5mbworc3lzbG9nCitfc3lzX3NpZ2xpc3QKK3N5c19zaWdsaXN0CitzeXN0ZW0KK3RjZ2V0YXR0cgordGNnZXRwZ3JwCit0Y3NldGF0dHIKK3Rjc2V0cGdycAordGltZQordGltZWdtCit0aW1lcwordGltZXpvbmUKK3RtcG5hbQordG93bG93ZXIKK3Rvd3VwcGVyCit0cnVuY2F0ZQordHNlYXJjaAordHR5bmFtZQordHpzZXQKK3VsaW1pdAordW1hc2sKK3VuYW1lCit1bmxpbmsKK3Vuc2V0ZW52Cit1bnNoYXJlCit1cGR3dG1wCit1cGR3dG1weAordXNsZWVwCit1c3RhdAordXRpbWUKK3V0aW1lcwordXRtcG5hbWUKK3V0bXB4bmFtZQordmFsbG9jCit2YXNwcmludGYKK3ZlcnJ4Cit2Zm9yawordmZwcmludGYKK3Zmc2NhbmYKK3ZoYW5ndXAKK3ZwcmludGYKK3ZzbnByaW50ZgordnNwcmludGYKK3dhaXQzCit3YWl0NAord2FpdHBpZAord2NydG9tYgord2NzY29sbAord2NzZHVwCit3Y3NsZW4KK3djdG9iCit3Y3RvbWIKK3djdHlwZQord2N3aWR0aAord21lbWNocgord21lbWNweQord21lbXBjcHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5YWI1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsMTU2IEBACithaW8uaAorYWxsb2NhLmgKK2FyZ3ouaAorYXJwYS9pbmV0LmgKK2FycGEvbmFtZXNlci5oCithc20vYnl0ZW9yZGVyLmgKK2FzbS9pb2N0bHMuaAorYXNtL3BhZ2UuaAorYXNtL3R5cGVzLmgKK2Fzc2VydC5oCitieXRlc3dhcC5oCitjcnlwdC5oCitjdHlwZS5oCitkaXJlbnQuaAorZGxmY24uaAorZWxmLmgKK2VuZGlhbi5oCitlcnIuaAorZXJybm8uaAorZXhlY2luZm8uaAorZmNudGwuaAorZmVhdHVyZXMuaAorZmxvYXQuaAorZnN0YWIuaAorZnR3LmgKK2dldG9wdC5oCitnbG9iLmgKK2dycC5oCitpY29udi5oCitpZmFkZHJzLmgKK2ludHR5cGVzLmgKK2xhbmdpbmZvLmgKK2xhc3Rsb2cuaAorbGliZ2VuLmgKK2xpYmludGwuaAorbGltaXRzLmgKK2xpbnV4L2NhcGFiaWxpdHkuaAorbGludXgvZmQuaAorbGludXgvZnMuaAorbGludXgvaGF5ZXNlc3AuaAorbGludXgvaGRyZWcuaAorbGludXgvaWNtcC5oCitsaW51eC9pbjYuaAorbGludXgvam95c3RpY2suaAorbGludXgvcHRyYWNlLmgKK2xpbnV4L3NlcmlhbC5oCitsaW51eC9zb255cGkuaAorbGludXgvdW5pc3RkLmgKK2xpbnV4L3V0c25hbWUuaAorbGludXgvdmVyc2lvbi5oCitsb2NhbGUuaAorbWFsbG9jLmgKK21hdGguaAorbWNoZWNrLmgKK21lbW9yeS5oCittbnRlbnQuaAorbXF1ZXVlLmgKK25ldGRiLmgKK25ldC9pZi5oCituZXRpbmV0L2V0aGVyLmgKK25ldGluZXQvaW4uaAorbmV0aW5ldC9pcDYuaAorbmV0aW5ldC9pcC5oCituZXRpbmV0L3RjcC5oCituZXRpbmV0L3VkcC5oCituZXRpcHgvaXB4LmgKK25ldC9yb3V0ZS5oCitwYXRocy5oCitwb2xsLmgKK3B0aHJlYWQuaAorcHR5LmgKK3B3ZC5oCityZWdleC5oCityZXNvbHYuaAorcnBjL3JwYy5oCitycGMvdHlwZXMuaAorc2NoZWQuaAorc2NzaS9zY3NpLmgKK3NlYXJjaC5oCitzZW1hcGhvcmUuaAorc2V0am1wLmgKK3NndHR5LmgKK3NoYWRvdy5oCitzaWduYWwuaAorc3RkYXJnLmgKK3N0ZGJvb2wuaAorc3RkYworc3RkZGVmLmgKK3N0ZGludC5oCitzdGRpby5oCitzdGRsaWIuaAorc3RyaW5nLmgKK3N0cmluZ3MuaAorc3Ryb3B0cy5oCitzeXMvYml0eXBlcy5oCitzeXMvY2RlZnMuaAorc3lzL2Rpci5oCitzeXMvZXBvbGwuaAorc3lzZXhpdHMuaAorc3lzL2ZjbnRsLmgKK3N5cy9maWxlLmgKK3N5cy9mc3VpZC5oCitzeXMvaW9jdGwuaAorc3lzL2lwYy5oCitzeXNsb2cuaAorc3lzL21tYW4uaAorc3lzL21vdW50LmgKK3N5cy9tdGlvLmgKK3N5cy9wYXJhbS5oCitzeXMvcG9sbC5oCitzeXMvcHJjdGwuaAorc3lzL3B0cmFjZS5oCitzeXMvcXVldWUuaAorc3lzL3JlZy5oCitzeXMvcmVzb3VyY2UuaAorc3lzL3NlbGVjdC5oCitzeXMvc2VtLmgKK3N5cy9zaG0uaAorc3lzL3NpZ25hbC5oCitzeXMvc29ja2V0LmgKK3N5cy9zb2NrZXR2YXIuaAorc3lzL3NvdW5kY2FyZC5oCitzeXMvc3RhdGZzLmgKK3N5cy9zdGF0LmgKK3N5cy9zdGF0dmZzLmgKK3N5cy9zdHJvcHRzLmgKK3N5cy9zd2FwLmgKK3N5cy9zeXNjdGwuaAorc3lzL3N5c2luZm8uaAorc3lzL3N5c21hY3Jvcy5oCitzeXMvdGVybWlvcy5oCitzeXMvdGltZWIuaAorc3lzL3RpbWUuaAorc3lzL3RpbWVzLmgKK3N5cy90aW1leC5oCitzeXMvdHlwZXMuaAorc3lzL3Vpby5oCitzeXMvdW4uaAorc3lzL3VuaXN0ZC5oCitzeXMvdXNlci5oCitzeXMvdXRzbmFtZS5oCitzeXMvdmZzLmgKK3N5cy93YWl0LmgKK3Rlcm1pby5oCit0ZXJtaW9zLmgKK3RpbWUuaAordHR5ZW50LmgKK3VsaW1pdC5oCit1bmlzdGQuaAordXN0YXQuaAordXRpbWUuaAordXRtcC5oCit1dG1weC5oCit2YWx1ZXMuaAord2NoYXIuaAord2N0eXBlLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy9zaXRlX2NvbmZpZy90eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhiZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzCkBAIC0wLDAgKzEsMjEgQEAKK2NoYXIKK2NoYXIgKgorZG91YmxlCitmbG9hdAoraW50Citsb25nCitsb25nIGRvdWJsZQorbG9uZyBpbnQKK2xvbmcgbG9uZworbG9uZyBsb25nIGludAorc2hvcnQKK3Nob3J0IGludAorc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGludAordW5zaWduZWQgbG9uZwordW5zaWduZWQgbG9uZyBpbnQKK3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQKK3Vuc2lnbmVkIHNob3J0Cit1bnNpZ25lZCBzaG9ydCBpbnQKK3ZvaWQgKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1jb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKQEAgLTAsMCArMSwxNDIgQEAKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgoraW5oZXJpdCBjbWwxCisjCisjIFNldCB0aGUgQVJDSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdUNsaWJjIGNvbXBpbGF0aW9uLgorIyBSZXR1cm4gdmFsdWUgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIGFyY2hpdGVjdHVyZXMga25vd24gdG8gdUNsaWJjOgorIyBsaWJjL3N5c2RlcHMvKi8qCisjCisKK3ZhbGlkX2FyY2hzID0gIlwKK2FscGhhIFwKK2FybSBcCithdnIzMiBcCitiZmluIFwKK2M2eCBcCitjcmlzIFwKK2UxIFwKK2ZydiBcCitoODMwMCBcCitocHBhIFwKK2kzODYgXAoraTk2MCBcCitpYTY0IFwKK202OGsgXAorbWljcm9ibGF6ZSBcCittaXBzIFwKK25pb3MgXAorbmlvczIgXAorcG93ZXJwYyBcCitzaCBcCitzaDY0IFwKK3NwYXJjIFwKK3Y4NTAgXAordmF4IFwKK3g4Nl82NCBcCit4dGVuc2EgXAorIgorZGVmIG1hcF91Y2xpYmNfYXJjaChhLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHVDbGliYyBhcmNoaXRlY3R1cmUgZm9yIHRoZSBnaXZlbiBUQVJHRVRfQVJDSC4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIHZhbGlkX2FyY2hzID0gZC5nZXRWYXIoJ3ZhbGlkX2FyY2hzJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgaWYgcmUubWF0Y2goJ14oYXJtfHNhMTEwKS4qJywgYSk6CisgICAgICAgIHJldHVybiAnYXJtJworICAgIGVsaWYgcmUubWF0Y2goJ14oaS44NnxhdGhsb24pJCcsIGEpOgorICAgICAgICByZXR1cm4gJ2kzODYnCisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKicsIGEpOgorICAgICAgICByZXR1cm4gJ21pcHMnCisgICAgZWxpZiByZS5tYXRjaCgnXnBhcmlzYy4qJywgYSk6CisgICAgICAgIHJldHVybiAnaHBwYScKKyAgICBlbGlmIHJlLm1hdGNoKCdecHBjLionLCBhKToKKyAgICAgICAgcmV0dXJuICdwb3dlcnBjJworICAgIGVsaWYgcmUubWF0Y2goJ15zMzkwLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzMzkwJworICAgIGVsaWYgcmUubWF0Y2goJ15zaC4qJywgYSk6CisgICAgICAgIHJldHVybiAnc2gnCisgICAgZWxpZiByZS5tYXRjaCgnXihzdW58c3BhcmMpLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzcGFyYycKKyAgICBlbGlmIHJlLm1hdGNoKCdeeHRlbnNhLionLCBhKToKKyAgICAgICAgcmV0dXJuICd4dGVuc2EnCisgICAgZWxpZiBhIGluIHZhbGlkX2FyY2hzOgorICAgICAgICByZXR1cm4gYQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJjYW5ub3QgbWFwICclcycgdG8gYSB1Q2xpYmMgYXJjaGl0ZWN0dXJlIiAlIGEpCisKK2V4cG9ydCBVQ0xJQkNfQVJDSCA9ICIke0BtYXBfdWNsaWJjX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Y2xpYmNfYWJpKG8sIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIEFCSSBmb3IgdGhlIGdpdmVuIFRBUkdFVF9PUy4iIiIKKyAgICBpbXBvcnQgcmUKKworICAgIGFyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIG1hcF91Y2xpYmNfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCkgPT0gImFybSI6CisgICAgICAgIGlmIHJlLm1hdGNoKCcuKmVhYmkkJywgbyk6CisgICAgICAgICAgICByZXR1cm4gJ0FSTV9FQUJJJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBUk1fT0FCSScKKyAgICAjIEZJWE1FOiBUaGlzIGlzIGluYWNjdXJhdGUhIEhhbmRsZSBvMzIsIG4zMiwgbjY0CisgICAgZWxpZiByZS5tYXRjaCgnXm1pcHMuKjY0JCcsIGFyY2gpOgorICAgICAgICByZXR1cm4gJ01JUFNfTjY0X0FCSScKKyAgICBlbGlmIHJlLm1hdGNoKCdebWlwcy4qJywgYXJjaCk6CisgICAgICAgIHJldHVybiAnTUlQU19PMzJfQUJJJworICAgIHJldHVybiAiIgorCitleHBvcnQgVUNMSUJDX0FCSSA9ICIke0BtYXBfdWNsaWJjX2FiaShkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSksIGQpfSIKKworZGVmIG1hcF91Y2xpYmNfZW5kaWFuKGEsIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIGVuZGlhbmVzcyBmb3IgdGhlIGdpdmVuIFRBUkdFVF9BUkNILiIiIgorICAgIGltcG9ydCByZQorCisgICAgIyBBbHdheXMgQkUKKyAgICBpZiByZS5tYXRjaCgnXihhdnIzMnxlMXxmcnZ8KHBhcmlzY3xocHBhKXxtNjhrfG1pY3JvYmxhemV8cG93ZXJwYy4qfChzcGFyY3xzdW4pLiopJCcsIGEpOgorICAgICAgICByZXR1cm4gJ0JJRycKKyAgICAjIFBvc3NpYmx5IEJFCisgICAgZWxpZiByZS5tYXRjaCgnXigoKGFybXxzYTExMCkuKmViKXxoODMwMC4qZWJ8KHBhcmlzY3xocHBhKS4qZWJ8bWlwc3xtaXBzNjR8c2guKmVifHh0ZW5zYS4qZWIpJCcsIGEpOgorICAgICAgICByZXR1cm4gJ0JJRycKKyAgICByZXR1cm4gJ0xJVFRMRScKKworZXhwb3J0IFVDTElCQ19FTkRJQU4gPSAiJHtAbWFwX3VjbGliY19lbmRpYW4oZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSksIGQpfSIKKworIyBpbnRlcm5hbCBoZWxwZXIKK2RlZiB1Y2xpYmNfY2ZnKGZlYXR1cmUsIGZlYXR1cmVzLCB0b2tlbnMsIGNuZiwgcmVtKToKKyAgICBpZiB0eXBlKHRva2VucykgPT0gdHlwZSgiIik6CisgICAgICAgIHRva2VucyA9IFt0b2tlbnNdCisgICAgcmVtLmV4dGVuZChbJy9eWyMgXSonICsgdG9rZW4gKyAnWyA9XS9kJyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBpZiB0eXBlKGZlYXR1cmVzKSA9PSB0eXBlKFtdKSBhbmQgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorICAgIGVsc2U6CisgICAgICAgIGNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCk6CisgICAgY25mLCByZW0gPSAoW10sIFtdKQorICAgIGRpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdESVNUUk9fRkVBVFVSRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgdWNsaWJjX2NmZygnaXB2NCcsICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19JUFY0JywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnaXB2NicsICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19JUFY2JywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnbGFyZ2VmaWxlJywgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19MRlMnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdubHMnLCAgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0xPQ0FMRScsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3RodW1iLWludGVyd29yaycsIGRpc3Ryb19mZWF0dXJlcywnVVNFX0JYJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygneGF0dHInLCAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19YQVRUUicsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ3NzcCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfU1NQJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnYXJncCcsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfQVJHUCcsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ2xpYmMtcG9zaXgtY2xhbmctd2NoYXInLCAgZGlzdHJvX2ZlYXR1cmVzLCdVQ0xJQkNfSEFTX1dDSEFSJywgY25mLCByZW0pCisgICAgcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorIyBYLCBZID0gJHtAZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpfQorIyB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggYml0YmFrZSwgd29ya2Fyb3VuZDoKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfY29uZihkKToKKyAgICBjbmYsIHJlbSA9IGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKQorICAgIHJldHVybiBjbmYKK2RlZiBmZWF0dXJlc190b191Y2xpYmNfZGVsKGQpOgorICAgIGNuZiwgcmVtID0gZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpCisgICAgcmV0dXJuIHJlbQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE1NzdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NSQ1JFViA9ICJjYTFjNzRkNjdkZDExNWQwNTlhODc1MTUwZTEwYjg1NjBhOWMzNWE4IgorCitQViA9ICIwLjkuMzMrZ2l0JHtTUkNQVn0iCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3VjbGliYy1naXQ6IgorCitTUkNfVVJJID0gImdpdDovL3VjbGliYy5vcmcvdUNsaWJjLmdpdDticmFuY2g9bWFzdGVyIFwKKyAgICAgICAgZmlsZTovL3VDbGliYy5tYWNoaW5lIFwKKyAgICAgICAgZmlsZTovL3VDbGliYy5kaXN0cm8gXAorICAgICAgICBmaWxlOi8vb2JzdGFjay5jZmcgXAorICAgICAgICBmaWxlOi8vbG9jYWxlLmNmZyBcCisgICAgICAgIGZpbGU6Ly8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoIFwKKyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDEtRGlzYWJsZS1scm91bnRfdGVzLWZ1bmN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmYxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAxLURpc2FibGUtbHJvdW50X3Rlcy1mdW5jdGlvbi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDE0Yjg2NWIzNDM4ZDBkZjI5YjQ5NjkxNDg2NzhkOGZhODk0M2UxZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo0OTozMyAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvN10gRGlzYWJsZSBscm91bnRfdGVzKCkgZnVuY3Rpb24KKworSXRzIG5vdCB1c2VkIGFueXdheSwgYXZvaWRzIHNvbWUgc3RyaWN0IGNvbXBpbGVyIHdhcm5pbmdzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L21hdGgvbGlibS10ZXN0LmluYyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCitpbmRleCBmNTBiNDhiLi42ZDcwYTk1IDEwMDY0NAorLS0tIGEvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMKKysrKyBiL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jCitAQCAtMzQ3MCw3ICszNDcwLDYgQEAgbG9nYl90ZXN0ICh2b2lkKQorIH0KKyAKKyAKKy0jaWYgMAorIHN0YXRpYyB2b2lkCisgbHJvdW5kX3Rlc3QgKHZvaWQpCisgeworQEAgLTM2MDUsNyArMzYwNCw2IEBAIGxscm91bmRfdGVzdCAodm9pZCkKKyAKKyAgIEVORCAobGxyb3VuZCk7CisgfQorLSNlbmRpZgorIAorIHN0YXRpYyB2b2lkCisgbW9kZl90ZXN0ICh2b2lkKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAyLUFkZC1pbXBsZW1lbnRhdGlvbi1mb3ItY29weXNpZ25sLWZvci1wcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNzVjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbSA1ZDM2MjA3NGU1OTc1YjE1MGEzNWJjZmE3N2VhYjFiZmE0ZTMwZGU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzddIEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgY29weXNpZ25sIGZvciBwcGMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoIHwgIDIgKy0KKyBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYyAgIHwgODkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKKworZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2ggYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoCitpbmRleCA0ZmJjYjExLi43YzA5Yzg3IDEwMDY0NAorLS0tIGEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaAorQEAgLTUsNyArNSw3IEBACisgIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorICMKKyAKKy1DU1JDLXkgOj0gX19zeXNjYWxsX2Vycm9yLmMgaW9jdGwuYworK0NTUkMteSA6PSBfX3N5c2NhbGxfZXJyb3IuYyBpb2N0bC5jIGNvcHlzaWdubC5jCisgCisgU1NSQy15IDo9IFwKKyAJX19sb25nam1wLlMgc2V0am1wLlMgYnNkLXNldGptcC5TIGJzZC1fc2V0am1wLlMgYnJrLlMgXAorZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jIGIvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMDBmNjUzCistLS0gL2Rldi9udWxsCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYworQEAgLTAsMCArMSw4OSBAQAorKy8qIHNfY29weXNpZ25sLmMgLS0gbG9uZyBkb3VibGUgdmVyc2lvbiBvZiBzX2NvcHlzaWduLmMuCisrICogQ29udmVyc2lvbiB0byBsb25nIGRvdWJsZSBieSBVbHJpY2ggRHJlcHBlciwKKysgKiBDeWdudXMgU3VwcG9ydCwgZHJlcHBlckBjeWdudXMuY29tLgorKyAqLworKworKy8qCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisrICogaXMgcHJlc2VydmVkLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysvKgorKyAqIGNvcHlzaWdubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQorKyAqIGNvcHlzaWdubCh4LHkpIHJldHVybnMgYSB2YWx1ZSB3aXRoIHRoZSBtYWduaXR1ZGUgb2YgeCBhbmQKKysgKiB3aXRoIHRoZSBzaWduIGJpdCBvZiB5LgorKyAqLworKworKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2lmIF9fRkxPQVRfV09SRF9PUkRFUiA9PSBCSUdfRU5ESUFOCisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgIGxvbmcgZG91YmxlIHZhbHVlOworKyAgc3RydWN0CisrICB7CisrICAgIGludCBzaWduX2V4cG9uZW50OjE2OworKyAgICB1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisrICAgIHVpbnQzMl90IG1zdzsKKysgICAgdWludDMyX3QgbHN3OworKyAgfSBwYXJ0czsKKyt9IGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZTsKKysKKysjZW5kaWYKKysKKysjaWYgX19GTE9BVF9XT1JEX09SREVSID09IExJVFRMRV9FTkRJQU4KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgbG9uZyBkb3VibGUgdmFsdWU7CisrICBzdHJ1Y3QKKysgIHsKKysgICAgdWludDMyX3QgbHN3OworKyAgICB1aW50MzJfdCBtc3c7CisrICAgIGludCBzaWduX2V4cG9uZW50OjE2OworKyAgICB1bnNpZ25lZCBpbnQgZW1wdHk6MTY7CisrICB9IHBhcnRzOworK30gaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlOworKworKyNlbmRpZgorKworKy8qIEdldCBpbnQgZnJvbSB0aGUgZXhwb25lbnQgb2YgYSBsb25nIGRvdWJsZS4gICovCisrCisrI2RlZmluZSBHRVRfTERPVUJMRV9FWFAoZXhwLGQpCQkJCQlcCisrZG8gewkJCQkJCQkJXAorKyAgaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlIGdlX3U7CQkJCVwKKysgIGdlX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorKyAgKGV4cCkgPSBnZV91LnBhcnRzLnNpZ25fZXhwb25lbnQ7CQkJCVwKKyt9IHdoaWxlICgwKQorKworKy8qIFNldCBleHBvbmVudCBvZiBhIGxvbmcgZG91YmxlIGZyb20gYW4gaW50LiAgKi8KKysKKysjZGVmaW5lIFNFVF9MRE9VQkxFX0VYUChkLGV4cCkJCQkJCVwKKytkbyB7CQkJCQkJCQlcCisrICBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGUgc2VfdTsJCQkJXAorKyAgc2VfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisrICBzZV91LnBhcnRzLnNpZ25fZXhwb25lbnQgPSAoZXhwKTsJCQkJXAorKyAgKGQpID0gc2VfdS52YWx1ZTsJCQkJCQlcCisrfSB3aGlsZSAoMCkKKysKKytsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSk7CisrbGliY19oaWRkZW5fcHJvdG8oY29weXNpZ25sKTsKKysKKytsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKKyt7CisrCXVpbnQzMl90IGVzMSxlczI7CisrCUdFVF9MRE9VQkxFX0VYUChlczEseCk7CisrCUdFVF9MRE9VQkxFX0VYUChlczIseSk7CisrCVNFVF9MRE9VQkxFX0VYUCh4LChlczEmMHg3ZmZmKXwoZXMyJjB4ODAwMCkpOworKyAgICAgICAgcmV0dXJuIHg7CisrfQorKworK2xpYmNfaGlkZGVuX2RlZihjb3B5c2lnbmwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTk0NDgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMy1BZGQtYXJncC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDU4MTEgQEAKK0Zyb20gZWFhZTgxNmZiMjI5Mjk0NjlhYTRjYzM0MDJiOTFiNTEyZmM2OTU0OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm9Ac3QuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1MzozNyAtMDcwMAorU3ViamVjdDogW1BBVENIIDMvN10gQWRkIGFyZ3AgaW1wbGVtZW50YXRpb24KKworQXJncCBpcyBhbiBhZHZhbmNlZCBzdXBwb3J0IGZvciBwYXJzaW5nIHVuaXgtc3R5bGUgYXJndW1lbnQgdmVjdG9ycy4KK0luIGFkZGl0aW9uIHRvIHRoZSBjb21tb24gZ2V0b3B0IGludGVyZmFjZSwgaXQgcHJvdmlkZXMgYXV0b21hdGljCityZXNwb25zZQordG8gYC0taGVscCcgYW5kIGAtLXZlcnNpb24nIG9wdGlvbnMgYW5kIHVzZSBvZiBjdXN0b20gcGFyc2VyIGluCitjb25qdW5jdGlvbgord2l0aCBhcmdwIG5hdGl2ZSBvcHRpb24gcGFyc2VyLCBhbW9uZyBvdGhlcnMuCitBcmdwIHN1cHBvcnQgaXMgcmVxdWlyZWQgYnkgZWxmdXRpbHMgcGFja2FnZSBhbmQgcHJlbGluay4KKworSW4gdUNsaWJjIGFyZ3AgZnVuY3Rpb25hbGl0aWVzIGhhcyBiZWVuIG1vdmVkIGZyb20gQyBsaWJyYXJ5IHRvCitsaWJ1YXJncC5zbworRnVydGhlciB0aGUgbGliYy5zbyBsaW5rZXIgc2NyaXB0IGNvbnRhaW5zIGFuIEFTX05FRURFRCBlbnRyeSBzbyB0aGF0CitpdCBkb2Vzbid0IG5lZWQgdG8gbGluayBsaWJ1YXJncC5zbyBleHBsaWNpdGVseS4KKworU2lnbmVkLW9mZi1ieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNyb0BzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IENhcm1lbG8gQW1vcm9zbyA8Y2FybWVsby5hbW9yb3NvQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKworIE1ha2VydWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgUnVsZXMubWFrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIGV4dHJhL0NvbmZpZ3MvQ29uZmlnLmluICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKKyBpbmNsdWRlL2FyZ3AuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU2NiArKysrKysrKworIGxpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmggfCAgMTM2ICsrCisgbGliYy91bmlzdGQvZ2V0b3B0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKy0KKyBsaWJ1YXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArCisgbGlidWFyZ3AvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzMgKysKKyBsaWJ1YXJncC9hcmdwLWJhLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgbGlidWFyZ3AvYXJncC1lZXhzdC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKworIGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMgICAgICAgICAgICAgICAgICAgfCAgNDM5ICsrKysrKysKKyBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oICAgICAgICAgICAgICAgICAgIHwgIDMxNCArKysrKworIGxpYnVhcmdwL2FyZ3AtZnMteGlubC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsKKyBsaWJ1YXJncC9hcmdwLWhlbHAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTg4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWJ1YXJncC9hcmdwLXBhcnNlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDk0OSArKysrKysrKysrKysrKworIGxpYnVhcmdwL2FyZ3AtcHYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICsKKyBsaWJ1YXJncC9hcmdwLXB2aC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArCisgbGlidWFyZ3AvYXJncC14aW5sLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKworIHRlc3QvYXJncC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyB0ZXN0L2FyZ3AvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCisgdGVzdC9hcmdwL2FyZ3AtZXgxLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKworIHRlc3QvYXJncC9hcmdwLWV4Mi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ1ICsKKyB0ZXN0L2FyZ3AvYXJncC1leDMuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MyArKysKKyB0ZXN0L2FyZ3AvYXJncC1leDQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2NyArKysKKyB0ZXN0L2FyZ3AvYXJncC10ZXN0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIwOSArKysKKyB0ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgdGVzdC9hcmdwL3RzdC1hcmdwMS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxMTggKysKKyB0ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwMSArKworIDI5IGZpbGVzIGNoYW5nZWQsIDU0ODEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9hcmdwLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9NYWtlZmlsZS5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWJhLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1lZXhzdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWZzLXhpbmwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWhlbHAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXBhcnNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1wdi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtcHZoLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC14aW5sLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9NYWtlZmlsZS5pbgorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDIuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC1leDQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYXJncC10ZXN0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC90c3QtYXJncDEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvdHN0LWFyZ3AyLmMKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDA0NjcxYTQuLmE0NTBhZjkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0zOSw2ICszOSw3IEBAIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnJlc29sdi9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnV0aWwvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJwdGhyZWFkL01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlicnQvTWFrZWZpbGUuaW4KKytpbmNsdWRlICQodG9wX3NyY2RpcilsaWJ1YXJncC9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnViYWNrdHJhY2UvTWFrZWZpbGUuaW4KKyAKKyAjIGxhc3QgaW5jbHVkZWQgdG8gY2F0Y2ggYWxsIHRoZSBvYmplY3RzIGFkZGVkIGJ5IG90aGVycyAobG9jYWxlcy90aHJlYWRzKQorQEAgLTI2Miw2ICsyNjMsNyBAQCBIRUFERVJTX1JNLSArPSBzZ3R0eS5oCisgZW5kaWYKKyBIRUFERVJTX1JNLSQoSEFWRV9TSEFSRUQpICAgICAgICAgICAgICAgICAgICArPSBkbGZjbi5oIGJpdHMvZGxmY24uaAorIEhFQURFUlNfUk0tJChQVEhSRUFEU19ERUJVR19TVVBQT1JUKSAgICAgICAgICs9IHRocmVhZF9kYi5oCisrSEVBREVSU19STS0kKFVDTElCQ19IQVNfQVJHUCkgICAgICAgICAgICAgICAgKz0gYXJncC5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfQlNEX0VSUikgICAgICAgICAgICAgKz0gZXJyLmgKKyBIRUFERVJTX1JNLSQoVUNMSUJDX0hBU19DUllQVCkgICAgICAgICAgICAgICArPSBjcnlwdC5oCisgSEVBREVSU19STS0kKFVDTElCQ19IQVNfRVBPTEwpICAgICAgICAgICAgICAgKz0gc3lzL2Vwb2xsLmgKK0BAIC0zODYsNiArMzg4LDEzIEBAIGVsc2UKKyAJLSQoSU5TVEFMTCkgLW0gNzU1ICQodG9wX2J1aWxkZGlyKWxpYi9saWJjLnNvICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS8KKyBlbmRpZgorIAllY2hvICIkKFVCQUNLVFJBQ0VfQVNORUVERUQpIiA+PiAkKFBSRUZJWCkkKERFVkVMX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGliYy5zbworK2lmZXEgKCQoVUNMSUJDX0hBU19BUkdQKSx5KQorKyMgQWRkIHRoZSBBU19ORUVERUQgZW50cnkgZm9yIGxpYnVhcmdwLnNvCisrCWlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpbGliL2xpYmMuc28gLWEgLWYgJChQUkVGSVgpJChSVU5USU1FX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvJChTSEFSRURfTUFKT1JOQU1FKSBdIDsgdGhlbiBcCisrCQllY2hvICJHUk9VUCAoICQoVUFSR1BfQVNORUVERUQpICkiID4+ICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS9saWJjLnNvOyBcCisrCWZpCisrZW5kaWYKKysKKyBpZmVxICgkKFVDTElCQ19IQVNfVEhSRUFEUykseSkKKyBpZm5lcSAoJChMSU5VWFRIUkVBRFNfT0xEKSx5KQorIGlmZXEgKCQoSEFSRFdJUkVEX0FCU1BBVEgpLHkpCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCBkNmY3ZTI0Li5lNzAwNTBkIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC00OCw2ICs0OCw3IEBAICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJyZXNvbHYsJChsaWJyZXNvbHYtYS15KSAkKGxpYnJlc29sdi1zby15KSkpCisgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnJ0LCQobGlicnQtYS15KSAkKGxpYnJ0LXNvLXkpKSkKKyAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlidXRpbCwkKGxpYnV0aWwtYS15KSAkKGxpYnV0aWwtc28teSkpKQorICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJ1YmFja3RyYWNlLCQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KSkpCisrJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnVhcmdwLCQobGlidWFyZ3AtYS15KSAkKGxpYnVhcmdwLXNvLXkpKSkKKyAKKyBzaGFyZWRfb2JqcyA9ICQobGliYy15Oi5vPS5vcykgJChsaWJjLXNoYXJlZC15KSAkKGxpYmMtbm9uc2hhcmVkLXkpIFwKKyAJJChsaWJjcnlwdC1zby15KSAkKGxpYmRsLXNvLXkpIFwKK0BAIC01NSwxMiArNTYsMTIgQEAgc2hhcmVkX29ianMgPSAkKGxpYmMteToubz0ub3MpICQobGliYy1zaGFyZWQteSkgJChsaWJjLW5vbnNoYXJlZC15KSBcCisgCSQobGlicHRocmVhZC1zby15KSAkKGxpYnB0aHJlYWQtbm9uc2hhcmVkLXkpICQobGlidGhyZWFkX2RiLXNvLXkpIFwKKyAJJChsaWJyZXNvbHYtc28teSkgJChsaWJydC1zby15KSBcCisgCSQobGRzby15KSBcCistCSQobGlidXRpbC1zby15KSAkKGxpYnViYWNrdHJhY2Utc28teSkKKysJJChsaWJ1dGlsLXNvLXkpICQobGlidWJhY2t0cmFjZS1zby15KSAkKGxpYnVhcmdwLXNvLXkpCisgCisgYXJfb2JqcyA9ICAkKGxpYmMteSkgJChsaWJjLXN0YXRpYy15KSAkKGxpYmNyeXB0LWEteSkgXAorIAkkKGxpYmRsLWEteSkgJChsaWJpbnRsLWEteSkgJChsaWJtLWEteSkgJChsaWJuc2wtYS15KSBcCisgCSQobGlicHRocmVhZC1hLXkpICQobGlidGhyZWFkX2RiLWEteSkgXAorLQkkKGxpYnJlc29sdi1hLXkpICQobGlicnQtYS15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnViYWNrdHJhY2UtYS15KQorKwkkKGxpYnJlc29sdi1hLXkpICQobGlicnQtYS15KSAkKGxpYnV0aWwtYS15KSAkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnVhcmdwLWEteSkKKyBpZmVxICgkKERPUElDKSx5KQorIGFyX29ianMgOj0gJChhcl9vYmpzOi5vPS5vcykKKyBlbmRpZgorQEAgLTQ5OCw3ICs0OTksNyBAQCBmaWxlcy5kZXAgOj0gJChsaWJjLWEteSkgJChsaWJjLXNvLXkpICQobGliYy1ub25zaGFyZWQteSkgXAorIAkkKGxpYnJ0LWEteSkgJChsaWJydC1zby15KSAgJChsaWJyZXNvbHYtYS15KSAkKGxpYnJlc29sdi1zby15KSBcCisgCSQobGliY3J5cHQtYS15KSAkKGxpYmNyeXB0LXNvLXkpICQobGlidXRpbC1hLXkpICQobGlidXRpbC1zby15KSBcCisgCSQobGlibnNsLWEteSkgJChsaWJuc2wtc28teSkgJChsZHNvLXkpICQobGliZGwtYS15KSAkKGxpYmRsLXNvLXkpIFwKKy0JJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpCisrCSQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWJhY2t0cmFjZS1zby15KSAkKGxpYnVhcmdwLXNvLXkpICQobGlidWFyZ3AtYS15KQorIC5kZXBlbmRzLmRlcCA6PSBcCisgCSQocGF0c3Vic3QgJS5zLCUucy5kZXAsJChmaWx0ZXIgJS5zLCQoZmlsZXMuZGVwKSkpIFwKKyAJJChwYXRzdWJzdCAlLm8sJS5vLmRlcCwkKGZpbHRlciAlLm8sJChmaWxlcy5kZXApKSkgXAorZGlmZiAtLWdpdCBhL1J1bGVzLm1hayBiL1J1bGVzLm1haworaW5kZXggZGU5ZmZiMy4uYTJiYWY1OCAxMDA2NDQKKy0tLSBhL1J1bGVzLm1haworKysrIGIvUnVsZXMubWFrCitAQCAtNjAyLDYgKzYwMiwxOSBAQCBleHBvcnQgVUJBQ0tUUkFDRV9BU05FRURFRDo9JChzaGVsbCAkKENDKSAtV2wsLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAtLSAtLQorIGVsc2UKKyBleHBvcnQgVUJBQ0tUUkFDRV9BU05FRURFRDo9IiIKKyBlbmRpZgorK2lmZXEgKCQoVUNMSUJDX0hBU19BUkdQKSx5KQorK2lmZXEgKCQoSEFSRFdJUkVEX0FCU1BBVEgpLHkpCisrIyBPbmx5IHVzZWQgaW4gaW5zdGFsbGVkIGxpYmMuc28gbGlua2VyIHNjcmlwdAorK1VBUkdQX0ZVTExfTkFNRSA6PSAkKHN1YnN0IC8vLC8sJChSVU5USU1FX1BSRUZJWCkkKE1VTFRJTElCX0RJUikvbGlidWFyZ3Auc28uJChNQUpPUl9WRVJTSU9OKSkKKytlbHNlCisrVUFSR1BfRlVMTF9OQU1FIDo9IGxpYnVhcmdwLnNvLiQoTUFKT1JfVkVSU0lPTikKKytlbmRpZgorK2V4cG9ydCBVQVJHUF9BU05FRURFRDo9JChzaGVsbCAkKENDKSAtV2wsLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAtLSAtLWFzLW5lZWRlZCAmJiBcCisrCWVjaG8gIkdST1VQICggQVNfTkVFREVEICggJChVQVJHUF9GVUxMX05BTUUpICkgKSIgfHwgXAorKwllY2hvICJHUk9VUCAoICQoVUFSR1BfRlVMTF9OQU1FKSApIikKKytlbHNlCisrZXhwb3J0IFVBUkdQX0FTTkVFREVEOj0iIgorK2VuZGlmCisgZW5kaWYKKyAKKyAjIEFkZCBhIGJ1bmNoIG9mIGV4dHJhIHBlZGFudGljIGFubm95aW5nbHkgc3RyaWN0IGNoZWNrcworZGlmZiAtLWdpdCBhL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluIGIvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KK2luZGV4IDI0MmU0NWEuLmIzNmQ0YzkgMTAwNjQ0CistLS0gYS9leHRyYS9Db25maWdzL0NvbmZpZy5pbgorKysrIGIvZXh0cmEvQ29uZmlncy9Db25maWcuaW4KK0BAIC0xOTQzLDYgKzE5NDMsMjMgQEAgY29uZmlnIFVDTElCQ19IQVNfR05VX0dFVFNVQk9QVAorIAkgIEFuc3dlciBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgZ2V0c3Vib3B0KCkuCisgCisgCSAgTW9zdCBwZW9wbGUgd2lsbCBhbnN3ZXIgWS4KKysKKytjb25maWcgVUNMSUJDX0hBU19BUkdQCisrICAgICAgIGJvb2wgIlN1cHBvcnQgYXJncCAoYXMgc3RhbmRhbG9uZSBzaGFyZWQgb2JqZWN0KSIKKysgICAgICAgZGVmYXVsdCBuCisrICAgICAgIGhlbHAKKysgICAgICAgICBBcmdwIGlzIGFuIGludGVyZmFjZSBmb3IgcGFyc2luZyB1bml4LXN0eWxlIGFyZ3VtZW50IHZlY3RvcnMuIFVubGlrZQorKyAgICAgICAgIHRoZSBjb21tb24gZ2V0b3B0IGludGVyZmFjZSwgaXQgcHJvdmlkZXMgbWFueSBhZHZhbmNlZCBmZWF0dXJlcyBpbgorKyAgICAgICAgIGFkZGl0aW9uIHRvIHBhcnNpbmcgb3B0aW9ucywgc3VjaCBhcyBhdXRvbWF0aWMgb3V0cHV0IGluIHJlc3BvbnNlIHRvCisrICAgICAgICAgYC0taGVscCcgYW5kIGAtLXZlcnNpb24nIG9wdGlvbnMuCisrICAgICAgICAgQSBsaWJyYXJ5IGNhbiBleHBvcnQgYW4gYXJncCBvcHRpb24gcGFyc2VyLCB3aGljaCBwcm9ncmFtcyBjYW4gZWFzaWx5CisrICAgICAgICAgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlaXIgb3duIG9wdGlvbiBwYXJzZXIuCisrICAgICAgICAgQSBuZXcgc2hhcmVkIG9iamVjdCAibGlidWFyZ3AiIGlzIGNyZWF0ZWQuIFRoZSAibGliYy5zbyIgbGlua2VyIHNjcmlwdAorKyAgICAgICAgIGNvbnRhaW5zIHRoZSBBU19ORUVERUQgZW50cnkgZm9yIGdldHRpbmcgdGhlIGxpYnVhcmdwIGxpbmtlZCBhdXRvbWF0aWNhbGx5LgorKyAgICAgICAgIEFyZ3Agc3VwcG9ydCBpcyBuZWVkZWQgYnkgZWxmdXRpbHMgbGliZHcuCisrCisrICAgICAgICAgTW9zdCBwZW9wbGUgY2FuIHNhZmVseSBhbnN3ZXIgTi4KKysKKyBlbmRtZW51CisgCisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hcmdwLmggYi9pbmNsdWRlL2FyZ3AuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlkNTM3MjgKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvYXJncC5oCitAQCAtMCwwICsxLDU2NiBAQAorKy8qIEhpZXJhcmNoaWFsIGFyZ3VtZW50IHBhcnNpbmcsIGxheWVyZWQgb3ZlciBnZXRvcHQuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysjaWZuZGVmIF9BUkdQX0gKKysjZGVmaW5lIF9BUkdQX0gKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrI2RlZmluZSBfX25lZWRfZXJyb3JfdAorKyNpbmNsdWRlIDxlcnJuby5oPgorKworKyNpZm5kZWYgX19jb25zdAorKyMgZGVmaW5lIF9fY29uc3QgY29uc3QKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVEhST1cKKysjIGRlZmluZSBfX1RIUk9XCisrI2VuZGlmCisrI2lmbmRlZiBfX05USAorKyMgZGVmaW5lIF9fTlRIKGZjdCkgZmN0IF9fVEhST1cKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9fcmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKysgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLiAgKi8KKysjaWZuZGVmIF9fcmVzdHJpY3QKKysjIGlmICEgKDIgPCBfX0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykpCisrIyAgaWYgZGVmaW5lZCByZXN0cmljdCB8fCAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKysjICAgZGVmaW5lIF9fcmVzdHJpY3QgcmVzdHJpY3QKKysjICBlbHNlCisrIyAgIGRlZmluZSBfX3Jlc3RyaWN0CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX2Vycm9yX3RfZGVmaW5lZAorK3R5cGVkZWYgaW50IGVycm9yX3Q7CisrIyBkZWZpbmUgX19lcnJvcl90X2RlZmluZWQKKysjZW5kaWYKKysMCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKy8qIEEgZGVzY3JpcHRpb24gb2YgYSBwYXJ0aWN1bGFyIG9wdGlvbi4gIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZgorKyAgIHRoZXNlIGlzIHBhc3NlZCBpbiB0aGUgT1BUSU9OUyBmaWVsZCBvZiBhbiBhcmdwIHN0cnVjdHVyZS4gIEVhY2ggb3B0aW9uCisrICAgZW50cnkgY2FuIGNvcnJlc3BvbmQgdG8gb25lIGxvbmcgb3B0aW9uIGFuZC9vciBvbmUgc2hvcnQgb3B0aW9uOyBtb3JlCisrICAgbmFtZXMgZm9yIHRoZSBzYW1lIG9wdGlvbiBjYW4gYmUgYWRkZWQgYnkgZm9sbG93aW5nIGFuIGVudHJ5IGluIGFuIG9wdGlvbgorKyAgIGFycmF5IHdpdGggb3B0aW9ucyBoYXZpbmcgdGhlIE9QVElPTl9BTElBUyBmbGFnIHNldC4gICovCisrc3RydWN0IGFyZ3Bfb3B0aW9uCisreworKyAgLyogVGhlIGxvbmcgb3B0aW9uIG5hbWUuICBGb3IgbW9yZSB0aGFuIG9uZSBuYW1lIGZvciB0aGUgc2FtZSBvcHRpb24sIHlvdQorKyAgICAgY2FuIHVzZSBmb2xsb3dpbmcgb3B0aW9ucyB3aXRoIHRoZSBPUFRJT05fQUxJQVMgZmxhZyBzZXQuICAqLworKyAgX19jb25zdCBjaGFyICpuYW1lOworKworKyAgLyogV2hhdCBrZXkgaXMgcmV0dXJuZWQgZm9yIHRoaXMgb3B0aW9uLiAgSWYgPiAwIGFuZCBwcmludGFibGUsIHRoZW4gaXQncworKyAgICAgYWxzbyBhY2NlcHRlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisrICBpbnQga2V5OworKworKyAgLyogSWYgbm9uLU5VTEwsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisrICAgICBvcHRpb24sIHdoaWNoIGlzIHJlcXVpcmVkIHVubGVzcyB0aGUgT1BUSU9OX0FSR19PUFRJT05BTCBmbGFnIGlzIHNldC4gKi8KKysgIF9fY29uc3QgY2hhciAqYXJnOworKworKyAgLyogT1BUSU9OXyBmbGFncy4gICovCisrICBpbnQgZmxhZ3M7CisrCisrICAvKiBUaGUgZG9jIHN0cmluZyBmb3IgdGhpcyBvcHRpb24uICBJZiBib3RoIE5BTUUgYW5kIEtFWSBhcmUgMCwgVGhpcyBzdHJpbmcKKysgICAgIHdpbGwgYmUgcHJpbnRlZCBvdXRkZW50ZWQgZnJvbSB0aGUgbm9ybWFsIG9wdGlvbiBjb2x1bW4sIG1ha2luZyBpdAorKyAgICAgdXNlZnVsIGFzIGEgZ3JvdXAgaGVhZGVyIChpdCB3aWxsIGJlIHRoZSBmaXJzdCB0aGluZyBwcmludGVkIGluIGl0cworKyAgICAgZ3JvdXApOyBpbiB0aGlzIHVzYWdlLCBpdCdzIGNvbnZlbnRpb25hbCB0byBlbmQgdGhlIHN0cmluZyB3aXRoIGEgYDonLiAgKi8KKysgIF9fY29uc3QgY2hhciAqZG9jOworKworKyAgLyogVGhlIGdyb3VwIHRoaXMgb3B0aW9uIGlzIGluLiAgSW4gYSBsb25nIGhlbHAgbWVzc2FnZSwgb3B0aW9ucyBhcmUgc29ydGVkCisrICAgICBhbHBoYWJldGljYWxseSB3aXRoaW4gZWFjaCBncm91cCwgYW5kIHRoZSBncm91cHMgcHJlc2VudGVkIGluIHRoZSBvcmRlcgorKyAgICAgMCwgMSwgMiwgLi4uLCBuLCAtbSwgLi4uLCAtMiwgLTEuICBFdmVyeSBlbnRyeSBpbiBhbiBvcHRpb25zIGFycmF5IHdpdGgKKysgICAgIGlmIHRoaXMgZmllbGQgMCB3aWxsIGluaGVyaXQgdGhlIGdyb3VwIG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnksIG9yCisrICAgICB6ZXJvIGlmIGl0J3MgdGhlIGZpcnN0IG9uZSwgdW5sZXNzIGl0cyBhIGdyb3VwIGhlYWRlciAoTkFNRSBhbmQgS0VZIGJvdGgKKysgICAgIDApLCBpbiB3aGljaCBjYXNlLCB0aGUgcHJldmlvdXMgZW50cnkgKyAxIGlzIHRoZSBkZWZhdWx0LiAgQXV0b21hZ2ljCisrICAgICBvcHRpb25zIHN1Y2ggYXMgLS1oZWxwIGFyZSBwdXQgaW50byBncm91cCAtMS4gICovCisrICBpbnQgZ3JvdXA7CisrfTsKKysKKysvKiBUaGUgYXJndW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3B0aW9uIGlzIG9wdGlvbmFsLiAgKi8KKysjZGVmaW5lIE9QVElPTl9BUkdfT1BUSU9OQUwJMHgxCisrCisrLyogVGhpcyBvcHRpb24gaXNuJ3QgZGlzcGxheWVkIGluIGFueSBoZWxwIG1lc3NhZ2VzLiAgKi8KKysjZGVmaW5lIE9QVElPTl9ISURERU4JICAgICAgIAkweDIKKysKKysvKiBUaGlzIG9wdGlvbiBpcyBhbiBhbGlhcyBmb3IgdGhlIGNsb3Nlc3QgcHJldmlvdXMgbm9uLWFsaWFzIG9wdGlvbi4gIFRoaXMKKysgICBtZWFucyB0aGF0IGl0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIGhlbHAgZW50cnksIGFuZCB3aWxsIGluaGVyaXQKKysgICBmaWVsZHMgb3RoZXIgdGhhbiBOQU1FIGFuZCBLRVkgZnJvbSB0aGUgYWxpYXNlZCBvcHRpb24uICAqLworKyNkZWZpbmUgT1BUSU9OX0FMSUFTCQkweDQKKysKKysvKiBUaGlzIG9wdGlvbiBpc24ndCBhY3R1YWxseSBhbiBvcHRpb24gKGFuZCBzbyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUKKysgICBhY3R1YWwgb3B0aW9uIHBhcnNlciksIGJ1dCByYXRoZXIgYW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRvY3VtZW50YXRpb24gdGhhdAorKyAgIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gbXVjaCB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIG9wdGlvbnMuICBJZiB0aGlzIGZsYWcKKysgICBpcyBzZXQsIHRoZW4gdGhlIG9wdGlvbiBOQU1FIGZpZWxkIGlzIGRpc3BsYXllZCB1bm1vZGlmaWVkIChlLmcuLCBubyBgLS0nCisrICAgcHJlZml4IGlzIGFkZGVkKSBhdCB0aGUgbGVmdC1tYXJnaW4gKHdoZXJlIGEgKnNob3J0KiBvcHRpb24gd291bGQgbm9ybWFsbHkKKysgICBiZSBkaXNwbGF5ZWQpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGluIHRoZSBub3JtYWwgcGxhY2UuICBGb3IKKysgICBwdXJwb3NlcyBvZiBzb3J0aW5nLCBhbnkgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBwdW5jdHVhdGlvbiBpcyBpZ25vcmVkLAorKyAgIGV4Y2VwdCB0aGF0IGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGAtJywgdGhpcyBlbnRyeQorKyAgIGlzIGRpc3BsYXllZCBhZnRlciBhbGwgb3B0aW9ucyAoYW5kIE9QVElPTl9ET0MgZW50cmllcyB3aXRoIGEgbGVhZGluZyBgLScpCisrICAgaW4gdGhlIHNhbWUgZ3JvdXAuICAqLworKyNkZWZpbmUgT1BUSU9OX0RPQwkJMHg4CisrCisrLyogVGhpcyBvcHRpb24gc2hvdWxkbid0IGJlIGluY2x1ZGVkIGluIGBsb25nJyB1c2FnZSBtZXNzYWdlcyAoYnV0IGlzIHN0aWxsCisrICAgaW5jbHVkZWQgaW4gaGVscCBtZXNzYWdlcykuICBUaGlzIGlzIG1haW5seSBpbnRlbmRlZCBmb3Igb3B0aW9ucyB0aGF0IGFyZQorKyAgIGNvbXBsZXRlbHkgZG9jdW1lbnRlZCBpbiBhbiBhcmdwJ3MgQVJHU19ET0MgZmllbGQsIGluIHdoaWNoIGNhc2UgaW5jbHVkaW5nCisrICAgdGhlIG9wdGlvbiBpbiB0aGUgZ2VuZXJpYyB1c2FnZSBsaXN0IHdvdWxkIGJlIHJlZHVuZGFudC4gIEZvciBpbnN0YW5jZSwKKysgICBpZiBBUkdTX0RPQyBpcyAiRk9PIEJBUlxuLXggQkxBSCIsIGFuZCB0aGUgYC14JyBvcHRpb24ncyBwdXJwb3NlIGlzIHRvCisrICAgZGlzdGluZ3Vpc2ggdGhlc2UgdHdvIGNhc2VzLCAteCBzaG91bGQgcHJvYmFibHkgYmUgbWFya2VkCisrICAgT1BUSU9OX05PX1VTQUdFLiAgKi8KKysjZGVmaW5lIE9QVElPTl9OT19VU0FHRQkJMHgxMAorKwwKKytzdHJ1Y3QgYXJncDsJCQkvKiBmd2QgZGVjbGFyZSB0aGlzIHR5cGUgKi8KKytzdHJ1Y3QgYXJncF9zdGF0ZTsJCS8qICIgKi8KKytzdHJ1Y3QgYXJncF9jaGlsZDsJCS8qICIgKi8KKysKKysvKiBUaGUgdHlwZSBvZiBhIHBvaW50ZXIgdG8gYW4gYXJncCBwYXJzaW5nIGZ1bmN0aW9uLiAgKi8KKyt0eXBlZGVmIGVycm9yX3QgKCphcmdwX3BhcnNlcl90KSAoaW50IF9fa2V5LCBjaGFyICpfX2FyZywKKysJCQkJICBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19zdGF0ZSk7CisrCisrLyogV2hhdCB0byByZXR1cm4gZm9yIHVucmVjb2duaXplZCBrZXlzLiAgRm9yIHNwZWNpYWwgQVJHUF9LRVlfIGtleXMsIHN1Y2gKKysgICByZXR1cm5zIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuICBGb3IgdXNlciBrZXlzLCB0aGlzIGVycm9yIHdpbGwgYmUgdHVybmVkCisrICAgaW50byBFSU5WQUwgKGlmIHRoZSBjYWxsIHRvIGFyZ3BfcGFyc2UgaXMgc3VjaCB0aGF0IGVycm9ycyBhcmUgcHJvcGFnYXRlZAorKyAgIGJhY2sgdG8gdGhlIHVzZXIgaW5zdGVhZCBvZiBleGl0aW5nKTsgcmV0dXJuaW5nIEVJTlZBTCBpdHNlbGYgd291bGQgcmVzdWx0CisrICAgaW4gYW4gaW1tZWRpYXRlIHN0b3AgdG8gcGFyc2luZyBpbiAqYWxsKiBjYXNlcy4gICovCisrI2RlZmluZSBBUkdQX0VSUl9VTktOT1dOCUUyQklHIC8qIEh1cmQgc2hvdWxkIG5ldmVyIG5lZWQgRTJCSUcuICBYWFggKi8KKysKKysvKiBTcGVjaWFsIHZhbHVlcyBmb3IgdGhlIEtFWSBhcmd1bWVudCB0byBhbiBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uLgorKyAgIEFSR1BfRVJSX1VOS05PV04gc2hvdWxkIGJlIHJldHVybmVkIGlmIHRoZXkgYXJlbid0IHVuZGVyc3Rvb2QuCisrCisrICAgVGhlIHNlcXVlbmNlIG9mIGtleXMgdG8gYSBwYXJzaW5nIGZ1bmN0aW9uIGlzIGVpdGhlciAod2hlcmUgZWFjaAorKyAgIHVwcGVyY2FzZWQgd29yZCBzaG91bGQgYmUgcHJlZml4ZWQgYnkgYEFSR1BfS0VZXycgYW5kIG9wdCBpcyBhIHVzZXIga2V5KToKKysKKysgICAgICAgSU5JVCBvcHQuLi4gTk9fQVJHUyBFTkQgU1VDQ0VTUyAgLS0gTm8gbm9uLW9wdGlvbiBhcmd1bWVudHMgYXQgYWxsCisrICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gRU5EIFNVQ0NFU1MgIC0tIEFsbCBub24tb3B0aW9uIGFyZ3MgcGFyc2VkCisrICAgb3IgIElOSVQgKG9wdCB8IEFSRykuLi4gU1VDQ0VTUyAgICAgIC0tIFNvbWUgbm9uLW9wdGlvbiBhcmcgdW5yZWNvZ25pemVkCisrCisrICAgVGhlIHRoaXJkIGNhc2UgaXMgd2hlcmUgZXZlcnkgcGFyc2VyIHJldHVybmVkIEFSR1BfS0VZX1VOS05PV04gZm9yIGFuCisrICAgYXJndW1lbnQsIGluIHdoaWNoIGNhc2UgcGFyc2luZyBzdG9wcyBhdCB0aGF0IGFyZ3VtZW50IChyZXR1cm5pbmcgdGhlCisrICAgdW5wYXJzZWQgYXJndW1lbnRzIHRvIHRoZSBjYWxsZXIgb2YgYXJncF9wYXJzZSBpZiByZXF1ZXN0ZWQsIG9yIHN0b3BwaW5nCisrICAgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdCkuCisrCisrICAgSWYgYW4gZXJyb3Igb2NjdXJzIChlaXRoZXIgZGV0ZWN0ZWQgYnkgYXJncCwgb3IgYmVjYXVzZSB0aGUgcGFyc2luZworKyAgIGZ1bmN0aW9uIHJldHVybmVkIGFuIGVycm9yIHZhbHVlKSwgdGhlbiB0aGUgcGFyc2VyIGlzIGNhbGxlZCB3aXRoCisrICAgQVJHUF9LRVlfRVJST1IsIGFuZCBubyBmdXJ0aGVyIGNhbGxzIGFyZSBtYWRlLiAgKi8KKysKKysvKiBUaGlzIGlzIG5vdCBhbiBvcHRpb24gYXQgYWxsLCBidXQgcmF0aGVyIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAgSWYgYQorKyAgIHBhcnNlciByZWNlaXZpbmcgdGhpcyBrZXkgcmV0dXJucyBzdWNjZXNzLCB0aGUgZmFjdCBpcyByZWNvcmRlZCwgYW5kIHRoZQorKyAgIEFSR1BfS0VZX05PX0FSR1MgY2FzZSB3b24ndCBiZSB1c2VkLiAgSE9XRVZFUiwgaWYgd2hpbGUgcHJvY2Vzc2luZyB0aGUKKysgICBhcmd1bWVudCwgYSBwYXJzZXIgZnVuY3Rpb24gZGVjcmVtZW50cyB0aGUgTkVYVCBmaWVsZCBvZiB0aGUgc3RhdGUgaXQncworKyAgIHBhc3NlZCwgdGhlIG9wdGlvbiB3b24ndCBiZSBjb25zaWRlcmVkIHByb2Nlc3NlZDsgdGhpcyBpcyB0byBhbGxvdyB5b3UgdG8KKysgICBhY3R1YWxseSBtb2RpZnkgdGhlIGFyZ3VtZW50IChwZXJoYXBzIGludG8gYW4gb3B0aW9uKSwgYW5kIGhhdmUgaXQKKysgICBwcm9jZXNzZWQgYWdhaW4uICAqLworKyNkZWZpbmUgQVJHUF9LRVlfQVJHCQkwCisrLyogVGhlcmUgYXJlIHJlbWFpbmluZyBhcmd1bWVudHMgbm90IHBhcnNlZCBieSBhbnkgcGFyc2VyLCB3aGljaCBtYXkgYmUgZm91bmQKKysgICBzdGFydGluZyBhdCAoU1RBVEUtPmFyZ3YgKyBTVEFURS0+bmV4dCkuICBJZiBzdWNjZXNzIGlzIHJldHVybmVkLCBidXQKKysgICBTVEFURS0+bmV4dCBsZWZ0IHVudG91Y2hlZCwgaXQncyBhc3N1bWVkIHRoYXQgYWxsIGFyZ3VtZW50cyB3ZXJlIGNvbnN1bWUsCisrICAgb3RoZXJ3aXNlLCB0aGUgcGFyc2VyIHNob3VsZCBhZGp1c3QgU1RBVEUtPm5leHQgdG8gcmVmbGVjdCBhbnkgYXJndW1lbnRzCisrICAgY29uc3VtZWQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfQVJHUwkJMHgxMDAwMDA2CisrLyogVGhlcmUgYXJlIG5vIG1vcmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhdCBhbGwuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfRU5ECQkweDEwMDAwMDEKKysvKiBCZWNhdXNlIGl0J3MgY29tbW9uIHRvIHdhbnQgdG8gZG8gc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgaWYgdGhlcmUgYXJlbid0CisrICAgYW55IG5vbi1vcHRpb24gYXJncywgdXNlciBwYXJzZXJzIGFyZSBjYWxsZWQgd2l0aCB0aGlzIGtleSBpZiB0aGV5IGRpZG4ndAorKyAgIHN1Y2Nlc3NmdWxseSBwcm9jZXNzIGFueSBub24tb3B0aW9uIGFyZ3VtZW50cy4gIENhbGxlZCBqdXN0IGJlZm9yZQorKyAgIEFSR1BfS0VZX0VORCAod2hlcmUgbW9yZSBnZW5lcmFsIHZhbGlkaXR5IGNoZWNrcyBvbiBwcmV2aW91c2x5IHBhcnNlZAorKyAgIGFyZ3VtZW50cyBjYW4gdGFrZSBwbGFjZSkuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfTk9fQVJHUwkweDEwMDAwMDIKKysvKiBQYXNzZWQgaW4gYmVmb3JlIGFueSBwYXJzaW5nIGlzIGRvbmUuICBBZnRlcndhcmRzLCB0aGUgdmFsdWVzIG9mIGVhY2gKKysgICBlbGVtZW50IG9mIHRoZSBDSElMRF9JTlBVVCBmaWVsZCwgaWYgYW55LCBpbiB0aGUgc3RhdGUgc3RydWN0dXJlIGlzCisrICAgY29waWVkIHRvIGVhY2ggY2hpbGQncyBzdGF0ZSB0byBiZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgSU5QVVQgZmllbGQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSU5JVAkJMHgxMDAwMDAzCisrLyogVXNlIGFmdGVyIGFsbCBvdGhlciBrZXlzLCBpbmNsdWRpbmcgU1VDQ0VTUyAmIEVORC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9GSU5JCQkweDEwMDAwMDcKKysvKiBQYXNzZWQgaW4gd2hlbiBwYXJzaW5nIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBjb21wbGV0ZWQgKGV2ZW4gaWYgdGhlcmUgYXJlCisrICAgc3RpbGwgYXJndW1lbnRzIHJlbWFpbmluZykuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfU1VDQ0VTUwkweDEwMDAwMDQKKysvKiBQYXNzZWQgaW4gaWYgYW4gZXJyb3Igb2NjdXJzLiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0VSUk9SCQkweDEwMDAwMDUKKysKKysvKiBBbiBhcmdwIHN0cnVjdHVyZSBjb250YWlucyBhIHNldCBvZiBvcHRpb25zIGRlY2xhcmF0aW9ucywgYSBmdW5jdGlvbiB0bworKyAgIGRlYWwgd2l0aCBwYXJzaW5nIG9uZSwgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIGEgcG9zc2libGUgdmVjdG9yIG9mIGNoaWxkCisrICAgYXJncCdzLCBhbmQgcGVyaGFwcyBhIGZ1bmN0aW9uIHRvIGZpbHRlciBoZWxwIG91dHB1dC4gIFdoZW4gYWN0dWFsbHkKKysgICBwYXJzaW5nIG9wdGlvbnMsIGdldG9wdCBpcyBjYWxsZWQgd2l0aCB0aGUgdW5pb24gb2YgYWxsIHRoZSBhcmdwCisrICAgc3RydWN0dXJlcyBjaGFpbmVkIHRvZ2V0aGVyIHRocm91Z2ggdGhlaXIgQ0hJTEQgcG9pbnRlcnMsIHdpdGggY29uZmxpY3RzCisrICAgYmVpbmcgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIGNoYWluLiAgKi8KKytzdHJ1Y3QgYXJncAorK3sKKysgIC8qIEFuIGFycmF5IG9mIGFyZ3Bfb3B0aW9uIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYW4gZW50cnkgd2l0aCBib3RoCisrICAgICBOQU1FIGFuZCBLRVkgaGF2aW5nIGEgdmFsdWUgb2YgMC4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0aW9uczsKKysKKysgIC8qIFdoYXQgdG8gZG8gd2l0aCBhbiBvcHRpb24gZnJvbSB0aGlzIHN0cnVjdHVyZS4gIEtFWSBpcyB0aGUga2V5CisrICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIG9wdGlvbiwgYW5kIEFSRyBpcyBhbnkgYXNzb2NpYXRlZCBhcmd1bWVudCAoTlVMTCBpZgorKyAgICAgbm9uZSB3YXMgc3VwcGxpZWQpLiAgSWYgS0VZIGlzbid0IHVuZGVyc3Rvb2QsIEFSR1BfRVJSX1VOS05PV04gc2hvdWxkIGJlCisrICAgICByZXR1cm5lZC4gIElmIGEgbm9uLXplcm8sIG5vbi1BUkdQX0VSUl9VTktOT1dOIHZhbHVlIGlzIHJldHVybmVkLCB0aGVuCisrICAgICBwYXJzaW5nIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHksIGFuZCB0aGF0IHZhbHVlIGlzIHJldHVybmVkIGZyb20KKysgICAgIGFyZ3BfcGFyc2UoKS4gIEZvciBzcGVjaWFsIChub24tdXNlci1zdXBwbGllZCkgdmFsdWVzIG9mIEtFWSwgc2VlIHRoZQorKyAgICAgQVJHUF9LRVlfIGRlZmluaXRpb25zIGJlbG93LiAgKi8KKysgIGFyZ3BfcGFyc2VyX3QgcGFyc2VyOworKworKyAgLyogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IG90aGVyIGFyZ3VtZW50cyBhcmUgd2FudGVkIGJ5IHRoaXMgcHJvZ3JhbS4gIEl0CisrICAgICBpcyBvbmx5IHVzZWQgYnkgYXJncF91c2FnZSB0byBwcmludCB0aGUgYFVzYWdlOicgbWVzc2FnZS4gIElmIGl0CisrICAgICBjb250YWlucyBuZXdsaW5lcywgdGhlIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IHRoZW0gYXJlIGNvbnNpZGVyZWQKKysgICAgIGFsdGVybmF0aXZlIHVzYWdlIHBhdHRlcm5zLCBhbmQgcHJpbnRlZCBvbiBzZXBhcmF0ZSBsaW5lcyAobGluZXMgYWZ0ZXIKKysgICAgIHRoZSBmaXJzdCBhcmUgcHJlZml4IGJ5IGAgIG9yOiAnIGluc3RlYWQgb2YgYFVzYWdlOicpLiAgKi8KKysgIF9fY29uc3QgY2hhciAqYXJnc19kb2M7CisrCisrICAvKiBJZiBub24tTlVMTCwgYSBzdHJpbmcgY29udGFpbmluZyBleHRyYSB0ZXh0IHRvIGJlIHByaW50ZWQgYmVmb3JlIGFuZAorKyAgICAgYWZ0ZXIgdGhlIG9wdGlvbnMgaW4gYSBsb25nIGhlbHAgbWVzc2FnZSAoc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgdGFiCisrICAgICBgXHYnIGNoYXJhY3RlcikuICAqLworKyAgX19jb25zdCBjaGFyICpkb2M7CisrCisrICAvKiBBIHZlY3RvciBvZiBhcmdwX2NoaWxkcmVuIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgYSBtZW1iZXIgd2l0aCBhIDAKKysgICAgIGFyZ3AgZmllbGQsIHBvaW50aW5nIHRvIGNoaWxkIGFyZ3BzIHNob3VsZCBiZSBwYXJzZWQgd2l0aCB0aGlzIG9uZS4gIEFueQorKyAgICAgY29uZmxpY3RzIGFyZSByZXNvbHZlZCBpbiBmYXZvciBvZiB0aGlzIGFyZ3AsIG9yIGVhcmx5IGFyZ3BzIGluIHRoZQorKyAgICAgQ0hJTERSRU4gbGlzdC4gIFRoaXMgZmllbGQgaXMgdXNlZnVsIGlmIHlvdSB1c2UgbGlicmFyaWVzIHRoYXQgc3VwcGx5CisrICAgICB0aGVpciBvd24gYXJncCBzdHJ1Y3R1cmUsIHdoaWNoIHlvdSB3YW50IHRvIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHlvdXIKKysgICAgIG93bi4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbjsKKysKKysgIC8qIElmIG5vbi16ZXJvLCB0aGlzIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRvIGZpbHRlciB0aGUgb3V0cHV0IG9mIGhlbHAKKysgICAgIG1lc3NhZ2VzLiAgS0VZIGlzIGVpdGhlciBhIGtleSBmcm9tIGFuIG9wdGlvbiwgaW4gd2hpY2ggY2FzZSBURVhUIGlzCisrICAgICB0aGF0IG9wdGlvbidzIGhlbHAgdGV4dCwgb3IgYSBzcGVjaWFsIGtleSBmcm9tIHRoZSBBUkdQX0tFWV9IRUxQXworKyAgICAgZGVmaW5lcywgYmVsb3csIGRlc2NyaWJpbmcgd2hpY2ggb3RoZXIgaGVscCB0ZXh0IFRFWFQgaXMuICBUaGUgZnVuY3Rpb24KKysgICAgIHNob3VsZCByZXR1cm4gZWl0aGVyIFRFWFQsIGlmIGl0IHNob3VsZCBiZSB1c2VkIGFzLWlzLCBhIHJlcGxhY2VtZW50CisrICAgICBzdHJpbmcsIHdoaWNoIHNob3VsZCBiZSBtYWxsb2NlZCwgYW5kIHdpbGwgYmUgZnJlZWQgYnkgYXJncCwgb3IgTlVMTCwKKysgICAgIG1lYW5pbmcgYHByaW50IG5vdGhpbmcnLiAgVGhlIHZhbHVlIGZvciBURVhUIGlzICphZnRlciogYW55IHRyYW5zbGF0aW9uCisrICAgICBoYXMgYmVlbiBkb25lLCBzbyBpZiBhbnkgb2YgdGhlIHJlcGxhY2VtZW50IHRleHQgYWxzbyBuZWVkcyB0cmFuc2xhdGlvbiwKKysgICAgIHRoYXQgc2hvdWxkIGJlIGRvbmUgYnkgdGhlIGZpbHRlciBmdW5jdGlvbi4gIElOUFVUIGlzIGVpdGhlciB0aGUgaW5wdXQKKysgICAgIHN1cHBsaWVkIHRvIGFyZ3BfcGFyc2UsIG9yIE5VTEwsIGlmIGFyZ3BfaGVscCB3YXMgY2FsbGVkIGRpcmVjdGx5LiAgKi8KKysgIGNoYXIgKigqaGVscF9maWx0ZXIpIChpbnQgX19rZXksIF9fY29uc3QgY2hhciAqX190ZXh0LCB2b2lkICpfX2lucHV0KTsKKysKKysgIC8qIElmIG5vbi16ZXJvIHRoZSBzdHJpbmdzIHVzZWQgaW4gdGhlIGFyZ3AgbGlicmFyeSBhcmUgdHJhbnNsYXRlZCB1c2luZworKyAgICAgdGhlIGRvbWFpbiBkZXNjcmliZWQgYnkgdGhpcyBzdHJpbmcuICBPdGhlcndpc2UgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQKKysgICAgIGRlZmF1bHQgZG9tYWluIGlzIHVzZWQuICAqLworKyAgY29uc3QgY2hhciAqYXJncF9kb21haW47CisrfTsKKysKKysvKiBQb3NzaWJsZSBLRVkgYXJndW1lbnRzIHRvIGEgaGVscCBmaWx0ZXIgZnVuY3Rpb24uICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QUkVfRE9DCTB4MjAwMDAwMSAvKiBIZWxwIHRleHQgcHJlY2VlZGluZyBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9QT1NUX0RPQwkweDIwMDAwMDIgLyogSGVscCB0ZXh0IGZvbGxvd2luZyBvcHRpb25zLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9IRUFERVIJMHgyMDAwMDAzIC8qIE9wdGlvbiBoZWFkZXIgc3RyaW5nLiAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9FWFRSQQkweDIwMDAwMDQgLyogQWZ0ZXIgYWxsIG90aGVyIGRvY3VtZW50YXRpb247CisrCQkJCQkgICAgIFRFWFQgaXMgTlVMTCBmb3IgdGhpcyBrZXkuICAqLworKy8qIEV4cGxhbmF0b3J5IG5vdGUgZW1pdHRlZCB3aGVuIGR1cGxpY2F0ZSBvcHRpb24gYXJndW1lbnRzIGhhdmUgYmVlbgorKyAgIHN1cHByZXNzZWQuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9EVVBfQVJHU19OT1RFIDB4MjAwMDAwNQorKyNkZWZpbmUgQVJHUF9LRVlfSEVMUF9BUkdTX0RPQwkweDIwMDAwMDYgLyogQXJndW1lbnQgZG9jIHN0cmluZy4gICovCisrDAorKy8qIFdoZW4gYW4gYXJncCBoYXMgYSBub24temVybyBDSElMRFJFTiBmaWVsZCwgaXQgc2hvdWxkIHBvaW50IHRvIGEgdmVjdG9yIG9mCisrICAgYXJncF9jaGlsZCBzdHJ1Y3R1cmVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHN1YnNpZGlhcnkgYXJncC4gICovCisrc3RydWN0IGFyZ3BfY2hpbGQKKyt7CisrICAvKiBUaGUgY2hpbGQgcGFyc2VyLiAgKi8KKysgIF9fY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBGbGFncyBmb3IgdGhpcyBjaGlsZC4gICovCisrICBpbnQgZmxhZ3M7CisrCisrICAvKiBJZiBub24temVybywgYW4gb3B0aW9uYWwgaGVhZGVyIHRvIGJlIHByaW50ZWQgaW4gaGVscCBvdXRwdXQgYmVmb3JlIHRoZQorKyAgICAgY2hpbGQgb3B0aW9ucy4gIEFzIGEgc2lkZS1lZmZlY3QsIGEgbm9uLXplcm8gdmFsdWUgZm9yY2VzIHRoZSBjaGlsZAorKyAgICAgb3B0aW9ucyB0byBiZSBncm91cGVkIHRvZ2V0aGVyOyB0byBhY2hpZXZlIHRoaXMgZWZmZWN0IHdpdGhvdXQgYWN0dWFsbHkKKysgICAgIHByaW50aW5nIGEgaGVhZGVyIHN0cmluZywgdXNlIGEgdmFsdWUgb2YgIiIuICAqLworKyAgX19jb25zdCBjaGFyICpoZWFkZXI7CisrCisrICAvKiBXaGVyZSB0byBncm91cCB0aGUgY2hpbGQgb3B0aW9ucyByZWxhdGl2ZSB0byB0aGUgb3RoZXIgKGBjb25zb2xpZGF0ZWQnKQorKyAgICAgb3B0aW9ucyBpbiB0aGUgcGFyZW50IGFyZ3A7IHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBHUk9VUCBmaWVsZAorKyAgICAgaW4gYXJncF9vcHRpb24gc3RydWN0cywgYnV0IGFsbCBjaGlsZC1ncm91cGluZ3MgZm9sbG93IHBhcmVudCBvcHRpb25zIGF0CisrICAgICBhIHBhcnRpY3VsYXIgZ3JvdXAgbGV2ZWwuICBJZiBib3RoIHRoaXMgZmllbGQgYW5kIEhFQURFUiBhcmUgemVybywgdGhlbgorKyAgICAgdGhleSBhcmVuJ3QgZ3JvdXBlZCBhdCBhbGwsIGJ1dCByYXRoZXIgbWVyZ2VkIHdpdGggdGhlIHBhcmVudCBvcHRpb25zCisrICAgICAobWVyZ2luZyB0aGUgY2hpbGQncyBncm91cGluZyBsZXZlbHMgd2l0aCB0aGUgcGFyZW50cykuICAqLworKyAgaW50IGdyb3VwOworK307CisrDAorKy8qIFBhcnNpbmcgc3RhdGUuICBUaGlzIGlzIHByb3ZpZGVkIHRvIHBhcnNpbmcgZnVuY3Rpb25zIGNhbGxlZCBieSBhcmdwLAorKyAgIHdoaWNoIG1heSBleGFtaW5lIGFuZCwgYXMgbm90ZWQsIG1vZGlmeSBmaWVsZHMuICAqLworK3N0cnVjdCBhcmdwX3N0YXRlCisreworKyAgLyogVGhlIHRvcCBsZXZlbCBBUkdQIGJlaW5nIHBhcnNlZC4gICovCisrICBfX2NvbnN0IHN0cnVjdCBhcmdwICpyb290X2FyZ3A7CisrCisrICAvKiBUaGUgYXJndW1lbnQgdmVjdG9yIGJlaW5nIHBhcnNlZC4gIE1heSBiZSBtb2RpZmllZC4gICovCisrICBpbnQgYXJnYzsKKysgIGNoYXIgKiphcmd2OworKworKyAgLyogVGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgYXJnIHRoYXQgdG8gYmUgcGFyc2VkLiAgTWF5IGJlIG1vZGlmaWVkLiAqLworKyAgaW50IG5leHQ7CisrCisrICAvKiBUaGUgZmxhZ3Mgc3VwcGxpZWQgdG8gYXJncF9wYXJzZS4gIE1heSBiZSBtb2RpZmllZC4gICovCisrICB1bnNpZ25lZCBmbGFnczsKKysKKysgIC8qIFdoaWxlIGNhbGxpbmcgYSBwYXJzaW5nIGZ1bmN0aW9uIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfQVJHLCB0aGlzIGlzIHRoZQorKyAgICAgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGFyZywgc3RhcnRpbmcgYXQgemVybywgYW5kIGluY3JlbWVudGVkIGFmdGVyIGVhY2gKKysgICAgIHN1Y2ggY2FsbCByZXR1cm5zLiAgQXQgYWxsIG90aGVyIHRpbWVzLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3VjaAorKyAgICAgYXJndW1lbnRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gICovCisrICB1bnNpZ25lZCBhcmdfbnVtOworKworKyAgLyogSWYgbm9uLXplcm8sIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBmb2xsb3dpbmcgYSBzcGVjaWFsCisrICAgICBgLS0nIGFyZ3VtZW50ICh3aGljaCBwcmV2ZW50cyBhbnl0aGluZyBmb2xsb3dpbmcgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYW4KKysgICAgIG9wdGlvbikuICBPbmx5IHNldCBvbmNlIGFyZ3VtZW50IHBhcnNpbmcgaGFzIHByb2NlZWRlZCBwYXN0IHRoaXMgcG9pbnQuICovCisrICBpbnQgcXVvdGVkOworKworKyAgLyogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgcGFzc2VkIGluIGZyb20gdGhlIHVzZXIuICAqLworKyAgdm9pZCAqaW5wdXQ7CisrICAvKiBWYWx1ZXMgdG8gcGFzcyB0byBjaGlsZCBwYXJzZXJzLiAgVGhpcyB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBsZW5ndGggYXMKKysgICAgIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIHRoZSBjdXJyZW50IHBhcnNlci4gICovCisrICB2b2lkICoqY2hpbGRfaW5wdXRzOworKworKyAgLyogRm9yIHRoZSBwYXJzZXIncyB1c2UuICBJbml0aWFsaXplZCB0byAwLiAgKi8KKysgIHZvaWQgKmhvb2s7CisrCisrICAvKiBUaGUgbmFtZSB1c2VkIHdoZW4gcHJpbnRpbmcgbWVzc2FnZXMuICBUaGlzIGlzIGluaXRpYWxpemVkIHRvIEFSR1ZbMF0sCisrICAgICBvciBQUk9HUkFNX0lOVk9DQVRJT05fTkFNRSBpZiB0aGF0IGlzIHVuYXZhaWxhYmxlLiAgKi8KKysgIGNoYXIgKm5hbWU7CisrCisrICAvKiBTdHJlYW1zIHVzZWQgd2hlbiBhcmdwIHByaW50cyBzb21ldGhpbmcuICAqLworKyAgRklMRSAqZXJyX3N0cmVhbTsJCS8qIEZvciBlcnJvcnM7IGluaXRpYWxpemVkIHRvIHN0ZGVyci4gKi8KKysgIEZJTEUgKm91dF9zdHJlYW07CQkvKiBGb3IgaW5mb3JtYXRpb247IGluaXRpYWxpemVkIHRvIHN0ZG91dC4gKi8KKysKKysgIHZvaWQgKnBzdGF0ZTsJCQkvKiBQcml2YXRlLCBmb3IgdXNlIGJ5IGFyZ3AuICAqLworK307CisrDAorKy8qIEZsYWdzIGZvciBhcmdwX3BhcnNlIChub3RlIHRoYXQgdGhlIGRlZmF1bHRzIGFyZSB0aG9zZSB0aGF0IGFyZQorKyAgIGNvbnZlbmllbnQgZm9yIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcpOiAqLworKworKy8qIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBBUkdWLiAgTm9ybWFsbHkgKGFuZCBhbHdheXMgdW5sZXNzCisrICAgQVJHUF9OT19FUlJTIGlzIHNldCkgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IHZlY3RvciBpcworKyAgIHNraXBwZWQgZm9yIG9wdGlvbiBwYXJzaW5nIHB1cnBvc2VzLCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvZ3JhbSBuYW1lCisrICAgaW4gYSBjb21tYW5kIGxpbmUuICAqLworKyNkZWZpbmUgQVJHUF9QQVJTRV9BUkdWMCAgMHgwMQorKworKy8qIERvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGZvciB1bmtub3duIG9wdGlvbnMgdG8gc3RkZXJyOyB1bmxlc3MgdGhpcyBmbGFnCisrICAgaXMgc2V0LCBBUkdQX1BBUlNFX0FSR1YwIGlzIGlnbm9yZWQsIGFzIEFSR1ZbMF0gaXMgdXNlZCBhcyB0aGUgcHJvZ3JhbQorKyAgIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzLiAgVGhpcyBmbGFnIGltcGxpZXMgQVJHUF9OT19FWElUIChvbiB0aGUKKysgICBhc3N1bXB0aW9uIHRoYXQgc2lsZW50IGV4aXRpbmcgdXBvbiBlcnJvcnMgaXMgYmFkIGJlaGF2aW91cikuICAqLworKyNkZWZpbmUgQVJHUF9OT19FUlJTCTB4MDIKKysKKysvKiBEb24ndCBwYXJzZSBhbnkgbm9uLW9wdGlvbiBhcmdzLiAgTm9ybWFsbHkgbm9uLW9wdGlvbiBhcmdzIGFyZSBwYXJzZWQgYnkKKysgICBjYWxsaW5nIHRoZSBwYXJzZSBmdW5jdGlvbnMgd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9BUkcsIGFuZCB0aGUgYWN0dWFsIGFyZworKyAgIGFzIHRoZSB2YWx1ZS4gIFNpbmNlIGl0J3MgaW1wb3NzaWJsZSB0byBrbm93IHdoaWNoIHBhcnNlIGZ1bmN0aW9uIHdhbnRzIHRvCisrICAgaGFuZGxlIGl0LCBlYWNoIG9uZSBpcyBjYWxsZWQgaW4gdHVybiwgdW50aWwgb25lIHJldHVybnMgMCBvciBhbiBlcnJvcgorKyAgIG90aGVyIHRoYW4gQVJHUF9FUlJfVU5LTk9XTjsgaWYgYW4gYXJndW1lbnQgaXMgaGFuZGxlZCBieSBubyBvbmUsIHRoZQorKyAgIGFyZ3BfcGFyc2UgcmV0dXJucyBwcmVtYXR1cmVseSAoYnV0IHdpdGggYSByZXR1cm4gdmFsdWUgb2YgMCkuICBJZiBhbGwKKysgICBhcmdzIGhhdmUgYmVlbiBwYXJzZWQgd2l0aG91dCBlcnJvciwgYWxsIHBhcnNpbmcgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb25lCisrICAgbGFzdCB0aW1lIHdpdGggYSBrZXkgb2YgQVJHUF9LRVlfRU5ELiAgVGhpcyBmbGFnIG5lZWRuJ3Qgbm9ybWFsbHkgYmUgc2V0LAorKyAgIGFzIHRoZSBub3JtYWwgYmVoYXZpb3IgaXMgdG8gc3RvcCBwYXJzaW5nIGFzIHNvb24gYXMgc29tZSBhcmd1bWVudCBjYW4ndAorKyAgIGJlIGhhbmRsZWQuICAqLworKyNkZWZpbmUgQVJHUF9OT19BUkdTCTB4MDQKKysKKysvKiBQYXJzZSBvcHRpb25zIGFuZCBhcmd1bWVudHMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBvY2N1ciBvbiB0aGUgY29tbWFuZAorKyAgIGxpbmUgLS0gbm9ybWFsbHkgdGhleSdyZSByZWFycmFuZ2VkIHNvIHRoYXQgYWxsIG9wdGlvbnMgY29tZSBmaXJzdC4gKi8KKysjZGVmaW5lIEFSR1BfSU5fT1JERVIJMHgwOAorKworKy8qIERvbid0IHByb3ZpZGUgdGhlIHN0YW5kYXJkIGxvbmcgb3B0aW9uIC0taGVscCwgd2hpY2ggY2F1c2VzIHVzYWdlIGFuZAorKyAgICAgIG9wdGlvbiBoZWxwIGluZm9ybWF0aW9uIHRvIGJlIG91dHB1dCB0byBzdGRvdXQsIGFuZCBleGl0ICgwKSBjYWxsZWQuICovCisrI2RlZmluZSBBUkdQX05PX0hFTFAJMHgxMAorKworKy8qIERvbid0IGV4aXQgb24gZXJyb3JzICh0aGV5IG1heSBzdGlsbCByZXN1bHQgaW4gZXJyb3IgbWVzc2FnZXMpLiAgKi8KKysjZGVmaW5lIEFSR1BfTk9fRVhJVAkweDIwCisrCisrLyogVXNlIHRoZSBnbnUgZ2V0b3B0IGBsb25nLW9ubHknIHJ1bGVzIGZvciBwYXJzaW5nIGFyZ3VtZW50cy4gICovCisrI2RlZmluZSBBUkdQX0xPTkdfT05MWQkweDQwCisrCisrLyogVHVybnMgb2ZmIGFueSBtZXNzYWdlLXByaW50aW5nL2V4aXRpbmcgb3B0aW9ucy4gICovCisrI2RlZmluZSBBUkdQX1NJTEVOVCAgICAoQVJHUF9OT19FWElUIHwgQVJHUF9OT19FUlJTIHwgQVJHUF9OT19IRUxQKQorKworKy8qIFBhcnNlIHRoZSBvcHRpb25zIHN0cmluZ3MgaW4gQVJHQyAmIEFSR1YgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zIGluIEFSR1AuCisrICAgRkxBR1MgaXMgb25lIG9mIHRoZSBBUkdQXyBmbGFncyBhYm92ZS4gIElmIEFSR19JTkRFWCBpcyBub24tTlVMTCwgdGhlCisrICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKysgICB1bmtub3duIG9wdGlvbiBpcyBwcmVzZW50LCBBUkdQX0VSUl9VTktOT1dOIGlzIHJldHVybmVkOyBpZiBzb21lIHBhcnNlcgorKyAgIHJvdXRpbmUgcmV0dXJuZWQgYSBub24temVybyB2YWx1ZSwgaXQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSAwIGlzCisrICAgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG1heSBhbHNvIGNhbGwgZXhpdCB1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnCisrICAgaXMgc2V0LiAgSU5QVVQgaXMgYSBwb2ludGVyIHRvIGEgdmFsdWUgdG8gYmUgcGFzc2VkIGluIHRvIHRoZSBwYXJzZXIuICAqLworK2V4dGVybiBlcnJvcl90IGFyZ3BfcGFyc2UgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorKwkJCSAgIGludCBfX2FyZ2MsIGNoYXIgKipfX3Jlc3RyaWN0IF9fYXJndiwKKysJCQkgICB1bnNpZ25lZCBfX2ZsYWdzLCBpbnQgKl9fcmVzdHJpY3QgX19hcmdfaW5kZXgsCisrCQkJICAgdm9pZCAqX19yZXN0cmljdCBfX2lucHV0KTsKKysMCisrLyogR2xvYmFsIHZhcmlhYmxlcy4gICovCisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdAorKyAgIG9wdGlvbiAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoCisrICAgd2lsbCBwcmludCB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKysgICBBUkdQX05PX0VYSVQgZmxhZyBpcyB1c2VkKS4gIE92ZXJyaWRkZW4gYnkgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4gICovCisrZXh0ZXJuIF9fY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb247CisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdAorKyAgIG9wdGlvbiAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoCisrICAgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aXRoIGEgc3RyZWFtIHRvIHByaW50IHRoZSB2ZXJzaW9uIHRvIGFuZCBhIHBvaW50ZXIgdG8KKysgICB0aGUgY3VycmVudCBwYXJzaW5nIHN0YXRlLCBhbmQgdGhlbiBleGl0cyAodW5sZXNzIHRoZSBBUkdQX05PX0VYSVQgZmxhZyBpcworKyAgIHVzZWQpLiAgVGhpcyB2YXJpYWJsZSB0YWtlcyBwcmVjZWRlbnQgb3ZlciBBUkdQX1BST0dSQU1fVkVSU0lPTi4gICovCisrZXh0ZXJuIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKKysJCQkJCSAgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QKKysJCQkJCSAgX19zdGF0ZSk7CisrCisrLyogSWYgZGVmaW5lZCBvciBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSwgaXQgc2hvdWxkIHBvaW50IHRvIHN0cmluZyB0aGF0IGlzCisrICAgdGhlIGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcyBmb3IgdGhlIHByb2dyYW0uICBJdCB3aWxsIGJlIHByaW50ZWQgYnkKKysgICBhcmdwX2hlbHAgaWYgdGhlIEFSR1BfSEVMUF9CVUdfQUREUiBmbGFnIGlzIHNldCAoYXMgaXQgaXMgYnkgdmFyaW91cworKyAgIHN0YW5kYXJkIGhlbHAgbWVzc2FnZXMpLCBlbWJlZGRlZCBpbiBhIHNlbnRlbmNlIHRoYXQgc2F5cyBzb21ldGhpbmcgbGlrZQorKyAgIGBSZXBvcnQgYnVncyB0byBBRERSLicuICAqLworK2V4dGVybiBfX2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzczsKKysKKysvKiBUaGUgZXhpdCBzdGF0dXMgdGhhdCBhcmdwIHdpbGwgdXNlIHdoZW4gZXhpdGluZyBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLgorKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKysgICA8c3lzZXhpdHMuaD4uICAqLworK2V4dGVybiBlcnJvcl90IGFyZ3BfZXJyX2V4aXRfc3RhdHVzOworKwwKKysvKiBGbGFncyBmb3IgYXJncF9oZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9VU0FHRQkJMHgwMSAvKiBhIFVzYWdlOiBtZXNzYWdlLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NIT1JUX1VTQUdFCTB4MDIgLyogICIgYnV0IGRvbid0IGFjdHVhbGx5IHByaW50IG9wdGlvbnMuICovCisrI2RlZmluZSBBUkdQX0hFTFBfU0VFCQkweDA0IC8qIGEgYFRyeSAuLi4gZm9yIG1vcmUgaGVscCcgbWVzc2FnZS4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9MT05HCQkweDA4IC8qIGEgbG9uZyBoZWxwIG1lc3NhZ2UuICovCisrI2RlZmluZSBBUkdQX0hFTFBfUFJFX0RPQwkweDEwIC8qIGRvYyBzdHJpbmcgcHJlY2VkaW5nIGxvbmcgaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfUE9TVF9ET0MJMHgyMCAvKiBkb2Mgc3RyaW5nIGZvbGxvd2luZyBsb25nIGhlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0RPQwkJKEFSR1BfSEVMUF9QUkVfRE9DIHwgQVJHUF9IRUxQX1BPU1RfRE9DKQorKyNkZWZpbmUgQVJHUF9IRUxQX0JVR19BRERSCTB4NDAgLyogYnVnIHJlcG9ydCBhZGRyZXNzICovCisrI2RlZmluZSBBUkdQX0hFTFBfTE9OR19PTkxZCTB4ODAgLyogbW9kaWZ5IG91dHB1dCBhcHByb3ByaWF0ZWx5IHRvCisrCQkJCQlyZWZsZWN0IEFSR1BfTE9OR19PTkxZIG1vZGUuICAqLworKworKy8qIFRoZXNlIEFSR1BfSEVMUCBmbGFncyBhcmUgb25seSB1bmRlcnN0b29kIGJ5IGFyZ3Bfc3RhdGVfaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfRVhJVF9FUlIJMHgxMDAgLyogQ2FsbCBleGl0KDEpIGluc3RlYWQgb2YgcmV0dXJuaW5nLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9FWElUX09LCTB4MjAwIC8qIENhbGwgZXhpdCgwKSBpbnN0ZWFkIG9mIHJldHVybmluZy4gICovCisrCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGFmdGVyIGEgcHJvZ3JhbSBjb21tYW5kIGxpbmUgcGFyc2luZyBlcnJvciwgaWYgYW4KKysgICBlcnJvciBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gcHJpbnRlZC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX0VSUiBcCisrICAoQVJHUF9IRUxQX1NFRSB8IEFSR1BfSEVMUF9FWElUX0VSUikKKysvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gYWZ0ZXIgYSBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nIGVycm9yLCBpZiBubworKyAgIG1vcmUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBwcmludGVkLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TVERfVVNBR0UgXAorKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9TRUUgfCBBUkdQX0hFTFBfRVhJVF9FUlIpCisrLyogVGhlIHN0YW5kYXJkIHRoaW5nIHRvIGRvIGluIHJlc3BvbnNlIHRvIGEgLS1oZWxwIG9wdGlvbi4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfU1REX0hFTFAgXAorKyAgKEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HIHwgQVJHUF9IRUxQX0VYSVRfT0sgXAorKyAgIHwgQVJHUF9IRUxQX0RPQyB8IEFSR1BfSEVMUF9CVUdfQUREUikKKysKKysvKiBPdXRwdXQgYSB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIFNUUkVBTS4gIEZMQUdTIGFyZSBmcm9tIHRoZSBzZXQKKysgICBBUkdQX0hFTFBfKi4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCSAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJICAgICAgIHVuc2lnbmVkIF9fZmxhZ3MsIGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lKTsKKysMCisrLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIGFuIGFyZ3AKKysgICBwYXJzaW5nIHJvdXRpbmUgKHRodXMgdGFraW5nIGFuIGFyZ3Bfc3RhdGUgc3RydWN0dXJlIGFzIHRoZSBmaXJzdAorKyAgIGFyZ3VtZW50KS4gIFRoZXkgbWF5IG9yIG1heSBub3QgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCwgZGVwZW5kaW5nCisrICAgb24gdGhlIGZsYWdzIGluIFNUQVRFIC0tIGluIGFueSBjYXNlLCB0aGUgY2FsbGVyIHNob3VsZCBiZSBwcmVwYXJlZCBmb3IKKysgICB0aGVtICpub3QqIHRvIGV4aXQsIGFuZCBzaG91bGQgcmV0dXJuIGFuIGFwcHJvcGlhdGUgZXJyb3IgYWZ0ZXIgY2FsbGluZworKyAgIHRoZW0uICBbYXJncF91c2FnZSAmIGFyZ3BfZXJyb3Igc2hvdWxkIHByb2JhYmx5IGJlIGNhbGxlZCBhcmdwX3N0YXRlXy4uLiwKKysgICBidXQgdGhleSdyZSB1c2VkIG9mdGVuIGVub3VnaCB0aGF0IHRoZXkgc2hvdWxkIGJlIHNob3J0XSAgKi8KKysKKysvKiBPdXRwdXQsIGlmIGFwcHJvcHJpYXRlLCBhIHVzYWdlIG1lc3NhZ2UgZm9yIFNUQVRFIHRvIFNUUkVBTS4gIEZMQUdTIGFyZQorKyAgIGZyb20gdGhlIHNldCBBUkdQX0hFTFBfKi4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9zdGF0ZV9oZWxwIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJCSAgICAgdW5zaWduZWQgaW50IF9fZmxhZ3MpOworKy8qIFBvc3NpYmx5IG91dHB1dCB0aGUgc3RhbmRhcmQgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBzdGRlcnIgYW5kIGV4aXQuICAqLworK2V4dGVybiB2b2lkIGFyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpOworKworKy8qIElmIGFwcHJvcHJpYXRlLCBwcmludCB0aGUgcHJpbnRmIHN0cmluZyBGTVQgYW5kIGZvbGxvd2luZyBhcmdzLCBwcmVjZWRlZAorKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisrICAgbWVzc2FnZSwgdGhlbiBleGl0ICgxKS4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9lcnJvciAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdCBfX3N0YXRlLAorKwkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CisrLyogU2ltaWxhciB0byB0aGUgc3RhbmRhcmQgZ251IGVycm9yLXJlcG9ydGluZyBmdW5jdGlvbiBlcnJvcigpLCBidXQgd2lsbAorKyAgIHJlc3BlY3QgdGhlIEFSR1BfTk9fRVhJVCBhbmQgQVJHUF9OT19FUlJTIGZsYWdzIGluIFNUQVRFLCBhbmQgd2lsbCBwcmludAorKyAgIHRvIFNUQVRFLT5lcnJfc3RyZWFtLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGFyZ3VtZW50IHBhcnNpbmcgY29kZSB0aGF0IGlzCisrICAgc2hhcmVkIGJldHdlZW4gcHJvZ3JhbSBzdGFydHVwICh3aGVuIGV4aXRpbmcgaXMgZGVzaXJlZCkgYW5kIHJ1bnRpbWUKKysgICBvcHRpb24gcGFyc2luZyAod2hlbiB0eXBpY2FsbHkgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbnN0ZWFkKS4gIFRoZQorKyAgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCBhcmdwX2Vycm9yIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBmb3IKKysgICAqcGFyc2luZyBlcnJvcnMqLCBhbmQgdGhlIGZvcm1lciBpcyBmb3Igb3RoZXIgcHJvYmxlbXMgdGhhdCBvY2N1ciBkdXJpbmcKKysgICBwYXJzaW5nIGJ1dCBkb24ndCByZWZsZWN0IGEgKHN5bnRhY3RpYykgcHJvYmxlbSB3aXRoIHRoZSBpbnB1dC4gICovCisrZXh0ZXJuIHZvaWQgYXJncF9mYWlsdXJlIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJICBpbnQgX19zdGF0dXMsIGludCBfX2Vycm51bSwKKysJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQorKyAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSk7CisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBvcHRpb24gT1BUIGlzIGEgdmFsaWQgc2hvcnQgb3B0aW9uLiAgKi8KKytleHRlcm4gaW50IF9vcHRpb25faXNfc2hvcnQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKytleHRlcm4gaW50IF9fb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrCisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBvcHRpb24gT1BUIGlzIGluIGZhY3QgdGhlIGxhc3QgKHVudXNlZCkgZW50cnkgaW4gYW4KKysgICBvcHRpb25zIGFycmF5LiAgKi8KKytleHRlcm4gaW50IF9vcHRpb25faXNfZW5kIChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpIF9fVEhST1c7CisrZXh0ZXJuIGludCBfX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKysKKysvKiBSZXR1cm4gdGhlIGlucHV0IGZpZWxkIGZvciBBUkdQIGluIHRoZSBwYXJzZXIgY29ycmVzcG9uZGluZyB0byBTVEFURTsgdXNlZAorKyAgIGJ5IHRoZSBoZWxwIHJvdXRpbmVzLiAgKi8KKysvKiBXZSB0aGluayB0aGlzIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQgKi8KKytleHRlcm4gdm9pZCAqX19hcmdwX2lucHV0IChfX2NvbnN0IHN0cnVjdCBhcmdwICpfX3Jlc3RyaWN0IF9fYXJncCwKKysJCQkgICBfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUpCisrICAgICBfX1RIUk9XOworKwwKKysjaWZkZWYgX19VU0VfRVhURVJOX0lOTElORVMKKysKKysjIGlmbmRlZiBBUkdQX0VJCisrIyAgZGVmaW5lIEFSR1BfRUkgX19leHRlcm5faW5saW5lCisrIyBlbmRpZgorKworK0FSR1BfRUkgdm9pZAorK2FyZ3BfdXNhZ2UgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fc3RhdGUpCisreworKyAgYXJncF9zdGF0ZV9oZWxwIChfX3N0YXRlLCBzdGRlcnIsIEFSR1BfSEVMUF9TVERfVVNBR0UpOworK30KKysKKytBUkdQX0VJIGludAorK19fTlRIIChfX29wdGlvbl9pc19zaG9ydCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSkKKyt7CisrICBpZiAoX19vcHQtPmZsYWdzICYgT1BUSU9OX0RPQykKKysgICAgcmV0dXJuIDA7CisrICBlbHNlCisrICAgIHsKKysgICAgICBpbnQgX19rZXkgPSBfX29wdC0+a2V5OworKyAgICAgIHJldHVybiBfX2tleSA+IDAgJiYgX19rZXkgPD0gVUNIQVJfTUFYICYmIGlzcHJpbnQgKF9fa2V5KTsKKysgICAgfQorK30KKysKKytBUkdQX0VJIGludAorK19fTlRIIChfX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkpCisreworKyAgcmV0dXJuICFfX29wdC0+a2V5ICYmICFfX29wdC0+bmFtZSAmJiAhX19vcHQtPmRvYyAmJiAhX19vcHQtPmdyb3VwOworK30KKysjZW5kaWYgLyogVXNlIGV4dGVybiBpbmxpbmVzLiAgKi8KKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBhcmdwLmggKi8KK2RpZmYgLS1naXQgYS9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI5MWVkZmUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmgKK0BAIC0wLDAgKzEsMTM2IEBACisrLyogSW50ZXJuYWwgZGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisrICAgQ29weXJpZ2h0IChDKSAxOTg5LTE5OTQsMTk5Ni0xOTk5LDIwMDEsMjAwMywyMDA0CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZm5kZWYgX0dFVE9QVF9JTlRfSAorKyNkZWZpbmUgX0dFVE9QVF9JTlRfSCAgMQorKworK2V4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2xvbmdfb25seSkgYXR0cmlidXRlX2hpZGRlbjsKKysKKysKKysvKiBSZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggY2FuIGhhbmRsZSBwYXJzaW5nIG11bHRpcGxlIGFyZ3VtZW50CisrICAgdmVjdG9ycyBhdCB0aGUgc2FtZSB0aW1lLiAgKi8KKysKKysvKiBGb3IgX19vcmRlcmluZyBtZW1iZXIgKi8KKytlbnVtIHsKKysgICAgICAgUkVRVUlSRV9PUkRFUiwgUEVSTVVURSwgUkVUVVJOX0lOX09SREVSCisrfTsKKysKKysvKiBEYXRhIHR5cGUgZm9yIHJlZW50cmFudCBmdW5jdGlvbnMuICAqLworKworK3N0cnVjdCBfZ2V0b3B0X2RhdGEKKyt7CisrICAvKiBUaGVzZSBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgY29ycmVzcG9uZGluZyBnbG9iYWwKKysgICAgIHZhcmlhYmxlcywgZXhjZXB0IHRoYXQgdGhleSBhcmUgdXNlZCBmb3IgdGhlIHJlZW50cmFudAorKyAgICAgdmVyc2lvbnMgb2YgZ2V0b3B0LiAgKi8KKysgIGludCBvcHRpbmQ7CisrICBpbnQgb3B0ZXJyOworKyAgY2hhciAqb3B0YXJnOworKyAgc21hbGx1aW50IG9wdG9wdDsgLyogd2Ugc3RvcmUgY2hhcmFjdGVycyBoZXJlLCBhIGJ5dGUgaXMgZW5vdWdoICovCisrCisrICAvKiBJbnRlcm5hbCBtZW1iZXJzLiAgKi8KKysKKysgIC8qIFRydWUgaWYgdGhlIGludGVybmFsIG1lbWJlcnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiAgKi8KKysgIHNtYWxsaW50IF9faW5pdGlhbGl6ZWQ7CisrCisrICAvKiBEZXNjcmliZSBob3cgdG8gZGVhbCB3aXRoIG9wdGlvbnMgdGhhdCBmb2xsb3cgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzLgorKworKyAgICAgSWYgdGhlIGNhbGxlciBkaWQgbm90IHNwZWNpZnkgYW55dGhpbmcsCisrICAgICB0aGUgZGVmYXVsdCBpcyBSRVFVSVJFX09SREVSIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorKyAgICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorKworKyAgICAgUkVRVUlSRV9PUkRFUiBtZWFucyBkb24ndCByZWNvZ25pemUgdGhlbSBhcyBvcHRpb25zOworKyAgICAgc3RvcCBvcHRpb24gcHJvY2Vzc2luZyB3aGVuIHRoZSBmaXJzdCBub24tb3B0aW9uIGlzIHNlZW4uCisrICAgICBUaGlzIGlzIHdoYXQgVW5peCBkb2VzLgorKyAgICAgVGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBzZWxlY3RlZCBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQKKysgICAgIHZhcmlhYmxlIFBPU0lYTFlfQ09SUkVDVCwgb3IgdXNpbmcgYCsnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKysgICAgIG9mIHRoZSBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzLgorKworKyAgICAgUEVSTVVURSBpcyB0aGUgZGVmYXVsdC4gIFdlIHBlcm11dGUgdGhlIGNvbnRlbnRzIG9mIEFSR1YgYXMgd2UKKysgICAgIHNjYW4sIHNvIHRoYXQgZXZlbnR1YWxseSBhbGwgdGhlIG5vbi1vcHRpb25zIGFyZSBhdCB0aGUgZW5kLgorKyAgICAgVGhpcyBhbGxvd3Mgb3B0aW9ucyB0byBiZSBnaXZlbiBpbiBhbnkgb3JkZXIsIGV2ZW4gd2l0aCBwcm9ncmFtcworKyAgICAgdGhhdCB3ZXJlIG5vdCB3cml0dGVuIHRvIGV4cGVjdCB0aGlzLgorKworKyAgICAgUkVUVVJOX0lOX09SREVSIGlzIGFuIG9wdGlvbiBhdmFpbGFibGUgdG8gcHJvZ3JhbXMgdGhhdCB3ZXJlCisrICAgICB3cml0dGVuIHRvIGV4cGVjdCBvcHRpb25zIGFuZCBvdGhlciBBUkdWLWVsZW1lbnRzIGluIGFueSBvcmRlcgorKyAgICAgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3by4gIFdlIGRlc2NyaWJlIGVhY2gKKysgICAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGFzIGlmIGl0IHdlcmUgdGhlIGFyZ3VtZW50IG9mIGFuIG9wdGlvbgorKyAgICAgd2l0aCBjaGFyYWN0ZXIgY29kZSAxLiAgVXNpbmcgYC0nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCisrICAgICBsaXN0IG9mIG9wdGlvbiBjaGFyYWN0ZXJzIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKysKKysgICAgIFRoZSBzcGVjaWFsIGFyZ3VtZW50IGAtLScgZm9yY2VzIGFuIGVuZCBvZiBvcHRpb24tc2Nhbm5pbmcgcmVnYXJkbGVzcworKyAgICAgb2YgdGhlIHZhbHVlIG9mIGBvcmRlcmluZycuICBJbiB0aGUgY2FzZSBvZiBSRVRVUk5fSU5fT1JERVIsIG9ubHkKKysgICAgIGAtLScgY2FuIGNhdXNlIGBnZXRvcHQnIHRvIHJldHVybiAtMSB3aXRoIGBvcHRpbmQnICE9IEFSR0MuICAqLworKyAgc21hbGxpbnQgX19vcmRlcmluZzsKKysKKysgIC8qIElmIHRoZSBQT1NJWExZX0NPUlJFQ1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LiAgKi8KKysgIHNtYWxsaW50IF9fcG9zaXhseV9jb3JyZWN0OworKworKyAgLyogVGhlIG5leHQgY2hhciB0byBiZSBzY2FubmVkIGluIHRoZSBvcHRpb24tZWxlbWVudAorKyAgICAgaW4gd2hpY2ggdGhlIGxhc3Qgb3B0aW9uIGNoYXJhY3RlciB3ZSByZXR1cm5lZCB3YXMgZm91bmQuCisrICAgICBUaGlzIGFsbG93cyB1cyB0byBwaWNrIHVwIHRoZSBzY2FuIHdoZXJlIHdlIGxlZnQgb2ZmLgorKworKyAgICAgSWYgdGhpcyBpcyB6ZXJvLCBvciBhIG51bGwgc3RyaW5nLCBpdCBtZWFucyByZXN1bWUgdGhlIHNjYW4KKysgICAgIGJ5IGFkdmFuY2luZyB0byB0aGUgbmV4dCBBUkdWLWVsZW1lbnQuICAqLworKyAgY2hhciAqX19uZXh0Y2hhcjsKKysKKysKKysgIC8qIEhhbmRsZSBwZXJtdXRhdGlvbiBvZiBhcmd1bWVudHMuICAqLworKworKyAgLyogRGVzY3JpYmUgdGhlIHBhcnQgb2YgQVJHViB0aGF0IGNvbnRhaW5zIG5vbi1vcHRpb25zIHRoYXQgaGF2ZQorKyAgICAgYmVlbiBza2lwcGVkLiAgYGZpcnN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0CisrICAgICBvZiB0aGVtOyBgbGFzdF9ub25vcHQnIGlzIHRoZSBpbmRleCBhZnRlciB0aGUgbGFzdCBvZiB0aGVtLiAgKi8KKysKKysgIGludCBfX2ZpcnN0X25vbm9wdDsKKysgIGludCBfX2xhc3Rfbm9ub3B0OworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX05PTk9QVElPTl9GTEFHUworKyAgaW50IF9fbm9ub3B0aW9uX2ZsYWdzX21heF9sZW47CisrICBpbnQgX19ub25vcHRpb25fZmxhZ3NfbGVuOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBpbml0aWFsaXplciBpcyBuZWNlc3NhcnkgdG8gc2V0IE9QVElORCBhbmQgT1BURVJSIHRvIHRoZWlyCisrICAgZGVmYXVsdCB2YWx1ZXMgYW5kIHRvIGNsZWFyIHRoZSBpbml0aWFsaXphdGlvbiBmbGFnLiAgKi8KKysjZGVmaW5lIF9HRVRPUFRfREFUQV9JTklUSUFMSVpFUiAgICAgICB7IDEsIDEgfQorKworKyNpZiAwIC8qIGZpcnN0IGlzIHN0YXRpYyBvbiB1Q2xpYmMsIHRoZSBvdGhlcnMgbm90IHVzZWQgKi8KKytleHRlcm4gaW50IF9nZXRvcHRfaW50ZXJuYWxfciAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2xvbmdfb25seSwgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfR05VX0dFVE9QVF9fIHx8IGRlZmluZWQgX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18KKysjaWZuZGVmIF9fbmVlZF9nZXRvcHQKKytleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19yIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqX19kYXRhKTsKKysKKytleHRlcm4gaW50IF9nZXRvcHRfbG9uZ19vbmx5X3IgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKl9fbG9uZ29wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19sb25naW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworKyNlbmRpZgorKyNlbmRpZgorKyNlbmRpZiAvKiBnZXRvcHRfaW50LmggKi8KK2RpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRvcHQuYyBiL2xpYmMvdW5pc3RkL2dldG9wdC5jCitpbmRleCBmNjM0ODJiLi5kYjVlMTJjIDEwMDY0NAorLS0tIGEvbGliYy91bmlzdGQvZ2V0b3B0LmMKKysrKyBiL2xpYmMvdW5pc3RkL2dldG9wdC5jCitAQCAtMTA1LDcgKzEwNSw3IEBACisgICAgdGhleSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHJlbGF0aXZlIG9yZGVyIG9mIG9wdGlvbnMgYW5kIG90aGVyIGFyZ3VtZW50cy4gICovCisgCisgI2luY2x1ZGUgPGdldG9wdC5oPgorLSNpbmNsdWRlICJnZXRvcHRfaW50LmgiCisrI2luY2x1ZGUgPGJpdHMvZ2V0b3B0X2ludC5oPgorIAorIAorIC8qIEZvciBjb21tdW5pY2F0aW9uIGZyb20gYGdldG9wdCcgdG8gdGhlIGNhbGxlci4KK0BAIC0xMTcwLDYgKzExNzAsMTUgQEAgZ2V0b3B0X2xvbmcgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyAgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMCk7CisgfQorIAorK2ludAorK19nZXRvcHRfbG9uZ19yIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKm9wdF9pbmRleCwKKysgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorK3sKKysgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBkKTsKKyt9CisrCisgLyogTGlrZSBnZXRvcHRfbG9uZywgYnV0ICctJyBhcyB3ZWxsIGFzICctLScgY2FuIGluZGljYXRlIGEgbG9uZyBvcHRpb24uCisgICAgSWYgYW4gb3B0aW9uIHRoYXQgc3RhcnRzIHdpdGggJy0nIChub3QgJy0tJykgZG9lc24ndCBtYXRjaCBhIGxvbmcgb3B0aW9uLAorICAgIGJ1dCBkb2VzIG1hdGNoIGEgc2hvcnQgb3B0aW9uLCBpdCBpcyBwYXJzZWQgYXMgYSBzaG9ydCBvcHRpb24KK0BAIC0xMTgzLDQgKzExOTIsMTIgQEAgZ2V0b3B0X2xvbmdfb25seSAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorIH0KKyAjZW5kaWYgLyogX19VQ0xJQkNfSEFTX0dFVE9QVF9MT05HX18gKi8KKyAKKytpbnQKKytfZ2V0b3B0X2xvbmdfb25seV9yIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9nZXRvcHRfZGF0YSAqZCkKKyt7CisrICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbF9yIChhcmdjLCBhcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIG9wdF9pbmRleCwgMSwgZCk7CisrfQorKworICNlbmRpZgkvKiBOb3QgRUxJREVfQ09ERS4gICovCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvTWFrZWZpbGUgYi9saWJ1YXJncC9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ1YWNkZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL01ha2VmaWxlCitAQCAtMCwwICsxLDE0IEBACisrIyBNYWtlZmlsZSBmb3IgdUNsaWJjIChsaWJ1YXJncCkKKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorKyMgQXV0aG9yKHMpOiBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vIGF0IHN0LmNvbT4KKysjCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKyMKKysKKyt0b3Bfc3JjZGlyPS4uLworK3RvcF9idWlsZGRpcj0uLi8KKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKVJ1bGVzLm1haworK2FsbDogbGlicworK2luY2x1ZGUgTWFrZWZpbGUuaW4KKytpbmNsdWRlICQodG9wX3NyY2RpcilNYWtlcnVsZXMKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9NYWtlZmlsZS5pbiBiL2xpYnVhcmdwL01ha2VmaWxlLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQ5OGFiYgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvTWFrZWZpbGUuaW4KK0BAIC0wLDAgKzEsNzMgQEAKKysjIE1ha2VmaWxlIGZvciB1Q2xpYmMgKGxpYnVhcmdwKQorKyMKKysjIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZC4KKysjIEF1dGhvcihzKTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrIyAgICAgICAgICAgIC0gRmlyc3QgaW1wbGVtZW50YXRpb24sIGVtYmVkZGVkIGludG8gbGliYworKyMgICAgICAgICAgICBGaWxpcHBvIEFyY2lkaWFjb25vIDxmaWxpcHBvLmFyY2lkaWFjb25vIGF0IHN0LmNvbT4KKysjICAgICAgICAgICAgLSBSZXdvcmtlZCBmb3Igc3RhbmQtYWxvbmUgbGlidWFyZ3AgaW1wbGVtZW50YXRpb24KKysKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrIworKworK0NGTEFHUy1saWJ1YXJncCA6PSAtRE5PVF9JTl9saWJjIC1ESVNfSU5fbGlidWFyZ3AgJChTU1BfQUxMX0NGTEFHUykKKysKKytMREZMQUdTLWxpYnVhcmdwLnNvIDo9ICQoTERGTEFHUykKKysKKytMSUJTLWxpYnVhcmdwLnNvIDo9ICQoTElCUykKKysKKytsaWJ1YXJncF9GVUxMX05BTUUgOj0gbGlidWFyZ3AtJChWRVJTSU9OKS5zbworKworK2xpYnVhcmdwX0RJUiA6PSAkKHRvcF9zcmNkaXIpbGlidWFyZ3AKKytsaWJ1YXJncF9PVVQgOj0gJCh0b3BfYnVpbGRkaXIpbGlidWFyZ3AKKysKKytsaWJ1YXJncF9TUkMteSA6PQorK2xpYnVhcmdwX1NSQy0kKFVDTElCQ19IQVNfQVJHUCkgOj0gJChhZGRzdWZmaXggLmMsJChhZGRwcmVmaXggYXJncC0sIGJhIFwKKysJCQllZXhzdCBmbXRzdHJlYW0gZnMteGlubCBoZWxwIHBhcnNlIHB2IHB2aCB4aW5sKSkKKysKKytDRkxBR1MtYXJncC14aW5sLmMgPSAtZmdudTg5LWlubGluZQorKworK2xpYnVhcmdwX1NSQyA6PSAkKGFkZHByZWZpeCAkKGxpYnVhcmdwX0RJUikvLCQobGlidWFyZ3BfU1JDLXkpKQorK2xpYnVhcmdwX09CSiA6PSAkKHBhdHN1YnN0ICQobGlidWFyZ3BfRElSKS8lLmMsJChsaWJ1YXJncF9PVVQpLyUubywkKGxpYnVhcmdwX1NSQykpCisrCisrbGlidWFyZ3BfU1JDUyA6PSAkKGxpYnVhcmdwX1NSQykKKytsaWJ1YXJncF9PQkpTIDo9ICQobGlidWFyZ3BfT0JKKQorKworK2lmZXEgKCQoRE9QSUMpLHkpCisrbGlidWFyZ3AtYS15IDo9ICQobGlidWFyZ3BfT0JKUzoubz0ub3MpCisrZWxzZQorK2xpYnVhcmdwLWEteSA6PSAkKGxpYnVhcmdwX09CSlMpCisrZW5kaWYKKytsaWJ1YXJncC1zby15IDo9ICQobGlidWFyZ3BfT0JKUzoubz0ub3MpCisrCisrbGliLWEtJChVQ0xJQkNfSEFTX0FSR1ApICs9ICQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5hCisrbGliLXNvLSQoVUNMSUJDX0hBU19BUkdQKSArPSAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc28KKysKKytvYmpjbGVhbi15ICs9IENMRUFOX2xpYnVhcmdwCisrCisraWZlcSAoJChET01VTFRJKSxuKQorK2lmZXEgKCQoRE9QSUMpLHkpCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvOiAkKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3AuYSAkKGxpYmMuZGVwZW5kKQorK2Vsc2UKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc286ICQobGlidWFyZ3BfT1VUKS9saWJ1YXJncF9zby5hICQobGliYy5kZXBlbmQpCisrZW5kaWYKKysJJChjYWxsIGxpbmsuc28sJChsaWJ1YXJncF9GVUxMX05BTUUpLCQoTUFKT1JfVkVSU0lPTikpCisrZWxzZQorKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbzogJChsaWJ1YXJncF9PVVQpL2xpYnVhcmdwLm9TICQobGliYy5kZXBlbmQpCisrCSQoY2FsbCBsaW5rbS5zbywkKGxpYnVhcmdwX0ZVTExfTkFNRSksJChNQUpPUl9WRVJTSU9OKSkKKytlbmRpZgorKworKyQobGlidWFyZ3BfT1VUKS9saWJ1YXJncF9zby5hOiAkKGxpYnVhcmdwLXNvLXkpCisrCSQoUSkkKFJNKSAkQAorKwkkKGRvX2FyKQorKworKyQobGlidWFyZ3BfT1VUKS9saWJ1YXJncC5vUzogJChsaWJ1YXJncF9TUkNTKQorKwkkKFEpJChSTSkgJEAKKysJJChjb21waWxlLW0pCisrCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLmE6ICQobGlidWFyZ3AtYS15KQorKwkkKFEpJChJTlNUQUxMKSAtZCAkKGRpciAkQCkKKysJJChRKSQoUk0pICRACisrCSQoZG9fYXIpCisrCisrQ0xFQU5fbGlidWFyZ3A6CisrCSQoZG9fcm0pICQoYWRkcHJlZml4ICQobGlidWFyZ3BfT1VUKS8qLiwgbyBvcyBvUyBhKQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtYmEuYyBiL2xpYnVhcmdwL2FyZ3AtYmEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1MjJiMDIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtYmEuYworQEAgLTAsMCArMSwyNiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX0JVR19BRERSRVNTLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIElmIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCBpdCBzaG91bGQgcG9pbnQgdG8gc3RyaW5nIHRoYXQgaXMgdGhlCisrICAgYnVnLXJlcG9ydGluZyBhZGRyZXNzIGZvciB0aGUgcHJvZ3JhbS4gIEl0IHdpbGwgYmUgcHJpbnRlZCBieSBhcmdwX2hlbHAgaWYKKysgICB0aGUgQVJHUF9IRUxQX0JVR19BRERSIGZsYWcgaXMgc2V0IChhcyBpdCBpcyBieSB2YXJpb3VzIHN0YW5kYXJkIGhlbHAKKysgICBtZXNzYWdlcyksIGVtYmVkZGVkIGluIGEgc2VudGVuY2UgdGhhdCBzYXlzIHNvbWV0aGluZyBsaWtlIGBSZXBvcnQgYnVncyB0bworKyAgIEFERFIuJy4gICovCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYyBiL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ0NWI2OGQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZWV4c3QuYworQEAgLTAsMCArMSwzMiBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9FUlJfRVhJVF9TVEFUVVMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBUaGUgZXhpdCBzdGF0dXMgdGhhdCBhcmdwIHdpbGwgdXNlIHdoZW4gZXhpdGluZyBkdWUgdG8gYSBwYXJzaW5nIGVycm9yLgorKyAgIElmIG5vdCBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCB0aGlzIGRlZmF1bHRzIHRvIEVYX1VTQUdFIGZyb20KKysgICA8c3lzZXhpdHMuaD4uICAqLworK2Vycm9yX3QgYXJncF9lcnJfZXhpdF9zdGF0dXMgPSBFWF9VU0FHRTsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjc1MjI3ZjkKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMKK0BAIC0wLDAgKzEsNDM5IEBACisrLyogV29yZC13cmFwcGluZyBhbmQgbGluZS10cnVuY2F0aW5nIHN0cmVhbXMKKysgICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSwyMDAxLDIwMDIsMjAwMywyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKy8qIFRoaXMgcGFja2FnZSBlbXVsYXRlcyBnbGliYyBgbGluZV93cmFwX3N0cmVhbScgc2VtYW50aWNzIGZvciBzeXN0ZW1zIHRoYXQKKysgICBkb24ndCBoYXZlIHRoYXQuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiYXJncC1mbXRzdHJlYW0uaCIKKysKKysjaWZuZGVmIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKworKyNpZm5kZWYgaXNibGFuaworKyNkZWZpbmUgaXNibGFuayhjaCkgKChjaCk9PScgJyB8fCAoY2gpPT0nXHQnKQorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8bGliaW8vbGliaW9QLmg+CisrIyBkZWZpbmUgX192c25wcmludGYocywgbCwgZiwgYSkgX0lPX3ZzbnByaW50ZiAocywgbCwgZiwgYSkKKysjZWxzZQorKyMgZGVmaW5lIF9fdnNucHJpbnRmKHMsIGwsIGYsIGEpIHZzbnByaW50ZiAocywgbCwgZiwgYSkKKysjZW5kaWYKKysKKysjZGVmaW5lIElOSVRfQlVGX1NJWkUgMjAwCisrI2RlZmluZSBQUklOVEZfU0laRV9HVUVTUyAxNTAKKysKKysvKiBSZXR1cm4gYW4gYXJncF9mbXRzdHJlYW0gdGhhdCBvdXRwdXRzIHRvIFNUUkVBTSwgYW5kIHdoaWNoIHByZWZpeGVzIGxpbmVzCisrICAgd3JpdHRlbiBvbiBpdCB3aXRoIExNQVJHSU4gc3BhY2VzIGFuZCBsaW1pdHMgdGhlbSB0byBSTUFSR0lOIGNvbHVtbnMKKysgICB0b3RhbC4gIElmIFdNQVJHSU4gPj0gMCwgd29yZHMgdGhhdCBleHRlbmQgcGFzdCBSTUFSR0lOIGFyZSB3cmFwcGVkIGJ5CisrICAgcmVwbGFjaW5nIHRoZSB3aGl0ZXNwYWNlIGJlZm9yZSB0aGVtIHdpdGggYSBuZXdsaW5lIGFuZCBXTUFSR0lOIHNwYWNlcy4KKysgICBPdGhlcndpc2UsIGNoYXJzIGJleW9uZCBSTUFSR0lOIGFyZSBzaW1wbHkgZHJvcHBlZCB1bnRpbCBhIG5ld2xpbmUuCisrICAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4gICovCisrYXJncF9mbXRzdHJlYW1fdAorK19fYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG1hcmdpbiwgc2l6ZV90IHJtYXJnaW4sIHNzaXplX3Qgd21hcmdpbikKKyt7CisrICBhcmdwX2ZtdHN0cmVhbV90IGZzOworKworKyAgZnMgPSAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0pKTsKKysgIGlmIChmcyAhPSBOVUxMKQorKyAgICB7CisrICAgICAgZnMtPnN0cmVhbSA9IHN0cmVhbTsKKysKKysgICAgICBmcy0+bG1hcmdpbiA9IGxtYXJnaW47CisrICAgICAgZnMtPnJtYXJnaW4gPSBybWFyZ2luOworKyAgICAgIGZzLT53bWFyZ2luID0gd21hcmdpbjsKKysgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICBmcy0+cG9pbnRfb2ZmcyA9IDA7CisrCisrICAgICAgZnMtPmJ1ZiA9IChjaGFyICopIG1hbGxvYyAoSU5JVF9CVUZfU0laRSk7CisrICAgICAgaWYgKCEgZnMtPmJ1ZikKKysgICAgICAgeworKyAgICAgICAgIGZyZWUgKGZzKTsKKysgICAgICAgICBmcyA9IDA7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmcy0+cCA9IGZzLT5idWY7CisrICAgICAgICAgZnMtPmVuZCA9IGZzLT5idWYgKyBJTklUX0JVRl9TSVpFOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiBmczsKKyt9CisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKyNpZmRlZiB3ZWFrX2FsaWFzCisrd2Vha19hbGlhcyAoX19hcmdwX21ha2VfZm10c3RyZWFtLCBhcmdwX21ha2VfZm10c3RyZWFtKQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIEZsdXNoIEZTIHRvIGl0cyBzdHJlYW0sIGFuZCBmcmVlIGl0IChidXQgZG9uJ3QgY2xvc2UgdGhlIHN0cmVhbSkuICAqLworK3ZvaWQKKytfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisreworKyAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGZzKTsKKysgIGlmIChmcy0+cCA+IGZzLT5idWYpCisrICAgIHsKKysjaWZkZWYgVVNFX0lOX0xJQklPCisrICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrICAgIH0KKysgIGZyZWUgKGZzLT5idWYpOworKyAgZnJlZSAoZnMpOworK30KKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrI2lmZGVmIHdlYWtfYWxpYXMKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX2ZyZWUsIGFyZ3BfZm10c3RyZWFtX2ZyZWUpCisrI2VuZGlmCisrI2VuZGlmCisrCisrLyogUHJvY2VzcyBGUydzIGJ1ZmZlciBzbyB0aGF0IGxpbmUgd3JhcHBpbmcgaXMgZG9uZSBmcm9tIFBPSU5UX09GRlMgdG8gdGhlCisrICAgZW5kIG9mIGl0cyBidWZmZXIuICBUaGlzIGNvZGUgaXMgbW9zdGx5IGZyb20gZ2xpYmMgc3RkaW8vbGluZXdyYXAuYy4gICovCisrdm9pZAorK19fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IGZzKQorK3sKKysgIGNoYXIgKmJ1ZiwgKm5sOworKyAgc2l6ZV90IGxlbjsKKysKKysgIC8qIFNjYW4gdGhlIGJ1ZmZlciBmb3IgbmV3bGluZXMuICAqLworKyAgYnVmID0gZnMtPmJ1ZiArIGZzLT5wb2ludF9vZmZzOworKyAgd2hpbGUgKGJ1ZiA8IGZzLT5wKQorKyAgICB7CisrICAgICAgc2l6ZV90IHI7CisrCisrICAgICAgaWYgKGZzLT5wb2ludF9jb2wgPT0gMCAmJiBmcy0+bG1hcmdpbiAhPSAwKQorKyAgICAgICB7CisrICAgICAgICAgLyogV2UgYXJlIHN0YXJ0aW5nIGEgbmV3IGxpbmUuICBQcmludCBzcGFjZXMgdG8gdGhlIGxlZnQgbWFyZ2luLiAgKi8KKysgICAgICAgICBjb25zdCBzaXplX3QgcGFkID0gZnMtPmxtYXJnaW47CisrICAgICAgICAgaWYgKGZzLT5wICsgcGFkIDwgZnMtPmVuZCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogV2UgY2FuIGZpdCBpbiB0aGVtIGluIHRoZSBidWZmZXIgYnkgbW92aW5nIHRoZQorKyAgICAgICAgICAgICAgICBidWZmZXIgdGV4dCB1cCBhbmQgZmlsbGluZyBpbiB0aGUgYmVnaW5uaW5nLiAgKi8KKysgICAgICAgICAgICAgbWVtbW92ZSAoYnVmICsgcGFkLCBidWYsIGZzLT5wIC0gYnVmKTsKKysgICAgICAgICAgICAgZnMtPnAgKz0gcGFkOyAvKiBDb21wZW5zYXRlIGZvciBiaWdnZXIgYnVmZmVyLiAqLworKyAgICAgICAgICAgICBtZW1zZXQgKGJ1ZiwgJyAnLCBwYWQpOyAvKiBGaWxsIGluIHRoZSBzcGFjZXMuICAqLworKyAgICAgICAgICAgICBidWYgKz0gcGFkOyAvKiBEb24ndCBib3RoZXIgc2VhcmNoaW5nIHRoZW0uICAqLworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogTm8gYnVmZmVyIHNwYWNlIGZvciBzcGFjZXMuICBNdXN0IGZsdXNoLiAgKi8KKysgICAgICAgICAgICAgc2l6ZV90IGk7CisrICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYWQ7IGkrKykKKysgICAgICAgICAgICAgICB7CisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICAgICAgaWYgKF9JT19md2lkZSAoZnMtPnN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKyAgICAgICAgIGZzLT5wb2ludF9jb2wgPSBwYWQ7CisrICAgICAgIH0KKysKKysgICAgICBsZW4gPSBmcy0+cCAtIGJ1ZjsKKysgICAgICBubCA9IG1lbWNociAoYnVmLCAnXG4nLCBsZW4pOworKworKyAgICAgIGlmIChmcy0+cG9pbnRfY29sIDwgMCkKKysgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrCisrICAgICAgaWYgKCFubCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFRoZSBidWZmZXIgZW5kcyBpbiBhIHBhcnRpYWwgbGluZS4gICovCisrCisrICAgICAgICAgaWYgKGZzLT5wb2ludF9jb2wgKyBsZW4gPCBmcy0+cm1hcmdpbikKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogVGhlIHJlbWFpbmluZyBidWZmZXIgdGV4dCBpcyBhIHBhcnRpYWwgbGluZSBhbmQgZml0cworKyAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIG1heGltdW0gbGluZSB3aWR0aC4gIEFkdmFuY2UgcG9pbnQgZm9yIHRoZQorKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIHRvIGJlIHdyaXR0ZW4gYW5kIHN0b3Agc2Nhbm5pbmcuICAqLworKyAgICAgICAgICAgICBmcy0+cG9pbnRfY29sICs9IGxlbjsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogU2V0IHRoZSBlbmQtb2YtbGluZSBwb2ludGVyIGZvciB0aGUgY29kZSBiZWxvdyB0bworKyAgICAgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICAgIG5sID0gZnMtPnA7CisrICAgICAgIH0KKysgICAgICBlbHNlIGlmIChmcy0+cG9pbnRfY29sICsgKG5sIC0gYnVmKSA8IChzc2l6ZV90KSBmcy0+cm1hcmdpbikKKysgICAgICAgeworKyAgICAgICAgIC8qIFRoZSBidWZmZXIgY29udGFpbnMgYSBmdWxsIGxpbmUgdGhhdCBmaXRzIHdpdGhpbiB0aGUgbWF4aW11bQorKyAgICAgICAgICAgIGxpbmUgd2lkdGguICBSZXNldCBwb2ludCBhbmQgc2NhbiB0aGUgbmV4dCBsaW5lLiAgKi8KKysgICAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICAgICBidWYgPSBubCArIDE7CisrICAgICAgICAgY29udGludWU7CisrICAgICAgIH0KKysKKysgICAgICAvKiBUaGlzIGxpbmUgaXMgdG9vIGxvbmcuICAqLworKyAgICAgIHIgPSBmcy0+cm1hcmdpbiAtIDE7CisrCisrICAgICAgaWYgKGZzLT53bWFyZ2luIDwgMCkKKysgICAgICAgeworKyAgICAgICAgIC8qIFRydW5jYXRlIHRoZSBsaW5lIGJ5IG92ZXJ3cml0aW5nIHRoZSBleGNlc3Mgd2l0aCB0aGUKKysgICAgICAgICAgICBuZXdsaW5lIGFuZCBhbnl0aGluZyBhZnRlciBpdCBpbiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICBpZiAobmwgPCBmcy0+cCkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgbWVtbW92ZSAoYnVmICsgKHIgLSBmcy0+cG9pbnRfY29sKSwgbmwsIGZzLT5wIC0gbmwpOworKyAgICAgICAgICAgICBmcy0+cCAtPSBidWYgKyAociAtIGZzLT5wb2ludF9jb2wpIC0gbmw7CisrICAgICAgICAgICAgIC8qIFJlc2V0IHBvaW50IGZvciB0aGUgbmV4dCBsaW5lIGFuZCBzdGFydCBzY2FubmluZyBpdC4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgICAgICAgICBidWYgKz0gciArIDE7IC8qIFNraXAgZnVsbCBsaW5lIHBsdXMgXG4uICovCisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBUaGUgYnVmZmVyIGVuZHMgd2l0aCBhIHBhcnRpYWwgbGluZSB0aGF0IGlzIGJleW9uZCB0aGUKKysgICAgICAgICAgICAgICAgbWF4aW11bSBsaW5lIHdpZHRoLiAgQWR2YW5jZSBwb2ludCBmb3IgdGhlIGNoYXJhY3RlcnMKKysgICAgICAgICAgICAgICAgd3JpdHRlbiwgYW5kIGRpc2NhcmQgdGhvc2UgcGFzdCB0aGUgbWF4IGZyb20gdGhlIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgKz0gbGVuOworKyAgICAgICAgICAgICBmcy0+cCAtPSBmcy0+cG9pbnRfY29sIC0gcjsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICAvKiBEbyB3b3JkIHdyYXAuICBHbyB0byB0aGUgY29sdW1uIGp1c3QgcGFzdCB0aGUgbWF4aW11bSBsaW5lCisrICAgICAgICAgICAgd2lkdGggYW5kIHNjYW4gYmFjayBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgd29yZCB0aGVyZS4KKysgICAgICAgICAgICBUaGVuIGluc2VydCBhIGxpbmUgYnJlYWsuICAqLworKworKyAgICAgICAgIGNoYXIgKnAsICpuZXh0bGluZTsKKysgICAgICAgICBpbnQgaTsKKysKKysgICAgICAgICBwID0gYnVmICsgKHIgKyAxIC0gZnMtPnBvaW50X2NvbCk7CisrICAgICAgICAgd2hpbGUgKHAgPj0gYnVmICYmICFpc2JsYW5rICgqcCkpCisrICAgICAgICAgICAtLXA7CisrICAgICAgICAgbmV4dGxpbmUgPSBwICsgMTsgICAgIC8qIFRoaXMgd2lsbCBiZWdpbiB0aGUgbmV4dCBsaW5lLiAgKi8KKysKKysgICAgICAgICBpZiAobmV4dGxpbmUgPiBidWYpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFN3YWxsb3cgc2VwYXJhdGluZyBibGFua3MuICAqLworKyAgICAgICAgICAgICBpZiAocCA+PSBidWYpCisrICAgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICAgIC0tcDsKKysgICAgICAgICAgICAgICB3aGlsZSAocCA+PSBidWYgJiYgaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgbmwgPSBwICsgMTsgICAgICAgLyogVGhlIG5ld2xpbmUgd2lsbCByZXBsYWNlIHRoZSBmaXJzdCBibGFuay4gKi8KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIEEgc2luZ2xlIHdvcmQgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gbGluZSB3aWR0aC4KKysgICAgICAgICAgICAgICAgT2ggd2VsbC4gIFB1dCBpdCBvbiBhbiBvdmVybG9uZyBsaW5lIGJ5IGl0c2VsZi4gICovCisrICAgICAgICAgICAgIHAgPSBidWYgKyAociArIDEgLSBmcy0+cG9pbnRfY29sKTsKKysgICAgICAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBsb25nIHdvcmQuICAqLworKyAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICsrcDsKKysgICAgICAgICAgICAgd2hpbGUgKHAgPCBubCAmJiAhaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgaWYgKHAgPT0gbmwpCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgLyogSXQgYWxyZWFkeSBlbmRzIGEgbGluZS4gIE5vIGZ1c3NpbmcgcmVxdWlyZWQuICAqLworKyAgICAgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgICAgICAgICAgICBidWYgPSBubCArIDE7CisrICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIC8qIFdlIHdpbGwgbW92ZSB0aGUgbmV3bGluZSB0byByZXBsYWNlIHRoZSBmaXJzdCBibGFuay4gICovCisrICAgICAgICAgICAgIG5sID0gcDsKKysgICAgICAgICAgICAgLyogU3dhbGxvdyBzZXBhcmF0aW5nIGJsYW5rcy4gICovCisrICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgKytwOworKyAgICAgICAgICAgICB3aGlsZSAoaXNibGFuayAoKnApKTsKKysgICAgICAgICAgICAgLyogVGhlIG5leHQgbGluZSB3aWxsIHN0YXJ0IGhlcmUuICAqLworKyAgICAgICAgICAgICBuZXh0bGluZSA9IHA7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgLyogTm90ZTogVGhlcmUgYXJlIGEgYnVuY2ggb2YgdGVzdHMgYmVsb3cgZm9yCisrICAgICAgICAgICAgTkVYVExJTkUgPT0gQlVGICsgTEVOICsgMTsgdGhpcyBjYXNlIGlzIHdoZXJlIE5MIGhhcHBlbnMgdG8gZmFsbAorKyAgICAgICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgYW5kIE5FWFRMSU5FIGlzIGluIGZhY3QgZW1wdHkgKGFuZCBzbworKyAgICAgICAgICAgIHdlIG5lZWQgbm90IGJlIGNhcmVmdWwgdG8gbWFpbnRhaW4gaXRzIGNvbnRlbnRzKS4gICovCisrCisrICAgICAgICAgaWYgKChuZXh0bGluZSA9PSBidWYgKyBsZW4gKyAxCisrICAgICAgICAgICAgICA/IGZzLT5lbmQgLSBubCA8IGZzLT53bWFyZ2luICsgMQorKyAgICAgICAgICAgICAgOiBuZXh0bGluZSAtIChubCArIDEpIDwgZnMtPndtYXJnaW4pCisrICAgICAgICAgICAgICYmIGZzLT5wID4gbmV4dGxpbmUpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFRoZSBtYXJnaW4gbmVlZHMgbW9yZSBibGFua3MgdGhhbiB3ZSByZW1vdmVkLiAgKi8KKysgICAgICAgICAgICAgaWYgKGZzLT5lbmQgLSBmcy0+cCA+IGZzLT53bWFyZ2luICsgMSkKKysgICAgICAgICAgICAgICAvKiBNYWtlIHNvbWUgc3BhY2UgZm9yIHRoZW0uICAqLworKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIHNpemVfdCBtdiA9IGZzLT5wIC0gbmV4dGxpbmU7CisrICAgICAgICAgICAgICAgICBtZW1tb3ZlIChubCArIDEgKyBmcy0+d21hcmdpbiwgbmV4dGxpbmUsIG12KTsKKysgICAgICAgICAgICAgICAgIG5leHRsaW5lID0gbmwgKyAxICsgZnMtPndtYXJnaW47CisrICAgICAgICAgICAgICAgICBsZW4gPSBuZXh0bGluZSArIG12IC0gYnVmOworKyAgICAgICAgICAgICAgICAgKm5sKysgPSAnXG4nOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgIC8qIE91dHB1dCB0aGUgZmlyc3QgbGluZSBzbyB3ZSBjYW4gdXNlIHRoZSBzcGFjZS4gICovCisrICAgICAgICAgICAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qc1xuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIChubCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgaWYgKG5sID4gZnMtPmJ1ZikKKysgICAgICAgICAgICAgICAgICAgZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBubCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgICAgICAgICBsZW4gKz0gYnVmIC0gZnMtPmJ1ZjsKKysgICAgICAgICAgICAgICAgIG5sID0gYnVmID0gZnMtPmJ1ZjsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogV2UgY2FuIGZpdCB0aGUgbmV3bGluZSBhbmQgYmxhbmtzIGluIGJlZm9yZQorKyAgICAgICAgICAgICAgdGhlIG5leHQgd29yZC4gICovCisrICAgICAgICAgICAqbmwrKyA9ICdcbic7CisrCisrICAgICAgICAgaWYgKG5leHRsaW5lIC0gbmwgPj0gZnMtPndtYXJnaW4KKysgICAgICAgICAgICAgfHwgKG5leHRsaW5lID09IGJ1ZiArIGxlbiArIDEgJiYgZnMtPmVuZCAtIG5leHRsaW5lID49IGZzLT53bWFyZ2luKSkKKysgICAgICAgICAgIC8qIEFkZCBibGFua3MgdXAgdG8gdGhlIHdyYXAgbWFyZ2luIGNvbHVtbi4gICovCisrICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnMtPndtYXJnaW47ICsraSkKKysgICAgICAgICAgICAgKm5sKysgPSAnICc7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZzLT53bWFyZ2luOyArK2kpCisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCisrICAgICAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnICcsIGZzLT5zdHJlYW0pOworKyAgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKysKKysgICAgICAgICAvKiBDb3B5IHRoZSB0YWlsIG9mIHRoZSBvcmlnaW5hbCBidWZmZXIgaW50byB0aGUgY3VycmVudCBidWZmZXIKKysgICAgICAgICAgICBwb3NpdGlvbi4gICovCisrICAgICAgICAgaWYgKG5sIDwgbmV4dGxpbmUpCisrICAgICAgICAgICBtZW1tb3ZlIChubCwgbmV4dGxpbmUsIGJ1ZiArIGxlbiAtIG5leHRsaW5lKTsKKysgICAgICAgICBsZW4gLT0gbmV4dGxpbmUgLSBidWY7CisrCisrICAgICAgICAgLyogQ29udGludWUgdGhlIHNjYW4gb24gdGhlIHJlbWFpbmluZyBsaW5lcyBpbiB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICBidWYgPSBubDsKKysKKysgICAgICAgICAvKiBSZXN0b3JlIGJ1ZnAgdG8gaW5jbHVkZSBhbGwgdGhlIHJlbWFpbmluZyB0ZXh0LiAgKi8KKysgICAgICAgICBmcy0+cCA9IG5sICsgbGVuOworKworKyAgICAgICAgIC8qIFJlc2V0IHRoZSBjb3VudGVyIG9mIHdoYXQgaGFzIGJlZW4gb3V0cHV0IHRoaXMgbGluZS4gIElmIHdtYXJnaW4KKysgICAgICAgICAgICBpcyAwLCB3ZSB3YW50IHRvIGF2b2lkIHRoZSBsbWFyZ2luIGdldHRpbmcgYWRkZWQsIHNvIHdlIHNldAorKyAgICAgICAgICAgIHBvaW50X2NvbCB0byBhIG1hZ2ljIHZhbHVlIG9mIC0xIGluIHRoYXQgY2FzZS4gICovCisrICAgICAgICAgZnMtPnBvaW50X2NvbCA9IGZzLT53bWFyZ2luID8gZnMtPndtYXJnaW4gOiAtMTsKKysgICAgICAgfQorKyAgICB9CisrCisrICAvKiBSZW1lbWJlciB0aGF0IHdlJ3ZlIHNjYW5uZWQgYXMgZmFyIGFzIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gICovCisrICBmcy0+cG9pbnRfb2ZmcyA9IGZzLT5wIC0gZnMtPmJ1ZjsKKyt9CisrCisrLyogRW5zdXJlIHRoYXQgRlMgaGFzIHNwYWNlIGZvciBBTU9VTlQgbW9yZSBieXRlcyBpbiBpdHMgYnVmZmVyLCBlaXRoZXIgYnkKKysgICBncm93aW5nIHRoZSBidWZmZXIsIG9yIGJ5IGZsdXNoaW5nIGl0LiAgVHJ1ZSBpcyByZXR1cm5lZCBpZmYgd2Ugc3VjY2VlZC4gKi8KKytpbnQKKytfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICpmcywgc2l6ZV90IGFtb3VudCkKKyt7CisrICBpZiAoKHNpemVfdCkgKGZzLT5lbmQgLSBmcy0+cCkgPCBhbW91bnQpCisrICAgIHsKKysgICAgICBzc2l6ZV90IHdyb3RlOworKworKyAgICAgIC8qIEZsdXNoIEZTJ3MgYnVmZmVyLiAgKi8KKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoZnMpOworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrICAgICAgd3JvdGUgPSBmcy0+cCAtIGZzLT5idWY7CisrI2Vsc2UKKysgICAgICB3cm90ZSA9IGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgZnMtPnAgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKysgICAgICBpZiAod3JvdGUgPT0gZnMtPnAgLSBmcy0+YnVmKQorKyAgICAgICB7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICAgIGZzLT5wb2ludF9vZmZzID0gMDsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZzLT5wIC09IHdyb3RlOworKyAgICAgICAgIGZzLT5wb2ludF9vZmZzIC09IHdyb3RlOworKyAgICAgICAgIG1lbW1vdmUgKGZzLT5idWYsIGZzLT5idWYgKyB3cm90ZSwgZnMtPnAgLSBmcy0+YnVmKTsKKysgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgfQorKworKyAgICAgIGlmICgoc2l6ZV90KSAoZnMtPmVuZCAtIGZzLT5idWYpIDwgYW1vdW50KQorKyAgICAgICAvKiBHb3R0YSBncm93IHRoZSBidWZmZXIuICAqLworKyAgICAgICB7CisrICAgICAgICAgc2l6ZV90IG9sZF9zaXplID0gZnMtPmVuZCAtIGZzLT5idWY7CisrICAgICAgICAgc2l6ZV90IG5ld19zaXplID0gb2xkX3NpemUgKyBhbW91bnQ7CisrICAgICAgICAgY2hhciAqbmV3X2J1ZjsKKysKKysgICAgICAgICBpZiAobmV3X3NpemUgPCBvbGRfc2l6ZSB8fCAhIChuZXdfYnVmID0gcmVhbGxvYyAoZnMtPmJ1ZiwgbmV3X3NpemUpKSkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgX19zZXRfZXJybm8gKEVOT01FTSk7CisrICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIGZzLT5idWYgPSBuZXdfYnVmOworKyAgICAgICAgIGZzLT5lbmQgPSBuZXdfYnVmICsgbmV3X3NpemU7CisrICAgICAgICAgZnMtPnAgPSBmcy0+YnVmOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiAxOworK30KKysKKytzc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSAqZnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3sKKysgIGludCBvdXQ7CisrICBzaXplX3QgYXZhaWw7CisrICBzaXplX3Qgc2l6ZV9ndWVzcyA9IFBSSU5URl9TSVpFX0dVRVNTOyAvKiBIb3cgbXVjaCBzcGFjZSB0byByZXNlcnZlLiAqLworKworKyAgZG8KKysgICAgeworKyAgICAgIHZhX2xpc3QgYXJnczsKKysKKysgICAgICBpZiAoISBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoZnMsIHNpemVfZ3Vlc3MpKQorKyAgICAgICByZXR1cm4gLTE7CisrCisrICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisrICAgICAgYXZhaWwgPSBmcy0+ZW5kIC0gZnMtPnA7CisrICAgICAgb3V0ID0gX192c25wcmludGYgKGZzLT5wLCBhdmFpbCwgZm10LCBhcmdzKTsKKysgICAgICB2YV9lbmQgKGFyZ3MpOworKyAgICAgIGlmICgoc2l6ZV90KSBvdXQgPj0gYXZhaWwpCisrICAgICAgIHNpemVfZ3Vlc3MgPSBvdXQgKyAxOworKyAgICB9CisrICB3aGlsZSAoKHNpemVfdCkgb3V0ID49IGF2YWlsKTsKKysKKysgIGZzLT5wICs9IG91dDsKKysKKysgIHJldHVybiBvdXQ7CisrfQorKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysjaWZkZWYgd2Vha19hbGlhcworK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmLCBhcmdwX2ZtdHN0cmVhbV9wcmludGYpCisrI2VuZGlmCisrI2VuZGlmCisrCisrI2VuZGlmIC8qICFBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNhN2M4MzQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmgKK0BAIC0wLDAgKzEsMzE0IEBACisrLyogV29yZC13cmFwcGluZyBhbmQgbGluZS10cnVuY2F0aW5nIHN0cmVhbXMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKy8qIFRoaXMgcGFja2FnZSBlbXVsYXRlcyBnbGliYyBgbGluZV93cmFwX3N0cmVhbScgc2VtYW50aWNzIGZvciBzeXN0ZW1zIHRoYXQKKysgICBkb24ndCBoYXZlIHRoYXQuICBJZiB0aGUgc3lzdGVtIGRvZXMgaGF2ZSBpdCwgaXQgaXMganVzdCBhIHdyYXBwZXIgZm9yCisrICAgdGhhdC4gIFRoaXMgaGVhZGVyIGZpbGUgaXMgb25seSB1c2VkIGludGVybmFsbHkgd2hpbGUgY29tcGlsaW5nIGFyZ3AsIGFuZAorKyAgIHNob3VsZG4ndCBiZSBpbnN0YWxsZWQuICAqLworKworKyNpZm5kZWYgX0FSR1BfRk1UU1RSRUFNX0gKKysjZGVmaW5lIF9BUkdQX0ZNVFNUUkVBTV9ICisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KSB8fCBkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKysjICBkZWZpbmUgX19mb3JtYXRfXyBmb3JtYXQKKysjICBkZWZpbmUgX19wcmludGZfXyBwcmludGYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmIDAgLyogdUNsaWJjOiBkaXNhYmxlZCAqLworKyNpZiAgICAoX0xJQkMgLSAwICYmICFkZWZpbmVkIChVU0VfSU5fTElCSU8pKSBcCisrICAgIHx8IChkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pICYmIGRlZmluZWQgKEhBVkVfTElORVdSQVBfSCkpCisrLyogbGluZV93cmFwX3N0cmVhbSBpcyBhdmFpbGFibGUsIHNvIHVzZSB0aGF0LiAgKi8KKysjZGVmaW5lIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKyNlbmRpZgorKyNlbHNlCisrLyogbGluZV93cmFwIHN0cmVhbSBOT1QgYXZhaWxhYmxlICovCisrIyB1bmRlZiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysjZW5kaWYKKysKKysjaWZkZWYgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrLyogSnVzdCBiZSBhIHNpbXBsZSB3cmFwcGVyIGZvciBsaW5lX3dyYXBfc3RyZWFtOyB0aGUgc2VtYW50aWNzIGFyZQorKyAgICpzbGlnaHRseSogZGlmZmVyZW50LCBhcyBsaW5lX3dyYXBfc3RyZWFtIGRvZXNuJ3QgYWN0dWFsbHkgbWFrZSBhIG5ldworKyAgIG9iamVjdCwgaXQganVzdCBtb2RpZmllcyB0aGUgZ2l2ZW4gc3RyZWFtIChyZXZlcnNpYmx5KSB0byBkbworKyAgIGxpbmUtd3JhcHBpbmcuICBTaW5jZSB3ZSBjb250cm9sIHdobyB1c2VzIHRoaXMgY29kZSwgaXQgZG9lc24ndCBtYXR0ZXIuICAqLworKworKyNpbmNsdWRlIDxsaW5ld3JhcC5oPgorKworK3R5cGVkZWYgRklMRSAqYXJncF9mbXRzdHJlYW1fdDsKKysKKysjZGVmaW5lIGFyZ3BfbWFrZV9mbXRzdHJlYW0gbGluZV93cmFwX3N0cmVhbQorKyNkZWZpbmUgX19hcmdwX21ha2VfZm10c3RyZWFtIGxpbmVfd3JhcF9zdHJlYW0KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX2ZyZWUgbGluZV91bndyYXBfc3RyZWFtCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgbGluZV91bndyYXBfc3RyZWFtCisrCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dGMoZnMsY2gpIHB1dGMoY2gsZnMpCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wdXRjKGZzLGNoKSBwdXRjKGNoLGZzKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRzKGZzLHN0cikgZnB1dHMoc3RyLGZzKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcHV0cyhmcyxzdHIpIGZwdXRzKHN0cixmcykKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUoZnMsc3RyLGxlbikgZndyaXRlKHN0ciwxLGxlbixmcykKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3dyaXRlKGZzLHN0cixsZW4pIGZ3cml0ZShzdHIsMSxsZW4sZnMpCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiBmcHJpbnRmCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wcmludGYgZnByaW50ZgorKworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGxpbmVfd3JhcF9sbWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIGxpbmVfd3JhcF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIGxpbmVfd3JhcF9zZXRfbG1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gbGluZV93cmFwX3NldF9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gbGluZV93cmFwX3JtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4gbGluZV93cmFwX3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gbGluZV93cmFwX3NldF9ybWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiBsaW5lX3dyYXBfc2V0X3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBsaW5lX3dyYXBfd21hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fd21hcmdpbiBsaW5lX3dyYXBfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiBsaW5lX3dyYXBfc2V0X3dtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIGxpbmVfd3JhcF9zZXRfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wb2ludCBsaW5lX3dyYXBfcG9pbnQKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3BvaW50IGxpbmVfd3JhcF9wb2ludAorKworKyNlbHNlIC8qICFBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KKysvKiBHdWVzcyB3ZSBoYXZlIHRvIGRlZmluZSBvdXIgb3duIHZlcnNpb24uICAqLworKworKyNpZm5kZWYgX19jb25zdAorKyNkZWZpbmUgX19jb25zdCBjb25zdAorKyNlbmRpZgorKworK3N0cnVjdCBhcmdwX2ZtdHN0cmVhbQorK3sKKysgIEZJTEUgKnN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc3RyZWFtIHdlJ3JlIG91dHB1dHRpbmcgdG8uICAqLworKworKyAgc2l6ZV90IGxtYXJnaW4sIHJtYXJnaW47ICAgICAvKiBMZWZ0IGFuZCByaWdodCBtYXJnaW5zLiAgKi8KKysgIHNzaXplX3Qgd21hcmdpbjsgICAgICAgICAgICAgLyogTWFyZ2luIHRvIHdyYXAgdG8sIG9yIC0xIHRvIHRydW5jYXRlLiAgKi8KKysKKysgIC8qIFBvaW50IGluIGJ1ZmZlciB0byB3aGljaCB3ZSd2ZSBwcm9jZXNzZWQgZm9yIHdyYXBwaW5nLCBidXQgbm90IG91dHB1dC4gICovCisrICBzaXplX3QgcG9pbnRfb2ZmczsKKysgIC8qIE91dHB1dCBjb2x1bW4gYXQgUE9JTlRfT0ZGUywgb3IgLTEgbWVhbmluZyAwIGJ1dCBkb24ndCBhZGQgbG1hcmdpbi4gICovCisrICBzc2l6ZV90IHBvaW50X2NvbDsKKysKKysgIGNoYXIgKmJ1ZjsgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlci4gICovCisrICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgZW5kIG9mIHRleHQgaW4gQlVGLiAqLworKyAgY2hhciAqZW5kOyAgICAgICAgICAgICAgICAgICAvKiBBYnNvbHV0ZSBlbmQgb2YgQlVGLiAgKi8KKyt9OworKworK3R5cGVkZWYgc3RydWN0IGFyZ3BfZm10c3RyZWFtICphcmdwX2ZtdHN0cmVhbV90OworKworKy8qIFJldHVybiBhbiBhcmdwX2ZtdHN0cmVhbSB0aGF0IG91dHB1dHMgdG8gU1RSRUFNLCBhbmQgd2hpY2ggcHJlZml4ZXMgbGluZXMKKysgICB3cml0dGVuIG9uIGl0IHdpdGggTE1BUkdJTiBzcGFjZXMgYW5kIGxpbWl0cyB0aGVtIHRvIFJNQVJHSU4gY29sdW1ucworKyAgIHRvdGFsLiAgSWYgV01BUkdJTiA+PSAwLCB3b3JkcyB0aGF0IGV4dGVuZCBwYXN0IFJNQVJHSU4gYXJlIHdyYXBwZWQgYnkKKysgICByZXBsYWNpbmcgdGhlIHdoaXRlc3BhY2UgYmVmb3JlIHRoZW0gd2l0aCBhIG5ld2xpbmUgYW5kIFdNQVJHSU4gc3BhY2VzLgorKyAgIE90aGVyd2lzZSwgY2hhcnMgYmV5b25kIFJNQVJHSU4gYXJlIHNpbXBseSBkcm9wcGVkIHVudGlsIGEgbmV3bGluZS4KKysgICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAgKi8KKytleHRlcm4gYXJncF9mbXRzdHJlYW1fdCBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKEZJTEUgKl9fc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fd21hcmdpbik7CisrZXh0ZXJuIGFyZ3BfZm10c3RyZWFtX3QgYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqX19zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgX193bWFyZ2luKTsKKysKKysvKiBGbHVzaCBfX0ZTIHRvIGl0cyBzdHJlYW0sIGFuZCBmcmVlIGl0IChidXQgZG9uJ3QgY2xvc2UgdGhlIHN0cmVhbSkuICAqLworK2V4dGVybiB2b2lkIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gdm9pZCBhcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworKworK2V4dGVybiBzc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAzKSkpOworK2V4dGVybiBzc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3ByaW50ZiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAzKSkpOworKworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIGludCBfX2NoKTsKKytleHRlcm4gaW50IGFyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpOworKworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIF9fY29uc3QgY2hhciAqX19zdHIpOworK2V4dGVybiBpbnQgYXJncF9mbXRzdHJlYW1fcHV0cyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBfX2NvbnN0IGNoYXIgKl9fc3RyKTsKKysKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0ciwgc2l6ZV90IF9fbGVuKTsKKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pOworKworKy8qIEFjY2VzcyBtYWNyb3MgZm9yIHZhcmlvdXMgYml0cyBvZiBzdGF0ZS4gICovCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luKF9fZnMpICgoX19mcyktPmxtYXJnaW4pCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9ybWFyZ2luKF9fZnMpICgoX19mcyktPnJtYXJnaW4pCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luKF9fZnMpICgoX19mcyktPndtYXJnaW4pCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gYXJncF9mbXRzdHJlYW1fbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9ybWFyZ2luIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luCisrCisrLyogU2V0IF9fRlMncyBsZWZ0IG1hcmdpbiB0byBMTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbik7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4pOworKworKy8qIFNldCBfX0ZTJ3MgcmlnaHQgbWFyZ2luIHRvIF9fUk1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luKTsKKysKKysvKiBTZXQgX19GUydzIHdyYXAgbWFyZ2luIHRvIF9fV01BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3dtYXJnaW4pOworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX193bWFyZ2luKTsKKysKKysvKiBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IHBvaW50IGluIF9fRlMuICAqLworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworKworKy8qIEludGVybmFsIHJvdXRpbmVzLiAgKi8KKytleHRlcm4gdm9pZCBfYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiB2b2lkIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiBpbnQgX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19hbW91bnQpOworK2V4dGVybiBpbnQgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fYW1vdW50KTsKKysKKysjaWZkZWYgX19PUFRJTUlaRV9fCisrLyogSW5saW5lIHZlcnNpb25zIG9mIGFib3ZlIHJvdXRpbmVzLiAgKi8KKysKKysjaWYgIV9MSUJDCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgYXJncF9mbXRzdHJlYW1fcHV0YworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIGFyZ3BfZm10c3RyZWFtX3B1dHMKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgYXJncF9mbXRzdHJlYW1fd3JpdGUKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgYXJncF9mbXRzdHJlYW1fcG9pbnQKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIF9hcmdwX2ZtdHN0cmVhbV91cGRhdGUKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIF9hcmdwX2ZtdHN0cmVhbV9lbnN1cmUKKysjZW5kaWYKKysKKysjaWZuZGVmIEFSR1BfRlNfRUkKKysjZGVmaW5lIEFSR1BfRlNfRUkgX19leHRlcm5faW5saW5lCisrI2VuZGlmCisrCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pCisreworKyAgaWYgKF9fZnMtPnAgKyBfX2xlbiA8PSBfX2ZzLT5lbmQgfHwgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKF9fZnMsIF9fbGVuKSkKKysgICAgeworKyAgICAgIG1lbWNweSAoX19mcy0+cCwgX19zdHIsIF9fbGVuKTsKKysgICAgICBfX2ZzLT5wICs9IF9fbGVuOworKyAgICAgIHJldHVybiBfX2xlbjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrQVJHUF9GU19FSSBpbnQKKytfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgX19jb25zdCBjaGFyICpfX3N0cikKKyt7CisrICBzaXplX3QgX19sZW4gPSBzdHJsZW4gKF9fc3RyKTsKKysgIGlmIChfX2xlbikKKysgICAgeworKyAgICAgIHNpemVfdCBfX3dyb3RlID0gX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoX19mcywgX19zdHIsIF9fbGVuKTsKKysgICAgICByZXR1cm4gX193cm90ZSA9PSBfX2xlbiA/IDAgOiAtMTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrQVJHUF9GU19FSSBpbnQKKytfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpCisreworKyAgaWYgKF9fZnMtPnAgPCBfX2ZzLT5lbmQgfHwgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgKF9fZnMsIDEpKQorKyAgICByZXR1cm4gKl9fZnMtPnArKyA9IF9fY2g7CisrICBlbHNlCisrICAgIHJldHVybiBFT0Y7CisrfQorKworKy8qIFNldCBfX0ZTJ3MgbGVmdCBtYXJnaW4gdG8gX19MTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX2xtYXJnaW4pCisreworKyAgc2l6ZV90IF9fb2xkOworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIF9fb2xkID0gX19mcy0+bG1hcmdpbjsKKysgIF9fZnMtPmxtYXJnaW4gPSBfX2xtYXJnaW47CisrICByZXR1cm4gX19vbGQ7CisrfQorKworKy8qIFNldCBfX0ZTJ3MgcmlnaHQgbWFyZ2luIHRvIF9fUk1BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19ybWFyZ2luKQorK3sKKysgIHNpemVfdCBfX29sZDsKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICBfX29sZCA9IF9fZnMtPnJtYXJnaW47CisrICBfX2ZzLT5ybWFyZ2luID0gX19ybWFyZ2luOworKyAgcmV0dXJuIF9fb2xkOworK30KKysKKysvKiBTZXQgRlMncyB3cmFwIG1hcmdpbiB0byBfX1dNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fd21hcmdpbikKKyt7CisrICBzaXplX3QgX19vbGQ7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgX19vbGQgPSBfX2ZzLT53bWFyZ2luOworKyAgX19mcy0+d21hcmdpbiA9IF9fd21hcmdpbjsKKysgIHJldHVybiBfX29sZDsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG91dHB1dCBwb2ludCBpbiBfX0ZTLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcykKKyt7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgcmV0dXJuIF9fZnMtPnBvaW50X2NvbCA+PSAwID8gX19mcy0+cG9pbnRfY29sIDogMDsKKyt9CisrCisrI2lmICFfTElCQworKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3B1dGMKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wdXRzCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbgorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4KKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9wb2ludAorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZQorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfX09QVElNSVpFX18gKi8KKysKKysjZW5kaWYgLyogQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQICovCisrCisrI2VuZGlmIC8qIGFyZ3AtZm10c3RyZWFtLmggKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLWZzLXhpbmwuYyBiL2xpYnVhcmdwL2FyZ3AtZnMteGlubC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDczY2JiZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1mcy14aW5sLmMKK0BAIC0wLDAgKzEsNDQgQEAKKysvKiBSZWFsIGRlZmluaXRpb25zIGZvciBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBpbiBhcmdwLWZtdHN0cmVhbS5oCisrICAgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQVJHUF9GU19FSQorKyN1bmRlZiBfX09QVElNSVpFX18KKysjZGVmaW5lIF9fT1BUSU1JWkVfXyAxCisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrCisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKy8qIEFkZCB3ZWFrIGFsaWFzZXMuICAqLworKyNpZiBfTElCQyAtIDAgJiYgIWRlZmluZWQgKEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCkgJiYgZGVmaW5lZCAod2Vha19hbGlhcykKKysKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3B1dGMsIGFyZ3BfZm10c3RyZWFtX3B1dGMpCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wdXRzLCBhcmdwX2ZtdHN0cmVhbV9wdXRzKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fd3JpdGUsIGFyZ3BfZm10c3RyZWFtX3dyaXRlKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4sIGFyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luKQorK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQsIGFyZ3BfZm10c3RyZWFtX3BvaW50KQorKworKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtaGVscC5jIGIvbGlidWFyZ3AvYXJncC1oZWxwLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41OGE1ZTZlCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWhlbHAuYworQEAgLTAsMCArMSwxODgyIEBACisrLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZyBoZWxwIG91dHB1dAorKyAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3CisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovCisrI2lmbmRlZiBfX0dOVUNfXworKyMgaWYgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyBlbHNlCisrIyAgaWZkZWYgX0FJWAorKyNwcmFnbWEgYWxsb2NhCisrIyAgZWxzZQorKyMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmbmRlZiBfCisrLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4gICovCisrIyBpZiAoZGVmaW5lZCBIQVZFX0xJQklOVExfSCB8fCBkZWZpbmVkIF9MSUJDKSAmJiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGRnZXR0ZXh0CisrIyAgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSBcCisrICBJTlRVU0UoX19kY2dldHRleHQpIChkb21haW4sIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX0xJQkMKKysjIGlmIEhBVkVfU1RSRVJST1JfUgorKyMgIGlmICFIQVZFX0RFQ0xfU1RSRVJST1JfUgorK2NoYXIgKnN0cmVycm9yX3IgKGludCBlcnJudW0sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SCisrY2hhciAqc3RyZXJyb3IgKGludCBlcnJudW0pOworKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrI2luY2x1ZGUgImFyZ3AtZm10c3RyZWFtLmgiCisrI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrI2lmbmRlZiBTSVpFX01BWAorKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKysjZW5kaWYKKysKKysvKiBVc2VyLXNlbGVjdGFibGUgKHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKSBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisrCisrICAgVGhlc2UgbWF5IGJlIHNwZWNpZmllZCBpbiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgYEFSR1BfSEVMUF9GTVQnLAorKyAgIHdpdGggYSBjb250ZW50cyBsaWtlOiAgVkFSMT1WQUwxLFZBUjI9VkFMMixCT09MVkFSMixuby1CT09MVkFSMgorKyAgIFdoZXJlIFZBTG4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuICBUaGUgbGlzdCBvZiB2YXJpYWJsZXMgaXMgaW4gdGhlCisrICAgVVBBUkFNX05BTUVTIHZlY3RvciwgYmVsb3cuICAqLworKworKy8qIERlZmF1bHQgcGFyYW1ldGVycy4gICovCisrI2RlZmluZSBEVVBfQVJHUyAgICAgIDAgICAgICAgICAgICAgICAgLyogVHJ1ZSBpZiBvcHRpb24gYXJndW1lbnQgY2FuIGJlIGR1cGxpY2F0ZWQuICovCisrI2RlZmluZSBEVVBfQVJHU19OT1RFIDEgICAgICAgICAgICAgICAgLyogVHJ1ZSB0byBwcmludCBhIG5vdGUgYWJvdXQgZHVwbGljYXRlIGFyZ3MuICovCisrI2RlZmluZSBTSE9SVF9PUFRfQ09MIDIgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIHNob3J0IG9wdGlvbnMgc3RhcnQgKi8KKysjZGVmaW5lIExPTkdfT1BUX0NPTCAgNiAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggbG9uZyBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBET0NfT1BUX0NPTCAgIDIgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIGRvYyBvcHRpb25zIHN0YXJ0ICovCisrI2RlZmluZSBPUFRfRE9DX0NPTCAgMjkgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIG9wdGlvbiB0ZXh0IHN0YXJ0cyAqLworKyNkZWZpbmUgSEVBREVSX0NPTCAgICAxICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBncm91cCBoZWFkZXJzIGFyZSBwcmludGVkICovCisrI2RlZmluZSBVU0FHRV9JTkRFTlQgMTIgICAgICAgICAgICAgICAgLyogaW5kZW50YXRpb24gb2Ygd3JhcHBlZCB1c2FnZSBsaW5lcyAqLworKyNkZWZpbmUgUk1BUkdJTiAgICAgIDc5ICAgICAgICAgICAgICAgIC8qIHJpZ2h0IG1hcmdpbiB1c2VkIGZvciB3cmFwcGluZyAqLworKworKy8qIFVzZXItc2VsZWN0YWJsZSAodXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUpIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKysgICBUaGV5IG11c3QgYWxsIGJlIG9mIHR5cGUgYGludCcgZm9yIHRoZSBwYXJzaW5nIGNvZGUgdG8gd29yay4gICovCisrc3RydWN0IHVwYXJhbXMKKyt7CisrICAvKiBJZiB0cnVlLCBhcmd1bWVudHMgZm9yIGFuIG9wdGlvbiBhcmUgc2hvd24gd2l0aCBib3RoIHNob3J0IGFuZCBsb25nCisrICAgICBvcHRpb25zLCBldmVuIHdoZW4gYSBnaXZlbiBvcHRpb24gaGFzIGJvdGgsIGUuZy4gYC14IEFSRywgLS1sb25neD1BUkcnLgorKyAgICAgSWYgZmFsc2UsIHRoZW4gaWYgYW4gb3B0aW9uIGhhcyBib3RoLCB0aGUgYXJndW1lbnQgaXMgb25seSBzaG93biB3aXRoCisrICAgICB0aGUgbG9uZyBvbmUsIGUuZy4sIGAteCwgLS1sb25neD1BUkcnLCBhbmQgYSBtZXNzYWdlIGluZGljYXRpbmcgdGhhdAorKyAgICAgdGhpcyByZWFsbHkgbWVhbnMgYm90aCBpcyBwcmludGVkIGJlbG93IHRoZSBvcHRpb25zLiAgKi8KKysgIGludCBkdXBfYXJnczsKKysKKysgIC8qIFRoaXMgaXMgdHJ1ZSBpZiB3aGVuIERVUF9BUkdTIGlzIGZhbHNlLCBhbmQgc29tZSBkdXBsaWNhdGUgYXJndW1lbnRzIGhhdmUKKysgICAgIGJlZW4gc3VwcHJlc3NlZCwgYW4gZXhwbGFuYXRvcnkgbWVzc2FnZSBzaG91bGQgYmUgcHJpbnRlZC4gICovCisrICBpbnQgZHVwX2FyZ3Nfbm90ZTsKKysKKysgIC8qIFZhcmlvdXMgb3V0cHV0IGNvbHVtbnMuICAqLworKyAgaW50IHNob3J0X29wdF9jb2w7CisrICBpbnQgbG9uZ19vcHRfY29sOworKyAgaW50IGRvY19vcHRfY29sOworKyAgaW50IG9wdF9kb2NfY29sOworKyAgaW50IGhlYWRlcl9jb2w7CisrICBpbnQgdXNhZ2VfaW5kZW50OworKyAgaW50IHJtYXJnaW47CisrfTsKKysKKysvKiBUaGlzIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLCBhcyB1c2VyIG9wdGlvbnMgYXJlIG9ubHkgZXZlciByZWFkIG9uY2UuICAqLworK3N0YXRpYyBzdHJ1Y3QgdXBhcmFtcyB1cGFyYW1zID0geworKyAgRFVQX0FSR1MsIERVUF9BUkdTX05PVEUsCisrICBTSE9SVF9PUFRfQ09MLCBMT05HX09QVF9DT0wsIERPQ19PUFRfQ09MLCBPUFRfRE9DX0NPTCwgSEVBREVSX0NPTCwKKysgIFVTQUdFX0lOREVOVCwgUk1BUkdJTgorK307CisrCisrLyogQSBwYXJ0aWN1bGFyIHVwYXJhbSwgYW5kIHdoYXQgdGhlIHVzZXIgbmFtZSBpcy4gICovCisrc3RydWN0IHVwYXJhbV9uYW1lCisreworKyAgY29uc3QgY2hhciBuYW1lWzE0XTsgICAgICAgICAvKiBVc2VyIG5hbWUuICAqLworKyAgYm9vbCBpc19ib29sOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgaXQncyBgYm9vbGVhbicuICAqLworKyAgdWludDhfdCB1cGFyYW1zX29mZnM7ICAgICAgICAgICAgICAgIC8qIExvY2F0aW9uIG9mIHRoZSAoaW50KSBmaWVsZCBpbiBVUEFSQU1TLiAgKi8KKyt9OworKworKy8qIFRoZSBuYW1lLWZpZWxkIG1hcHBpbmdzIHdlIGtub3cgYWJvdXQuICAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXBhcmFtX25hbWUgdXBhcmFtX25hbWVzW10gPQorK3sKKysgIHsgImR1cC1hcmdzIiwgICAgICAgdHJ1ZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkdXBfYXJncykgfSwKKysgIHsgImR1cC1hcmdzLW5vdGUiLCAgdHJ1ZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBkdXBfYXJnc19ub3RlKSB9LAorKyAgeyAic2hvcnQtb3B0LWNvbCIsICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBzaG9ydF9vcHRfY29sKSB9LAorKyAgeyAibG9uZy1vcHQtY29sIiwgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBsb25nX29wdF9jb2wpIH0sCisrICB7ICJkb2Mtb3B0LWNvbCIsICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGRvY19vcHRfY29sKSB9LAorKyAgeyAib3B0LWRvYy1jb2wiLCAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBvcHRfZG9jX2NvbCkgfSwKKysgIHsgImhlYWRlci1jb2wiLCAgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgaGVhZGVyX2NvbCkgfSwKKysgIHsgInVzYWdlLWluZGVudCIsICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgdXNhZ2VfaW5kZW50KSB9LAorKyAgeyAicm1hcmdpbiIsICAgICAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBybWFyZ2luKSB9CisrfTsKKysjZGVmaW5lIG51cGFyYW1fbmFtZXMgKHNpemVvZiAodXBhcmFtX25hbWVzKSAvIHNpemVvZiAodXBhcmFtX25hbWVzWzBdKSkKKysKKysvKiBSZWFkIHVzZXIgb3B0aW9ucyBmcm9tIHRoZSBlbnZpcm9ubWVudCwgYW5kIGZpbGwgaW4gVVBBUkFNUyBhcHByb3BpYXRlbHkuICAqLworK3N0YXRpYyB2b2lkCisrZmlsbF9pbl91cGFyYW1zIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgY29uc3QgY2hhciAqdmFyID0gZ2V0ZW52ICgiQVJHUF9IRUxQX0ZNVCIpOworKworKyNkZWZpbmUgU0tJUFdTKHApIGRvIHsgd2hpbGUgKGlzc3BhY2UgKCpwKSkgcCsrOyB9IHdoaWxlICgwKTsKKysKKysgIGlmICh2YXIpCisrICAgIC8qIFBhcnNlIHZhci4gKi8KKysgICAgd2hpbGUgKCp2YXIpCisrICAgICAgeworKyAgICAgICBTS0lQV1MgKHZhcik7CisrCisrICAgICAgIGlmIChpc2FscGhhICgqdmFyKSkKKysgICAgICAgICB7CisrICAgICAgICAgICBzaXplX3QgdmFyX2xlbjsKKysgICAgICAgICAgIGNvbnN0IHN0cnVjdCB1cGFyYW1fbmFtZSAqdW47CisrICAgICAgICAgICBpbnQgdW5zcGVjID0gMCwgdmFsID0gMDsKKysgICAgICAgICAgIGNvbnN0IGNoYXIgKmFyZyA9IHZhcjsKKysKKysgICAgICAgICAgIHdoaWxlIChpc2FsbnVtICgqYXJnKSB8fCAqYXJnID09ICctJyB8fCAqYXJnID09ICdfJykKKysgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICB2YXJfbGVuID0gYXJnIC0gdmFyOworKworKyAgICAgICAgICAgU0tJUFdTIChhcmcpOworKworKyAgICAgICAgICAgaWYgKCphcmcgPT0gJ1wwJyB8fCAqYXJnID09ICcsJykKKysgICAgICAgICAgICAgdW5zcGVjID0gMTsKKysgICAgICAgICAgIGVsc2UgaWYgKCphcmcgPT0gJz0nKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgYXJnKys7CisrICAgICAgICAgICAgICAgU0tJUFdTIChhcmcpOworKyAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICBpZiAodW5zcGVjKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgaWYgKHZhclswXSA9PSAnbicgJiYgdmFyWzFdID09ICdvJyAmJiB2YXJbMl0gPT0gJy0nKQorKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICB2YWwgPSAwOworKyAgICAgICAgICAgICAgICAgICB2YXIgKz0gMzsKKysgICAgICAgICAgICAgICAgICAgdmFyX2xlbiAtPSAzOworKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgIHZhbCA9IDE7CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIGVsc2UgaWYgKGlzZGlnaXQgKCphcmcpKQorKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgdmFsID0gYXRvaSAoYXJnKTsKKysgICAgICAgICAgICAgICB3aGlsZSAoaXNkaWdpdCAoKmFyZykpCisrICAgICAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgICAgICAgICBTS0lQV1MgKGFyZyk7CisrICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgIHVuID0gdXBhcmFtX25hbWVzOworKyAgICAgICAgICAgc2l6ZV90IHU7CisrICAgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgbnVwYXJhbV9uYW1lczsgKyt1biwgKyt1KQorKyAgICAgICAgICAgICBpZiAoc3RybGVuICh1bi0+bmFtZSkgPT0gdmFyX2xlbgorKyAgICAgICAgICAgICAgICAgJiYgc3RybmNtcCAodmFyLCB1bi0+bmFtZSwgdmFyX2xlbikgPT0gMCkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBpZiAodW5zcGVjICYmICF1bi0+aXNfYm9vbCkKKysgICAgICAgICAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwKKyslLipzOiBBUkdQX0hFTFBfRk1UIHBhcmFtZXRlciByZXF1aXJlcyBhIHZhbHVlIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YXJfbGVuLCB2YXIpOworKyAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAqKGludCAqKSgoY2hhciAqKSZ1cGFyYW1zICsgdW4tPnVwYXJhbXNfb2ZmcykgPSB2YWw7CisrICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICBpZiAodSA9PSBudXBhcmFtX25hbWVzKQorKyAgICAgICAgICAgICBhcmdwX2ZhaWx1cmUgKHN0YXRlLCAwLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgIlwKKyslLipzOiBVbmtub3duIEFSR1BfSEVMUF9GTVQgcGFyYW1ldGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSB2YXJfbGVuLCB2YXIpOworKworKyAgICAgICAgICAgdmFyID0gYXJnOworKyAgICAgICAgICAgaWYgKCp2YXIgPT0gJywnKQorKyAgICAgICAgICAgICB2YXIrKzsKKysgICAgICAgICB9CisrICAgICAgIGVsc2UgaWYgKCp2YXIpCisrICAgICAgICAgeworKyAgICAgICAgICAgYXJncF9mYWlsdXJlIChzdGF0ZSwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdhcmJhZ2UgaW4gQVJHUF9IRUxQX0ZNVDogJXMiKSwgdmFyKTsKKysgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgIH0KKysgICAgICB9CisrfQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaGFzbid0IGJlZW4gbWFya2VkIGludmlzaWJsZS4gIFZpc2liaWxpdHkgb25seSBhZmZlY3RzCisrICAgd2hldGhlciBPUFQgaXMgZGlzcGxheWVkIG9yIHVzZWQgaW4gc29ydGluZywgbm90IG9wdGlvbiBzaGFkb3dpbmcuICAqLworKyNkZWZpbmUgb3Zpc2libGUob3B0KSAoISAoKG9wdCktPmZsYWdzICYgT1BUSU9OX0hJRERFTikpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyBhbiBhbGlhcyBmb3IgYW4gZWFybGllciBvcHRpb24uICAqLworKyNkZWZpbmUgb2FsaWFzKG9wdCkgKChvcHQpLT5mbGFncyAmIE9QVElPTl9BTElBUykKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGlzIGFuIGRvY3VtZW50YXRpb24tb25seSBlbnRyeS4gICovCisrI2RlZmluZSBvZG9jKG9wdCkgKChvcHQpLT5mbGFncyAmIE9QVElPTl9ET0MpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBpcyB0aGUgZW5kLW9mLWxpc3QgbWFya2VyIGZvciBhIGxpc3Qgb2Ygb3B0aW9ucy4gICovCisrI2RlZmluZSBvZW5kKG9wdCkgX19vcHRpb25faXNfZW5kIChvcHQpCisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBoYXMgYSBzaG9ydCBvcHRpb24uICAqLworKyNkZWZpbmUgb3Nob3J0KG9wdCkgX19vcHRpb25faXNfc2hvcnQgKG9wdCkKKysKKysvKgorKyAgIFRoZSBoZWxwIGZvcm1hdCBmb3IgYSBwYXJ0aWN1bGFyIG9wdGlvbiBpcyBsaWtlOgorKworKyAgICAgLXhBUkcsIC15QVJHLCAtLWxvbmcxPUFSRywgLS1sb25nMj1BUkcgICAgICAgIERvY3VtZW50YXRpb24uLi4KKysKKysgICBXaGVyZSBBUkcgd2lsbCBiZSBvbWl0dGVkIGlmIHRoZXJlJ3Mgbm8gYXJndW1lbnQsIGZvciB0aGlzIG9wdGlvbiwgb3IKKysgICB3aWxsIGJlIHN1cnJvdW5kZWQgYnkgIlsiIGFuZCAiXSIgYXBwcm9waWF0ZWx5IGlmIHRoZSBhcmd1bWVudCBpcworKyAgIG9wdGlvbmFsLiAgVGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGlzIHdvcmQtd3JhcHBlZCBhcHByb3BpYXRlbHksIGFuZCBpZgorKyAgIHRoZSBsaXN0IG9mIG9wdGlvbnMgaXMgbG9uZyBlbm91Z2gsIGl0IHdpbGwgYmUgc3RhcnRlZCBvbiBhIHNlcGFyYXRlIGxpbmUuCisrICAgSWYgdGhlcmUgYXJlIG5vIHNob3J0IG9wdGlvbnMgZm9yIGEgZ2l2ZW4gb3B0aW9uLCB0aGUgZmlyc3QgbG9uZyBvcHRpb24gaXMKKysgICBpbmRlbnRlZCBzbGlnaGx5IGluIGEgd2F5IHRoYXQncyBzdXBwb3NlZCB0byBtYWtlIG1vc3QgbG9uZyBvcHRpb25zIGFwcGVhcgorKyAgIHRvIGJlIGluIGEgc2VwYXJhdGUgY29sdW1uLgorKworKyAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG91dHB1dCAoZnJvbSBwcyk6CisrCisrICAgICAtcCBQSUQsIC0tcGlkPVBJRCAgICAgICAgICBMaXN0IHRoZSBwcm9jZXNzIFBJRAorKyAgICAgICAgLS1wZ3JwPVBHUlAgICAgICAgICAgICBMaXN0IHByb2Nlc3NlcyBpbiB0aGUgcHJvY2VzcyBncm91cCBQR1JQCisrICAgICAtUCwgLXgsIC0tbm8tcGFyZW50ICAgICAgICBJbmNsdWRlIHByb2Nlc3NlcyB3aXRob3V0IHBhcmVudHMKKysgICAgIC1RLCAtLWFsbC1maWVsZHMgICAgICAgICAgIERvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkgaWYgdGhlcmUncworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb21lIHJlYXNvbiBwcyBjYW4ndCBwcmludCBhIGZpZWxkIGZvciBhbnkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaXQncyByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkKKysgICAgIC1yLCAtLXJldmVyc2UsIC0tZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQKKysgICAgICAgIC0tc2Vzc2lvbls9U0lEXSAgICAgICAgQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiBTSUQgKHdoaWNoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBzaWQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcykKKysKKysgICAgSGVyZSBhcmUgc29tZSBtb3JlIG9wdGlvbnM6CisrICAgICAtZiBaT1QsIC0tZm9vbmx5PVpPVCAgICAgICBHbG9yayBhIGZvb25seQorKyAgICAgLXosIC0temF6YSAgICAgICAgICAgICAgICAgU25pdCBhIHphcgorKworKyAgICAgLT8sIC0taGVscCAgICAgICAgICAgICAgICAgR2l2ZSB0aGlzIGhlbHAgbGlzdAorKyAgICAgICAgLS11c2FnZSAgICAgICAgICAgICAgICBHaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZQorKyAgICAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgUHJpbnQgcHJvZ3JhbSB2ZXJzaW9uCisrCisrICAgVGhlIHN0cnVjdCBhcmdwX29wdGlvbiBhcnJheSBmb3IgdGhlIGFib3ZlIGNvdWxkIGxvb2sgbGlrZToKKysKKysgICB7CisrICAgICB7InBpZCIsICAgICAgICdwJywgICAgICAiUElEIiwgIDAsICJMaXN0IHRoZSBwcm9jZXNzIFBJRCJ9LAorKyAgICAgeyJwZ3JwIiwgICAgICBPUFRfUEdSUCwgIlBHUlAiLCAwLCAiTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUCJ9LAorKyAgICAgeyJuby1wYXJlbnQiLCAnUCcsICAgICAgICAgICAgICAwLCAgICAgMCwgIkluY2x1ZGUgcHJvY2Vzc2VzIHdpdGhvdXQgcGFyZW50cyJ9LAorKyAgICAgezAsICAgICAgICAgICAneCcsICAgICAgIDAsICAgICBPUFRJT05fQUxJQVN9LAorKyAgICAgeyJhbGwtZmllbGRzIiwnUScsICAgICAgIDAsICAgICAwLCAiRG9uJ3QgZWxpZGUgdW51c2FibGUgZmllbGRzIChub3JtYWxseSIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZiB0aGVyZSdzIHNvbWUgcmVhc29uIHBzIGNhbid0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJpbnQgYSBmaWVsZCBmb3IgYW55IHByb2Nlc3MsIGl0J3MiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVtb3ZlZCBmcm9tIHRoZSBvdXRwdXQgZW50aXJlbHkpIiB9LAorKyAgICAgeyJyZXZlcnNlIiwgICAncicsICAgICAgIDAsICAgICAwLCAiUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQifSwKKysgICAgIHsiZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24iLCAwLCAwLCBPUFRJT05fQUxJQVN9LAorKyAgICAgeyJzZXNzaW9uIiwgICBPUFRfU0VTUywgICJTSUQiLCBPUFRJT05fQVJHX09QVElPTkFMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNJRCAod2hpY2ggZGVmYXVsdHMgdG8gdGhlIHNpZCBvZiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoZSBjdXJyZW50IHByb2Nlc3MpIiB9LAorKworKyAgICAgezAsMCwwLDAsICJIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoifSwKKysgICAgIHsiZm9vbmx5IiwgJ2YnLCAiWk9UIiwgMCwgIkdsb3JrIGEgZm9vbmx5In0sCisrICAgICB7InphemEiLCAneicsIDAsIDAsICJTbml0IGEgemFyIn0sCisrCisrICAgICB7MH0KKysgICB9CisrCisrICAgTm90ZSB0aGF0IHRoZSBsYXN0IHRocmVlIG9wdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQgYnkgYXJncF9wYXJzZSwKKysgICB1bmxlc3MgeW91IHRlbGwgaXQgbm90IHRvIHdpdGggQVJHUF9OT19IRUxQLgorKworKyovCisrCisrLyogUmV0dXJucyB0cnVlIGlmIENIIG9jY3VycyBiZXR3ZWVuIEJFRyBhbmQgRU5ELiAgKi8KKytzdGF0aWMgaW50CisrZmluZF9jaGFyIChjaGFyIGNoLCBjaGFyICpiZWcsIGNoYXIgKmVuZCkKKyt7CisrICB3aGlsZSAoYmVnIDwgZW5kKQorKyAgICBpZiAoKmJlZyA9PSBjaCkKKysgICAgICByZXR1cm4gMTsKKysgICAgZWxzZQorKyAgICAgIGJlZysrOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBob2xfY2x1c3RlcjsgICAgICAgICAgICAvKiBmd2QgZGVjbCAqLworKworK3N0cnVjdCBob2xfZW50cnkKKyt7CisrICAvKiBGaXJzdCBvcHRpb24uICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrICAvKiBOdW1iZXIgb2Ygb3B0aW9ucyAoaW5jbHVkaW5nIGFsaWFzZXMpLiAgKi8KKysgIHVuc2lnbmVkIG51bTsKKysKKysgIC8qIEEgcG9pbnRlcnMgaW50byB0aGUgSE9MJ3Mgc2hvcnRfb3B0aW9ucyBmaWVsZCwgdG8gdGhlIGZpcnN0IHNob3J0IG9wdGlvbgorKyAgICAgbGV0dGVyIGZvciB0aGlzIGVudHJ5LiAgVGhlIG9yZGVyIG9mIHRoZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyB0aGlzIHBvaW50CisrICAgICBjb3JyZXNwb25kcyB0byB0aGUgb3JkZXIgb2Ygb3B0aW9ucyBwb2ludGVkIHRvIGJ5IE9QVCwgYW5kIHRoZXJlIGFyZSBhdAorKyAgICAgbW9zdCBOVU0uICBBIHNob3J0IG9wdGlvbiByZWNvcmRlZCBpbiBhIG9wdGlvbiBmb2xsb3dpbmcgT1BUIGlzIG9ubHkKKysgICAgIHZhbGlkIGlmIGl0IG9jY3VycyBpbiB0aGUgcmlnaHQgcGxhY2UgaW4gU0hPUlRfT1BUSU9OUyAob3RoZXJ3aXNlIGl0J3MKKysgICAgIHByb2JhYmx5IGJlZW4gc2hhZG93ZWQgYnkgc29tZSBvdGhlciBlbnRyeSkuICAqLworKyAgY2hhciAqc2hvcnRfb3B0aW9uczsKKysKKysgIC8qIEVudHJpZXMgYXJlIHNvcnRlZCBieSB0aGVpciBncm91cCBmaXJzdCwgaW4gdGhlIG9yZGVyOgorKyAgICAgICAxLCAyLCAuLi4sIG4sIDAsIC1tLCAuLi4sIC0yLCAtMQorKyAgICAgYW5kIHRoZW4gYWxwaGFiZXRpY2FsbHkgd2l0aGluIGVhY2ggZ3JvdXAuICBUaGUgZGVmYXVsdCBpcyAwLiAgKi8KKysgIGludCBncm91cDsKKysKKysgIC8qIFRoZSBjbHVzdGVyIG9mIG9wdGlvbnMgdGhpcyBlbnRyeSBiZWxvbmdzIHRvLCBvciAwIGlmIG5vbmUuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyOworKworKyAgLyogVGhlIGFyZ3AgZnJvbSB3aGljaCB0aGlzIG9wdGlvbiBjYW1lLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworK307CisrCisrLyogQSBjbHVzdGVyIG9mIGVudHJpZXMgdG8gcmVmbGVjdCB0aGUgYXJncCB0cmVlIHN0cnVjdHVyZS4gICovCisrc3RydWN0IGhvbF9jbHVzdGVyCisreworKyAgLyogQSBkZXNjcmlwdGl2ZSBoZWFkZXIgcHJpbnRlZCBiZWZvcmUgb3B0aW9ucyBpbiB0aGlzIGNsdXN0ZXIuICAqLworKyAgY29uc3QgY2hhciAqaGVhZGVyOworKworKyAgLyogVXNlZCB0byBvcmRlciBjbHVzdGVycyB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAgd2l0aCB0aGUgc2FtZSBwYXJlbnQsCisrICAgICBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXJyZWQgaW4gdGhlIHBhcmVudCBhcmdwJ3MgY2hpbGQKKysgICAgIGxpc3QuICAqLworKyAgaW50IGluZGV4OworKworKyAgLyogSG93IHRvIHNvcnQgdGhpcyBjbHVzdGVyIHdpdGggcmVzcGVjdCB0byBvcHRpb25zIGFuZCBvdGhlciBjbHVzdGVycyBhdCB0aGUKKysgICAgIHNhbWUgZGVwdGggKGNsdXN0ZXJzIGFsd2F5cyBmb2xsb3cgb3B0aW9ucyBpbiB0aGUgc2FtZSBncm91cCkuICAqLworKyAgaW50IGdyb3VwOworKworKyAgLyogVGhlIGNsdXN0ZXIgdG8gd2hpY2ggdGhpcyBjbHVzdGVyIGJlbG9uZ3MsIG9yIDAgaWYgaXQncyBhdCB0aGUgYmFzZQorKyAgICAgbGV2ZWwuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpwYXJlbnQ7CisrCisrICAvKiBUaGUgYXJncCBmcm9tIHdoaWNoIHRoaXMgY2x1c3RlciBpcyAoZXZlbnR1YWxseSkgZGVyaXZlZC4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFRoZSBkaXN0YW5jZSB0aGlzIGNsdXN0ZXIgaXMgZnJvbSB0aGUgcm9vdC4gICovCisrICBpbnQgZGVwdGg7CisrCisrICAvKiBDbHVzdGVycyBpbiBhIGdpdmVuIGhvbCBhcmUga2VwdCBpbiBhIGxpbmtlZCBsaXN0LCB0byBtYWtlIGZyZWVpbmcgdGhlbQorKyAgICAgcG9zc2libGUuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpuZXh0OworK307CisrCisrLyogQSBsaXN0IG9mIG9wdGlvbnMgZm9yIGhlbHAuICAqLworK3N0cnVjdCBob2wKKyt7CisrICAvKiBBbiBhcnJheSBvZiBob2xfZW50cnkncy4gICovCisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyaWVzOworKyAgLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoaXMgaG9sLiAgSWYgdGhpcyBmaWVsZCBpcyB6ZXJvLCB0aGUgb3RoZXJzCisrICAgICBhcmUgdW5kZWZpbmVkLiAgKi8KKysgIHVuc2lnbmVkIG51bV9lbnRyaWVzOworKworKyAgLyogQSBzdHJpbmcgY29udGFpbmluZyBhbGwgc2hvcnQgb3B0aW9ucyBpbiB0aGlzIEhPTC4gIEVhY2ggZW50cnkgY29udGFpbnMKKysgICAgIHBvaW50ZXJzIGludG8gdGhpcyBzdHJpbmcsIHNvIHRoZSBvcmRlciBjYW4ndCBiZSBtZXNzZWQgd2l0aCBibGluZGx5LiAgKi8KKysgIGNoYXIgKnNob3J0X29wdGlvbnM7CisrCisrICAvKiBDbHVzdGVycyBvZiBlbnRyaWVzIGluIHRoaXMgaG9sLiAgKi8KKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcnM7CisrfTsKKysKKysvKiBDcmVhdGUgYSBzdHJ1Y3QgaG9sIGZyb20gdGhlIG9wdGlvbnMgaW4gQVJHUC4gIENMVVNURVIgaXMgdGhlCisrICAgaG9sX2NsdXN0ZXIgaW4gd2hpY2ggdGhlc2UgZW50cmllcyBvY2N1ciwgb3IgMCwgaWYgYXQgdGhlIHJvb3QuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sICoKKyttYWtlX2hvbCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIHN0cnVjdCBob2xfY2x1c3RlciAqY2x1c3RlcikKKyt7CisrICBjaGFyICpzbzsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqbzsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0cyA9IGFyZ3AtPm9wdGlvbnM7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIHVuc2lnbmVkIG51bV9zaG9ydF9vcHRpb25zID0gMDsKKysgIHN0cnVjdCBob2wgKmhvbCA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sKSk7CisrCisrICBhc3NlcnQgKGhvbCk7CisrCisrICBob2wtPm51bV9lbnRyaWVzID0gMDsKKysgIGhvbC0+Y2x1c3RlcnMgPSAwOworKworKyAgaWYgKG9wdHMpCisrICAgIHsKKysgICAgICBpbnQgY3VyX2dyb3VwID0gMDsKKysKKysgICAgICAvKiBUaGUgZmlyc3Qgb3B0aW9uIG11c3Qgbm90IGJlIGFuIGFsaWFzLiAgKi8KKysgICAgICBhc3NlcnQgKCEgb2FsaWFzIChvcHRzKSk7CisrCisrICAgICAgLyogQ2FsY3VsYXRlIHRoZSBzcGFjZSBuZWVkZWQuICAqLworKyAgICAgIGZvciAobyA9IG9wdHM7ICEgb2VuZCAobyk7IG8rKykKKysgICAgICAgeworKyAgICAgICAgIGlmICghIG9hbGlhcyAobykpCisrICAgICAgICAgICBob2wtPm51bV9lbnRyaWVzKys7CisrICAgICAgICAgaWYgKG9zaG9ydCAobykpCisrICAgICAgICAgICBudW1fc2hvcnRfb3B0aW9ucysrOyAgICAgICAgLyogVGhpcyBpcyBhbiB1cHBlciBib3VuZC4gICovCisrICAgICAgIH0KKysKKysgICAgICBob2wtPmVudHJpZXMgPSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkgKiBob2wtPm51bV9lbnRyaWVzKTsKKysgICAgICBob2wtPnNob3J0X29wdGlvbnMgPSBtYWxsb2MgKG51bV9zaG9ydF9vcHRpb25zICsgMSk7CisrCisrICAgICAgYXNzZXJ0IChob2wtPmVudHJpZXMgJiYgaG9sLT5zaG9ydF9vcHRpb25zKTsKKysjaWYgU0laRV9NQVggPD0gVUlOVF9NQVgKKysgICAgICBhc3NlcnQgKGhvbC0+bnVtX2VudHJpZXMgPD0gU0laRV9NQVggLyBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysjZW5kaWYKKysKKysgICAgICAvKiBGaWxsIGluIHRoZSBlbnRyaWVzLiAgKi8KKysgICAgICBzbyA9IGhvbC0+c2hvcnRfb3B0aW9uczsKKysgICAgICBmb3IgKG8gPSBvcHRzLCBlbnRyeSA9IGhvbC0+ZW50cmllczsgISBvZW5kIChvKTsgZW50cnkrKykKKysgICAgICAgeworKyAgICAgICAgIGVudHJ5LT5vcHQgPSBvOworKyAgICAgICAgIGVudHJ5LT5udW0gPSAwOworKyAgICAgICAgIGVudHJ5LT5zaG9ydF9vcHRpb25zID0gc287CisrICAgICAgICAgZW50cnktPmdyb3VwID0gY3VyX2dyb3VwID0KKysgICAgICAgICAgIG8tPmdyb3VwCisrICAgICAgICAgICA/IG8tPmdyb3VwCisrICAgICAgICAgICA6ICgoIW8tPm5hbWUgJiYgIW8tPmtleSkKKysgICAgICAgICAgICAgID8gY3VyX2dyb3VwICsgMQorKyAgICAgICAgICAgICAgOiBjdXJfZ3JvdXApOworKyAgICAgICAgIGVudHJ5LT5jbHVzdGVyID0gY2x1c3RlcjsKKysgICAgICAgICBlbnRyeS0+YXJncCA9IGFyZ3A7CisrCisrICAgICAgICAgZG8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgZW50cnktPm51bSsrOworKyAgICAgICAgICAgICBpZiAob3Nob3J0IChvKSAmJiAhIGZpbmRfY2hhciAoby0+a2V5LCBob2wtPnNob3J0X29wdGlvbnMsIHNvKSkKKysgICAgICAgICAgICAgICAvKiBPIGhhcyBhIHZhbGlkIHNob3J0IG9wdGlvbiB3aGljaCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHVzZWQuKi8KKysgICAgICAgICAgICAgICAqc28rKyA9IG8tPmtleTsKKysgICAgICAgICAgICAgbysrOworKyAgICAgICAgICAgfQorKyAgICAgICAgIHdoaWxlICghIG9lbmQgKG8pICYmIG9hbGlhcyAobykpOworKyAgICAgICB9CisrICAgICAgKnNvID0gJ1wwJzsgICAgICAgICAgICAgIC8qIG51bGwgdGVybWluYXRlZCBzbyB3ZSBjYW4gZmluZCB0aGUgbGVuZ3RoICovCisrICAgIH0KKysKKysgIHJldHVybiBob2w7CisrfQorKworKy8qIEFkZCBhIG5ldyBjbHVzdGVyIHRvIEhPTCwgd2l0aCB0aGUgZ2l2ZW4gR1JPVVAgYW5kIEhFQURFUiAodGFrZW4gZnJvbSB0aGUKKysgICBhc3NvY2lhdGVkIGFyZ3AgY2hpbGQgbGlzdCBlbnRyeSksIElOREVYLCBhbmQgUEFSRU5ULCBhbmQgcmV0dXJuIGEgcG9pbnRlcgorKyAgIHRvIGl0LiAgQVJHUCBpcyB0aGUgYXJncCB0aGF0IHRoaXMgY2x1c3RlciByZXN1bHRzIGZyb20uICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKgorK2hvbF9hZGRfY2x1c3RlciAoc3RydWN0IGhvbCAqaG9sLCBpbnQgZ3JvdXAsIGNvbnN0IGNoYXIgKmhlYWRlciwgaW50IGluZGV4LAorKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKnBhcmVudCwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3ApCisreworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbCA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sX2NsdXN0ZXIpKTsKKysgIGlmIChjbCkKKysgICAgeworKyAgICAgIGNsLT5ncm91cCA9IGdyb3VwOworKyAgICAgIGNsLT5oZWFkZXIgPSBoZWFkZXI7CisrCisrICAgICAgY2wtPmluZGV4ID0gaW5kZXg7CisrICAgICAgY2wtPnBhcmVudCA9IHBhcmVudDsKKysgICAgICBjbC0+YXJncCA9IGFyZ3A7CisrICAgICAgY2wtPmRlcHRoID0gcGFyZW50ID8gcGFyZW50LT5kZXB0aCArIDEgOiAwOworKworKyAgICAgIGNsLT5uZXh0ID0gaG9sLT5jbHVzdGVyczsKKysgICAgICBob2wtPmNsdXN0ZXJzID0gY2w7CisrICAgIH0KKysgIHJldHVybiBjbDsKKyt9CisrCisrLyogRnJlZSBIT0wgYW5kIGFueSByZXNvdXJjZXMgaXQgdXNlcy4gICovCisrc3RhdGljIHZvaWQKKytob2xfZnJlZSAoc3RydWN0IGhvbCAqaG9sKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqY2wgPSBob2wtPmNsdXN0ZXJzOworKworKyAgd2hpbGUgKGNsKQorKyAgICB7CisrICAgICAgc3RydWN0IGhvbF9jbHVzdGVyICpuZXh0ID0gY2wtPm5leHQ7CisrICAgICAgZnJlZSAoY2wpOworKyAgICAgIGNsID0gbmV4dDsKKysgICAgfQorKworKyAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgZnJlZSAoaG9sLT5lbnRyaWVzKTsKKysgICAgICBmcmVlIChob2wtPnNob3J0X29wdGlvbnMpOworKyAgICB9CisrCisrICBmcmVlIChob2wpOworK30KKysKKytzdGF0aWMgaW50CisraG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSksCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgdW5zaWduZWQgbm9wdHM7CisrICBpbnQgdmFsID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LCAqcmVhbCA9IGVudHJ5LT5vcHQ7CisrICBjaGFyICpzbyA9IGVudHJ5LT5zaG9ydF9vcHRpb25zOworKworKyAgZm9yIChvcHQgPSByZWFsLCBub3B0cyA9IGVudHJ5LT5udW07IG5vcHRzID4gMCAmJiAhdmFsOyBvcHQrKywgbm9wdHMtLSkKKysgICAgaWYgKG9zaG9ydCAob3B0KSAmJiAqc28gPT0gb3B0LT5rZXkpCisrICAgICAgeworKyAgICAgICBpZiAoIW9hbGlhcyAob3B0KSkKKysgICAgICAgICByZWFsID0gb3B0OworKyAgICAgICBpZiAob3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgdmFsID0gKCpmdW5jKShvcHQsIHJlYWwsIGRvbWFpbiwgY29va2llKTsKKysgICAgICAgc28rKzsKKysgICAgICB9CisrCisrICByZXR1cm4gdmFsOworK30KKysKKytzdGF0aWMgX19pbmxpbmVfXyBpbnQKKytfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCisraG9sX2VudHJ5X2xvbmdfaXRlcmF0ZSAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnksCisrICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKSwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIHVuc2lnbmVkIG5vcHRzOworKyAgaW50IHZhbCA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwgKnJlYWwgPSBlbnRyeS0+b3B0OworKworKyAgZm9yIChvcHQgPSByZWFsLCBub3B0cyA9IGVudHJ5LT5udW07IG5vcHRzID4gMCAmJiAhdmFsOyBvcHQrKywgbm9wdHMtLSkKKysgICAgaWYgKG9wdC0+bmFtZSkKKysgICAgICB7CisrICAgICAgIGlmICghb2FsaWFzIChvcHQpKQorKyAgICAgICAgIHJlYWwgPSBvcHQ7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB2YWwgPSAoKmZ1bmMpKG9wdCwgcmVhbCwgZG9tYWluLCBjb29raWUpOworKyAgICAgIH0KKysKKysgIHJldHVybiB2YWw7CisrfQorKworKy8qIEl0ZXJhdG9yIHRoYXQgcmV0dXJucyB0cnVlIGZvciB0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uLiAgKi8KKytzdGF0aWMgX19pbmxpbmVfXyBpbnQKKyt1bnRpbF9zaG9ydCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICByZXR1cm4gb3Nob3J0IChvcHQpID8gb3B0LT5rZXkgOiAwOworK30KKysKKysvKiBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBzaG9ydCBvcHRpb24gaW4gRU5UUlksIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4gICovCisrc3RhdGljIGNoYXIKKytob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5KQorK3sKKysgIHJldHVybiBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIHVudGlsX3Nob3J0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgMCk7CisrfQorKworKy8qIFJldHVybnMgdGhlIGZpcnN0IHZhbGlkIGxvbmcgb3B0aW9uIGluIEVOVFJZLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytob2xfZW50cnlfZmlyc3RfbG9uZyAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkpCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrICB1bnNpZ25lZCBudW07CisrICBmb3IgKG9wdCA9IGVudHJ5LT5vcHQsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICByZXR1cm4gb3B0LT5uYW1lOworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFJldHVybnMgdGhlIGVudHJ5IGluIEhPTCB3aXRoIHRoZSBsb25nIG9wdGlvbiBuYW1lIE5BTUUsIG9yIDAgaWYgdGhlcmUgaXMKKysgICBub25lLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbF9lbnRyeSAqCisraG9sX2ZpbmRfZW50cnkgKHN0cnVjdCBob2wgKmhvbCwgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSA9IGhvbC0+ZW50cmllczsKKysgIHVuc2lnbmVkIG51bV9lbnRyaWVzID0gaG9sLT5udW1fZW50cmllczsKKysKKysgIHdoaWxlIChudW1fZW50cmllcy0tID4gMCkKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0ID0gZW50cnktPm9wdDsKKysgICAgICB1bnNpZ25lZCBudW1fb3B0cyA9IGVudHJ5LT5udW07CisrCisrICAgICAgd2hpbGUgKG51bV9vcHRzLS0gPiAwKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpICYmIHN0cmNtcCAob3B0LT5uYW1lLCBuYW1lKSA9PSAwKQorKyAgICAgICAgIHJldHVybiBlbnRyeTsKKysgICAgICAgZWxzZQorKyAgICAgICAgIG9wdCsrOworKworKyAgICAgIGVudHJ5Kys7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBJZiBhbiBlbnRyeSB3aXRoIHRoZSBsb25nIG9wdGlvbiBOQU1FIG9jY3VycyBpbiBIT0wsIHNldCBpdCdzIHNwZWNpYWwKKysgICBzb3J0IHBvc2l0aW9uIHRvIEdST1VQLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9zZXRfZ3JvdXAgKHN0cnVjdCBob2wgKmhvbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGdyb3VwKQorK3sKKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5ID0gaG9sX2ZpbmRfZW50cnkgKGhvbCwgbmFtZSk7CisrICBpZiAoZW50cnkpCisrICAgIGVudHJ5LT5ncm91cCA9IGdyb3VwOworK30KKysKKysvKiBPcmRlciBieSBncm91cDogIDAsIDEsIDIsIC4uLiwgbiwgLW0sIC4uLiwgLTIsIC0xLgorKyAgIEVRIGlzIHdoYXQgdG8gcmV0dXJuIGlmIEdST1VQMSBhbmQgR1JPVVAyIGFyZSB0aGUgc2FtZS4gICovCisrc3RhdGljIGludAorK2dyb3VwX2NtcCAoaW50IGdyb3VwMSwgaW50IGdyb3VwMiwgaW50IGVxKQorK3sKKysgIGlmIChncm91cDEgPT0gZ3JvdXAyKQorKyAgICByZXR1cm4gZXE7CisrICBlbHNlIGlmICgoZ3JvdXAxIDwgMCAmJiBncm91cDIgPCAwKSB8fCAoZ3JvdXAxID49IDAgJiYgZ3JvdXAyID49IDApKQorKyAgICByZXR1cm4gZ3JvdXAxIC0gZ3JvdXAyOworKyAgZWxzZQorKyAgICByZXR1cm4gZ3JvdXAyIC0gZ3JvdXAxOworK30KKysKKysvKiBDb21wYXJlIGNsdXN0ZXJzIENMMSAmIENMMiBieSB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBhcHBlYXIgaW4KKysgICBvdXRwdXQuICAqLworK3N0YXRpYyBpbnQKKytob2xfY2x1c3Rlcl9jbXAgKGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wxLCBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMikKKyt7CisrICAvKiBJZiBvbmUgY2x1c3RlciBpcyBkZWVwZXIgdGhhbiB0aGUgb3RoZXIsIHVzZSBpdHMgYW5jZXN0b3IgYXQgdGhlIHNhbWUKKysgICAgIGxldmVsLCBzbyB0aGF0IGZpbmRpbmcgdGhlIGNvbW1vbiBhbmNlc3RvciBpcyBzdHJhaWdodGZvcndhcmQuICAqLworKyAgd2hpbGUgKGNsMS0+ZGVwdGggPiBjbDItPmRlcHRoKQorKyAgICBjbDEgPSBjbDEtPnBhcmVudDsKKysgIHdoaWxlIChjbDItPmRlcHRoID4gY2wxLT5kZXB0aCkKKysgICAgY2wyID0gY2wyLT5wYXJlbnQ7CisrCisrICAvKiBOb3cgcmVkdWNlIGJvdGggY2x1c3RlcnMgdG8gdGhlaXIgYW5jZXN0b3JzIGF0IHRoZSBwb2ludCB3aGVyZSBib3RoIGhhdmUKKysgICAgIGEgY29tbW9uIHBhcmVudDsgdGhlc2UgY2FuIGJlIGRpcmVjdGx5IGNvbXBhcmVkLiAgKi8KKysgIHdoaWxlIChjbDEtPnBhcmVudCAhPSBjbDItPnBhcmVudCkKKysgICAgY2wxID0gY2wxLT5wYXJlbnQsIGNsMiA9IGNsMi0+cGFyZW50OworKworKyAgcmV0dXJuIGdyb3VwX2NtcCAoY2wxLT5ncm91cCwgY2wyLT5ncm91cCwgY2wyLT5pbmRleCAtIGNsMS0+aW5kZXgpOworK30KKysKKysvKiBSZXR1cm4gdGhlIGFuY2VzdG9yIG9mIENMIHRoYXQncyBqdXN0IGJlbG93IHRoZSByb290IChpLmUuLCBoYXMgYSBwYXJlbnQKKysgICBvZiAwKS4gICovCisrc3RhdGljIHN0cnVjdCBob2xfY2x1c3RlciAqCisraG9sX2NsdXN0ZXJfYmFzZSAoc3RydWN0IGhvbF9jbHVzdGVyICpjbCkKKyt7CisrICB3aGlsZSAoY2wtPnBhcmVudCkKKysgICAgY2wgPSBjbC0+cGFyZW50OworKyAgcmV0dXJuIGNsOworK30KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBDTDEgaXMgYSBjaGlsZCBvZiBDTDIuICAqLworK3N0YXRpYyBpbnQKKytob2xfY2x1c3Rlcl9pc19jaGlsZCAoY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDEsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDIpCisreworKyAgd2hpbGUgKGNsMSAmJiBjbDEgIT0gY2wyKQorKyAgICBjbDEgPSBjbDEtPnBhcmVudDsKKysgIHJldHVybiBjbDEgPT0gY2wyOworK30KKysKKysvKiBHaXZlbiB0aGUgbmFtZSBvZiBhIE9QVElPTl9ET0Mgb3B0aW9uLCBtb2RpZmllcyBOQU1FIHRvIHN0YXJ0IGF0IHRoZSB0YWlsCisrICAgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgY29tcGFyaXNvbnMsIGFuZCByZXR1cm5zIHRydWUgaWZmIGl0IHNob3VsZCBiZQorKyAgIHRyZWF0ZWQgYXMgYSBub24tb3B0aW9uLiAgKi8KKytzdGF0aWMgaW50CisrY2Fub25fZG9jX29wdGlvbiAoY29uc3QgY2hhciAqKm5hbWUpCisreworKyAgaW50IG5vbl9vcHQ7CisrICAvKiBTa2lwIGluaXRpYWwgd2hpdGVzcGFjZS4gICovCisrICB3aGlsZSAoaXNzcGFjZSAoKipuYW1lKSkKKysgICAgKCpuYW1lKSsrOworKyAgLyogRGVjaWRlIHdoZXRoZXIgdGhpcyBsb29rcyBsaWtlIGFuIG9wdGlvbiAobGVhZGluZyBgLScpIG9yIG5vdC4gICovCisrICBub25fb3B0ID0gKCoqbmFtZSAhPSAnLScpOworKyAgLyogU2tpcCB1bnRpbCBwYXJ0IG9mIG5hbWUgdXNlZCBmb3Igc29ydGluZy4gICovCisrICB3aGlsZSAoKipuYW1lICYmICFpc2FsbnVtICgqKm5hbWUpKQorKyAgICAoKm5hbWUpKys7CisrICByZXR1cm4gbm9uX29wdDsKKyt9CisrCisrLyogT3JkZXIgRU5UUlkxICYgRU5UUlkyIGJ5IHRoZSBvcmRlciB3aGljaCB0aGV5IHNob3VsZCBhcHBlYXIgaW4gYSBoZWxwCisrICAgbGlzdGluZy4gICovCisrc3RhdGljIGludAorK2hvbF9lbnRyeV9jbXAgKGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5MSwKKysgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5MikKKyt7CisrICAvKiBUaGUgZ3JvdXAgbnVtYmVycyBieSB3aGljaCB0aGUgZW50cmllcyBzaG91bGQgYmUgb3JkZXJlZDsgaWYgZWl0aGVyIGlzCisrICAgICBpbiBhIGNsdXN0ZXIsIHRoZW4gdGhpcyBpcyBqdXN0IHRoZSBncm91cCB3aXRoaW4gdGhlIGNsdXN0ZXIuICAqLworKyAgaW50IGdyb3VwMSA9IGVudHJ5MS0+Z3JvdXAsIGdyb3VwMiA9IGVudHJ5Mi0+Z3JvdXA7CisrCisrICBpZiAoZW50cnkxLT5jbHVzdGVyICE9IGVudHJ5Mi0+Y2x1c3RlcikKKysgICAgeworKyAgICAgIC8qIFRoZSBlbnRyaWVzIGFyZSBub3Qgd2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIsIHNvIHdlIGNhbid0IGNvbXBhcmUgdGhlbQorKyAgICAgICAgZGlyZWN0bHksIHdlIGhhdmUgdG8gdXNlIHRoZSBhcHByb3BpYXRlIGNsdXN0ZXJpbmcgbGV2ZWwgdG9vLiAgKi8KKysgICAgICBpZiAoISBlbnRyeTEtPmNsdXN0ZXIpCisrICAgICAgIC8qIEVOVFJZMSBpcyBhdCB0aGUgYGJhc2UgbGV2ZWwnLCBub3QgaW4gYSBjbHVzdGVyLCBzbyB3ZSBoYXZlIHRvCisrICAgICAgICAgIGNvbXBhcmUgaXQncyBncm91cCBudW1iZXIgd2l0aCB0aGF0IG9mIHRoZSBiYXNlIGNsdXN0ZXIgaW4gd2hpY2gKKysgICAgICAgICAgRU5UUlkyIHJlc2lkZXMuICBOb3RlIHRoYXQgaWYgdGhleSdyZSBpbiB0aGUgc2FtZSBncm91cCwgdGhlCisrICAgICAgICAgIGNsdXN0ZXJlZCBvcHRpb24gYWx3YXlzIGNvbWVzIGxhc3Rlci4gICovCisrICAgICAgIHJldHVybiBncm91cF9jbXAgKGdyb3VwMSwgaG9sX2NsdXN0ZXJfYmFzZSAoZW50cnkyLT5jbHVzdGVyKS0+Z3JvdXAsIC0xKTsKKysgICAgICBlbHNlIGlmICghIGVudHJ5Mi0+Y2x1c3RlcikKKysgICAgICAgLyogTGlrZXdpc2UsIGJ1dCBFTlRSWTIncyBub3QgaW4gYSBjbHVzdGVyLiAgKi8KKysgICAgICAgcmV0dXJuIGdyb3VwX2NtcCAoaG9sX2NsdXN0ZXJfYmFzZSAoZW50cnkxLT5jbHVzdGVyKS0+Z3JvdXAsIGdyb3VwMiwgMSk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBCb3RoIGVudHJpZXMgYXJlIGluIGNsdXN0ZXJzLCB3ZSBjYW4ganVzdCBjb21wYXJlIHRoZSBjbHVzdGVycy4gICovCisrICAgICAgIHJldHVybiBob2xfY2x1c3Rlcl9jbXAgKGVudHJ5MS0+Y2x1c3RlciwgZW50cnkyLT5jbHVzdGVyKTsKKysgICAgfQorKyAgZWxzZSBpZiAoZ3JvdXAxID09IGdyb3VwMikKKysgICAgLyogVGhlIGVudHJpZXMgYXJlIGJvdGggaW4gdGhlIHNhbWUgY2x1c3RlciBhbmQgZ3JvdXAsIHNvIGNvbXBhcmUgdGhlbQorKyAgICAgICBhbHBoYWJldGljYWxseS4gICovCisrICAgIHsKKysgICAgICBpbnQgc2hvcnQxID0gaG9sX2VudHJ5X2ZpcnN0X3Nob3J0IChlbnRyeTEpOworKyAgICAgIGludCBzaG9ydDIgPSBob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGVudHJ5Mik7CisrICAgICAgaW50IGRvYzEgPSBvZG9jIChlbnRyeTEtPm9wdCk7CisrICAgICAgaW50IGRvYzIgPSBvZG9jIChlbnRyeTItPm9wdCk7CisrICAgICAgY29uc3QgY2hhciAqbG9uZzEgPSBob2xfZW50cnlfZmlyc3RfbG9uZyAoZW50cnkxKTsKKysgICAgICBjb25zdCBjaGFyICpsb25nMiA9IGhvbF9lbnRyeV9maXJzdF9sb25nIChlbnRyeTIpOworKworKyAgICAgIGlmIChkb2MxKQorKyAgICAgICBkb2MxID0gbG9uZzEgIT0gTlVMTCAmJiBjYW5vbl9kb2Nfb3B0aW9uICgmbG9uZzEpOworKyAgICAgIGlmIChkb2MyKQorKyAgICAgICBkb2MyID0gbG9uZzIgIT0gTlVMTCAmJiBjYW5vbl9kb2Nfb3B0aW9uICgmbG9uZzIpOworKworKyAgICAgIGlmIChkb2MxICE9IGRvYzIpCisrICAgICAgIC8qIGBkb2N1bWVudGF0aW9uJyBvcHRpb25zIGFsd2F5cyBmb2xsb3cgbm9ybWFsIG9wdGlvbnMgKG9yCisrICAgICAgICAgIGRvY3VtZW50YXRpb24gb3B0aW9ucyB0aGF0ICpsb29rKiBsaWtlIG5vcm1hbCBvcHRpb25zKS4gICovCisrICAgICAgIHJldHVybiBkb2MxIC0gZG9jMjsKKysgICAgICBlbHNlIGlmICghc2hvcnQxICYmICFzaG9ydDIgJiYgbG9uZzEgJiYgbG9uZzIpCisrICAgICAgIC8qIE9ubHkgbG9uZyBvcHRpb25zLiAgKi8KKysgICAgICAgcmV0dXJuIHN0cmNhc2VjbXAgKGxvbmcxLCBsb25nMik7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBDb21wYXJlIHNob3J0L3Nob3J0LCBsb25nL3Nob3J0LCBzaG9ydC9sb25nLCB1c2luZyB0aGUgZmlyc3QKKysgICAgICAgICAgY2hhcmFjdGVyIG9mIGxvbmcgb3B0aW9ucy4gIEVudHJpZXMgd2l0aG91dCAqYW55KiB2YWxpZAorKyAgICAgICAgICBvcHRpb25zIChzdWNoIGFzIG9wdGlvbnMgd2l0aCBPUFRJT05fSElEREVOIHNldCkgd2lsbCBiZSBwdXQKKysgICAgICAgICAgZmlyc3QsIGJ1dCBhcyB0aGV5J3JlIG5vdCBkaXNwbGF5ZWQsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlCisrICAgICAgICAgIHRoZXkgYXJlLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIGNoYXIgZmlyc3QxID0gc2hvcnQxID8gc2hvcnQxIDogbG9uZzEgPyAqbG9uZzEgOiAwOworKyAgICAgICAgIGNoYXIgZmlyc3QyID0gc2hvcnQyID8gc2hvcnQyIDogbG9uZzIgPyAqbG9uZzIgOiAwOworKyNpZmRlZiBfdG9sb3dlcgorKyAgICAgICAgIGludCBsb3dlcl9jbXAgPSBfdG9sb3dlciAoZmlyc3QxKSAtIF90b2xvd2VyIChmaXJzdDIpOworKyNlbHNlCisrICAgICAgICAgaW50IGxvd2VyX2NtcCA9IHRvbG93ZXIgKGZpcnN0MSkgLSB0b2xvd2VyIChmaXJzdDIpOworKyNlbmRpZgorKyAgICAgICAgIC8qIENvbXBhcmUgaWdub3JpbmcgY2FzZSwgZXhjZXB0IHdoZW4gdGhlIG9wdGlvbnMgYXJlIGJvdGggdGhlCisrICAgICAgICAgICAgc2FtZSBsZXR0ZXIsIGluIHdoaWNoIGNhc2UgbG93ZXItY2FzZSBhbHdheXMgY29tZXMgZmlyc3QuICAqLworKyAgICAgICAgIHJldHVybiBsb3dlcl9jbXAgPyBsb3dlcl9jbXAgOiBmaXJzdDIgLSBmaXJzdDE7CisrICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBXaXRoaW4gdGhlIHNhbWUgY2x1c3RlciwgYnV0IG5vdCB0aGUgc2FtZSBncm91cCwgc28ganVzdCBjb21wYXJlCisrICAgICAgIGdyb3Vwcy4gICovCisrICAgIHJldHVybiBncm91cF9jbXAgKGdyb3VwMSwgZ3JvdXAyLCAwKTsKKyt9CisrCisrLyogVmVyc2lvbiBvZiBob2xfZW50cnlfY21wIHdpdGggY29ycmVjdCBzaWduYXR1cmUgZm9yIHFzb3J0LiAgKi8KKytzdGF0aWMgaW50CisraG9sX2VudHJ5X3FjbXAgKGNvbnN0IHZvaWQgKmVudHJ5MV92LCBjb25zdCB2b2lkICplbnRyeTJfdikKKyt7CisrICByZXR1cm4gaG9sX2VudHJ5X2NtcCAoZW50cnkxX3YsIGVudHJ5Ml92KTsKKyt9CisrCisrLyogU29ydCBIT0wgYnkgZ3JvdXAgYW5kIGFscGhhYmV0aWNhbGx5IGJ5IG9wdGlvbiBuYW1lICh3aXRoIHNob3J0IG9wdGlvbnMKKysgICB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIGxvbmcpLiAgU2luY2UgdGhlIHNvcnRpbmcgaXMgZm9yIGRpc3BsYXkgcHVycG9zZXMKKysgICBvbmx5LCB0aGUgc2hhZG93aW5nIG9mIG9wdGlvbnMgaXNuJ3QgZWZmZWN0ZWQuICAqLworK3N0YXRpYyB2b2lkCisraG9sX3NvcnQgKHN0cnVjdCBob2wgKmhvbCkKKyt7CisrICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgIHFzb3J0IChob2wtPmVudHJpZXMsIGhvbC0+bnVtX2VudHJpZXMsIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSksCisrICAgICAgICAgIGhvbF9lbnRyeV9xY21wKTsKKyt9CisrCisrLyogQXBwZW5kIE1PUkUgdG8gSE9MLCBkZXN0cm95aW5nIE1PUkUgaW4gdGhlIHByb2Nlc3MuICBPcHRpb25zIGluIEhPTCBzaGFkb3cKKysgICBhbnkgaW4gTU9SRSB3aXRoIHRoZSBzYW1lIG5hbWUuICAqLworK3N0YXRpYyB2b2lkCisraG9sX2FwcGVuZCAoc3RydWN0IGhvbCAqaG9sLCBzdHJ1Y3QgaG9sICptb3JlKQorK3sKKysgIHN0cnVjdCBob2xfY2x1c3RlciAqKmNsX2VuZCA9ICZob2wtPmNsdXN0ZXJzOworKworKyAgLyogU3RlYWwgTU9SRSdzIGNsdXN0ZXIgbGlzdCwgYW5kIGFkZCBpdCB0byB0aGUgZW5kIG9mIEhPTCdzLiAgKi8KKysgIHdoaWxlICgqY2xfZW5kKQorKyAgICBjbF9lbmQgPSAmKCpjbF9lbmQpLT5uZXh0OworKyAgKmNsX2VuZCA9IG1vcmUtPmNsdXN0ZXJzOworKyAgbW9yZS0+Y2x1c3RlcnMgPSAwOworKworKyAgLyogTWVyZ2UgZW50cmllcy4gICovCisrICBpZiAobW9yZS0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPT0gMCkKKysgICAgICAgeworKyAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgPSBtb3JlLT5udW1fZW50cmllczsKKysgICAgICAgICBob2wtPmVudHJpZXMgPSBtb3JlLT5lbnRyaWVzOworKyAgICAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IG1vcmUtPnNob3J0X29wdGlvbnM7CisrICAgICAgICAgbW9yZS0+bnVtX2VudHJpZXMgPSAwOyAgICAgICAgLyogTWFyayBNT1JFJ3MgZmllbGRzIGFzIGludmFsaWQuICAqLworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAvKiBBcHBlbmQgdGhlIGVudHJpZXMgaW4gTU9SRSB0byB0aG9zZSBpbiBIT0wsIHRha2luZyBjYXJlIHRvIG9ubHkgYWRkCisrICAgICAgICAgIG5vbi1zaGFkb3dlZCBTSE9SVF9PUFRJT05TIHZhbHVlcy4gICovCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBsZWZ0OworKyAgICAgICAgIGNoYXIgKnNvLCAqbW9yZV9zbzsKKysgICAgICAgICBzdHJ1Y3QgaG9sX2VudHJ5ICplOworKyAgICAgICAgIHVuc2lnbmVkIG51bV9lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcyArIG1vcmUtPm51bV9lbnRyaWVzOworKyAgICAgICAgIHN0cnVjdCBob2xfZW50cnkgKmVudHJpZXMgPQorKyAgICAgICAgICAgbWFsbG9jIChudW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKyAgICAgICAgIHVuc2lnbmVkIGhvbF9zb19sZW4gPSBzdHJsZW4gKGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrICAgICAgICAgY2hhciAqc2hvcnRfb3B0aW9ucyA9CisrICAgICAgICAgICBtYWxsb2MgKGhvbF9zb19sZW4gKyBzdHJsZW4gKG1vcmUtPnNob3J0X29wdGlvbnMpICsgMSk7CisrCisrICAgICAgICAgYXNzZXJ0IChlbnRyaWVzICYmIHNob3J0X29wdGlvbnMpOworKyNpZiBTSVpFX01BWCA8PSBVSU5UX01BWAorKyAgICAgICAgIGFzc2VydCAobnVtX2VudHJpZXMgPD0gU0laRV9NQVggLyBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKTsKKysjZW5kaWYKKysKKysgICAgICAgICBtZW1wY3B5IChtZW1wY3B5IChlbnRyaWVzLCBob2wtPmVudHJpZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMgKiBzaXplb2YgKHN0cnVjdCBob2xfZW50cnkpKSwKKysgICAgICAgICAgICAgICAgICAgIG1vcmUtPmVudHJpZXMsCisrICAgICAgICAgICAgICAgICAgICBtb3JlLT5udW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKworKyAgICAgICAgIG1lbXBjcHkgKHNob3J0X29wdGlvbnMsIGhvbC0+c2hvcnRfb3B0aW9ucywgaG9sX3NvX2xlbik7CisrCisrICAgICAgICAgLyogRml4IHVwIHRoZSBzaG9ydCBvcHRpb25zIHBvaW50ZXJzIGZyb20gSE9MLiAgKi8KKysgICAgICAgICBmb3IgKGUgPSBlbnRyaWVzLCBsZWZ0ID0gaG9sLT5udW1fZW50cmllczsgbGVmdCA+IDA7IGUrKywgbGVmdC0tKQorKyAgICAgICAgICAgZS0+c2hvcnRfb3B0aW9ucyArPSAoc2hvcnRfb3B0aW9ucyAtIGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrCisrICAgICAgICAgLyogTm93IGFkZCB0aGUgc2hvcnQgb3B0aW9ucyBmcm9tIE1PUkUsIGZpeGluZyB1cCBpdHMgZW50cmllcworKyAgICAgICAgICAgIHRvby4gICovCisrICAgICAgICAgc28gPSBzaG9ydF9vcHRpb25zICsgaG9sX3NvX2xlbjsKKysgICAgICAgICBtb3JlX3NvID0gbW9yZS0+c2hvcnRfb3B0aW9uczsKKysgICAgICAgICBmb3IgKGxlZnQgPSBtb3JlLT5udW1fZW50cmllczsgbGVmdCA+IDA7IGUrKywgbGVmdC0tKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBpbnQgb3B0c19sZWZ0OworKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdDsKKysKKysgICAgICAgICAgICAgZS0+c2hvcnRfb3B0aW9ucyA9IHNvOworKworKyAgICAgICAgICAgICBmb3IgKG9wdHNfbGVmdCA9IGUtPm51bSwgb3B0ID0gZS0+b3B0OyBvcHRzX2xlZnQ7IG9wdCsrLCBvcHRzX2xlZnQtLSkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICBpbnQgY2ggPSAqbW9yZV9zbzsKKysgICAgICAgICAgICAgICAgIGlmIChvc2hvcnQgKG9wdCkgJiYgY2ggPT0gb3B0LT5rZXkpCisrICAgICAgICAgICAgICAgICAgIC8qIFRoZSBuZXh0IHNob3J0IG9wdGlvbiBpbiBNT1JFX1NPLCBDSCwgaXMgZnJvbSBPUFQuICAqLworKyAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgaWYgKCEgZmluZF9jaGFyIChjaCwgc2hvcnRfb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X29wdGlvbnMgKyBob2xfc29fbGVuKSkKKysgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzaG9ydCBvcHRpb24gQ0ggaXNuJ3Qgc2hhZG93ZWQgYnkgSE9MJ3Mgb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIGFkZCBpdCB0byB0aGUgc3VtLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICpzbysrID0gY2g7CisrICAgICAgICAgICAgICAgICAgICAgbW9yZV9zbysrOworKyAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKworKyAgICAgICAgICpzbyA9ICdcMCc7CisrCisrICAgICAgICAgZnJlZSAoaG9sLT5lbnRyaWVzKTsKKysgICAgICAgICBmcmVlIChob2wtPnNob3J0X29wdGlvbnMpOworKworKyAgICAgICAgIGhvbC0+ZW50cmllcyA9IGVudHJpZXM7CisrICAgICAgICAgaG9sLT5udW1fZW50cmllcyA9IG51bV9lbnRyaWVzOworKyAgICAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IHNob3J0X29wdGlvbnM7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaG9sX2ZyZWUgKG1vcmUpOworK30KKysKKysvKiBJbnNlcnRzIGVub3VnaCBzcGFjZXMgdG8gbWFrZSBzdXJlIFNUUkVBTSBpcyBhdCBjb2x1bW4gQ09MLiAgKi8KKytzdGF0aWMgdm9pZAorK2luZGVudF90byAoYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHVuc2lnbmVkIGNvbCkKKyt7CisrICBpbnQgbmVlZGVkID0gY29sIC0gX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKTsKKysgIHdoaWxlIChuZWVkZWQtLSA+IDApCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnICcpOworK30KKysKKysvKiBPdXRwdXQgdG8gU1RSRUFNIGVpdGhlciBhIHNwYWNlLCBvciBhIG5ld2xpbmUgaWYgdGhlcmUgaXNuJ3Qgcm9vbSBmb3IgYXQKKysgICBsZWFzdCBFTlNVUkUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIHJpZ2h0IG1hcmdpbi4gICovCisrc3RhdGljIHZvaWQKKytzcGFjZSAoYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0sIHNpemVfdCBlbnN1cmUpCisreworKyAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkgKyBlbnN1cmUKKysgICAgICA+PSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gKHN0cmVhbSkpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgIGVsc2UKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICcgJyk7CisrfQorKworKy8qIElmIHRoZSBvcHRpb24gUkVBTCBoYXMgYW4gYXJndW1lbnQsIHdlIHByaW50IGl0IGluIHVzaW5nIHRoZSBwcmludGYKKysgICBmb3JtYXQgUkVRX0ZNVCBvciBPUFRfRk1UIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0J3MgYSByZXF1aXJlZCBvcgorKyAgIG9wdGlvbmFsIGFyZ3VtZW50LiAgKi8KKytzdGF0aWMgdm9pZAorK2FyZyAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLCBjb25zdCBjaGFyICpyZXFfZm10LCBjb25zdCBjaGFyICpvcHRfZm10LAorKyAgICAgY29uc3QgY2hhciAqZG9tYWluLCBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBpZiAocmVhbC0+YXJnKQorKyAgICB7CisrICAgICAgaWYgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgb3B0X2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChkb21haW4sIHJlYWwtPmFyZykpOworKyAgICAgIGVsc2UKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgcmVxX2ZtdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChkb21haW4sIHJlYWwtPmFyZykpOworKyAgICB9CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhvbF9lbnRyeV9oZWxwLiAgKi8KKysKKysvKiBTdGF0ZSB1c2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGhvbF9oZWxwLiAgKi8KKytzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUKKyt7CisrICAvKiBQUkVWX0VOVFJZIHNob3VsZCBjb250YWluIHRoZSBwcmV2aW91cyBlbnRyeSBwcmludGVkLCBvciAwLiAgKi8KKysgIHN0cnVjdCBob2xfZW50cnkgKnByZXZfZW50cnk7CisrCisrICAvKiBJZiBhbiBlbnRyeSBpcyBpbiBhIGRpZmZlcmVudCBncm91cCBmcm9tIHRoZSBwcmV2aW91cyBvbmUsIGFuZCBTRVBfR1JPVVBTCisrICAgICBpcyB0cnVlLCB0aGVuIGEgYmxhbmsgbGluZSB3aWxsIGJlIHByaW50ZWQgYmVmb3JlIGFueSBvdXRwdXQuICovCisrICBpbnQgc2VwX2dyb3VwczsKKysKKysgIC8qIFRydWUgaWYgYSBkdXBsaWNhdGUgb3B0aW9uIGFyZ3VtZW50IHdhcyBzdXBwcmVzc2VkIChvbmx5IGV2ZXIgc2V0IGlmCisrICAgICBVUEFSQU1TLmR1cF9hcmdzIGlzIGZhbHNlKS4gICovCisrICBpbnQgc3VwcHJlc3NlZF9kdXBfYXJnOworK307CisrCisrLyogU29tZSBzdGF0ZSB1c2VkIHdoaWxlIHByaW50aW5nIGEgaGVscCBlbnRyeSAodXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoCisrICAgaGVscGVyIGZ1bmN0aW9ucykuICBTZWUgdGhlIGRvYyBmb3IgaG9sX2VudHJ5X2hlbHAgZm9yIG1vcmUgaW5mbywgYXMgbW9zdAorKyAgIG9mIHRoZSBmaWVsZHMgYXJlIGNvcGllZCBmcm9tIGl0cyBhcmd1bWVudHMuICAqLworK3N0cnVjdCBwZW50cnlfc3RhdGUKKyt7CisrICBjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtOworKyAgc3RydWN0IGhvbF9oZWxwX3N0YXRlICpoaHN0YXRlOworKworKyAgLyogVHJ1ZSBpZiBub3RoaW5nJ3MgYmVlbiBwcmludGVkIHNvIGZhci4gICovCisrICBpbnQgZmlyc3Q7CisrCisrICAvKiBJZiBub24temVybywgdGhlIHN0YXRlIHRoYXQgd2FzIHVzZWQgdG8gcHJpbnQgdGhpcyBoZWxwLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZTsKKyt9OworKworKy8qIElmIGEgdXNlciBkb2MgZmlsdGVyIHNob3VsZCBiZSBhcHBsaWVkIHRvIERPQywgZG8gc28uICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytmaWx0ZXJfZG9jIChjb25zdCBjaGFyICpkb2MsIGludCBrZXksIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIGlmIChhcmdwICYmIGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICAvKiBXZSBtdXN0IGFwcGx5IGEgdXNlciBmaWx0ZXIgdG8gdGhpcyBvdXRwdXQuICAqLworKyAgICB7CisrICAgICAgdm9pZCAqaW5wdXQgPSBfX2FyZ3BfaW5wdXQgKGFyZ3AsIHN0YXRlKTsKKysgICAgICByZXR1cm4gKCphcmdwLT5oZWxwX2ZpbHRlcikgKGtleSwgZG9jLCBpbnB1dCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogTm8gZmlsdGVyLiAgKi8KKysgICAgcmV0dXJuIGRvYzsKKyt9CisrCisrLyogUHJpbnRzIFNUUiBhcyBhIGhlYWRlciBsaW5lLCB3aXRoIHRoZSBtYXJnaW4gbGluZXMgc2V0IGFwcHJvcGlhdGVseSwgYW5kCisrICAgbm90ZXMgdGhlIGZhY3QgdGhhdCBncm91cHMgc2hvdWxkIGJlIHNlcGFyYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4gIEFSR1AgaXMKKysgICB0aGUgYXJncCB0aGF0IHNob3VsZCBkaWN0YXRlIGFueSB1c2VyIGRvYyBmaWx0ZXJpbmcgdG8gdGFrZSBwbGFjZS4gIE5vdGUKKysgICB0aGF0IHRoZSBwcmV2aW91cyB3cmFwIG1hcmdpbiBpc24ndCByZXN0b3JlZCwgYnV0IHRoZSBsZWZ0IG1hcmdpbiBpcyByZXNldAorKyAgIHRvIDAuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfaGVhZGVyIChjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgICBzdHJ1Y3QgcGVudHJ5X3N0YXRlICpwZXN0KQorK3sKKysgIGNvbnN0IGNoYXIgKnRzdHIgPSBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sIHN0cik7CisrICBjb25zdCBjaGFyICpmc3RyID0gZmlsdGVyX2RvYyAodHN0ciwgQVJHUF9LRVlfSEVMUF9IRUFERVIsIGFyZ3AsIHBlc3QtPnN0YXRlKTsKKysKKysgIGlmIChmc3RyKQorKyAgICB7CisrICAgICAgaWYgKCpmc3RyKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKHBlc3QtPmhoc3RhdGUtPnByZXZfZW50cnkpCisrICAgICAgICAgICAvKiBQcmVjZWRlIHdpdGggYSBibGFuayBsaW5lLiAgKi8KKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBpbmRlbnRfdG8gKHBlc3QtPnN0cmVhbSwgdXBhcmFtcy5oZWFkZXJfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChwZXN0LT5zdHJlYW0sIHVwYXJhbXMuaGVhZGVyX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAocGVzdC0+c3RyZWFtLCB1cGFyYW1zLmhlYWRlcl9jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAocGVzdC0+c3RyZWFtLCBmc3RyKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChwZXN0LT5zdHJlYW0sIDApOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAocGVzdC0+c3RyZWFtLCAnXG4nKTsKKysgICAgICAgfQorKworKyAgICAgIHBlc3QtPmhoc3RhdGUtPnNlcF9ncm91cHMgPSAxOyAvKiBTZXBhcmF0ZSBzdWJzZXF1ZW50IGdyb3Vwcy4gKi8KKysgICAgfQorKworKyAgaWYgKGZzdHIgIT0gdHN0cikKKysgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrfQorKworKy8qIEluc2VydHMgYSBjb21tYSBpZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsaW5lLCBhbmQgdGhlbiBtYWtlcworKyAgIHN1cmUgd2UncmUgYXQgbGVhc3QgdG8gY29sdW1uIENPTC4gIElmIHRoaXMgKmlzKiB0aGUgZmlyc3QgaXRlbSBvbiBhIGxpbmUsCisrICAgcHJpbnRzIGFueSBwZW5kaW5nIHdoaXRlc3BhY2UvaGVhZGVycyB0aGF0IHNob3VsZCBwcmVjZWRlIHRoaXMgbGluZS4gQWxzbworKyAgIGNsZWFycyBGSVJTVC4gICovCisrc3RhdGljIHZvaWQKKytjb21tYSAodW5zaWduZWQgY29sLCBzdHJ1Y3QgcGVudHJ5X3N0YXRlICpwZXN0KQorK3sKKysgIGlmIChwZXN0LT5maXJzdCkKKysgICAgeworKyAgICAgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKnBlID0gcGVzdC0+aGhzdGF0ZS0+cHJldl9lbnRyeTsKKysgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsID0gcGVzdC0+ZW50cnktPmNsdXN0ZXI7CisrCisrICAgICAgaWYgKHBlc3QtPmhoc3RhdGUtPnNlcF9ncm91cHMgJiYgcGUgJiYgcGVzdC0+ZW50cnktPmdyb3VwICE9IHBlLT5ncm91cCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChwZXN0LT5zdHJlYW0sICdcbicpOworKworKyAgICAgIGlmIChjbCAmJiBjbC0+aGVhZGVyICYmICpjbC0+aGVhZGVyCisrICAgICAgICAgJiYgKCFwZQorKyAgICAgICAgICAgICB8fCAocGUtPmNsdXN0ZXIgIT0gY2wKKysgICAgICAgICAgICAgICAgICYmICFob2xfY2x1c3Rlcl9pc19jaGlsZCAocGUtPmNsdXN0ZXIsIGNsKSkpKQorKyAgICAgICAvKiBJZiB3ZSdyZSBjaGFuZ2luZyBjbHVzdGVycywgdGhlbiB0aGlzIG11c3QgYmUgdGhlIHN0YXJ0IG9mIHRoZQorKyAgICAgICAgICBFTlRSWSdzIGNsdXN0ZXIgdW5sZXNzIHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHByZXZpb3VzIG9uZQorKyAgICAgICAgICAoaW4gd2hpY2ggY2FzZSB3ZSBoYWQganVzdCBwb3BwZWQgaW50byBhIHN1Yi1jbHVzdGVyIGZvciBhIGJpdCkuCisrICAgICAgICAgIElmIHNvLCB0aGVuIHByaW50IHRoZSBjbHVzdGVyJ3MgaGVhZGVyIGxpbmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiAocGVzdC0+c3RyZWFtKTsKKysgICAgICAgICBwcmludF9oZWFkZXIgKGNsLT5oZWFkZXIsIGNsLT5hcmdwLCBwZXN0KTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChwZXN0LT5zdHJlYW0sIG9sZF93bSk7CisrICAgICAgIH0KKysKKysgICAgICBwZXN0LT5maXJzdCA9IDA7CisrICAgIH0KKysgIGVsc2UKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChwZXN0LT5zdHJlYW0sICIsICIpOworKworKyAgaW5kZW50X3RvIChwZXN0LT5zdHJlYW0sIGNvbCk7CisrfQorKworKy8qIFByaW50IGhlbHAgZm9yIEVOVFJZIHRvIFNUUkVBTS4gICovCisrc3RhdGljIHZvaWQKKytob2xfZW50cnlfaGVscCAoc3RydWN0IGhvbF9lbnRyeSAqZW50cnksIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSwgc3RydWN0IGhvbF9oZWxwX3N0YXRlICpoaHN0YXRlKQorK3sKKysgIHVuc2lnbmVkIG51bTsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCA9IGVudHJ5LT5vcHQsICpvcHQ7CisrICBjaGFyICpzbyA9IGVudHJ5LT5zaG9ydF9vcHRpb25zOworKyAgaW50IGhhdmVfbG9uZ19vcHQgPSAwOyAgICAgICAvKiBXZSBoYXZlIGFueSBsb25nIG9wdGlvbnMuICAqLworKyAgLyogU2F2ZWQgbWFyZ2lucy4gICovCisrICBpbnQgb2xkX2xtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysgIGludCBvbGRfd20gPSBfX2FyZ3BfZm10c3RyZWFtX3dtYXJnaW4gKHN0cmVhbSk7CisrICAvKiBQRVNUIGlzIGEgc3RhdGUgYmxvY2sgaG9sZGluZyBzb21lIG9mIG91ciB2YXJpYWJsZXMgdGhhdCB3ZSdkIGxpa2UgdG8KKysgICAgIHNoYXJlIHdpdGggaGVscGVyIGZ1bmN0aW9ucy4gICovCisrICBzdHJ1Y3QgcGVudHJ5X3N0YXRlIHBlc3QgPSB7IGVudHJ5LCBzdHJlYW0sIGhoc3RhdGUsIDEsIHN0YXRlIH07CisrCisrICBpZiAoISBvZG9jIChyZWFsKSkKKysgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICAgeworKyAgICAgICAgIGhhdmVfbG9uZ19vcHQgPSAxOworKyAgICAgICAgIGJyZWFrOworKyAgICAgICB9CisrCisrICAvKiBGaXJzdCBlbWl0IHNob3J0IG9wdGlvbnMuICAqLworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLnNob3J0X29wdF9jb2wpOyAvKiBGb3IgdHJ1bHkgYml6YXJyZSBjYXNlcy4gKi8KKysgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICBpZiAob3Nob3J0IChvcHQpICYmIG9wdC0+a2V5ID09ICpzbykKKysgICAgICAvKiBPUFQgaGFzIGEgdmFsaWQgKG5vbiBzaGFkb3dlZCkgc2hvcnQgb3B0aW9uLiAgKi8KKysgICAgICB7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB7CisrICAgICAgICAgICBjb21tYSAodXBhcmFtcy5zaG9ydF9vcHRfY29sLCAmcGVzdCk7CisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJy0nKTsKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAqc28pOworKyAgICAgICAgICAgaWYgKCFoYXZlX2xvbmdfb3B0IHx8IHVwYXJhbXMuZHVwX2FyZ3MpCisrICAgICAgICAgICAgIGFyZyAocmVhbCwgIiAlcyIsICJbJXNdIiwKKysgICAgICAgICAgICAgICAgICBzdGF0ZSA9PSBOVUxMID8gTlVMTCA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrICAgICAgICAgICBlbHNlIGlmIChyZWFsLT5hcmcpCisrICAgICAgICAgICAgIGhoc3RhdGUtPnN1cHByZXNzZWRfZHVwX2FyZyA9IDE7CisrICAgICAgICAgfQorKyAgICAgICBzbysrOworKyAgICAgIH0KKysKKysgIC8qIE5vdywgbG9uZyBvcHRpb25zLiAgKi8KKysgIGlmIChvZG9jIChyZWFsKSkKKysgICAgLyogQSBgZG9jdW1lbnRhdGlvbicgb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5kb2Nfb3B0X2NvbCk7CisrICAgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgeworKyAgICAgICAgICAgY29tbWEgKHVwYXJhbXMuZG9jX29wdF9jb2wsICZwZXN0KTsKKysgICAgICAgICAgIC8qIENhbGxpbmcgZ2V0dGV4dCBoZXJlIGlzbid0IHF1aXRlIHJpZ2h0LCBzaW5jZSBzb3J0aW5nIHdpbGwKKysgICAgICAgICAgICAgIGhhdmUgYmVlbiBkb25lIG9uIHRoZSBvcmlnaW5hbDsgYnV0IGRvY3VtZW50YXRpb24gb3B0aW9ucworKyAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXR0eSByYXJlIGFueXdheS4uLiAgKi8KKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQtPm5hbWUpKTsKKysgICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogQSByZWFsIGxvbmcgb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5sb25nX29wdF9jb2wpOworKyAgICAgIGZvciAob3B0ID0gcmVhbCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGNvbW1hICh1cGFyYW1zLmxvbmdfb3B0X2NvbCwgJnBlc3QpOworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIi0tJXMiLCBvcHQtPm5hbWUpOworKyAgICAgICAgICAgYXJnIChyZWFsLCAiPSVzIiwgIls9JXNdIiwKKysgICAgICAgICAgICAgICAgc3RhdGUgPT0gTlVMTCA/IE5VTEwgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysgICAgICAgICB9CisrICAgIH0KKysKKysgIC8qIE5leHQsIGRvY3VtZW50YXRpb24gc3RyaW5ncy4gICovCisrICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIDApOworKworKyAgaWYgKHBlc3QuZmlyc3QpCisrICAgIHsKKysgICAgICAvKiBEaWRuJ3QgcHJpbnQgYW55IHN3aXRjaGVzLCB3aGF0J3MgdXA/ICAqLworKyAgICAgIGlmICghb3Nob3J0IChyZWFsKSAmJiAhcmVhbC0+bmFtZSkKKysgICAgICAgLyogVGhpcyBpcyBhIGdyb3VwIGhlYWRlciwgcHJpbnQgaXQgbmljZWx5LiAgKi8KKysgICAgICAgcHJpbnRfaGVhZGVyIChyZWFsLT5kb2MsIGVudHJ5LT5hcmdwLCAmcGVzdCk7CisrICAgICAgZWxzZQorKyAgICAgICAvKiBKdXN0IGEgdG90YWxseSBzaGFkb3dlZCBvcHRpb24gb3IgbnVsbCBoZWFkZXI7IHByaW50IG5vdGhpbmcuICAqLworKyAgICAgICBnb3RvIGNsZWFudXA7ICAgICAgICAgICAvKiBKdXN0IHJldHVybiwgYWZ0ZXIgY2xlYW5pbmcgdXAuICAqLworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICp0c3RyID0gcmVhbC0+ZG9jID8gZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWwtPmRvYykgOiAwOworKyAgICAgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWx0ZXJfZG9jICh0c3RyLCByZWFsLT5rZXksIGVudHJ5LT5hcmdwLCBzdGF0ZSk7CisrICAgICAgaWYgKGZzdHIgJiYgKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICB1bnNpZ25lZCBpbnQgY29sID0gX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIHVwYXJhbXMub3B0X2RvY19jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5vcHRfZG9jX2NvbCk7CisrCisrICAgICAgICAgaWYgKGNvbCA+ICh1bnNpZ25lZCBpbnQpICh1cGFyYW1zLm9wdF9kb2NfY29sICsgMykpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgZWxzZSBpZiAoY29sID49ICh1bnNpZ25lZCBpbnQpIHVwYXJhbXMub3B0X2RvY19jb2wpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgIiAgICIpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIGluZGVudF90byAoc3RyZWFtLCB1cGFyYW1zLm9wdF9kb2NfY29sKTsKKysKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgZnN0cik7CisrICAgICAgIH0KKysgICAgICBpZiAoZnN0ciAmJiBmc3RyICE9IHRzdHIpCisrICAgICAgIGZyZWUgKChjaGFyICopIGZzdHIpOworKworKyAgICAgIC8qIFJlc2V0IHRoZSBsZWZ0IG1hcmdpbi4gICovCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCAwKTsKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgIH0KKysKKysgIGhoc3RhdGUtPnByZXZfZW50cnkgPSBlbnRyeTsKKysKKytjbGVhbnVwOgorKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoc3RyZWFtLCBvbGRfbG0pOworKyAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCBvbGRfd20pOworK30KKysKKysvKiBPdXRwdXQgYSBsb25nIGhlbHAgbWVzc2FnZSBhYm91dCB0aGUgb3B0aW9ucyBpbiBIT0wgdG8gU1RSRUFNLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9oZWxwIChzdHJ1Y3QgaG9sICpob2wsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICB1bnNpZ25lZCBudW07CisrICBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeTsKKysgIHN0cnVjdCBob2xfaGVscF9zdGF0ZSBoaHN0YXRlID0geyAwLCAwLCAwIH07CisrCisrICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBudW0gPSBob2wtPm51bV9lbnRyaWVzOyBudW0gPiAwOyBlbnRyeSsrLCBudW0tLSkKKysgICAgaG9sX2VudHJ5X2hlbHAgKGVudHJ5LCBzdGF0ZSwgc3RyZWFtLCAmaGhzdGF0ZSk7CisrCisrICBpZiAoaGhzdGF0ZS5zdXBwcmVzc2VkX2R1cF9hcmcgJiYgdXBhcmFtcy5kdXBfYXJnc19ub3RlKQorKyAgICB7CisrICAgICAgY29uc3QgY2hhciAqdHN0ciA9IGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLCAiXAorK01hbmRhdG9yeSBvciBvcHRpb25hbCBhcmd1bWVudHMgdG8gbG9uZyBvcHRpb25zIGFyZSBhbHNvIG1hbmRhdG9yeSBvciBcCisrb3B0aW9uYWwgZm9yIGFueSBjb3JyZXNwb25kaW5nIHNob3J0IG9wdGlvbnMuIik7CisrICAgICAgY29uc3QgY2hhciAqZnN0ciA9IGZpbHRlcl9kb2MgKHRzdHIsIEFSR1BfS0VZX0hFTFBfRFVQX0FSR1NfTk9URSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5yb290X2FyZ3AgOiAwLCBzdGF0ZSk7CisrICAgICAgaWYgKGZzdHIgJiYgKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIGZzdHIpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgfQorKyAgICAgIGlmIChmc3RyICYmIGZzdHIgIT0gdHN0cikKKysgICAgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrICAgIH0KKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgaG9sX3VzYWdlLiAgKi8KKysKKysvKiBJZiBPUFQgaXMgYSBzaG9ydCBvcHRpb24gd2l0aG91dCBhbiBhcmcsIGFwcGVuZCBpdHMga2V5IHRvIHRoZSBzdHJpbmcKKysgICBwb2ludGVyIHBvaW50ZXIgdG8gYnkgQ09PS0lFLCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlci4gICovCisrc3RhdGljIGludAorK2FkZF9hcmdsZXNzX3Nob3J0X29wdCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgY2hhciAqKnNuYW9fZW5kID0gY29va2llOworKyAgaWYgKCEob3B0LT5hcmcgfHwgcmVhbC0+YXJnKQorKyAgICAgICYmICEoKG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFncykgJiBPUFRJT05fTk9fVVNBR0UpKQorKyAgICAqKCpzbmFvX2VuZCkrKyA9IG9wdC0+a2V5OworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIElmIE9QVCBpcyBhIHNob3J0IG9wdGlvbiB3aXRoIGFuIGFyZywgb3V0cHV0IGEgdXNhZ2UgZW50cnkgZm9yIGl0IHRvIHRoZQorKyAgIHN0cmVhbSBwb2ludGVkIGF0IGJ5IENPT0tJRS4gICovCisrc3RhdGljIGludAorK3VzYWdlX2FyZ2Z1bF9zaG9ydF9vcHQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0gPSBjb29raWU7CisrICBjb25zdCBjaGFyICphcmcgPSBvcHQtPmFyZzsKKysgIGludCBmbGFncyA9IG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFnczsKKysKKysgIGlmICghIGFyZykKKysgICAgYXJnID0gcmVhbC0+YXJnOworKworKyAgaWYgKGFyZyAmJiAhKGZsYWdzICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgeworKyAgICAgIGFyZyA9IGRnZXR0ZXh0IChkb21haW4sIGFyZyk7CisrCisrICAgICAgaWYgKGZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLSVjWyVzXV0iLCBvcHQtPmtleSwgYXJnKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICAvKiBNYW51YWxseSBkbyBsaW5lIHdyYXBwaW5nIHNvIHRoYXQgaXQgKHByb2JhYmx5KSB3b24ndAorKyAgICAgICAgICAgIGdldCB3cmFwcGVkIGF0IHRoZSBlbWJlZGRlZCBzcGFjZS4gICovCisrICAgICAgICAgc3BhY2UgKHN0cmVhbSwgNiArIHN0cmxlbiAoYXJnKSk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIlstJWMgJXNdIiwgb3B0LT5rZXksIGFyZyk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIGVudHJ5IGZvciB0aGUgbG9uZyBvcHRpb24gb3B0IHRvIHRoZSBzdHJlYW0gcG9pbnRlZCBhdCBieQorKyAgIENPT0tJRS4gICovCisrc3RhdGljIGludAorK3VzYWdlX2xvbmdfb3B0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0gPSBjb29raWU7CisrICBjb25zdCBjaGFyICphcmcgPSBvcHQtPmFyZzsKKysgIGludCBmbGFncyA9IG9wdC0+ZmxhZ3MgfCByZWFsLT5mbGFnczsKKysKKysgIGlmICghIGFyZykKKysgICAgYXJnID0gcmVhbC0+YXJnOworKworKyAgaWYgKCEgKGZsYWdzICYgT1BUSU9OX05PX1VTQUdFKSkKKysgICAgeworKyAgICAgIGlmIChhcmcpCisrICAgICAgIHsKKysgICAgICAgICBhcmcgPSBkZ2V0dGV4dCAoZG9tYWluLCBhcmcpOworKyAgICAgICAgIGlmIChmbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzWz0lc11dIiwgb3B0LT5uYW1lLCBhcmcpOworKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0tJXM9JXNdIiwgb3B0LT5uYW1lLCBhcmcpOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstLSVzXSIsIG9wdC0+bmFtZSk7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKysvKiBQcmludCBhIHNob3J0IHVzYWdlIGRlc2NyaXB0aW9uIGZvciB0aGUgYXJndW1lbnRzIGluIEhPTCB0byBTVFJFQU0uICAqLworK3N0YXRpYyB2b2lkCisraG9sX3VzYWdlIChzdHJ1Y3QgaG9sICpob2wsIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIG5lbnRyaWVzOworKyAgICAgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5OworKyAgICAgIGNoYXIgKnNob3J0X25vX2FyZ19vcHRzID0gYWxsb2NhIChzdHJsZW4gKGhvbC0+c2hvcnRfb3B0aW9ucykgKyAxKTsKKysgICAgICBjaGFyICpzbmFvX2VuZCA9IHNob3J0X25vX2FyZ19vcHRzOworKworKyAgICAgIC8qIEZpcnN0IHdlIHB1dCBhIGxpc3Qgb2Ygc2hvcnQgb3B0aW9ucyB3aXRob3V0IGFyZ3VtZW50cy4gICovCisrICAgICAgZm9yIChlbnRyeSA9IGhvbC0+ZW50cmllcywgbmVudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzCisrICAgICAgICAgIDsgbmVudHJpZXMgPiAwCisrICAgICAgICAgIDsgZW50cnkrKywgbmVudHJpZXMtLSkKKysgICAgICAgaG9sX2VudHJ5X3Nob3J0X2l0ZXJhdGUgKGVudHJ5LCBhZGRfYXJnbGVzc19zaG9ydF9vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sICZzbmFvX2VuZCk7CisrICAgICAgaWYgKHNuYW9fZW5kID4gc2hvcnRfbm9fYXJnX29wdHMpCisrICAgICAgIHsKKysgICAgICAgICAqc25hb19lbmQrKyA9IDA7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLSVzXSIsIHNob3J0X25vX2FyZ19vcHRzKTsKKysgICAgICAgfQorKworKyAgICAgIC8qIE5vdyBhIGxpc3Qgb2Ygc2hvcnQgb3B0aW9ucyAqd2l0aCogYXJndW1lbnRzLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIHVzYWdlX2FyZ2Z1bF9zaG9ydF9vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJncC0+YXJncF9kb21haW4sIHN0cmVhbSk7CisrCisrICAgICAgLyogRmluYWxseSwgYSBsaXN0IG9mIGxvbmcgb3B0aW9ucyAod2hldyEpLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfbG9uZ19pdGVyYXRlIChlbnRyeSwgdXNhZ2VfbG9uZ19vcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysgICAgfQorK30KKysKKysvKiBNYWtlIGEgSE9MIGNvbnRhaW5pbmcgYWxsIGxldmVscyBvZiBvcHRpb25zIGluIEFSR1AuICBDTFVTVEVSIGlzIHRoZQorKyAgIGNsdXN0ZXIgaW4gd2hpY2ggQVJHUCdzIGVudHJpZXMgc2hvdWxkIGJlIGNsdXN0ZXJlZCwgb3IgMC4gICovCisrc3RhdGljIHN0cnVjdCBob2wgKgorK2FyZ3BfaG9sIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyKQorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKyAgc3RydWN0IGhvbCAqaG9sID0gbWFrZV9ob2wgKGFyZ3AsIGNsdXN0ZXIpOworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgeworKyAgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNoaWxkX2NsdXN0ZXIgPQorKyAgICAgICAgICgoY2hpbGQtPmdyb3VwIHx8IGNoaWxkLT5oZWFkZXIpCisrICAgICAgICAgIC8qIFB1dCBDSElMRC0+YXJncCB3aXRoaW4gaXRzIG93biBjbHVzdGVyLiAgKi8KKysgICAgICAgICAgPyBob2xfYWRkX2NsdXN0ZXIgKGhvbCwgY2hpbGQtPmdyb3VwLCBjaGlsZC0+aGVhZGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgLSBhcmdwLT5jaGlsZHJlbiwgY2x1c3RlciwgYXJncCkKKysgICAgICAgICAgLyogSnVzdCBtZXJnZSBpdCBpbnRvIHRoZSBwYXJlbnQncyBjbHVzdGVyLiAgKi8KKysgICAgICAgICAgOiBjbHVzdGVyKTsKKysgICAgICAgaG9sX2FwcGVuZCAoaG9sLCBhcmdwX2hvbCAoY2hpbGQtPmFyZ3AsIGNoaWxkX2NsdXN0ZXIpKSA7CisrICAgICAgIGNoaWxkKys7CisrICAgICAgfQorKyAgcmV0dXJuIGhvbDsKKyt9CisrCisrLyogQ2FsY3VsYXRlIGhvdyBtYW55IGRpZmZlcmVudCBsZXZlbHMgd2l0aCBhbHRlcm5hdGl2ZSBhcmdzIHN0cmluZ3MgZXhpc3QgaW4KKysgICBBUkdQLiAgKi8KKytzdGF0aWMgc2l6ZV90CisrYXJncF9hcmdzX2xldmVscyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3ApCisreworKyAgc2l6ZV90IGxldmVscyA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysKKysgIGlmIChhcmdwLT5hcmdzX2RvYyAmJiBzdHJjaHIgKGFyZ3AtPmFyZ3NfZG9jLCAnXG4nKSkKKysgICAgbGV2ZWxzKys7CisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICBsZXZlbHMgKz0gYXJncF9hcmdzX2xldmVscyAoKGNoaWxkKyspLT5hcmdwKTsKKysKKysgIHJldHVybiBsZXZlbHM7CisrfQorKworKy8qIFByaW50IGFsbCB0aGUgbm9uLW9wdGlvbiBhcmdzIGRvY3VtZW50ZWQgaW4gQVJHUCB0byBTVFJFQU0uICBBbnkgb3V0cHV0IGlzCisrICAgcHJlY2VkZWQgYnkgYSBzcGFjZS4gIExFVkVMUyBpcyBhIHBvaW50ZXIgdG8gYSBieXRlIHZlY3RvciB0aGUgbGVuZ3RoCisrICAgcmV0dXJuZWQgYnkgYXJncF9hcmdzX2xldmVsczsgaXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHplcm8sIGFuZAorKyAgIHVwZGF0ZWQgYnkgdGhpcyByb3V0aW5lIGZvciB0aGUgbmV4dCBjYWxsIGlmIEFEVkFOQ0UgaXMgdHJ1ZS4gIFRydWUgaXMKKysgICByZXR1cm5lZCBhcyBsb25nIGFzIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm5zIHRvIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2FyZ3BfYXJnc191c2FnZSAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwKKysgICAgICAgICAgICAgICAgY2hhciAqKmxldmVscywgaW50IGFkdmFuY2UsIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGNoYXIgKm91cl9sZXZlbCA9ICpsZXZlbHM7CisrICBpbnQgbXVsdGlwbGUgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrICBjb25zdCBjaGFyICp0ZG9jID0gZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCBhcmdwLT5hcmdzX2RvYyksICpubCA9IDA7CisrICBjb25zdCBjaGFyICpmZG9jID0gZmlsdGVyX2RvYyAodGRvYywgQVJHUF9LRVlfSEVMUF9BUkdTX0RPQywgYXJncCwgc3RhdGUpOworKworKyAgaWYgKGZkb2MpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpjcCA9IGZkb2M7CisrICAgICAgbmwgPSBzdHJjaHJudWwgKGNwLCAnXG4nKTsKKysgICAgICBpZiAoKm5sICE9ICdcMCcpCisrICAgICAgIC8qIFRoaXMgaXMgYSBgbXVsdGktbGV2ZWwnIGFyZ3MgZG9jOyBhZHZhbmNlIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uCisrICAgICAgICAgIGFzIGRldGVybWluZWQgYnkgb3VyIHN0YXRlIGluIExFVkVMUywgYW5kIHVwZGF0ZSBMRVZFTFMuICAqLworKyAgICAgICB7CisrICAgICAgICAgaW50IGk7CisrICAgICAgICAgbXVsdGlwbGUgPSAxOworKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAqb3VyX2xldmVsOyBpKyspCisrICAgICAgICAgICBjcCA9IG5sICsgMSwgbmwgPSBzdHJjaHJudWwgKGNwLCAnXG4nKTsKKysgICAgICAgICAoKmxldmVscykrKzsKKysgICAgICAgfQorKworKyAgICAgIC8qIE1hbnVhbGx5IGRvIGxpbmUgd3JhcHBpbmcgc28gdGhhdCBpdCAocHJvYmFibHkpIHdvbid0IGdldCB3cmFwcGVkIGF0CisrICAgICAgICBhbnkgZW1iZWRkZWQgc3BhY2VzLiAgKi8KKysgICAgICBzcGFjZSAoc3RyZWFtLCAxICsgbmwgLSBjcCk7CisrCisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoc3RyZWFtLCBjcCwgbmwgLSBjcCk7CisrICAgIH0KKysgIGlmIChmZG9jICYmIGZkb2MgIT0gdGRvYykKKysgICAgZnJlZSAoKGNoYXIgKilmZG9jKTsgICAgICAgLyogRnJlZSB1c2VyJ3MgbW9kaWZpZWQgZG9jIHN0cmluZy4gICovCisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICBhZHZhbmNlID0gIWFyZ3BfYXJnc191c2FnZSAoKGNoaWxkKyspLT5hcmdwLCBzdGF0ZSwgbGV2ZWxzLCBhZHZhbmNlLCBzdHJlYW0pOworKworKyAgaWYgKGFkdmFuY2UgJiYgbXVsdGlwbGUpCisrICAgIHsKKysgICAgICAvKiBOZWVkIHRvIGluY3JlbWVudCBvdXIgbGV2ZWwuICAqLworKyAgICAgIGlmICgqbmwpCisrICAgICAgIC8qIFRoZXJlJ3MgbW9yZSB3ZSBjYW4gZG8gaGVyZS4gICovCisrICAgICAgIHsKKysgICAgICAgICAoKm91cl9sZXZlbCkrKzsKKysgICAgICAgICBhZHZhbmNlID0gMDsgICAgICAgICAgLyogT3VyIHBhcmVudCBzaG91bGRuJ3QgYWR2YW5jZSBhbHNvLiAqLworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAoKm91cl9sZXZlbCA+IDApCisrICAgICAgIC8qIFdlIGhhZCBtdWx0aXBsZSBsZXZlbHMsIGJ1dCB1c2VkIHRoZW0gdXA7IHJlc2V0IHRvIHplcm8uICAqLworKyAgICAgICAqb3VyX2xldmVsID0gMDsKKysgICAgfQorKworKyAgcmV0dXJuICFhZHZhbmNlOworK30KKysKKysvKiBQcmludCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgQVJHUCB0byBTVFJFQU07IGlmIFBPU1QgaXMgZmFsc2UsIHRoZW4KKysgICBldmVyeXRoaW5nIHByZWNlZWRpbmcgYSBgXHYnIGNoYXJhY3RlciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIChvcgorKyAgIHRoZSB3aG9sZSBzdHJpbmcsIGZvciB0aG9zZSB3aXRoIG5vbmUpIGlzIHByaW50ZWQsIG90aGVyd2lzZSwgZXZlcnl0aGluZworKyAgIGZvbGxvd2luZyB0aGUgYFx2JyBjaGFyYWN0ZXIgKG5vdGhpbmcgZm9yIHN0cmluZ3Mgd2l0aG91dCkuICBFYWNoIHNlcGFyYXRlCisrICAgYml0IG9mIGRvY3VtZW50YXRpb24gaXMgc2VwYXJhdGVkIGEgYmxhbmsgbGluZSwgYW5kIGlmIFBSRV9CTEFOSyBpcyB0cnVlLAorKyAgIHRoZW4gdGhlIGZpcnN0IGlzIGFzIHdlbGwuICBJZiBGSVJTVF9PTkxZIGlzIHRydWUsIG9ubHkgdGhlIGZpcnN0CisrICAgb2NjdXJyZW5jZSBpcyBvdXRwdXQuICBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2FyZ3BfZG9jIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLAorKyAgICAgICAgIGludCBwb3N0LCBpbnQgcHJlX2JsYW5rLCBpbnQgZmlyc3Rfb25seSwKKysgICAgICAgICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSkKKyt7CisrICBjb25zdCBjaGFyICp0ZXh0OworKyAgY29uc3QgY2hhciAqaW5wX3RleHQ7CisrICB2b2lkICppbnB1dCA9IDA7CisrICBpbnQgYW55dGhpbmcgPSAwOworKyAgc2l6ZV90IGlucF90ZXh0X2xpbWl0ID0gMDsKKysgIGNvbnN0IGNoYXIgKmRvYyA9IGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgYXJncC0+ZG9jKTsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKGRvYykKKysgICAgeworKyAgICAgIGNoYXIgKnZ0ID0gc3RyY2hyIChkb2MsICdcdicpOworKyAgICAgIGlucF90ZXh0ID0gcG9zdCA/ICh2dCA/IHZ0ICsgMSA6IDApIDogZG9jOworKyAgICAgIGlucF90ZXh0X2xpbWl0ID0gKCFwb3N0ICYmIHZ0KSA/ICh2dCAtIGRvYykgOiAwOworKyAgICB9CisrICBlbHNlCisrICAgIGlucF90ZXh0ID0gMDsKKysKKysgIGlmIChhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgLyogV2UgaGF2ZSB0byBmaWx0ZXIgdGhlIGRvYyBzdHJpbmdzLiAgKi8KKysgICAgeworKyAgICAgIGlmIChpbnBfdGV4dF9saW1pdCkKKysgICAgICAgLyogQ29weSBJTlBfVEVYVCBzbyB0aGF0IGl0J3MgbnVsLXRlcm1pbmF0ZWQuICAqLworKyAgICAgICBpbnBfdGV4dCA9IHN0cm5kdXAgKGlucF90ZXh0LCBpbnBfdGV4dF9saW1pdCk7CisrICAgICAgaW5wdXQgPSBfX2FyZ3BfaW5wdXQgKGFyZ3AsIHN0YXRlKTsKKysgICAgICB0ZXh0ID0KKysgICAgICAgKCphcmdwLT5oZWxwX2ZpbHRlcikgKHBvc3QKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gQVJHUF9LRVlfSEVMUF9QT1NUX0RPQworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBUkdQX0tFWV9IRUxQX1BSRV9ET0MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnBfdGV4dCwgaW5wdXQpOworKyAgICB9CisrICBlbHNlCisrICAgIHRleHQgPSAoY29uc3QgY2hhciAqKSBpbnBfdGV4dDsKKysKKysgIGlmICh0ZXh0KQorKyAgICB7CisrICAgICAgaWYgKHByZV9ibGFuaykKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKworKyAgICAgIGlmICh0ZXh0ID09IGlucF90ZXh0ICYmIGlucF90ZXh0X2xpbWl0KQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChzdHJlYW0sIGlucF90ZXh0LCBpbnBfdGV4dF9saW1pdCk7CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgdGV4dCk7CisrCisrICAgICAgaWYgKF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKHN0cmVhbSkgPiBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gKHN0cmVhbSkpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysgIGlmICh0ZXh0ICYmIHRleHQgIT0gaW5wX3RleHQpCisrICAgIGZyZWUgKChjaGFyICopIHRleHQpOyAgICAgIC8qIEZyZWUgVEVYVCByZXR1cm5lZCBmcm9tIHRoZSBoZWxwIGZpbHRlci4gICovCisrICBpZiAoaW5wX3RleHQgJiYgaW5wX3RleHRfbGltaXQgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIGZyZWUgKChjaGFyICopIGlucF90ZXh0KTsgIC8qIFdlIGNvcGllZCBJTlBfVEVYVCwgc28gZnJlZSBpdCBub3cuICAqLworKworKyAgaWYgKHBvc3QgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIC8qIE5vdyBzZWUgaWYgd2UgaGF2ZSB0byBvdXRwdXQgYSBBUkdQX0tFWV9IRUxQX0VYVFJBIHRleHQuICAqLworKyAgICB7CisrICAgICAgdGV4dCA9ICgqYXJncC0+aGVscF9maWx0ZXIpIChBUkdQX0tFWV9IRUxQX0VYVFJBLCAwLCBpbnB1dCk7CisrICAgICAgaWYgKHRleHQpCisrICAgICAgIHsKKysgICAgICAgICBpZiAoYW55dGhpbmcgfHwgcHJlX2JsYW5rKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCB0ZXh0KTsKKysgICAgICAgICBmcmVlICgoY2hhciAqKSB0ZXh0KTsKKysgICAgICAgICBpZiAoX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKQorKyAgICAgICAgICAgICA+IF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiAoc3RyZWFtKSkKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3AgJiYgIShmaXJzdF9vbmx5ICYmIGFueXRoaW5nKSkKKysgICAgICBhbnl0aGluZyB8PQorKyAgICAgICBhcmdwX2RvYyAoKGNoaWxkKyspLT5hcmdwLCBzdGF0ZSwKKysgICAgICAgICAgICAgICAgIHBvc3QsIGFueXRoaW5nIHx8IHByZV9ibGFuaywgZmlyc3Rfb25seSwKKysgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrCisrICByZXR1cm4gYW55dGhpbmc7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgSWYgY2FsbGVkIGZyb20KKysgICBhcmdwX3N0YXRlX2hlbHAsIFNUQVRFIGlzIHRoZSByZWxldmVudCBwYXJzaW5nIHN0YXRlLiAgRkxBR1MgYXJlIGZyb20gdGhlCisrICAgc2V0IEFSR1BfSEVMUF8qLiAgTkFNRSBpcyB3aGF0IHRvIHVzZSB3aGVyZXZlciBhIGBwcm9ncmFtIG5hbWUnIGlzCisrICAgbmVlZGVkLiAqLworK3N0YXRpYyB2b2lkCisrX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIEZJTEUgKnN0cmVhbSwKKysgICAgICAgdW5zaWduZWQgZmxhZ3MsIGNoYXIgKm5hbWUpCisreworKyAgaW50IGFueXRoaW5nID0gMDsgICAgICAgICAgICAvKiBXaGV0aGVyIHdlJ3ZlIG91dHB1dCBhbnl0aGluZy4gICovCisrICBzdHJ1Y3QgaG9sICpob2wgPSAwOworKyAgYXJncF9mbXRzdHJlYW1fdCBmczsKKysKKysgIGlmICghIHN0cmVhbSkKKysgICAgcmV0dXJuOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgIGZsb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgIGZpbGxfaW5fdXBhcmFtcyAoc3RhdGUpOworKworKyAgZnMgPSBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gKHN0cmVhbSwgMCwgdXBhcmFtcy5ybWFyZ2luLCAwKTsKKysgIGlmICghIGZzKQorKyAgICB7CisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgKEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9TSE9SVF9VU0FHRSB8IEFSR1BfSEVMUF9MT05HKSkKKysgICAgeworKyAgICAgIGhvbCA9IGFyZ3BfaG9sIChhcmdwLCAwKTsKKysKKysgICAgICAvKiBJZiBwcmVzZW50LCB0aGVzZSBvcHRpb25zIGFsd2F5cyBjb21lIGxhc3QuICAqLworKyAgICAgIGhvbF9zZXRfZ3JvdXAgKGhvbCwgImhlbHAiLCAtMSk7CisrICAgICAgaG9sX3NldF9ncm91cCAoaG9sLCAidmVyc2lvbiIsIC0xKTsKKysKKysgICAgICBob2xfc29ydCAoaG9sKTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgKEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9TSE9SVF9VU0FHRSkpCisrICAgIC8qIFByaW50IGEgc2hvcnQgYFVzYWdlOicgbWVzc2FnZS4gICovCisrICAgIHsKKysgICAgICBpbnQgZmlyc3RfcGF0dGVybiA9IDEsIG1vcmVfcGF0dGVybnM7CisrICAgICAgc2l6ZV90IG51bV9wYXR0ZXJuX2xldmVscyA9IGFyZ3BfYXJnc19sZXZlbHMgKGFyZ3ApOworKyAgICAgIGNoYXIgKnBhdHRlcm5fbGV2ZWxzID0gYWxsb2NhIChudW1fcGF0dGVybl9sZXZlbHMpOworKworKyAgICAgIG1lbXNldCAocGF0dGVybl9sZXZlbHMsIDAsIG51bV9wYXR0ZXJuX2xldmVscyk7CisrCisrICAgICAgZG8KKysgICAgICAgeworKyAgICAgICAgIGludCBvbGRfbG07CisrICAgICAgICAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGZzLCB1cGFyYW1zLnVzYWdlX2luZGVudCk7CisrICAgICAgICAgY2hhciAqbGV2ZWxzID0gcGF0dGVybl9sZXZlbHM7CisrCisrICAgICAgICAgaWYgKGZpcnN0X3BhdHRlcm4pCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsICIlcyAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiVXNhZ2U6IiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCAiJXMgJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgIiAgb3I6ICIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworKworKyAgICAgICAgIC8qIFdlIHNldCB0aGUgbG1hcmdpbiBhcyB3ZWxsIGFzIHRoZSB3bWFyZ2luLCBiZWNhdXNlIGhvbF91c2FnZQorKyAgICAgICAgICAgIG1hbnVhbGx5IHdyYXBzIG9wdGlvbnMgd2l0aCBuZXdsaW5lIHRvIGF2b2lkIGFubm95aW5nIGJyZWFrcy4gICovCisrICAgICAgICAgb2xkX2xtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoZnMsIHVwYXJhbXMudXNhZ2VfaW5kZW50KTsKKysKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfU0hPUlRfVVNBR0UpCisrICAgICAgICAgICAvKiBKdXN0IHNob3cgd2hlcmUgdGhlIG9wdGlvbnMgZ28uICAqLworKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgICAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFtPUFRJT04uLi5dIikpOworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIC8qIEFjdHVhbGx5IHByaW50IHRoZSBvcHRpb25zLiAgKi8KKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgaG9sX3VzYWdlIChob2wsIGZzKTsKKysgICAgICAgICAgICAgZmxhZ3MgfD0gQVJHUF9IRUxQX1NIT1JUX1VTQUdFOyAvKiBCdXQgb25seSBkbyBzbyBvbmNlLiAgKi8KKysgICAgICAgICAgIH0KKysKKysgICAgICAgICBtb3JlX3BhdHRlcm5zID0gYXJncF9hcmdzX3VzYWdlIChhcmdwLCBzdGF0ZSwgJmxldmVscywgMSwgZnMpOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKGZzLCBvbGRfd20pOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGZzLCBvbGRfbG0pOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgICAgIGFueXRoaW5nID0gMTsKKysKKysgICAgICAgICBmaXJzdF9wYXR0ZXJuID0gMDsKKysgICAgICAgfQorKyAgICAgIHdoaWxlIChtb3JlX3BhdHRlcm5zKTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1BSRV9ET0MpCisrICAgIGFueXRoaW5nIHw9IGFyZ3BfZG9jIChhcmdwLCBzdGF0ZSwgMCwgMCwgMSwgZnMpOworKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1NFRSkKKysgICAgeworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiXAorK1RyeSBgJXMgLS1oZWxwJyBvciBgJXMgLS11c2FnZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBuYW1lKTsKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9MT05HKQorKyAgICAvKiBQcmludCBhIGxvbmcsIGRldGFpbGVkIGhlbHAgbWVzc2FnZS4gICovCisrICAgIHsKKysgICAgICAvKiBQcmludCBpbmZvIGFib3V0IGFsbCB0aGUgb3B0aW9ucy4gICovCisrICAgICAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKGFueXRoaW5nKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChmcywgJ1xuJyk7CisrICAgICAgICAgaG9sX2hlbHAgKGhvbCwgc3RhdGUsIGZzKTsKKysgICAgICAgICBhbnl0aGluZyA9IDE7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX1BPU1RfRE9DKQorKyAgICAvKiBQcmludCBhbnkgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGF0IHRoZSBlbmQuICAqLworKyAgICBhbnl0aGluZyB8PSBhcmdwX2RvYyAoYXJncCwgc3RhdGUsIDEsIGFueXRoaW5nLCAwLCBmcyk7CisrCisrICBpZiAoKGZsYWdzICYgQVJHUF9IRUxQX0JVR19BRERSKSAmJiBhcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MpCisrICAgIHsKKysgICAgICBpZiAoYW55dGhpbmcpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoZnMsICdcbicpOworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcG9ydCBidWdzIHRvICVzLlxuIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzKTsKKysgICAgICBhbnl0aGluZyA9IDE7CisrICAgIH0KKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgIGlmIChob2wpCisrICAgIGhvbF9mcmVlIChob2wpOworKworKyAgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChmcyk7CisrfQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgRkxBR1MgYXJlIGZyb20gdGhlIHNldAorKyAgIEFSR1BfSEVMUF8qLiAgTkFNRSBpcyB3aGF0IHRvIHVzZSB3aGVyZXZlciBhIGBwcm9ncmFtIG5hbWUnIGlzIG5lZWRlZC4gKi8KKyt2b2lkIGFyZ3BfaGVscCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIEZJTEUgKnN0cmVhbSwKKysgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzLCBjaGFyICpuYW1lKQorK3sKKysgIF9oZWxwIChhcmdwLCAwLCBzdHJlYW0sIGZsYWdzLCBuYW1lKTsKKyt9CisrCisrY2hhciAqCisrX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCkKKyt7CisrIyBpZmRlZiBfX1VDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUVfXworKy8qCisrICogdUNsaWJjIHByb3ZpZGVzIGJvdGggcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgYW5kCisrICogcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUKKysgKi8KKysgcmV0dXJuIChjaGFyICopIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOworKyMgZWxzZQorKyAgLyogRklYTUU6IFdoYXQgbm93PyBNaWxlcyBzdWdnZXN0cyB0aGF0IGl0IGlzIGJldHRlciB0byB1c2UgTlVMTCwKKysgICAgIGJ1dCBjdXJyZW50bHkgdGhlIHZhbHVlIGlzIHBhc3NlZCBvbiBkaXJlY3RseSB0byBmcHV0c191bmxvY2tlZCwKKysgICAgIHNvIHRoYXQgcmVxdWlyZXMgbW9yZSBjaGFuZ2VzLiAqLworKyMgaWYgX19HTlVDX18KKysjICB3YXJuaW5nIE5vIHJlYXNvbmFibGUgdmFsdWUgdG8gcmV0dXJuCisrIyBlbmRpZiAvKiBfX0dOVUNfXyAqLworKyAgcmV0dXJuICIiOworKyMgZW5kaWYKKyt9CisrCisrLyogT3V0cHV0LCBpZiBhcHByb3ByaWF0ZSwgYSB1c2FnZSBtZXNzYWdlIGZvciBTVEFURSB0byBTVFJFQU0uICBGTEFHUyBhcmUKKysgICBmcm9tIHRoZSBzZXQgQVJHUF9IRUxQXyouICAqLworK3ZvaWQKKythcmdwX3N0YXRlX2hlbHAgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgRklMRSAqc3RyZWFtLCB1bnNpZ25lZCBmbGFncykKKyt7CisrICBpZiAoKCFzdGF0ZSB8fCAhIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VSUlMpKSAmJiBzdHJlYW0pCisrICAgIHsKKysgICAgICBpZiAoc3RhdGUgJiYgKHN0YXRlLT5mbGFncyAmIEFSR1BfTE9OR19PTkxZKSkKKysgICAgICAgZmxhZ3MgfD0gQVJHUF9IRUxQX0xPTkdfT05MWTsKKysKKysgICAgICBfaGVscCAoc3RhdGUgPyBzdGF0ZS0+cm9vdF9hcmdwIDogMCwgc3RhdGUsIHN0cmVhbSwgZmxhZ3MsCisrICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCkpOworKworKyAgICAgIGlmICghc3RhdGUgfHwgISAoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FWElUKSkKKysgICAgICAgeworKyAgICAgICAgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9FWElUX0VSUikKKysgICAgICAgICAgIGV4aXQgKGFyZ3BfZXJyX2V4aXRfc3RhdHVzKTsKKysgICAgICAgICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfRVhJVF9PSykKKysgICAgICAgICAgIGV4aXQgKDApOworKyAgICAgICB9CisrICB9CisrfQorKworKy8qIElmIGFwcHJvcHJpYXRlLCBwcmludCB0aGUgcHJpbnRmIHN0cmluZyBGTVQgYW5kIGZvbGxvd2luZyBhcmdzLCBwcmVjZWRlZAorKyAgIGJ5IHRoZSBwcm9ncmFtIG5hbWUgYW5kIGA6JywgdG8gc3RkZXJyLCBhbmQgZm9sbG93ZWQgYnkgYSBgVHJ5IC4uLiAtLWhlbHAnCisrICAgbWVzc2FnZSwgdGhlbiBleGl0ICgxKS4gICovCisrdm9pZAorK2FyZ3BfZXJyb3IgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaWYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpCisrICAgIHsKKysgICAgICBGSUxFICpzdHJlYW0gPSBzdGF0ZSA/IHN0YXRlLT5lcnJfc3RyZWFtIDogc3RkZXJyOworKworKyAgICAgIGlmIChzdHJlYW0pCisrICAgICAgIHsKKysgICAgICAgICB2YV9saXN0IGFwOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmbG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgdmFfc3RhcnQgKGFwLCBmbXQpOworKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgY2hhciAqYnVmOworKworKyAgICAgICAgIGlmIChfSU9fdmFzcHJpbnRmICgmYnVmLCBmbXQsIGFwKSA8IDApCisrICAgICAgICAgICBidWYgPSBOVUxMOworKworKyAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIiVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwgYnVmKTsKKysKKysgICAgICAgICBmcmVlIChidWYpOworKyNlbHNlCisrICAgICAgICAgZnB1dHNfdW5sb2NrZWQgKHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pOworKyAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIHN0cmVhbSk7CisrCisrICAgICAgICAgdmZwcmludGYgKHN0cmVhbSwgZm10LCBhcCk7CisrCisrICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBhcmdwX3N0YXRlX2hlbHAgKHN0YXRlLCBzdHJlYW0sIEFSR1BfSEVMUF9TVERfRVJSKTsKKysKKysgICAgICAgICB2YV9lbmQgKGFwKTsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgICAgIH0KKysgICAgfQorK30KKysKKysvKiBTaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBnbnUgZXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uIGVycm9yKCksIGJ1dCB3aWxsCisrICAgcmVzcGVjdCB0aGUgQVJHUF9OT19FWElUIGFuZCBBUkdQX05PX0VSUlMgZmxhZ3MgaW4gU1RBVEUsIGFuZCB3aWxsIHByaW50CisrICAgdG8gU1RBVEUtPmVycl9zdHJlYW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRoYXQgaXMKKysgICBzaGFyZWQgYmV0d2VlbiBwcm9ncmFtIHN0YXJ0dXAgKHdoZW4gZXhpdGluZyBpcyBkZXNpcmVkKSBhbmQgcnVudGltZQorKyAgIG9wdGlvbiBwYXJzaW5nICh3aGVuIHR5cGljYWxseSBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluc3RlYWQpLiAgVGhlCisrICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFyZ3BfZXJyb3IgaXMgdGhhdCB0aGUgbGF0dGVyIGlzIGZvcgorKyAgICpwYXJzaW5nIGVycm9ycyosIGFuZCB0aGUgZm9ybWVyIGlzIGZvciBvdGhlciBwcm9ibGVtcyB0aGF0IG9jY3VyIGR1cmluZworKyAgIHBhcnNpbmcgYnV0IGRvbid0IHJlZmxlY3QgYSAoc3ludGFjdGljKSBwcm9ibGVtIHdpdGggdGhlIGlucHV0LiAgKi8KKyt2b2lkCisrYXJncF9mYWlsdXJlIChjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsIGludCBzdGF0dXMsIGludCBlcnJudW0sCisrICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaWYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpCisrICAgIHsKKysgICAgICBGSUxFICpzdHJlYW0gPSBzdGF0ZSA/IHN0YXRlLT5lcnJfc3RyZWFtIDogc3RkZXJyOworKworKyAgICAgIGlmIChzdHJlYW0pCisrICAgICAgIHsKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDICYmIGRlZmluZWQgVVNFX0lOX0xJQklPCisrICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiJXMiLAorKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpKTsKKysjZWxzZQorKyAgICAgICAgIGZwdXRzX3VubG9ja2VkIChzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICBpZiAoZm10KQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICB2YV9saXN0IGFwOworKworKyAgICAgICAgICAgICB2YV9zdGFydCAoYXAsIGZtdCk7CisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgY2hhciAqYnVmOworKworKyAgICAgICAgICAgICBpZiAoX0lPX3Zhc3ByaW50ZiAoJmJ1ZiwgZm10LCBhcCkgPCAwKQorKyAgICAgICAgICAgICAgIGJ1ZiA9IE5VTEw7CisrCisrICAgICAgICAgICAgIF9fZnhwcmludGYgKHN0cmVhbSwgIjogJXMiLCBidWYpOworKworKyAgICAgICAgICAgICBmcmVlIChidWYpOworKyNlbHNlCisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBzdHJlYW0pOworKworKyAgICAgICAgICAgICB2ZnByaW50ZiAoc3RyZWFtLCBmbXQsIGFwKTsKKysjZW5kaWYKKysKKysgICAgICAgICAgICAgdmFfZW5kIChhcCk7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgaWYgKGVycm51bSkKKysgICAgICAgICAgIHsKKysjaWYgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8pIHx8IGRlZmluZWQgSEFWRV9TVFJFUlJPUl9SCisrICAgICAgICAgICAgIGNoYXIgYnVmWzIwMF07CisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yX3IgKGVycm51bSwgYnVmLCBzaXplb2YgKGJ1ZikpKTsKKysjZWxzZQorKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnOicsIHN0cmVhbSk7CisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgc3RyZWFtKTsKKysjIGlmZGVmIEhBVkVfU1RSRVJST1JfUgorKyAgICAgICAgICAgICBmcHV0cyAoc3RyZXJyb3JfciAoZXJybnVtLCBidWYsIHNpemVvZiAoYnVmKSksIHN0cmVhbSk7CisrIyBlbHNlCisrICAgICAgICAgICAgIGZwdXRzIChzdHJlcnJvciAoZXJybnVtKSwgc3RyZWFtKTsKKysjIGVuZGlmCisrI2VuZGlmCisrICAgICAgICAgICB9CisrCisrI2lmZGVmIFVTRV9JTl9MSUJJTworKyAgICAgICAgIGlmIChfSU9fZndpZGUgKHN0cmVhbSwgMCkgPiAwKQorKyAgICAgICAgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCdcbicsIHN0cmVhbSk7CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIGlmIChzdGF0dXMgJiYgKCFzdGF0ZSB8fCAhKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpKQorKyAgICAgICAgICAgZXhpdCAoc3RhdHVzKTsKKysgICAgICAgfQorKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYyBiL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg2YjJiMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcGFyc2UuYworQEAgLTAsMCArMSw5NDkgQEAKKysvKiBIaWVyYXJjaGlhbCBhcmd1bWVudCBwYXJzaW5nLCBsYXllcmVkIG92ZXIgZ2V0b3B0CisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogQUlYIHJlcXVpcmVzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaWxlLiAgKi8KKysjaWZuZGVmIF9fR05VQ19fCisrIyBpZiBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGVsc2UKKysjICBpZmRlZiBfQUlYCisrI3ByYWdtYSBhbGxvY2EKKysjICBlbHNlCisrIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCisrY2hhciAqYWxsb2NhICgpOworKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGJpdHMvZ2V0b3B0X2ludC5oPgorKworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZm5kZWYgXworKy8qIFRoaXMgaXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQgbWVzc2FnZXMuCisrICAgV2hlbiBjb21waWxpbmcgbGliYywgdGhlIF8gbWFjcm8gaXMgcHJlZGVmaW5lZC4gICovCisrIyBpZiAoZGVmaW5lZCBIQVZFX0xJQklOVExfSCB8fCBkZWZpbmVkIF9MSUJDKSAmJiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGRnZXR0ZXh0CisrIyAgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSBcCisrICBJTlRVU0UoX19kY2dldHRleHQpIChkb21haW4sIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBkZ2V0dGV4dChkb21haW4sIG1zZ2lkKSAobXNnaWQpCisrIyAgZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBOXworKyMgZGVmaW5lIE5fKG1zZ2lkKSAobXNnaWQpCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBHZXRvcHQgcmV0dXJuIHZhbHVlcy4gICovCisrI2RlZmluZSBLRVlfRU5EICgtMSkgICAgICAgICAgIC8qIFRoZSBlbmQgb2YgdGhlIG9wdGlvbnMuICAqLworKyNkZWZpbmUgS0VZX0FSRyAxICAgICAgICAgICAgICAvKiBBIG5vbi1vcHRpb24gYXJndW1lbnQuICAqLworKyNkZWZpbmUgS0VZX0VSUiAnPycgICAgICAgICAgICAvKiBBbiBlcnJvciBwYXJzaW5nIHRoZSBvcHRpb25zLiAgKi8KKysKKysvKiBUaGUgbWV0YS1hcmd1bWVudCB1c2VkIHRvIHByZXZlbnQgYW55IGZ1cnRoZXIgYXJndW1lbnRzIGJlaW5nIGludGVycHJldGVkCisrICAgYXMgb3B0aW9ucy4gICovCisrI2RlZmluZSBRVU9URSAiLS0iCisrCisrLyogVGhlIG51bWJlciBvZiBiaXRzIHdlIHN0ZWFsIGluIGEgbG9uZy1vcHRpb24gdmFsdWUgZm9yIG91ciBvd24gdXNlLiAgKi8KKysjZGVmaW5lIEdST1VQX0JJVFMgQ0hBUl9CSVQKKysKKysvKiBUaGUgbnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIGZvciB0aGUgdXNlciB2YWx1ZS4gICovCisrI2RlZmluZSBVU0VSX0JJVFMgKChzaXplb2YgKChzdHJ1Y3Qgb3B0aW9uICopMCktPnZhbCAqIENIQVJfQklUKSAtIEdST1VQX0JJVFMpCisrI2RlZmluZSBVU0VSX01BU0sgKCgxIDw8IFVTRVJfQklUUykgLSAxKQorKworKy8qIEVaIGFsaWFzIGZvciBBUkdQX0VSUl9VTktOT1dOLiAgKi8KKysjZGVmaW5lIEVCQURLRVkgQVJHUF9FUlJfVU5LTk9XTgorKworKy8qIERlZmF1bHQgb3B0aW9ucy4gICovCisrCisrLyogV2hlbiBhcmdwIGlzIGdpdmVuIHRoZSAtLUhBTkcgc3dpdGNoLCBfQVJHUF9IQU5HIGlzIHNldCBhbmQgYXJncCB3aWxsIHNsZWVwCisrICAgZm9yIG9uZSBzZWNvbmQgaW50ZXJ2YWxzLCBkZWNyZW1lbnRpbmcgX0FSR1BfSEFORyB1bnRpbCBpdCdzIHplcm8uICBUaHVzCisrICAgeW91IGNhbiBmb3JjZSB0aGUgcHJvZ3JhbSB0byBjb250aW51ZSBieSBhdHRhY2hpbmcgYSBkZWJ1Z2dlciBhbmQgc2V0dGluZworKyAgIGl0IHRvIDAgeW91cnNlbGYuICAqLworK3N0YXRpYyB2b2xhdGlsZSBpbnQgX2FyZ3BfaGFuZzsKKysKKysjZGVmaW5lIE9QVF9QUk9HTkFNRSAgIC0yCisrI2RlZmluZSBPUFRfVVNBR0UgICAgICAtMworKyNkZWZpbmUgT1BUX0hBTkcgICAgICAgLTQKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIGFyZ3BfZGVmYXVsdF9vcHRpb25zW10gPQorK3sKKysgIHsiaGVscCIsICAgICAgICc/JywgICAgICAgICAgMCwgMCwgIE5fKCJHaXZlIHRoaXMgaGVscCBsaXN0IiksIC0xfSwKKysgIHsidXNhZ2UiLCAgICAgIE9QVF9VU0FHRSwgICAgMCwgMCwgIE5fKCJHaXZlIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSIpfSwKKysgIHsicHJvZ3JhbS1uYW1lIixPUFRfUFJPR05BTUUsIk5BTUUiLCBPUFRJT05fSElEREVOLCBOXygiU2V0IHRoZSBwcm9ncmFtIG5hbWUiKX0sCisrICB7IkhBTkciLCAgICAgICBPUFRfSEFORywgICAgIlNFQ1MiLCBPUFRJT05fQVJHX09QVElPTkFMIHwgT1BUSU9OX0hJRERFTiwKKysgICAgIE5fKCJIYW5nIGZvciBTRUNTIHNlY29uZHMgKGRlZmF1bHQgMzYwMCkiKX0sCisrICB7MCwgMH0KKyt9OworKworK3N0YXRpYyBlcnJvcl90CisrYXJncF9kZWZhdWx0X3BhcnNlciAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAnPyc6CisrICAgICAgYXJncF9zdGF0ZV9oZWxwIChzdGF0ZSwgc3RhdGUtPm91dF9zdHJlYW0sIEFSR1BfSEVMUF9TVERfSEVMUCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1BUX1VTQUdFOgorKyAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoc3RhdGUsIHN0YXRlLT5vdXRfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgICBBUkdQX0hFTFBfVVNBR0UgfCBBUkdQX0hFTFBfRVhJVF9PSyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgT1BUX1BST0dOQU1FOiAgICAgICAgIC8qIFNldCB0aGUgcHJvZ3JhbSBuYW1lLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUKKysgICAgICBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSA9IGFyZzsKKysjZW5kaWYKKysgICAgICAvKiBbTm90ZSB0aGF0IHNvbWUgc3lzdGVtcyBvbmx5IGhhdmUgUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUgKGFrYQorKyAgICAgICAgX19QUk9HTkFNRSksIGluIHdoaWNoIGNhc2UsIFBST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlzIGp1c3QgZGVmaW5lZAorKyAgICAgICAgdG8gYmUgdGhhdCwgc28gd2UgaGF2ZSB0byBiZSBhIGJpdCBjYXJlZnVsIGhlcmUuXSAgKi8KKysKKysgICAgICAvKiBVcGRhdGUgd2hhdCB3ZSB1c2UgZm9yIG1lc3NhZ2VzLiAgKi8KKysgICAgICBzdGF0ZS0+bmFtZSA9IHN0cnJjaHIgKGFyZywgJy8nKTsKKysgICAgICBpZiAoc3RhdGUtPm5hbWUpCisrICAgICAgIHN0YXRlLT5uYW1lKys7CisrICAgICAgZWxzZQorKyAgICAgICBzdGF0ZS0+bmFtZSA9IGFyZzsKKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0RFQ0xfUFJPR1JBTV9JTlZPQ0FUSU9OX1NIT1JUX05BTUUKKysgICAgICBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSA9IHN0YXRlLT5uYW1lOworKyNlbmRpZgorKworKyAgICAgIGlmICgoc3RhdGUtPmZsYWdzICYgKEFSR1BfUEFSU0VfQVJHVjAgfCBBUkdQX05PX0VSUlMpKQorKyAgICAgICAgID09IEFSR1BfUEFSU0VfQVJHVjApCisrICAgICAgIC8qIFVwZGF0ZSB3aGF0IGdldG9wdCB1c2VzIHRvby4gICovCisrICAgICAgIHN0YXRlLT5hcmd2WzBdID0gYXJnOworKworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIE9QVF9IQU5HOgorKyAgICAgIF9hcmdwX2hhbmcgPSBhdG9pIChhcmcgPyBhcmcgOiAiMzYwMCIpOworKyAgICAgIHdoaWxlIChfYXJncF9oYW5nLS0gPiAwKQorKyAgICAgICBzbGVlcCAoMSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYXJncF9kZWZhdWx0X2FyZ3AgPQorKyAge2FyZ3BfZGVmYXVsdF9vcHRpb25zLCAmYXJncF9kZWZhdWx0X3BhcnNlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgImxpYmMifTsKKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIGFyZ3BfdmVyc2lvbl9vcHRpb25zW10gPQorK3sKKysgIHsidmVyc2lvbiIsICAgICdWJywgICAgICAgICAgMCwgMCwgIE5fKCJQcmludCBwcm9ncmFtIHZlcnNpb24iKSwgLTF9LAorKyAgezAsIDB9CisrfTsKKysKKytzdGF0aWMgZXJyb3JfdAorK2FyZ3BfdmVyc2lvbl9wYXJzZXIgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJ1YnOgorKyAgICAgIGlmIChhcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKQorKyAgICAgICAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChzdGF0ZS0+b3V0X3N0cmVhbSwgc3RhdGUpOworKyAgICAgIGVsc2UgaWYgKGFyZ3BfcHJvZ3JhbV92ZXJzaW9uKQorKyAgICAgICBmcHJpbnRmIChzdGF0ZS0+b3V0X3N0cmVhbSwgIiVzXG4iLCBhcmdwX3Byb2dyYW1fdmVyc2lvbik7CisrICAgICAgZWxzZQorKyAgICAgICBhcmdwX2Vycm9yIChzdGF0ZSwgZGdldHRleHQgKHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQUk9HUkFNIEVSUk9SKSBObyB2ZXJzaW9uIGtub3duIT8iKSk7CisrICAgICAgaWYgKCEgKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVhJVCkpCisrICAgICAgIGV4aXQgKDApOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFQkFES0VZOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGFyZ3BfdmVyc2lvbl9hcmdwID0KKysgIHthcmdwX3ZlcnNpb25fb3B0aW9ucywgJmFyZ3BfdmVyc2lvbl9wYXJzZXIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJsaWJjIn07CisrCisrLyogUmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIGdldG9wdCBsb25nIG9wdGlvbnMgYXJyYXkgTE9OR19PUFRJT05TIG9mIGEKKysgICBsb25nIG9wdGlvbiB3aXRoIGNhbGxlZCBOQU1FLCBvciAtMSBpZiBub25lIGlzIGZvdW5kLiAgUGFzc2luZyBOVUxMIGFzCisrICAgTkFNRSB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIG9wdGlvbnMuICAqLworK3N0YXRpYyBpbnQKKytmaW5kX2xvbmdfb3B0aW9uIChzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgc3RydWN0IG9wdGlvbiAqbCA9IGxvbmdfb3B0aW9uczsKKysgIHdoaWxlIChsLT5uYW1lICE9IE5VTEwpCisrICAgIGlmIChuYW1lICE9IE5VTEwgJiYgc3RyY21wIChsLT5uYW1lLCBuYW1lKSA9PSAwKQorKyAgICAgIHJldHVybiBsIC0gbG9uZ19vcHRpb25zOworKyAgICBlbHNlCisrICAgICAgbCsrOworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIGwgLSBsb25nX29wdGlvbnM7CisrICBlbHNlCisrICAgIHJldHVybiAtMTsKKyt9CisrCisrCisrLyogVGhlIHN0YXRlIG9mIGEgYGdyb3VwJyBkdXJpbmcgcGFyc2luZy4gIEVhY2ggZ3JvdXAgY29ycmVzcG9uZHMgdG8gYQorKyAgIHBhcnRpY3VsYXIgYXJncCBzdHJ1Y3R1cmUgZnJvbSB0aGUgdHJlZSBvZiBzdWNoIGRlc2NlbmRpbmcgZnJvbSB0aGUgdG9wCisrICAgbGV2ZWwgYXJncCBwYXNzZWQgdG8gYXJncF9wYXJzZS4gICovCisrc3RydWN0IGdyb3VwCisreworKyAgLyogVGhpcyBncm91cCdzIHBhcnNpbmcgZnVuY3Rpb24uICAqLworKyAgYXJncF9wYXJzZXJfdCBwYXJzZXI7CisrCisrICAvKiBXaGljaCBhcmdwIHRoaXMgZ3JvdXAgaXMgZnJvbS4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIFBvaW50cyB0byB0aGUgcG9pbnQgaW4gU0hPUlRfT1BUUyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHNob3J0CisrICAgICBvcHRpb25zIGZvciB0aGlzIGdyb3VwLiAgV2UgdXNlIGl0IHRvIGRldGVybWluZSBmcm9tIHdoaWNoIGdyb3VwIGEKKysgICAgIHBhcnRpY3VsYXIgc2hvcnQgb3B0aW9ucyBpcyBmcm9tLiAgKi8KKysgIGNoYXIgKnNob3J0X2VuZDsKKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygbm9uLW9wdGlvbiBhcmdzIHN1Y2Vzc2Z1bGx5IGhhbmRsZWQgYnkgdGhpcyBwYXJzZXIuICAqLworKyAgdW5zaWduZWQgYXJnc19wcm9jZXNzZWQ7CisrCisrICAvKiBUaGlzIGdyb3VwJ3MgcGFyc2VyJ3MgcGFyZW50J3MgZ3JvdXAuICAqLworKyAgc3RydWN0IGdyb3VwICpwYXJlbnQ7CisrICB1bnNpZ25lZCBwYXJlbnRfaW5kZXg7ICAgICAgIC8qIEFuZCB0aGUgb3VyIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQuICAgKi8KKysKKysgIC8qIFRoZXNlIGZpZWxkcyBhcmUgc3dhcHBlZCBpbnRvIGFuZCBvdXQgb2YgdGhlIHN0YXRlIHN0cnVjdHVyZSB3aGVuCisrICAgICBjYWxsaW5nIHRoaXMgZ3JvdXAncyBwYXJzZXIuICAqLworKyAgdm9pZCAqaW5wdXQsICoqY2hpbGRfaW5wdXRzOworKyAgdm9pZCAqaG9vazsKKyt9OworKworKy8qIENhbGwgR1JPVVAncyBwYXJzZXIgd2l0aCBLRVkgYW5kIEFSRywgc3dhcHBpbmcgYW55IGdyb3VwLXNwZWNpZmljIGluZm8KKysgICBmcm9tIFNUQVRFIGJlZm9yZSBjYWxsaW5nLCBhbmQgYmFjayBpbnRvIHN0YXRlIGFmdGVyd2FyZHMuICBJZiBHUk9VUCBoYXMKKysgICBubyBwYXJzZXIsIEVCQURLRVkgaXMgcmV0dXJuZWQuICAqLworK3N0YXRpYyBlcnJvcl90CisrZ3JvdXBfcGFyc2UgKHN0cnVjdCBncm91cCAqZ3JvdXAsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgaW50IGtleSwgY2hhciAqYXJnKQorK3sKKysgIGlmIChncm91cC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgZXJyb3JfdCBlcnI7CisrICAgICAgc3RhdGUtPmhvb2sgPSBncm91cC0+aG9vazsKKysgICAgICBzdGF0ZS0+aW5wdXQgPSBncm91cC0+aW5wdXQ7CisrICAgICAgc3RhdGUtPmNoaWxkX2lucHV0cyA9IGdyb3VwLT5jaGlsZF9pbnB1dHM7CisrICAgICAgc3RhdGUtPmFyZ19udW0gPSBncm91cC0+YXJnc19wcm9jZXNzZWQ7CisrICAgICAgZXJyID0gKCpncm91cC0+cGFyc2VyKShrZXksIGFyZywgc3RhdGUpOworKyAgICAgIGdyb3VwLT5ob29rID0gc3RhdGUtPmhvb2s7CisrICAgICAgcmV0dXJuIGVycjsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gRUJBREtFWTsKKyt9CisrCisrc3RydWN0IHBhcnNlcgorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogU0hPUlRfT1BUUyBpcyB0aGUgZ2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nIGZvciB0aGUgdW5pb24gb2YgYWxsIHRoZQorKyAgICAgZ3JvdXBzIG9mIG9wdGlvbnMuICAqLworKyAgY2hhciAqc2hvcnRfb3B0czsKKysgIC8qIExPTkdfT1BUUyBpcyB0aGUgYXJyYXkgb2YgZ2V0b3AgbG9uZyBvcHRpb24gc3RydWN0dXJlcyBmb3IgdGhlIHVuaW9uIG9mCisrICAgICBhbGwgdGhlIGdyb3VwcyBvZiBvcHRpb25zLiAgKi8KKysgIHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0czsKKysgIC8qIE9QVF9EQVRBIGlzIHRoZSBnZXRvcHQgZGF0YSB1c2VkIGZvciB0aGUgcmUtZW50cmFudCBnZXRvcHQuICAqLworKyAgc3RydWN0IF9nZXRvcHRfZGF0YSBvcHRfZGF0YTsKKysKKysgIC8qIFN0YXRlcyBvZiB0aGUgdmFyaW91cyBwYXJzaW5nIGdyb3Vwcy4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwczsKKysgIC8qIFRoZSBlbmQgb2YgdGhlIEdST1VQUyBhcnJheS4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKmVncm91cDsKKysgIC8qIEFuIHZlY3RvciBjb250YWluaW5nIHN0b3JhZ2UgZm9yIHRoZSBDSElMRF9JTlBVVFMgZmllbGQgaW4gYWxsIGdyb3Vwcy4gICovCisrICB2b2lkICoqY2hpbGRfaW5wdXRzOworKworKyAgLyogVHJ1ZSBpZiB3ZSB0aGluayB1c2luZyBnZXRvcHQgaXMgc3RpbGwgdXNlZnVsOyBpZiBmYWxzZSwgdGhlbgorKyAgICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUganVzdCBwYXNzZWQgdmVyYmF0aW0gd2l0aCBBUkdQX0tFWV9BUkcuICBUaGlzIGlzCisrICAgICBjbGVhcmVkIHdoZW5ldmVyIGdldG9wdCByZXR1cm5zIEtFWV9FTkQsIGJ1dCBtYXkgYmUgc2V0IGFnYWluIGlmIHRoZSB1c2VyCisrICAgICBtb3ZlcyB0aGUgbmV4dCBhcmd1bWVudCBwb2ludGVyIGJhY2t3YXJkcy4gICovCisrICBpbnQgdHJ5X2dldG9wdDsKKysKKysgIC8qIFN0YXRlIGJsb2NrIHN1cHBsaWVkIHRvIHBhcnNpbmcgcm91dGluZXMuICAqLworKyAgc3RydWN0IGFyZ3Bfc3RhdGUgc3RhdGU7CisrCisrICAvKiBNZW1vcnkgdXNlZCBieSB0aGlzIHBhcnNlci4gICovCisrICB2b2lkICpzdG9yYWdlOworK307CisrCisrLyogVGhlIG5leHQgdXNhYmxlIGVudHJpZXMgaW4gdGhlIHZhcmlvdXMgcGFyc2VyIHRhYmxlcyBiZWluZyBmaWxsZWQgaW4gYnkKKysgICBjb252ZXJ0X29wdGlvbnMuICAqLworK3N0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZQorK3sKKysgIHN0cnVjdCBwYXJzZXIgKnBhcnNlcjsKKysgIGNoYXIgKnNob3J0X2VuZDsKKysgIHN0cnVjdCBvcHRpb24gKmxvbmdfZW5kOworKyAgdm9pZCAqKmNoaWxkX2lucHV0c19lbmQ7CisrfTsKKysKKysvKiBDb252ZXJ0cyBhbGwgb3B0aW9ucyBpbiBBUkdQICh3aGljaCBpcyBwdXQgaW4gR1JPVVApIGFuZCBhbmNlc3RvcnMKKysgICBpbnRvIGdldG9wdCBvcHRpb25zIHN0b3JlZCBpbiBTSE9SVF9PUFRTIGFuZCBMT05HX09QVFM7IFNIT1JUX0VORCBhbmQKKysgICBDVlQtPkxPTkdfRU5EIGFyZSB0aGUgcG9pbnRzIGF0IHdoaWNoIG5ldyBvcHRpb25zIGFyZSBhZGRlZC4gIFJldHVybnMgdGhlCisrICAgbmV4dCB1bnVzZWQgZ3JvdXAgZW50cnkuICBDVlQgaG9sZHMgc3RhdGUgdXNlZCBkdXJpbmcgdGhlIGNvbnZlcnNpb24uICAqLworK3N0YXRpYyBzdHJ1Y3QgZ3JvdXAgKgorK2NvbnZlcnRfb3B0aW9ucyAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAqcGFyZW50LCB1bnNpZ25lZCBwYXJlbnRfaW5kZXgsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXAsIHN0cnVjdCBwYXJzZXJfY29udmVydF9zdGF0ZSAqY3Z0KQorK3sKKysgIC8qIFJFQUwgaXMgdGhlIG1vc3QgcmVjZW50IG5vbi1hbGlhcyB2YWx1ZSBvZiBPUFQuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsID0gYXJncC0+b3B0aW9uczsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZHJlbiA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKHJlYWwgfHwgYXJncC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQ7CisrCisrICAgICAgaWYgKHJlYWwpCisrICAgICAgIGZvciAob3B0ID0gcmVhbDsgIV9fb3B0aW9uX2lzX2VuZCAob3B0KTsgb3B0KyspCisrICAgICAgICAgeworKyAgICAgICAgICAgaWYgKCEgKG9wdC0+ZmxhZ3MgJiBPUFRJT05fQUxJQVMpKQorKyAgICAgICAgICAgICAvKiBPUFQgaXNuJ3QgYW4gYWxpYXMsIHNvIHdlIGNhbiB1c2UgdmFsdWVzIGZyb20gaXQuICAqLworKyAgICAgICAgICAgICByZWFsID0gb3B0OworKworKyAgICAgICAgICAgaWYgKCEgKHJlYWwtPmZsYWdzICYgT1BUSU9OX0RPQykpCisrICAgICAgICAgICAgIC8qIEEgcmVhbCBvcHRpb24gKG5vdCBqdXN0IGRvY3VtZW50YXRpb24pLiAgKi8KKysgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIGlmIChfX29wdGlvbl9pc19zaG9ydCAob3B0KSkKKysgICAgICAgICAgICAgICAgIC8qIE9QVCBjYW4gYmUgdXNlZCBhcyBhIHNob3J0IG9wdGlvbi4gICovCisrICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCsrID0gb3B0LT5rZXk7CisrICAgICAgICAgICAgICAgICAgIGlmIChyZWFsLT5hcmcpCisrICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kKysgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQrKyA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCA9ICdcMCc7IC8qIGtlZXAgMCB0ZXJtaW5hdGVkICovCisrICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgaWYgKG9wdC0+bmFtZQorKyAgICAgICAgICAgICAgICAgICAmJiBmaW5kX2xvbmdfb3B0aW9uIChjdnQtPnBhcnNlci0+bG9uZ19vcHRzLCBvcHQtPm5hbWUpIDwgMCkKKysgICAgICAgICAgICAgICAgIC8qIE9QVCBjYW4gYmUgdXNlZCBhcyBhIGxvbmcgb3B0aW9uLiAgKi8KKysgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+bmFtZSA9IG9wdC0+bmFtZTsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+aGFzX2FyZyA9CisrICAgICAgICAgICAgICAgICAgICAgKHJlYWwtPmFyZworKyAgICAgICAgICAgICAgICAgICAgICA/IChyZWFsLT5mbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwKKysgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25hbF9hcmd1bWVudAorKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlcXVpcmVkX2FyZ3VtZW50KQorKyAgICAgICAgICAgICAgICAgICAgICA6IG5vX2FyZ3VtZW50KTsKKysgICAgICAgICAgICAgICAgICAgY3Z0LT5sb25nX2VuZC0+ZmxhZyA9IDA7CisrICAgICAgICAgICAgICAgICAgIC8qIHdlIGFkZCBhIGRpc2FtYmlndWF0aW5nIGNvZGUgdG8gYWxsIHRoZSB1c2VyJ3MKKysgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzICh3aGljaCBpcyByZW1vdmVkIGJlZm9yZSB3ZSBhY3R1YWxseSBjYWxsCisrICAgICAgICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiB0byBwYXJzZSB0aGUgdmFsdWUpOyB0aGlzIG1lYW5zIHRoYXQKKysgICAgICAgICAgICAgICAgICAgICAgdGhlIHVzZXIgbG9zZXMgdXNlIG9mIHRoZSBoaWdoIDggYml0cyBpbiBhbGwgaGlzCisrICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAodGhlIHNpZ24gb2YgdGhlIGxvd2VyIGJpdHMgaXMgcHJlc2VydmVkCisrICAgICAgICAgICAgICAgICAgICAgIGhvd2V2ZXIpLi4uICAqLworKyAgICAgICAgICAgICAgICAgICBjdnQtPmxvbmdfZW5kLT52YWwgPQorKyAgICAgICAgICAgICAgICAgICAgICgob3B0LT5rZXkgfCByZWFsLT5rZXkpICYgVVNFUl9NQVNLKQorKyAgICAgICAgICAgICAgICAgICAgICsgKCgoZ3JvdXAgLSBjdnQtPnBhcnNlci0+Z3JvdXBzKSArIDEpIDw8IFVTRVJfQklUUyk7CisrCisrICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgdGhlIExPTkdfT1BUUyBsaXN0IHRlcm1pbmF0ZWQuICAqLworKyAgICAgICAgICAgICAgICAgICAoKytjdnQtPmxvbmdfZW5kKS0+bmFtZSA9IE5VTEw7CisrICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysKKysgICAgICBncm91cC0+cGFyc2VyID0gYXJncC0+cGFyc2VyOworKyAgICAgIGdyb3VwLT5hcmdwID0gYXJncDsKKysgICAgICBncm91cC0+c2hvcnRfZW5kID0gY3Z0LT5zaG9ydF9lbmQ7CisrICAgICAgZ3JvdXAtPmFyZ3NfcHJvY2Vzc2VkID0gMDsKKysgICAgICBncm91cC0+cGFyZW50ID0gcGFyZW50OworKyAgICAgIGdyb3VwLT5wYXJlbnRfaW5kZXggPSBwYXJlbnRfaW5kZXg7CisrICAgICAgZ3JvdXAtPmlucHV0ID0gMDsKKysgICAgICBncm91cC0+aG9vayA9IDA7CisrICAgICAgZ3JvdXAtPmNoaWxkX2lucHV0cyA9IDA7CisrCisrICAgICAgaWYgKGNoaWxkcmVuKQorKyAgICAgICAvKiBBc3NpZ24gR1JPVVAncyBDSElMRF9JTlBVVFMgZmllbGQgc29tZSBzcGFjZSBmcm9tCisrICAgICAgICAgICBDVlQtPmNoaWxkX2lucHV0c19lbmQuKi8KKysgICAgICAgeworKyAgICAgICAgIHVuc2lnbmVkIG51bV9jaGlsZHJlbiA9IDA7CisrICAgICAgICAgd2hpbGUgKGNoaWxkcmVuW251bV9jaGlsZHJlbl0uYXJncCkKKysgICAgICAgICAgIG51bV9jaGlsZHJlbisrOworKyAgICAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHMgPSBjdnQtPmNoaWxkX2lucHV0c19lbmQ7CisrICAgICAgICAgY3Z0LT5jaGlsZF9pbnB1dHNfZW5kICs9IG51bV9jaGlsZHJlbjsKKysgICAgICAgfQorKworKyAgICAgIHBhcmVudCA9IGdyb3VwKys7CisrICAgIH0KKysgIGVsc2UKKysgICAgcGFyZW50ID0gMDsKKysKKysgIGlmIChjaGlsZHJlbikKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKysgICAgICB3aGlsZSAoY2hpbGRyZW4tPmFyZ3ApCisrICAgICAgIGdyb3VwID0KKysgICAgICAgICBjb252ZXJ0X29wdGlvbnMgKGNoaWxkcmVuKystPmFyZ3AsIHBhcmVudCwgaW5kZXgrKywgZ3JvdXAsIGN2dCk7CisrICAgIH0KKysKKysgIHJldHVybiBncm91cDsKKyt9CisrCisrLyogRmluZCB0aGUgbWVyZ2VkIHNldCBvZiBnZXRvcHQgb3B0aW9ucywgd2l0aCBrZXlzIGFwcHJvcGlhdGVseSBwcmVmaXhlZC4gKi8KKytzdGF0aWMgdm9pZAorK3BhcnNlcl9jb252ZXJ0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBpbnQgZmxhZ3MpCisreworKyAgc3RydWN0IHBhcnNlcl9jb252ZXJ0X3N0YXRlIGN2dDsKKysKKysgIGN2dC5wYXJzZXIgPSBwYXJzZXI7CisrICBjdnQuc2hvcnRfZW5kID0gcGFyc2VyLT5zaG9ydF9vcHRzOworKyAgY3Z0LmxvbmdfZW5kID0gcGFyc2VyLT5sb25nX29wdHM7CisrICBjdnQuY2hpbGRfaW5wdXRzX2VuZCA9IHBhcnNlci0+Y2hpbGRfaW5wdXRzOworKworKyAgaWYgKGZsYWdzICYgQVJHUF9JTl9PUkRFUikKKysgICAgKmN2dC5zaG9ydF9lbmQrKyA9ICctJzsKKysgIGVsc2UgaWYgKGZsYWdzICYgQVJHUF9OT19BUkdTKQorKyAgICAqY3Z0LnNob3J0X2VuZCsrID0gJysnOworKyAgKmN2dC5zaG9ydF9lbmQgPSAnXDAnOworKworKyAgY3Z0LmxvbmdfZW5kLT5uYW1lID0gTlVMTDsKKysKKysgIHBhcnNlci0+YXJncCA9IGFyZ3A7CisrCisrICBpZiAoYXJncCkKKysgICAgcGFyc2VyLT5lZ3JvdXAgPSBjb252ZXJ0X29wdGlvbnMgKGFyZ3AsIDAsIDAsIHBhcnNlci0+Z3JvdXBzLCAmY3Z0KTsKKysgIGVsc2UKKysgICAgcGFyc2VyLT5lZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgLyogTm8gcGFyc2VycyBhdCBhbGwhICovCisrfQorKworKy8qIExlbmd0aHMgb2YgdmFyaW91cyBwYXJzZXIgZmllbGRzIHdoaWNoIHdlIHdpbGwgYWxsb2NhdGVkLiAgKi8KKytzdHJ1Y3QgcGFyc2VyX3NpemVzCisreworKyAgc2l6ZV90IHNob3J0X2xlbjsgICAgICAgICAgICAvKiBHZXRvcHQgc2hvcnQgb3B0aW9ucyBzdHJpbmcuICAqLworKyAgc2l6ZV90IGxvbmdfbGVuOyAgICAgICAgICAgICAvKiBHZXRvcHQgbG9uZyBvcHRpb25zIHZlY3Rvci4gICovCisrICBzaXplX3QgbnVtX2dyb3VwczsgICAgICAgICAgIC8qIEdyb3VwIHN0cnVjdHVyZXMgd2UgYWxsb2NhdGUuICAqLworKyAgc2l6ZV90IG51bV9jaGlsZF9pbnB1dHM7ICAgICAvKiBDaGlsZCBpbnB1dCBzbG90cy4gICovCisrfTsKKysKKysvKiBGb3IgQVJHUCwgaW5jcmVtZW50cyB0aGUgTlVNX0dST1VQUyBmaWVsZCBpbiBTWlMgYnkgdGhlIHRvdGFsIG51bWJlciBvZgorKyBhcmdwIHN0cnVjdHVyZXMgZGVzY2VuZGVkIGZyb20gaXQsIGFuZCB0aGUgU0hPUlRfTEVOICYgTE9OR19MRU4gZmllbGRzIGJ5CisrIHRoZSBtYXhpbXVtIGxlbmd0aHMgb2YgdGhlIHJlc3VsdGluZyBtZXJnZWQgZ2V0b3B0IHNob3J0IG9wdGlvbnMgc3RyaW5nIGFuZAorKyBsb25nLW9wdGlvbnMgYXJyYXksIHJlc3BlY3RpdmVseS4gICovCisrc3RhdGljIHZvaWQKKytjYWxjX3NpemVzIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgIHN0cnVjdCBwYXJzZXJfc2l6ZXMgKnN6cykKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0ID0gYXJncC0+b3B0aW9uczsKKysKKysgIGlmIChvcHQgfHwgYXJncC0+cGFyc2VyKQorKyAgICB7CisrICAgICAgc3pzLT5udW1fZ3JvdXBzKys7CisrICAgICAgaWYgKG9wdCkKKysgICAgICAgeworKyAgICAgICAgIGludCBudW1fb3B0cyA9IDA7CisrICAgICAgICAgd2hpbGUgKCFfX29wdGlvbl9pc19lbmQgKG9wdCsrKSkKKysgICAgICAgICAgIG51bV9vcHRzKys7CisrICAgICAgICAgc3pzLT5zaG9ydF9sZW4gKz0gbnVtX29wdHMgKiAzOyAvKiBvcHQgKyB1cCB0byAyIGA6J3MgKi8KKysgICAgICAgICBzenMtPmxvbmdfbGVuICs9IG51bV9vcHRzOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIHsKKysgICAgICAgY2FsY19zaXplcyAoKGNoaWxkKyspLT5hcmdwLCBzenMpOworKyAgICAgICBzenMtPm51bV9jaGlsZF9pbnB1dHMrKzsKKysgICAgICB9CisrfQorKworKworK2V4dGVybiBjaGFyICogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAodm9pZCk7CisrLyogSW5pdGlhbGl6ZXMgUEFSU0VSIHRvIHBhcnNlIEFSR1AgaW4gYSBtYW5uZXIgZGVzY3JpYmVkIGJ5IEZMQUdTLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9pbml0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLAorKyAgICAgICAgICAgIGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50IGZsYWdzLCB2b2lkICppbnB1dCkKKyt7CisrICBlcnJvcl90IGVyciA9IDA7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgc3RydWN0IHBhcnNlcl9zaXplcyBzenM7CisrICBzdHJ1Y3QgX2dldG9wdF9kYXRhIG9wdF9kYXRhID0gX0dFVE9QVF9EQVRBX0lOSVRJQUxJWkVSOworKworKyAgc3pzLnNob3J0X2xlbiA9IChmbGFncyAmIEFSR1BfTk9fQVJHUykgPyAwIDogMTsKKysgIHN6cy5sb25nX2xlbiA9IDA7CisrICBzenMubnVtX2dyb3VwcyA9IDA7CisrICBzenMubnVtX2NoaWxkX2lucHV0cyA9IDA7CisrCisrICBpZiAoYXJncCkKKysgICAgY2FsY19zaXplcyAoYXJncCwgJnN6cyk7CisrCisrICAvKiBMZW5ndGhzIG9mIHRoZSB2YXJpb3VzIGJpdHMgb2Ygc3RvcmFnZSB1c2VkIGJ5IFBBUlNFUi4gICovCisrI2RlZmluZSBHTEVOIChzenMubnVtX2dyb3VwcyArIDEpICogc2l6ZW9mIChzdHJ1Y3QgZ3JvdXApCisrI2RlZmluZSBDTEVOIChzenMubnVtX2NoaWxkX2lucHV0cyAqIHNpemVvZiAodm9pZCAqKSkKKysjZGVmaW5lIExMRU4gKChzenMubG9uZ19sZW4gKyAxKSAqIHNpemVvZiAoc3RydWN0IG9wdGlvbikpCisrI2RlZmluZSBTTEVOIChzenMuc2hvcnRfbGVuICsgMSkKKysKKysgIHBhcnNlci0+c3RvcmFnZSA9IG1hbGxvYyAoR0xFTiArIENMRU4gKyBMTEVOICsgU0xFTik7CisrICBpZiAoISBwYXJzZXItPnN0b3JhZ2UpCisrICAgIHJldHVybiBFTk9NRU07CisrCisrICBwYXJzZXItPmdyb3VwcyA9IHBhcnNlci0+c3RvcmFnZTsKKysgIHBhcnNlci0+Y2hpbGRfaW5wdXRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTjsKKysgIHBhcnNlci0+bG9uZ19vcHRzID0gcGFyc2VyLT5zdG9yYWdlICsgR0xFTiArIENMRU47CisrICBwYXJzZXItPnNob3J0X29wdHMgPSBwYXJzZXItPnN0b3JhZ2UgKyBHTEVOICsgQ0xFTiArIExMRU47CisrICBwYXJzZXItPm9wdF9kYXRhID0gb3B0X2RhdGE7CisrCisrICBtZW1zZXQgKHBhcnNlci0+Y2hpbGRfaW5wdXRzLCAwLCBzenMubnVtX2NoaWxkX2lucHV0cyAqIHNpemVvZiAodm9pZCAqKSk7CisrICBwYXJzZXJfY29udmVydCAocGFyc2VyLCBhcmdwLCBmbGFncyk7CisrCisrICBtZW1zZXQgKCZwYXJzZXItPnN0YXRlLCAwLCBzaXplb2YgKHN0cnVjdCBhcmdwX3N0YXRlKSk7CisrICBwYXJzZXItPnN0YXRlLnJvb3RfYXJncCA9IHBhcnNlci0+YXJncDsKKysgIHBhcnNlci0+c3RhdGUuYXJnYyA9IGFyZ2M7CisrICBwYXJzZXItPnN0YXRlLmFyZ3YgPSBhcmd2OworKyAgcGFyc2VyLT5zdGF0ZS5mbGFncyA9IGZsYWdzOworKyAgcGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtID0gc3RkZXJyOworKyAgcGFyc2VyLT5zdGF0ZS5vdXRfc3RyZWFtID0gc3Rkb3V0OworKyAgcGFyc2VyLT5zdGF0ZS5uZXh0ID0gMDsgICAgICAvKiBUZWxsIGdldG9wdCB0byBpbml0aWFsaXplLiAgKi8KKysgIHBhcnNlci0+c3RhdGUucHN0YXRlID0gcGFyc2VyOworKworKyAgcGFyc2VyLT50cnlfZ2V0b3B0ID0gMTsKKysKKysgIC8qIENhbGwgZWFjaCBwYXJzZXIgZm9yIHRoZSBmaXJzdCB0aW1lLCBnaXZpbmcgaXQgYSBjaGFuY2UgdG8gcHJvcGFnYXRlCisrICAgICB2YWx1ZXMgdG8gY2hpbGQgcGFyc2Vycy4gICovCisrICBpZiAocGFyc2VyLT5ncm91cHMgPCBwYXJzZXItPmVncm91cCkKKysgICAgcGFyc2VyLT5ncm91cHMtPmlucHV0ID0gaW5wdXQ7CisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7CisrICAgICAgIGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXAgJiYgKCFlcnIgfHwgZXJyID09IEVCQURLRVkpOworKyAgICAgICBncm91cCsrKQorKyAgICB7CisrICAgICAgaWYgKGdyb3VwLT5wYXJlbnQpCisrICAgICAgIC8qIElmIGEgY2hpbGQgcGFyc2VyLCBnZXQgdGhlIGluaXRpYWwgaW5wdXQgdmFsdWUgZnJvbSB0aGUgcGFyZW50LiAqLworKyAgICAgICBncm91cC0+aW5wdXQgPSBncm91cC0+cGFyZW50LT5jaGlsZF9pbnB1dHNbZ3JvdXAtPnBhcmVudF9pbmRleF07CisrCisrICAgICAgaWYgKCFncm91cC0+cGFyc2VyCisrICAgICAgICAgJiYgZ3JvdXAtPmFyZ3AtPmNoaWxkcmVuICYmIGdyb3VwLT5hcmdwLT5jaGlsZHJlbi0+YXJncCkKKysgICAgICAgLyogRm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgbm8gcGFyc2luZyBmdW5jdGlvbiBpcyBzdXBwbGllZCBmb3IgYW4KKysgICAgICAgICAgYXJncCwgcHJvcGFnYXRlIGl0cyBpbnB1dCB0byBpdHMgZmlyc3QgY2hpbGQsIGlmIGFueSAodGhpcyBqdXN0CisrICAgICAgICAgIG1ha2VzIHZlcnkgc2ltcGxlIHdyYXBwZXIgYXJncHMgbW9yZSBjb252ZW5pZW50KS4gICovCisrICAgICAgIGdyb3VwLT5jaGlsZF9pbnB1dHNbMF0gPSBncm91cC0+aW5wdXQ7CisrCisrICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfSU5JVCwgMCk7CisrICAgIH0KKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgZXJyID0gMDsgICAgICAgICAgICAgICAgICAgLyogU29tZSBwYXJzZXIgZGlkbid0IHVuZGVyc3RhbmQuICAqLworKworKyAgaWYgKGVycikKKysgICAgcmV0dXJuIGVycjsKKysKKysgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19FUlJTKQorKyAgICB7CisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRlcnIgPSAwOworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9QQVJTRV9BUkdWMCkKKysgICAgICAgLyogZ2V0b3B0IGFsd2F5cyBza2lwcyBBUkdWWzBdLCBzbyB3ZSBoYXZlIHRvIGZha2UgaXQgb3V0LiAgQXMgbG9uZworKyAgICAgICAgICBhcyBPUFRFUlIgaXMgMCwgdGhlbiBpdCBzaG91bGRuJ3QgYWN0dWFsbHkgdHJ5IHRvIGFjY2VzcyBpdC4gICovCisrICAgICAgIHBhcnNlci0+c3RhdGUuYXJndi0tLCBwYXJzZXItPnN0YXRlLmFyZ2MrKzsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGVyciA9IDE7ICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2VzLiAgKi8KKysKKysgIGlmIChwYXJzZXItPnN0YXRlLmFyZ3YgPT0gYXJndiAmJiBhcmd2WzBdKQorKyAgICAvKiBUaGVyZSdzIGFuIGFyZ3ZbMF07IHVzZSBpdCBmb3IgbWVzc2FnZXMuICAqLworKyAgICB7CisrICAgICAgY2hhciAqc2hvcnRfbmFtZSA9IHN0cnJjaHIgKGFyZ3ZbMF0sICcvJyk7CisrICAgICAgcGFyc2VyLT5zdGF0ZS5uYW1lID0gc2hvcnRfbmFtZSA/IHNob3J0X25hbWUgKyAxIDogYXJndlswXTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJzZXItPnN0YXRlLm5hbWUgPSBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpOworKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIEZyZWUgYW55IHN0b3JhZ2UgY29uc3VtZWQgYnkgUEFSU0VSIChidXQgbm90IFBBUlNFUiBpdHNlbGYpLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9maW5hbGl6ZSAoc3RydWN0IHBhcnNlciAqcGFyc2VyLAorKyAgICAgICAgICAgICAgICBlcnJvcl90IGVyciwgaW50IGFyZ19lYmFka2V5LCBpbnQgKmVuZF9pbmRleCkKKyt7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKworKyAgaWYgKGVyciA9PSBFQkFES0VZICYmIGFyZ19lYmFka2V5KQorKyAgICAvKiBTdXBwcmVzcyBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHVucGFyc2VkIGFyZ3VtZW50cy4gICovCisrICAgIGVyciA9IDA7CisrCisrICBpZiAoISBlcnIpCisrICAgIHsKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID09IHBhcnNlci0+c3RhdGUuYXJnYykKKysgICAgICAgLyogV2Ugc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbGwgYXJndW1lbnRzISAgQ2FsbCBhbGwgdGhlIHBhcnNlcnMgYWdhaW4sCisrICAgICAgICAgIGp1c3QgYSBmZXcgbW9yZSB0aW1lcy4uLiAqLworKyAgICAgICB7CisrICAgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOworKyAgICAgICAgICAgICAgZ3JvdXAgPCBwYXJzZXItPmVncm91cCAmJiAoIWVyciB8fCBlcnI9PUVCQURLRVkpOworKyAgICAgICAgICAgICAgZ3JvdXArKykKKysgICAgICAgICAgIGlmIChncm91cC0+YXJnc19wcm9jZXNzZWQgPT0gMCkKKysgICAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfTk9fQVJHUywgMCk7CisrICAgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+ZWdyb3VwIC0gMTsKKysgICAgICAgICAgICAgIGdyb3VwID49IHBhcnNlci0+Z3JvdXBzICYmICghZXJyIHx8IGVycj09RUJBREtFWSk7CisrICAgICAgICAgICAgICBncm91cC0tKQorKyAgICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfRU5ELCAwKTsKKysKKysgICAgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgICAgICBlcnIgPSAwOyAgICAgICAgICAgIC8qIFNvbWUgcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kLiAgKi8KKysKKysgICAgICAgICAvKiBUZWxsIHRoZSB1c2VyIHRoYXQgYWxsIGFyZ3VtZW50cyBhcmUgcGFyc2VkLiAgKi8KKysgICAgICAgICBpZiAoZW5kX2luZGV4KQorKyAgICAgICAgICAgKmVuZF9pbmRleCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKGVuZF9pbmRleCkKKysgICAgICAgLyogUmV0dXJuIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSB1c2VyLiAgKi8KKysgICAgICAgKmVuZF9pbmRleCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICBlbHNlCisrICAgICAgIC8qIE5vIHdheSB0byByZXR1cm4gdGhlIHJlbWFpbmluZyBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBib2d1cy4gKi8KKysgICAgICAgeworKyAgICAgICAgIGlmICghKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX05PX0VSUlMpCisrICAgICAgICAgICAgICYmIHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSkKKysgICAgICAgICAgIGZwcmludGYgKHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogVG9vIG1hbnkgYXJndW1lbnRzXG4iKSwKKysgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+c3RhdGUubmFtZSk7CisrICAgICAgICAgZXJyID0gRUJBREtFWTsKKysgICAgICAgfQorKyAgICB9CisrCisrICAvKiBPa2F5LCB3ZSdyZSBhbGwgZG9uZSwgd2l0aCBlaXRoZXIgYW4gZXJyb3Igb3Igc3VjY2VzczsgY2FsbCB0aGUgcGFyc2VycworKyAgICAgdG8gaW5kaWNhdGUgd2hpY2ggb25lLiAgKi8KKysKKysgIGlmIChlcnIpCisrICAgIHsKKysgICAgICAvKiBNYXliZSBwcmludCBhbiBlcnJvciBtZXNzYWdlLiAgKi8KKysgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgIC8qIEFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0IHRoZSBlcnJvciB3YXMgc2hvdWxkIGhhdmUKKysgICAgICAgICAgYmVlbiBwcmludGVkIGVhcmxpZXIuICAqLworKyAgICAgICBhcmdwX3N0YXRlX2hlbHAgKCZwYXJzZXItPnN0YXRlLCBwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdQX0hFTFBfU1REX0VSUik7CisrCisrICAgICAgLyogU2luY2Ugd2UgZGlkbid0IGV4aXQsIGdpdmUgZWFjaCBwYXJzZXIgYW4gZXJyb3IgaW5kaWNhdGlvbi4gICovCisrICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwOyBncm91cCsrKQorKyAgICAgICBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9FUlJPUiwgMCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogTm90aWZ5IHBhcnNlcnMgb2Ygc3VjY2VzcywgYW5kIHByb3BhZ2F0ZSBiYWNrIHZhbHVlcyBmcm9tIHBhcnNlcnMuICAqLworKyAgICB7CisrICAgICAgLyogV2UgcGFzcyBvdmVyIHRoZSBncm91cHMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGNoaWxkIGdyb3VwcyBhcmUKKysgICAgICAgIGdpdmVuIGEgY2hhbmNlIHRvIGRvIHRoZXJlIHByb2Nlc3NpbmcgYmVmb3JlIHBhc3NpbmcgYmFjayBhIHZhbHVlIHRvCisrICAgICAgICB0aGUgcGFyZW50LiAgKi8KKysgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5lZ3JvdXAgLSAxCisrICAgICAgICAgIDsgZ3JvdXAgPj0gcGFyc2VyLT5ncm91cHMgJiYgKCFlcnIgfHwgZXJyID09IEVCQURLRVkpCisrICAgICAgICAgIDsgZ3JvdXAtLSkKKysgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwgQVJHUF9LRVlfU1VDQ0VTUywgMCk7CisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICBlcnIgPSAwOyAgICAgICAgICAgICAgICAvKiBTb21lIHBhcnNlciBkaWRuJ3QgdW5kZXJzdGFuZC4gICovCisrICAgIH0KKysKKysgIC8qIENhbGwgcGFyc2VycyBvbmNlIG1vcmUsIHRvIGRvIGFueSBmaW5hbCBjbGVhbnVwLiAgRXJyb3JzIGFyZSBpZ25vcmVkLiAgKi8KKysgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmVncm91cCAtIDE7IGdyb3VwID49IHBhcnNlci0+Z3JvdXBzOyBncm91cC0tKQorKyAgICBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9GSU5JLCAwKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgZXJyID0gRUlOVkFMOworKworKyAgZnJlZSAocGFyc2VyLT5zdG9yYWdlKTsKKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIENhbGwgdGhlIHVzZXIgcGFyc2VycyB0byBwYXJzZSB0aGUgbm9uLW9wdGlvbiBhcmd1bWVudCBWQUwsIGF0IHRoZSBjdXJyZW50CisrICAgcG9zaXRpb24sIHJldHVybmluZyBhbnkgZXJyb3IuICBUaGUgc3RhdGUgTkVYVCBwb2ludGVyIGlzIGFzc3VtZWQgdG8gaGF2ZQorKyAgIGJlZW4gYWRqdXN0ZWQgKGJ5IGdldG9wdCkgdG8gcG9pbnQgYWZ0ZXIgdGhpcyBhcmd1bWVudDsgdGhpcyBmdW5jdGlvbiB3aWxsCisrICAgYWRqdXN0IGl0IGNvcnJlY3RseSB0byByZWZsZWN0IGhvd2V2ZXIgbWFueSBhcmdzIGFjdHVhbGx5IGVuZCB1cCBiZWluZworKyAgIGNvbnN1bWVkLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlcl9wYXJzZV9hcmcgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgY2hhciAqdmFsKQorK3sKKysgIC8qIFNhdmUgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIE5FWFQsIGZpcnN0IGFkanVzdGluZyBpdCBzbyB0aGF0IHRoZSBhcmcKKysgICAgIHdlJ3JlIHBhcnNpbmcgaXMgYWdhaW4gdGhlIGZyb250IG9mIHRoZSBhcmcgdmVjdG9yLiAgKi8KKysgIGludCBpbmRleCA9IC0tcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgZXJyb3JfdCBlcnIgPSBFQkFES0VZOworKyAgc3RydWN0IGdyb3VwICpncm91cDsKKysgIGludCBrZXkgPSAwOyAgICAgICAgICAgICAgICAgLyogV2hpY2ggb2YgQVJHUF9LRVlfQVJHW1NdIHdlIHVzZWQuICAqLworKworKyAgLyogVHJ5IHRvIHBhcnNlIHRoZSBhcmd1bWVudCBpbiBlYWNoIHBhcnNlci4gICovCisrICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHMKKysgICAgICAgOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwICYmIGVyciA9PSBFQkFES0VZCisrICAgICAgIDsgZ3JvdXArKykKKysgICAgeworKyAgICAgIHBhcnNlci0+c3RhdGUubmV4dCsrOyAgICAvKiBGb3IgQVJHUF9LRVlfQVJHLCBjb25zdW1lIHRoZSBhcmcuICAqLworKyAgICAgIGtleSA9IEFSR1BfS0VZX0FSRzsKKysgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBrZXksIHZhbCk7CisrCisrICAgICAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAgICAvKiBUaGlzIHBhcnNlciBkb2Vzbid0IGxpa2UgQVJHUF9LRVlfQVJHOyB0cnkgQVJHUF9LRVlfQVJHUyBpbnN0ZWFkLiAqLworKyAgICAgICB7CisrICAgICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0LS07IC8qIEZvciBBUkdQX0tFWV9BUkdTLCBwdXQgYmFjayB0aGUgYXJnLiAgKi8KKysgICAgICAgICBrZXkgPSBBUkdQX0tFWV9BUkdTOworKyAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIGtleSwgMCk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKCEgZXJyKQorKyAgICB7CisrICAgICAgaWYgKGtleSA9PSBBUkdQX0tFWV9BUkdTKQorKyAgICAgICAvKiBUaGUgZGVmYXVsdCBmb3IgQVJHUF9LRVlfQVJHUyBpcyB0byBhc3N1bWUgdGhhdCBpZiBORVhUIGlzbid0CisrICAgICAgICAgIGNoYW5nZWQgYnkgdGhlIHVzZXIsICphbGwqIGFyZ3VtZW50cyBzaG91bGQgYmUgY29uc2lkZXJlZAorKyAgICAgICAgICBjb25zdW1lZC4gICovCisrICAgICAgIHBhcnNlci0+c3RhdGUubmV4dCA9IHBhcnNlci0+c3RhdGUuYXJnYzsKKysKKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID4gaW5kZXgpCisrICAgICAgIC8qIFJlbWVtYmVyIHRoYXQgd2Ugc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBhIG5vbi1vcHRpb24KKysgICAgICAgICAgYXJndW1lbnQgLS0gYnV0IG9ubHkgaWYgdGhlIHVzZXIgaGFzbid0IGdvdHRlbiB0cmlja3kgYW5kIHNldAorKyAgICAgICAgICB0aGUgY2xvY2sgYmFjay4gICovCisrICAgICAgICgtLWdyb3VwKS0+YXJnc19wcm9jZXNzZWQgKz0gKHBhcnNlci0+c3RhdGUubmV4dCAtIGluZGV4KTsKKysgICAgICBlbHNlCisrICAgICAgIC8qIFRoZSB1c2VyIHdhbnRzIHRvIHJlcGFyc2Ugc29tZSBhcmdzLCBnaXZlIGdldG9wdCBhbm90aGVyIHRyeS4gICovCisrICAgICAgIHBhcnNlci0+dHJ5X2dldG9wdCA9IDE7CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIENhbGwgdGhlIHVzZXIgcGFyc2VycyB0byBwYXJzZSB0aGUgb3B0aW9uIE9QVCwgd2l0aCBhcmd1bWVudCBWQUwsIGF0IHRoZQorKyAgIGN1cnJlbnQgcG9zaXRpb24sIHJldHVybmluZyBhbnkgZXJyb3IuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX29wdCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBpbnQgb3B0LCBjaGFyICp2YWwpCisreworKyAgLyogVGhlIGdyb3VwIGtleSBlbmNvZGVkIGluIHRoZSBoaWdoIGJpdHM7IDAgZm9yIHNob3J0IG9wdHMgb3IKKysgICAgIGdyb3VwX251bWJlciArIDEgZm9yIGxvbmcgb3B0cy4gICovCisrICBpbnQgZ3JvdXBfa2V5ID0gb3B0ID4+IFVTRVJfQklUUzsKKysgIGVycm9yX3QgZXJyID0gRUJBREtFWTsKKysKKysgIGlmIChncm91cF9rZXkgPT0gMCkKKysgICAgLyogQSBzaG9ydCBvcHRpb24uICBCeSBjb21wYXJpbmcgT1BUJ3MgcG9zaXRpb24gaW4gU0hPUlRfT1BUUyB0byB0aGUKKysgICAgICAgdmFyaW91cyBzdGFydGluZyBwb3NpdGlvbnMgaW4gZWFjaCBncm91cCdzIFNIT1JUX0VORCBmaWVsZCwgd2UgY2FuCisrICAgICAgIGRldGVybWluZSB3aGljaCBncm91cCBPUFQgY2FtZSBmcm9tLiAgKi8KKysgICAgeworKyAgICAgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICAgICAgY2hhciAqc2hvcnRfaW5kZXggPSBzdHJjaHIgKHBhcnNlci0+c2hvcnRfb3B0cywgb3B0KTsKKysKKysgICAgICBpZiAoc2hvcnRfaW5kZXgpCisrICAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgICBpZiAoZ3JvdXAtPnNob3J0X2VuZCA+IHNob3J0X2luZGV4KQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGFyZyk7CisrICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIC8qIEEgbG9uZyBvcHRpb24uICBXZSB1c2Ugc2hpZnRzIGluc3RlYWQgb2YgbWFza2luZyBmb3IgZXh0cmFjdGluZworKyAgICAgICB0aGUgdXNlciB2YWx1ZSBpbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGUgc2lnbi4gICovCisrICAgIGVyciA9CisrICAgICAgZ3JvdXBfcGFyc2UgKCZwYXJzZXItPmdyb3Vwc1tncm91cF9rZXkgLSAxXSwgJnBhcnNlci0+c3RhdGUsCisrICAgICAgICAgICAgICAgICAgKG9wdCA8PCBHUk9VUF9CSVRTKSA+PiBHUk9VUF9CSVRTLAorKyAgICAgICAgICAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgLyogQXQgbGVhc3QgY3VycmVudGx5LCBhbiBvcHRpb24gbm90IHJlY29nbml6ZWQgaXMgYW4gZXJyb3IgaW4gdGhlCisrICAgICAgIHBhcnNlciwgYmVjYXVzZSB3ZSBwcmUtY29tcHV0ZSB3aGljaCBwYXJzZXIgaXMgc3VwcG9zZWQgdG8gZGVhbAorKyAgICAgICB3aXRoIGVhY2ggb3B0aW9uLiAgKi8KKysgICAgeworKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGJhZF9rZXlfZXJyW10gPQorKyAgICAgICBOXygiKFBST0dSQU0gRVJST1IpIE9wdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHJlY29nbml6ZWQhPyIpOworKyAgICAgIGlmIChncm91cF9rZXkgPT0gMCkKKysgICAgICAgYXJncF9lcnJvciAoJnBhcnNlci0+c3RhdGUsICItJWM6ICVzIiwgb3B0LAorKyAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLCBiYWRfa2V5X2VycikpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0ID0gcGFyc2VyLT5sb25nX29wdHM7CisrICAgICAgICAgd2hpbGUgKGxvbmdfb3B0LT52YWwgIT0gb3B0ICYmIGxvbmdfb3B0LT5uYW1lKQorKyAgICAgICAgICAgbG9uZ19vcHQrKzsKKysgICAgICAgICBhcmdwX2Vycm9yICgmcGFyc2VyLT5zdGF0ZSwgIi0tJXM6ICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfb3B0LT5uYW1lID8gbG9uZ19vcHQtPm5hbWUgOiAiPz8/IiwKKysgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChwYXJzZXItPmFyZ3AtPmFyZ3BfZG9tYWluLCBiYWRfa2V5X2VycikpOworKyAgICAgICB9CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFBhcnNlIHRoZSBuZXh0IGFyZ3VtZW50IGluIFBBUlNFUiAoYXMgaW5kaWNhdGVkIGJ5IFBBUlNFUi0+c3RhdGUubmV4dCkuCisrICAgQW55IGVycm9yIGZyb20gdGhlIHBhcnNlcnMgaXMgcmV0dXJuZWQsIGFuZCAqQVJHUF9FQkFES0VZIGluZGljYXRlcworKyAgIHdoZXRoZXIgYSB2YWx1ZSBvZiBFQkFES0VZIGlzIGR1ZSB0byBhbiB1bnJlY29nbml6ZWQgYXJndW1lbnQgKHdoaWNoIGlzCisrICAgZ2VuZXJhbGx5IG5vdCBmYXRhbCkuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX25leHQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgaW50ICphcmdfZWJhZGtleSkKKyt7CisrICBpbnQgb3B0OworKyAgZXJyb3JfdCBlcnIgPSAwOworKworKyAgaWYgKHBhcnNlci0+c3RhdGUucXVvdGVkICYmIHBhcnNlci0+c3RhdGUubmV4dCA8IHBhcnNlci0+c3RhdGUucXVvdGVkKQorKyAgICAvKiBUaGUgbmV4dCBhcmd1bWVudCBwb2ludGVyIGhhcyBiZWVuIG1vdmVkIHRvIGJlZm9yZSB0aGUgcXVvdGVkCisrICAgICAgIHJlZ2lvbiwgc28gcHJldGVuZCB3ZSBuZXZlciBzYXcgdGhlIHF1b3RpbmcgYC0tJywgYW5kIGdpdmUgZ2V0b3B0CisrICAgICAgIGFub3RoZXIgY2hhbmNlLiAgSWYgdGhlIHVzZXIgaGFzbid0IHJlbW92ZWQgaXQsIGdldG9wdCB3aWxsIGp1c3QKKysgICAgICAgcHJvY2VzcyBpdCBhZ2Fpbi4gICovCisrICAgIHBhcnNlci0+c3RhdGUucXVvdGVkID0gMDsKKysKKysgIGlmIChwYXJzZXItPnRyeV9nZXRvcHQgJiYgIXBhcnNlci0+c3RhdGUucXVvdGVkKQorKyAgICAvKiBHaXZlIGdldG9wdCBhIGNoYW5jZSB0byBwYXJzZSB0aGlzLiAgKi8KKysgICAgeworKyAgICAgIC8qIFB1dCBpdCBiYWNrIGluIE9QVElORCBmb3IgZ2V0b3B0LiAgKi8KKysgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGluZCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAvKiBEaXN0aW5ndWlzaCBLRVlfRVJSIGZyb20gYSByZWFsIG9wdGlvbi4gICovCisrICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRvcHQgPSBLRVlfRU5EOworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9MT05HX09OTFkpCisrICAgICAgIG9wdCA9IF9nZXRvcHRfbG9uZ19vbmx5X3IgKHBhcnNlci0+c3RhdGUuYXJnYywgcGFyc2VyLT5zdGF0ZS5hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnNob3J0X29wdHMsIHBhcnNlci0+bG9uZ19vcHRzLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VyLT5vcHRfZGF0YSk7CisrICAgICAgZWxzZQorKyAgICAgICBvcHQgPSBfZ2V0b3B0X2xvbmdfciAocGFyc2VyLT5zdGF0ZS5hcmdjLCBwYXJzZXItPnN0YXRlLmFyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXItPnNob3J0X29wdHMsIHBhcnNlci0+bG9uZ19vcHRzLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+b3B0X2RhdGEpOworKyAgICAgIC8qIEFuZCBzZWUgd2hhdCBnZXRvcHQgZGlkLiAgKi8KKysgICAgICBwYXJzZXItPnN0YXRlLm5leHQgPSBwYXJzZXItPm9wdF9kYXRhLm9wdGluZDsKKysKKysgICAgICBpZiAob3B0ID09IEtFWV9FTkQpCisrICAgICAgIC8qIEdldG9wdCBzYXlzIHRoZXJlIGFyZSBubyBtb3JlIG9wdGlvbnMsIHNvIHN0b3AgdXNpbmcKKysgICAgICAgICAgZ2V0b3B0OyB3ZSdsbCBjb250aW51ZSBpZiBuZWNlc3Nhcnkgb24gb3VyIG93bi4gICovCisrICAgICAgIHsKKysgICAgICAgICBwYXJzZXItPnRyeV9nZXRvcHQgPSAwOworKyAgICAgICAgIGlmIChwYXJzZXItPnN0YXRlLm5leHQgPiAxCisrICAgICAgICAgICAgICYmIHN0cmNtcCAocGFyc2VyLT5zdGF0ZS5hcmd2W3BhcnNlci0+c3RhdGUubmV4dCAtIDFdLCBRVU9URSkKKysgICAgICAgICAgICAgICAgICA9PSAwKQorKyAgICAgICAgICAgLyogTm90IG9ubHkgaXMgdGhpcyB0aGUgZW5kIG9mIHRoZSBvcHRpb25zLCBidXQgaXQncyBhCisrICAgICAgICAgICAgICBgcXVvdGVkJyByZWdpb24sIHdoaWNoIG1heSBoYXZlIGFyZ3MgdGhhdCAqbG9vayogbGlrZQorKyAgICAgICAgICAgICAgb3B0aW9ucywgc28gd2UgZGVmaW5pdGVseSBzaG91bGRuJ3QgdHJ5IHRvIHVzZSBnZXRvcHQgcGFzdAorKyAgICAgICAgICAgICAgaGVyZSwgd2hhdGV2ZXIgaGFwcGVucy4gICovCisrICAgICAgICAgICBwYXJzZXItPnN0YXRlLnF1b3RlZCA9IHBhcnNlci0+c3RhdGUubmV4dDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKG9wdCA9PSBLRVlfRVJSICYmIHBhcnNlci0+b3B0X2RhdGEub3B0b3B0ICE9IEtFWV9FTkQpCisrICAgICAgIC8qIEtFWV9FUlIgY2FuIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgYSB2YWxpZCB1c2VyIHNob3J0CisrICAgICAgICAgIG9wdGlvbiwgYnV0IGluIHRoZSBjYXNlIG9mIGEgcmVhbCBlcnJvciwgZ2V0b3B0IHNldHMgT1BUT1BUCisrICAgICAgICAgIHRvIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyLCB3aGljaCBjYW4gbmV2ZXIgYmUgS0VZX0VORC4gICovCisrICAgICAgIHsKKysgICAgICAgICAqYXJnX2ViYWRrZXkgPSAwOworKyAgICAgICAgIHJldHVybiBFQkFES0VZOworKyAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgb3B0ID0gS0VZX0VORDsKKysKKysgIGlmIChvcHQgPT0gS0VZX0VORCkKKysgICAgeworKyAgICAgIC8qIFdlJ3JlIHBhc3Qgd2hhdCBnZXRvcHQgY29uc2lkZXJzIHRoZSBvcHRpb25zLiAgKi8KKysgICAgICBpZiAocGFyc2VyLT5zdGF0ZS5uZXh0ID49IHBhcnNlci0+c3RhdGUuYXJnYworKyAgICAgICAgIHx8IChwYXJzZXItPnN0YXRlLmZsYWdzICYgQVJHUF9OT19BUkdTKSkKKysgICAgICAgLyogSW5kaWNhdGUgdGhhdCB3ZSdyZSBkb25lLiAgKi8KKysgICAgICAgeworKyAgICAgICAgICphcmdfZWJhZGtleSA9IDE7CisrICAgICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIC8qIEEgbm9uLW9wdGlvbiBhcmc7IHNpbXVsYXRlIHdoYXQgZ2V0b3B0IG1pZ2h0IGhhdmUgZG9uZS4gICovCisrICAgICAgIHsKKysgICAgICAgICBvcHQgPSBLRVlfQVJHOworKyAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnID0gcGFyc2VyLT5zdGF0ZS5hcmd2W3BhcnNlci0+c3RhdGUubmV4dCsrXTsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAob3B0ID09IEtFWV9BUkcpCisrICAgIC8qIEEgbm9uLW9wdGlvbiBhcmd1bWVudDsgdHJ5IGVhY2ggcGFyc2VyIGluIHR1cm4uICAqLworKyAgICBlcnIgPSBwYXJzZXJfcGFyc2VfYXJnIChwYXJzZXIsIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysgIGVsc2UKKysgICAgZXJyID0gcGFyc2VyX3BhcnNlX29wdCAocGFyc2VyLCBvcHQsIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysKKysgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgKmFyZ19lYmFka2V5ID0gKG9wdCA9PSBLRVlfRU5EIHx8IG9wdCA9PSBLRVlfQVJHKTsKKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFBhcnNlIHRoZSBvcHRpb25zIHN0cmluZ3MgaW4gQVJHQyAmIEFSR1YgYWNjb3JkaW5nIHRvIHRoZSBhcmdwIGluIEFSR1AuCisrICAgRkxBR1MgaXMgb25lIG9mIHRoZSBBUkdQXyBmbGFncyBhYm92ZS4gIElmIEVORF9JTkRFWCBpcyBub24tTlVMTCwgdGhlCisrICAgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QgdW5wYXJzZWQgb3B0aW9uIGlzIHJldHVybmVkIGluIGl0LiAgSWYgYW4KKysgICB1bmtub3duIG9wdGlvbiBpcyBwcmVzZW50LCBFSU5WQUwgaXMgcmV0dXJuZWQ7IGlmIHNvbWUgcGFyc2VyIHJvdXRpbmUKKysgICByZXR1cm5lZCBhIG5vbi16ZXJvIHZhbHVlLCBpdCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuICAqLworK2Vycm9yX3QKKythcmdwX3BhcnNlIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCB1bnNpZ25lZCBmbGFncywKKysgICAgICAgICAgICAgaW50ICplbmRfaW5kZXgsIHZvaWQgKmlucHV0KQorK3sKKysgIGVycm9yX3QgZXJyOworKyAgc3RydWN0IHBhcnNlciBwYXJzZXI7CisrCisrICAvKiBJZiB0cnVlLCB0aGVuIGVyciA9PSBFQkFES0VZIGlzIGEgcmVzdWx0IG9mIGEgbm9uLW9wdGlvbiBhcmd1bWVudCBmYWlsaW5nCisrICAgICB0byBiZSBwYXJzZWQgKHdoaWNoIGluIHNvbWUgY2FzZXMgaXNuJ3QgYWN0dWFsbHkgYW4gZXJyb3IpLiAgKi8KKysgIGludCBhcmdfZWJhZGtleSA9IDA7CisrCisrICBpZiAoISAoZmxhZ3MgJiBBUkdQX05PX0hFTFApKQorKyAgICAvKiBBZGQgb3VyIG93biBvcHRpb25zLiAgKi8KKysgICAgeworKyAgICAgIHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFsbG9jYSAoNCAqIHNpemVvZiAoc3RydWN0IGFyZ3BfY2hpbGQpKTsKKysgICAgICBzdHJ1Y3QgYXJncCAqdG9wX2FyZ3AgPSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGFyZ3ApKTsKKysKKysgICAgICAvKiBUT1BfQVJHUCBoYXMgbm8gb3B0aW9ucywgaXQganVzdCBzZXJ2ZXMgdG8gZ3JvdXAgdGhlIHVzZXIgJiBkZWZhdWx0CisrICAgICAgICBhcmdwcy4gICovCisrICAgICAgbWVtc2V0ICh0b3BfYXJncCwgMCwgc2l6ZW9mICgqdG9wX2FyZ3ApKTsKKysgICAgICB0b3BfYXJncC0+Y2hpbGRyZW4gPSBjaGlsZDsKKysKKysgICAgICBtZW1zZXQgKGNoaWxkLCAwLCA0ICogc2l6ZW9mIChzdHJ1Y3QgYXJncF9jaGlsZCkpOworKworKyAgICAgIGlmIChhcmdwKQorKyAgICAgICAoY2hpbGQrKyktPmFyZ3AgPSBhcmdwOworKyAgICAgIChjaGlsZCsrKS0+YXJncCA9ICZhcmdwX2RlZmF1bHRfYXJncDsKKysgICAgICBpZiAoYXJncF9wcm9ncmFtX3ZlcnNpb24gfHwgYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykKKysgICAgICAgKGNoaWxkKyspLT5hcmdwID0gJmFyZ3BfdmVyc2lvbl9hcmdwOworKyAgICAgIGNoaWxkLT5hcmdwID0gMDsKKysKKysgICAgICBhcmdwID0gdG9wX2FyZ3A7CisrICAgIH0KKysKKysgIC8qIENvbnN0cnVjdCBhIHBhcnNlciBmb3IgdGhlc2UgYXJndW1lbnRzLiAgKi8KKysgIGVyciA9IHBhcnNlcl9pbml0ICgmcGFyc2VyLCBhcmdwLCBhcmdjLCBhcmd2LCBmbGFncywgaW5wdXQpOworKworKyAgaWYgKCEgZXJyKQorKyAgICAvKiBQYXJzZSEgKi8KKysgICAgeworKyAgICAgIHdoaWxlICghIGVycikKKysgICAgICAgZXJyID0gcGFyc2VyX3BhcnNlX25leHQgKCZwYXJzZXIsICZhcmdfZWJhZGtleSk7CisrICAgICAgZXJyID0gcGFyc2VyX2ZpbmFsaXplICgmcGFyc2VyLCBlcnIsIGFyZ19lYmFka2V5LCBlbmRfaW5kZXgpOworKyAgICB9CisrCisrICByZXR1cm4gZXJyOworK30KKysKKysvKiBSZXR1cm4gdGhlIGlucHV0IGZpZWxkIGZvciBBUkdQIGluIHRoZSBwYXJzZXIgY29ycmVzcG9uZGluZyB0byBTVEFURTsgdXNlZAorKyAgIGJ5IHRoZSBoZWxwIHJvdXRpbmVzLiAgKi8KKyt2b2lkICoKKytfX2FyZ3BfaW5wdXQgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgaWYgKHN0YXRlKQorKyAgICB7CisrICAgICAgc3RydWN0IGdyb3VwICpncm91cDsKKysgICAgICBzdHJ1Y3QgcGFyc2VyICpwYXJzZXIgPSBzdGF0ZS0+cHN0YXRlOworKworKyAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsgZ3JvdXAgPCBwYXJzZXItPmVncm91cDsgZ3JvdXArKykKKysgICAgICAgaWYgKGdyb3VwLT5hcmdwID09IGFyZ3ApCisrICAgICAgICAgcmV0dXJuIGdyb3VwLT5pbnB1dDsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtcHYuYyBiL2xpYnVhcmdwL2FyZ3AtcHYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYxMjI3YjUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcHYuYworQEAgLTAsMCArMSwyNSBAQAorKy8qIERlZmF1bHQgZGVmaW5pdGlvbiBmb3IgQVJHUF9QUk9HUkFNX1ZFUlNJT04uCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQgb3B0aW9uCisrICAgLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaCB3aWxsCisrICAgcHJpbnQgdGhpcyB0aGlzIHN0cmluZyBmb2xsb3dlZCBieSBhIG5ld2xpbmUgYW5kIGV4aXQgKHVubGVzcyB0aGUKKysgICBBUkdQX05PX0VYSVQgZmxhZyBpcyB1c2VkKS4gIE92ZXJyaWRkZW4gYnkgQVJHUF9QUk9HUkFNX1ZFUlNJT05fSE9PSy4gICovCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb247CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1wdmguYyBiL2xpYnVhcmdwL2FyZ3AtcHZoLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZjFkOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXB2aC5jCitAQCAtMCwwICsxLDMyIEBACisrLyogRGVmYXVsdCBkZWZpbml0aW9uIGZvciBBUkdQX1BST0dSQU1fVkVSU0lPTl9IT09LLgorKyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0gdG8gYSBub24temVybyB2YWx1ZSwgdGhlbiBhIGRlZmF1bHQgb3B0aW9uCisrICAgLS12ZXJzaW9uIGlzIGFkZGVkICh1bmxlc3MgdGhlIEFSR1BfTk9fSEVMUCBmbGFnIGlzIHVzZWQpLCB3aGljaCBjYWxscworKyAgIHRoaXMgZnVuY3Rpb24gd2l0aCBhIHN0cmVhbSB0byBwcmludCB0aGUgdmVyc2lvbiB0byBhbmQgYSBwb2ludGVyIHRvIHRoZQorKyAgIGN1cnJlbnQgcGFyc2luZyBzdGF0ZSwgYW5kIHRoZW4gZXhpdHMgKHVubGVzcyB0aGUgQVJHUF9OT19FWElUIGZsYWcgaXMKKysgICB1c2VkKS4gIFRoaXMgdmFyaWFibGUgdGFrZXMgcHJlY2VkZW50IG92ZXIgQVJHUF9QUk9HUkFNX1ZFUlNJT04uICAqLworK3ZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqc3RyZWFtLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AteGlubC5jIGIvbGlidWFyZ3AvYXJncC14aW5sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMWQzMDAwCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLXhpbmwuYworQEAgLTAsMCArMSwzNSBAQAorKy8qIFJlYWwgZGVmaW5pdGlvbnMgZm9yIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIGluIGFyZ3AuaAorKyAgIENvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfRkVBVFVSRVNfSAorKyMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVVNFX0VYVEVSTl9JTkxJTkVTCisrIyBkZWZpbmUgX19VU0VfRVhURVJOX0lOTElORVMgIDEKKysjZW5kaWYKKysjZGVmaW5lIEFSR1BfRUkKKysjdW5kZWYgX19PUFRJTUlaRV9fCisrI2RlZmluZSBfX09QVElNSVpFX18gMQorKyNpbmNsdWRlIDxhcmdwLmg+CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL01ha2VmaWxlIGIvdGVzdC9hcmdwL01ha2VmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjE2ZmU3MQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL01ha2VmaWxlCitAQCAtMCwwICsxLDcgQEAKKysjIHVDbGliYyBhcmdwIHRlc3RzCisrIyBMaWNlbnNlZCB1bmRlciB0aGUgTEdQTCB2Mi4xLCBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIgaW4gdGhpcyB0YXJiYWxsLgorKworK3RvcF9idWlsZGRpcj0uLi8uLi8KKytpbmNsdWRlIC4uL1J1bGVzLm1haworKy1pbmNsdWRlIE1ha2VmaWxlLmluCisraW5jbHVkZSAuLi9UZXN0Lm1haworZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9NYWtlZmlsZS5pbiBiL3Rlc3QvYXJncC9NYWtlZmlsZS5pbgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ4MWIzNTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9NYWtlZmlsZS5pbgorQEAgLTAsMCArMSwxMiBAQAorKyMgdUNsaWJjIGFyZ3AgdGVzdHMKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrCisrVEVTVFMgOj0gJChhZGRwcmVmaXggYXJncC0sIGV4MSBleDIgZXgzIGV4NCB0ZXN0KSBcCisrICAgICAgICAgYnVnLWFyZ3AxIHRzdC1hcmdwMSB0c3QtYXJncDIKKysKKytFWFRSQV9MREZMQUdTID0gLWx1YXJncAorKworK09QVFNfYXJncC1leDMgPSBBUkcxIEFSRzIKKytPUFRTX2FyZ3AtZXg0ID0gQVJHMSBzdHJpbmcxIHN0cmluZzIgc3RyaW5nMworK09QVFNfYnVnLWFyZ3AxID0gLS0gLS1oZWxwCisrCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXgxLmMgYi90ZXN0L2FyZ3AvYXJncC1leDEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjdiYjVmMjIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4MS5jCitAQCAtMCwwICsxLDE1IEBACisrLyogQXJncCBleGFtcGxlICMxIC0tIGEgbWluaW1hbCBwcm9ncmFtIHVzaW5nIGFyZ3AgKi8KKysKKysvKiBUaGlzIGlzIChwcm9iYWJseSkgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByb2dyYW0gdGhhdAorKyAgIHVzZXMgYXJncC4gIEl0IHdvbid0IGRvIG11Y2ggZXhjZXB0IGdpdmUgYW4gZXJyb3IKKysgICBtZXNzYWdlcyBhbmQgZXhpdCB3aGVuIHRoZXJlIGFyZSBhbnkgYXJndW1lbnRzLCBhbmQgcHJpbnQKKysgICBhIChyYXRoZXIgcG9pbnRsZXNzKSBtZXNzYWdlcyBmb3IgLS1oZWxwLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGFyZ3BfcGFyc2UgKDAsIGFyZ2MsIGFyZ3YsIDAsIDAsIDApOworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4Mi5jIGIvdGVzdC9hcmdwL2FyZ3AtZXgyLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jNDlmYmFjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDIuYworQEAgLTAsMCArMSw0NSBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjMiAtLSBhIHByZXR0eSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCAqLworKworKy8qIFRoaXMgcHJvZ3JhbSBkb2Vzbid0IHVzZSBhbnkgb3B0aW9ucyBvciBhcmd1bWVudHMsIGJ1dCB1c2VzCisrICAgYXJncCB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUgR05VIHN0YW5kYXJkIGNvbW1hbmQgbGluZQorKyAgIGZvcm1hdC4KKysKKysgICBJbiBhZGRpdGlvbiB0byBtYWtpbmcgc3VyZSBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbmQKKysgICBpbXBsZW1lbnRpbmcgYSAtLWhlbHAgb3B0aW9uLCB0aGlzIGV4YW1wbGUgd2lsbCBoYXZlIGEKKysgICAtLXZlcnNpb24gb3B0aW9uLCBhbmQgd2lsbCBwdXQgdGhlIGdpdmVuIGRvY3VtZW50YXRpb24gc3RyaW5nCisrICAgYW5kIGJ1ZyBhZGRyZXNzIGluIHRoZSAtLWhlbHAgb3V0cHV0LCBhcyBwZXIgR05VIHN0YW5kYXJkcy4KKysKKysgICBUaGUgdmFyaWFibGUgQVJHUCBjb250YWlucyB0aGUgYXJndW1lbnQgcGFyc2VyIHNwZWNpZmljYXRpb247CisrICAgYWRkaW5nIGZpZWxkcyB0byB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgd2F5IG1vc3QgcGFyYW1ldGVycyBhcmUKKysgICBwYXNzZWQgdG8gYXJncF9wYXJzZSAodGhlIGZpcnN0IHRocmVlIGZpZWxkcyBhcmUgdXN1YWxseSB1c2VkLAorKyAgIGJ1dCBub3QgaW4gdGhpcyBzbWFsbCBwcm9ncmFtKS4gIFRoZXJlIGFyZSBhbHNvIHR3byBnbG9iYWwKKysgICB2YXJpYWJsZXMgdGhhdCBhcmdwIGtub3dzIGFib3V0IGRlZmluZWQgaGVyZSwKKysgICBBUkdQX1BST0dSQU1fVkVSU0lPTiBhbmQgQVJHUF9QUk9HUkFNX0JVR19BRERSRVNTICh0aGV5IGFyZQorKyAgIGdsb2JhbCB2YXJpYWJsZXMgYmVjYXVzZSB0aGV5IHdpbGwgYWxtb3N0IGFsd2F5cyBiZSBjb25zdGFudAorKyAgIGZvciBhIGdpdmVuIHByb2dyYW0sIGV2ZW4gaWYgaXQgdXNlcyBkaWZmZXJlbnQgYXJndW1lbnQKKysgICBwYXJzZXJzIGZvciB2YXJpb3VzIHRhc2tzKS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXgyIDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAZ251Lm9yZz4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjMiAtLSBhIHByZXR0eSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCI7CisrCisrLyogT3VyIGFyZ3VtZW50IHBhcnNlci4gIFRoZSBAY29kZXtvcHRpb25zfSwgQGNvZGV7cGFyc2VyfSwgYW5kCisrICAgQGNvZGV7YXJnc19kb2N9IGZpZWxkcyBhcmUgemVybyBiZWNhdXNlIHdlIGhhdmUgbmVpdGhlciBvcHRpb25zIG9yCisrICAgYXJndW1lbnRzOyBAY29kZXtkb2N9IGFuZCBAY29kZXthcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3N9IHdpbGwgYmUKKysgICB1c2VkIGluIHRoZSBvdXRwdXQgZm9yIEBzYW1wey0taGVscH0sIGFuZCB0aGUgQHNhbXB7LS12ZXJzaW9ufQorKyAgIG9wdGlvbiB3aWxsIHByaW50IG91dCBAY29kZXthcmdwX3Byb2dyYW1fdmVyc2lvbn0uICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geyAwLCAwLCAwLCBkb2MgfTsKKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAwKTsKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDMuYyBiL3Rlc3QvYXJncC9hcmdwLWV4My5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjRkNWM1MAorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXgzLmMKK0BAIC0wLDAgKzEsMTUzIEBACisrLyogQXJncCBleGFtcGxlICMzIC0tIGEgcHJvZ3JhbSB3aXRoIG9wdGlvbnMgYW5kIGFyZ3VtZW50cyB1c2luZyBhcmdwICovCisrCisrLyogVGhpcyBwcm9ncmFtIHVzZXMgdGhlIHNhbWUgZmVhdHVyZXMgYXMgZXhhbXBsZSAyLCBhbmQgdXNlcyBvcHRpb25zIGFuZAorKyAgIGFyZ3VtZW50cy4KKysKKysgICBXZSBub3cgdXNlIHRoZSBmaXJzdCBmb3VyIGZpZWxkcyBpbiBBUkdQLCBzbyBoZXJlJ3MgYSBkZXNjcmlwdGlvbiBvZiB0aGVtOgorKyAgICAgT1BUSU9OUyAgLS0gQSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHN0cnVjdCBhcmdwX29wdGlvbiAoc2VlIGJlbG93KQorKyAgICAgUEFSU0VSICAgLS0gQSBmdW5jdGlvbiB0byBwYXJzZSBhIHNpbmdsZSBvcHRpb24sIGNhbGxlZCBieSBhcmdwCisrICAgICBBUkdTX0RPQyAtLSBBIHN0cmluZyBkZXNjcmliaW5nIGhvdyB0aGUgbm9uLW9wdGlvbiBhcmd1bWVudHMgc2hvdWxkIGxvb2sKKysgICAgIERPQyAgICAgIC0tIEEgZGVzY3JpcHRpdmUgc3RyaW5nIGFib3V0IHRoaXMgcHJvZ3JhbTsgaWYgaXQgY29udGFpbnMgYQorKyAgICAgICAgICAgICAgICAgdmVydGljYWwgdGFiIGNoYXJhY3RlciAoXHYpLCB0aGUgcGFydCBhZnRlciBpdCB3aWxsIGJlCisrICAgICAgICAgICAgICAgICBwcmludGVkICpmb2xsb3dpbmcqIHRoZSBvcHRpb25zCisrCisrICAgVGhlIGZ1bmN0aW9uIFBBUlNFUiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKysgICAgIEtFWSAgLS0gQW4gaW50ZWdlciBzcGVjaWZ5aW5nIHdoaWNoIG9wdGlvbiB0aGlzIGlzICh0YWtlbgorKyAgICAgICAgICAgICBmcm9tIHRoZSBLRVkgZmllbGQgaW4gZWFjaCBzdHJ1Y3QgYXJncF9vcHRpb24pLCBvcgorKyAgICAgICAgICAgICBhIHNwZWNpYWwga2V5IHNwZWNpZnlpbmcgc29tZXRoaW5nIGVsc2U7IHRoZSBvbmx5CisrICAgICAgICAgICAgIHNwZWNpYWwga2V5cyB3ZSB1c2UgaGVyZSBhcmUgQVJHUF9LRVlfQVJHLCBtZWFuaW5nCisrICAgICAgICAgICAgIGEgbm9uLW9wdGlvbiBhcmd1bWVudCwgYW5kIEFSR1BfS0VZX0VORCwgbWVhbmluZworKyAgICAgICAgICAgICB0aGF0IGFsbCBhcmd1bWVudHMgaGF2ZSBiZWVuIHBhcnNlZAorKyAgICAgQVJHICAtLSBGb3IgYW4gb3B0aW9uIEtFWSwgdGhlIHN0cmluZyB2YWx1ZSBvZiBpdHMKKysgICAgICAgICAgICAgYXJndW1lbnQsIG9yIE5VTEwgaWYgaXQgaGFzIG5vbmUKKysgICAgIFNUQVRFLS0gQSBwb2ludGVyIHRvIGEgc3RydWN0IGFyZ3Bfc3RhdGUsIGNvbnRhaW5pbmcKKysgICAgICAgICAgICAgdmFyaW91cyB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcnNpbmcgc3RhdGU7IHVzZWQgaGVyZQorKyAgICAgICAgICAgICBhcmUgdGhlIElOUFVUIGZpZWxkLCB3aGljaCByZWZsZWN0cyB0aGUgSU5QVVQgYXJndW1lbnQgdG8KKysgICAgICAgICAgICAgYXJncF9wYXJzZSwgYW5kIHRoZSBBUkdfTlVNIGZpZWxkLCB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIHRoZQorKyAgICAgICAgICAgICBjdXJyZW50IG5vbi1vcHRpb24gYXJndW1lbnQgYmVpbmcgcGFyc2VkCisrICAgSXQgc2hvdWxkIHJldHVybiBlaXRoZXIgMCwgbWVhbmluZyBzdWNjZXNzLCBBUkdQX0VSUl9VTktOT1dOLCBtZWFuaW5nIHRoZQorKyAgIGdpdmVuIEtFWSB3YXNuJ3QgcmVjb2duaXplZCwgb3IgYW4gZXJybm8gdmFsdWUgaW5kaWNhdGluZyBzb21lIG90aGVyCisrICAgZXJyb3IuCisrCisrICAgTm90ZSB0aGF0IGluIHRoaXMgZXhhbXBsZSwgbWFpbiB1c2VzIGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlCisrICAgcGFyc2Vfb3B0IGZ1bmN0aW9uLCBhIHBvaW50ZXIgdG8gd2hpY2ggaXQgcGFzc2VzIGluIHRoZSBJTlBVVCBhcmd1bWVudCB0bworKyAgIGFyZ3BfcGFyc2UuICBPZiBjb3Vyc2UsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byB1c2UgZ2xvYmFsIHZhcmlhYmxlcworKyAgIGluc3RlYWQsIGJ1dCB0aGlzIGlzIHNvbWV3aGF0IG1vcmUgZmxleGlibGUuCisrCisrICAgVGhlIE9QVElPTlMgZmllbGQgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHN0cnVjdCBhcmdwX29wdGlvbidzOworKyAgIHRoYXQgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcyAoaWYgeW91IGFzc2lnbiB5b3VyIG9wdGlvbgorKyAgIHN0cnVjdHVyZXMgdXNpbmcgYXJyYXkgaW5pdGlhbGl6YXRpb24gbGlrZSB0aGlzIGV4YW1wbGUsIHVuc3BlY2lmaWVkCisrICAgZmllbGRzIHdpbGwgYmUgZGVmYXVsdGVkIHRvIDAsIGFuZCBuZWVkIG5vdCBiZSBzcGVjaWZpZWQpOgorKyAgICAgTkFNRSAgIC0tIFRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uJ3MgbG9uZyBvcHRpb24gKG1heSBiZSB6ZXJvKQorKyAgICAgS0VZICAgIC0tIFRoZSBLRVkgdG8gcGFzcyB0byB0aGUgUEFSU0VSIGZ1bmN0aW9uIHdoZW4gcGFyc2luZyB0aGlzIG9wdGlvbiwKKysgICAgICAgICAgICAgICAqYW5kKiB0aGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIHNob3J0IG9wdGlvbiwgaWYgaXQgaXMgYQorKyAgICAgICAgICAgICAgIHByaW50YWJsZSBhc2NpaSBjaGFyYWN0ZXIKKysgICAgIEFSRyAgICAtLSBUaGUgbmFtZSBvZiB0aGlzIG9wdGlvbidzIGFyZ3VtZW50LCBpZiBhbnkKKysgICAgIEZMQUdTICAtLSBGbGFncyBkZXNjcmliaW5nIHRoaXMgb3B0aW9uOyBzb21lIG9mIHRoZW0gYXJlOgorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0FSR19PUFRJT05BTCAtLSBUaGUgYXJndW1lbnQgdG8gdGhpcyBvcHRpb24gaXMgb3B0aW9uYWwKKysgICAgICAgICAgICAgICAgIE9QVElPTl9BTElBUyAgICAgICAgLS0gVGhpcyBvcHRpb24gaXMgYW4gYWxpYXMgZm9yIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBvcHRpb24KKysgICAgICAgICAgICAgICAgIE9QVElPTl9ISURERU4gICAgICAgLS0gRG9uJ3Qgc2hvdyB0aGlzIG9wdGlvbiBpbiAtLWhlbHAgb3V0cHV0CisrICAgICBET0MgICAgLS0gQSBkb2N1bWVudGF0aW9uIHN0cmluZyBmb3IgdGhpcyBvcHRpb24sIHNob3duIGluIC0taGVscCBvdXRwdXQKKysKKysgICBBbiBvcHRpb25zIHZlY3RvciBzaG91bGQgYmUgdGVybWluYXRlZCBieSBhbiBvcHRpb24gd2l0aCBhbGwgZmllbGRzIHplcm8uICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXgzIDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAZ251Lm9yZz4iOworKworKy8qIFByb2dyYW0gZG9jdW1lbnRhdGlvbi4gICovCisrc3RhdGljIGNoYXIgZG9jW10gPQorKyAgIkFyZ3AgZXhhbXBsZSAjMyAtLSBhIHByb2dyYW0gd2l0aCBvcHRpb25zIGFuZCBhcmd1bWVudHMgdXNpbmcgYXJncCI7CisrCisrLyogQSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzIHdlIGFjY2VwdC4gICovCisrc3RhdGljIGNoYXIgYXJnc19kb2NbXSA9ICJBUkcxIEFSRzIiOworKworKy8qIFRoZSBvcHRpb25zIHdlIHVuZGVyc3RhbmQuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworKyAgeyJ2ZXJib3NlIiwgICd2JywgMCwgICAgICAwLCAgIlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQiIH0sCisrICB7InF1aWV0IiwgICAgJ3EnLCAwLCAgICAgIDAsICAiRG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0IiB9LAorKyAgeyJzaWxlbnQiLCAgICdzJywgMCwgICAgICBPUFRJT05fQUxJQVMgfSwKKysgIHsib3V0cHV0IiwgICAnbycsICJGSUxFIiwgMCwKKysgICAiT3V0cHV0IHRvIEZJTEUgaW5zdGVhZCBvZiBzdGFuZGFyZCBvdXRwdXQiIH0sCisrICB7IDAgfQorK307CisrCisrLyogVXNlZCBieSBAY29kZXttYWlufSB0byBjb21tdW5pY2F0ZSB3aXRoIEBjb2Rle3BhcnNlX29wdH0uICAqLworK3N0cnVjdCBhcmd1bWVudHMKKyt7CisrICBjaGFyICphcmdzWzJdOyAgICAgICAgICAgICAgIC8qIEB2YXJ7YXJnMX0gJiBAdmFye2FyZzJ9ICovCisrICBpbnQgc2lsZW50LCB2ZXJib3NlOworKyAgY2hhciAqb3V0cHV0X2ZpbGU7CisrfTsKKysKKysvKiBQYXJzZSBhIHNpbmdsZSBvcHRpb24uICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICAvKiBHZXQgdGhlIEB2YXJ7aW5wdXR9IGFyZ3VtZW50IGZyb20gQGNvZGV7YXJncF9wYXJzZX0sIHdoaWNoIHdlCisrICAgICBrbm93IGlzIGEgcG9pbnRlciB0byBvdXIgYXJndW1lbnRzIHN0cnVjdHVyZS4gICovCisrICBzdHJ1Y3QgYXJndW1lbnRzICphcmd1bWVudHMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdxJzogY2FzZSAncyc6CisrICAgICAgYXJndW1lbnRzLT5zaWxlbnQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICd2JzoKKysgICAgICBhcmd1bWVudHMtPnZlcmJvc2UgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdvJzoKKysgICAgICBhcmd1bWVudHMtPm91dHB1dF9maWxlID0gYXJnOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPj0gMikKKysgICAgICAgLyogVG9vIG1hbnkgYXJndW1lbnRzLiAgKi8KKysgICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKworKyAgICAgIGFyZ3VtZW50cy0+YXJnc1tzdGF0ZS0+YXJnX251bV0gPSBhcmc7CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfRU5EOgorKyAgICAgIGlmIChzdGF0ZS0+YXJnX251bSA8IDIpCisrICAgICAgIC8qIE5vdCBlbm91Z2ggYXJndW1lbnRzLiAgKi8KKysgICAgICAgYXJncF91c2FnZSAoc3RhdGUpOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogT3VyIGFyZ3AgcGFyc2VyLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jIH07CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBzdHJ1Y3QgYXJndW1lbnRzIGFyZ3VtZW50czsKKysKKysgIC8qIERlZmF1bHQgdmFsdWVzLiAgKi8KKysgIGFyZ3VtZW50cy5zaWxlbnQgPSAwOworKyAgYXJndW1lbnRzLnZlcmJvc2UgPSAwOworKyAgYXJndW1lbnRzLm91dHB1dF9maWxlID0gIi0iOworKworKyAgLyogUGFyc2Ugb3VyIGFyZ3VtZW50czsgZXZlcnkgb3B0aW9uIHNlZW4gYnkgQGNvZGV7cGFyc2Vfb3B0fSB3aWxsCisrICAgICBiZSByZWZsZWN0ZWQgaW4gQGNvZGV7YXJndW1lbnRzfS4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJmFyZ3VtZW50cyk7CisrCisrICBwcmludGYgKCJBUkcxID0gJXNcbkFSRzIgPSAlc1xuT1VUUFVUX0ZJTEUgPSAlc1xuIgorKyAgICAgICAgICJWRVJCT1NFID0gJXNcblNJTEVOVCA9ICVzXG4iLAorKyAgICAgICAgIGFyZ3VtZW50cy5hcmdzWzBdLCBhcmd1bWVudHMuYXJnc1sxXSwKKysgICAgICAgICBhcmd1bWVudHMub3V0cHV0X2ZpbGUsCisrICAgICAgICAgYXJndW1lbnRzLnZlcmJvc2UgPyAieWVzIiA6ICJubyIsCisrICAgICAgICAgYXJndW1lbnRzLnNpbGVudCA/ICJ5ZXMiIDogIm5vIik7CisrCisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXg0LmMgYi90ZXN0L2FyZ3AvYXJncC1leDQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM3N2M3ZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4NC5jCitAQCAtMCwwICsxLDE2NyBAQAorKy8qIEFyZ3AgZXhhbXBsZSAjNCAtLSBhIHByb2dyYW0gd2l0aCBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkIG9wdGlvbnMgKi8KKysKKysvKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgc2FtZSBmZWF0dXJlcyBhcyBleGFtcGxlIDMsIGJ1dCBoYXMgbW9yZQorKyAgIG9wdGlvbnMsIGFuZCBzb21ld2hhdCBtb3JlIHN0cnVjdHVyZSBpbiB0aGUgLWhlbHAgb3V0cHV0LiAgSXQKKysgICBhbHNvIHNob3dzIGhvdyB5b3UgY2FuIGBzdGVhbCcgdGhlIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQKKysgICBhcmd1bWVudHMgcGFzdCBhIGNlcnRhaW4gcG9pbnQsIGZvciBwcm9ncmFtcyB0aGF0IGFjY2VwdCBhCisrICAgbGlzdCBvZiBpdGVtcy4gIEl0IGFsc28gc2hvd3MgdGhlIHNwZWNpYWwgYXJncCBLRVkgdmFsdWUKKysgICBBUkdQX0tFWV9OT19BUkdTLCB3aGljaCBpcyBvbmx5IGdpdmVuIGlmIG5vIG5vbi1vcHRpb24KKysgICBhcmd1bWVudHMgd2VyZSBzdXBwbGllZCB0byB0aGUgcHJvZ3JhbS4KKysKKysgICBGb3Igc3RydWN0dXJpbmcgdGhlIGhlbHAgb3V0cHV0LCB0d28gZmVhdHVyZXMgYXJlIHVzZWQsCisrICAgKmhlYWRlcnMqIHdoaWNoIGFyZSBlbnRyaWVzIGluIHRoZSBvcHRpb25zIHZlY3RvciB3aXRoIHRoZQorKyAgIGZpcnN0IGZvdXIgZmllbGRzIGJlaW5nIHplcm8sIGFuZCBhIHR3byBwYXJ0IGRvY3VtZW50YXRpb24KKysgICBzdHJpbmcgKGluIHRoZSB2YXJpYWJsZSBET0MpLCB3aGljaCBhbGxvd3MgZG9jdW1lbnRhdGlvbiBib3RoCisrICAgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3B0aW9uczsgdGhlIHR3byBwYXJ0cyBvZiBET0MgYXJlCisrICAgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwtdGFiIGNoYXJhY3RlciAoJ1x2Jywgb3IgJ1wwMTMnKS4gIEJ5CisrICAgY29udmVudGlvbiwgdGhlIGRvY3VtZW50YXRpb24gYmVmb3JlIHRoZSBvcHRpb25zIGlzIGp1c3QgYQorKyAgIHNob3J0IHN0cmluZyBzYXlpbmcgd2hhdCB0aGUgcHJvZ3JhbSBkb2VzLCBhbmQgdGhhdCBhZnRlcndhcmRzCisrICAgaXMgbG9uZ2VyLCBkZXNjcmliaW5nIHRoZSBiZWhhdmlvciBpbiBtb3JlIGRldGFpbC4gIEFsbAorKyAgIGRvY3VtZW50YXRpb24gc3RyaW5ncyBhcmUgYXV0b21hdGljYWxseSBmaWxsZWQgZm9yIG91dHB1dCwKKysgICBhbHRob3VnaCBuZXdsaW5lcyBtYXkgYmUgaW5jbHVkZWQgdG8gZm9yY2UgYSBsaW5lIGJyZWFrIGF0IGEKKysgICBwYXJ0aWN1bGFyIHBvaW50LiAgQWxsIGRvY3VtZW50YXRpb24gc3RyaW5ncyBhcmUgYWxzbyBwYXNzZWQgdG8KKysgICB0aGUgYGdldHRleHQnIGZ1bmN0aW9uLCBmb3IgcG9zc2libGUgdHJhbnNsYXRpb24gaW50byB0aGUKKysgICBjdXJyZW50IGxvY2FsZS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxlcnJvci5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPQorKyAgImFyZ3AtZXg0IDEuMCI7CisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzID0KKysgICI8YnVnLWdudS11dGlsc0BAcHJlcC5haS5taXQuZWR1PiI7CisrCisrLyogUHJvZ3JhbSBkb2N1bWVudGF0aW9uLiAgKi8KKytzdGF0aWMgY2hhciBkb2NbXSA9CisrICAiQXJncCBleGFtcGxlICM0IC0tIGEgcHJvZ3JhbSB3aXRoIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWRcCisrb3B0aW9uc1wKKytcdlRoaXMgcGFydCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBjb21lcyAqYWZ0ZXIqIHRoZSBvcHRpb25zO1wKKysgbm90ZSB0aGF0IHRoZSB0ZXh0IGlzIGF1dG9tYXRpY2FsbHkgZmlsbGVkLCBidXQgaXQncyBwb3NzaWJsZVwKKysgdG8gZm9yY2UgYSBsaW5lLWJyZWFrLCBlLmcuXG48LS0gaGVyZS4iOworKworKy8qIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50cyB3ZSBhY2NlcHQuICAqLworK3N0YXRpYyBjaGFyIGFyZ3NfZG9jW10gPSAiQVJHMSBbU1RSSU5HLi4uXSI7CisrCisrLyogS2V5cyBmb3Igb3B0aW9ucyB3aXRob3V0IHNob3J0LW9wdGlvbnMuICAqLworKyNkZWZpbmUgT1BUX0FCT1JUICAxICAgICAgICAgICAvKiAtLWFib3J0ICovCisrCisrLyogVGhlIG9wdGlvbnMgd2UgdW5kZXJzdGFuZC4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPSB7CisrICB7InZlcmJvc2UiLCAgJ3YnLCAwLCAgICAgICAwLCAiUHJvZHVjZSB2ZXJib3NlIG91dHB1dCIgfSwKKysgIHsicXVpZXQiLCAgICAncScsIDAsICAgICAgIDAsICJEb24ndCBwcm9kdWNlIGFueSBvdXRwdXQiIH0sCisrICB7InNpbGVudCIsICAgJ3MnLCAwLCAgICAgICBPUFRJT05fQUxJQVMgfSwKKysgIHsib3V0cHV0IiwgICAnbycsICJGSUxFIiwgIDAsCisrICAgIk91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3RhbmRhcmQgb3V0cHV0IiB9LAorKworKyAgezAsMCwwLDAsICJUaGUgZm9sbG93aW5nIG9wdGlvbnMgc2hvdWxkIGJlIGdyb3VwZWQgdG9nZXRoZXI6IiB9LAorKyAgeyJyZXBlYXQiLCAgICdyJywgIkNPVU5UIiwgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAiUmVwZWF0IHRoZSBvdXRwdXQgQ09VTlQgKGRlZmF1bHQgMTApIHRpbWVzIn0sCisrICB7ImFib3J0IiwgICAgT1BUX0FCT1JULCAwLCAwLCAiQWJvcnQgYmVmb3JlIHNob3dpbmcgYW55IG91dHB1dCJ9LAorKworKyAgeyAwIH0KKyt9OworKworKy8qIFVzZWQgYnkgQGNvZGV7bWFpbn0gdG8gY29tbXVuaWNhdGUgd2l0aCBAY29kZXtwYXJzZV9vcHR9LiAgKi8KKytzdHJ1Y3QgYXJndW1lbnRzCisreworKyAgY2hhciAqYXJnMTsgICAgICAgICAgICAgICAgICAvKiBAdmFye2FyZzF9ICovCisrICBjaGFyICoqc3RyaW5nczsgICAgICAgICAgICAgIC8qIFtAdmFye3N0cmluZ31AZG90c3t9XSAqLworKyAgaW50IHNpbGVudCwgdmVyYm9zZSwgYWJvcnQ7ICAvKiBAc2FtcHstc30sIEBzYW1wey12fSwgQHNhbXB7LS1hYm9ydH0gKi8KKysgIGNoYXIgKm91dHB1dF9maWxlOyAgICAgICAgICAgLyogQHZhcntmaWxlfSBhcmcgdG8gQHNhbXB7LS1vdXRwdXR9ICovCisrICBpbnQgcmVwZWF0X2NvdW50OyAgICAgICAgICAgIC8qIEB2YXJ7Y291bnR9IGFyZyB0byBAc2FtcHstLXJlcGVhdH0gKi8KKyt9OworKworKy8qIFBhcnNlIGEgc2luZ2xlIG9wdGlvbi4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIC8qIEdldCB0aGUgQGNvZGV7aW5wdXR9IGFyZ3VtZW50IGZyb20gQGNvZGV7YXJncF9wYXJzZX0sIHdoaWNoIHdlCisrICAgICBrbm93IGlzIGEgcG9pbnRlciB0byBvdXIgYXJndW1lbnRzIHN0cnVjdHVyZS4gICovCisrICBzdHJ1Y3QgYXJndW1lbnRzICphcmd1bWVudHMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICdxJzogY2FzZSAncyc6CisrICAgICAgYXJndW1lbnRzLT5zaWxlbnQgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICd2JzoKKysgICAgICBhcmd1bWVudHMtPnZlcmJvc2UgPSAxOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdvJzoKKysgICAgICBhcmd1bWVudHMtPm91dHB1dF9maWxlID0gYXJnOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlICdyJzoKKysgICAgICBhcmd1bWVudHMtPnJlcGVhdF9jb3VudCA9IGFyZyA/IGF0b2kgKGFyZykgOiAxMDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfQUJPUlQ6CisrICAgICAgYXJndW1lbnRzLT5hYm9ydCA9IDE7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfTk9fQVJHUzoKKysgICAgICBhcmdwX3VzYWdlIChzdGF0ZSk7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfQVJHOgorKyAgICAgIC8qIEhlcmUgd2Uga25vdyB0aGF0IEBjb2Rle3N0YXRlLT5hcmdfbnVtID09IDB9LCBzaW5jZSB3ZQorKyAgICAgICAgZm9yY2UgYXJndW1lbnQgcGFyc2luZyB0byBlbmQgYmVmb3JlIGFueSBtb3JlIGFyZ3VtZW50cyBjYW4KKysgICAgICAgIGdldCBoZXJlLiAgKi8KKysgICAgICBhcmd1bWVudHMtPmFyZzEgPSBhcmc7CisrCisrICAgICAgLyogTm93IHdlIGNvbnN1bWUgYWxsIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMuCisrICAgICAgICBAY29kZXtzdGF0ZS0+bmV4dH0gaXMgdGhlIGluZGV4IGluIEBjb2Rle3N0YXRlLT5hcmd2fSBvZiB0aGUKKysgICAgICAgIG5leHQgYXJndW1lbnQgdG8gYmUgcGFyc2VkLCB3aGljaCBpcyB0aGUgZmlyc3QgQHZhcntzdHJpbmd9CisrICAgICAgICB3ZSdyZSBpbnRlcmVzdGVkIGluLCBzbyB3ZSBjYW4ganVzdCB1c2UKKysgICAgICAgIEBjb2RleyZzdGF0ZS0+YXJndltzdGF0ZS0+bmV4dF19IGFzIHRoZSB2YWx1ZSBmb3IKKysgICAgICAgIGFyZ3VtZW50cy0+c3RyaW5ncy4KKysKKysgICAgICAgIEBlbXBoe0luIGFkZGl0aW9ufSwgYnkgc2V0dGluZyBAY29kZXtzdGF0ZS0+bmV4dH0gdG8gdGhlIGVuZAorKyAgICAgICAgb2YgdGhlIGFyZ3VtZW50cywgd2UgY2FuIGZvcmNlIGFyZ3AgdG8gc3RvcCBwYXJzaW5nIGhlcmUgYW5kCisrICAgICAgICByZXR1cm4uICAqLworKyAgICAgIGFyZ3VtZW50cy0+c3RyaW5ncyA9ICZzdGF0ZS0+YXJndltzdGF0ZS0+bmV4dF07CisrICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+YXJnYzsKKysKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworKy8qIE91ciBhcmdwIHBhcnNlci4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7IG9wdGlvbnMsIHBhcnNlX29wdCwgYXJnc19kb2MsIGRvYyB9OworKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgaW50IGksIGo7CisrICBzdHJ1Y3QgYXJndW1lbnRzIGFyZ3VtZW50czsKKysKKysgIC8qIERlZmF1bHQgdmFsdWVzLiAgKi8KKysgIGFyZ3VtZW50cy5zaWxlbnQgPSAwOworKyAgYXJndW1lbnRzLnZlcmJvc2UgPSAwOworKyAgYXJndW1lbnRzLm91dHB1dF9maWxlID0gIi0iOworKyAgYXJndW1lbnRzLnJlcGVhdF9jb3VudCA9IDE7CisrICBhcmd1bWVudHMuYWJvcnQgPSAwOworKworKyAgLyogUGFyc2Ugb3VyIGFyZ3VtZW50czsgZXZlcnkgb3B0aW9uIHNlZW4gYnkgQGNvZGV7cGFyc2Vfb3B0fSB3aWxsIGJlCisrICAgICByZWZsZWN0ZWQgaW4gQGNvZGV7YXJndW1lbnRzfS4gICovCisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJmFyZ3VtZW50cyk7CisrCisrICBpZiAoYXJndW1lbnRzLmFib3J0KQorKyAgICBlcnJvciAoMTAsIDAsICJBQk9SVEVEIik7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLnJlcGVhdF9jb3VudDsgaSsrKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiQVJHMSA9ICVzXG4iLCBhcmd1bWVudHMuYXJnMSk7CisrICAgICAgcHJpbnRmICgiU1RSSU5HUyA9ICIpOworKyAgICAgIGZvciAoaiA9IDA7IGFyZ3VtZW50cy5zdHJpbmdzW2pdOyBqKyspCisrICAgICAgIHByaW50ZiAoaiA9PSAwID8gIiVzIiA6ICIsICVzIiwgYXJndW1lbnRzLnN0cmluZ3Nbal0pOworKyAgICAgIHByaW50ZiAoIlxuIik7CisrICAgICAgcHJpbnRmICgiT1VUUFVUX0ZJTEUgPSAlc1xuVkVSQk9TRSA9ICVzXG5TSUxFTlQgPSAlc1xuIiwKKysgICAgICAgICAgICAgYXJndW1lbnRzLm91dHB1dF9maWxlLAorKyAgICAgICAgICAgICBhcmd1bWVudHMudmVyYm9zZSA/ICJ5ZXMiIDogIm5vIiwKKysgICAgICAgICAgICAgYXJndW1lbnRzLnNpbGVudCA/ICJ5ZXMiIDogIm5vIik7CisrICAgIH0KKysKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC10ZXN0LmMgYi90ZXN0L2FyZ3AvYXJncC10ZXN0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iM2Q1NzNiCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC10ZXN0LmMKK0BAIC0wLDAgKzEsMjA5IEBACisrLyogVGVzdCBwcm9ncmFtIGZvciBhcmdwIGFyZ3VtZW50IHBhcnNlcgorKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2NvbnN0IGNoYXIgKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uID0gImFyZ3AtdGVzdCAxLjAiOworKworK3N0cnVjdCBhcmdwX29wdGlvbiBzdWJfb3B0aW9uc1tdID0KKyt7CisrICB7InN1Ym9wdDEiLCAgICAgICAncycsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMSJ9LAorKyAgeyJzdWJvcHQyIiwgICAgICAgJ1MnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDIifSwKKysKKysgIHsgMCwgMCwgMCwgMCwgIlNvbWUgbW9yZSBuZXN0ZWQgb3B0aW9uczoiLCAxMH0sCisrICB7InN1Ym9wdDMiLCAgICAgICAncCcsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMyJ9LAorKworKyAgeyJzdWJvcHQ0IiwgICAgICAgJ3EnLCAgICAgMCwgIDAsICJOZXN0ZWQgb3B0aW9uIDQiLCAxfSwKKysKKysgIHswfQorK307CisrCisrc3RhdGljIGNvbnN0IGNoYXIgc3ViX2FyZ3NfZG9jW10gPSAiU1RSSU5HLi4uXG4tIjsKKytzdGF0aWMgY29uc3QgY2hhciBzdWJfZG9jW10gPSAiXHZUaGlzIGlzIHRoZSBkb2Mgc3RyaW5nIGZyb20gdGhlIHN1Yi1hcmctcGFyc2VyLiI7CisrCisrc3RhdGljIGVycm9yX3QKKytzdWJfcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlIEFSR1BfS0VZX05PX0FSR1M6CisrICAgICAgcHJpbnRmICgiTk8gU1VCIEFSR1NcbiIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBwcmludGYgKCJTVUIgQVJHOiAlc1xuIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAncycgOiBjYXNlICdTJzogY2FzZSAncCc6IGNhc2UgJ3EnOgorKyAgICAgIHByaW50ZiAoIlNVQiBLRVkgJWNcbiIsIGtleSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY2hhciAqCisrc3ViX2hlbHBfZmlsdGVyIChpbnQga2V5LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICppbnB1dCkKKyt7CisrICBpZiAoa2V5ID09IEFSR1BfS0VZX0hFTFBfRVhUUkEpCisrICAgIHJldHVybiBzdHJkdXAgKCJUaGlzIGlzIHNvbWUgZXh0cmEgdGV4dCBmcm9tIHRoZSBzdWIgcGFyc2VyIChub3RlIHRoYXQgaXQgXAorK2lzIHByZWNlZGVkIGJ5IGEgYmxhbmsgbGluZSkuIik7CisrICBlbHNlCisrICAgIHJldHVybiAoY2hhciAqKXRleHQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBzdWJfYXJncCA9IHsKKysgIHN1Yl9vcHRpb25zLCBzdWJfcGFyc2Vfb3B0LCBzdWJfYXJnc19kb2MsIHN1Yl9kb2MsIDAsIHN1Yl9oZWxwX2ZpbHRlcgorK307CisrCisrLyogU3RydWN0dXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgcGFyc2luZyBmdW5jdGlvbnMuICAqLworK3N0cnVjdCBwYXJhbXMKKyt7CisrICB1bnNpZ25lZCBmb29ubHk7ICAgICAgICAgICAgIC8qIFZhbHVlIHBhcnNlZCBmb3IgZm9vbmx5LiAgKi8KKysgIHVuc2lnbmVkIGZvb25seV9kZWZhdWx0OyAgICAgLyogRGVmYXVsdCB2YWx1ZSBmb3IgaXQuICAqLworK307CisrCisrI2RlZmluZSBPUFRfUEdSUCAxCisrI2RlZmluZSBPUFRfU0VTUyAyCisrCisrc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CisreworKyAgeyJwaWQiLCAgICAgICAncCcsICAgICAiUElEIiwgMCwgIkxpc3QgdGhlIHByb2Nlc3MgUElEIn0sCisrICB7InBncnAiLCAgICAgIE9QVF9QR1JQLCJQR1JQIiwwLCAiTGlzdCBwcm9jZXNzZXMgaW4gdGhlIHByb2Nlc3MgZ3JvdXAgUEdSUCJ9LAorKyAgeyJuby1wYXJlbnQiLCAnUCcsICAgIDAsICAgICAwLCAiSW5jbHVkZSBwcm9jZXNzZXMgd2l0aG91dCBwYXJlbnRzIn0sCisrICB7MCwgICAgICAgICAgICd4JywgICAgIDAsICAgICBPUFRJT05fQUxJQVN9LAorKyAgeyJhbGwtZmllbGRzIiwnUScsICAgICAwLCAgICAgMCwgIkRvbid0IGVsaWRlIHVudXNhYmxlIGZpZWxkcyAobm9ybWFsbHkiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgdGhlcmUncyBzb21lIHJlYXNvbiBwcyBjYW4ndCIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwcmludCBhIGZpZWxkIGZvciBhbnkgcHJvY2VzcywgaXQncyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkiIH0sCisrICB7InJldmVyc2UiLCAgICdyJywgICAgMCwgICAgICAwLCAiUmV2ZXJzZSB0aGUgb3JkZXIgb2YgYW55IHNvcnQifSwKKysgIHsiZ3JhdHVpdG91c2x5LWxvbmctcmV2ZXJzZS1vcHRpb24iLCAwLCAwLCBPUFRJT05fQUxJQVN9LAorKyAgeyJzZXNzaW9uIiwgIE9QVF9TRVNTLCJTSUQiLCAgT1BUSU9OX0FSR19PUFRJT05BTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZCB0aGUgcHJvY2Vzc2VzIGZyb20gdGhlIHNlc3Npb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU0lEICh3aGljaCBkZWZhdWx0cyB0byB0aGUgc2lkIG9mIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRoZSBjdXJyZW50IHByb2Nlc3MpIiB9LAorKworKyAgezAsMCwwLDAsICJIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoifSwKKysgIHsiZm9vbmx5IiwgJ2YnLCAiWk9UIiwgT1BUSU9OX0FSR19PUFRJT05BTCwgIkdsb3JrIGEgZm9vbmx5In0sCisrICB7InphemEiLCAneicsIDAsIDAsICJTbml0IGEgemFyIn0sCisrCisrICB7MH0KKyt9OworKworK3N0YXRpYyBjb25zdCBjaGFyIGFyZ3NfZG9jW10gPSAiU1RSSU5HIjsKKytzdGF0aWMgY29uc3QgY2hhciBkb2NbXSA9ICJUZXN0IHByb2dyYW0gZm9yIGFyZ3AuIgorKyAiXHZUaGlzIGRvYyBzdHJpbmcgY29tZXMgYWZ0ZXIgdGhlIG9wdGlvbnMuIgorKyAiXG5IZXkhICBTb21lIG1hbnVhbCBmb3JtYXR0aW5nISIKKysgIlxuVGhlIGN1cnJlbnQgdGltZSBpczogJXMiOworKworK3N0YXRpYyB2b2lkCisrcG9wdCAoaW50IGtleSwgY2hhciAqYXJnKQorK3sKKysgIGNoYXIgYnVmWzEwXTsKKysgIGlmIChpc3ByaW50IChrZXkpKQorKyAgICBzcHJpbnRmIChidWYsICIlYyIsIGtleSk7CisrICBlbHNlCisrICAgIHNwcmludGYgKGJ1ZiwgIiVkIiwga2V5KTsKKysgIGlmIChhcmcpCisrICAgIHByaW50ZiAoIktFWSAlczogJXNcbiIsIGJ1ZiwgYXJnKTsKKysgIGVsc2UKKysgICAgcHJpbnRmICgiS0VZICVzXG4iLCBidWYpOworK30KKysKKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3RydWN0IHBhcmFtcyAqcGFyYW1zID0gc3RhdGUtPmlucHV0OworKworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSBBUkdQX0tFWV9OT19BUkdTOgorKyAgICAgIHByaW50ZiAoIk5PIEFSR1NcbiIpOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEFSR1BfS0VZX0FSRzoKKysgICAgICBpZiAoc3RhdGUtPmFyZ19udW0gPiAwKQorKyAgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsgLyogTGVhdmUgaXQgZm9yIHRoZSBzdWItYXJnIHBhcnNlci4gICovCisrICAgICAgcHJpbnRmICgiQVJHOiAlc1xuIiwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnZic6CisrICAgICAgaWYgKGFyZykKKysgICAgICAgcGFyYW1zLT5mb29ubHkgPSBhdG9pIChhcmcpOworKyAgICAgIGVsc2UKKysgICAgICAgcGFyYW1zLT5mb29ubHkgPSBwYXJhbXMtPmZvb25seV9kZWZhdWx0OworKyAgICAgIHBvcHQgKGtleSwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlIE9QVF9QR1JQOiBjYXNlICd4JzogY2FzZSAnUSc6CisrICAgIGNhc2UgJ3InOiBjYXNlIE9QVF9TRVNTOiBjYXNlICd6JzoKKysgICAgICBwb3B0IChrZXksIGFyZyk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY2hhciAqCisraGVscF9maWx0ZXIgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorK3sKKysgIGNoYXIgKm5ld190ZXh0OworKyAgc3RydWN0IHBhcmFtcyAqcGFyYW1zID0gaW5wdXQ7CisrCisrICBpZiAoa2V5ID09IEFSR1BfS0VZX0hFTFBfUE9TVF9ET0MgJiYgdGV4dCkKKysgICAgeworKyAgICAgIHRpbWVfdCBub3cgPSB0aW1lICgwKTsKKysgICAgICBhc3ByaW50ZiAoJm5ld190ZXh0LCB0ZXh0LCBjdGltZSAoJm5vdykpOworKyAgICB9CisrICBlbHNlIGlmIChrZXkgPT0gJ2YnKQorKyAgICAvKiBTaG93IHRoZSBkZWZhdWx0IGZvciB0aGUgLS1mb29ubHkgb3B0aW9uLiAgKi8KKysgICAgYXNwcmludGYgKCZuZXdfdGV4dCwgIiVzIChaT1QgZGVmYXVsdHMgdG8gJXgpIiwKKysgICAgICAgICAgICAgdGV4dCwgcGFyYW1zLT5mb29ubHlfZGVmYXVsdCk7CisrICBlbHNlCisrICAgIG5ld190ZXh0ID0gKGNoYXIgKil0ZXh0OworKworKyAgcmV0dXJuIG5ld190ZXh0OworK30KKysKKytzdGF0aWMgc3RydWN0IGFyZ3BfY2hpbGQgYXJncF9jaGlsZHJlbltdID0geyB7ICZzdWJfYXJncCB9LCB7IDAgfSB9OworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geworKyAgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jLCBhcmdwX2NoaWxkcmVuLCBoZWxwX2ZpbHRlcgorK307CisrCisraW50CisrbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIHN0cnVjdCBwYXJhbXMgcGFyYW1zOworKyAgcGFyYW1zLmZvb25seSA9IDA7CisrICBwYXJhbXMuZm9vbmx5X2RlZmF1bHQgPSByYW5kb20gKCk7CisrICBhcmdwX3BhcnNlICgmYXJncCwgYXJnYywgYXJndiwgMCwgMCwgJnBhcmFtcyk7CisrICBwcmludGYgKCJBZnRlciBwYXJzaW5nOiBmb29ubHkgPSAleFxuIiwgcGFyYW1zLmZvb25seSk7CisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jIGIvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTI4Y2Y0YgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2J1Zy1hcmdwMS5jCitAQCAtMCwwICsxLDI2IEBACisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIHRlc3Rfb3B0aW9uc1tdID0KKyt7CisrICB7IE5VTEwsICdhJywgTlVMTCwgT1BUSU9OX0RPQywgTlVMTCB9LAorKyAgeyBOVUxMLCAnYicsIE5VTEwsIE9QVElPTl9ET0MsIE5VTEwgfSwKKysgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgdGVzdF9hcmdwID0KKyt7CisrICB0ZXN0X29wdGlvbnMKKyt9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0IChpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgIGludCBpOworKyAgYXJncF9wYXJzZSAoJnRlc3RfYXJncCwgYXJnYywgYXJndiwgMCwgJmksIE5VTEwpOworKyAgcmV0dXJuIDA7CisrfQorKworKyNkZWZpbmUgVEVTVF9GVU5DVElPTiBkb190ZXN0IChhcmdjLCBhcmd2KQorKyNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL3RzdC1hcmdwMS5jIGIvdGVzdC9hcmdwL3RzdC1hcmdwMS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODI3ZGFjYQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL3RzdC1hcmdwMS5jCitAQCAtMCwwICsxLDExOCBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlciBhdCByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysKKysKKysKKysjZGVmaW5lIE9QVF9UT19USFJFQUQgICAgICAgICAgMzAwCisrI2RlZmluZSBPUFRfVE9fUFJPQ0VTUyAgICAgICAgIDMwMQorKyNkZWZpbmUgT1BUX1NZTkNfU0lHTkFMICAgICAgICAgICAgICAgIDMwMgorKyNkZWZpbmUgT1BUX1NZTkNfSk9JTiAgICAgICAgICAzMDMKKysjZGVmaW5lIE9QVF9UT1BMRVZFTCAgICAgICAgICAgMzA0CisrCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiB0ZXN0X29wdGlvbnNbXSA9CisrICB7CisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytUaGlzIGlzIGEgdGVzdCBmb3IgdGhyZWFkcyBzbyB3ZSBhbGxvdyB0aGVyIHVzZXIgdG8gc2VsZWN0aW9uIHRoZSBudW1iZXIgb2YgXAorK3RocmVhZHMgd2hpY2ggYXJlIHVzZWQgYXQgYW55IG9uZSB0aW1lLiAgSW5kZXBlbmRlbnRseSB0aGUgdG90YWwgbnVtYmVyIG9mIFwKKytyb3VuZHMgY2FuIGJlIHNlbGVjdGVkLiAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRocmVhZHMgd2hpY2ggd2lsbCBoYXZlIFwKKytydW4gd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzOiIgfSwKKysgICAgeyAidGhyZWFkcyIsICd0JywgIk5VTUJFUiIsIDAsICJOdW1iZXIgb2YgdGhyZWFkcyB1c2VkIGF0IG9uY2UiIH0sCisrICAgIHsgInN0YXJ0cyIsICdzJywgIk5VTUJFUiIsIDAsICJUb3RhbCBudW1iZXIgb2Ygd29ya2luZyB0aHJlYWRzIiB9LAorKyAgICB7ICJ0b3BsZXZlbCIsIE9QVF9UT1BMRVZFTCwgIk5VTUJFUiIsIDAsCisrICAgICAgIk51bWJlciBvZiB0b3BsZXZlbCB0aHJlYWRzIHdoaWNoIHN0YXJ0IHRoZSBvdGhlciB0aHJlYWRzOyB0aGlzIFwKKytpbXBsaWVzIC0tc3luYy1qb2luIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrRWFjaCB0aHJlYWQgY2FuIGRvIG9uZSBvZiB0d28gdGhpbmdzOiBzbGVlcCBvciBkbyB3b3JrLiAgVGhlIGxhdHRlciBpcyAxMDAlIFwKKytDUFUgYm91bmQuICBUaGUgd29yayBsb2FkIGlzIHRoZSBwcm9iYWJpbGl0eSBhIHRocmVhZCBkb2VzIHdvcmsuICBBbGwgdmFsdWVzIFwKKytmcm9tIHplcm8gdG8gMTAwIChpbmNsdXNpdmUpIGFyZSB2YWxpZC4gIEhvdyBvZnRlbiBlYWNoIHRocmVhZCByZXBlYXRzIHRoaXMgXAorK2NhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2Ygcm91bmRzLiAgVGhlIHdvcmsgY29zdCBkZXRlcm1pbmVzIGhvdyBsb25nIFwKKytlYWNoIHdvcmsgc2Vzc2lvbiAobm90IHNsZWVwaW5nKSB0YWtlcy4gIElmIGl0IGlzIHplcm8gYSB0aHJlYWQgd291bGQgXAorK2VmZmVjdGl2ZWx5IG5vdGhpbmcuICBCeSBzZXR0aW5nIHRoZSBudW1iZXIgb2Ygcm91bmRzIHRvIHplcm8gdGhlIHRocmVhZCBcCisrZG9lcyBubyB3b3JrIGF0IGFsbCBhbmQgcHVyZSB0aHJlYWQgY3JlYXRpb24gdGltZXMgY2FuIGJlIG1lYXN1cmVkLiIgfSwKKysgICAgeyAid29ya2xvYWQiLCAndycsICJQRVJDRU5UIiwgMCwgIlBlcmNlbnRhZ2Ugb2YgdGltZSBzcGVudCB3b3JraW5nIiB9LAorKyAgICB7ICJ3b3JrY29zdCIsICdjJywgIk5VTUJFUiIsIDAsCisrICAgICAgIkZhY3RvciBpbiB0aGUgY29zdCBvZiBlYWNoIHJvdW5kIG9mIHdvcmtpbmciIH0sCisrICAgIHsgInJvdW5kcyIsICdyJywgIk5VTUJFUiIsIDAsICJOdW1iZXIgb2Ygcm91bmRzIGVhY2ggdGhyZWFkIHJ1bnMiIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IG1ldGhvZHMgaG93IHRocmVhZCBjcmVhdGlvbiBjYW4gYmUgXAorK3N5bmNocm9uaXplZC4gIFN5bmNocm9uaXphdGlvbiBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIG51bWJlciBvZiBjb25jdXJyZW50bHkgXAorK3J1bm5pbmcgdGhyZWFkcyBpcyBsaW1pdGVkLiIgfSwKKysgICAgeyAic3luYy1zaWduYWwiLCBPUFRfU1lOQ19TSUdOQUwsIE5VTEwsIDAsCisrICAgICAgIlN5bmNocm9uaXplIHVzaW5nIGEgc2lnbmFsIChkZWZhdWx0KSIgfSwKKysgICAgeyAic3luYy1qb2luIiwgT1BUX1NZTkNfSk9JTiwgTlVMTCwgMCwgIlN5bmNocm9uaXplIHVzaW5nIHB0aHJlYWRfam9pbiIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK09uZSBwYXJhbWV0ZXIgZm9yIGVhY2ggdGhyZWFkcyBleGVjdXRpb24gaXMgdGhlIHNpemUgb2YgdGhlIHN0YWNrLiAgSWYgdGhpcyBcCisrcGFyYW1ldGVyIGlzIG5vdCB1c2VkIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHN0YWNrIHNpemUgaXMgdXNlZC4gIElmIG1hbnkgXAorK3RocmVhZHMgYXJlIHVzZWQgdGhlIHN0YWNrIHNpemUgc2hvdWxkIGJlIGNob3NlbiBxdWl0ZSBzbWFsbC4iIH0sCisrICAgIHsgInN0YWNrc2l6ZSIsICdTJywgIkJZVEVTIiwgMCwgIlNpemUgb2YgdGhyZWFkcyBzdGFjayIgfSwKKysgICAgeyAiZ3VhcmRzaXplIiwgJ2cnLCAiQllURVMiLCAwLAorKyAgICAgICJTaXplIG9mIHN0YWNrIGd1YXJkIGFyZWE7IG11c3QgZml0IGludG8gdGhlIHN0YWNrIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJTaWduYWwgb3B0aW9uczoiIH0sCisrICAgIHsgInRvLXRocmVhZCIsIE9QVF9UT19USFJFQUQsIE5VTEwsIDAsICJTZW5kIHNpZ25hbCB0byBtYWluIHRocmVhZCIgfSwKKysgICAgeyAidG8tcHJvY2VzcyIsIE9QVF9UT19QUk9DRVNTLCBOVUxMLCAwLAorKyAgICAgICJTZW5kIHNpZ25hbCB0byBwcm9jZXNzIChkZWZhdWx0KSIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiQWRtaW5pc3RyYXRpdmUgb3B0aW9uczoiIH0sCisrICAgIHsgInByb2dyZXNzIiwgJ3AnLCBOVUxMLCAwLCAiU2hvdyBzaWducyBvZiBwcm9ncmVzcyIgfSwKKysgICAgeyAidGltaW5nIiwgJ1QnLCBOVUxMLCAwLAorKyAgICAgICJNZWFzdXJlIHRpbWUgZnJvbSBzdGFydHVwIHRvIHRoZSBsYXN0IHRocmVhZCBmaW5pc2hpbmciIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworKy8qIFByb3RvdHlwZSBmb3Igb3B0aW9uIGhhbmRsZXIuICAqLworK3N0YXRpYyBlcnJvcl90IHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpOworKworKy8qIERhdGEgc3RydWN0dXJlIHRvIGNvbW11bmljYXRlIHdpdGggYXJncCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0KKyt7CisrICB0ZXN0X29wdGlvbnMsIHBhcnNlX29wdAorK307CisrCisrCisrc3RhdGljIGludAorK2RvX3Rlc3QgKHZvaWQpCisreworKyAgaW50IGFyZ2MgPSAyOworKyAgY2hhciAqYXJndlszXSA9IHsgKGNoYXIgKikgInRzdC1hcmdwMSIsIChjaGFyICopICItLWhlbHAiLCBOVUxMIH07CisrICBpbnQgcmVtYWluaW5nOworKworKyAgLyogUGFyc2UgYW5kIHByb2Nlc3MgYXJndW1lbnRzLiAgKi8KKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAmcmVtYWluaW5nLCBOVUxMKTsKKysKKysgIHJldHVybiAwOworK30KKysKKysKKysvKiBIYW5kbGUgcHJvZ3JhbSBhcmd1bWVudHMuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKyt9CisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC90c3QtYXJncDIuYyBiL3Rlc3QvYXJncC90c3QtYXJncDIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcwNWNkY2EKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC90c3QtYXJncDIuYworQEAgLTAsMCArMSwxMDEgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgSmFrdWIgSmVsaW5layA8amFrdWIgYXQgcmVkaGF0LmNvbT4sIDIwMDcuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQxW10gPQorKyAgeworKyAgICB7ICJvcHQxIiwgJzEnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiAxIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDJbXSA9CisrICB7CisrICAgIHsgIm9wdDIiLCAnMicsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDIiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0M1tdID0KKysgIHsKKysgICAgeyAib3B0MyIsICczJywgIk5VTUJFUiIsIDAsICJPcHRpb24gMyIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQ0W10gPQorKyAgeworKyAgICB7ICJvcHQ0IiwgJzQnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiA0IiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDVbXSA9CisrICB7CisrICAgIHsgIm9wdDUiLCAnNScsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDUiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwNSA9CisrICB7CisrICAgIG9wdDUsIE5VTEwsICJhcmdzIGRvYzUiLCAiZG9jNSIsIE5VTEwsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3A0ID0KKysgIHsKKysgICAgb3B0NCwgTlVMTCwgImFyZ3MgZG9jNCIsICJkb2M0IiwgTlVMTCwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDMgPQorKyAgeworKyAgICBvcHQzLCBOVUxMLCAiYXJncyBkb2MzIiwgImRvYzMiLCBOVUxMLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBjaGlsZHJlbjJbXSA9CisrICB7CisrICAgIHsgJmFyZ3A0LCAwLCAiY2hpbGQzIiwgMyB9LAorKyAgICB7ICZhcmdwNSwgMCwgImNoaWxkNCIsIDQgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AyID0KKysgIHsKKysgICAgb3B0MiwgTlVMTCwgImFyZ3MgZG9jMiIsICJkb2MyIiwgY2hpbGRyZW4yLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBjaGlsZHJlbjFbXSA9CisrICB7CisrICAgIHsgJmFyZ3AyLCAwLCAiY2hpbGQxIiwgMSB9LAorKyAgICB7ICZhcmdwMywgMCwgImNoaWxkMiIsIDIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AxID0KKysgIHsKKysgICAgb3B0MSwgTlVMTCwgImFyZ3MgZG9jMSIsICJkb2MxIiwgY2hpbGRyZW4xLCBOVUxMLCBOVUxMCisrICB9OworKworKworK3N0YXRpYyBpbnQKKytkb190ZXN0ICh2b2lkKQorK3sKKysgIGFyZ3BfaGVscCAoJmFyZ3AxLCBzdGRvdXQsIEFSR1BfSEVMUF9MT05HLCAoY2hhciAqKSAidHN0LWFyZ3AyIik7CisrICByZXR1cm4gMDsKKyt9CisrCisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKCkKKysjaW5jbHVkZSAiLi4vdGVzdC1za2VsZXRvbi5jIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA0LURvbnQtc3VwcG9ydC1sb2NhbGlzZWQtb3B0aW1pemF0aW9ucy10aGlzLWhlbHBzLXRvLWgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5ZTEzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDMxNzg1YzU0NGFiZThiMjE1ZGJiMjI2NGZiMTFlZTcwNTE1MTU3OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1ODo1OSAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvN10gRG9udCBzdXBwb3J0IGxvY2FsaXNlZCBvcHRpbWl6YXRpb25zIHRoaXMgaGVscHMgdG8gaGF2ZSBhCisgZ2xvYmFsIC1PIGxldmVsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMgYi9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworaW5kZXggMDQxODdmNi4uZjU2ZjZjNSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jCisrKysgYi9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYworQEAgLTI4LDcgKzI4LDkgQEAKKyAgKiBlcnJvcjogY2FuJ3QgZmluZCBhIHJlZ2lzdGVyIGluIGNsYXNzIOKAmEdFTkVSQUxfUkVHU+KAmSB3aGlsZSByZWxvYWRpbmcg4oCYYXNt4oCZCisgICovCisgaW50CisrI2lmbmRlZiAgX19PUFRJTUlaRV9fCisgYXR0cmlidXRlX29wdGltaXplKCJPcyIpCisrI2VuZGlmCisgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKAorICAgICAgcHRocmVhZF9tdXRleF90ICptdXRleCwKKyAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNS1BbHdheXMtdXNlLU8yLWZvci1jb21waWxpbmctZm9yay5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOWIyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA4ODNkZWJjMjJlMzBhOTQ3ZmU1ODU4Y2MwN2VlNWFlYmQzZDA3YTJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTYgQXVnIDIwMTUgMjA6NTk6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA1LzddIEFsd2F5cyB1c2UgLU8yIGZvciBjb21waWxpbmcgZm9yay5jCisKK1doZW4gY29tcGlsaW5nIGluIHRodW1iIG1vZGUgZm9yIGFybSB3aXRoIC1PcyBnY2MgZ2l2ZXMgdXAgc2luY2UgaXQgY2FuCitub3QgZmluZCByZWdpc3RlcnMgdG8gc3BpbGwuIFNvIHdlIHVzZSAtTzIgb3B0aW9uIGZvciBjb21waWxpbmcgZm9yay5jCitJdCBtYXkgYmUgYWRkcmVzc2FibGUgaW4gZ2NjLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaCB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoIGIvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCitpbmRleCAwZWEwYjI5Li4wNzY3ZTljIDEwMDY0NAorLS0tIGEvbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoCisrKysgYi9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2gKK0BAIC0yMSwzICsyMSw5IEBAIEFTRkxBR1MtcHQtdmZvcmsuUyA9IC1tYXJtCisgQ0ZMQUdTLU9NSVQtcHQtdmZvcmsuUyA9IC1tdGh1bWIKKyBBU0ZMQUdTLXZmb3JrLlMgPSAtbWFybQorIENGTEFHUy1PTUlULXZmb3JrLlMgPSAtbXRodW1iCisrCisrIyBGb3IgYXJtIGZvcmsuYyBkb2VzIG5vdCBjb21waWxlIHdpdGggLU9zIHdoZW4gY29tcGlsaW5nCisrIyBpbiB0aHVtYjEgbW9kZQorK2lmZXEgKCQoQ09NUElMRV9JTl9USFVNQl9NT0RFKSx5KQorK0NGTEFHUy1mb3JrLmMgPSAtTzIKKytlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA2LWxkc28tbGltaXRlZC1zdXBwb3J0LWZvci1PUklHSU4taW4tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkODczNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDIzMyBAQAorRnJvbSBiNDBjMTI5ZWQyZDUzYjY5NDYzODgzYTU0MjJkZDRhMDEyYTM5OGY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMDU6MDI6MjcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2LzddIGxkc286IGxpbWl0ZWQgc3VwcG9ydCBmb3IgJE9SSUdJTiBpbiBycGF0aAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitEZXJpdmVkIGZyb206CitodHRwOi8vbGlzdHMuYnVzeWJveC5uZXQvcGlwZXJtYWlsL3VjbGliYy8yMDExLU1hcmNoLzA0NTAwMy5odG1sCisKK0hvd2V2ZXIsIHRoZSBhYm92ZSBwYXRjaCBpbnRyb2R1Y2VkICdfZGxfc3RyY2hyJyBpbiBsZHNvL2xkc28vZGwtZWxmLmMsCithbmQgY2F1c2VkIHRoZSBmb2xsb3dpbmcgdW5kZWZpbmVkIHJlZmVyZW5jaW5nIGNvbXBpbGluZyBlcnJvcjoKKworICB8IC4uLi9saWJkbC5hKGxpYmRsLm9zKTogSW4gZnVuY3Rpb24gYHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeSc6CisgIHwgLi4uL2RsLWVsZi5jOjE1NjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX2RsX3N0cmNocicKKyAgfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhpcyBwcm9ibGVtIHdvdWxkIGJlIHJlcHJvZHVjZWQgdGhyb3VnaCBjb21waWxpbmcgZ2RiIGluIHN0YXRpYyBtb2RlCit1c2luZyB1Y2xpYmMuCisKK1NvLCBhZGQgdGhlIGRlZmluaXRpb24gb2YgJ19kbF9zdHJjaHInIHRvIGZpeCBpdC4gVGhlICdfZGxfc3Ryc3RyJyBpcworYWRkZWQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogVGltbyBUZXLDpHMgPHRpbW8udGVyYXMgYXQgaWtpLmZpPgorU2lnbmVkLW9mZi1ieTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxkc28vaW5jbHVkZS9kbC1zdHJpbmcuaCB8ICAyICsrCisgbGRzby9sZHNvL2RsLWVsZi5jICAgICAgIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbGRzby9sZHNvL2xkc28uYyAgICAgICAgIHwgMTggKysrKysrKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oIGIvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCitpbmRleCBhYWNhZDEwLi4xNGFlNjE3IDEwMDY0NAorLS0tIGEvbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oCisrKysgYi9sZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmgKK0BAIC0yMDQsNyArMjA0LDkgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBjaGFyICogX2RsX2dldF9sYXN0X3BhdGhfY29tcG9uZW50KGNoYXIgKnBhdGgpCisgIyBkZWZpbmUgX2RsX3N0cmNhdCBzdHJjYXQKKyAjIGRlZmluZSBfZGxfc3RyY3B5IHN0cmNweQorICMgZGVmaW5lIF9kbF9zdHJjbXAgc3RyY21wCisrIyBkZWZpbmUgX2RsX3N0cmNociBzdHJjaHIKKyAjIGRlZmluZSBfZGxfc3RycmNociBzdHJyY2hyCisrIyBkZWZpbmUgX2RsX3N0cnN0ciBzdHJzdHIKKyAjIGRlZmluZSBfZGxfbWVtY3B5IG1lbWNweQorICMgZGVmaW5lIF9kbF9tZW1jbXAgbWVtY21wCisgIyBkZWZpbmUgX2RsX21lbXNldCBtZW1zZXQKK2RpZmYgLS1naXQgYS9sZHNvL2xkc28vZGwtZWxmLmMgYi9sZHNvL2xkc28vZGwtZWxmLmMKK2luZGV4IDU2MzE5MDUuLjZhYjdhZmUgMTAwNjQ0CistLS0gYS9sZHNvL2xkc28vZGwtZWxmLmMKKysrKyBiL2xkc28vbGRzby9kbC1lbGYuYworQEAgLTEzMyw1NiArMTMzLDYwIEBAIF9kbF9wcm90ZWN0X3JlbHJvIChzdHJ1Y3QgZWxmX3Jlc29sdmUgKmwpCisgICogaW4gdUNsaWJjL2xkc28vdXRpbC9sZGQuYyAqLworIHN0YXRpYyBzdHJ1Y3QgZWxmX3Jlc29sdmUgKgorIHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCByZmxhZ3MsIGNvbnN0IGNoYXIgKnBhdGhfbGlzdCwKKy0Jc3RydWN0IGR5bl9lbGYgKipycG50KQorKwlzdHJ1Y3QgZHluX2VsZiAqKnJwbnQsIGNvbnN0IGNoYXIqIG9yaWdpbikKKyB7CistCWNoYXIgKnBhdGgsICpwYXRoX24sICpteWxpYm5hbWU7CisrCWNoYXIgKm15bGlibmFtZTsKKysJY29uc3QgY2hhciAqcCwgKnBuOworIAlzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQ7CistCWludCBkb25lOworKwlpbnQgcGxlbjsKKyAKKyAJaWYgKHBhdGhfbGlzdD09TlVMTCkKKyAJCXJldHVybiBOVUxMOworIAorLQkvKiBXZSBuZWVkIGEgd3JpdGFibGUgY29weSBvZiB0aGlzIHN0cmluZywgYnV0IHdlIGRvbid0CistCSAqIG5lZWQgdGhpcyBhbGxvY2F0ZWQgcGVybWFuZW50bHkgc2luY2Ugd2UgZG9uJ3Qgd2FudAorLQkgKiB0byBsZWFrIG1lbW9yeSwgc28gdXNlIGFsbG9jYSB0byBwdXQgcGF0aCBvbiB0aGUgc3RhY2sgKi8KKy0JZG9uZSA9IF9kbF9zdHJsZW4ocGF0aF9saXN0KTsKKy0JcGF0aCA9IGFsbG9jYShkb25lICsgMSk7CistCisgCS8qIGFub3RoZXIgYml0IG9mIGxvY2FsIHN0b3JhZ2UgKi8KKyAJbXlsaWJuYW1lID0gYWxsb2NhKDIwNTApOworIAorLQlfZGxfbWVtY3B5KHBhdGgsIHBhdGhfbGlzdCwgZG9uZSsxKTsKKy0KKyAJLyogVW5saWtlIGxkZC5jLCBkb24ndCBib3RoZXIgdG8gZWxpbWluYXRlIGRvdWJsZSAvL3MgKi8KKyAKKyAJLyogUmVwbGFjZSBjb2xvbnMgd2l0aCB6ZXJvcyBpbiBwYXRoX2xpc3QgKi8KKyAJLyogOiBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiBwYXRoIG1hcHMgdG8gQ1dEICovCisgCS8qIDo6IGFueXdoZXJlIG1hcHMgQ1dEICovCisgCS8qICIiIG1hcHMgdG8gQ1dEICovCistCWRvbmUgPSAwOworLQlwYXRoX24gPSBwYXRoOworLQlkbyB7CistCQlpZiAoKnBhdGggPT0gMCkgeworLQkJCSpwYXRoID0gJzonOworLQkJCWRvbmUgPSAxOworKwlmb3IgKHAgPSBwYXRoX2xpc3Q7IHAgIT0gTlVMTDsgcCA9IHBuKSB7CisrCQlwbiA9IF9kbF9zdHJjaHIocCArIDEsICc6Jyk7CisrCQlpZiAocG4gIT0gTlVMTCkgeworKwkJCXBsZW4gPSBwbiAtIHA7CisrCQkJcG4rKzsKKysJCX0gZWxzZQorKwkJCXBsZW4gPSBfZGxfc3RybGVuKHApOworKworKwkJaWYgKHBsZW4gPj0gNyAmJiBfZGxfbWVtY21wKHAsICIkT1JJR0lOIiwgNykgPT0gMCkgeworKwkJCWludCBvbGVuOworKwkJCWlmIChyZmxhZ3MgJiYgcGxlbiAhPSA3KQorKwkJCQljb250aW51ZTsKKysJCQlpZiAob3JpZ2luID09IE5VTEwpCisrCQkJCWNvbnRpbnVlOworKwkJCWZvciAob2xlbiA9IF9kbF9zdHJsZW4ob3JpZ2luKSAtIDE7IG9sZW4gPj0gMCAmJiBvcmlnaW5bb2xlbl0gIT0gJy8nOyBvbGVuLS0pCisrCQkJCTsKKysJCQlpZiAob2xlbiA8PSAwKQorKwkJCQljb250aW51ZTsKKysJCQlfZGxfbWVtY3B5KCZteWxpYm5hbWVbMF0sIG9yaWdpbiwgb2xlbik7CisrCQkJX2RsX21lbWNweSgmbXlsaWJuYW1lW29sZW5dLCBwICsgNywgcGxlbiAtIDcpOworKwkJCW15bGlibmFtZVtvbGVuICsgcGxlbiAtIDddID0gMDsKKysJCX0gZWxzZSBpZiAocGxlbiAhPSAwKSB7CisrCQkJX2RsX21lbWNweShteWxpYm5hbWUsIHAsIHBsZW4pOworKwkJCW15bGlibmFtZVtwbGVuXSA9IDA7CisrCQl9IGVsc2UgeworKwkJCV9kbF9zdHJjcHkobXlsaWJuYW1lLCAiLiIpOworIAkJfQorLQkJaWYgKCpwYXRoID09ICc6JykgeworLQkJCSpwYXRoID0gMDsKKy0JCQlpZiAoKnBhdGhfbikKKy0JCQkJX2RsX3N0cmNweShteWxpYm5hbWUsIHBhdGhfbik7CistCQkJZWxzZQorLQkJCQlfZGxfc3RyY3B5KG15bGlibmFtZSwgIi4iKTsgLyogQXNzdW1lIGN1cnJlbnQgZGlyIGlmIGVtcHR5IHBhdGggKi8KKy0JCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgIi8iKTsKKy0JCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgbmFtZSk7CisrCQlfZGxfc3RyY2F0KG15bGlibmFtZSwgIi8iKTsKKysJCV9kbF9zdHJjYXQobXlsaWJuYW1lLCBuYW1lKTsKKyAjaWZkZWYgX19MRFNPX1NBRkVfUlVOUEFUSF9fCistCQkJaWYgKCpteWxpYm5hbWUgPT0gJy8nKQorKwkJaWYgKCpteWxpYm5hbWUgPT0gJy8nKQorICNlbmRpZgorLQkJCQlpZiAoKHRwbnQgPSBfZGxfbG9hZF9lbGZfc2hhcmVkX2xpYnJhcnkocmZsYWdzLCBycG50LCBteWxpYm5hbWUpKSAhPSBOVUxMKQorLQkJCQkJcmV0dXJuIHRwbnQ7CistCQkJcGF0aF9uID0gcGF0aCsxOworLQkJfQorLQkJcGF0aCsrOworLQl9IHdoaWxlICghZG9uZSk7CisrCQlpZiAoKHRwbnQgPSBfZGxfbG9hZF9lbGZfc2hhcmVkX2xpYnJhcnkocmZsYWdzLCBycG50LCBteWxpYm5hbWUpKSAhPSBOVUxMKQorKwkJCXJldHVybiB0cG50OworKwl9CisgCXJldHVybiBOVUxMOworIH0KKyAKK0BAIC0yMzQsNyArMjM4LDggQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJaWYgKHBudCkgeworIAkJcG50ICs9ICh1bnNpZ25lZCBsb25nKSB0cG50LT5keW5hbWljX2luZm9bRFRfU1RSVEFCXTsKKyAJCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIFJQQVRIPSclcydcbiIsIHBudCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50KSkgIT0gTlVMTCkKKysJCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQsCisrCQkJCQkJICAgICAgdHBudC0+bGlibmFtZSkpICE9IE5VTEwpCisgCQkJcmV0dXJuIHRwbnQxOworIAl9CisgI2VuZGlmCitAQCAtMjQzLDcgKzI0OCw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCS8qIENoZWNrIGluIExEX3tFTEZffUxJQlJBUllfUEFUSCwgaWYgc3BlY2lmaWVkIGFuZCBhbGxvd2VkICovCisgCWlmIChfZGxfbGlicmFyeV9wYXRoKSB7CisgCQlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBMRF9MSUJSQVJZX1BBVEg9JyVzJ1xuIiwgX2RsX2xpYnJhcnlfcGF0aCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xpYnJhcnlfcGF0aCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xpYnJhcnlfcGF0aCwgcnBudCwgTlVMTCkpICE9IE5VTEwpCisgCQl7CisgCQkJcmV0dXJuIHRwbnQxOworIAkJfQorQEAgLTI1Nyw3ICsyNjIsNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAlpZiAocG50KSB7CisgCQlwbnQgKz0gKHVuc2lnbmVkIGxvbmcpIHRwbnQtPmR5bmFtaWNfaW5mb1tEVF9TVFJUQUJdOworIAkJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgUlVOUEFUSD0nJXMnXG4iLCBwbnQpOworLQkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCkpICE9IE5VTEwpCisrCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50LCBOVUxMKSkgIT0gTlVMTCkKKyAJCQlyZXR1cm4gdHBudDE7CisgCX0KKyAjZW5kaWYKK0BAIC0yOTEsNyArMjk2LDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJLyogTG9vayBmb3IgbGlicmFyaWVzIHdoZXJldmVyIHRoZSBzaGFyZWQgbGlicmFyeSBsb2FkZXIKKyAJICogd2FzIGluc3RhbGxlZCAqLworIAlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBsZHNvIGRpcj0nJXMnXG4iLCBfZGxfbGRzb3BhdGgpOworLQl0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIF9kbF9sZHNvcGF0aCwgcnBudCk7CisrCXRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xkc29wYXRoLCBycG50LCBOVUxMKTsKKyAJaWYgKHRwbnQxICE9IE5VTEwpCisgCQlyZXR1cm4gdHBudDE7CisgI2VuZGlmCitAQCAtMzA0LDcgKzMwOSw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgI2lmbmRlZiBfX0xEU09fQ0FDSEVfU1VQUE9SVF9fCisgCQkJCQkiOiIgVUNMSUJDX1JVTlRJTUVfUFJFRklYICJ1c3IvWDExUjYvbGliIgorICNlbmRpZgorLQkJCQkJLCBycG50KTsKKysJCQkJCSwgcnBudCwgTlVMTCk7CisgCWlmICh0cG50MSAhPSBOVUxMKQorIAkJcmV0dXJuIHRwbnQxOworIAorZGlmZiAtLWdpdCBhL2xkc28vbGRzby9sZHNvLmMgYi9sZHNvL2xkc28vbGRzby5jCitpbmRleCBmMzhmOWUzLi4zODEyOTA4IDEwMDY0NAorLS0tIGEvbGRzby9sZHNvL2xkc28uYworKysrIGIvbGRzby9sZHNvL2xkc28uYworQEAgLTQwMiw2ICs0MDIsMjAgQEAgc3RhdGljIHB0cmRpZmZfdCBfZGxfYnVpbGRfbG9jYWxfc2NvcGUgKHN0cnVjdCBlbGZfcmVzb2x2ZSAqKmxpc3QsCisgCQkJCXAgKz0gX2RsX2J1aWxkX2xvY2FsX3Njb3BlIChwLCBxLT50cG50KTsKKyAJcmV0dXJuIHAgLSBsaXN0OworIH0KKysgCisrc3RhdGljIHZvaWQgX2RsX3NldHVwX3Byb2duYW1lKGNvbnN0IGNoYXIgKmFyZ3YwKQorK3sKKysJY2hhciBpbWFnZVtQQVRIX01BWF07CisrCXNzaXplX3QgczsKKysKKysJcyA9IF9kbF9yZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBpbWFnZSwgc2l6ZW9mKGltYWdlKSk7CisrCWlmIChzID4gMCAmJiBpbWFnZVswXSA9PSAnLycpIHsKKysJCWltYWdlW3NdID0gMDsKKysJCV9kbF9wcm9nbmFtZSA9IF9kbF9zdHJkdXAoaW1hZ2UpOworKwl9IGVsc2UgaWYgKGFyZ3YwKSB7CisrCQlfZGxfcHJvZ25hbWUgPSBhcmd2MDsKKysJfQorK30KKyAKKyB2b2lkICpfZGxfZ2V0X3JlYWR5X3RvX3J1bihzdHJ1Y3QgZWxmX3Jlc29sdmUgKnRwbnQsIERMX0xPQURBRERSX1RZUEUgbG9hZF9hZGRyLAorIAkJCSAgRWxmVyhhdXh2X3QpIGF1eHZ0W0FUX0VHSUQgKyAxXSwgY2hhciAqKmVudnAsIGNoYXIgKiphcmd2CitAQCAtNDU0LDkgKzQ2OCw3IEBAIHZvaWQgKl9kbF9nZXRfcmVhZHlfdG9fcnVuKHN0cnVjdCBlbGZfcmVzb2x2ZSAqdHBudCwgRExfTE9BREFERFJfVFlQRSBsb2FkX2FkZHIsCisgCSAqIGJlZW4gZml4ZWQgdXAgYnkgbm93LiAgU3RpbGwgbm8gZnVuY3Rpb24gY2FsbHMgb3V0c2lkZSBvZiB0aGlzCisgCSAqIGxpYnJhcnksIHNpbmNlIHRoZSBkeW5hbWljIHJlc29sdmVyIGlzIG5vdCB5ZXQgcmVhZHkuCisgCSAqLworLQlpZiAoYXJndlswXSkgeworLQkJX2RsX3Byb2duYW1lID0gYXJndlswXTsKKy0JfQorKwlfZGxfc2V0dXBfcHJvZ25hbWUoYXJndlswXSk7CisgCisgI2lmZGVmIF9fRFNCVF9fCisgCV9kbF9sZHNvX2RzYnQgPSAodm9pZCAqKXRwbnQtPmR5bmFtaWNfaW5mb1tEVF9EU0JUX0JBU0VfSURYXTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDctbnB0bC1hdGZvcmstSGlkZS1wdGhyZWFkX2F0Zm9yay1pbi1zaGFyZWQtdmVyc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5MzJjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDctbnB0bC1hdGZvcmstSGlkZS1wdGhyZWFkX2F0Zm9yay1pbi1zaGFyZWQtdmVyc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA5MDUxNmFmOWY3NzZmOWMyODM1YjQ3ZmM1Mjc3NWRjYjMwN2E4NWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjMgSnVuIDIwMTIgMTU6NTk6MDEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA3LzddIG5wdGwvYXRmb3JrOiBIaWRlIHB0aHJlYWRfYXRmb3JrIGluIHNoYXJlZCB2ZXJzaW9ucworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbiBiL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgoraW5kZXggNTVlZWJhMi4uOGNiOGZhOSAxMDA2NDQKKy0tLSBhL2xpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbgorKysrIGIvbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluCitAQCAtMTYsNiArMTYsNyBAQCBsaWJjLXNoYXJlZC1yb3V0aW5lcy15ID0gZm9yd2FyZC5jIGxpYmMtY2FuY2VsbGF0aW9uLmMKKyBsaWJjLXN0YXRpYy1yb3V0aW5lcy15ID0gYWxsb2NhX2N1dG9mZi5jIGxpYmMtY2FuY2VsbGF0aW9uLmMKKyBsaWJwdGhyZWFkLXNoYXJlZC1vbmx5LXJvdXRpbmVzLXkgPSB2ZXJzaW9uLmMKKyBsaWJwdGhyZWFkLXN0YXRpYy1vbmx5LXJvdXRpbmVzLXkgPSBwdGhyZWFkX2F0Zm9yay5jCisrCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gJChub3RkaXIgJCh3aWxkY2FyZCAkKGxpYnB0aHJlYWRfRElSKS9nZW5fKi5jKSkgIyBkdW1teSBnZW5lcmF0ZWQgZmlsZXMKKyBsaWJwdGhyZWFkLXJvdXRpbmVzLSArPSBhbGxvY2F0ZXN0YWNrLmMgIyBkdW1teSBpbmNsdWRlZCBieSBwdGhyZWFkX2NyZWF0ZS5jCisgbGlicHRocmVhZC1yb3V0aW5lcy0gKz0gcHRocmVhZF9tdXRleF9nZXRwcmlvY2VpbGluZy5jIHB0aHJlYWRfbXV0ZXhfc2V0cHJpb2NlaWxpbmcuYyAjIFhYWDogZGVsZXRlIHRob3NlIG9yIHVzZSB0aGVtIQorQEAgLTIwMSw3ICsyMDIsNyBAQCBDRkxBR1MtbXNnc25kLmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIENGTEFHUy10Y2RyYWluLmMgPSAtZmV4Y2VwdGlvbnMgLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcworIAorIENGTEFHUy1wdC1zeXN0ZW0uYyA9IC1mZXhjZXB0aW9ucyAtSSQodG9wX3NyY2RpcilsaWJjL3N0ZGxpYgorLQorK0NGTEFHUy1wdGhyZWFkX2F0Zm9yay5jID0gLUROT1RfSU5fbGliYworICMKKyAjIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyB1Q2xpYmMgc3BlY2lmaWMuCisgIworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvbG9jYWxlLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY2NDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvbG9jYWxlLmNmZwpAQCAtMCwwICsxLDMgQEAKK1VDTElCQ19IQVNfTE9DQUxFPXkKK1VDTElCQ19IQVNfWExPQ0FMRT15CitVQ0xJQkNfQlVJTERfTUlOSU1BTF9MT0NBTEU9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJmOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvb2JzdGFjay5jZmcKQEAgLTAsMCArMSBAQAorVUNMSUJDX0hBU19PQlNUQUNLPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8gYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMuZGlzdHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NzU0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMuZGlzdHJvCkBAIC0wLDAgKzEsMTkzIEBACisjCisjIEdlbmVyYWwgTGlicmFyeSBTZXR0aW5ncworIworIyBIQVZFX05PX1BJQyBpcyBub3Qgc2V0CisjIERPUElDIGlzIG5vdCBzZXQKKyMgSEFWRV9OT19TSEFSRUQgaXMgbm90IHNldAorIyBBUkNIX0hBU19OT19MRFNPIGlzIG5vdCBzZXQKK0hBVkVfU0hBUkVEPXkKKyMgRk9SQ0VfU0hBUkVBQkxFX1RFWFRfU0VHTUVOVFMgaXMgbm90IHNldAorTERTT19MRERfU1VQUE9SVD15CitMRFNPX0NBQ0hFX1NVUFBPUlQ9eQorIyBMRFNPX1BSRUxPQURfRklMRV9TVVBQT1JUIGlzIG5vdCBzZXQKK0xEU09fQkFTRV9GSUxFTkFNRT0ibGQuc28iCisjIFVDTElCQ19TVEFUSUNfTERDT05GSUcgaXMgbm90IHNldAorTERTT19SVU5QQVRIPXkKK1VDTElCQ19DVE9SX0RUT1I9eQorTERTT19HTlVfSEFTSF9TVVBQT1JUPXkKKyMgSEFTX05PX1RIUkVBRFMgaXMgbm90IHNldAorVUNMSUJDX0hBU19USFJFQURTPXkKK1VDTElCQ19IQVNfVEhSRUFEU19OQVRJVkU9eQorUFRIUkVBRFNfREVCVUdfU1VQUE9SVD15CisjIExJTlVYVEhSRUFEU19PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19MRlM9eQorIyBNQUxMT0MgaXMgbm90IHNldAorIyBNQUxMT0NfU0lNUExFIGlzIG5vdCBzZXQKK01BTExPQ19TVEFOREFSRD15CitNQUxMT0NfR0xJQkNfQ09NUEFUPXkKK1VDTElCQ19EWU5BTUlDX0FURVhJVD15CitDT01QQVRfQVRFWElUPXkKK1VDTElCQ19TVVNWM19MRUdBQ1k9eQorVUNMSUJDX1NVU1YzX0xFR0FDWV9NQUNST1M9eQorVUNMSUJDX1NVU1Y0X0xFR0FDWT15CitVQ0xJQkNfSEFTX1NIQURPVz15CitVQ0xJQkNfSEFTX1BST0dSQU1fSU5WT0NBVElPTl9OQU1FPXkKK1VDTElCQ19IQVNfX19QUk9HTkFNRT15CitVTklYOThQVFlfT05MWT15CitBU1NVTUVfREVWUFRTPXkKK1VDTElCQ19IQVNfTElCVVRJTD15CitVQ0xJQkNfSEFTX1RNX0VYVEVOU0lPTlM9eQorVUNMSUJDX0hBU19UWl9DQUNISU5HPXkKK1VDTElCQ19IQVNfVFpfRklMRT15CitVQ0xJQkNfSEFTX1RaX0ZJTEVfUkVBRF9NQU5ZPXkKK1VDTElCQ19UWl9GSUxFX1BBVEg9Ii9ldGMvVFoiCisKKyMKKyMgQWR2YW5jZWQgTGlicmFyeSBTZXR0aW5ncworIworVUNMSUJDX1BXRF9CVUZGRVJfU0laRT0yNTYKK1VDTElCQ19HUlBfQlVGRkVSX1NJWkU9MjU2CisKKyMKKyMgTmV0d29ya2luZyBTdXBwb3J0CisjCitVQ0xJQkNfSEFTX0lQVjY9eQorVUNMSUJDX0hBU19SUEM9eQorVUNMSUJDX0hBU19GVUxMX1JQQz15CitVQ0xJQkNfSEFTX1JFRU5UUkFOVF9SUEM9eQorVUNMSUJDX1VTRV9ORVRMSU5LPXkKK1VDTElCQ19TVVBQT1JUX0FJX0FERFJDT05GSUc9eQorCitVQ0xJQkNfSEFTX0JTRF9SRVNfQ0xPU0U9eQorVUNMSUJDX0hBU19MSUJSRVNPTFZfU1RVQj15CitVQ0xJQkNfSEFTX0xJQk5TTF9TVFVCPXkKKworIworIyBTdHJpbmcgYW5kIFN0ZGlvIFN1cHBvcnQKKyMKK1VDTElCQ19IQVNfU1RSSU5HX0dFTkVSSUNfT1BUPXkKK1VDTElCQ19IQVNfU1RSSU5HX0FSQ0hfT1BUPXkKK1VDTElCQ19IQVNfQ1RZUEVfVEFCTEVTPXkKK1VDTElCQ19IQVNfQ1RZUEVfU0lHTkVEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9VTlNBRkUgaXMgbm90IHNldAorVUNMSUJDX0hBU19DVFlQRV9DSEVDS0VEPXkKKyMgVUNMSUJDX0hBU19DVFlQRV9FTkZPUkNFRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1dDSEFSPXkKKyMgVUNMSUJDX0hBU19MT0NBTEUgaXMgbm90IHNldAorVUNMSUJDX0hBU19IRVhBREVDSU1BTF9GTE9BVFM9eQorVUNMSUJDX0hBU19HTElCQ19DVVNUT01fUFJJTlRGPXkKK1VDTElCQ19QUklOVEZfU0NBTkZfUE9TSVRJT05BTF9BUkdTPTkKK1VDTElCQ19IQVNfU0NBTkZfR0xJQkNfQV9GTEFHPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfTk9ORSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yNTY9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl81MTIgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8xMDI0IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfMjA0OCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzQwOTYgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl84MTkyIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfTk9ORT15CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfNCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVJTFRJTl9CVUZGRVJfOCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fU0hVVERPV05fT05fQUJPUlQgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19HRVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fUFVUQ19NQUNSTz15CitVQ0xJQkNfSEFTX1NURElPX0FVVE9fUldfVFJBTlNJVElPTj15CisjIFVDTElCQ19IQVNfRk9QRU5fTEFSR0VGSUxFX01PREUgaXMgbm90IHNldAorVUNMSUJDX0hBU19GT1BFTl9FWENMVVNJVkVfTU9ERT15CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9TVFJFQU1TPXkKK1VDTElCQ19IQVNfUFJJTlRGX01fU1BFQz15CitVQ0xJQkNfSEFTX0VSUk5PX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfRVJSTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NJR05VTV9NRVNTQUdFUz15CisjIFVDTElCQ19IQVNfU1lTX1NJR0xJU1QgaXMgbm90IHNldAorVUNMSUJDX0hBU19HTlVfR0VUT1BUPXkKK1VDTElCQ19IQVNfR05VX0dFVFNVQk9QVD15CisKKyMKKyMgQmlnIGFuZCBUYWxsCisjCitVQ0xJQkNfSEFTX1JFR0VYPXkKKyMgVUNMSUJDX0hBU19SRUdFWF9PTEQgaXMgbm90IHNldAorVUNMSUJDX0hBU19GTk1BVENIPXkKKyMgVUNMSUJDX0hBU19GTk1BVENIX09MRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1dPUkRFWFA9eQorVUNMSUJDX0hBU19ORlRXPXkKK1VDTElCQ19IQVNfRlRXPXkKK1VDTElCQ19IQVNfRlRTPXkKK1VDTElCQ19IQVNfR0xPQj15CitVQ0xJQkNfSEFTX0dOVV9HTE9CPXkKKworIworIyBMaWJyYXJ5IEluc3RhbGxhdGlvbiBPcHRpb25zCisjCitTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9Ii9saWIiCitSVU5USU1FX1BSRUZJWD0iLyIKK0RFVkVMX1BSRUZJWD0iLy91c3IiCitNVUxUSUxJQl9ESVI9ImxpYiIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIFVDTElCQ19CVUlMRF9QSUUgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX0FSQzRSQU5ET00gaXMgbm90IHNldAorIyBIQVZFX05PX1NTUCBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1NQIGlzIG5vdCBzZXQKK1VDTElCQ19CVUlMRF9SRUxSTz15CitVQ0xJQkNfQlVJTERfTk9XPXkKK1VDTElCQ19CVUlMRF9OT0VYRUNTVEFDSz15CisKKyMKKyMgdUNsaWJjIGRldmVsb3BtZW50L2RlYnVnZ2luZyBvcHRpb25zCisjCitDUk9TU19DT01QSUxFUl9QUkVGSVg9IiIKK1VDTElCQ19FWFRSQV9DRkxBR1M9IiIKKyMgRE9ERUJVRyBpcyBub3Qgc2V0CisjIERPREVCVUdfUFQgaXMgbm90IHNldAorIyBET1NUUklQIGlzIG5vdCBzZXQKKyMgRE9BU1NFUlRTIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVRyBpcyBub3Qgc2V0CisjIFNVUFBPUlRfTERfREVCVUdfRUFSTFkgaXMgbm90IHNldAorIyBVQ0xJQkNfTUFMTE9DX0RFQlVHR0lORyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0JBQ0tUUkFDRT15CitXQVJOSU5HUz0iLVdhbGwiCisjIEVYVFJBX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgRE9NVUxUSSBpcyBub3Qgc2V0CisjIFVDTElCQ19NSk4zX09OTFkgaXMgbm90IHNldAorCisjIG1hdGggc3R1ZmYgZm9yIHBlcmwKK0RPX0M5OV9NQVRIPXkKK1VDTElCQ19IQVNfTE9OR19ET1VCTEVfTUFUSD15CitVQ0xJQkNfSEFTX0ZFTlY9eQorVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15CisjIFVDTElCQ19MSU5VWF9NT0RVTEVfMjQgaXMgbm90IHNldAorVUNMSUJDX0xJTlVYX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfUkVBTFRJTUU9eQorVUNMSUJDX0hBU19BRFZBTkNFRF9SRUFMVElNRT15CitVQ0xJQkNfSEFTX05FVFdPUktfU1VQUE9SVD15CitVQ0xJQkNfSEFTX1NPQ0tFVD15CitVQ0xJQkNfSEFTX0JTRF9FUlI9eQorVUNMSUJDX0hBU19TWVNMT0c9eQorVUNMSUJDX0hBU19DUllQVD15CitVQ0xJQkNfSEFTX0NSWVBUX0lNUEw9eQorVUNMSUJDX0hBU19HTlVfRVJST1I9eQorVUNMSUJDX0hBU19QVFk9eQorVUNMSUJDX0JTRF9TUEVDSUZJQz15CitVQ0xJQkNfSEFTX0VQT0xMPXkKK1VDTElCQ19IQVNfRkxPQVRTPXkKKworIyBUaGUgYmVsb3cgb3B0aW9uIGlzIG5lZWRlZCBmb3IgQVJNIHNpbmNlIGRlcGVuZGluZworIyB1cG9uZyB3aGF0IGludHJ1Y3Rpb24gc2V0IGlzIGNob3NlbiB0aGlzIHdpbGwgYmUKKyMgZW5hYmxlZC4gQXMgc3VjaCBpdCBpcyBoYXJtbGVzcyBhbmQgd2lsbCBiZSBwdW50ZWQKKyMgYnkgbWVudWNvbmZpZyBmb3Igb3RoZXIgYXJjaGVzLgorCisjIENPTVBJTEVfSU5fVEhVTUJfTU9ERSBpcyBub3Qgc2V0CisKKyMgbmVlZGVkIGJ5IHN5c3RlbWQKK1VDTElCQ19IQVNfVVRNUFg9eQorVUNMSUJDX0xJTlVYX01PRFVMRV8yNj15CitVQ0xJQkNfSEFTX1JFU09MVkVSX1NVUFBPUlQ9eQorIyBuZWVkZWQgZm9yIExUUAorVUNMSUJDX1NVU1Y0X0xFR0FDWT15CitVQ0xJQkNfSEFTX09CU09MRVRFX0JTRF9TSUdOQUw9eQorRE9fWFNJX01BVEg9eQorVUNMSUJDX1NWNF9ERVBSRUNBVEVEPXkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLm1hY2hpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1ZjQ0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5tYWNoaW5lCkBAIC0wLDAgKzEsMTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgVmVyc2lvbjogMC45LjMyLWdpdAorIyBNb24gSnVsIDE5IDAxOjM0OjI5IDIwMTAKKyMKKyMKKyMgVXNpbmcgRUxGIGZpbGUgZm9ybWF0CisjCitGT1JDRV9PUFRJT05TX0ZPUl9BUkNIPXkKK0FSQ0hfSEFTX01NVT15CitBUkNIX1VTRV9NTVU9eQorS0VSTkVMX0hFQURFUlM9Ii91c3IvaW5jbHVkZSIKK0hBVkVfRE9UX0NPTkZJRz15CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzdjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWluaXRpYWxfZ2l0LmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK3JlcXVpcmUgdWNsaWJjLmluYworcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYworCitERVBFTkRTID0gImxpbnV4LWxpYmMtaGVhZGVycyBuY3Vyc2VzLW5hdGl2ZSB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCBrZXJuLXRvb2xzLW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtaW5pdGlhbCIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQyA9ICIiCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBJbnN0YWxsIGluaXRpYWwgaGVhZGVycyBpbnRvIHRoZSBjcm9zcyBkaXIKKwltYWtlIFBSRUZJWD0ke0R9IERFVkVMX1BSRUZJWD0ke3ByZWZpeH0vIFJVTlRJTUVfUFJFRklYPS8gXAorCQlpbnN0YWxsX2hlYWRlcnMgaW5zdGFsbF9zdGFydGZpbGVzCisKKyAgICAgICAgIyBhZGQgbGlua3MgdG8gbGludXgtbGliYy1oZWFkZXJzOiBmaW5hbCB1Y2xpYmMgYnVpbGQgbmVlZCB0aGlzLgorICAgICAgICBmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZCAke0R9JHtpbmNsdWRlZGlyfS8kdCBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS8kdAorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgbG4gLXNmICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgICAgIGRvbmUKKworfQorZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX3NpdGVjb25maWcgKCkgeworICAgICAgICA6Cit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLXBhY2thZ2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODE1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsMzcgQEAKKyMgRW5zdXJlIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UgaXMgcHJvY2Vzc2VkIGJlZm9yZSB1Y2xpYmMtc3RhdGljZGV2IHRvIGFsbG93CisjICpfbm9uc2hhcmVkLmEgbGlicmFyaWVzIHRvIGJlIHBhY2thZ2VkIGluIHRoZSB1Y2xpYmMtZGV2IHBhY2thZ2UuCitQQUNLQUdFUyA9ICJsZGQgdWNsaWJjLXV0aWxzLWRiZyB1Y2xpYmMtdXRpbHMgdWNsaWJjLWdjb252IHVjbGliYy10aHJlYWQtZGIgdWNsaWJjLWFyZ3AgdWNsaWJjLWJhY2t0cmFjZSB1Y2xpYmMtbGliY3J5cHQgdWNsaWJjLWxpYmludGwgdWNsaWJjLWxpYm5zbCB1Y2xpYmMtbGlicmVzb2x2IHVjbGliYy1saWJtIHVjbGliYy1saWJkbCB1Y2xpYmMtbGlidXRpbCB1Y2xpYmMtbGlicHRocmVhZCB1Y2xpYmMtbGlicnQgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jICR7UE59IgorCitGSUxFU191Y2xpYmMtbGliY3J5cHQgPSAiJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliY3J5cHQtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJpbnRsID0gIiR7YmFzZV9saWJkaXJ9L2xpYmludGwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliaW50bC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYm5zbCA9ICIke2Jhc2VfbGliZGlyfS9saWJuc2wqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibnNsLSouc28iCitGSUxFU191Y2xpYmMtbGlicmVzb2x2ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdiouc28uKiAke2Jhc2VfbGliZGlyfS9saWJyZXNvbHYtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJtID0gIiR7YmFzZV9saWJkaXJ9L2xpYm0qLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlibS0qLnNvIgorRklMRVNfdWNsaWJjLWxpYmRsID0gIiR7YmFzZV9saWJkaXJ9L2xpYmRsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYmRsLSouc28iCitGSUxFU191Y2xpYmMtbGlidXRpbCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1dGlsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnV0aWwtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJwdGhyZWFkID0gIiR7YmFzZV9saWJkaXJ9L2xpYnB0aHJlYWQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnJ0ID0gIiR7YmFzZV9saWJkaXJ9L2xpYnJ0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJ0LSouc28iCisKK0ZJTEVTX2xkZCA9ICIke2JpbmRpcn0vbGRkIgorRklMRVNfdWNsaWJjLXV0aWxzID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9IgorRklMRVNfdWNsaWJjLXV0aWxzLWRiZyArPSAiJHtiaW5kaXJ9Ly5kZWJ1ZyAke3NiaW5kaXJ9Ly5kZWJ1ZyIKK0ZJTEVTX3VjbGliYy1nY29udiA9ICIke2xpYmRpcn0vZ2NvbnYiCitGSUxFU191Y2xpYmMtdGhyZWFkLWRiID0gIiR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYioiCitGSUxFU191Y2xpYmMtYXJncCA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YXJncC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnVhcmdwKi5zby4qIgorRklMRVNfdWNsaWJjLWJhY2t0cmFjZSA9ICIke2Jhc2VfbGliZGlyfS9saWJ1YmFja3RyYWNlLSouc28gJHtiYXNlX2xpYmRpcn0vbGlidWJhY2t0cmFjZSouc28uKiIKKworIyBUaGUgbGFzdCBsaW5lIChnZGIgYW5kIGxpYjEpIGlzIGZvciB1Y2xpbnV4LXVjbGliYyBidWlsZHMKK3VjbGliY19iYXNlbGlicyA9ICIke2Jhc2VfbGliZGlyfS9sZCouc28uKiAke2Jhc2VfbGliZGlyfS9sZCouc28gXAorICAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9L2xpYmMqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidUNsaWJjLSouc28gXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJjLmdkYiAke2xpYmRpcn0vbGliYyAke2Jhc2VfbGliZGlyfS9saWIxLnNvIFwKKyAgICAgICAgICAgICAgICAgICIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiXAorICAgICAgICAke2xpYmRpcn0vbGliKi5zbyBcCisgICAgICAgICR7bGliZGlyfS8qX25vbnNoYXJlZC5hIFwKKyAgICAgICAgJHtsaWJkaXJ9L1tTXSpjcnRbMWluXS5vIFwKKyAgICAgICAgJHtsaWJkaXJ9L2NydHJlbG9jKi5vIFwKKyAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggJHtpbmNsdWRlZGlyfS8qLyouaCBcCisgICAgICAgIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke3VjbGliY19iYXNlbGlic30gL3NiaW4vbGRjb25maWcgXAorICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfSAke2RhdGFkaXJ9L3pvbmVpbmZvICR7bGliZGlyfS9sb2NhbGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2FhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLmluYwpAQCAtMCwwICsxLDE2OCBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIGVtYmVkZGVkIHN5c3RlbXMiCitERVNDUklQVElPTiA9ICJUaGUgbmFtZSB1Q2xpYmMgaXMgYW4gYWJicmV2aWF0aW9uIGZvciAndGhlIFwKK21pY3JvY29udHJvbGxlciBDIGxpYnJhcnknLiBGb3Igc2ltcGxpY2l0eSwgdUNsaWJjIGlzIHByb25vdW5jZWQgXAorJ3lldy1zZWUtbGliLXNlZScuICBUaGUgZ29hbCBvZiB1Q2xpYmMgaXMgdG8gcHJvdmlkZSBhcyBtdWNoIFwKK2Z1bmN0aW9uYWxpdHkgYXMgcG9zc2libGUgaW4gYSBzbWFsbCBhbW91bnQgb2Ygc3BhY2UsIGFuZCBpdCBpcyBpbnRlbmRlZCBcCitwcmltYXJpbHkgZm9yIGVtYmVkZGVkIHVzZS4gSXQgaXMgYWxzbyBoaWdobHkgY29uZmlndXJhYmxlIGluIHN1cHBvcnRlZCBcCitmZWF0dXJlcywgYXQgdGhlIGNvc3Qgb2YgQUJJIGRpZmZlcmVuY2VzIGZvciBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFwKK3VDbGliYyBoYXMgYmVlbiBkZXNpZ25lZCBmcm9tIHRoZSBncm91bmQgdXAgdG8gYmUgYSBDIGxpYnJhcnkgZm9yIFwKK2VtYmVkZGVkIExpbnV4LiAgSXQgaXMgTk9UIGNvbXBhdGlibGUgd2l0aCBiaW5hcmllcyBsaW5rZWQgYWdhaW5zdCBnbGliYy4iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorU0VDVElPTiA9ICJsaWJzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQi5ib2lsZXJwbGF0ZTttZDU9YWFkZGVhZGNkZGViOTE4Mjk3ZTBlNGFmYzUyY2U0NmYgXAorZmlsZTovLyR7U30vdGVzdC9yZWdleC90ZXN0cmVnZXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMxO21kNT0yMzRlZmIyMjdkMGE0MDY3N2Y4OTVlNGExZTI2ZTk2MCIKK1BSID0gInI5IgorCityZXF1aXJlIHVjbGliYy1jb25maWcuaW5jCisKK1BBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0iCisKKyMgc2l0ZWNvbmZpZy5iYmNsYXNzIHJ1bnMgY29uZmlndXJlIHdoaWNoIG5lZWRzIGEgd29ya2luZyBjb21waWxlcgorIyBGb3IgdGhlIGNvbXBpbGVyIHRvIHdvcmsgd2UgbmVlZCBhIHdvcmtpbmcgbGliYyB5ZXQgbGliYyBpc24ndAorIyBpbiB0aGUgc3lzcm9vdHMgZGlyZWN0b3J5IGF0IHRoaXMgcG9pbnQuIFRoaXMgbWVhbnMgdGhlIGxpYmMuc28KKyMgbGlua2VyIHNjcmlwdCB3b24ndCB3b3JrIGFzIHRoZSAtLXN5c3Jvb3Qgc2V0dGluZyBpc24ndCBjb3JyZWN0LgorIyBIZXJlIHdlIGNyZWF0ZSBhIGhhY2tlZCB1cCBsaWJjIGxpbmtlciBzY3JpcHQgYW5kIHBhc3MgaW4gdGhlIHJpZ2h0CisjIGZsYWdzIHRvIGxldCBjb25maWd1cmUgd29yay4gVWdseS4KK0VYVFJBU0lURUNPTkZJRyA9ICJDRkxBR1M9JyR7Q0ZMQUdTfSAtV2wsLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMgLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0gLVdsLC1MJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX2xpYmRpcn0nIgorc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlX3ByZXBlbmQgPSAiIFwKK21rZGlyIC1wICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorY3AgJHtTWVNST09UX0RFU1RESVJ9JHtsaWJkaXJ9L2xpYmMuc28gJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCitzZWQgLWkgLWUgJ3MjICR7YmFzZV9saWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSNnJyAtZSAncyMgJHtsaWJkaXJ9IyAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0jZycgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjL2xpYmMuc287IFwKKyIKKworIyBGb3Igbm93LCB3ZSB3aWxsIHNraXAgYnVpbGRpbmcgb2YgYSBnY2MgcGFja2FnZSBpZiBpdCBpcyBhIHVjbGliYyBvbmUKKyMgYW5kIG91ciBidWlsZCBpcyBub3QgYSB1Y2xpYmMgb25lLCBhbmQgd2Ugc2tpcCBhIGdsaWJjIG9uZSBpZiBvdXIgYnVpbGQKKyMgaXMgYSB1Y2xpYmMgYnVpbGQuCitDT01QQVRJQkxFX0hPU1QgPSAiLiotdWNsaWJjLioiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKyMgZG9fc3RhZ2UgYmFyZnMgb24gYSBDQyB3aXRoIHdoaXRlc3BhY2UsIHRoZXJlZm9yZSBwdXQgdGhlICdIT1NUX0NDX0FSQ0gnIGluCisjIHRoZSBDRkxBR1MgKHdoZW4gYnVpbGRpbmcgdGhlIHV0aWxzKS4KK09FTUFLRV9OT19DQyA9ICInU1RSSVBUT09MPXRydWUnICdMRD0ke0xEfSciCitFWFRSQV9PRU1BS0UgPSAiJHtPRU1BS0VfTk9fQ0N9IFwKKyAgICAgICAgICAgICAgICAnSE9TVENDPSR7QlVJTERfQ0N9JyBcCisgICAgICAgICAgICAgICAgJ0hPU1RfQ0ZMQUdTPSR7QlVJTERfQ0ZMQUdTfScgXAorICAgICAgICAgICAgICAgICdDQz0ke0NDfScgXAorICAgICAgICAgICAgICAgIEFSQ0g9JHtVQ0xJQkNfQVJDSH0iCisKK0VYVFJBX09FTUFLRV90YXNrX2RvX3BhY2thZ2UgPSAiJHtPRU1BS0VfTk9fQ0N9IgorCisjIGVuYWJsZSB2ZXJib3NlIG91dHB1dDoKK2V4cG9ydCBWPSIyIgorCisjIC1PPG4+IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGVuZHMgdXAgd2l0aCBHQ0MgSUNFIG9uIHRodW1iIGFzIHJlcG9ydGVkCisjIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDQ4NjAKKyMKK0NGTEFHU19hcm0gOj0gIiR7QG9lX2ZpbHRlcl9vdXQoJy1mbm8tb21pdC1mcmFtZS1wb2ludGVyJywgJyR7Q0ZMQUdTfScsIGQpfSIKK1VDTElCQ19FWFRSQV9DRkxBR1MgIDo9ICIke0BvZV9maWx0ZXJfb3V0KCcoLUlcUyt8LWlcUyspJywgJyR7Q0ZMQUdTfScsIGQpfSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgdW5zZXQgQ0ZMQUdTIENQUEZMQUdTIENYWEZMQUdTIExERkxBR1MKKyAgb2VfcnVubWFrZSBwcmVnZW4KK30KKworY29uZmlnbWFuZ2xlID0gJy9eS0VSTkVMX0hFQURFUlMvZDsgXAorICAgICAgICAgICAgICAgIC9eUlVOVElNRV9QUkVGSVgvZDsgXAorICAgICAgICAgICAgICAgIC9eREVWRUxfUFJFRklYL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlNIQVJFRF9MSUJfTE9BREVSX1BSRUZJWC9kOyBcCisgICAgICAgICAgICAgICAgL15VQ0xJQkNfRVhUUkFfQ0ZMQUdTL2Q7IFwKKyAgICAgICAgICAgICAgICBzLC4qVUNMSUJDX0hBU19XQ0hBUi4qLFVDTElCQ19IQVNfV0NIQVI9eSxnOyBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qQ09NUElMRV9JTl9USFVNQl9NT0RFLiosQ09NUElMRV9JTl9USFVNQl9NT0RFPXksOyJdW2QuZ2V0VmFyKCJBUk1fSU5TVFJVQ1RJT05fU0VUIiwgVHJ1ZSkgIT0gImFybSJdfSBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qVUNMSUJDX0hBU19MT0NBTEUuKixVQ0xJQkNfSEFTX0xPQ0FMRT15LDsiXVtkLmdldFZhcigiVVNFX05MUyIsIFRydWUpID09ICJ5ZXMiXX0gXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKkxEU09fR05VX0hBU0hfU1VQUE9SVC4qLCMgTERTT19HTlVfSEFTSF9TVVBQT1JUIGlzIG5vdCBzZXQsOyJdW2QuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpIGluIFsnbWlwcycsICdtaXBzZWwnLCAnbWlwczY0JywgJ21pcHM2NGVsJywgJ2F2cjMyJ11dfSBcCisgICAgICAgICAgICAgICAgL15DUk9TUy9kOyBcCisgICAgICAgICAgICAgICAgL15UQVJHRVRfQVJDSD0vZDsgXAorICAgICAgICAgICAgICAgIC9eVEFSR0VUXy9zLF5cKFtePV0qXCkuKiwjIFwxIGlzIG5vdCBzZXQsZzsgXAorICAgICAgICAgICAgICAgIHMsXkRPU1RSSVAuKiwjIERPU1RSSVAgaXMgbm90IHNldCxnOyBcCisgICAgICAgICAgICAgICAgL19bRU9dKkFCSS9kOyBcCisgICAgICAgICAgICAgICAgL0hBU19GUFUvZDsgXAorICAgICAgICAgICAgICAgICR7QFsiIiwicywuKk1VTFRJTElCX0RJUi4qLE1VTFRJTElCX0RJUj1cIiR7YmFzZWxpYn1cIiw7Il1bZC5nZXRWYXIoImJhc2VsaWIiLCBUcnVlKSAhPSAibGliIl19IFwKKyAgICAgICAgICAgICAgICcKK09FX0ZFQVRVUkVTIDo9ICIke0BmZWF0dXJlc190b191Y2xpYmNfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fdWNsaWJjX2RlbChkKX0iCitweXRob24gKCkgeworICAgIGlmICIke09FX0RFTH0iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKworICAgICMgYnkgZGVmYXVsdCB1Y2xpYmMgdXNlcyBtaXBzMSBJU0EgZm9yIG8zMiBBQkkKKyAgICAjIGlmIHdlIHVzZSBUQVJHRVRfQ0NfQVJDSD0iLW1hcmNoPW1pcHMzMiIgd2UgZW5kIHVwIAorICAgICMgd2l0aCBjb25mbGljdGluZyBtYXJjaCBvcHRpb25zIHRvIGdjYy4gSGVyZSB3ZQorICAgICMgYXNrIGZvciBNSVBTMzIgSVNBIHRvIG1hdGNoIHRoZSBjaG9zZW4gYXJjaAorICAgIHR1bmUgPSBkLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKQorICAgIGlmIHR1bmUuc3RhcnRzd2l0aCgnbWlwczMyJyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICB0dW5lID0gcmUuc3ViKCcoZWwpKigtbmYpKicsICcnLCB0dW5lKQorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBNSVBTMzJfQ0hFQ0skL2FcXFxuQ09ORklHX01JUFNfSVNBXyVzPXlcblxuIiAlICh0dW5lLnVwcGVyKCkpKQorICAgIGlmICIke09FX0ZFQVRVUkVTfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgRElTVFJPIEZFQVRVUkVTJC9hXFxcbiVzXG5cbiIgJQorICAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKChkLmV4cGFuZCgiJHtPRV9GRUFUVVJFU30iKS5zcGxpdCgiXG4iKSkpKSkKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICIvXiMjIyBDUk9TUyQvYVxcXG4lc1xuIiAlCisgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbihbIkNST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiVUNMSUJDX0VYVFJBX0NGTEFHUz1cIiR7VUNMSUJDX0VYVFJBX0NGTEFHU31cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIktFUk5FTF9IRUFERVJTPVwiJHtTVEFHSU5HX0lOQ0RJUn1cIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJVTlRJTUVfUFJFRklYPVwiL1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiREVWRUxfUFJFRklYPVwiLyR7cHJlZml4fVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYPVwiL2xpYlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgICApKQorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIFRHVCQvYVxcXG5UQVJHRVRfQVJDSD1cIiVzXCJcXG5UQVJHRVRfJXM9eVxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoIiR7VUNMSUJDX0FSQ0h9IiwgIiR7VUNMSUJDX0FSQ0h9IikpCisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICIvXiMjIyBGUFUkL2FcXFxuJXNcblxuIiAlIChbIlVDTElCQ19IQVNfRlBVPXkiLCIjIFVDTElCQ19IQVNfRlBVIGlzIG5vdCBzZXQiXVtkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF1dKSkKKyAgICBpZiAiJHtVQ0xJQkNfRU5ESUFOfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAiL14jIyMgQUJJJC9hXFxcbkFSQ0hfV0FOVFNfJXNfRU5ESUFOPXlcblxuIiAlICgiJHtVQ0xJQkNfRU5ESUFOfSIpKQorICAgIGlmICIke1VDTElCQ19BQkl9IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICIvXiMjIyBBQkkkL2FcXFxuQ09ORklHXyVzPXlcblxuIiAlICgiJHtVQ0xJQkNfQUJJfSIpKQorfQorCitweXRob24gZG9fcGF0Y2hfYXBwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgc3VicHJvY2Vzcy5jYWxsKCJsbiAtc2YgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXggJHtTfS9pbmNsdWRlL2xpbnV4Iiwgc2hlbGw9VHJ1ZSkKKyAgICBzdWJwcm9jZXNzLmNhbGwoImxuIC1zZiAke1NUQUdJTkdfSU5DRElSfS9hc20gJHtTfS9pbmNsdWRlL2FzbSIsIHNoZWxsPVRydWUpCit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAgICAgcm0gLWYgJHtTfS8uY29uZmlnCisKKyAgICAgICAgIyBPcGVuRW1iZWRkZWQgc3BsaXRzIHRoZSB1Q2xpYmMuY29uZmlnIGluIHR3byBwYXJ0czoKKyAgICAgICAgIyB1Q2xpYmMubWFjaGluZSwgdUNsaWJjLmRpc3RybworICAgICAgICBlY2hvICIjIyMgdUNsaWJjLm1hY2hpbmUgIyMjIiA+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGNhdCAke1dPUktESVJ9L3VDbGliYy5tYWNoaW5lID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyB1Q2xpYmMuZGlzdHJvICMjIyIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgY2F0ICR7V09SS0RJUn0vdUNsaWJjLmRpc3RybyA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBlY2hvICIjIyMgQ1JPU1MiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBUR1QiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBNTVUiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBGUFUiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBBQkkiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBESVNUUk8gRkVBVFVSRVMiID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBNSVBTMzJfQ0hFQ0siID4+JHtTfS9tZXJnZWQuY29uZmlnCisKKyAgICAgICAgIyBNYW5nbGUgdGhlIHJlc3VsdGluZyAuY29uZmlnIGRlcGVuZGluZyBvbiBPRSB2YXJpYWJsZXMKKyAgICAgICAgc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vbWVyZ2VkLmNvbmZpZworCWNwICR7U30vbWVyZ2VkLmNvbmZpZyAuY29uZmlnCisgICAgICAgIG1lcmdlX2NvbmZpZy5zaCAtciAtbiAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKKworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7RH0gaW5zdGFsbAorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfS9pY29udi5oCit9CisKKyMgYnVpbGQgbGRkLCBsZGNvbmZpZyBhbmQgZnJpZW5kcyBidXQgb25seSBmb3IgZnVsbCB1Y2xpYmMKK2RvX2luc3RhbGxfYXBwZW5kX3BuLXVjbGliYyAoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0gIlNTUF9BTExfQ0ZMQUdTPSR7VEFSR0VUX0xJTktfSEFTSF9TVFlMRX0iIC1DIHV0aWxzIHV0aWxzX2luc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDAyYjNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliY19naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB1Y2xpYmMuaW5jCityZXF1aXJlIHVjbGliYy1wYWNrYWdlLmluYworcmVxdWlyZSB1Y2xpYmMtZ2l0LmluYworCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitQUk9WSURFUyArPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscyBcCisgICAgICAgICAgIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIFwKKyAgICAgICAgICAgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIFwKKyAgICAgICAgICAgbGludXgtbGliYy1oZWFkZXJzIG5jdXJzZXMtbmF0aXZlIFwKKyAgICAgICAgICAgbGliZ2NjLWluaXRpYWwga2Vybi10b29scy1uYXRpdmUiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICJsaW51eC1saWJjLWhlYWRlcnMtZGV2IgorUlBST1ZJREVTXyR7UE59LWRldiArPSAibGliYy1kZXYgdmlydHVhbC1saWJjLWRldiIKKyMgdWNsaWJjIGRvZXMgbm90IHJlYWxseSBoYXZlIGxpYnNlZ2ZhdWx0IGJ1dCB0aGVuIHVzaW5nIHRoZSBvbmUgZnJvbSBnbGliYyBpcyBhbHNvIG5vdAorIyBnb2luZyB0byB3b3JrLiBTbyB3ZSBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBpdCB0byBtYWtlIGJpdGJha2Ugbm90IHB1bGwgb3RoZXIgcmVjaXBlcworIyB0byBzYXRpc2Z5IHRoaXMgZGVwZW5kZW5jeSBmb3IgdGhlIGltYWdlcy90YXNrcworCitSUFJPVklERVNfJHtQTn0gKz0gImxpYnNlZ2ZhdWx0IHJ0bGQoR05VX0hBU0gpIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9tb3VudC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU3OGVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbW91bnQucnVsZXMKQEAgLTAsMCArMSwxOSBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIE1lZGlhIGF1dG9tb3VudGluZworU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJhZGQiICAgIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgorU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJyZW1vdmUiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL21vdW50LnNoIgorU1VCU1lTVEVNPT0iYmxvY2siLCBBQ1RJT049PSJjaGFuZ2UiLCBFTlZ7RElTS19NRURJQV9DSEFOR0V9PT0iMSIgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQuc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9uZXQucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NzZhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgSGFuZGxlIG5ldHdvcmsgaW50ZXJmYWNlIHNldHVwCitTVUJTWVNURU09PSJuZXQiLCBBQ1RJT049PSJhZGQiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL25ldHdvcmsuc2giCitTVUJTWVNURU09PSJuZXQiLCBBQ1RJT049PSJyZW1vdmUiIFJVTis9Ii9ldGMvdWRldi9zY3JpcHRzL25ldHdvcmsuc2giCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbG9jYWxleHRyYS5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUxZDNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBUaGUgZmlyc3QgcnRjIGRldmljZSBpcyBzeW1saW5rZWQgdG8gL2Rldi9ydGMKK0tFUk5FTD09InJ0YzAiLCBTWU1MSU5LKz0icnRjIgorCisjVGhlIGZpcnN0IGZyYW1lYnVmZmVyIGlzIHN5bWxpbmtlZCB0byAvZGV2L2ZiCitLRVJORUw9PSJmYjAiLCAgU1lNTElOSys9ImZiIgorCisjIE1ha2UgYWxsIGlucHV0IGRldmljZXMgcmVhZC13cml0ZSB0byB0aGUgaW5wdXQgZ3JvdXAKK1NVQlNZU1RFTT09ImlucHV0IiwgR1JPVVA9ImlucHV0IiwgTU9ERT0iNjYwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LmJsYWNrbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDkzNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5ibGFja2xpc3QKQEAgLTAsMCArMSw1IEBACisvZGV2L2xvb3AKKy9kZXYvcmFtCisvZGV2L210ZGJsb2NrCisvZGV2L21kCisvZGV2L2RtLSoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZWE5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorIworIyBDYWxsZWQgZnJvbSB1ZGV2CisjCisjIEF0dGVtcHQgdG8gbW91bnQgYW55IGFkZGVkIGJsb2NrIGRldmljZXMgYW5kIHVtb3VudCBhbnkgcmVtb3ZlZCBkZXZpY2VzCisKKworTU9VTlQ9Ii9iaW4vbW91bnQiCitQTU9VTlQ9Ii91c3IvYmluL3Btb3VudCIKK1VNT1VOVD0iL2Jpbi91bW91bnQiCitmb3IgbGluZSBpbiBgZ3JlcCAtdiBeIyAvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0YAorZG8KKwlpZiBbIGAgZXhwciBtYXRjaCAiJERFVk5BTUUiICIkbGluZSIgYCAtZ3QgMCBdOworCXRoZW4KKwkJbG9nZ2VyICJ1ZGV2L21vdW50LnNoIiAiWyRERVZOQU1FXSBpcyBibGFja2xpc3RlZCwgaWdub3JpbmciCisJCWV4aXQgMAorCWZpCitkb25lCisKK2F1dG9tb3VudCgpIHsJCisJbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorCisJISB0ZXN0IC1kICIvcnVuL21lZGlhLyRuYW1lIiAmJiBta2RpciAtcCAiL3J1bi9tZWRpYS8kbmFtZSIKKwkjIFNpbGVudCB1dGlsLWxpbnV4J3MgdmVyc2lvbiBvZiBtb3VudGluZyBhdXRvCisJaWYgWyAieGByZWFkbGluayAkTU9VTlRgIiA9ICJ4L2Jpbi9tb3VudC51dGlsLWxpbnV4IiBdIDsKKwl0aGVuCisJCU1PVU5UPSIkTU9VTlQgLW8gc2lsZW50IgorCWZpCisJCisJIyBJZiBmaWxlc3lzdGVtIHR5cGUgaXMgdmZhdCwgY2hhbmdlIHRoZSBvd25lcnNoaXAgZ3JvdXAgdG8gJ2Rpc2snLCBhbmQKKwkjIGdyYW50IGl0IHdpdGggIHcvci94IHBlcm1pc3Npb25zLgorCWNhc2UgJElEX0ZTX1RZUEUgaW4KKwl2ZmF0fGZhdCkKKwkJTU9VTlQ9IiRNT1VOVCAtbyB1bWFzaz0wMDcsZ2lkPWBhd2sgLUYnOicgJy9eZGlzay97cHJpbnQgJDN9JyAvZXRjL2dyb3VwYCIKKwkJOzsKKwkjIFRPRE8KKwkqKQorCQk7OworCWVzYWMKKworCWlmICEgJE1PVU5UIC10IGF1dG8gJERFVk5BTUUgIi9ydW4vbWVkaWEvJG5hbWUiCisJdGhlbgorCQkjbG9nZ2VyICJtb3VudC5zaC9hdXRvbW91bnQiICIkTU9VTlQgLXQgYXV0byAkREVWTkFNRSBcIi9ydW4vbWVkaWEvJG5hbWVcIiBmYWlsZWQhIgorCQlybV9kaXIgIi9ydW4vbWVkaWEvJG5hbWUiCisJZWxzZQorCQlsb2dnZXIgIm1vdW50LnNoL2F1dG9tb3VudCIgIkF1dG8tbW91bnQgb2YgWy9ydW4vbWVkaWEvJG5hbWVdIHN1Y2Nlc3NmdWwiCisJCXRvdWNoICIvdG1wLy5hdXRvbW91bnQtJG5hbWUiCisJZmkKK30KKwkKK3JtX2RpcigpIHsKKwkjIFdlIGRvIG5vdCB3YW50IHRvIHJtIC1yIHBvcHVsYXRlZCBkaXJlY3RvcmllcworCWlmIHRlc3QgImBmaW5kICIkMSIgfCB3YyAtbCB8IHRyIC1kICIgImAiIC1sdCAyIC1hIC1kICIkMSIKKwl0aGVuCisJCSEgdGVzdCAteiAiJDEiICYmIHJtIC1yICIkMSIKKwllbHNlCisJCWxvZ2dlciAibW91bnQuc2gvYXV0b21vdW50IiAiTm90IHJlbW92aW5nIG5vbi1lbXB0eSBkaXJlY3RvcnkgWyQxXSIKKwlmaQorfQorCisjIE5vIElEX0ZTX1RZUEUgZm9yIGNkcm9tIGRldmljZSwgeWV0IGl0IHNob3VsZCBiZSBtb3VudGVkCituYW1lPSJgYmFzZW5hbWUgIiRERVZOQU1FImAiCitbIC1lIC9zeXMvYmxvY2svJG5hbWUvZGV2aWNlL21lZGlhIF0gJiYgbWVkaWFfdHlwZT1gY2F0IC9zeXMvYmxvY2svJG5hbWUvZGV2aWNlL21lZGlhYAorCitpZiBbICIkQUNUSU9OIiA9ICJhZGQiIF0gJiYgWyAtbiAiJERFVk5BTUUiIF0gJiYgWyAtbiAiJElEX0ZTX1RZUEUiIC1vICIkbWVkaWFfdHlwZSIgPSAiY2Ryb20iIF07IHRoZW4KKwlpZiBbIC14ICIkUE1PVU5UIiBdOyB0aGVuCisJCSRQTU9VTlQgJERFVk5BTUUgMj4gL2Rldi9udWxsCisJZWxpZiBbIC14ICRNT1VOVCBdOyB0aGVuCisgICAgCQkkTU9VTlQgJERFVk5BTUUgMj4gL2Rldi9udWxsCisJZmkKKwkKKwkjIElmIHRoZSBkZXZpY2UgaXNuJ3QgbW91bnRlZCBhdCB0aGlzIHBvaW50LCBpdCBpc24ndAorCSMgY29uZmlndXJlZCBpbiBmc3RhYiAobm90ZSB0aGUgcm9vdCBmaWxlc3lzdGVtIGNhbiBzaG93IHVwIGFzCisJIyAvZGV2L3Jvb3QgaW4gL3Byb2MvbW91bnRzLCBzbyBjaGVjayB0aGUgZGV2aWNlIG51bWJlciB0b28pCisJaWYgZXhwciAkTUFKT1IgIioiIDI1NiArICRNSU5PUiAhPSBgc3RhdCAtYyAlZCAvYDsgdGhlbgorCQlncmVwIC1xICJeJERFVk5BTUUgIiAvcHJvYy9tb3VudHMgfHwgYXV0b21vdW50CisJZmkKK2ZpCisKKworaWYgWyAiJEFDVElPTiIgPSAicmVtb3ZlIiBdIHx8IFsgIiRBQ1RJT04iID0gImNoYW5nZSIgXSAmJiBbIC14ICIkVU1PVU5UIiBdICYmIFsgLW4gIiRERVZOQU1FIiBdOyB0aGVuCisJZm9yIG1udCBpbiBgY2F0IC9wcm9jL21vdW50cyB8IGdyZXAgIiRERVZOQU1FIiB8IGN1dCAtZiAyIC1kICIgIiBgCisJZG8KKwkJJFVNT1VOVCAkbW50CisJZG9uZQorCQorCSMgUmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVzIGZyb20gYXV0by1tb3VudGVyCisJbmFtZT0iYGJhc2VuYW1lICIkREVWTkFNRSJgIgorCXRlc3QgLWUgIi90bXAvLmF1dG9tb3VudC0kbmFtZSIgJiYgcm1fZGlyICIvcnVuL21lZGlhLyRuYW1lIgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbmV0d29yay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWU5MjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCisjIFdlIGdldCB0d28gImFkZCIgZXZlbnRzIGZvciBob3N0YXAgY2FyZHMgZHVlIHRvIHdpZmkwCitlY2hvICIkSU5URVJGQUNFIiB8IGdyZXAgLXEgd2lmaSAmJiBleGl0IDAKKworIyB1ZGV2ZCBkb2VzIGNsZWFyZW52KCkuIEV4cG9ydCBzaGVsbCBQQVRIIHRvIGNoaWxkcmVuLgorZXhwb3J0IFBBVEgKKworIyBDaGVjayBpZiAvZXRjL2luaXQuZC9uZXR3b3JrIGhhcyBiZWVuIHJ1biB5ZXQgdG8gc2VlIGlmIHdlIGFyZSAKKyMgY2FsbGVkIGJ5IHN0YXJ0aW5nIC9ldGMvcmNTLmQvUzAzdWRldiBhbmQgbm90IGJ5IGhvdHBsdWdnaW5nIGEgZGV2aWNlCisjCisjIEF0IHRoaXMgc3RhZ2UsIG5ldHdvcmsgaW50ZXJmYWNlcyBzaG91bGQgbm90IGJlIGJyb3VnaHQgdXAKKyMgYXV0b21hdGljYWxseSBiZWNhdXNlOgorIyBhKQkvZXRjL2luaXQuZC9uZXR3b3JrIGhhcyBub3QgYmVlbiBydW4geWV0IChzZWN1cml0eSBpc3N1ZSkKKyMgYikgCS92YXIgaGFzIG5vdCBiZWVuIHBvcHVsYXRlZCB5ZXQgc28gL2V0Yy9yZXNvbHYsY29uZiBwb2ludHMgdG8gCisjCW9ibGl2aW9uLCBtYWtpbmcgdGhlIG5ldHdvcmsgdW51c2FibGUKKyMKKworc3Bvb2ZwPSJgZ3JlcCBec3Bvb2Zwcm90ZWN0IC9ldGMvbmV0d29yay9vcHRpb25zYCIKK2lmIHRlc3QgLXogIiRzcG9vZnAiCit0aGVuCisJIyBUaGlzIGlzIHRoZSBkZWZhdWx0IGZyb20gL2V0Yy9pbml0LmQvbmV0d29yaworCXNwb29mcF92YWw9eWVzCitlbHNlCisJc3Bvb2ZwX3ZhbD0ke3Nwb29mcCNzcG9vZnByb3RlY3Q9fQorZmkKKwordGVzdCAiJHNwb29mcF92YWwiID0geWVzICYmIHNwb29mcF92YWw9MSB8fCBzcG9vZnBfdmFsPTAKKworIyBJIHRoaW5rIGl0IGlzIHNhZmUgdG8gYXNzdW1lIHRoYXQgImxvIiB3aWxsIGFsd2F5cyBiZSB0aGVyZSA7KQoraWYgdGVzdCAiYGNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9sby9ycF9maWx0ZXJgIiAhPSAiJHNwb29mcF92YWwiIC1hIC1uICIkc3Bvb2ZwX3ZhbCIKK3RoZW4KKwllY2hvICIkSU5URVJGQUNFIiA+PiAvZGV2L3VkZXZfbmV0d29ya19xdWV1ZQkKKwlleGl0IDAKK2ZpCisKKyMKKyMgQ29kZSB0YWtlbiBmcm9tIHBjbWNpYS1jczovZXRjL3BjbWNpYS9uZXR3b3JrCisjCisKKyMgaWYgdGhpcyBpbnRlcmZhY2UgaGFzIGFuIGVudHJ5IGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzLCBsZXQgaWZ1cGRvd24KKyMgaGFuZGxlIGl0CitpZiBncmVwIC1xICJpZmFjZSBcKyRJTlRFUkZBQ0UiIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzOyB0aGVuCisgIGNhc2UgJEFDVElPTiBpbgorICAgIGFkZCkKKyAgICAJaWZjb25maWcgfCBncmVwIC1xICJeJElOVEVSRkFDRSIgfHwgaWZ1cCAkSU5URVJGQUNFCisgICAgCTs7CisgICAgcmVtb3ZlKQorICAgIAlpZmRvd24gJElOVEVSRkFDRQorICAgIAk7OworICBlc2FjCisgIAorICBleGl0IDAKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmZfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmQ5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mXzEuMS5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkV4dHJhIG1hY2hpbmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdWRldiwgc3BlY2lmaWNhbGx5IGJsYWNrbGlzdCBpbmZvcm1hdGlvbi4iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgZmlsZTovL2F1dG9tb3VudC5ydWxlcyBcCisgICAgICAgZmlsZTovL21vdW50LnNoIFwKKyAgICAgICBmaWxlOi8vbW91bnQuYmxhY2tsaXN0IFwKKyAgICAgICBmaWxlOi8vYXV0b25ldC5ydWxlcyBcCisgICAgICAgZmlsZTovL25ldHdvcmsuc2ggXAorICAgICAgIGZpbGU6Ly9sb2NhbGV4dHJhLnJ1bGVzIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQKKworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F1dG9tb3VudC5ydWxlcyAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2F1dG9tb3VudC5ydWxlcworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2F1dG9uZXQucnVsZXMgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2F1dG9uZXQucnVsZXMKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9sb2NhbGV4dHJhLnJ1bGVzICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC9sb2NhbGV4dHJhLnJ1bGVzCisKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9tb3VudC5ibGFja2xpc3QgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cy8KKworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvc2NyaXB0cy9tb3VudC5zaAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25ldHdvcmsuc2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9zY3JpcHRzCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vdWRldiIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS91ZGV2L21vdW50LmJsYWNrbGlzdCIKKworIyB0byByZXBsYWNlIHVkZXYtZXh0cmEtcnVsZXMgZnJvbSBtZXRhLW9lCitSUFJPVklERVNfJHtQTn0gPSAidWRldi1leHRyYS1ydWxlcyIKK1JSRVBMQUNFU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgorUkNPTkZMSUNUU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwZGFkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi5pbmMKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiL2Rldi8gYW5kIGhvdHBsdWcgbWFuYWdlbWVudCBkYWVtb24iCitERVNDUklQVElPTiA9ICJ1ZGV2IGlzIGEgZGFlbW9uIHdoaWNoIGR5bmFtaWNhbGx5IGNyZWF0ZXMgYW5kIHJlbW92ZXMgZGV2aWNlIG5vZGVzIGZyb20gXAorL2Rldi8sIGhhbmRsZXMgaG90cGx1ZyBldmVudHMgYW5kIGxvYWRzIGRyaXZlcnMgYXQgYm9vdCB0aW1lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi91ZGV2Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyLjArICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2Mi4wKyIKK0xJQ0VOU0VfbGlidWRldiA9ICJMR1BMdjIuMSsiCitMSUNFTlNFX2xpYmd1ZGV2ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9DT1BZSU5HO21kNT0xN2M0ZTVmYjQ5NWU2NzA3YWM5MmEzODY0OTI2Zjk3OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZ3VkZXYvQ09QWUlORzttZDU9ZmI0OTQ0ODVhN2QwNTA1MzA4Y2I2OGU0OTk3Y2MyNjYiCisKK0xERkxBR1MgKz0gIi1scnQiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGlidXNiIHVzYnV0aWxzIHBjaXV0aWxzIGdsaWItMi4wLW5hdGl2ZSBncGVyZi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgdXRpbC1saW51eCIKK1JQUk9WSURFU18ke1BOfSA9ICJob3RwbHVnIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4ucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZmcy11ZGV2LnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtzLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcGVybWlzc2lvbnMucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vbG9jYWwucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vdWRldi1jYWNoZSBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlLmRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIHBlcmwgcHl0aG9uIgorCitsaWJleGVjZGlyID0gIiR7YmFzZV9saWJkaXJ9IgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXBjaS1pZHMtcGF0aD0ke2RhdGFkaXJ9L3BjaS5pZHMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9wY2lfaWRzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX191c3Jfc2hhcmVfaHdkYXRhX3BjaV9pZHM9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9taXNjX3BjaV9pZHM9eWVzIFwKKyAgICAgICAgICAgICAgICAtLXNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWxpYmV4ZWNkaXI9JHtub25hcmNoX2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RsaWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yb290cHJlZml4PSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRVMgPSsgInVkZXYtY2FjaGUiCitQQUNLQUdFUyA9KyAibGlidWRldiIKK1BBQ0tBR0VTID0rICJsaWJndWRldiIKKworSU5JVFNDUklQVF9QQUNLQUdFUyA9ICJ1ZGV2IHVkZXYtY2FjaGUiCitJTklUU0NSSVBUX05BTUVfdWRldiA9ICJ1ZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfdWRldiA9ICJzdGFydCAwNCBTIC4iCitJTklUU0NSSVBUX05BTUVfdWRldi1jYWNoZSA9ICJ1ZGV2LWNhY2hlIgorSU5JVFNDUklQVF9QQVJBTVNfdWRldi1jYWNoZSA9ICJzdGFydCAzNiBTIC4iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS9Db25zb2xlS2l0ICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldiAke2JpbmRpcn0vdWRldmFkbSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJ1ZGV2LWNhY2hlIgorCisjIHVkZXYtdXRpbHMgaGFzIGJlZW4gcmVtb3ZlZCBhcyBhIHBhY2thZ2UuICBOb3RlIHRoYXQgdWRldiBjb25mbGljdHMgd2l0aCB1ZGV2LXV0aWxzIHNvIHRoYXQKKyMgdWRldi11dGlscyBpcyByZW1vdmVkIGZyb20gc3lzdGVtcyBvbiB1cGdyYWRlLgorUkNPTkZMSUNUU18ke1BOfSArPSAidWRldi11dGlscyIKK1JSRVBMQUNFU18ke1BOfSArPSAidWRldi11dGlscyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi8uZGVidWcvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1Zy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtkYXRhZGlyfS9wa2djb25maWcvdWRldi5wYyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9saWJ1ZGV2LmggJHtsaWJkaXJ9L2xpYnVkZXYuc28gJHtsaWJkaXJ9L2xpYnVkZXYubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJ1ZGV2LmEgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJ1ZGV2LnBjIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2d1ZGV2KiAke2xpYmRpcn0vbGliZ3VkZXYqLnNvICR7bGliZGlyfS9saWJndWRldioubGEgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJndWRldiouYSAke2xpYmRpcn0vcGtnY29uZmlnL2d1ZGV2Ki5wYyIKK0ZJTEVTX2xpYnVkZXYgPSAiJHtiYXNlX2xpYmRpcn0vbGlidWRldi5zby4qIgorRklMRVNfbGliZ3VkZXYgPSAiJHtiYXNlX2xpYmRpcn0vbGliZ3VkZXYqLnNvLiogJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5zby4qIgorRklMRVNfdWRldi1jYWNoZSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2LWNhY2hlICR7c3lzY29uZmRpcn0vZGVmYXVsdC91ZGV2LWNhY2hlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCXNlZCAtaSBzJUBVREVWREAlJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldgorCXNlZCAtaSBzJUBVREVWREAlJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3VkZXZkJSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvdWRldi1jYWNoZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldi1jYWNoZS5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdWRldi1jYWNoZQorCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9jYWNoZS5kYXRhCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZC8KKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsLnJ1bGVzICAgICAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2xvY2FsLnJ1bGVzCisKKwkjIGhpZDJoY2kgaGFzIG1vdmVkIHRvIGJsdWV6NC4gcmVtb3ZlZCBpbiB1ZGV2IGFzIG9mIHZlcnNpb24gMTY5CisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3VkZXYvaGlkMmhjaQorCisJZWNobyAndWRldl9ydW49Ii92YXIvcnVuL3VkZXYiJyA+PiAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3VkZXYuY29uZgorfQorCisjIEFzIHN5c3RlbWQgYWxzbyBidWlsZHMgdWRldiwgc2tpcCB0aGlzIHBhY2thZ2UgaWYgd2UncmUgZG9pbmcgYSBzeXN0ZW1kIGJ1aWxkLgorcHl0aG9uICgpIHsKKyAgICBpZiBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIGluIERJU1RST19GRUFUVVJFUyIpCit9Citkb19jb21waWxlX3B0ZXN0KCkgeworICAgIG9lX3J1bm1ha2UgdGVzdC11ZGV2Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi8wMDAxLUZpeGluZy1rZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoLXNoZWxsLXNjcmlwdC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZGVhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvMDAwMS1GaXhpbmcta2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaC1zaGVsbC1zY3JpcHQtcGF0aC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDBmODI5MGM5NDNkYTI5OGFiZDI2OWNhNjBmZDgzNzVkZmIyMTk5NzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUgREFNSUFOIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMTIgSnVsIDIwMTIgMTI6NTQ6NDggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4aW5nIGtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2ggc2hlbGwgc2NyaXB0IHBhdGgKKworV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHJvb3RwcmVmaXgsIHRoZSBrZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCit3YXMgbW9kaWZpZWQgdG8gYmUgZXhlY3V0ZWQgd2l0aCBAcm9vdHByZWZpeEAvYmluL3NoLCB3aGljaCBpcyB3cm9uZworYmVjYXVzZSBAcm9vdHByZWZpeEAgZGVmYXVsdHMgdG8gL3VzciAod2hpY2ggaXMgY29ycmVjdCksIGJ1dCB0aGUKK3NoZWxsIGlzIGFsd2F5cyBhdCAvYmluL3NoIChJRUVFIFN0ZCAxMDAzLjItMTk5MikuCisKK1RoZXJlZm9yZSB0aGUgaW50ZXJwcmV0ZXIgZm9yIHNoZWxsIHNjcmlwdHMgbmVlZHMgdG8gYmUgL2Jpbi9zaCBhdCBhbGwgdGltZXMuCisKK1RoZSB1cHN0cmVhbSBtb3ZlZCB0byBjb25maWd1cmFibGUgcm9vdCBwcmVmaXgsIHRoaXMgcGF0Y2ggdGFjbGtlcyBhIAordHJhbnNpdGlvbiBidWcsIGFuZCB3aWxsIG5vdCBiZSBhcHBsaWVkIHVwc3RyZWFtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUgREFNSUFOIDxhbGV4YW5kcnUuZGFtaWFuQGludGVsLmNvbT4KKy0tLQorIHNyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbiBiL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgoraW5kZXggZGQwNDBjZS4uNTk3YTNhNiAxMDA3NTUKKy0tLSBhL3NyYy9rZXltYXAva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaC5pbgorKysrIGIvc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIUByb290cHJlZml4QC9iaW4vc2ggLWUKKysjIS9iaW4vc2ggLWUKKyAjIHJlYWQgbGlzdCBvZiBzY2FuY29kZXMsIGNvbnZlcnQgaGV4IHRvIGRlY2ltYWwgYW5kCisgIyBhcHBlbmQgdG8gdGhlIGF0a2JkIGZvcmNlX3JlbGVhc2Ugc3lzZnMgYXR0cmlidXRlCisgIyAkMSBzeXNmcyBkZXZwYXRoIGZvciBzZXJpb1gKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYWRkLWluc3RhbGwtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjMmU5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDg2IEBACitBZGp1c3RlbWVudHMgZm9yIHB0ZXN0OgorCistIEFkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KKy0gUHJpbnQgYSBzdGFuZGFyZCByZXN1bHQgbGluZSBmb3IgZWFjaCB0ZXN0LgorLSBSZXBsYWNlIHRoZSB1c2Ugb2YgInRyZWUiIHdpdGggImZpbmQiLgorCitTaWduZWQtb2ZmLWJ5OiBCasO2cm4gU3RlbmJlcmcgPGJqc3RAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmEgU2FmdGEgPGFsc3RAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIG1pc3NpbmcgZmlsZXMgZm9yIHJ1bGUtc3ludGF4LWNoZWNrCistIEFkZCBydWxlLXN5bnRheC1jaGVjay5weQorLSBBZGQgdGhlIGRlcGxveWVkIHVkZXYgcnVsZXMgdG8gdGhlIHRlc3RkYXRhCisKK1NpZ25lZC1vZmYtYnk6IE1heCBLcnVtbWVuYWNoZXIgPG1heC5vc3MuMDlAZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0gYS9NYWtlZmlsZS5hbQkyMDEyLTAzLTE4IDE2OjI4OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wMi0xOCAxMDowMzozNi41MzExMDEyNDQgKzAxMDAKK0BAIC03MDgsMyArNzA4LDE4IEBACisgCWZvciBpIGluIHNyYy9kb2NzL2h0bWwvKi57aHRtbCxjc3MscG5nfTsgZG8gZWNobyAkJGk7IGt1cCBwdXQgJCRpICQkaS5zaWduIC9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvbGlidWRldi87IGRvbmUKKyAJZm9yIGkgaW4gc3JjL2d1ZGV2L2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBybSAtZiAkJGkuc2lnbjsgZ3BnIC0tYXJtb3IgLS1kZXRhY2gtc2lnbiAtLW91dHB1dD0kJGkuc2lnbiAkJGk7IGRvbmUKKyAJZm9yIGkgaW4gc3JjL2d1ZGV2L2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBlY2hvICQkaTsga3VwIHB1dCAkJGkgJCRpLnNpZ24gL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy9ndWRldi87IGRvbmUKKysKKytSVUxFUyA9IHJ1bGVzLyogc3JjL2FjY2VsZXJvbWV0ZXIvNjEtYWNjZWxlcm9tZXRlci5ydWxlcyBcCisrCSBzcmMvY2Ryb21faWQvNjAtY2Ryb21faWQucnVsZXMgXAorKwkgc3JjL2tleW1hcC85NS1rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnJ1bGVzIHNyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzIFwKKysJIHNyYy9tdGRfcHJvYmUvNzUtcHJvYmVfbXRkLnJ1bGVzIHNyYy92NGxfaWQvNjAtcGVyc2lzdGVudC12NGwucnVsZXMKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlpbnN0YWxsIHRlc3QtdWRldiAkKERFU1RESVIpCisrCWNwIE1ha2VmaWxlICQoREVTVERJUikKKysJc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQoREVTVERJUikvTWFrZWZpbGUKKysJaW5zdGFsbCAtZCAkKERFU1RESVIpL3Rlc3QgJChERVNURElSKS9ydWxlcworKwkoY2QgJCh0b3Bfc3JjZGlyKSAmJiBpbnN0YWxsICQoVEVTVFMpICQoREVTVERJUikvdGVzdCkKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCB0ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5ICQoREVTVERJUikvdGVzdCkKKysJKGNkICQodG9wX3NyY2RpcikgJiYgaW5zdGFsbCAkKFJVTEVTKSAkKERFU1RESVIpL3J1bGVzKQorKwljcCAkKHRvcF9zcmNkaXIpL3Rlc3Qvc3lzLnRhci54eiAkKERFU1RESVIpL3Rlc3QvCistLS0gYS90ZXN0L3VkZXYtdGVzdC5wbAkyMDEyLTAzLTE4IDE2OjQzOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGIvdGVzdC91ZGV2LXRlc3QucGwJMjAxMy0wMi0xOCAxMDozMToyOS43MDYzNTczMjEgKzAxMDAKK0BAIC0xNDU5LDExICsxNDU5LDEzIEBACisgICAgICAgICAgICAgICAgIHByaW50ICJhZGQ6ICAgICAgICAgZXJyb3IiOworICAgICAgICAgICAgICAgICBpZiAoJHJ1bGVzLT57ZXhwX2FkZF9lcnJvcn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIGFzIGV4cGVjdGVkXG4iOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJYRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogYWRkXG4iOworICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CistICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJ0cmVlICR1ZGV2X3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImZpbmQgJHVkZXZfcm9vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9yKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IGFkZFxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgfQorQEAgLTE0NzksMTUgKzE0ODEsMTggQEAKKyAgICAgICAgICAgICAgICAgcHJpbnQgInJlbW92ZTogICAgICBlcnJvciI7CisgICAgICAgICAgICAgICAgIGlmICgkcnVsZXMtPntleHBfcmVtX2Vycm9yfSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgYXMgZXhwZWN0ZWRcbiI7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlhGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiByZW1vdmVcbiI7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKy0gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oInRyZWUgJHVkZXZfcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZmluZCAkdWRldl9yb290Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IrKzsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICBwcmludCAicmVtb3ZlOiAgICAgIG9rXG4iOworKyAgICAgICAgICAgICAgICBwcmludCAiUEFTUzogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogcmVtb3ZlXG4iOworICAgICAgICAgfQorIAorICAgICAgICAgcHJpbnQgIlxuIjsKKy0tLSBhL2NvbmZpZ3VyZS5hYyAgICAgIDIwMTMtMTEtMjggMDk6MTQ6MDIuODE0MjQ4ODI2ICswMTAwCisrKysgYi9jb25maWd1cmUuYWMgICAgICAyMDEzLTExLTI4IDA5OjE0OjM0LjI2MDg3NDI5NiArMDEwMAorQEAgLTYsNyArNiw3IEBACisgICAgICAgIFtodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYuaHRtbF0pCisgQUNfQ09ORklHX1NSQ0RJUihbc3JjL3VkZXZkLmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1hdXhdKQorLUFNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIC1XYWxsIC1Xbm8tcG9ydGFiaWxpdHkgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIC1XYWxsIC1Xbm8tcG9ydGFiaWxpdHkgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgc2VyaWFsLXRlc3RzXSkKKyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvYXZvaWQtbW91c2UtYXV0b3N1c3BlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzMWIzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitTb3VyY2U6IGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3N5c3RlbWQvY29tbWl0L3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXM/aWQ9ZTAzODZjZjI4MDkyMTliYmRkMzA4OTVmNDZmMWY1NjdiNTY5MDJiNgorCitTb21lIFVTQiBwb3J0cyBvbiBleHRlcm5hbCBodWJzIG1heSBiZSByZXBvcnRlZCBhcyAiZml4ZWQiLiBXZSBvbmx5IHdhbnQKK3RvIGF1dG8tZW5hYmxlIHRoaXMgb24gcG9ydHMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gdGhlIG1hY2hpbmUsIHNvIGNoZWNrCit0aGUgcGFyZW50IHN0YXRlIGFzIHdlbGwuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTMvMDkvMTMKKworSW5kZXg6IHVkZXYtMTgyL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1ZGV2LTE4Mi5vcmlnL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKKysrKyB1ZGV2LTE4Mi9ydWxlcy80Mi11c2ItaGlkLXBtLnJ1bGVzCitAQCAtNDYsNCArNDYsOSBAQCBBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBBVFRSU3tpCisgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUntpZFZlbmRvcn09PSIxNGRkIiwgQVRUUntpZFByb2R1Y3R9PSIwMDAyIiwgVEVTVD09InBvd2VyL2NvbnRyb2wiLCBBVFRSe3Bvd2VyL2NvbnRyb2x9PSJhdXRvIgorCisgIyBVU0IgSElEIGRldmljZXMgdGhhdCBhcmUgaW50ZXJuYWwgdG8gdGhlIG1hY2hpbmUgc2hvdWxkIGFsc28gYmUgc2FmZSB0byBhdXRvc3VzcGVuZAorKyMgQW5kIHNraXAgaXQgZm9yIGRldmljZXMgd2hpY2ggYXJlIGV4dGVybmFsIGJ1dCBzYXkgImZpeGVkIgorK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIFNVQlNZU1RFTVM9PSJ1c2IiLCBBVFRSU3tyZW1vdmFibGV9PT0icmVtb3ZhYmxlIiwgR09UTz0idXNiX2hpZF9wbV9lbmQiCisrQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgU1VCU1lTVEVNUz09InVzYiIsIEFUVFJTe3JlbW92YWJsZX09PSJ1bmtub3duIiwgR09UTz0idXNiX2hpZF9wbV9lbmQiCisgQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgQVRUUntiSW50ZXJmYWNlQ2xhc3N9PT0iMDMiLCBBVFRSU3tyZW1vdmFibGV9PT0iZml4ZWQiLCBURVNUPT0iLi4vcG93ZXIvY29udHJvbCIsIEFUVFJ7Li4vcG93ZXIvY29udHJvbH09ImF1dG8iCisrTEFCRUw9InVzYl9oaWRfcG1fZW5kIgorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZGV2ZnMtdWRldi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmExYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2RldmZzLXVkZXYucnVsZXMKQEAgLTAsMCArMSwxMDggQEAKKyMgVGhlIHVzZSBvZiB0aGVzZSBydWxlcyBpcyBub3QgcmVjb21tZW5kZWQgb3Igc3VwcG9ydGVkLgorIyBJbiBhIHdvcmxkIHdoZXJlIGRldmljZXMgY2FuIGNvbWUgYW5kIGdvIGF0IGFueSB0aW1lLCB0aGUgZGV2ZnMgc2NoZW1lCisjIG9mIHNpbXBsZSBkZXZpY2UgZW51bWVyYXRpb24gZG9lcyBub3QgaGVscCBfYW55dGhpbmdfLiBKdXN0IGZvcmdldCBhYm91dAorIyBpdC4gVXNlIGN1c3RvbSBydWxlcyB0byBuYW1lIHlvdXIgZGV2aWNlIG9yIGxvb2sgYXQgdGhlIHBlcnNpc3RlbnQgZGV2aWNlCisjIG5hbWluZyBzY2hlbWUsIHdoaWNoIGlzIGltcGxlbWVudGVkIGZvciBkaXNrcyBhbmQgYWRkIHlvdXIgc3Vic3lzdGVtLgorCisjIGlkZSBibG9jayBkZXZpY2VzCitCVVM9ImlkZSIsIEtFUk5FTD0iaGQqIiwgUFJPR1JBTT0iL2V0Yy91ZGV2L2lkZS1kZXZmcy5zaCAlayAlYiAlbiIsIE5BTUU9IiVrIiwgU1lNTElOSz0iJWN7MX0gJWN7Mn0iCisKKyMgbWQgYmxvY2sgZGV2aWNlcworS0VSTkVMPSJtZFswLTldKiIsIE5BTUU9Im1kLyVuIgorCisjIGZsb3BweSBkZXZpY2VzCitLRVJORUw9ImZkWzAtOV0qIiwgTkFNRT0iZmxvcHB5LyVuIgorCisjIHR0eSBkZXZpY2VzCitLRVJORUw9InR0eVswLTldKiIsICAgIE5BTUU9InZjLyVuIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InR0eVNbMC05XSoiLCAgIE5BTUU9InR0cy8lbiIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJ0dHlVU0JbMC05XSoiLCBOQU1FPSJ0dHMvVVNCJW4iCisKKyMgdmMgZGV2aWNlcworS0VSTkVMPSJ2Y3MiLCAgICAgICAgTkFNRT0idmNjLzAiCitLRVJORUw9InZjc1swLTldKiIsICBOQU1FPSJ2Y2MvJW4iCitLRVJORUw9InZjc2EiLCAgICAgICBOQU1FPSJ2Y2MvYTAiCitLRVJORUw9InZjc2FbMC05XSoiLCBOQU1FPSJ2Y2MvYSVuIgorCisjIHY0bCBkZXZpY2VzCitLRVJORUw9InZpZGVvWzAtOV0qIiwgTkFNRT0idjRsL3ZpZGVvJW4iCitLRVJORUw9InJhZGlvWzAtOV0qIiwgTkFNRT0idjRsL3JhZGlvJW4iCitLRVJORUw9InZiaVswLTldKiIsICAgTkFNRT0idjRsL3ZiaSVuIgorS0VSTkVMPSJ2dHhbMC05XSoiLCAgIE5BTUU9InY0bC92dHglbiIKKworIyBkbSBkZXZpY2VzIChpZ25vcmUgdGhlbSkKK0tFUk5FTD0iZG0tWzAtOV0qIiwgTkFNRT0iIgorCisjIGkyYyBkZXZpY2VzCitLRVJORUw9ImkyYy1bMC05XSoiLCBOQU1FPSJpMmMvJW4iLCBTWU1MSU5LPSIlayIKKworIyBsb29wIGRldmljZXMKK0tFUk5FTD0ibG9vcFswLTldKiIsIE5BTUU9Imxvb3AvJW4iLCBTWU1MSU5LPSIlayIKKworIyByYW1kaXNrcworS0VSTkVMPSJyYW1bMC05XSoiLCBOQU1FPSJyZC8lbiIsIFNZTUxJTks9IiVrIgorCisjIGZyYW1lYnVmZmVyIGRldmljZXMKK0tFUk5FTD0iZmJbMC05XSoiLCBOQU1FPSJmYi8lbiIsIFNZTUxJTks9IiVrIgorCisjIG1pc2MKK0tFUk5FTD0icnRjIiwgICAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icHNhdXgiLCAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iYWdwZ2FydCIsIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icnRjIiwgICAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0icHNhdXgiLCAgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0idWlucHV0IiwgIE5BTUU9Im1pc2MvJWsiLCBTWU1MSU5LPSIlayIKKworIyBhbHNhIGRldmljZXMKK0tFUk5FTD0iY29udHJvbENbMC05XSoiLCBOQU1FPSJzbmQvJWsiCitLRVJORUw9Imh3W0NEMC05XSoiLCAgICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJwY21bQ0QwLTljcF0qIiwgIE5BTUU9InNuZC8layIKK0tFUk5FTD0ibWlkaVtDRDAtOV0qIiwgICBOQU1FPSJzbmQvJWsiCitLRVJORUw9InRpbWVyIiwgICAgICAgICAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJzZXEiLCAgICAgICAgICAgIE5BTUU9InNuZC8layIKKworIyBvc3MgZGV2aWNlcworS0VSTkVMPSJhdWRpbyoiLCAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iZG1taWRpIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9ImRzcCoiLCAgICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJtaWRpKiIsICAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0ibWl4ZXIqIiwgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InNlcXVlbmNlcioiLCBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD0ibWljZSIsICAgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9Im1vdXNlKiIsIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJldmVudCoiLCBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0ianMqIiwgICAgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9InRzKiIsCSBOQU1FPSJpbnB1dC8layIKKworIyBVU0IgZGV2aWNlcworS0VSTkVMPSJoaWRkZXYqIiwJTkFNRT0idXNiLyVrIgorS0VSTkVMPSJhdWVyKiIsCQlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImxlZ291c2J0b3dlcioiLAlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImRhYnVzYioiLAlOQU1FPSJ1c2IvJWsiCitCVVM9InVzYiIsIEtFUk5FTD0ibHBbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCisKKyMgbmV0bGluayBkZXZpY2VzCitLRVJORUw9InJvdXRlIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InNraXAiLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0idXNlcnNvY2siLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJmd21vbml0b3IiLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ0Y3BkaWFnIiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ibmZsb2ciLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ieGZybSIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJhcnBkIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InJvdXRlNiIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImlwNl9mdyIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImRucnRtc2ciLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ0YXAqIiwJCU5BTUU9Im5ldGxpbmsvJWsiCisKKyMgQ0FQSSBkZXZpY2VzCitLRVJORUw9ImNhcGkiLAkJTkFNRT0iY2FwaTIwIiwgU1lNTElOSz0iaXNkbi9jYXBpMjAiCitLRVJORUw9ImNhcGkqIiwJCU5BTUU9ImNhcGkvJW4iCisKKyMgTmV0d29yayBkZXZpY2VzCitLRVJORUw9InR1biIsCQlOQU1FPSJuZXQvJWsiCisKKyMgcmF3IGRldmljZXMKK0tFUk5FTD0icmF3WzAtOV0qIiwgICAgIE5BTUU9InJhdy8layIgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNjNDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2ZpeF9ydWxlLXN5bnRheC1yZWdleC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitUaGUgcnVsZS1zeW50YXgtY2hlY2sgc2NyaXB0IGZhaWxzIHdpdGggZXJyb3JzIGxpa2UgdGhpczoKKworSW52YWxpZCBsaW5lIC9saWIvdWRldi9ydWxlcy5kLzk1LWtleW1hcC5ydWxlczo0OTogRU5We0RNSV9WRU5ET1J9PT0iQVNVUyoiLCBLRVJORUxTPT0iaW5wdXQqIiwgQVRUUlN7bmFtZX09PSJBc3VzIEV4dHJhIEJ1dHRvbnMiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IlczSiIsIFJVTis9ImtleW1hcCAkbmFtZSBtb2R1bGUtYXN1cy13M2oiCisoJyAgY2xhdXNlOicsICdBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IlczSiInKQorKCkKKworCitNb3ZlIGxpbmUgY29tbWVudCBmcm9tIGVuZCBvZiBydWxlcyBmaWxlIHRvIGl0cyBvd24gbGluZSwgdGhlIHJlZ2V4IHVzZWQgdG8KK3Rlc3QgY29ycmVjdCBzeW50YXggY2hva2Ugb24gaXQuCisKK1RoZSBydWxlLXN5bnRheC1jaGVjay5weSB1c2VzIHJlZ2V4IHdoaWNoIGVycm91cm5lc3NseSBjb21wbGFpbnMgb24gQVRUUiBydWxlcworb2YgdGhlIGZvcm0gQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIKK1VzZSB0aGUgcmVnZXggZnJvbSBzeXN0ZW1kJ3Mgc2NyaXB0IHdoaWNoIGFsbG93IFtdIGNoYXJhY3RlcnMgYW5kIGFkZGl0aW9uYWwKK2NvbXBhcmUgb3BlcmF0b3JzCisKK1RoZSBNYWtlZmlsZSBwYXNzZXMgcnVsZXMtdGVzdC5zaCBzY3JpcHQgYSBidWlsZCBob3N0IHBhdGggdG8gdGhlIHRlc3RkYXRhLgorSWdub3JlIHRoZSBhcmd1bWVudCBhbmQgdXNlIGEgcmVsYXRpdmUgcGF0aCBpbnN0ZWFkLgorCisKK1NpZ25lZC1vZmYtYnk6IE1heCBLcnVtbWVuYWNoZXIgPG1heC5vc3MuMDlAZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChjcm9zcyBlbnZpcm9ubWVudCBwYXRoKQorCitkaWZmIC1OYXVyIHVkZXYtMTgyLm9yaWcvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMgdWRldi0xODIvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMKKy0tLSB1ZGV2LTE4Mi5vcmlnL3NyYy9rZXltYXAvOTUta2V5bWFwLnJ1bGVzCTIwMTItMDItMDcgMDA6MDE6NTUuMTU0NjQwNzkyICswMTAwCisrKysgdWRldi0xODIvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMJMjAxNS0wMS0yNCAyMDo1ODo0MC4xNTY5MzA1MjAgKzAxMDAKK0BAIC05NCw3ICs5NCw4IEBACisgRU5We0RNSV9WRU5ET1J9PT0iSGV3bGV0dC1QYWNrYXJkIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJIUCBHNjIgTm90ZWJvb2sgUEMiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHhCMiB3d3ciCisgRU5We0RNSV9WRU5ET1J9PT0iSGV3bGV0dC1QYWNrYXJkIiwgQVRUUntbZG1pL2lkXXByb2R1Y3RfbmFtZX09PSJIUCBQcm9Cb29rKiIsIFJVTis9ImtleW1hcCAkbmFtZSAweEY4IHJma2lsbCIKKyAjIEhQIFBhdmlsbGlvbiBkdjYzMTVlYSBoYXMgZW1wdHkgRE1JX1ZFTkRPUgorLUFUVFJ7W2RtaS9pZF1ib2FyZF92ZW5kb3J9PT0iUXVhbnRhIiwgQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIsIEFUVFJ7W2RtaS9pZF1ib2FyZF92ZXJzaW9ufT09IjY1LjJCIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4ODggbWVkaWEiICMgInF1aWNrIHBsYXkKKysjICJxdWljayBwbGF5IgorK0FUVFJ7W2RtaS9pZF1ib2FyZF92ZW5kb3J9PT0iUXVhbnRhIiwgQVRUUntbZG1pL2lkXWJvYXJkX25hbWV9PT0iMzBCNyIsIEFUVFJ7W2RtaS9pZF1ib2FyZF92ZXJzaW9ufT09IjY1LjJCIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4ODggbWVkaWEiCisgCisgIyBHYXRld2F5IGNsb25lIG9mIEFjZXIgQXNwaXJlIE9uZSBBT0ExMTAvQU9BMTUwCisgRU5We0RNSV9WRU5ET1J9PT0iR2F0ZXdheSoiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IipBT0ExKiIsIFJVTis9ImtleW1hcCAkbmFtZSBhY2VyIgorZGlmZiAtTmF1ciB1ZGV2LTE4Mi5vcmlnL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkgdWRldi0xODIvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQorLS0tIHVkZXYtMTgyLm9yaWcvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQkyMDEyLTAyLTE1IDIwOjEwOjEyLjg3MjMzMzM0MiArMDEwMAorKysrIHVkZXYtMTgyL3Rlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkJMjAxNS0wMS0yNCAyMTowODowMC40OTYwNDk2MDAgKzAxMDAKK0BAIC0yOCw3ICsyOCw3IEBACisgbm9fYXJnc190ZXN0cyA9IHJlLmNvbXBpbGUoJyhBQ1RJT058REVWUEFUSHxLRVJORUxTP3xOQU1FfFNZTUxJTkt8U1VCU1lTVEVNUz98RFJJVkVSUz98VEFHfFJFU1VMVHxURVNUKVxzKig/Oj18ISk9XHMqIihbXiJdKikiJCcpCisgYXJnc190ZXN0cyA9IHJlLmNvbXBpbGUoJyhBVFRSUz98RU5WfFRFU1QpeyhbYS16QS1aMC05L18uKiUtXSspfVxzKig/Oj18ISk9XHMqIihbXiJdKikiJCcpCisgbm9fYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoTkFNRXxTWU1MSU5LfE9XTkVSfEdST1VQfE1PREV8VEFHfFBST0dSQU18UlVOfExBQkVMfEdPVE98V0FJVF9GT1J8T1BUSU9OU3xJTVBPUlQpXHMqKD86XCs9fDo9fD0pXHMqIihbXiJdKikiJCcpCistYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoQVRUUnxFTlZ8SU1QT1JUKXsoW2EtekEtWjAtOS9fLiolLV0rKX1ccyo9XHMqIihbXiJdKikiJCcpCisrYXJnc19hc3NpZ24gPSByZS5jb21waWxlKCcoQVRUUnxFTlZ8SU1QT1JUfFJVTil7KFtdW2EtekEtWjAtOS9fLiolLV0rKX1ccyooPXw9PXxcKz0pXHMqIihbXiJdKikiJCcpCisgCisgcmVzdWx0ID0gMAorIGJ1ZmZlciA9ICcnCistLS0gdWRldi0xODIub3JpZy90ZXN0L3J1bGVzLXRlc3Quc2gJMjAxMi0wMS0yOSAwMToxNTo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyB1ZGV2LTE4Mi90ZXN0L3J1bGVzLXRlc3Quc2gJMjAxNS0wMS0yNCAxNzo1Mzo1MS4yMDE4NTg2NTggKzAxMDAKK0BAIC00LDcgKzQsNyBAQAorICMgKEMpIDIwMTAgQ2Fub25pY2FsIEx0ZC4KKyAjIEF1dGhvcjogTWFydGluIFBpdHQgPG1hcnRpbi5waXR0QHVidW50dS5jb20+CisgCistWyAtbiAiJHNyY2RpciIgXSB8fCBzcmNkaXI9YGRpcm5hbWUgJDBgLy4uCisrc3JjZGlyPWBkaXJuYW1lICQwYC8uLgorIAorICMgc2tpcCBpZiB3ZSBkb24ndCBoYXZlIHB5dGhvbgorIHR5cGUgcHl0aG9uID4vZGV2L251bGwgMj4mMSB8fCB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjAyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvaW5pdApAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVkZXYKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RhcnQgdWRldmQsIHBvcHVsYXRlIC9kZXYgYW5kIGxvYWQgZHJpdmVycy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK2V4cG9ydCBUWj0vZXRjL2xvY2FsdGltZQorCitbIC1kIC9zeXMvY2xhc3MgXSB8fCBleGl0IDEKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1NZU0NPTkZfQ0FDSEVEPSIvZXRjL3VkZXYvY2FjaGUuZGF0YSIKK1NZU0NPTkZfVE1QPSIvZGV2L3NobS91ZGV2LmNhY2hlIgorREVWQ0FDSEVfUkVHRU49Ii9kZXYvc2htL3VkZXYtcmVnZW4iICMgY3JlYXRlIHRvIHJlcXVlc3QgY2FjaGUgcmVnZW4KKworIyBBIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYXJlIHVzZWQgYXMgYSBjcml0ZXJpYSB0byBqdWRnZSB3aGV0aGVyIHRoZSB1ZGV2IGNhY2hlIGNvdWxkIGJlIHJldXNlZC4KK0NNUF9GSUxFX0xJU1Q9Ii9wcm9jL3ZlcnNpb24gL3Byb2MvY21kbGluZSAvcHJvYy9kZXZpY2VzIgorWyAtZiAvcHJvYy9hdGFncyBdICYmIENNUF9GSUxFX0xJU1Q9IiRDTVBfRklMRV9MSVNUIC9wcm9jL2F0YWdzIgorCisjIExpc3Qgb2YgZmlsZXMgd2hvc2UgbWV0YWRhdGEgKHNpemUvbXRpbWUvbmFtZSkgd2lsbCBiZSBpbmNsdWRlZCBpbiBjYWNoZWQKKyMgc3lzdGVtIHN0YXRlLgorTUVUQV9GSUxFX0xJU1Q9ImxpYi91ZGV2L3J1bGVzLmQvKiBldGMvdWRldi9ydWxlcy5kLyoiCisKKyMgQ29tbWFuZCB0byBjb21wdXRlIHN5c3RlbSBjb25maWd1cmF0aW9uLgorc3lzY29uZl9jbWQgKCkgeworCWNhdCAtLSAkQ01QX0ZJTEVfTElTVAorCXN0YXQgLWMgJyVzICVZICVuJyAtLSAkTUVUQV9GSUxFX0xJU1QgfCBhd2sgLUYvICd7cHJpbnQgJDEgIiAiICRORjt9JworfQorCitbIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQorWyAtZiAvZXRjL3VkZXYvdWRldi5jb25mIF0gJiYgLiAvZXRjL3VkZXYvdWRldi5jb25mCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKKwora2lsbF91ZGV2ZCAoKSB7CisgICAgcGlkPWBwaWRvZiAteCB1ZGV2ZGAKKyAgICBbIC1uICIkcGlkIiBdICYmIGtpbGwgJHBpZAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZXhwb3J0IEFDVElPTj1hZGQKKyAgICAjIHByb3BhZ2F0ZSAvZGV2IGZyb20gL3N5cworICAgIGVjaG8gIlN0YXJ0aW5nIHVkZXYiCisKKyAgICAjIENoZWNrIGZvciByZXF1aXJlZWQgZGV2dG1wZnMgYmVmb3JlIHRyeWluZyB0byBzdGFydCB1ZGV2IGFuZAorICAgICMgbW91bnQgYSBuby1leGlzdGFudCBmcy4KKyAgICBpZiAhIGdyZXAgLXEgZGV2dG1wZnMgL3Byb2MvZmlsZXN5c3RlbXMKKyAgICB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgZGV2dG1wZnMsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciB1ZGV2IHRvIHJ1biI7CisgICAgICAgIGVjaG8gIkhhbHRpbmcuLi4iCisgICAgICAgIGhhbHQKKyAgICBmaQorICAgICMgbW91bnQgdGhlIGRldnRtcGZzIG9uIC9kZXYsIGlmIG5vdCBhbHJlYWR5IGRvbmUKKyAgICBMQU5HPUMgYXdrICckMiA9PSAiL2RldiIgJiYgKCQzID09ICJkZXZ0bXBmcyIpIHsgZXhpdCAxIH0nIC9wcm9jL21vdW50cyAmJiB7CisgICAgICAgICAgICBtb3VudCAtbiAtbyBtb2RlPTA3NTUgLXQgZGV2dG1wZnMgbm9uZSAiL2RldiIKKyAgICB9CisgICAgWyAtZSAvZGV2L3B0cyBdIHx8IG1rZGlyIC1tIDA3NTUgL2Rldi9wdHMKKyAgICBbIC1lIC9kZXYvc2htIF0gfHwgbWtkaXIgLW0gMTc3NyAvZGV2L3NobQorICAgICMgdGhlIGF1dG9tb3VudCBydWxlIGZvciB1ZGV2IG5lZWRzIC90bXAgZGlyZWN0b3J5IGF2YWlsYWJsZSwgYXMgL3RtcCBpcyBhIHN5bWxpbmsKKyAgICAjIHRvIC92YXIvdG1wIHdoaWNoIGluIHR1cm4gaXMgYSBzeW1saW5rIHRvIC92YXIvdm9sYXRpbGUvdG1wLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQorICAgICMgL3Zhci92b2xhdGlsZS90bXAgZGlyZWN0b3J5IHRvIGJlIGF2YWlsYWJsZS4KKyAgICBta2RpciAtbSAxNzc3IC1wIC92YXIvdm9sYXRpbGUvdG1wCisKKyAgICAjIENhY2hlIGhhbmRsaW5nLgorICAgIGlmIFsgIiRERVZDQUNIRSIgIT0gIiIgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAtZSAkREVWQ0FDSEUgXTsgdGhlbgorCQkgICAgc3lzY29uZl9jbWQgPiAiJFNZU0NPTkZfVE1QIgorCQkgICAgaWYgY21wICRTWVNDT05GX0NBQ0hFRCAkU1lTQ09ORl9UTVAgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhciB4bWYgJERFVkNBQ0hFIC1DIC8gLW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RfZmlyc3RfYm9vdD0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAiJFZFUkJPU0UiICE9ICJubyIgXSAmJiBlY2hvICJ1ZGV2OiB1c2luZyBjYWNoZSBmaWxlICRERVZDQUNIRSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIC1lICRTWVNDT05GX1RNUCBdICYmIHJtIC1mICIkU1lTQ09ORl9UTVAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAiJERFVkNBQ0hFX1JFR0VOIiBdICYmIHJtIC1mICIkREVWQ0FDSEVfUkVHRU4iCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJCSAgICAjIE91dHB1dCBkZXRhaWxlZCByZWFzb24gd2h5IHRoZSBjYWNoZWQgL2RldiBpcyBub3QgdXNlZAorCQkJICAgIGNhdCA8PEVPRgordWRldjogTm90IHVzaW5nIHVkZXYgY2FjaGUgYmVjYXVzZSBvZiBjaGFuZ2VzIGRldGVjdGVkIGluIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cit1ZGV2OiAgICAgJENNUF9GSUxFX0xJU1QKK3VkZXY6ICAgICAkTUVUQV9GSUxFX0xJU1QKK3VkZXY6IFRoZSB1ZGV2IGNhY2hlIHdpbGwgYmUgcmVnZW5lcmF0ZWQuIFRvIGlkZW50aWZ5IHRoZSBkZXRlY3RlZCBjaGFuZ2VzLAordWRldjogY29tcGFyZSB0aGUgY2FjaGVkIHN5c2NvbmYgYXQgICAkU1lTQ09ORl9DQUNIRUQKK3VkZXY6IGFnYWluc3QgdGhlIGN1cnJlbnQgc3lzY29uZiBhdCAgJFNZU0NPTkZfVE1QCitFT0YKKwkJCSAgICB0b3VjaCAiJERFVkNBQ0hFX1JFR0VOIgorICAgICAgICAgICAgICAgICAgICBmaQorCSAgICBlbHNlCisJCSAgICBpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgIT0gInllcyIgXTsgdGhlbgorCQkJICAgICMgSWYgcm9vdGZzIGlzIG5vdCByZWFkLW9ubHksIGl0J3MgcG9zc2libGUgdGhhdCBhIG5ldyB1ZGV2IGNhY2hlIHdvdWxkIGJlIGdlbmVyYXRlZDsKKwkJCSAgICAjIG90aGVyd2lzZSwgd2UgZG8gbm90IGJvdGhlciB0byByZWFkIGZpbGVzLgorCQkJICAgIHRvdWNoICIkREVWQ0FDSEVfUkVHRU4iCisJCSAgICBmaQorICAgICAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyBtYWtlX2V4dHJhX25vZGVzCisgICAga2lsbF91ZGV2ZCA+ICIvZGV2L251bGwiIDI+JjEKKworICAgICMgdHJpZ2dlciB0aGUgc29ydGVkIGV2ZW50cworICAgIFsgLWUgL3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnIF0gJiYgZWNobyAtZSAnXDAwMCcgPi9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworICAgIEBVREVWREAgLWQKKworICAgIHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPTEKKyAgICBpZiBbICIkbm90X2ZpcnN0X2Jvb3QiICE9ICIiIF07dGhlbgorICAgICAgICAgICAgaWYgWyAiJFBST0JFX1BMQVRGT1JNX0JVUyIgIT0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIFBMQVRGT1JNX0JVU19OT01BVENIPSItLXN1YnN5c3RlbS1ub21hdGNoPXBsYXRmb3JtIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFBMQVRGT1JNX0JVU19OT01BVENIPSIiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZCAtLXN1YnN5c3RlbS1ub21hdGNoPXR0eSAtLXN1YnN5c3RlbS1ub21hdGNoPW1lbSAtLXN1YnN5c3RlbS1ub21hdGNoPXZjIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dnRjb25zb2xlIC0tc3Vic3lzdGVtLW5vbWF0Y2g9bWlzYyAtLXN1YnN5c3RlbS1ub21hdGNoPWRjb24gLS1zdWJzeXN0ZW0tbm9tYXRjaD1wY2lfYnVzIC0tc3Vic3lzdGVtLW5vbWF0Y2g9Z3JhcGhpY3MgLS1zdWJzeXN0ZW0tbm9tYXRjaD1iYWNrbGlnaHQgLS1zdWJzeXN0ZW0tbm9tYXRjaD12aWRlbzRsaW51eCAkUExBVEZPUk1fQlVTX05PTUFUQ0gKKyAgICAgICAgICAgICh1ZGV2YWRtIHNldHRsZSAtLXRpbWVvdXQ9MzsgdWRldmFkbSBjb250cm9sIC0tZW52PVNUQVJUVVA9KSYKKyAgICBlbHNlCisgICAgICAgICAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisgICAgICAgICAgICB1ZGV2YWRtIHNldHRsZQorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvICJTdG9wcGluZyB1ZGV2ZCIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIHVkZXZkIC0tcXVpZXQKKyAgICA7OworICByZXN0YXJ0KQorICAgICQwIHN0b3AKKyAgICBzbGVlcCAxCisgICAgJDAgc3RhcnQKKyAgICA7OworICBzdGF0dXMpCisgICAgcGlkPWBwaWRvZiAteCB1ZGV2ZGAKKyAgICBpZiBbIC1uICIkcGlkIiBdOyB0aGVuCisJZWNobyAidWRldmQgKHBpZCAkcGlkKSBpcyBydW5uaW5nIC4uLiIKKyAgICBlbHNlCisJZWNobyAidWRldmQgaXMgc3RvcHBlZCIKKyAgICBmaQorICAgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKyAgICBleGl0IDEKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbGlua3MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xpbmtzLmNvbmYKQEAgLTAsMCArMSwyMSBAQAorIyBUaGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBkbyBub3QgYXNrIHRoZSBkZWJpYW4gbWFpbnRhaW5lciBhYm91dCBpdC4KKyMgWW91IG1heSB1c2UgaXQgdG8gZG8gc3RyYW5nZSBhbmQgd29uZGVyZnVsIHRoaW5ncywgYXQgeW91ciByaXNrLgorCitMIGZkCQkvcHJvYy9zZWxmL2ZkCitMIHN0ZGluCQkvcHJvYy9zZWxmL2ZkLzAKK0wgc3Rkb3V0CS9wcm9jL3NlbGYvZmQvMQorTCBzdGRlcnIJL3Byb2Mvc2VsZi9mZC8yCitMIGNvcmUJCS9wcm9jL2tjb3JlCitMIHNuZHN0YXQJL3Byb2MvYXNvdW5kL29zcy9zbmRzdGF0CitMIE1BS0VERVYJL3NiaW4vTUFLRURFVgorCitEIHB0cworRCBzaG0KKworIyBIaWMgc3VudCBsZW9uZXMuCitNIHBwcAkJYyAxMDggMAorRCBsb29wCitNIGxvb3AvMAliIDcgMAorRCBuZXQKK00gbmV0L3R1bgljIDEwIDIwMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbG9jYWwucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMmNkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgQ3JlYXRlIGEgc3ltbGluayB0byBhbnkgdG91Y2hzY3JlZW4gaW5wdXQgZGV2aWNlCisjIFRyaWdnZXIgYmFzZWQgb24gaW5wdXQgdHlwZSwgdGhhdCB0aGUgZXZiaXQgKC1lKSBoYXMgRVZfU1lOIGFuZCBFVl9BQlMsCisjIGhhcyBhbiBFVl9BQlMgdmFsdWUgKC1hKSB3aGljaCBpcyB1c2VkIGZvciB0b3VjaHNjcmVlbiB0eXBlIGRldmljZXMuCitTVUJTWVNURU09PSJpbnB1dCIsIEtFUk5FTD09ImV2ZW50WzAtOV0qIiwgRU5We0lEX0lOUFVUX1RPVUNIU0NSRUVOfT09IjEiLCBTWU1MSU5LKz0iaW5wdXQvdG91Y2hzY3JlZW4wIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3Blcm1pc3Npb25zLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNWI3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMKQEAgLTAsMCArMSwxMzEgQEAKK0FDVElPTiE9ImFkZCIsIEdPVE89InBlcm1pc3Npb25zX2VuZCIKKworIyB3b3JrYXJvdW5kcyBuZWVkZWQgdG8gc3luY2hyb25pemUgd2l0aCBzeXNmcworIyBvbmx5IG5lZWRlZCBmb3Iga2VybmVscyA8IHYyLjYuMTgtcmMxCitFTlZ7UEhZU0RFVlBBVEh9IT0iPyoiLCBFTlZ7UEhZU0RFVkJVU309PSI/KiIsCVdBSVRfRk9SX1NZU0ZTPSJidXMiCitTVUJTWVNURU09PSJzY3NpIiwgS0VSTkVMPT0iWzAtOV0qOlswLTldKiIsCVdBSVRfRk9SX1NZU0ZTPSJpb2Vycl9jbnQiCisjIG9ubHkgbmVlZGVkIGZvciBrZXJuZWxzIDwgMi42LjE2CitTVUJTWVNURU09PSJuZXQiLAkJCQlXQUlUX0ZPUl9TWVNGUz0iYWRkcmVzcyIKKyMgb25seSBuZWVkZWQgZm9yIGtlcm5lbHMgPCAyLjYuMTcKK1NVQlNZU1RFTT09Im5ldCIsIEVOVntEUklWRVJ9PT0iPyoiLAkJV0FJVF9GT1JfU1lTRlM9ImRldmljZS9kcml2ZXIiCisKKyMgZGV2aWNlcyBuZWVkZWQgdG8gbG9hZCB0aGUgZHJpdmVycyBwcm92aWRpbmcgdGhlbQorS0VSTkVMPT0idHVuIiwJCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorS0VSTkVMPT0icHBwIiwJCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorS0VSTkVMPT0ibG9vcFswLTldKiIsCQkJCU9QVElPTlMrPSJpZ25vcmVfcmVtb3ZlIgorCisjIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGJsb2NrIGRldmljZXMKK1NVQlNZU1RFTT09ImJsb2NrIiwJCQkJR1JPVVA9ImRpc2siCisjIHRoZSBhYWNyYWlkIGRyaXZlciBpcyBicm9rZW4gYW5kIHJlcG9ydHMgdGhhdCBkaXNrcyByZW1vdmFibGUgKHNlZSAjNDA0OTI3KQorU1VCU1lTVEVNPT0iYmxvY2siLCBBVFRSU3tyZW1vdmFibGV9PT0iMSIsIFwKKwlEUklWRVJTIT0iYWFjcmFpZCIsCQkJR1JPVVA9ImZsb3BweSIKKyMgYWxsIGJsb2NrIGRldmljZXMgb24gdGhlc2UgYnVzZXMgYXJlICJyZW1vdmFibGUiCitTVUJTWVNURU09PSJibG9jayIsIFNVQlNZU1RFTVM9PSJ1c2J8aWVlZTEzOTR8bW1jfHBjbWNpYSIsIEdST1VQPSJmbG9wcHkiCisKKyMgSURFIGRldmljZXMKK0tFUk5FTD09ImhkW2Etel18cGNkWzAtOV0qIiwgCQkJRFJJVkVSUz09ImlkZS1jZHJvbXxwY2QiLCBcCisJSU1QT1JUe3Byb2dyYW19PSJjZHJvbV9pZCAtLWV4cG9ydCAkdGVtcG5vZGUiCitFTlZ7SURfQ0RST019PT0iPyoiLAkJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJodFswLTldKiIsIAkJCQlHUk9VUD0idGFwZSIKK0tFUk5FTD09Im5odFswLTldKiIsIAkJCQlHUk9VUD0idGFwZSIKKworIyBTQ1NJIGRldmljZXMKK0tFUk5FTD09InNyWzAtOV0qIiwgSU1QT1JUe3Byb2dyYW19PSJjZHJvbV9pZCAtLWV4cG9ydCAkdGVtcG5vZGUiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMSIsCQkJCUdST1VQPSJ0YXBlIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjMiLCBBVFRSU3t2ZW5kb3J9PT0iSFAiLAlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIzIiwgQVRUUlN7dmVuZG9yfT09IkVwc29uIiwJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMyIsIEFUVFJTe3ZlbmRvcn09PSJFUFNPTiIsCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjQiLAkJCQlHUk9VUD0iY2Ryb20iCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iNSIsCQkJCUdST1VQPSJjZHJvbSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI2IiwJCQkJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iOCIsCQkJCUdST1VQPSJ0YXBlIgorCisjIFVTQiBkZXZpY2VzCitLRVJORUw9PSJsZWdvdXNidG93ZXIqIiwJTU9ERT0iMDY2NiIKK0tFUk5FTD09ImxwWzAtOV0qIiwgU1VCU1lTVEVNUz09InVzYiIsCQlHUk9VUD0ibHAiCisKKyMgdXNiZnMtbGlrZSBkZXZpY2VzCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwgXAorCQkJCU1PREU9IjA2NjQiCisKKyMgaVJpdmVyIG11c2ljIHBsYXllcnMKK1NVQlNZU1RFTT09InVzYiIsIEVOVntERVZUWVBFfT09InVzYl9kZXZpY2UiLAlHUk9VUD0icGx1Z2RldiIsIFwKKwlBVFRSU3tpZFZlbmRvcn09PSI0MTAyIiwgQVRUUlN7aWRQcm9kdWN0fT09IjEwWzAxXVsxMzU3ODldIgorCisjIHNlcmlhbCBkZXZpY2VzCitTVUJTWVNURU09PSJ0dHkiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09ImNhcGkiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09InNsYW1yIiwJCQkJR1JPVVA9ImRpYWxvdXQiCitTVUJTWVNURU09PSJ6YXB0ZWwiLAkJCQlHUk9VUD0iZGlhbG91dCIKKworIyB2YyBkZXZpY2VzIChhbGwgbWVtYmVycyBvZiB0aGUgdHR5IHN1YnN5c3RlbSkKK0tFUk5FTD09InB0bXgiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0icm9vdCIKK0tFUk5FTD09ImNvbnNvbGUiLAkJTU9ERT0iMDYwMCIsCUdST1VQPSJyb290IgorS0VSTkVMPT0idHR5IiwJCQlNT0RFPSIwNjY2IiwJR1JPVVA9InJvb3QiCitLRVJORUw9PSJ0dHlbMC05XSoiLAkJCQlHUk9VUD0icm9vdCIKK0tFUk5FTD09InB0eSoiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0idHR5IgorCisjIHZpZGVvIGRldmljZXMKK1NVQlNZU1RFTT09InZpZGVvNGxpbnV4IiwJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJkcm0iLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJkdmIiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJlbTgzMDAiLAkJCQlHUk9VUD0idmlkZW8iCitTVUJTWVNURU09PSJncmFwaGljcyIsCQkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09Im52aWRpYSIsCQkJCUdST1VQPSJ2aWRlbyIKKworIyBtaXNjIGRldmljZXMKK0tFUk5FTD09InJhbmRvbSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0idXJhbmRvbSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibWVtIiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJrbWVtIiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJwb3J0IiwJCQlNT0RFPSIwNjQwIiwJR1JPVVA9ImttZW0iCitLRVJORUw9PSJmdWxsIiwJCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibnVsbCIsCQkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Inplcm8iLAkJCU1PREU9IjA2NjYiCitLRVJORUw9PSJpbm90aWZ5IiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJzZ2lfZmV0Y2hvcCIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ic29ueXBpIiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJhZ3BnYXJ0IiwJCQkJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0ibnZyYW0iLAkJCQlHUk9VUD0ibnZyYW0iCitLRVJORUw9PSJydGN8cnRjWzAtOV0qIiwJCQlHUk9VUD0iYXVkaW8iCitLRVJORUw9PSJ0cG0qIiwJCQlNT0RFPSIwNjAwIiwJT1dORVI9InRzcyIsIEdST1VQPSJ0c3MiCitLRVJORUw9PSJmdXNlIiwJCQkJCUdST1VQPSJmdXNlIgorS0VSTkVMPT0ia3FlbXUiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Imt2bSIsCQkJCQlHUk9VUD0ia3ZtIgorS0VSTkVMPT0idHVuIiwJCQlNT0RFPSIwNjY2IiwKKworS0VSTkVMPT0iY2RlbXVbMC05XSoiLAkJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJwa3RjZHZkWzAtOV0qIiwJCQlHUk9VUD0iY2Ryb20iCitLRVJORUw9PSJwa3RjZHZkIiwJCU1PREU9IjA2NDQiCisKK0tFUk5FTD09InV2ZXJicyoiLAkJCQlHUk9VUD0icmRtYSIKK0tFUk5FTD09InVjbSoiLAkJCQkJR1JPVVA9InJkbWEiCitLRVJORUw9PSJyZG1hX3VjbSIsCQkJCUdST1VQPSJyZG1hIgorCisjIHByaW50ZXJzIGFuZCBwYXJhbGxlbCBkZXZpY2VzCitTVUJTWVNURU09PSJwcmludGVyIiwJCQkJR1JPVVA9ImxwIgorU1VCU1lTVEVNPT0icHBkZXYiLAkJCQlHUk9VUD0ibHAiCitLRVJORUw9PSJpcmxwdCoiLAkJCQlHUk9VUD0ibHAiCitLRVJORUw9PSJwdFswLTldKiIsCQkJCUdST1VQPSJ0YXBlIgorS0VSTkVMPT0icGh0WzAtOV0qIiwJCQkJR1JPVVA9InRhcGUiCisKKyMgc291bmQgZGV2aWNlcworU1VCU1lTVEVNPT0ic291bmQiLAkJCQlHUk9VUD0iYXVkaW8iCisKKyMgaWVlZTEzOTQgZGV2aWNlcyAgICAgICAKK0tFUk5FTD09InJhdzEzOTQiLAkJCQlHUk9VUD0iZGlzayIKK0tFUk5FTD09ImR2MTM5NCoiLAkJCQlHUk9VUD0idmlkZW8iCitLRVJORUw9PSJ2aWRlbzEzOTQqIiwJCQkJR1JPVVA9InZpZGVvIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD09ImV2ZW50WzAtOV0qIiwgQVRUUlN7bmFtZX09PSIqZHZiKnwqRFZCKnwqIElSICoiIFwKKwkJCQlNT0RFPSIwNjY0IiwJR1JPVVA9InZpZGVvIgorS0VSTkVMPT0ianNbMC05XSoiLAkJTU9ERT0iMDY2NCIKK0tFUk5FTD09ImxpcmNbMC05XSoiLAkJCQlHUk9VUD0idmlkZW8iCisKKyMgQU9FIGNoYXJhY3RlciBkZXZpY2VzCitTVUJTWVNURU09PSJhb2UiLAkJTU9ERT0iMDIyMCIsCUdST1VQPSJkaXNrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iZXJyIiwgTU9ERT0iMDQ0MCIKKworTEFCRUw9InBlcm1pc3Npb25zX2VuZCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzOTgwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKwordGFyIC1DIHRlc3QvIC14SmYgdGVzdC9zeXMudGFyLnh6CittYWtlIC1rIGNoZWNrLVRFU1RTCittYWtlIHRlc3Qtc3lzLWRpc3RjbGVhbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4ucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkNzEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9ydW4ucnVsZXMKQEAgLTAsMCArMSwxNCBAQAorIyBkZWJ1Z2dpbmcgbW9uaXRvcgorUlVOKz0ic29ja2V0Oi9vcmcva2VybmVsL3VkZXYvbW9uaXRvciIKKworIyBydW4gYSBjb21tYW5kIG9uIHJlbW92ZSBldmVudHMKK0FDVElPTj09InJlbW92ZSIsIEVOVntSRU1PVkVfQ01EfSE9IiIsIFJVTis9IiRlbnZ7UkVNT1ZFX0NNRH0iCisKKyMgaWdub3JlIHRoZSBldmVudHMgZ2VuZXJhdGVkIGJ5IHZpcnR1YWwgY29uc29sZXMKK0tFUk5FTD09InB0bXgiLAkJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09ImNvbnNvbGUiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0idHR5IgksCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJ0dHlbMC05XSoiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0icHR5KiIsCQlPUFRJT05TKz0ibGFzdF9ydWxlIgorU1VCU1lTVEVNPT0idmMiLAlPUFRJT05TKz0ibGFzdF9ydWxlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZSBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmZmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZQpAQCAtMCwwICsxLDc1IEBACisjIS9iaW4vc2ggLWUKKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdWRldi1jYWNoZQorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnRhbGwKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogY2FjaGUgL2RldiB0byBzcGVlZHVwIHRoZSB1ZGV2IG5leHQgYm9vdAorIyMjIEVORCBJTklUIElORk8KKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLXIgL3Byb2MvbW91bnRzIF0gfHwgZXhpdCAxCitbIC14IEBVREVWREAgXSB8fCBleGl0IDEKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorCitbIC1mIC9ldGMvZGVmYXVsdC9yY1MgXSAmJiAuIC9ldGMvZGVmYXVsdC9yY1MKK0RFVkNBQ0hFX1RNUD0iL2Rldi9zaG0vdWRldi1jYWNoZS10bXAudGFyIgorU1lTQ09ORl9DQUNIRUQ9Ii9ldGMvdWRldi9jYWNoZS5kYXRhIgorU1lTQ09ORl9UTVA9Ii9kZXYvc2htL3VkZXYuY2FjaGUiCitERVZDQUNIRV9SRUdFTj0iL2Rldi9zaG0vdWRldi1yZWdlbiIgIyBjcmVhdGUgdG8gcmVxdWVzdCBjYWNoZSByZWdlbgorCisjIEEgbGlzdCBvZiBmaWxlcyB3aGljaCBhcmUgdXNlZCBhcyBhIGNyaXRlcmlhIHRvIGp1ZGdlIHdoZXRoZXIgdGhlIHVkZXYgY2FjaGUgY291bGQgYmUgcmV1c2VkLgorQ01QX0ZJTEVfTElTVD0iL3Byb2MvdmVyc2lvbiAvcHJvYy9jbWRsaW5lIC9wcm9jL2RldmljZXMiCitbIC1mIC9wcm9jL2F0YWdzIF0gJiYgQ01QX0ZJTEVfTElTVD0iJENNUF9GSUxFX0xJU1QgL3Byb2MvYXRhZ3MiCisKKyMgTGlzdCBvZiBmaWxlcyB3aG9zZSBtZXRhZGF0YSAoc2l6ZS9tdGltZS9uYW1lKSB3aWxsIGJlIGluY2x1ZGVkIGluIGNhY2hlZAorIyBzeXN0ZW0gc3RhdGUuCitNRVRBX0ZJTEVfTElTVD0ibGliL3VkZXYvcnVsZXMuZC8qIGV0Yy91ZGV2L3J1bGVzLmQvKiIKKworIyBDb21tYW5kIHRvIGNvbXB1dGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCitzeXNjb25mX2NtZCAoKSB7CisJY2F0IC0tICRDTVBfRklMRV9MSVNUCisJc3RhdCAtYyAnJXMgJVkgJW4nIC0tICRNRVRBX0ZJTEVfTElTVCB8IGF3ayAtRi8gJ3twcmludCAkMSAiICIgJE5GO30nCit9CisKK1sgLWYgL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUgXSAmJiAuIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlCisKK2lmIFsgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXYtY2FjaGU6IHJlYWQtb25seSByb290ZnMsIHNraXAgZ2VuZXJhdGluZyB1ZGV2LWNhY2hlIgorICAgIGV4aXQgMAorZmkKKworWyAiJERFVkNBQ0hFIiAhPSAiIiBdIHx8IGV4aXQgMAorWyAiJHtWRVJCT1NFfSIgPT0gIm5vIiBdIHx8IGVjaG8gLW4gInVkZXYtY2FjaGU6IGNoZWNraW5nIGZvciAke0RFVkNBQ0hFX1JFR0VOfS4uLiAiCitpZiAhIFsgLWUgIiRERVZDQUNIRV9SRUdFTiIgXTsgdGhlbgorCVsgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJub3QgZm91bmQuIgorCWV4aXQgMAorZmkKK1sgIiR7VkVSQk9TRX0iID09ICJubyIgXSB8fCBlY2hvICJmb3VuZC4iCitlY2hvICJQb3B1bGF0aW5nIGRldiBjYWNoZSIKKworZXJyX2NsZWFudXAgKCkgeworICAgICAgICBlY2hvICJ1ZGV2LWNhY2hlOiB1cGRhdGUgZmFpbGVkISIKKyAgICAgICAgdWRldmFkbSBjb250cm9sIC0tc3RhcnQtZXhlYy1xdWV1ZQorCXJtIC1mIC0tICIkU1lTQ09ORl9UTVAiICIkREVWQ0FDSEVfVE1QIiAiJERFVkNBQ0hFIiAiJFNZU0NPTkZfQ0FDSEVEIgorfQorCisoCisJc2V0IC1lCisJdHJhcCAnZXJyX2NsZWFudXAnIEVYSVQKKwl1ZGV2YWRtIGNvbnRyb2wgLS1zdG9wLWV4ZWMtcXVldWUKKwlzeXNjb25mX2NtZCA+ICIkU1lTQ09ORl9UTVAiCisJZmluZCAvZGV2IC14ZGV2IFwoIC10eXBlIGIgLW8gLXR5cGUgYyAtbyAtdHlwZSBsIFwpIHwgY3V0IC1jIDItIFwKKwkJfCB4YXJncyB0YXIgY2YgIiR7REVWQ0FDSEVfVE1QfSIKKwlnemlwIDwgIiR7REVWQ0FDSEVfVE1QfSIgPiAiJERFVkNBQ0hFIgorCXJtIC1mICIke0RFVkNBQ0hFX1RNUH0iCisJbXYgIiRTWVNDT05GX1RNUCIgIiRTWVNDT05GX0NBQ0hFRCIKKwl1ZGV2YWRtIGNvbnRyb2wgLS1zdGFydC1leGVjLXF1ZXVlCisJcm0gLWYgIiRERVZDQUNIRV9SRUdFTiIKKwl0cmFwIC0gRVhJVAorKSAmCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiNzMyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlLmRlZmF1bHQKQEAgLTAsMCArMSw1IEBACisjIERlZmF1bHQgZm9yIC9ldGMvaW5pdC5kL3VkZXYKKworIyBDb21tZW50IHRoaXMgb3V0IHRvIGRpc2FibGUgZGV2aWNlIGNhY2hlCitERVZDQUNIRT0iL2V0Yy91ZGV2LWNhY2hlLnRhci5neiIKK1BST0JFX1BMQVRGT1JNX0JVUz0ieWVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTlkNGEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYucnVsZXMKQEAgLTAsMCArMSwxMTYgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyB3b3JrYXJvdW5kIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCByZXBvcnQgbWVkaWEgY2hhbmdlcworU1VCU1lTVEVNUz09ImlkZSIsIEtFUk5FTD09ImhkW2Etel0iLCBBVFRSe3JlbW92YWJsZX09PSIxIiwgXAorCUVOVntJRF9NT0RFTH09PSJJT01FR0FfWklQKiIsCU5BTUU9IiVrIiwgT1BUSU9OUys9ImFsbF9wYXJ0aXRpb25zIgorU1VCU1lTVEVNUz09ImlkZSIsIEtFUk5FTD09ImhkW2Etel0iLCBBVFRSU3ttZWRpYX09PSJmbG9wcHkiLCBcCisJT1BUSU9OUys9ImFsbF9wYXJ0aXRpb25zIgorCisjIFNDU0kgZGV2aWNlcworU1VCU1lTVEVNUz09InNjc2kiLCBLRVJORUw9PSJzclswLTldKiIsCU5BTUU9InNjZCVuIiwgU1lNTElOSys9InNyJW4iCisKKyMgVVNCIGRldmljZXMKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJhdWVyWzAtOV0qIiwJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImNwYWRbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iZGFidXNiKiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iaGlkZGV2KiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0ibGVnb3VzYnRvd2VyKiIsCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJscFswLTldKiIsCQlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0idHR5VVNCKiIsIFwKKwlBVFRSU3twcm9kdWN0fT09IlBhbG0gSGFuZGhlbGQqfEhhbmRzcHJpbmcgVmlzb3J8cGFsbU9uZSBIYW5kaGVsZCIsIFwKKwkJCQkJU1lNTElOSys9InBpbG90IgorCisjIHVzYmZzLWxpa2UgZGV2aWNlcworU1VCU1lTVEVNPT0idXNiX2RldmljZSIsCVBST0dSQU09Ii9iaW4vc2ggLWMgJ0s9JWs7IEs9JCR7SyN1c2JkZXZ9OyBwcmludGYgYnVzL3VzYi8lJTAzaS8lJTAzaSAkJHtLJSUlJS4qfSAkJHtLIyoufSciLCBBQ1RJT049PSJhZGQiLCBcCisJCQkJTkFNRT0iJWMiCitTVUJTWVNURU09PSJ1c2IiLCBFTlZ7REVWVFlQRX09PSJ1c2JfZGV2aWNlIiwJTkFNRT0iYnVzL3VzYi8kZW52e0JVU05VTX0vJGVudntERVZOVU19IgorCisjIHNlcmlhbCBkZXZpY2VzCitLRVJORUw9PSJjYXBpIiwJCQlOQU1FPSJjYXBpMjAiLCBTWU1MSU5LKz0iaXNkbi9jYXBpMjAiCitLRVJORUw9PSJjYXBpWzAtOV0qIiwJCU5BTUU9ImNhcGkvJW4iCisKKyMgdmlkZW8gZGV2aWNlcworS0VSTkVMPT0iZHZiKiIsCQkJUFJPR1JBTT0iL2Jpbi9zaCAtYyAnSz0lazsgSz0kJHtLI2R2Yn07IHByaW50ZiBkdmIvYWRhcHRlciUlaS8lJXMgJCR7SyUlJSUuKn0gJCR7SyMqLn0iLCBBQ1RJT049PSJhZGQiLCBcCisJCQkJTkFNRT0iJWMiCitLRVJORUw9PSJjYXJkWzAtOV0qIiwJCU5BTUU9ImRyaS8layIKKworIyBtaXNjIGRldmljZXMKK0tFUk5FTD09Imh3X3JhbmRvbSIsCQlOQU1FPSJod3JuZyIKK0tFUk5FTD09InR1biIsCQkJTkFNRT0ibmV0LyVrIgorS0VSTkVMPT0iZXZ0Y2huIiwJCU5BTUU9Inhlbi8layIKKworS0VSTkVMPT0iY2RlbXVbMC05XSoiLAkJTkFNRT0iY2RlbXUvJW4iCitLRVJORUw9PSJwa3RjZHZkWzAtOV0qIiwJTkFNRT0icGt0Y2R2ZC8lbiIKK0tFUk5FTD09InBrdGNkdmQiLAkJTkFNRT0icGt0Y2R2ZC9jb250cm9sIgorCitLRVJORUw9PSJjcHVbMC05XSoiLAkJTkFNRT0iY3B1LyVuL2NwdWlkIgorS0VSTkVMPT0ibXNyWzAtOV0qIiwJCU5BTUU9ImNwdS8lbi9tc3IiCitLRVJORUw9PSJtaWNyb2NvZGUiLAkJTkFNRT0iY3B1L21pY3JvY29kZSIKKworS0VSTkVMPT0idW1hZCoiLAkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09Imlzc20qIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJ1dmVyYnMqIiwJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJ1Y20qIiwJCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0icmRtYV91Y20iLAkJTkFNRT0iaW5maW5pYmFuZC8layIKKworIyBBTFNBIGRldmljZXMKK0tFUk5FTD09ImNvbnRyb2xDWzAtOV0qIiwJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0iaHdDW0QwLTldKiIsCQlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJwY21DW0QwLTljcF0qIiwJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0ibWlkaUNbRDAtOV0qIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InRpbWVyIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InNlcSIsCQkJTkFNRT0ic25kLyVrIgorCisjIGllZWUxMzk0IGRldmljZXMgICAgICAgCitLRVJORUw9PSJkdjEzOTQqIiwJCU5BTUU9ImR2MTM5NC8lbiIKK0tFUk5FTD09InZpZGVvMTM5NCoiLAkJTkFNRT0idmlkZW8xMzk0LyVuIgorCisjIGlucHV0IGRldmljZXMKK0tFUk5FTD09Im1pY2UiLAkJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0ibW91c2VbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJldmVudFswLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09ImpzWzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0idHNbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJ1aW5wdXQiLAkJTkFNRT0iaW5wdXQvJWsiCisKKyMgWmFwdGVsCitLRVJORUw9PSJ6YXBjdGwiLAkJTkFNRT0iemFwL2N0bCIKK0tFUk5FTD09InphcHRpbWVyIiwJCU5BTUU9InphcC90aW1lciIKK0tFUk5FTD09InphcGNoYW5uZWwiLAkJTkFNRT0iemFwL2NoYW5uZWwiCitLRVJORUw9PSJ6YXBwc2V1ZG8iLAkJTkFNRT0iemFwL3BzZXVkbyIKK0tFUk5FTD09InphcFswLTldKiIsCQlOQU1FPSJ6YXAvJW4iCisKKyMgQU9FIGNoYXJhY3RlciBkZXZpY2VzCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJkaXNjb3ZlciIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImVyciIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImludGVyZmFjZXMiLAlOQU1FPSJldGhlcmQvJWsiCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJyZXZhbGlkYXRlIiwJTkFNRT0iZXRoZXJkLyVrIgorCisjIGRldmljZSBtYXBwZXIgY3JlYXRlcyBpdHMgb3duIGRldmljZSBub2Rlcywgc28gaWdub3JlIHRoZXNlCitLRVJORUw9PSJkbS1bMC05XSoiLAkJT1BUSU9OUys9Imlnbm9yZV9kZXZpY2UiCitLRVJORUw9PSJkZXZpY2UtbWFwcGVyIiwJTkFNRT0ibWFwcGVyL2NvbnRyb2wiCisKK0tFUk5FTD09InJmY29tbVswLTldKiIsIE5BTUU9IiVrIiwgR1JPVVA9InVzZXJzIiwgTU9ERT0iMDY2MCIKKworIyBGaXJtd2FyZSBIZWxwZXIKK0FDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09ImZpcm13YXJlIiwgUlVOKz0iL2xpYi91ZGV2L2Zpcm13YXJlLnNoIgorCisjIFNhbXN1bmcgVUFSVFMKK0tFUk5FTD09InMzYzI0MTBfc2VyaWFsWzAtOV0iLCAgIE5BTUU9InR0eVNBQyVuIgorCisjIE1YQyBVQVJUcworS0VSTkVMPT0idHR5bXhjWzAtNF0iLCAgIE5BTUU9InR0eW14YyVuIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2XzE4Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjE2MzUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2XzE4Mi5iYgpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUgdWRldi5pbmMKKworUFIgPSAicjkiCisKKyMgbW9kdWxlLWluaXQtdG9vbHMgZnJvbSBrbW9kX2dpdCB3aWxsIHByb3ZpZGUgbGlia21vZCBydW50aW1lCitERVBFTkRTICs9ICJtb2R1bGUtaW5pdC10b29scyIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiOTY0NDU2MTc3ZmJmNDgwMjNkZmVlN2RiM2E3MDhkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4NTdlZDE5ZmFmZDhmM2NhOGRlNDEwMTk0ZThjNzMzNmU5ZWI4YTIwNjI2ZWE4YTRiYTY0NDliMDE3ZmFiYTQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2FkZC12ZXJib3NlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDQzZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9hZGQtdmVyYm9zZS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHVwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kLm9yZwkyMDA1LTAxLTAzIDAwOjMwOjQ3LjAwMDAwMDAwMCArMDIwMAorKysrIHVwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kCTIwMDctMTItMDEgMTk6NDE6MDguMDAwMDAwMDAwICswMjAwCitAQCAtMTksNiArMTksNyBAQAorIG5vdHJlYWxseT0wCisgZm9yY2U9MAorIGRvc3RhcnQ9MAorK3ZlcmJvc2U9MAorIAorIHVzYWdlKCkKKyB7CitAQCAtMjgsNiArMjksNyBAQAorICAgICAgICB1cGRhdGUtcmMuZCBbLW5dIFstciA8cm9vdD5dIFstc10gPGJhc2VuYW1lPiBzdGFydHxzdG9wIE5OIHJ1bmx2bCBbcnVubHZsXSBbLi4uXSAuCisgCQktbjogbm90IHJlYWxseQorIAkJLWY6IGZvcmNlCisrCQktdjogdmVyYm9zZQorIAkJLXI6IGFsdGVybmF0ZSByb290IHBhdGggKGRlZmF1bHQgaXMgLykKKyAJCS1zOiBpbnZva2Ugc3RhcnQgbWV0aG9kcyBpZiBhcHByb3ByaWF0ZSB0byBjdXJyZW50IHJ1bmxldmVsCisgRU9GCitAQCAtNjksNyArNzEsNyBAQAorIAlsZXY9YGVjaG8gJDIgfCBjdXQgLWQvIC1mMWAKKyAJbm49YGVjaG8gJDIgfCBjdXQgLWQvIC1mMmAKKyAJZm49IiR7ZXRjZH0ke2xldn0uZC8ke3N0YXJ0c3RvcH0ke25ufSR7Ym59IgorLQllY2hvICIgICRmbiAtPiAuLi9pbml0LmQvJGJuIgorKwlbICR2ZXJib3NlIC1lcSAxIF0gJiYgZWNobyAiICAkZm4gLT4gLi4vaW5pdC5kLyRibiIKKyAJaWYgWyAkbm90cmVhbGx5IC1lcSAwIF07IHRoZW4KKyAJCW1rZGlyIC1wIGBkaXJuYW1lICRmbmAKKyAgCQlsbiAtcyAuLi9pbml0LmQvJGJuICRmbgorQEAgLTg5LDcgKzkxLDcgQEAKKyAJCWV4aXQgMAorIAlmaQorIAorLQllY2hvICIgQWRkaW5nIHN5c3RlbSBzdGFydHVwIGZvciAkaW5pdGQvJGJuIC4uLiIKKysJZWNobyAiIEFkZGluZyBzeXN0ZW0gc3RhcnR1cCBmb3IgJGluaXRkLyRibi4iCisgCisgCWZvciBpIGluICRzdGFydGxpbmtzOyBkbworIAkJZG9saW5rIFMgJGkKK0BAIC0xMDUsNiArMTA3LDEwIEBACisgCQkJc2hpZnQKKyAJCQljb250aW51ZQorIAkJCTs7CisrCQktdikJdmVyYm9zZT0xCisrCQkJc2hpZnQKKysJCQljb250aW51ZQorKwkJCTs7CisgCQktZikJZm9yY2U9MQorIAkJCXNoaWZ0CisgCQkJY29udGludWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUxNzFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0NoZWNrIGlmIHN5bWxpbmtzIGFyZSB2YWxpZAorCitXaGVuIHVzaW5nIHJvb3Qgb3B0aW9uIGFuZCAkaW5pdGQvJGJuIGlzIGEgc3ltbGluaywgdGhlIHNjcmlwdCB3b3VsZCBmYWlsIGJlY2F1c2UKK3RoZSBzeW1saW5rIHBvaW50cyB0byBhIHBhdGggb24gdGFyZ2V0LiBGb3IgZXhhbXBsZToKKworL3BhdGgvdG8vdGFyZ2V0L3Jvb3Rmcy9ldGMvaW5pdC5kL3N5c2xvZyAtPiAvZXRjL2luaXQuZC9zeXNsb2cuYnVzeWJveAorCitIZW5jZSwgWyAtZiAvcGF0aC90by90YXJnZXQvcm9vdGZzL2V0Yy9pbml0LmQvc3lzbG9nIF0gY29uZGl0aW9uIHdvdWxkIHJldHVybgorZmFsc2UuCisKK1RoaXMgcGF0Y2ggYWRkcyB0aGUgcG9zaWJpbGl0eSB0byBjaGVjayB3aGV0aGVyIHRoZSBmaWxlIHRoZSBzeW1saW5rIHBvaW50cyB0bworYWN0dWFsbHkgZXhpc3RzIGluIHJvb3RmcyBwYXRoIGFuZCB0aGVuIGNvbnRpbnVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPiAKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKK0luZGV4OiBnaXQvdXBkYXRlLXJjLmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91cGRhdGUtcmMuZAorKysrIGdpdC91cGRhdGUtcmMuZAorQEAgLTE0NywxMyArMTQ3LDM0IEBAIGZpCisgYm49JDEKKyBzaGlmdAorIAorK3NuPSRpbml0ZC8kYm4KKytpZiBbIC1MICIkc24iIC1hIC1uICIkcm9vdCIgXTsgdGhlbgorKwlpZiB3aGljaCByZWFkbGluayA+L2Rldi9udWxsOyB0aGVuCisrCQl3aGlsZSB0cnVlOyBkbworKwkJCWxpbmtzbj0iJChyZWFkbGluayAiJHNuIikiCisrCQkJaWYgWyAteiAiJGxpbmtzbiIgXTsgdGhlbgorKwkJCQlicmVhaworKwkJCWZpCisrCisrCQkJc249IiRsaW5rc24iCisrCQkJY2FzZSAiJHNuIiBpbgorKwkJCQkvKikgc249IiRyb290JHNuIiA7OworKwkJCQkqKSAgc249IiRpbml0ZC8kc24iIDs7CisrCQkJZXNhYworKwkJZG9uZQorKwllbHNlCisrCQllY2hvICJ1cGRhdGUtcmMuZDogcmVhZGxpbmsgdG9vbCBub3QgcHJlc2VudCwgY2Fubm90IGNoZWNrIHdoZXRoZXIgXAorKwkJCQkkc24gc3ltbGluayBwb2ludHMgdG8gYSB2YWxpZCBmaWxlLiIgPiYyCisrCWZpCisrZmkKKysKKyBpZiBbICQxICE9ICJyZW1vdmUiIF07IHRoZW4KKy0JaWYgWyAhIC1mICIkaW5pdGQvJGJuIiBdOyB0aGVuCisrCWlmIFsgISAtZiAiJHNuIiBdOyB0aGVuCisgCQllY2hvICJ1cGRhdGUtcmMuZDogJGluaXRkLyRibjogZmlsZSBkb2VzIG5vdCBleGlzdCIgPiYyCisgCQlleGl0IDEKKyAJZmkKKyBlbHNlCistCWlmIFsgLWYgIiRpbml0ZC8kYm4iIF07IHRoZW4KKysJaWYgWyAtZiAiJHNuIiBdOyB0aGVuCisgCQlpZiBbICRmb3JjZSAtZXEgMSBdOyB0aGVuCisgCQkJZWNobyAidXBkYXRlLXJjLmQ6ICRpbml0ZC8kYm4gZXhpc3RzIGR1cmluZyByYy5kIHB1cmdlIChjb250aW51aW5nKSIgPiYyCisgCQllbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJjMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvZml4LXRvLWhhbmRsZS1wcmlvcml0eS1udW1iZXJzLWNvcnJlY3RseS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IHRvIGhhbmRsZSBwcmlvcml0eSBudW1iZXJzIGNvcnJlY3RseS4KK1ByZXZpb3VzbHksIGlmIHRoZSBwcmlvcml0eSBudW1iZXIgaXMgJzA4JyBvciAnMDknLCBmb3IgZXhhbXBsZSwKK3RoZSBzY3JpcHQgY2Fubm90IGhhbmRsZSB0aGVtIGNvcnJlY3RseSBhcyB0aGVzZSBudW1iZXJzIGFyZSB0cmVhdGVkCithcyBvY3RhbCBudW1iZXJzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyB1cGRhdGUtcmMuZCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VwZGF0ZS1yYy5kIGIvdXBkYXRlLXJjLmQKK2luZGV4IGVjNTBkMTUuLmM3MGI4NTkgMTAwNjQ0CistLS0gYS91cGRhdGUtcmMuZAorKysrIGIvdXBkYXRlLXJjLmQKK0BAIC0yMDUsNyArMjA1LDcgQEAgY2FzZSAkMSBpbgorIAkJCQlleGl0IDEKKyAJCQlmaQorIAkJCXNoaWZ0CistCQkJTk49YHByaW50ZiAlMDJkICQxYAorKwkJCU5OPWBwcmludGYgJTAyZCAkKGV4cHIgJDEgKyAwKWAKKyAJCQlzaGlmdAorIAkJCXdoaWxlIFsgIngkMSIgIT0gInguIiBdOyBkbworIAkJCQlpZiBbICQjIC1lcSAwIF07IHRoZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZF8wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIm1hbmFnZSBzeW1saW5rcyBpbiAvZXRjL3JjTi5kIgorREVTQ1JJUFRJT04gPSAidXBkYXRlLXJjLmQgaXMgYSB1dGlsaXRpZXMgdGhhdCBhbGxvd3MgdGhlIG1hbmFnZW1lbnQgb2Ygc3ltbGlua3MgdG8gdGhlIGluaXRzY3JpcHRzIGluIHRoZSAvZXRjL3JjTi5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3VwZGF0ZS1yYy5kO2JlZ2lubGluZT01O2VuZGxpbmU9MTU7bWQ1PTE0OGE0ODMyMWIxMGViMzdjMWZhM2VlMDJiOTQwYTc1IgorCitQUiA9ICJyNSIKKworIyBSZXZpc2lvbiBjb3JyZXNwb25kaW5nIHRvIHRhZyB1cGRhdGUtcmMuZF8wLjcKK1NSQ1JFViA9ICJlY2E2ODBkZGYyOGQwMjQ5NTQ4OTVmNTlhMjQxYTYyMmRkNTc1YzExIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcGhpbGIvdXBkYXRlLXJjLmQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC12ZXJib3NlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWlmLXN5bWxpbmtzLWFyZS12YWxpZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlKCkgeworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS91cGRhdGUtcmMuZCAke0R9JHtzYmluZGlyfS91cGRhdGUtcmMuZAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MDcyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXguaW5jCkBAIC0wLDAgKzEsMjY4IEBACitTVU1NQVJZID0gIkEgc3VpdGUgb2YgYmFzaWMgc3lzdGVtIGFkbWluaXN0cmF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlV0aWwtbGludXggaW5jbHVkZXMgYSBzdWl0ZSBvZiBiYXNpYyBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdXRpbGl0aWVzIFwKK2NvbW1vbmx5IGZvdW5kIG9uIG1vc3QgTGludXggc3lzdGVtcy4gIFNvbWUgb2YgdGhlIG1vcmUgaW1wb3J0YW50IHV0aWxpdGllcyBpbmNsdWRlIFwKK2Rpc2sgcGFydGl0aW9uaW5nLCBrZXJuZWwgbWVzc2FnZSBtYW5hZ2VtZW50LCBmaWxlc3lzdGVtIGNyZWF0aW9uLCBhbmQgc3lzdGVtIGxvZ2luLiIKKworU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLmxpY2Vuc2luZzttZDU9MTcxNWY1ZWUzZTAxMjAzY2ExZTFlMGI5ZWU2NTkxOGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuTEdQTHYyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5CU0QtMzttZDU9NThkY2Q4NDUyNjUxZmM4YjA3ZDFmNjVjZTA3Y2E4YWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLlVDQjttZDU9MjYzODYwZjg5NjhkOGJhZmE1MzkyY2FiNzQyODUyNjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlidXVpZC9DT1BZSU5HO21kNT1iNDQyZmZiNzYyY2Y4ZDNlOWRmMWI5OWUwYmI0YWY3MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtb3VudC9DT1BZSU5HO21kNT1mYjkzZjAxZDQzNjEwNjljNTYxNjMyNzcwNTM3M2IxNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJibGtpZC9DT1BZSU5HO21kNT1mYjkzZjAxZDQzNjEwNjljNTYxNjMyNzcwNTM3M2IxNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgc3lzdGVtZCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHB5dGhvbi1kaXIKK0RFUEVORFMgPSAiemxpYiBuY3Vyc2VzIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBsem8tbmF0aXZlIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBsem8tbmF0aXZlIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvdXRpbC1saW51eC92JHtNQUpPUl9WRVJTSU9OfS91dGlsLWxpbnV4LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworUEFDS0FHRVMgPSsgInV0aWwtbGludXgtYWdldHR5IHV0aWwtbGludXgtZmRpc2sgdXRpbC1saW51eC1jZmRpc2sgdXRpbC1saW51eC1zZmRpc2sgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXVtb3VudCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1tb3VudCB1dGlsLWxpbnV4LXJlYWRwcm9maWxlIHV0aWwtbGludXgtdXVpZGQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtdXVpZGdlbiB1dGlsLWxpbnV4LWxzY3B1IHV0aWwtbGludXgtZnNjayB1dGlsLWxpbnV4LWJsa2lkIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LW1rZnMgdXRpbC1saW51eC1tY29va2llIHV0aWwtbGludXgtcmVzZXQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtbWtmcy5jcmFtZnMgdXRpbC1saW51eC1mc2NrLmNyYW1mcyB1dGlsLWxpbnV4LWZzdHJpbSBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1wYXJ0eCAke1BOfS1iYXNoLWNvbXBsZXRpb24gdXRpbC1saW51eC1od2Nsb2NrIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LWZpbmRmcyB1dGlsLWxpbnV4LWdldG9wdCB1dGlsLWxpbnV4LXN1bG9naW4iCitQQUNLQUdFUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncHlsaWJtb3VudCcsICd1dGlsLWxpbnV4LXB5bGlibW91bnQnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl51dGlsLWxpbnV4LWxpYi4qIgorCitTSEFSRURfRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS11c2UtdHR5LWdyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1ha2VpbnN0YWxsLWNob3duIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUta2lsbCAtLWVuYWJsZS1sYXN0IC0tZW5hYmxlLW1lc2cgLS1lbmFibGUtcGFydHggXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1yYXcgLS1lbmFibGUtcmVzZXQgLS1kaXNhYmxlLWxvZ2luIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpcHcgLS1kaXNhYmxlLW5ld2dycCAtLWRpc2FibGUtY2hmbi1jaHNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtd3JpdGUgLS1lbmFibGUtbW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJ1dWlkIC0tZW5hYmxlLWxpYmJsa2lkIC0tZW5hYmxlLWZzY2sgLS13aXRob3V0LXVkZXYgXAorICAgICAgICAgICAgICAgICAgICAgICB1c3JzYmluX2V4ZWNkaXI9JyR7c2JpbmRpcn0nIFwKKyIKKworRVhUUkFfT0VDT05GID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0iCisKK1BBQ0tBR0VDT05GSUdfY2xhc3MtdGFyZ2V0ID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXN1IC0tZW5hYmxlLXJ1bnVzZXIsLS1kaXNhYmxlLXN1IC0tZGlzYWJsZS1ydW51c2VyLCBsaWJwYW0sIgorCisjIFJlc3BlY3QgdGhlIHN5c3RlbWQgZmVhdHVyZSBmb3IgdXVpZGQKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLCAtLXdpdGhvdXQtc3lzdGVtZCAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIsc3lzdGVtZCIKKworIyBCdWlsZCBzZXRwcml2IHJlcXVpcmVzIGxpYmNhcC1uZworUEFDS0FHRUNPTkZJR1tsaWJjYXAtbmddID0gIi0tZW5hYmxlLXNldHByaXYsLS1kaXNhYmxlLXNldHByaXYsbGliY2FwLW5nLCIKKworIyBCdWlsZCBweXRob24gYmluZGluZ3MgZm9yIGxpYm1vdW50CitQQUNLQUdFQ09ORklHW3B5bGlibW91bnRdID0gIi0td2l0aC1weXRob24gLS1lbmFibGUtcHlsaWJtb3VudCwtLXdpdGhvdXQtcHl0aG9uIC0tZGlzYWJsZS1weWxpYm1vdW50LHB5dGhvbiIKKworRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uICs9ICIke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9nZXRvcHQvZ2V0b3B0LSouKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L3B5bGlibW91bnQubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvLmRlYnVnLyIKKworRklMRVNfdXRpbC1saW51eC1hZ2V0dHkgPSAiJHtiYXNlX3NiaW5kaXJ9L2FnZXR0eSIKK0ZJTEVTX3V0aWwtbGludXgtZmRpc2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2ZkaXNrLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtZnN0cmltID0gIiR7YmFzZV9zYmluZGlyfS9mc3RyaW0iCitGSUxFU191dGlsLWxpbnV4LWNmZGlzayA9ICIke2Jhc2Vfc2JpbmRpcn0vY2ZkaXNrIgorRklMRVNfdXRpbC1saW51eC1zZmRpc2sgPSAiJHtzYmluZGlyfS9zZmRpc2siCitGSUxFU191dGlsLWxpbnV4LXN3YXBvbm9mZiA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dhcG9uLiR7QlBOfSAke2Jhc2Vfc2JpbmRpcn0vc3dhcG9mZi4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LWxvc2V0dXAgPSAiJHtiYXNlX3NiaW5kaXJ9L2xvc2V0dXAuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1tb3VudCA9ICIke2Jhc2VfYmluZGlyfS9tb3VudC4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LW1jb29raWUgPSAiJHtiaW5kaXJ9L21jb29raWUiCitGSUxFU191dGlsLWxpbnV4LXVtb3VudCA9ICIke2Jhc2VfYmluZGlyfS91bW91bnQuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1yZWFkcHJvZmlsZSA9ICIke3NiaW5kaXJ9L3JlYWRwcm9maWxlLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtdXVpZGdlbiA9ICIke2JpbmRpcn0vdXVpZGdlbiIKK0ZJTEVTX3V0aWwtbGludXgtdXVpZGQgPSAiJHtzYmluZGlyfS91dWlkZCIKK0ZJTEVTX3V0aWwtbGludXgtcmVzZXQgPSAiJHtiYXNlX2JpbmRpcn0vcmVzZXQiCitGSUxFU191dGlsLWxpbnV4LXBhcnR4ID0gIiR7c2JpbmRpcn0vcGFydHgiCitGSUxFU191dGlsLWxpbnV4LWh3Y2xvY2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2h3Y2xvY2suJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1maW5kZnMgPSAiJHtzYmluZGlyfS9maW5kZnMiCitGSUxFU191dGlsLWxpbnV4LWdldG9wdCA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQuJHtCUE59IgorCitGSUxFU191dGlsLWxpbnV4LXB5bGlibW91bnQgPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC9weWxpYm1vdW50LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L19faW5pdF9fLioiCitGSUxFU191dGlsLWxpbnV4LWxzY3B1ID0gIiR7YmluZGlyfS9sc2NwdSIKKworRklMRVNfdXRpbC1saW51eC1mc2NrID0gIiR7YmFzZV9zYmluZGlyfS9mc2NrKiIKK0ZJTEVTX3V0aWwtbGludXgtbWtmcyA9ICIke3NiaW5kaXJ9L21rZnMiCisKK0ZJTEVTX3V0aWwtbGludXgtZnNjay5jcmFtZnMgPSAiJHtzYmluZGlyfS9mc2NrLmNyYW1mcyIKK0ZJTEVTX3V0aWwtbGludXgtbWtmcy5jcmFtZnMgPSAiJHtzYmluZGlyfS9ta2ZzLmNyYW1mcyIKKworRklMRVNfdXRpbC1saW51eC1zdWxvZ2luID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luKiIKKworIyBVdGlsLWxpbnV4JyBibGtpZCByZXBsYWNlcyB0aGUgZTJmc3Byb2dzIG9uZQorRklMRVNfdXRpbC1saW51eC1ibGtpZCA9ICIke2Jhc2Vfc2JpbmRpcn0vYmxraWQqIgorUkNPTkZMSUNUU191dGlsLWxpbnV4LWJsa2lkID0gImUyZnNwcm9ncy1ibGtpZCIKK1JSRVBMQUNFU191dGlsLWxpbnV4LWJsa2lkID0gImUyZnNwcm9ncy1ibGtpZCIKKworIyByZXNldCBjYWxscyAndHB1dCcKK1JERVBFTkRTX3V0aWwtbGludXgtcmVzZXQgKz0gIm5jdXJzZXMiCisKK1JERVBFTkRTXyR7UE59ID0gInV0aWwtbGludXgtdW1vdW50IHV0aWwtbGludXgtc3dhcG9ub2ZmIHV0aWwtbGludXgtbG9zZXR1cCB1dGlsLWxpbnV4LXN1bG9naW4iCitSUkVDT01NRU5EU18ke1BOfSA9ICJ1dGlsLWxpbnV4LWZkaXNrIHV0aWwtbGludXgtY2ZkaXNrIHV0aWwtbGludXgtc2ZkaXNrIHV0aWwtbGludXgtbW91bnQgdXRpbC1saW51eC1yZWFkcHJvZmlsZSB1dGlsLWxpbnV4LW1rZnMgIgorCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitSUFJPVklERVNfJHtQTn0tZGV2ID0gInV0aWwtbGludXgtbGliYmxraWQtZGV2IHV0aWwtbGludXgtbGlibW91bnQtZGV2IHV0aWwtbGludXgtbGlidXVpZC1kZXYiCisKKyNTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXV1aWRkICR7UE59LWZzdHJpbSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS11dWlkZCA9ICJ1dWlkZC5zb2NrZXQgdXVpZGQuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tdXVpZGQgPSAiZGlzYWJsZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1mc3RyaW0gPSAiZnN0cmltLnRpbWVyIGZzdHJpbS5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS1mc3RyaW0gPSAiZGlzYWJsZSIKKworZG9fY29tcGlsZSAoKSB7CisJc2V0IC1lCisJb2VfcnVubWFrZSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENQVT0gQ1BVT1BUPSAnT1BUPSR7Q0ZMQUdTfScgCit9CisKK2RvX2luc3RhbGwgKCkgeworCSMgd2l0aCBjY2FjaGUgdGhlIHRpbWVzdGFtcHMgb24gY29tcGlsZWQgZmlsZXMgbWF5CisJIyBlbmQgdXAgZWFybGllciB0aGFuIG9uIHRoZWlyIGlucHV0cywgdGhpcyBhbGxvd3MKKwkjIGZvciB0aGUgcmVzdWx0YW50IGNvbXBpbGF0aW9uIGluIHRoZSBpbnN0YWxsIHN0ZXAuCisJb2VfcnVubWFrZSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENQVT0gQ1BVT1BUPSBcCisJCSdPUFQ9JHtDRkxBR1N9JyAnQ0M9JHtDQ30nICdMRD0ke0xEfScgXAorCQknTERGTEFHUz0ke0xERkxBR1N9JyAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKworICAgICAgICBzYmlucHJvZ3M9ImFnZXR0eSBjdHJsYWx0ZGVsIGNmZGlzayB2aXB3IHZpZ3IiCisgICAgICAgIHNiaW5wcm9nc19hPSJwaXZvdF9yb290IGh3Y2xvY2sgbWtzd2FwIG1rZnMubWluaXggZnNjay5taW5peCBsb3NldHVwIHN3YXBvbiBzd2Fwb2ZmIGZkaXNrIGZzY2sgYmxraWQgYmxvY2tkZXYgZnN0cmltIHN1bG9naW4gc3dpdGNoX3Jvb3QiCisgICAgICAgIGJpbnByb2dzX2E9ImRtZXNnIGdldG9wdCBraWxsIG1vcmUgdW1vdW50IG1vdW50IGxvZ2luIHJlc2V0IHN1IgorCisgICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgCW1rZGlyIC1wICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiAkc2JpbnByb2dzICRzYmlucHJvZ3NfYTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgLWYgIiR7RH0ke3NiaW5kaXJ9LyRwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12ICIke0R9JHtzYmluZGlyfS8kcCIgIiR7RH0ke2Jhc2Vfc2JpbmRpcn0vJHAiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorICAgICAgICAJbWtkaXIgLXAgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gJGJpbnByb2dzX2E7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1mICIke0R9JHtiaW5kaXJ9LyRwIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG12ICIke0R9JHtiaW5kaXJ9LyRwIiAiJHtEfSR7YmFzZV9iaW5kaXJ9LyRwIgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvCisJZWNobyAnTU9VTlRBTEw9Ii10IG5vbmZzLG5vc21iZnMsbm9uY3BmcyInID4gJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9tb3VudGFsbAorCisJcm0gLWYgJHtEfSR7YmluZGlyfS9jaGtkdXBleGUKK30KKworIyByZXNldCBhbmQgbm9sb2dpbiBjYXVzZXMgYSBjb25mbGljdCB3aXRoIG5jdXJzZXMtbmF0aXZlIGFuZCBzaGFkb3ctbmF0aXZlCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXJtIC1mICR7RH0ke2Jhc2VfYmluZGlyfS9yZXNldAorCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbm9sb2dpbgorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ICA9ICJkbWVzZyBraWxsIG1vcmUgbWtzd2FwIGJsb2NrZGV2IHBpdm90X3Jvb3Qgc3dpdGNoX3Jvb3QiCitBTFRFUk5BVElWRV8ke1BOfSArPSAibWtmcy5taW5peCBoZXhkdW1wIGxhc3QgbGFzdGIgbG9nZ2VyIG1lc2cgcmVuaWNlIHdhbGwiCitBTFRFUk5BVElWRV8ke1BOfSArPSAic2V0c2lkIGNocnQgZmxvY2sgdXRtcGR1bXAgZWplY3QiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkbWVzZ10gPSAiJHtiYXNlX2JpbmRpcn0vZG1lc2ciCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbF0gPSAiJHtiYXNlX2JpbmRpcn0va2lsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3JlXSA9ICIke2Jhc2VfYmluZGlyfS9tb3JlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21rc3dhcF0gPSAiJHtiYXNlX3NiaW5kaXJ9L21rc3dhcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibG9ja2Rldl0gPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsb2NrZGV2IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Bpdm90X3Jvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9waXZvdF9yb290IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3aXRjaF9yb290XSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dpdGNoX3Jvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWtmcy5taW5peF0gPSAiJHtiYXNlX3NiaW5kaXJ9L21rZnMubWluaXgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWplY3RdID0gIiR7YmluZGlyfS9lamVjdCIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIm1vdW50cG9pbnQuMSBsYXN0LjEgbGFzdGIuMSBtZXNnLjEgd2FsbC4xIG5vbG9naW4uOCBzdWxvZ2luLjggdXRtcGR1bXAuMSByZXNldC4xIGtpbGwuMSBsaWJibGtpZC4zIGJsa2lkLjggZmluZGZzLjggZnNjay44IHV1aWQuMyIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3QuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGFzdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xhc3RiLjFdID0gIiR7bWFuZGlyfS9tYW4xL2xhc3RiLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWVzZy4xXSA9ICIke21hbmRpcn0vbWFuMS9tZXNnLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW91bnRwb2ludC4xXSA9ICIke21hbmRpcn0vbWFuMS9tb3VudHBvaW50LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbm9sb2dpbi44XSA9ICIke21hbmRpcn0vbWFuOC9ub2xvZ2luLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVzZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvcmVzZXQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luLjhdID0gIiR7bWFuZGlyfS9tYW44L3N1bG9naW4uOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1dG1wZHVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS91dG1wZHVtcC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3dhbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEvd2FsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2xpYmJsa2lkLjNdID0gIiR7bWFuZGlyfS9tYW4zL2xpYmJsa2lkLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmxraWQuOF0gPSAiJHttYW5kaXJ9L21hbjgvYmxraWQuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmaW5kZnMuOF0gPSAiJHttYW5kaXJ9L21hbjgvZmluZGZzLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnNjay44XSA9ICIke21hbmRpcn0vbWFuOC9mc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXVpZC4zXSA9ICIke21hbmRpcn0vbWFuMy91dWlkLjMiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtaHdjbG9jayA9ICJod2Nsb2NrIgorIyBUaGVyZSBzZWVtcyB0byBiZSBwcm9ibGVtLCBhdGxlYXN0IG9uIG5zbHUyLCB3aXRoIHRoZXNlLCB1bnRpbGwgdGhleSBhcmUKKyMgZml4ZWQgdGhlIGJ1c3lib3ggb25lcyBoYXZlIGhpZ2hlciBwcmlvcml0eQorQUxURVJOQVRJVkVfUFJJT1JJVFlbaHdjbG9ja10gPSAiMTAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaHdjbG9ja10gPSAiJHtiYXNlX3NiaW5kaXJ9L2h3Y2xvY2siCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtZmRpc2sgPSAiZmRpc2siCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmRpc2tdID0gIiR7YmFzZV9zYmluZGlyfS9mZGlzayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1hZ2V0dHkgPSAiZ2V0dHkiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9nZXR0eSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2FnZXR0eSIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1tb3VudCA9ICJtb3VudCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3VudF0gPSAiJHtiYXNlX2JpbmRpcn0vbW91bnQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtdW1vdW50ID0gInVtb3VudCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1bW91bnRdID0gIiR7YmFzZV9iaW5kaXJ9L3Vtb3VudCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1yZWFkcHJvZmlsZSA9ICJyZWFkcHJvZmlsZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZWFkcHJvZmlsZV0gPSAiJHtzYmluZGlyfS9yZWFkcHJvZmlsZSIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1sb3NldHVwID0gImxvc2V0dXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9zZXR1cF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2xvc2V0dXAiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtc3dhcG9ub2ZmID0gInN3YXBvZmYgc3dhcG9uIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3YXBvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9zd2Fwb2ZmIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N3YXBvbl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N3YXBvbiIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1mc2NrID0gImZzY2subWluaXggZnNjayIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLm1pbml4XSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjay5taW5peCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZnNjayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1ibGtpZCA9ICJibGtpZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2Jsa2lkIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXJlc2V0ID0gInJlc2V0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Jlc2V0XSA9ICIke2JpbmRpcn0vcmVzZXQiCitBTFRFUk5BVElWRV9UQVJHRVRbcmVzZXRdID0gIiR7YmFzZV9iaW5kaXJ9L3Jlc2V0IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWdldG9wdCA9ICJnZXRvcHQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0b3B0XSA9ICIke2Jhc2VfYmluZGlyfS9nZXRvcHQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtc3Vsb2dpbiA9ICJzdWxvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW5dID0gIiR7YmFzZV9zYmluZGlyfS9zdWxvZ2luIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgIGlmICctLWVuYWJsZS1zdScgaW4gZC5nZXRWYXIoJ0VYVFJBX09FQ09ORicsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGFsdF9uYW1lID0gInN1IgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBhbHRfbmFtZSkpCisgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpLCAnICcgKyBhbHRfbmFtZSkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgJyR7YmFzZV9saWJkaXJ9JywgJ15saWIoLiopXC5zb1wuLiokJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0ndXRpbC1saW51eC1saWIlcycsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J3V0aWwtbGludXggbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSwgYWxsb3dfbGlua3M9VHJ1ZSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9jb25maWd1cmUtc2JpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWIxZmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3V0aWwtbGludXg6IHRha2UgJHtzYmluZGlyfSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpZiBpdCBpcyBzZXQgdGhlcmUKK2ZpeCB0aGUgdGVzdCwgdGhlIFsgXSBzeW50YXggd2FzIGdldHRpbmcgZWF0ZW4gYnkgYXV0b2NvbmYKKworU2lnbmVkLW9mZi1ieTogUGhpbCBCbHVuZGVsbCA8cGJAcGJjbC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV0aWwtbGludXgtMi4yMi4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCitAQCAtNzMsNyArNzMsMTAgQEAgQUNfU1VCU1QoW2xvY2Fsc3RhdGVkaXJdKQorIHVzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgQUNfU1VCU1QoW3VzcmJpbl9leGVjZGlyXSkKKyAKKy11c3JzYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisraWYgdGVzdCAteiAiJHVzcnNiaW5fZXhlY2RpciIgOworK3RoZW4KKysgICB1c3JzYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCisrZmkKKyBBQ19TVUJTVChbdXNyc2Jpbl9leGVjZGlyXSkKKyAKKyBjYXNlICRsaWJkaXIgaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjI3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNzc0ZjU1ZjlkZDIyYzAxZTQwNDFhMTgzZDhkZmYxNDgxMWYyOTExNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCA0IEFwciAyMDE0IDE3OjMzOjA0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5cy11dGlscy9NYWtlbW9kdWxlLmFtOiBmaXggcGFyYWxsZWwgYnVpbGQgaXNzdWUKKworVGhlIHJ1bGUgU0VUQVJDSF9NQU5fTElOS1MgaXMgdXNlZCBmb3IgdGhlIGZpbGVzIHVuZGVyIHRoZSBzeXMtdXRpbHMKK2RpciwgZm9yIGV4YW1wbGU6CisKK2VjaG8gIi5zbyBtYW44L3NldGFyY2guOCIgPiBzeXMtdXRpbHMvbGludXgzMi44CisKK2J1dCBpdCBkZXBlbmRzIG9uIG5vdGhpbmcgc28gdGhhdCB0aGUgc3lzLXV0aWxzIGRpciBtYXkgbm90IGV4aXN0LCB3ZQorY2FuIGNyZWF0ZSB0aGUgc3lzLXV0aWxzIGRpciB0byBmaXggcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtIGIvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KK2luZGV4IDYyNjUyODIuLjYyZWFkMzcgMTAwNjQ0CistLS0gYS9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbQorKysrIGIvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0KK0BAIC0xMjQsNiArMTI0LDcgQEAgbWFuX01BTlMgKz0gJChTRVRBUkNIX01BTl9MSU5LUykKKyBDTEVBTkZJTEVTICs9ICQoU0VUQVJDSF9NQU5fTElOS1MpCisgCisgJChTRVRBUkNIX01BTl9MSU5LUyk6CisrCSQoTUtESVJfUCkgc3lzLXV0aWxzCisgCSQoQU1fVl9HRU4pZWNobyAiLnNvIG1hbjgvc2V0YXJjaC44IiA+ICRACisgCisgaW5zdGFsbC1leGVjLWhvb2stc2V0YXJjaDoKKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAzMWE3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitjb25maWd1cmUgc2hvdWxkIGluY2x1ZGUgZXJybm8uaCBpbnN0ZWFkIG9mIGFyZ3AuaCB3aGVuCitjaGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUKK3VjbGliYyBkZWZpbmVzIHRoaXMgdG8gYmUgY29uc3QgY2hhciogdW5saWtlIHV0aWwtbGludXgtbmcKK3doaWNoIGRlZmluZXMgdGhpcyB0byBiZSBjaGFyKiBzbyB0aGlzIGVycm9yIGdvZXMgdW5ub3RpY2VkCitvbiBnbGliYy9lZ2xpYmMgc3lzdGVtcy4KKworaGVyZSBpcyB0aGUgZXJyb3IgaXQgZml4ZXMKKworaW4gZmlsZSBpbmNsdWRlZCBmcm9tIG1vdW50UC5oOjE0OjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICBmcm9tIGNhY2hlLmM6Mjk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorL2hvbWUva3Jhai93b3JrL3NsdWdvcy9idWlsZC90bXAtc2x1Z29zLXVjbGliYy9zeXNyb290cy9uc2x1MmxlL3Vzci9pbmNsdWRlL2Vycm5vLmg6NTU6NDY6IGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ19fcHJvZ25hbWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy4uLy4uLy4uL2luY2x1ZGUvYy5oOjExODoxNDogbm90ZTogcHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJ19fcHJvZ25hbWUnIHdhcyBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK21ha2VbM106ICoqKiBbY2FjaGUubG9dIEVycm9yIDEgICAgICAgICAgCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjIyLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKK0BAIC0zNzIsNyArMzcyLDcgQEAgZXNhYworIAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSBpcyBkZWZpbmVkXSkKKyBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistCSNpbmNsdWRlIDxhcmdwLmg+CisrCSNpbmNsdWRlIDxlcnJuby5oPgorIF1dLCBbWworIAlwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSA9ICJ0ZXN0IjsKKyBdXSldLCBbCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiZjIyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGYyMjBkODA5YmUxYmFhNjU0NTAzYmY2ZmY1MmYzNjMwYjBkNzAxNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjYgTWFyIDIwMTQgMDE6MzA6MjkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3VuLmM6IHVzZSBxc29ydCgpIHRvIGluc3RlYWQgb2YgcXNvcnRfcigpCisKK3Fzb3J0X3IoKSB3YXMgYWRkZWQgdG8gZ2xpYmMgaW4gdmVyc2lvbiAyLjgsIHNvIHRoZXJlIGlzIG5vIHFzb3J0X3IoKSBvbgordGhlIGhvc3QgbGlrZSBDZW50T1MgNS54LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmZkaXNrL3NyYy9zdW4uYyB8IDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogdXRpbC1saW51eC0yLjI0LjIvbGliZmRpc2svc3JjL3N1bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjI0LjIub3JpZy9saWJmZGlzay9zcmMvc3VuLmMKKysrKyB1dGlsLWxpbnV4LTIuMjQuMi9saWJmZGlzay9zcmMvc3VuLmMKK0BAIC00MzEsMTAgKzQzMSw5IEBAIHN0YXRpYyBpbnQgc3VuX3ZlcmlmeV9kaXNrbGFiZWwoc3RydWN0IGYKKyAgICAgfQorICAgICB2ZXJpZnlfc3VuX3N0YXJ0cyA9IHN0YXJ0czsKKyAKKy0gICAgcXNvcnRfcihhcnJheSxBUlJBWV9TSVpFKGFycmF5KSxzaXplb2YoYXJyYXlbMF0pLAorLQkgIChpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosdm9pZCAqKSkgdmVyaWZ5X3N1bl9jbXAsCistCSAgdmVyaWZ5X3N1bl9zdGFydHMpOworLQorKyAgICBxc29ydChhcnJheSxBUlJBWV9TSVpFKGFycmF5KSxzaXplb2YoYXJyYXlbMF0pLAorKyAgICAgICAgIChpbnQgKCopKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICopKSB2ZXJpZnlfc3VuX2NtcCk7CisrIAorICAgICBpZiAoYXJyYXlbMF0gPT0gLTEpIHsKKyAJZmRpc2tfaW5mbyhjeHQsIF8oIk5vIHBhcnRpdGlvbnMgZGVmaW5lZC4iKSk7CisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDk2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorU3VwcG9ydCBvbGRlciBob3N0cyB3aXRoIGxhdGVzdCB1dGlsLWxpbnV4LW5hdGl2ZQorCitta29zdGVtcCBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBtYWNoaW5lcy4gIFNvIHdlIGRldGVjdCB0aGlzIGFuZAorcHJvdmlkZSBhIGRlZmluZSB0aGF0IHVzZXMgbWtzdGVtcCBpbnN0ZWFkLgorCitPX0NMT0VYRUMgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgbWFjaGluZXMuICBJdCBpcyBob3dldmVyIGRlZmluZWQKK2luIHRoZSAnYy5oJyBoZWFkZXIuICBGaXggdXAgdGhlIHVzZXJzIHRvIGluY2x1ZGUgJ2MuaCcuCisKK2ZkaXNrcy9mZGlza3N1bmxhYmVsLmMgd2FzIG1vZGlmaWVkIHRvIHVzZSBxc29ydF9yLCBob3dldmVyCit0aGlzIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIGhvc3RzLiAgUmV2ZXJ0OgorICBjb21taXQgYzY5YmJjYTljMWY2NjQ1MDk3YmQyMGZlM2EyMWY1YTk5YTJhMDY5OAorICBmZGlzazogKHN1bik6IHVzZSBhc2sgQVBJLCByZW1vdmUgZ2xvYmFsIHZhcmlhYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitQYXRjaGVzIHJldmVydCB1cHN0cmVhbSBjaGFuZ2VzIGluIG9yZGVyIHRvIHN1cHBvcnQgb2xkZXIKK21hY2hpbmVzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxICsKKyBpbmNsdWRlL2MuaCAgfCA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlYjM2ODBiLi45M2UwMTVmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMTgsNiArMzE4LDcgQEAgQUNfQ0hFQ0tfRlVOQ1MoWyBcCisgCWxsc2VlayBcCisgCWxzZWVrNjQgXAorIAltZW1wY3B5IFwKKysJbWtvc3RlbXAgXAorIAluYW5vc2xlZXAgXAorIAlvcGVuX21lbXN0cmVhbSBcCisgCXBlcnNvbmFsaXR5IFwKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2MuaCBiL2luY2x1ZGUvYy5oCitpbmRleCBlNDIzZThiLi5jZjMzYjk0IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9jLmgKKysrKyBiL2luY2x1ZGUvYy5oCitAQCAtMjMzLDYgKzIzMywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBkaXJmZChESVIgKmQpCisgI2VuZGlmCisgCisgLyoKKysgKiBta29zdGVtcCByZXBsYWNlbWVudAorKyAqLworKyNpZm5kZWYgSEFWRV9NS09TVEVNUAorKyNkZWZpbmUgbWtvc3RlbXAodGVtcGxhdGUsIGZsYWdzKSBta3N0ZW1wKHRlbXBsYXRlKQorKyNlbmRpZgorKworKy8qCisgICogTUFYSE9TVE5BTUVMRU4gcmVwbGFjZW1lbnQKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHNpemVfdCBnZXRfaG9zdG5hbWVfbWF4KHZvaWQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3M2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoZSBGSFMgaW5kaWNhdGVzIHRoYXQgL2V0YyBtdXN0IGJlIGNhcGFibGUgb2YgYmVpbmcgbW91bnRlZCBSL08uCisKK1RoZSBGSFMgYWxzbyBpbmRpY2F0ZXMgdGhhdCBsb2NrIGZpbGVzIGJlbG9uZyBpbiAvdmFyL2xvY2ssIGFuZCAvdmFyIG11c3QKK2JlIFIvVyBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyBib290LgorCitUaGlzIHBhdGNoIG1vdmVzIHRoZSBtdGFiIGxvY2sgZmlsZSBmcm9tIHRoZSBwb3RlbnRpYWxseSBSL08gL2V0YywgdG8gdGhlCitSL1cgL3Zhci9sb2NrIGFyZWEuICBUaGlzIGxvY2sgZmlsZSBpcyB1c2VkIHdoZW4gbW91bnRpbmcgZGlza3MgYW5kIG1ha2luZworb3RoZXIgbW91bnQgYWRqdXN0bWVudHMuICBUaGUgX1BBVEhfTU9VTlRFRF9UTVAgaXMgbm90IGFkanVzdGVkLCBhcyBmYWlsaW5nCit0byB3cml0ZSB0byB0aGlzIGZpbGUgZG9lcyBub3QgY2F1c2UgYW55IGZ1bmN0aW9uYWwgbGltaXRhdGlvbnMuCisKKyhOb3RlLCBpZiAvZXRjIGlzIFIvTywgdGhlbiAvZXRjL210YWIgc2hvdWxkIGJlIGEgc3ltbGluayB0byAvcHJvYy9tb3VudHMpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIHV0aWwtbGludXgtbmctMi4xNi9pbmNsdWRlL3BhdGhuYW1lcy5oLm9yaWcKKysrKyB1dGlsLWxpbnV4LW5nLTIuMTYvaW5jbHVkZS9wYXRobmFtZXMuaAorQEAgLTkwLDcgKzkwLDcgQEAKKyAjIGVuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBfUEFUSF9NT1VOVEVEX0xPQ0sJX1BBVEhfTU9VTlRFRCAifiIKKysjZGVmaW5lIF9QQVRIX01PVU5URURfTE9DSwkiL3Zhci9sb2NrL210YWJ+IgorICNkZWZpbmUgX1BBVEhfTU9VTlRFRF9UTVAJX1BBVEhfTU9VTlRFRCAiLnRtcCIKKyAKKyAjaWZuZGVmIF9QQVRIX0RFVgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzE3YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctcmVwbGFjZS1zaWdpbnRlcnJ1cHQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxvZ2luLXV0aWxzL2xvZ2luLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbG9naW4tdXRpbHMvbG9naW4uYyBiL2xvZ2luLXV0aWxzL2xvZ2luLmMKK2luZGV4IGViYjc2ZjUuLjM4Yzg4MWIgMTAwNjQ0CistLS0gYS9sb2dpbi11dGlscy9sb2dpbi5jCisrKysgYi9sb2dpbi11dGlscy9sb2dpbi5jCitAQCAtMTExMCw2ICsxMTEwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAljaGFyICpidWZmOworIAlpbnQgY2hpbGRBcmdjID0gMDsKKyAJaW50IHJldGNvZGU7CisrCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworIAorIAljaGFyICpwd2RidWYgPSBOVUxMOworIAlzdHJ1Y3QgcGFzc3dkICpwd2QgPSBOVUxMLCBfcHdkOworQEAgLTExMjMsNyArMTEyNCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJdGltZW91dCA9ICh1bnNpZ25lZCBpbnQpZ2V0bG9naW5kZWZzX251bSgiTE9HSU5fVElNRU9VVCIsIExPR0lOX1RJTUVPVVQpOworIAorIAlzaWduYWwoU0lHQUxSTSwgdGltZWRvdXQpOworLQlzaWdpbnRlcnJ1cHQoU0lHQUxSTSwgMSk7CS8qIHdlIGhhdmUgdG8gaW50ZXJydXB0IHN5c2NhbGxzIGxpa2UgaW9jdGwoKSAqLworKwkodm9pZCkgc2lnYWN0aW9uKFNJR0FMUk0sIE5VTEwsICZhY3QpOworKwlhY3Quc2FfZmxhZ3MgJj0gflNBX1JFU1RBUlQ7CisrCXNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0LCBOVUxMKTsKKyAJYWxhcm0odGltZW91dCk7CisgCXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKyAJc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2RjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXhfMi4yNi4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK01BSk9SX1ZFUlNJT04gPSAiMi4yNiIKK3JlcXVpcmUgdXRpbC1saW51eC5pbmMKKworIyBUbyBzdXBwb3J0IG9sZGVyIGhvc3RzLCB3ZSBuZWVkIHRvIHBhdGNoIGFuZC9vciByZXZlcnQKKyMgc29tZSB1cHN0cmVhbSBjaGFuZ2VzLiAgT25seSBkbyB0aGlzIGZvciBuYXRpdmUgcGFja2FnZXMuCitPTERIT1NUID0gIiIKK09MREhPU1RfY2xhc3MtbmF0aXZlID0gImZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uYXRpdmUtcXNvcnQucGF0Y2ggXAorCQkJIgorCitTUkNfVVJJICs9ICJmaWxlOi8vdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdWNsaWJjLV9fcHJvZ25hbWUtY29uZmxpY3QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgJHtPTERIT1NUfSBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiOWJkZjM2OGMzOTVmMWI3MDMyNWQwZWIyMmM3ZjQ4ZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUyOWJkYTE0MjUyOGE0OGEwYTk1M2MzOWZmNjMwOTM2NTFhNDgwOTA0MmUxNzkwZmJkNmFhODY2M2ZkOTY2NiIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gInNjYW5mX2N2X2FsbG9jX21vZGlmaWVyPW1zIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZmFsbG9jYXRlIFwKKwkJCSAgICAgLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICIke1NIQVJFRF9FWFRSQV9PRUNPTkZ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWZhbGxvY2F0ZSBcCisJCQkJLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9DT1BZSU5HLk1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTdkNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvQ09QWUlORy5NSVQKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCitEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK09USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUgorVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZCBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL21vdW50LWNvcHliaW5kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhZWFmODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9tb3VudC1jb3B5YmluZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMKKyMgUGVyZm9ybSBhIGJpbmQgbW91bnQsIGNvcHlpbmcgZXhpc3RpbmcgZmlsZXMgYXMgd2UgZG8gc28gdG8gZW5zdXJlIHRoZQorIyBvdmVybGFpZCBwYXRoIGhhcyB0aGUgbmVjZXNzYXJ5IGNvbnRlbnQuCisKK2lmIFsgJCMgLWx0IDIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJVc2FnZTogJDAgc3BlYyBtb3VudHBvaW50IFtPUFRJT05TXSIKKyAgICBleGl0IDEKK2ZpCisKK3NwZWM9JDEKK21vdW50cG9pbnQ9JDIKKworaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCisgICAgb3B0aW9ucz0kMworZWxzZQorICAgIG9wdGlvbnM9CitmaQorCitbIC1uICIkb3B0aW9ucyIgXSAmJiBvcHRpb25zPSIsJG9wdGlvbnMiCisKK21rZGlyIC1wICIke3NwZWMlLyp9IgoraWYgWyAtZCAiJG1vdW50cG9pbnQiIF07IHRoZW4KKyAgICBpZiBbICEgLWQgIiRzcGVjIiBdOyB0aGVuCisgICAgICAgIG1rZGlyICIkc3BlYyIKKyAgICAgICAgY3AgLXBQUiAiJG1vdW50cG9pbnQiLy4gIiRzcGVjLyIKKyAgICBmaQorZWxpZiBbIC1mICIkbW91bnRwb2ludCIgXTsgdGhlbgorICAgIGlmIFsgISAtZiAiJHNwZWMiIF07IHRoZW4KKyAgICAgICAgY3AgLXBQICIkbW91bnRwb2ludCIgIiRzcGVjIgorICAgIGZpCitmaQorCittb3VudCAtbyAiYmluZCRvcHRpb25zIiAiJHNwZWMiICIkbW91bnRwb2ludCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4gYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzM1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluCkBAIC0wLDAgKzEsMTkgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QmluZCBtb3VudCB2b2xhdGlsZSBAd2hlcmVACitEZWZhdWx0RGVwZW5kZW5jaWVzPWZhbHNlCitCZWZvcmU9bG9jYWwtZnMudGFyZ2V0CitSZXF1aXJlc01vdW50c0Zvcj1Ad2hhdHBhcmVudEAgQHdoZXJlcGFyZW50QAorQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPUB3aGF0cGFyZW50QAorQ29uZGl0aW9uUGF0aEV4aXN0cz1Ad2hlcmVACitDb25kaXRpb25QYXRoSXNSZWFkV3JpdGU9IUB3aGVyZUAKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK1JlbWFpbkFmdGVyRXhpdD1ZZXMKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworVGltZW91dFNlYz0wCitFeGVjU3RhcnQ9L3NiaW4vbW91bnQtY29weWJpbmQgQHdoYXRAIEB3aGVyZUAKK0V4ZWNTdG9wPS9iaW4vdW1vdW50IEB3aGVyZUAKKworW0luc3RhbGxdCitXYW50ZWRCeT1sb2NhbC1mcy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvdm9sYXRpbGUtYmluZHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlNzI3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL3ZvbGF0aWxlLWJpbmRzLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiVm9sYXRpbGUgYmluZCBtb3VudCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiBmb3IgcmVhZC1vbmx5LXJvb3RmcyIKK0RFU0NSSVBUSU9OID0gIiR7U1VNTUFSWX0iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTUlUO21kNT01NzUwZjNhYTRlYTJiMDBjMmJmMjFiMmIyYTdiNzE0ZCIKKworU1JDX1VSSSA9ICJcCisgICAgZmlsZTovL21vdW50LWNvcHliaW5kIFwKKyAgICBmaWxlOi8vQ09QWUlORy5NSVQgXAorICAgIGZpbGU6Ly92b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2ggc3lzdGVtZCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK1ZPTEFUSUxFX0JJTkRTID89ICJcCisgICAgL3Zhci92b2xhdGlsZS9saWIgL3Zhci9saWJcblwKKyIKK1ZPTEFUSUxFX0JJTkRTW3R5cGVdID0gImxpc3QiCitWT0xBVElMRV9CSU5EU1tzZXBhcmF0b3JdID0gIlxuIgorCitkZWYgdm9sYXRpbGVfc3lzdGVtZF9zZXJ2aWNlcyhkKToKKyAgICBzZXJ2aWNlcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgiVk9MQVRJTEVfQklORFMiLCBkKToKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aGF0LCB3aGVyZSA9IGxpbmUuc3BsaXQoTm9uZSwgMSkKKyAgICAgICAgc2VydmljZXMuYXBwZW5kKCIlcy5zZXJ2aWNlIiAlIHdoYXRbMTpdLnJlcGxhY2UoIi8iLCAiLSIpKQorICAgIHJldHVybiAiICIuam9pbihzZXJ2aWNlcykKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIiR7QHZvbGF0aWxlX3N5c3RlbWRfc2VydmljZXMoZCl9IgorCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8qLnNlcnZpY2UiCisKK2RvX2NvbXBpbGUgKCkgeworICAgIHdoaWxlIHJlYWQgc3BlYyBtb3VudHBvaW50OyBkbworICAgICAgICBpZiBbIC16ICIkc3BlYyIgXTsgdGhlbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZmkKKworICAgICAgICBzZXJ2aWNlZmlsZT0iJHtzcGVjIy99IgorICAgICAgICBzZXJ2aWNlZmlsZT0iJChlY2hvICIkc2VydmljZWZpbGUiIHwgdHIgLyAtKS5zZXJ2aWNlIgorICAgICAgICBzZWQgLWUgInMjQHdoYXRAIyRzcGVjI2c7IHMjQHdoZXJlQCMkbW91bnRwb2ludCNnIiBcCisgICAgICAgICAgICAtZSAicyNAd2hhdHBhcmVudEAjJHtzcGVjJS8qfSNnOyBzI0B3aGVyZXBhcmVudEAjJHttb3VudHBvaW50JS8qfSNnIiBcCisgICAgICAgICAgICB2b2xhdGlsZS1iaW5kcy5zZXJ2aWNlLmluID4kc2VydmljZWZpbGUKKyAgICBkb25lIDw8RU5ECiske0BkLmdldFZhcignVk9MQVRJTEVfQklORFMnLCBUcnVlKS5yZXBsYWNlKCJcXG4iLCAiXG4iKX0KK0VORAorCisgICAgaWYgWyAtZSB2YXItdm9sYXRpbGUtbGliLnNlcnZpY2UgXTsgdGhlbgorICAgICAgICAjIEFzIHRoZSBzZWVkIGlzIHN0b3JlZCB1bmRlciAvdmFyL2xpYiwgZW5zdXJlIHRoYXQgdGhpcyBzZXJ2aWNlIHJ1bnMKKyAgICAgICAgIyBhZnRlciB0aGUgdm9sYXRpbGUgL3Zhci9saWIgaXMgbW91bnRlZC4KKyAgICAgICAgc2VkIC1pIC1lICIvXkJlZm9yZT0vcy9cJC8gc3lzdGVtZC1yYW5kb20tc2VlZC5zZXJ2aWNlLyIgXAorICAgICAgICAgICAgICAgLWUgIi9eV2FudGVkQnk9L3MvXCQvIHN5c3RlbWQtcmFuZG9tLXNlZWQuc2VydmljZS8iIFwKKyAgICAgICAgICAgICAgIHZhci12b2xhdGlsZS1saWIuc2VydmljZQorICAgIGZpCit9Citkb19jb21waWxlW2RpcnNdID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBtb3VudC1jb3B5YmluZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGZvciBzZXJ2aWNlIGluICR7U1lTVEVNRF9TRVJWSUNFX3ZvbGF0aWxlLWJpbmRzfTsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICRzZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGRvbmUKK30KK2RvX2luc3RhbGxbZGlyc10gPSAiJHtXT1JLRElSfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDI2ODkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK3psaWIuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZWVhODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorQWRkICdwdGVzdCcgdGFyZ2V0IHRvIE1ha2VmaWxlLCB0byBydW4gdGVzdHMgd2l0aG91dCBjaGVja2luZyBkZXBlbmRlbmNpZXMuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4JMjAxMy0wNi0xMCAxMzo0ODoxNC4zMjE5NTkxNjIgKzAyMDAKKysrKyBiL01ha2VmaWxlLmluCTIwMTMtMDYtMTAgMTM6NDk6MzYuNjg2NDc2NDQ4ICswMjAwCitAQCAtODMsNiArODMsOSBAQAorIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKKyAKKyB0ZXN0c3RhdGljOiBzdGF0aWMKKysJQG1ha2UgcnVudGVzdHN0YXRpYworKworK3J1bnRlc3RzdGF0aWM6CisgCUBUTVBTVD10bXBzdF8kJDsgXAorIAlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlICQkVE1QU1QgOyB0aGVuIFwKKyAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgT0sgKioqJzsgXAorQEAgLTkyLDYgKzk1LDkgQEAKKyAJcm0gLWYgJCRUTVBTVAorIAorIHRlc3RzaGFyZWQ6IHNoYXJlZAorKwlAbWFrZSBydW50ZXN0c2hhcmVkCisrCisrcnVudGVzdHNoYXJlZDoKKyAJQExEX0xJQlJBUllfUEFUSD1gcHdkYDokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWV9QQVRIOyBcCisgCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCisgCURZTERfTElCUkFSWV9QQVRIPWBwd2RgOiQoRFlMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIOyBcCitAQCAtMTA1LDYgKzExMSw5IEBACisgCXJtIC1mICQkVE1QU0gKKyAKKyB0ZXN0NjQ6IGFsbDY0CisrCUBtYWtlIHJ1bnRlc3RhbGw2NAorKworK3J1bnRlc3RhbGw2NDoKKyAJQFRNUDY0PXRtcDY0XyQkOyBcCisgCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsgdGhlbiBcCisgCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBPSyAqKionOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9sZGZsYWdzLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvbGRmbGFncy10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitPYmV5IExERkxBR1MgZm9yIHRlc3RzCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHpsaWItMS4yLjgub3JpZy9NYWtlZmlsZS5pbgorKysrIHpsaWItMS4yLjgvTWFrZWZpbGUuaW4KK0BAIC0yNiw3ICsyNiw3IEBAIENGTEFHUz0tTworCisgU0ZMQUdTPS1PCisgTERGTEFHUz0KKy1URVNUX0xERkxBR1M9LUwuIGxpYnouYQorK1RFU1RfTERGTEFHUz0tTC4gJChMREZMQUdTKQorIExEU0hBUkVEPSQoQ0MpCisgQ1BQPSQoQ0MpIC1FCisKK0BAIC0xNzYsMjIgKzE3NiwyMiBAQCBwbGFjZWJvICQoU0hBUkVETElCVik6ICQoUElDX09CSlMpIGxpYnouCisJLUBybWRpciBvYmpzCisKKyBleGFtcGxlJChFWEUpOiBleGFtcGxlLm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBleGFtcGxlc2gkKEVYRSk6IGV4YW1wbGUubyAkKFNIQVJFRExJQlYpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlLm8gLUwuICQoU0hBUkVETElCVikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRFU1RfTERGTEFHUykgJChTSEFSRURMSUJWKQorCisgbWluaWd6aXBzaCQoRVhFKTogbWluaWd6aXAubyAkKFNIQVJFRExJQlYpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vIC1MLiAkKFNIQVJFRExJQlYpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKSAkKFNIQVJFRExJQlYpCisKKyBleGFtcGxlNjQkKEVYRSk6IGV4YW1wbGU2NC5vICQoU1RBVElDTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZTY0Lm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlNjQubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBtaW5pZ3ppcDY0JChFWEUpOiBtaW5pZ3ppcDY0Lm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcDY0Lm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcDY0Lm8gJChURVNUX0xERkxBR1MpICQoU1RBVElDTElCKQorCisgaW5zdGFsbC1saWJzOiAkKExJQlMpCisJLUBpZiBbICEgLWQgJChERVNURElSKSQoZXhlY19wcmVmaXgpICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKGV4ZWNfcHJlZml4KTsgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDNiNDgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKKworV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZSB0aGVuIGl0IGNyZWF0ZXMgaW52YWxpZCBjYWNoZSAKKyhpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbyBjYW5ub3QgYmUgZm91bmQgYWZ0ZXIgYnVpbGRpbmcgemxpYigtbmF0aXZlKSBhbmQgSSBoYXZlIHRvIGNhbGwgCit0b3VjaCAqL2xpYnN0ZGMrKy5zbyAmJiAvc2Jpbi9sZGNvbmZpZyB0byBmaXggaXQuCisKK1NvIHJlbW92ZSBsZGNvbmZpZyBjYWxsIGZyb20gbWFrZSBpbnN0YWxsLWxpYnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK2RpZmYgLXVOciB6bGliLTEuMi42Lm9yaWcvTWFrZWZpbGUuaW4gemxpYi0xLjIuNi9NYWtlZmlsZS5pbgorLS0tIHpsaWItMS4yLjYub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTAxLTI4IDIzOjQ4OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIHpsaWItMS4yLjYvTWFrZWZpbGUuaW4JMjAxMi0wMi0xMyAxNTozODoyMC41Nzc3MDA3MjMgKzAxMDAKK0BAIC0xOTksNyArMTk5LDYgQEAKKyAJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKyAJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisgCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKy0JICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAorIAlmaQorIAljcCB6bGliLjMgJChERVNURElSKSQobWFuM2RpcikKKyAJY2htb2QgNjQ0ICQoREVTVERJUikkKG1hbjNkaXIpL3psaWIuMwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0ZDlkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdHN0YXRpYyBydW50ZXN0c2hhcmVkIHwgc2VkIC1yIC1lICdzL14oXHMrXCorICguKz8pIHRlc3QgT0sgXCorKS9cMVxuUEFTUzogXDIvJyAtZSAncy9eKFxzK1wqKyAoLis/KSB0ZXN0IEZBSUxFRCBcKispL1wxXG5GQUlMOiBcMi8nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWJfMS4yLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MGFkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIlpsaWIgQ29tcHJlc3Npb24gTGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlpsaWIgaXMgYSBnZW5lcmFsLXB1cnBvc2UsIHBhdGVudC1mcmVlLCBsb3NzbGVzcyBkYXRhIGNvbXByZXNzaW9uIFwKK2xpYnJhcnkgd2hpY2ggaXMgdXNlZCBieSBtYW55IGRpZmZlcmVudCBwcm9ncmFtcy4iCitIT01FUEFHRSA9ICJodHRwOi8vemxpYi5uZXQvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vemxpYi5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjM7bWQ1PWZkZTYxMmRmMWU1OTMzYzQyOGI3Mzg0NGEwYzQ5NGZkIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuemxpYi5uZXQvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUubGRjb25maWcuY2FsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1ydW50ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjI4ZjEyMDVkOGRkMjAwMWYyNmZlYzFlOGMyY2ViZTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzMWRmMDQzMjM2ZGY4ZTlhNzY2N2I5ZTNiYjM3ZTFmY2IxMjIwYTBmMTYzYjZkZTI2MjY3NzRiOTU5MGQwNTciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitpbmhlcml0IHB0ZXN0CisKK2RvX2NvbmZpZ3VyZSAoKXsKKwkuL2NvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gLS1zaGFyZWQgLS1saWJkaXI9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJb2VfcnVubWFrZQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2Ugc3RhdGljIHNoYXJlZAorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlpbnN0YWxsICR7Qn0vTWFrZWZpbGUgICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9leGFtcGxlICAgICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L21pbmlnemlwICAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vZXhhbXBsZXNoICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9taW5pZ3ppcHNoICR7RH0ke1BURVNUX1BBVEh9Cit9CisKKyMgTW92ZSB6bGliIHNoYXJlZCBsaWJyYXJpZXMgZm9yIHRhcmdldCBidWlsZHMgdG8gJGJhc2VfbGliZGlyIHNvIHRoZSBsaWJyYXJ5CisjIGNhbiBiZSB1c2VkIGluIGVhcmx5IGJvb3QgYmVmb3JlICRwcmVmaXggaXMgbW91bnRlZC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwlpZiBbICR7YmFzZV9saWJkaXJ9ICE9ICR7bGliZGlyfSBdCisJdGhlbgorCQlta2RpciAtcCAke0R9LyR7YmFzZV9saWJkaXJ9CisJCW12ICR7RH0vJHtsaWJkaXJ9L2xpYnouc28uKiAke0R9LyR7YmFzZV9saWJkaXJ9CisJCWxpYm5hbWU9YHJlYWRsaW5rICR7RH0vJHtsaWJkaXJ9L2xpYnouc29gCisJCWxuIC1zZiAke0BvZS5wYXRoLnJlbGF0aXZlKCIke2xpYmRpcn0iLCAiJHtiYXNlX2xpYmRpcn0iKX0vJGxpYm5hbWUgJHtEfSR7bGliZGlyfS9saWJ6LnNvCisJZmkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjYzlmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSw3MCBAQAorcmVxdWlyZSBhcHQuaW5jCitpbmhlcml0IG5hdGl2ZQorCitERVBFTkRTICs9ICJkcGtnLW5hdGl2ZSBnZXR0ZXh0LW5hdGl2ZSBkYi1uYXRpdmUgY3VybC1uYXRpdmUgeHotbmF0aXZlIgorUEFDS0FHRVMgPSAiIgorVVNFX05MUyA9ICJ5ZXMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kYl9saW5raW5nX2hhY2sucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2ggXAorIgorCitweXRob24gZG9faW5zdGFsbCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19pbnN0YWxsX2Jhc2UnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9faW5zdGFsbF9jb25maWcnLCBkKQorfQorCitweXRob24gZG9faW5zdGFsbF9jb25maWcgKCkgeworICAgIGluZGlyID0gb3MucGF0aC5kaXJuYW1lKGQuZ2V0VmFyKCdGSUxFJywxKSkKKyAgICBpbmZpbGUgPSBmaWxlKG9lLnBhdGguam9pbihpbmRpciwgJ2ZpbGVzJywgJ2FwdC5jb25mJyksICdyJykKKyAgICBkYXRhID0gaW5maWxlLnJlYWQoKQorICAgIGluZmlsZS5jbG9zZSgpCisKKyAgICBkYXRhID0gZC5leHBhbmQoZGF0YSkKKworICAgIG91dGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcignRCcsIFRydWUpLCBkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCAnYXB0JykKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMob3V0ZGlyKQorCisgICAgb3V0cGF0aCA9IG9lLnBhdGguam9pbihvdXRkaXIsICdhcHQuY29uZi5zYW1wbGUnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwYXRoKToKKyAgICAgICAgb3V0ZmlsZSA9IGZpbGUob3V0cGF0aCwgJ3cnKQorICAgICAgICBvdXRmaWxlLndyaXRlKGRhdGEpCisgICAgICAgIG91dGZpbGUuY2xvc2UoKQorfQorCitkb19pbnN0YWxsX2Jhc2UgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNkcm9tICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZ2V0ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY29uZmlnICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2FjaGUgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1zb3J0cGtncyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1mdHBhcmNoaXZlICR7RH0ke2JpbmRpcn0vCisKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LXByaXZhdGUgJHtEfSR7bGliZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcGtnJEdMSUJDX1ZFUiRMSUJTVERDUFBfVkVSICR7RH0ke2xpYmRpcn0vCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1pbnN0JEdMSUJDX1ZFUiRMSUJTVERDUFBfVkVSICR7RH0ke2xpYmRpcn0vCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMKKwlpbnN0YWxsIC1tIDA3NTUgYmluL21ldGhvZHMvKiAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzLworCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L2Rlc2MuYXB0ICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9uYW1lcyAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvaW5zdGFsbCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3Qvc2V0dXAgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3VwZGF0ZSAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9hcHQuY29uZi5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvcHJlZmVyZW5jZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FwdC9saXN0cy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9hcHQvYXJjaGl2ZXMvcGFydGlhbAorCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2cvYXB0LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlXzEuMC4xMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjYwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGFwdC1uYXRpdmUuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbm8tY3VybC5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1M2FhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsNzggQEAKK2FwdC1tYW5wYWdlcz0iZG9jL2FwdC1jYWNoZS44IFwKKwkgICAgICBkb2MvYXB0LWNkcm9tLjggXAorCSAgICAgIGRvYy9hcHQtY29uZmlnLjggXAorCSAgICAgIGRvYy9hcHQtZ2V0LjggXAorCSAgICAgIGRvYy9hcHQuOCBcCisJICAgICAgZG9jL2FwdC5jb25mLjUgXAorCSAgICAgIGRvYy9hcHRfcHJlZmVyZW5jZXMuNSBcCisJICAgICAgZG9jL3NvdXJjZXMubGlzdC41IgorYXB0LXV0aWxzLW1hbnBhZ2VzPSJkb2MvYXB0LWV4dHJhY3R0ZW1wbGF0ZXMuMSBcCisJCSAgICBkb2MvYXB0LXNvcnRwa2dzLjEiCisKK2RlZiBnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgbWFucGFnZXMpOgorICAgIGltcG9ydCByZQorICAgIG1hbnBhZ2VzID0gcmUuc3ViKHInXGJkb2MvKFxTKykvKFxTKylcLlwxXC4oLilcYicsIHInJHttYW5kaXJ9L1wxL21hblwzL1wyLlwzJywgbWFucGFnZXMpCisgICAgbWFucGFnZXMgPSByZS5zdWIocidcYmRvYy8oXFMrKVwuKC4pXGInLCByJyR7bWFuZGlyfS9tYW5cMi9cMS5cMicsIG1hbnBhZ2VzKQorICAgIHJldHVybiBtYW5wYWdlcworCitkZWYgZ2V0X2NvbW1hbmRzX2FwdF9kb2MoZCwgYmIsIG1hbnBhZ2VzKToKKyAgICBzID0gbGlzdCgpCisgICAgX19kaXJfY2FjaGVfXyA9IGxpc3QoKQorICAgIGZvciBtIGluIG1hbnBhZ2VzLnNwbGl0KCk6CisgICAgICAgIGRlc3QgPSBnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgbSkKKyAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKGRlc3QpCisgICAgICAgIGlmIG5vdCBkaXIgaW4gX19kaXJfY2FjaGVfXzoKKyAgICAgICAgICAgIHMuYXBwZW5kKCJpbnN0YWxsIC1kICR7RH0vJXMiICUgZGlyKQorICAgICAgICAgICAgX19kaXJfY2FjaGVfXy5hcHBlbmQoZGlyKQorICAgICAgICBzLmFwcGVuZCgiaW5zdGFsbCAtbSAwNjQ0ICVzICR7RH0vJXMiICUgKG0sIGRlc3QpKQorICAgIHJldHVybiAiXG4iLmpvaW4ocykKKworUEFDS0FHRVMgKz0gIiR7UE59LXV0aWxzICR7UE59LXV0aWxzLWRvYyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hcHQtY2Ryb20gJHtiaW5kaXJ9L2FwdC1nZXQgXAorCSAgICAgICAke2JpbmRpcn0vYXB0LWNvbmZpZyAke2JpbmRpcn0vYXB0LWNhY2hlIFwKKwkgICAgICAgJHtsaWJkaXJ9L2FwdCAke2xpYmRpcn0vbGliYXB0Ki5zby4qIFwKKwkgICAgICAgJHtsb2NhbHN0YXRlZGlyfSAke3N5c2NvbmZkaXJ9IFwKKwkgICAgICAgJHtsaWJkaXJ9L2Rwa2ciCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vYXB0LXNvcnRwa2dzICR7YmluZGlyfS9hcHQtZXh0cmFjdHRlbXBsYXRlcyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke0BnZXRfZmlsZXNfYXB0X2RvYyhkLCBiYiwgZC5nZXRWYXIoJ2FwdC1tYW5wYWdlcycsIFRydWUpKX0gXAorCQkgICAke2RvY2Rpcn0vYXB0IgorRklMRVNfJHtQTn0tdXRpbHMtZG9jID0gIiR7QGdldF9maWxlc19hcHRfZG9jKGQsIGJiLCBkLmdldFZhcignYXB0LXV0aWxzLW1hbnBhZ2VzJywgVHJ1ZSkpfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vbGliYXB0Ki5zbyAke2luY2x1ZGVkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlzZXQgLXgKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1rZXkgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jZHJvbSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWdldCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNvbmZpZyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNhY2hlICR7RH0ke2JpbmRpcn0vCisKKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1zb3J0cGtncyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWV4dHJhY3R0ZW1wbGF0ZXMgJHtEfSR7YmluZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcGtnICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LWluc3QgJHtEfSR7bGliZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9tZXRob2RzLyogJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcy8KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0CisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9kZXNjLmFwdCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvbmFtZXMgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L2luc3RhbGwgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3NldHVwICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC91cGRhdGUgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvYXB0LmNvbmYuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L3NvdXJjZXMubGlzdC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvcHJlZmVyZW5jZXMuZAorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2FwdC9saXN0cy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9hcHQvYXJjaGl2ZXMvcGFydGlhbAorCWluc3RhbGwgLWQgJHtEfSR7ZG9jZGlyfS9hcHQvZXhhbXBsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kb2MvZXhhbXBsZXMvKiAke0R9JHtkb2NkaXJ9L2FwdC9leGFtcGxlcy8KKworCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vYXB0LXBrZy8KKwlpbnN0YWxsIC1tIDA2NDQgaW5jbHVkZS9hcHQtcGtnLyouaCAke0R9JHtpbmNsdWRlZGlyfS9hcHQtcGtnLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDhiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJBZHZhbmNlZCBmcm9udC1lbmQgZm9yIGRwa2ciCitMSUNFTlNFID0gIkdQTHYyLjArIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHA6Ly9zbmFwc2hvdC5kZWJpYW4ub3JnL2FyY2hpdmUvZGViaWFuLzIwMTUwODA1VDA5NDkyOFovcG9vbC9tYWluL2EvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdXNlLWhvc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tbmxzLWRwa2cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXRlc3QucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNjUwNWM0Mjk3YjMzOGFkYjIwODdjZTg3YmJjNGEyNzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2ZiMWRlOTU5ODM2M2M0MTY1OTFkNDllM2MyODU0NThlMDk1YjAzNWU2YzA2ZDViOTQ0YTU0ZTE1ZmM5YjU0MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuR1BMO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1hdXRvcG9pbnQsYXV0b2hlYWRlciIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLXJmICR7U30vYnVpbGRsaWIvY29uZmlnLnN1YgorICAgIHJtIC1yZiAke1N9L2J1aWxkbGliL2NvbmZpZy5ndWVzcworfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hcHQvbWV0aG9kcy8uZGVidWcvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzA2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKQEAgLTAsMCArMSwzNzggQEAKK0Zyb20gMTA2Nzk3ZjFjNjZmYTU3OGRhZDIxZmQ5MzgwYmY5ZDU3NjU3M2RmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjIgTWF5IDIwMTUgMDg6MDU6MTUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJhbHdheXMgcnVuICdkcGtnIC0tY29uZmlndXJlIC1hJyBhdCB0aGUgZW5kIG9mIG91cgorIGRwa2cgY2FsbGluZ3MiCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYTJhNzVmZjQ1MTZmNzYwOWY0YzU1YjQyMjcwYWJiOGQwODk0M2M2MCwgd2hpY2gKK2Fsd2F5cyBydW4gJ2Rwa2cgLS1jb25maWd1cmUgLWEnIGF0IHRoZSBlbmQgb2Ygb3VyIGRwa2cgY2FsbGluZ3MsCitidXQgaXQgZG9lcyBub3Qgd29yayBmb3IgY3Jvc3MtY29tcGlsZSwgc2luY2UgdGhlIHJvb3RmcyBkaXIgY2FuIG5vdAorYmUgcGFzc2VkIGludG8gZHBrZywgYW5kIGxlYWQgdG8gdGhlIGJlbG93IHNpbWlsYXIgZXJyb3I6CisgICAtLS0tLS0tCisgICB8bWtkaXI6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICcvdXNyL2xpYi9vcGtnJzogUGVybWlzc2lvbiBkZW5pZWQKKyAgIC0tLS0tLS0KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9kZWIvZHBrZ3BtLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArLS0KKyB0ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayAgICAgICAgICAgICAgICAgICAgICAgICB8IDI1ICsrKystLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZCAgICAgICAgICAgICAgfCA2NyArKysrKysrKystLS0tLS0tLS0tCisgdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgICAgICAgfCAxOCArKy0tLS0KKyB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yICAgICAgICB8ICAyICstCisgLi4uZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4gfCA3NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLi4uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMgICAgICAgfCAgNiArLQorIDcgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDc1NSB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1bgorCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjIGIvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCitpbmRleCBiMTg3ZWZiLi5mMjY5NzY0IDEwMDY0NAorLS0tIGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK0BAIC0xMDQ5LDEyICsxMDQ5LDYgQEAgdm9pZCBwa2dEUGtnUE06OkJ1aWxkUGFja2FnZXNQcm9ncmVzc01hcCgpCisgCSBQYWNrYWdlc1RvdGFsKys7CisgICAgICAgfQorICAgIH0KKy0gICAvKiBvbmUgZXh0cmE6IFdlIGRvbid0IHdhbnQgdGhlIHByb2dyZXNzIGJhciB0byByZWFjaCAxMDAlLCBlc3BlY2lhbGx5IG5vdAorLSAgICAgIGlmIHdlIGNhbGwgZHBrZyAtLWNvbmZpZ3VyZSAtLXBlbmRpbmcgYW5kIHByb2Nlc3MgYSBidW5jaCBvZiB0cmlnZ2VycworLSAgICAgIHdoaWxlIHNob3dpbmcgMTAwJS4gQWxzbywgc3BpbmRvd24gdGFrZXMgYSB3aGlsZSwgc28gbmV2ZXIgcmVhY2hpbmcgMTAwJQorLSAgICAgIGlzIHdheSBtb3JlIGNvcnJlY3QgdGhhbiByZWFjaGluZyAxMDAlIHdoaWxlIHN0aWxsIGRvaW5nIHN0dWZmIGV2ZW4gaWYKKy0gICAgICBkb2luZyBpdCB0aGlzIHdheSBpcyBzbGlnaHRseSBiZW5kaW5nIHRoZSBydWxlcyAqLworLSAgICsrUGFja2FnZXNUb3RhbDsKKyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp9fX0qLworICNpZiAoQVBUX1BLR19NQUpPUiA+PSA0ICYmIEFQVF9QS0dfTUlOT1IgPCAxMykKK0BAIC0xMjk0LDggKzEyODgsOSBAQCBib29sIHBrZ0RQa2dQTTo6R29Ob0FCSUJyZWFrKEFQVDo6UHJvZ3Jlc3M6OlBhY2thZ2VNYW5hZ2VyICpwcm9ncmVzcykKKyAKKyAgICAvLyBzdXBwb3J0IHN1YnByZXNzaW5nIG9mIHRyaWdnZXJzIHByb2Nlc3NpbmcgZm9yIHNwZWNpYWwKKyAgICAvLyBjYXNlcyBsaWtlIGQtaSB0aGF0IHJ1bnMgdGhlIHRyaWdnZXJzIGhhbmRsaW5nIG1hbnVhbGx5CisrICAgYm9vbCBjb25zdCBTbWFydENvbmYgPSAoX2NvbmZpZy0+RmluZCgiUGFja2FnZU1hbmFnZXI6OkNvbmZpZ3VyZSIsICJhbGwiKSAhPSAiYWxsIik7CisgICAgYm9vbCBjb25zdCBUcmlnZ2Vyc1BlbmRpbmcgPSBfY29uZmlnLT5GaW5kQigiRFBrZzo6VHJpZ2dlcnNQZW5kaW5nIiwgZmFsc2UpOworLSAgIGlmIChfY29uZmlnLT5GaW5kQigiRFBrZzo6Q29uZmlndXJlUGVuZGluZyIsIHRydWUpID09IHRydWUpCisrICAgaWYgKF9jb25maWctPkZpbmRCKCJEUGtnOjpDb25maWd1cmVQZW5kaW5nIiwgU21hcnRDb25mKSA9PSB0cnVlKQorICAgICAgIExpc3QucHVzaF9iYWNrKEl0ZW0oSXRlbTo6Q29uZmlndXJlUGVuZGluZywgUGtnSXRlcmF0b3IoKSkpOworIAorICAgIC8vIGZvciB0aGUgcHJvZ3Jlc3MKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yayBiL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCitpbmRleCA3MGFkMzgxLi4wMDY3MmFkIDEwMDY0NAorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrCitAQCAtMTE3OCwxMyArMTE3OCwxMCBAQCB0ZXN0bm9wYWNrYWdlKCkgeworIAlmaQorIH0KKyAKKy10ZXN0ZHBrZ3N0YXR1cygpIHsKKy0JbG9jYWwgU1RBVEU9IiQxIgorLQlsb2NhbCBOUj0iJDIiCistCXNoaWZ0IDIKKy0JbXNndGVzdCAiVGVzdCB0aGF0ICROUiBwYWNrYWdlKHMpIGFyZSBpbiBzdGF0ZSAkU1RBVEUgd2l0aCIgImRwa2cgLWwgJCoiCistCWxvY2FsIFBLR1M9IiQoZHBrZyAtbCAiJEAiIDI+L2Rldi9udWxsIHwgZ3JlcCAiXiR7U1RBVEV9IiB8IHdjIC1sKSIKKy0JaWYgWyAiJFBLR1MiICE9ICROUiBdOyB0aGVuCisrdGVzdGRwa2dpbnN0YWxsZWQoKSB7CisrCW1zZ3Rlc3QgIlRlc3QgZm9yIGNvcnJlY3RseSBpbnN0YWxsZWQgcGFja2FnZShzKSB3aXRoIiAiZHBrZyAtbCAkKiIKKysJbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4vZGV2L251bGwgfCBncmVwICdeaScgfCB3YyAtbCkiCisrCWlmIFsgIiRQS0dTIiAhPSAkIyBdOyB0aGVuCisgCQllY2hvID4mMiAkUEtHUworIAkJZHBrZyAtbCAiJEAiIHwgZ3JlcCAnXlthLXpdJyA+JjIKKyAJCW1zZ2ZhaWwKK0BAIC0xMTkzLDEyICsxMTkwLDE2IEBAIHRlc3RkcGtnc3RhdHVzKCkgeworIAlmaQorIH0KKyAKKy10ZXN0ZHBrZ2luc3RhbGxlZCgpIHsKKy0JdGVzdGRwa2dzdGF0dXMgJ2lpJyAiJCMiICIkQCIKKy19CistCisgdGVzdGRwa2dub3RpbnN0YWxsZWQoKSB7CistCXRlc3RkcGtnc3RhdHVzICdpaScgJzAnICIkQCIKKysJbXNndGVzdCAiVGVzdCBmb3IgY29ycmVjdGx5IG5vdC1pbnN0YWxsZWQgcGFja2FnZShzKSB3aXRoIiAiZHBrZyAtbCAkKiIKKysJbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4gL2Rldi9udWxsIHwgZ3JlcCAnXmknIHwgd2MgLWwpIgorKwlpZiBbICIkUEtHUyIgIT0gMCBdOyB0aGVuCisrCQllY2hvCisrCQlkcGtnIC1sICIkQCIgfCBncmVwICdeW2Etel0nID4mMgorKwkJbXNnZmFpbAorKwllbHNlCisrCQltc2dwYXNzCisrCWZpCisgfQorIAorIHRlc3RtYXJrZWRhdXRvKCkgeworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkCitpbmRleCA2OGNjMDQzLi5kNzJlN2U3IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAorKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZAorQEAgLTE5LDE0ICsxOSwxMyBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgdXBncmFkZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworQEAgLTM1LDE0ICszNCwxMyBAQCB0ZXN0ZXF1YWwgImRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBwbXN0YXR1czpkcGtnLWV4ZWM6MDpSdW5uaW5nIGRwa2cKKyBwbXN0YXR1czp0ZXN0aW5nOjA6SW5zdGFsbGluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NjYuNjY2NzpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nOjIwOlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjQwOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3Rpbmc6NjA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo4MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjEwMDpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgcmVpbnN0YWxsCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtNTEsMjQgKzQ5LDIyIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjUwOlJ1bm5pbmcgZHBrZworLXBtc3RhdHVzOnRlc3Rpbmc6NTA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6ODMuMzMzMzpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjgzLjMzMzM6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MjA6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NDA6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czpkcGtnLWV4ZWM6NjA6UnVubmluZyBkcGtnCisrcG1zdGF0dXM6dGVzdGluZzo2MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgIyBhbmQgcmVtb3ZlCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCisgdGVzdHN1Y2Nlc3MgYXB0Z2V0IHJlbW92ZSB0ZXN0aW5nIC15IC1vIEFQVDo6U3RhdHVzLUZkPTMKKyB0ZXN0ZXF1YWwgInBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpSZW1vdmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjI1OlByZXBhcmluZyBmb3IgcmVtb3ZhbCBvZiB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NzU6UmVtb3ZlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NzU6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MzMuMzMzMzpQcmVwYXJpbmcgZm9yIHJlbW92YWwgb2YgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOlJlbW92ZWQgdGVzdGluZyAoYW1kNjQpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorICMgaW5zdGFsbCBub24tbmF0aXZlIGFuZCBlbnN1cmUgd2UgZ2V0IHByb3BlciBwcm9ncmVzcyBpbmZvCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtNzksMTMgKzc1LDEyIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3RpbmcyOjA6SW5zdGFsbGluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo1MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo1MDpSdW5uaW5nIGRwa2cKKy1wbXN0YXR1czp0ZXN0aW5nMjo1MDpDb25maWd1cmluZyB0ZXN0aW5nMiAoaTM4NikKKy1wbXN0YXR1czp0ZXN0aW5nMjo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjgzLjMzMzM6SW5zdGFsbGVkIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo4My4zMzMzOlJ1bm5pbmcgZHBrZyIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKytwbXN0YXR1czp0ZXN0aW5nMjoyMDpQcmVwYXJpbmcgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6dGVzdGluZzI6NDA6VW5wYWNraW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjYwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6ZHBrZy1leGVjOjYwOlJ1bm5pbmcgZHBrZworK3Btc3RhdHVzOnRlc3RpbmcyOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorK3Btc3RhdHVzOnRlc3RpbmcyOjEwMDpJbnN0YWxsZWQgdGVzdGluZzIgKGkzODYpIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorIHJtIC1mIGFwdC1wcm9ncmVzcyoubG9nCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgoraW5kZXggYmFkYzk4NS4uOWQyMjc5NCAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMgorQEAgLTI3LDQxICsyNywzNyBAQCBNZXNzYWdlOiBJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogMTYuNjY2NworK1BlcmNlbnQ6IDIwCisgTWVzc2FnZTogUHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogMzMuMzMzMworK1BlcmNlbnQ6IDQwCisgTWVzc2FnZTogVW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogNTAKKytQZXJjZW50OiA2MAorIE1lc3NhZ2U6IFByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBSdW5uaW5nIGRwa2cKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDUwCisrUGVyY2VudDogNjAKKyBNZXNzYWdlOiBDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCisgUGFja2FnZTogdGVzdGluZzphbWQ2NAorLVBlcmNlbnQ6IDY2LjY2NjcKKytQZXJjZW50OiA4MAorIE1lc3NhZ2U6IENvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogODMuMzMzMworK1BlcmNlbnQ6IDEwMAorIE1lc3NhZ2U6IEluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy0KKy1TdGF0dXM6IHByb2dyZXNzCistUGVyY2VudDogODMuMzMzMworLU1lc3NhZ2U6IFJ1bm5pbmcgZHBrZworICIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvcgoraW5kZXggNjMyMzAwNy4uYTQ3MDk1YiAxMDA3NTUKKy0tLSBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IKK0BAIC0xOCw3ICsxOCw3IEBAIHNldHVwYXB0YXJjaGl2ZQorIGV4ZWMgMz4gYXB0LXByb2dyZXNzLmxvZworIHRlc3RmYWlsdXJlIGFwdGdldCBpbnN0YWxsIGZvbzEgZm9vMiAteSAtbyBBUFQ6OlN0YXR1cy1GZD0zCisgbXNndGVzdCAiRW5zdXJlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSIKKy1pZiBncmVwIC1xICJhcHRhcmNoaXZlL3Bvb2wvZm9vMl8wLjguMTVfYW1kNjQuZGViOjM2LjM2MzY6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgorK2lmIGdyZXAgLXEgImFwdGFyY2hpdmUvcG9vbC9mb28yXzAuOC4xNV9hbWQ2NC5kZWI6NDA6dHJ5aW5nIHRvIG92ZXJ3cml0ZSAnL3Vzci9iaW4vZmlsZS1jb25mbGljdCcsIHdoaWNoIGlzIGFsc28gaW4gcGFja2FnZSBmb28xIDAuOC4xNSIgYXB0LXByb2dyZXNzLmxvZzsgdGhlbgorIAltc2dwYXNzCisgZWxzZQorIAljYXQgYXB0LXByb2dyZXNzLmxvZworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMTQ2ZmE3Ni4uMDAwMDAwMAorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4KKysrKyAvZGV2L251bGwKK0BAIC0xLDc1ICswLDAgQEAKKy0jIS9iaW4vc2gKKy1zZXQgLWUKKy0KKy1URVNURElSPSQocmVhZGxpbmsgLWYgJChkaXJuYW1lICQwKSkKKy0uICRURVNURElSL2ZyYW1ld29yaworLQorLXNldHVwZW52aXJvbm1lbnQKKy1jb25maWdhcmNoaXRlY3R1cmUgJ2FtZDY0JworLQorLW1zZ3Rlc3QgJ0NoZWNrIGlmIGluc3RhbGxlZCBkcGtnIHN1cHBvcnRzJyAnbm9hd2FpdCB0cmlnZ2VyJworLWlmIGRwa2ctY2hlY2tidWlsZGRlcHMgLWQgJ2Rwa2cgKD49IDEuMTYuMSknIC9kZXYvbnVsbDsgdGhlbgorLQltc2dwYXNzCistZWxzZQorLQltc2dza2lwICdkcGtnIHZlcnNpb24gdG9vIG9sZCcKKy0JZXhpdCAwCistZmkKKy1jb25maWdkcGtnbm9vcGNocm9vdAorLQorLWJ1aWxkdHJpZ2dlcnBhY2thZ2VzKCkgeworLQlsb2NhbCBUWVBFPSIkMSIKKy0Jc2V0dXBzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnZ2VyYWJsZS0kVFlQRSIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJyAiRGVwZW5kczogdHJpZ2RlcGVuZHMtJFRZUEUiCistCUJVSUxERElSPSJpbmNvbWluZy90cmlnZ2VyYWJsZS0ke1RZUEV9LTEuMCIKKy0JY2F0ID4ke0JVSUxERElSfS9kZWJpYW4vcG9zdGluc3QgPDxFT0YKKy0jIS9iaW4vc2gKKy1pZiBbICJcJDEiID0gJ3RyaWdnZXJlZCcgXTsgdGhlbgorLQlscyAtbCAvcHJvYy9zZWxmL2ZkLworLWZpCistRU9GCistCWVjaG8gIiRUWVBFIC91c3Ivc2hhcmUvZG9jIiA+ICR7QlVJTERESVJ9L2RlYmlhbi90cmlnZ2VycworLQlidWlsZHBhY2thZ2UgIiRCVUlMRERJUiIgJ3Vuc3RhYmxlJyAnbWFpbicgJ25hdGl2ZScKKy0Jcm0gLXJmICIkQlVJTERESVIiCistCWJ1aWxkc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ2RlcGVuZHMtJFRZUEUiICdhbGwnICcxLjAnICd1bnN0YWJsZScKKy19CistCistI2J1aWxkdHJpZ2dlcnBhY2thZ2VzICdpbnRlcmVzdCcKKy1idWlsZHRyaWdnZXJwYWNrYWdlcyAnaW50ZXJlc3Qtbm9hd2FpdCcKKy1idWlsZHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdzdHVmZiIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJworLQorLXNldHVwYXB0YXJjaGl2ZQorLQorLXJ1bnRlc3RzKCkgeworLQlsb2NhbCBUWVBFPSIkMSIKKy0JbXNnbXNnICdXb3JraW5nIHdpdGggdHJpZ2dlciB0eXBlJyAiJFRZUEUiCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdnZXJhYmxlLSRUWVBFIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IGluc3RhbGwgdHJpZ2RlcGVuZHMtJFRZUEUgLXkgLS1yZWluc3RhbGwKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBpbnN0YWxsIHRyaWdzdHVmZiAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUgdHJpZ3N0dWZmCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBwdXJnZSB0cmlnc3R1ZmYgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnaW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdzdHVmZgorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgcHVyZ2UgdHJpZ2RlcGVuZHMtJFRZUEUgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZmFpbHVyZSBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZmFpbHVyZSBncmVwICcgcm9vdCByb290ICcgdGVybWluYWwub3V0cHV0CistCXRlc3RkcGtnbm90aW5zdGFsbGVkIHRyaWdnZXJhYmxlLSRUWVBFIHRyaWdkZXBlbmRzLSRUWVBFCistfQorLSNydW50ZXN0cyAnaW50ZXJlc3QnCistcnVudGVzdHMgJ2ludGVyZXN0LW5vYXdhaXQnCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCitpbmRleCA0MWMwNTcwLi5kMzk2MGQ3IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LW5vLWZkcy1sZWFrZWQtdG8tbWFpbnRhaW5lci1zY3JpcHRzCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKK0BAIC01OSw4ICs1OSw3IEBAIHN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlCisgY29uZmlndXJlICRQS0dOQU1FIDEuMCA8bm9uZT4KKyBzdGF0dXMgdW5wYWNrZWQgJFBLR05BTUUgMS4wCisgc3RhdHVzIGhhbGYtY29uZmlndXJlZCAkUEtHTkFNRSAxLjAKKy1zdGF0dXMgaW5zdGFsbGVkICRQS0dOQU1FIDEuMAorLXN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisrc3RhdHVzIGluc3RhbGxlZCAkUEtHTkFNRSAxLjAiIGN1dCAtZiAzLSAtZCcgJyByb290ZGlyL3Zhci9sb2cvZHBrZy5sb2cKKyB9CisgY2hlY2tpbnN0YWxsCisgCitAQCAtODUsOCArODQsNyBAQCBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCisgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorLXN0YXR1cyBub3QtaW5zdGFsbGVkICRQS0dOQU1FIDxub25lPgorLXN0YXJ0dXAgcGFja2FnZXMgY29uZmlndXJlIiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisrc3RhdHVzIG5vdC1pbnN0YWxsZWQgJFBLR05BTUUgPG5vbmU+IiBjdXQgLWYgMy0gLWQnICcgcm9vdGRpci92YXIvbG9nL2Rwa2cubG9nCisgfQorIGNoZWNrcHVyZ2UKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1maXgtdGhlLWdjYy12ZXJzaW9uLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWE1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK0Zyb20gMTVjNmVmNmE4MjdkMzY4MWFkMDZlODYyZDI3YWIzZGZiODRjYjY4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMTQ6MzA6MjggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IHRoZSBnY2MgdmVyc2lvbiBjaGVjaworCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworIkdDQyBkaWFnbm9zdGljIHB1c2giIGlzIGdjYyA0LjYgZmVhdHVyZSwgZ2NjIDQuNC43IG9uIGNlbnRvcyBkaWQgbm90IGtub3cgaXQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9jYWNoZXNldC5oICAgICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjIHwgMTIgKysrKysrLS0tLS0tCisgYXB0LXBrZy9zcmNyZWNvcmRzLmNjICAgICAgICB8ICA0ICsrLS0KKyBhcHQtcGtnL3NyY3JlY29yZHMuaCAgICAgICAgIHwgIDQgKystLQorIGFwdC1wa2cvdmVuZG9ybGlzdC5jYyAgICAgICAgfCAgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY2FjaGVzZXQuaCBiL2FwdC1wa2cvY2FjaGVzZXQuaAoraW5kZXggYjcyMjliYy4uOGNjMjkxNyAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvY2FjaGVzZXQuaAorKysrIGIvYXB0LXBrZy9jYWNoZXNldC5oCitAQCAtMTE5LDEyICsxMTksMTIgQEAgcHVibGljOgorIAkJaW5saW5lIHN0ZDo6c3RyaW5nIEZ1bGxOYW1lKGJvb2wgY29uc3QgUHJldHR5KSBjb25zdCB7IHJldHVybiBnZXRQa2coKS5GdWxsTmFtZShQcmV0dHkpOyB9CisgCQlpbmxpbmUgc3RkOjpzdHJpbmcgRnVsbE5hbWUoKSBjb25zdCB7IHJldHVybiBnZXRQa2coKS5GdWxsTmFtZSgpOyB9CisgCQlBUFRfREVQUkVDQVRFRCBpbmxpbmUgY29uc3QgY2hhciAqU2VjdGlvbigpIGNvbnN0IHsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgCSAgIHJldHVybiBnZXRQa2coKS5TZWN0aW9uKCk7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAkJfQorZGlmZiAtLWdpdCBhL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MgYi9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCitpbmRleCA0OWEzNDhkLi40YmM5ZGNmIDEwMDY0NAorLS0tIGEvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworKysrIGIvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYworQEAgLTEyNiwxMyArMTI2LDEzIEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlcyhzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPiAmRikKKyAgICBmb3IgKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPjo6Y29uc3RfaXRlcmF0b3IgZjIgPSBGMi5iZWdpbigpOyBmMiAhPSBGMi5lbmQoKTsgKytmMikKKyAgICB7CisgICAgICAgcGtnU3JjUmVjb3Jkczo6RmlsZTIgZjsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisgI2VuZGlmCisgICAgICAgZi5NRDVIYXNoID0gZjItPk1ENUhhc2g7CisgICAgICAgZi5TaXplID0gZjItPlNpemU7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorICAgICAgIGYuUGF0aCA9IGYyLT5QYXRoOworQEAgLTE5MCwxNCArMTkwLDE0IEBAIGJvb2wgZGViU3JjUmVjb3JkUGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZMaXN0KQorIAkgLy8gd2UgaGF2ZSBpdCBhbHJlYWR5LCBzdG9yZSB0aGUgbmV3IGhhc2ggYW5kIGJlIGRvbmUKKyAJIGlmIChmaWxlICE9IExpc3QuZW5kKCkpCisgCSB7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKKyAJICAgIGlmIChjaGVja3N1bUZpZWxkID09ICJGaWxlcyIpCisgCSAgICAgICBmaWxlLT5NRDVIYXNoID0gaGFzaDsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCSAgICAvLyBhbiBlcnJvciBoZXJlIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgdHdvIGRpZmZlcmVudCBoYXNoZXMgZm9yIHRoZSBzYW1lIGZpbGUKK0BAIC0yMTIsNyArMjEyLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSBGLkZpbGVTaXplID0gc3RydG91bGwoc2l6ZS5jX3N0cigpLCBOVUxMLCAxMCk7CisgCSBGLkhhc2hlcy5wdXNoX2JhY2soaGFzaFN0cmluZyk7CisgCistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBzZXQgZm9yIGNvbXBhdGliaWxpdHkgb25seSwgc28gd2FybiB1c2VycyBub3QgdXMKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKK0BAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSBGLlNpemUgPSBGLkZpbGVTaXplOworIAkgaWYgKGNoZWNrc3VtRmllbGQgPT0gIkZpbGVzIikKKyAJICAgIEYuTUQ1SGFzaCA9IGhhc2g7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYyBiL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworaW5kZXggMzE3NWVlNy4uMzQwZTc5NiAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5jYworKysrIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmNjCitAQCAtMTYwLDcgKzE2MCw3IEBAIGJvb2wgcGtnU3JjUmVjb3Jkczo6UGFyc2VyOjpGaWxlczIoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+ICZGMikvKnt7eyovCisgICAgZm9yIChzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlPjo6Y29uc3RfaXRlcmF0b3IgZiA9IEYuYmVnaW4oKTsgZiAhPSBGLmVuZCgpOyArK2YpCisgICAgeworICAgICAgIHBrZ1NyY1JlY29yZHM6OkZpbGUyIGYyOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKK0BAIC0xNjgsNyArMTY4LDcgQEAgYm9vbCBwa2dTcmNSZWNvcmRzOjpQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkYyKS8qe3t7Ki8KKyAgICAgICBmMi5TaXplID0gZi0+U2l6ZTsKKyAgICAgICBmMi5IYXNoZXMucHVzaF9iYWNrKEhhc2hTdHJpbmcoIk1ENVN1bSIsIGYtPk1ENUhhc2gpKTsKKyAgICAgICBmMi5GaWxlU2l6ZSA9IGYtPlNpemU7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorICAgICAgIGYyLlBhdGggPSBmLT5QYXRoOworZGlmZiAtLWdpdCBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5oIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmgKK2luZGV4IGRkZTIyYmQuLjkxZjgwNjEgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3NyY3JlY29yZHMuaAorKysrIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmgKK0BAIC0zMCw3ICszMCw3IEBAIGNsYXNzIHBrZ1NyY1JlY29yZHMKKyB7CisgICAgcHVibGljOgorIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJLy8gZW5zdXJlIHRoYXQgY29uLSAmIGRlLXN0cnVjdG9yIGRvbid0IHRyaWdnZXIgdGhpcyB3YXJuaW5nCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCitAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBwa2dTcmNSZWNvcmRzCisgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIEZpbGVTaXplOworICAgICAgIEhhc2hTdHJpbmdMaXN0IEhhc2hlczsKKyAgICB9OworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MgYi9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKK2luZGV4IGZiMzNmZjEuLmJhMWQzYzMgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3ZlbmRvcmxpc3QuY2MKKysrKyBiL2FwdC1wa2cvdmVuZG9ybGlzdC5jYworQEAgLTExLDcgKzExLDcgQEAKKyAKKyAjaW5jbHVkZSA8YXB0aTE4bi5oPgorIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKK0BAIC0xNjMsNiArMTYzLDYgQEAgY29uc3QgVmVuZG9yKiBwa2dWZW5kb3JMaXN0OjpGaW5kVmVuZG9yKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gR1BHVk91dHB1dCkJLyoKKyB9CisgCQkJCQkJCQkJLyp9fX0qLworIAorLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvMDAwMS1yZW1vdmUtV3N1Z2dlc3QtYXR0cmlidXRlLWZyb20tQ0ZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNDJmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSAyYmZmN2VlMDZhNGY5NmU3ZDMyNjk5MWQ2MWZiODZmOGFhNjUxZDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAwOTo0ODo0NSArMDgwMAorU3ViamVjdDogW1BBVENIXSByZW1vdmUgV3N1Z2dlc3QtYXR0cmlidXRlIGZyb20gQ1hYRkxBR1MKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1dzdWdnZXN0LWF0dHJpYnV0ZSBpcyBHQ0MgNC42IGZlYXR1cmUsIGNlbnRvczYgaXMgdXNpbmcgR0NDCis0LjQuNyB3aGljaCB1bmtub3duIHRoaXMgZmxhZywgc28gcmVtb3ZlIGl0IGZyb20gQ1hYRkxBR1MKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluIHwgMSAtCisgdGVzdC9saWJhcHQvbWFrZWZpbGUgICAgICAgIHwgMSAtCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluIGIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCitpbmRleCBiMGE4ZDlkLi45MWVkMDExIDEwMDY0NAorLS0tIGEvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCisrKysgYi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KK0BAIC0xMSw3ICsxMSw2IEBAIENQUEZMQUdTKz0gQENQUEZMQUdTQCBAREVGU0AgLURfUkVFTlRSQU5UIC1EX0ZPUlRJRllfU09VUkNFPTIKKyBDWFggPSBAQ1hYQAorIENYWEZMQUdTKz0gQENYWEZMQUdTQCAtV2FsbCAtV2V4dHJhCisgQ1hYRkxBR1MrPSAtV2Nhc3QtYWxpZ24gLVdsb2dpY2FsLW9wIC1XcmVkdW5kYW50LWRlY2xzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zCistQ1hYRkxBR1MrPSAtV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgIyBhIGJpdCB0b28gcGVkYW50aWMgdG8gYmUgcnVuIGJ5IGRlZmF1bHQKKyAjQ1hYRkxBR1MrPSAtV3BlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1Xbm8tdmxhIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCisgTlVNX1BST0NTID0gQE5VTV9QUk9DU0AKK2RpZmYgLS1naXQgYS90ZXN0L2xpYmFwdC9tYWtlZmlsZSBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCitpbmRleCA3ZjIzYWNlLi5lODA1ZjEzIDEwMDY0NAorLS0tIGEvdGVzdC9saWJhcHQvbWFrZWZpbGUKKysrKyBiL3Rlc3QvbGliYXB0L21ha2VmaWxlCitAQCAtMzksNyArMzksNiBAQCBDWFhGTEFHUyArPSAtcHRocmVhZAorICMgZGlzYWJsZSBzb21lIGZsYWdzIGZvciBndGVzdCBhZ2FpbgorIENYWEZMQUdTKz0gLVduby1taXNzaW5nLWRlY2xhcmF0aW9ucworIENYWEZMQUdTKz0gLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycworLUNYWEZMQUdTKz0gLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1wdXJlIC1Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QgLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybgorIAorICMgQWxsIEdvb2dsZSBUZXN0IGhlYWRlcnMuICBVc3VhbGx5IHlvdSBzaG91bGRuJ3QgY2hhbmdlIHRoaXMgZGVmaW5pdGlvbi4KKyBHVEVTVF9IRUFERVJTID0gL3Vzci9pbmNsdWRlL2d0ZXN0LyouaCBcCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyZjY0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgY29uZmlndXJlIGF0IGNvbXBpbGF0aW9uIHN0YWdlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGFwdC0wLjkuNy43L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS43Ljcub3JpZy9NYWtlZmlsZQorKysrIGFwdC0wLjkuNy43L01ha2VmaWxlCitAQCAtMzMsNyArMzMsNyBAQCB2ZXJ5Y2xlYW46IGNsZWFuCisgIyBUaGUgc3RhcnR1cCB0YXJnZXQgYnVpbGRzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJlIHNjcmlwdHMuIEl0IHNob3VsZAorICMgYmUgdXNlZCBhZnRlciBhIENWUyBjaGVja291dC4KKyBDT05WRVJURUQ9ZW52aXJvbm1lbnQubWFrIGluY2x1ZGUvY29uZmlnLmggaW5jbHVkZS9hcHRpMThuLmggYnVpbGQvZG9jL0RveHlmaWxlIG1ha2VmaWxlCistaW5jbHVkZSBidWlsZGxpYi9jb25maWd1cmUubWFrCisrI2luY2x1ZGUgYnVpbGRsaWIvY29uZmlndXJlLm1haworICQoQlVJTERESVIpL2luY2x1ZGUvY29uZmlnLmg6IGJ1aWxkbGliL2NvbmZpZy5oLmluCisgJChCVUlMRERJUikvaW5jbHVkZS9hcHRpMThuLmg6IGJ1aWxkbGliL2FwdGkxOG4uaC5pbgorICQoQlVJTERESVIpL2Vudmlyb25tZW50Lm1hazogYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2Nzk1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitbUEFUQ0hdIGRpc2FibGUgdGVzdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3Rlc3QgbmVlZHMgZ3Rlc3QgcGFja2FnZSwgc28gbm90IGJ1aWxkIHRoZSB0ZXN0IGRpcgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgfCA3ICsrKy0tLS0KKyBjb25maWd1cmUuYWMgfCA2IC0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDVmNWZiMjcuLjUwNzBlOTYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC05LDggKzksOCBAQCBlbmRpZgorIC5QSE9OWTogZGVmYXVsdAorIGRlZmF1bHQ6IHN0YXJ0dXAgYWxsCisgCistLlBIT05ZOiBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGFsbCBiaW5hcnkgcHJvZ3JhbSBkb2MgdGVzdCB1cGRhdGUtcG8KKy1hbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZGF0ZS1wbyBzdGFydHVwIGRpcnM6CisrLlBIT05ZOiBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGFsbCBiaW5hcnkgcHJvZ3JhbSBkb2MgdXBkYXRlLXBvCisrYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdXBkYXRlLXBvIHN0YXJ0dXAgZGlyczoKKyAJJChNQUtFKSAtQyB2ZW5kb3IgJEAKKyAJJChNQUtFKSAtQyBhcHQtcGtnICRACisgCSQoTUFLRSkgLUMgYXB0LWluc3QgJEAKK0BAIC0yMSw5ICsyMSw4IEBAIGFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHRlc3QgdXBkCisgCSQoTUFLRSkgLUMgZHNlbGVjdCAkQAorICMJJChNQUtFKSAtQyBkb2MgJEAKKyAJJChNQUtFKSAtQyBwbyAkQAorLQkkKE1BS0UpIC1DIHRlc3QgJEAKKyAKKy1hbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB0ZXN0IHVwZGF0ZS1wbzogc3RhcnR1cCBkaXJzCisrYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdXBkYXRlLXBvOiBzdGFydHVwIGRpcnMKKyAKKyBkaXJzOiBzdGFydHVwCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1NjYzYWFmLi5iMGY5NTY0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04OSwxMiArODksNiBAQCBBQ19DSEVDS19MSUIoY3VybCwgY3VybF9lYXN5X2luaXQsCisgICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIENVUkwgZHVlIGh0dHBzIHN1cHBvcnRdKSwKKyApCisgCistQUNfTEFOR19QVVNIKFtDKytdKQorLUFDX0NIRUNLX0hFQURFUihndGVzdC9ndGVzdC5oLCwKKy0gICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiBJIG5lZWQgZ3Rlc3QgdG8gYnVpbGQgdGVzdHNdKSwKKy0pCistQUNfTEFOR19QT1AoW0MrK10pCistCisgCisgQUNfU1VCU1QoQkRCTElCKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDFhZTZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZml4LWdjYy00LjYtbnVsbC1ub3QtZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvYXB0LXBrZy9jb250cmliL3dlYWtwdHIuaAorKysrIGIvYXB0LXBrZy9jb250cmliL3dlYWtwdHIuaAorQEAgLTIxLDYgKzIxLDcgQEAKKyAjaWZuZGVmIFdFQUtfUE9JTlRFUl9ICisgI2RlZmluZSBXRUFLX1BPSU5URVJfSAorIAorKyNpbmNsdWRlIDxjc3RkbGliPgorICNpbmNsdWRlIDxzZXQ+CisgLyoqCisgICogQ2xhc3MgZm9yIG9iamVjdHMgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIHdlYWsgcG9pbnRlcnMuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L21ha2VyYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTMxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9tYWtlcmFjZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitJIHdhcyBzZWVpbmcgdmFyaW91cyBpc3N1ZXMgd2l0aCBwYXJhbGxlbCBtYWtlLCBtYWlubHkgZHVlIHRvIHRvIHdoYXQgd2FzIGxpa2VseSAKK3BhcnRpYWxseSBpbnN0YWxsZWQgaGVhZGVycy4gSWYgeW91IGNoYW5nZSBpbnRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFuZAorIk5PSVNZPTEgbWFrZSAgLi4vb2JqL2FwdC1wa2cvc291cmNlbGlzdC5vcGljIiBpbiBhcHQtcGtnLCB5b3UnbGwgc2VlIGl0IAorZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGhlYWRlcnMgYmVpbmcgaW5zdGFsbGVkLiBUaGlzIHBhdGNoCitmaXhlcyB0aGF0IHNvIHRoaW5ncyBidWlsZCBjb3JyZWN0bHkuCisKK1JQIDIwMTIvMy8xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGFwdC0wLjkuOS40L2J1aWxkbGliL2xpYnJhcnkubWFrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuOS45LjQub3JpZy9idWlsZGxpYi9saWJyYXJ5Lm1hawkyMDEzLTA3LTMxIDE1OjQ1OjA3LjMyMDQ0MDU3NSArMDMwMAorKysrIGFwdC0wLjkuOS40L2J1aWxkbGliL2xpYnJhcnkubWFrCTIwMTMtMDctMzEgMTU6NDY6NDkuNDQwNDQwNTYxICswMzAwCitAQCAtNjEsNyArNjEsNyBAQAorIAorICMgQ29tcGlsYXRpb24gcnVsZXMKKyB2cGF0aCAlLmNjICQoU1VCRElSUykKKy0kKE9CSikvJS5vcGljOiAlLmNjICQoTElCUkFSWURFUEVORFMpCisrJChPQkopLyUub3BpYzogJS5jYyAkKExJQlJBUllERVBFTkRTKSAkKCQoTE9DQUwpLUhFQURFUlMpCisgCWVjaG8gQ29tcGlsaW5nICQ8IHRvICRACisgCSQoQ1hYKSAtYyAkKElOTElORURFUEZMQUcpICQoQ1BQRkxBR1MpICQoQ1hYRkxBR1MpICQoUElDRkxBR1MpIC1vICRAICQ8CisgCSQoRG9EZXApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vLW5scy1kcGtnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOTk2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9uby1ubHMtZHBrZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvYXB0LXBrZy9kZWIvZHBrZ3BtLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK0BAIC00Miw2ICs0MiwxMiBAQAorICNpbmNsdWRlIDxhcHRpMThuLmg+CisgCQkJCQkJCQkJLyp9fX0qLworIAorKyNpZmRlZiBVU0VfTkxTCisrI2RlZmluZSBfZHBrZyh4KSBkZ2V0dGV4dCgiZHBrZyIsIHgpCisrI2Vsc2UKKysjZGVmaW5lIF9kcGtnKHgpIHgKKysjZW5kaWYKKysKKyB1c2luZyBuYW1lc3BhY2Ugc3RkOworIAorIG5hbWVzcGFjZQorQEAgLTEyNzksNyArMTI4NSw3IEBAIHZvaWQgcGtnRFBrZ1BNOjpXcml0ZUFwcG9ydFJlcG9ydChjb25zdAorICAgIH0KKyAKKyAgICAvLyBjaGVjayBpZiBpdHMgbm90IGEgZm9sbG93IHVwIGVycm9yIAorLSAgIGNvbnN0IGNoYXIgKm5lZWRsZSA9IGRnZXR0ZXh0KCJkcGtnIiwgImRlcGVuZGVuY3kgcHJvYmxlbXMgLSBsZWF2aW5nIHVuY29uZmlndXJlZCIpOworKyAgIGNvbnN0IGNoYXIgKm5lZWRsZSA9IF9kcGtnKCJkZXBlbmRlbmN5IHByb2JsZW1zIC0gbGVhdmluZyB1bmNvbmZpZ3VyZWQiKTsKKyAgICBpZihzdHJzdHIoZXJyb3Jtc2csIG5lZWRsZSkgIT0gTlVMTCkgeworICAgICAgIHN0ZDo6Y2xvZyA8PCBfKCJObyBhcHBvcnQgcmVwb3J0IHdyaXR0ZW4gYmVjYXVzZSB0aGUgZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgaXRzIGEgZm9sbG93dXAgZXJyb3IgZnJvbSBhIHByZXZpb3VzIGZhaWx1cmUuIikgPDwgc3RkOjplbmRsOworICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjNjcyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYyBiL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MKK2luZGV4IDI0OTU0MmMuLjBhMTkxMWYgMTAwNjQ0CistLS0gYS9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCisrKysgYi9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjCitAQCAtOTUyLDEwICs5NTIsMTIgQEAgYm9vbCBwa2dQYWNrYWdlTWFuYWdlcjo6U21hcnRVblBhY2soUGtnSXRlcmF0b3IgUGtnLCBib29sIGNvbnN0IEltbWVkaWF0ZSwgaW50IGMKKyAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgaWYgKEltbWVkaWF0ZSA9PSB0cnVlKSB7CisrI2lmIDAKKyAgICAgICAvLyBQZXJmb3JtIGltbWVkYXRlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBhY2thZ2UuIAorICAgICAgICAgIGlmIChTbWFydENvbmZpZ3VyZShQa2csIERlcHRoICsgMSkgPT0gZmFsc2UpCisgICAgICAgICAgICAgX2Vycm9yLT5FcnJvcihfKCJDb3VsZCBub3QgcGVyZm9ybSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbiBvbiAnJXMnLiAiCisgICAgICAgICAgICAgICAgIlBsZWFzZSBzZWUgbWFuIDUgYXB0LmNvbmYgdW5kZXIgQVBUOjpJbW1lZGlhdGUtQ29uZmlndXJlIGZvciBkZXRhaWxzLiAoJWQpIiksUGtnLkZ1bGxOYW1lKCkuY19zdHIoKSwyKTsKKysjZW5kaWYKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7CitAQCAtMTAzOCw2ICsxMDQwLDcgQEAgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVyUmVzdWx0IHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlckluc3RhbGwoKQorICAgICAgIH0KKyAgICB9CisgCisrI2lmIDAKKyAgICAvLyBGaW5hbCBydW4gdGhyb3VnaCB0aGUgY29uZmlndXJlIHBoYXNlCisgICAgaWYgKENvbmZpZ3VyZUFsbCgpID09IGZhbHNlKQorICAgICAgIHJldHVybiBGYWlsZWQ7CitAQCAtMTA1Miw2ICsxMDU1LDcgQEAgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVyUmVzdWx0IHBrZ1BhY2thZ2VNYW5hZ2VyOjpPcmRlckluc3RhbGwoKQorIAkgcmV0dXJuIEZhaWxlZDsKKyAgICAgICB9CisgICAgfQorKyNlbmRpZgorIAkgCisgICAgcmV0dXJuIENvbXBsZXRlZDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OWU0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2RvYy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGRvY3VtZW50YXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogYXB0LTAuOS43LjcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL01ha2VmaWxlCisrKysgYXB0LTAuOS43LjcvTWFrZWZpbGUKK0BAIC0xNyw3ICsxNyw3IEBAIGFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmEKKyAJJChNQUtFKSAtQyBjbWRsaW5lICRACisgCSQoTUFLRSkgLUMgZnRwYXJjaGl2ZSAkQAorIAkkKE1BS0UpIC1DIGRzZWxlY3QgJEAKKy0JJChNQUtFKSAtQyBkb2MgJEAKKysjCSQoTUFLRSkgLUMgZG9jICRACisgCSQoTUFLRSkgLUMgcG8gJEAKKyAJJChNQUtFKSAtQyB0ZXN0ICRACisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3RydW5jYXRlLWZpbGVuYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWM0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC90cnVuY2F0ZS1maWxlbmFtZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitzdHJ1dGwuY2M6IHRoZSBmaWxlbmFtZSBjYW4ndCBiZSBsb25nZXIgdGhhbiAyNTUKKworVGhlIFVSSXRvRmlsZU5hbWUgdHJhbnNsYXRlcyB0aGUgcGF0aCBpbnRvIHRoZSBmaWxlbmFtZSwgYnV0IHRoZQorZmlsZW5hbWUgY2FuJ3QgYmUgbG9uZ2VyIHRoYW4gMjU1IGFjY29yZGluZyB0bworL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oLgorCitUcnVuY2F0ZSBpdCB3aGVuIGl0IGlzIGxvbmdlciB0aGFuIDI0MCAobGVhdmUgc29tZSBzcGFjZXMgZm9yCisiLlBhY2thZ2VzIiBhbmQgIi5fUmVsZWFzZSIgc3VmZml4KQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCistLS0gYS9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCisrKysgYi9hcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjCitAQCAtMzk5LDcgKzM5OSwxMiBAQCBzdHJpbmcgVVJJdG9GaWxlTmFtZShjb25zdCBzdHJpbmcgJlVSSSkKKyAgICAvLyAiXHgwMC1ceDIwe318XFxcXF5cXFtcXF08PlwiXHg3Ri1ceEZGIjsKKyAgICBzdHJpbmcgTmV3VVJJID0gUXVvdGVTdHJpbmcoVSwiXFx8e31bXTw+XCJefl89IUAjJCVeJioiKTsKKyAgICByZXBsYWNlKE5ld1VSSS5iZWdpbigpLE5ld1VSSS5lbmQoKSwnLycsJ18nKTsKKy0gICByZXR1cm4gTmV3VVJJOworKworKyAgIC8vIFRydW5jYXRlIGZyb20gdGhlIGhlYWQgd2hlbiBpdCBpcyBsb25nZXIgdGhhbiAyNDAKKysgICBpZihOZXdVUkkubGVuZ3RoKCkgPiAyNDApCisrICAgICAgIHJldHVybiBOZXdVUkkuc3Vic3RyKE5ld1VSSS5sZW5ndGgoKSAtIDI0MCwgTmV3VVJJLmxlbmd0aCgpIC0gMSk7CisrICAgZWxzZQorKyAgICAgICByZXR1cm4gTmV3VVJJOworIH0KKyAJCQkJCQkJCQkvKn19fSovCisgLy8gQmFzZTY0RW5jb2RlIC0gQmFzZTY0IEVuY29kaW5nIHJvdXRpbmUgZm9yIHNob3J0IHN0cmluZ3MJCS8qe3t7Ki8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC91c2UtaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBmY2ZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdXNlLWhvc3QucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhcHQtMC45LjcuNy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGFwdC0wLjkuNy43L2NvbmZpZ3VyZS5hYworQEAgLTExMiw3ICsxMTIsNyBAQCBkbmwgVGhpcyBpcyBvZnRlbiB0aGUgZHBrZyBhcmNoaXRlY3R1cmUKKyBkbmwgRmlyc3QgY2hlY2sgYWdhaW5zdCB0aGUgZnVsbCBjYW5vbmljYWwgY2Fub25jaWFsLXN5c3RlbS10eXBlIGluICR0YXJnZXQKKyBkbmwgYW5kIGlmIHRoYXQgZmFpbHMsIGp1c3QgbG9vayBmb3IgdGhlIGNwdQorIEFDX01TR19DSEVDS0lORyhkZWJpYW4gYXJjaGl0ZWN0dXJlKQorLWFyY2hzZXQ9ImBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hgIgorK2FyY2hzZXQ9ImBlY2hvICRob3N0X2FsaWFzfGN1dCAtZCctJyAtZjFgIgorIGlmIHRlc3QgIngkYXJjaHNldCIgPSAieCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogdXNlIC0taG9zdD0gb3Igb3V0cHV0IGZyb20gZHBrZy1hcmNoaXRlY3R1cmVdKQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzdlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdF8xLjAuMTAuMS5iYgpAQCAtMCwwICsxLDE4IEBACitERVBFTkRTID0gImN1cmwgZGIiCitSREVQRU5EU18ke1BOfSA9ICJkcGtnIGJhc2ggZGViaWFudXRpbHMiCityZXF1aXJlIGFwdC5pbmMKKworcmVxdWlyZSBhcHQtcGFja2FnZS5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gImx6bWEiCitQQUNLQUdFQ09ORklHW2x6bWFdID0gImFjX2N2X2xpYl9sem1hX2x6bWFfZWFzeV9lbmNvZGVyPXllcyxhY19jdl9saWJfbHptYV9sem1hX2Vhc3lfZW5jb2Rlcj1ubyx4eiIKKworRklMRVNfJHtQTn0gKz0gIiR7YmluZGlyfS9hcHQta2V5IgorYXB0LW1hbnBhZ2VzICs9ICJkb2MvYXB0LWtleS44IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjV3JpdGUgdGhlIGNvcnJlY3QgYXB0LWFyY2hpdGVjdHVyZSB0byBhcHQuY29uZgorICAgIEFQVF9DT05GPSR7RH0vZXRjL2FwdC9hcHQuY29uZgorICAgIGVjaG8gJ0FQVDo6QXJjaGl0ZWN0dXJlICIke0RQS0dfQVJDSH0iOycgPiAke0FQVF9DT05GfQorICAgIG9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcHJpdmF0ZSAke0R9JHtsaWJkaXJ9LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvYXB0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzNTEzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvYXB0LmNvbmYKQEAgLTAsMCArMSw0MiBAQAorRGlyICIke1NUQUdJTkdfRElSX05BVElWRX0vIgoreworICAgU3RhdGUgInZhci9saWIvYXB0LyIKKyAgIHsKKyAgICAgIExpc3RzICIjQVBUQ09ORiMvbGlzdHMvIjsKKyAgICAgIHN0YXR1cyAiI1JPT1RGUyMvdmFyL2xpYi9kcGtnL3N0YXR1cyI7CisgICB9OworICAgQ2FjaGUgInZhci9jYWNoZS9hcHQvIgorICAgeworICAgICAgQXJjaGl2ZXMgImFyY2hpdmVzLyI7CisgICAgICBwa2djYWNoZSAiIjsKKyAgICAgIHNyY3BrZ2NhY2hlICIiOworICAgfTsKKyAgIEJpbiAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyIKKyAgIHsKKyAgICAgIG1ldGhvZHMgIiR7U1RBR0lOR19MSUJESVJ9L2FwdC9tZXRob2RzLyI7CisgICAgICBnemlwICIvYmluL2d6aXAiOworICAgICAgZHBrZyAiZHBrZyI7CisgICAgICBkcGtnLXNvdXJjZSAiZHBrZy1zb3VyY2UiOworICAgICAgZHBrZy1idWlsZHBhY2thZ2UgImRwa2ctYnVpbGRwYWNrYWdlIjsKKyAgICAgIGFwdC1nZXQgImFwdC1nZXQiOworICAgICAgYXB0LWNhY2hlICJhcHQtY2FjaGUiOworICAgfTsKKyAgIEV0YyAiI0FQVENPTkYjIgorICAgeworICAgICAgUHJlZmVyZW5jZXMgInByZWZlcmVuY2VzIjsKKyAgIH07Cit9OworCitBUFQKK3sKKyAgSW5zdGFsbC1SZWNvbW1lbmRzICJ0cnVlIjsKKyAgSW1tZWRpYXRlLUNvbmZpZ3VyZSAiZmFsc2UiOworICBBcmNoaXRlY3R1cmUgImk1ODYiOworICBHZXQKKyAgeworICAgICBBc3N1bWUtWWVzICJ0cnVlIjsKKyAgICAgRm9yY2UtWWVzICJ0cnVlIgorICB9OworfTsKKworRFBrZzo6T3B0aW9ucyB7Ii0tcm9vdD0jUk9PVEZTIyI7Ii0tYWRtaW5kaXI9I1JPT1RGUyMvdmFyL2xpYi9kcGtnIjsiLS1mb3JjZS1hbGwiOyItLW5vLWRlYnNpZyJ9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2RiX2xpbmtpbmdfaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFkNGIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9kYl9saW5raW5nX2hhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogYXB0LTAuNy4zL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjcuMy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDEwOjM4OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGFwdC0wLjcuMy9jb25maWd1cmUuYWMJMjAwNy0wOC0yMSAxMzozOToyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC02Nyw4ICs2NywyMCBAQAorICAgICAgIFtBQ19ERUZJTkUoSEFWRV9CREIpCisgICAgICAgIEJEQkxJQj0iLWxkYiIKKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKy0gICAgICBbQkRCTElCPSIiCistICAgICAgIEFDX01TR19SRVNVTFQobm8pXQorKworKyAgICAgICBMSUJTPSIkTElCUyAtbHB0aHJlYWQiCisrICAgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIGxpbmsgYWdhaW5zdCBCZXJrZWxleURCIHdpdGggcHRocmVhZCkKKysgICAgICAgIEFDX0xJTktfSUZFTFNFKAorKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKysgICAgICAgICBbI2luY2x1ZGUgPGRiLmg+XSwKKysgICAgICAgICBbaW50IHIsIHMsIHQ7IGRiX3ZlcnNpb24oJnIsICZzLCAmdCk7XQorKyAgICAgICAgKV0sCisrICAgICAgICBbQUNfREVGSU5FKEhBVkVfQkRCKQorKyAgICAgICAgIEJEQkxJQj0iLWxkYiAtbHB0aHJlYWQiCisrICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKysgICAgICAgIFtCREJMSUI9IiIKKysgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKV0KKysgICAgICApXSAgICAgICAKKyAgICAgKV0KKyApCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTAzMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBhcHQtMC42LjQ2LjIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuNi40Ni4yLm9yaWcvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCTIwMDctMDMtMjkgMTE6Mzg6NTguMDAwMDAwMDAwICswMTAwCisrKysgYXB0LTAuNi40Ni4yL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgkyMDA3LTAzLTI5IDExOjM5OjEyLjAwMDAwMDAwMCArMDEwMAorQEAgLTYyLDcgKzYyLDcgQEAKKyAKKyAjIFNoYXJlZCBsaWJyYXJ5IHRoaW5ncworIEhPU1RfT1MgPSBAaG9zdF9vc0AKKy1pZm5lcSAoJCh3b3JkcyAkKGZpbHRlciBsaW51eC1nbnUgZ251JSAlZ251LCQoSE9TVF9PUykpKSwwKQorK2lmbmVxICgkKHdvcmRzICQoZmlsdGVyIGxpbnV4LWdudSBsaW51eC1nbnVlYWJpIGdudSUgJWdudSwkKEhPU1RfT1MpKSksMCkKKyAgICBTT05BTUVfTUFHSUM9LVdsLC1zb25hbWUgLVdsLAorICAgIExGTEFHU19TTz0KKyBlbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL25vLWN1cmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyMzhmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5pbiAgICAgfCAgICA2IC0tLS0tLQorIG1ldGhvZHMvbWFrZWZpbGUgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEzIGRlbGV0aW9ucygtKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg2LDEyICs4Niw2IEBAIEFDX0NIRUNLX0hFQURFUihkYi5oLAorIAorIExJQlM9IiRzYXZlTElCUyIKKyAKKy1BQ19DSEVDS19MSUIoY3VybCwgY3VybF9lYXN5X2luaXQsCistICAgICBbQUNfQ0hFQ0tfSEVBREVSKGN1cmwvY3VybC5oLAorLSAgICAgICAgY3VybF9vaz15ZXMsCistICAgICAgICBjdXJsX29rPW5vKV0sCistICAgICBBQ19NU0dfRVJST1IoW2ZhaWxlZDogSSBuZWVkIENVUkwgZHVlIGh0dHBzIHN1cHBvcnRdKSwKKy0pCisgCisgQUNfU1VCU1QoQkRCTElCKQorIAorLS0tIGEvbWV0aG9kcy9tYWtlZmlsZQorKysrIGIvbWV0aG9kcy9tYWtlZmlsZQorQEAgLTUxLDEzICs1MSw2IEBAIExJQl9NQUtFUyA9IGFwdC1wa2cvbWFrZWZpbGUKKyBTT1VSQ0UgPSBodHRwLmNjIGh0dHBfbWFpbi5jYyByZmMyNTUzZW11LmNjIGNvbm5lY3QuY2Mgc2VydmVyLmNjCisgaW5jbHVkZSAkKFBST0dSQU1fSCkKKyAKKy0jIFRoZSBodHRwcyBtZXRob2QKKy1QUk9HUkFNPWh0dHBzCistU0xJQlMgPSAtbGFwdC1wa2cgLWxjdXJsICQoSU5UTExJQlMpCistTElCX01BS0VTID0gYXB0LXBrZy9tYWtlZmlsZQorLVNPVVJDRSA9IGh0dHBzLmNjIHNlcnZlci5jYworLWluY2x1ZGUgJChQUk9HUkFNX0gpCistCisgIyBUaGUgZnRwIG1ldGhvZAorIFBST0dSQU09ZnRwCisgU0xJQlMgPSAtbGFwdC1wa2cgJChTT0NLRVRMSUJTKSAkKElOVExMSUJTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiNzdlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJBIEdOVSB0b29sIHRoYXQgcHJvY3VkZSBzaGVsbCBzY3JpcHRzIHRvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHNvZnR3YXJlIgorREVTQ1JJUFRJT04gPSAiQXV0b2NvbmYgaXMgYW4gZXh0ZW5zaWJsZSBwYWNrYWdlIG9mIE00IG1hY3JvcyB0aGF0IHByb2R1Y2Ugc2hlbGwgc2NyaXB0cyB0byBhdXRvbWF0aWNhbGx5IFwgCitjb25maWd1cmUgc29mdHdhcmUgc291cmNlIGNvZGUgcGFja2FnZXMuIEF1dG9jb25mIGNyZWF0ZXMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBmb3IgYSBwYWNrYWdlIGZyb20gYSB0ZW1wbGF0ZSBcCitmaWxlIHRoYXQgbGlzdHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZmVhdHVyZXMgdGhhdCB0aGUgcGFja2FnZSBjYW4gdXNlLCBpbiB0aGUgZm9ybSBvZiBNNCBtYWNybyBjYWxscy4iCitMSUNFTlNFID0gIkdQTHYzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTICs9ICJtNC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJtNC1uYXRpdmUgZ251LWNvbmZpZy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstbTQgbmF0aXZlc2RrLWdudS1jb25maWciCitSREVQRU5EU18ke1BOfSA9ICJtNCBnbnUtY29uZmlnIFwKKwkJICBwZXJsIFwKKwkJICBwZXJsLW1vZHVsZS1jYXJwIFwKKwkJICBwZXJsLW1vZHVsZS1jb25zdGFudCBcCisJCSAgcGVybC1tb2R1bGUtZXJybm8gXAorCQkgIHBlcmwtbW9kdWxlLWV4cG9ydGVyIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWJhc2VuYW1lIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWNvbXBhcmUgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtY29weSBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1nbG9iIFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLXBhdGggXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtc3RhdCBcCisJCSAgcGVybC1tb2R1bGUtZ2V0b3B0LWxvbmcgXAorCQkgIHBlcmwtbW9kdWxlLWlvLWZpbGUgXAorCQkgIHBlcmwtbW9kdWxlLXBvc2l4IFwKKwkJICBwZXJsLW1vZHVsZS1kYXRhLWR1bXBlciBcCisJCSAiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibTQtbmF0aXZlIGdudS1jb25maWctbmF0aXZlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b2NvbmYvYXV0b2NvbmYtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vcHJvZ3JhbV9wcmVmaXgucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0ke1VTUkJJTlBBVEh9L3BlcmwiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiZDNhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjM5OjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0MzozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC03Niw2ICs3Niw3IEBACisgICAtaSwgLS1pbnN0YWxsICAgICAgICAgICAgY29weSBtaXNzaW5nIGF1eGlsaWFyeSBmaWxlcworICAgICAgIC0tbm8tcmVjdXJzaXZlICAgICAgIGRvbid0IHJlYnVpbGQgc3ViLXBhY2thZ2VzCisgICAtcywgLS1zeW1saW5rICAgICAgICAgICAgd2l0aCAtaSwgaW5zdGFsbCBzeW1ib2xpYyBsaW5rcyBpbnN0ZWFkIG9mIGNvcGllcworKyAgLXgsIC0tZXhjbHVkZT1TVEVQUyAgICAgIHN0ZXBzIHdlIHNob3VsZCBub3QgcnVuCisgICAtbSwgLS1tYWtlICAgICAgICAgICAgICAgd2hlbiBhcHBsaWNhYmxlLCByZS1ydW4gLi9jb25maWd1cmUgJiYgbWFrZQorICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbc3ludGF4XQorIAorQEAgLTEzNiw2ICsxMzcsMTMgQEAKKyAjIFJlY3Vyc2UgaW50byBzdWJwYWNrYWdlcworIG15ICRyZWN1cnNpdmUgPSAxOworIAorKyMgU3RlcHMgdG8gZXhjbHVkZQorK215IEBleGNsdWRlOworK215IEBleDsKKysKKytteSAkdXNlc19nZXR0ZXh0OworK215ICRjb25maWd1cmVfYWM7CisrCisgIyMgLS0tLS0tLS0tLSAjIworICMjIFJvdXRpbmVzLiAgIyMKKyAjIyAtLS0tLS0tLS0tICMjCitAQCAtMTUzLDYgKzE2MSw3IEBACisgCSAgJ0J8cHJlcGVuZC1pbmNsdWRlPXMnCSA9PiBcQHByZXBlbmRfaW5jbHVkZSwKKyAJICAnaXxpbnN0YWxsJyAgICAgICAgICAgID0+IFwkaW5zdGFsbCwKKyAJICAnc3xzeW1saW5rJyAgICAgICAgICAgID0+IFwkc3ltbGluaywKKysgIAkgICd4fGV4Y2x1ZGU9cycgICAgICAgICAgPT4gXEBleGNsdWRlLAorIAkgICdtfG1ha2UnICAgICAgICAgICAgICAgPT4gXCRydW5fbWFrZSwKKyAJICAncmVjdXJzaXZlIScgICAgICAgICAgID0+IFwkcmVjdXJzaXZlKTsKKyAKK0BAIC0xNjIsNiArMTcxLDggQEAKKyAgIHBhcnNlX1dBUk5JTkdTOworICAgcGFyc2Vfd2FybmluZ3MgJy0td2FybmluZ3MnLCBAd2FybmluZzsKKyAKKysgIEBleGNsdWRlID0gbWFwIHsgc3BsaXQgLywvIH0gQGV4Y2x1ZGU7CisrCisgICAjIEV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY29uZmlndXJlLmFjLCB0cmltIHRvIGdldCB0aGUKKyAgICMgZGlyZWN0b3J5LCBhbmQgbG9vayBmb3IgY29uZmlndXJlLmFjIGFnYWluLiAgQmVjYXVzZSAoaSkgdGhlIGNvZGUKKyAgICMgaXMgc2ltcGxlciwgYW5kIChpaSkgd2UgYXJlIHN0aWxsIGFibGUgdG8gZGlhZ25vc2Ugc2ltdWx0YW5lb3VzCitAQCAtMjU1LDYgKzI2NiwxMSBAQAorIHsKKyAgIG15ICgkYWNsb2NhbCwgJGZsYWdzKSA9IEBfOworIAorKyAgQGV4ID0gZ3JlcCAoL15hY2xvY2FsJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ICE9IC0xKSB7CisrICAgIHJldHVybjsKKysgIH0KKysKKyAgICMgYWNsb2NhbCAxLjgrIGRvZXMgYWxsIHRoaXMgZm9yIGZyZWUuICBJdCBjYW4gYmUgcmVjb2duaXplZCBieSBpdHMKKyAgICMgLS1mb3JjZSBzdXBwb3J0LgorICAgaWYgKCRhY2xvY2FsX3N1cHBvcnRzX2ZvcmNlKQorQEAgLTM2OCw3ICszODQsMTAgQEAKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b3BvaW50JC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbV9oaW50ICgiYXV0b3BvaW50IGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIEdldHRleHQiLCAiJGF1dG9wb2ludCIpOworKyAgICAgIH0KKyAgICAgfQorIAorIAorQEAgLTUzMiwxNiArNTUxLDE3IEBACisgCXsKKyAJICAkbGlidG9vbGl6ZSAuPSAiIC0tbHRkbCI7CisgCX0KKy0gICAgICB4c3lzdGVtX2hpbnQgKCJsaWJ0b29saXplIGlzIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGFja2FnZSB1c2VzIExpYnRvb2wiLCAkbGlidG9vbGl6ZSk7CistICAgICAgJHJlcnVuX2FjbG9jYWwgPSAxOworKyAgICAgIEBleCA9IGdyZXAgKC9ebGlidG9vbGl6ZSQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW1faGludCAoImxpYnRvb2xpemUgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgTGlidG9vbCIsICRsaWJ0b29saXplKTsKKysgICAgICAgICRyZXJ1bl9hY2xvY2FsID0gMTsKKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IG5vdCBydW5uaW5nIGxpYnRvb2xpemU6IC0taW5zdGFsbCBub3QgZ2l2ZW4iOworICAgICB9CisgCistCistCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAgIyBSZXJ1bm5pbmcgYWNsb2NhbC4gICMKKyAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCitAQCAtNTcyLDcgKzU5MiwxMCBAQAorICAgIyBsYXR0ZXIgcnVucyB0aGUgZm9ybWVyLCBhbmQgKGlpKSBhdXRvY29uZiBpcyBzdHJpY3RlciB0aGFuCisgICAjIGF1dG9oZWFkZXIuICBTbyBhbGwgaW4gYWxsLCBhdXRvY29uZiBzaG91bGQgZ2l2ZSBiZXR0ZXIgZXJyb3IKKyAgICMgbWVzc2FnZXMuCistICB4c3lzdGVtICgkYXV0b2NvbmYpOworKyAgQGV4ID0gZ3JlcCAoL15hdXRvY29uZiQvLCBAZXhjbHVkZSk7CisrICBpZiAoJCNleCA9PSAtMSkgeworKyAgICB4c3lzdGVtICgiJGF1dG9jb25mIik7CisrICB9CisgCisgCisgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMKK0BAIC01OTMsNyArNjE2LDEwIEBACisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHhzeXN0ZW0gKCRhdXRvaGVhZGVyKTsKKysgICAgICBAZXggPSBncmVwICgvXmF1dG9oZWFkZXIkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtICgiJGF1dG9oZWFkZXIiKTsKKysgICAgICB9CisgICAgIH0KKyAKKyAKK0BAIC02MTAsNyArNjM2LDEwIEBACisgICAgICAgIyBXZSBzaG91bGQgYWx3YXlzIHJ1biBhdXRvbWFrZSwgYW5kIGxldCBpdCBkZWNpZGUgd2hldGhlciBpdCBzaGFsbAorICAgICAgICMgdXBkYXRlIHRoZSBmaWxlIG9yIG5vdC4gIEluIGZhY3QsIHRoZSBlZmZlY3Qgb2YgYCRmb3JjZScgaXMgYWxyZWFkeQorICAgICAgICMgaW5jbHVkZWQgaW4gYCRhdXRvbWFrZScgdmlhIGAtLW5vLWZvcmNlJy4KKy0gICAgICB4c3lzdGVtICgkYXV0b21ha2UpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b21ha2UkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtICgiJGF1dG9tYWtlIik7CisrICAgICAgfQorICAgICB9CisgCisgCitAQCAtNjM0LDcgKzY2MywxMCBAQAorIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKy0JICAgICAgeHN5c3RlbSAoIiRtYWtlIik7CisrICAgICAgICAgICAgICBAZXggPSBncmVwICgvXm1ha2UkLywgQGV4Y2x1ZGUpOworKyAgICAgICAgICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysJICAgICAgICB4c3lzdGVtICgiJG1ha2UiKTsKKysgICAgICAgICAgICAgIH0KKyAJICAgIH0KKyAJfQorICAgICB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmMThjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworSW5kZXg6IGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjYzLm9yaWcvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0Mzo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6NDY6MTYuMDAwMDAwMDAwICswMDAwCitAQCAtNTgsNyArNTgsNyBAQAorICRoZWxwID0gIlVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbRElSRUNUT1JZXS4uLgorIAorIFJ1biBgYXV0b2NvbmYnIChhbmQgYGF1dG9oZWFkZXInLCBgYWNsb2NhbCcsIGBhdXRvbWFrZScsIGBhdXRvcG9pbnQnCistKGZvcm1lcmx5IGBnZXR0ZXh0aXplJyksIGFuZCBgbGlidG9vbGl6ZScgd2hlcmUgYXBwcm9wcmlhdGUpCisrKGZvcm1lcmx5IGBnZXR0ZXh0aXplJyksIGBsaWJ0b29saXplJywgYW5kIGBnbnUtY29uZmlnaXplJyB3aGVyZSBhcHByb3ByaWF0ZSkKKyByZXBlYXRlZGx5IHRvIHJlbWFrZSB0aGUgR05VIEJ1aWxkIFN5c3RlbSBmaWxlcyBpbiBzcGVjaWZpZWQKKyBESVJFQ1RPUklFUyBhbmQgdGhlaXIgc3ViZGlyZWN0b3JpZXMgKGRlZmF1bHRpbmcgdG8gYC4nKS4KKyAKK0BAIC0xMTUsNiArMTE1LDcgQEAKKyBteSAkbGlidG9vbGl6ZSA9ICRFTlZ7J0xJQlRPT0xJWkUnfSB8fCAnbGlidG9vbGl6ZSc7CisgbXkgJGF1dG9wb2ludCAgPSAkRU5WeydBVVRPUE9JTlQnfSAgfHwgJ2F1dG9wb2ludCc7CisgbXkgJG1ha2UgICAgICAgPSAkRU5WeydNQUtFJ30gICAgICAgfHwgJ21ha2UnOworK215ICRnbnVjb25maWdpemUgPSAkRU5WeydHTlVDT05GSUdJWkUnfSAgICAgICB8fCAnZ251LWNvbmZpZ2l6ZSc7CisgCisgIyAtLWluc3RhbGwgLS0gYXMgLS1hZGQtbWlzc2luZyBpbiBvdGhlciB0b29scy4KKyBteSAkaW5zdGFsbCA9IDA7CitAQCAtNjQ0LDYgKzY0NSwxMCBAQAorICAgICAgIH0KKyAgICAgfQorIAorKyAgQGV4ID0gZ3JlcCAoL15nbnUtY29uZmlnaXplJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ID09IC0xKSB7CisrICAgIHhzeXN0ZW0gKCIkZ251Y29uZmlnaXplIik7CisrICB9CisgCisgICAjIC0tLS0tLS0tLS0tLS0tICMKKyAgICMgUnVubmluZyBtYWtlLiAgIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzMjZmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42My5vcmlnL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMDgtMjggMDM6MDg6MTAuMDAwMDAwMDAwICswMTAwCisrKysgYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjM4OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTE5MCw2ICsxOTAsNyBAQAorICAgJGF1dG9jb25mICAgLj0gam9pbiAoJyAtLXByZXBlbmQtaW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBwcmVwZW5kX2luY2x1ZGUpOworICAgJGF1dG9oZWFkZXIgLj0gam9pbiAoJyAtLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAaW5jbHVkZSk7CisgICAkYXV0b2hlYWRlciAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisrICAkYWNsb2NhbCAgICAuPSBqb2luICgnIC1JICcsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQGluY2x1ZGUpOworIAorICAgIyAtLWluc3RhbGwgYW5kIC0tc3ltbGluazsKKyAgIGlmICgkaW5zdGFsbCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG90ZXN0LWF1dG9tYWtlLXJlc3VsdC1mb3JtYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlODE3NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoCkBAIC0wLDAgKzEsMTM2IEBACitGcm9tIGE3ZTcyMmY5NzRlMjUyOWQzZTU2NGQ4ZDk0Yzg2Y2M4YmRiYzQwZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYWR1IFBhdHJpdSA8cmFkdS5wYXRyaXVAZW5lYS5jb20+CitEYXRlOiBNb24sIDI0IE1hciAyMDE0IDE2OjMzOjE5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGF1dG90ZXN0OiBuZXcgdGVzdHN1aXRlIG9wdGlvbiB0byBlbmFibGUgYXV0b21ha2UgdGVzdAorIHJlc3VsdCBmb3JtYXQKKworKiBsaWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNDogYWRkZWQgIi0tYW0tZm10IHwgLUEiIGNvbW1hbmQgbGluZQorcGFyYW1ldGVyIGZvciB0ZXN0c3VpdGUgc2NyaXB0IHRvIGVuYWJsZSAiUkVTVUxUOiB0ZXN0bmFtZSIgb3V0cHV0Oword2lsbCBiZSB1c2VkIGJ5IHlvY3RvIHB0ZXN0IHBhY2thZ2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUmFkdSBQYXRyaXUgPHJhZHUucGF0cml1QGVuZWEuY29tPgorLS0tCisgbGliL2F1dG90ZXN0L2dlbmVyYWwubTQgfCAgIDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00IGIvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKK2luZGV4IDYwYzAzNTIuLmMxZjVhOWIgMTAwNjQ0CistLS0gYS9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNAorKysrIGIvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQKK0BAIC00MTIsNiArNDEyLDkgQEAgYXRfcmVjaGVjaz0KKyAjIFdoZXRoZXIgYSB3cml0ZSBmYWlsdXJlIG9jY3VycmVkCisgYXRfd3JpdGVfZmFpbD0wCisgCisrIyBBdXRvbWFrZSByZXN1bHQgZm9ybWF0ICJyZXN1bHQ6IHRlc3RuYW1lIgorK2F0X2FtX2ZtdD1mYWxzZQorKworICMgVGhlIGRpcmVjdG9yeSB3ZSBydW4gdGhlIHN1aXRlIGluLiAgRGVmYXVsdCB0byAuIGlmIG5vIC1DIG9wdGlvbi4KKyBhdF9kaXI9YHB3ZGAKKyAjIEFuIGFic29sdXRlIHJlZmVyZW5jZSB0byB0aGlzIHRlc3RzdWl0ZSBzY3JpcHQuCitAQCAtNTMwLDYgKzUzMywxMCBAQCBkbworIAlhdF9jaGVja19maWx0ZXJfdHJhY2U9YXRfZm5fZmlsdGVyX3RyYWNlCisgCTs7CisgCisrICAgIC0tYW0tZm10IHwgLUEgKQorKwlhdF9hbV9mbXQ9OgorKwk7OworKworICAgICBbWzAtOV0gfCBbMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldIHwgWzAtOV1bMC05XVswLTldWzAtOV1dKQorIAlhdF9mbl92YWxpZGF0ZV9yYW5nZXMgYXRfb3B0aW9uCisgCUFTX1ZBUl9BUFBFTkQoW2F0X2dyb3Vwc10sIFsiJGF0X29wdGlvbiRhc19ubCJdKQorQEAgLTcxOCwxMCArNzI1LDEwIEBAIG00X2RpdmVydF9wdXNoKFtIRUxQX01PREVTXSlkbmwKKyBjYXQgPDxfQVRFT0YgfHwgYXRfd3JpdGVfZmFpbD0xCisgCisgT3BlcmF0aW9uIG1vZGVzOgorLSAgLWgsIC0taGVscCAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CistICAtViwgLS12ZXJzaW9uICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CistICAtYywgLS1jbGVhbiAgICByZW1vdmUgYWxsIHRoZSBmaWxlcyB0aGlzIHRlc3Qgc3VpdGUgbWlnaHQgY3JlYXRlIGFuZCBleGl0CistICAtbCwgLS1saXN0ICAgICBkZXNjcmliZXMgYWxsIHRoZSB0ZXN0cywgb3IgdGhlIHNlbGVjdGVkIFRFU1RTCisrICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhlIGhlbHAgbWVzc2FnZSwgdGhlbiBleGl0CisrICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorKyAgLWMsIC0tY2xlYW4gICAgIHJlbW92ZSBhbGwgdGhlIGZpbGVzIHRoaXMgdGVzdCBzdWl0ZSBtaWdodCBjcmVhdGUgYW5kIGV4aXQKKysgIC1sLCAtLWxpc3QgICAgICBkZXNjcmliZXMgYWxsIHRoZSB0ZXN0cywgb3IgdGhlIHNlbGVjdGVkIFRFU1RTCisgX0FURU9GCisgbTRfZGl2ZXJ0X3BvcChbSEVMUF9NT0RFU10pZG5sCisgbTRfd3JhcChbbTRfZGl2ZXJ0X3B1c2goW0hFTFBfVFVOSU5HX0JFR0lOXSlkbmwKK0BAIC03NDcsNiArNzU0LDcgQEAgRXhlY3V0aW9uIHR1bmluZzoKKyAgIC1kLCAtLWRlYnVnICAgIGluaGliaXQgY2xlYW4gdXAgYW5kIHRvcC1sZXZlbCBsb2dnaW5nCisgWyAgICAgICAgICAgICAgICAgZGVmYXVsdCBmb3IgZGVidWdnaW5nIHNjcmlwdHNdCisgICAteCwgLS10cmFjZSAgICBlbmFibGUgdGVzdHMgc2hlbGwgdHJhY2luZworKyAgLUEsIC0tYW0tZm10ICAgYXV0b21ha2UgcmVzdWx0IGZvcm1hdCAicmVzdWx0OiB0ZXN0bmFtZSIKKyBfQVRFT0YKKyBtNF9kaXZlcnRfcG9wKFtIRUxQX1RVTklOR19CRUdJTl0pXSlkbmwKKyBtNF9kaXZlcnRfcHVzaChbSEVMUF9FTkRdKWRubAorQEAgLTExNjIsNyArMTE3MCw5IEBAIGF0X2ZuX2dyb3VwX2Jhbm5lciAoKQorICAgICBbKl0pICAgICAgICAgIGF0X2Rlc2NfbGluZT0iJFsxXTogIiAgOzsKKyAgIGVzYWMKKyAgIEFTX1ZBUl9BUFBFTkQoW2F0X2Rlc2NfbGluZV0sIFsiJFszXSRbNF0iXSkKKy0gICRhdF9xdWlldCBBU19FQ0hPX04oWyIkYXRfZGVzY19saW5lIl0pCisrICBpZiAhICRhdF9hbV9mbXQ7IHRoZW4KKysgICAgJGF0X3F1aWV0IEFTX0VDSE9fTihbIiRhdF9kZXNjX2xpbmUiXSkKKysgIGZpCisgICBlY2hvICIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gY29tcGlsYXRpb24gLSotIiA+PiAiJGF0X2dyb3VwX2xvZyIKKyB9CisgCitAQCAtMTE4OCw0MiArMTE5OCw1MSBAQCBfQVRFT0YKKyAgIGNhc2UgJGF0X3hmYWlsOiRhdF9zdGF0dXMgaW4KKyAgICAgeWVzOjApCisgCWF0X21zZz0iVU5FWFBFQ1RFRCBQQVNTIgorKwlhdF9hbV9tc2c9IlhQQVNTIgorIAlhdF9yZXM9eHBhc3MKKyAJYXRfZXJyZXhpdD0kYXRfZXJyZXhpdF9wCisgCWF0X2NvbG9yPSRhdF9yZWQKKyAJOzsKKyAgICAgbm86MCkKKyAJYXRfbXNnPSJvayIKKysJYXRfYW1fbXNnPSJQQVNTIgorIAlhdF9yZXM9cGFzcworIAlhdF9lcnJleGl0PWZhbHNlCisgCWF0X2NvbG9yPSRhdF9ncm4KKyAJOzsKKyAgICAgKjo3NykKKyAJYXRfbXNnPSdza2lwcGVkICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisrCWF0X2FtX21zZz0iU0tJUCIKKyAJYXRfcmVzPXNraXAKKyAJYXRfZXJyZXhpdD1mYWxzZQorIAlhdF9jb2xvcj0kYXRfYmx1CisgCTs7CisgICAgIG5vOiogfCAqOjk5KQorIAlhdF9tc2c9J0ZBSUxFRCAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworKwlhdF9hbV9tc2c9IkZBSUwiCisgCWF0X3Jlcz1mYWlsCisgCWF0X2VycmV4aXQ9JGF0X2VycmV4aXRfcAorIAlhdF9jb2xvcj0kYXRfcmVkCisgCTs7CisgICAgIHllczoqKQorIAlhdF9tc2c9J2V4cGVjdGVkIGZhaWx1cmUgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKysJYXRfYW1fbXNnPSJYRkFJTCIKKyAJYXRfcmVzPXhmYWlsCisgCWF0X2VycmV4aXQ9ZmFsc2UKKyAJYXRfY29sb3I9JGF0X2xnbgorIAk7OworICAgZXNhYworICAgZWNobyAiJGF0X3JlcyIgPiAiJGF0X2pvYl9kaXIvJGF0X3JlcyIKKy0gICMgSW4gcGFyYWxsZWwgbW9kZSwgb3V0cHV0IHRoZSBzdW1tYXJ5IGxpbmUgb25seSBhZnRlcndhcmRzLgorLSAgaWYgdGVzdCAkYXRfam9icyAtbmUgMSAmJiB0ZXN0IC1uICIkYXRfdmVyYm9zZSI7IHRoZW4KKy0gICAgQVNfRUNITyhbIiRhdF9kZXNjX2xpbmUgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgIGlmICRhdF9hbV9mbXQ7IHRoZW4KKysgICAgICBBU19FQ0hPKFsiJGF0X2FtX21zZzogJGF0X2Rlc2MiXSkKKyAgIGVsc2UKKy0gICAgIyBNYWtlIHN1cmUgdGhlcmUgaXMgYSBzZXBhcmF0b3IgZXZlbiB3aXRoIGxvbmcgdGl0bGVzLgorLSAgICBBU19FQ0hPKFsiICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgICMgSW4gcGFyYWxsZWwgbW9kZSwgb3V0cHV0IHRoZSBzdW1tYXJ5IGxpbmUgb25seSBhZnRlcndhcmRzLgorKyAgICBpZiB0ZXN0ICRhdF9qb2JzIC1uZSAxICYmIHRlc3QgLW4gIiRhdF92ZXJib3NlIjsgdGhlbgorKyAgICAgIEFTX0VDSE8oWyIkYXRfZGVzY19saW5lICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgIGVsc2UKKysgICAgICAjIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHNlcGFyYXRvciBldmVuIHdpdGggbG9uZyB0aXRsZXMuCisrICAgICAgQVNfRUNITyhbIiAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgICBmaQorICAgZmkKKyAgIGF0X2xvZ19tc2c9IiRhdF9ncm91cC4gJGF0X2Rlc2MgKCRhdF9zZXR1cF9saW5lKTogJGF0X21zZyIKKyAgIGNhc2UgJGF0X3N0YXR1cyBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzOTRkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1VzZSAtLXdhcm5pbmc9Y3Jvc3Mgb25seSBpZiBzdXBwb3J0ZWQgYnkgYXV0b21ha2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2Jpbi9hdXRvcmVjb25mLmluCisrKysgYi9iaW4vYXV0b3JlY29uZi5pbgorQEAgLTEyNyw2ICsxMjcsOCBAQCBteSAkYWNsb2NhbF9zdXBwb3J0c193YXJuaW5ncyA9IDA7CisgbXkgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSAwOworICMgRG9lcyBhdXRvbWFrZSBzdXBwb3J0IC1XZm9vPworIG15ICRhdXRvbWFrZV9zdXBwb3J0c193YXJuaW5ncyA9IDA7CisrIyBEb2VzIGF1dG9tYWtlIHN1cHBvcnQgLS13YXJuaW5nPWNyb3NzCisrbXkgJGF1dG9tYWtlX3N1cHBvcnRzX2Nyb3NzX3dhcm5pbmcgPSAwOworIAorIG15IEBwcmVwZW5kX2luY2x1ZGU7CisgbXkgQGluY2x1ZGU7CitAQCAtMTkxLDYgKzE5Myw3IEBAIHN1YiBwYXJzZV9hcmdzICgpCisgICAkYWNsb2NhbF9zdXBwb3J0c193YXJuaW5ncyA9ICRhY2xvY2FsX2hlbHAgPX4gLy0td2FybmluZ3MvOworICAgJGF1dG9tYWtlX3N1cHBvcnRzX2ZvcmNlX21pc3NpbmcgPSAkYXV0b21ha2VfaGVscCA9fiAvLS1mb3JjZS1taXNzaW5nLzsKKyAgICRhdXRvbWFrZV9zdXBwb3J0c193YXJuaW5ncyA9ICRhdXRvbWFrZV9oZWxwID1+IC8tLXdhcm5pbmdzLzsKKysgICRhdXRvbWFrZV9zdXBwb3J0c19jcm9zc193YXJuaW5nID0gJGF1dG9tYWtlX2hlbHAgPX4gL2Nyb3NzLzsKKyAKKyAgICMgRGlzcGF0Y2ggYXV0b3JlY29uZidzIG9wdGlvbiB0byB0aGUgdG9vbHMuCisgICAjIC0taW5jbHVkZTsKK0BAIC0yNDQsNiArMjQ3LDggQEAgc3ViIHBhcnNlX2FyZ3MgKCkKKyAgICAgICAkbGlidG9vbGl6ZSAuPSAnIC0tZGVidWcnOworICAgICB9CisgICAjIC0td2FybmluZ3M7CisrICBAd2FybmluZyA9IGdyZXAgeyAkXyBuZSAiY3Jvc3MiIH0gQHdhcm5pbmcKKysgICAgaWYgISAkYXV0b21ha2Vfc3VwcG9ydHNfY3Jvc3Nfd2FybmluZzsKKyAgIGlmIChAd2FybmluZykKKyAgICAgeworICAgICAgIG15ICR3YXJuID0gJyAtLXdhcm5pbmdzPScgLiBqb2luICgnLCcsIEB3YXJuaW5nKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9jb25maWdfc2l0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA0NDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitQb2t5IHByb3ZpZGVzIGEgbGlzdCBvZiBzaXRlIGZpbGVzIGluIENPTkZJR19TSVRFIHdoZXJlYXMgYXV0b2NvbmYgCitvbmx5IGV4cGVjdHMgb25lIGZpbGUuIFRoaXMgcGF0Y2ggY2hhbmdlcyBhdXRvY29uZiB0byBhY2NlcHQgYSBsaXN0IG9mIAordGhlbS4KKworUlAgMS8yLzEwCisKK1VwZGF0ZWQgZm9yIDIuNjggdmVyc2lvbjogdGhlIENPTkZJR19TSVRFIHZhciB3YXMgbm90IGdldHRpbmcgdXNlZCBhdCBhbGwKK2ZpeGVkIHRoZSAyLjY4IGNvZGUgCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA1LzI3CisKK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9nZW5lcmFsLm00CisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorQEAgLTE4NzgsNyArMTg3OCw2IEBAIEFVX0RFRlVOKFtBQ19WQUxJREFURV9DQUNIRURfU1lTVEVNX1RVUEwKKyBtNF9kZWZpbmUoW0FDX1NJVEVfTE9BRF0sCisgWyMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCisgYWNfc2l0ZV9maWxlMT1OT05FCistYWNfc2l0ZV9maWxlMj1OT05FCisgaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgorICAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgIGNhc2UgJENPTkZJR19TSVRFIGluIEAlOkAoKAorQEAgLTE4ODYsMTQgKzE4ODUsOCBAQCBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OworICAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICAgZXNhYworLWVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKy0gIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKKy1lbHNlCistICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorLSAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCisgZmkKKy1mb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorK2ZvciBhY19zaXRlX2ZpbGUgaW4gJGFjX3NpdGVfZmlsZTEKKyBkbworICAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvZml4X3BhdGhfeHRyYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRmODhmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2ZpeF9wYXRoX3h0cmEucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBkb24ndCBidWlsZCB4bWttZiBzbyBhbnkgdmFsdWVzIHJldHVybmVkIGZyb20gaXQgYXJlIGdvaW5nIHRvIGJlIHdyb25nLgorVXNpbmcgYW55IHBhdGhzIGluIC91c3IvIGZvciB4IGhlYWRlcnMvbGlicyBpcyBhIGJhZCBpZGVhIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorVGhpcyBwYXRjaCByZW1vdmVzIHRoZW0gdG8gc3RvcCBhbnkgY29uZnVzaW9uLgorCitSUCAtIDIwMDcxMTE1CisKK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9saWJzLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42OC5vcmlnL2xpYi9hdXRvY29uZi9saWJzLm00CisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvbGlicy5tNAorQEAgLTE1OSw1MyArMTU5LDYgQEAgbTRfcG9wZGVmKFtBQ19MaWJfTmFtZV0pZG5sCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworIAorIAorLSMgX0FDX1BBVEhfWF9YTUtNRgorLSMgLS0tLS0tLS0tLS0tLS0tLQorLSMgSW50ZXJuYWwgc3Vicm91dGluZSBvZiBfQUNfUEFUSF9YLgorLSMgU2V0IGFjX3hfaW5jbHVkZXMgYW5kL29yIGFjX3hfbGlicmFyaWVzLgorLW00X2RlZmluZShbX0FDX1BBVEhfWF9YTUtNRl0sCistW0FDX0FSR19WQVIoWE1LTUYsIFtQYXRoIHRvIHhta21mLCBNYWtlZmlsZSBnZW5lcmF0b3IgZm9yIFggV2luZG93IFN5c3RlbV0pZG5sCistcm0gLWYgLXIgY29uZnRlc3QuZGlyCistaWYgbWtkaXIgY29uZnRlc3QuZGlyOyB0aGVuCistICBjZCBjb25mdGVzdC5kaXIKKy0gIGNhdCA+SW1ha2VmaWxlIDw8J19BQ0VPRicKKy1pbmNyb290OgorLQlAZWNobyBpbmNyb290PScke0lOQ1JPT1R9JworLXVzcmxpYmRpcjoKKy0JQGVjaG8gdXNybGliZGlyPScke1VTUkxJQkRJUn0nCistbGliZGlyOgorLQlAZWNobyBsaWJkaXI9JyR7TElCRElSfScKKy1fQUNFT0YKKy0gIGlmIChleHBvcnQgQ0M7ICR7WE1LTUYteG1rbWZ9KSA+L2Rldi9udWxsIDI+L2Rldi9udWxsICYmIHRlc3QgLWYgTWFrZWZpbGU7IHRoZW4KKy0gICAgIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgorLSAgICBmb3IgYWNfdmFyIGluIGluY3Jvb3QgdXNybGliZGlyIGxpYmRpcjsgZG8KKy0gICAgICBldmFsICJhY19pbV8kYWNfdmFyPVxgXCR7TUFLRS1tYWtlfSAkYWNfdmFyIDI+L2Rldi9udWxsIHwgc2VkIC1uICdzL14kYWNfdmFyPS8vcCdcYCIKKy0gICAgZG9uZQorLSAgICAjIE9wZW4gV2luZG93cyB4bWttZiByZXBvcnRlZGx5IHNldHMgTElCRElSIGluc3RlYWQgb2YgVVNSTElCRElSLgorLSAgICBmb3IgYWNfZXh0ZW5zaW9uIGluIGEgc28gc2wgZHlsaWIgbGEgZGxsOyBkbworLSAgICAgIGlmIHRlc3QgISAtZiAiJGFjX2ltX3VzcmxpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiIgJiYKKy0JIHRlc3QgLWYgIiRhY19pbV9saWJkaXIvbGliWDExLiRhY19leHRlbnNpb24iOyB0aGVuCistCWFjX2ltX3VzcmxpYmRpcj0kYWNfaW1fbGliZGlyOyBicmVhaworLSAgICAgIGZpCistICAgIGRvbmUKKy0gICAgIyBTY3JlZW4gb3V0IGJvZ3VzIHZhbHVlcyBmcm9tIHRoZSBpbWFrZSBjb25maWd1cmF0aW9uLiAgVGhleSBhcmUKKy0gICAgIyBib2d1cyBib3RoIGJlY2F1c2UgdGhleSBhcmUgdGhlIGRlZmF1bHQgYW55d2F5LCBhbmQgYmVjYXVzZQorLSAgICAjIHVzaW5nIHRoZW0gd291bGQgYnJlYWsgZ2NjIG9uIHN5c3RlbXMgd2hlcmUgaXQgbmVlZHMgZml4ZWQgaW5jbHVkZXMuCistICAgIGNhc2UgJGFjX2ltX2luY3Jvb3QgaW4KKy0JL3Vzci9pbmNsdWRlKSBhY194X2luY2x1ZGVzPSA7OworLQkqKSB0ZXN0IC1mICIkYWNfaW1faW5jcm9vdC9YMTEvWG9zLmgiICYmIGFjX3hfaW5jbHVkZXM9JGFjX2ltX2luY3Jvb3Q7OworLSAgICBlc2FjCistICAgIGNhc2UgJGFjX2ltX3VzcmxpYmRpciBpbgorLQkvdXNyL2xpYiB8IC91c3IvbGliNjQgfCAvbGliIHwgL2xpYjY0KSA7OworLQkqKSB0ZXN0IC1kICIkYWNfaW1fdXNybGliZGlyIiAmJiBhY194X2xpYnJhcmllcz0kYWNfaW1fdXNybGliZGlyIDs7CistICAgIGVzYWMKKy0gIGZpCistICBjZCAuLgorLSAgcm0gLWYgLXIgY29uZnRlc3QuZGlyCistZmkKKy1dKSMgX0FDX1BBVEhfWF9YTUtNRgorLQorLQorICMgX0FDX1BBVEhfWF9ESVJFQ1QKKyAjIC0tLS0tLS0tLS0tLS0tLS0tCisgIyBJbnRlcm5hbCBzdWJyb3V0aW5lIG9mIF9BQ19QQVRIX1guCitAQCAtMjEzLDQ0ICsxNjYsNyBAQCBmaQorIG00X2RlZmluZShbX0FDX1BBVEhfWF9ESVJFQ1RdLAorIFsjIFN0YW5kYXJkIHNldCBvZiBjb21tb24gZGlyZWN0b3JpZXMgZm9yIFggaGVhZGVycy4KKyAjIENoZWNrIFgxMSBiZWZvcmUgWDExUm4gYmVjYXVzZSBpdCBpcyBvZnRlbiBhIHN5bWxpbmsgdG8gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKy1hY194X2hlYWRlcl9kaXJzPScKKy0vdXNyL1gxMS9pbmNsdWRlCistL3Vzci9YMTFSNy9pbmNsdWRlCistL3Vzci9YMTFSNi9pbmNsdWRlCistL3Vzci9YMTFSNS9pbmNsdWRlCistL3Vzci9YMTFSNC9pbmNsdWRlCistCistL3Vzci9pbmNsdWRlL1gxMQorLS91c3IvaW5jbHVkZS9YMTFSNworLS91c3IvaW5jbHVkZS9YMTFSNgorLS91c3IvaW5jbHVkZS9YMTFSNQorLS91c3IvaW5jbHVkZS9YMTFSNAorLQorLS91c3IvbG9jYWwvWDExL2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI3L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI2L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI1L2luY2x1ZGUKKy0vdXNyL2xvY2FsL1gxMVI0L2luY2x1ZGUKKy0KKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExCistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI3CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI2CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI1CistL3Vzci9sb2NhbC9pbmNsdWRlL1gxMVI0CistCistL3Vzci9YMzg2L2luY2x1ZGUKKy0vdXNyL3gzODYvaW5jbHVkZQorLS91c3IvWEZyZWU4Ni9pbmNsdWRlL1gxMQorLQorLS91c3IvaW5jbHVkZQorLS91c3IvbG9jYWwvaW5jbHVkZQorLS91c3IvdW5zdXBwb3J0ZWQvaW5jbHVkZQorLS91c3IvYXRoZW5hL2luY2x1ZGUKKy0vdXNyL2xvY2FsL3gxMXI1L2luY2x1ZGUKKy0vdXNyL2xwcC9YYW1wbGVzL2luY2x1ZGUKKy0KKy0vdXNyL29wZW53aW4vaW5jbHVkZQorLS91c3Ivb3Blbndpbi9zaGFyZS9pbmNsdWRlJworK2FjX3hfaGVhZGVyX2RpcnM9JycKKyAKKyBpZiB0ZXN0ICIkYWNfeF9pbmNsdWRlcyIgPSBubzsgdGhlbgorICAgIyBHdWVzcyB3aGVyZSB0byBmaW5kIGluY2x1ZGUgZmlsZXMsIGJ5IGxvb2tpbmcgZm9yIFhsaWIuaC4KK0BAIC0yOTksNyArMjE1LDYgQEAgQUNfREVGVU4oW19BQ19QQVRIX1hdLAorIFtBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV94LAorIFsjIE9uZSBvciBib3RoIG9mIHRoZSB2YXJzIGFyZSBub3Qgc2V0LCBhbmQgdGhlcmUgaXMgbm8gY2FjaGVkIHZhbHVlLgorIGFjX3hfaW5jbHVkZXM9bm8gYWNfeF9saWJyYXJpZXM9bm8KKy1fQUNfUEFUSF9YX1hNS01GCisgX0FDX1BBVEhfWF9ESVJFQ1QKKyBjYXNlICRhY194X2luY2x1ZGVzLCRhY194X2xpYnJhcmllcyBpbiAjKAorICAgbm8sKiB8ICosbm8gfCAqXCcqKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJlZmVyYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc2ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3ByZWZlcmJhc2gucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZSBDT05GSUdfU0hFTEwgYW5kIFNIRUxMIHdoaWNoIG1heSBnZXQgZXhwb3J0ZWQgaW50bworc2NyaXB0cyBzaGFyZWQgdmlhIHNzdGF0ZSBvbnRvIG90aGVyIHN5c3RlbXMuCisKK1NvbWUgc3lzdGVtcyBoYXZlIC9iaW4vc2ggLT4gZGFzaCBhbmQgb3RoZXJzIC9iaW4vc2ggLT4gYmFzaC4gQmFzaCBpcyBwcmVmZXJyZWQgCitidXQgc29tZXRpbWVzIHdlIGNhbiBzb21ldGltZXMgZW5kIHVwIGV4cG9ydGluZyAvYmluL3NoIHlldCB1c2UgYmFzaGlzbXMuCisKK1RoaXMgcGF0Y2ggcHV0cyBiYXNoIGZpcnN0IGluIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGljaCBhdm9pZHMgdGhlIGJhc2gvZGFzaCBjb25mdXNpb24uCisKK1JQIDIwMTIvOS8yMworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhdXRvY29uZi0yLjY5L2xpYi9tNHN1Z2FyL200c2gubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY5Lm9yaWcvbGliL200c3VnYXIvbTRzaC5tNAkyMDEyLTAzLTA3IDE3OjM1OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjkvbGliL200c3VnYXIvbTRzaC5tNAkyMDEzLTA5LTIzIDE2OjEyOjM4Ljg1MzU5NzUxNSArMDAwMAorQEAgLTIyOSw3ICsyMjksNyBAQAorICAgICBbX0FTX1BBVEhfV0FMSyhbL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEhdLAorICAgICAgIFtjYXNlICRhc19kaXIgaW4gQCU6QCgKKyAJIC8qKQorLQkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisrCSAgIGZvciBhc19iYXNlIGluIGJhc2ggc2gga3NoIHNoNTsgZG8KKyAJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisgCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorIAkgICAgIEFTX0lGKFt7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcm9ncmFtX3ByZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzhhNDAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCistLS0gYXV0b2NvbmYtMi41Ny9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNH5wcm9ncmFtX3ByZWZpeAorKysrIGF1dG9jb25mLTIuNTcvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKK0BAIC0xNjc2LDggKzE2NzYsOSBAQAorICMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyAjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCisgdGVzdCAtbiAiJHRhcmdldF9hbGlhcyIgJiYKKy0gIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKy0gICAgTk9ORU5PTkVzLHgseCwgJiYKKysgIHRlc3QgIiR0YXJnZXRfYWxpYXMiICE9ICIkaG9zdF9hbGlhcyIgJiYKKysgICAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAorKyAgICAgIE5PTkVOT05Fcyx4LHgsICYmCisgICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tW11kbmwKKyBdKSMgQUNfQ0FOT05JQ0FMX1RBUkdFVAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQyZTJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorV2UgaGF2ZSBwcm9ibGVtIHVzaW5nIGhhcmRjb2RlZCBkaXJlY3RvcmllcyBsaWtlIC91c3IvbG9jYWwgaGVyZQord2hpY2ggd2lsbCBiZSBjaGVja2VkIGZvciBjcm9zcyBidWlsZHMuIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugd2hpY2gKK2lzIHZhbGlkIGZvciBBSVggb25seS4gV2UgZG8gbm90IGhhdmUgQUlYIGFzIG9uZSBvZiBvdXIgc3VwcG9ydGVkCitidWlsZCBob3N0IG9yIHRhcmdldC4gVGhlcmVmb3JlIHdlIGdldCByaWQgb2YgdGhlIGhhcmRjb2RlZCBwYXRocworYW5kIG1ha2UgbGlmZSBlYXNpZXIgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbVXBzdHJlYW0gZG9lcyBjYXJlIGZvciBBSVggd2hpbGUgd2UgbWF5IG5vdF0KK0luZGV4OiBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9mdW5jdGlvbnMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY4Lm9yaWcvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAkyMDEwLTA5LTIyIDE0OjUyOjE5LjAwMDAwMDAwMCAtMDcwMAorKysrIGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAkyMDExLTA4LTAzIDExOjU3OjA1LjgyMjE5OTUxMyAtMDcwMAorQEAgLTc0OSwxNSArNzQ5LDYgQEAgaWYgdGVzdCAkYWNfaGF2ZV9mdW5jID0gbm87IHRoZW4KKyAgICAgW0xJQlM9Ii1sdXRpbCAkTElCUyIgYWNfaGF2ZV9mdW5jPXllcyBhY19jdl9mdW5jX2dldGxvYWRhdmdfc2V0Z2lkPXllc10pCisgZmkKKyAKKy1pZiB0ZXN0ICRhY19oYXZlX2Z1bmMgPSBubzsgdGhlbgorLSAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgYWNfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgQUNfQ0hFQ0tfTElCKGdldGxvYWRhdmcsIGdldGxvYWRhdmcsCistCSAgICAgICBbTElCUz0iLWxnZXRsb2FkYXZnICRMSUJTIl0sIFtMSUJTPSRhY19nZXRsb2FkYXZnX0xJQlNdKQorLWZpCistCisgIyBNYWtlIHN1cmUgaXQgaXMgcmVhbGx5IGluIHRoZSBsaWJyYXJ5LCBpZiB3ZSB0aGluayB3ZSBmb3VuZCBpdCwKKyAjIG90aGVyd2lzZSBzZXQgdXAgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorIEFDX0NIRUNLX0ZVTkNTKGdldGxvYWRhdmcsIFtdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmZfMi42OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDkwMDdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mXzIuNjkuYmIKQEAgLTAsMCArMSwyNSBAQAorcmVxdWlyZSBhdXRvY29uZi5pbmMKKworUFIgPSAicjExIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisJCSAgICBmaWxlOi8vQ09QWUlOR3YzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9hdXRvcmVjb25mLWluY2x1ZGUucGF0Y2ggXAorCSAgICBmaWxlOi8vY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaCBcCisJICAgIGZpbGU6Ly9hdXRvcmVjb25mLWV4Y2x1ZGUucGF0Y2ggXAorCSAgICBmaWxlOi8vYXV0b3JlY29uZi1nbnVjb25maWdpemUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2NvbmZpZ19zaXRlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wcmVmZXJiYXNoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdXRvdGVzdC1hdXRvbWFrZS1yZXN1bHQtZm9ybWF0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODJkMDVlMDNiOTNlNDVmNWEzOWI4MjhkYzljNmMyOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU0YmQ2OWIzOTFlZGMxMmQ2YTRhNTFhMmRkMTQ3NjU0M2RhNWM2YmJmMDVhOTViNTlkYzBkZDZmZDRjMjk2OSIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZml4X3BhdGhfeHRyYS5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX000PW00IGFjX2N2X3Byb2dfVEVTVF9FTUFDUz1ubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi1uYXRpdmVfNS4xOC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjg1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBdXRvbWF0ZWQgdGV4dCBhbmQgcHJvZ3JhbSBnZW5lcmF0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJBdXRvR2VuIGlzIGEgdG9vbCBkZXNpZ25lZCB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gYW5kXAorIG1haW50ZW5hbmNlIG9mIHByb2dyYW1zIHRoYXQgY29udGFpbiBsYXJnZSBhbW91bnRzIG9mIHJlcGV0aXRpb3VzIHRleHQuXAorIEl0IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgaW4gcHJvZ3JhbXMgdGhhdCBoYXZlIHNldmVyYWwgYmxvY2tzIG9mIHRleHRcCisgdGhhdCBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvZ2VuLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvZ2VuL3JlbCR7UFZ9L2F1dG9nZW4tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4NWQ3YzdkZmJlNjBiYWJiZWUyNjFjMDU0OTIzYTUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiYmRiNzNiNTUxOGJhZjY0YzZkMzczOWZiMmVjYzY2ZDJjY2NkYTg4OGNlNWFkNTczYWJlMjM1YWI1ZDk2YmEiCisKK0RFUEVORFMgPSAiZ3VpbGUtbmF0aXZlIGxpYnRvb2wtbmF0aXZlIGxpYnhtbDItbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIG5hdGl2ZSBwa2djb25maWcKKworIyBhdXRvZ2VuLW5hdGl2ZSBsaW5rcyBhZ2FpbnN0IGxpYmd1aWxlIHdoaWNoIG1heSBoYXZlIGJlZW4gcmVsb2NhdGVkIHdpdGggc3N0YXRlCisjIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBlbnN1cmUgdGhlcmUgaXNuJ3QgYSByZWxvY2F0aW9uIGlzc3VlCitleHBvcnQgR1VJTEVfTE9BRF9QQVRIID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIgorZXhwb3J0IEdVSUxFX0xPQURfQ09NUElMRURfUEFUSCA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2F1dG9nZW4gXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDRjMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b2dlbjogaW5jcmVhc2UgdGltZW91dCBsaW1pdCBmb3Igc2hlbGwgY29tbWFuZHMKKworT24gc29tZSBvdmVybG9hZGVkIGhvc3RzLCBzaGVsbCBjb21tYW5kcyBvZiBhdXRvZ2VuIG1heSBjYW4gbm90CitmaW5pc2ggaW4gNSBzZWNzLiBUaGlzIGhhcyBjYXVzZWQgbWFueSBidWlsZCBmYWlsdXJlcywgc28gaW5jcmVhc2UKK3RoZSB0aW1lb3V0IGxpbWl0IHRvIGZpeCB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGFmN2MxOC4uNTU0NGY1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc1LDkgKzE3NSw5IEBAIGNvbmZpZ19lbmRfdGltZT1gZGF0ZSArJXMgMj4vZGV2L251bGxgCisgdGltZV9kZWx0YT1gZXhwciAke2NvbmZpZ19lbmRfdGltZX0gLSAke2NvbmZpZ19zdGFydF90aW1lfSAyPi9kZXYvbnVsbGAKKyAKKyBpZiB0ZXN0IC16ICIke3RpbWVfZGVsdGF9IgorLXRoZW4gdGltZV9kZWx0YT0xMAorLWVsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCA1CistdGhlbiB0aW1lX2RlbHRhPTUgOyBmaQorK3RoZW4gdGltZV9kZWx0YT02MAorK2VsaWYgdGVzdCAke3RpbWVfZGVsdGF9IC1sdCAzMAorK3RoZW4gdGltZV9kZWx0YT0zMCA7IGZpCisgCisgQUdfVElNRU9VVD0ke3RpbWVfZGVsdGF9CisgXQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vbWstdHBsLWNvbmZpZy5zaC1mb3JjZS1leGl0LXZhbHVlLXRvLWJlLTAtaW4tc3VicHJvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTZkYTdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittay10cGwtY29uZmlnLnNoOiBmb3JjZSBleGl0IHZhbHVlIHRvIGJlIDAgaW4gc3VicHJvY2VzcworCitUaGUgcmV0dXJuIHZhbHVlIG9mIHN0YXRlbWVudCBsaXN0PWA8c3ViY29tbWFuZHM+YCBpcyB0aGUgZXhpdCB2YWx1ZSBvZiB0aGUKK3N1YmNvbW1hbmRzLiBTbyBpZiB0aGUgc3ViY29tbWFuZHMgZmFpbHMsIHRoZSBjb21waWxhdGlvbiBmYWlscy4gVGhpcyBpcyBvYnZpb3VzbHkKK25vdCBpbnRlbmRlZC4gSW4gdGhlIG5vcm1hbCBjYXNlLCB3ZSBleHBlY3QgdGhlIGdyZXAgY29tbWFuZCB0byBmYWlsIGFzIHRoZXJlIHNob3VsZAorYmUgbm8gJ25vcmV0dXJuJyB3b3JkIGluIHRoZSBsaWJndWlsZSBmaWxlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2ggYi9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCitpbmRleCA5MjZmNWFiLi42YjRhMGZiIDEwMDc1NQorLS0tIGEvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAorKysrIGIvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaAorQEAgLTIwMiw3ICsyMDIsNyBAQCBmaXhfZ3VpbGUoKSB7CisgCisgICAgIGxpc3Q9YHNldCArZSA7IGV4ZWMgMj4vZGV2L251bGwKKyAgICAgICAgIGZpbmQgJHtsaWJndWlsZWRpcn0vbGliZ3VpbGUqIC10eXBlIGYgfCBcCistICAgICAgICAgICAgeGFyZ3MgZ3JlcCAtbCAtRSAnXDxub3JldHVyblw+J2AKKysgICAgICAgICAgICB4YXJncyBncmVwIC1sIC1FICdcPG5vcmV0dXJuXD4nIDsgZXhpdCAwYAorIAorICAgICB0ZXN0IC16ICIkbGlzdCIgJiYgZXhpdCAwCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9yZWRpcmVjdC1vdXRwdXQtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTI2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorW1BBVENIXSByZWRpcmVjdCB0aGUgZGlyIG9mIG1rbGlic3JjLWxvZy50eAorCitVcHN0cmVhbS1TdGF0dWU6IFBlbmRpbmcKKworcmVkaXJlY3QgbWtsaWJzcmMtbG9nLnR4IHRvIGJ1aWxkZGlyLCBub3QgL3RtcDsgb3RoZXJ3aXNlIG1rbGlic3JjLWxvZy50eAorbWF5YmUgdW5hYmxlIHRvIGJlIHdyaXR0ZW4gaWYgb3RoZXIgdXNlcnMgaXMgYnVpbGRpbmcgYXV0b2dlbiBhdCB0aGUgc2FtZSB0aW1lLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBwa2cvbGlib3B0cy9ta2xpYnNyYy5zaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3BrZy9saWJvcHRzL21rbGlic3JjLnNoIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKK2luZGV4IDQxNmI0MDIuLmQ2MTJmYmMgMTAwNjQ0CistLS0gYS9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaAorKysrIGIvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2gKK0BAIC0xOSw3ICsxOSw3IEBACisgIyMgIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIHNldCAtZXgKKy1leGVjIDI+IC90bXAvbWtsaWJzcmMtbG9nLnR4CisrZXhlYyAyPiAkdG9wX2J1aWxkZGlyL21rbGlic3JjLWxvZy50eAorIAorIHRvcF9idWlsZGRpcj1gY2QgJHRvcF9idWlsZGRpciA7IHB3ZGAKKyB0b3Bfc3JjZGlyPWBjZCAkdG9wX3NyY2RpciA7IHB3ZGAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZWJkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBIEdOVSB0b29sIGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgTWFrZWZpbGVzIgorREVTQ1JJUFRJT04gPSAiQXV0b21ha2UgaXMgYSB0b29sIGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgYE1ha2VmaWxlLmluJyBmaWxlcyBjb21wbGlhbnQgd2l0aCB0aGUgR05VIENvZGluZyBcCitTdGFuZGFyZHMuIEF1dG9tYWtlIHJlcXVpcmVzIHRoZSB1c2Ugb2YgQXV0b2NvbmYuIgorTElDRU5TRSA9ICJHUEx2MiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXV0b21ha2UvYXV0b21ha2UtJHtQVn0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5jb25mCit9CisKK2V4cG9ydCBBVVRPTUFLRSA9ICIke0BiYi51dGlscy53aGljaCgnYXV0b21ha2UnLCBkLmdldFZhcignUEFUSCcsIFRydWUpKX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2F1dG9tYWtlKiAke2RhdGFkaXJ9L2FjbG9jYWwqIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9idWlsZHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkNTMzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9idWlsZHRlc3QucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU3BsaXQgImNoZWNrLVRFU1RTIiBpbnRvIGEgYnVpbGR0ZXN0IGFuZCBydW50ZXN0IHRhcmdldCwgc28gdGhhdCB0aGV5IGNhbgorYmUgcnVuIHNlcGFyYXRlbHkuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9saWIvYW0vY2hlY2suYW0JMjAxMi0xMS0xNCAxMzo0NjoxNi4zMzU0NzU5OTUgKzAxMDAKKysrKyBiL2xpYi9hbS9jaGVjay5hbQkyMDEyLTA4LTEzIDE4OjQwOjEyLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ0LDcgKzQ0LDcgQEAKKyBhbV9fdHR5X2NvbG9ycyA9ICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpCisgZW5kaWYgISU/Q09MT1IlCisKKy0uUEhPTlk6IGNoZWNrLVRFU1RTCisrLlBIT05ZOiBjaGVjay1URVNUUyBidWlsZHRlc3QtVEVTVFMgcnVudGVzdC1URVNUUworCisgaWYgJT9QQVJBTExFTF9URVNUUyUKKworQEAgLTQ2NSw3ICs0NjUsMTQgQEAKKworIGVsc2UgISU/UEFSQUxMRUxfVEVTVFMlCisKKy1jaGVjay1URVNUUzogJChURVNUUykKKytBTV9SRUNVUlNJVkVfVEFSR0VUUyArPSBidWlsZHRlc3QgcnVudGVzdAorKworK2J1aWxkdGVzdC1URVNUUzogJChURVNUUykKKysKKytjaGVjay1URVNUUzogYnVpbGR0ZXN0LVRFU1RTCisrCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHJ1bnRlc3QtVEVTVFMKKysKKytydW50ZXN0LVRFU1RTOgorCUBmYWlsZWQ9MDsgYWxsPTA7IHhmYWlsPTA7IHhwYXNzPTA7IHNraXA9MDsgXAorCXNyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7IFwKKyAjIyBNYWtlIHN1cmUgU29sYXJpcyBWUEFUSC1leHBhbmRzIGFsbCBtZW1iZXJzIG9mIHRoaXMgbGlzdCwgZXZlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMzNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5LWNvbXBpbGUtY29tcGlsZS1vbmx5LW9wdGltaXplZC1ieXRlLWNvZGUucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworKiBPRS1Db3JlJ3MgcHl0aG9uIGNyZWF0ZXMgdGhlIHNhbWUgYmluYXJ5IG91dHB1dAorICBmb3IgYm90aCBweWMgYW5kIHB5bywgc28gZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKKyAgcHljIGZpbGVzIGJ5IGF1dG9tYWtlLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCitVcGRhdGVkIGZvciBhdXRvbWFrZS0xLjEyLjYKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworZGlmZiAtTnVyZCBhdXRvbWFrZS0xLjEyLjYvbGliL3B5LWNvbXBpbGUgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCistLS0gYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCTIwMTItMTItMTMgMjE6NTc6MzEuMDAwMDAwMDAwICswMjAwCisrKysgYXV0b21ha2UtMS4xMi42L2xpYi9weS1jb21waWxlCTIwMTItMTItMjcgMTk6MzQ6MDEuNDI2MDE1MTQwICswMjAwCitAQCAtMTE1LDI2ICsxMTUsNiBAQAorICAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gb3MucGF0aC5ub3JtcGF0aCgnJGRlc3RkaXInICsgb3Muc2VwICsgcGF0aCkiCisgZmkKKyAKKy0kUFlUSE9OIC1jICIKKy1pbXBvcnQgc3lzLCBvcywgcHlfY29tcGlsZSwgaW1wCistCistZmlsZXMgPSAnJyckZmlsZXMnJycKKy0KKy1zeXMuc3Rkb3V0LndyaXRlKCdCeXRlLWNvbXBpbGluZyBweXRob24gbW9kdWxlcy4uLlxuJykKKy1mb3IgZmlsZSBpbiBmaWxlcy5zcGxpdCgpOgorLSAgICAkcGF0aHRyYW5zCistICAgICRmaWxldHJhbnMKKy0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKSBvciBub3QgKGxlbihmaWxlcGF0aCkgPj0gMworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZpbGVwYXRoWy0zOl0gPT0gJy5weScpOgorLQkgICAgY29udGludWUKKy0gICAgc3lzLnN0ZG91dC53cml0ZShmaWxlKQorLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKy0gICAgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJyk6CistICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlcGF0aCksIHBhdGgpCistICAgIGVsc2U6CistICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGZpbGVwYXRoICsgJ2MnLCBwYXRoKQorLXN5cy5zdGRvdXQud3JpdGUoJ1xuJykiIHx8IGV4aXQgJD8KKy0KKyAjIHRoaXMgd2lsbCBmYWlsIGZvciBweXRob24gPCAxLjUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIC4uLgorICRQWVRIT04gLU8gLWMgIgorIGltcG9ydCBzeXMsIG9zLCBweV9jb21waWxlLCBpbXAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5dGhvbi1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1NDFiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weXRob24tbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK1VwZGF0ZWQgZm9yIGF1dG9tYWtlLTEuMTIuNgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAorLS0tIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQJMjAxMi0xMi0xMyAyMjowMjoyNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CTIwMTItMTItMjcgMTc6NDA6MjYuNTU4MTY0NjYwICswMjAwCitAQCAtOTEsMTIgKzkxLDEzIEBACisgICAgIFthbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbltbOjNdXSkiYF0pCisgICBBQ19TVUJTVChbUFlUSE9OX1ZFUlNJT05dLCBbJGFtX2N2X3B5dGhvbl92ZXJzaW9uXSkKKyAKKy0gIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCistICBkbmwgdmFsdWVzIG9mIFBZVEhPTl9QUkVGSVggYW5kIFBZVEhPTl9FWEVDX1BSRUZJWC4gIFRoZXNlIGFyZSBtYWRlCisrICBkbmwgVXNlIHRoZSB2YWx1ZXMgb2YgJHByZWZpeCwgJGxpYmRpciBhbmQgJGV4ZWNfcHJlZml4IGZvciB0aGUgY29ycmVzcG9uZGluZworKyAgZG5sIHZhbHVlcyBvZiBQWVRIT05fUFJFRklYIFBZVEhPTl9MSUJfUFJFRklYLCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKKyAgIGRubCBkaXN0aW5jdCB2YXJpYWJsZXMgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkIGJlLiAgSG93ZXZlciwKKyAgIGRubCBnZW5lcmFsIGNvbnNlbnN1cyBpcyB0aGF0IHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIGFiaWxpdHkuCisgCisgICBBQ19TVUJTVChbUFlUSE9OX1BSRUZJWF0sIFsnJHtwcmVmaXh9J10pCisrICBBQ19TVUJTVChbUFlUSE9OX0xJQl9QUkVGSVhdLCBbJyR7bGliZGlyfSddKQorICAgQUNfU1VCU1QoW1BZVEhPTl9FWEVDX1BSRUZJWF0sIFsnJHtleGVjX3ByZWZpeH0nXSkKKyAKKyAgIGRubCBBdCB0aW1lcyAobGlrZSB3aGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMpIHlvdSBtYXkgd2FudAorQEAgLTE0OCw3ICsxNDksOCBAQAorIGVsc2U6CisgICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKyAgICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigwLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQorLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAorK3N5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiIHx8CisrICAgICBlY2hvICIkUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMiYAorICAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgorICAgICAgJGFtX3B5X3ByZWZpeCopCisgICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKK0BAIC0xNTgsNyArMTYwLDcgQEAKKyAgICAgICAgY2FzZSAkYW1fcHlfcHJlZml4IGluCisgICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKKyAgICAgICAgICAqKQorLQkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCisrCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKyAJICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CitAQCAtMTkwLDcgKzE5Miw4IEBACisgZWxzZToKKyAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworICAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDEsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCistc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCisrc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSIgfHwKKysgICAgIGVjaG8gIiRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcyJgCisgICAgICBjYXNlICRhbV9jdl9weXRob25fcHlleGVjZGlyIGluCisgICAgICAkYW1fcHlfZXhlY19wcmVmaXgqKQorICAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKK0BAIC0yMDAsNyArMjAzLDcgQEAKKyAgICAgICAgY2FzZSAkYW1fcHlfZXhlY19wcmVmaXggaW4KKyAgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgICopCistCSAgIGFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JFBZVEhPTl9FWEVDX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKysJICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0xJQl9QUkVGSVgvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKyAJICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzNkYzIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlXzEuMTUuYmIKQEAgLTAsMCArMSwzNCBAQAorcmVxdWlyZSBhdXRvbWFrZS5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImF1dG9jb25mLW5hdGl2ZSIKKworTkFNRVZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitSREVQRU5EU18ke1BOfSArPSAiXAorICAgIGF1dG9jb25mIFwKKyAgICBwZXJsIFwKKyAgICBwZXJsLW1vZHVsZS1ieXRlcyBcCisgICAgcGVybC1tb2R1bGUtZGF0YS1kdW1wZXIgXAorICAgIHBlcmwtbW9kdWxlLXN0cmljdCBcCisgICAgcGVybC1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIFwKKyAgICBwZXJsLW1vZHVsZS10aHJlYWQtcXVldWUgXAorICAgIHBlcmwtbW9kdWxlLXRocmVhZHMgXAorICAgIHBlcmwtbW9kdWxlLXZhcnMgIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiYXV0b2NvbmYtbmF0aXZlIHBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vcHl0aG9uLWxpYmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYnVpbGR0ZXN0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzE2OTQ2YTEwNWNhMjI4YWI1NDVmYzM3YTcwZGYzYTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzk0NmU5NDVhOTZlMjgxNTJiYTVhNmJlYjA2MjVjYTcxNWM2ZTMyYWM1NWYyZTM1M2VmNTRkZWYwYzhlZDkyNCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEVSTD0ke1VTUkJJTlBBVEh9L3BlcmwiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjUuMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MTdmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy0yLjI1LjEuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK0xJQ19GSUxFU19DSEtTVU09IlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2XAorICAgIGZpbGU6Ly9nYXMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTJcCisgICAgZmlsZTovL2luY2x1ZGUvQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgIGZpbGU6Ly9saWJpYmVydHkvQ09QWUlORy5MSUI7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3XAorICAgIGZpbGU6Ly9iZmQvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgIgorCitkZWYgYmludXRpbHNfYnJhbmNoX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KKworQklOVVBWID0gIiR7QGJpbnV0aWxzX2JyYW5jaF92ZXJzaW9uKGQpfSIKKworU1JDUkVWID0gIjJiZDI1OTMwMjIxZGVhNGJmMzNjMTNhODljMTExNTE0NDkxNDQwZTIiCitTUkNfVVJJID0gIlwKKyAgICAgZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L2JpbnV0aWxzLWdkYi5naXQ7YnJhbmNoPWJpbnV0aWxzLSR7QklOVVBWfS1icmFuY2g7cHJvdG9jb2w9Z2l0IFwKKyAgICAgZmlsZTovLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaCBcCisgICAgIGZpbGU6Ly9iaW51dGlscy1vY3Rlb24zLnBhdGNoIFwKKyAgICAgZmlsZTovL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggXAorICAgICAiCitTICA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICBybSAtcmYgJHtTfS9nZGIgJHtTfS9saWJkZWNudW1iZXIgJHtTfS9yZWFkbGluZSAke1N9L3NpbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNDY0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwyOSBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitTVU1NQVJZID0gIkdOVSBiaW5hcnkgdXRpbGl0aWVzIChjcm9zcy1jYW5hZGlhbiBmb3IgJHtUQVJHRVRfQVJDSH0gdGFyZ2V0KSIKK1BOID0gImJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitCUE4gPSAiYmludXRpbHMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHZpcnR1YWwvJHtIT1NUX1BSRUZJWH1nY2MtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstbGliYyBuYXRpdmVzZGstemxpYiBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstZmxleCIKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9JHtTREtQQVRIfS9zeXNyb290cy8ke1RVTkVfUEtHQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSBcCisgICAgICAgICAgICAgICAgIgorCisjIFdlIGhhdmUgdG8gcG9pbnQgYmludXRpbHMgYXQgYSBzeXNyb290IGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHJlYnVpbGQgaWYgdGhpcyBjaGFuZ2VzCisjIGUuZy4gd2Ugc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IG1hY2hpbmVzIHdpdGggZGlmZmVyZW50IHR1bmVzLgorRVhUUkFfT0VDT05GW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX1BLR0FSQ0giCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBsaWJzIG9yIGhlYWRlcnMsIHRoZXNlIHdvdWxkIGNvbWUgZnJvbSB0aGUgCisJIyBuYXRpdmVzZGsgb3IgdGFyZ2V0IHZlcnNpb24gb2YgdGhlIGJpbnV0aWxzIHJlY2lwZQorCXJtIC1yZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30KKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmJmZCoKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmliZXJ0eSoKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYm9wY29kZXMqCisJcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vKi5oCisJCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKworQkJDTEFTU0VYVEVORCA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGJhYTAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuXzIuMjUuMS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgYmludXRpbHMuaW5jCityZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYworcmVxdWlyZSBiaW51dGlscy1jcm9zcy1jYW5hZGlhbi5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkM2Q4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK2luaGVyaXQgY3Jvc3MKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIgorCitQTiA9ICJiaW51dGlscy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJiaW51dGlscyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1pbnN0YWxsLWxpYmJmZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBcCisgICAgICAgICAgICAgICAgIgorZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisKKwkjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoZXNlLCBzbyB3ZSdsbCByZW1vdmUgdGhlbS4uLgorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtsaWJkaXJfbmF0aXZlfS9saWJpYmVydHkuYQorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke1RBUkdFVF9TWVN9CisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2xpYi9sZHNjcmlwdHMKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvaW5mbworCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZS9sb2NhbGUKKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUvbWFuCisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vc2hhcmUgfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn02NC9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke2xpYmRpcn0gfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfTY0IHx8IDoKKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8ke3ByZWZpeH0gfHwgOgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI1LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkMWY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc18yLjI1LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKK3JlcXVpcmUgYmludXRpbHMtY3Jvc3MuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODgxMDZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3Nzc2RrXzIuMjUuMS5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGJpbnV0aWxzLWNyb3NzXyR7UFZ9LmJiCisKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiYmludXRpbHMtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0iCisKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pICdzIy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWIjJHtTREtQQVRITkFUSVZFfS9saWIgJHtTREtQQVRITkFUSVZFfS91c3IvbGliIC91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWIjJyAke1N9L2xkL2NvbmZpZ3VyZS50Z3QKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMuaW5jCkBAIC0wLDAgKzEsMTUzIEBACitTVU1NQVJZID0gIkdOVSBiaW5hcnkgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBCaW51dGlscyBhcmUgYSBjb2xsZWN0aW9uIG9mIGJpbmFyeSB0b29scy4gXAorVGhlIG1haW4gb25lcyBhcmUgbGQgKEdOVSBMaW5rZXIpLCBhbmQgYXMgKEdOVSBBc3NlbWJsZXIpLiBUaGlzIFwKK3BhY2thZ2UgYWxzbyBpbmNsdWRlcyBhZGRpdGlvbiB0b29scyBzdWNoIGFzIGFkZHIybGluZSAoQ29udmVydHMgXAorYWRkcmVzc2VzIGludG8gZmlsZW5hbWVzIGFuZCBsaW5lIG51bWJlcnMpLCBhciAodXRpbGl0eSBmb3IgY3JlYXRpbmcsIFwKK21vZGlmeWluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcyksIG5tIChsaXN0IHN5bWJvbHMgaW4gb2JqZWN0IFwKK2ZpbGVzKSwgb2JqY29weSAoY29weSBhbmQgdHJhbnNsYXRlIG9iamVjdCBmaWxlcyksIG9iamR1bXAgKERpc3BsYXkgXAorb2JqZWN0IGluZm9ybWF0aW9uKSwgYW5kIG90aGVyIHRvb2xzIGFuZCByZWxhdGVkIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmludXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIHpsaWItbmF0aXZlIGdudS1jb25maWctbmF0aXZlIGF1dG9jb25mLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBtdWx0aWxpYl9oZWFkZXIgdGV4aW5mbworCitGSUxFU18ke1BOfSA9ICIgXAorCSR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9KiBcCisJJHtsaWJkaXJ9L2xpYiotKi5zbyBcCisJJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyogXAorICAgICAgICAke2JpbmRpcn0vZW1iZWRzcHUiCisKK1JQUk9WSURFU18ke1BOfSArPSAiJHtQTn0tc3ltbGlua3MiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIgXAorCSR7aW5jbHVkZWRpcn0gXAorCSR7bGliZGlyfS8qLmxhIFwKKwkke2xpYmRpcn0vbGliYmZkLnNvIFwKKwkke2xpYmRpcn0vbGlib3Bjb2Rlcy5zbyIKKworIyBSYXRoZXIgdGhhbiBkdXBsaWNhdGluZyBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGVzZSwgbWFrZSBvbmUKKyMgbGlzdCBhbmQgcmV1c2UgaXQuCisKK1VTRV9BTFRFUk5BVElWRVNfRk9SID0gIiBcCisJYWRkcjJsaW5lIFwKKwlhciBcCisJYXMgXAorCWMrK2ZpbHQgXAorCWVsZmVkaXQgXAorCWdwcm9mIFwKKwlsZCBcCisJbGQuYmZkIFwKKwlsZC5nb2xkIGR3cCBcCisJbm0gXAorCW9iamNvcHkgXAorCW9iamR1bXAgXAorCXJhbmxpYiBcCisJcmVhZGVsZiBcCisJc2l6ZSBcCisJc3RyaW5ncyBcCisJc3RyaXAgXAorIgorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIG1ha2VfYWx0cyA9IGQuZ2V0VmFyKCJVU0VfQUxURVJOQVRJVkVTX0ZPUiIsIFRydWUpIG9yICIiCisgICAgcHJlZml4ID0gZC5nZXRWYXIoIlRBUkdFVF9QUkVGSVgiLCBUcnVlKQorICAgIGJpbmRpciA9IGQuZ2V0VmFyKCJiaW5kaXIiLCBUcnVlKQorICAgIGZvciBhbHQgaW4gbWFrZV9hbHRzLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0LCBiaW5kaXIgKyAiLyIgKyBwcmVmaXggKyBhbHQpCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0LCBiaW5kaXIgKyAiLyIgKyBhbHQpCit9CisKKyMgRklMRVNfJHtQTn0tZGJnID0gIiR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8uZGVidWcgJHtwcmVmaXh9LyR7bGliZGlyfS8uZGVidWciCisKK0IgPSAiJHtTfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtd2Vycm9yIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wbHVnaW5zIFwKKyAgICAgICAgICAgICAgICAke0xER09MRH0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbXVsdGlhcmNoJywgJy0tZW5hYmxlLTY0LWJpdC1iZmQnLCAnJywgZCl9IgorCitMREdPTERfY2xhc3MtbmF0aXZlID0gIiIKK0xER09MRF9jbGFzcy1jcm9zc3NkayA9ICIiCitMREdPTEQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICctLWVuYWJsZS1nb2xkPWRlZmF1bHQgLS1lbmFibGUtdGhyZWFkcycsICctLWVuYWJsZS1nb2xkIC0tZW5hYmxlLWxkPWRlZmF1bHQnLCBkKX0iCisKKyMgVGhpcyBpcyBuZWNlc3NhcnkgZHVlIHRvIGEgYnVnIGluIHRoZSBiaW51dGlscyBNYWtlZmlsZXMKKyMgRVhUUkFfT0VNQUtFID0gImNvbmZpZ3VyZS1idWlsZC1saWJpYmVydHkgYWxsIgorCitleHBvcnQgQVIgPSAiJHtIT1NUX1BSRUZJWH1hciIKK2V4cG9ydCBBUyA9ICIke0hPU1RfUFJFRklYfWFzIgorZXhwb3J0IExEID0gIiR7SE9TVF9QUkVGSVh9bGQiCitleHBvcnQgTk0gPSAiJHtIT1NUX1BSRUZJWH1ubSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtIT1NUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgT0JKQ09QWSA9ICIke0hPU1RfUFJFRklYfW9iamNvcHkiCitleHBvcnQgT0JKRFVNUCA9ICIke0hPU1RfUFJFRklYfW9iamR1bXAiCisKK2V4cG9ydCBBUl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hciIKK2V4cG9ydCBBU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hcyIKK2V4cG9ydCBMRF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1sZCIKK2V4cG9ydCBOTV9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1ubSIKK2V4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9cmFubGliIgorCitleHBvcnQgQ0NfRk9SX0hPU1QgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9IgorZXhwb3J0IENYWF9GT1JfSE9TVCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdjYyAke0hPU1RfQ0NfQVJDSH0iCisKKyMgYXV0b3Rvb2xzLmJiY2xhc3Mgc2V0cyB0aGUgX0ZPUl9CVUlMRCB2YXJpYWJsZXMsIGJ1dCBmb3Igc29tZSByZWFzb24gd2UgbmVlZAorIyB0byB1bnNldCBMRF9MSUJSQVJZX1BBVEguCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIkxEX0xJQlJBUllfUEFUSD0gJHtCVUlMRF9DQ30iCisKK01VTFRJQVJDSCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJtdWx0aWFyY2giLCAieWVzIiwgIm5vIiwgZCl9IgorZG9fY29uZmlndXJlW3ZhcmRlcHNdICs9ICJNVUxUSUFSQ0giCitkb19jb25maWd1cmUgKCkgeworCShjZCAke1N9OyBnbnUtY29uZmlnaXplKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gZ251LWNvbmZpZ2l6ZSIKKwlvZV9ydW5jb25mCisjCisjIG11c3QgcHJpbWUgY29uZmlnLmNhY2hlIHRvIGVuc3VyZSB0aGUgYnVpbGQgb2YgbGliaWJlcnR5CisjCisJbWtkaXIgLXAgJHtCfS9idWlsZC0ke0JVSUxEX1NZU30KKwlmb3IgaSBpbiAke0NPTkZJR19TSVRFfTsgZG8KKwkJY2F0ICRpID4+ICR7Qn0vYnVpbGQtJHtCVUlMRF9TWVN9L2NvbmZpZy5jYWNoZSB8fCB0cnVlCisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGVzZSwgc28gd2UnbGwgcmVtb3ZlIHRoZW0uLi4KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9sZHNjcmlwdHMKKworCSMgRml4IHRoZSAvdXNyLyR7VEFSR0VUX1NZU30vYmluLyogbGlua3MKKwlmb3IgbCBpbiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyo7IGRvCisJCXJtIC1mICRsCisJCWxuIC1zZiBgZWNobyAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4gXAorCQkJfCB0ciAtcyAvIFwKKwkJCXwgc2VkIC1lICdzLF4vLCwnIC1lICdzLFteL10qLC4uLGcnYCR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9YGJhc2VuYW1lICRsYCAkbAorCWRvbmUKKworCSMgSW5zdGFsbCB0aGUgbGliaWJlcnR5IGhlYWRlcgorCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvYW5zaWRlY2wuaCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9saWJpYmVydHkuaCAke0R9JHtpbmNsdWRlZGlyfQorCisJY2QgJHtEfSR7YmluZGlyfQorCisJIyBTeW1saW5rcyBmb3IgZWFzZSBvZiBydW5uaW5nIHRoZXNlIG9uIHRoZSBuYXRpdmUgdGFyZ2V0CisJZm9yIHAgaW4gJHtUQVJHRVRfUFJFRklYfSogOyBkbworCQlsbiAtc2YgJHAgYGVjaG8gJHAgfCBzZWQgLWUgcywke1RBUkdFVF9QUkVGSVh9LCxgCisJZG9uZQorCisJZm9yIGFsdCBpbiAke1VTRV9BTFRFUk5BVElWRVNfRk9SfTsgZG8KKwkJcm0gLWYgJHtEfSR7YmluZGlyfS8kYWx0CisJZG9uZQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIGJmZC5oCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLXRhcmdldCA9ICIke1VTRV9BTFRFUk5BVElWRVNfRk9SfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODBjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMS1HZW5lcmF0ZS1yZWxvY2F0YWJsZS1TREtzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZjcxZWNmMjUxZjg0YjRiYmM5YjdhODMyZDVjZDRhOGJhZTk1ZDgzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NTg6NTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8xM10gR2VuZXJhdGUgcmVsb2NhdGFibGUgU0RLcworCitUaGlzIHBhdGNoIHdpbGwgbW9kaWZ5IHRoZSBFTEYgbGlua2VyIHNjcmlwdHMgc28gdGhhdCB0aGUgY3Jvc3NzZGsKK2xpbmtlciB3aWxsIGdlbmVyYXRlIGJpbmFyaWVzIHdpdGggYSA0MDk2IGJ5dGVzIFBUX0lOVEVSUCBzZWN0aW9uLiBXaGVuIHRoZSBiaW5hcmllcword2lsbCBiZSByZWxvY2F0ZWQsIGF0IFNESyBpbnN0YWxsIHRpbWUsIHRoZSBpbnRlcnByZXRlciBwYXRoIGNhbiBiZSBlYXNpbHkKK2NoYW5nZWQgYnkgdGhlIHJlbG9jYXRpbmcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1NESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2dlbnNjcmlwdHMuc2ggICAgICB8IDMgKysrCisgbGQvc2NyaXB0dGVtcGwvZWxmLnNjIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZC9nZW5zY3JpcHRzLnNoIGIvbGQvZ2Vuc2NyaXB0cy5zaAoraW5kZXggNDk5NjA3YS4uMDc1ZGQwNCAxMDA3NTUKKy0tLSBhL2xkL2dlbnNjcmlwdHMuc2gKKysrKyBiL2xkL2dlbnNjcmlwdHMuc2gKK0BAIC0yNzcsNiArMjc3LDcgQEAgREFUQV9BTElHTk1FTlRfdT0iJHtEQVRBX0FMSUdOTUVOVF91LSR7REFUQV9BTElHTk1FTlRfcn19IgorIExEX0ZMQUc9cgorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRfcn0KKyBERUZBVUxUX0RBVEFfQUxJR05NRU5UPSJBTElHTigke1NFR01FTlRfU0laRX0pIgorK1BBUlRJQUxfTElOS0lORz0iICIKKyAoIGVjaG8gIi8qIFNjcmlwdCBmb3IgbGQgLXI6IGxpbmsgd2l0aG91dCByZWxvY2F0aW9uICovIgorICAgLiAke0NVU1RPTUlaRVJfU0NSSVBUfQorICAgLiAke3NyY2Rpcn0vc2NyaXB0dGVtcGwvJHtTQ1JJUFRfTkFNRX0uc2MKK0BAIC0yODUsMTAgKzI4NiwxMiBAQCBERUZBVUxUX0RBVEFfQUxJR05NRU5UPSJBTElHTigke1NFR01FTlRfU0laRX0pIgorIExEX0ZMQUc9dQorIERBVEFfQUxJR05NRU5UPSR7REFUQV9BTElHTk1FTlRfdX0KKyBDT05TVFJVQ1RJTkc9IiAiCisrUEFSVElBTF9MSU5LSU5HPSIgIgorICggZWNobyAiLyogU2NyaXB0IGZvciBsZCAtVXI6IGxpbmsgdy9vdXQgcmVsb2NhdGlvbiwgZG8gY3JlYXRlIGNvbnN0cnVjdG9ycyAqLyIKKyAgIC4gJHtDVVNUT01JWkVSX1NDUklQVH0KKyAgIC4gJHtzcmNkaXJ9L3NjcmlwdHRlbXBsLyR7U0NSSVBUX05BTUV9LnNjCisgKSB8IHNlZCAtZSAnL14gKiQvZDtzL1sgCV0qJC8vJyA+IGxkc2NyaXB0cy8ke0VNVUxBVElPTl9OQU1FfS54dQorK3Vuc2V0IFBBUlRJQUxfTElOS0lORworIAorIExEX0ZMQUc9CisgREFUQV9BTElHTk1FTlQ9JHtEQVRBX0FMSUdOTUVOVF99CitkaWZmIC0tZ2l0IGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjIGIvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCitpbmRleCA0MzY4ZmQ5Li45ZjAxZThjIDEwMDY0NAorLS0tIGEvbGQvc2NyaXB0dGVtcGwvZWxmLnNjCisrKysgYi9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKK0BAIC0xMzEsOCArMTMxLDggQEAgaWYgdGVzdCAtbiAiJHtDT01NT05QQUdFU0laRX0iOyB0aGVuCisgICBEQVRBX1NFR01FTlRfRU5EPSIuID0gREFUQV9TRUdNRU5UX0VORCAoLik7IgorICAgREFUQV9TRUdNRU5UX1JFTFJPX0VORD0iLiA9IERBVEFfU0VHTUVOVF9SRUxST19FTkQgKCR7U0VQQVJBVEVfR09UUExULTB9LCAuKTsiCisgZmkKKy1pZiB0ZXN0IC16ICIke0lOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlN9JHtDUkVBVEVfU0hMSUJ9IjsgdGhlbgorLSAgSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUz0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCkgfSIKKytpZiB0ZXN0IC16ICIke0lOSVRJQUxfUkVBRE9OTFlfU0VDVElPTlN9JHtDUkVBVEVfU0hMSUJ9JHtQQVJUSUFMX0xJTktJTkd9IjsgdGhlbgorKyAgSU5JVElBTF9SRUFET05MWV9TRUNUSU9OUz0iLmludGVycCAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmludGVycCk7IC4gPSAweDEwMDA7IH0iCisgZmkKKyBpZiB0ZXN0IC16ICIkUExUIjsgdGhlbgorICAgSVBMVD0iLmlwbHQgICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmlwbHQpIH0iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlMjFkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAyLWNvbmZpZ3VyZS13aWRlbi10aGUtcmVnZXhwLWZvci1TSC1hcmNoaXRlY3R1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gZGZiY2ZiMGQ3MTc2NWIzMzdlNjM1NjIyOTlhOTQzMDQzOTI4ZDJkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MDc6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8xM10gY29uZmlndXJlOiB3aWRlbiB0aGUgcmVnZXhwIGZvciBTSCBhcmNoaXRlY3R1cmVzCisKK2dwcm9mIG5lZWRzIHRvIGtub3cgYWJvdXQgdWNsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgICAgIHwgNCArKy0tCisgZ3Byb2YvY29uZmlndXJlIHwgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA4NzY3N2JjLi5lOWYyZjEzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0zMzQxLDcgKzMzNDEsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICAgIDs7CisgICBzMzkwLSotKiB8IHMzOTB4LSotKikKKyAgICAgOzsKKy0gIHNoLSotKiB8IHNoWzM0XSotKi0qKQorKyAgc2gqLSotKiB8IHNoWzM0XSotKi0qKQorICAgICA7OworICAgc2g2NC0qLSogfCBzaDUqLSotKikKKyAgICAgOzsKK0BAIC0zODEyLDcgKzM4MTIsNyBAQCBjYXNlICIke3RhcmdldH0iIGluCisgICBvcjFrKi0qLSopCisgICAgIG5vY29uZmlnZGlycz0iJG5vY29uZmlnZGlycyBnZGIiCisgICAgIDs7CistICBzaC0qLSogfCBzaDY0LSotKikKKysgIHNoKi0qLSogfCBzaDY0LSotKikKKyAgICAgY2FzZSAiJHt0YXJnZXR9IiBpbgorICAgICAgIHNoKi0qLWVsZikKKyAgICAgICAgICA7OworZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQoraW5kZXggYjA5YzhmYi4uNzk5NjFjNSAxMDA3NTUKKy0tLSBhL2dwcm9mL2NvbmZpZ3VyZQorKysrIGIvZ3Byb2YvY29uZmlndXJlCitAQCAtNTg2OSw2ICs1ODY5LDExIEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorK2xpbnV4LXVjbGliYyopCisrICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKysgIDs7CisrCisgbmV0YnNkKikKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Y2U3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMy1Qb2ludC1zY3JpcHRzLWxvY2F0aW9uLXRvLWxpYmRpci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGRmYjE0MTJkYTY3YmJmZTNlOTkzZDEwN2QwYjVlMzkyZjQ0MTQxYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjA5OjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMTNdIFBvaW50IHNjcmlwdHMgbG9jYXRpb24gdG8gbGliZGlyCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGQvTWFrZWZpbGUuYW0gfCAyICstCisgbGQvTWFrZWZpbGUuaW4gfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZC9NYWtlZmlsZS5hbSBiL2xkL01ha2VmaWxlLmFtCitpbmRleCA5NTc1ZjFmLi44NGRmMGJmIDEwMDY0NAorLS0tIGEvbGQvTWFrZWZpbGUuYW0KKysrKyBiL2xkL01ha2VmaWxlLmFtCitAQCAtNTQsNyArNTQsNyBAQCBlbmRpZgorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIAorIEVNVUwgPSBARU1VTEAKKyBFTVVMQVRJT05fT0ZJTEVTID0gQEVNVUxBVElPTl9PRklMRVNACitkaWZmIC0tZ2l0IGEvbGQvTWFrZWZpbGUuaW4gYi9sZC9NYWtlZmlsZS5pbgoraW5kZXggOWY1NmNhMS4uMjcyODYwZiAxMDA2NDQKKy0tLSBhL2xkL01ha2VmaWxlLmluCisrKysgYi9sZC9NYWtlZmlsZS5pbgorQEAgLTM4OCw3ICszODgsNyBAQCBBTV9DRkxBR1MgPSAkKFdBUk5fQ0ZMQUdTKQorICMgV2UgcHV0IHRoZSBzY3JpcHRzIGluIHRoZSBkaXJlY3RvcnkgJChzY3JpcHRkaXIpL2xkc2NyaXB0cy4KKyAjIFdlIGNhbid0IHB1dCB0aGUgc2NyaXB0cyBpbiAkKGRhdGFkaXIpIGJlY2F1c2UgdGhlIFNFQVJDSF9ESVIKKyAjIGRpcmVjdGl2ZXMgbmVlZCB0byBiZSBkaWZmZXJlbnQgZm9yIG5hdGl2ZSBhbmQgY3Jvc3MgbGlua2Vycy4KKy1zY3JpcHRkaXIgPSAkKHRvb2xkaXIpL2xpYgorK3NjcmlwdGRpciA9ICQobGliZGlyKQorIEJBU0VESVIgPSAkKHNyY2RpcikvLi4KKyBCRkRESVIgPSAkKEJBU0VESVIpL2JmZAorIElOQ0RJUiA9ICQoQkFTRURJUikvaW5jbHVkZQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2NkMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDMxMjY2MDhiOGM5NWE3OTJhZGU1NmNmNjJhNTMxZDkzNWQzOTFjNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjI3OjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTNdIE9ubHkgZ2VuZXJhdGUgYW4gUlBBVEggZW50cnkgaWYgTERfUlVOX1BBVEggaXMgbm90CisgZW1wdHkKKworZm9yIGNhc2VzIHdoZXJlIC1ycGF0aCBpc24ndCBzcGVjaWZpZWQuIGRlYmlhbiAoIzE1MTAyNCkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIENoaW1lbGlzIDxjaHJpc0BkZWJpYW4ub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2VtdWx0ZW1wbC9lbGYzMi5lbSB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbSBiL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQoraW5kZXggMzZkZWU4ZS4uMDdiZWE1MiAxMDA2NDQKKy0tLSBhL2xkL2VtdWx0ZW1wbC9lbGYzMi5lbQorKysrIGIvbGQvZW11bHRlbXBsL2VsZjMyLmVtCitAQCAtMTE5OCw2ICsxMTk4LDggQEAgZnJhZ21lbnQgPDxFT0YKKyAJICAgICAgJiYgY29tbWFuZF9saW5lLnJwYXRoID09IE5VTEwpCisgCSAgICB7CisgCSAgICAgIGxpYl9wYXRoID0gKGNvbnN0IGNoYXIgKikgZ2V0ZW52ICgiTERfUlVOX1BBVEgiKTsKKysJICAgICAgaWYgKChsaWJfcGF0aCkgJiYgKHN0cmxlbiAobGliX3BhdGgpID09IDApKQorKwkJICBsaWJfcGF0aCA9IE5VTEw7CisgCSAgICAgIGlmIChnbGQke0VNVUxBVElPTl9OQU1FfV9zZWFyY2hfbmVlZGVkIChsaWJfcGF0aCwgJm4sCisgCQkJCQkJICAgICAgZm9yY2UpKQorIAkJYnJlYWs7CitAQCAtMTQ2MSw2ICsxNDYzLDggQEAgZ2xkJHtFTVVMQVRJT05fTkFNRX1fYmVmb3JlX2FsbG9jYXRpb24gKHZvaWQpCisgICBycGF0aCA9IGNvbW1hbmRfbGluZS5ycGF0aDsKKyAgIGlmIChycGF0aCA9PSBOVUxMKQorICAgICBycGF0aCA9IChjb25zdCBjaGFyICopIGdldGVudiAoIkxEX1JVTl9QQVRIIik7CisrICBpZiAoKHJwYXRoKSAmJiAoc3RybGVuIChycGF0aCkgPT0gMCkpCisrICAgIHJwYXRoID0gTlVMTDsKKyAKKyAgIGZvciAoYWJmZCA9IGxpbmtfaW5mby5pbnB1dF9iZmRzOyBhYmZkOyBhYmZkID0gYWJmZC0+bGluay5uZXh0KQorICAgICBpZiAoYmZkX2dldF9mbGF2b3VyIChhYmZkKSA9PSBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQ5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNS1FeHBsaWNpdGx5LWxpbmstd2l0aC1saWJtLW9uLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGYxNzAzYmNjN2E1YzUwN2U0NzFlMjYzMGI1YTJkZTEyOTEwMDMxNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjMyOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTNdIEV4cGxpY2l0bHkgbGluayB3aXRoIGxpYm0gb24gdWNsaWJjCisKK0Rlc2NyaXB0aW9uOgorCitXZSBkbyBub3QgbmVlZCB0byBoYXZlIHRoZSBsaWJ0b29sIHBhdGNoIGFueW1vcmUgZm9yIGJpbnV0aWxzIGFmdGVyCitsaWJ0b29sIGhhcyBiZWVuIHVwZGF0ZWQgdXBzdHJlYW0gaXQgaW5jbHVkZSBzdXBwb3J0IGZvciBpdC4gSG93ZXZlcgorZm9yIGJ1aWxkaW5nIGdhcyBuYXRpdmVseSBvbiB1Y2xpYmMgc3lzdGVtcyB3ZSBoYXZlIHRvIGxpbmsgaXQgd2l0aAorLWxtIHNvIHRoYXQgaXQgcGlja3MgdXAgbWlzc2luZyBzeW1ib2xzLgorCisvbG9jYWwvYnVpbGRfYXJlYS9CVUlMRC9hcm1fdjV0X2xlX3VjbGliYy9iaW51dGlscy0yLjE3LjUwL29iamRpci9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hKGZsb2F0Zm9ybWF0Lm8pOgorSW4gZnVuY3Rpb24gYGZsb2F0Zm9ybWF0X2Zyb21fZG91YmxlJzoKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MWVjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZnJleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDJmOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworL2xvY2FsL2J1aWxkX2FyZWEvQlVJTEQvYXJtX3Y1dF9sZV91Y2xpYmMvYmludXRpbHMtMi4xNy41MC9vYmpkaXIvbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYShmbG9hdGZvcm1hdC5vKToKK0luIGZ1bmN0aW9uIGBmbG9hdGZvcm1hdF90b19kb3VibGUnOgorZmxvYXRmb3JtYXQuYzooLnRleHQrMHgzOGEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4M2QyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDQzZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHg0ZTIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2NvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCittYWtlWzRdOiAqKiogW2FzLW5ld10gRXJyb3IgMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWd1cmUudGd0IHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlLnRndCBiL2dhcy9jb25maWd1cmUudGd0CitpbmRleCA5YWJjNzY4Li4xZDkyZjU1IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2dhcy9jb25maWd1cmUudGd0CitAQCAtNDc3LDYgKzQ3NywxMiBAQCBjYXNlICR7Z2VuZXJpY190YXJnZXR9IGluCisgICAqLSotbmV0d2FyZSkJCQkJZm10PWVsZiBlbT1uZXR3YXJlIDs7CisgZXNhYworIAorK2Nhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KKysgIGFybS0qLSp1Y2xpYmMqKQorKyAgICBuZWVkX2xpYm09eWVzCisrICAgIDs7CisrZXNhYworKworIGNhc2UgJHtjcHVfdHlwZX0gaW4KKyAgIGFhcmNoNjQgfCBhbHBoYSB8IGFybSB8IGkzODYgfCBpYTY0IHwgbWljcm9ibGF6ZSB8IG1pcHMgfCBuczMyayB8IG9yMWsgfCBvcjFrbmQgfCBwZHAxMSB8IHBwYyB8IHNwYXJjIHwgejgwIHwgejhrKQorICAgICBiZmRfZ2FzPXllcworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNi1Vc2UtbGlidG9vbC0yLjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5NjdlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaApAQCAtMCwwICsxLDE5MzYxIEBACitGcm9tIDAzZWI5YjRmZTU4M2U4OGEyMmZkOGMyNWI0M2ZiZDliYWZlMjFhZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM0OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTNdIFVzZSBsaWJ0b29sIDIuNAorCitTbyB3ZSBjYW4gZ2V0IGxpYnRvb2wgc3lzcm9vdCBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2NvbmZpZ3VyZSAgICAgICAgfCAxMzIwICsrKysrKysrKysrKysrKysrLS0tLS0tCisgYmZkL2NvbmZpZ3VyZS5hYyAgICAgfCAgICAyICstCisgYmludXRpbHMvY29uZmlndXJlICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgY29uZmlndXJlICAgICAgICAgICAgfCAgICAyICstCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgfCAxMzE4ICsrKysrKysrKysrKysrKysrLS0tLS0tCisgZ3Byb2YvY29uZmlndXJlICAgICAgfCAxMzIzICsrKysrKysrKysrKysrKysrLS0tLS0tCisgbGQvY29uZmlndXJlICAgICAgICAgfCAxNzAxICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgbGlidG9vbC5tNCAgICAgICAgICAgfCAxMDg2ICsrKysrKysrKysrKystLS0tLS0KKyBsdG1haW4uc2ggICAgICAgICAgICB8IDI5MjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyBsdG9wdGlvbnMubTQgICAgICAgICB8ICAgIDIgKy0KKyBsdHZlcnNpb24ubTQgICAgICAgICB8ICAgMTIgKy0KKyBsdH5vYnNvbGV0ZS5tNCAgICAgICB8ICAgIDIgKy0KKyBvcGNvZGVzL2NvbmZpZ3VyZSAgICB8IDEzMjAgKysrKysrKysrKysrKysrKystLS0tLS0KKyBvcGNvZGVzL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAxNCBmaWxlcyBjaGFuZ2VkLCA4OTUyIGluc2VydGlvbnMoKyksIDMzODEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlndXJlIGIvYmZkL2NvbmZpZ3VyZQoraW5kZXggODVlNmI4Mi4uM2QzZGQ4OCAxMDA3NTUKKy0tLSBhL2JmZC9jb25maWd1cmUKKysrKyBiL2JmZC9jb25maWd1cmUKK0BAIC02NjgsNiArNjY4LDkgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisrYWNfY3RfQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc4MCw2ICs3ODMsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDU2LDYgKzE0NjAsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbW1hcCAgICAgICAgICAgICB0cnkgdXNpbmcgbW1hcCBmb3IgQkZEIGlucHV0IGZpbGVzIGlmIGF2YWlsYWJsZQorICAgLS13aXRoLXNlcGFyYXRlLWRlYnVnLWRpcj1ESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGdsb2JhbCBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGluIERJUgorQEAgLTUzODYsOCArNTM5Miw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01NDI3LDcgKzU0MzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC02MTEzLDggKzYxMTksOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNjE2Myw2ICs2MTY5LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MTc5LDYgKzYyNTksMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYzNDcsNyArNjQzMiw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02NTAxLDYgKzY1ODcsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02NTE2LDkgKzY2MTcsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY1MzQsNyArNjc4OCw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1NTQsMTEgKzY4MDgsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjU3NCw3ICs2ODMyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY1OTMsNiArNjg1MSwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjYwNCwxNiArNjg2Niw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY5NTUsOCArNzI3Myw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjk5Miw2ICs3MzEwLDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTcwMzMsNiArNzM1MiwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC03MDQ0LDcgKzczNzUsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC03MDcwLDggKzc0MDEsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC03MDgxLDggKzc0MTIsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC03MTE5LDYgKzc0NTAsMTYgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC03MTQwLDYgKzc0ODEsNDUgQEAgZmkKKyAKKyAKKyAKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworQEAgLTczNDYsNiArNzcyNiwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzkwOSw2ICs4NDA2LDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTgwNzMsNyArODU3Miw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC04MTYyLDcgKzg2NjIsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTg0NjAsOCArODk2MCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODYyNyw2ICs5MTI1LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODY4OSw3ICs5MTkzLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTg3NDYsMTMgKzkyNTAsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODgxMyw2ICs5MzIxLDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtOTE2Myw3ICs5Njc2LDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtOTIxMSw3ICs5NzI1LDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtOTI2MiwxMiArOTc3NiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05MjgxLDggKzk3OTUsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTMwMCw4ICs5ODE0LDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkzNDcsOCArOTg2MSw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NDc4LDcgKzk5OTIsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTQ5MSwyMiArMTAwMTEsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTk1MTgsNyArMTAwNDUsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk1MzEsMjIgKzEwMDY0LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTU5MSwyMCArMTAxMzEsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NjY1LDcgKzEwMjQ4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTY3Myw3ICsxMDI1Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk2ODksNyArMTAyNzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTcxMywxMCArMTAyOTYsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05Nzk1LDIzICsxMDM3OCwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTg5Niw3ICsxMDQ5Miw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk5MTUsOSArMTA1MTEsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTA0OTMsOCArMTEwODksOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTA1MjcsMTMgKzExMTI0LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDYyNSw3ICsxMTI4MCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTQ2NSwxMCArMTIxMjAsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTU3MSwxMCArMTIyMjYsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTE2Myw3ICsxNTgxOCw3IEBAIFNIQVJFRF9MREZMQUdTPQorIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KK0BAIC0xNjc4MCwxMyArMTc0MzUsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNjgwMSwxNCArMTc0NjMsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY4NDEsMTIgKzE3NTA2LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2OTAxLDggKzE3NTY2LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNjkxMiwxMiArMTc1ODIsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE2OTMzLDcgKzE3NjA1LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTY5NjksNiArMTc2NDAsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE3NzQ4LDcgKzE4NDIwLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNzg1MSwxOSArMTg1MjQsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTc4OTMsNiArMTg1ODksMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTc5MDIsNiArMTg2MDQsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE4MDE2LDEyICsxODcyMSwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xODEwOCw5ICsxODgxMyw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE4MTI2LDYgKzE4ODI4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xODE1OCwyMTAgKzE4ODYzLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlndXJlLmFjIGIvYmZkL2NvbmZpZ3VyZS5hYworaW5kZXggYmE5OGUzOS4uODgwNjNjZiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWd1cmUuYWMKKysrKyBiL2JmZC9jb25maWd1cmUuYWMKK0BAIC01NjQsNyArNTY0LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgIyBNb3JlIGhhY2tzIHRvIGJ1aWxkIERMTHMgb24gV2luZG93cy4KK2RpZmYgLS1naXQgYS9iaW51dGlscy9jb25maWd1cmUgYi9iaW51dGlscy9jb25maWd1cmUKK2luZGV4IGJlNGI4MWMuLjY2MDZhNWYgMTAwNzU1CistLS0gYS9iaW51dGlscy9jb25maWd1cmUKKysrKyBiL2JpbnV0aWxzL2NvbmZpZ3VyZQorQEAgLTY1NSw4ICs2NTUsMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzY3LDYgKzc3MCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0MzksNiArMTQ0Myw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC16bGliICAgICAgICAgICAgIGluY2x1ZGUgemxpYiBzdXBwb3J0IChhdXRvL3llcy9ubykgZGVmYXVsdD1hdXRvCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgZGVmYXVsdD1ubworICAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorQEAgLTUxNTMsOCArNTE1OSw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01MTk0LDcgKzUyMDAsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01ODgwLDggKzU4ODYsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTkzMCw2ICs1OTM2LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01OTQ2LDYgKzYwMjYsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTYxMTQsNyArNjE5OSw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MjY4LDYgKzYzNTQsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MjgzLDkgKzYzODQsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYzMDEsNyArNjU1NSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzMjEsMTEgKzY1NzUsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjM0MSw3ICs2NTk5LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYzNjAsNiArNjYxOCwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjM3MSwxNiArNjYzMyw3MiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisgCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKyAKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorIAorK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorIAorIAorIAorQEAgLTY3MjIsOCArNzA0MCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjc1OSw2ICs3MDc3LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY4MDAsNiArNzExOSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02ODExLDcgKzcxNDIsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02ODM3LDggKzcxNjgsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02ODQ4LDggKzcxNzksOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02ODg2LDYgKzcyMTcsMjAgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02OTA1LDYgKzcyNTAsNDEgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKyAKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK0BAIC03MTEzLDYgKzc0OTMsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc2NzYsNiArODE3Myw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03ODcxLDcgKzgzNzAsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzk2MCw3ICs4NDYwLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MjU4LDggKzg3NTgsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg0MjUsNiArODkyMywxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg0ODcsNyArODk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NTQ0LDEzICs5MDQ4LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg2MTEsNiArOTExOSwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg5NjEsNyArOTQ3NCw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTkwMDksNyArOTUyMyw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTkwNjAsMTIgKzk1NzQsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTA3OSw4ICs5NTkzLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkwOTgsOCArOTYxMiw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MTQ1LDggKzk2NTksOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTI3Niw3ICs5NzkwLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyODksMjIgKzk4MDksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkzMTYsNyArOTg0MywxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTMyOSwyMiArOTg2MiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkzODksMjAgKzk5MjksNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05NDYzLDcgKzEwMDQ2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTQ3MSw3ICsxMDA1NCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTk0ODcsNyArMTAwNzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTUxMSwxMCArMTAwOTQsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05NTkzLDIzICsxMDE3NiwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTY5NCw3ICsxMDI5MCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk3MTMsOSArMTAzMDksOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAyOTEsOCArMTA4ODcsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAzMjUsMTMgKzEwOTIyLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDQyMyw3ICsxMTA3OCw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTI2MywxMCArMTE5MTgsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTM2OSwxMCArMTIwMjQsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xNTM3MywxMyArMTYwMjgsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTM5NCwxNCArMTYwNTYsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTU0MzQsMTIgKzE2MDk5LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1NDk0LDggKzE2MTU5LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xNTUwNSwxMiArMTYxNzUsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTE1NTI2LDcgKzE2MTk4LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTU1NjIsNiArMTYyMzMsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE2MzE5LDcgKzE2OTkxLDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNjQyMiwxOSArMTcwOTUsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTY0NjQsNiArMTcxNjAsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTY0NzMsNiArMTcxNzUsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE2NTg3LDEyICsxNzI5MiwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNjY3OSw5ICsxNzM4NCw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE2Njk3LDYgKzE3Mzk5LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNjcyOSwyMTAgKzE3NDM0LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGU5ZjJmMTMuLmNiY2NiMTggMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTgwNDEsNyArODA0MSw3IEBAIGNhc2UgIiAkYnVpbGRfY29uZmlnZGlycyAiIGluCisgICAgICMgRm9yIGFuIGluc3RhbGxlZCBtYWtlaW5mbywgd2UgcmVxdWlyZSBpdCB0byBiZSBmcm9tIHRleGluZm8gNC43IG9yCisgICAgICMgaGlnaGVyLCBlbHNlIHdlIHVzZSB0aGUgIm1pc3NpbmciIGR1bW15LgorICAgICBpZiAke01BS0VJTkZPfSAtLXZlcnNpb24gXAorLSAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKig0XC4oWzctOV18WzEtOV1bMC05XSl8WzUtOV18WzEtOV1bMC05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgICB8IGVncmVwICd0ZXhpbmZvW14wLTldKihbMS0zXVswLTldfDQuWzQtOV18NC5bMS05XVswLTldK3xbNS05XSknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIDoKKyAgICAgZWxzZQorICAgICAgIE1BS0VJTkZPPSIkTUlTU0lORyBtYWtlaW5mbyIKK2RpZmYgLS1naXQgYS9nYXMvY29uZmlndXJlIGIvZ2FzL2NvbmZpZ3VyZQoraW5kZXggZTliYTU1MC4uMDc0ODg2ZiAxMDA3NTUKKy0tLSBhL2dhcy9jb25maWd1cmUKKysrKyBiL2dhcy9jb25maWd1cmUKK0BAIC02NDUsOCArNjQ1LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc1Nyw2ICs3NjAsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDIyLDYgKzE0MjYsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtemxpYiAgICAgICAgICAgICBpbmNsdWRlIHpsaWIgc3VwcG9ydCAoYXV0by95ZXMvbm8pIGRlZmF1bHQ9YXV0bworIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorQEAgLTQ5MDEsOCArNDkwNyw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC00OTQyLDcgKzQ5NDgsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC01NjI4LDggKzU2MzQsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNTY3OCw2ICs1Njg0LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC01Njk0LDYgKzU3NzQsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTU4NjIsNyArNTk0Nyw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02MDE2LDYgKzYxMDIsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02MDMxLDkgKzYxMzIsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYwNDksNyArNjMwMyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwNjksMTEgKzYzMjMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjA4OSw3ICs2MzQ3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYxMDgsNiArNjM2NiwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjExOSwxMiArNjM4MSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKyAKKyAKKyAKK0BAIC02MTM2LDYgKzYzOTYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK0BAIC02NDcwLDggKzY3ODgsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY1MDcsNiArNjgyNSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NTQ4LDYgKzY4NjcsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjU1OSw3ICs2ODkwLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjU4NSw4ICs2OTE2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjU5Niw4ICs2OTI3LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjYzNCw2ICs2OTY1LDIxIEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjY1Miw2ICs2OTk4LDQwIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisgCisgCisgCitAQCAtNjg2MSw2ICs3MjQxLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NDI0LDYgKzc5MjEsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzYxOSw3ICs4MTE4LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc3MDgsNyArODIwOCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODAwNiw4ICs4NTA2LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MTczLDYgKzg2NzEsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04MjM1LDcgKzg3MzksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODI5MiwxMyArODc5NiwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04MzU5LDYgKzg4NjcsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04NzA5LDcgKzkyMjIsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04NzU3LDcgKzkyNzEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04ODA4LDEyICs5MzIyLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTg4MjcsOCArOTM0MSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC04ODQ2LDggKzkzNjAsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODg5Myw4ICs5NDA3LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkwMjQsNyArOTUzOCwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MDM3LDIyICs5NTU3LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MDY0LDcgKzk1OTEsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwNzcsMjIgKzk2MTAsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MTM3LDIwICs5Njc3LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTIxMSw3ICs5Nzk0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTIxOSw3ICs5ODAyLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTIzNSw3ICs5ODE4LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTkyNTksMTAgKzk4NDIsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05MzQxLDIzICs5OTI0LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05NDQyLDcgKzEwMDM4LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTQ2MSw5ICsxMDA1Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDAzOSw4ICsxMDYzNSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDA3MywxMyArMTA2NzAsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwMTcxLDcgKzEwODI2LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMDExLDEwICsxMTY2NiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMTE3LDEwICsxMTc3MiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTE1Mjc0LDEzICsxNTkyOSwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1Mjk1LDE0ICsxNTk1NywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTMzNSwxMiArMTYwMDAsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUzOTUsOCArMTYwNjAsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE1NDA2LDEyICsxNjA3NiwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTU0MjcsNyArMTYwOTksNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xNTQ2Myw2ICsxNjEzNCw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTYyMjcsNyArMTY4OTksOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE2MzMwLDE5ICsxNzAwMyw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNjM3Miw2ICsxNzA2OCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNjM4MSw2ICsxNzA4Myw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTY0OTUsMTIgKzE3MjAwLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE2NTg3LDkgKzE3MjkyLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTY2MDUsNiArMTczMDcsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE2NjM3LDIxMCArMTczNDIsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2dwcm9mL2NvbmZpZ3VyZSBiL2dwcm9mL2NvbmZpZ3VyZQoraW5kZXggNzk5NjFjNS4uYzRmNmFjOSAxMDA3NTUKKy0tLSBhL2dwcm9mL2NvbmZpZ3VyZQorKysrIGIvZ3Byb2YvY29uZmlndXJlCitAQCAtNjI5LDggKzYyOSwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NDEsNiArNzQ0LDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTM5OSw2ICsxNDAzLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCitAQCAtNDgzMSw4ICs0ODM3LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTQ4NzIsNyArNDg3OCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU1NTgsOCArNTU2NCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01NjA4LDYgKzU2MTQsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU2MjQsNiArNTcwNCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNTc5Miw3ICs1ODc3LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTU4NjksMTEgKzU5NTUsNiBAQCBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgOzsKKyAKKy1saW51eC11Y2xpYmMqKQorLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKy0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC9saWIvbGlidUNsaWJjLSouc29gCistICA7OworLQorIG5ldGJzZCopCisgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKK0BAIC01OTUxLDYgKzYwMzIsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC01OTY2LDkgKzYwNjIsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5ODQsNyArNjIzMyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwMDQsMTEgKzYyNTMsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjAyNCw3ICs2Mjc3LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTYwNDMsNiArNjI5NiwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjA1NCwxMiArNjMxMSwxMCBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKyAKKyAKKyAKK0BAIC02MDcxLDYgKzYzMjYsNjQgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK0BAIC02NDA1LDggKzY3MTgsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY0NDIsNiArNjc1NSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NDgzLDYgKzY3OTcsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjQ5NCw3ICs2ODIwLDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjUyMCw4ICs2ODQ2LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjUzMSw4ICs2ODU3LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjU2OSw2ICs2ODk1LDE4IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjU5MCw2ICs2OTI4LDQzIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK0BAIC02Nzk2LDYgKzcxNzEsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTczNTksNiArNzg1MSw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03NTU0LDcgKzgwNDgsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzY0Myw3ICs4MTM4LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC03OTQxLDggKzg0MzYsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgxMDgsNiArODYwMSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTgxNzAsNyArODY2OSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04MjI3LDEzICs4NzI2LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTgyOTQsNiArODc5NywxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg2NDQsNyArOTE1Miw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg2OTIsNyArOTIwMSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTg3NDMsMTIgKzkyNTIsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtODc2Miw4ICs5MjcxLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTg3ODEsOCArOTI5MCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04ODI4LDggKzkzMzcsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtODk1OSw3ICs5NDY4LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTg5NzIsMjIgKzk0ODcsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTg5OTksNyArOTUyMSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTAxMiwyMiArOTU0MCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkwNzIsMjAgKzk2MDcsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MTQ2LDcgKzk3MjQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05MTU0LDcgKzk3MzIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05MTcwLDcgKzk3NDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTE5NCwxMCArOTc3MiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTkyNzYsMjMgKzk4NTQsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTkzNzcsNyArOTk2OCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTkzOTYsOSArOTk4Nyw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC05OTc0LDggKzEwNTY1LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMDA4LDEzICsxMDYwMCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAxMDYsNyArMTA3NTYsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTA5NDYsMTAgKzExNTk2LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEwNTIsMTAgKzExNzAyLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTI5MjQsMTMgKzEzNTc0LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTI5NDUsMTQgKzEzNjAyLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEyOTg1LDEyICsxMzY0NSwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzA0NSw4ICsxMzcwNSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTMwNTYsMTIgKzEzNzIxLDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xMzA3Nyw3ICsxMzc0NCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTEzMTEzLDYgKzEzNzc5LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xMzg2OSw3ICsxNDUzNiw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTM5NzIsMTkgKzE0NjQwLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE0MDE0LDYgKzE0NzA1LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE0MDIzLDYgKzE0NzIwLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNDEzNywxMiArMTQ4MzcsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTQyMjksOSArMTQ5MjksNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNDI0Nyw2ICsxNDk0NCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTQyNzksMjEwICsxNDk3OSwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCA0NDA4YjBkLi4yZmJhZWJmIDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC02NTQsOCArNjU0LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc3Niw2ICs3NzksNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xNDUzLDYgKzE0NTcsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgICAtLXdpdGgtbGliLXBhdGg9ZGlyMTpkaXIyLi4uICBzZXQgZGVmYXVsdCBMSUJfUEFUSAorICAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgdXNyL2xpYiBldCBhbCB3aXRoaW4gRElSLgorICAgLS13aXRoLXpsaWIgICAgICAgICAgICAgaW5jbHVkZSB6bGliIHN1cHBvcnQgKGF1dG8veWVzL25vKSBkZWZhdWx0PWF1dG8KK0BAIC01NjQ1LDggKzU2NTEsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTY4Niw3ICs1NjkyLDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNjM3Miw4ICs2Mzc4LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTY0MjIsNiArNjQyOCw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjQzOCw2ICs2NTE4LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02NjA2LDcgKzY2OTEsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjc2MCw2ICs2ODQ2LDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjc3NSw5ICs2ODc2LDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NzkzLDcgKzcwNDcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02ODEzLDExICs3MDY3LDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY4MzMsNyArNzA5MSw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02ODUyLDYgKzcxMTAsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTY4NjMsMTIgKzcxMjUsMTIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisgCisgCisgCitAQCAtNjg3OCw2ICs3MTQwLDYyIEBAIHRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworKworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKysKKysKKysKKysKKysKKyAKKyAKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCitAQCAtNzIxNCw4ICs3NTMyLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC03MjUxLDYgKzc1NjksNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNzI5Miw2ICs3NjExLDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTczMDMsNyArNzYzNCw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTczMjksOCArNzY2MCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTczNDAsOCArNzY3MSw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTczNzgsNiArNzcwOSwxOSBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworIAorIAorIAorQEAgLTczOTgsNiArNzc0Miw0MiBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNzYwNSw2ICs3OTg1LDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC04MTY4LDYgKzg2NjUsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtODIzNiw2ICs4NzM1LDE2IEBAIGRvbmUKKyAKKyAKKyAKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorKworKworKworIAorIAorICMgU2V0IG9wdGlvbnMKK0BAIC04MzY0LDcgKzg4NzMsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtODQ1Myw3ICs4OTYzLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04NzUxLDggKzkyNjEsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTg5MTgsNiArOTQyNiwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg5ODAsNyArOTQ5NCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC05MDM3LDEzICs5NTUxLDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTkxMDQsNiArOTYyMiwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTk0NTQsNyArOTk3Nyw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTk1MDIsNyArMTAwMjYsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC05NTUzLDEyICsxMDA3NywxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05NTcyLDggKzEwMDk2LDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTk1OTEsOCArMTAxMTUsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTYzOCw4ICsxMDE2Miw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NzY5LDcgKzEwMjkzLDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk3ODIsMjIgKzEwMzEyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05ODA5LDcgKzEwMzQ2LDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05ODIyLDIyICsxMDM2NSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTk4ODEsMjEgKzEwNDMxLDY0IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCistICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTk5NTYsNyArMTA1NDksNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05OTY0LDcgKzEwNTU3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTk4MCw3ICsxMDU3Myw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC0xMDAwNCwxMCArMTA1OTcsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC0xMDA4NiwyMyArMTA2NzksMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTEwMTg3LDcgKzEwNzkzLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtMTAyMDYsOSArMTA4MTIsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTA3ODQsOCArMTEzOTAsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTA4MTgsMTMgKzExNDI1LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDkxNiw3ICsxMTU4MSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTcxMiw3ICsxMjM3Nyw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExNzE1ICJjb25maWd1cmUiCisrI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTc1NiwxMCArMTI0MjEsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTgxOCw3ICsxMjQ4Myw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDExODIxICJjb25maWd1cmUiCisrI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xMTg2MiwxMCArMTI1MjcsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMjI1Nyw2ICsxMjkyMiw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAKKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSRDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgbHRfc2F2ZV9MRD0kTEQKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgIEdDQz0kR1hYCitAQCAtMTIyNzQsNiArMTI5NDAsNyBAQCAkUk0gLXIgY29uZnRlc3QqCisgICBmaQorICAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgIENDPSR7Q1hYLSJjKysifQorKyAgQ0ZMQUdTPSRDWFhGTEFHUworICAgY29tcGlsZXI9JENDCisgICBjb21waWxlcl9DWFg9JENDCisgICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KK0BAIC0xMjQxMyw4ICsxMzA4MCw4IEBAIHdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworQEAgLTEyNTU2LDcgKzEzMjIzLDEzIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAgIyBleGVjdXRhYmxlLgorLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtMTI1NjksMjIgKzEzMjQyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCisrZmkKKyAKKyAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCitAQCAtMTI1OTcsNyArMTMyNzcsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgIGVsc2UKKyAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0xMjYxMCwyMiArMTMyOTYsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKKytmaQorIAorIAkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTEyNjY4LDI5ICsxMzM2MSw3NSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCistICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKy0gICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCistICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKy0gICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKy0gICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworLQorLSAgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorLSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKy0gICAgICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKy0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCistCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGVsc2UKKy0JICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZml+CistICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworLSAgICAgICAgZmkKKy0gICAgICAgIDs7CisrCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKysJLGNsKiB8IG5vLGNsKikKKysJICAjIE5hdGl2ZSBNU1ZDCisrCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKwkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisrCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKysJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJICBsaWJleHQ9bGliCisrCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGVsc2UKKysJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBmaX4KKysJICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICAgIGxpbmtuYW1lcz0nCisrCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJworKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCisrCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAgICouZXhlfCouRVhFKSA7OworKwkgICAgICAqKQorKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJCTs7CisrCSAgICBlc2FjfgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKysJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgICAgZmknCisrCSAgOzsKKysJKikKKysJICAjIGcrKworKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBDWFgpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKysJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKysJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAKKyAKK0BAIC0xMjc5Niw3ICsxMzUzNSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgICAgIDs7CisgICAgICAgICAgICopCisgICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworQEAgLTEyODY3LDEwICsxMzYwNiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgaWE2NCopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgICopCistCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgZXNhYworIAkgICAgICBmaQorQEAgLTEyOTExLDkgKzEzNjUwLDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgICopCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJICAgICAgZWxzZQorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworIAkgICAgICBmaQorIAkgICAgZmkKKyAJICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworQEAgLTEyOTgzLDIwICsxMzcyMiwyMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CistCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgfgorKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgCQkkUkFOTElCICRvbGRsaWInCisgCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworIAkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAkgICAgICA7OworIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKyAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCitAQCAtMTMxOTEsNyArMTM5MzAsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgICAqKQorLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgIGVzYWMKKyAKK0BAIC0xMzIzNyw3ICsxMzk3Niw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICAgICAgQ0MqKQorKyAgICAgICAgICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworIAkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworQEAgLTEzMjc4LDkgKzE0MDE3LDkgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0teiAke3dsfWRlZnMnCisgCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorQEAgLTEzNDE1LDYgKzE0MTU0LDEzIEBAIHByaXZhdGU6CisgfTsKKyBfTFRfRU9GCisgCisrCisrX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKysqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKysqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisrZXNhYworKworIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEzNDI4LDcgKzE0MTc0LDcgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisgCisgICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCistICAgIGNhc2UgJHAgaW4KKysgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorIAorICAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCitAQCAtMTM0MzcsMTMgKzE0MTgzLDIyIEBAIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorIAkgcHJldj0kcAorIAkgY29udGludWUKKy0gICAgICAgZWxzZQorLQkgcHJldj0KKyAgICAgICAgZmkKKyAKKysgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKysgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisrICAgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIGVzYWMKKysgICAgICAgZmkKKysgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCistCSBjYXNlICRwIGluCistCSAtTCogfCAtUiopCisrCSBjYXNlICR7cHJldn0gaW4KKysJIC1MIHwgLVIpCisgCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKyAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCitAQCAtMTM0NjMsOCArMTQyMTgsMTAgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICR7cHJldn0ke3B9IgorIAkgZmkKKyAgICAgICAgZmkKKysgICAgICAgcHJldj0KKyAgICAgICAgOzsKKyAKKysgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgICouJG9iamV4dCkKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorQEAgLTEzNTAwLDYgKzE0MjU3LDcgQEAgZWxzZQorIGZpCisgCisgJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKyAKKyAjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC0xMzUzNSw3ICsxNDI5Myw3IEBAIGxpbnV4KikKKyAKKyBzb2xhcmlzKikKKyAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICBDQyopCisrICBDQyogfCBzdW5DQyopCisgICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworQEAgLTEzNjAwLDggKzE0MzU4LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTEzNzA2LDYgKzE0NDYyLDExIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCSAgOzsKKyAJZXNhYworIAk7OworKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisrCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKysJbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisrCTs7CisgICAgICAgZGd1eCopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgCSAgZWMrKyopCitAQCAtMTM4NTgsNyArMTQ2MTksNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworIAkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKK0BAIC0xMzkyMywxMCArMTQ2ODQsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC0xMzk4NCw2ICsxNDc1Miw4IEBAIGZpCisgCisgCisgCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtMTQxNjEsNiArMTQ5MzEsNyBAQCBmaQorICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorIAorICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGFpeFs0LTldKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtMTQxNzUsMTUgKzE0OTQ2LDIwIEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllCisgICAgIDs7CisgICBwdzMyKikKKyAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgorLSAgOzsKKysgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCistICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLzsvXi4qWyBdX19ubV9fL3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgIGNsKikgOzsKKysgICAgKikKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisgICAqKQorICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgOzsKKyAgIGVzYWMKKy0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorICRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9CitAQCAtMTQ0NDYsOCArMTUyMjIsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTQ0NzksMTMgKzE1MjU2LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xNDU3Niw3ICsxNTQxMSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xNTAzNSw2ICsxNTg3MCw3IEBAIGZpCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgICBMRENYWD0kTEQKKyAgIExEPSRsdF9zYXZlX0xECisgICBHQ0M9JGx0X3NhdmVfR0NDCitAQCAtMTc4MDcsMTMgKzE4NjQzLDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc4MjgsMTQgKzE4NjcxLDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3ODY4LDEyICsxODcxNCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzkxMiw4ICsxODc1OCw4IEBAIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlCisgY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3OTQwLDEyICsxODc4NiwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgiIHwgJFNFRCAiJGRlbGF5XworIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlic19DWFg9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoX0NYWD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlY19DWFg9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc5ODMsOCArMTg4MjksMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE3OTk0LDEyICsxODg0NSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTgwMTUsNyArMTg4NjgsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xODAzNyw4ICsxODg4OSw4IEBAIExEX0NYWCBcCisgcmVsb2FkX2ZsYWdfQ1hYIFwKKyBjb21waWxlcl9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCistbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCisrbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKKyBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKK0BAIC0xODA1MCw3ICsxODkwMiw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCistZml4X3NyY2ZpbGVfcGF0aF9DWFggXAorIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAorIGluY2x1ZGVfZXhwc3ltc19DWFggXAorIGZpbGVfbGlzdF9zcGVjX0NYWCBcCitAQCAtMTgwODQsNiArMTg5MzUsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE4MDk4LDcgKzE4OTUwLDggQEAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorIG1vZHVsZV9jbWRzX0NYWCBcCisgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCBcCisgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorLXByZWxpbmtfY21kc19DWFg7IGRvCisrcHJlbGlua19jbWRzX0NYWCBcCisrcG9zdGxpbmtfY21kc19DWFg7IGRvCisgICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCitAQCAtMTg4OTEsNyArMTk3NDQsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE4OTk0LDE5ICsxOTg0OCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xOTAzNiw2ICsxOTkxMywxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xOTA0NSw2ICsxOTkyOCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTkxNTksMTIgKzIwMDQ1LDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE5MjUxLDkgKzIwMTM3LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTkyNjksNiArMjAxNTIsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE5MzE1LDIxMCArMjAyMDEsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorQEAgLTE5NTQ2LDEyICsyMDM5MSwxMiBAQCB3aXRoX2djYz0kR0NDX0NYWAorICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAorIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKKyAKK0BAIC0xOTYzOCw5ICsyMDQ4Myw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGhfQ1hYCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19DWFgKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aF9DWFgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKyAKK0BAIC0xOTY1Niw2ICsyMDQ5OCw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorIAorZGlmZiAtLWdpdCBhL2xpYnRvb2wubTQgYi9saWJ0b29sLm00CitpbmRleCA3OTc0NjhmLi4wMmIxNWIzIDEwMDY0NAorLS0tIGEvbGlidG9vbC5tNAorKysrIGIvbGlidG9vbC5tNAorQEAgLTEsNyArMSw4IEBACisgIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCitAQCAtMTAsNyArMTEsOCBAQAorIAorIG00X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMzcsNyArMzksNyBAQCBtNF9kZWZpbmUoW19MVF9DT1BZSU5HXSwgW2RubAorICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgXSkKKyAKKy0jIHNlcmlhbCA1NiBMVF9JTklUCisrIyBzZXJpYWwgNTcgTFRfSU5JVAorIAorIAorICMgTFRfUFJFUkVRKFZFUlNJT04pCitAQCAtOTIsNyArOTQsOCBAQCBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIEFDX1NVQlNUKExJQlRPT0wpZG5sCisgCisgX0xUX1NFVFVQCitAQCAtMTY2LDEwICsxNjksMTMgQEAgX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorIGRubAorIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorIG00X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCisrbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCisgCisgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKK0BAIC0xOTksNyArMjA1LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC02MzIsNyArNjM4LDcgQEAgbTRfaWZzZXQoW0FDX1BBQ0tBR0VfTkFNRV0sIFtBQ19QQUNLQUdFX05BTUUgXSljb25maWcubHRbXWRubAorIG00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCisgY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisgCistQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKyAKK0BAIC03NDYsMTUgKzc1MiwxMiBAQCBfTFRfRU9GCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorIAorLSAgX0xUX1BST0dfWFNJX1NIRUxMRk5TCisrICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisgCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyBdLAorQEAgLTk4MCw2ICs5ODMsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC0xMDY5LDMwICsxMDc0LDQxIEBAIG00X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCisgICBmaQorIF0pCisgCistIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyAjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyAjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyAjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyAjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisgIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KKysjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKysjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCisgbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKKyBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKKy1BQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maV0sW10pCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisraWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCisrICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH1dJworKyAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisrICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmldLFtdKQorKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrICBdKQorKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCisrZmkKKyBdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAKKyAKK0BAIC0xMTE3LDcgKzExMzMsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIAorIEFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtMTE2MSw2ICsxMTc3LDM5IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKKyBdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyAKKyAKKysjIF9MVF9XSVRIX1NZU1JPT1QKKysjIC0tLS0tLS0tLS0tLS0tLS0KKytBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCisrW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1sgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3RbPURJUl0gU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorKworK2RubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKytkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfbGlidG9vbF9zeXNyb290fV0pCisrICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKysgICA7OworK2VzYWMKKysKKysgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQorK19MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAorK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKysKKyAjIF9MVF9FTkFCTEVfTE9DSworICMgLS0tLS0tLS0tLS0tLS0tCisgbTRfZGVmdW4oW19MVF9FTkFCTEVfTE9DS10sCitAQCAtMTMyMCwxNCArMTM2OSw0NyBAQCBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyBdKSMgX0xUX0VOQUJMRV9MT0NLCisgCisgCisrIyBfTFRfUFJPR19BUgorKyMgLS0tLS0tLS0tLS0KKyttNF9kZWZ1bihbX0xUX1BST0dfQVJdLAorK1tBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCisrX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCisrICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLAorKyAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKysgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKyAgICAgXSkKKysgIF0pCisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisrICBbSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyXSkKKytdKSMgX0xUX1BST0dfQVIKKysKKysKKyAjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCistW0FDX0NIRUNLX1RPT0woQVIsIGFyLCBmYWxzZSkKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKy1fTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKKy1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorK1tfTFRfUFJPR19BUgorIAorIEFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQorIHRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorQEAgLTE2MjMsNyArMTcwNSw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLVsjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKytbI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0xNjY3LDEwICsxNzQ5LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMjIxMCw4ICsyMjkyLDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTIyNDQsMTMgKzIzMjcsNzEgQEAgbTRfaWYoWyQxXSwgW10sWworICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgWyRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbF07IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0yMzQyLDcgKzI0ODMsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMjk1MCw2ICszMDkxLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC0zMDE2LDcgKzMxNjIsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtMzE2Nyw2ICszMzE0LDIxIEBAIHRwZiopCisgICA7OworIGVzYWMKKyBdKQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tbXDFdXVwvW1tcMV1dXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTMxNzQsNyArMzMzNiwxMSBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyBfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorIF9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCistICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIl0pCisrICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfZ2xvYl0sIFsxXSwKKysgICAgW0hvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKytfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKysgICAgW0ZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCisgXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyAKKyAKK0BAIC0zMjc3LDYgKzM0NDMsNjcgQEAgZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorIGRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorIGRubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorIAorKyMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorKyMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgorKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKKyttNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCisrbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCisrQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAorK2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kLAorK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKytdKQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKytfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorKyAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCisrXSkjIF9MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCCisrCisrCisrIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKKyttNF9kZWZ1bihbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0sCisrW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKytBQ19DQUNIRV9DSEVDSyhbaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sXSwgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbF0sCisrICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCpdKQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorK19MVF9ERUNMKFtdLCBbTUFOSUZFU1RfVE9PTF0sIFsxXSwgW01hbmlmZXN0IHRvb2xdKWRubAorK10pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCisrCisgCisgIyBMVF9MSUJfTQorICMgLS0tLS0tLS0KK0BAIC0zNDAzLDggKzM2MzAsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTM0NDAsNiArMzY2Nyw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC0zNDczLDYgKzM3MDEsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMzQ4NCw3ICszNzI0LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUQCZ0QF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTM1MTAsMTUgKzM3NTAsMTUgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorIAkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgCWZpCitAQCAtMzU1MSw2ICszNzkxLDEzIEBAIGVsc2UKKyAgIEFDX01TR19SRVNVTFQob2spCisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorQEAgLTM1NjEsNiArMzgwOCw4IEBAIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKKyBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKKyAgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCisrX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKKysgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKKyBdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyAKKyAKK0BAIC0zNTcyLDcgKzM4MjEsNiBAQCBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KKyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorIAorLUFDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorQEAgLTM2NzgsNiArMzkyNiwxMiBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAkgIDs7CisgCWVzYWMKKyAJOzsKKysgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisrCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisrCW00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKysJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKysJOzsKKyAgICAgICBkZ3V4KikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAJICBlYysrKikKK0BAIC0zODMwLDcgKzQwODQsNyBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAk7OworICAgICAgIHNvbGFyaXMqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorLQkgIENDKikKKysJICBDQyogfCBzdW5DQyopCisgCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKK0BAIC00MDUzLDYgKzQzMDcsMTIgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisrCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTQxMTUsNyArNDM3NSw3IEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CitAQCAtNDE3Miw5ICs0NDMyLDExIEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgIDs7CisgZXNhYworLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorLQlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKKysgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKKytfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQorIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtNDE5Myw2ICs0NDU1LDggQEAgZmkKKyBfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisgCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorIAorK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtNDIxMyw2ICs0NDc3LDcgQEAgX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisgbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKKyBbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCisgQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorIG00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitAQCAtNDIyMSw2ICs0NDg2LDcgQEAgbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICBjYXNlICRob3N0X29zIGluCisgICBhaXhbWzQtOV1dKikKKyAgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCitAQCAtNDIzNSwxNSArNDUwMSwyMCBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworICAgICA7OworICAgcHczMiopCisgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKy0gIDs7CisrICAgIDs7CisgICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qW1sgXV1fX25tX18vcy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICBjbCopIDs7CisrICAgICopCisrICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisrICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworICAgKikKKyAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIDs7CisgICBlc2FjCistICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyBdLCBbCisgICBydW5wYXRoX3Zhcj0KKyAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK0BAIC00NDExLDcgKzQ2ODIsOCBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC00NDU5LDcgKzQ3MzEsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC00NTEwLDEyICs0NzgyLDEyIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTQ1MjksOCArNDgwMSw4IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTQ1NDgsOCArNDgyMCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ1OTUsOCArNDg2Nyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICBmaQorQEAgLTQ3MjYsNyArNDk5OCw3IEBAIF9MVF9FT0YKKyAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCitAQCAtNDczNyw3ICs1MDA5LDcgQEAgX0xUX0VPRgorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKyAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCitAQCAtNDc4MSwyMCArNTA1Myw2MyBAQCBfTFRfRU9GCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKy0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKysJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisrCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC00ODI4LDcgKzUxNDMsNyBAQCBfTFRfRU9GCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KK0BAIC00ODM2LDcgKzUxNTEsNyBAQCBfTFRfRU9GCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtNDg1Miw3ICs1MTY3LDcgQEAgX0xUX0VPRgorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC00ODc2LDEwICs1MTkxLDEwIEBAIF9MVF9FT0YKKyAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtNDkyNiwxNiArNTI0MSwzMSBAQCBfTFRfRU9GCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIEFDX0xJTktfSUZFTFNFKGludCBmb28odm9pZCkge30sCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistICAgICAgICApCistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisrCSAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sXSwKKysJICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBBQ19MSU5LX0lGRUxTRSgKKysJICAgICBbQUNfTEFOR19TT1VSQ0UoCisrCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKysJCQkgICAgICBbRm9ydHJhbiA3N10sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSwKKysJCQkgICAgICBbRm9ydHJhbl0sIFtbCisrICAgICAgc3Vicm91dGluZSBmb28KKysgICAgICBlbmRdXSldKV0sCisrCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAorKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyJdKQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC01MDIwLDcgKzUzNTAsNyBAQCBfTFRfRU9GCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC01MDM5LDkgKzUzNjksOSBAQCBfTFRfRU9GCisgICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC01MzEzLDggKzU2NDMsNiBAQCBfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKKyBfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorLV9MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKy0gICAgW0ZpeCB0aGUgc2hlbGwgdmFyaWFibGUgJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlcl0pCisgX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorIF9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKK0BAIC01MzI1LDYgKzU2NTMsOCBAQCBfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCisgX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCisrX0xUX1RBR0RFQ0woW10sIFtwb3N0bGlua19jbWRzXSwgWzJdLAorKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCisgX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCisgZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitAQCAtNTQyNiw2ICs1NzU2LDcgQEAgQ0M9IiRsdF9zYXZlX0NDIgorIG00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KK0BAIC01NDg3LDYgKzU4MTgsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBsdF9zYXZlX0xEPSRMRAorICAgbHRfc2F2ZV9HQ0M9JEdDQworICAgR0NDPSRHWFgKK0BAIC01NTA0LDYgKzU4MzYsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkKKyAgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgICBDQz0ke0NYWC0iYysrIn0KKysgIENGTEFHUz0kQ1hYRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTU1MjUsOCArNTg1OCw4IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCitAQCAtNTY2Nyw3ICs2MDAwLDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICAjIGV4ZWN1dGFibGUuCistICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAorICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC01Njc5LDcgKzYwMTIsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICBlbHNlCisgCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisrCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorIAkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorQEAgLTU3MjEsMjkgKzYwNTQsNzUgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgIDs7CisgCisgICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorLSAgICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKy0gICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworLSAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKy0gICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorLSAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworLSAgICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCistCistICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorLSAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKy0JICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZWxzZQorLQkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBmaX4KKy0gICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgZWxzZQorLSAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCistICAgICAgICBmaQorLSAgICAgICAgOzsKKysJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorKwksY2wqIHwgbm8sY2wqKQorKwkgICMgTmF0aXZlIE1TVkMKKysJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKysJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKysJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworKwkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwkgIGxpYmV4dD1saWIKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJICBzaHJleHRfY21kcz0iLmRsbCIKKysJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZWxzZQorKwkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGZpfgorKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgICAgbGlua25hbWVzPScKKysJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJICAjIERvbid0IHVzZSByYW5saWIKKysJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworKwkgIF9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICAgKikKKysJCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCQk7OworKwkgICAgZXNhY34KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisrCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICAgIGZpJworKwkgIDs7CisrCSopCisrCSAgIyBnKysKKysJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKysJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKysJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysKKysJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisrCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisrCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGVsc2UKKysJICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisrCSAgICBmaX4KKysJICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICBlbHNlCisrCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisrCSAgZmkKKysJICA7OworKwllc2FjCisrCTs7CisgICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorIAk7OworQEAgLTU4MTgsNyArNjE5Nyw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgKikKKyAgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCitAQCAtNTg4OSwxMCArNjI2OCwxMCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICBpYTY0KikKKy0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgKikKKy0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICBlc2FjCisgCSAgICAgIGZpCitAQCAtNTkzMyw5ICs2MzEyLDkgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgKikKKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkgICAgICBlbHNlCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCitAQCAtNjAwNSwyMCArNjM4NCwyMCBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CistCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCInCisrCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworIAkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKy0JCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisrCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAJCSRSQU5MSUIgJG9sZGxpYicKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCSAgICAgIDs7CisgCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKK0BAIC02MjEzLDcgKzY1OTIsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICAgICopCistCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgZXNhYworIAorQEAgLTYyNTksNyArNjYzOCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCisgICAgICAgc29sYXJpcyopCisgICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBDQyopCisrICAgICAgICAgIENDKiB8IHN1bkNDKikKKyAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKyAJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKK0BAIC02MzAwLDkgKzY2NzksOSBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworIAkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisgCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JCSAgJENDIC1zaGFyZWQgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworIAorIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KK0BAIC02NDMxLDYgKzY4MTAsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisgCisgICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworICAgTERDWFg9JExECisgICBMRD0kbHRfc2F2ZV9MRAorICAgR0NDPSRsdF9zYXZlX0dDQworQEAgLTY0NDUsNiArNjgyNSwyOSBAQCBBQ19MQU5HX1BPUAorIF0pIyBfTFRfTEFOR19DWFhfQ09ORklHCisgCisgCisrIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCisrIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKysjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKysjCisrIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCisrIyBleGNlcHQgdGhpcyBvbmUgY2FuIGJlIHVzZWQgYnkgbTQgY29kZSB0aGF0IG1heSBiZSBleGVjdXRlZCBieSBjb25maWd1cmUsCisrIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCisrbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKKytBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKQorK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKKytmdW5jX3N0cmlwbmFtZV9jbmYgKCkKKyt7CisrICBjYXNlICR7Mn0gaW4KKysgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisrICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICBlc2FjCisrfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorK10pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCisrCisgIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKK0BAIC02NDUzLDYgKzY4NTYsNyBAQCBBQ19MQU5HX1BPUAorICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorIG00X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKKyBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisrQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKKyBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CisgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK0BAIC02NTAzLDYgKzY5MDcsMTMgQEAgcHVibGljIGNsYXNzIGZvbyB7CisgfTsKKyBfTFRfRU9GCisgXSkKKysKKytfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKytlc2FjCisrCisgZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIGRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KK0BAIC02NTE0LDcgKzY5MjUsNyBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworIAorICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworLSAgICBjYXNlICRwIGluCisrICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAKKyAgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorQEAgLTY1MjMsMTMgKzY5MzQsMjIgQEAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAJIHByZXY9JHAKKyAJIGNvbnRpbnVlCistICAgICAgIGVsc2UKKy0JIHByZXY9CisgICAgICAgIGZpCisgCisrICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisrICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorKyAgICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICBlc2FjCisrICAgICAgIGZpCisrICAgICAgIGNhc2UgJHAgaW4KKysgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorLQkgY2FzZSAkcCBpbgorLQkgLUwqIHwgLVIqKQorKwkgY2FzZSAke3ByZXZ9IGluCisrCSAtTCB8IC1SKQorIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKyAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisgCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorQEAgLTY1NDksOCArNjk2OSwxMCBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorIAkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKyAJIGZpCisgICAgICAgIGZpCisrICAgICAgIHByZXY9CisgICAgICAgIDs7CisgCisrICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cworICAgICAqLiRvYmpleHQpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KK0BAIC02NTg2LDYgKzcwMDgsNyBAQCBlbHNlCisgZmkKKyAKKyAkUk0gLWYgY29uZmVzdC4kb2JqZXh0CisrQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworIAorICMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCisgbTRfaWYoWyQxXSwgW0NYWF0sCitAQCAtNjYyMiw3ICs3MDQ1LDcgQEAgbGludXgqKQorIAorIHNvbGFyaXMqKQorICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gIENDKikKKysgIENDKiB8IHN1bkNDKikKKyAgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCitAQCAtNjczNSw3ICs3MTU4LDkgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0iJENDIgorICAgbHRfc2F2ZV9HQ0M9JEdDQworKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICAgQ0M9JHtGNzctImY3NyJ9CisrICBDRkxBR1M9JEZGTEFHUworICAgY29tcGlsZXI9JENDCisgICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNjc4OSw2ICs3MjE0LDcgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgCisgICBHQ0M9JGx0X3NhdmVfR0NDCisgICBDQz0iJGx0X3NhdmVfQ0MiCisrICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKyBmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworIAorIEFDX0xBTkdfUE9QCitAQCAtNjg2NSw3ICs3MjkxLDkgQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSIkQ0MiCisgICBsdF9zYXZlX0dDQz0kR0NDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBDQz0ke0ZDLSJmOTUifQorKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisgCitAQCAtNjkyMSw3ICs3MzQ5LDggQEAgaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgR0NDPSRsdF9zYXZlX0dDQworLSAgQ0M9IiRsdF9zYXZlX0NDIgorKyAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBmaSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCisgCisgQUNfTEFOR19QT1AKK0BAIC02OTU4LDEwICs3Mzg3LDEyIEBAIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyAKKyAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorLWx0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NDPSRDQworK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyBsdF9zYXZlX0dDQz0kR0NDCisgR0NDPXllcworIENDPSR7R0NKLSJnY2oifQorK0NGTEFHUz0kR0NKRkxBR1MKKyBjb21waWxlcj0kQ0MKKyBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitAQCAtNjk5Miw3ICs3NDIzLDggQEAgZmkKKyBBQ19MQU5HX1JFU1RPUkUKKyAKKyBHQ0M9JGx0X3NhdmVfR0NDCistQ0M9IiRsdF9zYXZlX0NDIgorK0NDPSRsdF9zYXZlX0NDCisrQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIF0pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisgCisgCitAQCAtNzAyNyw5ICs3NDU5LDExIEBAIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyAKKyAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorIGx0X3NhdmVfQ0M9IiRDQyIKKytsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgbHRfc2F2ZV9HQ0M9JEdDQworIEdDQz0KKyBDQz0ke1JDLSJ3aW5kcmVzIn0KKytDRkxBR1M9CisgY29tcGlsZXI9JENDCisgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK0BAIC03MDQyLDcgKzc0NzYsOCBAQCBmaQorIAorIEdDQz0kbHRfc2F2ZV9HQ0MKKyBBQ19MQU5HX1JFU1RPUkUKKy1DQz0iJGx0X3NhdmVfQ0MiCisrQ0M9JGx0X3NhdmVfQ0MKKytDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworIAorIAorQEAgLTcxMDEsNiArNzUzNiwxNSBAQCBfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCisgQUNfU1VCU1QoW09CSkRVTVBdKQorIF0pCisgCisrIyBfTFRfREVDTF9ETExUT09MCisrIyAtLS0tLS0tLS0tLS0tLS0tCisrIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCisrbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorK1tBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKytfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCisrQUNfU1VCU1QoW0RMTFRPT0xdKQorK10pCisgCisgIyBfTFRfREVDTF9TRUQKKyAjIC0tLS0tLS0tLS0tLQorQEAgLTcxOTQsOCArNzYzOCw4IEBAIG00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNzIzNCwyMDYgKzc2NzgsMTYyIEBAIF9MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorIF0pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyAKKyAKKy0jIF9MVF9QUk9HX1hTSV9TSEVMTEZOUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBCb3VybmUgYW5kIFhTSSBjb21wYXRpYmxlIHZhcmlhbnRzIG9mIHNvbWUgdXNlZnVsIHNoZWxsIGZ1bmN0aW9ucy4KKy1tNF9kZWZ1bihbX0xUX1BST0dfWFNJX1NIRUxMRk5TXSwKKy1bY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKysjIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAorKyMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KKyttNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCisrW2RubCB7Cisrc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCisrJDEgKClcCisre1wKKyttNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytdKQorIAorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIAorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CisrIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCisrIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KKyttNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCisrW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKysgICAgY2FzZSAkezF9IGluCisrICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKysgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisrICAgIGVzYWNdKQorKworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisrCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKysgICAgZXNhYworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKyAKKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKKysgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorKyAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisrICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKKyAKKy1kbmwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZQorLWRubCBBIHBvcnRhYmxlIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZ2VuZXJhbC5tNHNoCistZG5sIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IGhlcmUuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAorKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCisgCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisrICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQorIAorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW1tePV1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bW149XV0qPS8vJworKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworKyAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworKyAgICBlc2FjXSkKKyAKKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKKyAKKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorIAorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW1teLl1dKiQvLmxvLydgCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCisrZmkKKyAKKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkW0BdImAKKy19CisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQorIAorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkWzFdIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAorKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorK2RubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAorKyAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCisgCistX0xUX0VPRgorLWVzYWMKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisgCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKKytmaQorK10pCisgCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiRbMV0rPVwkWzJdIgorLX0KKy1fTFRfRU9GCisrIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKysjIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKKysjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KKyttNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKKytBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCisrQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCisrW2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworICAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJFsxXT1cJCRbMV1cJFsyXSIKKy19CistCistX0xUX0VPRgorKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworICAgICA7OworLSAgZXNhYworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworK10pCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK0FDX01TR19SRVNVTFQoWyRsdF9jdl90b19ob3N0X2ZpbGVfY21kXSkKKytfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKysgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCisrCisrQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKKytBQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKKytbI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisgXSkKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorK19MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAorKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKWRubAorK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggOTUwM2VjOC4uNzBlODU2ZSAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtMSwxMCArMSw5IEBACistIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKyAKKy0jIGxpYnRvb2wgKEdOVSBsaWJ0b29sIDEuMzEzNCAyMDA5LTExLTI5KSAyLjIuN2EKKysjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQKKyAjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCistIyAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisgIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKK0BAIC0zOCw3ICszNyw2IEBACisgIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorLSMgICAgICAgLS1uby1maW5pc2ggICAgICAgICAgbGV0IGluc3RhbGwgbW9kZSBhdm9pZCBmaW5pc2ggY29tbWFuZHMKKyAjICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAjICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyAjICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50CitAQCAtNzEsMTcgKzY5LDE5IEBACisgIyAgICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyAjICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyAjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKy0jICAgICAgICAgJHByb2duYW1lOgkoR05VIGxpYnRvb2wgMS4zMTM0IDIwMDktMTEtMjkpIDIuMi43YQorKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40CisgIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgorICMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KKyAjCisgIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCisrIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorKyMgR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCisgCisgUFJPR1JBTT1saWJ0b29sCisgUEFDS0FHRT1saWJ0b29sCistVkVSU0lPTj0yLjIuN2EKKy1USU1FU1RBTVA9IiAxLjMxMzQgMjAwOS0xMS0yOSIKKy1wYWNrYWdlX3JldmlzaW9uPTEuMzEzNAorK1ZFUlNJT049Mi40CisrVElNRVNUQU1QPSIiCisrcGFja2FnZV9yZXZpc2lvbj0xLjMyOTMKKyAKKyAjIEJlIEJvdXJuZSBjb21wYXRpYmxlCisgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCitAQCAtMTA2LDkgKzEwNiw2IEBAIF9MVEVDSE9fRU9GJworIH0KKyAKKyAjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorLSMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCistIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKy0jIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCisgbHRfdXNlcl9sb2NhbGU9CisgbHRfc2FmZV9sb2NhbGU9CisgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitAQCAtMTIxLDE1ICsxMTgsMTMgQEAgZG8KKyAJICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCisgCWZpIgorIGRvbmUKKytMQ19BTEw9QworK0xBTkdVQUdFPUMKKytleHBvcnQgTEFOR1VBR0UgTENfQUxMCisgCisgJGx0X3Vuc2V0IENEUEFUSAorIAorIAorLQorLQorLQorLQorLQorICMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorICMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisgIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKK0BAIC0xNDAsNyArMTM1LDcgQEAgcHJvZ3BhdGg9IiQwIgorIAorIAorIDogJHtDUD0iY3AgLWYifQorLTogJHtFQ0hPPSRhc19lY2hvfQorK3Rlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQorIDogJHtFR1JFUD0iL2Jpbi9ncmVwIC1FIn0KKyA6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9CisgOiAke0dSRVA9Ii9iaW4vZ3JlcCJ9CitAQCAtMTQ5LDcgKzE0NCw3IEBAIHByb2dwYXRoPSIkMCIKKyA6ICR7TUtESVI9Im1rZGlyIn0KKyA6ICR7TVY9Im12IC1mIn0KKyA6ICR7Uk09InJtIC1mIn0KKy06ICR7U0VEPSIvbW91bnQvZW5kb3Ivd2lsZGVuaHUvbG9jYWwteDg2XzY0L2Jpbi9zZWQifQorKzogJHtTRUQ9Ii9iaW4vc2VkIn0KKyA6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKyA6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKyAKK0BAIC0xNjksNiArMTY0LDI3IEBAIElGUz0iIAkkbHRfbmwiCisgZGlybmFtZT0icywvW14vXSokLCwiCisgYmFzZW5hbWU9InMsXi4qLywsIgorIAorKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKysjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKytmdW5jX2Rpcm5hbWUgKCkKKyt7CisrICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKysgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorKyAgICBlbHNlCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorKyAgICBmaQorK30gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKytmdW5jX2Jhc2VuYW1lICgpCisreworKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKyt9ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisgIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorICMgY2FsbDoKK0BAIC0xODMsMTcgKzE5OSwzMSBAQCBiYXNlbmFtZT0icyxeLiovLCwiCisgIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCisgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorIHsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCistfQorKyAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCisrICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKysgICAgZWxzZQorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKysgICAgZmkKKysgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCisrfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKysjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisrIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisrIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKytmdW5jX3N0cmlwbmFtZSAoKQorK3sKKysgICAgY2FzZSAkezJ9IGluCisrICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKysgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisrICAgIGVzYWMKKyt9ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgCistIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisgCisgIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorIHBhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworQEAgLTM3Niw2ICs0MDYsMTUgQEAgc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKyAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KKyBkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisgCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKysjIHN0cmluZyBsaXRlcmFsbHkuCisrc2VkX21ha2VfbGl0ZXJhbF9yZWdleD0ncyxbXS5bXiRcXCpcL10sXFwmLGcnCisrCisrIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKKysjIHdoaWNoIGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorK2x0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKysKKyAjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorICMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyAjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KK0BAIC00MDQsNyArNDQzLDcgQEAgb3B0X3dhcm5pbmc9OgorICMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorIGZ1bmNfZWNobyAoKQorIHsKKy0gICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCisrICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCisgfQorIAorICMgZnVuY192ZXJib3NlIGFyZy4uLgorQEAgLTQzMCwxNCArNDY5LDE0IEBAIGZ1bmNfZWNob19hbGwgKCkKKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCisgZnVuY19lcnJvciAoKQorIHsKKy0gICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogIiR7MSsiJEAifSAxPiYyCisrICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCisgfQorIAorICMgZnVuY193YXJuaW5nIGFyZy4uLgorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorIGZ1bmNfd2FybmluZyAoKQorIHsKKy0gICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorKyAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKyAKKyAgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICAgOgorQEAgLTY1NiwxOSArNjk1LDM1IEBAIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQorICAgICBmaQorIH0KKyAKKy0KKy0KKysjIGZ1bmNfdHJfc2gKKysjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgorKyMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycworKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisrIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KKytmdW5jX3RyX3NoICgpCisreworKyAgY2FzZSAkMSBpbgorKyAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQorKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKKysgICAgOzsKKysgICogKQorKyAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQorKyAgICA7OworKyAgZXNhYworK30KKyAKKyAKKyAjIGZ1bmNfdmVyc2lvbgorICMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorIGZ1bmNfdmVyc2lvbiAoKQorIHsKKysgICAgJG9wdF9kZWJ1ZworKworICAgICAkU0VEIC1uICcvKEMpLyFiIGdvCisgCTptb3JlCisgCS9cLi8heworIAkgIE4KKy0JICBzL1xuIyAvLworKwkgIHMvXG4jIC8gLworIAkgIGIgbW9yZQorIAl9CisgCTpnbworQEAgLTY4NSw3ICs3NDAsOSBAQCBmdW5jX3ZlcnNpb24gKCkKKyAjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKyBmdW5jX3VzYWdlICgpCisgeworLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICotaC8geworKyAgICAkb3B0X2RlYnVnCisrCisrICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7CisgICAgICAgICBzL14jIC8vCisgCXMvXiMgKiQvLworIAlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCitAQCAtNzAxLDcgKzc1OCwxMCBAQCBmdW5jX3VzYWdlICgpCisgIyB1bmxlc3MgJ25vZXhpdCcgaXMgcGFzc2VkIGFzIGFyZ3VtZW50LgorIGZ1bmNfaGVscCAoKQorIHsKKysgICAgJG9wdF9kZWJ1ZworKworICAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworKwk6cHJpbnQKKyAgICAgICAgIHMvXiMgLy8KKyAJcy9eIyAqJC8vCisgCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKK0BAIC03MTQsNyArNzc0LDExIEBAIGZ1bmNfaGVscCAoKQorIAlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKyAJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisgCXAKKy0gICAgIH0nIDwgIiRwcm9ncGF0aCIKKysJZAorKyAgICAgfQorKyAgICAgL14jIC4qIGhvbWUgcGFnZTovYiBwcmludAorKyAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50CisrICAgICAnIDwgIiRwcm9ncGF0aCIKKyAgICAgcmV0PSQ/CisgICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgorICAgICAgIGV4aXQgJHJldAorQEAgLTcyNiwxMiArNzkwLDM5IEBAIGZ1bmNfaGVscCAoKQorICMgZXhpdF9jbWQuCisgZnVuY19taXNzaW5nX2FyZyAoKQorIHsKKy0gICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEiCisrICAgICRvcHRfZGVidWcKKysKKysgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgICBleGl0X2NtZD1leGl0CisgfQorIAorLWV4aXRfY21kPToKKyAKKysjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IHNob3J0b3B0CisrIyBTZXQgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCisrIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisreworKyAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJworKyAgICBteV9zZWRfc2hvcnRfcmVzdD0nMXMvXi4uXCguKlwpJC9cMS87cScKKysKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9yZXN0ImAKKyt9ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKKysjIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCisrIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIExPTkdPUFQgYXQgdGhlIGA9JyBzaWduLgorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKCkKKyt7CisrICAgIG15X3NlZF9sb25nX29wdD0nMXMvXlwoLS1bXj1dKlwpPS4qL1wxLztxJworKyAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworKworKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKysgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKyt9ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKytleGl0X2NtZD06CisgCisgCisgCitAQCAtNzQxLDI2ICs4MzIsNjQgQEAgbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorIG1hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgorIAorICMgR2xvYmFsIHZhcmlhYmxlcy4KKy0jICRtb2RlIGlzIHVuc2V0Cisgbm9ub3B0PQorLWV4ZWN1dGVfZGxmaWxlcz0KKyBwcmVzZXJ2ZV9hcmdzPQorIGxvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKKyBvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCisgZXh0cmFjdGVkX2FyY2hpdmVzPQorIGV4dHJhY3RlZF9zZXJpYWw9MAorIAorLW9wdF9kcnlfcnVuPWZhbHNlCistb3B0X2ZpbmlzaD06Cistb3B0X2R1cGxpY2F0ZV9kZXBzPWZhbHNlCistb3B0X3NpbGVudD1mYWxzZQorLW9wdF9kZWJ1Zz06CistCisgIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisgIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisgIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorIGV4ZWNfY21kPQorIAorKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisrIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCisrZnVuY19hcHBlbmQgKCkKKyt7CisrICAgIGV2YWwgIiR7MX09XCQkezF9XCR7Mn0iCisrfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKyMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQorKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisrIyBieSBhIHNwYWNlLgorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorK3sKKysgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKysgICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorK30gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorK2Z1bmNfYXJpdGggKCkKKyt7CisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKKyt9ICMgZnVuY19hcml0aCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfbGVuIHN0cmluZworKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKytmdW5jX2xlbiAoKQorK3sKKysgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCisrfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19sbzJvIG9iamVjdAorK2Z1bmNfbG8ybyAoKQorK3sKKysgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorK30gIyBmdW5jX2xvMm8gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKytmdW5jX3hmb3JtICgpCisreworKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKyt9ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKyAjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisgIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK0BAIC04NTAsMTMwICs5NzksMjA0IEBAIGZ1bmNfZW5hYmxlX3RhZyAoKQorICAgZXNhYworIH0KKyAKKy0jIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorLSMgdGhlIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGBsaWJ0b29sIC0tdmVyc2lvbicgaGFwcGVuIHF1aWNrbHkuCisrIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKysjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisrIyByZWxlYXNlIG9mIGxpYnRvb2wuCisrZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCisgeworKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisrICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCisrJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgICBlbHNlCisrICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisrJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCisrJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICBmaQorIAorLSAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CistICBjYXNlICQxIGluCistICBjbGVhbnxjbGVhfGNsZXxjbCkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKy0gICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBsaW5rfGxpbnxsaXxsKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZXNhYworKyAgICBleGl0ICRFWElUX01JU01BVENICisrICBmaQorK30KKysKKysKKysjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKytjYXNlICQxIGluCisrY2xlYW58Y2xlYXxjbGV8Y2wpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2NvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2luc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisrICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrbGlua3xsaW58bGl8bCkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKyt1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2VzYWMKKyAKKy0gICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorLSAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworKworKworKyMgT3B0aW9uIGRlZmF1bHRzOgorK29wdF9kZWJ1Zz06Cisrb3B0X2RyeV9ydW49ZmFsc2UKKytvcHRfY29uZmlnPWZhbHNlCisrb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCisrb3B0X2ZlYXR1cmVzPWZhbHNlCisrb3B0X2ZpbmlzaD1mYWxzZQorK29wdF9oZWxwPWZhbHNlCisrb3B0X2hlbHBfYWxsPWZhbHNlCisrb3B0X3NpbGVudD06Cisrb3B0X3ZlcmJvc2U9OgorK29wdF9zaWxlbnQ9ZmFsc2UKKytvcHRfdmVyYm9zZT1mYWxzZQorKworKworKyMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQorKyMgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYC0tdmVyc2lvbicgaGFwcGVuIGFzIHF1aWNrbHkgYXMgd2UgY2FuLgorK3sKKysgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKysgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgIG9wdD0iJDEiCisgICAgIHNoaWZ0CistCisgICAgIGNhc2UgJG9wdCBpbgorLSAgICAgIC0tY29uZmlnKQkJZnVuY19jb25maWcJCQkJCTs7CistCistICAgICAgLS1kZWJ1ZykJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisrICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCisgCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorLQkJCW9wdF9kZWJ1Zz0nc2V0IC14JworIAkJCSRvcHRfZGVidWcKKyAJCQk7OworLQorLSAgICAgIC1kbG9wZW4pCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJDEiCistCQkJc2hpZnQKKysgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisrCQkJb3B0X2RyeV9ydW49OgorIAkJCTs7CistCistICAgICAgLS1kcnktcnVuIHwgLW4pCW9wdF9kcnlfcnVuPToJCQkJCTs7CistICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKy0gICAgICAtLWZpbmlzaCkJCW1vZGU9ImZpbmlzaCIJCQkJCTs7CistICAgICAgLS1uby1maW5pc2gpCW9wdF9maW5pc2g9ZmFsc2UJCQkJOzsKKy0KKy0gICAgICAtLW1vZGUpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQljYXNlICQxIGluCistCQkJICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorLQkJCSAgY2xlYW4pCTs7CistCQkJICBjb21waWxlKQk7OworLQkJCSAgZXhlY3V0ZSkJOzsKKy0JCQkgIGZpbmlzaCkJOzsKKy0JCQkgIGluc3RhbGwpCTs7CistCQkJICBsaW5rKQkJOzsKKy0JCQkgIHJlbGluaykJOzsKKy0JCQkgIHVuaW5zdGFsbCkJOzsKKy0KKy0JCQkgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorLQkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKy0JCQkgICAgIGV4aXRfY21kPWV4aXQKKy0JCQkgICAgIGJyZWFrCistCQkJICAgICA7OworLQkJICAgICAgICBlc2FjCistCistCQkJbW9kZT0iJDEiCisrICAgICAgLS1jb25maWcpCisrCQkJb3B0X2NvbmZpZz06CisrZnVuY19jb25maWcKKysJCQk7OworKyAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KKyt9JG9wdGFyZyIKKyAJCQlzaGlmdAorIAkJCTs7CistCisgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKy0JCQlvcHRfZHVwbGljYXRlX2RlcHM9OgkJCQk7OworLQorLSAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCistCQkJb3B0X3NpbGVudD06CistCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKKysJCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgorIAkJCTs7CistCistICAgICAgLS1uby1xdWlldHwtLW5vLXNpbGVudCkKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorLQkJCW9wdF9zaWxlbnQ9ZmFsc2UKKysgICAgICAtLWZlYXR1cmVzKQorKwkJCW9wdF9mZWF0dXJlcz06CisrZnVuY19mZWF0dXJlcworIAkJCTs7CistCistICAgICAgLS12ZXJib3NlfCAtdikJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysgICAgICAtLWZpbmlzaCkKKysJCQlvcHRfZmluaXNoPToKKytzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisrCQkJOzsKKysgICAgICAtLWhlbHApCisrCQkJb3B0X2hlbHA9OgorKwkJCTs7CisrICAgICAgLS1oZWxwLWFsbCkKKysJCQlvcHRfaGVscF9hbGw9OgorK29wdF9oZWxwPSc6IGhlbHAtYWxsJworKwkJCTs7CisrICAgICAgLS1tb2RlKQorKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworKwkJCW9wdGFyZz0iJDEiCisrCQkJb3B0X21vZGU9IiRvcHRhcmciCisrY2FzZSAkb3B0YXJnIGluCisrICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorKyAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKysKKysgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorKyAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKysgICAgIGV4aXRfY21kPWV4aXQKKysgICAgIGJyZWFrCisrICAgICA7OworK2VzYWMKKysJCQlzaGlmdAorKwkJCTs7CisrICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKyAJCQlvcHRfc2lsZW50PWZhbHNlCistCQkJb3B0X3ZlcmJvc2U9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorIAkJCTs7CistCistICAgICAgLS1uby12ZXJib3NlKQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKyAgICAgIC0tbm8tdmVyYm9zZSkKKyAJCQlvcHRfdmVyYm9zZT1mYWxzZQorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorIAkJCTs7CistCistICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKy0JCQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0ICQxIgorLQkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorKyAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisrCQkJb3B0X3NpbGVudD06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisrICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorKwkJCTs7CisrICAgICAgLS12ZXJib3NlfC12KQorKwkJCW9wdF92ZXJib3NlPToKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKytvcHRfc2lsZW50PWZhbHNlCisrCQkJOzsKKysgICAgICAtLXRhZykKKysJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF90YWc9IiRvcHRhcmciCisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKKytmdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCisgCQkJc2hpZnQKKyAJCQk7OworIAorKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKKysgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKKysgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQk7OworKworICAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CistICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCistCQkJZnVuY19vcHRfc3BsaXQgIiRvcHQiCistCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgLS0qPSopCisrCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKKysJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQorIAkJCXNoaWZ0CisgCQkJOzsKKyAKKy0gICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCQk7OworLSAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CistICAgICAgLS1oZWxwLWFsbCkJb3B0X2hlbHA9JzogaGVscC1hbGwnCQkJCTs7CistICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJCTs7CistCistICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKy0KKy0gICAgICAqKQkJbm9ub3B0PSIkb3B0IgorLQkJCWJyZWFrCisrICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKysgICAgICAtXD8qfC1oKnwtbip8LXYqKQorKwkJCWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkb3B0IgorKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrCQkJc2hpZnQKKyAJCQk7OworKworKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisrICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIgOzsKKysgICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICAgZXNhYworICAgZG9uZQorIAorKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorKworKyAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKysgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorKyAgICBub25vcHQ9IiRvcHQiCisrICAgIHNoaWZ0CisrICBmaQorKworKyAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisrICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisgCisgICBjYXNlICRob3N0IGluCisgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyogfCAqc29sYXJpczIqICkKK0BAIC05ODEsODIgKzExODQsNDQgQEAgZnVuY19lbmFibGVfdGFnICgpCisgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICAgOzsKKyAgICAgKikKKy0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKysgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgICA7OworICAgZXNhYworIAorLSAgIyBIYXZpbmcgd2FybmVkIGFib3V0IGFsbCBtaXMtc3BlY2lmaWVkIG9wdGlvbnMsIGJhaWwgb3V0IGlmCistICAjIGFueXRoaW5nIHdhcyB3cm9uZy4KKy0gICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCistfQorKyAgJG9wdF9oZWxwIHx8IHsKKysgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorKyAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyAKKy0jIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorLSMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKy0jIHJlbGVhc2Ugb2YgbGlidG9vbC4KKy1mdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKKy17CistICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKy0gICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKy0gICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKy0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKy0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCistX0xUX0VPRgorLSAgICAgIGVsc2UKKy0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCistJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorLSRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKy0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCistJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorLV9MVF9FT0YKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKy0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKy0kcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCistJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorLSRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKy1fTFRfRU9GCisrICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorKyAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgICAgZmkKKyAKKy0gICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorLSAgZmkKKy19CistCisrICAgICMgRGFyd2luIHN1Y2tzCisrICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisgCistIyMgLS0tLS0tLS0tLS0gIyMKKy0jIyAgICBNYWluLiAgICAjIworLSMjIC0tLS0tLS0tLS0tICMjCistCistJG9wdF9oZWxwIHx8IHsKKy0gICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKy0gIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorLQorLSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCistICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKy0gIGZpCisrICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCisrICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKysgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisrICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisrICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisrICAgIGZpCisgCistICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKysgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorKyAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKysgIH0KKyAKKyAKKy0gICMgRGFyd2luIHN1Y2tzCistICBldmFsICJzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIiCisrICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCisrICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorK30KKyAKKyAKKy0gICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCistICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorLSAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCistICAgICRFQ0hPICIkaGVscCIgMT4mMgorLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKy0gIGZpCisgCistICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCistICBnZW5lcmljX2hlbHA9IiRoZWxwIgorLSAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKy19CisgCisrIyMgLS0tLS0tLS0tLS0gIyMKKysjIyAgICBNYWluLiAgICAjIworKyMjIC0tLS0tLS0tLS0tICMjCisgCisgIyBmdW5jX2xhbGliX3AgZmlsZQorICMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KK0BAIC0xMTIxLDEyICsxMjg2LDkgQEAgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCisgIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KKyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCisgeworLSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iIgorLSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIjsgdGhlbgorLQlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCistCWZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQlmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCistICAgIGZpCisrICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKysgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisrICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKyB9CisgCisgIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKK0BAIC0xMTQ5LDcgKzEzMTEsNyBAQCBmdW5jX2V4ZWN1dGVfY21kcyAoKQorICAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgIGZvciBjbWQgaW4gJDE7IGRvCisgICAgICAgSUZTPSRzYXZlX2lmcworLSAgICAgIGV2YWwgImNtZD1cIiRjbWRcIiIKKysgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgICBkb25lCisgICAgIElGUz0kc2F2ZV9pZnMKK0BAIC0xMTcyLDYgKzEzMzQsMzcgQEAgZnVuY19zb3VyY2UgKCkKKyB9CisgCisgCisrIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICisrIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKysjIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorK2Z1bmNfcmVzb2x2ZV9zeXNyb290ICgpCisreworKyAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCisrICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KKysgID0qKQorKyAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisrICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgOzsKKysgIGVzYWMKKyt9CisrCisrIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICisrIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKKysjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCisrZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKKyt7CisrICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKysgID8qOiIkbHRfc3lzcm9vdCIqKQorKyAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKKysgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysgICAgOzsKKysgICopCisrICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisrICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorKyAgICA7OworKyAgZXNhYworK30KKysKKyAjIGZ1bmNfaW5mZXJfdGFnIGFyZworICMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorICMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCitAQCAtMTE4NCw4ICsxMzc3LDcgQEAgZnVuY19pbmZlcl90YWcgKCkKKyAgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgICBDQ19xdW90ZWQ9CisgICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCistICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQlDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgorICAgICAgIGRvbmUKKyAgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCitAQCAtMTIwNCw4ICsxMzk2LDcgQEAgZnVuY19pbmZlcl90YWcgKCkKKyAJICAgIENDX3F1b3RlZD0KKyAJICAgIGZvciBhcmcgaW4gJENDOyBkbworIAkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCistCSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgCSAgICBkb25lCisgCSAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKK0BAIC0xMjc0LDYgKzE0NjUsNDg2IEBAIEVPRgorICAgICB9CisgfQorIAorKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKKysjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAorKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorKyMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KKysjIGluICRidWlsZCdzICRQQVRILgorKyMKKysjIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAorKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorK2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorKyAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorKyAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKysgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKysgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCisrICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wfSI7IHRoZW4KKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorKyAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorKyAgICBlbHNlCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisrICAgIGZpCisrICBmaQorK30KKysjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKKysjIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwgYW5kCisrIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisrIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCisrIyAkUEFUSC4gQXNzdW1lcyBBUkcgaGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KKysjCisrIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQuCisrIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKysjIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KKytmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBvbGRJRlM9JElGUworKyAgICBJRlM9OgorKyAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbworKyAgICAgIElGUz0kb2xkSUZTCisrICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKysgICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCAiOyRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBJRlM9JG9sZElGUworKyAgZmkKKyt9CisrIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKysKKysKKysjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisrIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCisrIyB3aGVuICgxKSAkYnVpbGQgaXMgKm5peCBhbmQgQ3lnd2luIGlzIGhvc3RlZCB2aWEgYSB3aW5lIGVudmlyb25tZW50OyBvciAoMikKKysjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorKyMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKKysjIGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdzMyIGZvcm1hdCwgYXMgcHJldmlvdXNseSBjb252ZXJ0ZWQKKysjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisrIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KKysjIEN5Z3dpbiBmb3JtYXQpLiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBvbiBlcnJvci4KKysjCisrIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCisrIyBiZSBjb252ZXJ0ZWQuCisrIworKyMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKKysjIGVudmlyb25tZW50IHZhcmlhYmxlOyBkbyBub3QgcHV0IGl0IGluICRQQVRILgorK2Z1bmNfY3lncGF0aCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KKysgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisrICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5CisrICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKysgICAgZmkKKysgIGVsc2UKKysgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KKysgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorKyAgZmkKKyt9CisrI2VuZDogZnVuY19jeWdwYXRoCisrCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorKyAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisrfQorKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKysjIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKysjIGZvcm1hdCBpbiBBUkcyLiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlIChyZXNldHRpbmcKKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KKytmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCisrICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKKysgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKysgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisrICAgICMgRmFsbGJhY2s6CisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKysjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKysjIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCisrZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCisrICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aCBjb3JyZXNwb25kaW5nIHRvIgorKyAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKysgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisrICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KKysgICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgorKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKKysgICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAorKyAgICBlbHNlCisrICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKysgICAgZmkKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKKysjIE1vZGlmaWVzIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCBieSBwcmVwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEZST05UUEFUCisrIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCisrZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgY2FzZSAkNCBpbgorKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgOzsKKysgIGVzYWMKKysgIGNhc2UgJDQgaW4KKysgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKysgICAgOzsKKysgIGVzYWMKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCisrCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJworKyMKKysjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisrIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKysKKysKKysjIGZ1bmNfdG9faG9zdF9maWxlIEFSRworKyMgQ29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfdG9faG9zdF9maWxlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgorK30KKysjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQorKworKworKyMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKKysjIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KKysjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisrIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KKytmdW5jX3RvX3Rvb2xfZmlsZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGNhc2UgLCQyLCBpbgorKyAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKKysgICAgICA7OworKyAgICAqKQorKyAgICAgICR0b190b29sX2ZpbGVfY21kICIkMSIKKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAorKyAgICAgIDs7CisrICBlc2FjCisrfQorKyMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRworKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKKyt7CisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCisrIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKysgICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PWBjeWdwYXRoIC1tICIkMSJgCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAorKyMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKKysjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjICRidWlsZCB0byAkaG9zdCBQQVRIIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCisrIworKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKysjIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKysjCisrIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorKyMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0CisrIyBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KSBvbiBvdXRwdXQuCisrIworKyMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKKysjICAgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgOiBmdW5jX2NvbnZlcnRfZmlsZV9YX3RvX1kgKCkKKysjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKysjIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCisrIyBzYW1lLiAgSWYgY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIGFkZGVkIGZvciBuZXcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucywKKysjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrIyB3aWxsIGJyZWFrLgorKworKworKyMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysjIEVuc3VyZXMgdGhhdCBmdW5jdGlvbiAicG9pbnRlciIgdmFyaWFibGUgJHRvX2hvc3RfcGF0aF9jbWQgaXMgc2V0IHRvIHRoZQorKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KKyt0b19ob3N0X3BhdGhfY21kPQorK2Z1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisrICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKKysgICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgorKyAgZmkKKyt9CisrCisrCisrIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKysjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY190b19ob3N0X3BhdGggKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgorK30KKysjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKysjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCisreworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisrIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworKyAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKysjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKysgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKysgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKysjIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKysgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorKyAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCisrCisrCisgIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KKyBmdW5jX21vZGVfY29tcGlsZSAoKQorIHsKK0BAIC0xMzE0LDEyICsxOTg1LDEyIEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgOzsKKyAKKyAJLXBpZSB8IC1mcGllIHwgLWZQSUUpCistICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKysgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKKyAJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKy0JICBsYXRlcj0iJGxhdGVyICRhcmciCisrCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKK0BAIC0xMzQwLDE1ICsyMDExLDE0IEBAIGZ1bmNfbW9kZV9jb21waWxlICgpCisgCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisgCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKyAJICAgIElGUz0iJHNhdmVfaWZzIgorLQkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgorIAkgIGRvbmUKKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorIAkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAorIAkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorLQkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKysJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCitAQCAtMTM2NCw4ICsyMDM0LDcgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisgCisgICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKy0gICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgorICAgICBkb25lICMgZm9yIGFyZworIAorICAgICBjYXNlICRhcmdfbW9kZSBpbgorQEAgLTE0OTYsMTcgKzIxNjUsMTYgQEAgY29tcGlsZXIuIgorIAkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgIGZpCistICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmoiCisrICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgorICAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgICBmaQorIAorICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CistICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRsb2NrZmlsZSIKKysgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCistICAgICAgZXZhbCAic3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIiCistICAgIGZpCisrICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyAKK0BAIC0xNTI2LDcgKzIxOTQsNyBAQCBjb21waWxlci4iCisgCisgICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisgCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkbG9iaiIKKysJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgIGZpCisgCisgICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorQEAgLTE1NzMsMTEgKzIyNDEsMTEgQEAgY29tcGlsZXIuIgorIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICAgZmkKKyAgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorLQljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKKyAgICAgICBmaQorIAorICAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorLSAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKysgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisgCitAQCAtMTYyMiwxMyArMjI5MCwxMyBAQCBjb21waWxlci4iCisgfQorIAorICRvcHRfaGVscCB8fCB7CistICB0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorKyAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9CisgfQorIAorIGZ1bmNfbW9kZV9oZWxwICgpCisgeworICAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKy0gICAgY2FzZSAkbW9kZSBpbgorKyAgICBjYXNlICRvcHRfbW9kZSBpbgorICAgICAgICIiKQorICAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICAjIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZpbGUuCitAQCAtMTY1OSw4ICsyMzI3LDggQEAgVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisgCisgICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKKyAgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworLSAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKy0gIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZGluZyBub24tUElDIG9iamVjdHMgb25seQorKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKysgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQorICAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorQEAgLTE4MDQsNyArMjQ3Miw3IEBAIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgIDs7CisgCisgICAgICAgKikKKy0gICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgICAgICAgICA7OworICAgICBlc2FjCisgCitAQCAtMTgxOSwxMyArMjQ4NywxMyBAQCBpZiAkb3B0X2hlbHA7IHRoZW4KKyAgIGVsc2UKKyAgICAgeworICAgICAgIGZ1bmNfaGVscCBub2V4aXQKKy0gICAgICBmb3IgbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisrICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKyAJZnVuY19tb2RlX2hlbHAKKyAgICAgICBkb25lCisgICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgIHsKKyAgICAgICBmdW5jX2hlbHAgbm9leGl0CistICAgICAgZm9yIG1vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisgCWVjaG8KKyAJZnVuY19tb2RlX2hlbHAKKyAgICAgICBkb25lCitAQCAtMTg1NCwxMyArMjUyMiwxNiBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisgCisgICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCistICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCisrICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbworICAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisgCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKyAKKyAgICAgICBkaXI9CisgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICoubGEpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKysJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCisgCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisgCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisgCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKK0BAIC0xODgyLDcgKzI1NTMsNyBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorIAlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIAorIAlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKy0JICBkaXI9IiRkaXIvJG9iamRpciIKKysJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorIAllbHNlCisgCSAgaWYgdGVzdCAhIC1mICIkZGlyLyRkbG5hbWUiOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorQEAgLTE5MDcsMTAgKzI1NzgsMTAgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisgCisgICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKy0gICAgICBpZiBldmFsIHRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCI7IHRoZW4KKy0JZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJGRpcgorKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisrCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKKyAgICAgICBlbHNlCistCWV2YWwgJHNobGlicGF0aF92YXI9XCRkaXI6XCQkc2hsaWJwYXRoX3ZhcgorKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKKyAgICAgICBmaQorICAgICBkb25lCisgCitAQCAtMTkzOSw4ICsyNjEwLDcgQEAgZnVuY19tb2RlX2V4ZWN1dGUgKCkKKyAJOzsKKyAgICAgICBlc2FjCisgICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKy0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmlsZSIKKy0gICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGFyZ3MgIiRmaWxlIgorICAgICBkb25lCisgCisgICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCitAQCAtMTk3MiwyMiArMjY0Miw1OSBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICBmaQorIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorK3Rlc3QgIiRvcHRfbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorIAorIAorICMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KKyBmdW5jX21vZGVfZmluaXNoICgpCisgeworICAgICAkb3B0X2RlYnVnCistICAgIGxpYmRpcnM9IiRub25vcHQiCisrICAgIGxpYnM9CisrICAgIGxpYmRpcnM9CisgICAgIGFkbWluY21kcz0KKyAKKy0gICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKy0gICAgICBmb3IgZGlyCistICAgICAgZG8KKy0JbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKy0gICAgICBkb25lCisrICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorKyAgICBkbworKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisrCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorIAorKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKysJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKysJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKKysJZWxzZQorKwkgIGZ1bmNfd2FybmluZyAiXGAkb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisrCWZpCisrCisrICAgICAgZWxzZQorKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisrICAgICAgZmkKKysgICAgZG9uZQorKworKyAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KKysgICAgICBpZiB0ZXN0IC1uICIkbHRfc3lzcm9vdCI7IHRoZW4KKysgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisrICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c3Jvb3RfY21kPQorKyAgICAgIGZpCisrCisrICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisrICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisrICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKysgICAgICAgIGRvbmUKKysgICAgICBlbHNlCisrICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKysJICBzZWQgLWUgIiR7c3lzcm9vdF9jbWR9IHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCisrCSAgICA+ICR0bXBkaXIvdG1wLWxhCisrCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorKwlkb25lCisrICAgICAgICAke1JNfXIgIiR0bXBkaXIiCisrICAgICAgZmkKKysgICAgZmkKKysKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworIAlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisgCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KK0BAIC0xOTk3LDcgKzI3MDQsNyBAQCBmdW5jX21vZGVfZmluaXNoICgpCisgCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKyAJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisgCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKy0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGFkbWluY21kcz0iJGFkbWluY21kcworKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgZnVuY19hcHBlbmQgYWRtaW5jbWRzICIKKyAgICAgICAgJGNtZHMiCisgCWZpCisgICAgICAgZG9uZQorQEAgLTIwMDYsNTMgKzI3MTMsNTUgQEAgZnVuY19tb2RlX2ZpbmlzaCAoKQorICAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisgCistICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCistICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKy0gICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKy0gICAgICAkRUNITyAiICAgJGxpYmRpciIKKy0gICAgZG9uZQorLSAgICBlY2hvCistICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorLSAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKKy0gICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKy0gICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorLSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKy0gICAgICBlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorLSAgICAgIGVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorLSAgICAgIGxpYmRpcj1MSUJESVIKKy0gICAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKysgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKysgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworKwkkRUNITyAiICAgJGxpYmRpciIKKysgICAgICBkb25lCisrICAgICAgZWNobworKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorKyAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisrICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgorKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKwllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisrCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorKwllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorKyAgICAgIGZpCisrICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCWxpYmRpcj1MSUJESVIKKysJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorIAorLSAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCistICAgIGZpCistICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCistICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorLSAgICBmaQorLSAgICBlY2hvCisrCSRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorKwkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKysgICAgICBmaQorKyAgICAgIGVjaG8KKyAKKy0gICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCistICAgIGNhc2UgJGhvc3QgaW4KKy0gICAgICBzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorLSAgICAgICAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKy0JZWNobyAicGFnZXMuIgorLQk7OworLSAgICAgICopCistICAgICAgICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKysgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKysgICAgICBjYXNlICRob3N0IGluCisrCXNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisrCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKysJICBlY2hvICJwYWdlcy4iCisrCSAgOzsKKysJKikKKysJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKysJICA7OworKyAgICAgIGVzYWMKKysgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICBmaQorICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyB9CisgCistdGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorIAorIAorICMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitAQCAtMjA3Nyw3ICsyNzg2LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgICBjYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisgICAgICAgKltcXFwgL11jcFwgKikgaW5zdGFsbF9jcD06IDs7CitAQCAtMjA5Nyw3ICsyODA2LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgZG8KKyAgICAgICBhcmcyPQorICAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorLQlmaWxlcz0iJGZpbGVzICRkZXN0IgorKwlmdW5jX2FwcGVuZCBmaWxlcyAiICRkZXN0IgorIAlkZXN0PSRhcmcKKyAJY29udGludWUKKyAgICAgICBmaQorQEAgLTIxMzUsMTEgKzI4NDQsMTEgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAKKyAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistICAgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisgCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgorICAgICAgIGZpCistICAgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0iJGluc3RhbGxfc2hhcmVkX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgIGRvbmUKKyAKKyAgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorQEAgLTIxNTEsNyArMjg2MCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCisgICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorLQlpbnN0YWxsX3NoYXJlZF9wcm9nPSIkaW5zdGFsbF9zaGFyZWRfcHJvZyAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgZmkKKyAgICAgZmkKKyAKK0BAIC0yMjA5LDEwICsyOTE4LDEzIEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICouJGxpYmV4dCkKKyAJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKy0Jc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGZpbGUiCisrCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKKyAJOzsKKyAKKyAgICAgICAqLmxhKQorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCisrCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKworIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorIAkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorQEAgLTIyMjYsMjMgKzI5MzgsMzAgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKyAJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAllbHNlCisgCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorIAkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAKKyAJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCisgCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistCWRpcj0iJGRpciRvYmpkaXIiCisrCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKyAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKyAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKysgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0ZGlyIgorKyAgICAgIHNfZGVzdGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisgCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKy0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKysJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJHNfZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkZGVzdGxpYmRpclwkJSUiYAorIAorIAkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKyAJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CitAQCAtMjMxNSw3ICszMDM0LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKKyAKKyAJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorLQl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorKwl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKyAJOzsKKyAKKyAgICAgICAqLmxvKQorQEAgLTI1MDMsNyArMzIyMiw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuIFxgJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKKyAKKy0gICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyIgJiYgJG9wdF9maW5pc2g7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworQEAgLTI1MTIsNyArMzIzMSw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgICAgIGZpCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKK0BAIC0yNTU5LDYgKzMyNzgsMTggQEAgZXh0ZXJuIFwiQ1wiIHsKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyAjZW5kaWYKKyAKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorICIKKyAKK0BAIC0yNTcwLDIxICszMzAxLDIyIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgorIAkgIHByb2dmaWxlcz1gJEVDSE8gIiRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKy0JICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorLQkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKysJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisgCSAgZG9uZQorIAorIAkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisrCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgfQorIAkgIGZpCisgCisgCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICAgJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUCistCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKysJICAgICAgZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgfQorIAkgIGZpCisgCitAQCAtMjU5MywyMyArMzMyNSwyMyBAQCBleHRlcm4gXCJDXCIgeworIAkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CisgCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKy0JICAgICAgJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiCisrCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworIAkgICAgICBjYXNlICRob3N0IGluCisgCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLSAgICAgICAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorLSAgICAgICAgICAgICAgICBjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKysgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworIAkgICAgICAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIH0KKyAJICBlbHNlCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLycgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiCistCSAgICAgICRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQKKy0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKysJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKysJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKyAJICAgICAgY2FzZSAkaG9zdCBpbgorIAkgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorLQkgICAgICAgICAgZWNobyBFWFBPUlRTID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiIKKy0JICAgICAgICAgIGNhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKysJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAJICAgICAgICAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIH0KK0BAIC0yNjIwLDEwICszMzUyLDUyIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorIAkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisgCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAkRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiCistCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCistCSAgfQorKyAgICAgICAgICBjYXNlICRob3N0IGluCisrCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKysJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisrCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisrCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKysJICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorKwkgICAgICAgIGlmIHRlc3QgLW4gIiRjdXJyX2xhZmlsZSIgJiYgZnVuY19sYWxpYl9wICIkY3Vycl9sYWZpbGUiOyB0aGVuCisrCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworKwkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAorKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKysJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgIGVsc2UKKysJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorKwkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCisrCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorKwkgICAgICAgICAgZmkKKysJICAgICAgICBmaQorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisrCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgICBmaQorKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwKKysJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKysJICAgICAgICB9CisrCSAgICAgIGVsc2UgIyBub3QgYW4gaW1wb3J0IGxpYgorKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgICAgIH0KKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqKQorKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgeworKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrCSAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKysJICAgICAgfQorKwkgICAgOzsKKysgICAgICAgICAgZXNhYworIAlkb25lCisgCisgCSRvcHRfZHJ5X3J1biB8fCB7CitAQCAtMjY2MSwyNiArMzQzNSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICphZGRyZXNzOworIH0gbHRfZGxzeW1saXN0OworLSIKKy0JICBjYXNlICRob3N0IGluCistCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCistCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UKKy0gICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorLSAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICpvc2Y1KikKKy0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCistLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YSAqLyIKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworLQkgICopCistCSAgICBsdF9kbHN5bV9jb25zdD1jb25zdCA7OworLQkgIGVzYWMKKy0KKy0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLWV4dGVybiAkbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKKy0kbHRfZGxzeW1fY29uc3QgbHRfZGxzeW1saXN0CisrTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CisgbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KKyB7XAorICAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCitAQCAtMjczNiw3ICszNDkzLDcgQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisgCSAgY2FzZSAkYXJnIGluCisgCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CistCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAKK0BAIC0yNzk2LDkgKzM1NTMsMTEgQEAgZnVuY193aW4zMl9saWJpZCAoKQorICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgIDs7CisgICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCistICAgIGlmICRPQkpEVU1QIC1mICIkMSIgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKy0gICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCistICAgICAgd2luMzJfbm1yZXM9YCROTSAtZiBwb3NpeCAtQSAiJDEiIHwKKysgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisrICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKysgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKysgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIHwKKyAJJFNFRCAtbiAtZSAnCisgCSAgICAxLDEwMHsKKyAJCS8gSSAveworQEAgLTI4MjcsNiArMzU4NiwxMzEgQEAgZnVuY193aW4zMl9saWJpZCAoKQorICAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgorIH0KKyAKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKKysjCisrIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisrIyBpbXBvcnQgbGlicmFyeSBBUkcuCisrIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAorK30KKysKKysjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlIFNFQ1RJT05fTkFNRSBMSUJOQU1FcworKyMKKysjIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKKysjIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlCisrIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKysjCisrIyBTRUNUSU9OX05BTUUgaXMgZWl0aGVyIC5pZGF0YSQ2IG9yIC5pZGF0YSQ3LCBkZXBlbmRpbmcKKysjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisrIworKyMgRWNob3MgdGhlIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlCisrIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCisrZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisrICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKKysgICAgICAjIFBsYWNlIG1hcmtlciBhdCBiZWdpbm5pbmcgb2YgYXJjaGl2ZSBtZW1iZXIgZGxsbmFtZSBzZWN0aW9uCisrICAgICAgcy8uKi89PT09TUFSSz09PT0vCisrICAgICAgcAorKyAgICAgIGQKKysgICAgfQorKyAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0CisrICAgICMgYXJlIGFsd2F5cyB1bmludGVyZXN0aW5nCisrICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorKyAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKKysgICAgIyBFbnN1cmUgbWFya2VyIGlzIHByaW50ZWQKKysgICAgL149PT09TUFSSz09PT0vcAorKyAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycworKyAgICAvXi5cezQzXH0vIWQKKysgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKysgICAgcy9eLlx7NDNcfS8vJyB8CisrICAgICRTRUQgLW4gJworKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKysgICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCisrICAgICAgSAorKyAgICAgICQgYiBwYXJhCisrICAgICAgYgorKyAgICAgIDpwYXJhCisrICAgICAgeAorKyAgICAgIHMvXG4vL2cKKysgICAgICAjIFJlbW92ZSB0aGUgbWFya2VyCisrICAgICAgcy9ePT09PU1BUks9PT09Ly8KKysgICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCisrICAgICAgcy9bXC4gXHRdKiQvLworKyAgICAgICMgUHJpbnQKKysgICAgICAvLi9wJyB8CisrICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAorKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorKyAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisrICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKysgICAgIyBhICcuJyAodGhhdCBpcywgb2JqZHVtcCdzIHJlcHJlc2VudGF0aW9uIG9mIGFuIHVucHJpbnRhYmxlCisrICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisrICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CisrICAgICMgYmVnaW5zIHdpdGggYSBsaXRlcmFsICcuJyBvciBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkKKysgICAgIyBhICcuJy4KKysgICAgIworKyAgICAjIE9mIHRob3NlIHRoYXQgcmVtYWluLCBwcmludCB0aGUgZmlyc3Qgb25lLgorKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworK30KKysKKysjIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCisrIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisrIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKysjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCisrZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisrIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisrIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKysjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCisrZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCisrICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCisrfQorKworKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRworKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKysjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorKyMKKysjIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCisrIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCisrIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisrIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisrICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKKysgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgOyB0aGVuCisrICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisrICBlbHNlCisrICAgICMgdW5rbm93bgorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0iIgorKyAgZmkKKyt9CisgCisgCisgIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitAQCAtMjkxNyw3ICszODAxLDcgQEAgZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCisgCSAgICBkYXJ3aW5fZmlsZT0KKyAJICAgIGRhcndpbl9maWxlcz0KKyAJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworLQkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8ICROTDJTUGAKKysJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorIAkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworIAkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKyAJICAgICRSTSAtcmYgdW5mYXQtJCQKK0BAIC0yOTMyLDcgKzM4MTYsNyBAQCBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKKyAgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorIAk7OworICAgICAgIGVzYWMKKy0gICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJE5MMlNQYAorKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAorICAgICBkb25lCisgCisgICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorQEAgLTMwMTQsNyArMzg5OCwxMTAgQEAgZnVuY19mYWxsYmFja19lY2hvICgpCisgX0xURUNIT19FT0YnCisgfQorICAgICBFQ0hPPVwiJHFFQ0hPXCIKKy0gIGZpXAorKyAgZmkKKysKKysjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bworKyMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgorKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKysjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgorKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgd2hpY2ggbWF0Y2gKKysjIHRoaXMgcGF0dGVybikuCisrIworKyMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAorKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQorKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCisrbHRfb3B0aW9uX2RlYnVnPQorK2Z1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQorK3sKKysgIGx0X3NjcmlwdF9hcmcwPVwkMAorKyAgc2hpZnQKKysgIGZvciBsdF9vcHQKKysgIGRvCisrICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCisrICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisrICAgIC0tbHQtZHVtcC1zY3JpcHQpCisrICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKKysgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisrICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCisrICAgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtLWx0LSopCisrICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorKyAgICAgICAgZXhpdCAxCisrICAgICAgOzsKKysgICAgZXNhYworKyAgZG9uZQorKworKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKysgICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisrICBmaQorK30KKysKKysjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKysjIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKKytmdW5jX2x0X2R1bXBfYXJncyAoKQorK3sKKysgIGx0X2R1bXBfYXJnc19OPTE7CisrICBmb3IgbHRfYXJnCisrICBkbworKyAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisrICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCisrICBkb25lCisrfQorKworKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KKytmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCisreworKyIKKysgIGNhc2UgJGhvc3QgaW4KKysgICMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKworKyAgKikKKysgICAgJEVDSE8gIlwKKysgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKysgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgorKyAgICAgIGZpCisrICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisrIgorKyAgICA7OworKyAgZXNhYworKyAgJEVDSE8gIlwKKysgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisrICAgICAgZXhpdCAxCisrfQorKworKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorKyMgU3RyaXBzIG9wdGlvbnMgaW4gdGhlIC0tbHQtKiBuYW1lc3BhY2UgZnJvbSBcJEAgYW5kCisrIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKytmdW5jX2V4ZWNfcHJvZ3JhbSAoKQorK3sKKysgIGZvciBsdF93cl9hcmcKKysgIGRvCisrICAgIGNhc2UgXCRsdF93cl9hcmcgaW4KKysgICAgLS1sdC0qKSA7OworKyAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworKyAgICBlc2FjCisrICAgIHNoaWZ0CisrICBkb25lCisrICBmdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlIFwkezErXCJcJEBcIn0KKyt9CisrCisrICAjIFBhcnNlIG9wdGlvbnMKKysgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKyAKKyAgICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCisgICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorQEAgLTMwNzgsNyArNDA2NSw3IEBAIF9MVEVDSE9fRU9GJworIAorICAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCistICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcIlwkcmVsaW5rX2NvbW1hbmRcIiAyPiYxXGA7IHRoZW4gOgorKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgIGVsc2UKKyAJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorIAkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKK0BAIC0zMTAyLDYgKzQwODksMTggQEAgX0xURUNIT19FT0YnCisgCisgICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgorIAorKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorKwkjCisrCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorKwkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCisrCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorKwkgICRFQ0hPICJcCisrICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisrICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisrIgorKwlmaQorKworIAkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKyAJaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorIAkgICRFQ0hPICJcCitAQCAtMzExNiwzNSArNDExNSwxMCBAQCBfTFRFQ0hPX0VPRicKKyAiCisgCWZpCisgCistCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCistCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorLQkgICRFQ0hPICJcCistICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICistICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICistIgorLQlmaQorLQorIAkkRUNITyAiXAorICAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKy0iCistCWNhc2UgJGhvc3QgaW4KKy0JIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCistCSotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCistCSAgJEVDSE8gIlwKKy0gICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKy0iCistCSAgOzsKKy0KKy0JKikKKy0JICAkRUNITyAiXAorLSAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorLSIKKy0JICA7OworLQllc2FjCistCSRFQ0hPICJcCistICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorLSAgICAgIGV4aXQgMQorKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICAgZmkKKyAgIGVsc2UKKyAgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorQEAgLTMxNTgsMTY2ICs0MTMyLDYgQEAgZmlcCisgfQorIAorIAorLSMgZnVuY190b19ob3N0X3BhdGggYXJnCistIworLSMgQ29udmVydCBwYXRocyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKy0jIEludGVuZGVkIGZvciB1c2Ugd2l0aCAibmF0aXZlIiBtaW5ndyAod2hlcmUgbGlidG9vbCBpdHNlbGYKKy0jIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorLSMgYnVpbGQgZW52aXJvbm1lbnRzOgorLSMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CistIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKy0jICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworLSMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CistIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKy0jIEluIHRoZSBuYXRpdmUgbWluZ3cgY2FzZSwgdGhlIChtc3lzKSBzaGVsbCBhdXRvbWF0aWNhbGx5CistIyBjb252ZXJ0cyBwYXRocyBmb3IgYW55IG5vbi1tc3lzIGFwcGxpY2F0aW9ucyBpdCBsYXVuY2hlcywKKy0jIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCistIyBTaW1pbGFyIGFjY29tbW9kYXRpb25zIGFyZSBuZWNlc3NhcnkgZm9yICRob3N0IG1pbmd3IGFuZAorLSMgJGJ1aWxkIGN5Z3dpbi4gIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBkb2VzIG5vIGhhcm0gZm9yIG90aGVyCistIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCistIworLSMgQVJHIGlzIHRoZSBwYXRoIChvbiAkYnVpbGQpIHRoYXQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworLSMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCistIyBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorLWZ1bmNfdG9faG9zdF9wYXRoICgpCisteworLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKy0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKm1pbmd3KiApCistICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCistICAgICAgICBjYXNlICRidWlsZCBpbgorLSAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworLSAgICAgICAgICAgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKKy0gICAgICAgICAgICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqY3lnd2luKiApCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC13ICIkMSIgfAorLQkgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKiApCistICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybworLSAgICAgICAgICAgICMgZXJyb3IgY29kZSwgc28gd2UgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YKKy0gICAgICAgICAgICAjIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBjb21tYW5kIGlzIG5vdAorLSAgICAgICAgICAgICMgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorLSAgICAgICAgICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aAorLSAgICAgICAgICAgICMgZXJyb3IgY29kZSBvZiB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucworLSAgICAgICAgICAgICMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX3RvX2hvc3RfcGF0aF90bXAxfSI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8CistICAgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAjIEFsbG93IHdhcm5pbmcgYmVsb3cuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9CistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCistICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorLSAgICAgICAgICAjIEZhbGxiYWNrOgorLSAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorLSAgICAgICAgZmkKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gIGZpCistfQorLSMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorLQorLSMgZnVuY190b19ob3N0X3BhdGhsaXN0IGFyZworLSMKKy0jIENvbnZlcnQgcGF0aGxpc3RzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorLSMgU2VlIGZ1bmNfdG9faG9zdF9wYXRoKCksIGFib3ZlLiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHRoZQorLSMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCistIyBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBoZXJlKToKKy0jICAgICRidWlsZCAgICAgICAgICAkaG9zdAorLSMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCistIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKy0jICAgICpuaXggKyB3aW5lICAgICBtaW5ndworLSMKKy0jIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvCistIyAkaG9zdCBmb3JtYXQuIElmIEFSRyBiZWdpbnMgb3IgZW5kcyB3aXRoIGEgcGF0aCBzZXBhcmF0b3IKKy0jIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKy0jIG9uIG91dHB1dC4KKy0jCistIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKy0jIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gb24gJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCistIyBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdC4KKy1mdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKKy17CistICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkMSIKKy0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorLSAgICBjYXNlICRob3N0IGluCistICAgICAgKm1pbmd3KiApCistICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCistICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKy0gICAgICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKy0gICAgICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCistCWZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCistICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistICAgICAgICBjYXNlICRidWlsZCBpbgorLSAgICAgICAgICAqbWluZ3cqICkgIyBBY3R1YWxseSwgbXN5cy4KKy0gICAgICAgICAgICAjIEF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQuCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gCistCSAgICAgICggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiICkgMj4vZGV2L251bGwgfAorLQkgICAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKmN5Z3dpbiogKQorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGN5Z3BhdGggLXcgLXAgIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgfAorLSAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICogKQorLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhsaXN0cworLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTPSRJRlMKKy0gICAgICAgICAgICBJRlM9OgorLSAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworLSAgICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCistICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiIDsgdGhlbgorLSAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorLSAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCistICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorLSAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQgIjskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorLSAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGRvbmUKKy0gICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKy0gICAgICAgICAgICA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOyB0aGVuCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGhvc3QgcGF0aChzKSBjb3JyZXNwb25kaW5nIHRvIgorLSAgICAgICAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorLSAgICAgICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKy0gICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCistICAgICAgICAgICMgc3BlY2lmaWNhdGlvbnMuIFRoZSBmaXggaXMgbm90IHRvIGNvbXBsaWNhdGUgdGhlIGV4cHJlc3Npb24KKy0gICAgICAgICAgIyBiZWxvdywgYnV0IGZvciB0aGUgdXNlciB0byBwcm92aWRlIGEgd29ya2luZyB3aW5lIGluc3RhbGxhdGlvbgorLSAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworLSAgICAgICAgICAjIGNhc2Ugd29ya3MgcHJvcGVybHkuCistICAgICAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zPSJzfDp8O3xnIgorLSAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCistICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zImAKKy0gICAgICAgIGZpCistICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworLSAgICAgICAgY2FzZSAiJDEiIGluCistICAgICAgICAgIDoqICkgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iOyRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IgorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICBjYXNlICIkMSIgaW4KKy0gICAgICAgICAgKjogKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0ICI7IgorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICA7OworLSAgICBlc2FjCistICBmaQorLX0KKy0jIGVuZDogZnVuY190b19ob3N0X3BhdGhsaXN0CistCisgIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisgIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0CisgIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKK0BAIC0zMzM0LDEwICs0MTQ4LDYgQEAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQorIAorICAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCistCistICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIiRTSEVMTCAkb3V0cHV0IiwKKy0gICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCistICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorICovCisgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorQEAgLTM0NjIsMjIgKzQyNzIsMTMgQEAgaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisgICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorIH0gd2hpbGUgKDApCisgCistI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorLSNpZiBkZWZpbmVkIExUX0RFQlVHV1JBUFBFUgorLSMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKSBsdHdyYXBwZXJfZGVidWdwcmludGYgYXJncworLXN0YXRpYyB2b2lkCistbHR3cmFwcGVyX2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKKy17CistICAgIHZhX2xpc3QgYXJnczsKKy0gICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CistICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworLSAgICB2YV9lbmQgKGFyZ3MpOworLX0KKysjaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCisrc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisgI2Vsc2UKKy0jIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykKKytzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKKyAjZW5kaWYKKyAKKy1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KKyAKKyB2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKKyBjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOworQEAgLTM0ODcsNyArNDI4OCwxMCBAQCBjaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOworIGludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworIGludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKKyBjaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKKy12b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworK3ZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cisrdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Cisrc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworK3N0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Cisgdm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKyBjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOworIHZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitAQCAtMzQ5NywxNCArNDMwMSwxNCBAQCB2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorLWNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Cisrdm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKKyBjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CisgRU9GCisgCisgCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCistICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiR0ZW1wX3JwYXRoIgorKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgorIAkgICAgICBjYXQgPDxFT0YKKy1jb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CisrY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CisgRU9GCisgCSAgICBlbHNlCisgCSAgICAgIGNhdCA8PCJFT0YiCitAQCAtMzUxMywxMCArNDMxNywxMCBAQCBFT0YKKyAJICAgIGZpCisgCisgCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJGRsbHNlYXJjaHBhdGg6IgorKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKyAJICAgICAgY2F0IDw8RU9GCisgY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7CistY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworIEVPRgorIAkgICAgZWxzZQorIAkgICAgICBjYXQgPDwiRU9GIgorQEAgLTM1MzksMTIgKzQzNDMsMTAgQEAgRU9GCisgCSAgICBjYXQgPDwiRU9GIgorIAorICNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCistI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggIDUKKyAKKy1zdGF0aWMgY29uc3Qgc2l6ZV90IG9wdF9wcmVmaXhfbGVuICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CistCisgc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOworIAorIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCitAQCAtMzU2MSwxMCArNDM2MywxMyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgaW50IGk7CisgCisgICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsIGFyZ3ZbMF0pKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgcHJvZ3JhbV9uYW1lIDogJXNcbiIsIHByb2dyYW1fbmFtZSkpOworKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworIAorLSAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQgKi8KKysgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisrICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKKysgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKysgICAqLworKyAgbmV3YXJnYz0wOworICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICAgeworICAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorQEAgLTM1ODEsMjEgKzQzODYsNTQgQEAgRU9GCisgCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CisgCSAgcmV0dXJuIDA7CisgCX0KKysgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisrCXsKKysgICAgICAgICAgbHRfZGVidWcgPSAxOworKyAgICAgICAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisrICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKysgICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KKysgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorKyAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAorKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKysgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisrICAgICAgICAgICAqLworKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKKysgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKysgICAgICAgIH0KKysgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisrICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgIH0KKysgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisrCisrRU9GCisrCSAgICBjYXQgPDxFT0YKKysgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CisrRU9GCisrCSAgICBjYXQgPDwiRU9GIgorKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIHByb2dyYW1fbmFtZTogJXNcbiIsIHByb2dyYW1fbmFtZSk7CisgCistICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICAgaWYgKHRtcF9wYXRoc3BlYyA9PSBOVUxMKQorLSAgICBsdF9mYXRhbCAoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKy0JCQkgIHRtcF9wYXRoc3BlYykpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysgICAgICAgICAgICAgICAgICAiKG1haW4pIGZvdW5kIGV4ZSAoYmVmb3JlIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKysJCSAgdG1wX3BhdGhzcGVjKTsKKyAKKyAgIGFjdHVhbF9jd3JhcHBlcl9wYXRoID0gY2hhc2Vfc3ltbGlua3MgKHRtcF9wYXRoc3BlYyk7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKy0JCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisrCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworIAorLSAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwKCBiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisrICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAKKyAgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCitAQCAtMzYxMyw4ICs0NDUxLDkgQEAgRU9GCisgICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgIHRtcF9wYXRoc3BlYyA9IDA7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGxpYnRvb2wgdGFyZ2V0IG5hbWU6ICVzXG4iLAorLQkJCSAgdGFyZ2V0X25hbWUpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisrCQkgIHRhcmdldF9uYW1lKTsKKyBFT0YKKyAKKyAJICAgIGNhdCA8PEVPRgorQEAgLTM2NjQsMzUgKzQ1MDMsMTkgQEAgRU9GCisgCisgICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKy0gIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworKyAgLyogVXBkYXRlIHRoZSBETEwgc2VhcmNocGF0aC4gIEVYRV9QQVRIX1ZBTFVFICgkZGxsc2VhcmNocGF0aCkgbXVzdAorKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisrICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKKysgICAgIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuICovCisgICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKysgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworIAorLSAgbmV3YXJnYz0wOworLSAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKy0gICAgeworLSAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgb3B0X3ByZWZpeF9sZW4pID09IDApCistICAgICAgICB7CistICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKy0gICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorLSAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorLSAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCistICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCistICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCistICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorLSAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKy0gICAgICAgICAgICovCistICAgICAgICAgIGx0X2ZhdGFsICgiVW5yZWNvZ25pemVkIG9wdGlvbiBpbiAlcyBuYW1lc3BhY2U6ICclcyciLAorLSAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworLSAgICAgICAgfQorLSAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKy0gICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKy0gICAgfQorLSAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKy0KKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAgICAgKCgiKG1haW4pIGx0X2FyZ3ZfemVybyA6ICVzXG4iLCAobHRfYXJndl96ZXJvID8gbHRfYXJndl96ZXJvIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGx0X2FyZ3ZfemVybzogJXNcbiIsCisrCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICAgeworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbmV3YXJnelslZF0gICA6ICVzXG4iLCBpLCAobmV3YXJneltpXSA/IG5ld2FyZ3pbaV0gOiAiPE5VTEw+IikpKTsKKysgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKKysJCSAgICAgIGksIG5vbm51bGwgKG5ld2FyZ3pbaV0pKTsKKyAgICAgfQorIAorIEVPRgorQEAgLTM3MDYsNyArNDUyOSw5IEBAIEVPRgorICAgaWYgKHJ2YWwgPT0gLTEpCisgICAgIHsKKyAgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworLSAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiBlcnJubyA9ICVkXG4iLCBsdF9hcmd2X3plcm8sIGVycm5vKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiAlc1xuIiwKKysJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgIHJldHVybiAxMjc7CisgICAgIH0KKyAgIHJldHVybiBydmFsOworQEAgLTM3MjgsNyArNDU1Myw3IEBAIHhtYWxsb2MgKHNpemVfdCBudW0pCisgeworICAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgIGlmICghcCkKKy0gICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisgCisgICByZXR1cm4gcDsKKyB9CitAQCAtMzc2Miw4ICs0NTg3LDggQEAgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKKyB7CisgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsCistCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzc4MCw4ICs0NjA1LDggQEAgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQorICAgaW50IHJ2YWwgPSAwOworICAgc3RydWN0IHN0YXQgc3Q7CisgCistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1ha2VfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorLQkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICAgcmV0dXJuIDA7CisgCitAQCAtMzgwNyw4ICs0NjMyLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgaW50IHRtcF9sZW47CisgICBjaGFyICpjb25jYXRfbmFtZTsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCistCQkJICB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKKyAKKyAgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgIHJldHVybiBOVUxMOworQEAgLTM4NjEsNyArNDY4Niw4IEBAIGZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKKyAJCXsKKyAJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKyAJCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorLQkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworIAkJICBjb25jYXRfbmFtZSA9CisgCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CitAQCAtMzg4Niw3ICs0NzEyLDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorICAgICB9CisgICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCistICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorKyAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworQEAgLTM5MTIsOCArNDczOSw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIGludCBoYXNfc3ltbGlua3MgPSAwOworICAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQorICAgICB7CistICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCistCQkJICAgICAgdG1wX3BhdGhzcGVjKSk7CisrICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAorKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisgCXsKKyAJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorQEAgLTM5MzUsOCArNDc2Myw5IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yIChlcnJubyk7CistCSAgbHRfZmF0YWwgKCJFcnJvciBhY2Nlc3NpbmcgZmlsZSAlcyAoJXMpIiwgdG1wX3BhdGhzcGVjLCBlcnJzdHIpOworKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorKwkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworIAl9CisgICAgIH0KKyAgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworQEAgLTM5NDksNyArNDc3OCw4IEBAIGNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKKyAgIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKKyAgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICAgeworLSAgICAgIGx0X2ZhdGFsICgiQ291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisrICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICAgfQorICAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisgI2VuZGlmCitAQCAtMzk3NSwxMSArNDgwNSwyNSBAQCBzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQorICAgcmV0dXJuIHN0cjsKKyB9CisgCisrdm9pZAorK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaWYgKGx0X2RlYnVnKQorKyAgICB7CisrICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworKyAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOworKyAgICAgIHZhX2VuZCAoYXJncyk7CisrICAgIH0KKyt9CisrCisgc3RhdGljIHZvaWQKKy1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisrbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQorIHsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKysgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworIAorQEAgLTM5ODgsMjAgKzQ4MzIsMzIgQEAgbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorIH0KKyAKKyB2b2lkCistbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKytsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKKyB7CisgICB2YV9saXN0IGFwOworICAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKy0gIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgICB2YV9lbmQgKGFwKTsKKyB9CisgCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCisreworKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICoKKytub25lbXB0eSAoY29uc3QgY2hhciAqcykKKyt7CisrICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworK30KKysKKyB2b2lkCisgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICAgeworICNpZmRlZiBIQVZFX1NFVEVOVgorICAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworQEAgLTQwNDksOSArNDkwNSw5IEBAIGx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKKyB2b2lkCisgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKKyB7CistICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgCisgICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgIHsKK0BAIC00MDcwLDkgKzQ5MjYsOSBAQCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHZvaWQKKyBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKysgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAKKyAgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICAgeworQEAgLTQyMjIsNyArNTA3OCw3IEBAIEVPRgorIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCisgeworICAgICAkb3B0X2RlYnVnCistICAgIGNhc2UgYGV2YWwgIiRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIiB8ICRTRUQgLWUgMTBxYCBpbgorKyAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCisgICAgICppbXBvcnQqKSA6IDs7CisgICAgICopIGZhbHNlIDs7CisgICAgIGVzYWMKK0BAIC00NDAxLDkgKzUyNTcsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqKQorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorLQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKyAJICAgIGVsc2UKKy0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKysJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRhcmciCisgCSAgICBmaQorIAkgICAgcHJldj0KKyAJICAgIGNvbnRpbnVlCitAQCAtNDQyNyw3ICs1MjgzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICotKi1kYXJ3aW4qKQorIAkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisgCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKKy0JCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKysJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisgCQkgICA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CitAQCAtNDQ0Niw3ICs1MzAyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIG1vcmVhcmdzPQorIAkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorIAkgICAgZG8KKy0jCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKKysjCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKKyAJICAgICAgYXJnPSRmaWwKKyAJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisgCitAQCAtNDQ3NSw3ICs1MzMxLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKy0JCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorKwkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJICAgICAgcHJldj0KKyAJCSAgICAgIGNvbnRpbnVlCisgCQkgICAgZWxzZQorQEAgLTQ0ODcsNyArNTM0Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisgCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKyAJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCistCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisrCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJICAgIHByZXY9CisgCQkgIGZpCisgCitAQCAtNDU1NywxMiArNTQxMywxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisgCSAgICBjYXNlICIkcnBhdGggIiBpbgorIAkgICAgKiIgJGFyZyAiKikgOzsKKy0JICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKKyAJICAgIGVzYWMKKyAJICBlbHNlCisgCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7CisgCSAgICBlc2FjCisgCSAgZmkKKyAJICBwcmV2PQorQEAgLTQ1NzQsMjggKzU0MzAsMjggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXdlYWspCistCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisrCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKyAJICBwcmV2PQorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGNjbGlua2VyKQorLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisgCSAgcHJldj0KKyAJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAl4Y29tcGlsZXIpCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJeGxpbmtlcikKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCistCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRxYXJnIgorIAkgIHByZXY9CisgCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisgCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bCRxYXJnIgorQEAgLTQ2ODYsMTUgKzU1NDIsMTYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJOzsKKyAKKyAgICAgICAtTCopCistCWZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRhcmciCistCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisrCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisrCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCisgCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorIAkgIGVsc2UKKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorIAkgIGZpCisgCWZpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJY2FzZSAkZGlyIGluCisgCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKK0BAIC00NzA2LDEwICs1NTYzLDE2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgOzsKKyAJZXNhYworIAljYXNlICIkZGVwbGlicyAiIGluCistCSoiIC1MJGRpciAiKikgOzsKKysJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKysJICAjIFdpbGwgb25seSBoYXBwZW4gZm9yIGFic29sdXRlIG9yIHN5c3Jvb3QgYXJndW1lbnRzCisrCSAgOzsKKyAJKikKKy0JICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCistCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisrCSAgIyBQcmVzZXJ2ZSBzeXNyb290LCBidXQgbmV2ZXIgaW5jbHVkZSByZWxhdGl2ZSBkaXJlY3RvcmllcworKwkgIGNhc2UgJGRpciBpbgorKwkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1MJGRpciIgOzsKKysJICBlc2FjCisrCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIKKyAJICA7OworIAllc2FjCisgCWNhc2UgJGhvc3QgaW4KK0BAIC00NzE4LDEyICs1NTgxLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JGRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKyAJICBlc2FjCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC00NzQ3LDcgKzU2MTAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisgCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKyAJICAgIGNvbnRpbnVlCisgCSAgICA7OworIAkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKK0BAIC00NzU4LDkgKzU2MjEsNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworIAkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisgCSAgICA7OworLQkgICotKi1saW51eCopCistCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKy0JICAgIDs7CisgCSAgZXNhYworIAllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisgCSBjYXNlICRob3N0IGluCitAQCAtNDc3MCw3ICs1NjMwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgOzsKKyAJIGVzYWMKKyAJZmkKKy0JZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKysJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisgCWNvbnRpbnVlCisgCTs7CisgCitAQCAtNDc4Miw4ICs1NjQyLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgICMgRGFyd2luIHVzZXMgdGhlIC1hcmNoIGZsYWcgdG8gZGV0ZXJtaW5lIG91dHB1dCBhcmNoaXRlY3R1cmUuCistICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKy0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3R8LS1zeXNyb290KQorKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorIAlwcmV2PXhjb21waWxlcgorQEAgLTQ3OTEsMTIgKzU2NTEsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJOzsKKyAKKyAgICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGFyZyIgOzsKKysJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRhcmciIDs7CisgCWVzYWMKKyAJY29udGludWUKKyAJOzsKK0BAIC00ODYzLDEzICs1NzIzLDE3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAljYXNlICRkaXIgaW4KKyAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworKwk9KikKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCisrCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgIDs7CisgCSopCisgCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCisgCSAgOzsKKyAJZXNhYworIAljYXNlICIkeHJwYXRoICIgaW4KKyAJKiIgJGRpciAiKikgOzsKKy0JKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CisgCWVzYWMKKyAJY29udGludWUKKyAJOzsKK0BAIC00OTIyLDggKzU3ODYsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCistCSAgYXJnPSIkYXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCWRvbmUKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKK0BAIC00OTM4LDkgKzU4MDIsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCistCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCWRvbmUKKyAJSUZTPSIkc2F2ZV9pZnMiCisgCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKK0BAIC00OTY4LDI0ICs1ODMyLDI3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorIAk7OworIAorLSAgICAgICMgLTY0LCAtbWlwc1swLTldIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU0dJIGNvbXBpbGVyCistICAgICAgIyAtclswLTldWzAtOV0qIHNwZWNpZmllcyB0aGUgcHJvY2Vzc29yIG9uIHRoZSBTR0kgY29tcGlsZXIKKy0gICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCistICAgICAgIyArREEqLCArREQqIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgSFAgY29tcGlsZXIKKy0gICAgICAjIC1xKiBwYXNzIHRocm91Z2ggY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorLSAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworLSAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCistICAgICAgIyAtRi9wYXRoIGdpdmVzIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorLSAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKKy0gICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcworLSAgICAgICMgLXRwPSogUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgorKyAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKKysgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorKyAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKKysgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgorKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKysgICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKysgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCisrICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKysgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQworKyAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCisrICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisrICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0CisrICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKy0gICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSopCisrICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisrICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2luKQorICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCistICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisgICAgICAgICBjb250aW51ZQorICAgICAgICAgOzsKKyAKK0BAIC00OTk3LDcgKzU4NjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICouJG9iamV4dCkKKyAJIyBBIHN0YW5kYXJkIG9iamVjdC4KKy0Jb2Jqcz0iJG9ianMgJGFyZyIKKysJZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCisgCTs7CisgCisgICAgICAgKi5sbykKK0BAIC01MDI4LDcgKzU4OTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCistCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKysJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKyAJCXByZXY9CisgCQljb250aW51ZQorIAkgICAgICBlbHNlCitAQCAtNTA0MCw3ICs1OTA3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisgCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKy0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKKyAJICAgICAgcHJldj0KKyAJICAgIGZpCisgCitAQCAtNTA4NSwyNCArNTk1MiwyNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICouJGxpYmV4dCkKKyAJIyBBbiBhcmNoaXZlLgorLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorLQlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisrCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgorKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisgCWNvbnRpbnVlCisgCTs7CisgCisgICAgICAgKi5sYSkKKyAJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgorIAorKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKKyAJaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorIAkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorLQkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisrCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgcHJldj0KKyAJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisgCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKy0JICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIHByZXY9CisgCWVsc2UKKy0JICBkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAlmaQorIAljb250aW51ZQorIAk7OworQEAgLTUxMjcsNyArNTk5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorIAorICAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCistICAgICAgZXZhbCAiYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiIgorKyAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgZmkKK0BAIC01MTQ0LDExICs2MDEyLDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgIGVsc2UKKyAgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KKyAgICAgZmkKKy0gICAgZXZhbCAic3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIiIKKy0gICAgZXZhbCAic3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIiCisrICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgorKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisgCisgICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCisgICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKysgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKysgICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisgCitAQCAtNTE2OSwxMiArNjAzOSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCistICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAljYXNlICIkbGlicyAiIGluCistCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZmkKKy0gICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgorICAgICBkb25lCisgCisgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KK0BAIC01MTg3LDkgKzYwNTcsOSBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisgCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworIAkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKy0JICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CisgCSAgZXNhYworLQkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisrCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCisgCWRvbmUKKyAgICAgICBmaQorICAgICAgIHByZV9wb3N0X2RlcHM9CitAQCAtNTI1Niw4ICs2MTI2LDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKyAJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisgCSAgZGVwZW5kZW5jeV9saWJzPQorKwkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorIAkgIGNhc2UgJGxpYiBpbgorLQkgICoubGEpCWZ1bmNfc291cmNlICIkbGliIiA7OworKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgIGVzYWMKKyAKKyAJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKK0BAIC01MjY3LDcgKzYxMzgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorIAkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorIAkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworLQkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKyAJZG9uZQorQEAgLTUyODgsMTEgKzYxNTksMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICBlbHNlCistCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorIAkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJCSAgICAqIiAkZGVwbGliICIqKSA7OworLQkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisrCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKyAJCWVzYWMKKyAJICAgIGZpCisgCSAgZmkKK0BAIC01Mzc3LDcgKzYyNDgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKyAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisgCQllc2FjCisgCSAgICBmaQorIAkgIGZpCitAQCAtNTM5MCw3ICs2MjYxLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKyAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgICAgOzsKKyAJICBwcm9nKQorIAkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorQEAgLTU0MDQsNyArNjI3Niw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisgCSAgICBmaQorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgICAgOzsKKyAJICAqKQorIAkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorQEAgLTU0MTUsMTcgKzYyODgsMjEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJLVIqKQorIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKyAJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCistCSAgICBkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKyAJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorIAkgICAgKiIgJGRpciAiKikgOzsKKy0JICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKyAJICAgIGVzYWMKKyAJICBmaQorIAkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisgCSAgY29udGludWUKKyAJICA7OworLQkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisrCSoubGEpCisrCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCSAgbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysJICA7OworIAkqLiRsaWJleHQpCisgCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKK0BAIC01NDg4LDExICs2MzY1LDExIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorIAkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKKyAJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCistCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGVwbGliIgorIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKyAJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICAgIGVsc2UKKy0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCisgCSAgICBmaQorIAkgIGZpCisgCSAgY29udGludWUKK0BAIC01NTM4LDcgKzY0MTUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKyAJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKy0JICAgICAgKikgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlmaQorQEAgLTU1NDYsOCArNjQyMyw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisgCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorIAkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgorLQkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCistCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGRscHJlb3BlbiIKKysJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKysJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGRscHJlb3BlbiIKKyAJZmkKKyAKKyAJaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorQEAgLTU1NTgsMjAgKzY0MzUsMjAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCSAgICBmaQorIAkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorLQkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCistCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisgCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKyAJICBmaQorIAkgIHRtcF9saWJzPQorIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKy0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCistCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisgCSAgZG9uZQorIAkgIGNvbnRpbnVlCisgCWZpICMgJHBhc3MgPSBjb252CitAQCAtNTU3OSw5ICs2NDU2LDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKyAJbGlua2xpYj0KKy0JZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworLQkgIGxpbmtsaWI9IiRsIgorLQlkb25lCisrCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKKysJICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAorKwkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisrCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKKysJZWxzZQorKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKysJICAgIGxpbmtsaWI9IiRsIgorKwkgIGRvbmUKKysJZmkKKyAJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisgCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisgCWZpCitAQCAtNTU5OCw5ICs2NDgxLDkgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55CisgCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorIAkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorLQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorKwkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKyAJICBlbHNlCistCSAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIgorKwkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCisgCSAgZmkKKyAJICBjb250aW51ZQorIAlmaSAjICRwYXNzID0gZGxvcGVuCitAQCAtNTYyMiwxNCArNjUwNSwxNCBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKyAJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorLQkgIGlmIHRlc3QgISAtZiAiJGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKysJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKyAJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisgCSAgICBkaXI9IiRsYWRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKyAJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICBlbHNlCistCSAgICBkaXI9IiRsaWJkaXIiCistCSAgICBhYnNkaXI9IiRsaWJkaXIiCisrCSAgICBkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKysJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgIGZpCisgCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKyAJZWxzZQorQEAgLTU2MzcsMTIgKzY1MjAsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGRpcj0iJGxhZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisrCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorIAkgIGVsc2UKKyAJICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKyAJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKy0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKKyAJICBmaQorIAlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCitAQCAtNTY1MywyMCArNjUzNiw0NiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisgCSAgZmkKKy0JICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKy0JICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKy0JICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKy0JICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworLQkgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCistCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCistCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorLQkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCistCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorLQkgIGVsc2UKKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCistCSAgZmkKKysJICBjYXNlICIkaG9zdCIgaW4KKysJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKysJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKysJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKysJICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAorKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKysJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKysJICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKKysJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorKwkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisrCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGVsc2UKKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisrCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisrCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgICAqICkKKysJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisrCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorKwkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKysJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorKwkgICAgICBlbHNlCisrCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisrCSAgICAgIGZpCisrCSAgICA7OworKwkgIGVzYWMKKyAJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorIAorIAlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorQEAgLTU2ODQsNyArNjU5Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCisgCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCistCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKysJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCisgCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKyAKKyAJICBsaW5rYWxsZGVwbGlicz1ubworQEAgLTU2OTcsNyArNjYwNiw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCistCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJCSA7OworIAkgICAgZXNhYworIAkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworQEAgLTU3MDgsMTIgKzY2MTgsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKyAJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgICBmaQorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorIAkgIGRvbmUgIyBmb3IgZGVwbGliCisgCSAgY29udGludWUKKyAJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCitAQCAtNTcyOCw3ICs2NjM4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorIAkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCisgCSAgICAgICoiJGFic2RpcjoiKikgOzsKKy0JICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCitAQCAtNTc0MCw3ICs2NjUwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01NzQ5LDcgKzY2NTksNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01Nzc0LDEyICs2Njg0LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgY2FzZSAkaG9zdCBpbgorIAkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisgCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKy0JICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisgCSAgICAgIG5lZWRfcmVsaW5rPW5vCisgCSAgICA7OworIAkgICopCisgCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCistCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorIAkgICAgICBuZWVkX3JlbGluaz15ZXMKKyAJICAgIGZpCisgCSAgICA7OworQEAgLTU4MTQsNyArNjcyNCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTgyMyw3ICs2NzMzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgICAgICoiICRsaWJkaXIgIiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIDs7CisgCSAgICBlc2FjCitAQCAtNTgzNSw3ICs2NzQ1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIHNoaWZ0CisgCSAgICByZWFsbmFtZT0iJDEiCisgCSAgICBzaGlmdAorLQkgICAgZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorIAkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisgCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorIAkgICAgICBzb25hbWU9IiRkbG5hbWUiCitAQCAtNTg0OCw3ICs2NzU4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCXZlcnN1ZmZpeD0iLSRtYWpvciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgZXZhbCAic29uYW1lPVwiJHNvbmFtZV9zcGVjXCIiCisrCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKyAJICAgIGVsc2UKKyAJICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisgCSAgICBmaQorQEAgLTU4NzcsNyArNjc4Nyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBsaW5rbGliPSRuZXdsaWIKKyAJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKyAKKy0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJICAgIGFkZF9zaGxpYnBhdGg9CisgCSAgICBhZGRfZGlyPQorIAkgICAgYWRkPQorQEAgLTU5MzMsNyArNjg0Myw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJICBjYXNlICRsaWJkaXIgaW4KKyAJCSAgICBbXFwvXSopCistCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgICA7OworIAkJICBlc2FjCisgCQlmaQorQEAgLTU5NTUsNyArNjg2NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKyAJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorIAkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCitAQCAtNTk2OSwxMyArNjg3OSwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorIAkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKyAJCSoiOiRsaWJkaXI6IiopIDs7CistCQkqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKysJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgIGZpCisgCistCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICAgYWRkX3NobGlicGF0aD0KKyAJICAgIGFkZF9kaXI9CisgCSAgICBhZGQ9CitAQCAtNTk4OSw3ICs2ODk5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisgCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisgCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CistCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworIAkgICAgICBlc2FjCisgCSAgICAgIGFkZD0iLWwkbmFtZSIKKyAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KK0BAIC02MDAxLDEyICs2OTExLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCistCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKysJICAgICAgYWRkX2Rpcj0iLUwkbHRfc3lzcm9vdCRsaWJkaXIiCisgCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICA7OworIAkJZXNhYworIAkgICAgICBmaQorQEAgLTYwODMsMjcgKzY5OTMsMzMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisgCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CistCQkgICAqKSB4cnBhdGg9IiR4cnBhdGggJHRlbXBfeHJwYXRoIjs7CisrCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKKyAJCSAgIGVzYWM7OworLQkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKKyAJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKKyAJICBmaQorIAorLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkYWJzZGlyIgorKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCisgCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisgCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKyAJICB0bXBfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKy0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICBjYXNlICRkZXBsaWIgaW4KKysgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKysgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKysgICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OworKyAgICAgICAgICAgIGVzYWMKKysJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCistCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKysJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKKysgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorLQkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIGRvbmUKKyAKKyAJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KK0BAIC02MTEzLDggKzcwMjksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgY2FzZSAkZGVwbGliIGluCisgCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKyAJICAgICAgKi5sYSkKKysJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorIAkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCistCQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKyAJCWNhc2UgJGRpciBpbgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CitAQCAtNjEzMCw3ICs3MDQ4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCWNhc2UgJGhvc3QgaW4KKyAJCSotKi1kYXJ3aW4qKQorIAkJICBkZXBkZXBsPQorLQkJICBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisgCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKyAJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKyAJCSAgICAgIGRlcGRlcGw9JHRtcAorQEAgLTYxNDEsOCArNzA1OSw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgIGZpCistCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCistCQkgICAgICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorIAkJICAgICAgcGF0aD0KKyAJCSAgICBmaQorIAkJICBmaQorQEAgLTYxNTIsNyArNzA3MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgIDs7CisgCQllc2FjCisgCQllbHNlCistCQkgIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorIAkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisgCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCitAQCAtNjE5Miw3ICs3MTEwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCisgCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKyAJICAgICoiICRkaXIgIiopIDs7CistCSAgICAqKSBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KK0BAIC02MjA1LDcgKzcxMjMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmaQorIAlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCistCSAgZXZhbCB0bXBfbGlicz1cJCR2YXIKKysJICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKKyAJICBuZXdfbGlicz0KKyAJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKyAJICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCitAQCAtNjI1MCwxMyArNzE2OCwxMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgLUwqKQorIAkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKyAJICAgICAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKy0JICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKysJICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCistCSAgZXZhbCAkdmFyPVwkdG1wX2xpYnMKKysJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorIAlkb25lICMgZm9yIHZhcgorICAgICAgIGZpCisgICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKK0BAIC02MjY5LDcgKzcxODcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIDs7CisgCWVzYWMKKyAJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGkiCisrCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKyAJZmkKKyAgICAgICBkb25lCisgICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworQEAgLTYzMTAsNyArNzIyOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICAgb2xkbGlicz0iJG91dHB1dCIKKy0gICAgICBvYmpzPSIkb2JqcyRvbGRfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICAgOzsKKyAKKyAgICAgbGliKQorQEAgLTYzMTksOCArNzIzNyw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgbGliKikKKyAJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorIAluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKy0JZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKyAJOzsKKyAgICAgICAqKQorIAl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKK0BAIC02MzMwLDggKzcyNDgsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKyAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisgCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CistCSAgZXZhbCAic2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiIgorLQkgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKysJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKyAJZWxzZQorIAkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKyAJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKK0BAIC02MzQ2LDcgKzcyNjQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGVjaG8KKyAJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisgCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCistCSAgbGlib2Jqcz0iJGxpYm9ianMgJG9ianMiCisrCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorIAlmaQorICAgICAgIGZpCisgCitAQCAtNjU0NCw3ICs3NDYyLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBkb25lCisgCisgCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgorLQkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisrCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JHtjdXJyZW50fS4wIgorIAkgIDs7CisgCisgCXFueCkKK0BAIC02NjEyLDEwICs3NTMwLDEwIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZmkKKyAKKyAgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKy0gICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKysgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAKKy0gICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKyAJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKyAJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisgCXJlbW92ZWxpc3Q9CitAQCAtNjYzMSw3ICs3NTQ5LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgIGNvbnRpbnVlCisgCQkgZmkKKyAJICAgICAgIGZpCistCSAgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkcCIKKysJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKKyAJICAgICAgIDs7CisgCSAgICAqKSA7OworIAkgIGVzYWMKK0BAIC02NjQyLDcgKzc1NjAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCistCW9sZGxpYnM9IiRvbGRsaWJzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisrCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorIAorIAkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCisgCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgJGxvMm8iIHwgJE5MMlNQYAorQEAgLTY2NTksMTAgKzc1NzcsMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorIAl0ZW1wX3hycGF0aD0KKyAJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworLQkgIHRlbXBfeHJwYXRoPSIkdGVtcF94cnBhdGggLVIkbGliZGlyIgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGZ1bmNfYXBwZW5kIHRlbXBfeHJwYXRoICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZG9uZQorIAlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorQEAgLTY2NzYsNyArNzU5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisgCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisgCSoiICRsaWIgIiopIDs7CistCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorIAorQEAgLTY2ODYsNyArNzYwNSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisgCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKyAJKiIgJGxpYiAiKikgOzsKKy0JKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgCitAQCAtNjY5OCw3ICs3NjE3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIDs7CisgCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorIAkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKy0JICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKysJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCisgCSAgICA7OworIAkgICotKi1uZXRic2QqKQorIAkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCitAQCAtNjcxNSw3ICs3NjM0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAqKQorIAkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKyAJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKy0JICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorIAkgICAgZmkKKyAJICAgIDs7CisgCSAgZXNhYworQEAgLTY3NjQsMTggKzc2ODMsMTggQEAgRU9GCisgCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAqIiAkaSAiKikKKy0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgaT0iIgorIAkJICAgIDs7CisgCQkgIGVzYWMKKyAJCWZpCisgCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCistCQkgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCistCQkgIGV2YWwgImRlcGxpYl9tYXRjaGVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiIgorKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorIAkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorIAkJICBkZXBsaWJfbWF0Y2g9JDEKKyAJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCSAgZWxzZQorIAkJICAgIGRyb3BwZWRkZXBzPXllcworIAkJICAgIGVjaG8KK0BAIC02Nzg5LDcgKzc3MDgsNyBAQCBFT0YKKyAJCWZpCisgCQk7OworIAkgICAgICAqKQorLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtNjgwNywxOCArNzcyNiwxOCBAQCBFT0YKKyAJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJICAgICoiICRpICIqKQorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgICBpPSIiCisgCQkgICAgICA7OworIAkJICAgIGVzYWMKKyAJCSAgZmkKKyAJCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorLQkJICAgIGV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCistCQkgICAgZXZhbCAiZGVwbGliX21hdGNoZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorIAkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisgCQkgICAgZGVwbGliX21hdGNoPSQxCisgCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQkgICAgZWxzZQorIAkJICAgICAgZHJvcHBlZGRlcHM9eWVzCisgCQkgICAgICBlY2hvCitAQCAtNjg0MCw3ICs3NzU5LDcgQEAgRU9GCisgCQlmaQorIAkJOzsKKyAJICAgICAgKikKKy0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorQEAgLTY4NTcsMTUgKzc3NzYsMjcgQEAgRU9GCisgCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJKiIgJGFfZGVwbGliICIqKQorLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgIGFfZGVwbGliPSIiCisgCQkgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCistCQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisrCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgorKwkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAorKwkJZWxzZQorKwkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQorKwkJZmkKKysJCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCisgCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKy0JCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisrCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisrCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgorKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgICAkbm9jYXNlZ2xvYgorKwkJICBlbHNlCisrCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorKwkJICBmaQorIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisgCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorIAkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKK0BAIC02ODg1LDEwICs3ODE2LDEwIEBAIEVPRgorIAkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisgCQkJZXNhYworIAkJICAgICAgZG9uZQorLQkJICAgICAgaWYgZXZhbCAiJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiIgMj4vZGV2L251bGwgfAorKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKyAJCQkgJFNFRCAtZSAxMHEgfAorIAkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorLQkJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkJCWFfZGVwbGliPSIiCisgCQkJYnJlYWsgMgorIAkJICAgICAgZmkKK0BAIC02OTEzLDcgKzc4NDQsNyBAQCBFT0YKKyAJICAgICAgOzsKKyAJICAgICopCisgCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCistCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorQEAgLTY5MjksMjAgKzc4NjAsMjAgQEAgRU9GCisgCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorIAkJKiIgJGFfZGVwbGliICIqKQorLQkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgIGFfZGVwbGliPSIiCisgCQkgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCisgCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCistCQlldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisgCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKyAJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisgCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKyAJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorIAkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCisgCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKy0JCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkgICAgICBhX2RlcGxpYj0iIgorIAkJICAgICAgYnJlYWsgMgorIAkJICAgIGZpCitAQCAtNjk2Nyw3ICs3ODk4LDcgQEAgRU9GCisgCSAgICAgIDs7CisgCSAgICAqKQorIAkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCSAgICAgIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KK0BAIC03MDcxLDcgKzgwMDIsNyBAQCBFT0YKKyAJKikKKyAJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKy0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworKwkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC03MDgxLDEwICs4MDEyLDEwIEBAIEVPRgorIAktTCopCisgCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisgCSAgKiIgJGRlcGxpYiAiKikgOzsKKy0JICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAkgIGVzYWMKKyAJICA7OworLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisrCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCitAQCAtNzEwMSwxMCArODAzMiwxMiBAQCBFT0YKKyAJICBoYXJkY29kZV9saWJkaXJzPQorIAkgIGRlcF9ycGF0aD0KKyAJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorLQkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorKwkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorIAkJZWxzZQorQEAgLTcxMTMsMTggKzgwNDYsMTggQEAgRU9GCisgCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCSAgICA7OworIAkJICAqKQorLQkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJICAgIGZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCSAgICA7OworIAkJICBlc2FjCisgCQlmaQorIAkgICAgICBlbHNlCistCQlldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKysJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorIAkgICAgICBmaQorIAkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAgICAgKikgZnVuY19hcHBlZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBkb25lCitAQCAtNzEzMyw0MCArODA2NiwzOCBAQCBFT0YKKyAJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCI7IHRoZW4KKy0JICAgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIiIKKysJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisgCSAgICBlbHNlCistCSAgICAgIGV2YWwgImRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorIAkgICAgZmkKKyAJICBmaQorIAkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisgCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgICAgcnBhdGg9CisgCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworLQkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKyAJICAgIGRvbmUKKy0JICAgIGV2YWwgJHJ1bnBhdGhfdmFyPVwkcnBhdGhcJCRydW5wYXRoX3ZhcgorLQkgICAgZXhwb3J0ICRydW5wYXRoX3ZhcgorKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisgCSAgZmkKKyAJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorIAlmaQorIAorIAlzaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgiCistCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorKwl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisgCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCistCSAgZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJHNobGlicGF0aFwkJHNobGlicGF0aF92YXIKKy0JICBleHBvcnQgJHNobGlicGF0aF92YXIKKysJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisgCWZpCisgCisgCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorLQlldmFsICJzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIiCistCWV2YWwgImxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorIAlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKyAJc2hpZnQKKyAJcmVhbG5hbWU9IiQxIgorIAlzaGlmdAorIAorIAlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCistCSAgZXZhbCAic29uYW1lPVwiJHNvbmFtZV9zcGVjXCIiCisrCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorIAllbHNlCisgCSAgc29uYW1lPSIkcmVhbG5hbWUiCisgCWZpCitAQCAtNzE3OCw3ICs4MTA5LDcgQEAgRU9GCisgCWxpbmtuYW1lcz0KKyAJZm9yIGxpbmsKKyAJZG8KKy0JICBsaW5rbmFtZXM9IiRsaW5rbmFtZXMgJGxpbmsiCisrCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCisgCWRvbmUKKyAKKyAJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKK0BAIC03MTg5LDcgKzgxMjAsNyBAQCBFT0YKKyAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKyAJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyIKKysJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKyAJZmkKKyAKKyAJb3JpZ19leHBvcnRfc3ltYm9scz0KK0BAIC03MjIwLDEzICs4MTUxLDQ1IEBAIEVPRgorIAkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKyAJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKKyAJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworLQkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKysJICAgIGZvciBjbWQxIGluICRjbWRzOyBkbworIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKKy0JICAgICAgZXZhbCAiY21kPVwiJGNtZFwiIgorLQkgICAgICBmdW5jX2xlbiAiICRjbWQiCistCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CistCSAgICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorKwkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKysJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKysJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKysJCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCisrCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorKwkJICBmdW5jX2xlbiAiICRjbWQiCisrCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisrCQkgIDs7CisrCQkqKQorKwkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubworKwkJICA7OworKwkgICAgICBlc2FjCisrCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAorKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKysJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisrCSAgICAgIHRoZW4KKysJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisrCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgorKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKysJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKysJCXNhdmVfbGlib2Jqcz0kbGlib2JqcworKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisrCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorKwkJZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzOyBkbworKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCQlkb25lID4gIiRvdXRwdXQiCisrCQlldmFsIGNtZD1cIiRjbWQxXCIKKyAJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKysJCW91dHB1dD0kc2F2ZV9vdXRwdXQKKysJCWxpYm9ianM9JHNhdmVfbGlib2JqcworIAkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKyAJICAgICAgZWxzZQorIAkJIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGV4ZWN1dGUgaW4gb25lIHN0ZXAuCitAQCAtNzI0OCw3ICs4MjExLDcgQEAgRU9GCisgCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKy0JICAkb3B0X2RyeV9ydW4gfHwgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworIAlmaQorIAorIAlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorQEAgLTcyNjAsNyArODIyMyw3IEBAIEVPRgorIAkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisgCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKyAJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKy0JICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisrCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorIAkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorIAkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisgCWZpCitAQCAtNzI3MCw3ICs4MjMzLDcgQEAgRU9GCisgCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisgCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworIAkgICopCistCSAgICB0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgorIAkgICAgOzsKKyAJICBlc2FjCisgCWRvbmUKK0BAIC03Mjg2LDQzICs4MjQ5LDQzIEBAIEVPRgorIAkgIGZpCisgCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorIAkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCistCSAgICBldmFsICJsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGVsc2UKKyAJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKy0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAJICBmaQorIAlmaQorIAorIAlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgZXZhbCAiZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIiIKKy0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZsYWciCisrCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCisgCWZpCisgCisgCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKy0JICAkb3B0X2RyeV9ydW4gfHwgKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpIHx8IGV4aXQgJD8KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKyAJZmkKKyAKKyAJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorIAlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisgCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKyAJICBlbHNlCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIiIKKysJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKyAJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisgCSAgZmkKKyAJZWxzZQorIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisgCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisgCSAgZWxzZQorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKyAJICAgIGNtZHM9JGFyY2hpdmVfY21kcworIAkgIGZpCisgCWZpCitAQCAtNzM2NiwxMCArODMyOSwxMyBAQCBFT0YKKyAJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorIAkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisgCSAgICBkbworLQkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKyAJICAgIGRvbmUKKyAJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKy0JICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorIAkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9LmxuaworIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorQEAgLTczODMsMTUgKzgzNDksMTcgQEAgRU9GCisgCSAgICBmaQorIAkgICAgZm9yIG9iagorIAkgICAgZG8KKy0JICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKysJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisrCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisgCSAgICBkb25lCistCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCistCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKysJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisgCSAgZWxzZQorIAkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKyAJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKyAJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CistCSAgICAgIGV2YWwgInRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiIgorKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisgCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKyAJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisgCSAgICAgIGxlbj0kbGVuMAorQEAgLTc0MTEsMTIgKzgzNzksMTIgQEAgRU9GCisgCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KKyAJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorIAkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CistCQkgICAgZXZhbCAiY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIiIKKysJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKyAJCSAgZWxzZQorIAkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisgCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKyAJCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKy0JCSAgICBldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiIgorKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorIAkJICBmaQorIAkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKyAJCSAgZnVuY19hcml0aCAkayArIDEKK0BAIC03NDMzLDExICs4NDAxLDExIEBAIEVPRgorIAkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisgCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiIgorKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKKyAJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKy0JICAgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIiIKKysJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisgCSAgICAgIGZpCistCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKysJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorIAorIAkgICAgZWxzZQorIAkgICAgICBvdXRwdXQ9CitAQCAtNzQ1MCw5ICs4NDE4LDkgQEAgRU9GCisgCSAgICAgIGxpYm9ianM9JG91dHB1dAorIAkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKy0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisgCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCistCQlldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIiCisrCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorIAkgICAgICBmaQorIAkgICAgZmkKKyAKK0BAIC03NDcxLDcgKzg0MzksNyBAQCBFT0YKKyAJCWx0X2V4aXQ9JD8KKyAKKyAJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisgCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisgCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKyAJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTc0OTIsNyArODQ2MCw3IEBAIEVPRgorIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKyAJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCistCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiCisrCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworIAkgICAgZmkKKyAKKyAJICAgIGlmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorQEAgLTc1MDQsNyArODQ3Miw3IEBAIEVPRgorIAkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorIAkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKy0JICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisgCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworIAkgICAgZmkKK0BAIC03NTE1LDcgKzg0ODMsNyBAQCBFT0YKKyAJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisgCisgCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgICBldmFsICJsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiIgorKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGZpCisgCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKK0BAIC03NTM5LDIzICs4NTA3LDIzIEBAIEVPRgorIAorIAlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisgCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KKy0JICBldmFsICJjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIiCisrCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKyAJZmkKKyAKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAlmaQorIAorIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKyAJZm9yIGNtZCBpbiAkY21kczsgZG8KKyAJICBJRlM9IiRzYXZlX2lmcyIKKy0JICBldmFsICJjbWQ9XCIkY21kXCIiCisrCSAgZXZhbCBjbWQ9XCIkY21kXCIKKyAJICAkb3B0X3NpbGVudCB8fCB7CisgCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisgCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCitAQCAtNzU2NCw3ICs4NTMyLDcgQEAgRU9GCisgCSAgICBsdF9leGl0PSQ/CisgCisgCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKy0JICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorIAkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorIAkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisgCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorQEAgLTc1NzYsOCArODU0NCw4IEBAIEVPRgorIAlJRlM9IiRzYXZlX2lmcyIKKyAKKyAJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorLQkgICRvcHRfZHJ5X3J1biB8fCAoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSkgfHwgZXhpdCAkPworKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPworIAorIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KK0BAIC03NjU2LDE3ICs4NjI0LDIwIEBAIEVPRgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKyAJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorLQkgIGV2YWwgInRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIiCisrCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisgCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAorIAllbHNlCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisgCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAlmaQorICAgICAgIGZpCisgCisrICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKysgICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKysKKyAgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKyAKK0BAIC03NjkwLDcgKzg2NjEsNyBAQCBFT0YKKyAJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKyAJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KKyAJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorLQkjICRvcHRfZHJ5X3J1biB8fCBlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmogfHwgZXhpdCAkPworKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKyAJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICAgZmkKKyAKK0BAIC03NzQwLDggKzg3MTEsOCBAQCBFT0YKKyAJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorIAkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKyAJICAgIDEwLlswMTIzXSkKKy0JICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKy0JICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisgCSAgICA7OworIAkgIGVzYWMKKyAJZmkKK0BAIC03NzYxLDcgKzg3MzIsNyBAQCBFT0YKKyAJKikKKyAJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisgCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisrCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTc3NzEsMTcgKzg3NDIsMTcgQEAgRU9GCisgCS1MKikKKyAJICBjYXNlICIgJG5ld19saWJzICIgaW4KKyAJICAqIiAkZGVwbGliICIqKSA7OworLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgZXNhYworIAkgIDs7CistCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorICAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorIAorIAorLSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkY29tcGlsZV9kZXBsaWJzIgorLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgorIAorICAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisgCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KK0BAIC03Nzg5LDcgKzg3NjAsNyBAQCBFT0YKKyAJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisgCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlkb25lCisgICAgICAgZmkKK0BAIC03ODA4LDE4ICs4Nzc5LDE4IEBAIEVPRgorIAkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisgCQk7OworIAkgICAgICAqKQorLQkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisrCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgImZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgCWNhc2UgJGhvc3QgaW4KK0BAIC03ODI4LDEyICs4Nzk5LDEyIEBAIEVPRgorIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiRsaWJkaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisgCSAgZXNhYworIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorIAkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzg0Miw3ICs4ODEzLDcgQEAgRU9GCisgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisgCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKy0JZXZhbCAicnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgZmkKKyAgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisgCitAQCAtNzg1OSwxOCArODgzMCwxOCBAQCBFT0YKKyAJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJOzsKKyAJICAgICAgKikKKy0JCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsICJmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKy0JICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisrCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlmaQorICAgICAgIGRvbmUKK0BAIC03ODc4LDcgKzg4NDksNyBAQCBFT0YKKyAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKyAJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorLQlldmFsICJycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICBmaQorICAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisgCitAQCAtNzkyMSw2ICs4ODkyLDEyIEBAIEVPRgorIAlleGl0X3N0YXR1cz0wCisgCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisgCisrCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKysJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKwlmaQorKworIAkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorIAlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisgCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKK0BAIC03OTQzLDcgKzg5MjAsNyBAQCBFT0YKKyAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgIHJwYXRoPQorIAkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCistCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgZG9uZQorIAkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKyAJZmkKK0BAIC03OTUxLDcgKzg5MjgsNyBAQCBFT0YKKyAJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorIAkgIHJwYXRoPQorIAkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCistCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisrCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCisgCSAgZG9uZQorIAkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisgCWZpCitAQCAtNzk2Niw2ICs4OTQzLDEzIEBAIEVPRgorIAkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKyAJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisgCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKysKKysJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisrCWZpCisrCisgCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgIGZpCisgCitAQCAtNzk5OSw2ICs4OTgzLDEyIEBAIEVPRgorIAorICAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKyAKKysgICAgICBpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorKwlwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JworKyAgICAgIGZpCisrCisgICAgICAgIyBOb3cgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdC4KKyAgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisgCitAQCAtODA5Niw3ICs5MDg2LDcgQEAgRU9GCisgCWVsc2UKKyAJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKyAJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCistCSAgICBvbGRvYmpzPSIkb2xkb2JqcyAkc3ltZmlsZW9iaiIKKysJICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKyAJICBmaQorIAlmaQorIAlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgorQEAgLTgxMDQsMTAgKzkwOTQsMTAgQEAgRU9GCisgCisgICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisgCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworLQlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKysJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgIGZpCisgCisgICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCitAQCAtODExOCwxMCArOTEwOCwxMCBAQCBFT0YKKyAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisgCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgorIAkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworLQkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAJZmkKKyAKKyAJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCitAQCAtODEzOSw3ICs5MTI5LDcgQEAgRU9GCisgCWVsc2UKKyAJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKyAJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKyAJICBvbGRvYmpzPQorQEAgLTgxNjMsMTggKzkxNTMsMjggQEAgRU9GCisgCQllc2FjCisgCSAgICAgIGRvbmUKKyAJICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorLQkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCisgCSAgICAgIDs7CistCSAgICAqKSBvbGRvYmpzPSIkb2xkb2JqcyAkb2JqIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlmaQorLQlldmFsICJjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorIAorIAlmdW5jX2xlbiAiICRjbWRzIgorIAlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorIAlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKyAJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisrCWVsaWYgdGVzdCAtbiAiJGFyY2hpdmVyX2xpc3Rfc3BlYyI7IHRoZW4KKysJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisrCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworKwkgIGRvCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkgIGRvbmUgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQKKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisgCWVsc2UKKyAJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworIAkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgcGllY2V3aXNlIGFyY2hpdmUgbGlua2luZy4uLiIKK0BAIC04MTg5LDcgKzkxODksNyBAQCBFT0YKKyAJICBkbworIAkgICAgbGFzdF9vbGRvYmo9JG9iagorIAkgIGRvbmUKKy0JICBldmFsICJ0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiIgorKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorIAkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKyAJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKyAJICBsZW49JGxlbjAKK0BAIC04MjA4LDcgKzkyMDgsNyBAQCBFT0YKKyAJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKyAJICAgICAgZmkKKyAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CistCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICAgICAgb2JqbGlzdD0KKyAJICAgICAgbGVuPSRsZW4wCisgCSAgICBmaQorQEAgLTgyMTYsOSArOTIxNiw5IEBAIEVPRgorIAkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKyAJICBvbGRvYmpzPSRvYmpsaXN0CisgCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKy0JICAgIGV2YWwgImNtZHM9XCJcJGNvbmNhdF9jbWRzXCIiCisrCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKyAJICBlbHNlCistCSAgICBldmFsICJjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIiIKKysJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKyAJICBmaQorIAlmaQorICAgICAgIGZpCitAQCAtODI2OCwxMiArOTI2OCwyMyBAQCBFT0YKKyAJICAgICAgKi5sYSkKKyAJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorKwkJOzsKKysJICAgICAgLUwqKQorKwkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCisrCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKyAJCTs7CistCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworKwkgICAgICAtUiopCisrCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorKwkJOzsKKysJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorQEAgLTgyODQsMTIgKzkyOTUsMTQgQEAgRU9GCisgCSAgICAgICoubGEpCisgCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorKworIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisrCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisgCQk7OworLQkgICAgICAqKSBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCitAQCAtODMwMywxMCArOTMxNiwxMSBAQCBFT0YKKyAJCSMgdGhlIGxpYnJhcnk6CisgCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC04MzE4LDcgKzkzMzIsNyBAQCBFT0YKKyAJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworIAkgICAgICBlc2FjCistCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgorIAkgICAgZG9uZQorIAkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgCSAgICBuZXdkbHByZWZpbGVzPQorQEAgLTgzMjcsNyArOTM0MSw3IEBAIEVPRgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisgCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCisgCSAgICBkb25lCisgCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKyAJICBmaQorQEAgLTg0MTIsNyArOTQyNiw3IEBAIHJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworIH0KKyAKKy17IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisreyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorIAorIAorQEAgLTg0MzIsOSArOTQ0Niw5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZm9yIGFyZworICAgICBkbworICAgICAgIGNhc2UgJGFyZyBpbgorLSAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworLSAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CistICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPXllcyA7OworKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisrICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OworICAgICAgIGVzYWMKKyAgICAgZG9uZQorIAorQEAgLTg0NDMsMjQgKzk0NTcsMjMgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorICAgICBybWRpcnM9CisgCistICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCistCW9iamRpcj0iJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRvYmpkaXIiCisgICAgICAgZWxzZQorLQlvYmpkaXI9IiRkaXIvJG9yaWdvYmpkaXIiCisrCW9kaXI9IiRkaXIvJG9iamRpciIKKyAgICAgICBmaQorICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0gICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorKyAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKKyAKKy0gICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCistICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKysgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworKyAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgorIAljYXNlICIgJHJtZGlycyAiIGluCistCSAgKiIgJG9iamRpciAiKikgOzsKKy0JICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKysJICAqIiAkb2RpciAiKikgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKKyAJZXNhYworICAgICAgIGZpCisgCitAQCAtODQ4NiwxOCArOTQ5OSwxNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCisgCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKyAJICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisgCSAgZG9uZQorLQkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgorIAorLQkgIGNhc2UgIiRtb2RlIiBpbgorKwkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KKyAJICBjbGVhbikKKy0JICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgorLQkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisrCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgorIAkgICAgKiIgJGRsbmFtZSAiKikgOzsKKy0JICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKysJICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OworIAkgICAgZXNhYworLQkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorIAkgICAgOzsKKyAJICB1bmluc3RhbGwpCisgCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KK0BAIC04NTI1LDE5ICs5NTM3LDE5IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKyAJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgorIAkgIGZpCisgCisgCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorIAkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKyAJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJG5vbl9waWNfb2JqZWN0IgorIAkgIGZpCisgCWZpCisgCTs7CisgCisgICAgICAgKikKKy0JaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KKyAJICBub2V4ZW5hbWU9JG5hbWUKKyAJICBjYXNlICRmaWxlIGluCisgCSAgKi5leGUpCitAQCAtODU0Nyw3ICs5NTU5LDcgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKyAJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCisgCSAgICA7OworIAkgIGVzYWMKKyAJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KK0BAIC04NTU2LDcgKzk1NjgsNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorIAkgICAgICByZWxpbmtfY29tbWFuZD0KKyAJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CistCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKyAJICAgIGVsc2UKKyAJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisgCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorQEAgLTg1NjQsMTIgKzk1NzYsMTIgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAorIAkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKyAJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKyAJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0kbmFtZSIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKysJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorIAkgICAgZmkKKyAJICBmaQorIAlmaQorQEAgLTg1NzcsNyArOTU4OSw2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgICBlc2FjCisgICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgIGRvbmUKKy0gICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKyAKKyAgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KK0BAIC04NTg5LDE2ICs5NjAwLDE2IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCisteyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyt7IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisgCistdGVzdCAteiAiJG1vZGUiICYmIHsKKyt0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorIH0KKyAKKyB0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKy0gIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIKKysgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgCisgaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICAgZXZhbCBleGVjICIkZXhlY19jbWQiCitkaWZmIC0tZ2l0IGEvbHRvcHRpb25zLm00IGIvbHRvcHRpb25zLm00CitpbmRleCA1ZWYxMmNlLi4xN2NmZDUxIDEwMDY0NAorLS0tIGEvbHRvcHRpb25zLm00CisrKysgYi9sdG9wdGlvbnMubTQKK0BAIC04LDcgKzgsNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA2IGx0b3B0aW9ucy5tNAorKyMgc2VyaWFsIDcgbHRvcHRpb25zLm00CisgCisgIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KKyBBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCitkaWZmIC0tZ2l0IGEvbHR2ZXJzaW9uLm00IGIvbHR2ZXJzaW9uLm00CitpbmRleCBiZjg3Zjc3Li45YzdiNWQ0IDEwMDY0NAorLS0tIGEvbHR2ZXJzaW9uLm00CisrKysgYi9sdHZlcnNpb24ubTQKK0BAIC03LDE3ICs3LDE3IEBACisgIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgR2VuZXJhdGVkIGZyb20gbHR2ZXJzaW9uLmluLgorKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKyAKKy0jIHNlcmlhbCAzMTM0IGx0dmVyc2lvbi5tNAorKyMgc2VyaWFsIDMyOTMgbHR2ZXJzaW9uLm00CisgIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorIAorLW00X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuMi43YV0pCistbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzEzNF0pCisrbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40XSkKKyttNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMjkzXSkKKyAKKyBBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorLVttYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKytbbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCisgX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKKyBdKQorZGlmZiAtLWdpdCBhL2x0fm9ic29sZXRlLm00IGIvbHR+b2Jzb2xldGUubTQKK2luZGV4IGJmOTJiNWUuLmM1NzNkYTkgMTAwNjQ0CistLS0gYS9sdH5vYnNvbGV0ZS5tNAorKysrIGIvbHR+b2Jzb2xldGUubTQKK0BAIC03LDcgKzcsNyBAQAorICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisgIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCA0IGx0fm9ic29sZXRlLm00CisrIyBzZXJpYWwgNSBsdH5vYnNvbGV0ZS5tNAorIAorICMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgorICMKK2RpZmYgLS1naXQgYS9vcGNvZGVzL2NvbmZpZ3VyZSBiL29wY29kZXMvY29uZmlndXJlCitpbmRleCBjOWMwNGNlLi4zMTE0MWQ5IDEwMDc1NQorLS0tIGEvb3Bjb2Rlcy9jb25maWd1cmUKKysrKyBiL29wY29kZXMvY29uZmlndXJlCitAQCAtNjQ4LDYgKzY0OCw5IEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorK2FjX2N0X0FSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NjAsNiArNzYzLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3RhcmdldHMKKyBlbmFibGVfd2Vycm9yCitAQCAtMTQyMCw2ICsxNDI0LDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorIAorIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCitAQCAtNTExMCw4ICs1MTE2LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTUxNTEsNyArNTE1Nyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU4MzcsOCArNTg0Myw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01ODg3LDYgKzU4OTMsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5MDMsNiArNTk4MywxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjA3MSw3ICs2MTU2LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYyMjUsNiArNjMxMSwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYyNDAsOSArNjM0MSwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjI1OCw3ICs2NTEyLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjI3OCwxMSArNjUzMiwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02Mjk4LDcgKzY1NTYsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjMxNyw2ICs2NTc1LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MzI4LDE2ICs2NTkwLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorIAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisgCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisgCisgCisgCitAQCAtNjY3OSw4ICs2OTk3LDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NzE2LDYgKzcwMzQsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjc1Nyw2ICs3MDc2LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY3NjgsNyArNzA5OSw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY3OTQsOCArNzEyNSw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY4MDUsOCArNzEzNiw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY4NDMsNiArNzE3NCwxNiBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworIAorIAorIAorQEAgLTY4NjQsNiArNzIwNSw0NSBAQCBmaQorIAorIAorIAorKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitAQCAtNzA3MCw2ICs3NDUwLDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03NjMzLDYgKzgxMzAsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtNzc5OCw3ICs4Mjk3LDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTc4ODcsNyArODM4Nyw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODE4NSw4ICs4Njg1LDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04MzUyLDYgKzg4NTAsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04NDE0LDcgKzg5MTgsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODQ3MSwxMyArODk3NSwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04NTM4LDYgKzkwNDYsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC04ODg4LDcgKzk0MDEsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC04OTM2LDcgKzk0NTAsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC04OTg3LDEyICs5NTAxLDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkwMDYsOCArOTUyMCw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MDI1LDggKzk1MzksOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTA3Miw4ICs5NTg2LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkyMDMsNyArOTcxNywxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MjE2LDIyICs5NzM2LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKK0BAIC05MjQzLDcgKzk3NzAsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyNTYsMjIgKzk3ODksMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05MzE2LDIwICs5ODU2LDYzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKy0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCistICAgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKy0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorLSAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKy0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTM5MCw3ICs5OTczLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCitAQCAtOTM5OCw3ICs5OTgxLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTQxNCw3ICs5OTk3LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTk0MzgsMTAgKzEwMDIxLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTUyMCwyMyArMTAxMDMsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk2MjEsNyArMTAyMTcsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NjQwLDkgKzEwMjM2LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMjE4LDggKzEwODE0LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMjUyLDEzICsxMDg0OSw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAzNTAsNyArMTEwMDUsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTExOTAsMTAgKzExODQ1LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTEyOTYsMTAgKzExOTUxLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTI0NTAsNyArMTMxMDUsNyBAQCBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICMgc2luY2UgbGliYmZkIG1heSBub3QgcHVsbCBpbiB0aGUgZW50aXJldHkgb2YgbGliaWJlcnR5LgorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICAgY2FzZSAiJHtob3N0fSIgaW4KK0BAIC0xMzQyMiwxMyArMTQwNzcsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzQ0MywxNCArMTQxMDUsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM0ODMsMTIgKzE0MTQ4LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNTQzLDggKzE0MjA4LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xMzU1NCwxMiArMTQyMjQsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTEzNTc1LDcgKzE0MjQ3LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTM2MTEsNiArMTQyODIsNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTE0MzY3LDcgKzE1MDM5LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xNDQ3MCwxOSArMTUxNDMsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTQ1MTIsNiArMTUyMDgsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTQ1MjEsNiArMTUyMjMsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE0NjM1LDEyICsxNTM0MCwxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNDcyNyw5ICsxNTQzMiw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE0NzQ1LDYgKzE1NDQ3LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNDc3NywyMTAgKzE1NDgyLDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9vcGNvZGVzL2NvbmZpZ3VyZS5hYyBiL29wY29kZXMvY29uZmlndXJlLmFjCitpbmRleCBiOTNlODU1Li40M2JhOTc2IDEwMDY0NAorLS0tIGEvb3Bjb2Rlcy9jb25maWd1cmUuYWMKKysrKyBiL29wY29kZXMvY29uZmlndXJlLmFjCitAQCAtMTY3LDcgKzE2Nyw3IEBAIGNoYW5nZXF1b3RlKCwpZG5sCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgIGlmIHRlc3QgLW4gIiR4IjsgdGhlbgorLSAgICBTSEFSRURfTElCQUREPSItTGBwd2RgLy4uL2xpYmliZXJ0eS9waWMgLWxpYmVydHkiCisrICAgIFNIQVJFRF9MSUJBREQ9ImBwd2RgLy4uL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEiCisgICBmaQorIAorICAgY2FzZSAiJHtob3N0fSIgaW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMzc2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA3NDNmNDJhYWVjYjFhYjg5ZWJhMGVhZjVlODhlZDY3YmJmM2JhMzA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozNzoxMCArMDAwMAorU3ViamVjdDogW1BBVENIIDA3LzEzXSBBZGQgdGhlIGFybXY1ZSBhcmNoaXRlY3R1cmUgdG8gYmludXRpbHMKKworQmludXRpbHMgaGFzIGEgY29tbWVudCB0aGF0IGluZGljYXRlcyBpdCBpcyBzdXBwb3NlZCB0byBtYXRjaCBnY2MgZm9yCithbGwgb2YgdGhlIHN1cHBvcnQgIi1tYXJjaD0iIHNldHRpbmdzLCBidXQgaXQgd2FzIGxhY2tpbmcgdGhlIGFybXY1ZSBzZXR0aW5nLgorVGhpcyB3YXMgYSBzaW1wbGUgd2F5IHRvIGFkZCBpdCwgYXMgdGh1bWIgaW5zdHJ1Y3Rpb25zIHNob3VsZG4ndCBiZSBnZW5lcmF0ZWQKK2J5IHRoZSBjb21waWxlciBhbnl3YXkuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitVcHN0cmVhbSBtYWludGFpbmVyIGluZGljYXRlZCB0aGF0IHdlIHNob3VsZCBub3QgYmUgdXNpbmcgYXJtdjVlLCBldmVuCit0aG91Z2ggaXQgaXMgYSBsZWdhbCBhcmNoaWN0dXJlIGRlZmluZWQgYnkgb3VyIGdjYy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdhcy9jb25maWcvdGMtYXJtLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtYXJtLmMgYi9nYXMvY29uZmlnL3RjLWFybS5jCitpbmRleCAyZGI2YzJkLi5hYjQ4MTY4IDEwMDY0NAorLS0tIGEvZ2FzL2NvbmZpZy90Yy1hcm0uYworKysrIGIvZ2FzL2NvbmZpZy90Yy1hcm0uYworQEAgLTI0NDYzLDYgKzI0NDYzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fYXJjaF9vcHRpb25fdGFibGUgYXJtX2FyY2hzW10gPQorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjR0IiwJQVJNX0FSQ0hfVjRULAkgRlBVX0FSQ0hfRlBBKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY0dHhtIiwJQVJNX0FSQ0hfVjRUeE0sCSBGUFVfQVJDSF9GUEEpLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjUiLAlBUk1fQVJDSF9WNSwJIEZQVV9BUkNIX1ZGUCksCisrICBBUk1fQVJDSF9PUFQgKCJhcm12NWUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dCIsCUFSTV9BUkNIX1Y1VCwJIEZQVV9BUkNIX1ZGUCksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NXR4bSIsCUFSTV9BUkNIX1Y1VHhNLAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dGUiLAlBUk1fQVJDSF9WNVRFLAkgRlBVX0FSQ0hfVkZQKSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNjhmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA4LWRvbi10LWxldC10aGUtZGlzdHJvLWNvbXBpbGVyLXBvaW50LXRvLXRoZS13cm9uZy1pbnMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA0ZDNhOWY2ZGI2MDQwNTUzNDgzMzJiNTY4ODlkNDY2YzA1OGZhNWYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTozOTowMSArMDAwMAorU3ViamVjdDogW1BBVENIIDA4LzEzXSBkb24ndCBsZXQgdGhlIGRpc3RybyBjb21waWxlciBwb2ludCB0byB0aGUgd3JvbmcKKyBpbnN0YWxsYXRpb24gbG9jYXRpb24KKworVGhhbmtzIHRvIFJQIGZvciBoZWxwaW5nIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGNhdXNpbmcgdGhlIGlzc3VlLgorCisyMDEwLzA4LzEzCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliaWJlcnR5L01ha2VmaWxlLmluIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJpYmVydHkvTWFrZWZpbGUuaW4gYi9saWJpYmVydHkvTWFrZWZpbGUuaW4KK2luZGV4IDliODc3MjAuLmZmNDNmNTMgMTAwNjQ0CistLS0gYS9saWJpYmVydHkvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorQEAgLTM2MSw3ICszNjEsOCBAQCBpbnN0YWxsLXN0cmlwOiBpbnN0YWxsCisgIyBtdWx0aWxpYi1zcGVjaWZpYyBmbGFncywgaXQncyBvdmVycmlkZGVuIGJ5IEZMQUdTX1RPX1BBU1MgZnJvbSB0aGUKKyAjIGRlZmF1bHQgbXVsdGlsaWIsIHNvIHdlIGhhdmUgdG8gdGFrZSBDRkxBR1MgaW50byBhY2NvdW50IGFzIHdlbGwsCisgIyBzaW5jZSBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgbXVsdGlsaWIgZmxhZ3MuCistTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKysjTVVMVElPU0RJUiA9IGAkKENDKSAkKENGTEFHUykgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKytNVUxUSU9TRElSID0gIiIKKyBpbnN0YWxsX3RvX2xpYmRpcjogYWxsCisgCWlmIHRlc3QgLW4gIiR7dGFyZ2V0X2hlYWRlcl9kaXJ9IjsgdGhlbiBcCisgCQkke21raW5zdGFsbGRpcnN9ICQoREVTVERJUikkKGxpYmRpcikvJChNVUxUSU9TRElSKTsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODAwNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDktVXBzdHJlYW0tU3RhdHVzLUluYXBwcm9wcmlhdGUtZGlzdHJpYnV0aW9uLWNvZGVzb3VyYy5wYXRjaApAQCAtMCwwICsxLDI3OCBAQAorRnJvbSBlMDJlMTE5YjI3OGMzZjQwNGU5NzY2OWU3MTgwY2FjOTQ0MTM0YzkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0MTowNCArMDAwMAorU3ViamVjdDogW1BBVENIIDA5LzEzXSBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjoKKyBjb2Rlc291cmNlcnldCisKK1BhdGNoIG9yaWdpbmFsbHkgY3JlYXRlZCBieSBNYXJrIEhhdGxlLCBmb3J3YXJkLXBvcnRlZCB0bworYmludXRpbHMgMi4yMSBieSBTY290dCBHYXJtYW4uCisKK3B1cnBvc2U6ICB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcKKworQ29kZSBNZXJnZWQgZnJvbSBTb3VyY2VyeSBHKysgYmludXRpbHMgMi4xOSAtIDQuNC0yNzcKKworMjAwOC0wNy0wMiAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBsZC8KKyAgICAqIGxkLmggKGFyZ3NfdHlwZSk6IEFkZCBlcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGQudGV4aW5mbyAoLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogRG9jdW1lbnQuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBDaGVjaworICAgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGRtYWluLmMgKG1haW4pOiBJbml0aWFsaXplCisgICAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZXhzdXAuYyAoZW51bSBvcHRpb25fdmFsdWVzKTogQWRkCisgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMuCisgICAgKGxkX29wdGlvbnMpOiBBZGQgLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLgorICAgIChwYXJzZV9hcmdzKTogSGFuZGxlIG5ldyBvcHRpb24uCisKKzIwMDctMDYtMTMgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgbGQvCisgICAgKiBjb25maWcuaW46IFJlZ2VuZXJhdGUuCisgICAgKiBsZC5oIChhcmdzX3R5cGUpOiBBZGQgcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkLnRleGluZm8gKC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcyk6IERvY3VtZW50LgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogQ2hlY2sKKyAgICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxkbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZQorICAgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGV4c3VwLmMgKGVudW0gb3B0aW9uX3ZhbHVlcyk6IEFkZAorICAgIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLgorICAgIChsZF9vcHRpb25zKTogQWRkIC0tbm8tcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy4KKyAgICAocGFyc2VfYXJncyk6IEhhbmRsZSBuZXcgb3B0aW9uLgorCisyMDA3LTA0LTIwICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIE1lcmdlIGZyb20gU291cmNlcnkgRysrIGJpbnV0aWxzIDIuMTc6CisKKyAgICAyMDA3LTAzLTIwICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBCYXNlZCBvbiBwYXRjaCBieSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+LgorICAgIGxkLworICAgICogY29uZmlndXJlLmluICgtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogTmV3IG9wdGlvbi4KKyAgICAqIGNvbmZpZ3VyZSwgY29uZmlnLmluOiBSZWdlbmVyYXRlLgorICAgICogbGRmaWxlLmMgKGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoKTogSWYKKyAgICBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUyBkZWZpbmVkLCB3YXJuIGZvciB1c2Ugb2YgL2xpYiwKKyAgICAvdXNyL2xpYiwgL3Vzci9sb2NhbC9saWIgb3IgL3Vzci9YMTFSNi9saWIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxkL2NvbmZpZy5pbiAgICB8ICAzICsrKworIGxkL2NvbmZpZ3VyZSAgICB8IDE0ICsrKysrKysrKysrKysrCisgbGQvY29uZmlndXJlLmFjIHwgMTAgKysrKysrKysrKworIGxkL2xkLmggICAgICAgICB8ICA4ICsrKysrKysrCisgbGQvbGQudGV4aW5mbyAgIHwgMTIgKysrKysrKysrKysrCisgbGQvbGRmaWxlLmMgICAgIHwgMTcgKysrKysrKysrKysrKysrKysKKyBsZC9sZGxleC5oICAgICAgfCAgMiArKworIGxkL2xkbWFpbi5jICAgICB8ICAyICsrCisgbGQvbGV4c3VwLmMgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIDkgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlnLmluIGIvbGQvY29uZmlnLmluCitpbmRleCAyYWI0ODQ0Li43NjZkMjNjIDEwMDY0NAorLS0tIGEvbGQvY29uZmlnLmluCisrKysgYi9sZC9jb25maWcuaW4KK0BAIC0xMSw2ICsxMSw5IEBACisgICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLworICN1bmRlZiBFTkFCTEVfTkxTCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMgKi8KKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysKKyAvKiBBZGRpdGlvbmFsIGV4dGVuc2lvbiBhIHNoYXJlZCBvYmplY3QgbWlnaHQgaGF2ZS4gKi8KKyAjdW5kZWYgRVhUUkFfU0hMSUJfRVhURU5TSU9OCisgCitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlIGIvbGQvY29uZmlndXJlCitpbmRleCAyZmJhZWJmLi41NzI2YTA4IDEwMDc1NQorLS0tIGEvbGQvY29uZmlndXJlCisrKysgYi9sZC9jb25maWd1cmUKK0BAIC03ODcsNiArNzg3LDcgQEAgd2l0aF9saWJfcGF0aAorIGVuYWJsZV90YXJnZXRzCisgZW5hYmxlXzY0X2JpdF9iZmQKKyB3aXRoX3N5c3Jvb3QKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9nb2xkCisgZW5hYmxlX2dvdAorIGVuYWJsZV93ZXJyb3IKK0BAIC0xNDQzLDYgKzE0NDQsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyAgIC0tZW5hYmxlLXRhcmdldHMgICAgICAgIGFsdGVybmF0aXZlIHRhcmdldCBjb25maWd1cmF0aW9ucworICAgLS1lbmFibGUtNjQtYml0LWJmZCAgICAgNjQtYml0IHN1cHBvcnQgKG9uIGhvc3RzIHdpdGggbmFycm93ZXIgd29yZCBzaXplcykKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLWdvbGRbPUFSR10gICAgIGJ1aWxkIGdvbGQgW0FSRz17ZGVmYXVsdCx5ZXMsbm99XQorICAgLS1lbmFibGUtZ290PTx0eXBlPiAgICAgR09UIGhhbmRsaW5nIHNjaGVtZSAodGFyZ2V0LCBzaW5nbGUsIG5lZ2F0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlnb3QpCitAQCAtMTYzMjMsNyArMTYzMjYsMTggQEAgZWxzZQorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorIAorKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdvdCB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfZ290K3NldH0iID0gc2V0OyB0aGVuIDoKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUuYWMgYi9sZC9jb25maWd1cmUuYWMKK2luZGV4IDFiZGRmYzkuLmU5ZWRiN2YgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUuYWMKKysrKyBiL2xkL2NvbmZpZ3VyZS5hYworQEAgLTk0LDYgKzk0LDE2IEBAIEFDX1NVQlNUKHVzZV9zeXNyb290KQorIEFDX1NVQlNUKFRBUkdFVF9TWVNURU1fUk9PVCkKKyBBQ19TVUJTVChUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FKQorIAorK0FDX0FSR19FTkFCTEUoW3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXNdKSwsCisrICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgWzFdLAorKyAgICAgICBbRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGxpYnJhcnkgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgZG5sIFVzZSAtLWVuYWJsZS1nb2xkIHRvIGRlY2lkZSBpZiB0aGlzIGxpbmtlciBzaG91bGQgYmUgdGhlIGRlZmF1bHQuCisgZG5sICJpbnN0YWxsX2FzX2RlZmF1bHQiIGlzIHNldCB0byBmYWxzZSBpZiBnb2xkIGlzIHRoZSBkZWZhdWx0IGxpbmtlci4KKyBkbmwgImluc3RhbGxlZF9saW5rZXIiIGlzIHRoZSBpbnN0YWxsZWQgQkZEIGxpbmtlciBuYW1lLgorZGlmZiAtLWdpdCBhL2xkL2xkLmggYi9sZC9sZC5oCitpbmRleCBmNzczY2U3Li5hZGJhMGY2IDEwMDY0NAorLS0tIGEvbGQvbGQuaAorKysrIGIvbGQvbGQuaAorQEAgLTE2MSw2ICsxNjEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgeworICAgLyogSWYgVFJVRSB3ZSdsbCBqdXN0IHByaW50IHRoZSBkZWZhdWx0IG91dHB1dCBvbiBzdGRvdXQuICAqLworICAgYmZkX2Jvb2xlYW4gcHJpbnRfb3V0cHV0X2Zvcm1hdDsKKyAKKysgIC8qIElmIFRSVUUgKHRoZSBkZWZhdWx0KSB3YXJuIGZvciB1c2VzIG9mIHN5c3RlbSBkaXJlY3RvcmllcyB3aGVuCisrICAgICBjcm9zcyBsaW5raW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIHBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrCisrICAvKiBJZiBUUlVFIChkZWZhdWx0IEZBTFNFKSBnaXZlIGFuIGVycm9yIGZvciB1c2VzIG9mIHN5c3RlbQorKyAgICAgZGlyZWN0b3JpZXMgd2hlbiBjcm9zcyBsaW5raW5nIGluc3RlYWQgb2YgYSB3YXJuaW5nLiAgKi8KKysgIGJmZF9ib29sZWFuIGVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM7CisrCisgICAvKiBCaWcgb3IgbGl0dGxlIGVuZGlhbiBhcyBzZXQgb24gY29tbWFuZCBsaW5lLiAgKi8KKyAgIGVudW0gZW5kaWFuX2VudW0gZW5kaWFuOworIAorZGlmZiAtLWdpdCBhL2xkL2xkLnRleGluZm8gYi9sZC9sZC50ZXhpbmZvCitpbmRleCA1MDI1ODJjLi5kYWUxNjhhIDEwMDY0NAorLS0tIGEvbGQvbGQudGV4aW5mbworKysrIGIvbGQvbGQudGV4aW5mbworQEAgLTIyMTIsNiArMjIxMiwxOCBAQCBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIG9yaWdpbmFsIGxpbmtlZCBmaWxlIGRvZXMgbm90IGNoYW5nZS4KKyAKKyBQYXNzaW5nIEBjb2Rle25vbmV9IGZvciBAdmFye3N0eWxlfSBkaXNhYmxlcyB0aGUgc2V0dGluZyBmcm9tIGFueQorIEBjb2Rley0tYnVpbGQtaWR9IG9wdGlvbnMgZWFybGllciBvbiB0aGUgY29tbWFuZCBsaW5lLgorKworK0BraW5kZXggLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQGl0ZW0gLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIHN1Y2ggYXMKKytAZmlsZXsvdXNyL2xpYn0gd2hlbiBjcm9zcyBsaW5raW5nLiAgVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZQorK2luIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoIGRpcmVjdG9yaWVzIGNvbnRhaW4gdGhlIGNvcnJlY3QKKytsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQgc3lzdGVtIHJhdGhlciB0aGFuIHRoZSBob3N0LgorKworK0BraW5kZXggLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQGl0ZW0gLS1lcnJvci1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrR2l2ZSBhbiBlcnJvciBpbnN0ZWFkIG9mIGEgd2FybmluZyBmb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZworK3N5c3RlbSBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcuCisgQGVuZCB0YWJsZQorIAorIEBjIG1hbiBlbmQKK2RpZmYgLS1naXQgYS9sZC9sZGZpbGUuYyBiL2xkL2xkZmlsZS5jCitpbmRleCA3ODJlZDdmLi4xOWE5YWI0IDEwMDY0NAorLS0tIGEvbGQvbGRmaWxlLmMKKysrKyBiL2xkL2xkZmlsZS5jCitAQCAtMTE0LDYgKzExNCwyMyBAQCBsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgYmZkX2Jvb2xlYW4gY21kbGluZSkKKyAgICAgbmV3X2RpcnMtPm5hbWUgPSBjb25jYXQgKGxkX3N5c3Jvb3QsIG5hbWUgKyAxLCAoY29uc3QgY2hhciAqKSBOVUxMKTsKKyAgIGVsc2UKKyAgICAgbmV3X2RpcnMtPm5hbWUgPSB4c3RyZHVwIChuYW1lKTsKKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworKyAgJiYgKCghc3RybmNtcCAobmFtZSwgIi9saWIiLCA0KSkKKysgICAgICB8fCAoIXN0cm5jbXAgKG5hbWUsICIvdXNyL2xpYiIsIDgpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvbG9jYWwvbGliIiwgMTQpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvWDExUjYvbGliIiwgMTQpKSkpCisrICAgeworKyAgICAgaWYgKGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKQorKyAgICAgICBlaW5mbyAoXygiJVglUDogZXJyb3I6IGxpYnJhcnkgc2VhcmNoIHBhdGggXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvblxuIiksIG5hbWUpOworKyAgICAgZWxzZQorKyAgICAgICBlaW5mbyAoXygiJVA6IHdhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvblxuIiksIG5hbWUpOworKyAgIH0KKysjZW5kaWYKKysKKyB9CisgCisgLyogVHJ5IHRvIG9wZW4gYSBCRkQgZm9yIGEgbGFuZ19pbnB1dF9zdGF0ZW1lbnQuICAqLworZGlmZiAtLWdpdCBhL2xkL2xkbGV4LmggYi9sZC9sZGxleC5oCitpbmRleCBlM2U5YjI0Li4yOTQ4N2EzIDEwMDY0NAorLS0tIGEvbGQvbGRsZXguaAorKysrIGIvbGQvbGRsZXguaAorQEAgLTE0MCw2ICsxNDAsOCBAQCBlbnVtIG9wdGlvbl92YWx1ZXMKKyAgIE9QVElPTl9JR05PUkVfVU5SRVNPTFZFRF9TWU1CT0wsCisgICBPUFRJT05fUFVTSF9TVEFURSwKKyAgIE9QVElPTl9QT1BfU1RBVEUsCisrICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUywKKysgIE9QVElPTl9FUlJPUl9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLAorIH07CisgCisgLyogVGhlIGluaXRpYWwgcGFyc2VyIHN0YXRlcy4gICovCitkaWZmIC0tZ2l0IGEvbGQvbGRtYWluLmMgYi9sZC9sZG1haW4uYworaW5kZXggODE4ZDEwOC4uNTRjNDlmMiAxMDA2NDQKKy0tLSBhL2xkL2xkbWFpbi5jCisrKysgYi9sZC9sZG1haW4uYworQEAgLTI2Niw2ICsyNjYsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICBjb21tYW5kX2xpbmUud2Fybl9taXNtYXRjaCA9IFRSVUU7CisgICBjb21tYW5kX2xpbmUud2Fybl9zZWFyY2hfbWlzbWF0Y2ggPSBUUlVFOworICAgY29tbWFuZF9saW5lLmNoZWNrX3NlY3Rpb25fYWRkcmVzc2VzID0gLTE7CisrICBjb21tYW5kX2xpbmUucG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IFRSVUU7CisrICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IEZBTFNFOworIAorICAgLyogV2UgaW5pdGlhbGl6ZSBERU1BTkdMSU5HIGJhc2VkIG9uIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgQ09MTEVDVF9OT19ERU1BTkdMRS4gIFRoZSBnY2MgY29sbGVjdDIgcHJvZ3JhbSB3aWxsIGRlbWFuZ2xlIHRoZQorZGlmZiAtLWdpdCBhL2xkL2xleHN1cC5jIGIvbGQvbGV4c3VwLmMKK2luZGV4IDQ4MTJjOTcuLjIxYjQ5ZGYgMTAwNjQ0CistLS0gYS9sZC9sZXhzdXAuYworKysrIGIvbGQvbGV4c3VwLmMKK0BAIC01MTMsNiArNTEzLDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGRfb3B0aW9uIGxkX29wdGlvbnNbXSA9CisgICB7IHsicG9wLXN0YXRlIiwgbm9fYXJndW1lbnQsIE5VTEwsIE9QVElPTl9QT1BfU1RBVEV9LAorICAgICAnXDAnLCBOVUxMLCBOXygiUG9wIHN0YXRlIG9mIGZsYWdzIGdvdmVybmluZyBpbnB1dCBmaWxlIGhhbmRsaW5nIiksCisgICAgIFRXT19EQVNIRVMgfSwKKysgIHsgeyJuby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIiwgbm9fYXJndW1lbnQsIE5VTEwsCisrICAgICBPUFRJT05fTk9fUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU30sCisrICAgICdcMCcsIE5VTEwsIE5fKCJEbyBub3Qgd2FybiBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKKysgICAgVFdPX0RBU0hFUyB9LAorKyAgeyB7ImVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLCBub19hcmd1bWVudCwgTlVMTCwKKysgICAgKyAgICAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVN9LAorKyAgICAnXDAnLCBOVUxMLCBOXygiR2l2ZSBhbiBlcnJvciBmb3IgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMiKSwKKysgICAgVFdPX0RBU0hFUyB9LAorIH07CisgCisgI2RlZmluZSBPUFRJT05fQ09VTlQgQVJSQVlfU0laRSAobGRfb3B0aW9ucykKK0BAIC0xNDc0LDYgKzE0ODIsMTQgQEAgcGFyc2VfYXJncyAodW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgIGZyZWUgKG9sZHApOworIAkgICAgfQorIAkgIGJyZWFrOworKworKwljYXNlIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTOgorKwkgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gRkFMU0U7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVM6CisrCSAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBUUlVFOworKwkgIGJyZWFrOworIAl9CisgICAgIH0KKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDUxZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTAtRml4LXJwYXRoLWluLWxpYnRvb2wtd2hlbi1zeXNyb290LWlzLWVuYWJsZWQucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBlZGJlZTlhNjhlMWMyZTExYzA1OTY2OGFhMWQxMzAwMWQ5ZjNkZTA2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo0MjozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDEwLzEzXSBGaXggcnBhdGggaW4gbGlidG9vbCB3aGVuIHN5c3Jvb3QgaXMgZW5hYmxlZAorCitFbmFibGluZyBzeXNyb290IHN1cHBvcnQgaW4gbGlidG9vbCBleHBvc2VkIGEgYnVnIHdoZXJlIHRoZSBmaW5hbAorbGlicmFyeSBoYWQgYW4gUlBBVEggZW5jb2RlZCBpbnRvIGl0IHdoaWNoIHN0aWxsIHBvaW50ZWQgdG8gdGhlCitzeXNyb290LiBUaGlzIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgdW50aWwgaXQgZ2V0cyBzb3J0ZWQgb3V0Cit1cHN0cmVhbS4KKworRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDcwZTg1NmUuLjExZWU2ODQgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTgwMzUsOSArODAzNSwxMSBAQCBFT0YKKyAJICB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCQkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCistCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKy0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKyAJCWVsc2UKK0BAIC04NzcwLDYgKzg3NzIsMTAgQEAgRU9GCisgICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKyAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKyAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZDU3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMS1DaGFuZ2UtZGVmYXVsdC1lbXVsYXRpb24tZm9yLW1pcHM2NC1saW51eC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tIDJhNWU4ODEzZDNjNWRiM2UyYjdkOWRmYTJhYjI3Y2NjZDUxMTFlNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQ0OjE0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTNdIENoYW5nZSBkZWZhdWx0IGVtdWxhdGlvbiBmb3IgbWlwczY0Ki0qLWxpbnV4CisKK3dlIGNoYW5nZSB0aGUgZGVmYXVsdCBlbXVsYXRpb25zIHRvIGJlIE42NCBpbnN0ZWFkIG9mIE4zMgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBPRSBjb25maWd1cmF0aW9uIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYmZkL2NvbmZpZy5iZmQgICB8IDggKysrKy0tLS0KKyBsZC9jb25maWd1cmUudGd0IHwgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2NvbmZpZy5iZmQgYi9iZmQvY29uZmlnLmJmZAoraW5kZXggN2JjYjkyYS4uMDNkMmM2ZiAxMDA2NDQKKy0tLSBhL2JmZC9jb25maWcuYmZkCisrKysgYi9iZmQvY29uZmlnLmJmZAorQEAgLTEwNjIsMTIgKzEwNjIsMTIgQEAgY2FzZSAiJHt0YXJnfSIgaW4KKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyBtaXBzX2Vjb2ZmX2JlX3ZlYyBtaXBzX2Vjb2ZmX2xlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHM2NCplbC0qLWxpbnV4KikKKy0gICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9udHJhZF9sZV92ZWMKKy0gICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIgorKyAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjY0X3RyYWRfbGVfdmVjCisrICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9iZV92ZWMgbWlwc19lbGYzMl9udHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMiCisgICAgIDs7CisgICBtaXBzNjQqLSotbGludXgqKQorLSAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX250cmFkX2JlX3ZlYworLSAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisrICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmNjRfdHJhZF9iZV92ZWMKKysgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHMqZWwtKi1saW51eCopCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfdHJhZF9sZV92ZWMKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUudGd0IGIvbGQvY29uZmlndXJlLnRndAoraW5kZXggMjRlMzZkMS4uNzQwYjJlYSAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2xkL2NvbmZpZ3VyZS50Z3QKK0BAIC00NzYsMTEgKzQ3NiwxMSBAQCBtaXBzKmVsLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVsbWlwdnh3b3JrcworIG1pcHMqLSotdnh3b3JrcyopCXRhcmdfZW11bD1lbGYzMmVibWlwdnh3b3JrcworIAkJICAgICAgICB0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmVsbWlwdnh3b3JrcyIgOzsKKyBtaXBzKi0qLXdpbmRpc3MpCXRhcmdfZW11bD1lbGYzMm1pcHN3aW5kaXNzIDs7CistbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwbjMyCistCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRsdHNtaXAgZWxmNjRidHNtaXAiCisrbWlwczY0KmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjY0bHRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXBuMzIgZWxmMzJsdHNtaXBuMzIgZWxmMzJsdHNtaXAgZWxmMzJidHNtaXAgZWxmNjRidHNtaXAiCisgCQkJdGFyZ19leHRyYV9saWJwYXRoPSR0YXJnX2V4dHJhX2VtdWxzIDs7CistbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGYzMmJ0c21pcG4zMgorLQkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0YnRzbWlwIGVsZjY0bHRzbWlwIgorK21pcHM2NCotKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRidHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcG4zMiBlbGYzMmJ0c21pcCBlbGYzMmx0c21pcCBlbGY2NGx0c21pcCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKKyBtaXBzKmVsLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCisgCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJidHNtaXAgZWxmMzJsdHNtaXBuMzIgZWxmNjRsdHNtaXAgZWxmMzJidHNtaXBuMzIgZWxmNjRidHNtaXAiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NmZmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMi1BZGQtWExQLWluc3RydWN0aW9ucy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDI4IEBACitGcm9tIDQ0ODMyOWVhMDk3NDQ3YWVlNzNkMDUwMDQ1Mjk1YzVhMGFlODUxOWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjUxOjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMTNdIEFkZCBYTFAgaW5zdHJ1Y3Rpb25zIHN1cHBvcnQKKworRnJvbSAyNmFkYjA2Y2U1MTVhYWRmZWMwOGNlMTMxMDliNGI5ODI4N2Y2NzdiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmVidSBQaGlsaXBzIDxucGhpbGlwc0BuZXRsb2dpY21pY3JvLmNvbT4KK0RhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTU6MTA6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBvcnQgZm9yIE5ldGxvZ2ljIFhMUAorCitVc2luZyB0aGUgbWlwc2lzYTY0cjJubG0gdGFyZ2V0LCBhZGQgc3VwcG9ydCBmb3IgWExQIGZyb20KK05ldGxvZ2ljLiBBbHNvLCB1cGRhdGUgdmVuZG9yIG5hbWUgdG8gTkxNIHdoZXJldmVyIGFwcGxpY2FibGUuCistLS0KKyBiZmQvYW91dHguaCAgICAgICAgICAgfCAgICAxICsKKyBiZmQvYXJjaHVyZXMuYyAgICAgICAgfCAgICAxICsKKyBiZmQvYmZkLWluMi5oICAgICAgICAgfCAgICAxICsKKyBiZmQvY29uZmlnLmJmZCAgICAgICAgfCAgICA1ICsrKysrCisgYmZkL2NwdS1taXBzLmMgICAgICAgIHwgICAgNiArKysrLS0KKyBiZmQvZWxmeHgtbWlwcy5jICAgICAgfCAgICA4ICsrKysrKysrCisgYmludXRpbHMvcmVhZGVsZi5jICAgIHwgICAgMSArCisgZ2FzL2NvbmZpZy90Yy1taXBzLmMgIHwgICAgNCArKystCisgZ2FzL2NvbmZpZ3VyZSAgICAgICAgIHwgICAgMyArKysKKyBnYXMvY29uZmlndXJlLnRndCAgICAgfCAgICAyICstCisgaW5jbHVkZS9lbGYvbWlwcy5oICAgIHwgICAgMSArCisgaW5jbHVkZS9vcGNvZGUvbWlwcy5oIHwgICAxMCArKysrKysrKy0tCisgbGQvY29uZmlndXJlLnRndCAgICAgIHwgICAgMiArKworIG9wY29kZXMvbWlwcy1kaXMuYyAgICB8ICAgMTIgKysrKystLS0tLS0tCisgb3Bjb2Rlcy9taXBzLW9wYy5jICAgIHwgICAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxNSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiZmQvYW91dHguaCAgICAgICAgICAgfCAgMSArCisgYmZkL2FyY2h1cmVzLmMgICAgICAgIHwgIDEgKworIGJmZC9iZmQtaW4yLmggICAgICAgICB8ICAxICsKKyBiZmQvY29uZmlnLmJmZCAgICAgICAgfCAgNSArKysrKworIGJmZC9jcHUtbWlwcy5jICAgICAgICB8ICA2ICsrKystLQorIGJmZC9lbGZ4eC1taXBzLmMgICAgICB8ICA4ICsrKysrKysrCisgYmludXRpbHMvcmVhZGVsZi5jICAgIHwgIDEgKworIGdhcy9jb25maWcvdGMtbWlwcy5jICB8ICA0ICsrKy0KKyBnYXMvY29uZmlndXJlICAgICAgICAgfCAgMyArKysKKyBnYXMvY29uZmlndXJlLnRndCAgICAgfCAgMiArLQorIGluY2x1ZGUvZWxmL21pcHMuaCAgICB8ICAxICsKKyBpbmNsdWRlL29wY29kZS9taXBzLmggfCAxMCArKysrKysrKy0tCisgbGQvY29uZmlndXJlLnRndCAgICAgIHwgIDIgKysKKyBvcGNvZGVzL21pcHMtZGlzLmMgICAgfCAxMiArKysrKy0tLS0tLS0KKyBvcGNvZGVzL21pcHMtb3BjLmMgICAgfCAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxNSBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9hb3V0eC5oIGIvYmZkL2FvdXR4LmgKK2luZGV4IDkzODVhOTguLmE4OGRmOTkgMTAwNjQ0CistLS0gYS9iZmQvYW91dHguaAorKysrIGIvYmZkL2FvdXR4LmgKK0BAIC04MDIsNiArODAyLDcgQEAgTkFNRSAoYW91dCwgbWFjaGluZV90eXBlKSAoZW51bSBiZmRfYXJjaGl0ZWN0dXJlIGFyY2gsCisgCWNhc2UgYmZkX21hY2hfbWlwc2lzYTY0cjY6CisgCWNhc2UgYmZkX21hY2hfbWlwc19zYjE6CisgCWNhc2UgYmZkX21hY2hfbWlwc194bHI6CisrCWNhc2UgYmZkX21hY2hfbWlwc194bHA6CisgCSAgLyogRklYTUU6IFRoZXNlIHNob3VsZCBiZSBNSVBTMywgTUlQUzQsIE1JUFMxNiwgTUlQUzMyLCBldGMuICAqLworIAkgIGFyY2hfZmxhZ3MgPSBNX01JUFMyOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2JmZC9hcmNodXJlcy5jIGIvYmZkL2FyY2h1cmVzLmMKK2luZGV4IGM5ZmQ2YzguLjU0N2JkMDkgMTAwNjQ0CistLS0gYS9iZmQvYXJjaHVyZXMuYworKysrIGIvYmZkL2FyY2h1cmVzLmMKK0BAIC0xODAsNiArMTgwLDcgQEAgREVTQ1JJUFRJT04KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAJCTY2MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgeyogZGVjaW1hbCAnWExSJyAgKn0KKysuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgeyogZGVjaW1hbCAnWExQJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMiAgICAgICAgICAgMzMKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKK2RpZmYgLS1naXQgYS9iZmQvYmZkLWluMi5oIGIvYmZkL2JmZC1pbjIuaAoraW5kZXggYzdhMmJiNS4uNDEzYjc3MyAxMDA2NDQKKy0tLSBhL2JmZC9iZmQtaW4yLmgKKysrKyBiL2JmZC9iZmQtaW4yLmgKK0BAIC0xOTY3LDYgKzE5NjcsNyBAQCBlbnVtIGJmZF9hcmNoaXRlY3R1cmUKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCAgICAgICAgICA2NjAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIgICAgICAgICAgNjUwMgorICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIC8qIGRlY2ltYWwgJ1hMUicgICovCisrI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgLyogZGVjaW1hbCAnWExQJyAgKi8KKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgorICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMycjIgICAgICAgICAgIDMzCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMyAgICAgICAgICAgMzQKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlnLmJmZCBiL2JmZC9jb25maWcuYmZkCitpbmRleCAwM2QyYzZmLi4yNzA4NmRiIDEwMDY0NAorLS0tIGEvYmZkL2NvbmZpZy5iZmQKKysrKyBiL2JmZC9jb25maWcuYmZkCitAQCAtMTA0MSw2ICsxMDQxLDExIEBAIGNhc2UgIiR7dGFyZ30iIGluCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbGVfdmVjCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9iZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMiCisgICAgIDs7CisrICBtaXBzaXNhNjQqLSotZWxmKikKKysJdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl90cmFkX2JlX3ZlYworKwl0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorKwl3YW50NjQ9dHJ1ZQorKwk7OworICAgbWlwcyotKi1lbGYqIHwgbWlwcyotKi1ydGVtcyogfCBtaXBzKi0qLXZ4d29ya3MgfCBtaXBzKi0qLXdpbmRpc3MpCisgICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfYmVfdmVjCisgICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9sZV92ZWMgbWlwc19lbGY2NF9iZV92ZWMgbWlwc19lbGY2NF9sZV92ZWMiCitkaWZmIC0tZ2l0IGEvYmZkL2NwdS1taXBzLmMgYi9iZmQvY3B1LW1pcHMuYworaW5kZXggYjYxN2FhYS4uMTlhOTlkMSAxMDA2NDQKKy0tLSBhL2JmZC9jcHUtbWlwcy5jCisrKysgYi9iZmQvY3B1LW1pcHMuYworQEAgLTEwMyw3ICsxMDMsOCBAQCBlbnVtCisgICBJX21pcHNvY3Rlb25wLAorICAgSV9taXBzb2N0ZW9uMiwKKyAgIElfeGxyLAorLSAgSV9taWNyb21pcHMKKysgIElfbWljcm9taXBzLAorKyAgSV94bHAKKyB9OworIAorICNkZWZpbmUgTk4oaW5kZXgpICgmYXJjaF9pbmZvX3N0cnVjdFsoaW5kZXgpICsgMV0pCitAQCAtMTUzLDcgKzE1NCw4IEBAIHN0YXRpYyBjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgYXJjaF9pbmZvX3N0cnVjdFtdID0KKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb25wLCJtaXBzOm9jdGVvbisiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbnApKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19vY3Rlb24yLCJtaXBzOm9jdGVvbjIiLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbjIpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHIsICJtaXBzOnhsciIsICAgICAgIEZBTFNFLCBOTihJX3hscikpLAorLSAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX21pY3JvbWlwcywibWlwczptaWNyb21pcHMiLEZBTFNFLDApCisrICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCisgfTsKKyAKKyAvKiBUaGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUgaXMgbWlwczozMDAwLCBidXQgd2l0aCBhIG1hY2hpbmUgbnVtYmVyIG9mCitkaWZmIC0tZ2l0IGEvYmZkL2VsZnh4LW1pcHMuYyBiL2JmZC9lbGZ4eC1taXBzLmMKK2luZGV4IDBkZjdhYmYuLmQyNjhlODYgMTAwNjQ0CistLS0gYS9iZmQvZWxmeHgtbWlwcy5jCisrKysgYi9iZmQvZWxmeHgtbWlwcy5jCitAQCAtNjYwOCw2ICs2NjA4LDkgQEAgX2JmZF9lbGZfbWlwc19tYWNoIChmbGFnd29yZCBmbGFncykKKyAgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfeGxyOworIAorKwljYXNlIEVfTUlQU19NQUNIX1hMUDoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc194bHA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgc3dpdGNoIChmbGFncyAmIEVGX01JUFNfQVJDSCkKKyAJeworQEAgLTExODc4LDYgKzExODgxLDEwIEBAIG1pcHNfc2V0X2lzYV9mbGFncyAoYmZkICphYmZkKQorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT04yOworICAgICAgIGJyZWFrOworIAorKwljYXNlIGJmZF9tYWNoX21pcHNfeGxwOgorKwkgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9YTFA7CisrCSAgYnJlYWs7CisrCisgICAgIGNhc2UgYmZkX21hY2hfbWlwc2lzYTMyOgorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzMyOworICAgICAgIGJyZWFrOworQEAgLTE0NzY1LDYgKzE0NzcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX2xvb25nc29uXzNhLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorKyAgeyBiZmRfbWFjaF9taXBzX3hscCwgYmZkX21hY2hfbWlwc2lzYTY0cjIgfSwKKyAKKyAgIC8qIE1JUFM2NCBleHRlbnNpb25zLiAgKi8KKyAgIHsgYmZkX21hY2hfbWlwc2lzYTY0cjIsIGJmZF9tYWNoX21pcHNpc2E2NCB9LAorZGlmZiAtLWdpdCBhL2JpbnV0aWxzL3JlYWRlbGYuYyBiL2JpbnV0aWxzL3JlYWRlbGYuYworaW5kZXggMGMwMGIyZi4uNmU5ZDVlNCAxMDA2NDQKKy0tLSBhL2JpbnV0aWxzL3JlYWRlbGYuYworKysrIGIvYmludXRpbHMvcmVhZGVsZi5jCitAQCAtMjg5OCw2ICsyODk4LDcgQEAgZ2V0X21hY2hpbmVfZmxhZ3MgKHVuc2lnbmVkIGVfZmxhZ3MsIHVuc2lnbmVkIGVfbWFjaGluZSkKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMjogc3RyY2F0IChidWYsICIsIG9jdGVvbjIiKTsgYnJlYWs7CisgCSAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjM6IHN0cmNhdCAoYnVmLCAiLCBvY3Rlb24zIik7IGJyZWFrOworIAkgICAgY2FzZSBFX01JUFNfTUFDSF9YTFI6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxyIik7IGJyZWFrOworKwkJY2FzZSBFX01JUFNfTUFDSF9YTFA6ICBzdHJjYXQgKGJ1ZiwgIiwgeGxwIik7IGJyZWFrOworIAkgICAgY2FzZSAwOgorIAkgICAgLyogV2Ugc2ltcGx5IGlnbm9yZSB0aGUgZmllbGQgaW4gdGhpcyBjYXNlIHRvIGF2b2lkIGNvbmZ1c2lvbjoKKyAJICAgICAgIE1JUFMgRUxGIGRvZXMgbm90IHNwZWNpZnkgRUZfTUlQU19NQUNILCBpdCBpcyBhIEdOVQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWcvdGMtbWlwcy5jIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK2luZGV4IGMzZTNlMmEuLjhkNjQzNDQgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlnL3RjLW1pcHMuYworKysrIGIvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK0BAIC01NTEsNiArNTUxLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1JNNzAwMCAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9WUjU1MDAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC01ODAsNiArNTgxLDcgQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgICAgICYmIG1pcHNfb3B0cy5pc2EgIT0gSVNBX01JUFMzKSAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5hcmNoID09IENQVV9SNDMwMCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB8fCBtaXBzX29wdHMubWljcm9taXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1hMUCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICkKKyAKKyAvKiBXaGV0aGVyIHRoZSBwcm9jZXNzb3IgdXNlcyBoYXJkd2FyZSBpbnRlcmxvY2tzIHRvIHByb3RlY3QgcmVhZHMKK0BAIC0xODY4Miw3ICsxODY4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2NwdV9pbmZvX3RhYmxlW10gPQorICAgLyogQnJvYWRjb20gWExQLgorICAgICAgWExQIGlzIG1vc3RseSBsaWtlIFhMUiwgd2l0aCB0aGUgcHJvbWluZW50IGV4Y2VwdGlvbiB0aGF0IGl0IGlzCisgICAgICBNSVBTNjRSMiByYXRoZXIgdGhhbiBNSVBTNjQuICAqLworLSAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFIgfSwKKysgIHsgInhscCIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfWExQIH0sCisgCisgICAvKiBFbmQgbWFya2VyICovCisgICB7IE5VTEwsIDAsIDAsIDAsIDAgfQorZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCitpbmRleCAwNzQ4ODZmLi44MDkxZjJmIDEwMDc1NQorLS0tIGEvZ2FzL2NvbmZpZ3VyZQorKysrIGIvZ2FzL2NvbmZpZ3VyZQorQEAgLTEyODA4LDYgKzEyODA4LDkgQEAgX0FDRU9GCisgCSAgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsKQorIAkgICAgbWlwc19jcHU9bWlwczY0cjYKKyAJICAgIDs7CisrCSAgbWlwc2lzYTY0cjJubG0gfCBtaXBzaXNhNjRyMm5sbWVsKQorKwkJbWlwc19jcHU9eGxwCisrCQk7OworIAkgIG1pcHN0eDM5IHwgbWlwc3R4MzllbCkKKyAJICAgIG1pcHNfY3B1PXIzOTAwCisgCSAgICA7OworZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUudGd0IGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDFkOTJmNTUuLjA2ZThiNGYgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlndXJlLnRndAorKysrIGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK0BAIC0zMzIsNyArMzMyLDcgQEAgY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorICAgbWlwcy0qLXN5c3Y0Kk1QKiB8IG1pcHMtKi1nbnUqKQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzKi1zZGUtZWxmKiB8IG1pcHMqLW10aS1lbGYqIHwgbWlwcyotaW1nLWVsZiopCisgCQkJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CistICBtaXBzLSotZWxmKiB8IG1pcHMtKi1ydGVtcyopCQlmbXQ9ZWxmIDs7CisrICBtaXBzLSotZWxmKiB8IG1pcHMtKi1ydGVtcyopCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzLSotbmV0YnNkKikJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgICBtaXBzLSotb3BlbmJzZCopCQkJZm10PWVsZiBlbT10bWlwcyA7OworIAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvZWxmL21pcHMuaCBiL2luY2x1ZGUvZWxmL21pcHMuaAoraW5kZXggMmVkNmFjZC4uZTU0MWY1MCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZWxmL21pcHMuaAorKysrIGIvaW5jbHVkZS9lbGYvbWlwcy5oCitAQCAtMjg1LDYgKzI4NSw3IEBAIEVORF9SRUxPQ19OVU1CRVJTIChSX01JUFNfbWF4ZXh0KQorICNkZWZpbmUgRV9NSVBTX01BQ0hfU0IxICAgICAgICAgMHgwMDhhMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OCTB4MDA4YjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX1hMUiAgICAgCTB4MDA4YzAwMDAKKysjZGVmaW5lIEVfTUlQU19NQUNIX1hMUCAgICAgICAgIDB4MDA4ZjAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIX09DVEVPTjIJMHgwMDhkMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OMwkweDAwOGUwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF81NDAwCTB4MDA5MTAwMDAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL29wY29kZS9taXBzLmggYi9pbmNsdWRlL29wY29kZS9taXBzLmgKK2luZGV4IGVmMjYxNjcuLmVmNTNlYzYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBiL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorQEAgLTEyMjcsOCArMTIyNywxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBJTlNOX0xPT05HU09OXzJGICAgICAgICAgIDB4ODAwMDAwMDAKKyAvKiBMb29uZ3NvbiAzQS4gICovCisgI2RlZmluZSBJTlNOX0xPT05HU09OXzNBICAgICAgICAgIDB4MDAwMDA0MDAKKy0vKiBSTUkgWGxyIGluc3RydWN0aW9uICovCistI2RlZmluZSBJTlNOX1hMUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorKy8qIE5ldGxvZ2ljIFhsciBpbnN0cnVjdGlvbiAqLworKyNkZWZpbmUgSU5TTl9YTFIJCTB4MDAwMDAwMjAKKysvKiBOZXRsb2dpYyBYbFAgaW5zdHJ1Y3Rpb24gKi8KKysjZGVmaW5lIElOU05fWExQCQkweDAwMDAwMDQwCisgCisgLyogRFNQIEFTRSAqLworICNkZWZpbmUgQVNFX0RTUAkJCTB4MDAwMDAwMDEKK0BAIC0xMzI0LDYgKzEzMjYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlW10gPSB7CisgI2RlZmluZSBDUFVfT0NURU9OUAk2NjAxCisgI2RlZmluZSBDUFVfT0NURU9OMgk2NTAyCisgI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLworKyNkZWZpbmUgQ1BVX1hMUCAgICAgICAgIDg4NzY4MCAgICAgIC8qIGRlY2ltYWwgJ1hMUCcgICAqLworIAorIC8qIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBDUFUgaXMgaW5jbHVkZWQgaW4gSU5TTl8qIG1hc2sgTUFTSy4gICovCisgCitAQCAtMTM5OCw2ICsxNDAxLDkgQEAgY3B1X2lzX21lbWJlciAoaW50IGNwdSwgdW5zaWduZWQgaW50IG1hc2spCisgICAgICAgcmV0dXJuICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBMzJSNikKKyAJICAgICB8fCAoKG1hc2sgJiBJTlNOX0lTQV9NQVNLKSA9PSBJTlNOX0lTQTY0UjYpOworIAorKyAgICBjYXNlIENQVV9YTFA6CisrICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9YTFApICE9IDA7CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CitkaWZmIC0tZ2l0IGEvbGQvY29uZmlndXJlLnRndCBiL2xkL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDc0MGIyZWEuLjRkZjEzYTcgMTAwNjQ0CistLS0gYS9sZC9jb25maWd1cmUudGd0CisrKysgYi9sZC9jb25maWd1cmUudGd0CitAQCAtNDYyLDYgKzQ2Miw4IEBAIG1pcHMqZWwtc2RlLWVsZiopCXRhcmdfZW11bD1lbGYzMmx0c21pcAorIG1pcHMqLXNkZS1lbGYqIHwgbWlwcyotbXRpLWVsZiogfCBtaXBzKi1pbWctZWxmKikKKyAJCQl0YXJnX2VtdWw9ZWxmMzJidHNtaXAKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcCBlbGYzMmJ0c21pcG4zMiBlbGY2NGJ0c21pcCBlbGYzMmx0c21pcG4zMiBlbGY2NGx0c21pcCIgOzsKKyttaXBzaXNhNjQqLSotZWxmKikJdGFyZ19lbXVsPWVsZjMyYnRzbWlwCisrCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXAgZWxmNjRidHNtaXAgZWxmNjRsdHNtaXAiIDs7CisgbWlwczY0KmVsLXBzMi1lbGYqKQl0YXJnX2VtdWw9ZWxmMzJscjU5MDBuMzIKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmxyNTkwMCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKK2RpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtZGlzLmMgYi9vcGNvZGVzL21pcHMtZGlzLmMKK2luZGV4IDFlYjFkNDUuLmQ2ODgxYWYgMTAwNjQ0CistLS0gYS9vcGNvZGVzL21pcHMtZGlzLmMKKysrKyBiL29wY29kZXMvbWlwcy1kaXMuYworQEAgLTY1NSwxMyArNjU1LDExIEBAIGNvbnN0IHN0cnVjdCBtaXBzX2FyY2hfY2hvaWNlIG1pcHNfYXJjaF9jaG9pY2VzW10gPQorICAgICBtaXBzX2NwMHNlbF9uYW1lc194bHIsIEFSUkFZX1NJWkUgKG1pcHNfY3Awc2VsX25hbWVzX3hsciksCisgICAgIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisgCistICAvKiBYTFAgaXMgbW9zdGx5IGxpa2UgWExSLCB3aXRoIHRoZSBwcm9taW5lbnQgZXhjZXB0aW9uIGl0IGlzIGJlaW5nCistICAgICBNSVBTNjRSMi4gICovCistICB7ICJ4bHAiLCAxLCBiZmRfbWFjaF9taXBzX3hsciwgQ1BVX1hMUiwKKy0gICAgSVNBX01JUFM2NFIyIHwgSU5TTl9YTFIsIDAsCistICAgIG1pcHNfY3AwX25hbWVzX3hsciwKKy0gICAgbWlwc19jcDBzZWxfbmFtZXNfeGxyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc194bHIpLAorLSAgICBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorKyAgeyAieGxwIiwgMSwgYmZkX21hY2hfbWlwc194bHAsIENQVV9YTFAsCisrICAgIElTQV9NSVBTNjRSMiB8IElOU05fWExQLCAwLAorKyAgICBtaXBzX2NwMF9uYW1lc19taXBzMzI2NHIyLAorKyAgICBtaXBzX2NwMHNlbF9uYW1lc19taXBzMzI2NHIyLCBBUlJBWV9TSVpFIChtaXBzX2NwMHNlbF9uYW1lc19taXBzMzI2NHIyKSwKKysgICAgbWlwc19od3JfbmFtZXNfbWlwczMyNjRyMiB9LAorIAorICAgLyogVGhpcyBlbnRyeSwgbWlwczE2LCBpcyBoZXJlIG9ubHkgZm9yIElTQS9wcm9jZXNzb3Igc2VsZWN0aW9uOyBkbworICAgICAgbm90IHByaW50IGl0cyBuYW1lLiAgKi8KK2RpZmYgLS1naXQgYS9vcGNvZGVzL21pcHMtb3BjLmMgYi9vcGNvZGVzL21pcHMtb3BjLmMKK2luZGV4IDJjM2JiYWQuLjk3ODVhN2UgMTAwNjQ0CistLS0gYS9vcGNvZGVzL21pcHMtb3BjLmMKKysrKyBiL29wY29kZXMvbWlwcy1vcGMuYworQEAgLTMxOSw3ICszMTksOCBAQCBkZWNvZGVfbWlwc19vcGVyYW5kIChjb25zdCBjaGFyICpwKQorICNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCisgI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorICNkZWZpbmUgSU9DVDIJSU5TTl9PQ1RFT04yCistI2RlZmluZSBYTFIgICAgIElOU05fWExSCisrI2RlZmluZSBYTFIJSU5TTl9YTFIKKysjZGVmaW5lIFhMUAlJTlNOX1hMUAorICNkZWZpbmUgSVZJUlQJQVNFX1ZJUlQKKyAjZGVmaW5lIElWSVJUNjQJQVNFX1ZJUlQ2NAorIAorQEAgLTk1Niw2ICs5NTcsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJjbG8iLAkJCSJVLHMiLAkJMHg3MDAwMDAyMSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorIHsiY2x6IiwJCQkiZCxzIiwJCTB4MDAwMDAwNTAsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJMzcsCQkwLAkwIH0sCisgeyJjbHoiLAkJCSJVLHMiLAkJMHg3MDAwMDAyMCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzMnxONTUsCTAsCUkzNyB9LAorK3siY3JjIiwJCQkiZCxzLHQiLAkweDcwMDAwMDFjLCAweGZjMDAwN2ZmLAlXUl8xfFJEXzJ8UkRfMywJMCwJCVhMUCwgCQkwLAkwIH0sCisgLyogY3RjMCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgeyJjdGMxIiwJCSJ0LEciLAkJMHg0NGMwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DQ3xDTSwJCTAsCQlJMSwJCTAsCTAgfSwKKyB7ImN0YzEiLAkJInQsUyIsCQkweDQ0YzAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0NDfENNLAkJMCwJCUkxLAkJMCwJMCB9LAorQEAgLTk4OCwxMiArOTkwLDEzIEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImRhZGRpdSIsCQkidCxyLGoiLAkweDY0MDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzIsCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkYWRkdSIsCQkiZCx2LHQiLAkweDAwMDAwMDJkLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRhZGR1IiwJCSJ0LHIsSSIsCTAsICAgIChpbnQpIE1fREFERFVfSSwJSU5TTl9NQUNSTywJCTAsCQlJMywJCTAsCTAgfSwKKy17ImRhZGR3YyIsCQkiZCxzLHQiLCAJMHg3MDAwMDAzOCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfQzB8UkRfQzAsIDAsCQlYTFIsCQkwLAkwIH0sCisreyJkYWRkd2MiLAkJImQscyx0IiwgCTB4NzAwMDAwMzgsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0MwfFJEX0MwLCAwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsiZGJyZWFrIiwJCSIiLAkJMHg3MDAwMDAzZiwgMHhmZmZmZmZmZiwJMCwJCQkwLAkJTjUsCQkwLAkwIH0sCisgeyJkY2xvIiwJCSJkLHMiLAkJMHgwMDAwMDA1MywgMHhmYzFmMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRjbG8iLAkJIlUscyIsCSAJMHg3MDAwMDAyNSwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLCAJMCwJCUk2NHxONTUsCTAsCUk2OSB9LAorIHsiZGNseiIsCQkiZCxzIiwJCTB4MDAwMDAwNTIsIDB4ZmMxZjA3ZmYsIFdSXzF8UkRfMiwJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkY2x6IiwJCSJVLHMiLAkgCTB4NzAwMDAwMjQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMiwgCTAsCQlJNjR8TjU1LAkwLAlJNjkgfSwKKyt7ImRjcmMiLAkJImQscyx0IiwJMHg3MDAwMDAxZCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCTAsCQlYTFAsIAkJMCwJMCB9LAorIC8qIGRjdHIgYW5kIGRjdHcgYXJlIHVzZWQgb24gdGhlIHI1MDAwLiAgKi8KKyB7ImRjdHIiLAkJIm8oYikiLAkgCTB4YmMwNTAwMDAsIDB4ZmMxZjAwMDAsIFJEXzIsCQkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGN0dyIsCQkibyhiKSIsCQkweGJjMDkwMDAwLCAweGZjMWYwMDAwLCBSRF8yLAkJCTAsCQlJMywJCTAsCTAgfSwKK0BAIC0xMDY1LDYgKzEwNjgsNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJkbWZjMCIsCQkidCxHLEgiLAkweDQwMjAwMDAwLCAweGZmZTAwN2Y4LAlXUl8xfFJEX0MwfExDLAkJMCwJCUk2NCwJCTAsCTAgfSwKKyB7ImRtZmdjMCIsCQkidCxHIiwJCTB4NDA2MDAxMDAsIDB4ZmZlMDA3ZmYsIFdSXzF8UkRfQzB8TEMsCQkwLAkJMCwJCUlWSVJUNjQsIDAgfSwKKyB7ImRtZmdjMCIsCQkidCxHLEgiLAkweDQwNjAwMTAwLCAweGZmZTAwN2Y4LCBXUl8xfFJEX0MwfExDLAkJMCwJCTAsCQlJVklSVDY0LCAwIH0sCisreyJkbWZ1ciIsCQkidCxkIiwJCTB4NzAwMDAwMWUsIDB4ZmZlMDA3ZmYsIFdSXzEsCQkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7ImRtdCIsCQkJIiIsCQkweDQxNjAwYmMxLCAweGZmZmZmZmZmLCBUUkFQLAkJCTAsCQkwLAkJTVQzMiwJMCB9LAorIHsiZG10IiwJCQkidCIsCQkweDQxNjAwYmMxLCAweGZmZTBmZmZmLCBXUl8xfFRSQVAsCQkwLAkJMCwJCU1UMzIsCTAgfSwKKyB7ImRtdGMwIiwJCSJ0LEciLAkJMHg0MGEwMDAwMCwgMHhmZmUwMDdmZiwJUkRfMXxXUl9DMHxXUl9DQ3xDTSwJMCwJCUkzLAkJMCwJRUUgfSwKK0BAIC0xMDgwLDYgKzEwODQsOCBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgLyogZG1mYzMgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLworIC8qIGRtdGMzIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyB7ImRtdWgiLAkJImQscyx0IiwJMHgwMDAwMDBkYywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAorK3siZG10dXIiLAkJInQsZCIsCQkweDcwMDAwMDFmLCAweGZmZTAwN2ZmLAlSRF8xLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisreyJkbXVsIiwJCSJkLHMsdCIsCTB4NzAwMDAwMDYsIDB4ZmMwMDA3ZmYsCVdSXzF8UkRfMnxSRF8zLAkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQscyx0IiwJMHgwMDAwMDA5YywgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzMsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZG11bCIsCQkiZCx2LHQiLAkweDcwMDAwMDAzLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9ISUxPLAkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7ImRtdWwiLAkJImQsdix0IiwJMCwgICAgKGludCkgTV9ETVVMLAlJTlNOX01BQ1JPLAkJMCwJCUkzLAkJMCwJTTMyfEk2OSB9LAorQEAgLTEyMjksOSArMTIzNSw5IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImxkIiwJCQkicywtYigrUikiLAkweGVjMTgwMDAwLCAweGZjMWMwMDAwLCBXUl8xLAkJCVJEX3BjLAkJSTY5LAkJMCwJMCB9LAorIHsibGQiLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX0xEX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsibGQiLAkJCSJ0LG8oYikiLAkweGRjMDAwMDAwLCAweGZjMDAwMDAwLCBXUl8xfFJEXzN8TE0sCQkwLAkJSTMsCQkwLAkwIH0sCisteyJsZGFkZHciLAkJInQsYiIsCQkweDcwMDAwMDEwLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsibGRhZGR3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTEsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJsZGFkZGQiLAkJInQsYiIsCQkweDcwMDAwMDEyLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorK3sibGRhZGR3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMCwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJsZGFkZHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMSwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJsZGFkZGQiLAkJInQsYiIsCQkweDcwMDAwMDEyLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7ImxkYzEiLAkJIlQsbyhiKSIsCTB4ZDQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xDTER8RlBfRCwJMCwJCUkyLAkJMCwJU0YgfSwKKyB7ImxkYzEiLAkJIkUsbyhiKSIsCTB4ZDQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xDTER8RlBfRCwJMCwJCUkyLAkJMCwJU0YgfSwKKyB7ImxkYzEiLAkJIlQsQShiKSIsCTAsICAgIChpbnQpIE1fTERDMV9BQiwJSU5TTl9NQUNSTywJCUlOU04yX01fRlBfRCwJSTIsCQkwLAlTRiB9LAorQEAgLTEzOTYsNyArMTQwMiw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7Im1mbG8iLAkJImQsOSIsCQkweDAwMDAwMDEyLCAweGZmOWYwN2ZmLCBXUl8xfFJEX0xPLAkJMCwJCTAsCQlEMzIsCTAgfSwKKyB7Im1mbG8xIiwJCSJkIiwJCTB4NzAwMDAwMTIsIDB4ZmZmZjA3ZmYsCVdSXzF8UkRfTE8sCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtZmxoeHUiLAkJImQiLAkJMHgwMDAwMDA1MiwgMHhmZmZmMDdmZiwJV1JfMXxNT0RfSElMTywJCTAsCQkwLAkJU01ULAkwIH0sCisteyJtZmNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOCwgMHhmYzAwZmZmZiwgV1JfMXxSRF8yLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1mY3IiLAkJInQscyIsCQkweDcwMDAwMDE4LCAweGZjMDBmZmZmLCBXUl8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtZnNhIiwJCSJkIiwJCTB4MDAwMDAwMjgsIDB4ZmZmZjA3ZmYsCVdSXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibWluLm9iIiwJCSJYLFksUSIsCTB4NzgwMDAwMDYsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlTQjEsCQlNWCwJMCB9LAorIHsibWluLm9iIiwJCSJELFMsUSIsCTB4NDgwMDAwMDYsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlONTQsCQkwLAkwIH0sCitAQCAtMTQ0MSwxMCArMTQ0NywxMyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgLyogbW92ZSBpcyBhdCB0aGUgdG9wIG9mIHRoZSB0YWJsZS4gICovCisgeyJtc2duLnFoIiwJCSJYLFksUSIsCTB4NzgyMDAwMDAsIDB4ZmMyMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQkwLAkJTVgsCTAgfSwKKyB7Im1zZ3NuZCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1NORCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtc2dzbmRzIiwJCSJkLHQiLAkJMHg0YTAwMDAwMSwgMHhmZmUwMDdmZiwJV1JfMXxSRF8yfFJEX0MwfFdSX0MwLAkwLAkJWExQLAkJMCwJMCB9LAorIHsibXNnbGQiLAkJIiIsIAkJMCwgICAgKGludCkgTV9NU0dMRCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisgeyJtc2dsZCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR0xEX1QsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorLXsibXNnd2FpdCIsCQkiIiwgCQkwLCAgICAoaW50KSBNX01TR1dBSVQsCUlOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorLXsibXNnd2FpdCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1dBSVRfVCxJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1zZ2xkcyIsCQkiZCx0IiwJCTB4NGEwMDAwMDIsIDB4ZmZlMDA3ZmYsCVdSXzF8UkRfMnxSRF9DMHxXUl9DMCwJMCwJCVhMUCwJCTAsCTAgfSwKKyt7Im1zZ3dhaXQiLAkJIiIsCQkwLCAgICAoaW50KSBNX01TR1dBSVQsICBJTlNOX01BQ1JPLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7Im1zZ3dhaXQiLAkJInQiLAkJMCwgICAgKGludCkgTV9NU0dXQUlUX1QsSU5TTl9NQUNSTywJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJtc2dzeW5jIiwJCSIiLAkJMHg0YTAwMDAwNCwgMHhmZmZmZmZmZiwwLAkJCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJtc3ViLmQiLAkJIkQsUixTLFQiLAkweDRjMDAwMDI5LCAweGZjMDAwMDNmLCBXUl8xfFJEXzJ8UkRfM3xSRF80fEZQX0QsIDAsCQlJNF8zMywJCTAsCUkzNyB9LAorIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NDYyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJFLAkJMCwJMCB9LAorIHsibXN1Yi5kIiwJCSJELFMsVCIsCTB4NzIyMDAwMTksIDB4ZmZlMDAwM2YsCVdSXzF8UkRfMnxSRF8zfEZQX0QsCTAsCQlJTDJGLAkJMCwJMCB9LAorQEAgLTE0OTQsNyArMTUwMyw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7Im10bG8iLAkJInMsNyIsCQkweDAwMDAwMDEzLCAweGZjMWZlN2ZmLCBSRF8xfFdSX0xPLAkJMCwJCTAsCQlEMzIsCTAgfSwKKyB7Im10bG8xIiwJCSJzIiwJCTB4NzAwMDAwMTMsIDB4ZmMxZmZmZmYsCVJEXzF8V1JfTE8sCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtdGxoeCIsCQkicyIsCQkweDAwMDAwMDUzLCAweGZjMWZmZmZmLAlSRF8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKy17Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xfFJEXzIsCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXRjciIsCQkidCxzIiwJCTB4NzAwMDAwMTksIDB4ZmMwMGZmZmYsIFJEXzEsCQkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7Im10bTAiLAkJInMiLAkJMHg3MDAwMDAwOCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7Im10bTEiLAkJInMiLAkJMHg3MDAwMDAwYywgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyB7Im10bTIiLAkJInMiLAkJMHg3MDAwMDAwZCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKK0BAIC0xOTI0LDkgKzE5MzMsOSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wY29kZXNbXSA9CisgeyJzdXhjMSIsCQkiUyx0KGIpIiwJMHg0YzAwMDAwZCwgMHhmYzAwMDdmZiwgUkRfMXxSRF8yfFJEXzN8U018RlBfRCwJMCwJCUk1XzMzfE41NSwJMCwJSTM3fSwKKyB7InN3IiwJCQkidCxvKGIpIiwJMHhhYzAwMDAwMCwgMHhmYzAwMDAwMCwJUkRfMXxSRF8zfFNNLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsic3ciLAkJCSJ0LEEoYikiLAkwLCAgICAoaW50KSBNX1NXX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJMCB9LAorLXsic3dhcHciLAkJInQsYiIsCQkweDcwMDAwMDE0LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsic3dhcHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNSwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKyt7InN3YXB3IiwJCSJ0LGIiLAkJMHg3MDAwMDAxNCwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisreyJzd2Fwd3UiLAkJInQsYiIsCQkweDcwMDAwMDE1LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7InN3YXBkIiwJCSJ0LGIiLAkJMHg3MDAwMDAxNiwgMHhmYzAwZmZmZiwgTU9EXzF8UkRfMnxTTSwJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJzd2MwIiwJCSJFLG8oYikiLAkweGUwMDAwMDAwLCAweGZjMDAwMDAwLAlSRF8zfFJEX0MwfFNNLAkJMCwJCUkxLAkJMCwJSU9DVHxJT0NUUHxJT0NUMnxJMzcgfSwKKyB7InN3YzAiLAkJIkUsQShiKSIsCTAsICAgIChpbnQpIE1fU1dDMF9BQiwJSU5TTl9NQUNSTywJCTAsCQlJMSwJCTAsCUlPQ1R8SU9DVFB8SU9DVDJ8STM3IH0sCisgeyJzd2MxIiwJCSJULG8oYikiLAkweGU0MDAwMDAwLCAweGZjMDAwMDAwLAlSRF8xfFJEXzN8U018RlBfUywJMCwJCUkxLAkJMCwJMCB9LAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUwMWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTMtRml4LWFuLWludGVybmFsLWVycm9yLWluLWRvX3ByaW50X3RvX21hcGZpbGUtc2Vlbi13aS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDhlOGY3N2VjMmI2MjYyZTdkMTBhZjU0NzAwYzM0MDE3M2Q5NTcyNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBGZWIgMjAxNSAwOTowNTo0OSArMDAwMAorU3ViamVjdDogW1BBVENIIDEzLzEzXSBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gZG9fcHJpbnRfdG9fbWFwZmlsZSBzZWVuIHdpdGgKKyBnb2xkIG9uIGFybQorCitUaGlzIGlzIGR1ZSB0byBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIGRvX3ByaW50X3RvX21hcGZpbGUgZm9yCithdHJyaWJ1dGVhIHNlY3Rpb24gKEFSTS5hdHRyaWJ1dGVzKSwgaXQgc3RhcnRlZCB0byBzaG93IHVwIGFmdGVyIGZpeAorZm9yIFBSIGdvbGQvMTY5ODAgd2FzIGluc3RhbGxlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisgZ29sZC9hdHRyaWJ1dGVzLmggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nb2xkL2F0dHJpYnV0ZXMuaCBiL2dvbGQvYXR0cmlidXRlcy5oCitpbmRleCAyYWE3YTc4Li4zZDEyNmU2IDEwMDY0NAorLS0tIGEvZ29sZC9hdHRyaWJ1dGVzLmgKKysrKyBiL2dvbGQvYXR0cmlidXRlcy5oCitAQCAtMzg3LDYgKzM4NywxMCBAQCBjbGFzcyBPdXRwdXRfYXR0cmlidXRlc19zZWN0aW9uX2RhdGEgOiBwdWJsaWMgT3V0cHV0X3NlY3Rpb25fZGF0YQorICAgeyB9CisgCisgIHByb3RlY3RlZDoKKysgIC8vIFdyaXRlIHRvIGEgbWFwIGZpbGUuCisrICB2b2lkCisrICBkb19wcmludF90b19tYXBmaWxlKE1hcGZpbGUqIG1hcGZpbGUpIGNvbnN0CisrICB7IG1hcGZpbGUtPnByaW50X291dHB1dF9kYXRhKHRoaXMsIF8oIioqIGF0dHJpYnV0ZXMiKSk7IH0KKyAgIC8vIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4KKyAgIHZvaWQKKyAgIGRvX3dyaXRlKE91dHB1dF9maWxlKik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE0LWdvbGQtYXJtLVNraXAtcGljLWNoZWNrLWZvci1SX0FSTV9SRUwzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI0MzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZWJlMjZkODU1NDUyZDA3ZTAxNTJiZDc4ZDQ5NjY0NzVkMmRlMWRlOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDUgTWFyIDIwMTUgMDc6MzA6MzEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ29sZC9hcm06IFNraXAgcGljIGNoZWNrIGZvciBSX0FSTV9SRUwzMgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ29sZC9hcm0uY2MgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2dvbGQvYXJtLmNjIGIvZ29sZC9hcm0uY2MKK2luZGV4IDZjNDcyYmIuLmZiODA0MzUgMTAwNjQ0CistLS0gYS9nb2xkL2FybS5jYworKysrIGIvZ29sZC9hcm0uY2MKK0BAIC03ODI5LDYgKzc4MjksNyBAQCBUYXJnZXRfYXJtPGJpZ19lbmRpYW4+OjpTY2FuOjpjaGVja19ub25fcGljKFJlbG9iaiogb2JqZWN0LAorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX0RUUE1PRDMyOgorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX0RUUE9GRjMyOgorICAgICBjYXNlIGVsZmNwcDo6Ul9BUk1fVExTX1RQT0ZGMzI6CisrICAgIGNhc2UgZWxmY3BwOjpSX0FSTV9SRUwzMjoKKyAgICAgICByZXR1cm47CisgCisgICAgIGRlZmF1bHQ6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1GaXgtZHluYW1pYy1saXN0LXNvLXRoYXQtc3ltYm9scy1ub3QtaW4tdGhlLWxpc3QtYXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDljMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNS1GaXgtZHluYW1pYy1saXN0LXNvLXRoYXQtc3ltYm9scy1ub3QtaW4tdGhlLWxpc3QtYXJlLnBhdGNoCkBAIC0wLDAgKzEsMTMxIEBACitGcm9tIGU5YzFiZGFkMjY5YzBjMzM1MmVlYmNjOTQ4MWVkNjUxNDQwMDFiMGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJ5IENvdXRhbnQgPGNjb3V0YW50QGdvb2dsZS5jb20+CitEYXRlOiBNb24sIDE2IEZlYiAyMDE1IDIyOjE1OjEyIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCAtLWR5bmFtaWMtbGlzdCBzbyB0aGF0IHN5bWJvbHMgbm90IGluIHRoZSBsaXN0IGFyZSBzdGlsbAorIGV4cG9ydGVkLgorCitJbiBQUiAxMzU3NywgdGhlIGNvbXBsYWludCB3YXMgdGhhdCAtQnN5bWJvbGljIHdhcyBvdmVycmlkaW5nIHRoZSBiaW5kaW5nCitiZWhhdmlvciBmb3Igc3ltYm9scyBsaXN0ZWQgaW4gdGhlIC0tZHluYW1pYy1saXN0IGJ5IHNldHRpbmcgdGhlIERUX1NZTUJPTElDCit0YWcgaW4gdGhlIGR5bmFtaWMgdGFibGUuIEluIHJlYWRpbmcgdGhlIEdudSBsZCBtYW51YWwsIEkgZGVjaWRlZCB0aGF0CistLWR5bmFtaWMtbGlzdCBzaG91bGQgYmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9mIC1Cc3ltYm9saWMsIGFuZCBtb2RpZmllZAorZ29sZCBzbyB0aGF0IC0tZHluYW1pYy1saXN0IHdvdWxkIHRyZWF0IHN5bWJvbHMgbGlzdGVkIGFzIHByZWVtcHRpYmxlLAorYW5kIGFsbCBvdGhlciBzeW1ib2xzIGFzIGludGVybmFsbHkgYm91bmQuIEkgd2FzIHdyb25nLgorCitQUiAxNjk5MiBzaG93cyB0aGF0IHdpdGggLS1keW5hbWljLWxpc3QgKGFuZCBub3QgLUJzeW1ib2xpYyksIGEgc3ltYm9sCitub3QgbGlzdGVkIGluIHRoZSBkeW5hbWljIGxpc3QgaXMgYmVpbmcgaW50ZXJuYWxseSBib3VuZCB3aXRoaW4gdGhlCitzaGFyZWQgbGlicmFyeSwgYnV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUsIHdlCitleHBvc2UgaXQgdG8gYSBDT1BZIHJlbG9jYXRpb24sIGFuZCB0aGluZ3MgZ28gcmVhbGx5IGJhZCBmcm9tIHRoZXJlLgorCisoSSBjYW4gcmVwcm9kdWNlIHRoZSBzYW1lIGZhaWx1cmUsIHNpbXBseSBieSB0dXJuaW5nIG9uIC1Cc3ltYm9saWMtZnVuY3Rpb25zCit3aXRoIHRoZSBHbnUgbGlua2VyLiBFdmVuIHRob3VnaCB0aGUgc3ltYm9sIGlzIGJvdW5kIGludGVybmFsbHksIGl0J3MKK3N0aWxsIGV4cG9ydGVkIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSwgYW5kIGlzIGV4cG9zZWQgdG8gYSBDT1BZCityZWxvY2F0aW9uLikKKworSSd2ZSBiYWNrZWQgb3V0IHBhcnQgb2YgdGhlIGZpeCBmb3IgUFIgMTM1NzcsIGFuZCAtQnN5bWJvbGljIChvcgorLUJzeW1ib2xpYy1mdW5jdGlvbnMpIGNhbiBub3cgYmUgdXNlZCB3aXRoIC0tZHluYW1pYy1saXN0LCBidXQgaWYgdGhlCit0d28gYXJlIHVzZWQgdG9nZXRoZXIsIHdlIGRvIG5vdCBzZXQgRFRfU1lNQk9MSUMgb3IgREZfU1lNQk9MSUMKKyh0aGlzIG1hdGNoZXMgR251IGxkIGJlaGF2aW9yKS4gV2Ugbm93IHRyZWF0IHN5bWJvbHMgbGlzdGVkIGluIHRoZQorZHluYW1pYyBsaXN0IGFzIHByZW1wdGlibGUsIGJ1dCB3ZSBkbyBub3QgYXV0b21hdGljYWxseSB0cmVhdCBzeW1ib2xzCitub3QgbGlzdGVkIHRoZXJlIGFzIG5vbi1wcmVtcHRpYmxlLgorCitnb2xkLworCVBSIGdvbGQvMTM1NzcKKwlQUiBnb2xkLzE2OTkyCisJKiBsYXlvdXQuY2MgKExheW91dDo6ZmluaXNoX2R5bmFtaWNfc2VjdGlvbik6IERvbid0IHNldCBEVF9TWU1CT0xJQyBvcgorCURGX1NZTUJPTElDIGlmIC0tZHluYW1pYy1saXN0IG9wdGlvbiBpcyB1c2VkLgorCSogb3B0aW9ucy5jYyAoR2VuZXJhbF9vcHRpb25zOjpmaW5hbGl6ZSk6IC0tZHluYW1pYy1saXN0IGlzIG5vdAorCW11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIC1Cc3ltYm9saWMuCisJKiBzeW10YWIuaCAoU3ltYm9sOjppc19wcmVlbXB0aWJsZSk6IERvbid0IGV4Y2x1ZGUgZHluYW1pYyBzeW1ib2xzIG5vdAorCWxpc3RlZCBpbiAtLWR5bmFtaWMtbGlzdC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoZHluYW1pY19saXN0X2xpYjIuc28pOiBBZGQKKwktQnN5bWJvbGljLWZ1bmN0aW9ucy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgZ29sZC9DaGFuZ2VMb2cgICAgICAgICAgICAgfCAxNCArKysrKysrKysrKysrKworIGdvbGQvbGF5b3V0LmNjICAgICAgICAgICAgIHwgIDMgKystCisgZ29sZC9vcHRpb25zLmNjICAgICAgICAgICAgfCAgNyAtLS0tLS0tCisgZ29sZC9zeW10YWIuaCAgICAgICAgICAgICAgfCAgNiArKy0tLS0KKyBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSB8ICAyICstCisgZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gfCAgMiArLQorIDYgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nb2xkL2xheW91dC5jYyBiL2dvbGQvbGF5b3V0LmNjCitpbmRleCBiY2RhYWM4Li43ODM2NjQwIDEwMDY0NAorLS0tIGEvZ29sZC9sYXlvdXQuY2MKKysrKyBiL2dvbGQvbGF5b3V0LmNjCitAQCAtNDg3Myw3ICs0ODczLDggQEAgTGF5b3V0OjpmaW5pc2hfZHluYW1pY19zZWN0aW9uKGNvbnN0IElucHV0X29iamVjdHMqIGlucHV0X29iamVjdHMsCisgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfU1RBVElDX1RMUzsKKyAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkub3JpZ2luKCkpCisgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfT1JJR0lOOworLSAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKSkKKysgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuQnN5bWJvbGljKCkKKysgICAgICAmJiAhcGFyYW1ldGVycy0+b3B0aW9ucygpLmhhdmVfZHluYW1pY19saXN0KCkpCisgICAgIHsKKyAgICAgICBmbGFncyB8PSBlbGZjcHA6OkRGX1NZTUJPTElDOworICAgICAgIC8vIEFkZCBEVF9TWU1CT0xJQyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxvYWRlcnMuCitkaWZmIC0tZ2l0IGEvZ29sZC9vcHRpb25zLmNjIGIvZ29sZC9vcHRpb25zLmNjCitpbmRleCA3ZWI4ZjI3Li43ZjFmNjllIDEwMDY0NAorLS0tIGEvZ29sZC9vcHRpb25zLmNjCisrKysgYi9nb2xkL29wdGlvbnMuY2MKK0BAIC0xMjAwLDEzICsxMjAwLDYgQEAgR2VuZXJhbF9vcHRpb25zOjpmaW5hbGl6ZSgpCisgICAvLyBpbiB0aGUgcGF0aCwgYXMgYXBwcm9wcmlhdGUuCisgICB0aGlzLT5hZGRfc3lzcm9vdCgpOworIAorLSAgLy8gLS1keW5hbWljLWxpc3Qgb3ZlcnJpZGVzIC1Cc3ltYm9saWMgYW5kIC1Cc3ltYm9saWMtZnVuY3Rpb25zLgorLSAgaWYgKHRoaXMtPmhhdmVfZHluYW1pY19saXN0KCkpCistICAgIHsKKy0gICAgICB0aGlzLT5zZXRfQnN5bWJvbGljKGZhbHNlKTsKKy0gICAgICB0aGlzLT5zZXRfQnN5bWJvbGljX2Z1bmN0aW9ucyhmYWxzZSk7CistICAgIH0KKy0KKyAgIC8vIE5vdyB0aGF0IHdlJ3ZlIG5vcm1hbGl6ZWQgdGhlIG9wdGlvbnMsIGNoZWNrIGZvciBjb250cmFkaWN0b3J5IG9uZXMuCisgICBpZiAodGhpcy0+c2hhcmVkKCkgJiYgdGhpcy0+aXNfc3RhdGljKCkpCisgICAgIGdvbGRfZmF0YWwoXygiLXNoYXJlZCBhbmQgLXN0YXRpYyBhcmUgaW5jb21wYXRpYmxlIikpOworZGlmZiAtLWdpdCBhL2dvbGQvc3ltdGFiLmggYi9nb2xkL3N5bXRhYi5oCitpbmRleCBhYTBjYjY4Li45NDEzMzYwIDEwMDY0NAorLS0tIGEvZ29sZC9zeW10YWIuaAorKysrIGIvZ29sZC9zeW10YWIuaAorQEAgLTYwNCwxMCArNjA0LDggQEAgY2xhc3MgU3ltYm9sCisgICAgIGlmIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuaW5fZHluYW1pY19saXN0KHRoaXMtPm5hbWUoKSkpCisgICAgICAgcmV0dXJuIHRydWU7CisgCistICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYyBvciBwcm92aWRlZCBhIC0tZHluYW1pYy1saXN0IHNjcmlwdCwKKy0gICAgLy8gdGhlbiBub3RoaW5nIChlbHNlKSBpcyBwcmVlbXB0aWJsZS4KKy0gICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKQorLSAgICAgICAgfHwgcGFyYW1ldGVycy0+b3B0aW9ucygpLmhhdmVfZHluYW1pY19saXN0KCkpCisrICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYywgdGhlbiBub3RoaW5nIChlbHNlKSBpcyBwcmVlbXB0aWJsZS4KKysgICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKSkKKyAgICAgICByZXR1cm4gZmFsc2U7CisgCisgICAgIC8vIElmIHRoZSB1c2VyIHVzZWQgLUJzeW1ib2xpYy1mdW5jdGlvbnMsIHRoZW4gZnVuY3Rpb25zIGFyZSBub3QKK2RpZmYgLS1naXQgYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitpbmRleCBmNzY3YzIxLi43YjczZjlkIDEwMDY0NAorLS0tIGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrKyBiL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitAQCAtMTUxOCw3ICsxNTE4LDcgQEAgZHluYW1pY19saXN0X2xpYjEubzogZHluYW1pY19saXN0X2xpYjEuY2MKKyAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorIGR5bmFtaWNfbGlzdF9saWIyLnNvOiBnY2N0ZXN0ZGlyL2xkIGR5bmFtaWNfbGlzdF9saWIyLm8gJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQKKy0JJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKysJJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisgZHluYW1pY19saXN0X2xpYjIubzogZHluYW1pY19saXN0X2xpYjIuY2MKKyAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorZGlmZiAtLWdpdCBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK2luZGV4IDIxN2U0NzIuLmI0YWUzZmQgMTAwNjQ0CistLS0gYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorKysrIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KK0BAIC01MzE5LDcgKzUzMTksNyBAQCB1bmluc3RhbGwtYW06CisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUBkeW5hbWljX2xpc3RfbGliMi5zbzogZ2NjdGVzdGRpci9sZCBkeW5hbWljX2xpc3RfbGliMi5vICQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50CistQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisrQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYTElOSykgLUJnY2N0ZXN0ZGlyLyAtc2hhcmVkIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQGR5bmFtaWNfbGlzdF9saWIyLm86IGR5bmFtaWNfbGlzdF9saWIyLmNjCisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVACSQoQ1hYQ09NUElMRSkgLWMgLWZwaWMgLW8gJEAgJDwKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYWRkLXRodW5kZXJ4LXN1cHBvcnQtZm9yLWdhcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjY4NzVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2FkZC10aHVuZGVyeC1zdXBwb3J0LWZvci1nYXMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkIHRodW5kZXJ4IHN1cHBvcnQgdG8gZ2FzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMTQtMTAvbXNnMDAxNzAuaHRtbF0KKworU2lnbmVkLW9mZi1ieTogSmFnYWRlZXNoIEtyaXNobmFuamFuYXBwYSA8amtyaXNobmFuamFuYXBwYUBtdmlzdGEuY29tPgorCitBdXRob3I6IEFuZHJldyBQaW5za2kgPGFwaW5za2lAY2F2aXVtLmNvbT4KK0RhdGU6IE1vbiwgMjAgT2N0IDIwMTQgMTE6NDI6NTggLTA3MDAKKworICAgIFRoaXMgcGF0Y2ggYWRkcyAtbWNwdT10aHVuZGVyeCBzdXBwb3J0IHRvIGdhcy4KKworZGlmZiAtTmF1cnAgZ2l0X29yZy9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYyBnaXQvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMKKy0tLSBnaXRfb3JnL2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCTIwMTUtMDktMDcgMDI6MTM6NTEuOTg4OTczNTIzIC0wNzAwCisrKysgZ2l0L2dhcy9jb25maWcvdGMtYWFyY2g2NC5jCTIwMTUtMDktMDcgMDI6MTU6MjEuNzA1OTgxNTQwIC0wNzAwCitAQCAtNzIwNiw2ICs3MjA2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhYXJjaDY0X2NwdV9vcHRpb25fdAorIAkJCQkgQUFSQ0g2NF9GRUFUVVJFX0NSQyksICJDb3J0ZXgtQTU3In0sCisgICB7ImNvcnRleC1hNzIiLCBBQVJDSDY0X0ZFQVRVUkUgKEFBUkNINjRfQVJDSF9WOCwKKyAJCQkJICBBQVJDSDY0X0ZFQVRVUkVfQ1JDKSwgIkNvcnRleC1BNzIifSwKKysgIHsidGh1bmRlcngiLAkJQUFSQ0g2NF9BUkNIX1Y4LCAiQ2F2aXVtIFRodW5kZXJYIn0sCQkJCSAgCisgICB7ImV4eW5vcy1tMSIsIEFBUkNINjRfRkVBVFVSRSAoQUFSQ0g2NF9BUkNIX1Y4LAorIAkJCQkgQUFSQ0g2NF9GRUFUVVJFX0NSQyB8IEFBUkNINjRfRkVBVFVSRV9DUllQVE8pLAorIAkJCQkgIlNhbXN1bmcgRXh5bm9zIE0xIn0sCitkaWZmIC1OYXVycCBnaXRfb3JnL2dhcy9kb2MvYy1hYXJjaDY0LnRleGkgZ2l0L2dhcy9kb2MvYy1hYXJjaDY0LnRleGkKKy0tLSBnaXRfb3JnL2dhcy9kb2MvYy1hYXJjaDY0LnRleGkJMjAxNS0wOS0wNyAwMjoxMzo1MS45Njk5NzM1MjIgLTA3MDAKKysrKyBnaXQvZ2FzL2RvYy9jLWFhcmNoNjQudGV4aQkyMDE1LTA5LTA3IDAyOjE2OjAzLjM2NDk4NTI2MiAtMDcwMAorQEAgLTU4LDYgKzU4LDcgQEAgb24gdGhlIHRhcmdldCBwcm9jZXNzb3IuICBUaGUgZm9sbG93aW5nCisgQGNvZGV7Y29ydGV4LWE1M30sCisgQGNvZGV7Y29ydGV4LWE1N30sCisgQGNvZGV7Y29ydGV4LWE3Mn0sCisrQGNvZGV7dGh1bmRlcnh9LAorIEBjb2Rle2V4eW5vcy1tMX0sCisgQGNvZGV7eGdlbmUxfSwKKyBhbmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2JpbnV0aWxzLW9jdGVvbjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwOGMwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9iaW51dGlscy1vY3Rlb24zLnBhdGNoCkBAIC0wLDAgKzEsMjcyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2h0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0L2dpdHdlYi5jZ2k/cD1iaW51dGlscy1nZGIuZ2l0O2E9Y29tbWl0O2g9MmM2Mjk4NTY1OWRhMjFhM2ZlMTYwNjJkMjExYTcxNThmNzlhZDJlOQorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IGdpdC9iZmQvYXJjaHVyZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9hcmNodXJlcy5jCisrKysgZ2l0L2JmZC9hcmNodXJlcy5jCitAQCAtMTc5LDYgKzE3OSw3IEBAIERFU0NSSVBUSU9OCisgLiNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24JCTY1MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbnAJCTY2MDEKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIJCTY1MDIKKysuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMJCTY1MDMKKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgeyogZGVjaW1hbCAnWExSJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgeyogZGVjaW1hbCAnWExQJyAgKn0KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKK0luZGV4OiBnaXQvYmZkL2JmZC1pbjIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9iZmQtaW4yLmgKKysrKyBnaXQvYmZkL2JmZC1pbjIuaAorQEAgLTE5NjksNiArMTk2OSw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24gICAgICAgICAgIDY1MDEKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCAgICAgICAgICA2NjAxCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjIgICAgICAgICAgNjUwMgorKyNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb24zICAgICAgICAgIDY1MDMKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICAvKiBkZWNpbWFsICdYTFInICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHAgICAgICAgICAgICAgIDg4NzY4MCAgIC8qIGRlY2ltYWwgJ1hMUCcgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzIgICAgICAgICAgICAgMzIKK0luZGV4OiBnaXQvYmZkL2NwdS1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvY3B1LW1pcHMuYworKysrIGdpdC9iZmQvY3B1LW1pcHMuYworQEAgLTEwMiw2ICsxMDIsNyBAQCBlbnVtCisgICBJX21pcHNvY3Rlb24sCisgICBJX21pcHNvY3Rlb25wLAorICAgSV9taXBzb2N0ZW9uMiwKKysgIElfbWlwc29jdGVvbjMsCisgICBJX3hsciwKKyAgIElfbWljcm9taXBzLAorICAgSV94bHAKK0BAIC0xNTMsNiArMTU0LDcgQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBhcmNoX2luZgorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbiwibWlwczpvY3Rlb24iLCAgRkFMU0UsIE5OKElfbWlwc29jdGVvbikpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbnAsIm1pcHM6b2N0ZW9uKyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9ucCkpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjIsIm1pcHM6b2N0ZW9uMiIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMikpLAorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjMsIm1pcHM6b2N0ZW9uMyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMykpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hsciwgIm1pcHM6eGxyIiwgICAgICAgRkFMU0UsIE5OKElfeGxyKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsTk4oSV9taWNyb21pcHMpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc194bHAsICJtaXBzOnhscCIsICAgICAgRkFMU0UsIDApCitJbmRleDogZ2l0L2JmZC9lbGZ4eC1taXBzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9iZmQvZWxmeHgtbWlwcy5jCisrKysgZ2l0L2JmZC9lbGZ4eC1taXBzLmMKK0BAIC02NjA0LDYgKzY2MDQsOSBAQCBfYmZkX2VsZl9taXBzX21hY2ggKGZsYWd3b3JkIGZsYWdzKQorICAgICBjYXNlIEVfTUlQU19NQUNIX0xTM0E6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfbG9vbmdzb25fM2E7CisgCisrICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMzoKKysgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc19vY3Rlb24zOworKworICAgICBjYXNlIEVfTUlQU19NQUNIX09DVEVPTjI6CisgICAgICAgcmV0dXJuIGJmZF9tYWNoX21pcHNfb2N0ZW9uMjsKKyAKK0BAIC0xMTg3OCw2ICsxMTg4MSwxMCBAQCBtaXBzX3NldF9pc2FfZmxhZ3MgKGJmZCAqYWJmZCkKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIGJmZF9tYWNoX21pcHNfb2N0ZW9uMzoKKysgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NFIyIHwgRV9NSVBTX01BQ0hfT0NURU9OMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSBiZmRfbWFjaF9taXBzX3hscjoKKyAgICAgICB2YWwgPSBFX01JUFNfQVJDSF82NCB8IEVfTUlQU19NQUNIX1hMUjsKKyAgICAgICBicmVhazsKK0BAIC0xNDc3Myw2ICsxNDc4MCw3IEBAIHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX21hY2hfZXh0ZW5zaW9uIG1pcHNfbWFjaF9leHRlbnNpb25zW10gPQorIHsKKyAgIC8qIE1JUFM2NHIyIGV4dGVuc2lvbnMuICAqLworKyAgeyBiZmRfbWFjaF9taXBzX29jdGVvbjMsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbjIsIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCB9LAorICAgeyBiZmRfbWFjaF9taXBzX29jdGVvbnAsIGJmZF9tYWNoX21pcHNfb2N0ZW9uIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorSW5kZXg6IGdpdC9nYXMvY29uZmlnL3RjLW1pcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2dhcy9jb25maWcvdGMtbWlwcy5jCisrKysgZ2l0L2dhcy9jb25maWcvdGMtbWlwcy5jCitAQCAtMzA2LDcgKzMwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9hc2VfZXhwbGljaXQ7CisgdW5zaWduZWQgbG9uZyBtaXBzX2dwcm1hc2s7CisgdW5zaWduZWQgbG9uZyBtaXBzX2Nwcm1hc2tbNF07CisgCistLyogVHJ1ZSBpZiBhbnkgTUlQUzE2IGNvZGUgd2FzIHByb2R1Y2VkLiAgKi8KKysvKiAyVHJ1ZSBpZiBhbnkgTUlQUzE2IGNvZGUgd2FzIHByb2R1Y2VkLiAgKi8KKyBzdGF0aWMgaW50IGZpbGVfYXNlX21pcHMxNjsKKyAKKyAjZGVmaW5lIElTQV9TVVBQT1JUU19NSVBTMTZFIChtaXBzX29wdHMuaXNhID09IElTQV9NSVBTMzIJCVwKK0BAIC01MTAsNyArNTEwLDggQEAgc3RhdGljIGludCBtaXBzXzMyYml0bW9kZSA9IDA7CisgI2RlZmluZSBDUFVfSEFTX1JPUihDUFUpCUNQVV9IQVNfRFJPUiAoQ1BVKQorIAorIC8qIFRydWUgaWYgQ1BVIGlzIGluIHRoZSBPY3Rlb24gZmFtaWx5ICovCistI2RlZmluZSBDUFVfSVNfT0NURU9OKENQVSkgKChDUFUpID09IENQVV9PQ1RFT04gfHwgKENQVSkgPT0gQ1BVX09DVEVPTlAgfHwgKENQVSkgPT0gQ1BVX09DVEVPTjIpCisrI2RlZmluZSBDUFVfSVNfT0NURU9OKENQVSkgKChDUFUpID09IENQVV9PQ1RFT04gfHwgKENQVSkgPT0gQ1BVX09DVEVPTlAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChDUFUpID09IENQVV9PQ1RFT04yIHx8IChDUFUpID09IENQVV9PQ1RFT04zKQorIAorIC8qIFRydWUgaWYgQ1BVIGhhcyBzZXEvc25lIGFuZCBzZXFpL3NuZWkgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAjZGVmaW5lIENQVV9IQVNfU0VRKENQVSkJKENQVV9JU19PQ1RFT04gKENQVSkpCitAQCAtMTg2NzcsNiArMTg2NzgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfY3B1X2luZm8gbWlwc19jCisgICB7ICJvY3Rlb24iLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTiB9LAorICAgeyAib2N0ZW9uKyIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OUCB9LAorICAgeyAib2N0ZW9uMiIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OMiB9LAorKyAgeyAib2N0ZW9uMyIsICAgICAgICAwLCBBU0VfVklSVCB8IEFTRV9WSVJUNjQsIElTQV9NSVBTNjRSMiwgQ1BVX09DVEVPTjMgfSwKKyAKKyAgIC8qIFJNSSBYbHIgKi8KKyAgIHsgInhsciIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NCwgICBDUFVfWExSIH0sCitJbmRleDogZ2l0L2dhcy9kb2MvYy1taXBzLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvZG9jL2MtbWlwcy50ZXhpCisrKysgZ2l0L2dhcy9kb2MvYy1taXBzLnRleGkKK0BAIC0zODIsNiArMzgyLDcgQEAgbG9vbmdzb24zYSwKKyBvY3Rlb24sCisgb2N0ZW9uKywKKyBvY3Rlb24yLAorK29jdGVvbjMsCisgeGxyLAorIHhscAorIEBlbmQgcXVvdGF0aW9uCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL21pcHMuZXhwCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKK0BAIC0xMTAyLDYgKzExMDIsNyBAQCBpZiB7IFtpc3RhcmdldCBtaXBzKi0qLXZ4d29ya3MqXSB9IHsKKyAgICAgcnVuX2xpc3RfdGVzdF9hcmNoZXMgIm9jdGVvbi1pbGwiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb25dCisgICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJvY3Rlb24tcHJlZiIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbl0KKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm9jdGVvbjIiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBvY3Rlb24yXQorKyAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAib2N0ZW9uMyIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbjNdCisgCisgICAgIHJ1bl9kdW1wX3Rlc3QgInNtYXJ0bWlwcyIKKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm1pcHMzMi1kc3AiCVttaXBzX2FyY2hfbGlzdF9tYXRjaGluZyBtaXBzMzJyMiBcCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5kCitAQCAtMCwwICsxLDIwIEBACisrI29iamR1bXA6IC1kIC1yIC0tc2hvdy1yYXctaW5zbgorKyNuYW1lOiBNSVBTIG9jdGVvbjMgaW5zdHJ1Y3Rpb25zCisrCisrLio6ICtmaWxlIGZvcm1hdCAuKm1pcHMuKgorKworK0Rpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLnRleHQ6CisrCisrWzAtOWEtZl0rIDxmb28+OgorKy4qOiAgICA3MWVjMDAwOCAgICAgICAgbXRtMCAgICB0Myx0MAorKy4qOiAgICA3MWE0MDAwOCAgICAgICAgbXRtMCAgICB0MSxhMAorKy4qOiAgICA3MDgzMDAwYyAgICAgICAgbXRtMSAgICBhMCx2MQorKy4qOiAgICA3MGUxMDAwYyAgICAgICAgbXRtMSAgICBhMyxhdAorKy4qOiAgICA3MDIyMDAwZCAgICAgICAgbXRtMiAgICBhdCx2MAorKy4qOiAgICA3MDgzMDAwYyAgICAgICAgbXRtMSAgICBhMCx2MQorKy4qOiAgICA3MGEyMDAwOSAgICAgICAgbXRwMCAgICBhMSx2MAorKy4qOiAgICA3MGM0MDAwOSAgICAgICAgbXRwMCAgICBhMixhMAorKy4qOiAgICA3MDgzMDAwYSAgICAgICAgbXRwMSAgICBhMCx2MQorKy4qOiAgICA3MGUxMDAwYSAgICAgICAgbXRwMSAgICBhMyxhdAorKy4qOiAgICA3MDIyMDAwYiAgICAgICAgbXRwMiAgICBhdCx2MAorKy4qOiAgICA3MDgzMDAwYSAgICAgICAgbXRwMSAgICBhMCx2MQorSW5kZXg6IGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdpdC9nYXMvdGVzdHN1aXRlL2dhcy9taXBzL29jdGVvbjMucworQEAgLTAsMCArMSwyMiBAQAorKysgICAgICAgLnRleHQKKysgICAgICAgLnNldCBub3Jlb3JkZXIKKysgICAgICAgLnNldCBub2F0CisrCisrZm9vOgorKyAgICAgICAgbXRtMCAkMTUsJDEyCisrICAgICAgICBtdG0wICQxMywkNAorKworKyAgICAgICAgbXRtMSAkNCwkMworKyAgICAgICAgbXRtMSAkNywkMQorKworKyAgICAgICAgbXRtMiAkMSwkMgorKyAgICAgICAgbXRtMSAkNCwkMworKworKyAgICAgICAgbXRwMCAkNSwkMgorKyAgICAgICAgbXRwMCAkNiwkNAorKworKyAgICAgICAgbXRwMSAkNCwkMworKyAgICAgICAgbXRwMSAkNywkMQorKworKyAgICAgICAgbXRwMiAkMSwkMgorKyAgICAgICAgbXRwMSAkNCwkMworSW5kZXg6IGdpdC9pbmNsdWRlL29wY29kZS9taXBzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9pbmNsdWRlL29wY29kZS9taXBzLmgKKysrKyBnaXQvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCitAQCAtMTE5Niw2ICsxMTk2LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZQorICNkZWZpbmUgSU5TTl9PQ1RFT04JCSAgMHgwMDAwMDgwMAorICNkZWZpbmUgSU5TTl9PQ1RFT05QCQkgIDB4MDAwMDAyMDAKKyAjZGVmaW5lIElOU05fT0NURU9OMgkJICAweDAwMDAwMTAwCisrI2RlZmluZSBJTlNOX09DVEVPTjMJCSAgMHgwMDAwMDA0MAorIAorIC8qIE1JUFMgUjU5MDAgaW5zdHJ1Y3Rpb24gKi8KKyAjZGVmaW5lIElOU05fNTkwMCAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorQEAgLTEzMjUsNiArMTMyNiw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGUKKyAjZGVmaW5lIENQVV9PQ1RFT04JNjUwMQorICNkZWZpbmUgQ1BVX09DVEVPTlAJNjYwMQorICNkZWZpbmUgQ1BVX09DVEVPTjIJNjUwMgorKyNkZWZpbmUgQ1BVX09DVEVPTjMJNjUwMworICNkZWZpbmUgQ1BVX1hMUiAgICAgCTg4NzY4MiAgIAkvKiBkZWNpbWFsICdYTFInICAgKi8KKyAjZGVmaW5lIENQVV9YTFAgICAgICAgICA4ODc2ODAgICAgICAvKiBkZWNpbWFsICdYTFAnICAgKi8KKyAKK0BAIC0xMzkxLDYgKzEzOTMsOSBAQCBjcHVfaXNfbWVtYmVyIChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWFzCisgICAgIGNhc2UgQ1BVX09DVEVPTjI6CisgICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9PQ1RFT04yKSAhPSAwOworIAorKyAgICBjYXNlIENQVV9PQ1RFT04zOgorKyAgICAgIHJldHVybiAobWFzayAmIElOU05fT0NURU9OMykgIT0gMDsKKysKKyAgICAgY2FzZSBDUFVfWExSOgorICAgICAgIHJldHVybiAobWFzayAmIElOU05fWExSKSAhPSAwOworIAorSW5kZXg6IGdpdC9vcGNvZGVzL21pcHMtZGlzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9vcGNvZGVzL21pcHMtZGlzLmMKKysrKyBnaXQvb3Bjb2Rlcy9taXBzLWRpcy5jCitAQCAtNjQ5LDYgKzY0OSwxMSBAQCBjb25zdCBzdHJ1Y3QgbWlwc19hcmNoX2Nob2ljZSBtaXBzX2FyY2hfCisgICAgIElTQV9NSVBTNjRSMiB8IElOU05fT0NURU9OMiwgMCwgbWlwc19jcDBfbmFtZXNfbnVtZXJpYywKKyAgICAgTlVMTCwgMCwgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKyAKKysgIHsgIm9jdGVvbjMiLCAgIDEsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMywgQ1BVX09DVEVPTjMsCisrICAgIElTQV9NSVBTNjRSMiB8IElOU05fT0NURU9OMywgQVNFX1ZJUlQgfCBBU0VfVklSVDY0LAorKyAgICBtaXBzX2NwMF9uYW1lc19udW1lcmljLAorKyAgICBOVUxMLCAwLCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisrCisgICB7ICJ4bHIiLCAxLCBiZmRfbWFjaF9taXBzX3hsciwgQ1BVX1hMUiwKKyAgICAgSVNBX01JUFM2NCB8IElOU05fWExSLCAwLAorICAgICBtaXBzX2NwMF9uYW1lc194bHIsCitJbmRleDogZ2l0L29wY29kZXMvbWlwcy1vcGMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL29wY29kZXMvbWlwcy1vcGMuYworKysrIGdpdC9vcGNvZGVzL21pcHMtb3BjLmMKK0BAIC0zMTYsOSArMzE2LDEwIEBAIGRlY29kZV9taXBzX29wZXJhbmQgKGNvbnN0IGNoYXIgKnApCisgI2RlZmluZSBONQkoSU5TTl81NDAwIHwgSU5TTl81NTAwKQorICNkZWZpbmUgTjU0CUlOU05fNTQwMAorICNkZWZpbmUgTjU1CUlOU05fNTUwMAorLSNkZWZpbmUgSU9DVAkoSU5TTl9PQ1RFT04gfCBJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCistI2RlZmluZSBJT0NUUAkoSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yKQorLSNkZWZpbmUgSU9DVDIJSU5TTl9PQ1RFT04yCisrI2RlZmluZSBJT0NUCShJTlNOX09DVEVPTiB8IElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKKysjZGVmaW5lIElPQ1RQCShJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIgfCBJTlNOX09DVEVPTjMpCisrI2RlZmluZSBJT0NUMgkoSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQorKyNkZWZpbmUgSU9DVDMgIElOU05fT0NURU9OMworICNkZWZpbmUgWExSCUlOU05fWExSCisgI2RlZmluZSBYTFAJSU5TTl9YTFAKKyAjZGVmaW5lIElWSVJUCUFTRV9WSVJUCitAQCAtMTUwNSwxMSArMTUwNiwxNyBAQCBjb25zdCBzdHJ1Y3QgbWlwc19vcGNvZGUgbWlwc19idWlsdGluX29wCisgeyJtdGxoeCIsCQkicyIsCQkweDAwMDAwMDUzLCAweGZjMWZmZmZmLAlSRF8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKyB7Im10Y3IiLAkJInQscyIsCQkweDcwMDAwMDE5LCAweGZjMDBmZmZmLCBSRF8xLAkJCTAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJtdG0wIiwJCSJzIiwJCTB4NzAwMDAwMDgsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0wIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMDgsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdG0xIiwJCSJzIiwJCTB4NzAwMDAwMGMsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0xIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGMsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdG0yIiwJCSJzIiwJCTB4NzAwMDAwMGQsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdG0yIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGQsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAwIiwJCSJzIiwJCTB4NzAwMDAwMDksIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAwIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMDksIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAxIiwJCSJzIiwJCTB4NzAwMDAwMGEsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAxIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGEsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHAyIiwJCSJzIiwJCTB4NzAwMDAwMGIsIDB4ZmMxZmZmZmYsIFJEXzEsCQkJMCwJCUlPQ1QsCQkwLAkwIH0sCisreyJtdHAyIiwgICAgICAgICAgICAgICAgInMsdCIsICAgICAgICAgIDB4NzAwMDAwMGIsIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBJT0NUMywgICAgICAgICAgMCwgICAgICAwIH0sCisgeyJtdHNhIiwJCSJzIiwJCTB4MDAwMDAwMjksIDB4ZmMxZmZmZmYsCVJEXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRzYWIiLAkJInMsaiIsCQkweDA0MTgwMDAwLCAweGZjMWYwMDAwLAlSRF8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im10c2FoIiwJCSJzLGoiLAkJMHgwNDE5MDAwMCwgMHhmYzFmMDAwMCwJUkRfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQyNjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzXzIuMjUuMS5iYgpAQCAtMCwwICsxLDM5IEBACityZXF1aXJlIGJpbnV0aWxzLmluYworcmVxdWlyZSBiaW51dGlscy0ke1BWfS5pbmMKKworREVQRU5EUyArPSAiZmxleCBiaXNvbiB6bGliIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PS8gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliYmZkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1lbmFibGUtdGFyZ2V0cz1hbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS02NC1iaXQtYmZkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJpYmVydHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmJmZCIKKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIEluc3RhbGwgdGhlIGxpYmliZXJ0eSBoZWFkZXIKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2Fuc2lkZWNsLmggJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvbGliaWJlcnR5LmggJHtEfSR7aW5jbHVkZWRpcn0KKworCSMgV2Ugb25seSB3YW50IGxpYmliZXJ0eSwgbGliYmZkIGFuZCBsaWJvcGNvZGVzCisJcm0gLXJmICR7RH0ke2JpbmRpcn0KKwlybSAtcmYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9CisJcm0gLXJmICR7RH0ke3ByZWZpeH0vbGliL2xkc2NyaXB0cworCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL2luZm8KKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9sb2NhbGUKKwlybSAtcmYgJHtEfSR7cHJlZml4fS9zaGFyZS9tYW4KKwlybWRpciAke0R9JHtwcmVmaXh9L3NoYXJlIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfS9nY2MtbGliIHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfTY0L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9IHx8IDoKKwlybWRpciAke0R9LyR7bGliZGlyfTY0IHx8IDoKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0M2E1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAzYTE1ZjdjOWFjZTZjMDI5NGVkYzMxM2ExODQ4Y2FmY2MzMWIyYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IEFwciAyMDE1IDAwOjM4OjMyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHNyYy9sb2NhbC5tazogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorcm0gLWYgc3JjL3lhY2Mgc3JjL3lhY2MudG1wCitlY2hvICcjISAvYmluL3NoJyA+c3JjL3lhY2MudG1wCisvYmluL2Jhc2g6IHNyYy95YWNjLnRtcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorTWFrZWZpbGU6NjY3MDogcmVjaXBlIGZvciB0YXJnZXQgJ3NyYy95YWNjJyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2xvY2FsLm1rIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvbG9jYWwubWsgYi9zcmMvbG9jYWwubWsKK2luZGV4IDU3M2FkMDAuLjI4YmZhZTQgMTAwNjQ0CistLS0gYS9zcmMvbG9jYWwubWsKKysrKyBiL3NyYy9sb2NhbC5taworQEAgLTExOSw2ICsxMTksNyBAQCBNT1NUTFlDTEVBTkZJTEVTICs9IHNyYy95YWNjCisgCisgc3JjL3lhY2M6CisgCSQoQU1fVl9HRU4pcm0gLWYgJEAgJEAudG1wCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfYXQpZWNobyAnIyEgL2Jpbi9zaCcgPiRALnRtcAorIAkkKEFNX1ZfYXQpZWNobyAiZXhlYyAnJChiaW5kaXIpL2Jpc29uJyAteSAiJyIkJEAiJyA+PiRALnRtcAorIAkkKEFNX1ZfYXQpY2htb2QgYSt4ICRALnRtcAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vYmlzb24tMi4zX200LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OGNlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vYmlzb24tMi4zX200LnBhdGNoCkBAIC0wLDAgKzEsNTkxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzLXByaS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgaW50dHlwZXMtcHJpLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrIyBEZWZpbmUgUFJJX01BQ1JPU19CUk9LRU4gaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB0aGUgUFJJKgorKyMgbWFjcm9zIHRvIG5vbi1zdHJpbmcgdmFsdWVzLiAgVGhpcyBpcyB0aGUgY2FzZSBvbiBBSVggNC4zLjMuCisrCisrQUNfREVGVU4oW2d0X0lOVFRZUEVTX1BSSV0sCisrWworKyAgQUNfUkVRVUlSRShbZ3RfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKKysgICAgICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuLAorKyAgICAgIFsKKysgICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjaWZkZWYgUFJJZDMyCisrY2hhciAqcCA9IFBSSWQzMjsKKysjZW5kaWYKKytdLCBbXSwgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj1ubywgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbj15ZXMpCisrICAgICAgXSkKKysgIGZpCisrICBpZiB0ZXN0ICIkZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiIgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKFBSSV9NQUNST1NfQlJPS0VOLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2xjbWVzc2FnZS5tNAorQEAgLTAsMCArMSwzMiBAQAorKyMgbGNtZXNzYWdlLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LgorKworKyMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KKysKKytBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgTENfTUVTU0FHRVNdLCBhbV9jdl92YWxfTENfTUVTU0FHRVMsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorKyAgICAgICBhbV9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBhbV9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKKysgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQ19NRVNTQUdFUywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC91aW50bWF4X3QubTQKK0BAIC0wLDAgKzEsMjkgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNiAoZ2V0dGV4dC0wLjExKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byBgdW5zaWduZWQgbG9uZycgb3IgYHVuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIDxpbnR0eXBlcy5oPiBkb2VzIG5vdCBleGlzdC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VSU5UTUFYX1RdLAorK1sKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSkKKysgIEFDX1JFUVVJUkUoW2ptX0FDX0hFQURFUl9TVERJTlRfSF0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCisrICAgIEFDX1JFUVVJUkUoW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSkKKysgICAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXMgXAorKyAgICAgICYmIGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycgXAorKyAgICAgIHx8IGFjX3R5cGU9J3Vuc2lnbmVkIGxvbmcnCisrICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAorKyAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZworKyAgIGlmIDxpbnR0eXBlcy5oPiBhbmQgPHN0ZGludC5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9nbGliYzIxLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBnbGliYzIxLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4xLjMsIGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRlc3QgZm9yIHRoZSBHTlUgQyBMaWJyYXJ5LCB2ZXJzaW9uIDIuMSBvciBuZXdlci4KKysjIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtqbV9HTElCQzIxXSwKKysgIFsKKysgICAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgMi4xIG9yIG5ld2VyLAorKyAgICAgIGFjX2N2X2dudV9saWJyYXJ5XzJfMSwKKysgICAgICBbQUNfRUdSRVBfQ1BQKFtMdWNreSBHTlUgdXNlcl0sCisrCVsKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19HTlVfTElCUkFSWV9fCisrICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQorKyAgTHVja3kgR05VIHVzZXIKKysgI2VuZGlmCisrI2VuZGlmCisrCV0sCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXMsCisrCWFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubykKKysgICAgICBdCisrICAgICkKKysgICAgQUNfU1VCU1QoR0xJQkMyMSkKKysgICAgR0xJQkMyMT0iJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIKKysgIF0KKyspCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvc3RkaW50X2gubTQKK0BAIC0wLDAgKzEsMjggQEAKKysjIHN0ZGludF9oLm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKytbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzX2gubTQKK0BAIC0wLDAgKzEsMjggQEAKKysjIGludHR5cGVzX2gubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKKysgICAgam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgsIDEsCisrW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L3Vsb25nbG9uZy5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4wLjMyLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMTsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvY29kZXNldC5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgY29kZXNldC5tNCBzZXJpYWwgQU0xIChnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtBTV9MQU5HSU5GT19DT0RFU0VUXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUXSwgYW1fY3ZfbGFuZ2luZm9fY29kZXNldCwKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGFuZ2luZm8uaD5dLAorKyAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpO10sCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMsCisrICAgICAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD1ubykKKysgICAgXSkKKysgIGlmIHRlc3QgJGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTEFOR0lORk9fQ09ERVNFVCwgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnRkaXYwLm00CitAQCAtMCwwICsxLDcyIEBACisrIyBpbnRkaXYwLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtndF9JTlRESVYwXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKKysgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUsCisrICAgIFsKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHNpZ25hbC5oPgorKworK3N0YXRpYyB2b2lkCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrc2lnZnBlX2hhbmRsZXIgKGludCBzaWcpCisrI2Vsc2UKKytzaWdmcGVfaGFuZGxlciAoc2lnKSBpbnQgc2lnOworKyNlbmRpZgorK3sKKysgIC8qIEV4aXQgd2l0aCBjb2RlIDAgaWYgU0lHRlBFLCB3aXRoIGNvZGUgMSBpZiBhbnkgb3RoZXIgc2lnbmFsLiAgKi8KKysgIGV4aXQgKHNpZyAhPSBTSUdGUEUpOworK30KKysKKytpbnQgeCA9IDE7CisraW50IHkgPSAwOworK2ludCB6OworK2ludCBuYW47CisrCisraW50IG1haW4gKCkKKyt7CisrICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOworKy8qIElSSVggYW5kIEFJWCAod2hlbiAieGxjIC1xY2hlY2siIGlzIHVzZWQpIHlpZWxkIHNpZ25hbCBTSUdUUkFQLiAgKi8KKysjaWYgKGRlZmluZWQgKF9fc2dpKSB8fCBkZWZpbmVkIChfQUlYKSkgJiYgZGVmaW5lZCAoU0lHVFJBUCkKKysgIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKy8qIExpbnV4L1NQQVJDIHlpZWxkcyBzaWduYWwgU0lHSUxMLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCisrICBzaWduYWwgKFNJR0lMTCwgc2lnZnBlX2hhbmRsZXIpOworKyNlbmRpZgorKworKyAgeiA9IHggLyB5OworKyAgbmFuID0geSAvIHk7CisrICBleGl0ICgxKTsKKyt9CisrXSwgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9eWVzLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT1ubywKKysgICAgICAgIFsKKysgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgorKyAgICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IG02OGsgfCBzMzkwKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyB5ZXMiOzsKKysgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7CisrICAgICAgICAgIGVzYWMKKysgICAgICAgIF0pCisrICAgIF0pCisrICBjYXNlICIkZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGUiIGluCisrICAgICp5ZXMpIHZhbHVlPTE7OworKyAgICAqKSB2YWx1ZT0wOzsKKysgIGVzYWMKKysgIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKKysgICAgW0RlZmluZSBpZiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuXSkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2dsaWIubTQKK0BAIC0wLDAgKzEsMTk2IEBACisrIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKysjIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCisrCisrZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCisrZG5sIFRlc3QgZm9yIEdMSUIsIGFuZCBkZWZpbmUgR0xJQl9DRkxBR1MgYW5kIEdMSUJfTElCUywgaWYgImdtb2R1bGUiIG9yIAorK2RubCBndGhyZWFkIGlzIHNwZWNpZmllZCBpbiBNT0RVTEVTLCBwYXNzIHRvIGdsaWItY29uZmlnCisrZG5sCisrQUNfREVGVU4oQU1fUEFUSF9HTElCLAorK1tkbmwgCisrZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2xpYi1jb25maWcgc2NyaXB0CisrZG5sCisrQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfcHJlZml4PSIiKQorK0FDX0FSR19XSVRIKGdsaWItZXhlYy1wcmVmaXgsWyAgLS13aXRoLWdsaWItZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorK0FDX0FSR19FTkFCTEUoZ2xpYnRlc3QsIFsgIC0tZGlzYWJsZS1nbGlidGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR0xJQiBwcm9ncmFtXSwKKysJCSAgICAsIGVuYWJsZV9nbGlidGVzdD15ZXMpCisrCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRnbGliX2NvbmZpZ19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysKKysgIGZvciBtb2R1bGUgaW4gLiAkNAorKyAgZG8KKysgICAgICBjYXNlICIkbW9kdWxlIiBpbgorKyAgICAgICAgIGdtb2R1bGUpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgorKyAgICAgICAgIDs7CisrICAgICAgICAgZ3RocmVhZCkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCisrICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICBkb25lCisrCisrICBBQ19QQVRIX1BST0coR0xJQl9DT05GSUcsIGdsaWItY29uZmlnLCBubykKKysgIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisrICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdMSUIgLSB2ZXJzaW9uID49ICRtaW5fZ2xpYl92ZXJzaW9uKQorKyAgbm9fZ2xpYj0iIgorKyAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgIG5vX2dsaWI9eWVzCisrICBlbHNlCisrICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisrICAgIEdMSUJfTElCUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tbGlic2AKKysgICAgZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorKyAgICBnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisrICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKysgICAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYnRlc3QiID0gInh5ZXMiIDsgdGhlbgorKyAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgorK2RubAorK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHTElCIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorK2RubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKKytkbmwKKysgICAgICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisraW50IAorK21haW4gKCkKKyt7CisrICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKysgIGNoYXIgKnRtcF92ZXJzaW9uOworKworKyAgc3lzdGVtICgidG91Y2ggY29uZi5nbGlidGVzdCIpOworKworKyAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCisrICB0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgICAgIGV4aXQoMSk7CisrICAgfQorKworKyAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKysgICAgeworKyAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAorKyAgICAgICAgICAgICAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uLAorKyAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKKysgICAgICBwcmludGYgKCIqKiogdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBvZiBHTElCLiBZb3UgbWF5IGFsc28gYmUgYWJsZSB0byBmaXggdGhlIGVycm9yXG4iKTsKKysgICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOworKyAgICAgIHByaW50ZigiKioqIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtLlxuIik7CisrICAgICAgcHJpbnRmKCIqKiogSWYgZ2xpYi1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdMSUJfQ09ORklHXG4iKTsKKysgICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKysgICAgfSAKKysgIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAorKwkgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9IEdMSUJfTUlOT1JfVkVSU0lPTikgfHwKKysgICAgICAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gR0xJQl9NSUNST19WRVJTSU9OKSkKKysgICAgeworKyAgICAgIHByaW50ZigiKioqIEdMSUIgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCisrCSAgICAgR0xJQl9NQUpPUl9WRVJTSU9OLCBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisrICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCisrCSAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ2xpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisrICAgICAgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIEdMSUIgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorKyAgICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorKwkgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CisrICAgICAgICBwcmludGYoIioqKiBHTElCIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZ3RrLm9yZy5cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKipcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgZ2xpYi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CisrICAgICAgICBwcmludGYoIioqKiBvZiBHTElCLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworKyAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorK10sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisrICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJ4JG5vX2dsaWIiID0geCA7IHRoZW4KKysgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorKyAgZWxzZQorKyAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICAgICBlY2hvICIqKiogVGhlIGdsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR0xJQiBjb3VsZCBub3QgYmUgZm91bmQiCisrICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKysgICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCisrICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ2xpYi1jb25maWcuIgorKyAgICAgZWxzZQorKyAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ2xpYnRlc3QgOyB0aGVuCisrICAgICAgICA6CisrICAgICAgIGVsc2UKKysgICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gR0xJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKysgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKKysgICAgICAgICAgQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIHJldHVybiAoKGdsaWJfbWFqb3JfdmVyc2lvbikgfHwgKGdsaWJfbWlub3JfdmVyc2lvbikgfHwgKGdsaWJfbWljcm9fdmVyc2lvbikpOyBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCisrICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKysgICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgR0xJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR0xJQiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisrICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorKyAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisrCSAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCisrICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBjYW1lIHdpdGggdGhlIHN5c3RlbSB3aXRoIHRoZSBjb21tYW5kIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorKyAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgR0xJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorKyAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorKyAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ2xpYi1jb25maWcgc2NyaXB0OiAkR0xJQl9DT05GSUciIF0pCisrICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgICBmaQorKyAgICAgZmkKKysgICAgIEdMSUJfQ0ZMQUdTPSIiCisrICAgICBHTElCX0xJQlM9IiIKKysgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisrICBmaQorKyAgQUNfU1VCU1QoR0xJQl9DRkxBR1MpCisrICBBQ19TVUJTVChHTElCX0xJQlMpCisrICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9pbnR0eXBlcy5tNAorQEAgLTAsMCArMSwyNyBAQAorKyMgaW50dHlwZXMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGgKKysjIDxzeXMvdHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2d0X0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFsKKysgICAgQUNfVFJZX0NPTVBJTEUoCisrICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICAgIFtdLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKQorKyAgXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0gsIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2lzYy1wb3NpeC5tNAorQEAgLTAsMCArMSwyNiBAQAorKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxNmM1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDRjMGQ3NzMzZjMwOTAzZjhkN2M3Y2Q3NDMzZjVjOGE3NTA1ZTM1ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyMSBBcHIgMjAxNSAwMDo0ODo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBkb2MvbG9jYWwubWs6IGRvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitVcGRhdGVkIGZvciBiaXNvbiAzLjAuNAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9sb2NhbC5tayB8ICAgIDkgKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2xvY2FsLm1rIGIvZG9jL2xvY2FsLm1rCitpbmRleCBjMzQwNDUyLi42NDJmMzg1IDEwMDY0NAorLS0tIGEvZG9jL2xvY2FsLm1rCisrKysgYi9kb2MvbG9jYWwubWsKK0BAIC05OCwxMCArOTgsNyBAQCBlbmRpZiAhIENST1NTX0NPTVBJTElORworICMjIE1hbiBQYWdlcy4gICMjCisgIyMgLS0tLS0tLS0tLS0gIyMKKyAKKy1kaXN0X21hbl9NQU5TID0gJCh0b3Bfc3JjZGlyKS9kb2MvYmlzb24uMQorLQorLUVYVFJBX0RJU1QgKz0gJChkaXN0X21hbl9NQU5TOi4xPS54KQorLU1BSU5UQUlORVJDTEVBTkZJTEVTICs9ICQoZGlzdF9tYW5fTUFOUykKKytFWFRSQV9ESVNUICs9IGJpc29uLngKKyAKKyAjIERpZmZlcmVuY2VzIHRvIGlnbm9yZSB3aGVuIGNvbXBhcmluZyB0aGUgbWFuIHBhZ2UgKHRoZSBkYXRlKS4KKyByZW1vdmVfdGltZV9zdGFtcCA9IFwKK0BAIC0xMjQsMTAgKzEyMSw2IEBAICQodG9wX3NyY2RpcikvZG9jL2Jpc29uLjE6ICQoTUFOX0RFUFMpCisgCWZpCisgCSQoQU1fVl9hdClybSAtZiAkQCoudAorIAorLWlmIEVOQUJMRV9ZQUNDCistbm9kaXN0X21hbl9NQU5TID0gZG9jL3lhY2MuMQorLWVuZGlmCistCisgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAjIyBHcmFwaHZpeiBleGFtcGxlcyBnZW5lcmF0aW9uLiAjIworICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL200LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzlkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2gKQEAgLTAsMCArMSw0MTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitJbmRleDogYmlzb24tMi40LjIvbTQvbGNtZXNzYWdlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvbGNtZXNzYWdlLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBsY21lc3NhZ2UubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisrCisrIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorKworK0FDX0RFRlVOKFtBTV9MQ19NRVNTQUdFU10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisrICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorKyAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L3VpbnRtYXhfdC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L3VpbnRtYXhfdC5tNAorQEAgLTAsMCArMSwyOSBAQAorKyMgdWludG1heF90Lm00IHNlcmlhbCA2IChnZXR0ZXh0LTAuMTEpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfUFJFUkVRKDIuMTMpCisrCisrIyBEZWZpbmUgdWludG1heF90IHRvIGB1bnNpZ25lZCBsb25nJyBvciBgdW5zaWduZWQgbG9uZyBsb25nJworKyMgaWYgPGludHR5cGVzLmg+IGRvZXMgbm90IGV4aXN0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddKQorKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisrICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisrICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisrICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgaWYgPGludHR5cGVzLmg+IGFuZCA8c3RkaW50Lmg+IGRvbid0IGRlZmluZS5dKQorKyAgZmkKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L3Vsb25nbG9uZy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L3Vsb25nbG9uZy5tNAorQEAgLTAsMCArMSwyMyBAQAorKyMgdWxvbmdsb25nLm00IHNlcmlhbCAyIChmaWxldXRpbHMtNC4wLjMyLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVU5TSUdORURfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHVuc2lnbmVkIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsID0gMTsgaW50IGkgPSA2MztdLAorKyAgICBbdW5zaWduZWQgbG9uZyBsb25nIHVsbG1heCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIHVsbCA8PCBpIHwgdWxsID4+IGkgfCB1bGxtYXggLyB1bGwgfCB1bGxtYXggJSB1bGw7XSwKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfVU5TSUdORURfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlLl0pCisrICBmaQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvaW50ZGl2MC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2ludGRpdjAubTQKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvZ2xpYi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2dsaWIubTQKK0BAIC0wLDAgKzEsMTk2IEBACisrIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKKysjIE93ZW4gVGF5bG9yICAgICA5Ny0xMS0zCisrCisrZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCisrZG5sIFRlc3QgZm9yIEdMSUIsIGFuZCBkZWZpbmUgR0xJQl9DRkxBR1MgYW5kIEdMSUJfTElCUywgaWYgImdtb2R1bGUiIG9yIAorK2RubCBndGhyZWFkIGlzIHNwZWNpZmllZCBpbiBNT0RVTEVTLCBwYXNzIHRvIGdsaWItY29uZmlnCisrZG5sCisrQUNfREVGVU4oQU1fUEFUSF9HTElCLAorK1tkbmwgCisrZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2xpYi1jb25maWcgc2NyaXB0CisrZG5sCisrQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKysgICAgICAgICAgICBnbGliX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfcHJlZml4PSIiKQorK0FDX0FSR19XSVRIKGdsaWItZXhlYy1wcmVmaXgsWyAgLS13aXRoLWdsaWItZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorK0FDX0FSR19FTkFCTEUoZ2xpYnRlc3QsIFsgIC0tZGlzYWJsZS1nbGlidGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgR0xJQiBwcm9ncmFtXSwKKysJCSAgICAsIGVuYWJsZV9nbGlidGVzdD15ZXMpCisrCisrICBpZiB0ZXN0IHgkZ2xpYl9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tZXhlYy1wcmVmaXg9JGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4IgorKyAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCisrICAgICAgICBHTElCX0NPTkZJRz0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKysgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRnbGliX2NvbmZpZ19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19wcmVmaXgvYmluL2dsaWItY29uZmlnCisrICAgICBmaQorKyAgZmkKKysKKysgIGZvciBtb2R1bGUgaW4gLiAkNAorKyAgZG8KKysgICAgICBjYXNlICIkbW9kdWxlIiBpbgorKyAgICAgICAgIGdtb2R1bGUpIAorKyAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgorKyAgICAgICAgIDs7CisrICAgICAgICAgZ3RocmVhZCkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCisrICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICBkb25lCisrCisrICBBQ19QQVRIX1BST0coR0xJQl9DT05GSUcsIGdsaWItY29uZmlnLCBubykKKysgIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCisrICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdMSUIgLSB2ZXJzaW9uID49ICRtaW5fZ2xpYl92ZXJzaW9uKQorKyAgbm9fZ2xpYj0iIgorKyAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgIG5vX2dsaWI9eWVzCisrICBlbHNlCisrICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCisrICAgIEdMSUJfTElCUz1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tbGlic2AKKysgICAgZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAorKyAgICBnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCisrICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKysgICAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYnRlc3QiID0gInh5ZXMiIDsgdGhlbgorKyAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKyAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgorK2RubAorK2RubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHTElCIGlzIHN1ZmZpY2llbnRseSBuZXcuIChBbHNvIHNhbml0eQorK2RubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKKytkbmwKKysgICAgICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisraW50IAorK21haW4gKCkKKyt7CisrICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKysgIGNoYXIgKnRtcF92ZXJzaW9uOworKworKyAgc3lzdGVtICgidG91Y2ggY29uZi5nbGlidGVzdCIpOworKworKyAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCisrICB0bXBfdmVyc2lvbiA9IGdfc3RyZHVwKCIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworKyAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9nbGliX3ZlcnNpb24iKTsKKysgICAgIGV4aXQoMSk7CisrICAgfQorKworKyAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CisrICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKysgICAgeworKyAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAorKyAgICAgICAgICAgICAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb24sICRnbGliX2NvbmZpZ19taWNyb192ZXJzaW9uLAorKyAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKKysgICAgICBwcmludGYgKCIqKiogdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBvZiBHTElCLiBZb3UgbWF5IGFsc28gYmUgYWJsZSB0byBmaXggdGhlIGVycm9yXG4iKTsKKysgICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOworKyAgICAgIHByaW50ZigiKioqIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtLlxuIik7CisrICAgICAgcHJpbnRmKCIqKiogSWYgZ2xpYi1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdMSUJfQ09ORklHXG4iKTsKKysgICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7CisrICAgICAgcHJpbnRmKCIqKiogYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKysgICAgfSAKKysgIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAorKwkgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9IEdMSUJfTUlOT1JfVkVSU0lPTikgfHwKKysgICAgICAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gR0xJQl9NSUNST19WRVJTSU9OKSkKKysgICAgeworKyAgICAgIHByaW50ZigiKioqIEdMSUIgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCisrCSAgICAgR0xJQl9NQUpPUl9WRVJTSU9OLCBHTElCX01JTk9SX1ZFUlNJT04sIEdMSUJfTUlDUk9fVkVSU0lPTik7CisrICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCisrCSAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CisrICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ2xpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCisrICAgICAgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgIH0KKysgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBwcmludGYoIlxuKioqIEFuIG9sZCB2ZXJzaW9uIG9mIEdMSUIgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAorKyAgICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorKwkgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CisrICAgICAgICBwcmludGYoIioqKiBHTElCIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAuZ3RrLm9yZy5cbiIpOworKyAgICAgICAgcHJpbnRmKCIqKipcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgZ2xpYi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CisrICAgICAgICBwcmludGYoIioqKiBvZiBHTElCLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgR0xJQl9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIGNvcnJlY3QgY29weSBvZiBnbGliLWNvbmZpZy4gKEluIHRoaXMgY2FzZSwgeW91IHdpbGwgaGF2ZSB0b1xuIik7CisrICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOworKyAgICAgIH0KKysgICAgfQorKyAgcmV0dXJuIDE7CisrfQorK10sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCisrICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJ4JG5vX2dsaWIiID0geCA7IHRoZW4KKysgICAgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorKyAgZWxzZQorKyAgICAgQUNfTVNHX1JFU1VMVChubykKKysgICAgIGlmIHRlc3QgIiRHTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorKyAgICAgICBlY2hvICIqKiogVGhlIGdsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR0xJQiBjb3VsZCBub3QgYmUgZm91bmQiCisrICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKysgICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCisrICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ2xpYi1jb25maWcuIgorKyAgICAgZWxzZQorKyAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ2xpYnRlc3QgOyB0aGVuCisrICAgICAgICA6CisrICAgICAgIGVsc2UKKysgICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gR0xJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKysgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHTElCX0NGTEFHUyIKKysgICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKKysgICAgICAgICAgQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIHJldHVybiAoKGdsaWJfbWFqb3JfdmVyc2lvbikgfHwgKGdsaWJfbWlub3JfdmVyc2lvbikgfHwgKGdsaWJfbWljcm9fdmVyc2lvbikpOyBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCisrICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKysgICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgR0xJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR0xJQiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCisrICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgorKyAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgorKyAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCisrCSAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCisrICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKKysgICAgICAgICAgZWNobyAiKioqIgorKyAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBjYW1lIHdpdGggdGhlIHN5c3RlbSB3aXRoIHRoZSBjb21tYW5kIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAorKyAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorKyAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgR0xJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorKyAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorKyAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ2xpYi1jb25maWcgc2NyaXB0OiAkR0xJQl9DT05GSUciIF0pCisrICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgICAgICBmaQorKyAgICAgZmkKKysgICAgIEdMSUJfQ0ZMQUdTPSIiCisrICAgICBHTElCX0xJQlM9IiIKKysgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisrICBmaQorKyAgQUNfU1VCU1QoR0xJQl9DRkxBR1MpCisrICBBQ19TVUJTVChHTElCX0xJQlMpCisrICBybSAtZiBjb25mLmdsaWJ0ZXN0CisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC9pc2MtcG9zaXgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9pc2MtcG9zaXgubTQKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MmU4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMi4zLmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvciAoeWFjYyByZXBsYWNlbWVudCkiCitERVNDUklQVElPTiA9ICJCaXNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4gYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gXAorYW4gTEFMUigxKSBvciBHTFIgcGFyc2VyIGZvciB0aGF0IGdyYW1tYXIuICBCaXNvbiBpcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIFlhY2M6IGFsbCBwcm9wZXJseS13cml0dGVuIFlhY2MgXAorZ3JhbW1hcnMgb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiBBbnlvbmUgZmFtaWxpYXIgd2l0aCBZYWNjIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBCaXNvbiB3aXRoIFwKK2xpdHRsZSB0cm91YmxlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmlzb24vYmlzb24tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgIGZpbGU6Ly9iaXNvbi0yLjNfbTQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMjMyN2VmZGQ1MDgwZTJiMWFjYjZlNTYwYTA0YjQzYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MmY3OGFhNDc2MWE3NGNlYjdmZGY3NzBmMzU1NGRkODQzMDhjM2I5M2M0MjU1ZTNhNWMxNzU1OGVjZGEyOTNlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbTQvKmdsLm00CisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcnVudGltZS1wby8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8zLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhlOWEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR05VIFByb2plY3QgcGFyc2VyIGdlbmVyYXRvciAoeWFjYyByZXBsYWNlbWVudCkiCitERVNDUklQVElPTiA9ICJCaXNvbiBpcyBhIGdlbmVyYWwtcHVycG9zZSBwYXJzZXIgZ2VuZXJhdG9yIHRoYXQgY29udmVydHMgYW4gYW5ub3RhdGVkIGNvbnRleHQtZnJlZSBncmFtbWFyIGludG8gXAorYW4gTEFMUigxKSBvciBHTFIgcGFyc2VyIGZvciB0aGF0IGdyYW1tYXIuICBCaXNvbiBpcyB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIFlhY2M6IGFsbCBwcm9wZXJseS13cml0dGVuIFlhY2MgXAorZ3JhbW1hcnMgb3VnaHQgdG8gd29yayB3aXRoIEJpc29uIHdpdGggbm8gY2hhbmdlLiBBbnlvbmUgZmFtaWxpYXIgd2l0aCBZYWNjIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBCaXNvbiB3aXRoIFwKK2xpdHRsZSB0cm91YmxlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaXNvbi8iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9iaXNvbi9iaXNvbi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbTQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1sb2NhbC5tay1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorIgorCisjIE5vIHBvaW50IGluIGhhcmRjb2RpbmcgcGF0aCB0byBtNCwganVzdCB1c2UgUEFUSAorRVhUUkFfT0VDT05GICs9ICJNND1tNCIKKworU1JDX1VSSVttZDVzdW1dID0gImMzNDIyMDFkZTEwNGNjOWNlMGEyMWUwYWQxMGQ0MDIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE3MjQyOGM3OTE3YmRmOWZhOTNjYjgxODFjOTcxYjZlMjI4MzQxMjU4NDhjZjFkMDNjZTEwYjFiYjA3MTZmZTEiCisKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWZvciBpIGluIG1mY2FsYyBjYWxjKysgcnBjYWxjOyBkbyBta2RpciAtcCAke0J9L2V4YW1wbGVzLyRpOyBkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9iaXNvbiBcCisJCUJJU09OX1BLR0RBVEFESVI9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9iaXNvbgorfQorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyL2Jvb3RjaGFydGRfc3RvcC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWE3ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Mi9ib290Y2hhcnRkX3N0b3Auc2gKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBib290Y2hhcnRkX3N0b3AKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgJGFsbAorIyBSZXF1aXJlZC1TdG9wOiAKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU3RvcCBib290Y2hhcnRkIGNvbGxlY3Rpb24KKyMgRGVzY3JpcHRpb246ICAgICAgIFRoaXMgc2NyaXB0IGFjY29tcGFuaWVzIGJvb3RjaGFydGQgZnJvbSBib290Y2hhcnQyLiAKKyMgICAgICAgICAgICAgICAgICAgIGJvb3RjaGFydGQgc2hvdWxkIHN0b3AgZGV0ZWN0IHRoZSBlbmQgb2YgdGhlIGJvb3QgcHJvY2VzcworIyAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBpZiBhIHdpbmRvdyBtYW5hZ2VyIGlzIGxhdW5jaGVkLCBidXQgZm9yCisjICAgICAgICAgICAgICAgICAgICBjb21tYW5kLWxpbmUgb25seSBvcGVyYXRpbmcgc3lzdGVtcywgdGhpcyBzY3JpcHQgc2hvdWxkIGJlCisjICAgICAgICAgICAgICAgICAgICB1c2VkIGluc3RlYWQuCisjIyMgRU5EIElOSVQgSU5GTworCisvc2Jpbi9ib290Y2hhcnRkIHN0b3AKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwYTk4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDJfMC4xNC43LmJiCkBAIC0wLDAgKzEsMTU0IEBACisjIENvcHlyaWdodCAoYykgMjAxMyBMRyBFbGVjdHJvbmljcywgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KKworIyBUaGlzIHJlY2lwZSBjcmVhdGVzIHBhY2thZ2VzIGZvciB0aGUgYm9vdGNoYXJ0MiBzeXN0ZW0td2lkZSBwcm9maWxlciBkYWVtb24gCisjIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gRGVwZW5kaW5nIG9uIHRoZSBpbWFnZXMgeW91J3JlIGJ1aWxkaW5nLCBhZGRpdGlvbmFsCisjIGNvbmZpZ3VyYXRpb24gbWF5IGJlIG5lZWRlZCBpbiBvcmRlciB0byB1c2UgaXQuCisjCisjIFBhY2thZ2VzOgorIyAgICogICBib290Y2hhcnQyIC0gVGhlIGRhZW1vbiBpdHNlbGYuCisjICAgKiAgIHB5Ym9vdGNoYXJ0Z3VpIC0gUHl0aG9uIHByb2dyYW0gdG8gdmlzdWFsaXplIGFuZCBkaXNwbGF5IHRoZSBkYXRhCisjICAgICAgIGNvbGxlY3RlZCBieSBib290Y2hhcnQyIG9yIGNvbXBhdGlibGUgZGFlbW9ucyBzdWNoIGFzIHRoZSBvcmlnaW5hbCAKKyMgICAgICAgYm9vdGNoYXJ0LgorIyAgICogICBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCAtIEEgU3lzViBpbml0IHNjcmlwdCB0byBzdG9wIGRhdGEgY29sbGVjdGlvbgorIyAgICAgICB3aGVuIGJvb3RpbmcgY29tcGxldGVzIChzZWUgYmVsb3cgZm9yIGRldGFpbHMuKQorIworIyBXaGlsZSBib290Y2hhcnQyIGlzIGRlc2lnbmVkIHRvIHN0b3AgY29sbGVjdGluZyBkYXRhIHJvdWdobHkgd2hlbiB0aGUgYm9vdCAKKyMgcHJvY2VzcyBjb21wbGV0ZXMsIGl0IGlzIG5vdCBleGFjdGx5IGEgc3RvcHdhdGNoLiBJdCBoYXMgYSBsaXN0IG9mIHByb2dyYW1zIAorIyB3aGljaCBhcmUgc3VwcG9zZWQgc2lnbmlmeSB0aGF0IHRoZSBib290IHByb2Nlc3MgaGFzIGNvbXBsZXRlZCAoZm9yIGV4YW1wbGUsCisjIG9wZW5ib3ggb3IgZ25vbWUtc2hlbGwsKSBidXQgaXQgd2FpdHMgYSBmdWxsIDIwIHNlY29uZHMgYWZ0ZXIgc3VjaCBhIHByb2dyYW0KKyMgaXMgbGF1bmNoZWQgYmVmb3JlIHN0b3BwaW5nIGl0c2VsZiwgdG8gY29sbGVjdCBhZGRpdGlvbmFsIGRhdGEuCisjCisjIElmIHlvdSBhcmUgdXNpbmcgYSB3aW5kb3cgbWFuYWdlciBvciBHVUkgd2hpY2ggaXNuJ3QgaW5jbHVkZWQgaW4gYm9vdGNoYXJ0MidzCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlLCB5b3Ugc2hvdWxkIHdyaXRlIGJiYXBwZW5kIGZpbGUgdG8gYW1lbmQKKyMgYm9vdGNoYXJ0ZC5jb25mIGFuZCBhZGQgaXQgdG8gRVhJVF9QUk9DLiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc2hvd24gaW4gdGhpcworIyByZWNpcGUsIHdoZXJlIHRoZSBNYXRjaGJveCB3aW5kb3cgbWFuYWdlciAodXNlZCBieSBTYXRvKSBpcyBhZGRlZC4KKyMKKyMgSWYgeW91IHdhbnQgZGF0YSBjb2xsZWN0aW9uIHRvIGVuZCBhdCBhIGNlcnRhaW4gcG9pbnQgZXhhY3RseSwgeW91IHNob3VsZAorIyBhcnJhbmdlIGZvciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gYmUgcnVuOgorIyAgIGJvb3RjaGFydGQgc3RvcAorIyBZb3UgbWlnaHQgc2V0IHRoaXMgY29tbWFuZCB0byBiZSBsYXVuY2hlZCBieSB0aGUgZGVza3RvcCBlbnZpcm9ubWVudCBzaGlwcGVkCisjIG9uIHRoZSBpbWFnZSB5b3UncmUgYnVpbGRpbmcgYWZ0ZXIgdGhlIG90aGVyIHN0YXJ0dXAgcHJvZ3JhbXMgYXJlIGNvbXBsZXRlLgorIyBUaGlzIHdpbGwgbm90IGluY3VyIHRoZSAyMCBzZWNvbmQgd2FpdCBwZXJpb2QgYW5kIHdpbGwgY2F1c2UgYm9vdGNoYXJ0MiB0bworIyBiZWhhdmUgYSBiaXQgbW9yZSBsaWtlIGEgc3RvcHdhdGNoLiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgc2hvd24gaW4gdGhpcyAKKyMgcmVjaXBlLCBzcGVjaWZpY2FsbHkgdGhlIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHBhY2thZ2UsIHdoaWNoIHN0b3BzIGRhdGEKKyMgY29sbGVjdGlvbiBhcyB0aGUgbGFzdCBhY3Rpb24gd2hlbiBzd2l0Y2hpbmcgdG8gcnVubGV2ZWxzIDIgdGhyb3VnaCA1LiBZb3UgY2FuCisjIGFkZCBib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCB0byBJTUFHRV9JTlNUQUxMIGlmIHlvdSBuZWVkIHRvIHVzZSBpdC4KKyMKKyMgVW5sZXNzIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgc3BlY2lhbCwgaWYgeW91ciBpbWFnZSBkb2VzIG5vdCBsYXVuY2ggYW4gWCAKKyMgd2luZG93IG1hbmFnZXIsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHRvIHlvdXIgaW1hZ2UuCisjCisjIEJvb3RjaGFydDIgY2FuIGJlIHN0YXJ0ZWQgaW4gdHdvIHdheXMuIERhdGEgY29sbGVjdGlvbiBjYW4gYmUgaW5pdGlhdGVkIGJ5CisjIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorIyAgIGJvb3RjaGFydGQgc3RhcnQKKyMgSG93ZXZlciwgZm9yIHRoZSBtb3N0IGNvbXBsZXRlIGRhdGEsIHRoZSBib290Y2hhcnQyIGRldmVsb3BlcnMgcmVjb21tZW5kCisjIHJ1bm5pbmcgaXQgYXMgUElEIDEuIFRoaXMgY2FuIGJlIGRvbmUgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGtlcm5lbCAKKyMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgaW4gdGhlIGJvb3Rsb2FkZXIgc2V0dXA6CisjICAgaW5pdD0vc2Jpbi9ib290Y2hhcnRkCisjIFdoZW4gaW52b2tlZCB0aGlzIHdheSwgYm9vdGNoYXJ0MiB3aWxsIHNldCBpdHNlbGYgdXAgYW5kIHRoZW4gYXV0b21hdGljYWxseSAKKyMgcnVuIC9zYmluL2luaXQuIEZvciBleGFtcGxlLCB3aGVuIGJvb3RpbmcgdGhlIGRlZmF1bHQgcWVtdXg4NiBpbWFnZSwgb25lIG1pZ2h0CisjIHVzZSBhIGNvbW1hbmQgbGlrZSB0aGlzOgorIyAgIHJ1bnFlbXUgcWVtdXg4NiBib290cGFyYW1zPSJpbml0Y2FsbF9kZWJ1ZyBwcmludGsudGltZT15IHF1aWV0IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdD0vc2Jpbi9ib290Y2hhcnRkIgorIworIyBOZWl0aGVyIG1ldGhvZCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBoZXJlLCBjaG9vc2Ugd2hhdCB3b3JrcyBmb3IgeW91LgorIworIyBJZiB5b3UgYXJlIGJ1aWxkaW5nIHlvdXIgaW1hZ2Ugd2l0aCBzeXN0ZW1kIGluc3RlYWQgb2YgU3lzViBpbml0LCBib290Y2hhcnQyCisjIGluY2x1ZGVzIHN5c3RlbWQgc2VydmljZSBmaWxlcyB0byBiZWdpbiBjb2xsZWN0aW9uIGF1dG9tYXRpY2FsbHkgYXQgYm9vdCBhbmQgCisjIGVuZCBjb2xsZWN0aW9uIGF1dG9tYXRpY2FsbHkgMjAgc2Vjb25kcyBhZnRlciB0aGUgYm9vdCBwcm9jZXNzIGhhcyBjb21wbGV0ZWQuCisjIEhvd2V2ZXIsIGJlIGF3YXJlIHRoYXQgc3lzdGVtZCB0ZW5kcyB0byBzdGFydCBib290Y2hhcnQyIHJlbGF0aXZlbHkgbGF0ZSBpbnRvCisjIHRoZSBib290IHByb2Nlc3MsIHNvIGl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSBib290Y2hhcnQyIGFzIFBJRCAxLiBJZiAKKyMgeW91J3JlIHVzaW5nIHN5c3RlbWQgYW5kIHlvdSB3aXNoIHRvIHVzZSBhbm90aGVyIG1ldGhvZCB0byBzdG9wIGRhdGEKKyMgY29sbGVjdGlvbiBhdCBhIHRpbWUgb2YgeW91ciBjaG9vc2luZywgeW91IG1heSBkbyBzbyBhcyBsb25nIGFzIHlvdSBnZXQgdG8gaXQKKyMgYmVmb3JlIHRoZSAyMCBzZWNvbmQgdGltZW91dCBvZiB0aGUgc3lzdGVtZCBzZXJ2aWNlIGZpbGVzLiBBbHNvLCB5b3UgbWF5IHdyaXRlCisjIGEgYmJhcHBlbmQgdG8gcGF0Y2ggYm9vdGNoYXJ0Mi1kb25lLnRpbWVyLmluIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZQorIyB0aW1lb3V0LiBEZWNyZWFzaW5nIGl0IHRvIDAgd2lsbCBtYWtlIGl0IGJlaGF2ZSBsaWtlCisjIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0LgorIworIyBCeSBkZWZhdWx0LCB3aGVuIGRhdGEgY29sbGVjdGlvbiBpcyBzdG9wcGVkLCBhIGZpbGUgbmFtZWQgYm9vdGNoYXJ0LnRneiB3aWxsCisjIGJlIGNyZWF0ZWQgaW4gL3Zhci9sb2cuIElmIHB5Ym9vdGNoYXJ0Z3VpIGlzIGluY2x1ZGVkIGluIHlvdXIgaW1hZ2UsCisjIGJvb3RjaGFydC5wbmcgd2lsbCBhbHNvIGJlIGNyZWF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gSG93ZXZlciwgdGhpcyByZXN1bHRzIGluCisjIGEgbm90aWNlYWJsZSBoaXRjaCBvciBwYXVzZSBhdCBib290IHRpbWUsIHdoaWNoIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCBvbiBhbgorIyBlbWJlZGRlZCBkZXZpY2UuIFNvIHlvdSBtYXkgcHJlZmVyIHRvIG9taXQgcHlib290Y2hhcnRndWkgZnJvbSB5b3VyIGltYWdlLiBJbgorIyB0aGF0IGNhc2UsIGNvcHkgYm9vdGNoYXJ0LnRneiBvdmVyIHRvIHlvdXIgZGV2ZWxvcG1lbnQgc3lzdGVtIGFuZCBnZW5lcmF0ZQorIyBib290Y2hhcnQucG5nIHRoZXJlLiBUbyBnZXQgcHlib290Y2hhcnRndWkgb24geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0sIHlvdSBjYW4KKyMgZWl0aGVyIGluc3RhbGwgaXQgZGlyZWN0bHkgZnJvbSBzb21lIG90aGVyIHNvdXJjZSwgb3IgYnVpbGQgYm9vdGNoYXJ0Mi1uYXRpdmUKKyMgYW5kIGZpbmQgcHlib290Y2hhcnRndWkgaW4gdGhlIG5hdGl2ZSBzeXNyb290OgorIyAgICBiaXRiYWtlIGJvb3RjaGFydDItbmF0aXZlCisjICAgLi90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vcHlib290Y2hhcnRndWkgL3BhdGgvdG8vYm9vdGNoYXJ0LnRnegorIyBOb3RlIHRoYXQsIHdoZXRoZXIgaW5zdGFsbGVkIG9uIHlvdXIgYnVpbGQgc3lzdGVtIG9yIG9uIHlvdXIgaW1hZ2UsIHRoZSAKKyMgcHlib290Y2hhcnRndWkgcHJvdmlkZWQgYnkgdGhpcyByZWNpcGUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLWkgb3B0aW9uLiBZb3UgCisjIHdpbGwgbmVlZCB0byBpbnN0YWxsIHB5Ym9vdGNoYXJ0Z3VpIGJ5IG90aGVyIG1lYW5zIGluIG9yZGVyIHRvIHJ1biBpdCBpbgorIyBpbnRlcmFjdGl2ZSBtb2RlLgorCitTVU1NQVJZID0gIkJvb3Rpbmcgc2VxdWVuY2UgYW5kIENQVSxJL08gdXNhZ2UgbW9uaXRvciIKK0RFU0NSSVBUSU9OID0gIk1vbml0b3JzIHdoZXJlIHRoZSBzeXN0ZW0gc3BlbmRzIGl0cyB0aW1lIGF0IHN0YXJ0LCBjcmVhdGluZyBhIGdyYXBoIG9mIGFsbCBwcm9jZXNzZXMsIGRpc2sgdXRpbGl6YXRpb24sIGFuZCB3YWl0IHRpbWUuIgorQVVUSE9SID0gIldvbmhvbmcgS3dvbiA8d29uaG9uZy5rd29uQGxnZS5jb20+IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQiCitMSUNFTlNFID0gIkdQTC0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NGFjNDY3ODMxMTI1NGRiNjJlZGY4ZmQzOWNiODEyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL21tZWVrcy9ib290Y2hhcnQuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2Jvb3RjaGFydGRfc3RvcC5zaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorU1JDUkVWID0gIjZmMDUwYjY1YWU5ZjI2NjY0NWYwNGYwYWVjYWI5ZWZiODgzNzVmMWMiCisKK2luaGVyaXQgc3lzdGVtZAoraW5oZXJpdCB1cGRhdGUtcmMuZAoraW5oZXJpdCBweXRob25uYXRpdmUKKworIyBUaGUgb25seSByZWFzb24gdG8gYnVpbGQgYm9vdGNoYXJ0Mi1uYXRpdmUgaXMgZm9yIGEgbmF0aXZlIHB5Ym9vdGNoYXJ0Z3VpLgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJib290Y2hhcnQyLnNlcnZpY2UgYm9vdGNoYXJ0Mi1kb25lLnNlcnZpY2UgYm9vdGNoYXJ0Mi1kb25lLnRpbWVyIgorCitVUERBVEVSQ1BOID0gImJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IgorSU5JVFNDUklQVF9OQU1FID0gImJvb3RjaGFydGRfc3RvcC5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDIgMyA0IDUgLiIKKworIyBXZSB3YW50IG5hdGl2ZSBweWJvb3RjaGFydGd1aSB0byBleGVjdXRlIHdpdGggdGhlIGNvcnJlY3QgUHl0aG9uIGludGVycGV0ZXIuCitkb19jb21waWxlX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGVjaG8gIiMhICR7UFlUSE9OfSIgfCBjYXQgLSAke1N9L3B5Ym9vdGNoYXJ0Z3VpLnB5ID4gJHtXT1JLRElSfS90ZW1wX3B5Ym9vdGNoYXJ0Z3VpCisgICAgbXYgJHtXT1JLRElSfS90ZW1wX3B5Ym9vdGNoYXJ0Z3VpICR7U30vcHlib290Y2hhcnRndWkucHkKKyAgICBjaG1vZCAreCAke1N9L3B5Ym9vdGNoYXJ0Z3VpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisgICAgZXhwb3J0IFBZX0xJQkRJUj0iJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0iCisgICAgZXhwb3J0IEJJTkRJUj0iJHtiaW5kaXJ9IgorICAgIGV4cG9ydCBMSUJESVI9IiR7YmFzZV9saWJkaXJ9IgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICMgbmVlZGVkIGZvciAtbmF0aXZlCisgICAgZXhwb3J0IFBZX0xJQkRJUj0iJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0iCisgICAgZXhwb3J0IEJJTkRJUj0iJHtiaW5kaXJ9IgorICAgIGV4cG9ydCBERVNURElSPSIke0R9IgorICAgIGV4cG9ydCBMSUJESVI9IiR7YmFzZV9saWJkaXJ9IgorCisgICAgb2VfcnVubWFrZSBpbnN0YWxsCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ib290Y2hhcnRkX3N0b3Auc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKyAgICBlY2hvICdFWElUX1BST0M9IiRFWElUX1BST0MgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIiJyA+PiAke0R9JHtzeXNjb25mZGlyfS9ib290Y2hhcnRkLmNvbmYKK30KKworUEFDS0FHRVMgPSsgInB5Ym9vdGNoYXJ0Z3VpIgorRklMRVNfcHlib290Y2hhcnRndWkgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcHlib290Y2hhcnRndWkgJHtiaW5kaXJ9L3B5Ym9vdGNoYXJ0Z3VpIgorUkRFUEVORFNfcHlib290Y2hhcnRndWkgPSAicHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1pbWFnZSBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1zaGVsbCBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLWNvZGVjcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdzeXN2aW5pdC1waWRvZicsICdwcm9jcHMnLCBkKX0iCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImxzYiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcHl0aG9uLXB5Y2Fpcm8tbmF0aXZlIgorCitQQUNLQUdFUyA9KyAiYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQiCitGSUxFU19ib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCArPSAiJHtzeXNjb25mZGlyfS9pbml0LmQgJHtzeXNjb25mZGlyfS9yYyouZCIKKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC9ib290Y2hhcnQtY29sbGVjdG9yIgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC90bXBmcyIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L2Jvb3RjaGFydC8uZGVidWciCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vZG9jcyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJib290Y2hhcnQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzL2ZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM1M2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzL2ZpeC1wYXJhbGxlbC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDM3M2ViNTEzMjhiNWUxMDUyOTc2M2NhZDQ0MTIxMGU2YjBlZmIyNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUgMjI6MDg6NDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGU6IGZpeCBmb3IgcGFyYWxsZWwgYnVpbGQKKworRml4ZWQ6Citta2ZzLmM6MzAwOjQ2OiBlcnJvcjogJ0JUUkZTX0JVSUxEX1ZFUlNJT04nIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorICBmcHJpbnRmKHN0ZGVyciwgIm1rZnMuYnRyZnMsIHBhcnQgb2YgJXNcbiIsIEJUUkZTX0JVSUxEX1ZFUlNJT04pOworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDg2MGEzOTAuLjhhNmZiZDcgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xNDIsNyArMTQyLDcgQEAgZWxzZQorIAljaGVja19lY2hvID0gdHJ1ZQorIGVuZGlmCisgCistJS5vLmQ6ICUuYworKyUuby5kOiAlLmMgdmVyc2lvbi5oCisgCSQoUSkkKENDKSAtTU0gLU1HIC1NRiAkQCAtTVQgJChAOi5vLmQ9Lm8pIC1NVCAkKEA6Lm8uZD0uc3RhdGljLm8pIC1NVCAkQCAkKENGTEFHUykgJDwKKyAKKyAuYy5vOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29sc180LjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M2MjJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQ2hlY2tzdW1taW5nIENvcHkgb24gV3JpdGUgRmlsZXN5c3RlbSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJCdHJmcyBpcyBhIG5ldyBjb3B5IG9uIHdyaXRlIGZpbGVzeXN0ZW0gZm9yIExpbnV4IGFpbWVkIGF0IFwKK2ltcGxlbWVudGluZyBhZHZhbmNlZCBmZWF0dXJlcyB3aGlsZSBmb2N1c2luZyBvbiBmYXVsdCB0b2xlcmFuY2UsIHJlcGFpciBhbmQgXAorZWFzeSBhZG1pbmlzdHJhdGlvbi4gXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdGllcyAobWtmcywgZnNjaywgYnRyZnNjdGwpIHVzZWQgdG8gd29yayB3aXRoIFwKK2J0cmZzIGFuZCBhbiB1dGlsaXR5IChidHJmcy1jb252ZXJ0KSB0byBtYWtlIGEgYnRyZnMgZmlsZXN5c3RlbSBmcm9tIGFuIGV4dDMuIgorCitIT01FUEFHRSA9ICJodHRwczovL2J0cmZzLndpa2kua2VybmVsLm9yZyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZjYjAyZGM1NTJhMDQxZGVlMjdlNGI4NWM3Mzk2MDY3IgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IGF0dHIgZTJmc3Byb2dzIGx6byBhY2wiCisKK1NSQ1JFViA9ICI3ZjEzMjhjY2I1ZDE1OWVmZTg1MGQ0ZWFlYTliNDliYmU4YzQxODFlIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2RhdmUvYnRyZnMtcHJvZ3MuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZG9jdW1lbnRhdGlvbiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICBzaCBhdXRvZ2VuLnNoCit9CisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWMzNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvYnVpbGQtY29tcGFyZV9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJCdWlsZCBSZXN1bHQgQ29tcGFyZSBTY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgc2NyaXB0cyB0byBmaW5kIG91dCBpZiB0aGUgYnVpbGQgcmVzdWx0XAorZGlmZmVycyB0byBhIGZvcm1lciBidWlsZC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL29wZW5TVVNFL2J1aWxkLWNvbXBhcmUuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICAgZmlsZTovL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaDtzdHJpcGxldmVsPTEgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorUEFUQ0hUT09MID0gImdpdCIKKworU1JDUkVWID0gImM1MzUyYzA1NGM2ZWYxNTczNWRhMzFiNzZkNmQ4ODYyMGY0YWZmMGEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IGZ1bmN0aW9ucy5zaCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IHBrZy1kaWZmLnNoICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgc2FtZS1idWlsZC1yZXN1bHQuc2ggJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBzcnBtLWNoZWNrLnNoICR7RH0vJHtiaW5kaXJ9Cit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvMDAwMS1BZGQtc3VwcG9ydC1mb3ItZGViLWFuZC1pcGstcGFja2FnaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTUyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSAwMmRiYzdlMzQ3OGU0MDlkNmY1ZTNlMWM1M2RhZGRmODgzOGJlOTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDEgU2VwIDIwMTUgMTI6MDQ6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBvcnQgZm9yIGRlYiBhbmQgaXBrIHBhY2thZ2luZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBmdW5jdGlvbnMuc2ggfCAxNSArKysrKysrKysrKysrKysKKyBwa2ctZGlmZi5zaCAgfCAgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Z1bmN0aW9ucy5zaCBiL2Z1bmN0aW9ucy5zaAoraW5kZXggMDYwNzlkZi4uODVjOTAwMyAxMDA2NDQKKy0tLSBhL2Z1bmN0aW9ucy5zaAorKysrIGIvZnVuY3Rpb25zLnNoCitAQCAtODUsNiArODUsMTMgQEAgZnVuY3Rpb24gdW5wYWNrYWdlKCkKKyAgICAgICAgICAgICBDUElPX09QVFM9Ii0tZXh0cmFjdCAtLXVuY29uZGl0aW9uYWwgLS1wcmVzZXJ2ZS1tb2RpZmljYXRpb24tdGltZSAtLW1ha2UtZGlyZWN0b3JpZXMgLS1xdWlldCIKKyAgICAgICAgICAgICBycG0yY3BpbyAkZmlsZSB8IGNwaW8gJHtDUElPX09QVFN9CisgICAgICAgICAgICAgOzsKKysgICAgICAgICouaXBrfCouZGViKQorKyAgICAgICAgICAgIGFyIHggJGZpbGUKKysgICAgICAgICAgICB0YXIgeGYgY29udHJvbC50YXIuZ3oKKysgICAgICAgICAgICBybSBjb250cm9sLnRhci5negorKyAgICAgICAgICAgIHRhciB4ZiBkYXRhLnRhci5negorKyAgICAgICAgICAgIHJtIGRhdGEudGFyLmd6CisrICAgICAgICAgICAgOzsKKyAgICAgZXNhYworICAgICBwb3BkIDE+L2Rldi9udWxsCisgfQorQEAgLTI1NSw0ICsyNjIsMTIgQEAgZnVuY3Rpb24gY21wX3NwZWMgKCkKKyAgICAgcm0gJGZpbGUxICRmaWxlMgorICAgICByZXR1cm4gJFJFUworIH0KKysKKytmdW5jdGlvbiBhZGp1c3RfY29udHJvbGZpbGUgKCkgeworKyAgICBjYXQgJDEvY29udHJvbCB8IHNlZCAnL15WZXJzaW9uOiAvZCcgPiAkMS9jb250cm9sLmZpeGVkCisrICAgIG12ICQxL2NvbnRyb2wuZml4ZWQgJDEvY29udHJvbAorKyAgICBjYXQgJDIvY29udHJvbCB8IHNlZCAnL15WZXJzaW9uOiAvZCcgPiAkMi9jb250cm9sLmZpeGVkCisrICAgIG12ICQyL2NvbnRyb2wuZml4ZWQgJDIvY29udHJvbAorK30KKysKKyAjIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCitpbmRleCAwZjFmYTc2Li4zY2YxMGFhIDEwMDY0NAorLS0tIGEvcGtnLWRpZmYuc2gKKysrKyBiL3BrZy1kaWZmLnNoCitAQCAtMTM4LDYgKzEzOCwxMiBAQCBlY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorIHVucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCisgdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKyAKKytjYXNlICRvbGRwa2cgaW4KKysgICouZGVifCouaXBrKQorKyAgICAgYWRqdXN0X2NvbnRyb2xmaWxlICRkaXIvb2xkICRkaXIvbmV3CisrICA7OworK2VzYWMKKysKKyAjIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKyAjIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorIGlmIFsgLXogJFJFUyBdOyB0aGVuCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL0lnbm9yZS1EV0FSRi1zZWN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRhMWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMDE1NzE1Njk0ZWFkZDcxNGI5MDNmMzBhZGU4NzZlMDczOGQ0NDk3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJhbmR5IFdpdHQgPHJhbmR5LmUud2l0dEBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBNb24sIDUgSmFuIDIwMTUgMTU6MDk6MjAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gSWdub3JlIERXQVJGIHNlY3Rpb25zLgorCitBc3N1bWUgZm9yIG5vdyB0aGF0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIERXQVJGIHNlY3Rpb25zIGR1ZSB0byBwYXRoCitkaWZmZXJlbmNlcy4gSG93ZXZlciwgaW4gdGhlIGNhc2UgdGhlIHRvb2wgaXMgcmFuIG9uIGEgImRlYnVnIiBwYWNrYWdlCitpdCB3aWxsIG1vc3QgbGlrZWx5IGZhbHNlbHkgc2F5IHRoZSBwYWNrYWdlcyBoYXZlIG5vIGRpZmZlcmVuY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitUaGUgcGFja2FnZSBkaWZmZXJlbmNlIHRvb2wgaXMgY29ycmVjdGx5IGxhYmVsbGluZyB0aGUgcGFja2FnZXMgYXMgZGlmZmVyZW50Cit3aGVuIHRoZSBEV0FSRiBzZWN0aW9ucyBkb24ndCBtYXRjaCBkdWUgdG8gcGF0aHMuIFRoZSBwYXRocyBpbiB0aGUgZGVidWcgaW5mbworc2hvdWxkIGFjdHVhbGx5IGJlIG1hZGUgdG8gYmUgdGhlIHNhbWUgdXNpbmcgY29tcGlsZSBmbGFncyBvciBzb21lIG90aGVyCittZWNoYW5pc20uCisKK0hvd2V2ZXIsIHRvIG1ha2UgdGhlIHRvb2wgbW9yZSB1c2VmdWwgdG8gWW9jdG8gdW50aWwgdGhlIHdvcmsgY2FuIGJlIGRvbmUKK3RvIGVuc3VyZSBpZGVudGljYWwgcGF0aHMgaW4gZGVidWcgc2VjdGlvbnMsIHRoaXMgcGF0Y2ggaXMgYmVpbmcgYXBwbGllZC4KKworU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHBrZy1kaWZmLnNoIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAoraW5kZXggNTYwMzVjMS4uMGYxZmE3NiAxMDA3NTUKKy0tLSBhL3BrZy1kaWZmLnNoCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTY1OCw3ICs2NTgsNyBAQCBjaGVja19zaW5nbGVfZmlsZSgpCisgICAgICAgIGVjaG8gIiIgPiRmaWxlMQorICAgICAgICBlY2hvICIiID4kZmlsZTIKKyAgICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKy0gICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKysgICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiAtZSAiXC5kZWJ1Z19hYmJyZXYiIC1lICJcLmRlYnVnX2FyYW5nZXMiIC1lICJcLmRlYnVnX2ZyYW1lIiAtZSAiXC5kZWJ1Z19pbmZvIiAtZSAiXC5kZWJ1Z19saW5lIiAtZSAiXC5kZWJ1Z19sb2MiIC1lICJcLmRlYnVnX21hY2luZm8iIC1lICJcLmRlYnVnX3B1Ym5hbWVzIiAtZSAiXC5kZWJ1Z19wdWJ0eXBlcyIgLWUgIlwuZGVidWdfcmFuZ2VzIiAgLWUgIlwuZGVidWdfc3RyIiB8IHRyICJcbiIgIiAiKSIKKyAgICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworICAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorICAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvUmVuYW1lLXJwbS1jaGVjay5zaC10by1wa2ctZGlmZi5zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmYzYTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvUmVuYW1lLXJwbS1jaGVjay5zaC10by1wa2ctZGlmZi5zaC5wYXRjaApAQCAtMCwwICsxLDE1OTkgQEAKK0Zyb20gNGRlM2RmNWExYjM2MWNkMDlhMDgxZjBlMGJkYjk0Y2JmNjg0ZWQ0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAwMDozNDo0NyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnBtLWNoZWNrLnNoIHRvIHBrZy1kaWZmLnNoLgorCitUaGUgdG9vbCBub3cgYWNjZXB0cyBwYWNrYWdlIGlucHV0IG90aGVyIHRoYW4gcnBtLCBzbyBjaGFuZ2UgdGhlIG5hbWUKK3doaWNoIGNvdWxkIGJlIG1pc2xlYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZS9wdWxsc10KKworU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KKworVXBkYXRlZCBmb3IgcnBtLWNoZWNrLnNoLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJ1aWxkLWNvbXBhcmUuc3BlYyAgIHwgICAgMiArLQorIHBrZy1kaWZmLnNoICAgICAgICAgIHwgIDc2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIHJwbS1jaGVjay5zaCAgICAgICAgIHwgIDc2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc2FtZS1idWlsZC1yZXN1bHQuc2ggfCAgICA0ICstCisgNCBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgNzY3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBwa2ctZGlmZi5zaAorIGRlbGV0ZSBtb2RlIDEwMDc1NSBycG0tY2hlY2suc2gKKworZGlmZiAtLWdpdCBhL2J1aWxkLWNvbXBhcmUuc3BlYyBiL2J1aWxkLWNvbXBhcmUuc3BlYworaW5kZXggMTRhOTdlOS4uNWY0N2NhMSAxMDA2NDQKKy0tLSBhL2J1aWxkLWNvbXBhcmUuc3BlYworKysrIGIvYnVpbGQtY29tcGFyZS5zcGVjCitAQCAtMjUsNyArMjUsNyBAQCBWZXJzaW9uOiAgICAgICAgMjAxNS4wMi4xMAorIFJlbGVhc2U6ICAgICAgICAwCisgU291cmNlMTogICAgICAgIENPUFlJTkcKKyBTb3VyY2UyOiAgICAgICAgc2FtZS1idWlsZC1yZXN1bHQuc2gKKy1Tb3VyY2UzOiAgICAgICAgcnBtLWNoZWNrLnNoCisrU291cmNlMzogICAgICAgIHBrZy1kaWZmLnNoCisgU291cmNlNDogICAgICAgIGZ1bmN0aW9ucy5zaAorIFNvdXJjZTU6ICAgICAgICBzcnBtLWNoZWNrLnNoCisgQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAorZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41NjAzNWMxCistLS0gL2Rldi9udWxsCisrKysgYi9wa2ctZGlmZi5zaAorQEAgLTAsMCArMSw3NjUgQEAKKysjISAvYmluL2Jhc2gKKysjCisrIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgU1VTRSBMaW51eCBQcm9kdWN0IEdtYkgsIEdlcm1hbnkuCisrIyBMaWNlbnNlZCB1bmRlciBHUEwgdjIsIHNlZSBDT1BZSU5HIGZpbGUgZm9yIGRldGFpbHMuCisrIworKyMgV3JpdHRlbiBieSBNaWNoYWVsIE1hdHogYW5kIFN0ZXBoYW4gQ29vbG8KKysjIEVuaGFuY2VkIGJ5IEFuZHJlYXMgSmFlZ2VyCisrCisrRlVOQ1RJT05TPSR7MCUvKn0vZnVuY3Rpb25zLnNoCisrCisrY2hlY2tfYWxsPQorK2Nhc2UgJDEgaW4KKysgIC1hIHwgLS1jaGVjay1hbGwpCisrICAgIGNoZWNrX2FsbD0xCisrICAgIHNoaWZ0CisrZXNhYworKworK2lmIHRlc3QgIiQjIiAhPSAyOyB0aGVuCisrICAgZWNobyAidXNhZ2U6ICQwIFstYXwtLWNoZWNrLWFsbF0gb2xkLnJwbSBuZXcucnBtIgorKyAgIGV4aXQgMQorK2ZpCisrCisrc2VsZl9zY3JpcHQ9JChjZCAkKGRpcm5hbWUgJDApOyBlY2hvICQocHdkKS8kKGJhc2VuYW1lICQwKSkKKysKKytzb3VyY2UgJEZVTkNUSU9OUworKworK29sZHBrZz1gcmVhZGxpbmsgLWYgJDFgCisrbmV3cGtnPWByZWFkbGluayAtZiAkMmAKKytyZW5hbWVfc2NyaXB0PWBta3RlbXBgCisrCisraWYgdGVzdCAhIC1mICIkb2xkcGtnIjsgdGhlbgorKyAgICBlY2hvICJjYW4ndCBvcGVuICQxIgorKyAgICBleGl0IDEKKytmaQorKworK2lmIHRlc3QgISAtZiAiJG5ld3BrZyI7IHRoZW4KKysgICAgZWNobyAiY2FuJ3Qgb3BlbiAkMiIKKysgICAgZXhpdCAxCisrZmkKKysKKysjdXNhZ2UgdW5qYXIgPGZpbGU+CisrZnVuY3Rpb24gdW5qYXIoKQorK3sKKysgICAgbG9jYWwgZmlsZQorKyAgICBmaWxlPSQxCisrCisrICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9ZmFzdGphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1qYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj11bnppcAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCisrICAgICAgICBleGl0IDEKKysgICAgZmkKKysKKysgICAgY2FzZSAkVU5KQVIgaW4KKysgICAgICAgIGphcnxmYXN0amFyKQorKyAgICAgICAgIyBlY2hvIGphciAteGYgJGZpbGUKKysgICAgICAgICR7VU5KQVJ9IC14ZiAkZmlsZQorKyAgICAgICAgOzsKKysgICAgICAgIHVuemlwKQorKyAgICAgICAgdW56aXAgLW9xcSAkZmlsZQorKyAgICAgICAgOzsKKysgICAgZXNhYworK30KKysKKysjIGxpc3QgZmlsZXMgaW4gZGlyZWN0b3J5CisrI3VzYWdlIHVuamFyX2wgPGZpbGU+CisrZnVuY3Rpb24gdW5qYXJfbCgpCisreworKyAgICBsb2NhbCBmaWxlCisrICAgIGZpbGU9JDEKKysKKysgICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1mYXN0amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPXVuemlwCisrICAgIGVsc2UKKysgICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKysgICAgICAgIGV4aXQgMQorKyAgICBmaQorKworKyAgICBjYXNlICRVTkpBUiBpbgorKyAgICAgICAgamFyfGZhc3RqYXIpCisrICAgICAgICAke1VOSkFSfSAtdGYgJGZpbGUKKysgICAgICAgIDs7CisrICAgICAgICB1bnppcCkKKysgICAgICAgIHVuemlwIC1sICRmaWxlCisrICAgICAgICA7OworKyAgICBlc2FjCisrfQorKworK2ZpbHRlcl9kaXNhc20oKQorK3sKKysgICBzZWQgLWUgJ3MvXiAqWzAtOWEtZl1cKzovLycgLWUgJ3MvXCQweFswLTlhLWZdXCsvJHNvbWV0aGluZy8nIC1lICdzL2NhbGxxICpbMC05YS1mXVwrL2NhbGxxIC8nIC1lICdzLyMgKlswLTlhLWZdXCsvIyAgLycgLWUgJ3MvXCgweFwpXD9bMC05YS1mXVwrKC9vZmZzZXQoLycgLWUgJ3MvWzAtOWEtZl1cKyA8LzwvJyAtZSAncy9ePFwoLipcKT46L1wxOi8nIC1lICdzLzxcKC4qXCkrMHhbMC05YS1mXVwrPi88XDEgKyBvZnM+LycgCisrfQorKworK2VjaG8gIkNvbXBhcmluZyBgYmFzZW5hbWUgJG9sZHBrZ2AgdG8gYGJhc2VuYW1lICRuZXdwa2dgIgorKworK2Nhc2UgJG9sZHBrZyBpbgorKyAgKi5ycG0pCisrICAgICBjbXBfc3BlYyAkcmVuYW1lX3NjcmlwdCAkb2xkcGtnICRuZXdwa2cKKysgICAgIFJFUz0kPworKyAgICAgY2FzZSAkUkVTIGluCisrICAgICAgIDApCisrICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGlkZW50aWNhbCIKKysgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgZXhpdCAwCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgIDEpCisrICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGRpZmZlcmVudCIKKysgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgZXhpdCAxCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgIDIpCisrICAgICAgICAgIGVjaG8gIlJQTSBmaWxlIGNoZWNrc3VtIGRpZmZlcnMuIgorKyAgICAgICAgICBSRVM9MAorKyAgICAgICAgICA7OworKyAgICAgICAqKQorKyAgICAgICAgICBlY2hvICJXcm9uZyBleGl0IGNvZGUhIgorKyAgICAgICAgICBleGl0IDEKKysgICAgICAgICAgOzsKKysgICAgIGVzYWMKKysgICAgIDs7CisrZXNhYworKworK2ZpbGUxPWBta3RlbXBgCisrZmlsZTI9YG1rdGVtcGAKKysKKytkaXI9YG1rdGVtcCAtZGAKKytlY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorK3VucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCisrdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKysKKysjIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKysjIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorK2lmIFsgLXogJFJFUyBdOyB0aGVuCisrICAgIG9sZGZpbGVzPWBjZCAkZGlyL29sZDsgZmluZCAuIC10eXBlIGZgCisrICAgIG5ld2ZpbGVzPWBjZCAkZGlyL25ldzsgZmluZCAuIC10eXBlIGZgCisrCisrICAgIGZpbGVzPWBlY2hvIC1lICIkb2xkZmlsZXNcbiRuZXdmaWxlcyIgfCBzb3J0IC11YAorK2ZpCisrCisrY2QgJGRpcgorK2Jhc2ggJHJlbmFtZV9zY3JpcHQKKysKKytkZmlsZT1gbWt0ZW1wYAorKworK2RpZmZfdHdvX2ZpbGVzKCkKKyt7CisrICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCisrICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKyAgICAgaGV4ZHVtcCAtQyBvbGQvJGZpbGUgPiAkZmlsZTEKKysgICAgIGhleGR1bXAgLUMgbmV3LyRmaWxlID4gJGZpbGUyCisrICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwMAorKyAgICAgcmV0dXJuIDEKKysgIGZpCisrICByZXR1cm4gMAorK30KKysKKyt0cmltX21hbl9maXJzdF9saW5lKCkKKyt7CisrICAgICMgSGFuZGxlcyB0aGUgZmlyc3QgbGluZSBpZiBpdCBpcyBsaWtlOgorKyAgICAjLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjggKFBvZDo6U2ltcGxlIDMuMjgpCisrICAgICMuXCIgRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhICBJdCB3YXMgZ2VuZXJhdGVkIGJ5IGhlbHAybWFuIDEuNDMuMy4KKysgICAgbG9jYWwgZj0kMQorKyAgICBzZWQgLWkgLWUgJzF7CisrICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0F1dG9tYXRpY2FsbHlbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXVBvZDo6TWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIFBvZDo6TWFufAorKyAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtET1tbOmJsYW5rOl1dTk9UW1s6Ymxhbms6XV1NT0RJRllbWzpibGFuazpdXVRISVNbWzpibGFuazpdXUZJTEUhW1s6Ymxhbms6XV1cK0l0W1s6Ymxhbms6XV13YXNbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXWhlbHAybWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIGhlbHAybWFufAorKyAgICB9JyAkZgorK30KKysKKyt0cmltX21hbl9USCgpCisreworKyAgICAjIEhhbmRsZXMgbGluZXMgbGlrZToKKysgICAgIyAuVEggZGViaGVscGVyIDcgIjIwMTAtMDItMjciICI3LjQuMTUiICJEZWJoZWxwZXIiCisrICAgICMgLlRIIERJUk1OR1ItQ0xJRU5UIDEgMjAxMC0wMi0yNyAiRGlybW5nciAxLjAuMyIgIkdOVSBQcml2YWN5IEd1YXJkIgorKyAgICAjIC5USCBjY21ha2UgMSAiTWFyY2ggMDYsIDIwMTAiICJjY21ha2UgMi44LjEtcmMzIgorKyAgICAjIC5USCBRRU1VLUlNRyAxICIyMDEwLTAzLTE0IiAiICIgIiAiCisrICAgICMgLlRIIGtkZWNtYWtlIDEgIk1heSAwNywgMjAxMCIgImNtYWtlIDIuOC4xIgorKyAgICAjIC5USCAiYXBwZW5kZXIuaCIgMyAiMTIgTWF5IDIwMTAiICJWZXJzaW9uIDEuMi4xIiAibG9nNGMiIFwiIC0qLSBucm9mZiAtKi0KKysgICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCisrICAgICMgLlRIICJPRkZMSU5FSU1BUCIgIjEiICIxMSBNYXkgMjAxMCIgIkpvaG4gR29lcnplbiIgIk9mZmxpbmVJTUFQIE1hbnVhbCIKKysgICAgIyAuVEggZ3YgM2d1aWxlICIxMyBNYXkgMjAxMCIKKysgICAgIy5USCAiR0lUXC1BUkNISU1QT1JUIiAiMSIgIjA5LzEzLzIwMTAiICJHaXQgMVwmLjdcJi4xIiAiR2l0IE1hbnVhbCIKKysgICAgIyAuVEggTERJUkVDVE9SRCA4ICIyMDEwLTEwLTIwIiAicGVybCB2NS4xMi4yIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iCisrICAgICMgLlRIIGNjbWFrZSAxICJGZWJydWFyeSAwNSwgMjAxMiIgImNjbWFrZSAyLjguNyIKKysgICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCisrICAgICMgLlRIIEFSQ0ggIjEiICJTZXB0ZW1iZXIgMjAxMCIgIkdOVSBjb3JldXRpbHMgOC41IiAiVXNlciBDb21tYW5kcyIKKysgICAgIyAuVEggIkdDTS1DQUxJQlJBVEUiICIxIiAiMDMgRmVicnVhcnkgMjAxMiIgIiIgIiIKKysgICAgIy5USCBMb2NhbGU6OlBvNGE6OlhtbC5wbSAzcG0gIjIwMTUtMDEtMzAiICJQbzRhIFRvb2xzIiAiUG80YSBUb29scyIKKysgICAgbG9jYWwgZj0kMQorKyAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAicXEyMDAwLTAxLTAxIlwzfCcgJGYKKysgICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJ1cTIwMDAtMDItMDIiXDN8JyAkZgorKyAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSBxdTIwMDAtMDMtMDNcM3wnICRmCisrICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSB1dTIwMDAtMDQtMDRcM3wnICRmCisrfQorKworK3N0cmlwX251bWJlcmVkX2FuY2hvcnMoKQorK3sKKysgICMgUmVtb3ZlIG51bWJlcmVkIGFuY2hvcnMgb24gRG9jYm9vayAvIEhUTUwgZmlsZXMuCisrICAjIFRoaXMgc2hvdWxkIGJlIHNhdmUgc2luY2Ugd2UgcmVtb3ZlIHRoZW0gZnJvbSBvbGQgYW5kIG5ldyBmaWxlcy4KKysgICMgQSB0cmFpbGluZyA8L2E+IG9yIDwvZGl2PiB0YWcgd2lsbCBzdGF5IGFsc28gb24gYm90aCBmaWxlcy4KKysgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICBzZWQgLWkgLWUgJ3MlPFsgXSphWyBdXCtuYW1lW148XSpbMC05XVwrW148XSolJWcnIFwKKysgICAgIC1lICdzJTxbIF0qYVsgXVwraHJlZltePF0qI1tePF0qWzAtOV1cK1tePF0qJSVnJyBcCisrICAgICAtZSAncyU8W148XSppZD0iZnRuXC5bXjxdKlswLTldXCtbXjxdKiUlZycgJGYKKysgIGRvbmUKKyt9CisrCisrCisrY2hlY2tfY29tcHJlc3NlZF9maWxlKCkKKyt7CisrICBsb2NhbCBmaWxlPSQxCisrICBsb2NhbCBleHQ9JDIKKysgIGxvY2FsIHRtcGRpcj1gbWt0ZW1wIC1kYAorKyAgbG9jYWwgZnR5cGUKKysgIGxvY2FsIHJldD0wCisrICBlY2hvICIkZXh0IGZpbGUgd2l0aCBvZGQgZmlsZW5hbWU6ICRmaWxlIgorKyAgaWYgdGVzdCAtbiAiJHRtcGRpciI7IHRoZW4KKysgICAgbWtkaXIgJHRtcGRpci97b2xkLG5ld30KKysgICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2Ugb2xkLyRmaWxlICR0bXBkaXIvCisrICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG5ldy8kZmlsZSAkdG1wZGlyLworKyAgICBpZiBwdXNoZCAkdG1wZGlyID4gL2Rldi9udWxsIDsgdGhlbgorKyAgICAgIGNhc2UgIiRleHQiIGluCisrICAgICAgICBiejIpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmJ6Mn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuYnoyfQorKyAgICAgICAgICBiemlwMiAtZCBvbGQvJGZpbGUuYnoyCisrICAgICAgICAgIGJ6aXAyIC1kIG5ldy8kZmlsZS5iejIKKysgICAgICAgICAgOzsKKysgICAgICAgIGd6aXApCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmd6fQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5nen0KKysgICAgICAgICAgZ3ppcCAtZCBvbGQvJGZpbGUuZ3oKKysgICAgICAgICAgZ3ppcCAtZCBuZXcvJGZpbGUuZ3oKKysgICAgICAgICAgOzsKKysgICAgICAgIHh6KQorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC54en0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywueHp9CisrICAgICAgICAgIHh6IC1kIG9sZC8kZmlsZS54egorKyAgICAgICAgICB4eiAtZCBuZXcvJGZpbGUueHoKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorKyAgICAgIGNhc2UgJGZ0eXBlIGluCisrICAgICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorKyAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgICAgQVNDSUlcIGNwaW9cIGFyY2hpdmVcICopCisrICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorKyAgICAgICAgICAgIHJldD0xCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgICAqKQorKyAgICAgICAgICBlY2hvICJ1bmhhbmRsZWQgJGV4dCBjb250ZW50OiAkZnR5cGUiCisrICAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICBmaQorKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICBwb3BkID4gL2Rldi9udWxsCisrICAgIGZpCisrICAgIHJtIC1yZiAiJHRtcGRpciIKKysgIGZpCisrICByZXR1cm4gJHJldAorK30KKysKKytjaGVja19zaW5nbGVfZmlsZSgpCisreworKyAgbG9jYWwgZmlsZT0iJDEiCisrICBjYXNlICRmaWxlIGluCisrICAgICouc3BlYykKKysgICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTEsUmVsZWFzZTogQFJFTEVBU0VALCIgb2xkLyRmaWxlCisrICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UyLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG5ldy8kZmlsZQorKyAgICAgICA7OworKyAgICAqLmV4ZS5tZGJ8Ki5kbGwubWRiKQorKyAgICAgICAjIEp1c3QgZGVidWcgaW5mb3JtYXRpb24sIHdlIGNhbiBza2lwIHRoZW0KKysgICAgICAgZWNobyAiJGZpbGUgc2tpcHBlZCBhcyBkZWJ1ZyBmaWxlLiIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi5hKQorKyAgICAgICBmbGlzdD1gYXIgdCBuZXcvJGZpbGVgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi5jcGlvKQorKyAgICAgICBmbGlzdD1gY3BpbyAtLXF1aWV0IC0tbGlzdCAtLWZvcmNlLWxvY2FsIDwgIm5ldy8kZmlsZSJgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9JGZpbGUuZXh0cmFjdC4kUFBJRC4kJAorKyAgICAgICBta2RpciBvbGQvJGZkaXIgbmV3LyRmZGlyCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcm0gLXJmIG9sZC8kZmRpciBuZXcvJGZkaXIKKysgICAgICAgcmV0dXJuICRyZXQKKysgICAgICAgOzsKKysgICAgKi50YXJ8Ki50YXIuYnoyfCoudGFyLmd6fCoudGd6fCoudGJ6MikKKysgICAgICAgZmxpc3Q9YHRhciB0ZiBuZXcvJGZpbGVgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGxvY2FsIHJldD0wCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgIGZpCisrICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICByZXR1cm4gJHJldAorKyAgICAgICA7OworKyAgICAqLnppcHwqLmphcnwqLndhcikKKysgICAgICAgY2Qgb2xkCisrICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydCA+IGZsaXN0CisrICAgICAgICMgIDEwLTA1LTIwMTAgMTQ6MzkKKysgICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CisrICAgICAgICMgMjAxMi0wMi0wMyAwNzo1OQorKyAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICBjZCAuLi9uZXcKKysgICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0PiBmbGlzdAorKyAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLDsgIiBmbGlzdAorKyAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorKyAgICAgICBjZCAuLgorKyAgICAgICBpZiAhIGNtcCAtcyBvbGQvZmxpc3QgbmV3L2ZsaXN0OyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlIGhhcyBkaWZmZXJlbnQgZmlsZSBsaXN0IgorKyAgICAgICAgICBkaWZmIC11IG9sZC9mbGlzdCBuZXcvZmxpc3QKKysgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgZmxpc3Q9YGdyZXAgZGF0ZSBuZXcvZmxpc3QgfCBzZWQgLWUgJ3MsLiogZGF0ZSAsLCdgCisrICAgICAgIHB3ZD0kUFdECisrICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCisrICAgICAgIGNkIG9sZC8kZmRpcgorKyAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBsb2NhbCByZXQ9MAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgaWYgdGVzdCAtZiBuZXcvJGZkaXIvJGYgJiYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorKyAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICBmaQorKyAgICAgICAgIGZpCisrICAgICAgIGRvbmUKKysgICAgICAgcmV0dXJuICRyZXQ7OworKyAgICAgKi5weWN8Ki5weW8pCisrICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnb2xkLyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCisrICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnbmV3LyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCisrICAgICAgICA7OworKyAgICAgKi5iejIpCisrICAgICAgICBidW56aXAyIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmJ6Mi99CisrICAgICAgICBidW56aXAyIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmJ6Mi99CisrICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmJ6Mi99CisrICAgICAgICByZXR1cm4gJD8KKysgICAgICAgIDs7CisrICAgICAqLmd6KQorKyAgICAgICAgZ3VuemlwIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmd6L30KKysgICAgICAgIGd1bnppcCAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5nei99CisrICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmd6L30KKysgICAgICAgIHJldHVybiAkPworKyAgICAgICAgOzsKKysgICAgICoucnBtKQorKwkkc2VsZl9zY3JpcHQgLWEgb2xkLyRmaWxlIG5ldy8kZmlsZQorKyAgICAgICAgcmV0dXJuICQ/CisrICAgICAgICA7OworKyAgICAgKnBuZykKKysJIyBUcnkgdG8gcmVtb3ZlIHRpbWVzdGFtcHMsIG9ubHkgaWYgY29udmVydCBmcm9tIEltYWdlTWFnaWNrIGlzIGluc3RhbGxlZAorKyAgICAgICAgaWYgW1sgJCh0eXBlIC1wIGNvbnZlcnQpIF1dOyB0aGVuCisrCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9CisrCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9CisrCSAgaWYgISBjbXAgLXMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ307IHRoZW4KKysJICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysJICAgICAgaGV4ZHVtcCAtQyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMQorKwkgICAgICBoZXhkdW1wIC1DIG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUyCisrCSAgICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAKKysJICAgICAgcmV0dXJuIDEKKysJICBmaQorKwkgIHJldHVybiAwCisrCWZpCisrICAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9sb2NhbGUvKi9MQ19NRVNTQUdFUy8qLm1vfC91c3Ivc2hhcmUvbG9jYWxlLWJ1bmRsZS8qL0xDX01FU1NBR0VTLyoubW8pCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICJzLFBPVC1DcmVhdGlvbi1EYXRlOiAuLi4uLS4uLS4uIC4uOi4uKy4uLi4sUE9ULUNyZWF0aW9uLURhdGU6IDE5NzAtMDEtMDEgMDA6MDArMDAwMCwiICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvZG9jL3BhY2thZ2VzLyovKi5odG1sfFwKKysgICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qLmh0bWx8L3Vzci9zaGFyZS9kb2MvKi9odG1sLyouaHRtbCkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAjIHRleGkyaHRtbCBvdXRwdXQsIGUuZy4gaW4ga3ZtLCBpbmRlbnQsIHFlbXUKKysJIHNlZCAtaSAtZSAic3xePCEtLSBDcmVhdGVkIG9uIC4qLCAyMC4uIGJ5IHRleGkyaHRtbCAuXC4uLnw8IS0tIENyZWF0ZWQgb24gQXVndXN0IDcsIDIwMDkgYnkgdGV4aTJodG1sIDEuODJ8IiAkZgorKwkgc2VkIC1pIC1lICdzfF4gKlRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPi4qLCAyMC4uPC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgLlwuLi48L2VtPjwvYT4uJHwgIFRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPkF1Z3VzdCA3LCAyMDA5PC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgMS44MjwvZW0+PC9hPi58JyAkZgorKwkgIyBkb3h5Z2VuIGRvY3UsIGUuZy4gaW4gbGlic3NoIGFuZCBsb2c0YworKwkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIDIwWzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCisrCSAjIEdlbmVyYXRlZCBvbiBTYXQgQXVnIDE0IDIwMTAgMTY6NDk6NDggZm9yIGxpYnNzaAorKwkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiAyMFswLTldWzAtOV0gWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyouaHRtbCB8XAorKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovKi5odG1sfC91c3Ivc2hhcmUvamF2YWRvYy8qLyovKi5odG1sKQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgICMgVGhlcmUgYXJlIG1vcmUgdGltZXN0YW1wcyBpbiBodG1sLCBzbyBmYXIgd2UgaGFuZGxlIG9ubHkgc29tZSBwcmltaXRpdmUgdmVyc2lvbnMuCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyBKYXZhZG9jOgorKyAgICAgICAgICAjIDxoZWFkPgorKyAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKHZlcnNpb24gMS43LjBfNzUpIG9uIFR1ZSBGZWIgMDMgMDI6MjA6MTIgR01UIDIwMTUgLS0+CisrICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUdWUgRmViIDAzIDAwOjAyOjQ4IEdNVCAyMDE1IC0tPgorKyAgICAgICAgICAjIDxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMTUtMDItMDMiPgorKyAgICAgICAgICAjIDwvaGVhZD4KKysgICAgICAgICAgc2VkIC1pIC1lICcKKysgICAgICAgICAgICAvXjxoZWFkPi97CisrICAgICAgICAgICAgICA6IG5leHQKKysgICAgICAgICAgICAgIG4KKysgICAgICAgICAgICAgIC9ePFwvaGVhZD4veworKyAgICAgICAgICAgICAgICBiIGVuZF9oZWFkCisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKChcKGJ1aWxkXHx2ZXJzaW9uXCkgWzAtOS5fXVwrKSBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFw1LworKyAgICAgICAgICAgICAgdCBuZXh0CisrICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDMvCisrICAgICAgICAgICAgICB0IG5leHQKKysgICAgICAgICAgICAgIHMvXjxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IlswLTldXHs0XH0tWzAtOV1cezJcfS1bMC05XVx7Mlx9Ij4vPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0ic29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSI+LworKyAgICAgICAgICAgICAgYiBuZXh0CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIDogZW5kX2hlYWQKKysgICAgICAgICAgJyAkZgorKyAgICAgICAgICMgR2pkb2MgSHRtbERvY2xldDoKKysJIHNlZCAtaSAtZSAncyVHZW5lcmF0ZWQgYnkgR2pkb2MgSHRtbERvY2xldCBbMC05LC5dKiwgcGFydCBvZiA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2NwLXRvb2xzLyIgdGl0bGU9IiIgdGFyZ2V0PSJfdG9wIj5HTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gLiosIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULiVHZW5lcmF0ZWQgYnkgR2pkb2MuJScgJGYKKysJIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXCguKlwpR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIFtBLVpdW2Etel0qIFswLTldKiwgMjA/PyBbMC05XSo6Pz86Pz8gXChhfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcMUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBKYW51YXJ5IDEsIDIwMDkgMDowMDowMCBhLm0uIEdNVC48L3A+JScgJGYKKysJIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcKC4qR05VIENsYXNzcGF0aCBUb29sczwvYT5cKSwgb24gW2EtekEtWl0qIFswLTldWzAtOV0sIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXDEsb24gTWF5IDEsIDIwMTAgMToxMTo0MiBwLm0uIEdNVC48L3A+JScgJGYKKysJICMgZGVwcmVjYXRlZC1saXN0IGlzIHJhbmRvbWx5IG9yZGVyZWQsIHNvcnQgaXQgZm9yIGNvbXBhcmlzb24KKysJIGNhc2UgJGYgaW4KKysJICAgKi9kZXByZWNhdGVkLWxpc3QuaHRtbCkKKysJICAgICBzb3J0IC1vICRmICRmCisrCSAgICAgOzsKKysJIGVzYWMKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jL2dqZG9jLnByb3BlcnRpZXMgfFwKKysgICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qL2dqZG9jLnByb3BlcnRpZXMpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSBzZWQgLWkgLWUgJ3N8XiNbQS1aXVthLXpdXHsyXH0gW0EtWl1bYS16XVx7Mlx9IFswLTldXHsyXH0gLi46Li46Li4gR01UIDIwLi4kfCNGcmkgSmFuIDAxIDExOjI3OjM2IEdNVCAyMDA5fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgKi9mb250cy5zY2FsZXwqL2ZvbnRzLmRpcnwqL2VuY29kaW5ncy5kaXIpCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIyBzb3J0IGZpbGVzIGJlZm9yZSBjb21wYXJpbmcKKysgICAgICAgICBzb3J0IC1vICRmICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC92YXIvYWRtL3BlcmwtbW9kdWxlcy8qKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAnc3xePWhlYWQyIC4uLiAuLi4gLi4gLi46Li46Li4gLi4uLjogQzxNb2R1bGU+fD1oZWFkMiBXZWQgSnVsICAxIDAwOjAwOjAwIDIwMDk6IEM8TW9kdWxlPnwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvbWFuL21hbjMvKjNwbSkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgJ3N8IDMgIjIwLi4tLi4tLi4iICJwZXJsIHY1Li4uLi4iICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIkfCAzICIyMDA5LTAxLTAxIiAicGVybCB2NS4xMC4wIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24ifCcgJGYKKysgICAgICAgICB0cmltX21hbl9USCAkZgorKyAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9tYW4vKi9tYW4qfC91c3Ivc2hhcmUvbWFuL21hbip8L3Vzci9saWIvdGV4bWYvZG9jL21hbi8qLyopCisrCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgdHJpbV9tYW5fVEggJGYKKysgICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCisrICAgICAgICAgIyBnZW5lcmF0ZWQgYnkgZG9jYm9vayB4bWw6CisrICAgICAgICAgIy5cIiAgICAgIERhdGU6IDA5LzEzLzIwMTAKKysgICAgICAgICBzZWQgLWkgLWUgJ3N8RGF0ZTogWzAtMV1bMC05XS9bMC05XVswLTldLzIwMVswLTldfERhdGU6IDA5LzEzLzIwMTB8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAqLmVsYykKKysgICAgICAgIyBlbWFjcyBsaXNwIGZpbGVzCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICdzfENvbXBpbGVkIGJ5IGFidWlsZEAuKiBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIDIwLi4kfGNvbXBpbGVkIGJ5IGFidWlsZEBidWlsZGhvc3Qgb24gV2VkIEp1bCAwMSAwMDowMDowMCAyMDA5fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvKi8qZm10IHxcCisrICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhZm9udC8qLmJhc2V8XAorKyAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YXBvc3QvKi5tZW0pCisrICAgICAgICMgYmluYXJ5IGR1bXAgb2YgVGVYIGFuZCBNZXRhZm9udCBmb3JtYXRzLCB3ZSBjYW4gaWdub3JlIHRoZW0gZm9yIGdvb2QKKysgICAgICAgZWNobyAiZGlmZmVyZW5jZSBpbiAkZmlsZSBpZ25vcmVkLiIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgICovbGlidG9vbCkKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysJICBzZWQgLWkgLWUgJ3N8XiMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IFtBLVphLXowLTldKjokfCMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IHg0Mjp8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvZXRjL21haWwvKmNmfC9ldGMvc2VuZG1haWwuY2YpCisrICAgICAgICMgZnJvbSBzZW5kbWFpbCBwYWNrYWdlCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSAgIyAtICMjIyMjIGJ1aWx0IGJ5IGFidWlsZEBidWlsZDMzIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMAorKwkgIHNlZCAtaSAtZSAnc3xidWlsdCBieSBhYnVpbGRAW2EtejAtOV0qIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gLiogMjBbMC05XVswLTldfGJ1aWx0IGJ5IGFidWlsZEBidWlsZDQyIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi9pbmRleC5jYWNoZXwvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi9pbmRleC5jYWNoZXxcCisrICAgICAvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouaHRtbHwvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouZGV2aGVscDIpCisrICAgICAgICMgdmFyaW91cyBrZGUgYW5kIGd0ayBwYWNrYWdlcworKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICovY3JlYXRlZC5yaWQpCisrICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCisrICAgICAgICMgZmlsZSBqdXN0IGNvbnRhaW5zIGEgdGltZXN0YW1wIGFuZCBub3RoaW5nIGVsc2UsIHNvIGlnbm9yZSBpdAorKyAgICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICovcmRvYy9maWxlcy8qLmh0bWwpCisrICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCisrICAgICAgICMgPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPgorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICBzZWQgLWkgLWUgJ3MlPHRkPltBLVpdW2Etel1bYS16XSBbQS1aXVthLXpdW2Etel0gWzAtOV1cKyBbMC05XVwrOlswLTldXCs6WzAtOV1cKyArMDAwMCAyMDFbMC05XTwvdGQ+JTx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4lZycgJGYKKysgICAgICAgZG9uZQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICovTGludXgqRW52LlNldC5zaCkKKysgICAgICAgIyBMaWJyZU9mZmljZSBmaWxlcywgY29udGFpbnM6CisrICAgICAgICMgR2VuZXJhdGVkIG9uOiBNb24gQXByIDE4IDEzOjE5OjIyIFVUQyAyMDExCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrCSBzZWQgLWkgLWUgJ3MlXiMgR2VuZXJhdGVkIG9uOi4qVVRDIDIwMVswLTldICokJSMgR2VuZXJhdGVkIG9uOiBTb21ldGltZSVnJyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgIC91c3IvbGliL2xpYnJlb2ZmaWNlL3NvbHZlci9pbmMvKi9kZWxpdmVyLmxvZykKKysgICAgICAgIyBMaWJyZU9mZmljZSBsb2cgZmlsZQorKyAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKysgICAgICByZXR1cm4gMAorKyAgICAgIDs7CisrICAgIC92YXIvYWRtL3VwZGF0ZS1tZXNzYWdlcy8qfC92YXIvYWRtL3VwZGF0ZS1zY3JpcHRzLyopCisrICAgICAgIyBlbmNvZGUgdmVyc2lvbi1yZWxlYXNlIGluc2lkZQorKyAgICAgIG9sZGZuPWBlY2hvICIkZmlsZSJ8c2VkIC1lIHMvLSRyZWxlYXNlMi8tJHJlbGVhc2UxLztgCisrCisrICAgICAgIyBmZXRjaG1zdHRmb250cyBlbWJlZHMgdGhlIHJlbGVhc2UgbnVtYmVyIGluIHRoZSB1cGRhdGUgc2hlbGwgc2NyaXB0LgorKyAgICAgIGVjaG8gc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCisrICAgICAgc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCisrCisrICAgICAgaWYgISBkaWZmIC11IG9sZC8kb2xkZm4gbmV3LyRmaWxlOyB0aGVuCisrICAgICAgICAgICBlY2hvICIkb2xkZm4gaXMgbm90IHNhbWUgYXMgJGZpbGUiCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgIGZpCisrICAgICAgZWNobyAiJGZpbGUgYW5kICRvbGRmbiBhcmUgc2FtZSIKKysgICAgICByZXR1cm4gMAorKyAgICAgIDs7CisrICAgICoucHMpCisrICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCisrICAgICAgICBzZWQgLWkgLWUgJworKyAgICAgICAgICAvXiUlQ3JlYXRpb25EYXRlOltbOmJsYW5rOl1dL2QKKysgICAgICAgICAgL14lJUNyZWF0b3I6W1s6Ymxhbms6XV1ncm9mZltbOmJsYW5rOl1ddmVyc2lvbltbOmJsYW5rOl1dL2QKKysgICAgICAgICAgL14lRFZJUFNTb3VyY2U6W1s6Ymxhbms6XV0vZAorKyAgICAgICAgJyAiJGYiCisrICAgICAgZG9uZQorKyAgICA7OworKyAgICAqcGRmKQorKyAgICAgICMgUERGIGZpbGVzIGNvbnRhaW4gYSB1bmlxdWUgSUQsIHJlbW92ZSBpdAorKyAgICAgICMgRm9ybWF0IG9mIHRoZSBJRCBpczoKKysgICAgICAjIC9JRCBbPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPiA8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+XQorKyAgICAgICMgd2l0aCBvcHRpb25hbCBzcGFjZXMuIHBkZnRleCBjcmVhdGVzIGFsc286CisrICAgICAgIyAvQ3JlYXRpb25EYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKysgICAgICAjIC9Nb2REYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKysgICAgICAjIGFuZCBwb3NzaWJseSBYTUwgbWV0YWRhdGEgYXMgd2VsbAorKyAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworKyAgICAgICAgc2VkIC1pIFwKKysgICAgICAgICAgICAnL29iai8sL2VuZG9iai97CisrICAgICAgICAgICAgICAgcyUvSUQgXD9cWyBcPzxbXj5dXCs+IFw/PFtePl1cKz4gXD9cXSUvSURyYW5kb20lZzsKKysgICAgICAgICAgICAgICBzJS9DcmVhdGlvbkRhdGUgXD8oRDpbXildKiklL0NyZWF0aW9uRGF0ZSAoRDogWFhYKSVnOworKyAgICAgICAgICAgICAgIHMlL01vZERhdGUgXD8oRDpbXildKiklL01vZERhdGUgKEQ6IFhYWCklZzsKKysgICAgICAgICAgICAgICBzJTxwZGY6Q3JlYXRpb25EYXRlPltePF0qPC9wZGY6Q3JlYXRpb25EYXRlPiU8cGRmOkNyZWF0aW9uRGF0ZT5YWFg8L3BkZjpDcmVhdGlvbkRhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8cGRmOk1vZERhdGU+W148XSo8L3BkZjpNb2REYXRlPiU8cGRmOk1vZERhdGU+WFhYPC9wZGY6TW9kRGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTx4YXA6Q3JlYXRlRGF0ZT5bXjxdKjwveGFwOkNyZWF0ZURhdGU+JTx4YXA6Q3JlYXRlRGF0ZT5YWFg8L3hhcDpDcmVhdGVEYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHhhcDpNb2RpZnlEYXRlPltePF0qPC94YXA6TW9kaWZ5RGF0ZT4lPHhhcDpNb2RpZnlEYXRlPlhYWDwveGFwOk1vZGlmeURhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8eGFwOk1ldGFkYXRhRGF0ZT5bXjxdKjwveGFwOk1ldGFkYXRhRGF0ZT4lPHhhcDpNZXRhZGF0YURhdGU+WFhYPC94YXA6TWV0YWRhdGFEYXRlPiVnOworKyAgICAgICAgICAgIH0nICIkZiIKKysgICAgICBkb25lCisrICAgICAgOzsKKysgIGVzYWMKKysKKysgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKysgIGNhc2UgJGZ0eXBlIGluCisrICAgICBQRTMyXCBleGVjdXRhYmxlKk1vbm9cL1wuTmV0XCBhc3NlbWJseSopCisrICAgICAgIGVjaG8gIlBFMzIgTW9uby8uTmV0IGFzc2VtYmx5OiAkZmlsZSIKKysgICAgICAgaWYgWyAteCAvdXNyL2Jpbi9tb25vZGlzIF0gOyB0aGVuCisrICAgICAgICAgbW9ub2RpcyBvbGQvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTF9CisrICAgICAgICAgbW9ub2RpcyBuZXcvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTJ9CisrICAgICAgICAgaWYgISBjbXAgLXMgJHtmaWxlMX0gJHtmaWxlMn07IHRoZW4KKysgICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICAgICAgICBkaWZmIC11ICR7ZmlsZTF9ICR7ZmlsZTJ9CisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgIGZpCisrICAgICAgIGVsc2UKKysgICAgICAgICBlY2hvICJDYW5ub3QgY29tcGFyZSwgbm8gbW9ub2RpcyBpbnN0YWxsZWQiCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgRUxGKmV4ZWN1dGFibGUqfEVMRipbTE1dU0JcIHNoYXJlZFwgb2JqZWN0KikKKysgICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gb2xkLyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMQorKyAgICAgICBpZiAhIHRlc3QgLXMgJGZpbGUxOyB0aGVuCisrICAgICAgICAgIyBvYmpkdW1wIGhhcyBubyBpZGVhIGhvdyB0byBoYW5kbGUgaXQKKysgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgYnJlYWsKKysgICAgICAgICBmaQorKyAgICAgICBmaSAgICAgICAKKysgICAgICAgZWxmZGlmZj0KKysgICAgICAgc2VkIC1pIC1lICJzLG9sZC8sLCIgJGZpbGUxCisrICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG5ldy8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTIKKysgICAgICAgc2VkIC1pIC1lICJzLG5ldy8sLCIgJGZpbGUyCisrICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCisrICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gYXNzZW1ibGVyIG91dHB1dCIKKysgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCisrICAgICAgICAgIGVsZmRpZmY9IjEiCisrICAgICAgIGZpCisrICAgICAgIGVjaG8gIiIgPiRmaWxlMQorKyAgICAgICBlY2hvICIiID4kZmlsZTIKKysgICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKysgICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKysgICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworKyAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorKyAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorKyAgICAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIEVMRiBzZWN0aW9uICRzZWN0aW9uIgorKyAgICAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKysgICAgICAgICAgICAgZWxmZGlmZj0iMSIKKysgICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICBpZiB0ZXN0IC16ICIkZWxmZGlmZiI7IHRoZW4KKysgICAgICAgICAgZWNobyAiJGZpbGU6IG9ubHkgZGlmZmVyZW5jZSB3YXMgaW4gYnVpbGQtaWQgb3IgZ251X2RlYnVnbGluaywgR09PRC4iCisrICAgICAgICAgIHJldHVybiAwCisrICAgICAgIGZpCisrICAgICAgIHJldHVybiAxCisrICAgICAgIDs7CisrICAgICAqQVNDSUkqfCp0ZXh0KikKKysgICAgICAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorKyAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICAgICAgZGlmZiAtdSBvbGQvJGZpbGUgbmV3LyRmaWxlIHwgaGVhZCAtbiAyMDAKKysgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgZGlyZWN0b3J5fHNldHVpZCxcIGRpcmVjdG9yeXxzdGlja3ksXCBkaXJlY3RvcnkpCisrICAgICAgICMgdGFyIG1pZ2h0IHBhY2thZ2UgZGlyZWN0b3JpZXMgLSBpZ25vcmUgdGhlbSBoZXJlCisrICAgICAgIHJldHVybiAwCisrICAgICAgIDs7CisrICAgICBiemlwMlwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImJ6MiI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBnemlwXCBjb21wcmVzc2VkXCBkYXRhKikKKysgICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiZ3ppcCI7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBYWlwgY29tcHJlc3NlZFwgZGF0YSopCisrICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgInh6IjsgdGhlbgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorKyAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCisrICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIGNwaW9cIGFyY2hpdmUpCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCisrICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgIDs7CisrICAgICBzeW1ib2xpY1wgbGlua1wgdG9cICopCisrICAgICAgIHJlYWRsaW5rICJvbGQvJGZpbGUiID4gJGZpbGUxCisrICAgICAgIHJlYWRsaW5rICJuZXcvJGZpbGUiID4gJGZpbGUyCisrICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyOyB0aGVuCisrICAgICAgICAgZWNobyAic3ltbGluayB0YXJnZXQgZm9yICRmaWxlIGRpZmZlcnMiCisrICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgICopCisrICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisrICByZXR1cm4gMAorK30KKysKKysjIFdlIG5lZWQgL3Byb2MgbW91bnRlZCBmb3Igc29tZSB0ZXN0cywgc28gY2hlY2sgdGhhdCBpdCdzIG1vdW50ZWQgYW5kCisrIyBjb21wbGFpbiBpZiBub3QuCisrUFJPQ19NT1VOVEVEPTAKKytpZiBbICEgLWQgL3Byb2Mvc2VsZi8gXTsgdGhlbgorKyAgZWNobyAiL3Byb2MgaXMgbm90IG1vdW50ZWQiCisrICBtb3VudCAtb3J3IC1uIC10cHJvYyBub25lIC9wcm9jCisrICBQUk9DX01PVU5URUQ9MQorK2ZpCisrCisrIyBwcmVzZXJ2ZSBjbXBfc3BlYyByZXN1bHQgZm9yIGNoZWNrX2FsbCBydW5zCisrcmV0PSRSRVMKKytmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisrICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmlsZTsgdGhlbgorKyAgICAgICByZXQ9MQorKyAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgYnJlYWsKKysgICAgICAgZmkKKysgICBmaQorK2RvbmUKKysKKytpZiBbICIkUFJPQ19NT1VOVEVEIiAtZXEgIjEiIF07IHRoZW4KKysgIGVjaG8gIlVubW91bnRpbmcgcHJvYyIKKysgIHVtb3VudCAvcHJvYworK2ZpCisrCisrcm0gJGZpbGUxICRmaWxlMiAkZGZpbGUgJHJlbmFtZV9zY3JpcHQKKytybSAtcmYgJGRpcgorK2lmIHRlc3QgIiRyZXQiID0gMDsgdGhlbgorKyAgICAgZWNobyAiUGFja2FnZSBjb250ZW50IGlzIGlkZW50aWNhbCIKKytmaQorK2V4aXQgJHJldAorKyMgdmltOiB0dz02NjYgdHM9MiBldAorZGlmZiAtLWdpdCBhL3JwbS1jaGVjay5zaCBiL3JwbS1jaGVjay5zaAorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCBkZDQ3NjQyLi4wMDAwMDAwCistLS0gYS9ycG0tY2hlY2suc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDc2NCArMCwwIEBACistIyEgL2Jpbi9iYXNoCistIworLSMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIFNVU0UgTGludXggUHJvZHVjdCBHbWJILCBHZXJtYW55LgorLSMgTGljZW5zZWQgdW5kZXIgR1BMIHYyLCBzZWUgQ09QWUlORyBmaWxlIGZvciBkZXRhaWxzLgorLSMKKy0jIFdyaXR0ZW4gYnkgTWljaGFlbCBNYXR6IGFuZCBTdGVwaGFuIENvb2xvCistIyBFbmhhbmNlZCBieSBBbmRyZWFzIEphZWdlcgorLQorLUZVTkNUSU9OUz0kezAlLyp9L2Z1bmN0aW9ucy5zaAorLQorLWNoZWNrX2FsbD0KKy1jYXNlICQxIGluCistICAtYSB8IC0tY2hlY2stYWxsKQorLSAgICBjaGVja19hbGw9MQorLSAgICBzaGlmdAorLWVzYWMKKy0KKy1pZiB0ZXN0ICIkIyIgIT0gMjsgdGhlbgorLSAgIGVjaG8gInVzYWdlOiAkMCBbLWF8LS1jaGVjay1hbGxdIG9sZC5ycG0gbmV3LnJwbSIKKy0gICBleGl0IDEKKy1maQorLQorLXNlbGZfc2NyaXB0PSQoY2QgJChkaXJuYW1lICQwKTsgZWNobyAkKHB3ZCkvJChiYXNlbmFtZSAkMCkpCistCistc291cmNlICRGVU5DVElPTlMKKy0KKy1vbGRwa2c9YHJlYWRsaW5rIC1mICQxYAorLW5ld3BrZz1gcmVhZGxpbmsgLWYgJDJgCistcmVuYW1lX3NjcmlwdD1gbWt0ZW1wYAorLQorLWlmIHRlc3QgISAtZiAiJG9sZHBrZyI7IHRoZW4KKy0gICAgZWNobyAiY2FuJ3Qgb3BlbiAkMSIKKy0gICAgZXhpdCAxCistZmkKKy0KKy1pZiB0ZXN0ICEgLWYgIiRuZXdwa2ciOyB0aGVuCistICAgIGVjaG8gImNhbid0IG9wZW4gJDIiCistICAgIGV4aXQgMQorLWZpCistCistI3VzYWdlIHVuamFyIDxmaWxlPgorLWZ1bmN0aW9uIHVuamFyKCkKKy17CistICAgIGxvY2FsIGZpbGUKKy0gICAgZmlsZT0kMQorLQorLSAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWZhc3RqYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9dW56aXAKKy0gICAgZWxzZQorLSAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorLSAgICAgICAgZXhpdCAxCistICAgIGZpCistCistICAgIGNhc2UgJFVOSkFSIGluCistICAgICAgICBqYXJ8ZmFzdGphcikKKy0gICAgICAgICMgZWNobyBqYXIgLXhmICRmaWxlCistICAgICAgICAke1VOSkFSfSAteGYgJGZpbGUKKy0gICAgICAgIDs7CistICAgICAgICB1bnppcCkKKy0gICAgICAgIHVuemlwIC1vcXEgJGZpbGUKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy19CistCistIyBsaXN0IGZpbGVzIGluIGRpcmVjdG9yeQorLSN1c2FnZSB1bmphcl9sIDxmaWxlPgorLWZ1bmN0aW9uIHVuamFyX2woKQorLXsKKy0gICAgbG9jYWwgZmlsZQorLSAgICBmaWxlPSQxCistCistICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9ZmFzdGphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1qYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCistICAgICAgICBVTkpBUj11bnppcAorLSAgICBlbHNlCistICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCistICAgICAgICBleGl0IDEKKy0gICAgZmkKKy0KKy0gICAgY2FzZSAkVU5KQVIgaW4KKy0gICAgICAgIGphcnxmYXN0amFyKQorLSAgICAgICAgJHtVTkpBUn0gLXRmICRmaWxlCistICAgICAgICA7OworLSAgICAgICAgdW56aXApCistICAgICAgICB1bnppcCAtbCAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgZXNhYworLX0KKy0KKy1maWx0ZXJfZGlzYXNtKCkKKy17CistICAgc2VkIC1lICdzL14gKlswLTlhLWZdXCs6Ly8nIC1lICdzL1wkMHhbMC05YS1mXVwrLyRzb21ldGhpbmcvJyAtZSAncy9jYWxscSAqWzAtOWEtZl1cKy9jYWxscSAvJyAtZSAncy8jICpbMC05YS1mXVwrLyMgIC8nIC1lICdzL1woMHhcKVw/WzAtOWEtZl1cKygvb2Zmc2V0KC8nIC1lICdzL1swLTlhLWZdXCsgPC88LycgLWUgJ3MvXjxcKC4qXCk+Oi9cMTovJyAtZSAncy88XCguKlwpKzB4WzAtOWEtZl1cKz4vPFwxICsgb2ZzPi8nIAorLX0KKy0KKy1lY2hvICJDb21wYXJpbmcgYGJhc2VuYW1lICRvbGRwa2dgIHRvIGBiYXNlbmFtZSAkbmV3cGtnYCIKKy0KKy1jYXNlICRvbGRwa2cgaW4KKy0gICoucnBtKQorLSAgICAgY21wX3NwZWMgJHJlbmFtZV9zY3JpcHQgJG9sZHBrZyAkbmV3cGtnCistICAgICBSRVM9JD8KKy0gICAgIGNhc2UgJFJFUyBpbgorLSAgICAgICAwKQorLSAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBpZGVudGljYWwiCistICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGV4aXQgMAorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAxKQorLSAgICAgICAgICBlY2hvICJSUE0gbWV0YSBpbmZvcm1hdGlvbiBpcyBkaWZmZXJlbnQiCistICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGV4aXQgMQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAyKQorLSAgICAgICAgICBlY2hvICJSUE0gZmlsZSBjaGVja3N1bSBkaWZmZXJzLiIKKy0gICAgICAgICAgUkVTPTAKKy0gICAgICAgICAgOzsKKy0gICAgICAgKikKKy0gICAgICAgICAgZWNobyAiV3JvbmcgZXhpdCBjb2RlISIKKy0gICAgICAgICAgZXhpdCAxCistICAgICAgICAgIDs7CistICAgICBlc2FjCistICAgICA7OworLWVzYWMKKy0KKy1maWxlMT1gbWt0ZW1wYAorLWZpbGUyPWBta3RlbXBgCistCistZGlyPWBta3RlbXAgLWRgCistZWNobyAiRXh0cmFjdGluZyBwYWNrYWdlcyIKKy11bnBhY2thZ2UgJG9sZHBrZyAkZGlyL29sZAorLXVucGFja2FnZSAkbmV3cGtnICRkaXIvbmV3CistCistIyBmaWxlcyBpcyBzZXQgaW4gY21wX3NwZWMgZm9yIHJwbXMsIHNvIGlmIFJFUyBpcyBlbXB0eSB3ZSBzaG91bGQgYXNzdW1lCistIyBpdCB3YXNuJ3QgYW4gcnBtIGFuZCBwaWNrIGFsbCBmaWxlcyBmb3IgY29tcGFyaXNvbi4KKy1pZiBbIC16ICRSRVMgXTsgdGhlbgorLSAgICBvbGRmaWxlcz1gY2QgJGRpci9vbGQ7IGZpbmQgLiAtdHlwZSBmYAorLSAgICBuZXdmaWxlcz1gY2QgJGRpci9uZXc7IGZpbmQgLiAtdHlwZSBmYAorLQorLSAgICBmaWxlcz1gZWNobyAtZSAiJG9sZGZpbGVzXG4kbmV3ZmlsZXMiIHwgc29ydCAtdWAKKy1maQorLQorLWNkICRkaXIKKy1iYXNoICRyZW5hbWVfc2NyaXB0CistCistZGZpbGU9YG1rdGVtcGAKKy0KKy1kaWZmX3R3b19maWxlcygpCisteworLSAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0gICAgIGhleGR1bXAgLUMgb2xkLyRmaWxlID4gJGZpbGUxCistICAgICBoZXhkdW1wIC1DIG5ldy8kZmlsZSA+ICRmaWxlMgorLSAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMDAKKy0gICAgIHJldHVybiAxCistICBmaQorLSAgcmV0dXJuIDAKKy19CistCistdHJpbV9tYW5fZmlyc3RfbGluZSgpCisteworLSAgICAjIEhhbmRsZXMgdGhlIGZpcnN0IGxpbmUgaWYgaXQgaXMgbGlrZToKKy0gICAgIy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI4IChQb2Q6OlNpbXBsZSAzLjI4KQorLSAgICAjLlwiIERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFISAgSXQgd2FzIGdlbmVyYXRlZCBieSBoZWxwMm1hbiAxLjQzLjMuCistICAgIGxvY2FsIGY9JDEKKy0gICAgc2VkIC1pIC1lICcxeworLSAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtBdXRvbWF0aWNhbGx5W1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1Qb2Q6Ok1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBQb2Q6Ok1hbnwKKy0gICAgc3xeXC5cXCJbWzpibGFuazpdXVwrRE9bWzpibGFuazpdXU5PVFtbOmJsYW5rOl1dTU9ESUZZW1s6Ymxhbms6XV1USElTW1s6Ymxhbms6XV1GSUxFIVtbOmJsYW5rOl1dXCtJdFtbOmJsYW5rOl1dd2FzW1s6Ymxhbms6XV1nZW5lcmF0ZWRbWzpibGFuazpdXWJ5W1s6Ymxhbms6XV1oZWxwMm1hbltbOmJsYW5rOl1dLip8LlxcIiBPdmVybHkgdmVyYm9zZSBoZWxwMm1hbnwKKy0gICAgfScgJGYKKy19CistCistdHJpbV9tYW5fVEgoKQorLXsKKy0gICAgIyBIYW5kbGVzIGxpbmVzIGxpa2U6CistICAgICMgLlRIIGRlYmhlbHBlciA3ICIyMDEwLTAyLTI3IiAiNy40LjE1IiAiRGViaGVscGVyIgorLSAgICAjIC5USCBESVJNTkdSLUNMSUVOVCAxIDIwMTAtMDItMjcgIkRpcm1uZ3IgMS4wLjMiICJHTlUgUHJpdmFjeSBHdWFyZCIKKy0gICAgIyAuVEggY2NtYWtlIDEgIk1hcmNoIDA2LCAyMDEwIiAiY2NtYWtlIDIuOC4xLXJjMyIKKy0gICAgIyAuVEggUUVNVS1JTUcgMSAiMjAxMC0wMy0xNCIgIiAiICIgIgorLSAgICAjIC5USCBrZGVjbWFrZSAxICJNYXkgMDcsIDIwMTAiICJjbWFrZSAyLjguMSIKKy0gICAgIyAuVEggImFwcGVuZGVyLmgiIDMgIjEyIE1heSAyMDEwIiAiVmVyc2lvbiAxLjIuMSIgImxvZzRjIiBcIiAtKi0gbnJvZmYgLSotCistICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorLSAgICAjIC5USCAiT0ZGTElORUlNQVAiICIxIiAiMTEgTWF5IDIwMTAiICJKb2huIEdvZXJ6ZW4iICJPZmZsaW5lSU1BUCBNYW51YWwiCistICAgICMgLlRIIGd2IDNndWlsZSAiMTMgTWF5IDIwMTAiCistICAgICMuVEggIkdJVFwtQVJDSElNUE9SVCIgIjEiICIwOS8xMy8yMDEwIiAiR2l0IDFcJi43XCYuMSIgIkdpdCBNYW51YWwiCistICAgICMgLlRIIExESVJFQ1RPUkQgOCAiMjAxMC0xMC0yMCIgInBlcmwgdjUuMTIuMiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIgorLSAgICAjIC5USCBjY21ha2UgMSAiRmVicnVhcnkgMDUsIDIwMTIiICJjY21ha2UgMi44LjciCistICAgICMgLlRI4oCCImFwcGVuZGVyLmgi4oCCM+KAgiJUdWXigIJBdWfigIIzMeKAgjIwMTAi4oCCIlZlcnNpb27igIIxLjIuMSLigIIibG9nNGMi4oCCXCLigIItKi3igIJucm9mZuKAgi0qLQorLSAgICAjIC5USCBBUkNIICIxIiAiU2VwdGVtYmVyIDIwMTAiICJHTlUgY29yZXV0aWxzIDguNSIgIlVzZXIgQ29tbWFuZHMiCistICAgICMgLlRIICJHQ00tQ0FMSUJSQVRFIiAiMSIgIjAzIEZlYnJ1YXJ5IDIwMTIiICIiICIiCistICAgICMuVEggTG9jYWxlOjpQbzRhOjpYbWwucG0gM3BtICIyMDE1LTAxLTMwIiAiUG80YSBUb29scyIgIlBvNGEgVG9vbHMiCistICAgIGxvY2FsIGY9JDEKKy0gICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInFxMjAwMC0wMS0wMSJcM3wnICRmCistICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAidXEyMDAwLTAyLTAyIlwzfCcgJGYKKy0gICAgIyAoLlRIICAgcXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgcXUyMDAwLTAzLTAzXDN8JyAkZgorLSAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cK1teIl1bXls6Ymxhbms6XV1cK1tbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woW14iXVteWzpibGFuazpdXVwrXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgdXUyMDAwLTA0LTA0XDN8JyAkZgorLX0KKy0KKy1zdHJpcF9udW1iZXJlZF9hbmNob3JzKCkKKy17CistICAjIFJlbW92ZSBudW1iZXJlZCBhbmNob3JzIG9uIERvY2Jvb2sgLyBIVE1MIGZpbGVzLgorLSAgIyBUaGlzIHNob3VsZCBiZSBzYXZlIHNpbmNlIHdlIHJlbW92ZSB0aGVtIGZyb20gb2xkIGFuZCBuZXcgZmlsZXMuCistICAjIEEgdHJhaWxpbmcgPC9hPiBvciA8L2Rpdj4gdGFnIHdpbGwgc3RheSBhbHNvIG9uIGJvdGggZmlsZXMuCistICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgc2VkIC1pIC1lICdzJTxbIF0qYVsgXVwrbmFtZVtePF0qWzAtOV1cK1tePF0qJSVnJyBcCistICAgICAtZSAncyU8WyBdKmFbIF1cK2hyZWZbXjxdKiNbXjxdKlswLTldXCtbXjxdKiUlZycgXAorLSAgICAgLWUgJ3MlPFtePF0qaWQ9ImZ0blwuW148XSpbMC05XVwrW148XSolJWcnICRmCistICBkb25lCistfQorLQorLQorLWNoZWNrX2NvbXByZXNzZWRfZmlsZSgpCisteworLSAgbG9jYWwgZmlsZT0kMQorLSAgbG9jYWwgZXh0PSQyCistICBsb2NhbCB0bXBkaXI9YG1rdGVtcCAtZGAKKy0gIGxvY2FsIGZ0eXBlCistICBsb2NhbCByZXQ9MAorLSAgZWNobyAiJGV4dCBmaWxlIHdpdGggb2RkIGZpbGVuYW1lOiAkZmlsZSIKKy0gIGlmIHRlc3QgLW4gIiR0bXBkaXIiOyB0aGVuCistICAgIG1rZGlyICR0bXBkaXIve29sZCxuZXd9CistICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG9sZC8kZmlsZSAkdG1wZGlyLworLSAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBuZXcvJGZpbGUgJHRtcGRpci8KKy0gICAgaWYgcHVzaGQgJHRtcGRpciA+IC9kZXYvbnVsbCA7IHRoZW4KKy0gICAgICBjYXNlICIkZXh0IiBpbgorLSAgICAgICAgYnoyKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5iejJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmJ6Mn0KKy0gICAgICAgICAgYnppcDIgLWQgb2xkLyRmaWxlLmJ6MgorLSAgICAgICAgICBiemlwMiAtZCBuZXcvJGZpbGUuYnoyCistICAgICAgICAgIDs7CistICAgICAgICBnemlwKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5nen0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuZ3p9CistICAgICAgICAgIGd6aXAgLWQgb2xkLyRmaWxlLmd6CistICAgICAgICAgIGd6aXAgLWQgbmV3LyRmaWxlLmd6CistICAgICAgICAgIDs7CistICAgICAgICB4eikKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywueHp9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnh6fQorLSAgICAgICAgICB4eiAtZCBvbGQvJGZpbGUueHoKKy0gICAgICAgICAgeHogLWQgbmV3LyRmaWxlLnh6CistICAgICAgICAgIDs7CistICAgICAgZXNhYworLSAgICAgIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKy0gICAgICBjYXNlICRmdHlwZSBpbgorLSAgICAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKy0gICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICAgIEFTQ0lJXCBjcGlvXCBhcmNoaXZlXCAqKQorLSAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKy0gICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAgKikKKy0gICAgICAgICAgZWNobyAidW5oYW5kbGVkICRleHQgY29udGVudDogJGZ0eXBlIgorLSAgICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgZmkKKy0gICAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgcG9wZCA+IC9kZXYvbnVsbAorLSAgICBmaQorLSAgICBybSAtcmYgIiR0bXBkaXIiCistICBmaQorLSAgcmV0dXJuICRyZXQKKy19CistCistY2hlY2tfc2luZ2xlX2ZpbGUoKQorLXsKKy0gIGxvY2FsIGZpbGU9IiQxIgorLSAgY2FzZSAkZmlsZSBpbgorLSAgICAqLnNwZWMpCistICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UxLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG9sZC8kZmlsZQorLSAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMixSZWxlYXNlOiBAUkVMRUFTRUAsIiBuZXcvJGZpbGUKKy0gICAgICAgOzsKKy0gICAgKi5leGUubWRifCouZGxsLm1kYikKKy0gICAgICAgIyBKdXN0IGRlYnVnIGluZm9ybWF0aW9uLCB3ZSBjYW4gc2tpcCB0aGVtCistICAgICAgIGVjaG8gIiRmaWxlIHNraXBwZWQgYXMgZGVidWcgZmlsZS4iCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICouYSkKKy0gICAgICAgZmxpc3Q9YGFyIHQgbmV3LyRmaWxlYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICouY3BpbykKKy0gICAgICAgZmxpc3Q9YGNwaW8gLS1xdWlldCAtLWxpc3QgLS1mb3JjZS1sb2NhbCA8ICJuZXcvJGZpbGUiYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPSRmaWxlLmV4dHJhY3QuJFBQSUQuJCQKKy0gICAgICAgbWtkaXIgb2xkLyRmZGlyIG5ldy8kZmRpcgorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJtIC1yZiBvbGQvJGZkaXIgbmV3LyRmZGlyCistICAgICAgIHJldHVybiAkcmV0CistICAgICAgIDs7CistICAgICoudGFyfCoudGFyLmJ6MnwqLnRhci5nenwqLnRnenwqLnRiejIpCistICAgICAgIGZsaXN0PWB0YXIgdGYgbmV3LyRmaWxlYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgdGFyIHhmIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBsb2NhbCByZXQ9MAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICBmaQorLSAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgcmV0dXJuICRyZXQKKy0gICAgICAgOzsKKy0gICAgKi56aXB8Ki5qYXJ8Ki53YXIpCistICAgICAgIGNkIG9sZAorLSAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQgPiBmbGlzdAorLSAgICAgICAjICAxMC0wNS0yMDEwIDE0OjM5CistICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorLSAgICAgICAjIDIwMTItMDItMDMgMDc6NTkKKy0gICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgY2QgLi4vbmV3CistICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydD4gZmxpc3QKKy0gICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICw7ICIgZmxpc3QKKy0gICAgICAgc2VkIC1pIC1lICJzLCAyMFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKy0gICAgICAgY2QgLi4KKy0gICAgICAgaWYgISBjbXAgLXMgb2xkL2ZsaXN0IG5ldy9mbGlzdDsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZSBoYXMgZGlmZmVyZW50IGZpbGUgbGlzdCIKKy0gICAgICAgICAgZGlmZiAtdSBvbGQvZmxpc3QgbmV3L2ZsaXN0CistICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIGZsaXN0PWBncmVwIGRhdGUgbmV3L2ZsaXN0IHwgc2VkIC1lICdzLC4qIGRhdGUgLCwnYAorLSAgICAgICBwd2Q9JFBXRAorLSAgICAgICBmZGlyPWBkaXJuYW1lICRmaWxlYAorLSAgICAgICBjZCBvbGQvJGZkaXIKKy0gICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QKKy0gICAgICAgbG9jYWwgcmV0PTAKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgIGlmIHRlc3QgLWYgbmV3LyRmZGlyLyRmICYmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKy0gICAgICAgICAgIHJldD0xCistICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgZmkKKy0gICAgICAgICBmaQorLSAgICAgICBkb25lCistICAgICAgIHJldHVybiAkcmV0OzsKKy0gICAgICoucHljfCoucHlvKQorLSAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ29sZC8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorLSAgICAgICAgcGVybCAtZSAib3BlbiBmaCwgJys8JywgJ25ldy8kZmlsZSc7IHNlZWsgZmgsIDQsIFNFRUtfU0VUOyBwcmludCBmaCAnMDAwMCc7IgorLSAgICAgICAgOzsKKy0gICAgICouYnoyKQorLSAgICAgICAgYnVuemlwMiAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5iejIvfQorLSAgICAgICAgYnVuemlwMiAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5iejIvfQorLSAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5iejIvfQorLSAgICAgICAgcmV0dXJuICQ/CistICAgICAgICA7OworLSAgICAgKi5neikKKy0gICAgICAgIGd1bnppcCAtYyBvbGQvJGZpbGUgPiBvbGQvJHtmaWxlLy5nei99CistICAgICAgICBndW56aXAgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uZ3ovfQorLSAgICAgICAgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlLy5nei99CistICAgICAgICByZXR1cm4gJD8KKy0gICAgICAgIDs7CistICAgICAqLnJwbSkKKy0JJHNlbGZfc2NyaXB0IC1hIG9sZC8kZmlsZSBuZXcvJGZpbGUKKy0gICAgICAgIHJldHVybiAkPworLSAgICAgICAgOzsKKy0gICAgICpwbmcpCistCSMgVHJ5IHRvIHJlbW92ZSB0aW1lc3RhbXBzLCBvbmx5IGlmIGNvbnZlcnQgZnJvbSBJbWFnZU1hZ2ljayBpcyBpbnN0YWxsZWQKKy0gICAgICAgIGlmIFtbICQodHlwZSAtcCBjb252ZXJ0KSBdXTsgdGhlbgorLQkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfQorLQkgIGNvbnZlcnQgb2xkLyRmaWxlICtzZXQgZGF0ZTpjcmVhdGUgK3NldCBkYXRlOm1vZGlmeSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfQorLQkgIGlmICEgY21wIC1zIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9OyB0aGVuCistCSAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistCSAgICAgIGhleGR1bXAgLUMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTEKKy0JICAgICAgaGV4ZHVtcCAtQyBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMgorLQkgICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwCistCSAgICAgIHJldHVybiAxCistCSAgZmkKKy0JICByZXR1cm4gMAorLQlmaQorLSAgICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbG9jYWxlLyovTENfTUVTU0FHRVMvKi5tb3wvdXNyL3NoYXJlL2xvY2FsZS1idW5kbGUvKi9MQ19NRVNTQUdFUy8qLm1vKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAicyxQT1QtQ3JlYXRpb24tRGF0ZTogLi4uLi0uLi0uLiAuLjouLisuLi4uLFBPVC1DcmVhdGlvbi1EYXRlOiAxOTcwLTAxLTAxIDAwOjAwKzAwMDAsIiAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy8qLyouaHRtbHxcCistICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi5odG1sfC91c3Ivc2hhcmUvZG9jLyovaHRtbC8qLmh0bWwpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIyB0ZXhpMmh0bWwgb3V0cHV0LCBlLmcuIGluIGt2bSwgaW5kZW50LCBxZW11CistCSBzZWQgLWkgLWUgInN8XjwhLS0gQ3JlYXRlZCBvbiAuKiwgMjAuLiBieSB0ZXhpMmh0bWwgLlwuLi58PCEtLSBDcmVhdGVkIG9uIEF1Z3VzdCA3LCAyMDA5IGJ5IHRleGkyaHRtbCAxLjgyfCIgJGYKKy0JIHNlZCAtaSAtZSAnc3xeICpUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT4uKiwgMjAuLjwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIC5cLi4uPC9lbT48L2E+LiR8ICBUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQgYnkgPGVtPkF1dG9idWlsZDwvZW0+IG9uIDxlbT5BdWd1c3QgNywgMjAwOTwvZW0+IHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIj48ZW0+dGV4aTJodG1sIDEuODI8L2VtPjwvYT4ufCcgJGYKKy0JICMgZG94eWdlbiBkb2N1LCBlLmcuIGluIGxpYnNzaCBhbmQgbG9nNGMKKy0JIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAyMFswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorLQkgIyBHZW5lcmF0ZWQgb24gU2F0IEF1ZyAxNCAyMDEwIDE2OjQ5OjQ4IGZvciBsaWJzc2gKKy0JIHNlZCAtaSAtZSAnc3xHZW5lcmF0ZWQgb24gLi4uIC4uLiBbMC05XSogMjBbMC05XVswLTldIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gZm9yIHxHZW5lcmF0ZWQgb24gTW9uIE1heSAxMCAyMDo0NTowMCAyMDEwIGZvciB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLmh0bWwgfFwKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qLyouaHRtbHwvdXNyL3NoYXJlL2phdmFkb2MvKi8qLyouaHRtbCkKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICAjIFRoZXJlIGFyZSBtb3JlIHRpbWVzdGFtcHMgaW4gaHRtbCwgc28gZmFyIHdlIGhhbmRsZSBvbmx5IHNvbWUgcHJpbWl0aXZlIHZlcnNpb25zLgorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgSmF2YWRvYzoKKy0gICAgICAgICAgIyA8aGVhZD4KKy0gICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jICh2ZXJzaW9uIDEuNy4wXzc1KSBvbiBUdWUgRmViIDAzIDAyOjIwOjEyIEdNVCAyMDE1IC0tPgorLSAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVHVlIEZlYiAwMyAwMDowMjo0OCBHTVQgMjAxNSAtLT4KKy0gICAgICAgICAgIyA8bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSIyMDE1LTAyLTAzIj4KKy0gICAgICAgICAgIyA8L2hlYWQ+CistICAgICAgICAgIHNlZCAtaSAtZSAnCistICAgICAgICAgICAgL148aGVhZD4veworLSAgICAgICAgICAgICAgOiBuZXh0CistICAgICAgICAgICAgICBuCistICAgICAgICAgICAgICAvXjxcL2hlYWQ+L3sKKy0gICAgICAgICAgICAgICAgYiBlbmRfaGVhZAorLSAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXCgoXChidWlsZFx8dmVyc2lvblwpIFswLTkuX11cKykgb24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcNS8KKy0gICAgICAgICAgICAgIHQgbmV4dAorLSAgICAgICAgICAgICAgcy9eXCg8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jXCkgXChvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFwzLworLSAgICAgICAgICAgICAgdCBuZXh0CistICAgICAgICAgICAgICBzL148bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJbMC05XVx7NFx9LVswLTldXHsyXH0tWzAtOV1cezJcfSI+LzxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9InNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUiPi8KKy0gICAgICAgICAgICAgIGIgbmV4dAorLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICA6IGVuZF9oZWFkCistICAgICAgICAgICcgJGYKKy0gICAgICAgICAjIEdqZG9jIEh0bWxEb2NsZXQ6CistCSBzZWQgLWkgLWUgJ3MlR2VuZXJhdGVkIGJ5IEdqZG9jIEh0bWxEb2NsZXQgWzAtOSwuXSosIHBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NsYXNzcGF0aC9jcC10b29scy8iIHRpdGxlPSIiIHRhcmdldD0iX3RvcCI+R05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIC4qLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC4lR2VuZXJhdGVkIGJ5IEdqZG9jLiUnICRmCistCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwoLipcKUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBbQS1aXVthLXpdKiBbMC05XSosIDIwPz8gWzAtOV0qOj8/Oj8/IFwoYXxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXDFHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gSmFudWFyeSAxLCAyMDA5IDA6MDA6MDAgYS5tLiBHTVQuPC9wPiUnICRmCistCSBzZWQgLWkgLWUgJ3MlPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXCguKkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+XCksIG9uIFthLXpBLVpdKiBbMC05XVswLTldLCAyMC4uIFswLTldKjouLjouLiBcKGFcfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwxLG9uIE1heSAxLCAyMDEwIDE6MTE6NDIgcC5tLiBHTVQuPC9wPiUnICRmCistCSAjIGRlcHJlY2F0ZWQtbGlzdCBpcyByYW5kb21seSBvcmRlcmVkLCBzb3J0IGl0IGZvciBjb21wYXJpc29uCistCSBjYXNlICRmIGluCistCSAgICovZGVwcmVjYXRlZC1saXN0Lmh0bWwpCistCSAgICAgc29ydCAtbyAkZiAkZgorLQkgICAgIDs7CistCSBlc2FjCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy9namRvYy5wcm9wZXJ0aWVzIHxcCistICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi9namRvYy5wcm9wZXJ0aWVzKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgc2VkIC1pIC1lICdzfF4jW0EtWl1bYS16XVx7Mlx9IFtBLVpdW2Etel1cezJcfSBbMC05XVx7Mlx9IC4uOi4uOi4uIEdNVCAyMC4uJHwjRnJpIEphbiAwMSAxMToyNzozNiBHTVQgMjAwOXwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgICovZm9udHMuc2NhbGV8Ki9mb250cy5kaXJ8Ki9lbmNvZGluZ3MuZGlyKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICMgc29ydCBmaWxlcyBiZWZvcmUgY29tcGFyaW5nCistICAgICAgICAgc29ydCAtbyAkZiAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdmFyL2FkbS9wZXJsLW1vZHVsZXMvKikKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8Xj1oZWFkMiAuLi4gLi4uIC4uIC4uOi4uOi4uIC4uLi46IEM8TW9kdWxlPnw9aGVhZDIgV2VkIEp1bCAgMSAwMDowMDowMCAyMDA5OiBDPE1vZHVsZT58JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL21hbi9tYW4zLyozcG0pCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICdzfCAzICIyMC4uLS4uLS4uIiAicGVybCB2NS4uLi4uIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iJHwgMyAiMjAwOS0wMS0wMSIgInBlcmwgdjUuMTAuMCIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uInwnICRmCistICAgICAgICAgdHJpbV9tYW5fVEggJGYKKy0gICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbWFuLyovbWFuKnwvdXNyL3NoYXJlL21hbi9tYW4qfC91c3IvbGliL3RleG1mL2RvYy9tYW4vKi8qKQorLQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHRyaW1fbWFuX1RIICRmCistICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorLSAgICAgICAgICMgZ2VuZXJhdGVkIGJ5IGRvY2Jvb2sgeG1sOgorLSAgICAgICAgICMuXCIgICAgICBEYXRlOiAwOS8xMy8yMDEwCistICAgICAgICAgc2VkIC1pIC1lICdzfERhdGU6IFswLTFdWzAtOV0vWzAtOV1bMC05XS8yMDFbMC05XXxEYXRlOiAwOS8xMy8yMDEwfCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgKi5lbGMpCistICAgICAgICMgZW1hY3MgbGlzcCBmaWxlcworLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAnc3xDb21waWxlZCBieSBhYnVpbGRALiogb24gLi4uIC4uLiAuLiAuLjouLjouLiAyMC4uJHxjb21waWxlZCBieSBhYnVpbGRAYnVpbGRob3N0IG9uIFdlZCBKdWwgMDEgMDA6MDA6MDAgMjAwOXwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjLyovKmZtdCB8XAorLSAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YWZvbnQvKi5iYXNlfFwKKy0gICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFwb3N0LyoubWVtKQorLSAgICAgICAjIGJpbmFyeSBkdW1wIG9mIFRlWCBhbmQgTWV0YWZvbnQgZm9ybWF0cywgd2UgY2FuIGlnbm9yZSB0aGVtIGZvciBnb29kCistICAgICAgIGVjaG8gImRpZmZlcmVuY2UgaW4gJGZpbGUgaWdub3JlZC4iCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICAqL2xpYnRvb2wpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistCSAgc2VkIC1pIC1lICdzfF4jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBbQS1aYS16MC05XSo6JHwjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCB4NDI6fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL2V0Yy9tYWlsLypjZnwvZXRjL3NlbmRtYWlsLmNmKQorLSAgICAgICAjIGZyb20gc2VuZG1haWwgcGFja2FnZQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgICMgLSAjIyMjIyBidWlsdCBieSBhYnVpbGRAYnVpbGQzMyBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTAKKy0JICBzZWQgLWkgLWUgJ3N8YnVpbHQgYnkgYWJ1aWxkQFthLXowLTldKiBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIC4qIDIwWzAtOV1bMC05XXxidWlsdCBieSBhYnVpbGRAYnVpbGQ0MiBvbiBUaHUgTWF5IDYgMTE6MjE6MTcgVVRDIDIwMTB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovaW5kZXguY2FjaGV8L3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyovaW5kZXguY2FjaGV8XAorLSAgICAgL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmh0bWx8L3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvKi8qLmRldmhlbHAyKQorLSAgICAgICAjIHZhcmlvdXMga2RlIGFuZCBndGsgcGFja2FnZXMKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAqL2NyZWF0ZWQucmlkKQorLSAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorLSAgICAgICAjIGZpbGUganVzdCBjb250YWlucyBhIHRpbWVzdGFtcCBhbmQgbm90aGluZyBlbHNlLCBzbyBpZ25vcmUgaXQKKy0gICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAqL3Jkb2MvZmlsZXMvKi5odG1sKQorLSAgICAgICAjIHJ1YnkgZG9jdW1lbnRhdGlvbgorLSAgICAgICAjIDx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4KKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAgc2VkIC1pIC1lICdzJTx0ZD5bQS1aXVthLXpdW2Etel0gW0EtWl1bYS16XVthLXpdIFswLTldXCsgWzAtOV1cKzpbMC05XVwrOlswLTldXCsgKzAwMDAgMjAxWzAtOV08L3RkPiU8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+JWcnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAqL0xpbnV4KkVudi5TZXQuc2gpCistICAgICAgICMgTGlicmVPZmZpY2UgZmlsZXMsIGNvbnRhaW5zOgorLSAgICAgICAjIEdlbmVyYXRlZCBvbjogTW9uIEFwciAxOCAxMzoxOToyMiBVVEMgMjAxMQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLQkgc2VkIC1pIC1lICdzJV4jIEdlbmVyYXRlZCBvbjouKlVUQyAyMDFbMC05XSAqJCUjIEdlbmVyYXRlZCBvbjogU29tZXRpbWUlZycgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAvdXNyL2xpYi9saWJyZW9mZmljZS9zb2x2ZXIvaW5jLyovZGVsaXZlci5sb2cpCistICAgICAgICMgTGlicmVPZmZpY2UgbG9nIGZpbGUKKy0gICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCistICAgICAgcmV0dXJuIDAKKy0gICAgICA7OworLSAgICAvdmFyL2FkbS91cGRhdGUtbWVzc2FnZXMvKnwvdmFyL2FkbS91cGRhdGUtc2NyaXB0cy8qKQorLSAgICAgICMgZW5jb2RlIHZlcnNpb24tcmVsZWFzZSBpbnNpZGUKKy0gICAgICBvbGRmbj1gZWNobyAiJGZpbGUifHNlZCAtZSBzLy0kcmVsZWFzZTIvLSRyZWxlYXNlMS87YAorLQorLSAgICAgICMgZmV0Y2htc3R0Zm9udHMgZW1iZWRzIHRoZSByZWxlYXNlIG51bWJlciBpbiB0aGUgdXBkYXRlIHNoZWxsIHNjcmlwdC4KKy0gICAgICBlY2hvIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorLSAgICAgIHNlZCAtaSAtZSAicy8tJHJlbGVhc2UxLy0kcmVsZWFzZTIvZzsiICJvbGQvJG9sZGZuIgorLQorLSAgICAgIGlmICEgZGlmZiAtdSBvbGQvJG9sZGZuIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgICAgICAgZWNobyAiJG9sZGZuIGlzIG5vdCBzYW1lIGFzICRmaWxlIgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICBmaQorLSAgICAgIGVjaG8gIiRmaWxlIGFuZCAkb2xkZm4gYXJlIHNhbWUiCistICAgICAgcmV0dXJuIDAKKy0gICAgICA7OworLSAgICAqLnBzKQorLSAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworLSAgICAgICAgc2VkIC1pIC1lICcKKy0JL14lJUNyZWF0aW9uRGF0ZTpbWzpibGFuazpdXS9kCistCS9eJSVDcmVhdG9yOltbOmJsYW5rOl1dZ3JvZmZbWzpibGFuazpdXXZlcnNpb25bWzpibGFuazpdXS9kCistCScgIiRmIgorLSAgICAgIGRvbmUKKy0gICAgOzsKKy0gICAgKnBkZikKKy0gICAgICAjIFBERiBmaWxlcyBjb250YWluIGEgdW5pcXVlIElELCByZW1vdmUgaXQKKy0gICAgICAjIEZvcm1hdCBvZiB0aGUgSUQgaXM6CistICAgICAgIyAvSUQgWzw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD4gPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPl0KKy0gICAgICAjIHdpdGggb3B0aW9uYWwgc3BhY2VzLiBwZGZ0ZXggY3JlYXRlcyBhbHNvOgorLSAgICAgICMgL0NyZWF0aW9uRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCistICAgICAgIyAvTW9kRGF0ZSAoRDoyMDEyMDEwMzA4MzIwNlopCistICAgICAgIyBhbmQgcG9zc2libHkgWE1MIG1ldGFkYXRhIGFzIHdlbGwKKy0gICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKy0gICAgICAgIHNlZCAtaSBcCistICAgICAgICAgICAgJy9vYmovLC9lbmRvYmoveworLSAgICAgICAgICAgICAgIHMlL0lEIFw/XFsgXD88W14+XVwrPiBcPzxbXj5dXCs+IFw/XF0lL0lEcmFuZG9tJWc7CistICAgICAgICAgICAgICAgcyUvQ3JlYXRpb25EYXRlIFw/KEQ6W14pXSopJS9DcmVhdGlvbkRhdGUgKEQ6IFhYWCklZzsKKy0gICAgICAgICAgICAgICBzJS9Nb2REYXRlIFw/KEQ6W14pXSopJS9Nb2REYXRlIChEOiBYWFgpJWc7CistICAgICAgICAgICAgICAgcyU8cGRmOkNyZWF0aW9uRGF0ZT5bXjxdKjwvcGRmOkNyZWF0aW9uRGF0ZT4lPHBkZjpDcmVhdGlvbkRhdGU+WFhYPC9wZGY6Q3JlYXRpb25EYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHBkZjpNb2REYXRlPltePF0qPC9wZGY6TW9kRGF0ZT4lPHBkZjpNb2REYXRlPlhYWDwvcGRmOk1vZERhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8eGFwOkNyZWF0ZURhdGU+W148XSo8L3hhcDpDcmVhdGVEYXRlPiU8eGFwOkNyZWF0ZURhdGU+WFhYPC94YXA6Q3JlYXRlRGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTx4YXA6TW9kaWZ5RGF0ZT5bXjxdKjwveGFwOk1vZGlmeURhdGU+JTx4YXA6TW9kaWZ5RGF0ZT5YWFg8L3hhcDpNb2RpZnlEYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHhhcDpNZXRhZGF0YURhdGU+W148XSo8L3hhcDpNZXRhZGF0YURhdGU+JTx4YXA6TWV0YWRhdGFEYXRlPlhYWDwveGFwOk1ldGFkYXRhRGF0ZT4lZzsKKy0gICAgICAgICAgICB9JyAiJGYiCistICAgICAgZG9uZQorLSAgICAgIDs7CistICBlc2FjCistCistICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCistICBjYXNlICRmdHlwZSBpbgorLSAgICAgUEUzMlwgZXhlY3V0YWJsZSpNb25vXC9cLk5ldFwgYXNzZW1ibHkqKQorLSAgICAgICBlY2hvICJQRTMyIE1vbm8vLk5ldCBhc3NlbWJseTogJGZpbGUiCistICAgICAgIGlmIFsgLXggL3Vzci9iaW4vbW9ub2RpcyBdIDsgdGhlbgorLSAgICAgICAgIG1vbm9kaXMgb2xkLyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUxfQorLSAgICAgICAgIG1vbm9kaXMgbmV3LyRmaWxlIDI+L2Rldi9udWxsfHNlZCAtZSAncy9HVUlEID0gey4qfS9HVUlEID0geyA0MiB9LzsnPiAke2ZpbGUyfQorLSAgICAgICAgIGlmICEgY21wIC1zICR7ZmlsZTF9ICR7ZmlsZTJ9OyB0aGVuCistICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgICAgICAgZGlmZiAtdSAke2ZpbGUxfSAke2ZpbGUyfQorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICBmaQorLSAgICAgICBlbHNlCistICAgICAgICAgZWNobyAiQ2Fubm90IGNvbXBhcmUsIG5vIG1vbm9kaXMgaW5zdGFsbGVkIgorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgIEVMRipleGVjdXRhYmxlKnxFTEYqW0xNXVNCXCBzaGFyZWRcIG9iamVjdCopCistICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG9sZC8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTEKKy0gICAgICAgaWYgISB0ZXN0IC1zICRmaWxlMTsgdGhlbgorLSAgICAgICAgICMgb2JqZHVtcCBoYXMgbm8gaWRlYSBob3cgdG8gaGFuZGxlIGl0CistICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGJyZWFrCistICAgICAgICAgZmkKKy0gICAgICAgZmkgICAgICAgCistICAgICAgIGVsZmRpZmY9CistICAgICAgIHNlZCAtaSAtZSAicyxvbGQvLCwiICRmaWxlMQorLSAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBuZXcvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUyCistICAgICAgIHNlZCAtaSAtZSAicyxuZXcvLCwiICRmaWxlMgorLSAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorLSAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIGFzc2VtYmxlciBvdXRwdXQiCistICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorLSAgICAgICAgICBlbGZkaWZmPSIxIgorLSAgICAgICBmaQorLSAgICAgICBlY2hvICIiID4kZmlsZTEKKy0gICAgICAgZWNobyAiIiA+JGZpbGUyCistICAgICAgICMgRG9uJ3QgY29tcGFyZSAuYnVpbGQtaWQgYW5kIC5nbnVfZGVidWdsaW5rIHNlY3Rpb25zCistICAgICAgIHNlY3Rpb25zPSIkKG9iamR1bXAgLXMgbmV3LyRmaWxlIHwgZ3JlcCAiQ29udGVudHMgb2Ygc2VjdGlvbiAuKjoiIHwgc2VkIC1yICJzLC4qICguKik6LFwxLGciIHwgZ3JlcCAtdiAtZSAiXC5idWlsZC1pZCIgLWUgIlwuZ251X2RlYnVnbGluayIgfCB0ciAiXG4iICIgIikiCistICAgICAgIGZvciBzZWN0aW9uIGluICRzZWN0aW9uczsgZG8KKy0gICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBvbGQvJGZpbGUgfCBzZWQgInMsXm9sZC8sLCIgPiAkZmlsZTEKKy0gICAgICAgICAgb2JqZHVtcCAtcyAtaiAkc2VjdGlvbiBuZXcvJGZpbGUgfCBzZWQgInMsXm5ldy8sLCIgPiAkZmlsZTIKKy0gICAgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKy0gICAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBFTEYgc2VjdGlvbiAkc2VjdGlvbiIKKy0gICAgICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCistICAgICAgICAgICAgIGVsZmRpZmY9IjEiCistICAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgaWYgdGVzdCAteiAiJGVsZmRpZmYiOyB0aGVuCistICAgICAgICAgIGVjaG8gIiRmaWxlOiBvbmx5IGRpZmZlcmVuY2Ugd2FzIGluIGJ1aWxkLWlkIG9yIGdudV9kZWJ1Z2xpbmssIEdPT0QuIgorLSAgICAgICAgICByZXR1cm4gMAorLSAgICAgICBmaQorLSAgICAgICByZXR1cm4gMQorLSAgICAgICA7OworLSAgICAgKkFTQ0lJKnwqdGV4dCopCistICAgICAgIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKy0gICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgICAgIGRpZmYgLXUgb2xkLyRmaWxlIG5ldy8kZmlsZSB8IGhlYWQgLW4gMjAwCistICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIGRpcmVjdG9yeXxzZXR1aWQsXCBkaXJlY3Rvcnl8c3RpY2t5LFwgZGlyZWN0b3J5KQorLSAgICAgICAjIHRhciBtaWdodCBwYWNrYWdlIGRpcmVjdG9yaWVzIC0gaWdub3JlIHRoZW0gaGVyZQorLSAgICAgICByZXR1cm4gMAorLSAgICAgICA7OworLSAgICAgYnppcDJcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJiejIiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgZ3ppcFwgY29tcHJlc3NlZFwgZGF0YSopCistICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImd6aXAiOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgWFpcIGNvbXByZXNzZWRcIGRhdGEqKQorLSAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJ4eiI7IHRoZW4KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorLSAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICAgIDs7CistICAgICBjcGlvXCBhcmNoaXZlKQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorLSAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICA7OworLSAgICAgc3ltYm9saWNcIGxpbmtcIHRvXCAqKQorLSAgICAgICByZWFkbGluayAib2xkLyRmaWxlIiA+ICRmaWxlMQorLSAgICAgICByZWFkbGluayAibmV3LyRmaWxlIiA+ICRmaWxlMgorLSAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMjsgdGhlbgorLSAgICAgICAgIGVjaG8gInN5bWxpbmsgdGFyZ2V0IGZvciAkZmlsZSBkaWZmZXJzIgorLSAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICAqKQorLSAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgZXNhYworLSAgcmV0dXJuIDAKKy19CistCistIyBXZSBuZWVkIC9wcm9jIG1vdW50ZWQgZm9yIHNvbWUgdGVzdHMsIHNvIGNoZWNrIHRoYXQgaXQncyBtb3VudGVkIGFuZAorLSMgY29tcGxhaW4gaWYgbm90LgorLVBST0NfTU9VTlRFRD0wCistaWYgWyAhIC1kIC9wcm9jL3NlbGYvIF07IHRoZW4KKy0gIGVjaG8gIi9wcm9jIGlzIG5vdCBtb3VudGVkIgorLSAgbW91bnQgLW9ydyAtbiAtdHByb2Mgbm9uZSAvcHJvYworLSAgUFJPQ19NT1VOVEVEPTEKKy1maQorLQorLSMgcHJlc2VydmUgY21wX3NwZWMgcmVzdWx0IGZvciBjaGVja19hbGwgcnVucworLXJldD0kUkVTCistZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworLSAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZpbGU7IHRoZW4KKy0gICAgICAgcmV0PTEKKy0gICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgIGJyZWFrCistICAgICAgIGZpCistICAgZmkKKy1kb25lCistCistaWYgWyAiJFBST0NfTU9VTlRFRCIgLWVxICIxIiBdOyB0aGVuCistICBlY2hvICJVbm1vdW50aW5nIHByb2MiCistICB1bW91bnQgL3Byb2MKKy1maQorLQorLXJtICRmaWxlMSAkZmlsZTIgJGRmaWxlICRyZW5hbWVfc2NyaXB0Cistcm0gLXJmICRkaXIKKy1pZiB0ZXN0ICIkcmV0IiA9IDA7IHRoZW4KKy0gICAgIGVjaG8gIlBhY2thZ2UgY29udGVudCBpcyBpZGVudGljYWwiCistZmkKKy1leGl0ICRyZXQKKy0jIHZpbTogdHc9NjY2IHRzPTIgZXQKK2RpZmYgLS1naXQgYS9zYW1lLWJ1aWxkLXJlc3VsdC5zaCBiL3NhbWUtYnVpbGQtcmVzdWx0LnNoCitpbmRleCBjODkwN2UyLi43ZTliZDRmIDEwMDY0NAorLS0tIGEvc2FtZS1idWlsZC1yZXN1bHQuc2gKKysrKyBiL3NhbWUtYnVpbGQtcmVzdWx0LnNoCitAQCAtNywxMSArNywxMSBAQAorICMgRW5oYW5jZWQgYnkgQW5kcmVhcyBKYWVnZXIgPGFqQHN1c2UuZGU+CisgIworICMgVGhlIHNjcmlwdCBkZWNpZGVzIGlmIHRoZSBuZXcgYnVpbGQgZGlmZmVyZXMgZnJvbSB0aGUgZm9ybWVyIG9uZSwKKy0jIHVzaW5nIHJwbS1jaGVjay5zaC4KKysjIHVzaW5nIHBrZy1kaWZmLnNoLgorICMgVGhlIHNjcmlwdCBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgYnVpbGQgcHJvY2VzcyBhczoKKyAjIC91c3IvbGliL2J1aWxkL3NhbWUtYnVpbGQtcmVzdWx0LnNoIC8uYnVpbGQub2xkcGFja2FnZXMgL3Vzci9zcmMvcGFja2FnZXMvUlBNUyAvdXNyL3NyYy9wYWNrYWdlcy9TUlBNUworIAorLUNNUFNDUklQVD0kezAlLyp9L3JwbS1jaGVjay5zaAorK0NNUFNDUklQVD0kezAlLyp9L3BrZy1kaWZmLnNoCisgU0NNUFNDUklQVD0kezAlLyp9L3NycG0tY2hlY2suc2gKKyAKKyBjaGVja19hbGw9MQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFhNjRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiYSBmYXN0IEMvQysrIGNvbXBpbGVyIGNhY2hlIgorREVTQ1JJUFRJT04gPSAiY2NhY2hlIGlzIGEgY29tcGlsZXIgY2FjaGUuIEl0IHNwZWVkcyB1cCByZWNvbXBpbGF0aW9uIFwKK2J5IGNhY2hpbmcgdGhlIHJlc3VsdCBvZiBwcmV2aW91cyBjb21waWxhdGlvbnMgYW5kIGRldGVjdGluZyB3aGVuIHRoZSBcCitzYW1lIGNvbXBpbGF0aW9uIGlzIGJlaW5nIGRvbmUgYWdhaW4uIFN1cHBvcnRlZCBsYW5ndWFnZXMgYXJlIEMsIENcK1wrLCBcCitPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKy4iCitIT01FUEFHRSA9ICJodHRwOi8vY2NhY2hlLnNhbWJhLm9yZyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzKyIKKworREVQRU5EUyA9ICJ6bGliIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5zYW1iYS5vcmcvY2NhY2hlLmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1N2RmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZV8zLjIuMy5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgY2NhY2hlLmluYworCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1iM2MzMzdlNzY2NDU1OWE3ODlkOWY3YTkzZTUyODNjMSIKKworU1JDUkVWID0gIjRjYWQ0NmU4ZWUwMDUzMTQ0YmIwMDkxOWYwZGFkZDIwYzFmODcwMTMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvZmlsZXMvMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YmQ5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2ZpbGVzLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGY3NGM3NjEwNzkzMzA0NjMwOTg2MTY4MGI3NDFhZGM2N2FjMmEzNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2VsIFJvc2RhaGwgPGpvZWxAcm9zZGFobC5uZXQ+CitEYXRlOiBNb24sIDE3IEF1ZyAyMDE1IDE5OjA1OjE0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCByZWdyZXNzaW9uIGluIHJlY2VudCBjaGFuZ2UgcmVsYXRlZCB0byB6bGliIGluCisgbm9uc3RhbmRhcmQgbG9jYXRpb24KKworVG8gYWxsb3cgZm9yIHNwZWNpZnlpbmcgYSAtTCBmbGFnIGluIExERkxBR1MgYW5kIGhhdmUgaXQgdGFrZSBlZmZlY3QgZm9yCistbHosIDAyMjBkZTljOGViZmIxOGNhYWUyYWMxYWExNjNkMDYwZTk4Y2VhZGUgcHV0IC1seiBpbiBleHRyYV9saWJzCitpbnN0ZWFkIG9mIGV4dHJhX2xkZmxhZ3MuIEhvd2V2ZXIsIGV4dHJhX2xpYnMgaXMgc3VwcG9zZWQgdG8gY29udGFpbgorcGF0aHMgdG8gbGlicmFyaWVzIHdoaWNoIGFyZSBwcmVyZXF1aXNpdGVzIG9mIHRoZSBjY2FjaGUgbGluayBydWxlLCBhbmQKK3NvbWUgb2xkZXIgdmVyc2lvbnMgb2YgbWFrZSBnb3QgY29uZnVzZWQgYnkgc2VlaW5nIC1seiBhcyBhCitwcmVyZXF1aXNpdGUuCisKK1RoaXMgZml4IGlzIHRvIHJldmVydCAwMjIwZGU5YzhlYmZiMThjYWFlMmFjMWFhMTYzZDA2MGU5OGNlYWRlIGFuZAoraW5zdGVhZCBtYWtlIHN1cmUgdGhhdCBMREZMQUdTIGNvbWVzIGJlZm9yZSBleHRyYV9sZGZsYWdzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBNYWtlZmlsZS5pbiAgfCAgMiArLQorIE5FV1MudHh0ICAgICB8IDEwICsrKysrKysrKysKKyBjb25maWd1cmUuYWMgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGU3NTE1YjEuLmQzNjIxY2QgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yMCw3ICsyMCw3IEBAIFJBTkxJQiA9IEBSQU5MSUJACisgCisgYWxsX2NmbGFncyA9ICQoQ0ZMQUdTKQorIGFsbF9jcHBmbGFncyA9IEBERUZTQCBAZXh0cmFfY3BwZmxhZ3NAIC1EU1lTQ09ORkRJUj0kKHN5c2NvbmZkaXIpIC1JLiAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQorLWFsbF9sZGZsYWdzID0gQGV4dHJhX2xkZmxhZ3NAICQoTERGTEFHUykKKythbGxfbGRmbGFncyA9ICQoTERGTEFHUykgQGV4dHJhX2xkZmxhZ3NACisgZXh0cmFfbGlicyA9IEBleHRyYV9saWJzQAorIAorIGJhc2Vfc291cmNlcyA9IFwKK2RpZmYgLS1naXQgYS9ORVdTLnR4dCBiL05FV1MudHh0CitpbmRleCBmMTNmZWViLi5lYWVhZGY2IDEwMDY0NAorLS0tIGEvTkVXUy50eHQKKysrKyBiL05FV1MudHh0CitAQCAtMiw2ICsyLDE2IEBAIGNjYWNoZSBuZXdzCisgPT09PT09PT09PT0KKyAKKyAKKytVbnJlbGVhc2VkIDMuMi40CisrLS0tLS0tLS0tLS0tLS0tLQorKworK0J1ZyBmaXhlcworK35+fn5+fn5+fgorKworKy0gRml4ZWQgYnVpbGQgZXJyb3IgcmVsYXRlZCB0byB6bGliIG9uIHN5c3RlbXMgd2l0aCBvbGRlciBtYWtlIHZlcnNpb25zCisrICAocmVncmVzc2lvbiBpbiBjY2FjaGUgMy4yLjMpLgorKworKworIGNjYWNoZSAzLjIuMworIC0tLS0tLS0tLS0tLQorIFJlbGVhc2UgZGF0ZTogMjAxNS0wOC0xNgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGQ4Y2U5Mi4uOWU2NTU4OCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTIwLDcgKzEyMCw3IEBAIGlmIHRlc3QgeCR7dXNlX2J1bmRsZWRfemxpYn0gPSB4eWVzOyB0aGVuCisgICAgIGV4dHJhX2xpYnM9InpsaWIvbGliei5hIgorICAgICBta2RpciAtcCB6bGliCisgZWxzZQorLSAgICBleHRyYV9saWJzPSItbHoiCisrICAgIGV4dHJhX2xkZmxhZ3M9Ii1seiIKKyBmaQorIAorIGRubCBMaW5raW5nIG9uIFdpbmRvd3MgbmVlZHMgd3MyXzMyCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jZHJ0b29scy9jZHJ0b29scy1uYXRpdmVfMy4wMWEzMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGYzNmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgY2RydG9vbHMtbmF0aXZlIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiQSBzZXQgb2YgdG9vbHMgZm9yIENEIHJlY29yZGluZywgaW5jbHVkaW5nIGNkcmVjb3JkIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jZHJ0b29scy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgQ0RETC0xLjAgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zMmY2ODE3MGJlNDI0YzJjZDY0ODA0MzM3NzI2YjMxMiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9jZHJ0b29scy9hbHBoYS9jZHJ0b29scy0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzgxNzI1NTc4OTRmNDY5YjQ1ODRkMDA4ZTkzZWM0NjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgzYjVjMTI3Nzc3NzllNzhkOGI2OTQ2MWFhZTUyNDAxZjg2Mzc2OGU3ZTczOTFkNjA3MzAwMDZmOGNhZGM1YSIKKworUyA9ICIke1dPUktESVJ9L2NkcnRvb2xzLTMuMDEiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwoKSB7CisJbWFrZSBpbnN0YWxsIEdNQUtFX05PV0FSTj10cnVlIElOU19CQVNFPSR7cHJlZml4fSBERVNURElSPSR7RH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NmYxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoL3N0YW5kYXJkZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvY29uZi9hdXRvbWFrZSBzZXQgZG9jZGlyIGF1dG9tYXRpY2FsbHksIHVzZSB0aGVpciB2YWx1ZSBlbnN1cmluZyAKK2RvYyBmaWxlcyBhcmUgcGxhY2VkIGludG8gJGRhdGFkaXIvZG9jLCBub3QgJHByZWZpeC9kb2MuCisKK1JQIDUvNy8yMDExCisKK0luZGV4OiBjaHJwYXRoLTAuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjaHJwYXRoLTAuMTMub3JpZy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE0Ljc2OTkyMDI1NCArMDEwMAorKysrIGNocnBhdGgtMC4xMy9NYWtlZmlsZS5hbQkyMDExLTA3LTA1IDIzOjQwOjE5LjgxOTkyMDYzNSArMDEwMAorQEAgLTEsNyArMSw1IEBACisgU1VCRElSUyA9IHRlc3RzdWl0ZSBkZWIKKyAKKy1kb2NkaXIgPSAkKHByZWZpeCkvZG9jLyQoUEFDS0FHRSktJChWRVJTSU9OKQorLQorIGRvY19EQVRBID0gQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FCisgCisgYmluX1BST0dSQU1TID0gY2hycGF0aApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aF8wLjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2IwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJUb29sIHRvIGVkaXQgcnBhdGggaW4gRUxGIGJpbmFyaWVzIgorREVTQ1JJUFRJT04gPSAiY2hycGF0aCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgcnBhdGggKHdoZXJlIHRoZSBcCithcHBsaWNhdGlvbiBsb29rcyBmb3IgbGlicmFyaWVzKSBpbiBhbiBhcHBsaWNhdGlvbi4gSXQgZG9lcyBub3QgXAorKHlldCkgYWxsb3cgeW91IHRvIGFkZCBhbiBycGF0aCBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4iCitIT01FUEFHRSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvcHJvamVjdHMvY2hycGF0aC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy90cmFja2VyLz9hdGlkPTQxMjgwNyZncm91cF9pZD0zMTA1MiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU1JDX1VSSSA9ICJodHRwOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzL2Rvd25sb2FkLnBocC9maWxlLzM5NzkvY2hycGF0aC0wLjE2LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zdGFuZGFyZGRvYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZjhkMWQxZWUzNDVmYzhhNzkxNTU3NmY1NjQ5OTgyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiMGQ0YzU0YmFjMjk5MGUxYmRmODEzMmYyYzk0NzdhZTc1Mjg1OWQ1MjNlMTQxZTcyYjNiMTFhMTJjMjZlN2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgV2UgZG9uJ3QgaGF2ZSBhIHN0YWdlZCBjaHJwYXRoLW5hdGl2ZSBmb3IgZW5zdXJpbmcgb3VyIGJpbmFyeSBpcworIyByZWxvY2F0YWJsZSwgc28gdXNlIHRoZSBvbmUgd2UndmUganVzdCBidWlsdAorQ0hSUEFUSF9CSU5fY2xhc3MtbmF0aXZlID0gIiR7Qn0vY2hycGF0aCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGU3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UtbmF0aXZlXzMuMy4xLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgY21ha2UuaW5jCitpbmhlcml0IG5hdGl2ZQorCisjIFVzaW5nIGNtYWtlJ3MgaW50ZXJuYWwgbGliYXJjaGl2ZSwgc28gc29tZSBkZXBlbmRlbmNpZXMgYXJlIG5lZWRlZAorREVQRU5EUyArPSAiYnppcDItbmF0aXZlIHpsaWItbmF0aXZlIgorCitTUkNfVVJJICs9ICJcCisgICAgZmlsZTovL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaCBcCisiCisKKyMgRGlzYWJsZSBjY21ha2Ugc2luY2Ugd2UgZG9uJ3QgZGVwZW5kIG9uIG5jdXJzZXMKK0NNQUtFX0VYVFJBQ09ORiA9ICJcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgLURFTkFCTEVfQUNMPTAgLURIQVZFX0FDTF9MSUJBQ0xfSD0wIFwKKyAgICAtREhBVkVfU1lTX0FDTF9IPTAgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlOTNhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS5pbmMKQEAgLTAsMCArMSw1MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKK1NVTU1BUlkgPSAiQ3Jvc3MtcGxhdGZvcm0sIG9wZW4tc291cmNlIG1ha2Ugc3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbWFrZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHVibGljLmtpdHdhcmUuY29tL0J1Zy9teV92aWV3X3BhZ2UucGhwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQudHh0O21kNT0zYmE1YTZjMzQ0ODE2NTJjZTU3M2U1YzRlMWQ3MDdlNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvY21ha2UuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0zNDE3MzZkYWU4M2M5ZTM0NGI1M2VlYjFiYzdkN2JjMiIKKworQ01BS0VfTUFKT1JfVkVSU0lPTiA9ICIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3Yke0NNQUtFX01BSk9SX1ZFUlNJT059L2NtYWtlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9xdDQtZmFpbC1zaWxlbnQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MjYzODU3NmY0ZTFlNjIxZmVkNmMzNDEwZDNhMWIxMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZDY1MDIyYzZhMDcwN2YxYzcxMTJmOTllOWM5ODE2NzdmZGQ1NTE4ZjdkZGZhMGY3NzhkNGNlZTcxMTNlM2Q2IgorCitpbmhlcml0IGF1dG90b29scworCisjIFVnbHkgaGFjayB0byB3b3JrIGFyb3VuZCB1bmRlZmluZWQgT0VfUU1BS0VfUEFUSF9FWFRFUk5BTF9IT1NUX0JJTlMgdmFyaWFibGUKKyMgYW5kIHBvc3NpYmx5IG1pc3NpbmcgcW1ha2UgYmluYXJ5IChxdGJhc2UtbmF0aXZlIGNhbiBiZSByZW1vdmVkIGZyb20gc3lzcm9vdAorIyBlLmcuIGluIG9yZGVyIHRvIHVwZ3JhZGUgaXQsIGV2ZW4gd2hlbiB0aGVyZSBpcyB0YXJnZXQgcXRiYXNlKQorCisjIEZpeGVzIGVycm9ycyBsaWtlIHRoaXMgaW4gY21ha2UoLW5hdGl2ZSkuZG9fY29uZmlndXJlOgorI3wgLS0gUGVyZm9ybWluZyBUZXN0IHJ1bl9waWNfdGVzdCAtIFN1Y2Nlc3MKKyN8IENNYWtlIEVycm9yIGF0IHRtcC1lZ2xpYmMvc3lzcm9vdHMvcWVtdWFybS91c3IvbGliL2NtYWtlL1F0NUNvcmUvUXQ1Q29yZUNvbmZpZy5jbWFrZToyNyAobWVzc2FnZSk6CisjfCAgIFRoZSBpbXBvcnRlZCB0YXJnZXQgIlF0NTo6Q29yZSIgcmVmZXJlbmNlcyB0aGUgZmlsZQorI3wKKyN8ICAgICAgIi9xbWFrZSIKKyN8CisjfCAgIGJ1dCB0aGlzIGZpbGUgZG9lcyBub3QgZXhpc3QuICBQb3NzaWJsZSByZWFzb25zIGluY2x1ZGU6CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXNlZCAtaSAncy9eZmluZF9wYWNrYWdlKFF0NUNvcmUgUVVJRVQpJC8jZmluZF9wYWNrYWdlKFF0NUNvcmUgUVVJRVQpL2cnICR7U30vVGVzdHMvUnVuQ01ha2UvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0NEFuZDVBdXRvbW9jL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUIE5PX01PRFVMRSkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQgTk9fTU9EVUxFKS9nJyAke1N9L1Rlc3RzL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL15maW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCkvI2ZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUKS9nJyAke1N9L1NvdXJjZS9RdERpYWxvZy9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvVWljSW50ZXJmYWNlL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9nZW4vQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVDb3JlIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b2dlbi9hdXRvcmNjX2RlcGVuZHMvQ01ha2VMaXN0cy50eHQKK30KKworIyBFeHRyYSBmbGFncyB0byBwYXNzIHRvIGNtYWtlIGludm9rZWQgYnkgYm9vdHN0cmFwCitDTUFLRV9FWFRSQUNPTkYgPSAiIgorCitkb19jb25maWd1cmUgKCkgeworCSR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLSAke0NNQUtFX0VYVFJBQ09ORn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9PRVRvb2xjaGFpbkNvbmZpZy5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDAxNGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCkBAIC0wLDAgKzEsMTggQEAKK3NldCggQ01BS0VfU1lTVEVNX05BTUUgTGludXggKQorc2V0KCBDTUFLRV9DX0ZMQUdTICRFTlZ7Q0ZMQUdTfSBDQUNIRSBTVFJJTkcgIiIgRk9SQ0UgKQorc2V0KCBDTUFLRV9DWFhfRkxBR1MgJEVOVntDWFhGTEFHU30gIENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFIEFTTV9GTEFHUyAke0NNQUtFX0NfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0xERkxBR1NfRkxBR1MgJHtDTUFLRV9DWFhfRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIICRFTlZ7T0VDT1JFX1RBUkdFVF9TWVNST09UfSAkRU5We09FQ09SRV9OQVRJVkVfU1lTUk9PVH0gKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0xJQlJBUlkgT05MWSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKKworc3RyaW5nKFJFR0VYIE1BVENIICJzeXNyb290cy8oW2EtekEtWjAtOV0rKSIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAkRU5We1NES1RBUkdFVFNZU1JPT1R9KQorc3RyaW5nKFJFR0VYIFJFUExBQ0UgInN5c3Jvb3RzLyIgIiIgQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9KQorCisjIEluY2x1ZGUgdGhlIHRvb2xjaGFpbiBjb25maWd1cmF0aW9uIHN1YnNjcmlwdHMKK2ZpbGUoIEdMT0IgdG9vbGNoYWluX2NvbmZpZ19maWxlcyAiJHtDTUFLRV9UT09MQ0hBSU5fRklMRX0uZC8qLmNtYWtlIiApCitmb3JlYWNoKGNvbmZpZyAke3Rvb2xjaGFpbl9jb25maWdfZmlsZXN9KQorICAgIGluY2x1ZGUoJHtjb25maWd9KQorZW5kZm9yZWFjaCgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM2NzEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEaXNhYmxlIHVzZSBvZiBleHQyZnMvZXh0Ml9mcy5oIGJ5IGNtYWtlJ3MgaW50ZXJuYWwgbGliYXJjaGl2ZSBjb3B5CisKK1dlIGRvbid0IHdhbnQgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBlMmZzcHJvZ3MtbmF0aXZlIGZvciBjbWFrZS1uYXRpdmUsCithbmQgd2UgZG9uJ3QgdXNlIENQYWNrIHNvIGp1c3QgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAorKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAorQEAgLTIzNywxMiArMjM3LDggQEAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJjb3B5ZmlsZS5oIiBIQVZFX0NPUFlGSUxFX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJkaXJlY3QuaCIgSEFWRV9ESVJFQ1RfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImRsZmNuLmgiIEhBVkVfRExGQ05fSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImVycm5vLmgiIEhBVkVfRVJSTk9fSCkKKy1MQV9DSEVDS19JTkNMVURFX0ZJTEUoImV4dDJmcy9leHQyX2ZzLmgiIEhBVkVfRVhUMkZTX0VYVDJfRlNfSCkKKy0KKy1DSEVDS19DX1NPVVJDRV9DT01QSUxFUygiI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorLSNpbmNsdWRlIDxleHQyZnMvZXh0Ml9mcy5oPgorLWludCBtYWluKHZvaWQpIHsgcmV0dXJuIEVYVDJfSU9DX0dFVEZMQUdTOyB9IiBIQVZFX1dPUktJTkdfRVhUMl9JT0NfR0VURkxBR1MpCistCisrU0VUKEhBVkVfRVhUMkZTX0VYVDJfRlNfSCAwKQorK1NFVChIQVZFX1dPUktJTkdfRVhUMl9JT0NfR0VURkxBR1MgMCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImZjbnRsLmgiIEhBVkVfRkNOVExfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImdycC5oIiBIQVZFX0dSUF9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiaW50dHlwZXMuaCIgSEFWRV9JTlRUWVBFU19IKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZG9udC1ydW4tY3Jvc3MtYmluYXJpZXMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorY21ha2U6IGRvbid0IHJ1biBjcm9zcy1iaW5hcmllcyBvbiBob3N0IG1hY2hpbmUKKworV2hlbiBkb2luZyB0aGUgY3Jvc3MgYnVpbGQgd2Ugb2J2aW91c2x5IGNhbm5vdCBydW4gdGhvc2UgYmluYXJpZXMgb24KK2hvc3Qgc2luY2UgdGhleSBjYW4gYmUgYmluYXJ5IGluY29tcGF0aWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworSW5kZXg6IGNtYWtlLTIuOC4xMC4xL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY21ha2UtMi44LjEwLjEub3JpZy9DTWFrZUxpc3RzLnR4dAorKysrIGNtYWtlLTIuOC4xMC4xL0NNYWtlTGlzdHMudHh0CitAQCAtNTg4LDcgKzU4OCw4IEBAIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfU1RSSUNUKQorIAorICMgYnVpbGQgdGhlIHJlbWFpbmluZyBzdWJkaXJlY3RvcmllcworIGFkZF9zdWJkaXJlY3RvcnkoU291cmNlKQorLWFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzKQorKyMgQ29tZSBvbiEgUnVubmluZyB0aGUgY3Jvc3MtYmluYXJpZXMgb24gaG9zdCBpcyBub3QgYSBnb29kIGlkZWEuCisrI2FkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzKQorIGFkZF9zdWJkaXJlY3RvcnkoVGVzdHMpCisgCisgaWYoQlVJTERfVEVTVElORykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2Vudmlyb25tZW50LmQtY21ha2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViNTZiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoCkBAIC0wLDAgKzEgQEAKK2FsaWFzIGNtYWtlPSJjbWFrZSAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NoYXJlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmYzI3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorRmFpbCBzaWxlbnRseSBpZiBzeXN0ZW0gUXQgaW5zdGFsbGF0aW9uIGlzIGJyb2tlbgorCitGaXhlcyBhIHJlZ3Jlc3Npb24gaW4gYmVoYXZpb3VyIGZyb20gMi44LjEwIHRvIDIuOC4xMSByZXN1bHRpbmcgaW4gdGhlCitmb2xsb3dpbmcgZXJyb3IgaWYgdGhlIHN5c3RlbSBRdCBpbnN0YWxsYXRpb24gaXMgYnJva2VuOgorCitDTWFrZSBFcnJvciBhdCBNb2R1bGVzL0ZpbmRRdDQuY21ha2U6MTAyOCAoc2V0X3Byb3BlcnR5KToKKyAgc2V0X3Byb3BlcnR5IGNvdWxkIG5vdCBmaW5kIFRBUkdFVCBRdDQ6OlF0Q29yZS4gIFBlcmhhcHMgaXQgaGFzIG5vdCB5ZXQKKyAgYmVlbiBjcmVhdGVkLgorQ2FsbCBTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CisgIFRlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0Ojc5IChmaW5kX3BhY2thZ2UpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVGhlIHBhdGNoIHdhcyBzbGlnaHRseSBhZGFwdGVkIGluIG9yZGVyIHRvIG1hdGNoIGNtYWtlIDMuMi4yOgorQW5vdGhlciBzZXRfcHJvcGVydHkgd2FzIGludHJvZHVjZWQgd2hpY2ggaGFkIHRvIGJlIGluY2x1ZGVkCit3aXRoaW4gdGhlIGlmKFFUX1FUQ09SRV9GT1VORCkgc3RhdGVtZW50LgorCitTaWduZWQtb2ZmLWJ5OiBNb3JpdHogQmx1bWUgPG1vcml0ei5ibHVtZUBibXctY2FyaXQuZGU+CistLS0KKyBNb2R1bGVzL0ZpbmRRdDQuY21ha2UgfCAzOSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK2luZGV4IDY3MDQ3NjkuLjkwNDhlMzUgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKKysrKyBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQorQEAgLTEwMDAsMjUgKzEwMDAsMjYgQEAgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECisgICAgIGVuZGlmKCkKKyAgIGVuZG1hY3JvKCkKKyAKKy0KKy0gICMgU2V0IFFUX3h5el9MSUJSQVJZIHZhcmlhYmxlIGFuZCBhZGQKKy0gICMgbGlicmFyeSBpbmNsdWRlIHBhdGggdG8gUVRfSU5DTFVERVMKKy0gIF9RVDRfQURKVVNUX0xJQl9WQVJTKFF0Q29yZSkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTCistICAgICAgIiR7UVRfTUtTUEVDU19ESVJ9L2RlZmF1bHQiCistICAgICAgJHtRVF9JTkNMVURFX0RJUn0KKy0gICkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TCistICAgICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OlFUX05PX0RFQlVHPgorLSAgKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfUVRfTUFKT1JfVkVSU0lPTiA0CistICApCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgUVRfTUFKT1JfVkVSU0lPTgorLSAgKQorKyAgaWYoUVRfUVRDT1JFX0ZPVU5EKQorKyAgICAjIFNldCBRVF94eXpfTElCUkFSWSB2YXJpYWJsZSBhbmQgYWRkCisrICAgICMgbGlicmFyeSBpbmNsdWRlIHBhdGggdG8gUVRfSU5DTFVERVMKKysgICAgX1FUNF9BREpVU1RfTElCX1ZBUlMoUXRDb3JlKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTCisrICAgICAgICAiJHtRVF9NS1NQRUNTX0RJUn0vZGVmYXVsdCIKKysgICAgICAgICR7UVRfSU5DTFVERV9ESVJ9CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUworKyAgICAgICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OlFUX05PX0RFQlVHPgorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfUVRfTUFKT1JfVkVSU0lPTiA0CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgUVRfTUFKT1JfVkVSU0lPTgorKyAgICApCisrICBlbmRpZigpCisgCisgICBmb3JlYWNoKFFUX01PRFVMRSAke1FUX01PRFVMRVN9KQorICAgICBfUVQ0X0FESlVTVF9MSUJfVkFSUygke1FUX01PRFVMRX0pCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNiY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2NtYWtlOiBzdXBwb3J0IE9wZW5FbWJlZGRlZCBRdDQgdG9vbCBiaW5hcnkgbmFtZXMKKworVGhlIEZpbmRRdDQgbW9kdWxlIGxvb2tzIGZvciBRdDQgYmluYXJpZXMgdG8gYmUgYWJsZSB0byBnYXRoZXIgdGhlCitwYXRocyB1c2VkIGZvciBjb21waWxhdGlvbiBhbmQgYWxzbyB0byBiZSB1c2luZyBkdXJpbmcgb3RoZXIgcHJvY2Vzc2VzCisodHJhbnNsYXRpb24gdXBkYXRlLCB0cmFuc2xhdGlvbiBiaW5hcnkgZ2VuZXJhdGluZyBhbmQgbGlrZSkgaG93ZXZlcgorT3BlbkVtYmVkZGVkIGhhcyByZW5hbWVkIHRob3NlIHRvIGFsbG93IG9sZCBRTWFrZSB0byBiZSB1c2VkIGluCitwYXJhbGxlbCB3aXRoIHRoZSBjdXJyZW50IG9uZS4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZQorT3BlbkVtYmVkZGVkIHNwZWNpZmljIGJpbmFyeSBuYW1lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworVGhlIHBhdGNoIHdhcyBzbGlnaHRseSBhZGFwdGVkIGluIG9yZGVyIHRvIG1hdGNoIGNtYWtlIDMuMi4yOgorSW5zdGVhZCBvZiBmaW5kX3Byb2dyYW0sIF9maW5kX3F0NF9wcm9ncmFtIGlzIG5vdyB1c2VkLgorCitTaWduZWQtb2ZmLWJ5OiBNb3JpdHogQmx1bWUgPG1vcml0ei5ibHVtZUBibXctY2FyaXQuZGU+CistLS0KKyBNb2R1bGVzL0ZpbmRRdDQuY21ha2UgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFF0NC5jbWFrZSBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQoraW5kZXggMTEwOTFiNS4uNjcwNDc2OSAxMDA2NDQKKy0tLSBhL01vZHVsZXMvRmluZFF0NC5jbWFrZQorKysrIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitAQCAtNTIyLDcgKzUyMiw3IEBAIGVuZGZ1bmN0aW9uKCkKKyAKKyBzZXQoUVQ0X0lOU1RBTExFRF9WRVJTSU9OX1RPT19PTEQgRkFMU0UpCisgCistc2V0KF9RVDRfUU1BS0VfTkFNRVMgcW1ha2UgcW1ha2U0IHFtYWtlLXF0NCBxbWFrZS1tYWMpCisrc2V0KF9RVDRfUU1BS0VfTkFNRVMgcW1ha2UgcW1ha2UyIHFtYWtlNCBxbWFrZS1xdDQgcW1ha2UtbWFjKQorIF9xdDRfZmluZF9xbWFrZSgiJHtfUVQ0X1FNQUtFX05BTUVTfSIgUVRfUU1BS0VfRVhFQ1VUQUJMRSBRVFZFUlNJT04pCisgCisgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECitAQCAtMTE0OCwxMiArMTE0OCwxMiBAQCBpZiAoUVRfUU1BS0VfRVhFQ1VUQUJMRSBBTkQKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX01PQ19FWEVDVVRBQkxFIFF0NDo6bW9jIG1vYy1xdDQgbW9jNCBtb2MpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9VSUNfRVhFQ1VUQUJMRSBRdDQ6OnVpYyB1aWMtcXQ0IHVpYzQgdWljKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfVUlDM19FWEVDVVRBQkxFIFF0NDo6dWljMyB1aWMzKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUkNDX0VYRUNVVEFCTEUgUXQ0OjpyY2MgcmNjKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU0NQUDJYTUxfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzY3BwMnhtbCBxZGJ1c2NwcDJ4bWwpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTWE1MMkNQUF9FWEVDVVRBQkxFIFF0NDo6cWRidXN4bWwyY3BwIHFkYnVzeG1sMmNwcCkKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1JDQ19FWEVDVVRBQkxFIFF0NDo6cmNjIHJjYzQgcmNjKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU0NQUDJYTUxfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzY3BwMnhtbCBxZGJ1c2NwcDJ4bWw0IHFkYnVzY3BwMnhtbCkKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNYTUwyQ1BQX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c3htbDJjcHAgcWRidXN4bWwyY3BwNCBxZGJ1c3htbDJjcHApCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MVVBEQVRFX0VYRUNVVEFCTEUgUXQ0OjpsdXBkYXRlIGx1cGRhdGUtcXQ0IGx1cGRhdGU0IGx1cGRhdGUpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MUkVMRUFTRV9FWEVDVVRBQkxFIFF0NDo6bHJlbGVhc2UgbHJlbGVhc2UtcXQ0IGxyZWxlYXNlNCBscmVsZWFzZSkKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX1FDT0xMRUNUSU9OR0VORVJBVE9SX0VYRUNVVEFCTEUgUXQ0OjpxY29sbGVjdGlvbmdlbmVyYXRvciBxY29sbGVjdGlvbmdlbmVyYXRvci1xdDQgcWNvbGxlY3Rpb25nZW5lcmF0b3IpCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9RQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFIFF0NDo6cWNvbGxlY3Rpb25nZW5lcmF0b3IgcWNvbGxlY3Rpb25nZW5lcmF0b3ItcXQ0IHFjb2xsZWN0aW9uZ2VuZXJhdG9yIHFjb2xsZWN0aW9uZ2VuZXJhdG9yNCkKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RFU0lHTkVSX0VYRUNVVEFCTEUgUXQ0OjpkZXNpZ25lciBkZXNpZ25lci1xdDQgZGVzaWduZXI0IGRlc2lnbmVyKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTElOR1VJU1RfRVhFQ1VUQUJMRSBRdDQ6Omxpbmd1aXN0IGxpbmd1aXN0LXF0NCBsaW5ndWlzdDQgbGluZ3Vpc3QpCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE4OGYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuMy4xLmJiCkBAIC0wLDAgKzEsNTMgQEAKK3JlcXVpcmUgY21ha2UuaW5jCisKK2luaGVyaXQgY21ha2UKKworREVQRU5EUyArPSAiY3VybCBleHBhdCB6bGliIGxpYmFyY2hpdmUgeHogbmN1cnNlcyBiemlwMiIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgZmlsZTovL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIFwKKyAgICBmaWxlOi8vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCIKKworIyBTdHJpcCAke3ByZWZpeH0gZnJvbSAke2RvY2Rpcn0sIHNldCByZXN1bHQgaW50byBkb2NkaXJfc3RyaXBwZWQKK3B5dGhvbiAoKSB7CisgICAgcHJlZml4PWQuZ2V0VmFyKCJwcmVmaXgiLCBUcnVlKQorICAgIGRvY2Rpcj1kLmdldFZhcigiZG9jZGlyIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBkb2NkaXIuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdkb2NkaXIgbXVzdCBjb250YWluIHByZWZpeCBhcyBpdHMgcHJlZml4JykKKworICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2RpcltsZW4ocHJlZml4KTpdCisgICAgaWYgbGVuKGRvY2Rpcl9zdHJpcHBlZCkgPiAwIGFuZCBkb2NkaXJfc3RyaXBwZWRbMF0gPT0gJy8nOgorICAgICAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJfc3RyaXBwZWRbMTpdCisKKyAgICBkLnNldFZhcigiZG9jZGlyX3N0cmlwcGVkIiwgZG9jZGlyX3N0cmlwcGVkKQorfQorCitFWFRSQV9PRUNNQUtFPSIgXAorICAgIC1EQ01BS0VfRE9DX0RJUj0ke2RvY2Rpcl9zdHJpcHBlZH0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQlpJUDI9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQ1VSTD0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9FWFBBVD0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9GT1JNPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkFSQ0hJVkU9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCTFpNQT0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9aTElCPTEgXAorICAgIC1ES1dTWVNfQ0hBUl9JU19TSUdORUQ9MSBcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURLV1NZU19MRlNfV09SS1M9MScsICctREtXU1lTX0xGU19ESVNBQkxFPTEnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vY21ha2UKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L09FVG9vbGNoYWluQ29uZmlnLmNtYWtlICR7RH0ke2RhdGFkaXJ9L2NtYWtlLworCisgICAgbWtkaXIgLXAgJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZAorICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kL2NtYWtlLnNoCit9CisKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7U0RLUEFUSE5BVElWRX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3MzU2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoICouZGVza3RvcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGVza3RvcC1maWxlLXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscy9yZWxlYXNlcy9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzZiOWY5YWFjMWVhMTQzMDkxMTc4YzIzNDM3ZTZjZDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODQzNTMyNjcyNjkyZjk4ZTliMmQ2YWU2Y2M4NjU4ZGE1NjJkZmRlMTYwNmM3ZjMzZDlkMjI3YTM0NGRlNTZjNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3ODMwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlNldHMgdXAgZGlzdGNjIGZvciBjb21waWxhdGlvbiBvbiB0aGUgdGFyZ2V0IGRldmljZSIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vZGlzdGNjLnNoIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgRGVmYXVsdCB0byB0aGUgaG9zdCBtYWNoaW5lIGZvciBhIHJ1bm5pbmcgcWVtdSBzZXNzaW9uCitESVNUQ0NfSE9TVFMgPz0gIjE5Mi4xNjguNy4xIgorCitkb19jb25maWd1cmUoKSB7CisJc2VkIC1pICJzJUBESVNUQ0NfSE9TVFNAJSR7RElTVENDX0hPU1RTfSUiIGRpc3RjYy5zaAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kCisJaW5zdGFsbCAtbSAwNzU1IGRpc3RjYy5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCit9CisKK1JERVBFTkRTXyR7UE59ID0gImRpc3RjYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjA1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCkBAIC0wLDAgKzEsNCBAQAorRElTVENDX0hPU1RTPSJARElTVENDX0hPU1RTQCIKKyNESVNUQ0NfVkVSQk9TRT0iMSIKKworZXhwb3J0IERJU1RDQ19IT1NUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjlkMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIHNjcmlwdCB0byBleHBvcnQgdGFyZ2V0IHJvb3RmcyBmaWxlc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiRW5hYmxlcyBORlMgYWNjZXNzIGZyb20gYW55IGhvc3QgdG8gdGhlIGVudGlyZSBmaWxlc3lzdGVtIChmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMpLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZpbGU6Ly9leHBvcnRzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCBleHBvcnRzICR7RH0ke3N5c2NvbmZkaXJ9LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1uZnMtc2VydmVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1M2M1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKQEAgLTAsMCArMSBAQAorLyAqKHJ3LG5vX3Jvb3Rfc3F1YXNoLGFzeW5jLG5vX3N1YnRyZWVfY2hlY2spCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM2YjNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCisuL3Rlc3RpbmcvcnVuX3Rlc3Quc2ggLi90ZXN0aW5nL2Nhc2UqLnBhdCB8c2VkIFwKKyAgLWUgJ3N8Kiogb2t8UEFTU3wnIFwKKyAgLWUgJ3N8Pz8gZmFpbHxGQUlMfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0XzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViYTRkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiVG9vbCB0byBwcm9kdWNlIGEgc3RhdGlzdGljcyBiYXNlZCBvbiBhIGRpZmYiCitERVNDUklQVElPTiA9ICJkaWZmc3RhdCByZWFkcyB0aGUgb3V0cHV0IG9mIGRpZmYgYW5kIGRpc3BsYXlzIGEgaGlzdG9ncmFtIG9mIFwKK3RoZSBpbnNlcnRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zIHBlci1maWxlLiBJdCBpcyB1c2VmdWwgZm9yIFwKK3Jldmlld2luZyBsYXJnZSwgY29tcGxleCBwYXRjaCBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlmZnN0YXQvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaW5zdGFsbC1zaDtlbmRsaW5lPTQyO21kNT1iMzU0OTcyNmMxMDIyYmVlMDljMTc0YzcyYTBjYTRhNSIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWZmc3RhdC9kaWZmc3RhdC0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImJhODg5ZGE0YzA2YjU0N2FhMmQ3OGZhOTY4MDBhZTZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMzJlNDE4YjQzYmFlNzBkNTQ4ZTMyZGE5MDFlYmM0YWMxMjk3MjM4MWRlMTMxNGJlYmRlMGIxMjZmYjAxMjMiCisKK1MgPSAiJHtXT1JLRElSfS9kaWZmc3RhdC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdAorCitMREZMQUdTICs9ICIke1RPT0xDSEFJTl9PUFRJT05TfSIKKworZG9fY29uZmlndXJlICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorCWF1dG90b29sc19kb19jb25maWd1cmUKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtciAke1N9L3Rlc3RpbmcgJHtEfSR7UFRFU1RfUEFUSH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg3OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiQSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJkaXN0Y2MgaXMgYSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0gdGhhdCBkaXN0cmlidXRlcyBcCitjb21waWxhdGlvbiBvZiBDL0MrKy9PYmpDIGNvZGUgYWNyb3NzIG1hY2hpbmVzIG9uIGEgbmV0d29yay4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImF2YWhpIgorCitHVEtDT05GSUcgPSAiZ3RrIgorR1RLQ09ORklHX2xpYmMtdWNsaWJjID0gIiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJyR7R1RLQ09ORklHfScsICcnLCBkKX0gcG9wdCIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrLC0td2l0aG91dC1ndGsgLS13aXRob3V0LWdub21lLGd0aysiCisjIHVzZSBzeXN0ZW0gcG9wdCBieSBkZWZhdWx0CitQQUNLQUdFQ09ORklHW3BvcHRdID0gIi0td2l0aG91dC1pbmNsdWRlZC1wb3B0LC0td2l0aC1pbmNsdWRlZC1wb3B0LHBvcHQiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImF2YWhpLWRhZW1vbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Rpc3RjYy9kaXN0Y2MuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2MgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjLnNlcnZpY2UiCitTUkNSRVYgPSAiOWExNzJkM2QyMDA0Mjc1NGEzMGMwY2Q5YTVkNjNmZDFhODEyMGMzMSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtV2Vycm9yIFBZVEhPTj0vZGV2L251bGwiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ob21lIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWdpZCBub2dyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlzdGNjIgorCitJTklUU0NSSVBUX05BTUUgPSAiZGlzdGNjIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImRpc3RjYy5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kaXN0Y2MgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaXN0Y2MKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjYy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgc2VkIC1pIC1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZQorICAgICR7REVTS1RPUElOU1RBTEx9Cit9CitERVNLVE9QSU5TVEFMTCA9ICIiCitERVNLVE9QSU5TVEFMTF9saWJjLWdsaWJjICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCit9CitQQUNLQUdFUyArPSAiZGlzdGNjLWRpc3Rtb24tZ25vbWUiCisKK0ZJTEVTXyR7UE59ID0gIiAke3N5c2NvbmZkaXJ9IFwKKwkJJHtiaW5kaXJ9L2Rpc3RjYyBcCisgICAgJHtiaW5kaXJ9L2xzZGlzdGNjIFwKKwkJJHtiaW5kaXJ9L2Rpc3RjY2QgXAorCQkke2JpbmRpcn0vZGlzdGNjbW9uLXRleHQgXAorCQkke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlIgorRklMRVNfZGlzdGNjLWRpc3Rtb24tZ25vbWUgPSAiICAke2JpbmRpcn0vZGlzdGNjbW9uLWdub21lIFwKKwkJCQkke2RhdGFkaXJ9L2Rpc3RjYyIKKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJZGVsdXNlciBkaXN0Y2MgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZWM5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA4MzMxZmM0NzU5ZDgwOTUxMmY0MDRlN2EyN2Y4MTdhZDZkNjE2NDUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTg6MDA6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gemVyb2NvbmY6IEluY2x1ZGUgZmNudGwuaAorCitXZSBuZWVkIGl0IGZvciBnZXR0aW5nIGRlaW5pdGlvbnMgZm9yIE9fKiBlLmcuIE9fQ1JFQVQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvemVyb2NvbmYuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3plcm9jb25mLmMgYi9zcmMvemVyb2NvbmYuYworaW5kZXggNDE0ZGRjNC4uMzFiZDMzZiAxMDA2NDQKKy0tLSBhL3NyYy96ZXJvY29uZi5jCisrKysgYi9zcmMvemVyb2NvbmYuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorICNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzQxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2RlZmF1bHQKQEAgLTAsMCArMSwyNCBAQAorIyBEZWZhdWx0cyBmb3IgZGlzdGNjIGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaXN0Y2MKKworIworIyBzaG91bGQgZGlzdGNjIGJlIHN0YXJ0ZWQgb24gYm9vdD8KKyMKKyMgU1RBUlRESVNUQ0M9InRydWUiCisKK1NUQVJURElTVENDPSJ0cnVlIgorCisjCisjIFdoaWNoIG5ldHdvcmtzL2hvc3RzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGNvbm5lY3QgdG8gdGhlIGRhZW1vbj8KKyMgWW91IGNhbiBsaXN0IG11bHRpcGxlIGhvc3RzL25ldHdvcmtzIHNlcGFyYXRlZCBieSBzcGFjZXMuCisjIE5ldHdvcmtzIGhhdmUgdG8gYmUgaW4gQ0lEUiBub3RhdGlvbiwgZi5lLiAxOTIuMTY4LjEuMC8yNAorIyBIb3N0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgSVAgQWRyZXNzCisjCisjIEFMTE9XRURORVRTPSIxMjcuMC4wLjEiCisKK0FMTE9XRURORVRTPSIxOTIuMTY4LjcuMC8yNCIKKworIworIyBPUFRJT05TIGlzIHVzZWQgZm9yIHRoZSBzeXN0ZW1kIHNlcnZpY2UgZmlsZQorIworT1BUSU9OUz0iLS1hbGxvdyAxOTIuMTY4LjcuMC8yNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM2ZjBmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGRpc3RjYworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IHNpbXBsZSBkaXN0cmlidXRlZCBjb21waWxlciBjbGllbnQgYW5kIHNlcnZlcgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgZGlzdGNjZCBEZWJpYW4gaW5pdC5kIHNjcmlwdCBjb250cmlidXRlZCBieSBKYXNvbiBUaG9tYXMuICAoRGViaWFuICMxNjExMzYpCisjCisjIHNrZWxldG9uCWV4YW1wbGUgZmlsZSB0byBidWlsZCAvZXRjL2luaXQuZC8gc2NyaXB0cy4KKyMJCVRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2NyaXB0cyBmb3IgL2V0Yy9pbml0LmQuCisjCisjCQlXcml0dGVuIGJ5IE1pcXVlbCB2YW4gU21vb3JlbmJ1cmcgPG1pcXVlbHNAY2lzdHJvbi5ubD4uCisjCQlNb2RpZmllZCBmb3IgRGViaWFuIEdOVS9MaW51eAorIwkJYnkgSWFuIE11cmRvY2sgPGltdXJkb2NrQGdudS5haS5taXQuZWR1Pi4KKyMKKyMgVmVyc2lvbjoJQCgjKXNrZWxldG9uICAxLjkuMSAgMDgtQXByLTIwMDIgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3IvYmluL2Rpc3RjY2QKK05BTUU9ZGlzdGNjCitERVNDPSJEaXN0cmlidXRlZCBDb21waWxlciBEYWVtb24iCitEQUVNT05fQVJHUz0iLS1waWQtZmlsZT0vdmFyL3J1bi8kTkFNRS5waWQgLS1kYWVtb24iCisjIHBsZWFzZSBjaGFuZ2UgdGhvc2UgdmFyaWFibGVzIGJ5IG92ZXJyaWRpbmcgdGhlbSBpbiAvZXRjL2RlZmF1bHRzL2Rpc3RjYworQUxMT1dFRE5FVFM9IjEyNy4wLjAuMSIKKworIyBSZWFkcyBjb25maWcgZmlsZSAod2lsbCBvdmVycmlkZSBkZWZhdWx0cyBhYm92ZSkKK1sgLXIgL2V0Yy9kZWZhdWx0L2Rpc3RjYyBdICYmIC4gL2V0Yy9kZWZhdWx0L2Rpc3RjYworCit0ZXN0IC14ICREQUVNT04gfHwgZXhpdCAwCisKK3NldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworIyBjb25zdHJ1Y3QgYWNjZXNzIGxpc3QKK0FMTE9XPSIiCitmb3IgbmV0IGluICRBTExPV0VETkVUUworZG8KKwlBTExPVz0iJEFMTE9XIC0tYWxsb3cgJG5ldCIKK2RvbmUKKworc2hvdWxkX3N0YXJ0KCkgeworCWlmIFsgIiRTVEFSVERJU1RDQyIgIT0gInRydWUiIF0gJiYgWyAiJFNUQVJURElTVENDIiAhPSAiWUVTIiBdOyB0aGVuCisJCWVjaG8gIlNUQVJURElTVENDIGlzIHNldCB0byBmYWxzZSBpbiAvZXRjL2RlZmF1bHQvZGlzdGNjIgorCQllY2hvICIkREFFTU9OIG5vdCBzdGFydGluZyIKKwkJZXhpdCAwCisJZmkKKwkjIHdlIG5lZWQgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgcGlkIGZpbGUKKwl0b3VjaCAvdmFyL3J1bi8kTkFNRS5waWQKKwljaG93biBkaXN0Y2MgL3Zhci9ydW4vJE5BTUUucGlkCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzaG91bGRfc3RhcnQKKwllY2hvIC1uICJTdGFydGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCS0tZXhlYyAkREFFTU9OIC0tICREQUVNT05fQVJHUyAkQUxMT1cgfHwKKwl7CisJICAgIGNvZGU9JD8KKwkgICAgZWNobyAiJDA6IHN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCWVjaG8gIi4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OIHx8CisJeworCSAgICBjb2RlPSQ/CisJICAgIGVjaG8gIiQwOiBzdG9wIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCXJtIC1mIC92YXIvcnVuLyROQU1FLnBpZCA+L2Rldi9udWxsIDI+JjEKKwllY2hvICIuIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMKKwkjCUlmIHRoZSAicmVsb2FkIiBvcHRpb24gaXMgaW1wbGVtZW50ZWQsIG1vdmUgdGhlICJmb3JjZS1yZWxvYWQiCisJIwlvcHRpb24gdG8gdGhlICJyZWxvYWQiIGVudHJ5IGFib3ZlLiBJZiBub3QsICJmb3JjZS1yZWxvYWQiIGlzCisJIwlqdXN0IHRoZSBzYW1lIGFzICJyZXN0YXJ0Ii4KKwkjCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OCisJc2xlZXAgMQorCXNob3VsZF9zdGFydAorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwkJLS1leGVjICREQUVNT04gLS0gJERBRU1PTl9BUkdTICRBTExPVyB8fAorCXsKKwkgICAgY29kZT0kPworCSAgICBybSAtZiAvdmFyL3J1bi8kTkFNRS5waWQgPi9kZXYvbnVsbCAyPiYxCisJICAgIGVjaG8gIiQwOiByZXN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCWVjaG8gIi4iCisJOzsKKworICAgc3RhdHVzKQorCXN0YXR1cyAkREFFTU9OCisJZXhpdCAkPworCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxzdGF0dXN9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUzZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPURpc3RjY2QgQSBEaXN0cmlidXRlZCBDb21waWxhdGlvbiBTZXJ2ZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVXNlcj1kaXN0Y2MKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2Rpc3RjYworRXhlY1N0YXJ0PUBCSU5ESVJAL2Rpc3RjY2QgLS12ZXJib3NlIC0tbm8tZGV0YWNoIC0tZGFlbW9uICRPUFRJT05TCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCkBAIC0wLDAgKzEsMTIgQEAKK1tEZXNrdG9wIEVudHJ5XQorVmVyc2lvbj0wLjkuNAorRXhlYz1kaXN0Y2Ntb24tZ25vbWUKK05hbWU9ZGlzdGNjIG1vbml0b3IKK0dlbmVyaWNOYW1lPURpc3RyaWJ1dGVkIENvbXBpbGUgTW9uaXRvcgorQ29tbWVudD1HcmFwaGljYWwgdmlldyBvZiBkaXN0cmlidXRlZCBjb21waWxlIHRhc2tzCitJY29uPWRpc3RjY21vbi1nbm9tZS1pY29uCitUcnlFeGVjPWRpc3RjY21vbi1nbm9tZQorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R05PTUU7RGV2ZWxvcG1lbnQ7CitTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWUzZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1doZW4gYnVpbGRpbmcgd2l0aCBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSwgbWFrZSBpbnN0YWxsIGZhaWxzLAordW5hYmxlIHRvIGZpbmQgdGhlIGdub21lX2RhdGEgZmlsZXMuIFRoaXMgcGF0Y2ggY29ycmVjdHMgdGhlCitwYXRjaCBhbmQgZW5zdXJlcyB0aGUgYnVpbGQgd29ya3MgaW4gdGhpcyBjYXNlLgorCitSUCAyMDEzLzMvOAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRpc3RjYy0zLjEvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaXN0Y2MtMy4xLm9yaWcvTWFrZWZpbGUuaW4JMjAwOC0xMi0wMiAyMTo1MDozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBkaXN0Y2MtMy4xL01ha2VmaWxlLmluCTIwMTMtMDMtMDggMTA6NDk6MjQuMjI0NDAwOTM3ICswMDAwCitAQCAtMTA4OCw3ICsxMDg4LDcgQEAKKyBpbnN0YWxsLWdub21lLWRhdGE6ICQoZ25vbWVfZGF0YSkKKyAJJChta2luc3RhbGxkaXJzKSAiJChERVNURElSKSQocGtnZGF0YWRpcikiCisgCWZvciBwIGluICQoZ25vbWVfZGF0YSk7IGRvCQkJCVwKKy0JJChJTlNUQUxMX0RBVEEpICIkJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisrCSQoSU5TVEFMTF9EQVRBKSAiJChzcmNkaXIpLyQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKKyAJZG9uZQorIAorIGluc3RhbGwtY29uZjogJChjb25mX2ZpbGVzKSAkKGRlZmF1bHRfZmlsZXMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE2NTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkRNSSAoRGVza3RvcCBNYW5hZ2VtZW50IEludGVyZmFjZSkgdGFibGUgcmVsYXRlZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvZG1pZGVjb2RlLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9L2RtaWRlY29kZS8ke0JQfS50YXIuYnoyIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0fGFhcmNoNjR8YXJtfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAorfQorCitkb191bnBhY2tfZXh0cmEoKSB7CisJc2VkIC1pIC1lICcvXnByZWZpeC9zOi91c3IvbG9jYWw6JHtleGVjX3ByZWZpeH06JyAke1N9L01ha2VmaWxlCit9CithZGR0YXNrIHVucGFja19leHRyYSBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNDA2ZjNjYmIyNzczNjQ5MTY5ODY5N2JlZWRkYjc4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MTNmZjMwNTVkNTYzYTYyYTQyMDc4OWI4ZWUzM2IwMzhkZTlhZmExOGVhNjEyNTQ3NjBkZGY4YWI4N2E1MDg4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxYjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKQEAgLTAsMCArMSw2OCBAQAorU1VNTUFSWSA9ICJEU1NTTCBzdHlsZXNoZWV0cyB1c2VkIHRvIHRyYW5zZm9ybSBTR01MIGFuZCBYTUwgRG9jQm9vayBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldCIKKyMgU2ltcGxlIHBlcnNtaXNzaXZlCitMSUNFTlNFID0gIkRTU1NMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT00MTtlbmRsaW5lPTc0O21kNT04NzUzODUxNTliMmVlNzZlY2Y1NjEzNmFlN2Y1NDJkNiIKKworREVQRU5EUyA9ICJzZ21sLWNvbW1vbi1uYXRpdmUiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2Nib29rL2RvY2Jvb2stZHNzc2wtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImJjMTkyZDIzMjY2YjlhNjY0Y2EwYWJhNGE3Nzk0YzdjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmMzI5ZTEyMGJlZTllZjQyZmJkZDc0ZGRkNjBlMDVlNDk3ODZjNWE3OTUzYTBmZjRjNjgwYWU2YmRmMGUyYmMiCisKK1MgPSAiJHtXT1JLRElSfS9kb2Nib29rLWRzc3NsLSR7UFZ9IgorCitpbmhlcml0IG5hdGl2ZQorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZG9jYm9va19kc3NzbF9zeXNyb290X3ByZXByb2Nlc3MiCitDTEVBTkZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9jbGVhbiIKKworCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay1kc3NzbC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2NvbGxhdGVpbmRleC5wbCAke0R9JHtiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWluc3RhbGwgLW0gMDY0NCBjYXRhbG9nICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWNwIC12IC1SICogJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9L2NhdGFsb2ciID4gXAorCQkgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0vY29tbW9uL2NhdGFsb2ciID4+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorfQorCitkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCWZpCit9CisKK2RvY2Jvb2tfZHNzc2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsCit9CisKK2RvY2Jvb2tfZHNzc2xfc3R5bGVzaGVldHNfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGY0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiMy4xIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLzMuMS9kb2NiazMxLnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDMyNzQ5YzBjODA2ZGJhZTgxYzhiY2I3MGRhM2I1ZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAyNjFkMjc3MWI5YTA1MmFiZmEzZDhmYWIxYWE2MmJlMDU3OTFhMDEwMjgxYzU2NmY5MDczYmYwZTY0NDUzOCIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQtMy5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlzZWQgLWkgLWUgJy9JU08gODg3OS9kJyAtZSAnc3xEVERERUNMICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjMuMS8vRU4ifFNHTUxERUNMfGcnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM5Mzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjQuMSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gImh0dHA6Ly9kb2Nib29rLm9yZy9zZ21sLzQuMS9kb2NiazQxLnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg5ZjZmZjJhMjE3M2ViMWUxNDIxNmMxMDUzM2VkZTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGVhYWZjZjBhMzY3NzY5MmU3YWQ0NDEyYzBlNDFjMWRiM2U5ZGE2Y2RjZGIzZGQzMmIyY2MxZjljOTdkNjMxMSIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJc2VkIC1pIC1lICcvSVNPIDg4NzkvZCcgLWUgJy9nbWwvZCcgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTcyM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjUtbmF0aXZlLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiNC41IgorCitQUiA9ICIke0lOQ19QUn0uMCIKK1BWID0gIjQuNSIKKworU1JDX1VSSVttZDVzdW1dID0gIjA3YzU4MWY0YmJjYmE2ZDNhYWM4NTM2MGExOWY5NWY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgwNDNlNTE0ZTgwYzZjMTljYjE0NmI1ZDM3OTM3ZDEzMDViZjNhYmY5YjAwOTdjMzZkZjdmNzBmNjExY2RmNDMiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCXNlZCAtaSAtZSAnL0lTTyA4ODc5L2QnIC1lJy9nbWwvZCcgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjUwOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsNzAgQEAKKyMgVGhlIERURHMgb2YgdGhlIHZhcmlvdXMgdmVyc2lvbnMgaGF2ZSB0byBiZSBpbnN0YWxsZWQgaW4gcGFyYWxsZWwgYW5kCisjIHNob3VsZCBub3QgcmVwbGFjZSBlYWNoIG90aGVyLiBUaGUgaW5zdGFsbGF0aW9uIHN0ZXAgaXMgY29tbW9uIGZvcgorIyBhbGwgdmVyc2lvbnMgYW5kIGp1c3QgZGlmZmVycyBpbiAke0RURF9WRVJTSU9OfSB3aGljaCBpcyBzZXQgaW4gZWFjaAorIyB2ZXJzaW9uIHJlY2lwZS4KKyMKKyMgVGhlIERURHMgZG8gaGF2ZSBzb21lIHF1aXJrcyAoc2VlIExGUyBkb2N1bWVudGF0aW9uKS4KK1NVTU1BUlkgPSAiRG9jdW1lbnQgdHlwZSBkZWZpbml0aW9ucyBmb3IgdmVyaWZpY2F0aW9uIG9mIFNHTUwgZGF0YSBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBTR01MIGRhdGEgXAorZmlsZXMgYWdhaW5zdCB0aGUgRG9jQm9vayBydWxlIHNldCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8iCisKK0RFUEVORFMgPSAic2dtbC1jb21tb24tbmF0aXZlIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvJHtEVERfVkVSU0lPTn0vZG9jYm9vay0ke0RURF9WRVJTSU9OfS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworIyBUaGUgLnppcCBmaWxlIGV4dHJhY3RzIHRvIHRoZSBjdXJyZW50IGRpcgorUyA9ICIke1dPUktESVJ9IgorCitJTkNfUFIgPSAicjMiCisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImRvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorCWluc3RhbGwgZG9jYm9vay5jYXQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059L2NhdGFsb2cKKwljcCAtUHBSciAqLmR0ZCAqLm1vZCAqLmRjbCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0vY2F0YWxvZyIgPiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKK30KKworZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfcG9zdGluc3QgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKKwlmaQorfQorCitkb2Nib29rX3NnbWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorfQorCitDTEVBTkZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9jbGVhbiIKKworZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0L2QnICRmCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKQEAgLTAsMCArMSwxNiBAQAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECithbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKK2lzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKK2hvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKK2FueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCit3YXJyYW50eS4KKworSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCityZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCithZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKK3RoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IgCitjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKK2luZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy0wLjYuMTQvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNzlkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggcnVudGltZSBlcnJvciBvY2N1cnJlZCBlLmcuIHdpdGggZG9jYm9vay10by1tYW4gY2FsbHM6CisKKyAgZ3JlcDogY2hhcmFjdGVyIGNsYXNzIHN5bnRheCBpcyBbWzpzcGFjZTpdXSwgbm90IFs6c3BhY2U6XQorICBncmVwOiBjaGFyYWN0ZXIgY2xhc3Mgc3ludGF4IGlzIFtbOnNwYWNlOl1dLCBub3QgWzpzcGFjZTpdCisgIGp3OiBUaGVyZSBpcyBubyBmcm9udGVuZCBjYWxsZWQgIi9kb2Nib29rL3V0aWxzLTAuNi4xNC9mcm9udGVuZHMvZG9jYm9vayIuCisKK1NlZSBhbHNvOgorCisgICA8aHR0cHM6Ly9xYS5tYW5kcml2YS5jb20vc2hvd19idWcuY2dpP2lkPTYxMTI3PgorCitTaWduZWQtb2ZmLWJ5OiBTdGVmZmVuIFNsZWR6IDxzbGVkekBkcmVzZWFyY2gtZmUuZGU+CisKK2RpZmYgLU51cmQgZG9jYm9vay11dGlscy0wLjYuMTQtb3JpZy9iaW4vancuaW4gZG9jYm9vay11dGlscy0wLjYuMTQvYmluL2p3LmluCistLS0gZG9jYm9vay11dGlscy0wLjYuMTQtb3JpZy9iaW4vancuaW4JMjAxMi0wMy0yOSAwNzo1MDowMC43ODk1NjQ4MjYgKzAyMDAKKysrKyBkb2Nib29rLXV0aWxzLTAuNi4xNC9iaW4vancuaW4JMjAxMi0wMy0yOSAwNzo1MjoxMC4zNzEzMDI5NjcgKzAyMDAKK0BAIC04MCw5ICs4MCw5IEBACisgU0dNTF9DQVRBTE9HU19ESVI9Ii9ldGMvc2dtbCIKKyBpZiBbIC1mICIkU0dNTF9DT05GIiBdCisgdGhlbgorLSAgUkU9J15bOnNwYWNlOl0qU0dNTF9CQVNFX0RJUls6c3BhY2U6XSo9WzpzcGFjZTpdKicKKysgIFJFPSdeW1s6c3BhY2U6XV0qU0dNTF9CQVNFX0RJUltbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSonCisgICBTR01MX0JBU0VfRElSPWBncmVwICRSRSAkU0dNTF9DT05GIHwgc2VkICJzLyRSRS8vImAKKy0gIFJFPSdeWzpzcGFjZTpdKlNHTUxfQ0FUQUxPR1NfRElSWzpzcGFjZTpdKj1bOnNwYWNlOl0qJworKyAgUkU9J15bWzpzcGFjZTpdXSpTR01MX0NBVEFMT0dTX0RJUltbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSonCisgICBTR01MX0NBVEFMT0dTX0RJUj1gZ3JlcCAkUkUgJFNHTUxfQ09ORiB8IHNlZCAicy8kUkUvLyJgCisgZmkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E1ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy1uYXRpdmVfMC42LjE0LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBmb3JtYXR0aW5nIGFuZCBtYW5pcHVsYXRpbmcgRG9jQm9vayBkb2N1bWVudHMiCitERVNDUklQVElPTiA9ICJBIGNvbGxlY3Rpb24gb2YgYWxsIHRoZSBmcmVlIHNvZnR3YXJlIHRvb2xzIHlvdSBuZWVkIHRvIFwKK3dvcmsgb24gYW5kIGZvcm1hdCBEb2NCb29rIGRvY3VtZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2RvY2Jvb2stdG9vbHMvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorREVQRU5EUyA9ICJvcGVuamFkZS1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmUgZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJcCisJZnRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B1Yi9kb2Nib29rLXRvb2xzL25ldy10cmlhbHMvU09VUkNFUy9kb2Nib29rLXV0aWxzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL3JlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiNDFiMThjMzY1YzAxZjIyNWJjNDE3Y2Y2MzJkODFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4ZmFhYjhlZThhNzYwNWM5MzQyZmI3YjkwNmUwODE1ZTNjZWU4NGE0ODkxODJhZjM4ZThmN2MwZGYyZTkyZTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIEZpeCBoYXJkLWNvZGVkIHJlZmVyZW5jZXMgdG8gL2V0Yy9zZ21sCisJaWYgWyAhIC1lICR7U30vLnNlZF9kb25lIF07IHRoZW4KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9iaW4vancuaW4KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9kb2MvbWFuL01ha2VmaWxlLmFtCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vZG9jL0hUTUwvTWFrZWZpbGUuYW0KKworCQkjIFBvaW50IGp3IHRvIHRoZSBuYXRpdmUgc3lzcm9vdCBjYXRhbG9nCisJCXNlZCAtaSAtZSAnc3xeU0dNTF9FWFRSQV9DQVRBTE9HUz0iInxTR01MX0VYVFJBX0NBVEFMT0dTPSI6JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cifGcnICR7U30vYmluL2p3LmluCisJCXRvdWNoICR7U30vLnNlZF9kb25lCisJZmkKK30KK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIke1N9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSMgSW5zdGFsbCB0aGUgYmluYXJpZXMgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgY29tbW9ubHkgdXNlZCBuYW1lcyBmb3IgdGhlbS4KKwlmb3IgZG9jdHlwZSBpbiBodG1sIHBzIGR2aSBtYW4gcGRmIHJ0ZiB0ZXggdGV4aSB0eHQKKwlkbworCQlpbnN0YWxsIC1tIDA3NTUgJHtTfS9iaW4vZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9LworCQlsbiAtc2YgZG9jYm9vazJ4LSRkb2N0eXBlICR7RH0ke2JpbmRpcn0vZGIyJGRvY3R5cGUKKwkJbG4gLXNmIGRvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS9kYjIkZG9jdHlwZQorCQlsbiAtc2YgZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9L2RvY2Jvb2stdG8tJGRvY3R5cGUKKwlkb25lCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9iaW4vancgJHtEfSR7YmluZGlyfS8KKwlmb3IgaSBpbiBiYWNrZW5kcy9kdmkgYmFja2VuZHMvaHRtbCBcCisJCWJhY2tlbmRzL3BkZiBiYWNrZW5kcy9wcyBiYWNrZW5kcy9ydGYgYmFja2VuZHMvdGV4IFwKKwkJYmFja2VuZHMvdHh0IFwKKwkJaGVscGVycy9kb2Nib29rMm1hbi1zcGVjLnBsIGhlbHBlcnMvZG9jYm9vazJ0ZXhpLXNwZWMucGwgXAorCQlkb2Nib29rLXV0aWxzLmRzbAorCWRvCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9L2BkaXJuYW1lICRpYAorCQlpbnN0YWxsICR7U30vJGkgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9LyRpCisJZG9uZQorCWZvciBpIGluIGJhY2tlbmRzL21hbiBiYWNrZW5kcy90ZXhpIGZyb250ZW5kcy9kb2Nib29rCisJZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vYGRpcm5hbWUgJGlgCisJCWluc3RhbGwgJHtCfS8kaSAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vJGkKKwlkb25lCisKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCkBAIC0wLDAgKzEsMTYgQEAKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAorYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCitpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0Citob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCithbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAord2FycmFudHkuCisKK0lmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCit0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yIAorY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaApAQCAtMCwwICsxLDUxNSBAQAorZG9jYm9vay14bWw6IHVwZGF0ZSBjYXRhbG9nLnhtbAorCitSZWZlciBVYnVudHUgMTMuMDQgdG8gdXBkYXRlIGNhdGFsb2cueG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jYm9vay00LjAvY2F0YWxvZy54bWwgICB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbCB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBkb2Nib29rLTQuMi9jYXRhbG9nLnhtbCAgIHwgNjkgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjMvY2F0YWxvZy54bWwgICB8IDcyICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjQvY2F0YWxvZy54bWwgICB8IDYzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjUvY2F0YWxvZy54bWwgICB8IDYzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMjQwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Nib29rLTQuMC9jYXRhbG9nLnhtbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sCisKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMC9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4wL2NhdGFsb2cueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZG9jYm9vay00LjAvY2F0YWxvZy54bWwKK0BAIC0wLDAgKzEsNzIgQEAKKys8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iIAorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisrPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIFhNTCBDYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRmlsZSBjYXRhbG9nLnhtbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8IS0tIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgorKyAgICAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCisrICAgICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvLgorKyAgLS0+CisrCisrPCEtLSBUaGlzIGlzIHRoZSBjYXRhbG9nIGRhdGEgZmlsZSBmb3IgRG9jQm9vayBWNC4wLiBJdCBpcyBwcm92aWRlZCBhcworKyAgICAgYSBjb252ZW5pZW5jZSBpbiBidWlsZGluZyB5b3VyIG93biBjYXRhbG9nIGZpbGVzLiBZb3UgbmVlZCBub3QgdXNlCisrICAgICB0aGUgZmlsZW5hbWVzIGxpc3RlZCBoZXJlLCBhbmQgbmVlZCBub3QgdXNlIHRoZSBmaWxlbmFtZSBtZXRob2Qgb2YKKysgICAgIGlkZW50aWZ5aW5nIHN0b3JhZ2Ugb2JqZWN0cyBhdCBhbGwuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEb2NCb29rIERURC4KKysgICAgIFNlZSBYTUwgQ2F0YWxvZ3MgYXQgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzdXBwbHlpbmcgYW5kIHVzaW5nIGNhdGFsb2cgZGF0YS4KKysgIC0tPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgZHJpdmVyIGZpbGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIE90aGVyIHdheXMgdG8gcmVmZXIgdG8gRG9jQm9vayBYTUwgdjQuMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4wL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJub3RueC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRicG9vbHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiaGllcngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiZ2VuZW50Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKysKKys8IS0tIFVOT0ZGSUNJQUwgY29udmVyc2lvbiBvZiB0aGUgZXhjaGFuZ2UgdGFibGUgbW9kZWwgdG8gWE1MLCBiYXNlZCBvbiB0aGUgT0FTSVMgRXhjaGFuZ2UgLS0+CisrPCEtLSAgICBUYWJsZSBNb2RlbCBQVUJMSUMgIi0vL1NHTUwgT3Blbi8vRFREIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwLy9FTiIgICAgICAgICAgIC0tPgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4KKysKKys8IS0tIHRoZSBmb2xsb3dpbmcgRlBJIGlzIGRlY2xhcmVkIGZvciB0aGUgRFREIGluc2lkZSB0aGUgRFRELCBidXQgd2UnbGwgLS0+CisrPCEtLSB1c2UgdGhlIHZlcnNpb24gZnJvbSB0aGUgbGF0ZXN0IERvY0Jvb2sKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iCisrICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPiAtLT4KKysKKys8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwvY2F0YWxvZz4KK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwKK0BAIC0wLDAgKzEsNjYgQEAKKys8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iIAorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisrPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIFhNTCBDYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjEuMi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBGaWxlIGNhdGFsb2cueG1sIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwhLS0gUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCisrICAgICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKKysgICAgIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy8uCisrICAtLT4KKysKKys8IS0tIFRoaXMgaXMgdGhlIGNhdGFsb2cgZGF0YSBmaWxlIGZvciBEb2NCb29rIFY0LjEuMi4gSXQgaXMgcHJvdmlkZWQgYXMKKysgICAgIGEgY29udmVuaWVuY2UgaW4gYnVpbGRpbmcgeW91ciBvd24gY2F0YWxvZyBmaWxlcy4gWW91IG5lZWQgbm90IHVzZQorKyAgICAgdGhlIGZpbGVuYW1lcyBsaXN0ZWQgaGVyZSwgYW5kIG5lZWQgbm90IHVzZSB0aGUgZmlsZW5hbWUgbWV0aG9kIG9mCisrICAgICBpZGVudGlmeWluZyBzdG9yYWdlIG9iamVjdHMgYXQgYWxsLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRG9jQm9vayBEVEQuCisrICAgICBTZWUgWE1MIENhdGFsb2dzIGF0IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcGx5aW5nIGFuZCB1c2luZyBjYXRhbG9nIGRhdGEuCisrICAtLT4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIGRyaXZlciBmaWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xLjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImNhbHN0Ymx4LmR0ZCIvPgorKworKyAgPCEtLSBhbHJlYWR5IGluY2x1ZGVkIGluIGRvY2Jvb2sgNC4yCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJwb29seC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJoaWVyeC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJnZW5lbnQubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRibm90bngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisrCisrCisrPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4xLjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwvY2F0YWxvZz4KK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjIvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtMjUsNiArMjgsMTIgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKyAKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK0BAIC00OSw2NiArNTgsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWRpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXRlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjMvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjMvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTI1LDEyICsyOCwyMSBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorIAorKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjMvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKyAKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuMy8vRU4iCisrICAgICAgICB1cmk9Imh0bWx0Ymx4Lm1vZCIvPgorKworIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIKKyAgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+CisgCitAQCAtNDksNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLW51bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXB1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby10ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWJveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjQvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHByZWZlcj0icHVibGljIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtNTgsNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNC8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2RpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3B1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3RlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuNCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjUvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjUvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIgcHJlZmVyPSJwdWJsaWMiPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC01OCw2NiArNjEsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC41Ly9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb251bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2JveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZjU1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLnhtbApAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBDQUxTIFRhYmxlIE1vZGVsIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjQvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjEvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCayBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCb29rIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuNS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4wL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC40L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjMvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxYmMzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgpAQCAtMCwwICsxLDY0IEBACitTVU1NQVJZID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBYTUwgZGF0YSBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBYTUwgZGF0YSBcCitmaWxlcyBhZ2FpbnN0IHRoZSBEb2NCb29rIHJ1bGUgc2V0LCBpdCBzaGlwcyB3aXRoIHRoZSBsYXRlc3QgRG9jQm9vayA0LjUgXAorWE1MIERURCwgYXMgd2VsbCBhcyBhIHNlbGVjdGVkIHNldCBvZiBsZWdhY3kgRFREcyBmb3IgdXNlIHdpdGggb2xkZXIgXAorZG9jdW1lbnRzLCBpbmNsdWRpbmcgNC4wLCA0LjEuMiwgNC4yLCA0LjMgYW5kIDQuNCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcveG1sLyIKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14bWwtdXBkYXRlLWNhdGFsb2cueG1sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLnhtbCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODdiNGQ0NGUxNWNmZmIxZjQwNDhhZjIzZjk4MjA4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMGY4ZWRjZjY5N2Y1MzE4ZTYzZGQ5OGM5YTkzMWYzZmVlMTY3YWYwODA1YmE0NDFkYjM3MmUwZjE3YjJhNDRmIgorCitTPSIke1dPUktESVJ9L2RvY2Jvb2steG1sLTQuNS5jMzE0MjQiCisKK2luaGVyaXQgYWxsYXJjaAorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194bWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3htbF9kdGRfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19jb25maWdyZSAoKXsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisgICAgOgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAjIFJlZmVyIGRlYmlhbiBodHRwczovL3BhY2thZ2VzLmRlYmlhbi5vcmcvc2lkL2FsbC9kb2Nib29rLXhtbC9maWxlbGlzdAorICAgIGZvciBEVERWRVJTSU9OIGluIDQuMCA0LjEuMiA0LjIgNC4zIDQuNCA0LjU7IGRvCisgICAgICAgIGluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3NjaGVtYS9kdGQvJHtEVERWRVJTSU9OfQorICAgICAgICBjcCAtdiAtUiBkb2Nib29rLSR7RFREVkVSU0lPTn0vKiAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLyR7RFREVkVSU0lPTn0KKyAgICBkb25lCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKyAgICBpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhtbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbAorfQorCitkb2Nib29rX3htbF9kdGRfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKyAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisgICAgdGhlbgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorICAgICAgICAjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisgICAgICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vLiovdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sCisgICAgZmkKK30KKworZG9jYm9va194bWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKKyAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1OWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzOiBubyBiYXNoaXNtIGluIGRvY2Jvb2steHNsLXVwZGF0ZQorCitUaGUgY2hlY2tiYXNoaXNtcyBzaG93cyB0aGVyZSBpcyBubyBiYXNoaXNtLCBzbyB1c2UgL2Jpbi9zaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUgYi90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlCitpbmRleCBhYmEwMDE2Li5jYzczYWEyIDEwMDc1NQorLS0tIGEvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQorKysrIGIvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAjIHZpbTogbnVtYmVyCisgCisgIyBkb2Nib29rLXhzbC11cGRhdGUgLSBVcGRhdGUgZW52aXJvbm1lbnQgdG8gbGF0ZXN0IGRvY2Jvb2steHNsIHNuYXBzaG90CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTU3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKzxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9jYXRhbG9nLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvY2F0YWxvZy54bWwiLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiWFNMIHN0eWxlc2hlZXRzIGZvciBwcm9jZXNzaW5nIERvY0Jvb2sgWE1MIHRvIHZhcmlvdXMgb3V0cHV0IGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQiCitMSUNFTlNFID0gIlhTTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2ZWVlZWQ0M2Q0OThjMjJhODM1MzgyNTMzMzU2NDYyIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2Nib29rL2RvY2Jvb2steHNsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14c2wueG1sIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmRkMGY4OTEzMWNjMzViZjRmMmVkMTA1YTFjMTc3NzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk4ZjcyOTZhYjVjOGNjZDJlMGJjMDc2MzQ5NzZhMzdmNTA4NDdkZjJkOGE1OWJkYjFlMTU3NjY0NzAwYjQ2NyIKKworUyA9ICIke1dPUktESVJ9L2RvY2Jvb2steHNsLSR7UFZ9IgorCitpbmhlcml0IGFsbGFyY2gKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay14c2wuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtdiAtbTc1NSAtZCAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCisKKwljcCAtdiAtUiBWRVJTSU9OIGNvbW1vbiBlY2xpcHNlIGVwdWIgZXh0ZW5zaW9ucyBmbyBoaWdobGlnaHRpbmcgaHRtbCBcCisJCWh0bWxoZWxwIGltYWdlcyBqYXZhaGVscCBsaWIgbWFucGFnZXMgcGFyYW1zIHByb2ZpbGluZyBcCisJCXJvdW5kdHJpcCBzbGlkZXMgdGVtcGxhdGUgdGVzdHMgdG9vbHMgd2ViaGVscCB3ZWJzaXRlIFwKKwkJeGh0bWwgeGh0bWwtMV8xIGNhdGFsb2cueG1sIFwKKwkke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCisKKwlsbiAtcyBWRVJTSU9OICR7RH0vJHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL1ZFUlNJT04ueHNsCisKKwlpbnN0YWxsIC12IC1tNjQ0IC1EIFJFQURNRSBcCisJCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0xLjc4LjEvUkVBRE1FLnR4dAorCWluc3RhbGwgLXYgLW02NDQgICAgUkVMRUFTRS1OT1RFUyogTkVXUyogXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtMS43OC4xCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKwlpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhzbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorCit9CisKK2RvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisgICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorICAgIHRoZW4KKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyAgICAgICAgIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorICAgICAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy4qL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorICAgIGZpCit9CisKK2RvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKKyAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKK30KKworUkRFUEVORFNfJHtQTn0gKz0gInBlcmwiCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L3htbC8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbCIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9L2RvYy8qIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNWI3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBiN2M0MmM2YTk4MjliZWE5MTFiMjIyMDFlZGQ3ZGYyYTliZWMxYTE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6NTI6MzQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBmY250bC5oIGZvciBnZXR0aW5nIGxvZmZfdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZG9zZnNjay9kb3Nmc2NrLmggfCAyICsrCisgZG9zZnNjay9sZm4uYyAgICAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZG9zZnNjay9kb3Nmc2NrLmggYi9kb3Nmc2NrL2Rvc2ZzY2suaAoraW5kZXggZDkzMTRiMS4uMjA3NmQ1ZiAxMDA2NDQKKy0tLSBhL2Rvc2ZzY2svZG9zZnNjay5oCisrKysgYi9kb3Nmc2NrL2Rvc2ZzY2suaAorQEAgLTUwLDYgKzUwLDggQEAKKyAjZGVmaW5lIENUX0xFX0wodikgKHYpCisgI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworIAorKyNpbmNsdWRlIDxmY250bC5oPgorKworICNkZWZpbmUgVkZBVF9MTl9BVFRSIChBVFRSX1JPIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZUyB8IEFUVFJfVk9MVU1FKQorIAorIC8qICsrcm9tYW46IFVzZSBvd24gZGVmaW5pdGlvbiBvZiBib290IHNlY3RvciBzdHJ1Y3R1cmUgLS0gdGhlIGtlcm5lbCBoZWFkZXJzJworZGlmZiAtLWdpdCBhL2Rvc2ZzY2svbGZuLmMgYi9kb3Nmc2NrL2xmbi5jCitpbmRleCA5YjJjZmMzLi5iYjA0ZmRhIDEwMDY0NAorLS0tIGEvZG9zZnNjay9sZm4uYworKysrIGIvZG9zZnNjay9sZm4uYworQEAgLTcsNiArNyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAjaW5jbHVkZSAiaW8uaCIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVGhlIHByb2JsZW0gaXMgdGhhdCB1bnNpZ25lZCBjaGFyWzJdIGlzCitndXJhbnRlZWQgdG8gYmUgOEJpdCBhbGlnbmVkIG9uIGFybQorYnV0IHVuc2lnbmVkIHNob3J0IGlzL25lZWRzIHRvIGJlIDE2Yml0IGFsaWduZWQKK3RoZSB1bmlvbiB7IHVuc2lnbmVkIHNob3J0OyB1bnNpZ25lZCBjaGFyWzJdIH0gdHJpY2sgCitkaWRuJ3Qgd29yayBzbyBubyB3ZSB1c2UgdGhlIGFscGhhIGhhY2suCisKK21lbWNweSBpbnRvIGFuIDE2Yml0IGFsaWduZWQKKworICAgIC16ZWNrZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy9kb3Nmc2NrL2Jvb3QuYy5vcmlnCTIwMDMtMDUtMTUgMTk6MzI6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZG9zZnN0b29scy9kb3Nmc2NrL2Jvb3QuYwkyMDAzLTA2LTEzIDE3OjQ0OjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM2LDE3ICszNiwxNSBAQAorICAgICB7IDB4ZmYsICI1LjI1XCIgMzIwayBmbG9wcHkgMnMvNDB0ci84c2VjIiB9LAorIH07CisgCistI2lmIGRlZmluZWQgX19hbHBoYSB8fCBkZWZpbmVkIF9faWE2NF9fIHx8IGRlZmluZWQgX19zMzkweF9fIHx8IGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fcHBjNjRfXworKworIC8qIFVuYWxpZ25lZCBmaWVsZHMgbXVzdCBmaXJzdCBiZSBjb3BpZWQgYnl0ZS13aXNlICovCisgI2RlZmluZSBHRVRfVU5BTElHTkVEX1coZikJCQlcCisgICAgICh7CQkJCQkJXAorIAl1bnNpZ25lZCBzaG9ydCBfX3Y7CQkJXAorIAltZW1jcHkoICZfX3YsICZmLCBzaXplb2YoX192KSApOwlcCistCUNGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmZiApOwlcCisrCUNGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmX192ICk7CVwKKyAgICAgfSkKKy0jZWxzZQorLSNkZWZpbmUgR0VUX1VOQUxJR05FRF9XKGYpIENGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmZiApCistI2VuZGlmCisrCisgCisgCisgc3RhdGljIGNoYXIgKmdldF9tZWRpYV9kZXNjciggdW5zaWduZWQgY2hhciBtZWRpYSApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhYmQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitFbnN1cmUgdGhlIF9fczggdHlwZSBpcyBwcm9wZXJseSBkZWZpbmVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZG9zZnNjay5oLm9yZwkyMDA2LTAyLTIxIDA4OjM2OjE0LjAwMDAwMDAwMCAtMDcwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Rvc2ZzY2suaAkyMDA2LTAyLTIxIDA4OjQwOjEyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTIyLDYgKzIyLDE0IEBACisgICAgICAgICN1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX3M4CisrI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgX19BU01fU1RVQl9CWVRFT1JERVJfSF9fCisrI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKyAKKyAvKiAyLjEga2VybmVscyB1c2UgbGUxNl90b19jcHUoKSB0eXBlIGZ1bmN0aW9ucyBmb3IgQ0ZfTEVfVyAmIENvLiwgYnV0IGRvbid0CistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZmlsZS5jLm9yZwkyMDA2LTAyLTIxIDA4OjM3OjM2LjAwMDAwMDAwMCAtMDcwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2ZpbGUuYwkyMDA2LTAyLTIxIDA4OjM3OjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTIzLDYgKzIzLDEwIEBACisgICAgICAgICN1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX3M4CisrI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdmNzMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDg5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworVGhpcyBwYXRjaCBmaXhlcyBwb3B1bGF0ZWQgZG9zZnMgaW1hZ2UgY3JlYXRpb24gd2l0aCBkaXJlY3RvcnkgCitzdHJ1Y3R1cmVzLiBFYXJsaWVyIGl0IHdhcyBjYXVzaW5nIHNlZ2ZhdWx0OyBhbmQgb25seSBpbWFnZSAKK3BvcHVsYXRpb24gd2l0aCBubyBzdWJkaXJlY3RvcmllcyB3YXMgd29ya2luZy4KKworSXNzdWVzIGZpeGVkOgorMS4gKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSBjaGVjayB3YXMgb25seSBuZWVkZWQgZm9yIHJvb3QgCisgICBkaXJlY3RvcnkgZW50cmllcy4gQW5kIHRoaXMgY2hlY2sgaXMgd3JvbmcgZm9yIG5vbi1yb290IAorICAgZGlyZWN0b3JpZXMuCisyLiBGb3IgZWFjaCBkaXIgZW50cnkgMiBkaXItPnRhYmxlIGVudHJpZXMgd2VyZSBuZWVkZWQsIG9uZSBmb3IgCisgICB0aGUgZmlsZS9kaXIgYW5kIDJuZCBmb3IgbG9uZyBmaWxlIG5hbWUgc3VwcG9ydC4gRWFybGllciBsb25nCisgICBuYW1lIHN1cHBvcnQgd2FzIGFkZGVkIGZvciBmaWxlbmFtZXMgYnV0IHRoZSAybmQgZW50cnkgCisgICBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiAmIGNvdW50aW5nIHdhcyBtaXNzZWQuCiszLiBUaGUgbWVtb3J5IGNsZWFyaW5nIHdhcyBtaXNzZWQgYXQgdGhlIGNvZGUgcGF0aCBhZnRlciBkaXItPnRhYmxlIAorICAgbWVtcm95IGFsbG9jYXRpb24uCis0LiBBZGQgZW50cmllcyBmb3IgLiAmIC4uIGRpcmVjdG9yaWVzIGluIGFsbCBub24tcm9vdCBkaXJlY3Rvcmllcy4KKzUuIFRoZSAuIGRpcmVjdG9yeSBwb2ludHMgdG8gdGhlIGNvcnJlY3QgZW50cnkgaW4gZmF0IG5vdy4KKzYuIEFsbCBkaXJlY3Rvcml5IGVudHJpZXMnIHNpemUgd2FzIG5vdCB6ZXJvIGFzIHJlcXVpcmVkIGZvciBkb3Nmc2NrLAorICAgTm93IGFsbCBkaXJlY3RvcnkgZW50cmllcycgc2l6ZSBpcyB6ZXJvLgorCitFbmhhbmNlbWVudHM6CisxLiBBZGRlZCBzdXBwb3J0IGZvciBsb25nIG5hbWVzIGZvciBkaXJlY3RvcnkgbmFtZXMuIFRoaXMgaXMgc2FtZQorICAgYXMgdGhlIGV4aXN0aW5nIGxvbmcgbmFtZSBzdXBwb3J0IGZvciBmaWxlbmFtZXMuCisyLiBBZGRlZCBlcnJvciBtZXNzYWdlcyBmb3IgcHJldmlvdXNseSBzaWxlbnQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIAorICAgb3RoZXIgZXJyb3JzLgorMy4gLWQgb3B0aW9ucyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIGZhdDMyLCBzbyBub3cgdGhyb3dpbmcgCisgICBhbiBlcnJvciBmb3IgdGhhdC4KKzQuIFVzZSBwcmVkZWZpbmVkIHN0cnVjdHVyZXMgZnJvbSBrZXJuZWwncyBtc2Rvc19mcy5oIGZpbGUsIHJhdGhlciAKKyAgIHRoYW4gZGVmaW5pbmcgYWdhaW4gaGVyZS4gQW5kIGFjY29yZGluZ2x5IGNoYW5nZSB0aGUgbmFtZXMgJiB1c2UKKyAgIG9mIHN0cnVjdHVyZSB2YXJpYWJsZXMuCisKK091dHN0YW5kaW5nIElzc3VlczoKKzEuIFRoZSAuLiBkaXJlY3RvcnkgZW50cnkgZG8gbm90IHBvaW50IHRvIHRoZSBwYXJlbnQgb2YgY3VycmVudAorICAgZGlyZWN0b3J5LiBUaGlzIGlzc3VlIGNhbiBiZSBmaXhlZCBieSBydW5uaW5nIGRvc2ZzY2sgLWEgYWZ0ZXIKKyAgIGltYWdlIGNyZWF0aW9uLgorMi4gRm9yIGZpbGVzIHRoZSBmaWxlc2l6ZSBpcyBjb3JyZWN0LCBidXQgdGhlIGNsdXN0ZXJzIHNpemUgaXMgbW9yZSAKKyAgIHRoYW4gaXQgbmVlZHMgdG8gYmUsIHRoaXMgYWxzbyBjYW4gYmUgZml4ZWQgYnkgcnVubmluZyBkb3Nmc2NrIC1hCisgICBhZnRlciBpbWFnZSBjcmVhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gCisyMDExLzEyLzEzCisKKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCitAQCAtMjEsNyArMjEsMTcgQEAKKyAgICBKdW5lIDIwMDQgLSBKb3JkYW4gQ3JvdXNlIChpbmZvLmxpbnV4QGFtZC5jb20pCisgICAgQWRkZWQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0gICAKKysKKysgICAyMDExLTEyLTEzOiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorKyAgIEVuaGFuY2VkIHRoZSAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IGZvciBwb3B1bGF0aW9uIG9mIGltYWdlIHdoaWxlCisrICAgY3JlYXRpb24uIEVhcmxpZXIgc3ViZGlyZWN0b3JlcyBzdXBwb3J0IHdhcyBicm9rZW4sIG9ubHkgZmlsZXMgaW4KKysgICB0aGUgcm9vdGRpciB3ZXJlIHN1cHBvcnRlZC4gTm93IGRpcmVjdG9yeSBoaXJhcmNoeSBpcyBzdXBwb3J0ZWQuCisrICAgQWxzbyBhZGRlZCBsb25nIGZpbGVuYW1lIHN1cHBvcnQgdG8gZGlyZWN0b3J5IG5hbWVzLgorKyAgICAgVGhlIC1kIDxkaXJlY3Rvcnk+IG9wdGlvbiAoaW1hZ2UgcG9wdWxhdGlvbiB3aGlsZSBjcmVhdGlvbikKKysgICBpcyBicm9rZW4gd2l0aCBmYXQzMi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLCBBbGwgUmlnaHRzIFJlc2VydmVkCisrCisrCisgICAgRml4ZXMvYWRkaXRpb25zIE1heSAxOTk4IGJ5IFJvbWFuIEhvZGVrCisgICAgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPjoKKyAgICAtIEF0YXJpIGZvcm1hdCBzdXBwb3J0CitAQCAtODYsMjMgKzk2LDIzIEBACisgIyB1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCistI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKy0KKysjaWZuZGVmIF9fQVNNX1NUVUJfQllURU9SREVSX0hfXworICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CistI2lmZGVmIF9fbGUxNl90b19jcHUKKy0vKiArK3JvbWFuOiAyLjEga2VybmVsIGhlYWRlcnMgZGVmaW5lIHRoZXNlIGZ1bmN0aW9uLCB0aGV5J3JlIHByb2JhYmx5IG1vcmUKKy0gKiBlZmZpY2llbnQgdGhlbiBjb2RpbmcgdGhlIHN3YXBzIG1hY2hpbmUtaW5kZXBlbmRlbnRseS4gKi8KKy0jZGVmaW5lIENGX0xFX1cJX19sZTE2X3RvX2NwdQorLSNkZWZpbmUgQ0ZfTEVfTAlfX2xlMzJfdG9fY3B1CistI2RlZmluZSBDVF9MRV9XCV9fY3B1X3RvX2xlMTYKKy0jZGVmaW5lIENUX0xFX0wJX19jcHVfdG9fbGUzMgorLSNlbHNlCistI2RlZmluZSBDRl9MRV9XKHYpICgoKCh2KSAmIDB4ZmYpIDw8IDgpIHwgKCgodikgPj4gOCkgJiAweGZmKSkKKy0jZGVmaW5lIENGX0xFX0wodikgKCgodW5zaWduZWQpKHYpPj4yNCkgfCAoKCh1bnNpZ25lZCkodik+PjgpJjB4ZmYwMCkgfCBcCistICAgICAgICAgICAgICAgKCgodW5zaWduZWQpKHYpPDw4KSYweGZmMDAwMCkgfCAoKHVuc2lnbmVkKSh2KTw8MjQpKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorKworKyN1bmRlZiBDRl9MRV9XCisrI3VuZGVmIENGX0xFX0wKKysjdW5kZWYgQ1RfTEVfVworKyN1bmRlZiBDVF9MRV9MCisrCisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjZGVmaW5lIENGX0xFX1codikgYnN3YXBfMTYodikKKysjZGVmaW5lIENGX0xFX0wodikgYnN3YXBfMzIodikKKyAjZGVmaW5lIENUX0xFX1codikgQ0ZfTEVfVyh2KQorICNkZWZpbmUgQ1RfTEVfTCh2KSBDRl9MRV9MKHYpCistI2VuZGlmIC8qIGRlZmluZWQoX19sZTE2X3RvX2NwdSkgKi8KKyAgICAgCisgI2Vsc2UKKyAKK0BAIC0yNTMsMzMgKzI2Myw2IEBAIHN0cnVjdCBmYXQzMl9mc2luZm8geworICAgX191MzIJCXJlc2VydmVkMls0XTsKKyB9OworIAorLS8qIFRoaXMgc3RvcmVzIHVwIHRvIDEzIGNoYXJzIG9mIHRoZSBuYW1lICovCistCistc3RydWN0IG1zZG9zX2Rpcl9zbG90IHsKKy0gICAgICAgIF9fdTggICAgaWQ7ICAgICAgICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAqLworLSAgICAgICAgX191OCAgICBuYW1lMF80WzEwXTsgICAgLyogZmlyc3QgNSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy0gICAgICAgIF9fdTggICAgYXR0cjsgICAgICAgICAgIC8qIGF0dHJpYnV0ZSBieXRlICovCistICAgICAgICBfX3U4ICAgIHJlc2VydmVkOyAgICAgICAvKiBhbHdheXMgMCAqLworLSAgICAgICAgX191OCAgICBhbGlhc19jaGVja3N1bTsgLyogY2hlY2tzdW0gZm9yIDguMyBhbGlhcyAqLworLSAgICAgICAgX191OCAgICBuYW1lNV8xMFsxMl07ICAgLyogNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLSAgICAgICAgX191MTYgICBzdGFydDsgICAgICAgICAgLyogc3RhcnRpbmcgY2x1c3RlciBudW1iZXIsIDAgaW4gbG9uZyBzbG90cyAqLworLSAgICAgICAgX191OCAgICBuYW1lMTFfMTJbNF07ICAgLyogbGFzdCAyIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLX07CistCistc3RydWN0IG1zZG9zX2Rpcl9lbnRyeQorLSAgeworLSAgICBjaGFyCW5hbWVbOF0sIGV4dFszXTsJLyogbmFtZSBhbmQgZXh0ZW5zaW9uICovCistICAgIF9fdTggICAgICAgIGF0dHI7CQkJLyogYXR0cmlidXRlIGJpdHMgKi8KKy0gICAgX191OAlsY2FzZTsJCQkvKiBDYXNlIGZvciBiYXNlIGFuZCBleHRlbnNpb24gKi8KKy0gICAgX191OAljdGltZV9tczsJCS8qIENyZWF0aW9uIHRpbWUsIG1pbGxpc2Vjb25kcyAqLworLSAgICBfX3UxNgljdGltZTsJCQkvKiBDcmVhdGlvbiB0aW1lICovCistICAgIF9fdTE2CWNkYXRlOwkJCS8qIENyZWF0aW9uIGRhdGUgKi8KKy0gICAgX191MTYJYWRhdGU7CQkJLyogTGFzdCBhY2Nlc3MgZGF0ZSAqLworLSAgICBfX3UxNglzdGFydGhpOwkJLyogaGlnaCAxNiBiaXRzIG9mIGZpcnN0IGNsLiAoRkFUMzIpICovCistICAgIF9fdTE2CXRpbWUsIGRhdGUsIHN0YXJ0OwkvKiB0aW1lLCBkYXRlIGFuZCBmaXJzdCBjbHVzdGVyICovCistICAgIF9fdTMyCXNpemU7CQkJLyogZmlsZSBzaXplIChpbiBieXRlcykgKi8KKy0gIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLQorIC8qIFRoZSAiYm9vdCBjb2RlIiB3ZSBwdXQgaW50byB0aGUgZmlsZXN5c3RlbS4uLiBpdCB3cml0ZXMgYSBtZXNzYWdlIGFuZAorICAgIHRlbGxzIHRoZSB1c2VyIHRvIHRyeSBhZ2FpbiAqLworIAorQEAgLTM1Niw3ICszMzksNiBAQCBzdGF0aWMgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqcm9vdF9kaXI7Cisgc3RhdGljIGludCBzaXplX3Jvb3RfZGlyOwkvKiBTaXplIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbiBieXRlcyAqLworIHN0YXRpYyBpbnQgc2VjdG9yc19wZXJfY2x1c3RlciA9IDA7CS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIGNsdXN0ZXIgKi8KKyBzdGF0aWMgaW50IHJvb3RfZGlyX2VudHJpZXMgPSAwOwkvKiBOdW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworLXN0YXRpYyBpbnQgcm9vdF9kaXJfbnVtX2VudHJpZXMgPSAwOworIHN0YXRpYyBpbnQgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAwOworIAorIHN0YXRpYyBjaGFyICpibGFua19zZWN0b3I7CQkvKiBCbGFuayBzZWN0b3IgLSBhbGwgemVyb3MgKi8KK0BAIC0xMzE1LDcgKzEyOTcsNyBAQCBzZXR1cF90YWJsZXMgKHZvaWQpCisgICAgICAgZGUtPmRhdGUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoY3RpbWUtPnRtX21kYXkgKworIAkJCQkJICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkJICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworLSAgICAgIGRlLT5jdGltZV9tcyA9IDA7CisrICAgICAgZGUtPmN0aW1lX2NzID0gMDsKKyAgICAgICBkZS0+Y3RpbWUgPSBkZS0+dGltZTsKKyAgICAgICBkZS0+Y2RhdGUgPSBkZS0+ZGF0ZTsKKyAgICAgICBkZS0+YWRhdGUgPSBkZS0+ZGF0ZTsKK0BAIC0xNDUxLDE2ICsxNDMzLDIzIEBAIHdyaXRlX3RhYmxlcyAodm9pZCkKKyAKKyAvKiBBZGQgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgYWxzbyB3cml0ZSBpdCBpbnRvIHRoZSBpbWFnZSAqLworIAorLXN0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJhc2UsIGNoYXIgKmV4dCkgeworK3N0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmRvc19uYW1lKSB7CisgICAKKyAgIGNoYXIgKmNoID0gZmlsZW5hbWU7CisgICBpbnQgaSwgbGVuOworIAorLSAgbWVtc2V0KGJhc2UsIDB4MjAsIDgpOworLSAgbWVtc2V0KGV4dCwgMHgyMCwgMyk7CisrICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi4iKSkgeworKyAgICBzdHJuY3B5KGRvc19uYW1lLCBNU0RPU19ET1QsIE1TRE9TX05BTUUpOworKyAgICByZXR1cm47CisrICB9CisrICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi4uIikpIHsKKysgICAgc3RybmNweShkb3NfbmFtZSwgTVNET1NfRE9URE9ULCBNU0RPU19OQU1FKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgbWVtc2V0KGRvc19uYW1lLCAweDIwLCBNU0RPU19OQU1FKTsKKyAgIAorICAgZm9yKGxlbiA9IDAgOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKykgeworLSAgICBiYXNlW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgZG9zX25hbWVbbGVuKytdID0gdG91cHBlcigqY2gpOworICAgICBpZiAobGVuID09IDgpIGJyZWFrOworICAgfQorICAgCitAQCAtMTQ2OCw3ICsxNDU3LDcgQEAgc3RhdGljIHZvaWQgY29weV9maWxlbmFtZShjaGFyICpmaWxlbmFtZQorICAgaWYgKCpjaCkgY2grKzsKKyAgIAorICAgZm9yKGxlbiA9IDAgOyAqY2g7IGNoKyspIHsKKy0gICAgZXh0W2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgZG9zX25hbWVbOCArIGxlbisrXSA9IHRvdXBwZXIoKmNoKTsKKyAgICAgaWYgKGxlbiA9PSAzKSBicmVhazsKKyAgIH0KKyB9CitAQCAtMTU1MSw3ICsxNTQwLDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgaW50IHN0YXJ0OworICAgaW50IHVzZWRzZWMsIHRvdGFsc2VjOworIAorLSAgY2hhciBuYW1lODNbOF0sIGV4dDgzWzNdOworKyAgY2hhciBkb3NfbmFtZVtNU0RPU19OQU1FKzFdOworIAorICAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworICAgaW50IGk7CitAQCAtMTU2MiwyMyArMTU1MSwyMiBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICBpZiAoZGlyLT5yb290KSB7CisgICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworICAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CisrICAgICAgcmV0dXJuOworICAgICB9CisgICB9CisgICBlbHNlIHsKKy0gICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CistICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKy0JZGlyLT50YWJsZSA9IAorLQkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIGVsc2UgeworLQlkaXItPnRhYmxlID0gCistCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKy0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0KKy0JbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistICAgICAgfQorLQorLSAgICAgIGRpci0+ZW50cmllcysrOworLSAgICB9CisrICAgIC8qIDIgZW50cmllcywgb25lIGV4dHJhIGZvciBsb25nIGZpbGVuYW1lICovCisrICAgIGlmICghZGlyLT50YWJsZSkKKysgICAgICBkaXItPnRhYmxlID0KKysgICAgICAgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYygyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZWxzZQorKyAgICAgIGRpci0+dGFibGUgPQorKyAgICAgICAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAyICogKGRpci0+ZW50cmllcyArIDEpICoKKysgICAgICAJCQkJICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgcHJpbnRmKCJFcnJvciAtIHJlYWxsb2MgZmFpbGVkXG4iKTsKKysgICAgbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBkaXItPmVudHJpZXMgKz0gMjsKKyAgIH0KKyAKKyAgIGluZmlsZSA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKTsKK0BAIC0xNjExLDEzICsxNTk5LDEzIEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgICAgcmV0dXJuIC0xOworICAgfQorIAorLSAgcHJpbnRmKCJBREQgJXNcbiIsIGZpbGVuYW1lKTsKKysgIHByaW50ZigiQUREIEZJTEUgJXNcbiIsIGZpbGVuYW1lKTsKKyAKKyAgIC8qIEdyYWIgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICovCisgICBiYXNlID0gYmFzZW5hbWUoZmlsZW5hbWUpOworICAgCistICAvKiBFeHRyYWN0IG91dCB0aGUgOC4zIG5hbWUgKi8KKy0gIGNvcHlfZmlsZW5hbWUoYmFzZSwgbmFtZTgzLCBleHQ4Myk7CisrICAvKiBjb252ZXJ0IGZvciBkb3MgZmF0IHN0cnVjdHVyZSAgKi8KKysgIGNvcHlfZmlsZW5hbWUoYmFzZSwgZG9zX25hbWUpOworIAorICAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKyAKK0BAIC0xNjI5LDEyICsxNjE3LDkgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgCisgICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisgICAKKy0gIGZvcihpID0gMDsgaSA8IDg7IGkrKykgCistICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIG5hbWU4M1tpXTsKKysgIGZvcihpID0gMDsgaSA8IE1TRE9TX05BTUU7IGkrKykKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZG9zX25hbWVbaV07CisgICAKKy0gIGZvcihpID0gMDsgaSA8IDM7IGkrKykgCistICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGV4dDgzW2ldOworLQorICAgcCA9IGJhc2U7CisgCisgICBjb3B5X25hbWUoc2xvdC0+bmFtZTBfNCwgMTAsICZwKTsKK0BAIC0xNjQ1LDggKzE2MzAsNyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisgICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisgCistICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBuYW1lODMsIDgpOworLSAgc3RybmNweShlbnRyeS0+ZXh0LCBleHQ4MywgMyk7CisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBkb3NfbmFtZSwgTVNET1NfTkFNRSk7CisgCisgCisgICAvKiBJZiB0aGUgdXNlciBoYXMgaXQgcmVhZCBvbmx5LCB0aGVuIGFkZCByZWFkIG9ubHkgdG8gdGhlIGluY29taW5nCitAQCAtMTY2NSw3ICsxNjQ5LDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorIAkJCQkgICAgICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkgICAgICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworIAorLSAgZW50cnktPmN0aW1lX21zID0gMDsKKysgIGVudHJ5LT5jdGltZV9jcyA9IDA7CisgICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKyAgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworICAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CitAQCAtMTcxMSw2ICsxNjk1LDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorIAorICBleGl0X2FkZDoKKyAgIGlmIChpbmZpbGUpIGNsb3NlKGluZmlsZSk7CisrICByZXR1cm4gMDsKKyB9CisgCisgLyogQWRkIGEgbmV3IGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGluIHR1cm4gcG9wdWxhdGUgCitAQCAtMTcyNywxMCArMTcxMiwxOCBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICBzdHJ1Y3QgZGlyZW50ICpkZW50cnkgPSAwOworICAgaW50IHJlbWFpbjsKKyAgIGNoYXIgKmRhdGE7CisrICBjaGFyICpiYXNlOworKyAgY2hhciBkb3NfbmFtZVtNU0RPU19OQU1FKzFdOworKyAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworKyAgaW50IGk7CisrICBjaGFyICpwOworIAorICAgLyogSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCistICBpZiAoIXJkZGlyKSByZXR1cm47CistICAKKysgIGlmICghcmRkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGRpciBkb2VzIG5vdCBleGlzdDogJXNcbiIsIGZpbGVuYW1lKTsKKysgICAgcmV0dXJuOworKyAgfQorKworICAgaWYgKGRpci0+cm9vdCkgeworICAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKyAgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworQEAgLTE3MzgsMjggKzE3MzEsNTggQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgICB9CisgICB9CisgICBlbHNlIHsKKy0gICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CistICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKy0JZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIGVsc2UgeworLQlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKy0JCQkJCQkJc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0KKy0JLyogWmVybyBpdCBvdXQgdG8gYXZvaWQgaXNzdWVzICovCistCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIH0KKy0JZGlyLT5lbnRyaWVzKys7CisrICAgIC8qIDIgZW50cmllcywgb25lIGV4dHJhIGZvciBsb25nIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSAqLworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYygyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZWxzZQorKyAgICAgIGRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIDIgKiAoZGlyLT5lbnRyaWVzICsgMSkgKgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBpZiAoIWRpci0+dGFibGUpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKysgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKyAgICAgfQorKyAgICAvKiBaZXJvIGl0IG91dCB0byBhdm9pZCBpc3N1ZXMgKi8KKysgICAgbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBkaXItPmVudHJpZXMgKz0gMjsKKyAgIH0KKyAKKysgIHByaW50ZigiQUREIERJUiAlc1xuIiwgZmlsZW5hbWUpOworICAgLyogTm93LCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgbmV3IGRpcmVjdG9yeSAqLworICAgbmV3ZGlyID0gKHN0cnVjdCBkaXJfZW50cnkgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CistICBpZiAoIW5ld2RpcikgZ290byBleGl0X2FkZF9kaXI7CisrICBpZiAoIW5ld2RpcikgeworKyAgICBwcmludGYoIkVycm9yIC0gY2FsbG9jIGZhaWxlZFxuIik7CisrICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgfQorKworKyAgLyogR3JhYiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgKi8KKysgIGJhc2UgPSBiYXNlbmFtZShmaWxlbmFtZSk7CisrCisrICAvKiBjb252ZXJ0IGZvciBkb3Mgc3RydWN0dXJlICAqLworKyAgY29weV9maWxlbmFtZShiYXNlLCBkb3NfbmFtZSk7CisrCisrICAvKiBNYWtlIGFuIGV4dGVuZGVkIG5hbWUgc2xvdCAqLworKyAgc2xvdCA9IChzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKikgJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysgIHNsb3QtPmlkID0gJ0EnOworKyAgc2xvdC0+YXR0ciA9IDB4MEY7CisrICBzbG90LT5yZXNlcnZlZCA9IDA7CisrICBzbG90LT5zdGFydCA9IDA7CisrCisrICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisgCisrICBmb3IgKGkgPSAwOyBpIDwgTVNET1NfTkFNRTsgaSsrKQorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBkb3NfbmFtZVtpXTsKKysKKysgIHAgPSBiYXNlOworKworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTVfMTAsIDEyLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTExXzEyLCA0LCAmcCk7CisrCisrICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisgICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisgCistICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBiYXNlbmFtZShmaWxlbmFtZSksIHNpemVvZihlbnRyeS0+bmFtZSkpOworLSAgCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBkb3NfbmFtZSwgTVNET1NfTkFNRSk7CisrCisgICBlbnRyeS0+YXR0ciA9IEFUVFJfRElSOworICAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKyAKK0BAIC0xNzcwLDI1ICsxNzkzLDMyIEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKyAKKy0gIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWVfY3MgPSAwOworICAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisgICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworIAorICAgLyogTm93LCByZWFkIHRoZSBkaXJlY3RvcnkgKi8KKyAKKy0gIHdoaWxlKChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKysKKysgIHdoaWxlKChiYXNlWzBdICE9ICcuJykgJiYgKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICAgY2hhciAqYnVmZmVyOworLSAgICAKKy0gICAgaWYgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpCistICAgICAgY29udGludWU7CisgCistICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKy0gICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIHsKKysgICAgICAgIC8qIGRvcyBhbHNvIGhhcyAuICYgLi4gZGlyZWN0b3J5IGVudHJpZXMgKi8KKysgICAgICBpZiAoISAoKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikpIHx8ICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLi4iKSkpKSB7CisrICAgICAgICAvKiBpZ25vcmUgb3RoZXIgLiogZmlsZXMgKi8KKysgICAgICAgIHByaW50ZigiRXJyb3IgLSBGaWxlL0RpciBuYW1lIGlzIG5vdCBkb3MgY29tcGF0aWJsZSwgaWdub3JlZDogJXNcbiIsIGRlbnRyeS0+ZF9uYW1lKTsKKysgICAgICAgIGNvbnRpbnVlOworKyAgICAgIH0KKysgICAgfQorIAorICAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIHN0cmxlbihkZW50cnktPmRfbmFtZSkgKyAzKTsKKy0gICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICBpZiAoIWJ1ZmZlcikgeworKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIG1hbGxvYyBmYWlsZWRcbiIpOworKyAgICAgICAgZ290byBleGl0X2FkZF9kaXI7CisrICAgIH0KKyAgICAgCisgICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBmaWxlbmFtZSwgZGVudHJ5LT5kX25hbWUpOworICAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CitAQCAtMTgwNiwxMSArMTgzNiwyMyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICAvKiBOb3cgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeSBoYXMgYmVlbiB3cml0dGVuLCBnbyBhaGVhZCBhbmQgd3JpdGUgdGhlIGRpcmVjdG9yeQorICAgICAgZW50cnkgYXMgd2VsbCAqLworIAorKyAgZW50cnktPnNpemUgPSAwOyAvKiBhIGRpcmVjdG9yeSBoYXMgemVybyBzaXplICovCisrCisrICBpZiAoYmFzZVswXSA9PSAnLicpICB7IC8qIC4gJiAuLiBwb2ludCB0byBwYXJlbnQncyBjbHVzdGVyICovCisrICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgfQorKworICAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhsYXN0X2NsdXN0ZXJfd3JpdHRlbik7CisgICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKGxhc3RfY2x1c3Rlcl93cml0dGVuICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAKKy0gIGVudHJ5LT5zaXplID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKysKKysvKiAuIGRpciBzdGFydCBwb2ludHMgdG8gcGFyZW50ICovCisrICBuZXdkaXItPnRhYmxlWzFdLnN0YXJ0ID0gZW50cnktPnN0YXJ0OworKy8qIC4uIGRpciBwb2ludHMgdG8gcGFyZW50IG9mIHBhcmVudCovCisrLyogLi4gZGlyIHN0YXJ0IGlzIG5vdCBzZXQgeWV0LCB3b3VsZCBuZWVkIG1vcmUgY2hhbmdlcyB0byB0aGUgY29kZSwKKysgKiBidXQgZG9zZnNjayBjYW4gZml4IHRoZXNlIC4uIGVudHJ5IHN0YXJ0IHBvaW50ZXJzIGNvcnJlY3RseSAqLworKworKyAgcmVtYWluID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKyAgIAorLSAgcmVtYWluID0gZW50cnktPnNpemU7CisgICBkYXRhID0gKGNoYXIgKikgbmV3ZGlyLT50YWJsZTsKKyAKKyAgIHdoaWxlKHJlbWFpbikgeworQEAgLTE4NTgsNiArMTkwMCw3IEBAIHN0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXIKKyAKKyAgIGlmICghbmV3ZGlyKSB7CisgICAgIGNsb3NlZGlyKGRpcik7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYWxsb2MgZmFpbGVkIVxuIik7CisgICAgIHJldHVybjsKKyAgIH0KKyAKK0BAIC0xODc3LDcgKzE5MjAsMTAgQEAgc3RhdGljIHZvaWQgYWRkX3Jvb3RfZGlyZWN0b3J5KGNoYXIgKmRpcgorICAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworICAKKyAgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihlbnRyeS0+ZF9uYW1lKSArIDMpOworLSAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIGlmICghYnVmZmVyKSB7CisrICAgICAgICBwcmludGYoIkVycm9yIC0gbWFsbG9jIGZhaWxlZCFcbiIpOworKyAgICAgICAgY29udGludWU7CisrICAgIH0KKyAKKyAgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworICAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CitAQCAtMjI0NSw2ICsyMjkxLDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgaWYgKGNoZWNrICYmIGxpc3RmaWxlKQkvKiBBdXRvIGFuZCBzcGVjaWZpZWQgYmFkIGJsb2NrIGhhbmRsaW5nIGFyZSBtdXR1YWxseSAqLworICAgICBkaWUgKCItYyBhbmQgLWwgYXJlIGluY29tcGF0aWJsZSIpOwkJLyogZXhjbHVzaXZlIG9mIGVhY2ggb3RoZXIhICovCisgCisrICBpZiAoZGlybmFtZSAmJiAoc2l6ZV9mYXQgPT0gMzIpKQorKyAgICBkaWUgKCItZCBpcyBpbmNvbXBhdGlibGUgd2l0aCBGQVQzMiIpOworKworICAgaWYgKCFjcmVhdGUpIHsKKyAgICAgY2hlY2tfbW91bnQgKGRldmljZV9uYW1lKTsJLyogSXMgdGhlIGRldmljZSBhbHJlYWR5IG1vdW50ZWQ/ICovCisgICAgIGRldiA9IG9wZW4gKGRldmljZV9uYW1lLCBPX1JEV1IpOwkvKiBJcyBpdCBhIHN1aXRhYmxlIGRldmljZSB0byBidWlsZCB0aGUgRlMgb24/ICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1YzhjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvaW5jbHVkZS1saW51eC10eXBlcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitta2Rzb2ZzIGlzIHVzaW5nIHR5cGVzIG9mIHRoZSBzdHlsZSBfX3U4LCB3aGljaCBpdCBnZXRzIHdpdGggc29tZQordmVyc2lvbnMgb2YgbGliYyBoZWFkZXJzIHZpYSBsaW51eC9oZHJlZy5oIGluY2x1ZGluZyBhc20vdHlwZXMuaC4KK05ld2VyIHZlcnNpb24gb2YgZmVkb3JhIChhdCBsZWFzdCkgaGF2ZSBhIGhkcmVnLmggd2hpY2hkb2VzIG5vdAoraW5jbHVkZSBhc20vdHlwZXMuaC4gVG8gd29yayBhcm91bmQgdGhpcyBwYXRjaCBta2Rvc2ZzLmMgdG8gZXhwbGljaXR5CitpbmNsdWRlIGxpbnV4L3R5cGVzLmggd2hpY2ggd2lsbCBpbiB0dXJuIHB1bGwgaW4gYXNtL3R5cGVzLmggd2hpY2gKK2RlZmluZXMgdGhlc2UgdmFyaWFibGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL21rZG9zZnMvbWtkb3Nmcy5jfgkyMDA2LTA3LTEyIDE4OjQ2OjIxLjAwMDAwMDAwMCArMTAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9ta2Rvc2ZzL21rZG9zZnMuYwkyMDA2LTA3LTEyIDE4OjQ2OjIxLjAwMDAwMDAwMCArMTAwMAorQEAgLTYwLDYgKzYwLDcgQEAKKyAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorICNpbmNsdWRlIDxsaW51eC9mcy5oPgorICNpbmNsdWRlIDxsaW51eC9mZC5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjFiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtYm9vdGNvZGUucGF0Y2gKQEAgLTAsMCArMSwyNDEgQEAKK0FkZCBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvQ2hhbmdlTG9nCTE5OTctMDYtMTggMTA6MDk6MzguMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvQ2hhbmdlTG9nCTIwMTEtMTItMDYgMTI6MTQ6MjMuNjM0MDExNTU4ICswMDAwCitAQCAtMSwzICsxLDE0IEBACisrMTl0aCBKdW5lIDIwMDMJCQlTYW0gQmluZ25lciAoc2FtQGJpbmduZXIuY29tKQorKworKwlBZGRlZCBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZSBzbyB0aGF0IGlmIHlvdSBoYXZlCisrCWZvciBleGFtcGxlIFdpbmRvd3MgMjAwMCBib290IGNvZGUsIHlvdSBjYW4gaGF2ZSBpdCB3cml0ZSB0aGF0CisrCWFzIHRoZSBib290Y29kZS4gIFRoaXMgaXMgYSBkdW1wIG9mIHRoZSBiZWhpbm5pbmcgb2YgYSBwYXJ0aXRpb24KKysJZ2VuZXJhbGx5IDUxMiBieXRlcywgYnV0IGNhbiBiZSB1cCB0byByZXNlcnZlZCBzZWN0b3JzKjUxMiBieXRlcy4KKysgICAgICAgIEFsc28gd3JpdGVzIDB4ODAgYXMgdGhlCUJJT1MgZHJpdmUgbnVtYmVyIGlmIHdlIGFyZSBmb3JtYXR0aW5nIGEKKysJaGFyZCBkcml2ZSwgYW5kIHNldHMgdGhlIG51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyB0byBiZSB0aGUKKysJbnVtYmVyIG9mIHNlY3RvcnMgaW4gb25lIHRyYWNrLiBUaGVzZSB3ZXJlIHJlcXVpcmVkIHNvIHRoYXQgRE9TCisrCWNvdWxkIGJvb3QgdXNpbmcgdGhlIGJvb3Rjb2RlLgorKworIDI4dGggSmFudWFyeSAxOTk1CQlILiBQZXRlciBBbnZpbiAoaHBhQHlnZ2RyYXNpbC5jb20pCisgCisgCUJldHRlciBhbGdvcml0aG0gdG8gc2VsZWN0IGNsdXN0ZXIgc2l6ZXMgb24gbGFyZ2UgZmlsZXN5c3RlbXMuCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy44Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLjgJMjAwNC0wMi0yNSAxOTozNjowNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLjgJMjAxMS0xMi0wNiAxMjoxOTo1NC43Nzc4ODg0MzQgKzAwMDAKK0BAIC00NCw2ICs0NCwxMCBAQAorIC5JIG1lc3NhZ2UtZmlsZQorIF0KKyBbCisrLkIgXC1CCisrLkkgYm9vdGNvZGUtZmlsZQorK10KKytbCisgLkIgXC1uCisgLkkgdm9sdW1lLW5hbWUKKyBdCitAQCAtMTY1LDYgKzE2OSwxOCBAQAorIGNhcnJpYWdlIHJldHVybi1saW5lIGZlZWQgY29tYmluYXRpb25zLCBhbmQgdGFicyBoYXZlIGJlZW4gZXhwYW5kZWQuCisgSWYgdGhlIGZpbGVuYW1lIGlzIGEgaHlwaGVuICgtKSwgdGhlIHRleHQgaXMgdGFrZW4gZnJvbSBzdGFuZGFyZCBpbnB1dC4gCisgLlRQCisrLkJJIFwtQiAiIGJvb3Rjb2RlLWZpbGUiCisrVXNlcyBib290IG1hY2hpbmUgY29kZSBmcm9tIGZpbGUgImZpbGUiLiAgT24gYW55IHRoaW5nIG90aGVyIHRoYW4gRkFUMzIsCisrdGhpcyBvbmx5IHdyaXRlcyB0aGUgZmlyc3QgMyBieXRlcywgYW5kIDQ4MCBieXRlcyBmcm9tIG9mZnNldCAzRWguICBPbgorK0ZBVDMyLCB0aGlzIHdyaXRlcyB0aGUgZmlyc3QgMyBieXRlcywgNDIwIGJ5dGVzIGZyb20gb2Zmc2V0IDVBaCB0byBib3RoCisrcHJpbWFyeSBhbmQgYmFja3VwIGJvb3Qgc2VjdG9ycy4gIEFsc28gd3JpdGVzIGFsbCBvdGhlciByZXNlcnZlZCBzZWN0b3JzCisrZXhjbHVkaW5nIHRoZSBzZWN0b3JzIGZvbGxvd2luZyBib290IHNlY3RvcnMgKHVzdWFsbHkgc2VjdG9yIDIgYW5kIDcpLgorK0RvZXMgbm90IHJlcXVpcmUgdGhhdCB0aGUgaW5wdXQgZmlsZSBiZSBhcyBsYXJnZSBhcyByZXNlcnZlZF9zZWN0b3JzKjUxMi4KKytUbyBtYWtlIGEgRkFUMzIgcGFydGl0aW9uIGJvb3RhYmxlLCB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHRoZSBmaXJzdAorKzEzIHNlY3RvcnMgKDY2NTYgYnl0ZXMpLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBwYXJ0aXRpb24gYXMgdGhlIGFyZ3VtZW50CisrdG8gY2xvbmUgdGhlIGJvb3QgY29kZSBmcm9tIHRoYXQgcGFydGl0aW9uLgorK2kuZSBta2Rvc2ZzIC1CIC9kZXYvc2RhMSAvZGV2L3NkYTEKKysuVFAKKyAuQkkgXC1uICIgdm9sdW1lLW5hbWUiCisgU2V0cyB0aGUgdm9sdW1lIG5hbWUgKGxhYmVsKSBvZiB0aGUgZmlsZXN5c3RlbS4gIFRoZSB2b2x1bWUgbmFtZSBjYW4KKyBiZSB1cCB0byAxMSBjaGFyYWN0ZXJzIGxvbmcuICBUaGUgZGVmYXVsdCBpcyBubyBsYWJlbC4KK0BAIC0xOTgsOCArMjE0LDkgQEAKKyBzaW1wbHkgd2lsbCBub3Qgc3VwcG9ydCBpdCA7KQorIC5TSCBBVVRIT1IKKyBEYXZlIEh1ZHNvbiAtIDxkYXZlQGh1bWJ1Zy5kZW1vbi5jby51az47IG1vZGlmaWVkIGJ5IFBldGVyIEFudmluCistPGhwYUB5Z2dkcmFzaWwuY29tPi4gRml4ZXMgYW5kIGFkZGl0aW9ucyBieSBSb21hbiBIb2RlaworLTxyb21hbkBob2Rlay5uZXQ+IGZvciBEZWJpYW4vR05VIExpbnV4LgorKzxocGFAeWdnZHJhc2lsLmNvbT4gYW5kIFNhbSBCaW5nbmVyIDxzYW1AYmluZ25lci5jb20+LiBGaXhlcyBhbmQKKythZGRpdGlvbnMgYnkgUm9tYW4gSG9kZWsgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorK2ZvciBEZWJpYW4vR05VIExpbnV4LgorIC5TSCBBQ0tOT1dMRURHRU1FTlRTCisgLkIgbWtkb3NmcworIGlzIGJhc2VkIG9uIGNvZGUgZnJvbQorSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMDUtMDMtMTIgMTY6MTI6MTYuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mjc6NTUuMTIxODg2MDc2ICswMDAwCitAQCAtMjQsNiArMjQsMTIgQEAKKyAgICAtIE5ldyBvcHRpb25zIC1BLCAtUywgLUMKKyAgICAtIFN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zID4gMkdCCisgICAgLSBGQVQzMiBzdXBwb3J0CisrCisrICAgRml4ZXMvYWRkaXRpb25zIEp1bmUgMjAwMyBieSBTYW0gQmluZ25lcgorKyAgIDxzYW1AYmluZ25lci5jb20+OgorKyAgIC0gQWRkIC1CIG9wdGlvbiB0byByZWFkIGluIGJvb3Rjb2RlIGZyb20gYSBmaWxlCisrICAgLSBXcml0ZSBCSU9TIGRyaXZlIG51bWJlciBzbyB0aGF0IEZTIGNhbiBwcm9wZXJseSBib290CisrICAgLSBTZXQgbnVtYmVyIG9mIGhpZGRlbiBzZWN0b3JzIGJlZm9yZSBib290IGNvZGUgdG8gYmUgb25lIHRyYWNrCisgICAgCisgICAgQ29weWluZzogICAgIENvcHlyaWdodCAxOTkzLCAxOTk0IERhdmlkIEh1ZHNvbiAoZGF2ZUBodW1idWcuZGVtb24uY28udWspCisgCitAQCAtMTUzLDYgKzE1OSw4IEBACisgI2RlZmluZSBGQVRfQkFEICAgICAgMHgwZmZmZmZmNworIAorICNkZWZpbmUgTVNET1NfRVhUX1NJR04gMHgyOQkvKiBleHRlbmRlZCBib290IHNlY3RvciBzaWduYXR1cmUgKi8KKysjZGVmaW5lIEhEX0RSSVZFX05VTUJFUiAweDgwCS8qIEJvb3Qgb2ZmIGZpcnN0IGhhcmQgZHJpdmUgKi8KKysjZGVmaW5lIEZEX0RSSVZFX05VTUJFUiAweDAwCS8qIEJvb3Qgb2ZmIGZpcnN0IGZsb3BweSBkcml2ZSAqLworICNkZWZpbmUgTVNET1NfRkFUMTJfU0lHTiAiRkFUMTIgICAiCS8qIEZBVDEyIGZpbGVzeXN0ZW0gc2lnbmF0dXJlICovCisgI2RlZmluZSBNU0RPU19GQVQxNl9TSUdOICJGQVQxNiAgICIJLyogRkFUMTYgZmlsZXN5c3RlbSBzaWduYXR1cmUgKi8KKyAjZGVmaW5lIE1TRE9TX0ZBVDMyX1NJR04gIkZBVDMyICAgIgkvKiBGQVQzMiBmaWxlc3lzdGVtIHNpZ25hdHVyZSAqLworQEAgLTE3NSw2ICsxODMsOCBAQAorICNkZWZpbmUgQk9PVENPREVfU0laRQkJNDQ4CisgI2RlZmluZSBCT09UQ09ERV9GQVQzMl9TSVpFCTQyMAorIAorKyNkZWZpbmUgTUFYX1JFU0VSVkVECQkweEZGRkYKKysKKyAvKiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaXMgdXNlZCBvbiBhbGwgc3RydWN0dXJlcyB0byBtYWtlIGdjYyBpZ25vcmUgYW55CisgICogYWxpZ25tZW50cyAqLworIAorQEAgLTIwMiw3ICsyMTIsNyBAQAorICAgX191MTYgICAgICAgICBmYXRfbGVuZ3RoOwkvKiBzZWN0b3JzL0ZBVCAqLworICAgX191MTYgICAgICAgICBzZWNzX3RyYWNrOwkvKiBzZWN0b3JzIHBlciB0cmFjayAqLworICAgX191MTYgICAgICAgICBoZWFkczsJCS8qIG51bWJlciBvZiBoZWFkcyAqLworLSAgX191MzIgICAgICAgICBoaWRkZW47CQkvKiBoaWRkZW4gc2VjdG9ycyAodW51c2VkKSAqLworKyAgX191MzIgICAgICAgICBoaWRkZW47CQkvKiBoaWRkZW4gc2VjdG9ycyAob25lIHRyYWNrKSAqLworICAgX191MzIgICAgICAgICB0b3RhbF9zZWN0OwkvKiBudW1iZXIgb2Ygc2VjdG9ycyAoaWYgc2VjdG9ycyA9PSAwKSAqLworICAgdW5pb24geworICAgICBzdHJ1Y3QgeworQEAgLTI4NSw2ICsyOTUsOCBAQAorIAorIC8qIEdsb2JhbCB2YXJpYWJsZXMgLSB0aGUgcm9vdCBvZiBhbGwgZXZpbCA6LSkgLSBzZWUgdGhlc2UgYW5kIHdlZXAhICovCisgCisrc3RhdGljIGNoYXIgKnRlbXBsYXRlX2Jvb3RfY29kZTsJLyogVmFyaWFibGUgdG8gc3RvcmUgYSBmdWxsIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluICovCisrc3RhdGljIGludCB1c2VfdGVtcGxhdGUgPSAwOworIHN0YXRpYyBjaGFyICpwcm9ncmFtX25hbWUgPSAibWtkb3NmcyI7CS8qIE5hbWUgb2YgdGhlIHByb2dyYW0gKi8KKyBzdGF0aWMgY2hhciAqZGV2aWNlX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIHRoZSBkZXZpY2Ugb24gd2hpY2ggdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtICovCisgc3RhdGljIGludCBhdGFyaV9mb3JtYXQgPSAwOwkvKiBVc2UgQXRhcmkgdmFyaWF0aW9uIG9mIE1TLURPUyBGUyBmb3JtYXQgKi8KK0BAIC04MzcsNiArODQ5LDEyIEBACisgICAgIHZpLT52b2x1bWVfaWRbMl0gPSAodW5zaWduZWQgY2hhcikgKCh2b2x1bWVfaWQgJiAweDAwZmYwMDAwKSA+PiAxNik7CisgICAgIHZpLT52b2x1bWVfaWRbM10gPSAodW5zaWduZWQgY2hhcikgKHZvbHVtZV9pZCA+PiAyNCk7CisgICB9CisrICBpZiAoYnMubWVkaWEgPT0gMHhmOCkgeworKyAgICAgIHZpLT5kcml2ZV9udW1iZXIgPSBIRF9EUklWRV9OVU1CRVI7ICAvKiBTZXQgYmlvcyBkcml2ZSBudW1iZXIgdG8gODBoICovCisrICB9CisrICBlbHNlIHsKKysgICAgICB2aS0+ZHJpdmVfbnVtYmVyID0gRkRfRFJJVkVfTlVNQkVSOyAgLyogU2V0IGJpb3MgZHJpdmUgbnVtYmVyIHRvIDAwaCAqLworKyAgfQorIAorICAgaWYgKCFhdGFyaV9mb3JtYXQpIHsKKyAgICAgbWVtY3B5KHZpLT52b2x1bWVfbGFiZWwsIHZvbHVtZV9uYW1lLCAxMSk7CitAQCAtMTM2Miw2ICsxMzgwLDMyIEBACisgICAgKiBkaXIgYXJlYSBvbiBGQVQxMi8xNiwgYW5kIHRoZSBmaXJzdCBjbHVzdGVyIG9uIEZBVDMyLiAqLworICAgd3JpdGVidWYoIChjaGFyICopIHJvb3RfZGlyLCBzaXplX3Jvb3RfZGlyLCAicm9vdCBkaXJlY3RvcnkiICk7CisgCisrICBpZiAodXNlX3RlbXBsYXRlID09IDEpIHsKKysgICAgLyogZHVwZSB0ZW1wbGF0ZSBpbnRvIHJlc2VydmVkIHNlY3RvcnMgKi8KKysgICAgc2Vla3RvKCAwLCAiU3RhcnQgb2YgcGFydGl0aW9uIiApOworKyAgICBpZiAoc2l6ZV9mYXQgPT0gMzIpIHsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiYmFja3VwIGptcEJvb3QiICk7CisrICAgICAgc2Vla3RvKCAweDVhLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrMHg1YSwgNDIwLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHNlZWt0byggNTEyKjIsICJ0aGlyZCBzZWN0b3IiICk7CisrICAgICAgaWYgKGJhY2t1cF9ib290ICE9IDApIHsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrNTEyKjIsIGJhY2t1cF9ib290KnNlY3Rvcl9zaXplIC0gNTEyKjIsICJkYXRhIHRvIGJhY2t1cCBib290IiApOworKyAgICAgICAgc2Vla3RvKCBiYWNrdXBfYm9vdCpzZWN0b3Jfc2l6ZSwgImJhY2t1cCBib290IHNlY3RvciIgKTsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUsIDMsICJiYWNrdXAgam1wQm9vdCIgKTsKKysgICAgICAgIHNlZWt0byggYmFja3VwX2Jvb3Qqc2VjdG9yX3NpemUrMHg1YSwgImJhY2t1cCBib290IHNlY3RvciBib290IGFyZWEiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzB4NWEsIDQyMCwgImJhY2t1cCBib290IHNlY3RvciBib290IGFyZWEiICk7CisrICAgICAgICBzZWVrdG8oIChiYWNrdXBfYm9vdCsyKSpzZWN0b3Jfc2l6ZSwgInNlY3RvciBmb2xsb3dpbmcgYmFja3VwIGNvZGUiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKyhiYWNrdXBfYm9vdCsyKSpzZWN0b3Jfc2l6ZSwgKHJlc2VydmVkX3NlY3RvcnMtYmFja3VwX2Jvb3QtMikqNTEyLCAicmVtYWluaW5nIGRhdGEiICk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrNTEyKjIsIChyZXNlcnZlZF9zZWN0b3JzLTIpKjUxMiwgInJlbWFpbmluZyBkYXRhIiApOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiam1wQm9vdCIgKTsKKysgICAgICBzZWVrdG8oIDB4M2UsICJzZWN0b3IgMSBib290IGFyZWEiICk7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsweDNlLCA0NDgsICJib290IGNvZGUiICk7CisrICAgIH0KKysgIH0KKysKKyAgIGlmIChibGFua19zZWN0b3IpIGZyZWUoIGJsYW5rX3NlY3RvciApOworICAgaWYgKGluZm9fc2VjdG9yKSBmcmVlKCBpbmZvX3NlY3RvciApOworICAgZnJlZSAocm9vdF9kaXIpOyAgIC8qIEZyZWUgdXAgdGhlIHJvb3QgZGlyZWN0b3J5IHNwYWNlIGZyb20gc2V0dXBfdGFibGVzICovCitAQCAtMTM3Niw3ICsxNDIwLDcgQEAKKyB7CisgICBmYXRhbF9lcnJvcigiXAorIFVzYWdlOiBta2Rvc2ZzIFstQV0gWy1jXSBbLUNdIFstdl0gWy1JXSBbLWwgYmFkLWJsb2NrLWZpbGVdIFstYiBiYWNrdXAtYm9vdC1zZWN0b3JdXG5cCistICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdXG5cCisrICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdIFstQiBib290Y29kZV1cblwKKyAgICAgICAgWy1zIHNlY3RvcnMtcGVyLWNsdXN0ZXJdIFstUyBsb2dpY2FsLXNlY3Rvci1zaXplXSBbLWYgbnVtYmVyLW9mLUZBVHNdXG5cCisgICAgICAgIFstaCBoaWRkZW4tc2VjdG9yc10gWy1GIGZhdC1zaXplXSBbLXIgcm9vdC1kaXItZW50cmllc10gWy1SIHJlc2VydmVkLXNlY3RvcnNdXG5cCisgICAgICAgIC9kZXYvbmFtZSBbYmxvY2tzXVxuIik7CitAQCAtMTQzOSw3ICsxNDgzLDcgQEAKKyAgIHByaW50ZiAoIiVzICIgVkVSU0lPTiAiICgiIFZFUlNJT05fREFURSAiKVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6UzpoOnYiKSkgIT0gRU9GKQorKyAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiQWJjQ2Y6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorICAgICAvKiBTY2FuIHRoZSBjb21tYW5kIGxpbmUgZm9yIG9wdGlvbnMgKi8KKyAgICAgc3dpdGNoIChjKQorICAgICAgIHsKK0BAIC0xNTA5LDYgKzE1NTMsNTEgQEAKKyAJbGlzdGZpbGUgPSBvcHRhcmc7CisgCWJyZWFrOworIAorKyAgICAgIGNhc2UgJ0InOiAgICAgICAgIC8qIEIgOiByZWFkIGluIGJvb3Rjb2RlICovCisrICAgICAgICBpZiAoIHN0cmNtcChvcHRhcmcsICItIikgKQorKwkgIHsKKysJICAgIG1zZ2ZpbGUgPSBmb3BlbihvcHRhcmcsICJyIik7CisrCSAgICBpZiAoICFtc2dmaWxlICkKKysJICAgICAgcGVycm9yKG9wdGFyZyk7CisrCSAgfQorKwllbHNlCisrCSAgbXNnZmlsZSA9IHN0ZGluOworKworKwlpZiAoIG1zZ2ZpbGUgKQorKwkgIHsKKysgICAgICAgICAgICBpZiAoISh0ZW1wbGF0ZV9ib290X2NvZGUgPSBtYWxsb2MoIE1BWF9SRVNFUlZFRCApKSkKKysgICAgICAgICAgICAgICAgZGllKCAiT3V0IG9mIG1lbW9yeSIgKTsKKysJICAgIC8qIFRoZSB0ZW1wbGF0ZSBib290IHNlY3RvciBpbmNsdWRpbmcgcmVzZXJ2ZWQgbXVzdCBub3QgYmUgPiA2NTUzNSAqLworKyAgICAgICAgICAgIHVzZV90ZW1wbGF0ZSA9IDE7CisrCSAgICBpID0gMDsKKysJICAgIGRvCisrCSAgICAgIHsKKysJCWNoID0gZ2V0Yyhtc2dmaWxlKTsKKysJCXN3aXRjaCAoY2gpCisrCQkgIHsKKysJCSAgY2FzZSBFT0Y6CisrCQkgICAgYnJlYWs7CisrCisrCQkgIGRlZmF1bHQ6CisrCQkgICAgdGVtcGxhdGVfYm9vdF9jb2RlW2krK10gPSBjaDsgLyogU3RvcmUgY2hhcmFjdGVyICovCisrCQkgICAgYnJlYWs7CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgd2hpbGUgKCBjaCAhPSBFT0YgJiYgaSA8IE1BWF9SRVNFUlZFRCApOworKwkgICAgY2ggPSBnZXRjKG1zZ2ZpbGUpOyAvKiBmaW5kIG91dCBpZiB3ZSdyZSBhdCBFT0YgKi8KKysKKysJICAgIC8qIEZpbGwgdXAgd2l0aCB6ZXJvcyAqLworKwkgICAgd2hpbGUoIGkgPCBNQVhfUkVTRVJWRUQgKQorKwkJdGVtcGxhdGVfYm9vdF9jb2RlW2krK10gPSAnXDAnOworKwkgICAgCisrCSAgICBpZiAoIGNoICE9IEVPRiApCisrCSAgICAgIHByaW50ZiAoIldhcm5pbmc6IHRlbXBsYXRlIHRvbyBsb25nOyB0cnVuY2F0ZWQgYWZ0ZXIgJWQgYnl0ZXNcbiIsIGkpOworKwkgICAgCisrCSAgICBpZiAoIG1zZ2ZpbGUgIT0gc3RkaW4gKQorKwkgICAgICBmY2xvc2UobXNnZmlsZSk7CisrCSAgfQorKwlicmVhazsKKysKKyAgICAgICBjYXNlICdtJzoJCS8qIG0gOiBTZXQgYm9vdCBtZXNzYWdlICovCisgCWlmICggc3RyY21wKG9wdGFyZywgIi0iKSApCisgCSAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDcxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKQEAgLTAsMCArMSw2MzkgQEAKK0FkZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mjc6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mzc6MTMuNDQ1OTUwNzAzICswMDAwCitAQCAtMTgsNiArMTgsMTAgQEAKKyAgICBhcyBhIHJ1bGUpLCBhbmQgbm90IHRoZSBibG9jay4gIEZvciBleGFtcGxlIHRoZSBib290IGJsb2NrIGRvZXMgbm90CisgICAgb2NjdXB5IGEgZnVsbCBjbHVzdGVyLgorIAorKyAgIEp1bmUgMjAwNCAtIEpvcmRhbiBDcm91c2UgKGluZm8ubGludXhAYW1kLmNvbSkKKysgICBBZGRlZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZQorKyAgIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgQWxsIFJpZ2h0cyBSZXNlcnZlZAorKyAgIAorICAgIEZpeGVzL2FkZGl0aW9ucyBNYXkgMTk5OCBieSBSb21hbiBIb2RlaworICAgIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT46CisgICAgLSBBdGFyaSBmb3JtYXQgc3VwcG9ydAorQEAgLTcxLDYgKzc1LDggQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8bGliZ2VuLmg+CisrI2luY2x1ZGUgPGRpcmVudC5oPgorIAorICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAwKQorQEAgLTExMCw2ICsxMTYsOCBAQAorICAqIHN1ZmZpY2llbnQgKG9yIGV2ZW4gYmV0dGVyIDopIGZvciA2NCBiaXQgb2Zmc2V0cyBpbiB0aGUgbWVhbnRpbWUgKi8KKyAjZGVmaW5lIGxsc2VlayBsc2VlaworIAorKyNkZWZpbmUgUk9VTkRfVVAodmFsdWUsIGRpdmlzb3IpICh2YWx1ZSArIChkaXZpc29yIC0gKHZhbHVlICUgZGl2aXNvcikpKSAvIGRpdmlzb3IKKysKKyAvKiBDb25zdGFudCBkZWZpbml0aW9ucyAqLworIAorICNkZWZpbmUgVFJVRSAxCQkJLyogQm9vbGVhbiBjb25zdGFudHMgKi8KK0BAIC0xNDksNyArMTU3LDYgQEAKKyAjZGVmaW5lIEFUVFJfVk9MVU1FICA4CQkvKiB2b2x1bWUgbGFiZWwgKi8KKyAjZGVmaW5lIEFUVFJfRElSICAgICAxNgkJLyogZGlyZWN0b3J5ICovCisgI2RlZmluZSBBVFRSX0FSQ0ggICAgMzIJCS8qIGFyY2hpdmVkICovCistCisgI2RlZmluZSBBVFRSX05PTkUgICAgMAkJLyogbm8gYXR0cmlidXRlIGJpdHMgKi8KKyAjZGVmaW5lIEFUVFJfVU5VU0VEICAoQVRUUl9WT0xVTUUgfCBBVFRSX0FSQ0ggfCBBVFRSX1NZUyB8IEFUVFJfSElEREVOKQorIAkvKiBhdHRyaWJ1dGUgYml0cyB0aGF0IGFyZSBjb3BpZWQgImFzIGlzIiAqLworQEAgLTI0NSw2ICsyNTIsMTkgQEAKKyAgIF9fdTMyCQlyZXNlcnZlZDJbNF07CisgfTsKKyAKKysvKiBUaGlzIHN0b3JlcyB1cCB0byAxMyBjaGFycyBvZiB0aGUgbmFtZSAqLworKworK3N0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CisrICAgICAgICBfX3U4ICAgIGlkOyAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIHNsb3QgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTBfNFsxMF07ICAgIC8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCisrICAgICAgICBfX3U4ICAgIGF0dHI7ICAgICAgICAgICAvKiBhdHRyaWJ1dGUgYnl0ZSAqLworKyAgICAgICAgX191OCAgICByZXNlcnZlZDsgICAgICAgLyogYWx3YXlzIDAgKi8KKysgICAgICAgIF9fdTggICAgYWxpYXNfY2hlY2tzdW07IC8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTVfMTBbMTJdOyAgIC8qIDYgbW9yZSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKysgICAgICAgIF9fdTE2ICAgc3RhcnQ7ICAgICAgICAgIC8qIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyLCAwIGluIGxvbmcgc2xvdHMgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTExXzEyWzRdOyAgIC8qIGxhc3QgMiBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKyt9OworKworIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkKKyAgIHsKKyAgICAgY2hhcgluYW1lWzhdLCBleHRbM107CS8qIG5hbWUgYW5kIGV4dGVuc2lvbiAqLworQEAgLTI5Myw2ICszMTMsMTUgQEAKKyAKKyAjZGVmaW5lIE1FU1NBR0VfT0ZGU0VUIDI5CS8qIE9mZnNldCBvZiBtZXNzYWdlIGluIGFib3ZlIGNvZGUgKi8KKyAKKysvKiBTcGVjaWFsIHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIGRpcmVjdG9yaWVzIGFzIHdlIGFkZCB0aGVtIGZvciB0aGUgLWQgb3B0aW9uICovCisrCisrc3RydWN0IGRpcl9lbnRyeSB7CisrICBpbnQgcm9vdDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZmllcyBpZiB0aGlzIGlzIHRoZSByb290IGRpciBvciBub3QgKi8KKysgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0YWJsZSAqLworKyAgaW50IGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUgKi8KKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKnRhYmxlOyAgLyogUG9pbnRlciB0byB0aGUgZW50cnkgdGFibGUgKi8KKyt9OworKworIC8qIEdsb2JhbCB2YXJpYWJsZXMgLSB0aGUgcm9vdCBvZiBhbGwgZXZpbCA6LSkgLSBzZWUgdGhlc2UgYW5kIHdlZXAhICovCisgCisgc3RhdGljIGNoYXIgKnRlbXBsYXRlX2Jvb3RfY29kZTsJLyogVmFyaWFibGUgdG8gc3RvcmUgYSBmdWxsIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluICovCitAQCAtMzI2LDYgKzM1NSw5IEBACisgc3RhdGljIGludCBzaXplX3Jvb3RfZGlyOwkvKiBTaXplIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbiBieXRlcyAqLworIHN0YXRpYyBpbnQgc2VjdG9yc19wZXJfY2x1c3RlciA9IDA7CS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIGNsdXN0ZXIgKi8KKyBzdGF0aWMgaW50IHJvb3RfZGlyX2VudHJpZXMgPSAwOwkvKiBOdW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworK3N0YXRpYyBpbnQgcm9vdF9kaXJfbnVtX2VudHJpZXMgPSAwOworK3N0YXRpYyBpbnQgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAwOworKworIHN0YXRpYyBjaGFyICpibGFua19zZWN0b3I7CQkvKiBCbGFuayBzZWN0b3IgLSBhbGwgemVyb3MgKi8KKyBzdGF0aWMgaW50IGhpZGRlbl9zZWN0b3JzID0gMDsJCS8qIE51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyAqLworIAorQEAgLTM5OSw3ICs0MzEsNiBAQAorICAgfQorIH0KKyAKKy0KKyAvKiBNYXJrIGEgc3BlY2lmaWVkIHNlY3RvciBhcyBoYXZpbmcgYSBwYXJ0aWN1bGFyIHZhbHVlIGluIGl0J3MgRkFUIGVudHJ5ICovCisgCisgc3RhdGljIHZvaWQKK0BAIC0xMjY2LDYgKzEyOTcsOSBAQAorICAgICAgIGRpZSAoInVuYWJsZSB0byBhbGxvY2F0ZSBzcGFjZSBmb3Igcm9vdCBkaXJlY3RvcnkgaW4gbWVtb3J5Iik7CisgICAgIH0KKyAKKysKKysgIGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMjsKKysgIAorICAgbWVtc2V0KHJvb3RfZGlyLCAwLCBzaXplX3Jvb3RfZGlyKTsKKyAgIGlmICggbWVtY21wKHZvbHVtZV9uYW1lLCAiICAgICAgICAgICAiLCAxMSkgKQorICAgICB7CitAQCAtMTMxNCwxMSArMTM0OCwxMSBAQAorICAgfQorICAgCisgICBpZiAoIShibGFua19zZWN0b3IgPSBtYWxsb2MoIHNlY3Rvcl9zaXplICkpKQorLSAgICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrICAKKyAgIG1lbXNldChibGFua19zZWN0b3IsIDAsIHNlY3Rvcl9zaXplKTsKKyB9CistCistCisrICAKKyAvKiBXcml0ZSB0aGUgbmV3IGZpbGVzeXN0ZW0ncyBkYXRhIHRhYmxlcyB0byB3aGVyZXZlciB0aGV5J3JlIGdvaW5nIHRvIGVuZCB1cCEgKi8KKyAKKyAjZGVmaW5lIGVycm9yKHN0cikJCQkJXAorQEAgLTEzNDAsNyArMTM3NCw3IEBACisgICBkbyB7CQkJCQkJCVwKKyAgICAgaW50IF9fc2l6ZSA9IChzaXplKTsJCQkJXAorICAgICBpZiAod3JpdGUgKGRldiwgYnVmLCBfX3NpemUpICE9IF9fc2l6ZSkJCVwKKy0JZXJyb3IgKCJmYWlsZWQgd2hpbHN0IHdyaXRpbmcgIiBlcnJzdHIpOwlcCisrICAgICAgIGVycm9yICgiZmFpbGVkIHdoaWxzdCB3cml0aW5nICIgZXJyc3RyKTsJXAorICAgfSB3aGlsZSgwKQorIAorIAorQEAgLTE0MTIsNiArMTQ0Niw0NTIgQEAKKyAgIGZyZWUgKGZhdCk7ICAvKiBGcmVlIHVwIHRoZSBmYXQgdGFibGUgc3BhY2UgcmVzZXJ2ZWQgZHVyaW5nIHNldHVwX3RhYmxlcyAqLworIH0KKyAKKysvKiBBZGQgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgYWxzbyB3cml0ZSBpdCBpbnRvIHRoZSBpbWFnZSAqLworKworK3N0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJhc2UsIGNoYXIgKmV4dCkgeworKyAgCisrICBjaGFyICpjaCA9IGZpbGVuYW1lOworKyAgaW50IGksIGxlbjsKKysKKysgIG1lbXNldChiYXNlLCAweDIwLCA4KTsKKysgIG1lbXNldChleHQsIDB4MjAsIDMpOworKyAgCisrICBmb3IobGVuID0gMCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKSB7CisrICAgIGJhc2VbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBpZiAobGVuID09IDgpIGJyZWFrOworKyAgfQorKyAgCisrICBmb3IgKCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKTsKKysgIGlmICgqY2gpIGNoKys7CisrICAKKysgIGZvcihsZW4gPSAwIDsgKmNoOyBjaCsrKSB7CisrICAgIGV4dFtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGlmIChsZW4gPT0gMykgYnJlYWs7CisrICB9CisrfQorKworKy8qIENoZWNrIGZvciBhbiAuYXR0cmliLjxmaWxlbmFtZT4gZmlsZSwgYW5kIHJlYWQgdGhlIGF0dHJpYnV0ZXMgdGhlcmVpbiAqLworKworKy8qIFdlIGFyZSBnb2luZyB0byBiZSBwcmV0dHkgcGVkYW50aWMgYWJvdXQgdGhpcy4gIFRoZSBmaWxlIG5lZWRzIDMKKysgICBieXRlcyBhdCB0aGUgYmVnaW5uaW5nLCB0aGUgYXR0cmlidXRlcyBhcmUgbGlzdGVkIGluIHRoaXMgb3JkZXI6CisrICAgCisrICAgKEgpaWRkZW58KFMpeXN0ZW18KEEpcmNoaXZlZAorKyAgIAorKyAgIEEgY2FwaXRhbCBIU0EgbWVhbnMgdG8gZW5hYmxlIGl0LCBhbnl0aGluZyBlbHNlIHdpbGwgZGlzYWJsZSBpdAorKyAgIChJIHJlY29tbWVuZCBhICctJykgVGhlIHVuaXggdXNlciBhdHRyaWJ1dGVzIHdpbGwgc3RpbGwgYmUgdXNlZCAKKysgICBmb3Igd3JpdGUgYWNjZXNzLgorKworKyAgIEZvciBleGFtcGxlLCB0byBlbmFibGUgc3lzdGVtIGZpbGUgYWNjZXNzIGZvciBsZGxpbnV4LnN5cywgd3JpdGUgCisrICAgdGhlIGZvbGxvd2luZyB0byAuYXR0cmliLmxkbGludXguc3lzOiAtUy0KKysqLworKworK3Vuc2lnbmVkIGNoYXIgY2hlY2tfYXR0cmliX2ZpbGUoY2hhciAqZGlyLCBjaGFyICpmaWxlbmFtZSkgeworKworKyAgY2hhciBhdHRyaWJbNF0gPSB7ICctJywgJy0nLCAnLScgfTsKKysgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IDA7CisrICBpbnQgcmV0ID0gQVRUUl9OT05FOworKyAgaW50IGZkID0gLTE7CisrCisrICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoMSwgc3RybGVuKGRpcikgKyBzdHJsZW4oZmlsZW5hbWUpICsgMTApOworKyAgaWYgKCFidWZmZXIpIHJldHVybiBBVFRSX05PTkU7CisrCisrICBzcHJpbnRmKGJ1ZmZlciwgIiVzLy5hdHRyaWIuJXMiLCBkaXIsIGZpbGVuYW1lKTsKKysKKysgIGlmIChhY2Nlc3MoYnVmZmVyLCBSX09LKSkgCisrICAgIGdvdG8gZXhpdF9hdHRyaWI7CisrCisrICBpZiAoKGZkID0gb3BlbihidWZmZXIsIE9fUkRPTkxZLCAwKSkgPCAwKQorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKworKyAgaWYgKHJlYWQoZmQsIGF0dHJpYiwgMykgPCAwKQorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKyAgCisrICBpZiAoYXR0cmliWzBdID09ICdIJykgcmV0IHw9IEFUVFJfSElEREVOOworKyAgaWYgKGF0dHJpYlsxXSA9PSAnUycpIHJldCB8PSBBVFRSX1NZUzsKKysgIGlmIChhdHRyaWJbMl0gPT0gJ0EnKSByZXQgfD0gQVRUUl9BUkNIOworKworKyAgcHJpbnRmKCIlczogU2V0dGluZyBhdHJyaWJ1dGUgJXhcbiIsIGZpbGVuYW1lLCByZXQpOworKworKyBleGl0X2F0dHJpYjoKKysgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisrICBpZiAoYnVmZmVyKSBmcmVlKGJ1ZmZlcik7CisrCisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgdm9pZCBjb3B5X25hbWUoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgY2hhciAqKnBvaW50ZXIpIHsKKysgIGludCBpOworKworKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAyKSB7CisrICAgIGlmICgqcG9pbnRlcikgeworKyAgICAgIGJ1ZmZlcltpXSA9ICoqcG9pbnRlcjsKKysgICAgICBidWZmZXJbaSArIDFdID0gMHgwMDsKKysgICAgICAqcG9pbnRlciA9ICoqcG9pbnRlciA/ICpwb2ludGVyICsgMSA6IDA7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgYnVmZmVyW2ldID0gMHhGRjsKKysgICAgICBidWZmZXJbaSArIDFdID0gMHhGRjsKKysgICAgfQorKyAgfSAgCisrfQorKworK3N0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBkaXJfZW50cnkgKmRpciwgdW5zaWduZWQgY2hhciBhdHRyKSAKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdGF0OworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZW50cnk7CisrICBpbnQgaW5maWxlID0gMDsKKysgIGludCBzZWN0b3JzLCBjbHVzdGVyczsKKysgIHN0cnVjdCB0bSAqY3RpbWU7CisrICBpbnQgYywgczsKKysgIGludCBwdHI7CisrICBjaGFyICpidWZmZXIsICpiYXNlOworKyAgaW50IHN0YXJ0OworKyAgaW50IHVzZWRzZWMsIHRvdGFsc2VjOworKworKyAgY2hhciBuYW1lODNbOF0sIGV4dDgzWzNdOworKworKyAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworKyAgaW50IGk7CisrICBjaGFyICpwOworKworKyAgLyogVGhlIHJvb3QgZGlyZWN0b3J5IGlzIHN0YXRpYywgZXZlcnl0aGluZyBlbHNlIGdyb3dzIGFzIG5lZWRlZCAqLworKworKyAgaWYgKGRpci0+cm9vdCkgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworKyAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKysJZGlyLT50YWJsZSA9IAorKwkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIGVsc2UgeworKwlkaXItPnRhYmxlID0gCisrCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKysJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysKKysJbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgfQorKworKyAgICAgIGRpci0+ZW50cmllcysrOworKyAgICB9CisrICB9CisrCisrICBpbmZpbGUgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSwgMCk7CisrICBpZiAoIWluZmlsZSkgcmV0dXJuOworKyAgCisrICBpZiAoZnN0YXQoaW5maWxlLCAmc3RhdCkpCisrICAgIGdvdG8gZXhpdF9hZGQ7CisrIAorKyAgaWYgKFNfSVNDSFIoc3RhdC5zdF9tb2RlKSB8fFNfSVNCTEsoc3RhdC5zdF9tb2RlKSB8fAorKyAgICAgIFNfSVNGSUZPKHN0YXQuc3RfbW9kZSkgfHwgU19JU0xOSyhzdGF0LnN0X21vZGUpKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYW5ub3QgY3JlYXRlIGEgc3BlY2lhbCBmaWxlIGluIGEgRkFURlNcbiIpOworKyAgICBnb3RvIGV4aXRfYWRkOworKyAgfQorKworKyAgLyogRklYTUU6IFRoaXMgaXNuJ3QgdmVyeSBwcmV0dHkgKi8KKysKKysgIHVzZWRzZWMgPSBzdGFydF9kYXRhX3NlY3RvciArIChzaXplX3Jvb3RfZGlyIC8gc2VjdG9yX3NpemUpICsKKysgICAgKGxhc3RfY2x1c3Rlcl93cml0dGVuICogYnMuY2x1c3Rlcl9zaXplKTsKKysKKysgIHRvdGFsc2VjID0gYmxvY2tzICogQkxPQ0tfU0laRSAvIHNlY3Rvcl9zaXplOworKyAgCisrICAvKiBGaWd1cmUgb3V0IGhvdyBtYW55IHNlY3RvcnMgLyBjbHVzdG9ycyB0aGUgZmlsZSByZXF1aXJlcyAqLworKworKyAgc2VjdG9ycyA9IFJPVU5EX1VQKHN0YXQuc3Rfc2l6ZSwgc2VjdG9yX3NpemUpOworKyAgY2x1c3RlcnMgPSBST1VORF9VUChzZWN0b3JzLCAoaW50KSBicy5jbHVzdGVyX3NpemUpOworKworKyAgaWYgKHVzZWRzZWMgKyBzZWN0b3JzID4gdG90YWxzZWMpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtICVzIGlzIHRvbyBiaWcgKCVkIHZzICVkKVxuIiwgZmlsZW5hbWUsIHNlY3RvcnMsIHRvdGFsc2VjIC0gdXNlZHNlYyk7CisrICAgIGNsb3NlKGluZmlsZSk7CisrICAgIHJldHVybiAtMTsKKysgIH0KKysKKysgIHByaW50ZigiQUREICVzXG4iLCBmaWxlbmFtZSk7CisrCisrICAvKiBHcmFiIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAqLworKyAgYmFzZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKKysgIAorKyAgLyogRXh0cmFjdCBvdXQgdGhlIDguMyBuYW1lICovCisrICBjb3B5X2ZpbGVuYW1lKGJhc2UsIG5hbWU4MywgZXh0ODMpOworKworKyAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKysKKysgIHNsb3QgPSAoc3RydWN0IG1zZG9zX2Rpcl9zbG90ICopICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrICBzbG90LT5pZCA9ICdBJzsgIAorKyAgc2xvdC0+YXR0ciA9IDB4MEY7CisrICBzbG90LT5yZXNlcnZlZCA9IDA7CisrICBzbG90LT5zdGFydCA9IDA7CisrICAKKysgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gMDsKKysgIAorKyAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSAKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgbmFtZTgzW2ldOworKyAgCisrICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspIAorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBleHQ4M1tpXTsKKysKKysgIHAgPSBiYXNlOworKworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTVfMTAsIDEyLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTExXzEyLCA0LCAmcCk7CisrCisrCisrICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisrICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBuYW1lODMsIDgpOworKyAgc3RybmNweShlbnRyeS0+ZXh0LCBleHQ4MywgMyk7CisrCisrCisrICAvKiBJZiB0aGUgdXNlciBoYXMgaXQgcmVhZCBvbmx5LCB0aGVuIGFkZCByZWFkIG9ubHkgdG8gdGhlIGluY29taW5nCisrICAgICBhdHRyaWJ1dGUgc2V0dGluZ3MgKi8KKysKKysgIGlmICghKHN0YXQuc3RfbW9kZSAmIFNfSVdVU1IpKSBhdHRyIHw9IEFUVFJfUk87CisrICBlbnRyeS0+YXR0ciA9IGF0dHI7CisrCisrICAvKiBTZXQgdGhlIGFjY2VzcyB0aW1lIG9uIHRoZSBmaWxlICovCisrICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworKworKyAgZW50cnktPnRpbWUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoKGN0aW1lLT50bV9zZWMgPj4gMSkgKworKwkJCQkJICAoY3RpbWUtPnRtX21pbiA8PCA1KSArIChjdGltZS0+dG1faG91ciA8PCAxMSkpKTsKKysKKysgIGVudHJ5LT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKysJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKysJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKysKKysgIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKysgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisrICBlbnRyeS0+c2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKysKKysgIHN0YXJ0ID0gbGFzdF9jbHVzdGVyX3dyaXR0ZW47CisrCisrICBlbnRyeS0+c3RhcnQgPSBDVF9MRV9XKHN0YXJ0KTsgIC8qIHN0YXJ0IHNlY3RvciAqLworKyAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChzdGFydCAmIDB4RkZGRjAwMDApID4+IDE2KTsgLyogSGlnaCBzdGFydCBzZWN0b3IgKGZvciBGQVQzMikgKi8KKysKKysgIC8qIFdlIG1hcmsgYWxsIG9mIHRoZSBjbHVzdGVycyB3ZSB1c2UgaW4gdGhlIEZBVCAqLworKyAgCisrICBmb3IoYyA9IDA7IGMgPCBjbHVzdGVyczsgYysrICkgeworKyAgICBpbnQgZnJlZTsKKysgICAgaW50IG5leHQgPSBjID09IChjbHVzdGVycyAtIDEpID8gRkFUX0VPRiA6IHN0YXJ0ICsgYyArIDE7CisrICAgIG1hcmtfRkFUX2NsdXN0ZXIoc3RhcnQgKyBjLCBuZXh0KTsgIAorKyAgICBsYXN0X2NsdXN0ZXJfd3JpdHRlbisrOworKyAgfQorKyAgCisrICAvKiBUaGlzIGNvbmZ1c2VkIG1lIHRvbyAtIGNsdXN0ZXIgMiBzdGFydHMgYWZ0ZXIgdGhlCisrICAgICByb290IGRpcmVjdG9yeSBkYXRhIC0gc2VhcmNoIG1lIGFzIHRvIHdoeSAqLworKworKyAgcHRyID0gKHN0YXJ0X2RhdGFfc2VjdG9yICogc2VjdG9yX3NpemUpICsgc2l6ZV9yb290X2RpcjsKKysgIHB0ciArPSAoc3RhcnQgLSAyKSAqIGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplOworKyAgICAKKysgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyhzZWN0b3Jfc2l6ZSk7CisrCisrICBpZiAoIWJ1ZmZlcikgeworKyAgICBwcmludGYoIkVycm9yIC0gY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKysgICAgZ290byBleGl0X2FkZDsKKysgIH0KKysKKysgIC8qIFdyaXRlIHRoZSBmaWxlIGludG8gdGhlIGZpbGUgYmxvY2sgKi8KKysKKysgIHNlZWt0byhwdHIsICJkYXRhZmlsZSIpOworKworKyAgd2hpbGUoMSkgeworKyAgICBpbnQgc2l6ZSA9IHJlYWQoaW5maWxlLCBidWZmZXIsIHNlY3Rvcl9zaXplKTsgICAgCisrICAgIGlmIChzaXplIDw9IDApIGJyZWFrOworKyAgICAKKysgICAgd3JpdGVidWYoYnVmZmVyLCBzaXplLCAiZGF0YSIpOyAgICAKKysgIH0KKysKKysgZXhpdF9hZGQ6CisrICBpZiAoaW5maWxlKSBjbG9zZShpbmZpbGUpOworK30KKysKKysvKiBBZGQgYSBuZXcgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgaW4gdHVybiBwb3B1bGF0ZSAKKysgICBpdCB3aXRoIGl0cyBvd24gZmlsZXMgKi8KKysKKysvKiBGSVhNRTogIFRoaXMgc2hvdWxkIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc2l6ZSB0byBhZGQgaXRzZWxmICovCisrCisrc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZSwgc3RydWN0IGRpcl9lbnRyeSAqZGlyKSB7CisrCisrICBzdHJ1Y3QgZGlyX2VudHJ5ICpuZXdkaXIgPSAwOworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZW50cnk7CisrICBzdHJ1Y3QgdG0gKmN0aW1lOworKyAgRElSICpyZGRpciA9IG9wZW5kaXIoZmlsZW5hbWUpOworKyAgc3RydWN0IGRpcmVudCAqZGVudHJ5ID0gMDsKKysgIGludCByZW1haW47CisrICBjaGFyICpkYXRhOworKworKyAgLyogSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCisrICBpZiAoIXJkZGlyKSByZXR1cm47CisrICAKKysgIGlmIChkaXItPnJvb3QpIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKKysgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIGlmICghZGlyLT50YWJsZSkgCisrCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICBlbHNlIHsKKysJZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCisrCQkJCQkJCXNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrCisrCS8qIFplcm8gaXQgb3V0IHRvIGF2b2lkIGlzc3VlcyAqLworKwltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICB9CisrCWRpci0+ZW50cmllcysrOworKyAgICB9CisrICB9CisrCisrICAvKiBOb3csIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZSBuZXcgZGlyZWN0b3J5ICovCisrICBuZXdkaXIgPSAoc3RydWN0IGRpcl9lbnRyeSAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpKTsKKysgIGlmICghbmV3ZGlyKSBnb3RvIGV4aXRfYWRkX2RpcjsKKysKKysgIGVudHJ5ID0gJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysKKysgIHN0cm5jcHkoZW50cnktPm5hbWUsIGJhc2VuYW1lKGZpbGVuYW1lKSwgc2l6ZW9mKGVudHJ5LT5uYW1lKSk7CisrICAKKysgIGVudHJ5LT5hdHRyID0gQVRUUl9ESVI7CisrICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworKworKyAgZW50cnktPnRpbWUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoKGN0aW1lLT50bV9zZWMgPj4gMSkgKworKwkJCQkJICAoY3RpbWUtPnRtX21pbiA8PCA1KSArIChjdGltZS0+dG1faG91ciA8PCAxMSkpKTsKKysKKysgIGVudHJ5LT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKysJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKysJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKysKKysgIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKysgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisrCisrICAvKiBOb3csIHJlYWQgdGhlIGRpcmVjdG9yeSAqLworKworKyAgd2hpbGUoKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciAqYnVmZmVyOworKyAgICAKKysgICAgaWYgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpCisrICAgICAgY29udGludWU7CisrCisrICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKysgICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrCisrICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgc3RybGVuKGRlbnRyeS0+ZF9uYW1lKSArIDMpOworKyAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIAorKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZmlsZW5hbWUsIGRlbnRyeS0+ZF9uYW1lKTsKKysgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworKyAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSAKKysJYWRkX2RpcmVjdG9yeShidWZmZXIsIG5ld2Rpcik7CisrICAgICAgZWxzZSBpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworKwl1bnNpZ25lZCBjaGFyIGF0dHJpYiA9IGNoZWNrX2F0dHJpYl9maWxlKGZpbGVuYW1lLCBkZW50cnktPmRfbmFtZSk7CisrCWFkZF9maWxlKGJ1ZmZlciwgbmV3ZGlyLCBhdHRyaWIpOworKyAgICAgIH0KKysgICAgfQorKyAKKysgICAgZnJlZShidWZmZXIpOworKyAgfQorKyAgCisrICAvKiBOb3cgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeSBoYXMgYmVlbiB3cml0dGVuLCBnbyBhaGVhZCBhbmQgd3JpdGUgdGhlIGRpcmVjdG9yeQorKyAgICAgZW50cnkgYXMgd2VsbCAqLworKworKyAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhsYXN0X2NsdXN0ZXJfd3JpdHRlbik7CisrICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKGxhc3RfY2x1c3Rlcl93cml0dGVuICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAKKysgIGVudHJ5LT5zaXplID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKysgIAorKyAgcmVtYWluID0gZW50cnktPnNpemU7CisrICBkYXRhID0gKGNoYXIgKikgbmV3ZGlyLT50YWJsZTsKKysKKysgIHdoaWxlKHJlbWFpbikgeworKyAgICBpbnQgc2l6ZSA9IAorKyAgICAgIHJlbWFpbiA+IGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplID8gYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemUgOiByZW1haW47CisrCisrICAgIGludCBwb3MgPSAoc3RhcnRfZGF0YV9zZWN0b3IgKiBzZWN0b3Jfc2l6ZSkgKyBzaXplX3Jvb3RfZGlyOworKyAgICBwb3MgKz0gKGxhc3RfY2x1c3Rlcl93cml0dGVuIC0gMikgKiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZTsKKysgICAgCisrICAgIHNlZWt0byhwb3MsICJhZGRfZGlyIik7CisrICAgIHdyaXRlYnVmKGRhdGEsIHNpemUsICJhZGRfZGlyIik7CisrICAgIAorKyAgICByZW1haW4gLT0gc2l6ZTsKKysgICAgZGF0YSArPSBzaXplOworKworKyAgICBtYXJrX0ZBVF9jbHVzdGVyKGxhc3RfY2x1c3Rlcl93cml0dGVuLCByZW1haW4gPyBsYXN0X2NsdXN0ZXJfd3JpdHRlbiArIDEgOiBGQVRfRU9GKTsgICAgICAKKysgICAgbGFzdF9jbHVzdGVyX3dyaXR0ZW4rKzsKKysgIH0KKysgIAorKyBleGl0X2FkZF9kaXI6CisrICBpZiAocmRkaXIpIGNsb3NlZGlyKHJkZGlyKTsKKysgIGlmIChuZXdkaXItPnRhYmxlKSBmcmVlKG5ld2Rpci0+dGFibGUpOworKyAgaWYgKG5ld2RpcikgZnJlZShuZXdkaXIpOworK30gIAorKyAgCisrLyogR2l2ZW4gYSBkaXJlY3RvcnksIGFkZCBhbGwgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCisrICAgaW1hZ2UuICAKKysqLworKworK3N0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXJuYW1lKSAKKyt7CisrICBESVIgKmRpciA9IG9wZW5kaXIoZGlybmFtZSk7CisrICBzdHJ1Y3QgZGlyZW50ICplbnRyeSA9IDA7CisrICBzdHJ1Y3QgZGlyX2VudHJ5ICpuZXdkaXIgPSAwOworKworKyAgaWYgKCFkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdFxuIiwgZGlybmFtZSk7CisrICAgIHJldHVybjsKKysgIH0KKysgCisrICAvKiBDcmVhdGUgdGhlIHJvb3QgZGlyZWN0b3J5IHN0cnVjdHVyZSAtIHRoaXMgaXMgYSBiaXQgZGlmZmVyZW50IHRoZW4KKysgICAgIGFib3ZlLCBiZWNhdXNlIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgd2UganVzdCByZWZlciB0byBpdC4gKi8KKysKKysgIG5ld2RpciA9IChzdHJ1Y3QgZGlyX2VudHJ5ICopIGNhbGxvYygxLHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CisrCisrICBpZiAoIW5ld2RpcikgeworKyAgICBjbG9zZWRpcihkaXIpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBuZXdkaXItPmVudHJpZXMgPSByb290X2Rpcl9lbnRyaWVzOworKyAgbmV3ZGlyLT5yb290ID0gMTsKKysgIG5ld2Rpci0+Y291bnQgPSAwOworKyAgbmV3ZGlyLT50YWJsZSA9IHJvb3RfZGlyOworKworKyAgd2hpbGUoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSkgeworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciAqYnVmZmVyOworKyAgICAKKysgICAgaWYgKCFzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGVudHJ5LT5kX25hbWUsICIuLiIpKQorKyAgICAgIGNvbnRpbnVlOworKyAgICAKKysgICAgLyogRE9TIHdvdWxkbid0IGxpa2UgYSB0eXBpY2FsIHVuaXggLiAoZG90KSBmaWxlLCBzbyB3ZSBza2lwIHRob3NlIHRvbyAqLworKyAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKyAKKysgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihlbnRyeS0+ZF9uYW1lKSArIDMpOworKyAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrCisrICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKysgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworKyAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSAKKysJYWRkX2RpcmVjdG9yeShidWZmZXIsIG5ld2Rpcik7CisrICAgICAgZWxzZSBpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworKwl1bnNpZ25lZCBjaGFyIGF0dHJpYiA9IGNoZWNrX2F0dHJpYl9maWxlKGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworKwlhZGRfZmlsZShidWZmZXIsIG5ld2RpciwgYXR0cmliKTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgZnJlZShidWZmZXIpOworKyAgfQorKworKyAgY2xvc2VkaXIoZGlyKTsKKysgIGlmIChuZXdkaXIpIGZyZWUobmV3ZGlyKTsKKyt9CisgCisgLyogUmVwb3J0IHRoZSBjb21tYW5kIHVzYWdlIGFuZCByZXR1cm4gYSBmYWlsdXJlIGVycm9yIGNvZGUgKi8KKyAKK0BAIC0xNDIzLDcgKzE5MDMsNyBAQAorICAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXSBbLUIgYm9vdGNvZGVdXG5cCisgICAgICAgIFstcyBzZWN0b3JzLXBlci1jbHVzdGVyXSBbLVMgbG9naWNhbC1zZWN0b3Itc2l6ZV0gWy1mIG51bWJlci1vZi1GQVRzXVxuXAorICAgICAgICBbLWggaGlkZGVuLXNlY3RvcnNdIFstRiBmYXQtc2l6ZV0gWy1yIHJvb3QtZGlyLWVudHJpZXNdIFstUiByZXNlcnZlZC1zZWN0b3JzXVxuXAorLSAgICAgICAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworKyAgICAgICBbLWQgZGlyZWN0b3J5XSAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworIH0KKyAKKyAvKgorQEAgLTE0NjMsNiArMTk0Myw4IEBACisgICBpbnQgYzsKKyAgIGNoYXIgKnRtcDsKKyAgIGNoYXIgKmxpc3RmaWxlID0gTlVMTDsKKysgIGNoYXIgKmRpcm5hbWUgPSBOVUxMOworKworICAgRklMRSAqbXNnZmlsZTsKKyAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgICBpbnQgaSA9IDAsIHBvcywgY2g7CitAQCAtMTQ4Myw3ICsxOTY1LDcgQEAKKyAgIHByaW50ZiAoIiVzICIgVkVSU0lPTiAiICgiIFZFUlNJT05fREFURSAiKVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKysgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NkOmY6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorICAgICAvKiBTY2FuIHRoZSBjb21tYW5kIGxpbmUgZm9yIG9wdGlvbnMgKi8KKyAgICAgc3dpdGNoIChjKQorICAgICAgIHsKK0BAIC0xNTA4LDYgKzE5OTAsMTAgQEAKKyAJY3JlYXRlID0gVFJVRTsKKyAJYnJlYWs7CisgCisrICBjYXNlICdkJzoKKysJZGlybmFtZSA9IG9wdGFyZzsKKysJYnJlYWs7CisrCisgICAgICAgY2FzZSAnZic6CQkvKiBmIDogQ2hvb3NlIG51bWJlciBvZiBGQVRzICovCisgCW5yX2ZhdHMgPSAoaW50KSBzdHJ0b2wgKG9wdGFyZywgJnRtcCwgMCk7CisgCWlmICgqdG1wIHx8IG5yX2ZhdHMgPCAxIHx8IG5yX2ZhdHMgPiA0KQorQEAgLTE4MTEsOCArMjI5NywxMCBAQAorICAgZWxzZSBpZiAobGlzdGZpbGUpCisgICAgIGdldF9saXN0X2Jsb2NrcyAobGlzdGZpbGUpOworIAorLSAgd3JpdGVfdGFibGVzICgpOwkJLyogV3JpdGUgdGhlIGZpbGUgc3lzdGVtIHRhYmxlcyBhd2F5ISAqLworIAorKyAgaWYgKGRpcm5hbWUpIGFkZF9yb290X2RpcmVjdG9yeShkaXJuYW1lKTsKKysKKysgIHdyaXRlX3RhYmxlcyAoKTsJCS8qIFdyaXRlIHRoZSBmaWxlIHN5c3RlbSB0YWJsZXMgYXdheSEgKi8gIAorICAgZXhpdCAoMCk7CQkJLyogVGVybWluYXRlIHdpdGggbm8gZXJyb3JzISAqLworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlOGE3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0ZpeCBhIGNvbXBpbGF0aW9uIGVycm9yIGR1ZSB0byB1bmRlZmluZWQgTVNET1NfRkFUMTIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9ib290LmMub3JpZwkyMDA0LTEwLTE1IDA4OjUxOjQyLjM5NDcyNTE3NiAtMDYwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Jvb3QuYwkyMDA0LTEwLTE1IDA4OjQ5OjE2Ljc3Njg2MjQ1NiAtMDYwMAorQEAgLTE0LDYgKzE0LDkgQEAKKyAjaW5jbHVkZSAiaW8uaCIKKyAjaW5jbHVkZSAiYm9vdC5oIgorIAorKyNpZm5kZWYgTVNET1NfRkFUMTIKKysjZGVmaW5lIE1TRE9TX0ZBVDEyIDQwODQKKysjZW5kaWYKKyAKKyAjZGVmaW5lIFJPVU5EX1RPX01VTFRJUExFKG4sbSkgKChuKSAmJiAobSkgPyAobikrKG0pLTEtKChuKS0xKSUobSkgOiAwKQorICAgICAvKiBkb24ndCBkaXZpZGUgYnkgemVybyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhhNzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRkFUMzIgYXBwZWFycyB0byBiZSBicm9rZW4gd2hlbiB1c2VkIHdpdGggdGhlIC1kIG9wdGlvbiB0byBwb3B1bGF0ZSB0aGUgbXNkb3MKK2ltYWdlLiBUaGlzIGRpc2FibGVzIHRoZSBGQVQzMiBhdXRvc2VsZWN0aW9uIGNvZGUgd2hpY2ggbWVhbnMgd2UgZG9uJ3QgZ2V0Citicm9rZW4gaW1hZ2VzIHdpdGggdGhlIC1kIG9wdGlvbi4gSXQgY2FuIHN0aWxsIGJlIGVuYWJsZWQgb24gdGhlIGNvbW1hbmRsaW5lCithdCB0aGUgdXNlcnMgb3duIHJpc2suIFRoaXMgY2hhbmdlcyB1cyBiYWNrIHRvIHRoZSAyLjEwIHZlcnNpb24ncyBiZWhhdmlvdXIKK3doaWNoIHdhcyBrbm93biB0byB3b3JrIHdlbGwgZXZlbiB3aXRoIGxhcmdlIGltYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZXBlbmRzIG9uIG90aGVyIHBhdGNoZXMgd2UgYXBwbHldCisKK1JQIDIwMTEvMTIvMTMKKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMTMgMTM6NTQ6MzcuNTM4NTA5MzkxICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMTMgMTM6NTU6MTAuMjU4NTA4NjMxICswMDAwCitAQCAtODA4LDEwICs4MDgsMTIgQEAKKyAgICAgICBicy5tZWRpYSA9IChjaGFyKSAweGY4OyAvKiBTZXQgdXAgdGhlIG1lZGlhIGRlc2NyaXB0b3IgZm9yIGEgaGFyZCBkcml2ZSAqLworICAgICAgIGJzLmRpcl9lbnRyaWVzWzBdID0gKGNoYXIpIDA7CS8qIERlZmF1bHQgdG8gNTEyIGVudHJpZXMgKi8KKyAgICAgICBicy5kaXJfZW50cmllc1sxXSA9IChjaGFyKSAyOworKy8qCisgICAgICAgaWYgKCFzaXplX2ZhdCAmJiBibG9ja3MqU0VDVE9SU19QRVJfQkxPQ0sgPiAxMDY0OTYwKSB7CisgCSAgaWYgKHZlcmJvc2UpIHByaW50ZigiQXV0by1zZWxlY3RpbmcgRkFUMzIgZm9yIGxhcmdlIGZpbGVzeXN0ZW1cbiIpOworIAkgIHNpemVfZmF0ID0gMzI7CisgICAgICAgfQorKyovCisgICAgICAgaWYgKHNpemVfZmF0ID09IDMyKSB7CisgCSAgLyogRm9yIEZBVDMyLCB0cnkgdG8gZG8gdGhlIHNhbWUgYXMgTSQncyBmb3JtYXQgY29tbWFuZDoKKyAJICAgKiBmcyBzaXplIDwgMjU2TTogMC41ayBjbHVzdGVycwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzIuMTEuYmIKQEAgLTAsMCArMSwzOCBAQAorIyBkb3Nmc3Rvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kYW5pZWwtYmF1bWFubi5jaC9zb2Z0d2FyZS9kb3Nmc3Rvb2xzLyIKKworU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21rZG9zZnMvQ09QWUlORzttZDU9Y2JlNjdmMDhkNjg4M2JmZjU4N2Y2MTVmMGNjODFhYTgiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvJHtCUE59LyR7QlB9LnNyYy50YXIuZ3ovNDA3ZDQwNWFkZTQxMGY3NTk3ZDM2NGFiNWRjOGM5ZjYvJHtCUH0uc3JjLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rZG9zZnMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsaWdubWVudF9oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb3Nmc3Rvb2xzLW1zZG9zX2ZzLXR5cGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9wb3B1bGF0ZWRfZG9zZnNfY3JlYXRpb24ucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDA3ZDQwNWFkZTQxMGY3NTk3ZDM2NGFiNWRjOGM5ZjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGVhYzZkMTIzODhiM2Q5ZWQ3ODY4NDUyOWMxYjBkOTM0NmZhMmFiYmU0MDZjNGQ0YTNlYjVhMDIzYzk4YTQ4NCIKKworIyBNYWtlZmlsZSBzZXRzIHRoaXMsIGJ1dCB3ZSBjbG9iYmVyIGl0cyBDRkxBR1MsIHNvCisjIGFkZCB0aGlzIGluIGhlcmUgdG8gZm9yIHN1cmUgYWxsb3cgZm9yIGJpZyBmaWxlcy4KKyMKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCitDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURfR05VX1NPVVJDRSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiUFJFRklYPSR7RH0iICJTQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0iIFwKKwkJICAgIk1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjgiIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYgpAQCAtMCwwICsxLDI0IEBACisjIGRvc2ZzdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBDb3B5cmlnaHQgKEMpIDIwMTUsIFPDg8K2cmVuIEJyaW5rbWFubiA8c29lcmVuLmJyaW5rbWFubkBnbWFpbD4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzL2Rvd25sb2FkL3YzLjAuMjgvZG9zZnN0b29scy0zLjAuMjgudGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjZhMDQ3YTZjNjUxODZiOWViYjE4NTM3MDlhZGIzNmRiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlOTU5MTMwNDRlY2YyNzE5YjYzZWExMTIxMjkxNzY0OTcwOWE2ZTUzMjA5YTcyZDYyMjEzNWFhYTg1MTdlZTIiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9zYmluZGlyfSIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0gJHtkb2NkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJQUkVGSVg9JHtEfSR7cHJlZml4fSIgIlNCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfSIgXAorCQkgICAiTUFORElSPSR7RH0ke21hbmRpcn0iICJET0NESVI9JHtEfSR7ZG9jZGlyfSIgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlYzJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jCkBAIC0wLDAgKzEsNzkgQEAKK1NVTU1BUlkgPSAiUGFja2FnZSBtYWludGVuYW5jZSBzeXN0ZW0gZnJvbSBEZWJpYW4iCitMSUNFTlNFID0gIkdQTHYyLjArIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2Rwa2cvZHBrZ18ke1BWfS50YXIueHoiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaCIKKworREVQRU5EUyA9ICJ6bGliIGJ6aXAyIHBlcmwgbmN1cnNlcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIGdldHRleHQtbmF0aXZlIHBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30geHogcnVuLXBvc3RpbnN0cyBwZXJsIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gInh6LW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwZXJsbmF0aXZlIHBrZ2NvbmZpZyBzeXN0ZW1kCisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ1NZU1RFTURfU0VSVklDRV8lcycgJSAocG4pLCAnZHBrZy1jb25maWd1cmUuc2VydmljZScpCit9CisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9wZXJsIgorUEVSTF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwiCisKK2V4cG9ydCBQRVJMX0xJQkRJUiA9ICIke2xpYmRpcn0vcGVybCIKK1BFUkxfTElCRElSX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0vcGVybC1uYXRpdmUvcGVybCIKKworRVhUUkFfT0VDT05GID0gIlwKKwkJLS1kaXNhYmxlLWRzZWxlY3QgXAorCQktLWVuYWJsZS1zdGFydC1zdG9wLWRhZW1vbiBcCisJCS0td2l0aC16bGliIFwKKwkJLS13aXRoLWJ6MiBcCisJCS0td2l0aG91dC1saWJsem1hIFwKKwkJLS13aXRob3V0LXNlbGludXggXAorCQkiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBUQVI9dGFyIgorCitkb19jb25maWd1cmUgKCkgeworICAgIGVjaG8gPj4gJHtTfS9tNC9jb21waWxlci5tNAorICAgIHNlZCAtaSAtZSAncyNQRVJMX0xJQkRJUj0uKiQjUEVSTF9MSUJESVI9IiR7bGliZGlyfS9wZXJsIiMnICR7U30vY29uZmlndXJlCisgICAgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtQTn0iID0gImRwa2ctbmF0aXZlIiBdOyB0aGVuCisJCSMgdXBkYXRlLWFsdGVybmF0aXZlcyBkb2Vzbid0IGhhdmUgYW4gb2ZmbGluZSBtb2RlCisJCXJtICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCQlzZWQgLWkgLWUgJ3N8XiMhLioke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsfCMhL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAke0R9JHtiaW5kaXJ9L2Rwa2ctKgorCWVsc2UKKwkJc2VkIC1pIC1lICdzfF4jIS4qJHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwjIS91c3IvYmluL2VudiBwZXJsfCcgJHtEfSR7YmluZGlyfS9kcGtnLSoKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07dGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAorCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHBrZy1jb25maWd1cmUuc2VydmljZQorCWZpCit9CisKK1BST1YgPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorUFJPVl9jbGFzcy1uYXRpdmUgPSAiIgorCitQUk9WSURFUyArPSAiJHtQUk9WfSIKKworUEFDS0FHRVMgPSsgInVwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyIKK0ZJTEVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyA9ICIke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kcGtnL2FsdGVybmF0aXZlcyAke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyIKK1JQUk9WSURFU191cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1wZXJsIgorRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVybCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY3ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBkMTRmZmQ3ODY5OTNkYTYwY2E4NGM0ODEyZGE4YTY1OTRhOGM3NjRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE1OjQ4OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBXaGVuIHJ1bm5pbmcgZG9fcGFja2FnZV93cml0ZV9kZWIsIHdlIGhhdmUgdHJlZXMgb2YKKyBoYXJkbGlua2VkIGZpbGVzIHN1Y2ggYXMgdGhlIGRiZyBzb3VyY2UgZmlsZXMgaW4gJHtQTn0tZGJnLiBJZiBzb21ldGhpbmcKKyBtYWtlcyBhbm90aGVyIGNvcHkgb2Ygb25lIG9mIHRob3NlIGZpbGVzIChvciBkZWxldGVzIG9uZSksIHRoZSBudW1iZXIgb2YKKyBsaW5rcyBhIGZpbGUgaGFzIGNoYW5nZXMgYW5kIHRhciBjYW4gbm90aWNlIHRoaXMsIGUuZy46CisKK3wgREVCVUc6IEV4ZWN1dGluZyBweXRob24gZnVuY3Rpb24gZG9fcGFja2FnZV9kZWIKK3wgZHBrZy1kZWI6IGJ1aWxkaW5nIHBhY2thZ2UgYHNlZC1wdGVzdCcgaW4gYC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2VkLzQuMi4yLXIwL2RlcGxveS1kZWJzL2k1ODYvc2VkLXB0ZXN0XzQuMi4yLXIwLjNfaTM4Ni5kZWInLgorfCB0YXI6IC4vdXNyL2xpYi9zZWQvcHRlc3QvdGVzdHN1aXRlL3RzdC1yZWdleDI6IGZpbGUgY2hhbmdlZCBhcyB3ZSByZWFkIGl0Cit8IGRwa2ctZGViOiBlcnJvcjogc3VicHJvY2VzcyB0YXIgLWNmIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzIDEKKworVGFyIHJldHVybnMgYW4gZXJyb3Igb2YgMSB3aGVuIGZpbGVzICdjaGFuZ2UnIGFuZCBvdGhlciBlcnJvcnMgY29kZXMKK2luIG90aGVyIGVycm9yIGNhc2VzLiBXZSB0d2VhayBkcGtnLWRlYiBoZXJlIHNvIHRoYXQgaXQgaWdub3JlcyBhbiBleGl0Citjb2RlIG9mIDEgZnJvbSB0YXIuIFRoZSBmaWxlcyBkb24ndCByZWFsbHkgY2hhbmdlIChhbmQgd2UgaGF2ZSBsb2NraW5nIGluCitwbGFjZSB0byBhdm9pZCB0aGF0IGtpbmQgb2YgaXNzdWUpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvMy8yNworLS0tCisgZHBrZy1kZWIvYnVpbGQuYyB8IDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rwa2ctZGViL2J1aWxkLmMgYi9kcGtnLWRlYi9idWlsZC5jCitpbmRleCBlYTNkODYxLi4xNTg5OTI3IDEwMDY0NAorLS0tIGEvZHBrZy1kZWIvYnVpbGQuYworKysrIGIvZHBrZy1kZWIvYnVpbGQuYworQEAgLTQ1OCw3ICs0NTgsNyBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIGNoYXIgKmRlYmFyOworICAgY2hhciAqdGZidWY7CisgICBpbnQgYXJmZDsKKy0gIGludCBwMVsyXSwgcDJbMl0sIGd6ZmQ7CisrICBpbnQgcDFbMl0sIHAyWzJdLCBnemZkLCByYzsKKyAgIHBpZF90IGMxLCBjMjsKKyAKKyAgIC8qIERlY29kZSBvdXIgYXJndW1lbnRzLiAqLworQEAgLTUzOCw3ICs1MzgsOSBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIH0KKyAgIGNsb3NlKHAxWzBdKTsKKyAgIHN1YnByb2NfcmVhcChjMiwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7CistICBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgMCk7CisrICByYyA9IHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCBTVUJQUk9DX1JFVEVSUk9SKTsKKysgIGlmIChyYyAmJiByYyAhPSAxKQorKyAgICBvaHNoaXRlKF8oInN1YnByb2Nlc3MgJXMgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgJWQiKSwgInRhciAtY2YiLCByYyk7CisgCisgICBpZiAobHNlZWsoZ3pmZCwgMCwgU0VFS19TRVQpKQorICAgICBvaHNoaXRlKF8oImZhaWxlZCB0byByZXdpbmQgdGVtcG9yYXJ5IGZpbGUgKCVzKSIpLCBfKCJjb250cm9sIG1lbWJlciIpKTsKK0BAIC02MjYsNyArNjI4LDEwIEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQorICAgLyogQWxsIGRvbmUsIGNsZWFuIHVwIHdhaXQgZm9yIHRhciBhbmQgPGNvbXByZXNzPiB0byBmaW5pc2ggdGhlaXIgam9iLiAqLworICAgY2xvc2UocDFbMV0pOworICAgc3VicHJvY19yZWFwKGMyLCBfKCI8Y29tcHJlc3M+IGZyb20gdGFyIC1jZiIpLCAwKTsKKy0gIHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCAwKTsKKysgIHJjID0gc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIFNVQlBST0NfUkVURVJST1IpOworKyAgaWYgKHJjICYmIHJjICE9IDEpCisrICAgIG9oc2hpdGUoXygic3VicHJvY2VzcyAlcyByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAlZCIpLCAidGFyIC1jZiIsIHJjKTsKKysKKyAgIC8qIE9rYXksIHdlIGhhdmUgZGF0YS50YXIgYXMgd2VsbCBub3csIGFkZCBpdCB0byB0aGUgYXIgd3JhcHBlci4gKi8KKyAgIGlmIChkZWJfZm9ybWF0Lm1ham9yID09IDIpIHsKKyAgICAgY2hhciBkYXRhbWVtYmVyWzE2ICsgMV07CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxYTZhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYjRlYTU0MTU4YzM5OTg3NGUxMjM5NGViYzkxYWZlOTg5NTQ2OTVlMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoxNjoxNiArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gQWRhcHQgdG8gbGludXgtd3JzIGtlcm5lbCB2ZXJzaW9uLCB3aGljaCBoYXMgY2hhcmFjdGVyCisgJ18nIGluc2lkZS4gUmVtb3ZlIHRoZSBmaXJzdC1jaGFyLWRpZ2l0LWNoZWNrIChhcyB0aGUgMS4xNS44LjUgdmVyc2lvbiBkb2VzKS4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYi9kcGtnL3BhcnNlaGVscC5jIHwgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2Rwa2cvcGFyc2VoZWxwLmMgYi9saWIvZHBrZy9wYXJzZWhlbHAuYworaW5kZXggNzliMjkwOC4uNzc1OGFhNSAxMDA2NDQKKy0tLSBhL2xpYi9kcGtnL3BhcnNlaGVscC5jCisrKysgYi9saWIvZHBrZy9wYXJzZWhlbHAuYworQEAgLTIzNSwxNCArMjM1LDEyIEBAIHBhcnNldmVyc2lvbihzdHJ1Y3QgZHBrZ192ZXJzaW9uICpydmVyc2lvbiwgY29uc3QgY2hhciAqc3RyaW5nLAorIAorICAgLyogWFhYOiBXb3VsZCBiZSBmYXN0ZXIgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGNpc3ZlcnNpb24gYW5kIGNpc3JldmlzaW9uLiAqLworICAgcHRyID0gcnZlcnNpb24tPnZlcnNpb247CistICBpZiAoKnB0ciAmJiAhY19pc2RpZ2l0KCpwdHIrKykpCistICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygidmVyc2lvbiBudW1iZXIgZG9lcyBub3Qgc3RhcnQgd2l0aCBkaWdpdCIpKTsKKyAgIGZvciAoOyAqcHRyOyBwdHIrKykgeworLSAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfjoiLCAqcHRyKSA9PSBOVUxMKQorKyAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfjpfIiwgKnB0cikgPT0gTlVMTCkKKyAgICAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oImludmFsaWQgY2hhcmFjdGVyIGluIHZlcnNpb24gbnVtYmVyIikpOworICAgfQorICAgZm9yIChwdHIgPSBydmVyc2lvbi0+cmV2aXNpb247ICpwdHI7IHB0cisrKSB7CistICAgIGlmICghY19pc2RpZ2l0KCpwdHIpICYmICFjX2lzYWxwaGEoKnB0cikgJiYgc3RyY2hyKCIuK34iLCAqcHRyKSA9PSBOVUxMKQorKyAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfl8iLCAqcHRyKSA9PSBOVUxMKQorICAgICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygiaW52YWxpZCBjaGFyYWN0ZXIgaW4gcmV2aXNpb24gbnVtYmVyIikpOworICAgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDI0MjI5OTcxNDkyNTE1YjY0YzgxZThjNjM5MmU1ZGZiZGMyMmI0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6MjU6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIE91ciBwcmUvcG9zdGluc3RzIGV4cGVjdCAkRCB0byBiZSBzZXQgd2hlbiBydW5uaW5nIGluIGEKKyBzeXNyb290IGFuZCBkb24ndCBleHBlY3QgYSBjaHJvb3QuIFRoaXMgbWF0Y2hlcyB1cCBvdXIgc3lzdGVtIGV4cGVjdGF0aW9ucworIHdpdGggd2hhdCBkcGtnIGRvZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTEvMTIvMDcKKy0tLQorIHNyYy9zY3JpcHQuYyB8IDMxICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zY3JpcHQuYyBiL3NyYy9zY3JpcHQuYworaW5kZXggYTk1ODE0NS4uMjRjNDlmOSAxMDA2NDQKKy0tLSBhL3NyYy9zY3JpcHQuYworKysrIGIvc3JjL3NjcmlwdC5jCitAQCAtMTAwLDM2ICsxMDAsOSBAQCBtYWludHNjcmlwdF9wcmVfZXhlYyhzdHJ1Y3QgY29tbWFuZCAqY21kKQorIAlzaXplX3QgaW5zdGRpcmwgPSBzdHJsZW4oaW5zdGRpcik7CisgCisgCWlmICgqaW5zdGRpcikgeworLQkJaWYgKHN0cm5jbXAoYWRtaW5kaXIsIGluc3RkaXIsIGluc3RkaXJsKSAhPSAwKQorLQkJCW9oc2hpdChfKCJhZG1pbmRpciBtdXN0IGJlIGluc2lkZSBpbnN0ZGlyIGZvciBkcGtnIHRvIHdvcmsgcHJvcGVybHkiKSk7CistCQlpZiAoc2V0ZW52KCJEUEtHX0FETUlORElSIiwgYWRtaW5kaXIgKyBpbnN0ZGlybCwgMSkgPCAwKQorLQkJCW9oc2hpdGUoXygidW5hYmxlIHRvIHNldGVudiBmb3Igc3VicHJvY2Vzc2VzIikpOworLQorLQkJaWYgKGNocm9vdChpbnN0ZGlyKSkKKy0JCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaHJvb3QgdG8gJyUuMjUwcyciKSwgaW5zdGRpcik7CistCX0KKy0JLyogU3dpdGNoIHRvIGEga25vd24gZ29vZCBkaXJlY3RvcnkgdG8gZ2l2ZSB0aGUgbWFpbnRhaW5lciBzY3JpcHQKKy0JICogYSBzYW5lciBlbnZpcm9ubWVudCwgYWxzbyBuZWVkZWQgYWZ0ZXIgdGhlIGNocm9vdCgpLiAqLworLQlpZiAoY2hkaXIoIi8iKSkKKy0JCW9oc2hpdGUoXygiZmFpbGVkIHRvIGNoZGlyIHRvICclLjI1NXMnIiksICIvIik7CistCWlmIChkZWJ1Z19oYXNfZmxhZyhkYmdfc2NyaXB0cykpIHsKKy0JCXN0cnVjdCB2YXJidWYgYXJncyA9IFZBUkJVRl9JTklUOworLQkJY29uc3QgY2hhciAqKmFyZ3YgPSBjbWQtPmFyZ3Y7CistCistCQl3aGlsZSAoKisrYXJndikgeworLQkJCXZhcmJ1Zl9hZGRfY2hhcigmYXJncywgJyAnKTsKKy0JCQl2YXJidWZfYWRkX3N0cigmYXJncywgKmFyZ3YpOworLQkJfQorLQkJdmFyYnVmX2VuZF9zdHIoJmFyZ3MpOworLQkJZGVidWcoZGJnX3NjcmlwdHMsICJmb3JrL2V4ZWMgJXMgKCVzICkiLCBjbWQtPmZpbGVuYW1lLAorLQkJICAgICAgYXJncy5idWYpOworLQkJdmFyYnVmX2Rlc3Ryb3koJmFyZ3MpOworKwkJc2V0ZW52KCJEIiwgaW5zdGRpciwgMSk7CisgCX0KKy0JaWYgKCFpbnN0ZGlybCkKKy0JCXJldHVybiBjbWQtPmZpbGVuYW1lOworLQorLQlhc3NlcnQoc3RybGVuKGNtZC0+ZmlsZW5hbWUpID49IGluc3RkaXJsKTsKKy0JcmV0dXJuIGNtZC0+ZmlsZW5hbWUgKyBpbnN0ZGlybDsKKysJcmV0dXJuIGNtZC0+ZmlsZW5hbWU7CisgfQorIAorIC8qKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Yzg1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGFkYjZiZmQwZmVlY2VhZjAzMGRmMGRlYmUzMzQzZDdmNzNlNzA4YTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6Mjc6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzVdIFRoZSBsdXRpbWVzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IgYWxsCisgc3lzdGVtcy4KKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgc3JjL2FyY2hpdmVzLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9hcmNoaXZlcy5jIGIvc3JjL2FyY2hpdmVzLmMKK2luZGV4IGJmZjVmMTQuLmI3MTEwMTMgMTAwNjQ0CistLS0gYS9zcmMvYXJjaGl2ZXMuYworKysrIGIvc3JjL2FyY2hpdmVzLmMKK0BAIC00NDksOCArNDQ5LDkgQEAgdGFyb2JqZWN0X3NldF9tdGltZShzdHJ1Y3QgdGFyX2VudHJ5ICp0ZSwgY29uc3QgY2hhciAqcGF0aCkKKyAKKyAgIGlmICh0ZS0+dHlwZSA9PSBUQVJfRklMRVRZUEVfU1lNTElOSykgeworICNpZmRlZiBIQVZFX0xVVElNRVMKKy0gICAgaWYgKGx1dGltZXMocGF0aCwgdHYpICYmIGVycm5vICE9IEVOT1NZUykKKysvKiAgICBpZiAobHV0aW1lcyhwYXRoLCB0dikgJiYgZXJybm8gIT0gRU5PU1lTKQorICAgICAgIG9oc2hpdGUoXygiZXJyb3Igc2V0dGluZyB0aW1lc3RhbXBzIG9mICclLjI1NXMnIiksIHBhdGgpOworKyovCisgI2VuZGlmCisgICB9IGVsc2UgeworICAgICBpZiAodXRpbWVzKHBhdGgsIHR2KSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmU5NmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwYWQ3YmJhODBkNWI5MDM1MDg5ZmYyYjJmNzdhNzc0YjViMjAxOTE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI4OjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNS81XSBkcGtnLWNvbXBpbGVyLm00OiByZW1vdmUgLVd2bGEKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUmVtb3ZlIHRoZSAtV3ZsYSBmbGFnIGZyb20gdGhlIHNldCBvZiBjb21waWxlciB3YXJuaW5nIGZsYWdzLCBzaW5jZSBnY2MKK29uIG9sZCBob3N0IHN5c3RlbXMgc3VjaCBhcyBDZW50T1MgNS44IGRvZXNuJ3Qgc3VwcG9ydCBpdCwgYW5kIGl0CitjYXVzZXMgYSBidWlsZCBlcnJvciBmb3IgZHBrZy1uYXRpdmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEb25uIFNlZWxleSA8ZG9ubi5zZWVsZXlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtNC9kcGtnLWNvbXBpbGVyLm00IHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL200L2Rwa2ctY29tcGlsZXIubTQgYi9tNC9kcGtnLWNvbXBpbGVyLm00CitpbmRleCA2ODI4NTdjLi4yM2VkN2QwIDEwMDY0NAorLS0tIGEvbTQvZHBrZy1jb21waWxlci5tNAorKysrIGIvbTQvZHBrZy1jb21waWxlci5tNAorQEAgLTUyLDcgKzUyLDYgQEAgQUNfREVGVU4oW0RQS0dfQ0hFQ0tfQ09NUElMRVJfV0FSTklOR1NdLCBbCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XbG9naWNhbC1vcF0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XbG9naWNhbC1ub3QtcGFyZW50aGVzZXNdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV3N3aXRjaC1ib29sXSkKKy0gIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVd2bGFdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2luaXQtc2VsZl0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1Xd3JpdGUtc3RyaW5nc10pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XY2FzdC1hbGlnbl0pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMjc1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0F1dGhvcjogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorRGF0ZTogICBXZWQgQXByIDggMTg6MDg6MTQgMjAxNSArMDUzMAorCitbUEFUQ0hdIGFkZCBhcm1lYiB0cmlwbGV0IGVudHJ5IGludG8gdHJpcGxldHRhYmxlLgorCitDcm9zcy1jb21wbGluZyBkcGtnIGFwcGxpY2F0aW9uIGZvciBhcm1lYiBmYWlscyB3aXRoIGJlbG93IGVycm9yCitkdXJpbmcgY29uZmlndXJlIHRhc2ssCisKKyhzbmlwKQorIGNvbmZpZ3VyZToyMzE0MTogY2hlY2tpbmcgZHBrZyBjcHUgdHlwZQorIGNvbmZpZ3VyZToyMzE0ODogcmVzdWx0OiBhcm1lYgorIGNvbmZpZ3VyZToyMzE1MDogV0FSTklORzogYXJtZWIgbm90IGZvdW5kIGluIGNwdXRhYmxlCisgY29uZmlndXJlOjIzMTYyOiBjaGVja2luZyBkcGtnIG9wZXJhdGluZyBzeXN0ZW0gdHlwZQorIGNvbmZpZ3VyZToyMzE2OTogcmVzdWx0OiBsaW51eC1nbnVlYWJpCisgY29uZmlndXJlOjIzMTcxOiBXQVJOSU5HOiBsaW51eC1nbnVlYWJpIG5vdCBmb3VuZCBpbiBvc3RhYmxlCisgY29uZmlndXJlOjIzMTgzOiBjaGVja2luZyBkcGtnIGFyY2hpdGVjdHVyZSBuYW1lCisgY29uZmlndXJlOjIzMTg5OiBlcnJvcjogY2Fubm90IGRldGVybWluZSBob3N0IGRwa2cgYXJjaGl0ZWN0dXJlCistLSBDVVQgLS0KKwordGhlIHJlcXVpcmVkIGNvbWJpbmF0aW9uIG9mICJnbnVlYWJpLWxpbnV4LWFybWViIiB3YXMgbm90IGZvdW5kIGluCit0aGUgdHJpcGxldHRhYmxlIGZpbGUgdGhlcmVieSByZXR1cm5pbmcgZHBrZ19hcmNoIGFzCitlbXB0eSBpbiBjb25maWd1cmUgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorCitkaWZmIC1OYXVycCBkcGtnLTEuMTcuMjFfb3JnL3RyaXBsZXR0YWJsZSBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCistLS0gZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUJMjAxNS0wNC0wOCAxNzowODo1Mi4zNzA3NTkxNzEgKzA1MzAKKysrKyBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDk6MTIuNDA2NzUyMDgxICswNTMwCitAQCAtOSw2ICs5LDcgQEAgbXVzbGVhYmloZi1saW51eC1hcm0JbXVzbC1saW51eC1hcm1oZgorIG11c2wtbGludXgtPGNwdT4JbXVzbC1saW51eC08Y3B1PgorIGdudWVhYmloZi1saW51eC1hcm0JYXJtaGYKKyBnbnVlYWJpLWxpbnV4LWFybQlhcm1lbAorK2dudWVhYmktbGludXgtYXJtZWIJYXJtZWIKKyBnbnVhYmluMzItbGludXgtbWlwczY0ZWwJbWlwc24zMmVsCisgZ251YWJpbjMyLWxpbnV4LW1pcHM2NAltaXBzbjMyCisgZ251YWJpNjQtbGludXgtbWlwczY0ZWwJbWlwczY0ZWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ0YzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2NvbmZpZ3VyZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBwcm9wZXIgY3B1LCBvcywgb3IKK2FyY2hpdGVjdHVyZSBmb3IgbWlwczY0LCBhbmQgcG9zc2libHkgb3RoZXIgYXJjaCdzCitiZWNhdXNlIG9mIGZhdWx0eSBjb2RlIGFkZGVkIHRvIEFyY2gucG0gaW4gdGhlIGxhdGVzdAorcmVsZWFzZSBmcm9tIHVwc3RyZWFtLiAgV2UgcmVtb3ZlIHRoYXQgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworCistLS0gYS9zY3JpcHRzL0Rwa2cvQXJjaC5wbQorKysrIGIvc2NyaXB0cy9EcGtnL0FyY2gucG0KK0BAIC0yMzMsOSArMjMzLDYgQEAgc3ViIHJlYWRfdHJpcGxldHRhYmxlKCkKKyAJCSAgICAobXkgJGR0ID0gJGRlYnRyaXBsZXQpID1+IHMvPGNwdT4vJF9jcHUvOworIAkJICAgIChteSAkZGEgPSAkZGViYXJjaCkgPX4gcy88Y3B1Pi8kX2NwdS87CisgCistCQkgICAgbmV4dCBpZiBleGlzdHMgJGRlYmFyY2hfdG9fZGVidHJpcGxldHskZGF9CistCQkgICAgICAgICBvciBleGlzdHMgJGRlYnRyaXBsZXRfdG9fZGViYXJjaHskZHR9OworLQorIAkJICAgICRkZWJhcmNoX3RvX2RlYnRyaXBsZXR7JGRhfSA9ICRkdDsKKyAJCSAgICAkZGVidHJpcGxldF90b19kZWJhcmNoeyRkdH0gPSAkZGE7CisgCQl9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiMDc4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZHBrZy1jb25maWd1cmUuc2VydmljZQpAQCAtMCwwICsxLDE3IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPWRwa2cgZmlyc3QgYm9vdCBjb25maWd1cmUKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9wb3N0aW5zdAorRXhlY1N0YXJ0PS1AQkFTRV9CSU5ESVJAL3NoIC1jICIgaWYgWyAkUE9TVElOU1RfTE9HR0lORyA9ICcxJyBdOyB0aGVuIEBCSU5ESVJAL2Rwa2cgLS1jb25maWd1cmUgLWEgPiAkTE9HRklMRSAyPiYxOyBlbHNlIEBCSU5ESVJAL2Rwa2cgLS1jb25maWd1cmUgLWE7IGZpIgorRXhlY1N0YXJ0UG9zdD1AQkFTRV9CSU5ESVJAL3N5c3RlbWN0bCBkaXNhYmxlIGRwa2ctY29uZmlndXJlLnNlcnZpY2UKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworUmVtYWluQWZ0ZXJFeGl0PU5vCisKK1tJbnN0YWxsXQorV2FudGVkQnk9YmFzaWMudGFyZ2V0CitXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzMxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Rwa2cgZGVmaW5lczoKKyNkZWZpbmUgRFBLR19CRUdJTl9ERUNMUwlleHRlcm4gIkMiIHsKKworVGhhdCBtYWtlcyBoZWFkZXIgY3N0ZGxpYiBpbmNsdWRlZCBpbiBhIGV4dGVybiAiQyIgYmxvY2sgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAorYnkgZ2NjIDQuOC4gSXQgZmFpbHMgb24gRmVkb3JhIDE5OgorCisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6IEluIGZ1bmN0aW9uIOKAmGxvbmcgbG9uZyBpbnQgc3RkOjphYnMobG9uZyBsb25nIGludCnigJk6CisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6MTc0OjIwOiBlcnJvcjogZGVjbGFyYXRpb24gb2YgQyBmdW5jdGlvbiDigJhsb25nIGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgbG9uZyBpbnQp4oCZIGNvbmZsaWN0cyB3aXRoCisgICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX19idWlsdGluX2xsYWJzIChfX3gpOyB9CisgICAgICAgICAgICAgICAgICAgIF4KKy91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjoxNjY6MzogZXJyb3I6IHByZXZpb3VzIGRlY2xhcmF0aW9uIOKAmGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgaW50KeKAmSBoZXJlCisgICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIF9fYnVpbHRpbl9sYWJzKF9faSk7IH0KKyAgIF4KKworTW92ZSBpbmNsdWRlIGdldHRleHQuaCBvdXQgb2YgdGhlIGV4dGVybiAiQyIgYmxvY2sgdG8gZml4IHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gZHBrZy0xLjE3LjEvbGliL2Rwa2cvaTE4bi5oLm9yaWcJMjAxMy0wOC0xMyAxNzozMToyOC44NzA5MzU1NzMgKzA4MDAKKysrKyBkcGtnLTEuMTcuMS9saWIvZHBrZy9pMThuLmgJMjAxMy0wOC0xMyAxNzozMTozNy44OTMwNjUyNDkgKzA4MDAKK0BAIC0yMyw4ICsyMyw2IEBACisgCisgI2luY2x1ZGUgPGRwa2cvbWFjcm9zLmg+CisgCistRFBLR19CRUdJTl9ERUNMUworLQorIC8qKgorICAqIEBkZWZncm91cCBpMThuIEludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQKKyAgKiBAaW5ncm91cCBkcGtnLWludGVybmFsCitAQCAtMzMsNiArMzEsOCBAQAorIAorICNpbmNsdWRlIDxnZXR0ZXh0Lmg+CisgCisrRFBLR19CRUdJTl9ERUNMUworKworIC8qIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGlzIGJlY2F1c2UgcGdldHRleHQoKSB1c2VzIExDX01FU1NBR0VTLCBidXQgbGliaW50bC5oCisgICogd2hpY2ggZ2V0cyBwdWxsZWQgYnkgZ2V0dGV4dC5oIG9ubHkgaW5jbHVkZXMgaXQgaWYgYnVpbGRpbmcgb3B0aW1pemVkLiAqLworICNpbmNsdWRlIDxsb2NhbGUuaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2YjhhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK0NlbnRPUyA1Ljgga2VybmVscyBhbmQgaGVhZGVycyBzdXBwb3J0IHRoZSBzeW5jX2ZpbGVfcmFuZ2UoKSBzeXN0ZW0gY2FsbCwKK2J1dCBnbGliYyAyLjUgZG9lc24ndCBwcm92aWRlIHRoZSBzeXNjYWxsIHN0dWIuICBJdCBhcHBlYXJzIHRoYXQgdGhpcworcHJvYmxlbSBpcyBrbm93biBidXQgd2lsbCBuZXZlciBiZSBmaXhlZDoKKworICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTUxODU4MQorCisgIEJ1ZyA1MTg1ODEgLSBbUkhFTDVdIGdsaWJjIG1pc3NlcyBzeW5jX2ZpbGVfcmFuZ2Ugc3lzY2FsbCBpbnRlcmZhY2UgCisKKyAgU3RhdHVzOiAgICAgICBDTE9TRUQgQ0FOVEZJWCAKKyAgTGFzdCBDbG9zZWQ6ICAyMDA5LTExLTIyIDIyOjE5OjU1CisKKyAgS2lyYnkgWmhvdSAyMDA5LTA4LTIwIDIzOjM3OjU1IEVEVAorCisgIERlc2NyaXB0aW9uIG9mIHByb2JsZW06CisKKyAgZ2xpYmMgbWlzc2VzIHN5bmNfZmlsZV9yYW5nZSBzeXNjYWxsIGludGVyZmFjZS4gIFRoZSBoZWFkZXIgZmlsZSBhbmQKKyAgbWFuIHBhZ2UgYm90aCBzYXkgJ3N5bmNfZmlsZV9yYW5nZScgc2hvdWxkIGV4aXN0LiAgRnJvbSBtYW4gcGFnZSwKKyAgc3luY19maWxlX3JhbmdlIHNob3VsZCBleGlzdCBzaW5jIGtlcm5lbC0yLjYuMTcKKworICBBbmRyZWFzIFNjaHdhYiAyMDA5LTA4LTIxIDAzOjI0OjI0IEVEVAorCisgIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgdG8gZ2xpYmMgMi42LCBhbmQgY2Fubm90IGJlIGJhY2twb3J0ZWQgZHVlIHRvCisgIEFCSSBicmVha2FnZS4gIFlvdSBjYW4gYWx3YXlzIGZhbGwgYmFjayB0byBzeXNjYWxsKDMpLgorCisgIFVscmljaCBEcmVwcGVyIDIwMDktMTEtMjIgMjI6MTk6NTUgRVNUCisKKyAgQXMgY29tbWVudCAjMSBzYXlzLCBubyBjaGFuY2UgdG8gYmFja3BvcnQgdGhpcy4KKworICBTZWUgdGhlIHN5c2NhbGwgbWFuIHBhZ2UgZm9yIGluc3RydWN0aW9ucy4KKworICBKb24gRSAyMDEwLTAzLTE5IDEwOjMyOjM3IEVEVAorCisgIHRoZW4gd2h5IGRvY3VtZW50IGl0IGlmIGl0J3MgYnJva2VuIGFuZCB5b3UncmUgbm90IGdvaW5nIHRvIGZpeCBpdD8KKyAgLi4gbWlnaHQgd2FudCB0byBGVEZNIG92ZXIgYXQgc3luY19maWxlX3JhbmdlKDIpIC0gaW4gdGhlIG1lYW50aW1lIC0KKyAgYm9ycm93aW5nIGZyb20gZ2xpYmMgMi42IC4uIGFueSB0aG91Z2h0cyBvbiB0aGlzIGltcGxlbWVudGF0aW9uIGZvciBhCisgIGhhY2t5IHdvcmthcm91bmQgZm9yIHRob3NlIHN0aWxsIG9uIHlvdXIgImFuY2llbnQgcmVsZWFzZXMiIC4uIChlZzoKKyAgUkhFTDUuMyk/OgorCisgICNpZmRlZiBVTElfV09OVF9GSVhfVEhJU19JTl9HTElCQzIuNQorICAjZGVmaW5lIE5SX3N5bmNfZmlsZV9yYW5nZSAyNzcKKyAgaW50IHN5bmNfZmlsZV9yYW5nZSAoaW50IGZkLCBfX29mZjY0X3QgZnJvbSwgX19vZmY2NF90IHRvLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisgIHsKKyAgICByZXR1cm4gc3lzY2FsbCAoTlJfc3luY19maWxlX3JhbmdlLCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAoZnJvbSA+PiAzMiksIChsb25nKSBmcm9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAodG8gPj4gMzIpLCAobG9uZykgdG8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICB9CisgICNlbmRpZgorCisgIGFzc3VtaW5nIG9mIGNvdXJzZSB0aGF0IHlvdSdyZSBvbiBhbiB4ODZfNjQgYW5kIGluY2x1ZGUvYXNtLQorICB4ODZfNjQvdW5pc3RkLmggaGFzIHRoZSBjb3JyZWN0IGVudHJ5CisKKyAgKGZ3aXcgLSBmaW8gaXMgc3RhcnRpbmcgdG8gdXNlIHRoaXMgbm93KQorCitSYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdXNpbmcgc3lzY2FsbCgpLAord2UgdGFrZSB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgcm91dGUgYW5kIGlnbm9yZSBoZWFkZXIgc3VwcG9ydCBmb3IKK3N5bmNfZmlsZV9yYW5nZSgpIGZsYWdzIHdoZW4gdGhlIGdsaWJjIHZlcnNpb24gaXMgPD0gMi41LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2V2ZXJ5b25lIGVsc2UgYnVpbGRzIG9uIG5ld2VyIGhvc3RzIDotKV0KKworU2lnbmVkLW9mZi1ieTogRG9ubiBTZWVsZXkgPGRvbm4uc2VlbGV5QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBMZWkgTGl1IDxsZWkubGl1MkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2FyY2hpdmVzLmMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvYXJjaGl2ZXMuYworKysrIGIvc3JjL2FyY2hpdmVzLmMKK0BAIC03NSw3ICs3NSw3IEBACisgICAvKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGFzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gYW4KKyAgICAqIGFzeW5jaHJvbm91cyBoaW50IGZvciB0aGUga2VybmVsLCB3ZSBhcmUgZG9pbmcgYW4gZnN5bmMoKSBsYXRlciBvbgorICAgICogYW55d2F5LiAqLworLSNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XUklURSkKKysjaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDYpCisgICBzeW5jX2ZpbGVfcmFuZ2UoZmQsIDAsIDAsIFNZTkNfRklMRV9SQU5HRV9XUklURSk7CisgI2VsaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpCisgICBwb3NpeF9mYWR2aXNlKGZkLCAwLCAwLCBQT1NJWF9GQURWX0RPTlRORUVEKTsKK0BAIC0xMTc5LDcgKzExNzksNyBAQAorICAgcmV0dXJuIDA7CisgfQorIAorLSNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSkKKysjaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDYpCisgc3RhdGljIHZvaWQKKyB0YXJfd3JpdGViYWNrX2JhcnJpZXIoc3RydWN0IGZpbGVpbmxpc3QgKmZpbGVzLCBzdHJ1Y3QgcGtnaW5mbyAqcGtnKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC1ydU4gZHBrZy0xLjE1LjguNS1vcmlnL01ha2VmaWxlLmFtIGRwa2ctMS4xNS44LjUvTWFrZWZpbGUuYW0KKy0tLSBkcGtnLTEuMTUuOC41LW9yaWcvTWFrZWZpbGUuYW0JMjAxMC0xMC0wOCAxMjoyNzoxNS4wNDIwODM3MDMgKzA4MDAKKysrKyBkcGtnLTEuMTUuOC41L01ha2VmaWxlLmFtCTIwMTAtMTAtMDggMTI6Mjc6MjcuNzU1MTQ4MjI4ICswODAwCitAQCAtMTIsOCArMTIsNyBAQAorIAl1dGlscyBcCisgCSQoTUFZQkVfRFNFTEVDVCkgXAorIAlzY3JpcHRzIFwKKy0JcG8gXAorLQltYW4KKysJcG8KKyAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0MDhmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorYnVzeWJveC0xLjE5LjQgdGFyIHV0aWxpdHkgZG9lc24ndCBzdXBwb3J0IC0td2FybmluZz1uby10aW1lc3RhbXAKKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitJbmRleDogZHBrZy0xLjE3LjEvZHBrZy1kZWIvZXh0cmFjdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZHBrZy0xLjE3LjEub3JpZy9kcGtnLWRlYi9leHRyYWN0LmMKKysrKyBkcGtnLTEuMTcuMS9kcGtnLWRlYi9leHRyYWN0LmMKK0BAIC0zMTgsNyArMzE4LDYgQEAgZXh0cmFjdGhhbGYoY29uc3QgY2hhciAqZGViYXIsIGNvbnN0IGNoYQorIAorICAgICAgIGNvbW1hbmRfYWRkX2FyZygmY21kLCAiLWYiKTsKKyAgICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi0iKTsKKy0gICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi0td2FybmluZz1uby10aW1lc3RhbXAiKTsKKyAKKyAgICAgICBtX2R1cDIocDJbMF0sMCk7CisgICAgICAgY2xvc2UocDJbMF0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNmYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBkcGtnLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub21hbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FyY2hfcG0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgXAorICAgICAgICAgICAgZmlsZTovL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjNiOWQ4NjkwODFlYzQ5YWRlZWY2YzVmZjYyZDY1NzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTE0ODRmMmE3M2QwMjdkNjk2ZTcyMGE2MDM4MGRiNzE5NzhiYjVjMDZjZDg4ZmUzMGMyOTFlMDY5YWM0NTdhNCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDliYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJFeHQyIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEV4dDIgRmlsZXN5c3RlbSBVdGlsaXRpZXMgKGUyZnNwcm9ncykgY29udGFpbiBhbGwgb2YgdGhlIHN0YW5kYXJkIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcsIFwKK2ZpeGluZywgY29uZmlndXJpbmcgLCBhbmQgZGVidWdnaW5nIGV4dDIgZmlsZXN5c3RlbXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyICYgQlNEICYgTUlUIgorTElDRU5TRV9lMmZzcHJvZ3MtZTJmc2NrID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtbWtlMmZzID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtZnNjayA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLXR1bmUyZnMgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNDhmMjFkNzY1Yjg3NWJkMTA0MDA5NzVkMTJjMWNhMiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9leHQyZnMvZXh0MmZzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT01OTZhOGRlZGNiNGU3MzFjNmIyMWM3YTQ2ZmJhNmJlZiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9lMnAvZTJwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT03O21kNT04YTc0YWRlOGY5ZDY1MDk1ZDcwZWYyZDRiZjQ4ZTM2YSBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL3V1aWQuaC5pbjtiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT1kYmI4MDc5ZTExNGE1Zjg0MTkzNGI5OWU1OWM4ODIwYSBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL0NPUFlJTkc7bWQ1PTU4ZGNkODQ1MjY1MWZjOGIwN2QxZjY1Y2UwN2NhOGFmIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2V0L2V0X25hbWUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1lYWQyMzY0NDdkYWM3Yjk4MGRiYzViNDgwNGQ4YzgzNiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9zcy9zcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTZlODlhZDQ3ZGE2ZTc1ZmVjZDJiNWUwZTgxZTFkNGE2IgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9lMmZzcHJvZ3MvZTJmc3Byb2dzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rpci5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHBrZ2NvbmZpZyBtdWx0aWxpYl9oZWFkZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwNDNiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTdWJqZWN0OiBlMmZzcHJvZ3M6IGZpeCBjcm9zcyBjb21waWxhdGlvbiBwcm9ibGVtCisKK1RoZSBjaGVja2luZyBvZiB0eXBlcyBpbiBwYXJzZS10eXBlcy5zaCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSBpbiBhCitjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIGJpbmFyeSBpcyBleGVjdXRlZAorb24gYnVpbGQgbWFjaGluZS4KKworU28gZXZlbiBpZiBhc21fdHlwZXMuaCBoYXMgZ290IGNvcnJlY3Qgc3RhdGVtZW50cyBmb3IgdHlwZXMsIGl0J3MgcG9zc2libGUKK3RoYXQgdGhlIGdlbmVyYXRlZCBiaW5hcnkgd2lsbCByZXBvcnQgYW4gZXJyb3IuIEJlY2F1c2UgdGhlc2UgdHlwZXMgYXJlIGZvcgordGhlIHRhcmdldCBtYWNoaW5lLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcvcGFyc2UtdHlwZXMuc2ggfCAgICA2ICsrKystLQorIGNvbmZpZ3VyZS5pbiAgICAgICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcvcGFyc2UtdHlwZXMuc2ggYi9jb25maWcvcGFyc2UtdHlwZXMuc2gKK2luZGV4IDUwNzZmNmMuLjI0ZDJhOTkgMTAwNzU1CistLS0gYS9jb25maWcvcGFyc2UtdHlwZXMuc2gKKysrKyBiL2NvbmZpZy9wYXJzZS10eXBlcy5zaAorQEAgLTExOCw4ICsxMTgsMTAgQEAgaWYgLi9hc21fdHlwZXMKKyB0aGVuCisgICAgIHRydWUKKyBlbHNlCistICAgIGVjaG8gIlByb2JsZW0gZGV0ZWN0ZWQgd2l0aCBhc21fdHlwZXMuaCIKKy0gICAgZWNobyAiIiA+IGFzbV90eXBlcy5oCisrICAgIGlmIFsgIiR7Q1JPU1NfQ09NUElMRX0iICE9ICIxIiBdOyB0aGVuCisrCWVjaG8gIlByb2JsZW0gZGV0ZWN0ZWQgd2l0aCBhc21fdHlwZXMuaCIKKysJZWNobyAiIiA+IGFzbV90eXBlcy5oCisrICAgIGZpCisgZmkKKyBybSBhc21fdHlwZXMuYyBhc21fdHlwZXMKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDY4YWRmMGQuLmVkMTY5N2IgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTk1Myw3ICs5NTMsMTEgQEAgQUNfU1VCU1QoU0laRU9GX0xPTkcpCisgQUNfU1VCU1QoU0laRU9GX0xPTkdfTE9ORykKKyBBQ19TVUJTVChTSVpFT0ZfT0ZGX1QpCisgQUNfQ19CSUdFTkRJQU4KKy1CVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKKytpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorKyAgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisrZWxzZQorKyAgQ1JPU1NfQ09NUElMRT0iMSIgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisrZmkKKyBBU01fVFlQRVNfSEVBREVSPS4vYXNtX3R5cGVzLmgKKyBBQ19TVUJTVF9GSUxFKEFTTV9UWVBFU19IRUFERVIpCisgZG5sCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmNzdjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSA0OWQwZmUyYTE0ZjJhMjNkYTJmZTI5OTY0MzM3OWI4YzFkMzdkZjczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK0RhdGU6IEZyaSwgNiBGZWIgMjAxNSAxMjo0NjozOSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJleHQyZnM6IGZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIGNsb3NlZnMoKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoZSBidWcgZml4IGluIGY2NmU2Y2U0NDQ2OiAibGliZXh0MmZzOiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgaWYKK3NfZmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnIiBoYWQgYSB0eXBvIGluIHRoZSBmaXggZm9yCitleHQyZnNfY2xvc2VmcygpLiAgSW4gcHJhY3RpY2UgbW9zdCBvZiB0aGUgc2VjdXJpdHkgZXhwb3N1cmUgd2FzIGZyb20KK3RoZSBvcGVuZnMgcGF0aCwgc2luY2UgdGhpcyBtZWFudCBpZiB0aGVyZSB3YXMgYSBjYXJlZnVsbHkgY3JhZnRlZAorZmlsZSBzeXN0ZW0sIGJ1ZmZlciBvdmVycnVuIHdvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSB3YXMKK29wZW5lZC4KKworSG93ZXZlciwgaWYgY29ycnVwdGVkIGZpbGUgc3lzdGVtIGRpZG4ndCB0cmlwIG92ZXIgc29tZSBjb3JydXB0aW9uCitjaGVjaywgYW5kIHRoZW4gdGhlIGZpbGUgc3lzdGVtIHdhcyBtb2RpZmllZCB2aWEgdHVuZTJmcyBvciBkZWJ1Z2ZzLAorc3VjaCB0aGF0IHRoZSBzdXBlcmJsb2NrIHdhcyBtYXJrZWQgZGlydHkgYW5kIHRoZW4gd3JpdHRlbiBvdXQgdmlhIHRoZQorY2xvc2VmcygpIHBhdGgsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgYnVmZmVyIG92ZXJydW4gY291bGQgYmUKK3RyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyBjbG9zZWQuCisKK0Fsc28gY2xlYXIgdXAgYSBzaWduZWQgdnMgdW5zaWduZWQgd2FybmluZyB3aGlsZSB3ZSdyZSBhdCBpdC4KKworVGhhbmtzIHRvIE5pY2sgS3JhbGV2aWNoIDxubmtAZ29vZ2xlLmNvbT4gZm9yIGFza2luZyBtZSB0byBsb29rIGF0Citjb21waWxlciB3YXJuaW5nIGluIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCB3aGljaCBsZWQgbWUgdG8gbm90aWNlIHRoZQorYnVnIGluIGY2NmU2Y2U0NDQ2LgorCitBZGRyZXNzZXM6IENWRS0yMDE1LTE1NzIKKworU2lnbmVkLW9mZi1ieTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKy0tLQorIGxpYi9leHQyZnMvY2xvc2Vmcy5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK2luZGV4IDFmOTkxMTMuLmFiNWIyZmIgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL2Nsb3NlZnMuYworKysrIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK0BAIC0yODcsNyArMjg3LDcgQEAgZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKKyAJZGdycF90CQlqOworICNlbmRpZgorIAljaGFyCSpncm91cF9wdHI7CistCWludAlvbGRfZGVzY19ibG9ja3M7CisrCWJsazY0X3QJb2xkX2Rlc2NfYmxvY2tzOworIAlzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHByb2dyZXNzOworIAorIAlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworQEAgLTM0Niw3ICszNDYsNyBAQCBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQorIAlncm91cF9wdHIgPSAoY2hhciAqKSBncm91cF9zaGFkb3c7CisgCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykKKysJCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+ZGVzY19ibG9ja3MpCisgCQkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworIAl9IGVsc2UKKyAJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSBjOThmZWMwMDRmMDc3ZTU2NmI5ZGZhMjBiMjVlM2I4NmNiNDYyYTJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDAxOjQxOjA4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTFdIG1rZTJmczogYWRkIHRoZSBhYmlsaXR5IHRvIGNvcHkgZmlsZXMgZnJvbSBhIGdpdmVuCisgZGlyZWN0b3J5CisKK1dlIHdpbGwgYWRkIGEgLWQgb3B0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgYWRkaW5nIHRoZSBmaWxlcyBmcm9tIGEKK2dpdmVuIGRpcmVjdG9yeSB0byB0aGUgZmlsZXN5c3RlbSwgaXQgaXMgc2ltaWxpYXIgdG8gZ2VuZXh0MmZzLCBidXQKK2dlbmV4dDJmcyBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZXh0NC4KKworKiBXZSBhbHJlYWR5IGhhdmUgdGhlIGJhc2ljIG9wZXJhdGlvbnMgaW4gZGVidWdmczoKKyAgLSBDb3B5IHJlZ3VsYXIgZmlsZQorICAtIENyZWF0ZSBkaXJlY3RvcnkKKyAgLSBDcmVhdGUgc3ltbGluaworICAtIENyZWF0ZSBzcGVjaWFsIGZpbGUKKworICBXZSB3aWxsIG1vdmUgdGhlc2Ugb3BlcmF0aW9ucyBpbnRvIGNyZWF0ZV9pbm9kZS5oIGFuZCBjcmVhdGVfaW5vZGUuYywKKyAgdGhlbiBsZXQgYm90aCBta2UyZnMgYW5kIGRlYnVnZnMgdXNlIHRoZW0uCisKKyogV2hhdCB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgLSBDb3B5IHRoZSBnaXZlbiBkaXJlY3RvcnkgcmVjdXJzaXZlbHksIHRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZQorICAgIHBvcHVsYXRlX2ZzKCkKKyAgLSBTZXQgdGhlIG93bmVyLCBtb2RlIGFuZCBvdGhlciBpbmZvcm1hdGlvbnMKKyAgLSBIYW5kbGUgdGhlIGhhcmQgbGlua3MKKworVE9ETzoKKyAgLSBUaGUgbGliZXh0MmZzIGNhbid0IGNyZWF0ZSB0aGUgc29ja2V0IGZpbGUgKFNfSUZTT0NLKSwgZG8gd2UgaGF2ZSBhCisgICAgcGxhbiB0byBzdXBwb3J0IGl0ID8KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCisgbWlzYy9jcmVhdGVfaW5vZGUuaCB8ICAgMTcgKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWlzYy9jcmVhdGVfaW5vZGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBtaXNjL2NyZWF0ZV9pbm9kZS5oCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ2YWFhNjAKKy0tLSAvZGV2L251bGwKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0wLDAgKzEsMjYgQEAKKysjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisrCisrLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisrZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworK30KKysKKysvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworK2VycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpCisreworK30KKysKKysvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworK2VycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKyt9CisrCisrLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisrZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisreworK30KKysKKysvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworK2VycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisreworK30KK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5oIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYzk3ZmEKKy0tLSAvZGV2L251bGwKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmgKK0BAIC0wLDAgKzEsMTcgQEAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKysjaW5jbHVkZSAiZTJwL2UycC5oIgorKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisrI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKysKKytleHQyX2ZpbHN5cyAgICBjdXJyZW50X2ZzOworK2V4dDJfaW5vX3QgICAgIHJvb3Q7CisrCisrLyogRm9yIHBvcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0gKi8KKytleHRlcm4gZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2Rpcik7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmY2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSAwOGRmYmFmNGUzZjcwNDIzMmZmNDZkNzhjMDc1OGE2Y2ZlMzk2MWM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAyOjU5OjEwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNvcHkgZmlsZXMgcmVjdXJzaXZlbHkKKworVXNlIG9wZW5kaXIoKSBhbmQgcmVhZGRpcigpIHRvIHJlYWQgdGhlIG5hdGl2ZSBkaXJlY3RvcnksIHRoZW4gdXNlCitsc3RhdCgpIHRvIGlkZW50aWZ5IHRoZSBmaWxlIHR5cGUgYW5kIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8KK2FkZCB0aGUgZmlsZSB0byB0aGUgZmlsZXN5c3RlbSwgY2FsbCB0aGUgcG9wdWxhdGVfZnMoKSByZWN1cnNpdmVseSBpZiBpdAoraXMgYSBkaXJlY3RvcnkuCisKK05PVEU6IHRoZSBsaWJleHQyZnMgY2FuJ3QgY3JlYXRlIHRoZSBzb2NrZXQgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNDZhYWE2MC4uYjY4YjkxMCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xLDUgKzEsMTMgQEAKKyAjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisgCisrI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMCisrIyBpZiBfX0dOVUNfXyA+PSAyCisrIyAgZGVmaW5lIF9fZnVuY19fIF9fRlVOQ1RJT05fXworKyMgZWxzZQorKyMgIGRlZmluZSBfX2Z1bmNfXyAiPHVua25vd24+IgorKyMgZW5kaWYKKysjZW5kaWYKKysKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMjMsNCArMzEsOTMgQEAgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKyBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIHsKKysJY29uc3QgY2hhcgkqbmFtZTsKKysJRElSCQkqZGg7CisrCXN0cnVjdCBkaXJlbnQJKmRlbnQ7CisrCXN0cnVjdCBzdGF0CXN0OworKwljaGFyCQlsbl90YXJnZXRbUEFUSF9NQVhdOworKwlleHQyX2lub190CWlubzsKKysJZXJyY29kZV90CXJldHZhbDsKKysJaW50CQlyZWFkX2NudDsKKysKKysJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisrCisrCWlmIChjaGRpcihzb3VyY2VfZGlyKSA8IDApIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCV8oIndoaWxlIGNoYW5naW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvIFwiJXNcIiIpLCBzb3VyY2VfZGlyKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKworKwlpZiAoIShkaCA9IG9wZW5kaXIoIi4iKSkpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCV8oIndoaWxlIG9wZW5uaW5nIGRpcmVjdG9yeSBcIiVzXCIiKSwgc291cmNlX2Rpcik7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysKKysJd2hpbGUoKGRlbnQgPSByZWFkZGlyKGRoKSkpIHsKKysJCWlmKCghc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSkgfHwgKCFzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSkpCisrCQkJY29udGludWU7CisrCQlsc3RhdChkZW50LT5kX25hbWUsICZzdCk7CisrCQluYW1lID0gZGVudC0+ZF9uYW1lOworKworKwkJc3dpdGNoKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKKysJCQljYXNlIFNfSUZDSFI6CisrCQkJY2FzZSBTX0lGQkxLOgorKwkJCWNhc2UgU19JRklGTzoKKysJCQkJaWYgKChyZXR2YWwgPSBkb19ta25vZF9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCAmc3QpKSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQkJCV8oIndoaWxlIGNyZWF0aW5nIHNwZWNpYWwgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRlNPQ0s6CisrCQkJCS8qIEZJWE1FOiB0aGVyZSBpcyBubyBtYWtlIHNvY2tldCBmdW5jdGlvbiBhdG0uICovCisrCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisrCQkJCQlfKCJpZ25vcmluZyBzb2NrZXQgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCWNvbnRpbnVlOworKwkJCWNhc2UgU19JRkxOSzoKKysJCQkJaWYoKHJlYWRfY250ID0gcmVhZGxpbmsobmFtZSwgbG5fdGFyZ2V0LCBzaXplb2YobG5fdGFyZ2V0KSkpID09IC0xKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gcmVhZGxpbmsgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIGVycm5vOworKwkJCQl9CisrCQkJCWxuX3RhcmdldFtyZWFkX2NudF0gPSAnXDAnOworKwkJCQlpZiAoKHJldHZhbCA9IGRvX3N5bWxpbmtfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgbG5fdGFyZ2V0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSB3cml0aW5nIHN5bWxpbmtcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRlJFRzoKKysJCQkJaWYgKChyZXR2YWwgPSBkb193cml0ZV9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCBuYW1lKSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSB3cml0aW5nIGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZESVI6CisrCQkJCWlmICgocmV0dmFsID0gZG9fbWtkaXJfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgJnN0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSBtYWtpbmcgZGlyIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJaWYgKChyZXR2YWwgPSBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgcGFyZW50X2lubywgbmFtZSwgJmlubykpKSB7CisrCQkJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQkvKiBQb3B1bGF0ZSB0aGUgZGlyIHJlY3Vyc2l2ZWx5Ki8KKysJCQkJcmV0dmFsID0gcG9wdWxhdGVfZnMoaW5vLCBuYW1lKTsKKysJCQkJaWYgKHJldHZhbCkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCBfKCJ3aGlsZSBhZGRpbmcgZGlyIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJY2hkaXIoIi4uIik7CisrCQkJCWJyZWFrOworKwkJCWRlZmF1bHQ6CisrCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisrCQkJCQlfKCJpZ25vcmluZyBlbnRyeSBcIiVzXCIiKSwgbmFtZSk7CisrCQl9CisrCX0KKysJY2xvc2VkaXIoZGgpOworKwlyZXR1cm4gcmV0dmFsOworIH0KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ3YjZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gYWU3ZDMzODIzYmZjMzMwZTA4YjI1YzVmZTRkMjU4MzhlZjdjNzdjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzoxMzoyOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAzLzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjcmVhdGUgc3BlY2lhbCBmaWxlCisKK1RoZSBkb19ta25vZF9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHNwZWNpYWwgZmlsZSB3aGljaCBpcworYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbywgbW9zdCBvZiB0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywKK3RoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBiNjhiOTEwLi40ZGE4YWZmIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTExLDYgKzExLDc4IEBACisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworKwlleHQyX2lub190CQlpbm87CisrCWVycmNvZGVfdCAJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCXVuc2lnbmVkIGxvbmcJCW1ham9yLCBtaW5vciwgbW9kZTsKKysJaW50CQkJZmlsZXR5cGU7CisrCisrCXN3aXRjaChzdC0+c3RfbW9kZSAmIFNfSUZNVCkgeworKwkJY2FzZSBTX0lGQ0hSOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGQ0hSOworKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisrCQkJYnJlYWs7CisrCQljYXNlIFNfSUZCTEs6CisrCQkJbW9kZSA9IExJTlVYX1NfSUZCTEs7CisrCQkJZmlsZXR5cGUgPSAgRVhUMl9GVF9CTEtERVY7CisrCQkJYnJlYWs7CisrCQljYXNlIFNfSUZJRk86CisrCQkJbW9kZSA9IExJTlVYX1NfSUZJRk87CisrCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisrCQkJYnJlYWs7CisrCX0KKysKKysJaWYgKCEoY3VycmVudF9mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiRmlsZXN5c3RlbSBvcGVuZWQgcmVhZC9vbmx5Iik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJmlubyk7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrI2lmZGVmIERFQlVHRlMKKysJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBpbm8pOworKyNlbmRpZgorKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIG5hbWUsIGlubywgZmlsZXR5cGUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBuYW1lLCBpbm8sIGZpbGV0eXBlKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgaW5vKSkKKysJCWNvbV9lcnIoX19mdW5jX18sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIGlubywgKzEsIDApOworKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKysJaW5vZGUuaV9tb2RlID0gbW9kZTsKKysJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisrCisrCW1ham9yID0gbWFqb3Ioc3QtPnN0X3JkZXYpOworKwltaW5vciA9IG1pbm9yKHN0LT5zdF9yZGV2KTsKKysKKysJaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworKwkJaW5vZGUuaV9ibG9ja1swXSA9IG1ham9yICogMjU2ICsgbWlub3I7CisrCQlpbm9kZS5pX2Jsb2NrWzFdID0gMDsKKysJfSBlbHNlIHsKKysJCWlub2RlLmlfYmxvY2tbMF0gPSAwOworKwkJaW5vZGUuaV9ibG9ja1sxXSA9IChtaW5vciAmIDB4ZmYpIHwgKG1ham9yIDw8IDgpIHwgKChtaW5vciAmIH4weGZmKSA8PCAxMik7CisrCX0KKysJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrCisrCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKQorKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKworKwlyZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkMTk4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIDA5ZDMwNDk3NzY4ODIxNjdmNzI0OWVlMjYyNjViNDE2M2Q3MjIyYzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MTk6NTUgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIHN5bWxpbmsKKworVGhlIGRvX3N5bWxpbmtfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjcmVhdGluZyBzeW1saW5rcywgbW9zdCBvZiB0aGUKK2NvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsIHRoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkCit0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA0ZGE4YWZmLi5mODQ1MTAzIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTg4LDYgKzg4LDM4IEBAIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIC8qIE1ha2UgYSBzeW1saW5rIG5hbWUgLT4gdGFyZ2V0ICovCisgZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCkKKyB7CisrCWNoYXIJCQkqY3A7CisrCWV4dDJfaW5vX3QJCXBhcmVudF9pbm87CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysJc3RydWN0IHN0YXQJCXN0OworKworKwljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKysJaWYgKGNwKSB7CisrCQkqY3AgPSAwOworKwkJaWYgKChyZXR2YWwgPSAgZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgbmFtZSwgJnBhcmVudF9pbm8pKSl7CisrCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQluYW1lID0gY3ArMTsKKysJfSBlbHNlCisrCQlwYXJlbnRfaW5vID0gY3dkOworKworK3RyeV9hZ2FpbjoKKysJcmV0dmFsID0gZXh0MmZzX3N5bWxpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgMCwgbmFtZSwgdGFyZ2V0KTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycigiZG9fc3ltbGlua19pbnRlcm5hbCIsIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJZ290byB0cnlfYWdhaW47CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiZXh0MmZzX3N5bWxpbmsiLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworIH0KKyAKKyAvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzNWNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDUtbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LXJlZ3VsYXItZmlsZS5wYXRjaApAQCAtMCwwICsxLDIyNCBAQAorRnJvbSAyOTczYzc0YWZhYTUzMmYzZjcyNjM5YjQ2MzMyMmIyNTIzNTE5YzIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjI4OjEyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNvcHkgcmVndWxhciBmaWxlCisKK1RoZSBkb193cml0ZV9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNvcHlpbmcgZmlsZSBmcm9tIG5hdGl2ZSBmcyB0bwordGFyZ2V0LCBtb3N0IG9mIHRoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUKK2RlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUgbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgIDE4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBmODQ1MTAzLi45OGY0YTkzIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTgsNiArOCwxNiBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKysvKiA2NEtpQiBpcyB0aGUgbWluaW1pdW0gYmxrc2l6ZSB0byBiZXN0IG1pbmltaXplIHN5c3RlbSBjYWxsIG92ZXJoZWFkLiAqLworKyNpZm5kZWYgSU9fQlVGU0laRQorKyNkZWZpbmUgSU9fQlVGU0laRSA2NCoxMDI0CisrI2VuZGlmCisrCisrLyogQmxvY2sgc2l6ZSBmb3IgYHN0X2Jsb2NrcycgKi8KKysjaWZuZGVmIFNfQkxLU0laRQorKyNkZWZpbmUgU19CTEtTSVpFIDUxMgorKyNlbmRpZgorKworIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC0xMjcsOSArMTM3LDE4MiBAQCBlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CisgfQorIAorK3N0YXRpYyBlcnJjb2RlX3QgY29weV9maWxlKGludCBmZCwgZXh0Ml9pbm9fdCBuZXdmaWxlLCBpbnQgYnVmc2l6ZSwgaW50IG1ha2VfaG9sZXMpCisreworKwlleHQyX2ZpbGVfdAllMl9maWxlOworKwllcnJjb2RlX3QJcmV0dmFsOworKwlpbnQJCWdvdDsKKysJdW5zaWduZWQgaW50CXdyaXR0ZW47CisrCWNoYXIJCSpidWY7CisrCWNoYXIJCSpwdHI7CisrCWNoYXIJCSp6ZXJvX2J1ZjsKKysJaW50CQljbXA7CisrCisrCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oY3VycmVudF9mcywgbmV3ZmlsZSwKKysJCQkJICBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKysJaWYgKHJldHZhbCkKKysJCXJldHVybiByZXR2YWw7CisrCisrCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGJ1ZnNpemUsICZidWYpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwkvKiBUaGlzIGlzIHVzZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIHdob2xlIGJsb2NrIGlzIHplcm8gKi8KKysJcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKGJ1ZnNpemUsICZ6ZXJvX2J1Zik7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisrCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXdoaWxlICgxKSB7CisrCQlnb3QgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUpOworKwkJaWYgKGdvdCA9PSAwKQorKwkJCWJyZWFrOworKwkJaWYgKGdvdCA8IDApIHsKKysJCQlyZXR2YWwgPSBlcnJubzsKKysJCQlnb3RvIGZhaWw7CisrCQl9CisrCQlwdHIgPSBidWY7CisrCisrCQkvKiBTcGFyc2UgY29weSAqLworKwkJaWYgKG1ha2VfaG9sZXMpIHsKKysJCQkvKiBDaGVjayB3aGV0aGVyIGFsbCBpcyB6ZXJvICovCisrCQkJY21wID0gbWVtY21wKHB0ciwgemVyb19idWYsIGdvdCk7CisrCQkJaWYgKGNtcCA9PSAwKSB7CisrCQkJCSAvKiBUaGUgd2hvbGUgYmxvY2sgaXMgemVybywgbWFrZSBhIGhvbGUgKi8KKysJCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgZ290LCBFWFQyX1NFRUtfQ1VSLCBOVUxMKTsKKysJCQkJaWYgKHJldHZhbCkKKysJCQkJCWdvdG8gZmFpbDsKKysJCQkJZ290ID0gMDsKKysJCQl9CisrCQl9CisrCisrCQkvKiBOb3JtYWwgY29weSAqLworKwkJd2hpbGUgKGdvdCA+IDApIHsKKysJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBwdHIsCisrCQkJCQkJICAgZ290LCAmd3JpdHRlbik7CisrCQkJaWYgKHJldHZhbCkKKysJCQkJZ290byBmYWlsOworKworKwkJCWdvdCAtPSB3cml0dGVuOworKwkJCXB0ciArPSB3cml0dGVuOworKwkJfQorKwl9CisrCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisrCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKwlyZXR1cm4gcmV0dmFsOworKworK2ZhaWw6CisrCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisrCSh2b2lkKSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysJcmV0dXJuIHJldHZhbDsKKyt9CisrCisgLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgeworKwlpbnQJCWZkOworKwlzdHJ1Y3Qgc3RhdAlzdGF0YnVmOworKwlleHQyX2lub190CW5ld2ZpbGU7CisrCWVycmNvZGVfdAlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworKwlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworKwlpbnQJCW1ha2VfaG9sZXMgPSAwOworKworKwlmZCA9IG9wZW4oc3JjLCBPX1JET05MWSk7CisrCWlmIChmZCA8IDApIHsKKysJCWNvbV9lcnIoc3JjLCBlcnJubywgMCk7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysJaWYgKGZzdGF0KGZkLCAmc3RhdGJ1ZikgPCAwKSB7CisrCQljb21fZXJyKHNyYywgZXJybm8sIDApOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGRlc3QsICZuZXdmaWxlKTsKKysJaWYgKHJldHZhbCA9PSAwKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiVGhlIGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0c1xuIiwgZGVzdCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysjaWZkZWYgREVCVUdGUworKwlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworKyNlbmRpZgorKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGRlc3QsIG5ld2ZpbGUsCisrCQkJCUVYVDJfRlRfUkVHX0ZJTEUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQljbG9zZShmZCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgZGVzdCwgbmV3ZmlsZSwKKysJCQkJCUVYVDJfRlRfUkVHX0ZJTEUpOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoZGVzdCwgcmV0dmFsLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgbmV3ZmlsZSkpCisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKysJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CisrCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSAoc3RhdGJ1Zi5zdF9tb2RlICYgfkxJTlVYX1NfSUZNVCkgfCBMSU5VWF9TX0lGUkVHOworKwlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorKwkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKysJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrCWlub2RlLmlfc2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKysJaWYgKGN1cnJlbnRfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKysJCWludCBpOworKwkJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CisrCisrCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworKwkJZWgtPmVoX2RlcHRoID0gMDsKKysJCWVoLT5laF9lbnRyaWVzID0gMDsKKysJCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisrCQlpID0gKHNpemVvZihpbm9kZS5pX2Jsb2NrKSAtIHNpemVvZigqZWgpKSAvCisrCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisrCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworKwkJaW5vZGUuaV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7CisrCX0KKysKKysJaWYgKChyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICZpbm9kZSkpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpbm9kZSAldSIsIG5ld2ZpbGUpOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKwlpZiAoTElOVVhfU19JU1JFRyhpbm9kZS5pX21vZGUpKSB7CisrCQlpZiAoc3RhdGJ1Zi5zdF9ibG9ja3MgPCBzdGF0YnVmLnN0X3NpemUgLyBTX0JMS1NJWkUpIHsKKysJCQltYWtlX2hvbGVzID0gMTsKKysJCQkvKgorKwkJCSAqIFVzZSBJL08gYmxvY2tzaXplIGFzIGJ1ZmZlciBzaXplIHdoZW4KKysJCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKysJCQkgKi8KKysJCQlidWZzaXplID0gc3RhdGJ1Zi5zdF9ibGtzaXplOworKwkJfQorKwkJcmV0dmFsID0gY29weV9maWxlKGZkLCBuZXdmaWxlLCBidWZzaXplLCBtYWtlX2hvbGVzKTsKKysJCWlmIChyZXR2YWwpCisrCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKysJfQorKwljbG9zZShmZCk7CisrCisrCXJldHVybiAwOworIH0KKyAKKyAvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2NhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGM4ZDFjNDNiZTI0NDg5MDM2MTM3ZjhmZGViY2ZjY2MyMDhmN2NjOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MzQ6MTQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIGRpcmVjdG9yeQorCitUaGUgZG9fbWtkaXJfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBtYWtpbmcgZGlyIG9uIHRoZSB0YXJnZXQgZnMsIG1vc3Qgb2YKK3RoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZQorbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA5OGY0YTkzLi42YThjOTJhIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTEzNSw2ICsxMzUsMzcgQEAgdHJ5X2FnYWluOgorIC8qIE1ha2UgYSBkaXJlY3RvcnkgaW4gdGhlIGZzICovCisgZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworKwljaGFyCQkJKmNwOworKwlleHQyX2lub190CQlwYXJlbnRfaW5vLCBpbm87CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysKKysKKysJY3AgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisrCWlmIChjcCkgeworKwkJKmNwID0gMDsKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIG5hbWUsICZwYXJlbnRfaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJbmFtZSA9IGNwKzE7CisrCX0gZWxzZQorKwkJcGFyZW50X2lubyA9IGN3ZDsKKysKKyt0cnlfYWdhaW46CisrCXJldHZhbCA9IGV4dDJmc19ta2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCAwLCBuYW1lKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlnb3RvIHRyeV9hZ2FpbjsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorIH0KKyAKKyBzdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5NjM5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDctbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtb3duZXItbW9kZS10aW1lLWZvci10aGUtaW5vZC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIDJiMWY2ZTZiMzg2NzAzYTVkN2U2MGI3ZDhiNzI3NDZmM2QzMWE4YmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6Mzk6NTYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogc2V0IG93bmVyL21vZGUvdGltZSBmb3IgdGhlIGlub2RlCisKK1NldCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIGlub2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA2YThjOTJhLi5hYWQ3MzU0IDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTE4LDYgKzE4LDQwIEBACisgI2RlZmluZSBTX0JMS1NJWkUgNTEyCisgI2VuZGlmCisgCisrLyogRmlsbCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworK3N0YXRpYyB2b2lkIGZpbGxfaW5vZGUoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworKwlpZiAoc3QgIT0gTlVMTCkgeworKwkJaW5vZGUtPmlfdWlkID0gc3QtPnN0X3VpZDsKKysJCWlub2RlLT5pX2dpZCA9IHN0LT5zdF9naWQ7CisrCQlpbm9kZS0+aV9tb2RlIHw9IHN0LT5zdF9tb2RlOworKwkJaW5vZGUtPmlfYXRpbWUgPSBzdC0+c3RfYXRpbWU7CisrCQlpbm9kZS0+aV9tdGltZSA9IHN0LT5zdF9tdGltZTsKKysJCWlub2RlLT5pX2N0aW1lID0gc3QtPnN0X2N0aW1lOworKwl9CisrfQorKworKy8qIFNldCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworK2VycmNvZGVfdCBzZXRfaW5vZGVfZXh0cmEoZXh0Ml9pbm9fdCBjd2QsIGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCisrCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlmaWxsX2lub2RlKCZpbm9kZSwgc3QpOworKworKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGlub2RlICV1IiwgaW5vKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKyt9CisrCisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTQzNSw2ICs0NjksMTcgQEAgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyAJCQkJY29tX2VycihfX2Z1bmNfXywgMCwKKyAJCQkJCV8oImlnbm9yaW5nIGVudHJ5IFwiJXNcIiIpLCBuYW1lKTsKKyAJCX0KKysKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBwYXJlbnRfaW5vLCBuYW1lLCAmaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKworKwkJaWYgKChyZXR2YWwgPSBzZXRfaW5vZGVfZXh0cmEocGFyZW50X2lubywgaW5vLCAmc3QpKSkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJXygid2hpbGUgc2V0dGluZyBpbm9kZSBmb3IgXCIlc1wiIiksIG5hbWUpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGgpOworIAlyZXR1cm4gcmV0dmFsOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTg2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDE2OCBAQAorRnJvbSBkZjg1NjkyOWU0MmJkNGYzYmRjOGQ0ZjU5ZWU4MmFlOGIyODUzMmU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDAxOjUwOjQ1IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTFdIG1rZTJmcy5jOiBhZGQgYW4gb3B0aW9uOiAtZCByb290LWRpcmVjdG9yeQorCitUaGlzIG9wdGlvbiBpcyB1c2VkIGZvciBhZGRpbmcgdGhlIGZpbGVzIGZyb20gYSBnaXZlbiBkaXJlY3RvcnkgKHRoZQorcm9vdC1kaXJlY3RvcnkpIHRvIHRoZSBmaWxlc3lzdGVtLCBpdCBpcyBzaW1pbGlhciB0byBnZW5leHQyZnMsIGJ1dAorZ2VuZXh0MmZzIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBleHQ0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9NYWtlZmlsZS5pbiB8ICAgMTQgKysrKysrKysrKy0tLS0KKyBtaXNjL21rZTJmcy5jICAgIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9taXNjL01ha2VmaWxlLmluIGIvbWlzYy9NYWtlZmlsZS5pbgoraW5kZXggNTUzYzM2MS4uODI1MzcyMyAxMDA2NDQKKy0tLSBhL21pc2MvTWFrZWZpbGUuaW4KKysrKyBiL21pc2MvTWFrZWZpbGUuaW4KK0BAIC00Miw3ICs0Miw4IEBAIExQUk9HUz0JCUBFMklOSVRSRF9QUk9HQAorIAorIFRVTkUyRlNfT0JKUz0JdHVuZTJmcy5vIHV0aWwubworIE1LTFBGX09CSlM9CW1rbG9zdCtmb3VuZC5vCistTUtFMkZTX09CSlM9CW1rZTJmcy5vIHV0aWwubyBwcm9maWxlLm8gcHJvZl9lcnIubyBkZWZhdWx0X3Byb2ZpbGUubworK01LRTJGU19PQkpTPQlta2UyZnMubyB1dGlsLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gZGVmYXVsdF9wcm9maWxlLm8gXAorKwkJCWNyZWF0ZV9pbm9kZS5vCisgQ0hBVFRSX09CSlM9CWNoYXR0ci5vCisgTFNBVFRSX09CSlM9CWxzYXR0ci5vCisgVVVJREdFTl9PQkpTPQl1dWlkZ2VuLm8KK0BAIC02MCw3ICs2MSw4IEBAIEUyRlJFRUZSQUdfT0JKUz0gZTJmcmVlZnJhZy5vCisgUFJPRklMRURfVFVORTJGU19PQkpTPQlwcm9maWxlZC90dW5lMmZzLm8gcHJvZmlsZWQvdXRpbC5vCisgUFJPRklMRURfTUtMUEZfT0JKUz0JcHJvZmlsZWQvbWtsb3N0K2ZvdW5kLm8KKyBQUk9GSUxFRF9NS0UyRlNfT0JKUz0JcHJvZmlsZWQvbWtlMmZzLm8gcHJvZmlsZWQvdXRpbC5vIHByb2ZpbGVkL3Byb2ZpbGUubyBcCistCQkJcHJvZmlsZWQvcHJvZl9lcnIubyBwcm9maWxlZC9kZWZhdWx0X3Byb2ZpbGUubworKwkJCXByb2ZpbGVkL3Byb2ZfZXJyLm8gcHJvZmlsZWQvZGVmYXVsdF9wcm9maWxlLm8gXAorKwkJCXByb2ZpbGVkL2NyZWF0ZV9pbm9kZS5vCisgUFJPRklMRURfQ0hBVFRSX09CSlM9CXByb2ZpbGVkL2NoYXR0ci5vCisgUFJPRklMRURfTFNBVFRSX09CSlM9CXByb2ZpbGVkL2xzYXR0ci5vCisgUFJPRklMRURfVVVJREdFTl9PQkpTPQlwcm9maWxlZC91dWlkZ2VuLm8KK0BAIC04Miw3ICs4NCw3IEBAIFNSQ1M9CSQoc3JjZGlyKS90dW5lMmZzLmMgJChzcmNkaXIpL21rbG9zdCtmb3VuZC5jICQoc3JjZGlyKS9ta2UyZnMuYyBcCisgCQkkKHNyY2RpcikvdXVpZGdlbi5jICQoc3JjZGlyKS9ibGtpZC5jICQoc3JjZGlyKS9sb2dzYXZlLmMgXAorIAkJJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2Jhc2VfZGV2aWNlLmMgXAorIAkJJChzcmNkaXIpL2lzbW91bnRlZC5jICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZmlsZS5jIFwKKy0JCSQoc3JjZGlyKS9lMnVuZG8uYyAkKHNyY2RpcikvZTJmcmVlZnJhZy5jCisrCQkkKHNyY2RpcikvZTJ1bmRvLmMgJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmMKKyAKKyBMSUJTPSAkKExJQkVYVDJGUykgJChMSUJDT01fRVJSKSAKKyBERVBMSUJTPSAkKExJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorQEAgLTYzMCw3ICs2MzIsNyBAQCBta2UyZnMubzogJChzcmNkaXIpL21rZTJmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICAkKHNyY2RpcikvdXRpbC5oIHByb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oIFwKKy0gJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmhcCisgICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorIGNoYXR0ci5vOiAkKHNyY2RpcikvY2hhdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCitAQCAtNzEwLDMgKzcxMiw3IEBAIGUyZnJlZWZyYWcubzogJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHNyY2RpcikvZTJmcmVlZnJhZy5oCisrY3JlYXRlX2lub2RlLm86ICQoc3JjZGlyKS9jcmVhdGVfaW5vZGUuaCAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmMgXAorKyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisrICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggXAorKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IDJlOGJhNjAuLjU3OGI2MmQgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjIsNyArMjIsNiBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2lmZGVmIF9fbGludXhfXworQEAgLTQ0LDI0ICs0MywxOSBAQCBleHRlcm4gaW50IG9wdGluZDsKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+CisgCisgI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyZnNQLmgiCistI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyAjaW5jbHVkZSAidXVpZC91dWlkLmgiCistI2luY2x1ZGUgImUycC9lMnAuaCIKKy0jaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisgI2luY2x1ZGUgInByb2ZpbGUuaCIKKyAjaW5jbHVkZSAicHJvZl9lcnIuaCIKKyAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorLSNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisgI2luY2x1ZGUgInF1b3RhL21rcXVvdGEuaCIKKysjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisgCisgI2RlZmluZSBTVFJJREVfTEVOR1RIIDgKKyAKK0BAIC0xMDUsNiArOTksNyBAQCBzdGF0aWMgY2hhciAqbW91bnRfZGlyOworIGNoYXIgKmpvdXJuYWxfZGV2aWNlOworIHN0YXRpYyBpbnQgc3luY19rbHVkZ2U7CS8qIFNldCB1c2luZyB0aGUgTUtFMkZTX1NZTkMgZW52LiBvcHRpb24gKi8KKyBzdGF0aWMgY2hhciAqKmZzX3R5cGVzOworK2NvbnN0IGNoYXIgKnJvb3RfZGlyOyAgLyogQ29weSBmaWxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICovCisgCisgc3RhdGljIHByb2ZpbGVfdAlwcm9maWxlOworIAorQEAgLTExNiw3ICsxMTEsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQorIAlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdICIKKyAJIlstQyBjbHVzdGVyLXNpemVdXG5cdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSAiCisgCSJbLUogam91cm5hbC1vcHRpb25zXVxuIgorLQkiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKysJIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdICIKKysJIlstZCByb290LWRpcmVjdG9yeV1cbiIKKyAJIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyAJIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdICIKKyAJIlstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuXHRbLU8gZmVhdHVyZVssLi4uXV0gIgorQEAgLTEzOTQsNyArMTM5MCw3IEBAIHByb2ZpbGVfZXJyb3I6CisgCX0KKyAKKyAJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LAorLQkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6dkM6REU6Rkc6STpKOktMOk06TjpPOlI6U1Q6VTpWIikpICE9IEVPRikgeworKwkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6ZDp2QzpERTpGRzpJOko6S0w6TTpOOk86UjpTVDpVOlYiKSkgIT0gRU9GKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2InOgorIAkJCWJsb2Nrc2l6ZSA9IHBhcnNlX251bV9ibG9ja3MyKG9wdGFyZywgLTEpOworQEAgLTE1ODIsNiArMTU3OCw5IEBAIHByb2ZpbGVfZXJyb3I6CisgCQljYXNlICdVJzoKKyAJCQlmc191dWlkID0gb3B0YXJnOworIAkJCWJyZWFrOworKwkJY2FzZSAnZCc6CisrCQkJcm9vdF9kaXIgPSBvcHRhcmc7CisrCQkJYnJlYWs7CisgCQljYXNlICd2JzoKKyAJCQl2ZXJib3NlID0gMTsKKyAJCQlicmVhazsKK0BAIC0yNzI2LDYgKzI3MjUsMjEgQEAgbm9fam91cm5hbDoKKyAJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpKQorIAkJY3JlYXRlX3F1b3RhX2lub2Rlcyhmcyk7CisgCisrCS8qIENvcHkgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAqLworKwlpZiAocm9vdF9kaXIpIHsKKysJCWlmICghcXVpZXQpCisrCQkJcHJpbnRmKCIlcyIsIF8oIkNvcHlpbmcgZmlsZXMgaW50byB0aGUgZGV2aWNlOiAiKSk7CisrCisrCQljdXJyZW50X2ZzID0gZnM7CisrCQlyb290ID0gRVhUMl9ST09UX0lOTzsKKysJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKHJvb3QsIHJvb3RfZGlyKTsKKysJCWlmIChyZXR2YWwpCisrCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisrCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbSIpKTsKKysJCWVsc2UgaWYgKCFxdWlldCkKKysJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworKwl9CisrCisgCWlmICghcXVpZXQpCisgCQlwcmludGYoIiVzIiwgXygiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgIgorIAkJICAgICAgICJmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIpKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzMwZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2gKQEAgLTAsMCArMSwyMTAgQEAKK0Zyb20gZDgzZGM5NTBiM2VjMWZiZGUzM2IyM2Q0MmM1MTU0MDkxYTc0ZjRkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzo0NDowMyAtMDUwMAorU3ViamVjdDogW1BBVENIIDA5LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBoYW5kbGUgaGFyZGxpbmtzCisKK0NyZWF0ZSB0aGUgaW5vZGUgYW5kIHNhdmUgdGhlIG5hdGl2ZSBpbm9kZSBudW1iZXIgd2hlbiB3ZSBtZWV0IHRoZSBoYXJkCitsaW5rIChzdF9ubGluayA+IDEpIGF0IHRoZSBmaXJzdCB0aW1lLCB1c2UgZXh0MmZzX2xpbmsoKSB0byBsaW5rIHRoZQorbmFtZSB0byB0aGUgdGFyZ2V0IGlub2RlIG51bWJlciB3aGVuIHdlIG1lZXQgdGhlIHNhbWUgbmF0aXZlIGlub2RlCitudW1iZXIgYWdhaW4uCisKK1RoaXMgYWxnb3JpdGhtIGlzIHJlZmVycmVkIGZyb20gdGhlIGdlbmV4dDJmcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIG1pc2MvY3JlYXRlX2lub2RlLmggfCAgIDE4ICsrKysrKysrKysrCisgbWlzYy9ta2UyZnMuYyAgICAgICB8ICAgMTIgKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTE4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBhYWQ3MzU0Li43NjM1MDRkIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTE4LDYgKzE4LDQ0IEBACisgI2RlZmluZSBTX0JMS1NJWkUgNTEyCisgI2VuZGlmCisgCisrLyogRm9yIHNhdmluZyB0aGUgaGFyZCBsaW5rcyAqLworK2ludCBoZGxpbmtfY250ID0gSERMSU5LX0NOVDsKKysKKysvKiBMaW5rIGFuIGlub2RlIG51bWJlciB0byBhIGRpcmVjdG9yeSAqLworK3N0YXRpYyBlcnJjb2RlX3QgYWRkX2xpbmsoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBleHQyX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysKKysJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBpbm9kZSAldSIsIGlubyk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIG5hbWUsIGlubywgaW5vZGUuaV9mbGFncyk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgbmFtZSwgaW5vLCBpbm9kZS5pX2ZsYWdzKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBsaW5raW5nICVzIiwgbmFtZSk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCWlub2RlLmlfbGlua3NfY291bnQrKzsKKysKKysJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHdyaXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKworKwlyZXR1cm4gcmV0dmFsOworK30KKysKKyAvKiBGaWxsIHRoZSB1aWQsIGdpZCwgbW9kZSBhbmQgdGltZSBmb3IgdGhlIGlub2RlICovCisgc3RhdGljIHZvaWQgZmlsbF9pbm9kZShzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMjc4LDYgKzMxNiwxNyBAQCBmYWlsOgorIAlyZXR1cm4gcmV0dmFsOworIH0KKyAKKytpbnQgaXNfaGFyZGxpbmsoZXh0Ml9pbm9fdCBpbm8pCisreworKwlpbnQgaTsKKysKKysJZm9yKGkgPSAwOyBpIDwgaGRsaW5rcy5jb3VudDsgaSsrKSB7CisrCQlpZihoZGxpbmtzLmhkbFtpXS5zcmNfaW5vID09IGlubykKKysJCQlyZXR1cm4gaTsKKysJfQorKwlyZXR1cm4gLTE7CisrfQorKworIC8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIHsKK0BAIC0zODgsOSArNDM3LDExIEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCXN0cnVjdCBkaXJlbnQJKmRlbnQ7CisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQlsbl90YXJnZXRbUEFUSF9NQVhdOworKwl1bnNpZ25lZCBpbnQJc2F2ZV9pbm9kZTsKKyAJZXh0Ml9pbm9fdAlpbm87CisgCWVycmNvZGVfdAlyZXR2YWw7CisgCWludAkJcmVhZF9jbnQ7CisrCWludAkJaGRsaW5rOworIAorIAlyb290ID0gRVhUMl9ST09UX0lOTzsKKyAKK0BAIC00MTIsNiArNDYzLDIyIEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQlsc3RhdChkZW50LT5kX25hbWUsICZzdCk7CisgCQluYW1lID0gZGVudC0+ZF9uYW1lOworIAorKwkJLyogQ2hlY2sgZm9yIGhhcmRsaW5rcyAqLworKwkJc2F2ZV9pbm9kZSA9IDA7CisrCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkgJiYgIVNfSVNMTksoc3Quc3RfbW9kZSkgJiYgc3Quc3RfbmxpbmsgPiAxKSB7CisrCQkJaGRsaW5rID0gaXNfaGFyZGxpbmsoc3Quc3RfaW5vKTsKKysJCQlpZiAoaGRsaW5rID49IDApIHsKKysJCQkJcmV0dmFsID0gYWRkX2xpbmsocGFyZW50X2lubywKKysJCQkJCQloZGxpbmtzLmhkbFtoZGxpbmtdLmRzdF9pbm8sIG5hbWUpOworKwkJCQlpZiAocmV0dmFsKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBsaW5raW5nICVzIiwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWNvbnRpbnVlOworKwkJCX0gZWxzZQorKwkJCQlzYXZlX2lub2RlID0gMTsKKysJCX0KKysKKyAJCXN3aXRjaChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisgCQkJY2FzZSBTX0lGQ0hSOgorIAkJCWNhc2UgU19JRkJMSzoKK0BAIC00ODAsNiArNTQ3LDI3IEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQkJCV8oIndoaWxlIHNldHRpbmcgaW5vZGUgZm9yIFwiJXNcIiIpLCBuYW1lKTsKKyAJCQlyZXR1cm4gcmV0dmFsOworIAkJfQorKworKwkJLyogU2F2ZSB0aGUgaGFyZGxpbmsgaW5vICovCisrCQlpZiAoc2F2ZV9pbm9kZSkgeworKwkJCS8qCisrCQkJICogQ2hlY2sgd2hldGhlciBuZWVkIG1vcmUgbWVtb3J5LCBhbmQgd2UgZG9uJ3QgbmVlZAorKwkJCSAqIGZyZWUoKSBzaW5jZSB0aGUgbGlmZXNwYW4gd2lsbCBiZSBvdmVyIGFmdGVyIHRoZSBmcworKwkJCSAqIHBvcHVsYXRlZC4KKysJCQkgKi8KKysJCQlpZiAoaGRsaW5rcy5jb3VudCA9PSBoZGxpbmtfY250KSB7CisrCQkJCWlmICgoaGRsaW5rcy5oZGwgPSByZWFsbG9jIChoZGxpbmtzLmhkbCwKKysJCQkJCQkoaGRsaW5rX2NudCArIEhETElOS19DTlQpICoKKysJCQkJCQlzaXplb2YgKHN0cnVjdCBoZGxpbmtfcykpKSA9PSBOVUxMKSB7CisrCQkJCQljb21fZXJyKG5hbWUsIGVycm5vLCAiTm90IGVub3VnaCBtZW1vcnkiKTsKKysJCQkJCXJldHVybiBlcnJubzsKKysJCQkJfQorKwkJCQloZGxpbmtfY250ICs9IEhETElOS19DTlQ7CisrCQkJfQorKwkJCWhkbGlua3MuaGRsW2hkbGlua3MuY291bnRdLnNyY19pbm8gPSBzdC5zdF9pbm87CisrCQkJaGRsaW5rcy5oZGxbaGRsaW5rcy5jb3VudF0uZHN0X2lubyA9IGlubzsKKysJCQloZGxpbmtzLmNvdW50Kys7CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGgpOworIAlyZXR1cm4gcmV0dmFsOworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmggYi9taXNjL2NyZWF0ZV9pbm9kZS5oCitpbmRleCA5ZmM5N2ZhLi4yYjZkNDI5IDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuaAorKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorQEAgLTYsOSArNiwyNyBAQAorICNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisgI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyAKKytzdHJ1Y3QgaGRsaW5rX3MKKyt7CisrCWV4dDJfaW5vX3Qgc3JjX2lubzsKKysJZXh0Ml9pbm9fdCBkc3RfaW5vOworK307CisrCisrc3RydWN0IGhkbGlua3NfcworK3sKKysJaW50IGNvdW50OworKwlzdHJ1Y3QgaGRsaW5rX3MgKmhkbDsKKyt9OworKworK3N0cnVjdCBoZGxpbmtzX3MgaGRsaW5rczsKKysKKyBleHQyX2ZpbHN5cyAgICBjdXJyZW50X2ZzOworIGV4dDJfaW5vX3QgICAgIHJvb3Q7CisgCisrLyogRm9yIHNhdmluZyB0aGUgaGFyZCBsaW5rcyAqLworKyNkZWZpbmUgSERMSU5LX0NOVCAgICAgNAorK2V4dGVybiBpbnQgaGRsaW5rX2NudDsKKysKKyAvKiBGb3IgcG9wdWxhdGluZyB0aGUgZmlsZXN5c3RlbSAqLworIGV4dGVybiBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKTsKKyBleHRlcm4gZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpOworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCA1NzhiNjJkLi5hNjNmMGI3IDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTI3MzAsNiArMjczMCwxOCBAQCBub19qb3VybmFsOgorIAkJaWYgKCFxdWlldCkKKyAJCQlwcmludGYoIiVzIiwgXygiQ29weWluZyBmaWxlcyBpbnRvIHRoZSBkZXZpY2U6ICIpKTsKKyAKKysJCS8qCisrCQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoYXJkbGlua3MsIHdlIGRvbid0IG5lZWQgZnJlZSgpCisrCQkgKiBzaW5jZSB0aGUgbGlmZXNwYW4gd2lsbCBiZSBvdmVyIGFmdGVyIHRoZSBmcyBwb3B1bGF0ZWQuCisrCQkgKi8KKysJCWlmICgoaGRsaW5rcy5oZGwgPSAoc3RydWN0IGhkbGlua19zICopCisrCQkJCW1hbGxvYyhoZGxpbmtfY250ICogc2l6ZW9mKHN0cnVjdCBoZGxpbmtfcykpKSA9PSBOVUxMKSB7CisrCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuTm90IGVub3VnaCBtZW1vcnlcbiIpKTsKKysJCQlyZXR2YWwgPSBleHQyZnNfY2xvc2UoZnMpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCisrCQloZGxpbmtzLmNvdW50ID0gMDsKKyAJCWN1cnJlbnRfZnMgPSBmczsKKyAJCXJvb3QgPSBFWFQyX1JPT1RfSU5POworIAkJcmV0dmFsID0gcG9wdWxhdGVfZnMocm9vdCwgcm9vdF9kaXIpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNmNhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaApAQCAtMCwwICsxLDQ5NiBAQAorRnJvbSBkYjg5OTkyZmFiMjIxNWY1MmRjZTRjNTk1YTM5MjcxYjRmZjMwMDBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDA0OjIyOjIyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIGRlYnVnZnM6IHVzZSB0aGUgZnVuY3Rpb25zIGluIG1pc2MvY3JlYXRlX2lub2RlLmMKKworKiBVc2UgdGhlIGZ1bmN0aW9ucyBpbiBtaXNjL2NyZWF0ZV9pbm9kZS5jLCBhbmQgcmVtb3ZlIHRoZSBkdXBsaWNhdGVkCisgIGNvZGUuCisKKyogVGhlIENSRUFURV9JTk9ERV9ERVBTIGluIHRoZSBkZWJ1Z2ZzL01ha2VmaWxlLmluIGlzIHVzZWQgZm9yIHJlY29yZGluZworICBjcmVhdGVfaW5vZGUubydzIGRlcGVuZHMgd2hpY2ggaXMgZnJvbSBtaXNjL01ha2VmaWxlLmluLCB3ZSBoYXZlIHRvCisgIHJlY29tcGlsZSBjcmVhdGVfaW5vZGUubyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gcHJpbnQgbW9yZSBtZXNzYWdlcyB3aGVuCisgIGl0IGlzIHVzZWQgYnkgZGVidWdmcywganVzdCBsaWtlIHdlIHJlY29tcGlsZSBlMmZyZWVmcmFnLm8sIGJ1dCBpdCBzZWVtcworICB0aGF0IHRoZSBlMmZyZWVmcmFnLm8ncyBkZXBlbmRzIGluIGRlYnVnZnMvTWFrZWZpbGUuaW4gaXMgaW5jb3JyZWN0LCBpdAorICB3b3VsZCBub3QgcmVidWlsZCB3aGVuIGl0cyBkZXBlbmRzIChlLmcuOiBsaWIvY29uZmlnLmgpIGlzIGNoYW5nZWQsCisgIHdoaWNoIHdvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgZXJyb3JzLiBNYWtlIGR1cGxpY2F0ZWQgY29kZSBpbgorICBkZWJ1Z2ZzL01ha2VmaWxlLmluIGFuZCBtaXNjL01ha2VmaWxlLmluIGlzIG5vdCBhIGdvb2QgaWRlYSwgbWF5YmUgd2UnZAorICBiZXR0ZXIgZGVmaW5lIENSRUFURV9JTk9ERV9ERVBTIGluIHRoZSB0b3AgTWFrZWZpbGUsIEknZCBsaWtlIHRvIHNlbmQKKyAgYW5vdGhlciBwYXRjaCBhbmQgZml4IHRoZSBlMmZyZWVmcmFnIGlmIHlvdSBhcmUgZmluZSB3aXRoIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgZGVidWdmcy9NYWtlZmlsZS5pbiB8ICAgMTcgKystCisgZGVidWdmcy9kZWJ1Z2ZzLmMgICB8ICAzMDUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZGVidWdmcy9kZWJ1Z2ZzLmggICB8ICAgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgMjkyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9NYWtlZmlsZS5pbiBiL2RlYnVnZnMvTWFrZWZpbGUuaW4KK2luZGV4IGJmMDM3ZTAuLmY1MWI3OGUgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL01ha2VmaWxlLmluCisrKysgYi9kZWJ1Z2ZzL01ha2VmaWxlLmluCitAQCAtMTgsNyArMTgsNyBAQCBNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uL2xpYi9zcyAuLi9saWIvc3MvbWtfY21kcworIAorIERFQlVHX09CSlM9IGRlYnVnX2NtZHMubyBkZWJ1Z2ZzLm8gdXRpbC5vIG5jaGVjay5vIGljaGVjay5vIGxzLm8gXAorIAlsc2RlbC5vIGR1bXAubyBzZXRfZmllbGRzLm8gbG9nZHVtcC5vIGh0cmVlLm8gdW51c2VkLm8gZTJmcmVlZnJhZy5vIFwKKy0JZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIGV4dGVudF9pbm9kZS5vIHphcC5vCisrCWZpbGVmcmFnLm8gZXh0ZW50X2NtZHMubyBleHRlbnRfaW5vZGUubyB6YXAubyBjcmVhdGVfaW5vZGUubworIAorIFJPX0RFQlVHX09CSlM9IHJvX2RlYnVnX2NtZHMubyByb19kZWJ1Z2ZzLm8gdXRpbC5vIG5jaGVjay5vIGljaGVjay5vIGxzLm8gXAorIAlsc2RlbC5vIGxvZ2R1bXAubyBodHJlZS5vIGUyZnJlZWZyYWcubyBmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gXAorQEAgLTI4LDcgKzI4LDEzIEBAIFNSQ1M9IGRlYnVnX2NtZHMuYyAkKHNyY2RpcikvZGVidWdmcy5jICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2xzLmMgXAorIAkkKHNyY2RpcikvbmNoZWNrLmMgJChzcmNkaXIpL2ljaGVjay5jICQoc3JjZGlyKS9sc2RlbC5jIFwKKyAJJChzcmNkaXIpL2R1bXAuYyAkKHNyY2Rpcikvc2V0X2ZpZWxkcy5jICR7c3JjZGlyfS9sb2dkdW1wLmMgXAorIAkkKHNyY2RpcikvaHRyZWUuYyAkKHNyY2RpcikvdW51c2VkLmMgJHtzcmNkaXJ9Ly4uL21pc2MvZTJmcmVlZnJhZy5jIFwKKy0JJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2V4dGVudF9pbm9kZS5jICQoc3JjZGlyKS96YXAuYworKwkkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHNyY2RpcikvZXh0ZW50X2lub2RlLmMgJChzcmNkaXIpL3phcC5jIFwKKysJJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMKKysKKytDUkVBVEVfSU5PREVfREVQUz0gJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmggXAorKwkkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKysJJChzcmNkaXIpLy4uL2xpYi9leHQyZnMvZXh0MmZzLmggJChzcmNkaXIpLy4uL2xpYi9ldC9jb21fZXJyLmggXAorKwkkKHNyY2RpcikvLi4vbGliL2UycC9lMnAuaCAkKHNyY2RpcikvLi4vbWlzYy9ubHMtZW5hYmxlLmgKKyAKKyBMSUJTPSAkKExJQkVYVDJGUykgJChMSUJFMlApICQoTElCU1MpICQoTElCQ09NX0VSUikgJChMSUJCTEtJRCkgXAorIAkkKExJQlVVSUQpCitAQCAtODEsNiArODcsMTEgQEAgZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvLi4vbWlzYy9lMmZyZWVmcmFnLmMKKyAJJChFKSAiCUNDICRAIgorIAkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgLUkkKHNyY2RpcikgJDwgLURERUJVR0ZTIC1vICRACisgCisrY3JlYXRlX2lub2RlLm86ICQoQ1JFQVRFX0lOT0RFX0RFUFMpCisrCSQoRSkgIglDQyAkQCIKKysJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpIC1JJChzcmNkaXIpIFwKKysJCSAkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYyAtRERFQlVHRlMgLW8gJEAKKysKKyBkZWJ1Z2ZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4KKyAJJChFKSAiCVNVQlNUICRAIgorIAkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4gZGVidWdmcy44CitAQCAtMTQyLDcgKzE1Myw3IEBAIGRlYnVnZnMubzogJChzcmNkaXIpL2RlYnVnZnMuYyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvamZzX3VzZXIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2pmc19jb21wYXQuaCBcCistICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCisrICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oICQodG9wX3NyY2RpcikvbWlzYy91dGlsLmgKKyB1dGlsLm86ICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworaW5kZXggOWMyMTVmNy4uNjJlOWY0NCAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5jCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworQEAgLTI1LDggKzI1LDYgQEAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2luY2x1ZGUgImRlYnVnZnMuaCIKKyAjaW5jbHVkZSAidXVpZC91dWlkLmgiCitAQCAtNDEsMjIgKzM5LDExIEBAIGV4dGVybiBjaGFyICpvcHRhcmc7CisgI2RlZmluZSBCVUZTSVogODE5MgorICNlbmRpZgorIAorLS8qIDY0S2lCIGlzIHRoZSBtaW5pbWl1bSBibGtzaXplIHRvIGJlc3QgbWluaW1pemUgc3lzdGVtIGNhbGwgb3ZlcmhlYWQuICovCistI2lmbmRlZiBJT19CVUZTSVpFCistI2RlZmluZSBJT19CVUZTSVpFIDY0KjEwMjQKKy0jZW5kaWYKKy0KKy0vKiBCbG9jayBzaXplIGZvciBgc3RfYmxvY2tzJyAqLworLSNpZm5kZWYgU19CTEtTSVpFCistI2RlZmluZSBTX0JMS1NJWkUgNTEyCistI2VuZGlmCistCisgc3NfcmVxdWVzdF90YWJsZSAqZXh0cmFfY21kczsKKyBjb25zdCBjaGFyICpkZWJ1Z19wcm9nX25hbWU7CisgaW50IHNjaV9pZHg7CisgCistZXh0Ml9maWxzeXMJY3VycmVudF9mcyA9IE5VTEw7CistZXh0Ml9pbm9fdAlyb290LCBjd2Q7CisrZXh0Ml9pbm9fdAljd2Q7CisgCisgc3RhdGljIHZvaWQgb3Blbl9maWxlc3lzdGVtKGNoYXIgKmRldmljZSwgaW50IG9wZW5fZmxhZ3MsIGJsazY0X3Qgc3VwZXJibG9jaywKKyAJCQkgICAgYmxrNjRfdCBibG9ja3NpemUsIGludCBjYXRhc3Ryb3BoaWMsCitAQCAtMTU3NiwxODkgKzE1NjMsMjQgQEAgdm9pZCBkb19maW5kX2ZyZWVfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB9CisgCisgI2lmbmRlZiBSRUFEX09OTFkKKy1zdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorLXsKKy0JZXh0Ml9maWxlX3QJZTJfZmlsZTsKKy0JZXJyY29kZV90CXJldHZhbDsKKy0JaW50CQlnb3Q7CistCXVuc2lnbmVkIGludAl3cml0dGVuOworLQljaGFyCQkqYnVmOworLQljaGFyCQkqcHRyOworLQljaGFyCQkqemVyb19idWY7CistCWludAkJY21wOworLQorLQlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGN1cnJlbnRfZnMsIG5ld2ZpbGUsCistCQkJCSAgRVhUMl9GSUxFX1dSSVRFLCAmZTJfZmlsZSk7CistCWlmIChyZXR2YWwpCistCQlyZXR1cm4gcmV0dmFsOworLQorLQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKy0JCXJldHVybiByZXR2YWw7CistCX0KKy0KKy0JLyogVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB3aG9sZSBibG9jayBpcyB6ZXJvICovCistCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhidWZzaXplLCAmemVyb19idWYpOworLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworLQkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQkJcmV0dXJuIHJldHZhbDsKKy0JfQorLQorLQl3aGlsZSAoMSkgeworLQkJZ290ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKTsKKy0JCWlmIChnb3QgPT0gMCkKKy0JCQlicmVhazsKKy0JCWlmIChnb3QgPCAwKSB7CistCQkJcmV0dmFsID0gZXJybm87CistCQkJZ290byBmYWlsOworLQkJfQorLQkJcHRyID0gYnVmOworLQorLQkJLyogU3BhcnNlIGNvcHkgKi8KKy0JCWlmIChtYWtlX2hvbGVzKSB7CistCQkJLyogQ2hlY2sgd2hldGhlciBhbGwgaXMgemVybyAqLworLQkJCWNtcCA9IG1lbWNtcChwdHIsIHplcm9fYnVmLCBnb3QpOworLQkJCWlmIChjbXAgPT0gMCkgeworLQkJCQkgLyogVGhlIHdob2xlIGJsb2NrIGlzIHplcm8sIG1ha2UgYSBob2xlICovCistCQkJCXJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIGdvdCwgRVhUMl9TRUVLX0NVUiwgTlVMTCk7CistCQkJCWlmIChyZXR2YWwpCistCQkJCQlnb3RvIGZhaWw7CistCQkJCWdvdCA9IDA7CistCQkJfQorLQkJfQorLQorLQkJLyogTm9ybWFsIGNvcHkgKi8KKy0JCXdoaWxlIChnb3QgPiAwKSB7CistCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLAorLQkJCQkJCSAgIGdvdCwgJndyaXR0ZW4pOworLQkJCWlmIChyZXR2YWwpCistCQkJCWdvdG8gZmFpbDsKKy0KKy0JCQlnb3QgLT0gd3JpdHRlbjsKKy0JCQlwdHIgKz0gd3JpdHRlbjsKKy0JCX0KKy0JfQorLQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworLQlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKy0JcmV0dXJuIHJldHZhbDsKKy0KKy1mYWlsOgorLQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworLQkodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CistCXJldHVybiByZXR2YWw7CistfQorLQorLQorIHZvaWQgZG9fd3JpdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CistCWludAkJZmQ7CistCXN0cnVjdCBzdGF0CXN0YXRidWY7CistCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKyAJZXJyY29kZV90CXJldHZhbDsKKy0Jc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CistCWludAkJYnVmc2l6ZSA9IElPX0JVRlNJWkU7CistCWludAkJbWFrZV9ob2xlcyA9IDA7CisgCisgCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsICJ3cml0ZSIsCisgCQkJCSI8bmF0aXZlIGZpbGU+IDxuZXcgZmlsZT4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWZkID0gb3Blbihhcmd2WzFdLCBPX1JET05MWSk7CistCWlmIChmZCA8IDApIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgZXJybm8sIDApOworLQkJcmV0dXJuOworLQl9CistCWlmIChmc3RhdChmZCwgJnN0YXRidWYpIDwgMCkgeworLQkJY29tX2Vycihhcmd2WzFdLCBlcnJubywgMCk7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0KKy0JcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgYXJndlsyXSwgJm5ld2ZpbGUpOworLQlpZiAocmV0dmFsID09IDApIHsKKy0JCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBmaWxlICclcycgYWxyZWFkeSBleGlzdHNcbiIsIGFyZ3ZbMl0pOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCistCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKy0JaWYgKHJldHZhbCkgeworKwlpZiAoKHJldHZhbCA9IGRvX3dyaXRlX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgYXJndlsyXSkpKQorIAkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CistCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsyXSwgbmV3ZmlsZSwKKy0JCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCWNsb3NlKGZkKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMl0sIG5ld2ZpbGUsCistCQkJCSAgICAgRVhUMl9GVF9SRUdfRklMRSk7CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2Vycihhcmd2WzJdLCByZXR2YWwsIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworLQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKy0JbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CistCWlub2RlLmlfbW9kZSA9IChzdGF0YnVmLnN0X21vZGUgJiB+TElOVVhfU19JRk1UKSB8IExJTlVYX1NfSUZSRUc7CistCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CistCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworLQlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKy0JaW5vZGUuaV9zaXplID0gc3RhdGJ1Zi5zdF9zaXplOworLQlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCistCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworLQkJaW50IGk7CistCQlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKy0KKy0JCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgJmlub2RlLmlfYmxvY2tbMF07CistCQllaC0+ZWhfZGVwdGggPSAwOworLQkJZWgtPmVoX2VudHJpZXMgPSAwOworLQkJZWgtPmVoX21hZ2ljID0gZXh0MmZzX2NwdV90b19sZTE2KEVYVDNfRVhUX01BR0lDKTsKKy0JCWkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKy0JCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKy0JCWVoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoaSk7CistCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKy0JfQorLQlpZiAoZGVidWdmc193cml0ZV9uZXdfaW5vZGUobmV3ZmlsZSwgJmlub2RlLCBhcmd2WzBdKSkgeworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkpIHsKKy0JCWlmIChzdGF0YnVmLnN0X2Jsb2NrcyA8IHN0YXRidWYuc3Rfc2l6ZSAvIFNfQkxLU0laRSkgeworLQkJCW1ha2VfaG9sZXMgPSAxOworLQkJCS8qCistCQkJICogVXNlIEkvTyBibG9ja3NpemUgYXMgYnVmZmVyIHNpemUgd2hlbgorLQkJCSAqIGNvcHlpbmcgc3BhcnNlIGZpbGVzLgorLQkJCSAqLworLQkJCWJ1ZnNpemUgPSBzdGF0YnVmLnN0X2Jsa3NpemU7CistCQl9CistCQlyZXR2YWwgPSBjb3B5X2ZpbGUoZmQsIG5ld2ZpbGUsIGJ1ZnNpemUsIG1ha2VfaG9sZXMpOworLQkJaWYgKHJldHZhbCkKKy0JCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsIDApOworLQl9CistCWNsb3NlKGZkKTsKKyB9CisgCisgdm9pZCBkb19ta25vZChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAJdW5zaWduZWQgbG9uZwltb2RlLCBtYWpvciwgbWlub3I7CistCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKyAJZXJyY29kZV90IAlyZXR2YWw7CistCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworIAlpbnQJCWZpbGV0eXBlLCBucjsKKysJc3RydWN0IHN0YXQJc3Q7CisgCisgCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorIAkJcmV0dXJuOworQEAgLTE3NjcsMTE1ICsxNTg5LDUwIEBAIHZvaWQgZG9fbWtub2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBta25vZCA8bmFtZT4gW3B8IFtjfGJdIDxtYWpvcj4gPG1pbm9yPl0iKTsKKyAJCXJldHVybjsKKyAJfQorKworIAltb2RlID0gbWlub3IgPSBtYWpvciA9IDA7CisgCXN3aXRjaCAoYXJndlsyXVswXSkgeworIAkJY2FzZSAncCc6CistCQkJbW9kZSA9IExJTlVYX1NfSUZJRk87CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisrCQkJc3Quc3RfbW9kZSA9IFNfSUZJRk87CisgCQkJbnIgPSAzOworIAkJCWJyZWFrOworIAkJY2FzZSAnYyc6CistCQkJbW9kZSA9IExJTlVYX1NfSUZDSFI7CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0NIUkRFVjsKKysJCQlzdC5zdF9tb2RlID0gU19JRkNIUjsKKyAJCQluciA9IDU7CisgCQkJYnJlYWs7CisgCQljYXNlICdiJzoKKy0JCQltb2RlID0gTElOVVhfU19JRkJMSzsKKy0JCQlmaWxldHlwZSA9IEVYVDJfRlRfQkxLREVWOworKwkJCXN0LnN0X21vZGUgPSBTX0lGQkxLOworIAkJCW5yID0gNTsKKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CistCQkJZmlsZXR5cGUgPSAwOworIAkJCW5yID0gMDsKKyAJfQorKworIAlpZiAobnIgPT0gNSkgeworIAkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbM10sIGFyZ3YrMywgMCk7CisgCQltaW5vciA9IHN0cnRvdWwoYXJndls0XSwgYXJndis0LCAwKTsKKyAJCWlmIChtYWpvciA+IDY1NTM1IHx8IG1pbm9yID4gNjU1MzUgfHwgYXJndlszXVswXSB8fCBhcmd2WzRdWzBdKQorIAkJCW5yID0gMDsKKyAJfQorKworIAlpZiAoYXJnYyAhPSBucikKKyAJCWdvdG8gdXNhZ2U7CistCWlmIChjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorLQkJcmV0dXJuOworLQlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CistCWlmIChyZXR2YWwpIHsKKysKKysJc3Quc3RfcmRldiA9IG1ha2VkZXYobWFqb3IsIG1pbm9yKTsKKysJaWYgKChyZXR2YWwgPSBkb19ta25vZF9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sICZzdCkpKQorIAkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CistCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CistCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwgZmlsZXR5cGUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwKKy0JCQkJICAgICBmaWxldHlwZSk7CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2Vycihhcmd2WzFdLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CistICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworLQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKy0JbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CistCWlub2RlLmlfbW9kZSA9IG1vZGU7CistCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CistCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworLQlpZiAoKG1ham9yIDwgMjU2KSAmJiAobWlub3IgPCAyNTYpKSB7CistCQlpbm9kZS5pX2Jsb2NrWzBdID0gbWFqb3IqMjU2K21pbm9yOworLQkJaW5vZGUuaV9ibG9ja1sxXSA9IDA7CistCX0gZWxzZSB7CistCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKy0JCWlub2RlLmlfYmxvY2tbMV0gPSAobWlub3IgJiAweGZmKSB8IChtYWpvciA8PCA4KSB8ICgobWlub3IgJiB+MHhmZikgPDwgMTIpOworLQl9CistCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworLQlpZiAoZGVidWdmc193cml0ZV9uZXdfaW5vZGUobmV3ZmlsZSwgJmlub2RlLCBhcmd2WzBdKSkKKy0JCXJldHVybjsKKyB9CisgCisgdm9pZCBkb19ta2RpcihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKy0JY2hhcgkqY3A7CistCWV4dDJfaW5vX3QJcGFyZW50OworLQljaGFyCSpuYW1lOworIAllcnJjb2RlX3QgcmV0dmFsOworIAorIAlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCAibWtkaXIiLAorIAkJCQkiPGZpbGVuYW1lPiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JY3AgPSBzdHJyY2hyKGFyZ3ZbMV0sICcvJyk7CistCWlmIChjcCkgeworLQkJKmNwID0gMDsKKy0JCXBhcmVudCA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKy0JCWlmICghcGFyZW50KSB7CistCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworLQkJCXJldHVybjsKKy0JCX0KKy0JCW5hbWUgPSBjcCsxOworLQl9IGVsc2UgeworLQkJcGFyZW50ID0gY3dkOworLQkJbmFtZSA9IGFyZ3ZbMV07CistCX0KKy0KKy10cnlfYWdhaW46CistCXJldHZhbCA9IGV4dDJmc19ta2RpcihjdXJyZW50X2ZzLCBwYXJlbnQsIDAsIG5hbWUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCWdvdG8gdHJ5X2FnYWluOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImV4dDJmc19ta2RpciIsIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKysJaWYgKChyZXR2YWwgPSBkb19ta2Rpcl9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIE5VTEwpKSkKKysJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKyAKKyB9CisgCitAQCAtMjI3MCw0NCArMjAyNywxNCBAQCB2b2lkIGRvX3B1bmNoKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgdm9pZCBkb19zeW1saW5rKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworLQljaGFyCQkqY3A7CistCWV4dDJfaW5vX3QJcGFyZW50OworLQljaGFyCQkqbmFtZSwgKnRhcmdldDsKKyAJZXJyY29kZV90CXJldHZhbDsKKyAKKyAJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgMywgInN5bWxpbmsiLAorIAkJCQkiPGZpbGVuYW1lPiA8dGFyZ2V0PiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JY3AgPSBzdHJyY2hyKGFyZ3ZbMV0sICcvJyk7CistCWlmIChjcCkgeworLQkJKmNwID0gMDsKKy0JCXBhcmVudCA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKy0JCWlmICghcGFyZW50KSB7CistCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworLQkJCXJldHVybjsKKy0JCX0KKy0JCW5hbWUgPSBjcCsxOworLQl9IGVsc2UgeworLQkJcGFyZW50ID0gY3dkOworLQkJbmFtZSA9IGFyZ3ZbMV07CistCX0KKy0JdGFyZ2V0ID0gYXJndlsyXTsKKy0KKy10cnlfYWdhaW46CistCXJldHZhbCA9IGV4dDJmc19zeW1saW5rKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSwgdGFyZ2V0KTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50KTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlnb3RvIHRyeV9hZ2FpbjsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJleHQyZnNfc3ltbGluayIsIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKysJaWYgKChyZXR2YWwgPSBkb19zeW1saW5rX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgYXJndlsyXSkpKQorKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworIAorIH0KKyAKK2RpZmYgLS1naXQgYS9kZWJ1Z2ZzL2RlYnVnZnMuaCBiL2RlYnVnZnMvZGVidWdmcy5oCitpbmRleCA2YjRmNmVmLi4yZDQ2NGMxIDEwMDY0NAorLS0tIGEvZGVidWdmcy9kZWJ1Z2ZzLmgKKysrKyBiL2RlYnVnZnMvZGVidWdmcy5oCitAQCAtNSw2ICs1LDcgQEAKKyAjaW5jbHVkZSAic3Mvc3MuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorKyNpbmNsdWRlICIuLi9taXNjL2NyZWF0ZV9pbm9kZS5oIgorIAorICNpZmRlZiBfX1NURENfXworICNkZWZpbmUgTk9BUkdTIHZvaWQKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDJjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA4OWZjYTQzOWYxYjU4NTk1ZjJmNDI0NTk4YTI3ODY5ZjhjN2JkODE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDA0OjQzOjE4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTFdIG1rZTJmcy44LmluOiB1cGRhdGUgdGhlIG1hbnVhbCBmb3IgdGhlIC1kIG9wdGlvbgorCitVcGRhdGUgdGhlIG1hbnVhbCBmb3IgdGhlIC1kIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9ta2UyZnMuOC5pbiB8ICAgIDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLjguaW4gYi9taXNjL21rZTJmcy44LmluCitpbmRleCBmZWE1MGRhLi5iMWNhNDg2IDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuOC5pbgorKysrIGIvbWlzYy9ta2UyZnMuOC5pbgorQEAgLTUyLDYgKzUyLDEwIEBAIG1rZTJmcyBcLSBjcmVhdGUgYW4gZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbQorIC5JIG51bWJlci1vZi1pbm9kZXMKKyBdCisgWworKy5CIFwtZAorKy5JIHJvb3QtZGlyZWN0b3J5CisrXQorK1sKKyAuQiBcLW4KKyBdCisgWworQEAgLTUwMiw2ICs1MDYsOSBAQCB0aGUKKyByYXRpbykuICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBudW1iZXIKKyBvZiBkZXNpcmVkIGlub2RlcyBkaXJlY3RseS4KKyAuVFAKKysuQkkgXC1kICIgcm9vdC1kaXJlY3RvcnkiCisrQWRkIHRoZSBmaWxlcyBmcm9tIHRoZSByb290LWRpcmVjdG9yeSB0byB0aGUgZmlsZXN5c3RlbS4KKysuVFAKKyAuQkkgXC1vICIgY3JlYXRvci1vcyIKKyBPdmVycmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICJjcmVhdG9yIG9wZXJhdGluZyBzeXN0ZW0iIGZpZWxkIG9mIHRoZQorIGZpbGVzeXN0ZW0uICBUaGUgY3JlYXRvciBmaWVsZCBpcyBzZXQgYnkgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiB0aGUgT1MgdGhlCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODAwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzZmZjdmZWI5MDM4ZDZlOGFhZmZlMmU2OWIyMDVhZDVmYTMzZGYyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CitEYXRlOiBNb24sIDE4IEF1ZyAyMDE0IDIxOjAyOjU2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBtdXNsIGJ1aWxkIGZhaWx1cmVzCisKK0luIGxpYi9leHQyZnMvdW5peF9pby5jLCBfX3U2NCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIF9fdWludDY0X3QuIFRoaXMgdHlwZQoraXMgZ3VhcmFudGVlZCBieSB0aGUgZTJmc3Byb2dzIGJ1aWxkIHN5c3RlbS4KKyg3OTVjMDJkZWYzNjgxYTk5Y2M3OTJhNWViYzE2MmQwNmY4YTFlZWI3KQorCitJbiBtaXNjL2NyZWF0ZV9pbm9kZS5jLCA8bGltaXRzLmg+IGlzIG5lZWRlZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgUEFUSF9NQVguCisoYmJjY2M2ZjNjNmExMDY3MjFmYjZmMWVmNGRmNmJjMzJjNzk4NjIzNSkKKworQm90aCBvZiB0aGVzZSBmaXhlcyBoYXZlIGJlZW4gbWFkZSB1cHN0cmVhbSB3aXRoIHRoZSBnaXQgY29tbWl0IElEcyBnaXZlbiBidXQKK3Rob3NlIGFyZSBsYXJnZXIgY29tbWl0cyBjb250YWluaW5nIG90aGVyIGNoYW5nZXMgbm90IG5lZWRlZCBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBsaWIvZXh0MmZzL3VuaXhfaW8uYyB8IDYgKysrLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdW5peF9pby5jIGIvbGliL2V4dDJmcy91bml4X2lvLmMKK2luZGV4IDE5YmU2MzAuLjBjYzBmNTIgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL3VuaXhfaW8uYworKysrIGIvbGliL2V4dDJmcy91bml4X2lvLmMKK0BAIC05MzEsMTAgKzkzMSwxMCBAQCBzdGF0aWMgZXJyY29kZV90IHVuaXhfZGlzY2FyZChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKyAKKyAJaWYgKGNoYW5uZWwtPmZsYWdzICYgQ0hBTk5FTF9GTEFHU19CTE9DS19ERVZJQ0UpIHsKKyAjaWZkZWYgQkxLRElTQ0FSRAorLQkJX191aW50NjRfdCByYW5nZVsyXTsKKysJCV9fdTY0IHJhbmdlWzJdOworIAorLQkJcmFuZ2VbMF0gPSAoX191aW50NjRfdCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKy0JCXJhbmdlWzFdID0gKF9fdWludDY0X3QpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisrCQlyYW5nZVswXSA9IChfX3U2NCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKysJCXJhbmdlWzFdID0gKF9fdTY0KShjb3VudCkgKiBjaGFubmVsLT5ibG9ja19zaXplOworIAorIAkJcmV0ID0gaW9jdGwoZGF0YS0+ZGV2LCBCTEtESVNDQVJELCAmcmFuZ2UpOworICNlbHNlCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDZkOGRlMDQuLmZjZWM1YWEgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMSw0ICsxLDUgQEAKKyAjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTAorICMgaWYgX19HTlVDX18gPj0gMgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIGY2NmU2Y2U0NDQ2NzM4YzJjN2Y0M2Q0MTk4OGEzZWI3MzM0N2UyZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorRGF0ZTogU2F0LCA5IEF1ZyAyMDE0IDEyOjI0OjU0IC0wNDAwCitTdWJqZWN0OiBsaWJleHQyZnM6IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyBpZiBzX2ZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZworCitJZiBzX2ZpcnN0X21ldGFfYmcgaXMgZ3JlYXRlciB0aGFuIHRoZSBvZiBudW1iZXIgYmxvY2sgZ3JvdXAKK2Rlc2NyaXB0b3IgYmxvY2tzLCB0aGVuIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKK3dpbGwgZW5kIHVwIG92ZXJydW5pbmcgdGhlIG1lbW9yeSBidWZmZXIgYWxsb2NhdGVkIGZvciB0aGUKK2Rlc2NyaXB0b3JzLiAgRml4IHRoaXMgYnkgbGltaXRpbmcgZmlyc3RfbWV0YV9iZyB0byBubyBtb3JlIHRoYW4KK2ZzLT5kZXNjX2Jsb2Nrcy4gIFRoaXMgZG9lc24ndCBjb3JyZWN0IHRoZSBiYWQgc19maXJzdF9tZXRhX2JnIHZhbHVlLAorYnV0IGl0IGF2b2lkcyBjYXVzaW5nIHRoZSBlMmZzcHJvZ3MgdXNlcnNwYWNlIHByb2dyYW1zIGZyb20KK3BvdGVudGlhbGx5IGNyYXNoaW5nLgorCitGaXhlcyBDVkUtMjAxNS0wMjQ3CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitTaWduZWQtb2ZmLWJ5OiBTb25hIFNhcm1hZGkgPHNvbmEuc2FybWFkaUBlbmVhLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK2luZGV4IDQ1OTllZWYuLjFmOTkxMTMgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL2Nsb3NlZnMuYworKysrIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK0BAIC0zNDQsOSArMzQ0LDExIEBAIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCisgCSAqIHN1cGVyYmxvY2tzIGFuZCBncm91cCBkZXNjcmlwdG9ycy4KKyAJICovCisgCWdyb3VwX3B0ciA9IChjaGFyICopIGdyb3VwX3NoYWRvdzsKKy0JaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisrCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JZWxzZQorKwkJaWYgKG9sZF9kZXNjX2Jsb2NrcyA+IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKQorKwkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKysJfSBlbHNlCisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisgCisgCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2luaXQoZnMsICZwcm9ncmVzcywgTlVMTCwKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL29wZW5mcy5jIGIvbGliL2V4dDJmcy9vcGVuZnMuYworaW5kZXggYTFhMzUxNy4uYmE1MDFlNiAxMDA2NDQKKy0tLSBhL2xpYi9leHQyZnMvb3BlbmZzLmMKKysrKyBiL2xpYi9leHQyZnMvb3BlbmZzLmMKK0BAIC0zNzgsOSArMzc4LDExIEBAIGVycmNvZGVfdCBleHQyZnNfb3BlbjIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW9fb3B0aW9ucywKKyAjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgCWdyb3Vwc19wZXJfYmxvY2sgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisgI2VuZGlmCistCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJZmlyc3RfbWV0YV9iZyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworLQllbHNlCisrCQlpZiAoZmlyc3RfbWV0YV9iZyA+IGZzLT5kZXNjX2Jsb2NrcykKKysJCQlmaXJzdF9tZXRhX2JnID0gZnMtPmRlc2NfYmxvY2tzOworKwl9IGVsc2UKKyAJCWZpcnN0X21ldGFfYmcgPSBmcy0+ZGVzY19ibG9ja3M7CisgCWlmIChmaXJzdF9tZXRhX2JnKSB7CisgCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgZ3JvdXBfYmxvY2sgKworLS0gCitjZ2l0IHYwLjEwLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwxMzUgQEAKKyMgRXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncyBzaGlwcGVkIGFjbG9jYWwubTQuIEN1c3RvbSBtYWNyb3Mgc2hvdWxkIGJlIGluCisjIGFjaW5jbHVkZS5tNCBzbyBydW5uaW5nIGFjbG9jYWwgZG9lc24ndCBibG93IHRoZW0gYXdheS4KKyMKKyMgU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworIyBmcm9tIGh0dHA6Ly9hdXRvY29uZi1hcmNoaXZlLmNyeXAudG8vYXhfdGxzLmh0bWwKKyMKKyMgVGhpcyB3YXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgcmVzcGVjdGl2ZSBBdXRvY29uZiBNYWNybydzIGNvcHlyaWdodAorIyBvd25lciBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nCisjIHRoZSBNYWNyby4gWW91IG5lZWQgbm90IGZvbGxvdyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIHdoZW4gdXNpbmcgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2gKKyMgcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4gYWxsIG90aGVyIHVzZSBvZiB0aGUgbWF0ZXJpYWwgdGhhdAorIyBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgTWFjcm8uCisjCisjIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorIyBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgTWFjcm8gQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZQorIyBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5CisjIGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZAorIyB2ZXJzaW9uIGFzIHdlbGwuCisjCitBQ19ERUZVTihbQVhfVExTXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIGNsYXNzKQorICBBQ19DQUNIRV9WQUwoYWNfY3ZfdGxzLCBbCisgICAgYXhfdGxzX2tleXdvcmRzPSJfX3RocmVhZCBfX2RlY2xzcGVjKHRocmVhZCkgbm9uZSIKKyAgICBmb3IgYXhfdGxzX2tleXdvcmQgaW4gJGF4X3Rsc19rZXl3b3JkczsgZG8KKyAgICAgICBjYXNlICRheF90bHNfa2V5d29yZCBpbgorICAgICAgICAgIG5vbmUpIGFjX2N2X3Rscz1ub25lIDsgYnJlYWsgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKAorICAgICAgICAgICAgICAgIFsjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgICAgICAgICAgIGZvbyh2b2lkKSB7CisgICAgICAgICAgICAgICAgIHN0YXRpYyBdICRheF90bHNfa2V5d29yZCBbIGludCBiYXI7CisgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgW2FjX2N2X3Rscz0kYXhfdGxzX2tleXdvcmQgOyBicmVha10sCisgICAgICAgICAgICAgICAgIGFjX2N2X3Rscz1ub25lCisgICAgICAgICAgICAgKQorICAgICAgICAgIGVzYWMKKyAgICBkb25lCitdKQorCisgIGlmIHRlc3QgIiRhY19jdl90bHMiICE9ICJub25lIjsgdGhlbgorICAgIGRubCBBQ19ERUZJTkUoW1RMU10sIFtdLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtUTFNdLCAkYWNfY3ZfdGxzLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgIGZpCisgIEFDX01TR19SRVNVTFQoJGFjX2N2X3RscykKK10pCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgICAgaHR0cDovL3d3dy5ub25nbnUub3JnL2F1dG9jb25mLWFyY2hpdmUvY2hlY2tfZ251X21ha2UuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBDSEVDS19HTlVfTUFLRSgpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBzZWFyY2hlcyBmb3IgYSBHTlUgdmVyc2lvbiBvZiBtYWtlLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUKKyMgICBtYWtlZmlsZSB2YXJpYWJsZSBgaWZHTlVtYWtlJyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgb3RoZXJ3aXNlIGl0CisjICAgaXMgc2V0IHRvICIjIi4gVGhpcyBpcyB1c2VmdWwgZm9yIGluY2x1ZGluZyBhIHNwZWNpYWwgZmVhdHVyZXMgaW4gYQorIyAgIE1ha2VmaWxlLCB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSBvdGhlciB2ZXJzaW9ucyBvZiBtYWtlLiBUaGUKKyMgICB2YXJpYWJsZSBfY3ZfZ251X21ha2VfY29tbWFuZCBpcyBzZXQgdG8gdGhlIGNvbW1hbmQgdG8gaW52b2tlIEdOVSBtYWtlCisjICAgaWYgaXQgZXhpc3RzLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyMKKyMgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZToKKyMKKyMgICBNYWtlZmlsZS5pbiBtaWdodCBjb250YWluOgorIworIyAgICAgICAjIEEgZmFpbHNhZmUgd2F5IG9mIHB1dHRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgaW50byBhIG1ha2VmaWxlCisjICAgICAgICQoREVQRU5EKToKKyMgICAgICAgICAgICAgICAkKENDKSAtTU0gJChzcmNkaXIpLyouYyA+ICQoREVQRU5EKQorIworIyAgICAgICBAaWZHTlVtYWtlQCBpZmVxICgkKERFUEVORCksJCh3aWxkY2FyZCAkKERFUEVORCkpKQorIyAgICAgICBAaWZHTlVtYWtlQCBpbmNsdWRlICQoREVQRU5EKQorIyAgICAgICBAaWZHTlVtYWtlQCBlbmRpZgorIworIyAgIFRoZW4gY29uZmlndXJlLmluIHdvdWxkIG5vcm1hbGx5IGNvbnRhaW46CisjCisjICAgICAgIENIRUNLX0dOVV9NQUtFKCkKKyMgICAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorIworIyAgIFRoZW4gcGVyaGFwcyB0byBjYXVzZSBnbnUgbWFrZSB0byBvdmVycmlkZSBhbnkgb3RoZXIgbWFrZSwgd2UgY291bGQgZG8KKyMgICBzb21ldGhpbmcgbGlrZSB0aGlzIChub3RlIHRoYXQgR05VIG1ha2UgYWx3YXlzIGxvb2tzIGZvciBHTlVtYWtlZmlsZQorIyAgIGZpcnN0KToKKyMKKyMgICAgICAgaWYgICEgdGVzdCB4JF9jdl9nbnVfbWFrZV9jb21tYW5kID0geCA7IHRoZW4KKyMgICAgICAgICAgICAgICBtdiBNYWtlZmlsZSBHTlVtYWtlZmlsZQorIyAgICAgICAgICAgICAgIGVjaG8gLkRFRkFVTFQ6ID4gTWFrZWZpbGUgOworIyAgICAgICAgICAgICAgIGVjaG8gXCAgJF9jdl9nbnVfbWFrZV9jb21tYW5kIFwkQCA+PiBNYWtlZmlsZTsKKyMgICAgICAgZmkKKyMKKyMgICBUaGVuLCBpZiBhbnkgKHdlbGwgYWxtb3N0IGFueSkgb3RoZXIgbWFrZSBpcyBjYWxsZWQsIGFuZCBHTlUgbWFrZSBhbHNvCisjICAgZXhpc3RzLCB0aGVuIHRoZSBvdGhlciBtYWtlIHdyYXBzIHRoZSBHTlUgbWFrZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBKb2huIERhcnJpbmd0b24gPGouZGFycmluZ3RvbkBlbHZpcy5tdXJkb2NoLmVkdS5hdT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KKyMKKyMgTm90ZTogTW9kaWZpZWQgYnkgVGVkIFRzJ28gdG8gYWRkIEBpZk5vdEdOVU1ha2VACisKK0FDX0RFRlVOKAorICAgICAgICBbQ0hFQ0tfR05VX01BS0VdLCBbIEFDX0NBQ0hFX0NIRUNLKCBmb3IgR05VIG1ha2UsX2N2X2dudV9tYWtlX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JycgOworZG5sIFNlYXJjaCBhbGwgdGhlIGNvbW1vbiBuYW1lcyBmb3IgR05VIG1ha2UKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiAiJE1BS0UiIG1ha2UgZ21ha2UgZ251bWFrZSA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYSIgOyB0aGVuIGNvbnRpbnVlIDsgZmkgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgICggc2ggLWMgIiRhIC0tdmVyc2lvbiIgMj4gL2Rldi9udWxsIHwgZ3JlcCBHTlUgIDI+JjEgPiAvZGV2L251bGwgKSA7ICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPSRhIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUgOworICAgICAgICApIDsKK2RubCBJZiB0aGVyZSB3YXMgYSBHTlUgdmVyc2lvbiwgdGhlbiBzZXQgQGlmR05VbWFrZUAgdG8gdGhlIGVtcHR5IHN0cmluZywgJyMnIG90aGVyd2lzZQorICAgICAgICBpZiB0ZXN0ICAieCRfY3ZfZ251X21ha2VfY29tbWFuZCIgIT0gIngiICA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nIycgOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScjJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCJOb3QgZm91bmQiKTsKKyAgICAgICAgZmkKKyAgICAgICAgQUNfU1VCU1QoaWZHTlVtYWtlKQorICAgICAgICBBQ19TVUJTVChpZk5vdEdOVW1ha2UpCitdICkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvY2FjaGVfaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1RoZSBjb21tZW50IHRvIHRoaXMgZnVuY3Rpb24gc2F5czoKKworIiIiCisgICogU3R1cGlkIGFsZ29yaXRobSAtLS0gd2Ugbm93IGp1c3Qgc2VhcmNoIGZvcndhcmQgc3RhcnRpbmcgZnJvbSB0aGUKKyAgKiBnb2FsLiAgU2hvdWxkIHB1dCBpbiBhIHNtYXJ0ZXIgb25lIHNvbWVkYXkuLi4uCisiIiIKKworVGhpcyBhZGRzIGluIGEgcmF0aGVyIGhhY2t5IGFsZ29ydGhpbSB3aGljaCBzdGFydHMgd2hlcmUgd2UgZmluaXNoZWQKK3NlYXJjaGluZyBwcmV2aW91c2x5IHVzaW5nIGEgc3RhdGljIHZhcmlhYmxlIHJhdGhlciB0aGFuIHN0YXJ0aW5nIAorZnJvbSBzY3JhdGNoIGlmIGEgaGludCBpc24ndCBwcm92aWRlZC4KKworVGhpcyB3YXMgYWZ0ZXIgbm90aWNpbmcgdGhhdCBta2ZzLmV4dDQgLUYgWCAtZCBZIHdhcyBzcGVuZGluZyAqbG90cyoKK29mIHRpbWUgaW4gZXh0MmZzX25ld19ibG9jazIgY2FsbGVkIGZyb20gZXh0MmZzX2JtYXAgZnJvbSBleHQyZnNfZmlsZV93cml0ZSgpLgorCitOdW1iZXJzIHdpc2UsIHRoaXMgdG9vayBhIGNvcmUtaW1hZ2Utc2F0by1zZGsgbWtmcyB0aW1lIGZyb20gb3ZlciAKKzggbWludXRlcyB0byBhcm91bmQgMzUgc2Vjb25kcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTUvMDIvMjAKKworSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvbGliL2V4dDJmcy9hbGxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDIuOS5vcmlnL2xpYi9leHQyZnMvYWxsb2MuYworKysrIGUyZnNwcm9ncy0xLjQyLjkvbGliL2V4dDJmcy9hbGxvYy5jCitAQCAtMTYwLDYgKzE2MCw4IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2lub2RlKGV4dDJfZmlsc3lzIGYKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBibGs2NF90IGxhc3RfZ29hbCA9IDA7CisrCisgLyoKKyAgKiBTdHVwaWQgYWxnb3JpdGhtIC0tLSB3ZSBub3cganVzdCBzZWFyY2ggZm9yd2FyZCBzdGFydGluZyBmcm9tIHRoZQorICAqIGdvYWwuICBTaG91bGQgcHV0IGluIGEgc21hcnRlciBvbmUgc29tZWRheS4uLi4KK0BAIC0xNzAsNiArMTcyLDkgQEAgZXJyY29kZV90IGV4dDJmc19uZXdfYmxvY2syKGV4dDJfZmlsc3lzCisgCWJsazY0X3QJaTsKKyAJaW50CWNfcmF0aW87CisgCisrICAgICAgICBpZiAoIWdvYWwpCisrICAgICAgICAgICAgZ29hbCA9IGxhc3RfZ29hbDsKKysKKyAJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKyAKKyAJaWYgKCFtYXApCitAQCAtMTk0LDYgKzE5OSw3IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cworIAorIAkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIobWFwLCBpKSkgeworIAkJCSpyZXQgPSBpOworKwkJCWxhc3RfZ29hbCA9IGk7CisgCQkJcmV0dXJuIDA7CisgCQl9CisgCQlpID0gKGkgKyBjX3JhdGlvKSAmIH4oY19yYXRpbyAtIDEpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4Y2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAoraW5vZGUuYzogb25seSB1cGRhdGUgdGhlIGljYWNoZSBmb3IgZXh0Ml9pbm9kZQorCitXZSBvbmx5IHJlYWQgdGhlIGNhY2hlIHdoZW46CisKK2J1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKQorCit0aGVuIHdlIHNob3VsZCBvbmx5IHVwZGF0ZSB0aGUgY2FjaGUgaW4gdGhlIHNhbWUgY29uZGl0aW9uLCBvdGhlcndpc2UKK3RoZXJlIHdvdWxkIGJlIGVycm9ycywgZm9yIGV4YW1wbGU6CisKK2NhY2hlWzBdOiBjYWNoZWQgaW5vIDE0IHdoZW4gYnVmc2l6ZSA9IDEyOCBieSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbCgpCitjYWNoZVsxXTogY2FjaGVkIGlubyAxNCB3aGVuIGJ1ZnNpemUgPSAxNTYgYnkgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCgpCisKK1RoZW4gdXBkYXRlIHRoZSBjYWNoZToKK2NhY2hlWzBdOiBjYWNoZWQgaW5vIDE1IHdoZW4gYnVmc2l6ZSA9IDE1NiBieSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkKKworVGhlbiB0aGUgaW5vIDE0IHdvdWxkIGhpdCB0aGUgY2FjaGVbMV0gd2hlbiBidWZzaXplID0gMTI4IChidXQgaXQgd2FzCitjYWNoZWQgYnkgYnVmc2l6ZSA9IDE1NiksIHNvIHRoZXJlIHdvdWxkIGJlIGVycm9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvZXh0MmZzL2lub2RlLmMgfCAyMCArKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9pbm9kZS5jIGIvbGliL2V4dDJmcy9pbm9kZS5jCistLS0gYS9saWIvZXh0MmZzL2lub2RlLmMKKysrKyBiL2xpYi9leHQyZnMvaW5vZGUuYworQEAgLTYxMiwxMCArNjEyLDEyIEBAIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKyAjZW5kaWYKKyAKKyAJLyogVXBkYXRlIHRoZSBpbm9kZSBjYWNoZSAqLworLQlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCistCQlmcy0+aWNhY2hlLT5jYWNoZV9zaXplOworLQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm8gPSBpbm87CistCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworKwlpZiAoYnVmc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSB7CisrCQlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCisrCQkJZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsKKysJCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlubyA9IGlubzsKKysJCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworKwl9CisgCisgCXJldHVybiAwOworIH0KK0BAIC02NDgsMTAgKzY1MCwxMiBAQCBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorIAorIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGlub2RlIGNhY2hlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgKi8KKyAJaWYgKGZzLT5pY2FjaGUpIHsKKy0JCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CistCQkJaWYgKGZzLT5pY2FjaGUtPmNhY2hlW2ldLmlubyA9PSBpbm8pIHsKKy0JCQkJZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vZGUgPSAqaW5vZGU7CistCQkJCWJyZWFrOworKwkJaWYgKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworKwkJCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CisrCQkJCWlmIChmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPT0gaW5vKSB7CisrCQkJCQlmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm9kZSA9ICppbm9kZTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisgCQkJfQorIAkJfQorIAl9IGVsc2UgeworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWlzYy1ta2UyZnMuYy1yZXR1cm4tZXJyb3Itd2hlbi1mYWlsZWQtdG8tcG9wdWxhdGUtZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMGNlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gZTRmZmQ2ZmU5NzU4ODhkMzA2YjVmNzAwYmE1NGFmMThiNTlmNjc1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyMCBNYXIgMjAxNCAxMToxMDoyMSArMDgwMAorU3ViamVjdDogW1BBVENIXSBtaXNjL21rZTJmcy5jOiByZXR1cm4gZXJyb3Igd2hlbiBmYWlsZWQgdG8gcG9wdWxhdGUgZmlsZXN5c3RlbQorCitXZSBuZWVkIHJldHVybiByZXR2YWwgd2hlbiAibWtlMmZzIC1kIiBmYWlsZWQsIG90aGVyd2lzZSB0aGUgIiQ/IiB3b3VsZAorYmUgMCB3aGljaCBpcyBtaXNsZWFkaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1pc2MvbWtlMmZzLmMgfCA3ICsrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IGE2M2YwYjcuLjg0NjE5MGUgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjc0NSwxMCArMjc0NSwxMSBAQCBub19qb3VybmFsOgorIAkJY3VycmVudF9mcyA9IGZzOworIAkJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisgCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhyb290LCByb290X2Rpcik7CistCQlpZiAocmV0dmFsKQorKwkJaWYgKHJldHZhbCkgeworIAkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorLQkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW0iKSk7CistCQllbHNlIGlmICghcXVpZXQpCisrCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbVxuIikpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9IGVsc2UgaWYgKCFxdWlldCkKKyAJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworIAl9CisgCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdhMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KKworSW5kZXg6IGUyZnNwcm9ncy0xLjQxLjUvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40MS41Lm9yaWcvcG8vTWFrZWZpbGUuaW4uaW4JMjAwOS0wMi0xNCAxMzo0OTowOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlMmZzcHJvZ3MtMS40MS41L3BvL01ha2VmaWxlLmluLmluCTIwMDktMDgtMTkgMTc6NTI6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtMzAsNyArMzAsNyBAQAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIE1LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKKy1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJChNS0lOU1RBTExESVJTKQorK21raW5zdGFsbGRpcnMgPSAkKE1LSU5TVEFMTERJUlMpCisgCisgR01TR0ZNVCA9IEBHTVNHRk1UQAorIE1TR0ZNVCA9IEBNU0dGTVRACitJbmRleDogZTJmc3Byb2dzLTEuNDEuNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40MS41Lm9yaWcvY29uZmlndXJlLmluCTIwMDktMDgtMTkgMTc6NTM6NTAuMDAwMDAwMDAwICswMTAwCisrKysgZTJmc3Byb2dzLTEuNDEuNS9jb25maWd1cmUuaW4JMjAwOS0wOC0xOSAxNzo0ODozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NzAsNiArOTcwLDggQEAKKyBmaQorIEFDX1NVQlNUKEJVSUxEX0NGTEFHUykKKyBBQ19TVUJTVChCVUlMRF9MREZMQUdTKQorK01LSU5TVEFMTERJUlM9Im1rZGlyIC1wIgorK0FDX1NVQlNUKE1LSU5TVEFMTERJUlMpCisgZG5sCisgZG5sIE1ha2Ugb3VyIG91dHB1dCBmaWxlcywgYmVpbmcgc3VyZSB0aGF0IHdlIGNyZWF0ZSB0aGUgc29tZSBtaXNjZWxsYW5lb3VzIAorIGRubCBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE1M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40Mi45Lm9yaWcvdGVzdHMvTWFrZWZpbGUuaW4KKysrKyBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL01ha2VmaWxlLmluCitAQCAtMTgsNyArMTgsNyBAQCB0ZXN0X29uZTogJChzcmNkaXIpL3Rlc3Rfb25lLmluIE1ha2VmaWxlCisgCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9vbmUKKyBASFRSRUVfQ01UQAlAZWNobyAiSFRSRUU9eSIgPj4gdGVzdF9vbmUKKyBAUVVPVEFfQ01UQAlAZWNobyAiUVVPVEE9eSIgPj4gdGVzdF9vbmUKKy0JQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9vbmUKKysJQGVjaG8gIlNSQ0RJUj0vdXNyL2xpYi9lMmZzcHJvZ3MvcHRlc3QvdGVzdCIgPj4gdGVzdF9vbmUKKyAJQGVjaG8gIkRJRkZfT1BUUz1AVU5JX0RJRkZfT1BUU0AiID4+IHRlc3Rfb25lCisgCUBjYXQgJChzcmNkaXIpL3Rlc3Rfb25lLmluID4+IHRlc3Rfb25lCisgCUBjaG1vZCAreCB0ZXN0X29uZQorQEAgLTI2LDcgKzI2LDcgQEAgdGVzdF9vbmU6ICQoc3JjZGlyKS90ZXN0X29uZS5pbiBNYWtlZmlsZQorIHRlc3Rfc2NyaXB0OiB0ZXN0X29uZSB0ZXN0X3NjcmlwdC5pbiBNYWtlZmlsZSBta2UyZnMuY29uZgorIAlAZWNobyAiQ3JlYXRpbmcgdGVzdF9zY3JpcHQuLi4iCisgCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9zY3JpcHQKKy0JQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9zY3JpcHQKKysJQGVjaG8gIlNSQ0RJUj0vdXNyL2xpYi9lMmZzcHJvZ3MvcHRlc3QvdGVzdCIgPj4gdGVzdF9zY3JpcHQKKyAJQGNhdCAkKHNyY2RpcikvdGVzdF9zY3JpcHQuaW4gPj4gdGVzdF9zY3JpcHQKKyAJQGNobW9kICt4IHRlc3Rfc2NyaXB0CisgCitJbmRleDogZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy90ZXN0X2NvbmZpZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQyLjkub3JpZy90ZXN0cy90ZXN0X2NvbmZpZworKysrIGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvdGVzdF9jb25maWcKK0BAIC0zLDIzICszLDIzIEBACisgIworIAorIHVuc2V0IExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgTENfVEVMRVBIT05FIExDX1RJTUUgUEFHRVIKKy1GU0NLPSIkVVNFX1ZBTEdSSU5EIC4uL2UyZnNjay9lMmZzY2siCistTUtFMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvbWtlMmZzIgorLURVTVBFMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvZHVtcGUyZnMiCistVFVORTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL3R1bmUyZnMiCistQ0hBVFRSPSIkVVNFX1ZBTEdSSU5ELi4vbWlzYy9jaGF0dHIiCistTFNBVFRSPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvbHNhdHRyIgorLUUySU1BR0U9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9lMmltYWdlIgorLUUySU1BR0VfRVhFPSIuLi9taXNjL2UyaW1hZ2UiCistREVCVUdGUz0iJFVTRV9WQUxHUklORCAuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistREVCVUdGU19FWEU9Ii4uL2RlYnVnZnMvZGVidWdmcyIKKy1URVNUX0JJVFM9Ii4uL2RlYnVnZnMvZGVidWdmcyIKKy1SRVNJWkUyRlNfRVhFPSIuLi9yZXNpemUvcmVzaXplMmZzIgorK0ZTQ0s9IiRVU0VfVkFMR1JJTkQgZTJmc2NrIgorK01LRTJGUz0iJFVTRV9WQUxHUklORCBta2UyZnMiCisrRFVNUEUyRlM9IiRVU0VfVkFMR1JJTkQgZHVtcGUyZnMiCisrVFVORTJGUz0iJFVTRV9WQUxHUklORCB0dW5lMmZzIgorK0NIQVRUUj0iJFVTRV9WQUxHUklORCBjaGF0dHIiCisrTFNBVFRSPSIkVVNFX1ZBTEdSSU5EIGxzYXR0ciIKKytFMklNQUdFPSIkVVNFX1ZBTEdSSU5EIGUyaW1hZ2UiCisrRTJJTUFHRV9FWEU9Ii9zYmluL2UyaW1hZ2UiCisrREVCVUdGUz0iJFVTRV9WQUxHUklORCBkZWJ1Z2ZzIgorK0RFQlVHRlNfRVhFPSIvc2Jpbi9kZWJ1Z2ZzIgorK1RFU1RfQklUUz0iL3NiaW4vZGVidWdmcyIKKytSRVNJWkUyRlNfRVhFPSIvc2Jpbi9yZXNpemUyZnMiCisgUkVTSVpFMkZTPSIkVVNFX1ZBTEdSSU5EICRSRVNJWkUyRlNfRVhFIgorLUUyVU5ET19FWEU9Ii4uL21pc2MvZTJ1bmRvIgorLVRFU1RfUkVMPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsCistVEVTVF9JQ09VTlQ9Li4vdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQKKy1DUkNTVU09Li4vdGVzdHMvcHJvZ3MvY3Jjc3VtCisrRTJVTkRPX0VYRT0iL3NiaW4vZTJ1bmRvIgorK1RFU1RfUkVMPS4vcHJvZ3MvdGVzdF9yZWwKKytURVNUX0lDT1VOVD0uL3Byb2dzL3Rlc3RfaWNvdW50CisrQ1JDU1VNPS4vcHJvZ3MvY3Jjc3VtCisgTERfTElCUkFSWV9QQVRIPS4uL2xpYjouLi9saWIvZXh0MmZzOi4uL2xpYi9lMnA6Li4vbGliL2V0Oi4uL2xpYi9zcworIERZTERfTElCUkFSWV9QQVRIPS4uL2xpYjouLi9saWIvZXh0MmZzOi4uL2xpYi9lMnA6Li4vbGliL2V0Oi4uL2xpYi9zcworIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gZXhlY3V0aW5nIGEgc2NyaXB0IGRvbid0IGVjaG8gZXZlcnkgY29tbWFuZCwgYXMgd2UgZG8gdGhpcyBmb3IgZW50aXJlCitmaWxlc3lzdGVtcyBhdCByb290ZnMgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworaW5kZXggNTU5MDI5NS4uYWM1NzI5MiAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5jCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworQEAgLTIzNzgsNyArMjM3OCw3IEBAIHN0YXRpYyBpbnQgc291cmNlX2ZpbGUoY29uc3QgY2hhciAqY21kX2ZpbGUsIGludCBzc19pZHgpCisgCQljcCA9IHN0cmNocihidWYsICdccicpOworIAkJaWYgKGNwKQorIAkJCSpjcCA9IDA7CistCQlwcmludGYoImRlYnVnZnM6ICVzXG4iLCBidWYpOworKwkJLypwcmludGYoImRlYnVnZnM6ICVzXG4iLCBidWYpOyovCisgCQlyZXR2YWwgPSBzc19leGVjdXRlX2xpbmUoc3NfaWR4LCBidWYpOworIAkJaWYgKHJldHZhbCkgeworIAkJCXNzX3BlcnJvcihzc19pZHgsIHJldHZhbCwgYnVmKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNmViNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjEzOWUwM2FjMmY3MmU2NDRlNTQ3YzdlZTliMTUxNDM4M2FmNGQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMzAgSmFuIDIwMTMgMTU6MjI6MDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZQorIHRoZW4gaXQgY3JlYXRlcyBpbnZhbGlkIGNhY2hlIChpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbworIGNhbm5vdCBiZSBmb3VuZCBhZnRlciBidWlsZGluZyB6bGliKC1uYXRpdmUpIGFuZCBJIGhhdmUgdG8KKyBjYWxsIHRvdWNoICovbGlic3RkYysrLnNvICYmIC9zYmluL2xkY29uZmlnIHRvIGZpeCBpdC4KKworU28gcmVtb3ZlIGxkY29uZmlnIGNhbGwgZnJvbSBtYWtlIGluc3RhbGwtbGlicworCitQYXRjaCBhdXRob3JlZCBieSBNYXJ0aW4gSmFuc2EuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZS5lbGYtbGliIHwgICAgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5lbGYtbGliIGIvbGliL01ha2VmaWxlLmVsZi1saWIKK2luZGV4IDc4NDc5ZDMuLjRhNGE1YWMgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUuZWxmLWxpYgorKysrIGIvbGliL01ha2VmaWxlLmVsZi1saWIKK0BAIC01MCw4ICs1MCw2IEBAIGluc3RhbGwtc2hsaWJzIGluc3RhbGw6OiAkKEVMRl9MSUIpIGluc3RhbGxkaXJzLWVsZi1saWIgJChERVBfSU5TVEFMTF9TWU1MSU5LKQorIAkkKEUpICIJU1lNTElOSyAkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvIgorIAkkKFEpICQoSU5TVEFMTF9TWU1MSU5LKSAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisgCQkkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvICQoREVTVERJUikKKy0JJChFKSAiCUxEQ09ORklHIgorLQkkKFEpIC0kKExEQ09ORklHKQorIAorIGluc3RhbGwtc3RyaXA6IGluc3RhbGwKKyAJJChFKSAiCVNUUklQLUxJQiAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSIKK0BAIC02Nyw3ICs2NSw2IEBAIHVuaW5zdGFsbC1zaGxpYnMgdW5pbnN0YWxsOjoKKyAJJChSTSkgLWYgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKyAJCSQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisgCQkkKERFU1RESVIpJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbworLQktJChMRENPTkZJRykKKyAKKyBjbGVhbjo6CisgCSQoUk0pIC1yZiBlbGZzaGFyZWQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMjUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3J1bi1wdGVzdApAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKworY2QgLi90ZXN0CisuL3Rlc3Rfc2NyaXB0ICY+Li4vdGVzdC5sb2cKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IGUyZnNwcm9ncyIKKwlybSB0ZXN0LmxvZworZWxzZQorCWVjaG8gIkZBSUw6IGUyZnNwcm9ncyIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlMjljOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDIuOS5iYgpAQCAtMCwwICsxLDExNiBAQAorcmVxdWlyZSBlMmZzcHJvZ3MuaW5jCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlVwZGF0aW5nIGJhY2twb3J0ZWQgcGF0Y2hlcyB0byAxLjQyLjEzIGlzIHRvbyBtdWNoIHBhaW4uIExldCdzIHdhaXQgdW50aWwgMS40MyBpcyByZWxlYXNlZC4iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtaWNhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9xdWlldC1kZWJ1Z2ZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zeW1saW5rLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTEtbWtlMmZzLjguaW4tdXBkYXRlLXRoZS1tYW51YWwtZm9yLXRoZS1kLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMi1GaXgtbXVzbC1idWlsZC1mYWlsdXJlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jYWNoZV9pbm9kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtMDI0Ny5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZjhlNDFlNjNiNDMyYmExMTRiMzNmNTg2NzQ1NjNmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjkyYWMwNmU5MmZhMDBmMmFkYTNlZTY3ZGFkMDEyZDc0ZDY4NTUzNzUyN2FkMTI0MWQ4MmYyZDA0MWYyODAyIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gLS1lbmFibGUtZWxmLXNobGlicyAtLWRpc2FibGUtbGlidXVpZCAtLWRpc2FibGUtdXVpZGQgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyIKK0VYVFJBX09FQ09ORl9kYXJ3aW4gPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1ic2Qtc2hsaWJzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWxpYnMKKwkjIFdlIHVzZSBibGtpZCBmcm9tIHV0aWwtbGludXggbm93IHNvIHJlbW92ZSBmcm9tIGhlcmUKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vbGliYmxraWQqCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vYmxraWQKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZzY2sKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZpbmRmcworCisJIyBlMmluaXRyZF9oZWxwZXIgYW5kIHRoZSBwa2djb25maWcgZmlsZXMgYmVsb25nIGluIGxpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L2UyaW5pdHJkX2hlbHBlciAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZXh0MmZzL2V4dDJfdHlwZXMuaAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9jaGF0dHIgJHtEfSR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MKKworCWluc3RhbGwgLXYgLW0gNzU1ICR7U30vY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaCAke0R9JHtiYXNlX3NiaW5kaXJ9LworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJIyBDbGVhbiBob3N0IHBhdGggaW4gY29tcGlsZV9ldCwgbWtfY21kcworCXNlZCAtaSAtZSAicyxFVF9ESVI9XCIke1N9L2xpYi9ldFwiLEVUX0RJUj1cIiR7ZGF0YWRpcn0vZXRcIixnIiAke0R9JHtiaW5kaXJ9L2NvbXBpbGVfZXQKKwlzZWQgLWkgLWUgInMsU1NfRElSPVwiJHtTfS9saWIvc3NcIixTU19ESVI9XCIke2RhdGFkaXJ9L3NzXCIsZyIgJHtEfSR7YmluZGlyfS9ta19jbWRzCit9CisKK1JERVBFTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtYmFkYmxvY2tzIgorUlJFQ09NTUVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLWUyZnNjayIKKworUEFDS0FHRVMgPSsgImUyZnNwcm9ncy1lMmZzY2sgZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtdHVuZTJmcyBlMmZzcHJvZ3MtYmFkYmxvY2tzIGUyZnNwcm9ncy1yZXNpemUyZnMiCitQQUNLQUdFUyA9KyAibGliY29tZXJyIGxpYnNzIGxpYmUycCBsaWJleHQyZnMiCisKK0ZJTEVTX2UyZnNwcm9ncy1yZXNpemUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3Jlc2l6ZTJmcyoiCitGSUxFU19lMmZzcHJvZ3MtZTJmc2NrID0gIiR7YmFzZV9zYmluZGlyfS9lMmZzY2sgJHtiYXNlX3NiaW5kaXJ9L2ZzY2suZXh0KiIKK0ZJTEVTX2UyZnNwcm9ncy1ta2UyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L21rZTJmcyAke2Jhc2Vfc2JpbmRpcn0vbWtmcy5leHQqICR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYiCitGSUxFU19lMmZzcHJvZ3MtdHVuZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vdHVuZTJmcyAke2Jhc2Vfc2JpbmRpcn0vZTJsYWJlbCIKK0ZJTEVTX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiJHtiYXNlX3NiaW5kaXJ9L2JhZGJsb2NrcyIKK0ZJTEVTX2xpYmNvbWVyciA9ICIke2Jhc2VfbGliZGlyfS9saWJjb21fZXJyLnNvLioiCitGSUxFU19saWJzcyA9ICIke2Jhc2VfbGliZGlyfS9saWJzcy5zby4qIgorRklMRVNfbGliZTJwID0gIiR7YmFzZV9saWJkaXJ9L2xpYmUycC5zby4qIgorRklMRVNfbGliZXh0MmZzID0gIiR7bGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtiYXNlX2xpYmRpcn0vbGliZXh0MmZzLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vKi8qLmF3ayAke2RhdGFkaXJ9LyovKi5zZWQgJHtiYXNlX2xpYmRpcn0vKi5zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiY2hhdHRyIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyIgorQUxURVJOQVRJVkVfVEFSR0VUW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncyIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImxpYmJsa2lkLjMgYmxraWQuOCBmaW5kZnMuOCBmc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGliYmxraWQuM10gPSAiJHttYW5kaXJ9L21hbjMvbGliYmxraWQuMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZC44XSA9ICIke21hbmRpcn0vbWFuOC9ibGtpZC44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZpbmRmcy44XSA9ICIke21hbmRpcn0vbWFuOC9maW5kZnMuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZzY2suOCIKKworaW5oZXJpdCBwdGVzdAorU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9wdGVzdC5wYXRjaCIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59ICR7UE59LXR1bmUyZnMgY29yZXV0aWxzIHByb2NwcyIKKyNSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZXhwZWN0IgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtCfS90ZXN0cworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1hICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNwIC1hICR7U30vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJc2VkIC1lICdzIS4uL2UyZnNjay9lMmZzY2shZTJmc2NrIWcnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvKi9leHBlY3QqCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9hcm1fYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQ2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDQ0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX2luaXQuYwkyMDA5LTA0LTIxIDE0OjUwOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9pbml0LmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMiwyMSArMzIsMzIgQEAKKyAjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX0FSTV8KKyAjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorIAorKyNpbmNsdWRlICJsaWJlYmxfYXJtLmgiCisrCisgLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gYXJtX3JlbG9jLmRlZi4gICovCisgI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorIAorIAorIGNvbnN0IGNoYXIgKgorIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKy0gICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVsZiAqZWxmOworICAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgICAgRWJsICplaDsKKyAgICAgIHNpemVfdCBlaGxlbjsKKyB7CisrICBpbnQgc29mdF9mbG9hdCA9IDA7CisrCisgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKyAgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKQorKyAgICAgIHNvZnRfZmxvYXQgPSAxOworKyAgfQorKworICAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKyAgIGVoLT5uYW1lID0gIkFSTSI7CisgICBhcm1faW5pdF9yZWxvYyAoZWgpOworQEAgLTU4LDcgKzY5LDEwIEBACisgICBIT09LIChlaCwgY29yZV9ub3RlKTsKKyAgIEhPT0sgKGVoLCBhdXh2X2luZm8pOworICAgSE9PSyAoZWgsIGNoZWNrX29iamVjdF9hdHRyaWJ1dGUpOworLSAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBpZiAoc29mdF9mbG9hdCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAKKyAgIHJldHVybiBNT0RWRVJTSU9OOworIH0KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1fcmVncy5jCTIwMDktMDQtMjEgMTQ6NTA6MDEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTI4LDYgKzI4LDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgCisgI2RlZmluZSBCQUNLRU5EIGFybV8KK0BAIC01OCw3ICs1OSwxNSBAQAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDEwIC4uLiAxMjoKKysgICAgY2FzZSAxMCAuLi4gMTE6CisrICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICBuYW1lWzFdID0gJzEnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDEyOgorKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworICAgICAgIG5hbWVbMF0gPSAncic7CisgICAgICAgbmFtZVsxXSA9ICcxJzsKKyAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKK0BAIC03Myw2ICs4Miw5IEBACisgICAgICAgYnJlYWs7CisgCisgICAgIGNhc2UgMTYgKyAwIC4uLiAxNiArIDc6CisrICAgICAgLyogQUFEV0FSRiBzYXlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ2lzdGVycyBpbiB0aGF0IHJhbmdlLAorKyAgICAgICAqIGJ1dCBnY2MgbWFwcyBGUEEgcmVnaXN0ZXJzIGhlcmUKKysgICAgICAgKi8KKyAgICAgICByZWdubyArPSA5NiAtIDE2OworICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgIGNhc2UgOTYgKyAwIC4uLiA5NiArIDc6CitAQCAtODQsMTEgKzk2LDEzOSBAQAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIDY0ICsgMCAuLi4gNjQgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSByZWdubyAtIDY0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDY0ICsgMTAgLi4uIDY0ICsgMzE6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IChyZWdubyAtIDY0KSAvIDEwICsgJzAnOworKyAgICAgIG5hbWVbMl0gPSAocmVnbm8gLSA2NCkgJSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMDQgKyAwIC4uLiAxMDQgKyA3OgorKyAgICAgIC8qIFhYWCBUT0RPOgorKyAgICAgICAqIFRoaXMgY2FuIGJlIGVpdGhlciBpbnRlbCB3aXJlbGVzcyBNTVggZ2VuZXJhbCBwdXJwb3NlL2NvbnRyb2wKKysgICAgICAgKiByZWdpc3RlcnMgb3IgeHNjYWxlIGFjY3VtdWxhdG9yLCB3aGljaCBoYXZlIGRpZmZlcmVudCB1c2FnZS4KKysgICAgICAgKiBXZSBvbmx5IGhhdmUgdGhlIGludGVsIHdpcmVsZXNzIE1NWCBoZXJlIG5vdy4KKysgICAgICAgKiBUaGUgbmFtZSBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgeHNjYWxlIGFjY3VtdWxhdG9yIHRvby4gKi8KKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbWVtY3B5KG5hbWUsICJ3Y2dyIiwgNCk7CisrICAgICAgbmFtZVs0XSA9IHJlZ25vIC0gMTA0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA1OworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDAgLi4uIDExMiArIDk6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxMTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMTAgLi4uIDExMiArIDE1OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9ICcxJzsKKysgICAgICBuYW1lWzNdID0gcmVnbm8gLSAxMTIgLSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNDsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAxMjg6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisgICAgICAgcmV0dXJuIHN0cGNweSAobmFtZSwgInNwc3IiKSArIDEgLSBuYW1lOworIAorKyAgICBjYXNlIDEyOToKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2ZpcSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMwOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfaXJxIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzE6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9hYnQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMjoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3VuZCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMzOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3Jfc3ZjIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxNDQgLi4uIDE1MDoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VzciIsIHJlZ25vIC0gMTQ0ICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1MSAuLi4gMTU3OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfZmlxIiwgcmVnbm8gLSAxNTEgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTU4IC4uLiAxNTk6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9pcnEiLCByZWdubyAtIDE1OCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYwIC4uLiAxNjE6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9hYnQiLCByZWdubyAtIDE2MCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYyIC4uLiAxNjM6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91bmQiLCByZWdubyAtIDE2MiArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTY0IC4uLiAxNjU6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9zdmMiLCByZWdubyAtIDE2NCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTkyIC4uLiAxOTk6CisrICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ2MnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDE5MiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAyNTYgKyAwIC4uLiAyNTYgKyA5OgorKyAgICAgIC8qIFhYWCBUT0RPOiBOZW9uIGFsc28gdXNlcyB0aG9zZSByZWdpc3RlcnMgYW5kIGNhbiBjb250YWluCisrICAgICAgICogYm90aCBmbG9hdCBhbmQgaW50ZWdlcnMgKi8KKyAgICAgICAqc2V0bmFtZSA9ICJWRlAiOworICAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworICAgICAgICpiaXRzID0gNjQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1fcmV0dmFsLmMJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmV0dmFsLmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NSw2ICs0NSwxMyBAQAorICNkZWZpbmUgbmxvY19pbnRyZWcJMQorICNkZWZpbmUgbmxvY19pbnRyZWdzKG4pCSgyICogKG4pKQorIAorKy8qIGYxICAqLyAvKiBYWFggVE9ETzogZjAgY2FuIGFsc28gaGF2ZSBudW1iZXIgOTYgaWYgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCAtbWFiaT1hYXBjcyAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKyAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKyAgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisgICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiByMC4gICovCitAQCAtNTUsOCArNjIsOSBAQAorICNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorIAorIAorLWludAorLWFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKytzdGF0aWMgaW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwKKysJCSAgICAgICAgICAgIGludCBzb2Z0X2Zsb2F0KQorIHsKKyAgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisgICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KK0BAIC0xMDksMTQgKzExNywzMSBAQAorIAkgIGVsc2UKKyAJICAgIHJldHVybiAtMTsKKyAJfQorKyAgICAgIGlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJeworKwkgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkgICAgICAgICAgICAgICAgICAgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysKKysJICBpZiAoKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkgJiYgIXNvZnRfZmxvYXQpCisrCSAgICB7CisrCSAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKwkgICAgICBpZiAoc2l6ZSA8PSA4KQorKwkJcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICAgIGdvdG8gYWdncmVnYXRlOworKwkgICAgfQorKwl9CisgICAgICAgaWYgKHNpemUgPD0gMTYpCisgCXsKKyAJaW50cmVnOgorIAkgICpsb2NwID0gbG9jX2ludHJlZzsKKyAJICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3MgKChzaXplICsgMykgLyA0KTsKKyAJfQorKyAgICAgIC8qIGZhbGwgdGhyb3VnaC4gKi8KKyAKKyAgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPIHNvbWV0aW1lcyBhZ2dyZWdhdGVzIGFyZSByZXR1cm5lZCBpbiByMCAoLW1hYmk9YWFwY3MpICovCisgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKyAKK0BAIC0xMzUsMyArMTYwLDE4IEBACisgICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworICAgcmV0dXJuIC0yOworIH0KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1tc29mdC1mbG9hdCAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbWhhcmQtZmxvYXQgKGN1cnJlbnQgZGVmYXVsdCkgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMjI5MCw2ICsyMjkwLDkgQEAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNQkweDA1MDAwMDAwCisgCisrLyogRUlfT1NBQkkgdmFsdWVzICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkgICAgNjQgICAgICAvKiBDb250YWlucyBzeW1ib2wgdmVyc2lvbmluZy4gKi8KKysKKyAvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworICNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCitAQCAtMjMwNywxMiArMjMxMCwxOSBAQAorIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBQaGRyIHBfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBQVF9BUk1fRVhJRFgJCShQVF9MT1BST0MgKyAxKQkvKiBBUk0gdW53aW5kIHNlZ21lbnQuICAqLworKyNkZWZpbmUgUFRfQVJNX1VOV0lORAkJUFRfQVJNX0VYSURYCisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFNoZHIgc2hfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBTSFRfQVJNX0VYSURYCQkoU0hUX0xPUFJPQyArIDEpIC8qIEFSTSB1bndpbmQgc2VjdGlvbi4gICovCisgI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAJKFNIVF9MT1BST0MgKyAyKSAvKiBQcmVlbXB0aW9uIGRldGFpbHMuICAqLworICNkZWZpbmUgU0hUX0FSTV9BVFRSSUJVVEVTCShTSFRfTE9QUk9DICsgMykgLyogQVJNIGF0dHJpYnV0ZXMgc2VjdGlvbi4gICovCisgCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQxCShEVF9MT1BST0MgKyAwKQorKyNkZWZpbmUgRFRfQVJNX1NZTVRBQlNaCQkoRFRfTE9QUk9DICsgMSkKKysjZGVmaW5lIERUX0FSTV9QUkVFTVRNQUIJKERUX0xPUFJPQyArIDIpCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQyCShEVF9MT1BST0MgKyAzKQorKyNkZWZpbmUgRFRfQVJNX05VTQkJNAorIAorIC8qIEFSTSByZWxvY3MuICAqLworIAorQEAgLTIzNDQsMTIgKzIzNTQsNzUgQEAKKyAjZGVmaW5lIFJfQVJNX0dPVFBDCQkyNQkvKiAzMiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvIEdPVCAqLworICNkZWZpbmUgUl9BUk1fR09UMzIJCTI2CS8qIDMyIGJpdCBHT1QgZW50cnkgKi8KKyAjZGVmaW5lIFJfQVJNX1BMVDMyCQkyNwkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfQVJNX0NBTEwJCTI4CisrI2RlZmluZSBSX0FSTV9KVU1QMjQJCTI5CisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDI0CTMwCisrI2RlZmluZSBSX0FSTV9CQVNFX0FCUwkJMzEKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF83XzAJMzIKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8xNV84CTMzCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMjNfMTUJMzQKKyAjZGVmaW5lIFJfQVJNX0xEUl9TQlJFTF8xMV8wCTM1CisgI2RlZmluZSBSX0FSTV9BTFVfU0JSRUxfMTlfMTIJMzYKKyAjZGVmaW5lIFJfQVJNX0FMVV9TQlJFTF8yN18yMAkzNworKyNkZWZpbmUgUl9BUk1fVEFSR0VUMQkJMzgKKysjZGVmaW5lIFJfQVJNX1NCUkVMMzEJCTM5CisrI2RlZmluZSBSX0FSTV9WNEJYCQk0MAorKyNkZWZpbmUgUl9BUk1fVEFSR0VUMgkJNDEKKysjZGVmaW5lIFJfQVJNX1BSRUwzMQkJNDIKKysjZGVmaW5lIFJfQVJNX01PVldfQUJTX05DCTQzCisrI2RlZmluZSBSX0FSTV9NT1ZUX0FCUwkJNDQKKysjZGVmaW5lIFJfQVJNX01PVldfUFJFTF9OQwk0NQorKyNkZWZpbmUgUl9BUk1fTU9WVF9QUkVMCQk0NgorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQUJTX05DCTQ3CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9BQlMJNDgKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX1BSRUxfTkMJNDkKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZUX1BSRUwJNTAKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QMTkJNTEKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QNgkJNTIKKysjZGVmaW5lIFJfQVJNX1RITV9BTFVfUFJFTF8xMV8wCTUzCisrI2RlZmluZSBSX0FSTV9USE1fUEMxMgkJNTQKKysjZGVmaW5lIFJfQVJNX0FCUzMyX05PSQkJNTUKKysjZGVmaW5lIFJfQVJNX1JFTDMyX05PSQkJNTYKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMF9OQwk1NworKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cwCQk1OAorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cxX05DCTU5CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzEJCTYwCisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzIJCTYxCisrI2RlZmluZSBSX0FSTV9MRFJfUENfRzEJCTYyCisrI2RlZmluZSBSX0FSTV9MRFJfUENfRzIJCTYzCisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cwCTY0CisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cxCTY1CisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cyCTY2CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzAJCTY3CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzEJCTY4CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzIJCTY5CisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzBfTkMJNzAKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMAkJNzEKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMV9OQwk3MgorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cxCQk3MworKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cyCQk3NAorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cwCQk3NQorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cxCQk3NgorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cyCQk3NworKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMAk3OAorKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMQk3OQorKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMgk4MAorKyNkZWZpbmUgUl9BUk1fTERDX0cwCQk4MQorKyNkZWZpbmUgUl9BUk1fTERDX0cxCQk4MgorKyNkZWZpbmUgUl9BUk1fTERDX0cyCQk4MworKyNkZWZpbmUgUl9BUk1fTU9WV19CUkVMX05DCTg0CisrI2RlZmluZSBSX0FSTV9NT1ZUX0JSRUwJCTg1CisrI2RlZmluZSBSX0FSTV9NT1ZXX0JSRUwJCTg2CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19CUkVMX05DCTg3CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9CUkVMCTg4CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19CUkVMCTg5CisrLyogOTAtOTMgdW5hbGxvY2F0ZWQgKi8KKysjZGVmaW5lIFJfQVJNX1BMVDMyX0FCUwkJOTQKKysjZGVmaW5lIFJfQVJNX0dPVF9BQlMJCTk1CisrI2RlZmluZSBSX0FSTV9HT1RfUFJFTAkJOTYKKysjZGVmaW5lIFJfQVJNX0dPVF9CUkVMMTIJOTcKKysjZGVmaW5lIFJfQVJNX0dPVE9GRjEyCQk5OAorKyNkZWZpbmUgUl9BUk1fR09UUkVMQVgJCTk5CisgI2RlZmluZSBSX0FSTV9HTlVfVlRFTlRSWQkxMDAKKyAjZGVmaW5lIFJfQVJNX0dOVV9WVElOSEVSSVQJMTAxCisgI2RlZmluZSBSX0FSTV9USE1fUEMxMQkJMTAyCS8qIHRodW1iIHVuY29uZGl0aW9uYWwgYnJhbmNoICovCitAQCAtMjM2NCw2ICsyNDM3LDEyIEBACisgCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrIG9mZnNldCAqLworICNkZWZpbmUgUl9BUk1fVExTX0xFMzIJCTEwOAkvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXRpYworIAkJCQkJICAgVExTIGJsb2NrICovCisrI2RlZmluZSBSX0FSTV9UTFNfTERPMTIJCTEwOQorKyNkZWZpbmUgUl9BUk1fVExTX0xFMTIJCTExMAorKyNkZWZpbmUgUl9BUk1fVExTX0lFMTJHUAkxMTEKKysvKiAxMTIgLSAxMjcgcHJpdmF0ZSByYW5nZSAqLworKyNkZWZpbmUgUl9BUk1fTUVfVE9PCQkxMjgJLyogb2Jzb2xldGUgKi8KKysKKyAjZGVmaW5lIFJfQVJNX1JYUEMyNQkJMjQ5CisgI2RlZmluZSBSX0FSTV9SU0JSRUwzMgkJMjUwCisgI2RlZmluZSBSX0FSTV9USE1fUlBDMjIJCTI1MQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9hcm0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9hcm0uaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0FSTV9ICisrI2RlZmluZSBfTElCRUJMX0FSTV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWE3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCkBAIC0wLDAgKzEsNzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTM6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MjI6NDMuMDAwMDAwMDAwICswMDAwCitAQCAtMTQzLDYgKzE0Myw3IEBACisgI2RlZmluZSBFTEZPU0FCSV9IUFVYCQkxCS8qIEhQLVVYICovCisgI2RlZmluZSBFTEZPU0FCSV9ORVRCU0QJCTIJLyogTmV0QlNELiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0xJTlVYCQkzCS8qIExpbnV4LiAgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0hVUkQJCTQJLyogR05VL0h1cmQgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX1NPTEFSSVMJNgkvKiBTdW4gU29sYXJpcy4gICovCisgI2RlZmluZSBFTEZPU0FCSV9BSVgJCTcJLyogSUJNIEFJWC4gICovCisgI2RlZmluZSBFTEZPU0FCSV9JUklYCQk4CS8qIFNHSSBJcml4LiAgKi8KK0BAIC0xNTAsOCArMTUxLDEzIEBACisgI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogQ29tcGFxIFRSVTY0IFVOSVguICAqLworICNkZWZpbmUgRUxGT1NBQklfTU9ERVNUTwkxMQkvKiBOb3ZlbGwgTW9kZXN0by4gICovCisgI2RlZmluZSBFTEZPU0FCSV9PUEVOQlNECTEyCS8qIE9wZW5CU0QuICAqLworKyNkZWZpbmUgRUxGT1NBQklfT1BFTlZNUwkxMwkvKiBPcGVuVk1TICovCisrI2RlZmluZSBFTEZPU0FCSV9OU0sJCTE0CS8qIEhld2xldHQtUGFja2FyZCBOb24tU3RvcCBLZXJuZWwgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0FST1MJCTE1CS8qIEFtaWdhIFJlc2VhcmNoIE9TICovCisrLyogNjQtMjU1IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2YWx1ZSByYW5nZSAqLworICNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJCTY0CS8qIEFSTSBFQUJJICovCisgI2RlZmluZSBFTEZPU0FCSV9BUk0JCTk3CS8qIEFSTSAqLworKy8qIFRoaXMgaXMgZGVwcmVjYXRlZD8gSXQncyBub3QgaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIGFueW1vcmUuICovCisgI2RlZmluZSBFTEZPU0FCSV9TVEFOREFMT05FCTI1NQkvKiBTdGFuZGFsb25lIChlbWJlZGRlZCkgYXBwbGljYXRpb24gKi8KKyAKKyAjZGVmaW5lIEVJX0FCSVZFUlNJT04JOAkJLyogQUJJIHZlcnNpb24gKi8KK0BAIC0yMDYsNyArMjEyLDcgQEAKKyAjZGVmaW5lIEVNX0g4XzMwMEgJNDcJCS8qIEhpdGFjaGkgSDgvMzAwSCAqLworICNkZWZpbmUgRU1fSDhTCQk0OAkJLyogSGl0YWNoaSBIOFMgKi8KKyAjZGVmaW5lIEVNX0g4XzUwMAk0OQkJLyogSGl0YWNoaSBIOC81MDAgKi8KKy0jZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBNZXJjZWQgKi8KKysjZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBJQTY0ICovCisgI2RlZmluZSBFTV9NSVBTX1gJNTEJCS8qIFN0YW5mb3JkIE1JUFMtWCAqLworICNkZWZpbmUgRU1fQ09MREZJUkUJNTIJCS8qIE1vdG9yb2xhIENvbGRmaXJlICovCisgI2RlZmluZSBFTV82OEhDMTIJNTMJCS8qIE1vdG9yb2xhIE02OEhDMTIgKi8KK0BAIC0yMjAsNyArMjI2LDggQEAKKyAjZGVmaW5lIEVNX1RJTllKCTYxCQkvKiBBZHZhbmNlZCBMb2dpYyBDb3JwLiBUaW55aiBlbWIuZmFtKi8KKyAjZGVmaW5lIEVNX1g4Nl82NAk2MgkJLyogQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUgKi8KKyAjZGVmaW5lIEVNX1BEU1AJCTYzCQkvKiBTb255IERTUCBQcm9jZXNzb3IgKi8KKy0KKysjZGVmaW5lCUVNX1BEUDEwCTY0CQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTAgKi8KKysjZGVmaW5lIEVNX1BEUDExCTY1CQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTEgKi8KKyAjZGVmaW5lIEVNX0ZYNjYJCTY2CQkvKiBTaWVtZW5zIEZYNjYgbWljcm9jb250cm9sbGVyICovCisgI2RlZmluZSBFTV9TVDlQTFVTCTY3CQkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q5KyA4LzE2IG1jICovCisgI2RlZmluZSBFTV9TVDcJCTY4CQkvKiBTVG1pY3JvZWxlY3Ryb25pY3MgU1Q3IDggYml0IG1jICovCitAQCAtMjUwLDcgKzI1NywyMiBAQAorICNkZWZpbmUgRU1fT1BFTlJJU0MJOTIJCS8qIE9wZW5SSVNDIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyAjZGVmaW5lIEVNX0FSQ19BNQk5MwkJLyogQVJDIENvcmVzIFRhbmdlbnQtQTUgKi8KKyAjZGVmaW5lIEVNX1hURU5TQQk5NAkJLyogVGVuc2lsaWNhIFh0ZW5zYSBBcmNoaXRlY3R1cmUgKi8KKy0jZGVmaW5lIEVNX05VTQkJOTUKKysjZGVmaW5lCUVNX1ZJREVPQ09SRQk5NQkJLyogQWxwaGFtb3NhaWMgVmlkZW9Db3JlIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fVE1NX0dQUAk5NgkJLyogVGhvbXBzb24gTXVsdGltZWRpYSBHZW5lcmFsIFB1cnBvc2UgUHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9OUzMySwk5NwkJLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAzMjAwMCBzZXJpZXMgKi8KKysjZGVmaW5lCUVNX1RQQwkJOTgJCS8qIFRlbm9yIE5ldHdvcmsgVFBDIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fU05QMUsJOTkJCS8qIFRyZWJpYSBTTlAgMTAwMCBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1NUMjAwCTEwMAkJLyogU1RNaWNyb2VsZWN0cm9uaWNzICh3d3cuc3QuY29tKSBTVDIwMCBtaWNyb2NvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX0lQMksgICAgICAgICAxMDEJCS8qIFViaWNvbSBJUDJYWFggbWljcm9jb250cm9sbGVyIGZhbWlseSAqLworKyNkZWZpbmUJRU1fTUFYCQkxMDIJCS8qIE1BWCBQcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX0NSICAgICAgICAgICAxMDMJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29tcGFjdFJJU0MgKi8KKysjZGVmaW5lCUVNX0YyTUMxNgkxMDQJCS8qIEZ1aml0c3UgRjJNQzE2ICovCisrI2RlZmluZSBFTV9NU1A0MzAgICAgICAgMTA1CQkvKiBUSSBtc3A0MzAgbWljcm8gY29udHJvbGxlciAqLworKyNkZWZpbmUgRU1fQkxBQ0tGSU4gICAgIDEwNgkJLyogQW5hbG9nIERldmljZXMgQmxhY2tmaW4gKERTUCkgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9TRV9DMzMJMTA3CQkvKiBTMUMzMyBGYW1pbHkgb2YgU2Vpa28gRXBzb24gcHJvY2Vzc29ycyAqLworKyNkZWZpbmUJRU1fU0VQCQkxMDgJCS8qIFNoYXJwIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9BUkNBCQkxMDkJCS8qIEFyY2EgUklTQyBNaWNyb3Byb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fTlVNCQkxMTAKKyAKKyAvKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gYXNzaWduIG5ldyB1bm9mZmljaWFsIEVNXyogdmFsdWVzLCBwbGVhc2UKKyAgICBwaWNrIGxhcmdlIHJhbmRvbSBudW1iZXJzICgweDg1MjMsIDB4YTdmMiwgZXRjLikgdG8gbWluaW1pemUgdGhlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOGRkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDMyM2NhMDRhMGM5MTg5NTQ0MDc1YzE5YjQ5ZGE2N2Y2NDQzYTg5NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBXZWQsIDIxIEphbiAyMDE1IDA5OjMzOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGVsZl9iZWdpbi5jOiBDVkUtMjAxNC05NDQ3IGZpeAorCit0aGlzIHBhdGNoIGlzIGZyb206CisgaHR0cHM6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9jZ2l0L2VsZnV0aWxzLmdpdC9jb21taXQvP2lkPTE0NzAxOGU3MjllN2MyMmVlYWJmMTViODJkMjZlNGJmNjhhMGQxOGUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBsaWJlbGYvZWxmX2JlZ2luLmMgfCA3ICsrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZl9iZWdpbi5jIGIvbGliZWxmL2VsZl9iZWdpbi5jCitpbmRleCBlNDZhZGQzLi5lODNiYTM1IDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZl9iZWdpbi5jCisrKysgYi9saWJlbGYvZWxmX2JlZ2luLmMKK0BAIC03MzYsMTEgKzczNiw4IEBAIHJlYWRfbG9uZ19uYW1lcyAoRWxmICplbGYpCisgCSAgICBicmVhazsKKyAKKyAJICAvKiBOVUwtdGVybWluYXRlIHRoZSBzdHJpbmcuICAqLworLQkgICpydW5wID0gJ1wwJzsKKy0KKy0JICAvKiBTa2lwIHRoZSBOVUwgYnl0ZSBhbmQgdGhlIFwwMTIuICAqLworLQkgIHJ1bnAgKz0gMjsKKy0KKysJICAqcnVucCsrID0gJ1wwJzsKKysgCisgCSAgLyogQSBzYW5pdHkgY2hlY2suICBTb21lYm9keSBtaWdodCBoYXZlIGdlbmVyYXRlZCBpbnZhbGlkCisgCSAgICAgYXJjaGl2ZS4gICovCisgCSAgaWYgKHJ1bnAgPj0gbmV3cCArIGxlbikKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxOTYxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2FyLmMgKGRvX29wZXJfZGVsZXRlKTogRml4IG51bSBwYXNzZWQgdG8gbWVtc2V0CituYXRpdmUgYnVpbGQgZmFpbGVkIGFzIGZvbGxvd2luZyBvbiBGZWRvcmExOCs6IAorYXIuYzogSW4gZnVuY3Rpb24gJ2RvX29wZXJfZGVsZXRlJzoKK2FyLmM6OTE4OjMxOiBlcnJvcjogYXJndW1lbnQgdG8gJ3NpemVvZicgaW4gJ21lbXNldCcgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbjsgZGlkIHlvdSBtZWFuIHRvIGRlcmVmZXJlbmNlIGl0PyBbLVdlcnJvcj1zaXplb2YtcG9pbnRlci1tZW1hY2Nlc3NdCisgICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGZvdW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1RoZSBvcmlnaW5hbCBjb21taXQgaXMgaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvZWxmdXRpbHMuZ2l0L2NvbW1pdC9zcmMvYXIuYz9pZD0xYTRkMDY2OGQxOGJmMTA5MGM1YzA4Y2RiNWNiM2JhMmI4ZWI1NDEwCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorCistLS0gZWxmdXRpbHMtMC4xNDgvc3JjL2FyLmMub3JnCTIwMTMtMDMtMTIgMjE6MTI6MTcuOTI4MjgxMzc1IC0wNTAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FyLmMJMjAxMy0wMy0xMiAyMToxNTozMC4wNTMyODUyNzEgLTA1MDAKK0BAIC05MTUsNyArOTE1LDcgQEAKKyAJCWxvbmcgaW50IGluc3RhbmNlKQorIHsKKyAgIGJvb2wgKmZvdW5kID0gYWxsb2NhIChzaXplb2YgKGJvb2wpICogYXJnYyk7CistICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGZvdW5kKSk7CisrICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGJvb2wpICogYXJnYyk7CisgCisgICAvKiBMaXN0IG9mIHRoZSBmaWxlcyB3ZSBrZWVwLiAgKi8KKyAgIHN0cnVjdCBhcm1lbSAqdG9fY29weSA9IE5VTEw7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMzUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1mc2l6ZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoZSBFTEZfVF9MSUIgYW5kIEVMRl9UX0dOVUhBU0ggc2l6ZXMgd2VyZSBtaXNzaW5nIGZyb20gZnNpemUgdGFibGUuCisKK1RoaXMgY291bGQgY2F1c2UgYSBmYWlsdXJlIGluIHRoZSBlbGYqX3hsYXRldG9mIGZ1bmN0aW9uLgorCitkaWZmIC11ciBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9leHR0eXBlcy5oIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9leHR0eXBlcy5oCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZXh0dHlwZXMuaAkyMDA5LTAxLTA4IDEyOjU2OjM3LjAwMDAwMDAwMCAtMDgwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9leHR0eXBlcy5oCTIwMTAtMDgtMTggMTQ6MDA6MzMuMDAwMDAwMDAwIC0wNzAwCitAQCAtOTQsNiArOTQsNyBAQAorIFZlcm5hdXgzMiAoRXh0Xyk7CisgU3ltaW5mbzMyIChFeHRfKTsKKyBNb3ZlMzIgKEV4dF8pOworK0xpYjMyIChFeHRfKTsKKyBhdXh2X3QzMiAoRXh0Xyk7CisgCisgRWhkcjY0IChFeHRfKTsKK0BAIC0xMTAsNiArMTExLDcgQEAKKyBWZXJuYXV4NjQgKEV4dF8pOworIFN5bWluZm82NCAoRXh0Xyk7CisgTW92ZTY0IChFeHRfKTsKKytMaWI2NCAoRXh0Xyk7CisgYXV4dl90NjQgKEV4dF8pOworIAorICN1bmRlZiBTVEFSVAorZGlmZiAtdXIgZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9mc2l6ZS5jIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2ZzaXplLmMKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2ZzaXplLmMJMjAwOS0wMS0wOCAxMjo1NjozNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9mc2l6ZS5jCTIwMTAtMDgtMTggMTQ6MTE6NTcuMDAwMDAwMDAwIC0wNzAwCitAQCAtODcsNyArODcsOSBAQAorICAgICAgIFtFTEZfVF9OSERSXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X05oZHIpKSwJCSAgICAgIFwKKyAgICAgICBbRUxGX1RfU1lNSU5GT10JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9TeW1pbmZvKSksCSAgICAgIFwKKyAgICAgICBbRUxGX1RfTU9WRV0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9Nb3ZlKSksCQkgICAgICBcCistICAgICAgW0VMRl9UX0FVWFZdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfYXV4dl90KSkKKysgICAgICBbRUxGX1RfTElCXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X0xpYikpLAkJICAgICAgXAorKyAgICAgIFtFTEZfVF9BVVhWXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X2F1eHZfdCkpLAkgICAgICBcCisrICAgICAgW0VMRl9UX0dOVUhBU0hdCT0gRUxGVzIoTElCRUxGQklUUywgRlNaX1dPUkQpCisgICAgICAgVFlQRV9TSVpFUyAoMzIpCisgICAgIH0sCisgICAgIFtFTEZDTEFTUzY0IC0gMV0gPSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyODY5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIGZpeGVzIGEgd2FybmluZyBzZWVuIHdpdGggZ2NjIDQuOCAoZXNwZWNpYWxseSBvbiB1YnVudHUgMTMuMTApCisKK3wgYWRkcjJsaW5lLmM6IEluIGZ1bmN0aW9uICdoYW5kbGVfYWRkcmVzcyc6Cit8IGFkZHIybGluZS5jOjQ1MDo3OiBlcnJvcjogZm9ybWF0ICclYScgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlICdmbG9hdCAqJywgYnV0IGFyZ3VtZW50IDMgaGFzIHR5cGUgJ2NoYXIgKionIFstV2Vycm9yPWZvcm1hdD1dCit8ICAgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorfCAgICAgICAgXgorfCBhZGRyMmxpbmUuYzo0NTM6NzogZXJyb3I6IGZvcm1hdCAnJWEnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnZmxvYXQgKicsIGJ1dCBhcmd1bWVudCAzIGhhcyB0eXBlICdjaGFyICoqJyBbLVdlcnJvcj1mb3JtYXQ9XQorfCAgICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorfCAgICAgICAgXgorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCisKKyVhIGlzIG9sZCBHTlUgc3R5bGUgYW5kIHNob3VsZCBiZSBhYmFuZG9uZWQgaW4gZmF2b3Igb2YgJW0KKworQWxzbyBzZWUKKworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM2MQorCit0byBzdXBwb3J0IHRoaXMgYXNzZXJ0aW9uCisKK1RoaXMgcGF0Y2ggaXMgYWRkZWQgdmlhIHJlZGhhdC1jb21wYXRpYmlsaXR5IHBhdGNoIHNvIGxldHMgcmV2ZXJ0IHRoaXMgcGFydAoraGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDYXVzZWQgYnkgYW4gZWFybGllciBwYXRjaF0KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2FkZHIybGluZS5jCTIwMTMtMDktMjMgMTc6NDY6NDUuNTEzNTg2NTM4IC0wNzAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCTIwMTMtMDktMjMgMTc6NDY6NDYuMzI5NTg2NTU4IC0wNzAwCitAQCAtNDQ3LDEwICs0NDcsMTAgQEAKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCTIwMTMtMDktMjMgMTc6NDY6NDUuNTIxNTg2NTM4IC0wNzAwCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMJMjAxMy0wOS0yMyAxNzo0Njo0Ni4zMjk1ODY1NTggLTA3MDAKK0BAIC0xMzIsNyArMTMyLDcgQEAKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDYzNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApAQCAtMCwwICsxLDczIEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK2djYyA0LjcgZG9lcyBub3QgbGlrZSBwb2ludGVyIGNvbnZlcnNpb24sIHNvIGhhdmUgYSB2b2lkICogdG1wIHZhciB0byB3b3JrIAorYXJvdW5kIGZvbGxvd2luZyBjb21waWxhdGlvbiBpc3N1ZS4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDcvMDcKKworfCBtZDUuYzogSW4gZnVuY3Rpb24gJ21kNV9maW5pc2hfY3R4JzoKK3wgbWQ1LmM6MTA4OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBtZDUuYzoxMDk6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW21kNS5vXSBFcnJvciAxCit8IG1ha2VbMl06ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCit8IHNoYTEuYzogSW4gZnVuY3Rpb24gJ3NoYTFfZmluaXNoX2N0eCc6Cit8IHNoYTEuYzoxMDk6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IHNoYTEuYzoxMTE6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW3NoYTEub10gRXJyb3IgMQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL21kNS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvbWQ1LmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvbWQ1LmMKK0BAIC05NSw2ICs5NSw3IEBAIG1kNV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIC8qIFRha2UgeWV0IHVucHJvY2Vzc2VkIGJ5dGVzIGludG8gYWNjb3VudC4gICovCisgICBtZDVfdWludDMyIGJ5dGVzID0gY3R4LT5idWZsZW47CisgICBzaXplX3QgcGFkOworKyAgdm9pZCAqIHRtcDsKKyAKKyAgIC8qIE5vdyBjb3VudCByZW1haW5pbmcgYnl0ZXMuICAqLworICAgY3R4LT50b3RhbFswXSArPSBieXRlczsKK0BAIC0xMDUsOSArMTA2LDEwIEBAIG1kNV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIG1lbWNweSAoJmN0eC0+YnVmZmVyW2J5dGVzXSwgZmlsbGJ1ZiwgcGFkKTsKKyAKKyAgIC8qIFB1dCB0aGUgNjQtYml0IGZpbGUgbGVuZ3RoIGluICpiaXRzKiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworLSAgKihtZDVfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF0gPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworLSAgKihtZDVfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfAorLQkJCQkJCQkoY3R4LT50b3RhbFswXSA+PiAyOSkpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXTsKKysgICoobWQ1X3VpbnQzMiAqKSB0bXAgPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkICsgNF07CisrICAqKG1kNV91aW50MzIgKikgdG1wID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfCAoY3R4LT50b3RhbFswXSA+PiAyOSkpOworIAorICAgLyogUHJvY2VzcyBsYXN0IGJ5dGVzLiAgKi8KKyAgIG1kNV9wcm9jZXNzX2Jsb2NrIChjdHgtPmJ1ZmZlciwgYnl0ZXMgKyBwYWQgKyA4LCBjdHgpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9zaGExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9zaGExLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvc2hhMS5jCitAQCAtOTYsNiArOTYsNyBAQCBzaGExX2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgLyogVGFrZSB5ZXQgdW5wcm9jZXNzZWQgYnl0ZXMgaW50byBhY2NvdW50LiAgKi8KKyAgIHNoYTFfdWludDMyIGJ5dGVzID0gY3R4LT5idWZsZW47CisgICBzaXplX3QgcGFkOworKyAgdm9pZCAqIHRtcDsKKyAKKyAgIC8qIE5vdyBjb3VudCByZW1haW5pbmcgYnl0ZXMuICAqLworICAgY3R4LT50b3RhbFswXSArPSBieXRlczsKK0BAIC0xMDYsOSArMTA3LDEwIEBAIHNoYTFfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICBtZW1jcHkgKCZjdHgtPmJ1ZmZlcltieXRlc10sIGZpbGxidWYsIHBhZCk7CisgCisgICAvKiBQdXQgdGhlIDY0LWJpdCBmaWxlIGxlbmd0aCBpbiAqYml0cyogYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKy0gICooc2hhMV91aW50MzIgKikgJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXSA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwKKy0JCQkJCQkgICAgIChjdHgtPnRvdGFsWzBdID4+IDI5KSk7CistICAqKHNoYTFfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF07CisrICAqKHNoYTFfdWludDMyICopIHRtcCA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwgKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdOworKyAgKihzaGExX3VpbnQzMiAqKSB0bXAgPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworIAorICAgLyogUHJvY2VzcyBsYXN0IGJ5dGVzLiAgKi8KKyAgIHNoYTFfcHJvY2Vzc19ibG9jayAoY3R4LT5idWZmZXIsIGJ5dGVzICsgcGFkICsgOCwgY3R4KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZiOTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2hwcGFfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsODAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX2luaXQuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw3NCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIFBBLVJJU0Mgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9QQVJJU0NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIHBhcmlzY19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2NfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmIChlbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHIgJiYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAiUEEtUklTQyI7CisrICBwYXJpc2NfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCBtYWNoaW5lX2ZsYWdfY2hlY2spOworKyAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlZ21lbnRfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWN0aW9uX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrICBpZiAocGE2NCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDE1OSBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBQQS1SSVNDIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK3BhcmlzY19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCwgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIGlmIChlYmwtPmVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWJsLT5lbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrCisrICBpbnQgbnJlZ3MgPSBwYTY0ID8gMTI3IDogMTI4OworKworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIG5yZWdzOworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+PSBucmVncyB8fCBuYW1lbGVuIDwgNikKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIlIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDU7CisrICAgIH0KKysgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICB9CisrICBlbHNlCisrICB7CisrICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKworKyAgaWYgKHJlZ25vIDwgMzMpIHsKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSAwIC4uLiA5OgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAxMCAuLi4gMzE6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAzMjoKKysJKnByZWZpeCA9IE5VTEw7CisrCW5hbWVbMF0gPSAnUyc7CisrCW5hbWVbMV0gPSAnQSc7CisrCW5hbWVbMl0gPSAnUic7CisrCW5hbWVsZW4gPSAzOworKwlicmVhazsKKysgICAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKHBhNjQgJiYgKChyZWdubyAtIDcyKSAlIDIpKSB7CisrICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgNzIgKyAwIC4uLiA3MiArIDExOgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVszXSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDcyICsgMTIgLi4uIDcyICsgNTU6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzNdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVs0XSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgfQorKyAgfQorKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMjggQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBQQS1SSVNDLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKgkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIyMUwsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNFIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxNFIsCQlSRUx8RVhFQykKKytSRUxPQ19UWVBFIChEUFJFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNERSLCAgICAgICAgICBSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChMVE9GRjE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChETFRJTkQxNEYsCQkwKQorK1JFTE9DX1RZUEUgKFNFVEJBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxN1IsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFNFR0JBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVE9GRjIxTCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNEYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIzMiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFIsCTApCisrUkVMT0NfVFlQRSAoRlBUUjY0LAkJMCkKKytSRUxPQ19UWVBFIChQTEFCRUwzMiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkMsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChESVI2NCwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoRElSMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNERSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNldGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2REYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkY2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFdSLAkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNERSLAkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFI2NCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkRGLAkwKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKElQTFQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChFUExULAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDMyLAkJRFlOKQorK1JFTE9DX1RZUEUgKFRQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNEYsCTApCisrUkVMT0NfVFlQRSAoVFBSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFA2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkRGLAkwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwJRFlOKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwJRFlOKQorKworKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgICAgICAgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwyMTMgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L1BBLVJJU0MgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiAlcjI4LCBvciBwYWlyICVyMjgsICVyMjkuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJWZyNEwsIG9yIHBhaXIgJWZyNEwsICVmcjRSIG9uIHBhLTMyICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZzMyIDIKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyMzIgNAorKworKy8qICRmcjQgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworKyNpZiAwCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuIEFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIGlzIHN0b3JlZAorKyAgIGluICVyMjggYmVmb3JlIGZ1bmN0aW9uIGNhbGwsIGJ1dCBpdCBtYXkgYmUgY2hhbmdlZCBieSBmdW5jdGlvbi4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysjZW5kaWYKKysKKytzdGF0aWMgaW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwgaW50IHBhNjQpCisreworKyAgRHdhcmZfV29yZCByZWdzaXplID0gcGE2NCA/IDggOiA0OworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUgfHwgdGFnID09IERXX1RBR19tdXRhYmxlX3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IDQ7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCWlmIChwYTY0KSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnOworKwkJICBpZiAoc2l6ZSA8PSA4KQorKwkJICAgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCQl9CisrCQllbHNlIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWczMjsKKysJCSAgaWYgKHNpemUgPD0gNCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzMyOworKwkJICBlbHNlIGlmIChzaXplIDw9IDgpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyMzI7CisrCQl9CisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJaWYgKHBhNjQpCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOiB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpICE9IDApCisrCSAgcmV0dXJuIC0xOworKwlpZiAocGE2NCkKKysgICAgICAgICAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrICAgICAgICBpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysgICAgICAgIGlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrI2lmIDAKKysJLyogdGhlcmUgc2hvdWxkIGJlIHNvbWUgd2F5IHRvIGtub3cgdGhpcyBsb2NhdGlvbi4uLiBCdXQgSSBkbyBub3Qgc2VlIGl0LiAqLworKyAgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyNlbmRpZgorKwkvKiBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDExMiBAQAorKy8qIFBBLVJJU0Mgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VnbWVudF90eXBlX25hbWUgKGludCBzZWdtZW50LCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAoc2VnbWVudCkKKysgICAgeworKyAgICBjYXNlIFBUX1BBUklTQ19BUkNIRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0FSQ0hFWFQiOworKyAgICBjYXNlIFBUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wgdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3N5bWJvbF90eXBlX25hbWUoaW50IHN5bWJvbCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysgICAgc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKwlpZiAoc3ltYm9sID09IFNUVF9QQVJJU0NfTUlMTElDT0RFKQorKwkgIHJldHVybiAiUEFSSVNDX01JTExJIjsKKysJcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzZWN0aW9uIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWN0aW9uX3R5cGVfbmFtZSAoaW50IHR5cGUsCisrCQkJY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0VYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19FWFQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19ET0M6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRE9DIjsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIENoZWNrIHdoZXRoZXIgbWFjaGluZSBmbGFncyBhcmUgdmFsaWQuICAqLworK2Jvb2wKKytwYXJpc2NfbWFjaGluZV9mbGFnX2NoZWNrIChHRWxmX1dvcmQgZmxhZ3MpCisreworKyAgaWYgKGZsYWdzICZ+IChFRl9QQVJJU0NfVFJBUE5JTCB8IEVGX1BBUklTQ19FWFQgfCBFRl9QQVJJU0NfTFNCIHwKKysJRUZfUEFSSVNDX1dJREUgfCBFRl9QQVJJU0NfTk9fS0FCUCB8CisrCUVGX1BBUklTQ19MQVpZU1dBUCB8IEVGX1BBUklTQ19BUkNIKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBHRWxmX1dvcmQgYXJjaCA9IGZsYWdzICYgRUZfUEFSSVNDX0FSQ0g7CisrCisrICByZXR1cm4gKChhcmNoID09IEVGQV9QQVJJU0NfMV8wKSB8fCAoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMSkgfHwKKysgICAgICAoYXJjaCA9PSBFRkFfUEFSSVNDXzJfMCkpOworK30KKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKytwYXJpc2NfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSNjQ6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjMyOgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDkgQEAKKysjaWZuZGVmIF9MSUJFQkxfSFBQQV9ICisrI2RlZmluZSBfTElCRUJMX0hQUEFfSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyKER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMDo0MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDExICsyOSwxMSBAQAorIAkgICAtSSQodG9wX3NyY2RpcikvbGliZWxmIC1JJCh0b3Bfc3JjZGlyKS9saWJkdworIAorIAorLW1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MAorK21vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBsaWJlYmxfcHBjNjRfcGljLmEgXAorLQkgICAgIGxpYmVibF9zMzkwX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC05NSw2ICs5NSw5IEBACisgbGliZWJsX3MzOTBfcGljX2FfU09VUkNFUyA9ICQoczM5MF9TUkNTKQorIGFtX2xpYmVibF9zMzkwX3BpY19hX09CSkVDVFMgPSAkKHMzOTBfU1JDUzouYz0ub3MpCisgCisrcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworK2xpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisrYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTE3ODksMTYgKzE3ODksMjQgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFdSCTE5CisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0RFIJMjAKKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMjFMCTI2CS8qIEdQLXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0UgkzOAkvKiBMVC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ETFRJTkQxNEYJMzkKKysjZGVmaW5lIFJfUEFSSVNDX1NFVEJBU0UJNDAKKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDIxTAk0MgorKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE3Ugk0MworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0Ugk0NgorICNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNEYJNTUKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRSCTYyCS8qIExULXJlbC4gZmN0IHB0ciwgcmlnaHQgMTQgYml0cy4gKi8KK0BAIC0xODA3LDYgKzE4MTUsNyBAQAorICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyQwk3MworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0RFIJNzYJLyogUEMgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KK0BAIC0xODMyLDYgKzE4NDEsOCBAQAorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2REYJMTAzCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFdSCTEwNworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0RFIJMTA4CisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUw2NAkxMTIJLyogNjQgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaTM4Nl9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNjMDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmgKQEAgLTAsMCArMSwxNjU3IEBACisjZGVmaW5lIE1ORU1PTklDX0JJVFMgMTAKKyNkZWZpbmUgU1VGRklYX0JJVFMgMworI2RlZmluZSBGQ1QxX0JJVFMgNworI2RlZmluZSBTVFIxX0JJVFMgNAorI2RlZmluZSBPRkYxXzFfQklUUyA3CisjZGVmaW5lIE9GRjFfMV9CSUFTIDMKKyNkZWZpbmUgT0ZGMV8yX0JJVFMgNworI2RlZmluZSBPRkYxXzJfQklBUyA0CisjZGVmaW5lIE9GRjFfM19CSVRTIDEKKyNkZWZpbmUgT0ZGMV8zX0JJQVMgNworI2RlZmluZSBGQ1QyX0JJVFMgNgorI2RlZmluZSBTVFIyX0JJVFMgMgorI2RlZmluZSBPRkYyXzFfQklUUyA3CisjZGVmaW5lIE9GRjJfMV9CSUFTIDUKKyNkZWZpbmUgT0ZGMl8yX0JJVFMgNworI2RlZmluZSBPRkYyXzJfQklBUyA0CisjZGVmaW5lIE9GRjJfM19CSVRTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJQVMgNworI2RlZmluZSBGQ1QzX0JJVFMgNAorI2RlZmluZSBTVFIzX0JJVFMgMQorI2RlZmluZSBPRkYzXzFfQklUUyA2CisjZGVmaW5lIE9GRjNfMV9CSUFTIDEwCisjZGVmaW5lIE9GRjNfMl9CSVRTIDEKKyNkZWZpbmUgT0ZGM18yX0JJQVMgMjEKKworI2luY2x1ZGUgPGkzODZfZGF0YS5oPgorCisjZGVmaW5lIHN1ZmZpeF9ub25lIDAKKyNkZWZpbmUgc3VmZml4X3cgMQorI2RlZmluZSBzdWZmaXhfdzAgMgorI2RlZmluZSBzdWZmaXhfVyAzCisjZGVmaW5lIHN1ZmZpeF90dHRuIDQKKyNkZWZpbmUgc3VmZml4X0QgNworI2RlZmluZSBzdWZmaXhfdzEgNQorI2RlZmluZSBzdWZmaXhfVzEgNgorCitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDFfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9heCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kaXNwOCwKKyAgRkNUX2RzX2J4LAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbSRzLAorICBGQ1RfaW1tJHcsCisgIEZDVF9pbW0xNiwKKyAgRkNUX2ltbTgsCisgIEZDVF9pbW1zOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQxNnJfbSwKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCQ4cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnMTYsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3JlbCwKKyAgRkNUX3NlbCwKKyAgRkNUX3NyZWcyLAorICBGQ1Rfc3JlZzMsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AxX3N0cltdID0KKyAgIiVheFwwIgorICAiJWNsXDAiCisgICIlZWF4XDAiCisgICIlc3RcMCIKKyAgIiV4bW0wXDAiCisgICIqIjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMV9zdHJfaWR4W10gPSB7CisgIDAsCisgIDQsCisgIDgsCisgIDEzLAorICAxNywKKyAgMjMsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AyX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYWJzdmFsLAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW04LAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJDY0cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX21vZGEkcl9tLAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMl9zdHJbXSA9CisgICIlZWN4XDAiCisgICIlc3QiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AyX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNSwKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDNfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDNfc3RyW10gPQorICAiJWVkeCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDNfc3RyX2lkeFtdID0geworICAwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zdHJfZW5jIGluc3RydGFiW10gPQoreworICB7IC5tbmVtb25pYyA9IE1ORV9hYWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hYXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYXJwbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ib3VuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic2YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Jzd2FwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbHRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNleGl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Ntb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZzhiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jcHVpZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0ZHEycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RhYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGFzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFicywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnRzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsZzIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxuMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkeiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZjJ4bTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnBhdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHRyYWN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeHAxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3FydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJuZGludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNjYWxlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkY3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0ZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVscCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZibGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zic3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9md2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5jbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZudSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZybCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZnJlZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuaW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHB0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9obHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lucywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnRvLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zd2FwZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmxwZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaXJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDYsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xnZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAyLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xpZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAyLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xtc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvY2ssIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvZHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcG5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2x0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzYmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3dsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnpibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6d2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbmVnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF1c2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wY250LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZG1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRwbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkdHNjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zY2FzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1sYXVuY2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVzdW1lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvZmYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXdyaXRlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NnZHRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb25pdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNCwgLnN0cjMgPSAxLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX213YWl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NpZHRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG9zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VkMmEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3diaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2hudGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd3Jtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hsYXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkbXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0bXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNsZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzaGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2dldHNlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tscWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxMnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2xlYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9uLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZmx1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnNlcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3VzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR2YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhtaW5wb3N1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKK307CitzdGF0aWMgY29uc3QgdWludDhfdCBtYXRjaF9kYXRhW10gPQoreworICAweDExLCAweDM3LAorICAweDIyLCAweGQ1LCAweGEsCisgIDB4MjIsIDB4ZDQsIDB4YSwKKyAgMHgxMSwgMHgzZiwKKyAgMHgxLCAweGZlLCAweDE0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDEwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MTIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHg0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDAsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MjQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4MjAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDEyLCAweDYzLCAwLCAwLAorICAweDEyLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZCwgMCwgMCwKKyAgMHgxMiwgMHhmLCAweGY4LCAweGM4LAorICAweDIzLCAweGYsIDB4YTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAweGJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhiMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHhlOCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxMCwKKyAgMHgxMSwgMHg5YSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxOCwKKyAgMHgxMSwgMHg5OCwKKyAgMHgxMSwgMHg5OSwKKyAgMHgxMSwgMHhmOCwKKyAgMHgxMSwgMHhmYywKKyAgMHgxMSwgMHhmYSwKKyAgMHgyMiwgMHhmLCAweDUsCisgIDB4MjIsIDB4ZiwgMHg2LAorICAweDIyLCAweGYsIDB4NywKKyAgMHgyMiwgMHhmLCAweDM0LAorICAweDIyLCAweGYsIDB4MzUsCisgIDB4MTEsIDB4ZjUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg0MCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDNjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgzOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDNhLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGMyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNiwKKyAgMHgxMywgMHhmLCAweGZlLCAweGIwLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGEyLAorICAweDM0LCAweGYzLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU2LCAwLCAwLAorICAweDExLCAweDI3LAorICAweDExLCAweDJmLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGY4LCAweDQ4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgxMSwgMHhjOCwKKyAgMHgyMiwgMHhkOSwgMHhkMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgyMiwgMHhkOSwgMHhlMSwKKyAgMHgyMiwgMHhkOSwgMHhlNCwKKyAgMHgyMiwgMHhkOSwgMHhlNSwKKyAgMHgyMiwgMHhkOSwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhlOSwKKyAgMHgyMiwgMHhkOSwgMHhlYSwKKyAgMHgyMiwgMHhkOSwgMHhlYiwKKyAgMHgyMiwgMHhkOSwgMHhlYywKKyAgMHgyMiwgMHhkOSwgMHhlZCwKKyAgMHgyMiwgMHhkOSwgMHhlZSwKKyAgMHgyMiwgMHhkOSwgMHhmMCwKKyAgMHgyMiwgMHhkOSwgMHhmMSwKKyAgMHgyMiwgMHhkOSwgMHhmMiwKKyAgMHgyMiwgMHhkOSwgMHhmMywKKyAgMHgyMiwgMHhkOSwgMHhmNCwKKyAgMHgyMiwgMHhkOSwgMHhmNSwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkOSwgMHhmOCwKKyAgMHgyMiwgMHhkOSwgMHhmOSwKKyAgMHgyMiwgMHhkOSwgMHhmYSwKKyAgMHgyMiwgMHhkOSwgMHhmYiwKKyAgMHgyMiwgMHhkOSwgMHhmYywKKyAgMHgyMiwgMHhkOSwgMHhmZCwKKyAgMHgyMiwgMHhkOSwgMHhmZSwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGM4LAorICAweDEyLCAweGRjLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGU4LAorICAweDEyLCAweGRjLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDE4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDI4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDMwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHg4LAorICAweDEyLCAweGRlLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkZiwgMHhlMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMiwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMywKKyAgMHgxMSwgMHg5YiwKKyAgMHgyMiwgMHhkYiwgMHhlMiwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDEwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZGUsIDB4ZDksCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDM4LAorICAweDEyLCAweGRhLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRkLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkYiwgMHhlMywKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHg4LAorICAweDEyLCAweGRkLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhmNCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhZiwgMCwgMCwKKyAgMHgyLCAweGZkLCAweDY5LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4ZTQsCisgIDB4MSwgMHhmZSwgMHhlYywKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAwLAorICAweDEsIDB4ZjgsIDB4NDAsCisgIDB4MSwgMHhmZSwgMHg2YywKKyAgMHgxMSwgMHhjZCwKKyAgMHgxMSwgMHhjYywKKyAgMHgxMSwgMHhjZSwKKyAgMHgyMiwgMHhmLCAweDgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGY4LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhjZiwKKyAgMHgxLCAweGYwLCAweDcwLAorICAweDEyLCAweGYsIDB4ZjAsIDB4ODAsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgxMSwgMHhlMywKKyAgMHgxMSwgMHhlYiwKKyAgMHgxMSwgMHhlOSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhlYSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHg5ZiwKKyAgMHgyMywgMHhmLCAweDIsIDAsIDAsCisgIDB4MTIsIDB4YzUsIDAsIDAsCisgIDB4MTIsIDB4OGQsIDAsIDAsCisgIDB4MTEsIDB4YzksCisgIDB4MTIsIDB4YzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzAsCisgIDB4MTEsIDB4ZjAsCisgIDB4MSwgMHhmZSwgMHhhYywKKyAgMHgxMSwgMHhlMiwKKyAgMHgxMSwgMHhlMSwKKyAgMHgxMSwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGM2LCAweDM4LCAwLAorICAweDEsIDB4ZjAsIDB4YjAsCisgIDB4MSwgMHhmZSwgMHhhMCwKKyAgMHgxLCAweGZlLCAweGEyLAorICAweDIzLCAweGYsIDB4MjAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIxLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjMsIDB4YzAsIDB4YzAsCisgIDB4MTIsIDB4OGMsIDAsIDAsCisgIDB4MTIsIDB4OGUsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNCwKKyAgMHgyMywgMHhmLCAweGJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI3LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmMywgMHg5MCwKKyAgMHgxMSwgMHg5MCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHg4LAorICAweDEsIDB4ZmUsIDB4YywKKyAgMHgxLCAweGZlLCAweGU2LAorICAweDEsIDB4ZmUsIDB4ZWUsCisgIDB4MSwgMHhmZSwgMHg2ZSwKKyAgMHgxMiwgMHg4ZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgxLAorICAweDExLCAweDlkLAorICAweDEyLCAweGZmLCAweDM4LCAweDMwLAorICAweDEsIDB4ZjgsIDB4NTAsCisgIDB4MSwgMHhmOCwgMHg1OCwKKyAgMHgxLCAweGZkLCAweDY4LAorICAweDEsIDB4ZTcsIDB4NiwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgwLAorICAweDExLCAweDYwLAorICAweDExLCAweDYxLAorICAweDExLCAweDljLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDE4LAorICAweDIyLCAweGYsIDB4MzIsCisgIDB4MjIsIDB4ZiwgMHgzMywKKyAgMHgyMiwgMHhmLCAweDMxLAorICAweDExLCAweGMzLAorICAweDExLCAweGMyLAorICAweDExLCAweGNiLAorICAweDExLCAweGNhLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YWEsCisgIDB4MTEsIDB4OWUsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgxOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDFhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MWMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDE4LAorICAweDEsIDB4ZmUsIDB4YWUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhNSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGFkLCAwLCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjMSwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzIsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMzLAorICAweDMzLCAweGYsIDB4MSwgMHhjNCwKKyAgMHgyMywgMHhmLCAweDc4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjOCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzksCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZjksCisgIDB4MTEsIDB4ZmQsCisgIDB4MTEsIDB4ZmIsCisgIDB4MSwgMHhmZSwgMHhhYSwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHgyOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDJhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MmMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODQsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAwLAorICAweDIyLCAweGYsIDB4YiwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZiwgMHg5LAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMHgxZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDMwLAorICAweDEzLCAweGYsIDB4ZmUsIDB4YzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4NiwgMCwgMCwKKyAgMHgxLCAweGY4LCAweDkwLAorICAweDExLCAweGQ3LAorICAweDIsIDB4ZmUsIDB4MzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDM0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhmLCAweDc3LAorICAweDM0LCAweDY2LCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxOCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDExLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJkLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDM3LAorICAweDM0LCAweDY2LCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU3LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdlLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUwLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhmMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhlOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGYwLAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2YsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YiwgMCwgMCwKKyAgMHgxLCAweGU3LCAweDcsCit9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjIxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbTY4a19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSwzMDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19pbml0LmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDkgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtNjhrIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdGFyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfNjhLXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbTY4a19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKyttNjhrX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAibTY4ayI7CisrICBtNjhrX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMDYgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgbTY4ayBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttNjhrX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCSAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysJaWYgKG5hbWUgPT0gTlVMTCkKKysJCXJldHVybiAyNTsKKysKKysJaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDI0IHx8IG5hbWVsZW4gPCA1KQorKwkJcmV0dXJuIC0xOworKworKwkqcHJlZml4ID0gIiUiOworKwkqYml0cyA9IDMyOworKwkqdHlwZSA9IChyZWdubyA8IDggPyBEV19BVEVfc2lnbmVkCisrCQk6IHJlZ25vIDwgMTYgPyBEV19BVEVfYWRkcmVzcyA6IERXX0FURV9mbG9hdCk7CisrCisrCWlmIChyZWdubyA8IDgpCisrCXsKKysJCSpzZXRuYW1lID0gImludGVnZXIiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMTYpCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMjQpCisrCXsKKysJCSpzZXRuYW1lID0gIkZQVSI7CisrCX0KKysJZWxzZQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJCSp0eXBlID0gRFdfQVRFX2FkZHJlc3M7CisrCX0KKysKKysJc3dpdGNoIChyZWdubykKKysJeworKwljYXNlIDAgLi4uIDc6CisrCQluYW1lWzBdID0gJ2QnOworKwkJbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSA4IC4uLiAxMzoKKysJCW5hbWVbMF0gPSAnYSc7CisrCQluYW1lWzFdID0gcmVnbm8gLSA4ICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNDoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNToKKysJCW5hbWVbMF0gPSAncyc7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNiAuLi4gMjM6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysJCW5hbWVbMl0gPSByZWdubyAtIDE2ICsgJzAnOworKyAgIAkJbmFtZWxlbiA9IDM7CisrCQlicmVhazsKKysKKysJY2FzZSAyNDoKKysJCW5hbWVbMF0gPSAncCc7CisrCQluYW1lWzFdID0gJ2MnOworKwkJbmFtZWxlbiA9IDI7CisrCX0KKysKKysJbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysJcmV0dXJuIG5hbWVsZW47CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtNjhrLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQkwKQorK1JFTE9DX1RZUEUgKDMyLAkJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFICgxNiwJCQlSRUwpCisrUkVMT0NfVFlQRSAoOCwJCQlSRUwpCisrUkVMT0NfVFlQRSAoUEMzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChQQzE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOCwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKEdMT0JfREFULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoSk1QX1NMT1QsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChSRUxBVElWRSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEdOVV9WVElOSEVSSVQsCVJFTCkKKytSRUxPQ19UWVBFIChHTlVfVlRFTlRSWSwJUkVMKQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTM6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMTEyNSw2ICsxMTI1LDkgQEAKKyAjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19KTVBfU0xPVAkyMQkJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysvKiBUaGUgbmV4dCAyIGFyZSBHTlUgZXh0ZW5zaW9ucyB0byBlbmFibGUgQysrIHZ0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uICAqLworKyNkZWZpbmUgUl82OEtfR05VX1ZUSU5IRVJJVCAyMworKyNkZWZpbmUgUl82OEtfR05VX1ZURU5UUlkgICAyNAorICNkZWZpbmUgUl82OEtfVExTX0dEMzIgICAgICAyNSAgICAgICAgICAvKiAzMiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDE2ICAgICAgMjYgICAgICAgICAgLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0Q4ICAgICAgIDI3ICAgICAgICAgIC8qIDggYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTE6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTIgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMKKyttb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMgbTY4aworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgXAorIAkgICAgIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIGxpYmVibF9wcGM2NF9waWMuYSBcCistCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEgXAorKwkgICAgIGxpYmVibF9tNjhrX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTEwMyw2ICsxMDQsMTAgQEAKKyBsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisgYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKyAKKyttNjhrX1NSQ1MgPSBtNjhrX2luaXQuYyBtNjhrX3N5bWJvbC5jIG02OGtfcmVncy5jCisrbGliZWJsX202OGtfcGljX2FfU09VUkNFUyA9ICQobTY4a19TUkNTKQorK2FtX2xpYmVibF9tNjhrX3BpY19hX09CSkVDVFMgPSAkKG02OGtfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19zeW1ib2wuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0MyBAQAorKy8qIG02OGsgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbTY4a19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSXzY4S18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfU1dPUkQ7CisrICAgIGNhc2UgUl82OEtfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl82OEtfODoKKysgICAgICByZXR1cm4gRUxGX1RfQllURTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODFhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbWlwc19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw3MTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19pbml0LmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtaXBzIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9NSVBTXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbWlwc19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKytjb25zdCBjaGFyICoKKyttaXBzX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgaWYgKG1hY2hpbmUgPT0gRU1fTUlQUykKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBiaWctZW5kaWFuIjsKKysgIGVsc2UgaWYgKG1hY2hpbmUgPT0gRU1fTUlQU19SUzNfTEUpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgbGl0dGxlLWVuZGlhbiI7CisrCisrICBtaXBzX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVncy5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDEwNCBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBNSVBTIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttaXBzX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorKwkJICAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIDY2OworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDY1IHx8IG5hbWVsZW4gPCA0KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiQiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAxOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IChyZWdubyAvIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZVsxXSA9IChyZWdubyAlIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vIDwgNjQpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdmJzsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSArICcwJzsKKysJICBuYW1lbGVuID0gMjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgLyAxMCArICcwJzsKKysJICBuYW1lWzJdID0gKHJlZ25vIC0gMzIpICUgMTAgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDM7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gNjQpCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2gnOworKyAgICAgIG5hbWVbMV0gPSAnaSc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnbCc7CisrICAgICAgbmFtZVsxXSA9ICdvJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKworKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDc5IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbWlwcy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDE2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgzMiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMzIsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDI2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISTE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTE8xNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTYsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMSVRFUkFMLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFBDMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMMTYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwzMiwgICAgICAgICAgICAwKQorKworK1JFTE9DX1RZUEUgKFNISUZUNSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTSElGVDYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoNjQsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfUEFHRSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX09GU1QsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ISTE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfTE8xNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU1VCLCAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9BLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoREVMRVRFLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFUiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVNULCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9ISTE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfTE8xNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTQ05fRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEFERF9JTU1FRElBVEUsICAgICAgMCkKKytSRUxPQ19UWVBFIChQSlVNUCwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMR09ULCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEpBTFIsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMNjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dELCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19MRE0sICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0hJMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9MTzE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HT1RUUFJFTCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUwzMiwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMNjQsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9ISTE2LCAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfTE8xNiwgICAgIDApCisrCisrI2RlZmluZSBOT19DT1BZX1JFTE9DIDEKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZXR2YWwuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwzMjEgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L21pcHMgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrI2luY2x1ZGUgPGVsZi5oPgorKworKyNpbmNsdWRlICIuLi9saWJlYmwvbGliZWJsUC5oIgorKyNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIKKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoZSBBQkkgb2YgdGhlIGZpbGUuICBBbHNvIHNlZSBFRl9NSVBTX0FCSTIgYWJvdmUuICovCisrI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwRjAwMAorKworKy8qIFRoZSBvcmlnaW5hbCBvMzIgYWJpLiAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PMzIgICAgICAgICAgMHgwMDAwMTAwMAorKworKy8qIE8zMiBleHRlbmRlZCB0byB3b3JrIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzICovCisrI2RlZmluZSBFX01JUFNfQUJJX082NCAgICAgICAgICAweDAwMDAyMDAwCisrCisrLyogRUFCSSBpbiAzMiBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJMzIgICAgICAgMHgwMDAwMzAwMAorKworKy8qIEVBQkkgaW4gNjQgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTY0ICAgICAgIDB4MDAwMDQwMDAKKysKKysvKiBBbGwgdGhlIHBvc3NpYmxlIE1JUFMgQUJJcy4gKi8KKytlbnVtIG1pcHNfYWJpCisrICB7CisrICAgIE1JUFNfQUJJX1VOS05PV04gPSAwLAorKyAgICBNSVBTX0FCSV9OMzIsCisrICAgIE1JUFNfQUJJX08zMiwKKysgICAgTUlQU19BQklfTjY0LAorKyAgICBNSVBTX0FCSV9PNjQsCisrICAgIE1JUFNfQUJJX0VBQkkzMiwKKysgICAgTUlQU19BQklfRUFCSTY0LAorKyAgICBNSVBTX0FCSV9MQVNUCisrICB9OworKworKy8qIEZpbmQgdGhlIG1pcHMgQUJJIG9mIHRoZSBjdXJyZW50IGZpbGUgKi8KKytlbnVtIG1pcHNfYWJpIGZpbmRfbWlwc19hYmkoRWxmICplbGYpCisreworKyAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrCisrICBpZiAoZWhkciA9PSBOVUxMKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIEdFbGZfV29yZCBlbGZfZmxhZ3MgPSBlaGRyLT5lX2ZsYWdzOworKworKyAgLyogQ2hlY2sgZWxmX2ZsYWdzIHRvIHNlZSBpZiBpdCBzcGVjaWZpZXMgdGhlIEFCSSBiZWluZyB1c2VkLiAgKi8KKysgIHN3aXRjaCAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJKSkKKysgICAgeworKyAgICBjYXNlIEVfTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkkzMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgaWYgKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpKQorKwlyZXR1cm4gTUlQU19BQklfTjMyOworKyAgICB9CisrCisrICAvKiBHQ0MgY3JlYXRlcyBhIHBzZXVkby1zZWN0aW9uIHdob3NlIG5hbWUgZGVzY3JpYmVzIHRoZSBBQkkuICAqLworKyAgc2l6ZV90IHNoc3RybmR4OworKyAgaWYgKGVsZl9nZXRzaGRyc3RybmR4IChlbGYsICZzaHN0cm5keCkgPCAwKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBFbGZfU2NuICpzY24gPSBOVUxMOworKyAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAoZWxmLCBzY24pKSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworKyAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworKyAgICAgIGlmIChzaGRyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgICAgICBuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSkgPzogIiI7CisrICAgICAgaWYgKHN0cm5jbXAgKG5hbWUsICIubWRlYnVnLiIsIDgpICE9IDApCisrICAgICAgICBjb250aW51ZTsKKysKKysgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTjMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTzY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworKyAgICB9CisrCisrICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKyt9CisrCisrdW5zaWduZWQgaW50CisrbWlwc19hYmlfcmVnc2l6ZSAoZW51bSBtaXBzX2FiaSBhYmkpCisreworKyAgc3dpdGNoIChhYmkpCisrICAgIHsKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJMzI6CisrICAgIGNhc2UgTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiA0OworKyAgICBjYXNlIE1JUFNfQUJJX04zMjoKKysgICAgY2FzZSBNSVBTX0FCSV9ONjQ6CisrICAgIGNhc2UgTUlQU19BQklfTzY0OgorKyAgICBjYXNlIE1JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gODsKKysgICAgY2FzZSBNSVBTX0FCSV9VTktOT1dOOgorKyAgICBjYXNlIE1JUFNfQUJJX0xBU1Q6CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisrLyogJHYwIG9yIHBhaXIgJHYwLCAkdjEgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAkZjAgKGZsb2F0KSwgb3IgcGFpciAkZjAsICRmMSAoZG91YmxlKS4KKysgKiBmMi9mMyBhcmUgdXNlZCBmb3IgQ09NUExFWCAoPSAyIGRvdWJsZXMpIHJldHVybnMgaW4gRm9ydHJhbiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM1IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrLyogJGYwLCBvciBwYWlyICRmMCwgJGYyLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIgNAorKyNkZWZpbmUgbmxvY19mcHJlZ3F1YWQgOAorKworKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKysgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluICR2MC4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMiwgLm51bWJlciA9IDAgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysKKytpbnQKKyttaXBzX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIC8qIEZpcnN0IGZpbmQgdGhlIEFCSSB1c2VkIGJ5IHRoZSBlbGYgb2JqZWN0ICovCisrICBlbnVtIG1pcHNfYWJpIGFiaSA9IGZpbmRfbWlwc19hYmkoZnVuY3R5cGVkaWUtPmN1LT5kYmctPmVsZik7CisrCisrICAvKiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3Jvbmcgd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIEFCSSAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9MQVNUKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBXZSBjb3VsZG4ndCBpZGVudGlmeSB0aGUgQUJJLCBidXQgdGhlIGZpbGUgc2VlbXMgdmFsaWQgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfVU5LTk9XTikKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogQ2FuJ3QgaGFuZGxlIEVBQkkgdmFyaWFudHMgKi8KKysgIGlmICgoYWJpID09IE1JUFNfQUJJX0VBQkkzMikgfHwgKGFiaSA9PSBNSVBTX0FCSV9FQUJJNjQpKQorKyAgICByZXR1cm4gLTI7CisrCisrICB1bnNpZ25lZCBpbnQgcmVnc2l6ZSA9IG1pcHNfYWJpX3JlZ3NpemUgKGFiaSk7CisrICBpZiAoIXJlZ3NpemUpCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfbXV0YWJsZV90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSByZWdzaXplOworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrI2RlZmluZSBBQklfTE9DKGxvYywgcmVnc2l6ZSkgKChyZWdzaXplKSA9PSA0ID8gKGxvYyAjIyBfbzMyKSA6IChsb2MpKQorKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJKmxvY3AgPSBBQklfTE9DKGxvY19mcHJlZywgcmVnc2l6ZSk7CisrCQlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnOworKworKwkJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjsKKysKKysJCWlmIChzaXplIDw9IDQqcmVnc2l6ZSAmJiBhYmkgPT0gTUlQU19BQklfTzMyKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncXVhZDsKKysKKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwkqbG9jcCA9IEFCSV9MT0MobG9jX2ludHJlZywgcmVnc2l6ZSk7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guIFNob3VsZG4ndCBoYXBwZW4gdGhvdWdoIChhdCBsZWFzdCB3aXRoIGdjYykgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6CisrICAgICAgLyogWFhYIFRPRE86IENhbid0IGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJuIHdpdGggb3RoZXIgQUJJJ3MgeWV0IDotLyAqLworKyAgICAgIGlmICgoYWJpICE9IE1JUFNfQUJJX08zMikgJiYgKGFiaSAhPSBNSVBTX0FCSV9PNjQpKQorKyAgICAgICAgcmV0dXJuIC0yOworKworKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBNSVBTIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK21pcHNfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9NSVBTXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfTUlQU18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgY2FzZSBSX01JUFNfNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTAtMDItMjQgMTg6NTU6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC05MSw2ICs5MSw4IEBACisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQywgMCwgMCB9LAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjdjhwbHVzIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMzMlBMVVMsIDAsIDAgfSwKKyAgIHsgInMzOTAiLCAiZWJsX3MzOTAiLCAiczM5MCIsIDQsIEVNX1MzOTAsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHMiLCAibWlwcyIsIDQsIEVNX01JUFMsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHNlbCIsICJtaXBzZWwiLCA0LCBFTV9NSVBTX1JTM19MRSwgMCwgMCB9LAorIAorICAgeyAibTMyIiwgImVsZl9tMzIiLCAibTMyIiwgMywgRU1fTTMyLCAwLCAwIH0sCisgICB7ICJtNjhrIiwgImVsZl9tNjhrIiwgIm02OGsiLCA0LCBFTV82OEssIDAsIDAgfSwKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9jb21tb24tcmVsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ1Lm9yaWcvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxMC0wMi0yNCAxODo1NTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwOSwxMSArMTA5LDEzIEBACisgfQorIAorIAorKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworIGJvb2wKKyBFQkxIT09LKGNvcHlfcmVsb2NfcCkgKGludCByZWxvYykKKyB7CisgICByZXR1cm4gcmVsb2MgPT0gUl9UWVBFIChDT1BZKTsKKyB9CisrI2VuZGlmCisgCisgYm9vbAorIEVCTEhPT0sobm9uZV9yZWxvY19wKSAoaW50IHJlbG9jKQorQEAgLTEzNSw3ICsxMzcsOSBAQAorICAgZWJsLT5yZWxvY190eXBlX25hbWUgPSBFQkxIT09LKHJlbG9jX3R5cGVfbmFtZSk7CisgICBlYmwtPnJlbG9jX3R5cGVfY2hlY2sgPSBFQkxIT09LKHJlbG9jX3R5cGVfY2hlY2spOworICAgZWJsLT5yZWxvY192YWxpZF91c2UgPSBFQkxIT09LKHJlbG9jX3ZhbGlkX3VzZSk7CisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgICBlYmwtPmNvcHlfcmVsb2NfcCA9IEVCTEhPT0soY29weV9yZWxvY19wKTsKKysjZW5kaWYKKyAgIGVibC0+bm9uZV9yZWxvY19wID0gRUJMSE9PSyhub25lX3JlbG9jX3ApOworICNpZm5kZWYgTk9fUkVMQVRJVkVfUkVMT0MKKyAgIGVibC0+cmVsYXRpdmVfcmVsb2NfcCA9IEVCTEhPT0socmVsYXRpdmVfcmVsb2NfcCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDItMjQgMTg6NTc6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0yNCAxODo1Nzo1Ny4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTEgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjCisrbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSBcCisgCSAgICAgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgbGliZWJsX3BwYzY0X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC05OSw2ICs5OSwxMCBAQAorIGxpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisgYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisrbWlwc19TUkNTID0gbWlwc19pbml0LmMgbWlwc19zeW1ib2wuYyBtaXBzX3JlZ3MuYyBtaXBzX3JldHZhbC5jCisrbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorK2FtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1ZGFkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworbm06IEZpeCBzaXplIHBhc3NlZCB0byBzbnByaW50ZiBmb3IgaW52YWxpZCBzaF9uYW1lIGNhc2UuCituYXRpdmUgYnVpbGQgZmFpbGVkIGFzIGZvbGxvd2luZyBvbiBGZWRvcmExODoKK25tLmM6IEluIGZ1bmN0aW9uICdzaG93X3N5bWJvbHNfc3lzdic6CitubS5jOjc1NjoyNzogZXJyb3I6IGFyZ3VtZW50IHRvICdzaXplb2YnIGluICdzbnByaW50ZicgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbjsgZGlkIHlvdSBtZWFuIHRvIHByb3ZpZGUgYW4gZXhwbGljaXQgbGVuZ3RoPyBbLVdlcnJvcj1zaXplb2YtcG9pbnRlci1tZW1hY2Nlc3NdCisgICAgc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKworVGhlIG9yaWdpbmFsIGNvbW1pdCBpcyBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9lbGZ1dGlscy5naXQvY29tbWl0L3NyYy9ubS5jP2lkPTU3YmQ2NmNhYmY2ZTZiOWVjZjYyMmNkYmYzNTA4MDQ4OTdhOGRmNTgKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CisKKy0tLSBlbGZ1dGlscy0wLjE0OC9zcmMvbm0uYy5vcmcJMjAxMy0wMy0xMSAyMjozNjoxMS4wMDAwMDAwMDAgLTA1MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbm0uYwkyMDEzLTAzLTExIDIyOjQ2OjA5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTc1Miw4ICs3NTIsOSBAQAorIAkJCSAgICAgICBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKS0+c2hfbmFtZSk7CisgICAgICAgaWYgKHVubGlrZWx5IChuYW1lID09IE5VTEwpKQorIAl7CistCSAgbmFtZSA9IGFsbG9jYSAoc2l6ZW9mICJbaW52YWxpZCBzaF9uYW1lIDB4MTIzNDU2NzhdIik7CistCSAgc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKysJICBjb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YgIltpbnZhbGlkIHNoX25hbWUgMHgxMjM0NTY3OF0iOworKwkgIG5hbWUgPSBhbGxvY2EgKGJ1ZnN6KTsKKysJICBzbnByaW50ZiAobmFtZSwgYnVmc3osICJbaW52YWxpZCBzaF9uYW1lICUjIiBQUkl4MzIgIl0iLAorIAkJICAgIGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pLT5zaF9uYW1lKTsKKyAJfQorICAgICAgIHNjbm5hbWVzW2VsZl9uZHhzY24gKHNjbildID0gbmFtZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5MTJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCkBAIC0wLDAgKzEsNzU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2JhY2tlbmRzL0NoYW5nZUxvZwkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAJKiBwcGNfYXR0cnMuYyAocHBjX2NoZWNrX29iamVjdF9hdHRyaWJ1dGUpOiBIYW5kbGUgdGFnCisgCUdOVV9Qb3dlcl9BQklfU3RydWN0X1JldHVybi4KKyAKKysyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChsaWJlYmxfJS5zbyk6IFVzZSAkKExEX0FTX05FRURFRCkuCisrCisgMjAwOC0xMC0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogaTM4Nl9yZWxvYy5kZWY6IEZpeCBlbnRyaWVzIGZvciBUTFNfR09UREVTQywgVExTX0RFU0NfQ0FMTCwgYW5kCitAQCAtNDMzLDYgKzQzNywxMSBAQAorIAkqIHNwYXJjX2luaXQuYzogTGlrZXdpc2UuCisgCSogeDg2XzY0X2luaXQuYzogTGlrZXdpc2UuCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoTERfQVNfTkVFREVEKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShsaWJlYmxfJS5zbyBydWxlKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XbCwtLWFzLW5lZWRlZC4KKysKKyAyMDA1LTExLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHBwYzY0X3JlbG9jLmRlZjogUkVMMzAgLT4gQUREUjMwLgorQEAgLTQ1NSw2ICs0NjQsOSBAQAorIAkqIE1ha2VmaWxlLmFtICh1bmluc3RhbGwpOiBEb24ndCB0cnkgdG8gcmVtb3ZlICQocGtnaW5jbHVkZWRpcikuCisgCShDTEVBTkZJTEVTKTogQWRkIGxpYmVibF8kKG0pLnNvLgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIAkqIHBwY19yZWxvYy5kZWY6IFVwZGF0ZSBiaXRzIHBlciBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+LgorIAkqIHBwYzY0X3JlbG9jLmRlZjogTGlrZXdpc2UuCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDMsNyArMTAzLDcgQEAKKyAJJChMSU5LKSAtc2hhcmVkIC1vICQoQDoubWFwPS5zbykgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkPCAkKGNwdV8kKikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkKEA6LnNvPS5tYXApIFwKKy0JCS1XbCwteixkZWZzIC1XbCwtLWFzLW5lZWRlZCAkKGxpYmVsZikgJChsaWJkdykgJChsaWJtdWRmbGFwKQorKwkJLVdsLC16LGRlZnMgJChMRF9BU19ORUVERUQpICQobGliZWxmKSAkKGxpYmR3KSAkKGxpYm11ZGZsYXApCisgCSQodGV4dHJlbF9jaGVjaykKKyAKKyBsaWJlYmxfaTM4Ni5zbzogJChjcHVfaTM4NikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL0NoYW5nZUxvZwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIsNiArMiwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoTE9DQUxFRElSLCBEQVRBRElSTkFNRSk6IFJlbW92ZWQuCisgCisrMjAwOS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IFVzZSBzZWQgYW5kIGV4cHIgaW5zdGVhZCBvZiBtb2Rlcm4gYmFzaCBleHRlbnNpb25zLgorKworIDIwMDktMDktMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGZvciBtb3JlIG1vZGVybiBhdXRvY29uZi4KK0BAIC0xMCw2ICsxNCwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoemlwX0xJQlMpOiBDaGVjayBmb3IgbGlibHptYSB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciAtZmdudTg5LWlubGluZTsgYWRkIGl0IHRvIFdFWFRSQSBpZiBpdCB3b3Jrcy4KKysKKyAyMDA5LTA0LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoZXVfdmVyc2lvbik6IFJvdW5kIGRvd24gaGVyZSwgbm90IGluIHZlcnNpb24uaCBtYWNyb3MuCitAQCAtMjEsNiArMjksOCBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgX19idWlsdGluX3BvcGNvdW50LgorKworIAkqIGNvbmZpZ3VyZS5hYyAoemxpYiBjaGVjayk6IENoZWNrIGZvciBnemRpcmVjdCwgbmVlZCB6bGliID49IDEuMi4yLjMuCisgCisgCSogY29uZmlndXJlLmFjIChfX3RocmVhZCBjaGVjayk6IFVzZSBBQ19MSU5LX0lGRUxTRSwgaW4gY2FzZSBvZgorQEAgLTEwMSw2ICsxMTEsMTAgQEAKKyAJKiBjb25maWd1cmUuYWM6IEFkZCBkdW1teSBhdXRvbWFrZSBjb25kaXRpb25hbCB0byBnZXQgZGVwZW5kZW5jaWVzCisgCWZvciBub24tZ2VuZXJpYyBsaW5rZXIgcmlnaHQuICBTZWUgc3JjL01ha2VmaWxlLmFtLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbi4KKysKKyAyMDA1LTExLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKTogTmV3IHZhcmlhYmxlLgorQEAgLTE0OCw2ICsxNjIsMTcgQEAKKyAJKiBNYWtlZmlsZS5hbSAoYWxsX1NVQkRJUlMpOiBBZGQgbGliZHdmbC4KKyAJKiBjb25maWd1cmUuYWM6IFdyaXRlIGxpYmR3ZmwvTWFrZWZpbGUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWMgKFdFWFRSQSk6IENoZWNrIGZvciAtV2V4dHJhIGFuZCBzZXQgdGhpcyBzdWJzdGl0dXRpb24uCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RydWN0IHN0YXQgc3RfP3RpbSBtZW1iZXJzLgorKwkqIHNyYy9zdHJpcC5jIChwcm9jZXNzX2ZpbGUpOiBVc2Ugc3RfP3RpbWUgaWYgc3RfP3RpbSBhcmUgbm90IHRoZXJlLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGZ1dGltZXMgZnVuY3Rpb24uCisrCSogc3JjL3N0cmlwLmMgKGhhbmRsZV9lbGYpIFshIEhBVkVfRlVUSU1FU106IFVzZSB1dGltZXMgaW5zdGVhZC4KKysJKGhhbmRsZV9hcikgWyEgSEFWRV9GVVRJTUVTXTogTGlrZXdpc2UuCisrCisgMjAwNS0wNS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgW0FIX0JPVFRPTV0gKElOVERFQ0wsIF9JTlRERUNMKTogTmV3IG1hY3Jvcy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWcvZXUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZy9ldS5hbQkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy9ldS5hbQkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI1LDExICsyNSwxNCBAQAorICMjIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uCisgIyMKKyAKKytXRVhUUkEgPSBAV0VYVFJBQAorK0xEX0FTX05FRURFRCA9IEBMRF9BU19ORUVERURACisrCisgREVGUyA9IC1EX0dOVV9TT1VSQ0UgLURIQVZFX0NPTkZJR19IIC1ETE9DQUxFRElSPSciJHtsb2NhbGVkaXJ9IicKKyBJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvbGliIC1JLi4KKyBBTV9DRkxBR1MgPSAtc3RkPWdudTk5IC1XYWxsIC1Xc2hhZG93IFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19XZXJyb3IpLCwtV2Vycm9yKSBcCistCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkIC1XZXh0cmEpIFwKKysJICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgJChXRVhUUkEpKSBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Zvcm1hdCksLVduby1mb3JtYXQsLVdmb3JtYXQ9MikgXAorIAkgICAgJCgkKCpGKV9DRkxBR1MpCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlnLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZy5oLmluCTIwMTAtMDYtMjggMTk6MDc6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlnLmguaW4JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsOCBAQAorIC8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworIAorKy8qIEhhdmUgX19idWlsdGluX3BvcGNvdW50LiAqLworKyN1bmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysKKyAvKiAkbGliZGlyIHN1YmRpcmVjdG9yeSBjb250YWluaW5nIGxpYmVibCBtb2R1bGVzLiAqLworICN1bmRlZiBMSUJFQkxfU1VCRElSCisgCitAQCAtNTUsNCArNTgsNyBAQAorIC8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyAjdW5kZWYgX0xBUkdFX0ZJTEVTCisgCisrLyogU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0LiAqLworKyN1bmRlZiBfX3RocmVhZAorKworICNpbmNsdWRlIDxldS1jb25maWcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTA2LTI4IDE5OjA3OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTczLDYgKzczLDU0IEBACisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfYzk5IiAhPSB4eWVzXSwKKyAgICAgICBBQ19NU0dfRVJST1IoW2djYyB3aXRoIEM5OSBzdXBwb3J0IHJlcXVpcmVkXSkpCisgCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtV2V4dHJhIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY193ZXh0cmEsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtV2V4dHJhIgorK0FDX0NPTVBJTEVfSUZFTFNFKFt2b2lkIGZvbyAodm9pZCkgeyB9XSwKKysJCSAgYWNfY3ZfY2Nfd2V4dHJhPXllcywgYWNfY3ZfY2Nfd2V4dHJhPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBQ19TVUJTVChXRVhUUkEpCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2Nfd2V4dHJhIiA9IHh5ZXNdLCBbV0VYVFJBPS1XZXh0cmFdLCBbV0VYVFJBPS1XXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1mZ251ODktaW5saW5lIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY19nbnU4OV9pbmxpbmUsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtZmdudTg5LWlubGluZSAtV2Vycm9yIgorK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyt2b2lkIGZvbyAodm9pZCkKKyt7CisrICBpbmxpbmUgdm9pZCBiYXIgKHZvaWQpIHt9CisrICBiYXIgKCk7CisrfQorK2V4dGVybiBpbmxpbmUgdm9pZCBiYXogKHZvaWQpIHt9CisrXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lPXllcywgYWNfY3ZfY2NfZ251ODlfaW5saW5lPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY19nbnU4OV9pbmxpbmUiID0geHllc10sCisrICAgICAgW1dFWFRSQT0iJHtXRVhUUkE6KyRXRVhUUkEgfS1mZ251ODktaW5saW5lIl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uXSwKKysJICAgICAgIGFjX2N2X2FzX25lZWRlZCwgW2RubAorK2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKytpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorK0VPRgorK2lmIEFDX1RSWV9DT01NQU5EKFske0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUworKwkJCSAgICAtZlBJQyAtc2hhcmVkIC1vIGNvbmZ0ZXN0LnNvIGNvbmZ0ZXN0LmMKKysJCQkgICAgLVdsLC0tYXMtbmVlZGVkIDE+JkFTX01FU1NBR0VfTE9HX0ZEXSkKKyt0aGVuCisrICBhY19jdl9hc19uZWVkZWQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfYXNfbmVlZGVkPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCpdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2FzX25lZWRlZCIgPSB4eWVzXSwKKysgICAgICBbTERfQVNfTkVFREVEPS1XbCwtLWFzLW5lZWRlZF0sIFtMRF9BU19ORUVERUQ9XSkKKytBQ19TVUJTVChMRF9BU19ORUVERUQpCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fcG9wY291bnRdLCBhY19jdl9wb3Bjb3VudCwgW2RubAorK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbZXhpdCAoX19idWlsdGluX3BvcGNvdW50ICgxMjcpKTtdXSldLAorKwkgICAgICAgYWNfY3ZfcG9wY291bnQ9eWVzLCBhY19jdl9wb3Bjb3VudD1ubyldKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3BvcGNvdW50IiA9IHh5ZXNdLAorKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9QT1BDT1VOVF0sIFsxXSwgW0hhdmUgX19idWlsdGluX3BvcGNvdW50Ll0pXSkKKysKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fdGhyZWFkIHN1cHBvcnRdLCBhY19jdl90bHMsIFtkbmwKKyAjIFVzZSB0aGUgc2FtZSBmbGFncyB0aGF0IHdlIHVzZSBmb3Igb3VyIERTT3MsIHNvIHRoZSB0ZXN0IGlzIHJlcHJlc2VudGF0aXZlLgorICMgU29tZSBvbGQgY29tcGlsZXIvbGlua2VyL2xpYmMgY29tYmluYXRpb25zIGZhaWwgc29tZSB3YXlzIGFuZCBub3Qgb3RoZXJzLgorQEAgLTg4LDcgKzEzNiwxMCBAQAorIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKyBBU19JRihbdGVzdCAieCRhY19jdl90bHMiICE9IHh5ZXNdLAorLSAgICAgIEFDX01TR19FUlJPUihbX190aHJlYWQgc3VwcG9ydCByZXF1aXJlZF0pKQorKyAgICAgIFtBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorKwkgICAgIFtBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXRocmVhZC1zYWZldHkgcmVxdWlyZXMgX190aHJlYWQgc3VwcG9ydF0pXSwKKysJICAgICBbQUNfREVGSU5FKFtfX3RocmVhZF0sIFsvKiBlbXB0eTogbm8gbXVsdGktdGhyZWFkIHN1cHBvcnQgKi9dLAorKwkJCVtTdHViYmVkIG91dCBpZiBtaXNzaW5nIGNvbXBpbGVyIHN1cHBvcnQuXSldKV0pCisgCisgZG5sIFRoaXMgdGVzdCBtdXN0IGNvbWUgYXMgZWFybHkgYXMgcG9zc2libGUgYWZ0ZXIgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24KKyBkbmwgdGVzdHMsIGJlY2F1c2UgdGhlIGNob2ljZSBvZiB0aGUgZmlsZSBtb2RlbCBjYW4gKGluIHByaW5jaXBsZSkgYWZmZWN0CitAQCAtMjUxLDcgKzMwMiw3IEBACisgCisgIyAxLjIzNDx3aGF0ZXZlcj4gLT4gMTIzNDx3aGF0ZXZlcj4KKyBjYXNlICIkUEFDS0FHRV9WRVJTSU9OIiBpbgorLVtbMC05XV0uKikgZXVfdmVyc2lvbj0iJHtQQUNLQUdFX1ZFUlNJT04vLi99IiA7OworK1tbMC05XV0uKikgZXVfdmVyc2lvbj1gZWNobyAiJFBBQ0tBR0VfVkVSU0lPTiIgfCBzZWQgJ3NAXC5AQCdgIDs7CisgKikgICAgIAkgICBBQ19NU0dfRVJST1IoW2NvbmZ1c2VkIGJ5IHZlcnNpb24gbnVtYmVyICckUEFDS0FHRV9WRVJTSU9OJ10pIDs7CisgZXNhYworIGNhc2UgIiRldV92ZXJzaW9uIiBpbgorQEAgLTI4MCw2ICszMzEsNiBAQAorIGVzYWMKKyAKKyAjIFJvdW5kIHVwIHRvIHRoZSBuZXh0IHJlbGVhc2UgQVBJICh4LnkpIHZlcnNpb24uCistW2V1X3ZlcnNpb249JFsoJGV1X3ZlcnNpb24gKyA5OTkpIC8gMTAwMF1dCisrZXVfdmVyc2lvbj1gZXhwciBcKCAkZXVfdmVyc2lvbiArIDk5OSBcKSAvIDEwMDBgCisgCisgQUNfT1VUUFVUCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNCw2ICsxNCw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBldS1jb25maWcuaCBbISBIQVZFX0JVSUxUSU5fUE9QQ09VTlRdCisrCShfX2J1aWx0aW5fcG9wY291bnQpOiBOZXcgaW5saW5lIGZ1bmN0aW9uLgorKworIAkqIGV1LWNvbmZpZy5oOiBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24uCisgCisgMjAwOS0wMS0xNyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtNzAsNiArNzMsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZXVfYV9TT1VSQ0VTKTogQWRkIGl0LgorIAkqIHN5c3RlbS5oOiBEZWNsYXJlIGNyYzMyX2ZpbGUuCisgCisrMjAwNS0wMi0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA0LTMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbTogVXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMgZm9yIHhtYWxsb2MuYy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvZXUtY29uZmlnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9ldS1jb25maWcuaAkyMDA5LTA4LTEyIDE0OjIzOjIyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9ldS1jb25maWcuaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE4Miw2ICsxODIsMTcgQEAKKyAvKiBUaGlzIG1hY3JvIGlzIHVzZWQgYnkgdGhlIHRlc3RzIGNvbmRpdGlvbmFsaXplIGZvciBzdGFuZGFsb25lIGJ1aWxkaW5nLiAgKi8KKyAjZGVmaW5lIEVMRlVUSUxTX0hFQURFUihuYW1lKSA8bGliIyNuYW1lLmg+CisgCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysjIGRlZmluZSBfX2J1aWx0aW5fcG9wY291bnQgaGFrbWVtX3BvcGNvdW50Cisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisraGFrbWVtX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQgeCkKKyt7CisrICAvKiBIQUtNRU0gMTY5ICovCisrICB1bnNpZ25lZCBpbnQgbiA9IHggLSAoKHggPj4gMSkgJiAwMzMzMzMzMzMzMzMpIC0gKCh4ID4+IDIpICYgMDExMTExMTExMTExKTsKKysgIHJldHVybiAoKG4gKyAobiA+PiAzKSkgJiAwMzA3MDcwNzA3MDcpICUgNjM7CisrfQorKyNlbmRpZgkvKiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQgKi8KKysKKyAKKyAjaWZkZWYgU0hBUkVECisgIyBkZWZpbmUgT0xEX1ZFUlNJT04obmFtZSwgdmVyc2lvbikgXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmFzbS9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJhc20vQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjcsNiArNjcsMTEgQEAKKyAJKiBhc21fZXJyb3IuYzogQWRkIG5ldyBlcnJvciBBU01fRV9JT0VSUk9SLgorIAkqIGxpYmFzbVAuaDogQWRkIEFTTV9FX0lPRVJST1IgZGVmaW5pdGlvbi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtOSw2ICs5LDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGkzODZfZGlzYXNtLmMgKGkzODZfZGlzYXNtKTogQWRkIGFib3J0IGFmdGVyIGFzc2VydC1jb25zdGFudCBmb3Igb2xkCisrCWNvbXBpbGVycyB0aGF0IGRvbid0IHJlYWxpemUgaXQncyBub3JldHVybi4KKysKKyAJKiBNYWtlZmlsZS5hbSAoaTM4Nl9wYXJzZV9DRkxBR1MpOiBVc2UgcXVvdGVzIGFyb3VuZCBjb21tYW5kCisgCXN1YnN0aXR1dGlvbiB0aGF0IGNhbiBwcm9kdWNlIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAKK0BAIC0zMzgsNiArMzQxLDExIEBACisgCSogZGVmcy9pMzg2LmRvYzogTmV3IGZpbGUuCisgCSogZGVmcy94ODZfNjQ6IE5ldyBmaWxlLgorIAorKzIwMDUtMDQtMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluc3RlYWQgb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvaTM4Nl9kaXNhc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliY3B1L2kzODZfZGlzYXNtLmMJMjAwOS0wMS0wOCAyMDo1NjozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvaTM4Nl9kaXNhc20uYwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTc5MSw2ICs3OTEsNyBAQAorIAorIAkJCWRlZmF1bHQ6CisgCQkJICBhc3NlcnQgKCEgIklOVkFMSUQgbm90IGhhbmRsZWQiKTsKKysJCQkgIGFib3J0ICgpOworIAkJCX0KKyAJCSAgICB9CisgCQkgIGVsc2UKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkdy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI3Niw2ICsyNzYsMTAgQEAKKyAKKyAJKiBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZS5jOiBJbnRlZ3JhdGUgRFdfQVRfc3BlY2lmaWNhdGlvbiB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJkdy5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZHdhcmZfZ2V0c2NvcGV2YXIuYzogVXNlIGR3YXJmX2RpZW5hbWUuCitAQCAtMTA0NCw2ICsxMDQ4LDExIEBACisgCisgMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIGR3YXJmX2Zvcm1yZWZfZGllLmMgKGR3YXJmX2Zvcm1yZWZfZGllKTogQWRkIENVIGhlYWRlciBvZmZzZXQgdG8KKyAJZm9ybXJlZiBvZmZzZXQuCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvbGliZHcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHcvbGliZHcuaAkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2xpYmR3LmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC04NDIsNyArODQyLDcgQEAKKyAKKyAKKyAvKiBJbmxpbmUgb3B0aW1pemF0aW9ucy4gICovCistI2lmZGVmIF9fT1BUSU1JWkVfXworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAvKiBSZXR1cm4gYXR0cmlidXRlIGNvZGUgb2YgZ2l2ZW4gYXR0cmlidXRlLiAgKi8KKyBfX2xpYmR3X2V4dGVybl9pbmxpbmUgdW5zaWduZWQgaW50CisgZHdhcmZfd2hhdGF0dHIgKER3YXJmX0F0dHJpYnV0ZSAqYXR0cikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkd2ZsL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHdmbC9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkd2ZsL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEyNjUsNiArMTI2NSwxMSBAQAorIAorIDIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBNYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGQgbG9jMmMuYy4KKyAKKyAJKiB0ZXN0Mi5jIChtYWluKTogQ2hlY2sgc3NjYW5mIHJlc3VsdCB0byBxdWlldCB3YXJuaW5nLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVibC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVibC9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlYmwvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjI0LDYgKzYyNCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJlYmxfKl9zb19TT1VSQ0VTKTogU2V0IHRvICQoKl9TUkNTKSBzbyBkZXBlbmRlbmN5CisgCXRyYWNraW5nIHdvcmtzIHJpZ2h0LgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGliZWJsX3g4Nl82NC5tYXA6IEFkZCB4ODZfNjRfY29yZV9ub3RlLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNi0xNCAyMToxNzoyMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjU3LDYgKzY1NywxMSBAQAorIAorIAkqIGVsZi5oOiBVcGRhdGUgZnJvbSBnbGliYy4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZWxmX2JlZ2luLmMgKHJlYWRfZmlsZSkgW19NVURGTEFQXTogRG9uJ3QgdXNlIG1tYXAgZm9yIG5vdy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9jb21tb24uaAkyMDA5LTAxLTA4IDIwOjU2OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9jb21tb24uaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE2MCw3ICsxNjAsNyBAQAorICAgKFZhcikgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitAQCAtMTY5LDcgKzE2OSw3IEBACisgICAoRHN0KSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9hZGRyMmxpbmUuYwkyMDEwLTA1LTI4IDE0OjM4OjMwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYwkyMDEwLTA3LTAzIDEzOjA1OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTQ0NywxMCArNDQ3LDEwIEBACisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTY1LDggKzE2NSwxNiBAQAorIAkqIHJlYWRlbGYuYyAoYXR0cl9jYWxsYmFjayk6IFVzZSBwcmludF9ibG9jayBvbmx5IHdoZW4gd2UgZG9uJ3QgdXNlCisgCXByaW50X29wcy4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxkLmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBzdHJpbmdzLmMgKHJlYWRfYmxvY2spOiBDb25kaXRpb25hbGl6ZSBwb3NpeF9mYWR2aXNlIHVzZQorKwlvbiBbUE9TSVhfRkFEVl9TRVFVRU5USUFMXS4KKysJRnJvbSBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4uCisrCisgCSogYXIuYyAoZG9fb3Blcl9leHRyYWN0KTogVXNlIHBhdGhjb25mIGluc3RlYWQgb2Ygc3RhdGZzLgorIAorIDIwMDktMDgtMDEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTMzMCw2ICszMzgsOCBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfZnJhbWVfc2VjdGlvbik6IFVzZSB0IGluc3RlYWQgb2YgaiBmb3JtYXRzCisgCWZvciBwdHJkaWZmX3QgT0ZGU0VULgorIAorKwkqIGFkZHIybGluZS5jIChoYW5kbGVfYWRkcmVzcyk6IFVzZSAlYSBpbnN0ZWFkIG9mICVtIGZvciBjb21wYXRpYmlsaXR5LgorKworIDIwMDktMDEtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfcHJvZ3JhbV9oZWFkZXIpOiBGaXggdHlwbyBpbiAuZWhfZnJhbWVfaGRyIHNlY3Rpb24KK0BAIC01MTMsNiArNTIzLDExIEBACisgCXRoYXQgbWF0Y2hlcyBpdHMgUFRfTE9BRCdzIHBfZmxhZ3MgJn4gUEZfVy4gIE9uIHNwYXJjLCBQRl9YIHJlYWxseQorIAlpcyB2YWxpZCBpbiBSRUxSTy4KKyAKKysyMDA4LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoZHVtcF9hcmNoaXZlX2luZGV4KTogVHdlYWsgcG9ydGFiaWxpdHkgaGFjaworKwl0byBtYXRjaCBbX19HTlVDX18gPCA0XSB0b28uCisrCisgMjAwOC0wMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2F0dHJpYnV0ZXMpOiBBZGQgYSBjYXN0LgorQEAgLTc2NCw2ICs3NzksOCBAQAorIAorIAkqIHJlYWRlbGYuYyAoaGV4X2R1bXApOiBGaXggcm91bmRpbmcgZXJyb3IgaW4gd2hpdGVzcGFjZSBjYWxjdWxhdGlvbi4KKyAKKysJKiBNYWtlZmlsZS5hbSAocmVhZGVsZl9ub19XZXJyb3IpOiBOZXcgdmFyaWFibGUuCisrCisgMjAwNy0xMC0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBtYWtlLWRlYnVnLWFyY2hpdmUuaW46IE5ldyBmaWxlLgorQEAgLTEyMDMsNiArMTIyMCwxMCBAQAorIAkqIGVsZmxpbnQuYyAodmFsaWRfZV9tYWNoaW5lKTogQWRkIEVNX0FMUEhBLgorIAlSZXBvcnRlZCBieSBDaHJpc3RpYW4gQWljaGluZ2VyIDxHcmVlazBAZ214Lm5ldD4uCisgCisrCSogc3RyaW5ncy5jIChtYXBfZmlsZSk6IERlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgdG8KKysJTUFEVl9TRVFVRU5USUFMIGlmIHVuZGVmaW5lZC4gIAlEb24ndCBjYWxsIHBvc2l4X21hZHZpc2UKKysJaWYgbmVpdGhlciBpcyBkZWZpbmVkLgorKworIDIwMDYtMDgtMDggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfZHluYW1pYyk6IERvbid0IHJlcXVpcmUgRFRfSEFTSCBmb3IgRFRfU1lNVEFCLgorQEAgLTEyNzksNiArMTMwMCwxMCBAQAorIAkqIE1ha2VmaWxlLmFtOiBBZGQgaGFja3MgdG8gY3JlYXRlIGRlcGVuZGVuY3kgZmlsZXMgZm9yIG5vbi1nZW5lcmljCisgCWxpbmtlci4KKyAKKysyMDA2LTA0LTA1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHN0cmluZ3MuYyAoTUFQX1BPUFVMQVRFKTogRGVmaW5lIHRvIDAgaWYgdW5kZWZpbmVkLgorKworIDIwMDYtMDYtMTIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxkZ2VuZXJpYy5jIChsZF9nZW5lcmljX2dlbmVyYXRlX3NlY3Rpb25zKTogRG9uJ3QgY3JlYXRlIC5pbnRlcnAKK0BAIC0xNjI3LDYgKzE2NTIsMTEgQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xvY19zZWN0aW9uKTogRml4IGluZGVudGF0aW9uIGZvciBsYXJnZXIKKyAJYWRkcmVzcyBzaXplLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xpbmVfc2VjdGlvbik6IFByaW50IHNlY3Rpb24gb2Zmc2V0IG9mIGVhY2gKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZmluZHRleHRyZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2ZpbmR0ZXh0cmVsLmMJMjAwOS0wMi0xMSAwMToxMjo1OS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvZmluZHRleHRyZWwuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTQ5MCw3ICs0OTAsMTEgQEAKKyAKKyAKKyBzdGF0aWMgdm9pZAorLWNoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzW25zZWdtZW50c10sCisrY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbCisrI2lmIF9fR05VQ19fID49IDQKKysJCQkJCQkgICAgICBuc2VnbWVudHMKKysjZW5kaWYKKysJICAgXSwKKyAJICAgR0VsZl9BZGRyIGFkZHIsIEVsZiAqZWxmLCBFbGZfU2NuICpzeW1zY24sIER3YXJmICpkdywKKyAJICAgY29uc3QgY2hhciAqZm5hbWUsIGJvb2wgbW9yZV90aGFuX29uZSwgdm9pZCAqKmtub3duc3JjcykKKyB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZC5oCTIwMDktMDYtMTMgMjI6Mzk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkLmgJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTIyLDYgKzExMjIsNyBAQAorIAorIC8qIENoZWNrZWQgd2hldGhlciB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBmcm9tIGEgRFNPLiAgKi8KKyBleHRlcm4gYm9vbCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpOworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorICNlbmRpZgorQEAgLTExMzksNSArMTE0MCw2IEBACisgCisgICByZXR1cm4gc3ltLT5kZWZpbmVkICYmIHN5bS0+aW5fZHNvOworIH0KKysjZW5kaWYJLyogT3B0aW1pemluZyBhbmQgbm90IEdDQyA0LjIuICAqLworIAorICNlbmRpZgkvKiBsZC5oICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC05OSw2ICs5OSw5IEBACisgIyBYWFggV2hpbGUgdGhlIGZpbGUgaXMgbm90IGZpbmlzaGVkLCBkb24ndCB3YXJuIGFib3V0IHRoaXMKKyBsZGdlbmVyaWNfbm9fV3VudXNlZCA9IHllcworIAorKyMgQnVnZ3kgb2xkIGNvbXBpbGVycy4KKytyZWFkZWxmX25vX1dlcnJvciA9IHllcworKworIHJlYWRlbGZfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVibCkgJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkgLWxkbAorIG5tX0xEQUREID0gJChsaWJkdykgJChsaWJlYmwpICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApIC1sZGwKKyBzaXplX0xEQUREID0gJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9yZWFkZWxmLmMJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNzg0NSw3ICs3ODQ1LDcgQEAKKyAJICBpZiAodW5saWtlbHkgKGVsZl9yYW5kIChlbGYsIGFzX29mZikgPT0gMCkKKyAJICAgICAgfHwgdW5saWtlbHkgKChzdWJlbGYgPSBlbGZfYmVnaW4gKC0xLCBFTEZfQ19SRUFEX01NQVAsIGVsZikpCisgCQkJICAgPT0gTlVMTCkpCistI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpCisrI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpIHx8IF9fR05VQ19fIDwgNAorIAkgICAgd2hpbGUgKDEpCisgI2VuZGlmCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmluZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3N0cmluZ3MuYwkyMDA5LTAyLTExIDAxOjEyOjU5LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpbmdzLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC01MSw2ICs1MSwxMCBAQAorIAorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZuZGVmIE1BUF9QT1BVTEFURQorKyMgZGVmaW5lIE1BUF9QT1BVTEFURSAwCisrI2VuZGlmCisrCisgCisgLyogUHJvdG90eXBlcyBvZiBsb2NhbCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBpbnQgcmVhZF9mZCAoaW50IGZkLCBjb25zdCBjaGFyICpmbmFtZSwgb2ZmNjRfdCBmZGxlbik7CitAQCAtNDkxLDggKzQ5NSwxMyBAQAorIAkJICAgIGZkLCBzdGFydF9vZmYpOworICAgICAgIGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkKKyAJeworKyNpZiAhZGVmaW5lZCBQT1NJWF9NQURWX1NFUVVFTlRJQUwgJiYgZGVmaW5lZCBNQURWX1NFUVVFTlRJQUwKKysjIGRlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgTUFEVl9TRVFVRU5USUFMCisrI2VuZGlmCisrI2lmZGVmIFBPU0lYX01BRFZfU0VRVUVOVElBTAorIAkgIC8qIFdlIHdpbGwgZ28gdGhyb3VnaCB0aGUgbWFwcGluZyBzZXF1ZW50aWFsbHkuICAqLworIAkgICh2b2lkKSBwb3NpeF9tYWR2aXNlIChtZW0sIG1hcF9zaXplLCBQT1NJWF9NQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorIAkgIGJyZWFrOworIAl9CisgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9NRU0pCitAQCAtNTg2LDkgKzU5NSwxMSBAQAorICAgICAgIGVsZm1hcF9vZmYgPSBmcm9tICYgfihwcyAtIDEpOworICAgICAgIGVsZm1hcF9iYXNlID0gZWxmbWFwID0gbWFwX2ZpbGUgKGZkLCBlbGZtYXBfb2ZmLCBmZGxlbiwgJmVsZm1hcF9zaXplKTsKKyAKKysjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCisgICAgICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCisgCS8qIExldCB0aGUga2VybmVsIGtub3cgd2UgYXJlIGdvaW5nIHRvIHJlYWQgZXZlcnl0aGluZyBpbiBzZXF1ZW5jZS4gICovCisgCSh2b2lkKSBwb3NpeF9mYWR2aXNlIChmZCwgMCwgMCwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9zdHJpcC5jCTIwMTAtMDEtMTUgMDk6MDU6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC01Myw2ICs1MywxMiBAQAorICNpbmNsdWRlIDxsaWJlYmwuaD4KKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmZGVmIEhBVkVfRlVUSU1FUworKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIGZ1dGltZXMgKGZkLCB0dnApCisrI2Vsc2UKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSB1dGltZXMgKGZuYW1lLCB0dnApCisrI2VuZGlmCisrCisgCisgLyogTmFtZSBhbmQgdmVyc2lvbiBvZiBwcm9ncmFtLiAgKi8KKyBzdGF0aWMgdm9pZCBwcmludF92ZXJzaW9uIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSk7CitAQCAtMzAxLDggKzMwNywxOCBAQAorIAorICAgICAgIC8qIElmIHdlIGhhdmUgdG8gcHJlc2VydmUgdGhlIHRpbWVzdGFtcCwgd2UgbmVlZCBpdCBpbiB0aGUKKyAJIGZvcm1hdCB1dGltZXMoKSB1bmRlcnN0YW5kcy4gICovCisrI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQVRJTQorICAgICAgIFRJTUVTUEVDX1RPX1RJTUVWQUwgKCZ0dlswXSwgJnByZV9zdC5zdF9hdGltKTsKKysjZWxzZQorKyAgICAgIHR2WzBdLnR2X3NlYyA9IHByZV9zdC5zdF9hdGltZTsKKysgICAgICB0dlswXS50dl91c2VjID0gMDsKKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9NVElNCisgICAgICAgVElNRVNQRUNfVE9fVElNRVZBTCAoJnR2WzFdLCAmcHJlX3N0LnN0X210aW0pOworKyNlbHNlCisrICAgICAgdHZbMV0udHZfc2VjID0gcHJlX3N0LnN0X2F0aW1lOworKyAgICAgIHR2WzFdLnR2X3VzZWMgPSAwOworKyNlbmRpZgorICAgICB9CisgCisgICAvKiBPcGVuIHRoZSBmaWxlLiAgKi8KK0BAIC0xNzQ3LDcgKzE3NjMsNyBAQAorICAgLyogSWYgcmVxdWVzdGVkLCBwcmVzZXJ2ZSB0aGUgdGltZXN0YW1wLiAgKi8KKyAgIGlmICh0dnAgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmIChmdXRpbWVzIChmZCwgdHZwKSAhPSAwKQorKyAgICAgIGlmIChGVVRJTUVTIChmZCwgb3V0cHV0X2ZuYW1lLCB0dnApICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIGdldHRleHQgKCJcCisgY2Fubm90IHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBkYXRlIG9mICclcyciKSwKK0BAIC0xODA0LDcgKzE4MjAsNyBAQAorIAorICAgaWYgKHR2cCAhPSBOVUxMKQorICAgICB7CistICAgICAgaWYgKHVubGlrZWx5IChmdXRpbWVzIChmZCwgdHZwKSAhPSAwKSkKKysgICAgICBpZiAodW5saWtlbHkgKEZVVElNRVMgKGZkLCBmbmFtZSwgdHZwKSAhPSAwKSkKKyAJeworIAkgIGVycm9yICgwLCBlcnJubywgZ2V0dGV4dCAoIlwKKyBjYW5ub3Qgc2V0IGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIGRhdGUgb2YgJyVzJyIpLCBmbmFtZSk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTQsNiArMTU0LDggQEAKKyAKKyAyMDA4LTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGxpbmUyYWRkci5jIChtYWluKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorKworIAkqIHRlc3RmaWxlNDUuUy5iejI6IEFkZCB0ZXN0cyBmb3IgY2x0cSwgY3F0by4KKyAJKiB0ZXN0ZmlsZTQ1LmV4cGVjdC5iejI6IEFkanVzdC4KKyAKK0BAIC04NjIsNiArODY0LDExIEBACisgCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2guCisgCShFWFRSQV9ESVNUKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2ggYW5kIHRlc3RmaWxlMTguYnoyLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZ2V0LWZpbGVzLmMgKG1haW4pOiBVc2UgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVyLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9saW5lMmFkZHIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTMyLDcgKzEzMiw3IEBACisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTg1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKQEAgLTAsMCArMSwxNzA5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTY0OSwxMCArNjQ5LDUzIEBACisgCUlmIHNlY3Rpb24gY29udGVudCBoYXNuJ3QgYmVlbiByZWFkIHlldCwgZG8gaXQgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZQorIAlibG9jayBzaXplLiAgSWYgbm8gc2VjdGlvbiBkYXRhIHByZXNlbnQsIGluZmVyIHNpemUgb2Ygc2VjdGlvbiBoZWFkZXIuCisgCisrMjAwNS0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogbGliZWxmUC5oIChJTlZBTElEX05EWCk6IERlZmluZS4KKysJKiBnZWxmX2dldGR5bi5jIChnZWxmX2dldGR5bik6IFVzZSBpdC4gIFJlbW92ZSBuZHggPCAwIHRlc3QgaWYgYW55LgorKwkqIGdlbGZfZ2V0bGliLmMgKGdlbGZfZ2V0bGliKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRtb3ZlLmMgKGdlbGZfZ2V0bW92ZSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0cmVsLmMgKGdlbGZfZ2V0cmVsKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRyZWxhLmMgKGdlbGZfZ2V0cmVsYSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltLmMgKGdlbGZfZ2V0c3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRzeW1pbmZvLmMgKGdlbGZfZ2V0c3ltaW5mbyk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltc2huZHguYyAoZ2VsZl9nZXRzeW1zaG5keCk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0dmVyc3ltLmMgKGdlbGZfZ2V0dmVyc3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfZHluLmMgKGdlbGZfdXBkYXRlX2R5bik6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX2xpYi5jIChnZWxmX3VwZGF0ZV9saWIpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9tb3ZlLmMgKGdlbGZfdXBkYXRlX21vdmUpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9yZWwuYyAoZ2VsZl91cGRhdGVfcmVsKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfcmVsYS5jIChnZWxmX3VwZGF0ZV9yZWxhKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfc3ltLmMgKGdlbGZfdXBkYXRlX3N5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bWluZm8uYyAoZ2VsZl91cGRhdGVfc3ltaW5mbyk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bXNobmR4LmMgKGdlbGZfdXBkYXRlX3N5bXNobmR4KTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfdmVyc3ltLmMgKGdlbGZfdXBkYXRlX3ZlcnN5bSk6IExpa2V3aXNlLgorKwkqIGVsZl9uZXdzY24uYyAoZWxmX25ld3Njbik6IENoZWNrIGZvciBvdmVyZmxvdy4KKysJKiBlbGYzMl91cGRhdGVmaWxlLmMgKF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVtbWFwKSk6IExpa2V3aXNlLgorKwkoX19lbGZ3MihMSUJFTEZCSVRTLHVwZGF0ZWZpbGUpKTogTGlrZXdpc2UuCisrCSogZWxmX2JlZ2luLmMgKGZpbGVfcmVhZF9lbGYpOiBMaWtld2lzZS4KKysJKiBlbGYzMl9uZXdwaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsbmV3cGhkcikpOiBMaWtld2lzZS4KKysJKiBlbGZfZ2V0YXJzeW0uYyAoZWxmX2dldGFyc3ltKTogTGlrZXdpc2UuCisrCSogZWxmMzJfZ2V0c2hkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHNoZHIpKTogTGlrZXdpc2UuCisgMjAwNS0wNS0xMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmLmg6IFVwZGF0ZSBhZ2Fpbi4KKyAKKysyMDA1LTA1LTE3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBlbGYzMl9nZXRwaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsZ2V0cGhkcikpOiBDaGVjayBpZiBwcm9ncmFtIGhlYWRlcgorKwl0YWJsZSBmaXRzIGludG8gb2JqZWN0J3MgYm91bmRzLgorKwkqIGVsZl9nZXRzaHN0cm5keC5jIChlbGZfZ2V0c2hzdHJuZHgpOiBBZGQgZWxmLT5zdGFydF9vZmZzZXQgdG8KKysJZWxmLT5tYXBfYWRkcmVzcy4gIENoZWNrIGlmIGZpcnN0IHNlY3Rpb24gaGVhZGVyIGZpdHMgaW50byBvYmplY3QncworKwlib3VuZHMuCisrCSogZWxmMzJfZ2V0c2hkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHNoZHIpKToKKysJQ2hlY2sgaWYgc2VjdGlvbiBoZWFkZXIgdGFibGUgZml0cyBpbnRvIG9iamVjdCdzIGJvdW5kcy4KKysJKiBlbGZfYmVnaW4uYyAoZ2V0X3NobnVtKTogRW5zdXJlIHNlY3Rpb24gaGVhZGVycyBmaXRzIGludG8KKysJb2JqZWN0J3MgYm91bmRzLgorKwkoZmlsZV9yZWFkX2VsZik6IE1ha2Ugc3VyZSBzY25jbnQgaXMgc21hbGwgZW5vdWdoIHRvIGFsbG9jYXRlIGJvdGgKKysJRWxmWFhfU2hkciBhbmQgRWxmX1NjbiBhcnJheS4gIE1ha2Ugc3VyZSBzZWN0aW9uIGFuZCBwcm9ncmFtIGhlYWRlcgorKwl0YWJsZXMgZml0IGludG8gb2JqZWN0J3MgYm91bmRzLiAgQXZvaWQgbWVtb3J5IGxlYWsgb24gZmFpbHVyZS4KKysKKyAyMDA1LTA1LTA5ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGYuaDogVXBkYXRlIGZyb20gZ2xpYmMuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHBoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX2dldHBoZHIuYwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTQsNiArMTE0LDE2IEBACisgCisgICAgICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTCkKKyAJeworKwkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkgICAgIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfcGhvZmYgPj0gZWxmLT5tYXhpbXVtX3NpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIGVoZHItPmVfcGhvZmYgPCBzaXplKSkKKysJICAgIHsKKysJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfUEhEUik7CisrCSAgICAgIGdvdG8gb3V0OworKwkgICAgfQorKworIAkgIC8qIEFsbCB0aGUgZGF0YSBpcyBhbHJlYWR5IG1hcHBlZC4gIFVzZSBpdC4gICovCisgCSAgdm9pZCAqZmlsZV9waGRyID0gKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MKKyAJCQkgICAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBlaGRyLT5lX3Bob2ZmKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCTIwMDktMDYtMTMgMjI6NDE6NDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHNoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogUmV0dXJuIHNlY3Rpb24gaGVhZGVyLgorLSAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNSwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OC4KKyAKK0BAIC04MSw3ICs4MSw4IEBACisgICAgIGdvdG8gb3V0OworIAorICAgc2l6ZV90IHNobnVtOworLSAgaWYgKF9fZWxmX2dldHNoZHJudW1fcmRsb2NrIChlbGYsICZzaG51bSkgIT0gMCkKKysgIGlmIChfX2VsZl9nZXRzaGRybnVtX3JkbG9jayAoZWxmLCAmc2hudW0pICE9IDAKKysgICAgICB8fCBzaG51bSA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKSkKKyAgICAgZ290byBvdXQ7CisgICBzaXplX3Qgc2l6ZSA9IHNobnVtICogc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKTsKKyAKK0BAIC05OCw2ICs5OSwxNiBAQAorIAorICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKyAgICAgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBlbGYtPm1heGltdW1fc2l6ZSkKKysJICB8fCB1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBlaGRyLT5lX3Nob2ZmIDwgc2l6ZSkpCisrCXsKKysJICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJICBnb3RvIGZyZWVfYW5kX291dDsKKysJfQorKworICAgICAgIEVsZlcyKExJQkVMRkJJVFMsU2hkcikgKm5vdGN2dDsKKyAKKyAgICAgICAvKiBBbGwgdGhlIGRhdGEgaXMgYWxyZWFkeSBtYXBwZWQuICBJZiB3ZSBjb3VsZCB1c2UgaXQKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfbmV3cGhkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfbmV3cGhkci5jCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX25ld3BoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzNSw2ICsxMzUsMTIgQEAKKyAJICAgfHwgY291bnQgPT0gUE5fWE5VTQorIAkgICB8fCBlbGYtPnN0YXRlLkVMRlcoZWxmLExJQkVMRkJJVFMpLnBoZHIgPT0gTlVMTCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoY291bnQgPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxQaGRyKSkpKQorKwl7CisrCSAgcmVzdWx0ID0gTlVMTDsKKysJICBnb3RvIG91dDsKKysJfQorKworICAgICAgIC8qIEFsbG9jYXRlIGEgbmV3IHByb2dyYW0gaGVhZGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZgorIAkgZWxlbWVudHMuICAqLworICAgICAgIHJlc3VsdCA9IChFbGZXMihMSUJFTEZCSVRTLFBoZHIpICopCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYwkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMjMsNiArMjIzLDkgQEAKKyAgIC8qIFdyaXRlIGFsbCB0aGUgc2VjdGlvbnMuICBXZWxsLCBvbmx5IHRob3NlIHdoaWNoIGFyZSBtb2RpZmllZC4gICovCisgICBpZiAoc2hudW0gPiAwKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChzaG51bSA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZfU2NuICopKSkKKysgCXJldHVybiAxOworKworICAgICAgIEVsZl9TY25MaXN0ICpsaXN0ID0gJmVsZi0+c3RhdGUuRUxGVyhlbGYsTElCRUxGQklUUykuc2NuczsKKyAgICAgICBFbGZfU2NuICoqc2NucyA9IChFbGZfU2NuICoqKSBhbGxvY2EgKHNobnVtICogc2l6ZW9mIChFbGZfU2NuICopKTsKKyAgICAgICBjaGFyICpjb25zdCBzaGRyX3N0YXJ0ID0gKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorQEAgLTY0NSw2ICs2NDgsMTAgQEAKKyAgIC8qIFdyaXRlIGFsbCB0aGUgc2VjdGlvbnMuICBXZWxsLCBvbmx5IHRob3NlIHdoaWNoIGFyZSBtb2RpZmllZC4gICovCisgICBpZiAoc2hudW0gPiAwKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChzaG51bSA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbiAqKQorKwkJCQkJKyBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsU2hkcikpKSkpCisrCXJldHVybiAxOworKworICAgICAgIG9mZl90IHNoZHJfb2Zmc2V0ID0gZWxmLT5zdGFydF9vZmZzZXQgKyBlaGRyLT5lX3Nob2ZmOworICNpZiBFVl9OVU0gIT0gMgorICAgICAgIHhmY3RfdCBzaGRyX2ZjdHAgPSBfX2VsZl94ZmN0c3RvbVtfX2xpYmVsZl92ZXJzaW9uIC0gMV1bRVZfQ1VSUkVOVCAtIDFdW0VMRlcoRUxGQ0xBU1MsIExJQkVMRkJJVFMpIC0gMV1bRUxGX1RfU0hEUl07CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2JlZ2luLmMJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjUsNyArMTY1LDggQEAKKyAKKyAgICAgICBpZiAodW5saWtlbHkgKHJlc3VsdCA9PSAwKSAmJiBlaGRyLmUzMi0+ZV9zaG9mZiAhPSAwKQorIAl7CistCSAgaWYgKGVoZHIuZTMyLT5lX3Nob2ZmICsgc2l6ZW9mIChFbGYzMl9TaGRyKSA+IG1heHNpemUpCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLmUzMi0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAobWF4c2l6ZSAtIGVoZHIuZTMyLT5lX3Nob2ZmIDwgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisgCSAgICAvKiBDYW5ub3QgcmVhZCB0aGUgZmlyc3Qgc2VjdGlvbiBoZWFkZXIuICAqLworIAkgICAgcmV0dXJuIDA7CisgCitAQCAtMjEzLDcgKzIxNCw4IEBACisgCisgICAgICAgaWYgKHVubGlrZWx5IChyZXN1bHQgPT0gMCkgJiYgZWhkci5lNjQtPmVfc2hvZmYgIT0gMCkKKyAJeworLQkgIGlmIChlaGRyLmU2NC0+ZV9zaG9mZiArIHNpemVvZiAoRWxmNjRfU2hkcikgPiBtYXhzaXplKQorKwkgIGlmICh1bmxpa2VseSAoZWhkci5lNjQtPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKGVoZHIuZTY0LT5lX3Nob2ZmICsgc2l6ZW9mIChFbGY2NF9TaGRyKSA+IG1heHNpemUpKQorIAkgICAgLyogQ2Fubm90IHJlYWQgdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGVyLiAgKi8KKyAJICAgIHJldHVybiAwOworIAorQEAgLTI4NSw2ICsyODcsMTUgQEAKKyAgICAgLyogQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zLiAgKi8KKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICAvKiBDaGVjayBmb3IgdG9vIG1hbnkgc2VjdGlvbnMuICAqLworKyAgaWYgKGVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCisrICAgIHsKKysgICAgICBpZiAoc2NuY250ID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuKSArIHNpemVvZiAoRWxmMzJfU2hkcikpKQorKwlyZXR1cm4gTlVMTDsKKysgICAgfQorKyAgZWxzZSBpZiAoc2NuY250ID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuKSArIHNpemVvZiAoRWxmNjRfU2hkcikpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKyAgIC8qIFdlIGNhbiBub3cgYWxsb2NhdGUgdGhlIG1lbW9yeS4gIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHNlY3Rpb24gaGVhZGVycywKKyAgICAgIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBhIHplcm90aCBzZWN0aW9uIGluIGNhc2Ugd2UgbmVlZCBpdCBsYXRlci4gICovCisgICBjb25zdCBzaXplX3Qgc2NubWF4ID0gKHNjbmNudCA/OiAoY21kID09IEVMRl9DX1JEV1IgfHwgY21kID09IEVMRl9DX1JEV1JfTU1BUCkKK0BAIC0zMjQsNiArMzM1LDE2IEBACisgCXsKKyAJICAvKiBXZSBjYW4gdXNlIHRoZSBtbWFwcGVkIG1lbW9yeS4gICovCisgCSAgZWxmLT5zdGF0ZS5lbGYzMi5laGRyID0gZWhkcjsKKysKKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKG1heHNpemUgLSBlaGRyLT5lX3Nob2ZmCisrCQkJICAgPCBzY25jbnQgKiBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKysJICAgIHsKKysJICAgIGZyZWVfYW5kX291dDoKKysJICAgICAgZnJlZSAoZWxmKTsKKysJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfRklMRSk7CisrCSAgICAgIHJldHVybiBOVUxMOworKwkgICAgfQorIAkgIGVsZi0+c3RhdGUuZWxmMzIuc2hkcgorIAkgICAgPSAoRWxmMzJfU2hkciAqKSAoKGNoYXIgKikgZWhkciArIGVoZHItPmVfc2hvZmYpOworIAorQEAgLTQxMCw2ICs0MzEsMTEgQEAKKyAJeworIAkgIC8qIFdlIGNhbiB1c2UgdGhlIG1tYXBwZWQgbWVtb3J5LiAgKi8KKyAJICBlbGYtPnN0YXRlLmVsZjY0LmVoZHIgPSBlaGRyOworKworKwkgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAoZWhkci0+ZV9zaG9mZgorKwkJCSAgICsgc2NuY250ICogc2l6ZW9mIChFbGYzMl9TaGRyKSA+IG1heHNpemUpKQorKwkgICAgZ290byBmcmVlX2FuZF9vdXQ7CisgCSAgZWxmLT5zdGF0ZS5lbGY2NC5zaGRyCisgCSAgICA9IChFbGY2NF9TaGRyICopICgoY2hhciAqKSBlaGRyICsgZWhkci0+ZV9zaG9mZik7CisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRhcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2dldGFyc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2dldGFyc3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNzksNiArMTc5LDkgQEAKKyAgICAgICBzaXplX3QgaW5kZXhfc2l6ZSA9IGF0b2wgKHRtcGJ1Zik7CisgCisgICAgICAgaWYgKFNBUk1BRyArIHNpemVvZiAoc3RydWN0IGFyX2hkcikgKyBpbmRleF9zaXplID4gZWxmLT5tYXhpbXVtX3NpemUKKysjaWYgU0laRV9NQVggPD0gNDI5NDk2NzI5NVUKKysJICB8fCBuID49IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZfQXJzeW0pCisrI2VuZGlmCisgCSAgfHwgbiAqIHNpemVvZiAodWludDMyX3QpID4gaW5kZXhfc2l6ZSkKKyAJeworIAkgIC8qIFRoaXMgaW5kZXggdGFibGUgY2Fubm90IGJlIHJpZ2h0IHNpbmNlIGl0IGRvZXMgbm90IGZpdCBpbnRvCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCTIwMDktMDYtMTMgMjI6MzE6MzUuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMjUsMTAgKzEyNSwyNSBAQAorIAkgICAgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMCisgCQkgICYmIGVsZi0+c3RhdGUuZWxmMzIuZWhkci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBNWV9FTEZEQVRBCisgCQkgICYmIChBTExPV19VTkFMSUdORUQKKy0JCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKQorKwkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcworKwkJCSAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBvZmZzZXQpKQorIAkJCSAgJiAoX19hbGlnbm9mX18gKEVsZjMyX1NoZHIpIC0gMSkpID09IDApKQorLQkJLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKy0JCW51bSA9ICgoRWxmMzJfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpLT5zaF9saW5rOworKwkJeworKwkJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJCSAgICAgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKwkJICBpZiAodW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gb2Zmc2V0CisrCQkJCTwgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisrCQkgICAgeworKwkJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJCSAgICAgIHJlc3VsdCA9IC0xOworKwkJICAgICAgZ290byBvdXQ7CisrCQkgICAgfQorKworKwkJICAvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworKwkJICBudW0gPSAoKEVsZjMyX1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorKwkJCQkJICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKyAJCSAgLyogV2UgYXZvaWQgcmVhZGluZyBpbiBhbGwgdGhlIHNlY3Rpb24gaGVhZGVycy4gIEp1c3QgcmVhZAorQEAgLTE2MywxMCArMTc4LDI1IEBACisgCSAgICAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwKKyAJCSAgJiYgZWxmLT5zdGF0ZS5lbGY2NC5laGRyLT5lX2lkZW50W0VJX0RBVEFdID09IE1ZX0VMRkRBVEEKKyAJCSAgJiYgKEFMTE9XX1VOQUxJR05FRAorLQkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpCisrCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzCisrCQkJICAgKyBlbGYtPnN0YXJ0X29mZnNldCArIG9mZnNldCkpCisgCQkJICAmIChfX2FsaWdub2ZfXyAoRWxmNjRfU2hkcikgLSAxKSkgPT0gMCkpCistCQkvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworLQkJbnVtID0gKChFbGY2NF9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl7CisrCQkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkJICAgICB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrCQkgIGlmICh1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBvZmZzZXQKKysJCQkJPCBzaXplb2YgKEVsZjY0X1NoZHIpKSkKKysJCSAgICB7CisrCQkgICAgICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfU0VDVElPTl9IRUFERVIpOworKwkJICAgICAgcmVzdWx0ID0gLTE7CisrCQkgICAgICBnb3RvIG91dDsKKysJCSAgICB9CisrCisrCQkgIC8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCisrCQkgIG51bSA9ICgoRWxmNjRfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIGVsZi0+c3RhcnRfb2Zmc2V0CisrCQkJCQkgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBXZSBhdm9pZCByZWFkaW5nIGluIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzLiAgSnVzdCByZWFkCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9uZXdzY24uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfbmV3c2NuLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDQsMTAgKzEwNCwxOCBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogV2UgbXVzdCBhbGxvY2F0ZSBhIG5ldyBlbGVtZW50LiAgKi8KKy0gICAgICBFbGZfU2NuTGlzdCAqbmV3cDsKKysgICAgICBFbGZfU2NuTGlzdCAqbmV3cCA9IE5VTEw7CisgCisgICAgICAgYXNzZXJ0IChlbGYtPnN0YXRlLmVsZi5zY25pbmNyID4gMCk7CisgCisrICAgICAgaWYgKAorKyNpZiBTSVpFX01BWCA8PSA0Mjk0OTY3Mjk1VQorKwkgIGxpa2VseSAoZWxmLT5zdGF0ZS5lbGYuc2NuaW5jcgorKwkJICA8IFNJWkVfTUFYIC8gMiAvIHNpemVvZiAoRWxmX1NjbikgLSBzaXplb2YgKEVsZl9TY25MaXN0KSkKKysjZWxzZQorKwkgIDEKKysjZW5kaWYKKysJICApCisgICAgICAgbmV3cCA9IChFbGZfU2NuTGlzdCAqKSBjYWxsb2MgKHNpemVvZiAoRWxmX1Njbkxpc3QpCisgCQkJCSAgICAgKyAoKGVsZi0+c3RhdGUuZWxmLnNjbmluY3IgKj0gMikKKyAJCQkJCSogc2l6ZW9mIChFbGZfU2NuKSksIDEpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGR5bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRkeW4uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGR5bi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBkeW5hbWljIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtOTMsNyArOTMsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldGxpYi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bGliLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBsaWJyYXJ5IGZyb20gdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNC4KKyAKK0BAIC04Niw3ICs4Niw3IEBACisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKyAgIEdFbGZfTGliICpyZXN1bHQgPSBOVUxMOworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTGliKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9MaWIsIGRhdGEpKQorICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICBlbHNlCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldG1vdmUuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldG1vdmUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IG1vdmUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtODMsNyArODMsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9Nb3ZlKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9Nb3ZlLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWxhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHJlbGEuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbGEuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IFJFTEEgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhX3NjbiA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTEEpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSEFORExFKTsKK0BAIC05Myw3ICs4Nyw3IEBACisgICBpZiAoc2NuLT5lbGYtPmNsYXNzID09IEVMRkNMQVNTMzIpCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0BAIC0xMTQsNyArMTA4LDcgQEAKKyAgICAgeworICAgICAgIC8qIFNpbXBseSBjb3B5IHRoZSBkYXRhIGFmdGVyIHdlIG1hZGUgc3VyZSB3ZSBhcmUgYWN0dWFsbHkgZ2V0dGluZworIAkgY29ycmVjdCBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHJlbC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBSRUwgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhX3NjbiA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTCkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9IQU5ETEUpOworQEAgLTkzLDcgKzg3LDcgQEAKKyAgIGlmIChzY24tPmVsZi0+Y2xhc3MgPT0gRUxGQ0xBU1MzMikKKyAgICAgeworICAgICAgIC8qIFdlIGhhdmUgdG8gY29udmVydCB0aGUgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0BAIC0xMTMsNyArMTA3LDcgQEAKKyAgICAgeworICAgICAgIC8qIFNpbXBseSBjb3B5IHRoZSBkYXRhIGFmdGVyIHdlIG1hZGUgc3VyZSB3ZSBhcmUgYWN0dWFsbHkgZ2V0dGluZworIAkgY29ycmVjdCBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTkuCisgCitAQCAtOTAsNyArOTAsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE5LDcgKzExOSw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltLCBkYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IGFkZGl0aW9uYWwgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtODQsNyArODQsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW1pbmZvKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW1pbmZvLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNiArMSw2IEBACisgLyogR2V0IHN5bWJvbCBpbmZvcm1hdGlvbiBhbmQgc2VwYXJhdGUgc2VjdGlvbiBpbmRleCBmcm9tIHN5bWJvbCB0YWJsZQorICAgIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtOTAsNyArOTAsNyBAQAorICAgICAgc2VjdGlvbiBpbmRleCB0YWJsZS4gICovCisgICBpZiAobGlrZWx5IChzaG5keGRhdGFfc2NuICE9IE5VTEwpKQorICAgICB7CistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1dvcmQpID4gc2huZHhkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9Xb3JkLCAmc2huZHhkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTEwLDcgKzExMCw3IEBACisgCSB0YWJsZSBlbnRyaWVzIGhhcyB0byBiZSBhZG9wdGVkLiAgVGhlIHVzZXIgYmV0dGVyIGhhcyBwcm92aWRlZAorIAkgYSBidWZmZXIgd2hlcmUgd2UgY2FuIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4gIFdoaWxlIGNvcHlpbmcgdGhlCisgCSBkYXRhIHdlIGFyZSBjb252ZXJ0aW5nIHRoZSBmb3JtYXQuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gc3ltZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCBzeW1kYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMzksNyArMTM5LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW0pID4gc3ltZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW0sIHN5bWRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgc3ltYm9sIHZlcnNpb24gaW5mb3JtYXRpb24gYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OS4KKyAKK0BAIC05Miw3ICs5Miw3IEBACisgCisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfVmVyc3ltLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgaW5mb3JtYXRpb24gaW4gZHluYW1pYyB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX0RZTikpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDIsNyArOTYsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNiw3ICsxMTAsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgbGlicmFyeSBpbiB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA0LgorIAorQEAgLTY4LDEyICs2OCw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIEVsZl9EYXRhX1NjbiAqZGF0YV9zY24gPSAoRWxmX0RhdGFfU2NuICopIGRhdGE7CisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9MSUIpKQorICAgICB7CitAQCAtODcsNyArODEsNyBAQAorIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworICAgaW50IHJlc3VsdCA9IDA7CistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfTGliKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfTGliLCAmZGF0YV9zY24tPmQpKQorICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICBlbHNlCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIG1vdmUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzUsOCArNzUsNyBAQAorICAgYXNzZXJ0IChzaXplb2YgKEdFbGZfTW92ZSkgPT0gc2l6ZW9mIChFbGY2NF9Nb3ZlKSk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKG5keCA8IDApCistICAgICAgfHwgdW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9Nb3ZlKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9Nb3ZlLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJldHVybiAwOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgUkVMQSByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGF0IGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC02OCwxMiArNjgsNiBAQAorICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTEEpKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAxLDcgKzk1LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNyw3ICsxMTEsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBSRUwgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNjgsMTIgKzY4LDYgQEAKKyAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUwpKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtOTksNyArOTMsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNCw3ICsxMDgsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIGluZm9ybWF0aW9uIGluIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcyLDEyICs3Miw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDIsNyArOTYsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTEyNSw3ICsxMTksNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9TeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfU3ltLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgYWRkaXRpb25hbCBzeW1ib2wgaW5mb3JtYXRpb24gaW4gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzIsMTIgKzcyLDYgQEAKKyAgIGlmIChkYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNSU5GTykpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC05Myw3ICs4Nyw3IEBACisgICByd2xvY2tfd3Jsb2NrIChzY24tPmVsZi0+bG9jayk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW1pbmZvKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW1pbmZvLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw2ICsxLDYgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIGluZm9ybWF0aW9uIGFuZCBzZWN0aW9uIGluZGV4IGluIHN5bWJvbCB0YWJsZSBhdCB0aGUKKyAgICBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzcsMTIgKzc3LDYgQEAKKyAgIGlmIChzeW1kYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChzeW1kYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEyOCw3ICsxMjIsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gc3ltZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCAmc3ltZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTE1MSw3ICsxNDUsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9TeW0pID4gc3ltZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfU3ltLCAmc3ltZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIHZlcnNpb24gaW5mb3JtYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAxLgorIAorQEAgLTc1LDggKzc1LDcgQEAKKyAgIGFzc2VydCAoc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPT0gc2l6ZW9mIChFbGY2NF9WZXJzeW0pKTsKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkKKy0gICAgICB8fCB1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfVmVyc3ltLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJldHVybiAwOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9saWJlbGZQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9saWJlbGZQLmgJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvbGliZWxmUC5oCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjA4LDQgKzYwOCw4IEBACisgLyogQWxpZ24gb2Zmc2V0IHRvIDQgYnl0ZXMgYXMgbmVlZGVkIGZvciBub3RlIG5hbWUgYW5kIGRlc2NyaXB0b3IgZGF0YS4gICovCisgI2RlZmluZSBOT1RFX0FMSUdOKG4pCSgoKG4pICsgMykgJiAtNFUpCisgCisrLyogQ29udmVuaWVuY2UgbWFjcm8uICAqLworKyNkZWZpbmUgSU5WQUxJRF9ORFgobmR4LCB0eXBlLCBkYXRhKSBcCisrICB1bmxpa2VseSAoKGRhdGEpLT5kX3NpemUgLyBzaXplb2YgKHR5cGUpIDw9ICh1bnNpZ25lZCBpbnQpIChuZHgpKQorKworICNlbmRpZiAgLyogbGliZWxmUC5oICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjQwLDYgKzE2NDAsMTYgQEAKKyAJb2JqZWN0IHN5bWJvbHMgb3Igc3ltYm9scyB3aXRoIHVua25vd24gdHlwZS4KKyAJKGNoZWNrX3JlbCk6IExpa2V3aXNlLgorIAorKzIwMDUtMDYtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogcmVhZGVsZi5jIChoYW5kbGVfZHluYW1pYywgaGFuZGxlX3N5bXRhYik6IENoZWNrIGZvciBib2d1cyBzaF9saW5rLgorKwkoaGFuZGxlX3Zlcm5lZWQsIGhhbmRsZV92ZXJkZWYsIGhhbmRsZV92ZXJzeW0sIGhhbmRsZV9oYXNoKTogTGlrZXdpc2UuCisrCShoYW5kbGVfc2NuZ3JwKTogQ2hlY2sgZm9yIGJvZ3VzIHNoX2luZm8uCisrCisrCSogc3RyaXAuYyAoaGFuZGxlX2VsZik6IENoZWNrIGZvciBib2d1cyB2YWx1ZXMgaW4gc2hfbGluaywgc2hfaW5mbywKKysJc3Rfc2huZHgsIGVfc2hzdHJuZHgsIGFuZCBTSFRfR1JPVVAgb3IgU0hUX1NZTVRBQl9TSE5EWCBkYXRhLgorKwlEb24ndCB1c2UgYXNzZXJ0IG9uIGlucHV0IHZhbHVlcywgaW5zdGVhZCBiYWlsIHdpdGggImlsbGZvcm1lZCIgZXJyb3IuCisrCisgMjAwNS0wNi0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X29wcyk6IEFkZCBjb25zdHMuCitAQCAtMTY5MCw2ICsxNzAwLDE5IEBACisgCisgCSogcmVhZGVsZi5jIChkd2FyZl90YWdfc3RyaW5nKTogQWRkIG5ldyB0YWdzLgorIAorKzIwMDUtMDUtMTcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGVsZmxpbnQuYyAoY2hlY2tfaGFzaCk6IERvbid0IGNoZWNrIGVudHJpZXMgYmV5b25kIGVuZCBvZiBzZWN0aW9uLgorKwkoY2hlY2tfbm90ZSk6IERvbid0IGNyYXNoIGlmIGdlbGZfcmF3Y2h1bmsgZmFpbHMuCisrCShzZWN0aW9uX25hbWUpOiBSZXR1cm4gPGludmFsaWQ+IGlmIGdlbGZfZ2V0c2hkciByZXR1cm5zIE5VTEwuCisrCisrMjAwNS0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogZWxmbGludC5jIChzZWN0aW9uX25hbWUpOiBSZXR1cm4gIjxpbnZhbGlkPiIgaW5zdGVhZCBvZgorKwljcmFzaGluZyBvbiBpbnZhbGlkIHNlY3Rpb24gbmFtZS4KKysJKGNoZWNrX3N5bXRhYiwgaXNfcmVsX2R5biwgY2hlY2tfcmVsYSwgY2hlY2tfcmVsLCBjaGVja19keW5hbWljLAorKwljaGVja19zeW10YWJfc2huZHgsIGNoZWNrX2hhc2gsIGNoZWNrX3ZlcnN5bSk6IFJvYnVzdGlmeS4KKysKKyAyMDA1LTA1LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHN0cmlwLmMgKGhhbmRsZV9lbGYpOiBEb24ndCB0cmFuc2xhdGUgaGFzaCBhbmQgdmVyc3ltIGRhdGEgZm9ybWF0cywKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZWxmbGludC5jCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw2ICsxMzEsMTAgQEAKKyAvKiBBcnJheSB0byBjb3VudCByZWZlcmVuY2VzIGluIHNlY3Rpb24gZ3JvdXBzLiAgKi8KKyBzdGF0aWMgaW50ICpzY25yZWY7CisgCisrLyogTnVtYmVycyBvZiBzZWN0aW9ucyBhbmQgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KKytzdGF0aWMgdW5zaWduZWQgaW50IHNobnVtOworK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGhudW07CisrCisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK0BAIC0zMTksMTAgKzMyMywxOSBAQAorIHsKKyAgIEdFbGZfU2hkciBzaGRyX21lbTsKKyAgIEdFbGZfU2hkciAqc2hkcjsKKysgIGNvbnN0IGNoYXIgKnJldDsKKysKKysgIGlmICgodW5zaWduZWQgaW50KSBpZHggPiBzaG51bSkKKysgICAgcmV0dXJuICI8aW52YWxpZD4iOworIAorICAgc2hkciA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIGlkeCksICZzaGRyX21lbSk7CisrICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisgCistICByZXR1cm4gZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKTsKKysgIHJldCA9IGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSk7CisrICBpZiAocmV0ID09IE5VTEwpCisrICAgIHJldHVybiAiPGludmFsaWQ+IjsKKysgIHJldHVybiByZXQ7CisgfQorIAorIAorQEAgLTM0NCwxMSArMzU3LDYgQEAKKyAgIChzaXplb2YgKHZhbGlkX2VfbWFjaGluZSkgLyBzaXplb2YgKHZhbGlkX2VfbWFjaGluZVswXSkpCisgCisgCistLyogTnVtYmVycyBvZiBzZWN0aW9ucyBhbmQgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KKy1zdGF0aWMgdW5zaWduZWQgaW50IHNobnVtOworLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGhudW07CistCistCisgc3RhdGljIHZvaWQKKyBjaGVja19lbGZfaGVhZGVyIChFYmwgKmVibCwgR0VsZl9FaGRyICplaGRyLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtNjMyLDcgKzY0MCw4IEBACisgCSAgfQorICAgICAgIH0KKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9TWU0sIDEsIEVWX0NVUlJFTlQpKQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfU1lNLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUydV0gJyVzJzogZW50cnkgc2l6ZSBpcyBkb2VzIG5vdCBtYXRjaCBFbGZYWF9TeW1cbiIpLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKK0BAIC02NzAsNyArNjc5LDcgQEAKKyAJICAgICAgIHhuZHhzY25pZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCB4bmR4c2NuaWR4KSk7CisgICAgIH0KKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDE7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIGZvciAoc2l6ZV90IGNudCA9IDE7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIHN5bSA9IGdlbGZfZ2V0c3ltc2huZHggKGRhdGEsIHhuZHhkYXRhLCBjbnQsICZzeW1fbWVtLCAmeG5keCk7CisgICAgICAgaWYgKHN5bSA9PSBOVUxMKQorQEAgLTY5MCw3ICs2OTksOCBAQAorICAgICAgIGVsc2UKKyAJeworIAkgIG5hbWUgPSBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hkci0+c2hfbGluaywgc3ltLT5zdF9uYW1lKTsKKy0JICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCSAgYXNzZXJ0IChuYW1lICE9IE5VTEwKKysJCSAgfHwgc3Ryc2hkci0+c2hfdHlwZSAhPSBTSFRfU1RSVEFCKTsKKyAJfQorIAorICAgICAgIGlmIChzeW0tPnN0X3NobmR4ID09IFNITl9YSU5ERVgpCitAQCAtMTAzOCw5ICsxMDQ4LDExIEBACisgICAgIHsKKyAgICAgICBHRWxmX1NoZHIgcmNzaGRyX21lbTsKKyAgICAgICBjb25zdCBHRWxmX1NoZHIgKnJjc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmcmNzaGRyX21lbSk7CistICAgICAgYXNzZXJ0IChyY3NoZHIgIT0gTlVMTCk7CisgCistICAgICAgaWYgKHJjc2hkci0+c2hfdHlwZSA9PSBTSFRfRFlOQU1JQykKKysgICAgICBpZiAocmNzaGRyID09IE5VTEwpCisrCWJyZWFrOworKworKyAgICAgIGlmIChyY3NoZHItPnNoX3R5cGUgPT0gU0hUX0RZTkFNSUMgJiYgcmNzaGRyLT5zaF9lbnRzaXplKQorIAl7CisgCSAgLyogRm91bmQgdGhlIGR5bmFtaWMgc2VjdGlvbi4gIExvb2sgdGhyb3VnaCBpdC4gICovCisgCSAgRWxmX0RhdGEgKmQgPSBlbGZfZ2V0ZGF0YSAoc2NuLCBOVUxMKTsKK0BAIC0xMDUwLDcgKzEwNjIsOSBAQAorIAkgICAgeworIAkgICAgICBHRWxmX0R5biBkeW5fbWVtOworIAkgICAgICBHRWxmX0R5biAqZHluID0gZ2VsZl9nZXRkeW4gKGQsIGNudCwgJmR5bl9tZW0pOworLQkgICAgICBhc3NlcnQgKGR5biAhPSBOVUxMKTsKKysKKysJICAgICAgaWYgKGR5biA9PSBOVUxMKQorKwkJYnJlYWs7CisgCisgCSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTENPVU5UKQorIAkJeworQEAgLTEwNjQsNyArMTA3OCw5IEBACisgCQkgICAgICAvKiBEb2VzIHRoZSBudW1iZXIgc3BlY2lmaWVkIG51bWJlciBvZiByZWxhdGl2ZQorIAkJCSByZWxvY2F0aW9ucyBleGNlZWQgdGhlIHRvdGFsIG51bWJlciBvZgorIAkJCSByZWxvY2F0aW9ucz8gICovCistCQkgICAgICBpZiAoZHluLT5kX3VuLmRfdmFsID4gc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUpCisrCQkgICAgICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSAwCisrCQkJICAmJiBkeW4tPmRfdW4uZF92YWwgPiAoc2hkci0+c2hfc2l6ZQorKwkJCQkJCS8gc2hkci0+c2hfZW50c2l6ZSkpCisgCQkJRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBEVF9SRUxDT1VOVCB2YWx1ZSAlZCB0b28gaGlnaCBmb3IgdGhpcyBzZWN0aW9uXG4iKSwKKyAJCQkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwKK0BAIC0xMjI0LDcgKzEyNDAsOCBAQAorIAl9CisgICAgIH0KKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCByZWx0eXBlLCAxLCBFVl9DVVJSRU5UKSkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIHJlbHR5cGUsIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKHJlbHR5cGUgPT0gRUxGX1RfUkVMQSA/ICJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfUmVsYVxuIiA6ICJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfUmVsXG4iKSwKK0BAIC0xNDQ3LDcgKzE0NjQsOCBAQAorICAgRWxmX0RhdGEgKnN5bWRhdGEgPSBlbGZfZ2V0ZGF0YSAoc3ltc2NuLCBOVUxMKTsKKyAgIGVudW0gbG9hZF9zdGF0ZSBzdGF0ZSA9IHN0YXRlX3VuZGVjaWRlZDsKKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1JFTEEsIDEsIEVWX0NVUlJFTlQpOworKyAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoX2VudHNpemU7ICsrY250KQorICAgICB7CisgICAgICAgR0VsZl9SZWxhIHJlbGFfbWVtOworICAgICAgIEdFbGZfUmVsYSAqcmVsYSA9IGdlbGZfZ2V0cmVsYSAoZGF0YSwgY250LCAmcmVsYV9tZW0pOworQEAgLTE0OTcsNyArMTUxNSw4IEBACisgICBFbGZfRGF0YSAqc3ltZGF0YSA9IGVsZl9nZXRkYXRhIChzeW1zY24sIE5VTEwpOworICAgZW51bSBsb2FkX3N0YXRlIHN0YXRlID0gc3RhdGVfdW5kZWNpZGVkOworIAorLSAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfUkVMLCAxLCBFVl9DVVJSRU5UKTsKKysgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfUmVsIHJlbF9tZW07CisgICAgICAgR0VsZl9SZWwgKnJlbCA9IGdlbGZfZ2V0cmVsIChkYXRhLCBjbnQsICZyZWxfbWVtKTsKK0BAIC0xNjAwLDcgKzE2MTksOCBAQAorIAkgICBzaGRyLT5zaF9saW5rLCBzZWN0aW9uX25hbWUgKGVibCwgc2hkci0+c2hfbGluayksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworIAorLSAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX0RZTiwgMSwgRVZfQ1VSUkVOVCkpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9EWU4sIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfRHluXG4iKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CitAQCAtMTYxMCw3ICsxNjMwLDcgQEAKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisgCisgICBib29sIG5vbl9udWxsX3dhcm5lZCA9IGZhbHNlOworLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBmb3IgKGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfRHluIGR5bl9tZW07CisgICAgICAgR0VsZl9EeW4gKmR5biA9IGdlbGZfZ2V0ZHluIChkYXRhLCBjbnQsICZkeW5fbWVtKTsKK0BAIC0xODkxLDYgKzE5MTEsOCBAQAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKyAKKyAgIGlmIChzeW1zaGRyICE9IE5VTEwKKysgICAgICAmJiBzaGRyLT5zaF9lbnRzaXplCisrICAgICAgJiYgc3ltc2hkci0+c2hfZW50c2l6ZQorICAgICAgICYmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorIAkgIDwgc3ltc2hkci0+c2hfc2l6ZSAvIHN5bXNoZHItPnNoX2VudHNpemUpKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKK0BAIC0xOTE3LDYgKzE5MzksMTIgQEAKKyAgICAgfQorIAorICAgRWxmX0RhdGEgKmRhdGEgPSBlbGZfZ2V0ZGF0YSAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIGlkeCksIE5VTEwpOworKyAgaWYgKGRhdGEgPT0gTlVMTCkKKysgICAgeworKyAgICAgIEVSUk9SIChnZXR0ZXh0ICgic2VjdGlvbiBbJTJkXSAnJXMnOiBjYW5ub3QgZ2V0IHNlY3Rpb24gZGF0YVxuIiksCisrIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworKyAgICAgIHJldHVybjsKKysgICAgfQorIAorICAgaWYgKCooKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWYpICE9IDApCisgICAgIEVSUk9SIChnZXR0ZXh0ICgic3ltYm9sIDAgc2hvdWxkIGhhdmUgemVybyBleHRlbmRlZCBzZWN0aW9uIGluZGV4XG4iKSk7CitAQCAtMTk1OSw3ICsxOTg3LDcgQEAKKyAKKyAgIHNpemVfdCBtYXhpZHggPSBuY2hhaW47CisgCistICBpZiAoc3ltc2hkciAhPSBOVUxMKQorKyAgaWYgKHN5bXNoZHIgIT0gTlVMTCAmJiBzeW1zaGRyLT5zaF9lbnRzaXplICE9IDApCisgICAgIHsKKyAgICAgICBzaXplX3Qgc3ltc2l6ZSA9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplOworIAorQEAgLTE5NzAsMTggKzE5OTgsMjggQEAKKyAgICAgICBtYXhpZHggPSBzeW1zaXplOworICAgICB9CisgCisrICBFbGYzMl9Xb3JkICpidWYgPSAoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZjsKKysgIEVsZjMyX1dvcmQgKmVuZCA9IChFbGYzMl9Xb3JkICopICgoY2hhciAqKSBkYXRhLT5kX2J1ZiArIHNoZHItPnNoX3NpemUpOworICAgc2l6ZV90IGNudDsKKyAgIGZvciAoY250ID0gMjsgY250IDwgMiArIG5idWNrZXQ7ICsrY250KQorLSAgICBpZiAoKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGJ1Y2tldCByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIpOworKyAgICB9CisgCisgICBmb3IgKDsgY250IDwgMiArIG5idWNrZXQgKyBuY2hhaW47ICsrY250KQorLSAgICBpZiAoKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGNoYWluIHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMiAtIG5idWNrZXQpOworKyAgICB9CisgfQorIAorIAorQEAgLTIwMTEsMTggKzIwNDksMjggQEAKKyAgICAgICBtYXhpZHggPSBzeW1zaXplOworICAgICB9CisgCisrICBFbGY2NF9Yd29yZCAqYnVmID0gKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmOworKyAgRWxmNjRfWHdvcmQgKmVuZCA9IChFbGY2NF9Yd29yZCAqKSAoKGNoYXIgKikgZGF0YS0+ZF9idWYgKyBzaGRyLT5zaF9zaXplKTsKKyAgIHNpemVfdCBjbnQ7CisgICBmb3IgKGNudCA9IDI7IGNudCA8IDIgKyBuYnVja2V0OyArK2NudCkKKy0gICAgaWYgKCgoRWxmNjRfWHdvcmQgKikgZGF0YS0+ZF9idWYpW2NudF0gPj0gbWF4aWR4KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZiArIGNudCA+PSBlbmQpCisrCWJyZWFrOworKyAgICAgIGVsc2UgaWYgKGJ1ZltjbnRdID49IG1heGlkeCkKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggYnVja2V0IHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMik7CisrICAgIH0KKyAKKyAgIGZvciAoOyBjbnQgPCAyICsgbmJ1Y2tldCArIG5jaGFpbjsgKytjbnQpCistICAgIGlmICgoKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGNoYWluIHJlZmVyZW5jZSAlIiBQUkl1NjQgIiBvdXQgb2YgYm91bmRzXG4iKSwKKy0JICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAodWludDY0X3QpIChjbnQgLSAyIC0gbmJ1Y2tldCkpOworKwkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKHVpbnQ2NF90KSBjbnQgLSAyIC0gbmJ1Y2tldCk7CisrICAgIH0KKyB9CisgCisgCitAQCAtMjA0Nyw3ICsyMDk1LDcgQEAKKyAgIGlmIChzaGRyLT5zaF9zaXplIDwgKDQgKyBiaXRtYXNrX3dvcmRzICsgbmJ1Y2tldHMpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKyAgICAgeworICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorLXNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCB0YWJsZSBzZWN0aW9uIGlzIHRvbyBzbWFsbCAoaXMgJWxkLCBleHBlY3RlZCBhdCBsZWFzdCVsZClcbiIpLAorK3NlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCB0YWJsZSBzZWN0aW9uIGlzIHRvbyBzbWFsbCAoaXMgJWxkLCBleHBlY3RlZCBhdCBsZWFzdCAlbGQpXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAobG9uZyBpbnQpIHNoZHItPnNoX3NpemUsCisgCSAgICAgKGxvbmcgaW50KSAoKDQgKyBiaXRtYXNrX3dvcmRzICsgbmJ1Y2tldHMpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkpOworICAgICAgIHJldHVybjsKK0BAIC0yNzE5LDggKzI3NjcsOSBAQAorIAorICAgLyogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdmVyc2lvbiBzeW1ib2wgdGFibGUgbXVzdCBiZSB0aGUKKyAgICAgIHNhbWUgYXMgdGhlIG51bWJlciBvZiBzeW1ib2xzLiAgKi8KKy0gIGlmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorLSAgICAgICE9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKQorKyAgaWYgKHNoZHItPnNoX2VudHNpemUgJiYgc3ltc2hkci0+c2hfZW50c2l6ZQorKyAgICAgICYmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorKwkgICE9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnIGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgdGhhbiBzeW1ib2wgdGFibGUgWyUyZF0gJyVzJ1xuIiksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3JlYWRlbGYuYwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTcyLDYgKzExNzIsOCBAQAorICAgRWxmMzJfV29yZCAqZ3JwcmVmID0gKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWY7CisgCisgICBHRWxmX1N5bSBzeW1fbWVtOworKyAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kYXRhLCBzaGRyLT5zaF9pbmZvLCAmc3ltX21lbSk7CisrCisgICBwcmludGYgKChncnByZWZbMF0gJiBHUlBfQ09NREFUKQorIAkgID8gbmdldHRleHQgKCJcCisgXG5DT01EQVQgc2VjdGlvbiBncm91cCBbJTJ6dV0gJyVzJyB3aXRoIHNpZ25hdHVyZSAnJXMnIGNvbnRhaW5zICV6dSBlbnRyeTpcbiIsCitAQCAtMTE4NCw4ICsxMTg2LDggQEAKKyAJCSAgICAgIGRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKSwKKyAJICBlbGZfbmR4c2NuIChzY24pLAorIAkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSksCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHN5bXNoZHItPnNoX2xpbmssCistCQkgICAgICBnZWxmX2dldHN5bSAoc3ltZGF0YSwgc2hkci0+c2hfaW5mbywgJnN5bV9tZW0pLT5zdF9uYW1lKQorKwkgIChzeW0gPT0gTlVMTCA/IE5VTEwKKysJICAgOiBlbGZfc3RycHRyIChlYmwtPmVsZiwgc3ltc2hkci0+c2hfbGluaywgc3ltLT5zdF9uYW1lKSkKKyAJICA/OiBnZXR0ZXh0ICgiPElOVkFMSUQgU1lNQk9MPiIpLAorIAkgIGRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKTsKKyAKK0BAIC0xMzM2LDcgKzEzMzgsOCBAQAorIGhhbmRsZV9keW5hbWljIChFYmwgKmVibCwgRWxmX1NjbiAqc2NuLCBHRWxmX1NoZHIgKnNoZHIpCisgeworICAgaW50IGNsYXNzID0gZ2VsZl9nZXRjbGFzcyAoZWJsLT5lbGYpOworLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbms7CisgICBFbGZfRGF0YSAqZGF0YTsKKyAgIHNpemVfdCBjbnQ7CisgICBzaXplX3Qgc2hzdHJuZHg7CitAQCAtMTM1MSw2ICsxMzU0LDExIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIGdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuRHluYW1pYyBzZWdtZW50IGNvbnRhaW5zICVsdSBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMTM2MCw5ICsxMzY4LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgICBmcHV0c191bmxvY2tlZCAoZ2V0dGV4dCAoIiAgVHlwZSAgICAgICAgICAgICAgVmFsdWVcbiIpLCBzdGRvdXQpOworIAorICAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCitAQCAtMTk0NSw2ICsxOTUxLDEzIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZWN0aW9uLiAgKi8KKyAgIHVuc2lnbmVkIGludCBuc3ltcyA9IGRhdGEtPmRfc2l6ZSAvIChjbGFzcyA9PSBFTEZDTEFTUzMyCisgCQkJCSAgICAgICA/IHNpemVvZiAoRWxmMzJfU3ltKQorQEAgLTE5NTUsMTUgKzE5NjgsMTIgQEAKKyAJCSAgICBuc3ltcyksCisgCSAgKHVuc2lnbmVkIGludCkgZWxmX25keHNjbiAoc2NuKSwKKyAJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpLCBuc3ltcyk7CistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiICVsdSBsb2NhbCBzeW1ib2wgIFN0cmluZyB0YWJsZTogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiICVsdSBsb2NhbCBzeW1ib2xzICBTdHJpbmcgdGFibGU6IFslMnVdICclcydcbiIsCisgCQkgICAgc2hkci0+c2hfaW5mbyksCisgCSAgKHVuc2lnbmVkIGxvbmcgaW50KSBzaGRyLT5zaF9pbmZvLAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgZnB1dHNfdW5sb2NrZWQgKGNsYXNzID09IEVMRkNMQVNTMzIKKyAJCSAgPyBnZXR0ZXh0ICgiXAorQEAgLTIxOTksNyArMjIwOSwxMyBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCistICBHRWxmX1NoZHIgZ2xpbms7CisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gbmVlZHMgc2VjdGlvbiBbJTJ1XSAnJXMnIGNvbnRhaW5zICVkIGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yMjEwLDkgKzIyMjYsNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworICAgZm9yIChpbnQgY250ID0gc2hkci0+c2hfaW5mbzsgLS1jbnQgPj0gMDsgKQorQEAgLTIyNjUsOCArMjI3OSwxNCBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgaW50IGNsYXNzID0gZ2VsZl9nZXRjbGFzcyAoZWJsLT5lbGYpOworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gZGVmaW5pdGlvbiBzZWN0aW9uIFslMnVdICclcycgY29udGFpbnMgJWQgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTIyNzgsOSArMjI5OCw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisgICBmb3IgKGludCBjbnQgPSBzaGRyLT5zaF9pbmZvOyAtLWNudCA+PSAwOyApCitAQCAtMjU0Miw4ICsyNTYwLDE0IEBACisgICAgICAgZmlsZW5hbWUgPSBOVUxMOworICAgICB9CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgLyogUHJpbnQgdGhlIGhlYWRlci4gICovCistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuVmVyc2lvbiBzeW1ib2xzIHNlY3Rpb24gWyUydV0gJyVzJyBjb250YWlucyAlZCBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnIiwKKyAJCSAgICAiXAorQEAgLTI1NTUsOSArMjU3OSw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgLyogTm93IHdlIGNhbiBmaW5hbGx5IGxvb2sgYXQgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGlzIHNlY3Rpb24uICAqLworICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorQEAgLTI2MDksNyArMjYzMSwxNyBAQAorICAgZm9yIChFbGYzMl9Xb3JkIGNudCA9IDA7IGNudCA8IG5idWNrZXQ7ICsrY250KQorICAgICArK2NvdW50c1tsZW5ndGhzW2NudF1dOworIAorLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLAorKwkJCQkJICAgICAgIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgICBlbGZfbmR4c2NuIChzY24pKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5IaXN0b2dyYW0gZm9yIGJ1Y2tldCBsaXN0IGxlbmd0aCBpbiBzZWN0aW9uIFslMnVdICclcycgKHRvdGFsIG9mICVkIGJ1Y2tldCk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTI2MjIsOSArMjY1NCw3IEBACisgCSAgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICBpZiAoZXh0cmFzdHIgIT0gTlVMTCkKKyAgICAgZnB1dHMgKGV4dHJhc3RyLCBzdGRvdXQpOworQEAgLTQzMTIsNiArNDM0MiwxNiBAQAorICAgICAgIHJldHVybjsKKyAgICAgfQorIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbms7CisrICBnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLCAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgICBlbGZfbmR4c2NuIChzY24pKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5EV0FSRiBzZWN0aW9uIFslMnp1XSAnJXMnIGF0IG9mZnNldCAlIyIgUFJJeDY0ICIgY29udGFpbnMgJXp1IGVudHJ5OlxuIiwKKyAJCSAgICAiXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvc3RyaXAuYwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNTYxLDYgKzU2MSwxMSBAQAorICAgICAgIGdvdG8gZmFpbF9jbG9zZTsKKyAgICAgfQorIAorKyAgaWYgKHNoc3RybmR4ID49IHNobnVtKQorKyAgICBnb3RvIGlsbGZvcm1lZDsKKysKKysjZGVmaW5lIGVsZl9hc3NlcnQodGVzdCkgZG8geyBpZiAoISh0ZXN0KSkgZ290byBpbGxmb3JtZWQ7IH0gd2hpbGUgKDApCisrCisgICAvKiBTdG9yYWdlIGZvciBzZWN0aW9uIGluZm9ybWF0aW9uLiAgV2UgbGVhdmUgcm9vbSBmb3IgdHdvIG1vcmUKKyAgICAgIGVudHJpZXMgc2luY2Ugd2UgdW5jb25kaXRpb25hbGx5IGNyZWF0ZSBhIHNlY3Rpb24gaGVhZGVyIHN0cmluZworICAgICAgdGFibGUuICBNYXliZSBzb21lIHdlaXJkIHRvb2wgY3JlYXRlZCBhbiBFTEYgZmlsZSB3aXRob3V0IG9uZS4KK0BAIC01ODIsNyArNTg3LDcgQEAKKyAgICAgeworICAgICAgIC8qIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlIChpLmUuLCB0aGVyZSBzaG91bGQgbm90IGJlIGFueQorIAkgaG9sZXMgaW4gdGhlIG51bWJlcmluZykuICAqLworLSAgICAgIGFzc2VydCAoZWxmX25keHNjbiAoc2NuKSA9PSBjbnQpOworKyAgICAgIGVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNjbikgPT0gY250KTsKKyAKKyAgICAgICBzaGRyX2luZm9bY250XS5zY24gPSBzY247CisgCitAQCAtNTk1LDYgKzYwMCw3IEBACisgCQkJCQlzaGRyX2luZm9bY250XS5zaGRyLnNoX25hbWUpOworICAgICAgIGlmIChzaGRyX2luZm9bY250XS5uYW1lID09IE5VTEwpCisgCXsKKysJaWxsZm9ybWVkOgorIAkgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaWxsZm9ybWVkIGZpbGUgJyVzJyIpLCBmbmFtZSk7CisgCSAgZ290byBmYWlsX2Nsb3NlOworIAl9CitAQCAtNjA0LDYgKzYxMCw4IEBACisgCisgICAgICAgLyogUmVtZW1iZXIgdGhlIHNoZHIuc2hfbGluayB2YWx1ZS4gICovCisgICAgICAgc2hkcl9pbmZvW2NudF0ub2xkX3NoX2xpbmsgPSBzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbms7CisrICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLm9sZF9zaF9saW5rID49IHNobnVtKQorKwlnb3RvIGlsbGZvcm1lZDsKKyAKKyAgICAgICAvKiBTZWN0aW9ucyBpbiBmaWxlcyBvdGhlciB0aGFuIHJlbG9jYXRhYmxlIG9iamVjdCBmaWxlcyB3aGljaAorIAkgYXJlIG5vdCBsb2FkZWQgY2FuIGJlIGZyZWVseSBtb3ZlZCBieSB1cy4gIEluIHJlbG9jYXRhYmxlCitAQCAtNjE2LDcgKzYyNCw3IEBACisgCSBhcHByb3ByaWF0ZSByZWZlcmVuY2UuICAqLworICAgICAgIGlmICh1bmxpa2VseSAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUJfU0hORFgpKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS5zeW10YWJfaWR4ID09IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnN5bXRhYl9pZHggPT0gMCk7CisgCSAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10uc3ltdGFiX2lkeCA9IGNudDsKKyAJfQorICAgICAgIGVsc2UgaWYgKHVubGlrZWx5IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0dST1VQKSkKK0BAIC02MzMsNyArNjQxLDEyIEBACisgCSAgZm9yIChpbm5lciA9IDE7CisgCSAgICAgICBpbm5lciA8IHNoZHJfaW5mb1tjbnRdLmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCk7CisgCSAgICAgICArK2lubmVyKQorKwkgICAgeworKwkgICAgICBpZiAoZ3JwcmVmW2lubmVyXSA8IHNobnVtKQorIAkgICAgc2hkcl9pbmZvW2dycHJlZltpbm5lcl1dLmdyb3VwX2lkeCA9IGNudDsKKysJICAgICAgZWxzZQorKwkJZ290byBpbGxmb3JtZWQ7CisrCSAgICB9CisgCisgCSAgaWYgKGlubmVyID09IDEgfHwgKGlubmVyID09IDIgJiYgKGdycHJlZlswXSAmIEdSUF9DT01EQVQpID09IDApKQorIAkgICAgLyogSWYgdGhlIHNlY3Rpb24gZ3JvdXAgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgdGhpcworQEAgLTY0NCw3ICs2NTcsNyBAQAorIAl9CisgICAgICAgZWxzZSBpZiAodW5saWtlbHkgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfR05VX3ZlcnN5bSkpCisgCXsKKy0JICBhc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID09IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID09IDApOworIAkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID0gY250OworIAl9CisgCitAQCAtNjUyLDcgKzY2NSw3IEBACisgCSBkaXNjYXJkZWQgcmlnaHQgYXdheS4gICovCisgICAgICAgaWYgKChzaGRyX2luZm9bY250XS5zaGRyLnNoX2ZsYWdzICYgU0hGX0dST1VQKSAhPSAwKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bY250XS5ncm91cF9pZHggIT0gMCk7CisrCSAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4ICE9IDApOworIAorIAkgIGlmIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4XS5pZHggPT0gMCkKKyAJICAgIHsKK0BAIC03MjcsMTEgKzc0MCwxNSBAQAorIAkgICAgeworIAkgICAgICAvKiBJZiBhIHJlbG9jYXRpb24gc2VjdGlvbiBpcyBtYXJrZWQgYXMgYmVpbmcgcmVtb3ZlZCBtYWtlCisgCQkgc3VyZSB0aGUgc2VjdGlvbiBpdCBpcyByZWxvY2F0aW5nIGlzIHJlbW92ZWQsIHRvby4gICovCistCSAgICAgIGlmICgoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9SRUwKKysJICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfUkVMCisgCQkgICB8fCBzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1JFTEEpCistCQkgICYmIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCAhPSAwKQorKwkJeworKwkJICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvID49IHNobnVtKQorKwkJICAgIGdvdG8gaWxsZm9ybWVkOworKwkJICBlbHNlIGlmIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggIT0gMCkKKyAJCXNoZHJfaW5mb1tjbnRdLmlkeCA9IDE7CisgCSAgICB9CisrCSAgICB9CisgCisgCSAgaWYgKHNoZHJfaW5mb1tjbnRdLmlkeCA9PSAxKQorIAkgICAgeworQEAgLTc1OCw3ICs3NzUsNyBAQAorIAkJICBpZiAoc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeCAhPSAwCisgCQkgICAgICAmJiBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uZGF0YSA9PSBOVUxMKQorIAkJICAgIHsKKy0JCSAgICAgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUIpOworKwkJICAgICAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUIpOworIAorIAkJICAgICAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLmRhdGEKKyAJCQk9IGVsZl9nZXRkYXRhIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uc2NuLAorQEAgLTc5OCw2ICs4MTUsOSBAQAorIAkJICAgICAgZWxzZSBpZiAoc2NuaWR4ID09IFNITl9YSU5ERVgpCisgCQkJc2NuaWR4ID0geG5keDsKKyAKKysJCSAgICAgIGlmIChzY25pZHggPj0gc2hudW0pCisrCQkJZ290byBpbGxmb3JtZWQ7CisrCisgCQkgICAgICBpZiAoc2hkcl9pbmZvW3NjbmlkeF0uaWR4ID09IDApCisgCQkJLyogVGhpcyBzeW1ib2wgdGFibGUgaGFzIGEgcmVhbCBzeW1ib2wgaW4KKyAJCQkgICBhIGRpc2NhcmRlZCBzZWN0aW9uLiAgU28gcHJlc2VydmUgdGhlCitAQCAtODI4LDEyICs4NDgsMTYgQEAKKyAJCX0KKyAKKyAJICAgICAgLyogSGFuZGxlIHJlZmVyZW5jZXMgdGhyb3VnaCBzaF9pbmZvLiAgKi8KKy0JICAgICAgaWYgKFNIX0lORk9fTElOS19QICgmc2hkcl9pbmZvW2NudF0uc2hkcikKKy0JCSAgJiYgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID09IDApCisrCSAgICAgIGlmIChTSF9JTkZPX0xJTktfUCAoJnNoZHJfaW5mb1tjbnRdLnNoZHIpKQorKwkJeworKwkJICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvID49IHNobnVtKQorKwkJICAgIGdvdG8gaWxsZm9ybWVkOworKwkJICBlbHNlIGlmICggc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID09IDApCisgCQl7CisgCQkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9IDE7CisgCQkgIGNoYW5nZXMgfD0gc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvIDwgY250OworIAkJfQorKwkJfQorIAorIAkgICAgICAvKiBNYXJrIHRoZSBzZWN0aW9uIGFzIGludmVzdGlnYXRlZC4gICovCisgCSAgICAgIHNoZHJfaW5mb1tjbnRdLmlkeCA9IDI7CitAQCAtOTcyLDcgKzk5Niw3IEBACisgCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoIndoaWxlIGdlbmVyYXRpbmcgb3V0cHV0IGZpbGU6ICVzIiksCisgCQkgZWxmX2Vycm1zZyAoLTEpKTsKKyAKKy0JYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisrCWVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKyAKKyAJLyogQWRkIHRoaXMgbmFtZSB0byB0aGUgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlLiAgKi8KKyAJc2hkcl9pbmZvW2NudF0uc2UgPSBlYmxfc3RydGFiYWRkIChzaHN0LCBzaGRyX2luZm9bY250XS5uYW1lLCAwKTsKK0BAIC0xMDA5LDcgKzEwMzMsNyBAQAorIAllcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICAgICAgZ2V0dGV4dCAoIndoaWxlIGNyZWF0ZSBzZWN0aW9uIGhlYWRlciBzZWN0aW9uOiAlcyIpLAorIAkgICAgICAgZWxmX2Vycm1zZyAoLTEpKTsKKy0gICAgICBhc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKysgICAgICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisgCisgICAgICAgc2hkcl9pbmZvW2NudF0uZGF0YSA9IGVsZl9uZXdkYXRhIChzaGRyX2luZm9bY250XS5uZXdzY24pOworICAgICAgIGlmIChzaGRyX2luZm9bY250XS5kYXRhID09IE5VTEwpCitAQCAtMTA2NSw3ICsxMDg5LDcgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoIndoaWxlIGNyZWF0ZSBzZWN0aW9uIGhlYWRlciBzZWN0aW9uOiAlcyIpLAorIAkgICBlbGZfZXJybXNnICgtMSkpOworLSAgYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IGlkeCk7CisrICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IGlkeCk7CisgCisgICAvKiBGaW5hbGl6ZSB0aGUgc3RyaW5nIHRhYmxlIGFuZCBmaWxsIGluIHRoZSBjb3JyZWN0IGluZGljZXMgaW4gdGhlCisgICAgICBzZWN0aW9uIGhlYWRlcnMuICAqLworQEAgLTExNTUsMjAgKzExNzksMjAgQEAKKyAJCSAgICBzaG5keGRhdGEgPSBlbGZfZ2V0ZGF0YSAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLnNjbiwKKyAJCQkJCSAgICAgTlVMTCk7CisgCistCQkgICAgYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkgICAgZWxmX2Fzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpKQorIAkJCSAgICA+PSBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBlbHNpemUpOworIAkJICB9CisgCisgCQlpZiAoc2hkcl9pbmZvW2NudF0udmVyc2lvbl9pZHggIT0gMCkKKyAJCSAgeworLQkJICAgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9EWU5TWU0pOworKwkJICAgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfRFlOU1lNKTsKKyAJCSAgICAvKiBUaGlzIHNlY3Rpb24gaGFzIGFzc29jaWF0ZWQgdmVyc2lvbgorIAkJICAgICAgIGluZm9ybWF0aW9uLiAgV2UgaGF2ZSB0byBtb2RpZnkgdGhhdAorIAkJICAgICAgIGluZm9ybWF0aW9uLCB0b28uICAqLworIAkJICAgIHZlcnNpb25kYXRhID0gZWxmX2dldGRhdGEgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS52ZXJzaW9uX2lkeF0uc2NuLAorIAkJCQkJICAgICAgIE5VTEwpOworIAorLQkJICAgIGFzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEdFbGZfVmVyc3ltKSkKKysJCSAgICBlbGZfYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoR0VsZl9WZXJzeW0pKQorIAkJCSAgICA+PSBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBlbHNpemUpOworIAkJICB9CisgCitAQCAtMTIyMyw3ICsxMjQ3LDcgQEAKKyAJCSAgICAgIHNlYyA9IHNoZHJfaW5mb1tzeW0tPnN0X3NobmR4XS5pZHg7CisgCQkgICAgZWxzZQorIAkJICAgICAgeworLQkJCWFzc2VydCAoc2huZHhkYXRhICE9IE5VTEwpOworKwkJCWVsZl9hc3NlcnQgKHNobmR4ZGF0YSAhPSBOVUxMKTsKKyAKKyAJCQlzZWMgPSBzaGRyX2luZm9beHNobmR4XS5pZHg7CisgCQkgICAgICB9CitAQCAtMTI0NCw3ICsxMjY4LDcgQEAKKyAJCQkgICAgbnhzaG5keCA9IHNlYzsKKyAJCQkgIH0KKyAKKy0JCQlhc3NlcnQgKHNlYyA8IFNITl9MT1JFU0VSVkUgfHwgc2huZHhkYXRhICE9IE5VTEwpOworKwkJCWVsZl9hc3NlcnQgKHNlYyA8IFNITl9MT1JFU0VSVkUgfHwgc2huZHhkYXRhICE9IE5VTEwpOworIAorIAkJCWlmICgoaW5uZXIgIT0gZGVzdGlkeCB8fCBuc2huZHggIT0gc3ltLT5zdF9zaG5keAorIAkJCSAgICAgfHwgKHNobmR4ZGF0YSAhPSBOVUxMICYmIG54c2huZHggIT0geHNobmR4KSkKK0BAIC0xMjY4LDcgKzEyOTIsNyBAQAorIAkJCSAgICAgfHwgc2hkcl9pbmZvW2NudF0uZGVidWdfZGF0YSA9PSBOVUxMKQorIAkJICAgICAgLyogVGhpcyBpcyBhIHNlY3Rpb24gc3ltYm9sIGZvciBhIHNlY3Rpb24gd2hpY2ggaGFzCisgCQkJIGJlZW4gcmVtb3ZlZC4gICovCistCQkgICAgICBhc3NlcnQgKEdFTEZfU1RfVFlQRSAoc3ltLT5zdF9pbmZvKSA9PSBTVFRfU0VDVElPTik7CisrCQkgICAgICBlbGZfYXNzZXJ0IChHRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX1NFQ1RJT04pOworIAkJICB9CisgCisgCQlpZiAoZGVzdGlkeCAhPSBpbm5lcikKK0BAIC0xNDU1LDExICsxNDc5LDExIEBACisgCQkgIHsKKyAJCSAgICBHRWxmX1N5bSBzeW1fbWVtOworIAkJICAgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZCwgaW5uZXIsICZzeW1fbWVtKTsKKy0JCSAgICBhc3NlcnQgKHN5bSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisgCisgCQkgICAgY29uc3QgY2hhciAqbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc3Ryc2huZHgsCisgCQkJCQkJICAgc3ltLT5zdF9uYW1lKTsKKy0JCSAgICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAobmFtZSAhPSBOVUxMKTsKKyAJCSAgICBzaXplX3QgaGlkeCA9IGVsZl9oYXNoIChuYW1lKSAlIG5idWNrZXQ7CisgCisgCQkgICAgaWYgKGJ1Y2tldFtoaWR4XSA9PSAwKQorQEAgLTE0NzgsNyArMTUwMiw3IEBACisgCSAgICBlbHNlCisgCSAgICAgIHsKKyAJCS8qIEFscGhhIGFuZCBTMzkwIDY0LWJpdCB1c2UgNjQtYml0IFNIVF9IQVNIIGVudHJpZXMuICAqLworLQkJYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX2VudHNpemUKKysJCWVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfZW50c2l6ZQorIAkJCT09IHNpemVvZiAoRWxmNjRfWHdvcmQpKTsKKyAKKyAJCUVsZjY0X1h3b3JkICpidWNrZXQgPSAoRWxmNjRfWHdvcmQgKikgaGFzaGQtPmRfYnVmOworQEAgLTE1MDksMTEgKzE1MzMsMTEgQEAKKyAJCSAgeworIAkJICAgIEdFbGZfU3ltIHN5bV9tZW07CisgCQkgICAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kLCBpbm5lciwgJnN5bV9tZW0pOworLQkJICAgIGFzc2VydCAoc3ltICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKHN5bSAhPSBOVUxMKTsKKyAKKyAJCSAgICBjb25zdCBjaGFyICpuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzdHJzaG5keCwKKyAJCQkJCQkgICBzeW0tPnN0X25hbWUpOworLQkJICAgIGFzc2VydCAobmFtZSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChuYW1lICE9IE5VTEwpOworIAkJICAgIHNpemVfdCBoaWR4ID0gZWxmX2hhc2ggKG5hbWUpICUgbmJ1Y2tldDsKKyAKKyAJCSAgICBpZiAoYnVja2V0W2hpZHhdID09IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZW1vdmUtdW51c2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBmcm9tIHRoZSBjb2RlIHRvIHByZXZlbnQgLVdlcnJvciBjYXVzaW5nIGEgYnVpbGQKK2ZhaWx1cmUgb24gaG9zdHMgd2l0aCBHQ0MgNC42LgorCitUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgdXBzdHJlYW0gc28gc2hvdWxkIG5vdCBiZSByZXF1aXJlZCBvbmNlIHdlJ3ZlIHVwZGF0ZWQKK3RvIGVsZnV0aWxzIDAuMTUyIG9yIGxhdGVyLiBUaGVyZWZvcmUgdGhpcyBwYXRjaCBjb25zb2xpZGF0ZXMgc2V2ZXJhbAorY2hhbmdlcyBmcm9tIGVsZnV0aWxzIHVwc3RyZWFtIGJ5IFJvbGFuZCBNY0dyYXRoIGludG8gYSBzaW5nbGUgZmlsZSBzbyB0aGF0CitpdCdzIGVhc2llciB0byByZW1vdmUgbGF0ZXIgb25jZSB3ZSB1cGdyYWRlLgorTGlua3MgdG8gdXBzdHJlYW0gZ2l0d2ViIG9mIHRoZSBjb25zb2xpZGF0ZWQgY29tbWl0cyBmb2xsb3c6CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD03MDk0ZDAwYTE2OWFmYjI3ZTAzMjNmODU4MGU4MTc3OThhZTdjMjQwCistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD1mZDk5MjU0MzE4NTEyNmViMDI4MGMxZWUwODgzZTA3MzAyMDQ5OWI0CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD00ZGI4OWYwNGJiNTkzMjdhYmQ3YTNiNjBlODhmMmU3ZTczYzY1Yzc5CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD04ZjZjMTc5NWFiOWQ0MWYwMzgwNWVlYmQ1NTc2NzA3MGFkZTU1YWFjCistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD0yNDA3ODRiNDhhYTI3NjgyMmM1YTYxYzlhZDZhNDM1NTA1MWNlMjU5CisKK0pvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4gLSAwNi8wNC8xMQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliYXNtL2FzbV9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliYXNtL2FzbV9uZXdzY24uYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9hc21fbmV3c2NuLmMKK0BAIC0xNjIsNyArMTYyLDYgQEAgYXNtX25ld3NjbiAoY3R4LCBzY25uYW1lLCB0eXBlLCBmbGFncykKKyAgICAgIEdFbGZfWHdvcmQgZmxhZ3M7CisgeworICAgc2l6ZV90IHNjbm5hbWVfbGVuID0gc3RybGVuIChzY25uYW1lKSArIDE7CistICB1bnNpZ25lZCBsb25nIGludCBodmFsOworICAgQXNtU2NuX3QgKnJlc3VsdDsKKyAKKyAgIC8qIElmIG5vIGNvbnRleHQgaXMgZ2l2ZW4gdGhlcmUgbWlnaHQgYmUgYW4gZWFybGllciBlcnJvci4gICovCitAQCAtMTgwLDggKzE3OSw2IEBAIGFzbV9uZXdzY24gKGN0eCwgc2NubmFtZSwgdHlwZSwgZmxhZ3MpCisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKyAKKy0gIGh2YWwgPSBlbGZfaGFzaCAoc2NubmFtZSk7CistCisgICByd2xvY2tfd3Jsb2NrIChjdHgtPmxvY2spOworIAorICAgLyogVGhpcyBpcyBhIG5ldyBzZWN0aW9uLiAgKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZWxmbGludC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworQEAgLTcwNyw5ICs3MDcsMTAgQEAgc2VjdGlvbiBbJTJkXSAnJXMnOiBzeW1ib2wgJXp1OiBpbnZhbGlkIAorIAl7CisgCSAgaWYgKHhuZHhkYXRhID09IE5VTEwpCisgCSAgICB7CistCSAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorKwkgICAgICBpZiAoIW5vX3huZHhfd2FybmVkKQorKwkJRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzeW1ib2wgJXp1OiB0b28gbGFyZ2Ugc2VjdGlvbiBpbmRleCBidXQgbm8gZXh0ZW5kZWQgc2VjdGlvbiBpbmRleCBzZWN0aW9uXG4iKSwKKy0JCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250KTsKKysJCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQpOworIAkgICAgICBub194bmR4X3dhcm5lZCA9IHRydWU7CisgCSAgICB9CisgCSAgZWxzZSBpZiAoeG5keCA8IFNITl9MT1JFU0VSVkUpCitAQCAtMTU5MiwxMCArMTU5Myw2IEBAIGNoZWNrX2R5bmFtaWMgKEVibCAqZWJsLCBHRWxmX0VoZHIgKmVoZHIKKyAgICAgICBbRFRfU1RSU1pdID0gdHJ1ZSwKKyAgICAgICBbRFRfU1lNRU5UXSA9IHRydWUKKyAgICAgfTsKKy0gIEdFbGZfQWRkciByZWxhZGRyID0gMDsKKy0gIEdFbGZfV29yZCByZWxzeiA9IDA7CistICBHRWxmX0FkZHIgcGx0cmVsYWRkciA9IDA7CistICBHRWxmX1dvcmQgcGx0cmVsc3ogPSAwOworIAorICAgbWVtc2V0IChoYXNfZHQsICdcMCcsIHNpemVvZiAoaGFzX2R0KSk7CisgICBtZW1zZXQgKGhhc192YWxfZHQsICdcMCcsIHNpemVvZiAoaGFzX3ZhbF9kdCkpOworQEAgLTE2OTQsMTUgKzE2OTEsNiBAQCBzZWN0aW9uIFslMmRdICclcyc6IGVudHJ5ICV6dTogbGV2ZWwgMiB0Cisgc2VjdGlvbiBbJTJkXSAnJXMnOiBlbnRyeSAlenU6IERUX1BMVFJFTCB2YWx1ZSBtdXN0IGJlIERUX1JFTCBvciBEVF9SRUxBXG4iKSwKKyAJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCk7CisgCistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUkVMKQorLQlyZWxhZGRyID0gZHluLT5kX3VuLmRfcHRyOworLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTFNaKQorLQlyZWxzeiA9IGR5bi0+ZF91bi5kX3ZhbDsKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9KTVBSRUwpCistCXBsdHJlbGFkZHIgPSBkeW4tPmRfdW4uZF9wdHI7CistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUExUUkVMU1opCistCXBsdHJlbHN6ID0gZHluLT5kX3VuLmRfdmFsOworLQorICAgICAgIC8qIENoZWNrIHRoYXQgYWRkcmVzc2VzIGZvciBlbnRyaWVzIGFyZSBpbiBsb2FkZWQgc2VnbWVudHMuICAqLworICAgICAgIHN3aXRjaCAoZHluLT5kX3RhZykKKyAJeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZGdlbmVyaWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2xkZ2VuZXJpYy5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkZ2VuZXJpYy5jCitAQCAtMjg1LDEyICsyODUsMTAgQEAgc3RhdGljIGludAorIGNoZWNrX2Zvcl9kdXBsaWNhdGUyIChzdHJ1Y3QgdXNlZGZpbGVzICpuZXdwLCBzdHJ1Y3QgdXNlZGZpbGVzICpsaXN0KQorIHsKKyAgIHN0cnVjdCB1c2VkZmlsZXMgKmZpcnN0OworLSAgc3RydWN0IHVzZWRmaWxlcyAqcHJldnA7CisgCisgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIHByZXZwID0gbGlzdDsKKyAgIGxpc3QgPSBmaXJzdCA9IGxpc3QtPm5leHQ7CisgICBkbworICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZHNjcmlwdC55CisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LnkKK0BAIC04MDIsMTIgKzgwMiw5IEBAIGFkZF92ZXJzaW9ucyAoc3RydWN0IHZlcnNpb24gKnZlcnNpb25zKQorIAorICAgZG8KKyAgICAgeworLSAgICAgIHN0cnVjdCB2ZXJzaW9uICpvbGRwOworLQorICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5sb2NhbF9uYW1lcywgdHJ1ZSk7CisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmdsb2JhbF9uYW1lcywgZmFsc2UpOworIAorLSAgICAgIG9sZHAgPSB2ZXJzaW9uczsKKyAgICAgICB2ZXJzaW9ucyA9IHZlcnNpb25zLT5uZXh0OworICAgICB9CisgICB3aGlsZSAodmVyc2lvbnMgIT0gTlVMTCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3Vuc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3Vuc3RyaXAuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy91bnN0cmlwLmMKK0BAIC0xMzAxLDcgKzEzMDEsNiBAQCBtb3JlIHNlY3Rpb25zIGluIHN0cmlwcGVkIGZpbGUgdGhhbiBkZWJ1CisgICAvKiBNYXRjaCBlYWNoIGRlYnVnaW5mbyBzZWN0aW9uIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgc3RyaXBwZWQgc2VjdGlvbi4gICovCisgICBib29sIGNoZWNrX3ByZWxpbmsgPSBmYWxzZTsKKyAgIEVsZl9TY24gKnVuc3RyaXBwZWRfc3ltdGFiID0gTlVMTDsKKy0gIHNpemVfdCB1bnN0cmlwcGVkX3N0cnRhYl9uZHggPSBTSE5fVU5ERUY7CisgICBzaXplX3QgYWxsb2NfYXZhaWwgPSAwOworICAgc2NuID0gTlVMTDsKKyAgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKHVuc3RyaXBwZWQsIHNjbikpICE9IE5VTEwpCitAQCAtMTMxMyw3ICsxMzEyLDYgQEAgbW9yZSBzZWN0aW9ucyBpbiBzdHJpcHBlZCBmaWxlIHRoYW4gZGVidQorICAgICAgIGlmIChzaGRyLT5zaF90eXBlID09IFNIVF9TWU1UQUIpCisgCXsKKyAJICB1bnN0cmlwcGVkX3N5bXRhYiA9IHNjbjsKKy0JICB1bnN0cmlwcGVkX3N0cnRhYl9uZHggPSBzaGRyLT5zaF9saW5rOworIAkgIGNvbnRpbnVlOworIAl9CisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZHNjcmlwdC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LmMKK0BAIC0yNzI4LDEyICsyNzI4LDkgQEAgYWRkX3ZlcnNpb25zIChzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbnMpCisgCisgICBkbworICAgICB7CistICAgICAgc3RydWN0IHZlcnNpb24gKm9sZHA7CistCisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmxvY2FsX25hbWVzLCB0cnVlKTsKKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+Z2xvYmFsX25hbWVzLCBmYWxzZSk7CisgCistICAgICAgb2xkcCA9IHZlcnNpb25zOworICAgICAgIHZlcnNpb25zID0gdmVyc2lvbnMtPm5leHQ7CisgICAgIH0KKyAgIHdoaWxlICh2ZXJzaW9ucyAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkyZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT24gbWFueSBhcmNoaXRlY3R1cmVzIHRoaXMgdGVzdCBmYWlscyBiZWNhdXNlIGJpbmFyaWVzL2xpYnMgcHJvZHVjZWQgYnkKK2JpbnV0aWxzIGRvbid0IHBhc3MgZWxmbGludC4gSG93ZXZlciBlbGZ1dGlscyBzaG91bGRuJ3QgRlRCRlMgYmVjYXVzZSBvZiB0aGlzLgorCitTbyB3ZSBydW4gdGhlIHRlc3RzIG9uIGFsbCBhcmNocyB0byBzZWUgd2hhdCBicmVha3MsIGJ1dCBpZiBpdCBicmVha3Mgd2UgaWdub3JlCit0aGUgcmVzdWx0IChleGl0Y29kZSA3NyBtZWFuczogdGhpcyB0ZXN0IHdhcyBza2lwcGVkKS4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTI4L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjEyOC5vcmlnL3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAwNy0wNy0wOCAyMTo0NjoxNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjEyOC90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMDctMDctMDggMjE6NDY6NDkuMDAwMDAwMDAwICswMDAwCitAQCAtMzIsNyArMzIsNyBAQAorICMgIGVjaG8gJDEKKyAgIGlmIFsgLWYgJDEgXTsgdGhlbgorICAgICB0ZXN0cnVuIC4uL3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQgJDEgfHwKKy0gICAgeyBlY2hvICIqKiogZmFpbHVyZSBpbiAkMSI7IHN0YXR1cz0xOyB9CisrICAgIHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJDEiOyBzdGF0dXM9Nzc7IH0KKyAgIGZpCisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmMTZhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorb24gdWNsaWJjIHN5c3RlbXMgbGliaW50bCBhbmQgbGlidWFyZ3AgYXJlIHNlcGFyYXRlIGZyb20gbGliYy4KK3NvIHRoZXkgbmVlZCB0byBiZSBzcGVjaWZpZWQgb24gY29tbWFuZGxpbmUgd2hlbiB3ZSB1c2UgcHJveHktbGliaW50bAordGhlbiBsaWJpbnRsIGlzIGEgc3RhdGljIGFyY2hpdmUgc28gaXQgc2hvdWxkIGJlIGxpc3RlZCBsYXN0IHNpbmNlCitlbGZ1dGlscyBkb2VzIG5vdCByZXNwZWN0IGRpc2FibGUtbmxzIHdlIG5lZWQgdG8gbGluayBpbiBsaWJpbnRsCisKK1dlIGFkZCBhIG5ldyBvcHRpb24gLS1lbmFibGUtdWNsaWJjIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjb250cm9sCit0aGUgdWNsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCitAQCAtNTUsOSArNTUsMTYgQEAgQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwgW0FDX0RFRgorIAorIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCisgCisrQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKKytBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKKyt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKKytBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCisrQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQorKworK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQorKworIGRubCBBZGQgYWxsIHRoZSBsYW5ndWFnZXMgZm9yIHdoaWNoIHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlLgorIEFMTF9MSU5HVUFTPQorLQorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX1JBTkxJQgorIEFDX1BST0dfWUFDQworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL01ha2VmaWxlLmFtCitAQCAtOTMsNyArOTMsMTIgQEAgaWYgIU1VREZMQVAKKyBsaWJlbGZfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZWxmX3BpY19hX09CSkVDVFMgPSAkKGxpYmVsZl9hX1NPVVJDRVM6LmM9Lm9zKQorIAorKworIGxpYmVsZl9zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJlbGZfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBpZiBVU0VfTE9DS1MKKyBsaWJlbGZfc29fTERMSUJTICs9IC1scHRocmVhZAorIGVuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHcvTWFrZWZpbGUuYW0KK0BAIC05OCw2ICs5OCwxMSBAQCBpZiAhTVVERkxBUAorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBsaWJkd19zb19TT1VSQ0VTID0KKyBsaWJkdy5zbzogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSBcCisgCSAgLi4vbGliZHdmbC9saWJkd2ZsX3BpYy5hIC4uL2xpYmVibC9saWJlYmwuYSBcCitAQCAtMTA4LDcgKzExMyw3IEBAIGxpYmR3LnNvOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy4KKyAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKKy0JCS1sZGwgJCh6aXBfTElCUykKKysJCS1sZGwgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCisgCWlmIHJlYWRlbGYgLWQgJEAgfCBmZ3JlcCAtcSBURVhUUkVMOyB0aGVuIGV4aXQgMTsgZmkKKyAJbG4gLWZzICRAICRALiQoVkVSU0lPTikKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9NYWtlZmlsZS5hbQorQEAgLTYzLDYgKzYzLDEwIEBAIGkzODZfcGFyc2VfQ0ZMQUdTID0gLUROTU5FUz0iYHdjIC1sIDwgaTMKKyBpMzg2X2xleC5vOiBpMzg2X3BhcnNlLmgKKyBpMzg2X2dlbmRpc19MREFERCA9ICQobGliZXUpIC1sbSAkKGxpYm11ZGZsYXApCisgCisraWYgVVNFX1VDTElCQworK2kzODZfZ2VuZGlzX0xEQUREICs9IC1sdWFyZ3AgLWxpbnRsCisrZW5kaWYKKysKKyBpMzg2X3BhcnNlLmg6IGkzODZfcGFyc2UuYyA7CisgCisgbm9pbnN0X0hFQURFUlMgPSBtZW1vcnktYWNjZXNzLmggaTM4Nl9wYXJzZS5oIGkzODZfZGF0YS5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5OGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApAQCAtMCwwICsxLDE2MzIgQEAKKyNkZWZpbmUgTU5FTU9OSUNfQklUUyAxMAorI2RlZmluZSBTVUZGSVhfQklUUyAzCisjZGVmaW5lIEZDVDFfQklUUyA3CisjZGVmaW5lIFNUUjFfQklUUyA0CisjZGVmaW5lIE9GRjFfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8xX0JJQVMgMworI2RlZmluZSBPRkYxXzJfQklUUyA3CisjZGVmaW5lIE9GRjFfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMV8zX0JJVFMgMQorI2RlZmluZSBPRkYxXzNfQklBUyA3CisjZGVmaW5lIEZDVDJfQklUUyA2CisjZGVmaW5lIFNUUjJfQklUUyAyCisjZGVmaW5lIE9GRjJfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8xX0JJQVMgNQorI2RlZmluZSBPRkYyXzJfQklUUyA3CisjZGVmaW5lIE9GRjJfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJVFMgNAorI2RlZmluZSBPRkYyXzNfQklBUyA3CisjZGVmaW5lIEZDVDNfQklUUyA0CisjZGVmaW5lIFNUUjNfQklUUyAxCisjZGVmaW5lIE9GRjNfMV9CSVRTIDYKKyNkZWZpbmUgT0ZGM18xX0JJQVMgMTAKKyNkZWZpbmUgT0ZGM18yX0JJVFMgMQorI2RlZmluZSBPRkYzXzJfQklBUyAyMQorCisjaW5jbHVkZSA8aTM4Nl9kYXRhLmg+CisKKyNkZWZpbmUgc3VmZml4X25vbmUgMAorI2RlZmluZSBzdWZmaXhfdyAxCisjZGVmaW5lIHN1ZmZpeF93MCAyCisjZGVmaW5lIHN1ZmZpeF9XIDMKKyNkZWZpbmUgc3VmZml4X3R0dG4gNAorI2RlZmluZSBzdWZmaXhfRCA3CisjZGVmaW5lIHN1ZmZpeF93MSA1CisjZGVmaW5lIHN1ZmZpeF9XMSA2CisKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMV9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2F4LAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2Rpc3A4LAorICBGQ1RfZHNfYngsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tJHMsCisgIEZDVF9pbW0kdywKKyAgRkNUX2ltbTE2LAorICBGQ1RfaW1tNjQkdywKKyAgRkNUX2ltbTgsCisgIEZDVF9pbW1zOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQxNnJfbSwKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCQ4cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9yZWwsCisgIEZDVF9zZWwsCisgIEZDVF9zcmVnMiwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMV9zdHJbXSA9CisgICIlYXhcMCIKKyAgIiVjbFwwIgorICAiJXJheFwwIgorICAiJXN0XDAiCisgICIleG1tMFwwIgorICAiKiI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDFfc3RyX2lkeFtdID0geworICAwLAorICA0LAorICA4LAorICAxMywKKyAgMTcsCisgIDIzLAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMl9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2Fic3ZhbCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9vcmVnLAorICBGQ1Rfb3JlZyR3LAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMl9zdHJbXSA9CisgICIlcmN4XDAiCisgICIlc3QiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AyX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNSwKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDNfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDNfc3RyW10gPQorICAiJXJkeCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDNfc3RyX2lkeFtdID0geworICAwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zdHJfZW5jIGluc3RydGFiW10gPQoreworICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic2YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Jzd2FwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbHRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNleGl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Ntb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3B1aWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFicywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnRzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsZzIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxuMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkeiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZjJ4bTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnBhdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHRyYWN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeHAxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3FydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJuZGludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNjYWxlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkY3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0ZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVscCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZibGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zic3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9md2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5jbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZudSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZybCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZnJlZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuaW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHB0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9obHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lucywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zd2FwZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmxwZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaXJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDYsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWF2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ2R0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9saWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2NrLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2RzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMzUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2JsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnN3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6YmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92endsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25lZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdXNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BjbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm90LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXRzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkbXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHBtYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmR0c2MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NjYXMsIC5yZXAgPSAwLCAucmVwZSA9IDEsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWxhdW5jaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZXN1bWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9mZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZWFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Ztd3JpdGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2dkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW9uaXRvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDQsIC5zdHIzID0gMSwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9td2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG9zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VkMmEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3diaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2hudGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd3Jtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hsYXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkbXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0bXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNsZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzaGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2dldHNlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tscWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxMnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2xlYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9uLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZmx1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnNlcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3VzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR2YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhtaW5wb3N1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKK307CitzdGF0aWMgY29uc3QgdWludDhfdCBtYXRjaF9kYXRhW10gPQoreworICAweDEsIDB4ZmUsIDB4MTQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4MTAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHgyMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MTIsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJkLCAwLCAwLAorICAweDEyLCAweGYsIDB4ZjgsIDB4YzgsCisgIDB4MjMsIDB4ZiwgMHhhMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDB4YmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGIzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhhYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDI4LAorICAweDExLCAweGU4LAorICAweDEyLCAweGZmLCAweDM4LCAweDEwLAorICAweDEyLCAweGZmLCAweDM4LCAweDE4LAorICAweDExLCAweDk4LAorICAweDExLCAweDk5LAorICAweDExLCAweGY4LAorICAweDExLCAweGZjLAorICAweDExLCAweGZhLAorICAweDIyLCAweGYsIDB4NSwKKyAgMHgyMiwgMHhmLCAweDYsCisgIDB4MjIsIDB4ZiwgMHg3LAorICAweDIyLCAweGYsIDB4MzQsCisgIDB4MjIsIDB4ZiwgMHgzNSwKKyAgMHgxMSwgMHhmNSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4M2MsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDM4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4M2EsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE2LAorICAweDEzLCAweGYsIDB4ZmUsIDB4YjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YTIsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgxMSwgMHhjOCwKKyAgMHgyMiwgMHhkOSwgMHhkMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgyMiwgMHhkOSwgMHhlMSwKKyAgMHgyMiwgMHhkOSwgMHhlNCwKKyAgMHgyMiwgMHhkOSwgMHhlNSwKKyAgMHgyMiwgMHhkOSwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhlOSwKKyAgMHgyMiwgMHhkOSwgMHhlYSwKKyAgMHgyMiwgMHhkOSwgMHhlYiwKKyAgMHgyMiwgMHhkOSwgMHhlYywKKyAgMHgyMiwgMHhkOSwgMHhlZCwKKyAgMHgyMiwgMHhkOSwgMHhlZSwKKyAgMHgyMiwgMHhkOSwgMHhmMCwKKyAgMHgyMiwgMHhkOSwgMHhmMSwKKyAgMHgyMiwgMHhkOSwgMHhmMiwKKyAgMHgyMiwgMHhkOSwgMHhmMywKKyAgMHgyMiwgMHhkOSwgMHhmNCwKKyAgMHgyMiwgMHhkOSwgMHhmNSwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkOSwgMHhmOCwKKyAgMHgyMiwgMHhkOSwgMHhmOSwKKyAgMHgyMiwgMHhkOSwgMHhmYSwKKyAgMHgyMiwgMHhkOSwgMHhmYiwKKyAgMHgyMiwgMHhkOSwgMHhmYywKKyAgMHgyMiwgMHhkOSwgMHhmZCwKKyAgMHgyMiwgMHhkOSwgMHhmZSwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGM4LAorICAweDEyLCAweGRjLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGU4LAorICAweDEyLCAweGRjLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDE4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDI4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDMwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHg4LAorICAweDEyLCAweGRlLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkZiwgMHhlMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMiwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMywKKyAgMHgxMSwgMHg5YiwKKyAgMHgyMiwgMHhkYiwgMHhlMiwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDEwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZGUsIDB4ZDksCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDM4LAorICAweDEyLCAweGRhLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRkLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkYiwgMHhlMywKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHg4LAorICAweDEyLCAweGRkLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhmNCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhZiwgMCwgMCwKKyAgMHgyLCAweGZkLCAweDY5LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4ZTQsCisgIDB4MSwgMHhmZSwgMHhlYywKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAwLAorICAweDEsIDB4ZmUsIDB4NmMsCisgIDB4MTEsIDB4Y2QsCisgIDB4MTEsIDB4Y2MsCisgIDB4MjIsIDB4ZiwgMHg4LAorICAweDMzLCAweGYsIDB4MSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4Y2YsCisgIDB4MSwgMHhmMCwgMHg3MCwKKyAgMHgxMiwgMHhmLCAweGYwLCAweDgwLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MTEsIDB4ZTMsCisgIDB4MTEsIDB4ZWIsCisgIDB4MTEsIDB4ZTksCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4OWYsCisgIDB4MjMsIDB4ZiwgMHgyLCAwLCAwLAorICAweDEyLCAweDhkLCAwLCAwLAorICAweDExLCAweGM5LAorICAweDIzLCAweGYsIDB4YjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDMwLAorICAweDExLCAweGYwLAorICAweDEsIDB4ZmUsIDB4YWMsCisgIDB4MTEsIDB4ZTIsCisgIDB4MTEsIDB4ZTEsCisgIDB4MTEsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHgzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4OGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhjNiwgMHgzOCwgMCwKKyAgMHgxLCAweGYwLCAweGIwLAorICAweDEsIDB4ZmUsIDB4YTAsCisgIDB4MSwgMHhmZSwgMHhhMiwKKyAgMHgyMywgMHhmLCAweDIwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIzLCAweGMwLCAweGMwLAorICAweDEyLCAweDhjLCAwLCAwLAorICAweDEyLCAweDhlLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTQsCisgIDB4MjMsIDB4ZiwgMHhiZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNywgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZjMsIDB4OTAsCisgIDB4MTEsIDB4OTAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhiOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGZlLCAweGMsCisgIDB4MSwgMHhmZSwgMHhlNiwKKyAgMHgxLCAweGZlLCAweGVlLAorICAweDEsIDB4ZmUsIDB4NmUsCisgIDB4MTIsIDB4OGYsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4OGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MSwKKyAgMHgxMSwgMHg5ZCwKKyAgMHgxMiwgMHhmZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgzMCwKKyAgMHgxLCAweGY4LCAweDUwLAorICAweDEsIDB4ZjgsIDB4NTgsCisgIDB4MSwgMHhmZCwgMHg2OCwKKyAgMHgxLCAweGU3LCAweDYsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MCwKKyAgMHgxMSwgMHg5YywKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmLCAweDMyLAorICAweDIyLCAweGYsIDB4MzMsCisgIDB4MjIsIDB4ZiwgMHgzMSwKKyAgMHgxMSwgMHhjMywKKyAgMHgxMSwgMHhjMiwKKyAgMHgxMSwgMHhjYiwKKyAgMHgxMSwgMHhjYSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGFhLAorICAweDExLCAweDllLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MTgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDFjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxOCwKKyAgMHgxLCAweGZlLCAweGFlLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YTUsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZCwgMCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzEsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMyLAorICAweDMzLCAweGYsIDB4MSwgMHhjMywKKyAgMHgzMywgMHhmLCAweDEsIDB4YzQsCisgIDB4MjMsIDB4ZiwgMHg3OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM5LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDIwLAorICAweDExLCAweGY5LAorICAweDExLCAweGZkLAorICAweDExLCAweGZiLAorICAweDEsIDB4ZmUsIDB4YWEsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4MjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDJjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDg0LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMCwKKyAgMHgyMiwgMHhmLCAweGIsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDI4LAorICAweDIyLCAweGYsIDB4OSwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDB4MWYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzMCwKKyAgMHgxMywgMHhmLCAweGZlLCAweGMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODYsIDAsIDAsCisgIDB4MSwgMHhmOCwgMHg5MCwKKyAgMHgxMSwgMHhkNywKKyAgMHgyLCAweGZlLCAweDMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDMwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGViLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTgsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEyLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE2LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTYsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzNywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDZmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDM4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQ4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGY4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZTgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmMCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGY4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2MsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2UsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2IsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGIsIDAsIDAsCisgIDB4MSwgMHhlNywgMHg3LAorfTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTRjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNjY4YWNjZjMyMmZkNzE4NWUyNzNiZmQ1MGI4NDMyMGU3MWQ5ZGU1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTAgQXByIDIwMTUgMDA6Mjk6MTggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZWxmX2dldGFyc3ltOiBTaWxlbmNlIC1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZCBmYWxzZQorIHBvc2l0aXZlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgbGliZWxmL2VsZl9nZXRhcnN5bS5jIHwgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZl9nZXRhcnN5bS5jIGIvbGliZWxmL2VsZl9nZXRhcnN5bS5jCitpbmRleCBkMGJiMjhhLi4wODk1NGQyIDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZl9nZXRhcnN5bS5jCisrKysgYi9saWJlbGYvZWxmX2dldGFyc3ltLmMKK0BAIC0xNjUsOCArMTY1LDEzIEBAIGVsZl9nZXRhcnN5bSAoZWxmLCBwdHIpCisgICAgICAgaW50IHcgPSBpbmRleDY0X3AgPyA4IDogNDsKKyAKKyAgICAgICAvKiBXZSBoYXZlIGFuIGFyY2hpdmUuICBUaGUgZmlyc3Qgd29yZCBpbiB0aGVyZSBpcyB0aGUgbnVtYmVyIG9mCistCSBlbnRyaWVzIGluIHRoZSB0YWJsZS4gICovCistICAgICAgdWludDY0X3QgbjsKKysJIGVudHJpZXMgaW4gdGhlIHRhYmxlLgorKwkgU2V0IHRvIFNJWkVfTUFYIGp1c3QgdG8gc2lsZW5jZSAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQKKysJIGVsZl9nZXRhcnN5bS5jOjI5MDo5OiBlcnJvcjogJ24nIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgorKwkgVGhlIHJlYWRfbnVtYmVyX2VudHJpZXMgZnVuY3Rpb24gZG9lc24ndCBpbml0aWFsaXplIG4gb25seSB3aGVuIHJldHVybmluZworKwkgLTEgd2hpY2ggaW4gdHVybiBlbnN1cmVzIHRvIGp1bXAgb3ZlciB1c2FnZSBvZiB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCisrCSAqLworKyAgICAgIHVpbnQ2NF90IG4gPSBTSVpFX01BWDsKKyAgICAgICBzaXplX3Qgb2ZmID0gZWxmLT5zdGFydF9vZmZzZXQgKyBTQVJNQUcgKyBzaXplb2YgKHN0cnVjdCBhcl9oZHIpOworICAgICAgIGlmIChyZWFkX251bWJlcl9lbnRyaWVzICgmbiwgZWxmLCAmb2ZmLCBpbmRleDY0X3ApIDwgMCkKKyAJeworLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIzYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitbUEFUQ0hdIGZpeCBhIHN0YWNrLXVzYWdlIHdhcm5pbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK25vdCB1c2UgYSB2YXJpYWJsZSB0byBhcyBhIGFycmF5IHNpemUsIG90aGVyd2lzZSB0aGUgd2FybmluZyB0byBlcnJvciB0aGF0CitzdGFjayB1c2FnZSBtaWdodCBiZSB1bmJvdW5kZWQgWy1XZXJyb3I9c3RhY2stdXNhZ2U9XSB3aWxsIGhhcHBlbgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9wcGNfaW5pdHJlZy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvcHBjX2luaXRyZWcuYyBiL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKK2luZGV4IDY0ZjUzNzkuLjUyZGRlM2UgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCisrKysgYi9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCitAQCAtOTMsNyArOTMsNyBAQCBwcGNfc2V0X2luaXRpYWxfcmVnaXN0ZXJzX3RpZCAocGlkX3QgdGlkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJcmV0dXJuIGZhbHNlOworICAgICB9CisgICBjb25zdCBzaXplX3QgZ3BycyA9IHNpemVvZiAodXNlcl9yZWdzLnIuZ3ByKSAvIHNpemVvZiAoKnVzZXJfcmVncy5yLmdwcik7CistICBEd2FyZl9Xb3JkIGR3YXJmX3JlZ3NbZ3Byc107CisrICBEd2FyZl9Xb3JkIGR3YXJmX3JlZ3Nbc2l6ZW9mICh1c2VyX3JlZ3Muci5ncHIpIC8gc2l6ZW9mICgqdXNlcl9yZWdzLnIuZ3ByKV07CisgICBmb3IgKHVuc2lnbmVkIGdwciA9IDA7IGdwciA8IGdwcnM7IGdwcisrKQorICAgICBkd2FyZl9yZWdzW2dwcl0gPSB1c2VyX3JlZ3Muci5ncHJbZ3ByXTsKKyAgIGlmICghIHNldGZ1bmMgKDAsIGdwcnMsIGR3YXJmX3JlZ3MsIGFyZykpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlOTJkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Rpc2FibGUgdGhlIHRlc3QgdG8gY29udmVydCBldWMtanAKKworUmVtb3ZlIHRoZSB0ZXN0ICJUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOgorTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzIHByb3ZpZGVkIgorc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBIUC1VWCBhbmQgaWYgdGhlIGV1Yy1qcCBpcyBub3QKK2luc3RhbGxlZCBvbiB0aGUgaG9zdCwgdGhlIGRlcGVuZGVuY2Ugd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBidWlsZGluZyBmYWlsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9pY29udi5tNCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9tNC9pY29udi5tNCBiL200L2ljb252Lm00CitpbmRleCBhNTAzNjQ2Li4yOTlmMWViIDEwMDY0NAorLS0tIGEvbTQvaWNvbnYubTQKKysrKyBiL200L2ljb252Lm00CitAQCAtMTU5LDYgKzE1OSw3IEBAIGludCBtYWluICgpCisgICAgICAgfQorICAgfQorICNlbmRpZgorKyNpZiAwCisgICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgIHByb3ZpZGVkLiAgKi8KKyAgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KK0BAIC0xNzAsNiArMTcxLDcgQEAgaW50IG1haW4gKCkKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyB9XV0pXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YzRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNjI1IEBACitGcm9tIDBkYjE2ODdlZWUwYjRkMTZjY2JjNDBkYjVhMDZiNTc0ZmNhNjYxNGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE0IE5vdiAyMDE0IDE1OjI1OjQyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlYmFzZSBhcm1fYmFja2VuZC5kaWZmIGZyb20gMC4xNTkgdG8gMC4xNjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyAgICAgICAgICAgICAgICAgfCAgMTggKysrKy0KKyBiYWNrZW5kcy9hcm1fcmVncy5jICAgICAgICAgICAgICAgICB8IDEzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBiYWNrZW5kcy9hcm1fcmV0dmFsLmMgICAgICAgICAgICAgICB8ICA0NCArKysrKysrKysrKy0KKyBiYWNrZW5kcy9saWJlYmxfYXJtLmggICAgICAgICAgICAgICB8ICAgOSArKysKKyBsaWJlbGYvZWxmLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArKysKKyB0ZXN0cy9ydW4tYWRkcmNmaS5zaCAgICAgICAgICAgICAgICB8ICA5MyArKysrKysrKysrKysrKysrKysrKysrKystCisgdGVzdHMvcnVuLWFsbHJlZ3Muc2ggICAgICAgICAgICAgICAgfCAgOTUgKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCB8ICAxMSArKy0KKyA4IGZpbGVzIGNoYW5nZWQsIDQwMSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYmFja2VuZHMvbGliZWJsX2FybS5oCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggMzI4M2M5Ny4uOGI1N2QzZiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC0zNSwyMSArMzUsMzIgQEAKKyAjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX0FSTV8KKyAjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorIAorKyNpbmNsdWRlICJsaWJlYmxfYXJtLmgiCisrCisgLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gYXJtX3JlbG9jLmRlZi4gICovCisgI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorIAorIAorIGNvbnN0IGNoYXIgKgorIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKy0gICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVsZiAqZWxmOworICAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgICAgRWJsICplaDsKKyAgICAgIHNpemVfdCBlaGxlbjsKKyB7CisrICBpbnQgc29mdF9mbG9hdCA9IDA7CisrCisgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKyAgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKQorKyAgICAgIHNvZnRfZmxvYXQgPSAxOworKyAgfQorKworICAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKyAgIGVoLT5uYW1lID0gIkFSTSI7CisgICBhcm1faW5pdF9yZWxvYyAoZWgpOworQEAgLTYxLDcgKzcyLDEwIEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgIEhPT0sgKGVoLCBjb3JlX25vdGUpOworICAgSE9PSyAoZWgsIGF1eHZfaW5mbyk7CisgICBIT09LIChlaCwgY2hlY2tfb2JqZWN0X2F0dHJpYnV0ZSk7CistICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIGlmIChzb2Z0X2Zsb2F0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkOworICAgSE9PSyAoZWgsIGFiaV9jZmkpOworICAgSE9PSyAoZWgsIGNoZWNrX3JlbG9jX3RhcmdldF90eXBlKTsKKyAKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fcmVncy5jIGIvYmFja2VuZHMvYXJtX3JlZ3MuYworaW5kZXggMjFjNWFkMy4uNGVlMTAzOSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9yZWdzLmMKKysrKyBiL2JhY2tlbmRzL2FybV9yZWdzLmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorICNkZWZpbmUgQkFDS0VORCBhcm1fCitAQCAtNzYsNiArNzcsOSBAQCBhcm1fcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIDE2ICsgMCAuLi4gMTYgKyA3OgorKyAgICAgIC8qIEFBRFdBUkYgc2F5cyB0aGF0IHRoZXJlIGFyZSBubyByZWdpc3RlcnMgaW4gdGhhdCByYW5nZSwKKysgICAgICAgKiBidXQgZ2NjIG1hcHMgRlBBIHJlZ2lzdGVycyBoZXJlCisrICAgICAgICovCisgICAgICAgcmVnbm8gKz0gOTYgLSAxNjsKKyAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICBjYXNlIDk2ICsgMCAuLi4gOTYgKyA3OgorQEAgLTg3LDExICs5MSwxMzkgQEAgYXJtX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSA2NCArIDAgLi4uIDY0ICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gcmVnbm8gLSA2NCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSA2NCArIDEwIC4uLiA2NCArIDMxOgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSAocmVnbm8gLSA2NCkgLyAxMCArICcwJzsKKysgICAgICBuYW1lWzJdID0gKHJlZ25vIC0gNjQpICUgMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTA0ICsgMCAuLi4gMTA0ICsgNzoKKysgICAgICAvKiBYWFggVE9ETzoKKysgICAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgaW50ZWwgd2lyZWxlc3MgTU1YIGdlbmVyYWwgcHVycG9zZS9jb250cm9sCisrICAgICAgICogcmVnaXN0ZXJzIG9yIHhzY2FsZSBhY2N1bXVsYXRvciwgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgdXNhZ2UuCisrICAgICAgICogV2Ugb25seSBoYXZlIHRoZSBpbnRlbCB3aXJlbGVzcyBNTVggaGVyZSBub3cuCisrICAgICAgICogVGhlIG5hbWUgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIHhzY2FsZSBhY2N1bXVsYXRvciB0b28uICovCisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG1lbWNweShuYW1lLCAid2NnciIsIDQpOworKyAgICAgIG5hbWVbNF0gPSByZWdubyAtIDEwNCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAwIC4uLiAxMTIgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTEyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDEwIC4uLiAxMTIgKyAxNToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSAnMSc7CisrICAgICAgbmFtZVszXSA9IHJlZ25vIC0gMTEyIC0gMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMTI4OgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKyAgICAgICByZXR1cm4gc3RwY3B5IChuYW1lLCAic3BzciIpICsgMSAtIG5hbWU7CisgCisrICAgIGNhc2UgMTI5OgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2ZpcSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMwOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2lycSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMxOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2FidCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMyOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3VuZCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMzOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3N2YyIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTQ0IC4uLiAxNTA6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91c3IiLCByZWdubyAtIDE0NCArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTEgLi4uIDE1NzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2ZpcSIsIHJlZ25vIC0gMTUxICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1OCAuLi4gMTU5OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfaXJxIiwgcmVnbm8gLSAxNTggKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MCAuLi4gMTYxOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfYWJ0IiwgcmVnbm8gLSAxNjAgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MiAuLi4gMTYzOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdW5kIiwgcmVnbm8gLSAxNjIgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2NCAuLi4gMTY1OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfc3ZjIiwgcmVnbm8gLSAxNjQgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE5MiAuLi4gMTk5OgorKyAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdjJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxOTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMjU2ICsgMCAuLi4gMjU2ICsgOToKKysgICAgICAvKiBYWFggVE9ETzogTmVvbiBhbHNvIHVzZXMgdGhvc2UgcmVnaXN0ZXJzIGFuZCBjYW4gY29udGFpbgorKyAgICAgICAqIGJvdGggZmxvYXQgYW5kIGludGVnZXJzICovCisgICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKyAgICAgICAqYml0cyA9IDY0OworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9yZXR2YWwuYyBiL2JhY2tlbmRzL2FybV9yZXR2YWwuYworaW5kZXggN2FjZWQ3NC4uMDUyMTMyZSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9yZXR2YWwuYworKysrIGIvYmFja2VuZHMvYXJtX3JldHZhbC5jCitAQCAtNDgsNiArNDgsMTMgQEAgc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisgI2RlZmluZSBubG9jX2ludHJlZwkxCisgI2RlZmluZSBubG9jX2ludHJlZ3MobikJKDIgKiAobikpCisgCisrLyogZjEgICovIC8qIFhYWCBUT0RPOiBmMCBjYW4gYWxzbyBoYXZlIG51bWJlciA5NiBpZiBwcm9ncmFtIHdhcyBjb21waWxlZCB3aXRoIC1tYWJpPWFhcGNzICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworIC8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorICAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKyAgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluIHIwLiAgKi8KK0BAIC01OCw4ICs2NSw5IEBAIHN0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorICNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorIAorIAorLWludAorLWFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKytzdGF0aWMgaW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwKKysJCSAgICAgICAgICAgIGludCBzb2Z0X2Zsb2F0KQorIHsKKyAgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisgICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KK0BAIC05OCwxNCArMTA2LDMxIEBAIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyAJICAgIGVsc2UKKyAJICAgICAgcmV0dXJuIC0xOworIAkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwl7CisrCSAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCSAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgcmV0dXJuIC0xOworKworKwkgIGlmICgoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KSAmJiAhc29mdF9mbG9hdCkKKysJICAgIHsKKysJICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrCSAgICAgIGlmIChzaXplIDw9IDgpCisrCQlyZXR1cm4gbmxvY19mcHJlZzsKKysJICAgICAgZ290byBhZ2dyZWdhdGU7CisrCSAgICB9CisrCX0KKyAJaWYgKHNpemUgPD0gMTYpCisgCSAgeworIAkgIGludHJlZzoKKyAJICAgICpsb2NwID0gbG9jX2ludHJlZzsKKyAJICAgIHJldHVybiBzaXplIDw9IDQgPyBubG9jX2ludHJlZyA6IG5sb2NfaW50cmVncyAoKHNpemUgKyAzKSAvIDQpOworIAkgIH0KKysJICAvKiBmYWxsIHRocm91Z2guICovCisgCisgICAgICAgYWdncmVnYXRlOgorKwkvKiBYWFggVE9ETyBzb21ldGltZXMgYWdncmVnYXRlcyBhcmUgcmV0dXJuZWQgaW4gcjAgKC1tYWJpPWFhcGNzKSAqLworIAkqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisgCXJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKyAgICAgICB9CitAQCAtMTI1LDMgKzE1MCwxOCBAQCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisgICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworICAgcmV0dXJuIC0yOworIH0KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1tc29mdC1mbG9hdCAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbWhhcmQtZmxvYXQgKGN1cnJlbnQgZGVmYXVsdCkgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2xpYmVibF9hcm0uaCBiL2JhY2tlbmRzL2xpYmVibF9hcm0uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMwMDc3MGMKKy0tLSAvZGV2L251bGwKKysrKyBiL2JhY2tlbmRzL2xpYmVibF9hcm0uaAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0FSTV9ICisrI2RlZmluZSBfTElCRUJMX0FSTV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmLmggYi9saWJlbGYvZWxmLmgKK2luZGV4IGEzY2NlM2UuLjA4OTE2NzQgMTAwNjQ0CistLS0gYS9saWJlbGYvZWxmLmgKKysrKyBiL2xpYmVsZi9lbGYuaAorQEAgLTIzNDYsNiArMjM0Niw5IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNQkweDA1MDAwMDAwCisgCisrLyogRUlfT1NBQkkgdmFsdWVzICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkgICAgNjQgICAgICAvKiBDb250YWlucyBzeW1ib2wgdmVyc2lvbmluZy4gKi8KKysKKyAvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworICNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCitAQCAtMjM2MywxMiArMjM2NiwxOSBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFBoZHIgcF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFBUX0FSTV9FWElEWAkJKFBUX0xPUFJPQyArIDEpCS8qIEFSTSB1bndpbmQgc2VnbWVudC4gICovCisrI2RlZmluZSBQVF9BUk1fVU5XSU5ECQlQVF9BUk1fRVhJRFgKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgU2hkciBzaF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fRVhJRFgJCShTSFRfTE9QUk9DICsgMSkgLyogQVJNIHVud2luZCBzZWN0aW9uLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fUFJFRU1QVE1BUAkoU0hUX0xPUFJPQyArIDIpIC8qIFByZWVtcHRpb24gZGV0YWlscy4gICovCisgI2RlZmluZSBTSFRfQVJNX0FUVFJJQlVURVMJKFNIVF9MT1BST0MgKyAzKSAvKiBBUk0gYXR0cmlidXRlcyBzZWN0aW9uLiAgKi8KKyAKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgRHluIGRfdGFnIGZpZWxkLiAgKi8KKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDEJKERUX0xPUFJPQyArIDApCisrI2RlZmluZSBEVF9BUk1fU1lNVEFCU1oJCShEVF9MT1BST0MgKyAxKQorKyNkZWZpbmUgRFRfQVJNX1BSRUVNVE1BQgkoRFRfTE9QUk9DICsgMikKKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDIJKERUX0xPUFJPQyArIDMpCisrI2RlZmluZSBEVF9BUk1fTlVNCQk0CisgCisgLyogQUFyY2g2NCByZWxvY3MuICAqLworIAorQEAgLTI2NDcsNiArMjY1Nyw3IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAJCQkJCSAgIFRMUyBibG9jayAoTERSLCBTVFIpLiAgKi8KKyAjZGVmaW5lIFJfQVJNX1RMU19JRTEyR1AJMTExCS8qIDEyIGJpdCBHT1QgZW50cnkgcmVsYXRpdmUKKyAJCQkJCSAgIHRvIEdPVCBvcmlnaW4gKExEUikuICAqLworKy8qIDExMiAtIDEyNyBwcml2YXRlIHJhbmdlICovCisgI2RlZmluZSBSX0FSTV9NRV9UT08JCTEyOAkvKiBPYnNvbGV0ZS4gICovCisgI2RlZmluZSBSX0FSTV9USE1fVExTX0RFU0NTRVEJMTI5CisgI2RlZmluZSBSX0FSTV9USE1fVExTX0RFU0NTRVExNgkxMjkKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tYWRkcmNmaS5zaCBiL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCitpbmRleCA1ZDMzMjQ2Li43ODQ2NGE4IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLWFkZHJjZmkuc2gKKysrKyBiL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCitAQCAtMjUzMCw2ICsyNTMwLDM4IEBAIGR3YXJmX2NmaV9hZGRyZnJhbWUgKC5laF9mcmFtZSk6IG5vIG1hdGNoaW5nIGFkZHJlc3MgcmFuZ2UKKyAJRlBBIHJlZzIxIChmNSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnMjIgKGY2KTogdW5kZWZpbmVkCisgCUZQQSByZWcyMyAoZjcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY0IChzMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjUgKHMxKTogdW5kZWZpbmVkCisrCVZGUCByZWc2NiAoczIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY3IChzMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjggKHM0KTogdW5kZWZpbmVkCisrCVZGUCByZWc2OSAoczUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzcwIChzNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzEgKHM3KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MiAoczgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzczIChzOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzQgKHMxMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzUgKHMxMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzYgKHMxMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzcgKHMxMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzggKHMxNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzkgKHMxNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODAgKHMxNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnODEgKHMxNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODIgKHMxOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODMgKHMxOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODQgKHMyMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODUgKHMyMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODYgKHMyMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnODcgKHMyMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODggKHMyNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODkgKHMyNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTAgKHMyNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTEgKHMyNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTIgKHMyOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTMgKHMyOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTQgKHMzMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTUgKHMzMSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnOTYgKGYwKTogdW5kZWZpbmVkCisgCUZQQSByZWc5NyAoZjEpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzk4IChmMik6IHVuZGVmaW5lZAorQEAgLTI1MzgsNyArMjU3MCw2NiBAQCBkd2FyZl9jZmlfYWRkcmZyYW1lICguZWhfZnJhbWUpOiBubyBtYXRjaGluZyBhZGRyZXNzIHJhbmdlCisgCUZQQSByZWcxMDEgKGY1KTogdW5kZWZpbmVkCisgCUZQQSByZWcxMDIgKGY2KTogdW5kZWZpbmVkCisgCUZQQSByZWcxMDMgKGY3KTogdW5kZWZpbmVkCistCWludGVnZXIgcmVnMTI4IChzcHNyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDQgKHdjZ3IwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDUgKHdjZ3IxKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDYgKHdjZ3IyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDcgKHdjZ3IzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDggKHdjZ3I0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDkgKHdjZ3I1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTAgKHdjZ3I2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTEgKHdjZ3I3KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTIgKHdyMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEzICh3cjEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNCAod3IyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTUgKHdyMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE2ICh3cjQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNyAod3I1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTggKHdyNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE5ICh3cjcpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMCAod3I4KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjEgKHdyOSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIyICh3cjEwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjMgKHdyMTEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNCAod3IxMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI1ICh3cjEzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjYgKHdyMTQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNyAod3IxNSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMjggKHNwc3IpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTI5IChzcHNyX2ZpcSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzAgKHNwc3JfaXJxKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMSAoc3Bzcl9hYnQpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMyIChzcHNyX3VuZCk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzMgKHNwc3Jfc3ZjKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ0IChyOF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDUgKHI5X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NiAocjEwX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NyAocjExX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0OCAocjEyX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0OSAocjEzX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MCAocjE0X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MSAocjhfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUyIChyOV9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTMgKHIxMF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTQgKHIxMV9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTUgKHIxMl9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTYgKHIxM19maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTcgKHIxNF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTggKHIxM19pcnEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTkgKHIxNF9pcnEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjAgKHIxM19hYnQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjEgKHIxNF9hYnQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjIgKHIxM191bmQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjMgKHIxNF91bmQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjQgKHIxM19zdmMpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjUgKHIxNF9zdmMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5MiAod2MwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTMgKHdjMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk0ICh3YzIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NSAod2MzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTYgKHdjNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk3ICh3YzUpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5OCAod2M2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTkgKHdjNyk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU2IChkMCk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU3IChkMSk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU4IChkMik6IHVuZGVmaW5lZAorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1hbGxyZWdzLnNoIGIvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKK2luZGV4IDZmMzg2MmUuLjEzNTU3ZDUgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tYWxscmVncy5zaAorKysrIGIvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKK0BAIC0yNjcxLDcgKzI2NzEsMjggQEAgaW50ZWdlciByZWdpc3RlcnM6CisgCSAxMzogc3AgKHNwKSwgYWRkcmVzcyAzMiBiaXRzCisgCSAxNDogbHIgKGxyKSwgYWRkcmVzcyAzMiBiaXRzCisgCSAxNTogcGMgKHBjKSwgYWRkcmVzcyAzMiBiaXRzCistCTEyODogc3BzciAoc3BzciksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTQ0OiByOF91c3IgKHI4X3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0NTogcjlfdXNyIChyOV91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDY6IHIxMF91c3IgKHIxMF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDc6IHIxMV91c3IgKHIxMV91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDg6IHIxMl91c3IgKHIxMl91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDk6IHIxM191c3IgKHIxM191c3IpLCBzaWduZWQgMzIgYml0cworKwkxNTA6IHIxNF91c3IgKHIxNF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNTE6IHI4X2ZpcSAocjhfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUyOiByOV9maXEgKHI5X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1MzogcjEwX2ZpcSAocjEwX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NDogcjExX2ZpcSAocjExX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NTogcjEyX2ZpcSAocjEyX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NjogcjEzX2ZpcSAocjEzX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NzogcjE0X2ZpcSAocjE0X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1ODogcjEzX2lycSAocjEzX2lycSksIHNpZ25lZCAzMiBiaXRzCisrCTE1OTogcjE0X2lycSAocjE0X2lycSksIHNpZ25lZCAzMiBiaXRzCisrCTE2MDogcjEzX2FidCAocjEzX2FidCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MTogcjE0X2FidCAocjE0X2FidCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MjogcjEzX3VuZCAocjEzX3VuZCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MzogcjE0X3VuZCAocjE0X3VuZCksIHNpZ25lZCAzMiBiaXRzCisrCTE2NDogcjEzX3N2YyAocjEzX3N2YyksIHNpZ25lZCAzMiBiaXRzCisrCTE2NTogcjE0X3N2YyAocjE0X3N2YyksIHNpZ25lZCAzMiBiaXRzCisgRlBBIHJlZ2lzdGVyczoKKyAJIDE2OiBmMCAoZjApLCBmbG9hdCA5NiBiaXRzCisgCSAxNzogZjEgKGYxKSwgZmxvYXQgOTYgYml0cworQEAgLTI2ODksNyArMjcxMCw3MiBAQCBGUEEgcmVnaXN0ZXJzOgorIAkxMDE6IGY1IChmNSksIGZsb2F0IDk2IGJpdHMKKyAJMTAyOiBmNiAoZjYpLCBmbG9hdCA5NiBiaXRzCisgCTEwMzogZjcgKGY3KSwgZmxvYXQgOTYgYml0cworK01NWCByZWdpc3RlcnM6CisrCTEwNDogd2NncjAgKHdjZ3IwKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDU6IHdjZ3IxICh3Y2dyMSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA2OiB3Y2dyMiAod2NncjIpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwNzogd2NncjMgKHdjZ3IzKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDg6IHdjZ3I0ICh3Y2dyNCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA5OiB3Y2dyNSAod2NncjUpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTExMDogd2NncjYgKHdjZ3I2KSwgdW5zaWduZWQgMzIgYml0cworKwkxMTE6IHdjZ3I3ICh3Y2dyNyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTEyOiB3cjAgKHdyMCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTEzOiB3cjEgKHdyMSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE0OiB3cjIgKHdyMiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE1OiB3cjMgKHdyMyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE2OiB3cjQgKHdyNCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE3OiB3cjUgKHdyNSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE4OiB3cjYgKHdyNiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE5OiB3cjcgKHdyNyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIwOiB3cjggKHdyOCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIxOiB3cjkgKHdyOSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIyOiB3cjEwICh3cjEwKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjM6IHdyMTEgKHdyMTEpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNDogd3IxMiAod3IxMiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI1OiB3cjEzICh3cjEzKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjY6IHdyMTQgKHdyMTQpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNzogd3IxNSAod3IxNSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTkyOiB3YzAgKHdjMCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTkzOiB3YzEgKHdjMSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk0OiB3YzIgKHdjMiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk1OiB3YzMgKHdjMyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk2OiB3YzQgKHdjNCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk3OiB3YzUgKHdjNSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk4OiB3YzYgKHdjNiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk5OiB3YzcgKHdjNyksIHVuc2lnbmVkIDMyIGJpdHMKKyBWRlAgcmVnaXN0ZXJzOgorKwkgNjQ6IHMwIChzMCksIGZsb2F0IDMyIGJpdHMKKysJIDY1OiBzMSAoczEpLCBmbG9hdCAzMiBiaXRzCisrCSA2NjogczIgKHMyKSwgZmxvYXQgMzIgYml0cworKwkgNjc6IHMzIChzMyksIGZsb2F0IDMyIGJpdHMKKysJIDY4OiBzNCAoczQpLCBmbG9hdCAzMiBiaXRzCisrCSA2OTogczUgKHM1KSwgZmxvYXQgMzIgYml0cworKwkgNzA6IHM2IChzNiksIGZsb2F0IDMyIGJpdHMKKysJIDcxOiBzNyAoczcpLCBmbG9hdCAzMiBiaXRzCisrCSA3MjogczggKHM4KSwgZmxvYXQgMzIgYml0cworKwkgNzM6IHM5IChzOSksIGZsb2F0IDMyIGJpdHMKKysJIDc0OiBzMTAgKHMxMCksIGZsb2F0IDMyIGJpdHMKKysJIDc1OiBzMTEgKHMxMSksIGZsb2F0IDMyIGJpdHMKKysJIDc2OiBzMTIgKHMxMiksIGZsb2F0IDMyIGJpdHMKKysJIDc3OiBzMTMgKHMxMyksIGZsb2F0IDMyIGJpdHMKKysJIDc4OiBzMTQgKHMxNCksIGZsb2F0IDMyIGJpdHMKKysJIDc5OiBzMTUgKHMxNSksIGZsb2F0IDMyIGJpdHMKKysJIDgwOiBzMTYgKHMxNiksIGZsb2F0IDMyIGJpdHMKKysJIDgxOiBzMTcgKHMxNyksIGZsb2F0IDMyIGJpdHMKKysJIDgyOiBzMTggKHMxOCksIGZsb2F0IDMyIGJpdHMKKysJIDgzOiBzMTkgKHMxOSksIGZsb2F0IDMyIGJpdHMKKysJIDg0OiBzMjAgKHMyMCksIGZsb2F0IDMyIGJpdHMKKysJIDg1OiBzMjEgKHMyMSksIGZsb2F0IDMyIGJpdHMKKysJIDg2OiBzMjIgKHMyMiksIGZsb2F0IDMyIGJpdHMKKysJIDg3OiBzMjMgKHMyMyksIGZsb2F0IDMyIGJpdHMKKysJIDg4OiBzMjQgKHMyNCksIGZsb2F0IDMyIGJpdHMKKysJIDg5OiBzMjUgKHMyNSksIGZsb2F0IDMyIGJpdHMKKysJIDkwOiBzMjYgKHMyNiksIGZsb2F0IDMyIGJpdHMKKysJIDkxOiBzMjcgKHMyNyksIGZsb2F0IDMyIGJpdHMKKysJIDkyOiBzMjggKHMyOCksIGZsb2F0IDMyIGJpdHMKKysJIDkzOiBzMjkgKHMyOSksIGZsb2F0IDMyIGJpdHMKKysJIDk0OiBzMzAgKHMzMCksIGZsb2F0IDMyIGJpdHMKKysJIDk1OiBzMzEgKHMzMSksIGZsb2F0IDMyIGJpdHMKKyAJMjU2OiBkMCAoZDApLCBmbG9hdCA2NCBiaXRzCisgCTI1NzogZDEgKGQxKSwgZmxvYXQgNjQgYml0cworIAkyNTg6IGQyIChkMiksIGZsb2F0IDY0IGJpdHMKK0BAIC0yNzIyLDYgKzI4MDgsMTMgQEAgVkZQIHJlZ2lzdGVyczoKKyAJMjg1OiBkMjkgKGQyOSksIGZsb2F0IDY0IGJpdHMKKyAJMjg2OiBkMzAgKGQzMCksIGZsb2F0IDY0IGJpdHMKKyAJMjg3OiBkMzEgKGQzMSksIGZsb2F0IDY0IGJpdHMKKytzdGF0ZSByZWdpc3RlcnM6CisrCTEyODogc3BzciAoc3BzciksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTI5OiBzcHNyX2ZpcSAoc3Bzcl9maXEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMDogc3Bzcl9pcnEgKHNwc3JfaXJxKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzE6IHNwc3JfYWJ0IChzcHNyX2FidCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMyOiBzcHNyX3VuZCAoc3Bzcl91bmQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMzogc3Bzcl9zdmMgKHNwc3Jfc3ZjKSwgdW5zaWduZWQgMzIgYml0cworIEVPRgorIAorICMgU2VlIHJ1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIGZvciBpbnN0cnVjdGlvbnMgdG8gcmVnZW5lcmF0ZQorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIGIvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKK2luZGV4IDAxZTQ1OTQuLjlhOGEzODAgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaAorKysrIGIvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKK0BAIC0zMCwxMiArMzAsMTEgQEAgTm90ZSBzZWdtZW50IG9mIDg5MiBieXRlcyBhdCBvZmZzZXQgMHgyNzQ6CisgICAgIHBpZDogMTEwODcsIHBwaWQ6IDExMDYzLCBwZ3JwOiAxMTA4Nywgc2lkOiAxMTA2MworICAgICB1dGltZTogMC4wMDAwMDAsIHN0aW1lOiAwLjAxMDAwMCwgY3V0aW1lOiAwLjAwMDAwMCwgY3N0aW1lOiAwLjAwMDAwMAorICAgICBvcmlnX3IwOiAtMSwgZnB2YWxpZDogMQorLSAgICByMDogICAgICAgICAgICAgMSAgcjE6ICAgLTEwOTE2NzI1MDggIHIyOiAgIC0xMDkxNjcyNTAwCistICAgIHIzOiAgICAgICAgICAgICAwICByNDogICAgICAgICAgICAgMCAgcjU6ICAgICAgICAgICAgIDAKKy0gICAgcjY6ICAgICAgICAgMzM3MjggIHI3OiAgICAgICAgICAgICAwICByODogICAgICAgICAgICAgMAorLSAgICByOTogICAgICAgICAgICAgMCAgcjEwOiAgLTEyMjU3MDM0OTYgIHIxMTogIC0xMDkxNjcyODQ0CistICAgIHIxMjogICAgICAgICAgICAwICBzcDogICAgMHhiZWVlNjRmNCAgbHI6ICAgIDB4YjZkYzNmNDgKKy0gICAgcGM6ICAgIDB4MDAwMDg1MDAgIHNwc3I6ICAweDYwMDAwMDEwCisrICAgIHIwOiAgICAgICAgICAgIDEgIHIxOiAgLTEwOTE2NzI1MDggIHIyOiAgLTEwOTE2NzI1MDAgIHIzOiAgICAgICAgICAgIDAKKysgICAgcjQ6ICAgICAgICAgICAgMCAgcjU6ICAgICAgICAgICAgMCAgcjY6ICAgICAgICAzMzcyOCAgcjc6ICAgICAgICAgICAgMAorKyAgICByODogICAgICAgICAgICAwICByOTogICAgICAgICAgICAwICByMTA6IC0xMjI1NzAzNDk2ICByMTE6IC0xMDkxNjcyODQ0CisrICAgIHIxMjogICAgICAgICAgIDAgIHNwOiAgIDB4YmVlZTY0ZjQgIGxyOiAgIDB4YjZkYzNmNDggIHBjOiAgIDB4MDAwMDg1MDAKKysgICAgc3BzcjogIDB4NjAwMDAwMTAKKyAgIENPUkUgICAgICAgICAgICAgICAgIDEyNCAgUFJQU0lORk8KKyAgICAgc3RhdGU6IDAsIHNuYW1lOiBSLCB6b21iOiAwLCBuaWNlOiAwLCBmbGFnOiAweDAwNDAwNTAwCisgICAgIHVpZDogMCwgZ2lkOiAwLCBwaWQ6IDExMDg3LCBwcGlkOiAxMTA2MywgcGdycDogMTEwODcsIHNpZDogMTEwNjMKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2Z1bmNfdmFsdWUucGF0Y2gKQEAgLTAsMCArMSwxNjUgQEAKK0Zyb206IE1hcmsgV2llbGFhcmQgPG1qd0ByZWRoYXQuY29tPgorRGF0ZTogU3VuLCAxNSBKdW4gMjAxNCAxMTozMDozNSArMDIwMAorU3ViamVjdDogbGliZWJsOiBBZGQgc3ltX2Z1bmNfdmFsdWUgaG9vay4KKworVGhlIEFSTSBFQUJJIHNheXMgdGhhdCB0aGUgemVybyBiaXQgb2YgZnVuY3Rpb24gc3ltYm9sIHN0X3ZhbHVlIGluZGljYXRlcword2hldGhlciB0aGUgc3ltYm9sIHBvaW50cyB0byBhIFRIVU1CIG9yIEFSTSBmdW5jdGlvbi4gQWRkIGEgbmV3IGVibCBob29rCit0byBhZGp1c3QgdGhlIHN0X3ZhbHVlIGluIHN1Y2ggYSBjYXNlIHNvIHRoYXQgd2UgZ2V0IHRoZSBhY3R1YWwgdmFsdWUgdGhhdAordGhlIHN5bWJvbCBwb2ludHMgdG8uIEl0IGlzbid0IGVhc2lseSBwb3NzaWJsZSB0byByZXVzZSB0aGUgZXhpc3RpbmcKK3Jlc29sdmVfc3ltX3ZhbHVlIGZvciB0aGlzIHB1cnBvc2UsIHNvIHdlIGVuZCB1cCB3aXRoIGFub3RoZXIgaG9vayB0aGF0CitjYW4gYmUgdXNlZCBmcm9tIGR3ZmxfbW9kdWxlX2dldHN5bSBhbmQgZWxmbGludC4KKworUmViYXNlIGFybV9mdW5jX3ZhbHVlLnBhdGNoIGZyb20gMC4xNTkgdG8gMC4xNjAKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgICAgICAgICAgfCAgICAxICsKKyBiYWNrZW5kcy9hcm1fc3ltYm9sLmMgICAgICAgIHwgICAgOCArKysrKysrKworIGxpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMgfCAgICAyICstCisgbGliZWJsL01ha2VmaWxlLmFtICAgICAgICAgICB8ICAgIDMgKystCisgbGliZWJsL2VibC1ob29rcy5oICAgICAgICAgICB8ICAgIDMgKysrCisgbGliZWJsL2VibHN5bWZ1bmN2YWwuYyAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliZWJsL2xpYmVibC5oICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggNzE3MTE4Ni4uOWYwMzYzMCAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC03OCw2ICs3OCw3IEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAgIEhPT0sgKGVoLCBhYmlfY2ZpKTsKKyAgIEhPT0sgKGVoLCBjaGVja19yZWxvY190YXJnZXRfdHlwZSk7CisrICBIT09LIChlaCwgc3ltX2Z1bmNfdmFsdWUpOworICAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworIAorICAgLyogV2Ugb25seSB1bndpbmQgdGhlIGNvcmUgaW50ZWdlciByZWdpc3RlcnMuICAqLworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9zeW1ib2wuYyBiL2JhY2tlbmRzL2FybV9zeW1ib2wuYworaW5kZXggZGE0YTUwYS4uY2NlYTAzYiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9zeW1ib2wuYworKysrIGIvYmFja2VuZHMvYXJtX3N5bWJvbC5jCitAQCAtMTMwLDYgKzEzMCwxNCBAQCBhcm1fY2hlY2tfcmVsb2NfdGFyZ2V0X3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgRWxmNjRfV29yZCBzaF90eQorICAgcmV0dXJuIHNoX3R5cGUgPT0gU0hUX0FSTV9FWElEWDsKKyB9CisgCisrLyogQVJNIEVBQkkgc2F5cyB0aGF0IHRoZSBsb3cgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbgorKyAgIHN5bWJvbCB2YWx1ZSBpcyBhIFRIVU1CIGZ1bmN0aW9uIG9yIG5vdC4gIE1hc2sgaXQgb2ZmLiAgKi8KKytHRWxmX0FkZHIKKythcm1fc3ltX2Z1bmNfdmFsdWUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgR0VsZl9BZGRyIHZhbCkKKyt7CisrICByZXR1cm4gdmFsICYgfihHRWxmX0FkZHIpMTsKKyt9CisrCisgY29uc3QgY2hhciAqCisgYXJtX3N5bWJvbF90eXBlX25hbWUgKGludCB0eXBlLAorIAkJICAgICAgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jIGIvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYworaW5kZXggNDJkMmI2Ny4uZmIxOTJkNyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKKysrKyBiL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKK0BAIC0xMTksNyArMTE5LDcgQEAgX19saWJkd2ZsX2dldHN5bSAoRHdmbF9Nb2R1bGUgKm1vZCwgaW50IG5keCwgR0VsZl9TeW0gKnN5bSwgR0VsZl9BZGRyICphZGRyLAorICAgICAgZGVzY3JpcHRvcnMpLiAgKi8KKyAKKyAgIGNoYXIgKmlkZW50OworLSAgR0VsZl9BZGRyIHN0X3ZhbHVlID0gc3ltLT5zdF92YWx1ZSAmIGVibF9mdW5jX2FkZHJfbWFzayAobW9kLT5lYmwpOworKyAgR0VsZl9BZGRyIHN0X3ZhbHVlID0gZWJsX3N5bV9mdW5jX3ZhbHVlIChtb2QtPmVibCwgc3ltLT5zdF92YWx1ZSk7CisgICAqcmVzb2x2ZWQgPSBmYWxzZTsKKyAgIGlmICghIGFkanVzdF9zdF92YWx1ZSAmJiBtb2QtPmVfdHlwZSAhPSBFVF9SRUwgJiYgYWxsb2MKKyAgICAgICAmJiAoR0VMRl9TVF9UWVBFIChzeW0tPnN0X2luZm8pID09IFNUVF9GVU5DCitkaWZmIC0tZ2l0IGEvbGliZWJsL01ha2VmaWxlLmFtIGIvbGliZWJsL01ha2VmaWxlLmFtCitpbmRleCBlYzQ0NzdiLi44ODljMjFiIDEwMDY0NAorLS0tIGEvbGliZWJsL01ha2VmaWxlLmFtCisrKysgYi9saWJlYmwvTWFrZWZpbGUuYW0KK0BAIC01NSw3ICs1NSw4IEBAIGdlbl9TT1VSQ0VTID0gZWJsb3BlbmJhY2tlbmQuYyBlYmxjbG9zZWJhY2tlbmQuYyBlYmxzdHJ0YWIuYyBcCisgCSAgICAgIGVibHN5c3ZoYXNoZW50cnlzaXplLmMgZWJsYXV4dmluZm8uYyBlYmxjaGVja29iamF0dHIuYyBcCisgCSAgICAgIGVibF9jaGVja19zcGVjaWFsX3NlY3Rpb24uYyBlYmxfc3lzY2FsbF9hYmkuYyBlYmxhYmljZmkuYyBcCisgCSAgICAgIGVibHN0b3RoZXIuYyBlYmxpbml0cmVnLmMgZWJsZHdhcmZ0b3JlZ25vLmMgZWJsbm9ybWFsaXplcGMuYyBcCistCSAgICAgIGVibHVud2luZC5jIGVibHJlc29sdmVzeW0uYyBlYmxjaGVja3JlbG9jdGFyZ2V0dHlwZS5jCisrCSAgICAgIGVibHVud2luZC5jIGVibHJlc29sdmVzeW0uYyBlYmxjaGVja3JlbG9jdGFyZ2V0dHlwZS5jIFwKKysJICAgICAgZWJsc3ltZnVuY3ZhbC5jCisgCisgbGliZWJsX2FfU09VUkNFUyA9ICQoZ2VuX1NPVVJDRVMpCisgCitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibC1ob29rcy5oIGIvbGliZWJsL2VibC1ob29rcy5oCitpbmRleCAyZTMxNDQ2Li45ZGY5NDVkIDEwMDY0NAorLS0tIGEvbGliZWJsL2VibC1ob29rcy5oCisrKysgYi9saWJlYmwvZWJsLWhvb2tzLmgKK0BAIC0xOTEsNSArMTkxLDggQEAgYm9vbCBFQkxIT09LKHVud2luZCkgKEVibCAqZWJsLCBEd2FyZl9BZGRyIHBjLCBlYmxfdGlkX3JlZ2lzdGVyc190ICpzZXRmdW5jLAorICAgIChlLmcuIGZ1bmN0aW9uIGRlc2NyaXB0b3IgcmVzb2x2aW5nKSAgKi8KKyBib29sIEVCTEhPT0socmVzb2x2ZV9zeW1fdmFsdWUpIChFYmwgKmVibCwgR0VsZl9BZGRyICphZGRyKTsKKyAKKysvKiBSZXR1cm5zIHRoZSByZWFsIHZhbHVlIG9mIGEgc3ltYm9sIGZ1bmN0aW9uIGFkZHJlc3Mgb3Igb2Zmc2V0LiAgKi8KKytHRWxmX0FkZHIgRUJMSE9PSyhzeW1fZnVuY192YWx1ZSkgKEVibCAqZWJsLCBHRWxmX0FkZHIgdmFsKTsKKysKKyAvKiBEZXN0cnVjdG9yIGZvciBFTEYgYmFja2VuZCBoYW5kbGUuICAqLworIHZvaWQgRUJMSE9PSyhkZXN0cikgKHN0cnVjdCBlYmwgKik7CitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibHN5bWZ1bmN2YWwuYyBiL2xpYmVibC9lYmxzeW1mdW5jdmFsLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMGIzMjJmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJlYmwvZWJsc3ltZnVuY3ZhbC5jCitAQCAtMCwwICsxLDQzIEBACisrLyogVHVybiBhIHN5bWJvbCBmdW5jdGlvbiB2YWx1ZSBpbnRvIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzIG9yIG9mZnNldC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorKworKyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcgorKworKyAgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKyAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKysgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisrCisrICAgb3IKKysKKysgICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKyAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKysgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisrCisrICAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKysKKysgICBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisrICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmCisrICAgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpYmVibFAuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrCisrR0VsZl9BZGRyCisrZWJsX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCkKKyt7CisrICBpZiAoZWJsID09IE5VTEwgfHwgZWJsLT5zeW1fZnVuY192YWx1ZSA9PSBOVUxMKQorKyAgICByZXR1cm4gdmFsOworKworKyAgcmV0dXJuIGVibC0+c3ltX2Z1bmNfdmFsdWUgKGVibCwgdmFsKTsKKyt9CitkaWZmIC0tZ2l0IGEvbGliZWJsL2xpYmVibC5oIGIvbGliZWJsL2xpYmVibC5oCitpbmRleCA3ZGJmNDYwLi45NmMwNzZiIDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibC5oCisrKysgYi9saWJlYmwvbGliZWJsLmgKK0BAIC00NzIsNiArNDcyLDE3IEBAIGV4dGVybiBib29sIGVibF91bndpbmQgKEVibCAqZWJsLCBEd2FyZl9BZGRyIHBjLCBlYmxfdGlkX3JlZ2lzdGVyc190ICpzZXRmdW5jLAorIGV4dGVybiBib29sIGVibF9yZXNvbHZlX3N5bV92YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciAqYWRkcikKKyAgICBfX25vbm51bGxfYXR0cmlidXRlX18gKDIpOworIAorKy8qIFJldHVybnMgdGhlIHJlYWwgdmFsdWUgb2YgYSBzeW1ib2wgZnVuY3Rpb24gYWRkcmVzcyBvciBvZmZzZXQKKysgICAoZS5nLiB3aGVuIHRoZSBzdF92YWx1ZSBjb250YWlucyBzb21lIGZsYWcgYml0cyB0aGF0IG5lZWQgdG8gYmUKKysgICBtYXNrZWQgb2ZmKS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gZWJsX3Jlc29sdmVfc3ltX3ZhbHVlIHdoaWNoCisrICAgb25seSB3b3JrcyBmb3IgYWN0dWFsIHN5bWJvbCBhZGRyZXNzZXMgKGluIG5vbi1FVF9SRUwgZmlsZXMpIHRoYXQKKysgICBtaWdodCByZXNvbHZlIHRvIGFuIGFkZHJlc3MgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi4KKysgICBlYmxfc3ltX2Z1bmNfdmFsdWUgaXMgY2FsbGVkIHRvIHR1cm4gdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGEKKysgICByZWFsIGFkZHJlc3Mgb3Igb2Zmc2V0ICh0aGUgb3JpZ2luYWwgdmFsdWUgbWlnaHQgbm90IGJlIGEgcmVhbAorKyAgIGFkZHJlc3MpLiAgVGhpcyB3b3JrcyBmb3IgYm90aCBFVF9SRUwgd2hlbiB0aGUgdmFsdWUgaXMgYSBzZWN0aW9uCisrICAgb2Zmc2V0IG9yIEVUX0VYRUMgb3IgRVRfRFlOIHN5bWJvbCB2YWx1ZXMsIHdoaWNoIGFyZSBhZGRyZXNzZXMuICAqLworK2V4dGVybiBHRWxmX0FkZHIgZWJsX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCk7CisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgfQorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJiMzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbTogTWFyayBXaWVsYWFyZCA8bWp3QHJlZGhhdC5jb20+CitEYXRlOiBTdW4sIDE1IEp1biAyMDE0IDEyOjMwOjAyICswMjAwCitTdWJqZWN0OiBsaWJlYmw6IEFkZCBlYmxfdW53aW5kX3JldF9tYXNrLgorCitBbm90aGVyIEFSTSBvZGRpdHkuIEEgcmV0dXJuIHZhbHVlIGFkZHJlc3MgaW4gYW4gdW53aW5kIHdpbGwgY29udGFpbiBhbgorZXh0cmEgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdG8gcmV0dXJuIHRvIGEgcmVndWxhciBBUk0gb3IgVEhVTUIgZnVuY3Rpb24uCitBZGQgYSBuZXcgZWJsIGZ1bmN0aW9uIHRvIHJldHVybiBhIG1hc2sgdG8gdXNlIHRvIGdldCB0aGUgYWN0dWFsIHJldHVybgorYWRkcmVzcyBkdXJpbmcgYW4gdW53aW5kIGVibF91bndpbmRfcmV0X21hc2suCisKK1JlYmFzZSBhcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoIGZyb20gMC4xNTkgdG8gMC4xNjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyB8IDMgKysrCisgbGliZWJsL2VibGluaXRyZWcuYyB8IDggKysrKysrKysKKyBsaWJlYmwvbGliZWJsLmggICAgIHwgNCArKysrCisgbGliZWJsL2xpYmVibFAuaCAgICB8IDYgKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggMjI2NjgyOS4uZjhkZjA0MiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC04Nyw1ICs4Nyw4IEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgIC8qIEJpdCB6ZXJvIGVuY29kZXMgd2hldGhlciBhbiBmdW5jdGlvbiBhZGRyZXNzIGlzIFRIVU1CIG9yIEFSTS4gKi8KKyAgIGVoLT5mdW5jX2FkZHJfbWFzayA9IH4oR0VsZl9BZGRyKTE7CisgCisrICAvKiBCaXQgemVybyBlbmNvZGVzIHdoZXRoZXIgdG8gcmV0dXJuIHRvIGEgVEhVTUIgb3IgQVJNIGZ1bmN0aW9uLiAqLworKyAgZWgtPnVud2luZF9yZXRfbWFzayA9IH4oR0VsZl9BZGRyKTE7CisrCisgICByZXR1cm4gTU9EVkVSU0lPTjsKKyB9CitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibGluaXRyZWcuYyBiL2xpYmVibC9lYmxpbml0cmVnLmMKK2luZGV4IDU3MjliM2MuLmNhNjgxYzAgMTAwNjQ0CistLS0gYS9saWJlYmwvZWJsaW5pdHJlZy5jCisrKysgYi9saWJlYmwvZWJsaW5pdHJlZy5jCitAQCAtNTYsMyArNTYsMTEgQEAgZWJsX2Z1bmNfYWRkcl9tYXNrIChFYmwgKmVibCkKKyAgIHJldHVybiAoKGVibCA9PSBOVUxMIHx8IGVibC0+ZnVuY19hZGRyX21hc2sgPT0gMCkKKyAJICA/IH4oR0VsZl9BZGRyKTAgOiBlYmwtPmZ1bmNfYWRkcl9tYXNrKTsKKyB9CisrCisrR0VsZl9BZGRyCisrZWJsX3Vud2luZF9yZXRfbWFzayAoRWJsICplYmwpCisreworKyAgcmV0dXJuICgoZWJsID09IE5VTEwgfHwgZWJsLT51bndpbmRfcmV0X21hc2sgPT0gMCkKKysJICA/IH4oR0VsZl9BZGRyKTAgOiBlYmwtPnVud2luZF9yZXRfbWFzayk7CisrfQorKworZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmwuaCBiL2xpYmVibC9saWJlYmwuaAoraW5kZXggNDBjZjYzNS4uYmU3MDAyNyAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmwuaAorKysrIGIvbGliZWJsL2xpYmVibC5oCitAQCAtNDIwLDYgKzQyMCwxMCBAQCBleHRlcm4gc2l6ZV90IGVibF9mcmFtZV9ucmVncyAoRWJsICplYmwpCisgICAgdGFibGVzKSBpcyBuZWVkZWQuICAqLworIGV4dGVybiBHRWxmX0FkZHIgZWJsX2Z1bmNfYWRkcl9tYXNrIChFYmwgKmVibCk7CisgCisrLyogTWFzayB0byB1c2UgZm9yIHVud2luZCByZXR1cm4gYWRkcmVzcyBpbiBjYXNlIHRoZSBhcmNoaXRlY3R1cmUgYWRkcworKyAgIHNvbWUgZXh0cmEgbm9uLWFkZHJlc3MgYml0cyB0byBpdC4gICovCisrZXh0ZXJuIEdFbGZfQWRkciBlYmxfdW53aW5kX3JldF9tYXNrIChFYmwgKmVibCk7CisrCisgLyogQ29udmVydCAqUkVHTk8gYXMgaXMgaW4gRFdBUkYgdG8gYSBsb3dlciByYW5nZSBzdWl0YWJsZSBmb3IKKyAgICBEd2FyZl9GcmFtZS0+UkVHUyBpbmRleGluZy4gICovCisgZXh0ZXJuIGJvb2wgZWJsX2R3YXJmX3RvX3JlZ25vIChFYmwgKmVibCwgdW5zaWduZWQgKnJlZ25vKQorZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmxQLmggYi9saWJlYmwvbGliZWJsUC5oCitpbmRleCBkYmQ2N2YzLi5lMThhY2U2IDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibFAuaAorKysrIGIvbGliZWJsL2xpYmVibFAuaAorQEAgLTcwLDYgKzcwLDEyIEBAIHN0cnVjdCBlYmwKKyAgICAgIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGhlIGFjdHVhbCBtYXNrIHRvIHVzZS4gICovCisgICBHRWxmX0FkZHIgZnVuY19hZGRyX21hc2s7CisgCisrICAvKiBNYXNrIHRvIHVzZSB0byBnZXQgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYW4gdW53aW5kIGluIGNhc2UgdGhlCisrICAgICBhcmNoaXRlY3R1cmUgYWRkcyBzb21lIGV4dHJhIG5vbi1hZGRyZXNzIGJpdHMgdG8gaXQuICBXaGVuIG5vdAorKyAgICAgaW5pdGlhbGl6ZWQgKDApIHRoZW4gZWJsX3Vud2luZF9yZXRfbWFzayB3aWxsIHJldHVybiB+MCwgb3RoZXJ3aXNlCisrICAgICBpdCBzaG91bGQgYmUgdGhlIGFjdHVhbCBtYXNrIHRvIHVzZS4gICovCisrICBHRWxmX0FkZHIgdW53aW5kX3JldF9tYXNrOworKworICAgLyogRnVuY3Rpb24gZGVzY3JpcHRvciBsb2FkIGFkZHJlc3MgYW5kIHRhYmxlIGFzIHVzZWQgYnkKKyAgICAgIGVibF9yZXNvbHZlX3N5bV92YWx1ZSBpZiBhdmFpbGFibGUgZm9yIHRoaXMgYXJjaC4gICovCisgICBHRWxmX0FkZHIgZmRfYWRkcjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTNiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvZml4aGVhZGVyY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRm9yIHNvbWUgYmluYXJpZXMgd2UgY2FuIGdldCBhIGludmFsaWQgc2VjdGlvbiBhbGlnbm1lbnQsIGZvciBleGFtcGxlIGlmIAorc2hfYWxpZ24gPSAxIGFuZCBzaF9hZGRyYWxpZ24gaXMgMC4gSW4gdGhlIGNhc2Ugb2YgYSB6ZXJvIHNpemUgc2VjdGlvbiBsaWtlIAorIi5ub3RlLkdOVS1zdGFjayIsIHRoaXMgaXMgaXJyZWxhdmVudCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBhbmQgd2Ugc2hvdWxkbid0CitlcnJvciBpbiB0aGlzIGNhc2UuCisKK1JQIDIwMTQvNi8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCistLS0gYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCisrKysgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCitAQCAtMzM5LDggKzMzOSw4IEBAIF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVudWxsX3dybG9jaykgKEVsZiAqZWxmLCBpbnQgKmNoYW5nZV9ib3AsIHNpemVfdCBzaG51bSkKKyAJCSAgICAgd2UgdGVzdCBmb3IgdGhlIGFsaWdubWVudCBvZiB0aGUgc2VjdGlvbiBiZWluZyBsYXJnZQorIAkJICAgICBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGFsaWdubWVudCByZXF1aXJlZCBieSBhIGRhdGEKKyAJCSAgICAgYmxvY2suICAqLworLQkJICBpZiAodW5saWtlbHkgKCEgcG93ZXJvZjIgKHNoZHItPnNoX2FkZHJhbGlnbikpCistCQkgICAgICB8fCB1bmxpa2VseSAoKHNoZHItPnNoX2FkZHJhbGlnbiA/OiAxKSA8IHNoX2FsaWduKSkKKysJCSAgaWYgKHNoZHItPnNoX3NpemUgJiYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQorKwkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpKQorIAkJICAgIHsKKyAJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0FMSUdOKTsKKyAJCSAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTFhNzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2hwcGFfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsODAwIEBACitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19pbml0LmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsNzQgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBQQS1SSVNDIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfUEFSSVNDXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBwYXJpc2NfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIlBBLVJJU0MiOworKyAgcGFyaXNjX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgbWFjaGluZV9mbGFnX2NoZWNrKTsKKysgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWdtZW50X3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VjdGlvbl90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKyAgaWYgKHBhNjQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMjsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxNTkgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgUEEtUklTQyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKytwYXJpc2NfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwsIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICBpZiAoZWJsLT5lbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVibC0+ZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKworKyAgaW50IG5yZWdzID0gcGE2NCA/IDEyNyA6IDEyODsKKysKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBucmVnczsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPj0gbnJlZ3MgfHwgbmFtZWxlbiA8IDYpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJSI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSA1OworKyAgICB9CisrICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgfQorKyAgZWxzZQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysKKysgIGlmIChyZWdubyA8IDMzKSB7CisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgMCAuLi4gOToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMTAgLi4uIDMxOgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMzI6CisrCSpwcmVmaXggPSBOVUxMOworKwluYW1lWzBdID0gJ1MnOworKwluYW1lWzFdID0gJ0EnOworKwluYW1lWzJdID0gJ1InOworKwluYW1lbGVuID0gMzsKKysJYnJlYWs7CisrICAgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChwYTY0ICYmICgocmVnbm8gLSA3MikgJSAyKSkgeworKyAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDcyICsgMCAuLi4gNzIgKyAxMToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbM10gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSA3MiArIDEyIC4uLiA3MiArIDU1OgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVszXSA9IChyZWdubyArIDggLSA3MikgLyAyICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gNDsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbNF0gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIH0KKysgIH0KKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTI4IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgUEEtUklTQy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyoJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMjFMLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTRSLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRSLAkJUkVMfEVYRUMpCisrUkVMT0NfVFlQRSAoRFBSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTREUiwgICAgICAgICAgUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoTFRPRkYxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRExUSU5EMTRGLAkJMCkKKytSRUxPQ19UWVBFIChTRVRCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTdSLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChTRUdCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUdSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFRPRkYyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0UiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMzIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRSLAkwKQorK1JFTE9DX1RZUEUgKEZQVFI2NCwJCTApCisrUkVMT0NfVFlQRSAoUExBQkVMMzIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJDLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoRElSNjQsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTREUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkYsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZXRiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkRGLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRXUiwJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTREUiwJMCkKKytSRUxPQ19UWVBFIChTRUdSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSNjQsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZERiwJMCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChJUExULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRVBMVCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwzMiwJCURZTikKKytSRUxPQ19UWVBFIChUUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRGLAkwKQorK1JFTE9DX1RZUEUgKFRQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZERiwJMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsCURZTikKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsCURZTikKKysKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DICAgICAgIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMjEzIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9QQS1SSVNDIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogJXIyOCwgb3IgcGFpciAlcjI4LCAlcjI5LiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICVmcjRMLCBvciBwYWlyICVmcjRMLCAlZnI0UiBvbiBwYS0zMiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWczMiAyCisrI2RlZmluZSBubG9jX2ZwcmVncGFpcjMyIDQKKysKKysvKiAkZnI0ICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKysjaWYgMAorKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiBBZGRyZXNzIG9mIHRoZSBsb2NhdGlvbiBpcyBzdG9yZWQKKysgICBpbiAlcjI4IGJlZm9yZSBmdW5jdGlvbiBjYWxsLCBidXQgaXQgbWF5IGJlIGNoYW5nZWQgYnkgZnVuY3Rpb24uICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMjggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrI2VuZGlmCisrCisrc3RhdGljIGludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsIGludCBwYTY0KQorK3sKKysgIER3YXJmX1dvcmQgcmVnc2l6ZSA9IHBhNjQgPyA4IDogNDsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSA0OworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQlpZiAocGE2NCkgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzsKKysJCSAgaWYgKHNpemUgPD0gOCkKKysJCSAgICAgIHJldHVybiBubG9jX2ZwcmVnOworKwkJfQorKwkJZWxzZSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnMzI7CisrCQkgIGlmIChzaXplIDw9IDQpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWczMjsKKysJCSAgZWxzZSBpZiAoc2l6ZSA8PSA4KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjMyOworKwkJfQorKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCWlmIChwYTY0KQorKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZTogeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSAhPSAwKQorKwkgIHJldHVybiAtMTsKKysJaWYgKHBhNjQpCisrICAgICAgICAgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKyAgICAgICAgaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrICAgICAgICBpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKyNpZiAwCisrCS8qIHRoZXJlIHNob3VsZCBiZSBzb21lIHdheSB0byBrbm93IHRoaXMgbG9jYXRpb24uLi4gQnV0IEkgZG8gbm90IHNlZSBpdC4gKi8KKysgICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysjZW5kaWYKKysJLyogZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxMTIgQEAKKysvKiBQQS1SSVNDIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlZ21lbnRfdHlwZV9uYW1lIChpbnQgc2VnbWVudCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHNlZ21lbnQpCisrICAgIHsKKysgICAgY2FzZSBQVF9QQVJJU0NfQVJDSEVYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19BUkNIRVhUIjsKKysgICAgY2FzZSBQVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc3ltYm9sIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zeW1ib2xfdHlwZV9uYW1lKGludCBzeW1ib2wsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgIHNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysJaWYgKHN5bWJvbCA9PSBTVFRfUEFSSVNDX01JTExJQ09ERSkKKysJICByZXR1cm4gIlBBUklTQ19NSUxMSSI7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc2VjdGlvbiB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VjdGlvbl90eXBlX25hbWUgKGludCB0eXBlLAorKwkJCWNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgU0hUX1BBUklTQ19FWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRVhUIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfRE9DOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0RPQyI7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBDaGVjayB3aGV0aGVyIG1hY2hpbmUgZmxhZ3MgYXJlIHZhbGlkLiAgKi8KKytib29sCisrcGFyaXNjX21hY2hpbmVfZmxhZ19jaGVjayAoR0VsZl9Xb3JkIGZsYWdzKQorK3sKKysgIGlmIChmbGFncyAmfiAoRUZfUEFSSVNDX1RSQVBOSUwgfCBFRl9QQVJJU0NfRVhUIHwgRUZfUEFSSVNDX0xTQiB8CisrCUVGX1BBUklTQ19XSURFIHwgRUZfUEFSSVNDX05PX0tBQlAgfAorKwlFRl9QQVJJU0NfTEFaWVNXQVAgfCBFRl9QQVJJU0NfQVJDSCkpCisrICAgIHJldHVybiAwOworKworKyAgR0VsZl9Xb3JkIGFyY2ggPSBmbGFncyAmIEVGX1BBUklTQ19BUkNIOworKworKyAgcmV0dXJuICgoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMCkgfHwgKGFyY2ggPT0gRUZBX1BBUklTQ18xXzEpIHx8CisrICAgICAgKGFyY2ggPT0gRUZBX1BBUklTQ18yXzApKTsKKyt9CisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrcGFyaXNjX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjY0OgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgY2FzZSBSX1BBUklTQ19ESVIzMjoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUwzMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0hQUEFfSAorKyNkZWZpbmUgX0xJQkVCTF9IUFBBX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMihEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjUyMTQ5NzM3ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMzoxMS45MTA4MDExMDUgKzAwMDAKK0BAIC0zMywxMSArMzMsMTIgQEAKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4CisrCSAgdGlsZWd4IHBhcmlzYworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYQorKwkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKysJICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTExNiw2ICsxMTcsOSBAQAorIGxpYmVibF90aWxlZ3hfcGljX2FfU09VUkNFUyA9ICQodGlsZWd4X1NSQ1MpCisgYW1fbGliZWJsX3RpbGVneF9waWNfYV9PQkpFQ1RTID0gJCh0aWxlZ3hfU1JDUzouYz0ub3MpCisgCisrcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworK2xpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisrYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjI1MjE0OTczNyArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTE4MTQsMTYgKzE4MTQsMjQgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFdSCTE5CisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0RFIJMjAKKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMjFMCTI2CS8qIEdQLXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0UgkzOAkvKiBMVC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ETFRJTkQxNEYJMzkKKysjZGVmaW5lIFJfUEFSSVNDX1NFVEJBU0UJNDAKKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDIxTAk0MgorKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE3Ugk0MworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0Ugk0NgorICNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNEYJNTUKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRSCTYyCS8qIExULXJlbC4gZmN0IHB0ciwgcmlnaHQgMTQgYml0cy4gKi8KK0BAIC0xODMyLDYgKzE4NDAsNyBAQAorICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyQwk3MworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0RFIJNzYJLyogUEMgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KK0BAIC0xODU3LDYgKzE4NjYsOCBAQAorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2REYJMTAzCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFdSCTEwNworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0RFIJMTA4CisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUw2NAkxMTIJLyogNjQgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjU2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbTY4a19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw0OTMgQEAKK0Zyb206IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK0Zyb206IFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLmRlPgorU3ViamVjdDogbTY4ayBzdXBwb3J0CisKK1dyaXR0ZW4gYnkgS3VydCBSb2Vja3gsIGV4Y2VwdCBmb3IgdGhlIHJldHZhbCBzdXBwb3J0IHdoaWNoIHdhcyB3cml0dGVuCitieSBUaG9yc3RlbiBHbGFzZXIKKworCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX2luaXQuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw1MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG02OGsgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW02OGtfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl82OEtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtNjhrX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK202OGtfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJtNjhrIjsKKysgIG02OGtfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWdzLmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsMTA2IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIG02OGsgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbTY4a19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrCWlmIChuYW1lID09IE5VTEwpCisrCQlyZXR1cm4gMjU7CisrCisrCWlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiAyNCB8fCBuYW1lbGVuIDwgNSkKKysJCXJldHVybiAtMTsKKysKKysJKnByZWZpeCA9ICIlIjsKKysJKmJpdHMgPSAzMjsKKysJKnR5cGUgPSAocmVnbm8gPCA4ID8gRFdfQVRFX3NpZ25lZAorKwkJOiByZWdubyA8IDE2ID8gRFdfQVRFX2FkZHJlc3MgOiBEV19BVEVfZmxvYXQpOworKworKwlpZiAocmVnbm8gPCA4KQorKwl7CisrCQkqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDE2KQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDI0KQorKwl7CisrCQkqc2V0bmFtZSA9ICJGUFUiOworKwl9CisrCWVsc2UKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCQkqdHlwZSA9IERXX0FURV9hZGRyZXNzOworKwl9CisrCisrCXN3aXRjaCAocmVnbm8pCisrCXsKKysJY2FzZSAwIC4uLiA3OgorKwkJbmFtZVswXSA9ICdkJzsKKysJCW5hbWVbMV0gPSByZWdubyArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgOCAuLi4gMTM6CisrCQluYW1lWzBdID0gJ2EnOworKwkJbmFtZVsxXSA9IHJlZ25vIC0gOCArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTQ6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTU6CisrCQluYW1lWzBdID0gJ3MnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTYgLi4uIDIzOgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrCQluYW1lWzJdID0gcmVnbm8gLSAxNiArICcwJzsKKysgICAJCW5hbWVsZW4gPSAzOworKwkJYnJlYWs7CisrCisrCWNhc2UgMjQ6CisrCQluYW1lWzBdID0gJ3AnOworKwkJbmFtZVsxXSA9ICdjJzsKKysJCW5hbWVsZW4gPSAyOworKwl9CisrCisrCW5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrCXJldHVybiBuYW1lbGVuOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbTY4ay4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJMCkKKytSRUxPQ19UWVBFICgzMiwJCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoMTYsCQkJUkVMKQorK1JFTE9DX1RZUEUgKDgsCQkJUkVMKQorK1JFTE9DX1RZUEUgKFBDMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUEMxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQzgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4TywJCVJFTCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChHTE9CX0RBVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEpNUF9TTE9ULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUkVMQVRJVkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChHTlVfVlRJTkhFUklULAlSRUwpCisrUkVMT0NfVFlQRSAoR05VX1ZURU5UUlksCVJFTCkKKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTExNTcsNiArMTE1Nyw5IEBACisgI2RlZmluZSBSXzY4S19HTE9CX0RBVAkyMAkJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEJCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCQkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisrLyogVGhlIG5leHQgMiBhcmUgR05VIGV4dGVuc2lvbnMgdG8gZW5hYmxlIEMrKyB2dGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysjZGVmaW5lIFJfNjhLX0dOVV9WVElOSEVSSVQgMjMKKysjZGVmaW5lIFJfNjhLX0dOVV9WVEVOVFJZICAgMjQKKyAjZGVmaW5lIFJfNjhLX1RMU19HRDMyICAgICAgMjUgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0QxNiAgICAgIDI2ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEOCAgICAgICAyNyAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTQ6NDguMzQ0NjIxMTY3ICswMDAwCitAQCAtMzMsMTIgKzMzLDEyIEBACisgCisgCisgbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAorLQkgIHRpbGVneCBwYXJpc2MgbWlwcworKwkgIHRpbGVneCBwYXJpc2MgbWlwcyBtNjhrCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorIAkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYSBsaWJlYmxfbTY4a19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMjUsNiArMTI1LDEwIEBACisgbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorIGFtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisgCisrbTY4a19TUkNTID0gbTY4a19pbml0LmMgbTY4a19zeW1ib2wuYyBtNjhrX3JlZ3MuYyBtNjhrX3JldHZhbC5jCisrbGliZWJsX202OGtfcGljX2FfU09VUkNFUyA9ICQobTY4a19TUkNTKQorK2FtX2xpYmVibF9tNjhrX3BpY19hX09CSkVDVFMgPSAkKG02OGtfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw0MyBAQAorKy8qIG02OGsgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbTY4a19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSXzY4S18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfU1dPUkQ7CisrICAgIGNhc2UgUl82OEtfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl82OEtfODoKKysgICAgICByZXR1cm4gRUxGX1RfQllURTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDE3MiBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbTY4ayBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoYykgMjAxMSBUaG9yc3RlbiBHbGFzZXIsIERlYmlhbi4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrCisrLyogJWQwLCBvciBwYWlyICVkMCwgJWQxLCBvciAlYTAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzAgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfcHRycmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrI2RlZmluZSBubG9jX3B0cnJlZwkxCisrCisrLyogJWYwICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0KKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnCTEKKysKKysvKiBTdHJ1Y3R1cmVzIGFyZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIC0gc21hbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQKKysgICBpbiAlZDAgLyAlZDEgKC1mcmVnLXN0cnVjdC1yZXR1cm4gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KSwgbGFyZ2UKKysgICBzdHJ1Y3R1cmVzIHVzZSAlYTEgKGluIGNvbnN0cmFzdCB0byB0aGUgU1lTViBwc0FCSSB3aGljaCBzYXlzICVhMCkgYXMKKysgICByZWVudHJhbnQgc3RvcmFnZSBzcGFjZSBpbmRpY2F0b3IuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzksIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbTY4a19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICBEd2FyZl9Xb3JkIHNpemU7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsCisrCQkJCQkJJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwl7CisrCSAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgc2l6ZSA9IDQ7CisrCSAgZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwl9CisrICAgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwl7CisrCSAgKmxvY3AgPSBsb2NfcHRycmVnOworKyAgICAgICAgICByZXR1cm4gbmxvY19wdHJyZWc7CisrCX0KKysgICAgICBpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCXsKKysJICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCQkgICAgICZhdHRyX21lbSksCisrCQkJICAgICAgICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysJICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgeworKwkgICAgICAvKiBYWFggcmVhbGx5IDEwPyAqLworKyAgICAgICAgICAgICAgaWYgKHNpemUgPiAxMCkKKysgICAgICAgICAgICAgICAgcmV0dXJuIC0yOworKyAgICAgICAgICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZzsKKysJICAgIH0KKysJfQorKyAgICAgIGlmIChzaXplIDw9IDgpCisrCXsKKysJaW50cmVnOgorKwkgIC8qIFhYWCBjaGVjayBlbmRpYW5uZXNzIG9mIGR3b3JkIHBhaXIsIGludDY0IHZzIGFnZ3JlZ2F0ZSAqLworKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3BhaXI7CisrCX0KKysKKysgICAgYWdncmVnYXRlOgorKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICAgIGlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpID09IDAKKysJICAmJiBzaXplID4gMCAmJiBzaXplIDw9IDgpCisrCS8qIG5vdCBhY2N1cmF0ZSBmb3IgYSBzdHJ1Y3Qgd2hvc2Ugb25seSBtZW1iZXIgaXMgYSBmbG9hdCAqLworKwlnb3RvIGludHJlZzsKKysgICAgICBnb3RvIGFnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzNhM2YyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNzEyIEBACitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX2luaXQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw2MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG1pcHMgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX01JUFNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtaXBzX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworK2NvbnN0IGNoYXIgKgorK21pcHNfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBpZiAobWFjaGluZSA9PSBFTV9NSVBTKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGJpZy1lbmRpYW4iOworKyAgZWxzZSBpZiAobWFjaGluZSA9PSBFTV9NSVBTX1JTM19MRSkKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBsaXR0bGUtZW5kaWFuIjsKKysKKysgIG1pcHNfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWdzLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsMTA0IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIE1JUFMgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK21pcHNfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisrCQkgICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gNjY7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gNjUgfHwgbmFtZWxlbiA8IDQpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJCI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSByZWdubyArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDE7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gKHJlZ25vIC8gMTApICsgJzAnOworKyAgICAgICAgICBuYW1lWzFdID0gKHJlZ25vICUgMTApICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPCA2NCkKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2YnOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpICsgJzAnOworKwkgIG5hbWVsZW4gPSAyOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSAvIDEwICsgJzAnOworKwkgIG5hbWVbMl0gPSAocmVnbm8gLSAzMikgJSAxMCArICcwJzsKKysJICBuYW1lbGVuID0gMzsKKysJfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA9PSA2NCkKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnaCc7CisrICAgICAgbmFtZVsxXSA9ICdpJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdsJzsKKysgICAgICBuYW1lWzFdID0gJ28nOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrCisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNzkgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtaXBzLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMTYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDMyLCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwzMiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMjYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMTzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwxNiwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExJVEVSQUwsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1QxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUEMxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTEwxNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDMyLCAgICAgICAgICAgIDApCisrCisrUkVMT0NfVFlQRSAoU0hJRlQ1LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNISUZUNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICg2NCwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9QQUdFLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfT0ZTVCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0hJMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9MTzE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTVUIsICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0EsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9CLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChERUxFVEUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVSLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFU1QsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0hJMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9MTzE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNDTl9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQUREX0lNTUVESUFURSwgICAgICAwKQorK1JFTE9DX1RZUEUgKFBKVU1QLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUxHT1QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSkFMUiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUw2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR0QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0xETSwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfSEkxNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0xPMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dPVFRQUkVMLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDMyLCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUw2NCwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0hJMTYsICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9MTzE2LCAgICAgMCkKKysKKysjZGVmaW5lIE5PX0NPUFlfUkVMT0MgMQorKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDMyMSBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbWlwcyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysjaW5jbHVkZSA8ZWxmLmg+CisrCisrI2luY2x1ZGUgIi4uL2xpYmVibC9saWJlYmxQLmgiCisrI2luY2x1ZGUgIi4uL2xpYmR3L2xpYmR3UC5oIgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhlIEFCSSBvZiB0aGUgZmlsZS4gIEFsc28gc2VlIEVGX01JUFNfQUJJMiBhYm92ZS4gKi8KKysjZGVmaW5lIEVGX01JUFNfQUJJCQkweDAwMDBGMDAwCisrCisrLyogVGhlIG9yaWdpbmFsIG8zMiBhYmkuICovCisrI2RlZmluZSBFX01JUFNfQUJJX08zMiAgICAgICAgICAweDAwMDAxMDAwCisrCisrLyogTzMyIGV4dGVuZGVkIHRvIHdvcmsgb24gNjQgYml0IGFyY2hpdGVjdHVyZXMgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzY0ICAgICAgICAgIDB4MDAwMDIwMDAKKysKKysvKiBFQUJJIGluIDMyIGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkkzMiAgICAgICAweDAwMDAzMDAwCisrCisrLyogRUFCSSBpbiA2NCBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJNjQgICAgICAgMHgwMDAwNDAwMAorKworKy8qIEFsbCB0aGUgcG9zc2libGUgTUlQUyBBQklzLiAqLworK2VudW0gbWlwc19hYmkKKysgIHsKKysgICAgTUlQU19BQklfVU5LTk9XTiA9IDAsCisrICAgIE1JUFNfQUJJX04zMiwKKysgICAgTUlQU19BQklfTzMyLAorKyAgICBNSVBTX0FCSV9ONjQsCisrICAgIE1JUFNfQUJJX082NCwKKysgICAgTUlQU19BQklfRUFCSTMyLAorKyAgICBNSVBTX0FCSV9FQUJJNjQsCisrICAgIE1JUFNfQUJJX0xBU1QKKysgIH07CisrCisrLyogRmluZCB0aGUgbWlwcyBBQkkgb2YgdGhlIGN1cnJlbnQgZmlsZSAqLworK2VudW0gbWlwc19hYmkgZmluZF9taXBzX2FiaShFbGYgKmVsZikKKyt7CisrICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysKKysgIGlmIChlaGRyID09IE5VTEwpCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgR0VsZl9Xb3JkIGVsZl9mbGFncyA9IGVoZHItPmVfZmxhZ3M7CisrCisrICAvKiBDaGVjayBlbGZfZmxhZ3MgdG8gc2VlIGlmIGl0IHNwZWNpZmllcyB0aGUgQUJJIGJlaW5nIHVzZWQuICAqLworKyAgc3dpdGNoICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkpKQorKyAgICB7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX082NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgZGVmYXVsdDoKKysgICAgICBpZiAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJMikpCisrCXJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgIH0KKysKKysgIC8qIEdDQyBjcmVhdGVzIGEgcHNldWRvLXNlY3Rpb24gd2hvc2UgbmFtZSBkZXNjcmliZXMgdGhlIEFCSS4gICovCisrICBzaXplX3Qgc2hzdHJuZHg7CisrICBpZiAoZWxmX2dldHNoZHJzdHJuZHggKGVsZiwgJnNoc3RybmR4KSA8IDApCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIEVsZl9TY24gKnNjbiA9IE5VTEw7CisrICB3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuIChlbGYsIHNjbikpICE9IE5VTEwpCisrICAgIHsKKysgICAgICBHRWxmX1NoZHIgc2hkcl9tZW07CisrICAgICAgR0VsZl9TaGRyICpzaGRyID0gZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSk7CisrICAgICAgaWYgKHNoZHIgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgICAgIG5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSA/OiAiIjsKKysgICAgICBpZiAoc3RybmNtcCAobmFtZSwgIi5tZGVidWcuIiwgOCkgIT0gMCkKKysgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlOMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9ONjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlPNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrICAgIH0KKysKKysgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworK30KKysKKyt1bnNpZ25lZCBpbnQKKyttaXBzX2FiaV9yZWdzaXplIChlbnVtIG1pcHNfYWJpIGFiaSkKKyt7CisrICBzd2l0Y2ggKGFiaSkKKysgICAgeworKyAgICBjYXNlIE1JUFNfQUJJX0VBQkkzMjoKKysgICAgY2FzZSBNSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIDQ7CisrICAgIGNhc2UgTUlQU19BQklfTjMyOgorKyAgICBjYXNlIE1JUFNfQUJJX042NDoKKysgICAgY2FzZSBNSVBTX0FCSV9PNjQ6CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiA4OworKyAgICBjYXNlIE1JUFNfQUJJX1VOS05PV046CisrICAgIGNhc2UgTUlQU19BQklfTEFTVDoKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKysKKysvKiAkdjAgb3IgcGFpciAkdjAsICR2MSAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICRmMCAoZmxvYXQpLCBvciBwYWlyICRmMCwgJGYxIChkb3VibGUpLgorKyAqIGYyL2YzIGFyZSB1c2VkIGZvciBDT01QTEVYICg9IDIgZG91YmxlcykgcmV0dXJucyBpbiBGb3J0cmFuICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMzIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzUgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKysvKiAkZjAsIG9yIHBhaXIgJGYwLCAkZjIuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrI2RlZmluZSBubG9jX2ZwcmVncGFpciA0CisrI2RlZmluZSBubG9jX2ZwcmVncXVhZCA4CisrCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorKyAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gJHYwLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyLCAubnVtYmVyID0gMCB9CisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKworK2ludAorK21pcHNfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgLyogRmlyc3QgZmluZCB0aGUgQUJJIHVzZWQgYnkgdGhlIGVsZiBvYmplY3QgKi8KKysgIGVudW0gbWlwc19hYmkgYWJpID0gZmluZF9taXBzX2FiaShmdW5jdHlwZWRpZS0+Y3UtPmRiZy0+ZWxmKTsKKysKKysgIC8qIFNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZyB3aGlsZSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgQUJJICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX0xBU1QpCisrICAgIHJldHVybiAtMTsKKysKKysgIC8qIFdlIGNvdWxkbid0IGlkZW50aWZ5IHRoZSBBQkksIGJ1dCB0aGUgZmlsZSBzZWVtcyB2YWxpZCAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9VTktOT1dOKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBDYW4ndCBoYW5kbGUgRUFCSSB2YXJpYW50cyAqLworKyAgaWYgKChhYmkgPT0gTUlQU19BQklfRUFCSTMyKSB8fCAoYWJpID09IE1JUFNfQUJJX0VBQkk2NCkpCisrICAgIHJldHVybiAtMjsKKysKKysgIHVuc2lnbmVkIGludCByZWdzaXplID0gbWlwc19hYmlfcmVnc2l6ZSAoYWJpKTsKKysgIGlmICghcmVnc2l6ZSkKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IHJlZ3NpemU7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysjZGVmaW5lIEFCSV9MT0MobG9jLCByZWdzaXplKSAoKHJlZ3NpemUpID09IDQgPyAobG9jICMjIF9vMzIpIDogKGxvYykpCisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQkqbG9jcCA9IEFCSV9MT0MobG9jX2ZwcmVnLCByZWdzaXplKTsKKysJCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCisrCQlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyOworKworKwkJaWYgKHNpemUgPD0gNCpyZWdzaXplICYmIGFiaSA9PSBNSVBTX0FCSV9PMzIpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdxdWFkOworKworKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCSpsb2NwID0gQUJJX0xPQyhsb2NfaW50cmVnLCByZWdzaXplKTsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gU2hvdWxkbid0IGhhcHBlbiB0aG91Z2ggKGF0IGxlYXN0IHdpdGggZ2NjKSAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZToKKysgICAgICAvKiBYWFggVE9ETzogQ2FuJ3QgaGFuZGxlIHN0cnVjdHVyZSByZXR1cm4gd2l0aCBvdGhlciBBQkkncyB5ZXQgOi0vICovCisrICAgICAgaWYgKChhYmkgIT0gTUlQU19BQklfTzMyKSAmJiAoYWJpICE9IE1JUFNfQUJJX082NCkpCisrICAgICAgICByZXR1cm4gLTI7CisrCisrICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw1MiBAQAorKy8qIE1JUFMgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbWlwc19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX01JUFNfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl9NSVBTXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBjYXNlIFJfTUlQU182NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTcxLDYgKzcxLDggQEAKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyYyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDLCAwLCAwIH0sCisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmN2OHBsdXMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQzMyUExVUywgMCwgMCB9LAorICAgeyAiczM5MCIsICJlYmxfczM5MCIsICJzMzkwIiwgNCwgRU1fUzM5MCwgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwcyIsICJtaXBzIiwgNCwgRU1fTUlQUywgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwc2VsIiwgIm1pcHNlbCIsIDQsIEVNX01JUFNfUlMzX0xFLCAwLCAwIH0sCisgCisgICB7ICJtMzIiLCAiZWxmX20zMiIsICJtMzIiLCAzLCBFTV9NMzIsIDAsIDAgfSwKKyAgIHsgIm02OGsiLCAiZWxmX202OGsiLCAibTY4ayIsIDQsIEVNXzY4SywgMCwgMCB9LAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxNDIzNTg3NSArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMTEyLDExICsxMTIsMTMgQEAKKyB9CisgCisgCisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgYm9vbAorIEVCTEhPT0soY29weV9yZWxvY19wKSAoaW50IHJlbG9jKQorIHsKKyAgIHJldHVybiByZWxvYyA9PSBSX1RZUEUgKENPUFkpOworIH0KKysjZW5kaWYKKyAKKyBib29sCisgRUJMSE9PSyhub25lX3JlbG9jX3ApIChpbnQgcmVsb2MpCitAQCAtMTM4LDcgKzE0MCw5IEBACisgICBlYmwtPnJlbG9jX3R5cGVfbmFtZSA9IEVCTEhPT0socmVsb2NfdHlwZV9uYW1lKTsKKyAgIGVibC0+cmVsb2NfdHlwZV9jaGVjayA9IEVCTEhPT0socmVsb2NfdHlwZV9jaGVjayk7CisgICBlYmwtPnJlbG9jX3ZhbGlkX3VzZSA9IEVCTEhPT0socmVsb2NfdmFsaWRfdXNlKTsKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyAgIGVibC0+Y29weV9yZWxvY19wID0gRUJMSE9PSyhjb3B5X3JlbG9jX3ApOworKyNlbmRpZgorICAgZWJsLT5ub25lX3JlbG9jX3AgPSBFQkxIT09LKG5vbmVfcmVsb2NfcCk7CisgI2lmbmRlZiBOT19SRUxBVElWRV9SRUxPQworICAgZWJsLT5yZWxhdGl2ZV9yZWxvY19wID0gRUJMSE9PSyhyZWxhdGl2ZV9yZWxvY19wKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjEwLjg0MTQ2ODkzNCArMDAwMAorQEAgLTMzLDEyICszMywxMiBAQAorIAorIAorIG1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBhYXJjaDY0IHNwYXJjIHBwYyBwcGM2NCBzMzkwIFwKKy0JICB0aWxlZ3ggcGFyaXNjCisrCSAgdGlsZWd4IHBhcmlzYyBtaXBzCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorIAkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMjEsNiArMTIxLDEwIEBACisgbGliZWJsX3BhcmlzY19waWNfYV9TT1VSQ0VTID0gJChwYXJpc2NfU1JDUykKKyBhbV9saWJlYmxfcGFyaXNjX3BpY19hX09CSkVDVFMgPSAkKHBhcmlzY19TUkNTOi5jPS5vcykKKyAKKyttaXBzX1NSQ1MgPSBtaXBzX2luaXQuYyBtaXBzX3N5bWJvbC5jIG1pcHNfcmVncy5jIG1pcHNfcmV0dmFsLmMKKytsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisrYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKysKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorIAllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjY5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19yZWFkZWxmX3cucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorU3ViamVjdDogTWFrZSByZWFkZWxmIC13IG91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBtaXBzCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY2MjA0MQorRm9yd2FyZGVkOiBub3QtbmVlZGVkCisKK1Vwc3RyZWFtcyB3YW50cyBhIGNoYW5nZSB3aGVyZSB0aGlzIGlzIGhhbmRsZWQgYnkgYSBob29rIHRoYXQgbmVlZHMKK3RvIGJlIGZpbGxlZCBpbiBieSB0aGUgYmFja2VuZCBmb3IgdGhlIGFyY2guCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1My9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy9zcmMvcmVhZGVsZi5jCTIwMTItMDgtMTAgMjI6MDE6NTUuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTMvc3JjL3JlYWRlbGYuYwkyMDEyLTA5LTE4IDIxOjQ2OjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTczNjQsNyArNzM2NCw4IEBACisgICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworICAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworIAorLSAgICAgIGlmIChzaGRyICE9IE5VTEwgJiYgc2hkci0+c2hfdHlwZSA9PSBTSFRfUFJPR0JJVFMpCisrICAgICAgaWYgKHNoZHIgIT0gTlVMTCAmJiAoCisrCSAoc2hkci0+c2hfdHlwZSA9PSBTSFRfUFJPR0JJVFMpIHx8IChzaGRyLT5zaF90eXBlID09IFNIVF9NSVBTX0RXQVJGKSkpCisgCXsKKyAJICBzdGF0aWMgY29uc3Qgc3RydWN0CisgCSAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMWIzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU5L2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTkub3JpZy9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworKysrIGVsZnV0aWxzLTAuMTU5L2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitAQCAtMzkzLDYgKzM5MywxNiBAQCBwaWRfZ2V0dGhyZWFkIChEd2ZsICpkd2ZsIF9fYXR0cmlidXRlX18KKyAgIHJldHVybiBmYWxzZTsKKyB9CisgCisrYm9vbAorK2ludGVybmFsX2Z1bmN0aW9uCisrX19saWJkd2ZsX3B0cmFjZV9hdHRhY2ggKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJIGJvb2wgKnRpZF93YXNfc3RvcHBlZHAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIGVycm5vID0gRU5PU1lTOworKyAgX19saWJkd2ZsX3NldGVycm5vIChEV0ZMX0VfRVJSTk8pOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgYm9vbAorIHBpZF9tZW1vcnlfcmVhZCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgICAgICAgICAgICBEd2FyZl9BZGRyIGFkZHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorQEAgLTQxOSw2ICs0MjksMTMgQEAgcGlkX2RldGFjaCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fICgodQorIHsKKyB9CisgCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX19saWJkd2ZsX3B0cmFjZV9kZXRhY2ggKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJIGJvb2wgdGlkX3dhc19zdG9wcGVkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrfQorKworIHN0YXRpYyB2b2lkCisgcGlkX3RocmVhZF9kZXRhY2ggKER3ZmxfVGhyZWFkICp0aHJlYWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAkJICB2b2lkICp0aHJlYWRfYXJnIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGZmMDdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCkBAIC0wLDAgKzEsMTAyMSBAQAorUmViYXNlIHRvIDEuMTYyCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysrKysrCisgYmFja2VuZHMvQ2hhbmdlTG9nICAgICAgICAgIHwgICAxMiArKysrKysrKysKKyBiYWNrZW5kcy9NYWtlZmlsZS5hbSAgICAgICAgfCAgICAyICstCisgY29uZmlnL0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAgNCArKysKKyBjb25maWcvZXUuYW0gICAgICAgICAgICAgICAgfCAgIDE0ICsrKysrKystLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgfCAgIDYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBsaWIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAgICA4ICsrKysrKworIGxpYi9ldS1jb25maWcuaCAgICAgICAgICAgICB8ICAgMTAgKysrKysrKworIGxpYmFzbS9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDUgKysrKworIGxpYmNwdS9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDggKysrKysrCisgbGliY3B1L2kzODZfZGlzYXNtLmMgICAgICAgIHwgICAgMSArCisgbGliZHcvQ2hhbmdlTG9nICAgICAgICAgICAgIHwgICAxMyArKysrKysrKysKKyBsaWJkdy9kd2FyZl9iZWdpbl9lbGYuYyAgICAgfCAgICA4ICsrKysrKworIGxpYmR3L2xpYmR3LmggICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJkd2ZsL0NoYW5nZUxvZyAgICAgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrCisgbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKworIGxpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jICB8ICAgMTQgKysrKysrKysrKworIGxpYmVibC9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDUgKysrKworIGxpYmVsZi9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgMTAgKysrKysrKworIGxpYmVsZi9jb21tb24uaCAgICAgICAgICAgICB8ICAgIDQgKy0tCisgbGliZWxmL2dudWhhc2hfeGxhdGUuaCAgICAgIHwgICAgNiArKystLQorIHNyYy9DaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysrKysrCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgIHwgICAgNSArKysrCisgc3JjL2FkZHIybGluZS5jICAgICAgICAgICAgIHwgICAgNCArLS0KKyBzcmMvZmluZHRleHRyZWwuYyAgICAgICAgICAgfCAgICA2ICsrKystCisgc3JjL2xkLmggICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIHNyYy9yZWFkZWxmLmMgICAgICAgICAgICAgICB8ICAgMTUgKysrKysrKy0tLS0KKyBzcmMvc3RyaW5ncy5jICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrCisgc3JjL3N0cmlwLmMgICAgICAgICAgICAgICAgIHwgICAgNiArKysrKworIHRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMTQgKysrKysrKysrKworIHRlc3RzL01ha2VmaWxlLmFtICAgICAgICAgICB8ICAgIDEgKworIHRlc3RzL2JhY2t0cmFjZS5jICAgICAgICAgICB8ICAgIDEgKworIHRlc3RzL2xpbmUyYWRkci5jICAgICAgICAgICB8ICAgIDIgKy0KKyAzMyBmaWxlcyBjaGFuZ2VkLCAzNDMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGQ4Mjk3ODMuLjg5YmZkMjQgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTI1Myw2ICsyNTMsOCBAQAorIAorIDIwMTItMDEtMjQgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKKysJKiBjb25maWd1cmUuYWM6IFdyYXAgQUNfQ09NUElMRV9JRkVMU0Ugc291cmNlcyBpbiBBQ19MQU5HX1NPVVJDRS4KKysKKyAJKiBDT1BZSU5HOiBGaXggYWRkcmVzcy4gVXBkYXRlZCB2ZXJzaW9uIGZyb20gZ251bGliLgorIAorIDIwMTItMDEtMjMgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KK0BAIC0yNzEsNiArMjczLDkgQEAKKyAKKyAyMDExLTEwLTA4ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorIAorKwkqIGNvbmZpZ3VyZS5hYyAoLS1kaXNhYmxlLXdlcnJvcik6IEhhbmRsZSBpdCwgY29udHJvbGxpbmcgQlVJTERfV0VSUk9SCisrCWF1dG9tYWtlIG9wdGlvbi4KKysKKyAJKiBjb25maWd1cmUuYWM6IEZpeCB1c2Ugb2YgQUNfQVJHX0VOQUJMRSB0byBoYW5kbGUgJGVuYWJsZXZhbCBjb3JyZWN0bHkuCisgCisgMjAxMS0xMC0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGdtYWlsLmNvbT4KK0BAIC0yOTIsNiArMjk3LDEwIEBACisgCisgCSogY29uZmlndXJlLmFjIChMT0NBTEVESVIsIERBVEFESVJOQU1FKTogUmVtb3ZlZC4KKyAKKysyMDA5LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogVXNlIHNlZCBhbmQgZXhwciBpbnN0ZWFkIG9mIG1vZGVybiBiYXNoIGV4dGVuc2lvbnMuCisrCisgMjAwOS0wOS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBVcGRhdGUgZm9yIG1vcmUgbW9kZXJuIGF1dG9jb25mLgorQEAgLTMwMCw2ICszMDksMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKHppcF9MSUJTKTogQ2hlY2sgZm9yIGxpYmx6bWEgdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLWZnbnU4OS1pbmxpbmU7IGFkZCBpdCB0byBXRVhUUkEgaWYgaXQgd29ya3MuCisrCisgMjAwOS0wNC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgKGV1X3ZlcnNpb24pOiBSb3VuZCBkb3duIGhlcmUsIG5vdCBpbiB2ZXJzaW9uLmggbWFjcm9zLgorQEAgLTMxMSw2ICszMjQsOCBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgX19idWlsdGluX3BvcGNvdW50LgorKworIAkqIGNvbmZpZ3VyZS5hYyAoemxpYiBjaGVjayk6IENoZWNrIGZvciBnemRpcmVjdCwgbmVlZCB6bGliID49IDEuMi4yLjMuCisgCisgCSogY29uZmlndXJlLmFjIChfX3RocmVhZCBjaGVjayk6IFVzZSBBQ19MSU5LX0lGRUxTRSwgaW4gY2FzZSBvZgorQEAgLTM5MSw2ICs0MDYsMTAgQEAKKyAJKiBjb25maWd1cmUuYWM6IEFkZCBkdW1teSBhdXRvbWFrZSBjb25kaXRpb25hbCB0byBnZXQgZGVwZW5kZW5jaWVzCisgCWZvciBub24tZ2VuZXJpYyBsaW5rZXIgcmlnaHQuICBTZWUgc3JjL01ha2VmaWxlLmFtLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbi4KKysKKyAyMDA1LTExLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKTogTmV3IHZhcmlhYmxlLgorQEAgLTQzOCw2ICs0NTcsMTcgQEAKKyAJKiBNYWtlZmlsZS5hbSAoYWxsX1NVQkRJUlMpOiBBZGQgbGliZHdmbC4KKyAJKiBjb25maWd1cmUuYWM6IFdyaXRlIGxpYmR3ZmwvTWFrZWZpbGUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWMgKFdFWFRSQSk6IENoZWNrIGZvciAtV2V4dHJhIGFuZCBzZXQgdGhpcyBzdWJzdGl0dXRpb24uCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RydWN0IHN0YXQgc3RfP3RpbSBtZW1iZXJzLgorKwkqIHNyYy9zdHJpcC5jIChwcm9jZXNzX2ZpbGUpOiBVc2Ugc3RfP3RpbWUgaWYgc3RfP3RpbSBhcmUgbm90IHRoZXJlLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGZ1dGltZXMgZnVuY3Rpb24uCisrCSogc3JjL3N0cmlwLmMgKGhhbmRsZV9lbGYpIFshIEhBVkVfRlVUSU1FU106IFVzZSB1dGltZXMgaW5zdGVhZC4KKysJKGhhbmRsZV9hcikgWyEgSEFWRV9GVVRJTUVTXTogTGlrZXdpc2UuCisrCisgMjAwNS0wNS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgW0FIX0JPVFRPTV0gKElOVERFQ0wsIF9JTlRERUNMKTogTmV3IG1hY3Jvcy4KK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9DaGFuZ2VMb2cgYi9iYWNrZW5kcy9DaGFuZ2VMb2cKK2luZGV4IGZlNjFkOWMuLjk1OTk2MjMgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9DaGFuZ2VMb2cKKysrKyBiL2JhY2tlbmRzL0NoYW5nZUxvZworQEAgLTQ5OCw2ICs0OTgsMTAgQEAKKyAJKiBwcGNfYXR0cnMuYyAocHBjX2NoZWNrX29iamVjdF9hdHRyaWJ1dGUpOiBIYW5kbGUgdGFnCisgCUdOVV9Qb3dlcl9BQklfU3RydWN0X1JldHVybi4KKyAKKysyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChsaWJlYmxfJS5zbyk6IFVzZSAkKExEX0FTX05FRURFRCkuCisrCisgMjAwOC0xMC0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogaTM4Nl9yZWxvYy5kZWY6IEZpeCBlbnRyaWVzIGZvciBUTFNfR09UREVTQywgVExTX0RFU0NfQ0FMTCwgYW5kCitAQCAtODI1LDYgKzgyOSwxMSBAQAorIAkqIHNwYXJjX2luaXQuYzogTGlrZXdpc2UuCisgCSogeDg2XzY0X2luaXQuYzogTGlrZXdpc2UuCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoTERfQVNfTkVFREVEKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShsaWJlYmxfJS5zbyBydWxlKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XbCwtLWFzLW5lZWRlZC4KKysKKyAyMDA1LTExLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHBwYzY0X3JlbG9jLmRlZjogUkVMMzAgLT4gQUREUjMwLgorQEAgLTg0Nyw2ICs4NTYsOSBAQAorIAkqIE1ha2VmaWxlLmFtICh1bmluc3RhbGwpOiBEb24ndCB0cnkgdG8gcmVtb3ZlICQocGtnaW5jbHVkZWRpcikuCisgCShDTEVBTkZJTEVTKTogQWRkIGxpYmVibF8kKG0pLnNvLgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIAkqIHBwY19yZWxvYy5kZWY6IFVwZGF0ZSBiaXRzIHBlciBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+LgorIAkqIHBwYzY0X3JlbG9jLmRlZjogTGlrZXdpc2UuCisgCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvTWFrZWZpbGUuYW0gYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQoraW5kZXggMjFkN2JkMi4uZmU5MjBjOSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL01ha2VmaWxlLmFtCisrKysgYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQorQEAgLTExOSw3ICsxMTksNyBAQCBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAkkKExJTkspIC1zaGFyZWQgLW8gJChAOi5tYXA9LnNvKSBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQ8ICQoY3B1XyQqKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQoQDouc289Lm1hcCkgXAorLQkJLVdsLC16LGRlZnMgLVdsLC0tYXMtbmVlZGVkICQobGliZWxmKSAkKGxpYmR3KQorKwkJLVdsLC16LGRlZnMgJChMRF9BU19ORUVERUQpICQobGliZWxmKSAkKGxpYmR3KQorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAorIGxpYmVibF9pMzg2LnNvOiAkKGNwdV9pMzg2KQorZGlmZiAtLWdpdCBhL2NvbmZpZy9DaGFuZ2VMb2cgYi9jb25maWcvQ2hhbmdlTG9nCitpbmRleCA2NGI1OGUxLi42M2IzZTkwIDEwMDY0NAorLS0tIGEvY29uZmlnL0NoYW5nZUxvZworKysrIGIvY29uZmlnL0NoYW5nZUxvZworQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAKKyAJKiBrbm93bi1kd2FyZi5hd2s6IFVzZSBnYXdrLgorIAorKzIwMTEtMTAtMDggIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisrCisrCSogZXUuYW0gW0JVSUxEX1dFUlJPUl06IENvbmRpdGlvbmFsaXplIC1XZXJyb3IgdXNlIG9uIHRoaXMuCisrCisgMjAxMC0wNy0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmdXRpbHMuc3BlYy5pbjogQWRkIG1vcmUgQnVpbGRSZXF1aXJlcy4KK2RpZmYgLS1naXQgYS9jb25maWcvZXUuYW0gYi9jb25maWcvZXUuYW0KK2luZGV4IDcwZDMyZGUuLjY1YWYwODUgMTAwNjQ0CistLS0gYS9jb25maWcvZXUuYW0KKysrKyBiL2NvbmZpZy9ldS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgQ29tbW9uIGF1dG9tYWtlIGZyYWdtZW50cyBmb3IgZWxmdXRpbHMgc3ViZGlyZWN0b3J5IG1ha2VmaWxlcy4KKyAjIworLSMjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBSZWQgSGF0LCBJbmMuCisrIyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEsIDIwMTQgUmVkIEhhdCwgSW5jLgorICMjCisgIyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisgIyMKK0BAIC0yOSw2ICsyOSw5IEBACisgIyMgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICMjCisgCisrV0VYVFJBID0gQFdFWFRSQUAKKytMRF9BU19ORUVERUQgPSBATERfQVNfTkVFREVEQAorKworIERFRlMgPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9DT05GSUdfSCAtRExPQ0FMRURJUj0nIiR7bG9jYWxlZGlyfSInCisgQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSS4uCisgCitAQCAtMzgsMTIgKzQxLDE3IEBAIFNUQUNLX1VTQUdFX1dBUk5JTkc9LVdzdGFjay11c2FnZT0yNjIxNDQKKyBlbHNlCisgU1RBQ0tfVVNBR0VfV0FSTklORz0KKyBlbmRpZgorLUFNX0NGTEFHUyA9IC1zdGQ9Z251OTkgLVdhbGwgLVdzaGFkb3cgLVdmb3JtYXQ9MiBcCisrQU1fQ0ZMQUdTID0gLXN0ZD1nbnU5OSAtV2FsbCAtV3NoYWRvdyBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Vycm9yKSwsLVdlcnJvcikgXAorLQkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAtV2V4dHJhKSBcCisrCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkICQoV0VYVFJBKSkgXAorKwkgICAgJChpZiAkKCQoKkYpX25vX1dmb3JtYXQpLC1Xbm8tZm9ybWF0LC1XZm9ybWF0PTIpIFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19Xc3RhY2tfdXNhZ2UpLCwkKFNUQUNLX1VTQUdFX1dBUk5JTkcpKSBcCisgCSAgICAkKCQoKkYpX0NGTEFHUykKKyAKKytpZiBCVUlMRF9XRVJST1IKKytBTV9DRkxBR1MgKz0gJChpZiAkKCQoKkYpX25vX1dlcnJvciksLC1XZXJyb3IpCisrZW5kaWYKKysKKyBDT01QSUxFLm9zID0gJChmaWx0ZXItb3V0IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSwgJChDT01QSUxFKSkKKyAKKyBERUZTLm9zID0gLURQSUMgLURTSEFSRUQKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJjOWZmNTYuLjI3YTFlZjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNiw2ICsxMDYsNTUgQEAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2M5OSIgIT0geHllc10sCisgICAgICAgQUNfTVNHX0VSUk9SKFtnY2Mgd2l0aCBHTlU5OSBzdXBwb3J0IHJlcXVpcmVkXSkpCisgCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtV2V4dHJhIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY193ZXh0cmEsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtV2V4dHJhIgorK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbdm9pZCBmb28gKHZvaWQpIHsgfV0pXSwKKysJCSAgYWNfY3ZfY2Nfd2V4dHJhPXllcywgYWNfY3ZfY2Nfd2V4dHJhPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBQ19TVUJTVChXRVhUUkEpCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2Nfd2V4dHJhIiA9IHh5ZXNdLCBbV0VYVFJBPS1XZXh0cmFdLCBbV0VYVFJBPS1XXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1mZ251ODktaW5saW5lIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY19nbnU4OV9pbmxpbmUsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtZmdudTg5LWlubGluZSAtV2Vycm9yIgorK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCisrdm9pZCBmb28gKHZvaWQpCisreworKyAgaW5saW5lIHZvaWQgYmFyICh2b2lkKSB7fQorKyAgYmFyICgpOworK30KKytleHRlcm4gaW5saW5lIHZvaWQgYmF6ICh2b2lkKSB7fQorK10pXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lPXllcywgYWNfY3ZfY2NfZ251ODlfaW5saW5lPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY19nbnU4OV9pbmxpbmUiID0geHllc10sCisrICAgICAgW1dFWFRSQT0iJHtXRVhUUkE6KyRXRVhUUkEgfS1mZ251ODktaW5saW5lIl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uXSwKKysJICAgICAgIGFjX2N2X2FzX25lZWRlZCwgW2RubAorK2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKytpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorK0VPRgorK2lmIEFDX1RSWV9DT01NQU5EKFske0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUworKwkJCSAgICAtZlBJQyAtc2hhcmVkIC1vIGNvbmZ0ZXN0LnNvIGNvbmZ0ZXN0LmMKKysJCQkgICAgLVdsLC0tYXMtbmVlZGVkIDE+JkFTX01FU1NBR0VfTE9HX0ZEXSkKKyt0aGVuCisrICBhY19jdl9hc19uZWVkZWQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfYXNfbmVlZGVkPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCpdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2FzX25lZWRlZCIgPSB4eWVzXSwKKysgICAgICBbTERfQVNfTkVFREVEPS1XbCwtLWFzLW5lZWRlZF0sIFtMRF9BU19ORUVERUQ9XSkKKytBQ19TVUJTVChMRF9BU19ORUVERUQpCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fcG9wY291bnRdLCBhY19jdl9wb3Bjb3VudCwgW2RubAorK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbZXhpdCAoX19idWlsdGluX3BvcGNvdW50ICgxMjcpKTtdXSldLAorKwkgICAgICAgYWNfY3ZfcG9wY291bnQ9eWVzLCBhY19jdl9wb3Bjb3VudD1ubyldKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3BvcGNvdW50IiA9IHh5ZXNdLAorKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9QT1BDT1VOVF0sIFsxXSwgW0hhdmUgX19idWlsdGluX3BvcGNvdW50Ll0pXSkKKysKKysKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fdGhyZWFkIHN1cHBvcnRdLCBhY19jdl90bHMsIFtkbmwKKyAjIFVzZSB0aGUgc2FtZSBmbGFncyB0aGF0IHdlIHVzZSBmb3Igb3VyIERTT3MsIHNvIHRoZSB0ZXN0IGlzIHJlcHJlc2VudGF0aXZlLgorICMgU29tZSBvbGQgY29tcGlsZXIvbGlua2VyL2xpYmMgY29tYmluYXRpb25zIGZhaWwgc29tZSB3YXlzIGFuZCBub3Qgb3RoZXJzLgorQEAgLTEyMiw3ICsxNzEsMTAgQEAgc3RhdGljIF9fdGhyZWFkIGludCBhOyBpbnQgZm9vIChpbnQgYikgeyByZXR1cm4gYSArIGI7IH1dXSwKKyBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfdGxzIiAhPSB4eWVzXSwKKy0gICAgICBBQ19NU0dfRVJST1IoW19fdGhyZWFkIHN1cHBvcnQgcmVxdWlyZWRdKSkKKysgICAgICBbQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwKKysJICAgICBbQUNfTVNHX0VSUk9SKFstLWVuYWJsZS10aHJlYWQtc2FmZXR5IHJlcXVpcmVzIF9fdGhyZWFkIHN1cHBvcnRdKV0sCisrCSAgICAgW0FDX0RFRklORShbX190aHJlYWRdLCBbLyogZW1wdHk6IG5vIG11bHRpLXRocmVhZCBzdXBwb3J0ICovXSwKKysJCQlbU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0Ll0pXSldKQorIAorIGRubCBUaGlzIHRlc3QgbXVzdCBjb21lIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uCisgZG5sIHRlc3RzLCBiZWNhdXNlIHRoZSBjaG9pY2Ugb2YgdGhlIGZpbGUgbW9kZWwgY2FuIChpbiBwcmluY2lwbGUpIGFmZmVjdAorQEAgLTIyNCw2ICsyNzYsMTEgQEAgQU1fQ09ORElUSU9OQUwoVVNFX1ZBTEdSSU5ELCB0ZXN0ICIkdXNlX3ZhbGdyaW5kIiA9IHllcykKKyBBTV9DT05ESVRJT05BTChCVUlMRF9TVEFUSUMsIFtkbmwKKyB0ZXN0ICIkdXNlX2dwcm9mIiA9IHllcyAtbyAiJHVzZV9nY292IiA9IHllc10pCisgCisrQUNfQVJHX0VOQUJMRShbd2Vycm9yXSwKKytBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXdlcnJvcl0sW2RvIG5vdCBidWlsZCB3aXRoIC1XZXJyb3JdKSwKKysJICAgICAgIFtlbmFibGVfd2Vycm9yPSRlbmFibGV2YWxdLCBbZW5hYmxlX3dlcnJvcj15ZXNdKQorK0FNX0NPTkRJVElPTkFMKEJVSUxEX1dFUlJPUiwgdGVzdCAiJGVuYWJsZV93ZXJyb3IiID0geWVzKQorKworIEFDX0FSR19FTkFCTEUoW3Rlc3RzLXJwYXRoXSwKKyBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdGVzdHMtcnBhdGhdLFtidWlsZCAkT1JJR0lOLXVzaW5nIHJwYXRoIGludG8gdGVzdHNdKSwKKyAJICAgICAgIFt0ZXN0c191c2VfcnBhdGg9JGVuYWJsZXZhbF0sIFt0ZXN0c191c2VfcnBhdGg9bm9dKQorQEAgLTM4OCw3ICs0NDUsNyBAQCBjYXNlICIkZXVfdmVyc2lvbiIgaW4KKyBlc2FjCisgCisgIyBSb3VuZCB1cCB0byB0aGUgbmV4dCByZWxlYXNlIEFQSSAoeC55KSB2ZXJzaW9uLgorLWV1X3ZlcnNpb249JCgoIChldV92ZXJzaW9uICsgOTk5KSAvIDEwMDAgKSkKKytldV92ZXJzaW9uPWBleHByIFwoICRldV92ZXJzaW9uICsgOTk5IFwpIC8gMTAwMGAKKyAKKyBkbmwgVW5pcXVlIElEIGZvciB0aGlzIGJ1aWxkLgorIE1PRFZFUlNJT049IkJ1aWxkIGZvciAke0xJQkVCTF9TVUJESVJ9ICR7ZXVfdmVyc2lvbn0gJHthY19jdl9idWlsZH0iCitkaWZmIC0tZ2l0IGEvbGliL0NoYW5nZUxvZyBiL2xpYi9DaGFuZ2VMb2cKK2luZGV4IGQwNGJmMTcuLjcyMGM5OGQgMTAwNjQ0CistLS0gYS9saWIvQ2hhbmdlTG9nCisrKysgYi9saWIvQ2hhbmdlTG9nCitAQCAtNzMsNiArNzMsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogZXUtY29uZmlnLmggWyEgSEFWRV9CVUlMVElOX1BPUENPVU5UXQorKwkoX19idWlsdGluX3BvcGNvdW50KTogTmV3IGlubGluZSBmdW5jdGlvbi4KKysKKyAJKiBldS1jb25maWcuaDogQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uLgorIAorIDIwMDktMDEtMTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTEyOSw2ICsxMzIsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZXVfYV9TT1VSQ0VTKTogQWRkIGl0LgorIAkqIHN5c3RlbS5oOiBEZWNsYXJlIGNyYzMyX2ZpbGUuCisgCisrMjAwNS0wMi0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA0LTMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbTogVXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMgZm9yIHhtYWxsb2MuYy4KK2RpZmYgLS1naXQgYS9saWIvZXUtY29uZmlnLmggYi9saWIvZXUtY29uZmlnLmgKK2luZGV4IDQwMGNkYzYuLjg3MmY2YmMgMTAwNjQ0CistLS0gYS9saWIvZXUtY29uZmlnLmgKKysrKyBiL2xpYi9ldS1jb25maWcuaAorQEAgLTE2Myw2ICsxNjMsMTYgQEAgYXNtICgiLnNlY3Rpb24gcHJlZGljdF9kYXRhLCBcImF3XCI7IC5wcmV2aW91c1xuIgorIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCBieSB0aGUgdGVzdHMgY29uZGl0aW9uYWxpemUgZm9yIHN0YW5kYWxvbmUgYnVpbGRpbmcuICAqLworICNkZWZpbmUgRUxGVVRJTFNfSEVBREVSKG5hbWUpIDxsaWIjI25hbWUuaD4KKyAKKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9QT1BDT1VOVAorKyMgZGVmaW5lIF9fYnVpbHRpbl9wb3Bjb3VudCBoYWttZW1fcG9wY291bnQKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytoYWttZW1fcG9wY291bnQgKHVuc2lnbmVkIGludCB4KQorK3sKKysgIC8qIEhBS01FTSAxNjkgKi8KKysgIHVuc2lnbmVkIGludCBuID0geCAtICgoeCA+PiAxKSAmIDAzMzMzMzMzMzMzMykgLSAoKHggPj4gMikgJiAwMTExMTExMTExMTEpOworKyAgcmV0dXJuICgobiArIChuID4+IDMpKSAmIDAzMDcwNzA3MDcwNykgJSA2MzsKKyt9CisrI2VuZGlmCS8qIEhBVkVfQlVJTFRJTl9QT1BDT1VOVCAqLworIAorICNpZmRlZiBTWU1CT0xfVkVSU0lPTklORworICMgZGVmaW5lIE9MRF9WRVJTSU9OKG5hbWUsIHZlcnNpb24pIFwKK2RpZmYgLS1naXQgYS9saWJhc20vQ2hhbmdlTG9nIGIvbGliYXNtL0NoYW5nZUxvZworaW5kZXggOWIyNWFmOS4uMzJiOWZkMCAxMDA2NDQKKy0tLSBhL2xpYmFzbS9DaGFuZ2VMb2cKKysrKyBiL2xpYmFzbS9DaGFuZ2VMb2cKK0BAIC04Nyw2ICs4NywxMSBAQAorIAkqIGFzbV9lcnJvci5jOiBBZGQgbmV3IGVycm9yIEFTTV9FX0lPRVJST1IuCisgCSogbGliYXNtUC5oOiBBZGQgQVNNX0VfSU9FUlJPUiBkZWZpbml0aW9uLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitkaWZmIC0tZ2l0IGEvbGliY3B1L0NoYW5nZUxvZyBiL2xpYmNwdS9DaGFuZ2VMb2cKK2luZGV4IGEyMGY0NDAuLjVlYTIzYjcgMTAwNjQ0CistLS0gYS9saWJjcHUvQ2hhbmdlTG9nCisrKysgYi9saWJjcHUvQ2hhbmdlTG9nCitAQCAtNTEsNiArNTEsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogaTM4Nl9kaXNhc20uYyAoaTM4Nl9kaXNhc20pOiBBZGQgYWJvcnQgYWZ0ZXIgYXNzZXJ0LWNvbnN0YW50IGZvciBvbGQKKysJY29tcGlsZXJzIHRoYXQgZG9uJ3QgcmVhbGl6ZSBpdCdzIG5vcmV0dXJuLgorKworIAkqIE1ha2VmaWxlLmFtIChpMzg2X3BhcnNlX0NGTEFHUyk6IFVzZSBxdW90ZXMgYXJvdW5kIGNvbW1hbmQKKyAJc3Vic3RpdHV0aW9uIHRoYXQgY2FuIHByb2R1Y2UgbGVhZGluZyB3aGl0ZXNwYWNlLgorIAorQEAgLTM4MCw2ICszODMsMTEgQEAKKyAJKiBkZWZzL2kzODYuZG9jOiBOZXcgZmlsZS4KKyAJKiBkZWZzL3g4Nl82NDogTmV3IGZpbGUuCisgCisrMjAwNS0wNC0wNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW5zdGVhZCBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorZGlmZiAtLWdpdCBhL2xpYmNwdS9pMzg2X2Rpc2FzbS5jIGIvbGliY3B1L2kzODZfZGlzYXNtLmMKK2luZGV4IDgzMjI0MWYuLmM3YTBkZjAgMTAwNjQ0CistLS0gYS9saWJjcHUvaTM4Nl9kaXNhc20uYworKysrIGIvbGliY3B1L2kzODZfZGlzYXNtLmMKK0BAIC04MjIsNiArODIyLDcgQEAgaTM4Nl9kaXNhc20gKGNvbnN0IHVpbnQ4X3QgKipzdGFydHAsIGNvbnN0IHVpbnQ4X3QgKmVuZCwgR0VsZl9BZGRyIGFkZHIsCisgCisgCQkJZGVmYXVsdDoKKyAJCQkgIGFzc2VydCAoISAiSU5WQUxJRCBub3QgaGFuZGxlZCIpOworKwkJCSAgYWJvcnQgKCk7CisgCQkJfQorIAkJICAgIH0KKyAJCSAgZWxzZQorZGlmZiAtLWdpdCBhL2xpYmR3L0NoYW5nZUxvZyBiL2xpYmR3L0NoYW5nZUxvZworaW5kZXggNDg3ZTM0YS4uMDZjNzM3YiAxMDA2NDQKKy0tLSBhL2xpYmR3L0NoYW5nZUxvZworKysrIGIvbGliZHcvQ2hhbmdlTG9nCitAQCAtODg5LDYgKzg4OSwxMCBAQAorIAorIAkqIE1ha2VmaWxlLmFtIChrbm93bi1kd2FyZi5oKTogUnVuIGdhd2sgb24gY29uZmlnL2tub3duLWR3YXJmLmF3ay4KKyAKKysyMDExLTA3LTIwICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisrCisrCSogZHdhcmZfYmVnaW5fZWxmLmM6IEFkZCBmYWxsYmFjayBmb3IgYmU2NHRvaCBpZiBub3QgZGVmaW5lZC4KKysKKyAyMDExLTA3LTE0ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCisgCSogbGliZHcuaCAoZHdhcmZfb2ZmZGllKTogRml4IGRvY3VtZW50YXRpb24gdG8gbWVudGlvbiAuZGVidWdfaW5mby4KK0BAIC0xMjQ4LDYgKzEyNTIsMTAgQEAKKyAKKyAJKiBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZS5jOiBJbnRlZ3JhdGUgRFdfQVRfc3BlY2lmaWNhdGlvbiB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJkdy5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZHdhcmZfZ2V0c2NvcGV2YXIuYzogVXNlIGR3YXJmX2RpZW5hbWUuCitAQCAtMjAxNiw2ICsyMDI0LDExIEBACisgCisgMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIGR3YXJmX2Zvcm1yZWZfZGllLmMgKGR3YXJmX2Zvcm1yZWZfZGllKTogQWRkIENVIGhlYWRlciBvZmZzZXQgdG8KKyAJZm9ybXJlZiBvZmZzZXQuCisgCitkaWZmIC0tZ2l0IGEvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMgYi9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworaW5kZXggNGUwZDU5MC4uYTY2MTZhMSAxMDA2NDQKKy0tLSBhL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jCisrKysgYi9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworQEAgLTQ3LDYgKzQ3LDE0IEBACisgI2lmIFVTRV9aTElCCisgIyBpbmNsdWRlIDxlbmRpYW4uaD4KKyAjIGRlZmluZSBjcmMzMgkJbG9zZXJfY3JjMzIKKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjICBpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrIyAgIGRlZmluZSBiZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgIGVsc2UKKysjICAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyAgZW5kaWYKKysjIGVuZGlmCisgIyBpbmNsdWRlIDx6bGliLmg+CisgIyB1bmRlZiBjcmMzMgorICNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmR3L2xpYmR3LmggYi9saWJkdy9saWJkdy5oCitpbmRleCA0NzNlMWEyLi41YTUxMWNkIDEwMDY0NAorLS0tIGEvbGliZHcvbGliZHcuaAorKysrIGIvbGliZHcvbGliZHcuaAorQEAgLTEwMDQsNyArMTAwNCw3IEBAIGV4dGVybiBEd2FyZl9PT00gZHdhcmZfbmV3X29vbV9oYW5kbGVyIChEd2FyZiAqZGJnLCBEd2FyZl9PT00gaGFuZGxlcik7CisgCisgCisgLyogSW5saW5lIG9wdGltaXphdGlvbnMuICAqLworLSNpZmRlZiBfX09QVElNSVpFX18KKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgLyogUmV0dXJuIGF0dHJpYnV0ZSBjb2RlIG9mIGdpdmVuIGF0dHJpYnV0ZS4gICovCisgX19saWJkd19leHRlcm5faW5saW5lIHVuc2lnbmVkIGludAorIGR3YXJmX3doYXRhdHRyIChEd2FyZl9BdHRyaWJ1dGUgKmF0dHIpCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9DaGFuZ2VMb2cgYi9saWJkd2ZsL0NoYW5nZUxvZworaW5kZXggYTUyNTNlMi4uNTlhYmZhYyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvQ2hhbmdlTG9nCisrKysgYi9saWJkd2ZsL0NoYW5nZUxvZworQEAgLTcwNCw2ICs3MDQsMjEgQEAKKyAJKGR3ZmxfbW9kdWxlX2FkZHJzeW0pIChpX3RvX3N5bWZpbGUpOiBOZXcgZnVuY3Rpb24uCisgCShkd2ZsX21vZHVsZV9hZGRyc3ltKSAoc2VhcmNoX3RhYmxlKTogVXNlIGl0LgorIAorKzIwMTMtMTEtMDkgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKysKKysJT2xkZXIgT1MgY29tcGF0aWJpbGl0eSBiaXRzLgorKwkqIGxpbnV4LWNvcmUtYXR0YWNoLmMgKGJlNjR0b2gsIGxlNjR0b2gsIGJlMzJ0b2gsIGxlMzJ0b2gpOiBQcm92aWRlCisrCWZhbGxiYWNrcyBpZiBub3QgZGVmaW5lZCBieSBzeXN0ZW0uCisrCisrMjAxMy0xMS0wOSAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorKworKwlIYW5kbGUgVC1zdG9wcGVkIGRldGFjaCBmb3Igb2xkIGtlcm5lbHMuCisrCSogbGludXgtcGlkLWF0dGFjaC5jIChzdHJ1Y3QgcGlkX2FyZyk6IE5ldyBmaWVsZCBzdG9wcGVkLgorKwkocHRyYWNlX2F0dGFjaCk6IE5ldyBwYXJhbWV0ZXIgc3RvcHBlZHAuICBTZXQgaXQgYXBwcm9wcmlhdGVseS4KKysJKHBpZF9zZXRfaW5pdGlhbF9yZWdpc3RlcnMpOiBQYXNzIHRoZSBuZXcgZmllbGQuCisrCShwaWRfdGhyZWFkX2RldGFjaCk6IEhhbmRsZSB0aGUgY2FzZSBvZiBTVE9QUEVEIGZvciBvbGQga2VybmVscy4KKysJKF9fbGliZHdmbF9hdHRhY2hfc3RhdGVfZm9yX3BpZCk6IEluaXRpYWxpemUgU1RPUFBFRC4KKysKKyAyMDEzLTExLTA3ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisgCSAgICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCitAQCAtMjQ2OSw2ICsyNDg0LDExIEBACisgCisgMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIE1ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6IEFkZCBsb2MyYy5jLgorIAorIAkqIHRlc3QyLmMgKG1haW4pOiBDaGVjayBzc2NhbmYgcmVzdWx0IHRvIHF1aWV0IHdhcm5pbmcuCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jIGIvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCitpbmRleCA1YTdiM2IzLi5kMDVhYzdlIDEwMDY0NAorLS0tIGEvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCisrKysgYi9saWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMKK0BAIC0yOSw2ICsyOSwzNSBAQAorICNpbmNsdWRlICJsaWJkd2ZsUC5oIgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlNjR0b2gKKysjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgYmUzMnRvaAorKyMgIGRlZmluZSBiZTMydG9oKHgpIGJzd2FwXzMyICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTMydG9oCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrIyBlbmRpZgorKyNlbHNlCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTY0dG9oCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGJlMzJ0b2gKKysjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGUzMnRvaAorKyMgIGRlZmluZSBsZTMydG9oKHgpIGJzd2FwXzMyICh4KQorKyMgZW5kaWYKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiLi4vbGliZHcvbWVtb3J5LWFjY2Vzcy5oIgorIAorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jIGIvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK2luZGV4IGFlNzE3MDIuLjA3NmIyYzMgMTAwNjQ0CistLS0gYS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworKysrIGIvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK0BAIC0yNTUsNiArMjU1LDExIEBAIHZvaWQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIF9fbGliZHdmbF9wdHJhY2VfZGV0YWNoIChwaWRfdCB0aWQsIGJvb2wgdGlkX3dhc19zdG9wcGVkKQorIHsKKysgIC8vIE9sZGVyIGtlcm5lbHMgKHRlc3RlZCBrZXJuZWwtMi42LjE4LTM0OC4xMi4xLmVsNS54ODZfNjQpIG5lZWQgc3BlY2lhbAorKyAgLy8gaGFuZGxpbmcgb2YgdGhlIGRldGFjaG1lbnQgdG8ga2VlcCB0aGUgcHJvY2VzcyBTdGF0ZTogVCAoc3RvcHBlZCkuCisrICBpZiAodGlkX3dhc19zdG9wcGVkKQorKyAgICBzeXNjYWxsIChfX05SX3RraWxsLCB0aWQsIFNJR1NUT1ApOworKworICAgLyogVGhpcyBoYW5kbGluZyBpcyBuZWVkZWQgb25seSBvbiBvbGRlciBMaW51eCBrZXJuZWxzIHN1Y2ggYXMKKyAgICAgIDIuNi4zMi0zNTguMjMuMi5lbDYucHBjNjQuICBMYXRlciBrZXJuZWxzIHN1Y2ggYXMKKyAgICAgIDMuMTEuNy0yMDAuZmMxOS54ODZfNjQgcmVtZW1iZXIgdGhlIFQgKHN0b3BwZWQpIHN0YXRlCitAQCAtMjYyLDYgKzI2NywxNSBAQCBfX2xpYmR3ZmxfcHRyYWNlX2RldGFjaCAocGlkX3QgdGlkLCBib29sIHRpZF93YXNfc3RvcHBlZCkKKyAgICAgIFBUUkFDRV9ERVRBQ0guICAqLworICAgcHRyYWNlIChQVFJBQ0VfREVUQUNILCB0aWQsIE5VTEwsCisgCSAgKHZvaWQgKikgKGludHB0cl90KSAodGlkX3dhc19zdG9wcGVkID8gU0lHU1RPUCA6IDApKTsKKysKKysgIGlmICh0aWRfd2FzX3N0b3BwZWQpCisrICAgIHsKKysgICAgICAvLyBXYWl0IHRpbGwgdGhlIFNJR1NUT1Agc2V0dGxlcyBkb3duLgorKyAgICAgIGludCBpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKysJaWYgKGxpbnV4X3Byb2NfcGlkX2lzX3N0b3BwZWQgKHRpZCkpCisrCSAgYnJlYWs7CisrICAgIH0KKyB9CisgCisgc3RhdGljIHZvaWQKK2RpZmYgLS1naXQgYS9saWJlYmwvQ2hhbmdlTG9nIGIvbGliZWJsL0NoYW5nZUxvZworaW5kZXggNTFhZTYwZi4uYWVlMDIxNyAxMDA2NDQKKy0tLSBhL2xpYmVibC9DaGFuZ2VMb2cKKysrKyBiL2xpYmVibC9DaGFuZ2VMb2cKK0BAIC03ODAsNiArNzgwLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmVibF8qX3NvX1NPVVJDRVMpOiBTZXQgdG8gJCgqX1NSQ1MpIHNvIGRlcGVuZGVuY3kKKyAJdHJhY2tpbmcgd29ya3MgcmlnaHQuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsaWJlYmxfeDg2XzY0Lm1hcDogQWRkIHg4Nl82NF9jb3JlX25vdGUuCitkaWZmIC0tZ2l0IGEvbGliZWxmL0NoYW5nZUxvZyBiL2xpYmVsZi9DaGFuZ2VMb2cKK2luZGV4IDMwMDE3Y2QuLjljYTljNzMgMTAwNjQ0CistLS0gYS9saWJlbGYvQ2hhbmdlTG9nCisrKysgYi9saWJlbGYvQ2hhbmdlTG9nCitAQCAtMzk4LDYgKzM5OCwxMSBAQAorIAorIAkqIGVsZi1rbm93bGVkZ2UuaCAoU0VDVElPTl9TVFJJUF9QKTogUmVtb3ZlIDwgU0hUX05VTSBjaGVjay4KKyAKKysyMDExLTAzLTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGdudWhhc2hfeGxhdGUuaCAoZWxmX2N2dF9nbnVoYXNoKTogQXZvaWQgcG9zdC1pbmNyZW1lbnQgaW4gYnN3YXBfMzIKKysJYXJndW1lbnQsIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb25zIGFyZSBidWdneSBtYWNyb3MuCisrCisgMjAxMS0wMi0yNiAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorIAkqIGVsZl9lbmQuYyAoZWxmX2VuZCk6IENhbGwgcndsb2NrX3VubG9jayBiZWZvcmUgcndsb2NrX2ZpbmkuCitAQCAtMTA3NSw2ICsxMDgwLDExIEBACisgCisgCSogZWxmLmg6IFVwZGF0ZSBmcm9tIGdsaWJjLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZfYmVnaW4uYyAocmVhZF9maWxlKSBbX01VREZMQVBdOiBEb24ndCB1c2UgbW1hcCBmb3Igbm93LgorZGlmZiAtLWdpdCBhL2xpYmVsZi9jb21tb24uaCBiL2xpYmVsZi9jb21tb24uaAoraW5kZXggNzQ0ZjFiYi4uMTg1ZWE1OSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9jb21tb24uaAorKysrIGIvbGliZWxmL2NvbW1vbi5oCitAQCAtMTM5LDcgKzEzOSw3IEBAIGxpYmVsZl9yZWxlYXNlX2FsbCAoRWxmICplbGYpCisgICAoVmFyKSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0BAIC0xNDgsNyArMTQ4LDcgQEAgbGliZWxmX3JlbGVhc2VfYWxsIChFbGYgKmVsZikKKyAgIChEc3QpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorZGlmZiAtLWdpdCBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmggYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitpbmRleCAwNGQ5Y2ExLi4zZTI1OTM2IDEwMDY0NAorLS0tIGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorKysrIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorQEAgLTEsNSArMSw1IEBACisgLyogQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHZlcnNpb25pbmcgaW5mb3JtYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNi4KKyAKK0BAIC02OSw3ICs2OSw5IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgZGVzdDMyID0gKEVsZjMyX1dvcmQgKikgJmRlc3Q2NFtiaXRtYXNrX3dvcmRzXTsKKyAgIHdoaWxlIChsZW4gPj0gNCkKKyAgICAgeworLSAgICAgICpkZXN0MzIrKyA9IGJzd2FwXzMyICgqc3JjMzIrKyk7CisrICAgICAgKmRlc3QzMiA9IGJzd2FwXzMyICgqc3JjMzIpOworKyAgICAgICsrZGVzdDMyOworKyAgICAgICsrc3JjMzI7CisgICAgICAgbGVuIC09IDQ7CisgICAgIH0KKyB9CitkaWZmIC0tZ2l0IGEvc3JjL0NoYW5nZUxvZyBiL3NyYy9DaGFuZ2VMb2cKK2luZGV4IDE1ZTZmYWUuLjc4NTM1YzggMTAwNjQ0CistLS0gYS9zcmMvQ2hhbmdlTG9nCisrKysgYi9zcmMvQ2hhbmdlTG9nCitAQCAtMTU5OCw4ICsxNTk4LDE2IEBACisgCSogcmVhZGVsZi5jIChhdHRyX2NhbGxiYWNrKTogVXNlIHByaW50X2Jsb2NrIG9ubHkgd2hlbiB3ZSBkb24ndCB1c2UKKyAJcHJpbnRfb3BzLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGQuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIHN0cmluZ3MuYyAocmVhZF9ibG9jayk6IENvbmRpdGlvbmFsaXplIHBvc2l4X2ZhZHZpc2UgdXNlCisrCW9uIFtQT1NJWF9GQURWX1NFUVVFTlRJQUxdLgorKwlGcm9tIFBldHIgU2FsaW5nZXIgPFBldHIuU2FsaW5nZXJAc2V6bmFtLmN6Pi4KKysKKyAJKiBhci5jIChkb19vcGVyX2V4dHJhY3QpOiBVc2UgcGF0aGNvbmYgaW5zdGVhZCBvZiBzdGF0ZnMuCisgCisgMjAwOS0wOC0wMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtMTc2Myw2ICsxNzcxLDggQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2ZyYW1lX3NlY3Rpb24pOiBVc2UgdCBpbnN0ZWFkIG9mIGogZm9ybWF0cworIAlmb3IgcHRyZGlmZl90IE9GRlNFVC4KKyAKKysJKiBhZGRyMmxpbmUuYyAoaGFuZGxlX2FkZHJlc3MpOiBVc2UgJWEgaW5zdGVhZCBvZiAlbSBmb3IgY29tcGF0aWJpbGl0eS4KKysKKyAyMDA5LTAxLTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX3Byb2dyYW1faGVhZGVyKTogRml4IHR5cG8gaW4gLmVoX2ZyYW1lX2hkciBzZWN0aW9uCitAQCAtMTk0Niw2ICsxOTU2LDExIEBACisgCXRoYXQgbWF0Y2hlcyBpdHMgUFRfTE9BRCdzIHBfZmxhZ3MgJn4gUEZfVy4gIE9uIHNwYXJjLCBQRl9YIHJlYWxseQorIAlpcyB2YWxpZCBpbiBSRUxSTy4KKyAKKysyMDA4LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoZHVtcF9hcmNoaXZlX2luZGV4KTogVHdlYWsgcG9ydGFiaWxpdHkgaGFjaworKwl0byBtYXRjaCBbX19HTlVDX18gPCA0XSB0b28uCisrCisgMjAwOC0wMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2F0dHJpYnV0ZXMpOiBBZGQgYSBjYXN0LgorQEAgLTIxOTcsNiArMjIxMiw4IEBACisgCisgCSogcmVhZGVsZi5jIChoZXhfZHVtcCk6IEZpeCByb3VuZGluZyBlcnJvciBpbiB3aGl0ZXNwYWNlIGNhbGN1bGF0aW9uLgorIAorKwkqIE1ha2VmaWxlLmFtIChyZWFkZWxmX25vX1dlcnJvcik6IE5ldyB2YXJpYWJsZS4KKysKKyAyMDA3LTEwLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIG1ha2UtZGVidWctYXJjaGl2ZS5pbjogTmV3IGZpbGUuCitAQCAtMjYzNiw2ICsyNjUzLDEwIEBACisgCSogZWxmbGludC5jICh2YWxpZF9lX21hY2hpbmUpOiBBZGQgRU1fQUxQSEEuCisgCVJlcG9ydGVkIGJ5IENocmlzdGlhbiBBaWNoaW5nZXIgPEdyZWVrMEBnbXgubmV0Pi4KKyAKKysJKiBzdHJpbmdzLmMgKG1hcF9maWxlKTogRGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTCB0bworKwlNQURWX1NFUVVFTlRJQUwgaWYgdW5kZWZpbmVkLiAgCURvbid0IGNhbGwgcG9zaXhfbWFkdmlzZQorKwlpZiBuZWl0aGVyIGlzIGRlZmluZWQuCisrCisgMjAwNi0wOC0wOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19keW5hbWljKTogRG9uJ3QgcmVxdWlyZSBEVF9IQVNIIGZvciBEVF9TWU1UQUIuCitAQCAtMjcxMiw2ICsyNzMzLDEwIEBACisgCSogTWFrZWZpbGUuYW06IEFkZCBoYWNrcyB0byBjcmVhdGUgZGVwZW5kZW5jeSBmaWxlcyBmb3Igbm9uLWdlbmVyaWMKKyAJbGlua2VyLgorIAorKzIwMDYtMDQtMDUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogc3RyaW5ncy5jIChNQVBfUE9QVUxBVEUpOiBEZWZpbmUgdG8gMCBpZiB1bmRlZmluZWQuCisrCisgMjAwNi0wNi0xMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGRnZW5lcmljLmMgKGxkX2dlbmVyaWNfZ2VuZXJhdGVfc2VjdGlvbnMpOiBEb24ndCBjcmVhdGUgLmludGVycAorQEAgLTMwNjAsNiArMzA4NSwxMSBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbG9jX3NlY3Rpb24pOiBGaXggaW5kZW50YXRpb24gZm9yIGxhcmdlcgorIAlhZGRyZXNzIHNpemUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbGluZV9zZWN0aW9uKTogUHJpbnQgc2VjdGlvbiBvZmZzZXQgb2YgZWFjaAorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggZGJhYzNlYi4uOTAyOGFhMSAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtOTAsNiArOTAsMTEgQEAgZW5kaWYKKyBsZGdlbmVyaWNfbm9fV3VudXNlZCA9IHllcworIGxkZ2VuZXJpY19ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKKyAKKysjIEJ1Z2d5IG9sZCBjb21waWxlcnMgb3IgbGliYyBoZWFkZXJzLgorK3JlYWRlbGZfbm9fV2Vycm9yID0geWVzCisrc3RyaW5nc19ub19XZXJyb3IgPSB5ZXMKKythZGRyMmxpbmVfbm9fV2Zvcm1hdCA9IHllcworKworICMgQmFkLCBiYWQgc3RhY2sgdXNhZ2UuLi4KKyByZWFkZWxmX25vX1dzdGFja191c2FnZSA9IHllcworIG5tX25vX1dzdGFja191c2FnZSA9IHllcworZGlmZiAtLWdpdCBhL3NyYy9hZGRyMmxpbmUuYyBiL3NyYy9hZGRyMmxpbmUuYworaW5kZXggMGNlODU0Zi4uZDJkMGM4YyAxMDA2NDQKKy0tLSBhL3NyYy9hZGRyMmxpbmUuYworKysrIGIvc3JjL2FkZHIybGluZS5jCitAQCAtNjIyLDEwICs2MjIsMTAgQEAgaGFuZGxlX2FkZHJlc3MgKGNvbnN0IGNoYXIgKnN0cmluZywgRHdmbCAqZHdmbCkKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL2ZpbmR0ZXh0cmVsLmMgYi9zcmMvZmluZHRleHRyZWwuYworaW5kZXggMjY0YTA2Yi4uZDdkZTIwMiAxMDA2NDQKKy0tLSBhL3NyYy9maW5kdGV4dHJlbC5jCisrKysgYi9zcmMvZmluZHRleHRyZWwuYworQEAgLTUwMiw3ICs1MDIsMTEgQEAgcHRyY29tcGFyZSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQorIAorIAorIHN0YXRpYyB2b2lkCistY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbbnNlZ21lbnRzXSwKKytjaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1sKKysjaWYgX19HTlVDX18gPj0gNAorKwkJCQkJCSAgICAgIG5zZWdtZW50cworKyNlbmRpZgorKwkgICBdLAorIAkgICBHRWxmX0FkZHIgYWRkciwgRWxmICplbGYsIEVsZl9TY24gKnN5bXNjbiwgRHdhcmYgKmR3LAorIAkgICBjb25zdCBjaGFyICpmbmFtZSwgYm9vbCBtb3JlX3RoYW5fb25lLCB2b2lkICoqa25vd25zcmNzKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvbGQuaCBiL3NyYy9sZC5oCitpbmRleCAyOWY0MDMxLi44Njk1YzMxIDEwMDY0NAorLS0tIGEvc3JjL2xkLmgKKysrKyBiL3NyYy9sZC5oCitAQCAtMTExNCw2ICsxMTE0LDcgQEAgZXh0ZXJuIGJvb2wgZHluYW1pY2FsbHlfbGlua2VkX3AgKHZvaWQpOworIAorIC8qIENoZWNrZWQgd2hldGhlciB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBmcm9tIGEgRFNPLiAgKi8KKyBleHRlcm4gYm9vbCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpOworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorICNlbmRpZgorQEAgLTExMzEsNSArMTEzMiw2IEBAIGxpbmtlZF9mcm9tX2Rzb19wIChzdHJ1Y3Qgc2NuaW5mbyAqc2NuaW5mbywgc2l6ZV90IHN5bWlkeCkKKyAKKyAgIHJldHVybiBzeW0tPmRlZmluZWQgJiYgc3ltLT5pbl9kc287CisgfQorKyNlbmRpZgkvKiBPcHRpbWl6aW5nIGFuZCBub3QgR0NDIDQuMi4gICovCisgCisgI2VuZGlmCS8qIGxkLmggKi8KK2RpZmYgLS1naXQgYS9zcmMvcmVhZGVsZi5jIGIvc3JjL3JlYWRlbGYuYworaW5kZXggYjRjYjNhOC4uNjA2ZDIyMCAxMDA2NDQKKy0tLSBhL3NyYy9yZWFkZWxmLmMKKysrKyBiL3NyYy9yZWFkZWxmLmMKK0BAIC00MzY0LDEwICs0MzY0LDEyIEBAIGxpc3RwdHJfYmFzZSAoc3RydWN0IGxpc3RwdHIgKnApCisgICByZXR1cm4gYmFzZTsKKyB9CisgCisrc3RhdGljIGNvbnN0IGNoYXIgKmxpc3RwdHJfbmFtZTsKKysKKyBzdGF0aWMgaW50CistY29tcGFyZV9saXN0cHRyIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpCisrY29tcGFyZV9saXN0cHRyIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorIHsKKy0gIGNvbnN0IGNoYXIgKm5hbWUgPSBhcmc7CisrICBjb25zdCBjaGFyICpjb25zdCBuYW1lID0gbGlzdHB0cl9uYW1lOworICAgc3RydWN0IGxpc3RwdHIgKnAxID0gKHZvaWQgKikgYTsKKyAgIHN0cnVjdCBsaXN0cHRyICpwMiA9ICh2b2lkICopIGI7CisgCitAQCAtNDQ2Myw4ICs0NDY1LDExIEBAIHN0YXRpYyB2b2lkCisgc29ydF9saXN0cHRyIChzdHJ1Y3QgbGlzdHB0cl90YWJsZSAqdGFibGUsIGNvbnN0IGNoYXIgKm5hbWUpCisgeworICAgaWYgKHRhYmxlLT5uID4gMCkKKy0gICAgcXNvcnRfciAodGFibGUtPnRhYmxlLCB0YWJsZS0+biwgc2l6ZW9mIHRhYmxlLT50YWJsZVswXSwKKy0JICAgICAmY29tcGFyZV9saXN0cHRyLCAodm9pZCAqKSBuYW1lKTsKKysgICAgeworKyAgICAgIGxpc3RwdHJfbmFtZSA9IG5hbWU7CisrICAgICAgcXNvcnQgKHRhYmxlLT50YWJsZSwgdGFibGUtPm4sIHNpemVvZiB0YWJsZS0+dGFibGVbMF0sCisrCSAgICAgJmNvbXBhcmVfbGlzdHB0cik7CisrICAgIH0KKyB9CisgCisgc3RhdGljIGJvb2wKK0BAIC05NTYxLDcgKzk1NjYsNyBAQCBkdW1wX2FyY2hpdmVfaW5kZXggKEVsZiAqZWxmLCBjb25zdCBjaGFyICpmbmFtZSkKKyAJICBpZiAodW5saWtlbHkgKGVsZl9yYW5kIChlbGYsIGFzX29mZikgPT0gMCkKKyAJICAgICAgfHwgdW5saWtlbHkgKChzdWJlbGYgPSBlbGZfYmVnaW4gKC0xLCBFTEZfQ19SRUFEX01NQVAsIGVsZikpCisgCQkJICAgPT0gTlVMTCkpCistI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpCisrI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpIHx8IF9fR05VQ19fIDwgNAorIAkgICAgd2hpbGUgKDEpCisgI2VuZGlmCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCitkaWZmIC0tZ2l0IGEvc3JjL3N0cmluZ3MuYyBiL3NyYy9zdHJpbmdzLmMKK2luZGV4IGIyYmNlN2IuLmZlMGFiNmMgMTAwNjQ0CistLS0gYS9zcmMvc3RyaW5ncy5jCisrKysgYi9zcmMvc3RyaW5ncy5jCitAQCAtNDMsNiArNDMsMTAgQEAKKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmbmRlZiBNQVBfUE9QVUxBVEUKKysjIGRlZmluZSBNQVBfUE9QVUxBVEUgMAorKyNlbmRpZgorKworIAorIC8qIFByb3RvdHlwZXMgb2YgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgaW50IHJlYWRfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIG9mZjY0X3QgZmRsZW4pOworQEAgLTQ4OSw4ICs0OTMsMTMgQEAgbWFwX2ZpbGUgKGludCBmZCwgb2ZmNjRfdCBzdGFydF9vZmYsIG9mZjY0X3QgZmRsZW4sIHNpemVfdCAqbWFwX3NpemVwKQorIAkJICAgIGZkLCBzdGFydF9vZmYpOworICAgICAgIGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkKKyAJeworKyNpZiAhZGVmaW5lZCBQT1NJWF9NQURWX1NFUVVFTlRJQUwgJiYgZGVmaW5lZCBNQURWX1NFUVVFTlRJQUwKKysjIGRlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgTUFEVl9TRVFVRU5USUFMCisrI2VuZGlmCisrI2lmZGVmIFBPU0lYX01BRFZfU0VRVUVOVElBTAorIAkgIC8qIFdlIHdpbGwgZ28gdGhyb3VnaCB0aGUgbWFwcGluZyBzZXF1ZW50aWFsbHkuICAqLworIAkgICh2b2lkKSBwb3NpeF9tYWR2aXNlIChtZW0sIG1hcF9zaXplLCBQT1NJWF9NQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorIAkgIGJyZWFrOworIAl9CisgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9NRU0pCitAQCAtNTgxLDkgKzU5MCwxMSBAQCByZWFkX2Jsb2NrIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZuYW1lLCBvZmY2NF90IGZkbGVuLCBvZmY2NF90IGZyb20sIG9mZjY0X3QgdG8pCisgICAgICAgZWxmbWFwX29mZiA9IGZyb20gJiB+KHBzIC0gMSk7CisgICAgICAgZWxmbWFwX2Jhc2UgPSBlbGZtYXAgPSBtYXBfZmlsZSAoZmQsIGVsZm1hcF9vZmYsIGZkbGVuLCAmZWxmbWFwX3NpemUpOworIAorKyNpZmRlZiBQT1NJWF9GQURWX1NFUVVFTlRJQUwKKyAgICAgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKKyAJLyogTGV0IHRoZSBrZXJuZWwga25vdyB3ZSBhcmUgZ29pbmcgdG8gcmVhZCBldmVyeXRoaW5nIGluIHNlcXVlbmNlLiAgKi8KKyAJKHZvaWQpIHBvc2l4X2ZhZHZpc2UgKGZkLCAwLCAwLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorICAgICB9CisgCisgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKK2RpZmYgLS1naXQgYS9zcmMvc3RyaXAuYyBiL3NyYy9zdHJpcC5jCitpbmRleCA1ZTY5MzM0Li44YmQxNzkwIDEwMDY0NAorLS0tIGEvc3JjL3N0cmlwLmMKKysrKyBiL3NyYy9zdHJpcC5jCitAQCAtNDQsNiArNDQsMTIgQEAKKyAjaW5jbHVkZSA8bGliZWJsLmg+CisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZmRlZiBIQVZFX0ZVVElNRVMKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSBmdXRpbWVzIChmZCwgdHZwKQorKyNlbHNlCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgdXRpbWVzIChmbmFtZSwgdHZwKQorKyNlbmRpZgorKworIHR5cGVkZWYgdWludDhfdCBHRWxmX0J5dGU7CisgCisgLyogTmFtZSBhbmQgdmVyc2lvbiBvZiBwcm9ncmFtLiAgKi8KK2RpZmYgLS1naXQgYS90ZXN0cy9DaGFuZ2VMb2cgYi90ZXN0cy9DaGFuZ2VMb2cKK2luZGV4IDE5ODc4YWMuLjY4MTUwMjggMTAwNjQ0CistLS0gYS90ZXN0cy9DaGFuZ2VMb2cKKysrKyBiL3Rlc3RzL0NoYW5nZUxvZworQEAgLTYwOSw2ICs2MDksMTMgQEAKKyAKKyAyMDEzLTEyLTAyICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisgCisrCUhhbmRsZSBULXN0b3BwZWQgZGV0YWNoIGZvciBvbGQga2VybmVscy4KKysJKiBiYWNrdHJhY2UuYzogSW5jbHVkZSBzeXMvc3lzY2FsbC5oLgorKwkobGludXhfcHJvY19waWRfaXNfc3RvcHBlZCk6IE5ldyBmdW5jdGlvbi4KKysJKHB0cmFjZV9kZXRhY2hfc3RvcHBlZCk6IEhhbmRsZSBvbGQga2VybmVscy4KKysKKysyMDEzLTEyLTAyICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisrCisgCSogTWFrZWZpbGUuYW0gKGNoZWNrX1BST0dSQU1TKTogQWRkIGJhY2t0cmFjZSwgYmFja3RyYWNlLWNoaWxkLAorIAliYWNrdHJhY2UtZGF0YSBhbmQgYmFja3RyYWNlLWR3YXJmLgorIAkoQlVJTFRfU09VUkNFUywgY2xlYW4tbG9jYWwsIGJhY2t0cmFjZS1jaGlsZC1iaWFyY2gpOiBOZXcuCitAQCAtMTQ3Myw2ICsxNDgwLDggQEAKKyAKKyAyMDA4LTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGxpbmUyYWRkci5jIChtYWluKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorKworIAkqIHRlc3RmaWxlNDUuUy5iejI6IEFkZCB0ZXN0cyBmb3IgY2x0cSwgY3F0by4KKyAJKiB0ZXN0ZmlsZTQ1LmV4cGVjdC5iejI6IEFkanVzdC4KKyAKK0BAIC0yMTgxLDYgKzIxOTAsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaC4KKyAJKEVYVFJBX0RJU1QpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaCBhbmQgdGVzdGZpbGUxOC5iejIuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTI0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBnZXQtZmlsZXMuYyAobWFpbik6IFVzZSBjb3JyZWN0IGZvcm1hdCBzcGVjaWZpZXIuCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNDI1ZjhjZC4uNjk3NjBhNCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTM4Miw2ICszODIsNyBAQCBnZXRfbGluZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBnZXRfZmlsZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBnZXRfYXJhbmdlc19MREFERCA9ICQobGliZHcpICQobGliZWxmKQorIGFsbGZjdHNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKytsaW5lMmFkZHJfbm9fV2Zvcm1hdCA9IHllcworIGxpbmUyYWRkcl9MREFERCA9ICQobGliZHcpICQoYXJncF9MREFERCkKKyBhZGRyc2NvcGVzX0xEQUREID0gJChsaWJkdykgJChhcmdwX0xEQUREKQorIGZ1bmNzY29wZXNfTERBREQgPSAkKGxpYmR3KSAkKGFyZ3BfTERBREQpCitkaWZmIC0tZ2l0IGEvdGVzdHMvYmFja3RyYWNlLmMgYi90ZXN0cy9iYWNrdHJhY2UuYworaW5kZXggYWJkNTZhYi4uNmE3YzY2MSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JhY2t0cmFjZS5jCisrKysgYi90ZXN0cy9iYWNrdHJhY2UuYworQEAgLTM2LDYgKzM2LDcgQEAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKKyAKKyAjaWZuZGVmIF9fbGludXhfXworZGlmZiAtLWdpdCBhL3Rlc3RzL2xpbmUyYWRkci5jIGIvdGVzdHMvbGluZTJhZGRyLmMKK2luZGV4IGUwZDY1ZDMuLjdjMTcxYjkgMTAwNjQ0CistLS0gYS90ZXN0cy9saW5lMmFkZHIuYworKysrIGIvdGVzdHMvbGluZTJhZGRyLmMKK0BAIC0xMjQsNyArMTI0LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg1MTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tOiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitTdWJqZWN0OiBVc2UgJW1bIGluc3RlYWQgb2YgJWFbIGluIHNjYW5mKCkKKworJWEgd2FzIGEgZ251IGV4dGVudGlvbiwgYnV0IEM5OSBtYWRlIHRoaXMgYSBmbG9hdC4gIFNvIGl0IGdvdAorY2hhbmdlZCB0byAlbSAoc3VwcG9ydGVkIGJ5IGdsaWJjIDIuNyksIGJ1dCAlYVsgYW5kICVhcyBhcmUKK3N0aWxsIHN1cHBvcnRlZCBieSBnbGliYy4gIFRoZSBwb3J0YWJpbGl0eSBicmFuY2ggY2hhbmdlZCB0aGlzCitmcm9tICVtIHRvICVhIGFnYWluIHNpbmNlIHRoYXQncyBzdXBwb3J0ZWQgYnkgbW9yZSB2ZXJzaW9ucyBvZgorZ2xpYmMuICBIb3dldmVyIGdjYyBnaXZlcyBhIHdhcm5pbmcgYWJvdXQgdGhpcyB1c2luZyAtV2Zvcm1hdAorYW5kIHdlIGhhdmUgYSBuZXcgZW5vdWdoIGxpYmMgdG8gdXNlICVtLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTMvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy9zcmMvYWRkcjJsaW5lLmMJMjAxMi0wMi0yNCAyMjoyOTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1My9zcmMvYWRkcjJsaW5lLmMJMjAxMi0wMi0yNCAyMjoyOTo1Mi4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NTUsMTAgKzQ1NSwxMCBAQAorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK0luZGV4OiBlbGZ1dGlscy0wLjE1My90ZXN0cy9saW5lMmFkZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvdGVzdHMvbGluZTJhZGRyLmMJMjAxMi0wMi0yNCAyMjoyOTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1My90ZXN0cy9saW5lMmFkZHIuYwkyMDEyLTAyLTI0IDIyOjI5OjUyLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMiw3ICsxMzIsNyBAQAorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCkBAIC0wLDAgKzEsMzkgQEAKK09uIG1hbnkgYXJjaGl0ZWN0dXJlcyB0aGlzIHRlc3QgZmFpbHMgYmVjYXVzZSBiaW5hcmllcy9saWJzIHByb2R1Y2VkIGJ5CitiaW51dGlscyBkb24ndCBwYXNzIGVsZmxpbnQuIEhvd2V2ZXIgZWxmdXRpbHMgc2hvdWxkbid0IEZUQkZTIGJlY2F1c2Ugb2YgdGhpcy4KKworU28gd2UgcnVuIHRoZSB0ZXN0cyBvbiBhbGwgYXJjaHMgdG8gc2VlIHdoYXQgYnJlYWtzLCBidXQgaWYgaXQgYnJlYWtzIHdlIGlnbm9yZQordGhlIHJlc3VsdCAoZXhpdGNvZGUgNzcgbWVhbnM6IHRoaXMgdGVzdCB3YXMgc2tpcHBlZCkuCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1Ni90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTYub3JpZy90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTYvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDEzLTA3LTI4IDE0OjM2OjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTE4LDQgKzE4LDQgQEAKKyAKKyAuICRzcmNkaXIvdGVzdC1zdWJyLnNoCisgCistdGVzdHJ1bl9vbl9zZWxmICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZAorK3Rlc3RydW5fb25fc2VsZl9za2lwICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZAorSW5kZXg6IGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3Rlc3Qtc3Vici5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU2Lm9yaWcvdGVzdHMvdGVzdC1zdWJyLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTYvdGVzdHMvdGVzdC1zdWJyLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTQ5LDMgKzE0OSwxOCBAQAorICAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAorICAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKKyB9CisrCisrIyBTYW1lIGFzIHRlc3RydW5fb25fc2VsZigpLCBidXQgc2tpcCBvbiBmYWlsdXJlLgorK3Rlc3RydW5fb25fc2VsZl9za2lwKCkKKyt7CisrICBleGl0X3N0YXR1cz0wCisrCisrICBmb3IgZmlsZSBpbiAkc2VsZl90ZXN0X2ZpbGVzOyBkbworKyAgICAgIHRlc3RydW4gJCogJGZpbGUgXAorKwkgIHx8IHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJCogJGZpbGUiOyBleGl0X3N0YXR1cz03NzsgfQorKyAgZG9uZQorKworKyAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAorKyAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKKyt9CisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTUzM2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApAQCAtMCwwICsxLDEwNiBAQAorRnJvbSAzZGFlYzJkZDExYTA0OTU1Zjk1ZThmNjVhNDg4MjAxMDNkODRkYmVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBUaHUsIDkgQXByIDIwMTUgMTI6MTI6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gdWNsaWJjIHN1cHBvcnQgZm9yIGVsZnV0aWxzIDAuMTYxCisKK29uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCitzbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKK3RoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQorZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAorCitXZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAordGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW0+CitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1tKdW5saW5nIFpoZW5nOgorIC0gYWRqdXN0IGNvbnRleHQKK10KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICB8IDggKysrKysrKysKKyBsaWJjcHUvTWFrZWZpbGUuYW0gfCA0ICsrKysKKyBsaWJkdy9NYWtlZmlsZS5hbSAgfCA3ICsrKysrKy0KKyBsaWJlbGYvTWFrZWZpbGUuYW0gfCA1ICsrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGExYWQ2ZGIuLjgxZmMzM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDYgKzcwLDE0IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisgCisgQUhfVEVNUExBVEUoW1VTRV9MT0NLU10sIFtEZWZpbmVkIGlmIGxpYnJhcmllcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUuXSkKKyAKKytBQ19BUkdfRU5BQkxFKFt1Y2xpYmNdLAorK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAorK3VzZV91Y2xpYmM9eWVzLCB1c2VfdWNsaWJjPW5vKQorK0FNX0NPTkRJVElPTkFMKFVTRV9VQ0xJQkMsIHRlc3QgIiR1c2VfdWNsaWJjIiA9IHllcykKKytBU19JRihbdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzXSwgW0FDX0RFRklORShVU0VfVUNMSUJDKV0pCisrCisrQUhfVEVNUExBVEUoW1VTRV9VQ0xJQkNdLCBbRGVmaW5lZCBpZiB1Y2xpYmMgbGlicmFyaWVzIGFyZSB1c2VkLl0pCisrCisgQUNfUFJPR19DQworIEFDX1BST0dfUkFOTElCCisgQUNfUFJPR19ZQUNDCitkaWZmIC0tZ2l0IGEvbGliY3B1L01ha2VmaWxlLmFtIGIvbGliY3B1L01ha2VmaWxlLmFtCitpbmRleCAzYmVjY2YzLi45YmE2YzA0IDEwMDY0NAorLS0tIGEvbGliY3B1L01ha2VmaWxlLmFtCisrKysgYi9saWJjcHUvTWFrZWZpbGUuYW0KK0BAIC04MCw2ICs4MCwxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzODYubW5lbW9uaWNzYCIKKyBpMzg2X2xleC5vOiBpMzg2X3BhcnNlLmgKKyBpMzg2X2dlbmRpc19MREFERCA9ICQobGliZXUpIC1sbQorIAorK2lmIFVTRV9VQ0xJQkMKKytpMzg2X2dlbmRpc19MREFERCArPSAtbHVhcmdwIC1saW50bAorK2VuZGlmCisrCisgaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOworIAorIEVYVFJBX0RJU1QgPSBkZWZzL2kzODYKK2RpZmYgLS1naXQgYS9saWJkdy9NYWtlZmlsZS5hbSBiL2xpYmR3L01ha2VmaWxlLmFtCitpbmRleCA4ODdkYTZiLi5kMzFiNDI4IDEwMDY0NAorLS0tIGEvbGliZHcvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmR3L01ha2VmaWxlLmFtCitAQCAtMTAyLDYgKzEwMiwxMSBAQCBlbmRpZgorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBsaWJkd19zb19TT1VSQ0VTID0KKyBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSAuLi9saWJkd2VsZi9saWJkd2VsZl9waWMuYSBcCisgCSAgLi4vbGliZHdmbC9saWJkd2ZsX3BpYy5hIC4uL2xpYmVibC9saWJlYmwuYSBcCitAQCAtMTEyLDcgKzExNyw3IEBAIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKKyAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKKy0JCS1sZGwgJCh6aXBfTElCUykKKysJCS1sZGwgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCisgCUAkKHRleHRyZWxfY2hlY2spCisgCWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCisgCitkaWZmIC0tZ2l0IGEvbGliZWxmL01ha2VmaWxlLmFtIGIvbGliZWxmL01ha2VmaWxlLmFtCitpbmRleCBhZmNiMmFhLi4wMjgzNmExIDEwMDY0NAorLS0tIGEvbGliZWxmL01ha2VmaWxlLmFtCisrKysgYi9saWJlbGYvTWFrZWZpbGUuYW0KK0BAIC05Myw3ICs5MywxMiBAQCBsaWJlbGZfYV9TT1VSQ0VTID0gZWxmX3ZlcnNpb24uYyBlbGZfaGFzaC5jIGVsZl9lcnJvci5jIGVsZl9maWxsLmMgXAorIGxpYmVsZl9waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJlbGZfcGljX2FfT0JKRUNUUyA9ICQobGliZWxmX2FfU09VUkNFUzouYz0ub3MpCisgCisrCisgbGliZWxmX3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmVsZl9zb19MRExJQlMgKz0gLWxpbnRsIC1sdWFyZ3AKKytlbmRpZgorKworIGlmIFVTRV9MT0NLUworIGxpYmVsZl9zb19MRExJQlMgKz0gLWxwdGhyZWFkCisgZW5kaWYKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjFlODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGaXggZWxmX2N2dF9ndW5oYXNoIGlmIGRlc3QgYW5kIHNyYyBhcmUgc2FtZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSAnZGVzdCcgYW5kICdzcmMnIGNhbiBiZSBzYW1lLCB3ZSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlIG9mIHNyYzMyWzJdCitiZWZvcmUgc3dhcGluZyBpdC4KKworU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxCYW9TaGFuLlBhbmdAd2luZHJpdmVyLmNvbT4KK2RpZmYgLS1naXQgYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAoraW5kZXggNmZhZjExMy4uMDRkOWNhMSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKKysrKyBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK0BAIC00MCw2ICs0MCw3IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgICAgd29yZHMuICBXZSBtdXN0IGRldGFuZ2xlIHRoZW0gaGVyZS4gICAqLworICAgRWxmMzJfV29yZCAqZGVzdDMyID0gZGVzdDsKKyAgIGNvbnN0IEVsZjMyX1dvcmQgKnNyYzMyID0gc3JjOworKyAgRWxmMzJfV29yZCBzYXZlX3NyYzMyXzIgPSBzcmMzMlsyXTsgLy8gZGVzdCBjb3VsZCBiZSBlcXVhbCB0byBzcmMKKyAKKyAgIC8qIEZpcnN0IGZvdXIgY29udHJvbCB3b3JkcywgMzIgYml0cy4gICovCisgICBmb3IgKHVuc2lnbmVkIGludCBjbnQgPSAwOyBjbnQgPCA0OyArK2NudCkKK0BAIC01MCw3ICs1MSw3IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgICAgIGxlbiAtPSA0OworICAgICB9CisgCistICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzcmMzMlsyXSA6IGRlc3QzMlsyXTsKKysgIEVsZjMyX1dvcmQgYml0bWFza193b3JkcyA9IGVuY29kZSA/IHNhdmVfc3JjMzJfMiA6IGRlc3QzMlsyXTsKKyAKKyAgIC8qIE5vdyB0aGUgNjQgYml0IHdvcmRzLiAgKi8KKyAgIEVsZjY0X1h3b3JkICpkZXN0NjQgPSAoRWxmNjRfWHdvcmQgKikgJmRlc3QzMls0XTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2QzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGxpbmsgdG8gdGhlIGRlcGVuZGVuY2llcyBvZiBsaWJkdyBleHBsaWNpdCwgYXMgcmVjZW50CisjIGxkIG5vIGxvbmdlciBpbXBsaWNpdGx5IGxpbmtzIHRoZW0uIFNlZQorIyBodHRwOi8vbGlzdHMuZmVkb3JhcHJvamVjdC5vcmcvcGlwZXJtYWlsL2RldmVsLzIwMTAtTWFyY2gvMTMzNjAxLmh0bWwgYXMKKyMgYSBzaW1pbGFyIGV4YW1wbGUgb2YgdGhlIGVycm9yIG1lc3NhZ2UgeW91IGNhbiBlbmNvdW50ZXIgd2l0aG91dCB0aGlzIHBhdGNoLAorIyBhbmQgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL1VuZGVyc3RhbmRpbmdEU09MaW5rQ2hhbmdlIGFuZAorIyBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVhdHVyZXMvQ2hhbmdlSW5JbXBsaWNpdERTT0xpbmtpbmcgZm9yIG1vcmUKKyMgZGV0YWlscy4KKworLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCitAQCAtODYsNyArODYsNyBAQCBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgJCh6aXBfTElCUykgJChsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5hCisgZWxzZQorIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uc28KKy1saWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvCisrbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbyAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgZW5kaWYKKyBsaWJlYmwgPSAuLi9saWJlYmwvbGliZWJsLmEKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xNzIsNyArMTcyLDcgQEAgbGliZHcgPSAuLi9saWJkdy9saWJkdy5hICQoemlwX0xJQlMpICQobAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYQorIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uYQorIGVsc2UKKy1saWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvCisrbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbyAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbworIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9tZW1wY3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaApAQCAtMCwwICsxLDI0IEBACisKK3VjbGliYyBkb2VzIG5vdCBleHBvcnQgX19tZW1wY3B5IGxpa2UgZ2xpYmMgc28gd2UgYWxpYXMgaXQgaGVyZS4KK1RoaXMgcGF0Y2ggbWF5IG1ha2Ugc2Vuc2UgZm9yIHVwc3RyZWFtIGJ1dCBlbGZ1dGlscyB1c2VzIG1vcmUKK2dsaWJjIHNwZWNpZmljIGZlYXR1cmVzIGxpa2Ugb2JzdGFja19wcmludGYgd2hpY2ggYXJlIG1pc3NpbmcgaW4KK3VjbGliYyB0aGV5IG5lZWQgdG8gYmUgZml4ZWQgYWxvbmcgdG8gbWFrZSBpdCB3b3JrIGFsbCB0aGUgd2F5CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtFbGZ1dGlscyB1c2VzIG1vcmUgZ2xpYmMgc3BlY2lmaWMgZmVhdHVyZXNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfYmVnaW4uYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYworQEAgLTY4LDYgKzY4LDkgQEAKKyAjaW5jbHVkZSAibGliZWxmUC5oIgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNkZWZpbmUgX19tZW1wY3B5IG1lbXBjcHkKKysjZW5kaWYKKyAKKyAvKiBDcmVhdGUgZGVzY3JpcHRvciBmb3IgYXJjaGl2ZSBpbiBtZW1vcnkuICAqLworIHN0YXRpYyBpbmxpbmUgRWxmICoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg0OTBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCkBAIC0wLDAgKzEsOTEgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIGNvbXBpbGVkIG9iamVjdCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9lbGZ1dGlscyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiKEdQTC0yKyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiM1wKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0VYQ0VQVElPTjttZDU9NTcwYWRjYjBjMTIxOGFiNTdmMjI0OWM2N2QwY2U0MTciCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCisKK1BSID0gInIxMSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sLyR7QlBOfS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTBiZWQxMTMwMTM1ZjE3YWQyNzUzM2IwMDM0ZGJhOGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFlYmZhNGE3NDVkYjIxY2Y1NDI5Yzk1NDFmZTQ4MjcyOWI2MmVmYzdlNTNlOTExMDE1MWI0MTY5ZmU4ODdkYSIKKworIyBwaWNrIHRoZSBwYXRjaCBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LTEuZGViaWFuLnRhci5negorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcm9idXN0aWZ5LmRpZmYgXAorICAgICAgICBmaWxlOi8vaHBwYV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vYXJtX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9taXBzX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9tNjhrX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9lbGZfYWRkaXRpb25zLmRpZmYgXAorICAgICAgICBmaWxlOi8vZWxmdXRpbHMtZnNpemUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcmVtb3ZlLXVudXNlZC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9tZW1wY3B5LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2VsZl9iZWdpbi5jLUNWRS0yMDE0LTk0NDctZml4LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1nY2MtNC44LnBhdGNoIFwKKyIKKyMgT25seSBhcHBseSB3aGVuIGJ1aWxkaW5nIHVjbGliYyBiYXNlZCB0YXJnZXQgcmVjaXBlCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9pMzg2X2Rpcy5oIFwKKyAgICAgICAgZmlsZTovL3g4Nl82NF9kaXMuaCBcCisiCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAnL15pMzg2X2Rpcy5oOi8sKzQgey8uKi9kfScgJHtTfS9saWJjcHUvTWFrZWZpbGUuYW0KKworICAgIGNwICR7V09SS0RJUn0vKmRpcy5oICR7U30vbGliY3B1Cit9CisKKyMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYworIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQorIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKKworRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKK0ZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKKyAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKKyAgICAke2JpbmRpcn0vZXUtbGQgXAorICAgICR7YmluZGlyfS9ldS1ubSBcCisgICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAorICAgICR7YmluZGlyfS9ldS1zaXplIFwKKyAgICAke2JpbmRpcn0vZXUtc3RyaXAiCisKK0ZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKK0ZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKK0ZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCisjRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCisKKyMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MTgxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2My5iYgpAQCAtMCwwICsxLDg3IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIihHUEx2MyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAibGlidG9vbCBiemlwMiB6bGliIHZpcnR1YWwvbGliaW50bCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sL2VsZnV0aWxzLyR7UFZ9LyR7QlB9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3N2NlODdmMjU5OTg3ZDJlNTRlNGQ4N2I4NmNiZWU0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Yzc3NGYxZWVmMzI5MzA5ZjNiMDVlNzMwYmRhYzUwMDEzMTU1ZDQzNzUxOGEyZWMwZTI0ODcxZDMxMmYyZTIzIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9tZW1wY3B5LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBcCisiCisKKyMgcGljayB0aGUgcGF0Y2ggZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vZS9lbGZ1dGlscy9lbGZ1dGlsc18wLjE1OS00LmRlYmlhbi50YXIueHoKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmIFwKKyAgICAgICAgZmlsZTovL2hwcGFfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL2FybV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbWlwc19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbTY4a19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgXAorICAgICAgICBmaWxlOi8vc2NhbmYtZm9ybWF0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL21pcHNfcmVhZGVsZl93LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2FybV9mdW5jX3ZhbHVlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm9uX2xpbnV4LnBhdGNoIFwKKyIKKworIyBPbmx5IGFwcGx5IHdoZW4gYnVpbGRpbmcgdWNsaWJjIGJhc2VkIHRhcmdldCByZWNpcGUKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIgorCisjIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCisjIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcworIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iICE9ICJ4ODZfNjQiIF0gJiYgWyAteiBgZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgJ2kuODYnYCBdO3RoZW4KKwkJcm0gJHtEfSR7YmluZGlyfS9ldS1vYmpkdW1wCisJZmkKK30KKworIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCisjIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCisjIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQorCitFWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFBhY2thZ2UgdXRpbGl0aWVzIHNlcGFyYXRlbHkKK1BBQ0tBR0VTID0rICIke1BOfS1iaW51dGlscyBsaWJlbGYgbGliYXNtIGxpYmR3IgorRklMRVNfJHtQTn0tYmludXRpbHMgPSAiXAorICAgICR7YmluZGlyfS9ldS1hZGRyMmxpbmUgXAorICAgICR7YmluZGlyfS9ldS1sZCBcCisgICAgJHtiaW5kaXJ9L2V1LW5tIFwKKyAgICAke2JpbmRpcn0vZXUtcmVhZGVsZiBcCisgICAgJHtiaW5kaXJ9L2V1LXNpemUgXAorICAgICR7YmluZGlyfS9ldS1zdHJpcCIKKworRklMRVNfbGliZWxmID0gIiR7bGliZGlyfS9saWJlbGYtJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmVsZi5zby4qIgorRklMRVNfbGliYXNtID0gIiR7bGliZGlyfS9saWJhc20tJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmFzbS5zby4qIgorRklMRVNfbGliZHcgID0gIiR7bGliZGlyfS9saWJkdy0ke1BWfS5zbyAke2xpYmRpcn0vbGliZHcuc28uKiAke2xpYmRpcn0vZWxmdXRpbHMvbGliKiIKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KKyNGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyotJHtQVn0uc28gJHtiYXNlX2xpYmRpcn0vKi0ke1BWfS5zbyIKKyNGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmFzbS5zbyAke2xpYmRpcn0vbGliZHcuc28gJHtsaWJkaXJ9L2xpYmVsZi5zbyIKKworIyBUaGUgcGFja2FnZSBjb250YWlucyBzeW1saW5rcyB0aGF0IHRyaXAgdXAgaW5zYW5lCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmR3ID0gImRldi1zbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1jb25maWd1cmUuaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NWEyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoCkBAIC0wLDAgKzEsMTA4IEBACitBbGxvdyBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCistLS0gYS9jb25maWd1cmUuaW4JMjAxMi0xMi0xNCAxNTozMTozMi42MjMxODA0NTAgKzAxMDAKKysrKyBiL2NvbmZpZ3VyZS5pbgkyMDEyLTEyLTE0IDE1OjUzOjM0LjUxODIzMzUxOSArMDEwMAorQEAgLTQ4MSw3ICs0ODEsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBhbnkgdmFsdWUgZXhpc3RzIGZvciBXTk9IQU5HXSkKK0BAIC01MDYsNyArNTA2LDkgQEAKKyAJQUNfTVNHX1JFU1VMVChubykKKyAJQUNfREVGSU5FKFdOT0hBTkdfQkFDS1VQX1ZBTFVFLCAxKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKHllcykKKysJQUNfREVGSU5FX1VOUVVPVEVEKFdOT0hBTkdfQkFDS1VQX1ZBTFVFLCBgY2F0IHdub2hhbmdgKQorKwlybSAtZiB3bm9oYW5nCisgKQorIAorICMKK0BAIC01NzQsNyArNTc2LDggQEAKKyAJQUNfREVGSU5FKFJFQVJNX1NJRykKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCistLCBBQ19NU0dfV0FSTihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKyssCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorICMgSFBVWDcgaGFzIHRyb3VibGUgd2l0aCB0aGUgYmlnIGNhdCBzbyBzcGxpdCBpdAorQEAgLTcyNSw3ICs3MjgsOSBAQAorICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgIEFDX0RFRklORShIQVZFX1NHVFRZQikKKysgICAgICAgIFBUWV9UWVBFPXNndHR5YgorICkKKyAKKyAjIG1hY2ggc3lzdGVtcyBoYXZlIGluY2x1ZGUgZmlsZXMgZm9yIHVuaW1wbGVtZW50ZWQgZmVhdHVyZXMKK0BAIC03NDksNyArNzU0LDkgQEAKKyAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfVEVSTUlPKQorKyAgICAgICAgUFRZX1RZUEU9dGVybWlvcworKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgKQorIAorICAgIyBub3cgY2hlY2sgZm9yIHRoZSBuZXcgc3R5bGUgdHR5cyAobm90IHlldCBwb3NpeCkKK0BAIC03NzEsNyArNzc4LDkgQEAKKyAgICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1RFUk1JT1MpCisrICAgICAgICBQVFlfVFlQRT10ZXJtaW9zCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICkKKyBmaQorIAorQEAgLTc5NCw3ICs4MDMsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBUSU9DR1dJTlNaIGluIHRlcm1pb3MuaF0pCitAQCAtODE2LDcgKzgyNSw3IEBACisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyAjIGZpbmFsbHkgY2hlY2sgZm9yIENyYXkgc3R5bGUgdHR5cworQEAgLTgzNyw3ICs4NDYsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgIworQEAgLTg4OSw3ICs4OTgsOCBAQAorIAlBQ19NU0dfUkVTVUxUKHllcyksCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX0RFRklORShIQVZFX1NWX1RJTUVaT05FKQorKwlBQ19NU0dfUkVTVUxUKHllcyksCisgKQorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGFkODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWV4cGVjdC1pbnN0YWxsLXNjcmlwdHMtd2l0aG91dC11c2luZy10aGUtZml4bGluZTEtdGMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt3cmxpbnV4IHNwZWNpZmljXQorCitTdWJqZWN0OiBleHBlY3Q6IGluc3RhbGwgc2NyaXB0cyB3aXRob3V0IHVzaW5nIHRoZSBmaXhsaW5lMSB0Y2wgc2NyaXB0CisKK09uIG9sZGVyIG1hY2hpbmVzIGxpa2UgU0xFRDExLjIsIHdlIGFyZSBlbmNvdW50ZXJpbmcgZG9faW5zdGFsbCBmYWlsdXJlcworY29tcGxhaW5pbmcgdGhhdCAnR0xJQkNfMi4xNCcgaXMgbm90IGZvdW5kIGluIC9saWI2NC9saWJjLnNvLjYgYnV0IGlzIHJlcXVpcmVkCitieSBsaWJ0Y2w4LjYuc28uMC4KKworVGhpcyBpcyBiZWNhdXNlIHRoYXQgd2UncmUgZXhlY3V0aW5nIHRoZSBmaXhsaW5lMSB0Y2wgc2NyaXB0IHdoaWNoIHJlcXVpcmVzCitsaWJ0Y2w4LjYuc28uMCBpbiBzeXNyb290LiBIb3dldmVyLCBhbGwgY29tbWFuZHMgaW4gU0NSSVBUUyBhbHJlYWR5IGhhdmUgZ290Cit0aGUgY29ycmVjdCBmaXJzdCBsaW5lLCB0aGF0IGlzICcjIS9iaW4vc2gnLiBXZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBhbnl0aGluZy4KK1RoYXQncyB3aHkgd2UgY291bGQganVzdCBjb3B5IHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYzA1Yzg4MC4uZjEzOTRmZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTM4MCw3ICszODAsNyBAQCBkaXN0OiBkaXN0LWNsZWFuIGRvYworIAljcCAkKERJU1RfUk9PVCkvJChQS0dfRElSKS50YXIuZ3ogJCh0b3BfYnVpbGRkaXIpCisgCisgJChTQ1JJUFRTKToKKy0JJChUQ0xTSCkgJChzcmNkaXIpL2ZpeGxpbmUxICQoU0hPUlRfQklORElSKSA8ICQoc3JjZGlyKS9leGFtcGxlLyRAID4gJEAKKysJY3AgJChzcmNkaXIpL2V4YW1wbGUvJEAgJEAKKyAKKyAjIyBXZSBjYW5ub3QgdXNlIFRDTF9MSUJTIGJlbG93IChhZnRlciBUQ0xfTElCX1NQRUMpIGJlY2F1c2UgaXRzCisgIyMgZXhwYW5zaW9uIHJlZmVyZW5jZXMgdGhlIGNvbnRlbnRzIG9mIExJQlMsIHdoaWNoIGNvbnRhaW5zIGxpbmtlcgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDItdGNsLm00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGM2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVc2UgcHJvcGVyIC1MIHBhdGggd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGNsY29uZmlnL3RjbC5tNCBiL3RjbGNvbmZpZy90Y2wubTQKKy0tLSBhL3RjbGNvbmZpZy90Y2wubTQJMjAxMi0xMi0xNCAwOToxNjo1OC43ODk4NjEyODEgKzAxMDAKKysrKyBiL3RjbGNvbmZpZy90Y2wubTQJMjAxMi0xMi0xNCAxMDo1NTo0My41NDIyOTcwMTAgKzAxMDAKK0BAIC0zNzEsNyArMzcxLDcgQEAKKyAgICAgIyBvZiBUQ0xfQlVJTERfTElCX1NQRUMuIEFuIGV4dGVuc2lvbiBzaG91bGQgbWFrZSB1c2Ugb2YgVENMX0xJQl9TUEVDCisgICAgICMgaW5zdGVhZCBvZiBUQ0xfQlVJTERfTElCX1NQRUMgc2luY2UgaXQgd2lsbCB3b3JrIHdpdGggYm90aCBhbgorICAgICAjIGluc3RhbGxlZCBhbmQgdW5pbnN0YWxsZWQgdmVyc2lvbiBvZiBUY2wuCistICAgIGlmIHRlc3QgLWYgIiR7VENMX0JJTl9ESVJ9L01ha2VmaWxlIiA7IHRoZW4KKysgICAgaWYgdGVzdCAtZiAiJHtUQ0xfQklOX0RJUn0vTWFrZWZpbGUiIHx8IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgICAgICBUQ0xfTElCX1NQRUM9IiR7VENMX0JVSUxEX0xJQl9TUEVDfSIKKyAgICAgICAgIFRDTF9TVFVCX0xJQl9TUEVDPSIke1RDTF9CVUlMRF9TVFVCX0xJQl9TUEVDfSIKKyAgICAgICAgIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9CVUlMRF9TVFVCX0xJQl9QQVRIfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk3ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoCkBAIC0wLDAgKzEsMTQ0IEBACitBdXRob3I6IE1pa2UgTWFya2xleSA8bWlrZUBtYXJrbGV5Lm9yZz4KK0F1dGhvcjogU2VyZ2VpIEdvbG92YW4gPHNnb2xvdmFuQGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogRml4ZXMgc2hlYmFuZ3MgaW4gZXhhbXBsZXMgKENsb3NlczogIzE1MjM2NykuCisKK0JhY2twb3J0ZWQgZnJvbSBEZWJpYW4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2JlZXIuZXhwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvYmVlci5leHAJMjAwNi0wMS0yNSAxMzo1MTozOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvYmVlci5leHAJMjAxMy0xMS0wMSAxNzozNToxOS44MTczMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC1mCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIDk5IGJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbCwgRXhwZWN0LXN0eWxlCisgIyBBdXRob3I6IERvbiBMaWJlcyA8bGliZXNAbmlzdC5nb3Y+CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2V4cGVjdGQucHJvdG8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9leHBlY3RkLnByb3RvCTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL2V4cGVjdGQucHJvdG8JMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsMTAgQEAKKy0jIS9kZXBvdC90Y2wvc3JjL2V4cGVjdC9lIC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKysKKyAjIERlc2NyaXB0aW9uOiBTaW1wbGUgZnJhZ21lbnQgdG8gYmVnaW4gYSB0ZWxuZXQgZGFlbW9uCisgIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIENoYXB0ZXIgMTcgb2YgIkV4cGxvcmluZyBFeHBlY3QiCisgIyBBdXRob3I6IERvbiBMaWJlcywgTklTVAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9pcnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvaXJzaAkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9pcnNoCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBEbyByc2ggaW50ZXJhY3RpdmVseS4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgIyAgICByc2ggPHJlbW90ZT4gbHMgLWwgInwiIG1vcmUKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkLmNnaQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Bhc3N3ZC5jZ2kJMjAwMC0wMS0wNiAxNToyMjowNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkLmNnaQkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgVGhpcyBpcyBhIENHSSBzY3JpcHQgdG8gcHJvY2VzcyByZXF1ZXN0cyBjcmVhdGVkIGJ5IHRoZSBhY2NvbXBhbnlpbmcKKyAjIHBhc3N3ZC5odG1sIGZvcm0uICBUaGlzIHNjcmlwdCBpcyBwcmV0dHkgYmFzaWMsIGFsdGhvdWdoIGl0IGlzCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZHByb21wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Bhc3N3ZHByb21wdAkyMDAzLTA5LTA1IDEyOjAxOjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2Rwcm9tcHQJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0CisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIFRoaXMgc2NyaXB0IHByb21wdHMgZm9yIGEgcGFzc3dkIGZyb20gc3RkaW4gd2hpbGUgZWNob2luZyAqJ3MKKyAKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcmVwcm9tcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9yZXByb21wdAkyMDAwLTAxLTA2IDE1OjIyOjA3LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9yZXByb21wdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgTmFtZTogcmVwcm9tcHQKKyAjIERlc2NyaXB0aW9uOiByZXByb21wdCBldmVyeSBzbyBvZnRlbiB1bnRpbCB1c2VyIGVudGVycyBzb21ldGhpbmcKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvdGVybV9leHBlY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS90ZXJtX2V4cGVjdAkyMDA1LTAyLTE1IDEwOjExOjMxLjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS90ZXJtX2V4cGVjdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3RrCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB3aXNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgTmFtZTogdGt0ZXJtIC0gdGVybWluYWwgZW11bGF0b3IgdXNpbmcgRXhwZWN0IGFuZCBUayB0ZXh0IHdpZGdldCwgdjMuMAorICMgQXV0aG9yOiBEb24gTGliZXMsIEp1bHkgJzk0CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3ZyZnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS92cmZ5CTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3ZyZnkJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC1mCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAKKyAjIHNlcGFyYXRlIGFkZHJlc3MgaW50byB1c2VyIGFuZCBob3N0CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3hybG9naW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS94cmxvZ2luCTIwMDAtMDEtMDYgMTU6MjI6MDguMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3hybG9naW4JMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsMTAgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisrCisgIyB4cmxvZ2luIC0gcmxvZ2luIGJ1dCB3aXRoIGN1cnJlbnQgRElTUExBWQorICMKKyAjIFlvdSBjYW4gZXh0ZW5kIHRoaXMgaWRlYSB0byBzYXZlIGFueSBhcmJpdHJhcnkgaW5mb3JtYXRpb24gYWNyb3NzIHJsb2dpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyYWFiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKQEAgLTAsMCArMSw2NCBAQAorU1VNTUFSWSA9ICJ0b29sIGZvciBhdXRvbWF0aW5nIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmcgdG8gYSBzY3JpcHQiCitERVNDUklQVElPTiA9ICJFeHBlY3QgaXMgYSB0b29sIGZvciBhdXRvbWF0aW5nIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmcgdG8gYSBzY3JpcHQuIFwKK0ZvbGxvd2luZyB0aGUgc2NyaXB0LCBFeHBlY3Qga25vd3Mgd2hhdCBjYW4gYmUgZXhwZWN0ZWQgZnJvbSBhIHByb2dyYW0gYW5kIHdoYXQgXAordGhlIGNvcnJlY3QgcmVzcG9uc2Ugc2hvdWxkIGJlLiBFeHBlY3QgaXMgYWxzbyB1c2VmdWwgZm9yIHRlc3RpbmcgdGhlc2Ugc2FtZSBcCithcHBsaWNhdGlvbnMuIEFuZCBieSBhZGRpbmcgVGssIHlvdSBjYW4gYWxzbyB3cmFwIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBpbiBcCitYMTEgR1VJcy4gQW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgcHJvdmlkZXMgYnJhbmNoaW5nIGFuZCBoaWdoLWxldmVsIGNvbnRyb2wgXAorc3RydWN0dXJlcyB0byBkaXJlY3QgdGhlIGRpYWxvZ3VlLiBJbiBhZGRpdGlvbiwgdGhlIHVzZXIgY2FuIHRha2UgY29udHJvbCBhbmQgXAoraW50ZXJhY3QgZGlyZWN0bHkgd2hlbiBkZXNpcmVkLCBhZnRlcndhcmQgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHNjcmlwdC4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBlY3QvIgorTElDRU5TRSA9ICJQRCIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2UudGVybXM7bWQ1PWZiZjJkZTdlOTEwMjUwNWIxNDM5ZGIwNmZjMzZjZTVjIgorCitERVBFTkRTICs9ICJ0Y2wiCitSREVQRU5EU18ke1BOfSA9ICJ0Y2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9leHBlY3QvRXhwZWN0LyR7UFZ9LyR7QlBOfSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXRjbC5tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMS1leGFtcGxlLXNoZWJhbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDRlMWE0ZjRjODc3ZTlkZGM1YTU0MmRmYTdlY2M5MmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjI4ZGNhOTA0MjhhM2IzMGU2NTA1MjVjZGMxNjI1NWQ3NmJiNmNjZDY1ZDQ0OGJlNTNlNjIwZDk1ZDVjYzA0MCIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbyAgICR7RH0ke2xpYmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L2ZpeGxpbmUxICAgICAgICAgICAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9LworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9leGFtcGxlLyogICAgICAgICAgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS8KKyAgICAgICAgcm0gJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS9saWJleHBlY3QqLnNvCisgICAgICAgIHNlZCAtZSAnc3wkZGlyfCR7bGliZGlyfXwnIC1pICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vcGtnSW5kZXgudGNsCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXRjbD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC10Y2xpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9L3RjbDguNiBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgICIKK0VYVFJBX09FTUFLRV9pbnN0YWxsID0gIiAnU0NSSVBUUz0nICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59JHtQVn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyX25hdGl2ZX0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3QuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3RfdGNsLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0X2NvbW0uaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS90Y2xkYmcuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggXAorICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2xpYmV4cGVjdCR7UFZ9LnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vZXhwZWN0JHtQVn0vKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiMGUzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mZGlzay9ncHRmZGlza18xLjAuMC5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJHUFQgZmRpc2sgaXMgYSBkaXNrIHBhcnRpdGlvbmluZyB0b29sIGxvb3NlbHkgbW9kZWxlZCBvbiBMaW51eCBmZGlzaywgYnV0IHVzZWQgZm9yIG1vZGlmeWluZyBHVUlEIFBhcnRpdGlvbiBUYWJsZSAoR1BUKSBkaXNrcy4gVGhlIHJlbGF0ZWQgRml4UGFydHMgdXRpbGl0eSBmaXhlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBvbiBNYXN0ZXIgQm9vdCBSZWNvcmQgKE1CUikgZGlza3MuIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK0RFUEVORFMgPSAidXRpbC1saW51eCBwb3B0IG5jdXJzZXMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke1BWfS8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMjA2MWY5MTdhZjA4NDIxNTg5OGQ0ZmVhMDRkODM4OGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2Njk1Njc0M2E3OTlmYzA0NzFjZGIwMzI2NjVjMTM5MWU4MmY5YzViM2YxZDdkNzI2ZDI5ZmUyYmEwMWQ2YyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGNnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBzZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgZml4cGFydHMgJHtEfSR7c2JpbmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE2YjJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSAwOGFiZjk0NGIyYmZmMjdiNmRkMzI1ZGQxNWI0ODYxY2ViZWYxMTNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBXZWQsIDggQXByIDIwMTUgMDM6MjY6NTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIC1QIHByb21wdCBpbnRvIFVzYWdlIGluZm8KKworQ3VycmVudGx5LCBVc2FnZSBpbmZvIGRvZXNuJ3QgaW5jbHVkZSAtUCBwcm9tcHQsIGFkZCBpdDoKKworcm9vdEBhcm1hOWVsOn4jIGZpbGUKK1VzYWdlOiBmaWxlIFstYmNFaGlrTGxObnByc3Z6MF0gWy0tYXBwbGVdIFstLW1pbWUtZW5jb2RpbmddIFstLW1pbWUtdHlwZV0KKyAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc10KKyAgICAgICAgICAgIFstUCBwYXJhbWV0ZXI9bGltaXRzXSBmaWxlIC4uLgorICAgICAgIGZpbGUgLUMgWy1tIG1hZ2ljZmlsZXNdCisgICAgICAgZmlsZSBbLS1oZWxwXQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KKy0tLQorIHNyYy9maWxlLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZpbGUuYyBiL3NyYy9maWxlLmMKK2luZGV4IDJiMTVlMjEuLmU1YTk1N2IgMTAwNjQ0CistLS0gYS9zcmMvZmlsZS5jCisrKysgYi9zcmMvZmlsZS5jCitAQCAtNzYsOCArNzYsOCBAQCBpbnQgZ2V0b3B0X2xvbmcoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBzdHJ1YworICMgZGVmaW5lIFVTQUdFICBcCisgICAgICJVc2FnZTogJXMgWyIgRklMRV9GTEFHUyBcCisgCSJdIFstLWFwcGxlXSBbLS1leHRlbnNpb25dIFstLW1pbWUtZW5jb2RpbmddIFstLW1pbWUtdHlwZV1cbiIgXAorLSAgICAiICAgICAgICAgICAgWy1lIHRlc3RuYW1lXSBbLUYgc2VwYXJhdG9yXSBbLWYgbmFtZWZpbGVdIFstbSBtYWdpY2ZpbGVzXSAiIFwKKy0gICAgImZpbGUgLi4uXG4iIFwKKysgICAgIiAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc11cbiAiIFwKKysgICAgIiAgICAgICAgICAgIFstUCBwYXJhbWV0ZXI9bGltaXRzXSBmaWxlIC4uLlxuIiBcCisgICAgICIgICAgICAgJXMgLUMgWy1tIG1hZ2ljZmlsZXNdXG4iIFwKKyAgICAgIiAgICAgICAlcyBbLS1oZWxwXVxuIgorIAorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY0ODVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9kZWJpYW4tNzQyMjYyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1RoZSBhd2sgcGF0dGVybiB3YXMgY2hlY2tlZCAqYmVmb3JlKiB0aGUgUGVybCBwYXR0ZXJuLCBzbyB0aGUgcGVybAorc2NyaXB0IHdpdGggQkVHSU57Li4ufSB3b3VsZCBiZSByZXBvcnRlZCBhcyBhd2ssIHRoaXMgcGF0Y2ggZml4ZXMgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEJpZWRsIDxkZWJpYW4uYXhobkBtYW5jaG1hbC5pbi11bG0uZGU+CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL21hZ2ljL01hZ2Rpci9jb21tYW5kcyBiL21hZ2ljL01hZ2Rpci9jb21tYW5kcworLS0tIGEvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCisrKysgYi9tYWdpYy9NYWdkaXIvY29tbWFuZHMKK0BAIC01Nyw2ICs1Nyw3IEBACisgMAlzdHJpbmcvd3QJIyFcIC91c3IvYmluL2F3awlhd2sgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQorICE6bWltZQl0ZXh0L3gtYXdrCisgMAlyZWdleC80MDk2CT1eXFxzezAsMTAwfUJFR0lOXFxzezAsMTAwfVt7XQlhd2sgb3IgcGVybCBzY3JpcHQgdGV4dAorKyE6c3RyZW5ndGggLSAxMgorIAorICMgQVQmVCBCZWxsIExhYnMnIFBsYW4gOSBzaGVsbAorIDAJc3RyaW5nL3d0CSMhXCAvYmluL3JjCVBsYW4gOSByYyBzaGVsbCBzY3JpcHQgdGV4dCBleGVjdXRhYmxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiOTVkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIkZpbGUgY2xhc3NpZmljYXRpb24gdG9vbCIKK0RFU0NSSVBUSU9OID0gIkZpbGUgYXR0ZW1wdHMgdG8gY2xhc3NpZnkgZmlsZXMgZGVwZW5kaW5nIFwKK29uIHRoZWlyIGNvbnRlbnRzIGFuZCBwcmludHMgYSBkZXNjcmlwdGlvbiBpZiBhIG1hdGNoIGlzIGZvdW5kLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZGFyd2luc3lzLmNvbS9maWxlLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyB0d28gY2xhdXNlIEJTRAorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0yO21kNT02YTczODI4NzJlZGI2OGQzM2UxYTkzOThiNmUwMzE4OCIKKworREVQRU5EUyA9ICJ6bGliIGZpbGUtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9maWxlL2ZpbGUuZ2l0IFwKKyAgICAgICAgZmlsZTovL2RlYmlhbi03NDIyNjIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNSRVYgPSAiM2MwODc0YmU0ZDMyMzJkNjcyYjIwZjUxMzQ1MWEzOWNmZDdjNTg1YSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pc2MvKi5tZ2MiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAorCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjgzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChlbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZmxleC0yLjUuMzcvZG9jL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZmxleC0yLjUuMzcub3JpZy9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wNy0yMSAwNDoxODoyNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBmbGV4LTIuNS4zNy9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wNy0zMCAxNzo1NzowOS44MzQ4MzQ1MzEgKzAzMDAKK0BAIC0yLDcgKzIsNyBAQAorIAorIGluZm9fVEVYSU5GT1MgPQlmbGV4LnRleGkKKyBkaXN0X21hbl9NQU5TID0gZmxleC4xCistZGlzdF9kb2NfREFUQT0gZmxleC5wZGYKKytFWFRSQV9ESVNUPSBmbGV4LnBkZgorIAorIENMRUFORklMRVMgPSBcCisgCWZsZXguaGtzIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmZiYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0MT0idGVzdC1hbGxvYy1leHRyYSB0ZXN0LWFycmF5LW5yIHRlc3QtYXJyYXktciB0ZXN0LWJhc2ljLW5yIHRlc3QtYmFzaWMtciB0ZXN0LWV4dGVuZGVkIHRlc3QtcXVvdGVzIFwKK3Rlc3QtYmlzb24tbnIgdGVzdC1iaXNvbi15eWxsb2MgdGVzdC1iaXNvbi15eWx2YWwgdGVzdC1jKystYmFzaWMgdGVzdC1jLWNwcC1uciB0ZXN0LXByZWZpeC1uciB0ZXN0LWNjbCBcCit0ZXN0LWMtY3BwLXIgdGVzdC1jKystbXVsdGlwbGUtc2Nhbm5lcnMgdGVzdC1tZW0tciB0ZXN0LW1lbS1uciB0ZXN0LWRlYnVnLW5yIHRlc3QtbGluZWRpci1yIHRlc3Qtbm9hbnNpLXIgXAordGVzdC15eWV4dHJhIHRlc3QtaGVhZGVyLXIgdGVzdC1ub2Fuc2ktbnIgdGVzdC1kZWJ1Zy1yIFRFTVBMQVRFIHRlc3QtdG9wIHRlc3QtaGVhZGVyLW5yIHRlc3QtcHJlZml4LXIiCit0ZXN0Mj0idGVzdC1tdWx0aXBsZS1zY2FubmVycy1uciB0ZXN0LXBvc2l4bHktY29ycmVjdCB0ZXN0LXBvc2l4IHRlc3Qtc3RyaW5nLXIgdGVzdC1zdHJpbmctbnIiCit0ZXN0Mz0idGVzdC1wdGhyZWFkIHRlc3QtaW5jbHVkZS1ieS1wdXNoIHRlc3QtaW5jbHVkZS1ieS1idWZmZXIgdGVzdC1pbmNsdWRlLWJ5LXJlZW50cmFudCIKK3Rlc3Q0PSJ0ZXN0LWxpbmVuby1uciB0ZXN0LWxpbmVuby1yIHRlc3QtbGluZW5vLXRyYWlsaW5nIgordGVzdDU9InRlc3QtYysrLXl5d3JhcCB0ZXN0LXJlc2Nhbi1yIHRlc3QtcmVzY2FuLW5yIgordGVzdDY9InRlc3QtcmVqZWN0LW5yIHRlc3QtcmVqZWN0LXIiCit0ZXN0Nz0idGVzdC1yZWplY3Qtc2VyIHRlc3QtcmVqZWN0LXZlciIKK3Rlc3Q4PSJ0ZXN0LW11bHRpcGxlLXNjYW5uZXJzLXIiCisKK291dHB1dCgpIHsKKyAgaWYgWyAkPyAtZXEgMCBdOyBcCisgICAgdGhlbiBlY2hvICJQQVNTOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIjsgXAorICBmaTsKK30KKworZm9yIGkgaW4gJHRlc3QxOyBkbyAkaS8kaSA8ICRpL3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDI7IGRvICRpLyRpID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3QzOyBkbyBjZCAkaTsgLi8kaSB0ZXN0LTEuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBjZCAuLjsgZG9uZQorZm9yIGkgaW4gJHRlc3Q0OyBkbyB0ZXN0IGAkaS8kaSA8ICRpL3Rlc3QuaW5wdXRgIC1lcSBgJGkvJGkgMSA8ICRpL3Rlc3QuaW5wdXRgID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q1OyBkbyAkaS8kaSAkaS90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q2OyBkbyB0ZXN0LXJlamVjdC8kaSA8IHRlc3QtcmVqZWN0L3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDc7IGRvIHRlc3QtcmVqZWN0LyRpIHRlc3QtcmVqZWN0LyRpLnRhYmxlcyA8IHRlc3QtcmVqZWN0L3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitjZCAkdGVzdDg7IC4vJHRlc3Q4ID4vZGV2L251bGw7IGk9JHRlc3Q4IG91dHB1dApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGEyNmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJGbGV4IChUaGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyKSIKK0RFU0NSSVBUSU9OID0gIkZsZXggaXMgYSBmYXN0IGxleGljYWwgYW5hbHlzZXIgZ2VuZXJhdG9yLiAgRmxleCBpcyBhIHRvb2wgZm9yIGdlbmVyYXRpbmcgcHJvZ3JhbXMgdGhhdCByZWNvZ25pemUgXAorbGV4aWNhbCBwYXR0ZXJucyBpbiB0ZXh0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZmxleC8iCisKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0RFUEVORFMgKz0gIiR7QCdiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUnIGlmICcke1BURVNUX0VOQUJMRUR9JyA9PSAnMScgZWxzZSAnJ30iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2ZsZXgvZmxleC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwdGVzdAorCisKK000ID0gIiR7YmluZGlyfS9tNCIKK000X2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbTQiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9NND0ke000fSIKK0VYVFJBX09FTUFLRSArPSAibTQ9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L200IgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmxleCBNND0ke000fQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmxleCBNND0ke000fQorfQorCitSREVQRU5EU18ke1BOfSArPSAibTQiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJZm9yIGkgaW4gYGZpbmQgJHtTfS90ZXN0cy8gLXR5cGUgZCB8Z3JlcCAtRXYgImNvbmNhdGVuYXRlZC1vcHRpb25zfHJlamVjdHx0YWJsZS1vcHRzIiB8IGF3ayAtRi8gJ3twcmludCAkTkZ9J2A7IFwKKwkgIGRvIG9lX3J1bm1ha2UgLUMgJHtTfS90ZXN0cy8kaSAtZiAke0J9L3Rlc3RzLyRpL01ha2VmaWxlIHRvcF9idWlsZGRpcj0ke0J9IEZMRVg9ZmxleCAkaTsgXAorCWRvbmUKKwlvZV9ydW5tYWtlIC1DICR7U30vdGVzdHMvdGVzdC1yZWplY3QgLWYgJHtCfS90ZXN0cy90ZXN0LXJlamVjdC9NYWtlZmlsZSB0b3BfYnVpbGRkaXI9JHtCfSBGTEVYPWZsZXggdGVzdC1yZWplY3QtbnIgdGVzdC1yZWplY3QtciB0ZXN0LXJlamVjdC1zZXIgdGVzdC1yZWplY3QtdmVyCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJZm9yIGkgaW4gYGZpbmQgJHtTfS90ZXN0cy8gLXR5cGUgZCB8IGF3ayAtRi8gJ3twcmludCAkTkZ9J2A7IFwKKwkgIGRvIGNwIC1yICR7U30vdGVzdHMvJGkgJHtEfSR7UFRFU1RfUEFUSH07IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXhfMi41LjM5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODU3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgZmxleC5pbmMKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQ3NDJjZjkyZTg5MDQwYjM5NDg2YTYyMTliNjgwNjciCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3N2Q0NGM2YmI4YzA3MDVlMDAxN2FiOWE4NGExNTAyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZGQyYjU1ZjNiYzM4Y2I1MTJiNDhmYWQ3ZDcyZjQzYjExZWYyNDQ0ODdmZjI1ZmMwMGFhYmVjMWUzMmI2MTdmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyNDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKQEAgLTAsMCArMSwxMTggQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjQuOC40IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjQuOC40IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC44OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCisgICAgZmlsZTovLzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNC1zaC1wcjI0ODM2LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzItbGlidG9vbC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBcCisgICAgZmlsZTovLzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Mi1wcjU3NzQ4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0My1jcHAucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YTg0YTMwODM5YjJhY2EyMmEyZDcyM2RlMmE2MjZlYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YTgwYWEyMzc5OGI4ZTliNTc5MzQ5NGI4Yzk3NmIzOWI4ZDlhYTJlNTNjZDVlZDU1MzRhZmY2NjJhN2Y4Njk1IgorCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXCAKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwgCisgICAgLS13aXRoLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwgCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4MDExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGJmM2Q5NmFlNThmYTE4MGI4YjQ2OGQyNWRjMmUwMjA5ZGFjYTI3NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgICAgMiArLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZDgwOTUzNS4uMWI3NmM5MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQzOSw3ICs3NDM5LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDhlYzFhYS4uODlkMWQzZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjg3Myw3ICsyODczLDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGQwMzA5NzNjODcyYzAwZDkxNjkyMWQ4NGRlZWUwYWYyYzBkMzgwODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8ICAgIDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gZDJkOWRkNzU2YzQzNTZkMTRkZDdhZTAwMzg1NjM0NGNiNGYzNzk4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCAgICA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8ICAgIDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8ICAgIDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggMGQzMDlhNS4uZjJmMWUxZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggYjVmZDk4OS4uM2RhOWE1ZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCAyZDhlOTc4Li4xNGViMDhmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gYTU1Yzc1MWE0NDljMmNiZjBiM2ZjYzA3YWFiMWI4NmJmOTY2MTUxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNjMgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgIDMwOCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDEwMCArKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDY5MiArKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDQwNiArKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgICAyICsKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCAwODcxYTZhLi4zMjZkN2VmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5MDUsNiArMTkwNSw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjA2OSw2ICsyMDcyLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY0MGRkY2YuLmM1N2E3NTEgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU4MjIsNiArMTU4MjIsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYwNzksNiArMTYwODIsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDU4MGQ3MjUuLjNmZTYxYjggMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCAwZTZiMWZjLi40MDVhZWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIDZhM2U4NTA2YTEyYzEyNzI4ZDhiMjk5MDFkZWZkNzM4YmU0Mzc1N2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDE0IC0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgICA3IC0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICAgNyAtLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAgIDcgKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDE4ICsrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICAzIC0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA2ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSAyMjU1MTFhM2FlYjE5M2E5MTZiMzk5OWYwYjY0MGEzOTJjYWE2N2NkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICAgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgICAxMyArKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxMTIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1NDIgQEAKK0Zyb20gNmZmZTdjNDZmNTJkMjc4NjRjM2RmMzY2M2UxNmVjOWRkZWU3MWU4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMzVdIHVjbGliYy1sb2NhbGUtdXBkYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgNzQgKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgNDIgKysrKysrLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgNTEgKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTIgKystLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAzNCArKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDUgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgMTggKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgMTcgKysrLS0KKyA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMzEsNiArMzEsOSBAQAorIAorICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorICNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIzICszOSwyMCBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIHRlbXBsYXRlPD4KKyAgICAgdm9pZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisgICB9CisgCisgICBfX2NfbG9jYWxlCisgICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CistfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistbmFtZXNwYWNlIF9fZ251X2N4eAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorICAgICB7CisgICAgICAgIkxDX0NUWVBFIiwKK0BAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgICAgICAiTENfSURFTlRJRklDQVRJT04iCisgI2VuZGlmCisgICAgIH07CistfQorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKy19ICAvLyBuYW1lc3BhY2Ugc3RkCisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCistCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zMywxNiArMzMsMjAgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisgICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKy0gIHRlbXBsYXRlPD4KKyAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisgICAgIHsKK0BAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAJfQorICAgICB9CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCisrICAgIHsgfQorIAorICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKworICAgICByZXR1cm4gX19yZXQ7CisgICB9CisgCitAQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAgIH0KKyAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCistfQorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC01MywxMiArNTMsMTYgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCXNpemVfdCBfX3JlZnMpCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIH0KKyAJYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKy0JOworKwlfX3JldCA9IHBhdHRlcm4oKTsKKyAgICAgICB9CisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KK0BAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisgCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKK0BAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK0BAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKysgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitAQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTUwLDEyICs1MCwyMSBAQAorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKysKKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyMzgwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDlmMjE1ODQ1MTk4MWNmMGE4MGNmYWJkYzc5YWUzMWJiNjk3NmE4MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDA4LzM1XSBtaXNzaW5nLWV4ZWNpbmZvX2gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBib2VobS1nYy9pbmNsdWRlL2djLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK2luZGV4IGM1MWUwMTcuLmE3YmE4ZGMgMTAwNjQ0CistLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKysrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gZTM5M2UwNzZmMWFiODJkMjVlMWFhMDRkNmVkZWEyN2I0MWQzZWIwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMzVdIGM5OS1zbnByaW50ZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworaW5kZXggZTg1YmQ4My4uNmFmODM5YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitAQCAtMTM5LDcgKzEzOSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA3M2Y2OWQ4MDZlMmM5NTYxYTU0OTk1MjIzNDMxYTEwNzZjZmQ2MTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8zNV0gYzk5LWNvbXBsZXgtdWdseS1oYWNrCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggYzU3YTc1MS4uYTEzMzNlMiAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xODczNCw2ICsxODczNCw5IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciBJU08gQzk5IHN1cHBvcnQgdG8gVFIxIGluIDxjb21wbGV4Lmg+Li4uICIgPiY2OyB9CisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGNvbXBsZXguaD4KKysjaWZkZWYgX19VQ0xJQkNfXworKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcworKyNlbmRpZgorIGludAorIG1haW4gKCkKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzliMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjAzNzk1M2U0MDMxMmI0NWFiODRlZDBhM2FkODgyYmI1ZTQxMzEwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjUxOjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMzVdIGluZGV4X21hY3JvCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgICAgICAgfCAgICAzICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQoraW5kZXggMzhlYjFlOC4uMTU4ZDIxYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorQEAgLTU1LDYgKzU1LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitpbmRleCBkN2I1Y2JkLi5iOWIzYWNiIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitAQCAtNDgsNiArNDgsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBuYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMi1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhkNDVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBhMGNiMTNiZGQ5OGE5NDFiODFmZGFmZTRjZDk2ZTRjNTY5ZmViNjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8zNV0gbGlibXVkZmxhcC1zdXN2My1sZWdhY3kKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYm11ZGZsYXAvbWYtaG9va3MyLmMgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlibXVkZmxhcC9tZi1ob29rczIuYyBiL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKK2luZGV4IDRhZjE3ZGYuLmEzYzZiMmYgMTAwNjQ0CistLS0gYS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCisrKysgYi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCitAQCAtNDI0LDcgKzQyNCw3IEBAIFdSQVBQRVIyKHZvaWQsIGJ6ZXJvLCB2b2lkICpzLCBzaXplX3QgbikKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzQsNyArNDM0LDcgQEAgV1JBUFBFUjIodm9pZCwgYmNvcHksIGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZGVzdCwgc2l6ZV90IG4pCisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0NCw3ICs0NDQsNyBAQCBXUkFQUEVSMihpbnQsIGJjbXAsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pCisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbiA9PSAwID8gMCA6IG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDUzLDcgKzQ1Myw3IEBAIFdSQVBQRVIyKGNoYXIgKiwgaW5kZXgsIGNvbnN0IGNoYXIgKnMsIGludCBjKQorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjIsNyArNDYyLDcgQEAgV1JBUFBFUjIoY2hhciAqLCByaW5kZXgsIGNvbnN0IGNoYXIgKnMsIGludCBjKQorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAxMDRlNGQ2NjIwOGYyNzI2YjE0ZDJmNWVlYmNlOTA3MDBjYmM4M2M4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gbGlic3RkYysrLW5hbWVzcGFjZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggfCAgICA0ICsrKy0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICAgIHwgICAgNCArKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMDY3NjU3YS4uZGQ3NmE2YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE2LDMgKzExNyw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKyAJIH0KKyAgICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCAxNjY1ZGRlLi45MDVjNDMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorQEAgLTc1LDMgKzc2LDQgQEAKKyAgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgICAgIH0KKyt9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gZWRjOWFjYjE4MTgxMGYyMzRiNmI5ZjdkMjgyMGIwZTRmNmExZWVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjQ4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIHNoLXByMjQ4MzYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9pZD04OTU5MzA0JmZvcnVtX2lkPTUzNDgKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjQ4MzYKKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBlMTJhMTgwLi4xMzViYmY1IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTIzMzc4LDcgKzIzMzc4LDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGViYTM1NzcuLjYzNjNhMjEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMzE0MSw3ICszMTQxLDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNTBlNTM2NjAwNWIwZjZhZjI3Mzc4ZTJhNWMzY2I5Zjk5MzZhN2U2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU4OjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMzVdIGFybTogVXNlIFRBUkdFVF9FTkRJQU5fT1BUSU9OIGZvciBkZXRlcm1pbmluZworIE1VTFRJTElCX0RFRkFVTFRTCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitpbmRleCA0ODhlZmE0Li43NTNkYzNhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNDYsNyArNDYsNyBAQAorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPWhhcmQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPWhhcmQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NWU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMjIxIEBACitGcm9tIDE2MDM5N2VmM2MzMzMxMDk5YWYwMjhmMWI4ZDNlMDg1YjA3ZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgICAgfCAgICAyICstCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICAgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8ICAgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8ICAgMTkgKysrKysrKysrKysrKysrKysrKworIDggZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvTWFrZWZpbGUuaW4KKysrKyBnY2MtNC44LjQvZ2NjL01ha2VmaWxlLmluCitAQCAtMjAxOSw3ICsyMDE5LDcgQEAgYXR0cmlicy5vIDogYXR0cmlicy5jICQoQ09ORklHX0gpICQoU1lTVAorIAorIGluY3BhdGgubzogaW5jcGF0aC5jIGluY3BhdGguaCAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSAkKENQUExJQl9IKSBcCisgCQlpbnRsLmggcHJlZml4LmggY29yZXR5cGVzLmggJChUTV9IKSBjcHBkZWZhdWx0LmggJChUQVJHRVRfSCkgXAorLQkJJChNQUNITU9ERV9IKQorKwkJJChNQUNITU9ERV9IKSAkKEZMQUdTX0gpIHRvcGxldi5oCisgCisgQ0ZMQUdTLXByZWZpeC5vICs9IC1EUFJFRklYPVwiJChwcmVmaXgpXCIgLURCQVNFVkVSPSQoQkFTRVZFUl9zKQorIHByZWZpeC5vOiBwcmVmaXguYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCBwcmVmaXguaCBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb21tb24ub3B0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbW1vbi5vcHQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbW1vbi5vcHQKK0BAIC01OTUsNiArNTk1LDEwIEBAIFdwZWRhbnRpYworIENvbW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcKKyBJc3N1ZSB3YXJuaW5ncyBuZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZAorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnLmluCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcuaW4KK0BAIC0xMzgsNiArMTM4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorQEAgLTkxOCw2ICs5MTgsNyBAQCB3aXRoX2djCisgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9wbHVnaW4KKyBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAorIHdpdGhfbGlua2VyX2hhc2hfc3R5bGUKK0BAIC0xNjM5LDYgKzE2NDAsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSBsaWJxdWFkbWF0aCBzdXBwb3J0IGZvciBGb3J0cmFuCitAQCAtMTc4NDcsNyArMTc4NTAsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzg1MCAiY29uZmlndXJlIgorKyNsaW5lIDE3ODUzICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTE3OTUzLDcgKzE3OTU2LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc5NTYgImNvbmZpZ3VyZSIKKysjbGluZSAxNzk1OSAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0yNzIxOSw2ICsyNzIyMiwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUuYWMKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUxMjAsNiArNTEyMCwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1sCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorSW5kZXg6IGdjYy00LjguNC9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGdjYy00LjguNC9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjU4LDYgKzI1OCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgQGdvbAorIC1Xc2lnbi1jb21wYXJlICAtV3NpZ24tY29udmVyc2lvbiAgLVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3MgQGdvbAorQEAgLTQwMjIsNiArNDAyMywxNCBAQCBoZWFkZXJzLS0tZm9yIHRoYXQsIEBvcHRpb257LVd1bmtub3duLXByCisgIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKKyAgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorSW5kZXg6IGdjYy00LjguNC9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC44LjQvZ2NjL2djYy5jCitAQCAtNzQxLDYgKzc0MSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9XAorICAgICAlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fVwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorICAgICAle2ZnbnUtdG06JTppbmNsdWRlKGxpYml0bS5zcGVjKSUobGlua19pdG0pfVwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2luY3BhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9pbmNwYXRoLmMKKysrKyBnY2MtNC44LjQvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Miw2ICszODMsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3JvbworIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0Zyb20gMThmZGU1NzQwYjA5MzI0ZGZiOWNmNDFlOTg0OTY3MjU3M2ZmNWZhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8ICAgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICAgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDcgKzI2LDYgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmYwMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSAzMDdjOGZmM2VmNjY2YjdiZDVhYzczMzg2M2YyZmJiMjdhOWQ1MjFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8ICAgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgICAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrLS0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitpbmRleCAxMGFlODRkLi5kYzNmZmRmIDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMjk5LDYgKzEyOTksMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmMgYi9nY2MvY3AvZysrc3BlYy5jCitpbmRleCBiODk2ZWVhLi5mNTUyMTZiIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2crK3NwZWMuYworKysrIGIvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEyNiw2ICsxMjYsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAorICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IGEwMjI2MjIuLmYxNWM5OTEgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMTkwLDcgKzE5MCw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZyZXBvICAtZm5vLXJ0dGkgIC1mc3RhdHMgIC1mdGVtcGxhdGUtYmFja3RyYWNlLWxpbWl0PUB2YXJ7bn0gQGdvbAorIC1mdGVtcGxhdGUtZGVwdGg9QHZhcntufSBAZ29sCisgLWZuby10aHJlYWRzYWZlLXN0YXRpY3MgLWZ1c2UtY3hhLWF0ZXhpdCAgLWZuby13ZWFrICAtbm9zdGRpbmMrKyBAZ29sCistLWZuby1kZWZhdWx0LWlubGluZSAgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKystbm9zdGRsaWIrKyAtZm5vLWRlZmF1bHQtaW5saW5lICAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCitAQCAtNDUzLDcgKzQ1Myw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtbm9zdGFydGZpbGVzICAtbm9kZWZhdWx0bGlicyAgLW5vc3RkbGliIC1waWUgLXJkeW5hbWljIEBnb2wKKyAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCisgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiBAZ29sCistLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAorIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKKyAtdSBAdmFye3N5bWJvbH19CisgCitAQCAtOTg4Niw2ICs5ODg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW50cmllcyBpbgorIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKyBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKyBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisgQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZWZkYjYyNS4uNDc3NzUyZiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNzQ4LDYgKzc0OCw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCisgICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAorICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKKysgICAgJXshbm9zdGRsaWIrKzp9XAorICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNjNjFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMDA0Njk2ZTA1NGFlOWRjNzFkNTEyY2M3NTVjY2M0MDc0ZmM2MmIyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGI2NWQyMWQuLmJkYWI0NWEgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjU4MjksMTMgKzI1ODI5LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZTIyNmI4NS4uNWY1YzkwOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MDk5LDEzICs0MDk5LDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM4YWJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDdmNWM5ZGNjNzFjOGI4M2EwYjU1OTYyNjZjYzRiZGYwOTM2ZThlMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNDc3NzUyZi4uNTEwNjJhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDA5OCw2ICs0MDk4LDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NDM1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK0Zyb20gNDZkNTI0MzkwNTJmMDg3NmE5MmRjZjhhMGFiOWM2MGQ3NWM4MDMwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UKKyBpbiAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDkwYTJiYmEuLjIzMjA0OTcgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2OSw3ICs0NjksNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGJkYWI0NWEuLmQ1ODc5OTMgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE1MzksOCArMTE1MzksOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZjVjOTA5Li41ZTVlODRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MjAsOCArMTcyMCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCAyOWZkZmM3Li5lMDQ4ZGNlIDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIjsgdGhlbgorIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgorIAkgICAgZWxzZQorIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAorQEAgLTEwMyw3ICsxMDMsNyBAQCBlc2FjCisgCisgIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgorIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KKy0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisrICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisgZmkKKyAKKyAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkODQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gZTBkMTVmNGY4YmYyOGMzNTFiOTIxNWNhMzdmMWNhYTI0ZGYwZTFmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE4OjU0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMzVdIFBSIHRhcmdldC8zMjIxOQorCisqIHZhcmFzbS5jIChkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSk6IFdlYWsgZGF0YSBpcyBub3QgbG9jYWwuCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jIHwgICAxNCArKysrKysrKysrKysrKworIGdjYy92YXJhc20uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKysrKy0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKKworZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJlN2RlZGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworQEAgLTAsMCArMSwxNCBAQAorKy8qIFBSIHRhcmdldC8zMjIxOSAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLXJlcXVpcmUtdmlzaWJpbGl0eSAiIiB9ICovCisrLyogeyBkZy1vcHRpb25zICItZlBJQyIgeyB0YXJnZXQgZnBpYyB9IH0gKi8KKysKKytleHRlcm4gdm9pZCBmKCkgX19hdHRyaWJ1dGVfXygod2Vhayx2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOworK2V4dGVybiBpbnQgcHV0cyggY2hhciBjb25zdCogKTsKKytpbnQgbWFpbigpCisreworKwlpZiAoZikKKysJCWYoKTsKKysJcmV0dXJuIDA7CisrfQorKworZGlmZiAtLWdpdCBhL2djYy92YXJhc20uYyBiL2djYy92YXJhc20uYworaW5kZXggNjY0ODEwMy4uZmFkYmE3OCAxMDA2NDQKKy0tLSBhL2djYy92YXJhc20uYworKysrIGIvZ2NjL3ZhcmFzbS5jCitAQCAtNjY3NSw2ICs2Njc1LDEwIEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwgaW50IHNobGliKQorICAgLyogU3RhdGljIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKCEgVFJFRV9QVUJMSUMgKGV4cCkpCisgICAgIGxvY2FsX3AgPSB0cnVlOworKyAgLyogaGlkZGVuIHdlYWsgY2FuJ3QgYmUgb3ZlcnJpZGRlbiBieSBzb21ldGhpbmcgbm9uLWxvY2FsLCBhbGwKKysgICAgIHRoYXQgaXMgcG9zc2libGUgaXMgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBhdCBhbGwuICovCisrICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkpCisrICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIEEgdmFyaWFibGUgaXMgbG9jYWwgaWYgdGhlIHVzZXIgaGFzIHNhaWQgZXhwbGljaXRseSB0aGF0IGl0IHdpbGwKKyAgICAgIGJlLiAgKi8KKyAgIGVsc2UgaWYgKChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChleHApCitAQCAtNjY4OCwxMSArNjY5Miw2IEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwgaW50IHNobGliKQorICAgICAgbG9jYWwuICAqLworICAgZWxzZSBpZiAoREVDTF9WSVNJQklMSVRZIChleHApICE9IFZJU0lCSUxJVFlfREVGQVVMVCkKKyAgICAgbG9jYWxfcCA9IHRydWU7CistICAvKiBEZWZhdWx0IHZpc2liaWxpdHkgd2VhayBkYXRhIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Ryb25nIHN5bWJvbAorLSAgICAgaW4gYW5vdGhlciBtb2R1bGUgYW5kIHNvIGFyZSBub3QgbG9jYWwuICAqLworLSAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApCistCSAgICYmICFyZXNvbHZlZF9sb2NhbGx5KQorLSAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBJZiBQSUMsIHRoZW4gYXNzdW1lIHRoYXQgYW55IGdsb2JhbCBuYW1lIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgICAgICBzeW1ib2xzIHJlc29sdmVkIGZyb20gb3RoZXIgbW9kdWxlcy4gICovCisgICBlbHNlIGlmIChzaGxpYikKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGEwZjliZDA5YzgxNmFkMjllY2Y3YzI5ZDZjMjdmN2RmOTc3MTAzNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8ICAgIDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGEwMDFjM2UuLjFhYWUxZTQgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1MTA2MmFhLi5jZjZiOTllIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKKyBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKKy0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCisrCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTZkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjA5IEBACitGcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitAQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNTcsNyArNTcsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTIwLDQgKzIwLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitAQCAtMjcsNiArMjcsNiBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy9saW51eC5oCitAQCAtMTcsNCArMTcsNCBAQCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHCisgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCitAQCAtMjIsMTAgKzIyLDEwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGY2NCV7RUI6Yn0le0VMOmx9dHNtaXAiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLnNvLjEiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiAiL2xpYjMyL2xkLnNvLjEiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgIi9saWIzMi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKKyAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiwgXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtMzY2LDE0ICszNjYsMTQgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorICNlbHNlCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisgI2VuZGlmCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zaC9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc2gvbGludXguaAorQEAgLTQzLDcgKzQzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdQorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtOTIsOCArOTIsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2xpbnV4LmgKK0BAIC03MywxMCArNzMsMTAgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGMxODE2YzE2MDE1NmY5OWMzNGU2YTBhMDMxMWJiMDIxOTMyNjgwNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggMjMyMDQ5Ny4uODU2MmE2MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDYyNyw3ICs0NjI3LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gOTdlNDU5MWMyMDMxMDQyNWU3YWNhMGU2NzEyYThkOTQ4MGU3NzQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IDgwZjQ1NGQuLjRkYjNlYjkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgQkU4X0xJTktfU1BFQwkJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBCRThfTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmYzVlNGJlYWVhODU2YTJiNDg2Yzc3MGFkM2FkZGMwZjViYjMxMDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOGJjMGM5OC4uM2NkMDgxNyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTUxOSwxMCArMTE1MTksMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTUzMyw2ICsxMTU0MywxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZTVlODRmLi40MTVhNmRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MDAsMTAgKzE3MDAsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xNzE0LDYgKzE3MjQsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0Y2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSBkZWZmZGIwYjI0OTdhMTA2MDYxZDNlYTJjNmEzZmVmNGZiYTM0NDVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mzk6NTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNS8zNV0gd2Nhc3QtcXVhbCBQUi81NTM4MworCitUaGlzIGlzIGEgYmFja3BvcnQgZnJvbSBnY2MgYnVnemlsbGEKKworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTM4MworCitUaGlzIGNvbW1pdCBmaXhlcyBhIHdyb25nIHdhcm5pbmcgYmVoYXZpb3IuIFRoaXMgYnVnIHdoaWNoIGhhcyBubword29ya2Fyb3VuZCBvdGhlciB0aGFuIGRpc2FibGluZyB0aGUgd2FybmluZy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL2MvYy10eXBlY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMgfCAgICA2ICsrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suYyBiL2djYy9jL2MtdHlwZWNrLmMKK2luZGV4IGRkYjZkMzkuLmM2MjQxMjAgMTAwNjQ0CistLS0gYS9nY2MvYy9jLXR5cGVjay5jCisrKysgYi9nY2MvYy9jLXR5cGVjay5jCitAQCAtNDQ2NCw3ICs0NDY0LDcgQEAgaGFuZGxlX3dhcm5fY2FzdF9xdWFsIChsb2NhdGlvbl90IGxvYywgdHJlZSB0eXBlLCB0cmVlIG90eXBlKQorICAgICAvKiBUaGVyZSBhcmUgcXVhbGlmaWVycyBwcmVzZW50IGluIElOX09UWVBFIHRoYXQgYXJlIG5vdCBwcmVzZW50CisgICAgICAgIGluIElOX1RZUEUuICAqLworICAgICB3YXJuaW5nX2F0IChsb2MsIE9QVF9XY2FzdF9xdWFsLAorLQkJImNhc3QgZGlzY2FyZHMgJXEjdiBxdWFsaWZpZXIgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIiwKKysJCSJjYXN0IGRpc2NhcmRzICVxdiBxdWFsaWZpZXIgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIiwKKyAJCWRpc2NhcmRlZCk7CisgCisgICBpZiAoYWRkZWQgfHwgZGlzY2FyZGVkKQorZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKK2luZGV4IDY0MGU0ZjAuLjU2MzgyYzcgMTAwNjQ0CistLS0gYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYworKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKK0BAIC04NSwxMSArODUsMTEgQEAgZjMgKHZvaWQgKioqYmFyKQorIHZvaWQKKyBmNCAodm9pZCAqIGNvbnN0ICoqYmFyKQorIHsKKy0gIGNvbnN0IHZvaWQgKioqcDkgPSAoY29uc3Qgdm9pZCAqKiopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICBjb25zdCB2b2lkICoqKnA5ID0gKGNvbnN0IHZvaWQgKioqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgdm9pZCAqIGNvbnN0ICoqcDExID0gKHZvaWQgKiBjb25zdCAqKikgYmFyOworLSAgdm9pZCAqKiBjb25zdCAqcDEzID0gKHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIHZvaWQgKiogY29uc3QgKnAxMyA9ICh2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICBjb25zdCB2b2lkICogY29uc3QgKipwMTUgPSAoY29uc3Qgdm9pZCAqIGNvbnN0ICoqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworLSAgY29uc3Qgdm9pZCAqKiBjb25zdCAqcDE3ID0gKGNvbnN0IHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIGNvbnN0IHZvaWQgKiogY29uc3QgKnAxNyA9IChjb25zdCB2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICB2b2lkICogY29uc3QgKiBjb25zdCAqIHAxOSA9ICh2b2lkICogY29uc3QgKiBjb25zdCAqKSBiYXI7CisgICBjb25zdCB2b2lkICogY29uc3QgKiBjb25zdCAqcDIxID0gKGNvbnN0IHZvaWQgKiBjb25zdCAqIGNvbnN0ICopIGJhcjsKKyB9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzgyOTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1doZW4gY3Jvc3MgY29tcGlsaW5nIGEgdGFyZ2V0IGdjYywgdGFyZ2V0IGZsYWdzIG1heSBiZSB1c2VkIG9uIHRoZSBob3N0CisKK0NvbmZpZ3VyZSBpZGVudGlmaWVzIGEgbnVtYmVyIG9mIHdhcm5pbmcgZmxhZ3MgKFdBUk5fQ0ZMQUdTIGFuZAorV0FSTl9DWFhGTEFHUykgZnJvbSB0aGUgJENDIHZhbHVlLiAgVGhlIGNyb3NzIGNvbXBpbGVyIG1heSBiZSBkaWZmZXJlbnQKK2Zyb20gdGhlIGhvc3QgY29tcGlsZXIgYW5kIG1heSBub3Qgc3VwcG9ydCB0aGUgc2FtZSBzZXQgb2YgZmxhZ3MuICBUaGlzCitsZWFkcyB0byBwcm9ibGVtcyBzdWNoIGFzOgorCitjYzFwbHVzOiBlcnJvcjogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gIi1Xbm8tbmFycm93aW5nIgorY2MxcGx1czogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW92ZXJsZW5ndGgtc3RyaW5ncyIKKworV29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IHJlbW92aW5nIHRoZSB3YXJuaW5nIGZsYWdzIGZyb20gdGhlCitCVUlMRF9DWFhGTEFHUyB2YWx1ZSwgaW4gYSB3YXkgc2ltaWxhciB0byB0aGUgQlVJTERfQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUKK0BAIC0xNzg2NCw3ICsxNzg2NCw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3ODUzICJjb25maWd1cmUiCisrI2xpbmUgMTc4NjcgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTc5NzAsNyArMTc5NzAsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzk1OSAiY29uZmlndXJlIgorKyNsaW5lIDE3OTczICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTI2OTE4LDE4ICsyNjkxOCwxNSBAQCAkYXNfZWNobyAiI2RlZmluZSBUQVJHRVRfTElCQ19QUk9WSURFU19TCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorLWhhdmVfc3lzX3NkdF9oPW5vCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKyAjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisgIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCistIworLSMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0jCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorICNmaQorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorLSRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjE5MDJhOTAgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApAQCAtMCwwICsxLDc4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhagorCisyMDEzLTA4LTAxICBNYXJ0aW4gSmFtYm9yICA8bWphbWJvckBzdXNlLmN6PgorCisJUFIgbWlkZGxlLWVuZC81Nzc0OAorCSogc3Rvci1sYXlvdXQuYyAoY29tcHV0ZV9yZWNvcmRfbW9kZSk6IFRyZWF0IHplcm8tc2l6ZWQgYXJyYXkgZmllbGRzCisJbGlrZSBpbmNvbXBsZXRlIHR5cGVzLgorCit0ZXN0c3VpdGUvCisJKiBnY2MuZGcvdG9ydHVyZS9wcjU3NzQ4LmM6IE5ldyB0ZXN0LgorCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3N0b3ItbGF5b3V0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2Mvc3Rvci1sYXlvdXQuYwkyMDEzLTA0LTI4IDEwOjI5OjE4LjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00LjguMS9nY2Mvc3Rvci1sYXlvdXQuYwkyMDEzLTA4LTAxIDE1OjAyOjA4LjAxODAwNjEyNSAtMDcwMAorQEAgLTE2MTgsNyArMTYxOCw5IEBACisgCQkgICAmJiBpbnRlZ2VyX3plcm9wIChUWVBFX1NJWkUgKFRSRUVfVFlQRSAoZmllbGQpKSkpKQorIAkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoYml0X3Bvc2l0aW9uIChmaWVsZCksIDEpCisgCSAgfHwgREVDTF9TSVpFIChmaWVsZCkgPT0gMAorLQkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoREVDTF9TSVpFIChmaWVsZCksIDEpKQorKwkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoREVDTF9TSVpFIChmaWVsZCksIDEpCisrCSAgfHwgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChmaWVsZCkpID09IEFSUkFZX1RZUEUKKysJICAgICAgJiYgdHJlZV9sb3dfY3N0IChERUNMX1NJWkUgKGZpZWxkKSwgMSkgPT0gMCkpCisgCXJldHVybjsKKyAKKyAgICAgICAvKiBJZiB0aGlzIGZpZWxkIGlzIHRoZSB3aG9sZSBzdHJ1Y3QsIHJlbWVtYmVyIGl0cyBtb2RlIHNvCitJbmRleDogZ2NjLTQuOC4xL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jCTIwMTMtMDgtMDEgMTU6MDI6MDguMDYyMDA2MTI2IC0wNzAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogUFIgbWlkZGxlLWVuZC81Nzc0OCAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworKworK3R5cGVkZWYgbG9uZyBsb25nIFYKKysgIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMiAqIHNpemVvZiAobG9uZyBsb25nKSksIG1heV9hbGlhcykpOworKworK3R5cGVkZWYgc3RydWN0IFMgeyBWIGE7IFYgYlswXTsgfSBQIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDEpKSk7CisrCisrc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFQgeyBjaGFyIGM7IFAgczsgfTsKKysKKyt2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytjaGVjayAoc3RydWN0IFQgKnQpCisreworKyAgaWYgKHQtPnMuYlswXVswXSAhPSAzIHx8IHQtPnMuYlswXVsxXSAhPSA0KQorKyAgICBhYm9ydCAoKTsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytnZXRfaSAodm9pZCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrZm9vIChQICpwKQorK3sKKysgIFYgYSA9IHsgMywgNCB9OworKyAgaW50IGkgPSBnZXRfaSgpOworKyAgcC0+YltpXSA9IGE7CisrfQorKworK2ludAorK21haW4gKCkKKyt7CisrICBzdHJ1Y3QgVCAqdCA9IChzdHJ1Y3QgVCAqKSBtYWxsb2MgKDEyOCk7CisrCisrICBmb28gKCZ0LT5zKTsKKysgIGNoZWNrICh0KTsKKysKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY4NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDMtY3BwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbiBidWlsZGluZyAKK2djYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBpbgorYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgorCitjb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKK2NvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQorY29uZmlndXJlOjM2NjY6ICQ/ID0gMAorY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KK2NvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgorY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlIHVzaW5nIAordGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIgaGVhZGVycyBhcmUgCit2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZyBpbnRvIAorY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkIGZhaWx1cmVzIAorcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkIGVudmlyb25tZW50IHdoZW4KK3VzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlIHRoZSB2ZXJzaW9uCit3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0byBhdm9pZCB0aGUgCitwcm9ibGVtLgorCitSUCAyMi8wOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wMy0zMCAxMToyNTowMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvTWFrZWZpbGUuaW4JMjAxMy0wOC0xMyAxMjowMzoxNy4xNTE5ODg4ODIgKzAwMDAKK0BAIC0xNDksNiArMTQ5LDcgQEAKKyAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAorIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODc2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0NC1nZW5ndHlwZXMucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorZ2VuZ3R5cGUgaXMgZ2VuZXJhdGVkIGZvciBib3RoIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHRoZSB0YXJnZXQuIC1ER0VORVJBVE9SX0ZJTEUKK3dhcyBhZGRlZCBpbiB0aGUgcGF0Y2ggaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTItMDcvbXNnMDAyNzMuaHRtbAorYW5kIHdhcyBhcHBsaWVkIHRvIGJvdGggdmVyc2lvbnMgb2YgZ2VuZ3R5cGUuCisKK1VuZm9ydHVuYXRlbHkgdGhlIHByZXNlbmNlIG9mIHRoaXMgZmxhZyB0cmlnZ2VycyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYmNvbmZpZy5oKSAKK3RvIGJlIGluY2x1ZGVkIGZvciB0aGUgdGFyZ2V0IGJ1aWxkIG9mIGdlbmd0eXBlLiBDb21waWxpbmcgZ2VuZ3R5cGUgd2l0aCB0aGUgdGFyZ2V0IAorY29tcGlsZXIgYW5kIGJjb25maWcuaCBjYW4gcmVzdWx0IGluIGVycm9ycyBpZiB0aGUgYnVpbGQgYW5kIHRhcmdldCBzeXN0ZW1zIGFyZSAKK2Rpc3NpbWlsYXIuIEFuIGV4YW1wbGUgY2FzZSB0aGlzIGZhaWxzIGlzIGNyb3NzIGNvbXBpbGluZyBnY2Mgb24gbGludXggZm9yIGEgZGFyd2luIAordGFyZ2V0IHN5c3RlbToKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzoyNTowOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6IEluIGZ1bmN0aW9uICd2b2lkIHBhcnNlX2Vycm9yKGNvbnN0IGNoYXIqLCAuLi4pJzoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9zeXN0ZW0uaDo5Mzo1MzogZXJyb3I6ICdmcHV0Y191bmxvY2tlZCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCit8ICAjICBkZWZpbmUgZnB1dGMoQywgU3RyZWFtKSBmcHV0Y191bmxvY2tlZCAoQywgU3RyZWFtKQorCit3aGljaCBvY2N1cnMgc2luY2UgYXV0by1idWlsZC5oIGFuZCBhdXRvLWhvc3QuaCBoYXZlIGRpZmZlcm5ldCB2YWx1ZXMgb2YKK0hBVkVfRlBVVENfVU5MT0NLRUQ6CisKKyNkZWZpbmUgSEFWRV9GUFVUQ19VTkxPQ0tFRCAxCisvKiAjdW5kZWYgSEFWRV9GUFVUU19VTkxPQ0tFRCAqLworCitUaGUgb2J2aW91cyBmaXggaXMgdG8gb25seSBpbmNsdWRlIHRoZSBmbGFnIG9uIGJ1aWxkLyB0YXJnZXRzIHdoaWNoIHRoaXMgcGF0Y2ggZG9lcywgaG93ZXZlciAKK3RoaXMgYWxzbyBsZWFkcyB0byBjb21waWxlIGVycm9ycyBkdWUgdG8gY29uc3RfdHJlZSBiZWluZyB1bmRlZmluZWQgYnV0IHVzZWQgaW4gZG91YmxlX2ludC5oCisKK0kgYWRkZWQgYSBHRU5FUkFUT1JfRklMRTIgZmxhZyB0byB3b3JrYXJvdW5kIHRob3NlIGluIHRoZSAKK3RhcmdldCBjYXNlIGFuZCBhbGxvdyB0aGUgYnVpbGQgdG8gc3VjY2VlZC4KKworT25seSB0aGUgYnVpbGQvZ2VuZ3R5cGVzIHNob3VsZCBoYXZlIHRoZSAtREdFTkVSQVRPUl9GSUxFIAorCitSUCAyMi84LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzYuODQ0MDE0NDI0ICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM3Ljc4NDAxNDQwMiArMDAwMAorQEAgLTM5MDMsMjcgKzM5MDMsMjkgQEAKKyAKKyBnZW5ndHlwZS1sZXgubyBidWlsZC9nZW5ndHlwZS1sZXgubyA6IGdlbmd0eXBlLWxleC5jIGdlbmd0eXBlLmggJChTWVNURU1fSCkKKyBnZW5ndHlwZS1sZXgubzogJChDT05GSUdfSCkgJChCQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLWxleC5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1wYXJzZS5vIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gOiBnZW5ndHlwZS1wYXJzZS5jIGdlbmd0eXBlLmggXAorICAgJChTWVNURU1fSCkKKyBnZW5ndHlwZS1wYXJzZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtc3RhdGUubyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiBnZW5ndHlwZS1zdGF0ZS5jICQoU1lTVEVNX0gpIFwKKyAgIGdlbmd0eXBlLmggZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgJChPQlNUQUNLX0gpIFwKKyAgICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUtc3RhdGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUubyBidWlsZC9nZW5ndHlwZS5vIDogZ2VuZ3R5cGUuYyAkKFNZU1RFTV9IKSBnZW5ndHlwZS5oIAlcCisgICBydGwuZGVmIGluc24tbm90ZXMuZGVmIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpIFwKKyAgICQoT0JTVEFDS19IKSAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLm86ICQoQkNPTkZJR19IKQorIAorIGJ1aWxkL2dlbm1kZGVwcy5vOiBnZW5tZGRlcHMuYyAkKEJDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmgJXAorQEAgLTM5ODgsNyArMzk5MCw3IEBACisgIyBhbnkgc3lzdGVtIGhlYWRlciBpcyBpbmNsdWRlZC4KKyBnZW5ndHlwZS1sZXguYyA6IGdlbmd0eXBlLWxleC5sCisgCS0kKEZMRVgpICQoRkxFWEZMQUdTKSAtbyRAICQ8ICYmIHsgXAorLQkgIGVjaG8gJyNpbmNsdWRlICJiY29uZmlnLmgiJyA+ICRALnRtcDsgXAorKwkgIGVjaG8gJycgPiAkQC50bXA7IFwKKyAJICBjYXQgJEAgPj4gJEAudG1wOyBcCisgCSAgbXYgJEAudG1wICRAOyBcCisgCX0KK0luZGV4OiBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9kb3VibGUtaW50LmgJMjAxMy0wMS0zMCAxMTowNDozMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTA4LTE5IDExOjQxOjUxLjU2NDAxMjcxOSArMDAwMAorQEAgLTQ0OCwxMCArNDQ4LDEyIEBACisgCisgCisgI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUyCisgLyogQ29udmVyc2lvbiB0byBhbmQgZnJvbSBHTVAgaW50ZWdlciByZXByZXNlbnRhdGlvbnMuICAqLworIAorIHZvaWQgbXB6X3NldF9kb3VibGVfaW50IChtcHpfdCwgZG91YmxlX2ludCwgYm9vbCk7CisgZG91YmxlX2ludCBtcHpfZ2V0X2RvdWJsZV9pbnQgKGNvbnN0X3RyZWUsIG1wel90LCBib29sKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogRE9VQkxFX0lOVF9IICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNGY0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitnY2MgNC44IHdvbid0IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgc2luY2UgdGhlICouUHBvIGZpbGVzCitkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAgCisyMDEyLzA5LzIyCisKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDEtMTQgMTg6MTY6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTA5LTIyIDEwOjM4OjE4LjkwNDA2NDc1MCArMDAwMAorQEAgLTEwMCw3ICsxMDAsOCBAQAorIElGVU5DX0RFRgk9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUCT0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCisgCistTV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUwkJPSAKKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wNS0zMSAwOTowOToyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDktMjIgMTA6NDA6NDIuNTIwMDU5OTE3ICswMDAwCitAQCAtMjk4LDcgKzI5OCw4IEBACisgUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKy1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUyA9IAorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWZkNTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitXaGVuIGNvbXBpbGluZyBhIHByb2plY3QgdXNpbmcgLWZyZXBvLCAucnBvIGZpbGVzIGFyZSB3cml0dGVuIGFsb25nc2lkZQordGhlIC5vIGZpbGUsIHRoZSBzeW1ib2xzIGVpdGhlciBoYXZlIE8gb3IgQyBhZ2FpbnN0IHRoZW0uIER1cmluZyBmaW5hbCBsaW5raW5nLAordGhlIG9iamVjdHMgY2FuIGJlIHJlY29tcGlsZWQgd2l0aCBzb21lIG9mIHRoZSBlbnRyaWVzIHR3ZWFrZWQvY2hvc2VuIGJ5IHRoZSAKK3RsaW5rLmMgY29kZSAodmlzaWJsZSB3aXRoIFRMSU5LX1ZFUkJPU0U9MyksIGl0IGRvZXMgdGhpcyBieSBjaGFuZ2luZyBPIC0+IEMKK2luIHRoZSAucnBvIGZpbGVzLgorCitNeSB0ZXN0cyBzaG93ZWQgdGhhdCBpbml0X3JlcG8gKGNwL3JlcG8uYykgd2FzIGNvcnJlY3RseSBjYWxsaW5nIAorSURFTlRJRklFUl9SRVBPX0NIT1NFTiBhZ2FpbnN0IHRoZSByaWdodCBpZGVudGlmZXJzIGFuZCBzZXR0aW5nIHRoZQorY2hvc2VuIGJpdC4KKworQnkgdGhlIHRpbWUgZmluaXNoX3JlcG8oKSBvciBlbWl0X3JlcG9fcCgpIHdlcmUgY2FsbGVkLCB0aGUgcG9pbnRlciByZXR1cm5lZAorYnkgZ2V0X2lkZW50aWZpZXIoKSBmb3IgdGhlIHN5bWJvbCBtYXJrZWQgZHVyaW5nIGluaXRfcmVwbyBoYWQgY2hhbmdlZCBhbmQKK3RoZSBjaG9zZW4gYml0IHdhcyBubyBsb25nZXIgc2V0LiBUaGlzIGxlYWQgdG8gbGlua2luZyBidWdzIGxpa2U6CisKK2NvbGxlY3Q6IHJlbGlua2luZworY29sbGVjdDI6IGVycm9yOiAnX1pOSzZzdWRva3U1Q2xlYXJJTlNfOFNlcXVlbmNlRUVjbEVSUzFfJyB3YXMgYXNzaWduZWQgdG8gJ2JvYXJkLnJwbycsIGJ1dCB3YXMgbm90IGRlZmluZWQgZHVyaW5nIHJlY29tcGlsYXRpb24sIG9yIHZpY2UgdmVyc2EKKworVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGdldHRpbmcgY2FsbGVkIGJlZm9yZQorZmluaXNoX3JlcG8oKSBpcyBjYWxsZWQgYW5kIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzIGlzIHNldCB0byBmYWxzZSAKK3NvIHRoZSBpZGVudGlmaWVycyBhcmUgbm90IHByZXNlcnZlZC4gVGhleSBhcmUgcmVjcmVhdGVkIGJ1dCB0aGUgCitjaG9zZW4gYml0cyBnZXQgd2lwZWQgb3V0IHdoaWNoIGlzIHdoeSB0aGUgcG9pbnRlciBjaGFuZ2VzIGFuZCB0aGUgCitjaG9zZW4gYml0IGlzIG5vdCBzZXQuCisKK1RoZSBmaXggaXMgdG8gY2hhbmdlIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzICphZnRlciogdGhlIGZpbmlzaF9yZXBvIAorY2FsbHMgYXJlIG1hZGUuCisKK1JlcHJvZHVjdGlvbiBpcyB0cmlja3kgc2luY2UgeW91IG5lZWQgdG8gdHJpZ2dlciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYXQKK2p1c3QgdGhlIHJpZ2h0IG1vbWVudC4KKworUlAgMjAxMy8xMC85CisKK1tZT0NUTyAjNTEzM10KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3RvcGxldi5jCTIwMTMtMDMtMjggMDg6Mjk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90b3BsZXYuYwkyMDEzLTEwLTA5IDIwOjI3OjE3LjA4OTIyODAyMyArMDAwMAorQEAgLTU1MSwxMSArNTUxLDExIEBACisgICBpZiAoZmxhZ19zeW50YXhfb25seSB8fCBmbGFnX3dwYSkKKyAgICAgcmV0dXJuOworIAorLSAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKy0KKyAgIC8qIFRoaXMgbXVzdCBhbHNvIGNhbGwgZmluYWxpemVfY29tcGlsYXRpb25fdW5pdC4gICovCisgICBsYW5nX2hvb2tzLmRlY2xzLmZpbmFsX3dyaXRlX2dsb2JhbHMgKCk7CisgCisrICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworKworICAgaWYgKHNlZW5fZXJyb3IgKCkpCisgICAgIHJldHVybjsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWUwZTE5ZWFjMjU2MmY3Mzg1ODYwMmZlMjZlMjA0NGViOGIyMGM0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbCAKK25vdCBiZSBhYmxlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIFNQRSB0YXJnZXRzIChlNTAwdjEvdjIpLgorR0NDIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4c3BlIHdpbGwgbm90IGJlIGFibGUgdG8KK2dlbmVyYXRlIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zIChmb3IgZTY1MDApLgorVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJlZCBmaWxlIHN1Y2ggdGhhdCBTUEUgb3IgQWx0aVZlYyBjb2RlCitjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gZ2NjIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LgorVGhlIEFCSSBhbmQgc3BlY2lmZmljIGluc3RydWN0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKyItbWFiaT1zcGUgb3IgLW1hYmk9YWx0aXZlYyIgYW5kIHRoZSAiLW1zcGUgb3IgLW1hbHRpdmVjIiBwYXJhbWV0ZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggY2I3YTk0ZS4uZDM5MmMyYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwNjgsNyArMjA2OCwxMiBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHQtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIgOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmggcnM2MDAwL2xpbnV4YWx0aXZlYy5oIHJzNjAwMC9saW51eHNwZS5oIHJzNjAwMC9lNTAwLmgiIDs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXBwY29zICR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtcHBjY29tbSIKKyAJY2FzZSAke3RhcmdldH0gaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhjNjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDgxIEBACitFbnN1cmUgdGFyZ2V0IGdjYyBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZAorCitUaGVyZSBhcmUgYSBmZXcgaGVhZGVycyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkCitnY2MtcnVudGltZSB0YXJnZXQgKG9tcC5oLCBzc3AvKi5oKS4gQmVpbmcgaW5zdGFsbGVkIGZyb20gYSByZWNpcGUKK2J1aWx0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlIHdpdGhpbiB0aGUgdGFyZ2V0CitzeXNyb290IGFuZCBub3QgY3Jvc3MvbmF0aXZlc2RrOyB0aHVzIHRoZXkgd2VyZW4ndCBhYmxlIHRvIGJlCitmb3VuZCBieSBnY2Mgd2l0aCB0aGUgZXhpc3Rpbmcgc2VhcmNoIHBhdGhzLiBBZGQgc3VwcG9ydCBmb3IKK3BpY2tpbmcgdXAgdGhlc2UgaGVhZGVycyB1bmRlciB0aGUgc3lzcm9vdCBzdXBwbGllZCBvbiB0aGUgZ2NjCitjb21tYW5kIGxpbmUgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgkyMDE0LTEyLTIzIDExOjU3OjMzLjMyNzg3MzMzMSArMDAwMAorKysrIGIvZ2NjL01ha2VmaWxlLmluCTIwMTUtMDEtMjEgMTE6MzI6MzUuNDQ3MzA1Mzk0ICswMDAwCitAQCAtNTg3LDYgKzU4Nyw3IEBACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjUzNCw2ICsyNTM1LDcgQEAKKyAKKyBQUkVQUk9DRVNTT1JfREVGSU5FUyA9IFwKKyAgIC1ER0NDX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGVcIiBcCisrICAtREdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ9XCIkKGxpYnN1YmRpcl90YXJnZXQpL2luY2x1ZGVcIiBcCisgICAtREZJWEVEX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGUtZml4ZWRcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUj1cIiQoZ2NjX2d4eF9pbmNsdWRlX2RpcilcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVD0kKGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3QpIFwKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0xMyAxNzo0MDoyNi4xMzEwMTI3MjUgKzAwMDAKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0yMSAxMTozMDowOC45Mjg0MjY0OTIgKzAwMDAKK0BAIC01OSw2ICs1OSwxMCBAQAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCBmOTRhZTE3Li5kOThiNDBiIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM5MCw0ICsxMzkwLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlmMGI3ODEuLjE3NGZjYTggMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTExODksMTMgKzExODksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKQEAgLTAsMCArMSwxMjcgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjQuOS4zIgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjQuOS4zIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC45OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCisgICAgZmlsZTovLzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgZmlsZTovLzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMi1saWJ0b29sLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0My1jcHAucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUxLWVhYmlzcGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaCBcCisgICAgZmlsZTovLzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaCBcCisgICAgZmlsZTovLzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNmY4MzFiNGQyNTE4NzI3MzZlOGU5Y2MwOTc0NmYzMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjMzMmIyYTVhMzIxYjU3NTA4YjkwMzEzNTRhODUwM2FmNmZkZmI4NjhiOGMxNzQ4ZDMzMDI4ZDEwMGE4YjY3ZSIKKworUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ODAxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiZjNkOTZhZTU4ZmExODBiOGI0NjhkMjVkYzJlMDIwOWRhY2EyNzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQ4MDk1MzUuLjFiNzZjOTAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0MzksNyArNzQzOSw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQ4ZWMxYWEuLjg5ZDFkM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NzMsNyArMjg3Myw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEzYjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBkMDMwOTczYzg3MmMwMGQ5MTY5MjFkODRkZWVlMGFmMmMwZDM4MDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCAgICA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIGQyZDlkZDc1NmM0MzU2ZDE0ZGQ3YWUwMDM4NTYzNDRjYjRmMzc5ODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgICAgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCAgICA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCAgICA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDBkMzA5YTUuLmYyZjFlMWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGI1ZmQ5ODkuLjNkYTlhNWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggMmQ4ZTk3OC4uMTRlYjA4ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmNWYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIGE1NWM3NTFhNDQ5YzJjYmYwYjNmY2MwN2FhYjFiODZiZjk2NjE1MTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMTE3ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8ICAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDMwMCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA2OTIgKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggMDg3MWE2YS4uMzI2ZDdlZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTA1LDYgKzE5MDUsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIwNjksNiArMjA3Miw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNDBkZGNmLi5jNTdhNzUxIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1ODIyLDYgKzE1ODIyLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MDc5LDYgKzE2MDgyLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCA1ODBkNzI1Li4zZmU2MWI4IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggMGU2YjFmYy4uNDA1YWVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JiZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSA2YTNlODUwNmExMmMxMjcyOGQ4YjI5OTAxZGVmZDczOGJlNDM3NTdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA0NSArKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICAxNCAtLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICAgNyAtLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgIDcgLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgICA3ICstLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxOCArKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNjg1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gMjI1NTExYTNhZWIxOTNhOTE2YjM5OTlmMGI2NDBhMzkyY2FhNjdjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMzVdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8ICAgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1MTEyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDZmZmU3YzQ2ZjUyZDI3ODY0YzNkZjM2NjNlMTZlYzlkZGVlNzFlOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDc0ICsrKysrKysrKy0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgIDQyICsrKysrKy0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgIDUxICsrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgMzQgKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgIDE4ICsrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjM4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA5ZjIxNTg0NTE5ODFjZjBhODBjZmFiZGM3OWFlMzFiYjY5NzZhODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCBjNTFlMDE3Li5hN2JhOGRjIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2ODc3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGUzOTNlMDc2ZjFhYjgyZDI1ZTFhYTA0ZDZlZGVhMjdiNDFkM2ViMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IGU4NWJkODMuLjZhZjgzOWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI4NTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNzNmNjlkODA2ZTJjOTU2MWE1NDk5NTIyMzQzMWExMDc2Y2ZkNjE2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGM5OS1jb21wbGV4LXVnbHktaGFjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGM1N2E3NTEuLmExMzMzZTIgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTg3MzQsNiArMTg3MzQsOSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSVNPIEM5OSBzdXBwb3J0IHRvIFRSMSBpbiA8Y29tcGxleC5oPi4uLiAiID4mNjsgfQorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDExLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIwMzc5NTNlNDAzMTJiNDVhYjg0ZWQwYTNhZDg4MmJiNWU0MTMxMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MTowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzM1XSBpbmRleF9tYWNybworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlICAgICAgIHwgICAgMyArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK2luZGV4IDM4ZWIxZTguLjE1OGQyMWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK0BAIC01NSw2ICs1NSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAoraW5kZXggZDdiNWNiZC4uYjliM2FjYiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorQEAgLTQ4LDYgKzQ4LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZWZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMTA0ZTRkNjYyMDhmMjcyNmIxNGQyZjVlZWJjZTkwNzAwY2JjODNjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIGxpYnN0ZGMrKy1uYW1lc3BhY2UKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIHwgICAgNCArKystCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgICB8ICAgIDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDA2NzY1N2EuLmRkNzZhNmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNiwzICsxMTcsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisgCSB9CisgICAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggMTY2NWRkZS4uOTA1YzQzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKK0BAIC03NSwzICs3Niw0IEBACisgICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICAgICB9CisrfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhmZDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGVkYzlhY2IxODE4MTBmMjM0YjZiOWY3ZDI4MjBiMGU0ZjZhMWVlYWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDo0OCArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzM1XSBzaC1wcjI0ODM2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4CitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI0ODM2CistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZTEyYTE4MC4uMTM1YmJmNSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yMzM3OCw3ICsyMzM3OCw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlYmEzNTc3Li42MzYzYTIxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTMxNDEsNyArMzE0MSw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M0NmZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDUwZTUzNjYwMDViMGY2YWYyNzM3OGUyYTVjM2NiOWY5OTM2YTdlNjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1ODozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzM1XSBhcm06IFVzZSBUQVJHRVRfRU5ESUFOX09QVElPTiBmb3IgZGV0ZXJtaW5pbmcKKyBNVUxUSUxJQl9ERUZBVUxUUworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2NvZmYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYXJtL2NvZmYuaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKK0BAIC0zMiw4ICszMiwxMSBAQAorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKE1BU0tfQVBDU19GUkFNRSkKKyAKKyAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCisrI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNlbmRpZgorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAjZW5kaWYKKyAMCisgLyogVGhpcyBpcyBDT0ZGLCBidXQgcHJlZmVyIHN0YWJzLiAgKi8KK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9lbGYuaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9lbGYuaAorQEAgLTExNiw4ICsxMTYsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCisrI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNlbmRpZgorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisrICB7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisgI2VuZGlmCisgDAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX1NUQVJUX0FQUF9PRkYgdHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVlZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwxOTAgQEAKK0Zyb20gMTYwMzk3ZWYzYzMzMzEwOTlhZjAyOGYxYjhkM2UwODViMDdkODhhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU5OjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIGdjYzogcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjogY29kZXNvdXJjZXJ5XQorLS0tCisgZ2NjL01ha2VmaWxlLmluICAgICB8ICAgIDIgKy0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgICAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICAgIDYgKysrKysrCisgZ2NjL2NvbmZpZ3VyZSAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysrKysrLS0KKyBnY2MvY29uZmlndXJlLmFjICAgIHwgICAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKysKKyBnY2MvaW5jcGF0aC5jICAgICAgIHwgICAxOSArKysrKysrKysrKysrKysrKysrCisgOCBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29tbW9uLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29tbW9uLm9wdAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbW1vbi5vcHQKK0BAIC02MDMsNiArNjAzLDEwIEBAIFdwZWRhbnRpYworIENvbW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcKKyBJc3N1ZSB3YXJuaW5ncyBuZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZAorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcuaW4KKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcuaW4KK0BAIC0xMzgsNiArMTM4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZ3VyZQorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZQorQEAgLTkyOCw2ICs5MjgsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjQ4LDYgKzE2NDksOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yNzcwMiw2ICsyNzcwNSwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUzNjYsNiArNTM2NiwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1sCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjYwLDYgKzI2MCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgQGdvbAorIC1Xc2lnbi1jb21wYXJlICAtV3NpZ24tY29udmVyc2lvbiAtV2Zsb2F0LWNvbnZlcnNpb24gQGdvbAorQEAgLTQyMzAsNiArNDIzMSwxNCBAQCBoZWFkZXJzLS0tZm9yIHRoYXQsIEBvcHRpb257LVd1bmtub3duLXByCisgIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKKyAgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9nY2MuYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCitAQCAtNzY0LDYgKzc2NCw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9XAorICAgICAlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSAiIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiIFwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorICAgICAle2ZnbnUtdG06JTppbmNsdWRlKGxpYml0bS5zcGVjKSUobGlua19pdG0pfVwKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9pbmNwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2luY3BhdGguYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Miw2ICszODMsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3JvbworIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4YmUwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb20gMThmZGU1NzQwYjA5MzI0ZGZiOWNmNDFlOTg0OTY3MjU3M2ZmNWZhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8ICAgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICAgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDEwICsyNiw5IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorIAorIHJzNjAwMC1saW51eC5vOiAkKHNyY2RpcikvY29uZmlnL3JzNjAwMC9yczYwMDAtbGludXguYworIAkkKENPTVBJTEUpICQ8CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQ2NjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIDMwN2M4ZmYzZWY2NjZiN2JkNWFjNzMzODYzZjJmYmIyN2E5ZDUyMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDIwLzM1XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgICAgNCArKysrCisgZ2NjL2NwL2crK3NwZWMuYyAgICB8ICAgIDEgKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKystLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTEzMjMsNiArMTMyMywxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKworIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY3AvZysrc3BlYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jcC9nKytzcGVjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkXworICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0xOTMsNiArMTkzLDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdnRhYmxlLXZlcmlmeT1AdmFye3N0ZHxwcmVpbml0fG5vbmV9IEBnb2wKKyAtZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaSAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ1Nyw3ICs0NTgsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLW5vc3RhcnRmaWxlcyAgLW5vZGVmYXVsdGxpYnMgIC1ub3N0ZGxpYiAtcGllIC1yZHluYW1pYyBAZ29sCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9fQorIAorQEAgLTEwMjg1LDYgKzEwMjg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW4KKyBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKKyBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisgQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisgQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworQEAgLTc3Miw2ICs3NzIsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2M2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAwMDQ2OTZlMDU0YWU5ZGM3MWQ1MTJjYzc1NWNjYzQwNzRmYzYyYjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggYjY1ZDIxZC4uYmRhYjQ1YSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNTgyOSwxMyArMjU4MjksNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlMjI2Yjg1Li41ZjVjOTA5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQwOTksMTMgKzQwOTksNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gN2Y1YzlkY2M3MWM4YjgzYTBiNTU5NjI2NmNjNGJkZjA5MzZlOGUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA0Nzc3NTJmLi41MTA2MmFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MDk4LDYgKzQwOTgsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSBmN2Q0OWNhNDQ1ZTYwZmFhMWI1MjU2YzZiNGY5NmMxZWU1YzBlMzUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZQorIGluICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IGQxYWIyMmYuLjE1ZmU0YjYgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ4Myw3ICs0ODMsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDUzOTliMmIuLjYwYTA0YmQgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE2MzEsOCArMTE2MzEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBmODdjM2I2Li40NjBlMGQ5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3NDAsOCArMTc0MCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCBjNzE0NmVkLi5iMTUzZjQ1IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDYsNyArMTA2LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhY2Y3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGUwZDE1ZjRmOGJmMjhjMzUxYjkyMTVjYTM3ZjFjYWEyNGRmMGUxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxODo1NCArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzM1XSBQUiB0YXJnZXQvMzIyMTkKKworKiB2YXJhc20uYyAoZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEpOiBXZWFrIGRhdGEgaXMgbm90IGxvY2FsLgorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyB8ICAgMTQgKysrKysrKysrKysrKysKKyBnY2MvdmFyYXNtLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsrKystLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy92YXJhc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvdmFyYXNtLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy92YXJhc20uYworQEAgLTY3NzEsNiArNjc3MSwxMCBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsCisgICAvKiBTdGF0aWMgdmFyaWFibGVzIGFyZSBhbHdheXMgbG9jYWwuICAqLworICAgZWxzZSBpZiAoISBUUkVFX1BVQkxJQyAoZXhwKSkKKyAgICAgbG9jYWxfcCA9IHRydWU7CisrICAvKiBoaWRkZW4gd2VhayBjYW4ndCBiZSBvdmVycmlkZGVuIGJ5IHNvbWV0aGluZyBub24tbG9jYWwsIGFsbAorKyAgICAgdGhhdCBpcyBwb3NzaWJsZSBpcyB0aGF0IGl0IGlzIG5vdCBkZWZpbmVkIGF0IGFsbC4gKi8KKysgIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKSkKKysgICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogQSB2YXJpYWJsZSBpcyBsb2NhbCBpZiB0aGUgdXNlciBoYXMgc2FpZCBleHBsaWNpdGx5IHRoYXQgaXQgd2lsbAorICAgICAgYmUuICAqLworICAgZWxzZSBpZiAoKERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQgKGV4cCkKK0BAIC02Nzg0LDExICs2Nzg4LDYgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLAorICAgICAgbG9jYWwuICAqLworICAgZWxzZSBpZiAoREVDTF9WSVNJQklMSVRZIChleHApICE9IFZJU0lCSUxJVFlfREVGQVVMVCkKKyAgICAgbG9jYWxfcCA9IHRydWU7CistICAvKiBEZWZhdWx0IHZpc2liaWxpdHkgd2VhayBkYXRhIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Ryb25nIHN5bWJvbAorLSAgICAgaW4gYW5vdGhlciBtb2R1bGUgYW5kIHNvIGFyZSBub3QgbG9jYWwuICAqLworLSAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApCistCSAgICYmICFyZXNvbHZlZF9sb2NhbGx5KQorLSAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBJZiBQSUMsIHRoZW4gYXNzdW1lIHRoYXQgYW55IGdsb2JhbCBuYW1lIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgICAgICBzeW1ib2xzIHJlc29sdmVkIGZyb20gb3RoZXIgbW9kdWxlcy4gICovCisgICBlbHNlIGlmIChzaGxpYikKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMi5jCitAQCAtMCwwICsxLDEzIEBACisrLyogUFIgdGFyZ2V0LzMyMjE5ICovCisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctcmVxdWlyZS12aXNpYmlsaXR5ICIiIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1mUElDIiB7IHRhcmdldCBmcGljIH0gfSAqLworKworK2V4dGVybiB2b2lkIGYoKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLHZpc2liaWxpdHkoImhpZGRlbiIpKSk7CisrZXh0ZXJuIGludCBwdXRzKCBjaGFyIGNvbnN0KiApOworK2ludCBtYWluKCkKKyt7CisrICBpZiAoZikKKysgICAgZigpOworKyAgcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGEwZjliZDA5YzgxNmFkMjllY2Y3YzI5ZDZjMjdmN2RmOTc3MTAzNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8ICAgIDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGEwMDFjM2UuLjFhYWUxZTQgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1MTA2MmFhLi5jZjZiOTllIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKKyBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKKy0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCisrCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWQyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjI4IEBACitGcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjMsOCArMjMsOCBAQAorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNTcsNyArNTcsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIwLDQgKzIwLDQgQEAKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjcsNiArMjcsNiBAQAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTE4LDggKzE4LDggQEAKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjMsMjAgKzIzLDIwIEBACisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliNjQvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWI2NC9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliMzIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliL2xkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkNjQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wfSIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYjMyL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0zNjcsMTQgKzM2NywxNCBAQAorICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQworICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6L2xpYjY0L2xkNjQuc28uMTs6L2xpYjY0L2xkNjQuc28uMn0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjJ9IgorICNlbHNlCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjF9IgorICNlbmRpZgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc2gvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC00Myw3ICs0Myw3IEBACisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC04Myw3ICs4Myw3IEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC05Miw4ICs5Miw4IEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTczLDEwICs3MywxMCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGMxODE2YzE2MDE1NmY5OWMzNGU2YTBhMDMxMWJiMDIxOTMyNjgwNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggMjMyMDQ5Ny4uODU2MmE2MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDYyNyw3ICs0NjI3LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzZjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOTdlNDU5MWMyMDMxMDQyNWU3YWNhMGU2NzEyYThkOTQ4MGU3NzQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBFQUJJX0xJTktfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDM0LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjlmODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIGZjNWU0YmVhZWE4NTZhMmI0ODZjNzcwYWQzYWRkYzBmNWJiMzEwMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMzowNCArMDQwMAorU3ViamVjdDogW1BBVENIIDM0LzM1XSBVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZgorIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorCitVc2UgdGhlIG11bHRpbGliIGNvbmZpZyBmaWxlcyBmcm9tICR7Qn0gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KK3NvIHRoYXQgdGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAyMiArKysrKysrKysrKysrKysrKystLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA4YmMwYzk4Li4zY2QwODE3IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExNTE5LDEwICsxMTUxOSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExNTMzLDYgKzExNTQzLDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDVlNWU4NGYuLjQxNWE2ZGYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTcwMCwxMCArMTcwMCwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE3MTQsNiArMTcyNCwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjE5MDJhOTAgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmODY0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQzLWNwcC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGUgT0UgZW52aXJvbm1lbnQgc2V0cyBhbmQgZXhwb3J0cyBDUFAgYXMgYmVpbmcgdGhlIHRhcmdldCBnY2MuIFdoZW4gYnVpbGRpbmcgCitnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQgaW4KK2J1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyICBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZSB1c2luZyAKK3RoZSBob3N0ICJnY2MiLCBub3QgeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MuIFNpbmNlIHRoZSBtaW5ndzMyIGhlYWRlcnMgYXJlIAordmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcgaW50byAKK2NvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZCBmYWlsdXJlcyAKK3JlbGF0ZWQgdG8gbm90IGJlaW5nIGFibGUgdG8gaW5jbHVkZSBhIHByb2Nlc3MuaCBmaWxlIGZvciBwZW0tdW5peC5jLgorCitUaGUgZml4IGlzIHRvIGVuc3VyZSB3ZSBleHBvcnQgYSBzYW5lIENQUCB2YWx1ZSBpbnRvIHRoZSBidWlsZCBlbnZpcm9ubWVudCB3aGVuCit1c2luZyBidWlsZCB0YXJnZXRzLiBXZSBjb3VsZCBkZWZpbmUgYSBDUFBfRk9SX0JVSUxEIHZhbHVlIHdoaWNoIG1heSBiZSB0aGUgdmVyc2lvbgord2hpY2ggbmVlZHMgdG8gYmUgdXBzdHJlYW1lZCBidXQgZm9yIG5vdywgdGhpcyBmaXggaXMgZ29vZCBlbm91Z2ggdG8gYXZvaWQgdGhlIAorcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDMtMzAgMTE6MjU6MDMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL01ha2VmaWxlLmluCTIwMTMtMDgtMTMgMTI6MDM6MTcuMTUxOTg4ODgyICswMDAwCitAQCAtMTQ5LDYgKzE0OSw3IEBACisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3NjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2dlbmd0eXBlIGlzIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgdGFyZ2V0LiAtREdFTkVSQVRPUl9GSUxFCit3YXMgYWRkZWQgaW4gdGhlIHBhdGNoIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDEyLTA3L21zZzAwMjczLmh0bWwKK2FuZCB3YXMgYXBwbGllZCB0byBib3RoIHZlcnNpb25zIG9mIGdlbmd0eXBlLgorCitVbmZvcnR1bmF0ZWx5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIGZsYWcgdHJpZ2dlcnMgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKGJjb25maWcuaCkgCit0byBiZSBpbmNsdWRlZCBmb3IgdGhlIHRhcmdldCBidWlsZCBvZiBnZW5ndHlwZS4gQ29tcGlsaW5nIGdlbmd0eXBlIHdpdGggdGhlIHRhcmdldCAKK2NvbXBpbGVyIGFuZCBiY29uZmlnLmggY2FuIHJlc3VsdCBpbiBlcnJvcnMgaWYgdGhlIGJ1aWxkIGFuZCB0YXJnZXQgc3lzdGVtcyBhcmUgCitkaXNzaW1pbGFyLiBBbiBleGFtcGxlIGNhc2UgdGhpcyBmYWlscyBpcyBjcm9zcyBjb21waWxpbmcgZ2NjIG9uIGxpbnV4IGZvciBhIGRhcndpbiAKK3RhcmdldCBzeXN0ZW06CisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6MjU6MDoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOiBJbiBmdW5jdGlvbiAndm9pZCBwYXJzZV9lcnJvcihjb25zdCBjaGFyKiwgLi4uKSc6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2Mvc3lzdGVtLmg6OTM6NTM6IGVycm9yOiAnZnB1dGNfdW5sb2NrZWQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorfCAgIyAgZGVmaW5lIGZwdXRjKEMsIFN0cmVhbSkgZnB1dGNfdW5sb2NrZWQgKEMsIFN0cmVhbSkKKword2hpY2ggb2NjdXJzIHNpbmNlIGF1dG8tYnVpbGQuaCBhbmQgYXV0by1ob3N0LmggaGF2ZSBkaWZmZXJuZXQgdmFsdWVzIG9mCitIQVZFX0ZQVVRDX1VOTE9DS0VEOgorCisjZGVmaW5lIEhBVkVfRlBVVENfVU5MT0NLRUQgMQorLyogI3VuZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQgKi8KKworVGhlIG9idmlvdXMgZml4IGlzIHRvIG9ubHkgaW5jbHVkZSB0aGUgZmxhZyBvbiBidWlsZC8gdGFyZ2V0cyB3aGljaCB0aGlzIHBhdGNoIGRvZXMsIGhvd2V2ZXIgCit0aGlzIGFsc28gbGVhZHMgdG8gY29tcGlsZSBlcnJvcnMgZHVlIHRvIGNvbnN0X3RyZWUgYmVpbmcgdW5kZWZpbmVkIGJ1dCB1c2VkIGluIGRvdWJsZV9pbnQuaAorCitJIGFkZGVkIGEgR0VORVJBVE9SX0ZJTEUyIGZsYWcgdG8gd29ya2Fyb3VuZCB0aG9zZSBpbiB0aGUgCit0YXJnZXQgY2FzZSBhbmQgYWxsb3cgdGhlIGJ1aWxkIHRvIHN1Y2NlZWQuCisKK09ubHkgdGhlIGJ1aWxkL2dlbmd0eXBlcyBzaG91bGQgaGF2ZSB0aGUgLURHRU5FUkFUT1JfRklMRSAKKworUlAgMjIvOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM2Ljg0NDAxNDQyNCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNy43ODQwMTQ0MDIgKzAwMDAKK0BAIC0zOTAzLDI3ICszOTAzLDI5IEBACisgCisgZ2VuZ3R5cGUtbGV4Lm8gYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gOiBnZW5ndHlwZS1sZXguYyBnZW5ndHlwZS5oICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtbGV4Lm86ICQoQ09ORklHX0gpICQoQkNPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1sZXgubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtcGFyc2UubyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vIDogZ2VuZ3R5cGUtcGFyc2UuYyBnZW5ndHlwZS5oIFwKKyAgICQoU1lTVEVNX0gpCisgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLXN0YXRlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLm8gYnVpbGQvZ2VuZ3R5cGUubyA6IGdlbmd0eXBlLmMgJChTWVNURU1fSCkgZ2VuZ3R5cGUuaCAJXAorICAgcnRsLmRlZiBpbnNuLW5vdGVzLmRlZiBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSBcCisgICAkKE9CU1RBQ0tfSCkgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBidWlsZC9nZW5tZGRlcHMubzogZ2VubWRkZXBzLmMgJChCQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oCVwKK0BAIC0zOTg4LDcgKzM5OTAsNyBAQAorICMgYW55IHN5c3RlbSBoZWFkZXIgaXMgaW5jbHVkZWQuCisgZ2VuZ3R5cGUtbGV4LmMgOiBnZW5ndHlwZS1sZXgubAorIAktJChGTEVYKSAkKEZMRVhGTEFHUykgLW8kQCAkPCAmJiB7IFwKKy0JICBlY2hvICcjaW5jbHVkZSAiYmNvbmZpZy5oIicgPiAkQC50bXA7IFwKKysJICBlY2hvICcnID4gJEAudG1wOyBcCisgCSAgY2F0ICRAID4+ICRALnRtcDsgXAorIAkgIG12ICRALnRtcCAkQDsgXAorIAl9CitJbmRleDogZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvZG91YmxlLWludC5oCTIwMTMtMDEtMzAgMTE6MDQ6MzAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9kb3VibGUtaW50LmgJMjAxMy0wOC0xOSAxMTo0MTo1MS41NjQwMTI3MTkgKzAwMDAKK0BAIC00NDgsMTAgKzQ0OCwxMiBAQAorIAorIAorICNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKysjaWZuZGVmIEdFTkVSQVRPUl9GSUxFMgorIC8qIENvbnZlcnNpb24gdG8gYW5kIGZyb20gR01QIGludGVnZXIgcmVwcmVzZW50YXRpb25zLiAgKi8KKyAKKyB2b2lkIG1wel9zZXRfZG91YmxlX2ludCAobXB6X3QsIGRvdWJsZV9pbnQsIGJvb2wpOworIGRvdWJsZV9pbnQgbXB6X2dldF9kb3VibGVfaW50IChjb25zdF90cmVlLCBtcHpfdCwgYm9vbCk7CisgI2VuZGlmCisrI2VuZGlmCisgCisgI2VuZGlmIC8qIERPVUJMRV9JTlRfSCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTRmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorZ2NjIDQuOCB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIHNpbmNlIHRoZSAqLlBwbyBmaWxlcworZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQIAorMjAxMi8wOS8yMgorCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTE0IDE4OjE2OjIzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wOS0yMiAxMDozODoxOC45MDQwNjQ3NTAgKzAwMDAKK0BAIC0xMDAsNyArMTAwLDggQEAKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0gCisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDUtMzEgMDk6MDk6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA5LTIyIDEwOjQwOjQyLjUyMDA1OTkxNyArMDAwMAorQEAgLTI5OCw3ICsyOTgsOCBAQAorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPSAKKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDctcmVwb21lbWJ1Zy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZDU1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorV2hlbiBjb21waWxpbmcgYSBwcm9qZWN0IHVzaW5nIC1mcmVwbywgLnJwbyBmaWxlcyBhcmUgd3JpdHRlbiBhbG9uZ3NpZGUKK3RoZSAubyBmaWxlLCB0aGUgc3ltYm9scyBlaXRoZXIgaGF2ZSBPIG9yIEMgYWdhaW5zdCB0aGVtLiBEdXJpbmcgZmluYWwgbGlua2luZywKK3RoZSBvYmplY3RzIGNhbiBiZSByZWNvbXBpbGVkIHdpdGggc29tZSBvZiB0aGUgZW50cmllcyB0d2Vha2VkL2Nob3NlbiBieSB0aGUgCit0bGluay5jIGNvZGUgKHZpc2libGUgd2l0aCBUTElOS19WRVJCT1NFPTMpLCBpdCBkb2VzIHRoaXMgYnkgY2hhbmdpbmcgTyAtPiBDCitpbiB0aGUgLnJwbyBmaWxlcy4KKworTXkgdGVzdHMgc2hvd2VkIHRoYXQgaW5pdF9yZXBvIChjcC9yZXBvLmMpIHdhcyBjb3JyZWN0bHkgY2FsbGluZyAKK0lERU5USUZJRVJfUkVQT19DSE9TRU4gYWdhaW5zdCB0aGUgcmlnaHQgaWRlbnRpZmVycyBhbmQgc2V0dGluZyB0aGUKK2Nob3NlbiBiaXQuCisKK0J5IHRoZSB0aW1lIGZpbmlzaF9yZXBvKCkgb3IgZW1pdF9yZXBvX3AoKSB3ZXJlIGNhbGxlZCwgdGhlIHBvaW50ZXIgcmV0dXJuZWQKK2J5IGdldF9pZGVudGlmaWVyKCkgZm9yIHRoZSBzeW1ib2wgbWFya2VkIGR1cmluZyBpbml0X3JlcG8gaGFkIGNoYW5nZWQgYW5kCit0aGUgY2hvc2VuIGJpdCB3YXMgbm8gbG9uZ2VyIHNldC4gVGhpcyBsZWFkIHRvIGxpbmtpbmcgYnVncyBsaWtlOgorCitjb2xsZWN0OiByZWxpbmtpbmcKK2NvbGxlY3QyOiBlcnJvcjogJ19aTks2c3Vkb2t1NUNsZWFySU5TXzhTZXF1ZW5jZUVFY2xFUlMxXycgd2FzIGFzc2lnbmVkIHRvICdib2FyZC5ycG8nLCBidXQgd2FzIG5vdCBkZWZpbmVkIGR1cmluZyByZWNvbXBpbGF0aW9uLCBvciB2aWNlIHZlcnNhCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBnZXR0aW5nIGNhbGxlZCBiZWZvcmUKK2ZpbmlzaF9yZXBvKCkgaXMgY2FsbGVkIGFuZCBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyBpcyBzZXQgdG8gZmFsc2UgCitzbyB0aGUgaWRlbnRpZmllcnMgYXJlIG5vdCBwcmVzZXJ2ZWQuIFRoZXkgYXJlIHJlY3JlYXRlZCBidXQgdGhlIAorY2hvc2VuIGJpdHMgZ2V0IHdpcGVkIG91dCB3aGljaCBpcyB3aHkgdGhlIHBvaW50ZXIgY2hhbmdlcyBhbmQgdGhlIAorY2hvc2VuIGJpdCBpcyBub3Qgc2V0LgorCitUaGUgZml4IGlzIHRvIGNoYW5nZSBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyAqYWZ0ZXIqIHRoZSBmaW5pc2hfcmVwbyAKK2NhbGxzIGFyZSBtYWRlLgorCitSZXByb2R1Y3Rpb24gaXMgdHJpY2t5IHNpbmNlIHlvdSBuZWVkIHRvIHRyaWdnZXIgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGF0CitqdXN0IHRoZSByaWdodCBtb21lbnQuCisKK1JQIDIwMTMvMTAvOQorCitbWU9DVE8gIzUxMzNdCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL2djYy90b3BsZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy90b3BsZXYuYwkyMDEzLTAzLTI4IDA4OjI5OjUxLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvdG9wbGV2LmMJMjAxMy0xMC0wOSAyMDoyNzoxNy4wODkyMjgwMjMgKzAwMDAKK0BAIC01NTEsMTEgKzU1MSwxMSBAQAorICAgaWYgKGZsYWdfc3ludGF4X29ubHkgfHwgZmxhZ193cGEpCisgICAgIHJldHVybjsKKyAKKy0gIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CistCisgICAvKiBUaGlzIG11c3QgYWxzbyBjYWxsIGZpbmFsaXplX2NvbXBpbGF0aW9uX3VuaXQuICAqLworICAgbGFuZ19ob29rcy5kZWNscy5maW5hbF93cml0ZV9nbG9iYWxzICgpOworIAorKyAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKysKKyAgIGlmIChzZWVuX2Vycm9yICgpKQorICAgICByZXR1cm47CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThmOGZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDllMGUxOWVhYzI1NjJmNzM4NTg2MDJmZTI2ZTIwNDRlYjhiMjBjNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CitEYXRlOiBXZWQsIDUgRmViIDIwMTQgMTY6NTI6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRW5hYmxlIFNQRSAmIEFsdGlWZWMgZ2VuZXJhdGlvbiBvbiBwb3dlcGMqbGludXggdGFyZ2V0CisKK1doZW4gaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXgsIHRoZSByZXN1bHRpbmcgR0NDIHdpbGwgCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8ICAgIDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGNiN2E5NGUuLmQzOTJjMmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMDY4LDcgKzIwNjgsMTIgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1ydGVtcyB0LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIKKysJY2FzZSAke3RhcmdldH0gaW4KKysJICAgIHBvd2VycGMqLSotbGludXgqc3BlKiB8IHBvd2VycGMqLSotbGludXgqYWx0aXZlYyopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiIDs7CisrCSAgICAqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIiA7OworKwllc2FjCisgCWV4dHJhX29wdGlvbnM9IiR7ZXh0cmFfb3B0aW9uc30gcnM2MDAwL3N5c3Y0Lm9wdCIKKyAJdG1ha2VfZmlsZT0icnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNvcyAke3RtYWtlX2ZpbGV9IHJzNjAwMC90LXBwY2NvbW0iCisgCWNhc2UgJHt0YXJnZXR9IGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWQ2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gY2I5YjFjMDQxYjYzNGE0YzEyODg5NmUzZDNlZWQ0MDgyNjA4Yzc5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDMgTWF5IDIwMTQgMTk6MjU6MTcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICIyMDEzLTA1LTIxICBDaHJpc3RpYW4gQnJ1ZWwgCisgPGNocmlzdGlhbi5icnVlbEBzdC5jb20+IgorCitUaGlzIHJldmVydHMgY29tbWl0IDM5ODMwMzZhOGI2YjI3MTBjNTc3NzcxOTRmMjE1MDc4MTlhNzM1NTMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0NvbmZsaWN0czoKKwlnY2MvQ2hhbmdlTG9nCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgfCAyMTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyBnY2MvZHdhcmYyb3V0LmMgfCAgMzMgKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMzQgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZHdhcmYyb3V0LmMgYi9nY2MvZHdhcmYyb3V0LmMKK2luZGV4IDEyNzIzMjYuLjZhYzJiMjggMTAwNjQ0CistLS0gYS9nY2MvZHdhcmYyb3V0LmMKKysrKyBiL2djYy9kd2FyZjJvdXQuYworQEAgLTEwODcwLDI3ICsxMDg3MCwyNSBAQCBzdGF0aWMgZHdfbG9jX2Rlc2NyX3JlZgorIG11bHRpcGxlX3JlZ19sb2NfZGVzY3JpcHRvciAocnR4IHJ0bCwgcnR4IHJlZ3MsCisgCQkJICAgICBlbnVtIHZhcl9pbml0X3N0YXR1cyBpbml0aWFsaXplZCkKKyB7CistICBpbnQgc2l6ZSwgaTsKKysgIGludCBucmVncywgc2l6ZSwgaTsKKysgIHVuc2lnbmVkIHJlZzsKKyAgIGR3X2xvY19kZXNjcl9yZWYgbG9jX3Jlc3VsdCA9IE5VTEw7CisgCistICAvKiBTaW1wbGUsIGNvbnRpZ3VvdXMgcmVnaXN0ZXJzLiAgKi8KKy0gIGlmIChyZWdzID09IE5VTExfUlRYKQorLSAgICB7CistICAgICAgdW5zaWduZWQgcmVnID0gUkVHTk8gKHJ0bCk7CistICAgICAgaW50IG5yZWdzOworLQorKyAgcmVnID0gUkVHTk8gKHJ0bCk7CisgI2lmZGVmIExFQUZfUkVHX1JFTUFQCistICAgICAgaWYgKGNydGwtPnVzZXNfb25seV9sZWFmX3JlZ3MpCistCXsKKy0JICBpbnQgbGVhZl9yZWcgPSBMRUFGX1JFR19SRU1BUCAocmVnKTsKKy0JICBpZiAobGVhZl9yZWcgIT0gLTEpCistCSAgICByZWcgPSAodW5zaWduZWQpIGxlYWZfcmVnOworLQl9CisrICBpZiAoY3J0bC0+dXNlc19vbmx5X2xlYWZfcmVncykKKysgICAgeworKyAgICAgIGludCBsZWFmX3JlZyA9IExFQUZfUkVHX1JFTUFQIChyZWcpOworKyAgICAgIGlmIChsZWFmX3JlZyAhPSAtMSkKKysJcmVnID0gKHVuc2lnbmVkKSBsZWFmX3JlZzsKKysgICAgfQorICNlbmRpZgorKyAgZ2NjX2Fzc2VydCAoKHVuc2lnbmVkKSBEQlhfUkVHSVNURVJfTlVNQkVSIChyZWcpID09IGRieF9yZWdfbnVtYmVyIChydGwpKTsKKysgIG5yZWdzID0gaGFyZF9yZWdub19ucmVnc1tSRUdOTyAocnRsKV1bR0VUX01PREUgKHJ0bCldOworIAorLSAgICAgIGdjY19hc3NlcnQgKCh1bnNpZ25lZCkgREJYX1JFR0lTVEVSX05VTUJFUiAocmVnKSA9PSBkYnhfcmVnX251bWJlciAocnRsKSk7CistICAgICAgbnJlZ3MgPSBoYXJkX3JlZ25vX25yZWdzW1JFR05PIChydGwpXVtHRVRfTU9ERSAocnRsKV07CistCisrICAvKiBTaW1wbGUsIGNvbnRpZ3VvdXMgcmVnaXN0ZXJzLiAgKi8KKysgIGlmIChyZWdzID09IE5VTExfUlRYKQorKyAgICB7CisgICAgICAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChydGwpKSAvIG5yZWdzOworIAorICAgICAgIGxvY19yZXN1bHQgPSBOVUxMOworQEAgLTEwOTE4LDkgKzEwOTE2LDEwIEBAIG11bHRpcGxlX3JlZ19sb2NfZGVzY3JpcHRvciAocnR4IHJ0bCwgcnR4IHJlZ3MsCisgICAgIHsKKyAgICAgICBkd19sb2NfZGVzY3JfcmVmIHQ7CisgCistICAgICAgdCA9IG9uZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKGRieF9yZWdfbnVtYmVyIChYVkVDRVhQIChyZWdzLCAwLCBpKSksCisrICAgICAgdCA9IG9uZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKFJFR05PIChYVkVDRVhQIChyZWdzLCAwLCBpKSksCisgCQkJCSAgVkFSX0lOSVRfU1RBVFVTX0lOSVRJQUxJWkVEKTsKKyAgICAgICBhZGRfbG9jX2Rlc2NyICgmbG9jX3Jlc3VsdCwgdCk7CisrICAgICAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKEdFVF9NT0RFIChYVkVDRVhQIChyZWdzLCAwLCAwKSkpOworICAgICAgIGFkZF9sb2NfZGVzY3Jfb3BfcGllY2UgKCZsb2NfcmVzdWx0LCBzaXplKTsKKyAgICAgfQorIAorLS0gCisxLjkuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1MS1lYWJpc3BlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUzODkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGFrZW4gZnJvbSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNC9tc2cwMjA2NC5odG1sCisKKzIwMTQtMDQtMzAgIENlc2FyIFBoaWxpcHBpZGlzICA8Y2VzYXJAY29kZXNvdXJjZXJ5LmNvbT4KKworCWdjYy8KKwkqIGR3YXJmMmNmaS5jIChkd2ZfcmVnbm8pOiBEb24ndCBhc3NlcnQgcmVnIGlzIGEgcHNldWRvCisJcmVnaXN0ZXIuCisJCisKK2RpZmYgLS1naXQgYS9nY2MvZHdhcmYyY2ZpLmMgYi9nY2MvZHdhcmYyY2ZpLmMKK2luZGV4IDQxODA4OTAuLjQwZWYwZTIgMTAwNjQ0CistLS0gYS9nY2MvZHdhcmYyY2ZpLmMKKysrKyBiL2djYy9kd2FyZjJjZmkuYworQEAgLTkwNiw3ICs5MDYsNiBAQCBub3RpY2VfZWhfdGhyb3cgKHJ0eCBpbnNuKQorIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQKKyBkd2ZfcmVnbm8gKGNvbnN0X3J0eCByZWcpCisgeworLSAgZ2NjX2Fzc2VydCAoUkVHTk8gKHJlZykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpOworICAgcmV0dXJuIERXQVJGX0ZSQU1FX1JFR05VTSAoUkVHTk8gKHJlZykpOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTU4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoCkBAIC0wLDAgKzEsMTM4IEBACitGcm9tIGQ2MjYyOTdlODdlMTkyNTFhMjg0ZWExZTkzNjBlODMxYjQ4OTk5Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBtcGYgPG1wZkAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBUaHUsIDQgU2VwIDIwMTQgMDg6MzI6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRhcmdldCBob29rIHRvIG92ZXJyaWRlIERXQVJGMiBmcmFtZSByZWdpc3RlciBzaXplCisKK2djYy8KKworCSogdGFyZ2V0LmRlZiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogTmV3IHRhcmdldCBob29rLgorCSogdGFyZ2hvb2tzLmMgKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgZnVuY3Rpb24uCisJKiB0YXJnaG9va3MuaCAoZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSk6IE5ldyBwcm90b3R5cGUuCisJKiBkb2MvdG0udGV4aS5pbiAoVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFKTogRG9jdW1lbnQuCisJKiBkb2MvdG0udGV4aTogUmVnZW5lcmF0ZS4KKwkqIGR3YXJmMmNmaS5jIChleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyk6IEFic3RyYWN0IG1vZGUKKwlzZWxlY3Rpb24gbG9naWMgdG8gZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZS4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNDg5OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICB8IDEwICsrKysrKysrKysKKyBnY2MvZG9jL3RtLnRleGkgICAgfCAgNyArKysrKysrCisgZ2NjL2RvYy90bS50ZXhpLmluIHwgIDIgKysKKyBnY2MvZHdhcmYyY2ZpLmMgICAgfCAgNCArLS0tCisgZ2NjL3RhcmdldC5kZWYgICAgIHwgMTEgKysrKysrKysrKysKKyBnY2MvdGFyZ2hvb2tzLmMgICAgfCAxMyArKysrKysrKysrKysrCisgZ2NjL3Rhcmdob29rcy5oICAgIHwgIDEgKworIDcgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkKKysrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCitAQCAtOTAxNyw2ICs5MDE3LDEzIEBAIHJlZ2lzdGVyIGluIER3YXJmLiAgT3RoZXJ3aXNlLCB0aGlzIGhvb2sKKyBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIEBjb2Rle05VTExfUlRYfS4KKyBAZW5kIGRlZnR5cGVmbgorIAorK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB7ZW51bSBtYWNoaW5lX21vZGV9IFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSAoaW50IEB2YXJ7cmVnbm99KQorK0dpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZQorK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5CisrdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsCisrY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUKKytAZW5kIGRlZnR5cGVmbgorKworIEBkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB2b2lkIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQSAodHJlZSBAdmFye2FkZHJlc3N9KQorIElmIHNvbWUgcmVnaXN0ZXJzIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZi0yIHVud2luZCBpbmZvcm1hdGlvbiBpbgorIG11bHRpcGxlIHBpZWNlcywgZGVmaW5lIHRoaXMgaG9vayB0byBmaWxsIGluIGluZm9ybWF0aW9uIGFib3V0IHRoZQorSW5kZXg6IGdjYy00LjkuMi9nY2MvZG9jL3RtLnRleGkuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZG9jL3RtLnRleGkuaW4KKysrKyBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCitAQCAtNjc0NSw2ICs2NzQ1LDggQEAgdGhlIHRhcmdldCBzdXBwb3J0cyBEV0FSRiAyIGZyYW1lIHVud2luZAorIAorIEBob29rIFRBUkdFVF9EV0FSRl9SRUdJU1RFUl9TUEFOCisgCisrQGhvb2sgVEFSR0VUX0RXQVJGX0ZSQU1FX1JFR19NT0RFCisrCisgQGhvb2sgVEFSR0VUX0lOSVRfRFdBUkZfUkVHX1NJWkVTX0VYVFJBCisgCisgQGhvb2sgVEFSR0VUX0FTTV9UVFlQRQorSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjcxLDExICsyNzEsOSBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCisgICAgICAgaWYgKHJudW0gPCBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCisgCXsKKyAJICBIT1NUX1dJREVfSU5UIG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChtb2RlKTsKKy0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbaV07CisgCSAgSE9TVF9XSURFX0lOVCBzaXplOworKwkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworIAorLQkgIGlmIChIQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQgKGksIHNhdmVfbW9kZSkpCistCSAgICBzYXZlX21vZGUgPSBjaG9vc2VfaGFyZF9yZWdfbW9kZSAoaSwgMSwgdHJ1ZSk7CisgCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKyAJICAgIHsKKyAJICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2V0LmRlZgorKysrIGdjYy00LjkuMi9nY2MvdGFyZ2V0LmRlZgorQEAgLTMyMTgsNiArMzIxOCwxNyBAQCBJZiBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuCisgIHJ0eCwgKHJ0eCByZWcpLAorICBob29rX3J0eF9ydHhfbnVsbCkKKyAKKysvKiBHaXZlbiBhIHJlZ2lzdGVyIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgY29ycmVzcG9uZGluZyBEV0FSRiBmcmFtZQorKyAgIHJlZ2lzdGVyLiAgKi8KKytERUZIT09LCisrKGR3YXJmX2ZyYW1lX3JlZ19tb2RlLAorKyAiR2l2ZW4gYSByZWdpc3RlciwgdGhpcyBob29rIHNob3VsZCByZXR1cm4gdGhlIG1vZGUgd2hpY2ggdGhlXG5cCisrY29ycmVzcG9uZGluZyBEd2FyZiBmcmFtZSByZWdpc3RlciBzaG91bGQgaGF2ZS4gIFRoaXMgaXMgbm9ybWFsbHlcblwKKyt1c2VkIHRvIHJldHVybiBhIHNtYWxsZXIgbW9kZSB0aGFuIHRoZSByYXcgbW9kZSB0byBwcmV2ZW50IGNhbGxcblwKKytjbG9iYmVyZWQgcGFydHMgb2YgYSByZWdpc3RlciBhbHRlcmluZyB0aGUgZnJhbWUgcmVnaXN0ZXIgc2l6ZSIsCisrIGVudW0gbWFjaGluZV9tb2RlLCAoaW50IHJlZ25vKSwKKysgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSkKKysKKyAvKiBJZiBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyBuZWVkcyB0byBmaWxsIGluIHRhYmxlCisgICAgZW50cmllcyBub3QgY29ycmVzcG9uZGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMgYmVsb3cKKyAgICBGSVJTVF9QU0VVRE9fUkVHSVNURVIsIHRoaXMgaG9vayBzaG91bGQgZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeQorSW5kZXg6IGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvdGFyZ2hvb2tzLmMKKysrKyBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCitAQCAtMTQzOCw2ICsxNDM4LDE5IEBAIGRlZmF1bHRfZGVidWdfdW53aW5kX2luZm8gKHZvaWQpCisgICByZXR1cm4gVUlfTk9ORTsKKyB9CisgCisrLyogRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG1vZGUgZm9yIGEgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgdGhhdCByZXByZXNlbnRzCisrICAgcmVnaXN0ZXIgUkVHTk8uICAqLworKworK2VudW0gbWFjaGluZV9tb2RlCisrZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50IHJlZ25vKQorK3sKKysgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHJlZ19yYXdfbW9kZVtyZWdub107CisrCisrICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChyZWdubywgc2F2ZV9tb2RlKSkKKysgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKHJlZ25vLCAxLCB0cnVlKTsKKysgIHJldHVybiBzYXZlX21vZGU7CisrfQorKworIC8qIFRvIGJlIHVzZWQgYnkgdGFyZ2V0cyB3aGVyZSByZWdfcmF3X21vZGUgZG9lc24ndCByZXR1cm4gdGhlIHJpZ2h0CisgICAgbW9kZSBmb3IgcmVnaXN0ZXJzIHVzZWQgaW4gYXBwbHlfYnVpbHRpbl9yZXR1cm4gYW5kIGFwcGx5X2J1aWx0aW5fYXJnLiAgKi8KKyAKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5oCisrKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAorQEAgLTE5NCw2ICsxOTQsNyBAQCBleHRlcm4gaW50IGRlZmF1bHRfbGFiZWxfYWxpZ25fbWF4X3NraXAKKyBleHRlcm4gaW50IGRlZmF1bHRfanVtcF9hbGlnbl9tYXhfc2tpcCAocnR4KTsKKyBleHRlcm4gc2VjdGlvbiAqIGRlZmF1bHRfZnVuY3Rpb25fc2VjdGlvbih0cmVlIGRlY2wsIGVudW0gbm9kZV9mcmVxdWVuY3kgZnJlcSwKKyAJCQkJCSAgYm9vbCBzdGFydHVwLCBib29sIGV4aXQpOworK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlIChpbnQpOworIGV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBkZWZhdWx0X2dldF9yZWdfcmF3X21vZGUgKGludCk7CisgCisgZXh0ZXJuIHZvaWQgKmRlZmF1bHRfZ2V0X3BjaF92YWxpZGl0eSAoc2l6ZV90ICopOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTMtZ2NjLWZpeC1zZWdmYXVsdC1mcm9tLWNhbGxpbmctZnJlZS1vbi1ub24tbWFsbG9jLWQtYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNDQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSBhMjJhMjIyYzhmOTI5OWY2YzA3YTAyNzQzODhhZGU3ZDRhYjhjMjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIwIEp1biAyMDE0IDE2OjQxOjA4IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdjYzogZml4IHNlZ2ZhdWx0IGZyb20gY2FsbGluZyBmcmVlIG9uIG5vbi1tYWxsb2MnZCBhcmVhCisKK1dlIHNlZSB0aGUgZm9sbG93aW5nIG9uIGEgMzJiaXQgZ2NjIGluc3RhbGxlZCBvbiA2NCBiaXQgaG9zdDoKKworICBSZWFkaW5nIHN5bWJvbHMgZnJvbSAuL2k1ODYtcG9reW1sbGliMzItbGludXgtZ2NjLi4uZG9uZS4KKyAgKGdkYikgcnVuCisgIFN0YXJ0aW5nIHByb2dyYW06IHg4Ni1wb2t5bWxsaWIzMi1saW51eC9saWIzMi1nY2MvNC45LjAtcjAvaW1hZ2UvdXNyL2Jpbi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYworCisgIFByb2dyYW0gcmVjZWl2ZWQgc2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4KKyAgMHhmN2U5NTdlMCBpbiBmcmVlICgpIGZyb20gL2xpYi9pMzg2LWxpbnV4LWdudS9saWJjLnNvLjYKKyAgKGdkYikgYnQKKyAgIzAgIDB4ZjdlOTU3ZTAgaW4gZnJlZSAoKSBmcm9tIC9saWIvaTM4Ni1saW51eC1nbnUvbGliYy5zby42CisgICMxICAweDA4MDRiNzNjIGluIHNldF9tdWx0aWxpYl9kaXIgKCkgYXQgZ2NjLTQuOS4wL2djYy9nY2MuYzo3ODI3CisgICMyICBtYWluIChhcmdjPTEsIGFyZ3Y9MHhmZmZmZDUwNCkgYXQgZ2NjLTQuOS4wL2djYy9nY2MuYzo2Njg4CisgIChnZGIpCisKK1RoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIHdlIGNvbmRpdGlvbmFsbHkgYXNzaWduIHRoZSBwb2ludGVyIHdlCitldmVudHVhbGx5IGZyZWUsIGFuZCB0aGUgY29uZGl0aW9uYWwgbWF5IGFzc2lnbiB0aGUgcG9pbnRlciB0byB0aGUKK25vbi1tYWxsb2MnZCBpbnRlcm5hbCBzdHJpbmcgIi4iIHdoaWNoIGZhaWxzIHdoZW4gd2UgZnJlZSBpdCBoZXJlOgorCisgICBpZiAobXVsdGlsaWJfZGlyID09IE5VTEwgJiYgbXVsdGlsaWJfb3NfZGlyICE9IE5VTEwKKyAgICAgICAmJiBzdHJjbXAgKG11bHRpbGliX29zX2RpciwgIi4iKSA9PSAwKQorICAgICB7CisgICAgICAgZnJlZSAoQ09OU1RfQ0FTVCAoY2hhciAqLCBtdWx0aWxpYl9vc19kaXIpKTsKKyAgICAgICAuLi4KKworQXMgc3VnZ2VzdGVkIGJ5IEpha3ViLCBlbnN1cmUgdGhlICIuIiBjYXNlIGlzIGFsc28gbWFsbG9jJ2QgdmlhCit4c3RyZHVwKCkgYW5kIGhlbmNlIHRoZSBwb2ludGVyIGZvciB0aGUgIi4iIGNhc2UgY2FuIGJlIGZyZWVkLgorCitDYzogSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KK0NjOiBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+CitDYzogTWF0dGhpYXMgS2xvc2UgPGRva29AdWJ1bnR1LmNvbT4KK0NDOiBUb2JpYXMgQnVybnVzIDxidXJudXNAbmV0LWIuZGU+CitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIFsgaHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA2L21zZzAyMDY5Lmh0bWwgXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlhYzE4ZTYwZDgwMS4uMTY4YWNmN2ViMGM5IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC03NzkwLDEwICs3NzkwLDE1IEBAIHNldF9tdWx0aWxpYl9kaXIgKHZvaWQpCisgCQlxMisrOworIAkgICAgICBpZiAoKnEyID09ICc6JykKKyAJCW1sX2VuZCA9IHEyOworLQkgICAgICBuZXdfbXVsdGlsaWJfb3NfZGlyID0gWE5FV1ZFQyAoY2hhciwgbWxfZW5kIC0gcSk7CistCSAgICAgIG1lbWNweSAobmV3X211bHRpbGliX29zX2RpciwgcSArIDEsIG1sX2VuZCAtIHEgLSAxKTsKKy0JICAgICAgbmV3X211bHRpbGliX29zX2RpclttbF9lbmQgLSBxIC0gMV0gPSAnXDAnOworLQkgICAgICBtdWx0aWxpYl9vc19kaXIgPSAqbmV3X211bHRpbGliX29zX2RpciA/IG5ld19tdWx0aWxpYl9vc19kaXIgOiAiLiI7CisrCSAgICAgIGlmIChtbF9lbmQgLSBxID09IDEpCisrCQltdWx0aWxpYl9vc19kaXIgPSB4c3RyZHVwICgiLiIpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG5ld19tdWx0aWxpYl9vc19kaXIgPSBYTkVXVkVDIChjaGFyLCBtbF9lbmQgLSBxKTsKKysJCSAgbWVtY3B5IChuZXdfbXVsdGlsaWJfb3NfZGlyLCBxICsgMSwgbWxfZW5kIC0gcSAtIDEpOworKwkJICBuZXdfbXVsdGlsaWJfb3NfZGlyW21sX2VuZCAtIHEgLSAxXSA9ICdcMCc7CisrCQkgIG11bHRpbGliX29zX2RpciA9IG5ld19tdWx0aWxpYl9vc19kaXI7CisrCQl9CisgCisgCSAgICAgIGlmIChxMiA8IGVuZCAmJiAqcTIgPT0gJzonKQorIAkJeworLS0gCisxLjkuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZWZhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDYxIEBACitnY2MvTWFrZWZpbGUuaW46IGZpeCBwYXJhbGxlbCBidWlsZGluZyBmYWlsdXJlCisKK1RoZSBnY2MtYXIubywgZ2NjLW5tLm8sIGdjYy1yYW5saWIubyBhbmQgZXJyb3JzLm8gaW5jbHVkZWQKK2NvbmZpZy5oIHdoaWNoIHdhcyBhIGdlbmVyYXRlZCBmaWxlLiBCdXQgbm8gZXhwbGljaXR5IHJ1bGUKK3RvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3kuIFRoZXJlIHdhcyBwb3RlbnRpYWwgYnVpbGRpbmcKK2ZhaWx1cmUgd2hpbGUgcGFyYWxsZWwgbWFrZS4KKworRm9yIGdjYy1hci5vLCBnY2Mtbm0ubyBhbmQgZ2NjLXJhbmxpYi5vLCB0aGV5IHdlcmUgY29tcGlsZWQgZnJvbSBvbmUgQworc291cmNlIGZpbGUgZ2NjLWFyLmMsIHdlIGFkZCB0aGVtIHRvIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUywgc28gdGhlCisnJChBTExfSE9TVF9PQkpTKSA6IHwgJChnZW5lcmF0ZWRfZmlsZXMpJyBydWxlIGNvdWxkIHdvcmsgZm9yIHRoZXNlCitvYmplY3RzLgorCitGb3IgZXJyb3JzLm8sIGl0IGlzIHBhcnQgb2YgZ2VuZ3R5cGUsIGFuZCB0aGUgZ2VuZ3R5cGUgZ2VuZXJhdG9yIHByb2dyYW0KK2lzIHNwZWNpYWw6IFR3byB2ZXJzaW9ucyBhcmUgYnVpbHQuIE9uZSBpcyBmb3IgdGhlIGJ1aWxkIG1hY2hpbmUsIGFuZCBvbmUKK2lzIGZvciB0aGUgaG9zdC4gV2UgcmVmZXJlZCB3aGF0IGdlbmd0eXBlLXBhcnNlLm8gZGlkICh3aGljaCBhbHNvIGlzIHBhcnQKK29mIGdlbmd0eXBlKS4KKworW0dDQyAjNjE4OTldCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MTg5OQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmddCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8IDcgKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggNjQ3NWNiYS4uNTZlNTBiYiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtMTQ4MSwxMyArMTQ4MSwxNiBAQCBPQkpTLWxpYmNvbW1vbi10YXJnZXQgPSAkKGNvbW1vbl9vdXRfb2JqZWN0X2ZpbGUpIHByZWZpeC5vIHBhcmFtcy5vIFwKKyAJb3B0cy5vIG9wdHMtY29tbW9uLm8gb3B0aW9ucy5vIHZlYy5vIGhvb2tzLm8gY29tbW9uL2NvbW1vbi10YXJnaG9va3MubyBcCisgCWhhc2gtdGFibGUubyBmaWxlLWZpbmQubworIAorKyMgT2JqZWN0cyBjb21waWxlZCBmcm9tIG9uZSBDIHNvdXJjZSBmaWxlIGdjYy1hci5jCisrT0JKUy1nY2MtYXIgPSBnY2MtYXIubyBnY2Mtbm0ubyBnY2MtcmFubGliLm8KKysKKyAjIFRoaXMgbGlzdHMgYWxsIGhvc3Qgb2JqZWN0cyBmb3IgdGhlIGZyb250IGVuZHMuCisgQUxMX0hPU1RfRlJPTlRFTkRfT0JKUyA9ICQoZm9yZWFjaCB2LCQoQ09ORklHX0xBTkdVQUdFUyksJCgkKHYpX09CSlMpKQorIAorIEFMTF9IT1NUX0JBQ0tFTkRfT0JKUyA9ICQoR0NDX09CSlMpICQoT0JKUykgJChPQkpTLWxpYmNvbW1vbikgXAorICAgJChPQkpTLWxpYmNvbW1vbi10YXJnZXQpIEBUUkVFQlJPV1NFUkAgbWFpbi5vIGMtZmFtaWx5L2NwcHNwZWMubyBcCisgICAkKENPTExFQ1QyX09CSlMpICQoRVhUUkFfR0NDX09CSlMpICQoR0NPVl9PQkpTKSAkKEdDT1ZfRFVNUF9PQkpTKSBcCistICBsdG8td3JhcHBlci5vCisrICBsdG8td3JhcHBlci5vICQoT0JKUy1nY2MtYXIpCisgCisgIyBUaGlzIGxpc3RzIGFsbCBob3N0IG9iamVjdCBmaWxlcywgd2hldGhlciB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGlzCisgIyBjb21waWxhdGlvbiBvciBub3QuCitAQCAtMjQzNyw2ICsyNDQwLDggQEAgZ2VuZ3R5cGUtcGFyc2UubzogJChDT05GSUdfSCkKKyBDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisrZXJyb3JzLm8gOiAkKENPTkZJR19IKQorKworIGdlbmd0eXBlLXN0YXRlLm8gYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogZ2VuZ3R5cGUtc3RhdGUuYyAkKFNZU1RFTV9IKSBcCisgICBnZW5ndHlwZS5oIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpICQoT0JTVEFDS19IKSBcCisgICAkKFhSRUdFWF9IKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdkYWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMTQ4IEBACitGcm9tIDRmZDM5ZjEzMjkzNzllMDBmOTU4Mzk0YWRkZTZiZTk2ZjBjYWYyMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBoYWlucXVlIDxoYWlucXVlQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IEZyaSwgNSBEZWMgMjAxNCAxNjo1MzoyMiArMDAwMAorU3ViamVjdDogW1BBVENIXSAyMDE0LTEyLTA1ICBPbGl2aWVyIEhhaW5xdWUgIDxoYWlucXVlQGFkYWNvcmUuY29tPgorCisgICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogTmV3IGhlbHBlciwgcHJvY2Vzc2luZworICAgICAgICBvbmUgcGFydGljdWxhciByZWcgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLgorICAgICAgICAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBSZXdvcmsgdG8gdXNlIGhlbHBlciBhbmQKKyAgICAgICAgYWNjb3VudCBmb3IgZHdhcmYgcmVnaXN0ZXIgc3BhbnMuCisKKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTg0MjggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgfCAgNyArKysrKworIGdjYy9kd2FyZjJjZmkuYyB8IDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI1Miw3ICsyNTIsNTkgQEAgaW5pdF9yZXR1cm5fY29sdW1uX3NpemUgKGVudW0gbWFjaGluZV9tbworIAkJICBnZW5faW50X21vZGUgKHNpemUsIG1vZGUpKTsKKyB9CisgCistLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlciBzaXplIHRhYmxlLiAgKi8KKysvKiBEYXRhc3RydWN0dXJlIHVzZWQgYnkgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgYW5kCisrICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgdG8gY29tbXVuaWNhdGUgb24gd2hhdCBoYXMgYmVlbiBkb25lIGJ5IHRoZQorKyAgIGxhdHRlci4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICAvKiBXaGV0aGVyIHRoZSBkd2FyZiByZXR1cm4gY29sdW1uIHdhcyBpbml0aWFsaXplZC4gICovCisrICBib29sIHdyb3RlX3JldHVybl9jb2x1bW47CisrCisrICAvKiBGb3IgZWFjaCBoYXJkIHJlZ2lzdGVyIFJFR05PLCB3aGV0aGVyIGluaXRfb25lX2R3YXJmX3JlZ19zaXplCisrICAgICB3YXMgZ2l2ZW4gUkVHTk8gdG8gcHJvY2VzcyBhbHJlYWR5LiAgKi8KKysgIGJvb2wgcHJvY2Vzc2VkX3JlZ25vIFtGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworKworK30gaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlOworKworKy8qIEhlbHBlciBmb3IgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMuICBHZW5lcmF0ZSBjb2RlIHRvCisrICAgaW5pdGlhbGl6ZSB0aGUgZHdhcmYgcmVnaXN0ZXIgc2l6ZSB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHJlZ2lzdGVyCisrICAgUkVHTk8gaW4gUkVHTU9ERS4gIFRBQkxFIGlzIHRoZSB0YWJsZSBiYXNlIGFkZHJlc3MsIFNMT1RNT0RFIGlzIHRoZSBtb2RlIHRvCisrICAgdXNlIGZvciB0aGUgc2l6ZSBlbnRyeSB0byBpbml0aWFsaXplLCBhbmQgSU5JVF9TVEFURSBpcyB0aGUgY29tbXVuaWNhdGlvbgorKyAgIGRhdGFzdHJ1Y3R1cmUgY29udmV5aW5nIHdoYXQgd2UncmUgZG9pbmcgdG8gb3VyIGNhbGxlci4gICovCisrCisrc3RhdGljCisrdm9pZCBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaW50IHJlZ25vLCBtYWNoaW5lX21vZGUgcmVnbW9kZSwKKysJCQkgICAgICBydHggdGFibGUsIG1hY2hpbmVfbW9kZSBzbG90bW9kZSwKKysJCQkgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc3RhdGUgKmluaXRfc3RhdGUpCisreworKyAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKKysgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworKworKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKKysgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOworKworKyAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7CisrCisrICBpZiAocm51bSA+PSBEV0FSRl9GUkFNRV9SRUdJU1RFUlMpCisrICAgIHJldHVybjsKKysKKysgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisrICAgIHsKKysgICAgICBpZiAocmVnbW9kZSA9PSBWT0lEbW9kZSkKKysJcmV0dXJuOworKyAgICAgIGluaXRfc3RhdGUtPndyb3RlX3JldHVybl9jb2x1bW4gPSB0cnVlOworKyAgICB9CisrCisrICBpZiAoc2xvdG9mZnNldCA8IDApCisrICAgIHJldHVybjsKKysKKysgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAodGFibGUsIHNsb3Rtb2RlLCBzbG90b2Zmc2V0KSwKKysJCSAgZ2VuX2ludF9tb2RlIChyZWdzaXplLCBzbG90bW9kZSkpOworK30KKysKKysvKiBHZW5lcmF0ZSBjb2RlIHRvIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgbG9jYXRlZAorKyAgIGF0IHRoZSBwcm92aWRlZCBBRERSRVNTLiAgKi8KKyAKKyB2b2lkCisgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZWUgYWRkcmVzcykKK0BAIC0yNjEsMzUgKzMxMyw0MCBAQCBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcyAodHJlCisgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlID0gVFlQRV9NT0RFIChjaGFyX3R5cGVfbm9kZSk7CisgICBydHggYWRkciA9IGV4cGFuZF9ub3JtYWwgKGFkZHJlc3MpOworICAgcnR4IG1lbSA9IGdlbl9ydHhfTUVNIChCTEttb2RlLCBhZGRyKTsKKy0gIGJvb2wgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IGZhbHNlOworKworKyAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlIGluaXRfc3RhdGU7CisrCisrICBtZW1zZXQgKChjaGFyICopJmluaXRfc3RhdGUsIDAsIHNpemVvZiAoaW5pdF9zdGF0ZSkpOworIAorICAgZm9yIChpID0gMDsgaSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsgaSsrKQorICAgICB7CistICAgICAgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKGkpOworLSAgICAgIHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworLQorLSAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorLQl7CistCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7CistCSAgSE9TVF9XSURFX0lOVCBzaXplOworLQkgIGVudW0gbWFjaGluZV9tb2RlIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworKyAgICAgIG1hY2hpbmVfbW9kZSBzYXZlX21vZGU7CisrICAgICAgcnR4IHNwYW47CisgCistCSAgaWYgKGRudW0gPT0gRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTikKKysgICAgICAvKiBObyBwb2ludCBpbiBwcm9jZXNzaW5nIGEgcmVnaXN0ZXIgbXVsdGlwbGUgdGltZXMuICBUaGlzIGNvdWxkIGhhcHBlbgorKyAgICAgICAgd2l0aCByZWdpc3RlciBzcGFucywgZS5nLiB3aGVuIGEgcmVnIGlzIGZpcnN0IHByb2Nlc3NlZCBhcyBhIHBpZWNlIG9mCisrICAgICAgICBhIHNwYW4sIHRoZW4gYXMgYSByZWdpc3RlciBvbiBpdHMgb3duIGxhdGVyIG9uLiAgKi8KKysKKysgICAgICBpZiAoaW5pdF9zdGF0ZS5wcm9jZXNzZWRfcmVnbm9baV0pCisrICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIHNhdmVfbW9kZSA9IHRhcmdldG0uZHdhcmZfZnJhbWVfcmVnX21vZGUgKGkpOworKyAgICAgIHNwYW4gPSB0YXJnZXRtLmR3YXJmX3JlZ2lzdGVyX3NwYW4gKGdlbl9ydHhfUkVHIChzYXZlX21vZGUsIGkpKTsKKysgICAgICBpZiAoIXNwYW4pCisrICAgICAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpLCBzYXZlX21vZGUsIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZvciAoaW50IHNpID0gMDsgc2kgPCBYVkVDTEVOIChzcGFuLCAwKTsgc2krKykKKyAJICAgIHsKKy0JICAgICAgaWYgKHNhdmVfbW9kZSA9PSBWT0lEbW9kZSkKKy0JCWNvbnRpbnVlOworLQkgICAgICB3cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKKy0JICAgIH0KKy0JICBzaXplID0gR0VUX01PREVfU0laRSAoc2F2ZV9tb2RlKTsKKy0JICBpZiAob2Zmc2V0IDwgMCkKKy0JICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICBydHggcmVnID0gWFZFQ0VYUCAoc3BhbiwgMCwgc2kpOworKyAgICAgICAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQorKyAgICAgICAgICAgICAgIChSRUdOTyAocmVnKSwgR0VUX01PREUgKHJlZyksIG1lbSwgbW9kZSwgJmluaXRfc3RhdGUpOworKyAgICAgICAgICAgfQorIAorLQkgIGVtaXRfbW92ZV9pbnNuIChhZGp1c3RfYWRkcmVzcyAobWVtLCBtb2RlLCBvZmZzZXQpLAorLQkJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7CisgCX0KKyAgICAgfQorIAorLSAgaWYgKCF3cm90ZV9yZXR1cm5fY29sdW1uKQorKyAgaWYgKCFpbml0X3N0YXRlLndyb3RlX3JldHVybl9jb2x1bW4pCisgICAgIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChtb2RlLCBtZW0sIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pOworIAorICNpZmRlZiBEV0FSRl9BTFRfRlJBTUVfUkVUVVJOX0NPTFVNTgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZjOTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBjMDIzNWEzM2RlOGM0Zjc4Y2NlMzViMmE4YzIwMzVjODNmZTFiZDE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogaGFpbnF1ZSA8aGFpbnF1ZUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBGcmksIDUgRGVjIDIwMTQgMTc6MDE6NDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gMjAxNC0xMi0wNSAgT2xpdmllciBIYWlucXVlICA8aGFpbnF1ZUBhZGFjb3JlLmNvbT4KKworICAgICAgICBnY2MvCisgICAgICAgICogZGVmYXVsdHMuaDogKERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKTogRGVmaW5lIGRlZmF1bHQuCisgICAgICAgICogZHdhcmYyY2ZpLmMgKGluaXRfb25lX2R3YXJmX3JlZ19zaXplKTogSG9ub3IKKyAgICAgICAgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4uCisKKyAgICAgICAgbGliZ2NjLworICAgICAgICAqIHVud2luZC1kdzIuYyAoRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4pOiBSZW1vdmUgZGVmYXVsdCBkZWYsCisgICAgICAgIG5vdyBwcm92aWRlZCBieSBkZWZhdWx0cy5oLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE4NDI5IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgICAgICB8IDYgKysrKysrCisgZ2NjL2RlZmF1bHRzLmggICAgICB8IDUgKysrKysKKyBnY2MvZHdhcmYyY2ZpLmMgICAgIHwgMyArKy0KKyBsaWJnY2MvQ2hhbmdlTG9nICAgIHwgNSArKysrKworIGxpYmdjYy91bndpbmQtZHcyLmMgfCA0IC0tLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RlZmF1bHRzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZGVmYXVsdHMuaAorKysrIGdjYy00LjkuMi9nY2MvZGVmYXVsdHMuaAorQEAgLTQzOCw2ICs0MzgsMTEgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICNkZWZpbmUgRFdBUkZfRlJBTUVfUkVHTlVNKFJFRykgREJYX1JFR0lTVEVSX05VTUJFUiAoUkVHKQorICNlbmRpZgorIAorKy8qIFRoZSBtYXBwaW5nIGZyb20gZHdhcmYgQ0ZBIHJlZyBudW1iZXIgdG8gaW50ZXJuYWwgZHdhcmYgcmVnIG51bWJlcnMuICAqLworKyNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4KKysjZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8pCisrI2VuZGlmCisrCisgLyogTWFwIHJlZ2lzdGVyIG51bWJlcnMgaGVsZCBpbiB0aGUgY2FsbCBmcmFtZSBpbmZvIHRoYXQgZ2NjIGhhcworICAgIGNvbGxlY3RlZCB1c2luZyBEV0FSRl9GUkFNRV9SRUdOVU0gdG8gdGhvc2UgdGhhdCBzaG91bGQgYmUgb3V0cHV0IGluCisgICAgLmRlYnVnX2ZyYW1lIGFuZCAuZWhfZnJhbWUuICAqLworSW5kZXg6IGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvZHdhcmYyY2ZpLmMKKysrKyBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCitAQCAtMjgwLDggKzI4MCw5IEBAIHZvaWQgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGludCByZWdubywKKyB7CisgICBjb25zdCB1bnNpZ25lZCBpbnQgZG51bSA9IERXQVJGX0ZSQU1FX1JFR05VTSAocmVnbm8pOworICAgY29uc3QgdW5zaWduZWQgaW50IHJudW0gPSBEV0FSRjJfRlJBTUVfUkVHX09VVCAoZG51bSwgMSk7CisrICBjb25zdCB1bnNpZ25lZCBpbnQgZGNvbCA9IERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OIChybnVtKTsKKyAKKy0gIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7CisrICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBkY29sICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOworICAgY29uc3QgSE9TVF9XSURFX0lOVCByZWdzaXplID0gR0VUX01PREVfU0laRSAocmVnbW9kZSk7CisgCisgICBpbml0X3N0YXRlLT5wcm9jZXNzZWRfcmVnbm9bcmVnbm9dID0gdHJ1ZTsKK0luZGV4OiBnY2MtNC45LjIvbGliZ2NjL3Vud2luZC1kdzIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2xpYmdjYy91bndpbmQtZHcyLmMKKysrKyBnY2MtNC45LjIvbGliZ2NjL3Vud2luZC1kdzIuYworQEAgLTU1LDEwICs1NSw2IEBACisgI2RlZmluZSBQUkVfR0NDM19EV0FSRl9GUkFNRV9SRUdJU1RFUlMgRFdBUkZfRlJBTUVfUkVHSVNURVJTCisgI2VuZGlmCisgCistI2lmbmRlZiBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTgorLSNkZWZpbmUgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4oUkVHTk8pIChSRUdOTykKKy0jZW5kaWYKKy0KKyAvKiA/Pz8gRm9yIHRoZSBwdWJsaWMgZnVuY3Rpb24gaW50ZXJmYWNlcywgd2UgdGVuZCB0byBnY2NfYXNzZXJ0IHRoYXQgdGhlCisgICAgY29sdW1uIG51bWJlcnMgYXJlIGluIHJhbmdlLiAgRm9yIHRoZSBkd2FyZjIgdW53aW5kIGluZm8gdGhpcyBkb2VzIGhhcHBlbiwKKyAgICBhbHRob3VnaCBzbyBmYXIgaW4gYSBjYXNlIHRoYXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU3LWFhcmNoNjQtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTU1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitEaXNhYmxlIHRoZSBNVUxUSUxJQl9PU0RJUk5BTUVTIGFuZCBvdGhlciBtdWx0aWxpYiBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUgQUJJLCBhcworbG9uZyBhcyB0aGUgZHluYW1pYyBsb2FkZXIgaXMgcHJlc2VudCBpbiAvbGliLgorCitXZSBzaW1wbHkgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gZ2NjIHRvIGZpbmQgYW5kIGNvbmZpZ3VyZSB0aGUgCitub3JtYWwgbGliZGlyLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMS5vcmlnL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBnY2MtNC45LjEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAorQEAgLTIxLDExICsyMSwxMSBAQAorIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKKyAKKy1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSAuPS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKy1NVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKysjTVVMVElMSUJfT1NESVJOQU1FUyA9IC49Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKyAjIERpc2FibGUgdGhlIG11bHRpbGliIGZvciBsaW51eC1nbnUgdGFyZ2V0cyBmb3IgdGhlIHRpbWUgYmVpbmc7IGZvY3VzCisgIyBvbiB0aGUgYmFyZW1ldGFsIHRhcmdldHMuCistTVVMVElMSUJfT1BUSU9OUyAgICA9CistTVVMVElMSUJfRElSTkFNRVMgICA9CisrI01VTFRJTElCX09QVElPTlMgICAgPQorKyNNVUxUSUxJQl9ESVJOQU1FUyAgID0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTgtZ2NjLXIyMTIxNzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0MmJhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGNhMDNjZjFiMTMzZDY2ZWI5NzhjNjhmNmRiYzM0NWU5YWFiY2JhODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiB1cm9zIDx1cm9zQDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhND4KK0RhdGU6IE1vbiwgMzAgSnVuIDIwMTQgMTk6MzA6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcjIxMjE3MQorCisqIGV4Y2VwdC5jIChlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCk6IE5ldyBoZWxwZXIKKyBmdW5jdGlvbi4gCShjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMpOiBVc2UKKyBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCB0byAJZW1pdCBFSF9SRUdJT05fRU5EIG5vdGUuIAorICoganVtcC5jIChjbGVhbnVwX2JhcnJpZXJzKTogRG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIAorIGNvcnJlc3BvbmRpbmcgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4KKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjEyMTcxIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjEyMTcxXQorU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9leGNlcHQuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0KKyBnY2MvanVtcC5jICAgfCAgIDE5ICsrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZXhjZXB0LmMgYi9nY2MvZXhjZXB0LmMKK2luZGV4IGRjNWMxZDIuLjdhYzExNGYgMTAwNjQ0CistLS0gYS9nY2MvZXhjZXB0LmMKKysrKyBiL2djYy9leGNlcHQuYworQEAgLTI0NjYsNiArMjQ2NiwyMCBAQCBhZGRfY2FsbF9zaXRlIChydHggbGFuZGluZ19wYWQsIGludCBhY3Rpb24sIGludCBzZWN0aW9uKQorICAgcmV0dXJuIGNhbGxfc2l0ZV9iYXNlICsgY3J0bC0+ZWguY2FsbF9zaXRlX3JlY29yZF92W3NlY3Rpb25dLT5sZW5ndGggKCkgLSAxOworIH0KKyAKKytzdGF0aWMgcnR4CisrZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKHJ0eCBpbnNuKQorK3sKKysgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKKysKKysgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZworKyAgICAgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCisrICBpZiAobmV4dCAmJiBOT1RFX1AgKG5leHQpCisrICAgICAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCisrICAgIGluc24gPSBuZXh0OworKworKyAgcmV0dXJuIGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGluc24pOworK30KKysKKyAvKiBUdXJuIFJFR19FSF9SRUdJT04gbm90ZXMgYmFjayBpbnRvIE5PVEVfSU5TTl9FSF9SRUdJT04gbm90ZXMuCisgICAgVGhlIG5ldyBub3RlIG51bWJlcnMgd2lsbCBub3QgcmVmZXIgdG8gcmVnaW9uIG51bWJlcnMsIGJ1dAorICAgIGluc3RlYWQgdG8gY2FsbCBzaXRlIGVudHJpZXMuICAqLworQEAgLTI1NDQsOCArMjU1OCw4IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKKyAJCW5vdGUgPSBlbWl0X25vdGVfYmVmb3JlIChOT1RFX0lOU05fRUhfUkVHSU9OX0JFRywKKyAJCQkJCSBmaXJzdF9ub19hY3Rpb25faW5zbl9iZWZvcmVfc3dpdGNoKTsKKyAJCU5PVEVfRUhfSEFORExFUiAobm90ZSkgPSBjYWxsX3NpdGU7CistCQlub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwKKy0JCQkJCWxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisrCQlub3RlCisrCQkgID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworIAkJZ2NjX2Fzc2VydCAobGFzdF9hY3Rpb24gIT0gLTMKKyAJCQkgICAgfHwgKGxhc3RfYWN0aW9uX2luc24KK0BAIC0yNTY5LDggKzI1ODMsNyBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCisgCQkgICAgZmlyc3Rfbm9fYWN0aW9uX2luc24gPSBOVUxMX1JUWDsKKyAJCSAgfQorIAorLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCistCQkJCQlsYXN0X2FjdGlvbl9pbnNuKTsKKysJCW5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworIAkgICAgICB9CisgCitAQCAtMjYxNyw3ICsyNjMwLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQorIAorICAgaWYgKGxhc3RfYWN0aW9uID49IC0xICYmICEgZmlyc3Rfbm9fYWN0aW9uX2luc24pCisgICAgIHsKKy0gICAgICBub3RlID0gZW1pdF9ub3RlX2FmdGVyIChOT1RFX0lOU05fRUhfUkVHSU9OX0VORCwgbGFzdF9hY3Rpb25faW5zbik7CisrICAgICAgbm90ZSA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X2FjdGlvbl9pbnNuKTsKKyAgICAgICBOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2p1bXAuYyBiL2djYy9qdW1wLmMKK2luZGV4IDk0MThmNjUuLmE1ZTVmNTIgMTAwNjQ0CistLS0gYS9nY2MvanVtcC5jCisrKysgYi9nY2MvanVtcC5jCitAQCAtMTIxLDE1ICsxMjEsMjYgQEAgcmVidWlsZF9qdW1wX2xhYmVsc19jaGFpbiAocnR4IGNoYWluKQorIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyBjbGVhbnVwX2JhcnJpZXJzICh2b2lkKQorIHsKKy0gIHJ0eCBpbnNuLCBuZXh0LCBwcmV2OworLSAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gbmV4dCkKKysgIHJ0eCBpbnNuOworKyAgZm9yIChpbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKKyAgICAgeworLSAgICAgIG5leHQgPSBORVhUX0lOU04gKGluc24pOworICAgICAgIGlmIChCQVJSSUVSX1AgKGluc24pKQorIAl7CistCSAgcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKKysJICBydHggcHJldiA9IHByZXZfbm9ubm90ZV9pbnNuIChpbnNuKTsKKyAJICBpZiAoIXByZXYpCisgCSAgICBjb250aW51ZTsKKysKKysJICBpZiAoQ0FMTF9QIChwcmV2KSkKKysJICAgIHsKKysJICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyBjb3JyZXNwb25kaW5nCisrCQkgQ0FMTF9BUkdfTE9DQVRJT04gbm90ZS4gICovCisrCSAgICAgIHJ0eCBuZXh0ID0gTkVYVF9JTlNOIChwcmV2KTsKKysKKysJICAgICAgaWYgKE5PVEVfUCAobmV4dCkKKysJCSAgJiYgTk9URV9LSU5EIChuZXh0KSA9PSBOT1RFX0lOU05fQ0FMTF9BUkdfTE9DQVRJT04pCisrCQlwcmV2ID0gbmV4dDsKKysJICAgIH0KKysKKyAJICBpZiAoQkFSUklFUl9QIChwcmV2KSkKKyAJICAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKKyAJICBlbHNlIGlmIChwcmV2ICE9IFBSRVZfSU5TTiAoaW5zbikpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTgyN2NiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA2ZWFlM2U2MzdmY2MyMmQyMWI1MWQ0NGQ2MWUzYTljYjQ4MjVlNzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMzAgT2N0IDIwMTQgMjA6Mzc6MTQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF1QUiBydGwtb3B0aW1pemF0aW9uLzYzMzQ4CisgCitQUiBydGwtb3B0aW1pemF0aW9uLzYzMzQ4CisqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IERvIG5vdCBlbWl0IGV4dHJhIGJhcnJpZXIuCisKK05vdGU6IHRoaXMgcGF0Y2ggaXMgdG8gZml4IHRoZSBzaWRlIGVmZmVjdCBpbnRyb2R1Y2VkIGJ5IHIyMTIxNzEgd2hpY2ggd2FzIHJlcG9ydGVkIGF0OgoraHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjMzNDgKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE1NjEzIDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtodHRwczovL2djYy5nbnUub3JnL3ZpZXdjdnMvZ2NjP3ZpZXc9cmV2aXNpb24mcmV2aXNpb249MjE1NjEzXQorU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxiYW9zaGFuLnBhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZW1pdC1ydGwuYyB8ICAgMTEgLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvZW1pdC1ydGwuYyBiL2djYy9lbWl0LXJ0bC5jCitpbmRleCA0NzM2ZjhkLi5hZTY5ZGJkIDEwMDY0NAorLS0tIGEvZ2NjL2VtaXQtcnRsLmMKKysrKyBiL2djYy9lbWl0LXJ0bC5jCitAQCAtMzQyMiw3ICszNDIyLDYgQEAgdHJ5X3NwbGl0IChydHggcGF0LCBydHggdHJpYWwsIGludCBsYXN0KQorIHsKKyAgIHJ0eCBiZWZvcmUgPSBQUkVWX0lOU04gKHRyaWFsKTsKKyAgIHJ0eCBhZnRlciA9IE5FWFRfSU5TTiAodHJpYWwpOworLSAgaW50IGhhc19iYXJyaWVyID0gMDsKKyAgIHJ0eCBub3RlLCBzZXEsIHRlbTsKKyAgIGludCBwcm9iYWJpbGl0eTsKKyAgIHJ0eCBpbnNuX2xhc3QsIGluc247CitAQCAtMzQ0MSwxNCArMzQ0MCw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyAKKyAgIHNwbGl0X2JyYW5jaF9wcm9iYWJpbGl0eSA9IC0xOworIAorLSAgLyogSWYgd2UgYXJlIHNwbGl0dGluZyBhIEpVTVBfSU5TTiwgaXQgbWlnaHQgYmUgZm9sbG93ZWQgYnkgYSBCQVJSSUVSLgorLSAgICAgV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHRoaXMgc3BlY2lhbGx5LiAgKi8KKy0gIGlmIChhZnRlciAmJiBCQVJSSUVSX1AgKGFmdGVyKSkKKy0gICAgeworLSAgICAgIGhhc19iYXJyaWVyID0gMTsKKy0gICAgICBhZnRlciA9IE5FWFRfSU5TTiAoYWZ0ZXIpOworLSAgICB9CistCisgICBpZiAoIXNlcSkKKyAgICAgcmV0dXJuIHRyaWFsOworIAorQEAgLTM1OTQsOCArMzU4NSw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyAgIHRlbSA9IGVtaXRfaW5zbl9hZnRlcl9zZXRsb2MgKHNlcSwgdHJpYWwsIElOU05fTE9DQVRJT04gKHRyaWFsKSk7CisgCisgICBkZWxldGVfaW5zbiAodHJpYWwpOworLSAgaWYgKGhhc19iYXJyaWVyKQorLSAgICBlbWl0X2JhcnJpZXJfYWZ0ZXIgKHRlbSk7CisgCisgICAvKiBSZWN1cnNpdmVseSBjYWxsIHRyeV9zcGxpdCBmb3IgZWFjaCBuZXcgaW5zbiBjcmVhdGVkOyBieSB0aGUKKyAgICAgIHRpbWUgY29udHJvbCByZXR1cm5zIGhlcmUgdGhhdCBpbnNuIHdpbGwgYmUgZnVsbHkgc3BsaXQsIHNvCistLSAKKzEuNy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYwLU9ubHktYWxsb3ctZTUwMC1kb3VibGUtaW4tU1BFX1NJTURfUkVHTk9fUC1yZWdpc3RlcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTlmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gNWMwMDkyMDcwMjUzMTEzY2YwZDljNDVlYWNjODg0YjNlY2MzNGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGpzbTI4IDxqc20yOEAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBTYXQsIDI1IE9jdCAyMDE0IDAwOjIzOjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIE9ubHkgYWxsb3cgZTUwMCBkb3VibGUgaW4gU1BFX1NJTURfUkVHTk9fUCByZWdpc3RlcnMuCisKK3JzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsIGFsbG93cyBTUEUgdmVjdG9ycyBpbiBzaW5nbGUKK3JlZ2lzdGVycyBzYXRpc2Z5aW5nIFNQRV9TSU1EX1JFR05PX1AgKGkuZS4gcmVnaXN0ZXIgbnVtYmVycyAwIHRvCiszMSkuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZyB0ZXN0IGZvciBlNTAwIGRvdWJsZSB0cmVhdHMgYWxsCityZWdpc3RlcnMgYXMgYmVpbmcgYWJsZSB0byBzdG9yZSBhIDY0LWJpdCB2YWx1ZSwgcmF0aGVyIHRoYW4ganVzdAordGhvc2UgR1BScy4KKworTG9naWNhbGx5IHRoaXMgaW5jb25zaXN0ZW5jeSBpcyB3cm9uZzsgaW4gYWRkaXRpb24sIGl0IGNhdXNlcyBwcm9ibGVtcwordW53aW5kaW5nIGZyb20gc2lnbmFsIGhhbmRsZXJzLiAgbGludXgtdW53aW5kLmggdXNlcworQVJHX1BPSU5URVJfUkVHTlVNIGFzIGEgcGxhY2UgdG8gc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYQorc2lnbmFsIGhhbmRsZXIsIGJ1dCB0aGlzIGxvZ2ljIGluIHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsCityZXN1bHRzIGluIHRoYXQgYmVpbmcgY29uc2lkZXJlZCBhbiA4LWJ5dGUgcmVnaXN0ZXIsIHJlc3VsdGluZyBpbgorYXNzZXJ0aW9uIGZhaWx1cmVzLgorKDxodHRwczovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDkvbXNnMDI2MjUuaHRtbD4gZmlyc3QKK25lZWRzIHRvIGJlIGFwcGxpZWQgZm9yIHVud2luZGluZyB0byB3b3JrIGluIGdlbmVyYWwgb24gZTUwMC4pICBUaGlzCitwYXRjaCBtYWtlcyByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCBoYW5kbGUgdGhlIGU1MDAgZG91YmxlCitjYXNlIGNvbnNpc3RlbnRseSB3aXRoIFNQRSB2ZWN0b3JzLgorCitUZXN0ZWQgd2l0aCBubyByZWdyZXNzaW9ucyB3aXRoIGNyb3NzIHRvIHBvd2VycGMtbGludXgtZ251c3BlIChnaXZlbgordGhlIGFmb3JlbWVudGlvbmVkIHBhdGNoIGFwcGxpZWQpLiAgRmFpbHVyZXMgb2Ygc2lnbmFsIGhhbmRsaW5nCit1bndpbmRpbmcgdGVzdHMgc3VjaCBhcyBnY2MuZGcvY2xlYW51cC17OCw5LDEwLDExfS5jIGFyZSBmaXhlZCBieSB0aGlzCitwYXRjaC4KKworCSogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAocnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwpOiBEbworCW5vdCBhbGxvdyBlNTAwIGRvdWJsZSBpbiByZWdpc3RlcnMgbm90IHNhdGlzeWZpbmcKKwlTUEVfU0lNRF9SRUdOT19QLgorCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNjY4OCAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICAgICAgICAgIHwgNiArKysrKysKKyBnY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMKK0BAIC0xNzAzLDcgKzE3MDMsNyBAQCByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCAoaW50IHJlCisgICAgICBTQ21vZGUgc28gYXMgdG8gcGFzcyB0aGUgdmFsdWUgY29ycmVjdGx5IGluIGEgcGFpciBvZgorICAgICAgcmVnaXN0ZXJzLiAgKi8KKyAgIGVsc2UgaWYgKFRBUkdFVF9FNTAwX0RPVUJMRSAmJiBGTE9BVF9NT0RFX1AgKG1vZGUpICYmIG1vZGUgIT0gU0Ntb2RlCistCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkpCisrCSAgICYmICFERUNJTUFMX0ZMT0FUX01PREVfUCAobW9kZSkgJiYgU1BFX1NJTURfUkVHTk9fUCAocmVnbm8pKQorICAgICByZWdfc2l6ZSA9IFVOSVRTX1BFUl9GUF9XT1JEOworIAorICAgZWxzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MS10YXJnZXQtZ2NjLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorRW5zdXJlIHRhcmdldCBnY2MgaGVhZGVycyBjYW4gYmUgaW5jbHVkZWQKKworVGhlcmUgYXJlIGEgZmV3IGhlYWRlcnMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIE9wZW5FbWJlZGRlZAorZ2NjLXJ1bnRpbWUgdGFyZ2V0IChvbXAuaCwgc3NwLyouaCkuIEJlaW5nIGluc3RhbGxlZCBmcm9tIGEgcmVjaXBlCitidWlsdCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXNlIGFyZSB3aXRoaW4gdGhlIHRhcmdldAorc3lzcm9vdCBhbmQgbm90IGNyb3NzL25hdGl2ZXNkazsgdGh1cyB0aGV5IHdlcmVuJ3QgYWJsZSB0byBiZQorZm91bmQgYnkgZ2NjIHdpdGggdGhlIGV4aXN0aW5nIHNlYXJjaCBwYXRocy4gQWRkIHN1cHBvcnQgZm9yCitwaWNraW5nIHVwIHRoZXNlIGhlYWRlcnMgdW5kZXIgdGhlIHN5c3Jvb3Qgc3VwcGxpZWQgb24gdGhlIGdjYworY29tbWFuZCBsaW5lIGluIG9yZGVyIHRvIHJlc29sdmUgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9nY2MvTWFrZWZpbGUuaW4JMjAxNC0xMi0yMyAxMTo1NzozMy4zMjc4NzMzMzEgKzAwMDAKKysrKyBiL2djYy9NYWtlZmlsZS5pbgkyMDE1LTAxLTIxIDExOjMyOjM1LjQ0NzMwNTM5NCArMDAwMAorQEAgLTU4Nyw2ICs1ODcsNyBAQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI1MzQsNiArMjUzNSw3IEBACisgCisgUFJFUFJPQ0VTU09SX0RFRklORVMgPSBcCisgICAtREdDQ19JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlXCIgXAorKyAgLURHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUPVwiJChsaWJzdWJkaXJfdGFyZ2V0KS9pbmNsdWRlXCIgXAorICAgLURGSVhFRF9JTkNMVURFX0RJUj1cIiQobGlic3ViZGlyKS9pbmNsdWRlLWZpeGVkXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVI9XCIkKGdjY19neHhfaW5jbHVkZV9kaXIpXCIgXAorICAgLURHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1Q9JChnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290KSBcCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMTMgMTc6NDA6MjYuMTMxMDEyNzI1ICswMDAwCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCTIwMTUtMDEtMjEgMTE6MzA6MDguOTI4NDI2NDkyICswMDAwCitAQCAtNTksNiArNTksMTAgQEAKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggZjk0YWUxNy4uZDk4YjQwYiAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzOTAsNCArMTM5MCwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5ZjBiNzgxLi4xNzRmY2E4IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMTg5LDEzICsxMTg5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYyLVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGJkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gODYxYmNmZDRhZTgxNGYzNTFlMGM2NjhlZTI2ZDAxZDEzMzFlMDQyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE1OjI3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvMzddIFVzZSBTWVNURU1MSUJTX0RJUiByZXBsYWNlbWVudCBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcKKyBiYXNlX2xpYmRpcgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfS5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0uc28uMSIKKyAKKyAjZGVmaW5lIENQUF9TUEVDICIle3B0aHJlYWQ6LURfUkVFTlRSQU5UfSIKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjMtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTk4IEBACitCZWluZyBhYmxlIHRvIGJ1aWxkIGEgbmF0aXZlc2RrIGdjYyBpcyB1c2VmdWwsIHBhcnRpY3VsYXJseSBpbiBjYXNlcword2hlcmUgdGhlIGhvc3QgY29tcGlsZXIgbWF5IGJlIG9mIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIChvciBhIDMyCitiaXQgY29tcGlsZXIgaXMgbmVlZGVkKS4KKworU2FkbHksIGJ1aWxkaW5nIG5hdGl2ZXNkay1nY2MgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQuIFdlIGluc3RhbGwKK25hdGl2ZXNkay1nY2MgaW50byBhIHJlbG9jYXRhYmxlIGxvY2F0aW9uIGFuZCB0aGlzIG1lYW5zIHRoYXQgaXRzCitsaWJyYXJ5IGxvY2F0aW9ucyBjYW4gY2hhbmdlLiAiTm9ybWFsIiBzeXNyb290IHN1cHBvcnQgZG9lc24ndCBoZWxwCitpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIHZhbHVlcyBvZiBwYXRocyBsaWtlICJsaWJkaXIiIGNoYW5nZSwgbm90IGp1c3QKK2Jhc2Ugcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHN5c3RlbS4KKworSW4gb3JkZXIgdG8gaGFuZGxlIHRoaXMgd2UgZG8gdHdvIHRoaW5nczoKKworYSkgQWRkICVyIGludG8gc3BlYyBmaWxlIG1hcmt1cCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5qZWN0ZWQgcGF0aHMKKyAgIHN1Y2ggYXMgU1lTVEVNTElCU19ESVIgKHNlZSBnY2NfbXVsdGlsaWJfc2V0dXAoKSkuCitiKSBBZGQgb3RoZXIgcGF0aHMgd2hpY2ggbmVlZCByZWxvY2F0aW9uIGludG8gYSAuZ2NjcmVsb2NwcmVmaXggc2VjdGlvbgorICAgd2hpY2ggdGhlIHJlbG9jYXRpb24gY29kZSB3aWxsIG5vdGljZSBhbmQgYWRqdXN0IGF1dG9tYXRpY2FsbHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorUlAgMjAxNS83LzI4CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1ZmQzZDBhLi4yZGUyOWFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMjAsNiArMTIwLDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IFRBUkdFVF9TWVNURU1fUk9PVDsKKyAjZWxzZQorIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSAwOworICNlbmRpZgorKyAKKytzdGF0aWMgY2hhciB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNZU1RFTUxJQlNfRElSOworIAorIC8qIE5vbnplcm8gbWVhbnMgcGFzcyB0aGUgdXBkYXRlZCB0YXJnZXRfc3lzdGVtX3Jvb3QgdG8gdGhlIGNvbXBpbGVyLiAgKi8KKyAKK0BAIC0zODQsNiArMzg2LDcgQEAgb3Igd2l0aCBjb25zdGFudCB0ZXh0IGluIGEgc2luZ2xlIGFyZ3VtZW50LgorICAlRyAgICAgcHJvY2VzcyBMSUJHQ0NfU1BFQyBhcyBhIHNwZWMuCisgICVSICAgICBPdXRwdXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGFyZ2V0X3N5c3RlbV9yb290IGFuZAorICAgICAgICAgdGFyZ2V0X3N5c3Jvb3Rfc3VmZml4LgorKyAlciAgICAgT3V0cHV0IHRoZSBiYXNlIHBhdGggdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeAorICAlUyAgICAgcHJvY2VzcyBTVEFSVEZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgUyBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVFICAgICBwcm9jZXNzIEVOREZJTEVfU1BFQyBhcyBhIHNwZWMuICBBIGNhcGl0YWwgRSBpcyBhY3R1YWxseSB1c2VkIGhlcmUuCisgICVDICAgICBwcm9jZXNzIENQUF9TUEVDIGFzIGEgc3BlYy4KK0BAIC0xMjE4LDEwICsxMjIxLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgICAgZ2NjX2V4ZWNfcHJlZml4IGlzIHNldCBiZWNhdXNlLCBpbiB0aGF0IGNhc2UsIHdlIGtub3cgd2hlcmUgdGhlCisgICAgY29tcGlsZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgdXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoYXQKKyAgICBsb2NhdGlvbiBpbnN0ZWFkLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfZXhlY19wcmVmaXggPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfbGliZXhlY19wcmVmaXggPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfYmluZGlyX3ByZWZpeCA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2V4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworK3N0YXRpYyBjaGFyIHN0YW5kYXJkX2JpbmRpcl9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKytzdGF0aWMgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7CisgCisgLyogRm9yIG5hdGl2ZSBjb21waWxlcnMsIHRoZXNlIGFyZSB3ZWxsLWtub3duIHBhdGhzIGNvbnRhaW5pbmcKKyAgICBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0uICBGb3IgY3Jvc3MKK0BAIC0xMjI5LDkgKzEyMzIsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX2V4ZWNfcHJlZml4ID0gTURfRVhFQ19QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXggPSBNRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4XzEgPSBNRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMQorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMVs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMjsKKyAKKyAvKiBBIHJlbGF0aXZlIHBhdGggdG8gYmUgdXNlZCBpbiBmaW5kaW5nIHRoZSBsb2NhdGlvbiBvZiB0b29scworQEAgLTUzMDUsNiArNTMwOCwxMSBAQCBkb19zcGVjXzEgKGNvbnN0IGNoYXIgKnNwZWMsIGludCBpbnN3aXRjaCwgY29uc3QgY2hhciAqc29mdF9tYXRjaGVkX3BhcnQpCisgCSAgICAgIH0KKyAJICAgIGJyZWFrOworIAorKyAgICAgICAgICBjYXNlICdyJzoKKysgICAgICAgICAgICAgIG9ic3RhY2tfZ3JvdyAoJm9ic3RhY2ssIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgsCisrCQkgICAgICBzdHJsZW4gKHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgpKTsKKysgICAgICAgICAgICBicmVhazsKKysKKyAJICBjYXNlICdTJzoKKyAJICAgIHZhbHVlID0gZG9fc3BlY18xIChzdGFydGZpbGVfc3BlYywgMCwgTlVMTCk7CisgCSAgICBpZiAodmFsdWUgIT0gMCkKKworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCBkYWQ2OWU2Li5jZjQzZjI4IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTM1LDYgKzM1LDMwIEBACisgIyB1bmRlZiBDUk9TU19JTkNMVURFX0RJUgorICNlbmRpZgorIAorK3N0YXRpYyBjaGFyIEdQTFVTUExVU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR0NDX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdDQ19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVDsKKysjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBMT0NBTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBMT0NBTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgUFJFRklYX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFBSRUZJWF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBGSVhFRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBGSVhFRF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBDUk9TU19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBDUk9TU19JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFRPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gVE9PTF9JTkNMVURFX0RJUjsKKysjZW5kaWYKKysjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisrc3RhdGljIGNoYXIgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUjsKKysjZW5kaWYKKysKKyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjaWZkZWYgSU5DTFVERV9ERUZBVUxUUworID0gSU5DTFVERV9ERUZBVUxUUzsKK0BAIC00MiwzOCArNjYsMzggQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgPSB7CisgI2lmZGVmIEdQTFVTUExVU19JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgZ2VuZXJpYyBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyB0YXJnZXQtZGVwZW5kZW50IGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAxIH0sCisgI2VuZGlmCisgI2lmZGVmIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgYmFja3dhcmQgYW5kIGRlcHJlY2F0ZWQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworLSAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBHQ0NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKy0gICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVIsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMCB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAyIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgUFJFRklYX0lOQ0xVREVfRElSCistICAgIHsgUFJFRklYX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgUFJFRklYX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZml4aW5jbHVkZXMuICAqLworLSAgICB7IEZJWEVEX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwKKysgICAgeyBGSVhFRF9JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsCisgICAgICAgLyogQSBtdWx0aWxpYiBzdWZmaXggbmVlZHMgYWRkaW5nIGlmIGRpZmZlcmVudCBtdWx0aWxpYnMgdXNlCisgCSBkaWZmZXJlbnQgaGVhZGVycy4gICovCisgI2lmZGVmIFNZU1JPT1RfSEVBREVSU19TVUZGSVhfU1BFQworQEAgLTg1LDE2ICsxMDksMTYgQEAgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2VuZGlmCisgI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisgICAgIC8qIE9uZSBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IENST1NTX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IENST1NTX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisgICAgIC8qIEFub3RoZXIgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBUT09MX0lOQ0xVREVfRElSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisrICAgIHsgVE9PTF9JTkNMVURFX0RJUlZBUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKyAgICAgLyogL3Vzci9pbmNsdWRlIGNvbWVzIGRlYWQgbGFzdC4gICovCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAgICAgeyAwLCAwLCAwLCAwLCAwLCAwIH0KKyAgIH07CitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuaCBiL2djYy9jcHBkZWZhdWx0LmgKK2luZGV4IDMwYjZmZWQuLjJlZjk2YjcgMTAwNjQ0CistLS0gYS9nY2MvY3BwZGVmYXVsdC5oCisrKysgYi9nY2MvY3BwZGVmYXVsdC5oCitAQCAtMzMsNyArMzMsOCBAQAorIAorIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKKyB7CistICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKworICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjQtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK1NlYXJjaCB0YXJnZXQgc3lzcm9vdCBnY2MgdmVyc2lvbiBzcGVjaWZpYyBkaXJzIHdpdGggbXVsdGlsaWIuCisKK1dlIGluc3RhbGwgdGhlIGdjYyBsaWJyYXJpZXMgKHN1Y2ggYXMgY3J0YmVnaW4ucCkgaW50bworPHN5c3Jvb3Q+PGxpYmRpcj4vPHRhcmdldC1zeXM+LzUuMi4wLword2hpY2ggaXMgYSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBHQ0MgKGFrYSBtdWx0aV9zdWZmaXggaW4gdGhlIAorY29kZSBiZWxvdykuIDx0YXJnZXQtc3lzPiBpcyAnbWFjaGluZScgaW4gZ2NjJ3MgdGVybWlub2xvZ3kuIFdlIHVzZQordGhlc2UgZGlyZWN0b3JpZXMgc28gdGhhdCBtdWx0aXBsZSBnY2MgdmVyc2lvbnMgY291bGQgaW4gdGhlb3J5IAorY28tZXhpc3Qgb24gdGFyZ2V0LgorCitXZSBvbmx5IHdhbnQgdG8gYnVpbGQgb25lIGdjYy1jcm9zcy1jYW5hZGlhbiBwZXIgYXJjaCBhbmQgaGF2ZSB0aGlzIHdvcmsgCitmb3IgYWxsIG11bHRpbGlicy4gPHRhcmdldC1zeXM+IGNhbiBiZSBoYW5kbGVkIGJ5IG1hcHBpbmcgdGhlIG11bHRpbGliCis8dGFyZ2V0LXN5cz4gdG8gdGhlIG9uZSB1c2VkIGJ5IGdjYy1jcm9zcy1jYW5hZGlhbiwgZS5nLiBtaXBzNjQtcG9sa21sbGliMzItbGludXggCitpcyBzeW1saW5rZWQgdG8gYnkgbWlwczY0LXBva3ktbGludXguCisKK1RoZSBkZWZhdWx0IGdjYyBzZWFyY2ggcGF0aCBpbiB0aGUgdGFyZ2V0IHN5c3Jvb3QgZm9yIGEgImxpYjY0IiBtdXRsaWxpYiBpczoKKworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCit3aGljaCBtZWFucyB0aGF0IHRoZSBsaWIzMiBjcnRiZWdpbi5vIHdpbGwgYmUgZm91bmQgYW5kIHRoZSBsaWI2NCBvbmVzCit3aWxsIG5vdCB3aGljaCBsZWFkcyB0byBjb21waWxlciBmYWlsdXJlcy4KKworVGhpcyBwYXRjaCBpbmplY3RzIGEgbXVsdGlsaWIgdmVyc2lvbiBvZiB0aGF0IHBhdGggZmlyc3Qgc28gdGhlIGxpYjY0CitiaW5hcmllcyBjYW4gYmUgZm91bmQgZmlyc3QuIFdpdGggdGhpcyBjaGFuZ2UgdGhlIHNlYXJjaCBwYXRoIGJlY29tZXM6CisKKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworUlAgMjAxNS83LzMxCisKK0luZGV4OiBnY2MtNS4yLjAvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTUuMi4wLm9yaWcvZ2NjL2djYy5jCisrKysgZ2NjLTUuMi4wL2djYy9nY2MuYworQEAgLTIzMDUsNyArMjMwNSw3IEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgCXsKKyAJICBsZW4gPSBwYXRocy0+bWF4X2xlbiArIGV4dHJhX3NwYWNlICsgMTsKKy0JICBsZW4gKz0gTUFYIChNQVggKHN1ZmZpeF9sZW4sIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKysJICBsZW4gKz0gTUFYICgoc3VmZml4X2xlbiArIG11bHRpX29zX2Rpcl9sZW4pLCBtdWx0aWFyY2hfbGVuKTsKKyAJICBwYXRoID0gWE5FV1ZFQyAoY2hhciwgbGVuKTsKKyAJfQorIAorQEAgLTIzMTcsNiArMjMxNywzMyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAJICAvKiBMb29rIGZpcnN0IGluIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkuICAqLworIAkgIGlmICghc2tpcF9tdWx0aV9kaXIpCisgCSAgICB7CisrCSAgICAgIGlmICghKHBsLT5vc19tdWx0aWxpYiA/IHNraXBfbXVsdGlfb3NfZGlyIDogc2tpcF9tdWx0aV9kaXIpKQorKwkgICAgICAgIHsKKysJICAgICAgICAgIGNvbnN0IGNoYXIgKnRoaXNfbXVsdGk7CisrCSAgICAgICAgICBzaXplX3QgdGhpc19tdWx0aV9sZW47CisrCisrCSAgICAgICAgICBpZiAocGwtPm9zX211bHRpbGliKQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9vc19kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX29zX2Rpcl9sZW47CisrCQkgICAgfQorKwkgICAgICAgICAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHRoaXNfbXVsdGkgPSBtdWx0aV9kaXI7CisrCQkgICAgICB0aGlzX211bHRpX2xlbiA9IG11bHRpX2Rpcl9sZW47CisrCQkgICAgfQorKworKwkgICAgICAgICAgLyogTG9vayBpbiBtdWx0aWxpYiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5IGZpcnN0ICovCisrCSAgICAgICAgICBpZiAodGhpc19tdWx0aV9sZW4pCisrCSAgICAgICAgICAgIHsKKysJCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgdGhpc19tdWx0aSwgdGhpc19tdWx0aV9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICBtZW1jcHkgKHBhdGggKyBsZW4gKyB0aGlzX211bHRpX2xlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworKwkgICAgICAgICAgICAgICAgaWYgKHJldCkKKysJCSAgICAgICAgICBicmVhazsKKysJICAgICAgICAgICAgfQorKwkgICAgICAgIH0KKysKKyAJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKyAJICAgICAgcmV0ID0gY2FsbGJhY2sgKHBhdGgsIGNhbGxiYWNrX2luZm8pOworIAkgICAgICBpZiAocmV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5MWY1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMKQEAgLTAsMCArMSwxMjAgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjUuMi4wIgorCisjU05BUCA9ICI1LTIwMTUwNDA1IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjUuMi4wIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNS4yOiR7RklMRV9ESVJOQU1FfS9nY2MtNS4yL2JhY2twb3J0OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisjQkFTRVVSSSA9ICJodHRwOi8vd3d3Lm5ldGd1bGwuY29tL2djYy9zbmFwc2hvdHMvJHtTTkFQfS9nY2MtJHtTTkFQfS50YXIuYnoyIgorQkFTRVVSSSA9ICIke0dOVV9NSVJST1J9L2djYy9nY2MtJHtQVn0vZ2NjLSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiYTUxYmNmZWIzZGE3ZGQ0YzYyM2UyNzIwN2VkNDM0NjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWY4MzViMDRiNWY3ZGQ0ZjRkMmRjOTYxOTBlYzE2MjFiOGQ4OWYyZGM2ZjYzOGY5ZjhiYzFiMTAxNGJhOGNhZCIKKworU1JDX1VSSSA9ICJcCisgICAgICAgICAgICR7QkFTRVVSSX0gXAorICAgICAgICAgICAke0JBQ0tQT1JUU30gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1jOTktc25wcmludGYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI1LWxpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOS1leHBvcnQtQ1BQLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM3LXByNjU3NzkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICIKKworQkFDS1BPUlRTID0gIiIKKyNTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7U05BUH0iCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc2NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGEwZmVlMGNlZTNkNGJkNGFhYjFlM2E4ZTA0NDQ2Zjk5ZDkxOGM0ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgMiArLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNzYxNmY4OC4uNTBlN2NiYyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQ2NCw3ICs3NDY0LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGM4NWEwOC4uZjM0YWY3ZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzEwNCw3ICszMTA0LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDMzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDc2MzUyNDhhNGM5YjUxZDcyM2Q3MjFhY2FlZWI1ZjJmMTE5NTc5ODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8IDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8IDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2EyNTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gM2FlZTU4YWQwNDNhZjMzYWIwMGM5Y2Q3YmM4OGYwY2FkZTgzZjIzNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8IDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8IDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggNmRhNWYyMi4uMmY4NWMyZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggZWUzZWY4Ni4uN2ZkNTQ4NSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCBmZDUyYjczLi4yNjI3Y2YzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzk0N2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gOWY3M2UwNjMxNWM5NDYyOWZiOTAyYmQ5NDIxOTY2N2NmODMwN2I4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDExNyArKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyAgICAgICAgfCAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAzMDAgKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgNjkyICsrKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3NSArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCAgICAgICB8ICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCBhMWUzMDFmLi4wZmU5MzI2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5ODMsNiArMTk4Myw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjE2Nyw2ICsyMTcwLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY1YjI4ZjQuLmZiYWQ2NjcgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU5MTMsNiArMTU5MTMsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYxOTEsNiArMTYxOTQsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDA2YjVkNDcuLjdkM2Y4MzUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCBhYTFiMmZhLi40NWM0NjE3IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMDUzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIGE4ZTY4MzkxN2EzZThhNjY0MjYzOWU2NWMwNmQ0ZDRmYzQ2Y2M4YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCA0NSArKysrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAxNCAtLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgNyAtLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgNyAtLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgNyArLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxOCArKysrLS0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDMgLS0KKyAxMCBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggMmFlM2U0YS4uZTc0ZmRkZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtNjAsNCArNjAsNDkgQEAgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3N4ZnJtX2wpIF9fd2NzeGZybV9sOworIGV4dGVybiAiQyIgX190eXBlb2Yod2N0eXBlX2wpIF9fd2N0eXBlX2w7CisgI2VuZGlmCisgCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sIG5sX2xhbmdpbmZvX2wKKysjIGRlZmluZSBfX3N0cmNvbGxfbCBzdHJjb2xsX2wKKysjIGRlZmluZSBfX3N0cmZ0aW1lX2wgc3RyZnRpbWVfbAorKyMgZGVmaW5lIF9fc3RydG9kX2wgc3RydG9kX2wKKysjIGRlZmluZSBfX3N0cnRvZl9sIHN0cnRvZl9sCisrIyBkZWZpbmUgX19zdHJ0b2xkX2wgc3RydG9sZF9sCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2wgc3RyeGZybV9sCisrIyBkZWZpbmUgX19uZXdsb2NhbGUgbmV3bG9jYWxlCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlIGZyZWVsb2NhbGUKKysjIGRlZmluZSBfX2R1cGxvY2FsZSBkdXBsb2NhbGUKKysjIGRlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKysKKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbCBpc3djdHlwZV9sCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbCB0b3dsb3dlcl9sCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbCB0b3d1cHBlcl9sCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sIHdjc2NvbGxfbAorKyMgIGRlZmluZSBfX3djc2Z0aW1lX2wgd2NzZnRpbWVfbAorKyMgIGRlZmluZSBfX3djc3hmcm1fbCB3Y3N4ZnJtX2wKKysjICBkZWZpbmUgX193Y3R5cGVfbCB3Y3R5cGVfbAorKyMgZW5kaWYKKysKKysjZWxzZQorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICBubF9sYW5naW5mbygoTikpCisrIyBkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjIGRlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyMgZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCisrIyBkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysvLyMgZGVmaW5lIF9fdXNlbG9jYWxlID8KKysvLworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICAgdG93bG93ZXIoKEMpKQorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICAgdG93dXBwZXIoKEMpKQorKyMgIGRlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorKy8vIyAgZGVmaW5lIF9fd2NzZnRpbWVfbChTLCBNLCBGLCBULCBMKSAgd2NzZnRpbWUoKFMpLCAoTSksIChGKSwgKFQpKQorKyMgIGRlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyAgZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyMgZW5kaWYKKysKKyAjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggNTA4MWRjMS4uMjE0MzBkMCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjAgKzM5LDYgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorLSN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CistI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorLSNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICB0ZW1wbGF0ZTw+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggZGEwN2MxZi4uNGJjYTVmMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorIHsKKyAgIGV4dGVybiAiQyIgX190eXBlb2YodXNlbG9jYWxlKSBfX3VzZWxvY2FsZTsKKyB9CisrI2RlZmluZSBfX3VzZWxvY2FsZSB1c2Vsb2NhbGUKKyAjZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK2luZGV4IGMyNjY0YTcuLmVjNWMzMjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMzYsMTMgKzM2LDYgQEAKKyAjaW5jbHVkZSA8bG9jYWxlPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggNzI5NGUzYS4uN2IxMjg2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTM4LDEzICszOCw2IEBACisgI3VuZGVmIF9MSUJDCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorLSNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorLSNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorLSNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK2luZGV4IDEzNTk0ZDkuLmQ3NjkzYjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0zOSwxMyArMzksMTAgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworICN1bmRlZiBnZXR0ZXh0CistI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBkY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorICNlbHNlCistI3VuZGVmIGdldHRleHQKKyAjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKyAjZW5kaWYKKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMTQyNDA3OC4uZDg5ZGEzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zNiwxNSArMzYsMTEgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKy1leHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKy0jZWxzZQorLSN1bmRlZiBfX3RleHRkb21haW4KKy0jdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorLSNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyN1bmRlZiB0ZXh0ZG9tYWluCisrI3VuZGVmIGJpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSB0ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorICNlbmRpZgorIAorICAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KK0BAIC03MCw3ICs2Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAorIAkJCSAgIGNvbnN0IGNoYXIqIF9fZGlyKSBjb25zdAorICAgICB7CistICAgICAgX19iaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworKyAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisgICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAgIH0KKyAKK0BAIC05MCw3ICs4Niw3IEBAIGV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorICAgICB7CisgICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1lIHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAgLy8gYmUgdXNlZC4KKy0gICAgICBfX3RleHRkb21haW4oX19zLmNfc3RyKCkpOworKyAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOworICAgICAgIHJldHVybiAwOworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggYWE1MjczMS4uMmU2ZjgwYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQzLDEwICs0Myw2IEBACisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIC8vIENvbnN0cnVjdCBhbmQgcmV0dXJuIHZhbGlkIHBhdHRlcm4gY29uc2lzdGluZyBvZiBzb21lIGNvbWJpbmF0aW9uIG9mOgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCA4ODNlYzFhLi4yYzcwNjQyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTQxLDkgKzQxLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBlMDcwN2Q3Li5kODQ4ZWQ1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTQwLDkgKzQwLDYgQEAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKyAKKyBuYW1lc3BhY2Ugc3RkCisgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIGNkYjllOWM5NDQwYmViNTliYzIwNDc2ZWVhNWE5Y2YyNTM4Y2QxOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0NTo1NyArMDQwMAorU3ViamVjdDogW1BBVENIIDA2LzM1XSB1Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIHwgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4Yjc5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDI0NGI5ZDFiNWNjNmQ1MzgyOTM1MTkyOTk4NTMxZWU3MGFmYjI2MmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgIDMgKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgNzQgKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgNDIgKysrKysrLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCA1MSArKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8IDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDM0ICsrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAxOCArKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8IDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjZiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwYTgwZjYwZGUwOGJkNTgyOWNhMWIzNzU4ZjcwYTkyYjYxZGRhMTQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCA2YjM4ZjJkLi5mY2E5OGZmIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1YjJhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDdiN2NhZjQzMDVhNTRmYTRkZmRkMGVmZDViZDQxY2I5NGNiY2Y0M2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IDM3ZjAxY2EuLmYwMGMwNmQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTE0NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUwMmVmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTkyIEBACitGcm9tIGQxZTg1YTM2M2ZmY2QyNTllOWIwODQxYjg1Y2ExMGFmMmYzMWJkNzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDEwLzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9jb21tb24ub3B0ICAgICAgfCAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAxNiArKysrKysrKysrKysrKysrCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8IDEwICsrKysrKysrKysKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8IDE5ICsrKysrKysrKysrKysrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9jb21tb24ub3B0IGIvZ2NjL2NvbW1vbi5vcHQKK2luZGV4IGI0OWFjNDYuLjc4M2QyMzEgMTAwNjQ0CistLS0gYS9nY2MvY29tbW9uLm9wdAorKysrIGIvZ2NjL2NvbW1vbi5vcHQKK0BAIC02MjMsNiArNjIzLDEwIEBAIFdyZXR1cm4tbG9jYWwtYWRkcgorIENvbW1vbiBWYXIod2Fybl9yZXR1cm5fbG9jYWxfYWRkcikgSW5pdCgxKSBXYXJuaW5nCisgV2FybiBhYm91dCByZXR1cm5pbmcgYSBwb2ludGVyL3JlZmVyZW5jZSB0byBhIGxvY2FsIG9yIHRlbXBvcmFyeSB2YXJpYWJsZS4KKyAKKytXcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0NvbW1vbiBWYXIoZmxhZ19wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzKSBJbml0KDEpIFdhcm5pbmcKKytXYXJuIGZvciAtSSBhbmQgLUwgb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgaWYgY3Jvc3MgY29tcGlsaW5nCisrCisgV3NoYWRvdworIENvbW1vbiBWYXIod2Fybl9zaGFkb3cpIFdhcm5pbmcKKyBXYXJuIHdoZW4gb25lIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgYW5vdGhlcgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcuaW4gYi9nY2MvY29uZmlnLmluCitpbmRleCBmMmVkMzAxLi5mMjkwYzZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5pbgorKysrIGIvZ2NjL2NvbmZpZy5pbgorQEAgLTE2OCw2ICsxNjgsMTIgQEAKKyAjZW5kaWYKKyAKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzICovCisrI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKysjdW5kZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysjZW5kaWYKKysKKysKKyAvKiBEZWZpbmUgaWYgeW91IHdhbnQgYWxsIG9wZXJhdGlvbnMgb24gUlRMICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgIFRoaXMgaXMgcXVpdGUgZXhwZW5zaXZlLiAqLworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5NTIzNzczLi4xODE3NDhlIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTkzMiw2ICs5MzIsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjYxLDYgKzE2NjIsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yODA4Nyw2ICsyODA5MCwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicytzZXR9IiA9IHNldDsgdGhlbiA6CisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggNjhiMGVlOC4uOGIwNzA3OCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC01NTcxLDYgKzU1NzEsMTYgQEAgQUNfQVJHX0VOQUJMRSh2ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicywKKyAgICAgICAgICAgICAgICAgW3NwZWNpZnkgdGhhdCBydW50aW1lIGxpYnJhcmllcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCBpbiBhIGNvbXBpbGVyLXNwZWNpZmljIGRpcmVjdG9yeV0pXSkKKyAKKytBQ19BUkdfRU5BQkxFKFtwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSksLAorKyAgICAgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICAgICAgWzFdLAorKyAgICAgICAgICAgW0RlZmluZSB0byB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXNdKQorK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgQUNfU1VCU1Qoc3ViZGlycykKKyBBQ19TVUJTVChzcmNkaXIpCitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IDUyMGMyYzUuLjBkZjhhNDcgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjY5LDYgKzI2OSw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgIC1Xbm8tc2hhZG93LWl2YXIgQGdvbAorIC1Xc2hpZnQtY291bnQtbmVnYXRpdmUgLVdzaGlmdC1jb3VudC1vdmVyZmxvdyBAZ29sCitAQCAtNDQzMiw2ICs0NDMzLDE0IEBAIG1hZGUgdXAgb2YgZGF0YSBvbmx5IGFuZCB0aHVzIHJlcXVpcmVzIG5vIHNwZWNpYWwgdHJlYXRtZW50LiAgQnV0LCBmb3IKKyBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sgdG8gYmUKKyBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCisgCisrQGl0ZW0gLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQG9waW5kZXggV25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstSX0gb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0KKytkaXJlY3RvcmllcyBzdWNoIGFzIEBmaWxley91c3IvaW5jbHVkZX0gd2hlbiBjcm9zcyBjb21waWxpbmcuICBUaGlzCisrb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2gKKytkaXJlY3RvcmllcyBjb250YWluIHRoZSBjb3JyZWN0IGhlYWRlcnMgYW5kIGxpYnJhcmllcyBmb3IgdGhlIHRhcmdldAorK3N5c3RlbSByYXRoZXIgdGhhbiB0aGUgaG9zdC4KKysKKyBAaXRlbSAtV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV2Zsb2F0LWVxdWFsCisgQG9waW5kZXggV25vLWZsb2F0LWVxdWFsCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBkOTU2YzM2Li42NzViY2MxIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04MzUsNiArODM1LDggQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICIle2Z1c2UtbGQ9KjotZnVzZS1sZD0lKn0gIiBMSU5LX0NPTVBSRVNTX0RFQlVHX1NQRUMgXAorICAgICIlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSAiIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiIFwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgIiBDSEtQX1NQRUMgIiBcCisgICAgICV7Zm9wZW5hY2N8Zm9wZW5tcHxmdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz0qOiU6aW5jbHVkZShsaWJnb21wLnNwZWMpJShsaW5rX2dvbXApfVwKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggNmM1NGNhNi4uY2MwYzkyMSAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAjaW5jbHVkZSAiaW5jcGF0aC5oIgorICNpbmNsdWRlICJjcHBkZWZhdWx0LmgiCisrI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorIAorIC8qIE1pY3Jvc29mdCBXaW5kb3dzIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgaW5vZGVzLgorICAgIFZNUyBoYXMgbm9uLW51bWVyaWMgaW5vZGVzLiAgKi8KK0BAIC0zODMsNiArMzg0LDI0IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgCX0KKyAgICAgICBmcHJpbnRmIChzdGRlcnIsIF8oIkVuZCBvZiBzZWFyY2ggbGlzdC5cbiIpKTsKKyAgICAgfQorKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykKKysgICAgeworKyAgICAgICBzdHJ1Y3QgY3BwX2RpciAqcDsKKysKKysgICAgICAgZm9yIChwID0gaGVhZHNbUVVPVEVdOyBwOyBwID0gcC0+bmV4dCkKKysgICAgICAgICB7CisrICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKysgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKysgICAgICAgICAgICAgICAgICAgICBwLT5uYW1lKTsKKysgICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyB9CisgCisgLyogVXNlIGdpdmVuIC1JIHBhdGhzIGZvciAjaW5jbHVkZSAiLi4uIiBidXQgbm90ICNpbmNsdWRlIDwuLi4+LCBhbmQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2N2Q5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmMTU4ZmNjMDg0ZTg4YjFkOGQxZWNmNWIwMDVkMzc3NzY1YWVmMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDA6MzQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8zNV0gZ2NjLXBvaXNvbi1kaXItZXh0ZW5kCisKK0FkZCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAoremVja2Utbm8taG9zdC1pbmNsdWRlcy5wYXRjaCBwYXRjaC4gIFRoZSBvcmlnaW5hbCBwYXRjaCBjaGVja2VkIGZvcgorL3Vzci9pbmNsdWRlLCAvc3cvaW5jbHVkZSBhbmQgL29wdC9pbmNsdWRlIGFuZCB0aGVuIHRyaWdnZXJlZCBhIGZhaWx1cmUgYW5kCithYm9ydGVkLgorCitJbnN0ZWFkLCB3ZSBhZGQgdGhlIHR3byBtaXNzaW5nIGl0ZW1zIHRvIHRoZSBjdXJyZW50IHNjYW4uICBJZiB0aGUgdXNlcgord2FudHMgdGhpcyB0byBiZSBhIGZhaWx1cmUsIHRoZXkgY2FuIGFkZCAiLVdlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvaW5jcGF0aC5jIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IGNjMGM5MjEuLjBiYzFmNjcgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMzk0LDcgKzM5NCw5IEBAIG1lcmdlX2luY2x1ZGVfY2hhaW5zIChjb25zdCBjaGFyICpzeXNyb290LCBjcHBfcmVhZGVyICpwZmlsZSwgaW50IHZlcmJvc2UpCisgICAgICAgICAgeworICAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorICAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorLSAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9zdy9pbmNsdWRlIiwgMTEpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL29wdC9pbmNsdWRlIiwgMTIpKSkKKyAgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisgICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTItZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmY2E3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYTU0MjM5Y2JkYzZmOTNjNmQ3NGVhNmIwNzhmMTQ3MDc3MGM0ZjVhYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjA4OjMxICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMzVdIGdjYy00LjMuMzogU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVAorCitCZWZvcmUgY29tbWl0dGluZywgSSBub3RpY2VkIHRoYXQgUFIvMzIxNjEgd2FzIG1hcmtlZCBhcyBhIGR1cCBvZiBQUi8zMjAwOSwgYnV0IG15IHByZXZpb3VzIHBhdGNoIGRpZCBub3QgZml4IGl0LgorCitUaGlzIGFsdGVybmF0aXZlIHBhdGNoIGlzIGJldHRlciBiZWNhdXNlIGl0IGxldHMgeW91IGp1c3QgdXNlIENGTEFHU19GT1JfVEFSR0VUIHRvIHNldCB0aGUgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGxpYmdjYy4gU2luY2UgYm9vdHN0cmFwcGVkIHRhcmdldCBsaWJyYXJpZXMgYXJlIG5ldmVyIGNvbXBpbGVkIHdpdGggdGhlIG5hdGl2ZSBjb21waWxlciwgaXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBkaWZmZXJlbnQgZmxhZ3MgZm9yIHN0YWdlMSBhbmQgbGF0ZXIgc3RhZ2VzLiBBbmQgaXQgYWxzbyBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIHRoYW4gQ0ZMQUdTX0ZPUl9UQVJHRVQuCisKK090aGVyIGNoYW5nZXMgSSBoYWQgdG8gZG8gaW5jbHVkZToKKworLSBtb3ZpbmcgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgQ0ZMQUdTX0ZPUl9UQVJHRVQgZnJvbSBNYWtlZmlsZS5hbSB0byBjb25maWd1cmUuYWMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBCT09UX0NGTEFHUyBhcmUgc3Vic3RpdHV0ZWQgaW50byBDRkxBR1NfRk9SX1RBUkdFVCAod2hpY2ggaXMgIi1PMiAtZyAkKENGTEFHUykiKSB2aWEgJChDRkxBR1MpLiBJdCBpcyBhbHNvIGNsZWFuZXIgdGhpcyB3YXkgdGhvdWdoLgorCistIHBhc3NpbmcgdGhlIHJpZ2h0IENGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBhcyBleHBvcnRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworSSBhbHNvIHN0b3BwZWQgcGFzc2luZyBMSUJDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgc2luY2UgdGhleSBhcmUgdW51c2VkIGluIHRoZSB3aG9sZSBzcmMgdHJlZS4gQW5kIEkgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiBhcyBILVAgcmVtaW5kZWQgbWUgdG8gZG8uCisKK0Jvb3RzdHJhcHBlZC9yZWd0ZXN0ZWQgaTY4Ni1wYy1saW51eC1nbnUsIHdpbGwgY29tbWl0IHRvIDQuNCBzaG9ydGx5LiBPayBmb3IgNC4zPworCitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDUwZTdjYmMuLjZiOTc2OTMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY3MzMsNiArNjczMywzOCBAQCBmaQorIAorIAorIAorKyMgRHVyaW5nIGdjYyBib290c3RyYXAsIGlmIHdlIHVzZSBzb21lIHJhbmRvbSBjYyBmb3Igc3RhZ2UxIHRoZW4gQ0ZMQUdTCisrIyBtaWdodCBiZSBlbXB0eSBvciAiLWciLiAgV2UgZG9uJ3QgcmVxdWlyZSBhIEMrKyBjb21waWxlciwgc28gQ1hYRkxBR1MKKysjIG1pZ2h0IGFsc28gYmUgZW1wdHkgKG9yICItZyIsIGlmIGEgbm9uLUdDQyBDKysgY29tcGlsZXIgaXMgaW4gdGhlIHBhdGgpLgorKyMgV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBUQVJHRVQgbGlicmFyaWVzICh3aGljaCB3ZSBrbm93IGFyZSBidWlsdCB3aXRoCisrIyBnY2MpIGFyZSBidWlsdCB3aXRoICItTzIgLWciLCBzbyBpbmNsdWRlIHRob3NlIG9wdGlvbnMgd2hlbiBzZXR0aW5nCisrIyBDRkxBR1NfRk9SX1RBUkdFVCBhbmQgQ1hYRkxBR1NfRk9SX1RBUkdFVC4KKytpZiB0ZXN0ICJ4JENGTEFHU19GT1JfVEFSR0VUIiA9IHg7IHRoZW4KKysgIENGTEFHU19GT1JfVEFSR0VUPSRDRkxBR1MKKysgIGNhc2UgIiAkQ0ZMQUdTICIgaW4KKysgICAgKiIgLU8yICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1nICIqIHwgKiIgLWczICIqKSA7OworKyAgICAqKSBDRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworK2lmIHRlc3QgIngkQ1hYRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDWFhGTEFHU19GT1JfVEFSR0VUPSRDWFhGTEFHUworKyAgY2FzZSAiICRDWFhGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLU8yICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iLWcgJENYWEZMQUdTIiA7OworKyAgZXNhYworK2ZpCisrCisrCisgIyBIYW5kbGUgLS13aXRoLWhlYWRlcnM9WFhYLiAgSWYgdGhlIHZhbHVlIGlzIG5vdCAieWVzIiwgdGhlIGNvbnRlbnRzIG9mCisgIyB0aGUgbmFtZWQgZGlyZWN0b3J5IGFyZSBjb3BpZWQgdG8gJCh0b29sZGlyKS9zeXMtaW5jbHVkZS4KKyBpZiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4ICYmIHRlc3QgeCIke3dpdGhfaGVhZGVyc30iICE9IHhubyA7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMy02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2MwNjYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbSBkNTE1MWJlYmQwNzllOTgxZGM3MTBmMmEwMzE4MzBkODljYjFlNzJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTA6MDYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gNjQtYml0IG11bHRpbGliIGhhY2suCisKK0dDQyBoYXMgaW50ZXJuYWwgbXVsdGlsaWIgaGFuZGxpbmcgY29kZSBidXQgaXQgYXNzdW1lcyBhIHZlcnkgc3BlY2lmaWMgcmlnaWQgZGlyZWN0b3J5CitsYXlvdXQuIFRoZSBidWlsZCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgbXVsdGlsaWIgbGF5b3V0IGlzIHZlcnkgZ2VuZXJpYyBhbmQgYWxsb3dzCitjb21wbGV0ZSBjdXN0b21pc2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgorCitUaGlzIHBhdGNoIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byBhbGxvdyBhbnkgY3VzdG9tIGRpcmVjdG9yaWVzIHRvIGJlIHBhc3NlZCBpbnRvIGdjYworYW5kIGhhbmRsZWQgY29ycmVjdGx5LiBJdCBmb3JjZXMgZ2NjIHRvIHVzZSB0aGUgYmFzZV9saWJkaXIgKHdoaWNoIGlzIHRoZSBjdXJyZW50CitkaXJlY3RvcnksICIuIikuIFdlIG5lZWQgdG8gZG8gdGhpcyBmb3IgZWFjaCBtdWx0aWxpYiB0aGF0IGlzIGNvbmZpZ3VyZWQgYXMgd2UgZG9uJ3QKK2tub3cgd2hpY2ggY29tcGlsZXIgb3B0aW9ucyBtYXkgYmUgYmVpbmcgcGFzc2VkIGludG8gdGhlIGNvbXBpbGVyLiBTaW5jZSB3ZSBoYXZlIGEgY29tcGlsZXIKK3BlciBtdWxpdGxpYiBhdCB0aGlzIHBvaW50IHRoYXQgaXNuJ3QgYW4gaXNzdWUuCisKK1RoZSBvbmUgcHJvYmxlbSBpcyB0aGUgdGFyZ2V0IGNvbXBpbGVyIGlzIG9ubHkgZ29pbmcgdG8gd29yayBmb3IgdGhlIGRlZmF1bHQgbXVsdGxpbGliIGF0Cit0aGlzIHBvaW50LiBJZGVhbGx5IHdlJ2QgZmlndXJlIG91dCB3aGljaCBtdWx0aWxpYnMgd2VyZSBiZWluZyBlbmFibGVkIHdpdGggd2hpY2ggcGF0aHMKK2FuZCBiZSBhYmxlIHRvIHBhdGNoIHRoZXNlIGVudHJpZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBjb3JyZWN0IHBhdGhzIGJ1dCB0aGlzIHdlCitkb24ndCBoYXZlIHN1Y2ggY29kZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGUgdGFyZ2V0IGdjYyByZWNpcGUgc2hvdWxkIGRvCithbmQgb3ZlcnJpZGUgdGhlc2UgcGxhdGZvcm0gZGVmYXVsdHMgaW4gaXRzIGJ1aWxkIGNvbmZpZy4KKworUlAgMTUvOC8xMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRWx2aXMgRG93c29uIDxlbHZpcy5kb3dzb25AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgICB8ICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8IDEwICsrKy0tLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQgfCAgNSArKy0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQgYi9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0CitpbmRleCBmNmRiYjc4Li5kNzcwZGE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAoraW5kZXggN2U5NjQwNi4uYjcyZGNiMCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK0BAIC0xNywxMCArMTcsNiBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorIE1VTFRJTElCX09QVElPTlMgPSBtYWJpPW4zMi9tYWJpPTMyL21hYmk9NjQKKy1NVUxUSUxJQl9ESVJOQU1FUyA9IG4zMiAzMiA2NAorLU1JUFNfRUwgPSAkKGlmICQoZmlsdGVyICVlbCwgJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJCh0YXJnZXQpKSkpLGVsKQorLU1JUFNfU09GVCA9ICQoaWYgJChzdHJpcCAkKGZpbHRlciBNQVNLX1NPRlRfRkxPQVRfQUJJLCAkKHRhcmdldF9jcHVfZGVmYXVsdCkpICQoZmlsdGVyIHNvZnQsICQod2l0aF9mbG9hdCkpKSxzb2Z0KQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBcCistCS4uL2xpYjMyJChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmluMzIkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliJChjYWxsIGlmX211bHRpYXJjaCw6bWlwcyQoTUlQU19FTCktbGludXgtZ251JChNSVBTX1NPRlQpKSBcCistCS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6bWlwczY0JChNSVBTX0VMKS1saW51eC1nbnVhYmk2NCQoTUlQU19TT0ZUKSkKKytNVUxUSUxJQl9ESVJOQU1FUyA9IC4gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisrCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitpbmRleCBiNmIzNTFkLi4xZDViMzdhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKK0BAIC0yNiwxMCArMjYsOSBAQAorICMgTVVMVElMSUJfT1NESVJOQU1FUyBhY2NvcmRpbmcgdG8gd2hhdCBpcyBmb3VuZCBvbiB0aGUgdGFyZ2V0LgorIAorIE1VTFRJTElCX09QVElPTlMgICAgOj0gbTY0L20zMgorLU1VTFRJTElCX0RJUk5BTUVTICAgOj0gNjQgMzIKKytNVUxUSUxJQl9ESVJOQU1FUyAgIDo9IC4gLgorIE1VTFRJTElCX0VYVFJBX09QVFMgOj0gCistTVVMVElMSUJfT1NESVJOQU1FUyA6PSBtNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjNjQtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMgKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGMtbGludXgtZ251KQorK01VTFRJTElCX09TRElSTkFNRVMgOj0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKyAKKyByczYwMDAtbGludXgubzogJChzcmNkaXIpL2NvbmZpZy9yczYwMDAvcnM2MDAwLWxpbnV4LmMKKyAJJChDT01QSUxFKSAkPAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRmZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorRnJvbSBkN2I0MmQ5M2QwNzdiMjUyM2MyNmYwZGZmMGI2YzQ0ZmRmZmY5ZDNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8IDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgOCArKysrKysrLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAoraW5kZXggOTgzZjRhOC4uOTY5MjRmNiAxMDA2NDQKKy0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAorKysrIGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitAQCAtMTU0Myw2ICsxNTQzLDEwIEBAIG5vc3RkaW5jKysKKyBDKysgT2JqQysrCisgRG8gbm90IHNlYXJjaCBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgQysrCisgCisrbm9zdGRsaWIrKworK0RyaXZlcgorK0RvIG5vdCBsaW5rIHN0YW5kYXJkIEMrKyBydW50aW1lIGxpYnJhcnkKKysKKyBvCisgQyBPYmpDIEMrKyBPYmpDKysgSm9pbmVkIFNlcGFyYXRlCisgOyBEb2N1bWVudGVkIGluIGNvbW1vbi5vcHQKK2RpZmYgLS1naXQgYS9nY2MvY3AvZysrc3BlYy5jIGIvZ2NjL2NwL2crK3NwZWMuYworaW5kZXggNjUzNmQ3ZS4uZjU3YTVkNCAxMDA2NDQKKy0tLSBhL2djYy9jcC9nKytzcGVjLmMKKysrKyBiL2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqKmluX2RlY29kZWRfb3B0aW9ucywKKyAgICAgICBzd2l0Y2ggKGRlY29kZWRfb3B0aW9uc1tpXS5vcHRfaW5kZXgpCisgCXsKKyAJY2FzZSBPUFRfbm9zdGRsaWI6CisrCWNhc2UgT1BUX25vc3RkbGliX186CisgCWNhc2UgT1BUX25vZGVmYXVsdGxpYnM6CisgCSAgbGlicmFyeSA9IC0xOworIAkgIGJyZWFrOworZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCAwZGY4YTQ3Li43Mzg1NmQwIDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTE5NSw2ICsxOTUsNyBAQCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorIC1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiBAZ29sCisgLWZ2dGFibGUtdmVyaWZ5PUBye1t9c3RkQHJ7fH1wcmVpbml0QHJ7fH1ub25lQHJ7XX0gQGdvbAorIC1mdnR2LWNvdW50cyAtZnZ0di1kZWJ1ZyBAZ29sCisrLW5vc3RkbGliKysgQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpPUB2YXJ7bn0gIC1XYWJpLXRhZyAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ4OCw3ICs0ODksNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorIC1zdGF0aWMtbGlibXB4IC1zdGF0aWMtbGlibXB4d3JhcHBlcnMgQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9IC16IEB2YXJ7a2V5d29yZH19CisgCitAQCAtMTExODUsNiArMTExODYsMTEgQEAgVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCisgbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCisgbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorIAorK0BpdGVtIC1ub3N0ZGxpYisrCisrQG9waW5kZXggbm9zdGRsaWIrKworK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorK09ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgorKworIEBjaW5kZXggQG9wdGlvbnstbGdjY30sIHVzZSB3aXRoIEBvcHRpb257LW5vc3RkbGlifQorIEBjaW5kZXggQG9wdGlvbnstbm9zdGRsaWJ9IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXMKKyBAY2luZGV4IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhbmQgQG9wdGlvbnstbm9zdGRsaWJ9CitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA2NzViY2MxLi5hMzdlYzhiIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC04NDUsNiArODQ1LDcgQEAgcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuICAqLworICAgICAlKG1mbGliKSAiIFNUQUNLX1NQTElUX1NQRUMgIlwKKyAgICAgJXtmcHJvZmlsZS1hcmNzfGZwcm9maWxlLWdlbmVyYXRlKnxjb3ZlcmFnZTotbGdjb3Z9ICIgU0FOSVRJWkVSX1NQRUMgIiBcCisgICAgICV7IW5vc3RkbGliOiV7IW5vZGVmYXVsdGxpYnM6JShsaW5rX3NzcCkgJShsaW5rX2djY19jX3NlcXVlbmNlKX19XAorKyAgICAleyFub3N0ZGxpYisrOn1cCisgICAgICV7IW5vc3RkbGliOiV7IW5vc3RhcnRmaWxlczolRX19ICV7VCp9IH19fX19fSIKKyAjZW5kaWYKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjFlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSBhZDE1OTI3OTE2OTgyODZiODA2MjZkZGQ1Njc5ZmYyZWY0NTdhYjc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggMTgxNzQ4ZS4uOTAwOTA2NCAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNjQ1MSwxMyArMjY0NTEsNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA4YjA3MDc4Li5jN2EyOGI0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQzNjEsMTMgKzQzNjEsNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWRlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMmIyMmVlMmU0NDY4OGY4YTcyYjlhZjc2YTA0MzFkODZiYWMwMGQ0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8IDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBhMzdlYzhiLi44N2I0N2M1IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MzUyLDYgKzQzNTIsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTA2MTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSAxMmY0NjdiYzZkODk1M2JhMzQyZmU1MTY2YjlhMmYzOTdiMzM0Nzk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxNy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbgorICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDRhYjc0MDUuLjY2MWFlMTcgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTUwMiw3ICs1MDIsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDkwMDkwNjQuLmYwNTljMmYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE4NDEsOCArMTE4NDEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBjN2EyOGI0Li4yZTY2OGE1IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE4MzIsOCArMTgzMiw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCBjMzJmMDg3Li42ODAzYWI5IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDksNyArMTA5LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzMzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDk1NTA2YjQ0YzllZjQ3MjVmZWY1MmZhODY0ZDNkM2ZjZjkzMWU0NDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMDowMSArMDQwMAorU3ViamVjdDogW1BBVENIIDE4LzM1XSBmb3J0cmFuIGNyb3NzLWNvbXBpbGUgaGFjay4KKworKiBGb3J0cmFuIHdvdWxkIGhhdmUgc2VhcmNoZWQgZm9yIGFybS1hbmdzdHJvbS1nbnVlYWJpLWdmb3J0cmFuIGJ1dCB3b3VsZCBoYXZlIHVzZWQKK3VzZWQgZ2ZvcnRhbi4gRm9yIGdjY180LjIuMi5iYiB3ZSB3YW50IHRvIHVzZSB0aGUgZ2ZvcnRyYW4gY29tcGlsZXIgZnJvbSBvdXIgY3Jvc3MKK2RpcmVjdG9yeS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYmdmb3J0cmFuL2NvbmZpZ3VyZSAgICB8IDIgKy0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK2luZGV4IGUxNTkyZjcuLjc2ZDE5YjMgMTAwNzU1CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorQEAgLTEyNzQ3LDcgKzEyNzQ3LDcgQEAgZXNhYworIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBhY19leHQ9JHthY19mY19zcmNleHQtZn0KKyBhY19jb21waWxlPSckRkMgLWMgJEZDRkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRGQyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZDRkxBR1MgJExERkxBR1MgJGFjX2ZjZmxhZ3Nfc3JjZXh0IGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworZGlmZiAtLWdpdCBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworaW5kZXggMzVhOGIzOS4uNmEwZDhhOSAxMDA2NDQKKy0tLSBhL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjCitAQCAtMjQwLDcgKzI0MCw3IEBAIEFDX1NVQlNUKGVuYWJsZV9zdGF0aWMpCisgCisgIyBXZSBuZWVkIGdmb3J0cmFuIHRvIGNvbXBpbGUgcGFydHMgb2YgdGhlIGxpYnJhcnkKKyAjQUNfUFJPR19GQyhnZm9ydHJhbikKKy1GQz0iJEdGT1JUUkFOIgorKyNGQz0iJEdGT1JUUkFOIgorIEFDX1BST0dfRkMoZ2ZvcnRyYW4pCisgCisgIyBleHRyYSBMRCBGbGFncyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIHRhcmdldHMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOS1saWJnY2Mtc2psai1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUzOTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSA5NGY2MTljZDMyNTdlMzVlMjBhODc3NjQwZDBjYjkwYzJiM2VmYzE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6NTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOS8zNV0gbGliZ2NjLXNqbGotY2hlY2sKKworYWNfZm5fY190cnlfY29tcGlsZSBkb2VzbnQgc2VlbSB0byBrZWVwIHRoZSBpbnRlcm1lZGlhdGUgZmlsZXMKK3doaWNoIGFyZSBuZWVkZWQgZm9yIHNqbGogdGVzdCB0byBwYXNzIHNpbmNlIGl0IGdyZXBzIGludG8gdGhlCitnZW5lcmF0ZWQgZmlsZS4gU28gd2UgcnVuIHRoZSBjb21waWxlciBjb21tYW5kIHVzaW5nIEFDX1RSWV9DT01NQU5ECit3aGljaCB0aGVuIGdlbmVyYXRlcyB0aGUgbmVlZGVkIC5zIGZpbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJnY2MvY29uZmlndXJlICAgIHwgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAxMCArKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUgYi9saWJnY2MvY29uZmlndXJlCitpbmRleCAwOGM5MzE5Li41ZmZhZWIzIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZQorKysrIGIvbGliZ2NjL2NvbmZpZ3VyZQorQEAgLTQ1NzAsMTcgKzQ1NzAsMTkgQEAgdm9pZCBmb28gKCkKKyB9CisgCisgX0FDRU9GCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistaWYgYWNfZm5fY190cnlfY29tcGlsZTsgdGhlbiA6CisraWYgeyBhY190cnk9JyR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKKysgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY190cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCisgICBmaQorIGZpCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorIHJtIC1mIGNvbmZ0ZXN0KgorIAorIGZpCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZS5hYyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK2luZGV4IDFjNDA1ZTguLmY1Mjk3NWQgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlLmFjCisrKysgYi9saWJnY2MvY29uZmlndXJlLmFjCitAQCAtMjU1LDE2ICsyNTUsMTQgQEAgdm9pZCBmb28gKCkKKyAgIGJhcigpOworIH0KKyBdKV0pCistQ0ZMQUdTX2hvbGQ9JENGTEFHUworLUNGTEFHUz0iLS1zYXZlLXRlbXBzIC1mZXhjZXB0aW9ucyIKKyBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz11bmtub3duCistQVNfSUYoW2FjX2ZuX2NfdHJ5X2NvbXBpbGVdLAorLSAgW2lmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmIEFDX1RSWV9DT01NQU5EKCR7Q0MtY2N9IC1mZXhjZXB0aW9ucyAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mQVNfTUVTU0FHRV9MT0dfRkQpOyB0aGVuCisrICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKy0gIGZpXSkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisrICBmaQorK2ZpCisgcm0gLWYgY29uZnRlc3QqCisgXSkKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjNjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA2ZTYyODNkNjQ1YzgzY2E1MzQyMTlhMDJhZTg4MmEzZDdiZTk1ZmYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjI6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gY3BwOiBob25vciBzeXNyb290LgorCitDdXJyZW50bHksIGlmIHRoZSBnY2MgdG9vbGNoYWluIGlzIHJlbG9jYXRlZCBhbmQgaW5zdGFsbGVkIGZyb20gc3N0YXRlLCB0aGVuIHlvdSB0cnkgYW5kIGNvbXBpbGUKK3ByZXByb2Nlc3NlZCBzb3VyY2UgKC5pIG9yIC5paSBmaWxlcyksIHRoZSBjb21waWxlciB3aWxsIHRyeSBhbmQgYWNjZXNzIHRoZSBidWlsdGluIHN5c3Jvb3QgbG9jYXRpb24KK3JhdGhlciB0aGFuIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUuIElmIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeSBpcworcGVybWlzc2lvbiBkZW5pZWQgKHVucmVhZGFibGUpLCBnY2Mgd2lsbCBlcnJvci4KKworVGhpcyBoYXBwZW5zIHdoZW4gY2NhY2hlIGlzIGluIHVzZSBkdWUgdG8gdGhlIGZhY3QgaXQgdXNlcyBwcmVwcm9jZXNzZWQgc291cmNlIGZpbGVzLgorCitUaGUgZml4IGJlbG93IGFkZHMgJUkgdG8gdGhlIGNwcC1vdXRwdXQgc3BlYyBtYWNybyBzbyB0aGUgZGVmYXVsdCBzdWJzdGl0dXRpb25zIGZvciAtaXByZWZpeCwKKy1pc3lzdGVtLCAtaXN5c3Jvb3QgaGFwcGVuIGFuZCB0aGUgY29ycmVjdCBzeXNyb290IGlzIHVzZWQuCisKK1tZT0NUTyAjMjA3NF0KKworUlAgMjAxMi8wNC8xMworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jcC9sYW5nLXNwZWNzLmggfCAyICstCisgZ2NjL2djYy5jICAgICAgICAgICB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jcC9sYW5nLXNwZWNzLmggYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitpbmRleCBiMDcyOGYwLi5lNjllZTdkIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2xhbmctc3BlY3MuaAorKysrIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAorQEAgLTYzLDUgKzYzLDUgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIHsiLmlpIiwgIkBjKystY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAYysrLWNwcC1vdXRwdXQiLAorICAgICIleyFNOiV7IU1NOiV7IUU6XAorLSAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICUyXAorKyAgICBjYzFwbHVzIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICUyXAorICAgICAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggODdiNDdjNS4uZTZlZmFlNyAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTE0Miw3ICsxMTQyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21waWxlciBkZWZhdWx0X2NvbXBpbGVyc1tdID0KKyAgICAgICAgICAgICAgICAgICAgICVXe28qOi0tb3V0cHV0LXBjaD0lKn19JVZ9fX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLmkiLCAiQGNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGNwcC1vdXRwdXQiLAorLSAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisrICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKyAgIHsiLnMiLCAiQGFzc2VtYmxlciIsIDAsIDAsIDB9LAorICAgeyJAYXNzZW1ibGVyIiwKKyAgICAiJXshTToleyFNTToleyFFOiV7IVM6YXMgJShhc21fZGVidWcpICUoYXNtX29wdGlvbnMpICVpICVBIH19fX0iLCAwLCAwLCAwfSwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjEtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhZDQ4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3Zjc2NmZjNDdmOTM4OGRkMDA5NDg1MmE0M2YxYWYyNTY4YjRiOWIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjM6MDggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gTUlQUzY0OiBEZWZhdWx0IHRvIE42NCBBQkkKKworTUlQUzY0IGRlZmF1bHRzIHRvIG4zMiBBQkksIHRoaXMgcGF0Y2ggbWFrZXMgaXQKK3NvIHRoYXQgaXQgZGVmYXVsdHMgdG8gTjY0IEFCSQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBjYjA4YTVjLi5iMTU1NzQ0IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjAxMSwyOSArMjAxMSwyOSBAQCBtaXBzKi0qLWxpbnV4KikJCQkJIyBMaW51eCBNSVBTLCBlaXRoZXIgZW5kaWFuLgorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHMzMgorIAkJCTs7CisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCisgCQkJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3Qtc3QiCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHM2NG9jdGVvbiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0NQVV9TVFJJTkdfREVGQVVMVD1cXFwib2N0ZW9uXFxcIiIKKyAJCQl0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19TT0ZUX0ZMT0FUX0FCSQorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzaXNhNjRyNiotKi1saW51eCopCistCQkJZGVmYXVsdF9taXBzX2FiaT1uMzIKKysJCQlkZWZhdWx0X21pcHNfYWJpPTY0CisgCQkJZGVmYXVsdF9taXBzX2FyY2g9bWlwczY0cjYKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwc2lzYTY0cjIqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHIyCisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHM2NCotKi1saW51eCogfCBtaXBzaXNhNjQqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCWVzYWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjItRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1MjBkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2gKQEAgLTAsMCArMSwyMTYgQEAKK0Zyb20gNGY5NGFkZGVkOGI3MDQzNjQyMzg2YjMxZWQ0YzNhMWJkMDE2ZjMxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI0OjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIERlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCisgcmVsYXRpdmUgdG8gU1lTVEVNTElCU19ESVIKKworVGhpcyBwYXRjaCBkZWZpbmVzIEdMSUJDX0RZTkFNSUNfTElOS0VSIGFuZCBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKK3JlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSIHdoaWNoIGNhbiBiZSBzZXQgaW4gZ2VuZXJhdGVkIGhlYWRlcnMKK1RoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIG9mIGhhcmRjb2RlZCBtdWx0aWxpYiBpbiBnY2MKK0NoYW5nZSBpcyBvbmx5IGZvciB0aGUgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgaW4gT0UgaW5jbHVkaW5nCitTSCwgc3BhcmMsIGFscGhhIGZvciBwb3NzaWJsZSBmdXR1cmUgc3VwcG9ydCAoaWYgYW55KQorCitSZW1vdmVzIHRoZSBkb19oZWFkZXJmaXggdGFzayBpbiBtZXRhZGF0YQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgNCArKy0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggICAgICB8ICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICA2ICsrKy0tLQorIGdjYy9jb25maWcvbGludXguaCAgICAgICAgICAgfCAgOCArKysrLS0tLQorIGdjYy9jb25maWcvbWlwcy9saW51eC5oICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggIHwgMTAgKysrKystLS0tLQorIGdjYy9jb25maWcvc2gvbGludXguaCAgICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXguaCAgICAgfCAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgNCArKy0tCisgMTEgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAoraW5kZXggMmM3MGEyZi4uZGQwNDhkYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK0BAIC0yMyw4ICsyMyw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgI2RlZmluZSBFWFRSQV9TUEVDUyBcCisgeyAiZWxmX2R5bmFtaWNfbGlua2VyIiwgRUxGX0RZTkFNSUNfTElOS0VSIH0sCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUgkiL2xpYi9sZC1saW51eC5zby4yIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IGU5ZDY1ZGMuLmNmZGYzZjAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTY4LDggKzY4LDggQEAKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUIGFuZCBUQVJHRVRfREVGQVVMVF9GTE9BVF9BQkkuICAqLworIAorICN1bmRlZiAgR0xJQkNfRFlOQU1JQ19MSU5LRVIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIi9saWIvbGQtbGludXguc28uMyIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0hBUkRfRkxPQVQgIi9saWIvbGQtbGludXgtYXJtaGYuc28uMyIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hcm1oZi5zby4zIgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAoraW5kZXggMTI3OWNiYS4uMWRkZTc0NyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorQEAgLTYyLDcgKzYyLDcgQEAKKyAKKyAjZGVmaW5lIExJQkdDQ19TUEVDICIle21mbG9hdC1hYmk9c29mdCo6LWxmbG9hdH0gLWxnY2MiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2RlZmluZSBMSU5VWF9UQVJHRVRfTElOS19TUEVDICAiJXtoKn0gXAorICAgICV7c3RhdGljOi1Cc3RhdGljfSBcCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmggYi9nY2MvY29uZmlnL2kzODYvbGludXguaAoraW5kZXggYTEwMDk2My4uMjFiYTJiMiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTIwLDQgKzIwLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmggYi9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitpbmRleCBhMjdkM2JlLi42MTg1Y2NlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorQEAgLTI3LDYgKzI3LDYgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbGludXguaCBiL2djYy9jb25maWcvbGludXguaAoraW5kZXggODU3Mzg5YS4uMjJiOWJlNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9saW51eC5oCitAQCAtNzMsMTAgKzczLDEwIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggYi9nY2MvY29uZmlnL21pcHMvbGludXguaAoraW5kZXggOTFkZjI2MS4uYzMwNmFmYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgYi9nY2MvY29uZmlnL21pcHMvbGludXguaAorQEAgLTIyLDIwICsyMiwyMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05OMzIgImVsZjMyJXtFQjpifSV7RUw6bH10c21pcG4zMiIKKyAKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYjY0L2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliNjQvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjMyL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0CisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZDY0LXVDbGliYy1taXBzbjguc28uMDs6L2xpYi9sZDY0LXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMH0iCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIzMi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIzMi9sZC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMH0iCisgCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVJOMzIgIi9zeXN0ZW0vYmluL2xpbmtlcjMyIgorICNkZWZpbmUgR05VX1VTRVJfRFlOQU1JQ19MSU5LRVJOMzIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAoraW5kZXggMDg3OWU3ZS4uMzFjNDMzOCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtMzU3LDE0ICszNTcsMTQgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yfSIKKyAjZWxzZQorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOi9saWI2NC9sZDY0LnNvLjI7Oi9saWI2NC9sZDY0LnNvLjF9IgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYyOiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMjs6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xfSIKKyAjZW5kaWYKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wIgorICNpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19VQ0xJQkMKKyAjZGVmaW5lIENIT09TRV9EWU5BTUlDX0xJTktFUihHLCBVKSAiJXttZ2xpYmM6IiBHICI7OiIgVSAifSIKKyAjZWxpZiBERUZBVUxUX0xJQkMgPT0gTElCQ19HTElCQworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc2gvbGludXguaCBiL2djYy9jb25maWcvc2gvbGludXguaAoraW5kZXggMGY1ZDYxNC4uMTY4NDE2YyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc2gvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zaC9saW51eC5oCitAQCAtNDMsNyArNDMsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX0VORCBmaWxlX2VuZF9pbmRpY2F0ZV9leGVjX3N0YWNrCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYCisgI2RlZmluZSBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWCAiX2xpbnV4IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc3BhcmMvbGludXguaCBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAoraW5kZXggNTZkZWY0Yi4uMDBiNTY0YyAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvc3BhcmMvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCitAQCAtODMsNyArODMsNyBAQCBleHRlcm4gY29uc3QgY2hhciAqaG9zdF9kZXRlY3RfbG9jYWxfY3B1IChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK2luZGV4IGZhODA1ZmQuLjBlYjRhY2QgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorKysrIGIvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKK0BAIC04NCw4ICs4NCw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzdkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMy1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA4ZGI2MDYyMDU0ODdlYmIwM2VhZTc4ODgyNmZhZjY0YmQ2OTE4NDUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjY6MzcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gZ2NjOiBGaXggYXJndW1lbnQgbGlzdCB0b28gbG9uZyBlcnJvci4KKworVGhlcmUgd291bGQgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gdGhlCitidWlsZCBkaXJlY3RvcnkgaXMgbG9uZ2VyIHRoYW4gMjAwLCB0aGlzIGlzIGNhdXNlZCBieToKKworaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YAorCitUaGUgUExVR0lOX0hFQURFUlMgaXMgdG9vIGxvbmcgYmVmb3JlIHNvcnQsIHNvIHRoZSAiZWNobyIgY2FuJ3QgaGFuZGxlCitpdCwgdXNlIHRoZSAkKHNvcnQgbGlzdCkgb2YgR05VIG1ha2Ugd2hpY2ggY2FuIGhhbmRsZSB0aGUgdG9vIGxvbmcgbGlzdAord291bGQgZml4IHRoZSBwcm9ibGVtLCB0aGUgaGVhZGVyIHdvdWxkIGJlIHNob3J0IGVub3VnaCBhZnRlciBzb3J0ZWQuCitUaGUgInRyICcgJyAnXDAxMiciIHdhcyB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGUgc3BhY2UgdG8gIlxuIiwgdGhlCiskKHNvcnQgbGlzdCkgZG9lc24ndCBuZWVkIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDY2MWFlMTcuLjk0NzBhOTIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTMyNTUsNyArMzI1NSw3IEBAIGluc3RhbGwtcGx1Z2luOiBpbnN0YWxsZGlycyBsYW5nLmluc3RhbGwtcGx1Z2luIHMtaGVhZGVyLXZhcnMgaW5zdGFsbC1nZW5ndHlwZQorICMgV2Uga2VlcCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgZmlsZXMgaW4gY29uZmlnIG9yIGMtZmFtaWx5IGFuZCAuZGVmCisgIyBmaWxlcy4gQWxsIG90aGVyIGZpbGVzIGFyZSBmbGF0dGVuZWQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKHBsdWdpbl9pbmNsdWRlZGlyKQorLQloZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpICQkKGNkICQoc3JjZGlyKTsgZWNobyAqLmggKi5kZWYpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgOyBcCisrCWhlYWRlcnM9IiQoc29ydCAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSkiOyBcCisgCXNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2A7IFwKKyAJZm9yIGZpbGUgaW4gJCRoZWFkZXJzOyBkbyBcCisgCSAgaWYgWyAtZiAkJGZpbGUgXSA7IHRoZW4gXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI0LURpc2FibGUtc2R0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMjE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBlMTM2MzQyZDJmN2MwYmRiMWNmNGI1N2FkMzQ0MGQzYzllNzEwMzIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNC8zNV0gRGlzYWJsZSBzZHQuCisKK1dlIGRvbid0IGxpc3QgZHRyYWNlIGluIERFUEVORFMgc28gd2Ugc2hvdWxkbid0IGJlIGRlcGVuZGluZyBvbiB0aGlzIGhlYWRlci4KK0l0IG1heSBvciBtYXkgbm90IGV4aXN0IGZyb20gcHJlaXZvdXMgYnVpbGRzIHRob3VnaC4gVG8gYmUgZGV0ZXJtaW5zdGljLCBkaXNhYmxlCitzZHQuaCB1c2FnZSBhbHdheXMuIFRoaXMgYXZvaWRzIGJ1aWxkIGZhaWx1cmVzIGlmIHRoZSBoZWFkZXIgaXMgcmVtb3ZlZCBhZnRlciBjb25maWd1cmUKK2J1dCBiZWZvcmUgbGliZ2NjIGlzIGNvbXBpbGVkIGZvciBleGFtcGxlLgorCitSUCAyMDEyLzgvNworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitEaXNhYmxlIHNkdCBmb3IgbGlic3RkYysrLXYzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtoYWNrXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICAgICAgICAgICB8IDEyICsrKysrKy0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgICAgICAgICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgIHwgIDYgKysrLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBmMDU5YzJmLi45ODg1M2IzIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTI3NzMzLDEyICsyNzczMywxMiBAQCBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5IiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkuLi4gIiA+JjY7IH0KKyBoYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCistCistZmkKKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIworKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjCisrI2ZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRoYXZlX3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDJlNjY4YTUuLjUyY2RjYjggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNTIzMiwxNSArNTIzMiwxNSBAQCBpZiB0ZXN0IHgkZ2NjX2N2X2xpYmNfcHJvdmlkZXNfc3NwID0geHllczsgdGhlbgorIGZpCisgCisgIyBUZXN0IGZvciA8c3lzL3NkdC5oPiBvbiB0aGUgdGFyZ2V0LgorLUdDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKy1BQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorLWhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0gIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKy0gICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorLWZpCistQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKysjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisrIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorKyNmaQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGZiYWQ2NjcuLjdkNWE2YzYgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMjA4OTcsMTEgKzIwODk3LDExIEBAIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKyAKKy0gIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisrIyAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKyAKKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisgCistICBmaQorKyMgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGdsaWJjeHhfY3Zfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworaW5kZXggN2E3YzFkOC4uYjEzZWFiYyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK0BAIC0yMjksNyArMjI5LDcgQEAgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ0VTU09SU19PTkxOCisgR0xJQkNYWF9DSEVDS19TQ19OUFJPQ19PTkxOCisgR0xJQkNYWF9DSEVDS19QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUAorIEdMSUJDWFhfQ0hFQ0tfU1lTQ1RMX0hXX05DUFUKKy1HTElCQ1hYX0NIRUNLX1NEVF9ICisrI0dMSUJDWFhfQ0hFQ0tfU0RUX0gKKyAKKyAjIENoZWNrIGZvciBhdmFpbGFibGUgaGVhZGVycy4KKyBBQ19DSEVDS19IRUFERVJTKFtlbmRpYW4uaCBleGVjaW5mby5oIGZsb2F0LmggZnAuaCBpZWVlZnAuaCBpbnR0eXBlcy5oIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjUtbGlidG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5NzdkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAxY2E1NDk2N2Q4ZjY3YWIwZWNhNzcyMzM0ZTVjOTI1YTVlOGM4MGNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mjk6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gbGlidG9vbAorCitsaWJzdGRjKysgZnJvbSBnY2MtcnVudGltZSBnZXRzIGNyZWF0ZWQgd2l0aCAtcnBhdGg9L3Vzci9saWIvLi4vbGliIGZvciBxZW11eDg2LTY0Cit3aGVuIHJ1bm5pbmcgb24gYW0geDg2XzY0IGJ1aWxkIGhvc3QuCisKK1RoaXMgcGF0Y2ggc3RvcHMgdGhpcyBzcGVhZGluZyB0byBsaWJkaXIgaW4gdGhlIGxpYnN0ZGMrKy5sYSBmaWxlIHdpdGhpbiBsaWJ0b29sLgorQXJndWFibHksIGl0IHNob3VsZG4ndCBiZSBwYXNzaW5nIHRoaXMgaW50byBsaWJ0b29sIGluIHRoZSBmaXJzdCBwbGFjZSBidXQKK2ZvciBub3cgdGhpcyByZXNvbHZlcyB0aGUgbmFzdGllc3QgcHJvYmxlbXMgdGhpcyBjYXVzZXMuCisKK2Z1bmNfbm9ybWFsX2Fic3BhdGggd291bGQgcmVzb2x2ZSBhbiBlbXB0eSBwYXRoIHRvIGBwd2RgIHNvIHdlIG5lZWQKK3RvIGZpbHRlciB0aGUgemVybyBjYXNlLgorCitSUCAyMDEyLzgvMjQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsdG1haW4uc2ggfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDk1MDNlYzguLjAxMjFmYmEgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYzNTksNiArNjM1OSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorIAorICAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKysgICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisrCWZ1bmNfbm9ybWFsX2Fic3BhdGggIiRpbnN0YWxsX2xpYmRpciIKKysJaW5zdGFsbF9saWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisrICAgICAgZmkKKyAKKyAgICAgICBvbGRsaWJzPQorICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhNjUyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA1ZjVjYTU3ZmNlYzRiYWZlMzc4MDM3MWQxMzQyYWNkNDBjNjA4Njk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzA6MzIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNi8zNV0gZ2NjOiBhcm12NDogcGFzcyBmaXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJLgorCitUaGUgTElOS19TUEVDIGZvciBsaW51eCBnZXRzIG92ZXJ3cml0dGVuIGJ5IGxpbnV4LWVhYmkuaCB3aGljaAorbWVhbnMgdGhlIHZhbHVlIG9mIFRBUkdFVF9GSVhfVjRCWF9TUEVDIGdldHMgbG9zdCBhbmQgYXMgYSByZXN1bHQKK3RoZSBvcHRpb24gaXMgbm90IHBhc3NlZCB0byBsaW5rZXIgd2hlbiBjaG9zaW5nIG1hcmNoPWFybXY0CitUaGlzIHBhdGNoIHJlZGVmaW5lcyB0aGlzIGluIGxpbnV4LWVhYmkuaCBhbmQgcmVpbnNlcnRzIGl0Citmb3IgZWFiaSBkZWZhdWx0aW5nIHRvb2xjaGFpbnMuCisKK1dlIG1pZ2h0IHdhbnQgdG8gc2VuZCBpdCB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggfCA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAoraW5kZXggY2ZkZjNmMC4uMDQ4YTA2MiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitAQCAtNzcsMTAgKzc3LDE0IEBACisgICAgICV7bWZsb2F0LWFiaT1zb2Z0KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX1NPRlRfRkxPQVQgIn0gXAorICAgICAleyFtZmxvYXQtYWJpPSo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9ERUZBVUxUICJ9IgorIAorKy8qIEZvciBhcm12NCB3ZSBwYXNzIC0tZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSSAqLworKyN1bmRlZiBUQVJHRVRfRklYX1Y0QlhfU1BFQworKyNkZWZpbmUgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgIiV7bWNwdT1hcm04fG1jcHU9YXJtODEwfG1jcHU9c3Ryb25nYXJtKnxtYXJjaD1hcm12NDogLS1maXgtdjRieH0iCisrCisgLyogQXQgdGhpcyBwb2ludCwgYnBhYmkuaCB3aWxsIGhhdmUgY2xvYmJlcmVkIExJTktfU1BFQy4gIFdlIHdhbnQgdG8KKyAgICB1c2UgdGhlIEdOVS9MaW51eCB2ZXJzaW9uLCBub3QgdGhlIGdlbmVyaWMgQlBBQkkgdmVyc2lvbi4gICovCisgI3VuZGVmICBMSU5LX1NQRUMKKy0jZGVmaW5lIExJTktfU1BFQyBFQUJJX0xJTktfU1BFQwkJCQkJXAorKyNkZWZpbmUgTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDIEVBQklfTElOS19TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNy1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDVkYTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSA0ODRlOGMxZThkNDNlNjI2ZWUyZGRiZGU5ZWI4ZTBhZjdhMTc2YWVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5ODg1M2IzLi5kMGVjNTBmIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExODIxLDEwICsxMTgyMSwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTExODM1LDYgKzExODQ1LDEwIEBAIHRtX2ZpbGVfbGlzdD0ib3B0aW9ucy5oIgorIHRtX2luY2x1ZGVfbGlzdD0ib3B0aW9ucy5oIGluc24tY29uc3RhbnRzLmgiCisgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICBjYXNlICRmIGluCisrICAgICovbGludXg2NC5oICkKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICA7OworICAgICAuLyogKQorICAgICAgICBmPWBlY2hvICRmIHwgc2VkICdzL14uLi8vJ2AKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDUyY2RjYjguLjNjZjYwNmEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMTgxMiwxMCArMTgxMiwyMCBAQCBkb25lCisgdG1ha2VfZmlsZV89CisgZm9yIGYgaW4gJHt0bWFrZV9maWxlfQorIGRvCistCWlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorLQl0aGVuCistCQl0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCistCWZpCisrICBjYXNlICRmIGluCisrICAgICovdC1saW51eDY0ICkKKysgICAgICAgaWYgdGVzdCAtZiAuL2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IC4vY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAqICkKKysgICAgICAgaWYgdGVzdCAtZiAke3NyY2Rpcn0vY29uZmlnLyRmCisrICAgICAgIHRoZW4KKysgICAgICAgICB0bWFrZV9maWxlXz0iJHt0bWFrZV9maWxlX30gXCQoc3JjZGlyKS9jb25maWcvJGYiCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICBlc2FjCisgZG9uZQorIHRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZV99IgorIAorQEAgLTE4MjYsNiArMTgzNiwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTAyZTkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDExMmNhOWY4NjAxMTRiYzc5MjczYTc5ZWQ0MjcyMmZkYzlkZWQ2ZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTozOTozOCArMDAwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBBdm9pZCB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYQorIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDAxMjFmYmEuLjUyYmRiZGIgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI5LWV4cG9ydC1DUFAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDVhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gYTk4MzAzM2YxMzI3YTY5MmFmNTViZThkMWFhNjFhZWRlMThjNGFmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA5OjQwOjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjkvMzVdIGV4cG9ydCBDUFAKKworVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuCitidWlsZGluZyBnY2MtY3Jvc3MtY2FuYWRpYW4gZm9yIGEgbWluZ3cgdGFyZ2V0dGVkIHNkaywgdGhlIGZvbGxvd2luZyBjYW4gYmUgZm91bmQKK2luIGJ1aWxkLng4Nl82NC1wb2t5c2RrLW1pbmd3MzIuaTU4Ni1wb2t5LWxpbnV4L2J1aWxkLXg4Nl82NC1saW51eC9saWJpYmVydHkvY29uZmlnLmxvZzoKKworY29uZmlndXJlOjM2NDE6IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzCitjb25maWd1cmU6MzY2NjogZ2NjICAtYyAtaXN5c3RlbS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgY29uZnRlc3QuYyA+JjUKK2NvbmZpZ3VyZTozNjY2OiAkPyA9IDAKK2NvbmZpZ3VyZTozNjk4OiByZXN1bHQ6IG5vCitjb25maWd1cmU6Mzc4NjogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IKK2NvbmZpZ3VyZTozODU2OiByZXN1bHQ6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIKK2NvbmZpZ3VyZTozODc2OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlCit1c2luZyB0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMgoraGVhZGVycyBhcmUgdmVyeSBkaWZmZXJlbnQsIHVzaW5nIHRoZSB3cm9uZyBjcHAgaXMgYSByZWFsIHByb2JsZW0uIEl0IGlzIGxlYWtpbmcKK2ludG8gY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkCitmYWlsdXJlcyByZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQKK2Vudmlyb25tZW50IHdoZW4gdXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUKK3RoZSB2ZXJzaW9uIHdoaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvCithdm9pZCB0aGUgcHJvYmxlbS4KKworUlAgMjIvMDgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzNmI0MDA4Li5hNzgzZTFlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTQ5LDYgKzE0OSw3IEBAIEJVSUxEX0VYUE9SVFMgPSBcCisgCUFSPSIkKEFSX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVI7IFwKKyAJQVM9IiQoQVNfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUzsgXAorIAlDQz0iJChDQ19GT1JfQlVJTEQpIjsgZXhwb3J0IENDOyBcCisrCUNQUD0iJChDQ19GT1JfQlVJTEQpIC1FIjsgZXhwb3J0IENQUDsgXAorIAlDRkxBR1M9IiQoQ0ZMQUdTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0ZMQUdTOyBcCisgCUNPTkZJR19TSEVMTD0iJChTSEVMTCkiOyBleHBvcnQgQ09ORklHX1NIRUxMOyBcCisgCUNYWD0iJChDWFhfRk9SX0JVSUxEKSI7IGV4cG9ydCBDWFg7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzAtRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczZGNhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSAzZDg3MGExODRjMDVkZjEzMzhkYjE4NzAzMDFjNDE0NGJhOTlmYzNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMzAvMzVdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsCitub3QgYmUgYWJsZSB0byBnZW5lcmF0ZSBjb2RlIGZvciBTUEUgdGFyZ2V0cyAoZTUwMHYxL3YyKS4KK0dDQyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eHNwZSB3aWxsIG5vdCBiZSBhYmxlIHRvCitnZW5lcmF0ZSBBbHRpVmVjIGluc3RydWN0aW9ucyAoZm9yIGU2NTAwKS4KK1RoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyZWQgZmlsZSBzdWNoIHRoYXQgU1BFIG9yIEFsdGlWZWMgY29kZQorY2FuIGJlIGdlbmVyYXRlZCB3aGVuIGdjYyBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eC4KK1RoZSBBQkkgYW5kIHNwZWNpZmZpYyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNlbGVjdGVkIHRocm91Z2ggdGhlCisiLW1hYmk9c3BlIG9yIC1tYWJpPWFsdGl2ZWMiIGFuZCB0aGUgIi1tc3BlIG9yIC1tYWx0aXZlYyIgcGFyYW1ldGVycy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kcnUtQ2V6YXIgU2FyZGFuIDxhbGV4YW5kcnUuc2FyZGFuQGZyZWVzY2FsZS5jb20+CistLS0KKyBnY2MvY29uZmlnLmdjYyB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggYjE1NTc0NC4uMDU0MWI4YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIzMzcsNyArMjMzNywxNCBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGdudS11c2VyLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCQk7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIHJzNjAwMC9saW51eGFsdGl2ZWMuaCByczYwMDAvbGludXhzcGUuaCByczYwMDAvZTUwMC5oIgorKwkJOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtZnBydWxlcyByczYwMDAvdC1wcGNjb21tIgorIAlleHRyYV9vYmpzPSIkZXh0cmFfb2JqcyByczYwMDAtbGludXgubyIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzEtRGlzYWJsZS10aGUtTVVMVElMSUJfT1NESVJOQU1FUy1hbmQtb3RoZXItbXVsdGlsaWItby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2Y2JhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBhODI0Y2QzZjQ1ODc1ZjZjMWM0N2NjZGJmMzM1MzQ5NDdiZDJiNTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTA6MjE6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMS8zNV0gRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIKKyBvcHRpb25zLgorCitIYXJkIGNvZGluZyB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyB3aXRoIC4uL2xpYjY0IGlzIGNhdXNpbmcgcHJvYmxlbXMgb24KK3N5c3RlbXMgd2hlcmUgdGhlIGxpYmRpciBpcyBOT1Qgc2V0IHRvIC9saWI2NC4gIFRoaXMgaXMgYWxsb3dlZCBieSB0aGUKK0FCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlCitub3JtYWwgbGliZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbT0UtU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4IGIvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eAoraW5kZXggYzI5NjM3Ni4uM2JiNTliZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKysrKyBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK0BAIC0yMSw4ICsyMSw4IEBACisgTElCMUFTTVNSQyAgID0gYWFyY2g2NC9saWIxZnVuY3MuYXNtCisgTElCMUFTTUZVTkNTID0gX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZQorIAorLUFBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG1hYmkubHA2ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCistTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI0FBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCisrI01VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNNVUxUSUFSQ0hfRElSTkFNRSA9ICQoY2FsbCBpZl9tdWx0aWFyY2gsYWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKyAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG1hYmkuaWxwMzI9Li4vbGliaWxwMzIKKysjTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gZTYwMDkwZjdjNTM3Yzg0ZmQxYjIyMzA3ZWRkOWYzODYyMjhjNzMzOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjI1OjExICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIEVuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArKworIGdjYy9jcHBkZWZhdWx0LmMgfCA0ICsrKysKKyBnY2MvZGVmYXVsdHMuaCAgIHwgOSArKysrKysrKysKKyBnY2MvZ2NjLmMgICAgICAgIHwgNyAtLS0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA5NDcwYTkyLi4xNDk3ZWRlIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01ODIsNiArNTgyLDcgQEAgbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorIAorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBsaWJyYXJpZXMgZXRjLgorIGxpYnN1YmRpciA9ICQobGliZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisrbGlic3ViZGlyX3RhcmdldCA9IGdjYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgZXhlY3V0YWJsZXMKKyBsaWJleGVjc3ViZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJChyZWFsX3RhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikkKGFjY2VsX2Rpcl9zdWZmaXgpCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggYWxsIHBsdWdpbiByZXNvdXJjZXMgYXJlIGluc3RhbGxlZAorQEAgLTI2MDMsNiArMjYwNCw3IEBAIENGTEFHUy1pbnRsLm8gKz0gLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIgorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCitpbmRleCA1ODBjMWJhLi4wM2EwMjg3IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYworKysrIGIvZ2NjL2NwcGRlZmF1bHQuYworQEAgLTU5LDYgKzU5LDEwIEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCAxZDU0Nzk4Li45ODNkNDVlIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM2MSw0ICsxMzYxLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IGU2ZWZhZTcuLjNjYTI3YjkgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEyNjMsMTMgKzEyNjMsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTllNDEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDk5N2Y5ZTkzOWY4NWY2NTFiMjJhNDgyNTFjZmIxNDQ0ODMxZDU0Y2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMToxNzoxOSArMDAwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2MgNC44KyB3b24ndCBidWlsZCB3aXRoIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCisKK3NpbmNlIHRoZSAqLlBwbyBmaWxlcyBkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAKKzIwMTIvMDkvMjIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmF0b21pYy9NYWtlZmlsZS5hbSB8IDMgKystCisgbGliYXRvbWljL01ha2VmaWxlLmluIHwgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbSBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQoraW5kZXggM2Q4YWI2Mi4uMjNkZmY3ZSAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmFtCitAQCAtMTAxLDcgKzEwMSw4IEBAIFBBVF9TCQk9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYJPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVAk9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorIAorLU1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUwkJPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMJCT0KKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworZGlmZiAtLWdpdCBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbiBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgoraW5kZXggOTI4ODY1Mi4uMzcyMDI1NiAxMDA2NDQKKy0tLSBhL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorKysrIGIvbGliYXRvbWljL01ha2VmaWxlLmluCitAQCAtMzMwLDcgKzMzMCw4IEBAIFBBVF9OID0gJCh3b3JkIDIsJChQQVRfU1BMSVQpKQorIFBBVF9TID0gJCh3b3JkIDMsJChQQVRfU1BMSVQpKQorIElGVU5DX0RFRiA9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUID0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCistTV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9GQUxTRUBNX0RFUFMgPQorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM0LURvbi10LXNlYXJjaC1ob3N0LWRpcmVjdG9yeS1kdXJpbmctcmVsaW5rLWlmLWluc3RfcHIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwN2NkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYzk0ZGEyNTdhMjE5ODczYjk0NmUwODMwNjE0MWFmNzc0OTY3OWY2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDMgTWFyIDIwMTUgMDg6MjE6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gRG9uJ3Qgc2VhcmNoIGhvc3QgZGlyZWN0b3J5IGR1cmluZyAicmVsaW5rIiBpZgorICRpbnN0X3ByZWZpeCBpcyBwcm92aWRlZAorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC1wYXRjaGVzLzIwMTEtMDEvbXNnMDAwMjYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbHRtYWluLnNoIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IDUyYmRiZGIuLjgyYmNlYzMgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTYwMDQsMTIgKzYwMDQsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmkKKyAJICAgIGVsc2UKKyAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKysJICAgICAgIyBEZWZhdWx0IGlmICRsaWJkaXIgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSBwcmVmaXg6CisgCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKy0JICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorKworIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCisgCQkgIFtcXC9dKikKKy0JCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgIGFkZF9kaXI9Ii1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisgCQkgICAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NWYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNS1Eb250LWxpbmstdGhlLXBsdWdpbnMtd2l0aC1saWJnb21wLWV4cGxpY2l0bHkucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbSAzYTA5NTQ1ZjNkMThjZTQ5MmVmNTU2MzkyMTVhMDcyMjgyZGUwM2QwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgOCBNYXIgMjAxNSAwMzo0MTozOSArMDAwMAorU3ViamVjdDogW1BBVENIIDM1LzM1XSBEb250IGxpbmsgdGhlIHBsdWdpbnMgd2l0aCBsaWJnb21wIGV4cGxpY2l0bHkKKworVGhleSBhcmUgZGxvcGVuZWQgYnkgbGliZ29tcCBhbnl3YXkuIFRoaXMgZml4ZXMKK3RoZSBsaWJ0b29sIHJlbGluayBpc3N1ZSB3aGljaCBjYXVzZXMgaXNzdWVzIGR1cmluZworY3Jvc3MgY29tcGlsYXRpb24KKworbGlidG9vbDogaW5zdGFsbDogL3Vzci9iaW4vaW5zdGFsbCAtYyAubGlicy9saWJnb21wLmxhaQorL2hvbWUvdWJ1bnR1L3dvcmsvYmxlZWRpbmcvYnVpbGQtcWVtdXg4Ni02NG1jL3RtcC93b3JrL2NvcmUyLTY0LXJkay1saW51eC9nY2MtcnVudGltZS81LjAtcjAvaW1hZ2UvdXNyL2xpYi8uLi9saWIvbGliZ29tcC5sYQorbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IGNhbm5vdCBpbnN0YWxsIGBsaWJnb21wLXBsdWdpbi1ob3N0X25vbnNobS5sYScKK3RvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gL3Vzci9saWIKK01ha2VmaWxlOjUxNzogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUycgZmFpbGVkCittYWtlWzJdOiAqKiogW2luc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFU10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliZ29tcC9NYWtlZmlsZS5pbiAgICAgICAgfCA3ICsrKy0tLS0KKyBsaWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbSB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnb21wL01ha2VmaWxlLmluIGIvbGliZ29tcC9NYWtlZmlsZS5pbgoraW5kZXggYjYxYjEwOC4uNzFiMjYyNyAxMDA2NDQKKy0tLSBhL2xpYmdvbXAvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmdvbXAvTWFrZWZpbGUuaW4KK0BAIC0xMjMsNyArMTIzLDcgQEAgYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSIgIiQoREVTVERJUikkKGluZm9kaXIpIiBcCisgCSIkKERFU1RESVIpJChmaW5jbHVkZWRpcikiICIkKERFU1RESVIpJChsaWJzdWJpbmNsdWRlZGlyKSIgXAorIAkiJChERVNURElSKSQodG9vbGV4ZWNsaWJkaXIpIgorIExUTElCUkFSSUVTID0gJCh0b29sZXhlY2xpYl9MVExJQlJBUklFUykKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9ERVBFTkRFTkNJRVMgPSBsaWJnb21wLmxhCisrbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0KKyBhbV9saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9PQkpFQ1RTID0gIFwKKyAJbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGEtcGx1Z2luLWhvc3QubG8KKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9PQkpFQ1RTID0gIFwKK0BAIC0xMzMsNyArMTMzLDcgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgXAorIAktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKKyBhbV9fREVQRU5ERU5DSUVTXzEgPQorLUBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9ERVBFTkRFTkNJRVMgPSBsaWJnb21wLmxhIFwKKytAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfREVQRU5ERU5DSUVTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorIEBQTFVHSU5fTlZQVFhfVFJVRUBhbV9saWJnb21wX3BsdWdpbl9udnB0eF9sYV9PQkpFQ1RTID0gIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACWxpYmdvbXBfcGx1Z2luX252cHR4X2xhLXBsdWdpbi1udnB0eC5sbworQEAgLTQwNyw3ICs0MDcsNyBAQCBsaWJnb21wX2xhX1NPVVJDRVMgPSBhbGxvYy5jIGJhcnJpZXIuYyBjcml0aWNhbC5jIGVudi5jIGVycm9yLmMgaXRlci5jIFwKKyBAUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGxpYmdvbXBfcGx1Z2luX252cHR4X3ZlcnNpb25faW5mbykgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChsdF9ob3N0X2ZsYWdzKSAkKFBMVUdJTl9OVlBUWF9MREZMQUdTKQorLUBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSBsaWJnb21wLmxhICQoUExVR0lOX05WUFRYX0xJQlMpCisrQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9ICQoUExVR0lOX05WUFRYX0xJQlMpCisgQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvID0gLXZlcnNpb24taW5mbyAkKGxpYnRvb2xfVkVSU0lPTikKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9TT1VSQ0VTID0gcGx1Z2luL3BsdWdpbi1ob3N0LmMKK0BAIC00MTUsNyArNDE1LDYgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtREhPU1RfTk9OU0hNX1BMVUdJTgorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MgPSBcCisgCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvKSAkKGx0X2hvc3RfZmxhZ3MpCisgCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0gbGliZ29tcC5sYQorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCisgbm9kaXN0X25vaW5zdF9IRUFERVJTID0gbGliZ29tcF9mLmgKKyBub2Rpc3RfbGlic3ViaW5jbHVkZV9IRUFERVJTID0gb21wLmggb3BlbmFjYy5oCitkaWZmIC0tZ2l0IGEvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0gYi9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQoraW5kZXggMTY3NDg1Zi4uZDJjNTQyOCAxMDA2NDQKKy0tLSBhL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtCisrKysgYi9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQorQEAgLTM1LDcgKzM1LDcgQEAgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAkKFBMVUdJTl9OVlBUWF9DUFBGTEFHUykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTID0gJChsaWJnb21wX3BsdWdpbl9udnB0eF92ZXJzaW9uX2luZm8pIFwKKyAJJChsdF9ob3N0X2ZsYWdzKQorIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgKz0gJChQTFVHSU5fTlZQVFhfTERGTEFHUykKKy1saWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSBsaWJnb21wLmxhICQoUExVR0lOX05WUFRYX0xJQlMpCisrbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gJChQTFVHSU5fTlZQVFhfTElCUykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIGVuZGlmCisgCitAQCAtNDUsNSArNDUsNCBAQCBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9TT1VSQ0VTID0gcGx1Z2luL3BsdWdpbi1ob3N0LmMKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9DUFBGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpIC1ESE9TVF9OT05TSE1fUExVR0lOCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTERGTEFHUyA9IFwKKyAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV92ZXJzaW9uX2luZm8pICQobHRfaG9zdF9mbGFncykKKy1saWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJBREQgPSBsaWJnb21wLmxhCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzYtVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5MTk0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSA4NjFiY2ZkNGFlODE0ZjM1MWUwYzY2OGVlMjZkMDFkMTMzMWUwNDIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMjM6MTU6MjcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAzNi8zN10gVXNlIFNZU1RFTUxJQlNfRElSIHJlcGxhY2VtZW50IGluc3RlYWQgb2YgaGFyZGNvZGluZworIGJhc2VfbGliZGlyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKK2luZGV4IDlhYmIyNTIuLjc5NTI1ZWUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpZm5kZWYgR0NDX0FBUkNINjRfTElOVVhfSAorICNkZWZpbmUgR0NDX0FBUkNINjRfTElOVVhfSAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXgtYWFyY2g2NCV7bWJpZy1lbmRpYW46X2JlfSV7bWFiaT1pbHAzMjpfaWxwMzJ9LnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorIAorICN1bmRlZiAgQVNBTl9DQzFfU1BFQworICNkZWZpbmUgQVNBTl9DQzFfU1BFQyAiJXslOnNhbml0aXplKGFkZHJlc3MpOi1mdW53aW5kLXRhYmxlc30iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM3LXByNjU3NzkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjQ2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoCkBAIC0wLDAgKzEsMTczIEBACitMaXN0LUlkOiA8Z2NjLXBhdGNoZXMuZ2NjLmdudS5vcmc+CitMaXN0LUFyY2hpdmU6IDxodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvPgorTGlzdC1Qb3N0OiA8bWFpbHRvOmdjYy1wYXRjaGVzIGF0IGdjYyBkb3QgZ251IGRvdCBvcmc+CitMaXN0LUhlbHA6IDxtYWlsdG86Z2NjLXBhdGNoZXMtaGVscCBhdCBnY2MgZG90IGdudSBkb3Qgb3JnPgorRGF0ZTogTW9uLCAyMCBBcHIgMjAxNSAxMjo0MDo0OSArMDkzMAorRnJvbTogQWxhbiBNb2RyYSA8YW1vZHJhIGF0IGdtYWlsIGRvdCBjb20+CitUbzogZ2NjLXBhdGNoZXMgYXQgZ2NjIGRvdCBnbnUgZG90IG9yZworU3ViamVjdDogW1BhdGNoXSBwcjY1Nzc5IC0gWzUvNiBSZWdyZXNzaW9uXSB1bmRlZmluZWQgbG9jYWwgc3ltYm9sIG9uIHBvd2VycGMKKworVGhpcyBwYXRjaCByZW1vdmVzIGJvZ3VzIGRlYnVnIGluZm8gbGVmdCBhcm91bmQgYnkgc2hyaW5rLXdyYXBwaW5nLAord2hpY2ggb24gc29tZSBwb3dlcnBjIHRhcmdldHMgd2l0aCBqdXN0IHRoZSByaWdodCByZWdpc3RlciBhbGxvY2F0aW9uCitsZWQgdG8gYXNzZW1ibHkgZXJyb3JzLgorCitCb290c3RyYXBwZWQgYW5kIHJlZ3Jlc3Npb24gdGVzdGVkIHBvd2VycGM2NC1saW51eCBhbmQgeDg2XzY0LWxpbnV4LgorCitodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02NTc3OQorCitnY2MvCisJUFIgZGVidWcvNjU3NzkKKwkqIHNocmluay13cmFwLmMgKGluc25fdXNlc19yZWcpOiBOZXcgZnVuY3Rpb24uCisJKG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXApOiBSZW1vdmUgZGVidWcgaW5zbnMgdXNpbmcgcmVncyBzZXQKKwlieSB0aGUgbW92ZWQgaW5zbi4KK2djYy90ZXN0c3VpdGUvCisJKiBnY2MuZGcvcHI2NTc3OS5jOiBOZXcuCisJCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKGZyb20gbWFpbGluZyBsaXN0LCBub3QgbWVyZ2VkIHlldCkKKworSW5kZXg6IGEvZ2NjL3Nocmluay13cmFwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2djYy9zaHJpbmstd3JhcC5jLm9yaWcKKysrKyBiL2djYy9zaHJpbmstd3JhcC5jCitAQCAtMTgyLDYgKzE4MiwyMSBAQCBsaXZlX2VkZ2VfZm9yX3JlZyAoYmFzaWNfYmxvY2sgYmIsIGludCByCisgICByZXR1cm4gbGl2ZV9lZGdlOworIH0KKyAKKytzdGF0aWMgYm9vbAorK2luc25fdXNlc19yZWcgKHJ0eF9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCBlbmRfcmVnbm8pCisreworKyAgZGZfcmVmIHVzZTsKKysKKysgIEZPUl9FQUNIX0lOU05fVVNFICh1c2UsIGluc24pCisrICAgIHsKKysgICAgICBydHggcmVnID0gREZfUkVGX1JFRyAodXNlKTsKKysKKysgICAgICBpZiAoUkVHX1AgKHJlZykgJiYgUkVHTk8gKHJlZykgPj0gcmVnbm8gJiYgUkVHTk8gKHJlZykgPCBlbmRfcmVnbm8pCisrCXJldHVybiB0cnVlOworKyAgICB9CisrICByZXR1cm4gZmFsc2U7CisrfQorKworIC8qIFRyeSB0byBtb3ZlIElOU04gZnJvbSBCQiB0byBhIHN1Y2Nlc3Nvci4gIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgVVNFUyBhbmQgREVGUyBhcmUgdGhlIHNldCBvZiByZWdpc3RlcnMgdGhhdCBhcmUgdXNlZCBhbmQgZGVmaW5lZAorICAgIGFmdGVyIElOU04gaW4gQkIuICBTUExJVF9QIGluZGljYXRlcyB3aGV0aGVyIGEgbGl2ZSBlZGdlIGZyb20gQkIKK0BAIC0zNDAsMTAgKzM1NSwxNSBAQCBtb3ZlX2luc25fZm9yX3Nocmlua193cmFwIChiYXNpY19ibG9jayBiCisgICAgICAgKnNwbGl0X3AgPSB0cnVlOworICAgICB9CisgCisrICB2ZWM8YmFzaWNfYmxvY2s+IGxpdmVfYmJzOworKyAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQorKyAgICBsaXZlX2Jicy5jcmVhdGUgKDUpOworICAgLyogQXQgdGhpcyBwb2ludCB3ZSBhcmUgY29tbWl0dGVkIHRvIG1vdmluZyBJTlNOLCBidXQgbGV0J3MgdHJ5IHRvCisgICAgICBtb3ZlIGl0IGFzIGZhciBhcyB3ZSBjYW4uICAqLworICAgZG8KKyAgICAgeworKyAgICAgIGlmIChNQVlfSEFWRV9ERUJVR19JTlNOUykKKysJbGl2ZV9iYnMuc2FmZV9wdXNoIChiYik7CisgICAgICAgbGl2ZV9vdXQgPSBkZl9nZXRfbGl2ZV9vdXQgKGJiKTsKKyAgICAgICBsaXZlX2luID0gZGZfZ2V0X2xpdmVfaW4gKG5leHRfYmxvY2spOworICAgICAgIGJiID0gbmV4dF9ibG9jazsKK0BAIC00MjYsNiArNDQ2LDM0IEBAIG1vdmVfaW5zbl9mb3Jfc2hyaW5rX3dyYXAgKGJhc2ljX2Jsb2NrIGIKKyAJU0VUX1JFR05PX1JFR19TRVQgKGJiX3VzZXMsIGkpOworICAgICB9CisgCisrICAvKiBSZW1vdmUgZGVidWcgaW5zbnMgdXNpbmcgcmVncyBzZXQgYnkgdGhlIGluc24gd2UgYXJlIG1vdmluZy4gICovCisrICBpZiAoTUFZX0hBVkVfREVCVUdfSU5TTlMpCisrICAgIHsKKysgICAgICB3aGlsZSAoIWxpdmVfYmJzLmlzX2VtcHR5ICgpKQorKwl7CisrCSAgcnR4X2luc24gKmRpbnNuOworKwkgIGJhc2ljX2Jsb2NrIHRtcF9iYiA9IGxpdmVfYmJzLnBvcCAoKTsKKysKKysJICBGT1JfQkJfSU5TTlNfUkVWRVJTRSAodG1wX2JiLCBkaW5zbikKKysJICAgIHsKKysJICAgICAgaWYgKGRpbnNuID09IGluc24pCisrCQlicmVhazsKKysJICAgICAgaWYgKERFQlVHX0lOU05fUCAoZGluc24pCisrCQkgICYmIGluc25fdXNlc19yZWcgKGRpbnNuLCBkcmVnbm8sIGVuZF9kcmVnbm8pKQorKwkJeworKwkJICBpZiAoKnNwbGl0X3ApCisrCQkgICAgLyogSWYgc3BsaXQsIHRoZW4gd2Ugd2lsbCBiZSBtb3ZpbmcgaW5zbiBpbnRvIGEKKysJCSAgICAgICBuZXdseSBjcmVhdGVkIGJsb2NrIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBlbnRyeQorKwkJICAgICAgIGJsb2NrLiAgTW92ZSB0aGUgZGVidWcgaW5mbyB0aGVyZSB0b28uICAqLworKwkJICAgIGVtaXRfZGVidWdfaW5zbl9hZnRlciAoUEFUVEVSTiAoZGluc24pLCBiYl9ub3RlIChiYikpOworKwkJICBkZWxldGVfaW5zbiAoZGluc24pOworKwkJICBicmVhazsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICAgIGxpdmVfYmJzLnJlbGVhc2UgKCk7CisrICAgIH0KKysKKyAgIGVtaXRfaW5zbl9hZnRlciAoUEFUVEVSTiAoaW5zbiksIGJiX25vdGUgKGJiKSk7CisgICBkZWxldGVfaW5zbiAoaW5zbik7CisgICByZXR1cm4gdHJ1ZTsKK0luZGV4OiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjU3NzkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvcHI2NTc3OS5jCitAQCAtMCwwICsxLDY0IEBACisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1nIiB9ICovCisrLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1tcmVsb2NhdGFibGUiIHsgdGFyZ2V0IHBvd2VycGMtKi1ydGVtcyogfSB9ICovCisrCisrdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorK2FkbGVyMzIgKHVuc2lnbmVkIGxvbmcgYWRsZXIsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKKyt7CisrICB1bnNpZ25lZCBsb25nIHMxID0gYWRsZXIgJiAweGZmZmY7CisrICB1bnNpZ25lZCBsb25nIHMyID0gKGFkbGVyID4+IDE2KSAmIDB4ZmZmZjsKKysgIGludCBrOworKworKyAgaWYgKGJ1ZiA9PSAwKQorKyAgICByZXR1cm4gMUw7CisrCisrICB3aGlsZSAobGVuID4gMCkKKysgICAgeworKyAgICAgIGsgPSBsZW4gPCA1NTUyID8gbGVuIDogNTU1MjsKKysgICAgICBsZW4gLT0gazsKKysgICAgICB3aGlsZSAoayA+PSAxNikKKysJeworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgayAtPSAxNjsKKysJfQorKyAgICAgIGlmIChrICE9IDApCisrCWRvCisrCSAgeworKwkgICAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICB9IHdoaWxlICgtLWspOworKyAgICAgIHMxICY9IDB4ZmZmZmZmZmZVTDsKKysgICAgICBzMiAmPSAweGZmZmZmZmZmVUw7CisrICAgICAgczEgJT0gNjU1MjFMOworKyAgICAgIHMyICU9IDY1NTIxTDsKKysgICAgfQorKyAgcmV0dXJuIChzMiA8PCAxNikgfCBzMTsKKyt9CisrCisrdW5zaWduZWQgY2hhciBidWZbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywKKysJCQk4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LAorKwkJCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCQkJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJCQkweDU1LCAweGFhIH07CisraW50CisrbWFpbiAoKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgeCA9IGFkbGVyMzIgKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisrICBpZiAoeCAhPSAweDY0MDQwOWVmVUwpCisrICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI0ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK1BvcnRpb25zIG9mCisKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9nY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZy9tc2cyNjAxMy5odG1sCisKK2FyZSBub3QgdXBzdHJlYW1lZCB5ZXQuIFNvIGxldHMga2VlcCBtaXNzaW5nIHBpZWNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dpdGhvdXQgdGhpcywgY29tcGlsaW5nIHNvbWV0aGluZyBzaW1wbGUgbGlrZSAjaW5jbHVkZSA8bGltaXRzPiBvbiB0YXJnZXQKK3dpdGggYysrIHRlc3QuY3BwIGZhaWxzIHVuYWJsZSB0byBmaW5kIHRoZSBoZWFkZXIuIHN0cmFjZSBzaG93cyBpdCBsb29raW5nIGluCit1c3IvaW5jbHVkZS94eHh4IHJhdGhlciB0aGFuIC91c3IvaW5jbHVkZS94eHh4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNTo1NTo0OS40ODgzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE2OjAyOjMxLjc3MjQwNjY3OSAtMDcwMAorQEAgLTE0OCw3ICsxNDgsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTU6NTU6NDkuNDcyMzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNjowMjozMS43ODA0MDY2ODAgLTA3MDAKK0BAIC0zMzI1LDcgKzMzMjUsOSBAQAorIGlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuCisgICBnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdD1gZXhwciAiJHtnY2NfZ3h4X2luY2x1ZGVfZGlyfSIgOiAiJHt3aXRoX3N5c3Jvb3R9IidcKC4qXCknYAorICAgaWYgdGVzdCAiJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iOyB0aGVuCistICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBpZiB0ZXN0IHgke3dpdGhfc3lzcm9vdH0gIT0geC87IHRoZW4KKysgICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgZmkKKyAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdD0xCisgICBmaQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMjVjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM5LWxpYmNjMS1maXgtbGliY2MxLXMtaW5zdGFsbC1wYXRoLWFuZC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIGFjZWEwZGY5OTk3YTQ3ZjhiODIyNGI2Y2ExNjE4YzhjOWRmYmU2ZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgNSBKdWwgMjAxNSAyMDoyNToxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBsaWJjYzE6IGZpeCBsaWJjYzEncyBpbnN0YWxsIHBhdGggYW5kIHJwYXRoCisKKyogSW5zdGFsbCBsaWJjYzEuc28gYW5kIGxpYmNjMXBsdWdpbi5zbyBpbnRvCisgICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbiksIGFzIHdoYXQgd2UKKyAgaGFkIGRvbmUgdG8gbHRvLXBsdWdpbi4KKyogRml4IGJhZCBSUEFUSCBpdXNzdWU6CisgIGdjYy01LjIuMDogcGFja2FnZSBnY2MtcGx1Z2lucyBjb250YWlucyBiYWQgUlBBVEggL3BhdGh0L3RvL3RtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9saWI2NC8uLi9saWI2NCBpbiBmaWxlCisgL3BhdGgvdG8vZ2NjLzUuMi4wLXIwL3BhY2thZ2VzLXNwbGl0L2djYy1wbHVnaW5zL3Vzci9saWI2NC9nY2MveDg2XzY0LXBva3ktbGludXgvNS4yLjAvcGx1Z2luL2xpYmNjMXBsdWdpbi5zby4wLjAuMAorIFtycGF0aHNdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJjYzEvTWFrZWZpbGUuYW0gIHwgICAgNCArKy0tCisgbGliY2MxL01ha2VmaWxlLmluICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmFtIGIvbGliY2MxL01ha2VmaWxlLmFtCitpbmRleCA3YTI3NGIzLi5kYjY5YmVhIDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmFtCisrKysgYi9saWJjYzEvTWFrZWZpbGUuYW0KK0BAIC0zNSw4ICszNSw4IEBAIGxpYmliZXJ0eSA9ICQoaWYgJCh3aWxkY2FyZCAkKGxpYmliZXJ0eV9ub2FzYW4pKSwkKFdjKSQobGliaWJlcnR5X25vYXNhbiksIFwKKyAJICAgICQoV2MpJChsaWJpYmVydHlfbm9ybWFsKSkpCisgbGliaWJlcnR5X2RlcCA9ICQocGF0c3Vic3QgJChXYyklLCUsJChsaWJpYmVydHkpKQorIAorLXBsdWdpbmRpciA9ICQobGliZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKS9wbHVnaW4KKy1jYzFsaWJkaXIgPSAkKGxpYmRpcikvJChsaWJzdWZmaXgpCisrY2MxbGliZGlyID0gJChsaWJleGVjZGlyKS9nY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKGdjY192ZXJzaW9uKQorK3BsdWdpbmRpciA9ICQoY2MxbGliZGlyKQorIAorIGlmIEVOQUJMRV9QTFVHSU4KKyBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKK2RpZmYgLS1naXQgYS9saWJjYzEvTWFrZWZpbGUuaW4gYi9saWJjYzEvTWFrZWZpbGUuaW4KK2luZGV4IDE5MTYxMzQuLmM4OTk1ZDIgMTAwNjQ0CistLS0gYS9saWJjYzEvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmNjMS9NYWtlZmlsZS5pbgorQEAgLTI2Miw4ICsyNjIsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIAorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyBARU5BQkxFX1BMVUdJTl9UUlVFQHBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmNjMXBsdWdpbi5sYQorIEBFTkFCTEVfUExVR0lOX1RSVUVAY2MxbGliX0xUTElCUkFSSUVTID0gbGliY2MxLmxhCisgQlVJTFRfU09VUkNFUyA9IGNvbXBpbGVyLW5hbWUuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODFhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MC1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxOTYgQEAKK0JlaW5nIGFibGUgdG8gYnVpbGQgYSBuYXRpdmVzZGsgZ2NjIGlzIHVzZWZ1bCwgcGFydGljdWxhcmx5IGluIGNhc2VzCit3aGVyZSB0aGUgaG9zdCBjb21waWxlciBtYXkgYmUgb2YgYW4gaW5jb21wYXRpYmxlIHZlcnNpb24gKG9yIGEgMzIKK2JpdCBjb21waWxlciBpcyBuZWVkZWQpLgorCitTYWRseSwgYnVpbGRpbmcgbmF0aXZlc2RrLWdjYyBpcyBub3Qgc3RyYWlnaHQgZm9yd2FyZC4gV2UgaW5zdGFsbAorbmF0aXZlc2RrLWdjYyBpbnRvIGEgcmVsb2NhdGFibGUgbG9jYXRpb24gYW5kIHRoaXMgbWVhbnMgdGhhdCBpdHMKK2xpYnJhcnkgbG9jYXRpb25zIGNhbiBjaGFuZ2UuICJOb3JtYWwiIHN5c3Jvb3Qgc3VwcG9ydCBkb2Vzbid0IGhlbHAKK2luIHRoaXMgY2FzZSBzaW5jZSB0aGUgdmFsdWVzIG9mIHBhdGhzIGxpa2UgImxpYmRpciIgY2hhbmdlLCBub3QganVzdAorYmFzZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc3lzdGVtLgorCitJbiBvcmRlciB0byBoYW5kbGUgdGhpcyB3ZSBkbyB0d28gdGhpbmdzOgorCithKSBBZGQgJXIgaW50byBzcGVjIGZpbGUgbWFya3VwIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBpbmplY3RlZCBwYXRocworICAgc3VjaCBhcyBTWVNURU1MSUJTX0RJUiAoc2VlIGdjY19tdWx0aWxpYl9zZXR1cCgpKS4KK2IpIEFkZCBvdGhlciBwYXRocyB3aGljaCBuZWVkIHJlbG9jYXRpb24gaW50byBhIC5nY2NyZWxvY3ByZWZpeCBzZWN0aW9uCisgICB3aGljaCB0aGUgcmVsb2NhdGlvbiBjb2RlIHdpbGwgbm90aWNlIGFuZCBhZGp1c3QgYXV0b21hdGljYWxseS4KKworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwcGRlZmF1bHQuYyBiL2djYy9jcHBkZWZhdWx0LmMKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC0zNSw2ICszNSwzMCBAQAorICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAjZW5kaWYKKyAKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7CisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7CisrI2VuZGlmCisrCisgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKKyA9IElOQ0xVREVfREVGQVVMVFM7CitAQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorID0geworICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKy0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCistICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KKy0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCisrICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAorICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQorIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLworICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKK0BAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNlbmRpZgorICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisgICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLworLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CisgICB9OworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCistLS0gYS9nY2MvY3BwZGVmYXVsdC5oCisrKysgYi9nY2MvY3BwZGVmYXVsdC5oCitAQCAtMzMsNyArMzMsOCBAQAorIAorIHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUKKyB7CistICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisrICBjb25zdCBjaGFyICpmbmFtZTsgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKworICAgY29uc3QgY2hhciAqY29uc3QgY29tcG9uZW50OwkvKiBUaGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIAkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICAgY29uc3QgY2hhciBjcGx1c3BsdXM7CQkvKiBPbmx5IGxvb2sgaGVyZSBpZiB3ZSdyZSBjb21waWxpbmcgQysrLiAgKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTIwLDYgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBUQVJHRVRfU1lTVEVNX1JPT1Q7CisgI2Vsc2UKKyBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gMDsKKyAjZW5kaWYKKysgCisrc3RhdGljIGNoYXIgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTWVNURU1MSUJTX0RJUjsKKyAKKyAvKiBOb256ZXJvIG1lYW5zIHBhc3MgdGhlIHVwZGF0ZWQgdGFyZ2V0X3N5c3RlbV9yb290IHRvIHRoZSBjb21waWxlci4gICovCisgCitAQCAtMzkwLDYgKzM5Miw3IEBAIG9yIHdpdGggY29uc3RhbnQgdGV4dCBpbiBhIHNpbmdsZSBhcmd1bWVudC4KKyAgJUcgICAgIHByb2Nlc3MgTElCR0NDX1NQRUMgYXMgYSBzcGVjLgorICAlUiAgICAgT3V0cHV0IHRoZSBjb25jYXRlbmF0aW9uIG9mIHRhcmdldF9zeXN0ZW1fcm9vdCBhbmQKKyAgICAgICAgIHRhcmdldF9zeXNyb290X3N1ZmZpeC4KKysgJXIgICAgIE91dHB1dCB0aGUgYmFzZSBwYXRoIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgKKyAgJVMgICAgIHByb2Nlc3MgU1RBUlRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIFMgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlRSAgICAgcHJvY2VzcyBFTkRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIEUgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlQyAgICAgcHJvY2VzcyBDUFBfU1BFQyBhcyBhIHNwZWMuCitAQCAtMTI4NiwxMCArMTI4OSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworICAgIGdjY19leGVjX3ByZWZpeCBpcyBzZXQgYmVjYXVzZSwgaW4gdGhhdCBjYXNlLCB3ZSBrbm93IHdoZXJlIHRoZQorICAgIGNvbXBpbGVyIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHVzZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0CisgICAgbG9jYXRpb24gaW5zdGVhZC4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2V4ZWNfcHJlZml4ID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4ID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2JpbmRpcl9wcmVmaXggPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9leGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9saWJleGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9iaW5kaXJfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cisrc3RhdGljIGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIAorIC8qIEZvciBuYXRpdmUgY29tcGlsZXJzLCB0aGVzZSBhcmUgd2VsbC1rbm93biBwYXRocyBjb250YWluaW5nCisgICAgY29tcG9uZW50cyB0aGF0IG1heSBiZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtLiAgRm9yIGNyb3NzCitAQCAtMTI5Nyw5ICsxMzAwLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9leGVjX3ByZWZpeCA9IE1EX0VYRUNfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4ID0gTURfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeF8xID0gTURfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzFbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzI7CisgCisgLyogQSByZWxhdGl2ZSBwYXRoIHRvIGJlIHVzZWQgaW4gZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdG9vbHMKK0BAIC01NTUwLDYgKzU1NTMsMTEgQEAgZG9fc3BlY18xIChjb25zdCBjaGFyICpzcGVjLCBpbnQgaW5zd2l0Y2gsIGNvbnN0IGNoYXIgKnNvZnRfbWF0Y2hlZF9wYXJ0KQorIAkgICAgICB9CisgCSAgICBicmVhazsKKyAKKysgICAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrLCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4LAorKwkJICAgICAgc3RybGVuICh0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4KSk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisgCSAgY2FzZSAnUyc6CisgCSAgICB2YWx1ZSA9IGRvX3NwZWNfMSAoc3RhcnRmaWxlX3NwZWMsIDAsIE5VTEwpOworIAkgICAgaWYgKHZhbHVlICE9IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1Njk4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQxLWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitTZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZSAKK2NvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKK3RoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeSAKK2NvLWV4aXN0IG9uIHRhcmdldC4KKworV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrIAorZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4gbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4IAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIgaXM6CisKKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKword2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcword2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCisKK1RoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAorYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgorCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQIDIwMTUvNy8zMQorCitJbmRleDogZ2NjLTUuMi4wL2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjIuMC5vcmlnL2djYy9nY2MuYworKysrIGdjYy01LjIuMC9nY2MvZ2NjLmMKK0BAIC0yMzA1LDcgKzIzMDUsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAgICAgICBpZiAocGF0aCA9PSBOVUxMKQorIAl7CisgCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7CistCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisrCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisgCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7CisgCX0KKyAKK0BAIC0yMzE3LDYgKzIzMTcsMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KKyAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQorIAkgICAgeworKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKKysJICAgICAgICB7CisrCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOworKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOworKworKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOworKwkJICAgIH0KKysJICAgICAgICAgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOworKwkJICAgIH0KKysKKysJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLworKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQorKwkgICAgICAgICAgICB7CisrCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKysJICAgICAgICAgICAgICAgIGlmIChyZXQpCisrCQkgICAgICAgICAgYnJlYWs7CisrCSAgICAgICAgICAgIH0KKysJICAgICAgICB9CisrCisgCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisgCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKyAJICAgICAgaWYgKHJldCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2MwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTAwIEBACitTVU1NQVJZID0gIkdOVSBjYyBhbmQgZ2NjIEMgY29tcGlsZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2djYy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEwiCisKK05BVElWRURFUFMgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworQlBOID0gImdjYyIKKworZGVmIGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ0FSTVBLR1NGWF9FQUJJJywgVHJ1ZSkgPT0gImhmIiBhbmQgZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKSA9PSAiYXJtIjoKKyAgICAgICAgcmV0dXJuICItLXdpdGgtZmxvYXQ9aGFyZCIKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisgICAgICAgIHJldHVybiAiLS13aXRoLWZsb2F0PXNvZnQiCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdwcGMtZWZkJyBdOgorICAgICAgICByZXR1cm4gIi0tZW5hYmxlLWU1MDBfZG91YmxlIgorICAgIHJldHVybiAiIgorCitnZXRfZ2NjX2Zsb2F0X3NldHRpbmdbdmFyZGVwdmFsdWVdID0gIiR7QGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCl9IgorCitkZWYgZ2V0X2djY19taXBzX3BsdF9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ21pcHMnLCAnbWlwc2VsJyBdIGFuZCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ21wbHQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJldHVybiAiLS13aXRoLW1pcHMtcGx0IgorICAgIHJldHVybiAiIgorCitkZWYgZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAncG93ZXJwYycsICdwb3dlcnBjNjQnIF0gYW5kIGQuZ2V0VmFyKCdUQ0xJQkMnLCBUcnVlKSBpbiBbICd1Y2xpYmMnLCAnZ2xpYmMnIF06CisgICAgICAgIHJldHVybiAiLS13aXRoLWxvbmctZG91YmxlLTEyOCIKKyAgICByZXR1cm4gIiIKKworZGVmIGdldF9nY2NfbXVsdGlhcmNoX3NldHRpbmcoYmIsIGQpOgorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIG11bHRpYXJjaF9vcHRpb25zID0geworICAgICAgICAiaTU4NiI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJpNjg2IjogICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICAgICAgInBvd2VycGMiOiAiLS1lbmFibGUtdGFyZ2V0cz1wb3dlcnBjNjQiLAorICAgICAgICAibWlwcyI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJzcGFyYyI6ICAgIi0tZW5hYmxlLXRhcmdldHM9YWxsIiwKKyAgICB9CisKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgaWYgdGFyZ2V0X2FyY2ggaW4gbXVsdGlhcmNoX29wdGlvbnMgOgorICAgICAgICAgICAgcmV0dXJuIG11bHRpYXJjaF9vcHRpb25zW3RhcmdldF9hcmNoXQorICAgIHJldHVybiAiIgorCisjIHRoaXMgaXMgdXNlZCBieSB0aGUgbXVsdGlsaWIgc2V0dXAgb2YgZ2NjCitkZWYgZ2V0X3R1bmVfcGFyYW1ldGVycyh0dW5lLCBkKToKKyAgICBhdmFpbHR1bmVzID0gZC5nZXRWYXIoJ0FWQUlMVFVORVMnLCBUcnVlKQorICAgIGlmIHR1bmUgbm90IGluIGF2YWlsdHVuZXMuc3BsaXQoKToKKyAgICAgICAgYmIuZXJyb3IoJ1RoZSB0dW5lOiAlcyBpcyBub3Qgb25lIG9mIHRoZSBhdmFpbGFibGUgdHVuZXM6ICVzJywgdHVuZSBvciBOb25lLCBhdmFpbHR1bmVzKQorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgb3ZlcnJpZGUgPSAnOnR1bmUtJyArIHR1bmUKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIHJldGRpY3QgPSB7fQorICAgIHJldGRpY3RbJ3R1bmUnXSA9IHR1bmUKKyAgICByZXRkaWN0WydjY2FyZ3MnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfQ0NBUkdTJywgVHJ1ZSkKKyAgICByZXRkaWN0WydmZWF0dXJlcyddID0gbG9jYWxkYXRhLmdldFZhcignVFVORV9GRUFUVVJFUycsIFRydWUpCisgICAgIyBCQVNFTElCIGlzIHVzZWQgYnkgdGhlIG11bHRpbGliIGNvZGUgdG8gY2hhbmdlIGxpYnJhcnkgcGF0aHMKKyAgICByZXRkaWN0WydiYXNlbGliJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdCQVNFX0xJQicsIFRydWUpIG9yIGxvY2FsZGF0YS5nZXRWYXIoJ0JBU0VMSUInLCBUcnVlKQorICAgIHJldGRpY3RbJ2FyY2gnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfQVJDSCcsIFRydWUpCisgICAgcmV0ZGljdFsnYWJpZXh0ZW5zaW9uJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdBQklFWFRFTlNJT04nLCBUcnVlKQorICAgIHJldGRpY3RbJ3RhcmdldF9mcHUnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKQorICAgIHJldGRpY3RbJ3BrZ2FyY2gnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpCisgICAgcmV0ZGljdFsncGFja2FnZV9leHRyYV9hcmNocyddID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9FWFRSQV9BUkNIUycsIFRydWUpCisgICAgcmV0dXJuIHJldGRpY3QKKworZ2V0X3R1bmVfcGFyYW1ldGVyc1t2YXJkZXBzZXhjbHVkZV0gPSAiQVZBSUxUVU5FUyBUVU5FX0NDQVJHUyBPVkVSUklERVMgVFVORV9GRUFUVVJFUyBCQVNFX0xJQiBCQVNFTElCIFRVTkVfQVJDSCBBQklFWFRFTlNJT04gVEFSR0VUX0ZQVSBUVU5FX1BLR0FSQ0ggUEFDS0FHRV9FWFRSQV9BUkNIUyIKKworREVCSUFOTkFNRV8ke01MUFJFRklYfWxpYmdjYyA9ICJsaWJnY2MxIgorCitNSVJST1JTID0rICJcCiske0dOVV9NSVJST1J9L2djYyAgICBmdHA6Ly9nY2MuZ251Lm9yZy9wdWIvZ2NjL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlmdHA6Ly9nZC50dXdpZW4uYWMuYXQvZ251L2djYy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJaHR0cDovL21pcnJvcnMucmNuLm5ldC9wdWIvc291cmNld2FyZS9nY2MvcmVsZWFzZXMvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjICAgaHR0cDovL2djYy5nZXQtc29mdHdhcmUuY29tL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYwlodHRwOi8vZ2NjLmdldC1zb2Z0d2FyZS5jb20vcmVsZWFzZXMvIFxuIFwKKyIKKyMKKyMgU2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMKKyMKK2djY2xpYmRpciA9ICIke2xpYmRpcn0vZ2NjIgorQklOViA9ICIke1BWfSIKKyNTID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9IgorUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKwordGFyZ2V0X2luY2x1ZGVkaXIgPz0gIiR7aW5jbHVkZWRpcn0iCit0YXJnZXRfbGliZGlyID89ICIke2xpYmRpcn0iCit0YXJnZXRfYmFzZV9saWJkaXIgPz0gIiR7YmFzZV9saWJkaXJ9IgordGFyZ2V0X3ByZWZpeCA/PSAiJHtwcmVmaXh9IgorCisjIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgZm9yIHRoZSBzaGFyZWQgd29yayBkaXJlY3RvcnksIHRoZSBkb19wYXRjaCBzaWduYXR1cmVzIG1hdGNoCisjIFRoZSByZWFsIFdPUktESVIgbG9jYXRpb24gaXNuJ3QgYSBkZXBlbmRlbmN5IGZvciB0aGUgc2hhcmVkIHdvcmtkaXIuCitzcmNfcGF0Y2hlc1t2YXJkZXBzZXhjbHVkZV0gPSAiV09SS0RJUiIKK3Nob3VsZF9hcHBseVt2YXJkZXBzZXhjbHVkZV0gKz0gIlBOIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb25maWd1cmUtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRiZTczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxMjggQEAKK3JlcXVpcmUgZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKK3JlcXVpcmUgZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCisjCisjIEJ1aWxkIHRoZSBsaXN0IG9mIGxhbmFndWFnZXMgdG8gYnVpbGQuCisjCisjIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB2ZXJzaW9uIHNwZWNpZmljIC5pbmMgZmlsZS4KKworIyBKYXZhIChnY2ogZG9lc24ndCB3b3JrIG9uIGFsbCBhcmNoaXRlY3R1cmVzKQorSkFWQSA/PSAiLGphdmEiCitKQVZBX2FybSA/PSAiIgorSkFWQV9hcm1lYiA/PSAiIgorSkFWQV9taXBzZWwgPz0gIiIKK0pBVkFfc2gzID89ICIiCisjIGdjYyAzLnggZXhwZWN0cyAnZjc3JywgNC4wIGV4cGVjdHMgJ2Y5NScsIDQuMSBhbmQgNC4yIGV4cGVjdCAnZm9ydHJhbicKK0ZPUlRSQU4gPz0gIixmNzciCitMQU5HVUFHRVMgPz0gImMsYysrJHtGT1JUUkFOfSR7SkFWQX0iCisjIGRpc2FibGUgLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIGZvciBwb3dlcnBjIFNQRQorIyBhdCAtT3MgbGliZ2NjLnNvLjEgY3JlYXRlcyByZWZlcmVuY2VzIGludG8KKyMgaGlkZGVuIHN5bWJvbHMgaW4gbGliZ2NjLmEgd2hpY2ggbGlua2VyIGNvbXBsYWlucworIyB3aGVuIGxpbmtpbmcgc2hhcmVkIGxpYnJhcmllcyBmdXJ0aGVyIGluIHRoZSBidWlsZCBsaWtlIChnbnV0bHMpCisKK1NQRUNJQUxfQVJDSF9MSVNUID0gInBvd2VycGMiCitPUFRTUEFDRSA9ICcke0BiYi51dGlscy5jb250YWlucygiU1BFQ0lBTF9BUkNIX0xJU1QiLCAiJHtUQVJHRVRfQVJDSH0iLCAiIiwgIi0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSIsZCl9JworCitFWFRSQV9PRUNPTkZfQkFTRSA/PSAiIgorRVhUUkFfT0VDT05GX1BBVEhTID89ICIiCitFWFRSQV9PRUNPTkZfSU5JVElBTCA/PSAiIgorCitHQ0NNVUxUSUxJQiA/PSAiLS1kaXNhYmxlLW11bHRpbGliIgorR0NDVEhSRUFEUyA/PSAicG9zaXgiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgJHtAWyctLWVuYWJsZS1jbG9jYWxlPWdlbmVyaWMnLCAnJ11bZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSAhPSAnbm8nXX0gXAorICAgIC0td2l0aC1nbnUtbGQgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPSR7TEFOR1VBR0VTfSBcCisgICAgLS1lbmFibGUtdGhyZWFkcz0ke0dDQ1RIUkVBRFN9IFwKKyAgICAke0dDQ01VTFRJTElCfSBcCisgICAgLS1lbmFibGUtYzk5IFwKKyAgICAtLWVuYWJsZS1sb25nLWxvbmcgXAorICAgIC0tZW5hYmxlLXN5bXZlcnM9Z251IFwKKyAgICAtLWVuYWJsZS1saWJzdGRjeHgtcGNoIFwKKyAgICAtLXByb2dyYW0tcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0td2l0aG91dC1sb2NhbC1wcmVmaXggXAorICAgICR7T1BUU1BBQ0V9IFwKKyAgICAke0VYVFJBX09FQ09ORl9CQVNFfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfUEFUSFN9IFwKKyAgICAke0BnZXRfZ2NjX21pcHNfcGx0X3NldHRpbmcoYmIsIGQpfSBcCisgICAgJHtAZ2V0X2xvbmdfZG91YmxlX3NldHRpbmcoYmIsIGQpfSBcCisgICAgJHtAZ2V0X2djY19tdWx0aWFyY2hfc2V0dGluZyhiYiwgZCl9IFwKKyIKKworZXhwb3J0IGdjY19jdl9jb2xsZWN0Ml9saWJzID0gJ25vbmUgcmVxdWlyZWQnCisjIFdlIG5lZWQgdG8gc2V0IGdjY19jdl9jb2xsZWN0Ml9saWJzIGVsc2UgdGhlcmUgaXMgY3Jvc3MtY29tcGlsYXRpb24gYmFkbmVzcworIyBpbiB0aGUgY29uZmlnLmxvZyBmaWxlcyAod2hpY2ggbWlnaHQgbm90IGdldCBnZW5lcmF0ZWQgdW50aWwgZG9fY29tcGlsZQorIyBoZW5jZSBiZWluZyBtaXNzZWQgYnkgdGhlIGluc2FuZSBkb19jb25maWd1cmUgY2hlY2spLgorCisjIEJ1aWxkIHVjbGliYyBjb21waWxlcnMgd2l0aG91dCBjeGFfYXRleGl0IHN1cHBvcnQKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXggPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLV9fY3hhX2F0ZXhpdCIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjQgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ZWwgPSAiIC0td2l0aC1hYmk9NjQgLS13aXRoLWFyY2gtNjQ9bWlwczY0IC0td2l0aC10dW5lLTY0PW1pcHM2NCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0bjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NGVsbjMyID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCisKKyMgQVJNdjYrIGFkZHMgYXRvbWljIGluc3RydWN0aW9ucyB0aGF0IGFmZmVjdCB0aGUgQUJJIGluIGxpYnJhcmllcyBidWlsdAorIyB3aXRoIFRVTkVfQ0NBUkdTIGluIGdjYy1ydW50aW1lLiAgTWFrZSB0aGUgY29tcGlsZXIgZGVmYXVsdCB0byBhCisjIGNvbXBhdGlibGUgYXJjaGl0ZWN0dXJlLiAgYXJtdjYgYW5kIGFybXY3YSBjb3ZlciB0aGUgbWluaW11bSB0dW5lCisjIGZlYXR1cmVzIHVzZWQgaW4gT0UuCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY2ID0gIiAtLXdpdGgtYXJjaD1hcm12NiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtdjdhID0gIiAtLXdpdGgtYXJjaD1hcm12Ny1hIgorCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID8/PSAiIgorQ1BQRkxBR1MgPSAiIgorCitTWVNURU1IRUFERVJTID0gIiR7dGFyZ2V0X2luY2x1ZGVkaXJ9IgorU1lTVEVNTElCUyA9ICIke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorU1lTVEVNTElCUzEgPSAiJHt0YXJnZXRfbGliZGlyfS8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIHRlYWNoIGdjYyB0byBmaW5kIGNvcnJlY3QgdGFyZ2V0IGluY2x1ZGVkaXIgd2hlbiBjaGVja2luZyBsaWJjIHNzcCBzdXBwb3J0CisJbWtkaXIgLXAgJHtCfS9nY2MKKwllY2hvICJOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIgPSAke1NZU1RFTUhFQURFUlN9IiA+ICR7Qn0vZ2NjL3Qtb2UKKwljYXQgJHtTfS9nY2MvZGVmYXVsdHMuaCB8IGdyZXAgLXYgIlwjZW5kaWYuKkdDQ19ERUZBVUxUU19IIiA+ICR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3CisJY2F0ID4+JHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcgPDxfRU9GCisjZGVmaW5lIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiAiJHtTWVNURU1IRUFERVJTfSIKKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIke1NZU1RFTUxJQlN9IgorI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIiR7U1lTVEVNTElCUzF9IgorI2RlZmluZSBTWVNURU1MSUJTX0RJUiAiJHtTWVNURU1MSUJTfSIKKyNlbmRpZiAvKiAhIEdDQ19ERUZBVUxUU19IICovCitfRU9GCisJbXYgJHtCfS9nY2MvZGVmYXVsdHMuaC5uZXcgJHtCfS9nY2MvZGVmYXVsdHMuaAorfQorCitkb19jb25maWd1cmUgKCkgeworCSMgU2V0dXAgdGhlc2UgdmFycyBmb3IgY3Jvc3MgYnVpbGRpbmcgb25seQorCSMgLi4uIGJlY2F1c2UgZm9vX0ZPUl9UQVJHRVQgYXBwYXJlbnRseSBnZXRzIG1pc2ludGVycHJldGVkIGluc2lkZSB0aGUKKwkjIGdjYyBidWlsZCBzdHVmZiB3aGVuIHRoZSBidWlsZCBpcyBwcm9kdWNpbmcgYSBjcm9zcyBjb21waWxlciAtIGkuZS4KKwkjIHdoZW4gdGhlICdjdXJyZW50JyB0YXJnZXQgaXMgdGhlICdob3N0JyBzeXN0ZW0sIGFuZCB0aGUgaG9zdCBpcyBub3QKKwkjIHRoZSB0YXJnZXQgKGJlY2F1c2UgdGhlIGJ1aWxkIGlzIGFjdHVhbGx5IG1ha2luZyBhIGNyb3NzIGNvbXBpbGVyISkKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtDQ30iCisJCWV4cG9ydCBHQ0NfRk9SX1RBUkdFVD0iJHtDQ30iCisJCWV4cG9ydCBDWFhfRk9SX1RBUkdFVD0iJHtDWFh9IgorCQlleHBvcnQgQVNfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1hcyIKKwkJZXhwb3J0IExEX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9bGQiCisJCWV4cG9ydCBOTV9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfW5tIgorCQlleHBvcnQgQVJfRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1hciIKKwkJZXhwb3J0IEdGT1JUUkFOX0ZPUl9UQVJHRVQ9Imdmb3J0cmFuIgorCQlleHBvcnQgUkFOTElCX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9cmFubGliIgorCWZpCisJZXhwb3J0IENDX0ZPUl9CVUlMRD0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IENYWF9GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9MREZMQUdTfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCisKKwlvZV9ydW5jb25mCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGU0ODgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMTc3IEBACitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK1NVTU1BUlkgPSAiR05VIGNjIGFuZCBnY2MgQyBjb21waWxlcnMgKGNyb3NzLWNhbmFkaWFuIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgorUE4gPSAiZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtIT1NUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke0hPU1RfUFJFRklYfWxpYmMtZm9yLWdjYyBuYXRpdmVzZGstZ2V0dGV4dCIKKworR0NDTVVMVElMSUIgPSAiLS1lbmFibGUtbXVsdGlsaWIiCisKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0vbm90L2V4aXN0JHt0YXJnZXRfaW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgIC0td2l0aC1idWlsZC10aW1lLXRvb2xzPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtUQVJHRVRfU1lTfS9iaW4gXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisjIFdlIGhhdmUgdG8gcG9pbnQgZ2NjIGF0IGEgc3lzcm9vdCBidXQgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIGlmIHRoaXMgY2hhbmdlcworIyBlLmcuIHdlIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBtYWNoaW5lcyB3aXRoIGRpZmZlcmVudCB0dW5lcy4KK0VYVFJBX09FQ09ORl9QQVRIU1t2YXJkZXBzZXhjbHVkZV0gPSAiVFVORV9QS0dBUkNIIgorVEFSR0VUX0FSQ0hbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfQVJDSCIKK2dldF9nY2NfZmxvYXRfc2V0dGluZ1t2YXJkZXB2YWx1ZV0gPSAiIgorCisjCisjIGdjYy1jcm9zcyBsb29rcyBhbmQgZmluZHMgdGhlc2UgaW4gJHtleGVjX3ByZWZpeH0gYnV0IHdlJ3JlIG5vdCBzbyBsdWNreQorIyBmb3IgdGhlIHNkay4gSGFyZGNvZGluZyB0aGUgcGF0aHMgZW5zdXJlcyB0aGUgYnVpbGQgZG9lc24ndCBnbyBjYW5hZGlhbiBvciB3b3JzZS4KKyMKK2V4cG9ydCBBUl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hciIKK2V4cG9ydCBBU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1hcyIKK2V4cG9ydCBETExUT09MX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWRsbHRvb2wiCitleHBvcnQgQ0NfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9Z2NjIgorZXhwb3J0IENYWF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nKysiCitleHBvcnQgR0NDX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKK2V4cG9ydCBMRF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1sZCIKK2V4cG9ydCBMSVBPX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWxpcG8iCitleHBvcnQgTk1fRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bm0iCitleHBvcnQgT0JKRFVNUF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wIgorZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1yYW5saWIiCitleHBvcnQgU1RSSVBfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9c3RyaXAiCitleHBvcnQgV0lORFJFU19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH13aW5kcmVzIgorCisjCisjIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBhbmQgbWFrZSBzdXJlIHRoZSBjb21waWxlciBjYW4gZmluZCBzdGFnaW5nCisjCitleHBvcnQgQVJDSF9GTEFHU19GT1JfVEFSR0VUID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IENDX0ZPUl9CVUlMRD0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IENYWF9GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9CVUlMRD0iJHtCVUlMRF9MREZMQUdTfSIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbGwtaG9zdCBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworfQorCisjIEhhdmluZyBhbnl0aGluZyBhdXRvIGRlcGVuZGluZyBvbiBnY2MtY3Jvc3Mtc2RrIGlzIGEgcmVhbGx5IGJhZCBpZGVhLi4uCitFWENMVURFX0ZST01fU0hMSUJTID0gIjEiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MiCisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke2V4ZWNfcHJlZml4fS9iaW4vKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyogXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKi5vIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYiogXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9pbmNsdWRlLyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ3R5cGUuKiBcCisgICAgJHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLyogXAorICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2xpYi8qIFwKKyAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS91c3IvaW5jbHVkZS8qIFwKKyIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJkZXYtc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vLmRlYnVnIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICJcCisgICAgJHtpbmZvZGlyfSBcCisgICAgJHttYW5kaXJ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvUkVBRE1FIFwKKyIKKworRVhFRVhUID0gIiIKKworIyBDb21wdXRlIGhvdyB0byBnZXQgZnJvbSBsaWJleGVjZGlyIHRvIGJpbmRpciBpbiBweXRob24gKGVhc2llciB0aGFuIHNoZWxsKQorQklOUkVMUEFUSCA9ICIke0Bvcy5wYXRoLnJlbHBhdGgoZC5leHBhbmQoIiR7YmluZGlyfSIpLCBkLmV4cGFuZCgiJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9IikpfSIKKworZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwkjIENsZWFudXAgc29tZSBvZiB0aGUgJHtsaWJkaXJ9eyxleGVjfS9nY2Mgc3R1ZmYgLi4uCisJcm0gLXIgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtciAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisKKwkjIFdlIGNhcmUgYWJvdXQgZysrIG5vdCBjKysKKwlybSAtZiAke0R9JHtiaW5kaXJ9LypjKysKKworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZ2NjLTx2ZXJzaW9uPiBjb3BpZXMKKwlybSAtZiAke0R9JHtiaW5kaXJ9LypnY2MtPy4/KgorCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlybSAtZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vbGliL2xpYmliZXJ0eS5hCisJIyBOb3Qgc3VyZSB3aGVyZSB0aGUgc3RyYW5nZSBwYXRocyBjb21lIGZyb20KKwlybSAtZiAke0R9JHtsaWJkaXJ9Ly4uL2xpYi9saWJpYmVydHkuYQorCXJtIC1mICR7RH0ke2xpYmRpcn0vbGliaWJlcnR5LmEKKworCSMgQ2xlYW51cCBlbXB0eSBkaXJlY3RvcmllcyB3aGljaCBhcmUgbm90IHNoaXBwZWQKKwkjIHdlIHVzZSBybWRpciBpbnN0ZWFkIG9mICdybSAtZicgdG8gZW5zdXJlIHRoZSBub24gZW1wdHkgZGlyZWN0b3JpZXMgYXJlIG5vdCBkZWxldGVkCisJIyAke0R9JHtsaWJkaXJ9Ly4uL2xpYiBvbmx5IHNlZW1zIHRvIGFwcGVhciB3aXRoIFNES01BQ0hJTkU9aTY4NgorCWxvY2FsIGVtcHR5X2RpcnM9IiR7RH0ke2xpYmRpcn0vLi4vbGliICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9IgorCWZvciBpIGluICRlbXB0eV9kaXJzOyBkbworCQlbIC1kICRpIF0gJiYgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJGkKKwlkb25lCisKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCXN1ZmZpeD0ke0VYRUVYVH0KKwlmb3IgdCBpbiBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCQlpZiBbICIkdCIgPSAiZzc3IiAtbyAiJHQiID0gImdmb3J0cmFuIiBdICYmIFsgISAtZSAke0R9JHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH0kdCRzdWZmaXggXTsgdGhlbgorCQkJY29udGludWUKKwkJZmkKKworCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQkc3VmZml4ICRkZXN0JHQkc3VmZml4CisJZG9uZQorCXQ9cmVhbC1sZAorCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH1sZCRzdWZmaXggJGRlc3QkdCRzdWZmaXgKKworCSMgbGlicXVhZG1hdGggaGVhZGVycyBuZWVkIHRvICBiZSBhdmFpbGFibGUgaW4gdGhlIGdjYyBsaWJleGVjIGRpcgorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGhfd2Vhay5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KKwkKKwljcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcworfQorCitFTEZVVElMUyA9ICJuYXRpdmVzZGstZWxmdXRpbHMiCitERVBFTkRTICs9ICJuYXRpdmVzZGstZ21wIG5hdGl2ZXNkay1tcGZyIG5hdGl2ZXNkay1saWJtcGMgJHtFTEZVVElMU30gbmF0aXZlc2RrLXpsaWIiCitSREVQRU5EU18ke1BOfSArPSAibmF0aXZlc2RrLW1wZnIgbmF0aXZlc2RrLWxpYm1wYyAke0VMRlVUSUxTfSIKKworU1lTVEVNSEVBREVSUyA9ICIvdXNyL2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitTWVNURU1MSUJTMSA9ICIke3RhcmdldF9saWJkaXJ9LyIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICAtLXdpdGgtbXBmcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsYXlvdXRfZXhlY19wcmVmaXh9IFwKKyAgICAtLXdpdGgtbXBjPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xheW91dF9leGVjX3ByZWZpeH0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtYmFyZW1ldGFsID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCisjIGdjYyA0LjcgbmVlZHMgLWlzeXN0ZW0KK2V4cG9ydCBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgPSAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSAtaXN5c3RlbT0ke3RhcmdldF9pbmNsdWRlZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC44LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNC45LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjUzYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtY2FuYWRpYW5fNS4yLmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy1jYW5hZGlhbi5pbmMKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsOTYgQEAKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIgorUEFDS0FHRVMgPSAiIgorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitQTiA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworQ1JPU1NfVEFSR0VUX1NZU19ESVJfYXBwZW5kID0gIi4ke1BOfSIKKworIyBUaGlzIGlzIGludGVuZGVkIHRvIGJlIGEgLXZlcnktIGJhc2ljIGNvbmZpZworIyBzeXNyb290IGlzIG5lZWRlZCBpbiBjYXNlIHdlIHVzZSBsaWJjLWluaXRpYWwKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS13aXRoLW5ld2xpYiBcCisgICAgLS13aXRob3V0LWhlYWRlcnMgXAorICAgIC0tZGlzYWJsZS1zaGFyZWQgXAorICAgIC0tZGlzYWJsZS10aHJlYWRzIFwKKyAgICAtLWRpc2FibGUtbXVsdGlsaWIgXAorICAgIC0tZGlzYWJsZS1fX2N4YV9hdGV4aXQgXAorICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jIFwKKyAgICAke09QVFNQQUNFfSBcCisgICAgLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke0dDQ0NST1NTX0JVSUxEU1lTUk9PVH0gXAorICAgICR7RVhUUkFfT0VDT05GX0lOSVRJQUx9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xkLWlzLWdvbGQnLCAnLS13aXRoLWxkPSR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1RBUkdFVF9QUkVGSVh9bGQuYmZkJywgJycsIGQpfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUfSBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLW5hdGl2ZS1zeXN0ZW0taGVhZGVyLWRpcj0ke1NZU1RFTUhFQURFUlN9IgorCitHQ0NDUk9TU19CVUlMRFNZU1JPT1QgPSAiJHtCfS90bXBzeXNyb290IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc3lzcj0ke0dDQ0NST1NTX0JVSUxEU1lTUk9PVH0ke3RhcmdldF9pbmNsdWRlZGlyfQorCW1rZGlyIC1wICRzeXNyCisJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQlybSAtZiAkc3lzci8kdAorCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9pbmNsdWRlZGlyfS8kdCAkc3lzci8KKwlkb25lCit9CisKK2RvX2NvbXBpbGUgKCkgeworICAgIG9lX3J1bm1ha2UgYWxsLWdjYyBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworfQorZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1nY2MKKworCSMgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAoaGVyZSBzaGFyZXMvIGNvbnRhaW5zIG1hbi8sIGluZm8vLCBsb2NhbGUvKS4KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgSW5zZXJ0IHN5bWxpbmtzIGludG8gbGliZXhlYyBzbyB3aGVuIHRvb2xzIHdpdGhvdXQgYSBwcmVmaXggYXJlIHNlYXJjaGVkIGZvciwgdGhlIGNvcnJlY3Qgb25lcyBhcmUKKwkjIGZvdW5kLiBUaGVzZSBuZWVkIHRvIGJlIHJlbGF0aXZlIHBhdGhzIHNvIHRoZXkgd29yayBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgorCWRlc3Q9JHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8KKwlpbnN0YWxsIC1kICRkZXN0CisJdXNlbGQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJy5iZmQnLCAnJywgZCl9CisJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfWxkJHt1c2VsZH0gJHtkZXN0fWxkCisJZm9yIHQgaW4gYXIgYXMgbm0gb2JqY29weSBvYmpkdW1wIHJhbmxpYiBzdHJpcCBnNzcgZ2NjIGNwcCBnZm9ydHJhbjsgZG8KKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0ICRkZXN0JHQKKwlkb25lCisJIyBmaXhlZCBsaW1pdHMuaCBpbmZhY3QgaW5jbHVkZXMgdGhlIHNvIGNhbGxlZCByZWFsIGxpbWl0cy5oCisJIyB3aGljaCBzaG91bGQgY29tZSBmcm9tIGxpYmMgYnV0IHdoZW4gd2UgYnVpbGQgbGliYy1pbml0aWFsCisJIyB0aGVuIGJ1bmNoIG9mIGNvbmZpZ3VyZSB0ZXN0cyBpbmNsdWRlIGZpeGVkIGxpbWl0cy5oIHdoaWNoIGluIHR1cm4KKwkjIGluY2x1ZGVzIHJlYWwgbGltaXRzLmggYnV0IHRoaXMgcmVhbCBsaW1pdHMuaCBpcyBub3Qgc3RhZ2VkIHlldAorCSMgc28gd2Ugb3ZlcndpcnRlIHRoZSBnZW5lcmF0ZWQgaW5jbHVkZS1maXhlZC9saW1pdHMuaCBmb3IgZ2NjLWNyb3NzLWluaXRpYWwKKwkjIHRvIGdldCByaWQgcmVmZXJlbmNlcyB0byByZWFsIGxpbWl0cy5oCisJY3AgZ2NjL2luY2x1ZGUtZml4ZWQvbGltaXRzLmggJHtEfSR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9saW1pdHMuaAorCisJIyBnY2MtcnVudGltZSBpbnN0YWxscyBsaWJnY2MgaW50byBhIHNwZWNpYWwgbG9jYXRpb24gaW4gc3RhZ2luZyBzaW5jZSBpdCBicmVha3MgZG9pbmcgYSBzdGFuZGFsb25lIGJ1aWxkCisJY2FzZSAke1BOfSBpbgorCQkqZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9KQorCQkJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2NjLWJ1aWxkLWludGVybmFsLWluaXRpYWwtJHtUQVJHRVRfU1lTfQorCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAorCQk7OworCWVzYWMKK30KKyMKKyMgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3lzcm9vdCBzdGFnaW5nIGNvcHkgc2luY2UgdGhpcyB3b24ndCBsb29rIGxpa2UgYSB0YXJnZXQgc3lzdGVtCisjCitzeXNyb290X3N0YWdlX2FsbCgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9ICR7U1lTUk9PVF9ERVNURElSfQorCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LworCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfbGliZGlyfS8KKwltdiAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9iYXNlX2xpYmRpcn0vKiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke3RhcmdldF9iYXNlX2xpYmRpcn0vIHx8IHRydWUKKwltdiAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9saWJkaXJ9LyogJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfbGliZGlyfS8gfHwgdHJ1ZQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfS8ke1NUQUdJTkdfRElSX0hPU1R9LyAke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyAke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfS8ke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zcy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3M2U1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExMDYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLmluYwpAQCAtMCwwICsxLDE5OCBAQAoraW5oZXJpdCBjcm9zcworCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorRVhUUkFERVBFTkRTID0gIiIKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjICR7RVhUUkFERVBFTkRTfSAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgIGQuc2V0VmFyKCJFWFRSQURFUEVORFMiLCAibGludXgtbGliYy1oZWFkZXJzIikKK30KKworUE4gPSAiZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiCitFWFRSQV9PRUNPTkZfYXBwZW5kX3NoNCA9ICIgXAorICAgIC0td2l0aC1tdWx0aWxpYi1saXN0PSBcCisgICAgLS1lbmFibGUtaW5jb21wbGV0ZS10YXJnZXRzIFwKKyIKKworRVhUUkFfT0VDT05GICs9ICJcCisgICAgLS13aXRoLW1wZnI9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyIKKworREVQRU5EU19yZW1vdmVfbGliYy1iYXJlbWV0YWwgOj0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1iYXJlbWV0YWwgPSAiIC0td2l0aG91dC1oZWFkZXJzIgorRVhUUkFfT0VDT05GX3JlbW92ZV9saWJjLWJhcmVtZXRhbCA9ICItLWVuYWJsZS10aHJlYWRzPXBvc2l4IgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdCR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQgKz0gIi1pc3lzdGVtJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCWV4cG9ydCBDQz0iJHtCVUlMRF9DQ30iCisJZXhwb3J0IEFSX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tYXIiCisJZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LXJhbmxpYiIKKwlleHBvcnQgTERfRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1sZCIKKwlleHBvcnQgTk1fRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1ubSIKKwlleHBvcnQgQ0NfRk9SX1RBUkdFVD0iJHtDQ0FDSEV9ICR7VEFSR0VUX1NZU30tZ2NjIgorCWV4cG9ydCBDRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1BQRkxBR1N9IgorCWV4cG9ydCBDWFhGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DWFhGTEFHU30iCisJZXhwb3J0IExERkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfTERGTEFHU30iCisKKwlvZV9ydW5tYWtlIGFsbC1ob3N0IGNvbmZpZ3VyZS10YXJnZXQtbGliZ2NjCisJIyBub3cgZ2VuZXJhdGUgc2NyaXB0IHRvIGRyaXZlIHRlc3RpbmcKKwllY2hvICIjIS91c3IvYmluL2VudiBzaCIgPiR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZXQgPj4gJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCSMgcHJ1bmUgb3V0IHRoZSB1bm5lZWRlZCB2YXJzCisJc2VkIC1pIC1lICIvXkJBU0gvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15VU0VSL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eT1BUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRElSU1RBQ0svZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15FVUlEL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRlVOQ05BTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15HUk9VUFMvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15IT1NUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eSE9NRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXklGUy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxDX0FMTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkxPR05BTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15NQUNIVFlQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXk9TVFlQRS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBJUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TSEVMTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXicvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15VSUQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15URVJNL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUEFUQ0hfR0VUL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUEtHXy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBPU0lYTFlfL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUFBJRC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBTNC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlEvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TSExWTC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlNUQUdJTkcvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MRF9MSUJSQVJZX1BBVEgvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QU0VVRE8vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCisJIyBhcHBlbmQgZXhlY3V0aW9uIHBhcnQgb2YgdGhlIHNjcmlwdAorY2F0ID4+ICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MgPDwgU1RPUAordGFyZ2V0PSJcJDEiCit1c2FnZSAoKSB7CisJZWNobyAiVXNhZ2U6IgorCWVjaG8gIlwkMCB1c2VyQHRhcmdldCAnZXh0cmEgb3B0aW9ucyB0byBkZWphZ251JyIKKwllY2hvICJcJDAgdGFyZ2V0ICdleHRyYSBvcHRpb25zIHRvIGRlamFnbnUnIgorCWVjaG8gIlwkMCB0YXJnZXQiCisJZWNobyAiZS5nLiBcJDAgMTkyLjE2OC43LjIgJyBkZy5leHA9dmlzaWJpbGl0eS1kLmMnIgorCWVjaG8gIndpbGwgb25seSBydW4gdmlzaWJpbGl0eS1kLmMgdGVzdCBjYXNlIgorCWVjaG8gImUuZy4gXCQwIDE5Mi4xNjguNy4yICcvLW10aHVtYiBkZy5leHA9dmlzaWJpbGl0eS1kLmMnIgorCWVjaG8gIndpbGwgb25seSBydW4gdmlzaWJpbGl0eS1kLmMgdGVzdCBjYXNlIGluIHRodW1iIG1vZGUiCisJZWNobyAiWW91IG5lZWQgdG8gaGF2ZSBkZWphZ251IGF1dG9nZW4gZXhwZWN0IGluc3RhbGxlZCIKKwllY2hvICJvbiB0aGUgYnVpbGQgaG9zdCIKKyAgICB9CitpZiBbICJ4XCR0YXJnZXQiID0gIngiIF0KK3RoZW4KKwllY2hvICJQbGVhc2Ugc3BlY2lmeSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kIHJlbW90ZSB1c2VyIGluIGZvcm0gb2YgdXNlckB0YXJnZXRcbiIKKwl1c2FnZQorCWV4aXQgMTsKK2ZpCisKK3NoaWZ0CisKK2VjaG8gIlwkdGFyZ2V0IiB8IGdyZXAgIkAiIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iID0gIngwIiBdCit0aGVuCisgICB1c2VyPVwkKGVjaG8gXCR0YXJnZXQgfCBjdXQgLWQgJ0AnIC1mIDEpCisgICB0YXJnZXQ9XCQoZWNobyBcJHRhcmdldCB8IGN1dCAtZCAnQCcgLWYgMikKK2Vsc2UKKyAgIHVzZXI9XCRVU0VSCitmaQorc3NoIFwkdXNlckBcJHRhcmdldCBkYXRlIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iICE9ICJ4MCIgXQordGhlbgorCWVjaG8gIkZhaWxlZCBjb25uZWN0aW5nIHRvIFwkdXNlckBcJHRhcmdldCBpdCBjb3VsZCBiZSBiZWNhdXNlIgorCWVjaG8gInlvdSBkb24ndCBoYXZlIHBhc3N3b3JkbGVzcyBzc2ggc2V0dXAgdG8gYWNjZXNzIFwkdGFyZ2V0IgorCWVjaG8gIm9yIHNvbWV0aW1lcyBob3N0IGtleSBoYXMgYmVlbiBjaGFuZ2VkIgorCWVjaG8gImluIHN1Y2ggY2FzZSBkbyBzb21ldGhpbmcgbGlrZSBiZWxvdyBvbiBidWlsZCBob3N0IgorCWVjaG8gInNzaC1rZXlnZW4gLWYgIn4vLnNzaC9rbm93bl9ob3N0cyIgLVIgXCR0YXJnZXQiCisJZWNobyAiYW5kIHRoZW4gdHJ5IHNzaCBcJHVzZXJAXCR0YXJnZXQiCisKKwl1c2FnZQorCWV4aXQgMQorZmkKKwllY2hvICJsYXBwZW5kIGJvYXJkc19kaXIgW3B3ZF0vLi4vLi4vLi4iID4gJHtCfS9zaXRlLmV4cAorCWVjaG8gImxvYWRfZ2VuZXJpY19jb25maWcgXCJ1bml4XCIiID4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gdXNlcm5hbWUgXCR1c2VyIiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyByc2hfcHJvZyBzc2giID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIHJjcF9wcm9nIHNjcCIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gaG9zdG5hbWUgXCR0YXJnZXQiID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCURFSkFHTlU9JHtCfS9zaXRlLmV4cCBtYWtlIC1rIGNoZWNrIFJVTlRFU1RGTEFHUz0iLS10YXJnZXRfYm9hcmQ9JHtQQUNLQUdFX0FSQ0h9XCRAIgorCitTVE9QCisKKwljaG1vZCAreCAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisKK30KKworSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCisKKyMgQ29tcHV0ZSBob3cgdG8gZ2V0IGZyb20gbGliZXhlY2RpciB0byBiaW5kaXIgaW4gcHl0aG9uIChlYXNpZXIgdGhhbiBzaGVsbCkKK0JJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9TWVN9IiksIGQuZXhwYW5kKCIke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0iKSl9IgorCitkb19pbnN0YWxsICgpIHsKKwkoIGNkICR7Qn0vJHtUQVJHRVRfU1lTfS9saWJnY2M7IG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC11bndpbmRfaCApCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWhvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7dGFyZ2V0X2xpYmRpcn0KKyAgICAKKwkjIExpbmsgZ2ZvcnRyYW4gdG8gZzc3IHRvIHNhdGlzZnkgbm90LXNvLXNtYXJ0IGNvbmZpZ3VyZSBvciBoYXJkIGNvZGVkIGc3NworCSMgZ2ZvcnRyYW4gaXMgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUuIFRoaXMgaXMgYSBzYWZlIGFuZCBwcmFjdGljYWwgc29sdXRpb24uIAorCWxuIC1zZiAke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L2Jpbi8ke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfUFJFRklYfWc3NyB8fCB0cnVlCisKKwkKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4gVGhlc2UgbmVlZCB0byBiZSByZWxhdGl2ZSBwYXRocyBzbyB0aGV5IHdvcmsgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCWZvciB0IGluIGFyIGFzIGxkIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZzc3IGdjYyBjcHAgZ2ZvcnRyYW47IGRvCisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAkZGVzdCR0CisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAke2Rlc3R9JHtUQVJHRVRfUFJFRklYfSR0CisJZG9uZQorCisJIyBSZW1vdmUgdGhpbmdzIHdlIGRvbid0IG5lZWQgYnV0IGtlZXAgc2hhcmUvamF2YQorCWZvciBkIGluIGluZm8gbWFuIHNoYXJlL2RvYyBzaGFyZS9sb2NhbGUgc2hhcmUvbWFuIHNoYXJlL2luZm87IGRvCisJCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS8kZAorCWRvbmUKKworCSMgbGlicXVhZG1hdGggaGVhZGVycyBuZWVkIHRvICBiZSBhdmFpbGFibGUgaW4gdGhlIGdjYyBsaWJleGVjIGRpcgorCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvCisJY3AgJHtTfS9saWJxdWFkbWF0aC9xdWFkbWF0aC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGhfd2Vhay5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIGdjYy1ydW50aW1lIGluc3RhbGxzIGxpYmdjYyBpbnRvIGEgc3BlY2lhbCBsb2NhdGlvbiBpbiBzdGFnaW5nIHNpbmNlIGl0IGJyZWFrcyBkb2luZyBhIHN0YW5kYWxvbmUgYnVpbGQKKwljYXNlICR7UE59IGluCisJCSpnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH18KmdjYy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSkKKwkJCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2djYy1idWlsZC1pbnRlcm5hbC0ke1RBUkdFVF9TWVN9CisJCQloYXJkbGlua2RpciAuICRkZXN0CisJCTs7CisJZXNhYworfQorCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNjY2EwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2NjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzY2NhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyNTk5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK1NZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCitTWVNURU1MSUJTMSA9ICIke1NES1BBVEhOQVRJVkV9JHtsaWJkaXJfbmF0aXZlc2RrfS8iCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgZ2V0dGV4dC1uYXRpdmUgJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsLWNyb3Nzc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkwZTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjg4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay5pbmMKQEAgLTAsMCArMSwxMiBAQAoraW5oZXJpdCBjcm9zc3NkaworCitQTiA9ICJnY2MtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0iCisKK1NZU1RFTUhFQURFUlMgPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30vaW5jbHVkZSIKK1NZU1RFTUxJQlMgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfS8iCitTWVNURU1MSUJTMSA9ICIke1NES1BBVEhOQVRJVkV9JHtsaWJkaXJfbmF0aXZlc2RrfS8iCisKK0dDQ01VTFRJTElCID0gIi0tZGlzYWJsZS1tdWx0aWxpYiIKKworREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay0ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIGdldHRleHQtbmF0aXZlICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtY3Jvc3NzZGsgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9ZysrLWNyb3Nzc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTZjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2YzRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtbXVsdGlsaWItY29uZmlnLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmOWY1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMKQEAgLTAsMCArMSwyMjcgQEAKKyMgZm9sbG93aW5nIGNvZGUgbW9kaWZpZXMgdGhlc2UgZGVmaW5pdGlvbnMgaW4gdGhlIGdjYyBjb25maWcKKyMgICAgTVVMVElMSUJfT1BUSU9OUworIyAgICBNVUxUSUxJQl9ESVJOQU1FUworIyAgICBNVUxUSUxJQl9PU0RJUk5BTUVTCisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NAorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUlgzMgorIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUk4zMgorIyAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNlIG9mIHRoZXNlIHZhcmlhYmxlcyBsb29rIGF0IHRoZXNlIGZpbGVzIGluIHRoZSBnY2Mgc291cmNlIGNvZGUKKyMgICAgZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisjICAgIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL2kzODYvbGludXg2NC5oCisjICAgIGdjYy9jb25maWcvbWlwcy9saW51eDY0LmgKKyMgICAgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCisKK01VTFRJTElCX09QVElPTl9XSElURUxJU1QgPz89ICItbTMyIC1tNjQgLW14MzIgLW1hYmk9bjMyIC1tYWJpPTMyIC1tYWJpPTY0IiAKKworcHl0aG9uIGdjY19tdWx0aWxpYl9zZXR1cCgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IGdsb2IKKworICAgIHNyY2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdCJywgVHJ1ZSkKKyAgICBzcmNfY29uZl9kaXIgPSAnJXMvZ2NjL2NvbmZpZycgJSBzcmNkaXIKKyAgICBidWlsZF9jb25mX2RpciA9ICclcy9nY2MvY29uZmlnJyAlIGJ1aWxkZGlyCisKKyAgICBiYi51dGlscy5yZW1vdmUoYnVpbGRfY29uZl9kaXIsIFRydWUpCisgICAgbWxfZ2xvYnMgPSAoJyVzLyovdC1saW51eDY0JyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvKi9saW51eDY0LmgnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy8qL2xpbnV4LmgnICUgc3JjX2NvbmZfZGlyLAorICAgICAgICAgICAgICAgICclcy9saW51eC5oJyAlIHNyY19jb25mX2RpcikKKworICAgICMgY29weSB0aGUgdGFyZ2V0IG11bHRpbGliIGNvbmZpZyBmaWxlcyB0byAke0J9CisgICAgZm9yIG1sX2dsb2IgaW4gbWxfZ2xvYnM6CisgICAgICAgIGZvciBmbiBpbiBnbG9iLmdsb2IobWxfZ2xvYik6CisgICAgICAgICAgICByZWxfcGF0aCA9IG9zLnBhdGgucmVscGF0aChmbiwgc3JjX2NvbmZfZGlyKQorICAgICAgICAgICAgcGFyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShyZWxfcGF0aCkKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcignJXMvJXMnICUgKGJ1aWxkX2NvbmZfZGlyLCBwYXJlbnRfZGlyKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKGZuLCAnJXMvJXMnICUgKGJ1aWxkX2NvbmZfZGlyLCByZWxfcGF0aCkpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbXVsdGlsaWJzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgaWYgbm90IG11bHRpbGlicyBhbmQgcG4gIT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICByZXR1cm4KKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKworICAgIGlmICgnJXNnY2MnICUgbWxwcmVmaXgpICE9IHBuIGFuZCAobm90IHBuLnN0YXJ0c3dpdGgoJ2djYy1jcm9zcy1jYW5hZGlhbicpKSBhbmQgcG4gIT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICByZXR1cm4KKworCisgICAgZGVmIHdyaXRlX2NvbmZpZyhyb290LCBmaWxlcywgb3B0aW9ucywgZGlybmFtZXMsIG9zZGlybmFtZXMpOgorICAgICAgICBmb3IgbWxfY29uZl9maWxlIGluIGZpbGVzOgorICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgIyByZWNyZWF0ZSBtdWx0aWxpYiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgICAgICAgICAgIHN1YnN0cyA9IFsKKyAgICAgICAgICAgICAgICAgICAgKHInXihccyooTVVMVElMSUJfT1BUSU9OU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJy8nLmpvaW4ob3B0aW9ucykpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKk1VTFRJTElCX09QVElPTlNccypcKz0uKikkJywgJycpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKihNVUxUSUxJQl9ESVJOQU1FU1xzKj0pLiopJCcsIHInXDIgJXMnICUgJyAnLmpvaW4oZGlybmFtZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9ESVJOQU1FU1xzKlwrPS4qKSQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqKE1VTFRJTElCX09TRElSTkFNRVNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcgJy5qb2luKG9zZGlybmFtZXMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9PU0RJUk5BTUVTXHMqXCs9LiopJCcsICcnKSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgICAgICBmb3IgKGksIGxpbmUpIGluIGVudW1lcmF0ZShmaWxlbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Vic3QgaW4gc3Vic3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YihzdWJzdFswXSwgc3Vic3RbMV0sIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaW5lc1tpXSA9IGxpbmUKKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJycuam9pbihmaWxlbGluZXMpKQorCisgICAgZGVmIHdyaXRlX2hlYWRlcnMocm9vdCwgZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpOgorICAgICAgICBkZWYgd3JhcF9saWJkaXIobGliZGlyKToKKyAgICAgICAgICAgIGlmIGxpYmRpci5maW5kKCdTWVNURU1MSUJTX0RJUicpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiAnIiVyIicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICciLyVzLyInICUgbGliZGlyCisKKyAgICAgICAgZm9yIG1sX2NvbmZfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGZuID0gcm9vdCArICcvJyArIG1sX2NvbmZfZmlsZQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZWxpbmVzID0gZi5yZWFkbGluZXMoKQorCisgICAgICAgICAgICAgICAgIyByZXBsYWNlIGxpbmVzIGxpa2UKKyAgICAgICAgICAgICAgICAjICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAgICAgICAgICAgICAgICAjIGJ5CisgICAgICAgICAgICAgICAgIyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvIiAibGQtbGludXguc28uMiIKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIHRvIHB1dCB0aGUgY29ycmVjdCBkeW5hbWljIGxvYWRlciBwYXRoIGluIHRoZSBnZW5lcmF0ZWQgYmluYXJpZXMKKyAgICAgICAgICAgICAgICBzdWJzdHMgPSBbCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXIzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSNjRccyopKFxTKykoXHMqXCJcUytcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqXCJcUytcIlxzKikoXFMrKShccypcIlxTK1wiXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1w1JyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSWDMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyeDMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXJuMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSNjRccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXI2NCkgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUk4zMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcm4zMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUlxiXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgIF0KKworICAgICAgICAgICAgICAgIGZvciAoaSwgbGluZSkgaW4gZW51bWVyYXRlKGZpbGVsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJzdCBpbiBzdWJzdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKHN1YnN0WzBdLCBzdWJzdFsxXSwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgZmlsZWxpbmVzW2ldID0gbGluZQorCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnJy5qb2luKGZpbGVsaW5lcykpCisKKworICAgIGdjY190YXJnZXRfY29uZmlnX2ZpbGVzID0geworICAgICAgICAneDg2XzY0JyAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnaTU4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnaTY4NicgICAgICA6IFsnZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NCddLAorICAgICAgICAnbWlwcycgICAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCddLAorICAgICAgICAnbWlwczY0JyAgICA6IFsnZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCddLAorICAgICAgICAncG93ZXJwYycgICA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0J10sCisgICAgICAgICdwb3dlcnBjNjQnIDogWydnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQnXSwKKyAgICB9CisKKyAgICBnY2NfaGVhZGVyX2NvbmZpZ19maWxlcyA9IHsKKyAgICAgICAgJ3g4Nl82NCcgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ2k1ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ2k2ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgnXSwKKyAgICAgICAgJ21pcHMnICAgICAgOiBbJ2djYy9jb25maWcvbWlwcy9saW51eC5oJywgJ2djYy9jb25maWcvbWlwcy9saW51eDY0LmgnXSwKKyAgICAgICAgJ21pcHM2NCcgICAgOiBbJ2djYy9jb25maWcvbWlwcy9saW51eC5oJywgJ2djYy9jb25maWcvbWlwcy9saW51eDY0LmgnXSwKKyAgICAgICAgJ3Bvd2VycGMnICAgOiBbJ2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCddLAorICAgICAgICAncG93ZXJwYzY0JyA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oJ10sCisgICAgfQorCisgICAgbGliZGlyMzIgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlyNjQgPSAnU1lTVEVNTElCU19ESVInCisgICAgbGliZGlyeDMyID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcm4zMiA9ICdTWVNURU1MSUJTX0RJUicKKworCisgICAgdGFyZ2V0X2FyY2ggPSAoZC5nZXRWYXIoJ1RBUkdFVF9BUkNIX01VTFRJTElCX09SSUdJTkFMJywgVHJ1ZSkgaWYgbWxwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSkKKyAgICBpZiBwbiA9PSAibmF0aXZlc2RrLWdjYyI6CisgICAgICAgIGhlYWRlcl9jb25maWdfZmlsZXMgPSBnY2NfaGVhZGVyX2NvbmZpZ19maWxlc1tkLmdldFZhcigiU0RLX0FSQ0giLCBUcnVlKV0KKyAgICAgICAgd3JpdGVfaGVhZGVycyhidWlsZGRpciwgaGVhZGVyX2NvbmZpZ19maWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiB0YXJnZXRfYXJjaCBub3QgaW4gZ2NjX3RhcmdldF9jb25maWdfZmlsZXM6CisgICAgICAgIGJiLndhcm4oJ2djYyBtdWx0aWxpYiBzZXR1cCBpcyBub3Qgc3VwcG9ydGVkIGZvciBUQVJHRVRfQVJDSD0nICsgdGFyZ2V0X2FyY2gpCisgICAgICAgIHJldHVybgorCisgICAgdGFyZ2V0X2NvbmZpZ19maWxlcyA9IGdjY190YXJnZXRfY29uZmlnX2ZpbGVzW3RhcmdldF9hcmNoXQorICAgIGhlYWRlcl9jb25maWdfZmlsZXMgPSBnY2NfaGVhZGVyX2NvbmZpZ19maWxlc1t0YXJnZXRfYXJjaF0KKworICAgIG1sX2xpc3QgPSBbJ0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMJyBpZiBtbHByZWZpeCBlbHNlICdERUZBVUxUVFVORSddCisgICAgbWx0dW5lcyA9IFsoJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcycgJSBtbCkgZm9yIG1sIGluIG11bHRpbGlic10KKyAgICBpZiBtbHByZWZpeDoKKyAgICAgICAgbWxpbmRleCA9IDAKKyAgICAgICAgZm9yIG1sIGluIG11bHRpbGliczoKKyAgICAgICAgICAgIGlmIG1scHJlZml4ID09IG1sICsgJy0nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtbGluZGV4ICs9IDEKKworICAgICAgICBtbF9saXN0LmV4dGVuZChtbHR1bmVzWzptbGluZGV4XSArIFsnREVGQVVMVFRVTkUnXSArIG1sdHVuZXNbKG1saW5kZXggKyAxKTpdKQorICAgIGVsc2U6CisgICAgICAgIG1sX2xpc3QuZXh0ZW5kKG1sdHVuZXMpCisKKyAgICBvcHRpb25zID0gW10KKyAgICBkaXJuYW1lcyA9IFtdCisgICAgb3NkaXJuYW1lcyA9IFtdCisgICAgb3B0c2V0cyA9IFtdCisKKyAgICBmb3IgbWwgaW4gbWxfbGlzdDoKKyAgICAgICAgdHVuZSA9IGQuZ2V0VmFyKG1sLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgdHVuZS4gU2tpcHBpbmcuLi4iICUgbWwpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0dW5lX3BhcmFtZXRlcnMgPSBnZXRfdHVuZV9wYXJhbWV0ZXJzKHR1bmUsIGQpCisKKyAgICAgICAgdHVuZV9iYXNlbGliID0gdHVuZV9wYXJhbWV0ZXJzWydiYXNlbGliJ10KKyAgICAgICAgaWYgbm90IHR1bmVfYmFzZWxpYjoKKyAgICAgICAgICAgIGJiLndhcm4oIlR1bmUgJXMgZG9lc24ndCBoYXZlIGEgYmFzZWxpYiBzZXQuIFNraXBwaW5nLi4uIiAlIHR1bmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliNjQnOgorICAgICAgICAgICAgbGliZGlyNjQgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYngzMic6CisgICAgICAgICAgICBsaWJkaXJ4MzIgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYjMyJzoKKyAgICAgICAgICAgIGxpYmRpcm4zMiA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbGlmIHR1bmVfYmFzZWxpYiA9PSAnbGliJzoKKyAgICAgICAgICAgIGxpYmRpcjMyID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5lcnJvcignVW5rbm93biBsaWJkaXIgKCVzKSBvZiB0aGUgdHVuZSA6ICVzJyAlICh0dW5lX2Jhc2VsaWIsIHR1bmUpKQorCisgICAgICAgICMgdGFrZSBvdXQgJy0nIG1jcHU9J3MgYW5kIG1hcmNoPSdzIGZyb20gcGFyYW1ldGVycworICAgICAgICBvcHRzID0gW10KKyAgICAgICAgd2hpdGVsaXN0ID0gKGQuZ2V0VmFyKCJNVUxUSUxJQl9PUFRJT05fV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZm9yIGkgaW4gdHVuZV9wYXJhbWV0ZXJzWydjY2FyZ3MnXS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgaSBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHN0cmlwICctJyBmcm9tIG9wdGlvbgorICAgICAgICAgICAgICAgIG9wdHMuYXBwZW5kKGlbMTpdKQorICAgICAgICBvcHRpb25zLmFwcGVuZCgiICIuam9pbihvcHRzKSkKKworICAgICAgICBpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYic6CisgICAgICAgICAgICBkaXJuYW1lcy5hcHBlbmQoJzMyJykgICMgL2xpYiA9PiAzMmJpdCBsaWIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcm5hbWVzLmFwcGVuZCh0dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpKQorICAgICAgICBvc2Rpcm5hbWVzLmFwcGVuZCgnLi4vJyArIHR1bmVfYmFzZWxpYikKKworICAgIHdyaXRlX2NvbmZpZyhidWlsZGRpciwgdGFyZ2V0X2NvbmZpZ19maWxlcywgb3B0aW9ucywgZGlybmFtZXMsIG9zZGlybmFtZXMpCisgICAgd3JpdGVfaGVhZGVycyhidWlsZGRpciwgaGVhZGVyX2NvbmZpZ19maWxlcywgbGliZGlyMzIsIGxpYmRpcjY0LCBsaWJkaXJ4MzIsIGxpYmRpcm4zMikKK30KKworZ2NjX211bHRpbGliX3NldHVwW2NsZWFuZGlyc10gPSAiJHtCfS9nY2MvY29uZmlnIgorCitFWFRSQUNPTkZGVU5DUyArPSAiZ2NjX211bHRpbGliX3NldHVwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTc1N2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKQEAgLTAsMCArMSwxOTUgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0NYWEZMQUdTIDo9ICIke0BvZV9maWx0ZXJfb3V0KCctZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4nLCAnJHtDWFhGTEFHU30nLCBkKX0iCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLWd4eC1pbmNsdWRlLWRpcj0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgLS1lbmFibGUtY2xvY2FsZT1nbnUiCisKK1JVTlRJTUVUQVJHRVQgPSAibGlic3NwIGxpYnN0ZGMrKy12MyBsaWJnb21wIGxpYmF0b21pYyIKKyMgID8KKyMgbGliaWJlcnR5CisjIGxpYm11ZGZsYXAKKyMgbGliZ2ZvcnRyYW4gbmVlZHMgc2VwYXJhdGUgcmVjaXBlIGR1ZSB0byBsaWJxdWFkbWF0aCBkZXBlbmRlbmN5CisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJZXhwb3J0IENYWD0iJHtDWFh9IC1ub3N0ZGluYysrIC1ub3N0ZGxpYisrIgorCW10YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0ICR7Qn0KKwlmb3IgZCBpbiBsaWJnY2MgJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJZWNobyAiQ29uZmlndXJpbmcgJGQiCisJCXJtIC1yZiAke0J9LyR0YXJnZXQvJGQvCisJCW1rZGlyIC1wICR7Qn0vJHRhcmdldC8kZC8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQljaG1vZCBhK3ggJHtTfS8kZC9jb25maWd1cmUKKwkJJHtTfS8kZC9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKwlkb25lCit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWZvciBkIGluIGxpYmdjYyAke1JVTlRJTUVUQVJHRVR9OyBkbworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJGQvCisJZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlmb3IgZCBpbiAke1JVTlRJTUVUQVJHRVR9OyBkbworCQljZCAke0J9LyR0YXJnZXQvJGQvCisJCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJGQvIGluc3RhbGwKKwlkb25lCisJcm0gLXJmICR7RH0ke2luZm9kaXJ9L2xpYmdvbXAuaW5mbyAke0R9JHtpbmZvZGlyfS9kaXIKKwlybSAtcmYgJHtEfSR7aW5mb2Rpcn0vbGlicXVhZG1hdGguaW5mbyAke0R9JHtpbmZvZGlyfS9kaXIKKwlpZiBbIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCWZpCisJaWYgWyAtZCAke0R9JHtpbmZvZGlyfSBdOyB0aGVuCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2luZm9kaXJ9CisJZmkKKwlpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LWdudXNwZSIgXTsgdGhlbgorCQlsbiAtcyAke1RBUkdFVF9TWVN9ICR7RH0ke2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS1saW51eAorCWZpCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyBsaWJnY2MiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tZGJnIFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1wcmVjb21waWxlLWRldiBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgbGlic3RkYysrLXN0YXRpY2RldiBcCisgICAgbGliZzJjIFwKKyAgICBsaWJnMmMtZGV2IFwKKyAgICBsaWJzc3AgXAorICAgIGxpYnNzcC1kZXYgXAorICAgIGxpYnNzcC1zdGF0aWNkZXYgXAorICAgIGxpYm11ZGZsYXAgXAorICAgIGxpYm11ZGZsYXAtZGV2IFwKKyAgICBsaWJtdWRmbGFwLXN0YXRpY2RldiBcCisgICAgbGlicXVhZG1hdGggXAorICAgIGxpYnF1YWRtYXRoLWRldiBcCisgICAgbGlicXVhZG1hdGgtc3RhdGljZGV2IFwKKyAgICBsaWJnb21wIFwKKyAgICBsaWJnb21wLWRldiBcCisgICAgbGliZ29tcC1zdGF0aWNkZXYgXAorICAgIGxpYmF0b21pYyBcCisgICAgbGliYXRvbWljLWRldiBcCisgICAgbGliYXRvbWljLXN0YXRpY2RldiBcCisiCisKKyMgTW9zdCBsaWJyYXJpZXMgYXJlIGxpY2Vuc2VkIHdpdGggdGhlIGV4Y2VwdGlvbiwgYnV0CisjIG9uZSBsaWJyYXJ5IGlzIHJlYWxseSBHUEx2My4KKyMKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uICYgR1BMdjMiCitMSUNFTlNFX2xpYnN0ZGMrKyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLXByZWNvbXBpbGUtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzdGRjKystc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnMmMgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmcyYy1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3NwLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4gPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZ2ZvcnRyYW4tc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJtdWRmbGFwLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnF1YWRtYXRoLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJhdG9taWMtc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCitMSUNFTlNFX2xpYmdvbXAgPSAiR1BMdjMiCitMSUNFTlNFX2xpYmdvbXAtZGV2ID0gIkdQTHYzIgorTElDRU5TRV9saWJnb21wLXN0YXRpY2RldiA9ICJHUEx2MyIKKworIyBUaGUgYmFzZSBwYWNrYWdlIGRvZXNuJ3QgZXhpc3QsIHNvIHdlIGNsZWFyIHRoZSByZWNvbW1lbmRzLgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiIKKworIyBpbmNsdWRlIHB5dGhvbiBkZWJ1Z2dpbmcgc2NyaXB0cworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zby4qLWdkYi5weSBcCisgICAgJHtkYXRhZGlyfS9nY2MtJHtCSU5WfS9weXRob24vbGlic3RkY3h4IFwKKyIKKworRklMRVNfbGliZzJjID0gIiR7dGFyZ2V0X2xpYmRpcn0vbGliZzJjLnNvLioiCitGSUxFU19saWJnMmMtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZzJjLnNvIFwKKyAgICAke2xpYmRpcn0vbGliZzJjLmEgXAorICAgICR7bGliZGlyfS9saWJmcnRiZWdpbi5hIFwKKyIKKworRklMRVNfbGlic3RkYysrID0gIiR7bGliZGlyfS9saWJzdGRjKysuc28uKiIKK0ZJTEVTX2xpYnN0ZGMrKy1kZXYgPSAiXAorICAgICR7aW5jbHVkZWRpcn0vYysrLyBcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5sYSBcCisgICAgJHtsaWJkaXJ9L2xpYnN1cGMrKy5sYSBcCisiCitGSUxFU19saWJzdGRjKystc3RhdGljZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlic3RkYysrLmEgXAorICAgICR7bGliZGlyfS9saWJzdXBjKysuYSBcCisiCisKK0ZJTEVTX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICIke2luY2x1ZGVkaXJ9L2MrKy8ke1RBUkdFVF9TWVN9L2JpdHMvKi5nY2giCisKK0ZJTEVTX2xpYnNzcCA9ICIke2xpYmRpcn0vbGlic3NwLnNvLioiCitGSUxFU19saWJzc3AtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGlic3NwKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnNzcCpfbm9uc2hhcmVkLmEgXAorICAgICR7bGliZGlyfS9saWJzc3AqLmxhIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3NzcCBcCisiCitGSUxFU19saWJzc3Atc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJzc3AqLmEiCisKK0ZJTEVTX2xpYnF1YWRtYXRoID0gIiR7bGliZGlyfS9saWJxdWFkbWF0aCouc28uKiIKK0ZJTEVTX2xpYnF1YWRtYXRoLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9xdWFkbWF0aCogXAorICAgICR7bGliZGlyfS9saWJxdWFkbWF0aCouc28gXAorICAgICR7bGliZGlyfS9saWJxdWFkbWF0aC5sYSBcCisiCitGSUxFU19saWJxdWFkbWF0aC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYnF1YWRtYXRoLmEiCisKK0ZJTEVTX2xpYm11ZGZsYXAgPSAiJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvLioiCitGSUxFU19saWJtdWRmbGFwLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYm11ZGZsYXAqLnNvIFwKKyAgICAke2xpYmRpcn0vbGlibXVkZmxhcC5sYSBcCisiCitGSUxFU19saWJtdWRmbGFwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXVkZmxhcC5hIgorCitGSUxFU19saWJnb21wID0gIiR7bGliZGlyfS9saWJnb21wKiR7U09MSUJTfSIKK0ZJTEVTX2xpYmdvbXAtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU0RFVn0gXAorICAgICR7bGliZGlyfS9saWJnb21wKi5sYSBcCisgICAgJHtsaWJkaXJ9L2xpYmdvbXAuc3BlYyBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vbXAuaCBcCisiCitGSUxFU19saWJnb21wLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliZ29tcCouYSIKKworRklMRVNfbGliYXRvbWljID0gIiR7bGliZGlyfS9saWJhdG9taWMuc28uKiIKK0ZJTEVTX2xpYmF0b21pYy1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJhdG9taWMuc28gXAorICAgICR7bGliZGlyfS9saWJhdG9taWMubGEgXAorIgorRklMRVNfbGliYXRvbWljLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliYXRvbWljLmEiCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3ZDY5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1ydW50aW1lLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2Q2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtcnVudGltZS5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMxZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCisKK0ZJTEVTX2xpYmdvbXAtZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9vcGVuYWNjLmggXAorIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ODdjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwpAQCAtMCwwICsxLDExOSBAQAorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJOQ1NBIHwgTUlUIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vbGlic2FuaXRpemVyL0xJQ0VOU0UuVFhUO21kNT0wMjQ5YzM3NzQ4OTM2ZmFmNWIxZWZkNTc4OTU4NzkwOSBcCisiCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICBtdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisgICAgaWYgWyAtZCAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vZ2NjLWJ1aWxkLWludGVybmFsLSRtdGFyZ2V0IF07IHRoZW4KKyAgICAgICAgaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisgICAgZmkKKworICAgIGVjaG8gIkNvbmZpZ3VyaW5nIGxpYnNhbml0aXplciIKKyAgICBybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBta2RpciAtcCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgICMgVGhpcyBpcyBraW5kIG9mIGdyb3NzLCBidXQgaXQncyBhbiBlYXN5IHdheSB0byBtYWtlIGNvbmZpZ3VyZSBoYXBweQorICAgICMgd2l0aG91dCBoYWNraW5nIGl0IHVwIHRvIHVzZSB0aGUgc3lzdGVtIHN0ZGMrKyBpbnN0ZWFkIG9mIHRoZSBvbmUgaXQKKyAgICAjIGV4cGVjdHMgdG8gYmUgbmV3bHkgYnVpbHQuCisgICAgcm0gLXJmICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvCisgICAgbWtkaXIgLXAgJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My9zcmMvCisgICAgbG4gLXMgJHtTVEFHSU5HX0xJQkRJUn0vbGlic3RkYysrLmxhICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvc3JjLworICAgIGxuIC1zICR7U1RBR0lOR19MSUJESVJ9L2xpYnN0ZGMrKy5zbyAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzL3NyYy8KKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIGNobW9kIGEreCAke1N9L2xpYnNhbml0aXplci9jb25maWd1cmUKKyAgICAke1N9L2xpYnNhbml0aXplci9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKyAgICAjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisgICAgIyBicm9rZW4gbGlidG9vbCBoZXJlCisgICAgc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci9saWJ0b29sCit9CisKK2RvX2NvbXBpbGUgKCkgeworICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGNkICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvIGluc3RhbGwKKyAgICBpZiBbIC1kICR7RH0ke2luZm9kaXJ9IF07IHRoZW4KKyAgICAgICAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7aW5mb2Rpcn0KKyAgICBmaQorICAgIGNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorREVQRU5EUyA9ICJnY2MtcnVudGltZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorUEFDS0FHRVMgKz0gImxpYmFzYW4gbGlidWJzYW4gbGlibHNhbiBsaWJ0c2FuIgorUEFDS0FHRVMgKz0gImxpYmFzYW4tZGV2IGxpYnVic2FuLWRldiBsaWJsc2FuLWRldiBsaWJ0c2FuLWRldiIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuLWRiZyBsaWJ1YnNhbi1kYmcgbGlibHNhbi1kYmcgbGlidHNhbi1kYmciCitQQUNLQUdFUyArPSAibGliYXNhbi1zdGF0aWNkZXYgbGlidWJzYW4tc3RhdGljZGV2IGxpYmxzYW4tc3RhdGljZGV2IGxpYnRzYW4tc3RhdGljZGV2IgorCitSREVQRU5EU19saWJhc2FuICs9ICJsaWJzdGRjKysiCitSREVQRU5EU19saWJ1YnNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlibHNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlidHNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGliYXNhbi1kZXYgKz0gIiR7UE59IgorUkRFUEVORFNfbGlidWJzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYmxzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYnRzYW4tZGV2ICs9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJsaWJhc2FuIGxpYnVic2FuIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX3g4Ni02NCA9ICIgbGlibHNhbiBsaWJ0c2FuIgorUlJFQ09NTUVORFNfJHtQTn1fYXBwZW5kX3g4NiA9ICIgbGlibHNhbiIKKworZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzOmRvX3BhY2thZ2VkYXRhIgorCisjIE1JUFMsIGFhcmNoNjQsIGFuZCBTUEFSQyBhcmUgYnJva2VuLgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFybSkuKi1saW51eCcKKworRklMRVNfbGliYXNhbiArPSAiJHtsaWJkaXJ9L2xpYmFzYW4uc28uKiIKK0ZJTEVTX2xpYmFzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmFzYW4uc28uKiIKK0ZJTEVTX2xpYmFzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW5fcHJlaW5pdC5vIFwKKyAgICAke2xpYmRpcn0vbGliYXNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW4ubGEgXAorIgorRklMRVNfbGliYXNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJhc2FuLmEiCisKK0ZJTEVTX2xpYnVic2FuICs9ICIke2xpYmRpcn0vbGlidWJzYW4uc28uKiIKK0ZJTEVTX2xpYnVic2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJ1YnNhbi5zby4qIgorRklMRVNfbGlidWJzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnVic2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGlidWJzYW4ubGEgXAorIgorRklMRVNfbGlidWJzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlidWJzYW4uYSIKKworRklMRVNfbGlibHNhbiArPSAiJHtsaWJkaXJ9L2xpYmxzYW4uc28uKiIKK0ZJTEVTX2xpYmxzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmxzYW4uc28uKiIKK0ZJTEVTX2xpYmxzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmxzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJsc2FuLmxhIFwKKyIKK0ZJTEVTX2xpYmxzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlibHNhbi5hIgorCitGSUxFU19saWJ0c2FuICs9ICIke2xpYmRpcn0vbGlidHNhbi5zby4qIgorRklMRVNfbGlidHNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGlidHNhbi5zby4qIgorRklMRVNfbGlidHNhbi1kZXYgKz0gIlwKKyAgICAke2xpYmRpcn0vbGlidHNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnRzYW4ubGEgXAorIgorRklMRVNfbGlidHNhbi1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJ0c2FuLmEiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNwZWMgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9zYW5pdGl6ZXIvKi5oIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2Mtc2FuaXRpemVycy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zaGFyZWQtc291cmNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNmZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMKQEAgLTAsMCArMSw5IEBACitkb19mZXRjaCgpIHsKKwk6Cit9Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkZWx0YXNrIGRvX3VucGFjaworZGVsdGFzayBkb19wYXRjaAorCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gImdjYy1zb3VyY2UtJHtQVn06ZG9fcHJlY29uZmlndXJlIgorZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJnY2Mtc291cmNlLSR7UFZ9OmRvX3VucGFjayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NGZkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK2RlbHRhc2sgZG9fY29uZmlndXJlIAorZGVsdGFzayBkb19jb21waWxlIAorZGVsdGFzayBkb19wYWNrYWdlIAorZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX3JwbSAKK2RlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9pcGsgCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfZGViCitkZWx0YXNrIGRvX2luc3RhbGwgCitkZWx0YXNrIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2RlbHRhc2sgZG9fcG9wdWxhdGVfbGljIAorZGVsdGFzayBkb19wYWNrYWdlX3FhCitkZWx0YXNrIGRvX3BhY2thZ2VkYXRhCitkZWx0YXNrIGRvX3JtX3dvcmsKKworUE4gPSAiZ2NjLXNvdXJjZS0ke1BWfSIKK1dPUktESVIgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfSIKK1NTVEFURV9TV1NQRUMgPSAic3N0YXRlOmdjYzo6JHtQVn06JHtQUn06OiR7U1NUQVRFX1ZFUlNJT059OiIKKworU1RBTVAgPSAiJHtTVEFNUFNfRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0iCitTVEFNUENMRUFOID0gIiR7U1RBTVBTX0RJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSoiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gIiIKK1BBQ0tBR0VTID0gIiIKKworcHl0aG9uIGRvX3ByZWNvbmZpZ3VyZSAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBjbWQgPSBkLmV4cGFuZCgnY2QgJHtTfSAmJiBQQVRIPSR7UEFUSH0gZ251LWNvbmZpZ2l6ZScpCisgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgIyBTZWUgMDA0NC1nZW5ndHlwZXMucGF0Y2gsIHdlIG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGlzIGZpbGUKKyAgICBiYi51dGlscy5yZW1vdmUoZC5leHBhbmQoIiR7U30vZ2NjL2dlbmd0eXBlLWxleC5jIikpCisgICAgY21kID0gZC5leHBhbmQoInNlZCAtaSAncy9CVUlMRF9JTkZPPWluZm8vQlVJTERfSU5GTz0vJyAke1N9L2djYy9jb25maWd1cmUiKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorfQorYWRkdGFzayBkb19wcmVjb25maWd1cmUgYWZ0ZXIgZG9fcGF0Y2gKK2RvX3ByZWNvbmZpZ3VyZVtkZXBlbmRzXSArPSAiZ251LWNvbmZpZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBhdXRvY29uZi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MGZhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYworCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtdGFyZ2V0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxNjBjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMKQEAgLTAsMCArMSwyMTQgQEAKK0dDQ01VTFRJTElCID0gIi0tZW5hYmxlLW11bHRpbGliIgorcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtc3lzcm9vdD0vIFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorICAgIC0td2l0aC1uYXRpdmUtc3lzdGVtLWhlYWRlci1kaXI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0gXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGludXhzdGRiYXNlID0gIiAtLWVuYWJsZS1jbG9jYWxlPWdudSIKKworIyBsaWJjYzEgcmVxdXJlcyBnY2NfY3Zfb2JqZHVtcCB3aGVuIGNyb3NzIGJ1aWxkLCBidXQgZ2NjX2N2X29iamR1bXAgaXMKKyMgc2V0IGluIHN1YmRpciBnY2MsIHNvIHN1YmRpciBsaWJjYzEgY2FuJ3QgdXNlIGl0LCBleHBvcnQgaXQgaGVyZSB0bworIyBmaXggdGhlIHByb2JsZW0uCitleHBvcnQgZ2NjX2N2X29iamR1bXAgPSAiJHtUQVJHRVRfUFJFRklYfW9iamR1bXAiCisKK0VYVFJBX09FQ09ORl9HQ0NfRkxPQVQgPSAiJHtAZ2V0X2djY19mbG9hdF9zZXR0aW5nKGJiLCBkKX0iCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfSAke1BOfS1wbHVnaW5zICR7UE59LXN5bWxpbmtzIFwKKyAgICBnKysgZysrLXN5bWxpbmtzIFwKKyAgICBjcHAgY3BwLXN5bWxpbmtzIFwKKyAgICBnNzcgZzc3LXN5bWxpbmtzIFwKKyAgICBnZm9ydHJhbiBnZm9ydHJhbi1zeW1saW5rcyBcCisgICAgZ2NvdiBnY292LXN5bWxpbmtzIFwKKyAgICAke1BOfS1kb2MgXAorICAgICR7UE59LWRldiBcCisgICAgJHtQTn0tZGJnIFwKKyIKKworRklMRVNfJHtQTn0gPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2NjKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NvbGxlY3QyIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MqIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbHRvKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU30gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJsdG8qJHtTT0xJQlNERVZ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlN9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCBcCisiCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vLmRlYnVnLyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi8uZGVidWcvIFwKKyIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlNERVZ9IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTREVWfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vaW5jbHVkZS8gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vZ2VuZ3R5cGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2d0eXBlLnN0YXRlIFwKKyIKK0ZJTEVTXyR7UE59LXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vY2MgXAorICAgICR7YmluZGlyfS9nY2MgXAorICAgICR7YmluZGlyfS9nY2NidWcgXAorIgorCitGSUxFU18ke1BOfS1wbHVnaW5zID0gIlwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbiBcCisiCitBTExPV19FTVBUWV8ke1BOfS1wbHVnaW5zID0gIjEiCisKK0ZJTEVTX2c3NyA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nNzcgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9mNzcxIFwKKyIKK0ZJTEVTX2c3Ny1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2c3NyBcCisgICAgJHtiaW5kaXJ9L2Y3NyBcCisiCitGSUxFU19nZm9ydHJhbiA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2Y5NTEgXAorIgorRklMRVNfZ2ZvcnRyYW4tc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9nZm9ydHJhbiBcCisgICAgJHtiaW5kaXJ9L2Y5NSIKKworRklMRVNfY3BwID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWNwcCBcCisgICAgJHtiYXNlX2xpYmRpcn0vY3BwIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vY2MxIgorRklMRVNfY3BwLXN5bWxpbmtzID0gIiR7YmluZGlyfS9jcHAiCisKK0ZJTEVTX2djb3YgPSAiJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nY292IFwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdjb3YtdG9vbCBcCisiCitGSUxFU19nY292LXN5bWxpbmtzID0gIiR7YmluZGlyfS9nY292IFwKKyAgICAke2JpbmRpcn0vZ2Nvdi10b29sIFwKKyIKKworRklMRVNfZysrID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWcrKyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjMXBsdXMgXAorIgorRklMRVNfZysrLXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vYysrIFwKKyAgICAke2JpbmRpcn0vZysrIFwKKyIKKworRklMRVNfJHtQTn0tZG9jID0gIlwKKyAgICAke2luZm9kaXJ9IFwKKyAgICAke21hbmRpcn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9SRUFETUUgXAorIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsbC1ob3N0Cit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwkjIEFkZCB1bndpbmQuaCwgaXQgY29tZXMgZnJvbSBsaWJnY2Mgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBidWlsZCBhZ2FpbgorCWluc3RhbGwgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9LyR7VEFSR0VUX1NZU30vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL3Vud2luZC5oICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCSMgQ2xlYW51cCBzb21lIG9mIHRoZSAke2xpYmRpcn17LGV4ZWN9L2djYyBzdHVmZiAuLi4KKwlybSAtciAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yICR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5zdGFsbC10b29scworCXJtIC1yZiAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubGEKKwlybWRpciAke0R9JHtpbmNsdWRlZGlyfQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKworCSMgSGFjayBhcm91bmQgc3BlY3MgZmlsZSBhc3N1bXB0aW9ucworCXRlc3QgLWYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzICYmIHNlZCAtaSAtZSAnL14qY3Jvc3NfY29tcGlsZTokLyB7IG47IHMvMS8wLzsgfScgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3NwZWNzCisKKwkjIENsZWFudXAgbWFucGFnZXMuLgorCXJtIC1yZiAke0R9JHttYW5kaXJ9L21hbjcKKworCWNkICR7RH0ke2JpbmRpcn0KKworCSMgV2UgY2FyZSBhYm91dCBnKysgbm90IGMrKworCXJtIC1mICpjKysKKworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZ2NjLTx2ZXJzaW9uPiBvbmVzIGZvciB0aGlzCisJcm0gLWYgKmdjYy0/Lj8qCisKKwkjIFdlIHVzZSBsaWJpYmVydHkgZnJvbSBiaW51dGlscworCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSBsaWJpYmVydHkuYSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lIGxpYmliZXJ0eS5oIHwgeGFyZ3Mgcm0gLWYKKworCSMgTm90IHN1cmUgd2h5IHdlIGVuZCB1cCB3aXRoIHRoZXNlIGJ1dCB3ZSBkb24ndCB3YW50IHRoZW0uLi4KKwlybSAtZiAke1RBUkdFVF9QUkVGSVh9JHtUQVJHRVRfUFJFRklYfSoKKworCSMgU3ltbGlua3Mgc28gd2UgY2FuIHVzZSB0aGVzZSB0cml2aWFsbHkgb24gdGhlIHRhcmdldAorCWlmIFsgLWUgJHtUQVJHRVRfUFJFRklYfWc3NyBdOyB0aGVuCisJCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Zzc3IGc3NyB8fCB0cnVlCisJCWxuIC1zZiBnNzcgZjc3IHx8IHRydWUKKwlmaQorCWlmIFsgLWUgJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuIF07IHRoZW4KKwkJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBnZm9ydHJhbiB8fCB0cnVlCisJCWxuIC1zZiBnZm9ydHJhbiBmOTUgfHwgdHJ1ZQorCWZpCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nKysgZysrCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1nY2MgZ2NjCisJbG4gLXNmICR7VEFSR0VUX1BSRUZJWH1jcHAgY3BwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KKwlsbiAtc2YgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1jcHAgJHtEfSR7YmFzZV9saWJkaXJ9L2NwcAorCWxuIC1zZiBnKysgYysrCisJbG4gLXNmIGdjYyBjYworCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICAjCisgICAgICAgICMgVGhlZml4aW5jLnNoIHNjcmlwdCwgcnVuIG9uIHRoZSBnY2MncyBjb21waWxlIHBoYXNlLCBsb29rcyBpbnRvIHN5c3Jvb3QgaGVhZGVyCisgICAgICAgICMgZmlsZXMgYW5kIHBsYWNlcyB0aGUgbW9kaWZpZWQgZmlsZXMgaW50bworICAgICAgICAjIHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgZm9sZGVyLiBUaGlzIG1ha2VzIHRoZQorICAgICAgICAjIGJ1aWxkIG5vdCBkZXRlcm1pbmlzdGljLiBUaGUgZm9sbG93aW5nIGNvZGUgcHJ1bmVzIGFsbCB0aG9zZSBoZWFkZXJzCisgICAgICAgICMgZXhjZXB0IHRob3NlIHVuZGVyIGluY2x1ZGUtZml4ZWQvbGludXgsICpsaW1pdHMuaCBhbmQgUkVBRE1FLCB5aWVsZGluZworICAgICAgICAjIHRoZSBzYW1lIGluY2x1ZGUtZml4ZWQgZm9sZGVycyBubyBtYXR0ZXIgd2hhdCBzeXNyb290CisKKyAgICAgICAgaW5jbHVkZV9maXhlZD0iJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQiCisgICAgICAgIGZvciBmIGluICQoZmluZCAke2luY2x1ZGVfZml4ZWR9IC10eXBlIGYpOyBkbworICAgICAgICAgICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvbGludXgvKikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvKmxpbWl0cy5oKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICovaW5jbHVkZS1maXhlZC9SRUFETUUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgZmlsZSBhbmQgZGlyZWN0b3J5IGlmIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIGJiZGVidWcgMiAiUHJ1bmluZyAkZiIKKyAgICAgICAgICAgICAgICAgICAgcm0gJGYKKyAgICAgICAgICAgICAgICAgICAgZmluZCAkKGRpcm5hbWUgJGYpIC1tYXhkZXB0aCAwIC1lbXB0eSAtZXhlYyBybWRpciB7fSBcOworICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorfQorCisjIEluc3RhbGxpbmcgL3Vzci9saWIvZ2NjLyogbWVhbnMgd2UnZCBoYXZlIHR3byBjb3BpZXMsIG9uZSBmcm9tIGdjYy1jcm9zcworIyBhbmQgb25lIGZyb20gaGVyZS4gVGhlc2UgY2FuIGNvbmZ1c2UgZ2NjIGNyb3NzIHdoZXJlIGluY2x1ZGVzIHVzZSAjaW5jbHVkZV9uZXh0CisjIGFuZCBidWlsZHMgdHJhY2sgZmlsZSBkZXBlbmRlbmNpZXMgKGUuZy4gcGVybCBhbmQgaXRzIG1ha2VkZXBlbmRzIGNvZGUpLgorIyBGb3IgZGV0ZXJtaW5pc20gd2UgZG9uJ3QgaW5zdGFsbCB0aGlzIGV2ZXIgYW5kIHJlbHkgb24gdGhlIGNvcHkgZnJvbSBnY2MtY3Jvc3MuCisjIFtZT0NUTyAjNzI4N10KK3N5c3Jvb3Rfc3RhZ2VfZGlyc19hcHBlbmQgKCkgeworCXJtIC1yZiAkdG8ke2xpYmRpcn0vZ2NjCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2MThkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGJhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjkuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKKyNTWVNURU1IRUFERVJTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfaW5jbHVkZWRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0iCisjU1lTVEVNTElCU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2Jhc2VfbGliZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfS8iCisjU1lTVEVNTElCUzFfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9saWJkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9LyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTUyM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY181LjIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy10YXJnZXQuaW5jCisKKyMgQnVpbGRpbmcgd2l0aCB0aHVtYiBlbmFibGVkIG9uIGFybXY0dCBmYWlscyB3aXRoCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0Mzg6KC50ZXh0LnVubGlrZWx5KzB4MmZhKTogcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX0FSTV9USE1fQ0FMTCBhZ2FpbnN0IHN5bWJvbCBgZmFuY3lfYWJvcnQoY2hhciBjb25zdCosIGludCwgY2hhciBjb25zdCopJyBkZWZpbmVkIGluIC5nbHVlXzcgc2VjdGlvbiBpbiBsaW5rZXIgc3R1YnMKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQ0MjooLnRleHQudW5saWtlbHkrMHgzMTgpOiBhZGRpdGlvbmFsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0CitBUk1fSU5TVFJVQ1RJT05fU0VUX2FybXY0ID0gImFybSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorCSMgYnJva2VuIGxpYnRvb2wgaGVyZQorCXNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7U30vbGliY2MxL2NvbmZpZ3VyZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOWVhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTQ0IEBACitCUE4gPSAibGliZ2NjIgorCityZXF1aXJlIGdjYy1zaGFyZWQtc291cmNlLmluYworCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19jb25maWd1cmUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9ICR7RH0ke2xpYmRpcn0KKwloYXJkbGlua2RpciAke1NUQUdJTkdfSU5DRElSX05BVElWRX0vJHtMSUJHQ0NCVUlMRFRSRUVOQU1FfSR0YXJnZXQvICR7Qn0KKwlta2RpciAtcCAke0J9LyR7QlBOfQorCW1rZGlyIC1wICR7Qn0vJHRhcmdldC8ke0JQTn0vCisJY2QgJHtCfS8ke0JQTn0KKwljaG1vZCBhK3ggJHtTfS8ke0JQTn0vY29uZmlndXJlCisJJHtTfS8ke0JQTn0vY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHtCUE59CisJb2VfcnVubWFrZSBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8ke0JQTn0vCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHtCUE59CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC8ke0JQTn0vIGluc3RhbGwKKworCSMgTW92ZSBsaWJnY2NfcyBpbnRvIC9saWIKKwlta2RpciAtcCAke0R9JHtiYXNlX2xpYmRpcn0KKwlpZiBbIC1mICR7RH0ke2xpYmRpcn0vbm9mL2xpYmdjY19zLnNvIF07IHRoZW4KKwkJbXYgJHtEfSR7bGliZGlyfS9ub2YvbGliZ2NjKiAke0R9JHtiYXNlX2xpYmRpcn0KKwllbHNlCisJCW12ICR7RH0ke2xpYmRpcn0vbGliZ2NjKiAke0R9JHtiYXNlX2xpYmRpcn0gfHwgdHJ1ZQorCWZpCisKKwkjIGluc3RhbGwgdGhlIHJ1bnRpbWUgaW4gL3Vzci9saWIvIG5vdCBpbiAvdXNyL2xpYi9nY2Mgb24gdGFyZ2V0CisJIyBzbyB0aGF0IGNyb3NzLWdjYyBjYW4gZmluZCBpdCBpbiB0aGUgc3lzcm9vdAorCisJbXYgJHtEfSR7bGliZGlyfS9nY2MvKiAke0R9JHtsaWJkaXJ9CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ2NjLworCSMgdW53aW5kLmggaXMgaW5zdGFsbGVkIGhlcmUgd2hpY2ggaXMgc2hpcHBlZCBpbiBnY2MtY3Jvc3MKKwkjIGFzIHdlbGwgYXMgdGFyZ2V0IGdjYyBhbmQgdGhleSBhcmUgaWRlbnRpY2FsIHNvIHdlIGRvbnQKKwkjIHNoaXAgb25lIHdpdGggbGliZ2NjIGhlcmUKKwlybSAtcmYgJHtEfSR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLWJhcmVtZXRhbCAoKSB7CisJcm1kaXIgJHtEfSR7YmFzZV9saWJkaXJ9Cit9CisKK1JERVBFTkRTXyR7UE59LWRldl9saWJjLWJhcmVtZXRhbCA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCithZGR0YXNrIG11bHRpbGliX2luc3RhbGwgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CisjIHRoaXMgbWFrZXMgbXVsdGlsaWIgZ2NjIGZpbGVzIGZpbmRhYmxlIGZvciB0YXJnZXQgZ2NjCisjIGUuZy4KKyMgICAgL3Vzci9saWIvaTU4Ni1wb2t5bWxsaWIzMi1saW51eC80LjcvCisjIGJ5IGNyZWF0aW5nIHRoaXMgc3ltbGluayB0byBpdAorIyAgICAvdXNyL2xpYjY0L3g4Nl82NC1wb2t5LWxpbnV4LzQuNy8zMgorCitmYWtlcm9vdCBweXRob24gZG9fbXVsdGlsaWJfaW5zdGFsbCgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpCisgICAgaWYgbm90IG11bHRpbGlicyBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBiaW52ID0gZC5nZXRWYXIoJ0JJTlYnLCBUcnVlKQorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgIGlmICgnJXNsaWJnY2MnICUgbWxwcmVmaXgpICE9IGQuZ2V0VmFyKCdQTicsIFRydWUpOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG1scHJlZml4OgorICAgICAgICBvcmlnX3R1bmUgPSBkLmdldFZhcignREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwnLCBUcnVlKQorICAgICAgICBvcmlnX3R1bmVfcGFyYW1zID0gZ2V0X3R1bmVfcGFyYW1ldGVycyhvcmlnX3R1bmUsIGQpCisgICAgICAgIG9yaWdfdHVuZV9iYXNlbGliID0gb3JpZ190dW5lX3BhcmFtc1snYmFzZWxpYiddCisgICAgICAgIG9yaWdfdHVuZV9iaXRuZXNzID0gb3JpZ190dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisgICAgICAgIGlmIG5vdCBvcmlnX3R1bmVfYml0bmVzczoKKyAgICAgICAgICAgIG9yaWdfdHVuZV9iaXRuZXNzID0gJzMyJworCisgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgb3JpZ190dW5lX2Jhc2VsaWIgKyAnLycgKyBcCisgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX1NZU19NVUxUSUxJQl9PUklHSU5BTCcsIFRydWUpICsgJy8nICsgYmludiArICcvJworCisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycgKyBvcmlnX3R1bmVfYml0bmVzcworCisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKKyAgICAgICAgcmV0dXJuCisKKworICAgIGZvciBtbCBpbiBtdWx0aWxpYnMuc3BsaXQoKToKKyAgICAgICAgdHVuZSA9IGQuZ2V0VmFyKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJyArIG1sLCBUcnVlKQorICAgICAgICBpZiBub3QgdHVuZToKKyAgICAgICAgICAgIGJiLndhcm4oJ0RFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcyBpcyBub3QgZGVmaW5lZC4gU2tpcHBpbmcuLi4nICUgbWwpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHR1bmVfcGFyYW1ldGVycyA9IGdldF90dW5lX3BhcmFtZXRlcnModHVuZSwgZCkKKyAgICAgICAgdHVuZV9iYXNlbGliID0gdHVuZV9wYXJhbWV0ZXJzWydiYXNlbGliJ10KKyAgICAgICAgaWYgbm90IHR1bmVfYmFzZWxpYjoKKyAgICAgICAgICAgIGJiLndhcm4oIlR1bmUgJXMgZG9lc24ndCBoYXZlIGEgYmFzZWxpYiBzZXQuIFNraXBwaW5nLi4uIiAlIHR1bmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHR1bmVfYXJjaCA9IHR1bmVfcGFyYW1ldGVyc1snYXJjaCddCisgICAgICAgIHR1bmVfYml0bmVzcyA9IHR1bmVfYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKyAgICAgICAgaWYgbm90IHR1bmVfYml0bmVzczoKKyAgICAgICAgICAgIHR1bmVfYml0bmVzcyA9ICczMicgIyAvbGliID0+IDMyYml0IGxpYgorCisgICAgICAgIHNyYyA9ICcuLi8uLi8uLi8nICsgdHVuZV9iYXNlbGliICsgJy8nICsgXAorICAgICAgICAgICAgdHVuZV9hcmNoICsgZC5nZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCBUcnVlKSArICdtbCcgKyBtbCArIFwKKyAgICAgICAgICAgICctJyArIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycKKworICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIFwKKyAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nICsgdHVuZV9iaXRuZXNzCisKKyAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgb3MudW5saW5rKGRlc3QpCisgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorfQorCitkZWYgZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpOgorICAgIHZlbmRvcm9zID0gZC5leHBhbmQoJyR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9JykKKyAgICBmb3Igc3VmZml4IGluIFtkLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSksIGQuZ2V0VmFyKCdMSUJDRVhURU5TSU9OJywgVHJ1ZSldOgorICAgICAgICBpZiBzdWZmaXggYW5kIHZlbmRvcm9zLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICB2ZW5kb3JvcyA9IHZlbmRvcm9zWzotbGVuKHN1ZmZpeCldCisgICAgcmV0dXJuIHZlbmRvcm9zCisKK09SSUdfVEFSR0VUX1ZFTkRPUk9TIDo9ICIke0BnZXRfb3JpZ2luYWxfdmVuZG9yb3MoZCl9IgorQkFTRVRBUkdFVF9TWVMgPSAiJHtUQVJHRVRfQVJDSH0ke09SSUdfVEFSR0VUX1ZFTkRPUk9TfSIKKworYWRkdGFzayBleHRyYV9zeW1saW5rcyBhZnRlciBkb19tdWx0aWxpYl9pbnN0YWxsIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKK2Zha2Vyb290IHB5dGhvbiBkb19leHRyYV9zeW1saW5rcygpIHsKKyAgICB0YXJnZXRzeXMgPSBkLmdldFZhcignQkFTRVRBUkdFVF9TWVMnLCBUcnVlKQorCisgICAgaWYgdGFyZ2V0c3lzICE9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSk6CisgICAgICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpICsgJy8nICsgdGFyZ2V0c3lzCisgICAgICAgIHNyYyA9IGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cyhkZXN0KSBhbmQgb3MucGF0aC5sZXhpc3RzKGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkpOgorICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTJmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGxpYmdjYy1jb21tb24uaW5jCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQQVRIX3ByZXBlbmQgPSAiJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LiR7U1RBR0lOR0NDfToiCisKK1BBQ0tBR0VTID0gIiIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2hhcmVkIgorCitMSUJHQ0NCVUlMRFRSRUVOQU1FID0gImdjYy1idWlsZC1pbnRlcm5hbC1pbml0aWFsLSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMjUzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyNTNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5YWRiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLmluYwpAQCAtMCwwICsxLDQxIEBACityZXF1aXJlIGxpYmdjYy1jb21tb24uaW5jCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKyIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59IFwKKyAgICAke1BOfS1kZXYgXAorICAgICR7UE59LWRiZyBcCisiCisKKyMgQWxsIGxpYmdjYyBzb3VyY2UgaXMgbWFya2VkIHdpdGggdGhlIGV4Y2VwdGlvbi4KKyMKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFXyR7UE59LWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9L2xpYmdjYyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtiYXNlX2xpYmRpcn0vbGliZ2NjKi5zbyBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qY3J0KiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS82NCBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8zMiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS94MzIgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbjMyIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdjYyogXAorICAgICR7QGJhc2VfY29uZGl0aW9uYWwoJ0JBU0VUQVJHRVRfU1lTJywgJyR7VEFSR0VUX1NZU30nLCAnJywgJyR7bGliZGlyfS8ke0JBU0VUQVJHRVRfU1lTfScsIGQpfSBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnY292LmEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9Ly5kZWJ1Zy8iCisKK0xJQkdDQ0JVSUxEVFJFRU5BTUUgPSAiZ2NjLWJ1aWxkLWludGVybmFsLSIKKworZG9fcGFja2FnZVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCisKK0lOU0FORV9TS0lQXyR7UE59LWRldiA9ICJzdGF0aWNkZXYiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyODQzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jCkBAIC0wLDAgKzEsNzQgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworZG9fY29uZmlndXJlICgpIHsKKwltdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisKKwllY2hvICJDb25maWd1cmluZyBsaWJnZm9ydHJhbiIKKwlybSAtcmYgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW1rZGlyIC1wICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwljZCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJY2htb2QgYSt4ICR7U30vbGliZ2ZvcnRyYW4vY29uZmlndXJlCisJJHtTfS9saWJnZm9ydHJhbi9jb25maWd1cmUgJHtDT05GSUdVUkVPUFRTfSAke0VYVFJBX09FQ09ORn0KKwkjIEVhc2llc3Qgd2F5IHRvIHN0b3AgYmFkIFJQQVRIcyBnZXR0aW5nIGludG8gdGhlIGxpYnJhcnkgc2luY2Ugd2UgaGF2ZSBhCisJIyBicm9rZW4gbGlidG9vbCBoZXJlCisJc2VkIC1pIC1lICdzL2hhcmRjb2RlX2ludG9fbGlicz15ZXMvaGFyZGNvZGVfaW50b19saWJzPW5vLycgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuL2xpYnRvb2wKK30KKworZG9fY29tcGlsZSAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJY2QgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCit9CisKK2RvX2luc3RhbGwgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLyBpbnN0YWxsCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUgXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKwlmaQorCWlmIFsgLWQgJHtEfSR7aW5mb2Rpcn0gXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtpbmZvZGlyfQorCWZpCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgPSAiZ2NjLXJ1bnRpbWUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0tZGJnIFwKKyAgICBsaWJnZm9ydHJhbiBcCisgICAgbGliZ2ZvcnRyYW4tZGV2IFwKKyAgICBsaWJnZm9ydHJhbi1zdGF0aWNkZXYgXAorIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLnNvLioiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbiouc28gXAorICAgICR7bGliZGlyfS9saWJnZm9ydHJhbi5zcGVjIFwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4ubGEgXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmdmb3J0cmFuYmVnaW4uKiBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliY2FmX3NpbmdsZSogXAorIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJnZm9ydHJhbi5hIgorCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmdmb3J0cmFuLWRldiA9ICJzdGF0aWNkZXYiCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYzpkb19wYWNrYWdlZGF0YSIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBmID0gZC5nZXRWYXIoIkZPUlRSQU4iLCBUcnVlKQorICAgIGlmICJmb3J0cmFuIiBub3QgaW4gZjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImxpYmdmb3J0cmFuIG5lZWRzIGZvcnRyYW4gc3VwcG9ydCB0byBiZSBlbmFibGVkIGluIHRoZSBjb21waWxlciIpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGQ4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnZm9ydHJhbi5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZDhiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdmb3J0cmFuLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhOTVhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLTcuOS4xLmluYwpAQCAtMCwwICsxLDkgQEAKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MyAmIExHUEx2MiAmIExHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQkgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCIKKworU1JDX1VSSVttZDVzdW1dID0gImYzYjk3ZGU5MTlhOWRiYTg0NDkwYjJlMDc2ZWM0Y2IwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ5OTRhZDk4NjcyNmFjNDEyOGE2ZjFiZDgwMjBjZDY3MmU5YTkyYWE3NmI4MDczNjU2M2VmOTkyOTkyNzY0ZWYiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmJhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYi8iCitMSUNFTlNFID0gIkdQTHYzKyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImV4cGF0IHpsaWIgbmN1cnNlcyByZWFkbGluZSAke0xUVE5HVVNUfSIKKworTFRUTkdVU1QgPSAibHR0bmctdXN0IgorTFRUTkdVU1RfYWFyY2g2NCA9ICIiCitMVFROR1VTVF9saWJjLXVjbGliYyA9ICIiCitMVFROR1VTVF9taXBzID0gIiIKK0xUVE5HVVNUX21pcHNlbCA9ICIiCitMVFROR1VTVF9taXBzNjQgPSAiIgorTFRUTkdVU1RfbWlwczY0ZWwgPSAiIgorTFRUTkdVU1RfbWlwczY0bjMyID0gIiIKK0xUVE5HVVNUX21pcHM2NGVsbjMyID0gIiIKK0xUVE5HVVNUX3NoNCA9ICIiCitMVFROR1VTVF9saWJjLW11c2wgPSAiIgorCitJTkNfUFIgPSAicjAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKwkJZmlsZTovL0NPUFlJTkcuTElCO21kNT05ZjYwNGQ4YTRmOGU3NGY0ZjUxNDA4NDVhMjFiNjY3NCBcCisJCWZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQlmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYi9nZGItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCitleHBvcnQgQ0NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0N9IgorZXhwb3J0IENYWF9GT1JfQlVJTEQgPSAiJHtCVUlMRF9DWFh9IgorZXhwb3J0IENQUF9GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFB9IgorZXhwb3J0IENGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IENYWEZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NYWEZMQUdTfSIKK2V4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFBGTEFHU30iCisKK0IgPSAiJHtXT1JLRElSfS9idWlsZC0ke1RBUkdFVF9TWVN9IgorCitFWFRSQV9PRU1BS0UgPSAiJ1NVQkRJUlM9aW50bCBtbWFsbG9jIGxpYmliZXJ0eSBvcGNvZGVzIGJmZCBzaW0gZ2RiIGV0YyB1dGlscyciCisKK0VYUEFUID0gIi0td2l0aC1leHBhdCAtLXdpdGgtbGliZXhwYXQtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0iCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ2RidGsgLS1kaXNhYmxlLXR1aSAtLWRpc2FibGUteCAtLWRpc2FibGUtd2Vycm9yIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vyc2VzIC0tZGlzYWJsZS1tdWx0aWxpYiAtLXdpdGgtc3lzdGVtLXJlYWRsaW5lIC0tZGlzYWJsZS1zaW0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1sem1hIC0td2l0aG91dC1ndWlsZSBcCisgICAgICAgICAgICAgICAgJHtHREJQUk9QUkVGSVh9ICR7RVhQQVR9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ211bHRpYXJjaCcsICctLWVuYWJsZS02NC1iaXQtYmZkJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICIKKworR0RCUFJPUFJFRklYID0gIi0tcHJvZ3JhbS1wcmVmaXg9JyciCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJIyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIHRoZSBhdXRvY29uZi9hdXRvbWFrZS9hY2xvY2FsL2F1dG9oZWFkZXIKKwkjIGNhbGxzIGZvciBub3cKKwkoY2QgJHtTfSAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgaW4gcnVubmluZyBnbnUtY29uZmlnaXplIgorCW9lX3J1bmNvbmYKK30KKworIyB3ZSBkb24ndCB3YW50IGdkYiB0byBwcm92aWRlIGJmZC9pYmVydHkvb3Bjb2Rlcywgd2hpY2ggaW5zdGVhZCB3aWxsIG92ZXJyaWRlIHRoZQorIyByaWdodCBiaXRzIGluc3RhbGxlZCBieSBiaW51dGlscy4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9CisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9CisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2xvY2FsZQorfQorCitSUkVDT01NRU5EU19nZGJfYXBwZW5kX2xpbnV4ID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2RiX2FwcGVuZF9saW51eC1nbnVlYWJpID0gIiBnbGliYy10aHJlYWQtZGIgIgorUlJFQ09NTUVORFNfZ2Ric2VydmVyX2FwcGVuZF9saW51eCA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDYwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbi5pbmMKQEAgLTAsMCArMSwzOCBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgoraW5oZXJpdCBweXRob24tZGlyCisKK1NVTU1BUlkgPSAiR05VIGRlYnVnZ2VyIChjcm9zcy1jYW5hZGlhbiBnZGIgZm9yICR7VEFSR0VUX0FSQ0h9IHRhcmdldCkiCitQTiA9ICJnZGItY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJnZGIiCisKK0RFUEVORFMgPSAibmF0aXZlc2RrLW5jdXJzZXMgbmF0aXZlc2RrLWV4cGF0IG5hdGl2ZXNkay1nZXR0ZXh0IG5hdGl2ZXNkay1yZWFkbGluZSBuYXRpdmVzZGstcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gKz0gIm5hdGl2ZXNkay1weXRob24tY29yZSBuYXRpdmVzZGstcHl0aG9uLWxhbmcgbmF0aXZlc2RrLXB5dGhvbi1yZSBcCisgICAgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXB5dGhvbi1jb2RlY3MgbmF0aXZlc2RrLXB5dGhvbi1uZXRjbGllbnQiCisKK0dEQlBST1BSRUZJWCA9ICItLXByb2dyYW0tcHJlZml4PScke1RBUkdFVF9QUkVGSVh9JyIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS13aXRoLXB5dGhvbj0ke1dPUktESVJ9L3B5dGhvbiIKKworU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtTVEFHSU5HX0RBVEFESVJ9L2dkYiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CitjYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKKyMhIC9iaW4vc2gKK2Nhc2UgIlwkMiIgaW4KKyAgICAgICAgLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKKyAgICAgICAgLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkgZWNobyAiJHtleGVjX3ByZWZpeH0iIDs7CisgICAgICAgICopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKyAgICAgICAgY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KK30KKworIyB3ZSBkb24ndCB3YW50IGdkYiB0byBwcm92aWRlIGJmZC9pYmVydHkvb3Bjb2Rlcywgd2hpY2ggaW5zdGVhZCB3aWxsIG92ZXJyaWRlIHRoZQorIyByaWdodCBiaXRzIGluc3RhbGxlZCBieSBiaW51dGlscy4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtleGVjX3ByZWZpeH0vbGliCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy1jYW5hZGlhbl83LjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDEwMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIGdkYi1jb21tb24uaW5jCityZXF1aXJlIGdkYi1jcm9zcy1jYW5hZGlhbi5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zcy5pbmMKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSBnZGItY29tbW9uLmluYworCitERVBFTkRTID0gImV4cGF0LW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgcHl0aG9uLW5hdGl2ZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiIKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGV4cG9ydCBCVUlMRF9TWVM9IiR7QlVJTERfU1lTfSIKKyAgICBleHBvcnQgSE9TVF9TWVM9IiR7SE9TVF9TWVN9IgorICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0iJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgorICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0iJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IgorfQorCisjRVhUUkFfT0VNQUtFICs9ICJMREZMQUdTPScke0JVSUxEX0xERkxBR1N9JyIKKworR0RCUFJPUFJFRklYID0gIiIKKworUE4gPSAiZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorQlBOID0gImdkYiIKKworaW5oZXJpdCBjcm9zcworaW5oZXJpdCBnZXR0ZXh0CisKK2RhdGFkaXIgLj0gIi9nZGItJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzXzcuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZ2RiLWNyb3NzLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGMwMjEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgZ2RiLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaCBcCisgICAgICAgICAgICIKKyNMREZMQUdTX2FwcGVuZCA9ICIgLXMiCisjZXhwb3J0IENGTEFHU19hcHBlbmQ9IiAtTCR7U1RBR0lOR19MSUJESVJ9IgorCisjIGNyb3NzLWNhbmFkaWFuIG11c3Qgbm90IHNlZSB0aGlzCitQQUNLQUdFUyA9KyAiZ2Ric2VydmVyIgorRklMRVNfZ2Ric2VydmVyID0gIiR7YmluZGlyfS9nZGJzZXJ2ZXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDEtbWFrZS1tYW4taW5zdGFsbC1yZWxhdGl2ZS10by1ERVNURElSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OTZjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDEyYjA1MDY5NTE0NjBjM2NjMzdkNzc1NDc4ZDAyNGRiM2Y5NWU5ZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI3OjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBtYWtlIG1hbiBpbnN0YWxsIHJlbGF0aXZlIHRvIERFU1RESVIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzaW0vY29tbW9uL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiBiL3NpbS9jb21tb24vTWFrZWZpbGUuaW4KK2luZGV4IGQ0OWE5M2IuLjIxMjFjNDYgMTAwNjQ0CistLS0gYS9zaW0vY29tbW9uL01ha2VmaWxlLmluCisrKysgYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCitAQCAtMzUsNyArMzUsNyBAQCB0b29sZGlyID0gJChsaWJkaXIpLyQodGFyZ2V0X2FsaWFzKQorIGRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorIGRhdGFkaXIgPSBAZGF0YWRpckAKKyBtYW5kaXIgPSBAbWFuZGlyQAorLW1hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorK21hbjFkaXIgPSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyBpbmZvZGlyID0gQGluZm9kaXJACisgaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjYjQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDItQ2hhbmdlLW9yZGVyLW9mLUNGTEFHUy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI2MmNjYzRmZGIyYTNkZjBmMTZjNjFhODA3MDQ2OTY0YWU3NzI5YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjI5OjIzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBDaGFuZ2Ugb3JkZXIgb2YgQ0ZMQUdTCisKK0xldHMgdXMgb3ZlcnJpZGUgV2Vycm9yIGlmIG5lZWQgYmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4gYi9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluCitpbmRleCAxZWQyZWM4Li4wY2VmOTViIDEwMDY0NAorLS0tIGEvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorKysrIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgorQEAgLTEzMSwxMCArMTMxLDEwIEBAIENGTEFHUyA9IEBDRkxBR1NACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgCisgIyBJTlRFUk5BTF9DRkxBR1MgaXMgdGhlIGFnZ3JlZ2F0ZSBvZiBhbGwgb3RoZXIgKkNGTEFHUyBtYWNyb3MuCistSU5URVJOQUxfQ0ZMQUdTX0JBU0UgPSAgJHtDRkxBR1N9ICR7R0xPQkFMX0NGTEFHU30gXAorK0lOVEVSTkFMX0NGTEFHU19CQVNFID0gJHtHTE9CQUxfQ0ZMQUdTfSBcCisgCSR7UFJPRklMRV9DRkxBR1N9ICR7SU5DTFVERV9DRkxBR1N9ICR7Q1BQRkxBR1N9CisgSU5URVJOQUxfV0FSTl9DRkxBR1MgPSAgJHtJTlRFUk5BTF9DRkxBR1NfQkFTRX0gJChXQVJOX0NGTEFHUykKKy1JTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAtREdEQlNFUlZFUgorK0lOVEVSTkFMX0NGTEFHUyA9ICAke0lOVEVSTkFMX1dBUk5fQ0ZMQUdTfSAkKFdFUlJPUl9DRkxBR1MpICR7Q0ZMQUdTfSAtREdEQlNFUlZFUgorIAorICMgTERGTEFHUyBpcyBzcGVjaWZpY2FsbHkgcmVzZXJ2ZWQgZm9yIHNldHRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgIyB3aGVuIHJ1bm5pbmcgbWFrZS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2UyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2gKQEAgLTAsMCArMSw5MjEgQEAKK0Zyb20gNDA3Y2IxM2NmYjcwNjk3ZjQ1ZGZiNzYxMzA0ZTAwNWUxZWNiZDBlOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDI6MzE6MTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIEFkZCBzdXBwb3J0IGZvciBSZW5lc2FzIFNIIChzaDQpIGFyY2hpdGVjdHVyZS4KKworZ2RiICg3LjQtMX5jdnMyMDExMTExNy4yKSBleHBlcmltZW50YWw7IHVyZ2VuY3k9bG93CisgLgorICAgKiBBZGQgUmVuZXNhcyBTSCAoc2g0KSBzdXBwb3J0IChDbG9zZXM6ICM1NzYyNDIpCisgICAgIC0gVGhhbmtzIE5vYnVoaXJvIEl3YW1hdHN1LCBUYWthc2hpIFlvc2hpaS4KK0F1dGhvcjogSGVjdG9yIE9yb24gPHp1bWJpQGRlYmlhbi5vcmc+CitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU3NjI0MgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnZGIvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGdkYi9jb25maWd1cmUuaG9zdCAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgZ2RiL3NoLWxpbnV4LXRkZXAuYyAgICAgICAgICAgICAgICAgIHwgNTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ2RiL3NoLXRkZXAuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU0ICsrLS0KKyBnZGIvc2gtdGRlcC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDkgKysrKworIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCB8ICAgNSArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYyAgICAgICAgIHwgICAzICstCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMgICAgIHwgICAzICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyAgICAgfCAgIDQgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgICAgICB8ICAgMyArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgICAgIHwgICA0ICsKKyAxMSBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvTWFrZWZpbGUuaW4gYi9nZGIvTWFrZWZpbGUuaW4KK2luZGV4IDc5Mzc4MDEuLjYzYmFmODEgMTAwNjQ0CistLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrKyBiL2dkYi9NYWtlZmlsZS5pbgorQEAgLTE3MDcsNiArMTcwNyw3IEBAIEFMTERFUEZJTEVTID0gXAorIAlzY29yZS10ZGVwLmMgXAorIAlzZXItZ28zMi5jIHNlci1waXBlLmMgc2VyLXRjcC5jIHNlci1taW5ndy5jIFwKKyAJc2gtdGRlcC5jIHNoNjQtdGRlcC5jIHNobmJzZC10ZGVwLmMgc2huYnNkLW5hdC5jIFwKKysJc2gtbGludXgtdGRlcC5jIHNoLWxpbnV4LW5hdC5jIFwKKyAJc29sMi10ZGVwLmMgXAorIAlzb2xpYi1zdnI0LmMgXAorIAlzcGFyYy1saW51eC1uYXQuYyBzcGFyYy1saW51eC10ZGVwLmMgXAorZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUuaG9zdCBiL2dkYi9jb25maWd1cmUuaG9zdAoraW5kZXggZDA3YmU0Yi4uYjYzOTFjNSAxMDA2NDQKKy0tLSBhL2dkYi9jb25maWd1cmUuaG9zdAorKysrIGIvZ2RiL2NvbmZpZ3VyZS5ob3N0CitAQCAtMTUwLDYgKzE1MCw3IEBAIHBvd2VycGMqLSotbGludXgqKQlnZGJfaG9zdD1saW51eCA7OworIAorIHMzOTAqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKKyAKKytzaCotKi1saW51eCopCQlnZGJfaG9zdD1saW51eCA7OworIHNoKi0qLW5ldGJzZGVsZiogfCBzaCotKi1rbmV0YnNkKi1nbnUpCisgCQkJZ2RiX2hvc3Q9bmJzZCA7OworIHNoKi0qLW9wZW5ic2QqKQkJZ2RiX2hvc3Q9bmJzZCA7OworZGlmZiAtLWdpdCBhL2dkYi9zaC1saW51eC10ZGVwLmMgYi9nZGIvc2gtbGludXgtdGRlcC5jCitpbmRleCAyZmYyZWU4Li4xYTExMjYyIDEwMDY0NAorLS0tIGEvZ2RiL3NoLWxpbnV4LXRkZXAuYworKysrIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYworQEAgLTE4LDE0ICsxOCwzNyBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorKyNpbmNsdWRlICJnZGJjb3JlLmgiCisrI2luY2x1ZGUgImZyYW1lLmgiCisrI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKKysjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCisrI2luY2x1ZGUgImR3YXJmMi1mcmFtZS5oIgorKyNpbmNsdWRlICJ2YWx1ZS5oIgorKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorKyNpbmNsdWRlICJpbmZlcmlvci5oIgorICNpbmNsdWRlICJvc2FiaS5oIgorIAorKyNpbmNsdWRlICJyZWdncm91cHMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgorICNpbmNsdWRlICJzb2xpYi1zdnI0LmgiCisgI2luY2x1ZGUgInN5bXRhYi5oIgorKyNpbmNsdWRlICJnZGJfc3RyaW5nLmgiCisrI2luY2x1ZGUgImNvbW1hbmQuaCIKKysjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgorIAorICNpbmNsdWRlICJ0cmFkLWZyYW1lLmgiCisgI2luY2x1ZGUgInRyYW1wLWZyYW1lLmgiCisgCisrI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorKworKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisrCisrI2luY2x1ZGUgInJlZ3NldC5oIgorICNpbmNsdWRlICJnbGliYy10ZGVwLmgiCisgI2luY2x1ZGUgInNoLXRkZXAuaCIKKyAjaW5jbHVkZSAibGludXgtdGRlcC5oIgorQEAgLTE4MCw5ICsyMDMsNTA1IEBAIHN0YXRpYyBzdHJ1Y3QgdHJhbXBfZnJhbWUgc2hfbGludXhfcnRfc2lncmV0dXJuX3RyYW1wX2ZyYW1lID0geworICAgc2hfbGludXhfcnRfc2lncmV0dXJuX2luaXQKKyB9OworIAorKy8qIFJlY29nbml6aW5nIHNpZ25hbCBoYW5kbGVyIGZyYW1lcy4gICovCisrCisrLyogR05VL0xpbnV4IGhhcyB0d28gZmxhdm9ycyBvZiBzaWduYWxzLiAgTm9ybWFsIHNpZ25hbCBoYW5kbGVycywgYW5kCisrICAgInJlYWx0aW1lIiAoUlQpIHNpZ25hbHMuICBUaGUgUlQgc2lnbmFscyBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsCisrICAgaW5mb3JtYXRpb24gdG8gdGhlIHNpZ25hbCBoYW5kbGVyIGlmIHRoZSBTQV9TSUdJTkZPIGZsYWcgaXMgc2V0CisrICAgd2hlbiBlc3RhYmxpc2hpbmcgYSBzaWduYWwgaGFuZGxlciB1c2luZyBgc2lnYWN0aW9uJy4gIEl0IGlzIG5vdAorKyAgIHVubGlrZWx5IHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIEdOVS9MaW51eCB3aWxsIHN1cHBvcnQgU0FfU0lHSU5GTworKyAgIGZvciBub3JtYWwgc2lnbmFscyB0b28uICAqLworKworKy8qIFdoZW4gdGhlIFNIIExpbnV4IGtlcm5lbCBjYWxscyBhIHNpZ25hbCBoYW5kbGVyIGFuZCB0aGUKKysgICBTQV9SRVNUT1JFUiBmbGFnIGlzbid0IHNldCwgdGhlIHJldHVybiBhZGRyZXNzIHBvaW50cyB0byBhIGJpdCBvZgorKyAgIGNvZGUgb24gdGhlIHN0YWNrLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgdGhlIFBDIGFwcGVhcnMgdG8KKysgICBiZSB3aXRoaW4gdGhpcyBiaXQgb2YgY29kZS4KKysKKysgICBUaGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgZm9yIG5vcm1hbCBzaWduYWxzIGlzCisrICAgICAgIG1vdi53ICAxZixyMworKyAgICAgICB0cmFwYSAgIzE2CisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAxOiAud29yZCAgX19OUl9zaWdyZXR1cm4KKysgICBvciAweDkzMDUgMHhjMzEwIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgwMDc3LgorKworKyAgIENoZWNraW5nIGZvciB0aGUgY29kZSBzZXF1ZW5jZSBzaG91bGQgYmUgc29tZXdoYXQgcmVsaWFibGUsIGJlY2F1c2UKKysgICB0aGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHNpZ3JldHVybi4gIFRoaXMgaXMgdW5saWtlbHkKKysgICB0byBvY2N1ciBhbnl3aGVyZSBvdGhlciB0aGFuIGEgc2lnbmFsIHRyYW1wb2xpbmUuCisrCisrICAgSXQga2luZCBvZiBzdWNrcyB0aGF0IHdlIGhhdmUgdG8gcmVhZCBtZW1vcnkgZnJvbSB0aGUgcHJvY2VzcyBpbgorKyAgIG9yZGVyIHRvIGlkZW50aWZ5IGEgc2lnbmFsIHRyYW1wb2xpbmUsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUKKysgICBhbnkgb3RoZXIgd2F5LiAgVGhlIFBDX0lOX1NJR1RSQU1QIG1hY3JvIGluIHRtLWxpbnV4LmggYXJyYW5nZXMgdG8KKysgICBvbmx5IGNhbGwgdXMgaWYgbm8gZnVuY3Rpb24gbmFtZSBjb3VsZCBiZSBpZGVudGlmaWVkLCB3aGljaCBzaG91bGQKKysgICBiZSB0aGUgY2FzZSBzaW5jZSB0aGUgY29kZSBpcyBvbiB0aGUgc3RhY2suCisrCisrICAgRGV0ZWN0aW9uIG9mIHNpZ25hbCB0cmFtcG9saW5lcyBmb3IgaGFuZGxlcnMgdGhhdCBzZXQgdGhlCisrICAgU0FfUkVTVE9SRVIgZmxhZyBpcyBpbiBnZW5lcmFsIG5vdCBwb3NzaWJsZS4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpcworKyAgIHdoYXQgdGhlIEdOVSBDIExpYnJhcnkgaGFzIGJlZW4gZG9pbmcgZm9yIHF1aXRlIHNvbWUgdGltZSBub3cuCisrICAgSG93ZXZlciwgYXMgb2YgdmVyc2lvbiAyLjEuMiwgdGhlIEdOVSBDIExpYnJhcnkgdXNlcyBzaWduYWwKKysgICB0cmFtcG9saW5lcyAobmFtZWQgX19yZXN0b3JlIGFuZCBfX3Jlc3RvcmVfcnQpIHRoYXQgYXJlIGlkZW50aWNhbAorKyAgIHRvIHRoZSBvbmVzIHVzZWQgYnkgdGhlIGtlcm5lbC4gIFRoZXJlZm9yZSwgdGhlc2UgdHJhbXBvbGluZXMgYXJlCisrICAgc3VwcG9ydGVkIHRvby4gICovCisrCisrI2RlZmluZSBNT1ZXKG4pCSAoMHg5MzAwfCgobiktMikpCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrbiB0byBSMyAqLworKyNkZWZpbmUgVFJBUDE2CSAweGMzMTAJCQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBPUl9SMF9SMCAweDIwMGIJCQkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04wCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjEJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMglPUl9SMF9SMAkvKiBvciByMCxyMCAoaW5zZXJ0IHRvIGF2b2lkIGhhcmR3YXJlIGJ1ZykgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGludXhfc2lndHJhbXBfY29kZVtdID0KKyt7CisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMCwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04xLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIF9fTlJfc2lncmV0dXJuCisrfTsKKysKKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0xFTiAoc2l6ZW9mIGxpbnV4X3NpZ3RyYW1wX2NvZGUpCisrCisrLyogSWYgUEMgaXMgaW4gYSBzaWd0cmFtcCByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mCisrICAgdGhlIHJvdXRpbmUuICBPdGhlcndpc2UsIHJldHVybiAwLiAgKi8KKysKKytzdGF0aWMgQ09SRV9BRERSCisrc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAobmV4dF9mcmFtZSk7CisrICBnZGJfYnl0ZSBidWZbTElOVVhfU0lHVFJBTVBfTEVOXTsKKysKKysgIC8qIFdlIG9ubHkgcmVjb2duaXplIGEgc2lnbmFsIHRyYW1wb2xpbmUgaWYgUEMgaXMgYXQgdGhlIHN0YXJ0IG9mCisrICAgICBvbmUgb2YgdGhlIHRocmVlIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAorKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQorKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCisrICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQorKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KKysKKysgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9TSUdUUkFNUF9MRU4pKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChidWZbMF0gIT0gTElOVVhfU0lHVFJBTVBfSU5TTjApCisrICAgIHsKKysgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04xKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgICAgcGMgLT0gMjsKKysKKysgICAgICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfc2lndHJhbXBfY29kZSwgTElOVVhfU0lHVFJBTVBfTEVOKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiBwYzsKKyt9CisrCisrLyogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIGZvciBSVCBzaWduYWxzLiAgSGVyZSB0aGUgaW5zdHJ1Y3Rpb24KKysgICBzZXF1ZW5jZSBpcworKyAgICAgICBtb3YudyAgMWYscjMKKysgICAgICAgdHJhcGEgICMxNgorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgMTogLndvcmQgIF9fTlJfcnRfc2lncmV0dXJuCisrICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDBhZC4KKysKKysgICBUaGUgZWZmZWN0IGlzIHRvIGNhbGwgdGhlIHN5c3RlbSBjYWxsIHJ0X3NpZ3JldHVybi4gICovCisrCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMAkJTU9WVyg3KQkJLyogTW92ZSBtZW0gd29yZCBhdCBQQys3IHRvIFIzICovCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMQkJVFJBUDE2CQkvKiBTeXNjYWxsIHcvbm8gYXJncyAoTlIgaW4gUjMpICovCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMgkJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGVbXSA9CisreworKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMSwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBfX05SX3J0X3NpZ3JldHVybgorK307CisrCisrI2RlZmluZSBMSU5VWF9SVF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9ydF9zaWd0cmFtcF9jb2RlKQorKworKy8qIElmIFBDIGlzIGluIGEgUlQgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydAorKyAgIG9mIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOworKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1JUX1NJR1RSQU1QX0xFTl07CisrCisrICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgorKyAgICAgb25lIG9mIHRoZSB0d28gaW5zdHJ1Y3Rpb25zLiAgV2Ugb3B0aW1pemUgZm9yIGZpbmRpbmcgdGhlIFBDIGF0CisrICAgICB0aGUgc3RhcnQsIGFzIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGUgdHJhbXBvbGluZSBpcyBub3QgdGhlCisrICAgICBmaXJzdCBmcmFtZSBvbiB0aGUgc3RhY2suICBXZSBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKKysgICAgIFBDIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlLCB0aGVyZSB3aWxsIGJlCisrICAgICBhIGZldyB0cmFpbGluZyByZWFkYWJsZSBieXRlcyBvbiB0aGUgc3RhY2suICAqLworKworKyAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMCkKKysgICAgeworKyAgICAgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEpCisrCXJldHVybiAwOworKworKyAgICAgIHBjIC09IDI7CisrCisrICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsCisrCQkJCSAgICAgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSkKKysJcmV0dXJuIDA7CisrICAgIH0KKysKKysgIGlmIChtZW1jbXAgKGJ1ZiwgbGludXhfcnRfc2lndHJhbXBfY29kZSwgTElOVVhfUlRfU0lHVFJBTVBfTEVOKSAhPSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiBwYzsKKyt9CisrCisrLyogUmV0dXJuIHdoZXRoZXIgUEMgaXMgaW4gYSBHTlUvTGludXggc2lndHJhbXAgcm91dGluZS4gICovCisrCisrc3RhdGljIGludAorK3NoX2xpbnV4X3NpZ3RyYW1wX3AgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYyA9IGdldF9mcmFtZV9wYyAodGhpc19mcmFtZSk7CisrICBjaGFyICpuYW1lOworKworKyAgZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgJm5hbWUsIE5VTEwsIE5VTEwpOworKworKyAgLyogSWYgd2UgaGF2ZSBOQU1FLCB3ZSBjYW4gb3B0aW1pemUgdGhlIHNlYXJjaC4gIFRoZSB0cmFtcG9saW5lcyBhcmUKKysgICAgIG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0LiAgSG93ZXZlciwgdGhleSBhcmVuJ3QgZHluYW1pY2FsbHkKKysgICAgIGV4cG9ydGVkIGZyb20gdGhlIHNoYXJlZCBDIGxpYnJhcnksIHNvIHRoZSB0cmFtcG9saW5lIG1heSBhcHBlYXIgdG8KKysgICAgIGJlIHBhcnQgb2YgdGhlIHByZWNlZGluZyBmdW5jdGlvbi4gIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBzaWdhY3Rpb24sCisrICAgICBfX3NpZ2FjdGlvbiwgb3IgX19saWJjX3NpZ2FjdGlvbiAoYWxsIGFsaWFzZXMgdG8gdGhlIHNhbWUgZnVuY3Rpb24pLiAgKi8KKysgIGlmIChuYW1lID09IE5VTEwgfHwgc3Ryc3RyIChuYW1lLCAic2lnYWN0aW9uIikgIT0gTlVMTCkKKysgICAgcmV0dXJuIChzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSkgIT0gMAorKwkgICAgfHwgc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDApOworKworKyAgcmV0dXJuIChzdHJjbXAgKCJfX3Jlc3RvcmUiLCBuYW1lKSA9PSAwCisrCSAgfHwgc3RyY21wICgiX19yZXN0b3JlX3J0IiwgbmFtZSkgPT0gMCk7CisrfQorKworKy8qIE9mZnNldCB0byBzdHJ1Y3Qgc2lnY29udGV4dCBpbiB1Y29udGV4dCwgZnJvbSA8YXNtL3Vjb250ZXh0Lmg+LiAgKi8KKysjZGVmaW5lIFNIX0xJTlVYX1VDT05URVhUX1NJR0NPTlRFWFRfT0ZGU0VUIDEyCisrCisrCisrLyogQXNzdW1pbmcgTkVYVF9GUkFNRSBpcyBhIGZyYW1lIGZvbGxvd2luZyBhIEdOVS9MaW51eCBzaWd0cmFtcAorKyAgIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBzaWdjb250ZXh0IHN0cnVjdHVyZS4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3NpZ2NvbnRleHRfYWRkciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjOworKyAgQ09SRV9BRERSIHNwOworKworKyAgc3AgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7CisrCisrICBwYyA9IHNoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKTsKKysgIGlmIChwYykKKysgICAgeworKyAgICAgIHJldHVybiBzcDsKKysgICAgfQorKworKyAgcGMgPSBzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7CisrICBpZiAocGMpCisrICAgIHsKKysgICAgICBDT1JFX0FERFIgdWNvbnRleHRfYWRkcjsKKysKKysgICAgICAvKiBUaGUgc2lnY29udGV4dCBzdHJ1Y3R1cmUgaXMgcGFydCBvZiB0aGUgdXNlciBjb250ZXh0LiAgQQorKwkgcG9pbnRlciB0byB0aGUgdXNlciBjb250ZXh0IGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQKKysJIHRvIHRoZSBzaWduYWwgaGFuZGxlci4gICovCisrICAgICAgdWNvbnRleHRfYWRkciA9IGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAodGhpc19mcmFtZSwgQVJHMF9SRUdOVU0rMik7CisrICAgICAgcmV0dXJuIHVjb250ZXh0X2FkZHIgKyBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVDsKKysgICAgfQorKworKyAgZXJyb3IgKCJDb3VsZG4ndCByZWNvZ25pemUgc2lnbmFsIHRyYW1wb2xpbmUuIik7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogU2lnbmFsIHRyYW1wb2xpbmVzLiAgKi8KKytleHRlcm4gc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCk7CisrCisrc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyt7CisrICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2N1cnJlbnRfYXJjaCAoKSk7CisrICBDT1JFX0FERFIgc2lnY29udGV4dF9hZGRyOworKworKyAgaWYgKCp0aGlzX2NhY2hlKQorKyAgICByZXR1cm4gKnRoaXNfY2FjaGU7CisrCisrICBjYWNoZSA9IHNoX2FsbG9jX2ZyYW1lX2NhY2hlICgpOworKworKyAgY2FjaGUtPmJhc2UgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIFNQX1JFR05VTSk7CisrICBzaWdjb250ZXh0X2FkZHIgPSB0ZGVwLT5zaWdjb250ZXh0X2FkZHIgKHRoaXNfZnJhbWUpOworKyAgaWYgKHRkZXAtPnNjX3JlZ19vZmZzZXQpCisrICAgIHsKKysgICAgICBpbnQgaTsKKysKKysgICAgICBnZGJfYXNzZXJ0ICh0ZGVwLT5zY19udW1fcmVncyA8PSBTSF9OVU1fUkVHUyk7CisrCisrICAgICAgZm9yIChpID0gMDsgaSA8IHRkZXAtPnNjX251bV9yZWdzOyBpKyspCisrCWlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0W2ldICE9IC0xKQorKwkgIGNhY2hlLT5zYXZlZF9yZWdzW2ldID0gc2lnY29udGV4dF9hZGRyICsgdGRlcC0+c2NfcmVnX29mZnNldFtpXTsKKysgICAgfQorKworKyAgKnRoaXNfY2FjaGUgPSBjYWNoZTsKKysgIHJldHVybiBjYWNoZTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCisrCQkJICAgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCisreworKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9CisrICAgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKysKKysgICgqdGhpc19pZCkgPSBmcmFtZV9pZF9idWlsZCAoY2FjaGUtPmJhc2UgKyA2NCwgY2FjaGUtPnBjKTsKKyt9CisrCisrZXh0ZXJuIHN0cnVjdCB2YWx1ZSAqIHNoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKCk7Cisrc3RhdGljIHN0cnVjdCB2YWx1ZSAqCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisrICAgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX2NhY2hlLCBpbnQgcmVnbnVtKQorK3sKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKKysKKysgIHJldHVybiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlLCByZWdudW0pOworK30KKysKKytzdGF0aWMgaW50Cisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlciAoY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCAqc2VsZiwKKysgICAgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorKyAgICAgICAgICAgICAgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUpCisreworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpKTsKKysKKysgIC8qIFdlIHNob3VsZG4ndCBldmVuIGJvdGhlciBpZiB3ZSBkb24ndCBoYXZlIGEgc2lnY29udGV4dF9hZGRyCisrICAgICBoYW5kbGVyLiAgKi8KKysgIGlmICh0ZGVwLT5zaWdjb250ZXh0X2FkZHIgPT0gTlVMTCkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAodGRlcC0+c2lndHJhbXBfcCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgKHRoaXNfZnJhbWUpKQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCA9CisreworKyAgU0lHVFJBTVBfRlJBTUUsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV90aGlzX2lkLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfcHJldl9yZWdpc3RlciwKKysgIE5VTEwsCisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9zbmlmZmVyCisrfTsKKysKKysvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTgorKyAgIGluIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQorKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrdm9pZAorK3NoX3N1cHBseV9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmdyZWdzLCBzaXplX3QgbGVuKQorK3sKKysgIGNvbnN0IHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKHJlZ3NldC0+YXJjaCk7CisrICBjb25zdCBjaGFyICpyZWdzID0gZ3JlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCk7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgdGRlcC0+Z3JlZ3NldF9udW1fcmVnczsgaSsrKQorKyAgICB7CisrICAgICAgaWYgKChyZWdudW0gPT0gaSB8fCByZWdudW0gPT0gLTEpCisrICAgICAgJiYgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldICE9IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7CisrICAgIH0KKyt9CisrCisrLyogQ29sbGVjdCByZWdpc3RlciBSRUdOVU0gZnJvbSB0aGUgcmVnaXN0ZXIgY2FjaGUgUkVHQ0FDSEUgYW5kIHN0b3JlCisrICAgaXQgaW4gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgR1JFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCisrICAgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMgZm9yCisrICAgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3ZvaWQKKytzaF9jb2xsZWN0X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKysgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY2hhciAqcmVncyA9IGdyZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOworKworKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKKysgICAgeworKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQorKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBpLCByZWdzICsgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0W2ldKTsKKysgICAgfQorK30KKysKKysvKiBTdXBwbHkgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgRlBSRUdTIGFuZCBMRU4KKysgICBpbiB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVCB0byByZWdpc3RlciBjYWNoZQorKyAgIFJFR0NBQ0hFLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrc3RhdGljIHZvaWQKKytzaF9zdXBwbHlfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgIGludCByZWdudW0sIGNvbnN0IHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY29uc3QgY2hhciAqcmVncyA9IGZwcmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBpKzI1LCByZWdzICsgaSo0KTsKKysgICAgfQorKyAgaWYgKHJlZ251bSA9PSBGUFNDUl9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7CisrICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7CisrfQorKworKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQorKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOIGFzIGRlc2NyaWJlZCBieSB0aGUKKysgICBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgorKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKytzdGF0aWMgdm9pZAorK3NoX2NvbGxlY3RfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdzZXQgKnJlZ3NldCwKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgIGludCByZWdudW0sIHZvaWQgKmZwcmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY2hhciAqcmVncyA9IGZwcmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCk7CisrICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysgICAgeworKyAgICAgIGlmIChyZWdudW0gPT0gaSsyNSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7CisrICAgIH0KKysgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFNDUl9SRUdOVU0sIHJlZ3MgKyAzMio0KTsKKysgIGlmIChyZWdudW0gPT0gRlBVTF9SRUdOVU0gfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIEZQVUxfUkVHTlVNLCByZWdzICsgMzMqNCk7CisrfQorKworKy8qIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgY29yZSBzZWN0aW9uIGlkZW50aWZpZWQKKysgICBieSBTRUNUX05BTUUgYW5kIFNFQ1RfU0laRS4gICovCisrCisrY29uc3Qgc3RydWN0IHJlZ3NldCAqCisrc2hfbGludXhfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VjdF9uYW1lLCBzaXplX3Qgc2VjdF9zaXplKQorK3sKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworKworKyAgaWYgKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZyIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPmdyZWdzZXQgPT0gTlVMTCkKKysgICAgdGRlcC0+Z3JlZ3NldCA9IHJlZ3NldF9hbGxvYyAoZ2RiYXJjaCwgc2hfc3VwcGx5X2dyZWdzZXQsCisrICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZ3JlZ3NldCk7CisrICAgICAgcmV0dXJuIHRkZXAtPmdyZWdzZXQ7CisrICAgIH0KKysKKysgIGlmICgoc3RyY21wIChzZWN0X25hbWUsICIucmVnMiIpID09IDAgJiYgc2VjdF9zaXplID09IHRkZXAtPnNpemVvZl9mcHJlZ3NldCkpCisrICAgIHsKKysgICAgICBpZiAodGRlcC0+ZnByZWdzZXQgPT0gTlVMTCkKKysgICAgdGRlcC0+ZnByZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9mcHJlZ3NldCwKKysgICAgICAgICAgICAgICAgICAgICAgIHNoX2NvbGxlY3RfZnByZWdzZXQpOworKyAgICAgIHJldHVybiB0ZGVwLT5mcHJlZ3NldDsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFRoZSByZWdpc3RlciBzZXRzIHVzZWQgaW4gR05VL0xpbnV4IEVMRiBjb3JlLWR1bXBzIGFyZSBpZGVudGljYWwgdG8KKysgICB0aGUgcmVnaXN0ZXIgc2V0cyBpbiBgc3RydWN0IHVzZXInIHRoYXQgYXJlIHVzZWQgZm9yIGEub3V0CisrICAgY29yZS1kdW1wcy4gIFRoZXNlIGFyZSBhbHNvIHVzZWQgYnkgcHRyYWNlKDIpLiAgVGhlIGNvcnJlc3BvbmRpbmcKKysgICB0eXBlcyBhcmUgYGVsZl9ncmVnc2V0X3QnIGZvciB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyAod2l0aAorKyAgIGBlbGZfZ3JlZ190JyB0aGUgdHlwZSBvZiBhIHNpbmdsZSBHUCByZWdpc3RlcikgYW5kIGBlbGZfZnByZWdzZXRfdCcKKysgICBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKysKKysgICBUaG9zZSB0eXBlcyB1c2VkIHRvIGJlIGF2YWlsYWJsZSB1bmRlciB0aGUgbmFtZXMgYGdyZWdzZXRfdCcgYW5kCisrICAgYGZwcmVnc2V0X3QnIHRvbywgYW5kIEdEQiB1c2VkIHRob3NlIG5hbWVzIGluIHRoZSBwYXN0LiAgQnV0IHRob3NlCisrICAgbmFtZXMgYXJlIG5vdyB1c2VkIGZvciB0aGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIHRoZSBgbWNvbnRleHRfdCcKKysgICB0eXBlLCB3aGljaCBoYXZlIGEgZGlmZmVyZW50IHNpemUgYW5kIGxheW91dC4gICovCisrCisrLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QgdXNlcicKKysgICBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCisrCisrLyogRnJvbSA8c3lzL3JlZy5oPi4gICovCisrc3RhdGljIGludCBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXRbXSA9CisreworKyAwLAk0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCisrIDMyLAkzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwKKysKKysgUkVHX1BDKjQsICAgUkVHX1BSKjQsICAgUkVHX0dCUio0LCAgLTEsCisrIFJFR19NQUNIKjQsIFJFR19NQUNMKjQsIFJFR19TUio0LAorK307CisrCisrLyogTWFwcGluZyBiZXR3ZWVuIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIGBzdHJ1Y3QKKysgICBzaWdjb250ZXh0JyBmb3JtYXQgYW5kIEdEQidzIHJlZ2lzdGVyIGNhY2hlIGxheW91dC4gICovCisrCisrLyogRnJvbSA8YXNtL3NpZ2NvbnRleHQuaD4uICAqLworK3N0YXRpYyBpbnQgc2hfbGludXhfc2NfcmVnX29mZnNldFtdID0KKyt7CisrIDQsCTgsCTEyLAkxNiwJMjAsCTI0LAkyOCwJMzIsCisrIDM2LAk0MCwJNDQsCTQ4LAk1MiwJNTYsCTYwLAk2NCwKKysgNjgsCTcyLAk4MCwJLTEsCisrIDg0LAk4OCwJNzYKKyt9OworKworIHN0YXRpYyB2b2lkCisgc2hfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpCisgeworKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCk7CisrICBiZmQgYWJmZDsKKysKKysgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9IHNoX2xpbnV4X2dyZWdzZXRfcmVnX29mZnNldDsKKysgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQpOworKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAyMyAqIDQ7CisrCisrICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAzMjsgICAgIC8qIEZyb20gPGJpdHMvc2V0am1wLmg+LiAgKi8KKysKKysgIHRkZXAtPnNpZ3RyYW1wX3AgPSBzaF9saW51eF9zaWd0cmFtcF9wOworKyAgdGRlcC0+c2lnY29udGV4dF9hZGRyID0gc2hfbGludXhfc2lnY29udGV4dF9hZGRyOworKyAgdGRlcC0+c2NfcmVnX29mZnNldCA9IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQ7CisrICB0ZGVwLT5zY19udW1fcmVncyA9IEFSUkFZX1NJWkUgKHNoX2xpbnV4X3NjX3JlZ19vZmZzZXQpOworKworKyAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlcihnZGJhcmNoLCAmc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdW53aW5kKTsKKysKKysgIC8qIElmIHdlIGhhdmUgYSByZWdpc3RlciBtYXBwaW5nLCBlbmFibGUgdGhlIGdlbmVyaWMgY29yZSBmaWxlCisrICAgICBzdXBwb3J0LCB1bmxlc3MgaXQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLiAgKi8KKysgIGlmICh0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQKKysgICAgICAmJiAhZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb25fcCAoZ2RiYXJjaCkpCisrICAgIHNldF9nZGJhcmNoX3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoZ2RiYXJjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbik7CisrCisgICBsaW51eF9pbml0X2FiaSAoaW5mbywgZ2RiYXJjaCk7CisgCisgICAvKiBHTlUvTGludXggdXNlcyBTVlI0LXN0eWxlIHNoYXJlZCBsaWJyYXJpZXMuICAqLworZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmMgYi9nZGIvc2gtdGRlcC5jCitpbmRleCA4MmNmMmY0Li5iNDQzZTQ2IDEwMDY0NAorLS0tIGEvZ2RiL3NoLXRkZXAuYworKysrIGIvZ2RiL3NoLXRkZXAuYworQEAgLTIxLDYgKzIxLDkgQEAKKyAgICBzYWNAY3lnbnVzLmNvbS4gICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJjb21tYW5kLmgiCisrI2luY2x1ZGUgImR1bW15LWZyYW1lLmgiCisgI2luY2x1ZGUgImZyYW1lLmgiCisgI2luY2x1ZGUgImZyYW1lLWJhc2UuaCIKKyAjaW5jbHVkZSAiZnJhbWUtdW53aW5kLmgiCitAQCAtMzUsNiArMzgsNyBAQAorICNpbmNsdWRlICJhcmNoLXV0aWxzLmgiCisgI2luY2x1ZGUgImZsb2F0Zm9ybWF0LmgiCisgI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisrI2luY2x1ZGUgInJlZ3NldC5oIgorICNpbmNsdWRlICJkb3VibGVzdC5oIgorICNpbmNsdWRlICJvc2FiaS5oIgorICNpbmNsdWRlICJyZWdncm91cHMuaCIKK0BAIC02NywyMyArNzEsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2hfY2NfZW51bVtdID0geworIAorIHN0YXRpYyBjb25zdCBjaGFyICpzaF9hY3RpdmVfY2FsbGluZ19jb252ZW50aW9uID0gc2hfY2NfZ2NjOworIAorLSNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKKy0KKy1zdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKKy17CistICAvKiBCYXNlIGFkZHJlc3MuICAqLworLSAgQ09SRV9BRERSIGJhc2U7CistICBMT05HRVNUIHNwX29mZnNldDsKKy0gIENPUkVfQUREUiBwYzsKKy0KKy0gIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gICovCistICBpbnQgdXNlc19mcDsKKy0KKy0gIC8qIFNhdmVkIHJlZ2lzdGVycy4gICovCistICBDT1JFX0FERFIgc2F2ZWRfcmVnc1tTSF9OVU1fUkVHU107CistICBDT1JFX0FERFIgc2F2ZWRfc3A7CistfTsKKy0KKyBzdGF0aWMgaW50Cisgc2hfaXNfcmVuZXNhc19jYWxsaW5nX2NvbnZlbnRpb24gKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUpCisgeworQEAgLTEwNDMsNyArMTAzMCw3IEBAIHNoX3RyZWF0X2FzX2ZsdF9wIChzdHJ1Y3QgdHlwZSAqdHlwZSkKKyAgICAgcmV0dXJuIDA7CisgICAvKiBPdGhlcndpc2UgaWYgdGhlIHR5cGUgb2YgdGhhdCBtZW1iZXIgaXMgZmxvYXQsIHRoZSB3aG9sZSB0eXBlIGlzCisgICAgICB0cmVhdGVkIGFzIGZsb2F0LiAgKi8KKy0gIGlmIChUWVBFX0NPREUgKFRZUEVfRklFTERfVFlQRSAodHlwZSwgMCkpID09IFRZUEVfQ09ERV9GTFQpCisrICBpZiAoVFlQRV9DT0RFIChjaGVja190eXBlZGVmIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSkgPT0gVFlQRV9DT0RFX0ZMVCkKKyAgICAgcmV0dXJuIDE7CisgICAvKiBPdGhlcndpc2UgaXQncyBub3QgdHJlYXRlZCBhcyBmbG9hdC4gICovCisgICByZXR1cm4gMDsKK0BAIC0xMDkzLDcgKzEwODAsNyBAQCBzaF9wdXNoX2R1bW15X2NhbGxfZnB1IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKyAgICAgIGluIGZvdXIgcmVnaXN0ZXJzIGF2YWlsYWJsZS4gIExvb3AgdGhydSBhcmdzIGZyb20gZmlyc3QgdG8gbGFzdC4gICovCisgICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdudW0rKykKKyAgICAgeworLSAgICAgIHR5cGUgPSB2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pOworKyAgICAgIHR5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlIChhcmdzW2FyZ251bV0pKTsKKyAgICAgICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7CisgICAgICAgdmFsID0gc2hfanVzdGlmeV92YWx1ZV9pbl9yZWcgKGdkYmFyY2gsIGFyZ3NbYXJnbnVtXSwgbGVuKTsKKyAKK0BAIC0xODIxLDcgKzE4MDgsNyBAQCBzaF9kd2FyZjJfZnJhbWVfaW5pdF9yZWcgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVtLAorICAgICByZWctPmhvdyA9IERXQVJGMl9GUkFNRV9SRUdfVU5ERUZJTkVEOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQorIHsKKyAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGU7CitAQCAtMTg0OCw3ICsxODM1LDcgQEAgc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpCisgICByZXR1cm4gY2FjaGU7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3N0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyB7CisgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKK0BAIC0xOTE1LDkgKzE5MDIsOSBAQCBzaF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlKQorICAgcmV0dXJuIGNhY2hlOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHZhbHVlICoKKy1zaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKy0JCQl2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKKytzdHJ1Y3QgdmFsdWUgKgorK3NoX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSwKKysJCQlpbnQgcmVnbnVtKQorIHsKKyAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOworICAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZSA9IHNoX2ZyYW1lX2NhY2hlICh0aGlzX2ZyYW1lLCB0aGlzX2NhY2hlKTsKK0BAIC0xOTMxLDcgKzE5MTgsNyBAQCBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKyAgICAgIHRoZSBjdXJyZW50IGZyYW1lLiAgRnJvYiByZWdudW0gc28gdGhhdCB3ZSBwdWxsIHRoZSB2YWx1ZSBmcm9tCisgICAgICB0aGUgY29ycmVjdCBwbGFjZS4gICovCisgICBpZiAocmVnbnVtID09IGdkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoKSkKKy0gICAgcmVnbnVtID0gUFJfUkVHTlVNOworKyAgICByZWdudW0gPSBQUl9SRUdOVU07IC8qIFhYWDogcmVhbGx5PyAqLworIAorICAgaWYgKHJlZ251bSA8IFNIX05VTV9SRUdTICYmIGNhY2hlLT5zYXZlZF9yZWdzW3JlZ251bV0gIT0gLTEpCisgICAgIHJldHVybiBmcmFtZV91bndpbmRfZ290X21lbW9yeSAodGhpc19mcmFtZSwgcmVnbnVtLAorQEAgLTIyMzcsOCArMjIyNCw4IEBAIHNoX3JldHVybl9pbl9maXJzdF9oaWRkZW5fcGFyYW1fcCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgc3RhdGljIHN0cnVjdCBnZGJhcmNoICoKKyBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorIHsKKy0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworICAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcDsKKysgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOworIAorICAgLyogU0g1IGlzIGhhbmRsZWQgZW50aXJlbHkgaW4gc2g2NC10ZGVwLmMuICAqLworICAgaWYgKGluZm8uYmZkX2FyY2hfaW5mby0+bWFjaCA9PSBiZmRfbWFjaF9zaDUpCitAQCAtMjI1NCw2ICsyMjQxLDE4IEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgICB0ZGVwID0gWENORVcgKHN0cnVjdCBnZGJhcmNoX3RkZXApOworICAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsKKyAKKysgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLworKyAgdGRlcC0+Z3JlZ3NldCA9IE5VTEw7CisrICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBOVUxMOworKyAgdGRlcC0+Z3JlZ3NldF9udW1fcmVncyA9IDIzOworKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAwOworKworKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKysgIHRkZXAtPmZwcmVnc2V0ID0gTlVMTDsKKysgIHRkZXAtPnNpemVvZl9mcHJlZ3NldCA9IDM0KjQ7CisrCisrICB0ZGVwLT5qYl9wY19vZmZzZXQgPSAtMTsKKysKKyAgIHNldF9nZGJhcmNoX3Nob3J0X2JpdCAoZ2RiYXJjaCwgMiAqIFRBUkdFVF9DSEFSX0JJVCk7CisgICBzZXRfZ2RiYXJjaF9pbnRfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKKyAgIHNldF9nZGJhcmNoX2xvbmdfYml0IChnZGJhcmNoLCA0ICogVEFSR0VUX0NIQVJfQklUKTsKK0BAIC0yNDA0LDEwICsyNDAzLDExIEBAIHNoX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCisgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKysgIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKKysKKyAgIC8qIEhvb2sgaW4gQUJJLXNwZWNpZmljIG92ZXJyaWRlcywgaWYgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4gICovCisgICBnZGJhcmNoX2luaXRfb3NhYmkgKGluZm8sIGdkYmFyY2gpOworIAorLSAgZHdhcmYyX2FwcGVuZF91bndpbmRlcnMgKGdkYmFyY2gpOworICAgZnJhbWVfdW53aW5kX2FwcGVuZF91bndpbmRlciAoZ2RiYXJjaCwgJnNoX3N0dWJfdW53aW5kKTsKKyAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9mcmFtZV91bndpbmQpOworIAorZGlmZiAtLWdpdCBhL2dkYi9zaC10ZGVwLmggYi9nZGIvc2gtdGRlcC5oCitpbmRleCBmYzY3MWE1Li42OTlmNTlmIDEwMDY0NAorLS0tIGEvZ2RiL3NoLXRkZXAuaAorKysrIGIvZ2RiL3NoLXRkZXAuaAorQEAgLTIxLDYgKzIxLDEyIEBACisgCisgLyogQ29udHJpYnV0ZWQgYnkgU3RldmUgQ2hhbWJlcmxhaW4gc2FjQGN5Z251cy5jb20uICAqLworIAorK3N0cnVjdCBmcmFtZV9pbmZvOworK3N0cnVjdCBnZGJhcmNoOworK3N0cnVjdCByZWdncm91cDsKKytzdHJ1Y3QgcmVnc2V0OworK3N0cnVjdCByZWdjYWNoZTsKKysKKyAvKiBSZWdpc3RlcnMgZm9yIGFsbCBTSCB2YXJpYW50cy4gIFVzZWQgYWxzbyBieSBzaDMtcm9tLmMuICAqLworIGVudW0KKyAgIHsKK0BAIC0yOSw2ICszNSw3IEBAIGVudW0KKyAgICAgQVJHMF9SRUdOVU0gPSA0LAorICAgICBBUkdMQVNUX1JFR05VTSA9IDcsCisgICAgIEZQX1JFR05VTSA9IDE0LAorKyAgICBTUF9SRUdOVU0gPSAxNSwKKyAgICAgUENfUkVHTlVNID0gMTYsCisgICAgIFBSX1JFR05VTSA9IDE3LAorICAgICBHQlJfUkVHTlVNID0gMTgsCitAQCAtODEsNiArODgsMjQgQEAgZW51bQorICAgICBGVjBfUkVHTlVNID0gNzYsCisgICAgIEZWX0xBU1RfUkVHTlVNID0gNzkKKyAgIH07CisrI2RlZmluZSBTSF9OVU1fUkVHUyA2NworKworK3N0cnVjdCBzaF9mcmFtZV9jYWNoZQorK3sKKysgIC8qIEJhc2UgYWRkcmVzcy4gICovCisrICBDT1JFX0FERFIgYmFzZTsKKysgIExPTkdFU1Qgc3Bfb2Zmc2V0OworKyAgQ09SRV9BRERSIHBjOworKworKyAgLyogRmxhZyBzaG93aW5nIHRoYXQgYSBmcmFtZSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBwcm9sb2d1ZSBjb2RlLiAqLworKyAgaW50IHVzZXNfZnA7CisrCisrICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworKyAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOworKyAgQ09SRV9BRERSIHNhdmVkX3NwOworK307CisrCisrZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICpuZXh0X2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSk7CisgCisgLyogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGEgcmVnaXN0ZXIgaW4gYSBjb3JlLWZpbGUuICAqLworIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKK0BAIC04OSw4ICsxMTQsMzIgQEAgc3RydWN0IHNoX2NvcmVmaWxlX3JlZ21hcAorICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyB9OworIAorKy8qIHNoIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gICovCisgc3RydWN0IGdkYmFyY2hfdGRlcAorIHsKKysgIC8qIEdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICAqLworKyAgc3RydWN0IHJlZ3NldCAqZ3JlZ3NldDsKKysgIGludCAqZ3JlZ3NldF9yZWdfb2Zmc2V0OworKyAgaW50IGdyZWdzZXRfbnVtX3JlZ3M7CisrICBzaXplX3Qgc2l6ZW9mX2dyZWdzZXQ7CisrCisrICAvKiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLworKyAgc3RydWN0IHJlZ3NldCAqZnByZWdzZXQ7CisrICBzaXplX3Qgc2l6ZW9mX2ZwcmVnc2V0OworKworKyAgLyogT2Zmc2V0IG9mIHNhdmVkIFBDIGluIGptcF9idWYuICAqLworKyAgaW50IGpiX3BjX29mZnNldDsKKysKKysgIC8qIERldGVjdCBzaWd0cmFtcC4gICovCisrICBpbnQgKCpzaWd0cmFtcF9wKSAoc3RydWN0IGZyYW1lX2luZm8gKik7CisrCisrICAvKiBHZXQgYWRkcmVzcyBvZiBzaWdjb250ZXh0IGZvciBzaWd0cmFtcC4gICovCisrICBDT1JFX0FERFIgKCpzaWdjb250ZXh0X2FkZHIpIChzdHJ1Y3QgZnJhbWVfaW5mbyAqKTsKKysKKysgIC8qIE9mZnNldCBvZiByZWdpc3RlcnMgaW4gYHN0cnVjdCBzaWdjb250ZXh0Jy4gICovCisrICBpbnQgKnNjX3JlZ19vZmZzZXQ7CisrICBpbnQgc2NfbnVtX3JlZ3M7CisrCisgICAvKiBOb24tTlVMTCB3aGVuIGRlYnVnZ2luZyBmcm9tIGEgY29yZSBmaWxlLiAgUHJvdmlkZXMgdGhlIG9mZnNldAorICAgICAgd2hlcmUgZWFjaCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgaXMgc3RvcmVkIGluc2lkZSB0aGUgYXNzb2NpYXRlZAorICAgICAgY29yZSBmaWxlIHNlY3Rpb24uICAqLworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAoraW5kZXggODg1NGFmMC4uZWY0NDY4MiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAorKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL2FzbS1zb3VyY2UuZXhwCitAQCAtMTEzLDYgKzExMywxMSBAQCBzd2l0Y2ggLWdsb2IgLS0gW2lzdGFyZ2V0XSB7CisgICAgICAgICAgICAgYXBwZW5kIGxpbmstZmxhZ3MgIiAtbSBlbGYzMnBwYyIKKyAgICAgICAgIH0KKyAgICAgfQorKyAgICAic2gqLWxpbnV4KiIgeworKyAgICAgICAgc2V0IGFzbS1hcmNoIHNoLWxpbnV4CisrICAgICAgICBzZXQgYXNtLWZsYWdzICItSSR7c3JjZGlyfS8ke3N1YmRpcn0gLUkke29iamRpcn0vJHtzdWJkaXJ9IgorKwlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKKysgICAgfQorICAgICAic2gqLSotKiIgeworICAgICAgICAgc2V0IGFzbS1hcmNoIHNoCisgCXNldCBkZWJ1Zy1mbGFncyAiLWdkd2FyZi0yIgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jCitpbmRleCBhNGE1ZmM1Li44OWVmZWQ3IDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworQEAgLTQwLDkgKzQwLDggQEAKKyAJbW92LmwgICAuTGNvbnN0XEAscjEKKyAJYnJhCS5MYWZ0ZXJjb25zdFxACisgCW5vcAorLQlub3AKKy0uTGNvbnN0XEA6CisgCS5hbGlnbgkyCisrLkxjb25zdFxAOgorIAkubG9uZwlcc3VicgorIAkuYWxpZ24JMQorIC5MYWZ0ZXJjb25zdFxAOgorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKK2luZGV4IDQyNGUxYjguLjBkZTJlN2IgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKK0BAIC0xLDYgKzEsOSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIHZvaWQKKyBoYW5kbGVfVVNSMSAoaW50IHNpZykKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitpbmRleCA0MjRlMWI4Li45NTJhYWYyIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCitAQCAtMSw2ICsxLDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHNpZ25hbC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2VuZGlmCisrCisgCisgdm9pZAorIGhhbmRsZV9VU1IxIChpbnQgc2lnKQorZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jCitpbmRleCA4MWYzYjA4Li4xNTc0YjJkIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworQEAgLTEsNiArMSw5IEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorIAorIC8qIFNpZ25hbCBoYW5kbGVycywgd2Ugc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgc2lnbmFscyByZWFsbHkgZ2V0IGRlbGl2ZXJlZC4gICovCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworaW5kZXggNzU2NjA2OC4uMTIwNWE5YiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworQEAgLTMsNiArMywxMCBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZGVmaW5lIGFsYXJtKGEpICAgICAgIC8qIERpdHRvIGZvciBhbGFybSgpICovCisrI2VuZGlmCisgCisgc3RhdGljIGludCBjb3VudCA9IDA7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTQzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNGZlNjdkYmFmYTFiZWU2NzlkYWVjYzEyZWQzMDYyMWQ1YzI2MDVkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFlhbyBRaSA8eWFvQGNvZGVzb3VyY2VyeS5jb20+CitEYXRlOiBNb24sIDExIE1heSAyMDE1IDEwOjU3OjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBkZXRlY3Rpb24gb2YgNjQtYml0IFBQQyBpbmZlcmlvciBpbiBnZGJzZXJ2ZXIKKworSXNzdWUgIzE2Nzc1CisKKyogZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyAocHBjX2FyY2hfc2V0dXApOiBDaGFuZ2UgdmFyaWFibGUgbXNyIHRvIHR5cGUKKyd1bnNpZ25lZCBsb25nJy4gIENoZWNrIGJpdCA2MyBvciBiaXQgMzEgaXMgb25lLgorCitodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1wYXRjaGVzLzIwMTQtMTIvbXNnMDAyMzkuaHRtbAorV3JpdHRlbiBieTogWWFvIFFpIDx5YW9AY29kZXNvdXJjZXJ5LmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIHwgMTEgKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworaW5kZXggNjNkNDIxOC4uYTYyY2YyMiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jCisrKysgYi9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworQEAgLTM3NCw3ICszNzQsNyBAQCBwcGNfYXJjaF9zZXR1cCAodm9pZCkKKyB7CisgICBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2Rlc2MgKnRkZXNjOworICNpZmRlZiBfX3Bvd2VycGM2NF9fCistICBsb25nIG1zcjsKKysgIHVuc2lnbmVkIGxvbmcgbXNyOworICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZTsKKyAKKyAgIC8qIE9uIGEgNjQtYml0IGhvc3QsIGFzc3VtZSA2NC1iaXQgaW5mZXJpb3IgcHJvY2VzcyB3aXRoIG5vCitAQCAtMzg0LDEzICszODQsMTYgQEAgcHBjX2FyY2hfc2V0dXAgKHZvaWQpCisgICBjdXJyZW50X3Byb2Nlc3MgKCktPnRkZXNjID0gdGRlc2M7CisgICBwcGNfaHdjYXAgPSAwOworIAorLSAgLyogT25seSBpZiB0aGUgaGlnaCBiaXQgb2YgdGhlIE1TUiBpcyBzZXQsIHdlIGFjdHVhbGx5IGhhdmUKKy0gICAgIGEgNjQtYml0IGluZmVyaW9yLiAgKi8KKysgIC8qIFdlIGFjdHVhbGx5IGhhdmUgYSA2NC1iaXQgaW5mZXJpb3Igb25seSBpZiB0aGUgY2VydGFpbiBiaXQgb2YgdGhlCisrICAgICBNU1IgaXMgc2V0LiAgVGhlIFBvd2VySVNBIEJvb2sgSUlJLVMgTVNSIGlzIGRpZmZlcmVudCBmcm9tIHRoZQorKyAgICAgUG93ZXJJU0EgQm9vayBJSUktRSBNU1IuICBUaGUgQm9vayBJSUktUyBNU1IgaXMgNjQgYml0cyB3aWRlLCBhbmQKKysgICAgIGl0cyBNU1JbU0ZdIGlzIHRoZSBiaXQgMCBvZiBhIDY0LWJpdCB2YWx1ZS4gIEJvb2sgSUlJLUUgTVNSIGlzIDMyCisrICAgICBiaXRzIHdpZGUsIGFuZCBpdHMgTVNSW0NNXSBpcyB0aGUgYml0IDAgb2YgYSAzMi1iaXQgdmFsdWUuICAqLworICAgcmVnY2FjaGUgPSBuZXdfcmVnaXN0ZXJfY2FjaGUgKHRkZXNjKTsKKyAgIGZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAocmVnY2FjaGUsIGZpbmRfcmVnbm8gKHRkZXNjLCAibXNyIikpOworICAgY29sbGVjdF9yZWdpc3Rlcl9ieV9uYW1lIChyZWdjYWNoZSwgIm1zciIsICZtc3IpOworICAgZnJlZV9yZWdpc3Rlcl9jYWNoZSAocmVnY2FjaGUpOworLSAgaWYgKG1zciA8IDApCisrICBpZiAobXNyICYgMHg4MDAwMDAwMDgwMDAwMDAwKQorICAgICB7CisgICAgICAgcHBjX2dldF9od2NhcCAoJnBwY19od2NhcCk7CisgICAgICAgaWYgKHBwY19od2NhcCAmIFBQQ19GRUFUVVJFX0NFTEwpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGJfNy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1MmUyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgZ2RiLmluYworcmVxdWlyZSBnZGItJHtQVn0uaW5jCisKK2luaGVyaXQgcHl0aG9uLWRpcgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24sLS13aXRob3V0LXB5dGhvbixweXRob24scHl0aG9uIHB5dGhvbi1jb2RlY3MiCitQQUNLQUdFQ09ORklHW2JhYmVsdHJhY2VdID0gIi0td2l0aC1iYWJlbHRyYWNlLC0td2l0aG91dC1iYWJlbHRyYWNlLGJhYmVsdHJhY2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgLW4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24nLCAnJywgZCl9IiBdOyB0aGVuCisJCWNhdCA+ICR7V09SS0RJUn0vcHl0aG9uIDw8IEVPRgorIyEvYmluL3NoCitjYXNlICJcJDIiIGluCisJLS1pbmNsdWRlcykgZWNobyAiLUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9LyIgOzsKKwktLWxkZmxhZ3MpIGVjaG8gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfS8uLiAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IiA7OworCS0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OworCSopIGV4aXQgMSA7OworZXNhYworZXhpdCAwCitFT0YKKwkJY2htb2QgK3ggJHtXT1JLRElSfS9weXRob24KKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYTRhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdC5pbmMKQEAgLTAsMCArMSwxMzAgQEAKK1NVTU1BUlkgPSAiRGlzdHJpYnV0ZWQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQtc2NtLmNvbSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gIm9wZW5zc2wgY3VybCB6bGliIGV4cGF0IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnaXQtcmVwbGFjZW1lbnQtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvc2NtL2dpdC9naXQtJHtQVn0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7S0VSTkVMT1JHX01JUlJPUn0vc29mdHdhcmUvc2NtL2dpdC9naXQtbWFucGFnZXMtJHtQVn0udGFyLmd6O25hbWU9bWFucGFnZXMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQtJHtQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjMGQ3ZWYwM2E3ZWIwNGNlNzk1YjBmNjBlNjhlN2UxIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBlcmw9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwgXAorCQktLXdpdGhvdXQtdGNsdGsgXAorIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGVybG5hdGl2ZQorCitFWFRSQV9PRU1BS0UgPSAiTk9fUFlUSE9OPTEgQ0ZMQUdTPScke0NGTEFHU30nIExERkxBR1M9JyR7TERGTEFHU30nIgorRVhUUkFfT0VNQUtFICs9ICInUEVSTF9QQVRIPS91c3IvYmluL2VudiBwZXJsJyIKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBOT19DUk9TU19ESVJFQ1RPUllfSEFSRExJTktTPTEiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgcGVybC9wZXJsLm1hayB0byBmaXggdGhlIG91dC1vZi1kYXRlIHBlcmwubWFrIGVycm9yCisJIyBkdXJpbmcgcmVidWlsZAorCXJtIC1mIHBlcmwvcGVybC5tYWsKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9IiR7RH0iIGJpbmRpcj0ke2JpbmRpcn0gXAorCQl0ZW1wbGF0ZV9kaXI9JHtkYXRhZGlyfS9naXQtY29yZS90ZW1wbGF0ZXMgXAorCQlHSVRfUFlUSE9OX0RJUj0ke0R9JHtkYXRhZGlyfS9naXQtY29yZS9weXRob24KKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjUKKwlpbnN0YWxsIC1kICR7RH0vJHttYW5kaXJ9L21hbjcKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjEgJHtXT1JLRElSfS9tYW4xLyoKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjUgJHtXT1JLRElSfS9tYW41LyoKKwlpbnN0YWxsIC10ICR7RH0vJHttYW5kaXJ9L21hbjcgJHtXT1JLRElSfS9tYW43LyoKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24vY29tcGxldGlvbnMvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCAke0R9LyR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zL2dpdAorfQorCitwZXJsX25hdGl2ZV9maXh1cCAoKSB7CisJc2VkIC1pIC1lICdzIyR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8jJHtiaW5kaXJ9LyMnIFwKKwkgICAgICAgLWUgJ3MjJHtsaWJkaXJ9L3BlcmwtbmF0aXZlLyMke2xpYmRpcn0vIycgXAorCSAgICAke0BkLmdldFZhcigiUEVSTFRPT0xTIiwgVHJ1ZSkucmVwbGFjZSgnIC8nLGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyAnLycpfQorCisJIyAke2xpYmRpcn0gaXMgbm90IGFwcGxpY2FibGUgaGVyZSwgcGVybC1uYXRpdmUgZmlsZXMgYXJlIGFsd2F5cworCSMgaW5zdGFsbGVkIHRvIC91c3IvbGliIG9uIGJvdGggMzIvNjQgYml0cyB0YXJnZXRzLgorCW12ICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvcGVybC1uYXRpdmUvcGVybCAke0R9JHtsaWJkaXJ9CisJcm1kaXIgLXAgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9wZXJsLW5hdGl2ZSB8fCB0cnVlCit9CisKK1JFTF9HSVRfRVhFQ19QQVRIID0gIiR7QG9zLnBhdGgucmVscGF0aChsaWJleGVjZGlyLCBiaW5kaXIpfS9naXQtY29yZSIKK1JFTF9HSVRfVEVNUExBVEVfRElSID0gIiR7QG9zLnBhdGgucmVscGF0aChkYXRhZGlyLCBiaW5kaXIpfS9naXQtY29yZS90ZW1wbGF0ZXMiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJcGVybF9uYXRpdmVfZml4dXAKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vZ2l0IFwKKwkJR0lUX0VYRUNfUEFUSD0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfRVhFQ19QQVRIfSBcCisJCUdJVF9URU1QTEFURV9ESVI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX1RFTVBMQVRFX0RJUn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vZ2l0IFwKKwkJR0lUX0VYRUNfUEFUSD0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke1JFTF9HSVRfRVhFQ19QQVRIfSBcCisJCUdJVF9URU1QTEFURV9ESVI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX1RFTVBMQVRFX0RJUn0KKwlwZXJsX25hdGl2ZV9maXh1cAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9naXQtY29yZSAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9naXQtY29yZS8uZGVidWciCisKK1BFUkxUT09MUyA9ICIgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFkZC0taW50ZXJhY3RpdmUgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFyY2hpbXBvcnQgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWN2c2V4cG9ydGNvbW1pdCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtY3ZzaW1wb3J0IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNzZXJ2ZXIgXAorICAgICR7YmluZGlyfS9naXQtY3Zzc2VydmVyIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1kaWZmdG9vbCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtcmVsaW5rIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zZW5kLWVtYWlsIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdm4gXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWluc3Rhd2ViIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1zdWJtb2R1bGUgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWFtIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1yZXF1ZXN0LXB1bGwgXAorICAgICR7ZGF0YWRpcn0vZ2l0d2ViL2dpdHdlYi5jZ2kgXAorICAgICR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzL2hvb2tzL3ByZXBhcmUtY29tbWl0LW1zZy5zYW1wbGUgXAorICAgICR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzL2hvb2tzL3ByZS1yZWJhc2Uuc2FtcGxlIFwKKyIKKworIyBCYXNpYyB0YWIgY29tcGxldGlvbiBzdXBwb3J0CitQQUNLQUdFUyA9KyAiJHtQTn0tYmFzaC1jb21wbGV0aW9uIgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zLyoiCisKKyMgR2l0IHRvb2xzIHJlcXVpcmluZyBwZXJsCitQQUNLQUdFUyA9KyAiJHtQTn0tcGVybHRvb2xzIgorRklMRVNfJHtQTn0tcGVybHRvb2xzICs9ICIgXAorICAgICR7UEVSTFRPT0xTfSBcCisgICAgJHtsaWJkaXJ9L3BlcmwgXAorICAgICR7ZGF0YWRpcn0vcGVybCBcCisiCitSREVQRU5EU18ke1BOfS1wZXJsdG9vbHMgPSAiJHtQTn0gcGVybCBwZXJsLW1vZHVsZS1maWxlLXBhdGggZmluZHV0aWxzIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tcHl0aG9uIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qIgorCisKKyMgZ2l0LXRrIHBhY2thZ2Ugd2l0aCBnaXRrIGFuZCBnaXQtZ3VpCitQQUNLQUdFUyA9KyAiJHtQTn0tdGsiCisjUkRFUEVORFNfJHtQTn0tdGsgPSAiJHtQTn0gdGsgdGNsIgorI0VYVFJBX09FTUFLRSA9ICJUQ0xfUEFUSD0ke1NUQUdJTkdfQklORElSX0NST1NTfS90Y2xzaCIKK0ZJTEVTXyR7UE59LXRrID0gIiBcCisgICAgJHtiaW5kaXJ9L2dpdGsgXAorICAgICR7ZGF0YWRpcn0vZ2l0ayBcCisiCisKK1BBQ0tBR0VTID0rICJnaXR3ZWIiCitGSUxFU19naXR3ZWIgPSAiJHtkYXRhZGlyfS9naXR3ZWIvIgorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXRfMi41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ODZjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ2l0LmluYworCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9bm8gXAorICAgICAgICAgICAgICAgICBhY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz0ke2FjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzPXllc30gXAorICAgICAgICAgICAgICAgICAiCitFWFRSQV9PRU1BS0UgKz0gIk5PX0dFVFRFWFQ9MSIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiM2JjOWIwYTgwM2FlOGVjNmM1MzE2Y2M2NGYwYjdmNzgiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICI4ZmExM2JhODQzNGZmODNkMjRmNTdmODMxZDU1ZGJiOTA0NjQzNGMyNjY2NDExODBhMzc3NDRmYWNmY2U3MmFjIgorU1JDX1VSSVttYW5wYWdlcy5tZDVzdW1dID0gIjEzNGIwNDllNTE0MjBhMzM2MDQ5YWFjMjFjODhhNzVhIgorU1JDX1VSSVttYW5wYWdlcy5zaGEyNTZzdW1dID0gIjc0NWU0ZTc5N2ZlNTA2MWU3ODFjODgwZDM3MGIxYmViNDgwMTk5MTI3ZGE1YWNhZjRlMzc2ZTBiMDlkNGQ2ODUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5NDExNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaApAQCAtMCwwICsxLDE3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1BhdGNoIGNvdXJ0ZXN5IGdlbnRvby1wb3J0YWdlL3N5cy1kZXZlbC9nbnVjb25maWcvZmlsZXMvYXV0b21ha2UtMS44LjUtY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaC4KKwordXBkYXRlZCB0byAyMDA1MDUxNiBieSBNYXJjaW4gJ0hydycgSnVzemtpZXdpY3ogKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMDgwMTIzIGJ5IE5pdGluIEEgS2FtYmxlIChieSBoYW5kKQordXBkYXRlZCB0byAyMDExMTAwMSBieSBTYXVsIFdvbGQgKGJ5IGhhbmQpCit1cGRhdGVkIHRvIDIwMTIwODE4IGJ5IE1hcmNpbiAnSHJ3JyBKdXN6a2lld2ljeiAoYnkgaGFuZCkKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyY2luIEp1c3praWV3aWN6IDxtYXJjaW4uanVzemtpZXdpY3pAbGluYXJvLm9yZz4KKworLS0tCisgY29uZmlnLmd1ZXNzIHwgICA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworLS0tIGdpdC5vcmlnL2NvbmZpZy5ndWVzcworKysrIGdpdC9jb25maWcuZ3Vlc3MKK0BAIC0xMzgsNiArMTM4LDE5IEBAIFVOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHwKKyBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorIFVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgorIAorKyMgRGV0ZWN0IHVjbGliYyBzeXN0ZW1zLgorKworK0xJQkM9ImdudSIKKytpZiBbIC1mIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaCBdCisrdGhlbgorKwlMSUJDPXVjbGliYworKwlpZiBbIC1uIGBncmVwICIjZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18iIC91c3IvaW5jbHVkZS9iaXRzL3VDbGliY19jb25maWcuaGAgXQorKwl0aGVuCisrCQlVQ0xJQkNfU1VCVkVSPWBzZWQgLW4gIi8jZGVmaW5lIF9fVUNMSUJDX0NPTkZJR19WRVJTSU9OX18gL3MvLy9wIiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmhgCisrCQlMSUJDPSRMSUJDJFVDTElCQ19TVUJWRVIKKysJZmkKKytmaQorKworICMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKyAKKyBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCitAQCAtODg2LDE1ICs4OTksMTUgQEAgRU9GCisgCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgCWVzYWMKKyAJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCistCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKysJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGFybSo6TGludXg6KjoqKQorIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisgCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKyAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKyAJdGhlbgorLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWVsc2UKKyAJICAgIGlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisgCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorQEAgLTkwNiwxOSArOTE5LDE5IEBAIEVPRgorIAlmaQorIAlleGl0IDs7CisgICAgIGF2cjMyKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgY3JpczpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgY3Jpc3YzMjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgZnJ2OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBoZXhhZ29uOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBpKjg2OkxpbnV4Oio6KikKKyAJTElCQz1nbnUKK0BAIC05MzIsMTMgKzk0NSwxMyBAQCBFT0YKKyAJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorIAlleGl0IDs7CisgICAgIGlhNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIG0zMnIqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtNjgqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisgCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKK0BAIC05NTcsNTQgKzk3MCw1NCBAQCBFT0YKKyAJI2VuZGlmCisgRU9GCisgCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKKy0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKysJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9CisgCTs7CisgICAgIG9yMzI6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhZHJlOkxpbnV4Oio6KikKKy0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQorKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCistCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisrCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKyAJIyBMb29rIGZvciBDUFUgbGV2ZWwKKyAJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKy0JICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKy0JICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKy0JICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKysJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisrCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKyAJZXNhYworIAlleGl0IDs7CisgICAgIHBwYzY0OkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgcHBjOkxpbnV4Oio6KikKKy0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisrCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKyAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorIAlleGl0IDs7CisgICAgIHNoNjQqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzaCo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHRpbGUqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB2YXg6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB4ODZfNjQ6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHh0ZW5zYSo6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisgCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ5MDhmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvZ251LWNvbmZpZ2l6ZS5pbgpAQCAtMCwwICsxLDI2NyBAQAorIyEgL3Vzci9iaW4vZW52IHBlcmwKKyMgLSotIHBlcmwgLSotCisKK2V2YWwgJ2Nhc2UgJCMgaW4gMCkgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCI7OyAqKSBleGVjIC91c3IvYmluL3BlcmwgLVMgIiQwIiAiJEAiOzsgZXNhYycKKyAgICBpZiAwOworCisjIGdudS1jb25maWdpemUgLSBpbnN0YWxsIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbiBhIGRpcmVjdG9yeSB0cmVlCisjIEJhc2VkIG9uIGF1dG9yZWNvbmY6CisjICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3LCBVU0EuCisKK0JFR0lOCit7CisgIG15ICRkYXRhZGlyID0gJEVOVnsnYXV0b200dGVfcGVybGxpYmRpcid9IHx8ICdAYXV0b200dGVfcGVybGxpYmRpckAnOworIyAgJy9ob21lL2tlcmdvdGgvY29kZS9idWlsZC1hcm0vdG1wL3N0YWdpbmcvc2hhcmUvYXV0b2NvbmYnOworICB1bnNoaWZ0IEBJTkMsICRkYXRhZGlyOworCisgICMgT3ZlcnJpZGUgU0hFTEwuICBPbiBESkdQUCBTSEVMTCBtYXkgbm90IGJlIHNldCB0byBhIHNoZWxsCisgICMgdGhhdCBjYW4gaGFuZGxlIHJlZGlyZWN0aW9uIGFuZCBxdW90ZSBhcmd1bWVudHMgY29ycmVjdGx5LAorICAjIGUuZy46IENPTU1BTkQuQ09NLiAgRm9yIERKR1BQIGFsd2F5cyB1c2UgdGhlIHNoZWxsIHRoYXQgY29uZmlndXJlCisgICMgaGFzIGRldGVjdGVkLgorICAkRU5WeydTSEVMTCd9ID0gJy9iaW4vc2gnIGlmICgkXk8gZXEgJ2RvcycpOworfQorCit1c2UgQXV0b200dGU6OkNoYW5uZWxEZWZzOwordXNlIEF1dG9tNHRlOjpDaGFubmVsczsKK3VzZSBBdXRvbTR0ZTo6Q29uZmlndXJlX2FjOwordXNlIEF1dG9tNHRlOjpGaWxlVXRpbHM7Cit1c2UgQXV0b200dGU6OkdlbmVyYWw7Cit1c2UgQXV0b200dGU6OlhGaWxlOworIyBEbyBub3QgdXNlIEN3ZDo6Y2hkaXIsIHNpbmNlIGl0IG1pZ2h0IGhhbmcuCit1c2UgQ3dkICdjd2QnOwordXNlIHN0cmljdDsKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIFZhcmlhYmxlcy4gICMjCisjIyAtLS0tLS0tLS0tLSAjIworCisjICRIRUxQCisjIC0tLS0tCiskaGVscCA9ICJVc2FnZTogJDAgW09QVElPTl0gLi4uIFtDT05GSUdVUkUtQUMgb3IgRElSRUNUT1JZXSAuLi4KKworSW5zdGFsbCB0aGUgR05VIGNvbmZpZy5zdWIgYW5kIGNvbmZpZy5ndWVzcyBzY3JpcHRzIGluIHRoZQorRElSRUNUT1JJRVMgb3IgdGhlIGRpcmVjdG9yeSB0cmVlcyBkcml2ZW4gYnkgQ09ORklHVVJFLUFDCisoZGVmYXVsdGluZyB0byBgLicpLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgIC1mLCAtLWZvcmNlICAgICAgICAgICAgICBjb25zaWRlciBhbGwgZmlsZXMgb2Jzb2xldGUKKyAgLXMsIC0tc3ltbGluayAgICAgICAgICAgIGluc3RhbGwgc3ltYm9saWMgbGlua3MgaW5zdGVhZCBvZiBjb3BpZXMKKyAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbc3ludGF4XQorCisiIC4gQXV0b200dGU6OkNoYW5uZWxEZWZzOjp1c2FnZSAuICIKKworVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxgV0FSTklOR1NcJyBpcyBob25vcmVkLiAgU29tZSBzdWJ0b29scyBtaWdodAorc3VwcG9ydCBvdGhlciB3YXJuaW5nIHR5cGVzLCB1c2luZyBcYGFsbCcgaXMgZW5jb3VyYWdlZC4KKyI7CisKKyMgJFZFUlNJT04KKyMgLS0tLS0tLS0KKyR2ZXJzaW9uID0gImdudS1jb25maWdpemUgMS4wCisKK0NvcHlyaWdodCAoQykgMjAwNCBDaHJpcyBMYXJzb24KK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyI7CisKK215ICRjb25maWdkaXIgID0gJ0BnbnUtY29uZmlnZGlyQCc7CisjJy9ob21lL2tlcmdvdGgvY29kZS9idWlsZC1hcm0vdG1wL3N0YWdpbmcvaTY4Ni1saW51eC9zaGFyZS9nbnUtY29uZmlnJzsKK215ICRhdXRvY29uZiAgID0gJEVOVnsnQVVUT0NPTkYnfSAgICAgfHwgJ2F1dG9jb25mJzsKKworIyB1c2Ugc3ltbGlua3MgaW5zdGVhZC4KK215ICRzeW1saW5rID0gMDsKKworbXkgJGNvbmZpZ3VyZV9hYzsKKworbXkgJHJtID0gInJtIC1mIjsKK215ICRsbl9zID0gImxuIC1zZiI7CitteSAkY3AgPSAiY3AgLWYiOworbXkgJG1rZGlyID0gIm1rZGlyIjsKK215ICRjaG1vZCA9ICJjaG1vZCI7CisKKyMjIC0tLS0tLS0tLS0gIyMKKyMjIFJvdXRpbmVzLiAgIyMKKyMjIC0tLS0tLS0tLS0gIyMKKworCisjIHBhcnNlX2FyZ3MgKCkKKyMgLS0tLS0tLS0tLS0tLQorIyBQcm9jZXNzIGFueSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorc3ViIHBhcnNlX2FyZ3MgKCkKK3sKKyAgbXkgJHNyY2RpcjsKKworICBnZXRvcHQgKCdzfHN5bWxpbmsnICAgICAgICAgICAgPT4gXCRzeW1saW5rKTsKKworICAjIEV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY29uZmlndXJlLmFjLCB0cmltIHRvIGdldCB0aGUKKyAgIyBkaXJlY3RvcnksIGFuZCBsb29rIGZvciBjb25maWd1cmUuYWMgYWdhaW4uICBCZWNhdXNlIChpKSB0aGUgY29kZQorICAjIGlzIHNpbXBsZXIsIGFuZCAoaWkpIHdlIGFyZSBzdGlsbCBhYmxlIHRvIGRpYWdub3NlIHNpbXVsdGFuZW91cworICAjIHByZXNlbmNlIG9mIGNvbmZpZ3VyZS5hYyBhbmQgY29uZmlndXJlLmluLgorICBAQVJHViA9IG1hcCB7IC9jb25maWd1cmVcLihhY3xpbikkLyA/IGRpcm5hbWUgKCRfKSA6ICRfIH0gQEFSR1Y7CisgIHB1c2ggQEFSR1YsICcuJyB1bmxlc3MgQEFSR1Y7Cit9CisKKworIyAmZ251X2NvbmZpZ2l6ZV9jdXJyZW50X2RpcmVjdG9yeQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3ViIGdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3RvcnkgKCkKK3sKKyAgbXkgJGNvbmZpZ3VyZV9hYyA9IHJlcXVpcmVfY29uZmlndXJlX2FjOworCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICMgSXMgaXQgdXNpbmcgQXV0b2NvbmY/ICAjCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisKKyAgbXkgJHVzZXNfYXV0b2NvbmY7CisgIG15ICR1c2VzX2dldHRleHQ7CisgIG15ICRjb25maWd1cmVfYWNfZmlsZSA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUgJGNvbmZpZ3VyZV9hYzsKKyAgd2hpbGUgKCRfID0gJGNvbmZpZ3VyZV9hY19maWxlLT5nZXRsaW5lKQorICAgICB7CisgICAgICAgcy8jLiovLzsKKyAgICAgICBzL2RubC4qLy87CisgICAgICAgJHVzZXNfYXV0b2NvbmYgPSAxIGlmIC9BQ19JTklULzsKKyAgICAgfQorCisgIGlmICghJHVzZXNfYXV0b2NvbmYpCisgICAgeworICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogbm90IHVzaW5nIEF1dG9jb25mIjsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbXkgJGF1eF9kaXI7CisgIG15IEBzdWJkaXI7CisgIG15ICRjbWQ7CisgIG15ICRkZXN0OworCisgIHZlcmIgIiRjb25maWd1cmVfYWM6IHRyYWNpbmciOworICBteSAkdHJhY2VzID0gbmV3IEF1dG9tNHRlOjpYRmlsZQorICAgICgiJGF1dG9jb25mIgorICAgICAuIGpvaW4gKCcgLS10cmFjZT0nLCAnJywKKwkgICAgICMgSWYgeW91IGNoYW5nZSB0aGlzIGxpc3QsIHVwZGF0ZSB0aGUKKwkgICAgICMgYEF1dG9yZWNvbmYtcHJlc2VsZWN0aW9ucycgc2VjdGlvbiBvZiBhdXRvbTR0ZS5pbi4KKwkgICAgICdBQ19DT05GSUdfQVVYX0RJUjpBQ19DT05GSUdfQVVYX0RJUjpcJDEnLAorCSAgICAgJ0FDX0NPTkZJR19TVUJESVJTOkFDX0NPTkZJR19TVUJESVJTOlwkMScsCisJICAgICAnQUNfSU5JVCcsCisJICAgICkKKyAgICAgLiAnIHwnKTsKKyAgd2hpbGUgKCRfID0gJHRyYWNlcy0+Z2V0bGluZSkKKyAgICB7CisgICAgICAkYXV4X2RpciA9ICQxICAgICAgICAgICAgICAgICBpZiAvQUNfQ09ORklHX0FVWF9ESVI6KC4qKS87CisgICAgICAkdXNlc19hdXRvY29uZiA9IDEgICAgICAgICAgICBpZiAvQUNfSU5JVC87CisgICAgICBwdXNoIEBzdWJkaXIsIHNwbGl0ICgnICcsICQxKSBpZiAvQUNfQ09ORklHX1NVQkRJUlM6KC4qKS87CisgICAgfQorCisgICMgVGhlIHN1YmRpcnMgYXJlICpvcHRpb25hbCosIHRoZXkgbWF5IG5vdCBleGlzdC4KKyAgZm9yZWFjaCAoQHN1YmRpcikKKyAgICB7CisgICAgICBpZiAoLWQpCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogc3ViZGlyZWN0b3J5ICRfIHRvIGdudS1jb25maWdpemUiOworCSAgZ251X2NvbmZpZ2l6ZSAoJF8pOworCX0KKyAgICAgIGVsc2UKKwl7CisJICB2ZXJiICIkY29uZmlndXJlX2FjOiBzdWJkaXJlY3RvcnkgJF8gbm90IHByZXNlbnQiOworCX0KKyAgICB9CisKKyAgJGRlc3QgPSAiLiI7CisKKyAgaWYgKGRlZmluZWQgJGF1eF9kaXIpCisgICAgeworICAgICAgJGRlc3QgPSAkYXV4X2RpcjsKKyAgICAgIGlmICghIC1kICRhdXhfZGlyKQorICAgICAgICB7CisgICAgICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogY3JlYXRpbmcgZGlyZWN0b3J5ICRhdXhfZGlyIjsKKyAgICAgICAgICBta2RpciAkYXV4X2RpcgorICAgICAgICAgICAgb3IgZXJyb3IgImNhbm5vdCBjcmVhdGUgJGF1eF9kaXI6ICQhIjsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoISRzeW1saW5rKQorICAgIHsKKyAgICAgICRjbWQgPSAkY3A7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgJGNtZCA9ICRsbl9zOworICAgIH0KKworICB4c3lzdGVtICgiJGNtZCAkY29uZmlnZGlyL2NvbmZpZy5ndWVzcyAkZGVzdC8iKTsKKyAgeHN5c3RlbSAoIiRjaG1vZCB1K3ggJGRlc3QvY29uZmlnLmd1ZXNzIik7CisgIHhzeXN0ZW0gKCIkY21kICRjb25maWdkaXIvY29uZmlnLnN1YiAkZGVzdC8iKTsKKyAgeHN5c3RlbSAoIiRjaG1vZCB1K3ggJGRlc3QvY29uZmlnLnN1YiIpOworfQorCisKKyMgJmdudV9jb25maWdpemUgKCRESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWNvbmYgdGhlICRESVJFQ1RPUlkuCitzdWIgZ251X2NvbmZpZ2l6ZSAoJCkKK3sKKyAgbXkgKCRkaXJlY3RvcnkpID0gQF87CisgIG15ICRjd2QgPSBjd2Q7CisKKyAgIyBUaGUgZm9ybWF0IGZvciB0aGlzIG1lc3NhZ2UgaXMgbm90IGZyZWU6IHRha2VuIGZyb20gRW1hY3MsIGl0c2VsZgorICAjIHVzaW5nIEdOVSBNYWtlJ3MgZm9ybWF0LgorICB2ZXJiICJFbnRlcmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGRpcmVjdG9yeQorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGRpcmVjdG9yeTogJCEiOworCisgIGdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3Rvcnk7CisKKyAgIyBUaGUgZm9ybWF0IGlzIG5vdCBmcmVlOiB0YWtlbiBmcm9tIEVtYWNzLCBpdHNlbGYgdXNpbmcgR05VIE1ha2UncworICAjIGZvcm1hdC4KKyAgdmVyYiAiTGVhdmluZyBkaXJlY3RvcnkgYCRkaXJlY3RvcnknIjsKKyAgY2hkaXIgJGN3ZAorICAgIG9yIGVycm9yICJjYW5ub3QgY2hkaXIgdG8gJGN3ZDogJCEiOworfQorCisKKyMjIC0tLS0tLSAjIworIyMgTWFpbi4gICMjCisjIyAtLS0tLS0gIyMKKworcGFyc2VfYXJnczsKKworIyBBdXRvcmVjb25mIGFsbCB0aGUgZ2l2ZW4gY29uZmlndXJlLmFjLiAgQSB3aGlsZSBsb29wLCBub3QgYSBmb3IsCisjIHNpbmNlIHRoZSBsaXN0IGNhbiBjaGFuZ2UgYXQgcnVudGltZSBiZWNhdXNlIG9mIEFDX0NPTkZJR19TVUJESVJTLgorZm9yIG15ICRkaXJlY3RvcnkgKEBBUkdWKQorICB7CisgICAgZ251X2NvbmZpZ2l6ZSAoJGRpcmVjdG9yeSk7CisgIH0KKworIyMjIFNldHVwICJHTlUiIHN0eWxlIGZvciBwZXJsLW1vZGUgYW5kIGNwZXJsLW1vZGUuCisjIyBMb2NhbCBWYXJpYWJsZXM6CisjIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyMgcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCisjIyBwZXJsLWxhYmVsLW9mZnNldDogLTIKKyMjIGNwZXJsLWluZGVudC1sZXZlbDogMgorIyMgY3BlcmwtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCisjIyBjcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1leHRyYS1uZXdsaW5lLWJlZm9yZS1icmFjZTogdAorIyMgY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZTogbmlsCisjIyBjcGVybC1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogMgorIyMgRW5kOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL211c2wtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQ3NDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorc3VwcG9ydCBtdXNsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdudS1jb25maWctMjAxMjA4MTQvY29uZmlnLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1jb25maWctMjAxMjA4MTQub3JpZy9jb25maWcuc3ViCTIwMTItMDktMTggMDI6Mjc6NDUuMDAwMDAwMDAwIC0wNzAwCisrKysgZ251LWNvbmZpZy0yMDEyMDgxNC9jb25maWcuc3ViCTIwMTQtMDMtMjYgMDA6MzQ6MTkuOTU1OTk2NzA5IC0wNzAwCitAQCAtMTIzLDYgKzEyMyw3IEBACisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKyAgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorKyAgbGludXgtbXVzbCogfCBcCisgICBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICAga29wZW5zb2xhcmlzKi1nbnUqIHwgXAorQEAgLTEzNjUsNiArMTM2Niw3IEBACisgCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKyAJICAgICAgfCAtbWluZ3czMiogfCAtbWluZ3c2NCogfCAtbGludXgtZ251KiB8IC1saW51eC1hbmRyb2lkKiBcCisgCSAgICAgIHwgLWxpbnV4LW5ld2xpYiogfCAtbGludXgtdWNsaWJjKiBcCisrCSAgICAgIHwgLWxpbnV4LW11c2wqIFwKKyAJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy91Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZTEwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uZmlnLnN1Yi5vcmlnCTIwMDQtMDUtMTQgMTk6Mzg6MzYuMDAwMDAwMDAwIC0wNTAwCisrKysgY29uZmlnLnN1YgkyMDA0LTA1LTE0IDE5OjM5OjE3LjAwMDAwMDAwMCAtMDUwMAorQEAgLTExOCw3ICsxMTgsNyBAQAorICMgSGVyZSB3ZSBtdXN0IHJlY29nbml6ZSBhbGwgdGhlIHZhbGlkIEtFUk5FTC1PUyBjb21iaW5hdGlvbnMuCisgbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCisgY2FzZSAkbWF5YmVfb3MgaW4KKy0gIG50by1xbngqIHwgbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtdWNsaWJjKiB8IGZyZWVic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgIG9zPS0kbWF5YmVfb3MKKyAgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICAgOzsKK0BAIC0xMTM1LDcgKzExMzUsOCBAQAorIAkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKyAJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorIAkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCistCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LXVjbGliYyogXAorKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisgCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisgCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorIAkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfMjAxMjA4MTQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViN2U0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiZ251LWNvbmZpZ2l6ZSIKK0RFU0NSSVBUSU9OID0gIlRvb2wgdGhhdCBpbnN0YWxscyB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW50byBhIGRpcmVjdG9yeSB0cmVlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9jb25maWcuZ3Vlc3M7ZW5kbGluZT0zOTttZDU9Yjc5YTQ2NjM0NzVmNGQ3MjQ4NDY0NjMyNzc4MTdlMGQiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInBlcmwtbmF0aXZlLXJ1bnRpbWUiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvZ251LWNvbmZpZy9nbnUtY29uZmlnLSR7UFZ9LnRhci5iejIgXAorCSAgIGZpbGU6Ly9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoIFwKKwkgICBmaWxlOi8vbXVzbC1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1jb25maWdpemUuaW4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiY2ZjYTVhMmJiMzllZGFkNGFhZTVhNjVlZmM4NDA5NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NGY5OWE4ZTc2ZjNlOGU0ZmVjMGJiNWFkNDc2MmY4ZTQ0MzY2MTY4NTU0Y2U2NmNiODVhZmJlMmVkM2VmZDhiIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnIFwKKwkJICAgJHtEfSR7YmluZGlyfQorCWNhdCAke1dPUktESVJ9L2dudS1jb25maWdpemUuaW4gfCBcCisJCXNlZCAtZSAncyxAZ251LWNvbmZpZ2RpckAsJHtkYXRhZGlyfS9nbnUtY29uZmlnLGcnIFwKKwkJICAgIC1lICdzLEBhdXRvbTR0ZV9wZXJsbGliZGlyQCwke2RhdGFkaXJ9L2F1dG9jb25mLGcnID4gJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJIyBJbiB0aGUgbmF0aXZlIGNhc2Ugd2Ugd2FudCB0aGUgc3lzdGVtIHBlcmwgYXMgcGVybC1uYXRpdmUgY2FuJ3QgaGF2ZSBidWlsdCB5ZXQKKwlpZiBbICIke1BOfSIgIT0gImdudS1jb25maWctbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstZ251LWNvbmZpZyIgXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3MsL3Vzci9iaW4vZW52LCR7YmluZGlyfS9lbnYsZycgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJZmkKKwljaG1vZCA3NTUgJHtEfSR7YmluZGlyfS9nbnUtY29uZmlnaXplCisJaW5zdGFsbCAtbSAwNjQ0IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcvCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vZ251LWNvbmZpZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDVmMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJnbnUtY29uZmlnaXplIgorREVTQ1JJUFRJT04gPSAiVG9vbCB0aGF0IGluc3RhbGxzIHRoZSBHTlUgY29uZmlnLmd1ZXNzIC8gY29uZmlnLnN1YiBpbnRvIGEgZGlyZWN0b3J5IHRyZWUiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlnLmd1ZXNzO2JlZ2lubGluZT03O2VuZGxpbmU9Mjc7bWQ1PTliYWM4YjE3NDNjMjI0MGFlMDdjY2U2ZTU0NmFjMmYyIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTUkNSRVYgPSAiYjU3NmZhODdjMTQwYjgyNDQ2NmVmMTYzOGU5NDVlODdkYzVjMDM0MyIKK1BWID0gIjIwMTUwNzI4K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5zdi5nbnUub3JnL2NvbmZpZy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ251LWNvbmZpZ2l6ZS5pbiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZyBcCisJCSAgICR7RH0ke2JpbmRpcn0KKwljYXQgJHtXT1JLRElSfS9nbnUtY29uZmlnaXplLmluIHwgXAorCQlzZWQgLWUgJ3MsQGdudS1jb25maWdkaXJALCR7ZGF0YWRpcn0vZ251LWNvbmZpZyxnJyBcCisJCSAgICAtZSAncyxAYXV0b200dGVfcGVybGxpYmRpckAsJHtkYXRhZGlyfS9hdXRvY29uZixnJyA+ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCSMgSW4gdGhlIG5hdGl2ZSBjYXNlIHdlIHdhbnQgdGhlIHN5c3RlbSBwZXJsIGFzIHBlcmwtbmF0aXZlIGNhbid0IGhhdmUgYnVpbHQgeWV0CisJaWYgWyAiJHtQTn0iICE9ICJnbnUtY29uZmlnLW5hdGl2ZSIgLWEgIiR7UE59IiAhPSAibmF0aXZlc2RrLWdudS1jb25maWciIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzLC91c3IvYmluL2Vudiwke2JpbmRpcn0vZW52LGcnICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWZpCisJY2htb2QgNzU1ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWluc3RhbGwgLW0gMDY0NCBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnLworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L2dudS1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc4OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9hYXJjaDY0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2d1aWxlOiBhZGQgYWFyY2g2NCByZWNvZ25pdGlvbgorCitBc3N1bWUgbGl0dGxlLWVuZGlhbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbQorCistLS0gYS9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQorKysrIGIvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KK0BAIC03MCw2ICs3MCw4IEBACisgICAgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAic3BhcmM2NCIgInBvd2VycGMiICJwb3dlcnBjNjQiICJzcHUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiKSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFhcmNoNjQiIGNwdSkKKysgICAgICAgICAgICAgKGVuZGlhbm5lc3MgbGl0dGxlKSkKKyAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWIiIGNwdSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKyAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0MzI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fZW5kaWFubmVzcy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdXBwb3J0IGZvcm0gQVJNIGVuZGlhbm5lc3MKKworRml4ZXMgWW9jdG8gYnVnIyAyNzI5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3VpbGUtMi4wLjUvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuNS5vcmlnL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCTIwMTItMDEtMjQgMDM6MDY6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgZ3VpbGUtMi4wLjUvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20JMjAxMi0wNy0xMiAxMzowNTo0NC4zNzIzNjQxMDMgLTA3MDAKK0BAIC03MCw3ICs3MCw5IEBACisgICAgICAgICAgICAgKChtZW1iZXIgY3B1ICcoInNwYXJjIiAic3BhcmM2NCIgInBvd2VycGMiICJwb3dlcnBjNjQiICJzcHUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiICJtaXBzNjQiKSkKKyAgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKy0gICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWwiIGNwdSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qZWIiIGNwdSkKKysgICAgICAgICAgICAgKGVuZGlhbm5lc3MgYmlnKSkKKysgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXmFybS4qIiBjcHUpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGxpdHRsZSkpCisgICAgICAgICAgICAgKGVsc2UKKyAgICAgICAgICAgICAgKGVycm9yICJ1bmtub3duIENQVSBlbmRpYW5uZXNzIiBjcHUpKSkpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDItTWFyay1VbnVzZWQtbW9kdWxlcy1hcmUtcmVtb3ZlZC1nYy10ZXN0LWFzLXVucmVzb2x2ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIzOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0Zyb20gZTUyYmZjZGJhY2E1ZGNlNDk4Njc4ZDhmNTEyMzgxZTNlMzlhNDA2NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYiBCcm93bmluZyA8cmxiQGRlZmF1bHR2YWx1ZS5vcmc+CitEYXRlOiBTdW4sIDE4IE1hciAyMDEyIDExOjQwOjU1IC0wNTAwCitTdWJqZWN0OiBNYXJrICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIgZ2MgdGVzdCBhcyB1bnJlc29sdmVkLgorCitBcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0CittYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCistLS0KKyB0ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgfCAgIDExICsrKysrKy0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKK2luZGV4IGE5Njk3NTIuLjhjOGUxM2UgMTAwNjQ0CistLS0gYS90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKKysrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAorQEAgLTg0LDExICs4NCwxMyBAQAorICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgorIAorICAgICAgIChtYXliZS1nYy1mbGFraW5lc3MKKy0gICAgICAgKD0gKGxldCBscCAoKGkgMCkpCistICAgICAgICAgICAgKGlmIChndWFyZCkKKy0gICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKy0gICAgICAgICAgICAgICAgaSkpCistICAgICAgICAgIHRvdGFsKSkpKQorKyAgICAgICAob3IgKD0gKGxldCBscCAoKGkgMCkpCisrICAgICAgICAgICAgICAgIChpZiAoZ3VhcmQpCisrICAgICAgICAgICAgICAgICAgICAobHAgKDErIGkpKQorKyAgICAgICAgICAgICAgICAgICAgaSkpCisrICAgICAgICAgICAgICB0b3RhbCkKKysgICAgICAgICAgICh0aHJvdyAndW5yZXNvbHZlZCkpKSkpCisrCisgCisgICAocGFzcy1pZiAiTGV4aWNhbCB2YXJzIGFyZSBjb2xsZWN0YWJsZSIKKyAgICAgKGxldCAoKGwgKGNvbXBpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZTNiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitGcm9tIDg0ODU0MzA5MWQ1NWRkZGI1NGE4NTYxMjE1NTk2NDUwNmQ3MTI4NTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPgorRGF0ZTogU3VuLCAxOCBNYXIgMjAxMiAxMzoyODoyNCAtMDUwMAorU3ViamVjdDogTWFyayAibXV0ZXggd2l0aCBvd25lciBub3QgcmV0YWluZWQiIHRocmVhZHMgdGVzdCBhcyB1bnJlc29sdmVkLgorCitBcyBwZXIgZGlzY3Vzc2lvbiB3aXRoIHVwc3RyZWFtLCBtYXJrIHRoaXMgdGVzdCBhcyB1bnJlc29sdmVkIHNpbmNlIGl0CittYXkgcHJvZHVjZSBmYWxzZSBuZWdhdGl2ZXMsIGRlcGVuZGluZyBvbiB0aGUgYmVoYXZpb3IvdGltaW5nIG9mIHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCistLS0KKyB0ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCB8ICAgIDYgKysrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CitpbmRleCA4NWE3YzM4Li41MDg5OWNiIDEwMDY0NAorLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QKKysrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CitAQCAtNDE0LDggKzQxNCwxMCBAQAorIAorICAgICAgICAgICAgIChnYykgKGdjKQorICAgICAgICAgICAgIChsZXQgKChtIChnKSkpCistICAgICAgICAgICAgICAoYW5kIChtdXRleD8gbSkKKy0gICAgICAgICAgICAgICAgICAgKGVxPyAobXV0ZXgtb3duZXIgbSkgKGN1cnJlbnQtdGhyZWFkKSkpKSkpKQorKyAgICAgICAgICAgICAgKG9yCisrICAgICAgICAgICAgICAgKGFuZCAobXV0ZXg/IG0pCisrICAgICAgICAgICAgICAgICAgICAoZXE/IChtdXRleC1vd25lciBtKSAoY3VycmVudC10aHJlYWQpKSkKKysgICAgICAgICAgICAgICAodGhyb3cgJ3VucmVzb2x2ZWQpKSkpKSkKKyAKKyAgICAgICA7OworICAgICAgIDs7IG11dGV4IGxvY2sgbGV2ZWxzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGMyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaApAQCAtMCwwICsxLDI0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBmaXhlcyBzZWQgaXNzdWUgd2hlbiBwcmVmaXggaGFzIC8gaW4gaXQsIGxpa2UgL3Vzci9sb2NhbAorCithdXRvcmVjb25mIGVycm9yIGF2b2lkZWQ6Cit8IHNlZDogLWUgZXhwcmVzc2lvbiAjMSwgY2hhciA5OiB1bmtub3duIG9wdGlvbiB0byBgcycKK3wgY29uZmlndXJlLmFjOjM5OiBlcnJvcjogQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHMKKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDEKKworSW5kZXg6IGd1aWxlLTIuMC41L2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuNS5vcmlnL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKysrKyBndWlsZS0yLjAuNS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCitAQCAtMTg3LDcgKzE4Nyw3IEBAIGVsc2UKKyAgICAgdj1VTktOT1dOCisgZmkKKyAKKy12PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKyt2PWBlY2hvICIkdiIgfHNlZCAicyNeJHByZWZpeCMjImAKKyAKKyAjIFRlc3Qgd2hldGhlciB0byBhcHBlbmQgdGhlICItZGlydHkiIHN1ZmZpeCBvbmx5IGlmIHRoZSB2ZXJzaW9uCisgIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkwYjlkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWM0ZTEyMGE3YTg3ZGIzNGQyMmE1MDg4M2E1YTUyNTE3MGI0ODBkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA2IEphbiAyMDE1IDIzOjEwOjUxIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmd1aWxlL01ha2VmaWxlLmFtOiBpbnN0YWxsLWRhdGEtaG9vayAtPiBpbnN0YWxsLWV4ZWMtaG9vaworCitJdCBtYXkgaW5zdGFsbCBzdWNoIGEgZmlsZToKKy91c3IvbGliNjQvbGliZ3VpbGUtMi4wKi1nZGIuc2NtCisKK1RoaXMgaXMgYmVjYXVzZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgaW4gdGhlIGRpcmVjdG9yeToKK2ZvciBmIGluIGxpYmd1aWxlLTIuMCo7IGRvCisgICAgW3NuaXBdCitkb25lCisKK1RoZSBmIHdvdWxkIGJlIGxpYmd1aWxlLTIuMCogaXRzZWxmLCB1c2UgaW5zdGFsbC1leGVjLWhvb2sgd2lsbCBmaXggdGhlCitwcm9ibGVtIHNpbmNlIGl0IGRlcGVuZHMgb24gaW5zdGFsbC1saWJMVExJQlJBUklFUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvTWFrZWZpbGUuYW0gfCAgICA0ICstLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS9NYWtlZmlsZS5hbSBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCitpbmRleCA1ZGVjZDk5Li41MjY0NWI3IDEwMDY0NAorLS0tIGEvbGliZ3VpbGUvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmd1aWxlL01ha2VmaWxlLmFtCitAQCAtNDQ2LDEwICs0NDYsOCBAQCBFWFRSQV9saWJndWlsZV9AR1VJTEVfRUZGRUNUSVZFX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBfc2NtLmgJCVwKKyAjIyBkZWxldGUgZ3VpbGUtc25hcmYuYXdrIGZyb20gdGhlIGluc3RhbGxhdGlvbiBiaW5kaXIsIGluIGNhc2UgaXQncworICMjIGxpbmdlcmluZyB0aGVyZSBkdWUgdG8gYW4gZWFybGllciBndWlsZSB2ZXJzaW9uIG5vdCBoYXZpbmcgYmVlbgorICMjIHdpcGVkIG91dC4KKy1pbnN0YWxsLWV4ZWMtaG9vazoKKytpbnN0YWxsLWV4ZWMtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KKyAJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS9ndWlsZS1zbmFyZi5hd2sKKy0KKy1pbnN0YWxsLWRhdGEtaG9vazogbGliZ3VpbGUtMi4wLWdkYi5zY20KKyAJQCQoTUtESVJfUCkgJChERVNURElSKSQobGliZGlyKQorICMjIFdlIHdhbnQgdG8gaW5zdGFsbCBsaWJndWlsZS0yLjAtZ2RiLnNjbSBhcyBTT01FVEhJTkctZ2RiLnNjbS4KKyAjIyBTT01FVEhJTkcgaXMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgZmluYWwgbGlicmFyeS4gIFdlIHdhbnQgdG8gaWdub3JlCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDA1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSBhODVjNzhlYTEzOTM5ODVmZGI2ZTY2NzhkZWExOTEzNWM1NTNkMzQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CitEYXRlOiBGcmksIDE5IFNlcCAyMDE0IDIxOjE4OjA5IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIFZNOiBBU01fTVVMIGZvciBBUk06IEFkZCBlYXJseWNsb2JiZXIgY29uc3RyYWludCB0byB0aGUgU01VTEwKKyBvdXRwdXRzLgorCitSZXBvcnRlZCBieSBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPi4KKworKiBsaWJndWlsZS92bS1pLXNjaGVtZS5jIChBU01fTVVMKVtBUk1dOiBBZGQgZWFybHljbG9iYmVyICgmKSBjb25zdHJhaW50CisgIHRvIHRoZSBTTVVMTCBvdXRwdXQgcmVnaXN0ZXJzLgorCitBdXRob3I6IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJndWlsZS92bS1pLXNjaGVtZS5jIHwgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS92bS1pLXNjaGVtZS5jIGIvbGliZ3VpbGUvdm0taS1zY2hlbWUuYworaW5kZXggNTg3YWE5NS4uMTYyZWZhYiAxMDA2NDQKKy0tLSBhL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKKysrKyBiL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKK0BAIC0xLDUgKzEsNCBAQAorLS8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywKKy0gKiAgIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICogCisgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorQEAgLTM2Myw3ICszNjIsNyBAQCBWTV9ERUZJTkVfRlVOQ1RJT04gKDE0OSwgZ2UsICJnZT8iLCAyKQorICAgICAgIHsJCQkJCQkJCQlcCisgCXNjbV90X3NpZ25lZF9iaXRzIHJsbywgcmhpOwkJCQkJXAorIAlhc20gKCJzbXVsbCAlMCwgJTEsICUyLCAlM1xuIgkJCQkJXAorLQkgICAgIDogIj1yIiAocmxvKSwgIj1yIiAocmhpKQkJCQkJXAorKwkgICAgIDogIj0mciIgKHJsbyksICI9JnIiIChyaGkpCQkJCQlcCisgCSAgICAgOiAiciIgKFNDTV9VTlBBQ0sgKHgpIC0gc2NtX3RjMl9pbnQpLAkJCVwKKyAJICAgICAgICJyIiAoU0NNX0lfSU5VTSAoeSkpKTsJCQkJCVwKKyAJaWYgKFNDTV9MSUtFTFkgKFNDTV9TUlMgKHJsbywgMzEpID09IHJoaSkpCQkJXAorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlMzEyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29wZW5zdXNlIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogZ3VpbGUtMi4wLjMvbGliZ3VpbGUvaGFzaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy9saWJndWlsZS9oYXNoLmMJMjAxMS0wNy0wNiAxNTo0OTo1OS4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy9saWJndWlsZS9oYXNoLmMJMjAxMi0wMS0xMyAyMTo0OTo0My4zMzI4NDQ4ODQgLTA4MDAKK0BAIC0yNzAsNyArMjcwLDcgQEAgc2NtX2hhc2hlcihTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4sIHNpegorIHVuc2lnbmVkIGxvbmcKKyBzY21faWhhc2hxIChTQ00gb2JqLCB1bnNpZ25lZCBsb25nIG4pCisgeworLSAgcmV0dXJuIChTQ01fVU5QQUNLIChvYmopID4+IDEpICUgbjsKKysgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgPj4gMSkgJSBuOworIH0KKyAKKyAKK0BAIC0zMDYsNyArMzA2LDcgQEAgc2NtX2loYXNodiAoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuKQorICAgaWYgKFNDTV9OVU1QKG9iaikpCisgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgc2NtX2hhc2hlcihvYmosIG4sIDEwKTsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworIH0KKyAKKyAKK0luZGV4OiBndWlsZS0yLjAuMy9saWJndWlsZS9zdHJ1Y3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvbGliZ3VpbGUvc3RydWN0LmMJMjAxMS0wNy0wNiAxNTo1MDowMC4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy9saWJndWlsZS9zdHJ1Y3QuYwkyMDEyLTAxLTEzIDIxOjQ5OjQzLjMzMjg0NDg4NCAtMDgwMAorQEAgLTk0Miw3ICs5NDIsNyBAQCBzY21fc3RydWN0X2loYXNocSAoU0NNIG9iaiwgdW5zaWduZWQgbG9uCisgeworICAgLyogVGhlIGxlbmd0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaG91bGQgYmUgYSByZWxhdGl2ZSBwcmltZSBpdCdzIG5vdAorICAgICAgbmVjZXNzYXJ5IHRvIHNoaWZ0IGRvd24gdGhlIGFkZHJlc3MuICAqLworLSAgcmV0dXJuIFNDTV9VTlBBQ0sgKG9iaikgJSBuOworKyAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopICUgbjsKKyB9CisgCisgU0NNX0RFRklORSAoc2NtX3N0cnVjdF92dGFibGVfbmFtZSwgInN0cnVjdC12dGFibGUtbmFtZSIsIDEsIDAsIDAsIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjAxNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworU2VlIGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTEwMDk2Cit3aHkgdGhpcyB0ZXN0IGlzIHR1cm5lZCBvZmYuCitJbmRleDogZ3VpbGUtMi4wLjMvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjMub3JpZy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMS0xMC0xNSAwOTozNDo0MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBndWlsZS0yLjAuMy90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QJMjAxMi0wMS0xMyAyMTo1MjoxMC4yODI1NDAzNTUgLTA4MDAKK0BAIC02NSwyMyArNjUsMjMgQEAKKyAgICAgICBmb28pKSkKKyAKKyAKKy0od2l0aC10ZXN0LXByZWZpeCAiZ2MiCistICAocGFzcy1pZiAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiCistICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQorLSAgICAgICAgICAgKHRvdGFsIDEwMDApKQorLQorLSAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKKys7Oyh3aXRoLXRlc3QtcHJlZml4ICJnYyIKKys7OyAgKHBhc3MtaWYgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIgorKzs7ICAgIChsZXQqICgoZ3VhcmQgKG1ha2UtZ3VhcmRpYW4pKQorKzs7ICAgICAgICAgICAodG90YWwgMTAwMCkpCisrOzsKKys7OyAgICAgIChmb3ItZWFjaCAobGFtYmRhICh4KSAoZ3VhcmQgKG1ha2UtbW9kdWxlKSkpIChpb3RhIHRvdGFsKSkKKyAKKyAgICAgICA7OyBBdm9pZCBmYWxzZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGVzIG9uIHRoZSBzdGFjay4KKy0gICAgICAoc3RhY2stY2xlYW51cCAyMCkKKys7OyAgICAgIChzdGFjay1jbGVhbnVwIDIwKQorIAorLSAgICAgIChnYykKKy0gICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KKy0gICAgICAoZ2MpIDs7IHRocmljZTogYmVjYXVzZSB0aGUgdGVzdCBkb2Vzbid0IHN1Y2NlZWQgd2l0aCBvbmx5CisrOzsgICAgICAoZ2MpCisrOzsgICAgICAoZ2MpIDs7IHR3aWNlOiBoYXZlIHRvIGtpbGwgdGhlIHdlYWsgdmVjdG9ycy4KKys7OyAgICAgIChnYykgOzsgdGhyaWNlOiBiZWNhdXNlIHRoZSB0ZXN0IGRvZXNuJ3Qgc3VjY2VlZCB3aXRoIG9ubHkKKyAgICAgICAgICAgIDs7IG9uZSBnYyByb3VuZC4gbm90IHN1cmUgd2h5LgorIAorLSAgICAgICg9IChsZXQgbHAgKChpIDApKQorLSAgICAgICAgICAgKGlmIChndWFyZCkKKy0gICAgICAgICAgICAgICAobHAgKDErIGkpKQorLSAgICAgICAgICAgICAgIGkpKQorLSAgICAgICAgIHRvdGFsKSkpKQorKzs7ICAgICAgKD0gKGxldCBscCAoKGkgMCkpCisrOzsgICAgICAgICAgIChpZiAoZ3VhcmQpCisrOzsgICAgICAgICAgICAgICAobHAgKDErIGkpKQorKzs7ICAgICAgICAgICAgICAgaSkpCisrOzsgICAgICAgICB0b3RhbCkpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzM0ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK2xpYmd1aWxlL3ZtLWktc3lzdGVtLmM6IHdvcmthcm91bmQgaWNlIHNzYSBjb3JydXB0aW9uIHdoaWxlIGNvbXBpbGluZyB3aXRoIG9wdGlvbiAtZyAtTworCitXaGlsZSBjb21waWxpbmcgd2l0aCBvcHRpb24gLWcgLU8sIHRoZXJlIHdhcyBhIHNzYSBjb3JydXB0aW9uOgorLi4KK1VuYWJsZSB0byBjb2FsZXNjZSBzc2FfbmFtZXMgNDggYW5kIDM0NzYgd2hpY2ggYXJlIG1hcmtlZCBhcyBNVVNUIENPQUxFU0NFLgorc3BfNDgoYWIpIGFuZCAgc3BfMzQ3NihhYikKK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS1lbmdpbmUuYzogSW4gZnVuY3Rpb24gJ3ZtX2RlYnVnX2VuZ2luZSc6CitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0uYzo2NzM6MTk6IGludGVybmFsIGNvbXBpbGVyIGVycm9yOiBTU0EgY29ycnVwdGlvbgorICNkZWZpbmUgVk1fTkFNRSAgIHZtX2RlYnVnX2VuZ2luZQorICAgICAgICAgICAgICAgICAgIF4KK2d1aWxlLTIuMC4xMS9saWJndWlsZS92bS1lbmdpbmUuYzozOToxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8gJ1ZNX05BTUUnCisgVk1fTkFNRSAoU0NNIHZtLCBTQ00gcHJvZ3JhbSwgU0NNICphcmd2LCBpbnQgbmFyZ3MpCisgXgorUGxlYXNlIHN1Ym1pdCBhIGZ1bGwgYnVnIHJlcG9ydCwKK3dpdGggcHJlcHJvY2Vzc2VkIHNvdXJjZSBpZiBhcHByb3ByaWF0ZS4KK1NlZSA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbD4gZm9yIGluc3RydWN0aW9ucy4KKy4uLgorCitUd2VhayBsaWJndWlsZS92bS1pLXN5c3RlbS5jIHRvIGFkZCBib3VuZGFyeSB2YWx1ZSBjaGVjayB0byB3b3JrYXJvdW5kIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyB8IDIwICsrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJndWlsZS92bS1pLXN5c3RlbS5jIGIvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworLS0tIGEvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworKysrIGIvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYworQEAgLTYyNSwxMCArNjI1LDIyIEBAIFZNX0RFRklORV9JTlNUUlVDVElPTiAoNDcsIGJpbmRfb3B0aW9uYWxzX3NodWZmbGUsICJiaW5kLW9wdGlvbmFscy9zaHVmZmxlIiwgNiwKKyAgIC8qIG5vdyBzaHVmZmxlIHVwLCBmcm9tIHdhbGsgdG8gbnRvdGFsICovCisgICB7CisgICAgIHNjbV90X3B0cmRpZmYgbnNodWYgPSBzcCAtIHdhbGsgKyAxLCBpOworLSAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7CistICAgIENIRUNLX09WRVJGTE9XICgpOworLSAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKy0gICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07CisrICAgIC8qIGNoZWNrIHRoZSB2YWx1ZSBvZiBuc2h1ZiB0byB3b3JrYXJvdW5kIGljZSBzc2EgY29ycnVwdGlvbiAqLworKyAgICAvKiB3aGlsZSBjb21waWxpbmcgd2l0aCAtTyAtZyAqLworKyAgICBpZiAobnNodWYgPiAwKQorKyAgICB7CisrICAgICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOworKyAgICAgIENIRUNLX09WRVJGTE9XICgpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2h1ZjsgaSsrKQorKyAgICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKKysgICAgICBDSEVDS19PVkVSRkxPVyAoKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKysgICAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKKysgICAgfQorICAgfQorICAgLyogYW5kIGZpbGwgb3B0aW9uYWxzICYga2V5d29yZCBhcmdzIHdpdGggU0NNX1VOREVGSU5FRCAqLworICAgd2hpbGUgKHdhbGsgPD0gKGZwIC0gMSkgKyBudG90YWwpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9ndWlsZV8yLjAuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Njk2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiCkBAIC0wLDAgKzEsMTExIEBACitTVU1NQVJZID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gIkd1aWxlIGlzIHRoZSBHTlUgVWJpcXVpdG91cyBJbnRlbGxpZ2VudCBMYW5ndWFnZSBmb3IgRXh0ZW5zaW9ucyxcCisgdGhlIG9mZmljaWFsIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLlwKKyBHdWlsZSBpcyBhIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBwcm9ncmFtbWVycyBjcmVhdGUgZmxleGlibGUgYXBwbGljYXRpb25zLlwKKyBVc2luZyBHdWlsZSBpbiBhbiBhcHBsaWNhdGlvbiBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZnVuY3Rpb25hbGl0eSB0byBiZVwKKyBleHRlbmRlZCBieSB1c2VycyBvciBvdGhlciBwcm9ncmFtbWVycyB3aXRoIHBsdWctaW5zLCBtb2R1bGVzLCBvciBzY3JpcHRzLlwKKyBHdWlsZSBwcm92aWRlcyB3aGF0IG1pZ2h0IGJlIGRlc2NyaWJlZCBhcyAncHJhY3RpY2FsIHNvZnR3YXJlIGZyZWVkb20sJ1wKKyBtYWtpbmcgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIGN1c3RvbWl6ZSBhbiBhcHBsaWNhdGlvbiB0byBtZWV0IHRoZWlyXAorIG5lZWRzIHdpdGhvdXQgZGlnZ2luZyBpbnRvIHRoZSBhcHBsaWNhdGlvbidzIGludGVybmFscy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3VpbGUvZ3VpbGUtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcGVuc3VzZS9ndWlsZS02NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsZV8yLjAuNl9maXhfc2VkX2Vycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9lbmRpYW5uZXNzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FybV9hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3dvcmthcm91bmQtaWNlLXNzYS1jb3JydXB0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLU1ha2VmaWxlLmFtLWhvb2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliZ3VpbGUtVk0tQVNNX01VTC1mb3ItQVJNLUFkZC1lYXJseWNsb2JiZXIucGF0Y2ggXAorICAgICAgICAgICAiCisKKyMgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMS1DaGFuZ2UtZ3VpbGUtdG8tZ3VpbGUtWC5ZLWZvci1pbmZvLXBhZ2VzLnBhdGNoCisjICAgICAgICAgICBmaWxlOi8vb3BlbnN1c2UvZ3VpbGUtdHVybi1vZmYtZ2MtdGVzdC5wYXRjaAorCitTUkNfVVJJW21kNXN1bV0gPSAiMDNmMWJjZTFhNDk4MzA3NmQ5NTUwMDM0NzIzMDZhMTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWVkMGE0YTZkYjRlMzEwY2JkZmViMzYxM2ZhNmY4NmZkZGM5MWVmNjI0YzFlM2Y4OTM3YTYzMDRjNjkxMDNlMiIKKworCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB0ZXhpbmZvCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworREVQRU5EUyA9ICJsaWJ1bmlzdHJpbmcgYmR3Z2MgZ21wIGxpYnRvb2wgbGliZmZpIG5jdXJzZXMgcmVhZGxpbmUiCisjIGFkZCBndWlsZS1uYXRpdmUgb25seSB0byB0aGUgdGFyZ2V0IHJlY2lwZSdzIERFUEVORFMKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgZ3VpbGUtbmF0aXZlIGxpYmF0b21pYy1vcHMiCisKK1JERVBFTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjX2NsYXNzLXRhcmdldCA9ICJnbGliYy1nY29udi1pc284ODU5LTEiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLXdpdGhvdXQtbGlibHRkbC1wcmVmaXggLS13aXRob3V0LWxpYmdtcC1wcmVmaXggLS13aXRob3V0LWxpYnJlYWRsaW5lLXByZWZpeCcsICcnXVtiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLGQpXX0iCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAtLXdpdGgtbGlidW5pc3RyaW5nLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLWxpYmdtcC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJsdGRsLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJbWtkaXIgLXAgcG8KK30KKworZXhwb3J0IEdVSUxFX0ZPUl9CVUlMRD0iJHtCVUlMRF9TWVN9LWd1aWxlIgorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwkjIGp1c3QgZm9yIHRhcmdldCByZWNpcGUKKwlpZiBbICIke1BOfSIgPSAiZ3VpbGUiIF0KKwl0aGVuCisJCXNlZCAtaSAtZSBzOiR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczovJHtUQVJHRVRfU1lTfTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczotTC91c3IvbGliOjpnIFwKKyAgICAgICAgCSAgICAgICAtZSBzOi1pc3lzdGVtL3Vzci9pbmNsdWRlOjpnIFwKKwkgICAgICAgICAgICAgICAtZSBzOiwvdXNyL2xpYjosXCRce2xpYmRpclx9OmcgXAorCSAgICAgICAgICAgICAgICAgIG1ldGEvZ3VpbGUtMi4wLnBjCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLW0gMDc1NSAgJHtEfSR7YmluZGlyfS9ndWlsZSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndWlsZSBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tZ3VpbGUgXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID0gImd1aWxlX2Nyb3NzX2NvbmZpZyIKKworZ3VpbGVfY3Jvc3NfY29uZmlnKCkgeworCSMgdGhpcyBpcyBvbmx5IGZvciB0YXJnZXQgcmVjaXBlCisJaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCisJdGhlbgorCSAgICAgICAgIyBDcmVhdGUgZ3VpbGUtY29uZmlnIHJldHVybmluZyB0YXJnZXQgdmFsdWVzIGluc3RlYWQgb2YgbmF0aXZlIHZhbHVlcworCSAgICAgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSX0NST1NTfQorICAgICAgICAJZWNobyAnIyEnYHdoaWNoICR7QlVJTERfU1lTfS1ndWlsZWAkJyBcXFxuLS1uby1hdXRvLWNvbXBpbGUgLWUgbWFpbiAtc1xuISNcbihkZWZpbmUgJWd1aWxlLWJ1aWxkLWluZm8gJ1wnXCggXAorCQkJPiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgc2VkIC1uIC1lICdzOl5bIFx0XSp7WyBcdF0qIjogICg6JyBcCisJCQktZSAnczoiLFsgXHRdKiI6IC4gIjonIFwKKwkJCS1lICdzOiIgKn0sICpcXDoiKTonIFwKKwkJCS1lICdzOl4uKmNhY2hlZGlyLiokOjonIFwKKwkJCS1lICcvXiAgKC9wJyBcCisJCQk8ICR7Qn0vbGliZ3VpbGUvbGlicGF0aC5oID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBlY2hvICcpKScgPj4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIGNhdCAke0J9L21ldGEvZ3VpbGUtY29uZmlnID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBpbnN0YWxsICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9L2d1aWxlLWNvbmZpZworCWZpCit9CisKKyMgR3VpbGUgbmVlZHMgdGhlIGNvbXBpbGVkIGZpbGVzIHRvIGJlIG5ld2VyIHRoYW4gdGhlIHNvdXJjZSwgYW5kIGl0IHdvbid0CisjIGF1dG8tY29tcGlsZSBpbnRvIHRoZSBwcmVmaXggZXZlbiBpZiBpdCBjYW4gd3JpdGUgdGhlcmUsIHNvIHRvdWNoIHRoZW0gaGVyZSBhcworIyBzeXNyb290IGlzIG1hbmFnZWQuCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJndWlsZV9zc3RhdGVfcG9zdGluc3QiCitndWlsZV9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKyAgICAgICAgICAgICAgICBmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2xpYmRpcn0vZ3VpbGUvMi4wL2NjYWNoZSAtdHlwZSBmIHwgeGFyZ3MgdG91Y2gKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZmlsZXMvZ3VpbHQtYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE0MzllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2gKQEAgLTAsMCArMSwyODggQEAKK2d1aWx0OiBleHBsaWNpdGx5IGNhbGwgZm9yIGJhc2gKKworUnVubmluZyBjb21wbGV4IGd1aWx0IHN0YWNrcyBvZiBwYXRjaGVzL2NvbW1pdHMgY2FuIGNhdXNlIGludGVyZXN0aW5nCitmYWlsdXJlcyBhZnRlciB+MjBtIG9mIHByb2Nlc3NpbmcsIHdpdGggZXJyb3JzIGxpa2UgIkJhZCBzdWJzdGl0dXRpb24iLgorCitUaGVzZSBoYXZlIGJlZW4gdHJhY2VkIGJhY2sgdG8gaGF2aW5nIC9iaW4vc2ggLS0+ICAvYmluL2Rhc2ggb24gVWJ1bnR1CitzeXN0ZW1zLiAgUHV0dGluZyBhIHNoZWxsIHRoYXQgYWN0dWFsbHkgKndvcmtzKiAoc3VjaCBhcyAvYmluL2Jhc2gpCitpbiBhcyAvYmluL3NoIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuICBTbyBoZXJlIHdlIGNoYW5nZSB0aGUgZ3VpbHQKK3NjcmlwdHMgdG8gZXhwbGljaXRseSBjYWxsIGZvciBiYXNoIHRvIGVuc3VyZSB3ZSBkb24ndCBoYXZlIGEgc2ltaWxhcgoraXNzdWUgYWZ0ZXIgZGVwbG95bWVudC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZS1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGd1aWx0ICAgICAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtYWRkICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1hcHBsaWVkICAgICAgIHwgICAgMiArLQorIGd1aWx0LWJyYW5jaCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZGVsZXRlICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1kaWZmICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWV4cG9ydCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZmlsZXMgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1mb2xkICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWZvcmsgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZ3JhcGggICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1oZWFkZXIgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWhlbHAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaW1wb3J0ICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1pbXBvcnQtY29tbWl0IHwgICAgMiArLQorIGd1aWx0LWluaXQgICAgICAgICAgfCAgICA0ICsrLS0KKyBndWlsdC1uZXcgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LW5leHQgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcGF0Y2hib21iICAgICB8ICAgIDIgKy0KKyBndWlsdC1wb3AgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXByZXYgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcHVzaCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1yZWJhc2UgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXJlZnJlc2ggICAgICAgfCAgICAyICstCisgZ3VpbHQtcm0gICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1zZXJpZXMgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXN0YXR1cyAgICAgICAgfCAgICAyICstCisgZ3VpbHQtdG9wICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC11bmFwcGxpZWQgICAgIHwgICAgMiArLQorIDI5IGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQorCistLS0gYS9ndWlsdAorKysrIGIvZ3VpbHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYtMjAxMAorICMKKy0tLSBhL2d1aWx0LWFkZAorKysrIGIvZ3VpbHQtYWRkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtYXBwbGllZAorKysrIGIvZ3VpbHQtYXBwbGllZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWJyYW5jaAorKysrIGIvZ3VpbHQtYnJhbmNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3LTIwMDgKKyAjCistLS0gYS9ndWlsdC1kZWxldGUKKysrKyBiL2d1aWx0LWRlbGV0ZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWRpZmYKKysrKyBiL2d1aWx0LWRpZmYKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChDKSAyMDA3IEpvc2VmICdKZWZmJyBTaXBlayA8amVmZnBjQGpvc2Vmc2lwZWsubmV0PgorICMKKy0tLSBhL2d1aWx0LWV4cG9ydAorKysrIGIvZ3VpbHQtZXhwb3J0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgUGllcnJlIEhhYm91eml0LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZmlsZXMKKysrKyBiL2d1aWx0LWZpbGVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoQykgMjAwNyBZYXN1c2hpIFNIT0pJIDx5YXNoaUBhdG1hcmstdGVjaG5vLmNvbT4KKyAjCistLS0gYS9ndWlsdC1mb2xkCisrKysgYi9ndWlsdC1mb2xkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtZm9yaworKysrIGIvZ3VpbHQtZm9yaworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWdyYXBoCisrKysgYi9ndWlsdC1ncmFwaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWhlYWRlcgorKysrIGIvZ3VpbHQtaGVhZGVyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LTIwMTAKKyAjCistLS0gYS9ndWlsdC1oZWxwCisrKysgYi9ndWlsdC1oZWxwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW1wb3J0CisrKysgYi9ndWlsdC1pbXBvcnQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1pbXBvcnQtY29tbWl0CisrKysgYi9ndWlsdC1pbXBvcnQtY29tbWl0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW5pdAorKysrIGIvZ3VpbHQtaW5pdAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKK0BAIC0zMSw3ICszMSw3IEBAIHRvdWNoICIkR1VJTFRfRElSLyRicmFuY2gvc3RhdHVzIgorIAorIG1rZGlyIC1wICIkR0lUX0RJUi9ob29rcy9ndWlsdCIKKyBjYXQgPiAiJEdJVF9ESVIvaG9va3MvZ3VpbHQvZGVsZXRlIiA8PEVPRgorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIyBVc2FnZTogPHNjcmlwdD4gPHBhdGNoIGJlaW5nIHJlbW92ZWQ+CisgCisgZWNobyAiUmVtb3ZpbmcgcGF0Y2ggJ1wkMScuLi4iCistLS0gYS9ndWlsdC1uZXcKKysrKyBiL2d1aWx0LW5ldworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LW5leHQKKysrKyBiL2d1aWx0LW5leHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wYXRjaGJvbWIKKysrKyBiL2d1aWx0LXBhdGNoYm9tYgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LXBvcAorKysrIGIvZ3VpbHQtcG9wCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcHJldgorKysrIGIvZ3VpbHQtcHJldgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXB1c2gKKysrKyBiL2d1aWx0LXB1c2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1yZWJhc2UKKysrKyBiL2d1aWx0LXJlYmFzZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LXJlZnJlc2gKKysrKyBiL2d1aWx0LXJlZnJlc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1ybQorKysrIGIvZ3VpbHQtcm0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1zZXJpZXMKKysrKyBiL2d1aWx0LXNlcmllcworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXN0YXR1cworKysrIGIvZ3VpbHQtc3RhdHVzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtdG9wCisrKysgYi9ndWlsdC10b3AKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC11bmFwcGxpZWQKKysrKyBiL2d1aWx0LXVuYXBwbGllZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2d1aWx0LW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYzY4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAicXVpbHQtbGlrZSB0b29sIGZvciBHaXQiCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNmYzNDAwZGMxYTAxY2ViYWZlOGE1MmIzZjM0NDEzNSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJnaXQ6Ly9yZXBvLm9yLmN6L2d1aWx0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9ndWlsdC1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgIgorUFYgPSAiMC4zNStnaXQke1NSQ1BWfSIKK1NSQ1JFViA9ICJjMmE1YmFlNTExYzZkNTM1NGFhNGUxY2I1OTA2OWMzMWRmMmI4ZWViIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIHdlIGRvbid0IGNvbXBpbGUsIHdlIGp1c3QgaW5zdGFsbAorZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtEfS8ke3ByZWZpeH0gaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaGVscDJtYW4vaGVscDJtYW4tbmF0aXZlXzEuNDcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzZkNTBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJQcm9ncmFtIGZvciBjcmVhdGluZyBzaW1wbGUgbWFuIHBhZ2VzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAiYXV0b2NvbmYtbmF0aXZlIGF1dG9tYWtlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2Y3YWFhZWVhNDBiZmYxMTc2ZGY4MjU0MzA2OTQxNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzU5YjI2ZjYwY2IwNmU0NWIwMGU3MjlkZWE3MjFlN2ExNzIyMGUyYzE3ZDgwMGViNDI4MjcxYTc1MDM4MmIwNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbmxzIgorCisjIFdlIGRvbid0IHdhbnQgdG8gcmVjb25maWd1cmUgdGhpbmdzIGFzIGl0IHdvdWxkIHJlcXVpcmUgJ3BlcmxuYXRpdmUnIHRvIGJlCisjIHVzZWQuCitkb19jb25maWd1cmUoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBwZXJsCisJc2VkIC1pIC1lICIxczojIS4qOiMhIC91c3IvYmluL2VudiBwZXJsOiIgJHtEfSR7YmluZGlyfS9oZWxwMm1hbgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2ZpbGVzL01vZHVsZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FmNzJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsKQEAgLTAsMCArMSw3MiBAQAorIyBFRVBST01FUgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0VFUFJPTUVSX0RJUgk6PSBlZXByb21lcgorCitFRVBST01FUl9DRkxBR1MJOj0gLVdzdHJpY3QtcHJvdG90eXBlcyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdjYXN0LXF1YWwgXAorCQkgICAtV2Nhc3QtYWxpZ24gLVd3cml0ZS1zdHJpbmdzIC1XbmVzdGVkLWV4dGVybnMgLVdpbmxpbmUgXAorCQkgICAtVyAtV3VuZGVmIC1XbWlzc2luZy1wcm90b3R5cGVzIC1JaW5jbHVkZQorCitFRVBST01FUl9UQVJHRVRTCTo9IGVlcHJvbWVyIGVlcHJvbSBlZXByb2cKKworIworIyBQcm9ncmFtcworIworCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tZXI6ICQoRUVQUk9NRVJfRElSKS9lZXByb21lci5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tLm8KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyQoRUVQUk9NRVJfRElSKS9lZXByb2c6ICQoRUVQUk9NRVJfRElSKS9lZXByb2cubyAkKEVFUFJPTUVSX0RJUikvMjRjWFgubyAKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisKKyMKKyMgT2JqZWN0cworIworCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tZXIubzogJChFRVBST01FUl9ESVIpL2VlcHJvbWVyLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyQoRUVQUk9NRVJfRElSKS9lZXByb20ubzogJChFRVBST01FUl9ESVIpL2VlcHJvbS5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9nLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb2cuYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworJChFRVBST01FUl9ESVIpLzI0Y1hYLm86ICQoRUVQUk9NRVJfRElSKS8yNGNYWC5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCisjCisjIENvbW1hbmRzCisjCisKK2FsbC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCitzdHJpcC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCXN0cmlwICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKworY2xlYW4tZWVwcm9tZXI6CisJJChSTSkgJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywqLm8gJChFRVBST01FUl9UQVJHRVRTKSkKKworaW5zdGFsbC1lZXByb21lcjogJChhZGRwcmVmaXggJChFRVBST01FUl9ESVIpLywkKEVFUFJPTUVSX1RBUkdFVFMpKQorCSQoSU5TVEFMTF9ESVIpICQoREVTVERJUikkKHNiaW5kaXIpICQoREVTVERJUikkKG1hbjhkaXIpCisJZm9yIHByb2dyYW0gaW4gJChFRVBST01FUl9UQVJHRVRTKSA7IGRvIFwKKwkkKElOU1RBTExfUFJPR1JBTSkgJChFRVBST01FUl9ESVIpLyQkcHJvZ3JhbSAkKERFU1RESVIpJChzYmluZGlyKSA7IGRvbmUKKwordW5pbnN0YWxsLWVlcHJvbWVyOgorCWZvciBwcm9ncmFtIGluICQoRUVQUk9NRVJfVEFSR0VUUykgOyBkbyBcCisJJChSTSkgJChERVNURElSKSQoc2JpbmRpcikvJCRwcm9ncmFtIDsgXAorCSQoUk0pICQoREVTVERJUikkKG1hbjhkaXIpLyQkcHJvZ3JhbS44IDsgZG9uZQorCithbGw6IGFsbC1lZXByb21lcgorCitzdHJpcDogc3RyaXAtZWVwcm9tZXIKKworY2xlYW46IGNsZWFuLWVlcHJvbWVyCisKK2luc3RhbGw6IGluc3RhbGwtZWVwcm9tZXIKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtZWVwcm9tZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9pMmMtdG9vbHNfMy4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmNGQ2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiU2V0IG9mIGkyYyB0b29scyBmb3IgbGludXgiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kbC5sbS1zZW5zb3JzLm9yZy9pMmMtdG9vbHMvcmVsZWFzZXMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9Nb2R1bGUubWsgXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjcxMDRhMTA0M2QxMWE1ZTJjN2IxMzE2MTRlYjFiOTYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiNWU2OWYyZTJhNmUzYWEyZWNkZmU2YTVmNDkwYjE0OWM1MDQ0Njg3NzBmNTg5MjFjOGM1YjhhNzg2MGE0NDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgY3AgJHtXT1JLRElSfS9Nb2R1bGUubWsgJHtTfS9lZXByb21lci8KKyAgICBzZWQgLWkgJ3MjL3Vzci9sb2NhbCMvdXNyIycgJHtTfS9NYWtlZmlsZQorICAgIGVjaG8gImluY2x1ZGUgZWVwcm9tZXIvTW9kdWxlLm1rIiA+PiAke1N9L01ha2VmaWxlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vbGludXgKKyAgICBpbnN0YWxsIC1tIDA2NDQgaW5jbHVkZS9saW51eC9pMmMtZGV2LmggJHtEfSR7aW5jbHVkZWRpcn0vbGludXgvaTJjLWRldi11c2VyLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saW51eC9pMmMtZGV2LmgKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7c2JpbmRpcn0vaTJjLXN0dWItZnJvbS1kdW1wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZGNtb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS1lZGlkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtZGltbXMgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RlY29kZS12YWlvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LW1pc2MiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJwZXJsIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjRhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJpY2VjYyBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgaWNlY2MtY3JlYXRlLWVudiBzY3JpcHQgdGhhdCBoYXMgXAorYmVlbiBtb2RpZmllZCBpbiBvcmRlciB0byBtYWtlIGl0IHdvcmsgd2l0aCBPRS4iCitTRUNUSU9OID0gImJhc2UiCisjIHNvdXJjZSBmaWxlIGhhcyBqdXN0IGEgIkdQTCIgd29yZCwgYnV0IHVwc3RyZWFtIGlzIEdQTHYyKy4KKyMgbW9zdCBwcm9iYWJseSBqdXN0IEdQTCB3b3VsZCBiZSBhIG1pc3Rha2UKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaWNlY2MtY3JlYXRlLWVudjtiZWdpbmxpbmU9MjtlbmRsaW5lPTU7bWQ1PWFlMWRmM2Q2YTA1OGJmZGE0MGI2NjA5NGM1ZjYwNjVmIgorCitQUiA9ICJyMiIKKworREVQRU5EUyA9ICIiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitpbmhlcml0IG5hdGl2ZQorCisjIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlIG90aGVyd2lzZSB0aGVyZSBpcyBkZXBlbmRlbmN5IGxvb3AgZnJvbSBxdWlsdC1uYXRpdmUKKyMgRGVwZW5kZW5jeSBsb29wICMxIGZvdW5kOgorIyAgVGFzayAxMDkwNyAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19pbnN0YWxsKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19jb21waWxlJ10pCisjICBUYXNrIDEwOTA4IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX3BvcHVsYXRlX3N5c3Jvb3QpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2luc3RhbGwnXSkKKyMgIFRhc2sgMTA5OTcgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fcGF0Y2gpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fdW5wYWNrJywgJ3F1aWx0LW5hdGl2ZSwgZG9fcG9wdWxhdGVfc3lzcm9vdCddKQorIyAgVGFzayAxMTAwMSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19jb25maWd1cmUpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fcGF0Y2gnXSkKKyMgIFRhc2sgMTEwMDIgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fY29tcGlsZSkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19jb25maWd1cmUnXSkKKyMgIFRhc2sgMTA5OTggKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9faW5zdGFsbCkgKGRlcGVuZGVudCBUYXNrcyBbJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19jb21waWxlJ10pCisjICBUYXNrIDEwOTk5IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX3BvcHVsYXRlX3N5c3Jvb3QpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9faW5zdGFsbCddKQorIyAgVGFzayAxMDkxMCAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19jb25maWd1cmUpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX3BhdGNoJywgJ2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlLCBkb19wb3B1bGF0ZV9zeXNyb290J10pCisjICBUYXNrIDEwOTExIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjAuYmIsIGRvX2NvbXBpbGUpIChkZXBlbmRlbnQgVGFza3MgWydxdWlsdC1uYXRpdmUsIGRvX2NvbmZpZ3VyZSddKQorUEFUQ0hUT09MID0gInBhdGNoIgorU1JDX1VSSSA9ICJmaWxlOi8vaWNlY2MtY3JlYXRlLWVudiIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pY2VjYy1jcmVhdGUtZW52ICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2U0ZGJjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudgpAQCAtMCwwICsxLDE5MiBAQAorIyEgL3Vzci9iaW4vZW52IGJhc2gKKyMgaWNlY2MgLS0gQSBzaW1wbGUgZGlzdHJpYnV0ZWQgY29tcGlsZXIgc3lzdGVtCisjCisjIENvcHlyaWdodCAoQykgMjAwNCBieSB0aGUgSWNlY3JlYW0gQXV0aG9ycworIyBHUEwKKwordGFyZ2V0X2ZpbGVzPQorCitpc19jb250YWluZWQgKCkKK3sKKyAgY2FzZSAiICR0YXJnZXRfZmlsZXMgIiBpbgorICAgICoiICQxICIqICkgcmV0dXJuIDAgOzsKKyAgICAqIj0kMSAiKiApIHJldHVybiAwOzsKKyAgICAqICkgcmV0dXJuIDEgOzsKKyAgZXNhYworfQorCithZGRfZmlsZSAoKQoreworICBsb2NhbCBuYW1lPSIkMSIKKyAgbG9jYWwgcGF0aD0iJDEiOworICBpZiB0ZXN0IC1uICIkMiI7IHRoZW4KKyAgICBuYW1lPSIkMiIKKyAgZmkKKyAgdGVzdCAteiAiJG5hbWUiICYmIHJldHVybgorICAjIGxzIC1IIGlzbid0IHJlYWxseSB0aGUgc2FtZSBhcyByZWFkbGluaywgYnV0CisgICMgcmVhZGxpbmsgaXMgbm90IHBvcnRhYmxlIGVub3VnaC4KKyAgcGF0aD1gbHMgLUggJHBhdGhgCisgIHRvYWRkPSIkbmFtZT0kcGF0aCIKKyAgaXNfY29udGFpbmVkICIkdG9hZGQiICYmIHJldHVybgorICBpZiB0ZXN0IC16ICIkc2lsZW50IjsgdGhlbgorICBlY2hvICJhZGRpbmcgZmlsZSAkdG9hZGQiCisgIGZpCisgIHRhcmdldF9maWxlcz0iJHRhcmdldF9maWxlcyAkdG9hZGQiCisgIGlmIHRlc3QgLXggIiRwYXRoIjsgdGhlbgorICAgICMgT25seSBjYWxsIGxkZCB3aGVuIGl0IG1ha2VzIHNlbnNlCisgICAgaWYgZmlsZSAtTCAiJHBhdGgiIHwgZ3JlcCAnRUxGJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJaWYgISBmaWxlIC1MICIkcGF0aCIgfCBncmVwICdzdGF0aWMnID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAjIGxkZCBub3cgb3V0cHV0cyBsZCBhcyAvbGliL2xkLWxpbnV4LnNvLnh4IG9uIGN1cnJlbnQgbnB0bCBiYXNlZCBnbGliYworCQkjIHRoaXMgcmVnZXhwIHBhcnNlIHRoZSBvdXRwdXRzIGxpa2U6CisJCSMgbGRkIC91c3IvYmluL2djYworCQkjICAgICAgICAgbGludXgtZ2F0ZS5zby4xID0+ICAoMHhmZmZmZTAwMCkKKwkJIyAgICAgICAgIGxpYmMuc28uNiA9PiAvbGliL3Rscy9saWJjLnNvLjYgKDB4YjdlODEwMDApCisJCSMgICAgICAgICAvbGliL2xkLWxpbnV4LnNvLjIgKDB4YjdmZTgwMDApCisJCSMgY292ZXJpbmcgYm90aCBzaXR1YXRpb25zICggd2l0aCA9PiBhbmQgd2l0aG91dCApCisgICAgICAgICAgZm9yIGxpYiBpbiBgbGRkICIkcGF0aCIgfCBzZWQgLW4gJ3MsXlteL10qXCgvW14gXSpcKS4qLFwxLHAnYDsgZG8KKwkgICAgdGVzdCAtZiAiJGxpYiIgfHwgY29udGludWUKKwkgICAgIyBDaGVjayB3ZXRoZXIgdGhlIHNhbWUgbGlicmFyeSBhbHNvIGV4aXN0cyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwKKwkgICAgIyBhbmQgcHJlZmVyIHRoYXQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBpcyBhIG1vcmUgZ2VuZXJpYyBvbmUuCisJICAgIGxvY2FsIGJhc2VsaWI9YGVjaG8gIiRsaWIiIHwgc2VkICdzLFwoL1teL10qXCkvLipcKC9bXi9dKlwpJCxcMVwyLCdgCisJICAgIHRlc3QgLWYgIiRiYXNlbGliIiAmJiBsaWI9JGJhc2VsaWIKKwkgIGFkZF9maWxlICIkbGliIgorICAgICAgICBkb25lCisgICAgICBmaQorICAgIGZpCisgIGZpCit9CisKKyMgYmFja3dhcmQgY29tcGF0CitpZiB0ZXN0ICIkMSIgPSAiLS1yZXNwZWN0LXBhdGgiOyB0aGVuCisgIHNoaWZ0CitmaQorCisjYWRkIGEgLS1zaWxlbnQgc3dpdGNoIHRvIGF2b2lkICJicm9rZW4gcGlwZSIgZXJyb3JzIHdoZW4gY2FsbGluZyB0aGlzIHNjaXB0IGZyb20gd2l0aGluIE9FCitpZiB0ZXN0ICIkMSIgPSAiLS1zaWxlbnQiOyB0aGVuCisgc2lsZW50PTEKKyBzaGlmdAorZmkKKworCithZGRlZF9nY2M9JDEKK3NoaWZ0CithZGRlZF9neHg9JDEKK3NoaWZ0CithZGRlZF9hcz0kMQorc2hpZnQKK2FyY2hpdmVfbmFtZT0kMQorCitpZiB0ZXN0IC16ICIkYWRkZWRfZ2NjIiB8fCB0ZXN0IC16ICIkYWRkZWRfZ3h4IiA7IHRoZW4KKwllY2hvICJ1c2FnZTogJDAgPGdjY19wYXRoPiA8ZysrX3BhdGg+IgorCWV4aXQgMQorZmkKKworaWYgISB0ZXN0IC14ICIkYWRkZWRfZ2NjIiA7IHRoZW4KKyAgZWNobyAiJyRhZGRlZF9nY2MnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKK2ZpCisKK2lmICEgdGVzdCAteCAiJGFkZGVkX2d4eCIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfZ2NjJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCitmaQorCisKKworYWRkX2ZpbGUgJGFkZGVkX2djYyAvdXNyL2Jpbi9nY2MKK2FkZF9maWxlICRhZGRlZF9neHggL3Vzci9iaW4vZysrCisKK2lmIHRlc3QgLXogIiRhZGRlZF9hcyIgOyB0aGVuCisgYWRkX2ZpbGUgL3Vzci9iaW4vYXMgL3Vzci9iaW4vYXMKK2Vsc2UKKyBpZiAhIHRlc3QgLXggIiRhZGRlZF9hcyIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfYXMnIGlzIG5vIGV4ZWN1dGFibGUuIgorICBleGl0IDEKKyBmaQorCisgYWRkX2ZpbGUgJGFkZGVkX2FzICAvdXNyL2Jpbi9hcworZmkKKworYWRkX2ZpbGUgYCRhZGRlZF9nY2MgLXByaW50LXByb2ctbmFtZT1jYzFgIC91c3IvYmluL2NjMQorYWRkX2ZpbGUgYCRhZGRlZF9neHggLXByaW50LXByb2ctbmFtZT1jYzFwbHVzYCAvdXNyL2Jpbi9jYzFwbHVzCitzcGVjZmlsZT1gJGFkZGVkX2djYyAtcHJpbnQtZmlsZS1uYW1lPXNwZWNzYAoraWYgdGVzdCAtbiAiJHNwZWNmaWxlIiAmJiB0ZXN0IC1lICIkc3BlY2ZpbGUiOyB0aGVuCisgIGFkZF9maWxlICIkc3BlY2ZpbGUiCitmaQorCitsdG9maWxlPWAkYWRkZWRfZ2NjIC1wcmludC1wcm9nLW5hbWU9bHRvMWAKK3BsdWdpbmZpbGU9IiR7bHRvZmlsZSVsdG8xfWxpYmx0b19wbHVnaW4uc28iCitpZiB0ZXN0IC1yICIkcGx1Z2luZmlsZSIKK3RoZW4KKyAgYWRkX2ZpbGUgJHBsdWdpbmZpbGUgICR7cGx1Z2luZmlsZSMqdXNyfQorICBhZGRfZmlsZSAkcGx1Z2luZmlsZSAgL3VzciR7cGx1Z2luZmlsZSMqdXNyfQorZmkKKwordGVtcGRpcj1gbWt0ZW1wIC1kIC90bXAvaWNlY2NlbnZYWFhYWFhgCituZXdfdGFyZ2V0X2ZpbGVzPQorZm9yIGkgaW4gJHRhcmdldF9maWxlczsgZG8KKyBjYXNlICRpIGluCisgICAqPS8qKQorICAgIHRhcmdldD1gZWNobyAkaSB8IGN1dCAtZD0gLWYxYAorICAgIHBhdGg9YGVjaG8gJGkgfCBjdXQgLWQ9IC1mMmAKKyAgICA7OworICAgKikKKyAgICBwYXRoPSRpCisgICAgdGFyZ2V0PSRpCisgICAgOzsKKyAgZXNhYworICBta2RpciAtcCAkdGVtcGRpci9gZGlybmFtZSAkdGFyZ2V0YAorICBjcCAtcCAkcGF0aCAkdGVtcGRpci8kdGFyZ2V0CisgIGlmIHRlc3QgLWYgJHRlbXBkaXIvJHRhcmdldCAtYSAteCAkdGVtcGRpci8kdGFyZ2V0OyB0aGVuCisgICAgc3RyaXAgLXMgJHRlbXBkaXIvJHRhcmdldCAyPi9kZXYvbnVsbAorICBmaQorICB0YXJnZXQ9YGVjaG8gJHRhcmdldCB8IGN1dCAtYjItYAorICBuZXdfdGFyZ2V0X2ZpbGVzPSIkbmV3X3RhcmdldF9maWxlcyAkdGFyZ2V0IgorZG9uZQorCisjc29ydCB0aGUgZmlsZXMKK3RhcmdldF9maWxlcz1gZm9yIGkgaW4gJG5ld190YXJnZXRfZmlsZXM7IGRvIGVjaG8gJGk7IGRvbmUgfCBzb3J0YAorCisjdGVzdCBpZiBhbiBhcmNoaXZlIG5hbWUgd2FzIHN1cHBsaWVkCisjaWYgbm90IHVzZSB0aGUgbWQ1IG9mIGFsbCBmaWxlcyBhcyB0aGUgYXJjaGl2ZSBuYW1lCitpZiB0ZXN0IC16ICIkYXJjaGl2ZV9uYW1lIjsgdGhlbgorICBtZDVzdW09Tk9ORQorICBmb3IgZmlsZSBpbiAvdXNyL2Jpbi9tZDVzdW0gL2Jpbi9tZDUgL3Vzci9iaW4vbWQ1OyBkbworICAgIGlmIHRlc3QgLXggJGZpbGU7IHRoZW4KKyAgICAgIG1kNXN1bT0kZmlsZQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisKKyAgI2NhbGN1bGF0ZSBtZDUgYW5kIHVzZSBpdCBhcyB0aGUgYXJjaGl2ZSBuYW1lCisgIGFyY2hpdmVfbmFtZT1gZm9yIGkgaW4gJHRhcmdldF9maWxlczsgZG8gdGVzdCAtZiAkdGVtcGRpci8kaSAmJiAkbWQ1c3VtICR0ZW1wZGlyLyRpOyBkb25lIHwgc2VkIC1lICdzLyAuKiQvLycgfCAkbWQ1c3VtIHwgc2VkIC1lICdzLyAuKiQvLydgLnRhci5neiB8fCB7CisgICAgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgICAgZWNobyAiQ291bGRuJ3QgY29tcHV0ZSBNRDUgc3VtLiIKKyAgICBmaQorICAgIGV4aXQgMgorICB9CisgIG15ZGlyPWBwd2RgCitlbHNlCisgIG15ZGlyPSJgZGlybmFtZSAiJGFyY2hpdmVfbmFtZSJgIgorCisgICNjaGVjayBpZiB3ZSBoYXZlIGEgZnVsbCBwYXRoIG9yIG9ubHkgYSBmaWxlbmFtZQorICBpZiB0ZXN0ICIkbXlkaXIiID0gIi4iIDsgdGhlbgorICAgIG15ZGlyPWBwd2RgCisgIGVsc2UKKyAgICBteWRpcj0iIgorICBmaQorZmkKKworaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KK2VjaG8gImNyZWF0aW5nICRhcmNoaXZlX25hbWUiCitmaQorCitjZCAkdGVtcGRpcgordGFyIC1jemhmICIkbXlkaXIvJGFyY2hpdmVfbmFtZSIgJHRhcmdldF9maWxlcyB8fCB7CisgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgZWNobyAiQ291bGRuJ3QgY3JlYXRlIGFyY2hpdmUiCisgZmkKKyAgZXhpdCAzCit9CitjZCAuLgorcm0gLXJmICR0ZW1wZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNvbi1uYW1pbmctdXRpbHMvaWNvbi1uYW1pbmctdXRpbHNfMC44LjkwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjM1NmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkVuYWJsZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGRlc2t0b3AgaWNvbiB0aGVtZXMiCitERVNDUklQVElPTiA9ICJBIFBlcmwgc2NyaXB0IHVzZWQgZm9yIG1haW50YWluaW5nIGJhY2t3YXJkcyBcCitjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCBkZXNrdG9wIGljb24gdGhlbWVzLCB3aGlsZSBtaWdyYXRpbmcgdG8gdGhlIFwKK25hbWVzIHNwZWNpZmllZCBpbiB0aGUgSWNvbiBOYW1pbmcgU3BlY2lmaWNhdGlvbi4gVGhlIEljb24gTmFtaW5nIFwKK1V0aWxpdGllcyBtYXAgdGhlIGljb24gbmFtZXMgdXNlZCBieSB0aGUgR05PTUUgYW5kIEtERSBkZXNrdG9wcyB0byB0aGUgXAoraWNvbiBuYW1lcyBwcm9wb3NlZCBpbiB0aGUgSWNvbiBOYW1pbmcgU3BlY2lmaWNhdGlvbiwgYW5kIGdlbmVyYXRlIHRoZSBcCitpY29uIGZpbGVzIGFwcHJvcHJpYXRlIHRvIHRoZSBkZXNrdG9wIGVudmlyb25tZW50IHlvdSB1c2UuIFRoZSBJY29uIFwKK05hbWluZyBTcGVjaWZpY2F0aW9uIHByb3ZpZGVzIGEgc3RhbmRhcmQgbGlzdCBvZiBjb21tb24gaWNvbiBjb250ZXh0cyBcCithbmQgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIGljb24gdGhlbWVzIHdvcmsgaW4gYSBkZXNrdG9wIFwKK2Vudmlyb25tZW50IG9yIGFwcGxpY2F0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgbmFtaW5nIHNwZWNpZmljYXRpb24uICIKK0xJQ0VOU0UgPSAiR1BMdjIiCitERVBFTkRTID0gImxpYnhtbC1zaW1wbGUtcGVybC1uYXRpdmUiCitQUiA9ICJyNSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3RhbmdvLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9pY29uLW5hbWluZy11dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMmM1YzdhNDE4ZTVlYjMyNjhmNjVlMjE5OTMyNzdmYmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDQ0YWIyMTk5ZWQ4YzZhNTVjZTM2ZmQ0ZmNkOGI4MDIxYTVlMjFmNWJhYjAyOGMwYTdjZGNmNTJhNTkwMmUxYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYWxsYXJjaCBwZXJsbmF0aXZlCisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJIyBNYWtlIHN1cmUgd2UgdXNlIG91ciBuYXRpdmVwZXJsIHdyYXBwZXIuCisJc2VkIC1pIC1lICIxczojIS4qOiMhL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmw6IiAke1N9L2ljb24tbmFtZS1tYXBwaW5nLnBsLmluCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2R0ZHMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOGNmYjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIKQEAgLTAsMCArMSw0MjAgQEAKKyMhL2Jpbi9iYXNoCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKwordXNhZ2UgKCkKK3sKKworICBJTlNUX0FSQ0g9YHVuYW1lIC1tYAorICBJTlNUX09TPWB1bmFtZSAtb3wgdHIgJ1tBLVpdJyAnW2Etel0nYAorICBJTlNUX0tSPWB1bmFtZSAtcnwgdHIgJ1tBLVpdJyAnW2Etel0nYAorCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFdlbGNvbWUgdG8gWW9jdG8gQXBwbGljYXRpb24gRGV2ZWxvcGVtZW50IFRvb2xzIChBRFQpIEluc3RhbGxlciIKKyAgZWNob19pbmZvICIjICIKKyAgZWNob19pbmZvICIjIEhvc3QgTWFjaGluZTpcdFx0XHRcdCIkSU5TVF9BUkNICisgIGVjaG9faW5mbyAiIyBPUyBpbmZvOlx0XHRcdFx0JElOU1RfS1IiICAKKyAgZWNob19pbmZvICIjIFlvY3RvIEFEVCB2ZXJzaW9uIHRvIGJlIGluc3RhbGxlZDpcdCRZT0NUT0FEVF9WRVJTSU9OIgorICBlY2hvX2luZm8gIiMgc3VwcG9ydGVkIHRhcmdldCBhcmNoaXRlY3R1cmVzOlx0JFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTIgorICBlY2hvX2luZm8gIiMgc3VwcG9ydGVkIHRhcmdldCByb290X2ZzIGltYWdlczpcdCRZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKworICBlY2hvX2luZm8gIlN5c3RlbXdpZGUgaW5zdGFsbGF0aW9uLiBJbnN0YWxsYXRpb24gd2lsbCBvY2N1ciB1bmRlciAkSU5TVEFMTF9GT0xERVJcbiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgWW91ciBzeXN0ZW0gaW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb25zIGZyb20gYWR0X2luc3RhbGxlci5jb25mIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisKKyAgZWNob19pbmZvICIjIENyb3NzIHRvb2xjaGFpbnM6XHRcdCRZT0NUT0FEVF9UQVJHRVRTIgorICBlY2hvX2luZm8gIiMgSW5zdGFsbCBRZW11Olx0XHRcdCRZT0NUT0FEVF9RRU1VIgorICBlY2hvX2luZm8gIiMgSW5zdGFsbCBORlMgdXRpbGl0aWVzOlx0JFlPQ1RPQURUX05GU19VVElMIgorICAjZWNob19pbmZvICIjIEluc3RhbGwgYml0YmFrZSArIFVJOlx0XHQkWU9DVE9BRFRfQklUQkFLRSIKKyAgI2VjaG9faW5mbyAiIyBJbnN0YWxsIG1ldGFkYXRhOlx0JFlPQ1RPQURUX01FVEFEQVRBIgorICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisKKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBZb3VyIHJvb3RmcyBpbWFnZShzKSBhbmQgdGFyZ2V0IHN5c3Jvb3Qgc2VsZWN0aW9ucyBmcm9tIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKK3Byb21wdD0xCitmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBkb3dubG9hZF9pbWFnZXMgJGFyY2hfdHlwZSAkcHJvbXB0Citkb25lCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIHNlbGVjdF9pbnN0YWxsX3R5cGUKK30KKwordmFsaWRhdGVfY29uZmlnKCkKK3sKKworICBmb3Igc2VsZWN0ZWRfYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICAgIGZvdW5kPTAKKyAgICBzZWxlY3RfbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHNlbGVjdGVkX2FyY2hfdHlwZSIKKyAgICBzZWxlY3RfbWFjaGluZT1gZXZhbCBlY2hvICRzZWxlY3RfbWFjaGluZV92YXJgCisgICAgc2hvd19lcnJvcl9iYW5uZXI9MAorCisgICAgZm9yIHN1cHBvcnRlZF9hcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTOyBkbworICAgICAgaWYgWyAiJHNlbGVjdGVkX2FyY2hfdHlwZSIgPT0gIiRzdXBwb3J0ZWRfYXJjaF90eXBlIiBdOyB0aGVuCisgICAgICAgIGZvdW5kPTEKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVEFEVF9UQVJHRVRTIGluIGFkdF9pbnN0YWxsZXIuY29uZiBjb250YWlucyBpbnZhbGlkIGVudHJpZXM6ICRZT0NUT0FEVF9UQVJHRVRTLiBWYWxpZCB2YWx1ZXMgYXJlOiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFMiCisgICAgICAgc2hvd19lcnJvcl9iYW5uZXI9MQorICAgIGVsaWYgWyAteiAiJHNlbGVjdF9tYWNoaW5lIiBdOyB0aGVuCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBObyBNQUNISU5FIHdhcyBkZWZpbmVkIGZvciAkc2VsZWN0ZWRfYXJjaF90eXBlIGFyY2hpdGVjdHVyZSEgVGhpcyBpcyBuZWVkZWQgdG8gaW5zdGFsbCB0aGUgdG9vbGNoYWluIGFuZCB0aGUgY29ycmVjdCBlbnZpcm9ubWVudCBzZXR0aW5ncy4iCisgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIFRvIGRvIHRoYXQsIGluIGFkdC1pbnN0YWxsZXIuY29uZiwgc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6IFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyRzZWxlY3RlZF9hcmNoX3R5cGUiCisgICAgICAgc2hvd19lcnJvcl9iYW5uZXI9MQorICAgIGZpCisKKyAgICBpZiBbICRzaG93X2Vycm9yX2Jhbm5lciA9PSAxIF07IHRoZW4KKyAgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgIGV4aXQgLTEKKyAgICBmaQorICBkb25lCisKKyAgZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFM7IGRvCisgICAgI3NlbGVjdF90YXJnZXRfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF8kYXJjaF90eXBlIgorICAgICNzZWxlY3RfdGFyZ2V0PWBldmFsIGVjaG8gJHNlbGVjdF90YXJnZXRfdmFyYAorCisgICAgI2lmIFsgIiRzZWxlY3RfdGFyZ2V0IiAhPSAiWSIgXSB8fCBbICIkc2VsZWN0ZWRfdGFyZ2V0IiAhPSAieSIgXTsgdGhlbgorICAgICMgIGNvbnRpbnVlOworICAgICNmaQorCisgICAgdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyRhcmNoX3R5cGUiCisgICAgdGFyZ2V0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyYAorCisKKyAgICBzZWxlY3Rfcm9vdGZzX3Zhcj0iXCRZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSIKKyAgICBzZWxlY3Rfcm9vdGZzPWBldmFsIGVjaG8gJHNlbGVjdF9yb290ZnNfdmFyYAorCisgICAgaWYgWyAiJHNlbGVjdF9yb290ZnMiID09ICIiIF0gJiYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiIiBdOyB0aGVuCisgICAgICAgY29udGludWU7CisgICAgZmkKKworICAgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworI3ZhbGlkYXRlIHJvb3RmcyB0eXBlIGRlZmluZWQgaW4gWU9DVE9BRFRfUk9PVEZTX3tBUkNIfSBpcyB2YWxpZCBhbmQgaW4gWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUworICAgICAgZm91bmQ9MAorICAgICAgZm9yIHN1cHBvcnRlZF9yb290ZnNfdHlwZSBpbiAkWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUzsgZG8KKyAgICAgICAgaWYgWyAiJGltYWdlX3R5cGUiID09ICIkc3VwcG9ydGVkX3Jvb3Rmc190eXBlIiBdOyB0aGVuCisgICAgICAgICAgZm91bmQ9MQorICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyN0aGUgcm9vdGZzIHR5cGUgbGlzdGVkIGZvciBkb3dubG9hZGluZyBpcyBub3QgdmFsaWQKKyAgICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBTZWxlY3RlZCBZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSB2YWx1ZTogJGltYWdlX3R5cGUsIGlzIG5vdCB2YWxpZCEgVmFsaWQgdmFsdWVzIGFyZTogJFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlMgIgorICAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgICAgIGV4aXQgLTEKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZm91bmQ9MAorICAgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworI3ZhbGlkYXRlIHRoYXQgcm9vdGZzIHRvIGJlIGV4dHJhY3RlZCBtdXN0IGJlIGluIHRoZSBpdGVtOiBZT0NUT0FEVF9ST09URlNfJHtBUkNIfQorICAgICAgaWYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiJGltYWdlX3R5cGUiIF07IHRoZW4KKyAgICAgICAgZm91bmQ9MQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisjIHRoZSByb290ZnMgaW1hZ2UgdG8gYmUgZXh0cmFjdGVkIGlzIG5vdCBzZWxlY3RlZAorICAgIGlmIFsgJGZvdW5kID09IDAgXTsgdGhlbgorICAgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kYXJjaF90eXBlIHNlbGVjdGlvbjogJHRhcmdldF9zeXNyb290X2ltYWdlIGlzIG5vdCBpbmNsdWRlZCBpbiBZT0NUT0FEVF9ST09URlNfJGFyY2hfdHlwZSBzZWxlY3Rpb25zOiAkc2VsZWN0X3Jvb3RmcyIKKyAgICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgZXhpdCAtMQorICAgIGZpCisgIGRvbmUKK30KKworCisjZGV0ZWN0IG9wa2cgaW5zdGFsbGVkIG9yIG5vdCwgZm9yIGluc3RhbGxpbmcgc2RrLCB3ZSB3aWxsIHVzZQorI3RoaXMgaW5zdGFsbGVkIGxvY2FsIG9wa2cKK2luc3RhbGxfb3BrZygpCit7CitpZiBbICEgLXggIiRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIgXTsgdGhlbgorICBlY2hvX2luZm8gIk9QS0cgaXMgbm90IHNldHVwLCBzZXR0aW5nIHVwIG9wa2cgaW4gbG9jYWwsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBpbnN0YWxsaW5nIHlvY3RvIEFEVC4uLlxuIgorCisgIGlmIFsgLWQgJExPQ0FMX09QS0dfTE9DIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIkRlbGV0aW5nIG9sZCBPUEtHIGZvbGRlciwgd2hpY2ggZG9lc24ndCBjb250YWluIGV4ZWN1dGFibGVzLi4uICIKKyAgICBybSAtcmYgJExPQ0FMX09QS0dfTE9DCisgIGZpCisKKyAgcGFyZW50X2ZvbGRlcj1gcHdkYAorICBjZCAkTE9DQUxfT1BLR19GT0xERVIKKyAgY2hlY2tfcmVzdWx0CisKKyAgb3BrZ19zb3VyY2VfZGlyPWBscyAtZCBvcGtnLSpgCisKKyAgaWYgWyAkb3BrZ19zb3VyY2VfZGlyID09ICIiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IE9QS0cgc291cmNlIGRpcmVjdG9yeSBpcyBub3QgZm91bmQhIgorICAgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAtMQorICBmaQorCisgIGNkICRvcGtnX3NvdXJjZV9kaXIKKyAgY2hlY2tfcmVzdWx0CisKKyAgZWNob19pbmZvICJDb25maWd1cmUgb3BrZyAuLi5cbiIKKyAgYXV0b3JlY29uZiAtaQorICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0kcGFyZW50X2ZvbGRlci8kTE9DQUxfT1BLR19MT0MgLS1lbmFibGUtc2hhcmVkPW5vIC0tZGlzYWJsZS1jdXJsIC0tZGlzYWJsZS1zc2wtY3VybCAtLWRpc2FibGUtZ3BnID4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorCisgIGVjaG9faW5mbyAiTWFrZSBvcGtnIC4uLlxuIgorICBtYWtlICY+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKworICBlY2hvX2luZm8gIk1ha2UgSW5zdGFsbCBvcGtnIC4uLlxuIgorICBtYWtlIGluc3RhbGwgJj4+ICRwYXJlbnRfZm9sZGVyLyRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgICNpZiBtZWV0IGVycm9yIHdoZW4gaW5zdGFsbGluZyBvcGtnLCBjYW5jZWwgdGhlIGluc3RhbGxhdGlvbgorICBjaGVja19yZXN1bHQKKworICBjZCAkcGFyZW50X2ZvbGRlcgorICBlY2hvX2luZm8gIlN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgT1BLRy5cbiIKK2ZpCit9CisKK2NvbmZpcm1fZG93bmxvYWQoKQoreworI2F2b2lkIHJlcGVhdGVkIHJlbWluZGluZworaWYgWyAiJG92ZXJyaWRlX29sZGZpbGUiID09IDEgXTsgdGhlbgorICByZXR1cm4gJHByZV9yZXN1bHQKK2Vsc2UKKyAgb3ZlcnJpZGVfb2xkZmlsZT0xCitmaQorCit3aGlsZSB0cnVlOyBkbworICAjZWNob19pbmZvICJbQURUX0lOU1RdIEZpbGVzIFskMV0gYWxyZWFkeSBleGlzdHMuIElmIHlvdSBjb250aW51ZSBkb3dubG9hZGluZywgb2xkIGZpbGVzIHdpbGwgYmUgb3ZlcnJpZGVkLiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBGdXJ0aGVyIHByb21wdHMgd2lsbCBub3QgYmUgZ2l2ZW4gaWYgdGhlcmUncmUgbW9yZSBleGlzdGluZyBmaWxlcyB0byBiZSBkb3dubG9hZGVkLiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBkb3dubG9hZGluZz8gUGxlYXNlIGVudGVyIFkvTjoiCisgIGVjaG9faW5mbyAiXG5GaWxlIFskMV0gYWxyZWFkeSBleGlzdHMsIHdoaWNoIG1lYW5zIHlvdSd2ZSBkb3dubG9hZGVkIHRoZSBxZW11IGtlcm5lbCBhbmQgcm9vdGZzIGZpbGUocykgYmVmb3JlLiAgSWYgeW91IGNob29zZSBjb250aW51ZSBkb3dubG9hZGluZywgb2xkIGZpbGVzIHdpbGwgYmUgb3ZlcnJpZGRlbi4iCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBEbyB5b3Ugd2FudCB0byBjb250aW51ZSBkb3dubG9hZGluZz8gUGxlYXNlIGVudGVyIFkvTjoiCisgIHJlYWQgWU9DVE9BRFRfSU5TVEFMTAorICBZT0NUT0FEVF9JTlNUQUxMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX0lOU1RBTEwiYAorICBpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIlkiIF07IHRoZW4KKyAgICBwcmVfcmVzdWx0PTAKKyAgICByZXR1cm4gMAorICBlbGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiTiIgXTsgdGhlbgorICAgIHByZV9yZXN1bHQ9MQorICAgIHJldHVybiAxCisgIGZpCitkb25lCit9CisKK2Rvd25sb2FkX2ZpbGUoKQoreworbG9jYWwgZmlsZW5hbWU9YGVjaG8gJHsxIyMqL31gCitpZiBbIC1mICIkTE9DQUxfRE9XTkxPQUQvJGZpbGVuYW1lIiBdOyB0aGVuCisgIGNvbmZpcm1fZG93bmxvYWQgJGZpbGVuYW1lCisgIHJlc3VsdD0iJD8iCisgIGlmIFsgISAiJHJlc3VsdCIgPT0gIjAiIF07IHRoZW4KKyAgICByZXR1cm4KKyAgZWxzZQorICAgIGVjaG8gIlJlbW92aW5nIG9sZCBmaWxlIFskMV0iCisgICAgcm0gLXJmICIkTE9DQUxfRE9XTkxPQUQvJGZpbGVuYW1lIiAKKyAgZmkKK2ZpCitlY2hvX2luZm8gIkRvd25sb2FkaW5nIGZpbGU6ICRmaWxlbmFtZS4uLiIKK3dnZXQgIiRZT0NUT0FEVF9SRVBPL3Jvb3Rmcy8kMSIgLVAgJExPQ0FMX0RPV05MT0FEIC0tcHJvZ3Jlc3M9YmFyOmZvcmNlIDI+JjEgfCB0ZWUgLWEgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIiAKK30KKworCisKKyNOZWVkIHRocmVlIGlucHV0IHBhcmFtczoKKyMgJDEgYXJjaF90eXBlKGFybSBwb3dlcnBjIHg4NiBtaXBzKQorIyAkMiBtYWNoaW5lKHFlbXVhcm0gYmVhZ2xlYm9hcmQpCisjICQzIHJvb3Rmc19pbWFnZV90eXBlIChhIGxpc3Qgb2Ygc2RrIHNhdG8gbWluaW1hbCBsc2IpCitnZXRfaW1hZ2UoKQoreworICBsb2NhbCBtYWNoaW5lPSQyCisgCisgIGlmIFsgIiQxIiA9PSAieDg2IiBdIHx8IFsgIiQxIiA9PSAieDg2XzY0IiBdOyB0aGVuCisgICAga2VybmVsPSJiekltYWdlLSRtYWNoaW5lLmJpbiIKKyAgZWxpZiBbICIkMSIgPT0gInBwYyIgXSB8fCBbICIkMSIgPT0gIm1pcHMiIF07IHRoZW4KKyAgICBrZXJuZWw9InZtbGludXgtJG1hY2hpbmUuYmluIgorICBlbHNlCisgICAga2VybmVsPSJ6SW1hZ2UtJG1hY2hpbmUuYmluIgorICBmaQorCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG93bmxvYWRpbmcgcWVtdSBrZXJuZWwgYmluYXJ5OiAkcWVtdV9rZXJuZWwiCisgIGRvd25sb2FkX2ZpbGUgJG1hY2hpbmUvJGtlcm5lbAorICBjaGVja19yZXN1bHQKKyAgCisgIGZvciBpbWFnZV90eXBlIGluICRzZWxlY3Rfcm9vdGZzOyBkbworICAgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG93bmxvYWRpbmcgcm9vdGZzIGZpbGU6IGNvcmUtaW1hZ2UtJGltYWdlX3R5cGUtJG1hY2hpbmUudGFyLmJ6MiIKKyAgICBmaWxlbmFtZT0iY29yZS1pbWFnZS0kaW1hZ2VfdHlwZS0kbWFjaGluZS50YXIuYnoyIgorICAgIGRvd25sb2FkX2ZpbGUgJG1hY2hpbmUvJGZpbGVuYW1lCisgICAgY2hlY2tfcmVzdWx0CisgIGRvbmUKK30KKworZG93bmxvYWRfaW1hZ2VzKCkKK3sKKyAgc2VsZWN0X3Jvb3Rmc192YXI9IlwkWU9DVE9BRFRfUk9PVEZTXyQxIgorICBzZWxlY3Rfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEiCisgIHNlbGVjdF9zeXNyb290X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfJDEiCisgIHNlbGVjdF9tYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kMSIKKyAgc2VsZWN0X3Jvb3Rmcz1gZXZhbCBlY2hvICRzZWxlY3Rfcm9vdGZzX3ZhcmAKKyAgc2VsZWN0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkc2VsZWN0X3N5c3Jvb3RfaW1hZ2VfdmFyYAorICBzZWxlY3Rfc3lzcm9vdD1gZXZhbCBlY2hvICRzZWxlY3Rfc3lzcm9vdF92YXJgCisgIHNlbGVjdF9tYWNoaW5lPWBldmFsIGVjaG8gJHNlbGVjdF9tYWNoaW5lX3ZhcmAKKworICBpZiBbIC1uICIkc2VsZWN0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBzZWxlY3Rfc3lzcm9vdD1gcmVhZGxpbmsgLW0gJHNlbGVjdF9zeXNyb290YAorICBmaQorCisgIGlmIFsgIiRzZWxlY3Rfcm9vdGZzIiAhPSAiIiBdOyB0aGVuCisgICAgaWYgWyAkMiBdOyB0aGVuCisgICAgI2VjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICNlY2hvX2luZm8gIiMgVG8gYmUgZG93bmxvYWRlZCByb290ZnMgaW1hZ2UgZGV0YWlscyBkZWZpbmVkIGluIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgYXJjaGl0ZWN0dXJlOlx0XHQkMSIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IG1hY2hpbmU6XHRcdCRzZWxlY3RfbWFjaGluZSIKKyAgICBlY2hvX2luZm8gIiMgUm9vdF9mcyBpbWFnZXM6XHRcdCRzZWxlY3Rfcm9vdGZzIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgc3lzcm9vdCBpbWFnZTpcdFx0JHNlbGVjdF9zeXNyb290X2ltYWdlIgorICAgIGVjaG9faW5mbyAiIyBUYXJnZXQgc3lzcm9vdCBsb2M6XHRcdCRzZWxlY3Rfc3lzcm9vdCIKKyAgICBlY2hvX2luZm8gIlxuIgorICAgICNlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBlbHNlCisgICAgZ2V0X2ltYWdlICQxICRzZWxlY3RfbWFjaGluZSAkc2VsZWN0X3Jvb3RmcworICAgIGZpCisgIGZpCit9CisKKworCisKKyNNYWluIGJvZHkgb2YgaW5zdGFsbGVyCisKK2NsZWFyCisKK3J1bl9wYXRoPWBkaXJuYW1lICQwYAorY2QgJHJ1bl9wYXRoCisKK2lmIFsgISAtZiAic2NyaXB0cy91dGlsIiBdOyB0aGVuCisgIGVjaG8gLWUgIltBRFRfSU5TVF0gRXJyb3I6IFNjcmlwdCBmaWxlOiB1dGlsLCBjYW4ndCBiZSBmb3VuZCB1bmRlcjogJHJ1bl9wYXRoISIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCitpZiBbICEgLWYgInNjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCIgXTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBTY3JpcHQgZmlsZTogYWR0X2luc3RhbGxlcl9pbnRlcm5hbCwgY2FuJ3QgYmUgZm91bmQgdW5kZXI6ICRydW5fcGF0aCEiCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworY29uZmlnX2ZpbGU9ImFkdF9pbnN0YWxsZXIuY29uZiIKK2lmIFsgISAtZiAiJGNvbmZpZ19maWxlIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogSW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZTogYWR0X2luc3RhbGxlci5jb25mIGlzIG5vdCBmb3VuZCFcbiIKKyAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQuIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworLiBzY3JpcHRzL2RhdGFfZGVmaW5lCisuIHNjcmlwdHMvdXRpbAorCisKK2lmIFsgLWYgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIiBdOyB0aGVuCisgIHJtICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCitmaQorCitlY2hvIC1uICJQbGVhc2UgZW50ZXIgdGhlIGluc3RhbGwgbG9jYXRpb24gKGRlZmF1bHQ6ICRERUZBVUxUX0lOU1RBTExfRk9MREVSKTogIgorcmVhZCBJTlNUQUxMX0ZPTERFUgorCitpZiBbICIkSU5TVEFMTF9GT0xERVIiID0gIiIgXTsgdGhlbgorICAgIElOU1RBTExfRk9MREVSPSRERUZBVUxUX0lOU1RBTExfRk9MREVSCitmaQorCitldmFsIElOU1RBTExfRk9MREVSPSQocHJpbnRmICIlcSIgIiRJTlNUQUxMX0ZPTERFUiIpCitpZiBbIC1kICIkSU5TVEFMTF9GT0xERVIiIF07IHRoZW4KKwlleHBvcnQgSU5TVEFMTF9GT0xERVI9JChjZCAiJElOU1RBTExfRk9MREVSIjsgcHdkKQorZWxzZQorCWV4cG9ydCBJTlNUQUxMX0ZPTERFUj0kKHJlYWRsaW5rIC1tICIkSU5TVEFMTF9GT0xERVIiKQorZmkKKworaWYgWyAtbiAiJChlY2hvICRJTlNUQUxMX0ZPTERFUnxncmVwICcgJykiIF07IHRoZW4KKyAgICAgICBlY2hvICJUaGUgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoICgkSU5TVEFMTF9GT0xERVIpIGNvbnRhaW5zIHNwYWNlcy4gQWJvcnQhIgorICAgICAgIGV4aXQgMQorZmkKKworY2xlYXIKKwordXNhZ2UKKwordXNlcl9pbnN0X3R5cGU9IiQ/IgorCit2YWxpZGF0ZV9jb25maWcKK2NoZWNrX3Jlc3VsdAorCisjY2hlY2sgYWR0X3JlcG8gZXhpc3QKK3dnZXQgLS1zcGlkZXIgJFlPQ1RPQURUX1JFUE8gMj4mMSB8IHRlZSAtYSAiJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUiCitpZiBncmVwIC1xICI0MDQgTm90IEZvdW5kIiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9SRVBPIGRvZXMgbm90IGV4aXN0OiAkWU9DVE9BRFRfUkVQTyIKKyAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBleGl0IC0xCitmaQorCisjZmlyc3RseSB3ZSBuZWVkIHRvIGluc3RhbGwgb3BrZyBob3N0CitpbnN0YWxsX29wa2cKKworI0NyZWF0ZSBmb2xkZXJzIGZvciBob2xkaW5nIHJvb3Rmcy9xZW11IGltYWdlcworaWYgWyAhIC1kICIkTE9DQUxfRE9XTkxPQUQiIF07IHRoZW4KKyAgZWNob19pbmZvICJDcmVhdGluZyBuZXcgaW1hZ2VzIGRvd25sb2FkaW5nIGZvbGRlcjogJExPQ0FMX0RPV05MT0FEIC4uLiIKKyAgbWtkaXIgLXAgJExPQ0FMX0RPV05MT0FECitmaQorCisjZG93bmxvYWRpbmcgcmVxdWlyZWQgcWVtdSBpbWFnZXMvcm9vdGZzCitpZiBbICIkdXNlcl9pbnN0X3R5cGUiID09ICIwIiBdOyB0aGVuCisgIG92ZXJyaWRlX29sZGZpbGU9MQorZWxzZQorICBvdmVycmlkZV9vbGRmaWxlPTAKK2ZpCisKK2ZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIGRvd25sb2FkX2ltYWdlcyAkYXJjaF90eXBlCitkb25lCisKK3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCAkdXNlcl9pbnN0X3R5cGUKKworcmVzdWx0PSIkPyIKKyNlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgoraWYgWyAiJHJlc3VsdCIgPT0gIjAiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFlvY3RvIEFEVCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyLmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2ZiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mCkBAIC0wLDAgKzEsNzUgQEAKKyMgWW9jdG8gQURUIEluc3RhbGxlciBDb25maWd1cmF0aW9uIEZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKKworIyBZb3VyIHlvY3RvIGRpc3RybyByZXBvc2l0b3J5LCB0aGlzIHNob3VsZCBpbmNsdWRlIElQS0cgYmFzZWQgcGFja2FnZXMgYW5kIHJvb3QgZmlsZXN5c3RlbSBmaWxlcyB3aGVyZSB0aGUgaW5zdGFsbGF0aW9uIGlzIGJhc2VkIG9uCisKK1lPQ1RPQURUX1JFUE89IkFEVFJFUE8iCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgZm9yIHN5c3RlbSB3aWRlIHNldHVwCisjIFRhcmdldCBhcmNoaXRlY3R1cmVzIHRoYXQgeW91IHdhbnQgdG8gc2V0dXAgaG9zdCBjcm9zcyBkZXYgZW52aXJvbm1lbnQgZm9yCisjIHZhbGlkIHZhbHVlcyBhcmU6IGFybSwgeDg2LCB4ODZfNjQsIHBwYywgbWlwcyB3aXRoIHNwYWNlIHNlcGFyYXRpb24gYmV0d2VlbiBlbnRyaWVzCitZT0NUT0FEVF9UQVJHRVRTPSJhcm0geDg2IgorIyBXaGV0aGVyIGluc3RhbGwgcWVtdSBvciBub3QsIHZhbGlkIGVudHJpZXMgYXJlOiBZL04KK1lPQ1RPQURUX1FFTVU9IlkiCisjIFdoZXRoZXIgaW5zdGFsbCB1c2VyLW1vZGUgbmZzIG9yIG5vdCwgdmFsaWQgZW50cmllcyBhcmU6IFkvTi4gIElmIHlvdSB3YW50IHRvIHVzZSBZb2N0byBFY2xpcHNlIHBsdWctaW4gYXMgeW91ciBkZXYgSURFLCB5b3UgbmVlZCB0byBzZWxlY3QgYm90aCBxZW11IGFuZCBORlMKK1lPQ1RPQURUX05GU19VVElMPSJZIgorCisjIFRoZXNlIDIgdmFsdWVzIHdpbGwgYmUgc3VwcG9ydGVkIGluIHRoZSBmdXJ0dXJlIGluc3RhbGxlcgorI1lPQ1RPQURUX0JJVEJBS0U9IlkiCisjWU9DVE9BRFRfTUVUQURBVEE9IlkiCisKKyNUaGUgZm9sbG93aW5ncyBhcmUgZm9yIHNldHRpbmcgdXAgc3BlY2lmaWMgdGFyZ2V0IGFyY2hpdGVjdHVyZQorI1lPQ1RPQURUX1JPT1RGU18kYXJjaCBpcyBmb3Igc3BlY2lmeWluZyB3aGF0IHJvb3QgZmlsZXN5c3RlbSBpbWFnZSBmaWxlcyB5b3Ugd2FudCB0byBkb3dubG9hZCBmcm9tIHRoZSByZXBvc2l0b3J5LiBUaGUgdmFsaWQgdmFsdWVzIHRvIHJlcGxhY2UgJGFyY2ggYXJlOiBhcm0sIHg4NiwgeDg2XzY0LCBwb3dlcnBjLCBtaXBzLiAgVGhlIHZhbGlkIGltYWdlIGZpbGVzIGFyZTogbWluaW1hbCwgbWluaW1hbC1kZXYsIHNhdG8sIHNhdG8tZGV2LCBzYXRvLXNkayxsc2IsIGxzYi1kZXYsIGxzYi1zZGsuICBJZiB5b3Ugd2FudCB0byBkb3dubG9hZCBtdWx0aXBsZSBpbWFnZXMsIHRoZSBlbnRyaWVzIGFyZSBzcGFjZSBzZXBhcmF0ZWQKK1lPQ1RPQURUX1JPT1RGU19hcm09Im1pbmltYWwgc2F0by1zZGsiCisjU3BlY2lmeSB3aGljaCByb290IGZpbGVzeXN0ZW0gZmlsZSB0byB1c2UgdG8gZXh0cmFjdCBhcyB0YXJnZXQgc3lzcm9vdC4gIFBsZWFzZSBlbnN1cmUgdGhlIGVudHJ5IGlzIGluIHRoZSBsaXN0IG9mIGRvd25sb2FkZWQgcm9vdCBmaWxlc3lzdGVtIGZpbGVzIHRoYXQgc3BlY2lmaWVkIGFib3ZlIGluIFlPQ1RPQURUX1JPT1RGU18kYXJjaAorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfYXJtPSJzYXRvLXNkayIKKyNUaGUgbWFjaGluZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gZG93bmxvYWQgdGhlIGltYWdlLiBFYWNoIG1hY2hpbmUgbWlnaHQgaGF2ZQorI2RpZmZlcmVudCBjb21waWxhdGlvbiBvcHRpb25zIGluIG9yZGVyIHRvIHNlbGVjdCBjZXJ0YWluIGhhcmR3YXJlIG1vZGVscyBvcgorI2NvbmZpZ3VyYXRpb25zCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9hcm09InFlbXVhcm0iCisjVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSB0YXJnZXQgc3lzcm9vdCB3aWxsIGJlIHNldHVwCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfYXJtPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9hcm0iCisKKworI0hlcmUncyBhIHRlbXBsYXRlIGZvciBzZXR0aW5nIHVwIHRhcmdldCBhcmNoIG9mIHg4NiAKK1lPQ1RPQURUX1JPT1RGU194ODY9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfeDg2PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nj0icWVtdXg4NiIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ194ODY9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4NiIKKworI0hlcmUncyBzb21lIHRlbXBsYXRlIG9mIG90aGVyIGFyY2hlcywgd2hpY2ggeW91IG5lZWQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBpbiAiIgorWU9DVE9BRFRfUk9PVEZTX3g4Nl82ND0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV94ODZfNjQ9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2XzY0PSJxZW11eDg2LTY0IgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX3g4Nl82ND0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfeDg2XzY0IgorCitZT0NUT0FEVF9ST09URlNfcHBjPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX3BwYz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9wcGM9InFlbXVwcGMiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfcHBjPSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV9wcGMiCisKK1lPQ1RPQURUX1JPT1RGU19taXBzPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX21pcHM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfbWlwcz0icWVtdW1pcHMiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfbWlwcz0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfbWlwcyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyN2IzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYKQEAgLTAsMCArMSw2IEBACithcmNoIGFsbCAxCithcmNoIGFueSA2CithcmNoIG5vYXJjaCAxMQorYXJjaCBpNjg2LW5hdGl2ZXNkayAxNgorc3JjIHlwLWk2ODYtbmF0aXZlc2RrIEFEVFJFUE9fVVJML2FkdC1pcGsvaTY4Ni1uYXRpdmVzZGsKK3NyYyB5cC1pNjg2LWFsbCBBRFRSRVBPX1VSTC9hZHQtaXBrL2FsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1MDRhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYKQEAgLTAsMCArMSw2IEBACithcmNoIGFsbCAxCithcmNoIGFueSA2CithcmNoIG5vYXJjaCAxMQorYXJjaCB4ODZfNjQtbmF0aXZlc2RrIDE2CitzcmMgeXAteDg2XzY0LW5hdGl2ZXNkayBBRFRSRVBPX1VSTC9hZHQtaXBrL3g4Nl82NC1uYXRpdmVzZGsKK3NyYyB5cC14ODZfNjQtYWxsIEFEVFJFUE9fVVJML2FkdC1pcGsvYWxsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9hZHRfaW5zdGFsbGVyX2ludGVybmFsIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjVmYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbApAQCAtMCwwICsxLDMxMiBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitwYXJzZV9jb25maWcoKQoreworICBJTlNUX0FSQ0g9YHVuYW1lIC1tYAorCisgIGNhc2UgJElOU1RfQVJDSCBpbiAKKyAgaVszLTZdODYpCisgICAgT1BLR19DT05GSUdfRklMRT0kWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfMzIKKyAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiRJTlNUQUxMX0ZPTERFUi9zeXNyb290cy8kSU5TVF9BUkNIJFNES19WRU5ET1ItbGludXgvIgorICAgIDs7CisgIHg4Nl82NCkKKyAgICBPUEtHX0NPTkZJR19GSUxFPSRZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV82NAorICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD0iJElOU1RBTExfRk9MREVSL3N5c3Jvb3RzL3g4Nl82NCRTREtfVkVORE9SLWxpbnV4LyIKKyAgICA7OworICAqKQorICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogSW5zdGFsbGF0aW9uIE1hY2hpbmUgaXMgbm90IHN1cHBvcnRlZCEiCisgICAgZXhpdCAtMQorICAgIDs7CisgIGVzYWMKK30KKworZ2V0X3N1ZG9fYXBwKCkKK3sKKyAgdXNlcm5hbWU9JChpZCAtbnUpCisKKyAgIyBmaW5kIHRoZSBvd25lciBvZiB0aGUgcGFyZW50CisgIGRpcj0kMQorICB3aGlsZSBbIDEgXTsgZG8KKyAgICAgIGlmIFsgLWQgJGRpciBdOyB0aGVuCisgICAgICAgICAgb3duZXI9JChzdGF0IC1jICVVICRkaXIpCisgICAgICAgICAgYnJlYWsKKyAgICAgZWxzZQorICAgICAgICAgIGRpcj0kKGRpcm5hbWUgJGRpcikKKyAgICAgZmkKKyAgZG9uZQorCisgIGlmIFsgIiRvd25lciIgPSAiJHVzZXJuYW1lIiBdOyB0aGVuCisgICAgICB0cnVlCisgIGVsc2UKKyAgICAgIGVjaG8gc3VkbworICBmaQorfQorCisjIHRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhcmNoX3R5cGUgKHg4NiwgeDg2XzY0LCBhcm0sIHBwYywgbWlwcykgYXMgdGhlIGZpcnN0CisjIGFyZ3VtZW50LCByZXR1cm5pbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSB0YXJnZXQgcm9vdGZzCitnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbigpIHsKKwlbIC16ICIkMSIgXSAmJiByZXR1cm4KKworCWFyY2hfdHlwZT0kMQorCSMgcm9vdGZzIGV4dHJhY3Rpb24gZGlyZWN0b3J5CisJdGFyZ2V0X3N5c3Jvb3RfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ18kYXJjaF90eXBlIgorCXRhcmdldF9zeXNyb290PWBldmFsIGVjaG8gJHRhcmdldF9zeXNyb290X3ZhcmAKKworCWlmIFsgIiR0YXJnZXRfc3lzcm9vdCIgPT0gIiIgXTsgdGhlbgorCQlyZXR1cm4KKwllbHNlCisJCWVjaG8gImByZWFkbGluayAtbSAkdGFyZ2V0X3N5c3Jvb3RgIgorCWZpCit9CisKKworI2xldCB1cyBpbnN0YWxsIGEgcWVtdS1uYXRpdmUgZmlyc3RseQorI2luc3RhbGxhdGlvbiBzdGVwIDIKK2luc3RhbGxfbmF0aXZlX3NkaygpCit7CisKK2VjaG9faW5mbyAiXG5TdGFydCBpbnN0YWxsaW5nIHNlbGVjdGVkIG5hdGl2ZSBBRFQgZm9yIGFyY2hzOiAkWU9DVE9BRFRfVEFSR0VUUy4uLiIKKworIyB3aGVyZSB0aGUgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4KK05BVElWRV9JTlNUQUxMX0RJUj0kSU5TVEFMTF9GT0xERVIKKworaWYgWyAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5OYXRpdmUgQURUIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgXCIkSU5TVEFMTF9GT0xERVJcIiBhbHJlYWR5IGV4aXN0cyEgQ29udGludWUgaW5zdGFsbGF0aW9uIHdpbGwgb3ZlcnJpZGUgaXRzIGNvbnRlbnRzISIKKyAgY29uZmlybV9pbnN0YWxsICQxCitmaQorCisjTm93IGJlZ2luIHRvIGluc3RhbGwgbmF0aXZlIHNkayBhbmQgZXh0cmFjdCBxZW11IHJvb3RmcyB3aGljaCBuZWVkcyBwcml2aWxlZ2UgcmlnaHRzCisjZGVwZW5kaW5nIG9uIHRoZSBpbnN0YWxsIGxvY2F0aW9uCitTVURPPSQoZ2V0X3N1ZG9fYXBwICROQVRJVkVfSU5TVEFMTF9ESVIpCitpZiBbIC1uICIkU1VETyIgXTsgdGhlbgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIlBsZWFzZSBub3RlIGZyb20gdGhpcyBwb2ludCBvbiBpbnN0YWxsYXRpb24gcmVxdWlyZXMgc3VkbyBwYXNzd29yZCAuLi4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitmaQorCisjd2UgbmVlZCB0byBtYWtlIHRoaXMgZGlyZWN0b3J5IGZpcnN0bHkgc2luY2Ugb3BrZyBuZWVkIHRvIHVzZSBpdC4KK09QS0dfTE9DS19ESVI9IiROQVRJVkVfSU5TVEFMTF9ESVIvJE9QS0dfTElCRElSL29wa2ciCitpZiBbICEgLWQgIiRPUEtHX0xPQ0tfRElSIiBdOyB0aGVuCisgICRTVURPIG1rZGlyIC1wICRPUEtHX0xPQ0tfRElSCisgIGVjaG9faW5mbyAiU3VjY2Vzc2Z1bGx5IGNyZWF0ZSBkaXJlY3RvcnkgJE9QS0dfTE9DS19ESVIuICIKKyNpZiB1c2VyIGRlbGV0ZSAvb3B0L3h4eCwgd2hpbGUgZGFuZ2xpbmcgZm9sZGVycyB0aGVyZSwgcmVwb3J0IGVycm9yCitlbGlmIFsgISAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5EYW5nbGluZyBvcGtnIGNhY2hlIGZvbGRlciAkT1BLR19MT0NLX0RJUiBkZXRlY3RlZC4gQ29udGludWUgaW5zdGFsbGF0aW9uIHdpbGwgcmVtb3ZlIHRoZSBmb2xkZXIhIgorICBjb25maXJtX2luc3RhbGwgJDEKKyAgJFNVRE8gcm0gLXJmICRPUEtHX0xPQ0tfRElSCisgICRTVURPIG1rZGlyIC1wICRPUEtHX0xPQ0tfRElSCisjaWYgdXNlciBhcmUgdXBkYXRpbmcgaW5zdGFsbGluZywganVzdCBsZXQgaGltL2hlciBnbywgZ2l2ZSBoZXIvaGltIHByb21wdAorZWxzZQorICBlY2hvX2luZm8gIkFEVCBoYXMgYWxyZWFkeSBiZWVuIGluc3RhbGxlZC4gV2lsbCB1cGRhdGUgaXRzIGNvbnRlbnRzLi4uIgorZmkKKworI2ZpcnN0IHVwZGF0ZSByZXBvc2l0b3J5CitpZiBbICJ4JFNVRE8iID0gIngiIF07IHRoZW4KKyAgICBPUEtHX0NNRD0iJExPQ0FMX09QS0dfTE9DL2Jpbi9vcGtnIgorZWxzZQorICAgIE9QS0dfQ01EPSJzdWRvIC1FICRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIKK2ZpCisKK2VjaG9faW5mbyAiVXBkYXRpbmcgb3BrZy4uLiIKKyRPUEtHX0NNRCAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIHVwZGF0ZSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKK2NoZWNrX3Jlc3VsdAorZWNob19pbmZvICJvcGtnIHVwZGF0ZSBwcm9jZXNzIGVuZGVkLi4uIgorCisjaW5zdGFsbCBiZWxvdyBtdXN0IHNkay1ob3N0IHBhY2thZ2VzCitPUEtHX0lOU1RBTExfQ01EPSIkT1BLR19DTUQgIgorT1BLR19JTlNUQUxMX05BVElWRV9DTUQ9IiRPUEtHX0lOU1RBTExfQ01EICAtLWZvcmNlLW92ZXJ3cml0ZSAtZiAkT1BLR19DT05GSUdfRklMRSAtbyAkTkFUSVZFX0lOU1RBTExfRElSIGluc3RhbGwiCisKK0JBU0VfSE9TVFNES19QS0dOQU1FUz0icHNldWRvIG9wa2cgcGtnY29uZmlnIGxpYnRvb2wgYXV0b2NvbmYgYXV0b21ha2UiCitmb3IgcGtnIGluICRCQVNFX0hPU1RTREtfUEtHTkFNRVM7IGRvCisgIGVjaG9faW5mbyAiSW5zdGFsbGluZyAke3BrZ30gbmF0aXZlc2RrIC4uLlxuIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLSR7cGtnfSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0Citkb25lCisKK2ZvciB0YXJnZXRfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJHRhcmdldF90eXBlIgorICBtYWNoaW5lPWBldmFsIGVjaG8gJG1hY2hpbmVfdmFyYAorICBlY2hvX2luZm8gIkluc3RhbGxpbmcgY3Jvc3MgY2FuYWRpYW4gcGFja2FnZXMgZm9yICRtYWNoaW5lIC4uLiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIHBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0kbWFjaGluZSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisKKyAgdGFyZ2V0X3N5c3Jvb3Q9YGdldF90YXJnZXRfcm9vdGZzX2xvY2F0aW9uICR0YXJnZXRfdHlwZWAKKyAgWyAteiAiJHRhcmdldF9zeXNyb290IiBdICYmIGNvbnRpbnVlCisKKyAgIyBnZXQgdGhlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCBwYXRoczogb3JpZ2luYWwgKHRoZSBvbmUgYmVmb3JlIHJlbG9jYXRpb24pCisgICMgYW5kIHJlbG9jYXRlZAorICBlbnZfc2NyaXB0X29yaWdpbmFsPWAkT1BLR19DTUQgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiBmaWxlcyBtZXRhLWVudmlyb25tZW50LSRtYWNoaW5lfFwKKwkJCQkJCQlncmVwIGVudmlyb25tZW50LXNldHVwYAorICBlbnZfc2NyaXB0X3JlbG9jYXRlZD0kSU5TVEFMTF9GT0xERVIvJHtlbnZfc2NyaXB0X29yaWdpbmFsIyMqL30KKworICAjIG9wa2cgd2lsbCBub3QgaW5zdGFsbCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4gcGFja2FnZSBpZiBpdCB3YXMgYWxyZWFkeQorICAjIGluc3RhbGxlZC4gU28sIHRoZSBlbnZpcm9ubWVudCBzY3JpcHQgaXMgaW4gb25lIHBsYWNlIG9yIHRoZSBvdGhlci4KKyAgWyAtZSAiJElOU1RBTExfRk9MREVSLyRlbnZfc2NyaXB0X29yaWdpbmFsIiBdICYmIGVudl9zY3JpcHQ9JElOU1RBTExfRk9MREVSLyRlbnZfc2NyaXB0X29yaWdpbmFsCisgIFsgLWUgIiRlbnZfc2NyaXB0X29yaWdpbmFsIiBdICYmIGVudl9zY3JpcHQ9JGVudl9zY3JpcHRfb3JpZ2luYWwKKyAgWyAtZSAiJGVudl9zY3JpcHRfcmVsb2NhdGVkIiBdICYmIGVudl9zY3JpcHQ9JGVudl9zY3JpcHRfcmVsb2NhdGVkCisKKyAgJFNVRE8gc2VkIC1pIC1lICJzJVNES1RBUkdFVFNZU1JPT1Q9LiolU0RLVEFSR0VUU1lTUk9PVD0kdGFyZ2V0X3N5c3Jvb3QlZyIgJGVudl9zY3JpcHQKK2RvbmUKKworaWYgWyAiJFlPQ1RPQURUX1FFTVUiID09ICJZIiBdIHx8IFsgIiRZT0NUT0FEVF9RRU1VIiA9PSAieSIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuSW5zdGFsbGluZyBxZW11IG5hdGl2ZSAuLi4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstcWVtdSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBuYXRpdmVzZGstcWVtdS1oZWxwZXIgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorZmkKKworaWYgWyAiJFlPQ1RPQURUX05GU19VVElMIiA9PSAiWSIgXSB8fCBbICIkWU9DVE9BRFRfTkZTX1VUSUwiID09ICJ5IiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG5JbnN0YWxsaW5nIHVuZnMgLi4uIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXVuZnMzICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK2ZpCisKKyMgTG9zZSB0aGUgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IHBhcnQsIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGtlZXAKKyMgdGhlIGVudGlyZSBkaXJlY3Rvcnkgc3RydWN0dXJlLiBXZSBjb3VsZCBwYXRjaCBvcGtnIHRvIGRvIHRoYXQgYnV0IGl0J3MgZmFyCisjIHNpbXBsZXIgdG8gZG8gdGhhdCBoZXJlIGFuZCBhY2hpZXZlIHRoZSBzYW1lIHJlc3VsdC4KKyMgVGhpcyBpcyBkb25lIGluIHR3byBzdGVwczoKK2lmIFsgLWQgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUiBdOyB0aGVuCisgICAgIyBTdGVwIDE6IGNvcHkgLi9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IGNvbnRlbnRzIHRvICROQVRJVkVfSU5TVEFMTF9ESVIuCisgICAgIyBXZSBjYW5ub3QgdXNlIG1vdmUgaWYgJE5BVElWRV9JTlNUQUxMX0RJUiBpcyBub3QgZW1wdHkgKGZvciBleGFtcGxlOiBjb250YWlucworICAgICMgYW5vdGhlciBTREspCisgICAgJFNVRE8gY3AgLXIgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUi8qICROQVRJVkVfSU5TVEFMTF9ESVIKKworICAgICMgZGVsZXRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG5vdworICAgICRTVURPIHJtIC1yZiAkTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSLyoKKworICAgICMgU3RlcCAyOiBEZWxldGUgdGhlIC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBkaXJlY3RvcmllcyB0b28sIHRoZXkgc2hvdWxkIGJlIGVtcHR5CisgICAgZGlyPSROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIKKyAgICB3aGlsZSBbICIkZGlyIiAhPSAiJE5BVElWRV9JTlNUQUxMX0RJUiIgXTsgZG8KKyAgICAgICAgIyBpZiB0aGUgdXNlciBjaG9zZSAvIGFzIHRoZSBpbnN0YWxsIGZvbGRlciwgdGhlbiB3ZSBzaG91bGQgbGVhdmUgL29wdCBpbiBwbGFjZQorICAgICAgICBpZiBbICIkZGlyIiA9ICIvb3B0IiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorCisgICAgICAgICMgdHJ5IHRvIGRlbGV0ZSB0aGUgZGlyZWN0b3J5LCBvbmx5IGlmIGl0J3MgZW1wdHkKKyAgICAgICAgJFNVRE8gcm1kaXIgJGRpcgorICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisKKyAgICAgICAgIyBnbyB0byB0aGUgbmV4dCBkaXJlY3RvcnkKKyAgICAgICAgZGlyPSQoZGlybmFtZSAkZGlyKQorICAgIGRvbmUKKyAgICAjIFN0ZXAgMzogUmV3cml0ZSB0aGUgKi5saXN0IGZpbGVzIHRvIGNvbnRhaW4gdGhlIGNvcnJlY3QgcGF0aHMKKyAgICAkU1VETyBmaW5kICROQVRJVkVfSU5TVEFMTF9ESVIvdmFyL2xpYi9vcGtnIC10eXBlIGYgLWV4ZWMgc2VkIC1pIC1lICcjXiRERUZBVUxUX0lOU1RBTExfRk9MREVSIyROQVRJVkVfSU5TVEFMTF9ESVIjJyB7fSBcOworZmkKKworIyBMaW5rIHRoZSBsZC5zby5jYWNoZSBmaWxlIGludG8gdGhlIGhvc3RzIGZpbGVzeXN0ZW0KK2lmIFsgISAtZiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9ldGMvbGQuc28uY2FjaGUiIF07IHRoZW4KK2VjaG9faW5mbyAiTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0IGZpbGVzeXN0ZW0iCiskU1VETyBsbiAtcyAvZXRjL2xkLnNvLmNhY2hlICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZXRjL2xkLnNvLmNhY2hlCitjaGVja19yZXN1bHQKK2ZpCisKKyMgcmVsb2NhdGUgYmluYXJpZXMKK2VjaG9faW5mbyAiXG5SZWxvY2F0aW5nIGJpbmFyaWVzIC4uLiIKK2VzY2FwZWRfc2RrcGF0aD0kKGVjaG8gJERFRkFVTFRfSU5TVEFMTF9GT0xERVIgfHNlZCAtZSAiczpbXCtcLl06XFxcXFxcXFxcMDpnIikKKworIyBXZSBkb24ndCBjaGFuZ2UgdGhlIHNjcmlwdCBpbi1wbGFjZSBzaW5jZSB3ZSBtYXkgd2FudCB0aGUgdXNlciB0byByZS1ydW4KKyMgYWR0LWluc3RhbGxlciBzY3JpcHQKK3NlZCAtZSAiczojI0RFRkFVTFRfSU5TVEFMTF9ESVIjIzokZXNjYXBlZF9zZGtwYXRoOiIgc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgPiBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkKK2NobW9kICt4IHNjcmlwdHMvcmVsb2NhdGVfc2RrX3RtcC5weQorCitkbF9wYXRoPSQoZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UL2xpYiAtbmFtZSAibGQtbGludXgqIikKK2V4ZWN1dGFibGVfZmlsZXM9JChmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgLXR5cGUgZiAtcGVybSAvMTExKQorCiskU1VETyBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkgJElOU1RBTExfRk9MREVSICRkbF9wYXRoICRleGVjdXRhYmxlX2ZpbGVzCitjaGVja19yZXN1bHQKKworIyByZXBsYWNlIC9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059IHdpdGggdGhlIGluc3RhbGwgZm9sZGVyIGluIGFsbCBjb25maWdzCitlbnZfc2V0dXBfc2NyaXB0PSQoZmluZCAkTkFUSVZFX0lOU1RBTExfRElSLyAtbmFtZSAiZW52aXJvbm1lbnQtc2V0dXAtKiIpCiskU1VETyBzZWQgLWkgLWUgInM6JERFRkFVTFRfSU5TVEFMTF9GT0xERVI6JE5BVElWRV9JTlNUQUxMX0RJUjpnIiAkZW52X3NldHVwX3NjcmlwdAorCitmaW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgLXR5cGUgZiAtZXhlYyBmaWxlICd7fScgXDsgfCBncmVwICI6LipcKEFTQ0lJXHxzY3JpcHRcfHNvdXJjZVwpLip0ZXh0IiB8IFwKKyAgICBjdXQgLWQnOicgLWYxIHwgeGFyZ3MgJFNVRE8gc2VkIC1pIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6ZyIKKworIyBjaGFuZ2UgYWxsIHN5bWxpbmtzIHBvaW50aW5nIHRvIC9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJT059Citmb3IgbCBpbiAkKGZpbmQgJE5BVElWRV9JTlNUQUxMX0RJUiAtdHlwZSBsKTsgZG8KKyAgICAkU1VETyBsbiAtc2ZuICQocmVhZGxpbmsgJGx8c2VkIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6IikgJGwKK2RvbmUKKworIyBmaW5kIG91dCBhbGwgcGVybCBzY3JpcHRzIGluICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgYW5kIG1vZGlmeSB0aGVtCisjIHJlcGxhY2luZyB0aGUgaG9zdCBwZXJsIHdpdGggU0RLIHBlcmwuCitmb3IgcGVybF9zY3JpcHQgaW4gJCgkU1VETyBncmVwIC1tIDEgIl4jIS4qcGVybCIgLXJsICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QpOyBkbworICAgICRTVURPIHNlZCAtaSAtZSAiczpeIyEgKi91c3IvYmluL3BlcmwuKjojISAvdXNyL2Jpbi9lbnYgcGVybDpnIiAtZSBcCisgICAgICAgICJzOiAvdXNyL2Jpbi9wZXJsOiAvdXNyL2Jpbi9lbnYgcGVybDpnIiAkcGVybF9zY3JpcHQKK2RvbmUKKworZWNob19pbmZvICJcblN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgc2VsZWN0ZWQgbmF0aXZlIEFEVCEiCit9CisKKyNOZWVkIHRocmVlIGlucHV0IHBhcmFtcywgJDEgLS0gYXJjaF90eXBlKGFybSBwb3dlcnBjIHg4NiBtaXBzKSAjMiAtLSB1c2VyIGluc3RhbGxhdGlvbiB0eXBlCisjY3VzdG9tZXIgb3Igc2NpbGVudAorCitpbnN0YWxsX3RhcmdldCgpCit7CisKK3RhcmdldF9zeXNyb290PWBnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbiAkMWAKK1sgLXogIiR0YXJnZXRfc3lzcm9vdCIgXSAmJiByZXR1cm4gMAorCit0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEiCit0YXJnZXRfc3lzcm9vdF9pbWFnZT1gZXZhbCBlY2hvICR0YXJnZXRfc3lzcm9vdF9pbWFnZV92YXJgCitpZiBbICIkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UiID09ICIiIF07IHRoZW4KKyAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kMSBzZWxlY3Rpb24gaXMgZW1wdHksIGZhaWxlZCB0byBjcmVhdGUgdGFyZ2V0IHN5c3Jvb3QhIgorICByZXR1cm4gMQorZmkKKworZWNob19pbmZvICJJbnN0YWxsaW5nIHRhcmdldCBzeXNyb290IGZvciBhcmNoOiAkMSwgcm9vdGZzIHR5cGU6ICR0YXJnZXRfc3lzcm9vdF9pbWFnZSwgbG9jYXRpb246ICR0YXJnZXRfc3lzcm9vdCIKKwordGFyZ2V0X21hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyQxIgordGFyZ2V0X21hY2hpbmU9YGV2YWwgZWNobyAkdGFyZ2V0X21hY2hpbmVfdmFyYAorc3lzcm9vdF9pbWFnZV9uYW1lPSJjb3JlLWltYWdlLSR0YXJnZXRfc3lzcm9vdF9pbWFnZS0kdGFyZ2V0X21hY2hpbmUudGFyLmJ6MiIKKyAgICAjZWNob19pbmZvICJFeHRyYWN0aW5nIHJvb3RmczogJHN5c3Jvb3RfaW1hZ2VfbmFtZSwgdXNpbmcgcHNldWRvLi4uIgorCisjIHN1ZG8gcGFzc3dvcmQgbWlnaHQgYmUgbmVlZGVkIHRvIGluc3RhbGwgdGhlIHRhcmdldCBzeXNyb290CitTVURPPSQoZ2V0X3N1ZG9fYXBwICR0YXJnZXRfc3lzcm9vdCkKKworJFNVRE8gc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyAkc3lzcm9vdF9pbWFnZV9uYW1lICR0YXJnZXRfc3lzcm9vdCAkT0VDT1JFX05BVElWRV9TWVNST09UICR1c2VyX2luc3RfdHlwZQorY2hlY2tfcmVzdWx0Cit9CisKKworI01haW4gcGFydAorLiBzY3JpcHRzL2RhdGFfZGVmaW5lCisuIHNjcmlwdHMvdXRpbAorCitwYXJzZV9jb25maWcKKworI3NlY29uZGx5IHdlIHdpbGwgc3RhcnQgdG8gaW5zdGFsbCBuYXRpdmUgdG9vbHMKK3VzZXJfaW5zdF90eXBlPSQxCitpbnN0YWxsX25hdGl2ZV9zZGsgJHVzZXJfaW5zdF90eXBlCitjaGVja19yZXN1bHQKKworZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgaW5zdGFsbF90YXJnZXQgJGFyY2hfdHlwZQorICBjaGVja19yZXN1bHQKK2RvbmUKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2RhdGFfZGVmaW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDY3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZQpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK2NvbmZpZ19maWxlPSJhZHRfaW5zdGFsbGVyLmNvbmYiCitzb3VyY2UgYHB3ZGAvJGNvbmZpZ19maWxlCisKK0xPQ0FMX09QS0dfTE9DPSIuL29wa2cvYnVpbGQvb3BrZyIKK0xPQ0FMX09QS0dfRk9MREVSPSIuL29wa2cvYnVpbGQiCisKKyMgTGlzdCBhbGwgc3VwcG9ydGVkIHJvb3QgZnMgdHlwZXMgYW5kIHRhcmdldCB0eXBlcywKKyMgaXQgd2lsbCBiZSB1c2VkIGluIHVzZXIgY29uZmlndXJhdGlvbiB2YWxpZGl0eSBjaGVja2luZworWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUz0ibWluaW1hbCBtaW5pbWFsLWRldiBzYXRvIHNhdG8tZGV2IHNhdG8tc2RrIGxzYiBsc2ItZGV2IGxzYi1zZGsiCitZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUz0ieDg2IHg4Nl82NCBhcm0gcHBjIG1pcHMiCisjIERpZmZlcmVudCBob3N0ICgzMiBiaXQgb3IgNjQgYml0KSB3aWxsIGhhdmUgZGlmZmVyZW50IG9wa2cKKyMgY29uZmlndXJhdGlvbiBmaWxlcworWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfMzI9Ii4vb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiIKK1lPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzY0PSIuL29wa2cvY29uZi9vcGtnLXNkay14ODZfNjQuY29uZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZXh0cmFjdF9yb290ZnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFhNTk1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworZXh0cmFjdF9yb290ZnMoKQoreworCisgIG5hdGl2ZV9zeXNyb290PSQzCisgIHRhcmdldF9zeXNyb290PSQyCisgIFBTRVVET19DT01NQU5EPSIkbmF0aXZlX3N5c3Jvb3QvdXNyL2Jpbi9wc2V1ZG8iCisgIFRBUl9PUFRTPSIteGpmIgorICBQU0VVRE9fT1BUUz0iLVAgJG5hdGl2ZV9zeXNyb290L3VzciIKKworCisgIHJtIC1yZiAkUFNFVURPX0xPQ0FMU1RBVEVESVIKKworICBpZiBbIC1kICIkdGFyZ2V0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuVGFyZ2V0IHN5c3Jvb3QgbG9jYXRpb246ICR0YXJnZXRfc3lzcm9vdCwgYWxyZWFkeSBleGlzdHMhIElmIHlvdSBjb250aW51ZSBpbnN0YWxsYXRpb24sIHRoaXMgZm9sZGVyIHdpbGwgYmUgcmUtY3JlYXRlZC4iCisgICAgY29uZmlybV9pbnN0YWxsICQ0CisgICAgcm0gLXJmICIkdGFyZ2V0X3N5c3Jvb3QiCisgIGZpCisKKyAgaWYgWyAhIC1kICIkdGFyZ2V0X3N5c3Jvb3QiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkdGFyZ2V0X3N5c3Jvb3QuLi4iCisgICAgbWtkaXIgLXAgIiR0YXJnZXRfc3lzcm9vdCIKKyAgZmkKKworICBwc2V1ZG9fc3RhdGVfZGlyPSIkdGFyZ2V0X3N5c3Jvb3QvLi4vJChiYXNlbmFtZSAiJHRhcmdldF9zeXNyb290IikucHNldWRvX3N0YXRlIgorICBta2RpciAtcCAiJHBzZXVkb19zdGF0ZV9kaXIiCisgIHRvdWNoICIkcHNldWRvX3N0YXRlX2Rpci9wc2V1ZG8ucGlkIgorICBQU0VVRE9fTE9DQUxTVEFURURJUj0iJHBzZXVkb19zdGF0ZV9kaXIiCisgIGV4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCisgIGVjaG9faW5mbyAiRXh0cmFjdGluZyByb290ZnM6ICQxLCB1c2luZyBwc2V1ZG8uLi4iCisgICRQU0VVRE9fQ09NTUFORCAkUFNFVURPX09QVFMgdGFyIC1DICQyICIkVEFSX09QVFMiICRMT0NBTF9ET1dOTE9BRC8kMSAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0Cit9CisKKyNNYWluIHBhcnQKKy4gc2NyaXB0cy91dGlsCisKKyNQYXJhbWV0ZXIgZGV0YWlsIGlzIGxpc3RlZCBiZWxvdzoKKyNQYXJhbSA0OiBTaWxlbnQgaW5zdGFsbCBvciBjdXN0b21pemUgaW5zdGFsbAorI1BhcmFtIDM6IE9FQ09SRV9OQVRJVkVfU1lTUk9PVAorI1BhcmFtIDI6IHVzZXIgZGVmaW5lZCByb290ZnMgZXh0cmFjdGlvbiBkaXJlY3RvcnkKKyNwYXJhbSAxOiBzeXNyb290IGltYWdlIG5hbWUKK2V4dHJhY3Rfcm9vdGZzICQxICQyICQzICQ0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy91dGlsIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmU3NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitlY2hvX2luZm8oKQoreworICBlY2hvIC1lICQxIHwgdGVlIC1hICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCit9CisKK3NlbGVjdF9pbnN0YWxsX3R5cGUoKQoreworIyBJZiBjaG9vc2luZyBzaWxlbnQgaW5zdGFsbCwgYWxsIG9sZGVyIGluc3RhbGxhdGlvbiBkYXRhIHdpbGwgYmUKKyMgb3ZlcnJpZGVuIHdpdGhvdXQgdXNlcidzIGludGVyYWN0aW9uCit3aGlsZSB0cnVlOyBkbworICAjZWNob19pbmZvICJbQURUX0lOU1RdIFNpbGVudCBpbnN0YWxsIG1lYW5zIG92ZXJyaWRlcyBhbGwgZXhpc3Rpbmcgb2xkZXIiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gZGF0YSBhbmQgdGhlIGluc3RhbGxhdGlvbiBuZWVkcyBsZWFzdCB1c2VyIGludGVyYWN0aW9uIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIElmIHlvdSB3YW50IHRvIHVzZSBzaWxlbnQgaW5zdGFsbGF0aW9uLCBwbGVhc2UgZW50ZXIgUzoiCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIGluc3RhbGxhdGlvbiwgcGxlYXNlIGVudGVyIEM6IgorICAjZWNob19pbmZvICJbQURUX0lOU1R9IElmIHlvdSB3YW50IHRvIGV4aXQgY3VycmVudCBpbnN0YWxsYXRpb24sIHBsZWFzZSBlbnRlciBYOiIKKyAgZWNob19pbmZvICJUaGVyZSdyZSB0d28gd2F5cyB5b3UgY2FuIGRvIGluc3RhbGxhdGlvbjogc2lsZW50IG1vZGUgb3IgaW50ZXJhY3RpdmUgbW9kZS4gVG8gY2hvb3NlIHNpbGVudCBtb2RlLCB3aGljaCBtZWFucyB5b3Ugb3B0IGZvciB0aGUgc3lzdGVtIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBkYXRhIHVuZGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzIHdpdGhvdXQgcHJvbXB0aW5nIGZvciB5b3VyIGNvbmZpcm1hdGlvbi4gIFBsZWFzZSBiZSBjYXV0aW91cyB3aXRoIHRoaXMgc2VsZWN0aW9uIHdoaWNoIG1heSB0cmlnZ2VyIHlvdXIgbG9zaW5nIGRhdGEuICBXaXRoIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLCB5b3UgaGF2ZSB0byBjbG9zZWx5IG1vbml0b3IgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLCBzaW5jZSBpdCB3aWxsIHByb21wdCB5b3UgZWFjaCBzdGVwIGl0IG5lZWRzIHRvIG92ZXJyaWRlIHNvbWUgZXhpc3RpbmcgZGF0YS4gIFRvIGNob29zZSBzaWxlbnQgbW9kZSwgcGxlYXNlIGVudGVyIFtTXSwgZm9yIGludGVyYWN0aXZlIG1vZGUsIHBsZWFzZSBlbnRlciBbSV0gb3IgW1hdIHRvIGV4aXQgdGhlIGluc3RhbGxhdGlvbi4iCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBQbGVhc2UgZW50ZXIgeW91ciBzZWxlY3Rpb25zIGhlcmU6IgorICByZWFkIFlPQ1RPQURUX1NFTAorICBZT0NUT0FEVF9TRUw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfU0VMImAKKyAgaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIlMiIF07IHRoZW4KKyAgICByZXR1cm4gIjAiCisgIGVsaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIkkiIF07IHRoZW4KKyAgICByZXR1cm4gIjEiCisgIGVsaWYgWyAiJFlPQ1RPQURUX1NFTCIgPT0gIlgiIF07IHRoZW4KKyAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG9faW5mbyAiIyBVc2VyIGNhbmNlbGxlZCBpbnN0YWxsYXRpb24hIgorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAxCisgIGZpCitkb25lCisKKworfQorCitjb25maXJtX2luc3RhbGwoKQoreworIyBiZWxvdyBhcmUgcHJvbXB0LCBtYWtlIHN1cmUgdXNlciBzdGlsbCB3YW50IHRvIGluc3RhbGwgZXZlbiBtZWV0CisjIHNvbWUgcHJvbXB0cworCisjVXNlciBsaWtlcyB0byBlbmpveSBzaWxlbnQgaW5zdGFsbGF0aW9uLCB3ZSB3aWxsIG5vdCBicmVhayBoaXMKKyNpbnN0YWxsYXRpb24gcHJvY2VzcyBoZXJlCitpZiBbICIkMSIgPT0gIjAiIF07IHRoZW4KKyAgcmV0dXJuCitmaQorCit3aGlsZSB0cnVlOyBkbworICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgaW5zdGFsbGF0aW9uPyBQbGVhc2UgZW50ZXIgWS9OOiIKKyAgcmVhZCBZT0NUT0FEVF9JTlNUQUxMCisgIFlPQ1RPQURUX0lOU1RBTEw9YHRyICdbYS16XScgJ1tBLVpdJzw8PCIkWU9DVE9BRFRfSU5TVEFMTCJgCisgIGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiWSIgXTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJOIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVXNlciBjYW5jZWxsZWQgaW5zdGFsbGF0aW9uISIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgMQorICBmaQorZG9uZQorfQorCitjaGVja19yZXN1bHQoKQoreworICByZXN1bHQ9JD8KKyAgaWYgWyAkcmVzdWx0IC1lcSAxIF07IHRoZW4KKyAgICBleGl0IC0xCisgIGVsaWYgWyAgJHJlc3VsdCAtbmUgMCBdOyB0aGVuCisgICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgZWNob19pbmZvICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IC0xCisgIGZpCit9CisKKyMgeW9jdG8gYWR0IGluc3RhbGxhdGlvbiBsb2cgZmlsZQorWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRT0iYWR0X2luc3RhbGxlci5sb2ciCisjIFRlbXAgZm9sZGVycyBob2xkaW5nIHFlbXUvcm9vdGZzIGRvd25sb2FkZWQgaW1hZ2VzCisjIEl0IHdpbGwgYmUgcHV0IGludG8gdGhlIGluc3RhbGxhdGlvbiBmb2xkZXIKK0xPQ0FMX0RPV05MT0FEPSIuL2Rvd25sb2FkX2ltYWdlIgorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlcl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTM4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiCkBAIC0wLDAgKzEsOTUgQEAKKyMgWW9jdG8gQURUIEluc3RhbGxlciBiYiBmaWxlCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTIgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKK1NVTU1BUlkgPSAiQXBwbGljYXRpb24gRGV2ZWxvcG1lbnQgVG9vbGtpdCIKK0RFU0NSSVBUSU9OID0gIkNyZWF0ZXMgdGhlIEFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQgKEFEVCkgaW5zdGFsbGVyIHRhcmJhbGwiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvdG9vbHMtcmVzb3VyY2VzL3Byb2plY3RzL2FwcGxpY2F0aW9uLWRldmVsb3BtZW50LXRvb2xraXQtYWR0IgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitMSUNFTlNFID0gIk1JVCIKKworUEFDS0FHRVMgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUFIgPSAicjExIgorCitBRFRfREVQTE9ZID0gIiR7REVQTE9ZX0RJUn0vc2RrLyIKK0FEVF9ESVIgPSAiJHtXT1JLRElSfS9hZHQtaW5zdGFsbGVyLyIKK1MgPSAiJHtXT1JLRElSfS9vcGtnLSR7UFZ9IgorCitQViA9ICIwLjMuMCIKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL29wa2cvb3BrZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2dldF9jYWNoZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZHRfaW5zdGFsbGVyIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL3V0aWwgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy9kYXRhX2RlZmluZSBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzIFwKKyAgICAgICAgICAgZmlsZTovL2FkdF9pbnN0YWxsZXIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vb3BrZy9jb25mL29wa2ctc2RrLWk2ODYuY29uZiBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDEyY2RjNzFkNzhiOThmYWNjODRiMTkzMzFlYzY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjczNWQxY2RiOGVmMzcxOGZiMGY5ZmJhNDRjYTBkOWE1YzkwZDNhN2YwMTRmMzdhNmQyZjk0NzRmNTQ5ODhmIgorCitBRFRSRVBPID89ICJodHRwOi8vYWR0cmVwby55b2N0b3Byb2plY3Qub3JnLyR7U0RLX1ZFUlNJT059IgorCisjIFRoaXMgcmVjaXBlIG1ha2VzIG5vIHNlbnNlIGFzIGEgbXVsdGlsaWIKK01VTFRJTElCUyA9ICIiCisKK2RvX3BvcHVsYXRlX2FkdFt1bWFza10gPSAiMDIyIgorCitmYWtlcm9vdCBkb19wb3B1bGF0ZV9hZHQgKCkgeworCWNkICR7V09SS0RJUn0KKwlta2RpciAtcCAke0FEVF9ERVBMT1l9CisJcm0gLWYgJHtBRFRfREVQTE9ZfS9hZHRfaW5zdGFsbGVyLnRhci5iejIKKwlybSAtcmYgJHtBRFRfRElSfQorCW1rZGlyIC1wICR7QURUX0RJUn0vb3BrZy9idWlsZAorCWNwIC1yIG9wa2cgJHtBRFRfRElSfS8KKwlzZWQgLWkgLWUgJ3MjQURUUkVQT19VUkwjJHtBRFRSRVBPfSMnICR7QURUX0RJUn0vb3BrZy9jb25mLyouY29uZgorCWNwIC1yIG9wa2ctJHtQVn0gJHtBRFRfRElSfS9vcGtnL2J1aWxkLworCW12ICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLSR7UFZ9ICR7QURUX0RJUn0vb3BrZy9idWlsZC9vcGtnLXN2bgorCXJtIC1yZiAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4vcGF0Y2hlcyAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4vLnBjCisJY3AgLXIgc2NyaXB0cyAke0FEVF9ESVJ9LworCWNwIGFkdF9pbnN0YWxsZXIgJHtBRFRfRElSfQorCWNwIGFkdF9pbnN0YWxsZXIuY29uZiAke0FEVF9ESVJ9CisJc2VkIC1pIC1lICdzI0FEVFJFUE8jJHtBRFRSRVBPfSMnICR7QURUX0RJUn0vYWR0X2luc3RhbGxlci5jb25mCisJZWNobyAnU0RLX1ZFTkRPUj0ke1NES19WRU5ET1J9JyA+PiAke0FEVF9ESVJ9L3NjcmlwdHMvZGF0YV9kZWZpbmUKKwllY2hvICdERUZBVUxUX0lOU1RBTExfRk9MREVSPSR7U0RLUEFUSH0nID4+ICR7QURUX0RJUn0vc2NyaXB0cy9kYXRhX2RlZmluZQorCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7QURUX0RJUn0vc2NyaXB0cy8KKwl0YXIgY2ZqIGFkdF9pbnN0YWxsZXIudGFyLmJ6MiBhZHQtaW5zdGFsbGVyCisJY3AgJHtXT1JLRElSfS9hZHRfaW5zdGFsbGVyLnRhci5iejIgJHtBRFRfREVQTE9ZfQorfQorCitkb19wb3B1bGF0ZV9hZHRbbm9zdGFtcF0gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcG9wbHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCithZGR0YXNrIHBvcHVsYXRlX2FkdCBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTc1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2ZpbGVzL3dnZXRfY2FjaGUucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBsaWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jIGIvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYworaW5kZXggOTAwMTQ5My4uMThlZjkxZSAxMDA2NDQKKy0tLSBhL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKKysrKyBiL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKK0BAIC01MCw2ICs1MCw3IEBAIGludCBvcGtnX2Rvd25sb2FkX2JhY2tlbmQoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0LAorIAorICAgICBhcmd2W2krK10gPSAid2dldCI7CisgICAgIGFyZ3ZbaSsrXSA9ICItcSI7CisrICAgIGFyZ3ZbaSsrXSA9ICItLW5vLWNhY2hlIjsKKyAgICAgaWYgKG9wa2dfY29uZmlnLT5odHRwX3Byb3h5IHx8IG9wa2dfY29uZmlnLT5mdHBfcHJveHkpIHsKKyAgICAgICAgIGFyZ3ZbaSsrXSA9ICItWSI7CisgICAgICAgICBhcmd2W2krK10gPSAib24iOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTc3NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYwpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlV0aWxpdHkgc2NyaXB0cyBmb3IgaW50ZXJuYXRpb25hbGl6aW5nIFhNTCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCitVUkxWPSIke0AnLicuam9pbihkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMDoyXSl9IgorU1JDX1VSSSA9ICJodHRwOi8vbGF1bmNocGFkLm5ldC8ke0JQTn0vdHJ1bmsvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiIKK1MgPSAiJHtXT1JLRElSfS9pbnRsdG9vbC0ke1BWfSIKKworREVQRU5EUyA9ICJsaWJ4bWwtcGFyc2VyLXBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZ2V0dGV4dC1kZXYgbGlieG1sLXBhcnNlci1wZXJsIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKKyMgZ2V0dGV4dCBpcyBhc3N1bWVkIHRvIGV4aXN0IG9uIHRoZSBob3N0CitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBlcmwtbW9kdWxlcyIKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59LWRldiA9ICIiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LWRlcHMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwZXJsbmF0aXZlCisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9lbnYgcGVybCIKK1BFUkxfY2xhc3MtbmF0aXZlID0gIi91c3IvYmluL2VudiBuYXRpdmVwZXJsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9pbnRsdG9vbC1ub3dhcm4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzkzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBpbnRsdG9vbC0wLjQwLjAvaW50bHRvb2wtZXh0cmFjdC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLWV4dHJhY3QuaW4JMjAxMS0xMC0wOCAyMjoyNDo1Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtZXh0cmFjdC5pbgkyMDExLTEyLTA3IDE2OjA0OjA3LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcgCisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLW1lcmdlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtbWVyZ2UuaW4JMjAxMS0xMC0wOCAxNzo1MjowMS4wMDAwMDAwMDAgKzAzMDAKKysrKyBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtbWVyZ2UuaW4JMjAxMS0xMi0wNyAxNjowNTo1NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXByZXBhcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC1wcmVwYXJlLmluCTIwMTEtMTAtMDggMDk6MTY6NTguMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXByZXBhcmUuaW4JMjAxMS0xMi0wNyAxNjowNjoxMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjICBJbnRsdG9vbCAuZGVza3RvcCwgLmRpcmVjdG9yeSBQcmVwYXJlIFRvb2wKK0luZGV4OiBpbnRsdG9vbC0wLjUwLjAvaW50bHRvb2wtdXBkYXRlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtdXBkYXRlLmluCTIwMTEtMTAtMDggMjI6MjQ6NTcuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXVwZGF0ZS5pbgkyMDExLTEyLTA3IDE2OjA2OjM5LjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNCArMSw0IEBACistIyFASU5UTFRPT0xfUEVSTEAgLXcKKysjIUBJTlRMVE9PTF9QRVJMQAorICMgLSotIE1vZGU6IHBlcmw7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgIC0qLQorIAorICMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNlZTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL25vcGVybGNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0luIHRoZSB0YXJnZXQgY2FzZSwgd2UgY2FuJ3QgY2hlY2sgaWYgcGVybCBleGlzdHMgb3IgdHJ5IHJ1bm5pbmcgaXQuIElmIHdlCitkb24ndCBwYXRjaCB0aGUgY29kZSwgdGhlIG5hdGl2ZSBwZXJsIGxvY2F0aW9uIHdvdWxkIGJlIHVzZWQsIG5vdCB0aGUgdGFyZ2V0Cit3aGljaCBpcyBhbHNvIGluY29ycmVjdC4gV2UgdGhlcmVmb3JlIGRpc2FibGUgdGhpcyBjb2RlIGFuZCByZWx5IG9uIHRoZSAKK2NvcnJlY3QgdmFsdWUgb2YgUEVSTCBiZWluZyBwYXNzZWQgaW4uCisKK1JQIDMxLzgvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1MzM4YTc2Li5lNzA5YTJiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMSwyNCArMTEsMTAgQEAgQUNfU1VCU1QocGtnZGF0YWRpcikgZG5sIGF1dG9tYWtlIGRvZXMgbm90IG5lZWQgdGhpcywgYnV0IGxpYnRvb2xpemUgZG9lcworIGFjbG9jYWxkaXI9JyR7ZGF0YWRpcn0nL2FjbG9jYWwKKyBBQ19TVUJTVChhY2xvY2FsZGlyKQorIAorLUFDX1BBVEhfUFJPRyhQRVJMLCBwZXJsKQorIGlmIHRlc3QgLXogIiRQRVJMIjsgdGhlbgorLSAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorLWZpCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGVybCA+PSA1LjguMV0pCistJFBFUkwgLWUgInVzZSA1LjguMTsiID4gL2Rldi9udWxsIDI+JjEKKy1pZiB0ZXN0ICQ/IC1uZSAwOyB0aGVuCistICAgQUNfTVNHX0VSUk9SKFtwZXJsIDUuOC4xIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCistZWxzZQorLSAgIFBFUkxfVkVSU0lPTj0iYCRQRVJMIC1lIFwicHJpbnRmICcldmQnLCAkXlZcImAiCistICAgQUNfTVNHX1JFU1VMVChbJFBFUkxfVkVSU0lPTl0pCistZmkKKy1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistaWYgYCRQRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICBBQ19NU0dfUkVTVUxUKFtva10pCistZWxzZQorLSAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKysgICBBQ19NU0dfRVJST1IoW1BFUkwgdmFyaWFibGUgbm90IHNldF0pCisgZmkKKytBQ19TVUJTVChQRVJMKQorIEFDX1BBVEhfUFJPRyhCWlIsIGJ6cikKKyAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTIxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1BlcmwgNS4yMiBoYXMgZGVwcmVjYXRlZCBzb21lIHJlZ2V4IGZlYXR1cmVzLCB3aGljaCBjYXVzZXMgd2FybmluZ3Mgd2hlbgoraW50bHRvb2wtdXBkYXRlIHJ1bnM6CisKK1VuZXNjYXBlZCBsZWZ0IGJyYWNlIGluIHJlZ2V4IGlzIGRlcHJlY2F0ZWQsIHBhc3NlZCB0aHJvdWdoIGluIHJlZ2V4OyBtYXJrZWQgYnkKKzwtLSBIRVJFIGluIG0vXiguKilcJHsgPC0tIEhFUkUgPyhbQS1aX10rKX0/KC4qKSQvIGF0CisvZGF0YS9wb2t5LW1hc3Rlci90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vaW50bHRvb2wtdXBkYXRlIGxpbmUgMTA2NS4KKworVGFrZSBhIHBhdGNoIGZyb20gRGViaWFuIHRvIHNvbHZlIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9pbnRsdG9vbC8rYnVnLzE0NjUwMTApCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0gaW50bHRvb2wtMC41MS4wLU9SSUcvaW50bHRvb2wtdXBkYXRlLmluCTIwMTUtMDUtMjcgMDA6MjA6NDMuMDM4Mzc5OTYzICswMjAwCisrKysgaW50bHRvb2wtMC41MS4wL2ludGx0b29sLXVwZGF0ZS5pbgkyMDE1LTA1LTI3IDAwOjIzOjUzLjMwOTA3ODA1MiArMDIwMAorQEAgLTEwNjIsNyArMTA2Miw3IEBACisgCX0KKyAgICAgfQorIAorLSAgICBpZiAoJHN0ciA9fiAvXiguKilcJHs/KFtBLVpfXSspfT8oLiopJC8pCisrICAgIGlmICgkc3RyID1+IC9eKC4qKVwkXHs/KFtBLVpfXSspXH0/KC4qKSQvKQorICAgICB7CisgCW15ICRyZXN0ID0gJDM7CisgCW15ICR1bnRvdWNoZWQgPSAkMTsKK0BAIC0xMTkwLDEwICsxMTkwLDEwIEBACisgCSRuYW1lICAgID1+IHMvXCgrJC8vZzsKKyAJJHZlcnNpb24gPX4gcy9cKCskLy9nOworIAorLQkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9OQU1FfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9QQUNLQUdFfT8vKTsKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfVkVSU0lPTn0/Lyk7CistCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/VkVSU0lPTn0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9OQU1FXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P1BBQ0tBR0VcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX1ZFUlNJT05cfT8vKTsKKysJJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/VkVSU0lPTlx9Py8pOworICAgICB9CisgCisgICAgIGlmICgkY29uZl9zb3VyY2UgPX4gL15BQ19JTklUXCgoW14sXCldKyksKFteLFwpXSspWyxdPyhbXixcKV0rKT8vbSkKK0BAIC0xMjE5LDExICsxMjE5LDExIEBACisgCSR2ZXJzaW9uID1+IHMvXCgrJC8vZzsKKyAgICAgICAgICRidWd1cmwgID1+IHMvXCgrJC8vZyBpZiAoZGVmaW5lZCAkYnVndXJsKTsKKyAKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfTkFNRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/UEFDS0FHRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX1ZFUlNJT059Py8pOworLQkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1ZFUlNJT059Py8pOworLSAgICAgICAgJHZhcmhhc2h7IlBBQ0tBR0VfQlVHUkVQT1JUIn0gPSAkYnVndXJsIGlmIChkZWZpbmVkICRidWd1cmwgYW5kIG5vdCAkYnVndXJsID1+IC9cJHs/XHcrfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX05BTUVcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0UifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/UEFDS0FHRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfVkVSU0lPTlx9Py8pOworKwkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9WRVJTSU9OXH0/Lyk7CisrICAgICAgICAkdmFyaGFzaHsiUEFDS0FHRV9CVUdSRVBPUlQifSA9ICRidWd1cmwgaWYgKGRlZmluZWQgJGJ1Z3VybCBhbmQgbm90ICRidWd1cmwgPX4gL1wkXHs/XHcrXH0/Lyk7CisgICAgIH0KKyAKKyAgICAgIyBccyBtYWtlcyB0aGlzIG5vdCB3b3JrLCB3aHk/ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcmVtb3ZlLXhtbC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY5ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU2lnbmVkLW9mZi1ieTogRmxvcmluIFNhcmJ1IDxmbG9yaW4uc2FyYnVAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworSW5kZXg6IGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNDAuNi5vcmlnL2ludGx0b29sLm00CTIwMDktMDItMTQgMTQ6MTI6MjguMDAwMDAwMDAwIC0wODAwCisrKysgaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00CTIwMTEtMTEtMjMgMTU6Mzk6MzQuNjg5NTYxODcyIC0wODAwCitAQCAtMTIyLDE0ICsxMjIsMTYgQEAKKyAgICBJVF9QRVJMX1ZFUlNJT049ImAkSU5UTFRPT0xfUEVSTCAtZSBcInByaW50ZiAnJXZkJywgJF5WXCJgIgorICAgIEFDX01TR19SRVNVTFQoWyRJVF9QRVJMX1ZFUlNJT05dKQorIGZpCistaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KKy0gICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCistICAgaWYgYCRJTlRMVE9PTF9QRVJMIC1lICJyZXF1aXJlIFhNTDo6UGFyc2VyIiAyPi9kZXYvbnVsbGA7IHRoZW4KKy0gICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQorLSAgIGVsc2UKKy0gICAgICAgQUNfTVNHX0VSUk9SKFtYTUw6OlBhcnNlciBwZXJsIG1vZHVsZSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorLSAgIGZpCistZmkKKysKKysjIERpc2FibGUgdGhpcyBjaGVjayBzaW5jZSB3ZSBrbm93IFhNTDo6UGFyc2VyIGlzIGluc3RhbGxlZAorKyNpZiB0ZXN0ICJ4JDIiICE9ICJ4bm8teG1sIjsgdGhlbgorKyMgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBYTUw6OlBhcnNlcl0pCisrIyAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCisrIyAgICAgICBBQ19NU0dfUkVTVUxUKFtva10pCisrIyAgIGVsc2UKKysjICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKysjICAgZmkKKysjZmkKKyAKKyAjIFN1YnN0aXR1dGUgQUxMX0xJTkdVQVMgc28gd2UgY2FuIHVzZSBpdCBpbiBwby9NYWtlZmlsZQorIEFDX1NVQlNUKEFMTF9MSU5HVUFTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNWZlZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvdXNlLW5hdGl2ZXBlcmwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorT0UgaGFzIHBlcmwgYmluYXJ5IGFzICduYXRpdmVwZXJsJyBpbiBuYXRpdmUgc3lzcm9vdCBzbyB3ZSBsb29rIGZvciBpdAoraW4gb3JkZXIgdG8gYXZvaWQgaW50bHRvb2wgc2VhcmNoaW5nIGFuZCBmaW5kaW5nIHBlcmwgZnJvbSAvdXNyL2Jpbgorb24gYnVpbGQgc3lzdGVtIHdoaWNoIG1heSBub3QgaGF2ZSBhbGwgdGhlIG1vZHVsZXMgdGhhdCBpdCBuZWVkcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KK0luZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAorKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTA4LTA5IDA4OjA3OjE2LjQyNzM0Nzg0NiAtMDcwMAorQEAgLTExMCw3ICsxMTAsNyBAQAorICAgICBBQ19NU0dfRVJST1IoW0dOVSBnZXR0ZXh0IHRvb2xzIG5vdCBmb3VuZDsgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKyBmaQorIAorLUFDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBwZXJsKQorK0FDX1BBVEhfUFJPRyhJTlRMVE9PTF9QRVJMLCBuYXRpdmVwZXJsKQorIGlmIHRlc3QgLXogIiRJTlRMVE9PTF9QRVJMIjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbcGVybCBub3QgZm91bmRdKQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2xfMC41MS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIwZDQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGludGx0b29sLmluYworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJICs9ICJmaWxlOi8vaW50bHRvb2wtbm93YXJuLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wZXJsLTUyMi1kZXByZWNhdGlvbnMucGF0Y2ggXAorICAgICAgICAgICAke05BVElWRVBBVENIRVN9IFwKKyAgICAgICAgICAgIgorCisjCisjIEFsbCBvZiB0aGUgaW50bHRvb2wgc2NyaXB0cyBoYXZlIHRoZSBjb3JyZWN0IHBhdGhzIHRvIHBlcmwgYWxyZWFkeQorIyBlbWJlZGRlZCBpbnRvIHRoZW0gYW5kIGNhbiBmaW5kIHBlcmwgZmluZSwgc28gd2UgYWRkIHRoZSByZW1vdmUgeG1sLWNoZWNrCisjIGluIHRoZSBpbnRsdG9vbC5tNCB2aWEgdGhlIHJlbW92ZS14bWwtY2hlY2sucGF0Y2gKK05BVElWRVBBVENIRVMgPSAiZmlsZTovL25vcGVybGNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgZmlsZTovL3JlbW92ZS14bWwtY2hlY2sucGF0Y2giCitOQVRJVkVQQVRDSEVTX2NsYXNzLW5hdGl2ZSA9ICJmaWxlOi8vdXNlLW5hdGl2ZXBlcmwucGF0Y2giIAorCitTUkNfVVJJW21kNXN1bV0gPSAiMTJlNTE3Y2FjMmI1N2EwMTIxY2RhMzUxNTcwZjFlNjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjdjNzRkOTQxOTZiMTUzYjc3NGFiOWY4OWIyZmE2YzZiYTc5MzUyNDA3MDM3YzhjMTRkNWFlYjMzNGU5NTljZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWMvMDAwMS1qc29uX3Rva2VuZXItcmVxdWlyZXMtSU5GLWFuZC1OQU4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5ZDkxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gOWJlNzE3MDBlYjU4MGM4MTU2ODg1ODRhNjQ2MjFhMzg4NjdjM2ZkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphbWVzIE15YXR0IDxqYW1lcy5teWF0dEB0ZXNzZWxsYS5jb20+CitEYXRlOiBUaHUsIDUgRmViIDIwMTUgMTU6NTc6MTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0ganNvbl90b2tlbmVyIHJlcXVpcmVzIElORiBhbmQgTkFOCisKKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisganNvbl90b2tlbmVyLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGpzb24tYy0wLjEyL2pzb25fdG9rZW5lci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ganNvbi1jLTAuMTIub3JpZy9qc29uX3Rva2VuZXIuYworKysrIGpzb24tYy0wLjEyL2pzb25fdG9rZW5lci5jCitAQCAtMTYsNiArMTYsNyBAQAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKyAjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlICJtYXRoX2NvbXBhdC5oIgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtMzUyLDEyICszNTMsMTAgQEAgc3RydWN0IGpzb25fb2JqZWN0KiBqc29uX3Rva2VuZXJfcGFyc2VfZQorIAorICAgICBjYXNlIGpzb25fdG9rZW5lcl9zdGF0ZV9pbmY6IC8qIGFrYSBzdGFydHMgd2l0aCAnaScgKi8KKyAgICAgICB7CistCWludCBzaXplOworLQlpbnQgc2l6ZV9pbmY7CisrCXNpemVfdCBzaXplX2luZjsKKyAJaW50IGlzX25lZ2F0aXZlID0gMDsKKyAKKyAJcHJpbnRidWZfbWVtYXBwZW5kX2Zhc3QodG9rLT5wYiwgJmMsIDEpOworLQlzaXplID0ganNvbl9taW4odG9rLT5zdF9wb3MrMSwganNvbl9udWxsX3N0cl9sZW4pOworIAlzaXplX2luZiA9IGpzb25fbWluKHRvay0+c3RfcG9zKzEsIGpzb25faW5mX3N0cl9sZW4pOworIAljaGFyICppbmZidWYgPSB0b2stPnBiLT5idWY7CisgCWlmICgqaW5mYnVmID09ICctJykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jXzAuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQyBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbmlwdWxhdGUgSlNPTiBkYXRhIgorREVTQ1JJUFRJT04gPSAiSlNPTi1DIGltcGxlbWVudHMgYSByZWZlcmVuY2UgY291bnRpbmcgb2JqZWN0IG1vZGVsIHRoYXQgYWxsb3dzIHlvdSB0byBlYXNpbHkgY29uc3RydWN0IEpTT04gb2JqZWN0cyBpbiBDLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9qc29uLWMvanNvbi1jL3dpa2kiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRlNTRiNjBmYmJjMzUxMjNiYTE5M2ZlYThlZTIxNmYyIgorCitTUkNfVVJJID0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMvcmVsZWFzZXMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2E0YmJiODgxZGZjNDAxN2U4MDIxYjVlMGE4YzQ5MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMDBjMDFiMmIzZjgyZGNiNDI2MTc1MWViNzFmMWIwODQ0MDRmYjdkNmEyODJmMDYwNzRkM2MxNzA3OGI5ZjNmIgorCitSUFJPVklERVNfJHtQTn0gPSAibGlianNvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBDbGVhbiB1cCBhdXRvY29uZiBjcnVmdCB0aGF0IHNob3VsZCBub3QgYmUgaW4gdGhlIHRhcmJhbGwKKyAgICBybSAtZiAke1N9L2NvbmZpZy5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEyZjkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2tjb25maWctZnJvbnRlbmRzL2tjb25maWctZnJvbnRlbmRzXzMuMTIuMC4wLmJiCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGludXgga2VybmVsIHN0eWxlIGNvbmZpZ3VyYXRpb24gZnJhbWV3b3JrIGZvciBvdGhlciBwcm9qZWN0cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBrY29uZmlnLWZyb250ZW5kcyBwcm9qZWN0IGFpbXMgYXQgY2VudHJhbGlzaW5nIFwKK3RoZSBlZmZvcnQgb2Yga2VlcGluZyBhbiB1cC10by1kYXRlLCBvdXQtb2YtdHJlZSwgcGFja2FnaW5nIG9mIHRoZSBcCitrY29uZmlnIGluZnJhc3RydWN0dXJlLCByZWFkeSBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IHByb2plY3RzLiBcCitUaGUga2NvbmZpZy1mcm9udGVuZHMgcGFja2FnZSBwcm92aWRlcyB0aGUga2NvbmZpZyBwYXJzZXIsIGFzIHdlbGwgYXMgYWxsIFwKK3RoZSBmcm9udGVuZHMiCitIT01FUEFHRSA9ICJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvcHJvamVjdHMva2NvbmZpZy1mcm9udGVuZHMiCitMSUNFTlNFID0gIkdQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05YjhjZjYwZmYzOTc2N2ZmMDRiNjcxZmNhODMwMjQwOCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTICs9ICJuY3Vyc2VzIGZsZXggYmlzb24gZ3BlcmYtbmF0aXZlIHBrZ2NvbmZpZy1uYXRpdmUiCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCitTUkNfVVJJID0gImh0dHA6Ly95bW9yaW4uaXMtYS1nZWVrLm9yZy9kb3dubG9hZC8ke0JQTn0vJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjkzOTI4MGRjYzgzZjhmZWFiZDg3YTFkNWY5YjAwYzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWEyNjE1YTYyYzc0YmVhNmNlM2IzODQwMmYwMGM3NTEzODU4ZjMwN2Y2YmE3YWE5ZmRiZjBiYmMxMmJjZjQwNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCBzY3JpcHRzLy5hdXRvc3R1ZmYvbTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbG4gLXMga2NvbmZpZy1jb25mICR7RH0ke2JpbmRpcn0vY29uZgorCWxuIC1zIGtjb25maWctbWNvbmYgJHtEfSR7YmluZGlyfS9tY29uZgorfQorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1nY29uZiAtLWRpc2FibGUtcWNvbmYiCisKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KK1NPTElCUyA9ICItJHtAZC5nZXRWYXIoJ1BWJywxKVs6LTJdfS5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGlia2NvbmZpZy1wYXJzZXIuc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLTIuNC42LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc3YzczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGxpYnJhcnkgc3VwcG9ydCBzY3JpcHQiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIEdOVSBsaWJ0b29sLCBhIGdlbmVyaWMgbGlicmFyeSBzdXBwb3J0IHNjcmlwdC4gXAorTGlidG9vbCBoaWRlcyB0aGUgY29tcGxleGl0eSBvZiBnZW5lcmF0aW5nIHNwZWNpYWwgbGlicmFyeSB0eXBlcyBcCisoc3VjaCBhcyBzaGFyZWQgbGlicmFyaWVzKSBiZWhpbmQgYSBjb25zaXN0ZW50IGludGVyZmFjZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC9saWJ0b29sLmh0bWwiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgIGZpbGU6Ly9saWJsdGRsL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9saWJ0b29sL2xpYnRvb2wtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RyYWlsaW5nc2xhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1maW5hbC1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9ybS1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vaGFyZGNvZGVwYXRocy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImFkZGY0NGI2NDZkZGI0ZTM5MTk4MDVhYTg4ZmE3YzVlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUzYmQ0ZDVkM2QwMjVhMzZjMjFkZDZhZjdlYTgxOGEyYWZjZDRkZmMxZWE1YTE3YjM5ZDc4NTRiY2QwYzA2ZTMiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJIyBTb21ldGltZXMgdGhpcyBmaWxlIGRvZXNuJ3QgZ2V0IHJlYnVpbHQsIGZvcmNlIHRoZSBpc3N1ZQorCXJtIC1mICR7U30vYnVpbGQtYXV4L2x0bWFpbi5zaAorCW1ha2UgYnVpbGQtYXV4L2x0bWFpbi5zaAorCS4vY29uZmlnLnN0YXR1cworfQorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1saWJ0b29saXplIgorCitERVBFTkRTID0gImxpYnRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGlibHRkbCIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCisKK0ZJTEVTXyR7UE59LWRldl9yZW1vdmUgPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfbGlibHRkbCA9ICIke2xpYmRpcn0vbGlibHRkbCR7U09MSUJTfSIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9iYXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1jcm9zc18yLjQuNi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ODgwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIKQEAgLTAsMCArMSw0MSBAQAorcmVxdWlyZSBsaWJ0b29sLSR7UFZ9LmluYworCitQQUNLQUdFUyA9ICIiCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL2ZpeGluc3RhbGwucGF0Y2giCisKK2RhdGFkaXIgPSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfZGF0YWRpcn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWluc3RhbGwgLW0gMDc1NSAke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyR7SE9TVF9TWVN9LWxpYnRvb2wKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCUdSRVA9Jy9iaW4vZ3JlcCcgU0VEPSdzZWQnICR7U30vYnVpbGQtYXV4L2lubGluZS1zb3VyY2UgbGlidG9vbGl6ZSA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2xpYnRvb2xpemUKKwljaG1vZCAwNzU1ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2xpYnRvb2xpemUKKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9kYXRhZGlyfS9hY2xvY2FsLworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29tcGlsZSAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9jb25maWcuZ3Vlc3MgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29uZmlnLnN1YiAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9kZXBjb21wICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2luc3RhbGwtc2ggJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvbWlzc2luZyAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vYnVpbGQtYXV4L2x0bWFpbi5zaCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAtbSAwNjQ0ICR7U30vbTQvKi5tNCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vYWNsb2NhbC8KK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitsaWJ0b29sY3Jvc3Nfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9ICR7U1lTUk9PVF9ERVNURElSfSR7dGFyZ2V0X2RhdGFkaXJ9Cit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJsaWJ0b29saXplICotbGlidG9vbCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC1uYXRpdmVfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1MjE4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworREVQRU5EUyA9ICIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCisKK2luaGVyaXQgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX05BVElWRX0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDA4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC00MDQsMjEgKzQwNCw2IEBAICQobm90ZXNfdHh0KTogJChub3Rlc190ZXhpKQorIAkkKEFNX1ZfR0VOKSQoTUFLRUlORk8pIC1QICckKHNyY2RpcikvZG9jJyAtLW5vLWhlYWRlcnMgXAorIAkgICAgJChNQUtFSU5GT0ZMQUdTKSAtbyAnJEAnICckKG5vdGVzX3RleGkpJworIAorLWRpc3RfbWFuMV9NQU5TCQk9ICQobGlidG9vbF8xKSAkKGxpYnRvb2xpemVfMSkKKy1NQUlOVEFJTkVSQ0xFQU5GSUxFUwkrPSAkKGRpc3RfbWFuMV9NQU5TKQorLXVwZGF0ZV9tYW5zID0gXAorLSAgUEFUSD0iLiQoUEFUSF9TRVBBUkFUT1IpJCRQQVRIIjsgZXhwb3J0IFBBVEg7IFwKKy0gICQoSEVMUDJNQU4pIC0tb3V0cHV0PSckQCcKKy0KKy0jIEl0J3Mgd3JvbmcgdG8gbWFrZSBkaXN0cmlidXRlZCBmaWxlcyAoZS5nLiAkKGxpYnRvb2xfMSkpIHJlbHkgb24KKy0jIGZpbGVzIGNyZWF0ZWQgaW4gdGhlIGJ1aWxkIHRyZWUsIHNvIGluc3RlYWQgd2UgcmVnZW5lcmF0ZSB0aGUKKy0jIG1hbnVhbCBwYWdlcyBpZiB0aGUgc291cmNlcyBmb3IgdGhlIGJ1aWxkLXRyZWUgZmlsZXMgd2Ugd2FudCB0bworLSMgcnVuIGhhdmUgY2hhbmdlZC4KKy0kKGxpYnRvb2xfMSk6ICQobHRtYWluX3NoKQorLQkkKEFNX1ZfR0VOKSQodXBkYXRlX21hbnMpIC0taGVscC1vcHRpb249LS1oZWxwLWFsbCBsaWJ0b29sCistJChsaWJ0b29saXplXzEpOiAkKGxpYnRvb2xpemVfaW4pCistCSQoQU1fVl9HRU4pJCh1cGRhdGVfbWFucykgbGlidG9vbGl6ZQorLQorIAorICMjIC0tLS0tLS0tLS0tLS0gIyMKKyAjIyBJbnN0YWxsYXRpb24uICMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LWZpbmFsLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWY4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitFbmFsYmluZyBzeXNyb290IHN1cHBvcnQgZXhwb3NlZCBhIGJ1ZyB3aGVyZSB0aGUgZmluYWwgbGlicmFyeQoraGFkIGFuIFJQQVRIIGVuY29kZWQgaW50byBpdCB3aGljaCBzdGlsbCBwb2ludGVkIHRvIHRoZSBzeXNyb290LgorVGhpcyB3b3JrcyBhcm91bmQgdGhlIGlzc3VlIHVudGlsIGl0IGdldHMgc29ydGVkIG91dCB1cHN0cmVhbS4KKworRml4IHN1Z2dlc3RlZCBieSBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTc1NjksOSArNzU2OSwxMSBAQCBFT0YKKyAJICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCisgCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisgCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCQkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCistCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKy0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisgCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJCSAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisgCQllbHNlCitAQCAtODMwMSw2ICs4MzAzLDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCitAQCAtODM1Miw2ICs4MzU4LDEwIEBAIEVPRgorICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisgCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0CisrCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKyAJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkOTU5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCB1cGRhdGVzIGxpYnRvb2wubTQgKGFuZCBpdHMgb3V0cHV0KSB0byByZXNvbHZlIGEgcHJvYmxlbQord2l0aCB2YXJpYWJsZSAnbHRfc3lzcm9vdCcgbm90IGJlaW5nIHByb3Blcmx5IHVwZGF0ZWQgaWYgdGhlIG9wdGlvbgorJy0td2l0aFstbGlidG9vbF0tc3lzcm9vdCcgaXMgbm90IHByb3ZpZGVkIHdoZW4gcnVubmluZyB0aGUgJ2NvbmZpZ3VyZScKK3NjcmlwdCBmb3IgYSBwYWNrYWdlLgorCitJIGhhdmUgYWxzbyByZXBvcnRlZCB0aGUgcHJvYmxlbSB0byBsaWJ0b29sIGhlcmUKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1saWJ0b29sLzIwMTMtMDkvbXNnMDAwMDUuaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBIYW5zIEJlY2tlcnVzIDxoYW5zLmJlY2tlcnVzIGF0IGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC0xMjI1LDE2ICsxMjI1LDIxIEBAIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKyBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKyBsdF9zeXNyb290PQorIGNhc2UgJHdpdGhfbGlidG9vbF9zeXNyb290IGluICMoCistIHllcykKKysgbm8pCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgICAjIFRyZWF0ICIvIiB0aGUgc2FtZSBhIGFuIHVuc2V0IHN5c3Jvb3QuIEl0IHNlZW1zIHRvIGJlIG1vcmUKKysgICAgICMgY29tcGF0aWJsZSBhY3Jvc3MgaG9zdCBwbGF0Zm9ybXMgdGhhdCB3YXkhPworKyAgICAgaWYgdGVzdCAiJGx0X3N5c3Jvb3QiID0gLzsgdGhlbgorKyAgICAgICBsdF9zeXNyb290PQorKyAgICAgZmkKKyAgICBmaQorICAgIDs7ICMoCisrIHllc3wnJ3wvKQorKyAgIDs7ICMoCisgIC8qKQorICAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgIDs7ICMoCistIG5vfCcnKQorLSAgIDs7ICMoCisgICopCisgICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfbGlidG9vbF9zeXNyb290XSkKKyAgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmVjOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorV2UgZG9uJ3Qgd2FudCB0byBhZGQgUlBBVEhTIHdoaWNoIG1hdGNoIGRlZmF1bHQgbGlua2VyCitzZWFyY2ggcGF0aHMsIHRoZXkncmUgYSB3YXN0ZSBvZiBzcGFjZS4gVGhpcyBwYXRjaAorZmlsdGVycyBsaWJ0b29scyBsaXN0IGFuZCByZW1vdmVzIHRoZSBvbmVzIHdlIGRvbid0IG5lZWQuCisKK1JQIDIzLzkvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsaWJ0b29sLTIuNC4yL2J1aWxkLWF1eC9sdG1haW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0b29sLTIuNC4yLm9yaWcvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGxpYnRvb2wtMi40LjIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTcyODYsOCArNzI4NiwxNCBAQCBFT0YKKyAJCSAgZXNhYworIAkJZmkKKyAJICAgICAgZWxzZQorLQkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgICAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgICAgICA7OworKwkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKKyAJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgICAgICBjYXNlICIkcGVybV9ycGF0aCAiIGluCitAQCAtODAxOSw4ICs4MDI1LDE0IEBAIEVPRgorIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisrICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gaGFyZGNvZGUgaW4gYW4gcnBhdGggaWYgaXQgaXNuJ3QgaW4gdGhlCisrICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorQEAgLTgwNzAsOCArODA4MiwxNCBAQCBFT0YKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgIDs7CisrCSAgICBlc2FjICAgIAorIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM0M2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXhpbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitUaGVyZSBpcyBubyBwb2ludCBpbiBoYXZpbmcgImV4ZWN1dGFibGUiIGJpbmFyaWVzIGluIHRoZSAubGlicworZGlyZWN0b3J5IGxpbmtlZCB3aXRoIGRpZmZlcmVudCBycGF0aHMgdG8gdGhlIHRhcmdldCB3aGljaCAKK2NvdWxkIGNvbmNpdmFibHkgYmUgcnVuIG9uIHRoZSBidWlsZCBzeXN0ZW0gd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgZXh0cmEgcnBhdGhzICgkY29tcGlsZV9ycGF0aCkgc28gdGhhdCB0aGUKK291dHB1dCBmcm9tIHRoZSAibGluayIgc3RhZ2UgY2FuIGJlIHVzZWQgb24gdGhlIHRhcmdldC4gV2UgY2FuIHRoZW4KK2F2b2lkIGhhdmluZyB0byAicmVsaW5rIiBkdXJpbmcgdGhlIGluc3RhbGwgc3RhZ2UuCisKK1RoaXMgc2F2ZXMgc29tZSBidWlsZCB0aW1lIChkb19pbnN0YWxsIGlzIG92ZXIgMiBtaW51dGVzIGZhc3RlciBmb3IKK3B1bHNlYXVkaW8pLgorCitUaGlzIHBhdGNoIGFsc28gcmVtb3ZlcyBhbiBhbm5veWluZyAic2VlbXMgdG8gYmUgbW92ZWQiIHdhcm5pbmcKK3doaWNoIGlzIHRvdGFsbHkgYm9ndXMgaW4gdGhlIHN5c3Jvb3QgY2FzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBhcmUgdW5saWtlbHkgdG8gdGFrZSBhIHBhdGNoIGxpa2UgdGhpc10KKworUlAgMjAxMS8xMS8xNgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMjM1NSw3ICsyMzU1LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKy0JaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKyAgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKyAgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisgICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CitAQCAtMjM5NCw3ICsyMzk0LDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAJICBzaGlmdAorIAorIAkgIHNyY25hbWU9JHJlYWxuYW1lCistCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSR7cmVhbG5hbWV9VAorKwkgIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorIAorIAkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKyAJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKK0BAIC02MTYyLDE1ICs2MTYyLDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisgCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisgCSAgICAjIHNlYXJjaCBwYXRoLgorLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICopCistCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKy0JICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKysJICAgICNjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAjKiIgJGFic2RpciAiKikgOzsKKysJICAgICMqKQorKwkgICAgIyAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgIyAgKiIgJGFic2RpciAiKikgOzsKKysJICAgICMgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworKwkgICAgIyAgZXNhYworKwkgICAgIyAgOzsKKysJICAgICNlc2FjCisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkbGliZGlyICIqKSA7OworIAkgICAgKikKK0BAIC02MjM2LDE1ICs2MjM2LDE1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisgCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisgCSAgICAjIHNlYXJjaCBwYXRoLgorLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICopCistCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKy0JICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CistCSAgICAgIGVzYWMKKy0JICAgICAgOzsKKy0JICAgIGVzYWMKKysJICAgICNjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisrCSAgICAjKiIgJGFic2RpciAiKikgOzsKKysJICAgICMqKQorKwkgICAgIyAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorKwkgICAgIyAgKiIgJGFic2RpciAiKikgOzsKKysJICAgICMgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworKwkgICAgIyAgZXNhYworKwkgICAgIyAgOzsKKysJICAgICNlc2FjCisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisgCSAgICAqIiAkbGliZGlyICIqKSA7OworIAkgICAgKikKK0BAIC02NTkwLDggKzY1OTAsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICBldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKyAJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCistCQkgICAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisrCQkgICN0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorKwkJICAjICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKyAKKyAJCSAgcGF0aD0tTCRhYnNkaXIKKyAJCWZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9oYXJkY29kZXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjM5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitJZiBmb3IgZXhhbXBsZSB5b3UgYnVpbGQgb24gYSBtYWNoaW5lIHdpdGggL2Jpbi9ncmVwLCB0aGVuIHJlc3RvcmUgdGhhdCBzc3RhdGUKK29udG8gYSBtYWNoaW5lIHdpdGggL3Vzci9iaW4vZ3JlcCwgdGhpbmdzIHdpbGwgZmFpbC4gU2ltcGx5IGRvbid0IGJvdGhlcgoraGFyZGNvZGluZyBwYXRocy4KKworUlAgMjAxNS8yLzMKKworSW5kZXg6IGxpYnRvb2wtMi40LjUvbGlidG9vbGl6ZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRvb2wtMi40LjUub3JpZy9saWJ0b29saXplLmluCisrKysgbGlidG9vbC0yLjQuNS9saWJ0b29saXplLmluCitAQCAtNDAsMTEgKzQwLDExIEBACisgCisgOiAke0FVVE9DT05GPSJhdXRvY29uZiJ9CisgOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CistOiAke0VHUkVQPSJARUdSRVBAIn0KKy06ICR7RkdSRVA9IkBGR1JFUEAifQorLTogJHtHUkVQPSJAR1JFUEAifQorLTogJHtMTl9TPSJATE5fU0AifQorLTogJHtTRUQ9IkBTRURAIn0KKys6ICR7RUdSRVA9ImVncmVwIn0KKys6ICR7RkdSRVA9ImZncmVwIn0KKys6ICR7R1JFUD0iZ3JlcCJ9CisrOiAke0xOX1M9ImxuIC1zIn0KKys6ICR7U0VEPSJzZWQifQorIAorIAorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0YzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvbm9ybS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitsaWJ0b29sOiBub3JtYWxpemUgbGluayBwYXRocyBiZWZvcmUgY29uc2lkZXJpbmcgZm9yIFJQQVRICisKK0xpYnRvb2wgbWF5IGJlIHBhc3NlZCBsaW5rIHBhdGhzIG9mIHRoZSBmb3JtICIvdXNyL2xpYi8uLi9saWIiLCB3aGljaAorZm9vbCBpdHMgZGV0ZWN0aW9uIGNvZGUgaW50byB0aGlua2luZyBpdCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgYW4KK1JQQVRIIGluIHRoZSBnZW5lcmF0ZWQgYmluYXJ5LiAgTm9ybWFsaXplIGJlZm9yZSBjb21wYXJpc2lvbi4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgkyMDEyLTA4LTE2IDEzOjU4OjU1LjA1ODkwMDM2MyAtMDcwMAorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgkyMDEyLTA4LTIyIDExOjAxOjM0LjE5MTM0NTk4OSAtMDcwMAorQEAgLTcyODgsOCArNzI4OCwxMCBAQAorIAkgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJGxpYmRpciIKKysgICAgICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICAgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisgICAgICAgICAgICAgICAgICAgIDs7CitAQCAtODAyNyw4ICs4MDI5LDEwIEBACisgCSAgZWxzZQorICAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorICAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKyAgICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyX25vcm09JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCistCSAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgKiIgJGxpYmRpcl9ub3JtICIqKSA7OworIAkgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgICAgICAgIHJwYXRoKz0iICRmbGFnIgorICAgICAgICAgICAgICAgIDs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcHJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2RmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitSZW5hbWVzICJsaWJ0b29sIiAtPiAiJHtUQVJHRVRfUFJFRklYfWxpYnRvb2wiIHdoaWNoIG1ha2VzIHN1cmUKK2l0IGNhbid0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIGhvc3QgbGlidG9vbC4KKworT3JpZ2luYWxseSBieTogUlAKKworVXBkYXRlZDogRGF0ZTogMjAxMC8wNi8yOAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSXQgYWxzbyBhZGp1c3RzIGxpYnRvb2wgc28gdGhhdCB0aGUgaGVhZGVyIGF0IHRoZSBzY3JpcHQgaXMgdXNlZCBmb3IgCitzY3JpcHQgZXhlY3V0aW9uIGFuZCBub3QgdGhldmFsdWUgb2YgJFNIRUxMLiBUaGlzIGlzIGJlY2F1c2UgbWFueSAKK01ha2VmaWxlcyBjaGFuZ2UgJFNIRUxMIHNvIGRhc2ggY2FuIGdldCB1c2VkIHRvIGV4ZWN1dGUgd2hhdCBpcyAKK290aGVyd2lzZSBjb25maWd1cmVkIGFzIGEgYmFzaCBzaGVsbCBzY3JpcHQuIFNpbmNlIHdlIGRvbid0IG5lZWQgdG8gCitleGVjdXRlIHNjaXB0cyB0aGlzIHdheSBvbiBhbnkgc3lzdGVtIEknbSBhd2FyZSBvZiB1cyBidWlsZGluZyB1cG9uLCAKK3RoZSBzaW1wbGVzdCBmaXggaXMganVzdCB0byByZW1vdmUgJFNIRUxMLgorCitVcGRhdGVkOiBEYXRlOiAyMDExLzExLzA5CitSUAorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTMxLDcgKzMxLDcgQEAgU1VCRElSUwkJCT0gLgorIERJU1RfU1VCRElSUwkJPSAkKFNVQkRJUlMpCisgRVhUUkFfRElTVAkJPQorIAorLUJVSUxUX1NPVVJDRVMJCT0gbGlidG9vbCBsaWJ0b29saXplCisrQlVJTFRfU09VUkNFUwkJPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wgbGlidG9vbGl6ZQorIAorIENMRUFORklMRVMJCT0KKyBNT1NUTFlDTEVBTkZJTEVTCT0KK0BAIC02Nyw3ICs2Nyw3IEBAIGJ1aWxkX3NjcmlwdHMJPSAkKHNyY2RpcikvJChhdXhfZGlyKS9hbm5vdW5jZS1nZW4gXAorIAorIEVYVFJBX0RJU1QgICAgICs9IGJvb3RzdHJhcCBib290c3RyYXAuY29uZiAkKGJ1aWxkX3NjcmlwdHMpIGNmZy5tayBtYWludC5tayBcCisgCQkgIEdOVW1ha2VmaWxlCistQ0xFQU5GSUxFUyAgICAgKz0gbGlidG9vbCBsaWJ0b29saXplCisrQ0xFQU5GSUxFUyAgICAgKz0gJChob3N0X2FsaWFzKS1saWJ0b29sIGxpYnRvb2xpemUKKyAKKyAjIyBJZiBhIGZpbGUgaXMgbmFtZWQgc2V2ZXJhbCB0aW1lcyBiZWxvdywgYW5kIGVzcGVjaWFsbHkgaWYgaXQKKyAjIyBpcyBhIGRpc3RyaWJ1dGVkIGZpbGUgY3JlYXRlZCBkdXJpbmcgTGlidG9vbCBib290c3RyYXAsIHdlCitAQCAtMjc2LDcgKzI3Niw3IEBAIGNvbmZpZ3VyZV9lZGl0ID0gJChib290c3RyYXBfZWRpdCkgXAorIAktZSAnc3xAc3JjZGlyXEB8JChzcmNkaXIpfGcnCisgCisgIyBUaGUgbGlidG9vbCBkaXN0cmlidXRvciBhbmQgdGhlIHN0YW5kYWxvbmUgbGlidG9vbCBzY3JpcHQuCistYmluX1NDUklQVFMgPSBsaWJ0b29sCisrYmluX1NDUklQVFMgPSAkKGhvc3RfYWxpYXMpLWxpYnRvb2wKKyAKKyBsaWJ0b29saXplOiAkKGxpYnRvb2xpemVfaW4pICQoY29uZmlnX3N0YXR1cykKKyAJJChBTV9WX2F0KXJtIC1mICckQCcKK0BAIC0yODcsNyArMjg3LDcgQEAgbGlidG9vbGl6ZTogJChsaWJ0b29saXplX2luKSAkKGNvbmZpZ19zdGF0dXMpCisgIyBXZSB1c2VkIHRvIGRvIHRoaXMgd2l0aCBhICdzdGFtcC12Y2wnIGZpbGUsIGJ1dCBub24tZ21ha2UgYnVpbGRzCisgIyB3b3VsZCByZXJ1biBjb25maWd1cmUgb24gZXZlcnkgaW52b2NhdGlvbiwgc28gbm93IHdlIG1hbnVhbGx5CisgIyBjaGVjayB0aGUgdmVyc2lvbiBudW1iZXJzIGZyb20gdGhlIGJ1aWxkIHJ1bGUgd2hlbiBuZWNlc3NhcnkuCistbGlidG9vbDogJChsdG1haW5fc2gpICQoY29uZmlnX3N0YXR1cykgJChkb3R2ZXJzaW9uKQorKyQoaG9zdF9hbGlhcyktbGlidG9vbDogJChsdG1haW5fc2gpICQoY29uZmlnX3N0YXR1cykgJChkb3R2ZXJzaW9uKQorIAlAJChyZWJ1aWxkKTsgXAorIAlpZiB0ZXN0IC1mICckQCc7IHRoZW4gXAorIAkgIGV2YWwgYCckKFNFRCknIC1uICcvXnBhY2thZ2VfcmV2aXNpb249L3AnICckQCdgOyBcCitAQCAtNzMxLDEyICs3MzEsMTIgQEAgVEVTVFNfRU5WSVJPTk1FTlQgPSBNQUtFPSIkKE1BS0UpIiBDQz0iJChDQykiIENGTEFHUz0iJChDRkxBR1MpIiBcCisgCisgQlVJTERDSEVDS19FTlZJUk9OTUVOVCA9IF9sdF9wa2dkYXRhZGlyPSIkKGFic190b3Bfc3JjZGlyKSIgXAorIAlMSUJUT09MSVpFPSIkKGFic190b3BfYnVpbGRkaXIpL2xpYnRvb2xpemUiIFwKKy0JTElCVE9PTD0iJChhYnNfdG9wX2J1aWxkZGlyKS9saWJ0b29sIiBcCisrCUxJQlRPT0w9IiQoYWJzX3RvcF9idWlsZGRpcikvJChob3N0X2FsaWFzKS1saWJ0b29sIiBcCisgCXRzdF9hY2xvY2FsZGlyPSIkKGFic190b3Bfc3JjZGlyKS9tNCIKKyAKKyBJTlNUQUxMQ0hFQ0tfRU5WSVJPTk1FTlQgPSBcCisgCUxJQlRPT0xJWkU9IiQoYmluZGlyKS9gZWNobyBsaWJ0b29saXplIHwkKFNFRCkgJyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknYCIgXAorLQlMSUJUT09MPSIkKGJpbmRpcikvYGVjaG8gbGlidG9vbCB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKysJTElCVE9PTD0iJChiaW5kaXIpL2BlY2hvICQoaG9zdF9hbGlhcyktbGlidG9vbCB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKyAJTFRETElOQ0w9Ii1JJChpbmNsdWRlZGlyKSIgXAorIAlMSUJMVERMPSIkKGxpYmRpcikvbGlibHRkbC5sYSIgXAorIAl0c3RfYWNsb2NhbGRpcj0iJChhY2xvY2FsZGlyKSIKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTg2LDcgKzg2LDggQEAgX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisgTElCVE9PTF9ERVBTPSRsdG1haW4KKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgQUNfU1VCU1QoTElCVE9PTClkbmwKKyAKKyBfTFRfU0VUVVAKK0BAIC0xOTksNyArMjAwLDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJiMTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9yZW5hbWUtd2l0aC1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsMTY2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCByZW5hbWVzIHRoZSAtLXdpdGgtc3lzcm9vdCBvcHRpb24gdG8gLS13aXRoLWxpYnRvb2wtc3lzcm9vdAordG8gYXZvaWQgbmFtZXNwYWNlIGNvbmZsaWN0IHdpdGggYmludXRpbHMsIGdjYyBhbmQgb3RoZXIgdG9vbGNoYWluCitjb21wb25lbnRzLgorCitJIGFsc28gcmVwb3J0ZWQgdGhlIHByb2JsZW0gdG8gbGlidG9vbCBoZXJlCisKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9saWJ0b29sLzIwMTAtMTAvbXNnMDAwNDguaHRtbAorCistS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9tNC9saWJ0b29sLm00IGIvbTQvbGlidG9vbC5tNAorLS0tIGEvbTQvbGlidG9vbC5tNAorKysrIGIvbTQvbGlidG9vbC5tNAorQEAgLTEyMTUsMjggKzEyMTUsMjggQEAgX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorICMgLS0tLS0tLS0tLS0tLS0tLQorIEFDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKKyBbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCistQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAorLVtBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorK0FDX0FSR19XSVRIKFtsaWJ0b29sLXN5c3Jvb3RdLAorK1tBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYnRvb2wtc3lzcm9vdEA8OkA9RElSQDo+QF0sCisgICBbU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QKKyAgICBpZiBub3Qgc3BlY2lmaWVkKS5dKV0sCistW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorK1tdLCBbd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm9dKQorIAorIGRubCBsdF9zeXNyb290IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCB1bnF1b3RlZC4gIFdlIHF1b3RlIGl0IGhlcmUKKyBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KKyBsdF9zeXNyb290PQorLWNhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAorK2Nhc2UgJHdpdGhfbGlidG9vbF9zeXNyb290IGluICMoCisgIHllcykKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgICBmaQorICAgIDs7ICMoCisgIC8qKQorLSAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICA7OyAjKAorICBub3wnJykKKyAgICA7OyAjKAorICAqKQorLSAgIEFDX01TR19SRVNVTFQoWyR3aXRoX3N5c3Jvb3RdKQorKyAgIEFDX01TR19SRVNVTFQoWyR3aXRoX2xpYnRvb2xfc3lzcm9vdF0pCisgICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgICA7OworIGVzYWMKK2RpZmYgLS1naXQgYS90ZXN0cy9zeXNyb290LmF0IGIvdGVzdHMvc3lzcm9vdC5hdAorLS0tIGEvdGVzdHMvc3lzcm9vdC5hdAorKysrIGIvdGVzdHMvc3lzcm9vdC5hdAorQEAgLTY0LDcgKzY0LDcgQEAgd2hpbGUgcmVhZCBmaWxlOyBkbworIGRvbmVdKQorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTExNCw3ICsxMTQsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF1dKQorQEAgLTE1NSw3ICsxNTUsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbcHJvZy5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF1dKQorZGlmZiAtLWdpdCBhL3Rlc3RzL3Rlc3RzdWl0ZSBiL3Rlc3RzL3Rlc3RzdWl0ZQorLS0tIGEvdGVzdHMvdGVzdHN1aXRlCisrKysgYi90ZXN0cy90ZXN0c3VpdGUKK0BAIC00ODk0NSw3ICs0ODk0NSw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNDkxNTQsNyArNDkxNTQsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTQ5MzQyLDcgKzQ5MzQyLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC00OTY5NCw3ICs0OTY5NCw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNDk5MDMsNyArNDk5MDMsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwMDkxLDcgKzUwMDkxLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDQ0Myw3ICs1MDQ0Myw3IEBAICRhdF90cmFjZW9uOyB9CisgCisgCisgTERGTEFHUz0iJExERkxBR1MgLS1zeXNyb290PSRzeXNyb290IC1uby11bmRlZmluZWQiCistY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorK2NvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0kc3lzcm9vdCAtLXByZWZpeD0kcHJlZml4IgorIAorICM/Pz8KKyBpZiB0ZXN0IFBBVEggPSAiJHNobGlicGF0aF92YXIiOyB0aGVuCitAQCAtNTA2NTIsNyArNTA2NTIsNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBQ19QUk9HX0NDCisgQUNfQ09ORklHX1NSQ0RJUihbbGliMi5jXSkKKyBMVF9JTklUCistc3lzcm9vdD0kd2l0aF9zeXNyb290Cisrc3lzcm9vdD0kd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBBQ19TVUJTVChbc3lzcm9vdF0pCisgQUNfT1VUUFVUKE1ha2VmaWxlKQorIF9BVEVPRgorQEAgLTUwODQwLDcgKzUwODQwLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODgyNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC90cmFpbGluZ3NsYXNoLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBIGNvbW1hbmQgbGlrZSAvYmluL3NoIC4uLy4uL2k1ODYtcG9reS1saW51eC1saWJ0b29sICAgLS1tb2RlPWluc3RhbGwgL3Vzci9iaW4vaW5zdGFsbCAtYyAgIGdjay1yb290cy1zdG9yZS1zdGFuZGFsb25lLmxhICcvbWVkaWEvZGF0YTEvYnVpbGRzL3Bva3kxL3RtcC93b3JrL2NvcmUyLXBva3ktbGludXgvZ25vbWUta2V5cmluZy0yLjI2LjEtcjEvaW1hZ2UvdXNyL2xpYi9nbm9tZS1rZXlyaW5nL3N0YW5kYWxvbmUvJyBmYWlscyAoZS5nLiBnbm9tZS1rZXlyaW5nIG9yIHB1bHNlYXVkaW8pCisKK1RoaXMgaXMgYmVjYXVzZSBsaWJkaXIgaGFzIGEgdHJhaWxpbmcgc2xhc2ggd2hpY2ggYnJlYWtzIHRoZSBjb21wYXJpc2lvbi4KKworUlAgMi8xLzEwCisKK01lcmdlZCBhIHBhdGNoIHJlY2VpdmVkIGZyb20gR2FyeSBUaG9tYXMgPGdhcnlAbWxiYXNzb2MuY29tPgorCitEYXRlOiAyMDEwLzA3LzEyCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMjM1Niw4ICsyMzU2LDE1IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWZ1bmNfYXBwZW5kIGRpciAiJG9iamRpciIKKyAKKyAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorKyAgICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGxpYmRpciIKKysgICAgICBkZXN0bGliZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRkZXN0ZGlyIgorKyAgICAgIHNfZGVzdGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisgCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKy0JICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICIkZGVzdGRpciIgfCAkU0VEIC1lICJzJSRsaWJkaXJcJCUlImAKKysJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJHNfZGVzdGRpciIgfCAkWHNlZCAtZSAicyUkZGVzdGxpYmRpclwkJSUiYAorIAorIAkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKyAJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzNiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaApAQCAtMCwwICsxLDE3OSBAQAorQ3V0IGFuZCBwYXN0ZSB0aGUgcGllY2VzIG9mIGJ1aWxkLWF1eC9vcHRpb25zLXBhcnNlciBpbmxpbmUgaW50byB0aGUgbWFpbgorbHRtYWluLnNoIGNvZGUuIFRoaXMgcmVtb3ZlcyBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGNhdXNlZCBieSB0aGUgCityZXBlYXRlZCBjYWxscyB0byBmdW5jX3F1b3RlX2Zvcl9ldmFsLCB0aGUgbWVjaGFuaXNtIGZ1bmNsaWIgdXNlcwordG8gY29uc3RydWN0IHRoZSBmdW5jdGlvbnMgdXNlZCBmb3Igb3B0aW9uIHBhcnNpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtCZWluZyBkaXNjdXNzZWQgb24gbWFpbGluZyBsaXN0IEZlYiAyMDE1XQorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK2luZGV4IGQ1Y2YwN2EuLjBmNTQzMDMgMTAwNjQ0CistLS0gYS9idWlsZC1hdXgvbHRtYWluLmluCisrKysgYi9idWlsZC1hdXgvbHRtYWluLmluCitAQCAtMzQyLDExICszNDIsMTUgQEAgX0xUX0VPRgorICMgbGlidG9vbF9vcHRpb25zX3ByZXAgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQcmVwYXJhdGlvbiBmb3Igb3B0aW9ucyBwYXJzZWQgYnkgbGlidG9vbC4KKy1saWJ0b29sX29wdGlvbnNfcHJlcCAoKQorLXsKKysjbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKysjeworICAgICAkZGVidWdfbW9kZQorIAorICAgICAjIE9wdGlvbiBkZWZhdWx0czoKKysgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKysgICAgb3B0X3dhcm5pbmdfdHlwZXM9CisrCisrICAgICMgT3B0aW9uIGRlZmF1bHRzOgorICAgICBvcHRfY29uZmlnPWZhbHNlCisgICAgIG9wdF9kbG9wZW49CisgICAgIG9wdF9kcnlfcnVuPWZhbHNlCitAQCAtMzgyLDE5ICszODYsMTQgQEAgbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKyAgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgIDs7CisgICAgIGVzYWMKKy0KKy0gICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorLX0KKy1mdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIGxpYnRvb2xfb3B0aW9uc19wcmVwCisrI30KKyAKKyAKKyAjIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQcm92aWRlIGhhbmRsaW5nIGZvciBsaWJ0b29sIHNwZWNpZmljIG9wdGlvbnMuCistbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisteworKyNsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKysjeworICAgICAkZGVidWdfY21kCisgCisgICAgICMgUGVyZm9ybSBvdXIgb3duIGxvb3AgdG8gY29uc3VtZSBhcyBtYW55IG9wdGlvbnMgYXMgcG9zc2libGUgaW4KK0BAIC00NzQsMjkgKzQ3Myw5MCBAQCBsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIAorLQkjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CistICAgICAgICAqKQkJc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKy0gICAgICBlc2FjCistICAgIGRvbmUKKysgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisrICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKysgICAgICAgICAgICAgICAgICAgICAgJGRlYnVnX2NtZAorKyAgICAgICAgICAgICAgICAgICAgICA7OworIAorKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKwkJICAgICAgOzsKKyAKKy0gICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CistfQorLWZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucworKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisrICAgICAgICAgICAgICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgc3BhY2UgcHJldmVudHMgbWF0Y2hpbmcgbGFzdCAkMSBhYm92ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBlcyAiICQxIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqYWxsKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqbm9uZSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPW5vbmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcikKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz1mdW5jX2ZhdGFsX2Vycm9yCisrICAgICAgICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICAgICAgICopCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVnb3J5OiAnJDEnIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAgLS12ZXJib3NlfC12KSBvcHRfdmVyYm9zZT06IDs7CisrICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworKyAgICAgICAgLVw/fC1oKSAgICAgICBmdW5jX3VzYWdlIDs7CisrICAgICAgICAtLWhlbHApICAgICAgIGZ1bmNfaGVscCA7OworKworKwkjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zIChwbHVnaW5zIG1heSBuZWVkIHRoaXMpOgorKwktLSo9KikgICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzICIkX0dfb3B0IgorKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X2VxdWFsc19yaHMiICR7MSsiJEAifQorKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorKyAgICAgICAgICAgICAgICAgICAgICA7OworKworKyAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gc2hvcnQgb3B0aW9uczoKKysgICAgICAgIC1XKikKKysgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisrICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisrICAgICAgICAtXD8qfC1oKnwtdip8LXgqKQorKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKysgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKysgICAgICAgIC0qKSAgICAgICAgICAgZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJF9HX29wdCciIDs7CisrICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OyBzaGlmdDsgYnJlYWsgOzsKKysgICAgICBlc2FjCisrICAgIGRvbmUKKysjfQorIAorKyMgRGlzcGxheSBhbGwgd2FybmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZlbi4KKyt0ZXN0IC1uICIkb3B0X3dhcm5pbmdfdHlwZXMiIHx8IG9wdF93YXJuaW5nX3R5cGVzPSIgJHdhcm5pbmdfY2F0ZWdvcmllcyIKKyAKKyAKKyAjIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorICMgYXJndW1lbnRzLgorLWxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQorLXsKKysjbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCisrI3sKKyAgICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgICAgaWYgdGVzdCAwIC1sdCAkIzsgdGhlbgorLSAgICAgIG5vbm9wdD0kMQorKyAgICAgIG5vbm9wdD0kX0dfb3B0CisgICAgICAgc2hpZnQKKyAgICAgZmkKKyAKK0BAIC01MzcsMjAgKzU5NywxMCBAQCBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKKyAgICAgICBnZW5lcmljX2hlbHA9JGhlbHAKKyAgICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICB9CisrI30KKyAKKy0gICAgIyBQYXNzIGJhY2sgdGhlIHVucGFyc2VkIGFyZ3VtZW50IGxpc3QKKy0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKy0gICAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKy19CistZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zCistCistCistIyBQcm9jZXNzIG9wdGlvbnMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCAtLWhlbHAgYW5kIC0tdmVyc2lvbgorLSMgY2FuIHJldHVybiBxdWlja2x5LgorLWZ1bmNfb3B0aW9ucyAkezErIiRAIn0KKy1ldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorLQorLQorKyMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQhCisrJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyAKKyAjIyAtLS0tLS0tLS0tLSAjIworICMjICAgIE1haW4uICAgICMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmOTlmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hlbiB1c2luZyBzeXNyb290IHdlIHNob3VsZCBhcHBlbmQgaXQgdG8gbGliZGlyLCB3aGljaCBpcyBoZWxwZnVsIGluCitjcm9zcyBidWlsZHMgYXMgdGhlIHN5c3RlbSBpcyBzdGFnZWQgaW4gdGhlIHN5c3Jvb3QuIEZvciBub3JtYWwgYnVpbGRzLAoraS5lLiB3aGVuIGx0X3N5c3Jvb3QgaXMgbm90IHNldCwgaXQgd2lsbCBzdGlsbCBiZWhhdmUgdGhlIHNhbWUgYW5kIGFkZAorLUwvdXNyL2xpYiB0byB0aGUgcmVsaW5rIGNvbW1hbmQuCisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTY0MjEsNyArNjQyMSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCistCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCisrCSAgICAgIGFkZF9kaXI9Ii1MJGx0X3N5c3Jvb3QkbGliZGlyIgorIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisgCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQljYXNlICRsaWJkaXIgaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2xfMi40LjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjFiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCisKKyMKKyMgV2Ugd2FudCB0aGUgcmVzdWx0cyBvZiBsaWJ0b29sLWNyb3NzIHByZXNlcnZlZCAtIGRvbid0IHN0YWdlIGFueXRoaW5nIG91cnNlbHZlcy4KKyMKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbF9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgc2VkIC1lICdzQC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9QEBnJyBcCisgICAgICAgICAgICAtZSAnc0Ake1NUQUdJTkdfRElSX0hPU1R9QEBnJyBcCisgICAgICAgICAgICAtZSAnc0BeXChzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IlwpLipAXDEke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChwcmVkZXBfb2JqZWN0cz0iXCkuKkBcMSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChwb3N0ZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAorICAgICAgICAgICAgLWkgJHtEfSR7YmluZGlyfS9saWJ0b29sCit9CisKK2xpYnRvb2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9LyoKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAtcmYgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8qCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbmF0aXZlc2RrLWxpYnRvb2xfMi40LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZWFkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiCkBAIC0wLDAgKzEsMzEgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbGlidG9vbDoiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wcmVmaXgucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vZml4aW5zdGFsbC5wYXRjaCIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworUyA9ICIke1dPUktESVJ9L2xpYnRvb2wtJHtQVn0iCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9saWJ0b29sLyoiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIFJlbW92ZSBhbnkgZXhpc3RpbmcgbGlidG9vbCBtNCBzaW5jZSBvbGQgc3RhbGUgdmVyc2lvbnMgd291bGQgYnJlYWsKKwkjIGFueSB1cGdyYWRlCisJcm0gLWYgJHtTVEFHSU5HX0RBVEFESVJ9L2FjbG9jYWwvbGlidG9vbC5tNAorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2x0Ki5tNAorfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJ9LworfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImxpYnRvb2xuYXRpdmVzZGtfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitsaWJ0b29sbmF0aXZlc2RrX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWluc3RhbGwgLW0gNzU1ICR7RH0ke2JpbmRpcn0vJHtIT1NUX1NZU30tbGlidG9vbCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LyR7SE9TVF9TWVN9LWxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzLW5hdGl2ZV8wLjkuNjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhOTBmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiQ29udmVydCBMaW51eERvYyBTR01MIHNvdXJjZSBpbnRvIG90aGVyIGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9saW51eGRvYy10b29scyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDc3ZWY2NGVjM2FjMjU3ZmIwZDc4NjUzMWNmMjY5MzEiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIG9wZW5qYWRlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbC9saW51eGRvYy10b29scy9saW51eGRvYy10b29sc18ke1BWfS5vcmlnLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3NnbWwycnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3RleF9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9kdmlwc19kb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDEzZDUwMDkxOGE3YTE0NWIwZWRjMmYxNmY2MWRkMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MTAzZmFjZWUxOGEyZWE5NzE4NmNhNDU5ZDc0M2QyMmY3Zjg5YWQ0YjVjZDFkZmQxYzM0ZjgzZDZiZmQ0MTAxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbmF0aXZlCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ1RNUERJUj0ke1R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwYjM2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX2R2aXBzX2RvYy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitEaXNhYmxlIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24gd2hpY2ggcmVxdWlyZXMgdGhlIGR2aXBzIHV0aWxpdHkuCitUaGlzIHBhdGNoIHNob3VsZCBiZSBkcm9wcGVkIG9uY2Ugd2UgaW5jbHVkZSBhIG5hdGl2ZSB2ZXJzaW9uIG9mCitkdmlwcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1RlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGRvY3VtZW50YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyNjo0MS4xNDI5MTc3ODIgLTA4MDAKKysrKyBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gJMjAxMS0wMi0yNSAxNToyNzoyNS4xNDE5MTc0NzIgLTA4MDAKK0BAIC01MiwxMyArNTIsMTMgQEAKKyAjCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKyAjZmkKKyAKKy1pZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCistCWVjaG8gIiAgICsgZHZpcHMiID4mMgorLQlkdmlwcyAtdCBsZXR0ZXIgLW8gLi9ndWlkZS5wcyAuL2d1aWRlLmR2aQorLQlpZiBbIC1uICJgd2hpY2ggZ3ppcGAiIC1hIC1mIC4vZ3VpZGUucHMgXTsgdGhlbgorLQkJZ3ppcCAtZk4gLi9ndWlkZS5wcworLQlmaQorLWZpCisrI2lmIFsgLW4gImB3aGljaCBkdmlwc2AiIF07IHRoZW4KKysjCWVjaG8gIiAgICsgZHZpcHMiID4mMgorKyMJZHZpcHMgLXQgbGV0dGVyIC1vIC4vZ3VpZGUucHMgLi9ndWlkZS5kdmkKKysjCWlmIFsgLW4gImB3aGljaCBnemlwYCIgLWEgLWYgLi9ndWlkZS5wcyBdOyB0aGVuCisrIwkJZ3ppcCAtZk4gLi9ndWlkZS5wcworKyMJZmkKKysjZmkKKyAKKyAKKyBlY2hvICItIEJ1aWxkaW5nIGluZm8gZG9jcyIgPiYyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3NnbWwycnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzhhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDc1NmYyMGU3MGE5N2VlMmRlYTliMzJjMDk1NWVhYmZjMjdmMjliZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDI5IE1heSAyMDEzIDE2OjUwOjE3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFRoZSBidWlsZCBvZiBzZ21sMnJ0ZiBpcyBwcm9ibGVtYXRpYyBkdWUgdG8gdGhlIHdheSBpdCB3YW50cworIHRvIGxpbmsgdG8gYSBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uIG9mIGZsZXguIEZsZXggb25seQorIHNoaXBzIHdpdGggYSBzdGF0aWMgbGliLiBSYXRoZXIgdGhhbiBkaXZlcmdpbmcgZnJvbQorIHVwc3RyZWFtIGZsZXgsIHNpbXBseSBza2lwIGJ1aWxkaW5nIHRoaXMgdW4tbmVlZGVkIHV0aWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGEgZmVhdHVyZS4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8ICAgMTIgKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDM1OWYxNGUuLmZjMDQwMjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00MCw3ICs0MCw3IEBAIHBlcmw1bGliX2RkaXIgICAgICA9ICQoREVTVERJUikkKHBlcmw1bGliZGlyKQorIHBrZ2RhdGFfZGRpciAgICAgICA9ICQoREVTVERJUikkKHBrZ2RhdGFkaXIpCisgdGV4X2RkaXIgICAgICAgICAgID0gJChERVNURElSKSQodGV4ZGlyKQorIAorLXByb2dzICAgIDo9IHNnbWwyaHRtbCBzZ21sMmluZm8gc2dtbDJsYXRleCBzZ21sMmx5eCBzZ21sMnJ0ZiBzZ21sMnR4dCBzZ21sY2hlY2sKKytwcm9ncyAgICA6PSBzZ21sMmh0bWwgc2dtbDJpbmZvIHNnbWwybGF0ZXggc2dtbDJseXggc2dtbDJ0eHQgc2dtbGNoZWNrCisgCisgUFJPRklMRSAgPQorIElOQ0xVREUgID0KK0BAIC03MSw5ICs3MSw5IEBAIGVuZGlmCisgCSggY2Qgc2dtbHByZSA7IFwKKyAJICAkKE1BS0UpICBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgTEVYPWZsZXggc2dtbHByZSB8fCBleGl0IC0xICkKKyAKKy0JQGVjaG8gIkNvbXBpbGluZyBSVEYgY29udmVyc2lvbiB0b29scyAoaW4gcnRmLWZpeC8pLi4uIgorLQkoIGNkIHJ0Zi1maXggOyBcCistCSAgJChNQUtFKSBDRkxBR1M9IiQoQ0ZMQUdTKSIgTERGTEFHUz0iJChMREZMQUdTKSIgfHwgZXhpdCAtMSApCisrIwlAZWNobyAiQ29tcGlsaW5nIFJURiBjb252ZXJzaW9uIHRvb2xzIChpbiBydGYtZml4LykuLi4iCisrIwkoIGNkIHJ0Zi1maXggOyBcCisrIwkgICQoTUFLRSkgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIHx8IGV4aXQgLTEgKQorIAorIAlAZWNobyAibWFraW5nIG1hbiBwYWdlcyBpbiBnZW5tYW4gLi4uIgorIAlpZiBbICEgLWQgZ2VubWFuIF07IHRoZW4gbWtkaXIgZ2VubWFuIDsgZmkKK0BAIC0xMTcsNyArMTE3LDcgQEAgZW5kaWYKKyAKKyAjICAgIC0tIEluc3RhbGwgYXV4aWxpYXJ5IHByb2dyYW1zCisgCW1rZGlyIC1wICQoYXV4YmluX2RkaXIpCistCWZvciBpaSBpbiBzZ21scHJlL3NnbWxwcmUgcnRmLWZpeC9ydGYycnRmOyBkbyBcCisrCWZvciBpaSBpbiBzZ21scHJlL3NnbWxwcmU7IGRvIFwKKyAJICBibj1gYmFzZW5hbWUgJCRpaWA7IFwKKyAJICAkKElOU1RBTExfUFJPR1JBTSkgJCRpaSAkKGF1eGJpbl9kZGlyKS8kJGJuOyBcCisgCWRvbmUKK0BAIC0yMDYsNyArMjA2LDcgQEAgYmluL2xpbnV4ZG9jOjogTWFrZWZpbGUgYmluL2xpbnV4ZG9jLmluCisgCisgY2xlYW46OgorIAktcm0gLWYgKn4gYmluLyp+IGJpbi9saW51eGRvYworLQlmb3IgZCBpbiAkKERESVJTKSAkKE1ESVJTKSBydGYtZml4OyBkbyAkKE1BS0UpIC1DICQkZCBjbGVhbjsgZG9uZQorKwlmb3IgZCBpbiAkKERESVJTKSAkKE1ESVJTKTsgZG8gJChNQUtFKSAtQyAkJGQgY2xlYW47IGRvbmUKKyAJKGNkIHNnbWxwcmUgOyBybSAtZiBzZ21scHJlLm8gc2dtbHByZSkKKyAJLXJtIC1yZiBnZW5tYW4vCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdGV4X2RvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyODk1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRGlzYWJsZSBidWlsZGluZyBkb2N1bWVudGF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoZSBsYXRleCB1dGlsaXR5LgorVGhpcyBwYXRjaCBzaG91bGQgYmUgZHJvcHBlZCBvbmNlIHdlIGluY2x1ZGUgYSBuYXRpdmUgdmVyc2lvbiBvZgorbGF0ZXguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitUZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBkb2N1bWVudGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoCTIwMDktMTEtMDkgMTE6NTg6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6MjM6NTguNjEwMDE2MTE0IC0wODAwCitAQCAtNDYsMTEgKzQ2LDExIEBACisgCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCisgZmkKKyAKKy1pZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCistCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CistCWVjaG8gIi0gQnVpbGRpbmcgbGF0ZXggZG9jcyIgPiYyCistCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCisrIwlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleAorKyMJZWNobyAiLSBCdWlsZGluZyBsYXRleCBkb2NzIiA+JjIKKysjCSRUTVBESVIvc2dtbDJsYXRleCAtLXBhc3M9Ilx1c2VwYWNrYWdle3RpbWVzfSIgLW8gZHZpIC4vZ3VpZGUKKysjZmkKKyAKKyBpZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCisgCWVjaG8gIiAgICsgZHZpcHMiID4mMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfdHh0X2RvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3ODQxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRGlzYWJsZSBidWlsZGluZyB0eHQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLAorYXMgSSBoYXZlIGZvdW5kIGFuIFVidW50dSAxMC4xMCBzeXN0ZW0gd2hpY2ggdGhyb3dzIGVycm9ycyBkdXJpbmcKK2J1aWxkaW5nIHRoaXMgdGhhdCBJJ2QgbGlrZSB0byB1bHRpbWF0ZWx5IGZpeC4gVGhlIGVycm9yIG1hbmlmZXN0cworaXRzZWxmIGZyb20gdGhlIGVuZCBvZiBMaW51eERvY1Rvb2xzLnBtIHdpdGggdGhlIGZvbGxvd2luZyBtZXNzYWdlcworZHVyaW5nIGRvX2luc3RhbGw6CisKK3wgLSBCdWlsZGluZyB0eHQgZG9jcworfCBQcm9jZXNzaW5nIGZpbGUgLi9ndWlkZQorfCB0cm9mZjogZmF0YWwgZXJyb3I6IGNhbid0IGZpbmQgbWFjcm8gZmlsZSBzCit8ICBmbXRfdHh0Ojpwb3N0QVNQOiBFbXB0eSBvdXRwdXQgZmlsZSwgZXJyb3Igd2hlbiBjYWxsaW5nIGdyb2ZmLiBBYm9ydGluZy4uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorVGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgZG9jdW1lbnRhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy8vZG9jL01ha2Vkb2Muc2ggbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCistLS0gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvL2RvYy9NYWtlZG9jLnNoCTIwMDktMTEtMDkgMTE6NTg6MjUuMDAwMDAwMDAwIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDMtMDQgMTc6Mzc6MjQuNzg4OTIzOTk4IC0wODAwCitAQCAtNDAsMTEgKzQwLDExIEBACisgCisgY2htb2QgdSt4ICRUTVBESVIvbGludXhkb2MKKyAKKy1pZiBbIC1uICJgd2hpY2ggZ3JvZmZgIiBdOyB0aGVuCistCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMnR4dAorLQllY2hvICItIEJ1aWxkaW5nIHR4dCBkb2NzIiA+JjIKKy0JJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggZ3JvZmZgIiBdOyB0aGVuCisrIwlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJ0eHQKKysjCWVjaG8gIi0gQnVpbGRpbmcgdHh0IGRvY3MiID4mMgorKyMJJFRNUERJUi9zZ21sMnR4dCAtYiAxIC4vZ3VpZGUKKysjZmkKKyAKKyBpZiBbIC1uICJgd2hpY2ggbGF0ZXhgIiBdOyB0aGVuCisgCWxuIC1zICRUTVBESVIvbGludXhkb2MgJFRNUERJUi9zZ21sMmxhdGV4CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuMTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTRlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYwpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIG00LmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworTElDRU5TRSA9ICJHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisJICAgICAgICAgICAgZmlsZTovL2V4YW1wbGVzL0NPUFlJTkc7bWQ1PTQwMzE1OTNiMjE2NmQ2YzQ3Y2FlMjgyZDk0NGE3ZWRlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vYWNfY29uZmlnX2xpbmtzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorCSAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNWU5OTU0YjFkYWUwMzY3NjJmN2IxMzY3M2EyY2Y3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzY2U3MjUxMzNlZTU1MmI4YjRiYWNhNzgzN2ZiNzcyOTQwYjI1ZTgxYjJhOWRjOTI1MzdhZWFmNzMzNTM4YzllIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC45LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiMmMxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtNC5pbmMKKworTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmVcCisJZmlsZTovL2V4YW1wbGVzL0NPUFlJTkc7bWQ1PTFkNDliZDYxZGM1OTBmMDE0Y2FlNzE3M2I0M2UzZTVjIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgKz0gImZpbGU6Ly9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYmE4ZTE0N2FmZjVlNzliZDJiZmI5ODNkODZiNTNkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MTVjZTUzODUzZmJmNjQ5MzYxN2Y0NjczODliNzk5MjA4YjFlYzk4Mjk2Yjk1YmU0NGE2ODNmOGJjZmQ3YzQ3IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC1uYXRpdmVfMS40LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDhhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitpbmhlcml0IG5hdGl2ZQorCitJTkhJQklUX0FVVE9UT09MU19ERVBTID0gIjEiCitERVBFTkRTICs9ICJnbnUtY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L2dudS1jb25maWcvY29uZmlnLnN1YiAuCisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAuCisJb2VfcnVuY29uZgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTgzOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYwpAQCAtMCwwICsxLDEwIEBACitTVU1NQVJZID0gIlRyYWRpdGlvbmFsIFVuaXggbWFjcm8gcHJvY2Vzc29yIgorREVTQ1JJUFRJT04gPSAiR05VIG00IGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFkaXRpb25hbCBVbml4IG1hY3JvIHByb2Nlc3Nvci4gIEl0IGlzIG1vc3RseSBTVlI0IFwKK2NvbXBhdGlibGUgYWx0aG91Z2ggaXQgaGFzIHNvbWUgZXh0ZW5zaW9ucyAoZm9yIGV4YW1wbGUsIGhhbmRsaW5nIG1vcmUgdGhhbiA5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBtYWNyb3MpLiBcCitHTlUgTTQgYWxzbyBoYXMgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBpbmNsdWRpbmcgZmlsZXMsIHJ1bm5pbmcgc2hlbGwgY29tbWFuZHMsIGRvaW5nIGFyaXRobWV0aWMsIGV0Yy4iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFICs9ICInaW5mb2Rpcj0ke2luZm9kaXJ9JyIKK0xERkxBR1NfcHJlcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCAiCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbTQvbTQtJHtQVn0udGFyLmd6IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2FjX2NvbmZpZ19saW5rcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1YzBiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitUaGlzIHBhdGNoIGZpeGVzIGEgYnVpbGQgcHJvYmxlbSBmb3IgbTQtbmF0aXZlIGV4cGVyaWVuY2VkIG9uIFVidW50dSA5LjEwLAord2hlcmUgYXV0b2NvbmYvYXV0b21ha2UgKEFDX0NPTkZJR19MSU5LUykgZW5kcyB1cCBtYWtpbmcgR05VbWFrZWZpbGUgYQorc3ltbGluayB0byBpdHNlbGYuCisKK1RoZSBwYXRjaCBjb21tZW50cyBvdXQgYWNfY29uZmlnX2xpbmtzIGRpcmVjdGx5IGluIGNvbmZpZ3VyZSwKK2FzIGF1dG9yZWNvbmYgaXMgbm90IGFjdHVhbGx5IHJ1biBmb3IgbTQtbmF0aXZlLgorCitJIGJlbGlldmUgaXQgc2hvdWxkIGJlIHNhZmUsIGFzIEdOVW1ha2VmaWxlIGlzIGFjdHVhbGx5IHVucGFja2VkIGZyb20KK3NvdXJjZSwgYW5kIHdoYXQgd2Ugd2FudCBpcyB0byBpcyB0byBub3QgdG91Y2ggaXQuCisKK1Rlc3RlZCBvbiB4ODZfNjRfbGludXggKFVidW50dSA4LjA0IGFuZCA5LjEwKS4KKworMjAwOS0xMS0xMAlFc2JlbiBIYWFiZW5kYWwJICAgIDxlaGFAZG9yZWRldmVsb3BtZW50LmRrPgorCitkaWZmIC11ck4gbTQtMS40LjEzLm9yaWcvY29uZmlndXJlIG00LTEuNC4xMy9jb25maWd1cmUKKy0tLSBtNC0xLjQuMTMub3JpZy9jb25maWd1cmUJMjAwOS0xMS0xMCAxMDo1NDowMC4zMDE3MDcwOTcgKzAxMDAKKysrKyBtNC0xLjQuMTMvY29uZmlndXJlCTIwMDktMTEtMTAgMTA6NTQ6MTcuMzE0MjA2Mzc5ICswMTAwCitAQCAtMTQ4NjAsOCArMTQ4NjAsOCBAQAorICAgIyBvbmx5LCBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgd2Ugc2tpcCB0aGUgbGluayB3aXRoIG9sZGVyIGF1dG9jb25mLgorICAgIyBBdXRvbWFrZSAxLjEwLjEgYW5kIGVhcmxpZXIgdHJ5IHRvIHJlbW92ZSBHTlVtYWtlZmlsZSBpbiBub24tVlBBVEgKKyAgICMgYnVpbGRzLCBzbyB1c2UgYSBzaGVsbCB2YXJpYWJsZSB0byBieXBhc3MgdGhpcy4KKy0gIEdOVW1ha2VmaWxlPUdOVW1ha2VmaWxlCistICBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgJEdOVW1ha2VmaWxlOiRHTlVtYWtlZmlsZSIKKysgIyBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorKyAjIGFjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyAkR05VbWFrZWZpbGU6JEdOVW1ha2VmaWxlIgorIAorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L2ZpeF9mb3JfY2lyY3VsYXJfZGVwZW5kZW5jeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3NzQ1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1RoZSBvbGRlciBHUEx2MiBtNCBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBuZXdlciBhdXRvY29uZi4gSXQgY2F1c2VzIHRoZSAKK2NpcmN1bGFyIGRlcGVuZGVuY3kgYXMgc2VlbiBiZWxsb3cuCisgIFJlbW92aW5nIHRoaXMgbTQgZmlsZSB3aGljaCB3YXMgbmVlZGVkIG9ubHkgZm9ybCBvbGRlciBhdXRvY29uZgorCit8IGNvbmZpZ3VyZS5hYzozNDogZXJyb3I6IEFDX1JFUVVJUkU6IGNpcmN1bGFyIGRlcGVuZGVuY3kgb2YgQUNfR05VX1NPVVJDRQorfCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbTQtMS40LjktcjAvbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNDoxOTogQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgLi4vLi4vbGliL2F1dG9jb25mL3NwZWNpZmljLm00OjMxMDogQUNfR05VX1NPVVJDRSBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9tNC0xLjQuOS1yMC9tNC0xLjQuOS9tNC9nbnVsaWItY29tcC5tNDoyMTogTTRfRUFSTFkgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MzQ6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9tNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBhY2xvY2FsOiAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vYXV0b200dGUgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgYXV0b3JlY29uZjogYWNsb2NhbCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNgorCitJbmRleDogbTQtMS40LjkvbTQvZXh0ZW5zaW9ucy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG00LTEuNC45Lm9yaWcvbTQvZXh0ZW5zaW9ucy5tNAorKysrIG00LTEuNC45L200L2V4dGVuc2lvbnMubTQKK0BAIC02LDUzICs2LDEwIEBACisgIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgVGhpcyBkZWZpbml0aW9uIG9mIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBpcyBzdG9sZW4gZnJvbSBDVlMKKy0jIEF1dG9jb25mLiAgUGVyaGFwcyB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB3ZSBjYW4gYXNzdW1lIEF1dG9jb25mCistIyAyLjYxIG9yIGxhdGVyIGV2ZXJ5d2hlcmUsIGJ1dCBzaW5jZSBDVlMgQXV0b2NvbmYgbXV0YXRlcyByYXBpZGx5CistIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorLQorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisgCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyBBQ19ERUZVTihbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy0gIFtBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKV0pCisrICBbXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L21ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmYjQxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKKy0tLSBtNC0xLjQuMi9kb2MvTWFrZWZpbGUuaW5+bWFrZQorKysrIG00LTEuNC4yL2RvYy9NYWtlZmlsZS5pbgorQEAgLTU3LDkgKzU3LDkgQEAKKyAJZGF0ZSA+ICQoc3JjZGlyKS9zdGFtcC12dGkKKyAKKyBpbnN0YWxsOiBhbGwKKy0JJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChpbmZvZGlyKQorKwkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChpbmZvZGlyKQorIAljZCAkKHNyY2RpcikgJiYgZm9yIGZpbGUgaW4gbTQuaW5mbyo7IGRvIFwKKy0JICAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoaW5mb2RpcikvJCRmaWxlOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKERFU1RESVIpJChpbmZvZGlyKS8kJGZpbGU7IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbDoKKy0tLSBtNC0xLjQuMi9zcmMvTWFrZWZpbGUuaW5+bWFrZQorKysrIG00LTEuNC4yL3NyYy9NYWtlZmlsZS5pbgorQEAgLTM1LDcgKzM1LDcgQEAKKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIHRyYW5zZm9ybSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorLWJpbmRpciA9ICQoZXhlY19wcmVmaXgpL2JpbgorK2JpbmRpciA9IEBiaW5kaXJACisgCisgQ09NUElMRSA9ICQoQ0MpIC1jICQoREVGUykgJChJTkNMVURFUykgJChDUFBGTEFHUykgJChDRkxBR1MpCisgTElOSyA9ICQoQ0MpICQoTERGTEFHUykgLW8gJEAKK0BAIC04NCw4ICs4NCw4IEBACisgCSQoTElOSykgYW5zaTJrbnIubyAkKExJQlMpCisgCisgaW5zdGFsbDogYWxsCistCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbTQgJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYAorKwkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBtNCAkKERFU1RESVIpJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYAorIAorIHVuaW5zdGFsbDoKKyAJcm0gLWYgJChiaW5kaXIpL2BlY2hvIG00IHwgc2VkICckKHRyYW5zZm9ybSknYApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZmIzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZWdsaWJjIGhhcyByZW1vdmUgZ2V0cyBzdGFydGluZyAyLjE2Cit0aGVyZWZvcmUgY2hlY2sgZm9yIGl0cyBiZWluZyB0aGVyZSBiZWZvcmUgCit1bmRlZmluaW5nIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogbTQtMS40LjE3L2xpYi9zdGRpby5pbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbTQtMS40LjE3Lm9yaWcvbGliL3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNDo0MTowMS42Nzg0OTYyMjcgKzAzMDAKKysrKyBtNC0xLjQuMTcvbGliL3N0ZGlvLmluLmgJMjAxMy0xMC0xNiAxNDo0MTo0OC44NDk0Mjc4MzkgKzAzMDAKK0BAIC03MTcsMTAgKzcxNywxMiBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmc7IGJlc2lkZXMsIEMxMQorICAgIHJlbW92ZWQgaXQuICAqLworKyNpZiBkZWZpbmVkIGdldHMKKyAjdW5kZWYgZ2V0cworICNpZiBIQVZFX1JBV19ERUNMX0dFVFMKKyBfR0xfV0FSTl9PTl9VU0UgKGdldHMsICJnZXRzIGlzIGEgc2VjdXJpdHkgaG9sZSAtIHVzZSBmZ2V0cyBpbnN0ZWFkIik7CisgI2VuZGlmCisrI2VuZGlmCisgCisgCisgI2lmIEBHTlVMSUJfT0JTVEFDS19QUklOVEZAIHx8IEBHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVhACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjE3LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJjMGFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgbTQtJHtQVn0uaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmMwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTRfMS40LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjo0ODogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorLi4uCit8IE1ha2VmaWxlLmFtOjE5OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDQKKworSW5kZXg6IG1ha2UtMy44MS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9jb25maWd1cmUuaW4KKysrKyBtYWtlLTMuODEvY29uZmlndXJlLmluCitAQCAtNDQsOSArNDQsNiBAQCBBQ19BSVgKKyBBQ19JU0NfUE9TSVgKKyBBQ19NSU5JWAorIAorLSMgTmVlZGVkIGZvciBhbnNpMmtucgorLUFNX0NfUFJPVE9UWVBFUworLQorICMgRW5hYmxlIGdldHRleHQsIGluICJleHRlcm5hbCIgbW9kZS4KKyAKKyBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKDAuMTQuMSkKK0luZGV4OiBtYWtlLTMuODEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9NYWtlZmlsZS5hbQorKysrIG1ha2UtMy44MS9NYWtlZmlsZS5hbQorQEAgLTE2LDcgKzE2LDcgQEAKKyAjIEdOVSBNYWtlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAKKy1BVVRPTUFLRV9PUFRJT05TID0gMS44IGRpc3QtYnppcDIgY2hlY2stbmV3cyBhbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAxLjggZGlzdC1iemlwMiBjaGVjay1uZXdzCisgQUNMT0NBTF9BTUZMQUdTCT0gIC1JIGNvbmZpZworIAorIE1BS0VfSE9TVCA9CUBNQUtFX0hPU1RACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRkNzYwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlaW5mby5wYXRjaApAQCAtMCwwICsxLDIyIEBACitBbGxvdyBkb2NzIHRvIGJ1aWxkIHdpdGggbWFrZWluZm8gNS5YLCBmaXhpbmcgdGhlIGVycm9yOgorCitkb2MvbWFrZS50ZXhpOjgxNjU6IEBpdGVteCBtdXN0IGZvbGxvdyBAaXRlbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JQCisyMDE0LzAzLzI5CisKK0luZGV4OiBtYWtlLTMuODEvZG9jL21ha2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1ha2UtMy44MS5vcmlnL2RvYy9tYWtlLnRleGkJMjAwNi0wNC0wMSAwNjozNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBtYWtlLTMuODEvZG9jL21ha2UudGV4aQkyMDE0LTAzLTI5IDA5OjM5OjUxLjAwNzcyNzAxMiArMDAwMAorQEAgLTgxNjIsNyArODE2Miw3IEBACisgcmFyZWx5IG5lZWQgdG8gc3BlY2lmeSB0aGlzIG9wdGlvbiBzaW5jZSBAc2FtcHttYWtlfSBkb2VzIGl0IGZvciB5b3U7Cisgc2VlIEByZWZ7LXcgT3B0aW9uLCAsVGhlIEBzYW1wey0tcHJpbnQtZGlyZWN0b3J5fSBPcHRpb259LikKKyAKKy1AaXRlbXggLS1uby1wcmludC1kaXJlY3RvcnkKKytAaXRlbSAtLW5vLXByaW50LWRpcmVjdG9yeQorIEBjaW5kZXggQGNvZGV7LS1uby1wcmludC1kaXJlY3Rvcnl9CisgRGlzYWJsZSBwcmludGluZyBvZiB0aGUgd29ya2luZyBkaXJlY3RvcnkgdW5kZXIgQGNvZGV7LXd9LgorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIEBjb2Rley13fSBpcyB0dXJuZWQgb24gYXV0b21hdGljYWxseSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlYTYwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jCkBAIC0wLDAgKzEsMTAgQEAKK1NVTU1BUlkgPSAiR05VIHRvb2wgdGhhdCBjb250cm9scyB0aGUgYnVpbGQgcHJvY2VzcyIKK0RFU0NSSVBUSU9OID0gIk1ha2UgaXMgYSB0b29sIHdoaWNoIGNvbnRyb2xzIHRoZSBnZW5lcmF0aW9uIG9mIGV4ZWN1dGFibGVzIGFuZCBvdGhlciBub24tc291cmNlIGZpbGVzIG9mIGEgXAorcHJvZ3JhbSBmcm9tIHRoZSBwcm9ncmFtJ3Mgc291cmNlIGZpbGVzLiAgTWFrZSBnZXRzIGl0cyBrbm93bGVkZ2Ugb2YgaG93IHRvIGJ1aWxkIHlvdXIgcHJvZ3JhbSBmcm9tIGEgZmlsZSBcCitjYWxsZWQgdGhlIG1ha2VmaWxlLCB3aGljaCBsaXN0cyBlYWNoIG9mIHRoZSBub24tc291cmNlIGZpbGVzIGFuZCBob3cgdG8gY29tcHV0ZSBpdCBmcm9tIG90aGVyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tYWtlLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tYWtlL21ha2UtJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzMuODEuYmIKQEAgLTAsMCArMSwxNSBAQAorUFIgPSAicjEiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zNjFiNmI4MzdjYWQyNmM2OTAwYTkyNmI2MmFhZGE1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKKworcmVxdWlyZSBtYWtlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCitTUkNfVVJJICs9ICJmaWxlOi8vbWFrZWluZm8ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNTQ4NTNlMGIyZGE5MGM1MjdlMzVhYWJiOGQ2ZjFlNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmM2U2OTAyMzc3MWUyMzkwOGY1ZDU1OTI5NTRkODI3MWQzZDZhZjA5NjkzY2VjZmQyOWNlZTZmZGU4NTUwZGM4IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjBkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYgpAQCAtMCwwICsxLDEyIEBACitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCityZXF1aXJlIG1ha2UuaW5jCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWd1aWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTdhN2EyMjRhODIyZjk0Nzg5YTU4N2NjYmNlZGZmNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJjNzYxMzM4OTY1MGVlNmEyNDU1NGI1MjU3MmEyNzJmNzM1NjE2NGZkMmM0MTMyYjBiY2YxMzEyM2U0ZmNhNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvQ09QWUlORy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5MDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2gKQEAgLTAsMCArMSwzNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitkaWZmIC1ydU4gbWFrZWRldnMtMS4wLjAtb3JpZy9DT1BZSU5HIG1ha2VkZXZzLTEuMC4wL0NPUFlJTkcKKy0tLSBtYWtlZGV2cy0xLjAuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBtYWtlZGV2cy0xLjAuMC9DT1BZSU5HCTIwMTAtMTItMDkgMTY6NDI6MjAuMjc0OTg0NjY1ICswODAwCitAQCAtMCwwICsxLDM0MCBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgICAgICAgICAgICAgICAgICAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrDAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKwwKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKwwKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKwwKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKwwKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysKKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9tYWtlZGV2cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWYzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwpAQCAtMCwwICsxLDU4OSBAQAorI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgTUlOT1JCSVRTCTgKKyNkZWZpbmUgTUtERVYobWEsbWkpCSgoKG1hKSA8PCBNSU5PUkJJVFMpIHwgKG1pKSkKKyNkZWZpbmUgTUFYX0lEX0xFTiAgICAgIDQwCisjZGVmaW5lIE1BWF9OQU1FX0xFTiAgICA0MAorI2lmbmRlZiBQQVRIX01BWAorI2RlZmluZSBQQVRIX01BWCAgICAgICAgNDA5NgorI2VuZGlmCisjZGVmaW5lIFZFUlNJT04gICAgICAgICAiMS4wLjEiCisKKy8qIFRoZXNlIGFyZSBhbGwgc3RvbGVuIGZyb20gYnVzeWJveCdzIGxpYmJiIHRvIG1ha2UKKyAqIGVycm9yIGhhbmRsaW5nIHNpbXBsZXIgKGFuZCBzaW5jZSBJIG1haW50YWluIGJ1c3lib3gsCisgKiBJJ20gcmF0aGVyIHBhcnRpYWwgdG8gdGhlc2UgZm9yIGVycm9yIGhhbmRsaW5nKS4KKyAqICAtRXJpaworICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYXBwX25hbWUgPSAibWFrZWRldnMiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbW9yeV9leGhhdXN0ZWQgPSAibWVtb3J5IGV4aGF1c3RlZCI7CitzdGF0aWMgY2hhciBkZWZhdWx0X3Jvb3RkaXJbXT0iLiI7CitzdGF0aWMgY2hhciAqcm9vdGRpciA9IGRlZmF1bHRfcm9vdGRpcjsKK3N0YXRpYyBpbnQgdHJhY2UgPSAwOworCitzdHJ1Y3QgbmFtZV9pZCB7CisJY2hhciBuYW1lW01BWF9OQU1FX0xFTisxXTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXN0cnVjdCBuYW1lX2lkICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBuYW1lX2lkICp1c3JfbGlzdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IG5hbWVfaWQgKmdycF9saXN0ID0gTlVMTDsKKworc3RhdGljIHZvaWQgdmVycm9yX21zZyhjb25zdCBjaGFyICpzLCB2YV9saXN0IHApCit7CisJZmZsdXNoKHN0ZG91dCk7CisJZnByaW50ZihzdGRlcnIsICIlczogIiwgYXBwX25hbWUpOworCXZmcHJpbnRmKHN0ZGVyciwgcywgcCk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yX21zZ19hbmRfZGllKGNvbnN0IGNoYXIgKnMsIC4uLikKK3sKKwl2YV9saXN0IHA7CisKKwl2YV9zdGFydChwLCBzKTsKKwl2ZXJyb3JfbXNnKHMsIHApOworCXZhX2VuZChwKTsKKwlwdXRjKCdcbicsIHN0ZGVycik7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgdm9pZCB2cGVycm9yX21zZyhjb25zdCBjaGFyICpzLCB2YV9saXN0IHApCit7CisJaW50IGVyciA9IGVycm5vOworCisJaWYgKHMgPT0gMCkKKwkJcyA9ICIiOworCXZlcnJvcl9tc2cocywgcCk7CisJaWYgKCpzKQorCQlzID0gIjogIjsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHMsIHN0cmVycm9yKGVycikpOworfQorCitzdGF0aWMgdm9pZCBwZXJyb3JfbXNnX2FuZF9kaWUoY29uc3QgY2hhciAqcywgLi4uKQoreworCXZhX2xpc3QgcDsKKworCXZhX3N0YXJ0KHAsIHMpOworCXZwZXJyb3JfbXNnKHMsIHApOworCXZhX2VuZChwKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK3N0YXRpYyBGSUxFICp4Zm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcDsKKworCWlmICgoZnAgPSBmb3BlbihwYXRoLCBtb2RlKSkgPT0gTlVMTCkKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHBhdGgpOworCXJldHVybiBmcDsKK30KKworc3RhdGljIGNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFyICp0OworCisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0ID0gc3RyZHVwKHMpOworCisJaWYgKHQgPT0gTlVMTCkKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHN0cnVjdCBuYW1lX2lkKiBhbGxvY19ub2RlKHZvaWQpCit7CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJbm9kZSA9IChzdHJ1Y3QgbmFtZV9pZCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZV9pZCkpOworCWlmIChub2RlID09IE5VTEwpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUobWVtb3J5X2V4aGF1c3RlZCk7CisJfQorCW1lbXNldCgodm9pZCAqKW5vZGUtPm5hbWUsIDAsIE1BWF9OQU1FX0xFTisxKTsKKwlub2RlLT5pZCA9IDB4ZmZmZmZmZmY7CisJbm9kZS0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCogcGFyc2VfbGluZShjaGFyICpsaW5lKQoreworCWNoYXIgKnA7CisJaW50IGk7CisJY2hhciBpZF9idWZbTUFYX0lEX0xFTisxXTsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlub2RlID0gYWxsb2Nfbm9kZSgpOworCXAgPSBsaW5lOworCWkgPSAwOworCS8vIEdldCBuYW1lIGZpZWxkCisJd2hpbGUgKCpwICE9ICc6JykgeworCQlpZiAoaSA+IE1BWF9OQU1FX0xFTikKKwkJCWVycm9yX21zZ19hbmRfZGllKCJOYW1lIGZpZWxkIHRvbyBsb25nIik7CisJCW5vZGUtPm5hbWVbaSsrXSA9ICpwKys7CisJfQorCW5vZGUtPm5hbWVbaV0gPSAnXDAnOworCXArKzsKKwkvLyBTa2lwIHRoZSBzZWNvbmQgZmllbGQKKwl3aGlsZSAoKnAgIT0gJzonKQorCQlwKys7CisJcCsrOworCS8vIEdldCBpZCBmaWVsZAorCWkgPSAwOworCXdoaWxlICgqcCAhPSAnOicpIHsKKwkJaWYgKGkgPiBNQVhfSURfTEVOKQorCQkJZXJyb3JfbXNnX2FuZF9kaWUoIklEIGZpbGVkIHRvbyBsb25nIik7CisJCWlkX2J1ZltpKytdID0gKnArKzsKKwl9CisJaWRfYnVmW2ldID0gJ1wwJzsKKwlub2RlLT5pZCA9IGF0b2woaWRfYnVmKTsKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2xpc3RfZnJvbV9maWxlKEZJTEUgKmZpbGUsIHN0cnVjdCBuYW1lX2lkICoqcGxpc3QpCit7CisJY2hhciAqbGluZTsKKwlpbnQgbGVuID0gMDsKKwlzaXplX3QgbGVuZ3RoID0gMjU2OworCXN0cnVjdCBuYW1lX2lkICpub2RlLCAqY3VyOworCisJaWYoKGxpbmUgPSAoY2hhciAqKW1hbGxvYyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKworCXdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxlbmd0aCwgZmlsZSkpICE9IC0xKSB7CisJCW5vZGUgPSBwYXJzZV9saW5lKGxpbmUpOworCQlpZiAoKnBsaXN0ID09IE5VTEwpIHsKKwkJCSpwbGlzdCA9IG5vZGU7CisJCQljdXIgPSAqcGxpc3Q7CisJCX0gZWxzZSB7CisJCQljdXItPm5leHQgPSBub2RlOworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnZlcnQyZ3VpZChjaGFyICppZF9idWYsIHN0cnVjdCBuYW1lX2lkICpzZWFyY2hfbGlzdCkKK3sKKwljaGFyICpwOworCWludCBpc251bTsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZTsKKwlwID0gaWRfYnVmOworCWlzbnVtID0gMTsKKwl3aGlsZSAoKnAgIT0gJ1wwJykgeworCQlpZiAoIWlzZGlnaXQoKnApKSB7CisJCQlpc251bSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlwKys7CisJfQorCWlmIChpc251bSkgeworCQkvLyBDaGVjayBmb3IgYmFkIHVzZXIvZ3JvdXAgbmFtZQorCQlub2RlID0gc2VhcmNoX2xpc3Q7CisJCXdoaWxlIChub2RlICE9IE5VTEwpIHsKKwkJCWlmICghc3RybmNtcChub2RlLT5uYW1lLCBpZF9idWYsIHN0cmxlbihpZF9idWYpKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogQmFkIHVzZXIvZ3JvdXAgbmFtZSAlcyBkZXRlY3RlZFxuIiwgaWRfYnVmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW5vZGUgPSBub2RlLT5uZXh0OworCQl9CisJCXJldHVybiAodW5zaWduZWQgbG9uZylhdG9sKGlkX2J1Zik7CisJfSBlbHNlIHsKKwkJbm9kZSA9IHNlYXJjaF9saXN0OworCQl3aGlsZSAobm9kZSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0cm5jbXAobm9kZS0+bmFtZSwgaWRfYnVmLCBzdHJsZW4oaWRfYnVmKSkpCisJCQkJcmV0dXJuIG5vZGUtPmlkOworCQkJbm9kZSA9IG5vZGUtPm5leHQ7CisJCX0KKwkJZXJyb3JfbXNnX2FuZF9kaWUoIk5vIGVudHJ5IGZvciAlcyBpbiBzZWFyY2ggbGlzdCIsIGlkX2J1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2xpc3Qoc3RydWN0IG5hbWVfaWQgKmxpc3QpCit7CisJc3RydWN0IG5hbWVfaWQgKmN1cjsKKwljdXIgPSBsaXN0OworCXdoaWxlIChjdXIgIT0gTlVMTCkgeworCQlsaXN0ID0gY3VyOworCQljdXIgPSBjdXItPm5leHQ7CisJCWZyZWUobGlzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfbmV3X2RpcmVjdG9yeShjaGFyICpuYW1lLCBjaGFyICpwYXRoLAorCQl1bnNpZ25lZCBsb25nIHVpZCwgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpCisJCWZwcmludGYoc3RkZXJyLCAiRGlyZWN0b3J5OiAlcyAlcyAgVUlEOiAlbGQgIEdJRCAlbGQgIE1PREU6ICUwNGxvIiwgcGF0aCwgbmFtZSwgdWlkLCBnaWQsIG1vZGUpOworCisJaWYgKG1rZGlyKHBhdGgsIG1vZGUpIDwgMCkgeworCQlpZiAoRUVYSVNUID09IGVycm5vKSB7CisJCQkvKiBVbmNvbmRpdGlvbmFsbHkgYXBwbHkgdGhlIG1vZGUgc2V0dGluZyB0byB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LgorCQkJICogWFhYIHNob3VsZCBvdXRwdXQgc29tZXRoaW5nIHdoZW4gdHJhY2UgKi8KKwkJCWNobW9kKHBhdGgsIG1vZGUgJiB+U19JRk1UKTsKKwkJfQorCX0KKwlpZiAodHJhY2UpCisJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZGV2aWNlKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCXVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUsIGRldl90IHJkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWlmICh0cmFjZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkRldmljZTogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG8gIE1BSk9SOiAlZCAgTUlOT1I6ICVkIiwKKwkJCQlwYXRoLCBuYW1lLCB1aWQsIGdpZCwgbW9kZSwgKHNob3J0KShyZGV2ID4+IDgpLCAoc2hvcnQpKHJkZXYgJiAweGZmKSk7CisJfQorCisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisJc3RhdHVzID0gbHN0YXQocGF0aCwgJnNiKTsKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJLyogSXQgaXMgb2sgZm9yIHNvbWUgdHlwZXMgb2YgZmlsZXMgdG8gbm90IGV4aXQgb24gZGlzayAoc3VjaCBhcworCQkgKiBkZXZpY2Ugbm9kZXMpLCBidXQgaWYgdGhleSBfZG9fIGV4aXN0LCB0aGUgZmlsZSB0eXBlIGJpdHMgaGFkCisJCSAqIGJldHRlciBtYXRjaCB0aG9zZSBvZiB0aGUgYWN0dWFsIGZpbGUgb3Igc3RyYW5nZSB0aGluZ3Mgd2lsbCBoYXBwZW4uLi4gKi8KKwkJaWYgKChtb2RlICYgU19JRk1UKSAhPSAoc2Iuc3RfbW9kZSAmIFNfSUZNVCkpIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlwdXRjKCdcbicsIHN0ZGVycik7CisJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGV4aXN0aW5nIGZpbGUgKDA0JW8pIHR5cGUgZG9lcyBub3QgbWF0Y2ggc3BlY2lmaWVkIGZpbGUgdHlwZSAoMDQlbG8pISIsCisJCQkJCQlwYXRoLCAoc2Iuc3RfbW9kZSAmIFNfSUZNVCksIChtb2RlICYgU19JRk1UKSk7CisJCX0KKwkJaWYgKG1vZGUgIT0gc2Iuc3RfbW9kZSkgeworCQkJaWYgKHRyYWNlKQorCQkJCWZwcmludGYoc3RkZXJyLCAiIC0tIGFwcGx5aW5nIG5ldyBtb2RlIDA0JWxvIChvbGQgd2FzIDA0JW8pXG4iLCBtb2RlICYgflNfSUZNVCwgc2Iuc3RfbW9kZSAmIH5TX0lGTVQpOworCQkJLyogQXBwbHkgdGhlIG1vZGUgc2V0dGluZyB0byB0aGUgZXhpc3RpbmcgZGV2aWNlIG5vZGUgKi8KKwkJCWNobW9kKHBhdGgsIG1vZGUgJiB+U19JRk1UKTsKKwkJfQorCQllbHNlIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAtLSBleHRyYW5lb3VzIGVudHJ5IGluIHRhYmxlXG4iLCBwYXRoKTsKKwkJfQorCX0KKwllbHNlIHsKKwkJbWtub2QocGF0aCwgbW9kZSwgcmRldik7CisJCWlmICh0cmFjZSkKKwkJCXB1dGMoJ1xuJywgc3RkZXJyKTsKKworCX0KKworCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworc3RhdGljIHZvaWQgYWRkX25ld19maWxlKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJGaWxlOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsb1xuIiwKKwkJCXBhdGgsIG5hbWUsIGdpZCwgdWlkLCBtb2RlKTsKKwl9CisKKwlpbnQgZmQgPSBvcGVuKHBhdGgsT19DUkVBVCB8IE9fV1JPTkxZLCBtb2RlKTsKKwlpZiAoZmQgPCAwKSB7CisJCWVycm9yX21zZ19hbmRfZGllKCIlczogZmlsZSBjYW4gbm90IGJlIGNyZWF0ZWQhIiwgcGF0aCk7CisJfSBlbHNlIHsKKwkJY2xvc2UoZmQpOworCX0KKwljaG1vZChwYXRoLCBtb2RlKTsKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKKworc3RhdGljIHZvaWQgYWRkX25ld19maWZvKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgdWlkLAorCQkJCSAgdW5zaWduZWQgbG9uZyBnaWQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlpZiAodHJhY2UpIHsKKwkJcHJpbnRmKCJGaWZvOiAlcyAlcyAgVUlEOiAlbGQgIEdJRDogJWxkICBNT0RFOiAlMDRsb1xuIiwKKwkJCXBhdGgsIG5hbWUsIGdpZCwgdWlkLCBtb2RlKTsKKwl9CisKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdGF0IHNiOworCisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0KSk7CisJc3RhdHVzID0gc3RhdChwYXRoLCAmc2IpOworCisKKwkvKiBVcGRhdGUgdGhlIG1vZGUgaWYgd2UgZXhpc3QgYW5kIGFyZSBhIGZpZm8gYWxyZWFkeSAqLworCWlmIChzdGF0dXMgPj0gMCAmJiBTX0lTRklGTyhzYi5zdF9tb2RlKSkgeworCQljaG1vZChwYXRoLCBtb2RlKTsKKwl9IGVsc2UgeworCQlpZiAobWtub2QocGF0aCwgbW9kZSwgMCkpCisJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGZpbGUgY2FuIG5vdCBiZSBjcmVhdGVkIHdpdGggbWtub2QhIiwgcGF0aCk7CisJfQorCWNob3duKHBhdGgsIHVpZCwgZ2lkKTsKK30KKworCisvKiAgZGV2aWNlIHRhYmxlIGVudHJpZXMgdGFrZSB0aGUgZm9ybSBvZjoKKyAgICA8cGF0aD4JPHR5cGU+IDxtb2RlPgk8dXNyPgk8Z3JwPgk8bWFqb3I+CTxtaW5vcj4JPHN0YXJ0Pgk8aW5jPgk8Y291bnQ+CisgICAgL2Rldi9tZW0gICAgYyAgICAgIDY0MCAgICAgIDAgICAgICAgMCAgICAgICAxICAgICAgIDEgICAgICAgMCAgICAgICAgMCAgICAgICAgLQorICAgIC9kZXYvemVybyAgIGMgICAgICA2NDQgICAgICByb290ICAgIHJvb3QgICAgMSAgICAgICA1ICAgICAgIC0gICAgICAgIC0gICAgICAgIC0KKworICAgIHR5cGUgY2FuIGJlIG9uZSBvZjoKKwlmCUEgcmVndWxhciBmaWxlCisJZAlEaXJlY3RvcnkKKwljCUNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlCisJYglCbG9jayBzcGVjaWFsIGRldmljZSBmaWxlCisJcAlGaWZvIChuYW1lZCBwaXBlKQorCisgICAgSSBkb24ndCBib3RoZXIgd2l0aCBzeW1saW5rcyAocGVybWlzc2lvbnMgYXJlIGlycmVsZXZhbnQpLCBoYXJkCisgICAgbGlua3MgKHNwZWNpYWwgY2FzZXMgb2YgcmVndWxhciBmaWxlcyksIG9yIHNvY2tldHMgKHdoeSBib3RoZXIpLgorCisgICAgUmVndWxhciBmaWxlcyBtdXN0IGV4aXN0IGluIHRoZSB0YXJnZXQgcm9vdCBkaXJlY3RvcnkuICBJZiBhIGNoYXIsCisgICAgYmxvY2ssIGZpZm8sIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgorKi8KK3N0YXRpYyBpbnQgaW50ZXJwcmV0X3RhYmxlX2VudHJ5KGNoYXIgKmxpbmUpCit7CisJY2hhciAqbmFtZTsKKwljaGFyIHVzcl9idWZbTUFYX0lEX0xFTl07CisJY2hhciBncnBfYnVmW01BWF9JRF9MRU5dOworCWNoYXIgcGF0aFs0MDk2XSwgdHlwZTsKKwl1bnNpZ25lZCBsb25nIG1vZGUgPSAwNzU1LCB1aWQgPSAwLCBnaWQgPSAwLCBtYWpvciA9IDAsIG1pbm9yID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMCwgaW5jcmVtZW50ID0gMSwgY291bnQgPSAwOworCisJaWYgKDAgPiBzc2NhbmYobGluZSwgIiU0MHMgJWMgJWxvICU0MHMgJTQwcyAlbHUgJWx1ICVsdSAlbHUgJWx1IiwgcGF0aCwKKwkJICAgICZ0eXBlLCAmbW9kZSwgdXNyX2J1ZiwgZ3JwX2J1ZiwgJm1ham9yLCAmbWlub3IsICZzdGFydCwKKwkJICAgICZpbmNyZW1lbnQsICZjb3VudCkpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzc2NhbmYgcmV0dXJuZWQgPCAwIGZvciBsaW5lICclcydcbiIsIGFwcF9uYW1lLCBsaW5lKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdWlkID0gY29udmVydDJndWlkKHVzcl9idWYsIHVzcl9saXN0KTsKKwlnaWQgPSBjb252ZXJ0Mmd1aWQoZ3JwX2J1ZiwgZ3JwX2xpc3QpOworCisJaWYgKHN0cm5jbXAocGF0aCwgIi8iLCAxKSkgeworCQllcnJvcl9tc2dfYW5kX2RpZSgiRGV2aWNlIHRhYmxlIGVudHJpZXMgcmVxdWlyZSBhYnNvbHV0ZSBwYXRocyIpOworCX0KKwluYW1lID0geHN0cmR1cChwYXRoICsgMSk7CisJLyogcHJlZml4IHBhdGggd2l0aCByb290ZGlyICovCisJc3ByaW50ZihwYXRoLCAiJXMvJXMiLCByb290ZGlyLCBuYW1lKTsKKworCS8qIFhYWCBXaHkgaXMgbmFtZSBwYXNzZWQgaW50byBhbGwgb2YgdGhlIGFkZF9uZXdfKigpIHJvdXRpbmVzPyAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgJ2QnOgorCQltb2RlIHw9IFNfSUZESVI7CisJCWFkZF9uZXdfZGlyZWN0b3J5KG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnZic6CisJCW1vZGUgfD0gU19JRlJFRzsKKwkJYWRkX25ld19maWxlKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAncCc6CisJCW1vZGUgfD0gU19JRklGTzsKKwkJYWRkX25ld19maWZvKG5hbWUsIHBhdGgsIHVpZCwgZ2lkLCBtb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAnYyc6CisJY2FzZSAnYic6CisJCW1vZGUgfD0gKHR5cGUgPT0gJ2MnKSA/IFNfSUZDSFIgOiBTX0lGQkxLOworCQlpZiAoY291bnQgPiAwKSB7CisJCQlpbnQgaTsKKwkJCWRldl90IHJkZXY7CisJCQljaGFyIGJ1Zls4MF07CisKKwkJCWZvciAoaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBjb3VudDsgaSsrKSB7CisJCQkJc3ByaW50ZihidWYsICIlcyVkIiwgbmFtZSwgaSk7CisJCQkJc3ByaW50ZihwYXRoLCAiJXMvJXMlZCIsIHJvb3RkaXIsIG5hbWUsIGkpOworCQkJCS8qIEZJWE1FOiAgTUtERVYgdXNlcyBpbGxpY2l0IGluc2lkZXIga25vd2xlZGdlIG9mIGtlcm5lbAorCQkJCSAqIG1ham9yL21pbm9yIHJlcHJlc2VudGF0aW9uLi4uICAqLworCQkJCXJkZXYgPSBNS0RFVihtYWpvciwgbWlub3IgKyAoaSAtIHN0YXJ0KSAqIGluY3JlbWVudCk7CisJCQkJc3ByaW50ZihwYXRoLCAiJXMvJXNcMCIsIHJvb3RkaXIsIGJ1Zik7CisJCQkJYWRkX25ld19kZXZpY2UoYnVmLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSwgcmRldik7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBGSVhNRTogIE1LREVWIHVzZXMgaWxsaWNpdCBpbnNpZGVyIGtub3dsZWRnZSBvZiBrZXJuZWwKKwkJCSAqIG1ham9yL21pbm9yIHJlcHJlc2VudGF0aW9uLi4uICAqLworCQkJZGV2X3QgcmRldiA9IE1LREVWKG1ham9yLCBtaW5vcik7CisJCQlhZGRfbmV3X2RldmljZShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSwgcmRldik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3JfbXNnX2FuZF9kaWUoIlVuc3VwcG9ydGVkIGZpbGUgdHlwZSIpOworCX0KKwlpZiAobmFtZSkgZnJlZShuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBwYXJzZV9kZXZpY2VfdGFibGUoRklMRSAqIGZpbGUpCit7CisJY2hhciAqbGluZTsKKwlzaXplX3QgbGVuZ3RoID0gMjU2OworCWludCBsZW4gPSAwOworCisJaWYoKGxpbmUgPSAoY2hhciAqKW1hbGxvYyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKwkvKiBMb29rcyBvayBzbyBmYXIuICBUaGUgZ2VuZXJhbCBwbGFuIG5vdyBpcyB0byByZWFkIGluIG9uZQorCSAqIGxpbmUgYXQgYSB0aW1lLCB0cmltIG9mZiBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLAorCSAqIGNoZWNrIGZvciBsZWFkaW5nIGNvbW1lbnQgZGVsaW1pdGVycyAoJyMnKSBvciBhIGJsYW5rIGxpbmUsCisJICogdGhlbiB0cnkgYW5kIHBhcnNlIHRoZSBsaW5lIGFzIGEgZGV2aWNlIHRhYmxlIGVudHJ5LiBJZiB3ZSBmYWlsCisJICogdG8gcGFyc2UgdGhpbmdzLCB0cnkgYW5kIGhlbHAgdGhlIHBvb3IgZm9vbCB0byBmaXggdGhlaXIKKwkgKiBkZXZpY2UgdGFibGUgd2l0aCBhIHVzZWZ1bCBlcnJvciBtc2cuLi4gKi8KKworCXdoaWxlICgobGVuID0gZ2V0bGluZSgmbGluZSwgJmxlbmd0aCwgZmlsZSkpICE9IC0xKSB7CisJCS8qIEZpcnN0IHRyaW0gb2ZmIGFueSB3aGl0ZXNwYWNlICovCisKKwkJLyogdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisJCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UobGluZVtsZW4gLSAxXSkpCisJCQlsaW5lWy0tbGVuXSA9ICdcMCc7CisKKwkJLyogdHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwkJbWVtbW92ZShsaW5lLCAmbGluZVtzdHJzcG4obGluZSwgIiBcblxyXHRcdiIpXSwgbGVuICsgMSk7CisKKwkJLyogSWYgdGhpcyBpcyBOT1QgYSBjb21tZW50IG9yIGFuIGVtcHR5IGxpbmUsIHRyeSB0byBpbnRlcnByZXQgaXQgKi8KKwkJaWYgKCpsaW5lICE9ICcjJyAmJiAqbGluZSAhPSAnXDAnKSBpbnRlcnByZXRfdGFibGVfZW50cnkobGluZSk7CisJfQorCisJaWYgKGxpbmUpCisJCWZyZWUobGluZSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGV2dGFibGUoRklMRSAqIGRldnRhYmxlKQoreworCXN0cnVjdCBzdGF0IHNiOworCisJaWYgKGxzdGF0KHJvb3RkaXIsICZzYikpIHsKKwkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIHJvb3RkaXIpOworCX0KKwlpZiAoY2hkaXIocm9vdGRpcikpCisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCByb290ZGlyKTsKKworCWlmIChkZXZ0YWJsZSkKKwkJcGFyc2VfZGV2aWNlX3RhYmxlKGRldnRhYmxlKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCXsicm9vdCIsIDEsIE5VTEwsICdyJ30sCisJeyJoZWxwIiwgMCwgTlVMTCwgJ2gnfSwKKwl7InRyYWNlIiwgMCwgTlVMTCwgJ3QnfSwKKwl7InZlcnNpb24iLCAwLCBOVUxMLCAndid9LAorCXsiZGV2dGFibGUiLCAxLCBOVUxMLCAnRCd9LAorCXtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKworc3RhdGljIGNoYXIgKmhlbHB0ZXh0ID0KKwkiVXNhZ2U6IG1ha2VkZXZzIFtPUFRJT05TXVxuIgorCSJCdWlsZCBlbnRyaWVzIGJhc2VkIHVwb24gZGV2aWNlX3RhYmxlLnR4dFxuXG4iCisJIk9wdGlvbnM6XG4iCisJIiAgLXIsIC1kLCAtLXJvb3Q9RElSICAgICBCdWlsZCBmaWxlc3lzdGVtIGZyb20gZGlyZWN0b3J5IERJUiAoZGVmYXVsdDogY3dkKVxuIgorCSIgIC1ELCAtLWRldnRhYmxlPUZJTEUgICAgVXNlIHRoZSBuYW1lZCBGSUxFIGFzIGEgZGV2aWNlIHRhYmxlIGZpbGVcbiIKKwkiICAtaCwgLS1oZWxwICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIHRleHRcbiIKKwkiICAtdCwgLS10cmFjZSAgICAgICAgICAgIEJlIHZlcmJvc2VcbiIKKwkiICAtdiwgLS12ZXJzaW9uICAgICAgICAgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvblxuXG4iOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgYywgb3B0OworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwljaGFyIHBhc3N3ZF9wYXRoW1BBVEhfTUFYXTsKKwljaGFyIGdyb3VwX3BhdGhbUEFUSF9NQVhdOworCUZJTEUgKnBhc3N3ZF9maWxlID0gTlVMTDsKKwlGSUxFICpncm91cF9maWxlID0gTlVMTDsKKwlGSUxFICpkZXZ0YWJsZSA9IE5VTEw7CisJRElSICpkaXIgPSBOVUxMOworCisJdW1hc2sgKDApOworCisJaWYgKGFyZ2M9PTEpIHsKKwkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJEOmQ6cjpodHYiLAorCQkJbG9uZ19vcHRpb25zLCAmYykpID49IDApIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnRCc6CisJCQlkZXZ0YWJsZSA9IHhmb3BlbihvcHRhcmcsICJyIik7CisJCQlpZiAoZnN0YXQoZmlsZW5vKGRldnRhYmxlKSwgJnN0YXRidWYpIDwgMCkKKwkJCQlwZXJyb3JfbXNnX2FuZF9kaWUob3B0YXJnKTsKKwkJCWlmIChzdGF0YnVmLnN0X3NpemUgPCAxMCkKKwkJCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IG5vdCBhIHByb3BlciBkZXZpY2UgdGFibGUgZmlsZSIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCQlwcmludGYoaGVscHRleHQpOworCQkJZXhpdCgwKTsKKwkJY2FzZSAncic6CisJCWNhc2UgJ2QnOgkJCQkvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG1rZnMuamZmcywgZ2VuZXh0MmZzLCBldGMuLi4gKi8KKwkJCWlmIChyb290ZGlyICE9IGRlZmF1bHRfcm9vdGRpcikgeworCQkJCWVycm9yX21zZ19hbmRfZGllKCJyb290IGRpcmVjdG9yeSBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiKTsKKwkJCX0KKwkJCWlmICgoZGlyID0gb3BlbmRpcihvcHRhcmcpKSA9PSBOVUxMKSB7CisJCQkJcGVycm9yX21zZ19hbmRfZGllKG9wdGFyZyk7CisJCQl9IGVsc2UgeworCQkJCWNsb3NlZGlyKGRpcik7CisJCQl9CisJCQkvKiBJZiAiLyIgaXMgc3BlY2lmaWVkLCB1c2UgIiIgYmVjYXVzZSByb290ZGlyIGlzIGFsd2F5cyBwcmVwZW5kZWQgdG8gYQorCQkJICogc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggIi8iICovCisJCQlpZiAoMCA9PSBzdHJjbXAob3B0YXJnLCAiLyIpKQorCQkJCXJvb3RkaXIgPSB4c3RyZHVwKCIiKTsKKwkJCWVsc2UKKwkJCQlyb290ZGlyID0geHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSAndCc6CisJCQl0cmFjZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlICd2JzoKKwkJCXByaW50ZigiJXM6ICVzXG4iLCBhcHBfbmFtZSwgVkVSU0lPTik7CisJCQlleGl0KDApOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoYXJndltvcHRpbmRdICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsIGhlbHB0ZXh0KTsKKwkJZXhpdCgxKTsKKwl9CisKKwkvLyBHZXQgbmFtZS1pZCBtYXBwaW5nCisJc3ByaW50ZihwYXNzd2RfcGF0aCwgIiVzL2V0Yy9wYXNzd2QiLCByb290ZGlyKTsKKwlzcHJpbnRmKGdyb3VwX3BhdGgsICIlcy9ldGMvZ3JvdXAiLCByb290ZGlyKTsKKwlpZiAoKHBhc3N3ZF9maWxlID0gZm9wZW4ocGFzc3dkX3BhdGgsICJyIikpICE9IE5VTEwpIHsKKwkJZ2V0X2xpc3RfZnJvbV9maWxlKHBhc3N3ZF9maWxlLCAmdXNyX2xpc3QpOworCQlmY2xvc2UocGFzc3dkX2ZpbGUpOworCX0KKwlpZiAoKGdyb3VwX2ZpbGUgPSBmb3Blbihncm91cF9wYXRoLCAiciIpKSAhPSBOVUxMKSB7CisJCWdldF9saXN0X2Zyb21fZmlsZShncm91cF9maWxlLCAmZ3JwX2xpc3QpOworCQlmY2xvc2UoZ3JvdXBfZmlsZSk7CisJfQorCisJLy8gUGFyc2UgZGV2dGFibGUKKwlpZihkZXZ0YWJsZSkgeworCQlwYXJzZV9kZXZ0YWJsZShkZXZ0YWJsZSk7CisJCWZjbG9zZShkZXZ0YWJsZSk7CisJfQorCisJLy8gRnJlZSBsaXN0CisJZnJlZV9saXN0KHVzcl9saXN0KTsKKwlmcmVlX2xpc3QoZ3JwX2xpc3QpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNTg3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2c18xLjAuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlRvb2wgZm9yIGNyZWF0aW5nIGRldmljZSBub2RlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKK1NFQ1RJT04gPSAiYmFzZSIKK1NSQ19VUkkgPSAiZmlsZTovL21ha2VkZXZzLmMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9IgorCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke2RhdGFkaXJ9IgorCitkb19jb21waWxlKCkgeworCSR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IC1vICR7U30vbWFrZWRldnMgJHtTfS9tYWtlZGV2cy5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbWFrZWRldnMgJHtEfSR7YmFzZV9zYmluZGlyfS9tYWtlZGV2cworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0ICR7RH0ke2RhdGFkaXJ9LworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MjcwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDcxIEBACittYWtlIHRoZSB0b29sIHRvIGJlIGNyb3NzIGNvbXBpbGFibGUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtlbGZJbWFnZS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvY29uZmlndXJlLmFjCTIwMTItMDctMTQgMTQ6MTA6NDcuODAwOTE2MDgzIC0wNzAwCitAQCAtNzAsNiArNzAsOSBAQAorIAkJQUNfTVNHX0VSUk9SKFtjYyBub3QgZm91bmRdKQorIAlmaQorIAlldmFsICIke3dpdGhfZGVmYXVsdH1fQ0M9JyRDQyciCisrCWlmIHRlc3QgIngkSE9TVF9DQyIgPSAneCc7IHRoZW4KKysJCUFDX0NIRUNLX1BST0coW0hPU1RfQ0NdLCBbJENDXSwgWyRDQ10sIFtnY2NdLCBbJFBBVEhdKQorKwlmaQorIAlBQ19QUk9HX0NQUAorIAlpZiB0ZXN0ICIkQ1BQIiA9IG5vOyB0aGVuCisgCQlBQ19NU0dfRVJST1IoW2NwcCBub3QgZm91bmRdKQorQEAgLTE3Miw3ICsxNzUsNiBAQAorIAorIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCisgCistSE9TVF9DQz0kQ0MKKyBIT1NUX0NGTEFHUz0iJEhPU1RfQ0ZMQUdTIC1PMiAtV2FsbCBcJChIT1NUX0NQUEZMQUdTKSIKKyAKKyBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYworSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaTM4Ni9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9saW51eC1pMzg2L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyAkKExJMzg2X09CSikvbWtlbGYtbGludXgtaTM4Ni5vOiAkKExJMzg2X0RJUikvbWtlbGYtbGludXgtaTM4Ni5jICQoTEkzODZfRElSKS9jb252ZXJ0LmJpbi5jICQoTEkzODZfREVQKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisgCisgCisgaWZkZWYgSTM4Nl9DQworSW5kZXg6IG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9saW51eC1pYTY0L01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCw3ICs0LDcgQEAKKyAKKyAkKExJQTY0X09CSikvbWtlbGYtbGludXgtaWE2NC5vOiAkKExJQTY0X0RJUikvbWtlbGYtbGludXgtaWE2NC5jICQoTElBNjRfRElSKS9jb252ZXJ0LmJpbi5jICQoTElBNjRfREVQKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisrCSQoQ0MpICQoSE9TVF9DRkxBR1MpIC1jIC1nICQ8IC1vICRACisgCisgaWZkZWYgSUE2NF9DQworIAorSW5kZXg6IG1rZWxmSW1hZ2UvbWFpbi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9tYWluL01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDguOTY0ODk4NjY3IC0wNzAwCisrKysgbWtlbGZJbWFnZS9tYWluL01ha2VmaWxlCTIwMTItMDctMTQgMTQ6MDQ6NDkuMDMyODk4NjcxIC0wNzAwCitAQCAtNCwxMSArNCwxMSBAQAorIAorICQoT0JKRElSKS9zYmluL21rZWxmSW1hZ2U6ICQoTUtFTEZfT0JKUykgJChERVBTKQorIAkkKE1LRElSKSAtcCAkKEBEKQorLQkkKEhPU1RfQ0MpICQoSE9TVF9DRkxBR1MpICQoTUtFTEZfT0JKUykgLW8gJEAgJChMSUJTKQorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKKyAKKyAkKE9CSkRJUikvbWFpbi9ta2VsZkltYWdlLm86IG1haW4vbWtlbGZJbWFnZS5jIGluY2x1ZGUvbWtlbGZJbWFnZS5oICQoREVQUykKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorIAorICQoT0JKRElSKS9tYW4vbWFuOC9ta2VsZkltYWdlLjg6IG1haW4vbWtlbGZJbWFnZS5tYW4KKyAJJChNS0RJUikgLXAgJChARCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTZhNjVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9maXgtbWFrZWZpbGUtdG8tZmluZC1saWJ6LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0xldCBtYWtlZmlsZSBmaW5kIGxpYnogYW5kIHpsaWIuaCBieSBDRkxBR1MgYW5kIExERkxBR1MuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkMWFjYzM2Li42Zjg2NWIwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02Miw3ICs2Miw3IEBAIEFDX0NIRUNLX1BST0coW1JQTV0sICAgcnBtLCAgIHJwbSwgICBbXSwgWyRQQVRIXSkKKyBBQ19DSEVDS19QUk9HKFtTRURdLCAgIHNlZCwgICBzZWQsICAgW10sIFskUEFUSF0pCisgQUNfQ0hFQ0tfUFJPRyhbRklORF0sICBmaW5kLCAgZmluZCwgIFtdLCBbJFBBVEhdKQorIAorLUFDX0NIRUNLX0hFQURFUih6bGliLmgsIEFDX0NIRUNLX0xJQih6LCBpbmZsYXRlSW5pdF8sIFtBQ19ERUZJTkUoSEFWRV9aTElCX0gsIDEpIExJQlM9IiRMSUJTIC1seiJdKSkKKytBQ19DSEVDS19IRUFERVIoemxpYi5oLCBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUluaXRfLCBbQUNfREVGSU5FKEhBVkVfWkxJQl9ILCAxKSBMSUJTPSIkTElCUyAkTERGTEFHUyAtbHoiXSkpCisgCisgZG5sIEZpbmQgdGhlIGRlZmF1bHQgcHJvZ3JhbXMKKyBpZiB0ZXN0ICJ3aXRoX2RlZmF1bHQiICE9IG5vIDsgdGhlbgorQEAgLTE3NSw3ICsxNzUsNyBAQCBmaQorIAorIGRubCAtLS1PdXRwdXQgdmFyaWFibGVzLi4uCisgCistSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykiCisrSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykgJENGTEFHUyIKKyAKKyBkbmwgVE9ETzogZmlndXJlIG91dCBob3cgdG8gc2V0IHRoZXNlIGFwcHJvcHJpYXRlbHkgZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYworIEkzODZfQ0ZMQUdTPSIkSTM4Nl9DRkxBR1MgLU9zIC1mZnJlZXN0YW5kaW5nIC1XYWxsIC1XIC1Xbm8tZm9ybWF0IFwkKEkzODZfQ1BQRkxBR1MpIgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2VfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDViOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIGNyZWF0aW5nIEVMRiBib290IGltYWdlcyBmb3IgRUxGLWJhc2VkIExpbnV4IGtlcm5lbCBpbWFnZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNvcmVib290Lm9yZy9Na2VsZmltYWdlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTViZWQyZjYwZDM1NzYxOGNhMTYxYWQ1MzlmN2MwYSIKKworU1JDUkVWID0gIjY4NmE0OGEzMzliMzIwMDE4NGMyN2U3Zjk4ZDRjMDMxODBiMmJlNmMiCitQViA9ICI0LjArZ2l0JHtTUkNQVn0iCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJta2VsZmltYWdlIGhhcyBiZWVuIHJlbW92ZWQgaW4gY29yZWJvb3QgNC4xIHJlbGVhc2U6IFwKK2h0dHA6Ly9yZXZpZXcuY29yZWJvb3Qub3JnL2dpdHdlYj9wPWNvcmVib290LmdpdDthPWNvbW1pdDtoPTM0ZmM0YWI4MGI1MDc3MzllMjU4MGQ0OTBkZmY2N2ZjZmRkZTExZWEiCisKKworREVQRU5EUyArPSAiemxpYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9yZXZpZXcuY29yZWJvb3Qub3JnL3AvY29yZWJvb3Q7cHJvdG9jb2w9aHR0cCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9zcy1jb21waWxlLnBhdGNoICAgXAorICAgICAgICAgICBmaWxlOi8vZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaCAgIFwKKyAgICAgICAgICAiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdXRpbC9ta2VsZkltYWdlIgorCitDRkxBR1MgKz0gIi1mbm8tc3RhY2stcHJvdGVjdG9yIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gIkhPU1RfQ0M9JyR7QlVJTERfQ0N9JyIKK0VYVFJBX09FTUFLRSArPSAiSE9TVF9DUFBGTEFHUz0nJHtCVUlMRF9DUFBGTEFHU30nIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm1kaXIgJHtEfSR7ZGF0YWRpcn0vbWtlbGZJbWFnZS9lbGYzMi1pMzg2CisJcm1kaXIgJHtEfSR7ZGF0YWRpcn0vbWtlbGZJbWFnZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYWNfaW5pdF9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmFmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0dldCB0aGUgdmVyc2lvbiBvZiBta2xpYnMgYnkgc2ltcGxlciBtZWFucy4gVGhlIE1LTElCU19WRVJTSU9OIHN0cmluZyBpbiB0aGUgCitjb25maWd1cmUuYWMgZmlsZSBpcyByZXBsYWNlZCB3aXRoIHJlYWwgdmVyc2lvbiBzdHJpbmcgYnkgdGhlIAorZG9fY29uZmlndXJlX3ByZXBlbmQoKSBmdW5jdGlvbiBmcm9tIHRoZSByZWNpcGUgLmJiIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMjQKKworSW5kZXg6IG1rbGlicy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2xpYnMub3JpZy9jb25maWd1cmUuYWMJMjAxMC0wMi0yMSAxNzozNDo1Ni4wMDAwMDAwMDAgLTA4MDAKKysrKyBta2xpYnMvY29uZmlndXJlLmFjCTIwMTEtMDEtMjQgMTg6NTI6MTkuOTQzMjQyMDc5IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy1BQ19JTklUKFtta2xpYnNdLG00X2VzeXNjbWQoZHBrZy1wYXJzZWNoYW5nZWxvZyB8IHBlcmwgLW5lICdwcmludCAkMSBpZiBtL15WZXJzaW9uOiAoLiopJC87JykpCisrQUNfSU5JVChbbWtsaWJzXSwgTUtMSUJTX1ZFUlNJT04pCisgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBuby1kZWZpbmVdKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2F2b2lkLWZhaWx1cmUtb24tc3ltYm9sLXByb3ZpZGVkLWJ5LWFwcGxpY2F0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZkNjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmMTcyMTAxMTMwNjA0ZTRhOWVmYTU3NDZmNGQ4ZDMwZGU5OWEwZmRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxNyBBcHIgMjAxNSAxNDo0ODoyMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBhdm9pZCBmYWlsdXJlIG9uIHN5bWJvbCBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVW5kZWZpbmVkIHN5bWJvbHMgaW4gYSBsaWJyYXJ5IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24KK3RoYXQgbGlua3MgdG8gdGhlIGxpYnJhcnksIHN1Y2ggYXMgYGxvZ3NpbmsnIGluIGxpYm11bHRpcGF0aC5zby4wLgorVGhpcyBmaXggY2hlY2tzIHRoZSB0eXBlIG9mIG9iamVjdCBpbiB3aGljaCB0aGUgc3ltYm9sIGlzIG5lZWRlZAorYW5kIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHN5bWJvbCBpbiBhcHBsaWNhdGlvbiwgd2hlbiBhIHN5bWJvbAorY2Fubm90IGJlIHByb3ZpZGVkIGJ5IGxpYnJhcmllcy4gSXQgcHJldmVudHMgZmFsc2UgYWxhcm0gb24gYWJzZW5jZQorb2Ygc3ltYm9scy4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL21rbGlicyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMgYi9zcmMvbWtsaWJzCitpbmRleCBjNTYxNGVhLi5iMGQ5MDM0IDEwMDc1NQorLS0tIGEvc3JjL21rbGlicworKysrIGIvc3JjL21rbGlicworQEAgLTEzMyw5ICsxMzMsOSBAQCBjbGFzcyBTeW1ib2wob2JqZWN0KToKKyAgICAgICAgIHJldHVybiAnQCcuam9pbihyZXQpCisgCisgY2xhc3MgVW5kZWZpbmVkU3ltYm9sKFN5bWJvbCk6CistICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5KToKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnksIG9iamVjdCk6CisgICAgICAgICBzdXBlcihVbmRlZmluZWRTeW1ib2wsIHNlbGYpLl9faW5pdF9fKG5hbWUsIHZlcnNpb24sIGxpYnJhcnkpCistICAgICAgICBzZWxmLndlYWssIHNlbGYubGlicmFyeSA9IHdlYWssIGxpYnJhcnkKKysgICAgICAgIHNlbGYud2Vhaywgc2VsZi5saWJyYXJ5LCBzZWxmLm9iamVjdCA9IHdlYWssIGxpYnJhcnksIG9iamVjdAorIAorICMgUmV0dXJuIHVuZGVmaW5lZCBzeW1ib2xzIGluIGFuIG9iamVjdCBhcyBhIHNldCBvZiB0dXBsZXMgKG5hbWUsIHdlYWtuZXNzKQorIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorQEAgLTE0NCw2ICsxNDQsMTEgQEAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CisgCisgICAgIG91dHB1dCA9IGNvbW1hbmQoIm1rbGlicy1yZWFkZWxmIiwgIi0tcHJpbnQtc3ltYm9scy11bmRlZmluZWQiLCBvYmopCisgCisrICAgIGlmIGxlbihvYmopID4gbGVuKGRlc3RfcGF0aCkgYW5kIG9ials6bGVuKGRlc3RfcGF0aCldID09IGRlc3RfcGF0aDoKKysgICAgICAgIG9iamVjdCA9IG9ialtsZW4oZGVzdF9wYXRoKSArIDE6LWxlbignLXNvLXN0cmlwcGVkJyldCisrICAgIGVsc2U6CisrICAgICAgICBvYmplY3QgPSBvYmoKKysKKyAgICAgcmVzdWx0ID0gW10KKyAgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgorICAgICAgICAgbmFtZSwgd2Vha19zdHJpbmcsIHZlcnNpb25fc3RyaW5nLCBsaWJyYXJ5X3N0cmluZyA9IGxpbmUuc3BsaXQoKVs6NF0KK0BAIC0xNjAsNyArMTY1LDcgQEAgZGVmIHVuZGVmaW5lZF9zeW1ib2xzKG9iaik6CisgICAgICAgICBpZiBsaWJyYXJ5X3N0cmluZy5sb3dlcigpICE9ICdub25lJzoKKyAgICAgICAgICAgICBsaWJyYXJ5ID0gbGlicmFyeV9zdHJpbmcKKyAKKy0gICAgICAgIHJlc3VsdC5hcHBlbmQoVW5kZWZpbmVkU3ltYm9sKG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnkpKQorKyAgICAgICAgcmVzdWx0LmFwcGVuZChVbmRlZmluZWRTeW1ib2wobmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSwgb2JqZWN0KSkKKyAKKyAgICAgcmV0dXJuIHJlc3VsdAorIAorQEAgLTQ5NSwxMiArNTAwLDEzIEBAIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlLnNlYXJjaCgiXnBzXyIsIHN0cihzeW1ib2wpKSkKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCAocmUuc2VhcmNoKCJsZC1saW51eC5zby4zJCIsIHN0cihzeW1ib2wpKSkKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCAocmUuc2VhcmNoKCJeX19nbnVfbG9jYWxfZ3AiLCBzdHIoc3ltYm9sKSkpKToKKy0gICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgIm5lZWRlZF9zeW1ib2xzIGFkZGluZyAlcywgd2VhazogJXMiICUgKHN5bWJvbCwgc3ltYm9sLndlYWspKQorKyAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAibmVlZGVkX3N5bWJvbHMgYWRkaW5nICVzLCB3ZWFrOiAlcywgZm9yICVzIiAlIChzeW1ib2wsIHN5bWJvbC53ZWFrLCBvYmopKQorICAgICAgICAgICAgICAgICBuZWVkZWRfc3ltYm9sc1tzdHIoc3ltYm9sKV0gPSBzeW1ib2wKKyAgICAgICAgIGxpYnJhcmllcy51cGRhdGUobGlicmFyeV9kZXBlbmRzKG9iaikpCisgCisgICAgICMgY2FsY3VsYXRlIHdoYXQgc3ltYm9scyBhcmUgcHJlc2VudCBpbiBzbWFsbF9saWJzIGFuZCBhdmFpbGFibGVfbGlicworICAgICBwcmVzZW50X3N5bWJvbHMgPSB7fQorKyAgICBwcmVzZW50X3N5bWJvbF9wcm9ncyA9IHt9CisgICAgIGNoZWNrZWRfbGlicyA9IHNtYWxsX2xpYnMKKyAgICAgY2hlY2tlZF9saWJzLmV4dGVuZChhdmFpbGFibGVfbGlicykKKyAgICAgY2hlY2tlZF9saWJzLmFwcGVuZChsZGxpYikKK0BAIC01MTAsNiArNTE2LDEyIEBAIHdoaWxlIDE6CisgICAgICAgICAgICAgbmFtZXMgPSBzeW1ib2wuYmFzZV9uYW1lcygpCisgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgIHByZXNlbnRfc3ltYm9sc1tuYW1lXSA9IHN5bWJvbAorKyAgICAgICAgICAgIGlmIG5vdCBzb19wYXR0ZXJuLm1hdGNoKGxpYik6CisrICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJwcmVzZW50X3N5bWJvbF9wcm9ncyBhZGRpbmcgJXMsIGZyb20gZXhlY3V0YWJsZSAlcyIgJSAoJyAnLmpvaW4obmFtZXMpLCBsaWIpKQorKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKysgICAgICAgICAgICAgICAgICAgIHByb2dzID0gcHJlc2VudF9zeW1ib2xfcHJvZ3MuZ2V0KG5hbWUsIHNldCgpKQorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3MuYWRkKGxpYikKKysgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfc3ltYm9sX3Byb2dzW25hbWVdID0gcHJvZ3MKKyAKKyAgICAgIyBhcmUgd2UgZmluaXNoZWQ/CisgICAgIG51bV91bnJlc29sdmVkID0gMAorQEAgLTU2NSw2ICs1NzcsMTQgQEAgd2hpbGUgMToKKyAgICAgZm9yIG5hbWUgaW4gbmVlZGVkX3N5bWJvbHM6CisgICAgICAgICBpZiBub3QgbmFtZSBpbiBzeW1ib2xfcHJvdmlkZXI6CisgICAgICAgICAgICAgaWYgbm90IG5lZWRlZF9zeW1ib2xzW25hbWVdLndlYWs6CisrICAgICAgICAgICAgICAgICMgV09SS0FST1VORDogVW5kZWZpbmVkIHN5bWJvbHMgaW4gYSBsaWJyYXJ5IGNhbiBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24KKysgICAgICAgICAgICAgICAgIyB0aGF0IGxpbmtzIHRvIHRoZSBsaWJyYXJ5LiBTbyBpZiB0aGUgb2JqZWN0IHdoaWNoIHJlcXVpcmVzIHRoZSBzeW1ib2wgaXMgYSBsaWJyYXJ5CisrICAgICAgICAgICAgICAgICMgYW5kIHNvbWUgYXBwbGljYXRpb24gY2FuIHByb3ZpZGUgdGhlIHN5bWJvbCwgdGhlIHVuZGVmaW5lZCBzeW1ib2wgaXMgc2tpcHBlZC4KKysgICAgICAgICAgICAgICAgc3ltYm9sID0gbmVlZGVkX3N5bWJvbHNbbmFtZV0KKysgICAgICAgICAgICAgICAgaWYgc29fcGF0dGVybi5tYXRjaChzeW1ib2wub2JqZWN0KSBhbmQgcHJlc2VudF9zeW1ib2xfcHJvZ3MuZ2V0KG5hbWUsIE5vbmUpOgorKyAgICAgICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgInN5bWJvbCAlcyBpbiBsaWJyYXJ5ICVzIGlzIHByb3ZpZGVkIGJ5IGV4ZWN1dGFibGUgJXMiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIHN5bWJvbC5vYmplY3QsICcgJy5qb2luKHByZXNlbnRfc3ltYm9sX3Byb2dzW25hbWVdKSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGxpYnJhcnkgcHJvdmlkZXMgbm9uLXdlYWsgJXMiICUgbmFtZSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbGliID0gc3ltYm9sX3Byb3ZpZGVyW25hbWVdCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X1NUVF9HTlVfSUZVTkMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyN2E0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1RoZSBsaWJjNi1kZXYgaW4gVWJ1bnR1IDkuMDQgaXMgc28gb2xkIHRoYXQgdGhlIGVsZi5oIGRvZXNuJ3QKK2RlZmluZSBTVFRfR05VX0lGVU5DLCBzbyB3ZSBoYXZlIHRvIGRlZmluZSBpdCBvdXJzZWx2ZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdIC0gb2xkIHJlbGVhc2Ugc3BlY2lmaWMsIG1heWJlIHJlbW92YWJsZQorCistLSBEZXh1YW4gQ3VpIChkZXh1YW4uY3VpQGludGVsLmNvbSkgRmViIDE2LCAyMDExLgorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitpbmRleCAyNDQ0YzM5Li41NmQ5M2Y4IDEwMDY0NAorLS0tIGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCisrKysgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK0BAIC02LDYgKzYsMTQgQEAKKyAjaW5jbHVkZSA8dmVjdG9yPgorIAorICNpbmNsdWRlIDxlbGYuaD4KKysvKgorKyAqIFRoZSAvdXNyL2luY2x1ZGUvZWxmLmggaW4gc29tZSBkaXN0cmlidXRpb25zKGxpa2UgVWJ1bnR1IDkuMDQpIGRvZXNuJ3QKKysgKiBkZWZpbmUgdGhlIG1hY3JvLiBXZSBuZWVkIHRvIGRlZmluZSBpdCBoZXJlLgorKyAqLworKyNpZm5kZWYgU1RUX0dOVV9JRlVOQworKyNkZWZpbmUgU1RUX0dOVV9JRlVOQyAgIDEwICAgICAgICAgICAgICAvKiBTeW1ib2wgaXMgaW5kaXJlY3QgY29kZSBvYmplY3QgKi8KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgCisgI2luY2x1ZGUgImVsZi5ocHAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9jcm9zc19jb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDgxIEBACitSZW1vdmUgZGVwZW5kZW5jeSBvbiBkcGtnCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0Fza2luZyB0aGUgaG9zdCBPUyB3aGV0aGVyIGl0IHN1cHBvcnRzIG11bHRpYXJjaCBpcyBub3QgdXNlZnVsCitpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBvciBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkCithIGxpYmRpciBleHBsaWNpdGx5LiBTbyB0aGlzIHBhdGNoLCBiYXNlZCBvbiB0aGUgd29yayBvZiBNZW50b3IKK0dyYXBoaWNzLCByZW1vdmVzIG1rbGlicydzIGRlcGVuZGVuY3kgb24gZHBrZyBwYWNrYWdlLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDxZdWFuamllLkh1YW5nQHdpbmRyaXZlci5jb20+Cisgc3JjL21rbGlicyB8IDMwICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMgYi9zcmMvbWtsaWJzCitpbmRleCBkOWI3ODRiLi5jNTYxNGVhIDEwMDc1NQorLS0tIGEvc3JjL21rbGlicworKysrIGIvc3JjL21rbGlicworQEAgLTI2MSw2ICsyNjEsMTEgQEAgZGVmIGV4dHJhY3Rfc29uYW1lKHNvX2ZpbGUpOgorICAgICByZXR1cm4gIiIKKyAKKyBkZWYgbXVsdGlhcmNoKHBhdGhzKToKKysgICAgIyBBc2tpbmcgdGhlIGhvc3QgT1Mgd2hldGhlciBpdCBzdXBwb3J0cyBtdWx0aWFyY2ggaXMgbm90IHVzZWZ1bAorKyAgICAjIGluIGEgY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIG9yIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQKKysgICAgIyBhIGxpYmRpciBleHBsaWNpdGx5LgorKyAgICBpZiBzeXNyb290ICE9ICIiIG9yIGxpYmRpciAhPSAiIjoKKysgICAgICAgIHJldHVybiBwYXRocworICAgICBkZXZudWxsID0gb3BlbignL2Rldi9udWxsJywgJ3cnKQorICAgICBkcGtnX2FyY2hpdGVjdHVyZSA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICBbJ2Rwa2ctYXJjaGl0ZWN0dXJlJywgJy1xREVCX0hPU1RfTVVMVElBUkNIJ10sCitAQCAtMzQwLDcgKzM0NSw3IEBAIGxpYl9wYXRoID0gW10KKyBkZXN0X3BhdGggPSAiREVTVCIKKyBsZGxpYiA9ICJMRExJQiIKKyBpbmNsdWRlX2RlZmF1bHRfbGliX3BhdGggPSAieWVzIgorLWRlZmF1bHRfbGliX3BhdGggPSBtdWx0aWFyY2goWyIvbGliLyIsICIvdXNyL2xpYi8iLCAiL3Vzci9YMTFSNi9saWIvIl0pCisrZGVmYXVsdF9saWJfcGF0aCA9IFsiL2xpYi8iLCAiL3Vzci9saWIvIiwgIi91c3IvWDExUjYvbGliLyJdCisgbGliY19leHRyYXNfZGlyID0gIi91c3IvbGliL2xpYmNfcGljIgorIGxpYmNfZXh0cmFzX2Rpcl9kZWZhdWx0ID0gVHJ1ZQorIGxpYmRpciA9ICJsaWIiCitAQCAtMzg2LDcgKzM5MSw3IEBAIGZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgICBlbGlmIG9wdCA9PSAiLS1saWJkaXIiOgorICAgICAgICAgbGliZGlyID0gYXJnCisgICAgIGVsaWYgb3B0IGluICgiLS1oZWxwIiwgIi1oIik6CistCXVzYWdlKDApCisrICAgICAgICB1c2FnZSgwKQorICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgZWxpZiBvcHQgaW4gKCItLXZlcnNpb24iLCAiLVYiKToKKyAgICAgICAgIHZlcnNpb24odmVycykKK0BAIC0zOTUsNiArNDAwLDcgQEAgZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6CisgICAgICAgICBwcmludCAiV0FSTklORzogdW5rbm93biBvcHRpb246ICIgKyBvcHQgKyAiXHRhcmc6ICIgKyBhcmcKKyAKKyBpZiBpbmNsdWRlX2RlZmF1bHRfbGliX3BhdGggPT0gInllcyI6CisrICAgIGRlZmF1bHRfbGliX3BhdGggPSBtdWx0aWFyY2goZGVmYXVsdF9saWJfcGF0aCkKKyAgICAgbGliX3BhdGguZXh0ZW5kKFthLnJlcGxhY2UoIi9saWIvIiwgIi8iICsgbGliZGlyICsgIi8iKSBmb3IgYSBpbiBkZWZhdWx0X2xpYl9wYXRoXSkKKyAKKyBpZiBsaWJjX2V4dHJhc19kaXJfZGVmYXVsdDoKK0BAIC02NjEsMTYgKzY2OSwxNiBAQCBsZF9wYXRoX25hbWUgPSBvcy5wYXRoLmRpcm5hbWUobGRsaWIpCisgbGRfZnVsbF9wYXRoID0gIi4uLyIgKyBsZGxpYgorIGxkX2ZpbGUgPSBmaW5kX2xpYihsZF9maWxlX25hbWUpCisgCistaWYgbGRfcGF0aF9uYW1lICE9ICIvbGliIjoKKy0gICAgaWYgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CistICAgICAgICBvcy5yZW1vdmUoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lKQorKyNpZiBsZF9wYXRoX25hbWUgIT0gIi9saWIiOgorKyMgICAgaWYgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CisrIyAgICAgICAgb3MucmVtb3ZlKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKyAKKy1pZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKToKKy0gICAgb3MubWtkaXIoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKQorKyNpZiBub3Qgb3MucGF0aC5leGlzdHMoZGVzdF9wYXRoICsgIi8uLi8iICsgbGRfcGF0aF9uYW1lKToKKysjICAgIG9zLm1rZGlyKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSkKKyAKKy1pZiBub3Qgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2Z1bGxfcGF0aCwgb3MuRl9PSyk6CistICAgIGRlYnVnKERFQlVHX05PUk1BTCwgIkk6IHN0cmlwcGluZyBhbmQgY29weWluZyBkeW5hbWljIGxpbmtlciB0byAiICsgbGRfZnVsbF9wYXRoKQorK2lmIG5vdCBvcy5hY2Nlc3MoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCBvcy5GX09LKToKKysgICAgZGVidWcoREVCVUdfTk9STUFMLCAiSTogc3RyaXBwaW5nIGFuZCBjb3B5aW5nIGR5bmFtaWMgbGlua2VyIHRvICIgKyBsZF9maWxlX25hbWUpCisgICAgIGNvbW1hbmQodGFyZ2V0ICsgIm9iamNvcHkiLCAiLS1zdHJpcC11bm5lZWRlZCAtUiAubm90ZSAtUiAuY29tbWVudCIsCistICAgICAgICAgICAgbGRfZmlsZSwgZGVzdF9wYXRoICsgIi8iICsgbGRfZnVsbF9wYXRoKQorKyAgICAgICAgICAgIGxkX2ZpbGUsIGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKyAKKy1vcy5jaG1vZChkZXN0X3BhdGggKyAiLyIgKyBsZF9mdWxsX3BhdGgsIDA3NTUpCisrb3MuY2htb2QoZGVzdF9wYXRoICsgIi8iICsgbGRfZmlsZV9uYW1lLCAwNzU1KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTY1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBlZGRmMDRjN2Y4MzEyZTljMjljZGIyNGU0MzFiN2U0ZmIyY2M3MGVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAxNDowMDowNiArMDgwMAorU3ViamVjdDogW1BBVENIXSBTaG93IEdOVSB1bmlxdWUgc3ltYm9scyBhcyBwcm92aWRlZCBzeW1ib2xzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0dOVSBVbmlxdWUgc3ltYm9sIGlzIGEgR05VIGV4dGVuc2lvbiBlbXBsb3llZCBieSBuZXcgdmVyc2lvbiBvZiBHQ0MKK2J5IGRlZmF1bHQuIEV2ZW4gU3RhbmRhcmQgQysrIGxpYnJhcnkgaW4gR0NDIDQuOSBwcm92aWRlcyBzb21lIHN5bWJvbHMsCitzdWNoIGFzIF9aTlNzNF9SZXAyMF9TX2VtcHR5X3JlcF9zdG9yYWdlRSBpbiB0aGlzIGJpbmRpbmcgdHlwZSBpbnN0ZWFkCitvZiBFTEYgc3RhbmRhcmQgd2VhayBiaW5kaW5nLgorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgb2YgdGhpcyBuZXcgYmluZGluZyB0eXBlIHRvIG1rbGlicy1yZWFkZWxmLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK2luZGV4IDU2ZDkzZjguLjAxMzQ1MzAgMTAwNjQ0CistLS0gYS9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKKysrKyBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zeW1ib2xzX3Byb3ZpZGVkIChjb25zdCBFbGY6OnNlY3Rpb25fdHlwZTxFbGY6OnNlY3Rpb25fdHlwZV8KKyAgICAgdWludDhfdCB0eXBlID0gc3ltYm9sLT5nZXRfdHlwZSAoKTsKKyAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgPSBzeW1ib2wtPmdldF9uYW1lX3N0cmluZyAoKTsKKyAKKy0gICAgaWYgKGJpbmQgIT0gU1RCX0dMT0JBTCAmJiBiaW5kICE9IFNUQl9XRUFLKQorKyAgICBpZiAoYmluZCAhPSBTVEJfR0xPQkFMICYmIGJpbmQgIT0gU1RCX1dFQUsgJiYgYmluZCAhPSBTVEJfR05VX1VOSVFVRSkKKyAgICAgICBjb250aW51ZTsKKyAgICAgaWYgKHNobmR4ID09IFNITl9VTkRFRiB8fCBzaG5keCA9PSBTSE5fQUJTKQorICAgICAgIGNvbnRpbnVlOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTUwMGEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaApAQCAtMCwwICsxLDE4IEBACitJbiBjcm9zcyBidWlsZHMgd2Ugd2lsbCBoYXZlIHRvIHJlc3BlY3Qgc3lzcm9vdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBta2xpYnMtMC4xLjM5L3NyYy9ta2xpYnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2xpYnMtMC4xLjM5Lm9yaWcvc3JjL21rbGlicwkyMDE0LTAzLTAxIDE4OjI1OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIG1rbGlicy0wLjEuMzkvc3JjL21rbGlicwkyMDE0LTEwLTE5IDAwOjUxOjQ2LjgxMzUzNDU5NiArMDAwMAorQEAgLTQ5NSw3ICs0OTUsNyBAQAorICAgICBwcmVzZW50X3N5bWJvbHMgPSB7fQorICAgICBjaGVja2VkX2xpYnMgPSBzbWFsbF9saWJzCisgICAgIGNoZWNrZWRfbGlicy5leHRlbmQoYXZhaWxhYmxlX2xpYnMpCistICAgIGNoZWNrZWRfbGlicy5hcHBlbmQobGRsaWIpCisrICAgIGNoZWNrZWRfbGlicy5hcHBlbmQoc3lzcm9vdCArIGxkbGliKQorICAgICBmb3IgbGliIGluIGNoZWNrZWRfbGliczoKKyAgICAgICAgIGZvciBzeW1ib2wgaW4gcHJvdmlkZWRfc3ltYm9scyhsaWIpOgorICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJwcmVzZW50X3N5bWJvbHMgYWRkaW5nICVzIiAlIHN5bWJvbCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvbWtsaWJzLW5hdGl2ZV8wLjEuNDAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmVjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIGxpYnJhcnkgb3B0aW1pc2F0aW9uIHRvb2wiCitERVNDUklQVElPTiA9ICJta2xpYnMgcHJvZHVjZXMgY3V0LWRvd24gc2hhcmVkIGxpYnJhcmllcyB0aGF0IGNvbnRhaW4gb25seSB0aGUgcm91dGluZXMgcmVxdWlyZWQgYnkgYSBwYXJ0aWN1bGFyIHNldCBvZiBleGVjdXRhYmxlcy4iCitIT01FUEFHRSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvbWtsaWJzIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9OThkMzEwMzdiMTNkODk2ZTMzODkwNzM4ZWYwMWFmNjQiCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vbS9ta2xpYnMvJHtCUE59XyR7UFZ9LnRhci54eiBcCisJZmlsZTovL2FjX2luaXRfZml4LnBhdGNoXAorCWZpbGU6Ly9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaFwKKwlmaWxlOi8vc3lzcm9vdGVkLWxkc28ucGF0Y2ggXAorCWZpbGU6Ly9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBcCisJZmlsZTovL3Nob3ctR05VLXVuaXF1ZS1zeW1ib2xzLWFzLXByb3ZpZGVkLXN5bWJvbHMucGF0Y2ggXAorCWZpbGU6Ly9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMWRhZmU1Zjk2MmNhYTlkYzVmMjY1MWMwNzIzODEyYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZGIyNGFlNzc5ZDIxY2NmZWQ0OWYyMmU0OWEyYjdlZTQzZWMwZTkxOTdiYzIwNmQ4MWNkMDJmOTZlOTFlMTI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG5hdGl2ZSBweXRob25uYXRpdmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHMvMDAwMS1tbWMuaC1kb24tdC1pbmNsdWRlLWFzbS1nZW5lcmljLWludC1sbDY0LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyNGRlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittbWMuaDogZG9uJ3QgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKworSW5jbHVkaW5nIHRoaXMgZmlsZSBjYXVzZXMgYSBjb21waWxlIGZhaWx1cmUgZm9yIHFlbXVtaXBzNjQuCitUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB0byBiZSBleHBsaWNpdGx5IGluY2x1ZGVkLCBiZWNhdXNlIGl0IHdpbGwgYmUKK2luY2x1ZGVkIGJ5IHRoZSA8bGludXgvbW1jL2lvY3RsLmg+IGZpbGUgaWYgX01JUFNfU1pMT05HIGlzIG5vdCA2NC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbW1jLmggfCAgICAxIC0KKyAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbW1jLmggYi9tbWMuaAoraW5kZXggOTg3MWQ2Mi4uM2RmMmNkZiAxMDA2NDQKKy0tLSBhL21tYy5oCisrKysgYi9tbWMuaAorQEAgLTE0LDcgKzE0LDYgQEAKKyAgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgICovCisgCistI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L21tYy9pb2N0bC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTUwMzYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21tYy9tbWMtdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0RFU0NSSVBUSU9OID0gIlVzZXJzcGFjZSB0b29scyBmb3IgTU1DL1NEIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9saW51eC9rZXJuZWwvZ2l0L2NqYi9tbWMtdXRpbHMuZ2l0LyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9tbWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1kNzc0N2ZjODdmMWViMjJiOTQ2ZWY4MTk5Njk1MDNmMCIKKworQlJBTkNIID89ICJtYXN0ZXIiCitTUkNSRVYgPSAiZjRlYjI0MTUxOWY4ZDUwMGNlNjA2OGE3MGQyMzg5YmUzOWFjNTE4OSIKKworUFYgPSAiMC4xIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9jamIvbW1jLXV0aWxzLmdpdDticmFuY2g9JHtCUkFOQ0h9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgInM6LVdlcnJvcjo6ZyIgJHtTfS9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBtbWMgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzYxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy8wMDAxLWhhc2h0YWJsZS1SZW1vdmUtZHVwbGljYXRlLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS0ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBiODU2ZmYzNWMyMDEyNGNlYWU0MGJiYzRkMzI1ODRkZjQ3NjE4Yzk2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjUgRmViIDIwMTUgMDk6Mjg6MjYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gaGFzaHRhYmxlOiBSZW1vdmUgZHVwbGljYXRlIGhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZS9oYXNodGFibGVfaXRlcmF0b3Jfa2V5CisKK2djYzUgaXMgZGVmYXVsdGluZyB0byBnbnUxMSBpbnN0ZWFkIG9mIGdudTg5IGxpa2UgcHJldmlvdXMgdmVyc2lvbnMKK2FzIGEgcmVzdWx0IHRoZSBzZW1hbnRpY3Mgb2YgJ2V4dGVybiBpbmxpbmUnIGNoYW5nZXMgd2hlcmUgaW4gZ251ODkgZm9yICdleHRlcm4gaW5saW5lJyBubyBleHRlcm5hbAordmlzaWJsZSBmdW5jdGlvbiBpcyBnZW5lcmF0ZWQsaW4gYzk5ICdleHRlcm5hbCBpbmxpbmUnIGdlbmVyYXRlcyBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24KK3RoZXJlIGlzIG5vIGVxdWl2YWxlbnQgaW4gYzk5KyBiZWNhdXNlIHJlZGVmaW5pdGlvbnMgYXJlbnQgYWxsb3dlZAorYnV0ICdzdGF0aWMgaW5saW5lJyByZW1haW5zIHNhbWUgZm9yIGZvciBjODkgYW5kIGM5OSssIHRoYXRzIHdoeSB3ZSBjaGFuZ2UgdGhlIHNlbWFudGljcworc28gd2UgbWFrZSB0aGUgZnVuY3Rpb25zIHN0YXRpYyBpbmxpbmUsIGFuZCBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKKy0tLQorIG1rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYyB8IDEyIC0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmgKKysrKyBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCitAQCAtMjgsNyArMjgsNyBAQCBoYXNodGFibGVfaXRlcmF0b3Ioc3RydWN0IGhhc2h0YWJsZSAqaCk7CisgLyogaGFzaHRhYmxlX2l0ZXJhdG9yX2tleQorICAqIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworIAorLWV4dGVybiBpbmxpbmUgdm9pZCAqCisrc3RhdGljIGlubGluZSB2b2lkICoKKyBoYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorIHsKKyAgICAgcmV0dXJuIGktPmUtPms7CitAQCAtMzcsNyArMzcsNyBAQCBoYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qIHZhbHVlIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworIAorLWV4dGVybiBpbmxpbmUgdm9pZCAqCisrc3RhdGljIGlubGluZSB2b2lkICoKKyBoYXNodGFibGVfaXRlcmF0b3JfdmFsdWUoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisgeworICAgICByZXR1cm4gaS0+ZS0+djsKK0luZGV4OiBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5jCisrKysgZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworQEAgLTM1LDE4ICszNSw2IEBAIGhhc2h0YWJsZV9pdGVyYXRvcihzdHJ1Y3QgaGFzaHRhYmxlICpoKQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistLyoga2V5ICAgICAgLSByZXR1cm4gdGhlIGtleSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworLS8qIHZhbHVlICAgIC0gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKGtleSx2YWx1ZSkgcGFpciBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiAqLworLQorLXZvaWQgKgorLWhhc2h0YWJsZV9pdGVyYXRvcl9rZXkoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisteyByZXR1cm4gaS0+ZS0+azsgfQorLQorLXZvaWQgKgorLWhhc2h0YWJsZV9pdGVyYXRvcl92YWx1ZShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKy17IHJldHVybiBpLT5lLT52OyB9CistCistLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qIGFkdmFuY2UgLSBhZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBlbGVtZW50CisgICogICAgICAgICAgIHJldHVybnMgemVybyBpZiBhZHZhbmNlZCB0byBlbmQgb2YgdGFibGUgKi8KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2Q2YTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvYWRkLWV4Y2x1c2lvbi10by1ta2ZzLWpmZnMyLWdpdC0yLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIC90bXAvbWtmcy5qZmZzMi5jCTIwMDktMDEtMTEgMTU6Mjg6NDEuMDAwMDAwMDAwICswMTAwCisrKysgZ2l0L21rZnMuamZmczIuYwkyMDA5LTAxLTExIDE1OjU5OjI5LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwMCw2ICsxMDAsMTEgQEAKKyAJc3RydWN0IHJiX25vZGUgaGFyZGxpbmtfcmI7CisgfTsKKyAKKytzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSB7CisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBuZXh0OyAgLyogUG9pbnRzIHRvIHRoZSBuZXh0IGlnbm9yZXBhdGggZWxlbWVudCAqLworKwljaGFyIG5hbWVbUEFUSF9NQVhdOyAgICAgICAgLyogTmFtZSBvZiB0aGUgZW50cnkgKi8KKyt9OworK3N0YXRpYyBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogaWdub3JlcGF0aCA9IDA7Cisgc3RydWN0IHJiX3Jvb3QgaGFyZGxpbmtzOworIHN0YXRpYyBpbnQgb3V0X2ZkID0gLTE7Cisgc3RhdGljIGludCBpbl9mZCA9IC0xOworQEAgLTQwOCw3ICs0MTMsNyBAQAorIAljaGFyICpocGF0aCwgKnRwYXRoOworIAlzdHJ1Y3QgZGlyZW50ICpkcCwgKipuYW1lbGlzdDsKKyAJc3RydWN0IGZpbGVzeXN0ZW1fZW50cnkgKmVudHJ5OworLQorKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogZWxlbWVudCA9IGlnbm9yZXBhdGg7CisgCisgCWlmIChsc3RhdChob3N0cGF0aCwgJnNiKSkgeworIAkJcGVycm9yX21zZ19hbmRfZGllKCIlcyIsIGhvc3RwYXRoKTsKK0BAIC00MTcsNiArNDIyLDE1IEBACisgCWVudHJ5ID0gYWRkX2hvc3RfZmlsZXN5c3RlbV9lbnRyeSh0YXJnZXRwYXRoLCBob3N0cGF0aCwKKyAJCQlzYi5zdF91aWQsIHNiLnN0X2dpZCwgc2Iuc3RfbW9kZSwgMCwgcGFyZW50KTsKKyAKKysJd2hpbGUgKCBlbGVtZW50ICkgeworKwkJaWYgKCBzdHJjbXAoIGVsZW1lbnQtPm5hbWUsIHRhcmdldHBhdGggKSA9PSAwICkgeworKwkJCXByaW50ZiggIk5vdGU6IGlnbm9yaW5nIGRpcmVjdG9yaWVzIGJlbG93ICclcydcbiIsIHRhcmdldHBhdGggKTsKKysJCQlyZXR1cm4gZW50cnk7CisrCQkJYnJlYWs7CisrCQl9CisrCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJfQorKworIAluID0gc2NhbmRpcihob3N0cGF0aCwgJm5hbWVsaXN0LCAwLCBhbHBoYXNvcnQpOworIAlpZiAobiA8IDApIHsKKyAJCXBlcnJvcl9tc2dfYW5kX2RpZSgib3BlbmluZyBkaXJlY3RvcnkgJXMiLCBob3N0cGF0aCk7CitAQCAtMTQ1Myw2ICsxNDY3LDcgQEAKKyAJeyJyb290IiwgMSwgTlVMTCwgJ3InfSwKKyAJeyJwYWdlc2l6ZSIsIDEsIE5VTEwsICdzJ30sCisgCXsiZXJhc2VibG9jayIsIDEsIE5VTEwsICdlJ30sCisrCXsiaWdub3JlIiwgMSwgTlVMTCwgJ0knfSwKKyAJeyJvdXRwdXQiLCAxLCBOVUxMLCAnbyd9LAorIAl7ImhlbHAiLCAwLCBOVUxMLCAnaCd9LAorIAl7InZlcmJvc2UiLCAwLCBOVUxMLCAndid9LAorQEAgLTE1MDAsNiArMTUxNSw3IEBACisgIiAgLUwsIC0tbGlzdC1jb21wcmVzc29ycyAgU2hvdyB0aGUgbGlzdCBvZiB0aGUgYXZhaWFibGUgY29tcHJlc3NvcnNcbiIKKyAiICAtdCwgLS10ZXN0LWNvbXByZXNzaW9uICBDYWxsIGRlY29tcHJlc3MgYW5kIGNvbXBhcmUgd2l0aCB0aGUgb3JpZ2luYWwgKGZvciB0ZXN0KVxuIgorICIgIC1uLCAtLW5vLWNsZWFubWFya2VycyAgIERvbid0IGFkZCBhIGNsZWFubWFya2VyIHRvIGV2ZXJ5IGVyYXNlYmxvY2tcbiIKKysiICAtSSwgLS1pZ25vcmU9UEFUSCAgICAgICBJZ25vcmUgc3ViIGRpcmVjdG9yeSBhbmQgZmlsZSB0cmVlIGJlbG93IFBBVEggd2hlbiByZWN1cnNpbmcgb3ZlciB0aGUgZmlsZSBzeXN0ZW1cbiIKKyAiICAtbywgLS1vdXRwdXQ9RklMRSAgICAgICBPdXRwdXQgdG8gRklMRSAoZGVmYXVsdDogc3Rkb3V0KVxuIgorICIgIC1sLCAtLWxpdHRsZS1lbmRpYW4gICAgIENyZWF0ZSBhIGxpdHRsZS1lbmRpYW4gZmlsZXN5c3RlbVxuIgorICIgIC1iLCAtLWJpZy1lbmRpYW4gICAgICAgIENyZWF0ZSBhIGJpZy1lbmRpYW4gZmlsZXN5c3RlbVxuIgorQEAgLTE2NjYsNiArMTY4Miw3IEBACisgCWNoYXIgKmNvbXByX25hbWUgPSBOVUxMOworIAlpbnQgY29tcHJfcHJpb3IgID0gLTE7CisgCWludCB3YXJuX3BhZ2Vfc2l6ZSA9IDA7CisrCXN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5KiBlbGVtZW50ID0gaWdub3JlcGF0aDsKKyAKKyAJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworIAlpZiAocGFnZV9zaXplIDwgMCkgLyogU3lzdGVtIGRvZXNuJ3Qga25vdyBzbyAuLi4gKi8KK0BAIC0xNjc2LDcgKzE2OTMsNyBAQAorIAlqZmZzMl9jb21wcmVzc29yc19pbml0KCk7CisgCisgCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwKKy0JCQkJCSJEOmQ6cjpzOm86cVVQZmg/dlZlOmxicDo6bmM6bTp4Olg6THR5Omk6IiwgbG9uZ19vcHRpb25zLCAmYykpID49IDApCisrCQkJCQkiRDpkOnI6czpJOm86cVVQZmg/dlZlOmxicDo6bmM6bTp4Olg6THR5Omk6IiwgbG9uZ19vcHRpb25zLCAmYykpID49IDApCisgCXsKKyAJCXN3aXRjaCAob3B0KSB7CisgCQkJY2FzZSAnRCc6CitAQCAtMTcwMCw2ICsxNzE3LDI4IEBACisgCQkJCXdhcm5fcGFnZV9zaXplID0gMDsgLyogc2V0IGJ5IHVzZXIsIHNvIGRvbid0IG5lZWQgdG8gd2FybiAqLworIAkJCQlicmVhazsKKyAKKysJCQljYXNlICdJJzoKKysJCQkJcHJpbnRmKCAiTm90ZTogQWRkaW5nICclcycgdG8gaWdub3JlIFBhdGhcbiIsIG9wdGFyZyApOworKwkJCQllbGVtZW50ID0gaWdub3JlcGF0aDsKKysJCQkJaWYgKCAhaWdub3JlcGF0aCApIHsKKysJCQkJCWlnbm9yZXBhdGggPSB4bWFsbG9jKCBzaXplb2YoIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5ICkgKTsKKysJCQkJCWlnbm9yZXBhdGgtPm5leHQgPSAwOworKwkJCQkJc3RyY3B5KCAmaWdub3JlcGF0aC0+bmFtZVswXSwgb3B0YXJnICk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQl3aGlsZSAoIGVsZW1lbnQtPm5leHQgKSBlbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJCQkJCWVsZW1lbnQtPm5leHQgPSB4bWFsbG9jKCBzaXplb2YoIHN0cnVjdCBpZ25vcmVwYXRoX2VudHJ5ICkgKTsKKysgCQkJCQllbGVtZW50LT5uZXh0LT5uZXh0ID0gMDsKKysJCQkJCXN0cmNweSggJmVsZW1lbnQtPm5leHQtPm5hbWVbMF0sIG9wdGFyZyApOworKwkJCQl9CisrCQkJCXByaW50ZiggIi0tLS0tLS0tLSBEdW1waW5nIGlnbm9yZSBwYXRoIGxpc3QgLS0tLS0tLS0tLS0tLS0tLVxuIiApOworKwkJCQllbGVtZW50ID0gaWdub3JlcGF0aDsKKysJCQkJd2hpbGUgKCBlbGVtZW50ICkgeworKwkJCQkJcHJpbnRmKCAiICAqICclcydcbiIsICZlbGVtZW50LT5uYW1lWzBdICk7CisrCQkJCQllbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKysJCQkJfQorKwkJCQlwcmludGYoICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKKysJCQkJYnJlYWs7CisrCisgCQkJY2FzZSAnbyc6CisgCQkJCWlmIChvdXRfZmQgIT0gLTEpIHsKKyAJCQkJCWVycm9yX21zZ19hbmRfZGllKCJvdXRwdXQgZmlsZW5hbWUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMTYyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2ZpeC1hcm12Ny1uZW9uLWFsaWdubWVudC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworTkVPTiBpbnN0cnVjdGlvbiBWTEQxLjY0IHdhcyB1c2VkIHRvIGNvcHkgNjQgYml0cyBkYXRhIGFmdGVyIHR5cGUKK2Nhc3RpbmcsIGFuZCB0aGV5IHdpbGwgdHJpZ2dlciBhbGlnbm1lbnQgdHJhcC4KK1RoaXMgcGF0Y2ggdXNlcyBtZW1jcHkgdG8gYXZvaWQgYWxpZ25tZW50IHByb2JsZW0uCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPFl1YW5qaWUuSHVhbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL21rZnMudWJpZnMva2V5LmggYi9ta2ZzLnViaWZzL2tleS5oCitpbmRleCBkM2EwMmQ0Li5lN2U5MjE4IDEwMDY0NAorLS0tIGEvbWtmcy51Ymlmcy9rZXkuaAorKysrIGIvbWtmcy51Ymlmcy9rZXkuaAorQEAgLTE0MSwxMCArMTQxLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkYXRhX2tleV9pbml0KHVuaW9uIHViaWZzX2tleSAqa2V5LCBpbm9fdCBpbnVtLAorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGUoY29uc3QgdW5pb24gdWJpZnNfa2V5ICpmcm9tLCB2b2lkICp0bykKKyB7CistCXVuaW9uIHViaWZzX2tleSAqdCA9IHRvOworKwlfX2xlMzIgeFsyXTsKKyAKKy0JdC0+ajMyWzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKy0JdC0+ajMyWzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysJeFswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CisrCXhbMV0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMV0pOworKworKwltZW1jcHkodG8sICZ4LCA4KTsKKyAJbWVtc2V0KHRvICsgOCwgMCwgVUJJRlNfTUFYX0tFWV9MRU4gLSA4KTsKKyB9CisgCitAQCAtMTU2LDEwICsxNTgsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGtleV93cml0ZShjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmZyb20sIHZvaWQgKnRvKQorICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGVfaWR4KGNvbnN0IHVuaW9uIHViaWZzX2tleSAqZnJvbSwgdm9pZCAqdG8pCisgeworLQl1bmlvbiB1Ymlmc19rZXkgKnQgPSB0bzsKKysJX19sZTMyIHhbMl07CisrCisrCXhbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworKwl4WzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKyAKKy0JdC0+ajMyWzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKy0JdC0+ajMyWzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysJbWVtY3B5KHRvLCAmeCwgOCk7CisgfQorIAorIC8qKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvbXRkLXV0aWxzLWZpeC1jb3JydXB0LWNsZWFubWFya2VyLXdpdGgtZmxhc2hfZXJhc2UtLWotY29tbWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwN2NmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworRnJvbSBwYXRjaHdvcmsgTW9uIEF1ZyAgOCAwODoxNjo0MyAyMDExCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1N1YmplY3Q6IG10ZC11dGlsczogZml4IGNvcnJ1cHQgY2xlYW5tYXJrZXIgd2l0aCBmbGFzaF9lcmFzZSAtaiBjb21tYW5kCitEYXRlOiBTdW4sIDA3IEF1ZyAyMDExIDIyOjE2OjQzIC0wMDAwCitGcm9tOiBiMzUzNjJAZnJlZXNjYWxlLmNvbQorWC1QYXRjaHdvcmstSWQ6IDEwODg3MworTWVzc2FnZS1JZDogPDEzMTI3OTE0MDMtMTM0NzMtMS1naXQtc2VuZC1lbWFpbC1iMzUzNjJAZnJlZXNjYWxlLmNvbT4KK1RvOiA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KK0NjOiBMaXUgU2h1byA8YjM1MzYyQGZyZWVzY2FsZS5jb20+LCBBcnRlbS5CaXR5dXRza2l5QG5va2lhLmNvbSwKKyBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPiwgbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKKworRnJvbTogTGl1IFNodW8gPGIzNTM2MkBmcmVlc2NhbGUuY29tPgorCitGbGFzaF9lcmFzZSAtaiBzaG91bGQgZmlsbCBkaXNjcmV0ZSBmcmVlb29iIGFyZWFzIHdpdGggcmVxdWlyZWQgYnl0ZXMKK29mIEpGRlMyIGNsZWFubWFya2VyIGluIGpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKS4gTm90IGp1c3QgZmlsbAordGhlIGZpcnN0IGZyZWVvb2IgYXJlYS4KKworVGhlIGJlbG93IGlzIHRoZSByZXN1bHQgd2l0aG91dCB0aGlzIHdvcmthcm91bmQ6CisKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDAwMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwNDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMDgwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDBjMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxMDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMTQwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDE4MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxYzAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMjAwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDI0MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAyODAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorLi4uCisKK1NpZ25lZC1vZmYtYnk6IExpdSBTaHVvIDxiMzUzNjJAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisKK1VwZGF0ZWQgZm9yIHRoZSBuZXcgdmVyc2lvbgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCit2MiA6IGdldCBsZW5ndGggb2YgYXZhaWxibGUgZnJlZW9vYiBieXRlcyBmcm9tIG9vYmluZm8gaW5mb3JtYXRpb24sCisgICAgICBub3QgdXNlIHRoZSBpb2N0bCBFQ0NHRVRMQVlPVVQgd2hpY2ggaXMgYmVpbmcgZGVwcmVjYXRlZC4KKworIGZsYXNoX2VyYXNlLmMgfCAgIDQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mbGFzaF9lcmFzZS5jIGIvZmxhc2hfZXJhc2UuYworaW5kZXggOTMzMzczYS4uNGI5ZDg0YiAxMDA2NDQKKy0tLSBhL2ZsYXNoX2VyYXNlLmMKKysrKyBiL2ZsYXNoX2VyYXNlLmMKK0BAIC05OSw2ICs5OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCWJvb2wgaXNOQU5EOworIAlpbnQgZXJyb3IgPSAwOworIAlvZmZfdCBvZmZzZXQgPSAwOworKwl2b2lkICpvb2JfZGF0YSA9IE5VTEw7CisgCisgCS8qCisgCSAqIFByb2Nlc3MgdXNlciBhcmd1bWVudHMKK0BAIC0yMDEsMTUgKzIwMiw0MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJCWlmIChpb2N0bChmZCwgTUVNR0VUT09CU0VMLCAmb29iaW5mbykgIT0gMCkKKyAJCQkJcmV0dXJuIHN5c19lcnJtc2coIiVzOiB1bmFibGUgdG8gZ2V0IE5BTkQgb29iaW5mbyIsIG10ZF9kZXZpY2UpOworIAorKwkJCWNsZWFubWFya2VyLnRvdGxlbiA9IGNwdV90b19qZTMyKDgpOworIAkJCS8qIENoZWNrIGZvciBhdXRvcGxhY2VtZW50ICovCisgCQkJaWYgKG9vYmluZm8udXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgeworLQkJCQkvKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBmcmVlIGJ5dGVzICovCistCQkJCWlmICghb29iaW5mby5vb2JmcmVlWzBdWzFdKQorKwkJCQlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXRfdXNlciBlY2NsYXlvdXQ7CisrCQkJCWludCBpLCBvb2JhdmFpbDsKKysKKysJCQkJZm9yIChpID0gMCwgb29iYXZhaWwgPSAwOyBvb2JpbmZvLm9vYmZyZWVbaV1bMV07IGkrKykKKysJCQkJCW9vYmF2YWlsICs9IG9vYmluZm8ub29iZnJlZVtpXVsxXTsKKysKKysJCQkJaWYgKCFvb2JhdmFpbCkKKyAJCQkJCXJldHVybiBlcnJtc2coIiBFZWVwLiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkIGFuZCBubyBlbXB0eSBzcGFjZSBpbiBvb2IiKTsKKysKKysJCQkJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLworIAkJCQljbG1wb3MgPSBvb2JpbmZvLm9vYmZyZWVbMF1bMF07CistCQkJCWNsbWxlbiA9IG9vYmluZm8ub29iZnJlZVswXVsxXTsKKy0JCQkJaWYgKGNsbWxlbiA+IDgpCistCQkJCQljbG1sZW4gPSA4OworKwkJCQljbG1sZW4gPSBNSU4ob29iYXZhaWwsIDgpOworKworKwkJCQlpZiAob29iaW5mby5vb2JmcmVlWzBdWzFdIDwgOCAmJiBvb2JhdmFpbCA+PSA4KSB7CisrCQkJCQlpbnQgbGVmdCwgbiwgbGFzdCA9IDA7CisrCQkJCQl2b2lkICpjbTsKKysKKysJCQkJCW9vYl9kYXRhID0gbWFsbG9jKG10ZC5vb2Jfc2l6ZSk7CisrCQkJCQlpZiAoIW9vYl9kYXRhKQorKwkJCQkJCXJldHVybiAtRU5PTUVNOworKworKwkJCQkJbWVtc2V0KG9vYl9kYXRhLCAweGZmLCBtdGQub29iX3NpemUpOworKwkJCQkJY20gPSAmY2xlYW5tYXJrZXI7CisrCQkJCQlmb3IgKGkgPSAwLCBsZWZ0ID0gY2xtbGVuOyBsZWZ0IDsgaSsrKSB7CisrCQkJCQkJbiA9IE1JTihsZWZ0LCBvb2JpbmZvLm9vYmZyZWVbaV1bMV0pOworKwkJCQkJCW1lbWNweShvb2JfZGF0YSArIG9vYmluZm8ub29iZnJlZVtpXVswXSwKKysJCQkJCQkJCWNtLCBuKTsKKysJCQkJCQlsZWZ0IC09IG47CisrCQkJCQkJY20gICArPSBuOworKwkJCQkJCWxhc3QgPSBvb2JpbmZvLm9vYmZyZWVbaV1bMF0gKyBuOworKwkJCQkJfQorKworKwkJCQkJY2xtbGVuID0gbGFzdCAtIGNsbXBvczsKKysJCQkJfQorIAkJCX0gZWxzZSB7CisgCQkJCS8qIExlZ2FjeSBtb2RlICovCisgCQkJCXN3aXRjaCAobXRkLm9vYl9zaXplKSB7CitAQCAtMjI3LDcgKzI1Niw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQkJCQkJYnJlYWs7CisgCQkJCX0KKyAJCQl9CistCQkJY2xlYW5tYXJrZXIudG90bGVuID0gY3B1X3RvX2plMzIoOCk7CisgCQl9CisgCQljbGVhbm1hcmtlci5oZHJfY3JjID0gY3B1X3RvX2plMzIobXRkX2NyYzMyKDAsICZjbGVhbm1hcmtlciwgc2l6ZW9mKGNsZWFubWFya2VyKSAtIDQpKTsKKyAJfQorQEAgLTI3Niw3ICszMDQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAkJLyogd3JpdGUgY2xlYW5tYXJrZXIgKi8KKyAJCWlmIChpc05BTkQpIHsKKy0JCQlpZiAobXRkX3dyaXRlX29vYihtdGRfZGVzYywgJm10ZCwgZmQsICh1aW50NjRfdClvZmZzZXQgKyBjbG1wb3MsIGNsbWxlbiwgJmNsZWFubWFya2VyKSAhPSAwKSB7CisrCQkJdm9pZCAqZGF0YSA9IG9vYl9kYXRhID8gb29iX2RhdGEgKyBjbG1wb3MgOiAmY2xlYW5tYXJrZXI7CisrCQkJaWYgKG10ZF93cml0ZV9vb2IobXRkX2Rlc2MsICZtdGQsIGZkLCAodWludDY0X3Qpb2Zmc2V0ICsgY2xtcG9zLCBjbG1sZW4sIGRhdGEpICE9IDApIHsKKyAJCQkJc3lzX2Vycm1zZygiJXM6IE1URCB3cml0ZW9vYiBmYWlsdXJlIiwgbXRkX2RldmljZSk7CisgCQkJCWNvbnRpbnVlOworIAkJCX0KK0BAIC0yOTEsNSArMzIwLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJc2hvd19wcm9ncmVzcygmbXRkLCBvZmZzZXQsIGViLCBlYl9zdGFydCwgZWJfY250KTsKKyAJYmFyZXZlcmJvc2UoIXF1aWV0LCAiXG4iKTsKKyAKKysJaWYgKG9vYl9kYXRhKQorKwkJZnJlZShvb2JfZGF0YSk7CisrCisgCXJldHVybiAwOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2RjYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHNfZ2l0LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIG1lbW9yeSB0ZWNobm9sb2d5IGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9jb21tb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1iYTA1YjA3OTEyYTQ0ZWEyYmY4MWNlNDA5MzgwMDQ5YyIKKworREVQRU5EUyA9ICJ6bGliIGx6byBlMmZzcHJvZ3MgdXRpbC1saW51eCIKKworUFYgPSAiMS41LjErZ2l0JHtTUkNQVn0iCisKK1NSQ1JFViA9ICI5ZjEwNzEzMmE2YTA3M2NjZTM3NDM0Y2E5Y2RhNjkxN2RkOGQ4NjZiIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXQuaW5mcmFkZWFkLm9yZy9tdGQtdXRpbHMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworIyB4YXR0ciBzdXBwb3J0IGNyZWF0ZXMgYW4gYWRkaXRpb25hbCBjb21waWxlLXRpbWUgZGVwZW5kZW5jeSBvbiBhY2wgYmVjYXVzZQorIyB0aGUgc3lzL2FjbC5oIGhlYWRlciBpcyBuZWVkZWQuIGxpYmFjbCBpcyBub3QgbmVlZGVkIGFuZCB0aHVzIGVuYWJsaW5nIHhhdHRyCisjIHJlZ2FyZGxlc3Mgd2hldGhlciBhY2wgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgZGlzdHJvIHNob3VsZCBiZSBva2F5LgorUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICIsLGFjbCwiCisKK0VYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdSQU5MSUI9JHtSQU5MSUJ9JyAnQVI9JHtBUn0nICdDRkxBR1M9JHtDRkxBR1N9ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3hhdHRyJywgJycsICctRFdJVEhPVVRfWEFUVFInLCBkKX0gLUkke1N9L2luY2x1ZGUnICdCVUlMRERJUj0ke1N9JyIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBTQklORElSPSR7c2JpbmRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNMVURFRElSPSR7aW5jbHVkZWRpcn0KK30KKworUEFDS0FHRVMgPSsgIm10ZC11dGlscy1qZmZzMiBtdGQtdXRpbHMtdWJpZnMgbXRkLXV0aWxzLW1pc2MiCisKK0ZJTEVTX210ZC11dGlscy1qZmZzMiA9ICIke3NiaW5kaXJ9L21rZnMuamZmczIgJHtzYmluZGlyfS9qZmZzMmR1bXAgJHtzYmluZGlyfS9qZmZzMnJlYWRlciAke3NiaW5kaXJ9L3N1bXRvb2wiCitGSUxFU19tdGQtdXRpbHMtdWJpZnMgPSAiJHtzYmluZGlyfS9ta2ZzLnViaWZzICR7c2JpbmRpcn0vdWJpKiIKK0ZJTEVTX210ZC11dGlscy1taXNjID0gIiR7c2JpbmRpcn0vbmZ0bCogJHtzYmluZGlyfS9mdGwqICR7c2JpbmRpcn0vcmZkKiAke3NiaW5kaXJ9L2RvYyogJHtzYmluZGlyfS9zZXJ2ZV9pbWFnZSAke3NiaW5kaXJ9L3JlY3ZfaW1hZ2UiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIGdpdC8uY29tcHIuYy5kZXA6NDY6IHdhcm5pbmc6IE5VTCBjaGFyYWN0ZXIgc2VlbjsgcmVzdCBvZiBsaW5lIGlnbm9yZWQKKyMgZ2l0Ly5jb21wci5jLmRlcDo0NzogKioqIG1pc3Npbmcgc2VwYXJhdG9yLiAgU3RvcC4KK1BBUkFMTEVMX01BS0UgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvZml4LWJyb2tlbi1sei5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NTQ5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBXZW5saW4gS2FuZyA8d2VubGluLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggOGY5MzA1YS4uNjk0ZTgzNyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI1MSw2ICsyNTEsNyBAQCBpbnN0YWxsLXNjcmlwdHM6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorIAlAZm9yIGogaW4gJChTQ1JJUFRTKSA7IGRvIFwKKyAJCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCisgCXJtIC1mICR7REVTVERJUn0kKGJpbmRpcikvbHoKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjg3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMtbWFrZWluZm8ucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBtdG9vbHMtMy45LjkvY29uZmlndXJlLmluLm9yaWcJMjAwNi0wNC0xNCAxNjowNTo1NC4zMzc2NTUxOTIgLTA2MDAKKysrKyBtdG9vbHMtMy45LjkvY29uZmlndXJlLmluCTIwMDYtMDQtMTQgMTY6MTI6MjkuNzM2NTQ1NDI0IC0wNjAwCitAQCAtMjEsNiArMjEsMzMgQEAKKyBBQ19DX0NPTlNUCisgQUNfQ19JTkxJTkUKKyAKKytBQ19DSEVDS19QUk9HKE1BS0VJTkZPLCBtYWtlaW5mbywgbWFrZWluZm8sICkKKytpZiB0ZXN0ICJ4JE1BS0VJTkZPIiA9ICJ4IjsgdGhlbgorKwlNQUtFSU5GTz0iQGVjaG8gbWFrZWluZm8gbWlzc2luZzsgdHJ1ZSIKKytmaQorK0FDX0NIRUNLX1BST0coVEVYSTJEVkksIHRleGkyZHZpLCB0ZXhpMmR2aSwgKQorK2lmIHRlc3QgIngkVEVYSTJEVkkiID0gIngiOyB0aGVuCisrCVRFWEkyRFZJPSJAZWNobyB0ZXhpMmR2aSBtaXNzaW5nOyB0cnVlIgorK2ZpCisrQUNfQ0hFQ0tfUFJPRyhURVhJMlBERiwgdGV4aTJwZGYsIHRleGkycGRmLCApCisraWYgdGVzdCAieCRURVhJMlBERiIgPSAieCI7IHRoZW4KKysJVEVYSTJQREY9IkBlY2hvIHRleGkycGRmIG1pc3Npbmc7IHRydWUiCisrZmkKKytBQ19DSEVDS19QUk9HKFRFWEkySFRNTCwgdGV4aTJodG1sLCB0ZXhpMmh0bWwsICkKKytpZiB0ZXN0ICJ4JFRFWEkySFRNTCIgPSAieCI7IHRoZW4KKysJVEVYSTJIVE1MPSJAZWNobyB0ZXhpMmh0bWwgbWlzc2luZzsgdHJ1ZSIKKytmaSAgICAKKytBQ19DSEVDS19QUk9HKERWSTJQUywgZHZpMnBzLCBkdmkycHMsICkKKytpZiB0ZXN0ICJ4JERWSTJQUyIgPSAieCI7IHRoZW4KKysJRFZJMlBTPSJAZWNobyBkdmkycHMgbWlzc2luZzsgdHJ1ZSIKKytmaQorKworK0FDX1NVQlNUKE1BS0VJTkZPKQorK0FDX1NVQlNUKFRFWEkyRFZJKQorK0FDX1NVQlNUKFRFWEkyUERGKQorK0FDX1NVQlNUKFRFWEkySFRNTCkKKytBQ19TVUJTVChEVkkyUFMpCisrCisgCisgZG5sIENoZWNrIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyBkbmwgRW5hYmxlIE9TLzIgZXh0ZW5kZWQgZGVuc2l0eSBmb3JtYXQgZGlza3MKKy0tLSBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4uc2F2CTIwMDYtMDQtMTQgMTU6NTY6MTkuMDAwMDAwMDAwIC0wNjAwCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCTIwMDYtMDQtMTQgMTY6MTU6MjkuMzE1MjQ1MzEyIC0wNjAwCitAQCAtMTEsMTAgKzExLDExIEBACisgVVNFUkxERkxBR1MgPQorIFVTRVJMRExJQlMgPQorIAorLU1BS0VJTkZPID0gbWFrZWluZm8KKy1URVhJMkRWSSA9IHRleGkyZHZpCistVEVYSTJQREYgPSB0ZXhpMnBkZgorLVRFWEkySFRNTCA9IHRleGkyaHRtbAorK01BS0VJTkZPID0gQE1BS0VJTkZPQAorK1RFWEkyRFZJID0gQFRFWEkyRFZJQAorK1RFWEkyUERGID0gQFRFWEkyUERGQAorK1RFWEkySFRNTCA9IEBURVhJMkhUTUxACisrRFZJMlBTID0gQERWSTJQU0AKKyAKKyAKKyAjIGRvIG5vdCBlZGl0IGJlbG93IHRoaXMgbGluZQorQEAgLTE4MSw3ICsxODIsNyBAQAorIAorIHBzOiBtdG9vbHMucHMKKyAlLnBzOiAlLmR2aQorLQlkdmlwcyAtZiA8ICQ8ID4gJEAKKysJJChEVkkyUFMpIC1mIDwgJDwgPiAkQAorIAorIHBkZjogbXRvb2xzLnBkZgorICUucGRmOiAlLnRleGkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWEzMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsMTI5IEBACiskTmV0QlNEOiBwYXRjaC1hYSx2IDEuMTAgMjAwNy8wOC8xNyAyMDo1NTozNCBqb2VyZyBFeHAgJAorCistLS0KKyBNYWtlZmlsZS5pbiB8ICAgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG10b29scy0zLjkuOS5vcmlnL01ha2VmaWxlLmluCTIwMDctMTAtMTIgMTE6MTg6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCTIwMDctMTAtMTIgMTE6Mjg6MTQuMDAwMDAwMDAwICswMTAwCitAQCAtMTk1LDMwICsxOTUsMjIgQEAgaHRtbDogbXRvb2xzLmh0bWwgbXRvb2xzX3RvYy5odG1sCisgCisgIyBEb24ndCBjZCwgdG8gYXZvaWQgYnJlYWtpbmcgaW5zdGFsbC1zaCByZWZlcmVuY2VzLgorIGluc3RhbGwtaW5mbzogaW5mbworLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChpbmZvZGlyKQorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoaW5mb2RpcikKKyAJaWYgdGVzdCAtZiBtdG9vbHMuaW5mbzsgdGhlbiBcCisgCSAgZm9yIGkgaW4gbXRvb2xzLmluZm8qOyBkbyBcCistCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoaW5mb2RpcikvJCRpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRpICR7REVTVERJUn0kKGluZm9kaXIpLyQkaTsgXAorIAkgIGRvbmU7IFwKKyAJZWxzZSBcCisgCSAgZm9yIGkgaW4gJChzcmNkaXIpL210b29scy5pbmZvKjsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKGluZm9kaXIpL2BlY2hvICQkaSB8IHNlZCAnc3xeJChzcmNkaXIpL3x8J2A7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJHtERVNURElSfSQoaW5mb2RpcikvYGVjaG8gJCRpIHwgc2VkICdzfF4kKHNyY2RpcikvfHwnYDsgXAorIAkgIGRvbmU7IFwKKyAJZmk7IFwKKy0JaWYgWyAtbiAiJChJTlNUQUxMX0lORk8pIiBdIDsgdGhlbiBcCistCQlpZiBbIC1mICQoaW5mb2RpcikvZGlyLmluZm8gXSA7IHRoZW4gXAorLQkJCSQoSU5TVEFMTF9JTkZPKSAkKGluZm9kaXIpL210b29scy5pbmZvICQoaW5mb2RpcikvZGlyLmluZm87IFwKKy0JCWZpOyBcCistCQlpZiBbIC1mICQoaW5mb2RpcikvZGlyIF0gOyB0aGVuIFwKKy0JCQkkKElOU1RBTExfSU5GTykgJChpbmZvZGlyKS9tdG9vbHMuaW5mbyAkKGluZm9kaXIpL2RpcjsgXAorLQkJZmk7IFwKKy0JZmkKKyAKKyB1bmluc3RhbGwtaW5mbzoKKyAJY2QgJChpbmZvZGlyKSAmJiBybSAtZiBtdG9vbHMuaW5mbyoKKyAKKy1pbnN0YWxsOgkkKGJpbmRpcikvbXRvb2xzIEBCSU5GTE9QUFlEQCBpbnN0YWxsLW1hbiBpbnN0YWxsLWxpbmtzIFwKKy0JCSQoYmluZGlyKS9ta21hbmlmZXN0IGluc3RhbGwtc2NyaXB0cyBpbnN0YWxsLWluZm8KKytpbnN0YWxsOgkke0RFU1RESVJ9JChiaW5kaXIpL210b29scyAke0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWQgaW5zdGFsbC1tYW4gaW5zdGFsbC1saW5rcyBcCisrCQkke0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3QgaW5zdGFsbC1zY3JpcHRzIGluc3RhbGwtaW5mbworIAorIHVuaW5zdGFsbDoJdW5pbnN0YWxsLWJpbiB1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1saW5rcyBcCisgCQl1bmluc3RhbGwtc2NyaXB0cworQEAgLTIyOCw1MiArMjIwLDUyIEBAIGRpc3RjbGVhbjogY2xlYW4gdGV4Y2xlYW4KKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAKKyAKKy0kKGJpbmRpcikvZmxvcHB5ZDogZmxvcHB5ZAorLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkICQoYmluZGlyKS9mbG9wcHlkCisrJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkOiBmbG9wcHlkCisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkICR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZAorIAorLSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0OiBmbG9wcHlkX2luc3RhbGx0ZXN0CistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWRfaW5zdGFsbHRlc3QgJChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3QKKyske0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWRfaW5zdGFsbHRlc3Q6IGZsb3BweWRfaW5zdGFsbHRlc3QKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIGZsb3BweWRfaW5zdGFsbHRlc3QgJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0CisgCistJChiaW5kaXIpL210b29sczogbXRvb2xzCistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG10b29scyAkKGJpbmRpcikvbXRvb2xzCisrJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHM6IG10b29scworKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCistJChiaW5kaXIpL21rbWFuaWZlc3Q6IG1rbWFuaWZlc3QKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgbWttYW5pZmVzdCAkKGJpbmRpcikvbWttYW5pZmVzdAorKyR7REVTVERJUn0kKGJpbmRpcikvbWttYW5pZmVzdDogbWttYW5pZmVzdAorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbWttYW5pZmVzdCAke0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3QKKyAKKyAjJChFVENESVIpL210b29sczogbXRvb2xzLmV0YworICMJY3AgbXRvb2xzLmV0YyAkKEVUQ0RJUikvbXRvb2xzCisgCistaW5zdGFsbC1saW5rczogJChiaW5kaXIpL210b29scworK2luc3RhbGwtbGlua3M6ICR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzCisgCUBmb3IgaiBpbiAkKExJTktTKTsgZG8gXAorLQkJcm0gLWYgJChiaW5kaXIpLyQkaiA7IFwKKy0JCSQoTE5fUykgbXRvb2xzICQoYmluZGlyKS8kJGogOyBcCistCQllY2hvICQoYmluZGlyKS8kJGogOyBcCisrCQlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCSQoTE5fUykgbXRvb2xzICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorIAorICMjICJ6IiBpcyB0aGUgb2xkZXIgdmVyc2lvbiBvZiAiZ3oiOyB0aGUgbmFtZSBpcyBqdXN0ICp0b28qIHNob3J0CistaW5zdGFsbC1zY3JpcHRzOiAkKGJpbmRpcikvbXRvb2xzCistCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCisraW5zdGFsbC1zY3JpcHRzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworKwlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKyAJQGZvciBqIGluICQoU0NSSVBUUykgOyBkbyBcCistCQkkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICQoYmluZGlyKS8kJGogOyBcCistCQllY2hvICQoYmluZGlyKS8kJGogOyBcCisrCQkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAlkb25lCistCXJtIC1mICQoYmluZGlyKS9segorLQkkKExOX1MpIHV6ICQoYmluZGlyKS9segorKwlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpL2x6CisrCSQoTE5fUykgdXogJHtERVNURElSfSQoYmluZGlyKS9segorIAorIGluc3RhbGwtbWFuOgorLQlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoTUFOMURJUikKKysJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChNQU4xRElSKQorIAlAZm9yIGogaW4gJChNQU4xKTsgZG8gXAorLQkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJChNQU4xRElSKS8kJGogOyBcCistCQllY2hvICQoTUFOMURJUikvJCRqIDsgXAorKwkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGogJHtERVNURElSfSQoTUFOMURJUikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChNQU4xRElSKS8kJGogOyBcCisgCWRvbmUKKy0JQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKE1BTjVESVIpCisrCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoTUFONURJUikKKyAJQGZvciBqIGluICQoTUFONSk7IGRvIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICQoTUFONURJUikvJCRqIDsgXAorLQkJZWNobyAkKE1BTjVESVIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICR7REVTVERJUn0kKE1BTjVESVIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoTUFONURJUikvJCRqIDsgXAorIAlkb25lCisgCisgdW5pbnN0YWxsLWJpbjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IzZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLmdwbHYzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgYnVpbGRpbmcgd2l0aCBYMTEgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbXRvb2xzLTQuMC4xNS5vcmlnLy9NYWtlZmlsZS5pbiBtdG9vbHMtNC4wLjE1Ly9NYWtlZmlsZS5pbgorLS0tIG10b29scy00LjAuMTUub3JpZy8vTWFrZWZpbGUuaW4JMjAxMC0xMC0xNyAwODo0MTowOS4wMDAwMDAwMDAgLTA3MDAKKysrKyBtdG9vbHMtNC4wLjE1Ly9NYWtlZmlsZS5pbgkyMDEwLTExLTIzIDEzOjU5OjQ5LjI1ODI1ODM3NCAtMDgwMAorQEAgLTE0Niw3ICsxNDYsNyBAQAorIENYWEZMQUdTICA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNYWEZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpCisgTElOSyAgICAgID0gJChDQykgJChMREZMQUdTKSAkKFVTRVJMREZMQUdTKSBAZXh0cmFsaWJkaXJACisgQUxMTElCUyAgID0gJChVU0VSTERMSUJTKSAkKE1BQ0hERVBMSUJTKSAkKFNITElCKSAkKExJQlMpCistWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAtbFhhdSAtbFgxMSAkKExJQlMpCisrWF9MREZMQUdTID0gJChYX0VYVFJBX0xJQlMpICQoWF9MSUJTKSAkKExJQlMpCisgWF9DQ0ZMQUdTID0gJChYX0NGTEFHUykgJChDRkxBR1MpCisgCisgYWxsOiAgICBtdG9vbHMgJChMSU5LUykgbWttYW5pZmVzdCBARkxPUFBZREAgbXRvb2xzLjEgbXRvb2xzLjUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDViNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbm8teDExLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworLS0tIG10b29scy0zLjkuOS5vcmlnL01ha2VmaWxlLmluCisrKysgbXRvb2xzLTMuOS45L01ha2VmaWxlLmluCitAQCAtMTI4LDExICsxMjgsMTEgQEAgWF9FWFRSQV9MSUJTID0gQFhfRVhUUkFfTElCU0AKKyBYX1BSRV9MSUJTID0gQFhfUFJFX0xJQlNACisgQ0ZMQUdTID0gJChDUFBGTEFHUykgJChERUZTKSAkKE1ZQ0ZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpIAorIENYWEZMQUdTICA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNYWEZMQUdTKSAtSS4gQGV4dHJhaW5jbHVkZWRpckAgLUlAc3JjZGlyQCAkKFVTRVJDRkxBR1MpIAorIExJTksgICAgICA9ICQoQ0MpICQoTERGTEFHUykgJChVU0VSTERGTEFHUykgQGV4dHJhbGliZGlyQAorIEFMTExJQlMgICA9ICQoVVNFUkxETElCUykgJChNQUNIREVQTElCUykgJChTSExJQikgJChMSUJTKQorLVhfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChYX1BSRV9MSUJTKSAtbFhhdSAtbFgxMSAkKExJQlMpIAorK1hfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChYX1BSRV9MSUJTKSAkKExJQlMpCisgWF9DQ0ZMQUdTID0gJChYX0NGTEFHUykgJChDRkxBR1MpCisgCisgYWxsOiAgICBtdG9vbHMgJChMSU5LUykgbWttYW5pZmVzdCBARkxPUFBZREAKKyAKKyAlLm86ICUuYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc18zLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjg0YTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKQEAgLTAsMCArMSw1NiBAQAorIyBtdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCitTVU1NQVJZID0gIlV0aWxpdGllcyB0byBhY2Nlc3MgTVMtRE9TIGRpc2tzIHdpdGhvdXQgbW91bnRpbmcgdGhlbSIKK0RFU0NSSVBUSU9OID0gIk10b29scyBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBhY2Nlc3NpbmcgTVMtRE9TIGRpc2tzIGZyb20gVW5peCB3aXRob3V0IG1vdW50aW5nIHRoZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL210b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkyYjU4ZWM3NzY5Njc4OGNlMjc4YjA0NGQyYThlOWQzIgorUFIgPSAicjYiCisKK1JERVBFTkRTXyR7UE59ID0gImdsaWJjLWdjb252LWlibTg1MCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKwlnbGliYy1nY29udi1pYm00MzcgXAorCWdsaWJjLWdjb252LWlibTczNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzc1IFwKKwlnbGliYy1nY29udi1pYm04NTEgXAorCWdsaWJjLWdjb252LWlibTg1MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODU1IFwKKwlnbGliYy1nY29udi1pYm04NTcgXAorCWdsaWJjLWdjb252LWlibTg2MCBcCisJZ2xpYmMtZ2NvbnYtaWJtODYxIFwKKwlnbGliYy1nY29udi1pYm04NjIgXAorCWdsaWJjLWdjb252LWlibTg2MyBcCisJZ2xpYmMtZ2NvbnYtaWJtODY1IFwKKwlnbGliYy1nY29udi1pYm04NjYgXAorCWdsaWJjLWdjb252LWlibTg2OSBcCisJIgorCisjaHR0cDovL210b29scy5saW51eC5sdS9tdG9vbHMtJHtQVn0udGFyLmd6IAorU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvbWlycm9yL3NvdXJjZXMvbXRvb2xzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL210b29scy1tYWtlaW5mby5wYXRjaCBcCisJZmlsZTovL210b29scy5wYXRjaCBcCisJZmlsZTovL25vLXgxMS5wYXRjaCBcCisJZmlsZTovL2ZpeC1icm9rZW4tbHoucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2U2OGI4NTdiNGUxZjNhNjUyMWQxZGZlZmJkMzBhMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWYwODNhNzM0MjVkNjY0ZDQ2MDdlZjZjNjU2NGZkOTMxOWEwZTQ3ZWU3YzEwNTI1OWE0NTM1NmNiODM0NjkwZSIKKworUyA9ICIke1dPUktESVJ9L210b29scy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGliYnNkXSA9ICJhY19jdl9saWJfYnNkX21haW49eWVzLGFjX2N2X2xpYl9ic2RfbWFpbj1ubyxsaWJic2QiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYmluZGlyIHRvIGZpeCBwYXJhbGxlbCBpbnN0YWxsYXRpb24gaXNzdWVzCisgICAgbWtkaXIgLXAgJHtEfS8ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9LyR7ZGF0YWRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRlY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfNC4wLjE4LmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIHRvIGFjY2VzcyBNUy1ET1MgZGlza3Mgd2l0aG91dCBtb3VudGluZyB0aGVtIgorREVTQ1JJUFRJT04gPSAiTXRvb2xzIGlzIGEgY29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgdG8gYWNjZXNzIE1TLURPUyBkaXNrcyBmcm9tIEdOVSBhbmQgVW5peCB3aXRob3V0IG1vdW50aW5nIHRoZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL210b29scy8iCitTRUNUSU9OID0gIm9wdGlvbmFsIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCisKK1JERVBFTkRTXyR7UE59ID0gImdsaWJjLWdjb252LWlibTg1MCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKwlnbGliYy1nY29udi1pYm00MzcgXAorCWdsaWJjLWdjb252LWlibTczNyBcCisJZ2xpYmMtZ2NvbnYtaWJtNzc1IFwKKwlnbGliYy1nY29udi1pYm04NTEgXAorCWdsaWJjLWdjb252LWlibTg1MiBcCisJZ2xpYmMtZ2NvbnYtaWJtODU1IFwKKwlnbGliYy1nY29udi1pYm04NTcgXAorCWdsaWJjLWdjb252LWlibTg2MCBcCisJZ2xpYmMtZ2NvbnYtaWJtODYxIFwKKwlnbGliYy1nY29udi1pYm04NjIgXAorCWdsaWJjLWdjb252LWlibTg2MyBcCisJZ2xpYmMtZ2NvbnYtaWJtODY1IFwKKwlnbGliYy1nY29udi1pYm04NjYgXAorCWdsaWJjLWdjb252LWlibTg2OSBcCisJIgorU1JDX1VSSVttZDVzdW1dID0gImEyMzY0NjYxNzU0NmJmNmFkNTZmMDYxZDhiMjgzYzg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5ZTljZjgwODg1Mzk5YzRmMjI5ZTVkODdlNDljMGMyYmZlZWMwNDRlMTM4NmQ1OWZjZDBiMGFlYWQ2YjJmODUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9tdG9vbHMvbXRvb2xzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbXRvb2xzLW1ha2VpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vLXgxMS5ncGx2My5wYXRjaCIKKworCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQteCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJic2RdID0gImFjX2N2X2xpYl9ic2RfbWFpbj15ZXMsYWNfY3ZfbGliX2JzZF9tYWluPW5vLGxpYmJzZCIKKworZG9faW5zdGFsbF9wcmVwZW5kICgpIHsKKyAgICAjIENyZWF0ZSBiaW5kaXIgdG8gZml4IHBhcmFsbGVsIGluc3RhbGxhdGlvbiBpc3N1ZXMKKyAgICBta2RpciAtcCAke0R9LyR7YmluZGlyfQorICAgIG1rZGlyIC1wICR7RH0vJHtkYXRhZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzI0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbmFzbS9uYXNtXzIuMTEuMDguYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJHZW5lcmFsLXB1cnBvc2UgeDg2IGFzc2VtYmxlciIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTkwOTA0NDg2ZjhmYmYxODYxY2Y0Mjc1MmUxYTM5ZWZlIgorQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKworCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmFzbS51cy9wdWIvbmFzbS9yZWxlYXNlYnVpbGRzLyR7UFZ9L25hc20tJHtQVn0udGFyLmJ6MiAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YWFlNWNiOGUwM2ZhYzQ4MDI5YzgyYTc0NzBhYjA2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGEzYTAyOTFhMGJkYzA2MzA1YjdiYTE5NGYxZTJjMmI1NWFlNmYxMTIxMGI0YWY0MzcyOTg2ODE0OWQ1NDQ1IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgLWYgJHtTfS9hY2xvY2FsLm00IF0gJiYgWyAhIC1mICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKwkJbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisJZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuMQorCisJb2VfcnVubWFrZSAnSU5TVEFMTFJPT1Q9JHtEfScgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvZml4LXJlZ2V4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQwYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDU1ZjZmZDhmMTk1OGFhMzY1ODRlZWZlZWNjZTc4MmE1MDU5NjNjODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBiZW52bSA8YmVudm1AeW93LWdtb2ZmYXR0LWx4Mi53cnMuY29tPgorRGF0ZTogV2VkLCA5IEphbiAyMDEzIDEyOjE0OjA2IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBNYWtlZmlsZSByZWd1bGFyIGV4cHJlc3Npb24KKworVGhpcyBwYXRjaCBtb2RpZmllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBNYWtlZmlsZSB0byBzdG9wIGJ1aWxkcworZnJvbSBmYWlsaW5nIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwYXRoIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzICIuYSIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBNYWtlZmlsZS5wcm9nLmluIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJvZy5pbiBiL01ha2VmaWxlLnByb2cuaW4KK2luZGV4IDc2MzEwYzkuLjQ0YzM1MzQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5wcm9nLmluCisrKysgYi9NYWtlZmlsZS5wcm9nLmluCitAQCAtMTIsNyArMTIsNyBAQCBMSU5LRkxBR1MgPSBATElOS0ZMQUdTQAorIAorIEFMTF9MSUJTID0gJChYTElCUykgJChMSUJTKQorIE1ha2VmaWxlLmx0OgorLQllY2hvICdMVF9MSUJTPSdgZWNobyAkKEFMTF9MSUJTKXxzZWQgJ3MvXC5hLy5sYS9nJ2AgPk1ha2VmaWxlLmx0CisrCWVjaG8gJ0xUX0xJQlM9J2BlY2hvICQoQUxMX0xJQlMpIHwgc2VkICdzL1wuYVxzL1wubGEgL2cnIHwgc2VkIHMvXC5hJCQvXC5sYS9gID4gTWFrZWZpbGUubHQKKyAKKyBQUk9HOj0kKHNoZWxsIGVjaG8gIiQoUFJPRykiIHwgc2VkICdAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAnKQorIAorLS0gCisxLjcuMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhiOWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgbGlidG9vbCBRQSBpc3N1ZXMgd2l0aCBXT1JLRElSIGNyZWVwaW5nIGluIHRvCitsaWJvc3Bncm92ZS5sYSBhbmQgbGlib3N0eWxlLmxhLiBQYXRjaCBvYnRhaW5lZCBmcm9tIE9wZW5FbWJlZGRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1dvcmthcm91bmQgaXMgc3BlY2lmaWMgdG8gb3VyIGJ1aWxkIHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9zcGdyb3ZlL01ha2VmaWxlLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvc3Bncm92ZS9NYWtlZmlsZS5zdWIKKysrKyBvcGVuamFkZS0xLjMuMi9zcGdyb3ZlL01ha2VmaWxlLnN1YgorQEAgLTEsOCArMSw4IEBACisgTFRWRVJTSU9OPTA6MTowCisgTElCPW9zcGdyb3ZlCisgSU5DTFVERT0tSSQoc3JjZGlyKS8uLi9ncm92ZQorLURFUExJQlM9LWxtIC1MJChUT1ApL2dyb3ZlIC1MJChUT1ApL2dyb3ZlLy5saWJzIFwKKy0JLUwkKFRPUCkvbGliIC1MJChUT1ApL2xpYi8ubGlicyBcCisrREVQTElCUz0tbG0gJChUT1ApL2dyb3ZlIFwKKysJJChUT1ApL2xpYiBcCisgCSQoTElCX1RIUkVBRFMpCisgT0JKUz1Hcm92ZUFwcC5vIEdyb3ZlQnVpbGRlci5vIFNkTm9kZS5vCisgR0VOU1JDUz1ncm92ZV9pbnN0LmN4eAorSW5kZXg6IG9wZW5qYWRlLTEuMy4yL3N0eWxlL01ha2VmaWxlLnN1YgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvc3R5bGUvTWFrZWZpbGUuc3ViCisrKysgb3BlbmphZGUtMS4zLjIvc3R5bGUvTWFrZWZpbGUuc3ViCitAQCAtMSw4ICsxLDggQEAKKyBMVFZFUlNJT049MDoxOjAKKyBMSUI9b3N0eWxlCistREVQTElCUz0tbG0gLUwkKFRPUCkvZ3JvdmUgLUwkKFRPUCkvZ3JvdmUvLmxpYnMgXAorLSAgLUwkKFRPUCkvbGliIC1MJChUT1ApL2xpYi8ubGlicyBcCistICAtTCQoVE9QKS9zcGdyb3ZlIC1MJChUT1ApL3NwZ3JvdmUvLmxpYnMgCisrREVQTElCUz0tbG0gJChUT1ApL2dyb3ZlIFwKKysgICQoVE9QKS9saWIgIFwKKysgICQoVE9QKS9zcGdyb3ZlCisgT0JKUz1MYW5nT2JqLm8gXAorICAgQ29sbGVjdG9yLm8gXAorICAgRHNzc2xBcHAubyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbXNnZ2VuLnBsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdmZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitjb21taXQgZmNjNWI5NGYxMTg0OTViMWE0NjdlZGNkYTZjNmY2MzE2OTFjM2Y2OQorQXV0aG9yOiBEZW5uaXMgTGFuIDxkZW5uaXMueXh1bkBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMyAwOToyNTo0MiAyMDEyICswODAwCisKKyAgICBvcGVuamFkZTogZml4IHVuZGVmaW5lZCBHZXRvcHRzIGVycm9yLCB1c2Ugc3RkIG5hbWVzcGFjZQorICAgIAorICAgIFVzaW5nIEdlbnRvbyBMaW51eCBhcyB0aGUgYnVpbGQgaG9zdCwgaXQgZmFpbHMgd2l0aG91dCB0aGlzIHBhdGNoCisgICAgVXNlIEdldG9wdDo6U3RkIGluIHBsYWNlIG9mIGdldG9wdHMucGwuCisgICAgCisgICAgVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtubyB1cHN0cmVhbV0KKyAgICBPcmlnaW5hbC1BdXRob3ItQnk6IE1pa2UgR2lsYmVydCA8ZmxvcHB5bUBnZW50b28ub3JnPgorICAgIFNpZ25lZC1vZmYtYnk6IERlbm5pcyBMYW4gPGRlbm5pcy55eHVuQGdtYWlsLmNvbT4KKworZGlmZiAtLWdpdCBhL21zZ2dlbi5wbCBiL21zZ2dlbi5wbAoraW5kZXggMGMzMzk2OC4uMmVlM2Y2NiAxMDA2NDQKKy0tLSBhL21zZ2dlbi5wbAorKysrIGIvbXNnZ2VuLnBsCitAQCAtNCw2ICs0LDcgQEAKKyAjIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCisgCisgdXNlIFBPU0lYOworK3VzZSBHZXRvcHQ6OlN0ZDsKKyAKKyAjIFBhY2thZ2UgYW5kIHZlcnNpb24uCisgJHBhY2thZ2UgPSAnb3BlbmphZGUnOworQEAgLTE4LDggKzE5LDcgQEAgJGdlbl9jID0gMDsKKyB1bmRlZiAkb3B0X2w7CisgdW5kZWYgJG9wdF9wOworIHVuZGVmICRvcHRfdDsKKy1kbyAnZ2V0b3B0cy5wbCc7CistJkdldG9wdHMoJ2w6cDp0OicpOworK2dldG9wdHMoJ2w6cDp0OicpOworICRtb2R1bGUgPSAkb3B0X2w7CisgJHBvdF9maWxlID0gJG9wdF9wOworIAorQEAgLTcyLDcgKzcyLDcgQEAgd2hpbGUgKDxERUY+KSB7CisgICAgIGVsc2UgeworIAkkZmllbGRbMF0gPX4gL15bSVdRWEVdWzAtOV0kLyB8fCAmZXJyb3IoImludmFsaWQgZmlyc3QgZmllbGQiKTs7CisgCSR0eXBlWyRudW1dID0gc3Vic3RyKCRmaWVsZFswXSwgMCwgMSk7CistCSRhcmdjID0gaW50KHN1YnN0cigkZmllbGRbMF0sIDEsIDEpKTsKKysJJGFyZ2MgPSBzdWJzdHIoJGZpZWxkWzBdLCAxLCAxKTsKKyAgICAgfQorICAgICAkbmFyZ3NbJG51bV0gPSAkYXJnYzsKKyAgICAgJGZpZWxkWzFdID1+IC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKyQvIHx8ICZlcnJvcigiaW52YWxpZCB0YWciKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3JlYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyM2E0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Vuc3VyZSB3ZSByZWF1dG9jb25mIHRoZSBwYWNrYWcKKworQ3VycmVudGx5IHNpbmNlIGNvbmZpZ3VyZS5pbiBpbiBpcyBpbiBhIHN1YmRpcmVjdG9yeSwgd2UgZG9uJ3QgcmVhdXRvY29uZiB0aGUgCityZWNpcGUuIFdlIHJlYWxseSBuZWVkIHRvIGRvIHRoaXMsIHRvIHVwZGF0ZSB0aGluZ3MgbGlrZSB0aGUgbGlidG9vbCBzY3JpcHQgdXNlZAorYW5kIGZpeCB2YXJpb3VzIGlzc3VlcyBzdWNoIGFzIHRob3NlIHRoYXQgY291bGQgY3JlZXAgaW4gaWYgYSByZWF1dG9jb25mIGlzIAordHJpZ2dlcmVkIGZvciBzb21lIHJlYXNvbi4gU2luY2UgdGhpcyBzb3VyY2Ugb25seSBjYWxscyBBTV9JTklUX0FVVE9NQUtFIHRvIAorZ2FpbiB0aGUgUEFDS0FHRSBhbmQgVkVSU0lPTiBkZWZpbml0aW9ucyBhbmQgdGhhdCBtYWNybyBub3cgZXJyb3JzIGlmIE1ha2VmaWxlLmFtIAorZG9lc24ndCBleGlzdCwgd2UgbmVlZCB0byBhZGQgdGhlc2UgZGVmaW5pdGlvbnMgbWFudWFsbHkuIAorCitUaGVzZSBjaGFuZ2VzIGF2b2lkIGZhaWx1cmVzIGxpa2U6IAorLS0tLSAKK3wgLi4uIAorfCBEc3NzbEFwcC5jeHg6MTE3OjM2OiBlcnJvcjogJ1BBQ0tBR0UnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZSAKK3wgRHNzc2xBcHAuY3h4OjExODozNjogZXJyb3I6ICdWRVJTSU9OJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUgCit8IG1ha2VbMl06ICoqKiBbRHNzc2xBcHAubG9dIEVycm9yIDEgLS0tLQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMi82LzEyCisKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuamFkZS0xLjMuMi9hY2luY2x1ZGUubTQJMjAxMi0wNi0xMiAxMjo0ODo1NC44NzEzNjUzNDQgKzAwMDAKK0BAIC0wLDAgKzEsMzkgQEAKKytkbmwgQ29uZmlndXJlLXRpbWUgc3dpdGNoIHdpdGggZGVmYXVsdAorK2RubAorK2RubCBFYWNoIHN3aXRjaCBkZWZpbmVzIGFuIC0tZW5hYmxlLUZPTyBhbmQgLS1kaXNhYmxlLUZPTyBvcHRpb24gaW4KKytkbmwgdGhlIHJlc3VsdGluZyBjb25maWd1cmUgc2NyaXB0LgorK2RubAorK2RubCBVc2FnZToKKytkbmwgc21yX1NXSVRDSChuYW1lLCBkZXNjcmlwdGlvbiwgZGVmYXVsdCwgcG9zLWRlZiwgbmVnLWRlZikKKytkbmwKKytkbmwgd2hlcmU6CisrZG5sCisrZG5sIG5hbWUgICAgICAgIG5hbWUgb2Ygc3dpdGNoOyBnZW5lcmF0ZXMgLS1lbmFibGUtbmFtZSAmIC0tZGlzYWJsZS1uYW1lCisrZG5sICAgICAgICAgICAgIG9wdGlvbnMKKytkbmwgZGVzY3JpcHRpb24gaGVscCBzdHJpbmcgaXMgc2V0IHRvIHRoaXMgcHJlZml4ZWQgYnkgImVuYWJsZSIgb3IKKytkbmwgICAgICAgICAgICAgImRpc2FibGUiLCB3aGljaGV2ZXIgaXMgdGhlIG5vbi1kZWZhdWx0IHZhbHVlCisrZG5sIGRlZmF1bHQgICAgIGVpdGhlciAib24iIG9yICJvZmYiOyBzcGVjaWZpZXMgZGVmYXVsdCBpZiBuZWl0aGVyCisrZG5sICAgICAgICAgICAgIC0tZW5hYmxlLW5hbWUgbm9yIC0tZGlzYWJsZS1uYW1lIGlzIHNwZWNpZmllZAorK2RubCBwb3MtZGVmICAgICBhIHN5bWJvbCB0byBBQ19ERUZJTkUgaWYgc3dpdGNoIGlzIG9uIChvcHRpb25hbCkKKytkbmwgbmVnLWRlZiAgICAgYSBzeW1ib2wgdG8gQUNfREVGSU5FIGlmIHN3aXRjaCBpcyBvZmYgKG9wdGlvbmFsKQorK2RubAorK0FDX0RFRlVOKHNtcl9TV0lUQ0gsIFsKKysgICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gZW5hYmxlICQyKQorKyAgICBBQ19BUkdfRU5BQkxFKAorKyAgICAgICAgJDEsCisrICAgICAgICBpZmVsc2UoJDMsIG9uLAorKyAgICAgICAgICAgIFsgIC0tZGlzYWJsZS1bJDFdICAgIGRpc2FibGUgWyQyXV0sCisrICAgICAgICAgICAgWyAgLS1lbmFibGUtWyQxXSAgICAgZW5hYmxlIFskMl1dKSwKKysgICAgICAgIFsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgICBpZmVsc2UoJDQsICwgLCBBQ19ERUZJTkUoJDQpKQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisrICAgICAgICAgICAgaWZlbHNlKCQ1LCAsICwgQUNfREVGSU5FKCQ1KSkKKysgICAgICAgIGZpIF0sCisrICAgICAgICBpZmVsc2UoJDMsIG9uLAorKyAgICAgICAgICAgWyBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgICAgICAgaWZlbHNlKCQ0LCAsICwgQUNfREVGSU5FKCQ0KSkgXSwKKysgICAgICAgICAgIFsgQUNfTVNHX1JFU1VMVChubykKKysgICAgICAgICAgICBpZmVsc2UoJDUsICwgLCBBQ19ERUZJTkUoJDUpKV0pKV0pCisrCitJbmRleDogb3BlbmphZGUtMS4zLjIvY29uZmlnL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5qYWRlLTEuMy4yLm9yaWcvY29uZmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTA2LTEyIDEyOjQ3OjIwLjczNTM2NTQ0NSArMDAwMAorKysrIG9wZW5qYWRlLTEuMy4yL2NvbmZpZy9jb25maWd1cmUuaW4JMjAxMi0wNi0xMiAxMjo0ODoxNy41MDczNjQwODAgKzAwMDAKK0BAIC0xMiw5ICsxMiwxMiBAQAorIGRubCAgQ3JlZGl0czogdGhpcyBhdXRvY29uZiBzY3JpcHQgd2FzIGxhcmdlbHkgImluc3BpcmVkIiA8Zz4gYnkgdGhlCisgZG5sICBhdXRvY29uZiBzY3JpcHQgYXJvdW5kIFNQIG1hZGUgYnkgSGVucnkgVGhvbXBzb24uCisgZG5sCistQUNfSU5JVChkc3NzbCkKKytBQ19JTklUKFtvcGVuamFkZV0sIFsxLjMuMl0pCisgQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQorLUFNX0lOSVRfQVVUT01BS0UoIG9wZW5qYWRlLCAxLjMuMikKKytBQ19TVUJTVChbUEFDS0FHRV0sIFtvcGVuamFkZV0pCisrQUNfU1VCU1QoW1ZFUlNJT05dLCBbMS4zLjJdKQorK0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiKQorK0FDX0RFRklORV9VTlFVT1RFRChWRVJTSU9OLCAiJFZFUlNJT04iKQorIFRPUD1gcHdkYAorIEFDX1NVQlNUKFRPUCkKKyBkbmwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi91c2VyLWRlY2xhcmVkLWRlZmF1bHQtY29uc3RydWN0b3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2FmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK0luIEdDQyA0LjYgdGhlIGNvbXBpbGVyIG5vIGxvbmdlciBhbGxvd3Mgb2JqZWN0cyBvZiBjb25zdC1xdWFsaWZpZWQgdHlwZSB0bworYmUgZGVmYXVsdCBpbml0aWFsaXplZCB1bmxlc3MgdGhlIHR5cGUgaGFzIGEgdXNlci1kZWNsYXJlZCBkZWZhdWx0Citjb25zdHJ1Y3Rvci4KKworUGF0Y2ggZnJvbSBHZW50b28gYnVnemlsbGE6IGh0dHA6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTM1ODAyMQorCitHZW50b28gQnVnemlsbGEgZGVzY3JpcHRpb24gZm9sbG93czoKKyJJZiBhIGNsYXNzIG9yIHN0cnVjdCBoYXMgbm8gdXNlci1kZWZpbmVkIGRlZmF1bHQgY29uc3RydWN0b3IsIEMrKyBkb2Vzbid0CithbGxvdyB5b3UgdG8gZGVmYXVsdCBjb25zdHJ1Y3QgYSBjb25zdCBpbnN0YW5jZSBvZiBpdC4KKworaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvMzU4MDIxCitodHRwOi8vY2xhbmcubGx2bS5vcmcvY29tcGF0aWJpbGl0eS5odG1sI2RlZmF1bHRfaW5pdF9jb25zdAoraHR0cDovL2djYy5nbnUub3JnL1BSNDQ0OTkiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGEvamFkZS9UZVhGT1RCdWlsZGVyLmN4eAorKysrIGIvamFkZS9UZVhGT1RCdWlsZGVyLmN4eAorQEAgLTg4LDYgKzg4LDggQEAgcHVibGljOgorICAgICAgIHZhbHVlLmNvbnZlcnRTdHJpbmcobmljXy5wbGFjZW1lbnQpOworICAgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBQYWdlRmxvYXRGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBQYWdlRmxvYXRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIFBhZ2VGbG9hdE5JQyBuaWNfOworICAgICBTdHJpbmdDIG5hbWVfOworQEAgLTEwMSw2ICsxMDMsOCBAQCBwdWJsaWM6CisgICAgICAgZm90Yi5lbmRQYWdlRm9vdG5vdGUoKTsKKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IFBhZ2VGb290bm90ZUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIFBhZ2VGb290bm90ZUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgIH07CisgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCistLS0gYS9qYWRlL1RyYW5zZm9ybUZPVEJ1aWxkZXIuY3h4CisrKysgYi9qYWRlL1RyYW5zZm9ybUZPVEJ1aWxkZXIuY3h4CitAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CisgICB9OworICAgY2xhc3MgRW50aXR5UmVmRmxvd09iaiA6IHB1YmxpYyBUcmFuc2Zvcm1FeHRlbnNpb25GbG93T2JqIHsKKyAgIHB1YmxpYzoKKysgICAgRW50aXR5UmVmRmxvd09iaigpIHt9CisgICAgIHZvaWQgYXRvbWljKFRyYW5zZm9ybUZPVEJ1aWxkZXIgJmZvdGIsIGNvbnN0IE5vZGVQdHIgJikgY29uc3QgeworICAgICAgIGZvdGIuZW50aXR5UmVmKG5hbWVfKTsKKyAgICAgfQorQEAgLTU2LDYgKzU3LDcgQEAgcHVibGljOgorICAgfTsKKyAgIGNsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkZsb3dPYmogOiBwdWJsaWMgVHJhbnNmb3JtRXh0ZW5zaW9uRmxvd09iaiB7CisgICBwdWJsaWM6CisrICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbkZsb3dPYmooKSB7fQorICAgICB2b2lkIGF0b21pYyhUcmFuc2Zvcm1GT1RCdWlsZGVyICZmb3RiLCBjb25zdCBOb2RlUHRyICYpIGNvbnN0IHsKKyAgICAgICBmb3RiLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihkYXRhXyk7CisgICAgIH0KK0BAIC05OCw2ICsxMDAsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRW1wdHlFbGVtZW50Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRW1wdHlFbGVtZW50Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBFbGVtZW50TklDIG5pY187CisgICB9OworQEAgLTEzMyw2ICsxMzcsOCBAQCBwdWJsaWM6CisgICAgICAgfQorICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRWxlbWVudEZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIEVsZW1lbnRGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIEVsZW1lbnROSUMgbmljXzsKKyAgIH07CitAQCAtMTUwLDYgKzE1Niw4IEBAIHB1YmxpYzoKKyAgICAgICB2YWx1ZS5jb252ZXJ0U3RyaW5nKHN5c3RlbUlkXyk7CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBFbnRpdHlGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBFbnRpdHlGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIFN0cmluZ0Mgc3lzdGVtSWRfOworICAgfTsKK0BAIC0xNzQsNiArMTgyLDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IERvY3VtZW50VHlwZUZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIERvY3VtZW50VHlwZUZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgRG9jdW1lbnRUeXBlTklDIG5pY187CisgICB9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLW5hdGl2ZV8xLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YWE2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIKQEAgLTAsMCArMSwxMDggQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBEU1NTTCBzdHlsZXNoZWV0cyBmb3IgU0dNTCBhbmQgWE1MIGRvY3VtZW50cyIKK0RFU0NSSVBUSU9OID0gIk9wZW5KYWRlIGlzIGEgc3VpdGUgb2YgdG9vbHMgZm9yIHZhbGlkYXRpbmcsIFwKK3Byb2Nlc3NpbmcsIGFuZCBhcHBseWluZyBEU1NTTCAoRG9jdW1lbnQgU3R5bGUgU2VtYW50aWNzIGFuZCBcCitTcGVjaWZpY2F0aW9uIExhbmd1YWdlKSBzdHlsZXNoZWV0cyB0byBTR01MIGFuZCBYTUwgZG9jdW1lbnRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY0MWZmMWU0NTExZjBhODcwNDRhZDQyZjg3Y2IxMDQ1IgorCitQUiA9ICJyNSIKKworREVQRU5EUyA9ICJvcGVuc3AtbmF0aXZlIHNnbWwtY29tbW9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInNnbWwtY29tbW9uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb3BlbmphZGUvb3BlbmphZGUtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21zZ2dlbi5wbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWF1dG9jb25mLnBhdGNoIFwKKwkgICBmaWxlOi8vdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1yZWdleC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkZjY5MmUzMTg2MTA5Y2MwMGRiNjgyNWI3NzcyMDFlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFkMmQ3OTk2Y2M5NGY5Yjg3ZDBjNTFjZjBlMDI4MDcwYWMxNzdjNDEyM2VjYmZkN2FjMWNiOGQwYjdkMzIyZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBuYXRpdmUKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNwaW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfS9PcGVuU1AgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNwbGliZGlyPSR7U1RBR0lOR19MSUJESVJ9IgorCisjIFdlIG5lZWQgdG8gc2V0IGRhdGFkaXIgZXhwbGljaXRseSwgYnV0IGFkZGluZyBpdCB0byBFWFRSQV9PRUNPTkYKKyMgcmVzdWx0cyBpbiBpdCBiZWluZyBzcGVjaWZpZWQgdHdpY2Ugd2hlbiBjb25maWd1cmUgaXMgcnVuLgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRhdGFkaXI9JHtkYXRhZGlyfScsICctLWRhdGFkaXI9JHtTVEFHSU5HX0RBVEFESVJ9L3NnbWwvb3BlbmphZGUtJHtQVn0nKX0iCisKKyMgQ09ORklHVVJFT1BUUyBoYXMgaGFyZCBjb2RlZCBwYXRocyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdCdzIHZhcmRlcHMKKyMgdGhlcmUgYXJlIG90aGVyIGJpdHMgaW4gdGhlcmUgdG9vIGJ1dCB0aGV5IGFyZSBwaWNrZWQgdXAgYnkgb3RoZXIgdmFyaWFibGUKKyMgZGVwZW5kZW5jaWVzIHNvIGl0IGFsbCB3b3JrcyBvdXQKK29lX3J1bmNvbmZbdmFyZGVwc2V4Y2x1ZGVdICs9ICJDT05GSUdVUkVPUFRTIgorCitDRkxBR1MgPSsgIi1JJHtTfS9pbmNsdWRlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfcG9zdGluc3QiCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gIm9wZW5qYWRlX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK0NMRUFORlVOQ1MgKz0gIm9wZW5qYWRlX3NzdGF0ZV9jbGVhbiIKKworIyBjb25maWd1cmUuaW4gbmVlZHMgdG8gYmUgcmVsb2FjdGVkIHRvIHRyaWdnZXIgcmVhdXRvY29uZgorZG9fZXh0cmF1bnBhY2sgKCkgeworCWNwICR7U30vY29uZmlnL2NvbmZpZ3VyZS5pbiAke1N9LworfQorYWRkdGFzayBleHRyYXVucGFjayBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29uZmlndXJlCisKKyMgV2UgbmVlZCB0byBkbyB0aGlzIGVsc2UgdGhlIHNvdXJjZSBpbnRlcmRlcGVuZGVuY2llcyBhcmVuJ3QgZ2VuZXJhdGVkIGFuZAorIyBidWlsZCBmYWlsdXJlcyBjYW4gcmVzdWx0IChlLmcuIHplcm8gc2l6ZSBzdHlsZS9NYWtlZmlsZS5kZXAgZmlsZSkKK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJb2VfcnVubWFrZSBkZXBlbmQKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvb3BlbmphZGUuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2phZGUvLmxpYnMvb3BlbmphZGUgJHtEfSR7YmluZGlyfS9vcGVuamFkZQorCWxuIC1zZiBvcGVuamFkZSAke0R9JHtiaW5kaXJ9L2phZGUKKworCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIHN0eWxlIGxpYm9zdHlsZSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgc3Bncm92ZSBsaWJvc3Bncm92ZSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtYSAtc28gLUMgZ3JvdmUgbGlib2dyb3ZlICR7RH0ke2xpYmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsL2NhdGFsb2cgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsLyouZHRkICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC8qLmRzbCAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvKi5zZ20gJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCisJaW5zdGFsbCAtZCAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC9jYXRhbG9nICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS9jYXRhbG9nCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS9jYXRhbG9nIiA+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS5jYXQKK30KKworb3BlbmphZGVfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0CisJZmkKK30KKworb3BlbmphZGVfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1vcGVuamFkZQorfQorCitvcGVuamFkZV9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL29wZW5qYWRlLSR7UFZ9LmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjIxOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3AtMS41LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzU5OTI5MSZncm91cF9pZD0yMTE1JmF0aWQ9MTAyMTE1XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4KKy0tLSBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluCTIwMDUtMTItMjMgMTY6MTU6MjEuMDAwMDAwMDAwICswMjAwCisrKysgT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTAzIDA5OjA0OjUxLjkyMjY0NTY4OSArMDIwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBTV9JTklUX0FVVE9NQUtFKE9wZW5TUCwgMS41LjIsIG5vLWRlZmluZSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyBBQ19QUkVSRVEoMi41MykKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorIEFNX1NBTklUWV9DSEVDSworCisgZG5sIEF1dG9oZWFkZXIgZGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5zcC9vcGVuc3BfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMTE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiQW4gU0dNTCBwYXJzZXIiCitERVNDUklQVElPTiA9ICJBbiBTR01MIHBhcnNlciB1c2VkIGJ5IHRoZSBPcGVuSmFkZSBzdWl0ZSBvZiB1dGlsaXRpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5qYWRlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjQxZmYxZTQ1MTFmMGE4NzA0NGFkNDJmODdjYjEwNDUiCisKK1BSID0gInIxIgorCisjIEF0IC1PcyBpdCBlbmNvdW50ZXJzIGNhbGxzIHRvIHNvbWUgaW5saW5lIGZ1bmN0aW9ucyB3aGljaCBhcmUgdGhlbgorIyBub3QgZm91bmQgaW4gYW55IG90aGVyIG9iamVjdHMgd2l0aCBnY2MgNC41CitGVUxMX09QVElNSVpBVElPTiArPSAiLU8yIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9vcGVuamFkZS9PcGVuU1AtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NzBiMjIzYzVkMTJjZWU0MGM5MTM3YmU4NmI2YzM5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1N2Y0ODk4NDk4YTM2ODkxOGIwZDQ5YzgyNmFhNDM0YmI1YjcwM2QyYzNiMTY5YmViMzQ4MDE2YWIyNTYxN2NlIgorCitTID0gIiR7V09SS0RJUn0vT3BlblNQLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jLWJ1aWxkIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIlwKKwktLWRpc2FibGUtZG9jLWJ1aWxkIFwKKwktLWVuYWJsZS1kZWZhdWx0LWNhdGFsb2c9JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cgXAorCS0tZW5hYmxlLWRlZmF1bHQtc2VhcmNoLXBhdGg9JHtkYXRhZGlyfS9zZ21sIFwKKwkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU2V0IHVwIHN5bWxpbmtzIHRvIG9mdGVuLXVzZWQgYWx0ZXJuYXRlIG5hbWVzLiBTZWUKKwkjIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvb3BlbnNwLmh0bWwKKwljZCAke0R9JHtsaWJkaXJ9CisJbG4gLXNmIGxpYm9zcC5zbyBsaWJzcC5zbworCisJY2QgJHtEfSR7YmluZGlyfQorCWZvciB1dGlsIGluIG5zZ21scyBzZ21sbm9ybSBzcGFtIHNwY2F0IHNwZW50IHN4OyBkbworCQlsbiAtc2YgbyR1dGlsICR1dGlsCQorCWRvbmUKKwlsbiAtc2Ygb3N4IHNnbWwyeG1sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlmb3IgdXRpbCBpbiBuc2dtbHMgc2dtbG5vcm0gc3BhbSBzcGNhdCBzcGVudCBzeDsgZG8KKwkJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS8kdXRpbCBcCisJCSAgICAtRCAke3N5c2NvbmZkaXJ9L3NnbWwKKwlkb25lCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L09wZW5TUC8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGRiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorSWYgYSB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3MgZGVjcmVhc2VzIG9yIGluY3JlYXNlcyB3aGlsZSBjcmVhdGluZwordGhlIHRhciBmaWxlcyB1c2VkIGZvciBhbiBpcGsgcGFja2FnZSwgdGFyIGZhaWxzIHdpdGggZXJyb3IgY29kZSAxOgorCit8IERFQlVHOiBFeGVjdXRpbmcgcHl0aG9uIGZ1bmN0aW9uIGRvX3BhY2thZ2VfaXBrCit8IHRhcjogLi91c3Ivc3JjL2RlYnVnL2dwZXJmLzMuMC40LXIwL2dwZXJmLTMuMC40L3NyYy9tYWluLmNjOiBmaWxlIGNoYW5nZWQgYXMgd2UgcmVhZCBpdAorTk9URTogcmVjaXBlIGdwZXJmLTMuMC40LXIwOiB0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrOiBGYWlsZWQKK0VSUk9SOiBUYXNrIDY1MzkgKHJlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjQuYmIsIGRvX3BhY2thZ2Vfd3JpdGVfaXBrKSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJzEnCisKKworV2UgZGV0ZWN0IGlmIHRoZSBlcnJvciBjb2RlIHByb2R1Y2VkIGJ5IHRhciBpcyAxIGFuZCBpbiB0aGlzIGNhc2UgaWdub3JlIGl0LgorCitUaGlzIGEgc2ltaWxhciBiZWhhdmlvciB0byB0aGUgb25lIG9uIGRwa2c6CitodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wb2t5L2NvbW1pdC8/aWQ9NDA3MzE5NDI1MTVlYzhkODBjNzI3YWQ1NjExNzQ5ODZkNGYwNTgxOAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGdpdC9vcGtnLWJ1aWxkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvb3BrZy1idWlsZAorKysrIGdpdC9vcGtnLWJ1aWxkCitAQCAtMjUwLDggKzI1MCwyMSBAQCB0bXBfZGlyPSRkZXN0X2Rpci9JUEtHX0JVSUxELiQkCisgbWtkaXIgJHRtcF9kaXIKKyAKKyBlY2hvICRDT05UUk9MID4gJHRtcF9kaXIvdGFyWAorLSggY2QgJHBrZ19kaXIgJiYgdGFyICRvZ2FyZ3MgLVggJHRtcF9kaXIvdGFyWCAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9kYXRhLnRhci5neiAuICkKKy0oIGNkICRwa2dfZGlyLyRDT05UUk9MICYmIHRhciAkb2dhcmdzIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2NvbnRyb2wudGFyLmd6IC4gKQorKworKworKyMgSWdub3JlIGVycm9yIGNvZGUgMSwgY2F1c2VkIGJ5IG1vZGlmeWluZyB0aGUgbnVtYmVyIG9mIGhhcmQgbGlua3Mgd2hpbGUgY3JlYXRpbmcgdGhlIHRhciBmaWxlCisrcmM9MAorKyggY2QgJHBrZ19kaXIgJiYgdGFyICRvZ2FyZ3MgLVggJHRtcF9kaXIvdGFyWCAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9kYXRhLnRhci5neiAuICkgfHwgcmM9JD8KKytpZiBbICRyYyAtbmUgMSBdICYmIFsgJHJjIC1uZSAwIF07IHRoZW4KKysgICAgICAgIGV4aXQgJHJjIAorK2ZpCisrCisrcmM9MAorKyggY2QgJHBrZ19kaXIvJENPTlRST0wgJiYgdGFyICRvZ2FyZ3MgLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvY29udHJvbC50YXIuZ3ogLiApIHx8IHJjPSQ/CisraWYgWyAkcmMgLW5lIDEgXSAmJiBbICRyYyAtbmUgMCBdOyB0aGVuCisrICAgICAgICBleGl0ICRyYworK2ZpCisrCisgcm0gJHRtcF9kaXIvdGFyWAorIAorIGVjaG8gIjIuMCIgPiAkdG1wX2Rpci9kZWJpYW4tYmluYXJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTE4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkFkZGl0aW9uYWwgdXRpbGl0aWVzIGZvciB0aGUgb3BrZyBwYWNrYWdlIG1hbmFnZXIiCitTVU1NQVJZX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJVdGlsaXR5IGZvciBtYW5hZ2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3BrZy5weTtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT0xNTkxNzQ5MWFkNmJmN2FjYzY2NmNhNWY3Y2MxZTA4MyIKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1NSQ1JFViA9ICI1MzI3NGYwODc1NjVmZDQ1ZDg0NTJjNTM2Nzk5N2JhNmE2ODJhMzdhIgorUFYgPSAiMC4xLjgrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vdGFyX2lnbm9yZV9lcnJvci5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK1BZVEhPTlJERVBTID0gInB5dGhvbiBweXRob24tc2hlbGwgcHl0aG9uLWlvIHB5dGhvbi1tYXRoIHB5dGhvbi1jcnlwdCBweXRob24tbG9nZ2luZyBweXRob24tZmNudGwgcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXBpY2tsZSBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLXRleHR1dGlscyBweXRob24tc3RyaW5nb2xkIgorUFlUSE9OUkRFUFNfY2xhc3MtbmF0aXZlID0gIiIKKworUEFDS0FHRUNPTkZJRyA9ICJweXRob24iCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLCwsJHtQWVRIT05SREVQU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKwlzZWQgLWkgJHtEfSR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIC1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnOyBzLC91c3IvbGliLCR7bGliZGlyfSxnJworfQorCitQQUNLQUdFUyA9KyAidXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnIgorRklMRVNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gIiR7YmluZGlyfS91cGRhdGUtYWx0ZXJuYXRpdmVzIgorUlBST1ZJREVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorUlJFUExBQ0VTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKK1JDT05GTElDVFNfdXBkYXRlLWFsdGVybmF0aXZlcy1vcGtnID0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtY3dvcnRoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2ctYXJjaC1jb25maWdfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTNkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIkFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgY29uZmlndXJhdGlvbiBmb3Igb3BrZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKKwlta2RpciAtcCAke1N9LyR7c3lzY29uZmRpcn0vb3BrZy8KKworCWFyY2hjb25mPSR7U30vJHtzeXNjb25mZGlyfS9vcGtnL2FyY2guY29uZgorCisJcm0gLWYgJGFyY2hjb25mCisJaXBrZ2FyY2hzPSIke0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTfSIKKwlwcmlvcml0eT0xCisJZm9yIGFyY2ggaW4gJGlwa2dhcmNoczsgZG8gCisJCWVjaG8gImFyY2ggJGFyY2ggJHByaW9yaXR5IiA+PiAkYXJjaGNvbmYKKwkJcHJpb3JpdHk9JChleHByICRwcmlvcml0eSArIDUpCisJZG9uZQorfQorCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vb3BrZworCWluc3RhbGwgLW0gMDY0NCAgJHtTfS8ke3N5c2NvbmZkaXJ9L29wa2cvKiAke0R9JHtzeXNjb25mZGlyfS9vcGtnLworfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L29wa2cvICIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L29wa2cvYXJjaC5jb25mIgorCitSUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKK1JDT05GTElDVFNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKK1JQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbmZpZy1iYXNlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWtleXJpbmdzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ2YWJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJLZXlyaW5ncyBmb3IgdmVyaWZ5aW5nIG9wa2cgcGFja2FnZXMgYW5kIGZlZWRzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworIyBEaXN0cm8tc3BlY2lmaWMga2V5cyBjYW4gYmUgYWRkZWQgdG8gdGhpcyBwYWNrYWdlIGluIHR3byB3YXlzOgorIworIyAgIDEpIEluIGEgLmJiYXBwZW5kLCBhZGQgLmdwZyBhbmQvb3IgLmFzYyBmaWxlcyB0byBTUkNfVVJJIGFuZCBpbnN0YWxsIHRoZW0gdG8KKyMgICAgICAke0R9JHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzLyBpbiBhIGRvX2luc3RhbGxfYXBwZW5kIGZ1bmN0aW9uLiBUaGVzZQorIyAgICAgIGZpbGVzIHNob3VsZCBub3QgYmUgbmFtZWQgJ2tleS0kbmFtZS5ncGcnIHRvIGVuc3VyZSB0aGV5IGRvbid0IGNvbmZsaWN0CisjICAgICAgd2l0aCBrZXlzIGV4cG9ydGVkIGFzIHBlciAoMikuCisjCisjICAgMikgSW4gYSAuYmJhcHBlbmQsIGRpc3RybyBjb25maWcgb3IgbG9jYWwuY29uZiwgb3ZlcnJpZGUgdGhlIHZhcmlhYmxlCisjICAgICAgT1BLR19LRVlSSU5HX0tFWVMgdG8gY29udGFpbiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGtleSBuYW1lcy4gRm9yCisjICAgICAgZWFjaCBuYW1lLCAnZ3BnIC0tZXhwb3J0ICRuYW1lJyB3aWxsIGJlIHJhbiB0byBleHBvcnQgdGhlIHB1YmxpYyBrZXkgdG8gYQorIyAgICAgIGZpbGUgbmFtZWQgJ2tleS0kbmFtZS5ncGcnLiBUaGUgcHVibGljIGtleSBtdXN0IHRoZXJlZm9yZSBiZSBpbiB0aGUgZ3BnCisjICAgICAga2V5cmluZ3Mgb24gdGhlIGJ1aWxkIG1hY2hpbmUuCisKK09QS0dfS0VZUklOR19LRVlTID89ICIiCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZm9yIG5hbWUgaW4gJHtPUEtHX0tFWVJJTkdfS0VZU307IGRvCisgICAgICAgIGdwZyAtLWV4cG9ydCAke25hbWV9ID4gJHtCfS9rZXktJHtuYW1lfS5ncGcKKyAgICBkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncy8KKyAgICBmb3IgbmFtZSBpbiAke09QS0dfS0VZUklOR19LRVlTfTsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7Qn0va2V5LSR7bmFtZX0uZ3BnICR7RH0ke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MvCisgICAgZG9uZQorfQorCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MiCisKKyMgV2UgbmVlZCAnb3BrZy1rZXknIHRvIHJ1biB0aGUgcG9zdGluc3Qgc2NyaXB0CitSREVQRU5EU18ke1BOfSA9ICJvcGtnIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworIyEgL2Jpbi9zaAorc2V0IC1lCisKK2lmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICMgT24gdGFyZ2V0CisgICAgb3BrZy1rZXkgcG9wdWxhdGUKK2Vsc2UKKyAgICBleGl0IDEKK2ZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLzAwMDEtb3BrZ19hcmNoaXZlLWFkZC1zdXBwb3J0LWZvci1lbXB0eS1jb21wcmVzc2VkLWZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGJkMzJiYjg2NDY0NTk1MDhiYjBiMGNlNTRhMTRiZDZmZTBlMTliNzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGVqYW5kcm8gZGVsIENhc3RpbGxvIDxhbGVqYW5kcm8uZGVsY2FzdGlsbG9AbmkuY29tPgorRGF0ZTogVGh1LCAyNyBBdWcgMjAxNSAxNTo1MjoxNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBvcGtnX2FyY2hpdmU6IGFkZCBzdXBwb3J0IGZvciBlbXB0eSBjb21wcmVzc2VkIGZpbGVzCisKK1JlZ3Jlc3Npb24gZnJvbSAwLjIueDogb3BrZyB1c2VkIHRvIHN1cHBvcnQgZW1wdHkgUGFja2FnZS5neiBmaWxlcy4KKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorLS0tCisgbGlib3BrZy9vcGtnX2FyY2hpdmUuYyB8IDE1ICsrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX2FyY2hpdmUuYyBiL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMKK2luZGV4IGJlOTAzZTQuLjdlOTFlNDggMTAwNjQ0CistLS0gYS9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCisrKysgYi9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCitAQCAtMTIxLDYgKzEyMSw5IEBAIHN0YXRpYyBpbnQgY29weV90b19zdHJlYW0oc3RydWN0IGFyY2hpdmUgKmEsIEZJTEUgKiBzdHJlYW0pCisgICAgIGludCBlb2Y7CisgICAgIHNpemVfdCBsZW4gPSBFWFRSQUNUX0JVRkZFUl9MRU47CisgCisrICAgIGlmIChhcmNoaXZlX2Zvcm1hdChhKSA9PSBBUkNISVZFX0ZPUk1BVF9FTVBUWSkKKysgICAgICAgIHJldHVybiAwOworKworICAgICBidWZmZXIgPSB4bWFsbG9jKGxlbik7CisgCisgICAgIHdoaWxlICgxKSB7CitAQCAtNjU0LDYgKzY1NywxMyBAQCBzdGF0aWMgc3RydWN0IGFyY2hpdmUgKm9wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKyAgICAgfQorIAorKyAgICByID0gYXJjaGl2ZV9yZWFkX3N1cHBvcnRfZm9ybWF0X2VtcHR5KGFyKTsKKysgICAgaWYgKHIgIT0gQVJDSElWRV9PSykgeworKyAgICAgICAgb3BrZ19tc2coRVJST1IsICJFbXB0eSBmb3JtYXQgbm90IHN1cHBvcnRlZDogJXNcbiIsCisrICAgICAgICAgICAgICAgICBhcmNoaXZlX2Vycm9yX3N0cmluZyhhcikpOworKyAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKysgICAgfQorKworICAgICAvKiBPcGVuIGlucHV0IGZpbGUgYW5kIHByZXBhcmUgZm9yIHJlYWRpbmcuICovCisgICAgIHIgPSBhcmNoaXZlX3JlYWRfb3Blbl9maWxlbmFtZShhciwgZmlsZW5hbWUsIEVYVFJBQ1RfQlVGRkVSX0xFTik7CisgICAgIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKK0BAIC03MjMsNiArNzMzLDcgQEAgc3RydWN0IG9wa2dfYXIgKmFyX29wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorIHsKKyAgICAgc3RydWN0IG9wa2dfYXIgKmFyOworICAgICBzdHJ1Y3QgYXJjaGl2ZV9lbnRyeSAqZW50cnk7CisrICAgIGludCBlb2Y7CisgCisgICAgIGFyID0gKHN0cnVjdCBvcGtnX2FyICopeG1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa2dfYXIpKTsKKyAKK0BAIC03MzcsOCArNzQ4LDggQEAgc3RydWN0IG9wa2dfYXIgKmFyX29wZW5fY29tcHJlc3NlZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorICAgICAgKiBoZWFkZXIuIFdlIHNraXAgb3ZlciB0aGlzIGhlYWRlciBoZXJlIHNvIHRoYXQgdGhlIGNhbGxlciBkb2Vzbid0IG5lZWQKKyAgICAgICogdG8ga25vdyBhYm91dCBpdC4KKyAgICAgICovCistICAgIGVudHJ5ID0gcmVhZF9oZWFkZXIoYXItPmFyLCBOVUxMKTsKKy0gICAgaWYgKCFlbnRyeSkKKysgICAgZW50cnkgPSByZWFkX2hlYWRlcihhci0+YXIsICZlb2YpOworKyAgICBpZiAoIWVudHJ5ICYmICFlb2YpCisgICAgICAgICBnb3RvIGVycl9jbGVhbnVwOworIAorICAgICByZXR1cm4gYXI7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTc0MDI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCkBAIC0wLDAgKzEsMTcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BrZyBmaXJzdCBib290IGNvbmZpZ3VyZQorRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9c3lzdGVtZC1yZW1vdW50LWZzLnNlcnZpY2Ugc3lzdGVtZC10bXBmaWxlcy1zZXR1cC5zZXJ2aWNlIHRtcC5tb3VudAorQmVmb3JlPXN5c2luaXQudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L3Bvc3RpbnN0CitFeGVjU3RhcnQ9LUBCQVNFX0JJTkRJUkAvc2ggLWMgIiBpZiBbICRQT1NUSU5TVF9MT0dHSU5HID0gJzEnIF07IHRoZW4gQEJJTkRJUkAvb3BrZyBjb25maWd1cmUgPiAkTE9HRklMRSAyPiYxOyBlbHNlIEBCSU5ESVJAL29wa2cgY29uZmlndXJlOyBmaSIKK0V4ZWNTdGFydFBvc3Q9QEJBU0VfQklORElSQC9zeXN0ZW1jdGwgZGlzYWJsZSBvcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlCitTdGFuZGFyZE91dHB1dD1zeXNsb2cKK1JlbWFpbkFmdGVyRXhpdD1ObworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWJhc2ljLnRhcmdldAorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy9vcGtnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJlOWU5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mCkBAIC0wLDAgKzEsMjggQEAKKyMgTXVzdCBoYXZlIG9uZSBvciBtb3JlIHNvdXJjZSBlbnRyaWVzIG9mIHRoZSBmb3JtOgorIworIyAgIHNyYyA8c3JjLW5hbWU+IDxzb3VyY2UtdXJsPgorIworIyBhbmQgb25lIG9yIG1vcmUgZGVzdGluYXRpb24gZW50cmllcyBvZiB0aGUgZm9ybToKKyMKKyMgICBkZXN0IDxkZXN0LW5hbWU+IDx0YXJnZXQtcGF0aD4KKyMKKyMgd2hlcmUgPHNyYy1uYW1lPiBhbmQgPGRlc3QtbmFtZXM+IGFyZSBpZGVudGlmaWVycyB0aGF0CisjIHNob3VsZCBtYXRjaCBbYS16QS1aMC05Ll8tXSssIDxzb3VyY2UtdXJsPiBzaG91bGQgYmUgYQorIyBVUkwgdGhhdCBwb2ludHMgdG8gYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIEZhbWlsaWFyCisjIFBhY2thZ2VzIGZpbGUsIGFuZCA8dGFyZ2V0LXBhdGg+IHNob3VsZCBiZSBhIGRpcmVjdG9yeQorIyB0aGF0IGV4aXN0cyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4KKworIyBQcm94eSBTdXBwb3J0Cisjb3B0aW9uIGh0dHBfcHJveHkgaHR0cDovL3Byb3h5LnRsZDozMTI4Cisjb3B0aW9uIGZ0cF9wcm94eSBodHRwOi8vcHJveHkudGxkOjMxMjgKKyNvcHRpb24gcHJveHlfdXNlcm5hbWUgPHVzZXJuYW1lPgorI29wdGlvbiBwcm94eV9wYXNzd29yZCA8cGFzc3dvcmQ+CisKKyMgRW5hYmxlIEdQR01FIHNpZ25hdHVyZQorIyBvcHRpb24gY2hlY2tfc2lnbmF0dXJlIDEKKworIyBPZmZsaW5lIG1vZGUgKGZvciB1c2UgaW4gY29uc3RydWN0aW5nIGZsYXNoIGltYWdlcyBvZmZsaW5lKQorI29wdGlvbiBvZmZsaW5lX3Jvb3QgdGFyZ2V0CisKKyMgRGVmYXVsdCBkZXN0aW5hdGlvbiBmb3IgaW5zdGFsbGVkIHBhY2thZ2VzCitkZXN0IHJvb3QgLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZ18wLjMuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYmIyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIKQEAgLTAsMCArMSw3MiBAQAorU1VNTUFSWSA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciIKK1NVTU1BUllfbGlib3BrZyA9ICJPcGVuIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJ5IgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy9pc3N1ZXMvbGlzdCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL29wa2cuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTIxO21kNT05MDQzNWE1MTljNmVhNjllZjIyZTRhODhiY2M1MmZhMCIKKworREVQRU5EUyA9ICJsaWJhcmNoaXZlIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNDEyY2RjNzFkNzhiOThmYWNjODRiMTkzMzFlYzY0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZjczNWQxY2RiOGVmMzcxOGZiMGY5ZmJhNDRjYTBkOWE1YzkwZDNhN2YwMTRmMzdhNmQyZjk0NzRmNTQ5ODhmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAib3BrZy1jb25maWd1cmUuc2VydmljZSIKKwordGFyZ2V0X2xvY2Fsc3RhdGVkaXIgOj0gIiR7bG9jYWxzdGF0ZWRpcn0iCitPUEtHTElCRElSID0gIiR7dGFyZ2V0X2xvY2Fsc3RhdGVkaXJ9L2xpYiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKworUEFDS0FHRUNPTkZJR1tncGddID0gIi0tZW5hYmxlLWdwZywtLWRpc2FibGUtZ3BnLGdwZ21lIGxpYmdwZy1lcnJvcixnbnVwZyIKK1BBQ0tBR0VDT05GSUdbY3VybF0gPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxjdXJsIgorUEFDS0FHRUNPTkZJR1tzc2wtY3VybF0gPSAiLS1lbmFibGUtc3NsLWN1cmwsLS1kaXNhYmxlLXNzbC1jdXJsLGN1cmwgb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS1lbmFibGUtb3BlbnNzbCwtLWRpc2FibGUtb3BlbnNzbCxvcGVuc3NsIgorUEFDS0FHRUNPTkZJR1tzaGEyNTZdID0gIi0tZW5hYmxlLXNoYTI1NiwtLWRpc2FibGUtc2hhMjU2IgorUEFDS0FHRUNPTkZJR1twYXRoZmluZGVyXSA9ICItLWVuYWJsZS1wYXRoZmluZGVyLC0tZGlzYWJsZS1wYXRoZmluZGVyLHBhdGhmaW5kZXIiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKwllY2hvICJvcHRpb24gbGlzdHNfZGlyICR7T1BLR0xJQkRJUn0vb3BrZy9saXN0cyIgPj4ke0R9JHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZgorCisJIyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkKKwlpbnN0YWxsIC1kICR7RH0ke09QS0dMSUJESVJ9L29wa2cKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07dGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAorCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vb3BrZy1jb25maWd1cmUuc2VydmljZQorCWZpCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7VklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXN9IG9wa2ctYXJjaC1jb25maWcgcnVuLXBvc3RpbnN0cyBsaWJhcmNoaXZlIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSUkVQTEFDRVNfJHtQTn0gPSAib3BrZy1ub2dwZyBvcGtnLWNvbGxhdGVyYWwiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm9wa2ctY29sbGF0ZXJhbCIKK1JQUk9WSURFU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCisKK1BBQ0tBR0VTID0rICJsaWJvcGtnIgorCitGSUxFU19saWJvcGtnID0gIiR7bGliZGlyfS8qLnNvLiogJHtPUEtHTElCRElSfS9vcGtnLyIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9vcGtnL29wa2cuY29uZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI1N2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29yYy9vcmNfMC40LjIzLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiT3B0aW1pc2VkIElubmVyIExvb3AgUnVudGltZSBDb21waWxlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmVudHJvcHl3YXZlLmNvbS9wcm9qZWN0cy9vcmMvIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UgJiBCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xNDAwYmQ5ZDA5ZThhZjU2YjllYzk4MmIzZDg1Nzk3ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvb3JjL29yYy0ke1BWfS50YXIueHo7bmFtZT1vcmMiCitTUkNfVVJJW29yYy5tZDVzdW1dID0gIjcyZTA2MTJhY2U1NGQ3N2FhMmY3YTAwNjM0OGVlODFhIgorU1JDX1VSSVtvcmMuc2hhMjU2c3VtXSA9ICI3NjdlYWViY2UyOTQxNzM3YjQzMzY4MjI1ZWM1NDU5OGIzMDU1Y2E3OGI0ZGM1MGM0MDkyZjVmY2RjMGJkZmU3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQQUNLQUdFUyA9KyAib3JjLWV4YW1wbGVzIgorRklMRVNfb3JjLWV4YW1wbGVzID0gIiR7bGliZGlyfS9vcmMvKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnXmxpYiguKilcLnNvXC4qJywgJ2xpYiVzJywgJ09SQyAlcyBsaWJyYXJ5JywgZXh0cmFfZGVwZW5kcz0nJywgYWxsb3dfbGlua3M9VHJ1ZSkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgc2VkIC1pIC1lICdzIy90bXAjLiNnJyAke1N9L29yYy9vcmNjb2RlbWVtLmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY3YzUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoCkBAIC0wLDAgKzEsMTE5IEBACitGcm9tOiBQaW90ciBSb3N6YXR5Y2tpIDxkZXh0ZXJAZGViaWFuLm9yZz4KK0RhdGU6IFdlZCwgMjcgSmFuIDIwMTAgMTY6NTM6MTEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hhbmdlIGxpYnJhcnkgbmFtZQorCitUaGUgc29uYW1lIHdhcyBjaGFuZ2VkIHRvIG9zc3AtdXVpZCB0byBwcmV2ZW5kIHRoZSBuYW1lIGNsYXNoIHdpdGggZTJmc3Byb2dzJ3MKK3V1aWQgbGlicmFyeS4KKy0tLQorIE1ha2VmaWxlLmluICAgICAgfCAgICA2ICsrKy0tLQorIHBlcmwvTWFrZWZpbGUuUEwgfCAgIDEyICsrKysrKy0tLS0tLQorIHBocC9jb25maWcubTQgICAgfCAgICAyICstCisgdXVpZC1jb25maWcuaW4gICB8ICAgIDIgKy0KKyB1dWlkLnBjLmluICAgICAgIHwgICAgNCArKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZDI4ZjRiZS4uYzJiYTk5ZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTYyLDEzICs2MiwxMyBAQCBQRVJMICAgICAgICA9IEBQRVJMQAorIFBIUCAgICAgICAgID0gQFBIUEAKKyBQR19DT05GSUcgICA9IEBQR19DT05GSUdACisgCistTElCX05BTUUgICAgPSBsaWJ1dWlkLmxhCisrTElCX05BTUUgICAgPSBsaWJvc3NwLXV1aWQubGEKKyBMSUJfT0JKUyAgICA9IHV1aWQubG8gdXVpZF9tZDUubG8gdXVpZF9zaGExLmxvIHV1aWRfcHJuZy5sbyB1dWlkX21hYy5sbyB1dWlkX3RpbWUubG8gdXVpZF91aTY0LmxvIHV1aWRfdWkxMjgubG8gdXVpZF9zdHIubG8KKyAKKy1EQ0VfTkFNRSAgICA9IGxpYnV1aWRfZGNlLmxhCisrRENFX05BTUUgICAgPSBsaWJvc3NwLXV1aWRfZGNlLmxhCisgRENFX09CSlMgICAgPSB1dWlkX2RjZS5sbyAkKExJQl9PQkpTKQorIAorLUNYWF9OQU1FICAgID0gbGlidXVpZCsrLmxhCisrQ1hYX05BTUUgICAgPSBsaWJvc3NwLXV1aWQrKy5sYQorIENYWF9PQkpTICAgID0gdXVpZCsrLmxvICQoTElCX09CSlMpCisgCisgUFJHX05BTUUgICAgPSB1dWlkCitkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5QTCBiL3BlcmwvTWFrZWZpbGUuUEwKK2luZGV4IDkyZjQ0OTQuLjljNmZlZTYgMTAwNjQ0CistLS0gYS9wZXJsL01ha2VmaWxlLlBMCisrKysgYi9wZXJsL01ha2VmaWxlLlBMCitAQCAtMzMsOSArMzMsOSBAQCB1c2UgQ29uZmlnOworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIAorICMgICBkZXRlcm1pbmUgc291cmNlIGRpcmVjdG9yeQorLW15ICgkc3JjZGlyKSA9IG1hcCB7IG15ICRkID0gJF87ICRkID1+IHMvXC9saWJ1dWlkXC5sYSQvLzsgJGQgfQorLSAgICAgICAgICAgICAgIGdyZXAgeyAtZiAkXyB9ICgiLi4vbGlidXVpZC5sYSIsIGdsb2IoIi4uLyovbGlidXVpZC5sYSIpKQorLSAgICBvciBkaWUgIm5vIHNvdXJjZSBkaXJlY3RvcnkgZm91bmQgKHdoZXJlIGxpYnV1aWQubGEgaXMgbG9jYXRlZCkiOworK215ICgkc3JjZGlyKSA9IG1hcCB7IG15ICRkID0gJF87ICRkID1+IHMvXC9saWJvc3NwLXV1aWRcLmxhJC8vOyAkZCB9CisrICAgICAgICAgICAgICAgZ3JlcCB7IC1mICRfIH0gKCIuLi9saWJvc3NwLXV1aWQubGEiLCBnbG9iKCIuLi8qL2xpYm9zc3AtdXVpZC5sYSIpKQorKyAgICBvciBkaWUgIm5vIHNvdXJjZSBkaXJlY3RvcnkgZm91bmQgKHdoZXJlIGxpYm9zc3AtdXVpZC5sYSBpcyBsb2NhdGVkKSI7CisgCisgIyAgIGRldGVybWluZSBleHRyYSBidWlsZCBvcHRpb25zCisgbXkgJGNvbXBhdCA9IDA7CitAQCAtNDcsMTUgKzQ3LDE1IEBAIFdyaXRlTWFrZWZpbGUoCisgICAgIFZFUlNJT05fRlJPTSAgICAgID0+ICd1dWlkLnBtJywKKyAgICAgQUJTVFJBQ1RfRlJPTSAgICAgPT4gJ3V1aWQucG9kJywKKyAgICAgUFJFUkVRX1BNICAgICAgICAgPT4ge30sCistICAgIExJQlMgICAgICAgICAgICAgID0+IFsgIi1MJHNyY2Rpci8ubGlicyAtTCRzcmNkaXIgLWx1dWlkIiBdLAorKyAgICBMSUJTICAgICAgICAgICAgICA9PiBbICItTCRzcmNkaXIvLmxpYnMgLUwkc3JjZGlyIC1sb3NzcC11dWlkIiBdLAorICAgICBERUZJTkUgICAgICAgICAgICA9PiAnJywKKyAgICAgSU5DICAgICAgICAgICAgICAgPT4gIi1JLiAtSSRzcmNkaXIiLAorICAgICBQTSAgICAgICAgICAgICAgICA9PiB7ICd1dWlkLnBtJyAgID0+ICckKElOU1RfTElCRElSKS91dWlkLnBtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXVpZC5wb2QnICA9PiAnJChJTlNUX0xJQkRJUikvdXVpZC5wb2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wbScgID0+ICckKElOU1RfTElCRElSKS8uLi9EYXRhL1VVSUQucG0nKSAgOiAoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9MSUJESVIpLy4uL0RhdGEvVVVJRC5wb2QnKSA6ICgpKSwgfSwKKy0gICAgTUFOM1BPRFMgICAgICAgICAgPT4geyAndXVpZC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvT1NTUDo6dXVpZC4zJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL0RhdGE6OlVVSUQuMycpIDogKCkpLCB9LAorKyAgICBNQU4zUE9EUyAgICAgICAgICA9PiB7ICd1dWlkLnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9PU1NQOjp1dWlkLjNwbScsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9EYXRhOjpVVUlELjNwbScpIDogKCkpLCB9LAorICAgICBUWVBFTUFQUyAgICAgICAgICA9PiBbICd1dWlkLnRtJyBdLAorICAgICB0ZXN0ICAgICAgICAgICAgICA9PiB7IFRFU1RTID0+ICd1dWlkLnRzJyAuICgkY29tcGF0ID8gJyB1dWlkX2NvbXBhdC50cycgOiAnJykgfSwKKyAgICAgTk9fTUVUQSAgICAgICAgICAgPT4gMSwKK2RpZmYgLS1naXQgYS9waHAvY29uZmlnLm00IGIvcGhwL2NvbmZpZy5tNAoraW5kZXggNTA5MWI5Ni4uOTY5YjQ1NyAxMDA2NDQKKy0tLSBhL3BocC9jb25maWcubTQKKysrKyBiL3BocC9jb25maWcubTQKK0BAIC0zNCw3ICszNCw3IEBAIGlmIHRlc3QgIiRQSFBfVVVJRCIgIT0gIm5vIjsgdGhlbgorICAgICBQSFBfTkVXX0VYVEVOU0lPTih1dWlkLCB1dWlkLmMsICRleHRfc2hhcmVkKQorICAgICBBQ19ERUZJTkUoSEFWRV9VVUlELCAxLCBbSGF2ZSBPU1NQIHV1aWQgbGlicmFyeV0pCisgICAgIFBIUF9BRERfTElCUEFUSChbLi5dLCApCistICAgIFBIUF9BRERfTElCUkFSWShbdXVpZF0sLCBVVUlEX1NIQVJFRF9MSUJBREQpCisrICAgIFBIUF9BRERfTElCUkFSWShbb3NzcC11dWlkXSwsIFVVSURfU0hBUkVEX0xJQkFERCkKKyAgICAgUEhQX0FERF9JTkNMVURFKFsuLl0pCisgICAgIFBIUF9TVUJTVChVVUlEX1NIQVJFRF9MSUJBREQpCisgCitkaWZmIC0tZ2l0IGEvdXVpZC1jb25maWcuaW4gYi91dWlkLWNvbmZpZy5pbgoraW5kZXggOGQyYTA2My4uNWI1ODgxMiAxMDA2NDQKKy0tLSBhL3V1aWQtY29uZmlnLmluCisrKysgYi91dWlkLWNvbmZpZy5pbgorQEAgLTEyMSw3ICsxMjEsNyBAQCBkbworICAgICAgICAgICAgIG91dHB1dF9leHRyYT0iJG91dHB1dF9leHRyYSAkdXVpZF9sZGZsYWdzIgorICAgICAgICAgICAgIDs7CisgICAgICAgICAtLWxpYnMpCistICAgICAgICAgICAgb3V0cHV0PSIkb3V0cHV0IC1sdXVpZCIKKysgICAgICAgICAgICBvdXRwdXQ9IiRvdXRwdXQgLWxvc3NwLXV1aWQiCisgICAgICAgICAgICAgb3V0cHV0X2V4dHJhPSIkb3V0cHV0X2V4dHJhICR1dWlkX2xpYnMiCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICogKQorZGlmZiAtLWdpdCBhL3V1aWQucGMuaW4gYi91dWlkLnBjLmluCitpbmRleCBjNzZhZDFlLi5kZTAwYzJmIDEwMDY0NAorLS0tIGEvdXVpZC5wYy5pbgorKysrIGIvdXVpZC5wYy5pbgorQEAgLTM2LDcgKzM2LDcgQEAgTmFtZTogT1NTUCB1dWlkCisgRGVzY3JpcHRpb246IFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSBMaWJyYXJ5CisgVmVyc2lvbjogQFVVSURfVkVSU0lPTl9SQVdACisgVVJMOiBodHRwOi8vd3d3Lm9zc3Aub3JnL3BrZy9saWIvdXVpZC8KKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sdXVpZAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L29zc3AKKytMaWJzOiAtTCR7bGliZGlyfSAtbG9zc3AtdXVpZAorIExpYnMucHJpdmF0ZTogQExJQlNACisgCistLSAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDItdXVpZC1wcmVzZXJ2ZS1tLW9wdGlvbi1zdGF0dXMtaW4tdi1vcHRpb24taGFuZGxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGE2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb206IE1hcmNvIE5lbmNpYXJpbmkgPG1hcmNvLm5lbmNpYXJpbmlAZGV2aXNlLml0PgorRGF0ZTogV2VkLCAyNyBKYW4gMjAxMCAxOTo0NjoyMSArMDEwMAorU3ViamVjdDogW1BBVENIXSB1dWlkOiBwcmVzZXJ2ZSAtbSBvcHRpb24gc3RhdHVzIGluIC12IG9wdGlvbiBoYW5kbGluZworCitCdWc6IDUzMTM5NgorLS0tCisgdXVpZF9jbGkuYyB8ICAgMTkgKysrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvdXVpZF9jbGkuYyBiL3V1aWRfY2xpLmMKK2luZGV4IGQxYjBiMTEuLjE0YTY3ZmUgMTAwNjQ0CistLS0gYS91dWlkX2NsaS5jCisrKysgYi91dWlkX2NsaS5jCitAQCAtMTQwLDExICsxNDAsMTIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAgICAgICAgICAgaSA9IHN0cnRvbChvcHRhcmcsICZwLCAxMCk7CisgICAgICAgICAgICAgICAgIGlmICgqcCAhPSAnXDAnKQorICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgYXJndW1lbnQgdG8gb3B0aW9uICd2JyIpOworKyAgICAgICAgICAgICAgICB2ZXJzaW9uICY9IH4oVVVJRF9NQUtFX1YxfFVVSURfTUFLRV9WM3xVVUlEX01BS0VfVjR8VVVJRF9NQUtFX1Y1KTsKKyAgICAgICAgICAgICAgICAgc3dpdGNoIChpKSB7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZlcnNpb24gPSBVVUlEX01BS0VfVjE7IGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJzaW9uID0gVVVJRF9NQUtFX1YzOyBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdmVyc2lvbiA9IFVVSURfTUFLRV9WNDsgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IHZlcnNpb24gPSBVVUlEX01BS0VfVjU7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WMTsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1YzOyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjQ7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WNTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIHZlcnNpb24gb24gb3B0aW9uICd2JyIpOworICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworQEAgLTIxMywxMCArMjE0LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgIH0KKyAgICAgZWxzZSB7CisgICAgICAgICAvKiBlbmNvZGluZyAqLworLSAgICAgICAgaWYgKCAgICh2ZXJzaW9uID09IFVVSURfTUFLRV9WMSAmJiBhcmdjICE9IDApCistICAgICAgICAgICAgfHwgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1YzICYmIGFyZ2MgIT0gMikKKy0gICAgICAgICAgICB8fCAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjQgJiYgYXJnYyAhPSAwKQorLSAgICAgICAgICAgIHx8ICh2ZXJzaW9uID09IFVVSURfTUFLRV9WNSAmJiBhcmdjICE9IDIpKQorKyAgICAgICAgaWYgKCAgICh2ZXJzaW9uICYgVVVJRF9NQUtFX1YxICYmIGFyZ2MgIT0gMCkKKysgICAgICAgICAgICB8fCAodmVyc2lvbiAmIFVVSURfTUFLRV9WMyAmJiBhcmdjICE9IDIpCisrICAgICAgICAgICAgfHwgKHZlcnNpb24gJiBVVUlEX01BS0VfVjQgJiYgYXJnYyAhPSAwKQorKyAgICAgICAgICAgIHx8ICh2ZXJzaW9uICYgVVVJRF9NQUtFX1Y1ICYmIGFyZ2MgIT0gMikpCisgICAgICAgICAgICAgdXNhZ2UoImludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOworICAgICAgICAgaWYgKChyYyA9IHV1aWRfY3JlYXRlKCZ1dWlkKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9jcmVhdGU6ICVzIiwgdXVpZF9lcnJvcihyYykpOworQEAgLTIzMiw3ICsyMzMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9sb2FkKHV1aWQsICJuaWwiKSkgIT0gVVVJRF9SQ19PSykKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yKDEsICJ1dWlkX2xvYWQ6ICVzIiwgdXVpZF9lcnJvcihyYykpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjMgfHwgdmVyc2lvbiA9PSBVVUlEX01BS0VfVjUpIHsKKysgICAgICAgICAgICBpZiAodmVyc2lvbiAmIFVVSURfTUFLRV9WMyB8fCB2ZXJzaW9uICYgVVVJRF9NQUtFX1Y1KSB7CisgICAgICAgICAgICAgICAgIGlmICgocmMgPSB1dWlkX2NyZWF0ZSgmdXVpZF9ucykpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9jcmVhdGU6ICVzIiwgdXVpZF9lcnJvcihyYykpOworICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9sb2FkKHV1aWRfbnMsIGFyZ3ZbMF0pKSAhPSBVVUlEX1JDX09LKSB7CistLSAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjYmI1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb206IE1hcmNvIE5lbmNpYXJpbmkgPG1hcmNvLm5lbmNpYXJpbmlAZGV2aXNlLml0PgorRGF0ZTogVHVlLCAyIEZlYiAyMDEwIDEyOjE2OjQ5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB3aGF0aXMgZW50cmllcworCitGaXggd2hhdGlzIGVudHJ5IG9mIHV1aWQuMSwgdXVpZC4zb3NzcCBhbmQgdXVpZCsrLjNvc3NwIG1hbnBhZ2VzCistLS0KKyB1dWlkKysucG9kICAgfCAgICAyICstCisgdXVpZC5wb2QgICAgIHwgICAgMiArLQorIHV1aWRfY2xpLnBvZCB8ICAgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvdXVpZCsrLnBvZCBiL3V1aWQrKy5wb2QKK2luZGV4IDhiNWE0YjEuLjg5YzVlZmIgMTAwNjQ0CistLS0gYS91dWlkKysucG9kCisrKysgYi91dWlkKysucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4gKEMrKyBBUEkpCisrQjx1dWlkKys+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4gKEMrKyBBUEkpCisgCisgPWhlYWQxIFZFUlNJT04KKyAKK2RpZmYgLS1naXQgYS91dWlkLnBvZCBiL3V1aWQucG9kCitpbmRleCA0YWQzNzQyLi4wMTc5YTQ2IDEwMDY0NAorLS0tIGEvdXVpZC5wb2QKKysrKyBiL3V1aWQucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4KKytCPHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcj4KKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorZGlmZiAtLWdpdCBhL3V1aWRfY2xpLnBvZCBiL3V1aWRfY2xpLnBvZAoraW5kZXggZGRlYzZiYi4uZGY5ZGM4MyAxMDA2NDQKKy0tLSBhL3V1aWRfY2xpLnBvZAorKysrIGIvdXVpZF9jbGkucG9kCitAQCAtMzEsNyArMzEsNyBAQAorIAorID1oZWFkMSBOQU1FCisgCistQjxPU1NQIHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBDb21tYW5kLUxpbmUgVG9vbD4KKytCPHV1aWQ+IC0gQjxVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciBDb21tYW5kLUxpbmUgVG9vbD4KKyAKKyA9aGVhZDEgVkVSU0lPTgorIAorLS0gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1ZTExMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDQtZml4LWRhdGEtdXVpZC1mcm9tLXN0cmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitEZXNjcmlwdGlvbjogU3VwcG9ydCBkYXNoLWxlc3MgYXJncyB0byBmcm9tX3N0cmluZy4KK0F1dGhvcjogVGltIFJldG91dCA8ZGlvY2xlc0BkZWJpYW4ub3JnPgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82MzU2MDcKKworVGhlIG1vZHVsZSBEYXRhOjpHVUlEIGRlcGVuZHMgb24gRGF0YTo6VVVJRCBzdXBwb3J0aW5nIHRoaXMgYmVoYXZpb3VyLgorCistLS0tCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1RoaXMgcGF0Y2ggaXMgZnJvbSBkZWJpYW4gb3NzcC11dWlkIDEuNi4yIGludGVncmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL3BlcmwvdXVpZF9jb21wYXQucG0KKysrKyBiL3BlcmwvdXVpZF9jb21wYXQucG0KK0BAIC05Myw3ICs5Myw5IEBACisgICAgICR1dWlkLT5pbXBvcnQoJ3N0cicsCisgICAgICAgICAgICRzdHIgPX4gL14weC8KKyAgICAgICAgID8gam9pbiAnLScsIHVucGFjaygneDIgYTggYTQgYTQgYTQgYTEyJywgJHN0cikKKy0gICAgICAgIDogJHN0cgorKyAgICAgICAgOiAkc3RyID1+IC8tLworKyAgICAgICAgPyAkc3RyCisrICAgICAgICA6IGpvaW4gJy0nLCB1bnBhY2soJ0E4IEE0IEE0IEE0IEExMicsICRzdHIpCisgICAgICk7CisgICAgIHJldHVybiAkdXVpZC0+ZXhwb3J0KCdiaW4nKTsKKyB9CistLS0gYS9wZXJsL3V1aWRfY29tcGF0LnRzCisrKysgYi9wZXJsL3V1aWRfY29tcGF0LnRzCitAQCAtMjgsNyArMjgsNyBAQAorICMjICB1dWlkX2NvbXBhdC50czogRGF0YTo6VVVJRCBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IFBlcmwgQVBJIChQZXJsIHRlc3Qgc3VpdGUgcGFydCkKKyAjIworIAorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE0OworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE2OworIAorIEJFR0lOIHsKKyAgICAgdXNlX29rKCdEYXRhOjpVVUlEJyk7CitAQCAtNTMsMyArNTMsNSBAQAorIG9rKCR1dWlkOCA9ICR1Zy0+ZnJvbV9zdHJpbmcoIjZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCIpKTsKKyBvaygkdWctPmNvbXBhcmUoJHV1aWQ3LCAkdXVpZDgpID09IDApOworIAorK29rKCR1dWlkOSA9ICR1Zy0+ZnJvbV9zdHJpbmcoIjZiYTdiODExOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4IikpOworK29rKCR1Zy0+Y29tcGFyZSgkdXVpZDcsICR1dWlkOSkgPT0gMCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9pbnN0YWxsLXBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIyMmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaApAQCAtMCwwICsxLDE5IEBACit1dWlkLnBjIGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIHNvIHNob3VsZCBiZSBpbnN0YWxsZWQgZnJvbSB0aGUgY3VycmVudAorZGlyZWN0b3J5LCBhbmQgbm90ICRTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW3Nob3VsZCBiZSBzdWJtaXR0ZWRdCitTaWduZWQtT2ZmLUJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitJbmRleDogdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTExLTEzIDE2OjU4OjI4LjYyNDE1NjAwMCArMDAwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0xMS0xMyAxNzowNToyNC4yMjQxNTg2NzAgKzAwMDAKK0BAIC0yMzIsNyArMjMyLDcgQEAKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNzU1IHV1aWQtY29uZmlnICQoREVTVERJUikkKGJpbmRpcikvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQtY29uZmlnLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xLworLQkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLnBjICQoREVTVERJUikkKGxpYmRpcikvcGtnY29uZmlnLworKwkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgdXVpZC5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy8KKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0IHV1aWQuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS8KKyAJLUBpZiBbICIuJChXSVRIX0RDRSkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgIGVjaG8gIiQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWRfZGNlLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvIjsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmYzEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KK0BAIC0xMTMsMTUgKzExMywxNSBAQCBhbGw6ICQoVEFSR0VUUykKKwlAJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENYWCkgJChDUFBGTEFHUykgJChDWFhGTEFHUykgLWMgJDwKKworICQoTElCX05BTUUpOiAkKExJQl9PQkpTKQorLQlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyAkKExJQl9OQU1FKSAkKExJQl9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyAkKExJQl9OQU1FKSAkKExJQl9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKwkgICAgLXZlcnNpb24taW5mbyBgJChTSFRPT0wpIHZlcnNpb24gLWwgYyAtZCBsaWJ0b29sICQoUykvdXVpZF92ZXJzLmhgCisKKyAkKERDRV9OQU1FKTogJChEQ0VfT0JKUykKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gJChEQ0VfTkFNRSkgJChEQ0VfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJChEQ0VfTkFNRSkgJChEQ0VfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChDWFhfTkFNRSk6ICQoQ1hYX09CSlMpCistCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ1hYKSAtbyAkKENYWF9OQU1FKSAkKENYWF9PQkpTKSAtcnBhdGggJChsaWJkaXIpIFwKKysJQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDWFgpICQoTERGTEFHUykgLW8gJChDWFhfTkFNRSkgJChDWFhfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChQUkdfTkFNRSk6ICQoUFJHX09CSlMpICQoTElCX05BTUUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjOTFiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitSZW1vdmUgaGFyZGNvZGVkIGxpYnRvb2wgbmFtZSwgZmFsbCBiYWNrIHRvIGdlbmVyYXRlZCBuYW1lCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCitUaGUgcHJvamVjdCBhcHBlYXJzIHRvIG5vIGxvbmdlciBiZSBhY2NlcHRpbmcgY2hhbmdlcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4gdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjM3OjE5LjU3OTY3MjkzMCAtMDUwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDozNzo0OS4xMTI3MzM3ODcgLTA1MDAKK0BAIC0zMiw2ICszMiw3IEBACisgVlBBVEggICAgICAgPSBAc3JjZGlyQAorIHNyY2RpciAgICAgID0gQHNyY2RpckAKKyB0b3Bfc3JjZGlyICA9IEB0b3Bfc3JjZGlyQAorK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACisgUyAgICAgICAgICAgPSAkKHNyY2RpcikKKyBDICAgICAgICAgICA9IC4KKyAKK0BAIC01NSw3ICs1Niw3IEBACisgQ1AgICAgICAgICAgPSBjcAorIFJNRElSICAgICAgID0gcm1kaXIKKyBTSFRPT0wgICAgICA9ICQoUykvc2h0b29sCistTElCVE9PTCAgICAgPSAkKEMpL2xpYnRvb2wKKytMSUJUT09MICAgICA9IEBMSUJUT09MQAorIFRSVUUgICAgICAgID0gdHJ1ZQorIFBPRDJNQU4gICAgID0gcG9kMm1hbgorIFBFUkwgICAgICAgID0gQFBFUkxACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNmI1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL3V1aWQtbm9zdHJpcC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXZSBkb24ndCB3YW50IGFueXRoaW5nIHN0cmlwcGVkCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCitUaGUgcHJvamVjdCBhcHBlYXJzIHRvIG5vIGxvbmdlciBiZSBhY2NlcHRpbmcgY2hhbmdlcy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4gdXVpZC0xLjYuMi9NYWtlZmlsZS5pbgorLS0tIHV1aWQtMS42LjIub3JpZy9NYWtlZmlsZS5pbgkyMDEyLTA1LTE0IDE0OjQyOjQyLjIyNTc4OTQ1NiAtMDUwMAorKysrIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNTowMzowMy4xMTk3MzM0MDAgLTA1MDAKK0BAIC0yNTQsNyArMjU0LDcgQEAKKyAJLUBpZiBbICIuJChXSVRIX0NYWCkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoQ1hYX05BTUUpICQoREVTVERJUikkKGxpYmRpcikvOyBcCisgCWZpCistCUAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1zIC1tIDc1NSB1dWlkICQoREVTVERJUikkKGJpbmRpcikvCisrCUAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDc1NSB1dWlkICQoREVTVERJUikkKGJpbmRpcikvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKFMpL3V1aWQuMSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvCisgCS1AaWYgWyAiLiQoV0lUSF9QRVJMKSIgPSAueWVzIF07IHRoZW4gXAorIAkgICAgKGNkICQoUykvcGVybCAmJiAkKE1BS0UpICQoTUZMQUdTKSBpbnN0YWxsIERFU1RESVI9JChERVNURElSKSk7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWRfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5MjZiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgKFVVSUQpIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJPU1NQIHV1aWQgaXMgYSBJU08tQzoxOTk5IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBcCisoQVBJKSBhbmQgY29ycmVzcG9uZGluZyBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIChDTEkpIGZvciB0aGUgZ2VuZXJhdGlvbiBvZiBcCitEQ0UgMS4xLCBJU08vSUVDIDExNTc4OjE5OTYgYW5kIFJGQyA0MTIyIGNvbXBsaWFudCBVbml2ZXJzYWxseSBVbmlxdWUgXAorSWRlbnRpZmllciAoVVVJRCkuIEl0IHN1cHBvcnRzIERDRSAxLjEgdmFyaWFudCBVVUlEcyBvZiB2ZXJzaW9uIDEgKHRpbWUgXAorYW5kIG5vZGUgYmFzZWQpLCB2ZXJzaW9uIDMgKG5hbWUgYmFzZWQsIE1ENSksIHZlcnNpb24gNCAocmFuZG9tIG51bWJlciBcCitiYXNlZCkgYW5kIHZlcnNpb24gNSAobmFtZSBiYXNlZCwgU0hBLTEpLiIKK0RFU0NSSVBUSU9OX3V1aWQgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgdG9vbCB0byBjcmVhdGUgVW5pdmVyc2FsbHkgXAorVW5pcXVlIElkZW50aWZpZXJzIChVVUlEKSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9zc3Aub3JnL3BrZy9saWIvdXVpZC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0zMDtlbmRsaW5lPTU1O21kNT1iMzk0ZmFkYjAzOWJiZmNhNmFkOWQ5ZDc2OWVlOTYwZSBcCisJICAgZmlsZTovL3V1aWRfbWQ1LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yODttZDU9OWMxZjRiMjIxODU0NmRlYWUyNGM5MWJlMWRjZjAwZGQiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9vLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorCSAgIGZpbGU6Ly8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMy1GaXgtd2hhdGlzLWVudHJpZXMucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2ggXAorCSAgIGZpbGU6Ly91dWlkLWxpYnRvb2wucGF0Y2ggXAorCSAgIGZpbGU6Ly91dWlkLW5vc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5zdGFsbC1wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZGIwZDQzYTkwMjJhNmViYmJjMjUzMzdhZTI4OTQyZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMWE2MTUyMjViYWE1ZjhiYjY4NjgyNDQyM2Y1MGU0NDI3YWNkM2Y3MGQzOTQ3NjViZGZmMzI4MDFmMGZkNWIwIgorCitTID0gIiR7V09SS0RJUn0vdXVpZC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWRjZSAtLXdpdGhvdXQtY3h4IC0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLWNvbXBhdCAtLXdpdGhvdXQtcGhwIC0td2l0aG91dC1wZ3NxbCIKK0VYVFJBX09FQ09ORiA9ICItLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9vc3NwIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgIyBUaGlzIHBhY2thZ2UgaGFzIGEgY29tcGxldGVseSBjdXN0b20gYWNsb2NhbC5tNCwgd2hpY2ggc2hvdWxkIGJlIGFjaW5jbHVkZS5tNC4KKyAgaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IF07IHRoZW4KKyAgICBtdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKyAgZmkKKworICBybSAtZiAke1N9L2xpYnRvb2wubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgIG1rZGlyIC1wICAke0R9JHtpbmNsdWRlZGlyfS9vc3NwCisgIG12ICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL3V1aWQucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvb3NzcC11dWlkLnBjCit9CisKK1BBQ0tBR0VTID0rICJ1dWlkIgorRklMRVNfdXVpZCA9ICIke2JpbmRpcn0vdXVpZCIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJvc3NwLXV1aWQuc28uMTYqIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vdXVpZC1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInV1aWQuMyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWRvYyA9ICIyMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXVpZC4zXSA9ICIke21hbmRpcn0vbWFuMy91dWlkLjMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMTg2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRldmljZS1kZXZlbC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIHRvb2xzIGZvciBkZXZlbG9wbWVudCBvbiB0aGUgZGV2aWNlIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSUFJPVklERVNfJHtQTn0gPSAicWVtdS1jb25maWciCitSUkVQTEFDRVNfJHtQTn0gPSAicWVtdS1jb25maWciCitSQ09ORkxJQ1RTXyR7UE59ID0gInFlbXUtY29uZmlnIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZGlzdGNjLWNvbmZpZyBcCisgICAgb3Byb2ZpbGV1aS1zZXJ2ZXIgXAorICAgIG5mcy1leHBvcnQtcm9vdCBcCisgICAgYmFzaCBcCisgICAgIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2guaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZiOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYwpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIlRvb2wgZm9yIGFwcGx5aW5nIGEgcGF0Y2ggZmlsZSIKK0RFU0NSSVBUSU9OID0gInBhdGNoIHRha2VzIGEgcGF0Y2ggZmlsZSBjb250YWluaW5nIGEgZGlmZmVyZW5jZSBsaXN0aW5nIFwKK3Byb2R1Y2VkIGJ5IHRoZSBkaWZmIHByb2dyYW0gYW5kIGFwcGxpZXMgdGhvc2UgZGlmZmVyZW5jZXMgdG8gb25lIG9yIG1vcmUgXAorb3JpZ2luYWwgZmlsZXMsIHByb2R1Y2luZyBwYXRjaGVkIHZlcnNpb25zLiIKK1NFQ1RJT04gPSAidXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9wcm9qZWN0cy9wYXRjaC8iCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wYXRjaC9wYXRjaC0ke1BWfS50YXIuZ3oiCitTID0gIiR7V09SS0RJUn0vcGF0Y2gtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAicGF0Y2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZGViaWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTA3NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaApAQCAtMCwwICsxLDEwNDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworLS0tIHBhdGNoLTIuNS45Lm9yaWcvbTQvaGFzaC5tNAorKysrIHBhdGNoLTIuNS45L200L2hhc2gubTQKK0BAIC0wLDAgKzEsMTUgQEAKKysjIGhhc2gubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0hBU0hdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9oYXNoLmMuCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkbGliLmgpCisrICBBQ19IRUFERVJfU1REQk9PTAorKyAgQUNfQ0hFQ0tfREVDTFNfT05DRShmcmVlIG1hbGxvYykKKytdKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvbTQvbmFub3NlY29uZF9zdGF0Lm00CisrKysgcGF0Y2gtMi41LjkvbTQvbmFub3NlY29uZF9zdGF0Lm00CitAQCAtMCwwICsxLDM1IEBACisrQUNfREVGVU4oW2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfbnNlY10sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7IF0sCisrCVthY19jdl9zdGF0X25zZWM9eWVzXSwKKysJW2FjX2N2X3N0YXRfbnNlYz1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9OU0VDLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgaGFzIG5hbm9zZWNvbmQgdGltZXN0YW1wcy5dKQorKyAgIGZpCisrCisrICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfdGltZXZhbF0sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8dGltZS5oPgorKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW0udHZfbnNlYyArIHN0LnN0X210aW0udHZfbnNlYyArIHN0LnN0X2N0aW0udHZfbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD15ZXNdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX1RJTUVWQUwsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBjb210YWlucyBzdHJ1Y3QgdGltZXZhbCdzLl0pCisrICAgZmldKQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBwYXRjaC0yLjUuOS9NYWtlZmlsZS5pbgorQEAgLTYyLDcgKzYyLDcgQEAKKyBTSEVMTCA9IC9iaW4vc2gKKyAKKyBMSUJTUkNTID0gZXJyb3IuYyBtYWxsb2MuYyBtZW1jaHIuYyBta2Rpci5jIFwKKy0JcmVhbGxvYy5jIHJtZGlyLmMgc3RyY2FzZWNtcC5jIHN0cm5jYXNlY21wLmMKKysJcmVhbGxvYy5jIHJtZGlyLmMgc3RyY2FzZWNtcC5jIHN0cm5jYXNlY21wLmMgaGFzaC5jCisgU1JDUyA9ICQoTElCU1JDUykgXAorIAlhZGRleHQuYyBhcmdtYXRjaC5jIGJhY2t1cGZpbGUuYyBcCisgCWJhc2VuYW1lLmMgZGlybmFtZS5jIFwKK0BAIC03OCwxMiArNzgsMTIgQEAKKyAJbWFrZXRpbWUuJChPQkpFWFQpIHBhcnRpbWUuJChPQkpFWFQpIFwKKyAJcGF0Y2guJChPQkpFWFQpIHBjaC4kKE9CSkVYVCkgXAorIAlxdW90ZS4kKE9CSkVYVCkgcXVvdGVhcmcuJChPQkpFWFQpIHF1b3Rlc3lzLiQoT0JKRVhUKSBcCistCXV0aWwuJChPQkpFWFQpIHZlcnNpb24uJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpCisrCXV0aWwuJChPQkpFWFQpIHZlcnNpb24uJChPQkpFWFQpIHhtYWxsb2MuJChPQkpFWFQpIGhhc2guJChPQkpFWFQpCisgSERSUyA9IGFyZ21hdGNoLmggYmFja3VwZmlsZS5oIGNvbW1vbi5oIGRpcm5hbWUuaCBcCisgCWVycm9yLmggZ2V0b3B0LmggZ2V0dGV4dC5oIFwKKyAJaW5wLmggbWFrZXRpbWUuaCBwYXJ0aW1lLmggcGNoLmggXAorIAlxdW90ZS5oIHF1b3RlYXJnLmggcXVvdGVzeXMuaCBcCistCXVubG9ja2VkLWlvLmggdXRpbC5oIHZlcnNpb24uaCB4YWxsb2MuaAorKwl1bmxvY2tlZC1pby5oIHV0aWwuaCB2ZXJzaW9uLmggeGFsbG9jLmggaGFzaC5oCisgTUlTQyA9IEFVVEhPUlMgQ09QWUlORyBDaGFuZ2VMb2cgSU5TVEFMTCBNYWtlZmlsZS5pbiBORVdTIFJFQURNRSBcCisgCWFjbG9jYWwubTQgXAorIAljb25maWcuaGluIGNvbmZpZ3VyZSBjb25maWd1cmUuYWMgXAorLS0tIHBhdGNoLTIuNS45Lm9yaWcvYWNsb2NhbC5tNAorKysrIHBhdGNoLTIuNS45L2FjbG9jYWwubTQKK0BAIC0xLDMgKzEsMTA1OCBAQAorK2RubCBhY2xvY2FsLm00IGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS40LXA2CisrCisrZG5sIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NS04LCAxOTk5LCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisrCisrZG5sIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorK2RubCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorK2RubCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisrZG5sIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKysKKysjIGxpYi1wcmVmaXgubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9BUkdfV0lUSCBpcyBzeW5vbnltb3VzIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mLTIuMTMsIGFuZAorK2RubCBzaW1pbGFyIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mIDIuNTIuLi4yLjU3IGV4Y2VwdCB0aGF0IGlzIGRvZXNuJ3QKKytkbmwgcmVxdWlyZSBleGNlc3NpdmUgYnJhY2tldGluZy4KKytpZmRlZihbQUNfSEVMUF9TVFJJTkddLAorK1tBQ19ERUZVTihbQUNfTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sW1skMl1dLFskM10sWyQ0XSldKV0sCisrW0FDX0RFRlVOKFtBQ19dW0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFskMl0sWyQzXSxbJDRdKV0pXSkKKysKKytkbmwgQUNfTElCX1BSRUZJWCBhZGRzIHRvIHRoZSBDUFBGTEFHUyBhbmQgTERGTEFHUyB0aGUgZmxhZ3MgdGhhdCBhcmUgbmVlZGVkCisrZG5sIHRvIGFjY2VzcyBwcmV2aW91c2x5IGluc3RhbGxlZCBsaWJyYXJpZXMuIFRoZSBiYXNpYyBhc3N1bXB0aW9uIGlzIHRoYXQKKytkbmwgYSB1c2VyIHdpbGwgd2FudCBwYWNrYWdlcyB0byB1c2Ugb3RoZXIgcGFja2FnZXMgaGUgcHJldmlvdXNseSBpbnN0YWxsZWQKKytkbmwgd2l0aCB0aGUgc2FtZSAtLXByZWZpeCBvcHRpb24uCisrZG5sIFRoaXMgbWFjcm8gaXMgbm90IG5lZWRlZCBpZiBvbmx5IEFDX0xJQl9MSU5LRkxBR1MgaXMgdXNlZCB0byBsb2NhdGUKKytkbmwgbGlicmFyaWVzLCBidXQgaXMgb3RoZXJ3aXNlIHZlcnkgY29udmVuaWVudC4KKytBQ19ERUZVTihbQUNfTElCX1BSRUZJWF0sCisrWworKyAgQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJfTElOS0ZMQUdTXSkKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWItcHJlZml4ICAgIGRvbid0IHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRMREZMQUdTOyBkbworKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSR7TERGTEFHUzorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX1BSRVBBUkVfUFJFRklYIGNyZWF0ZXMgdmFyaWFibGVzIGFjbF9maW5hbF9wcmVmaXgsCisrZG5sIGFjbF9maW5hbF9leGVjX3ByZWZpeCwgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHdoaWNoICRwcmVmaXggYW5kCisrZG5sICRleGVjX3ByZWZpeCB3aWxsIGV4cGFuZCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdLAorK1sKKysgIGRubCBVbmZvcnR1bmF0ZWx5LCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGdldCBvbmx5IGZpbmFsbHkgZGV0ZXJtaW5lZAorKyAgZG5sIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlLgorKyAgaWYgdGVzdCAiWCRwcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRwcmVmaXgiCisrICBmaQorKyAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0nJHtwcmVmaXh9JworKyAgZWxzZQorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGZpCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgZXZhbCBhY2xfZmluYWxfZXhlY19wcmVmaXg9XCIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4XCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorKworK2RubCBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW3N0YXRlbWVudF0pIGV2YWx1YXRlcyBzdGF0ZW1lbnQsIHdpdGggdGhlCisrZG5sIHZhcmlhYmxlcyBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGJvdW5kIHRvIHRoZSB2YWx1ZXMgdGhleSB3aWxsIGhhdmUKKytkbmwgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1dJVEhfRklOQUxfUFJFRklYXSwKKytbCisrICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgorKyAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKKysgIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgorKyAgJDEKKysgIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKysKKysjIGxpYi1saW5rLm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kCisrZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCisrICAgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKyAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICBdKQorKyAgTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbGlicyIKKysgIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgorKyAgSU5DW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgZG5sIEFsc28gc2V0IEhBVkVfTElCW11OQU1FIHNvIHRoYXQgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiByZXVzZSB0aGUKKysgIGRubCByZXN1bHRzIG9mIHRoaXMgc2VhcmNoIHdoZW4gdGhpcyBsaWJyYXJ5IGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5LgorKyAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgQUNfTElCX0hBVkVfTElOS0ZMQUdTKG5hbWUsIGRlcGVuZGVuY2llcywgaW5jbHVkZXMsIHRlc3Rjb2RlKQorK2RubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAorK2RubCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIHRvZ2V0aGVyIHdpdGggdGhlIHNwZWNpZmllZCBpbmNsdWRlIGZpbGVzIGFuZAorK2RubCB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBsaW5rIHRoZSBzcGVjaWZpZWQgdGVzdGNvZGUuIElmIGZvdW5kLCBpdAorK2RubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCisrZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisrZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworK2RubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytBQ19ERUZVTihbQUNfTElCX0hBVkVfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYltdTmFtZSBhbmQgZGVmaW5lIExJQltdTkFNRSwgTFRMSUJbXU5BTUUgYW5kIElOQ1tdTkFNRQorKyAgZG5sIGFjY29yZGluZ2x5LgorKyAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrCisrICBkbmwgQWRkICRJTkNbXU5BTUUgdG8gQ1BQRkxBR1MgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyBjaGVja3MsCisrICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYltdTmFtZS1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4KKysgIGFjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZV0sIFsKKysgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgTElCUz0iJExJQlMgJExJQltdTkFNRSIKKysgICAgQUNfVFJZX0xJTksoWyQzXSwgWyQ0XSwgW2FjX2N2X2xpYltdTmFtZT15ZXNdLCBbYWNfY3ZfbGliW11OYW1lPW5vXSkKKysgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKysgIF0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfbGliW11OYW1lIiA9IHllczsgdGhlbgorKyAgICBIQVZFX0xJQltdTkFNRT15ZXMKKysgICAgQUNfREVGSU5FKFtIQVZFX0xJQl1OQU1FLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAkMSBsaWJyYXJ5Ll0pCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSkKKysgICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCisrICBlbHNlCisrICAgIEhBVkVfTElCW11OQU1FPW5vCisrICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKKysgICAgZG5sICRJTkNbXU5BTUUgZWl0aGVyLgorKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCisrICAgIExJQltdTkFNRT0KKysgICAgTFRMSUJbXU5BTUU9CisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CisrZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCisrZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytBQ19ERUZVTihbQUNfTElCX1JQQVRIXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkgICAgICAgICAgICAgICAgZG5sIHdlIHVzZSAkQ0MsICRHQ0MsICRMREZMQUdTCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKSAgICAgICAgIGRubCB3ZSB1c2UgJGhvc3QKKysgIEFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKSBkbmwgd2UgdXNlICRhY19hdXhfZGlyCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWworKyAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCisrICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICIkYWNfYXV4X2Rpci9jb25maWcucnBhdGgiICIkaG9zdCIgPiBjb25mdGVzdC5zaAorKyAgICAuIC4vY29uZnRlc3Quc2gKKysgICAgcm0gLWYgLi9jb25mdGVzdC5zaAorKyAgICBhY2xfY3ZfcnBhdGg9ZG9uZQorKyAgXSkKKysgIHdsPSIkYWNsX2N2X3dsIgorKyAgbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIHNobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgorKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgorKyAgaGFyZGNvZGVfZGlyZWN0PSIkYWNsX2N2X2hhcmRjb2RlX2RpcmVjdCIKKysgIGhhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKysgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisrICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorKyAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKKysgICAgOiwgZW5hYmxlX3JwYXRoPXllcykKKytdKQorKworK2RubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCisrWworKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCisrWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCisrICBkbmwgJExERkxBR1MuIFVzaW5nIGJyZWFkdGgtZmlyc3Qtc2VhY2guCisrICBMSUJbXU5BTUU9CisrICBMVExJQltdTkFNRT0KKysgIElOQ1tdTkFNRT0KKysgIHJwYXRoZGlycz0KKysgIGx0cnBhdGhkaXJzPQorKyAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorKyAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCisrICB3aGlsZSB0ZXN0IC1uICIkbmFtZXNfbmV4dF9yb3VuZCI7IGRvCisrICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgorKyAgICBuYW1lc19uZXh0X3JvdW5kPQorKyAgICBmb3IgbmFtZSBpbiAkbmFtZXNfdGhpc19yb3VuZDsgZG8KKysgICAgICBhbHJlYWR5X2hhbmRsZWQ9CisrICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KKysgICAgICAgIGlmIHRlc3QgIiRuIiA9ICIkbmFtZSI7IHRoZW4KKysgICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KKysgICAgICAgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0iJG5hbWVzX2FscmVhZHlfaGFuZGxlZCAkbmFtZSIKKysgICAgICAgIGRubCBTZWUgaWYgaXQgd2FzIGFscmVhZHkgbG9jYXRlZCBieSBhbiBlYXJsaWVyIEFDX0xJQl9MSU5LRkxBR1MKKysgICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KKysgICAgICAgIHVwcGVybmFtZT1gZWNobyAiJG5hbWUiIHwgc2VkIC1lICd5fGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19ffCdgCisrICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0ICIkdmFsdWUiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgQW4gZWFybGllciBjYWxsIHRvIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBoYXMgZGV0ZXJtaW5lZAorKyAgICAgICAgICAgIGRubCB0aGF0IHRoaXMgbGlicmFyeSBkb2Vzbid0IGV4aXN0LiBTbyBqdXN0IGRyb3AgaXQuCisrICAgICAgICAgICAgOgorKyAgICAgICAgICBmaQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKKysgICAgICAgICAgZG5sIGFuZCB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRS8kTFRMSUJOQU1FLgorKyAgICAgICAgICBmb3VuZF9kaXI9CisrICAgICAgICAgIGZvdW5kX2xhPQorKyAgICAgICAgICBmb3VuZF9zbz0KKysgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgorKyAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cworKyAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeSBpbnRvIHRoZSBleGVjdXRhYmxlJ3MgcnVucGF0aCwgdW5sZXNzIGl0J3MgdGhlCisrICAgICAgICAgICAgICBkbmwgc3RhbmRhcmQgL3Vzci9saWIuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBObyBoYXJkY29kaW5nIGlzIG5lZWRlZC4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZG5sIFVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysgICAgICAgICAgICAgICAgICBkbmwgcmVzdWx0aW5nIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICBkbmwgUmVseSBvbiAiLUwkZm91bmRfZGlyIi4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKKysgICAgICAgICAgICAgICAgICAgIGRubCBvciB0aGUgYWxyZWFkeSBjb25zdHJ1Y3RlZCAkTElCTkFNRQorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRoYXJkY29kZV9ydW5wYXRoX3ZhciBhbmQgTERfUlVOX1BBVEgKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBjb21waWxlci4gU28gZ2l2ZSB1cC4gTm8gaGFyZGNvZGluZy4gVGhpcyBhZmZlY3RzIG9ubHkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIHZlcnkgb2xkIHN5c3RlbXMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCisrICAgICAgICAgICAgICAgICAgICAgIGRubCAiLUwkZm91bmRfZGlyIC1sJG5hbWUiIG9yICItTCRmb3VuZF9kaXIgJGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KKysgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc3RhdGljIGxpYnJhcnkuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX2EiCisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGRubCBXZSBzaG91bGRuJ3QgY29tZSBoZXJlLCBidXQgYW55d2F5IGl0J3MgZ29vZCB0byBoYXZlIGEKKysgICAgICAgICAgICAgICAgZG5sIGZhbGxiYWNrLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KKysgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9CisrICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KKysgICAgICAgICAgICAgICovbGliIHwgKi9saWIvKQorKyAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgJ3MsL2xpYi8qJCwsJ2AKKysgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIgorKyAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2luY2x1ZGUgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRJTkNOQU1FLAorKyAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KKysgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgUmVhZCB0aGUgLmxhIGZpbGUuIEl0IGRlZmluZXMgdGhlIHZhcmlhYmxlcworKyAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKKysgICAgICAgICAgICAgIGRubCBhZ2UsIHJldmlzaW9uLCBpbnN0YWxsZWQsIGRsb3BlbiwgZGxwcmVvcGVuLCBsaWJkaXIuCisrICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KKysgICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIgorKyAgICAgICAgICAgICAgZG5sIFdlIHVzZSBvbmx5IGRlcGVuZGVuY3lfbGlicy4KKysgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKysgICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KKysgICAgICAgICAgICAgICAgICAtTCopCisrICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRSBhbmQgJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtUiopCisrICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gcnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLWwqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKi5sYSkKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKKysgICAgICAgICAgICAgICAgICAgIGRubCBkaXJlY3Rvcnk7IGl0IGlzIGFscmVhZHkgY29udGFpbmVkIGluIGEgcHJlY2VkaW5nIC1MCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3B0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0kZGVwIgorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgRGlkbid0IGZpbmQgdGhlIGxpYnJhcnk7IGFzc3VtZSBpdCBpcyBpbiB0aGUgc3lzdGVtIGRpcmVjdG9yaWVzCisrICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KKysgICAgICAgICAgICBkbmwgZGlyZWN0b3JpZXMga25vd24gdG8gdGhlIGxpbmtlciBzaG91bGQgYWxzbyBiZSBrbm93biB0byB0aGUKKysgICAgICAgICAgICBkbmwgcnVudGltZSBsb2FkZXIsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzIHNldmVyZWx5IG1pc2NvbmZpZ3VyZWQuKQorKyAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGRvbmUKKysgIGRvbmUKKysgIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisrICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorKyAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorKyAgICAgIGFsbGRpcnM9CisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICBkb25lCisrICAgICAgZG5sIE5vdGU6IGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisrICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCisrICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICBlbHNlCisrICAgICAgZG5sIFRoZSAtcnBhdGggb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCisrICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgorKyAgICAgIGRvbmUKKysgICAgZmkKKysgIGZpCisrICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KKysgICAgZG5sIFdoZW4gdXNpbmcgbGlidG9vbCwgdGhlIG9wdGlvbiB0aGF0IHdvcmtzIGZvciBib3RoIGxpYnJhcmllcyBhbmQKKysgICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KKysgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tUiRmb3VuZF9kaXIiCisrICAgIGRvbmUKKysgIGZpCisrXSkKKysKKytkbmwgQUNfTElCX0FQUEVORFRPVkFSKFZBUiwgQ09OVEVOVFMpIGFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIENPTlRFTlRTIHRvIFZBUiwKKytkbmwgdW5sZXNzIGFscmVhZHkgcHJlc2VudCBpbiBWQVIuCisrZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKKytkbmwgY29udGFpbnMgdHdvIG9yIHRocmVlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHRoYXQgYmVsb25nIHRvZ2V0aGVyLgorK0FDX0RFRlVOKFtBQ19MSUJfQVBQRU5EVE9WQVJdLAorK1sKKysgIGZvciBlbGVtZW50IGluIFskMl07IGRvCisrICAgIGhhdmVpdD0KKysgICAgZm9yIHggaW4gJFskMV07IGRvCisrICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KKysgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgIGJyZWFrCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgIFskMV09IiR7WyQxXX0ke1skMV06KyB9JGVsZW1lbnQiCisrICAgIGZpCisrICBkb25lCisrXSkKKysKKysjIGxpYi1sZC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBTdWJyb3V0aW5lcyBvZiBsaWJ0b29sLm00LAorK2RubCB3aXRoIHJlcGxhY2VtZW50cyBzL0FDXy9BQ19MSUIvIGFuZCBzL2x0X2N2L2FjbF9jdi8gdG8gYXZvaWQgY29sbGlzaW9uCisrZG5sIHdpdGggbGlidG9vbC5tNC4KKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgd2l0aF9nbnVfbGQgdG8geWVzIG9yIG5vLgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAorK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBhY2xfY3ZfcHJvZ19nbnVfbGQsCisrWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKysqR05VKiB8ICond2l0aCBCRkQnKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD15ZXMgOzsKKysqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPW5vIDs7CisrZXNhY10pCisrd2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAorK10pCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgorK0FDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF0sCisrW0FDX0FSR19XSVRIKGdudS1sZCwKKytbICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKKyt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMsIHdpdGhfZ251X2xkPW5vKQorK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorK2FjX3Byb2c9bGQKKytpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5IEdDQ10pCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqKQorKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKKysgICopCisrICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKysgIGVzYWMKKysgIGNhc2UgJGFjX3Byb2cgaW4KKysgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisrICAgIFtbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopXQorKyAgICAgIFtyZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nXQorKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRoIG9mIGxkCisrICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKKysgICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKysJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICJzJSRyZV9kaXJlbHQlLyUiYAorKyAgICAgIGRvbmUKKysgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKysgICAgICA7OworKyAgIiIpCisrICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorKyAgICBhY19wcm9nPWxkCisrICAgIDs7CisrICAqKQorKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisrICAgIHdpdGhfZ251X2xkPXVua25vd24KKysgICAgOzsKKysgIGVzYWMKKytlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCisrZWxzZQorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCisrZmkKKytBQ19DQUNIRV9WQUwoYWNsX2N2X3BhdGhfTEQsCisrW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKysgIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCisrICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKysgICAgICBhY2xfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKysgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisrICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorKyAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCisrICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsgOzsKKysgICAgICAqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysgIGRvbmUKKysgIElGUz0iJGFjX3NhdmVfaWZzIgorK2Vsc2UKKysgIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorK2ZpXSkKKytMRD0iJGFjbF9jdl9wYXRoX0xEIgorK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoJExEKQorK2Vsc2UKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKyt0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorK0FDX0xJQl9QUk9HX0xEX0dOVQorK10pCisrCisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCisrCisrIyBDaGVjayBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5LgorKworKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysjIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrIyAwMjExMS0xMzA3LCBVU0EuCisrCisrIyBQcmVwYXJlIGZvciBzdWJzdGl0dXRpbmcgPHN0ZGJvb2wuaD4gaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4KKysKKytBQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQk9PTF0pCisrCisrICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorKworKyAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCisrICAgIFNUREJPT0xfSD0nJworKyAgZWxzZQorKyAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKysgIGZpCisrICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKysKKysgIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorKyAgICBIQVZFX19CT09MPTEKKysgIGVsc2UKKysgICAgSEFWRV9fQk9PTD0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorK10pCisrCisrIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTQuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorKyMgaGF2ZSB0aGlzIG1hY3JvIGJ1aWx0LWluLgorKworK0FDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAorKyAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysJICAjaWZuZGVmIGJvb2wKKysJICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIHRydWUKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgdHJ1ZSAhPSAxCisrCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisrCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCisrCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisrCisrCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworKwkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisrCSAgYm9vbCBlID0gJnM7CisrCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisrCSAgY2hhciBnW3RydWVdOworKwkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisrCSAgY2hhciBpW3NpemVvZiBzLnRdOworKwldLAorKwlbIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7IF0sCisrCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCisrCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vXSldKQorKyAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCisrICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1REQk9PTF9ILCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS5dKQorKyAgIGZpXSkKKysKKysjc2VyaWFsIDUKKysKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcKKysKKytkbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorK2RubCB1c3VhbGx5IGluIDx1dGltZS5oPi4KKytkbmwgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLgorKworK0FDX0RFRlVOKFtqbV9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSwKKytbCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1RJTUVdKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdXRpbWJ1Zl0sIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiwKKysgICAgW0FDX1RSWV9DT01QSUxFKAorKyAgICAgIFsKKysjaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbHNlCisrIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKysjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyMgZWxzZQorKyMgIGluY2x1ZGUgPHRpbWUuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2lmZGVmIEhBVkVfVVRJTUVfSAorKyMgaW5jbHVkZSA8dXRpbWUuaD4KKysjZW5kaWYKKysgICAgICBdLAorKyAgICAgIFtzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3RpbWUgPSB4Lm1vZHRpbWU7XSwKKysgICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzLAorKyAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubykKKysgICAgXSkKKysKKysgIGlmIHRlc3QgJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfVVRJTUJVRiwgMSwKKysgICAgICBbRGVmaW5lIGlmIHN0cnVjdCB1dGltYnVmIGlzIGRlY2xhcmVkIC0tIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorKyAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCisrICBmaQorK10pCisrCisrIyBvbmNlb25seS5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCisrZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworK2RubCAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0ZVTkNTCisrZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKKytkbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworK2RubCBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGNoZWNrIGZvciBlYWNoIG9mIHRoZSBoZWFkZXJzL2Z1bmN0aW9ucy9kZWNscworK2RubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKKytkbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKKytkbmwgaXMgcnVuLgorK2RubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQorK2RubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorK2RubCBpbnNpZGUgYW4gQUNfREVGVU5lZCBmdW5jdGlvbiwgdGhlIGdsX0NIRUNLX0hFQURFUlMgbWFjcm8gY2FsbCBleHBhbmRzIHRvCisrZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCisrZG5sIGZ1bmN0aW9uLgorKworK2RubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCisrQUNfUFJFUkVRKDIuNTQpCisrCisrIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfSEVBREVSUyhIRUFERVIxIEhFQURFUjIgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfSEVBREVSX05BTUVdLCBbJDFdLCBbCisrICAgIEFDX0RFRlVOKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCisrICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhnbF9IRUFERVJfTkFNRSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSkKKysgIF0pCisrXSkKKysKKysjIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCisrIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfRlVOQ19OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSksIFsKKysgICAgICBBQ19DSEVDS19GVU5DUyhtNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfRlVOQ19dbTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCisrICBdKQorK10pCisrCisrIyBBQ19DSEVDS19ERUNMU19PTkNFKERFQ0wxIERFQ0wyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfREVDTFMoREVDTDEsIERFQ0wyLCAuLi4pLgorK0FDX0RFRlVOKFtBQ19DSEVDS19ERUNMU19PTkNFXSwgWworKyAgOgorKyAgQUNfRk9SRUFDSChbZ2xfREVDTF9OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSksIFsKKysgICAgICBBQ19DSEVDS19ERUNMUyhtNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKysgICAgXSkKKysgICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfREVDTF9dbTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCisrICBdKQorK10pCisrCisgIyBiYWNrdXBmaWxlLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMjEsNiArMTA3Niw3IEBACisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RyaW5nLmggdW5pc3RkLmgpCisgICBBQ19DSEVDS19GVU5DUyhwYXRoY29uZikKKyBdKQorKworICNzZXJpYWwgNQorIAorIGRubCBGcm9tIEppbSBNZXllcmluZy4KK0BAIC02MywzMSArMTExOSw3IEBACisgICAgZmkKKyAgIF0KKyApCistIyBkaXJuYW1lLm00IHNlcmlhbCAxCistZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9ESVJOQU1FXSwKKy1bCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5oLgorLSAgQUNfUkVRVUlSRShbam1fQUNfRE9TXSkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvYmFzZW5hbWUuYy4KKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKy0KKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJpcHNsYXNoLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistXSkKKyAjc2VyaWFsIDUKKyAKKyAjIERlZmluZSBzb21lIG1hY3JvcyByZXF1aXJlZCBmb3IgcHJvcGVyIG9wZXJhdGlvbiBvZiBjb2RlIGluIGxpYi8qLmMKK0BAIC0xNDEsNiArMTE3MywzMyBAQAorICAgICAgIFtEZWZpbmUgaWYgdGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgbWF5IGFsc28gc2VydmUgYXMgYSBmaWxlIG5hbWUKKyAgICAgICAgY29tcG9uZW50IHNlcGFyYXRvci5dKQorICAgXSkKKysKKysjIGRpcm5hbWUubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0RJUk5BTUVdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmguCisrICBBQ19SRVFVSVJFKFtqbV9BQ19ET1NdKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9iYXNlbmFtZS5jLgorKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorKworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0cmlwc2xhc2guYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKytdKQorKworICNzZXJpYWwgNworIAorIEFDX0RFRlVOKFtnbF9FUlJPUl0sCitAQCAtMTU5LDcgKzEyMTgsNjcgQEAKKyAgIEFDX0NIRUNLX0RFQ0xTKFtzdHJlcnJvcl0pCisgICBBQ19GVU5DX1NUUkVSUk9SX1IKKyBdKQorLSMgZ2V0b3B0Lm00IHNlcmlhbCAxCisrCisrIyBtZW1jaHIubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ0hSXSwKKytbCisrICBBQ19SRVBMQUNFX0ZVTkNTKG1lbWNocikKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKysgICAgam1fUFJFUkVRX01FTUNIUgorKyAgZmkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtY2hyLmMuCisrQUNfREVGVU4oW2ptX1BSRVJFUV9NRU1DSFJdLCBbCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0UobGltaXRzLmggc3RkbGliLmgpCisrICBBQ19DSEVDS19IRUFERVJTKGJwLXN5bS5oKQorK10pCisrCisrIyBybWRpci5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfRlVOQ19STURJUl0sCisrWworKyAgQUNfUkVQTEFDRV9GVU5DUyhybWRpcikKKysgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcm1kaXIgPSBubzsgdGhlbgorKyAgICBnbF9QUkVSRVFfUk1ESVIKKysgIGZpCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JtZGlyLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9STURJUl0sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVEFUXSkKKysgIDoKKytdKQorKworKworKyMgZ2V0b3B0Lm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9HRVRPUFRdLAorK1sKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9nZXRvcHQuYy4KKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKytdKQorKworKyMgeGFsbG9jLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTE2NywxMSArMTI4NiwyNSBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9HRVRPUFRdLAorK0FDX0RFRlVOKFtnbF9YQUxMT0NdLAorIFsKKy0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9nZXRvcHQuYy4KKysgIGdsX1BSRVJFUV9YTUFMTE9DCisrICBnbF9QUkVSRVFfWFNUUkRVUAorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94bWFsbG9jLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9YTUFMTE9DXSwgWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorKyAgQUNfUkVRVUlSRShbam1fRlVOQ19NQUxMT0NdKQorKyAgQUNfUkVRVUlSRShbam1fRlVOQ19SRUFMTE9DXSkKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveHN0cmR1cC5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfWFNUUkRVUF0sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKyBdKQorKworICMgbWFsbG9jLm00IHNlcmlhbCA3CisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMTk3LDY2ICsxMzMwLDggQEAKKyBBQ19ERUZVTihbZ2xfUFJFUkVRX01BTExPQ10sIFsKKyAgIDoKKyBdKQorLSMgbWJydG93Yy5tNCBzZXJpYWwgNQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorLQorLWRubCBGcm9tIFBhdWwgRWdnZXJ0CistCistZG5sIFRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCwgYW5kIGptX0ZVTkNfTUJSVE9XQyByZXBsYWNlZCB3aXRoCistZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjU3IGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCistCistQUNfREVGVU4oW2ptX0ZVTkNfTUJSVE9XQ10sCistWworLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZF0sCistICAgIGptX2N2X2Z1bmNfbWJydG93YywKKy0gICAgW0FDX1RSWV9MSU5LKAorLSAgICAgICBbI2luY2x1ZGUgPHdjaGFyLmg+XSwKKy0gICAgICAgW21ic3RhdGVfdCBzdGF0ZTsgcmV0dXJuICEgKHNpemVvZiBzdGF0ZSAmJiBtYnJ0b3djKTtdLAorLSAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9eWVzLAorLSAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9bm8pXSkKKy0gIGlmIHRlc3QgJGptX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9NQlJUT1dDLCAxLAorLSAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCistICBmaQorLV0pCistIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCistCistIyBGcm9tIFBhdWwgRWdnZXJ0LgorLQorLSMgQmVPUyA1IGhhcyA8d2NoYXIuaD4gYnV0IGRvZXMgbm90IGRlZmluZSBtYnN0YXRlX3QsCistIyBzbyB5b3UgY2FuJ3QgZGVjbGFyZSBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgorLSMgQ2hlY2sgZm9yIHRoaXMgaW5jb21wYXRpYmlsaXR5IHdpdGggU3RhbmRhcmQgQy4KKyAKKy0jIEFDX1RZUEVfTUJTVEFURV9UCistIyAtLS0tLS0tLS0tLS0tLS0tLQorLUFDX0RFRlVOKFtBQ19UWVBFX01CU1RBVEVfVF0sCistICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKKy0gICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0JW0FDX0xBTkdfUFJPR1JBTSgKKy0JICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKy0jCSAgICBpbmNsdWRlIDx3Y2hhci5oPl0sCistCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKKy0JW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCistCVthY19jdl90eXBlX21ic3RhdGVfdD1ub10pXSkKKy0gICBpZiB0ZXN0ICRhY19jdl90eXBlX21ic3RhdGVfdCA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKFtIQVZFX01CU1RBVEVfVF0sIDEsCistCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorLSAgIGVsc2UKKy0gICAgIEFDX0RFRklORShbbWJzdGF0ZV90XSwgaW50LAorLQkgICAgICAgW0RlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS5dKQorLSAgIGZpXSkKKy0jIG1lbWNoci5tNCBzZXJpYWwgMQorKyMgcmVhbGxvYy5tNCBzZXJpYWwgNworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC0yNjQsMTE2ICsxMzM5LDI0IEBACisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistQUNfREVGVU4oW2dsX0ZVTkNfTUVNQ0hSXSwKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCisrZG5sIERldGVybWluZSB3aGV0aGVyIHJlYWxsb2Mgd29ya3Mgd2hlbiBib3RoIGFyZ3VtZW50cyBhcmUgMC4KKytkbmwgSWYgaXQgZG9lc24ndCwgYXJyYW5nZSB0byB1c2UgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX1JFQUxMT0NdLAorIFsKKy0gIEFDX1JFUExBQ0VfRlVOQ1MobWVtY2hyKQorLSAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1jaHIgPSBubzsgdGhlbgorLSAgICBqbV9QUkVSRVFfTUVNQ0hSCisrICBBQ19SRVFVSVJFKFtBQ19GVU5DX1JFQUxMT0NdKQorKyAgZG5sIGF1dG9jb25mIDwgMi41NyB1c2VkIHRoZSBzeW1ib2wgYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzLgorKyAgaWYgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA9IFhubyB8fCB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY193b3JrcyIgPSBYbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX1JFQUxMT0MKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbWNoci5jLgorLUFDX0RFRlVOKFtqbV9QUkVSRVFfTUVNQ0hSXSwgWworLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0ZGxpYi5oKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhicC1zeW0uaCkKKy1dKQorLSNzZXJpYWwgMQorLQorLWRubCBGcm9tIE11bWl0IEtoYW4gYW5kIFBhdWwgRWdnZXJ0CistZG5sIERldGVybWluZSB3aGV0aGVyIG1rZGlyIGFjY2VwdHMgb25seSBvbmUgYXJndW1lbnQgaW5zdGVhZCBvZiB0aGUgdXN1YWwgdHdvLgorLQorLUFDX0RFRlVOKFtQQVRDSF9GVU5DX01LRElSX1RBS0VTX09ORV9BUkddLAorLSAgW0FDX0NIRUNLX0ZVTkNTKG1rZGlyKQorLSAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50XSwKKy0gICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcsCistICAgICBbcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworLSAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKy0gICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistCSAgXSwKKy0JICBbbWtkaXIgKCIuIiwgMCk7XSwKKy0JICAsCistCSAgW0FDX1RSWV9DT01QSUxFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CistCSAgICAgXSwKKy0JICAgICBbbWtkaXIgKCIuIik7XSwKKy0JICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPXllcworLQkgICldCistCSkKKy0gICAgICBmaQorLSAgICAgXQorLSAgICkKKy0gICBpZiB0ZXN0ICRwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnID0geWVzOyB0aGVuCistICAgICBBQ19ERUZJTkUoW01LRElSX1RBS0VTX09ORV9BUkddLCAxLAorLSAgICAgICBbRGVmaW5lIGlmIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50Ll0pCistICAgZmkKKy0gIF0KKy0pCistIyBvbmNlb25seS5tNCBzZXJpYWwgMworLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy1kbmwgVGhpcyBmaWxlIGRlZmluZXMgc29tZSAib25jZSBvbmx5IiB2YXJpYW50cyBvZiBzdGFuZGFyZCBhdXRvY29uZiBtYWNyb3MuCistZG5sICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfSEVBREVSUworLWRubCAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0ZVTkNTCistZG5sICAgQUNfQ0hFQ0tfREVDTFNfT05DRSAgICAgICAgICAgbGlrZSAgQUNfQ0hFQ0tfREVDTFMKKy1kbmwgICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pICBsaWtlICBBQ19IRUFERVJfU1REQworLWRubCBUaGUgYWR2YW50YWdlIGlzIHRoYXQgdGhlIGNoZWNrIGZvciBlYWNoIG9mIHRoZSBoZWFkZXJzL2Z1bmN0aW9ucy9kZWNscworLWRubCB3aWxsIGJlIHB1dCBvbmx5IG9uY2UgaW50byB0aGUgJ2NvbmZpZ3VyZScgZmlsZS4gSXQga2VlcHMgdGhlIHNpemUgb2YKKy1kbmwgdGhlICdjb25maWd1cmUnIGZpbGUgZG93biwgYW5kIGF2b2lkcyByZWR1bmRhbnQgb3V0cHV0IHdoZW4gJ2NvbmZpZ3VyZScKKy1kbmwgaXMgcnVuLgorLWRubCBUaGUgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY2hlY2tzIGNhbm5vdCBiZSBjb25kaXRpb25hbGl6ZWQuIElmIHlvdSB3cml0ZQorLWRubCAgIGlmIHNvbWVfY29uZGl0aW9uOyB0aGVuIGdsX0NIRUNLX0hFQURFUlMoc3RkbGliLmgpOyBmaQorLWRubCBpbnNpZGUgYW4gQUNfREVGVU5lZCBmdW5jdGlvbiwgdGhlIGdsX0NIRUNLX0hFQURFUlMgbWFjcm8gY2FsbCBleHBhbmRzIHRvCistZG5sIGVtcHR5LCBhbmQgdGhlIGNoZWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBib2R5IG9mIHRoZSBBQ19ERUZVTmVkCistZG5sIGZ1bmN0aW9uLgorLQorLWRubCBBdXRvY29uZiB2ZXJzaW9uIDIuNTcgb3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQuCistQUNfUFJFUkVRKDIuNTQpCistCistIyBBQ19DSEVDS19IRUFERVJTX09OQ0UoSEVBREVSMSBIRUFERVIyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorLSMgQUNfQ0hFQ0tfSEVBREVSUyhIRUFERVIxIEhFQURFUjIgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfSEVBREVSU19PTkNFXSwgWworLSAgOgorLSAgQUNfRk9SRUFDSChbZ2xfSEVBREVSX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19IRUFERVJfXW00X3F1b3RlKHRyYW5zbGl0KG00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstLi9dLCBbX19fXSkpLCBbCistICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhnbF9IRUFERVJfTkFNRSkKKy0gICAgXSkKKy0gICAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChnbF9IRUFERVJfTkFNRSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSkKKy0gIF0pCistXSkKKy0KKy0jIEFDX0NIRUNLX0ZVTkNTX09OQ0UoRlVOQzEgRlVOQzIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCistIyBBQ19DSEVDS19GVU5DUyhGVU5DMSBGVU5DMiAuLi4pLgorLUFDX0RFRlVOKFtBQ19DSEVDS19GVU5DU19PTkNFXSwgWworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcmVhbGxvYy5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfUkVBTExPQ10sIFsKKyAgIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0ZVTkNfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pLCBbCistICAgICAgQUNfQ0hFQ0tfRlVOQ1MobTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorLSAgXSkKKyBdKQorIAorLSMgQUNfQ0hFQ0tfREVDTFNfT05DRShERUNMMSBERUNMMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKy0jIEFDX0NIRUNLX0RFQ0xTKERFQ0wxLCBERUNMMiwgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfREVDTFNfT05DRV0sIFsKKy0gIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0RFQ0xfTkFNRV0sIFskMV0sIFsKKy0gICAgQUNfREVGVU4oW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pLCBbCistICAgICAgQUNfQ0hFQ0tfREVDTFMobTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorLSAgXSkKKy1dKQorICMgcXVvdGUubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC0zODcsNiArMTM3MCw3IEBACisgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcXVvdGUuYy4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdGRkZWYuaCkKKyBdKQorKworICMgcXVvdGVhcmcubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKK0BAIC00MDMsMzIgKzEzODcsNjkgQEAKKyAgIEFDX1RZUEVfTUJTVEFURV9UCisgICBqbV9GVU5DX01CUlRPV0MKKyBdKQorLSMgcmVhbGxvYy5tNCBzZXJpYWwgNworLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBtYnN0YXRlX3QubTQgc2VyaWFsIDkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisgZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisgZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisgZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgCistZG5sIEZyb20gSmltIE1leWVyaW5nLgorLWRubCBEZXRlcm1pbmUgd2hldGhlciByZWFsbG9jIHdvcmtzIHdoZW4gYm90aCBhcmd1bWVudHMgYXJlIDAuCistZG5sIElmIGl0IGRvZXNuJ3QsIGFycmFuZ2UgdG8gdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKysjIEZyb20gUGF1bCBFZ2dlcnQuCisgCistQUNfREVGVU4oW2ptX0ZVTkNfUkVBTExPQ10sCisrIyBCZU9TIDUgaGFzIDx3Y2hhci5oPiBidXQgZG9lcyBub3QgZGVmaW5lIG1ic3RhdGVfdCwKKysjIHNvIHlvdSBjYW4ndCBkZWNsYXJlIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCisrIyBDaGVjayBmb3IgdGhpcyBpbmNvbXBhdGliaWxpdHkgd2l0aCBTdGFuZGFyZCBDLgorKworKyMgQUNfVFlQRV9NQlNUQVRFX1QKKysjIC0tLS0tLS0tLS0tLS0tLS0tCisrQUNfREVGVU4oW0FDX1RZUEVfTUJTVEFURV9UXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG1ic3RhdGVfdF0sIGFjX2N2X3R5cGVfbWJzdGF0ZV90LAorKyAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKwlbQUNfTEFOR19QUk9HUkFNKAorKwkgICBbQUNfSU5DTFVERVNfREVGQVVMVAorKyMJICAgIGluY2x1ZGUgPHdjaGFyLmg+XSwKKysJICAgW21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7XSldLAorKwlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9eWVzXSwKKysJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PW5vXSldKQorKyAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoW0hBVkVfTUJTVEFURV9UXSwgMSwKKysJICAgICAgIFtEZWZpbmUgdG8gMSBpZiA8d2NoYXIuaD4gZGVjbGFyZXMgbWJzdGF0ZV90Ll0pCisrICAgZWxzZQorKyAgICAgQUNfREVGSU5FKFttYnN0YXRlX3RdLCBpbnQsCisrCSAgICAgICBbRGVmaW5lIHRvIGEgdHlwZSBpZiA8d2NoYXIuaD4gZG9lcyBub3QgZGVmaW5lLl0pCisrICAgZmldKQorKworKyMgbWJydG93Yy5tNCBzZXJpYWwgNQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0CisrCisrZG5sIFRoaXMgZmlsZSBjYW4gYmUgcmVtb3ZlZCwgYW5kIGptX0ZVTkNfTUJSVE9XQyByZXBsYWNlZCB3aXRoCisrZG5sIEFDX0ZVTkNfTUJSVE9XQywgd2hlbiBhdXRvY29uZiAyLjU3IGNhbiBiZSBhc3N1bWVkIGV2ZXJ5d2hlcmUuCisrCisrQUNfREVGVU4oW2ptX0ZVTkNfTUJSVE9XQ10sCisgWworLSAgQUNfUkVRVUlSRShbQUNfRlVOQ19SRUFMTE9DXSkKKy0gIGRubCBhdXRvY29uZiA8IDIuNTcgdXNlZCB0aGUgc3ltYm9sIGFjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcy4KKy0gIGlmIHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPSBYbm8gfHwgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MiID0gWG5vOyB0aGVuCistICAgIGdsX1BSRVJFUV9SRUFMTE9DCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkXSwKKysgICAgam1fY3ZfZnVuY19tYnJ0b3djLAorKyAgICBbQUNfVFJZX0xJTksoCisrICAgICAgIFsjaW5jbHVkZSA8d2NoYXIuaD5dLAorKyAgICAgICBbbWJzdGF0ZV90IHN0YXRlOyByZXR1cm4gISAoc2l6ZW9mIHN0YXRlICYmIG1icnRvd2MpO10sCisrICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz15ZXMsCisrICAgICAgIGptX2N2X2Z1bmNfbWJydG93Yz1ubyldKQorKyAgaWYgdGVzdCAkam1fY3ZfZnVuY19tYnJ0b3djID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX01CUlRPV0MsIDEsCisrICAgICAgW0RlZmluZSB0byAxIGlmIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWQuXSkKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JlYWxsb2MuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1JFQUxMT0NdLCBbCistICA6CistXSkKKy0jIHJtZGlyLm00IHNlcmlhbCAxCisrIyBoYXNoLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorQEAgLTQzNiwxOCArMTQ1Nyw3MSBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9GVU5DX1JNRElSXSwKKytBQ19ERUZVTihbZ2xfSEFTSF0sCisgWworLSAgQUNfUkVQTEFDRV9GVU5DUyhybWRpcikKKy0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcm1kaXIgPSBubzsgdGhlbgorLSAgICBnbF9QUkVSRVFfUk1ESVIKKy0gIGZpCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvaGFzaC5jLgorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0ZGxpYi5oKQorKyAgQUNfSEVBREVSX1NUREJPT0wKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoZnJlZSBtYWxsb2MpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JtZGlyLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9STURJUl0sIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVEFUXSkKKy0gIDoKKytBQ19ERUZVTihbYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUXSwKKysgIFtBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF9uc2VjXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW1lbnNlYyArIHN0LnN0X210aW1lbnNlYyArIHN0LnN0X2N0aW1lbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfbnNlYz15ZXNdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF9uc2VjID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX05TRUMsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBoYXMgbmFub3NlY29uZCB0aW1lc3RhbXBzLl0pCisrICAgZmkKKysKKysgICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdF0sCisrICAgICBbYWNfY3Zfc3RhdF90aW1ldmFsXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDx0aW1lLmg+CisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbS50dl9uc2VjICsgc3Quc3RfbXRpbS50dl9uc2VjICsgc3Quc3RfY3RpbS50dl9uc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPXllc10sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X3RpbWV2YWwgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfVElNRVZBTCwgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGNvbXRhaW5zIHN0cnVjdCB0aW1ldmFsJ3MuXSkKKysgICBmaV0pCisrCisrI3NlcmlhbCA3IC0qLSBhdXRvY29uZiAtKi0KKysKKytkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCisrZG5sCisrZG5sIFNlZSBpZiB0aGUgZ2xpYmMgKl91bmxvY2tlZCBJL08gbWFjcm9zIG9yIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLgorK2RubCBVc2Ugb25seSB0aG9zZSAqX3VubG9ja2VkIG1hY3JvcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgZGVjbGFyZWQKKytkbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVjbGFyZWQgaW4gU29sYXJpcyAyLjUuMSBidXQgd2VyZSByZW1vdmVkCisrZG5sIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQgb24gU29sYXJpcyAyLjUuMSB0byBydW4KKytkbmwgb24gU29sYXJpcyAyLjYpLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSwKKytbCisrICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZmdldHNfdW5sb2NrZWQoKSwgZnB1dHNfdW5sb2NrZWQoKQorKyAgZG5sIGV0Yy4KKysgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKworKyAgQUNfQ0hFQ0tfREVDTFNfT05DRSgKKysgICAgIFtjbGVhcmVycl91bmxvY2tlZCBmZW9mX3VubG9ja2VkIGZlcnJvcl91bmxvY2tlZAorKyAgICAgIGZmbHVzaF91bmxvY2tlZCBmZ2V0c191bmxvY2tlZCBmcHV0Y191bmxvY2tlZCBmcHV0c191bmxvY2tlZAorKyAgICAgIGZyZWFkX3VubG9ja2VkIGZ3cml0ZV91bmxvY2tlZCBnZXRjX3VubG9ja2VkCisrICAgICAgZ2V0Y2hhcl91bmxvY2tlZCBwdXRjX3VubG9ja2VkIHB1dGNoYXJfdW5sb2NrZWRdKQorIF0pCisgCisgIyBDaGVjayBmb3Igc2V0bW9kZSwgRE9TIHN0eWxlLgorQEAgLTQ4OCwxODAgKzE1NjIsMzkgQEAKKyAgICAgIEFDX0RFRklORShIQVZFX1NFVE1PREVfRE9TLCAxLAorICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIERPUy1zdHlsZSBgc2V0bW9kZScgZnVuY3Rpb24uXSkKKyAgICBmaV0pCistIyBDaGVjayBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5LgorLQorLSMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCistIyAwMjExMS0xMzA3LCBVU0EuCistCistIyBQcmVwYXJlIGZvciBzdWJzdGl0dXRpbmcgPHN0ZGJvb2wuaD4gaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4KKy0KKy1BQ19ERUZVTihbQU1fU1REQk9PTF9IXSwKKy1bCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQk9PTF0pCistCistICAjIERlZmluZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0aW9uLgorLQorLSAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuCistICAgIFNUREJPT0xfSD0nJworLSAgZWxzZQorLSAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcKKy0gIGZpCistICBBQ19TVUJTVChbU1REQk9PTF9IXSkKKy0KKy0gIGlmIHRlc3QgIiRhY19jdl90eXBlX19Cb29sIiA9IHllczsgdGhlbgorLSAgICBIQVZFX19CT09MPTEKKy0gIGVsc2UKKy0gICAgSEFWRV9fQk9PTD0wCistICBmaQorLSAgQUNfU1VCU1QoW0hBVkVfX0JPT0xdKQorLV0pCistCistIyBUaGlzIG1hY3JvIGlzIG9ubHkgbmVlZGVkIGluIGF1dG9jb25mIDw9IDIuNTQuICBOZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZgorLSMgaGF2ZSB0aGlzIG1hY3JvIGJ1aWx0LWluLgorLQorLUFDX0RFRlVOKFtBQ19IRUFERVJfU1REQk9PTF0sCistICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTldLAorLSAgICAgW2FjX2N2X2hlYWRlcl9zdGRib29sX2hdLAorLSAgICAgW0FDX1RSWV9DT01QSUxFKAorLQlbCistCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKy0JICAjaWZuZGVmIGJvb2wKKy0JICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQkgICNpZm5kZWYgZmFsc2UKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWYgZmFsc2UKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIHRydWUKKy0JICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWYgdHJ1ZSAhPSAxCistCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCistCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCistCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CistCistCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CistCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworLQkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKy0JICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CistCSAgYm9vbCBlID0gJnM7CistCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CistCSAgY2hhciBnW3RydWVdOworLQkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CistCSAgY2hhciBpW3NpemVvZiBzLnRdOworLQldLAorLQlbIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7IF0sCistCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllc10sCistCVthY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vXSldKQorLSAgIEFDX0NIRUNLX1RZUEVTKFtfQm9vbF0pCistICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKEhBVkVfU1REQk9PTF9ILCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RkYm9vbC5oIGNvbmZvcm1zIHRvIEM5OS5dKQorLSAgIGZpXSkKKy0jc2VyaWFsIDcgLSotIGF1dG9jb25mIC0qLQorLQorLWRubCBGcm9tIEppbSBNZXllcmluZy4KKy1kbmwKKy1kbmwgU2VlIGlmIHRoZSBnbGliYyAqX3VubG9ja2VkIEkvTyBtYWNyb3Mgb3IgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistZG5sIFVzZSBvbmx5IHRob3NlICpfdW5sb2NrZWQgbWFjcm9zIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZAorLWRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWNsYXJlZCBpbiBTb2xhcmlzIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQKKy1kbmwgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdCBvbiBTb2xhcmlzIDIuNS4xIHRvIHJ1bgorLWRubCBvbiBTb2xhcmlzIDIuNikuCistCistQUNfREVGVU4oW2ptX0ZVTkNfR0xJQkNfVU5MT0NLRURfSU9dLAorLVsKKy0gIGRubCBQZXJzdWFkZSBnbGliYyA8c3RkaW8uaD4gdG8gZGVjbGFyZSBmZ2V0c191bmxvY2tlZCgpLCBmcHV0c191bmxvY2tlZCgpCistICBkbmwgZXRjLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistCistICBBQ19DSEVDS19ERUNMU19PTkNFKAorLSAgICAgW2NsZWFyZXJyX3VubG9ja2VkIGZlb2ZfdW5sb2NrZWQgZmVycm9yX3VubG9ja2VkCistICAgICAgZmZsdXNoX3VubG9ja2VkIGZnZXRzX3VubG9ja2VkIGZwdXRjX3VubG9ja2VkIGZwdXRzX3VubG9ja2VkCistICAgICAgZnJlYWRfdW5sb2NrZWQgZndyaXRlX3VubG9ja2VkIGdldGNfdW5sb2NrZWQKKy0gICAgICBnZXRjaGFyX3VubG9ja2VkIHB1dGNfdW5sb2NrZWQgcHV0Y2hhcl91bmxvY2tlZF0pCistXSkKKy0jc2VyaWFsIDUKKy0KKy1kbmwgRnJvbSBKaW0gTWV5ZXJpbmcKKy0KKy1kbmwgRGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgaWYgYHN0cnVjdCB1dGltYnVmJyBpcyBkZWNsYXJlZCAtLQorLWRubCB1c3VhbGx5IGluIDx1dGltZS5oPi4KKy1kbmwgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLgorLQorLUFDX0RFRlVOKFtqbV9DSEVDS19UWVBFX1NUUlVDVF9VVElNQlVGXSwKKy1bCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3lzL3RpbWUuaCB1dGltZS5oKQorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1RJTUVdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgdXRpbWJ1Zl0sIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiwKKy0gICAgW0FDX1RSWV9DT01QSUxFKAorLSAgICAgIFsKKy0jaWZkZWYgVElNRV9XSVRIX1NZU19USU1FCistIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorLSMgaW5jbHVkZSA8dGltZS5oPgorLSNlbHNlCistIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKy0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgorLSMgZWxzZQorLSMgIGluY2x1ZGUgPHRpbWUuaD4KKy0jIGVuZGlmCistI2VuZGlmCistI2lmZGVmIEhBVkVfVVRJTUVfSAorLSMgaW5jbHVkZSA8dXRpbWUuaD4KKy0jZW5kaWYKKy0gICAgICBdLAorLSAgICAgIFtzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3RpbWUgPSB4Lm1vZHRpbWU7XSwKKy0gICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9eWVzLAorLSAgICAgIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubykKKy0gICAgXSkKKyAKKy0gIGlmIHRlc3QgJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiA9IHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfVVRJTUJVRiwgMSwKKy0gICAgICBbRGVmaW5lIGlmIHN0cnVjdCB1dGltYnVmIGlzIGRlY2xhcmVkIC0tIHVzdWFsbHkgaW4gPHV0aW1lLmg+LgorLSAgICAgICBTb21lIHN5c3RlbXMgaGF2ZSB1dGltZS5oIGJ1dCBkb24ndCBkZWNsYXJlIHRoZSBzdHJ1Y3QgYW55d2hlcmUuIF0pCistICBmaQorLV0pCistIyB4YWxsb2MubTQgc2VyaWFsIDEKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrI3NlcmlhbCAxCisgCistQUNfREVGVU4oW2dsX1hBTExPQ10sCistWworLSAgZ2xfUFJFUkVRX1hNQUxMT0MKKy0gIGdsX1BSRVJFUV9YU1RSRFVQCistXSkKKytkbmwgRnJvbSBNdW1pdCBLaGFuIGFuZCBQYXVsIEVnZ2VydAorK2RubCBEZXRlcm1pbmUgd2hldGhlciBta2RpciBhY2NlcHRzIG9ubHkgb25lIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHVzdWFsIHR3by4KKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3htYWxsb2MuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1hNQUxMT0NdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19SRVFVSVJFKFtqbV9GVU5DX01BTExPQ10pCistICBBQ19SRVFVSVJFKFtqbV9GVU5DX1JFQUxMT0NdKQorLV0pCisrQUNfREVGVU4oW1BBVENIX0ZVTkNfTUtESVJfVEFLRVNfT05FX0FSR10sCisrICBbQUNfQ0hFQ0tfRlVOQ1MobWtkaXIpCisrICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnRdLAorKyAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZywKKysgICAgIFtwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCisrICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICBdLAorKwkgIFtta2RpciAoIi4iLCAwKTtdLAorKwkgICwKKysJICBbQUNfVFJZX0NPTVBJTEUoWworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAgICBdLAorKwkgICAgIFtta2RpciAoIi4iKTtdLAorKwkgICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9eWVzCisrCSAgKV0KKysJKQorKyAgICAgIGZpCisrICAgICBdCisrICAgKQorKyAgIGlmIHRlc3QgJHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShbTUtESVJfVEFLRVNfT05FX0FSR10sIDEsCisrICAgICAgIFtEZWZpbmUgaWYgbWtkaXIgdGFrZXMgb25seSBvbmUgYXJndW1lbnQuXSkKKysgICBmaQorKyAgXQorKykKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzdHJkdXAuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1hTVFJEVVBdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbmZpZ3VyZQorKysrIHBhdGNoLTIuNS45L2NvbmZpZ3VyZQorQEAgLTEsMTEgKzEsMTAgQEAKKyAjISAvYmluL3NoCisgIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3IGZvciBwYXRjaCAyLjUuOS4KKysjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSBmb3IgcGF0Y2ggMi41LjkuCisgIworICMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1wYXRjaEBnbnUub3JnPi4KKyAjCistIyBDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgorLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworQEAgLTIyLDkgKzIxLDEwIEBACisgZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIHNldCAtbyBwb3NpeAorIGZpCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgYXNfdW5zZXQ9dW5zZXQKKyBlbHNlCisgICBhc191bnNldD1mYWxzZQorQEAgLTQzLDcgKzQzLDcgQEAKKyAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICBMQ19URUxFUEhPTkUgTENfVElNRQorIGRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCisgICAgICRhc191bnNldCAkYXNfdmFyCitAQCAtMjIwLDE2ICsyMjAsMTcgQEAKKyBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgICBhc19ta2Rpcl9wPToKKyBlbHNlCisrICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICAgYXNfbWtkaXJfcD1mYWxzZQorIGZpCisgCisgYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KKy1hc190cl9jcHA9InNlZCB5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KKy1hc190cl9zaD0ic2VkIHklKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWciCisrYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKyAKKyAKKyAjIElGUworQEAgLTY2OSw3ICs2NzAsNyBAQAorIAorICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorIGZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorLSAgICAgICAgICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCisrCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorIGRvCisgICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKyAgIGNhc2UgJGFjX3ZhbCBpbgorQEAgLTcwOSwxMCArNzEwLDEwIEBACisgICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gaXRzIHBhcmVudC4KKyAgIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKy0gICAgICAgICBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCistICAgICAgICAgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisrCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJDAiIDogJ1hcKC9cKScgXHwgXAorKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CisgZWNobyBYIiQwIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC04MDQsOSArODA1LDkgQEAKKyAgIGNhdCA8PF9BQ0VPRgorIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyRhY19kZWZhdWx0X3ByZWZpeF0KKysJCQkgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW1BSRUZJWF0KKysJCQkgIFtQUkVGSVhdCisgCisgQnkgZGVmYXVsdCwgXGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCBhbGwgdGhlIGZpbGVzIGluCisgXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK0BAIC04OTYsMTIgKzg5Nyw0NSBAQAorICAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7CisgZXNhYworLSMgRG9uJ3QgYmxpbmRseSBwZXJmb3JtIGEgYGNkICIkYWNfZGlyIi8kYWNfZm9vICYmIHB3ZGAgc2luY2UgJGFjX2ZvbyBjYW4gYmUKKy0jIGFic29sdXRlLgorLWFjX2Fic19idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19idWlsZGRpciAmJiBwd2RgCistYWNfYWJzX3RvcF9idWlsZGRpcj1gY2QgIiRhY19kaXIiICYmIGNkICR7YWNfdG9wX2J1aWxkZGlyfS4gJiYgcHdkYAorLWFjX2Fic19zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfc3JjZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY190b3Bfc3JjZGlyICYmIHB3ZGAKKysKKysjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKysjIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorK2Nhc2UgYHB3ZGAgaW4KKysuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysqKQorKyAgY2FzZSAiJGFjX2RpciIgaW4KKysgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysqKQorKyAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCisrICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysgICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrKikKKysgIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKysgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKysgIGVzYWM7OworK2VzYWMKKyAKKyAgICAgY2QgJGFjX2RpcgorICAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorQEAgLTkxMiwxMyArOTQ2LDEzIEBACisgICAgICAgZWNobworICAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQorICAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuYWMgfHwKKy0gICAgICAgICAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKysJICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgICBlbHNlCisgICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgICBmaQorLSAgICBjZCAkYWNfcG9wZGlyCisrICAgIGNkICIkYWNfcG9wZGlyIgorICAgZG9uZQorIGZpCisgCitAQCAtOTI2LDEwICs5NjAsOSBAQAorIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgIGNhdCA8PFxfQUNFT0YKKyBwYXRjaCBjb25maWd1cmUgMi41LjkKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKKyAKKy1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMgorLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyBfQUNFT0YKK0BAIC05NDEsNyArOTc0LDcgQEAKKyBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorIAorIEl0IHdhcyBjcmVhdGVkIGJ5IHBhdGNoICRhc19tZSAyLjUuOSwgd2hpY2ggd2FzCistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisgCisgICAkICQwICRACisgCitAQCAtMTAxOCwxOSArMTA1MSwxOSBAQAorICAgICAyKQorICAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisgICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCistICAgICAgICBhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisrCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICRhY19hcmcgaW4KKy0gICAgICAgICAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCistICAgICAgICAgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKy0gICAgICAgICAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorLSAgICAgICAgICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKy0gICAgICAgICAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKy0gICAgICAgICAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CistICAgICAgICAgICAgZXNhYworLSAgICAgICAgICAgIDs7CistICAgICAgICAgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworLSAgICAgICAgZXNhYworKwljYXNlICRhY19hcmcgaW4KKysJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKysJICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCisrCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorKwkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCisrCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisrCSAgICBlc2FjCisrCSAgICA7OworKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworKwllc2FjCisgICAgICAgZmkKKyAgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICAgICAjIEdldCByaWQgb2YgdGhlIGxlYWRpbmcgc3BhY2UuCitAQCAtMTA2NCwxMiArMTA5NywxMiBAQAorICAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgICphY19zcGFjZT1cICopCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKy0gICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisrCSJzLyciJyInLyciJyInXFxcXCciJyInJyInIicvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKKyAgICAgICA7OworICAgICAqKQorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKysJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICAgOzsKKyAgICAgZXNhYzsKKyB9CitAQCAtMTA5OCw3ICsxMTMxLDcgQEAKKyAgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgIGRvCisgCWV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorLSAgICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKysJZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgICBkb25lIHwgc29ydAorICAgICAgIGVjaG8KKyAgICAgZmkKK0BAIC0xMTE3LDcgKzExNTAsNyBAQAorICAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgfSA+JjUKKy0gIHJtIC1mIGNvcmUgY29yZS4qICouY29yZSAmJgorKyAgcm0gLWYgY29yZSAqLmNvcmUgJiYKKyAgIHJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgICAgICAnIDAKK0BAIC0xMTk3LDcgKzEyMzAsNyBAQAorICMgdmFsdWUuCisgYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCisgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8CistICAgICAgICAgICAgICAgc2VkIC1uICdzL15hY19lbnZfXChbYS16QS1aXzAtOV0qXClfc2V0PS4qL1wxL3AnYDsgZG8KKysJICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAorICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorQEAgLTEyMTQsMTMgKzEyNDcsMTMgQEAKKyAgICAgLCk7OworICAgICAqKQorICAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKy0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9CistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKKysJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CisgZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorIGVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKy0gICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisrCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisgICAgICAgZmk7OworICAgZXNhYworICAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorQEAgLTE2MjksNyArMTY2Miw2IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorIAorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xNjQ5LDggKzE2ODEsOCBAQAorICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KKyAjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisgIyBvZiBleGVleHQuCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0Li4uICRFQ0hPX0MiID4mNgorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgorIGFjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rX2RlZmF1bHRcIiIpID4mNQorICAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQorQEAgLTE2NzAsMjMgKzE3MDIsMjMgQEAKKyAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkKKy0gICAgICAgIDs7CisrCTs7CisgICAgIGNvbmZ0ZXN0LiRhY19leHQgKQorLSAgICAgICAgIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKy0gICAgICAgIDs7CisrCSMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCisrCTs7CisgICAgIFthYl0ub3V0ICkKKy0gICAgICAgICMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CistICAgICAgICAjIGNlcnRhaW5seSByaWdodC4KKy0gICAgICAgIGJyZWFrOzsKKysJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKKysJIyBjZXJ0YWlubHkgcmlnaHQuCisrCWJyZWFrOzsKKyAgICAgKi4qICkKKy0gICAgICAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLSAgICAgICAgIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCistICAgICAgICAjIGJ1dCBpdCB3b3VsZCBiZSBjb29sIHRvIGZpbmQgb3V0IGlmIGl0J3MgdHJ1ZS4gIERvZXMgYW55Ym9keQorLSAgICAgICAgIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCistICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CistICAgICAgICBicmVhazs7CisrCWFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorKwkjIEZJWE1FOiBJIGJlbGlldmUgd2UgZXhwb3J0IGFjX2N2X2V4ZWV4dCBmb3IgTGlidG9vbCwKKysJIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKysJIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCisrCWV4cG9ydCBhY19jdl9leGVleHQKKysJYnJlYWs7OworICAgICAqICkKKy0gICAgICAgIGJyZWFrOzsKKysJYnJlYWs7OworICAgZXNhYworIGRvbmUKKyBlbHNlCitAQCAtMTc2MCw4ICsxNzkyLDggQEAKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorLSAgICAgICAgICBleHBvcnQgYWNfY3ZfZXhlZXh0CistICAgICAgICAgIGJyZWFrOzsKKysJICBleHBvcnQgYWNfY3ZfZXhlZXh0CisrCSAgYnJlYWs7OworICAgICAqICkgYnJlYWs7OworICAgZXNhYworIGRvbmUKK0BAIC0xNzg2LDcgKzE4MTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTgzNyw3ICsxODY4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE4NTcsMTEgKzE4ODcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xODc0LDcgKzE5MTMsNyBAQAorIAorIGFjX2NvbXBpbGVyX2dudT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKyAKKyBmaQorQEAgLTE4OTAsNyArMTkyOSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xOTA3LDExICsxOTQ1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTkyNCw3ICsxOTcxLDcgQEAKKyAKKyBhY19jdl9wcm9nX2NjX2c9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgorQEAgLTE5NTEsNyArMTk5OCw2IEBACisgICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KKyBhY19zYXZlX0NDPSRDQworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xOTc5LDYgKzIwMjUsMTYgQEAKKyAgIHZhX2VuZCAodik7CisgICByZXR1cm4gczsKKyB9CisrCisrLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKysgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisrICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisrICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkMSBpcyBhZGRlZCB0byBnZXQKKysgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisrICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisrICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQxLiAgKi8KKytpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworKworIGludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworIHN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9OworIHN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworQEAgLTIwMDUsMTEgKzIwNjEsMjAgQEAKKyAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjAyMiw3ICsyMDg3LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBkb25lCisgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisgQ0M9JGFjX3NhdmVfQ0MKK0BAIC0yMDUwLDE5ICsyMTE1LDI3IEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKKy0gICAnJ1wKKy0gICAnI2luY2x1ZGUgPHN0ZGxpYi5oPicgXAorKyAgICcnIFwKKyAgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAorQEAgLTIwNzAsMTQgKzIxNDMsMTMgQEAKKyAgICAndm9pZCBleGl0IChpbnQpOycKKyBkbworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorICRhY19kZWNsYXJhdGlvbgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyBpbnQKKyBtYWluICgpCisgeworQEAgLTIwODgsMTEgKzIxNjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yMTA1LDkgKzIxODYsOCBAQAorIAorIGNvbnRpbnVlCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjEyNCwxMSArMjIwNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTIxNDAsNyArMjIyOSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGRvbmUKKyBybSAtZiBjb25mdGVzdCoKKyBpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCitAQCAtMjE1NCw3ICsyMjQzLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgYWNfZXh0PWMKKyBhY19jcHA9JyRDUFAgJENQUEZMQUdTJworIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK0BAIC0yMTg5LDcgKzIyNzgsNiBAQAorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIyMDAsNyArMjI4OCw3IEBACisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorKwkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCitAQCAtMjIxMiw2ICsyMzAwLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIyMzIsNyArMjMyMSw2IEBACisgICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjI1MCw2ICsyMzM4LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIyOTYsNyArMjM4NSw2IEBACisgICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjMwNyw3ICsyMzk1LDcgQEAKKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgU3ludGF4IGVycm9yCisrCQkgICAgIFN5bnRheCBlcnJvcgorIF9BQ0VPRgorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKK0BAIC0yMzE5LDYgKzI0MDcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjMzOSw3ICsyNDI4LDYgQEAKKyAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMzU3LDYgKzI0NDUsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjQzMSw2ICsyNTIwLDcgQEAKKyAjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworICMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncworICMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKysjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgorQEAgLTI0NDcsNiArMjUzNyw3IEBACisgY2FzZSAkYXNfZGlyLyBpbgorICAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKyAgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorKyAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisgICAvdXNyL3VjYi8qICkgOzsKKyAgICopCisgICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCitAQCAtMjQ1NCwyMCArMjU0NSwyMCBAQAorICAgICAjIGJ5IGRlZmF1bHQuCisgICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKy0gICAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCistICAgICAgICAgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCistICAgICAgICAgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICAgICAgICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKy0gICAgICAgICAgICA6CistICAgICAgICAgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKy0gICAgICAgICAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCistICAgICAgICAgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCistICAgICAgICAgICAgOgorLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorLSAgICAgICAgICAgIGJyZWFrIDMKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCisrCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisrCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKysJICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKysJICAgIDoKKysJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKysJICAgIDoKKysJICBlbHNlCisrCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisrCSAgICBicmVhayAzCisrCSAgZmkKKysJZmkKKyAgICAgICBkb25lCisgICAgIGRvbmUKKyAgICAgOzsKK0BAIC0yNDk5LDcgKzI1OTAsNyBAQAorIAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2Cistc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5LC4vKy0sX19wXywnYAorK3NldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSw6Li8rLSxfX19wXywnYAorIGlmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCitAQCAtMjU5Niw3ICsyNjg3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFJWCIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQUlYLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNjI4LDcgKzI3MTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjY0OSwxMSArMjczOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTI2NjYsMTIgKzI3NjQsMTEgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjY5Myw3ICsyNzkwLDYgQEAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI3MTgsNyArMjgxNCw2IEBACisgICA6CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI3MzAsOSArMjgyNSw5IEBACisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorICNlbHNlCisgIyBkZWZpbmUgSVNMT1dFUihjKSBcCistICAgICAgICAgICAgICAgICAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKysJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorICNlbmRpZgorIAorQEAgLTI3NDMsNyArMjgzOCw3IEBACisgICBpbnQgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLSAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgIGV4aXQoMik7CisgICBleGl0ICgwKTsKKyB9CitAQCAtMjc2OCw3ICsyODYzLDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGZpCitAQCAtMjc5Myw3ICsyODg4LDcgQEAKKyAKKyAKKyBmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKy0gICAgICAgICAgICAgICAgICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisrCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKKyBkbworIGFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitAQCAtMjgwMiw3ICsyODk3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI4MTQsMTEgKzI5MDgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODMxLDcgKzI5MzQsNyBAQAorIAorIGV2YWwgIiRhc19hY19IZWFkZXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTI4NTgsNyArMjk2MSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBtaW5peC9jb25maWcuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI4NjksMTEgKzI5NzEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yODg2LDcgKzI5OTcsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTI4OTQsNyArMzAwNSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nIG1pbml4L2NvbmZpZy5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yOTEyLDYgKzMwMjIsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMjkzMSwzMyArMzA0MiwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtMzAwMCwxNSArMzExMCwxNSBAQAorIGZpCisgCisgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJyb3IiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzdHJlcnJvci4uLiAkRUNIT19DIiA+JjYKKy1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9zdHJlcnJvcitzZXR9IiA9IHNldDsgdGhlbgorKworKyAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJlcnJvciBpbiAtbGNwb3NpeCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RyZXJyb3IgaW4gLWxjcG9zaXguLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworLWFjX2N2X3NlYXJjaF9zdHJlcnJvcj1ubworKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworK0xJQlM9Ii1sY3Bvc2l4ICAkTElCUyIKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzAzMiw3OSArMzE0Miw0MyBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKy0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCistICBhY19jdl9zZWFyY2hfc3RyZXJyb3I9Im5vbmUgcmVxdWlyZWQiCistZWxzZQorLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKy1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CistCistZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPSBubzsgdGhlbgorLSAgZm9yIGFjX2xpYiBpbiBjcG9zaXg7IGRvCistICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKy0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorLS8qIGNvbmZkZWZzLmguICAqLworLV9BQ0VPRgorLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0vKiBlbmQgY29uZmRlZnMuaC4gICovCistCistLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy0jaWZkZWYgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiCistI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciBzdHJlcnJvciAoKTsKKy1pbnQKKy1tYWluICgpCisteworLXN0cmVycm9yICgpOworLSAgOworLSAgcmV0dXJuIDA7CistfQorLV9BQ0VPRgorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CistaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorLSAgYWNfc3RhdHVzPSQ/CistICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSItbCRhY19saWIiCistYnJlYWsKKysgIGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3I9eWVzCisgZWxzZQorICAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisrYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgZG9uZQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyBmaQorLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciIgPiY2CisraWYgdGVzdCAkYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciA9IHllczsgdGhlbgorKyAgTElCUz0iJExJQlMgLWxjcG9zaXgiCisgZmkKKy1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjUKKy1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjYKKy1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiAhPSBubzsgdGhlbgorLSAgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9zdHJlcnJvciAkTElCUyIKKyAKKy1maQorKworIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sYXJnZWZpbGUgb3IgLS1kaXNhYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGFyZ2VmaWxlK3NldH0iID0gc2V0OyB0aGVuCitAQCAtMzEyNCw4ICszMTk4LDcgQEAKKyAgICAgICAgd2hpbGUgOjsgZG8KKyAgICAgIAkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKyAgICAgIAkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorLSAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKysJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMxNTAsMTEgKzMyMjMsMjAgQEAKKyBfQUNFT0YKKyAgICAgIAkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzE2NiwxNSArMzI0OCwyNCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAgCSBDQz0iJENDIC1uMzIiCisgICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMxODYsOCArMzI3Nyw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorLSAgICAgICAgIGJyZWFrCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKysJIGJyZWFrCisgICAgICAgIGRvbmUKKyAgICAgICAgQ0M9JGFjX3NhdmVfQ0MKKyAgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQEAgLTMyMDcsNyArMzI5OCw2IEBACisgICB3aGlsZSA6OyBkbworICAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9bm8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMjMyLDExICszMzIyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzI0OCw5ICszMzQ3LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzI3NiwxMSArMzM3NCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMyOTIsNyArMzM5OSw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC0zMzE0LDcgKzM0MjEsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19sYXJnZV9maWxlcz1ubworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMzMzksMTEgKzM0NDUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMzU1LDkgKzM0NzAsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMzgzLDExICszNDk3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzM5OSw3ICszNTIyLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTM0NDMsNyArMzU2Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNTA2LDExICszNjI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzUyMyw3ICszNjU0LDcgQEAKKyAKKyBhY19jdl9jX2NvbnN0PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29uc3QiID4mNgorQEAgLTM1NTAsNyArMzY4MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNTcwLDExICszNzAwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzU4Nyw3ICszNzI2LDcgQEAKKyAKKyBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0zNjEwLDcgKzM3NDksNiBAQAorICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzYzNCwxMSArMzc3MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzY1MCwxMiArMzc5NywxMiBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KKyAgIGZvciBhY19saWIgaW4gZGlyOyBkbworICAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNjc5LDExICszODI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNjk2LDcgKzM4NTIsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGRvbmUKKyBmaQorIExJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworQEAgLTM3MTcsNyArMzg3NCw2IEBACisgICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKyBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNzQxLDExICszODk3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zNzU3LDEyICszOTIyLDEyIEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSBubzsgdGhlbgorICAgZm9yIGFjX2xpYiBpbiB4OyBkbworICAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zNzg2LDExICszOTUxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zODAzLDcgKzM5NzcsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGRvbmUKKyBmaQorIExJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworQEAgLTM4MjMsNyArMzk5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zODQ0LDExICs0MDE4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzg2MSwxMiArNDA0NCwxMSBAQAorIAorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zODg4LDcgKzQwNzAsNiBAQAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzkxMyw3ICs0MDk0LDYgQEAKKyAgIDoKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzkyNSw5ICs0MTA1LDkgQEAKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisgI2Vsc2UKKyAjIGRlZmluZSBJU0xPV0VSKGMpIFwKKy0gICAgICAgICAgICAgICAgICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisrCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisrCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisgI2VuZGlmCisgCitAQCAtMzkzOCw3ICs0MTE4LDcgQEAKKyAgIGludCBpOworICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCistICAgICAgICB8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKysJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICAgZXhpdCgyKTsKKyAgIGV4aXQgKDApOworIH0KK0BAIC0zOTYzLDcgKzQxNDMsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZmkKK0BAIC0zOTk5LDcgKzQxNzksNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDAxMCwxMSArNDE4OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQwMjcsNyArNDIxNSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDAzNSw3ICs0MjIzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MDUzLDYgKzQyNDAsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDA3MiwzMyArNDI2MCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworKyAgICA7OworKyAgbm86eWVzOiogKQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorLSAgICA7OworLSAgbm86eWVzICkKKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQxMDksNyArNDI5Niw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDEzMSw3ICs0MzE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQxNTEsMTEgKzQzMzcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MTY4LDcgKzQzNjMsNyBAQAorIAorIGFjX2N2X3R5cGVfbW9kZV90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tb2RlX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX21vZGVfdCIgPiY2CitAQCAtNDE4OCw3ICs0MzgzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQyMDgsMTEgKzQ0MDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MjI1LDcgKzQ0MjgsNyBAQAorIAorIGFjX2N2X3R5cGVfb2ZmX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZl90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2CitAQCAtNDI0NSw3ICs0NDQ4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQyNjUsMTEgKzQ0NjcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MjgyLDcgKzQ0OTMsNyBAQAorIAorIGFjX2N2X3R5cGVfcGlkX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3BpZF90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2CitAQCAtNDMwMiw3ICs0NTEzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQzMjksMTEgKzQ1MzksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MzQ2LDcgKzQ1NjUsNyBAQAorIAorIGFjX2N2X3R5cGVfc2lnbmFsPWludAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduYWwiID4mNgorQEAgLTQzNjIsNyArNDU4MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MzgyLDExICs0NjAwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDM5OSw3ICs0NjI2LDcgQEAKKyAKKyBhY19jdl90eXBlX3NpemVfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2l6ZV90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNgorQEAgLTQ0MTksNyArNDY0Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NDY4LDExICs0Njk0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDQ4NSw3ICs0NzIwLDcgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNgorQEAgLTQ0OTUsNyArNDczMCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NTE1LDExICs0NzQ5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDUzMiw3ICs0Nzc1LDcgQEAKKyAKKyBhY19jdl90eXBlX19Cb29sPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9fQm9vbCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNgorQEAgLTQ1ODksNyArNDgzMiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NjAwLDExICs0ODQyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDYxNyw3ICs0ODY4LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC00NjI1LDcgKzQ4NzYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ2NDMsNiArNDg5Myw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC00NjYyLDMzICs0OTEzLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNDY5OSw3ICs0OTQ5LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC00NzMzLDcgKzQ5ODMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDc0NCwxMSArNDk5MywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ3NjEsNyArNTAxOSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDc2OSw3ICs1MDI3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00Nzg3LDYgKzUwNDQsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDgwNiwzMyArNTA2NCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQ4NDMsNyArNTEwMCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDg2NSw3ICs1MTIyLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ4ODYsMTEgKzUxNDIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00OTAzLDcgKzUxNjgsNyBAQAorIAorIGFjX2N2X2hlYWRlcl90aW1lPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2CitAQCAtNDkzMyw3ICs1MTk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ5NjQsMTEgKzUyMjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00OTgxLDcgKzUyNTQsNyBAQAorIAorIGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1Zj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGZ1X2N2X3N5c19zdHJ1Y3RfdXRpbWJ1ZiIgPiY1CitAQCAtNTAwNSw3ICs1Mjc4LDYgQEAKKyAgIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTA0NSw3ICs1MzE3LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZCIgPiY1CitAQCAtNTA3Niw3ICs1MzQ4LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUwODcsMTEgKzUzNTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MTA0LDcgKzUzODQsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTUxMTIsNyArNTM5Miw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTEzMCw2ICs1NDA5LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTUxNDksMzMgKzU0MjksMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01MTg2LDcgKzU0NjUsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTUyMjAsNyArNTQ5OSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MjMxLDExICs1NTA5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTI0OCw3ICs1NTM1LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01MjU2LDcgKzU1NDMsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUyNzQsNiArNTU2MCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01MjkzLDMzICs1NTgwLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTMzMCw3ICs1NjE2LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01MzY0LDcgKzU2NTAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTM3NSwxMSArNTY2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUzOTIsNyArNTY4Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTQwMCw3ICs1Njk0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NDE4LDYgKzU3MTEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTQzNywzMyArNTczMSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTU0NzQsNyArNTc2Nyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTQ5Nyw3ICs1NzkwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU1MTcsMTEgKzU4MDksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NTM0LDcgKzU4MzUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRlbnY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2CitAQCAtNTU2Miw3ICs1ODYzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU1ODIsMTEgKzU4ODIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NTk5LDcgKzU5MDgsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9tYWxsb2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY2CitAQCAtNTYyOCw3ICs1OTM3LDYgQEAKKyBlbHNlCisgCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTY0NywxMSArNTk1NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU2NjQsNyArNTk4MSw3IEBACisgCisgYWNfY3Zfd2luX29yX2Rvcz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dpbl9vcl9kb3MiID4mNQorQEAgLTU3MTQsNyArNjAzMSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NzI1LDExICs2MDQxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTc0Miw3ICs2MDY3LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01NzUwLDcgKzYwNzUsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU3NjgsNiArNjA5Miw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01Nzg3LDMzICs2MTEyLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTgyNCw3ICs2MTQ4LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01ODcyLDcgKzYxOTYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTkwNSwxMSArNjIyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTkyMiw3ICs2MjU0LDggQEAKKyAKKyBqbV9jdl9zdHJ1Y3RfZGlyZW50X2RfaW5vPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgCisgZmkKK0BAIC02MDExLDIxICs2MzQ0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYwNTYsMTEgKzYzOTYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYwNzMsNyArNjQyMiw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjEyNiwyMSArNjQ3NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02MTcxLDExICs2NTI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MTg4LDcgKzY1NTQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTYyMDMsMjEgKzY1NzAsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF9kb3BybnQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfZG9wcm50LgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgX2RvcHJudCBpbm5vY3VvdXNfX2RvcHJudAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfZG9wcm50ICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiBfZG9wcm50CisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjI0OCwxMSArNjYyMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjI2NSw3ICs2NjQ4LDggQEAKKyAKKyBhY19jdl9mdW5jX19kb3BybnQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX19kb3BybnQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX19kb3BybnQiID4mNgorQEAgLTYyODgsMTMgKzY2NzIsMTIgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyBpbnQKKyBtYWluICgpCisgeworQEAgLTYzMDUsMTEgKzY2ODgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYzMjIsMTIgKzY3MTQsMjAgQEAKKyAKKyBhY19jdl9saWJfZXJyb3JfYXRfbGluZT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4mNgorIGlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKy0gIExJQk9CSlM9IiRMSUJPQkpTIGVycm9yLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICJlcnJvci4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgZXJyb3IuJGFjX29iamV4dCIgICB8IFwKKysgICAgImVycm9yLiRhY19vYmpleHQgIiogfCBcCisrICAqIiBlcnJvci4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTIGVycm9yLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgCisgCitAQCAtNjM0MywyMSArNjc0MywyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02Mzg4LDExICs2Nzk1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NDA1LDcgKzY4MjEsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTY0MjMsNyArNjg0MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NDQzLDExICs2ODU5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjQ2MCw3ICs2ODg1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3IiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3IiID4mNgorQEAgLTY0ODYsNyArNjkxMSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NTA2LDExICs2OTMwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjUyMyw3ICs2OTU2LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3Jfcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3IiID4mNgorQEAgLTY1NTMsMjEgKzY5ODYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjU5OCwxMSArNzAzOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjYxNSw3ICs3MDY0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02NjM2LDcgKzcwODYsNiBAQAorICAgICBhY19jdl9mdW5jX3N0cmVycm9yX3JfY2hhcl9wPW5vCisgICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0geWVzOyB0aGVuCisgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY2NTcsMTEgKzcxMDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02NjczLDcgKzcxMzEsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZWxzZQorICAgICAgICMgc3RyZXJyb3JfciBpcyBub3QgZGVjbGFyZWQuICBDaG9vc2UgYmV0d2VlbgorICAgICAgICMgc3lzdGVtcyB0aGF0IGhhdmUgcmVsYXRpdmVseSBpbmFjY2Vzc2libGUgZGVjbGFyYXRpb25zIGZvciB0aGUKK0BAIC02Njg1LDcgKzcxNDMsNiBAQAorICAgOgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NzIxLDcgKzcxNzgsNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyAgICAgZmkKKyAKK0BAIC02NzQ5LDIxICs3MjA2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTY3OTQsMTEgKzcyNTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY4MTEsNyArNzI4NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjgyMSw3ICs3Mjk1LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtNjg1NSw3ICs3MzM2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY4NjYsMTEgKzczNDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02ODgzLDcgKzczNzIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTY4OTEsNyArNzM4MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjkwOSw2ICs3Mzk3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTY5MjgsMzMgKzc0MTcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC02OTY1LDcgKzc0NTMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTY5ODksNyArNzQ3Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MDUzLDIxICs3NTQwLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTcwOTgsMTEgKzc1OTIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTcxMTUsNyArNzYxOCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNzEyNSw3ICs3NjI5LDE0IEBACisgX0FDRU9GCisgCisgZWxzZQorLSAgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKysgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCAiKiB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgZmkKKyBkb25lCisgCitAQCAtNzE2Myw3ICs3Njc0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTcxNzQsMTEgKzc2ODQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03MTkxLDcgKzc3MTAsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTcxOTksNyArNzcxOCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzIxNyw2ICs3NzM1LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTcyMzYsMzMgKzc3NTUsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03MjczLDcgKzc3OTEsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTcyOTcsNyArNzgxNSw2IEBACisgICBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8KKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzMzNyw3ICs3ODU0LDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjUKK0BAIC03MzUzLDcgKzc4NzAsMTQgQEAKKyAjZGVmaW5lIEhBVkVfTUFMTE9DIDAKKyBfQUNFT0YKKyAKKy0gICBMSUJPQkpTPSIkTElCT0JKUyBtYWxsb2MuJGFjX29iamV4dCIKKysgICBjYXNlICRMSUJPQkpTIGluCisrICAgICJtYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICoiIG1hbGxvYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgICAibWFsbG9jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiBtYWxsb2MuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBtYWxsb2MuJGFjX29iamV4dCIgOzsKKytlc2FjCisrCisgCisgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyAjZGVmaW5lIG1hbGxvYyBycGxfbWFsbG9jCitAQCAtNzM4OCw3ICs3OTEyLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTczOTksMTEgKzc5MjIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NDE2LDcgKzc5NDgsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc0MjQsNyArNzk1Niw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzQ0Miw2ICs3OTczLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc0NjEsMzMgKzc5OTMsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03NDk4LDcgKzgwMjksNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc1MjIsNyArODA1Myw2IEBACisgICBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc1NjIsNyArODA5Miw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjUKK0BAIC03NTc4LDcgKzgxMDgsMTQgQEAKKyAjZGVmaW5lIEhBVkVfUkVBTExPQyAwCisgX0FDRU9GCisgCistICAgTElCT0JKUz0iJExJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IgorKyAgIGNhc2UgJExJQk9CSlMgaW4KKysgICAgInJlYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICoiIHJlYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICAgInJlYWxsb2MuJGFjX29iamV4dCAiKiB8IFwKKysgICoiIHJlYWxsb2MuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyByZWFsbG9jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIAorIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisgI2RlZmluZSByZWFsbG9jIHJwbF9yZWFsbG9jCitAQCAtNzYxOSw3ICs4MTU2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc2MzAsMTEgKzgxNjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03NjQ3LDcgKzgxOTIsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc2NTUsNyArODIwMCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzY3Myw2ICs4MjE3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc2OTIsMzMgKzgyMzcsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC03NzI5LDcgKzgyNzMsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTc3NzIsNyArODMxNiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NzgzLDExICs4MzI2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzgwMCw3ICs4MzUyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03ODA4LDcgKzgzNjAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc4MjYsNiArODM3Nyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03ODQ1LDMzICs4Mzk3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzg4Miw3ICs4NDMzLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03OTE2LDcgKzg0NjcsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzkyNywxMSArODQ3NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc5NDQsNyArODUwMyw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzk1Miw3ICs4NTExLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03OTcwLDYgKzg1MjgsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzk4OSwzMyArODU0OCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTgwMjYsNyArODU4NCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtODA1MywyMSArODYxMSwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04MDk4LDExICs4NjYzLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04MTE1LDcgKzg2ODksOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTgxMzksMjEgKzg3MTQsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODE4NCwxMSArODc2NiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODIwMSw3ICs4NzkyLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04MjQxLDcgKzg4MzMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODI1OSwxMSArODg1MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgyNzYsNyArODg3Niw3IEBACisgCisgYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjYKK0BAIC04MzAwLDcgKzg5MDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODMxNywxMSArODkxNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODMzNCw3ICs4OTQyLDggQEAKKyAKKyBqbV9jdl9mdW5jX21icnRvd2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRqbV9jdl9mdW5jX21icnRvd2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRqbV9jdl9mdW5jX21icnRvd2MiID4mNgorQEAgLTgzNDgsNjkgKzg5NTcsNDY1IEBACisgCisgCisgCistCistCistCistCistZm9yIGFjX2Z1bmMgaW4gcGF0aGNvbmYKKy1kbworLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCistZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2CistaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGZyZWUgaXMgZGVjbGFyZWQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBmcmVlIGlzIGRlY2xhcmVkLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2ZyZWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKy0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworLSNpZmRlZiBfX1NURENfXworLSMgaW5jbHVkZSA8bGltaXRzLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPGFzc2VydC5oPgorLSNlbmRpZgorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLXsKKy0jZW5kaWYKKy0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCistICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKy1jaGFyICRhY19mdW5jICgpOworLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKy0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKy0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCistI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCistY2hva2UgbWUKKy0jZWxzZQorLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworLSNlbmRpZgorLSNpZmRlZiBfX2NwbHVzcGx1cworLX0KKy0jZW5kaWYKKy0KKyskYWNfaW5jbHVkZXNfZGVmYXVsdAorIGludAorIG1haW4gKCkKKyB7CistcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisrI2lmbmRlZiBmcmVlCisrICBjaGFyICpwID0gKGNoYXIgKikgZnJlZTsKKysjZW5kaWYKKysKKyAgIDsKKyAgIHJldHVybiAwOworIH0KKyBfQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9oYXZlX2RlY2xfZnJlZT15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9oYXZlX2RlY2xfZnJlZT1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNgorK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9mcmVlID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUUgMQorK19BQ0VPRgorKworKworK2Vsc2UKKysgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfREVDTF9GUkVFIDAKKytfQUNFT0YKKysKKysKKytmaQorKworKworKworKworKworKyAgOgorKworKworKworKworKworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8c3RkYm9vbC5oPgorKwkgICNpZm5kZWYgYm9vbAorKwkgICAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiBmYWxzZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgdHJ1ZQorKwkgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZiB0cnVlICE9IDEKKysJICAgImVycm9yOiB0cnVlIGlzIG5vdCAxIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKysJICAgImVycm9yOiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysKKysJICBzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKysKKysJICBjaGFyIGFbdHJ1ZSA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07CisrCSAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgZFsoYm9vbCkgLTAuNSA9PSB0cnVlID8gMSA6IC0xXTsKKysJICBib29sIGUgPSAmczsKKysJICBjaGFyIGZbKF9Cb29sKSAtMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKysJICBjaGFyIGdbdHJ1ZV07CisrCSAgY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKysJICBjaGFyIGlbc2l6ZW9mIHMudF07CisrCisraW50CisrbWFpbiAoKQorK3sKKysgcmV0dXJuICFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaTsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X2hlYWRlcl9zdGRib29sX2g9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2CisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfQm9vbCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0Jvb2wuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl90eXBlX19Cb29sK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKytpbnQKKyttYWluICgpCisreworK2lmICgoX0Jvb2wgKikgMCkKKysgIHJldHVybiAwOworK2lmIChzaXplb2YgKF9Cb29sKSkKKysgIHJldHVybiAwOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3R5cGVfX0Jvb2w9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfdHlwZV9fQm9vbD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX19Cb29sIiA+JjYKKytpZiB0ZXN0ICRhY19jdl90eXBlX19Cb29sID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9fQk9PTCAxCisrX0FDRU9GCisrCisrCisrZmkKKysKKysgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYm9vbF9oID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1REQk9PTF9IIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKyAgOgorKworKworKworKworKworKworKworKworKworKworK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9zdGF0X25zZWMrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3N0YXRfbnNlYz15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9zdGF0X25zZWM9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdGF0X25zZWMiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zdGF0X25zZWMiID4mNgorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3Zfc3RhdF90aW1ldmFsK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHRpbWUuaD4KKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiBzdC5zdF9hdGltLnR2X25zZWMgKyBzdC5zdF9tdGltLnR2X25zZWMgKyBzdC5zdF9jdGltLnR2X25zZWM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3Zfc3RhdF90aW1ldmFsPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3N0YXRfdGltZXZhbD1ubworK2ZpCisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisrZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0YXRfdGltZXZhbCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0YXRfdGltZXZhbCIgPiY2CisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrCisrY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKysjZGVmaW5lIEhBVkVfU1RBVF9USU1FVkFMIDEKKytfQUNFT0YKKysKKysgICBmaQorKworKworKworKworKworK2ZvciBhY19mdW5jIGluIHBhdGhjb25mCisrZG8KKythc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgorK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKysgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisrZWxzZQorKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogY29uZmRlZnMuaC4gICovCisrX0FDRU9GCisrY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisrY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKysgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisrICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKysgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKysjIGluY2x1ZGUgPGxpbWl0cy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDxhc3NlcnQuaD4KKysjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKysvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIKKyt7CisrI2VuZGlmCisrLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisrY2hhciAkYWNfZnVuYyAoKTsKKysvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisrICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisrICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworKyNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorK2Nob2tlIG1lCisrI2Vsc2UKKytjaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKKysjZW5kaWYKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisraW50CisrbWFpbiAoKQorK3sKKytyZXR1cm4gZiAhPSAkYWNfZnVuYzsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NDIzLDcgKzk0MjgsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTg0NTQsNyArOTQ2MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NDY1LDExICs5NDcwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODQ4Miw3ICs5NDk2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC04NDkwLDcgKzk1MDQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg1MDgsNiArOTUyMSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC04NTI3LDMzICs5NTQxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtODU2NCw3ICs5NTc3LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC04NTg3LDcgKzk2MDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODYwNywxMSArOTYxOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg2MjQsNyArOTY0NSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjYKK0BAIC04NjQ4LDcgKzk2NjksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODY2OCwxMSArOTY4OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg2ODUsNyArOTcxNCw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX2dldGVudj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjYKK0BAIC04NzA5LDcgKzk3MzgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODcyOSwxMSArOTc1NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg3NDYsNyArOTc4Myw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjYKK0BAIC04NzcwLDcgKzk4MDcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODc5MCwxMSArOTgyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg4MDcsNyArOTg1Miw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX21rdGVtcD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9ta3RlbXAiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfbWt0ZW1wIiA+JjYKK0BAIC04ODQ5LDIxICs5ODk0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTg4OTQsMTEgKzk5NDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg5MTEsNyArOTk3Miw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODkzNCwyMSArOTk5NiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04OTc5LDExICsxMDA0OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODk5Niw3ICsxMDA3NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtOTAwNiw3ICsxMDA4NSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTkwMTksNyArMTAxMDUsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPW5vCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTAzNiwxMSArMTAxMjEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MDUyLDkgKzEwMTQ2LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTA3MiwxMSArMTAxNjUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MDg4LDcgKzEwMTkwLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBicmVhaworIGRvbmUKKyBmaQorQEAgLTkxMTIsNyArMTAyMTQsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTEyOSwxMSArMTAyMzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkxNDYsNyArMTAyNTYsOCBAQAorIAorIGFjX2N2X2Z1bmNfZnNlZWtvPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19mc2Vla28iID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2ZzZWVrbyIgPiY2CitAQCAtOTE2NSw3ICsxMDI3Niw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MTg1LDExICsxMDI5NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkyMDIsNyArMTAzMjEsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9jbGVhcmVycl91bmxvY2tlZCIgPiY2CitAQCAtOTIzMCw3ICsxMDM0OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MjUwLDExICsxMDM2OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkyNjcsNyArMTAzOTQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPiY2CitAQCAtOTI5NSw3ICsxMDQyMiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MzE1LDExICsxMDQ0MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkzMzIsNyArMTA0NjcsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY2CitAQCAtOTM2MCw3ICsxMDQ5NSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05MzgwLDExICsxMDUxNCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTkzOTcsNyArMTA1NDAsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCIgPiY2CitAQCAtOTQyNSw3ICsxMDU2OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NDQ1LDExICsxMDU4NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk0NjIsNyArMTA2MTMsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZ2V0c191bmxvY2tlZCIgPiY2CitAQCAtOTQ5MCw3ICsxMDY0MSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NTEwLDExICsxMDY2MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk1MjcsNyArMTA2ODYsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0Y191bmxvY2tlZCIgPiY2CitAQCAtOTU1NSw3ICsxMDcxNCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NTc1LDExICsxMDczMywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk1OTIsNyArMTA3NTksNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxvY2tlZCIgPiY2CitAQCAtOTYyMCw3ICsxMDc4Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NjQwLDExICsxMDgwNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk2NTcsNyArMTA4MzIsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVhZF91bmxvY2tlZCIgPiY2CitAQCAtOTY4NSw3ICsxMDg2MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NzA1LDExICsxMDg3OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk3MjIsNyArMTA5MDUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY2CitAQCAtOTc1MCw3ICsxMDkzMyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05NzcwLDExICsxMDk1MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk3ODcsNyArMTA5NzgsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgPiY2CitAQCAtOTgxNSw3ICsxMTAwNiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05ODM1LDExICsxMTAyNSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk4NTIsNyArMTEwNTEsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZCIgPiY2CitAQCAtOTg4MCw3ICsxMTA3OSw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05OTAwLDExICsxMTA5OCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk5MTcsNyArMTExMjQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZCIgPiY2CitAQCAtOTk0NSw3ICsxMTE1Miw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC05OTY1LDExICsxMTE3MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTk5ODIsNyArMTExOTcsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZCIgPiY2CitAQCAtMTAwNzUsNyArMTEyOTAsNiBAQAorICAgYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkPXllcworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDExNSw3ICsxMTMyOSw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQiID4mNQorQEAgLTEwMTQ2LDcgKzExMzYwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMTU3LDExICsxMTM3MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwMTc0LDcgKzExMzk2LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC0xMDE4Miw3ICsxMTQwNCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAyMDAsNiArMTE0MjEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtMTAyMTksMzMgKzExNDQxLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtMTAyNTYsNyArMTE0NzcsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTEwMjc3LDcgKzExNDk4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMzAwLDExICsxMTUyMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTAzMTcsNyArMTE1NDYsOCBAQAorIAorIGFjX2N2X2Z1bmNfc2V0bW9kZV9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NldG1vZGVfZG9zIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zZXRtb2RlX2RvcyIgPiY2CitAQCAtMTAzMzgsMjEgKzExNTY4LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTEwMzgzLDExICsxMTYyMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA0MDAsNyArMTE2NDYsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTEwNDE1LDIxICsxMTY2MiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgX2RvcHJudCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIF9kb3BybnQuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSBfZG9wcm50IGlubm9jdW91c19fZG9wcm50CisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIF9kb3BybnQgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmIF9kb3BybnQKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDQ2MCwxMSArMTE3MTQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNDc3LDcgKzExNzQwLDggQEAKKyAKKyBhY19jdl9mdW5jX19kb3BybnQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX19kb3BybnQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX19kb3BybnQiID4mNgorQEAgLTEwNTAzLDIxICsxMTc2NywyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDU0OCwxMSArMTE4MTksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNTY1LDcgKzExODQ1LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC0xMDU4NSw3ICsxMTg2Niw2IEBACisgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPW5vCisgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpciA9IHllczsgdGhlbgorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNjA1LDExICsxMTg4NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNjIxLDcgKzExOTEwLDYgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNjQxLDExICsxMTkyOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNjU4LDEwICsxMTk1NSwxMCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBmaQorIAorIAorQEAgLTEwNjg2LDcgKzExOTgzLDYgQEAKKyBlbHNlCisgCisgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTA3MDUsMTEgKzEyMDAxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTA3MjIsNyArMTIwMjcsNyBAQAorIAorIGFjX2N2X3dpbl9vcl9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93aW5fb3JfZG9zIiA+JjUKK0BAIC0xMDgzNCwxMyArMTIxMzksMTMgQEAKKyAgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzLycvJ1xcXFwnJy9nOworLSAgICAJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisrCSJzLycvJ1xcXFwnJy9nOworKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgICA7OworICAgICAqKQorICAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICAgc2VkIC1uIFwKKy0gICAgICAgICJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorKwkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgICA7OworICAgICBlc2FjOworIH0gfAorQEAgLTEwODcwLDEzICsxMjE3NSwxMyBAQAorICMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisgIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgorIGlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCistICBhY192cHN1Yj0nL15bIAldKlZQQVRIWyAJXSo9L3sKKysgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworIHMvOipcJChzcmNkaXIpOiovOi87Cisgcy86Klwke3NyY2Rpcn06Ki86LzsKKyBzLzoqQHNyY2RpckA6Ki86LzsKKy1zL15cKFtePV0qPVsgCV0qXCk6Ki9cMS87Cisrcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOworIHMvOiokLy87Cistcy9eW149XSo9WyAJXSokLy87Cisrcy9eW149XSo9WwkgXSokLy87CisgfScKKyBmaQorIAorQEAgLTEwODg3LDcgKzEyMTkyLDcgQEAKKyBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgIGFjX2k9YGVjaG8gIiRhY19pIiB8CistICAgICAgICAgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorKwkgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorICAgIyAyLiBBZGQgdGhlbS4KKyAgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCisgICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgJGFjX2kiJyRVLmxvJworQEAgLTEwOTMxLDkgKzEyMjM2LDEwIEBACisgZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIHNldCAtbyBwb3NpeAorIGZpCisrRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorIAorICMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgorLWlmIChGT089Rk9POyB1bnNldCBGT08pID4vZGV2L251bGwgMj4mMTsgdGhlbgorK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgYXNfdW5zZXQ9dW5zZXQKKyBlbHNlCisgICBhc191bnNldD1mYWxzZQorQEAgLTEwOTUyLDcgKzEyMjU4LDcgQEAKKyAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICBMQ19URUxFUEhPTkUgTENfVElNRQorIGRvCistICBpZiAoc2V0ICt4OyB0ZXN0IC1uICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgICBlbHNlCisgICAgICRhc191bnNldCAkYXNfdmFyCitAQCAtMTExMzEsMTYgKzEyNDM3LDE3IEBACisgaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbWtkaXJfcD06CisgZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorIGFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCistYXNfdHJfY3BwPSJzZWQgeSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCistYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCisgIyBJRlMKK0BAIC0xMTE2Nyw3ICsxMjQ3NCw3IEBACisgY2F0ID4mNSA8PF9DU0VPRgorIAorIFRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcGF0Y2ggJGFzX21lIDIuNS45LCB3aGljaCB3YXMKKy1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTcuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKytnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyAKKyAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworQEAgLTExMjExLDkgKzEyNTE4LDkgQEAKKyAgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorLSAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKysJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCistICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisrCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorIAorIENvbmZpZ3VyYXRpb24gZmlsZXM6CisgJGNvbmZpZ19maWxlcworQEAgLTExMjI3LDExICsxMjUzNCwxMCBAQAorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgYWNfY3NfdmVyc2lvbj0iXFwKKyBwYXRjaCBjb25maWcuc3RhdHVzIDIuNS45CistY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LAorK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OSwKKyAgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorIAorLUNvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxCistRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisgc3JjZGlyPSRzcmNkaXIKK0BAIC0xMTQ2Myw5ICsxMjc2OSw5IEBACisgICAgICAgKGVjaG8gJzp0CisgICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorICAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKy0gIAlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorKwlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgIGVsc2UKKy0gIAlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorKwlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgIGZpCisgICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKKyAgICAgICBhY19iZWc9JGFjX2VuZAorQEAgLTExNDgzLDIxICsxMjc4OSwyMSBAQAorICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCistICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKy0gICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwljYXQgPiR0bXAvc3RkaW4KKysJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICAgZXNhYworIAorICAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgorICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE1MTMsMTAgKzEyODE5LDEwIEBACisgICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KK0BAIC0xMTU1NCwxMiArMTI4NjAsNDUgQEAKKyAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworIGVzYWMKKy0jIERvbid0IGJsaW5kbHkgcGVyZm9ybSBhIGBjZCAiJGFjX2RpciIvJGFjX2ZvbyAmJiBwd2RgIHNpbmNlICRhY19mb28gY2FuIGJlCistIyBhYnNvbHV0ZS4KKy1hY19hYnNfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfYnVpbGRkaXIgJiYgcHdkYAorLWFjX2Fic190b3BfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAke2FjX3RvcF9idWlsZGRpcn0uICYmIHB3ZGAKKy1hY19hYnNfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3NyY2RpciAmJiBwd2RgCistYWNfYWJzX3RvcF9zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfdG9wX3NyY2RpciAmJiBwd2RgCisrCisrIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisrIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKytjYXNlIGBwd2RgIGluCisrLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrKikKKysgIGNhc2UgIiRhY19kaXIiIGluCisrICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrKikKKysgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyopCisrICBjYXNlICRhY19zcmNkaXIgaW4KKysgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyopCisrICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisrICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisgCisgCisgICBjYXNlICRJTlNUQUxMIGluCitAQCAtMTE1NjcsMTEgKzEyOTA2LDYgQEAKKyAgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgICBlc2FjCisgCistICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKy1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorLSAgICBybSAtZiAiJGFjX2ZpbGUiCistICBmaQorICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCitAQCAtMTE1ODEsNyArMTI5MTUsNyBAQAorICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgorICAgZmkKKyAgIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKysJCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorIAorICAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgICMgc3JjIHRyZWUuCitAQCAtMTE1OTAsMjYgKzEyOTI0LDMyIEBACisgICAgICAgY2FzZSAkZiBpbgorICAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgIFtcXC8kXSopCistICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKysJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZWNobyAkZjs7CisrCSBlY2hvICIkZiI7OworICAgICAgICopICMgUmVsYXRpdmUKKy0gICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKy0gICAgICAgICAgICMgQnVpbGQgdHJlZQorLSAgICAgICAgICAgZWNobyAkZgorLSAgICAgICAgIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKy0gICAgICAgICAgICMgU291cmNlIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJHNyY2Rpci8kZgorLSAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICMgL2Rldi9udWxsIHRyZWUKKy0gICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKwkgICAjIEJ1aWxkIHRyZWUKKysJICAgZWNobyAiJGYiCisrCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisrCSAgICMgU291cmNlIHRyZWUKKysJICAgZWNobyAiJHNyY2Rpci8kZiIKKysJIGVsc2UKKysJICAgIyAvZGV2L251bGwgdHJlZQorKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZmk7OworKwkgZmk7OworICAgICAgIGVzYWMKKyAgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisrCisrICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKytlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorKyAgICBybSAtZiAiJGFjX2ZpbGUiCisrICBmaQorIF9BQ0VPRgorIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgICBzZWQgIiRhY192cHN1YgorQEAgLTExNjQ5LDEyICsxMjk4OSwxMiBAQAorICMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyAjCisgIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorLWFjX2RBPSdzLF5cKFsgCV0qXCkjXChbIAldKmRlZmluZVsgCV1bIAldKlwpJworLWFjX2RCPSdbIAldLiokLFwxI1wyJworK2FjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJworK2FjX2RCPSdbCSBdLiokLFwxI1wyJworIGFjX2RDPScgJworIGFjX2REPScsO3QnCisgIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KKy1hY191QT0ncyxeXChbIAldKlwpI1woWyAJXSpcKXVuZGVmXChbIAldWyAJXSpcKScKKythY191QT0ncyxeXChbCSBdKlwpI1woWwkgXSpcKXVuZGVmXChbCSBdWwkgXSpcKScKKyBhY191Qj0nJCxcMSNcMmRlZmluZVwzJworIGFjX3VDPScgJworIGFjX3VEPScsO3QnCitAQCAtMTE2NjMsMTEgKzEzMDAzLDExIEBACisgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgICBjYXNlICRhY19maWxlIGluCisgICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKy0gICAgICAgIGNhdCA+JHRtcC9zdGRpbgorLSAgICAgICAgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWNhdCA+JHRtcC9zdGRpbgorKwlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKy0gICAgICAgIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgICBlc2FjCisgCitAQCAtMTE2ODEsMjggKzEzMDIxLDI5IEBACisgICAgICAgY2FzZSAkZiBpbgorICAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgIFtcXC8kXSopCistICAgICAgICAgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKy0gICAgICAgICB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKysJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CistICAgICAgICAgZWNobyAkZjs7CisrCSAjIERvIHF1b3RlICRmLCB0byBwcmV2ZW50IERPUyBwYXRocyBmcm9tIGJlaW5nIElGUydkLgorKwkgZWNobyAiJGYiOzsKKyAgICAgICAqKSAjIFJlbGF0aXZlCistICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCistICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJGYKKy0gICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCistICAgICAgICAgICAjIFNvdXJjZSB0cmVlCistICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKy0gICAgICAgICBlbHNlCistICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCistICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKysJICAgIyBCdWlsZCB0cmVlCisrCSAgIGVjaG8gIiRmIgorKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorKwkgICAjIFNvdXJjZSB0cmVlCisrCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisrCSBlbHNlCisrCSAgICMgL2Rldi9udWxsIHRyZWUKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGZpOzsKKysJIGZpOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAgIyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlcy4KKy0gIHNlZCAncy9bIAldKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCisrICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorIAorIF9BQ0VPRgorIAorQEAgLTExNzI1LDkgKzEzMDY2LDkgQEAKKyBzLFtcXCRgXSxcXCYsZworIHQgY2xlYXIKKyA6IGNsZWFyCistcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAkoXVteIAkoXSpcKVwoKFteKV0qKVwpWyAJXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKKytzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIChdW14JIChdKlwpXCgoW14pXSopXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDFcMiR7YWNfZEN9XDMke2FjX2REfSxncAorIHQgZW5kCistcyxeWyAJXSojWyAJXSpkZWZpbmVbIAldWyAJXSpcKFteIAldW14gCV0qXClbIAldKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKKytzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAorIDogZW5kCisgX0FDRU9GCisgIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKK0BAIC0xMTc0MSwxMyArMTMwODIsMTMgQEAKKyAjIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisgY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgorLXMsXlsgCV0qI1sgCV0qdW5kZWZbIAldWyAJXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCisrcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKKyBfQUNFT0YKKyAKKyAjIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKKyAjIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCisgZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUworLWVjaG8gJyAgaWYgZ3JlcCAiXlsgCV0qI1sgCV0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKKytlY2hvICcgIGlmIGdyZXAgIl5bCSBdKiNbCSBdKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCisgZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUworIGVjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUworIHJtIC1mIGNvbmZ0ZXN0LnRhaWwKK0BAIC0xMTc1Niw3ICsxMzA5Nyw3IEBACisgICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KKyAgIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI2RlZmluZScgbGluZXMuCistICBlY2hvICcvXlsgCV0qI1sgCV0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisrICBlY2hvICcvXlsJIF0qI1sJIF0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgorICAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCitAQCAtMTE3ODMsNyArMTMxMjQsNyBAQAorICAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvdW5kZWZzLnNlZC4KKyAgIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCisgICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCistICBlY2hvICcvXlsgCV0qI1sgCV0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKysgIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUworICAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworQEAgLTExODE3LDEwICsxMzE1OCwxMCBAQAorICAgICBlbHNlCisgICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYWNfZmlsZSIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE4MzYsMTAgKzEzMTc3LDEwIEBACisgICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkYXNfZGlyIiB8CisgICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHBhdGNoLTIuNS45L2NvbmZpZ3VyZS5hYworQEAgLTY0LDYgKzY0LDkgQEAKKyBnbF9QUkVSRVFfWE1BTExPQworIGdsX1FVT1RFCisgZ2xfUVVPVEVBUkcKKytnbF9IQVNICisrCisrYWdfQ0hFQ0tfTkFOT1NFQ09ORF9TVEFUCisgCisgZG5sIFRoaXMgc2hvdWxkIGJlIGluIGdudWxpYiwgYnV0IGlzbid0IGZvciBzb21lIHJlYXNvbi4KKyBBQ19ERUZVTihbam1fUFJFUkVRX0FEREVYVF0sCistLS0gcGF0Y2gtMi41Ljkub3JpZy9wY2guYworKysrIHBhdGNoLTIuNS45L3BjaC5jCitAQCAtMSw2ICsxLDYgQEAKKyAvKiByZWFkaW5nIHBhdGNoZXMgKi8KKyAKKy0vKiAkSWQ6IHBjaC5jLHYgMS40NCAyMDAzLzA1LzIwIDE0OjAzOjE3IGVnZ2VydCBFeHAgJCAqLworKy8qICRJZDogcGNoLmMsdiAxLjQ1IDIwMDMvMDcvMDIgMjI6MTk6MjEgZWdnZXJ0IEV4cCAkICovCisgCisgLyogQ29weXJpZ2h0IChDKSAxOTg2LCAxOTg3LCAxOTg4IExhcnJ5IFdhbGwKKyAKK0BAIC0zNjYsMTAgKzM2NiwxNiBAQAorIAlpZiAoIXN0YXJzX2xhc3RfbGluZSAmJiBzdHJuRVEocywgIioqKiAiLCA0KSkKKyAJICAgIG5hbWVbT0xEXSA9IGZldGNobmFtZSAocys0LCBzdHJpcHBhdGgsICZwX3RpbWVzdGFtcFtPTERdKTsKKyAJZWxzZSBpZiAoc3RybkVRKHMsICIrKysgIiwgNCkpCisrCSAgeworIAkgICAgLyogU3dhcCB3aXRoIE5FVyBiZWxvdy4gICovCisgCSAgICBuYW1lW09MRF0gPSBmZXRjaG5hbWUgKHMrNCwgc3RyaXBwYXRoLCAmcF90aW1lc3RhbXBbT0xEXSk7CisrCSAgICBwX3N0cmlwX3RyYWlsaW5nX2NyID0gc3RyaXBfdHJhaWxpbmdfY3I7CisrCSAgfQorIAllbHNlIGlmIChzdHJuRVEocywgIkluZGV4OiIsIDYpKQorKwkgIHsKKyAJICAgIG5hbWVbSU5ERVhdID0gZmV0Y2huYW1lIChzKzYsIHN0cmlwcGF0aCwgKHRpbWVfdCAqKSAwKTsKKysJICAgIHBfc3RyaXBfdHJhaWxpbmdfY3IgPSBzdHJpcF90cmFpbGluZ19jcjsKKysJICB9CisgCWVsc2UgaWYgKHN0cm5FUShzLCAiUHJlcmVxOiIsIDcpKSB7CisgCSAgICBmb3IgKHQgPSBzICsgNzsgIElTU1BBQ0UgKCh1bnNpZ25lZCBjaGFyKSAqdCk7ICB0KyspCisgCSAgICAgIGNvbnRpbnVlOworQEAgLTQwOSw2ICs0MTUsNyBAQAorIAkJICAgIHBfdGltZXN0YW1wW05FV10gPSB0aW1lc3RhbXA7CisgCQkgICAgcF9yZmM5MzRfbmVzdGluZyA9ICh0IC0gcykgPj4gMTsKKyAJCSAgfQorKwkJcF9zdHJpcF90cmFpbGluZ19jciA9IHN0cmlwX3RyYWlsaW5nX2NyOworIAkgICAgICB9CisgCSAgfQorIAlpZiAoKGRpZmZfdHlwZSA9PSBOT19ESUZGIHx8IGRpZmZfdHlwZSA9PSBFRF9ESUZGKSAmJgorLS0tIHBhdGNoLTIuNS45Lm9yaWcvdXRpbC5jCisrKysgcGF0Y2gtMi41LjkvdXRpbC5jCitAQCAtNDUsOSArNDUsMTcgQEAKKyAjIGRlZmluZSByYWlzZShzaWcpIGtpbGwgKGdldHBpZCAoKSwgc2lnKQorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxoYXNoLmg+CisgCisgc3RhdGljIHZvaWQgbWFrZWRpcnMgKGNoYXIgKik7Cisrc3RhdGljIGJvb2wgZmlkX3NlYXJjaCAoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdCAqLCBib29sKTsKKysjIGRlZmluZSBmaWRfZXhpc3RzKG5hbWUsIHBzdCkgZmlkX3NlYXJjaCAobmFtZSwgcHN0LCBmYWxzZSkKKysjIGRlZmluZSBpbnNlcnRfZmlkKG5hbWUpIGZpZF9zZWFyY2ggKG5hbWUsIE5VTEwsIHRydWUpCisgCisgLyogTW92ZSBhIGZpbGUgRlJPTSAod2hlcmUgKkZST01fTkVFRFNfUkVNT1ZBTCBpcyBub256ZXJvIGlmIEZST00KKyAgICBuZWVkcyByZW1vdmFsIHdoZW4gY2xlYW5pbmcgdXAgYXQgdGhlIGVuZCBvZiBleGVjdXRpb24pCitAQCAtNjQsNyArNzIsNyBAQAorICAgc3RydWN0IHN0YXQgdG9fc3Q7CisgICBpbnQgdG9fZXJybm8gPSAhIGJhY2t1cCA/IC0xIDogc3RhdCAodG8sICZ0b19zdCkgPT0gMCA/IDAgOiBlcnJubzsKKyAKKy0gIGlmIChiYWNrdXApCisrICBpZiAoYmFja3VwICYmICh0b19lcnJubyB8fCAhIGZpZF9leGlzdHMgKHRvLCAmdG9fc3QpKSkKKyAgICAgeworICAgICAgIGludCB0cnlfbWFrZWRpcnNfZXJybm8gPSAwOworICAgICAgIGNoYXIgKmJha25hbWU7CitAQCAtMTY1LDYgKzE3Myw3IEBACisgCSAgICAgIGlmICghIHRvX2Rpcl9rbm93bl90b19leGlzdCkKKyAJCW1ha2VkaXJzICh0byk7CisgCSAgICAgIGNvcHlfZmlsZSAoZnJvbSwgdG8sIDAsIG1vZGUpOworKwkgICAgICBpbnNlcnRfZmlkICh0byk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKyAKK0BAIC0xNzMsNiArMTgyLDcgQEAKKyAJfQorIAorICAgICByZW5hbWVfc3VjY2VlZGVkOgorKyAgICAgIGluc2VydF9maWQgKHRvKTsKKyAgICAgICAvKiBEbyBub3QgY2xlYXIgKkZST01fTkVFRFNfUkVNT1ZBTCBpZiBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCisgCSByZW5hbWUgcmV0dXJuZWQgemVybyBiZWNhdXNlIEZST00gYW5kIFRPIGFyZSBoYXJkIGxpbmtzIHRvCisgCSB0aGUgc2FtZSBmaWxlLiAgKi8KK0BAIC0xMDExLDMgKzEwMjEsMTA1IEBACisgICBpZiAoZmlsZV9zZWVrIChzdHJlYW0sIG9mZnNldCwgcHRybmFtZSkgIT0gMCkKKyAgICAgcGZhdGFsICgiZnNlZWsiKTsKKyB9CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBkZXZfdAkJZmlkX2RldjsKKysgIGlub190CQlmaWRfaW5vOworKyAgdGltZV90CWZpZF9tdGltZTsKKysgIHVuc2lnbmVkIGxvbmcJZmlkX210aW1lbnNlYzsKKyt9IGZpbGVfaWQ7CisrCisrdW5zaWduZWQKKytmaWxlX2lkX2hhc2hlciAoZmlsZV9pZCAqZW50cnksIHVuc2lnbmVkIHRhYmxlX3NpemUpCisreworKyAgcmV0dXJuICgodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9pbm8gKworKyAgCSAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfZGV2ICsKKysgIAkgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX210aW1lICsKKysJICAodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9tdGltZW5zZWMpICUgdGFibGVfc2l6ZTsKKyt9CisrCisrYm9vbAorK2ZpbGVfaWRfY29tcGFyYXRvciAoZmlsZV9pZCAqZW50cnkxLCBmaWxlX2lkICplbnRyeTIpCisreworKyAgcmV0dXJuIChlbnRyeTEtPmZpZF9kZXYJPT0gZW50cnkyLT5maWRfZGV2ICYmCisrCSAgZW50cnkxLT5maWRfaW5vCT09IGVudHJ5Mi0+ZmlkX2lubyAmJgorKwkgIGVudHJ5MS0+ZmlkX210aW1lCT09IGVudHJ5Mi0+ZmlkX210aW1lICYmCisrCSAgZW50cnkxLT5maWRfbXRpbWVuc2VjID09IGVudHJ5Mi0+ZmlkX210aW1lbnNlYyk7CisrfQorKworK3ZvaWQKKytmaWxlX2lkX2ZyZWVyIChmaWxlX2lkICplbnRyeSkKKyt7CisrICBmcmVlIChlbnRyeSk7CisrfQorKworK0hhc2hfdGFibGUgKmZpbGVfaWRfaGFzaDsKKysKKysvKiBDaGVjayBpZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IEZJTEVOQU1FIGFuZCBQU1Qgd2FzIGFscmVhZHkgc2Vlbi4gSWYgdGhlCisrICAgZmlsZSB3YXMgYWxyZWFkeSBzZWVuLCByZXR1cm5zIFRSVUUuICBJZiB0aGUgZmlsZSBoYXMgbm90IHlldCBiZWVuIHNlZW4KKysgICBhbmQgSU5TRVJUIGlzIFRSVUUsIGl0IGlzIGluc2VydGVkLiAgUFNUIG9yIEZJTEVOQU1FIG1heSBiZSBOVUxMIChidXQgbm90CisrICAgYm90aCBvZiB0aGVtKS4gICovCisrCisrc3RhdGljIGJvb2wKKytmaWRfc2VhcmNoIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgc3RydWN0IHN0YXQgKnBzdCwgYm9vbCBpbnNlcnQpCisreworKyAgc3RydWN0IHN0YXQgc3Q7CisrCisrICBpZiAoIWZpbGVfaWRfaGFzaCkKKysgICAgeworKyAgICAgIGZpbGVfaWRfaGFzaCA9IGhhc2hfaW5pdGlhbGl6ZSAoMCwgTlVMTCwgKEhhc2hfaGFzaGVyKSBmaWxlX2lkX2hhc2hlciwKKysJCQkJICAgICAgKEhhc2hfY29tcGFyYXRvcikgZmlsZV9pZF9jb21wYXJhdG9yLAorKwkJCQkgICAgICAoSGFzaF9kYXRhX2ZyZWVyKSBmaWxlX2lkX2ZyZWVyKTsKKysgICAgICBpZiAoIWZpbGVfaWRfaGFzaCkKKysJcGZhdGFsICgiaGFzaF9pbml0aWFsaXplIik7CisrICAgIH0KKysKKysgIGlmICghcHN0KQorKyAgICB7CisrICAgICAgaWYgKHN0YXQgKGZpbGVuYW1lLCAmc3QpICE9IDApCisrCXBmYXRhbCAoIiVzIiwgcXVvdGVhcmcgKGZpbGVuYW1lKSk7CisrICAgICAgcHN0ID0gJnN0OworKyAgICB9CisrCisrICBpZiAoaW5zZXJ0KQorKyAgICB7CisrICAgICAgZmlsZV9pZCAqcGZpZCA9IHhtYWxsb2MgKHNpemVvZiAoZmlsZV9pZCkpLCAqb2xkX3BmaWQ7CisrICAgICAgcGZpZC0+ZmlkX2RldgkgID0gcHN0LT5zdF9kZXY7CisrICAgICAgcGZpZC0+ZmlkX2lubwkgID0gcHN0LT5zdF9pbm87CisrICAgICAgcGZpZC0+ZmlkX210aW1lCSAgPSBwc3QtPnN0X210aW1lOworKyNpZiBkZWZpbmVkKEhBVkVfU1RBVF9OU0VDKQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW1lbnNlYzsKKysjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW0udHZfbnNlYzsKKysjZWxzZQorKyAgICAgIHBmaWQtPmZpZF9tdGltZW5zZWMgPSAwOworKyNlbmRpZgorKyAgICAgIG9sZF9wZmlkID0gaGFzaF9pbnNlcnQgKGZpbGVfaWRfaGFzaCwgcGZpZCk7CisrICAgICAgaWYgKCFvbGRfcGZpZCkKKysJcGZhdGFsICgiaGFzaF9pbnNlcnQiKTsKKysgICAgICBlbHNlIGlmIChvbGRfcGZpZCAhPSBwZmlkKQorKyAgICAgICAgeworKwkgIGZyZWUgKHBmaWQpOworKwkgIHJldHVybiB0cnVlOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gZmFsc2U7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGZpbGVfaWQgZmlkOworKyAgICAgIGZpZC5maWRfZGV2CT0gcHN0LT5zdF9kZXY7CisrICAgICAgZmlkLmZpZF9pbm8JPSBwc3QtPnN0X2lubzsKKysgICAgICBmaWQuZmlkX210aW1lCT0gcHN0LT5zdF9tdGltZTsKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfTlNFQykKKysgICAgICBmaWQuZmlkX210aW1lbnNlYyA9IHBzdC0+c3RfbXRpbWVuc2VjOworKyNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX1RJTUVWQUwpCisrICAgICAgZmlkLmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW0udHZfbnNlYzsKKysjZWxzZQorKyAgICAgIGZpZC5maWRfbXRpbWVuc2VjID0gMDsKKysjZW5kaWYKKysgICAgICByZXR1cm4gaGFzaF9sb29rdXAgKGZpbGVfaWRfaGFzaCwgJmZpZCkgIT0gMDsKKysgICAgfQorK30KKysKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2hhc2guYworKysrIHBhdGNoLTIuNS45L2hhc2guYworQEAgLTAsMCArMSwxMDUxIEBACisrLyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KKysKKysgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZywgMTk5Mi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEEgZ2VuZXJpYyBoYXNoIHRhYmxlIHBhY2thZ2UuICAqLworKworKy8qIERlZmluZSBVU0VfT0JTVEFDSyB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlIG9ic3RhY2tzIGluc3RlYWQKKysgICBvZiBtYWxsb2MuICBJZiB5b3UgY2hhbmdlIFVTRV9PQlNUQUNLLCB5b3UgaGF2ZSB0byByZWNvbXBpbGUhICAqLworKworKyNpZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxzdGRib29sLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrI2lmbmRlZiBIQVZFX0RFQ0xfRlJFRQorKyJ0aGlzIGNvbmZpZ3VyZS10aW1lIGRlY2xhcmF0aW9uIHRlc3Qgd2FzIG5vdCBydW4iCisrI2VuZGlmCisrI2lmICFIQVZFX0RFQ0xfRlJFRQorK3ZvaWQgZnJlZSAoKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9NQUxMT0MKKysidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorKyNlbmRpZgorKyNpZiAhSEFWRV9ERUNMX01BTExPQworK2NoYXIgKm1hbGxvYyAoKTsKKysjZW5kaWYKKysKKysjaWYgVVNFX09CU1RBQ0sKKysjIGluY2x1ZGUgIm9ic3RhY2suaCIKKysjIGlmbmRlZiBvYnN0YWNrX2NodW5rX2FsbG9jCisrIyAgZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jCisrIyBlbmRpZgorKyMgaWZuZGVmIG9ic3RhY2tfY2h1bmtfZnJlZQorKyMgIGRlZmluZSBvYnN0YWNrX2NodW5rX2ZyZWUgZnJlZQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaW5jbHVkZSAiaGFzaC5oIgorKworK3N0cnVjdCBoYXNoX3RhYmxlCisrICB7CisrICAgIC8qIFRoZSBhcnJheSBvZiBidWNrZXRzIHN0YXJ0cyBhdCBCVUNLRVQgYW5kIGV4dGVuZHMgdG8gQlVDS0VUX0xJTUlULTEsCisrICAgICAgIGZvciBhIHBvc3NpYmlsaXR5IG9mIE5fQlVDS0VUUy4gIEFtb25nIHRob3NlLCBOX0JVQ0tFVFNfVVNFRCBidWNrZXRzCisrICAgICAgIGFyZSBub3QgZW1wdHksIHRoZXJlIGFyZSBOX0VOVFJJRVMgYWN0aXZlIGVudHJpZXMgaW4gdGhlIHRhYmxlLiAgKi8KKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldF9saW1pdDsKKysgICAgdW5zaWduZWQgbl9idWNrZXRzOworKyAgICB1bnNpZ25lZCBuX2J1Y2tldHNfdXNlZDsKKysgICAgdW5zaWduZWQgbl9lbnRyaWVzOworKworKyAgICAvKiBUdW5pbmcgYXJndW1lbnRzLCBrZXB0IGluIGEgcGh5c2ljYWx5IHNlcGFyYXRlIHN0cnVjdHVyZS4gICovCisrICAgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmc7CisrCisrICAgIC8qIFRocmVlIGZ1bmN0aW9ucyBhcmUgZ2l2ZW4gdG8gYGhhc2hfaW5pdGlhbGl6ZScsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgorKyAgICAgICBibG9jayBmb3IgdGhpcyBmdW5jdGlvbi4gIEluIGEgd29yZCwgSEFTSEVSIHJhbmRvbWl6ZXMgYSB1c2VyIGVudHJ5CisrICAgICAgIGludG8gYSBudW1iZXIgdXAgZnJvbSAwIHVwIHRvIHNvbWUgbWF4aW11bSBtaW51cyAxOyBDT01QQVJBVE9SIHJldHVybnMKKysgICAgICAgdHJ1ZSBpZiB0d28gdXNlciBlbnRyaWVzIGNvbXBhcmUgZXF1YWxseTsgYW5kIERBVEFfRlJFRVIgaXMgdGhlIGNsZWFudXAKKysgICAgICAgZnVuY3Rpb24gZm9yIGEgdXNlciBlbnRyeS4gICovCisrICAgIEhhc2hfaGFzaGVyIGhhc2hlcjsKKysgICAgSGFzaF9jb21wYXJhdG9yIGNvbXBhcmF0b3I7CisrICAgIEhhc2hfZGF0YV9mcmVlciBkYXRhX2ZyZWVyOworKworKyAgICAvKiBBIGxpbmtlZCBsaXN0IG9mIGZyZWVkIHN0cnVjdCBoYXNoX2VudHJ5IHN0cnVjdHMuICAqLworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqZnJlZV9lbnRyeV9saXN0OworKworKyNpZiBVU0VfT0JTVEFDSworKyAgICAvKiBXaGVuZXZlciBvYnN0YWNrcyBhcmUgdXNlZCwgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYWxsIG92ZXJmbG93ZWQKKysgICAgICAgZW50cmllcyBpbnRvIGEgc2luZ2xlIHN0YWNrLCBzbyB0aGV5IGFsbCBjYW4gYmUgZnJlZWQgaW4gYSBzaW5nbGUKKysgICAgICAgb3BlcmF0aW9uLiAgSXQgaXMgbm90IGNsZWFyIGlmIHRoZSBzcGVlZHVwIGlzIHdvcnRoIHRoZSB0cm91YmxlLiAgKi8KKysgICAgc3RydWN0IG9ic3RhY2sgZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICB9OworKworKy8qIEEgaGFzaCB0YWJsZSBjb250YWlucyBtYW55IGludGVybmFsIGVudHJpZXMsIGVhY2ggaG9sZGluZyBhIHBvaW50ZXIgdG8KKysgICBzb21lIHVzZXIgcHJvdmlkZWQgZGF0YSAoYWxzbyBjYWxsZWQgYSB1c2VyIGVudHJ5KS4gIEFuIGVudHJ5IGluZGlzdGluY3RseQorKyAgIHJlZmVycyB0byBib3RoIHRoZSBpbnRlcm5hbCBlbnRyeSBhbmQgaXRzIGFzc29jaWF0ZWQgdXNlciBlbnRyeS4gIEEgdXNlcgorKyAgIGVudHJ5IGNvbnRlbnRzIG1heSBiZSBoYXNoZWQgYnkgYSByYW5kb21pemF0aW9uIGZ1bmN0aW9uICh0aGUgaGFzaGluZworKyAgIGZ1bmN0aW9uLCBvciBqdXN0IGBoYXNoZXInIGZvciBzaG9ydCkgaW50byBhIG51bWJlciAob3IgYHNsb3QnKSBiZXR3ZWVuIDAKKysgICBhbmQgdGhlIGN1cnJlbnQgdGFibGUgc2l6ZS4gIEF0IGVhY2ggc2xvdCBwb3NpdGlvbiBpbiB0aGUgaGFzaCB0YWJsZSwKKysgICBzdGFydHMgYSBsaW5rZWQgY2hhaW4gb2YgZW50cmllcyBmb3Igd2hpY2ggdGhlIHVzZXIgZGF0YSBhbGwgaGFzaCB0byB0aGlzCisrICAgc2xvdC4gIEEgYnVja2V0IGlzIHRoZSBjb2xsZWN0aW9uIG9mIGFsbCBlbnRyaWVzIGhhc2hpbmcgdG8gdGhlIHNhbWUgc2xvdC4KKysKKysgICBBIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gd2lsbCBkaXN0cmlidXRlIGVudHJpZXMgcmF0aGVyIGV2ZW5seSBpbiBidWNrZXRzLgorKyAgIEluIHRoZSBpZGVhbCBjYXNlLCB0aGUgbGVuZ3RoIG9mIGVhY2ggYnVja2V0IGlzIHJvdWdobHkgdGhlIG51bWJlciBvZgorKyAgIGVudHJpZXMgZGl2aWRlZCBieSB0aGUgdGFibGUgc2l6ZS4gIEZpbmRpbmcgdGhlIHNsb3QgZm9yIGEgZGF0YSBpcyB1c3VhbGx5CisrICAgZG9uZSBpbiBjb25zdGFudCB0aW1lIGJ5IHRoZSBgaGFzaGVyJywgYW5kIHRoZSBsYXRlciBmaW5kaW5nIG9mIGEgcHJlY2lzZQorKyAgIGVudHJ5IGlzIGxpbmVhciBpbiB0aW1lIHdpdGggdGhlIHNpemUgb2YgdGhlIGJ1Y2tldC4gIENvbnNlcXVlbnRseSwgYQorKyAgIGxhcmdlciBoYXNoIHRhYmxlIHNpemUgKHRoYXQgaXMsIGEgbGFyZ2VyIG51bWJlciBvZiBidWNrZXRzKSBpcyBwcm9uZSB0bworKyAgIHlpZWxkaW5nIHNob3J0ZXIgY2hhaW5zLCAqZ2l2ZW4qIHRoZSBgaGFzaGVyJyBmdW5jdGlvbiBiZWhhdmVzIHByb3Blcmx5LgorKworKyAgIExvbmcgYnVja2V0cyBzbG93IGRvd24gdGhlIGxvb2t1cCBhbGdvcml0aG0uICBPbmUgbWlnaHQgdXNlIGJpZyBoYXNoIHRhYmxlCisrICAgc2l6ZXMgaW4gaG9wZSB0byByZWR1Y2UgdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIGJ1Y2tldHMsIGJ1dCB0aGlzIG1pZ2h0CisrICAgYmVjb21lIGlub3JkaW5hdGUsIGFzIHVudXNlZCBzbG90cyBpbiB0aGUgaGFzaCB0YWJsZSB0YWtlIHNvbWUgc3BhY2UuICBUaGUKKysgICBiZXN0IGJldCBpcyB0byBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBhIGdvb2QgYGhhc2hlcicgZnVuY3Rpb24gKGJld2FyZQorKyAgIHRoYXQgdGhvc2UgYXJlIG5vdCB0aGF0IGVhc3kgdG8gd3JpdGUhIDotKSwgYW5kIHRvIHVzZSBhIHRhYmxlIHNpemUKKysgICBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzLiAgKi8KKysKKysvKiBJZiBhbiBpbnNlcnRpb24gbWFrZXMgdGhlIHJhdGlvIG9mIG5vbmVtcHR5IGJ1Y2tldHMgdG8gdGFibGUgc2l6ZSBsYXJnZXIKKysgICB0aGFuIHRoZSBncm93dGggdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuIDAuMCBhbmQgMS4wKSwgdGhlbiBpbmNyZWFzZQorKyAgIHRoZSB0YWJsZSBzaXplIGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBncm93dGggZmFjdG9yIChhIG51bWJlciBncmVhdGVyIHRoYW4KKysgICAxLjApLiAgVGhlIGdyb3d0aCB0aHJlc2hvbGQgZGVmYXVsdHMgdG8gMC44LCBhbmQgdGhlIGdyb3d0aCBmYWN0b3IKKysgICBkZWZhdWx0cyB0byAxLjQxNCwgbWVhbmluZyB0aGF0IHRoZSB0YWJsZSB3aWxsIGhhdmUgZG91YmxlZCBpdHMgc2l6ZQorKyAgIGV2ZXJ5IHNlY29uZCB0aW1lIDgwJSBvZiB0aGUgYnVja2V0cyBnZXQgdXNlZC4gICovCisrI2RlZmluZSBERUZBVUxUX0dST1dUSF9USFJFU0hPTEQgMC44CisrI2RlZmluZSBERUZBVUxUX0dST1dUSF9GQUNUT1IgMS40MTQKKysKKysvKiBJZiBhIGRlbGV0aW9uIGVtcHRpZXMgYSBidWNrZXQgYW5kIGNhdXNlcyB0aGUgcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvCisrICAgdGFibGUgc2l6ZSB0byBiZWNvbWUgc21hbGxlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIChhIG51bWJlciBiZXR3ZWVuCisrICAgMC4wIGFuZCAxLjApLCB0aGVuIHNocmluayB0aGUgdGFibGUgYnkgbXVsdGlwbHlpbmcgYnkgdGhlIHNocmluayBmYWN0b3IgKGEKKysgICBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBzaHJpbmsgdGhyZXNob2xkIGJ1dCBzbWFsbGVyIHRoYW4gMS4wKS4gIFRoZSBzaHJpbmsKKysgICB0aHJlc2hvbGQgYW5kIGZhY3RvciBkZWZhdWx0IHRvIDAuMCBhbmQgMS4wLCBtZWFuaW5nIHRoYXQgdGhlIHRhYmxlIG5ldmVyCisrICAgc2hyaW5rcy4gICovCisrI2RlZmluZSBERUZBVUxUX1NIUklOS19USFJFU0hPTEQgMC4wCisrI2RlZmluZSBERUZBVUxUX1NIUklOS19GQUNUT1IgMS4wCisrCisrLyogVXNlIHRoaXMgdG8gaW5pdGlhbGl6ZSBvciByZXNldCBhIFRVTklORyBzdHJ1Y3R1cmUgdG8KKysgICBzb21lIHNlbnNpYmxlIHZhbHVlcy4gKi8KKytzdGF0aWMgY29uc3QgSGFzaF90dW5pbmcgZGVmYXVsdF90dW5pbmcgPQorKyAgeworKyAgICBERUZBVUxUX1NIUklOS19USFJFU0hPTEQsCisrICAgIERFRkFVTFRfU0hSSU5LX0ZBQ1RPUiwKKysgICAgREVGQVVMVF9HUk9XVEhfVEhSRVNIT0xELAorKyAgICBERUZBVUxUX0dST1dUSF9GQUNUT1IsCisrICAgIGZhbHNlCisrICB9OworKworKy8qIEluZm9ybWF0aW9uIGFuZCBsb29rdXAuICAqLworKworKy8qIFRoZSBmb2xsb3dpbmcgZmV3IGZ1bmN0aW9ucyBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdmVyYWxsIGhhc2gKKysgICB0YWJsZSBvcmdhbml6YXRpb246IHRoZSBudW1iZXIgb2YgZW50cmllcywgbnVtYmVyIG9mIGJ1Y2tldHMgYW5kIG1heGltdW0KKysgICBsZW5ndGggb2YgYnVja2V0cy4gICovCisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZS4gIFRoZSB0YWJsZSBzaXplLCB0aGUgdG90YWwKKysgICBudW1iZXIgb2YgYnVja2V0cyAodXNlZCBwbHVzIHVudXNlZCksIG9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cywgYXJlCisrICAgdGhlIHNhbWUgcXVhbnRpdHkuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9idWNrZXRzIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICByZXR1cm4gdGFibGUtPm5fYnVja2V0czsKKyt9CisrCisrLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gdXNlIChub24tZW1wdHkgYnVja2V0cykuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfbl9idWNrZXRzX3VzZWQgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHJldHVybiB0YWJsZS0+bl9idWNrZXRzX3VzZWQ7CisrfQorKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBlbnRyaWVzLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgcmV0dXJuIHRhYmxlLT5uX2VudHJpZXM7CisrfQorKworKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGNoYWluIChidWNrZXQpLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X21heF9idWNrZXRfbGVuZ3RoIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgdW5zaWduZWQgbWF4X2J1Y2tldF9sZW5ndGggPSAwOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yID0gYnVja2V0OworKwkgIHVuc2lnbmVkIGJ1Y2tldF9sZW5ndGggPSAxOworKworKwkgIHdoaWxlIChjdXJzb3IgPSBjdXJzb3ItPm5leHQsIGN1cnNvcikKKysJICAgIGJ1Y2tldF9sZW5ndGgrKzsKKysKKysJICBpZiAoYnVja2V0X2xlbmd0aCA+IG1heF9idWNrZXRfbGVuZ3RoKQorKwkgICAgbWF4X2J1Y2tldF9sZW5ndGggPSBidWNrZXRfbGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIHJldHVybiBtYXhfYnVja2V0X2xlbmd0aDsKKyt9CisrCisrLyogRG8gYSBtaWxkIHZhbGlkYXRpb24gb2YgYSBoYXNoIHRhYmxlLCBieSB0cmF2ZXJzaW5nIGl0IGFuZCBjaGVja2luZyB0d28KKysgICBzdGF0aXN0aWNzLiAgKi8KKysKKytib29sCisraGFzaF90YWJsZV9vayAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHVuc2lnbmVkIG5fYnVja2V0c191c2VkID0gMDsKKysgIHVuc2lnbmVkIG5fZW50cmllcyA9IDA7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3IgPSBidWNrZXQ7CisrCisrCSAgLyogQ291bnQgYnVja2V0IGhlYWQuICAqLworKwkgIG5fYnVja2V0c191c2VkKys7CisrCSAgbl9lbnRyaWVzKys7CisrCisrCSAgLyogQ291bnQgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCisrCSAgICBuX2VudHJpZXMrKzsKKysJfQorKyAgICB9CisrCisrICBpZiAobl9idWNrZXRzX3VzZWQgPT0gdGFibGUtPm5fYnVja2V0c191c2VkICYmIG5fZW50cmllcyA9PSB0YWJsZS0+bl9lbnRyaWVzKQorKyAgICByZXR1cm4gdHJ1ZTsKKysKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrdm9pZAorK2hhc2hfcHJpbnRfc3RhdGlzdGljcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEZJTEUgKnN0cmVhbSkKKyt7CisrICB1bnNpZ25lZCBuX2VudHJpZXMgPSBoYXNoX2dldF9uX2VudHJpZXMgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG5fYnVja2V0cyA9IGhhc2hfZ2V0X25fYnVja2V0cyAodGFibGUpOworKyAgdW5zaWduZWQgbl9idWNrZXRzX3VzZWQgPSBoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCAodGFibGUpOworKyAgdW5zaWduZWQgbWF4X2J1Y2tldF9sZW5ndGggPSBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAodGFibGUpOworKworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBlbnRyaWVzOiAgICAgICAgICV1XG4iLCBuX2VudHJpZXMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzOiAgICAgICAgICV1XG4iLCBuX2J1Y2tldHMpOworKyAgZnByaW50ZiAoc3RyZWFtLCAiIyBidWNrZXRzIHVzZWQ6ICAgICV1ICglLjJmJSUpXG4iLCBuX2J1Y2tldHNfdXNlZCwKKysJICAgKDEwMC4wICogbl9idWNrZXRzX3VzZWQpIC8gbl9idWNrZXRzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIm1heCBidWNrZXQgbGVuZ3RoOiAldVxuIiwgbWF4X2J1Y2tldF9sZW5ndGgpOworK30KKysKKysvKiBJZiBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUsIHJldHVybiB0aGUKKysgICBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICAqLworKworK3ZvaWQgKgorK2hhc2hfbG9va3VwIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgIGlmIChidWNrZXQtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrICAgIGlmICh0YWJsZS0+Y29tcGFyYXRvciAoZW50cnksIGN1cnNvci0+ZGF0YSkpCisrICAgICAgcmV0dXJuIGN1cnNvci0+ZGF0YTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBXYWxraW5nLiAgKi8KKysKKysvKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgcGFnZSB0cmF2ZXJzZSB0aGUgaGFzaCB0YWJsZSBhbmQgcHJvY2VzcyB0aGUKKysgICBjb250YWluZWQgZW50cmllcy4gIEZvciB0aGUgdHJhdmVyc2FsIHRvIHdvcmsgcHJvcGVybHksIHRoZSBoYXNoIHRhYmxlCisrICAgc2hvdWxkIG5vdCBiZSByZXNpemVkIG5vciBtb2RpZmllZCB3aGlsZSBhbnkgcGFydGljdWxhciBlbnRyeSBpcyBiZWluZworKyAgIHByb2Nlc3NlZC4gIEluIHBhcnRpY3VsYXIsIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBhZGRlZCBvciByZW1vdmVkLiAgKi8KKysKKysvKiBSZXR1cm4gdGhlIGZpcnN0IGRhdGEgaW4gdGhlIHRhYmxlLCBvciBOVUxMIGlmIHRoZSB0YWJsZSBpcyBlbXB0eS4gICovCisrCisrdm9pZCAqCisraGFzaF9nZXRfZmlyc3QgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBpZiAodGFibGUtPm5fZW50cmllcyA9PSAwKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgOyBidWNrZXQrKykKKysgICAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICAgIGFib3J0ICgpOworKyAgICBlbHNlIGlmIChidWNrZXQtPmRhdGEpCisrICAgICAgcmV0dXJuIGJ1Y2tldC0+ZGF0YTsKKyt9CisrCisrLyogUmV0dXJuIHRoZSB1c2VyIGRhdGEgZm9yIHRoZSBlbnRyeSBmb2xsb3dpbmcgRU5UUlksIHdoZXJlIEVOVFJZIGhhcyBiZWVuCisrICAgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIGVpdGhlciBgaGFzaF9nZXRfZmlyc3QnIG9yIGBoYXNoX2dldF9uZXh0Jy4KKysgICBSZXR1cm4gTlVMTCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBlbnRyaWVzLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2dldF9uZXh0IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIEZpbmQgbmV4dCBlbnRyeSBpbiB0aGUgc2FtZSBidWNrZXQuICAqLworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICBpZiAoY3Vyc29yLT5kYXRhID09IGVudHJ5ICYmIGN1cnNvci0+bmV4dCkKKysgICAgICByZXR1cm4gY3Vyc29yLT5uZXh0LT5kYXRhOworKworKyAgLyogRmluZCBmaXJzdCBlbnRyeSBpbiBhbnkgc3Vic2VxdWVudCBidWNrZXQuICAqLworKyAgd2hpbGUgKCsrYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdCkKKysgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgICByZXR1cm4gYnVja2V0LT5kYXRhOworKworKyAgLyogTm9uZSBmb3VuZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogRmlsbCBCVUZGRVIgd2l0aCBwb2ludGVycyB0byBhY3RpdmUgdXNlciBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlLCB0aGVuCisrICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9pbnRlcnMgY29waWVkLiAgRG8gbm90IGNvcHkgbW9yZSB0aGFuIEJVRkZFUl9TSVpFCisrICAgcG9pbnRlcnMuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9nZXRfZW50cmllcyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIHZvaWQgKipidWZmZXIsCisrCQkgIHVuc2lnbmVkIGJ1ZmZlcl9zaXplKQorK3sKKysgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvdW50ZXIgPj0gYnVmZmVyX3NpemUpCisrCQlyZXR1cm4gY291bnRlcjsKKysJICAgICAgYnVmZmVyW2NvdW50ZXIrK10gPSBjdXJzb3ItPmRhdGE7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIGNvdW50ZXI7CisrfQorKworKy8qIENhbGwgYSBQUk9DRVNTT1IgZnVuY3Rpb24gZm9yIGVhY2ggZW50cnkgb2YgYSBoYXNoIHRhYmxlLCBhbmQgcmV0dXJuIHRoZQorKyAgIG51bWJlciBvZiBlbnRyaWVzIGZvciB3aGljaCB0aGUgcHJvY2Vzc29yIGZ1bmN0aW9uIHJldHVybmVkIHN1Y2Nlc3MuICBBCisrICAgcG9pbnRlciB0byBzb21lIFBST0NFU1NPUl9EQVRBIHdoaWNoIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gZWFjaCBjYWxsIHRvCisrICAgdGhlIHByb2Nlc3NvciBmdW5jdGlvbi4gIFRoZSBQUk9DRVNTT1IgYWNjZXB0cyB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMKKysgICB0aGUgdXNlciBlbnRyeSBiZWluZyB3YWxrZWQgaW50bywgdGhlIHNlY29uZCBpcyB0aGUgdmFsdWUgb2YgUFJPQ0VTU09SX0RBVEEKKysgICBhcyByZWNlaXZlZC4gIFRoZSB3YWxraW5nIGNvbnRpbnVlIGZvciBhcyBsb25nIGFzIHRoZSBQUk9DRVNTT1IgZnVuY3Rpb24KKysgICByZXR1cm5zIG5vbnplcm8uICBXaGVuIGl0IHJldHVybnMgemVybywgdGhlIHdhbGtpbmcgaXMgaW50ZXJydXB0ZWQuICAqLworKworK3Vuc2lnbmVkCisraGFzaF9kb19mb3JfZWFjaCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIEhhc2hfcHJvY2Vzc29yIHByb2Nlc3NvciwKKysJCSAgdm9pZCAqcHJvY2Vzc29yX2RhdGEpCisreworKyAgdW5zaWduZWQgY291bnRlciA9IDA7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwkgICAgeworKwkgICAgICBpZiAoISgqcHJvY2Vzc29yKSAoY3Vyc29yLT5kYXRhLCBwcm9jZXNzb3JfZGF0YSkpCisrCQlyZXR1cm4gY291bnRlcjsKKysJICAgICAgY291bnRlcisrOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBjb3VudGVyOworK30KKysKKysvKiBBbGxvY2F0aW9uIGFuZCBjbGVhbi11cC4gICovCisrCisrLyogUmV0dXJuIGEgaGFzaCBpbmRleCBmb3IgYSBOVUwtdGVybWluYXRlZCBTVFJJTkcgYmV0d2VlbiAwIGFuZCBOX0JVQ0tFVFMtMS4KKysgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugcm91dGluZSBmb3IgY29uc3RydWN0aW5nIG90aGVyIGhhc2hpbmcgZnVuY3Rpb25zLiAgKi8KKysKKysjaWYgVVNFX0RJRkZfSEFTSAorKworKy8qIEFib3V0IGhhc2hpbmdzLCBQYXVsIEVnZ2VydCB3cml0ZXMgdG8gbWUgKEZQKSwgb24gMTk5NC0wMS0wMTogIlBsZWFzZSBzZWUKKysgICBCLiBKLiBNY0tlbnppZSwgUi4gSGFycmllcyAmIFQuIEJlbGwsIFNlbGVjdGluZyBhIGhhc2hpbmcgYWxnb3JpdGhtLAorKyAgIFNvZnR3YXJlLS1wcmFjdGljZSAmIGV4cGVyaWVuY2UgMjAsIDIgKEZlYiAxOTkwKSwgMjA5LTIyNC4gIEdvb2QgaGFzaAorKyAgIGFsZ29yaXRobXMgdGVuZCB0byBiZSBkb21haW4tc3BlY2lmaWMsIHNvIHdoYXQncyBnb29kIGZvciBbZGlmZnV0aWxzJ10gaW8uYworKyAgIG1heSBub3QgYmUgZ29vZCBmb3IgeW91ciBhcHBsaWNhdGlvbi4iICAqLworKworK3Vuc2lnbmVkCisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cmluZywgdW5zaWduZWQgbl9idWNrZXRzKQorK3sKKysjIGRlZmluZSBST1RBVEVfTEVGVChWYWx1ZSwgU2hpZnQpIFwKKysgICgoVmFsdWUpIDw8IChTaGlmdCkgfCAoVmFsdWUpID4+ICgoc2l6ZW9mICh1bnNpZ25lZCkgKiBDSEFSX0JJVCkgLSAoU2hpZnQpKSkKKysjIGRlZmluZSBIQVNIX09ORV9DSEFSKFZhbHVlLCBCeXRlKSBcCisrICAoKEJ5dGUpICsgUk9UQVRFX0xFRlQgKFZhbHVlLCA3KSkKKysKKysgIHVuc2lnbmVkIHZhbHVlID0gMDsKKysKKysgIGZvciAoOyAqc3RyaW5nOyBzdHJpbmcrKykKKysgICAgdmFsdWUgPSBIQVNIX09ORV9DSEFSICh2YWx1ZSwgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cmluZyk7CisrICByZXR1cm4gdmFsdWUgJSBuX2J1Y2tldHM7CisrCisrIyB1bmRlZiBST1RBVEVfTEVGVAorKyMgdW5kZWYgSEFTSF9PTkVfQ0hBUgorK30KKysKKysjZWxzZSAvKiBub3QgVVNFX0RJRkZfSEFTSCAqLworKworKy8qIFRoaXMgb25lIGNvbWVzIGZyb20gYHJlY29kZScsIGFuZCBwZXJmb3JtcyBhIGJpdCBiZXR0ZXIgdGhhbiB0aGUgYWJvdmUgYXMKKysgICBwZXIgYSBmZXcgZXhwZXJpbWVudHMuICBJdCBpcyBpbnNwaXJlZCBmcm9tIGEgaGFzaGluZyByb3V0aW5lIGZvdW5kIGluIHRoZQorKyAgIHZlcnkgb2xkIEN5YmVyIGBzbm9vcCcsIGl0c2VsZiB3cml0dGVuIGluIHR5cGljYWwgR3JlZyBNYW5zZmllbGQgc3R5bGUuCisrICAgKEJ5IHRoZSB3YXksIHdoYXQgaGFwcGVuZWQgdG8gdGhpcyBleGNlbGxlbnQgbWFuPyAgSXMgaGUgc3RpbGwgYWxpdmU/KSAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIG5fYnVja2V0cykKKyt7CisrICB1bnNpZ25lZCB2YWx1ZSA9IDA7CisrCisrICB3aGlsZSAoKnN0cmluZykKKysgICAgdmFsdWUgPSAoKHZhbHVlICogMzEgKyAoaW50KSAqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyaW5nKyspCisrCSAgICAgJSBuX2J1Y2tldHMpOworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKysjZW5kaWYgLyogbm90IFVTRV9ESUZGX0hBU0ggKi8KKysKKysvKiBSZXR1cm4gdHJ1ZSBpZiBDQU5ESURBVEUgaXMgYSBwcmltZSBudW1iZXIuICBDQU5ESURBVEUgc2hvdWxkIGJlIGFuIG9kZAorKyAgIG51bWJlciBhdCBsZWFzdCBlcXVhbCB0byAxMS4gICovCisrCisrc3RhdGljIGJvb2wKKytpc19wcmltZSAodW5zaWduZWQgbG9uZyBjYW5kaWRhdGUpCisreworKyAgdW5zaWduZWQgbG9uZyBkaXZpc29yID0gMzsKKysgIHVuc2lnbmVkIGxvbmcgc3F1YXJlID0gZGl2aXNvciAqIGRpdmlzb3I7CisrCisrICB3aGlsZSAoc3F1YXJlIDwgY2FuZGlkYXRlICYmIChjYW5kaWRhdGUgJSBkaXZpc29yKSkKKysgICAgeworKyAgICAgIGRpdmlzb3IrKzsKKysgICAgICBzcXVhcmUgKz0gNCAqIGRpdmlzb3I7CisrICAgICAgZGl2aXNvcisrOworKyAgICB9CisrCisrICByZXR1cm4gKGNhbmRpZGF0ZSAlIGRpdmlzb3IgPyB0cnVlIDogZmFsc2UpOworK30KKysKKysvKiBSb3VuZCBhIGdpdmVuIENBTkRJREFURSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgcHJpbWUsIGFuZCByZXR1cm4gdGhhdAorKyAgIHByaW1lLiAgUHJpbWVzIGxvd2VyIHRoYW4gMTAgYXJlIG1lcmVseSBza2lwcGVkLiAgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgbG9uZworK25leHRfcHJpbWUgKHVuc2lnbmVkIGxvbmcgY2FuZGlkYXRlKQorK3sKKysgIC8qIFNraXAgc21hbGwgcHJpbWVzLiAgKi8KKysgIGlmIChjYW5kaWRhdGUgPCAxMCkKKysgICAgY2FuZGlkYXRlID0gMTA7CisrCisrICAvKiBNYWtlIGl0IGRlZmluaXRlbHkgb2RkLiAgKi8KKysgIGNhbmRpZGF0ZSB8PSAxOworKworKyAgd2hpbGUgKCFpc19wcmltZSAoY2FuZGlkYXRlKSkKKysgICAgY2FuZGlkYXRlICs9IDI7CisrCisrICByZXR1cm4gY2FuZGlkYXRlOworK30KKysKKyt2b2lkCisraGFzaF9yZXNldF90dW5pbmcgKEhhc2hfdHVuaW5nICp0dW5pbmcpCisreworKyAgKnR1bmluZyA9IGRlZmF1bHRfdHVuaW5nOworK30KKysKKysvKiBGb3IgdGhlIGdpdmVuIGhhc2ggVEFCTEUsIGNoZWNrIHRoZSB1c2VyIHN1cHBsaWVkIHR1bmluZyBzdHJ1Y3R1cmUgZm9yCisrICAgcmVhc29uYWJsZSB2YWx1ZXMsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBubyBncm9zcyBlcnJvciB3aXRoIGl0LgorKyAgIE90aGVyd2lzZSwgZGVmaW5pdGl2ZWx5IHJlc2V0IHRoZSBUVU5JTkcgZmllbGQgdG8gc29tZSBhY2NlcHRhYmxlIGRlZmF1bHQKKysgICBpbiB0aGUgaGFzaCB0YWJsZSAodGhhdCBpcywgdGhlIHVzZXIgbG9zZXMgdGhlIHJpZ2h0IG9mIGZ1cnRoZXIgbW9kaWZ5aW5nCisrICAgdHVuaW5nIGFyZ3VtZW50cyksIGFuZCByZXR1cm4gZmFsc2UuICAqLworKworK3N0YXRpYyBib29sCisrY2hlY2tfdHVuaW5nIChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysKKysgIGlmICh0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPiAwLjAKKysgICAgICAmJiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgPCAxLjAKKysgICAgICAmJiB0dW5pbmctPmdyb3d0aF9mYWN0b3IgPiAxLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgPj0gMC4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkIDwgMS4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfZmFjdG9yID4gdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfZmFjdG9yIDw9IDEuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCA8IHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkKKysgICAgcmV0dXJuIHRydWU7CisrCisrICB0YWJsZS0+dHVuaW5nID0gJmRlZmF1bHRfdHVuaW5nOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKysvKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIGEgbmV3IGhhc2ggdGFibGUsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiAgVGhlIGluaXRpYWwKKysgICBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNvIGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQgeW91CisrICAgbWF5IGluc2VydCBhdCBsZWFzdCBDQU5ESURBVEUgZGlmZmVyZW50IHVzZXIgZW50cmllcyBiZWZvcmUgYW55IGdyb3d0aCBvZgorKyAgIHRoZSBoYXNoIHRhYmxlIHNpemUgb2NjdXJzLiAgU28sIGlmIGhhdmUgYSByZWFzb25hYmx5IHRpZ2h0IGEtcHJpb3JpIHVwcGVyCisrICAgYm91bmQgb24gdGhlIG51bWJlciBvZiBlbnRyaWVzIHlvdSBpbnRlbmQgdG8gaW5zZXJ0IGluIHRoZSBoYXNoIHRhYmxlLCB5b3UKKysgICBtYXkgc2F2ZSBzb21lIHRhYmxlIG1lbW9yeSBhbmQgaW5zZXJ0aW9uIHRpbWUsIGJ5IHNwZWNpZnlpbmcgaXQgaGVyZS4gIElmCisrICAgdGhlIElTX05fQlVDS0VUUyBmaWVsZCBvZiB0aGUgVFVOSU5HIHN0cnVjdHVyZSBpcyB0cnVlLCB0aGUgQ0FORElEQVRFCisrICAgYXJndW1lbnQgaGFzIGl0cyBtZWFuaW5nIGNoYW5nZWQgdG8gdGhlIHdhbnRlZCBudW1iZXIgb2YgYnVja2V0cy4KKysKKysgICBUVU5JTkcgcG9pbnRzIHRvIGEgc3RydWN0dXJlIG9mIHVzZXItc3VwcGxpZWQgdmFsdWVzLCBpbiBjYXNlIHNvbWUgZmluZQorKyAgIHR1bmluZyBpcyB3YW50ZWQgb3ZlciB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgaGFzaGVyLiAgSWYgVFVOSU5HIGlzCisrICAgTlVMTCwgdGhlIGRlZmF1bHQgdHVuaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW5zdGVhZC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBIQVNIRVIgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3ZpZGVkLiAgSXQgYWNjZXB0cyB0d28KKysgICBhcmd1bWVudHMgRU5UUlkgYW5kIFRBQkxFX1NJWkUuICBJdCBjb21wdXRlcywgYnkgaGFzaGluZyBFTlRSWSBjb250ZW50cywgYQorKyAgIHNsb3QgbnVtYmVyIGZvciB0aGF0IGVudHJ5IHdoaWNoIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgMC4uVEFCTEVfU0laRS0xLgorKyAgIFRoaXMgc2xvdCBudW1iZXIgaXMgdGhlbiByZXR1cm5lZC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBDT01QQVJBVE9SIGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gIEl0IGFjY2VwdHMgdHdvCisrICAgYXJndW1lbnRzIHBvaW50aW5nIHRvIHVzZXIgZGF0YSwgaXQgdGhlbiByZXR1cm5zIHRydWUgZm9yIGEgcGFpciBvZiBlbnRyaWVzCisrICAgdGhhdCBjb21wYXJlIGVxdWFsLCBvciBmYWxzZSBvdGhlcndpc2UuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVybmFsbHkgY2FsbGVkCisrICAgb24gZW50cmllcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93biB0byBoYXNoIHRvIHRoZSBzYW1lIGJ1Y2tldCBpbmRleC4KKysKKysgICBUaGUgdXNlci1zdXBwbGllZCBEQVRBX0ZSRUVSIGZ1bmN0aW9uLCB3aGVuIG5vdCBOVUxMLCBtYXkgYmUgbGF0ZXIgY2FsbGVkCisrICAgd2l0aCB0aGUgdXNlciBkYXRhIGFzIGFuIGFyZ3VtZW50LCBqdXN0IGJlZm9yZSB0aGUgZW50cnkgY29udGFpbmluZyB0aGUKKysgICBkYXRhIGdldHMgZnJlZWQuICBUaGlzIGhhcHBlbnMgZnJvbSB3aXRoaW4gYGhhc2hfZnJlZScgb3IgYGhhc2hfY2xlYXInLgorKyAgIFlvdSBzaG91bGQgc3BlY2lmeSB0aGlzIGZ1bmN0aW9uIG9ubHkgaWYgeW91IHdhbnQgdGhlc2UgZnVuY3Rpb25zIHRvIGZyZWUKKysgICBhbGwgb2YgeW91ciBgZGF0YScgZGF0YS4gIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBjYXNlIHdoZW4geW91ciBkYXRhIGlzCisrICAgc2ltcGx5IGFuIGF1eGlsaWFyeSBzdHJ1Y3QgdGhhdCB5b3UgaGF2ZSBtYWxsb2MnZCB0byBhZ2dyZWdhdGUgc2V2ZXJhbAorKyAgIHZhbHVlcy4gICovCisrCisrSGFzaF90YWJsZSAqCisraGFzaF9pbml0aWFsaXplICh1bnNpZ25lZCBjYW5kaWRhdGUsIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcsCisrCQkgSGFzaF9oYXNoZXIgaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IgY29tcGFyYXRvciwKKysJCSBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcikKKyt7CisrICBIYXNoX3RhYmxlICp0YWJsZTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBpZiAoaGFzaGVyID09IE5VTEwgfHwgY29tcGFyYXRvciA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIHRhYmxlID0gKEhhc2hfdGFibGUgKikgbWFsbG9jIChzaXplb2YgKEhhc2hfdGFibGUpKTsKKysgIGlmICh0YWJsZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmICghdHVuaW5nKQorKyAgICB0dW5pbmcgPSAmZGVmYXVsdF90dW5pbmc7CisrICB0YWJsZS0+dHVuaW5nID0gdHVuaW5nOworKyAgaWYgKCFjaGVja190dW5pbmcgKHRhYmxlKSkKKysgICAgeworKyAgICAgIC8qIEZhaWwgaWYgdGhlIHR1bmluZyBvcHRpb25zIGFyZSBpbnZhbGlkLiAgVGhpcyBpcyB0aGUgb25seSBvY2Nhc2lvbgorKwkgd2hlbiB0aGUgdXNlciBnZXRzIHNvbWUgZmVlZGJhY2sgYWJvdXQgaXQuICBPbmNlIHRoZSB0YWJsZSBpcyBjcmVhdGVkLAorKwkgaWYgdGhlIHVzZXIgcHJvdmlkZXMgaW52YWxpZCB0dW5pbmcgb3B0aW9ucywgd2Ugc2lsZW50bHkgcmV2ZXJ0IHRvCisrCSB1c2luZyB0aGUgZGVmYXVsdHMsIGFuZCBpZ25vcmUgZnVydGhlciByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgdHVuaW5nCisrCSBvcHRpb25zLiAgKi8KKysgICAgICBmcmVlICh0YWJsZSk7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgIHRhYmxlLT5uX2J1Y2tldHMKKysgICAgPSBuZXh0X3ByaW1lICh0dW5pbmctPmlzX25fYnVja2V0cyA/IGNhbmRpZGF0ZQorKwkJICA6ICh1bnNpZ25lZCkgKGNhbmRpZGF0ZSAvIHR1bmluZy0+Z3Jvd3RoX3RocmVzaG9sZCkpOworKworKyAgdGFibGUtPmJ1Y2tldCA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKQorKyAgICBtYWxsb2MgKHRhYmxlLT5uX2J1Y2tldHMgKiBzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrICBpZiAodGFibGUtPmJ1Y2tldCA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZnJlZSAodGFibGUpOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gdGFibGUtPmJ1Y2tldCArIHRhYmxlLT5uX2J1Y2tldHM7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysgICAgICBidWNrZXQtPm5leHQgPSBOVUxMOworKyAgICB9CisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSAwOworKyAgdGFibGUtPm5fZW50cmllcyA9IDA7CisrCisrICB0YWJsZS0+aGFzaGVyID0gaGFzaGVyOworKyAgdGFibGUtPmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yOworKyAgdGFibGUtPmRhdGFfZnJlZXIgPSBkYXRhX2ZyZWVyOworKworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IE5VTEw7CisrI2lmIFVTRV9PQlNUQUNLCisrICBvYnN0YWNrX2luaXQgKCZ0YWJsZS0+ZW50cnlfc3RhY2spOworKyNlbmRpZgorKyAgcmV0dXJuIHRhYmxlOworK30KKysKKysvKiBNYWtlIGFsbCBidWNrZXRzIGVtcHR5LCBwbGFjaW5nIGFueSBjaGFpbmVkIGVudHJpZXMgb24gdGhlIGZyZWUgbGlzdC4KKysgICBBcHBseSB0aGUgdXNlci1zcGVjaWZpZWQgZnVuY3Rpb24gZGF0YV9mcmVlciAoaWYgYW55KSB0byB0aGUgZGF0YXMgb2YgYW55CisrICAgYWZmZWN0ZWQgZW50cmllcy4gICovCisrCisrdm9pZAorK2hhc2hfY2xlYXIgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrCisrCSAgLyogRnJlZSB0aGUgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJICBmb3IgKGN1cnNvciA9IGJ1Y2tldC0+bmV4dDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwkgICAgeworKwkgICAgICBpZiAodGFibGUtPmRhdGFfZnJlZXIpCisrCQkoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoY3Vyc29yLT5kYXRhKTsKKysJICAgICAgY3Vyc29yLT5kYXRhID0gTlVMTDsKKysKKysJICAgICAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysJICAgICAgLyogUmVsaW5raW5nIGlzIGRvbmUgb25lIGVudHJ5IGF0IGEgdGltZSwgYXMgaXQgaXMgdG8gYmUgZXhwZWN0ZWQKKysJCSB0aGF0IG92ZXJmbG93cyBhcmUgZWl0aGVyIHJhcmUgb3Igc2hvcnQuICAqLworKwkgICAgICBjdXJzb3ItPm5leHQgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKwkgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gY3Vyc29yOworKwkgICAgfQorKworKwkgIC8qIEZyZWUgdGhlIGJ1Y2tldCBoZWFkLiAgKi8KKysJICBpZiAodGFibGUtPmRhdGFfZnJlZXIpCisrCSAgICAoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoYnVja2V0LT5kYXRhKTsKKysJICBidWNrZXQtPmRhdGEgPSBOVUxMOworKwkgIGJ1Y2tldC0+bmV4dCA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgdGFibGUtPm5fYnVja2V0c191c2VkID0gMDsKKysgIHRhYmxlLT5uX2VudHJpZXMgPSAwOworK30KKysKKysvKiBSZWNsYWltIGFsbCBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBhIGhhc2ggdGFibGUuICBJZiBhIGRhdGFfZnJlZXIKKysgICBmdW5jdGlvbiBoYXMgYmVlbiBzdXBwbGllZCBieSB0aGUgdXNlciB3aGVuIHRoZSBoYXNoIHRhYmxlIHdhcyBjcmVhdGVkLAorKyAgIHRoaXMgZnVuY3Rpb24gYXBwbGllcyBpdCB0byB0aGUgZGF0YSBvZiBlYWNoIGVudHJ5IGJlZm9yZSBmcmVlaW5nIHRoYXQKKysgICBlbnRyeS4gICovCisrCisrdm9pZAorK2hhc2hfZnJlZSAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysKKysgIC8qIENhbGwgdGhlIHVzZXIgZGF0YV9mcmVlciBmdW5jdGlvbi4gICovCisrICBpZiAodGFibGUtPmRhdGFfZnJlZXIgJiYgdGFibGUtPm5fZW50cmllcykKKysgICAgeworKyAgICAgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrCXsKKysJICBpZiAoYnVja2V0LT5kYXRhKQorKwkgICAgeworKwkgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCQl7CisrCQkgICgqdGFibGUtPmRhdGFfZnJlZXIpIChjdXJzb3ItPmRhdGEpOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKysjaWYgVVNFX09CU1RBQ0sKKysKKysgIG9ic3RhY2tfZnJlZSAoJnRhYmxlLT5lbnRyeV9zdGFjaywgTlVMTCk7CisrCisrI2Vsc2UKKysKKysgIC8qIEZyZWUgYWxsIGJ1Y2tldCBvdmVyZmxvd2VkIGVudHJpZXMuICAqLworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0LT5uZXh0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCXsKKysJICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKwkgIGZyZWUgKGN1cnNvcik7CisrCX0KKysgICAgfQorKworKyAgLyogQWxzbyByZWNsYWltIHRoZSBpbnRlcm5hbCBsaXN0IG9mIHByZXZpb3VzbHkgZnJlZWQgZW50cmllcy4gICovCisrICBmb3IgKGN1cnNvciA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysgICAgeworKyAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrICAgICAgZnJlZSAoY3Vyc29yKTsKKysgICAgfQorKworKyNlbmRpZgorKworKyAgLyogRnJlZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gICovCisrICBmcmVlICh0YWJsZS0+YnVja2V0KTsKKysgIGZyZWUgKHRhYmxlKTsKKyt9CisrCisrLyogSW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gICovCisrCisrLyogR2V0IGEgbmV3IGhhc2ggZW50cnkgZm9yIGEgYnVja2V0IG92ZXJmbG93LCBwb3NzaWJseSBieSByZWNseWluZyBhCisrICAgcHJldmlvdXNseSBmcmVlZCBvbmUuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYWxsb2NhdGUgYSBuZXcgb25lLiAgKi8KKysKKytzdGF0aWMgc3RydWN0IGhhc2hfZW50cnkgKgorK2FsbG9jYXRlX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3OworKworKyAgaWYgKHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QpCisrICAgIHsKKysgICAgICBuZXcgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgICAgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBuZXctPm5leHQ7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyNpZiBVU0VfT0JTVEFDSworKyAgICAgIG5ldyA9IChzdHJ1Y3QgaGFzaF9lbnRyeSAqKQorKwlvYnN0YWNrX2FsbG9jICgmdGFibGUtPmVudHJ5X3N0YWNrLCBzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrI2Vsc2UKKysgICAgICBuZXcgPSAoc3RydWN0IGhhc2hfZW50cnkgKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBoYXNoX2VudHJ5KSk7CisrI2VuZGlmCisrICAgIH0KKysKKysgIHJldHVybiBuZXc7CisrfQorKworKy8qIEZyZWUgYSBoYXNoIGVudHJ5IHdoaWNoIHdhcyBwYXJ0IG9mIHNvbWUgYnVja2V0IG92ZXJmbG93LAorKyAgIHNhdmluZyBpdCBmb3IgbGF0ZXIgcmVjeWNsaW5nLiAgKi8KKysKKytzdGF0aWMgdm9pZAorK2ZyZWVfZW50cnkgKEhhc2hfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgaGFzaF9lbnRyeSAqZW50cnkpCisreworKyAgZW50cnktPmRhdGEgPSBOVUxMOworKyAgZW50cnktPm5leHQgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IGVudHJ5OworK30KKysKKysvKiBUaGlzIHByaXZhdGUgZnVuY3Rpb24gaXMgdXNlZCB0byBoZWxwIHdpdGggaW5zZXJ0aW9uIGFuZCBkZWxldGlvbi4gIFdoZW4KKysgICBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluIHRoZSB0YWJsZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZworKyAgIHVzZXIgZGF0YSBhbmQgc2V0ICpCVUNLRVRfSEVBRCB0byB0aGUgaGVhZCBvZiB0aGUgc2VsZWN0ZWQgYnVja2V0LgorKyAgIE90aGVyd2lzZSwgcmV0dXJuIE5VTEwuICBXaGVuIERFTEVURSBpcyB0cnVlIGFuZCBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGluCisrICAgdGhlIHRhYmxlLCB1bmxpbmsgdGhlIG1hdGNoaW5nIGVudHJ5LiAgKi8KKysKKytzdGF0aWMgdm9pZCAqCisraGFzaF9maW5kX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnksCisrCQkgc3RydWN0IGhhc2hfZW50cnkgKipidWNrZXRfaGVhZCwgYm9vbCBkZWxldGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldAorKyAgICA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+aGFzaGVyIChlbnRyeSwgdGFibGUtPm5fYnVja2V0cyk7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgaWYgKCEgKGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpKQorKyAgICBhYm9ydCAoKTsKKysKKysgICpidWNrZXRfaGVhZCA9IGJ1Y2tldDsKKysKKysgIC8qIFRlc3QgZm9yIGVtcHR5IGJ1Y2tldC4gICovCisrICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogU2VlIGlmIHRoZSBlbnRyeSBpcyB0aGUgZmlyc3QgaW4gdGhlIGJ1Y2tldC4gICovCisrICBpZiAoKCp0YWJsZS0+Y29tcGFyYXRvcikgKGVudHJ5LCBidWNrZXQtPmRhdGEpKQorKyAgICB7CisrICAgICAgdm9pZCAqZGF0YSA9IGJ1Y2tldC0+ZGF0YTsKKysKKysgICAgICBpZiAoZGVsZXRlKQorKwl7CisrCSAgaWYgKGJ1Y2tldC0+bmV4dCkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBidWNrZXQtPm5leHQ7CisrCisrCSAgICAgIC8qIEJ1bXAgdGhlIGZpcnN0IG92ZXJmbG93IGVudHJ5IGludG8gdGhlIGJ1Y2tldCBoZWFkLCB0aGVuIHNhdmUKKysJCSB0aGUgcHJldmlvdXMgZmlyc3Qgb3ZlcmZsb3cgZW50cnkgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCisrCSAgICAgICpidWNrZXQgPSAqbmV4dDsKKysJICAgICAgZnJlZV9lbnRyeSAodGFibGUsIG5leHQpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysJICAgIH0KKysJfQorKworKyAgICAgIHJldHVybiBkYXRhOworKyAgICB9CisrCisrICAvKiBTY2FuIHRoZSBidWNrZXQgb3ZlcmZsb3cuICAqLworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvci0+bmV4dDsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICB7CisrICAgICAgaWYgKCgqdGFibGUtPmNvbXBhcmF0b3IpIChlbnRyeSwgY3Vyc29yLT5uZXh0LT5kYXRhKSkKKysJeworKwkgIHZvaWQgKmRhdGEgPSBjdXJzb3ItPm5leHQtPmRhdGE7CisrCisrCSAgaWYgKGRlbGV0ZSkKKysJICAgIHsKKysJICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQgPSBjdXJzb3ItPm5leHQ7CisrCisrCSAgICAgIC8qIFVubGluayB0aGUgZW50cnkgdG8gZGVsZXRlLCB0aGVuIHNhdmUgdGhlIGZyZWVkIGVudHJ5IGZvciBsYXRlcgorKwkJIHJlY3ljbGluZy4gICovCisrCSAgICAgIGN1cnNvci0+bmV4dCA9IG5leHQtPm5leHQ7CisrCSAgICAgIGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKKysJICAgIH0KKysKKysJICByZXR1cm4gZGF0YTsKKysJfQorKyAgICB9CisrCisrICAvKiBObyBlbnRyeSBmb3VuZC4gICovCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogRm9yIGFuIGFscmVhZHkgZXhpc3RpbmcgaGFzaCB0YWJsZSwgY2hhbmdlIHRoZSBudW1iZXIgb2YgYnVja2V0cyB0aHJvdWdoCisrICAgc3BlY2lmeWluZyBDQU5ESURBVEUuICBUaGUgY29udGVudHMgb2YgdGhlIGhhc2ggdGFibGUgYXJlIHByZXNlcnZlZC4gIFRoZQorKyAgIG5ldyBudW1iZXIgb2YgYnVja2V0cyBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHNvIGFzIHRvIF9ndWFyYW50ZWVfIHRoYXQKKysgICB0aGUgdGFibGUgbWF5IHJlY2VpdmUgYXQgbGVhc3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMsIGluY2x1ZGluZworKyAgIHRob3NlIGFscmVhZHkgaW4gdGhlIHRhYmxlLCBiZWZvcmUgYW55IG90aGVyIGdyb3d0aCBvZiB0aGUgaGFzaCB0YWJsZSBzaXplCisrICAgb2NjdXJzLiAgSWYgVFVOSU5HLT5JU19OX0JVQ0tFVFMgaXMgdHJ1ZSwgdGhlbiBDQU5ESURBVEUgc3BlY2lmaWVzIHRoZQorKyAgIGV4YWN0IG51bWJlciBvZiBidWNrZXRzIGRlc2lyZWQuICAqLworKworK2Jvb2wKKytoYXNoX3JlaGFzaCAoSGFzaF90YWJsZSAqdGFibGUsIHVuc2lnbmVkIGNhbmRpZGF0ZSkKKyt7CisrICBIYXNoX3RhYmxlICpuZXdfdGFibGU7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKworKyAgbmV3X3RhYmxlID0gaGFzaF9pbml0aWFsaXplIChjYW5kaWRhdGUsIHRhYmxlLT50dW5pbmcsIHRhYmxlLT5oYXNoZXIsCisrCQkJICAgICAgIHRhYmxlLT5jb21wYXJhdG9yLCB0YWJsZS0+ZGF0YV9mcmVlcik7CisrICBpZiAobmV3X3RhYmxlID09IE5VTEwpCisrICAgIHJldHVybiBmYWxzZTsKKysKKysgIC8qIE1lcmVseSByZXVzZSB0aGUgZXh0cmEgb2xkIHNwYWNlIGludG8gdGhlIG5ldyB0YWJsZS4gICovCisrI2lmIFVTRV9PQlNUQUNLCisrICBvYnN0YWNrX2ZyZWUgKCZuZXdfdGFibGUtPmVudHJ5X3N0YWNrLCBOVUxMKTsKKysgIG5ld190YWJsZS0+ZW50cnlfc3RhY2sgPSB0YWJsZS0+ZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICBuZXdfdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IHRhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICBpZiAoYnVja2V0LT5kYXRhKQorKyAgICAgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrCXsKKysJICB2b2lkICpkYXRhID0gY3Vyc29yLT5kYXRhOworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfYnVja2V0CisrCSAgICA9IChuZXdfdGFibGUtPmJ1Y2tldAorKwkgICAgICAgKyBuZXdfdGFibGUtPmhhc2hlciAoZGF0YSwgbmV3X3RhYmxlLT5uX2J1Y2tldHMpKTsKKysKKysJICBpZiAoISAobmV3X2J1Y2tldCA8IG5ld190YWJsZS0+YnVja2V0X2xpbWl0KSkKKysJICAgIGFib3J0ICgpOworKworKwkgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrCisrCSAgaWYgKG5ld19idWNrZXQtPmRhdGEpCisrCSAgICB7CisrCSAgICAgIGlmIChjdXJzb3IgPT0gYnVja2V0KQorKwkJeworKwkJICAvKiBBbGxvY2F0ZSBvciByZWN5Y2xlIGFuIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEgYnVja2V0CisrCQkgICAgIGhlYWRlciBpbnRvIGEgYnVja2V0IG92ZXJmbG93LiAgKi8KKysJCSAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5IChuZXdfdGFibGUpOworKworKwkJICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGZhbHNlOworKworKwkJICBuZXdfZW50cnktPmRhdGEgPSBkYXRhOworKwkJICBuZXdfZW50cnktPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OworKwkJICBuZXdfYnVja2V0LT5uZXh0ID0gbmV3X2VudHJ5OworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIC8qIE1lcmVseSByZWxpbmsgYW4gZXhpc3RpbmcgZW50cnksIHdoZW4gbW92aW5nIGZyb20gYQorKwkJICAgICBidWNrZXQgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCQkgIGN1cnNvci0+bmV4dCA9IG5ld19idWNrZXQtPm5leHQ7CisrCQkgIG5ld19idWNrZXQtPm5leHQgPSBjdXJzb3I7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBGcmVlIGFuIGV4aXN0aW5nIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEgYnVja2V0CisrCQkgb3ZlcmZsb3cgaW50byBhIGJ1Y2tldCBoZWFkZXIuICBBbHNvIHRha2UgY2FyZSBvZiB0aGUKKysJCSBzaW1wbGUgY2FzZSBvZiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldCBoZWFkZXIgaW50byBhIGJ1Y2tldAorKwkJIGhlYWRlci4gICovCisrCSAgICAgIG5ld19idWNrZXQtPmRhdGEgPSBkYXRhOworKwkgICAgICBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkKys7CisrCSAgICAgIGlmIChjdXJzb3IgIT0gYnVja2V0KQorKwkJZnJlZV9lbnRyeSAobmV3X3RhYmxlLCBjdXJzb3IpOworKwkgICAgfQorKwl9CisrCisrICBmcmVlICh0YWJsZS0+YnVja2V0KTsKKysgIHRhYmxlLT5idWNrZXQgPSBuZXdfdGFibGUtPmJ1Y2tldDsKKysgIHRhYmxlLT5idWNrZXRfbGltaXQgPSBuZXdfdGFibGUtPmJ1Y2tldF9saW1pdDsKKysgIHRhYmxlLT5uX2J1Y2tldHMgPSBuZXdfdGFibGUtPm5fYnVja2V0czsKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IG5ld190YWJsZS0+bl9idWNrZXRzX3VzZWQ7CisrICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gbmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3Q7CisrICAvKiB0YWJsZS0+bl9lbnRyaWVzIGFscmVhZHkgaG9sZHMgaXRzIHZhbHVlLiAgKi8KKysjaWYgVVNFX09CU1RBQ0sKKysgIHRhYmxlLT5lbnRyeV9zdGFjayA9IG5ld190YWJsZS0+ZW50cnlfc3RhY2s7CisrI2VuZGlmCisrICBmcmVlIChuZXdfdGFibGUpOworKworKyAgcmV0dXJuIHRydWU7CisrfQorKworKy8qIElmIEVOVFJZIG1hdGNoZXMgYW4gZW50cnkgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZSwgcmV0dXJuIHRoZSBwb2ludGVyCisrICAgdG8gdGhlIGVudHJ5IGZyb20gdGhlIHRhYmxlLiAgT3RoZXJ3aXNlLCBpbnNlcnQgRU5UUlkgYW5kIHJldHVybiBFTlRSWS4KKysgICBSZXR1cm4gTlVMTCBpZiB0aGUgc3RvcmFnZSByZXF1aXJlZCBmb3IgaW5zZXJ0aW9uIGNhbm5vdCBiZSBhbGxvY2F0ZWQuICAqLworKworK3ZvaWQgKgorK2hhc2hfaW5zZXJ0IChIYXNoX3RhYmxlICp0YWJsZSwgY29uc3Qgdm9pZCAqZW50cnkpCisreworKyAgdm9pZCAqZGF0YTsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrCisrICAvKiBUaGUgY2FsbGVyIGNhbm5vdCBpbnNlcnQgYSBOVUxMIGVudHJ5LiAgKi8KKysgIGlmICghIGVudHJ5KQorKyAgICBhYm9ydCAoKTsKKysKKysgIC8qIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBhbHJlYWR5IGluIHRoZSB0YWJsZSwgcmV0dXJuIHRoYXQuICAqLworKyAgaWYgKChkYXRhID0gaGFzaF9maW5kX2VudHJ5ICh0YWJsZSwgZW50cnksICZidWNrZXQsIGZhbHNlKSkgIT0gTlVMTCkKKysgICAgcmV0dXJuIGRhdGE7CisrCisrICAvKiBFTlRSWSBpcyBub3QgbWF0Y2hlZCwgaXQgc2hvdWxkIGJlIGluc2VydGVkLiAgKi8KKysKKysgIGlmIChidWNrZXQtPmRhdGEpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2VudHJ5ID0gYWxsb2NhdGVfZW50cnkgKHRhYmxlKTsKKysKKysgICAgICBpZiAobmV3X2VudHJ5ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKworKyAgICAgIC8qIEFkZCBFTlRSWSBpbiB0aGUgb3ZlcmZsb3cgb2YgdGhlIGJ1Y2tldC4gICovCisrCisrICAgICAgbmV3X2VudHJ5LT5kYXRhID0gKHZvaWQgKikgZW50cnk7CisrICAgICAgbmV3X2VudHJ5LT5uZXh0ID0gYnVja2V0LT5uZXh0OworKyAgICAgIGJ1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKKysgICAgICB0YWJsZS0+bl9lbnRyaWVzKys7CisrICAgICAgcmV0dXJuICh2b2lkICopIGVudHJ5OworKyAgICB9CisrCisrICAvKiBBZGQgRU5UUlkgcmlnaHQgaW4gdGhlIGJ1Y2tldCBoZWFkLiAgKi8KKysKKysgIGJ1Y2tldC0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworKyAgdGFibGUtPm5fZW50cmllcysrOworKyAgdGFibGUtPm5fYnVja2V0c191c2VkKys7CisrCisrICAvKiBJZiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCBvZiB0aGUgYnVja2V0cyBpbiB1c2UgaGFzIGJlZW4gcmVhY2hlZCwgaW5jcmVhc2UKKysgICAgIHRoZSB0YWJsZSBzaXplIGFuZCByZWhhc2guICBUaGVyZSdzIG5vIHBvaW50IGluIGNoZWNraW5nIHRoZSBudW1iZXIgb2YKKysgICAgIGVudHJpZXM6ICBpZiB0aGUgaGFzaGluZyBmdW5jdGlvbiBpcyBpbGwtY29uZGl0aW9uZWQsIHJlaGFzaGluZyBpcyBub3QKKysgICAgIGxpa2VseSB0byBpbXByb3ZlIGl0LiAgKi8KKysKKysgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysgICAgICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKyAgICB7CisrICAgICAgLyogQ2hlY2sgbW9yZSBmdWxseSwgYmVmb3JlIHN0YXJ0aW5nIHJlYWwgd29yay4gIElmIHR1bmluZyBhcmd1bWVudHMKKysJIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVseSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLworKyAgICAgIGNoZWNrX3R1bmluZyAodGFibGUpOworKyAgICAgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysJICA+IHRhYmxlLT50dW5pbmctPmdyb3d0aF90aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwl7CisrCSAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCSAgdW5zaWduZWQgY2FuZGlkYXRlCisrCSAgICA9ICh1bnNpZ25lZCkgKHR1bmluZy0+aXNfbl9idWNrZXRzCisrCQkJICA/ICh0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5ncm93dGhfZmFjdG9yKQorKwkJCSAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcgorKwkJCSAgICAgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysJICAvKiBJZiB0aGUgcmVoYXNoIGZhaWxzLCBhcnJhbmdlIHRvIHJldHVybiBOVUxMLiAgKi8KKysJICBpZiAoIWhhc2hfcmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKSkKKysJICAgIGVudHJ5ID0gTlVMTDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gKHZvaWQgKikgZW50cnk7CisrfQorKworKy8qIElmIEVOVFJZIGlzIGFscmVhZHkgaW4gdGhlIHRhYmxlLCByZW1vdmUgaXQgYW5kIHJldHVybiB0aGUganVzdC1kZWxldGVkCisrICAgZGF0YSAodGhlIHVzZXIgbWF5IHdhbnQgdG8gZGVhbGxvY2F0ZSBpdHMgc3RvcmFnZSkuICBJZiBFTlRSWSBpcyBub3QgaW4gdGhlCisrICAgdGFibGUsIGRvbid0IG1vZGlmeSB0aGUgdGFibGUgYW5kIHJldHVybiBOVUxMLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2RlbGV0ZSAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHZvaWQgKmRhdGE7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZGF0YSA9IGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCB0cnVlKTsKKysgIGlmICghZGF0YSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICB0YWJsZS0+bl9lbnRyaWVzLS07CisrICBpZiAoIWJ1Y2tldC0+ZGF0YSkKKysgICAgeworKyAgICAgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZC0tOworKworKyAgICAgIC8qIElmIHRoZSBzaHJpbmsgdGhyZXNob2xkIG9mIHRoZSBidWNrZXRzIGluIHVzZSBoYXMgYmVlbiByZWFjaGVkLAorKwkgcmVoYXNoIGludG8gYSBzbWFsbGVyIHRhYmxlLiAgKi8KKysKKysgICAgICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrCSAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJeworKwkgIC8qIENoZWNrIG1vcmUgZnVsbHksIGJlZm9yZSBzdGFydGluZyByZWFsIHdvcmsuICBJZiB0dW5pbmcgYXJndW1lbnRzCisrCSAgICAgYmVjYW1lIGludmFsaWQsIHRoZSBzZWNvbmQgY2hlY2sgd2lsbCByZWx5IG9uIHByb3BlciBkZWZhdWx0cy4gICovCisrCSAgY2hlY2tfdHVuaW5nICh0YWJsZSk7CisrCSAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKwkgICAgICA8IHRhYmxlLT50dW5pbmctPnNocmlua190aHJlc2hvbGQgKiB0YWJsZS0+bl9idWNrZXRzKQorKwkgICAgeworKwkgICAgICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nID0gdGFibGUtPnR1bmluZzsKKysJICAgICAgdW5zaWduZWQgY2FuZGlkYXRlCisrCQk9ICh1bnNpZ25lZCkgKHR1bmluZy0+aXNfbl9idWNrZXRzCisrCQkJICAgICAgPyB0YWJsZS0+bl9idWNrZXRzICogdHVuaW5nLT5zaHJpbmtfZmFjdG9yCisrCQkJICAgICAgOiAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+c2hyaW5rX2ZhY3RvcgorKwkJCQkgKiB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysJICAgICAgaGFzaF9yZWhhc2ggKHRhYmxlLCBjYW5kaWRhdGUpOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBkYXRhOworK30KKysKKysvKiBUZXN0aW5nLiAgKi8KKysKKysjaWYgVEVTVElORworKworK3ZvaWQKKytoYXNoX3ByaW50IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICAgICAgaWYgKGJ1Y2tldCkKKysJcHJpbnRmICgiJWQ6XG4iLCBidWNrZXQgLSB0YWJsZS0+YnVja2V0KTsKKysKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCXsKKysJICBjaGFyICpzID0gKGNoYXIgKikgY3Vyc29yLT5kYXRhOworKwkgIC8qIEZJWE1FICovCisrCSAgaWYgKHMpCisrCSAgICBwcmludGYgKCIgICVzXG4iLCBzKTsKKysJfQorKyAgICB9CisrfQorKworKyNlbmRpZiAvKiBURVNUSU5HICovCistLS0gcGF0Y2gtMi41Ljkub3JpZy9oYXNoLmgKKysrKyBwYXRjaC0yLjUuOS9oYXNoLmgKK0BAIC0wLDAgKzEsOTMgQEAKKysvKiBoYXNoIC0gaGFzaGluZyB0YWJsZSBwcm9jZXNzaW5nLgorKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBXcml0dGVuIGJ5IEppbSBNZXllcmluZyA8bWV5ZXJpbmdAYXNjZW5kLmNvbT4sIDE5OTguCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBIGdlbmVyaWMgaGFzaCB0YWJsZSBwYWNrYWdlLiAgKi8KKysKKysvKiBNYWtlIHN1cmUgVVNFX09CU1RBQ0sgaXMgZGVmaW5lZCB0byAxIGlmIHlvdSB3YW50IHRoZSBhbGxvY2F0b3IgdG8gdXNlCisrICAgb2JzdGFja3MgaW5zdGVhZCBvZiBtYWxsb2MsIGFuZCByZWNvbXBpbGUgYGhhc2guYycgd2l0aCBzYW1lIHNldHRpbmcuICAqLworKworKyNpZm5kZWYgSEFTSF9IXworKyMgZGVmaW5lIEhBU0hfSF8KKysKKysjIGlmbmRlZiBQQVJBTVMKKysjICBpZiBQUk9UT1RZUEVTIHx8IF9fU1REQ19fCisrIyAgIGRlZmluZSBQQVJBTVMoQXJncykgQXJncworKyMgIGVsc2UKKysjICAgZGVmaW5lIFBBUkFNUyhBcmdzKSAoKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworK3R5cGVkZWYgdW5zaWduZWQgKCpIYXNoX2hhc2hlcikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCkpOworK3R5cGVkZWYgYm9vbCAoKkhhc2hfY29tcGFyYXRvcikgUEFSQU1TICgoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKyt0eXBlZGVmIHZvaWQgKCpIYXNoX2RhdGFfZnJlZXIpIFBBUkFNUyAoKHZvaWQgKikpOworK3R5cGVkZWYgYm9vbCAoKkhhc2hfcHJvY2Vzc29yKSBQQVJBTVMgKCh2b2lkICosIHZvaWQgKikpOworKworK3N0cnVjdCBoYXNoX2VudHJ5CisrICB7CisrICAgIHZvaWQgKmRhdGE7CisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKyAgfTsKKysKKytzdHJ1Y3QgaGFzaF90dW5pbmcKKysgIHsKKysgICAgLyogVGhpcyBzdHJ1Y3R1cmUgaXMgbWFpbmx5IHVzZWQgZm9yIGBoYXNoX2luaXRpYWxpemUnLCBzZWUgdGhlIGJsb2NrCisrICAgICAgIGRvY3VtZW50YXRpb24gb2YgYGhhc2hfcmVzZXRfdHVuaW5nJyBmb3IgbW9yZSBjb21wbGV0ZSBjb21tZW50cy4gICovCisrCisrICAgIGZsb2F0IHNocmlua190aHJlc2hvbGQ7CS8qIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0byB0cmlnZ2VyIGEgc2hyaW5rICovCisrICAgIGZsb2F0IHNocmlua19mYWN0b3I7CS8qIHJhdGlvIG9mIG5ldyBzbWFsbGVyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworKyAgICBmbG9hdCBncm93dGhfdGhyZXNob2xkOwkvKiByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8gdHJpZ2dlciBhIGdyb3d0aCAqLworKyAgICBmbG9hdCBncm93dGhfZmFjdG9yOwkvKiByYXRpbyBvZiBuZXcgYmlnZ2VyIHNpemUgdG8gb3JpZ2luYWwgc2l6ZSAqLworKyAgICBib29sIGlzX25fYnVja2V0czsJCS8qIGlmIENBTkRJREFURSByZWFsbHkgbWVhbnMgdGFibGUgc2l6ZSAqLworKyAgfTsKKysKKyt0eXBlZGVmIHN0cnVjdCBoYXNoX3R1bmluZyBIYXNoX3R1bmluZzsKKysKKytzdHJ1Y3QgaGFzaF90YWJsZTsKKysKKyt0eXBlZGVmIHN0cnVjdCBoYXNoX3RhYmxlIEhhc2hfdGFibGU7CisrCisrLyogSW5mb3JtYXRpb24gYW5kIGxvb2t1cC4gICovCisrdW5zaWduZWQgaGFzaF9nZXRfbl9idWNrZXRzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fYnVja2V0c191c2VkIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fZW50cmllcyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKytib29sIGhhc2hfdGFibGVfb2sgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7Cisrdm9pZCBoYXNoX3ByaW50X3N0YXRpc3RpY3MgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBGSUxFICopKTsKKyt2b2lkICpoYXNoX2xvb2t1cCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworKworKy8qIFdhbGtpbmcuICAqLworK3ZvaWQgKmhhc2hfZ2V0X2ZpcnN0IFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3ZvaWQgKmhhc2hfZ2V0X25leHQgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9lbnRyaWVzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgdm9pZCAqKiwgdW5zaWduZWQpKTsKKyt1bnNpZ25lZCBoYXNoX2RvX2Zvcl9lYWNoIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgSGFzaF9wcm9jZXNzb3IsIHZvaWQgKikpOworKworKy8qIEFsbG9jYXRpb24gYW5kIGNsZWFuLXVwLiAgKi8KKyt1bnNpZ25lZCBoYXNoX3N0cmluZyBQQVJBTVMgKChjb25zdCBjaGFyICosIHVuc2lnbmVkKSk7Cisrdm9pZCBoYXNoX3Jlc2V0X3R1bmluZyBQQVJBTVMgKChIYXNoX3R1bmluZyAqKSk7CisrSGFzaF90YWJsZSAqaGFzaF9pbml0aWFsaXplIFBBUkFNUyAoKHVuc2lnbmVkLCBjb25zdCBIYXNoX3R1bmluZyAqLAorKwkJCQkgICAgIEhhc2hfaGFzaGVyLCBIYXNoX2NvbXBhcmF0b3IsCisrCQkJCSAgICAgSGFzaF9kYXRhX2ZyZWVyKSk7Cisrdm9pZCBoYXNoX2NsZWFyIFBBUkFNUyAoKEhhc2hfdGFibGUgKikpOworK3ZvaWQgaGFzaF9mcmVlIFBBUkFNUyAoKEhhc2hfdGFibGUgKikpOworKworKy8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLworK2Jvb2wgaGFzaF9yZWhhc2ggUEFSQU1TICgoSGFzaF90YWJsZSAqLCB1bnNpZ25lZCkpOworK3ZvaWQgKmhhc2hfaW5zZXJ0IFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7Cisrdm9pZCAqaGFzaF9kZWxldGUgUEFSQU1TICgoSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKysKKysjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdjYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmCkBAIC0wLDAgKzEsMjAzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLm1hbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2gubWFuCisrKysgcGF0Y2gtMi41LjkvcGF0Y2gubWFuCitAQCAtNTIwLDYgKzUyMCwxNSBAQCBmaWxlLgorIFxmQlwqPXJlamVjdFwtdW5pZmllZFxmUAorIFByb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMuIFRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcy4KKyAuVFAKKysuQkkgXCo9Z2xvYmFsXC1yZWplY3RcLWZpbGU9IHJlamVjdGZpbGUKKytQdXQgYWxsIHJlamVjdHMgaW50bworKy5JIHJlamVjdGZpbGUKKytpbnN0ZWFkIG9mIGNyZWF0aW5nIHNlcGFyYXRlIHJlamVjdCBmaWxlcyBmb3IgYWxsIGZpbGVzIHRoYXQgaGF2ZSByZWplY3RzLiBUaGUKKysuSSByZWplY3RmaWxlCisrd2lsbCBjb250YWluIGhlYWRlcnMgdGhhdCBpZGVudGlmeSB3aGljaCBmaWxlIGVhY2ggcmVqZWN0IHJlZmVycyB0by4gTm90ZSB0aGF0CisrdGhlIGdsb2JhbCByZWplY3QgZmlsZSBpcyBjcmVhdGVkIGV2ZW4gaWYgXC1cLWRyeVwtcnVuIGlzIHNwZWNpZmllZCAod2hpbGUKKytub24tZ2xvYmFsIHJlamVjdCBmaWxlcyB3aWxsIG9ubHkgYmUgY3JlYXRlZCB3aXRob3V0IFwtXC1kcnlcLXJ1bikuCisrLlRQCisgXGZCXC1SXGZQICBvciAgXGZCXCo9cmV2ZXJzZVxmUAorIEFzc3VtZSB0aGF0IHRoaXMgcGF0Y2ggd2FzIGNyZWF0ZWQgd2l0aCB0aGUgb2xkIGFuZCBuZXcgZmlsZXMgc3dhcHBlZC4KKyAoWWVzLCBJJ20gYWZyYWlkIHRoYXQgZG9lcyBoYXBwZW4gb2NjYXNpb25hbGx5LCBodW1hbiBuYXR1cmUgYmVpbmcgd2hhdCBpdAorSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5jCitAQCAtNjcsNiArNjcsNyBAQCBzdGF0aWMgYm9vbCBzaW1pbGFyIChjaGFyIGNvbnN0ICosIHNpemVfCisgc3RhdGljIGJvb2wgc3Bld19vdXRwdXQgKHN0cnVjdCBvdXRzdGF0ZSAqKTsKKyBzdGF0aWMgY2hhciBjb25zdCAqbWFrZV90ZW1wIChjaGFyKTsKKyBzdGF0aWMgaW50IG51bWVyaWNfc3RyaW5nIChjaGFyIGNvbnN0ICosIGJvb2wsIGNoYXIgY29uc3QgKik7Cisrc3RhdGljIHZvaWQgcmVqZWN0X2hlYWRlciAoY29uc3QgY2hhciAqZmlsZW5hbWUpOworIHN0YXRpYyB2b2lkIGFib3J0X2h1bmsgKHZvaWQpOworIHN0YXRpYyB2b2lkIGNsZWFudXAgKHZvaWQpOworIHN0YXRpYyB2b2lkIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKTsKK0BAIC05OCw2ICs5OSw3IEBAIHN0YXRpYyBpbnQgQXJnYzsKKyBzdGF0aWMgY2hhciAqIGNvbnN0ICpBcmd2OworIAorIHN0YXRpYyBGSUxFICpyZWpmcDsgIC8qIHJlamVjdCBmaWxlIHBvaW50ZXIgKi8KKytzdGF0aWMgY2hhciAqZ2xvYmFsX3JlamVjdDsKKyAKKyBzdGF0aWMgY2hhciBjb25zdCAqcGF0Y2huYW1lOworIHN0YXRpYyBjaGFyICpyZWpuYW1lOworQEAgLTE3Miw2ICsxNzQsMTAgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAvKiBNYWtlIHN1cmUgd2UgY2xlYW4gdXAgaW4gY2FzZSBvZiBkaXNhc3Rlci4gICovCisgICAgIHNldF9zaWduYWxzIChmYWxzZSk7CisgCisrICAgIC8qIGluaXRpYWxpemUgZ2xvYmFsIHJlamVjdCBmaWxlICovCisrICAgIGlmIChnbG9iYWxfcmVqZWN0KQorKyAgICAgIGluaXRfcmVqZWN0ICgpOworKworICAgICBmb3IgKAorIAlvcGVuX3BhdGNoX2ZpbGUgKHBhdGNobmFtZSk7CisgCXRoZXJlX2lzX2Fub3RoZXJfcGF0Y2goKTsKK0BAIC0yMDgsOCArMjE0LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgaW5pdF9vdXRwdXQgKFRNUE9VVE5BTUUsIGV4Y2x1c2l2ZSwgJm91dHN0YXRlKTsKKyAJICB9CisgCistCS8qIGluaXRpYWxpemUgcmVqZWN0IGZpbGUgKi8KKy0JaW5pdF9yZWplY3QgKCk7CisrCS8qIGluaXRpYWxpemUgcGVyLXBhdGNoIHJlamVjdCBmaWxlICovCisrCWlmICghZ2xvYmFsX3JlamVjdCkKKysJICBpbml0X3JlamVjdCAoKTsKKyAKKyAJLyogZmluZCBvdXQgd2hlcmUgYWxsIHRoZSBsaW5lcyBhcmUgKi8KKyAJaWYgKCFza2lwX3Jlc3Rfb2ZfcGF0Y2gpCitAQCAtMjc4LDYgKzI4NSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJICAgIG5ld3doZXJlID0gcGNoX25ld2ZpcnN0KCkgKyBsYXN0X29mZnNldDsKKyAJICAgIGlmIChza2lwX3Jlc3Rfb2ZfcGF0Y2gpIHsKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuaygpOworIAkJZmFpbGVkKys7CisgCQlpZiAodmVyYm9zaXR5ID09IFZFUkJPU0UpCitAQCAtMjkyLDYgKzMwMSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgc2F5ICgiUGF0Y2ggYXR0ZW1wdGVkIHRvIGNyZWF0ZSBmaWxlICVzLCB3aGljaCBhbHJlYWR5IGV4aXN0cy5cbiIsCisgCQkgICAgICAgcXVvdGVhcmcgKGlubmFtZSkpOworIAorKwkJaWYgKCFmYWlsZWQpCisrCQkgIHJlamVjdF9oZWFkZXIob3V0bmFtZSk7CisgCQlhYm9ydF9odW5rKCk7CisgCQlmYWlsZWQrKzsKKyAJCWlmICh2ZXJib3NpdHkgIT0gU0lMRU5UKQorQEAgLTI5OSw2ICszMTAsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgICAgZm9ybWF0X2xpbmVudW0gKG51bWJ1ZiwgbmV3d2hlcmUpKTsKKyAJICAgIH0KKyAJICAgIGVsc2UgaWYgKCEgYXBwbHlfaHVuayAoJm91dHN0YXRlLCB3aGVyZSkpIHsKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuayAoKTsKKyAJCWZhaWxlZCsrOworIAkJaWYgKHZlcmJvc2l0eSAhPSBTSUxFTlQpCitAQCAtMzMyLDcgKzM0NSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICBmY2xvc2UgKG91dHN0YXRlLm9mcCk7CisgCQkgICAgb3V0c3RhdGUub2ZwID0gMDsKKyAJCSAgfQorLQkJZmNsb3NlIChyZWpmcCk7CisrCQlpZiAoIWdsb2JhbF9yZWplY3QpCisrCQkgIGZjbG9zZSAocmVqZnApOworIAkJY29udGludWU7CisgCSAgICAgIH0KKyAKK0BAIC00MTIsMTMgKzQyNiwxMyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICB9CisgICAgICAgfQorICAgICAgIGlmIChkaWZmX3R5cGUgIT0gRURfRElGRikgeworLQlpZiAoZmNsb3NlIChyZWpmcCkgIT0gMCkKKysJaWYgKCFnbG9iYWxfcmVqZWN0ICYmIGZjbG9zZSAocmVqZnApICE9IDApCisgCSAgICB3cml0ZV9mYXRhbCAoKTsKKyAJaWYgKGZhaWxlZCkgeworIAkgICAgc29tZWZhaWxlZCA9IHRydWU7CisgCSAgICBzYXkgKCIlZCBvdXQgb2YgJWQgaHVuayVzICVzIiwgZmFpbGVkLCBodW5rLCAicyIgKyAoaHVuayA9PSAxKSwKKyAJCSBza2lwX3Jlc3Rfb2ZfcGF0Y2ggPyAiaWdub3JlZCIgOiAiRkFJTEVEIik7CistCSAgICBpZiAob3V0bmFtZSkgeworKwkgICAgaWYgKCFnbG9iYWxfcmVqZWN0ICYmIG91dG5hbWUpIHsKKyAJCWNoYXIgKnJlaiA9IHJlam5hbWU7CisgCQlpZiAoIXJlam5hbWUpIHsKKyAJCSAgICByZWogPSB4bWFsbG9jIChzdHJsZW4gKG91dG5hbWUpICsgNSk7CitAQCAtNDQ1LDYgKzQ1OSwyMCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgfQorICAgICAgIHNldF9zaWduYWxzICh0cnVlKTsKKyAgICAgfQorKyAgICBpZiAoZ2xvYmFsX3JlamVjdCkKKysgICAgICB7CisrCWlmIChmY2xvc2UgKHJlamZwKSAhPSAwKQorKwkgIHdyaXRlX2ZhdGFsICgpOworKwlpZiAoc29tZWZhaWxlZCkKKysJICB7CisrCSAgc2F5ICgiIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgJXNcbiIsIHF1b3RlYXJnIChnbG9iYWxfcmVqZWN0KSk7CisrCSAgLyppZiAoISBkcnlfcnVuKQorKwkgICAgeyovCisrCSAgICAgIG1vdmVfZmlsZSAoVE1QUkVKTkFNRSwgJlRNUFJFSk5BTUVfbmVlZHNfcmVtb3ZhbCwKKysJCQkgZ2xvYmFsX3JlamVjdCwgMDY0NCwgZmFsc2UpOworKwkgICAgLyp9Ki8KKysJICB9CisrICAgICAgfQorICAgICBpZiAob3V0c3RhdGUub2ZwICYmIChmZXJyb3IgKG91dHN0YXRlLm9mcCkgfHwgZmNsb3NlIChvdXRzdGF0ZS5vZnApICE9IDApKQorICAgICAgIHdyaXRlX2ZhdGFsICgpOworICAgICBjbGVhbnVwICgpOworQEAgLTUyMyw2ICs1NTEsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyAgIHsicG9zaXgiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA3fSwKKyAgIHsicXVvdGluZy1zdHlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDh9LAorICAgeyJ1bmlmaWVkLXJlamVjdC1maWxlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDl9LAorKyAgeyJnbG9iYWwtcmVqZWN0LWZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyAxMH0sCisgICB7TlVMTCwgbm9fYXJndW1lbnQsIE5VTEwsIDB9CisgfTsKKyAKK0BAIC01ODIsNiArNjExLDcgQEAgc3RhdGljIGNoYXIgY29uc3QgKmNvbnN0IG9wdGlvbl9oZWxwW10gPQorICIgIC0tZHJ5LXJ1biAgRG8gbm90IGFjdHVhbGx5IGNoYW5nZSBhbnkgZmlsZXM7IGp1c3QgcHJpbnQgd2hhdCB3b3VsZCBoYXBwZW4uIiwKKyAiICAtLXBvc2l4ICBDb25mb3JtIHRvIHRoZSBQT1NJWCBzdGFuZGFyZC4iLAorICIgIC0tdW5pZmllZC1yZWplY3QtZmlsZXMgIENyZWF0ZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4iLAorKyIgIC0tZ2xvYmFsLXJlamVjdC1maWxlPWZpbGUgIFB1dCBhbGwgcmVqZWN0cyBpbnRvIG9uZSBmaWxlLiIsCisgIiIsCisgIiAgLWQgRElSICAtLWRpcmVjdG9yeT1ESVIgIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gRElSIGZpcnN0LiIsCisgI2lmIEhBVkVfU0VUTU9ERV9ET1MKK0BAIC03ODQsNiArODE0LDkgQEAgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpCisgCSAgICBjYXNlIENIQVJfTUFYICsgOToKKyAJCXVuaWZpZWRfcmVqZWN0X2ZpbGVzID0gdHJ1ZTsKKyAJCWJyZWFrOworKwkgICAgY2FzZSBDSEFSX01BWCArIDEwOgorKwkJZ2xvYmFsX3JlamVjdCA9IHNhdmVzdHIgKG9wdGFyZyk7CisrCQlicmVhazsKKyAJICAgIGRlZmF1bHQ6CisgCQl1c2FnZSAoc3RkZXJyLCAyKTsKKyAJfQorQEAgLTkzMyw2ICs5NjYsMzcgQEAgbG9jYXRlX2h1bmsgKExJTkVOVU0gZnV6eikKKyB9CisgCisgc3RhdGljIGNoYXIgKgorK2Zvcm1hdF90aW1lc3RhbXAgKGNoYXIgdGltZWJ1ZlszN10sIGJvb2wgd2hpY2gpCisreworKyAgdGltZV90IHRzID0gcGNoX3RpbWVzdGFtcCh3aGljaCk7CisrICBpZiAodHMgIT0gLTEpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgdG0gKnRtID0gbG9jYWx0aW1lKCZ0cyk7CisrICAgICAgc3RyZnRpbWUodGltZWJ1ZiwgMzcsICJcdCVZLSVtLSVkICVIOiVNOiVTLjAwMDAwMDAwMCAleiIsIHRtKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB0aW1lYnVmWzBdID0gMDsKKysgIHJldHVybiB0aW1lYnVmOworK30KKysKKysvKiBXcml0ZSBhIGhlYWRlciBpbiBhIHJlamVjdCBmaWxlIHRoYXQgY29tYmluZXMgbXVsdGlwbGUgaHVua3MuICovCisrc3RhdGljIHZvaWQKKytyZWplY3RfaGVhZGVyIChjb25zdCBjaGFyICpvdXRuYW1lKQorK3sKKysgICAgY2hhciB0aW1lYnVmMFszN10sIHRpbWVidWYxWzM3XTsKKysgICAgaWYgKCFnbG9iYWxfcmVqZWN0KQorKyAgICAgIHJldHVybjsKKysgICAgaWYgKGRpZmZfdHlwZSA9PSBVTklfRElGRikKKysJZnByaW50ZihyZWpmcCwgIi0tLSAlcy5vcmlnJXNcbisrKyAlcyVzXG4iLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMCwgcmV2ZXJzZSksCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYxLCAhcmV2ZXJzZSkpOworKyAgICBlbHNlCisrCWZwcmludGYocmVqZnAsICIqKiogJXMub3JpZyVzXG4tLS0gJXMlc1xuIiwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjAsIHJldmVyc2UpLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMSwgIXJldmVyc2UpKTsKKyt9CisrCisrc3RhdGljIGNoYXIgKgorIGZvcm1hdF9saW5lcmFuZ2UgKGNoYXIgcmFuZ2VidWZbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdLAorIAkJICBMSU5FTlVNIGZpcnN0LCBMSU5FTlVNIGxpbmVzKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NGVjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwYXRjaC0yLjUuNC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS40Lm9yaWcvTWFrZWZpbGUuaW4JMjAwNS0wMy0wOSAwNzoyMzo1NC43NzkzMTE4MjQgLTA1MDAKKysrKyBwYXRjaC0yLjUuNC9NYWtlZmlsZS5pbgkyMDA1LTAzLTA5IDA3OjI2OjA5LjYxNjgxMzQwOCAtMDUwMAorQEAgLTQzLDEwICs0MywxMSBAQAorIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACisgUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKKyAKKytERVNURElSID0KKyBwcmVmaXggPSBAcHJlZml4QAorIGV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAorIAorLWJpbmRpciA9ICQoZXhlY19wcmVmaXgpL2JpbgorK2JpbmRpciA9IEBiaW5kaXJACisgCisgIyBXaGVyZSB0byBwdXQgdGhlIG1hbnVhbCBwYWdlcy4KKyBtYW5kaXIgPSBAbWFuZGlyQAorQEAgLTExMiwxOCArMTEzLDE4IEBACisgCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoT0JKUykgJChMSUJTKQorIAorIGluc3RhbGw6OiBhbGwgaW5zdGFsbGRpcnMKKy0JJChJTlNUQUxMX1BST0dSQU0pIHBhdGNoJChFWEVFWFQpICQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCistCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BhdGNoLm1hbiAkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBwYXRjaCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKysJLSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGF0Y2gubWFuICQoREVTVERJUikkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisgCisgaW5zdGFsbGRpcnM6OgorLQkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikgJChtYW4xZGlyKQorKwkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpICQoREVTVERJUikkKG1hbjFkaXIpCisgCisgaW5zdGFsbC1zdHJpcDo6CisgCSQoTUFLRSkgSU5TVEFMTF9QUk9HUkFNPSckKElOU1RBTExfUFJPR1JBTSkgLXMnIGluc3RhbGwKKyAKKyB1bmluc3RhbGw6OgorLQlybSAtZiAkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorLQlybSAtZiAkKG1hbjFkaXIpLyQocGF0Y2hfbmFtZSkkKG1hbjFleHQpCisrCXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorKwlybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorIAorIE1ha2VmaWxlOiBNYWtlZmlsZS5pbiAkKENPTkZJR19TVEFUVVMpCisgCSQoU0hFTEwpICQoQ09ORklHX1NUQVRVUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1OTIxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmCkBAIC0wLDAgKzEsMzA3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworR2VuZXJhdGUgdW5pZmllZCBkaWZmIHN0eWxlIHJlamVjdCBmaWxlcy4gQWxzbyBpbmNsdWRlIHRoZSBDIGZ1bmN0aW9uIG5hbWVzCitpbiByZWplY3QgZmlsZXMgd2hlbmV2ZXIgcG9zc2libGUuCisKKwkkIGNhdCA+IGYub3JpZworCTwgYSgpIHsKKwk8IDIKKwk8IDMKKwk8CisJPCA1CisJPCA2CisJPCB9CisKKwkkIHNlZCAtZSAncy81LzVhLycgZi5vcmlnID4gZgorCSQgZGlmZiAtVTIgLXAgZi5vcmlnIGYgPiBmLmRpZmYKKwkkIHNlZCAtZSAncy81LzVhLycgLWUgJ3MvNi82eC8nIGYub3JpZyA+IGYKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgLS1yZWplY3QtdW5pZmllZCA8IGYuZGlmZgorCT4gMSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlIGYucmVqCisKKwkkIGNhdCBmLnJlagorCT4gQEAgLTMsNSArMyw1IEBAIGEoKSB7CisJPiAgMworCT4gIAorCT4gLTUKKwk+ICs1YQorCT4gIDYKKwk+ICB9CisKKwkkIC4vcGF0Y2ggLUYwIC1zIC0tbm8tYmFja3VwLWlmLW1pc21hdGNoIGYgPCBmLmRpZmYKKwk+IDEgb3V0IG9mIDEgaHVuayBGQUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSBmLnJlagorCisJJCBjYXQgZi5yZWoKKwk+ICoqKioqKioqKioqKioqKiBhKCkgeworCT4gKioqIDMsNyAqKioqCisJPiAgIDMKKwk+ICAgCisJPiAtIDUKKwk+ICAgNgorCT4gICB9CisJPiAtLS0gMyw3IC0tLS0KKwk+ICAgMworCT4gICAKKwk+ICsgNWEKKwk+ICAgNgorCT4gICB9CisKKwkkIGRpZmYgLU51IC1wIC9kZXYvbnVsbCBmLm9yaWcgPiBmMi5kaWZmCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIC0tcmVqZWN0LXVuaWZpZWQgPCBmMi5kaWZmCisJPiBQYXRjaCBhdHRlbXB0ZWQgdG8gY3JlYXRlIGZpbGUgZiwgd2hpY2ggYWxyZWFkeSBleGlzdHMuCisJPiAxIG91dCBvZiAxIGh1bmsgRkFJTEVEIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgZi5yZWoKKworCSQgY2F0IGYucmVqCisJPiBAQCAtMCwwICsxLDcgQEAKKwk+ICthKCkgeworCT4gKzIKKwk+ICszCisJPiArCisJPiArNQorCT4gKzYKKwk+ICt9CisKKwkkIHJtIC1mIGYgZi5vcmlnIGYucmVqIGYuZGlmZiBmMi5kaWZmCisKK0luZGV4OiBwYXRjaC0yLjUuOS9wY2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wY2guYworQEAgLTY4LDYgKzY4LDcgQEAgc3RhdGljIExJTkVOVU0gcF9zbGluZTsJCQkvKiBhbmQgdGhlIGxpbgorIHN0YXRpYyBMSU5FTlVNIHBfaHVua19iZWc7CQkvKiBsaW5lIG51bWJlciBvZiBjdXJyZW50IGh1bmsgKi8KKyBzdGF0aWMgTElORU5VTSBwX2VmYWtlID0gLTE7CQkvKiBlbmQgb2YgZmFrZWQgdXAgbGluZXMtLWRvbid0IGZyZWUgKi8KKyBzdGF0aWMgTElORU5VTSBwX2JmYWtlID0gLTE7CQkvKiBiZWcgb2YgZmFrZWQgdXAgbGluZXMgKi8KKytzdGF0aWMgY2hhciAqcF9jX2Z1bmN0aW9uOwkJLyogdGhlIEMgZnVuY3Rpb24gYSBodW5rIGlzIGluICovCisgCisgZW51bSBuYW1ldHlwZSB7IE9MRCwgTkVXLCBJTkRFWCwgTk9ORSB9OworIAorQEAgLTg4OCw2ICs4ODksMTkgQEAgYW5vdGhlcl9odW5rIChlbnVtIGRpZmYgZGlmZnR5cGUsIGJvb2wgcgorIAkgICAgbmV4dF9pbnR1aXRfYXQobGluZV9iZWdpbm5pbmcscF9pbnB1dF9saW5lKTsKKyAJICAgIHJldHVybiBjaGFyc19yZWFkID09IChzaXplX3QpIC0xID8gLTEgOiAwOworIAl9CisrCXMgPSBidWY7CisrCXdoaWxlICgqcyA9PSAnKicpCisrCSAgICBzKys7CisrCWlmICgqcyA9PSAnICcpCisrCSAgeworKwkgICAgcF9jX2Z1bmN0aW9uID0gczsKKysJICAgIHdoaWxlICgqcyAhPSAnXG4nKQorKwkJcysrOworKwkgICAgKnMgPSAnXDAnOworKwkgICAgcF9jX2Z1bmN0aW9uID0gc2F2ZXN0ciAocF9jX2Z1bmN0aW9uKTsKKysJICB9CisrCWVsc2UKKysJICAgIHBfY19mdW5jdGlvbiA9IE5VTEw7CisgCXBfaHVua19iZWcgPSBwX2lucHV0X2xpbmUgKyAxOworIAl3aGlsZSAocF9lbmQgPCBwX21heCkgeworIAkgICAgY2hhcnNfcmVhZCA9IGdldF9saW5lICgpOworQEAgLTEyNzcsOCArMTI5MSwxOCBAQCBhbm90aGVyX2h1bmsgKGVudW0gZGlmZiBkaWZmdHlwZSwgYm9vbCByCisgCWVsc2UKKyAJICAgIHBfcmVwbF9saW5lcyA9IDE7CisgCWlmICgqcyA9PSAnICcpIHMrKzsKKy0JaWYgKCpzICE9ICdAJykKKysJaWYgKCpzKysgIT0gJ0AnKQorIAkgICAgbWFsZm9ybWVkICgpOworKwlpZiAoKnMrKyA9PSAnQCcgJiYgKnMgPT0gJyAnICYmICpzICE9ICdcMCcpCisrCSAgeworKwkgICAgcF9jX2Z1bmN0aW9uID0gczsKKysJICAgIHdoaWxlICgqcyAhPSAnXG4nKQorKwkJcysrOworKwkgICAgKnMgPSAnXDAnOworKwkgICAgcF9jX2Z1bmN0aW9uID0gc2F2ZXN0ciAocF9jX2Z1bmN0aW9uKTsKKysJICB9CisrCWVsc2UKKysJICAgIHBfY19mdW5jdGlvbiA9IE5VTEw7CisgCWlmICghcF9wdHJuX2xpbmVzKQorIAkgICAgcF9maXJzdCsrOwkJCS8qIGRvIGFwcGVuZCByYXRoZXIgdGhhbiBpbnNlcnQgKi8KKyAJaWYgKCFwX3JlcGxfbGluZXMpCitAQCAtMTg4NCw2ICsxOTA4LDEyIEBAIHBjaF9odW5rX2JlZyAodm9pZCkKKyAgICAgcmV0dXJuIHBfaHVua19iZWc7CisgfQorIAorK2NoYXIgY29uc3QgKgorK3BjaF9jX2Z1bmN0aW9uICh2b2lkKQorK3sKKysgICAgcmV0dXJuIHBfY19mdW5jdGlvbjsKKyt9CisrCisgLyogSXMgdGhlIG5ld2xpbmUtdGVybWluYXRlZCBsaW5lIGEgdmFsaWQgYGVkJyBjb21tYW5kIGZvciBwYXRjaAorICAgIGlucHV0PyAgSWYgc28sIHJldHVybiB0aGUgY29tbWFuZCBjaGFyYWN0ZXI7IGlmIG5vdCwgcmV0dXJuIDAuCisgICAgVGhpcyBhY2NlcHRzIGFjY2VwdHMganVzdCBhIHN1YnNldCBvZiB0aGUgdmFsaWQgY29tbWFuZHMsIGJ1dCBpdCdzCitJbmRleDogcGF0Y2gtMi41LjkvcGNoLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BjaC5oCisrKysgcGF0Y2gtMi41LjkvcGNoLmgKK0BAIC0yNSw2ICsyNSw3IEBACisgTElORU5VTSBwY2hfZW5kICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9maXJzdCAodm9pZCk7CisgTElORU5VTSBwY2hfaHVua19iZWcgKHZvaWQpOworK2NoYXIgY29uc3QgKnBjaF9jX2Z1bmN0aW9uICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9uZXdmaXJzdCAodm9pZCk7CisgTElORU5VTSBwY2hfcHJlZml4X2NvbnRleHQgKHZvaWQpOworIExJTkVOVU0gcGNoX3B0cm5fbGluZXMgKHZvaWQpOworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLm1hbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGF0Y2gubWFuCisrKysgcGF0Y2gtMi41LjkvcGF0Y2gubWFuCitAQCAtNTE3LDYgKzUxNyw5IEBAIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKyAuQiBcJi5yZWoKKyBmaWxlLgorIC5UUAorK1xmQlwqPXJlamVjdFwtdW5pZmllZFxmUAorK1Byb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMuIFRoZSBkZWZhdWx0IGlzIHRvIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcy4KKysuVFAKKyBcZkJcLVJcZlAgIG9yICBcZkJcKj1yZXZlcnNlXGZQCisgQXNzdW1lIHRoYXQgdGhpcyBwYXRjaCB3YXMgY3JlYXRlZCB3aXRoIHRoZSBvbGQgYW5kIG5ldyBmaWxlcyBzd2FwcGVkLgorIChZZXMsIEknbSBhZnJhaWQgdGhhdCBkb2VzIGhhcHBlbiBvY2Nhc2lvbmFsbHksIGh1bWFuIG5hdHVyZSBiZWluZyB3aGF0IGl0CitJbmRleDogcGF0Y2gtMi41LjkvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2NvbW1vbi5oCisrKysgcGF0Y2gtMi41LjkvY29tbW9uLmgKK0BAIC0xNDYsNiArMTQ2LDcgQEAgWFRFUk4gaW50IGludmM7CisgWFRFUk4gc3RydWN0IHN0YXQgaW5zdGF0OworIFhURVJOIGJvb2wgZHJ5X3J1bjsKKyBYVEVSTiBib29sIHBvc2l4bHlfY29ycmVjdDsKKytYVEVSTiBib29sIHVuaWZpZWRfcmVqZWN0X2ZpbGVzOworIAorIFhURVJOIGNoYXIgY29uc3QgKm9yaWdwcmFlOworIFhURVJOIGNoYXIgY29uc3QgKm9yaWdiYXNlOworSW5kZXg6IHBhdGNoLTIuNS45L3BhdGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wYXRjaC5jCitAQCAtNTIyLDYgKzUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorICAgeyJuby1iYWNrdXAtaWYtbWlzbWF0Y2giLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA2fSwKKyAgIHsicG9zaXgiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA3fSwKKyAgIHsicXVvdGluZy1zdHlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDh9LAorKyAgeyJ1bmlmaWVkLXJlamVjdC1maWxlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCBDSEFSX01BWCArIDl9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorIH07CisgCitAQCAtNTgwLDYgKzU4MSw3IEBAIHN0YXRpYyBjaGFyIGNvbnN0ICpjb25zdCBvcHRpb25faGVscFtdID0KKyAiICAtLXZlcmJvc2UgIE91dHB1dCBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29yayBiZWluZyBkb25lLiIsCisgIiAgLS1kcnktcnVuICBEbyBub3QgYWN0dWFsbHkgY2hhbmdlIGFueSBmaWxlczsganVzdCBwcmludCB3aGF0IHdvdWxkIGhhcHBlbi4iLAorICIgIC0tcG9zaXggIENvbmZvcm0gdG8gdGhlIFBPU0lYIHN0YW5kYXJkLiIsCisrIiAgLS11bmlmaWVkLXJlamVjdC1maWxlcyAgQ3JlYXRlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiIsCisgIiIsCisgIiAgLWQgRElSICAtLWRpcmVjdG9yeT1ESVIgIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gRElSIGZpcnN0LiIsCisgI2lmIEhBVkVfU0VUTU9ERV9ET1MKK0BAIC03NzksNiArNzgxLDkgQEAgZ2V0X3NvbWVfc3dpdGNoZXMgKHZvaWQpCisgCQkJCSAgICAgKGVudW0gcXVvdGluZ19zdHlsZSkgaSk7CisgCQl9CisgCQlicmVhazsKKysJICAgIGNhc2UgQ0hBUl9NQVggKyA5OgorKwkJdW5pZmllZF9yZWplY3RfZmlsZXMgPSB0cnVlOworKwkJYnJlYWs7CisgCSAgICBkZWZhdWx0OgorIAkJdXNhZ2UgKHN0ZGVyciwgMik7CisgCX0KK0BAIC05MjcsNiArOTMyLDI0IEBAIGxvY2F0ZV9odW5rIChMSU5FTlVNIGZ1enopCisgICAgIHJldHVybiAwOworIH0KKyAKKytzdGF0aWMgY2hhciAqCisrZm9ybWF0X2xpbmVyYW5nZSAoY2hhciByYW5nZWJ1ZltMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl0sCisrCQkgIExJTkVOVU0gZmlyc3QsIExJTkVOVU0gbGluZXMpCisreworKyAgICBpZiAobGluZXMgPT0gMSkKKysgICAgICByYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiwgZmlyc3QpOworKyAgICBlbHNlCisrICAgICAgeworKwljaGFyICpyYjsKKysJcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYgKyBMSU5FTlVNX0xFTkdUSF9CT1VORCArIDEsIGxpbmVzKTsKKysJcmIgPSByYW5nZWJ1Zi0xOworKwlyYW5nZWJ1ZiA9IGZvcm1hdF9saW5lbnVtIChyYW5nZWJ1ZiAtIExJTkVOVU1fTEVOR1RIX0JPVU5EIC0gMSwKKysJCQkJICAgKGxpbmVzID4gMCkgPyBmaXJzdCA6IDApOworKwkqcmIgPSAnLCc7CisrICAgICAgfQorKyAgICByZXR1cm4gcmFuZ2VidWY7CisrfQorKworIC8qIFdlIGRpZCBub3QgZmluZCB0aGUgcGF0dGVybiwgZHVtcCBvdXQgdGhlIGh1bmsgc28gdGhleSBjYW4gaGFuZGxlIGl0LiAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtOTQzLDggKzk2Niw4MyBAQCBhYm9ydF9odW5rICh2b2lkKQorICAgICAgIChpbnQpIE5FV19DT05URVhUX0RJRkYgPD0gKGludCkgZGlmZl90eXBlID8gIiAqKioqIiA6ICIiOworICAgICBjaGFyIGNvbnN0ICptaW51c2VzID0KKyAgICAgICAoaW50KSBORVdfQ09OVEVYVF9ESUZGIDw9IChpbnQpIGRpZmZfdHlwZSA/ICIgLS0tLSIgOiAiIC0tLS0tIjsKKysgICAgY2hhciBjb25zdCAqZnVuY3Rpb24gPSBwY2hfY19mdW5jdGlvbigpOworKyAgICBpZiAoZnVuY3Rpb24gPT0gTlVMTCkKKysJZnVuY3Rpb24gPSAiIjsKKysKKysgICAgaWYgKHVuaWZpZWRfcmVqZWN0X2ZpbGVzKQorKyAgICAgIHsKKysJLyogcHJvZHVjZSB1bmlmaWVkIHJlamVjdCBmaWxlcyAqLworKwljaGFyIHJhbmdlYnVmMFtMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl07CisrCWNoYXIgcmFuZ2VidWYxW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXTsKKysJTElORU5VTSBqOworKworKwkvKiBGaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbW92ZSBhbmQgaW5zZXJ0IHNlY3Rpb24uICovCisrCWZvciAoaiA9IDA7IGogPD0gcGF0X2VuZDsgaisrKQorKwkgIGlmIChwY2hfY2hhciAoaikgPT0gJz0nKQorKwkgICAgYnJlYWs7CisrCWZvciAoaSA9IGorMTsgaSA8PSBwYXRfZW5kOyBpKyspCisrCSAgaWYgKHBjaF9jaGFyIChpKSA9PSAnXicpCisrCSAgICBicmVhazsKKysJaWYgKHBjaF9jaGFyICgwKSAhPSAnKicgfHwgaiA+IHBhdF9lbmQgfHwgaSA+IHBhdF9lbmQrMSkKKysJICBmYXRhbCAoImludGVybmFsIGVycm9yIGluIGFib3J0X2h1bmsiKTsKKysJaSA9IDE7IGorKzsKKysKKysJLyogQEAgLWZyb20sbGluZXMgK3RvLGxpbmVzIEBAICovCisrCWZwcmludGYgKHJlamZwLCAiQEAgLSVzICslcyBAQCVzXG4iLAorKwkJIGZvcm1hdF9saW5lcmFuZ2UgKHJhbmdlYnVmMCwgb2xkZmlyc3QsIHBjaF9wdHJuX2xpbmVzKCkpLAorKwkJIGZvcm1hdF9saW5lcmFuZ2UgKHJhbmdlYnVmMSwgbmV3Zmlyc3QsIHBjaF9yZXBsX2xpbmVzKCkpLAorKwkJIGZ1bmN0aW9uKTsKKysKKysJd2hpbGUgKCAgIChpIDw9IHBhdF9lbmQgJiYgcGNoX2NoYXIgKGkpICE9ICc9JykKKysJICAgICAgIHx8IChqIDw9IHBhdF9lbmQgJiYgcGNoX2NoYXIgKGopICE9ICdeJykpCisrCSAgeworKwkgICAgaWYgKGkgPD0gcGF0X2VuZAorKwkJJiYgKHBjaF9jaGFyIChpKSA9PSAnLScgfHwgcGNoX2NoYXIgKGkpID09ICchJykpCisrCSAgICAgIHsKKysJCWZwdXRjKCctJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGkrKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmIChqIDw9IHBhdF9lbmQKKysJCSAgICAgJiYgKHBjaF9jaGFyIChqKSA9PSAnKycgfHwgcGNoX2NoYXIgKGopID09ICchJykpCisrCSAgICAgIHsKKysJCWZwdXRjKCcrJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGorKywgcmVqZnApOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmICgoaSA8PSBwYXRfZW5kCisrCQkgICAgICAmJiAocGNoX2NoYXIgKGkpID09ICcgJyB8fCBwY2hfY2hhciAoaSkgPT0gJ1xuJykpICYmCisrCQkgICAgIChqID4gcGF0X2VuZAorKwkJICAgICAgfHwgKHBjaF9jaGFyIChqKSA9PSAnICcgfHwgcGNoX2NoYXIgKGopID09ICdcbicpKSkKKysJICAgICAgeworKwkJLyogVW5sZXNzIGogaXMgYWxyZWFkeSBwYXN0IHRoZSBlbmQsIGxpbmVzIGkgYW5kIGoKKysJCSAgIG11c3QgYmUgZXF1YWwgaGVyZS4gICovCisrCisrCQlpZiAocGNoX2NoYXIgKGkpID09ICcgJykKKysJCSAgZnB1dGMoJyAnLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaSsrLCByZWpmcCk7CisrCQlpZiAoaiA8PSBwYXRfZW5kKQorKwkJICBqKys7CisrCSAgICAgIH0KKysJICAgIGVsc2UgaWYgKChqIDw9IHBhdF9lbmQgJiYKKysJCSAgICAgKHBjaF9jaGFyIChqKSA9PSAnICcgfHwgcGNoX2NoYXIgKGopID09ICdcbicpKSAmJgorKwkJICAgICAocGNoX2NoYXIgKGkpID09ICc9JykpCisrCSAgICAgIHsKKysJCWlmIChwY2hfY2hhciAoaikgPT0gJyAnKQorKwkJICBmcHV0YygnICcsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChqKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICBmYXRhbCAoImludGVybmFsIGVycm9yIGluIGFib3J0X2h1bmsiKTsKKysJICB9CisrCisrCWlmIChmZXJyb3IgKHJlamZwKSkKKysJICB3cml0ZV9mYXRhbCAoKTsKKysJcmV0dXJuOworKyAgICAgIH0KKyAKKy0gICAgZnByaW50ZihyZWpmcCwgIioqKioqKioqKioqKioqKlxuIik7CisrICAgIC8qIHByb2R1Y2UgY29udGV4dCB0eXBlIHJlamVjdCBmaWxlcyAqLworKyAgIAorKyAgICBmcHJpbnRmKHJlamZwLCAiKioqKioqKioqKioqKioqJXNcbiIsIGZ1bmN0aW9uKTsKKyAgICAgZm9yIChpPTA7IGk8PXBhdF9lbmQ7IGkrKykgeworIAljaGFyIG51bWJ1ZjBbTElORU5VTV9MRU5HVEhfQk9VTkQgKyAxXTsKKyAJY2hhciBudW1idWYxW0xJTkVOVU1fTEVOR1RIX0JPVU5EICsgMV07CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5YjI0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjUuOS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHBhdGNoLmluYworTElDRU5TRSA9ICJHUEx2MiIKKworU1JDX1VSSSArPSAiIGZpbGU6Ly9kZWJpYW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VuaWZpZWQtcmVqZWN0LWZpbGVzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYgIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorU1JDX1VSSVttZDVzdW1dID0gImRhY2ZiNjE4MDgyZjhkM2EyMTk0NjAxMTkzY2Y4NzE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVjYjVjNjQ2OWQ3MzJiY2YwMWQ2ZWMxYWZlOWU2NGYxNjY4Y2FiYTViZmRiMTAzYzI4ZDdmNTM3YmEzY2RiOGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNmY2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaF8yLjcuNS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHBhdGNoLmluYworTElDRU5TRSA9ICJHUEx2MyIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZDRkNTY3NGVmNDU0M2I0ZWI0NjNkYjE2ODg4NmRjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDM2ZjVhMTlmOTNjM2NhODMxNTNjZTljNWNiZTQ4NDdlOTdjNWQ5NTZlNTdhMjIwMTIxZTc0MWY2ZTc5NjhmIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworYWNwYXRocyA9ICItSSAke1N9L200ICIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICd4YXR0cicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3hhdHRyXSA9ICItLWVuYWJsZS14YXR0ciwtLWRpc2FibGUteGF0dHIsYXR0ciwiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjg3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NSQ19VUkkgPSAiaHR0cDovL25peG9zLm9yZy9yZWxlYXNlcy8ke0JQTn0vJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorTElDRU5TRSA9ICJHUEx2MyIKK1NVTU1BUlkgPSAiVG9vbCB0byBhbGxvdyBlZGl0aW5nIG9mIFJQQVRIIGFuZCBpbnRlcnByZXRlciBmaWVsZHMgaW4gRUxGIGJpbmFyaWVzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWIxNTFlM2M4M2IzMWY1OTMxYjRhOWZjMDE2MzViZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk5Zjg0ZDEyNDM0NzM0MGMzNjcwNzA4OWVjOGY3MDUzMGFiZDU2ZTc4MjdjNTRkNTA2ZWI0Y2MwOTdhMTdlNyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BheC11dGlscy9wYXgtdXRpbHNfMS4wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxNmEwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiU2VjdXJpdHktZm9jdXNlZCBFTEYgZmlsZXMgY2hlY2tpbmcgdG9vbCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgYSBzbWFsbCBzZXQgb2YgdmFyaW91cyBQYVggYXdhcmUgYW5kIHJlbGF0ZWQgXAordXRpbGl0aWVzIGZvciBFTEYgYmluYXJpZXMuIEl0IGNhbiBjaGVjayBFTEYgYmluYXJ5IGZpbGVzIGFuZCBydW5uaW5nIFwKK3Byb2Nlc3NlcyBmb3IgaXNzdWVzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgd2hlbiB1c2luZyBFTEYgYmluYXJpZXMgXAorYWxvbmcgd2l0aCBQYVgsIHN1Y2ggYXMgbm9uLVBJQyBjb2RlIG9yIGV4ZWN1dGFibGUgc3RhY2sgYW5kIGhlYXAuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nZW50b28ub3JnL3Byb2ovZW4vaGFyZGVuZWQvcGF4LXV0aWxzLnhtbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dlbnRvby5vc3Vvc2wub3JnL2Rpc3RmaWxlcy9wYXgtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDczMWY1Mzg1NjgyYTdhNjJlZTJlN2I3ZGFjYzEzYTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjY5YTk5MzhlNGFmNzkxMmQyNmQ1ODUwOTRiYzAyMDNlNDM1NzFhOTkwZmRkMDQ4MzE5MDg4YThiOGFkOTA2ZiIKKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2ggcHl0aG9uIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgUFJFRklYPSR7RH0ke3ByZWZpeH0gREVTVERJUj0ke0R9IGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMGU3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYmVycm9yLXBlcmxfMC4xNzAyNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkVycm9yIC0gRXJyb3IvZXhjZXB0aW9uIGhhbmRsaW5nIGluIGFuIE9PLWlzaCB3YXkiCitERVNDUklQVElPTiA9ICJUaGUgRXJyb3IgcGFja2FnZSBwcm92aWRlcyB0d28gaW50ZXJmYWNlcy4gRmlyc3RseSBcCitFcnJvciBwcm92aWRlcyBhIHByb2NlZHVyYWwgaW50ZXJmYWNlIHRvIGV4Y2VwdGlvbiBoYW5kbGluZy4gXAorU2Vjb25kbHkgRXJyb3IgaXMgYSBiYXNlIGNsYXNzIGZvciBlcnJvcnMvZXhjZXB0aW9ucyB0aGF0IGNhbiBcCitlaXRoZXIgYmUgdGhyb3duLCBmb3Igc3Vic2VxdWVudCBjYXRjaCwgb3IgY2FuIHNpbXBseSBiZSByZWNvcmRlZC4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThmMzQ5OWQwOWVlNzRhMDUwYzAzMTkzOTFmZjlkMTAwIgorCitERVBFTkRTICs9ICJwZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly9jcGFuLm1ldGFjcGFuLm9yZy9hdXRob3JzL2lkL1MvU0gvU0hMT01JRi9FcnJvci0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZTM2NzZhN2ZiMTRmNjVmNTY4ZjEyZDRiNDBhMmE3MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzRkYjdjNzgzYTY3YjA2NjdlY2E2NGE0ZjZhMGMzZGU5NDk5OGFmYzkyYzAxZDY0NTMxNjNlYjA0YjkxNTBkIgorCitTID0gIiR7V09SS0RJUn0vRXJyb3ItJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlidXJpLXBlcmxfMS42MC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwOWE0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0byBtYW5pcHVsYXRlIGFuZCBhY2Nlc3MgVVJJIHN0cmluZ3MiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFVSSS5wbSBtb2R1bGUgd2l0aCBmcmllbmRzLiBcCitUaGUgbW9kdWxlIGltcGxlbWVudHMgdGhlIFVSSSBjbGFzcy4gVVJJIG9iamVjdHMgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIFwKK2FuZCBtYW5pcHVsYXRlIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgdGhhdCBtYWtlIHVwIHRoZXNlIHN0cmluZ3MuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTI2O2VuZGxpbmU9MzA7bWQ1PTZjMzNhZTVjODdmZDFjNDg5NzcxNGUxMjJkZDljMjNkIgorCitERVBFTkRTICs9ICJwZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvYXV0aG9ycy9pZC9HL0dBL0dBQVMvVVJJLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwZjczOWJlOGNlMjhiOGJhYmE3YzU5MjBmZmVlNGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmOTJkM2RjNjRhY2I4ODQ1ZTk5MTdjOTQ1ZTIyYjlhNTI3NWFlYjlmZjkyNGViNzg3M2MzYjdhNWMwZDIzNzciCisKK1MgPSAiJHtXT1JLRElSfS9VUkktJHtQVn0iCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBhcnNlci1wZXJsXzIuNDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiWE1MOjpQYXJzZXIgLSBBIHBlcmwgbW9kdWxlIGZvciBwYXJzaW5nIFhNTCBkb2N1bWVudHMiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yO2VuZGxpbmU9NjttZDU9Yzg3NjdkNzUxNjIyOWYwN2IyNmU0MmQxY2Y4YjUxZjEiCisKK0RFUEVORFMgKz0gImV4cGF0IGV4cGF0LW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC9YTUwtUGFyc2VyLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZjQ4MTNmZTM5NTIzNjI0NTEyMDFjZWQ2ZmJjZTM3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYWU5ZDA3ZWU5YzM1MzI2YjNkOWFhZDU2ZWFlNzFhNjczMGE3M2ExMTZiOWZlOWU4YTQ3NThiN2NjMDMzMjE2IgorCitTID0gIiR7V09SS0RJUn0vWE1MLVBhcnNlci0ke1BWfSIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0gQ0M9JyR7Q0N9JyBMRD0nJHtDQ0xEfScgRlVMTF9BUj0nJHtBUn0nIgorCitpbmhlcml0IGNwYW4KKworIyBmaXggdXAgc3ViIE1ha2VNYWtlciBwcm9qZWN0IGFzIGFyZ3VtZW50cyBkb24ndCBnZXQgcHJvcGFnYXRlZCB0aG91Z2gKKyMgc2VlIGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Mjg2MzIKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkICdzOi0tc3lzcm9vdD0uKlwoXHNcfCRcKTotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IDpnJyAtaSBNYWtlZmlsZSBFeHBhdC9NYWtlZmlsZQorCXNlZCAnczpeRlVMTF9BUiA9IC4qOkZVTExfQVIgPSAke0FSfTpnJyAtaSBFeHBhdC9NYWtlZmlsZQorfQorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKK2RvX2NvbXBpbGVfY2xhc3MtbmF0aXZlKCkgeworCWNwYW5fZG9fY29tcGlsZQorfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wZXJsL3ZlbmRvcl9wZXJsLyovYXV0by9YTUwvUGFyc2VyL0V4cGF0Ly5kZWJ1Zy8iCisKK0JCQ0xBU1NFWFRFTkQ9Im5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXBlcmxfMC4wOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMTk3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIKQEAgLTAsMCArMSwyNyBAQAorREVTQ1JJUFRJT04gPSAibGlieG1sLXBlcmwgaXMgYSBjb2xsZWN0aW9uIG9mIHNtYWxsZXIgUGVybCBtb2R1bGVzLCBzY3JpcHRzLCBhbmQgXAorZG9jdW1lbnRzIGZvciB3b3JraW5nIHdpdGggWE1MIGluIFBlcmwuICBsaWJ4bWwtcGVybCBzb2Z0d2FyZSBcCit3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIFhNTDo6UGFyc2VyLCBQZXJsU0FYLCBYTUw6OkRPTSwgXAorWE1MOjpHcm92ZSBhbmQgb3RoZXJzLiIKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBQZXJsIG1vZHVsZXMgZm9yIHdvcmtpbmcgd2l0aCBYTUwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzM7ZW5kbGluZT0zNTttZDU9MTcwNTU0OWVlZjc1NzdhM2Q2YmE3MTEyM2ExZjBjZTgiCisKK0RFUEVORFMgKz0gImxpYnhtbC1wYXJzZXItcGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL21vZHVsZXMvYnktbW9kdWxlL1hNTC8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGVkNWZiZGRhNTNkMTMwMWRkYWVkODhkYjEwNTAzYmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDU3MTA1OWI3YjVkNDhiN2NlNTJiMDEzODllOTVkNzk4YmY1Y2YyMDIwNTIzYzE1M2ZmMjdiNDk4MTUzYzljYiIKKworRVhUUkFfQ1BBTkZMQUdTID0gIkVYUEFUTElCUEFUSD0ke1NUQUdJTkdfTElCRElSfSBFWFBBVElOQ1BBVEg9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2luaGVyaXQgY3BhbgorCitkb19jb21waWxlKCkgeworCWV4cG9ydCBMSUJDPSIkKGZpbmQgJHtTVEFHSU5HX0RJUl9UQVJHRVR9LyR7YmFzZV9saWJkaXJ9LyAtbmFtZSAnbGliYy0qLnNvJykiCisJY3Bhbl9kb19jb21waWxlCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGlieG1sLXNpbXBsZS1wZXJsXzIuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMWI0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIFhNTDo6U2ltcGxlIFBlcmwgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIEFQSSBsYXllciBcCitvbiB0b3Agb2YgYW4gdW5kZXJseWluZyBYTUwgcGFyc2luZyBtb2R1bGUgdG8gbWFpbnRhaW4gWE1MIGZpbGVzIFwKKyhlc3BlY2lhbGx5IGNvbmZpZ3VyYXRpb24gZmlsZXMpLiBJdCBpcyBhIGJsdW50IHJld3JpdGUgb2YgWE1MOjpTaW1wbGUgXAorKGJ5IEdyYW50IE1jTGVhbikgdG8gdXNlIHRoZSBYTUw6OkxpYlhNTCBwYXJzZXIgZm9yIFhNTCBzdHJ1Y3R1cmVzLCBcCit3aGVyZSB0aGUgb3JpZ2luYWwgdXNlcyBwbGFpbiBQZXJsIG9yIFNBWCBwYXJzZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfm1hcmtvdi9YTUwtTGliWE1MLVNpbXBsZS0wLjkzL2xpYi9YTUwvTGliWE1ML1NpbXBsZS5wb2QiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTdkYmIzZTIyNDFmYWM4NDU3OTY3MDUzZmMxYTFkZGIiCitERVBFTkRTICs9ICJsaWJ4bWwtcGFyc2VyLXBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvWE1MLVNpbXBsZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDEwOTY0ZTEyM2I3NmVjYTM2Njc4NDY0ZGFhNjNjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Y2ZmMTNkMDgwMjc5MmRhMWViNDU4OTVjZTFiZTQ2MTkwM2Q5OGVjOTdjOWM5NTNiYzg0MDZhZjcyOTQ0MzRhIgorCitTID0gIiR7V09SS0RJUn0vWE1MLVNpbXBsZS0ke1BWfSIKKworRVhUUkFfUEVSTEZMQUdTID0gIi1JICR7UEVSTEhPU1RMSUJ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMWNhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtbmF0aXZlXzUuMjIuMC5iYgpAQCAtMCwwICsxLDEyMyBAQAorcmVxdWlyZSBwZXJsLmluYworCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgIGZpbGU6Ly9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmF0aXZlLW5vcGFja2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmF0aXZlLXBlcmxpbmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTU1fVW5peC5wbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vZXJybm9fdmVyLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vZHluYWxvYWRlcmhhY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZjBmMDliMTdkZTQyNmVmZjMyMzQyNmNiMTQwZWU3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZTgzZWFkMGM1YzI2Y2JiZTYyNmZhNGJhYzFhNGJlYWJlMjNhOWVlYmMxNWQzNWJhNDljY2RlMTE4NzhlMTk2IgorCitpbmhlcml0IG5hdGl2ZQorCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK2V4cG9ydCBMRD0iJHtDQ0xEfSIKKworZG9fY29uZmlndXJlICgpIHsKKwkuL0NvbmZpZ3VyZSBcCisJCS1EY2M9IiR7Q0N9IiBcCisJCS1EY2ZsYWdzPSIke0NGTEFHU30iIFwKKwkJLURsZGZsYWdzPSIke0xERkxBR1N9IiBcCisJCS1EY2ZfYnk9Ik9wZW4gRW1iZWRkZWQiIFwKKwkJLURwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLUR2ZW5kb3JwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLUR2ZW5kb3JwcmVmaXg9JHtwcmVmaXh9IFwKKwkJLURzaXRlcHJlZml4PSR7cHJlZml4fSBcCisJCVwKKwkJLURiaW49JHtTVEFHSU5HX0JJTkRJUn0vJHtQTn0gXAorCQktRHByaXZsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EYXJjaGxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLUR2ZW5kb3JsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EdmVuZG9yYXJjaD0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLURzaXRlbGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHNpdGVhcmNoPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQlcCisJCS1EdXNlc2hycGxpYiBcCisJCS1EdXNldGhyZWFkcyBcCisJCS1EdXNlaXRocmVhZHMgXAorCQktRHVzZWxhcmdlZmlsZXMgXAorCQktRG5vZXh0ZW5zaW9ucz1PREJNX0ZpbGUgXAorCQktVWRfZG9zdWlkIFwKKwkJLVVpX2RiIFwKKwkJLVVpX25kYm0gXAorCQktVWlfZ2RibSBcCisJCS1VaV9nZGJtX25kYm0gXAorCQktVWlfZ2RibW5kYm0gXAorCQktRGlfc2hhZG93IFwKKwkJLURpX3N5c2xvZyBcCisJCS1EdXNlcGVybGlvIFwKKwkJLURtYW4zZXh0PTNwbSBcCisJCS1Ec2VkPS9iaW4vc2VkIFwKKwkJLVVhZnMgXAorCQktVWRfY3NoIFwKKwkJLVV1c2VzZmlvIFwKKwkJLVV1c2VubSAtZGVzCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCisJIyBXZSBuZWVkIGEgaG9zdHBlcmwgbGluayBmb3IgYnVpbGRpbmcgcGVybAorCWxuIC1zZiBwZXJsJHtQVn0gJHtEfSR7YmluZGlyfS9ob3N0cGVybAorCisgICAgICAgIGxuIC1zZiBwZXJsICR7RH0ke2xpYmRpcn0vcGVybDUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUgXAorCSAgICAgICAgICAgJHtEfSR7ZGF0YWRpcn0vcGVybC8ke1BWfS9FeHRVdGlscworCisJIyBTYXZlIG5hdGl2ZSBjb25maWcgCisJaW5zdGFsbCBjb25maWcuc2ggJHtEfSR7bGliZGlyfS9wZXJsCisJaW5zdGFsbCBsaWIvQ29uZmlnLnBtICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS8KKwlpbnN0YWxsIGxpYi9FeHRVdGlscy90eXBlbWFwICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy8KKworCSMgcGVybCBzaGFyZWQgbGlicmFyeSBoZWFkZXJzCisJIyByZWZlcmVuY2UgcGVybCA1LjIwLjAtMSBpbiBkZWJpYW46CisJIyBodHRwczovL3BhY2thZ2VzLmRlYmlhbi5vcmcvZXhwZXJpbWVudGFsL2kzODYvcGVybC9maWxlbGlzdAorCWZvciBpIGluIGF2LmggYml0Y291bnQuaCBjaGFyY2xhc3NfaW52bGlzdHMuaCBjb25maWcuaCBjb3AuaCBjdi5oIGRvc2lzaC5oIFwKKwkJZW1iZWQuaCBlbWJlZHZhci5oIEVYVEVSTi5oIGZha2VzZGlvLmggZmVhdHVyZS5oIGZvcm0uaCBnaXRfdmVyc2lvbi5oIFwKKwkJZ3YuaCBoYW5keS5oIGh2X2Z1bmMuaCBodi5oIGlubGluZS5oIElOVEVSTi5oIGludHJwdmFyLmggaXBlcmxzeXMuaCBcCisJCWtleXdvcmRzLmggbDFfY2hhcl9jbGFzc190YWIuaCBtYWxsb2NfY3RsLmggbWV0YWNvbmZpZy5oIG1nX2RhdGEuaCBcCisJCW1nLmggbWdfcmF3LmggbWdfdnRhYmxlLmggbXlkdHJhY2UuaCBub3N0ZGlvLmggb3Bjb2RlLmggb3AuaCBcCisJCW9wbmFtZXMuaCBvcF9yZWdfY29tbW9uLmggb3ZlcmxvYWQuaCBwYWQuaCBwYXJzZXIuaCBwYXRjaGxldmVsLmggXAorCQlwZXJsYXBpLmggcGVybC5oIHBlcmxpby5oIHBlcmxpb2wuaCBwZXJsc2Rpby5oIHBlcmx2YXJzLmggcGVybHkuaCBcCisJCXBwLmggcHBfcHJvdG8uaCBwcm90by5oIHJlZW50ci5oIHJlZ2NoYXJjbGFzcy5oIHJlZ2NvbXAuaCByZWdleHAuaCBcCisJCXJlZ25vZGVzLmggc2NvcGUuaCBzdi5oIHRocmVhZC5oIHRpbWU2NF9jb25maWcuaCB0aW1lNjQuaCB1Y29uZmlnLmggXAorCQl1bmljb2RlX2NvbnN0YW50cy5oIHVuaXhpc2guaCB1dGY4LmggdXRmZWJjZGljLmggdXRpbC5oIHV1ZG1hcC5oIFwKKwkJdnV0aWwuaCB3YXJuaW5ncy5oIFhTVUIuaAorCWRvCisJCWluc3RhbGwgJGkgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUKKwlkb25lCisKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3BlcmwgUEVSTDVMSUI9JyRQRVJMNUxJQjoke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3Blcmw6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC9zaXRlX3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3Blcmwke1BWfSBQRVJMNUxJQj0nJFBFUkw1TElCOiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybCR7U1RBR0lOR19MSUJESVJ9L3Blcmw6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC9zaXRlX3BlcmwvJHtQVn06JHtTVEFHSU5HX0xJQkRJUn0vcGVybC92ZW5kb3JfcGVybC8ke1BWfScKKworCSMgVXNlIC91c3IvYmluL2VudiBuYXRpdmVwZXJsIGZvciB0aGUgcGVybCBzY3JpcHQuCisJZm9yIGYgaW4gYGdyZXAgLUlsICcjISAqJHtiaW5kaXJ9L3BlcmwnICR7RH0vJHtiaW5kaXJ9LypgOyBkbworCQlzZWQgLWkgLWUgJ3N8JHtiaW5kaXJ9L3Blcmx8L3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAkZgorCWRvbmUKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJwZXJsX3N5c3Jvb3RfY3JlYXRlX3dyYXBwZXIiCisKK3Blcmxfc3lzcm9vdF9jcmVhdGVfd3JhcHBlciAoKSB7CisJbWtkaXIgLXAgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9CisJIyBDcmVhdGUgYSB3cmFwcGVyIHRoYXQgL3Vzci9iaW4vZW52IHBlcmwgd2lsbCB1c2UgdG8gZ2V0IHBlcmwtbmF0aXZlLgorCSMgVGhpcyBNVVNUIGxpdmUgaW4gdGhlIG5vcm1hbCBiaW5kaXIuCisJY2F0ID4gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwgPDwgRU9GCisjIS9iaW4vc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleGVjIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvcGVybC1uYXRpdmUvcGVybCAiXCRAIgorRU9GCisJY2htb2QgMDc1NSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybAorCWNhdCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcn0vLi4vbmF0aXZlcGVybAorfQorCisjIEZpeCB0aGUgcGF0aCBpbiBzc3RhdGUKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqLnBtICoucG9kICouaCAqLnBsICouc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcHRlc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGVhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYwpAQCAtMCwwICsxLDM3IEBACitpbmhlcml0IHB0ZXN0CisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICJzOlwvb3B0OlwvdXNyOiIgLWkgUG9ydGluZy9hZGQtcGFja2FnZS5wbAorCXNlZCAtZSAiczpcL2xvY2FsXC9nbnVcLzpcLzoiIC1pIGhpbnRzL2N4dXguc2gKKwl0YXIgLWNmIC0gKiAtLWV4Y2x1ZGUgXCoubyAtLWV4Y2x1ZGUgbGlicGVybC5zbyAtLWV4Y2x1ZGUgTWFrZWZpbGUgLS1leGNsdWRlIG1ha2VmaWxlIC0tZXhjbHVkZSBob3N0cGVybCBcCisJCS0tZXhjbHVkZSBtaW5pcGVybCAtLWV4Y2x1ZGUgZ2VuZXJhdGVfdXVkbWFwIC0tZXhjbHVkZSBwYXRjaGVzIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCisJc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKKwkgICAgICAgLWUgInMsLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0sLGciIFwKKwkgICAgICAgLWUgInMsLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSAsLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUn0sJHtiaW5kaXJ9LGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0lOQ0RJUn0sJHtpbmNsdWRlZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8sJHtiaW5kaXJ9LyxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8sLGciIFwKKwkgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7VEFSR0VUX1BSRUZJWH0sJHtiaW5kaXJ9LGciIFwKKwkgICAgJHtEfSR7UFRFU1RfUEFUSH0vbGliL0NvbmZpZy5wbQorCisJbG4gLXNmICR7YmluZGlyfS9wZXJsICR7RH0ke1BURVNUX1BBVEh9L3QvcGVybAorCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgUHV0IGFsbCAqLnQgZmlsZXMgZnJvbSB0aGUgbGliIGRpciBpbiB0aGUgcHRlc3QgcGFja2FnZQorICAgICMgZG9fc3BsaXRfcGFja2FnZXMgcmVxdWlyZXMgYSBwYWlyIG9mICgpIGluIHRoZSByZWdleCwgYnV0IHdlIGhhdmUgbm90aGluZworICAgICMgdG8gbWF0Y2gsIHNvIHVzZSBhbiBlbXB0eSBwYWlyLgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpLCAnLipcLnQoKScsCisgICAgICAgICAgICAnJHtQTn0tcHRlc3QlcycsICclcycsIHJlY3Vyc2l2ZT1UcnVlLCBtYXRjaF9wYXRoPVRydWUpCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1tb2R1bGVzICR7UE59LWRvYyAke1BOfS1taXNjIHNlZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjg4NmYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1yZGVwZW5kc181LjIyLjAuaW5jCkBAIC0wLDAgKzEsMjU2NyBAQAorIyBUbyBjcmVhdGUvdXBkYXRlIHRoZSBwZXJsLXJkZXBlbmRzXyR7UFZ9LmluYyB1c2UgdGhpcyBwaWVjZSBvZiB1Z2x5IHNjcmlwdCAobW9kaWZpZWQgZm9yIHlvdXIgYXJjaC9wYXRocyBldGMpOgorCisjamlhaG9uZ3h1OjUuMjAuMC1yMSQgcHdkCisjL2hvbWUvamlhaG9uZ3h1L3lvY3RvL2J1aWxkLTIwMTQwNjE4LXBlcmwvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3BlcmwvNS4yMC4wLXIxCisKKyMxIGNwIC1yIHBhY2thZ2VzLXNwbGl0IHBhY2thZ2VzLXNwbGl0Lm5ldyAmJiBjZCBwYWNrYWdlcy1zcGxpdC5uZXcKKyMyIGZpbmQgLiAtbmFtZSBcKi5wbSB8IHhhcmdzIHNlZCAtaSAnL149aGVhZC8sL149Y3V0L2QnCisjMyBlZ3JlcCAtciAiXlxzKihcPHVzZSAuKnxcPHJlcXVpcmUgLiopOz8iIHBlcmwtbW9kdWxlLSogLS1pbmNsdWRlPSIqLnBtIiAKKyN8IHNlZCAicy9cLy4qXC5wbTogKi8gKz0gL2c7cy9bXCJcJ10vL2c7cy87LiovXCIvZztzLys9IC4qXChyZXF1aXJlXHx1c2VcKVw+ICovKz0gXCJwZXJsLW1vZHVsZS0vZztzL0NQQU5QTFVTOjouKi9jcGFucGx1cy9nO3MvQ1BBTjo6LiovY3Bhbi9nO3MvOjovLS9nO3MvIFteK1wiXS4qLy9nO3MvXy8tL2c7cy9cLnBsXCIkL1wiLztzL1wiXD9cJC9cIi87cy8oLy87IiB8IHRyIFs6dXBwZXI6XSBbOmxvd2VyOl0gCisjfCBncmVwIC12IC1lICJcLXZtc1wtIiAtZSBtb2R1bGUtNSAtZSAiXiQiIC1lICJcXCQiIC1lIHlvdXIgLWUgdGsgLWUgYXV0b3BlcmwgLWUgaHRtbCAtZSBodHRwIC1lIHBhcnNlLWNwYW4gLWUgcGVybC1vc3R5cGUgLWUgbmRibS1maWxlIC1lIG1vZHVsZS1tYWMgLWUgZmNnaSAtZSBsd3AgLWUgZGJkIC1lIGRiaXggCisjfCBzb3J0IC11IAorI3wgc2VkICdzL14vUkRFUEVORFNfLztzL3BlcmwtbW9kdWxlLS8ke1BOfS1tb2R1bGUtL2c7cy9tb2R1bGUtXChtb2R1bGUtXCkvXDEvZztzL1wobW9kdWxlLWxvYWRcKS1jb25kaXRpb25hbC9cMS9nO3MvZW5jb2RlLWNvbmZpZ2xvY2FsLyYtcG0vOycgCisjfCBlZ3JlcCAtd3YgJz0+fG1vZHVsZS1hfG1vZHVsZS1hcGFjaGUuP3xtb2R1bGUtYXByfG1vZHVsZS1hdXRoZW4tc2FzbHxtb2R1bGUtYi1hc21kYXRhfG1vZHVsZS1jb252ZXJ0LWViY2RpY3xtb2R1bGUtZGV2ZWwtc2l6ZXxtb2R1bGUtZGlnZXN0LXBlcmwtbWQ1fG1vZHVsZS1kdW1wdmFsdWV8bW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWFhYXJnaDU2aGFzaHxtb2R1bGUtZXh0dXRpbHMteHNzeW1zZXR8bW9kdWxlLWZpbGUtYnNkZ2xvYnxtb2R1bGUtZm9yfG1vZHVsZS1pdHxtb2R1bGUtaW8tc3RyaW5nfG1vZHVsZS1pcGMtc3lzdGVtLXNpbXBsZXxtb2R1bGUtbGV4aWNhbHxtb2R1bGUtbG9jYWwtbGlifG1ldGFkYXRhfG1vZHVsZS1tb2RwZXJsLXV0aWx8bW9kdWxlLXBsdWdnYWJsZS1vYmplY3R8bW9kdWxlLXRlc3QtYnVpbGRlci1pby1zY2FsYXJ8bW9kdWxlLXRleHQtdW5pZGVjb2RlfG1vZHVsZS13aW4zMnxvYmplY3RzXHNsb2FkfHN5c2NhbGwucGh8c3lzdGVtaW5mby5waHwlcycgPiAvdG1wL3BlcmwtcmRlcGVuZHMKKworUkRFUEVORFNfcGVybC1taXNjICs9ICJwZXJsIgorUkRFUEVORFNfJHtQTn0tcG9kICs9ICJwZXJsIgorCisjIFNvbWUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB0aGUgYWJvdmUgZG9lc24ndCBtYW5hZ2UgdG8gZmlndXJlIG91dAorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMiCisKKworIyBEZXBlbmRzIGxpc3QKKyMgY29weSBjb250ZW50cyBvZiAvdG1wL3BlcmwtcmRlcGVuZHMgaW4gdGhpcyBmaWxlCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWlmIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtbmV0LXBpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS11c2VyLXB3ZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWlvLXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyeWJhc2UgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZS1oYW5kbGVycyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF0dHJpYnV0ZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1mYXRhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2sgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BlLWd1YXJkc3RhY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2tpcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNraXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b3NwbGl0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG91c2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1iLW9wLXByaXZhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVidWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iZW5jaG1hcmsgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ibGliICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJsaWIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmxpYiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtYi1jb25jaXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWItdGVyc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1zaG93bGV4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1iLWNvbmNpc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi10ZXJzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIteHJlZiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYnl0ZXMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcy1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ieXRlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycC1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2FycCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctZXh0ZW5zaW9ucyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25maWctcGVybC12ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1jb3JlbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGlyaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1uZXQtcGluZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zYWZlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWItZGVwYXJzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItaW50MzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1pbnQzMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItbnVsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLW51bGwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItdXRmOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRlcHJlY2F0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wZWVrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcGVlayArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1zZWxmc3R1YmJlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1zZWxmc3R1YmJlciArPSAiJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLXRleHQtdGFicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtZGlnZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWZpbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlyaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaXJoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZHluYWxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZHluYWxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWJ5dGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY2prY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY24taHoiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnogKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1oMnoiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rci0yMDIyLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLW5hbWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWdsb2NhbC1wbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUtdXRmNyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2Rpbmctd2FybmluZ3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nLXdhcm5pbmdzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuZ2xpc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmdsaXNoICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW52ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVudiArPSAiJHtQTn0tbW9kdWxlLXRpZS1hcnJheSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lcnJubyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwb3J0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pcGMtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXByb3h5c3VicyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtYXV0b3NwbGl0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtib290c3RyYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1haXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtYXV0b3NwbGl0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtY3BhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZG9zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW1hY29zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tcW54ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1xbnggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZGlyaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11d2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11d2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12b3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW45NSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1teSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW15ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhY2tsaXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvdW50bGluZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1ldmFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvdW50bGluZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1saWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtY21kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtaW5wdXRtYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1oaW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtZmF0YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmNudGwgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mZWF0dXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtaGFzaC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvbXBhcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtY29weSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWlwYy1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1nbG9iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWVwb2MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1tYWMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1vczIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdm1zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1jd2QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy13aW4zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maW5kYmluICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXBvZC11c2FnZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LXN0ZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ2luZm8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1kZXRlY3QgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWxpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1saXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1kZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pbyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1wb2xsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtdW5peCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtdGllLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS10aW1lLWhpcmVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW1zZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4yICs9ICIke1BOfS1tb2R1bGUtaXBjLW9wZW4zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLWlvLXBpcGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLWlwYy1zeXN2IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNoYXJlZG1lbSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwLWJvb2xlYW4gKz0gIiR7UE59LW1vZHVsZS1qc29uLXBwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAtYm9vbGVhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGliICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsLXhzICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbC14cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWRlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb3JlbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtbG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3ZhciArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LWd1dHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LWd1dHMgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsY2VtdSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjZW11ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtdHJpZyArPSAiJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1hbnlkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1leHBpcmVmaWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLWV4cGlyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZW1vaXplLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtc3RvcmFibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWV0YS1ub3RhdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tZXRhLW5vdGF0aW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbXJvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtZXJybm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1lICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1pIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtbCArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LW5ldHJjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtaG9zdGVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS10aW1lLWxvY2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtdGltZS1oaXJlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zZXJ2ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXRpbWUgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV4dCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9rICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9rICs9ICIke1BOfS1tb2R1bGUtdGVzdC1tb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3Bjb2RlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGVuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW8gKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wcyArPSAiJHtQTn0tbW9kdWxlLW9wY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZGluZyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkLW51bWJlcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLW1ybyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxmYXEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGZhcSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1tbWFwICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby12aWEgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXBhcnNlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1lc2NhcGVzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1maW5kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtaW5wdXRvYmplY3RzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1pbnB1dG9iamVjdHMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZWxpbmsgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLWlucHV0b2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNldXRpbHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWJhc2V0byArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLWdldG9wdHNvbyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1jaGVja2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1tYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1wb2QtbWFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcG9kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvcnRmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGVybSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3htbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2VsZWN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZGVidWcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN0ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3RleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWxpbmtzZWN0aW9uICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHJvZ3Jlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0ZXh0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJ0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHRjb250ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRpZWRvdXRmaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlZHVtYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZWR1bWIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1vdmVyc3RyaWtlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtdGVybS1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXRlcm0tY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtY2FycC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtb3Bjb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNhZmUgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNkYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlYXJjaC1kaWN0ICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zaWd0cmFwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zaWd0cmFwICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvcnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvcnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1saXN0LXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ViLXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXN5cy1ob3N0bmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLXNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52ICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1vYmplY3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLWJlbmNobWFyayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItYWdncmVnYXRvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWJhaWxvdXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcHJhZ21hICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdW5rbm93biArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItam9iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLXNwaW5uZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3Itc3RyZWFtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1hcnJheSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcmF3dGFwICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXdyaXRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tYW5zaWNvbG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jYXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNvbXBsZXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jb21wbGV0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tcmVhZGxpbmUgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1wZXJsaW8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3Rlci1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtaGFybmVzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItbW9kdWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZXJ1bm5lciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1hYmJyZXYgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1zZWxmbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC10YWJzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXRleHQtdGFicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1xdWV1ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtYXJyYXkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaC1uYW1lZGNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2gtbmFtZWRjYXB0dXJlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc2NhbGFyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc2NhbGFyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGllLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3RkaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtc3Vic3RyaGFzaCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN1YnN0cmhhc2ggKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1nbXRpbWUgKz0gIiR7UE59LW1vZHVsZS10aW1lLXRtIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWhpcmVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWx0aW1lICs9ICIke1BOfS1tb2R1bGUtdGltZS10bSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXRtICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtdG0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1iaWc1ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstYmlnNSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstZ2IyMzEyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstZ2IyMzEyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1qaXN4MDIwOCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWppc3gwMjA4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1rb3JlYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXBpbnlpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXBpbnlpbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstc3Ryb2tlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstc3Ryb2tlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay16aHV5aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay16aHV5aW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtY2hhcm5hbWVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtaWYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS11bmljb3JlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdXRmOC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvcmUgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaXZlcnNhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLWdyZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXV0ZjggKz0gIiR7UE59LW1vZHVsZS11dGY4LWhlYXZ5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1pZiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS11bml2ZXJzYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS14c2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUteHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk3MTZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMKQEAgLTAsMCArMSw4IEBACitTVU1NQVJZID0gIlBlcmwgc2NyaXB0aW5nIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wZXJsLm9yZy8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlpbmc7bWQ1PTViMTIyYTM2ZDBmNmRjNTUyNzlhMGViYzY5ZjNjNjBiIFwKKwkJICAgIGZpbGU6Ly9BcnRpc3RpYzttZDU9MmU2ZmQyNDc1MzM1YWY4OTI0OTRmZTFmNzMyN2JhZjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9zcmMvNS4wLyR7QlB9LnRhci54eiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9Db25maWd1cmUtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNWIwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK0luZGV4OiBwZXJsLTUuMTIuMy9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL0NvbmZpZ3VyZQorKysrIHBlcmwtNS4xMi4zL0NvbmZpZ3VyZQorQEAgLTEzMTYsOCArMTMxNiw5IEBAIGxvY2xpYnB0aD0iL3Vzci9sb2NhbC9saWIgL29wdC9sb2NhbC9saWIKKyBsb2NsaWJwdGg9IiRsb2NsaWJwdGggL29wdC9nbnUvbGliIC91c3IvR05VL2xpYiAvb3B0L0dOVS9saWIiCisgCisgOiBnZW5lcmFsIGxvb2tpbmcgcGF0aCBmb3IgbG9jYXRpbmcgbGlicmFyaWVzCistZ2xpYnB0aD0iL2xpYiAvdXNyL2xpYiAkeGxpYnB0aCIKKytnbGlicHRoPSIvbGliIC91c3IvbGliIC9saWI2NCAvdXNyL2xpYjY0ICR4bGlicHRoIgorIGdsaWJwdGg9IiRnbGlicHRoIC91c3IvY2NzL2xpYiAvdXNyL3VjYmxpYiAvdXNyL2xvY2FsL2xpYiIKKyt0ZXN0IC1mIC91c3IvbGliLyotbGludXgtZ251L2xpYmMuc28gJiYgZ2xpYnB0aD0iL3Vzci9saWIvKi1saW51eC1nbnUgJGdsaWJwdGgiCisgdGVzdCAtZiAvdXNyL3NobGliL2xpYmMuc28gJiYgZ2xpYnB0aD0iL3Vzci9zaGxpYiAkZ2xpYnB0aCIKKyB0ZXN0IC1mIC9zaGxpYi9saWJjLnNvICAgICAmJiBnbGlicHRoPSIvc2hsaWIgJGdsaWJwdGgiCisgdGVzdCAtZCAvdXNyL2xpYjY0ICAgICAgICAgJiYgZ2xpYnB0aD0iJGdsaWJwdGggL2xpYjY0IC91c3IvbGliNjQgL3Vzci9sb2NhbC9saWI2NCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjkyY2NiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NTV9Vbml4LnBtLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK1RoZSBwZXJsLW5hdGl2ZSBzaG91bGQgYmUgcmVsb2NhdGFibGUgd2hpbGUgcmUtdXNlIHNzdGF0ZS1jYWNoZSBmcm9tCithbm90aGVyIGJ1aWxkLCBlc3BlY2lhbGx5IHRoZSBvcmlnaW5hbCBidWlsZCB3YXMgcmVuYW1lZC9yZW1vdmVkLgorCitUbyBnZXQgdGhlIE1ha2VNYWtlci5wbSB3b3JrcyBpbiB0aGlzIGNhc2UsIHdlIG5lZWQgcGVybCB3cmFwcGVyIGhlcmUKK2luc3RlYWQgb2YgcmVhbCBwZXJsIGJpbmFyeS4KKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0ub3JpZwkyMDExLTA4LTEyIDE2OjA3OjMwLjAwMDAwMDAwMCArMDgwMAorKysrIHBlcmwtNS4xMi4zL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCTIwMTEtMDgtMTIgMTY6MDg6NTYuMDAwMDAwMDAwICswODAwCitAQCAtMTAxOSw2ICsxMDE5LDkgQEAKKyAgICAgfQorIAorICAgICBmb3JlYWNoIG15ICRuYW1lIChAJG5hbWVzKXsKKysgICAgICAgICMgR2V0dGluZyBNYWtlTWFrZXIucG0gdXNlIHBlcmwgd3JhcHBlciBpbnN0ZWFkIG9mICdwZXJsLnJlYWwnIGRpcmVjdGx5CisrICAgICAgICAkbmFtZSA9fiBzL3BlcmxcLnJlYWwvcGVybC8gaWYgKCRuYW1lID1+IC9wZXJsXC5yZWFsLyk7CisrCisgICAgICAgICBmb3JlYWNoIG15ICRkaXIgKEAkZGlycyl7CisgICAgICAgICAgICAgbmV4dCB1bmxlc3MgZGVmaW5lZCAkZGlyOyAjICRzZWxmLT57UEVSTF9TUkN9IG1heSBiZSB1bmRlZmluZWQKKyAgICAgICAgICAgICBteSAoJGFicywgJHZhbCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLlNILnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGUyMzMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaApAQCAtMCwwICsxLDM3NCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5TSCB8ICAxNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5TSCBiL01ha2VmaWxlLlNICitpbmRleCAwMzRkODEyLi42N2UwOGZkIDEwMDc1NQorLS0tIGEvTWFrZWZpbGUuU0gKKysrKyBiL01ha2VmaWxlLlNICitAQCAtMzksMTAgKzM5LDEwIEBAIGNhc2UgIiR1c2VzaHJwbGliIiBpbgorIHRydWUpCisgCSMgUHJlZml4IGFsbCBydW5zIG9mICdtaW5pcGVybCcgYW5kICdwZXJsJyB3aXRoCisgCSMgJGxkbGlicHRoIHNvIHRoYXQgLi9wZXJsIGZpbmRzICp0aGlzKiBzaGFyZWQgbGlicGVybC4KKy0JY2FzZSAiJExEX0xJQlJBUllfUEFUSCIgaW4KKy0JJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CistCSopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CistCWVzYWMKKysJI2Nhc2UgIiRMRF9MSUJSQVJZX1BBVEgiIGluCisrCSMnJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKysJIyopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CisrCSNlc2FjCisgCisgCXBsZGxmbGFncz0iJGNjY2RsZmxhZ3MiCisgCXN0YXRpY19sZGZsYWdzPScnCitAQCAtMTIyLDEwICsxMjIsMTEgQEAgdHJ1ZSkKKyAJICAgICopCisgCQlldmFsICJsZGxpYnB0aHZhbD1cIlwkJGxkbGlicHRobmFtZVwiIgorIAorLQkJY2FzZSAiJGxkbGlicHRodmFsIiBpbgorLQkJJycpICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgIiA7OworLQkJKikgICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRsZGxpYnB0aHZhbCIgYCIgOzsKKy0JCWVzYWMKKysjIFdlIGNvbXBpbGUgaW4gdGhlIGxpYnJhcnkgcGF0aCBpbiBPRSBmcm9tIGNyb3NzLWNvbXBpbGUsIHNvIGxldHMgbm90IGRvIHRoaXMKKysjCQljYXNlICIkbGRsaWJwdGh2YWwiIGluCisrIwkJJycpICBsZGxpYnB0aD0iJGxkbGlicHRobmFtZT1gIHF1b3RlICIkcHdkIiBgIiA7OworKyMJCSopICAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkbGRsaWJwdGh2YWwiIGAiIDs7CisrIwkJZXNhYworIAorIAkJOzsKKyAJICAgIGVzYWMKK0BAIC0xNDEsMTggKzE0Miw3IEBAIHRydWUpCisgCSAgICAjIElOU1RBTEwgZmlsZSwgdW5kZXIgIkJ1aWxkaW5nIGEgc2hhcmVkIHBlcmwgbGlicmFyeSIuCisgCSAgICAjIElmIHRoZXJlIGlzIG5vIHByZS1leGlzdGluZyAkbGlicGVybCwgd2UgZG9uJ3QgbmVlZAorIAkgICAgIyB0byBkbyBhbnl0aGluZyBmdXJ0aGVyLgorLQkgICAgaWYgdGVzdCAtZiAkYXJjaGxpYi9DT1JFLyRsaWJwZXJsOyB0aGVuCistCQlybSAtZiBwcmVsb2FkCistCQljYXQgPDwnRU9UJyA+IHByZWxvYWQKKy0jISAvYmluL3NoCistbGliPSQxCistc2hpZnQKKy10ZXN0IC1yICRsaWIgJiYgZXhwb3J0IExEX1BSRUxPQUQ9IiRsaWIgJExEX1BSRUxPQUQiCistZXhlYyAiJEAiCistRU9UCistCQljaG1vZCA3NTUgcHJlbG9hZAorLQkJbGRsaWJwdGg9IiRsZGxpYnB0aCBgcHdkYC9wcmVsb2FkIGBwd2RgLyRsaWJwZXJsIgorLQkgICAgZmkKKysJICAgIGVjaG8gbGludXggbGlicmFyaWVzIG92ZXJ3cml0dGVuIGJ5IGNyb3NzLWNvbXBpbGUgcGF0Y2hlcworIAkgICAgOzsKKyAJb3MzOTApCXRlc3QgLWYgL2Jpbi9lbnYgJiYgbGRsaWJwdGg9Ii9iaW4vZW52ICRsZGxpYnB0aCIKKyAJCTs7CitAQCAtNTY2LDEzICs1NTYsMjMgQEAgc3BsaW50ZmlsZXMgPSAkKGMxKQorIAlAZWNobyBgJChDQ0NNRFNSQylgIC1TICQqLmMKKyAJQGAkKENDQ01EU1JDKWAgLVMgJCouYworIAorLWFsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHVuaWRhdGFmaWxlcykgJChwdWJsaWMpICQoZHluYW1pY19leHQpICQobm9ueHNfZXh0KSBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKy0JQGVjaG8gIiAiOworLQlAZWNobyAiCUV2ZXJ5dGhpbmcgaXMgdXAgdG8gZGF0ZS4gVHlwZSAnJChNQUtFKSB0ZXN0JyB0byBydW4gdGVzdCBzdWl0ZS4iCisrI2FsbDogJChGSVJTVE1BS0VGSUxFKSAkKE1JTklQRVJMX0VYRSkgJChnZW5lcmF0ZWRfcG9kcykgJChwcml2YXRlKSAkKHVuaWRhdGFmaWxlcykgJChwdWJsaWMpICQoZHluYW1pY19leHQpICQobm9ueHNfZXh0KSBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKysjCUBlY2hvICIgIjsKKysjCUBlY2hvICIJRXZlcnl0aGluZyBpcyB1cCB0byBkYXRlLiBUeXBlICckKE1BS0UpIHRlc3QnIHRvIHJ1biB0ZXN0IHN1aXRlLiIKKysKKythbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpIG1pbmlwZXJsICQodW5pZGF0YWZpbGVzKQorKworK21vcmU6ICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJChwdWJsaWMpCisrCisrbW9yZTI6ICQoZHluYW1pY19leHQpCisgCistJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVCAkKFBFUkxfRVhFKQorLQlAJChSVU5fUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSB8fCAoZWNobyAiV0FSTklORzogcmUtc29ydGluZyBNQU5JRkVTVCI7IFwKKy0JICAgICQoUlVOX1BFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgLW8gTUFOSUZFU1Q7IHNoIC1jIHRydWUpCisrbW9yZTM6ICQobm9ueHNfZXh0KQorKworK21vcmU0OiBleHRyYXMubWFrZSAkKE1BTklGRVNUX1NSVCkKKysKKyskKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUCisrCUAkKE1JTklQRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIHx8IChlY2hvICJXQVJOSU5HOiByZS1zb3J0aW5nIE1BTklGRVNUIjsgXAorKwkgICAgJChNSU5JUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSAtbyBNQU5JRkVTVDsgc2ggLWMgdHJ1ZSkKKyAJQHRvdWNoICQoTUFOSUZFU1RfU1JUKQorIAorIC5QSE9OWTogYWxsIHV0aWxpdGllcworQEAgLTU4MSw3ICs1ODEsNyBAQCAkKE1BTklGRVNUX1NSVCk6CU1BTklGRVNUICQoUEVSTF9FWEUpCisgIyBieSBtYWtlX3BhdGNobnVtLnBsLgorIGdpdF92ZXJzaW9uLmg6IGxpYi9Db25maWdfZ2l0LnBsCisgCistbGliL0NvbmZpZ19naXQucGw6ICQoTUlOSVBFUkxfRVhFKSBtYWtlX3BhdGNobnVtLnBsCisrbGliL0NvbmZpZ19naXQucGw6IG1ha2VfcGF0Y2hudW0ucGwKKyAJJChNSU5JUEVSTCkgbWFrZV9wYXRjaG51bS5wbAorIAorICMgbWFrZSBzdXJlIHRoYXQgd2UgcmVjb21waWxlIHBlcmwuYyBpZiB0aGUgZ2l0IHZlcnNpb24gY2hhbmdlcworQEAgLTU5NCw3ICs1OTQsNyBAQCBwZXJsJChPQkpfRVhUKTogZ2l0X3ZlcnNpb24uaAorICMgbG9hZGluZywgd2UgbmVlZCB0byBidWlsZCBwZXJsIGZpcnN0LgorIGNhc2UgIiR1c2VkbCRzdGF0aWNfY3dkIiBpbgorIGRlZmluZXVuZGVmKQorLSAgICB1dGlsX2RlcHM9JyQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvYXV0by9Dd2QvQ3dkJChETFNVRkZJWCkgRk9SQ0UnCisrICAgIHV0aWxfZGVwcz0nJChDT05GSUdQTSkgbGliL2F1dG8vQ3dkL0N3ZCQoRExTVUZGSVgpIEZPUkNFJworICAgICA7OworIGRlZmluZWRlZmluZSkKKyAgICAgdXRpbF9kZXBzPSckKFBFUkxfRVhFKSAkKENPTkZJR1BNKSBGT1JDRScKK0BAIC02MDQsNyArNjA0LDcgQEAgZGVmaW5lZGVmaW5lKQorIGVzYWMKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8IUdST0shVEhJUyEKKy11dGlscy9NYWtlZmlsZTogXCQoTUlOSVBFUkxfRVhFKSBcJChDT05GSUdQTSkgdXRpbHMvTWFrZWZpbGUuUEwKKyt1dGlscy9NYWtlZmlsZTogXCQoQ09ORklHUE0pIHV0aWxzL01ha2VmaWxlLlBMCisgCVwkKE1JTklQRVJMKSAtSWxpYiB1dGlscy9NYWtlZmlsZS5QTAorIAorIHV0aWxpdGllczoJdXRpbHMvTWFrZWZpbGUgJHV0aWxfZGVwcworQEAgLTY5OSw3ICs2OTksNyBAQCBlc2FjCisgCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistcGVybG1haW4uYzogJChNSU5JUEVSTF9FWEUpIGV4dC9FeHRVdGlscy1NaW5pcGVybC9wbV90b19ibGliCisrcGVybG1haW4uYzogZXh0L0V4dFV0aWxzLU1pbmlwZXJsL2xpYi9FeHRVdGlscy9NaW5pcGVybC5wbQorIAkkKE1JTklQRVJMKSAtSWxpYiAtTUV4dFV0aWxzOjpNaW5pcGVybCAtZSAnd3JpdGVtYWluKFwicGVybG1haW4uYyIsIEBBUkdWKScgRHluYUxvYWRlciAkKHN0YXRpY19leHQpCisgCisgIyBUaGUgZmlsZSBleHQubGlicyBpcyBhIGxpc3Qgb2YgbGlicmFyaWVzIHRoYXQgbXVzdCBiZSBsaW5rZWQgaW4KK0BAIC03NjAsNyArNzYwLDcgQEAgUEVSTEVYUE9SVAkJPSBwZXJsLmV4cAorIAk7OworIAllc2FjCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXBlcmwuZXhwOiAkKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpCisrcGVybC5leHA6IG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkKKyAJLi8kKE1JTklQRVJMRVhQKSBtYWtlZGVmLnBsIC0tc29ydC1mb2xkIFBMQVRGT1JNPWFpeCBDQ19GTEFHUz0iJChPUFRJTUlaRSkiID4gcGVybC5leHAKKyAKKyAhTk8hU1VCUyEKK0BAIC03NjksNyArNzY5LDcgQEAgb3MyKQorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBNSU5JUEVSTEVYUAkJPSBtaW5pcGVybAorIAorLXBlcmw1LmRlZjogJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKSBtaW5pcGVybC5tYXAKKytwZXJsNS5kZWY6IG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkgbWluaXBlcmwubWFwCisgCS4vJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCBQTEFURk9STT1vczIgLURQRVJMX0RMTD0kKFBFUkxfRExMKSBDQ19GTEFHUz0iJChPUFRJTUlaRSkiID4gcGVybDUuZGVmCisgCisgIU5PIVNVQlMhCitAQCAtODI5LDcgKzgyOSw3IEBAICQoTElCUEVSTCk6ICQmICQob2JqKSAkKERZTkFMT0FERVIpICQoTElCUEVSTEVYUE9SVCkKKyAJdHJ1ZSkKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAlybSAtZiAkQAorLQkkKExEKSAtbyAkQCAkKFNIUlBMREZMQUdTKSAkKG9iaikgJChEWU5BTE9BREVSKSAkKGxpYnMpCisrCSQoTEQpIC1vICRAICQoU0hSUExERkxBR1MpICQob2JqKSAkKERZTkFMT0FERVIpICQobGlicykgLVdsLC1zb25hbWUsbGlicGVybC5zby41CisgIU5PIVNVQlMhCisgCQljYXNlICIkb3NuYW1lIiBpbgorIAkJYWl4KQorQEAgLTg3Nyw3ICs4NzcsOSBAQCAkKE1JTklQRVJMX0VYRSk6IGxpYi9idWlsZGN1c3RvbWl6ZS5wbAorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKQorIAkkKENDKSAtbyAkKE1JTklQRVJMX0VYRSkgJChDTERGTEFHUykgJChtaW5pX29iaikgJChsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorICFOTyFTVUJTIQorIAkJOzsKK0BAIC04ODUsNyArODg3LDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKQorIAkJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKSB3cml0ZSAgICBsZGN1c3RvbWl6ZS5wbAorIAkkKENDKSAtbyAkKE1JTklQRVJMX0VYRSkgJChtaW5pX29iaiAgICBsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUICAgIF9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVCAgICBfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbCAgICAKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtOTA3LDcgKzkxMSw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAJLUBybSAtZiBtaW5pcGVybC54b2sKKyAJJChDQykgJChDTERGTEFHUykgJChOQU1FU1BBQ0VGTEFHUykgLW8gJChNSU5JUEVSTF9FWEUpIFwKKyAJICAgICQobWluaV9vYmopICQobGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtOTE4LDcgKzkyNCw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogXCQmIFwkKG1pbmlfb2JqKSB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorIAktQHJtIC1mIG1pbmlwZXJsLnhvaworIAktQHJtIFwkKE1JTklQRVJMX0VYRSkKKyAJXCQoTE5TKSBcJChIT1NUX1BFUkwpIFwkKE1JTklQRVJMX0VYRSkKKy0JXCQoTERMSUJQVEgpIC4vbWluaXBlcmxcJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjXCQoTERMSUJQVEgpIC4vbWluaXBlcmxcJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCVwkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbCAnb3NuYW1lJyAiJG9zbmFtZSIKKyAhR1JPSyFUSElTIQorIAkJZWxzZQorQEAgLTkyNyw3ICs5MzUsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgCS1Acm0gLWYgbWluaXBlcmwueG9rCisgCSQoQ0MpICQoQ0xERkxBR1MpIC1vICQoTUlOSVBFUkxfRVhFKSBcCisgCSAgICAkKG1pbmlfb2JqKSAkKGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgIU5PIVNVQlMhCisgCQlmaQorQEAgLTk3MSw3ICs5ODEsNyBAQCBjYXNlICIke29zbmFtZX0iIGluCisgY2F0YW1vdW50KQorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwhR1JPSyFUSElTIQorIC5QSE9OWTogbWFrZXBwcG9ydAorLW1ha2VwcHBvcnQ6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pCisrbWFrZXBwcG9ydDogXCQoQ09ORklHUE0pCisgCS1AZm9yIGYgaW4gTWFrZWZpbGUuUEwgUFBQb3J0X3BtLlBMIFBQUG9ydF94cy5QTCBwcHBvcnRfaC5QTDsgZG8gXAorIAkoY2QgZXh0L0RldmVsLVBQUG9ydCAmJiBgcHdkYC9ydW4uc2ggLi4vLi4vJChNSU5JUEVSTF9FWEUpIC1JLi4vLi4vbGliIFwkXCRmKTsgXAorIAlkb25lCitAQCAtOTgxLDcgKzk5MSw3IEBAIG1ha2VwcHBvcnQ6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pCisgKikKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAuUEhPTlk6IG1ha2VwcHBvcnQKKy1tYWtlcHBwb3J0OiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgJChub254c19leHQpCisrbWFrZXBwcG9ydDogJChDT05GSUdQTSkgJChub254c19leHQpCisgCSQoTUlOSVBFUkwpIG1rcHBwb3J0CisgCisgIU5PIVNVQlMhCitAQCAtOTkxLDE2ICsxMDAxLDE2IEBAIGVzYWMKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAKKyAuUEhPTlk6IHByZXBsaWJyYXJ5CistcHJlcGxpYnJhcnk6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSAkKFBSRVBMSUJSQVJZX0xJQlBFUkwpCisrcHJlcGxpYnJhcnk6ICQoQ09ORklHUE0pICQoUFJFUExJQlJBUllfTElCUEVSTCkKKyAKKyAkKENPTkZJR1BNX0ZST01fQ09ORklHX1NIKTogJChDT05GSUdQT0QpCisgCistJChDT05GSUdQT0QpOiBjb25maWcuc2ggJChNSU5JUEVSTF9FWEUpIGNvbmZpZ3BtIFBvcnRpbmcvR2xvc3NhcnkgbGliL0NvbmZpZ19naXQucGwKKyskKENPTkZJR1BPRCk6IGNvbmZpZy5zaCBjb25maWdwbSBQb3J0aW5nL0dsb3NzYXJ5IGxpYi9Db25maWdfZ2l0LnBsCisgCSQoTUlOSVBFUkwpIGNvbmZpZ3BtCisgCisgdW5pZGF0YWZpbGVzICQodW5pZGF0YWZpbGVzKSBwb2QvcGVybHVuaXByb3BzLnBvZDogdW5pLmRhdGEKKyAKKy11bmkuZGF0YTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorK3VuaS5kYXRhOiAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyAJJChNSU5JUEVSTCkgbGliL3VuaWNvcmUvbWt0YWJsZXMgLUMgbGliL3VuaWNvcmUgLVAgcG9kIC1tYWtldGVzdCAtbWFrZWxpc3QgLXAKKyAjCUNvbW1lbnRlZCBvdXQgc28gYWx3YXlzIHJ1bnMsIG1rdGFibGVzIGxvb2tzIGF0IGZhciBtb3JlIGZpbGVzIHRoYW4gd2UKKyAjCWNhbiBpbiB0aGlzIG1ha2VmaWxlIHRvIGRlY2lkZSBpZiBuZWVkcyB0byBydW4gb3Igbm90CitAQCAtMTAwOSwxMiArMTAxOSwxMiBAQCB1bmkuZGF0YTogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pIGxpYi91bmljb3JlL21rdGFibGVzICQobm9ueHNfZXh0KQorICMgJChQRVJMX0VYRSkgYW5kIGV4dCBiZWNhdXNlIHBvZF9saWIucGwgbmVlZHMgRGlnZXN0OjpNRDUKKyAjIEJ1dCBhbHNvIHRoaXMgZW5zdXJlcyB0aGF0IGFsbCBleHRlbnNpb25zIGFyZSBidWlsdCBiZWZvcmUgd2UgdHJ5IHRvIHNjYW4KKyAjIHRoZW0sIHdoaWNoIHBpY2tzIHVwIERldmVsOjpQUFBvcnQncyBkb2N1bWVudGF0aW9uLgorLXBvZC9wZXJsdG9jLnBvZDogJChwZXJsdG9jX3BvZF9wcmVyZXFzKSAgJChQRVJMX0VYRSkgJChleHQpIHBvZC9idWlsZHRvYworLQkkKFJVTl9QRVJMKSAtZiBwb2QvYnVpbGR0b2MgLXEKKytwb2QvcGVybHRvYy5wb2Q6ICQocGVybHRvY19wb2RfcHJlcmVxcykgJChleHQpIHBvZC9idWlsZHRvYworKwkkKE1JTklQRVJMKSAtZiBwb2QvYnVpbGR0b2MgLXEKKyAKKyBwb2QvcGVybGFwaS5wb2Q6IHBvZC9wZXJsaW50ZXJuLnBvZAorIAorLXBvZC9wZXJsaW50ZXJuLnBvZDogJChNSU5JUEVSTF9FWEUpIGF1dG9kb2MucGwgZW1iZWQuZm5jCisrcG9kL3BlcmxpbnRlcm4ucG9kOiBhdXRvZG9jLnBsIGVtYmVkLmZuYworIAkkKE1JTklQRVJMKSBhdXRvZG9jLnBsCisgCisgcG9kL3Blcmxtb2RsaWIucG9kOiAkKE1JTklQRVJMX0VYRSkgcG9kL3Blcmxtb2RsaWIuUEwgTUFOSUZFU1QKK0BAIC0xMDI0LDcgKzEwMzQsNyBAQCBwb2QvcGVybDUyMjBkZWx0YS5wb2Q6IHBvZC9wZXJsZGVsdGEucG9kCisgCSQoUk1TKSBwb2QvcGVybDUyMjBkZWx0YS5wb2QKKyAJJChMTlMpIHBlcmxkZWx0YS5wb2QgcG9kL3Blcmw1MjIwZGVsdGEucG9kCisgCistZXh0cmEucG9kczogJChNSU5JUEVSTF9FWEUpCisrZXh0cmEucG9kczoKKyAJLUB0ZXN0ICEgLWYgZXh0cmEucG9kcyB8fCBybSAtZiBgY2F0IGV4dHJhLnBvZHNgCisgCS1Acm0gLWYgZXh0cmEucG9kcworIAktQGZvciB4IGluIGBncmVwIC1sICdePVthLXpdJyBSRUFETUUuKiB8IGdyZXAgLXYgUkVBRE1FLnZtc2AgOyBkbyBcCitAQCAtMTA2OCw4ICsxMDc4LDcgQEAgRU9UCisgICAgICAgICAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8RU9UCisgCisgaW5zdGFsbF8kbmFtZSBpbnN0YWxsLSRuYW1lOiBcJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsIGFsbCBpbnN0YWxsbWFuCistCVwkKFJVTl9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzIFwkKElOU1RBTExGTEFHUykgXCQoU1RSSVBGTEFHUykKKy0JXCQoUlVOX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncworKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9XCQoREVTVERJUikgJGZsYWdzICBcJChJTlNUQUxMRkxBR1MpIFwkKFNUUklQRkxBR1MpCisgRU9UCisgICAgIGZpCisgCitAQCAtMTA3OSwxMSArMTA4OCw3IEBAIGRvbmUKKyBpZiB0ZXN0ICJYJGhvc3RwZXJsIiAhPSBYOyB0aGVuCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGluc3RhbGwucGVybDoJJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsCistCSQoSE9TVF9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorLQktQHRlc3QgISAtcyBleHRyYXMubHN0IHx8ICQoTUFLRSkgZXh0cmFzLmluc3RhbGwKKy0KKy1pbnN0YWxsLm1hbjoJYWxsIGluc3RhbGxtYW4KKy0JJChIT1NUX1BFUkwpIGluc3RhbGxtYW4gLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpCisrCS4vaG9zdHBlcmwgLUlmYWtlX2NvbmZpZ19saWJyYXJ5IC1JbGliIC1NQ29uZmlnIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCisgCisgIyBYWFggRXhwZXJpbWVudGFsLiBIYXJkd2lyZWQgdmFsdWVzLCBidXQgdXNlZnVsIGZvciB0ZXN0aW5nLgorICMgRXZlbnR1YWxseSBDb25maWd1cmUgY291bGQgYXNrIGZvciBzb21lIG9mIHRoZXNlIHZhbHVlcy4KK0BAIC0xMTAxLDI0ICsxMTA2LDggQEAgaW5zdGFsbC5odG1sOiBhbGwgaW5zdGFsbGh0bWwKKyBlbHNlCisgCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGluc3RhbGwucGVybDoJJChJTlNUQUxMX0RFUEVOREVOQ0UpIGluc3RhbGxwZXJsCistCSQoUlVOX1BFUkwpIGluc3RhbGxwZXJsIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKSAkKFNUUklQRkxBR1MpCistCS1AdGVzdCAhIC1zIGV4dHJhcy5sc3QgfHwgUEFUSD0iYHB3ZGA6XCR7UEFUSH0iIFBFUkw1TElCPSJgcHdkYC9saWIiIFwkKFJVTl9QRVJMKSAtSWxpYiAtTUNQQU4gLWUgJ0BBUkdWJiZpbnN0YWxsKEBBUkdWKScgYGNhdCBleHRyYXMubHN0YAorKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorIAorLWluc3RhbGwubWFuOglhbGwgaW5zdGFsbG1hbgorLQkkKFJVTl9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKQorLQorLSMgWFhYIEV4cGVyaW1lbnRhbC4gSGFyZHdpcmVkIHZhbHVlcywgYnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKy0jIEV2ZW50dWFsbHkgQ29uZmlndXJlIGNvdWxkIGFzayBmb3Igc29tZSBvZiB0aGVzZSB2YWx1ZXMuCistaW5zdGFsbC5odG1sOiBhbGwgaW5zdGFsbGh0bWwKKy0JLUB0ZXN0IC1mIFJFQURNRS52bXMgJiYgY2Qgdm1zICYmICQoTE5TKSAuLi9SRUFETUUudm1zIFJFQURNRV92bXMucG9kICYmIGNkIC4uCistCSQoUlVOX1BFUkwpIGluc3RhbGxodG1sICAgXAorLSAgICAgIC0tcG9kcm9vdD0uIC0tcG9kcGF0aD0uIC0tcmVjdXJzZSAgXAorLSAgICAgIC0taHRtbGRpcj0kKHByaXZsaWIpL2h0bWwgICBcCistICAgICAgLS1odG1scm9vdD0kKHByaXZsaWIpL2h0bWwgIFwKKy0gICAgICAtLXNwbGl0aGVhZD1wb2QvcGVybGlwYyAgICAgXAorLSAgICAgIC0tc3BsaXRpdGVtPXBvZC9wZXJsZnVuYyAgICBcCistICAgICAgLS1pZ25vcmU9UG9ydGluZy9NYWludGFpbmVycy5wbSxQb3J0aW5nL3B1bXBraW4ucG9kLFBvcnRpbmcvcmVwb3NpdG9yeS5wb2QgXAorLSAgICAgIC0tdmVyYm9zZQorICFOTyFTVUJTIQorIGZpCisgCitAQCAtMTIxMCwxMyArMTE5OSwxMyBAQCBtYW5pY2hlY2s6CUZPUkNFCisgIworICMgRHluYUxvYWRlciBtYXkgYmUgbmVlZGVkIGZvciBleHRlbnNpb25zIHRoYXQgdXNlIE1ha2VmaWxlLlBMLgorIAorLSQoRFlOQUxPQURFUik6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgRk9SQ0UgJChub254c19leHQpCisrJChEWU5BTE9BREVSKTogbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IEZPUkNFICQobm9ueHNfZXh0KQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkQCAkKE1BS0VfRVhUX0FSR1MpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPXN0YXRpYyAkKFNUQVRJQ19MREZMQUdTKQorIAorLWRfZHVtbXkgJChkeW5hbWljX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFICQoUEVSTEVYUE9SVCkgJChMSUJQRVJMKQorK2RfZHVtbXkgJChkeW5hbWljX2V4dCk6CWxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UgJChQRVJMRVhQT1JUKSAkKExJQlBFUkwpCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICRAICQoTUFLRV9FWFRfQVJHUykgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9ZHluYW1pYworIAorLXNfZHVtbXkgJChzdGF0aWNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UKKytzX2R1bW15ICQoc3RhdGljX2V4dCk6CWxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBtYWtlcHBwb3J0ICQoRFlOQUxPQURFUikgRk9SQ0UKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJEAgJChNQUtFX0VYVF9BUkdTKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1zdGF0aWMgJChTVEFUSUNfTERGTEFHUykKKyAKKyBuX2R1bW15ICQobm9ueHNfZXh0KToJJChNSU5JUEVSTF9FWEUpIGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBGT1JDRQorQEAgLTE0MDUsMTQgKzEzOTQsMTQgQEAgdGVzdF9wcmVwX3ByZTogcHJlcGxpYnJhcnkgdXRpbGl0aWVzICQobm9ueHNfZXh0KQorIAorIGNhc2UgIiR0YXJnZXRob3N0IiBpbgorICcnKSAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy10ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlICQoTUlOSVBFUkxfRVhFKSAkKHVuaWRhdGFmaWxlcykgJChQRVJMX0VYRSkgXAorK3Rlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgJCh1bmlkYXRhZmlsZXMpICQoUEVSTF9FWEUpIFwKKyAJJChkeW5hbWljX2V4dCkgJChURVNUX1BFUkxfRExMKSBydW50ZXN0cyAkKGdlbmVyYXRlZF9wb2RzKQorIAljZCB0ICYmIChybSAtZiAkKFBFUkxfRVhFKTsgJChMTlMpIC4uLyQoUEVSTF9FWEUpICQoUEVSTF9FWEUpKQorIAorICFOTyFTVUJTIQorIDs7CisgKikgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCFHUk9LIVRISVMhCistdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJChNSU5JUEVSTF9FWEUpIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUpIFwKKyt0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUpIFwKKyAJXCQoZHluYW1pY19leHQpIFwkKFRFU1RfUEVSTF9ETEwpIHJ1bnRlc3RzIFwKKyAJXCQoZ2VuZXJhdGVkX3BvZHMpCisgCSR0byBsaWJwZXJsLioKK0BAIC0xNDY1LDcgKzE0NTQsNyBAQCB0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlIFwkKE1JTklQRVJMX0VYRSkgXCQodW5pZGF0YWZpbGVzKSBcJChQRVJMX0VYRQorIGVzYWMKKyAKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy10ZXN0X3ByZXBfcmVvbmx5OiAkKE1JTklQRVJMX0VYRSkgJChQRVJMX0VYRSkgJChkeW5hbWljX2V4dF9yZSkgJChURVNUX1BFUkxfRExMKQorK3Rlc3RfcHJlcF9yZW9ubHk6ICQoUEVSTF9FWEUpICQoZHluYW1pY19leHRfcmUpICQoVEVTVF9QRVJMX0RMTCkKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJChkeW5hbWljX2V4dF9yZSkgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9ZHluYW1pYworIAljZCB0ICYmIChybSAtZiAkKFBFUkxfRVhFKTsgJChMTlMpIC4uLyQoUEVSTF9FWEUpICQoUEVSTF9FWEUpKQorICFOTyFTVUJTIQorQEAgLTE1MTYsNyArMTUwNSw3IEBAICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIAorICMgQ2FuJ3QgZGVwZW5kIG9uIGxpYi9Db25maWcucG0gYmVjYXVzZSB0aGF0IG1pZ2h0IGJlIHdoZXJlIG1pbmlwZXJsCisgIyBpcyBjcmFzaGluZy4KKy1taW5pdGVzdDogJChNSU5JUEVSTF9FWEUpCisrbWluaXRlc3Q6CisgCS1AdGVzdCAtZiBsaWIvQ29uZmlnLnBtIHx8ICQoTUFLRSkgbGliL0NvbmZpZy5wbSAkKHVuaWRhdGFmaWxlcykKKyAJQGVjaG8gIiAiCisgCUBlY2hvICJZb3UgbWF5IHNlZSBzb21lIGlycmVsZXZhbnQgdGVzdCBmYWlsdXJlcyBpZiB5b3UgaGF2ZSBiZWVuIHVuYWJsZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGUyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xNC4yL0Nyb3NzL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9Dcm9zcy9NYWtlZmlsZQorKysrIHBlcmwtNS4xNC4yL0Nyb3NzL01ha2VmaWxlCitAQCAtMSw2ICsxLDcgQEAKKyAjIyBUb3BsZXZlbCBNYWtlZmlsZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb2YgcGVybAorIAorLWV4cG9ydCBUT1BESVI9JHtzaGVsbCBwd2R9Cisrb3ZlcnJpZGUgVE9QRElSPSR7c2hlbGwgcHdkfQorK2V4cG9ydCBUT1BESVIKKyBpbmNsdWRlICQoVE9QRElSKS9jb25maWcKKyBleHBvcnQgQ0ZMQUdTCisgZXhwb3J0IFNZUz0kKEFSQ0gpLSQoT1MpCitAQCAtMTAsNyArMTEsNyBAQCBleHBvcnQgT1BUSU1JWkFUSU9OID0gLU8yCisgCisgZXhwb3J0IENDID0gJChDUk9TUylnY2MKKyBleHBvcnQgQ1hYID0gJChDUk9TUylnKysKKy1leHBvcnQgTEQgPSAkKENST1NTKWxkCisrZXhwb3J0IExEID0gJChDQykKKyBleHBvcnQgU1RSSVAgPSAkKENST1NTKXN0cmlwCisgZXhwb3J0IEFSID0gJChDUk9TUylhcgorIGV4cG9ydCBSQU5MSUIgPSAkKENST1NTKXJhbmxpYgorQEAgLTMyLDE3ICszMyw2IEBAIENGTEFHUys9JChGVUxMX09QVElNSVpBVElPTikKKyBhbGw6CisgCUBlY2hvIFBsZWFzZSByZWFkIHRoZSBSRUFETUUgZmlsZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyAKKy1nZW5fcGF0Y2g6CistCWRpZmYgLUJidXIgLi4vTWFrZWZpbGUuU0ggTWFrZWZpbGUuU0ggPiBNYWtlZmlsZS5TSC5wYXRjaAorLQlkaWZmIC1CYnVyIC4uL2luc3RhbGxwZXJsIGluc3RhbGxwZXJsID4gaW5zdGFsbHBlcmwucGF0Y2gKKy0KKy1wYXRjaDoKKy0JY2QgLi4gOyBpZiBbICEgLWUgLi9DUk9TU19QQVRDSEVEIF0gOyB0aGVuIFwKKy0JCXBhdGNoIC1wMSA8IENyb3NzL01ha2VmaWxlLlNILnBhdGNoOyBcCistCQlwYXRjaCAtcDEgPCBDcm9zcy9pbnN0YWxscGVybC5wYXRjaCA7IG12IGluc3RhbGxwZXJsIGluc3RhbGxwZXJsLXBhdGNoZWQ7IFwKKy0JCXNlZCAtZSAncy9YWFNUUklQWFgvJChTWVMpLycgaW5zdGFsbHBlcmwtcGF0Y2hlZCA+IGluc3RhbGxwZXJsOyBcCistCQl0b3VjaCBDUk9TU19QQVRDSEVEIDsgZmkKKy0KKyBwZXJsOgorIAlAZWNobyBQZXJsIGNyb3NzLWJ1aWxkIGRpcmVjdG9yeSBpcyAkKFRPUERJUikKKyAJQGVjaG8gVGFyZ2V0IGFyY2ggaXMgJChTWVMpCitAQCAtNTIsMTEgKzQyLDExIEBAIHBlcmw6CisgCSQoVE9QRElSKS9nZW5lcmF0ZV9jb25maWdfc2ggY29uZmlnLnNoLSQoU1lTKSA+ICQoVE9QRElSKS8uLi9jb25maWcuc2gKKyAJY2QgJChUT1BESVIpLy4uIDsgLi9Db25maWd1cmUgLVMgOyBtYWtlIGRlcGVuZCA7IG1ha2UgOyBtYWtlIG1vcmUKKyAJY2QgJChUT1BESVIpLy4uIDsgbWtkaXIgLXAgZmFrZV9jb25maWdfbGlicmFyeSA7IGNwIGxpYi9Db25maWcucG0gbGliL0NvbmZpZ19oZWF2eS5wbCBmYWtlX2NvbmZpZ19saWJyYXJ5CistCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTIgIlBFUkxSVU49L3Vzci9iaW4vcGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorLQljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUzICJQRVJMUlVOPS91c3IvYmluL3BlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKy0JY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlNCAiUEVSTFJVTj0vdXNyL2Jpbi9wZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisrCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTIgIlBFUkxSVU49aG9zdHBlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKysJY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMyAiUEVSTFJVTj1ob3N0cGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorKwljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmU0ICJQRVJMUlVOPWhvc3RwZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisgCWNkICQoVE9QRElSKS8uLiA7IHJtIC1yZiBpbnN0YWxsX21lX2hlcmUKKy0JY2QgJChUT1BESVIpLy4uIDsgbWFrZSBpbnN0YWxsLXN0cmlwCisrIwljZCAkKFRPUERJUikvLi4gOyBtYWtlIGluc3RhbGwtc3RyaXAKKyAJY2QgJChUT1BESVIpLy4uIDsgc2ggLXggQ3Jvc3Mvd2FycAorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI1MDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKQEAgLTAsMCArMSwxMjIxIEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBydW5uaW5nIHRoZSBDb25maWd1cmUgc2NyaXB0LiBJdCBob2xkcyBhbGwgdGhlCisjIGRlZmluaXRpb25zIGZpZ3VyZWQgb3V0IGJ5IENvbmZpZ3VyZS4gU2hvdWxkIHlvdSBtb2RpZnkgb25lIG9mIHRoZXNlIHZhbHVlcywKKyMgZG8gbm90IGZvcmdldCB0byBwcm9wYWdhdGUgeW91ciBjaGFuZ2VzIGJ5IHJ1bm5pbmcgIkNvbmZpZ3VyZSAtZGVyIi4gWW91IG1heQorIyBpbnN0ZWFkIGNob29zZSB0byBydW4gZWFjaCBvZiB0aGUgLlNIIGZpbGVzIGJ5IHlvdXJzZWxmLCBvciAiQ29uZmlndXJlIC1TIi4KKyMKKworIyBQYWNrYWdlIG5hbWUgICAgICA6IHBlcmw1CisjIFNvdXJjZSBkaXJlY3RvcnkgIDogLgorIyBDb25maWd1cmF0aW9uIHRpbWU6IFRodSBKdW4gMTggMDU6Mzc6MjcgVVRDIDIwMTUKKyMgQ29uZmlndXJlZCBieSAgICAgOiBPcGVuIEVtYmVkZGVkCisjIFRhcmdldCBzeXN0ZW0gICAgIDogbGludXggcWVtdXg4Ni02NCAzLjE5LjUteW9jdG8tc3RhbmRhcmQgIzEgc21wIHByZWVtcHQgdHVlIGp1biAxNiAwMDoyODoxNyBwZHQgMjAxNSB4ODZfNjQgZ251bGludXgKKworOiBDb25maWd1cmUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK2NvbmZpZ19hcmcwPSdDb25maWd1cmUnCitjb25maWdfYXJncz0nLWRlcyAtRG9wdGltaXplPS1PMiAtRG15aG9zdG5hbWU9bG9jYWxob3N0IC1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0IC1EY2M9Z2NjIC1EY2ZfYnk9T3BlbiBFbWJlZGRlZCAtRGluc3RhbGxwcmVmaXg9QEVYRUNQUkVGSVhAIC1EcHJlZml4PUBFWEVDUFJFRklYQCAtRHZlbmRvcnByZWZpeD1ARVhFQ1BSRUZJWEAgLURzaXRlcHJlZml4PUBFWEVDUFJFRklYQCAtRG90aGVybGliZGlycz1ATElCRElSQC9wZXJsLzUuMjIuMCAtRHVzZXNocnBsaWIgLUR1c2V0aHJlYWRzIC1EdXNlaXRocmVhZHMgLUR1c2VsYXJnZWZpbGVzIC1VZF9kb3N1aWQgLURkX3NlbWN0bF9zZW11biAtVWlfZGIgLVVpX25kYm0gLVVpX2dkYm0gLURpX3NoYWRvdyAtRGlfc3lzbG9nIC1EbWFuM2V4dD0zcG0gLUR1c2VwZXJsaW8gLURpbnN0YWxsdXNyYmlucGVybCAtVWJpbmNvbXBhdDUwMDUgLVV2ZXJzaW9ub25seSAtRHBhZ2VyPUBVU1JCSU5AL2xlc3MgLWlzcicKK2NvbmZpZ19hcmdjPTI4Citjb25maWdfYXJnMT0nLWRlcycKK2NvbmZpZ19hcmcyPSctRG9wdGltaXplPS1PMicKK2NvbmZpZ19hcmczPSctRG15aG9zdG5hbWU9bG9jYWxob3N0JworY29uZmlnX2FyZzQ9Jy1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0JworY29uZmlnX2FyZzU9Jy1EY2M9Z2NjJworY29uZmlnX2FyZzY9Jy1EY2ZfYnk9T3BlbiBFbWJlZGRlZCcKK2NvbmZpZ19hcmc3PSctRGluc3RhbGxwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzg9Jy1EcHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmc5PSctRHZlbmRvcnByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnMTA9Jy1Ec2l0ZXByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnMTE9Jy1Eb3RoZXJsaWJkaXJzPUBMSUJESVJAL3BlcmwvNS4yMi4wJworY29uZmlnX2FyZzEyPSctRHVzZXNocnBsaWInCitjb25maWdfYXJnMTM9Jy1EdXNldGhyZWFkcycKK2NvbmZpZ19hcmcxND0nLUR1c2VpdGhyZWFkcycKK2NvbmZpZ19hcmcxNT0nLUR1c2VsYXJnZWZpbGVzJworY29uZmlnX2FyZzE2PSctVWRfZG9zdWlkJworY29uZmlnX2FyZzE3PSctRGRfc2VtY3RsX3NlbXVuJworY29uZmlnX2FyZzE4PSctVWlfZGInCitjb25maWdfYXJnMTk9Jy1VaV9uZGJtJworY29uZmlnX2FyZzIwPSctVWlfZ2RibScKK2NvbmZpZ19hcmcyMT0nLURpX3NoYWRvdycKK2NvbmZpZ19hcmcyMj0nLURpX3N5c2xvZycKK2NvbmZpZ19hcmcyMz0nLURtYW4zZXh0PTNwbScKK2NvbmZpZ19hcmcyND0nLUR1c2VwZXJsaW8nCitjb25maWdfYXJnMjU9Jy1EaW5zdGFsbHVzcmJpbnBlcmwnCitjb25maWdfYXJnMjY9Jy1VYmluY29tcGF0NTAwNScKK2NvbmZpZ19hcmcyNz0nLVV2ZXJzaW9ub25seScKK2NvbmZpZ19hcmcyOD0nLURwYWdlcj1AVVNSQklOQC9sZXNzIC1pc3InCisKK0F1dGhvcj0nJworRGF0ZT0nJworSGVhZGVyPScnCitJZD0nJworTG9ja2VyPScnCitMb2c9JycKK1JDU2ZpbGU9JycKK1JldmlzaW9uPScnCitTb3VyY2U9JycKK1N0YXRlPScnCitfYT0nLmEnCitfZXhlPScnCitfbz0nLm8nCithZnM9J2ZhbHNlJworYWZzcm9vdD0nL2FmcycKK2FsaWduYnl0ZXM9JzgnCithbnNpMmtucj0nJworYXBob3N0bmFtZT0nJworYXBpX3JldmlzaW9uPSc1JworYXBpX3N1YnZlcnNpb249JzAnCithcGlfdmVyc2lvbj0nMjInCithcGlfdmVyc2lvbnN0cmluZz0nNS4yMi4wJworYXI9J2FyJworYXJjaGxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2hsaWJleHA9J0BTVEFHSU5HRElSQEBMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobGliX2V4cD0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2huYW1lNjQ9JycKK2FyY2huYW1lPSdAQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaG9ianM9JycKK2FzY3RpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfU0InCithd2s9J2F3aycKK2Jhc2VyZXY9JzUuMCcKK2Jhc2g9JycKK2Jpbj0nQFVTUkJJTkAnCitiaW5fRUxGPSdkZWZpbmUnCitiaW5leHA9J0BVU1JCSU5AJworYmlzb249J2Jpc29uJworYnlhY2M9J2J5YWNjJworYz0nJworY2FzdGZsYWdzPScwJworY2F0PSdjYXQnCitjYz0nZ2NjJworY2NjZGxmbGFncz0nLWZQSUMnCitjY2RsZmxhZ3M9Jy1XbCwtRSAtV2wsLXJwYXRoLEBMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGkvQ09SRScKK2NjZmxhZ3M9Jy1EX1JFRU5UUkFOVCAtRF9HTlVfU09VUkNFIC1md3JhcHYgLWZuby1zdHJpY3QtYWxpYXNpbmcgLXBpcGUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0ZPUlRJRllfU09VUkNFPTInCitjY2ZsYWdzX3VzZWxhcmdlZmlsZXM9Jy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCcKK2NjbmFtZT0nZ2NjJworY2NzeW1ib2xzPScnCitjY3ZlcnNpb249JycKK2NmX2J5PSdPcGVuIEVtYmVkZGVkJworY2ZfZW1haWw9J09wZW4gRW1iZWRkZWRAbG9jYWxob3N0LmxvY2FsZG9tYWluJworY2ZfdGltZT0nVGh1IEp1biAxOCAwNTozNzoyNyBVVEMgMjAxNScKK2NoYXJiaXRzPSc4JworY2hhcnNpemU9JzEnCitjaGdycD0nJworY2htb2Q9J2NobW9kJworY2hvd249JycKK2Nsb2NrdHlwZT0nY2xvY2tfdCcKK2NvbW09J2NvbW0nCitjb21wcmVzcz0nJworY29udGFpbnM9J2dyZXAnCitjcD0nY3AnCitjcGlvPScnCitjcHA9J2NwcCcKK2NwcF9zdHVmZj0nNDInCitjcHBjY3N5bWJvbHM9JycKK2NwcGZsYWdzPSctRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAtZndyYXB2IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlJworY3BwbGFzdD0nLScKK2NwcG1pbnVzPSctJworY3BwcnVuPSdnY2MgIC1FJworY3Bwc3RkaW49J2djYyAgLUUnCitjcnlwdF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9DQ1MnCitjcnlwdGxpYj0nJworY3NoPSdjc2gnCitjdGVybWlkX3JfcHJvdG89JzAnCitjdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9TQicKK2RfR2NvbnZlcnQ9J2djdnQoKHgpLChuKSwoYikpJworZF9QUklFVWxkYmw9J2RlZmluZScKK2RfUFJJRlVsZGJsPSdkZWZpbmUnCitkX1BSSUdVbGRibD0nZGVmaW5lJworZF9QUklYVTY0PSdkZWZpbmUnCitkX1BSSWQ2ND0nZGVmaW5lJworZF9QUkllbGRibD0nZGVmaW5lJworZF9QUklmbGRibD0nZGVmaW5lJworZF9QUklnbGRibD0nZGVmaW5lJworZF9QUklpNjQ9J2RlZmluZScKK2RfUFJJbzY0PSdkZWZpbmUnCitkX1BSSXU2ND0nZGVmaW5lJworZF9QUkl4NjQ9J2RlZmluZScKK2RfU0NOZmxkYmw9J2RlZmluZScKK2RfX2Z3YWxrPSd1bmRlZicKK2RfYWNjZXNzPSdkZWZpbmUnCitkX2FjY2Vzc3g9J3VuZGVmJworZF9hY29zaD0nZGVmaW5lJworZF9haW50bD0ndW5kZWYnCitkX2FsYXJtPSdkZWZpbmUnCitkX2FyY2hsaWI9J2RlZmluZScKK2RfYXNjdGltZTY0PSd1bmRlZicKK2RfYXNjdGltZV9yPSdkZWZpbmUnCitkX2FzaW5oPSdkZWZpbmUnCitkX2F0YW5oPSdkZWZpbmUnCitkX2F0b2xmPSd1bmRlZicKK2RfYXRvbGw9J2RlZmluZScKK2RfYXR0cmlidXRlX2RlcHJlY2F0ZWQ9J2RlZmluZScKK2RfYXR0cmlidXRlX2Zvcm1hdD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbWFsbG9jPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9ub25udWxsPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9ub3JldHVybj0nZGVmaW5lJworZF9hdHRyaWJ1dGVfcHVyZT0nZGVmaW5lJworZF9hdHRyaWJ1dGVfdW51c2VkPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHQ9J2RlZmluZScKK2RfYmFja3RyYWNlPSdkZWZpbmUnCitkX2JjbXA9J2RlZmluZScKK2RfYmNvcHk9J2RlZmluZScKK2RfYnNkPSd1bmRlZicKK2RfYnNkZ2V0cGdycD0ndW5kZWYnCitkX2JzZHNldHBncnA9J3VuZGVmJworZF9idWlsdGluX2Nob29zZV9leHByPSdkZWZpbmUnCitkX2J1aWx0aW5fZXhwZWN0PSdkZWZpbmUnCitkX2J6ZXJvPSdkZWZpbmUnCitkX2M5OV92YXJpYWRpY19tYWNyb3M9J2RlZmluZScKK2RfY2FzdGkzMj0nZGVmaW5lJworZF9jYXN0bmVnPSdkZWZpbmUnCitkX2NicnQ9J2RlZmluZScKK2RfY2hhcnZzcHI9J3VuZGVmJworZF9jaG93bj0nZGVmaW5lJworZF9jaHJvb3Q9J2RlZmluZScKK2RfY2hzaXplPSd1bmRlZicKK2RfY2xhc3M9J3VuZGVmJworZF9jbGVhcmVudj0nZGVmaW5lJworZF9jbG9zZWRpcj0nZGVmaW5lJworZF9jbXNnaGRyX3M9J2RlZmluZScKK2RfY29uc3Q9J2RlZmluZScKK2RfY29weXNpZ249J2RlZmluZScKK2RfY29weXNpZ25sPSdkZWZpbmUnCitkX2NwbHVzcGx1cz0ndW5kZWYnCitkX2NyeXB0PSdkZWZpbmUnCitkX2NyeXB0X3I9J2RlZmluZScKK2RfY3NoPSd1bmRlZicKK2RfY3Rlcm1pZD0nZGVmaW5lJworZF9jdGVybWlkX3I9J3VuZGVmJworZF9jdGltZTY0PSd1bmRlZicKK2RfY3RpbWVfcj0nZGVmaW5lJworZF9jdXNlcmlkPSdkZWZpbmUnCitkX2RibF9kaWc9J2RlZmluZScKK2RfZGJtaW5pdHByb3RvPSdkZWZpbmUnCitkX2RpZmZ0aW1lNjQ9J3VuZGVmJworZF9kaWZmdGltZT0nZGVmaW5lJworZF9kaXJfZGRfZmQ9J3VuZGVmJworZF9kaXJmZD0nZGVmaW5lJworZF9kaXJuYW1sZW49J3VuZGVmJworZF9kbGFkZHI9J2RlZmluZScKK2RfZGxlcnJvcj0nZGVmaW5lJworZF9kbG9wZW49J2RlZmluZScKK2RfZGxzeW11bj0ndW5kZWYnCitkX2Rvc3VpZD0ndW5kZWYnCitkX2RyYW5kNDhfcj0nZGVmaW5lJworZF9kcmFuZDQ4cHJvdG89J2RlZmluZScKK2RfZHVwMj0nZGVmaW5lJworZF9lYWNjZXNzPSdkZWZpbmUnCitkX2VuZGdyZW50PSdkZWZpbmUnCitkX2VuZGdyZW50X3I9J3VuZGVmJworZF9lbmRoZW50PSdkZWZpbmUnCitkX2VuZGhvc3RlbnRfcj0ndW5kZWYnCitkX2VuZG5lbnQ9J2RlZmluZScKK2RfZW5kbmV0ZW50X3I9J3VuZGVmJworZF9lbmRwZW50PSdkZWZpbmUnCitkX2VuZHByb3RvZW50X3I9J3VuZGVmJworZF9lbmRwd2VudD0nZGVmaW5lJworZF9lbmRwd2VudF9yPSd1bmRlZicKK2RfZW5kc2VudD0nZGVmaW5lJworZF9lbmRzZXJ2ZW50X3I9J3VuZGVmJworZF9lb2ZuYmxrPSdkZWZpbmUnCitkX2VyZj0nZGVmaW5lJworZF9lcmZjPSdkZWZpbmUnCitkX2V1bmljZT0ndW5kZWYnCitkX2V4cDI9J2RlZmluZScKK2RfZXhwbTE9J2RlZmluZScKK2RfZmFzdHN0ZGlvPSd1bmRlZicKK2RfZmNoZGlyPSdkZWZpbmUnCitkX2ZjaG1vZD0nZGVmaW5lJworZF9mY2hvd249J2RlZmluZScKK2RfZmNudGw9J2RlZmluZScKK2RfZmNudGxfY2FuX2xvY2s9J2RlZmluZScKK2RfZmRfbWFjcm9zPSdkZWZpbmUnCitkX2ZkX3NldD0nZGVmaW5lJworZF9mZGltPSdkZWZpbmUnCitkX2Zkc19iaXRzPSdkZWZpbmUnCitkX2ZlZ2V0cm91bmQ9J2RlZmluZScKK2RfZmdldHBvcz0nZGVmaW5lJworZF9maW5pdGU9J2RlZmluZScKK2RfZmluaXRlbD0nZGVmaW5lJworZF9mbGV4Zm5hbT0nZGVmaW5lJworZF9mbG9jaz0nZGVmaW5lJworZF9mbG9ja3Byb3RvPSdkZWZpbmUnCitkX2ZtYT0nZGVmaW5lJworZF9mbWF4PSdkZWZpbmUnCitkX2ZtaW49J2RlZmluZScKK2RfZm9yaz0nZGVmaW5lJworZF9mcF9jbGFzcz0ndW5kZWYnCitkX2ZwX2NsYXNzaWZ5PSd1bmRlZicKK2RfZnBfY2xhc3NsPSd1bmRlZicKK2RfZnBhdGhjb25mPSdkZWZpbmUnCitkX2ZwY2xhc3M9J3VuZGVmJworZF9mcGNsYXNzaWZ5PSdkZWZpbmUnCitkX2ZwY2xhc3NsPSd1bmRlZicKK2RfZnBnZXRyb3VuZD0ndW5kZWYnCitkX2Zwb3M2NF90PSd1bmRlZicKK2RfZnJleHBsPSdkZWZpbmUnCitkX2ZzX2RhdGFfcz0ndW5kZWYnCitkX2ZzZWVrbz0nZGVmaW5lJworZF9mc2V0cG9zPSdkZWZpbmUnCitkX2ZzdGF0ZnM9J2RlZmluZScKK2RfZnN0YXR2ZnM9J2RlZmluZScKK2RfZnN5bmM9J2RlZmluZScKK2RfZnRlbGxvPSdkZWZpbmUnCitkX2Z0aW1lPSd1bmRlZicKK2RfZnV0aW1lcz0nZGVmaW5lJworZF9nZGJtX25kYm1faF91c2VzX3Byb3RvdHlwZXM9J3VuZGVmJworZF9nZGJtbmRibV9oX3VzZXNfcHJvdG90eXBlcz0nZGVmaW5lJworZF9nZXRhZGRyaW5mbz0nZGVmaW5lJworZF9nZXRjd2Q9J2RlZmluZScKK2RfZ2V0ZXNwd25hbT0ndW5kZWYnCitkX2dldGZzc3RhdD0ndW5kZWYnCitkX2dldGdyZW50PSdkZWZpbmUnCitkX2dldGdyZW50X3I9J2RlZmluZScKK2RfZ2V0Z3JnaWRfcj0nZGVmaW5lJworZF9nZXRncm5hbV9yPSdkZWZpbmUnCitkX2dldGdycHM9J2RlZmluZScKK2RfZ2V0aGJ5YWRkcj0nZGVmaW5lJworZF9nZXRoYnluYW1lPSdkZWZpbmUnCitkX2dldGhlbnQ9J2RlZmluZScKK2RfZ2V0aG5hbWU9J2RlZmluZScKK2RfZ2V0aG9zdGJ5YWRkcl9yPSdkZWZpbmUnCitkX2dldGhvc3RieW5hbWVfcj0nZGVmaW5lJworZF9nZXRob3N0ZW50X3I9J2RlZmluZScKK2RfZ2V0aG9zdHByb3Rvcz0nZGVmaW5lJworZF9nZXRpdGltZXI9J2RlZmluZScKK2RfZ2V0bG9naW49J2RlZmluZScKK2RfZ2V0bG9naW5fcj0nZGVmaW5lJworZF9nZXRtbnQ9J3VuZGVmJworZF9nZXRtbnRlbnQ9J2RlZmluZScKK2RfZ2V0bmFtZWluZm89J2RlZmluZScKK2RfZ2V0bmJ5YWRkcj0nZGVmaW5lJworZF9nZXRuYnluYW1lPSdkZWZpbmUnCitkX2dldG5lbnQ9J2RlZmluZScKK2RfZ2V0bmV0YnlhZGRyX3I9J2RlZmluZScKK2RfZ2V0bmV0YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0bmV0ZW50X3I9J2RlZmluZScKK2RfZ2V0bmV0cHJvdG9zPSdkZWZpbmUnCitkX2dldHBhZ3N6PSdkZWZpbmUnCitkX2dldHBieW5hbWU9J2RlZmluZScKK2RfZ2V0cGJ5bnVtYmVyPSdkZWZpbmUnCitkX2dldHBlbnQ9J2RlZmluZScKK2RfZ2V0cGdpZD0nZGVmaW5lJworZF9nZXRwZ3JwMj0ndW5kZWYnCitkX2dldHBncnA9J2RlZmluZScKK2RfZ2V0cHBpZD0nZGVmaW5lJworZF9nZXRwcmlvcj0nZGVmaW5lJworZF9nZXRwcm90b2J5bmFtZV9yPSdkZWZpbmUnCitkX2dldHByb3RvYnludW1iZXJfcj0nZGVmaW5lJworZF9nZXRwcm90b2VudF9yPSdkZWZpbmUnCitkX2dldHByb3RvcHJvdG9zPSdkZWZpbmUnCitkX2dldHBycHduYW09J3VuZGVmJworZF9nZXRwd2VudD0nZGVmaW5lJworZF9nZXRwd2VudF9yPSdkZWZpbmUnCitkX2dldHB3bmFtX3I9J2RlZmluZScKK2RfZ2V0cHd1aWRfcj0nZGVmaW5lJworZF9nZXRzYnluYW1lPSdkZWZpbmUnCitkX2dldHNieXBvcnQ9J2RlZmluZScKK2RfZ2V0c2VudD0nZGVmaW5lJworZF9nZXRzZXJ2YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0c2VydmJ5cG9ydF9yPSdkZWZpbmUnCitkX2dldHNlcnZlbnRfcj0nZGVmaW5lJworZF9nZXRzZXJ2cHJvdG9zPSdkZWZpbmUnCitkX2dldHNwbmFtPSdkZWZpbmUnCitkX2dldHNwbmFtX3I9J2RlZmluZScKK2RfZ2V0dGltZW9kPSdkZWZpbmUnCitkX2dtdGltZTY0PSd1bmRlZicKK2RfZ210aW1lX3I9J2RlZmluZScKK2RfZ251bGliYz0nZGVmaW5lJworZF9ncnBhc3N3ZD0nZGVmaW5lJworZF9oYXNtbnRvcHQ9J2RlZmluZScKK2RfaHRvbmw9J2RlZmluZScKK2RfaHlwb3Q9J2RlZmluZScKK2RfaWxvZ2I9J2RlZmluZScKK2RfaWxvZ2JsPSdkZWZpbmUnCitkX2luY192ZXJzaW9uX2xpc3Q9J3VuZGVmJworZF9pbmRleD0ndW5kZWYnCitkX2luZXRhdG9uPSdkZWZpbmUnCitkX2luZXRudG9wPSdkZWZpbmUnCitkX2luZXRwdG9uPSdkZWZpbmUnCitkX2ludDY0X3Q9J2RlZmluZScKK2RfaXBfbXJlcT0nZGVmaW5lJworZF9pcF9tcmVxX3NvdXJjZT0nZGVmaW5lJworZF9pcHY2X21yZXE9J2RlZmluZScKK2RfaXB2Nl9tcmVxX3NvdXJjZT0ndW5kZWYnCitkX2lzYXNjaWk9J2RlZmluZScKK2RfaXNibGFuaz0nZGVmaW5lJworZF9pc2Zpbml0ZT0nZGVmaW5lJworZF9pc2Zpbml0ZWw9J3VuZGVmJworZF9pc2luZj0nZGVmaW5lJworZF9pc2luZmw9J2RlZmluZScKK2RfaXNsZXNzPSd1bmRlZicKK2RfaXNuYW49J2RlZmluZScKK2RfaXNuYW5sPSdkZWZpbmUnCitkX2lzbm9ybWFsPSdkZWZpbmUnCitkX2owPSdkZWZpbmUnCitkX2owbD0nZGVmaW5lJworZF9raWxscGc9J2RlZmluZScKK2RfbGNfbW9uZXRhcnlfMjAwOD0nZGVmaW5lJworZF9sY2hvd249J2RlZmluZScKK2RfbGRibF9kaWc9J2RlZmluZScKK2RfbGRleHBsPSdkZWZpbmUnCitkX2xnYW1tYT0nZGVmaW5lJworZF9sZ2FtbWFfcj0nZGVmaW5lJworZF9saWJtX2xpYl92ZXJzaW9uPSdkZWZpbmUnCitkX2xpYm5hbWVfdW5pcXVlPSd1bmRlZicKK2RfbGluaz0nZGVmaW5lJworZF9sbHJpbnQ9J2RlZmluZScKK2RfbGxyaW50bD0nZGVmaW5lJworZF9sbHJvdW5kPSdkZWZpbmUnCitkX2xscm91bmRsPSdkZWZpbmUnCitkX2xvY2FsdGltZTY0PSd1bmRlZicKK2RfbG9jYWx0aW1lX3I9J2RlZmluZScKK2RfbG9jYWx0aW1lX3JfbmVlZHNfdHpzZXQ9J2RlZmluZScKK2RfbG9jY29udj0nZGVmaW5lJworZF9sb2NrZj0nZGVmaW5lJworZF9sb2cxcD0nZGVmaW5lJworZF9sb2cyPSdkZWZpbmUnCitkX2xvZ2I9J2RlZmluZScKK2RfbG9uZ2RibD0nZGVmaW5lJworZF9sb25nbG9uZz0nZGVmaW5lJworZF9scmludD0nZGVmaW5lJworZF9scmludGw9J2RlZmluZScKK2RfbHJvdW5kPSdkZWZpbmUnCitkX2xyb3VuZGw9J2RlZmluZScKK2RfbHNlZWtwcm90bz0nZGVmaW5lJworZF9sc3RhdD0nZGVmaW5lJworZF9tYWR2aXNlPSdkZWZpbmUnCitkX21hbGxvY19nb29kX3NpemU9J3VuZGVmJworZF9tYWxsb2Nfc2l6ZT0ndW5kZWYnCitkX21ibGVuPSdkZWZpbmUnCitkX21ic3Rvd2NzPSdkZWZpbmUnCitkX21idG93Yz0nZGVmaW5lJworZF9tZW1jaHI9J2RlZmluZScKK2RfbWVtY21wPSdkZWZpbmUnCitkX21lbWNweT0nZGVmaW5lJworZF9tZW1tb3ZlPSdkZWZpbmUnCitkX21lbXNldD0nZGVmaW5lJworZF9ta2Rpcj0nZGVmaW5lJworZF9ta2R0ZW1wPSdkZWZpbmUnCitkX21rZmlmbz0nZGVmaW5lJworZF9ta3N0ZW1wPSdkZWZpbmUnCitkX21rc3RlbXBzPSdkZWZpbmUnCitkX21rdGltZTY0PSd1bmRlZicKK2RfbWt0aW1lPSdkZWZpbmUnCitkX21tYXA9J2RlZmluZScKK2RfbW9kZmw9J2RlZmluZScKK2RfbW9kZmxfcG93MzJfYnVnPSd1bmRlZicKK2RfbW9kZmxwcm90bz0nZGVmaW5lJworZF9tcHJvdGVjdD0nZGVmaW5lJworZF9tc2c9J2RlZmluZScKK2RfbXNnX2N0cnVuYz0nZGVmaW5lJworZF9tc2dfZG9udHJvdXRlPSdkZWZpbmUnCitkX21zZ19vb2I9J2RlZmluZScKK2RfbXNnX3BlZWs9J2RlZmluZScKK2RfbXNnX3Byb3h5PSdkZWZpbmUnCitkX21zZ2N0bD0nZGVmaW5lJworZF9tc2dnZXQ9J2RlZmluZScKK2RfbXNnaGRyX3M9J2RlZmluZScKK2RfbXNncmN2PSdkZWZpbmUnCitkX21zZ3NuZD0nZGVmaW5lJworZF9tc3luYz0nZGVmaW5lJworZF9tdW5tYXA9J2RlZmluZScKK2RfbXltYWxsb2M9J3VuZGVmJworZF9uYW49J2RlZmluZScKK2RfbmRibT0nZGVmaW5lJworZF9uZGJtX2hfdXNlc19wcm90b3R5cGVzPSd1bmRlZicKK2RfbmVhcmJ5aW50PSdkZWZpbmUnCitkX25leHRhZnRlcj0nZGVmaW5lJworZF9uZXh0dG93YXJkPSdkZWZpbmUnCitkX25pY2U9J2RlZmluZScKK2RfbmxfbGFuZ2luZm89J2RlZmluZScKK2RfbnZfcHJlc2VydmVzX3V2PSd1bmRlZicKK2RfbnZfemVyb19pc19hbGxiaXRzX3plcm89J2RlZmluZScKK2Rfb2ZmNjRfdD0nZGVmaW5lJworZF9vbGRfcHRocmVhZF9jcmVhdGVfam9pbmFibGU9J3VuZGVmJworZF9vbGRwdGhyZWFkcz0ndW5kZWYnCitkX29sZHNvY2s9J3VuZGVmJworZF9vcGVuMz0nZGVmaW5lJworZF9wYXRoY29uZj0nZGVmaW5lJworZF9wYXVzZT0nZGVmaW5lJworZF9wZXJsX290aGVybGliZGlycz0nZGVmaW5lJworZF9waG9zdG5hbWU9J3VuZGVmJworZF9waXBlPSdkZWZpbmUnCitkX3BvbGw9J2RlZmluZScKK2RfcG9ydGFibGU9J2RlZmluZScKK2RfcHJjdGw9J2RlZmluZScKK2RfcHJjdGxfc2V0X25hbWU9J2RlZmluZScKK2RfcHJpbnRmX2Zvcm1hdF9udWxsPSd1bmRlZicKK2RfcHJvY3NlbGZleGU9J2RlZmluZScKK2RfcHNldWRvZm9yaz0ndW5kZWYnCitkX3B0aHJlYWRfYXRmb3JrPSdkZWZpbmUnCitkX3B0aHJlYWRfYXR0cl9zZXRzY29wZT0nZGVmaW5lJworZF9wdGhyZWFkX3lpZWxkPSdkZWZpbmUnCitkX3B0cmRpZmZfdD0nZGVmaW5lJworZF9wd2FnZT0ndW5kZWYnCitkX3B3Y2hhbmdlPSd1bmRlZicKK2RfcHdjbGFzcz0ndW5kZWYnCitkX3B3Y29tbWVudD0ndW5kZWYnCitkX3B3ZXhwaXJlPSd1bmRlZicKK2RfcHdnZWNvcz0nZGVmaW5lJworZF9wd3Bhc3N3ZD0nZGVmaW5lJworZF9wd3F1b3RhPSd1bmRlZicKK2RfcWdjdnQ9J2RlZmluZScKK2RfcXVhZD0nZGVmaW5lJworZF9yYW5kb21fcj0nZGVmaW5lJworZF9yZV9jb21wPSd1bmRlZicKK2RfcmVhZGRpcjY0X3I9J2RlZmluZScKK2RfcmVhZGRpcj0nZGVmaW5lJworZF9yZWFkZGlyX3I9J2RlZmluZScKK2RfcmVhZGxpbms9J2RlZmluZScKK2RfcmVhZHY9J2RlZmluZScKK2RfcmVjdm1zZz0nZGVmaW5lJworZF9yZWdjbXA9J3VuZGVmJworZF9yZWdjb21wPSdkZWZpbmUnCitkX3JlbWFpbmRlcj0nZGVmaW5lJworZF9yZW1xdW89J2RlZmluZScKK2RfcmVuYW1lPSdkZWZpbmUnCitkX3Jld2luZGRpcj0nZGVmaW5lJworZF9yaW50PSdkZWZpbmUnCitkX3JtZGlyPSdkZWZpbmUnCitkX3JvdW5kPSdkZWZpbmUnCitkX3NhZmViY3B5PSd1bmRlZicKK2Rfc2FmZW1jcHk9J3VuZGVmJworZF9zYW5lbWNtcD0nZGVmaW5lJworZF9zYnJrcHJvdG89J2RlZmluZScKK2Rfc2NhbGJuPSdkZWZpbmUnCitkX3NjYWxibmw9J2RlZmluZScKK2Rfc2NoZWRfeWllbGQ9J2RlZmluZScKK2Rfc2NtX3JpZ2h0cz0nZGVmaW5lJworZF9zZWVrZGlyPSdkZWZpbmUnCitkX3NlbGVjdD0nZGVmaW5lJworZF9zZW09J2RlZmluZScKK2Rfc2VtY3RsPSdkZWZpbmUnCitkX3NlbWN0bF9zZW1pZF9kcz0nZGVmaW5lJworZF9zZW1jdGxfc2VtdW49J2RlZmluZScKK2Rfc2VtZ2V0PSdkZWZpbmUnCitkX3NlbW9wPSdkZWZpbmUnCitkX3NlbmRtc2c9J2RlZmluZScKK2Rfc2V0ZWdpZD0nZGVmaW5lJworZF9zZXRldWlkPSdkZWZpbmUnCitkX3NldGdyZW50PSdkZWZpbmUnCitkX3NldGdyZW50X3I9J3VuZGVmJworZF9zZXRncnBzPSdkZWZpbmUnCitkX3NldGhlbnQ9J2RlZmluZScKK2Rfc2V0aG9zdGVudF9yPSd1bmRlZicKK2Rfc2V0aXRpbWVyPSdkZWZpbmUnCitkX3NldGxpbmVidWY9J2RlZmluZScKK2Rfc2V0bG9jYWxlPSdkZWZpbmUnCitkX3NldGxvY2FsZV9yPSd1bmRlZicKK2Rfc2V0bmVudD0nZGVmaW5lJworZF9zZXRuZXRlbnRfcj0ndW5kZWYnCitkX3NldHBlbnQ9J2RlZmluZScKK2Rfc2V0cGdpZD0nZGVmaW5lJworZF9zZXRwZ3JwMj0ndW5kZWYnCitkX3NldHBncnA9J2RlZmluZScKK2Rfc2V0cHJpb3I9J2RlZmluZScKK2Rfc2V0cHJvY3RpdGxlPSd1bmRlZicKK2Rfc2V0cHJvdG9lbnRfcj0ndW5kZWYnCitkX3NldHB3ZW50PSdkZWZpbmUnCitkX3NldHB3ZW50X3I9J3VuZGVmJworZF9zZXRyZWdpZD0nZGVmaW5lJworZF9zZXRyZXNnaWQ9J2RlZmluZScKK2Rfc2V0cmVzdWlkPSdkZWZpbmUnCitkX3NldHJldWlkPSdkZWZpbmUnCitkX3NldHJnaWQ9J3VuZGVmJworZF9zZXRydWlkPSd1bmRlZicKK2Rfc2V0c2VudD0nZGVmaW5lJworZF9zZXRzZXJ2ZW50X3I9J3VuZGVmJworZF9zZXRzaWQ9J2RlZmluZScKK2Rfc2V0dmJ1Zj0nZGVmaW5lJworZF9zaG09J2RlZmluZScKK2Rfc2htYXQ9J2RlZmluZScKK2Rfc2htYXRwcm90b3R5cGU9J2RlZmluZScKK2Rfc2htY3RsPSdkZWZpbmUnCitkX3NobWR0PSdkZWZpbmUnCitkX3NobWdldD0nZGVmaW5lJworZF9zaWdhY3Rpb249J2RlZmluZScKK2Rfc2lnbmJpdD0nZGVmaW5lJworZF9zaWdwcm9jbWFzaz0nZGVmaW5lJworZF9zaWdzZXRqbXA9J2RlZmluZScKK2Rfc2luNl9zY29wZV9pZD0nZGVmaW5lJworZF9zaXRlYXJjaD0nZGVmaW5lJworZF9zbnByaW50Zj0nZGVmaW5lJworZF9zb2NrYWRkcl9pbjY9J2RlZmluZScKK2Rfc29ja2FkZHJfc2FfbGVuPSd1bmRlZicKK2Rfc29ja2F0bWFyaz0nZGVmaW5lJworZF9zb2NrYXRtYXJrcHJvdG89J2RlZmluZScKK2Rfc29ja2V0PSdkZWZpbmUnCitkX3NvY2tsZW5fdD0nZGVmaW5lJworZF9zb2NrcGFpcj0nZGVmaW5lJworZF9zb2NrczVfaW5pdD0ndW5kZWYnCitkX3NwcmludGZfcmV0dXJuc19zdHJsZW49J2RlZmluZScKK2Rfc3FydGw9J2RlZmluZScKK2Rfc3JhbmQ0OF9yPSdkZWZpbmUnCitkX3NyYW5kb21fcj0nZGVmaW5lJworZF9zcmVzZ3Byb3RvPSdkZWZpbmUnCitkX3NyZXN1cHJvdG89J2RlZmluZScKK2Rfc3RhdD0nZGVmaW5lJworZF9zdGF0Ymxrcz0nZGVmaW5lJworZF9zdGF0ZnNfZl9mbGFncz0nZGVmaW5lJworZF9zdGF0ZnNfcz0nZGVmaW5lJworZF9zdGF0aWNfaW5saW5lPSdkZWZpbmUnCitkX3N0YXR2ZnM9J2RlZmluZScKK2Rfc3RkaW9fY250X2x2YWw9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsX25vY2hhbmdlX2NudD0ndW5kZWYnCitkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PSd1bmRlZicKK2Rfc3RkaW9fc3RyZWFtX2FycmF5PSd1bmRlZicKK2Rfc3RkaW9iYXNlPSd1bmRlZicKK2Rfc3Rkc3RkaW89J3VuZGVmJworZF9zdHJjaHI9J2RlZmluZScKK2Rfc3RyY29sbD0nZGVmaW5lJworZF9zdHJjdGNweT0nZGVmaW5lJworZF9zdHJlcnJtPSdzdHJlcnJvcihlKScKK2Rfc3RyZXJyb3I9J2RlZmluZScKK2Rfc3RyZXJyb3Jfcj0nZGVmaW5lJworZF9zdHJmdGltZT0nZGVmaW5lJworZF9zdHJsY2F0PSd1bmRlZicKK2Rfc3RybGNweT0ndW5kZWYnCitkX3N0cnRvZD0nZGVmaW5lJworZF9zdHJ0b2w9J2RlZmluZScKK2Rfc3RydG9sZD0nZGVmaW5lJworZF9zdHJ0b2xsPSdkZWZpbmUnCitkX3N0cnRvcT0nZGVmaW5lJworZF9zdHJ0b3VsPSdkZWZpbmUnCitkX3N0cnRvdWxsPSdkZWZpbmUnCitkX3N0cnRvdXE9J2RlZmluZScKK2Rfc3RyeGZybT0nZGVmaW5lJworZF9zdWlkc2FmZT0ndW5kZWYnCitkX3N5bWxpbms9J2RlZmluZScKK2Rfc3lzY2FsbD0nZGVmaW5lJworZF9zeXNjYWxscHJvdG89J2RlZmluZScKK2Rfc3lzY29uZj0nZGVmaW5lJworZF9zeXNlcm5sc3Q9JycKK2Rfc3lzZXJybHN0PSdkZWZpbmUnCitkX3N5c3RlbT0nZGVmaW5lJworZF90Y2dldHBncnA9J2RlZmluZScKK2RfdGNzZXRwZ3JwPSdkZWZpbmUnCitkX3RlbGxkaXI9J2RlZmluZScKK2RfdGVsbGRpcnByb3RvPSdkZWZpbmUnCitkX3RnYW1tYT0nZGVmaW5lJworZF90aW1lPSdkZWZpbmUnCitkX3RpbWVnbT0nZGVmaW5lJworZF90aW1lcz0nZGVmaW5lJworZF90bV90bV9nbXRvZmY9J2RlZmluZScKK2RfdG1fdG1fem9uZT0nZGVmaW5lJworZF90bXBuYW1fcj0nZGVmaW5lJworZF90cnVuYz0nZGVmaW5lJworZF90cnVuY2F0ZT0nZGVmaW5lJworZF90cnVuY2w9J2RlZmluZScKK2RfdHR5bmFtZV9yPSdkZWZpbmUnCitkX3R6bmFtZT0nZGVmaW5lJworZF91MzJhbGlnbj0nZGVmaW5lJworZF91YWxhcm09J2RlZmluZScKK2RfdW1hc2s9J2RlZmluZScKK2RfdW5hbWU9J2RlZmluZScKK2RfdW5pb25fc2VtdW49J3VuZGVmJworZF91bm9yZGVyZWQ9J3VuZGVmJworZF91bnNldGVudj0nZGVmaW5lJworZF91c2xlZXA9J2RlZmluZScKK2RfdXNsZWVwcHJvdG89J2RlZmluZScKK2RfdXN0YXQ9J2RlZmluZScKK2RfdmVuZG9yYXJjaD0nZGVmaW5lJworZF92ZW5kb3JiaW49J2RlZmluZScKK2RfdmVuZG9ybGliPSdkZWZpbmUnCitkX3ZlbmRvcnNjcmlwdD0nZGVmaW5lJworZF92Zm9yaz0ndW5kZWYnCitkX3ZvaWRfY2xvc2VkaXI9J3VuZGVmJworZF92b2lkc2lnPSdkZWZpbmUnCitkX3ZvaWR0dHk9JycKK2Rfdm9sYXRpbGU9J2RlZmluZScKK2RfdnByaW50Zj0nZGVmaW5lJworZF92c25wcmludGY9J2RlZmluZScKK2Rfd2FpdDQ9J2RlZmluZScKK2Rfd2FpdHBpZD0nZGVmaW5lJworZF93Y3NjbXA9J2RlZmluZScKK2Rfd2NzdG9tYnM9J2RlZmluZScKK2Rfd2NzeGZybT0nZGVmaW5lJworZF93Y3RvbWI9J2RlZmluZScKK2Rfd3JpdGV2PSdkZWZpbmUnCitkX3hlbml4PSd1bmRlZicKK2RhdGU9J2RhdGUnCitkYl9oYXNodHlwZT0ndV9pbnQzMl90JworZGJfcHJlZml4dHlwZT0nc2l6ZV90JworZGJfdmVyc2lvbl9tYWpvcj0nJworZGJfdmVyc2lvbl9taW5vcj0nJworZGJfdmVyc2lvbl9wYXRjaD0nJworZGlyZW50cnl0eXBlPSdzdHJ1Y3QgZGlyZW50JworZGxleHQ9J3NvJworZGxzcmM9J2RsX2Rsb3Blbi54cycKK2RvdWJsZWtpbmQ9JzMnCitkb3VibGVzaXplPSc4JworZHJhbmQwMT0nUGVybF9kcmFuZDQ4KCknCitkcmFuZDQ4X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NUJworZHRyYWNlPScnCitkeW5hbWljX2V4dD0nQiBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ3dkIERhdGEvRHVtcGVyIERldmVsL1BQUG9ydCBEZXZlbC9QZWVrIERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBFbmNvZGUgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvR2xvYiBGaWx0ZXIvVXRpbC9DYWxsIEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vTGFuZ2luZm8gSU8gSVBDL1N5c1YgTGlzdC9VdGlsIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE5EQk1fRmlsZSBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgU0RCTV9GaWxlIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGltZS9IaVJlcyBUaW1lL1BpZWNlIFVuaWNvZGUvQ29sbGF0ZSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgYXJ5YmFzZSBhdHRyaWJ1dGVzIG1ybyByZSB0aHJlYWRzIHRocmVhZHMvc2hhcmVkJworZWFnYWluPSdFQUdBSU4nCitlYmNkaWM9J3VuZGVmJworZWNobz0nZWNobycKK2VncmVwPSdlZ3JlcCcKK2VtYWNzPScnCitlbmRncmVudF9yX3Byb3RvPScwJworZW5kaG9zdGVudF9yX3Byb3RvPScwJworZW5kbmV0ZW50X3JfcHJvdG89JzAnCitlbmRwcm90b2VudF9yX3Byb3RvPScwJworZW5kcHdlbnRfcl9wcm90bz0nMCcKK2VuZHNlcnZlbnRfcl9wcm90bz0nMCcKK2V1bmljZWZpeD0nOicKK2V4ZV9leHQ9JycKK2V4cHI9J2V4cHInCitleHRlbnNpb25zPSdCIENvbXByZXNzL1Jhdy9CemlwMiBDb21wcmVzcy9SYXcvWmxpYiBDd2QgRGF0YS9EdW1wZXIgRGV2ZWwvUFBQb3J0IERldmVsL1BlZWsgRGlnZXN0L01ENSBEaWdlc3QvU0hBIEVuY29kZSBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9HbG9iIEZpbHRlci9VdGlsL0NhbGwgSGFzaC9VdGlsIEhhc2gvVXRpbC9GaWVsZEhhc2ggSTE4Ti9MYW5naW5mbyBJTyBJUEMvU3lzViBMaXN0L1V0aWwgTUlNRS9CYXNlNjQgTWF0aC9CaWdJbnQvRmFzdENhbGMgTkRCTV9GaWxlIE9EQk1fRmlsZSBPcGNvZGUgUE9TSVggUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBTREJNX0ZpbGUgU29ja2V0IFN0b3JhYmxlIFN5cy9Ib3N0bmFtZSBTeXMvU3lzbG9nIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaW1lL0hpUmVzIFRpbWUvUGllY2UgVW5pY29kZS9Db2xsYXRlIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBhcnliYXNlIGF0dHJpYnV0ZXMgbXJvIHJlIHRocmVhZHMgdGhyZWFkcy9zaGFyZWQgQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29uZmlnL1BlcmwvViBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRHVtcHZhbHVlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSlNPTi9QUCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTWF0aC9CaWdJbnQgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5FWFQgTmV0L1BpbmcgUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0xvY2FsIFVuaWNvZGUvTm9ybWFsaXplIFhTTG9hZGVyIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgdmVyc2lvbicKK2V4dGVybl9DPSdleHRlcm4nCitleHRyYXM9JycKK2ZmbHVzaE5VTEw9J2RlZmluZScKK2ZmbHVzaGFsbD0ndW5kZWYnCitmaW5kPScnCitmaXJzdG1ha2VmaWxlPSdtYWtlZmlsZScKK2ZsZXg9JycKK2Zwb3NzaXplPScxNicKK2Zwb3N0eXBlPSdmcG9zX3QnCitmcmVldHlwZT0ndm9pZCcKK2Zyb209JzonCitmdWxsX2FyPSdhcicKK2Z1bGxfY3NoPSdjc2gnCitmdWxsX3NlZD0nc2VkJworZ2NjYW5zaXBlZGFudGljPScnCitnY2Nvc2FuZHZlcnM9JycKK2djY3ZlcnNpb249JzQuOS4yJworZ2V0Z3JlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldGdyZ2lkX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTQldSJworZ2V0Z3JuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnZXRob3N0YnlhZGRyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RzSVNCV1JFJworZ2V0aG9zdGJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUkUnCitnZXRob3N0ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1JFJworZ2V0bG9naW5fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQlcnCitnZXRuZXRieWFkZHJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfdUlTQldSRScKK2dldG5ldGJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUkUnCitnZXRuZXRlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUkUnCitnZXRwcm90b2J5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dldHByb3RvYnludW1iZXJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSVNCV1InCitnZXRwcm90b2VudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0cHdlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHB3bmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2V0cHd1aWRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNCV1InCitnZXRzZXJ2YnluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NDU0JXUicKK2dldHNlcnZieXBvcnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfSUNTQldSJworZ2V0c2VydmVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSJworZ2V0c3BuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnaWRmb3JtYXQ9JyJ1IicKK2dpZHNpZ249JzEnCitnaWRzaXplPSc0JworZ2lkdHlwZT0nZ2lkX3QnCitnbGlicHRoPSdARVhFQ1BSRUZJWEAvc2hsaWIgIEBCQVNFTElCRElSQCBATElCRElSQCBATElCRElSQC8zODYgQEJBU0VMSUJESVJAMzg2IEBFWEVDUFJFRklYQC9jY3NAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL3VjYmxpYiBARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgQEJBU0VMSUJESVJAIEBMSUJESVJAIEBFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCAnCitnbWFrZT0nZ21ha2UnCitnbXRpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX1NfVFMnCitnbnVsaWJjX3ZlcnNpb249JzIuMjEnCitncmVwPSdncmVwJworZ3JvdXBjYXQ9J2NhdCAvZXRjL2dyb3VwJworZ3JvdXBzdHlwZT0nZ2lkX3QnCitnemlwPSdnemlwJworaF9mY250bD0nZmFsc2UnCitoX3N5c2ZpbGU9J3RydWUnCitoaW50PSdyZWNvbW1lbmRlZCcKK2hvc3RjYXQ9J2NhdCAvZXRjL2hvc3RzJworaG9zdGdlbmVyYXRlPScnCitob3N0b3NuYW1lPScnCitob3N0cGVybD0nJworaHRtbDFkaXI9JyAnCitodG1sMWRpcmV4cD0nJworaHRtbDNkaXI9JyAnCitodG1sM2RpcmV4cD0nJworaTE2c2l6ZT0nMicKK2kxNnR5cGU9J3Nob3J0JworaTMyc2l6ZT0nNCcKK2kzMnR5cGU9J2ludCcKK2k2NHNpemU9JzgnCitpNjR0eXBlPSdsb25nJworaThzaXplPScxJworaTh0eXBlPSdzaWduZWQgY2hhcicKK2lfYXJwYWluZXQ9J2RlZmluZScKK2lfYXNzZXJ0PSdkZWZpbmUnCitpX2JmZD0nZGVmaW5lJworaV9ic2Rpb2N0bD0nJworaV9jcnlwdD0nZGVmaW5lJworaV9kYj0ndW5kZWYnCitpX2RibT0nZGVmaW5lJworaV9kaXJlbnQ9J2RlZmluZScKK2lfZGxmY249J2RlZmluZScKK2lfZXhlY2luZm89J2RlZmluZScKK2lfZmNudGw9J3VuZGVmJworaV9mZW52PSdkZWZpbmUnCitpX2Zsb2F0PSdkZWZpbmUnCitpX2ZwPSd1bmRlZicKK2lfZnBfY2xhc3M9J3VuZGVmJworaV9nZGJtPSd1bmRlZicKK2lfZ2RibV9uZGJtPSd1bmRlZicKK2lfZ2RibW5kYm09J2RlZmluZScKK2lfZ3JwPSdkZWZpbmUnCitpX2llZWVmcD0ndW5kZWYnCitpX2ludHR5cGVzPSdkZWZpbmUnCitpX2xhbmdpbmZvPSdkZWZpbmUnCitpX2xpYnV0aWw9J3VuZGVmJworaV9saW1pdHM9J2RlZmluZScKK2lfbG9jYWxlPSdkZWZpbmUnCitpX21hY2hjdGhyPSd1bmRlZicKK2lfbWFsbG9jPSdkZWZpbmUnCitpX21hbGxvY21hbGxvYz0ndW5kZWYnCitpX21hdGg9J2RlZmluZScKK2lfbWVtb3J5PSd1bmRlZicKK2lfbW50ZW50PSdkZWZpbmUnCitpX25kYm09J3VuZGVmJworaV9uZXRkYj0nZGVmaW5lJworaV9uZXRlcnJubz0ndW5kZWYnCitpX25ldGluZXR0Y3A9J2RlZmluZScKK2lfbmlpbj0nZGVmaW5lJworaV9wb2xsPSdkZWZpbmUnCitpX3Byb3Q9J3VuZGVmJworaV9wdGhyZWFkPSdkZWZpbmUnCitpX3B3ZD0nZGVmaW5lJworaV9xdWFkbWF0aD0ndW5kZWYnCitpX3JwY3N2Y2RibT0ndW5kZWYnCitpX3NndHR5PSd1bmRlZicKK2lfc2hhZG93PSdkZWZpbmUnCitpX3NvY2tzPSd1bmRlZicKK2lfc3RkYXJnPSdkZWZpbmUnCitpX3N0ZGJvb2w9J2RlZmluZScKK2lfc3RkZGVmPSdkZWZpbmUnCitpX3N0ZGludD0nZGVmaW5lJworaV9zdGRsaWI9J2RlZmluZScKK2lfc3RyaW5nPSdkZWZpbmUnCitpX3N1bm1hdGg9J3VuZGVmJworaV9zeXNhY2Nlc3M9J3VuZGVmJworaV9zeXNkaXI9J2RlZmluZScKK2lfc3lzZmlsZT0nZGVmaW5lJworaV9zeXNmaWxpbz0ndW5kZWYnCitpX3N5c2luPSd1bmRlZicKK2lfc3lzaW9jdGw9J2RlZmluZScKK2lfc3lzbG9nPSdkZWZpbmUnCitpX3N5c21tYW49J2RlZmluZScKK2lfc3lzbW9kZT0ndW5kZWYnCitpX3N5c21vdW50PSdkZWZpbmUnCitpX3N5c25kaXI9J3VuZGVmJworaV9zeXNwYXJhbT0nZGVmaW5lJworaV9zeXNwb2xsPSdkZWZpbmUnCitpX3N5c3Jlc3JjPSdkZWZpbmUnCitpX3N5c3NlY3J0PSd1bmRlZicKK2lfc3lzc2VsY3Q9J2RlZmluZScKK2lfc3lzc29ja2lvPSd1bmRlZicKK2lfc3lzc3RhdD0nZGVmaW5lJworaV9zeXNzdGF0ZnM9J2RlZmluZScKK2lfc3lzc3RhdHZmcz0nZGVmaW5lJworaV9zeXN0aW1lPSdkZWZpbmUnCitpX3N5c3RpbWVrPSd1bmRlZicKK2lfc3lzdGltZXM9J2RlZmluZScKK2lfc3lzdHlwZXM9J2RlZmluZScKK2lfc3lzdWlvPSdkZWZpbmUnCitpX3N5c3VuPSdkZWZpbmUnCitpX3N5c3V0c25hbWU9J2RlZmluZScKK2lfc3lzdmZzPSdkZWZpbmUnCitpX3N5c3dhaXQ9J2RlZmluZScKK2lfdGVybWlvPSd1bmRlZicKK2lfdGVybWlvcz0nZGVmaW5lJworaV90aW1lPSdkZWZpbmUnCitpX3VuaXN0ZD0nZGVmaW5lJworaV91c3RhdD0nZGVmaW5lJworaV91dGltZT0nZGVmaW5lJworaV92YWx1ZXM9J2RlZmluZScKK2lfdmFyYXJncz0ndW5kZWYnCitpX3Zhcmhkcj0nc3RkYXJnLmgnCitpX3Zmb3JrPSd1bmRlZicKK2lnbm9yZV92ZXJzaW9uZWRfc29saWJzPSd5JworaW5jX3ZlcnNpb25fbGlzdD0nICcKK2luY192ZXJzaW9uX2xpc3RfaW5pdD0nMCcKK2luY3BhdGg9JycKK2luZXdzPScnCitpbml0aWFsaW5zdGFsbGxvY2F0aW9uPSdAVVNSQklOQCcKK2luc3RhbGxhcmNobGliPSdATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbGJpbj0nQFVTUkJJTkAnCitpbnN0YWxsaHRtbDFkaXI9JycKK2luc3RhbGxodG1sM2Rpcj0nJworaW5zdGFsbG1hbjFkaXI9JycKK2luc3RhbGxtYW4zZGlyPScnCitpbnN0YWxscHJlZml4PSdARVhFQ1BSRUZJWEAnCitpbnN0YWxscHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitpbnN0YWxscHJpdmxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAnCitpbnN0YWxsc2NyaXB0PSdAVVNSQklOQCcKK2luc3RhbGxzaXRlYXJjaD0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsc2l0ZWJpbj0nQFVTUkJJTkAnCitpbnN0YWxsc2l0ZWh0bWwxZGlyPScnCitpbnN0YWxsc2l0ZWh0bWwzZGlyPScnCitpbnN0YWxsc2l0ZWxpYj0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworaW5zdGFsbHNpdGVtYW4xZGlyPScnCitpbnN0YWxsc2l0ZW1hbjNkaXI9JycKK2luc3RhbGxzaXRlc2NyaXB0PSdAVVNSQklOQCcKK2luc3RhbGxzdHlsZT0nbGliL3BlcmwnCitpbnN0YWxsdXNyYmlucGVybD0nZGVmaW5lJworaW5zdGFsbHZlbmRvcmFyY2g9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCitpbnN0YWxsdmVuZG9yYmluPSdAVVNSQklOQCcKK2luc3RhbGx2ZW5kb3JodG1sMWRpcj0nJworaW5zdGFsbHZlbmRvcmh0bWwzZGlyPScnCitpbnN0YWxsdmVuZG9ybGliPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK2luc3RhbGx2ZW5kb3JtYW4xZGlyPScnCitpbnN0YWxsdmVuZG9ybWFuM2Rpcj0nJworaW5zdGFsbHZlbmRvcnNjcmlwdD0nQFVTUkJJTkAnCitpbnRzaXplPSc0JworaXNzeW1saW5rPSd0ZXN0IC1oJworaXZkZm9ybWF0PScibGQiJworaXZzaXplPSc4JworaXZ0eXBlPSdsb25nJwora25vd25fZXh0ZW5zaW9ucz0nQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQiBCL0RlYnVnIENQQU4gQ1BBTi9NZXRhIENQQU4vTWV0YS9SZXF1aXJlbWVudHMgQ1BBTi9NZXRhL1lBTUwgQ2FycCBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ29uZmlnL1BlcmwvViBDd2QgREJfRmlsZSBEYXRhL0R1bXBlciBEZXZlbC9QUFBvcnQgRGV2ZWwvUGVlayBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRGlnZXN0L01ENSBEaWdlc3QvU0hBIER1bXB2YWx1ZSBFbmNvZGUgRW52IEVycm5vIEV4cG9ydGVyIEV4dFV0aWxzL0NCdWlsZGVyIEV4dFV0aWxzL0NvbW1hbmQgRXh0VXRpbHMvQ29uc3RhbnQgRXh0VXRpbHMvSW5zdGFsbCBFeHRVdGlscy9NYWtlTWFrZXIgRXh0VXRpbHMvTWFuaWZlc3QgRXh0VXRpbHMvTWluaXBlcmwgRXh0VXRpbHMvUGFyc2VYUyBGY250bCBGaWxlL0Rvc0dsb2IgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9HbG9iIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgRmlsdGVyL1V0aWwvQ2FsbCBHREJNX0ZpbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIEkxOE4vTGFuZ2luZm8gSU8gSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSVBDL1N5c1YgSlNPTi9QUCBMaXN0L1V0aWwgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBOREJNX0ZpbGUgTkVYVCBOZXQvUGluZyBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL2VuY29kaW5nIFBlcmxJTy9tbWFwIFBlcmxJTy9zY2FsYXIgUGVybElPL3ZpYSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTREJNX0ZpbGUgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUZXJtL0FOU0lDb2xvciBUZXJtL0NhcCBUZXJtL0NvbXBsZXRlIFRlcm0vUmVhZExpbmUgVGVzdCBUZXN0L0hhcm5lc3MgVGVzdC9TaW1wbGUgVGV4dC9BYmJyZXYgVGV4dC9CYWxhbmNlZCBUZXh0L1BhcnNlV29yZHMgVGV4dC9UYWJzIFRocmVhZC9RdWV1ZSBUaHJlYWQvU2VtYXBob3JlIFRpZS9GaWxlIFRpZS9IYXNoL05hbWVkQ2FwdHVyZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0hpUmVzIFRpbWUvTG9jYWwgVGltZS9QaWVjZSBVbmljb2RlL0NvbGxhdGUgVW5pY29kZS9Ob3JtYWxpemUgVk1TL0RDTHN5bSBWTVMvRmlsZXNwZWMgVk1TL1N0ZGlvIFdpbjMyIFdpbjMyQVBJL0ZpbGUgV2luMzJDT1JFIFhTL0FQSXRlc3QgWFMvVHlwZW1hcCBYU0xvYWRlciBhcnliYXNlIGF0dHJpYnV0ZXMgYXV0b2RpZSBhdXRvdXNlIGJhc2UgYmlnbnVtIGNvbnN0YW50IGVuY29kaW5nL3dhcm5pbmdzIGV4cGVyaW1lbnRhbCBpZiBsaWIgbGlibmV0IG1ybyBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgcmUgdGhyZWFkcyB0aHJlYWRzL3NoYXJlZCB2ZXJzaW9uICcKK2tzaD0nJworbGQ9J2djYycKK2xkX2Nhbl9zY3JpcHQ9J2RlZmluZScKK2xkZGxmbGFncz0nLXNoYXJlZCAtTzInCitsZGZsYWdzPScnCitsZGZsYWdzX3VzZWxhcmdlZmlsZXM9JycKK2xkbGlicHRobmFtZT0nTERfTElCUkFSWV9QQVRIJworbGVzcz0nbGVzcycKK2xpYl9leHQ9Jy5hJworbGliYz0nbGliYy0yLjIxLnNvJworbGlicGVybD0nbGlicGVybC5zbycKK2xpYnB0aD0nQExJQkRJUkAgQEJBU0VMSUJESVJAJworbGlicz0nLWxwdGhyZWFkIC1sbnNsIC1sZ2RibSAtbGRiIC1sZGwgLWxtIC1sY3J5cHQgLWx1dGlsIC1sYyAtbGdkYm1fY29tcGF0JworbGlic2RpcnM9JyBATElCRElSQCcKK2xpYnNmaWxlcz0nIGxpYnB0aHJlYWQuc28gbGlibnNsLnNvIGxpYmdkYm0uc28gbGliZGIuc28gbGliZGwuc28gbGlibS5zbyBsaWJjcnlwdC5zbyBsaWJ1dGlsLnNvIGxpYmMuc28gbGliZ2RibV9jb21wYXQuc28nCitsaWJzZm91bmQ9JyBATElCRElSQC9saWJwdGhyZWFkLnNvIEBMSUJESVJAL2xpYm5zbC5zbyBATElCRElSQC9saWJnZGJtLnNvIEBMSUJESVJAL2xpYmRiLnNvIEBMSUJESVJAL2xpYmRsLnNvIEBMSUJESVJAL2xpYm0uc28gQExJQkRJUkAvbGliY3J5cHQuc28gQExJQkRJUkAvbGlidXRpbC5zbyBATElCRElSQC9saWJjLnNvIEBMSUJESVJAL2xpYmdkYm1fY29tcGF0LnNvJworbGlic3BhdGg9JyBATElCRElSQCBAQkFTRUxJQkRJUkAnCitsaWJzd2FudGVkPSdjbCBwdGhyZWFkIHNvY2tldCBpbmV0IG5zbCBubSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIEJTRCBnZGJtX2NvbXBhdCcKK2xpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0nJworbGluZT0nJworbGludD0nJworbGtmbGFncz0nJworbG49J2xuJworbG5zPScvYmluL2xuIC1zJworbG9jYWx0aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19TX1RTJworbG9jaW5jcHRoPSdARVhFQ1BSRUZJWEAvbG9jYWwvaW5jbHVkZSAvb3B0L2xvY2FsL2luY2x1ZGUgQEVYRUNQUkVGSVhAL2dudS9pbmNsdWRlIC9vcHQvZ251L2luY2x1ZGUgQEVYRUNQUkVGSVhAL0dOVS9pbmNsdWRlIC9vcHQvR05VL2luY2x1ZGUnCitsb2NsaWJwdGg9J0BFWEVDUFJFRklYQC9sb2NhbEBCQVNFTElCRElSQCAvb3B0L2xvY2FsQEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC9nbnVAQkFTRUxJQkRJUkAgL29wdC9nbnVAQkFTRUxJQkRJUkAgQEVYRUNQUkVGSVhAL0dOVUBCQVNFTElCRElSQCAvb3B0L0dOVUBCQVNFTElCRElSQCcKK2xvbmdkYmxraW5kPSczJworbG9uZ2RibHNpemU9JzE2JworbG9uZ2xvbmdzaXplPSc4JworbG9uZ3NpemU9JzgnCitscD0nJworbHByPScnCitscz0nbHMnCitsc2Vla3NpemU9JzgnCitsc2Vla3R5cGU9J29mZl90JworbWFpbD0nJworbWFpbHg9JycKK21ha2U9J21ha2UnCittYWtlX3NldF9tYWtlPScjJworbWFsbG9jb2JqPScnCittYWxsb2NzcmM9JycKK21hbGxvY3R5cGU9J3ZvaWQgKicKK21hbjFkaXI9JyAnCittYW4xZGlyZXhwPScnCittYW4xZXh0PScwJworbWFuM2Rpcj0nICcKK21hbjNkaXJleHA9JycKK21hbjNleHQ9JzAnCittaXBzX3R5cGU9JycKK21pc3RydXN0bm09JycKK21rZGlyPSdta2RpcicKK21tYXB0eXBlPSd2b2lkIConCittb2RldHlwZT0nbW9kZV90JworbW9yZT0nbW9yZScKK211bHRpYXJjaD0ndW5kZWYnCittdj0nJworbXlhcmNobmFtZT0nQEFSQ0hAJworbXlkb21haW49Jy5sb2NhbGRvbWFpbicKK215aG9zdG5hbWU9J2xvY2FsaG9zdCcKK215dW5hbWU9J2xpbnV4IHFlbXV4ODYtNjQgMy4xOS41LXlvY3RvLXN0YW5kYXJkICMxIHNtcCBwcmVlbXB0IHR1ZSBqdW4gMTYgMDA6Mjg6MTcgcGR0IDIwMTUgeDg2XzY0IGdudWxpbnV4ICcKK249Jy1uJworbmVlZF92YV9jb3B5PSdkZWZpbmUnCituZXRkYl9obGVuX3R5cGU9J3NpemVfdCcKK25ldGRiX2hvc3RfdHlwZT0nY2hhciAqJworbmV0ZGJfbmFtZV90eXBlPSdjb25zdCBjaGFyIConCituZXRkYl9uZXRfdHlwZT0naW5fYWRkcl90Jworbm09J25tJworbm1fb3B0PScnCitubV9zb19vcHQ9Jy0tZHluYW1pYycKK25vbnhzX2V4dD0nQXJjaGl2ZS9UYXIgQXR0cmlidXRlL0hhbmRsZXJzIEF1dG9Mb2FkZXIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29uZmlnL1BlcmwvViBEZXZlbC9TZWxmU3R1YmJlciBEaWdlc3QgRHVtcHZhbHVlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmlsZS9GZXRjaCBGaWxlL0ZpbmQgRmlsZS9QYXRoIEZpbGUvVGVtcCBGaWxlQ2FjaGUgRmlsdGVyL1NpbXBsZSBHZXRvcHQvTG9uZyBIVFRQL1RpbnkgSTE4Ti9Db2xsYXRlIEkxOE4vTGFuZ1RhZ3MgSU8vQ29tcHJlc3MgSU8vU29ja2V0L0lQIElPL1psaWIgSVBDL0NtZCBJUEMvT3BlbjMgSlNPTi9QUCBMb2NhbGUvQ29kZXMgTG9jYWxlL01ha2V0ZXh0IExvY2FsZS9NYWtldGV4dC9TaW1wbGUgTWF0aC9CaWdJbnQgTWF0aC9CaWdSYXQgTWF0aC9Db21wbGV4IE1lbW9pemUgTW9kdWxlL0NvcmVMaXN0IE1vZHVsZS9Mb2FkIE1vZHVsZS9Mb2FkL0NvbmRpdGlvbmFsIE1vZHVsZS9Mb2FkZWQgTW9kdWxlL01ldGFkYXRhIE5FWFQgTmV0L1BpbmcgUGFyYW1zL0NoZWNrIFBhcnNlL0NQQU4vTWV0YSBQZXJsL09TVHlwZSBQZXJsSU8vdmlhL1F1b3RlZFByaW50IFBvZC9DaGVja2VyIFBvZC9Fc2NhcGVzIFBvZC9GdW5jdGlvbnMgUG9kL0h0bWwgUG9kL1BhcnNlciBQb2QvUGVybGRvYyBQb2QvU2ltcGxlIFBvZC9Vc2FnZSBTYWZlIFNlYXJjaC9EaWN0IFNlbGZMb2FkZXIgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvTWVtb2l6ZSBUaWUvUmVmSGFzaCBUaW1lL0xvY2FsIFVuaWNvZGUvTm9ybWFsaXplIFhTTG9hZGVyIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBwYXJlbnQgcGVybGZhcSBwb2RsYXRvcnMgdmVyc2lvbicKK25yb2ZmPSducm9mZicKK252RVVmb3JtYXQ9JyJFIicKK252RlVmb3JtYXQ9JyJGIicKK252R1Vmb3JtYXQ9JyJHIicKK252X292ZXJmbG93c19pbnRlZ2Vyc19hdD0nMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMjU2LjAqMi4wKjIuMCoyLjAqMi4wKjIuMCcKK252X3ByZXNlcnZlc191dl9iaXRzPSc1MycKK252ZWZvcm1hdD0nImUiJworbnZmZm9ybWF0PSciZiInCitudmdmb3JtYXQ9JyJnIicKK252c2l6ZT0nOCcKK252dHlwZT0nZG91YmxlJworb19ub25ibG9jaz0nT19OT05CTE9DSycKK29ial9leHQ9Jy5vJworb2xkX3B0aHJlYWRfY3JlYXRlX2pvaW5hYmxlPScnCitvcHRpbWl6ZT0nLU8yJworb3JkZXJsaWI9J2ZhbHNlJworb3NuYW1lPSdsaW51eCcKK29zdmVycz0nMy4xOS41LXlvY3RvLXN0YW5kYXJkJworb3RoZXJsaWJkaXJzPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK3BhY2thZ2U9J3BlcmwnCitwYWdlcj0nL3Vzci9iaW4vbGVzcyAtaXNyJworcGFzc2NhdD0nY2F0IC9ldGMvcGFzc3dkJworcGF0Y2hsZXZlbD0nMjInCitwYXRoX3NlcD0nOicKK3Blcmw1PSdAVVNSQklOQC9wZXJsJworcGVybD0ncGVybCcKK3BlcmxfcGF0Y2hsZXZlbD0nJworcGVybF9zdGF0aWNfaW5saW5lPSdzdGF0aWMgX19pbmxpbmVfXycKK3BlcmxhZG1pbj0ncm9vdEBsb2NhbGhvc3QnCitwZXJsbGlicz0nLWxwdGhyZWFkIC1sbnNsIC1sZGwgLWxtIC1sY3J5cHQgLWx1dGlsIC1sYycKK3BlcmxwYXRoPSdAVVNSQklOQC9wZXJsJworcGc9J3BnJworcGhvc3RuYW1lPScnCitwaWR0eXBlPSdwaWRfdCcKK3BsaWJwdGg9J0BMSUJESVJAIEBCQVNFTElCRElSQCcKK3BtYWtlPScnCitwcj0nJworcHJlZml4PSdARVhFQ1BSRUZJWEAnCitwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK3ByaXZsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworcHJpdmxpYmV4cD0nQExJQkRJUkAvcGVybC81LjIyLjAnCitwcm9jc2VsZmV4ZT0nIi9wcm9jL3NlbGYvZXhlIicKK3Byb3RvdHlwZT0nZGVmaW5lJworcHRyc2l6ZT0nOCcKK3F1YWRraW5kPScyJworcXVhZHR5cGU9J2xvbmcnCityYW5kYml0cz0nNDgnCityYW5kZnVuYz0nUGVybF9kcmFuZDQ4JworcmFuZG9tX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1N0JworcmFuZHNlZWR0eXBlPSdVMzInCityYW5saWI9JzonCityZF9ub2RhdGE9Jy0xJworcmVhZGRpcjY0X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTUicKK3JlYWRkaXJfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFNSJworcmV2aXNpb249JzUnCitybT0ncm0nCitybV90cnk9Jy9iaW4vcm0gLWYgdHJ5IHRyeSBhLm91dCAub3V0IHRyeS5bY2hvXSB0cnkuLm8gY29yZSBjb3JlLnRyeSogdHJ5LmNvcmUqJworcm1haWw9JycKK3J1bj0nJworcnVubm09J2ZhbHNlJworc0dNVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0dNVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NMT0NBTFRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NMT0NBTFRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzUFJJRVVsZGJsPSciTEUiJworc1BSSUZVbGRibD0nIkxGIicKK3NQUklHVWxkYmw9JyJMRyInCitzUFJJWFU2ND0nImxYIicKK3NQUklkNjQ9JyJsZCInCitzUFJJZWxkYmw9JyJMZSInCitzUFJJZmxkYmw9JyJMZiInCitzUFJJZ2xkYmw9JyJMZyInCitzUFJJaTY0PScibGkiJworc1BSSW82ND0nImxvIicKK3NQUkl1NjQ9JyJsdSInCitzUFJJeDY0PScibHgiJworc1NDTmZsZGJsPSciTGYiJworc2NoZWRfeWllbGQ9J3NjaGVkX3lpZWxkKCknCitzY3JpcHRkaXI9J0BVU1JCSU5AJworc2NyaXB0ZGlyZXhwPSdAVVNSQklOQCcKK3NlZD0nc2VkJworc2VlZGZ1bmM9J1BlcmxfZHJhbmQ0OF9pbml0Jworc2VsZWN0bWluYml0cz0nNjQnCitzZWxlY3R0eXBlPSdmZF9zZXQgKicKK3NlbmRtYWlsPScnCitzZXRncmVudF9yX3Byb3RvPScwJworc2V0aG9zdGVudF9yX3Byb3RvPScwJworc2V0bG9jYWxlX3JfcHJvdG89JzAnCitzZXRuZXRlbnRfcl9wcm90bz0nMCcKK3NldHByb3RvZW50X3JfcHJvdG89JzAnCitzZXRwd2VudF9yX3Byb3RvPScwJworc2V0c2VydmVudF9yX3Byb3RvPScwJworc2g9Jy9iaW4vc2gnCitzaGFyPScnCitzaGFycGJhbmc9JyMhJworc2htYXR0eXBlPSd2b2lkIConCitzaG9ydHNpemU9JzInCitzaHJwZW52PScnCitzaHNoYXJwPSd0cnVlJworc2lnX2NvdW50PSc2NScKK3NpZ19uYW1lPSdaRVJPIEhVUCBJTlQgUVVJVCBJTEwgVFJBUCBBQlJUIEJVUyBGUEUgS0lMTCBVU1IxIFNFR1YgVVNSMiBQSVBFIEFMUk0gVEVSTSBTVEtGTFQgQ0hMRCBDT05UIFNUT1AgVFNUUCBUVElOIFRUT1UgVVJHIFhDUFUgWEZTWiBWVEFMUk0gUFJPRiBXSU5DSCBJTyBQV1IgU1lTIE5VTTMyIE5VTTMzIFJUTUlOIE5VTTM1IE5VTTM2IE5VTTM3IE5VTTM4IE5VTTM5IE5VTTQwIE5VTTQxIE5VTTQyIE5VTTQzIE5VTTQ0IE5VTTQ1IE5VTTQ2IE5VTTQ3IE5VTTQ4IE5VTTQ5IE5VTTUwIE5VTTUxIE5VTTUyIE5VTTUzIE5VTTU0IE5VTTU1IE5VTTU2IE5VTTU3IE5VTTU4IE5VTTU5IE5VTTYwIE5VTTYxIE5VTTYyIE5VTTYzIFJUTUFYIElPVCBDTEQgUE9MTCBVTlVTRUQgJworc2lnX25hbWVfaW5pdD0nIlpFUk8iLCAiSFVQIiwgIklOVCIsICJRVUlUIiwgIklMTCIsICJUUkFQIiwgIkFCUlQiLCAiQlVTIiwgIkZQRSIsICJLSUxMIiwgIlVTUjEiLCAiU0VHViIsICJVU1IyIiwgIlBJUEUiLCAiQUxSTSIsICJURVJNIiwgIlNUS0ZMVCIsICJDSExEIiwgIkNPTlQiLCAiU1RPUCIsICJUU1RQIiwgIlRUSU4iLCAiVFRPVSIsICJVUkciLCAiWENQVSIsICJYRlNaIiwgIlZUQUxSTSIsICJQUk9GIiwgIldJTkNIIiwgIklPIiwgIlBXUiIsICJTWVMiLCAiTlVNMzIiLCAiTlVNMzMiLCAiUlRNSU4iLCAiTlVNMzUiLCAiTlVNMzYiLCAiTlVNMzciLCAiTlVNMzgiLCAiTlVNMzkiLCAiTlVNNDAiLCAiTlVNNDEiLCAiTlVNNDIiLCAiTlVNNDMiLCAiTlVNNDQiLCAiTlVNNDUiLCAiTlVNNDYiLCAiTlVNNDciLCAiTlVNNDgiLCAiTlVNNDkiLCAiTlVNNTAiLCAiTlVNNTEiLCAiTlVNNTIiLCAiTlVNNTMiLCAiTlVNNTQiLCAiTlVNNTUiLCAiTlVNNTYiLCAiTlVNNTciLCAiTlVNNTgiLCAiTlVNNTkiLCAiTlVNNjAiLCAiTlVNNjEiLCAiTlVNNjIiLCAiTlVNNjMiLCAiUlRNQVgiLCAiSU9UIiwgIkNMRCIsICJQT0xMIiwgIlVOVVNFRCIsIDAnCitzaWdfbnVtPScwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDM4IDM5IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDQ4IDQ5IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzIDY0IDYgMTcgMjkgMzEgJworc2lnX251bV9pbml0PScwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNiwgMTcsIDI5LCAzMSwgMCcKK3NpZ19zaXplPSc2OScKK3NpZ25hbF90PSd2b2lkJworc2l0ZWFyY2g9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworc2l0ZWFyY2hleHA9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworc2l0ZWJpbj0nQFVTUkJJTkAnCitzaXRlYmluZXhwPSdAVVNSQklOQCcKK3NpdGVodG1sMWRpcj0nJworc2l0ZWh0bWwxZGlyZXhwPScnCitzaXRlaHRtbDNkaXI9JycKK3NpdGVodG1sM2RpcmV4cD0nJworc2l0ZWxpYj0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwvNS4yMi4wJworc2l0ZWxpYl9zdGVtPSdATElCRElSQC9wZXJsL3NpdGVfcGVybCcKK3NpdGVsaWJleHA9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK3NpdGVtYW4xZGlyPScnCitzaXRlbWFuMWRpcmV4cD0nJworc2l0ZW1hbjNkaXI9JycKK3NpdGVtYW4zZGlyZXhwPScnCitzaXRlcHJlZml4PSdARVhFQ1BSRUZJWEAnCitzaXRlcHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitzaXRlc2NyaXB0PSdAVVNSQklOQCcKK3NpdGVzY3JpcHRleHA9J0BVU1JCSU5AJworc2l6ZXNpemU9JzgnCitzaXpldHlwZT0nc2l6ZV90Jworc2xlZXA9JycKK3NtYWlsPScnCitzbz0nc28nCitzb2NrZXRoZHI9JycKK3NvY2tldGxpYj0nJworc29ja3NpemV0eXBlPSdzb2NrbGVuX3QnCitzb3J0PSdzb3J0Jworc3BhY2thZ2U9J1Blcmw1Jworc3BpdHNoZWxsPSdjYXQnCitzcmFuZDQ4X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0xTJworc3JhbmRvbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UUycKK3NyYz0nLicKK3NzaXpldHlwZT0nc3NpemVfdCcKK3N0X2lub19zaWduPScxJworc3RfaW5vX3NpemU9JzgnCitzdGFydHBlcmw9JyMhQFVTUkJJTkAvcGVybCcKK3N0YXJ0c2g9JyMhL2Jpbi9zaCcKK3N0YXRpY19leHQ9JyAnCitzdGRjaGFyPSdjaGFyJworc3RkaW9fYmFzZT0nKChmcCktPl9JT19yZWFkX2Jhc2UpJworc3RkaW9fYnVmc2l6PScoKGZwKS0+X0lPX3JlYWRfZW5kIC0gKGZwKS0+X0lPX3JlYWRfYmFzZSknCitzdGRpb19jbnQ9JygoZnApLT5fSU9fcmVhZF9lbmQgLSAoZnApLT5fSU9fcmVhZF9wdHIpJworc3RkaW9fZmlsYnVmPScnCitzdGRpb19wdHI9JygoZnApLT5fSU9fcmVhZF9wdHIpJworc3RkaW9fc3RyZWFtX2FycmF5PScnCitzdHJlcnJvcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9JQlcnCitzdHJpbmdzPSdASU5DTFVERURJUkAvc3RyaW5nLmgnCitzdWJtaXQ9JycKK3N1YnZlcnNpb249JzAnCitzeXNtYW49J0BFWEVDUFJFRklYQC9zaGFyZS9tYW4vbWFuMScKK3N5c3Jvb3Q9JycKK3RhaWw9JycKK3Rhcj0nJwordGFyZ2V0YXJjaD0nJwordGFyZ2V0ZGlyPScnCit0YXJnZXRlbnY9JycKK3RhcmdldGhvc3Q9JycKK3RhcmdldG1rZGlyPScnCit0YXJnZXRwb3J0PScnCit0YXJnZXRzaD0nL2Jpbi9zaCcKK3RibD0nJwordGVlPScnCit0ZXN0PSd0ZXN0JwordGltZWluY2w9J0BJTkNMVURFRElSQC9zeXMvdGltZS5oIEBJTkNMVURFRElSQC90aW1lLmggJwordGltZXR5cGU9J3RpbWVfdCcKK3RtcG5hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fQl9CJwordG89JzonCit0b3VjaD0ndG91Y2gnCit0cj0ndHInCit0cm5sPSdcbicKK3Ryb2ZmPScnCit0dHluYW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lCVycKK3UxNnNpemU9JzInCit1MTZ0eXBlPSd1bnNpZ25lZCBzaG9ydCcKK3UzMnNpemU9JzQnCit1MzJ0eXBlPSd1bnNpZ25lZCBpbnQnCit1NjRzaXplPSc4JwordTY0dHlwZT0ndW5zaWduZWQgbG9uZycKK3U4c2l6ZT0nMScKK3U4dHlwZT0ndW5zaWduZWQgY2hhcicKK3VpZGZvcm1hdD0nInUiJwordWlkc2lnbj0nMScKK3VpZHNpemU9JzQnCit1aWR0eXBlPSd1aWRfdCcKK3VuYW1lPSd1bmFtZScKK3VuaXE9J3VuaXEnCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1c2U1MDA1dGhyZWFkcz0ndW5kZWYnCit1c2U2NGJpdGFsbD0nZGVmaW5lJwordXNlNjRiaXRpbnQ9J2RlZmluZScKK3VzZWNiYWNrdHJhY2U9J3VuZGVmJwordXNlY3Jvc3Njb21waWxlPSdkZWZpbmUnCit1c2VkZXZlbD0ndW5kZWYnCit1c2VkbD0nZGVmaW5lJwordXNlZHRyYWNlPSd1bmRlZicKK3VzZWZhc3RzdGRpbz0ndW5kZWYnCit1c2VpdGhyZWFkcz0nZGVmaW5lJwordXNla2VybnByb2NwYXRobmFtZT0ndW5kZWYnCit1c2VsYXJnZWZpbGVzPSdkZWZpbmUnCit1c2Vsb25nZG91YmxlPSd1bmRlZicKK3VzZW1hbGxvY3dyYXA9J2RlZmluZScKK3VzZW1vcmViaXRzPSd1bmRlZicKK3VzZW11bHRpcGxpY2l0eT0nZGVmaW5lJwordXNlbXltYWxsb2M9J24nCit1c2VubT0nZmFsc2UnCit1c2Vuc2dldGV4ZWN1dGFibGVwYXRoPSd1bmRlZicKK3VzZW9wY29kZT0ndHJ1ZScKK3VzZXBlcmxpbz0nZGVmaW5lJwordXNlcG9zaXg9J3RydWUnCit1c2VxdWFkbWF0aD0ndW5kZWYnCit1c2VyZWVudHJhbnQ9J3VuZGVmJwordXNlcmVsb2NhdGFibGVpbmM9J3VuZGVmJwordXNlc2hycGxpYj0ndHJ1ZScKK3VzZXNpdGVjdXN0b21pemU9J3VuZGVmJwordXNlc29ja3M9J3VuZGVmJwordXNldGhyZWFkcz0nZGVmaW5lJwordXNldmVuZG9ycHJlZml4PSdkZWZpbmUnCit1c2V2ZXJzaW9uZWRhcmNobmFtZT0ndW5kZWYnCit1c2V2Zm9yaz0nZmFsc2UnCit1c3JpbmM9J0BJTkNMVURFRElSQCcKK3V1bmFtZT0nJwordXZYVWZvcm1hdD0nImxYIicKK3V2b2Zvcm1hdD0nImxvIicKK3V2c2l6ZT0nOCcKK3V2dHlwZT0ndW5zaWduZWQgbG9uZycKK3V2dWZvcm1hdD0nImx1IicKK3V2eGZvcm1hdD0nImx4IicKK3ZhcHJvdG89J2RlZmluZScKK3ZlbmRvcmFyY2g9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCit2ZW5kb3JhcmNoZXhwPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJwordmVuZG9yYmluPSdAVVNSQklOQCcKK3ZlbmRvcmJpbmV4cD0nQFVTUkJJTkAnCit2ZW5kb3JodG1sMWRpcj0nICcKK3ZlbmRvcmh0bWwxZGlyZXhwPScnCit2ZW5kb3JodG1sM2Rpcj0nICcKK3ZlbmRvcmh0bWwzZGlyZXhwPScnCit2ZW5kb3JsaWI9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJwordmVuZG9ybGliX3N0ZW09J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwnCit2ZW5kb3JsaWJleHA9J0BMSUJESVJAL3BlcmwvdmVuZG9yX3BlcmwvNS4yMi4wJwordmVuZG9ybWFuMWRpcj0nICcKK3ZlbmRvcm1hbjFkaXJleHA9JycKK3ZlbmRvcm1hbjNkaXI9JyAnCit2ZW5kb3JtYW4zZGlyZXhwPScnCit2ZW5kb3JwcmVmaXg9J0BFWEVDUFJFRklYQCcKK3ZlbmRvcnByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJwordmVuZG9yc2NyaXB0PSdAVVNSQklOQCcKK3ZlbmRvcnNjcmlwdGV4cD0nQFVTUkJJTkAnCit2ZXJzaW9uPSc1LjIyLjAnCit2ZXJzaW9uX3BhdGNobGV2ZWxfc3RyaW5nPSd2ZXJzaW9uIDIyIHN1YnZlcnNpb24gMCcKK3ZlcnNpb25vbmx5PSd1bmRlZicKK3ZpPScnCit4bGlicHRoPSdATElCRElSQC8zODYgQEJBU0VMSUJESVJAMzg2JworeWFjYz0neWFjYycKK3lhY2NmbGFncz0nJworemNhdD0nJworemlwPSd6aXAnCitQRVJMX1JFVklTSU9OPTUKK1BFUkxfVkVSU0lPTj0yMgorUEVSTF9TVUJWRVJTSU9OPTAKK1BFUkxfQVBJX1JFVklTSU9OPTUKK1BFUkxfQVBJX1ZFUlNJT049MjIKK1BFUkxfQVBJX1NVQlZFUlNJT049MAorUEVSTF9QQVRDSExFVkVMPScnCitQRVJMX0NPTkZJR19TSD10cnVlCis6IFZhcmlhYmxlcyBwcm9wYWdhdGVkIGZyb20gcHJldmlvdXMgY29uZmlnLnNoIGZpbGUuCitsaWJkYl9uZWVkc19wdGhyZWFkPSdOJworCisjIGZvciBUaW1lLUhpUmVzCitkX2Nsb2NrX25hbm9zbGVlcD0nZGVmaW5lJworZF9jbG9ja19nZXR0aW1lPSdkZWZpbmUnCitkX2Nsb2NrX2dldHJlcz0nZGVmaW5lJworZF9jbG9jaz0nZGVmaW5lJworZF9uYW5vc2xlZXA9J2RlZmluZScKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1OWEwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyCkBAIC0wLDAgKzEsMzggQEAKK2FsaWduYnl0ZXM9JzQnCitjZl90aW1lPSdUaHUgRGVjIDIzIDAzOjU3OjUxIFVUQyAyMDEwJworY3Bwc3ltYm9scz0nX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgX0dOVV9TT1VSQ0U9MSBfTEFSR0VGSUxFNjRfU09VUkNFPTEgX0xBUkdFRklMRV9TT1VSQ0U9MSBfUE9TSVhfQ19TT1VSQ0U9MjAwODA5TCBfUE9TSVhfU09VUkNFPTEgX1JFRU5UUkFOVD0xIF9YT1BFTl9TT1VSQ0U9NzAwIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSBfX0JJR0dFU1RfQUxJR05NRU5UX189MTYgX19DSEFSMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fQ0hBUjMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fQ0hBUl9CSVRfXz04IF9fREJMX0RFTk9STV9NSU5fXz0oKGRvdWJsZSk0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc3ZS0zMjRMKSBfX0RCTF9ESUdfXz0xNSBfX0RCTF9FUFNJTE9OX189KChkb3VibGUpMi4yMjA0NDYwNDkyNTAzMTMwODA4NWUtMTZMKSBfX0RCTF9IQVNfREVOT1JNX189MSBfX0RCTF9IQVNfSU5GSU5JVFlfXz0xIF9fREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fREJMX01BTlRfRElHX189NTMgX19EQkxfTUFYXzEwX0VYUF9fPTMwOCBfX0RCTF9NQVhfRVhQX189MTAyNCBfX0RCTF9NQVhfXz0oKGRvdWJsZSkxLjc5NzY5MzEzNDg2MjMxNTcwODE1ZSszMDhMKSBfX0RCTF9NSU5fMTBfRVhQX189KC0zMDcpIF9fREJMX01JTl9FWFBfXz0oLTEwMjEpIF9fREJMX01JTl9fPSgoZG91YmxlKTIuMjI1MDczODU4NTA3MjAxMzgzMDllLTMwOEwpIF9fREVDMTI4X0VQU0lMT05fXz0xRS0zM0RMIF9fREVDMTI4X01BTlRfRElHX189MzQgX19ERUMxMjhfTUFYX0VYUF9fPTYxNDUgX19ERUMxMjhfTUFYX189OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NERMIF9fREVDMTI4X01JTl9FWFBfXz0oLTYxNDIpIF9fREVDMTI4X01JTl9fPTFFLTYxNDNETCBfX0RFQzEyOF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDNETCBfX0RFQzMyX0VQU0lMT05fXz0xRS02REYgX19ERUMzMl9NQU5UX0RJR19fPTcgX19ERUMzMl9NQVhfRVhQX189OTcgX19ERUMzMl9NQVhfXz05Ljk5OTk5OUU5NkRGIF9fREVDMzJfTUlOX0VYUF9fPSgtOTQpIF9fREVDMzJfTUlOX189MUUtOTVERiBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMUUtOTVERiBfX0RFQzY0X0VQU0lMT05fXz0xRS0xNUREIF9fREVDNjRfTUFOVF9ESUdfXz0xNiBfX0RFQzY0X01BWF9FWFBfXz0zODUgX19ERUM2NF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OUUzODRERCBfX0RFQzY0X01JTl9FWFBfXz0oLTM4MikgX19ERUM2NF9NSU5fXz0xRS0zODNERCBfX0RFQzY0X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzREQgX19ERUNJTUFMX0JJRF9GT1JNQVRfXz0xIF9fREVDSU1BTF9ESUdfXz0yMSBfX0RFQ19FVkFMX01FVEhPRF9fPTIgX19FTEZfXz0xIF9fRklOSVRFX01BVEhfT05MWV9fPTAgX19GTFRfREVOT1JNX01JTl9fPTEuNDAxMjk4NDY0MzI0ODE3MDcwOTJlLTQ1RiBfX0ZMVF9ESUdfXz02IF9fRkxUX0VQU0lMT05fXz0xLjE5MjA5Mjg5NTUwNzgxMjUwMDAwZS03RiBfX0ZMVF9FVkFMX01FVEhPRF9fPTIgX19GTFRfSEFTX0RFTk9STV9fPTEgX19GTFRfSEFTX0lORklOSVRZX189MSBfX0ZMVF9IQVNfUVVJRVRfTkFOX189MSBfX0ZMVF9NQU5UX0RJR19fPTI0IF9fRkxUX01BWF8xMF9FWFBfXz0zOCBfX0ZMVF9NQVhfRVhQX189MTI4IF9fRkxUX01BWF9fPTMuNDAyODIzNDY2Mzg1Mjg4NTk4MTJlKzM4RiBfX0ZMVF9NSU5fMTBfRVhQX189KC0zNykgX19GTFRfTUlOX0VYUF9fPSgtMTI1KSBfX0ZMVF9NSU5fXz0xLjE3NTQ5NDM1MDgyMjI4NzUwNzk3ZS0zOEYgX19GTFRfUkFESVhfXz0yIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzE9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8yPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfND0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzg9MSBfX0dMSUJDX01JTk9SX189MTIgX19HTElCQ19fPTIgX19HTlVDX0dOVV9JTkxJTkVfXz0xIF9fR05VQ19NSU5PUl9fPTUgX19HTlVDX1BBVENITEVWRUxfXz0xIF9fR05VQ19fPTQgX19HTlVfTElCUkFSWV9fPTYgX19HWFhfQUJJX1ZFUlNJT049MTAwMiBfX0lOVDE2X0MoYyk9YyBfX0lOVDE2X01BWF9fPTMyNzY3IF9fSU5UMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlQzMl9DKGMpPWMgX19JTlQzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UMzJfVFlQRV9fPWludCBfX0lOVDY0X0MoYyk9Y0xMIF9fSU5UNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UNjRfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVDhfQyhjKT1jIF9fSU5UOF9NQVhfXz0xMjcgX19JTlQ4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRNQVhfQyhjKT1jTEwgX19JTlRNQVhfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UTUFYX1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRQVFJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVFBUUl9UWVBFX189aW50IF9fSU5UX0ZBU1QxNl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0ZBU1QxNl9UWVBFX189aW50IF9fSU5UX0ZBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0ZBU1QzMl9UWVBFX189aW50IF9fSU5UX0ZBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRfRkFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlRfRkFTVDhfTUFYX189MTI3IF9fSU5UX0ZBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTEVBU1QxNl9NQVhfXz0zMjc2NyBfX0lOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UX0xFQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9MRUFTVDMyX1RZUEVfXz1pbnQgX19JTlRfTEVBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19JTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UX0xFQVNUOF9NQVhfXz0xMjcgX19JTlRfTEVBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTUFYX189MjE0NzQ4MzY0NyBfX0xEQkxfREVOT1JNX01JTl9fPTMuNjQ1MTk5NTMxODgyNDc0NjAyNTNlLTQ5NTFMIF9fTERCTF9ESUdfXz0xOCBfX0xEQkxfRVBTSUxPTl9fPTEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TCBfX0xEQkxfSEFTX0RFTk9STV9fPTEgX19MREJMX0hBU19JTkZJTklUWV9fPTEgX19MREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fTERCTF9NQU5UX0RJR19fPTY0IF9fTERCTF9NQVhfMTBfRVhQX189NDkzMiBfX0xEQkxfTUFYX0VYUF9fPTE2Mzg0IF9fTERCTF9NQVhfXz0xLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTCBfX0xEQkxfTUlOXzEwX0VYUF9fPSgtNDkzMSkgX19MREJMX01JTl9FWFBfXz0oLTE2MzgxKSBfX0xEQkxfTUlOX189My4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkwgX19MT05HX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fTE9OR19NQVhfXz0yMTQ3NDgzNjQ3TCBfX1BSQUdNQV9SRURFRklORV9FWFROQU1FPTEgX19QVFJESUZGX01BWF9fPTIxNDc0ODM2NDcgX19QVFJESUZGX1RZUEVfXz1pbnQgX19SRUdJU1RFUl9QUkVGSVhfXz0gX19TQ0hBUl9NQVhfXz0xMjcgX19TSFJUX01BWF9fPTMyNzY3IF9fU0lHX0FUT01JQ19NQVhfXz0yMTQ3NDgzNjQ3IF9fU0lHX0FUT01JQ19NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fU0lHX0FUT01JQ19UWVBFX189aW50IF9fU0laRU9GX0RPVUJMRV9fPTggX19TSVpFT0ZfRkxPQVRfXz00IF9fU0laRU9GX0lOVF9fPTQgX19TSVpFT0ZfTE9OR19ET1VCTEVfXz0xMiBfX1NJWkVPRl9MT05HX0xPTkdfXz04IF9fU0laRU9GX0xPTkdfXz00IF9fU0laRU9GX1BPSU5URVJfXz00IF9fU0laRU9GX1BUUkRJRkZfVF9fPTQgX19TSVpFT0ZfU0hPUlRfXz0yIF9fU0laRU9GX1NJWkVfVF9fPTQgX19TSVpFT0ZfV0NIQVJfVF9fPTQgX19TSVpFT0ZfV0lOVF9UX189NCBfX1NJWkVfTUFYX189NDI5NDk2NzI5NVUgX19TSVpFX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fU1REQ19IT1NURURfXz0xIF9fU1REQ19fPTEgX19VSU5UMTZfQyhjKT1jIF9fVUlOVDE2X01BWF9fPTY1NTM1IF9fVUlOVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlQzMl9DKGMpPWNVIF9fVUlOVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVDY0X0MoYyk9Y1VMTCBfX1VJTlQ2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlQ2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlQ4X0MoYyk9YyBfX1VJTlQ4X01BWF9fPTI1NSBfX1VJTlQ4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRNQVhfQyhjKT1jVUxMIF9fVUlOVE1BWF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlRNQVhfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UUFRSX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVFBUUl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDE2X01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9GQVNUMTZfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfRkFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDhfTUFYX189MjU1IF9fVUlOVF9GQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UX0xFQVNUMTZfTUFYX189NjU1MzUgX19VSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9MRUFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDhfTUFYX189MjU1IF9fVUlOVF9MRUFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVVNFUl9MQUJFTF9QUkVGSVhfXz0gX19VU0VfQlNEPTEgX19VU0VfRklMRV9PRkZTRVQ2ND0xIF9fVVNFX0dOVT0xIF9fVVNFX0xBUkdFRklMRTY0PTEgX19VU0VfTEFSR0VGSUxFPTEgX19VU0VfTUlTQz0xIF9fVVNFX1BPU0lYMTk5MzA5PTEgX19VU0VfUE9TSVgxOTk1MDY9MSBfX1VTRV9QT1NJWDI9MSBfX1VTRV9QT1NJWD0xIF9fVVNFX1JFRU5UUkFOVD0xIF9fVVNFX1NWSUQ9MSBfX1VTRV9VTklYOTg9MSBfX1VTRV9YT1BFTj0xIF9fVVNFX1hPUEVOX0VYVEVOREVEPTEgX19WRVJTSU9OX189IjQuNS4xIiBfX1dDSEFSX01BWF9fPTIxNDc0ODM2NDdMIF9fV0NIQVJfTUlOX189KC0yMTQ3NDgzNjQ3TFwgLVwgMSkgX19XQ0hBUl9UWVBFX189bG9uZ1wgaW50IF9fV0lOVF9NQVhfXz00Mjk0OTY3Mjk1VSBfX1dJTlRfTUlOX189MFUgX19XSU5UX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fZ251X2xpbnV4X189MSBfX2kzODY9MSBfX2kzODZfXz0xIF9faTU4Nj0xIF9faTU4Nl9fPTEgX19saW51eD0xIF9fbGludXhfXz0xIF9fcGVudGl1bT0xIF9fcGVudGl1bV9fPTEgX190dW5lX2k1ODZfXz0xIF9fdHVuZV9wZW50aXVtX189MSBfX3VuaXg9MSBfX3VuaXhfXz0xIGkzODY9MSBsaW51eD0xIHVuaXg9MScKK2RfbnZfcHJlc2VydmVzX3V2PSdkZWZpbmUnCitkX3ByaW50Zl9mb3JtYXRfbnVsbD0nZGVmaW5lJworZF91MzJhbGlnbj0ndW5kZWYnCitnaWRmb3JtYXQ9JyJsdSInCitpMzJ0eXBlPSdsb25nJworaTY0dHlwZT0nbG9uZyBsb25nJworaXZzaXplPSc0JworbG9uZ2RibHNpemU9JzEyJworbG9uZ3NpemU9JzQnCitteXVuYW1lPSdsaW51eCBxZW11eDg2IDIuNi4zNy1yYzUteW9jdG8tc3RhbmRhcmQrICMxIHByZWVtcHQgbW9uIGRlYyAyMCAxNDoyMToyNyBwc3QgMjAxMCBpNjg2IGdudWxpbnV4ICcKK25lZWRfdmFfY29weT0ndW5kZWYnCituZXRkYl9ob3N0X3R5cGU9J2NvbnN0IHZvaWQgKicKK252X3ByZXNlcnZlc191dl9iaXRzPSczMicKK3B0cnNpemU9JzQnCitxdWFka2luZD0nMycKK3F1YWR0eXBlPSdsb25nIGxvbmcnCitzR01USU1FX21heD0nMjE0NzQ4MzY0NycKK3NHTVRJTUVfbWluPSctMjE0NzQ4MzY0OCcKK3NMT0NBTFRJTUVfbWF4PScyMTQ3NDgzNjQ3Jworc0xPQ0FMVElNRV9taW49Jy0yMTQ3NDgzNjQ4Jworc1BSSVhVNjQ9JyJMWCInCitzUFJJZDY0PSciTGQiJworc1BSSWk2ND0nIkxpIicKK3NQUklvNjQ9JyJMbyInCitzUFJJdTY0PSciTHUiJworc1BSSXg2ND0nIkx4IicKK3NlbGVjdG1pbmJpdHM9JzMyJworc2l6ZXNpemU9JzQnCit1MzJ0eXBlPSd1bnNpZ25lZCBsb25nJwordTY0dHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJwordWlkZm9ybWF0PScibHUiJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnCit1c2U2NGJpdGFsbD0ndW5kZWYnCit1c2U2NGJpdGludD0ndW5kZWYnCit1dnNpemU9JzQnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OWE5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzQzMjEnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyLWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzEyMzQnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjlkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NApAQCAtMCwwICsxLDM4IEBACithbGlnbmJ5dGVzPSc4JworY2ZfdGltZT0nVGh1IERlYyAyMyAwMjowNjo0MiBVVEMgMjAxMCcKK2NwcHN5bWJvbHM9J19GSUxFX09GRlNFVF9CSVRTPTY0IF9HTlVfU09VUkNFPTEgX0xBUkdFRklMRTY0X1NPVVJDRT0xIF9MQVJHRUZJTEVfU09VUkNFPTEgX0xQNjQ9MSBfUE9TSVhfQ19TT1VSQ0U9MjAwODA5TCBfUE9TSVhfU09VUkNFPTEgX1JFRU5UUkFOVD0xIF9YT1BFTl9TT1VSQ0U9NzAwIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSBfX0JJR0dFU1RfQUxJR05NRU5UX189MTYgX19DSEFSMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fQ0hBUjMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fQ0hBUl9CSVRfXz04IF9fREJMX0RFTk9STV9NSU5fXz0oKGRvdWJsZSk0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc3ZS0zMjRMKSBfX0RCTF9ESUdfXz0xNSBfX0RCTF9FUFNJTE9OX189KChkb3VibGUpMi4yMjA0NDYwNDkyNTAzMTMwODA4NWUtMTZMKSBfX0RCTF9IQVNfREVOT1JNX189MSBfX0RCTF9IQVNfSU5GSU5JVFlfXz0xIF9fREJMX0hBU19RVUlFVF9OQU5fXz0xIF9fREJMX01BTlRfRElHX189NTMgX19EQkxfTUFYXzEwX0VYUF9fPTMwOCBfX0RCTF9NQVhfRVhQX189MTAyNCBfX0RCTF9NQVhfXz0oKGRvdWJsZSkxLjc5NzY5MzEzNDg2MjMxNTcwODE1ZSszMDhMKSBfX0RCTF9NSU5fMTBfRVhQX189KC0zMDcpIF9fREJMX01JTl9FWFBfXz0oLTEwMjEpIF9fREJMX01JTl9fPSgoZG91YmxlKTIuMjI1MDczODU4NTA3MjAxMzgzMDllLTMwOEwpIF9fREVDMTI4X0VQU0lMT05fXz0xRS0zM0RMIF9fREVDMTI4X01BTlRfRElHX189MzQgX19ERUMxMjhfTUFYX0VYUF9fPTYxNDUgX19ERUMxMjhfTUFYX189OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NERMIF9fREVDMTI4X01JTl9FWFBfXz0oLTYxNDIpIF9fREVDMTI4X01JTl9fPTFFLTYxNDNETCBfX0RFQzEyOF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDNETCBfX0RFQzMyX0VQU0lMT05fXz0xRS02REYgX19ERUMzMl9NQU5UX0RJR19fPTcgX19ERUMzMl9NQVhfRVhQX189OTcgX19ERUMzMl9NQVhfXz05Ljk5OTk5OUU5NkRGIF9fREVDMzJfTUlOX0VYUF9fPSgtOTQpIF9fREVDMzJfTUlOX189MUUtOTVERiBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMUUtOTVERiBfX0RFQzY0X0VQU0lMT05fXz0xRS0xNUREIF9fREVDNjRfTUFOVF9ESUdfXz0xNiBfX0RFQzY0X01BWF9FWFBfXz0zODUgX19ERUM2NF9NQVhfXz05Ljk5OTk5OTk5OTk5OTk5OUUzODRERCBfX0RFQzY0X01JTl9FWFBfXz0oLTM4MikgX19ERUM2NF9NSU5fXz0xRS0zODNERCBfX0RFQzY0X1NVQk5PUk1BTF9NSU5fXz0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzREQgX19ERUNJTUFMX0JJRF9GT1JNQVRfXz0xIF9fREVDSU1BTF9ESUdfXz0yMSBfX0RFQ19FVkFMX01FVEhPRF9fPTIgX19FTEZfXz0xIF9fRklOSVRFX01BVEhfT05MWV9fPTAgX19GTFRfREVOT1JNX01JTl9fPTEuNDAxMjk4NDY0MzI0ODE3MDcwOTJlLTQ1RiBfX0ZMVF9ESUdfXz02IF9fRkxUX0VQU0lMT05fXz0xLjE5MjA5Mjg5NTUwNzgxMjUwMDAwZS03RiBfX0ZMVF9FVkFMX01FVEhPRF9fPTAgX19GTFRfSEFTX0RFTk9STV9fPTEgX19GTFRfSEFTX0lORklOSVRZX189MSBfX0ZMVF9IQVNfUVVJRVRfTkFOX189MSBfX0ZMVF9NQU5UX0RJR19fPTI0IF9fRkxUX01BWF8xMF9FWFBfXz0zOCBfX0ZMVF9NQVhfRVhQX189MTI4IF9fRkxUX01BWF9fPTMuNDAyODIzNDY2Mzg1Mjg4NTk4MTJlKzM4RiBfX0ZMVF9NSU5fMTBfRVhQX189KC0zNykgX19GTFRfTUlOX0VYUF9fPSgtMTI1KSBfX0ZMVF9NSU5fXz0xLjE3NTQ5NDM1MDgyMjI4NzUwNzk3ZS0zOEYgX19GTFRfUkFESVhfXz0yIF9fR0NDX0hBVkVfRFdBUkYyX0NGSV9BU009MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8xPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMj0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQ9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84PTEgX19HTElCQ19NSU5PUl9fPTEyIF9fR0xJQkNfXz0yIF9fR05VQ19HTlVfSU5MSU5FX189MSBfX0dOVUNfTUlOT1JfXz01IF9fR05VQ19QQVRDSExFVkVMX189MSBfX0dOVUNfXz00IF9fR05VX0xJQlJBUllfXz02IF9fR1hYX0FCSV9WRVJTSU9OPTEwMDIgX19JTlQxNl9DKGMpPWMgX19JTlQxNl9NQVhfXz0zMjc2NyBfX0lOVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UMzJfQyhjKT1jIF9fSU5UMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVDMyX1RZUEVfXz1pbnQgX19JTlQ2NF9DKGMpPWNMIF9fSU5UNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlQ2NF9UWVBFX189bG9uZ1wgaW50IF9fSU5UOF9DKGMpPWMgX19JTlQ4X01BWF9fPTEyNyBfX0lOVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVE1BWF9DKGMpPWNMIF9fSU5UTUFYX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UTUFYX1RZUEVfXz1sb25nXCBpbnQgX19JTlRQVFJfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRQVFJfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUMTZfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfRkFTVDE2X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDMyX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0ZBU1QzMl9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUOF9NQVhfXz0xMjcgX19JTlRfRkFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9MRUFTVDE2X01BWF9fPTMyNzY3IF9fSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCBpbnQgX19JTlRfTEVBU1QzMl9NQVhfXz0yMTQ3NDgzNjQ3IF9fSU5UX0xFQVNUMzJfVFlQRV9fPWludCBfX0lOVF9MRUFTVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9MRUFTVDhfTUFYX189MTI3IF9fSU5UX0xFQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX01BWF9fPTIxNDc0ODM2NDcgX19MREJMX0RFTk9STV9NSU5fXz0zLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUxTCBfX0xEQkxfRElHX189MTggX19MREJMX0VQU0lMT05fXz0xLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUwgX19MREJMX0hBU19ERU5PUk1fXz0xIF9fTERCTF9IQVNfSU5GSU5JVFlfXz0xIF9fTERCTF9IQVNfUVVJRVRfTkFOX189MSBfX0xEQkxfTUFOVF9ESUdfXz02NCBfX0xEQkxfTUFYXzEwX0VYUF9fPTQ5MzIgX19MREJMX01BWF9FWFBfXz0xNjM4NCBfX0xEQkxfTUFYX189MS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkwgX19MREJMX01JTl8xMF9FWFBfXz0oLTQ5MzEpIF9fTERCTF9NSU5fRVhQX189KC0xNjM4MSkgX19MREJMX01JTl9fPTMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMIF9fTE9OR19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0xPTkdfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19MUDY0X189MSBfX01NWF9fPTEgX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRT0xIF9fUFRSRElGRl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX1BUUkRJRkZfVFlQRV9fPWxvbmdcIGludCBfX1JFR0lTVEVSX1BSRUZJWF9fPSBfX1NDSEFSX01BWF9fPTEyNyBfX1NIUlRfTUFYX189MzI3NjcgX19TSUdfQVRPTUlDX01BWF9fPTIxNDc0ODM2NDcgX19TSUdfQVRPTUlDX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19TSUdfQVRPTUlDX1RZUEVfXz1pbnQgX19TSVpFT0ZfRE9VQkxFX189OCBfX1NJWkVPRl9GTE9BVF9fPTQgX19TSVpFT0ZfSU5UX189NCBfX1NJWkVPRl9MT05HX0RPVUJMRV9fPTE2IF9fU0laRU9GX0xPTkdfTE9OR19fPTggX19TSVpFT0ZfTE9OR19fPTggX19TSVpFT0ZfUE9JTlRFUl9fPTggX19TSVpFT0ZfUFRSRElGRl9UX189OCBfX1NJWkVPRl9TSE9SVF9fPTIgX19TSVpFT0ZfU0laRV9UX189OCBfX1NJWkVPRl9XQ0hBUl9UX189NCBfX1NJWkVPRl9XSU5UX1RfXz00IF9fU0laRV9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fU0laRV9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1NTRTJfTUFUSF9fPTEgX19TU0UyX189MSBfX1NTRV9NQVRIX189MSBfX1NTRV9fPTEgX19TVERDX0hPU1RFRF9fPTEgX19TVERDX189MSBfX1VJTlQxNl9DKGMpPWMgX19VSU5UMTZfTUFYX189NjU1MzUgX19VSU5UMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVDMyX0MoYyk9Y1UgX19VSU5UMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UMzJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UNjRfQyhjKT1jVUwgX19VSU5UNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlQ2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlQ4X0MoYyk9YyBfX1VJTlQ4X01BWF9fPTI1NSBfX1VJTlQ4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VJTlRNQVhfQyhjKT1jVUwgX19VSU5UTUFYX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UTUFYX1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVFBUUl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVFBUUl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDE2X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1QxNl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDMyX01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1QzMl9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDhfTUFYX189MjU1IF9fVUlOVF9GQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UX0xFQVNUMTZfTUFYX189NjU1MzUgX19VSU5UX0xFQVNUMTZfVFlQRV9fPXNob3J0XCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVF9MRUFTVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0xFQVNUOF9NQVhfXz0yNTUgX19VSU5UX0xFQVNUOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VU0VSX0xBQkVMX1BSRUZJWF9fPSBfX1VTRV9CU0Q9MSBfX1VTRV9GSUxFX09GRlNFVDY0PTEgX19VU0VfR05VPTEgX19VU0VfTEFSR0VGSUxFNjQ9MSBfX1VTRV9MQVJHRUZJTEU9MSBfX1VTRV9NSVNDPTEgX19VU0VfUE9TSVgxOTkzMDk9MSBfX1VTRV9QT1NJWDE5OTUwNj0xIF9fVVNFX1BPU0lYMj0xIF9fVVNFX1BPU0lYPTEgX19VU0VfUkVFTlRSQU5UPTEgX19VU0VfU1ZJRD0xIF9fVVNFX1VOSVg5OD0xIF9fVVNFX1hPUEVOPTEgX19VU0VfWE9QRU5fRVhURU5ERUQ9MSBfX1ZFUlNJT05fXz0iNC41LjEiIF9fV0NIQVJfTUFYX189MjE0NzQ4MzY0NyBfX1dDSEFSX01JTl9fPSgtMjE0NzQ4MzY0N1wgLVwgMSkgX19XQ0hBUl9UWVBFX189aW50IF9fV0lOVF9NQVhfXz00Mjk0OTY3Mjk1VSBfX1dJTlRfTUlOX189MFUgX19XSU5UX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fYW1kNjQ9MSBfX2FtZDY0X189MSBfX2dudV9saW51eF9fPTEgX19rOD0xIF9fazhfXz0xIF9fbGludXg9MSBfX2xpbnV4X189MSBfX3VuaXg9MSBfX3VuaXhfXz0xIF9feDg2XzY0PTEgX194ODZfNjRfXz0xIGxpbnV4PTEgdW5peD0xJworZF9udl9wcmVzZXJ2ZXNfdXY9J3VuZGVmJworZF9wcmludGZfZm9ybWF0X251bGw9J3VuZGVmJworZF91MzJhbGlnbj0nZGVmaW5lJworZ2lkZm9ybWF0PScidSInCitpMzJ0eXBlPSdpbnQnCitpNjR0eXBlPSdsb25nJworaXZzaXplPSc4JworbG9uZ2RibHNpemU9JzE2JworbG9uZ3NpemU9JzgnCitteXVuYW1lPSdsaW51eCBxZW11eDg2LTY0IDIuNi4zNy1yYzUteW9jdG8tc3RhbmRhcmQrICMxIHNtcCBwcmVlbXB0IG1vbiBkZWMgMjAgMTc6MTk6NTAgcHN0IDIwMTAgeDg2XzY0IGdudWxpbnV4ICcKK25lZWRfdmFfY29weT0nZGVmaW5lJworbmV0ZGJfaG9zdF90eXBlPSdjaGFyIConCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nNTMnCitwdHJzaXplPSc4JworcXVhZGtpbmQ9JzInCitxdWFkdHlwZT0nbG9uZycKK3NHTVRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NHTVRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzTE9DQUxUSU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzTE9DQUxUSU1FX21pbj0nLTYyMTY3MjE5MjAwJworc1BSSVhVNjQ9JyJsWCInCitzUFJJZDY0PScibGQiJworc1BSSWk2ND0nImxpIicKK3NQUklvNjQ9JyJsbyInCitzUFJJdTY0PScibHUiJworc1BSSXg2ND0nImx4IicKK3NlbGVjdG1pbmJpdHM9JzY0Jworc2l6ZXNpemU9JzgnCit1MzJ0eXBlPSd1bnNpZ25lZCBpbnQnCit1NjR0eXBlPSd1bnNpZ25lZCBsb25nJwordWlkZm9ybWF0PScidSInCit1cXVhZHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1c2U2NGJpdGFsbD0nZGVmaW5lJwordXNlNjRiaXRpbnQ9J2RlZmluZScKK3V2c2l6ZT0nOCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4Y2UzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlCkBAIC0wLDAgKzEgQEAKK2J5dGVvcmRlcj0nODc2NTQzMjEnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2QyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9JzEyMzQ1Njc4JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBhZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjE0LjIvTWFrZWZpbGUuU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL01ha2VmaWxlLlNICisrKysgcGVybC01LjE0LjIvTWFrZWZpbGUuU0gKK0BAIC02MjIsNyArNjIyLDcgQEAgYml0Y291bnQuaDogZ2VuZXJhdGVfdXVkbWFwJChIT1NUX0VYRV9FWAorIAkkKFJVTikgLi9nZW5lcmF0ZV91dWRtYXAkKEhPU1RfRVhFX0VYVCkgdXVkbWFwLmggYml0Y291bnQuaAorIAorIGdlbmVyYXRlX3V1ZG1hcCQoSE9TVF9FWEVfRVhUKTogZ2VuZXJhdGVfdXVkbWFwJChPQkpfRVhUKQorLQkkKENDKSAtbyBnZW5lcmF0ZV91dWRtYXAkKEVYRV9FWFQpICQoTERGTEFHUykgZ2VuZXJhdGVfdXVkbWFwJChPQkpfRVhUKSAkKGxpYnMpCisrCSQoQlVJTERfQ0MpIC1vIGdlbmVyYXRlX3V1ZG1hcCQoRVhFX0VYVCkgZ2VuZXJhdGVfdXVkbWFwLmMKKyAKKyBtaW5pcGVybG1haW4kKE9CSl9FWFQpOiBtaW5pcGVybG1haW4uYyBwYXRjaGxldmVsLmgKKyAJJChDQ0NNRCkgJChQTERMRkxBR1MpICQqLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNiOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZDMzZDQ2OTYzMDM1ZWY3MjYxNDRkYzY2YmUyYWU5YzAwYWVjMDMzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgMTYgT2N0IDIwMTIgMjM6MDc6NTYgKzAzMDAKK1N1YmplY3Q6IEZpeCBDUEFOOjpGaXJzdFRpbWUgZGVmYXVsdHMgd2l0aCBub25leGlzdGluZyBzaXRlIGRpcnMgaWYgYSBwYXJlbnQKKyBpcyB3cml0YWJsZQorCitUaGUgc2l0ZSBkaXJlY3RvcmllcyBkbyBub3QgZXhpc3Qgb24gYSB0eXBpY2FsIERlYmlhbiBzeXN0ZW0uICBUaGUgYnVpbGQKK3N5c3RlbXMgd2lsbCBjcmVhdGUgdGhlbSB3aGVuIG5lY2Vzc2FyeSwgc28gdGhlcmUncyBubyBuZWVkIGZvciBhIHByb21wdAorc3VnZ2VzdGluZyBsb2NhbDo6bGliIGlmIHRoZSBmaXJzdCBleGlzdGluZyBwYXJlbnQgZGlyZWN0b3J5IGlzIHdyaXRhYmxlLgorCitBbHNvLCB3cml0YWJpbGl0eSBvZiB0aGUgY29yZSBkaXJlY3RvcmllcyBpcyBub3QgaW50ZXJlc3RpbmcgYXMgd2UKK2V4cGxpY2l0bHkgdGVsbCBDUEFOIG5vdCB0byB0b3VjaCB0aG9zZSB3aXRoIElOU1RBTExESVJTPXNpdGUuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjg4ODQyCitQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK2luZGV4IDMzMDU0Y2QuLjdiMGJlY2YgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitAQCAtMjA1NywxMSArMjA1NywzNCBAQCBzdWIgX3ByaW50X3VybGxpc3QgeworICAgICB9OworIH0KKyAKKysjIERlYmlhbiBtb2RpZmljYXRpb246IHJldHVybiB0cnVlIGlmIHRoaXMgZGlyZWN0b3J5CisrIyBvciB0aGUgZmlyc3QgZXhpc3Rpbmcgb25lIHVwd2FyZHMgaXMgd3JpdGFibGUKKytzdWIgX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCB7CisrICAgIG15ICgkZGlyKSA9IEBfOworKyAgICBteSBAcGFydHMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigkZGlyKTsKKysgICAgd2hpbGUgKEBwYXJ0cykgeworKyAgICAgICAgbXkgJGN1ciA9IEZpbGU6OlNwZWMtPmNhdGRpcihAcGFydHMpOworKyAgICAgICAgcmV0dXJuIDEgaWYgLXcgJGN1cjsKKysgICAgICAgIHJldHVybiAwIGlmIC1lIF87CisrICAgICAgICBwb3AgQHBhcnRzOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKysjIERlYmlhbiBzcGVjaWZpYyBtb2RpZmljYXRpb246IHRoZSBzaXRlIGRpcmVjdG9yaWVzIGRvbid0IG5lY2Vzc2FyaWx5CisrIyBleGlzdCBvbiB0aGUgc3lzdGVtLCBidXQgdGhlIGJ1aWxkIHN5c3RlbXMgY3JlYXRlIHRoZW0gd2hlbiBuZWNlc3NhcnksCisrIyBzbyByZXR1cm4gdHJ1ZSBpZiB0aGUgZmlyc3QgZXhpc3RpbmcgZGlyZWN0b3J5IHVwd2FyZHMgaXMgd3JpdGFibGUKKysjCisrIyBGdXJ0aGVybW9yZSwgb24gRGViaWFuLCBvbmx5IHRlc3QgdGhlIHNpdGUgZGlyZWN0b3JpZXMKKysjIChpbnN0YWxsc2l0ZSosIGV4cGFuZGVkIHRvIC91c3IvbG9jYWwve3NoYXJlLGxpYn0vcGVybCksCisrIyBub3QgdGhlIGNvcmUgb25lcyAKKysjIChpbnN0YWxsKmxpYiwgZXhwYW5kZWQgdG8gL3Vzci97c2hhcmUsbGlifS9wZXJsKS4KKysjIFdlIHBhc3MgSU5TVEFMTERJUlM9c2l0ZSBieSBkZWZhdWx0IHRvIGtlZXAgQ1BBTiBmcm9tIHRvdWNoaW5nCisrIyB0aGUgY29yZSBkaXJlY3Rvcmllcy4KKysKKyBzdWIgX2Nhbl93cml0ZV90b19saWJkaXJzIHsKKy0gICAgcmV0dXJuIC13ICRDb25maWd7aW5zdGFsbHByaXZsaWJ9CistICAgICAgICAmJiAtdyAkQ29uZmlne2luc3RhbGxhcmNobGlifQorLSAgICAgICAgJiYgLXcgJENvbmZpZ3tpbnN0YWxsc2l0ZWxpYn0KKy0gICAgICAgICYmIC13ICRDb25maWd7aW5zdGFsbHNpdGVhcmNofQorKyAgICByZXR1cm4gX2Nhbl93cml0ZV90b190aGlzX29yX3BhcmVudCgkQ29uZmlne2luc3RhbGxzaXRlbGlifSkKKysgICAgICAgICYmIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQoJENvbmZpZ3tpbnN0YWxsc2l0ZWFyY2h9KQorIH0KKyAKKyBzdWIgX3VzaW5nX2luc3RhbGxiYXNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUyOTUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNWZmMWYyMTQ4NGFhYjY4ZWZlMzIxZmY0YmE1ZDM1OTI4ZjcyYWY5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBQcm92aWRlIGEgc2Vuc2libGUgSU5TVEFMTERJUlMgZGVmYXVsdCBmb3IgbW9kdWxlcyBpbnN0YWxsZWQgZnJvbQorIENQQU4uCisKK1NvbWUgbW9kdWxlcyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gY29yZSBzZXQgSU5TVEFMTERJUlMgPT4gJ3BlcmwnCitleHBsaWNpdGx5IGluIE1ha2VmaWxlLlBMIG9yIEJ1aWxkLlBMLiAgVGhpcyBtYWtlcyBzZW5zZSBmb3IgdGhlIG5vcm1hbCBASU5DCitvcmRlcmluZywgYnV0IG5vdCBvdXJzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vY3Bhbl9kZWZpbnN0YWxsZGlycy5kaWZmCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitpbmRleCA5MThlMDA5Li4zMzA1NGNkIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorQEAgLTEwMjQsNyArMTAyNCw3IEBAIHN1YiBpbml0IHsKKyAgICAgbXlfcHJvbXB0X2xvb3AocHJlZmVyX2luc3RhbGxlciA9PiAnTUInLCAkbWF0Y2hlciwgJ01CfEVVTU18UkFORCcpOworIAorICAgICBpZiAoISRtYXRjaGVyIG9yICdtYWtlcGxfYXJnIG1ha2VfYXJnJyA9fiAvJG1hdGNoZXIvKSB7CistICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlcGxfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisrICAgICAgICBteV9kZmx0X3Byb21wdChtYWtlcGxfYXJnID0+ICJJTlNUQUxMRElSUz1zaXRlIiwgJG1hdGNoZXIpOworICAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZV9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKyAgICAgICAgIGlmICggJENQQU46OkNvbmZpZy0+e21ha2VwbF9hcmd9ID1+IC9MSUJTPXxJTkM9LyApIHsKKyAgICAgICAgICAgICAkQ1BBTjo6RnJvbnRlbmQtPm15d2FybigKK0BAIC0xMDU2LDcgKzEwNTYsNyBAQCBzdWIgaW5pdCB7CisgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VfaW5zdGFsbF9hcmcgPT4gJENQQU46OkNvbmZpZy0+e21ha2VfYXJnfSB8fCAiIiwKKyAgICAgICAgICAgICAgICAgICAgJG1hdGNoZXIpOworIAorLSAgICBteV9kZmx0X3Byb21wdChtYnVpbGRwbF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKysgICAgbXlfZGZsdF9wcm9tcHQobWJ1aWxkcGxfYXJnID0+ICItLWluc3RhbGxkaXJzIHNpdGUiLCAkbWF0Y2hlcik7CisgICAgIG15X2RmbHRfcHJvbXB0KG1idWlsZF9hcmcgPT4gIiIsICRtYXRjaGVyKTsKKyAKKyAgICAgaWYgKGV4aXN0cyAkQ1BBTjo6SGFuZGxlQ29uZmlnOjprZXlze21idWlsZF9pbnN0YWxsX2J1aWxkX2NvbW1hbmR9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBiZjExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgpAQCAtMCwwICsxLDM0IEBACitGcm9tIDAxNDIxZjhhODBkNWM2MjM5NTk2OTViYTJiODE2N2YzMDExMmQzMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTYgRGVjIDIwMDUgMDE6MzI6MTQgKzExMDAKK1N1YmplY3Q6IFJlbW92ZSBvdmVybHkgcmVzdHJpY3RpdmUgREJfRmlsZSB2ZXJzaW9uIGNoZWNrLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzM0MDA0NworCitQYWNrYWdlIGRlcGVuZGVuY2llcyBlbnN1cmUgdGhlIGNvcnJlY3QgbGlicmFyeSBpcyBsaW5rZWQgYXQgcnVuLXRpbWUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9kYl9maWxlX3Zlci5kaWZmCistLS0KKyBjcGFuL0RCX0ZpbGUvdmVyc2lvbi5jIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMgYi9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jCitpbmRleCBlMDFmNmY2Li41NDRlNmVlIDEwMDY0NAorLS0tIGEvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworKysrIGIvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworQEAgLTQ4LDYgKzQ4LDcgQEAgX19nZXRCZXJrZWxleURCSW5mbygpCisgCisgICAgICh2b2lkKWRiX3ZlcnNpb24oJk1ham9yLCAmTWlub3IsICZQYXRjaCkgOworIAorKyNpZm5kZWYgREVCSUFOCisgICAgIC8qIENoZWNrIHRoYXQgdGhlIHZlcnNpb25zIG9mIGRiLmggYW5kIGxpYmRiLmEgYXJlIHRoZSBzYW1lICovCisgICAgIGlmIChNYWpvciAhPSBEQl9WRVJTSU9OX01BSk9SIHx8IE1pbm9yICE9IERCX1ZFUlNJT05fTUlOT1IgKQorIAkJLyogfHwgUGF0Y2ggIT0gREJfVkVSU0lPTl9QQVRDSCkgKi8KK0BAIC01NSw2ICs1Niw3IEBAIF9fZ2V0QmVya2VsZXlEQkluZm8oKQorIAljcm9haygiXG5EQl9GaWxlIHdhcyBidWlsZCB3aXRoIGxpYmRiIHZlcnNpb24gJWQuJWQuJWQsXG5idXQgeW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biBpdCB3aXRoIGxpYmRiIHZlcnNpb24gJWQuJWQuJWRcbiIsCisgCQlEQl9WRVJTSU9OX01BSk9SLCBEQl9WRVJTSU9OX01JTk9SLCBEQl9WRVJTSU9OX1BBVENILCAKKyAJCU1ham9yLCBNaW5vciwgUGF0Y2gpIDsKKysjZW5kaWYgLyogREVCSUFOICovCisgICAgIAorICAgICAvKiBjaGVjayB0aGF0IGxpYmRiIGlzIHJlY2VudCBlbm91Z2ggIC0tIHdlIG5lZWQgMi4zLjQgb3IgZ3JlYXRlciAqLworICAgICBpZiAoTWFqb3IgPT0gMiAmJiAoTWlub3IgPCAzIHx8IChNaW5vciA9PSAgMyAmJiBQYXRjaCA8IDQpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZWU0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gZGVmNGFhMzgxN2Y5OGFhZTYyNWU2MDFiNzkxZWYwNjgyNzZmMDVkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaWMgSGFyZ3JlYXZlcyA8ZG9tQGVhcnRoLmxpPgorRGF0ZTogTW9uLCAxNyBNYXkgMjAxMCAxMzoyMzowNyArMDMwMAorU3ViamVjdDogUG9pbnQgdXNlcnMgdG8gRGViaWFuIHBhY2thZ2VzIG9mIGRlcHJlY2F0ZWQgY29yZSBtb2R1bGVzCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzQ3NjI4CisKK1NldmVyYWwgbW9kdWxlcyBhcmUgYmVpbmcgZGVwcmVjYXRlZCB3aXRoIHBlcmwgNS4yMC4KK1RvIGdldCBhIGNsZWFuIHRyYW5zaXRpb24sIHBlcmwvcGVybC1tb2R1bGVzIGlzIGdvaW5nIHRvIHJlY29tbWVuZCB0aGUKK3NlcGFyYXRlIERlYmlhbiBwYWNrYWdlcyBvZiB0aGVzZSBmb3Igb25lIHJlbGVhc2UgY3ljbGUgc28gdGhhdCB0aGV5IHdpbGwgYmUKK3B1bGxlZCBpbiBieSBkZWZhdWx0IG9uIHVwZ3JhZGVzLiBUaGlzIGlzIHRha2luZyBwbGFjZSBmb3IgcGVybCA1LjIwL2plc3NpZS4KKworSG93ZXZlciwgb24gc3lzdGVtcyBjb25maWd1cmVkIHRvIGlnbm9yZSByZWNvbW1lbmRhdGlvbnMgdGhlIGRlcHJlY2F0aW9uCit3YXJuaW5ncyB3aWxsIHN0aWxsIGJlIHVzZWZ1bCwgc28gbW9kaWZ5IHRoZW0gc2xpZ2h0bHkgdG8gcG9pbnQgdG8gdGhlCitzZXBhcmF0ZSBwYWNrYWdlcyBpbnN0ZWFkLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZGVwcmVjYXRlLXdpdGgtYXB0LmRpZmYKKy0tLQorIGxpYi9kZXByZWNhdGUucG0gfCAxNSArKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2RlcHJlY2F0ZS5wbSBiL2xpYi9kZXByZWNhdGUucG0KK2luZGV4IDQ3YmMxMTIuLmIwYzYxZGYgMTAwNjQ0CistLS0gYS9saWIvZGVwcmVjYXRlLnBtCisrKysgYi9saWIvZGVwcmVjYXRlLnBtCitAQCAtNyw2ICs3LDEzIEBAIG91ciAkVkVSU0lPTiA9IDAuMDM7Cisgb3VyICVDb25maWc7CisgdW5sZXNzICglQ29uZmlnKSB7IHJlcXVpcmUgQ29uZmlnOyAqQ29uZmlnID0gXCVDb25maWc6OkNvbmZpZzsgfQorIAorKyMgRGViaWFuLXNwZWNpZmljIGNoYW5nZTogcmVjb21tZW5kIHRoZSBzZXBhcmF0ZSBEZWJpYW4gcGFja2FnZXMgb2YKKysjIGRlcHJlY2F0ZWQgbW9kdWxlcyB3aGVyZSBhdmFpbGFibGUKKysKKytvdXIgJURFQklBTl9QQUNLQUdFUyA9ICgKKysgICAgIyBOb25lIGZvciB0aGUgcGVybCA1LjIyIGN5Y2xlCisrKTsKKysKKyAjIFRoaXMgaXNuJ3QgYSBwdWJsaWMgQVBJLiBJdCdzIGludGVybmFsIHRvIGNvZGUgbWFpbnRhaW5lZCBieSB0aGUgcGVybC1wb3J0ZXJzCisgIyBJZiB5b3Ugd291bGQgbGlrZSBpdCB0byBiZSBhIHB1YmxpYyBBUEksIHBsZWFzZSBzZW5kIGEgcGF0Y2ggd2l0aAorICMgZG9jdW1lbnRhdGlvbiBhbmQgdGVzdHMuIFVudGlsIHRoZW4sIGl0IG1heSBjaGFuZ2Ugd2l0aG91dCB3YXJuaW5nLgorQEAgLTU4LDkgKzY1LDE1IEBAIEVPTQorIAlpZiAoZGVmaW5lZCAkY2FsbGVyc19iaXRtYXNrCisgCSAgICAmJiAodmVjKCRjYWxsZXJzX2JpdG1hc2ssICR3YXJuaW5nczo6T2Zmc2V0c3tkZXByZWNhdGVkfSwgMSkKKyAJCXx8IHZlYygkY2FsbGVyc19iaXRtYXNrLCAkd2FybmluZ3M6Ok9mZnNldHN7YWxsfSwgMSkpKSB7CistCSAgICB3YXJuIDw8IkVPTSI7CisrCQlpZiAobXkgJGRlYiA9ICRERUJJQU5fUEFDS0FHRVN7JHBhY2thZ2V9KSB7CisrCQkgICAgd2FybiA8PCJFT00iOworKyRwYWNrYWdlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBQZXJsIGNvcmUgZGlzdHJpYnV0aW9uIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSBpbnN0YWxsIHRoZSBzZXBhcmF0ZSAkZGViIHBhY2thZ2UuIEl0IGlzIGJlaW5nIHVzZWQgYXQgJGNhbGxfZmlsZSwgbGluZSAkY2FsbF9saW5lLgorK0VPTQorKwkJfSBlbHNlIHsKKysJCSAgICB3YXJuIDw8IkVPTSI7CisgJHBhY2thZ2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSBDUEFOLiBJdCBpcyBiZWluZyB1c2VkIGF0ICRjYWxsX2ZpbGUsIGxpbmUgJGNhbGxfbGluZS4KKyBFT00KKysJCX0KKyAJfQorICAgICB9CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZG9jX2luZm8uZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYTJlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBlMThmODFlNjljNTVkNjk4YWJkMjkzZTcxMDYzZDZiNmIyNzVjYzA3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBSZXBsYWNlIGdlbmVyaWMgbWFuKDEpIGluc3RydWN0aW9ucyB3aXRoIERlYmlhbi1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworSW5kaWNhdGUgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBpbnN0YWxsIHRoZSBwZXJsLWRvYyBwYWNrYWdlLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZG9jX2luZm8uZGlmZgorLS0tCisgcG9kL3BlcmwucG9kIHwgMTIgKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wb2QvcGVybC5wb2QgYi9wb2QvcGVybC5wb2QKK2luZGV4IDM2NGU5NTcuLmY5N2UxMDMgMTAwNjQ0CistLS0gYS9wb2QvcGVybC5wb2QKKysrKyBiL3BvZC9wZXJsLnBvZAorQEAgLTI5MSw4ICsyOTEsMTYgQEAgYXV4IGMycGggaDJwaCBoMnhzIHBlcmxidWcgcGwycG0gcG9kMmh0bWwgcG9kMm1hbiBzcGxhaW4geHN1YnBwCisgCisgPWZvciBidWlsZHRvYyBfX0VORF9fCisgCistT24gYSBVbml4LWxpa2Ugc3lzdGVtLCB0aGVzZSBkb2N1bWVudGF0aW9uIGZpbGVzIHdpbGwgdXN1YWxseSBhbHNvIGJlCistYXZhaWxhYmxlIGFzIG1hbnBhZ2VzIGZvciB1c2Ugd2l0aCB0aGUgRjxtYW4+IHByb2dyYW0uCisrT24gRGViaWFuIHN5c3RlbXMsIHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIEI8cGVybC1kb2M+IHBhY2thZ2Ugd2hpY2gKKytjb250YWlucyB0aGUgbWFqb3JpdHkgb2YgdGhlIHN0YW5kYXJkIFBlcmwgZG9jdW1lbnRhdGlvbiBhbmQgdGhlCisrRjxwZXJsZG9jPiBwcm9ncmFtLgorKworK0V4dGVuc2l2ZSBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gZm9yIFBlcmwgbW9kdWxlcyBpcyBhdmFpbGFibGUsIGJvdGgKKyt0aG9zZSBkaXN0cmlidXRlZCB3aXRoIFBlcmwgYW5kIHRoaXJkLXBhcnR5IG1vZHVsZXMgd2hpY2ggYXJlIHBhY2thZ2VkCisrb3IgbG9jYWxseSBpbnN0YWxsZWQuCisrCisrWW91IHNob3VsZCBiZSBhYmxlIHRvIHZpZXcgUGVybCdzIGRvY3VtZW50YXRpb24gd2l0aCB5b3VyIG1hbigxKQorK3Byb2dyYW0gb3IgcGVybGRvYygxKS4KKyAKKyBTb21lIGRvY3VtZW50YXRpb24gaXMgbm90IGF2YWlsYWJsZSBhcyBtYW4gcGFnZXMsIHNvIGlmIGEKKyBjcm9zcy1yZWZlcmVuY2UgaXMgbm90IGZvdW5kIGJ5IG1hbiwgdHJ5IGl0IHdpdGggTDxwZXJsZG9jPi4gIFBlcmxkb2MgY2FuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NGIyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2VuYzJ4c19pbmMuZGlmZgpAQCAtMCwwICsxLDcwIEBACitGcm9tIDdmZTU5YTNkMDYwMWM2ZDg2MzRlYWU0Zjk5ZGFlMzAyNGNkMDJhOTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogVHdlYWsgZW5jMnhzIHRvIGZvbGxvdyBzeW1saW5rcyBhbmQgaWdub3JlIG1pc3NpbmcgQElOQyBkaXJlY3Rvcmllcy4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8yOTAzMzYKKworLSBpZ25vcmUgbWlzc2luZyBkaXJlY3RvcmllcywKKy0gZm9sbG93IHN5bWxpbmtzICgvdXNyL3NoYXJlL3BlcmwvNS44IC0+IDUuOC40KS4KKy0gZmlsdGVyICIuIiBvdXQgd2hlbiBydW5uaW5nICJlbmMyeHMgLUMiLCBpdCdzIHVubmVjZXNzYXJ5IGFuZCBjYXVzZXMKKyAgaXNzdWVzIHdpdGggZm9sbG93ID0+IDEgKHNlZSAjNjAzNjg2IGFuZCBbcnQuY3Bhbi5vcmcgIzY0NTg1XSkKKworUGF0Y2gtTmFtZTogZGViaWFuL2VuYzJ4c19pbmMuZGlmZgorLS0tCisgY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyB8IDggKysrKy0tLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC50IHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgYi9jcGFuL0VuY29kZS9iaW4vZW5jMnhzCitpbmRleCAxOWYyYjJiLi40ZDY0ZTM4IDEwMDY0NAorLS0tIGEvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworKysrIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworQEAgLTk0NCwxMSArOTQ0LDExIEBAIHVzZSB2YXJzIHF3KAorIHN1YiBmaW5kX2UyeHsKKyAgICAgZXZhbCB7IHJlcXVpcmUgRmlsZTo6RmluZDsgfTsKKyAgICAgbXkgKEBpbmMsICVlMnhfZGlyKTsKKy0gICAgZm9yIG15ICRpbmMgKEBJTkMpeworKyAgICBmb3IgbXkgJGluYyAoZ3JlcCAtZCwgQElOQyl7CisgICAgIHB1c2ggQGluYywgJGluYyB1bmxlc3MgJGluYyBlcSAnLic7ICNza2lwIGN1cnJlbnQgZGlyCisgICAgIH0KKyAgICAgRmlsZTo6RmluZDo6ZmluZCgKKy0gICAgICAgICBzdWIgeworKyAgICAgICAgIHsgd2FudGVkID0+IHN1YiB7CisgICAgICAgICAgbXkgKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkLCRyZGV2LCRzaXplLAorICAgICAgICAgICAgICAkYXRpbWUsJG10aW1lLCRjdGltZSwkYmxrc2l6ZSwkYmxvY2tzKQorICAgICAgICAgICAgICA9IGxzdGF0KCRfKSBvciByZXR1cm47CitAQCAtOTU4LDcgKzk1OCw3IEBAIHN1YiBmaW5kX2UyeHsKKyAgICAgICAgICAgICAgJGUyeF9kaXJ7JEZpbGU6OkZpbmQ6OmRpcn0gfHw9ICRtdGltZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuOworLSAgICAgICAgIH0sIEBpbmMpOworKyAgICAgICAgIH0sIGZvbGxvdyA9PiAxfSwgQGluYyk7CisgICAgIHdhcm4gam9pbigiXG4iLCBrZXlzICVlMnhfZGlyKSwgIlxuIjsKKyAgICAgZm9yIG15ICRkIChzb3J0IHskZTJ4X2RpcnskYX0gPD0+ICRlMnhfZGlyeyRifX0ga2V5cyAlZTJ4X2Rpcil7CisgICAgICRfRTJYID0gJGQ7CitAQCAtMTAyNSw3ICsxMDI1LDcgQEAgc3ViIG1ha2VfY29uZmlnbG9jYWxfcG0geworIAkgICAgJExvY2FsTW9keyRlbmN9IHx8PSAkbW9kOworIAl9CisgICAgIH07CistICAgIEZpbGU6OkZpbmQ6OmZpbmQoe3dhbnRlZCA9PiAkd2FudGVkfSwgQElOQyk7CisrICAgIEZpbGU6OkZpbmQ6OmZpbmQoe3dhbnRlZCA9PiAkd2FudGVkLCBmb2xsb3cgPT4gMX0sIGdyZXAgLWQgJiYgIS9eXC4vLCBASU5DKTsKKyAgICAgJF9Nb2RMaW5lcyA9ICIiOworICAgICBmb3IgbXkgJGVuYyAoIHNvcnQga2V5cyAlTG9jYWxNb2QgKSB7CisgICAgICAgICAkX01vZExpbmVzIC49CitkaWZmIC0tZ2l0IGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudCBiL3QvcG9ydGluZy9jdXN0b21pemVkLnQKK2luZGV4IDQ1ZmNhZmIuLjNiZDZhZGIgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC50CisrKysgYi90L3BvcnRpbmcvY3VzdG9taXplZC50CitAQCAtMTAxLDggKzEwMSwxMSBAQCBmb3JlYWNoIG15ICRtb2R1bGUgKCBzb3J0IGtleXMgJU1vZHVsZXMgKSB7CisgICAgICAgcHJpbnQgJGRhdGFfZmggam9pbignICcsICRtb2R1bGUsICRmaWxlLCAkaWQpLCAiXG4iOworICAgICAgIG5leHQ7CisgICAgIH0KKytTS0lQOiB7CisrICAgIHNraXAoIiRmaWxlIG1vZGlmaWVkIGZvciBEZWJpYW4iLCAxKSBpZiAkZmlsZSBlcSAnY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cyc7CisgICAgIG15ICRzaG91bGRfYmUgPSAkY3VzdG9taXNlZHsgJG1vZHVsZSB9LT57ICRmaWxlIH07CisgICAgIGlzKCAkaWQsICRzaG91bGRfYmUsICJTSEEgZm9yICRmaWxlIG1hdGNoZXMgc3Rhc2hlZCBTSEEiICk7CisrfQorICAgfQorIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXJybm9fdmVyLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNTljNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gODI3ZWVlMjI1ODk3YzM1ZWM5NzE5NGE1OTcxYmY0YmZjZjI1MDc0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxNiBEZWMgMjAwNSAwMTozMjoxNCArMTEwMAorU3ViamVjdDogUmVtb3ZlIEVycm5vIHZlcnNpb24gY2hlY2sgZHVlIHRvIHVwZ3JhZGUgcHJvYmxlbXMgd2l0aCBsb25nLXJ1bm5pbmcKKyBwcm9jZXNzZXMuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMzQzMzUxCisKK1JlbW92ZSB2ZXJzaW9uIGNoZWNrIHdoaWNoIGNhbiBjYXVzZSBwcm9ibGVtcyBmb3IgbG9uZyBydW5uaW5nCitwcm9jZXNzZXMgZW1iZWRkaW5nIHBlcmwgd2hlbiB1cGdyYWRpbmcgdG8gYSBuZXdlciB2ZXJzaW9uLAorY29tcGF0aWJsZSwgYnV0IGJ1aWx0IG9uIGEgZGlmZmVyZW50IG1hY2hpbmUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9lcnJub192ZXIuZGlmZgorLS0tCisgZXh0L0Vycm5vL0Vycm5vX3BtLlBMIHwgNSAtLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0L0Vycm5vL0Vycm5vX3BtLlBMIGIvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCitpbmRleCBjNmJmYTA2Li41MTllNWM3IDEwMDY0NAorLS0tIGEvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCisrKysgYi9leHQvRXJybm8vRXJybm9fcG0uUEwKK0BAIC0yNzgsMTMgKzI3OCw4IEBAIHN1YiB3cml0ZV9lcnJub19wbSB7CisgCisgcGFja2FnZSBFcnJubzsKKyByZXF1aXJlIEV4cG9ydGVyOworLXVzZSBDb25maWc7CisgdXNlIHN0cmljdDsKKyAKKy0iXCRDb25maWd7J2FyY2huYW1lJ30tXCRDb25maWd7J29zdmVycyd9IiBlcQorLSIkYXJjaG5hbWUtJENvbmZpZ3snb3N2ZXJzJ30iIG9yCistCWRpZSAiRXJybm8gYXJjaGl0ZWN0dXJlICgkYXJjaG5hbWUtJENvbmZpZ3snb3N2ZXJzJ30pIGRvZXMgbm90IG1hdGNoIGV4ZWN1dGFibGUgYXJjaGl0ZWN0dXJlIChcJENvbmZpZ3snYXJjaG5hbWUnfS1cJENvbmZpZ3snb3N2ZXJzJ30pIjsKKy0KKyBvdXIgXCRWRVJTSU9OID0gIiRWRVJTSU9OIjsKKyBcJFZFUlNJT04gPSBldmFsIFwkVkVSU0lPTjsKKyBvdXIgXEBJU0EgPSAnRXhwb3J0ZXInOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjRiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKQEAgLTAsMCArMSwzNyBAQAorRnJvbSA0MzEyNzUwNzhiMDQ5MGQyZTA5MjQ0MmQ5NTgyYmUwNmJiOTViMzU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAxMCBNYXkgMjAxNCAyMzozNDoxNCArMDMwMAorU3ViamVjdDogRVU6TU06IHNldCBsb2NhdGlvbiBvZiBsaWJwZXJsLmEgdW5kZXIgL3Vzci9saWIKKworVGhlIERlYmlhbiBwYWNrYWdpbmcgbW92ZXMgbGlicGVybC5hIGEgY291cGxlIG9mIGxldmVscyB1cCBmcm9tIHRoZQorQ09SRSBkaXJlY3RvcnkgdG8gbWF0Y2ggb3RoZXIgc3RhdGljIGxpYnJhcmllcy4KKworUGF0Y2gtTmFtZTogZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAyICstCisgcHAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA1ZjFiODdmLi41NzBhNjMxIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjUwNSw3ICsyNTA1LDcgQEAgTUFQX1BSRUxJQlMgICA9ICRDb25maWd7cGVybGxpYnN9ICRDb25maWd7Y3J5cHRsaWJ9CisgCSgkbHBlcmwgPSAkbGlicGVybCkgPX4gcy9cJFwoQVwpLyRzZWxmLT57TElCX0VYVH0vOworICAgICB9CisgICAgIHVubGVzcyAoJGxpYnBlcmwgJiYgLWYgJGxwZXJsKSB7ICMgSWx5YSdzIGNvZGUuLi4KKy0JbXkgJGRpciA9ICRzZWxmLT57UEVSTF9TUkN9IHx8ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vQ09SRSI7CisrCW15ICRkaXIgPSAkc2VsZi0+e1BFUkxfU1JDfSB8fCAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9Ly4uLy4uIjsKKyAJJGRpciA9ICIkc2VsZi0+e1BFUkxfQVJDSExJQn0vLi4iIGlmICRzZWxmLT57VU5JTlNUQUxMRURfUEVSTH07CisgCSRsaWJwZXJsIHx8PSAibGlicGVybCRzZWxmLT57TElCX0VYVH0iOworIAkkbGlicGVybCAgID0gIiRkaXIvJGxpYnBlcmwiOworZGlmZiAtLWdpdCBhL3BwLmMgYi9wcC5jCitpbmRleCA0MmYxNTZhLi43N2MxMjc5IDEwMDY0NAorLS0tIGEvcHAuYworKysrIGIvcHAuYworQEAgLTEsNCArMSw0IEBACistLyogICAgcHAuYworKyAvKiAgICBwcC5jCisgICoKKyAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisgICogICAgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBieSBMYXJyeSBXYWxsIGFuZCBvdGhlcnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Zha2Vyb290LmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDYxY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMjdhZTdiMTgwNzhkODAxYTJjOTQzYWE2ZGUyZjdlOTgwODE3NzI1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUG9zdHBvbmUgTERfTElCUkFSWV9QQVRIIGV2YWx1YXRpb24gdG8gdGhlIGJpbmFyeSB0YXJnZXRzLgorCitNb2RpZnkgdGhlIHNldHRpbmcgb2YgTERfTElCUkFSWV9QQVRIIHRvIGFwcGVuZCBwcmUtZXhpc3RpbmcgdmFsdWVzIGF0IHRoZQordGltZSB0aGUgcnVsZSBpcyBldmFsdWF0ZWQgcmF0aGVyIHRoYW4gd2hlbiB0aGUgTWFrZWZpbGUgaXMgY3JlYXRlZC4KKworVGhpcyBpcyByZXF1aXJlZCB3aGVuIGJ1aWxkaW5nIHBhY2thZ2VzIHdpdGggZHBrZy1idWlsZHBhY2thZ2UgYW5kIGZha2Vyb290LAorc2luY2UgZmFrZXJvb3QgKHdoaWNoIG5vdyBzZXRzIExEX0xJQlJBUllfUEFUSCkgaXMgbm90IHVzZWQgZm9yIHRoZSAiYnVpbGQiCitydWxlIHdoZXJlIHRoZSBNYWtlZmlsZSBpcyBjcmVhdGVkLCBidXQgaXMgZm9yIHRoZSBjbGVhbi9iaW5hcnkqIHRhcmdldHMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9mYWtlcm9vdC5kaWZmCistLS0KKyBNYWtlZmlsZS5TSCB8IDcgKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5TSCBiL01ha2VmaWxlLlNICitpbmRleCAwMzRkODEyLi4wNGRkN2Q1IDEwMDc1NQorLS0tIGEvTWFrZWZpbGUuU0gKKysrKyBiL01ha2VmaWxlLlNICitAQCAtMzksMTAgKzM5LDcgQEAgY2FzZSAiJHVzZXNocnBsaWIiIGluCisgdHJ1ZSkKKyAJIyBQcmVmaXggYWxsIHJ1bnMgb2YgJ21pbmlwZXJsJyBhbmQgJ3BlcmwnIHdpdGgKKyAJIyAkbGRsaWJwdGggc28gdGhhdCAuL3BlcmwgZmluZHMgKnRoaXMqIHNoYXJlZCBsaWJwZXJsLgorLQljYXNlICIkTERfTElCUkFSWV9QQVRIIiBpbgorLQknJykgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKy0JKikgICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJExEX0xJQlJBUllfUEFUSCIgYCIgOzsKKy0JZXNhYworKwlsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiJyQke0xEX0xJQlJBUllfUEFUSDorOn0kJExEX0xJQlJBUllfUEFUSCcKKyAKKyAJcGxkbGZsYWdzPSIkY2NjZGxmbGFncyIKKyAJc3RhdGljX2xkZmxhZ3M9JycKK0BAIC0xMTMsNyArMTEwLDcgQEAgdHJ1ZSkKKyAJICAgIDs7CisgCWVzYWMKKyAJY2FzZSAiJGxkbGlicHRobmFtZSIgaW4KKy0JJycpIDs7CisrCScnfExEX0xJQlJBUllfUEFUSCkgOzsKKyAJKikKKyAJICAgIGNhc2UgIiRvc25hbWUiIGluCisgCSAgICBvczIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE5ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgpAQCAtMCwwICsxLDM1IEBACitGcm9tIGM4MWRiZGVkZmY5ZTliNGZiNzVhYzAyOGFhNzE4ODM4YzAyOTJkMmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIE1hcnNjaGtlIDxhbmRyZWFzLm1hcnNjaGtlQGdvb2dsZW1haWwuY29tPgorRGF0ZTogU2F0LCAxNyBTZXAgMjAxMSAxMTozODo0MiArMDEwMAorU3ViamVjdDogQ29uZmlndXJlIENQQU46OkRpc3RyaWJ1dGlvbiB3aXRoIGNvcnJlY3QgbmFtZSBvZiBodG1sMnRleHQKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82NDA0NzkKK1BhdGNoLU5hbWU6IGRlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmCisKK0lmIHlvdSB1c2UgY3BhbiBmcm9tIERlYmlhbiB5b3UgdXN1YWxseSB3aW5kIHVwIHRyeWluZyB0byByZWFkIG9ubGluZQorZG9jdW1lbnRhdGlvbiB0aHJvdWdoIGl0LiBVbmZvcnR1bmF0ZWx5IGNwYW4gY2FuJ3QgZmluZCB0aGUKK2h0bWwydGV4dC5wbCBzY3JpcHQgZXZlbiB0aG91Z2ggaXQgaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBEZWJpYW4KK3BhY2thZ2UgJ2h0bWwydGV4dCcuCisKK1BsZWFzZSBzZWUgdGhlIGF0dGFjaGVkIHBhdGNoIGZvciBhIHF1aWNrIGZpeCBvZiB0aGlzIGlzc3VlLgorCitbTWFpbnRhaW5lcidzIG5vdGU6IGh0bWwydGV4dCBpbiBEZWJpYW4gaXMgbm90IHRoZSBzYW1lIGltcGxlbWVudGF0aW9uCithcyB0aGUgaHRtbDJ0ZXh0LnBsIHdoaWNoIGlzIGV4cGVjdGVkLCBidXQgc2hvdWxkIHByb3ZpZGUgc2ltaWxhcgorZnVuY3Rpb25hbGl0eV0uCistLS0KKyBjcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbSBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0KK2luZGV4IDA5MmI3ODEuLjVjMmJhZTEgMTAwNjQ0CistLS0gYS9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCisrKysgYi9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCitAQCAtNDA5OSw3ICs0MDk5LDcgQEAgc3ViIF9kaXNwbGF5X3VybCB7CisgICAgICAgaWYgJENQQU46OkRFQlVHOworIAorICAgICAjIHNob3VsZCB3ZSBkZWZpbmUgaXQgaW4gdGhlIGNvbmZpZyBpbnN0ZWFkPworLSAgICBteSAkaHRtbF9jb252ZXJ0ZXIgPSAiaHRtbDJ0ZXh0LnBsIjsKKysgICAgbXkgJGh0bWxfY29udmVydGVyID0gImh0bWwydGV4dCI7CisgCisgICAgIG15ICR3ZWJfYnJvd3NlciA9ICRDUEFOOjpDb25maWctPnsnbHlueCd9IHx8IHVuZGVmOworICAgICBteSAkd2ViX2Jyb3dzZXJfb3V0ID0gJHdlYl9icm93c2VyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE5MjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgpAQCAtMCwwICsxLDMxIEBACitGcm9tIDlmYWY2ZGNjM2E1YzQxNTQ0ODRkODEyZWIzY2MzZGQ3OGIzNTU2M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBNb24sIDMwIE1heSAyMDExIDIyOjU0OjI0ICswMzAwCitTdWJqZWN0OiBEb2N1bWVudCB0aGF0IENDRkxBR1Mgc2hvdWxkIGluY2x1ZGUgJENvbmZpZ3tjY2ZsYWdzfQorCitCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Njg2MTMKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjI4NTIyCisKK0NvbXBpbGluZyBYUyBleHRlbnNpb25zIHdpdGhvdXQgJENvbmZpZ3tjY2ZsYWdzfSBjYW4gYnJlYWsgdGhlCitiaW5hcnkgaW50ZXJmYWNlIG9uIHNvbWUgcGxhdGZvcm1zLgorCitQYXRjaC1OYW1lOiBmaXhlcy9kb2N1bWVudF9tYWtlbWFrZXJfY2NmbGFncy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0KK2luZGV4IGZlOTViMjcuLjkwNDAzZTggMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCitAQCAtMTc3NCw2ICsxNzc0LDEwIEBAIGN1cnJlbnRseSB1c2VkIGJ5IE1ha2VNYWtlciBidXQgbWF5IGJlIGhhbmR5IGluIE1ha2VmaWxlLlBMcy4KKyBTdHJpbmcgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBjb21waWxlciBjYWxsIGNvbW1hbmQgbGluZSBiZXR3ZWVuCisgdGhlIGFyZ3VtZW50cyBJTkMgYW5kIE9QVElNSVpFLgorIAorK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHRha2VuIGZyb20gJENvbmZpZ3tjY2ZsYWdzfS4gV2hlbiBvdmVycmlkaW5nCisrQ0NGTEFHUywgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlICRDb25maWd7Y2NmbGFnc30gc2V0dGluZ3MgdG8gYXZvaWQKKytiaW5hcnkgaW5jb21wYXRpYmlsaXRpZXMuCisrCisgPWl0ZW0gQ09ORklHCisgCisgQXJyYXlyZWYuIEUuZy4gW3F3KGFyY2huYW1lIG1hbmV4dCldIGRlZmluZXMgQVJDSE5BTUUgJiBNQU5FWFQgZnJvbQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1Zjk2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKQEAgLTAsMCArMSwxMTAgQEAKK0Zyb20gNTVkNDMwZWIwMmZjMTE2NTgxODQ3MzA0Y2EyMDMyMTY4Nzk3ODI2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIE5pZWRlciA8anJuaWVkZXJAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNyBKdWwgMjAxMiAxMDozNTowNyAtMDUwMAorU3ViamVjdDogTWVtb2l6ZTo6U3RvcmFibGU6IHJlc3BlY3QgJ25zdG9yZScgb3B0aW9uIG5vdCByZXNwZWN0ZWQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTWVtb2l6ZSgzcGVybCkgc2F5czoKKworICAgICAgICAgICAgICAgIHRpZSBteSAlY2FjaGUgPT4gJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGVuYW1lLCAnbnN0b3JlJzsKKyAgICAgICAgICAgICAgICBtZW1vaXplICdmdW5jdGlvbicsIFNDQUxBUl9DQUNIRSA9PiBbSEFTSCA9PiBcJWNhY2hlXTsKKworICAgICAgICBJbmNsdWRlIHRoZSDigJhuc3RvcmXigJkgb3B0aW9uIHRvIGhhdmUgdGhlICJTdG9yYWJsZSIgZGF0YWJhc2UKKyAgICAgICAgd3JpdHRlbiBpbiDigJhuZXR3b3JrIG9yZGVy4oCZLiAgKFNlZSBTdG9yYWJsZSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIGFib3V0IHRoaXMuKQorCitJbiBmYWN0IHRoZSAibnN0b3JlIiBvcHRpb24gZG9lcyBubyBzdWNoIHRoaW5nLiAgT3B0aW9uIHBhcnNpbmcgbG9va3MKK2xpa2UgdGhpczoKKworICAgICAgICBAb3B0aW9uc3tAX30gPSAoKTsKKworJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30gaXMgYWNjb3JkaW5nbHkgc2V0IHRvIHVuZGVmLiAgTGF0ZXIKK01lbW9pemU6OlN0b3JhYmxlIGNoZWNrcyBpZiB0aGUgb3B0aW9uIGlzIHRydWUsIGFuZCBzaW5jZSB1bmRlZiBpcworbm90IHRydWUsIHRoZSAiZWxzZSIgYnJhbmNoIGlzIGFsd2F5cyB0YWtlbi4KKworICAgICAgICBpZiAoJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKyAgICAgICAgICAgICAgICBTdG9yYWJsZTo6bnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdG9yYWJsZTo6c3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworICAgICAgICB9CisKK0NvcnJlY3RpbmcgdGhlIGNvbmRpdGlvbiB0byAoZXhpc3RzICRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSBmaXhlcworaXQuCisKK05vdGljZWQgYmVjYXVzZSBnaXQtc3ZuLCB3aGljaCB1c2VzIHRoZSAnbnN0b3JlJyBvcHRpb24gZm9yIGl0cworb24tZGlzayBjYWNoZXMsIHdhcyBwcm9kdWNpbmcKKworICAgICAgICBCeXRlIG9yZGVyIGlzIG5vdCBjb21wYXRpYmxlIGF0IC4uLy4uL2xpYi9TdG9yYWJsZS5wbQorCit3aGVuIHJ1biB1c2luZyBhIHBlcmwgd2l0aCBhIGRpZmZlcmVudCBpbnRlZ2VyIHNpemUgKGFuZCBoZW5jZQorYnl0ZW9yZGVyKS4KKworUmVwb3J0ZWQgYnkgVGltIFJldG91dCAoUlQjNzc3OTApCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTg3NjUwCitCdWc6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Nzc3OTAKK0ZvcndhcmRlZDogaHR0cHM6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD03Nzc5MAorUGF0Y2gtTmFtZTogZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZgorLS0tCisgY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0gfCAgMiArLQorIGNwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50ICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0gYi9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQoraW5kZXggMTMxNDc5Ny4uODc4NzZmMiAxMDA2NDQKKy0tLSBhL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtCisrKysgYi9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQorQEAgLTU1LDcgKzU1LDcgQEAgc3ViIERFU1RST1kgeworICAgcmVxdWlyZSBDYXJwIGlmICRWZXJib3NlOworICAgbXkgJHNlbGY9IHNoaWZ0OworICAgcHJpbnQgU1RERVJSICJNZW1vaXplOjpTdG9yYWJsZTo6REVTVFJPWShAXylcbiIgaWYgJFZlcmJvc2U7CistICBpZiAoJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKysgIGlmIChleGlzdHMgJHNlbGYtPntPUFRJT05TfXsnbnN0b3JlJ30pIHsKKyAgICAgU3RvcmFibGU6Om5zdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CisgICB9IGVsc2UgeworICAgICBTdG9yYWJsZTo6c3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworZGlmZiAtLWdpdCBhL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50IGIvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKK2luZGV4IGRlM2I4ZGMuLmE2MjQyMzggMTAwNjQ0CistLS0gYS9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudAorKysrIGIvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKK0BAIC0zMSwxOCArMzEsMzQgQEAgaWYgKCRAKSB7CisgICBleGl0IDA7CisgfQorIAorLXByaW50ICIxLi40XG4iOworK3ByaW50ICIxLi45XG4iOworIAorICRmaWxlID0gInN0b3JhYmxlJCQiOworIDEgd2hpbGUgdW5saW5rICRmaWxlOworIHRyeW91dCgnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZSwgMSk7ICAjIFRlc3QgMS4uNAorIDEgd2hpbGUgdW5saW5rICRmaWxlOworK3RyeW91dCgnTWVtb2l6ZTo6U3RvcmFibGUnLCAkZmlsZSwgNSwgJ25zdG9yZScpOyAgIyBUZXN0IDUuLjgKKythc3NlcnRfbmV0b3JkZXIoJGZpbGUsIDkpOyAgIyBUZXN0IDkKKysxIHdoaWxlIHVubGluayAkZmlsZTsKKysKKysKKytzdWIgYXNzZXJ0X25ldG9yZGVyIHsKKysgIG15ICgkZmlsZSwgJHRlc3RubykgPSBAXzsKKysKKysgIG15ICRuZXRvcmRlciA9IFN0b3JhYmxlOjpmaWxlX21hZ2ljKCRmaWxlKS0+eyduZXRvcmRlcid9OworKyAgcHJpbnQgKCRuZXRvcmRlciA/ICJvayAkdGVzdG5vXG4iIDogIm5vdCBvayAkdGVzdG5vXG4iKTsKKyt9CisgCisgc3ViIHRyeW91dCB7CistICBteSAoJHRpZXBhY2ssICRmaWxlLCAkdGVzdG5vKSA9IEBfOworKyAgbXkgKCR0aWVwYWNrLCAkZmlsZSwgJHRlc3RubywgJG9wdGlvbikgPSBAXzsKKyAKKy0gIHRpZSBteSAlY2FjaGUgPT4gJHRpZXBhY2ssICRmaWxlCistICAgIG9yIGRpZSAkITsKKysgIGlmIChkZWZpbmVkICRvcHRpb24pIHsKKysgICAgdGllIG15ICVjYWNoZSA9PiAkdGllcGFjaywgJGZpbGUsICRvcHRpb24KKysgICAgICBvciBkaWUgJCE7CisrICB9IGVsc2UgeworKyAgICB0aWUgbXkgJWNhY2hlID0+ICR0aWVwYWNrLCAkZmlsZQorKyAgICAgIG9yIGRpZSAkITsKKysgIH0KKyAKKyAgIG1lbW9pemUgJ2M1JywgCisgICBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzMTk3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgpAQCAtMCwwICsxLDI1IEBACitGcm9tIGZhMDg1ZmVkZDljNDA2ZWRjZDRhMWEyNTZjMDI1ZDVmZjdmNmM2ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFRodSwgMjAgU2VwIDIwMDcgMTk6NDc6MTQgKzEwMDAKK1N1YmplY3Q6IERvY3VtZW50IHRoZSBOZXQ6OlNNVFAgJ1BvcnQnIG9wdGlvbgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzEwMDE5NQorQnVnOiBodHRwOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9MzYwMzgKKworUGF0Y2gtTmFtZTogZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCistLS0KKyBjcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbSBiL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQoraW5kZXggYWZkMDE3YS4uNmFlN2Q5ZSAxMDA2NDQKKy0tLSBhL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQorKysrIGIvY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtCitAQCAtNzM4LDYgKzczOCw3IEBAIE5ldDo6U01UUCB3aWxsIGF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgYWRkcmVzcyBmcm9tIHRoZSB2YWx1ZSBwYXNzZWQuCisgCisgQjxEZWJ1Zz4gLSBFbmFibGUgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgCisrQjxQb3J0PiAtIFNlbGVjdCBhIHBvcnQgb24gdGhlIHJlbW90ZSBob3N0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQgaXMgMjUpCisgCisgRXhhbXBsZToKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BlcmwtQ25uLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTY0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gMGVjZjgzZjI1OWRiMDljYjM4Y2IzN2M5YjIyZTcyYmUxODVhZmE4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEh1Z28gdmFuIGRlciBTYW5kZW4gPGh2QGNyeXB0Lm9yZz4KK0RhdGU6IFRodSwgMTEgSnVuIDIwMTUgMTI6MjU6NDAgKzAxMDAKK1N1YmplY3Q6IGZpeCAtQ25uIHBhcnNpbmcKKworQ29tbWl0IDIyZmYzMTMwNjggZm9yIFtwZXJsICMxMjM4MTRdIGluYWR2ZXJ0ZW50bHkgY2hhbmdlZCB0aGUgbG9naWMgd2hlbgorcGFyc2luZyBhIG51bWVyaWMgcGFyYW1ldGVyIHRvIHRoZSAtQyBvcHRpb24sIHN1Y2ggdGhhdCB0aGUgc3VjY2Vzc2Z1bGx5CitwYXJzZWQgbnVtYmVyIHdhcyBub3Qgc2F2ZWQgYXMgdGhlIG9wdGlvbiB2YWx1ZSBpZiBpdCBwYXJzZWQgdG8gdGhlIGVuZAorb2YgdGhlIGFyZ3VtZW50LgorCitCdWc6IGh0dHBzOi8vcnQucGVybC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0xMjUzODEKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4ODYzNgorT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL3Blcmw1LmdpdC5wZXJsLm9yZy9wZXJsLmdpdC9jb21taXQvODlkODRmZjk2NQorUGF0Y2gtTmFtZTogZml4ZXMvcGVybC1Dbm4uZGlmZgorLS0tCisgdC9ydW4vc3dpdGNoQy50IHwgIDcgKysrKysrLQorIHV0aWwuYyAgICAgICAgICB8IDE3ICsrKysrKysrLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL3N3aXRjaEMudCBiL3QvcnVuL3N3aXRjaEMudAoraW5kZXggZjZhYTg2OC4uNGY2M2MzYiAxMDA2NDQKKy0tLSBhL3QvcnVuL3N3aXRjaEMudAorKysrIGIvdC9ydW4vc3dpdGNoQy50CitAQCAtMTEsNyArMTEsNyBAQCBCRUdJTiB7CisgICAgIHNraXBfYWxsX2lmX21pbmlwZXJsKCctQyBhbmQgJEVOVntQRVJMX1VOSUNPREV9IGFyZSBkaXNhYmxlZCBvbiBtaW5pcGVybCcpOworIH0KKyAKKy1wbGFuKHRlc3RzID0+IDEzKTsKKytwbGFuKHRlc3RzID0+IDE0KTsKKyAKKyBteSAkcjsKKyAKK0BAIC0yNSw2ICsyNSwxMSBAQCAkciA9IHJ1bnBlcmwoIHN3aXRjaGVzID0+IFsgJy1DTycsICctdycgXSwKKyAgICAgICAgICAgICAgIHN0ZGVyciAgID0+IDEgKTsKKyBsaWtlKCAkciwgcXIvXiRiKD86XHI/XG4pPyQvcywgJy1DTzogbm8gd2FybmluZyBvbiBVVEYtOCBvdXRwdXQnICk7CisgCisrJHIgPSBydW5wZXJsKCBzd2l0Y2hlcyA9PiBbICctQzInLCAnLXcnIF0sCisrCSAgICAgIHByb2cgICAgID0+ICdwcmludCBjaHIoMjU2KScsCisrICAgICAgICAgICAgICBzdGRlcnIgICA9PiAxICk7CisrbGlrZSggJHIsIHFyL14kYig/OlxyP1xuKT8kL3MsICctQzI6IG5vIHdhcm5pbmcgb24gVVRGLTggb3V0cHV0JyApOworKworIFNLSVA6IHsKKyAgICAgaWYgKGV4aXN0cyAkRU5We1BFUkxfVU5JQ09ERX0gJiYKKyAJKCRFTlZ7UEVSTF9VTklDT0RFfSBlcSAiIiB8fCAkRU5We1BFUkxfVU5JQ09ERX0gPX4gL1tTT10vKSkgeworZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYworaW5kZXggOGNmNjJmNS4uZWUyMzMxNCAxMDA2NDQKKy0tLSBhL3V0aWwuYworKysrIGIvdXRpbC5jCitAQCAtNDQyMCwxNiArNDQyMCwxNSBAQCBQZXJsX3BhcnNlX3VuaWNvZGVfb3B0cyhwVEhYXyBjb25zdCBjaGFyICoqcG9wdCkKKyAgICAgICAgaWYgKGlzRElHSVQoKnApKSB7CisgICAgICAgICAgICAgY29uc3QgY2hhciogZW5kcHRyOworICAgICAgICAgICAgIFVWIHV2OworLSAgICAgICAgICAgIGlmIChncm9rX2F0b1VWKHAsICZ1diwgJmVuZHB0cikKKy0gICAgICAgICAgICAgICAgJiYgdXYgPD0gVTMyX01BWAorLSAgICAgICAgICAgICAgICAmJiAocCA9IGVuZHB0cikKKy0gICAgICAgICAgICAgICAgJiYgKnAgJiYgKnAgIT0gJ1xuJyAmJiAqcCAhPSAnXHInCistICAgICAgICAgICAgKSB7CisrICAgICAgICAgICAgaWYgKGdyb2tfYXRvVVYocCwgJnV2LCAmZW5kcHRyKSAmJiB1diA8PSBVMzJfTUFYKSB7CisgICAgICAgICAgICAgICAgIG9wdCA9IChVMzIpdXY7CistICAgICAgICAgICAgICAgIGlmIChpc1NQQUNFKCpwKSkKKy0gICAgICAgICAgICAgICAgICAgIGdvdG8gdGhlX2VuZF9vZl90aGVfb3B0c19wYXJzZXI7CistICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVua25vd24gVW5pY29kZSBvcHRpb24gbGV0dGVyICclYyciLCAqcCk7CisrICAgICAgICAgICAgICAgIHAgPSBlbmRwdHI7CisrICAgICAgICAgICAgICAgIGlmIChwICYmICpwICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJykgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU1BBQ0UoKnApKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdGhlX2VuZF9vZl90aGVfb3B0c19wYXJzZXI7CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgUGVybF9jcm9hayhhVEhYXyAiVW5rbm93biBVbmljb2RlIG9wdGlvbiBsZXR0ZXIgJyVjJyIsICpwKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWNhODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RfbWFuX3JlcHJvZHVjaWJsZV9kYXRlLmRpZmYKQEAgLTAsMCArMSwxNzAgQEAKK0Zyb20gOTA1N2FkYzEwNmQ2YmJlZjUzYzllNzA2NTIzY2Q5NGYxYTdhMDhkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDMwIEF1ZyAyMDE0IDE1OjEwOjQxIC0wNzAwCitTdWJqZWN0OiBTdXBwb3J0IFBPRF9NQU5fREFURSBpbiBQb2Q6Ok1hbiBmb3IgdGhlIGxlZnQtaGFuZCBmb290ZXIKKworSG9ub3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBPRF9NQU5fREFURSBhbmQgdXNlIGl0cyBjb250ZW50cywgaWYKK3NldCwgYXMgdGhlIHZhbHVlIG9mIHRoZSBsZWZ0LWhhbmQgZm9vdGVyIGlmIHRoZSBkYXRlIG9wdGlvbiBpcyBub3QKK3NldCwgb3ZlcnJpZGluZyB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbnB1dCBmaWxlLiAgVGhpcyBpcyBwcmltYXJpbHkKK3VzZWZ1bCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGJ1aWxkcyBvZiB0aGUgc2FtZSBvdXRwdXQgZmlsZSBnaXZlbiB0aGUKK3NhbWUgc291Y2UgYW5kIFBvZDo6TWFuIHZlcnNpb24sIGV2ZW4gd2hlbiBmaWxlIHRpbWVzdGFtcHMgbWF5IG5vdCBiZQorY29uc2lzdGVudC4gIFRoYW5rcywgTmlrbyBUeW5pLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc1OTQwNQorT3JpZ2luOiB1cHN0cmVhbQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSAgfCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgfCAyOSArKysrKysrKysrKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggNzJjYTlmZi4uMDUzNjY2MiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTg3NiwyNSArODc2LDQyIEBAIHN1YiBkZXZpc2VfdGl0bGUgeworIH0KKyAKKyAjIERldGVybWluZSB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgYW5kIHJldHVybiB0aGF0LCBwcm9wZXJseSBmb3JtYXR0ZWQgaW4gSVNPCistIyBmb3JtYXQuICBJZiB3ZSBjYW4ndCBnZXQgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCwgaW5zdGVhZCB1c2UgdGhlCistIyBjdXJyZW50IHRpbWUuICBQb2Q6OlNpbXBsZSByZXR1cm5zIGEgY29tcGxldGVseSB1bnVzZWZ1bCBzdHJpbmdpZmllZCBmaWxlCistIyBoYW5kbGUgYXMgdGhlIHNvdXJjZV9maWxlbmFtZSBmb3IgaW5wdXQgZnJvbSBhIGZpbGUgaGFuZGxlLCBzbyB3ZSBoYXZlIHRvCistIyBkZWFsIHdpdGggdGhhdCBhcyB3ZWxsLgorKyMgZm9ybWF0LgorKyMKKysjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIHRoYXQgb3ZlcnJpZGVzIGFueXRoaW5nIGVsc2UuICBUaGlzIGNhbiBiZSB1c2VkIGZvcgorKyMgcmVwcm9kdWNpYmxlIGdlbmVyYXRpb24gb2YgdGhlIHNhbWUgZmlsZSBldmVuIGlmIHRoZSBpbnB1dCBmaWxlIHRpbWVzdGFtcHMKKysjIGFyZSB1bnByZWRpY3RhYmxlIG9yIHRoZSBQT0QgY29tcyBmcm9tIHN0YW5kYXJkIGlucHV0LgorKyMKKysjIE90aGVyd2lzZSwgdXNlIHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgaWYgd2UgY2FuIHN0YXQgaXQuICBCZQorKyMgYXdhcmUgdGhhdCBQb2Q6OlNpbXBsZSByZXR1cm5zIHRoZSBzdHJpbmdpZmljYXRpb24gb2YgdGhlIGZpbGUgaGFuZGxlIGFzCisrIyBzb3VyY2VfZmlsZW5hbWUgZm9yIGlucHV0IGZyb20gYSBmaWxlIGhhbmRsZSwgc28gd2UnbGwgc3RhdCBzb21lIHJhbmRvbSByZWYKKysjIHN0cmluZyBpbiB0aGF0IGNhc2UuICBJZiB0aGF0IGZhaWxzLCBpbnN0ZWFkIHVzZSB0aGUgY3VycmVudCB0aW1lLgorKyMKKysjICRzZWxmIC0gUG9kOjpNYW4gb2JqZWN0LCB1c2VkIHRvIGdldCB0aGUgc291cmNlIGZpbGUKKysjCisrIyBSZXR1cm5zOiBZWVlZLU1NLUREIGRhdGUgc3VpdGFibGUgZm9yIHRoZSBsZWZ0LWhhbmQgZm9vdGVyCisgc3ViIGRldmlzZV9kYXRlIHsKKyAgICAgbXkgKCRzZWxmKSA9IEBfOworKworKyAgICAjIElmIFBPRF9NQU5fREFURSBpcyBzZXQsIGFsd2F5cyB1c2UgaXQuCisrICAgIGlmICgkRU5We1BPRF9NQU5fREFURX0pIHsKKysgICAgICAgIHJldHVybiAkRU5We1BPRF9NQU5fREFURX07CisrICAgIH0KKysKKysgICAgIyBPdGhlcndpc2UsIGdldCB0aGUgaW5wdXQgZmlsZW5hbWUgYW5kIHRyeSB0byBzdGF0IGl0LiAgSWYgdGhhdCBmYWlscywKKysgICAgIyB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKyAgICAgbXkgJGlucHV0ID0gJHNlbGYtPnNvdXJjZV9maWxlbmFtZTsKKyAgICAgbXkgJHRpbWU7CisgICAgIGlmICgkaW5wdXQpIHsKKy0gICAgICAgICR0aW1lID0gKHN0YXQgJGlucHV0KVs5XSB8fCB0aW1lOworKyAgICAgICAgJHRpbWUgPSAoc3RhdCgkaW5wdXQpKVs5XSB8fCB0aW1lKCk7CisgICAgIH0gZWxzZSB7CistICAgICAgICAkdGltZSA9IHRpbWU7CisrICAgICAgICAkdGltZSA9IHRpbWUoKTsKKyAgICAgfQorIAorLSAgICAjIENhbid0IHVzZSBQT1NJWDo6c3RyZnRpbWUoKSwgd2hpY2ggdXNlcyBGY250bCwgYmVjYXVzZSBNYWtlTWFrZXIKKy0gICAgIyB1c2VzIHRoaXMgYW5kIGl0IGhhcyB0byB3b3JrIGluIHRoZSBjb3JlIHdoaWNoIGNhbid0IGxvYWQgZHluYW1pYworLSAgICAjIGxpYnJhcmllcy4KKy0gICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSAkdGltZSlbNSw0LDNdOworLSAgICByZXR1cm4gc3ByaW50ZiAoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKysgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKysgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorKyAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lKCR0aW1lKSlbNSw0LDNdOworKyAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KKyAKKyAjIFByaW50IG91dCB0aGUgcHJlYW1ibGUgYW5kIHRoZSB0aXRsZS4gIFRoZSBtZWFuaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gLlRICitAQCAtMTYzMiw2ICsxNjQ5LDE1IEBAIGFyZ3VtZW50LgorIFNldHMgdGhlIGNlbnRlcmVkIHBhZ2UgaGVhZGVyIHRvIHVzZSBpbnN0ZWFkIG9mICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwKKyBEb2N1bWVudGF0aW9uIi4KKyAKKys9aXRlbSBkYXRlCisrCisrU2V0cyB0aGUgbGVmdC1oYW5kIGZvb3Rlci4gIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZSBjb250ZW50cyBvZiB0aGUKKytlbnZpcm9ubWVudCB2YXJpYWJsZSBQT0RfTUFOX0RBVEUsIGlmIHNldCwgd2lsbCBiZSB1c2VkLiAgRmFpbGluZyB0aGF0LAorK3RoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IHRpbWUKKytpZiBzdGF0KCkgY2FuJ3QgZmluZCB0aGF0IGZpbGUgKHdoaWNoIHdpbGwgYmUgdGhlIGNhc2UgaWYgdGhlIGlucHV0IGlzCisrZnJvbSBDPFNURElOPikuICBJZiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlIG1vZGlmaWNhdGlvbiBkYXRlIG9yIHRoZQorK2N1cnJlbnQgdGltZSwgaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcyBDPFlZWVktTU0tREQ+LgorKworID1pdGVtIGVycm9ycworIAorIEhvdyB0byByZXBvcnQgZXJyb3JzLiAgQzxkaWU+IHNheXMgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9uIGFueSBQT0QKK0BAIC0xNjQyLDEzICsxNjY4LDYgQEAgUE9EIGVycm9ycyBlbnRpcmVseSwgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAKKyBUaGUgZGVmYXVsdCBpcyBDPHBvZD4uCisgCistPWl0ZW0gZGF0ZQorLQorLVNldHMgdGhlIGxlZnQtaGFuZCBmb290ZXIuICBCeSBkZWZhdWx0LCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0CistZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh0aGUKKy1jYXNlIGlmIHRoZSBpbnB1dCBpcyBmcm9tIEM8U1RESU4+KSwgYW5kIHRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzCistQzxZWVlZLU1NLUREPi4KKy0KKyA9aXRlbSBmaXhlZAorIAorIFRoZSBmaXhlZC13aWR0aCBmb250IHRvIHVzZSBmb3IgdmVyYmF0aW0gdGV4dCBhbmQgY29kZS4gIERlZmF1bHRzIHRvCitAQCAtMTgxMCw2ICsxODI5LDIwIEBAIG9wdGlvbiB3YXMgc2V0IHRvIEM8ZGllPi4KKyAKKyA9YmFjaworIAorKz1oZWFkMSBFTlZJUk9OTUVOVAorKworKz1vdmVyIDQKKysKKys9aXRlbSBQT0RfTUFOX0RBVEUKKysKKytJZiBzZXQsIHRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC1oYW5kIGZvb3RlciB1bmxlc3MgdGhlCisrQzxkYXRlPiBvcHRpb24gaXMgZXhwbGljaXRseSBzZXQsIG92ZXJyaWRpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5wdXQKKytmaWxlIG9yIHRoZSBjdXJyZW50IHRpbWUuICBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgdG8gZW5zdXJlIHJlcHJvZHVjaWJsZQorK2J1aWxkcyBvZiB0aGUgc2FtZSBvdXRwdXQgZmlsZSBnaXZlbiB0aGUgc2FtZSBzb3VjZSBhbmQgUG9kOjpNYW4gdmVyc2lvbiwKKytldmVuIHdoZW4gZmlsZSB0aW1lc3RhbXBzIG1heSBub3QgYmUgY29uc2lzdGVudC4KKysKKys9YmFjaworKworID1oZWFkMSBCVUdTCisgCisgRW5jb2RpbmcgaGFuZGxpbmcgYXNzdW1lcyB0aGF0IFBlcmxJTyBpcyBhdmFpbGFibGUgYW5kIGRvZXMgbm90IHdvcmsKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IDNjY2U5ZjUuLmM2MTBkZDkgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTEsMTUgKzEsMjggQEAKKy0jIS91c3IvYmluL3BlcmwgLXcKKy0KKy0jIEluIG9yZGVyIGZvciBNYWtlTWFrZXIgdG8gYnVpbGQgaW4gdGhlIGNvcmUsIG5vdGhpbmcgY2FuIHVzZQorLSMgRmNudGwgd2hpY2ggaW5jbHVkZXMgUE9TSVguICBkZXZpc2VfZGF0ZSgpJ3MgdXNlIG9mIHN0cmZ0aW1lKCkKKy0jIHdhcyByZXBsYWNlZC4gIFRoaXMgdGVzdHMgdGhhdCBpdCdzIGlkZW50aWNhbC4KKysjIS91c3IvYmluL3BlcmwKKysjCisrIyBJbiBvcmRlciBmb3IgTWFrZU1ha2VyIHRvIGJ1aWxkIGluIHRoZSBjb3JlLCBub3RoaW5nIGNhbiB1c2UgRmNudGwgd2hpY2gKKysjIGluY2x1ZGVzIFBPU0lYLiAgZGV2aXNlX2RhdGUoKSdzIHVzZSBvZiBzdHJmdGltZSgpIHdhcyByZXBsYWNlZC4gIFRoaXMgdGVzdHMKKysjIHRoYXQgaXQncyBpZGVudGljYWwuICBJdCBhbHNvIHRlc3RzIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGhlIFBPRF9NQU5fREFURQorKyMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgCisrdXNlIDUuMDA2OworIHVzZSBzdHJpY3Q7CistCistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTsKKyt1c2Ugd2FybmluZ3M7CisgCisgdXNlIFBvZDo6TWFuOworIHVzZSBQT1NJWCBxdyhzdHJmdGltZSk7CisgCisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKysKKysjIENoZWNrIHRoYXQgdGhlIHJlc3VsdHMgb2YgZGV2aWNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZS4gIFRoZXJlIGlzIG5vIGlucHV0CisrIyBmaWxlIG5hbWUsIHNvIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKyBteSAkcGFyc2VyID0gUG9kOjpNYW4tPm5ldzsKKy1pcyAkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgc3RyZnRpbWUoIiVZLSVtLSVkIiwgbG9jYWx0aW1lKTsKKytpcygKKysgICAgJHBhcnNlci0+ZGV2aXNlX2RhdGUsCisrICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGxvY2FsdGltZSgpKSwKKysgICAgJ2RldmlzZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUnCisrKTsKKysKKysjIFNldCB0aGUgb3ZlcnJpZGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGVuc3VyZSB0aGF0IGl0J3MgaG9ub3JlZC4KKytsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSAnMjAxNC0wMS0wMSc7CisraXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsICcyMDE0LTAxLTAxJywgJ2RldmlzZV9kYXRlIGhvbm9ycyBQT0RfTUFOX0RBVEUnKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYmJmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gMTgzYmI0YWY3YWQ4NjJhMmNmMzFkMGRjYjNkZDQ1YzEwMGY3Njc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAyMjoyMToyNSAtMDcwMAorU3ViamVjdDogU3VwcG9ydCBhbiBlbXB0eSBQT0RfTUFOX0RBVEUgZW52aXJvbm1lbnQgdmFyaWFibGUKKworT25lIG1heSB3YW50IHRvIHNldCB0aGlzIHRvIGFuIGVtcHR5IHN0cmluZy4gIEhhbmRsZSB0aGF0IGNvcnJlY3RseS4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPWUwZTlmY2I1M2U4ZmM5NTRiMmIxOTU1Mzg1ZWVhMThjMjdmODY5YWYKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gIHwgMiArLQorIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCB8IDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCAzNjU4OTJlLi44OTk3YTE1IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtODk0LDcgKzg5NCw3IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgICAgIG15ICgkc2VsZikgPSBAXzsKKyAKKyAgICAgIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCBhbHdheXMgdXNlIGl0LgorLSAgICBpZiAoJEVOVntQT0RfTUFOX0RBVEV9KSB7CisrICAgIGlmIChkZWZpbmVkKCRFTlZ7UE9EX01BTl9EQVRFfSkpIHsKKyAgICAgICAgIHJldHVybiAkRU5We1BPRF9NQU5fREFURX07CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK2luZGV4IDlkYTlkMWIuLjI3MjcxZDkgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorQEAgLTEyLDcgKzEyLDcgQEAgdXNlIHdhcm5pbmdzOworIHVzZSBQb2Q6Ok1hbjsKKyB1c2UgUE9TSVggcXcoc3RyZnRpbWUpOworIAorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMzsKKyAKKyAjIENoZWNrIHRoYXQgdGhlIHJlc3VsdHMgb2YgZGV2aWNlX2RhdGUgbWF0Y2hlcyBzdHJmdGltZS4gIFRoZXJlIGlzIG5vIGlucHV0CisgIyBmaWxlIG5hbWUsIHNvIHRoaXMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KK0BAIC0yNiwzICsyNiw3IEBAIGlzKAorICMgU2V0IHRoZSBvdmVycmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgZW5zdXJlIHRoYXQgaXQncyBob25vcmVkLgorIGxvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9ICcyMDE0LTAxLTAxJzsKKyBpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgJzIwMTQtMDEtMDEnLCAnZGV2aXNlX2RhdGUgaG9ub3JzIFBPRF9NQU5fREFURScpOworKworKyMgQ2hlY2sgdGhhdCBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBob25vcmVkLgorK2xvY2FsICRFTlZ7UE9EX01BTl9EQVRFfSA9IHF7fTsKKytpcygkcGFyc2VyLT5kZXZpc2VfZGF0ZSwgcXt9LCAnZGV2aXNlX2RhdGUgaG9ub3JzIGVtcHR5IFBPRF9NQU5fREFURScpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXBpcGUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2MDM2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYKQEAgLTAsMCArMSwxMDkgQEAKK0Zyb20gNzY3MWQxMDFiYWE3NWQ3YTc5YmZiZDhjNzVjMTU5NWZiYjNmNTNiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPgorRGF0ZTogU2F0LCA3IEZlYiAyMDE1IDE5OjAzOjM0IC0wODAwCitTdWJqZWN0OiBCZXR0ZXIgZXJyb3JzIGZvciBtYW4gcGFnZXMgZnJvbSBzdGFuZGFyZCBpbnB1dAorCitbUG9kOjpNYW5dIEF0dGVtcHQgdG8gZGV0ZWN0IGlmIHRoZSBpbnB1dCBjYW1lIGZyb20gYSBwaXBlIGFuZAordGhlcmVmb3JlIGhhcyBhIGNvbXBsZXRlbHkgdW5oZWxwZnVsIChhbmQgbm9ucmVwcm9kdWNpYmxlKSBzb3VyY2UgZmlsZQorbmFtZSwgYW5kIGRpYWdub3NlIHRoaXMgYXMgYW4gZXJyb3IuICBEb2N1bWVudCB0aGF0IHRoZSBuYW1lIG9wdGlvbgorKC0tbmFtZSB0byBwb2QybWFuKSBpcyByZXF1aXJlZCB3aGVuIHByb2Nlc3NpbmcgUE9EIHNvdXJjZSBmcm9tCitzdGFuZGFyZCBpbnB1dC4gIChEZWJpYW4gQnVnIzc3NzQwNSkKKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPWQ5ODg3MmU0NmM5Mzg2MWI3YWJhMTQ5NDllMTI1ODcxMjA4N2RjNTUKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NzQwNQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXBpcGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gICAgIHwgMTUgKysrKysrKysrKysrKysrCisgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIHwgIDQgKysrKworIGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQgICB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IGNwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDg5OTdhMTUuLjk2OWVhZmYgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC04MjgsNiArODI4LDE3IEBAIHN1YiBkZXZpc2VfdGl0bGUgeworICAgICAkc2VjdGlvbiA9IDMgaWYgKCEkJHNlbGZ7c2VjdGlvbn0gJiYgJG5hbWUgPX4gL1wucG1cei9pKTsKKyAgICAgJG5hbWUgPX4gcy9cLnAob2R8W2xtXSlcei8vaTsKKyAKKysgICAgIyBJZiBQb2Q6OlBhcnNlciBnYXZlIHVzIGFuIElPOjpGaWxlIHJlZmVyZW5jZSBhcyB0aGUgc291cmNlIGZpbGUgbmFtZSwKKysgICAgIyBjb252ZXJ0IHRoYXQgdG8gdGhlIGVtcHR5IHN0cmluZyBhcyB3ZWxsLiAgVGhlbiwgaWYgd2UgZG9uJ3QgaGF2ZSBhCisrICAgICMgdmFsaWQgbmFtZSwgZW1pdCBhIHdhcm5pbmcgYW5kIGNvbnZlcnQgaXQgdG8gU1RESU4uCisrICAgIGlmICgkbmFtZSA9fiAvXklPOjpGaWxlKD86PVx3KylcKDB4W1xkYS1mXStcKSQvaSkgeworKyAgICAgICAgJG5hbWUgPSAnJzsKKysgICAgfQorKyAgICBpZiAoJG5hbWUgZXEgJycpIHsKKysgICAgICAgICRzZWxmLT53aGluZSAoMSwgJ05vIG5hbWUgZ2l2ZW4gZm9yIGRvY3VtZW50Jyk7CisrICAgICAgICAkbmFtZSA9ICdTVERJTic7CisrICAgIH0KKysKKyAgICAgIyBJZiB0aGUgc2VjdGlvbiBpc24ndCAzLCB0aGVuIHRoZSBuYW1lIGRlZmF1bHRzIHRvIGp1c3QgdGhlIGJhc2VuYW1lIG9mCisgICAgICMgdGhlIGZpbGUuICBPdGhlcndpc2UsIGFzc3VtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb2R1bGUuICBXZSB3YW50IHRvCisgICAgICMgZmlndXJlIG91dCB0aGUgZnVsbCBtb2R1bGUgbmFtZSBmcm9tIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBidXQgd2UgZG9uJ3QKK0BAIC0xNzA1LDYgKzE3MTYsMTAgQEAgbW9kdWxlIHBhdGguICBJZiBpdCBpcywgYSBwYXRoIGxpa2UgQzwuLi4vbGliL1BvZC9NYW4ucG0+IGlzIGNvbnZlcnRlZCBpbnRvCisgYSBuYW1lIGxpa2UgQzxQb2Q6Ok1hbj4uICBUaGlzIG9wdGlvbiwgaWYgZ2l2ZW4sIG92ZXJyaWRlcyBhbnkgYXV0b21hdGljCisgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbmFtZS4KKyAKKytJZiBnZW5lcmF0aW5nIGEgbWFudWFsIHBhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dCwgdGhpcyBvcHRpb24gaXMgcmVxdWlyZWQsCisrc2luY2UgdGhlcmUncyBvdGhlcndpc2Ugbm8gd2F5IGZvciBQb2Q6Ok1hbiB0byBrbm93IHdoYXQgdG8gdXNlIGZvciB0aGUKKyttYW51YWwgcGFnZSBuYW1lLgorKworID1pdGVtIG5vdXJscworIAorIE5vcm1hbGx5LCBMWjw+PD4gZm9ybWF0dGluZyBjb2RlcyB3aXRoIGEgVVJMIGJ1dCBhbmNob3IgdGV4dCBhcmUgZm9ybWF0dGVkCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitpbmRleCAzODY5NWY4Li40M2UzNWRmIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCisrKysgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK0BAIC0yMzYsNiArMjM2LDEwIEBAIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBwcm9iYWJseSBub3QgdXNlZnVsIHdoZW4gY29udmVydGluZyBtdWx0aXBsZSBQT0QKKyBmaWxlcyBhdCBvbmNlLiAgVGhlIGNvbnZlbnRpb24gZm9yIFVuaXggbWFuIHBhZ2VzIGZvciBjb21tYW5kcyBpcyBmb3IgdGhlCisgbWFuIHBhZ2UgdGl0bGUgdG8gYmUgaW4gYWxsLXVwcGVyY2FzZSBldmVuIGlmIHRoZSBjb21tYW5kIGlzbid0LgorIAorK1doZW4gY29udmVydGluZyBQT0Qgc291cmNlIGZyb20gc3RhbmRhcmQgaW5wdXQsIHRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLAorK3NpbmNlIHRoZXJlJ3Mgb3RoZXJ3aXNlIG5vIHdheSB0byBrbm93IHdoYXQgdG8gdXNlIGFzIHRoZSBuYW1lIG9mIHRoZQorK21hbnVhbCBwYWdlLgorKworID1pdGVtIEI8LS1ub3VybHM+CisgCisgTm9ybWFsbHksIExaPD48PiBmb3JtYXR0aW5nIGNvZGVzIHdpdGggYSBVUkwgYnV0IGFuY2hvciB0ZXh0IGFyZSBmb3JtYXR0ZWQKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjg2Mzk0NDEKKy0tLSAvZGV2L251bGwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIS91c3IvYmluL3BlcmwKKysjCisrIyBUZXN0cyBmb3IgdGhlIGF1dG9tYXRpYyBkZXRlcm1pbmF0aW9uIG9mIHRoZSBtYW51YWwgcGFnZSB0aXRsZSBpZiBub3QKKysjIHNwZWNpZmllZCB2aWEgb3B0aW9ucyB0byBwb2QybWFuIG9yIHRoZSBQb2Q6Ok1hbiBjb25zdHJ1Y3Rvci4KKysKKyt1c2UgNS4wMDY7CisrdXNlIHN0cmljdDsKKyt1c2Ugd2FybmluZ3M7CisrCisrdXNlIEZpbGU6OlNwZWM7CisrdXNlIElPOjpGaWxlOworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7CisrCisrQkVHSU4geworKyAgICB1c2Vfb2soJ1BvZDo6TWFuJyk7CisrfQorKworKyMgQ3JlYXRlIGEgcGFyc2VyIGFuZCBzZXQgaXQgdXAgd2l0aCBhbiBpbnB1dCBzb3VyY2UuICBUaGVyZSBpc24ndCBhIHdheSB0byBkbworKyMgdGhpcyBpbiBQb2Q6OlNpbXBsZSB3aXRob3V0IGFjdHVhbGx5IHBhcnNpbmcgdGhlIGRvY3VtZW50LCBzbyBzZW5kIHRoZQorKyMgb3V0cHV0IHRvIGEgc3RyaW5nIHRoYXQgd2UnbGwgaWdub3JlLgorK215ICRwYXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCd0JywgJ2RhdGEnLCAnYmFzaWMucG9kJyk7CisrbXkgJGhhbmRsZSA9IElPOjpGaWxlLT5uZXcoJHBhdGgsICdyJyk7CisrbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXcoZXJyb3JzID0+ICdwb2QnKTsKKytteSAkb3V0cHV0OworKyRwYXJzZXItPm91dHB1dF9zdHJpbmcoXCRvdXRwdXQpOworKyRwYXJzZXItPnBhcnNlX2ZpbGUoJGhhbmRsZSk7CisrCisrIyBDaGVjayB0aGUgcmVzdWx0cyBvZiBkZXZpc2VfdGl0bGUgZm9yIHRoaXMuICBXZSBzaG91bGQgZ2V0IGJhY2sgU1RESU4sIGFuZAorKyMgd2Ugc2hvdWxkIGhhdmUgcmVwb3J0ZWQgYW4gZXJyb3IuCisrbXkgKCRuYW1lLCAkc2VjdGlvbikgPSAkcGFyc2VyLT5kZXZpc2VfdGl0bGU7CisraXMoJG5hbWUsICdTVERJTicsICdkZXZpc2VfdGl0bGUgdXNlcyBTVERJTiBmb3IgZmlsZSBoYW5kbGUgaW5wdXQnKTsKKytvaygkcGFyc2VyLT5lcnJvcnNfc2VlbiwgJy4uLmFuZCBlcnJvcnMgd2VyZSBzZWVuJyk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMtZG9jcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZGZlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgpAQCAtMCwwICsxLDg2IEBACitGcm9tIDYxOTg4NTZiNTMyM2Q2MjA0MDk0MjkzZjAxYjg5MDQ3MjYxOGYxODIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMjA6NDk6MDcgLTA3MDAKK1N1YmplY3Q6IERvY3VtZW50YXRpb24gYW5kIHRlc3Qgc3VpdGUgdXBkYXRlcyBmb3IgVVRDIGZpeAorCitVcGRhdGUgdGhlIFBvZDo6TWFuIGFuZCBwb2QybWFuIGRvY3VtZW50YXRpb24gYW5kIHRoZSB0ZXN0IHN1aXRlCitmb3IgdGhlIG5ldyBVVEMtYmFzZWQgZGVmYXVsdCBwYWdlIGZvb3RlciwgYW5kIGFkZCBhIENoYW5nZXMKK2VudHJ5LgorCisoYmFja3BvcnRlZCB0byBQZXJsIDUuMjAuMiBieSBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+KQorCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vZ2l0LmV5cmllLm9yZy8/cD1wZXJsL3BvZGxhdG9ycy5naXQ7YT1jb21taXRkaWZmO2g9NTJkYjkzYmY4MGU0YTA2Zjg0OTdlNGViYWRlMDUwNmI2ZWUwZTcwZAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgwMjU5CitQYXRjaC1OYW1lOiBmaXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gICAgIHwgIDYgKysrKystCisgY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIHwgMTEgKysrKysrLS0tLS0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgICAgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IGMzYmEyMDEuLjM2NTg5MmUgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC05MTAsNiArOTEwLDggQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAKKyAgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKyAgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorKyAgICAjIFVzZSBnbXRpbWUgaW5zdGVhZCBvZiBsb2NhbHRpbWUgc28gdGhhdCB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlIGRvZXMgbm90CisrICAgICMgZGVwZW5kIG9uIHRoZSBsb2NhbCB0aW1lIHpvbmUgc2V0dGluZyBhbmQgaXMgbW9yZSByZXByb2R1Y2libGUKKyAgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGdtdGltZSgkdGltZSkpWzUsNCwzXTsKKyAgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CitAQCAtMTY1Niw3ICsxNjU4LDkgQEAgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9EX01BTl9EQVRFLCBpZiBzZXQsIHdpbGwgYmUgdXNlZC4gIEZhaWxpbmcgdGhhdCwKKyB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCB0aW1lCisgaWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSBpbnB1dCBpcworIGZyb20gQzxTVERJTj4pLiAgSWYgb2J0YWluZWQgZnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZSBvciB0aGUKKy1jdXJyZW50IHRpbWUsIGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgQzxZWVlZLU1NLUREPi4KKytjdXJyZW50IHRpbWUsIHRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEM8WVlZWS1NTS1ERD4gYW5kIHdpbGwgYmUgYmFzZWQKKytvbiBVVEMgKHNvIHRoYXQgdGhlIG91dHB1dCB3aWxsIGJlIHJlcHJvZHVjaWJsZSByZWdhcmRsZXNzIG9mIGxvY2FsIHRpbWUKKyt6b25lKS4KKyAKKyA9aXRlbSBlcnJvcnMKKyAKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK2luZGV4IDZhZjM0NzQuLjM4Njk1ZjggMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKKysrKyBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorQEAgLTE3NCw5ICsxNzQsMTAgQEAgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIiwgYnV0IGFsc28gc2VlIEI8LS1vZmZpY2lhbD4gYmVsb3cuCisgCisgPWl0ZW0gQjwtZD4gSTxzdHJpbmc+LCBCPC0tZGF0ZT49STxzdHJpbmc+CisgCistU2V0IHRoZSBsZWZ0LWhhbmQgZm9vdGVyIHN0cmluZyB0byB0aGlzIHZhbHVlLiAgQnkgZGVmYXVsdCwgdGhlIG1vZGlmaWNhdGlvbgorLWRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmIGlucHV0IGNvbWVzIGZyb20KKy1DPFNURElOPi4KKytTZXQgdGhlIGxlZnQtaGFuZCBmb290ZXIgc3RyaW5nIHRvIHRoaXMgdmFsdWUuICBCeSBkZWZhdWx0LCB0aGUKKyttb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQgZmlsZSB3aWxsIGJlIHVzZWQsIG9yIHRoZSBjdXJyZW50IGRhdGUgaWYKKytpbnB1dCBjb21lcyBmcm9tIEM8U1RESU4+LCBhbmQgd2lsbCBiZSBiYXNlZCBvbiBVVEMgKHNvIHRoYXQgdGhlIG91dHB1dAorK3dpbGwgYmUgcmVwcm9kdWNpYmxlIHJlZ2FyZGxlc3Mgb2YgbG9jYWwgdGltZSB6b25lKS4KKyAKKyA9aXRlbSBCPC1lcnJvcnM+PUk8c3R5bGU+CisgCitAQCAtMzgzLDggKzM4NCw4IEBAIEI8cG9kMm1hbj4gYnkgTGFycnkgV2FsbCBhbmQgVG9tIENocmlzdGlhbnNlbi4KKyAKKyA9aGVhZDEgQ09QWVJJR0hUIEFORCBMSUNFTlNFCisgCistQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDEsIDIwMDQsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTMgUnVzcworLUFsbGJlcnkgPHJyYUBzdGFuZm9yZC5lZHU+LgorK0NvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0LAorKzIwMTUgUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+LgorIAorIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCBjNjEwZGQ5Li45ZGE5ZDFiIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xOSw3ICsxOSw3IEBAIHVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisgbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXc7CisgaXMoCisgICAgICRwYXJzZXItPmRldmlzZV9kYXRlLAorLSAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBsb2NhbHRpbWUoKSksCisrICAgIHN0cmZ0aW1lKCclWS0lbS0lZCcsIGdtdGltZSgpKSwKKyAgICAgJ2RldmlzZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUnCisgKTsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ3YjlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYzc5Njc3NWNkYmQyY2NlMDZhY2JiN2FjMzU1MTg3ZDQwNjMwMTdhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIExhbWIgPGxhbWJ5QGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDIwOjQyOjUzIC0wNzAwCitTdWJqZWN0OiBNYWtlIHRoZSBlbWJlZGRlZCBkYXRlIGZyb20gUG9kOjpNYW4gcmVwcm9kdWNpYmxlCisKK1doaWxlIHdvcmtpbmcgb24gdGhlICJyZXByb2R1Y2libGUgYnVpbGRzIiBlZmZvcnQsIHdlIGhhdmUgbm90aWNlZAordGhhdCBQb2Q6Ok1hbiBnZW5lcmF0ZXMgb3V0cHV0IHRoYXQgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAordGltZXpvbmUuCisKK1RoZSBhdHRhY2hlZCBwYXRjaCBmaXhlcyB0aGlzIGJ5IHVzaW5nIEdNVCAoflVUQykgZGF0ZXMgaW5zdGVhZC4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPTkxM2ZiYjJiZDJjZTA3MWUyMDEyODYyOTMwMmFlMjg1MjU1NGNhZDQKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXV0Yy5kaWZmCistLS0KKyBjcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDA1MzY2NjIuLmMzYmEyMDEgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC05MTAsNyArOTEwLDcgQEAgc3ViIGRldmlzZV9kYXRlIHsKKyAKKyAgICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyIHVzZXMKKyAgICAgIyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMgbGlicmFyaWVzLgorLSAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAobG9jYWx0aW1lKCR0aW1lKSlbNSw0LDNdOworKyAgICBteSAoJHllYXIsICRtb250aCwgJGRheSkgPSAoZ210aW1lKCR0aW1lKSlbNSw0LDNdOworICAgICByZXR1cm4gc3ByaW50ZigiJTA0ZC0lMDJkLSUwMmQiLCAkeWVhciArIDE5MDAsICRtb250aCArIDEsICRkYXkpOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI0OThiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmCkBAIC0wLDAgKzEsMTUzIEBACitGcm9tIGQ5ZDUzNWVmOTdmNTdhZjZlOTcyODA3NTk0NGMzM2YzYjBiNTM3MmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogUmVzcGVjdCB1bWFzayBkdXJpbmcgaW5zdGFsbGF0aW9uCisKK1RoaXMgaXMgbmVlZGVkIHRvIHNhdGlzZnkgRGViaWFuIHBvbGljeSByZWdhcmRpbmcgZ3JvdXAtd3JpdGFibGUKK3NpdGUgZGlyZWN0b3JpZXMuCisKK1BhdGNoLU5hbWU6IGZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtICAgfCAxOCArKysrKysrKystLS0tLS0tLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0gYi9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KK2luZGV4IDFlOGFjNGMuLjNlNzkxMjEgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbQorQEAgLTQ1MSw3ICs0NTEsNyBAQCBzdWIgX2Nhbl93cml0ZV9kaXIgeworIAorID1wb2QKKyAKKy09aXRlbSBfbWtwYXRoKCRkaXIsJHNob3csJG1vZGUsJHZlcmJvc2UsJGRyeV9ydW4pCisrPWl0ZW0gX21rcGF0aCgkZGlyLCRzaG93LCR2ZXJib3NlLCRkcnlfcnVuKQorIAorIFdyYXBwZXIgYXJvdW5kIEZpbGU6OlBhdGg6Om1rcGF0aCgpIHRvIGhhbmRsZSBlcnJvcnMuCisgCitAQCAtNDY4LDEzICs0NjgsMTMgQEAgd3JpdGFibGUuCisgPWN1dAorIAorIHN1YiBfbWtwYXRoIHsKKy0gICAgbXkgKCRkaXIsJHNob3csJG1vZGUsJHZlcmJvc2UsJGRyeV9ydW4pPUBfOworKyAgICBteSAoJGRpciwkc2hvdywkdmVyYm9zZSwkZHJ5X3J1bik9QF87CisgICAgIGlmICggJHZlcmJvc2UgJiYgJHZlcmJvc2UgPiAxICYmICEgLWQgJGRpcikgeworICAgICAgICAgJHNob3c9IDE7CistICAgICAgICBwcmludGYgIm1rcGF0aCglcywlZCwlI28pXG4iLCAkZGlyLCAkc2hvdywgJG1vZGU7CisrICAgICAgICBwcmludGYgIm1rcGF0aCglcywlZClcbiIsICRkaXIsICRzaG93OworICAgICB9CisgICAgIGlmICghJGRyeV9ydW4pIHsKKy0gICAgICAgIGlmICggISBldmFsIHsgRmlsZTo6UGF0aDo6bWtwYXRoKCRkaXIsJHNob3csJG1vZGUpOyAxIH0gKSB7CisrICAgICAgICBpZiAoICEgZXZhbCB7IEZpbGU6OlBhdGg6Om1rcGF0aCgkZGlyLCRzaG93KTsgMSB9ICkgeworICAgICAgICAgICAgIF9jaG9rZSgiQ2FuJ3QgY3JlYXRlICckZGlyJyIsIiRAIik7CisgICAgICAgICB9CisgCitAQCAtNzgzLDcgKzc4Myw3IEBAIHN1YiBpbnN0YWxsIHsgI1hYWCBPUy1TUEVDSUZJQworICAgICAgICAgX2NoZGlyKCRjd2QpOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJHRhcmdldGRpciAoc29ydCBrZXlzICVjaGVja19kaXJzKSB7CistICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICB9CisgICAgIGZvcmVhY2ggbXkgJGZvdW5kIChAZm91bmRfZmlsZXMpIHsKKyAgICAgICAgIG15ICgkZGlmZiwgJGZmZCwgJG9yaWdmaWxlLCAkbW9kZSwgJHNpemUsICRhdGltZSwgJG10aW1lLAorQEAgLTc5Nyw3ICs3OTcsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRmaWxlPSBfdW5saW5rX29yX3JlbmFtZSggJHRhcmdldGZpbGUsICd0cnloYXJkJywgJ2luc3RhbGwnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgJGRyeV9ydW47CisgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCAhIC1kICR0YXJnZXRkaXIgKSB7CistICAgICAgICAgICAgICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgICAgICAgICAgICAgIF9ta3BhdGgoICR0YXJnZXRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHByaW50ICJJbnN0YWxsaW5nICR0YXJnZXRmaWxlXG4iOworIAorQEAgLTgzNyw3ICs4MzcsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAKKyAgICAgaWYgKCRwYWNreyd3cml0ZSd9KSB7CisgICAgICAgICAkZGlyID0gaW5zdGFsbF9yb290ZWRfZGlyKGRpcm5hbWUoJHBhY2t7J3dyaXRlJ30pKTsKKy0gICAgICAgIF9ta3BhdGgoICRkaXIsIDAsIDA3NTUsICR2ZXJib3NlLCAkZHJ5X3J1biApOworKyAgICAgICAgX21rcGF0aCggJGRpciwgMCwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisgICAgICAgICBwcmludCAiV3JpdGluZyAkcGFja3snd3JpdGUnfVxuIiBpZiAkdmVyYm9zZTsKKyAgICAgICAgICRwYWNrbGlzdC0+d3JpdGUoaW5zdGFsbF9yb290ZWRfZmlsZSgkcGFja3snd3JpdGUnfSkpIHVubGVzcyAkZHJ5X3J1bjsKKyAgICAgfQorQEAgLTExODAsNyArMTE4MCw3IEBAIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgc2lsZW5jZSB0aGlzIG91dHB1dC4KKyBzdWIgcG1fdG9fYmxpYiB7CisgICAgIG15KCRmcm9tdG8sJGF1dG9kaXIsJHBtX2ZpbHRlcikgPSBAXzsKKyAKKy0gICAgX21rcGF0aCgkYXV0b2RpciwwLDA3NTUpOworKyAgICBfbWtwYXRoKCRhdXRvZGlyLDApOworICAgICB3aGlsZShteSgkZnJvbSwgJHRvKSA9IGVhY2ggJSRmcm9tdG8pIHsKKyAgICAgICAgIGlmKCAtZiAkdG8gJiYgLXMgJGZyb20gPT0gLXMgJHRvICYmIC1NICR0byA8IC1NICRmcm9tICkgeworICAgICAgICAgICAgIHByaW50ICJTa2lwICR0byAodW5jaGFuZ2VkKVxuIiB1bmxlc3MgJElOU1RBTExfUVVJRVQ7CitAQCAtMTIwMyw3ICsxMjAzLDcgQEAgc3ViIHBtX3RvX2JsaWIgeworICAgICAgICAgICAgICMgd2Ugd29udCB0cnkgaGFyZCBoZXJlLiBpdHMgdG9vIGxpa2VseSB0byBtZXNzIHRoaW5ncyB1cC4KKyAgICAgICAgICAgICBmb3JjZXVubGluaygkdG8pOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBfbWtwYXRoKGRpcm5hbWUoJHRvKSwwLDA3NTUpOworKyAgICAgICAgICAgIF9ta3BhdGgoZGlybmFtZSgkdG8pLDApOworICAgICAgICAgfQorICAgICAgICAgaWYgKCRuZWVkX2ZpbHRlcmluZykgeworICAgICAgICAgICAgIHJ1bl9maWx0ZXIoJHBtX2ZpbHRlciwgJGZyb20sICR0byk7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggZjYzMTQ1Yy4uMTk3ZjEwMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMTgsNyArMjExOCw3IEBAIGRvY19faW5zdGFsbCA6IGRvY19zaXRlX2luc3RhbGwKKyAJJChOT0VDSE8pICQoRUNITykgSU5TVEFMTERJUlMgbm90IGRlZmluZWQsIGRlZmF1bHRpbmcgdG8gSU5TVEFMTERJUlM9c2l0ZQorIAorIHB1cmVfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKK0BAIC0yMTM4LDcgKzIxMzgsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCisgCisgcHVyZV9zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTU2LDcgKzIxNTYsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgCQkifS4kc2VsZi0+Y2F0ZGlyKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScpLnF7IgorIAorIHB1cmVfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisrCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorQEAgLTIxODgsOCArMjE4OCw4IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCitAQCAtMjE5OSw4ICsyMTk5LDggQEAgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCitAQCAtMjIxMCw4ICsyMjEwLDggQEAgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExWRU5ET1JMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MmM3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKQEAgLTAsMCArMSwyNyBAQAorRnJvbSAyNjIwOWI1NTIwMWExYjJkMjUyNTJhYzNiNDI1YmM0OTA4MTI5OWRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IERlYmlhbiBwb2xpY3kgZG9lc24ndCBpbnN0YWxsIC5wYWNrbGlzdCBmaWxlcyBmb3IgY29yZSBvciB2ZW5kb3IuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2ggfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaAoraW5kZXggOGI5YWE5NS4uZTU1MTQzNCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKK0BAIC0xOCw5ICsxOCwxMSBAQCBpbnN0bW9kc2ggLSBBIHNoZWxsIHRvIGV4YW1pbmUgaW5zdGFsbGVkIG1vZHVsZXMKKyAKKyA9aGVhZDEgREVTQ1JJUFRJT04KKyAKKy1BIGxpdHRsZSBpbnRlcmZhY2UgdG8gRXh0VXRpbHM6Okluc3RhbGxlZCB0byBleGFtaW5lIGluc3RhbGxlZCBtb2R1bGVzLAorK0EgbGl0dGxlIGludGVyZmFjZSB0byBFeHRVdGlsczo6SW5zdGFsbGVkIHRvIGV4YW1pbmUgbG9jYWxseSogaW5zdGFsbGVkIG1vZHVsZXMsCisgdmFsaWRhdGUgeW91ciBwYWNrbGlzdHMgYW5kIGV2ZW4gY3JlYXRlIGEgdGFyYmFsbCBmcm9tIGFuIGluc3RhbGxlZCBtb2R1bGUuCisgCisrKk9uIERlYmlhbiBzeXN0ZW0sIEI8Y29yZT4gYW5kIEI8dmVuZG9yPiBtb2R1bGVzIGFyZSBtYW5hZ2VkIGJ5IEM8ZHBrZz4uCisrCisgPWhlYWQxIFNFRSBBTFNPCisgCisgRXh0VXRpbHM6Okluc3RhbGxlZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwZjg2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKQEAgLTAsMCArMSwyNCBAQAorRnJvbSA1M2NlNjkwODU5MTgyMzJhMWI3ZTI2ZTc3NjJjMWIyZjcwYjFlYjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBSZW1vdmUgc3RhbmRhcmQgbGlicyBmcm9tIExEX1JVTl9QQVRIIGFzIHBlciBEZWJpYW4gcG9saWN5LgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbGRfcnVuX3BhdGguZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KK2luZGV4IDM3YmNmZDQuLmJkNjZlNjUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorQEAgLTU2LDYgKzU2LDkgQEAgc3ViIF91bml4X29zMl9leHQgeworICAgICBteSAoICRwd2QgKSAgID0gY3dkKCk7ICAgICMgZnJvbSBDd2QucG0KKyAgICAgbXkgKCAkZm91bmQgKSA9IDA7CisgCisrICAgICMgRGViaWFuLXNwZWNpZmljOiBkb24ndCB1c2UgTERfUlVOX1BBVEggZm9yIHN0YW5kYXJkIGRpcnMKKysgICAgJGxkX3J1bl9wYXRoX3NlZW57JF99KysgZm9yIEBsaWJwYXRoOworKworICAgICBmb3JlYWNoIG15ICR0aGlzbGliICggc3BsaXQgJyAnLCAkcG90ZW50aWFsX2xpYnMgKSB7CisgICAgICAgICBteSAoICRjdXN0b21fbmFtZSApID0gJyc7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWY5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgpAQCAtMCwwICsxLDM3IEBACitGcm9tIGE3ZjZkNDUzZTYwMjU2ZDMyOTQ2OWE3NWI2NDJjY2E4NTRjZWJlYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogU2V0IGxvY2F0aW9uIG9mIGxpYm5ldC5jZmcgdG8gL2V0Yy9wZXJsL05ldCBhcyAvdXNyIG1heSBub3QgYmUKKyB3cml0YWJsZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmCistLS0KKyBjcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSB8IDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbSBiL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCitpbmRleCA5NTNhODI2Li42MWJhMTJhIDEwMDY0NAorLS0tIGEvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0KKysrKyBiL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCitAQCAtNjgsOSArNjgsOCBAQCBteSAlbmMgPSAoCisgVFJZX0lOVEVSTkVUX0NPTkZJRworIH0KKyAKKy1teSAkZmlsZSA9IF9fRklMRV9fOworK215ICRmaWxlID0gJy9ldGMvcGVybC9OZXQvbGlibmV0LmNmZyc7CisgbXkgJHJlZjsKKy0kZmlsZSA9fiBzL0NvbmZpZy5wbS9saWJuZXQuY2ZnLzsKKyBpZiAoLWYgJGZpbGUpIHsKKyAgICRyZWYgPSBldmFsIHsgbG9jYWwgJFNJR3tfX0RJRV9ffTsgZG8gJGZpbGUgfTsKKyAgIGlmIChyZWYoJHJlZikgZXEgJ0hBU0gnKSB7CitAQCAtMTQyLDggKzE0MSw4IEBAIE5ldDo6Q29uZmlnIC0gTG9jYWwgY29uZmlndXJhdGlvbiBkYXRhIGZvciBsaWJuZXQKKyBDPE5ldDo6Q29uZmlnPiBob2xkcyBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBtb2R1bGVzIGluIHRoZSBsaWJuZXQKKyBkaXN0cmlidXRpb24uIER1cmluZyBpbnN0YWxsYXRpb24geW91IHdpbGwgYmUgYXNrZWQgZm9yIHRoZXNlIHZhbHVlcy4KKyAKKy1UaGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGhlbGQgZ2xvYmFsbHkgaW4gYSBmaWxlIGluIHRoZSBwZXJsIGluc3RhbGxhdGlvbgorLXRyZWUsIGJ1dCBhIHVzZXIgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSB2YWx1ZXMgYnkgcHJvdmlkaW5nIHRoZWlyIG93bi4gVGhpcworK1RoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgaGVsZCBnbG9iYWxseSBpbiBDPC9ldGMvcGVybC9OZXQvbGlibmV0LmNmZz4sCisrYnV0IGEgdXNlciBtYXkgb3ZlcnJpZGUgYW55IG9mIHRoZXNlIHZhbHVlcyBieSBwcm92aWRpbmcgdGhlaXIgb3duLiBUaGlzCisgY2FuIGJlIGRvbmUgYnkgaGF2aW5nIGEgQzwubGlibmV0cmM+IGZpbGUgaW4gdGhlaXIgaG9tZSBkaXJlY3RvcnkuIFRoaXMgZmlsZQorIHNob3VsZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gYSBIQVNIIGNvbnRhaW5pbmcgdGhlIGtleXMgZGVzY3JpYmVkIGJlbG93LgorIEZvciBleGFtcGxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI4MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZgpAQCAtMCwwICsxLDI2IEBACitGcm9tIGZiOGJkYmI0YmY1NjM4MmRlMDk5ZTYyYzI1NjQyODZiOWRmZGE0NmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogTm90ZSB0aGF0IGxpYnBlcmwtZGV2IHBhY2thZ2UgaXMgcmVxdWlyZWQgZm9yIGVtYmVkZGVkIGxpbmtpbmcKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xODY3NzgKKworUGF0Y2gtTmFtZTogZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKKy0tLQorIGxpYi9FeHRVdGlscy9FbWJlZC5wbSB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL0V4dFV0aWxzL0VtYmVkLnBtIGIvbGliL0V4dFV0aWxzL0VtYmVkLnBtCitpbmRleCAzZjk4M2MxLi4wZWM4YTY3IDEwMDY0NAorLS0tIGEvbGliL0V4dFV0aWxzL0VtYmVkLnBtCisrKysgYi9saWIvRXh0VXRpbHMvRW1iZWQucG0KK0BAIC0yOTYsNiArMjk2LDkgQEAgYW5kIGV4dGVuc2lvbnMgaW4geW91ciBDL0MrKyBhcHBsaWNhdGlvbnMuCisgVHlwaWNhbGx5LCBhbiBhcHBsaWNhdGlvbiBGPE1ha2VmaWxlPiB3aWxsIGludm9rZSBDPEV4dFV0aWxzOjpFbWJlZD4KKyBmdW5jdGlvbnMgd2hpbGUgYnVpbGRpbmcgeW91ciBhcHBsaWNhdGlvbi4gIAorIAorK05vdGUgdGhhdCBvbiBEZWJpYW4gc3lzdGVtcyB0aGUgQjxsaWJwZXJsLWRldj4gcGFja2FnZSBpcyByZXF1aXJlZCBmb3IKKytjb21waWxpbmcgYXBwbGljYXRpb25zIHdoaWNoIGVtYmVkIGFuIGludGVycHJldGVyLgorKworID1oZWFkMSBARVhQT1JUCisgCisgQzxFeHRVdGlsczo6RW1iZWQ+IGV4cG9ydHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sb2NhbGUtcm9idXN0bmVzcy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQ3MWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgpAQCAtMCwwICsxLDUyIEBACitGcm9tIDI4OWVhZjg3ZjhkZTRkOWViZmQ2NjFkNGU0Mjk5YzI5NTI0MzUyNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDEwIEFwciAyMDE1IDEwOjE5OjUxICswMzAwCitTdWJqZWN0OiBNYWtlIHQvcnVuL2xvY2FsZS50IHN1cnZpdmUgbWlzc2luZyBsb2NhbGVzIG1hc2tlZCBieSBMQ19BTEwKKworSWYgTENfQUxMIGlzIHNldCB0byBhIHZhbGlkIGxvY2FsZSBidXQgYW5vdGhlciBMQ18qIHNldHRpbmcgbGlrZSBMQ19DVFlQRQoraXNuJ3QsIHQvcnVuL2xvY2FsZS50IHdvdWxkIGZhaWwgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHVuc2V0cyBMQ19BTEwsCit1bm1hc2tpbmcgdGhlIHByb2JsZW0gdW5kZXJuZWF0aC4gQWxsIHRoZSBvdGhlciB0ZXN0cyBzdXJ2aXZlIHN1Y2gKK2Egc2NlbmFyaW8uCisKK1doaWxlIHRoaXMgaXMgY2xlYXJseSBhbiBlcnJvciBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQsIGl0J3MgZWFzeSB0byBtYWtlCit0aGUgdGVzdCBtb3JlIHJvYnVzdCBieSBmaXJzdCBjbGVhcmluZyBhbGwgdGhlIGxvY2FsZSByZWxldmFudCB2YXJpYWJsZXMuCisKK0J1ZzogaHR0cHM6Ly9ydC5wZXJsLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTEyNDMxMAorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgyMDY4CitQYXRjaC1OYW1lOiBkZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZgorLS0tCisgdC9ydW4vbG9jYWxlLnQgfCA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vbG9jYWxlLnQgYi90L3J1bi9sb2NhbGUudAoraW5kZXggYmQxYTAzNC4uMjEwNTMzOSAxMDA2NDQKKy0tLSBhL3QvcnVuL2xvY2FsZS50CisrKysgYi90L3J1bi9sb2NhbGUudAorQEAgLTI3LDYgKzI3LDkgQEAgbXkgQGxvY2FsZXMgPSBldmFsIHsgZmluZF9sb2NhbGVzKCBbICZMQ19BTEwsICZMQ19DVFlQRSwgJkxDX05VTUVSSUMgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIH07Cisgc2tpcF9hbGwoIm5vIGxvY2FsZXMgYXZhaWxhYmxlIikgdW5sZXNzIEBsb2NhbGVzOworIAorKyMgcmVzZXQgdGhlIGxvY2FsZSBlbnZpcm9ubWVudAorK2xvY2FsIEBFTlZ7J0xBTkcnLCAoZ3JlcCAvXkxDXy8sIGtleXMgJUVOVil9OworKworIHBsYW4gdGVzdHMgPT4gJmxhc3Q7CisgCisgbXkgJG5vbl9DX2xvY2FsZTsKK0BAIC01OCw5ICs2MSw2IEBAIEVPRgorIFNLSVA6IHsKKyAgICAgc2tpcCgiV2luZG93cyBzdG9yZXMgbG9jYWxlIGRlZmF1bHRzIGluIHRoZSByZWdpc3RyeSIsIDEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICReTyBlcSAnTVNXaW4zMic7CistICAgIGxvY2FsICRFTlZ7TENfTlVNRVJJQ307ICMgU28gbm90IHRha2VuIGFzIGEgZGVmYXVsdAorLSAgICBsb2NhbCAkRU5We0xDX0FMTH07ICMgc28gaXQgbmV2ZXIgb3ZlcnJpZGVzIExDX05VTUVSSUMKKy0gICAgbG9jYWwgJEVOVntMQU5HfTsgICAjIFNvIG5vdCB0YWtlbiBhcyBhIGRlZmF1bHQKKyAgICAgZnJlc2hfcGVybF9pcygiZm9yIChxdyhAbG9jYWxlcykpIHtcbiIgLiA8PCdFT0YnLAorICAgICAgICAgdXNlIFBPU0lYIHF3KGxvY2FsZV9oKTsKKyAgICAgICAgIHVzZSBsb2NhbGU7CitAQCAtMzQ4LDcgKzM0OCw2IEBAIEVPRgorIAorICAgICB7CisgCWxvY2FsICRFTlZ7TENfTlVNRVJJQ30gPSAkZGlmZmVyZW50OworLQlsb2NhbCAkRU5We0xDX0FMTH07ICMgc28gaXQgbmV2ZXIgb3ZlcnJpZGVzIExDX05VTUVSSUMKKyAJZnJlc2hfcGVybF9pcyg8PCJFT0YiLAorIAkgICAgdXNlIFBPU0lYIHF3KGxvY2FsZV9oKTsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNTkzZGQ1MmY1MzViMWY0MzlkZmQwYWZlNTIyMTFhZTg5NjBlOTgwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMjQgQXVnIDIwMTQgMTI6NTY6MTEgLTA3MDAKK1N1YmplY3Q6IFBhc3MgTEQgc2V0dGluZ3MgdGhyb3VnaCB0byBzdWJkaXJlY3RvcmllcworCitbcnQuY3Bhbi5vcmcgIzI4NjMyXSBmaXhlZCBtb3N0IGlzc3VlcyB3aXRoIHBhc3NpbmcgTEQgZG93biB0bworc3ViZGlyZWN0b3J5IE1ha2VmaWxlLlBMIGZpbGVzLiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBkaXN0cmlidXRpb25zCisoaW5jbHVkaW5nIFd4LCBQYXI6OlBhY2tlciwgYW5kIFZlcmlsb2ctUGVybCkgdGhhdCBleHBsaWNpdGx5IHNldAorTEQuIFRob3NlIHN0aWxsIGNhbid0IGJlIG92ZXJyaWRkZW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBBZGRpbmcgTEQgdG8KK3RoZSBQQVNUSFJVIGxpc3QgZml4ZXMgdGhpcy4KKworQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzU4NDcxCitQYXRjaC1OYW1lOiBkZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCA0YThlMTRjLi41NDhkOThlIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjc5Myw3ICsyNzkzLDcgQEAgc3ViIHBhc3RocnUgeworICAgICBteSgkc2VwKSA9ICRJc3tWTVN9ID8gJywnIDogJyc7CisgICAgICRzZXAgLj0gIlxcXG5cdCI7CisgCistICAgIGZvcmVhY2ggbXkgJGtleSAocXcoTElCIExJQlBFUkxfQSBMSU5LVFlQRSBPUFRJTUlaRQorKyAgICBmb3JlYWNoIG15ICRrZXkgKHF3KExJQiBMSUJQRVJMX0EgTElOS1RZUEUgT1BUSU1JWkUgTEQKKyAgICAgICAgICAgICAgICAgICAgICBQUkVGSVggSU5TVEFMTF9CQVNFKQorICAgICAgICAgICAgICAgICAgKQorICAgICB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI0Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgpAQCAtMCwwICsxLDQyIEBACitGcm9tIDYzNDQ0OTA2NmE5YzgxMGU4MTUwNjQyNWQyY2E5MjViMmZkNzJhYjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmljIEhhcmdyZWF2ZXMgPGRvbUBlYXJ0aC5saT4KK0RhdGU6IFNhdCwgMjMgTWF5IDIwMTUgMjE6MTU6MDYgKzAyMDAKK1N1YmplY3Q6IFVwZGF0ZSB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgZm9yIGZpbGVzIHBhdGNoZWQgaW4gRGViaWFuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9tYWtlbWFrZXJfY3VzdG9taXplZC5kaWZmCistLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdCBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAoraW5kZXggN2RmMzk4ZC4uZjg1N2JkMiAxMDA2NDQKKy0tLSBhL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorKysrIGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitAQCAtMSw3ICsxLDcgQEAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Db21tYW5kL01NLnBtIDdmNGRmZDBmZTg4NGJkNDI0MTJiY2YwNGNhODBlZjk3YjM5YzFkNTQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0LnBtIGJlZjA5OTk4OGIxNWZiMGIyYTFmNWFjNDhjMDFhZjFmN2YzNmQzMjkKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSA4MTY4ZTE4ZjBlM2NlM2VjZTRiYjdlN2M3MmQ1N2VjMDdjNjdjNDAyCistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDcxMTVlOTdhNTM1NTljYjNlYzA2MWRkNmY3ZjM0NGU1MjI3MjRjNGEKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSAzNDkzYWU2ZjkzMjY0ZTk2N2Y1OGRlZGFhM2RiZjNkYmNiMjQ5ODUzCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIDNkN2FiZDY3NGIxNWVkMzIzZjc0MzU5NGVmMGJkMDlkYjc2YjFhZWUKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvQ29uZmlnLnBtIGY4ZGI4ZDQyNDViZjA2ODRiODIxMGM4MTFmNTBkN2NmYjFhMjdkNzgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIvRkFRLnBvZCA3NTdiZmZiNDc4NTc1MjEzMTFmOGYzYmRlNDNlYmUxNjVmOGQ1MTkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0xvY2FsZS5wbSA4MmJlMDY4NTFkZWI4NGM2NDE5YWQwMDNjZTliNmQxOTU3ZjM5NWYzCitAQCAtMTMsNyArMTMsNyBAQCBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Na2Jvb3RzdHJhcC5wbSA1ODg3MmQ2NgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01rc3ltbGlzdHMucG0gYWI4MDAyOWFiMTZkMzhkNGYyZTQxZGM4OGQyY2ViOWYzNzkwZTQ3NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NLnBtIDQ1M2UwYWJiYzRiYjM4ZGI0YzA4MjBhZDVjNDg0NmYzMTNiNjYyOTEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BSVgucG0gYzFiMWJhYmRhOGY0M2FlN2EyY2FiYTFjYjRmNzBmOTJhZjVhMGUzNAorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSA2ZjkwZDk0YWQzZTdhYTAwNDVhM2IxYTEwYTFiYjE4MzkxZjg5ZjU3CisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtIDIxYmRlNTMyOTBiZjFhNGRhNDQ1NzI5MGI2NWJkMWIwY2E2ZjFkMTYKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9CZU9TLnBtIGNhYjJiM2NlMDhiNzFhNGNlODlhYTYzMGYyMzZlYjA4Yjg1MjQzOWQKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9DeWd3aW4ucG0gNjFmY2VkMGZhZjUxOGJmODdjMjY1ZmNiNTFlZDMzMGJhMzU0NjIzZgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0Rhcndpbi5wbSBhZTBlZjUxYTdiNmRkMGIwNWFhNjFjNzc5ZGY3MTY3ZGRhNWY1MTE5CitAQCAtMjIsNyArMjIsNyBAQCBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9NYWNPUy5wbSAwNTQ0MzAxZjcxMgorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX05XNS5wbSA0MzMxMzVlZWNiODViNGIxZDkwZDMwMjc0MzJmMzI5NDM2Yzc4NDQ3CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fT1MyLnBtIDFmYmI1NjA1YmZiNDdmZWVlNDA4M2ZlYmE4YWE4NWU2NTk2MjhmNzAKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9RTlgucG0gNWI2NmQxZjQ4NWE2MDM0ZDk2ZmMyNGJhMTY2NWIxYmFkOWU0NDdmMQorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gOGNlZjk5YTliZDM3MGVjZmQwN2RkYjBlZmJkY2JiNDEwMTI1NWU0NQorK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYzQ1NWM5MTVmYjdkYzNlZWIxMjAwZWQxY2QxOTA0OGU2ZjIxZTZiMQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VXSU4ucG0gOTM5NTcyZmRlM2Q1OWJhNzdjMmU2NzdmZTJkZjJiZWQ0YmVkNTg5OAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZNUy5wbSAwOWMyMDQ5YmZkMjViNzM1ZTJhNWJjZjU2YTZjZmY3YjQ4MjdmOWM4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVk9TLnBtIGQ2NWQ2M2Y4MjE3YTU1YzM2ZjYyZTI0OTgxNDk4ODk3NGY1OTNjNzkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbW9kX3BhdGhzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxNTkwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmCkBAIC0wLDAgKzEsOTkgQEAKK0Zyb20gNmM2Y2YxNGUyMDRmM2MwMzEzNzJiZmQ5NjA0YWQ1MjRkNTY5MTE4NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogVHdlYWsgQElOQyBvcmRlcmluZyBmb3IgRGViaWFuCisKK091ciBvcmRlciBpczoKKworICAgIGV0YyAoZm9yIGNvbmZpZyBmaWxlcykKKyAgICBzaXRlICg1LjguMSkKKyAgICB2ZW5kb3IgKGFsbCkKKyAgICBjb3JlICg1LjguMSkKKyAgICBzaXRlICh2ZXJzaW9uLWluZGVwKQorICAgIHNpdGUgKHByZS01LjguMSkKKworVGhlIHJhdGlvbmFsZSBiZWluZyB0aGF0IGFuIGFkbWluICh2aWEgc2l0ZSksIG9yIG1vZHVsZSBwYWNrYWdlcgorKHZlbmRvcikgY2FuIGNob3NlIHRvIHNoYWRvdyBjb3JlIG1vZHVsZXMgd2hlbiB0aGVyZSBpcyBhIG5ld2VyCit2ZXJzaW9uIHRoYW4gaXMgaW5jbHVkZWQgaW4gY29yZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL21vZF9wYXRocy5kaWZmCistLS0KKyBwZXJsLmMgfCA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3BlcmwuYyBiL3BlcmwuYworaW5kZXggMDg2NjQ1Yi4uZTY0ZjFmNCAxMDA2NDQKKy0tLSBhL3BlcmwuYworKysrIGIvcGVybC5jCitAQCAtNDM3Myw2ICs0MzczLDExIEBAIFNfaW5pdF9wZXJsbGliKHBUSFgpCisgCQkgICAgICBJTkNQVVNIX0FERF9TVUJfRElSU3xJTkNQVVNIX0NBTl9SRUxPQ0FURSk7CisgI2VuZGlmCisgCisrI2lmZGVmIERFQklBTgorKyAgICAvKiBmb3IgY29uZmlndXJhdGlvbiB3aGVyZSAvdXNyIGlzIG1vdW50ZWQgcm8gKENQQU46OkNvbmZpZywgTmV0OjpDb25maWcpICovCisrICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIFNUUl9XSVRIX0xFTigiL2V0Yy9wZXJsIiksIDB4MCk7CisrI2VuZGlmCisrCisgI2lmZGVmIFNJVEVBUkNIX0VYUAorICAgICAvKiBzaXRlYXJjaCBpcyBhbHdheXMgcmVsYXRpdmUgdG8gc2l0ZWxpYiBvbiBXaW5kb3dzIGZvcgorICAgICAgKiBETEwtYmFzZWQgcGF0aCBpbnR1aXRpb24gdG8gd29yayBjb3JyZWN0bHkgKi8KK0BAIC00NDkwLDYgKzQ0OTUsNTkgQEAgU19pbml0X3BlcmxsaWIocFRIWCkKKyAJCSAgICAgIElOQ1BVU0hfQUREX09MRF9WRVJTfElOQ1BVU0hfQ0FOX1JFTE9DQVRFKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgREVCSUFOCisrICAgIC8qIE5vbi12ZXJzaW9uZWQgc2l0ZSBkaXJlY3RvcnkgZm9yIGxvY2FsIG1vZHVsZXMgYW5kIGZvcgorKyAgICAgICBjb21wYXRhYmlsaXR5IHdpdGggdGhlIHByZXZpb3VzIHBhY2thZ2VzJyBzaXRlIGRpcnMgKi8KKysgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gU1RSX1dJVEhfTEVOKCIvdXNyL2xvY2FsL2xpYi9zaXRlX3BlcmwiKSwKKysJCSAgICAgIElOQ1BVU0hfQUREX1NVQl9ESVJTKTsKKysKKysjaWZkZWYgUEVSTF9JTkNfVkVSU0lPTl9MSVNUCisrICAgIHsKKysJc3RydWN0IHN0YXQgczsKKysKKysJLyogYWRkIHNtYWxsIGJ1ZmZlciBpbiBjYXNlIG9sZCB2ZXJzaW9ucyBhcmUgbG9uZ2VyIHRoYW4gdGhlCisrCSAgIGN1cnJlbnQgdmVyc2lvbiAqLworKwljaGFyIHNpdGVhcmNoW3NpemVvZihTSVRFQVJDSF9FWFApKzE2XSA9IFNJVEVBUkNIX0VYUDsKKysJY2hhciBzaXRlbGliW3NpemVvZihTSVRFTElCX0VYUCkrMTZdID0gU0lURUxJQl9FWFA7CisrCWNoYXIgY29uc3QgKnZlcnNbXSA9IHsgUEVSTF9JTkNfVkVSU0lPTl9MSVNUIH07CisrCWNoYXIgY29uc3QgKipwOworKworKwljaGFyICphcmNoX3ZlcnMgPSBzdHJyY2hyKHNpdGVhcmNoLCAnLycpOworKwljaGFyICpsaWJfdmVycyA9IHN0cnJjaHIoc2l0ZWxpYiwgJy8nKTsKKysKKysJaWYgKGFyY2hfdmVycyAmJiBpc2RpZ2l0KCorK2FyY2hfdmVycykpCisrCSAgICAqYXJjaF92ZXJzID0gMDsKKysJZWxzZQorKwkgICAgYXJjaF92ZXJzID0gMDsKKysKKysJaWYgKGxpYl92ZXJzICYmIGlzZGlnaXQoKisrbGliX3ZlcnMpKQorKwkgICAgKmxpYl92ZXJzID0gMDsKKysJZWxzZQorKwkgICAgbGliX3ZlcnMgPSAwOworKworKwkvKiB0aGVyZSBpcyBzb21lIGR1cGxpY2F0aW9uIGhlcmUgYXMgaW5jcHVzaCBkb2VzIHNvbWV0aGluZworKwkgICBzaW1pbGFyIGludGVybmFsbHksIGJ1dCByZXF1aXJlZCBhcyBzaXRlYXJjaCBpcyBub3QgYQorKwkgICBzdWJkaXJlY3Rvcnkgb2Ygc2l0ZWxpYiAqLworKwlmb3IgKHAgPSB2ZXJzOyAqcDsgcCsrKQorKwl7CisrCSAgICBpZiAoYXJjaF92ZXJzKQorKwkgICAgeworKwkJc3RyY3B5KGFyY2hfdmVycywgKnApOworKwkJaWYgKFBlcmxMSU9fc3RhdChzaXRlYXJjaCwgJnMpID49IDAgJiYgU19JU0RJUihzLnN0X21vZGUpKQorKwkJICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIHNpdGVhcmNoLCBzdHJsZW4oc2l0ZWFyY2gpLCAweDApOworKwkgICAgfQorKworKwkgICAgaWYgKGxpYl92ZXJzKQorKwkgICAgeworKwkJc3RyY3B5KGxpYl92ZXJzLCAqcCk7CisrCQlpZiAoUGVybExJT19zdGF0KHNpdGVsaWIsICZzKSA+PSAwICYmIFNfSVNESVIocy5zdF9tb2RlKSkKKysJCSAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBzaXRlbGliLCBzdHJsZW4oc2l0ZWxpYiksIDB4MCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyNlbmRpZgorKyNlbmRpZgorKworICNpZmRlZiBQRVJMX09USEVSTElCRElSUworICAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBTVFJfV0lUSF9MRU4oUEVSTF9PVEhFUkxJQkRJUlMpLAorIAkJICAgICAgSU5DUFVTSF9BRERfT0xEX1ZFUlN8SU5DUFVTSF9BRERfQVJDSE9OTFlfU1VCX0RJUlMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMWZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCkBAIC0wLDAgKzEsOTIgQEAKK0Zyb20gMjQwZjJmNGFlYjM4NTBiYzBjNTM3MGI5ZmJjMzkwOTU3M2JlZDliMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBEb24ndCBpbnN0YWxsIC5wYWNrbGlzdCBvciBwZXJsbG9jYWwucG9kIGZvciBwZXJsIG9yIHZlbmRvcgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMzUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNTcwYTYzMS4uMzkxZGMyMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMjIsMTEgKzIxMjIsNiBAQCBwdXJlX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyB9OworIAorICAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworLQorLSAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAJCSIkKElOU1RfQVJDSExJQikiICIkKERFU1RJTlNUQUxMQVJDSExJQikiIFwKKyAJCSIkKElOU1RfQklOKSIgIiQoREVTVElOU1RBTExCSU4pIiBcCitAQCAtMjE1OCwxMCArMjE1Myw2IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMU0lURUxJQikiIFwKKyBwdXJlX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKy0gICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMVkVORE9SQVJDSCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CisgCisgICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExWRU5ET1JMSUIpIiBcCitAQCAtMjE4NywzNyArMjE3OCwxOSBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMUFJJVkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpL3Blcmxsb2NhbC5wb2QiCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTFNJVEVBUkNIKSIKKyAJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMU0lURUxJQikgXAorIAkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCisgCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCisgCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKysJCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMU0lURUFSQ0gpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIH0gdW5sZXNzICRzZWxmLT57Tk9fUEVSTExPQ0FMfTsKKyAKK0BAIC0yMjI2LDEzICsyMTk5LDExIEBAIHVuaW5zdGFsbCA6OiB1bmluc3RhbGxfZnJvbV8kKElOU1RBTExESVJTKWRpcnMKKyAJJChOT0VDSE8pICQoTk9PUCkKKyAKKyB1bmluc3RhbGxfZnJvbV9wZXJsZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3NpdGVkaXJzIDo6CisgCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV92ZW5kb3JkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIH07CisgCisgICAgIGpvaW4oIiIsQG0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTZiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wYXRjaGxldmVsLmRpZmYKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiNTE3YzVlMTVkMDg3MWUzNmQwZjExODc2NjFmZTFkZDI4ZGRmODIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAxNSBNYXkgMjAxMSAxOTozNTo1OCArMDMwMAorU3ViamVjdDogTGlzdCBwYWNrYWdlZCBwYXRjaGVzIGluIHBhdGNobGV2ZWwuaAorCitPcmlnaW46IHZlbmRvcgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81Njc0ODkKKworVGhlIGxpc3Qgb2YgcGFja2FnZWQgcGF0Y2hlcyBpcyBpbiBwYXRjaGxldmVsLWRlYmlhbi5oLCB3aGljaCBpcyBnZW5lcmF0ZWQKK2Zyb20gdGhlIGRlYmlhbi9wYXRjaGVzLyBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyB0aGUgcGFja2FnZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3BhdGNobGV2ZWwuZGlmZgorLS0tCisgcGF0Y2hsZXZlbC5oIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9wYXRjaGxldmVsLmggYi9wYXRjaGxldmVsLmgKK2luZGV4IGEwYWQ3OGIuLjAxMzY3YjcgMTAwNjQ0CistLS0gYS9wYXRjaGxldmVsLmgKKysrKyBiL3BhdGNobGV2ZWwuaAorQEAgLTEzNyw2ICsxMzcsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxvY2FsX3BhdGNoZXNbXSA9IHsKKyAJLCJ1bmNvbW1pdHRlZC1jaGFuZ2VzIgorICNlbmRpZgorIAlQRVJMX0dJVF9VTlBVU0hFRF9DT01NSVRTICAgIAkvKiBkbyBub3QgcmVtb3ZlIHRoaXMgbGluZSAqLworKyNpZmRlZiBERUJJQU4KKysjaW5jbHVkZSAicGF0Y2hsZXZlbC1kZWJpYW4uaCIKKysjZW5kaWYKKyAJLE5VTEwKKyB9OworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzk1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBjOTljNjFlOGY4NjNhNTA4YTA3OTMxNjgwMTFjOThkYzc0YWJiZDA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pYyBIYXJncmVhdmVzIDxkb21AZWFydGgubGk+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDExOjM0OjA1ICswMTAwCitTdWJqZWN0OiBJbnZva2UgeC10ZXJtaW5hbC1lbXVsYXRvciByYXRoZXIgdGhhbiB4dGVybSBpbiBwZXJsNWRiLnBsCisKK0luIERlYmlhbiBzeXN0ZW1zLCB4dGVybSBtaWdodCBub3QgZXhpc3Qgb3IgbWlnaHQgbm90IGJlIHRoZSBwcmVmZXJyZWQKK3Rlcm1pbmFsIGVtdWxhdG9yLiBVc2UgeC10ZXJtaW5hbC1lbXVsYXRvciBpbnN0ZWFkCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjY4NDkwCitGb3J3YXJkZWQ6IG5vdC1uZWVkZWQKKworUGF0Y2gtTmFtZTogZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaAorLS0tCisgbGliL3Blcmw1ZGIucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcGVybDVkYi5wbCBiL2xpYi9wZXJsNWRiLnBsCitpbmRleCA3ZTcxOTRlLi5jNDY2YmYzIDEwMDY0NAorLS0tIGEvbGliL3Blcmw1ZGIucGwKKysrKyBiL2xpYi9wZXJsNWRiLnBsCitAQCAtNjk2MCw3ICs2OTYwLDcgQEAgcHJvcGVybHkgc2V0IHVwLgorIHN1YiB4dGVybV9nZXRfZm9ya19UVFkgeworICAgICAoIG15ICRuYW1lID0gJDAgKSA9fiBzLF4uKlsvXFxdLCxzOworICAgICBvcGVuIFhULAorLXFxWzM+JjEgeHRlcm0gLXRpdGxlICJEYXVnaHRlciBQZXJsIGRlYnVnZ2VyICRwaWRzICRuYW1lIiAtZSBzaCAtYyAndHR5IDE+JjM7XAorK3FxWzM+JjEgeC10ZXJtaW5hbC1lbXVsYXRvciAtVCAiRGF1Z2h0ZXIgUGVybCBkZWJ1Z2dlciAkcGlkcyAkbmFtZSIgLWUgc2ggLWMgJ3R0eSAxPiYzO1wKKyAgc2xlZXAgMTAwMDAwMDAnIHxdOworIAorICAgICAjIEdldCB0aGUgb3V0cHV0IGZyb20gJ3R0eScgYW5kIGNsZWFuIGl0IHVwIGEgbGl0dGxlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMWVhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wZXJsaXZwLmRpZmYKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBmYmZiZWI3YTY5MGQ3MDNhM2NkYzU2ZjkyM2U4OWViN2I3OTk3ZDMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCA5IEphbiAyMDA5IDE4OjU0OjQ3ICswMjAwCitTdWJqZWN0OiBNYWtlIHBlcmxpdnAgc2tpcCBpbmNsdWRlIGRpcmVjdG9yaWVzIGluIC91c3IvbG9jYWwKKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MTA4OTUKKworT24gU2F0LCBKYW4gMTAsIDIwMDkgYXQgMTI6Mzc6MThBTSArMTEwMCwgQnJlbmRhbiBPJ0RlYSB3cm90ZToKKz4gT24gV2VkLCBKYW4gNywgMjAwOSBhdCAxMjoyMSBBTSwgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPiB3cm90ZToKKworPiA+IFdlIGNvdWxkIGNyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgaW4gYSBwb3N0aW5zdCBzY3JpcHQsIGJ1dCBJJ20gbm90IHN1cmUKKz4gPiBJIHNlZSB0aGUgcG9pbnQuIFRoZXkgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpbnN0YWxsaW5nCis+ID4gQ1BBTiBtb2R1bGVzLgorPgorPiBUaGUgZGlyZWN0b3JpZXMgYXJlIGludGVudGlvbmFsbHkgbm90IGNyZWF0ZWQsIGFzIHRoaXMgd2F5IHRoZXkgYXJlCis+IGV4Y2x1ZGVkIGZyb20gdGhlIHNlYXJjaCBwYXRoIGF0IHN0YXJ0LXVwLCBzYXZpbmcgYSBidW5jaCBvZiB3YXN0ZWQKKz4gc3RhdHMgYXQgdXNlL3JlcXVpcmUgdGltZSBpbiB0aGUgY29tbW9uIGNhc2UgdGhhdCB0aGUgdXNlciBoYXMgbm90Cis+IGluc3RhbGxlZCBhbnkgbG9jYWwgcGFja2FnZXMuICBBcyBOaWtvIHBvaW50cyBvdXQsIHRoZXkgd2lsbCBiZQorPiBjcmVhdGVkIGFzIHJlcXVpcmVkLgorCitTaWduZWQtb2ZmLWJ5OiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wZXJsaXZwLmRpZmYKKy0tLQorIHV0aWxzL3BlcmxpdnAuUEwgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3V0aWxzL3BlcmxpdnAuUEwgYi91dGlscy9wZXJsaXZwLlBMCitpbmRleCBjMmYwYTExLi5jYzQ5Zjk2IDEwMDY0NAorLS0tIGEvdXRpbHMvcGVybGl2cC5QTAorKysrIGIvdXRpbHMvcGVybGl2cC5QTAorQEAgLTE1Myw2ICsxNTMsNyBAQCBteSAkSU5DX3RvdGFsID0gMDsKKyBteSAkSU5DX3RoZXJlID0gMDsKKyBmb3JlYWNoIChASU5DKSB7CisgICAgIG5leHQgaWYgJF8gZXEgJy4nOyAjIHNraXAgLWQgdGVzdCBoZXJlCisrICAgIG5leHQgaWYgbXwvdXNyL2xvY2FsfDsgIyBub3Qgc2hpcHBlZCBvbiBEZWJpYW4KKyAgICAgaWYgKC1kICRfKSB7CisgICAgICAgICBwcmludCAiIyMgUGVybCBcQElOQyBkaXJlY3RvcnkgJyRfJyBleGlzdHMuXG4iIGlmICRvcHR7J3YnfTsKKyAgICAgICAgICRJTkNfdGhlcmUrKzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcG9kMm1hbi1jdXN0b21pemVkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3MGI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCkBAIC0wLDAgKzEsMjMgQEAKK0Zyb20gMjdhNDk1MmMyZTUzMTk0N2RjOWYyZjAyZTIwNjNkMTE3ZTJlNjk5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTggQXByIDIwMTUgMTc6Mzk6MzIgKzAzMDAKK1N1YmplY3Q6IFVwZGF0ZSBwb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGZvciBwb2QybWFuIG1vZGlmaWNhdGlvbnMKKworUGF0Y2gtTmFtZTogZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCistLS0KKyB0L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK2luZGV4IDBlZWQ5ZjcuLjdkZjM5OGQgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKKysrKyBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorQEAgLTQyLDcgKzQyLDcgQEAgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL01ha2VmaWxlLlBMIDYwNWQwYWVlMzFhZWJlODRhOTk0MDhmOWFiNWY2NDRkYjUKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdC9maWxlLnQgMTI0ZTY0YWE3N2U3NTUyMzVlYjI5NzY0NGE4N2ZhYzUzODhkM2Q3OAorIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS90L3RpZS50IDcxMmVhN2VkZDBjYzgwNWNlMWMwYjgxNzJjMDFiMDNkZDE5YjU4M2QKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdHlwZW1hcCAyNGJmZjA4OGJhYmVhZGFjMDg3M2U4ZGYzOTBkMTY2NmQ5ZDlkYjRhCistcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCBmODFhY2Y1M2YzZmY0NmNkY2M1ZWJkZDY2MWM1ZDEzZWIzNWQyMGQ2CisrcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCA3NjFmMzVkM2ZjZjkxYzFiYzJmOWUwMjRhOWZhNWM2MmZkM2ZjMzM4CisgcG9kbGF0b3JzIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMnRleHQuUEwgYjQ2OTNmY2ZlNGEwYTFiMzhhMjE1Y2ZiODk4NWE2NWQ1ZDAyNWQ2OQorIHZlcnNpb24gY3Bhbi92ZXJzaW9uL2xpYi92ZXJzaW9uLnBtIGQwOTIzYjg5NWQ1N2YxZDY2OWFlMzZmY2Y4NWM4N2IxNmRiMzQxZDEKKyB2ZXJzaW9uIHZ1dGlsLmMgNjY4ZjE3Y2E0M2UyNTI3NjQ1Njc0ZDI5YmE3NzJiODYzMzBkNTY2MwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxZWZiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKQEAgLTAsMCArMSwxMTggQEAKK0Zyb20gOTE0OTQ4ZjAyNmVmY2UwMmNmMGFiZmY4YjAzMTJhYWFkOTY1OTJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBGaWRkbGUgd2l0aCAqUFJFRklYIGFuZCB2YXJpYWJsZXMgd3JpdHRlbiB0byB0aGUgbWFrZWZpbGUKKworRmlkZGxlIHdpdGggKlBSRUZJWCBhbmQgdmFyaWFibGVzIHdyaXR0ZW4gdG8gdGhlIG1ha2VmaWxlIHNvIHRoYXQKK2luc3RhbGwgZGlyZWN0b3JpZXMgbWF5IGJlIGNoYW5nZWQgd2hlbiBtYWtlIGlzIHJ1biBieSBwYXNzaW5nCitQUkVGSVg9IHRvIHRoZSAibWFrZSBpbnN0YWxsIiBjb21tYW5kICh1c2VkIHdoZW4gcGFja2FnaW5nCittb2R1bGVzKS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gIHwgMTIgKysrKysrLS0tLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAgMyArLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudCAgICAgICAgICAgICAgICB8ICA0ICstLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQgICAgICAgICB8IDEwICsrKysrLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0KK2luZGV4IDRjMDAxMjkuLjFlYTIwMzUgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCitAQCAtOTAyLDggKzkwMiw2IEBAIGFsbCBQT0QgZmlsZXMgaW4gTUFOMVBPRFMgYW5kIE1BTjNQT0RTLgorIHN1YiBtYW5pZnlwb2RzX3RhcmdldCB7CisgICAgIG15KCRzZWxmKSA9IHNoaWZ0OworIAorLSAgICBteSAkbWFuMXBvZHMgICAgICA9ICcnOworLSAgICBteSAkbWFuM3BvZHMgICAgICA9ICcnOworICAgICBteSAkZGVwZW5kZW5jaWVzICA9ICcnOworIAorICAgICAjIHBvcHVsYXRlIG1hblhwb2RzICYgZGVwZW5kZW5jaWVzOgorQEAgLTkxOSw3ICs5MTcsNyBAQCBFTkQKKyAgICAgZm9yZWFjaCBteSAkc2VjdGlvbiAocXcoMSAzKSkgeworICAgICAgICAgbXkgJHBvZHMgPSAkc2VsZi0+eyJNQU4ke3NlY3Rpb259UE9EUyJ9OworICAgICAgICAgbXkgJHAybSA9IHNwcmludGYgPDxDTUQsICRdID4gNS4wMDggPyAiIC11IiA6ICIiOworLQlcJChOT0VDSE8pIFwkKFBPRDJNQU4pIC0tc2VjdGlvbj0kc2VjdGlvbiAtLXBlcm1fcnc9XCQoUEVSTV9SVyklcworKwlcJChOT0VDSE8pIFwkKFBPRDJNQU4pIC0tc2VjdGlvbj1cJChNQU4ke3NlY3Rpb259RVhUKSAtLXBlcm1fcnc9XCQoUEVSTV9SVyklcworIENNRAorICAgICAgICAgcHVzaCBAbWFuX2NtZHMsICRzZWxmLT5zcGxpdF9jb21tYW5kKCRwMm0sIG1hcCB7KCRfLCRwb2RzLT57JF99KX0gc29ydCBrZXlzICUkcG9kcyk7CisgICAgIH0KK0BAIC0xODc1LDkgKzE4NzMsMTEgQEAgc3ViIGluaXRfSU5TVEFMTF9mcm9tX1BSRUZJWCB7CisgICAgICAgICAkc2VsZi0+e1NJVEVQUkVGSVh9ICAgfHw9ICRzcHJlZml4OworICAgICAgICAgJHNlbGYtPntWRU5ET1JQUkVGSVh9IHx8PSAkdnByZWZpeDsKKyAKKy0gICAgICAgICMgTG90cyBvZiBNTSBleHRlbnNpb24gYXV0aG9ycyBsaWtlIHRvIHVzZSAkKFBSRUZJWCkgc28gd2UKKy0gICAgICAgICMgcHV0IHNvbWV0aGluZyBzZW5zaWJsZSBpbiB0aGVyZSBubyBtYXR0ZXIgd2hhdC4KKy0gICAgICAgICRzZWxmLT57UFJFRklYfSA9ICckKCcudWMgJHNlbGYtPntJTlNUQUxMRElSU30uJ1BSRUZJWCknOworKwlteSAkcCA9ICRzZWxmLT57UFJFRklYfSA9ICRzZWxmLT57UEVSTFBSRUZJWH07CisrCWZvciBteSAkdCAocXcvUEVSTCBTSVRFIFZFTkRPUi8pCisrCXsKKysJICAgICRzZWxmLT57IiR7dH1QUkVGSVgifSA9fiBzIV5cUSRwXEUoPz0vfCQpIVwkKFBSRUZJWCkhOworKwl9CisgICAgIH0KKyAKKyAgICAgbXkgJGFyY2ggICAgPSAkQ29uZmlne2FyY2huYW1lfTsKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCAzOTFkYzIyLi40YThlMTRjIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMzA3Nyw4ICszMDc3LDcgQEAgc3ViIHByZWZpeGlmeSB7CisgICAgIHdhcm4gIiAgcHJlZml4aWZ5ICR2YXIgPT4gJHBhdGhcbiIgaWYgJFZlcmJvc2UgPj0gMjsKKyAgICAgd2FybiAiICAgIGZyb20gJHNwcmVmaXggdG8gJHJwcmVmaXhcbiIgaWYgJFZlcmJvc2UgPj0gMjsKKyAKKy0gICAgaWYoICRzZWxmLT57QVJHU317UFJFRklYfSAmJgorLSAgICAgICAgJHBhdGggIX4gc3teXFEkc3ByZWZpeFxFXGJ9eyRycHJlZml4fXMgKQorKyAgICBpZiggJHBhdGggIX4gc3teXFEkc3ByZWZpeFxFXGJ9eyRycHJlZml4fXMgJiYgJHNlbGYtPntBUkdTfXtQUkVGSVh9ICkKKyAgICAgeworIAorICAgICAgICAgd2FybiAiICAgIGNhbm5vdCBwcmVmaXgsIHVzaW5nIGRlZmF1bHQuXG4iIGlmICRWZXJib3NlID49IDI7CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAoraW5kZXggOTEwNThiYi4uZTM5OWNlZCAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAorQEAgLTY1LDkgKzY1LDcgQEAgaXNhX29rKCAkbW0sICdFeHRVdGlsczo6TWFrZU1ha2VyJyApOworIGlzKCAkbW0tPntOQU1FfSwgJ0JpZzo6RHVtbXknLCAgJ05BTUUnICk7CisgaXMoICRtbS0+e1ZFUlNJT059LCAwLjAxLCAgICAgICAgICAgICdWRVJTSU9OJyApOworIAorLW15ICRjb25maWdfcHJlZml4ID0gJENvbmZpZ3tpbnN0YWxscHJlZml4ZXhwfSB8fCAkQ29uZmlne2luc3RhbGxwcmVmaXh9IHx8CistICAgICAgICAgICAgICAgICAgICAkQ29uZmlne3ByZWZpeGV4cH0gICAgICAgIHx8ICRDb25maWd7cHJlZml4fTsKKy1pcyggJG1tLT57UEVSTFBSRUZJWH0sICRjb25maWdfcHJlZml4LCAgICdQRVJMUFJFRklYJyApOworK2lzKCAkbW0tPntQRVJMUFJFRklYfSwgJyQoUFJFRklYKScsICAgJ1BFUkxQUkVGSVgnICk7CisgCisgaXMoICEhJG1tLT57UEVSTF9DT1JFfSwgISEkRU5We1BFUkxfQ09SRX0sICdQRVJMX0NPUkUnICk7CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CitpbmRleCBlOGRlN2M2Li4zZmIzZjEyIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1RfUFJFRklYLnQKK0BAIC0xMCw3ICsxMCw3IEBAIEJFR0lOIHsKKyB9CisgCisgdXNlIHN0cmljdDsKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA1MjsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA0NzsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpVdGlsczsKKyB1c2UgTWFrZU1ha2VyOjpUZXN0OjpTZXR1cDo6QkZEOworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworQEAgLTYyLDE2ICs2MiwxNiBAQCBsaWtlKCAkc3Rkb3V0LT5yZWFkLCBxcnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAoPzpXcml0aW5nXCBNWU1FVEEueW1sXCBhbmRcIE1ZTUVUQS5qc29uXG4pPworIH14ICk7CisgCistaXMoICRtbS0+e1BSRUZJWH0sICckKFNJVEVQUkVGSVgpJywgJ1BSRUZJWCBzZXQgYmFzZWQgb24gSU5TVEFMTERJUlMnICk7CisrI2lzKCAkbW0tPntQUkVGSVh9LCAnJChTSVRFUFJFRklYKScsICdQUkVGSVggc2V0IGJhc2VkIG9uIElOU1RBTExESVJTJyApOworIAorIGlzYV9vayggJG1tLCAnRXh0VXRpbHM6Ok1ha2VNYWtlcicgKTsKKyAKKyBpcyggJG1tLT57TkFNRX0sICdCaWc6OkR1bW15JywgICdOQU1FJyApOworIGlzKCAkbW0tPntWRVJTSU9OfSwgMC4wMSwgICAgICAgICAgICAnVkVSU0lPTicgKTsKKyAKKy1mb3JlYWNoIG15ICRwcmVmaXggKHF3KFBSRUZJWCBQRVJMUFJFRklYIFNJVEVQUkVGSVggVkVORE9SUFJFRklYKSkgeworLSAgICB1bmxpa2UoICRtbS0+eyRwcmVmaXh9LCBxci9cJFwoUFJFRklYXCkvICk7CistfQorKyNmb3JlYWNoIG15ICRwcmVmaXggKHF3KFBSRUZJWCBQRVJMUFJFRklYIFNJVEVQUkVGSVggVkVORE9SUFJFRklYKSkgeworKyMgICAgdW5saWtlKCAkbW0tPnskcHJlZml4fSwgcXIvXCRcKFBSRUZJWFwpLyApOworKyN9CisgCisgCisgbXkgJFBSRUZJWCA9IEZpbGU6OlNwZWMtPmNhdGRpcignZm9vJywgJ2JhcicpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAyMWJjMDMzNzU1ZjBiNjA5ZjliYjJhYTllOThiMTBkNTg0MjQ0MDZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE4IE1hciAyMDA1IDIyOjIyOjI1ICsxMTAwCitTdWJqZWN0OiBQcnVuZSB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgd2FudGVkIHRvIHdoYXQgd2UgYWN0dWFsbHkgbmVlZC4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xMjgzNTUKKworV2Ugd2FudCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgb24gcGVybC1iYXNlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLAorYW5kIHNvbWUgb2YgdGhlIG9yaWdpbmFsIGxpc3QgbWF5IGJlIHByZXNlbnQgb24gYnVpbGRkcyAoc2VlIEJ1ZyMxMjgzNTUpLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcHJ1bmVfbGlicy5kaWZmCistLS0KKyBDb25maWd1cmUgfCA1ICsrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL0NvbmZpZ3VyZSBiL0NvbmZpZ3VyZQoraW5kZXggMGE0MDVkMy4uNmZjYzNiYyAxMDA3NTUKKy0tLSBhL0NvbmZpZ3VyZQorKysrIGIvQ29uZmlndXJlCitAQCAtMTQ1NCw4ICsxNDU0LDcgQEAgbGlic3dhbnRlZF91c2VsYXJnZWZpbGVzPScnCisgOiBzZXQgdXNlc29ja3Mgb24gdGhlIENvbmZpZ3VyZSBjb21tYW5kIGxpbmUgdG8gZW5hYmxlIHNvY2tzLgorIDogTGlzdCBvZiBsaWJyYXJpZXMgd2Ugd2FudC4KKyA6IElmIGFueW9uZSBuZWVkcyBleHRyYSAtbHh4eCwgcHV0IHRob3NlIGluIGEgaGludCBmaWxlLgorLWxpYnN3YW50ZWQ9ImNsIHB0aHJlYWQgc29ja2V0IGJpbmQgaW5ldCBuc2wgbm0gbmRibSBnZGJtIGRibSBkYiBtYWxsb2MgZGwgbGQiCistbGlic3dhbnRlZD0iJGxpYnN3YW50ZWQgc3VuIG0gY3J5cHQgc2VjIHV0aWwgYyBjcG9zaXggcG9zaXggdWNiIGJzZCBCU0QiCisrbGlic3dhbnRlZD0nZ2RibSBnZGJtX2NvbXBhdCBkYiBkbCBtIGMgY3J5cHQnCisgOiBXZSBwcm9iYWJseSB3YW50IHRvIHNlYXJjaCAvdXNyL3NobGliIGJlZm9yZSBtb3N0IG90aGVyIGxpYnJhcmllcy4KKyA6IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBsaWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtIHJvdXRpbmUgZXh0bGlibGlzdC4KKyBnbGlicHRoPWBlY2hvICIgJGdsaWJwdGggIiB8IHNlZCAtZSAncyEgL3Vzci9zaGxpYiAhICEnYAorQEAgLTIzNTkzLDcgKzIzNTkyLDcgQEAgc3Vub3MqWDQqKQorICAgICA7OworICopIGNhc2UgIiR1c2VkbCIgaW4KKyAgICAgJGRlZmluZXx0cnVlfFt5WV0qKQorLQkgICAgc2V0IFggYGVjaG8gIiAkbGlicyAiIHwgc2VkIC1lICdzQCAtbG5kYm0gQCBAJyAtZSAnc0AgLWxnZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibV9jb21wYXQgQCBAJyAtZSAnc0AgLWxkYm0gQCBAJyAtZSAnc0AgLWxkYiBAIEAnYAorKwkgICAgc2V0IFggYGVjaG8gIiAkbGlicyAiIHwgc2VkIC1lICdzQCAtbGdkYm0gQCBAJyAtZSAnc0AgLWxnZGJtX2NvbXBhdCBAIEAnIC1lICdzQCAtbGRiIEAgQCdgCisgCSAgICBzaGlmdAorIAkgICAgcGVybGxpYnM9IiQqIgorIAkgICAgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTNmYzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gY2IzZTk4ZTE3YTY2Njg5NjE1MGIxMDk2OTRlOWViOTI3ODYyMDg0NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTcgTWF5IDIwMTQgMTQ6NTc6MDEgKzAzMDAKK1N1YmplY3Q6IFNraXAgYSByZWdlbmVyYXRpb24gY2hlY2sgaW4gdW5yZWxhdGVkIGdpdCByZXBvc2l0b3JpZXMKKworSWYgdGhlIHRlc3QgaXMgcnVuIGluIGEgZ2l0IHJlcG9zaXRvcnkgd2l0aG91dCBsaWIvLmdpdGlnbm9yZSwKK2ZvciBpbnN0YW5jZSBiZWNhdXNlIHRoZSByZXBvc2l0b3J5IG9ubHkgaW1wb3J0ZWQgdGhlIFBlcmwgdGFyYmFsbCwKK3RoZSByZWdlbmVyYXRpb24gY2hlY2sgaXMgYnJva2VuIGJlY2F1c2UgbGliLy5naXRpZ25vcmUgaXMgbWlzc2luZy4KKworUGF0Y2gtTmFtZTogZGViaWFuL3JlZ2VuLXNraXAuZGlmZgorLS0tCisgcmVnZW4vbGliX2NsZWFudXAucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9yZWdlbi9saWJfY2xlYW51cC5wbCBiL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCitpbmRleCBjOWQ2ZTQzLi5mZWNlMWVkIDEwMDY0NAorLS0tIGEvcmVnZW4vbGliX2NsZWFudXAucGwKKysrKyBiL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCitAQCAtMTU5LDcgKzE1OSw3IEBAIGZvcmVhY2ggKCd3aW4zMi9NYWtlZmlsZScsICd3aW4zMi9tYWtlZmlsZS5taycpIHsKKyB9CisgCisgIyBUaGlzIG11c3QgY29tZSBsYXN0IGFzIGl0IGNhbiBleGl0IGVhcmx5OgorLWlmICgkVEFQICYmICEtZCAnLmdpdCcgJiYgIS1mICdsaWIvLmdpdGlnbm9yZScpIHsKKytpZiAoJFRBUCAmJiAhLWQgJy5naXQnIHx8ICEtZiAnbGliLy5naXRpZ25vcmUnKSB7CisgICAgIHByaW50ICJvayAjIHNraXAgbm90IGJlaW5nIHJ1biBmcm9tIGEgZ2l0IGNoZWNrb3V0LCBoZW5jZSBubyBsaWIvLmdpdGlnbm9yZVxuIjsKKyAgICAgZXhpdCAwOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjMGJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNDI4NTNhZjY1YTI4MDY2YjExOWQyM2Q5NmU5NjRlOTRiNTVhODU0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgNSBBdWcgMjAxMSAxMDo1MDoxOCArMDMwMAorU3ViamVjdDogU2tpcCBhIGNyYXNoaW5nIHRlc3QgY2FzZSBpbiB0L29wL3RocmVhZHMudCBvbiBHTlUva0ZyZWVCU0QKKworQnVnOiBodHRwOi8vcnQucGVybC5vcmcvcnQzL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9OTYyNzIKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjI4NDkzCisKK1RoZSBjcmFzaCBpcyBub3QgYSByZWdyZXNzaW9uIGluIDUuMTQsIGl0IGp1c3QgZ2V0cyB0cmlnZ2VyZWQgdGhlcmUgYnkKK2EgbmV3IHVucmVsYXRlZCB0ZXN0IGNhc2UuCisKK1NraXAgdGhlIHRlc3QgdW50aWwgdGhlIGN1bHByaXQgaXMgZm91bmQuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKKy0tLQorIHQvb3AvdGhyZWFkcy50IHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdC9vcC90aHJlYWRzLnQgYi90L29wL3RocmVhZHMudAoraW5kZXggZTc2Yzk1Ni4uYmVjMjEwYiAxMDA2NDQKKy0tLSBhL3Qvb3AvdGhyZWFkcy50CisrKysgYi90L29wL3RocmVhZHMudAorQEAgLTM3Niw2ICszNzYsOSBAQCBFT0YKKyB9CisgCisgCisrU0tJUDogeworKyAgICBza2lwICJbcGVybCAjOTYyNzJdIGF2b2lkIGNyYXNoIG9uIEdOVS9rRnJlZUJTRCIsIDEKKysgICAgICAgIGlmICReTyBlcSAnZ251a2ZyZWVic2QnOworICMgW3BlcmwgIzc4NDk0XSBQaXBlcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIGJsb2NrIHdoZW4gY2xvc2VkCisgeworICAgbXkgJHBlcmwgPSB3aGljaF9wZXJsOworQEAgLTM4NCw2ICszODcsNyBAQCBFT0YKKyAgIHRocmVhZHMtPmNyZWF0ZShzdWIgeyB9KS0+am9pbjsKKyAgIG9rKDEsICJQaXBlcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIGRvIG5vdCBibG9jayB3aGVuIGNsb3NlZCIpOworIH0KKyt9CisgCisgIyBbcGVybCAjMTA1MjA4XSBUeXBlZ2xvYiBjbG9uZXMgc2hvdWxkIG5vdCBiZSBjbG9uZWQgYWdhaW4gZHVyaW5nIGEgam9pbgorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODcxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYWU5YjY0NWQ2ZGEyOTkwZmQwNTUzNjhlY2EyYzY3YzQ0OTQ3NGUzOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMjIgQXByIDIwMTEgMTE6MTU6MzIgKzAzMDAKK1N1YmplY3Q6IFNraXAgdGVzdHMgc3BlY2lmaWMgdG8gdGhlIHVwc3RyZWFtIEdpdCByZXBvc2l0b3J5CisKK1RoZXNlIHRlc3RzIGZhaWwgaWYgcnVuIGZyb20gYSBkaWZmZXJlbnQgZ2l0IHJlcG9zaXRvcnkgdGhhbgordXBzdHJlYW0uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIG5lZWRsZXNzbHkgZm9yIGRvd25zdHJlYW0gcGFja2FnZXJzLgorCitTa2lwIHRoZSB0ZXN0cyBhbHRvZ2V0aGVyIGV2ZW4gaWYgdGhlIC5naXQgZGlyZWN0b3J5IGV4aXN0cy4KKworUGF0Y2gtTmFtZTogZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYKKy0tLQorIHQvdGVzdC5wbCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3QvdGVzdC5wbCBiL3QvdGVzdC5wbAoraW5kZXggY2RhMzg0MC4uYWY1NzlhMiAxMDA2NDQKKy0tLSBhL3QvdGVzdC5wbAorKysrIGIvdC90ZXN0LnBsCitAQCAtMTc0LDcgKzE3NCw3IEBAIHN1YiBza2lwX2FsbF93aXRob3V0X3VuaWNvZGVfdGFibGVzIHsgIyAoYnV0IG9ubHkgdW5kZXIgbWluaXBlcmwpCisgCisgc3ViIGZpbmRfZ2l0X29yX3NraXAgeworICAgICBteSAoJHNvdXJjZV9kaXIsICRyZWFzb24pOworLSAgICBpZiAoLWQgJy5naXQnKSB7CisrICAgIGlmICgtZCAnLmdpdCcgJiYgISAtZCAnZGViaWFuJykgeworIAkkc291cmNlX2RpciA9ICcuJzsKKyAgICAgfSBlbHNpZiAoLWwgJ01BTklGRVNUJyAmJiAtbCAnQVVUSE9SUycpIHsKKyAJbXkgJHdoZXJlID0gcmVhZGxpbmsgJ01BTklGRVNUJzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMzE0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNDg3YTZkNmFkYTBiMDhlNmE3Mjc2NTIwZWJjNjFjZDg1MTAwNWU3YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMyBPY3QgMjAxMCAyMTozNjoxNyArMDMwMAorU3ViamVjdDogU3F1ZWxjaCBsb2NhbGUgd2FybmluZ3MgaW4gRGViaWFuIHBhY2thZ2UgbWFpbnRhaW5lciBzY3JpcHRzCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0CisKK1RoZSBzeXN0ZW0gbG9jYWxlcyBhcmUgcmF0aGVyIGZyZXF1ZW50bHkgb3V0IG9mIHN5bmMgd2l0aCB0aGUgQyBsaWJyYXJ5CitkdXJpbmcgcGFja2FnZSB1cGdyYWRlcywgY2F1c2luZyBhIGh1Z2UgYW1vdW50IG9mIHVzZWxlc3MgUGVybCBsb2NhbGUKK3dhcm5pbmdzLiBTcXVlbGNoIHRoZW0gd2hlbiBydW5uaW5nIHBhY2thZ2UgbWFpbnRhaW5lciBzY3JpcHRzLCBkZXRlY3RlZAorYnkgdGhlIERQS0dfUlVOTklOR19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitBbnkgcmVhbCBsb2NhbGUgcHJvYmxlbSB3aWxsIHNob3cgdXAgYWZ0ZXIgdGhlIHN5c3RlbSB1cGdyYWRlIHRvbywgYW5kCit0aGUgd2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBub3JtYWxseSBhZ2FpbiBhdCB0aGF0IHBvaW50LgorCitQYXRjaC1OYW1lOiBkZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgorLS0tCisgbG9jYWxlLmMgICAgICAgICAgIHwgNSArKysrLQorIHBvZC9wZXJsbG9jYWxlLnBvZCB8IDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xvY2FsZS5jIGIvbG9jYWxlLmMKK2luZGV4IDdhNGE0MTguLmZkZjkxMWQgMTAwNjQ0CistLS0gYS9sb2NhbGUuYworKysrIGIvbG9jYWxlLmMKK0BAIC02NzQsNyArNjc0LDEwIEBAIFBlcmxfaW5pdF9pMThubDEwbihwVEhYXyBpbnQgcHJpbnR3YXJuKQorIAorICAgICBjb25zdCBib29sIGxvY3dhcm4gPSAocHJpbnR3YXJuID4gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByaW50d2FybgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghIGJhZF9sYW5nX3VzZV9vbmNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWJpYW4gc3BlY2lmaWMgY2hhbmdlIC0gc2VlIGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTA4NzY0ICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFQZXJsRW52X2dldGVudigiRFBLR19SVU5OSU5HX1ZFUlNJT04iKSkgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoISBiYWRfbGFuZ191c2Vfb25jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlzYWxsb3cgd2l0aCAiIiBvciAiMCIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmFkX2xhbmdfdXNlX29uY2UKK2RpZmYgLS1naXQgYS9wb2QvcGVybGxvY2FsZS5wb2QgYi9wb2QvcGVybGxvY2FsZS5wb2QKK2luZGV4IDcwMWI0MjIuLjU4Y2FiYWYgMTAwNjQ0CistLS0gYS9wb2QvcGVybGxvY2FsZS5wb2QKKysrKyBiL3BvZC9wZXJsbG9jYWxlLnBvZAorQEAgLTEyMTcsNiArMTIxNywxNCBAQCBCPE5PVEU+OiBDPFBFUkxfQkFETEFORz4gb25seSBnaXZlcyB5b3UgYSB3YXkgdG8gaGlkZSB0aGUgd2FybmluZyBtZXNzYWdlLgorIFRoZSBtZXNzYWdlIHRlbGxzIGFib3V0IHNvbWUgcHJvYmxlbSBpbiB5b3VyIHN5c3RlbSdzIGxvY2FsZSBzdXBwb3J0LAorIGFuZCB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHdoYXQgdGhlIHByb2JsZW0gaXMuCisgCisrPWl0ZW0gRFBLR19SVU5OSU5HX1ZFUlNJT04KKysKKytPbiBEZWJpYW4gc3lzdGVtcywgaWYgdGhlIERQS0dfUlVOTklOR19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIGlzCisrc2V0ICh0byBhbnkgdmFsdWUpLCB0aGUgbG9jYWxlIGZhaWx1cmUgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIGp1c3QKKytsaWtlIHdpdGggYSB6ZXJvIFBFUkxfQkFETEFORyBzZXR0aW5nLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZmxvb2RzCisrb2Ygc3B1cmlvdXMgd2FybmluZ3MgZHVyaW5nIHN5c3RlbSB1cGdyYWRlcy4KKytTZWUgTDxodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2ND4uCisrCisgPWJhY2sKKyAKKyBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNwZWNpZmljIHRvIFBlcmw6IFRoZXkgYXJlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWRjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgpAQCAtMCwwICsxLDM2IEBACitGcm9tIDU5MWMxZjliN2Q0NzU1YmZjNTlkOTY2NWJhYjFmMmNhNDEwZGU3NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogU2V0IHVtYXNrIGFwcHJvcHJvYXRlbHkgZm9yIHNpdGUgaW5zdGFsbCBkaXJlY3RvcmllcworCitQb2xpY3kgcmVxdWlyZXMgZ3JvdXAgd3JpdGFibGUgc2l0ZSBkaXJlY3RvcmllcworCitQYXRjaC1OYW1lOiBkZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggMTk3ZjEwMi4uNWYxYjg3ZiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTIxMzgsNyArMjEzOCw3IEBAIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMUFJJVkxJQikiIFwKKyAKKyAKKyBwdXJlX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDI7ICQoTU9EX0lOU1RBTEwpIFwKKyB9OworICAgICBwdXNoIEBtLAorIHF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTk5LDggKzIxOTksOCBAQCBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9keW5hbG9hZGVyaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmNTkzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorSGFjayB0aGUgZHluYW1pYyBtb2R1bGUgbG9hZGVyIHNvIHRoYXQgd2UgdXNlIG5hdGl2ZSBtb2R1bGVzIHNpbmNlIHdlIGNhbid0IGxvYWQKK3RoZSB0YXJnZXQgb25lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQCisyMDEzLzAxLzEzCisKK0luZGV4OiBwZXJsLTUuMTQuMi9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9leHQvRHluYUxvYWRlci9EeW5hTG9hZGVyX3BtLlBMCTIwMTEtMDktMTkgMTM6MTg6MjIuMDAwMDAwMDAwICswMDAwCisrKysgcGVybC01LjE0LjIvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAkyMDEzLTAxLTE5IDE2OjA5OjUxLjAyMDU4NDk0NSArMDAwMAorQEAgLTMxMCw2ICszMTAsMTAgQEAKKyAgICAgZm9yZWFjaCAoQElOQykgeworIAk8PCReTy1lcS1WTVM+PmNob3AoJF8gPSBWTVM6OkZpbGVzcGVjOjp1bml4cGF0aCgkXykpOzw8LyReTy1lcS1WTVM+PgorIAkgICAgbXkgJGRpciA9ICIkXy9hdXRvLyRtb2RwbmFtZSI7CisrCisrCWlmIChkZWZpbmVkICRFTlZ7UEVSTF9MSUJ9IGFuZCBkZWZpbmVkICRFTlZ7UEVSTEhPU1RMSUJ9KSB7CisrCSAgICAkZGlyID1+IHMvJEVOVntQRVJMX0xJQn0vJEVOVntQRVJMSE9TVExJQn0vZzsKKysJfQorIAkKKyAJbmV4dCB1bmxlc3MgLWQgJGRpcjsgIyBza2lwIG92ZXIgdW5pbnRlcmVzdGluZyBkaXJlY3RvcmllcworIAkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLWhpbnRzLWxpbnV4LnBsLWxpbmstbGliZ2RibV9jb21wYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0ZWY3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYmE0ZWQwYjViN2JhYWQ1MzUzYzFlNjViNjU1ZjQxZDQ1ZTAxYzk5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMiBKdW4gMjAxNSAyMDowMDoxMSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBleHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsOiBsaW5rIGxpYmdkYm1fY29tcGF0CisKK0ZpeGVkIGZvciB0ZXN0IGNhc2UgLi4vZXh0L09EQk1fRmlsZS90L29kYm0udDoKK29rIDEgLSB1c2UgT0RCTV9GaWxlOworb2sgMiAtIHVzZSBGY250bDsKKy4vcGVybDogc3ltYm9sIGxvb2t1cCBlcnJvcjogL3Vzci9saWIvcGVybC81LjIyLjAvYXV0by9PREJNX0ZpbGUvT0RCTV9GaWxlLnNvOiB1bmRlZmluZWQgc3ltYm9sOiBkYm1pbml0CisKK1RoZSBjaGVja2luZyAiaWYgLWUgJF8uJy9saWJnZGJtX2NvbXBhdC5zbyciIGRvZXNuJ3Qgd29yayB3aGVuIGNyb3NzCitidWlsZCwgc28gYWx3YXlzIGxpbmsgbGliZ2RibV9jb21wYXQsIHNpbmNlIHBlcmwgZGVwZW5kcyBvbiBnZGJtIGFuZCB3ZQorYWx3YXlzIGhhdmUgbGliZ2RibV9jb21wYXQuCisKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsIHwgICAgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwgYi9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsCitpbmRleCAyMDRiYmEwLi45MjcxYjQ1IDEwMDY0NAorLS0tIGEvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAorKysrIGIvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAorQEAgLTEsOCArMSwyIEBACisgIyB1c2VzIEdEQk0gZGJtIGNvbXBhdGliaWxpdHkgZmVhdHVyZSAtIGF0IGxlYXN0IG9uIFN1U0UgOC4wCistJHNlbGYtPntMSUJTfSA9IFsnLWxnZGJtJ107CistCistIyBEZWJpYW4vVWJ1bnR1IGhhdmUgbGliZ2RibV9jb21wYXQuc28gYnV0IG5vdCB0aGlzIGZpbGUsCistIyBzbyBsaW5raW5nIG1heSBmYWlsCistZm9yZWFjaCAoc3BsaXQgLyAvLCAkQ29uZmlne2xpYnB0aH0pIHsKKy0gICAgJHNlbGYtPntMSUJTfS0+WzBdIC49ICcgLWxnZGJtX2NvbXBhdCcgaWYgLWUgJF8uJy9saWJnZGJtX2NvbXBhdC5zbyc7CistfQorKyRzZWxmLT57TElCU30gPSBbJy1sZ2RibSAtbGdkYm1fY29tcGF0J107CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwNWI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS10LW9kYm0udC1maXgtdGhlLXBhdGgtb2YtZGJtdF9jb21tb24ucC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGI4NDJlMWRlNzc5OGExZjdkZjc3MGJiM2YxODVhZDMzNTZlNDkwZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjIgSnVuIDIwMTUgMjA6MDY6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZXh0L09EQk1fRmlsZS90L29kYm0udDogZml4IHRoZSAgcGF0aCBvZiBkYm10X2NvbW1vbi5wbAorCitJdCBzaG91bGQgYmUgbGliL2RibXRfY29tbW9uLnBsIHdoZW4gcnVuIGJ5IHJ1bi1wdGVzdC4KKworRml4ZWQ6CitDYW4ndCBsb2NhdGUgLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwgaW4gQElOQworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGV4dC9PREJNX0ZpbGUvdC9vZGJtLnQgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvT0RCTV9GaWxlL3Qvb2RibS50IGIvZXh0L09EQk1fRmlsZS90L29kYm0udAoraW5kZXggMDc5YjlmMS4uMjUwYjk5MSAxMDA2NDQKKy0tLSBhL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKKysrKyBiL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKK0BAIC0yLDcgKzIsNyBAQAorIAorIG91ciAkREJNX0NsYXNzID0gJ09EQk1fRmlsZSc7CisgCistcmVxdWlyZSAnLi4vLi4vdC9saWIvZGJtdF9jb21tb24ucGwnOworK3JlcXVpcmUgJ2xpYi9kYm10X2NvbW1vbi5wbCc7CisgCisgaWYgKCReTyBlcSAnaHB1eCcpIHsKKyAgICAgcHJpbnQgPDxFT007CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWM0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2ZpeF9iYWRfcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDcvMDEKKworRml4IHRoZXNlIFBhY2thZ2UgUUEgd2FybmluZ3MgYmVmb3JlIHRoZXkgYXJlIGNvbnZlcnRlZCBpbnRvIGZldGFsIGVycm9yczoKKworV0FSTklORzogUUEgSXNzdWU6IHBhY2thZ2UgcGVybC1tb2R1bGUtY29tcHJlc3MgY29udGFpbnMgYmFkIFJQQVRIIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9xZW11eDg2L3Vzci9saWIgaW4gZmlsZSAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMC90bXAvd29yay9pNTg2LXBva3ktbGludXgvcGVybC01LjEyLjMtcjEvcGFja2FnZXMtc3BsaXQvcGVybC1tb2R1bGUtY29tcHJlc3MvdXNyL2xpYi9wZXJsLzUuMTIuMy9hdXRvL0NvbXByZXNzL1Jhdy9abGliL1psaWIuc28KKworVGhpcyBmaXhlcyB0aGlzIHdhcm5pbmcgZm9yIHBlcmwgcmVjaXBlIGFzIHdlbGwgYXMgbGlieG1sLXBhcnNlci1wZXJsIHJlY2lwZS4gCitJdCBpcyBhIGZpeCB0byBNYWtlTWFrZXIgd2l0aGluIHBlcmwsIHNvIGFsbCBzdWNoIHBlcmwgcmVjaXBlcyB3aWxsIGdldCAKK2ZpeGVkIHdpdGggdGhpcyBwZXJsIGZpeC4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisrKysgcGVybC01LjE0LjIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCitAQCAtNTUsNiArNTUsNyBAQCBzdWIgX3VuaXhfb3MyX2V4dCB7CisgICAgIG15KCRmb3VuZCkgPSAwOworIAorICAgICAjIERlYmlhbi1zcGVjaWZpYzogZG9uJ3QgdXNlIExEX1JVTl9QQVRIIGZvciBzdGFuZGFyZCBkaXJzCisrICAgIHB1c2goQGxpYnBhdGgsICJTWVNST09UTElCIik7CisgICAgICRsZF9ydW5fcGF0aF9zZWVueyRffSsrIGZvciBAbGlicGF0aDsKKyAKKyAgICAgZm9yZWFjaCBteSAkdGhpc2xpYiAoc3BsaXQgJyAnLCAkcG90ZW50aWFsX2xpYnMpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZ2VuZXJhdGUtc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjZlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVXNlIHRoZSBsZCBmbGFncyBmcm9tIHRoZSBzdXBwbGllZCBjb25maWd1cmF0aW9uIGZpbGUuIEZvciBzaCB3ZSBuZWVkIHRoZQorZmxhZ3MgdGhhdCBzcGVjaWZ5IHRvIGJ1aWxkIFBJQyBjb2RlIHNvIHRoYXQgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd29yay4KKworSW5kZXg6IHBlcmwtNS4xNC4yL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCTIwMTAtMTItMzAgMDQ6MDc6MTQuMDAwMDAwMDAwICswMjAwCisrKysgcGVybC01LjE0LjIvQ3Jvc3MvZ2VuZXJhdGVfY29uZmlnX3NoCTIwMTItMTEtMjIgMTU6NTg6NDkuODUyODUyODA1ICswMjAwCitAQCAtMTksMTAgKzE5LDEwIEBACisgJGNhbGxiYWNrcy0+eydhcid9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQVIiLCAiYXJtLWxpbnV4LWFyIl1dOworICRjYWxsYmFja3MtPnsnYXJjaG5hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIlNZUyIsICJhcm12NGwtbGludXgiXV07CisgJGNhbGxiYWNrcy0+eydjYyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyJdXTsKKy0kY2FsbGJhY2tzLT57J2NjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CistJGNhbGxiYWNrcy0+eydjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CistJGNhbGxiYWNrcy0+eydjY2ZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworLSRjYWxsYmFja3MtPnsnY2NmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworKyMkY2FsbGJhY2tzLT57J2NjY2RsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNGTEFHUyIsICIiXV07CisrIyRjYWxsYmFja3MtPnsnY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworKyRjYWxsYmFja3MtPnsnY2NmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0LCBbIkNGTEFHUyIsICItZm5vLXN0cmljdC1hbGlhc2luZyAtRF9HTlVfU09VUkNFIC1EVEhSRUFEU19IQVZFX1BJRFMgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworKyRjYWxsYmFja3MtPnsnY2NmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19pbnNlcnQsIFsiQ0ZMQUdTIiwgIi1EX0dOVV9TT1VSQ0UgLURUSFJFQURTX0hBVkVfUElEUyAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiXV07CisgJGNhbGxiYWNrcy0+eydjY25hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDIiwgImFybS1saW51eC1nY2MiXV07CisgJGNhbGxiYWNrcy0+eydjcHAnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDUCIsICJhcm0tbGludXgtY3BwIl1dOworICRjYWxsYmFja3MtPnsnY3BwZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDUEZMQUdTIiwgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIl1dOworQEAgLTMwLDYgKzMwLDcgQEAKKyAkY2FsbGJhY2tzLT57J2NwcHN0ZGluJ30gPSBbXCZzaW1wbGVfcHJvY2Vzc19hcHBlbmQsIFsiQ0MiLCAiYXJtLWxpbnV4LWdjYyAtRSIsICItRSJdXTsKKyAkY2FsbGJhY2tzLT57J2Z1bGxfYXInfSA9IFtcJmJhY2t0aWNrLCBbIkFSIiwgIndoaWNoICRFTlZ7QVJ9IiwgIi91c3IvbG9jYWwvYXJtLzIuOTUuMy9iaW4vYXJtLWxpbnV4LWFyIl1dOworICRjYWxsYmFja3MtPnsnbGQnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxEIiwgImFybS1saW51eC1sZCJdXTsKKyskY2FsbGJhY2tzLT57J2xkZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTERETEZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J2xkZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxERkxBR1MiLCAiIl1dOworICRjYWxsYmFja3MtPnsnbGRmbGFnc191c2VsYXJnZWZpbGVzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMREZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J215YXJjaG5hbWUnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIlNZUyIsICJhcm12NGwtbGludXgiXV07CitAQCAtMTA1LDYgKzEwNiwyMyBAQAorIAorIH0KKyAKKysjIEluc2VydCBlbnYgdmFyIGludG8gdGhlIHZhcmlhYmxlcyB2YWx1ZQorK3N1YiBzaW1wbGVfcHJvY2Vzc19pbnNlcnQgeworKwlteSAka2V5ID0gc2hpZnQ7CisrCW15ICR2YWx1ZSA9IHNoaWZ0OworKwlteSAkZW52dmFyID0gJGNhbGxiYWNrcy0+eyRrZXl9LT5bMV1bMF07CisrCisrCWlmICgkRU5WeyRlbnZ2YXJ9KSB7CisrCQkjIFN0cmlwIHF1b3RlcyBmcm9tIHZhbHVlCisrCQkkdmFsdWUgPX4gcy9eXCcvLzsKKysJCSR2YWx1ZSA9fiBzL1wnJC8vOworKwkJIyBSZW1vdmUgLUkvdXNyL2xvY2FsLy4uLiBmcm9tIHRoZSB2YWx1ZQorKwkJJHZhbHVlID1+IHMjXFctSS91c3IvbG9jYWwvXHcrXFcjICNnOworKwkJIyBQcmVwZW5kIGVudiB2YXIgKE9FIHNldHRpbmcpIHRvIHZhbHVlCisrCQlwcmludCgiJGtleT1cJyRFTlZ7JGVudnZhcn0gJHZhbHVlXCdcbiIpOworKwl9CisrfQorKworIHN1YiBsaWJyYXJ5X211bmdlIHsKKyAJbXkgJGtleSA9IHNoaWZ0OworIAlteSAkdmFsdWUgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvaW5zdGFsbHBlcmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjAxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xMi4zL2luc3RhbGxwZXJsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9pbnN0YWxscGVybAorKysrIHBlcmwtNS4xMi4zL2luc3RhbGxwZXJsCitAQCAtMyw4ICszLDggQEAKKyBCRUdJTiB7CisgICAgIHJlcXVpcmUgNS4wMDQ7CisgICAgIGNoZGlyICcuLicgaWYgIS1kICdsaWInIGFuZCAtZCAnLi4vbGliJzsKKy0gICAgQElOQyA9ICdsaWInOworLSAgICAkRU5We1BFUkw1TElCfSA9ICdsaWInOworKyMgICAgQElOQyA9ICdsaWInOworKyMgICAgJEVOVntQRVJMNUxJQn0gPSAnbGliJzsKKyAKKyAgICAgIyBUaGlzIG5lZWRzIHRvIGJlIGF0IEJFR0lOIHRpbWUsIGJlZm9yZSBhbnkgdXNlIG9mIENvbmZpZworICAgICByZXF1aXJlICcuL2luc3RhbGxfbGliLnBsJzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbGV0Z2NjLWZpbmQtZXJybm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjFlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyByZW1vdmVzIGFsbCB0aGUgbG9naWMgdGhhdCBwZXJsIHVzZXMgdG8gbG9jYXRlIGFuIGFwcHJvcHJpYXRlCitlcnJuby5oIGZvciB0aGUgdGFyZ2V0LiBJbnN0ZWFkIHdlIHNpbXBsZSBjcmVhdGUgYSBmaWxlIHRoYXQgZG9lcworCisgICNpbmNsdWRlICJlcnJuby5oIgorCithbmQgdXNlIHRoYXQgYXMgdGhlIGZpbGUgdG8gcGFyc2UuIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcgYW4KK2V4dGVybmFsIHRvb2xjaGFpbiBzaW5jZSBwZXJsIHdpbGwgc2VhcmNoIGluICR7U1RBR0lOR19JTkNESVJ9IGZvcgorZXJybm8uaCAod2hlbiB1c2luZyBnY2MpIGFuZCB0aGF0IGlzbid0IHdoZXJlIGl0J3MgbG9jYXRlZCAtIGl0cword2hlcmV2ZXIgdGhlIGV4dGVybmFsIHRvb2xjaGFpbiBrZWVwcyBpdCdzIGhlYWRlcnMuCisKK0luZGV4OiBwZXJsLTUuMTIuMy9leHQvRXJybm8vRXJybm9fcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL2V4dC9FcnJuby9FcnJub19wbS5QTAorKysrIHBlcmwtNS4xMi4zL2V4dC9FcnJuby9FcnJub19wbS5QTAorQEAgLTE3LDggKzE3LDE4IEBAIHVubGluayAiRXJybm8udG1wIiBpZiAtZiAiRXJybm8udG1wIjsKKyBvcGVuIE9VVCwgIj5FcnJuby50bXAiIG9yIGRpZSAiQ2Fubm90IG9wZW4gRXJybm8udG1wOiAkISI7Cisgc2VsZWN0IE9VVDsKKyBteSAkZmlsZTsKKy1teSBAZmlsZXMgPSBnZXRfZmlsZXMoKTsKKy1pZiAoJENvbmZpZ3tnY2N2ZXJzaW9ufSBuZSAnJyAmJiAkXk8gZXEgJ01TV2luMzInKSB7CisrI215IEBmaWxlcyA9IGdldF9maWxlcygpOworK215IEBmaWxlcyA9ICgiZXJybm8uaCIpOworKworK2lmICgxKSB7CisrICAgIG9wZW4gSU5DUywgJz5pbmNsdWRlcy5jJyBvcgorKwlkaWUgIkNhbm5vdCBvcGVuIGluY2x1ZGVzLmMiOworKyAgICBwcmludCBJTkNTIHFxWyNpbmNsdWRlICJlcnJuby5oIlxuXTsKKysgICAgY2xvc2UgSU5DUzsKKysgICAgcHJvY2Vzc19maWxlKCdpbmNsdWRlcy5jJyk7CisrICAgIHVubGluayAnaW5jbHVkZXMuYyc7CisrfQorK2Vsc2lmICgkQ29uZmlne2djY3ZlcnNpb259IG5lICcnICYmICReTyBlcSAnTVNXaW4zMicpIHsKKyAgICAgIyBNaW5HVyBjb21wbGFpbnMgIndhcm5pbmc6ICNwcmFnbWEgc3lzdGVtX2hlYWRlciBpZ25vcmVkIG91dHNpZGUgaW5jbHVkZQorICAgICAjIGZpbGUiIGlmIHRoZSBoZWFkZXIgZmlsZXMgYXJlIHByb2Nlc3NlZCBpbmRpdmlkdWFsbHksIHNvIGluY2x1ZGUgdGhlbQorICAgICAjIGFsbCBpbiAuYyBmaWxlIGFuZCBwcm9jZXNzIHRoYXQgaW5zdGVhZC4KK0BAIC01Myw3ICs2Myw3IEBAIHN1YiBwcm9jZXNzX2ZpbGUgeworICAgICAgICAgY2hvbXAoJGZpbGUgPSBgY3lncGF0aCAtdyAiJGZpbGUiYCk7CisgICAgIH0KKyAKKy0gICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRmaWxlIGFuZCAtZiAkZmlsZTsKKysjICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkZmlsZSBhbmQgLWYgJGZpbGU7CisgIyAgICB3YXJuICJQcm9jZXNzaW5nICRmaWxlXG4iOworIAorICAgICBsb2NhbCAqRkg7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ZjY1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaApAQCAtMCwwICsxLDMwIEBACittYWtlX2V4dC5wbDogZml4IHJlZ2VuZXJhdGUgbWFrZWZpbGUgZmFpbGVkIHdoaWxlICRjYyBjaGFuZ2VkCisKK1doaWxlICRjYyBjaGFuZ2VkLCB0aGUgZXhpc3RhbmNlIG9mICd4ZGVmaW5lJyBjYXVzZWQgbWFrZWZpbGUKK3JlZ2VuZXJhdGlvbiBmYWlsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBtYWtlX2V4dC5wbCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21ha2VfZXh0LnBsIGIvbWFrZV9leHQucGwKK2luZGV4IGI0MzM3NjIuLjlmYzFhMzYgMTAwNjQ0CistLS0gYS9tYWtlX2V4dC5wbAorKysrIGIvbWFrZV9leHQucGwKK0BAIC0zMzUsNiArMzM1LDEwIEBAIHN1YiBidWlsZF9leHRlbnNpb24geworICAgICAgICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgbm9uLUNyb3NzIG1ha2VmaWxlXG4iOworICAgICAgICAgICAgICAgICBjbG9zZSAkbWZoIG9yIGRpZSAiY2xvc2UgJG1ha2VmaWxlOiAkISI7CisgICAgICAgICAgICAgICAgIF91bmxpbmsoJG1ha2VmaWxlKTsKKysgICAgICAgICAgICAgICAgaWYoLWUgJ3hkZWZpbmUnKSB7CisrICAgICAgICAgICAgICAgICAgICBwcmludCAiRGVsZXRpbmcgeGRlZmluZSBmb3IgcmVnZW5lcmF0ZSBtYWtlZmlsZVxuIjsKKysgICAgICAgICAgICAgICAgICAgIF91bmxpbmsoJ3hkZWZpbmUnKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLW5vcGFja2xpc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODJkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1BhcnQgb2YgNTJfZGViaWFuX2V4dHV0aWxzX2hhY2tzLnBhdGNoIGp1c3QgdG8gZXhjbHVkZSB0aGUgaW5zdGFsbGF0aW9uIG9mIC5wYWNrbGlzdCBmaWxlcworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8ICAgMzUgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IGY2MzE0NWMuLmE1ODk3MTAgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTIyLDExICsyMTIyLDYgQEAgcHVyZV9wZXJsX2luc3RhbGwgOjogYWxsCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKy0KKy0gICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCQkiJChJTlNUX0FSQ0hMSUIpIiAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIiBcCisgCQkiJChJTlNUX0JJTikiICIkKERFU1RJTlNUQUxMQklOKSIgXAorQEAgLTIxNTgsMTAgKzIxNTMsNiBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgcHVyZV92ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKyB9OworLSAgICBwdXNoIEBtLAorLXF7CQlyZWFkICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExWRU5ET1JBUkNIKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKyAKKyAgICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFZFTkRPUkxJQikiIFwKK0BAIC0yMTg3LDM3ICsyMTc4LDE5IEBAIGRvY192ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAKKyAgICAgcHVzaCBAbSwgcXsKKyBkb2NfcGVybF9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpL3Blcmxsb2NhbC5wb2QiCisrCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMU0lURUFSQ0gpIgorIAktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorIAkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorIAkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisrCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFNJVEVBUkNIKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgJChET0NfSU5TVEFMTCkgXAorLQkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKy0JCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIH0gdW5sZXNzICRzZWxmLT57Tk9fUEVSTExPQ0FMfTsKKyAKK0BAIC0yMjI2LDEzICsyMTk5LDExIEBAIHVuaW5zdGFsbCA6OiB1bmluc3RhbGxfZnJvbV8kKElOU1RBTExESVJTKWRpcnMKKyAJJChOT0VDSE8pICQoTk9PUCkKKyAKKyB1bmluc3RhbGxfZnJvbV9wZXJsZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFBFUkxfQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIAorIHVuaW5zdGFsbF9mcm9tX3NpdGVkaXJzIDo6CisgCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoU0lURUFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV92ZW5kb3JkaXJzIDo6CistCSQoTk9FQ0hPKSAkKFVOSU5TVEFMTCkgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IgorIH07CisgCisgICAgIGpvaW4oIiIsQG0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtcGVybGluYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiYjFmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGVybC01LjguOC9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0JMjAwOC0xMC0zMSAyMjowMTozNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBwZXJsLTUuMTIuMy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQkyMDA4LTEwLTMxIDIyOjAxOjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1OTcsNiArMTU5NywxOSBAQAorIAkkc2VsZi0+e1BFUkxfTElCfSAgICAgfHw9ICRDb25maWd7cHJpdmxpYmV4cH07CisgCSRzZWxmLT57UEVSTF9BUkNITElCfSB8fD0gJENvbmZpZ3thcmNobGliZXhwfTsKKyAJJHNlbGYtPntQRVJMX0lOQ30gICAgID0gJHNlbGYtPmNhdGRpcigiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9IiwiQ09SRSIpOyAjIHdpbGQgZ3Vlc3MgZm9yIG5vdworKwkjIENoZWNrIGZvciBlbnZpcm9ubWVudCBvdmVycmlkZSBzbyB3ZSdsbCBmaW5kIHRoZSBoZWFkZXJzIGluIHRoZSBjb3JyZWN0IHBsYWNlCisrICAgICAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfTElCfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfTElCfSA9ICRFTlZ7UEVSTF9MSUJ9OworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0FSQ0hMSUJ9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9BUkNITElCfSA9ICRFTlZ7UEVSTF9BUkNITElCfTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9JTkN9KQorKyAgICAgICAgeworKyAgICAgICAgICAgICRzZWxmLT57UEVSTF9JTkN9ID0gJEVOVntQRVJMX0lOQ307CisrICAgICAgICB9CisgCW15ICRwZXJsX2g7CisgCisgCWlmIChub3QgLWYgKCRwZXJsX2ggPSAkc2VsZi0+Y2F0ZmlsZSgkc2VsZi0+e1BFUkxfSU5DfSwicGVybC5oIikpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDkwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDkwYzI1MmNlY2MzOGFlZDVkNWZhZWRiMzA0ODVkZDZlZWUyZTU0ZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUgMTU6MTQ6NDAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGVybCAvIFBhdGhUb29sczogZG9uJ3QgZmlsdGVyIG91dCBibGliIGZyb20gQElOQworCitJZiAkVE9QRElSIGluY2x1ZGVzIHRoZSBzdHJpbmcgImJsaWIiLCBmaWx0ZXIgaXQgb3V0IGZyb20gQElOQyBtYXkgZW1wdHkKK3RoZSBASU5DIGFuZCBjYXVzZSBidWlsZCBlcnJvcnMgbGlrZToKKworICBDYW4ndCBsb2NhdGUgRXh0VXRpbHMvTWFrZU1ha2VyLnBtIGluIEBJTkMgXAorICAoeW91IG1heSBuZWVkIHRvIGluc3RhbGwgdGhlIEV4dFV0aWxzOjpNYWtlTWFrZXIgbW9kdWxlKSBcCisgIChASU5DIGNvbnRhaW5zOiAuKSBhdCBNYWtlZmlsZS5QTAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTCB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTCBiL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCitpbmRleCAxYjIxZGU0Li5mNTYyY2IyIDEwMDY0NAorLS0tIGEvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwKKysrKyBiL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCitAQCAtMSw2ICsxLDMgQEAKKy0KKy1CRUdJTiB7IEBJTkMgPSBncmVwIHshL2JsaWIvfSBASU5DIH0KKy0KKyByZXF1aXJlIDUuMDA1OworIHVzZSBFeHRVdGlsczo6TWFrZU1ha2VyOworIFdyaXRlTWFrZWZpbGUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTJkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtYXJjaGxpYi1leHAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorcGVybDogYWRkIGFyY2hsaWJfZXhwIHZhcmlhYmxlIHVzZWQgdG8gZ2VuZXJhdGUgQVJDSExJQl9FWFAgaW4gY29uZmlnLmgKKyAgICAKK3BlcmwuYyB1c2VzIGFuIEFSQ0hMSUJfRVhQIGRlZmluZSB0byBnZW5lcmF0ZSBjb21waWxlLXRpbWUgY29kZSB0aGF0CithZGRzIHRoZSBhcmNobGliZXhwIHBhdGggdG8gQElOQyBkdXJpbmcgcnVuLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgYQorbmV3IHBlcmwgaW50ZXJwcmV0ZXIuCisgICAgCitCZWNhdXNlIHdlJ3ZlIGNoYW5nZWQgdGhpcyB2YWx1ZSBpbiBhIHRlbXBvcmFyeSB3YXkgdG8gbWFrZSBpdAorcG9zc2libGUgdG8gdXNlIEV4dFV0aWxzOjpFbWJlZCBpbiB0aGUgdGFyZ2V0IGJ1aWxkICh0aGUgdGVtcG9yYXJ5Cit2YWx1ZSBpbiBjb25maWcuc2ggZ2V0cyByZS1zdHJpcHBlZCBvdXQgZHVyaW5nIHBhY2thZ2luZyksIHRoZQorQVJDSExJQl9FWFAgdmFsdWUgdGhhdCBnZXRzIGdlbmVyYXRlZCBzdGlsbCB1c2VzIHRoZSB0ZW1wb3JhcnkgdmVyc2lvbgoraW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgZXhwZWN0ZWQgdmVyc2lvbiAoaS5lLiBiZWNhdXNlcyBpdCdzIGluIHRoZQorZ2VuZXJhdGVkIGNvbmZpZy5oLCBpdCBkb2Vzbid0IGdldCBzdHJpcHBlZCBvdXQgZHVyaW5nIHBhY2thZ2luZyBsaWtlCit0aGUgb3RoZXJzIGluIGNvbmZpZy5zaCkuCisKK1RoaXMgY3JlYXRlcyBhbiB1bm1vZGlmaWVkIHZlcnNpb24gY2FsbGVkIGFyY2hsaWJfZXhwIHRoYXQgZ2V0cyB1c2VkCitieSBhIG1vZGlmaWVkIGNvbmZpZ19oLlNIIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBpbnRvIGNvbmZpZy5oCisgICAgCitUaGlzIHBhdGNoIHVzZXMgYW4gdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGFyY2hsaWJleHAgY2FsbGVkCithcmNobGliX2V4cCwgaW50cm9kdWNlZCB0byBjb25maWcuc2gsIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCitjb3JyZWN0IHZhbHVlIG9mIEFSQ0hMSUJfRVhQIGludG8gY29uZmlnLmgKKyAgCitTZWUgWU9DVE8gIzMwOTkgZm9yIG1vcmUgaW5mby4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogcGVybC01LjE0LjIvY29uZmlnX2guU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NvbmZpZ19oLlNICisrKysgcGVybC01LjE0LjIvY29uZmlnX2guU0gKK0BAIC05OTYsNyArOTk2LDcgQEAgc2VkIDw8IUdST0shVEhJUyEgPiRDT05GSUdfSCAtZSAncyFeI3VuZAorICAqCWluIHByb2dyYW1zIHRoYXQgYXJlIG5vdCBwcmVwYXJlZCB0byBkZWFsIHdpdGggfiBleHBhbnNpb24gYXQgcnVuLXRpbWUuCisgICovCisgIyRkX2FyY2hsaWIgQVJDSExJQiAiJGFyY2hsaWIiCQkvKiovCistIyRkX2FyY2hsaWIgQVJDSExJQl9FWFAgIiRhcmNobGliZXhwIgkJLyoqLworKyMkZF9hcmNobGliIEFSQ0hMSUJfRVhQICIkYXJjaGxpYl9leHAiCQkvKiovCisgCisgLyogQVJDSE5BTUU6CisgICoJVGhpcyBzeW1ib2wgaG9sZHMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhcmNoaXRlY3R1cmUgbmFtZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWdwbS1zd2l0Y2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2MxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtuYXRpdmVdCisKK1RoaXMgcGF0Y2ggaXMgdXNlZCBmb3IgcGVybC1uYXRpdmUgb25seS4gSXQgZW5hYmxlcyB0aGUgc3dpdGNoaW5nIG9mCitjb25maWd1cmF0aW9uIGZpbGVzIGJldHdlZW4gQ29uZmlnX2hlYXZ5LnBsIGFuZAorQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK1BFUkxDT05GSUdUQVJHRVQgLSB0aGUgbGF0ZXIgY29udGFpbmluZyBzZXR0aW5ncyBmb3IgdGhlIHRhcmdldCB3aGlsZQordGhlIGZvcm1lciBjb250YWlucyB0aG9zZSBmb3IgdGhlIGhvc3QuIFRoaXMgd2lsbCBhbGxvdyBjcGFuLmJiY2xhc3MKK3RvIHVzZSB0aGUgc2V0dGluZ3MgYXBwcm9wcmlhdGUgZm9yIHRoZSBuYXRpdmUgYW5kL29yIHRhcmdldCBidWlsZHMKK2FzIHJlcXVpcmVkLiBUaGlzIGFsc28gZGlzYWJsZXMgdGhlIHVzZSBvZiB0aGUgY2FjaGUgc2luY2UgdGhlIGNhY2hlZAordmFsdWVzIHdvdWxkIGJlIHZhbGlkIGZvciB0aGUgaG9zdCBvbmx5LgorCitJbmRleDogcGVybC01LjE0LjIvY29uZmlncG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NvbmZpZ3BtCisrKysgcGVybC01LjE0LjIvY29uZmlncG0KK0BAIC02NTgsNyArNjU4LDcgQEAgc3ViIEZFVENIIHsKKyAgICAgbXkoJHNlbGYsICRrZXkpID0gQF87CisgCisgICAgICMgY2hlY2sgZm9yIGNhY2hlZCB2YWx1ZSAod2hpY2ggbWF5IGJlIHVuZGVmIHNvIHdlIHVzZSBleGlzdHMgbm90IGRlZmluZWQpCistICAgIHJldHVybiBleGlzdHMgJHNlbGYtPnska2V5fSA/ICRzZWxmLT57JGtleX0gOiAkc2VsZi0+ZmV0Y2hfc3RyaW5nKCRrZXkpOworKyAgICByZXR1cm4gJHNlbGYtPmZldGNoX3N0cmluZygka2V5KTsKKyB9CisgCisgRU5ET0ZFTkQKK0BAIC04MTYsNyArODE2LDIxIEBAICRjb25maWdfdHh0IC49IHNwcmludGYgPDwnRU5ET0ZUSUUnLCAkZmEKKyBzdWIgREVTVFJPWSB7IH0KKyAKKyBzdWIgQVVUT0xPQUQgeworLSAgICByZXF1aXJlICdDb25maWdfaGVhdnkucGwnOworKyAgICBteSAkY2ZnZmlsZSA9ICdDb25maWdfaGVhdnkucGwnOworKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxDT05GSUdUQVJHRVR9IGFuZCAkRU5We1BFUkxDT05GSUdUQVJHRVR9IGVxICJ5ZXMiKQorKyAgICB7CisrICAgICAgICAkY2ZnZmlsZSA9ICdDb25maWdfaGVhdnktdGFyZ2V0LnBsJzsKKysgICAgfQorKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfQVJDSExJQn0pCisrICAgIHsKKysgICAgICAgIHB1c2ggQElOQywgJEVOVntQRVJMX0FSQ0hMSUJ9OworKyAgICAgICAgcmVxdWlyZSAkY2ZnZmlsZTsKKysgICAgICAgIHBvcCBASU5DOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmVxdWlyZSAkY2ZnZmlsZTsKKysgICAgfQorICAgICBnb3RvIFwmbGF1bmNoZXIgdW5sZXNzICRDb25maWc6OkFVVE9MT0FEID1+IC9sYXVuY2hlciQvOworICAgICBkaWUgIiZDb25maWc6OkFVVE9MT0FEIGZhaWxlZCBvbiAkQ29uZmlnOjpBVVRPTE9BRCI7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3VyZS5zaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcyY2U0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEgL2Jpbi9zaAorCisjCisjIEdlbmVyYXRlIHRoZSBjb21tb24gcGVybCBjb25maWd1cmF0aW9uCisjIE5lZWRzIHRvIGJlIHJ1biBvbiBhIGhvc3QgdGhhdCBtYXRjaGVzIHRoZSBiaXRzaXplIG9mIHRoZSB0YXJnZXQgcGxhdGZvcm0KKyMKKworZWNobyBzaCBDb25maWd1cmUgLWRlcyBcCisgICAgICAgIC1Eb3B0aW1pemU9LU8yIFwKKyAgICAgICAgLURteWhvc3RuYW1lPWxvY2FsaG9zdCBcCisgICAgICAgIC1EcGVybGFkbWluPXJvb3RAbG9jYWxob3N0IFwKKyAgICAgICAgLURjYz1nY2MgXAorICAgICAgICAtRGNmX2J5PSdPcGVuIEVtYmVkZGVkJyBcCisgICAgICAgIC1EaW5zdGFsbHByZWZpeD1AREVTVERJUkAgXAorICAgICAgICAtRHByZWZpeD0vdXNyIFwKKyAgICAgICAgLUR2ZW5kb3JwcmVmaXg9L3VzciBcCisgICAgICAgIC1Ec2l0ZXByZWZpeD0vdXNyIFwKKyAgICAgICAgLURvdGhlcmxpYmRpcnM9L3Vzci9saWIvcGVybDUvNS4xMi4zIFwKKyAgICAgICAgLUR1c2VzaHJwbGliIFwKKyAgICAgICAgLUR1c2V0aHJlYWRzIFwKKyAgICAgICAgLUR1c2VpdGhyZWFkcyBcCisgICAgICAgIC1EdXNlbGFyZ2VmaWxlcyBcCisgICAgICAgIC1VZF9kb3N1aWQgXAorICAgICAgICAtRGRfc2VtY3RsX3NlbXVuIFwKKyAgICAgICAgLVVpX2RiIFwKKyAgICAgICAgLVVpX25kYm0gXAorICAgICAgICAtVWlfZ2RibSBcCisgICAgICAgIC1EaV9zaGFkb3cgXAorICAgICAgICAtRGlfc3lzbG9nIFwKKyAgICAgICAgLURtYW4zZXh0PTNwbSBcCisgICAgICAgIC1EdXNlcGVybGlvIFwKKyAgICAgICAgLURpbnN0YWxsdXNyYmlucGVybCBcCisgICAgICAgIC1VYmluY29tcGF0NTAwNSBcCisgICAgICAgIC1VdmVyc2lvbm9ubHkgXAorICAgICAgICAtRHBhZ2VyPScvdXNyL2Jpbi9sZXNzIC1pc3InCisKK2NwIC1mIGNvbmZpZy5zaCBjb25maWcuc2guQ09NTU9OCisKK1RBUkdFVE9TPSQoZ3JlcCBteWFyY2huYW1lIGNvbmZpZy5zaC5DT01NT04gfCBzZWQgInMjLionXCguKlwpJy4qI1wxIyIpCisKK3NlZCAtciAtaSBjb25maWcuc2guQ09NTU9OIFwKKwktZSAicyMoaW5zdGFsbC4qPScpKC91c3IpL2xvY2FsKC4qJykjXDFAREVTVERJUkBcMlwzI2ciIFwKKwktZSAncyMnJFRBUkdFVE9TJyNAQVJDSEAjZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1keW5sb2FkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNWJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworQWxsb3cgdGhlIGxvY2F0aW9uIHRoYXQgLnNvIGZpbGVzIGFyZSBzZWFyY2hlZCBmb3IgZm9yIGR5bmFtaWMKK2xvYWRpbmcgdG8gYmUgY2hhbmdlZCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIFRoaXMgaXMgdG8gYWxsb3cKK3VzIHRvIGxvYWQgLnNvJ3MgZnJvbSB0aGUgaG9zdCBzeXN0ZW0gd2hpbGUgYnVpbGRpbmcgZm9yIHRoZSB0YXJnZXQKK3N5c3RlbS4KKworVXBkYXRlIGJ5IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjEKKworSW5kZXg6IHBlcmwtNS4xNC4yL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2Rpc3QvWFNMb2FkZXIvWFNMb2FkZXJfcG0uUEwKKysrKyBwZXJsLTUuMTQuMi9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCitAQCAtMjgsNiArMjgsMjAgQEAgc3ViIGxvYWQgeworIAorICAgICBteSAoJG1vZHVsZSwgJG1vZGxpYm5hbWUpID0gY2FsbGVyKCk7CisgCisrICAgICMgT0U6IEFsbG93IGVudiB0byBmb3JtIGR5bmFtaWMgbG9hZGVyIHRvIGxvb2sgaW4gYSBkaWZmZXJlbnQgcGxhY2UKKysgICAgIyBUaGlzIGlzIHNvIGl0IGZpbmRzIHRoZSBob3N0IC5zbyBmaWxlcywgbm90IHRoZSB0YXJnZXRzCisrICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTEhPU1RMSUJ9KQorKyAgICB7CisrICAgICAgICBteSAkaG9zdGxpYiA9ICRFTlZ7UEVSTEhPU1RMSUJ9OworKyAgICAgICAgcHJpbnQgU1RERVJSICIqKiogTW9kdWxlIG5hbWUgSU46ICRtb2RsaWJuYW1lXG4iOworKyAgICAgICAgKCRwMSwgJHAyLCAkcDMsICRwNCwgJHA1KSA9ICRtb2RsaWJuYW1lID1+IG0vKF4oLipsaWJcdypcLyk/KSgocGVybFwvWzAtOVwuXSpcLyk/KSguKikkLzsKKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIHAxOiAkcDEgIHAzOiAkcDMgIHA1OiAkcDVcbiI7CisrICAgICAgICBpZiAoICRwMSBuZSAiIiApIHsKKysgICAgICAgICAgICAkbW9kbGlibmFtZSA9ICRob3N0bGliLiRwNTsKKysgICAgICAgIH0KKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIE1vZHVsZSBuYW1lIE9VVDogJG1vZGxpYm5hbWVcbiI7CisrICAgIH0KKysKKyAgICAgaWYgKEBfKSB7CisgCSRtb2R1bGUgPSAkX1swXTsKKyAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgzZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS44LjgvY29uZmlnX2guU0gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuOC44Lm9yaWcvY29uZmlnX2guU0gJMjAwNS0xMS0wMSAwMjoxMzowNS4wMDAwMDAwMDAgKzA4MDAKKysrKyBwZXJsLTUuOC44L2NvbmZpZ19oLlNICTIwMTAtMTEtMDEgMTc6MDY6MDcuMjE1MjE5NzM4ICswODAwCitAQCAtNzA5LDYgKzcwOSwxMiBAQAorICAqLworICMkaV9mbG9hdCBJX0ZMT0FUCQkvKiovCisgCisrLyogSV9HREJNOgorKyAqICAgICAgVGhpcyBzeW1ib2wsIGlmIGRlZmluZWQsIGluZGljYXRlcyB0aGF0IDxnZGJtLmg+IGV4aXN0cyBhbmQgc2hvdWxkCisrICogICAgICBiZSBpbmNsdWRlZC4KKysgKi8KKysjJGlfZ2RibSBJX0dEQk0gLyoqLworKworIC8qIElfTElNSVRTOgorICAqCVRoaXMgc3ltYm9sLCBpZiBkZWZpbmVkLCBpbmRpY2F0ZXMgdG8gdGhlIEMgcHJvZ3JhbSB0aGF0IGl0IHNob3VsZAorICAqCWluY2x1ZGUgPGxpbWl0cy5oPiB0byBnZXQgZGVmaW5pdGlvbiBvZiBzeW1ib2xzIGxpa2UgV09SRF9CSVQgb3IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLW1vcmVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZTg1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgbmVlZCBsZCBpbiB0aGUgZmFrZSBjb25maWcgbGlicmFyeSwgYnV0IGl0J3Mgbm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQuIFNvCitleHBhbmQgdGhlIG51bWJlciBvZiBpdGVtcyBpbmNsdWRlZC4gV2hpbGUgdGhpcyB3b3JrcyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKK3Jlc3Qgb2YgdGhlIGNvbmZpZyBpdGVtcyBhcmUgbm90IGJlaW5nIHBpY2tlZCB1cCBhbmQvb3IgYXJlIGJlaW5nIHBpY2tlZCB1cAorZnJvbSB0aGUgaG9zdC4gTW9yZSBpbnZlc3RpZ2F0aW9uIG5lZWRlZC4KKworLS0tIHBlcmwtNS44LjgvY29uZmlncG0JMjAwNy8wNC8yMCAwOTo0ODowNQkxLjEKKysrKyBwZXJsLTUuOC44L2NvbmZpZ3BtCTIwMDcvMDQvMjAgMDk6NTc6MTIKK0BAIC0yLDcgKzIsNyBAQAorIHVzZSBzdHJpY3Q7CisgdXNlIHZhcnMgcXcoJUNvbmZpZyAkQ29uZmlnX1NIX2V4cGFuZGVkKTsKKyAKKy1teSAkaG93X21hbnlfY29tbW9uID0gMjI7CisrbXkgJGhvd19tYW55X2NvbW1vbiA9IDUwOworIAorICMgY29tbW9ubHkgdXNlZCBuYW1lcyB0byBwcmVjYWNoZSAoYW5kIGhlbmNlIGxvb2t1cCBmYXN0ZXN0KQorIG15ICVDb21tb247CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmRkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorY2QgdCAmJiAuL1RFU1QgfCBzZWQgLXUgLWUgJ3N8XCguKlwpIC4qIG9rJHxQQVNTOiBcMXwnIC1lICdzfFwoLipcKSAuKiBza2lwcGVkfFNLSVA6IFwxfCcgLWUgJ3N8XCguKlwpIFwuXCguKlwpfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmZGY0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMTU2MTU0OWVhMzZlMzdjYzI1NzA2ZjA5NGExOTVkZTQ5MjhmNDIxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxOSBKdW4gMjAxNSAwMToyMzo0NiAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0L3J1bi9zd2l0Y2hlcy50OiBwZXJsNSAtPiBwZXJsCisKK1dlIGNhbGwgaXQgcGVybCByYXRoZXIgdGhhbiBwZXJsNSBpbiBvZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0L3J1bi9zd2l0Y2hlcy50IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdC9ydW4vc3dpdGNoZXMudCBiL3QvcnVuL3N3aXRjaGVzLnQKK2luZGV4IDc4OTE1ZTAuLmU5ZTRiNDUgMTAwNjQ0CistLS0gYS90L3J1bi9zd2l0Y2hlcy50CisrKysgYi90L3J1bi9zd2l0Y2hlcy50CitAQCAtMjY5LDcgKzI2OSw3IEBAIGlzIHJ1bnBlcmwoc3RkZXJyID0+IDEsIHByb2cgPT4gJyMhcGVybCAtTScpLAorICAgICAgICAgICAnLVYgZ2VuZXJhdGVzIDIwKyBsaW5lcycgKTsKKyAKKyAgICAgbGlrZSggcnVucGVybCggc3dpdGNoZXMgPT4gWyctViddICksCistCSAgcXIvXEFTdW1tYXJ5IG9mIG15IHBlcmw1IC4qY29uZmlndXJhdGlvbjovLAorKwkgIHFyL1xBU3VtbWFyeSBvZiBteSBwZXJsIC4qY29uZmlndXJhdGlvbjovLAorICAgICAgICAgICAnLVYgbG9va3Mgb2theScgKTsKKyAKKyAgICAgIyBsb29rdXAgYSBrbm93biBjb25maWcgdmFyCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjkzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorZGlzdC90aHJlYWRzL3Qvam9pbi50OiBhZGp1c3QgcHMgb3B0aW9uCisKK1RoZSBwcydzIG9wdGlvbiAnLWYnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYnVzeWJveCBpbiBvZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBkaXN0L3RocmVhZHMvdC9qb2luLnQgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXN0L3RocmVhZHMvdC9qb2luLnQgYi9kaXN0L3RocmVhZHMvdC9qb2luLnQKKy0tLSBhL2Rpc3QvdGhyZWFkcy90L2pvaW4udAorKysrIGIvZGlzdC90aHJlYWRzL3Qvam9pbi50CitAQCAtMTE4LDcgKzExOCw3IEBAIGlmICgkXk8gZXEgJ2xpbnV4JykgeworICAgICAgICAgICAgICAgICAgfSktPmpvaW47CisgICAgICNwcmludCAiIyBtYWludGhyZWFkOiBcJDAgPSAkMFxuIjsKKyAgICAgI3ByaW50ICIjIHBpZCA9ICQkXG4iOworLSAgICBpZiAob3BlbiBQUywgInBzIC1mIHwiKSB7ICMgTm90ZTogbXVzdCB3b3JrIGluIChhbGwpIHN5c3RlbXMuCisrICAgIGlmIChvcGVuIFBTLCAicHMgfCIpIHsgIyBOb3RlOiBtdXN0IHdvcmsgaW4gKGFsbCkgc3lzdGVtcy4KKyAgICAgICAgIG15ICgkc2F3cGlkLCAkc2F3ZXhlKTsKKyAgICAgICAgIHdoaWxlICg8UFM+KSB7CisgICAgICAgICAgICAgY2hvbXA7CitAQCAtMTM1LDEwICsxMzUsMTAgQEAgaWYgKCReTyBlcSAnbGludXgnKSB7CisgICAgICAgICBpZiAoJHNhd3BpZCkgeworICAgICAgICAgICAgIG9rKCRzYXdwaWQgJiYgJHNhd2V4ZSwgJ2FsdGVyaW5nICQwIGlzIGVmZmVjdGl2ZScpOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBza2lwKCJcJDAgY2hlY2s6IGRpZCBub3Qgc2VlIHBpZCAkJCBpbiAncHMgLWYgfCciKTsKKysgICAgICAgICAgICBza2lwKCJcJDAgY2hlY2s6IGRpZCBub3Qgc2VlIHBpZCAkJCBpbiAncHMgfCciKTsKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIHNraXAoIlwkMCBjaGVjazogb3BlbmluZyAncHMgLWYgfCcgZmFpbGVkOiAkISIpOworKyAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBvcGVuaW5nICdwcyB8JyBmYWlsZWQ6ICQhIik7CisgICAgIH0KKyB9IGVsc2UgeworICAgICBza2lwKCJcJDAgY2hlY2s6IG9ubHkgb24gTGludXgiKTsKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTc3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitleHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudDogZml4IGNhbGxpbmcgZGxfZmluZGZpbGUoKSBmYWlsZWQKKworVXNlICckQ29uZmlne2xpYmN9JyBhcyB0aGUgbGliYyBmaWxlIG5hbWUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50IGIvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKK2luZGV4IGFkZTFmOGUuLjM1NjdhZmUgMTAwNjQ0CistLS0gYS9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudAorKysrIGIvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKK0BAIC0xMDYsNyArMTA2LDcgQEAgb2soIGRlZmluZWQgJGRsZXJyLCAiZGxfZXJyb3IoKSByZXR1cm5pbmcgYW4gZXJyb3IgbWVzc2FnZTogJyRkbGVyciciICk7CisgIyAuLi4gZGxfZmluZGZpbGUoKQorIFNLSVA6IHsKKyAgICAgbXkgQGZpbGVzID0gKCk7CistICAgIGV2YWwgeyBAZmlsZXMgPSBEeW5hTG9hZGVyOjpkbF9maW5kZmlsZSgiYyIpIH07CisrICAgIGV2YWwgeyBAZmlsZXMgPSBEeW5hTG9hZGVyOjpkbF9maW5kZmlsZSgkQ29uZmlne2xpYmN9KSB9OworICAgICBpcyggJEAsICcnLCAiY2FsbGluZyBkbF9maW5kZmlsZSgpIiApOworICAgICAjIFNvbWUgcGxhdGZvcm1zIGFyZSBrbm93biB0byBub3QgaGF2ZSBhICJsaWJjIgorICAgICAjIChub3QgYXQgbGVhc3QgYnkgdGhhdCBuYW1lKSB0aGF0IHRoZSBkbF9maW5kZmlsZSgpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsXzUuMjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U3ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIKQEAgLTAsMCArMSwzNzEgQEAKK3JlcXVpcmUgcGVybC5pbmMKKworIyBXZSBuZWVkIGdudWdyZXAgKGZvciAtSSkKK0RFUEVORFMgPSAidmlydHVhbC9kYiBncmVwLW5hdGl2ZSIKK0RFUEVORFMgKz0gImdkYm0gemxpYiIKKworIyBQaWNrIHVwIHBhdGNoZXMgZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vcC9wZXJsL3BlcmxfNS4yMi4wLTEuZGViaWFuLnRhci54egorU1JDX1VSSSArPSAiIFwKKwlmaWxlOi8vZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9kYl9maWxlX3Zlci5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2RvY19pbmZvLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZW5jMnhzX2luYy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2Vycm5vX3Zlci5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvcmVzcGVjdF91bWFzay5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2xpYm5ldF9jb25maWdfcGF0aC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL21vZF9wYXRocy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3BydW5lX2xpYnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcGVybGl2cC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9maW5kX2h0bWwydGV4dC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaCBcCisJZmlsZTovL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvbWVtb2l6ZV9zdG9yYWJsZV9uc3RvcmUuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYgXAorIgorCitTUkNfVVJJICs9ICIgXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUuU0gucGF0Y2ggXAorICAgICAgICBmaWxlOi8vaW5zdGFsbHBlcmwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1keW5sb2FkZXIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1tb3JlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2xldGdjYy1maW5kLWVycm5vLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2dlbmVyYXRlLXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL25hdGl2ZS1wZXJsaW5jLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeF9iYWRfcnBhdGgucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1hcmNobGliLWV4cC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9keW5hbG9hZGVyaGFjay5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2ggXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTMyIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC0zMi1sZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtMzItYmUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTY0IFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC02NC1sZSBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtNjQtYmUgXAorICAgICAgICBmaWxlOi8vbWFrZV9leHQucGwtZml4LXJlZ2VuZXJhdGUtbWFrZWZpbGUtZmFpbGVkLXdoaWxlLWNjLS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly90LXJ1bi1zd2l0Y2hlcy50LXBlcmw1LXBlcmwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcGVybC1QYXRoVG9vbHMtZG9uLXQtZmlsdGVyLW91dC1ibGliLWZyb20tSU5DLnBhdGNoIFwKKyIKKworIyBGaXggdGVzdCBjYXNlIGlzc3VlcworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgICBmaWxlOi8vdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdGVzdC9leHQtRHluYUxvYWRlci10LUR5bmFMb2FkZXIudC1maXgtY2FsbGluZy1kbF9maW5kZmlsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmYwZjA5YjE3ZGU0MjZlZmYzMjM0MjZjYjE0MGVlNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmU4M2VhZDBjNWMyNmNiYmU2MjZmYTRiYWMxYTRiZWFiZTIzYTllZWJjMTVkMzViYTQ5Y2NkZTExODc4ZTE5NiIKKworaW5oZXJpdCBwZXJsbmF0aXZlIHNpdGVpbmZvCisKKyMgV2hlcmUgdG8gZmluZCB0aGUgbmF0aXZlIHBlcmwKK0hPU1RQRVJMID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsJHtQVn0iCisKKyMgV2hlcmUgdG8gZmluZCAuc28gZmlsZXMgLSB1c2UgdGhlIC1uYXRpdmUgdmVyc2lvbnMgbm90IHRob3NlIGZyb20gdGhlIHRhcmdldCBidWlsZAorZXhwb3J0IFBFUkxIT1NUTElCID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsLyR7UFZ9LyIKKworIyBXaGVyZSB0byBmaW5kIHBlcmwgQElOQy8jaW5jbHVkZSBmaWxlcworIyAtIHVzZSB0aGUgLW5hdGl2ZSB2ZXJzaW9ucyBub3QgdGhvc2UgZnJvbSB0aGUgdGFyZ2V0IGJ1aWxkCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtQVn0vIgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke1BWfS8iCisKKyMgTERGTEFHUyBmb3Igc2hhcmVkIGxpYnJhcmllcworZXhwb3J0IExERExGTEFHUyA9ICIke0xERkxBR1N9IC1zaGFyZWQiCisKK0xERkxBR1NfYXBwZW5kID0gIiAtZnN0YWNrLXByb3RlY3RvciIKKworIyBXZSdyZSBhbG1vc3QgRGViaWFuLCBhcmVuJ3Qgd2U/CitDRkxBR1MgKz0gIi1EREVCSUFOIgorCitkb19ub2xhcmdlZmlsZSgpIHsKKwlzZWQgLWkgLWUgInMsXCh1c2VsYXJnZWZpbGVzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKwkJLWUgInMsXChkX3JlYWRkaXI2NF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKwkJLWUgInMsXChyZWFkZGlyNjRfcl9wcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKwkJLWUgIi9jY2ZsYWdzX3VzZWxhcmdlZmlsZXMvZCIgXAorCQktZSAicy8tRHVzZWxhcmdlZmlsZXMvLyIgXAorCQktZSAicy8tRF9GSUxFX09GRlNFVF9CSVRTPTY0Ly8iIFwKKwkJLWUgInMvLURfTEFSR0VGSUxFX1NPVVJDRS8vIiBcCisJCSR7U30vQ3Jvc3MvY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorfQorCitkb19jb25maWd1cmUoKSB7CisgICAgICAgICMgTWFrZSBob3N0cGVybCBpbiBidWlsZCBkaXJlY3RvcnkgYmUgdGhlIG5hdGl2ZSBwZXJsCisgICAgICAgIGxuIC1zZiAke0hPU1RQRVJMfSBob3N0cGVybAorCisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiAtYSAtZSBNYWtlZmlsZSBdOyB0aGVuCisJCQkke01BS0V9IGNsZWFuCisJCWZpCisJCWZpbmQgJHtTfSAtbmFtZSAqLnNvIC1kZWxldGUKKwlmaQorCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKKworICAgICAgICAjIERvIG91ciB3b3JrIGluIHRoZSBjcm9zcyBzdWJkaXIKKyAgICAgICAgY2QgQ3Jvc3MKKworICAgICAgICAjIEdlbmVyYXRlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgcm0gLWYgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBmb3IgaSBpbiAke1dPUktESVJ9L2NvbmZpZy5zaCBcCisgICAgICAgICAgICAgICAgICR7V09SS0RJUn0vY29uZmlnLnNoLSR7U0lURUlORk9fQklUU30gXAorICAgICAgICAgICAgICAgICAke1dPUktESVJ9L2NvbmZpZy5zaC0ke1NJVEVJTkZPX0JJVFN9LSR7U0lURUlORk9fRU5ESUFOTkVTU307IGRvCisgICAgICAgICAgICBjYXQgJGkgPj4gY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBkb25lCisKKyAgICAgICAgIyBGaXh1cHMgZm9yIHVjbGliYworICAgICAgICBpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LXVjbGliYyIgLW8gIiR7VEFSR0VUX09TfSIgPSAibGludXgtdWNsaWJjZWFiaSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAicyxcKGRfY3J5cHRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9mdXRpbWVzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Zpbml0ZWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGNyeXB0X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieW5hbWVfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnluYW1lX3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieWFkZHJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnlhZGRyX3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0ZW50X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zb2NrYXRtYXJrPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3NvY2thdG1hcmtwcm90bz1cKSdcdysnLFwxJzAnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2VhY2Nlc3M9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9iYXNlPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZHN0ZGlvPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsLWZzdGFjay1wcm90ZWN0b3IsLWZuby1zdGFjay1wcm90ZWN0b3IsZyIgXAorICAgICAgICAgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGZpCisgICAgICAgICMgRml4dXBzIGZvciBtdXNsCisgICAgICAgIGlmIFsgIiR7VEFSR0VUX09TfSIgPSAibGludXgtbXVzbCIgLW8gIiR7VEFSR0VUX09TfSIgPSAibGludXgtbXVzbGVhYmkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInMsXChkX2xpYm1fbGliX3ZlcnNpb249XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9fcHRyX2x2YWxfc2V0c19jbnQ9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc3RkaW9iYXNlPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZHN0ZGlvPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2dldG5ldGJ5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX2Zpbml0ZWw9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvYnluYW1lX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHB3ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHNlcnZlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0aG9zdGVudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRuZXRlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0YnlhZGRyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldHByb3RvYnludW1iZXJfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0Z3JlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoaV9mY250bD1cKSd1bmRlZicsXDEnZGVmaW5lJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoaF9mY250bD1cKSdmYWxzZScsXDEndHJ1ZScsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtZnN0YWNrLXByb3RlY3RvciwtZm5vLXN0YWNrLXByb3RlY3RvcixnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLC1sbnNsLCxnIiBcCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZmkKKworCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJycsICdkb19ub2xhcmdlZmlsZScsIGQpfQorCisgICAgICAgICMgVXBkYXRlIHNvbWUgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VkIC1pIC1lICdzLEBBUkNIQC10aHJlYWQtbXVsdGksLGcnIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBBUkNIQCwke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30sZycgXAorICAgICAgICAgICAgICAgLWUgJ3MsQFNUQUdJTkdESVJALCR7U1RBR0lOR19ESVJfSE9TVH0sZycgXAorICAgICAgICAgICAgICAgLWUgInMsQElOQ0xVREVESVJALCR7U1RBR0lOR19JTkNESVJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBMSUJESVJALCR7bGliZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicyxAQkFTRUxJQkRJUkAsJHtiYXNlX2xpYmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsQEVYRUNQUkVGSVhALCR7ZXhlY19wcmVmaXh9LGciIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBVU1JCSU5ALCR7YmluZGlyfSxnJyBcCisgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisKKwljYXNlICIke1RBUkdFVF9BUkNIfSIgaW4KKwkJeDg2XzY0IHwgcG93ZXJwYyB8IHMzOTApCisJCQlzZWQgLWkgLWUgInMsXChuZWVkX3ZhX2NvcHk9XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorCQkJCWNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKwkJCTs7CisJCWFybSkKKwkJCXNlZCAtaSAtZSAicyxcKGRfdTMyYWxpZ249XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorCQkJCWNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKwkJCTs7CisJZXNhYworICAgICAgICAjIFRoZXNlIGFyZSBzdHJld24gYWxsIG92ZXIgdGhlIHNvdXJjZSB0cmVlCisgICAgICAgIGZvciBmb28gaW4gYGdyZXAgLUkgLS1leGNsdWRlPSIqLnBhdGNoIiAtLWV4Y2x1ZGU9IiouZGlmZiIgLS1leGNsdWRlPSIqLnBvZCIgLS1leGNsdWRlPSJSRUFETUUqIiAtbTEgIi91c3IvaW5jbHVkZS8uKlwuaCIgJHtTfS8qIC1yIC1sYCAke1N9L3V0aWxzL2gyeHMuUEwgOyBkbworICAgICAgICAgICAgZWNobyBGaXhpbmc6ICRmb28KKyAgICAgICAgICAgIHNlZCAtZSAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAkZm9vCisgICAgICAgIGRvbmUKKworICAgICAgICBybSAtZiBjb25maWcKKyAgICAgICAgZWNobyAiQVJDSCA9ICR7VEFSR0VUX0FSQ0h9IiA+IGNvbmZpZworICAgICAgICBlY2hvICJPUyA9ICR7VEFSR0VUX09TfSIgPj4gY29uZmlnCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgRml4IHRvIGF2b2lkIHJlY3Vyc2l2ZSBzdWJzdGl0dXRpb24gb2YgcGF0aAorICAgICAgICBzZWQgLWkgLWUgJ3N8KEBsaWJwYXRoLCAiLioifChAbGlicGF0aCwgIiR7U1RBR0lOR19MSUJESVJ9InxnJyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKworICAgICAgICBjZCBDcm9zcworICAgICAgICBvZV9ydW5tYWtlIHBlcmwgTEQ9IiR7Q0NMRH0iCit9CisKK2RvX2luc3RhbGwoKSB7CisJI2V4cG9ydCBob3N0cGVybD0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3Blcmwke1BWfSIKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9CisgICAgICAgICMgQWRkIHBlcmwgcG9pbnRpbmcgYXQgY3VycmVudCB2ZXJzaW9uCisgICAgICAgIGxuIC1zZiBwZXJsJHtQVn0gJHtEfSR7YmluZGlyfS9wZXJsCisKKyAgICAgICAgbG4gLXNmIHBlcmwgJHtEfS8ke2xpYmRpcn0vcGVybDUKKworICAgICAgICAjIFJlbW92ZSB1bndhbnRlZCBmaWxlIGFuZCBlbXB0eSBkaXJlY3RvcmllcworICAgICAgICBybSAtZiAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9Ly5wYWNrbGlzdAorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0vcGVybC9zaXRlX3BlcmwKKworICAgICAgICAjIEZpeCB1cCBzaGFyZWQgbGlicmFyeQorICAgICAgICBtdiAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvbGlicGVybC5zbyAke0R9LyR7bGliZGlyfS9saWJwZXJsLnNvLiR7UFZ9CisgICAgICAgIGxuIC1zZiBsaWJwZXJsLnNvLiR7UFZ9ICR7RH0vJHtsaWJkaXJ9L2xpYnBlcmwuc28uNQorICAgICAgICBsbiAtc2YgLi4vLi4vLi4vbGlicGVybC5zby4ke1BWfSAke0R9LyR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvbGlicGVybC5zbworCisgICAgICAgICMgdGFyZ2V0IGNvbmZpZywgdXNlZCBieSBjcGFuLmJiY2xhc3MgdG8gZXh0cmFjdCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAgICAgIGluc3RhbGwgY29uZmlnLnNoICR7RH0ke2xpYmRpcn0vcGVybAorCisgICAgICAgIGxuIC1zIENvbmZpZ19oZWF2eS5wbCAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LXRhcmdldC5wbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3BlcmwgXAorICAgICAgICAgICAgUEVSTDVMSUI9JyRQRVJMNUxJQjokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybDokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC8ke1BWfTokT0VDT1JFX05BVElWRV9TWVNST09ULyR7bGliZGlyX25hdGl2ZXNka30vcGVybC9zaXRlX3BlcmwvJHtQVn06JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCit9CisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicGVybF9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3BlcmxfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKyAgICAgICAgIyBGaXggdXAgaW5zdGFsbGVkIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VkIC1pIC1lICJzLCR7RH0sLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9LCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywtaXN5c3RlbSR7U1RBR0lOR19JTkNESVJ9ICwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0xJQkRJUn0sJHtsaWJkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJ9LCR7YmluZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfSU5DRElSfSwke2luY2x1ZGVkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS8sJHtiaW5kaXJ9LyxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vLCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtUQVJHRVRfUFJFRklYfSwke2JpbmRpcn0sZyIgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9oMnhzIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vaDJwaCBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJtYW4gXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QydGV4dCBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZDJ1c2FnZSBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L3BvZGNoZWNrZXIgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2RzZWxlY3QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvY29uZmlnLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUvcGVybC5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL3BwLmggXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnLnBvZCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LnBsIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRmlsZUNhY2hlLnBtIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9wb2QvKi5wb2QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsL2NvbmZpZy5zaAorfQorCitQQUNLQUdFUyA9ICJwZXJsLWRiZyBwZXJsIHBlcmwtbWlzYyBwZXJsLWRldiBwZXJsLXBvZCBwZXJsLWRvYyBwZXJsLWxpYiBcCisgICAgICAgICAgICBwZXJsLW1vZHVsZS1jcGFuIHBlcmwtbW9kdWxlLWNwYW5wbHVzIHBlcmwtbW9kdWxlLXVuaWNvcmUiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vcGVybCAke2JpbmRpcn0vcGVybCR7UFZ9IFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wbSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9zdHJpY3QucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vd2FybmluZ3MucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vd2FybmluZ3MgXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdmFycy5wbSBcCisgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7YmluZGlyfS9wZXJsLnJlYWwiCitSUFJPVklERVNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLXN0cmljdCBwZXJsLW1vZHVsZS12YXJzIHBlcmwtbW9kdWxlLWNvbmZpZyBwZXJsLW1vZHVsZS13YXJuaW5ncyBcCisgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NPUkUiCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYnBlcmwuc28qIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybDUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsL2NvbmZpZy5zaCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LnBsIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWdfaGVhdnktdGFyZ2V0LnBsIgorRklMRVNfJHtQTn0tcG9kID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L3BvZCBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyoucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyoucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovKi5wb2QgIgorRklMRVNfcGVybC1taXNjID0gIiR7YmluZGlyfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8qLy5kZWJ1ZyAiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLnR4dCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLyoudHh0IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9hdXRvL1hTL1R5cGVtYXAgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvYXNzZW1ibGUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvY2NfaGFybmVzcyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9kaXNhc3NlbWJsZSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQi9tYWtlbGlibGlua3MgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NHSS9lZyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi9QQVVTRTIwMDMucHViIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOL1NJR05BVFVSRSBcCisJCSAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTL1NoZWxsL0RlZmF1bHQvUGx1Z2lucy9IT1dUTy5wb2QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0VuY29kZS9lbmNvZGUuaCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTUFOSUZFU1QuU0tJUCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTk9URVMgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL1BBVENISU5HIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy90eXBlbWFwIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy94c3VicHAgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9DaGFuZ2VzX0VVLUluc3RhbGwgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L05ldC8qLmVnIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL21rdGFibGVzIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlL21rdGFibGVzLmxzdCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS92ZXJzaW9uICIKKworRklMRVNfcGVybC1tb2R1bGUtY3BhbiArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOLnBtIgorRklMRVNfcGVybC1tb2R1bGUtY3BhbnBsdXMgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU5QTFVTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUy5wbSIKK0ZJTEVTX3BlcmwtbW9kdWxlLXVuaWNvcmUgKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUiCisKKyMgQ3JlYXRlIGEgcGVybC1tb2R1bGVzIHBhY2thZ2UgcmVjb21tZW5kaW5nIGFsbCB0aGUgb3RoZXIgcGVybAorIyBwYWNrYWdlcyAoYWN0dWFsbHkgdGhlIG5vbiBtb2R1bGVzIHBhY2thZ2VzIGFuZCBub3QgY3JlYXRlZCB0b28pCitBTExPV19FTVBUWV9wZXJsLW1vZHVsZXMgPSAiMSIKK1BBQ0tBR0VTX2FwcGVuZCA9ICIgcGVybC1tb2R1bGVzICIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGVybC8ke1BWfScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnYXV0by8oW14uXSopL1teL10qXC4oc298bGR8aXh8YWwpJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKilcLnBtJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICdNb2R1bGUvKFteXC9dKikvLionLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJyheKD8hKENQQU5cL3xDUEFOUExVU1wvfE1vZHVsZVwvfHVuaWNvcmVcL3xhdXRvXC8pW15cL10pLiopXC4ocG18cGx8ZTJ4KScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBhbGxvd19kaXJzPUZhbHNlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisKKyAgICAjIHBlcmwtbW9kdWxlcyBzaG91bGQgcmVjb21tZW5kIGV2ZXJ5IHBlcmwgbW9kdWxlLCBhbmQgb25seSB0aGUKKyAgICAjIG1vZHVsZXMuIERvbid0IGF0dGVtcHQgdG8gdXNlIHRoZSByZXN1bHQgb2YgZG9fc3BsaXRfcGFja2FnZXMoKSBhcyBzb21lCisgICAgIyBtb2R1bGVzIGFyZSBtYW51YWxseSBzcGxpdCAoZWcuIHBlcmwtbW9kdWxlLXVuaWNvcmUpLgorICAgIHBhY2thZ2VzID0gZmlsdGVyKGxhbWJkYSBwOiAncGVybC1tb2R1bGUtJyBpbiBwLCBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpKQorICAgIGQuc2V0VmFyKCJSUkVDT01NRU5EU18ke1BOfS1tb2R1bGVzIiwgJyAnLmpvaW4ocGFja2FnZXMpKQorfQorCitQQUNLQUdFU19EWU5BTUlDICs9ICJecGVybC1tb2R1bGUtLioiCitQQUNLQUdFU19EWU5BTUlDX2NsYXNzLW5hdGl2ZXNkayArPSAiXm5hdGl2ZXNkay1wZXJsLW1vZHVsZS0uKiIKKworUlBST1ZJREVTX3BlcmwtbGliID0gInBlcmwtbGliIgorCityZXF1aXJlIHBlcmwtcmRlcGVuZHNfJHtQVn0uaW5jCityZXF1aXJlIHBlcmwtcHRlc3QuaW5jCisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqLnBtICoucG9kICouaCAqLnBsICouc2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWI1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy5pbmMKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJIZWxwZXIgdG9vbCB1c2VkIHdoZW4gY29tcGlsaW5nIgorREVTQ1JJUFRJT04gPSAicGtnLWNvbmZpZyBpcyBhIGhlbHBlciB0b29sIHVzZWQgd2hlbiBjb21waWxpbmcgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMuIEl0IGhlbHBzIGRldGVybWluZWQgXAordGhlIGNvcnJlY3QgY29tcGlsZXIvbGluayBvcHRpb25zLiAgSXQgaXMgYWxzbyBsYW5ndWFnZS1hZ25vc3RpYy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXBrZy1jb25maWciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1NSQ1JFViA9ICI0MDM0MmRkMGVhZDA1ZDQ1N2EyYTRlNjkyY2Y4NjVmNTAwMzNhNzA5IgorUFYgPSAiMC4yOCtnaXQke1NSQ1BWfSIKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGtnLWNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1pbnRlcm5hbC1nbGliIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGgtaW50ZXJuYWwtZ2xpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRoLWludGVybmFsLWdsaWIiCisKK2FjcGF0aHMgPSAiLUkgLiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFNldCBhbiBlbXB0eSBkZXYgcGFja2FnZSB0byBlbnN1cmUgdGhlIGJhc2UgUE4gcGFja2FnZSBnZXRzCisjIHRoZSBwa2cubTQgbWFjcm9zLCBwa2djb25maWcgZG9lcyBub3QgZGVsaXZlciBhbnkgb3RoZXIgLWRldgorIyBmaWxlcy4KK0ZJTEVTXyR7UE59LWRldiA9ICIiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsL3BrZy5tNCIKKworIyBXaGVuIHVzaW5nIHRoZSBSUE0gZ2VuZXJhdGVkIGF1dG9tYXRpYyBwYWNrYWdlIGRlcGVuZGVuY2llcywgc29tZSBwYWNrYWdlcworIyB3aWxsIGVuZCB1cCByZXF1aXJpbmcgJ3BrZ2NvbmZpZyhwa2ctY29uZmlnKScuICBBbGxvdyB0aGlzIGJlaGF2aW9yIGJ5CisjIHNwZWNpZnlpbmcgYW4gYXBwcm9wcmlhdGUgcHJvdmlkZS4KK1JQUk9WSURFU18ke1BOfSArPSAicGtnY29uZmlnKHBrZy1jb25maWcpIgorCisjIEluc3RhbGwgYSBwa2ctY29uZmlnLW5hdGl2ZSB3cmFwcGVyIHRoYXQgd2lsbCB1c2UgdGhlIG5hdGl2ZSBzeXNyb290IGluc3RlYWQKKyMgb2YgdGhlIE1BQ0hJTkUgc3lzcm9vdCwgZm9yIHVzaW5nIHBrZy1jb25maWcgd2hlbiBidWlsZGluZyBuYXRpdmUgdG9vbHMuCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtZSAic3xAUEFUSF9OQVRJVkVAfCR7UEtHX0NPTkZJR19QQVRIfXwiIFwKKyAgICAgICAgLWUgInN8QExJQkRJUl9OQVRJVkVAfCR7UEtHX0NPTkZJR19MSUJESVJ9fCIgXAorICAgICAgICA8ICR7V09SS0RJUn0vcGtnLWNvbmZpZy1uYXRpdmUuaW4gPiAke0J9L3BrZy1jb25maWctbmF0aXZlCisgICAgaW5zdGFsbCAtbTc1NSAke0J9L3BrZy1jb25maWctbmF0aXZlICR7RH0ke2JpbmRpcn0vcGtnLWNvbmZpZy1uYXRpdmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjNjI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBwa2ctY29uZmlnLTAuMjgvZ2xpYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwa2ctY29uZmlnLTAuMjgub3JpZy9nbGliL2NvbmZpZ3VyZS5hYworKysrIHBrZy1jb25maWctMC4yOC9nbGliL2NvbmZpZ3VyZS5hYworQEAgLTE0MzgsNyArMTQzOCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGgKKyAgIEdfTU9EVUxFX0xERkxBR1M9CisgZWxzZQorICAgZXhwb3J0IFNFRAorLSAgR19NT0RVTEVfTERGTEFHUz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorKyAgR19NT0RVTEVfTERGTEFHUz1gKC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTAzLDEzICsxNTAzLDEzIEBAIGlmIHRlc3QgIiRHX01PRFVMRV9JTVBMIiA9ICJHX01PRFVMRV9JTVAKKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtDUFBGTEFHU30gLWMgLW8gcGx1Z2luLmxvIHBsdWdpbi5jID4vZGV2L251bGwgMj4mMQorLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1tb2RlPWxpbmsgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7TERGTEFHU30gLW1vZHVsZSAtbyBwbHVnaW4ubGEgLWV4cG9ydC1keW5hbWljIFwKKyAJCS1zaHJleHQgIi5vIiAtYXZvaWQtdmVyc2lvbiBwbHVnaW4ubG8gXAorIAkJLXJwYXRoIC9kb250L2NhcmUgPi9kZXYvbnVsbCAyPiYxCistCWV2YWwgYC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgXm9iamRpcmAKKysJZXZhbCBgLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1jb25maWcgfCBncmVwIF5vYmpkaXJgCisgCUFDX0NBQ0hFX0NIRUNLKFtmb3IgUlRMRF9HTE9CQUwgYnJva2VubmVzc10sCisgCQlnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuLFsKKyAJCUFDX1RSWV9SVU4oWworQEAgLTE1ODIsNyArMTU4Miw3IEBAIGZpCisgCisgQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgc3VmZml4IG9mIG1vZHVsZSBzaGFyZWQgbGlicmFyaWVzKQorIGV4cG9ydCBTRUQKKy1zaHJleHRfY21kcz1gLi9saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisrc2hyZXh0X2NtZHM9YC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCAnXnNocmV4dF9jbWRzPSdgCisgZXZhbCAkc2hyZXh0X2NtZHMKKyBtb2R1bGU9eWVzIGV2YWwgc3RkX3NocmV4dD0kc2hyZXh0X2NtZHMKKyAjIGNob3AgdGhlIGluaXRpYWwgZG90CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL3BrZy1jb25maWctbmF0aXZlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDRiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbgpAQCAtMCwwICsxLDcgQEAKKyMhIC9iaW4vc2gKKworUEtHX0NPTkZJR19QQVRIPSJAUEFUSF9OQVRJVkVAIgorUEtHX0NPTkZJR19MSUJESVI9IkBMSUJESVJfTkFUSVZFQCIKK3Vuc2V0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIKKworcGtnLWNvbmZpZyAiJEAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhNTExYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnX2dpdC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgcGtnY29uZmlnLmluYworCitTUkNfVVJJICs9ICIgXAorICAgICAgICAgICAgZmlsZTovL3BrZy1jb25maWctbmF0aXZlLmluIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaCBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wb3N0aW5zdC1pbnRlcmNlcHQvbmF0aXZlc2RrLXBvc3RpbnN0LWludGVyY2VwdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzQ1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiUG9zdGluc3RhbGwgc2NyaXB0bGV0cyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0ZJTEVTXyR7UE59X2FwcGVuZCA9ICIgJHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLyoiCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMKKwlpbnN0YWxsIC1tIDc1NSAke0NPUkVCQVNFfS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvcG9zdGluc3RfaW50ZXJjZXB0ICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9pY29uX2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUgJHtEfSR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8KK30KKworaW5oZXJpdCBuYXRpdmVzZGsKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL21hY3Jvcy5wcmVsaW5rIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE2Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluawpAQCAtMCwwICsxLDUgQEAKKyMgcnBtLTQuMSB2ZXJpZmllcyBwcmVsaW5rZWQgbGlicmFyaWVzIHVzaW5nIGEgcHJlbGluayB1bmRvIGhlbHBlci4KKyMgICAgICAgTm90ZTogVGhlIDJuZCB0b2tlbiBpcyB1c2VkIGFzIGFyZ3ZbMF0gYW5kICJsaWJyYXJ5IiBpcyBhCisjICAgICAgIHBsYWNlaG9sZGVyIHRoYXQgd2lsbCBiZSBkZWxldGVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQorIyAgICAgICBsaWJyYXJ5IGZpbGUgcGF0aC4KKyVfX3ByZWxpbmtfdW5kb19jbWQgICAgIC91c3Ivc2Jpbi9wcmVsaW5rIHByZWxpbmsgLXkgbGlicmFyeQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJmMjNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYKQEAgLTAsMCArMSwxOCBAQAorIyBUaGlzIGNvbmZpZyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBib3RoIHdpdGggYmluYXJpZXMKKyMgYW5kIGxpYnJhcmllcyBwcmVsaW5rIHNob3VsZCBjb25zaWRlciBieSBkZWZhdWx0LgorIyBJZiBhIGRpcmVjdG9yeSBuYW1lIGlzIHByZWZpeGVkIHdpdGggYC1sICcsIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIHdpbGwgYmUgd2Fsa2VkIGFzIGxvbmcgYXMgZmlsZXN5c3RlbSBib3VuZGFyaWVzIGFyZSBub3QgY3Jvc3NlZC4KKyMgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBwcmVmaXhlZCB3aXRoIGAtaCAnLCBzeW1ib2xpYyBsaW5rcyBpbiBhCisjIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXJlIGZvbGxvd2VkLgorLWwgL3Vzci9sb2NhbC9zYmluCistbCAvc2JpbgorLWwgL3Vzci9zYmluCistbCAvdXNyL2xvY2FsL2JpbgorLWwgL2JpbgorLWwgL3Vzci9iaW4KKy1sIC91c3IvWDExUjYvYmluCistbCAvdXNyL2dhbWVzCistbCAvdXNyL2xvY2FsL2xpYnssMzIsNjQseDMyfQorLWwgL2xpYnssMzIsNjQseDMyfQorLWwgL3Vzci9saWJ7LDMyLDY0LHgzMn0KKy1sIC91c3IvWDExUjYvbGlieywzMiw2NCx4MzJ9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jcm9uLmRhaWx5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2MwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseQpAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2RlZmF1bHQvcHJlbGluaworCityZW5pY2UgKzE5IC1wICQkID4vZGV2L251bGwgMj4mMQorCitpZiBbICIkUFJFTElOS0lORyIgIT0geWVzIF07IHRoZW4KKyAgaWYgWyAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgXTsgdGhlbgorICAgIGVjaG8gL3Vzci9zYmluL3ByZWxpbmsgLXVhdiA+IC92YXIvbG9nL3ByZWxpbmsubG9nCisgICAgL3Vzci9zYmluL3ByZWxpbmsgLXVhdiA+PiAvdmFyL2xvZy9wcmVsaW5rLmxvZyAyPiYxCisgICAgcm0gLWYgL2V0Yy9wcmVsaW5rLmNhY2hlCisgICAgIyBSZXN0YXJ0IGluaXQgaWYgbmVlZGVkCisgICAgWyAtbiAiJChmaW5kIGBsZGQgL3NiaW4vaW5pdCB8IGF3ayAneyBwcmludCAkMyB9J2AgL3NiaW4vaW5pdCAtY3RpbWUgLTEgMj4vZGV2L251bGwgKSIgXSAmJiAvc2Jpbi90ZWxpbml0IHUKKyAgZmkKKyAgZXhpdCAwCitmaQorCitpZiBbICEgLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIC1vIC1mIC92YXIvbGliL21pc2MvcHJlbGluay5mb3JjZSBdIFwKKyAgIHx8IGdyZXAgLXEgJ15wcmVsaW5rLUVMRjAuWzAtMl0nIC9ldGMvcHJlbGluay5jYWNoZTsgdGhlbgorICAjIElmIGNhY2hlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGZyb20gb2xkZXIgcHJlbGluayB2ZXJzaW9ucyBvcgorICAjIGlmIHdlIHdlcmUgYXNrZWQgdG8gZXhwbGljaXRlbHksIGZvcmNlIGZ1bGwgcHJlbGlua2luZworICBybSAtZiAvZXRjL3ByZWxpbmsuY2FjaGUgL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZvcmNlCisgIFBSRUxJTktfT1BUUz0iJFBSRUxJTktfT1BUUyAtZiIKKyAgZGF0ZSA+IC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsCitlbGlmIFsgLW4gIiRQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCIgXAorICAgICAgIC1hICJgZmluZCAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbCAtbXRpbWUgLSR7UFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUx9IDI+L2Rldi9udWxsYCIgXAorCSAgPSAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbCBdOyB0aGVuCisgICMgSWYgcHJlbGluayB3aXRob3V0IC1xIGhhcyBiZWVuIHJ1biBpbiB0aGUgbGFzdAorICAjIFBSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMIGRheXMsIGp1c3QgdXNlIHF1aWNrIG1vZGUKKyAgUFJFTElOS19PUFRTPSIkUFJFTElOS19PUFRTIC1xIgorZWxzZQorICBkYXRlID4gL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwKK2ZpCisKK2VjaG8gL3Vzci9zYmluL3ByZWxpbmsgLWF2ICRQUkVMSU5LX09QVFMgPiAvdmFyL2xvZy9wcmVsaW5rLmxvZworL3Vzci9zYmluL3ByZWxpbmsgLWF2ICRQUkVMSU5LX09QVFMgPj4gL3Zhci9sb2cvcHJlbGluay5sb2cgMj4mMQorIyBSZXN0YXJ0IGluaXQgaWYgbmVlZGVkCitbIC1uICIkKGZpbmQgYGxkZCAvc2Jpbi9pbml0IHwgYXdrICd7IHByaW50ICQzIH0nYCAvc2Jpbi9pbml0IC1jdGltZSAtMSAyPi9kZXYvbnVsbCApIiBdICYmIC9zYmluL3RlbGluaXQgdQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4MDJmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0CkBAIC0wLDAgKzEsMjIgQEAKKyMgU2V0IHRoaXMgdG8gbm8gdG8gZGlzYWJsZSBwcmVsaW5raW5nIGFsdG9nZXRoZXIKKyMgb3IgdG8geWVzIHRvIGVuYWJsZSBpdC4KKyMgKGlmIHlvdSBjaGFuZ2UgdGhpcyBmcm9tIHllcyB0byBubyBwcmVsaW5rIC11YQorIyB3aWxsIGJlIHJ1biBuZXh0IG5pZ2h0IHRvIHVuZG8gcHJlbGlua2luZykKK1BSRUxJTktJTkc9eWVzCisKKyMgT3B0aW9ucyB0byBwYXNzIHRvIHByZWxpbmsKKyMgLW0JVHJ5IHRvIGNvbnNlcnZlIHZpcnR1YWwgbWVtb3J5IGJ5IGFsbG93aW5nIG92ZXJsYXBwaW5nCisjCWFzc2lnbmVkIHZpcnR1YWwgbWVtb3J5IHNsb3RzIGZvciBsaWJyYXJpZXMgd2hpY2gKKyMJbmV2ZXIgYXBwZWFyIHRvZ2V0aGVyIGluIG9uZSBiaW5hcnkKKyMgLVIJUmFuZG9taXplIHZpcnR1YWwgbWVtb3J5IHNsb3QgYXNzaWdubWVudHMgZm9yIGxpYnJhcmllcy4KKyMJVGhpcyBtYWtlcyBpdCBzbGlnaHRseSBoYXJkZXIgZm9yIHZhcmlvdXMgYnVmZmVyIG92ZXJmbG93CisjCWF0dGFja3MsIHNpbmNlIGxpYnJhcnkgYWRkcmVzc2VzIHdpbGwgYmUgZGlmZmVyZW50IG9uIGVhY2gKKyMJaG9zdCB1c2luZyAtUi4KK1BSRUxJTktfT1BUUz0tbVIKKworIyBIb3cgb2Z0ZW4gc2hvdWxkIGZ1bGwgcHJlbGluayBiZSBydW4gKGluIGRheXMpCisjIE5vcm1hbGx5LCBwcmVsaW5rIHdpbGwgYmUgcnVuIGluIHF1aWNrIG1vZGUsIGV2ZXJ5CisjICRQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCBkYXlzIGl0IHdpbGwgYmUgcnVuCisjIGluIG5vcm1hbCBtb2RlLiAgQ29tbWVudCB0aGlzIGxpbmUgb3V0IGlmIHByZWxpbmsgCisjIHNob3VsZCBiZSBydW4gaW4gbm9ybWFsIG1vZGUgYWx3YXlzLgorUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUw9MTQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGlua19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmNjkxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCkBAIC0wLDAgKzEsODEgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCisjIE5lZWQgYmludXRpbHMgZm9yIGxpYmliZXJ0eS5hCisjIFdvdWxkIG5lZWQgdHJhbnNmaWctbmF0aXZlIGZvciBkb2N1bWVudGF0aW9uIGlmIGl0IHdhc24ndCBkaXNhYmxlZAorREVQRU5EUyA9ICJlbGZ1dGlscyBiaW51dGlscyIKK1NVTU1BUlkgPSAiQW4gRUxGIHByZWxpbmtpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBwcmVsaW5rIHBhY2thZ2UgY29udGFpbnMgYSB1dGlsaXR5IHdoaWNoIG1vZGlmaWVzIEVMRiBzaGFyZWQgbGlicmFyaWVzIFwKK2FuZCBleGVjdXRhYmxlcywgc28gdGhhdCBmYXIgZmV3ZXIgcmVsb2NhdGlvbnMgbmVlZCB0byBiZSByZXNvbHZlZCBhdCBcCitydW50aW1lIGFuZCB0aHVzIHByb2dyYW1zIGNvbWUgdXAgZmFzdGVyLiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTNjMDU1MGJkMzE3M2Y0NTA0YjJjYmQ4OTkxZTUwYiIKK1NSQ1JFViA9ICI0MDMyN2ZiOTk2NTRlOTZkYjZlZjE1ZTJmMmQ1ZWYxNDBhYzNlOTk4IgorUFYgPSAiMS4wK2dpdCR7U1JDUFZ9IgorCisjCisjIFRoZSBjcm9uIHNjcmlwdCBhdHRlbXB0cyB0byByZS1wcmVsaW5rIHRoZSBzeXN0ZW0gZGFpbHkgLS0gb24KKyMgc3lzdGVtcyB3aGVyZSB1c2VycyBhcmUgYWRkaW5nIGFwcGxpY2F0aW9ucywgdGhpcyBtaWdodCBiZSByZWFzb25hYmxlCisjIGJ1dCBmb3IgZW1iZWRkZWQsIHdlIHNob3VsZCBiZSByZS1ydW5uaW5nIHByZWxpbmsgLWEgYWZ0ZXIgYW4gdXBkYXRlLgorIworIyBEZWZhdWx0IGlzIHByZWxpbmtpbmcgaXMgZW5hYmxlZC4KKyMKK1NVTU1BUllfJHtQTn0tY3JvbiA9ICJDcm9uIHNjcmlwdHMgdG8gY29udHJvbCBhdXRvbWF0aWMgcHJlbGlua2luZyIKK0RFU0NSSVBUSU9OXyR7UE59LWNyb24gPSAiQ3JvbiBzY3JpcHRzIHRvIGNvbnRyb2wgYXV0b21hdGljIHByZWxpbmtpbmcuICBcCitTZWU6ICR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseS9wcmVsaW5rIGZvciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIKKworRklMRVNfJHtQTn0tY3JvbiA9ICIke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0IgorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3JvbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wcmVsaW5rLWNyb3NzLmdpdDticmFuY2g9Y3Jvc3NfcHJlbGluayBcCisgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcHJlbGluay5jcm9uLmRhaWx5IFwKKyAgICAgICAgICAgZmlsZTovL3ByZWxpbmsuZGVmYXVsdCBcCisJICAgZmlsZTovL21hY3Jvcy5wcmVsaW5rIgorCitUQVJHRVRfT1NfT1JJRyA6PSAiJHtUQVJHRVRfT1N9IgorT1ZFUlJJREVTX2FwcGVuZCA9ICI6JHtUQVJHRVRfT1NfT1JJR30iCisKK1MgPSAiJHtXT1JLRElSfS9naXQvdHJ1bmsiCisKK2luaGVyaXQgYXV0b3Rvb2xzIAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zZWxpbnV4IC0td2l0aC1wa2d2ZXJzaW9uPSR7UFZ9LSR7UFJ9IFwKKwktLXdpdGgtYnVndXJsPWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICAgICAjIERpc2FibGUgZG9jdW1lbnRhdGlvbiEKKyAgICAgICAgZWNobyAiYWxsOiIgPiAke1N9L2RvYy9NYWtlZmlsZS5hbQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vcnBtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJlbGluay5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ByZWxpbmsuY3Jvbi5kYWlseSAke0R9JHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5L3ByZWxpbmsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcmVsaW5rLmRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9wcmVsaW5rCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbWFjcm9zLnByZWxpbmsgJHtEfSR7c3lzY29uZmRpcn0vcnBtL21hY3Jvcy5wcmVsaW5rCit9CisKKyMgSWYgd2UncmUgdXNpbmcgaW1hZ2UtcHJlbGluaywgd2Ugd2FudCB0byBza2lwIHRoaXMgb24gdGhlIGhvc3Qgc2lkZQorIyBidXQgc3RpbGwgZG8gaXQgaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQuLi4KK3BrZ19wb3N0aW5zdF9wcmVsaW5rKCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1VTRVJfQ0xBU1NFUycsICdpbWFnZS1wcmVsaW5rJywgJ2V4aXQgMCcsICdleGl0IDEnLCBkKX0KK2ZpCisKK3ByZWxpbmsgLWEKK30KKworcGtnX3ByZXJtX3ByZWxpbmsoKSB7CisjIS9iaW4vc2gKKworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICBleGl0IDEKK2ZpCisKK3ByZWxpbmsgLWF1Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stZ3JvdXAgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYmY3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwCkBAIC0wLDAgKzEsMiBAQAorcm9vdDoqOjA6CittYWlsOio6ODoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0NThkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3Jvb3Q6OjA6MDpyb290Oi9ob21lL3Jvb3Q6L2Jpbi9zaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTIyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkby5pbmMKQEAgLTAsMCArMSwxMzUgQEAKKyMgTm90ZTogRHVlIHRvIHRoZSBiaXRiYWtlIHdyYXBwZXIgc2NyaXB0LCBtYWtpbmcgY2hhbmdlcyB0byBwc2V1ZG8gY2FuIGJlCisjIGRpZmZpY3VsdC4gIFRvIHdvcmsgYXJvdW5kIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHdyYXBwZXIgdXNlOgorIyBCQkZFVENIMj1UcnVlIFBTRVVET19CVUlMRD0xIC4uL2JpdGJha2UvYmluL2JpdGJha2UgcHNldWRvLW5hdGl2ZSBbLWMgQ01EXQorCitTVU1NQVJZID0gIlBzZXVkbyBnaXZlcyBmYWtlIHJvb3QgY2FwYWJpbGl0aWVzIHRvIGEgbm9ybWFsIHVzZXIiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9wc2V1ZG8iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiTEdQTDIuMSIKK0RFUEVORFMgPSAic3FsaXRlMyBhdHRyIgorCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vbGliL3BzZXVkby9saWIqL2xpYnBzZXVkby5zbyAke2JpbmRpcn0vKiAke2xvY2Fsc3RhdGVkaXJ9L3BzZXVkbyAke3ByZWZpeH0vdmFyL3BzZXVkbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliKi8uZGVidWciCitJTlNBTkVfU0tJUF8ke1BOfSArPSAibGliZGlyIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnICs9ICJsaWJkaXIiCisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2Zha2Vyb290IgorCitNQUtFT1BUUyA9ICIiCisKK2luaGVyaXQgc2l0ZWluZm8KKworZG9fY29uZmlndXJlICgpIHsKKwk6Cit9CisKK05PMzJMSUJTID8/PSAiMSIKK05PMzJMSUJTX2NsYXNzLW5hdGl2ZXNkayA9ICIxIgorCisjIENvbXBpbGUgZm9yIHRoZSBsb2NhbCBtYWNoaW5lIGFyY2guLi4KK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisJICAke1N9L2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliJHtTSVRFSU5GT19CSVRTfSAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1jZmxhZ3M9IiR7Q0ZMQUdTfSIgLS1iaXRzPSR7U0lURUlORk9fQklUU30gLS1lbmFibGUtc3RhdGljLXNxbGl0ZSAtLXdpdGhvdXQtcnBhdGgKKwllbHNlCisJICAke1N9L2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliIC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWNmbGFncz0iJHtDRkxBR1N9IiAtLWJpdHM9JHtTSVRFSU5GT19CSVRTfSAtLWVuYWJsZS1zdGF0aWMtc3FsaXRlIC0td2l0aG91dC1ycGF0aAorCWZpCisJb2VfcnVubWFrZSAke01BS0VPUFRTfQorfQorZG9fY29tcGlsZVt2YXJkZXBzZXhjbHVkZV0gPSAiU0lURUlORk9fQklUUyIKKworbWF5YmVfbWFrZTMyKCkgeworCSMgV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBidWlsZCAzMi1iaXQgYmluYXJpZXMuCisJbWFrZTMyPWZhbHNlCisJaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKwkJY2FzZSAiJHtOTzMyTElCU30iIGluCisJCTApCW1ha2UzMj10cnVlCisJCQk7OworCQkxKQltYWtlMzI9ZmFsc2UKKwkJCTs7CisJCSopCSMgSWYgdW5zZXQsIGJ1aWxkIDMyLWJpdCBpZiB3ZSB0aGluayB3ZSBjYW4uCisJCQlpZiBbIC1lICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgiIF07IHRoZW4KKwkJCQltYWtlMzI9dHJ1ZQorCQkJZmkKKwkJCTs7CisJCWVzYWMKKwlmaQorCWlmICRtYWtlMzI7IHRoZW4KKwkJaWYgISBbIC1lICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgiIF07IHRoZW4KKwkJCXdhcm5fMzJiaXRfbWlzc2luZworCQllbHNlCisJCQliYm5vdGUgIkF0dGVtcHRpbmcgdG8gYnVpbGQgMzItYml0IGxpYnBzZXVkby5zbyBmb3IgJHtQTn0uIgorCQlmaQorCWVsc2UKKwkJYmJub3RlICJCdWlsZGluZy9pbnN0YWxsaW5nIG9ubHkgNjQtYml0IGxpYnBzZXVkby5zbyBmb3IgJHtQTn0uIgorCQliYm5vdGUgIklmIHlvdSBuZWVkIHRvIHJ1biAzMi1iaXQgZXhlY3V0YWJsZXMsIGVuc3VyZSB0aGF0IE5PMzJMSUJTIGlzIHNldCB0byAwLiIKKwlmaQorfQorbWF5YmVfbWFrZTMyW3ZhcmRlcHNleGNsdWRlXSA9ICJTSVRFSU5GT19CSVRTIgorCit3YXJuXzMyYml0X21pc3NpbmcoKSB7CisJYmJ3YXJuICJDYW4ndCBmaW5kIHN0dWJzLTMyLmgsIGJ1dCB1c3VhbGx5IG5lZWQgaXQgdG8gYnVpbGQgMzItYml0IGxpYnBzZXVkby4iCisJYmJ3YXJuICJJZiB0aGUgYnVpbGQgZmFpbHMsIGluc3RhbGwgMzItYml0IGRldmVsb3BlciBwYWNrYWdlcy4iCisJYmJ3YXJuICJJZiB5b3UgYXJlIHVzaW5nIDMyLWJpdCBiaW5hcmllcywgdGhlIDMyLWJpdCBsaWJwc2V1ZG8gaXMgTk9UIG9wdGlvbmFsLiIKK30KKworIyBUd28gYmVsb3cgYXJlIHRoZSBzYW1lCisjIElmIG5lY2Vzc2FyeSBjb21waWxlIGZvciB0aGUgYWx0ZXJuYXRpdmUgbWFjaGluZSBhcmNoLiAgVGhpcyBpcyBvbmx5IAorIyBuZWNlc3NhcnkgaW4gYSBuYXRpdmUgYnVpbGQuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCSMgV2UgbmVlZCB0aGUgMzItYml0IGxpYnBzZXVkbyBvbiBhIDY0LWJpdCBtYWNoaW5lLi4uCisJCSMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHdlbGwtdGVzdGVkIG91dHNpZGUgb2YgeDg2L3g4Nl82NC4KKworCQkjIGlmIHdlJ3JlIGJlaW5nIHJlYnVpbHQgZHVlIHRvIGEgZGVwZW5kZW5jeSBjaGFuZ2UsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCisJCSMgZXZlcnl0aGluZyBpcyBjbGVhbiBiZWZvcmUgd2UgY29uZmlndXJlIGFuZCBidWlsZCAtLSBpZiB3ZSBoYXZlbid0IHByZXZpb3VzbHkKKwkJIyBidWlsdCB0aGlzIHdpbGwgZmFpbCBhbmQgYmUgaWdub3JlZC4KKwkJbWFrZSAke01BS0VPUFRTfSBkaXN0Y2xlYW4gfHwgOgorCisJCS4vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIgLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tYml0cz0zMiAtLXdpdGhvdXQtcnBhdGgKKwkJc2F2ZV90cmFwcz0kKHRyYXApCisJCXRyYXAgJ3dhcm5fMzJiaXRfbWlzc2luZycgMAorCQlvZV9ydW5tYWtlICR7TUFLRU9QVFN9IGxpYnBzZXVkbworCQlldmFsICIkc2F2ZV90cmFwcyIKKwkJIyBwcmV2ZW50IGl0IGZyb20gcmVtb3ZpbmcgdGhlIGxpYiwgYnV0IHJlbW92ZSBldmVyeXRoaW5nIGVsc2UKKwkJbWFrZSAnTElCPWZvbycgJHtNQUtFT1BUU30gZGlzdGNsZWFuIAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJIyBXZSBuZWVkIHRoZSAzMi1iaXQgbGlicHNldWRvIG9uIGEgNjQtYml0IG1hY2hpbmUuCisJCSMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHdlbGwtdGVzdGVkIG91dHNpZGUgb2YgeDg2L3g4Nl82NC4KKwkJLi9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1iaXRzPTMyIC0td2l0aG91dC1ycGF0aAorCQlvZV9ydW5tYWtlICR7TUFLRU9QVFN9IGxpYnBzZXVkbworCQkjIHByZXZlbnQgaXQgZnJvbSByZW1vdmluZyB0aGUgbGliLCBidXQgcmVtb3ZlIGV2ZXJ5dGhpbmcgZWxzZQorCQltYWtlICdMSUI9Zm9vJyAke01BS0VPUFRTfSBkaXN0Y2xlYW4gCisJZmkKK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAke01BS0VPUFRTfSAnTElCPWxpYi9wc2V1ZG8vbGliJChNQVJLNjQpJyBpbnN0YWxsCit9CisKKyMgVHdvIGJlbG93IGFyZSB0aGUgc2FtZQorIyBJZiBuZWNlc3NhcnkgaW5zdGFsbCBmb3IgdGhlIGFsdGVybmF0aXZlIG1hY2hpbmUgYXJjaC4gIFRoaXMgaXMgb25seSAKKyMgbmVjZXNzYXJ5IGluIGEgbmF0aXZlIGJ1aWxkLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCW1rZGlyIC1wICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIKKwkJY3AgbGliL3BzZXVkby9saWIvbGlicHNldWRvLnNvICR7RH0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIvLgorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQlta2RpciAtcCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliCisJCWNwIGxpYi9wc2V1ZG8vbGliL2xpYnBzZXVkby5zbyAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliLy4KKwlmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzIwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHBzZXVkby5pbmMKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9wc2V1ZG8vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1wYXNzd2QgXAorICAgIGZpbGU6Ly9mYWxsYmFjay1ncm91cCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0Y2QzOTUwMmY5YmQwZTczNGRlZTgwZTA4YjI4YTVmMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZjJjYWNhNWYxNTc5YTM3NmE1MDljZDgxYTgxMTU2ZmMyMDg2NTBhZGQ5ZjBhZjI3NWRhOWU5MTFmMThmMjkxIgorCitQU0VVRE9fRVhUUkFfT1BUUyA/PSAiLS1lbmFibGUtZm9yY2UtYXN5bmMgLS13aXRob3V0LXBhc3N3ZC1mYWxsYmFjayIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJIyBUaGUgZmFsbGJhY2sgZmlsZXMgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1wYXNzd2QgJHtEfSR7c3lzY29uZmRpcn0vcGFzc3dkCisJaW5zdGFsbCAtbSA0NDQgJHtXT1JLRElSfS9mYWxsYmFjay1ncm91cCAke0R9JHtzeXNjb25mZGlyfS9ncm91cAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjcuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTllZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmJkMGE0NGVhZGQ0NzEzZTkwYWQ4YzE1MmVlYTc3YWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTlmYzM5MjJmOGZlYjk3ODM5YjUwZDE0ZWIxOTg3YWZkYzhmMjJjZGNhYzkzMTE5MzIzY2NjZDVmODQ0NDY1MiIKKworUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWUxMjIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNSRVYgPSAiZTc5NWRmNDRhOTBhNDI2YTc2Yjc5MGYxYjI3NzRmMzA0NmE4ZmMzMSIKK1BWID0gIjEuNy4yK2dpdCR7U1JDUFZ9IgorCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHNldWRvIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0yLjctbWFuaWZlc3QuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhkODI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYwpAQCAtMCwwICsxLDI4OCBAQAorCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTIuNy5weScgVmVyc2lvbiAyMDExMDIyMi4yIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIFZpc2l0IHRoZSBQeXRob24gZm9yIEVtYmVkZGVkIFN5c3RlbXMgU2l0ZSA9PiBodHRwOi8vd3d3LlZhbmlsbGUuZGUvcHJvamVjdHMvcHl0aG9uLnNweQorCisgCisKK1BST1ZJREVTKz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICIKKworUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgJHtQTn0tbW9kdWxlcyIKKworU1VNTUFSWV8ke1BOfS0ydG8zPSJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIgorUkRFUEVORFNfJHtQTn0tMnRvMz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LTJ0bzM9IiR7YmluZGlyfS8ydG8zICR7bGliZGlyfS9weXRob24yLjcvbGliMnRvMyAiCisKK1NVTU1BUllfJHtQTn0tYXJncGFyc2U9IlB5dGhvbiBjb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tYXJncGFyc2U9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LWFyZ3BhcnNlPSIke2xpYmRpcn0vcHl0aG9uMi43L2FyZ3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LWF1ZGlvPSJQeXRob24gQXVkaW8gSGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1hdWRpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWF1ZGlvPSIke2xpYmRpcn0vcHl0aG9uMi43L3dhdmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NodW5rLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbmRoZHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL29zc2F1ZGlvZGV2LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYXVkaW9vcC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2F1ZGlvZGV2LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdW5hdWRpby4qICR7bGliZGlyfS9weXRob24yLjcvc3VuYXUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RvYWlmZi4qICIKKworU1VNTUFSWV8ke1BOfS1ic2RkYj0iUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQmVya2VsZXkgRGF0YWJhc2UiCitSREVQRU5EU18ke1BOfS1ic2RkYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWJzZGRiPSIke2xpYmRpcn0vcHl0aG9uMi43L2JzZGRiICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2JzZGRiLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb2RlY3M9IlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvZGVjcz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tY29kZWNzPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvZGVjcy4qICR7bGliZGlyfS9weXRob24yLjcvZW5jb2RpbmdzICR7bGliZGlyfS9weXRob24yLjcvZ2V0dGV4dC4qICR7bGliZGlyfS9weXRob24yLjcvbG9jYWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbG9jYWxlLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2NvZGVjcyogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC91bmljb2RlZGF0YS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3N0cmluZ3ByZXAuKiAke2xpYmRpcn0vcHl0aG9uMi43L3hkcmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlPSJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlPSIke2xpYmRpcn0vcHl0aG9uMi43L3B5X2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbXBpbGVhbGwuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZXI9IlB5dGhvbiBjb21waWxlciBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcGlsZXI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21waWxlciAiCisKK1NVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS16bGliIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24yLjcvZ3ppcC4qICR7bGliZGlyfS9weXRob24yLjcvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYnoyLnNvICIKKworU1VNTUFSWV8ke1BOfS1jb250ZXh0bGliPSJQeXRob24gdXRpbGl0aWVzIGZvciB3aXRoLXN0YXRlbWVudGNvbnRleHRzLiIKK1JERVBFTkRTXyR7UE59LWNvbnRleHRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb250ZXh0bGliPSIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb250ZXh0bGliLiogIgorCitTVU1NQVJZXyR7UE59LWNvcmU9IlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tY29yZT0iJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWNvcmU9IiR7bGliZGlyfS9weXRob24yLjcvX19mdXR1cmVfXy4qICR7bGliZGlyfS9weXRob24yLjcvX2FiY29sbC4qICR7bGliZGlyfS9weXRob24yLjcvYWJjLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb3B5LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb3B5X3JlZy4qICR7bGliZGlyfS9weXRob24yLjcvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24yLjcvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L25ldy4qICR7bGliZGlyfS9weXRob24yLjcvb3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24yLjcvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS4qICR7bGliZGlyfS9weXRob24yLjcvc3RhdC4qICR7bGliZGlyfS9weXRob24yLjcvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9iaW5hc2NpaS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zdHJ1Y3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC90aW1lLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQveHJlYWRsaW5lcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3R5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICR7bGliZGlyfS9weXRob24yLjcvX3dlYWtyZWZzZXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N5c2NvbmZpZy4qICR7bGliZGlyfS9weXRob24yLjcvX3N5c2NvbmZpZ2RhdGEuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbmZpZy9NYWtlZmlsZSAke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcqLmggJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vc2l0ZWN1c3RvbWl6ZS5weSAiCisKK1NVTU1BUllfJHtQTn0tY3J5cHQ9IlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jcnlwdD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWNyeXB0PSIke2xpYmRpcn0vcHl0aG9uMi43L2hhc2hsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21kNS4qICR7bGliZGlyfS9weXRob24yLjcvc2hhLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jcnlwdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19oYXNobGliLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NoYTI1Ni5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zaGE1MTIuc28gIgorCitTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN0eXBlcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jdHlwZXMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3R5cGVzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0LnNvICIKKworU1VNTUFSWV8ke1BOfS1jdXJzZXM9IlB5dGhvbiBjdXJzZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN1cnNlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN1cnNlcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jdXJzZXMgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY3Vyc2VzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGF0ZXRpbWU9IlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGF0ZXRpbWU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tZGF0ZXRpbWU9IiR7bGliZGlyfS9weXRob24yLjcvX3N0cnB0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jYWxlbmRhci4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZGF0ZXRpbWUuc28gIgorCitTVU1NQVJZXyR7UE59LWRiPSJQeXRob24gZmlsZS1iYXNlZCBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9hbnlkYm0uKiAke2xpYmRpcn0vcHl0aG9uMi43L2R1bWJkYm0uKiAke2xpYmRpcn0vcHl0aG9uMi43L3doaWNoZGIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGVidWdnZXI9IlB5dGhvbiBkZWJ1Z2dlciIKK1JERVBFTkRTXyR7UE59LWRlYnVnZ2VyPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LXNoZWxsICR7UE59LXBwcmludCIKK0ZJTEVTXyR7UE59LWRlYnVnZ2VyPSIke2xpYmRpcn0vcHl0aG9uMi43L2JkYi4qICR7bGliZGlyfS9weXRob24yLjcvcGRiLiogIgorCitTVU1NQVJZXyR7UE59LWRldj0iUHl0aG9uIGRldmVsb3BtZW50IHBhY2thZ2UiCitSREVQRU5EU18ke1BOfS1kZXY9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kZXY9IiR7aW5jbHVkZWRpcn0gJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyoubGEgJHtsaWJkaXJ9LyouYSAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtiYXNlX2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyoubyAke2RhdGFkaXJ9L2FjbG9jYWwgJHtkYXRhZGlyfS9wa2djb25maWcgIgorCitTVU1NQVJZXyR7UE59LWRpZmZsaWI9IlB5dGhvbiBoZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzIGJldHdlZW4gb2JqZWN0cyIKK1JERVBFTkRTXyR7UE59LWRpZmZsaWI9IiR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1kaWZmbGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2RpZmZsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzPSJQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb25maWcgJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXN0dXRpbHMgIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IlB5dGhvbiBkaXN0cmlidXRpb24gdXRpbGl0aWVzIChzdGF0aWMgbGlicmFyaWVzKSIKK1JERVBFTkRTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7UE59LWRpc3R1dGlscyIKK0ZJTEVTXyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXY9IiR7bGliZGlyfS9weXRob24yLjcvY29uZmlnL2xpYiouYSAiCisKK1NVTU1BUllfJHtQTn0tZG9jdGVzdD0iUHl0aG9uIGZyYW1ld29yayBmb3IgcnVubmluZyBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIgorUkRFUEVORFNfJHtQTn0tZG9jdGVzdD0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LXJlICR7UE59LXVuaXR0ZXN0ICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIiCitGSUxFU18ke1BOfS1kb2N0ZXN0PSIke2xpYmRpcn0vcHl0aG9uMi43L2RvY3Rlc3QuKiAiCisKK1NVTU1BUllfJHtQTn0tZWxlbWVudHRyZWU9IlB5dGhvbiBlbGVtZW50cmVlIgorUkRFUEVORFNfJHtQTn0tZWxlbWVudHRyZWU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1lbGVtZW50dHJlZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fZWxlbWVudHRyZWUuc28gIgorCitTVU1NQVJZXyR7UE59LWVtYWlsPSJQeXRob24gZW1haWwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24yLjcvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZW1haWwgIgorCitTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2ZjbnRsLnNvICIKKworU1VNTUFSWV8ke1BOfS1nZGJtPSJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1nZGJtPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZ2RibT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9nZGJtLnNvICIKKworU1VNTUFSWV8ke1BOfS1ob3RzaG90PSJQeXRob24gaG90c2hvdCBwZXJmb3JtYW5jZSBwcm9maWxlciIKK1JERVBFTkRTXyR7UE59LWhvdHNob3Q9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1ob3RzaG90PSIke2xpYmRpcn0vcHl0aG9uMi43L2hvdHNob3QgJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faG90c2hvdC5zbyAiCisKK1NVTU1BUllfJHtQTn0taHRtbD0iUHl0aG9uIEhUTUwgcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0taHRtbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWh0bWw9IiR7bGliZGlyfS9weXRob24yLjcvZm9ybWF0dGVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9odG1sZW50aXR5ZGVmcy4qICR7bGliZGlyfS9weXRob24yLjcvaHRtbGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvbWFya3VwYmFzZS4qICR7bGliZGlyfS9weXRob24yLjcvc2dtbGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvSFRNTFBhcnNlci4qICIKKworU1VNTUFSWV8ke1BOfS1pZGxlPSJQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCIKK1JERVBFTkRTXyR7UE59LWlkbGU9IiR7UE59LWNvcmUgJHtQTn0tdGtpbnRlciIKK0ZJTEVTXyR7UE59LWlkbGU9IiR7YmluZGlyfS9pZGxlICR7bGliZGlyfS9weXRob24yLjcvaWRsZWxpYiAiCisKK1NVTU1BUllfJHtQTn0taW1hZ2U9IlB5dGhvbiBncmFwaGljYWwgaW1hZ2UgaGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1pbWFnZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltYWdlPSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbG9yc3lzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbWdoZHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2ltYWdlb3Auc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZ2JpbWcuc28gIgorCitTVU1NQVJZXyR7UE59LWltcG9ydGxpYj0iUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IgorUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1wb3J0bGliPSIke2xpYmRpcn0vcHl0aG9uMi43L2ltcG9ydGxpYiAiCisKK1NVTU1BUllfJHtQTn0taW89IlB5dGhvbiBsb3ctbGV2ZWwgSS9PIgorUkRFUEVORFNfJHtQTn0taW89IiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS10ZXh0dXRpbHMgJHtQTn0tbmV0Y2xpZW50ICR7UE59LWNvbnRleHRsaWIiCitGSUxFU18ke1BOfS1pbz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc29ja2V0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2lvLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NzbC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3NlbGVjdC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3Rlcm1pb3Muc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jU3RyaW5nSU8uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9waXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvc29ja2V0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zc2wuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RlbXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9TdHJpbmdJTy4qICR7bGliZGlyfS9weXRob24yLjcvaW8uKiAke2xpYmRpcn0vcHl0aG9uMi43L19weWlvLiogIgorCitTVU1NQVJZXyR7UE59LWpzb249IlB5dGhvbiBKU09OIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1qc29uPSIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9qc29uICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2pzb24uc28gIgorCitTVU1NQVJZXyR7UE59LWxhbmc9IlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxhbmc9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19iaXNlY3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fY29sbGVjdGlvbnMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faGVhcHEuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fd2Vha3JlZi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19mdW5jdG9vbHMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9hcnJheS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2l0ZXJ0b29scy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL29wZXJhdG9yLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcGFyc2VyLnNvICR7bGliZGlyfS9weXRob24yLjcvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24yLjcvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Rpcy4qICR7bGliZGlyfS9weXRob24yLjcvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9oZWFwcS4qICR7bGliZGlyfS9weXRob24yLjcvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24yLjcva2V5d29yZC4qICR7bGliZGlyfS9weXRob24yLjcvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24yLjcvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93ZWFrcmVmLiogIgorCitTVU1NQVJZXyR7UE59LWxvZ2dpbmc9IlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sb2dnaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LWxvZ2dpbmc9IiR7bGliZGlyfS9weXRob24yLjcvbG9nZ2luZyAiCisKK1NVTU1BUllfJHtQTn0tbWFpbGJveD0iUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYWlsYm94PSIke1BOfS1jb3JlICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1tYWlsYm94PSIke2xpYmRpcn0vcHl0aG9uMi43L21haWxib3guKiAiCisKK1NVTU1BUllfJHtQTn0tbWF0aD0iUHl0aG9uIG1hdGggc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1hdGg9IiR7UE59LWNvcmUgJHtQTn0tY3J5cHQiCitGSUxFU18ke1BOfS1tYXRoPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NtYXRoLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvbWF0aC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19yYW5kb20uc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9yYW5kb20uKiAke2xpYmRpcn0vcHl0aG9uMi43L3NldHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbWltZT0iUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIKK1JERVBFTkRTXyR7UE59LW1pbWU9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1taW1lPSIke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0b29scy4qICR7bGliZGlyfS9weXRob24yLjcvdXUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3F1b3ByaS4qICR7bGliZGlyfS9weXRob24yLjcvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9NaW1lV3JpdGVyLiogIgorCitTVU1NQVJZXyR7UE59LW1tYXA9IlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1tYXA9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1tbWFwPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL21tYXAuc28gIgorCitTVU1NQVJZXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iUHl0aG9uIG11bHRpcHJvY2Vzc2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIKK0ZJTEVTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fbXVsdGlwcm9jZXNzaW5nLnNvICR7bGliZGlyfS9weXRob24yLjcvbXVsdGlwcm9jZXNzaW5nICIKKworU1VNTUFSWV8ke1BOfS1uZXRjbGllbnQ9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIgorUkRFUEVORFNfJHtQTn0tbmV0Y2xpZW50PSIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbmV0Y2xpZW50PSIke2xpYmRpcn0vcHl0aG9uMi43LypDb29raWUqLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9iYXNlNjQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Nvb2tpZWxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9nb3BoZXJsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2htYWMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2h0dHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0eXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvbm50cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvcG9wbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zbXRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZWxuZXRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvdXJsbGliMi4qICR7bGliZGlyfS9weXRob24yLjcvdXJscGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3V1aWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24yLjcvbWltZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LW5ldHNlcnZlcj0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiCitSREVQRU5EU18ke1BOfS1uZXRzZXJ2ZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LW5ldHNlcnZlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jZ2kuKiAke2xpYmRpcn0vcHl0aG9uMi43LypIVFRQU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Tb2NrZXRTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbnVtYmVycz0iUHl0aG9uIG51bWJlciBBUElzIgorUkRFUEVORFNfJHtQTn0tbnVtYmVycz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tbnVtYmVycz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kZWNpbWFsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9mcmFjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L251bWJlcnMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGlja2xlPSJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGlja2xlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXBpY2tsZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9waWNrbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NoZWx2ZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY1BpY2tsZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3BpY2tsZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LXBrZ3V0aWw9IlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wa2d1dGlsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcGtndXRpbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wa2d1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXBwcmludD0iUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHByaW50PSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tcHByaW50PSIke2xpYmRpcn0vcHl0aG9uMi43L3BwcmludC4qICIKKworU1VNTUFSWV8ke1BOfS1wcm9maWxlPSJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcm9maWxlPSIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LXByb2ZpbGU9IiR7bGliZGlyfS9weXRob24yLjcvcHJvZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvcHN0YXRzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jUHJvZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2xzcHJvZi5zbyAiCisKK1NVTU1BUllfJHtQTn0tcHlkb2M9IlB5dGhvbiBpbnRlcmFjdGl2ZSBoZWxwIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1weWRvYz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXN0cmluZ29sZCAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXB5ZG9jPSIke2JpbmRpcn0vcHlkb2MgJHtsaWJkaXJ9L3B5dGhvbjIuNy9weWRvYy4qICR7bGliZGlyfS9weXRob24yLjcvcHlkb2NfZGF0YSAiCisKK1NVTU1BUllfJHtQTn0tcmU9IlB5dGhvbiBSZWd1bGFyIEV4cHJlc3Npb24gQVBJcyIKK1JERVBFTkRTXyR7UE59LXJlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmU9IiR7bGliZGlyfS9weXRob24yLjcvcmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZS4qICR7bGliZGlyfS9weXRob24yLjcvc3JlX2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9jb25zdGFudHMqICR7bGliZGlyfS9weXRob24yLjcvc3JlX3BhcnNlLiogIgorCitTVU1NQVJZXyR7UE59LXJlYWRsaW5lPSJQeXRob24gcmVhZGxpbmUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXJlYWRsaW5lPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVhZGxpbmU9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmVhZGxpbmUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9ybGNvbXBsZXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1yZXNvdXJjZT0iUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tcmVzb3VyY2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXNvdXJjZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9yZXNvdXJjZS5zbyAiCisKK1NVTU1BUllfJHtQTn0tcm9ib3RwYXJzZXI9IlB5dGhvbiByb2JvdHMudHh0IHBhcnNlciIKK1JERVBFTkRTXyR7UE59LXJvYm90cGFyc2VyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LXJvYm90cGFyc2VyPSIke2xpYmRpcn0vcHl0aG9uMi43L3JvYm90cGFyc2VyLiogIgorCitTVU1NQVJZXyR7UE59LXNoZWxsPSJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24yLjcvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24yLjcvZ2xvYi4qICR7bGliZGlyfS9weXRob24yLjcvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaGxleC4qICR7bGliZGlyfS9weXRob24yLjcvc2h1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKK1JERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24yLjcvc210cGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTM9IiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmcgJHtQTn0temxpYiIKK0ZJTEVTXyR7UE59LXNxbGl0ZTM9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NxbGl0ZTMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL2RiYXBpMi4qICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9fX2luaXRfXy4qICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9kdW1wLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTMtdGVzdHM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiCitGSUxFU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tc3RyaW5nb2xkPSJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIgorUkRFUEVORFNfJHtQTn0tc3RyaW5nb2xkPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc3RyaW5nb2xkPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3N0cm9wLnNvICR7bGliZGlyfS9weXRob24yLjcvc3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJpbmdvbGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3VicHJvY2Vzcz0iUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIgorRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdWJwcm9jZXNzLiogIgorCitTVU1NQVJZXyR7UE59LXN5c2xvZz0iUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1zeXNsb2c9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1zeXNsb2c9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvc3lzbG9nLnNvICIKKworU1VNTUFSWV8ke1BOfS10ZXJtaW5hbD0iUHl0aG9uIHRlcm1pbmFsIGNvbnRyb2xsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXJtaW5hbD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXRlcm1pbmFsPSIke2xpYmRpcn0vcHl0aG9uMi43L3B0eS4qICR7bGliZGlyfS9weXRob24yLjcvdHR5LiogIgorCitTVU1NQVJZXyR7UE59LXRlc3RzPSJQeXRob24gdGVzdHMiCitSREVQRU5EU18ke1BOfS10ZXN0cz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMi43L3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXRleHR1dGlscz0iUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRleHR1dGlscz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS10ZXh0dXRpbHM9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2Nzdi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2Nzdi4qICR7bGliZGlyfS9weXRob24yLjcvb3B0cGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RleHR3cmFwLiogIgorCitTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24yLjcvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24yLjcvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMi43L1F1ZXVlLiogIgorCitTVU1NQVJZXyR7UE59LXRraW50ZXI9IlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiCitSREVQRU5EU18ke1BOfS10a2ludGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGtpbnRlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fdGtpbnRlci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi10ayAiCisKK1NVTU1BUllfJHtQTn0tdW5pdHRlc3Q9IlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIgorUkRFUEVORFNfJHtQTn0tdW5pdHRlc3Q9IiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS11bml0dGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy91bml0dGVzdC8gIgorCitTVU1NQVJZXyR7UE59LXVuaXhhZG1pbj0iUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXVuaXhhZG1pbj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXVuaXhhZG1pbj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9uaXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9ncnAuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9wd2Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9nZXRwYXNzLiogIgorCitTVU1NQVJZXyR7UE59LXhtbD0iUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1sPSIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIgorRklMRVNfJHtQTn0teG1sPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3B5ZXhwYXQuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWwgJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWxsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0teG1scnBjPSJQeXRob24gWE1MLVJQQyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1scnBjPSIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXhtbHJwYz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24yLjcvRG9jWE1MUlBDU2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LXpsaWI9IlB5dGhvbiB6bGliIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS16bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0temxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC96bGliLnNvICIKKworU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGVzPSIke1BOfS0ydG8zICR7UE59LWFyZ3BhcnNlICR7UE59LWF1ZGlvICR7UE59LWJzZGRiICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXBpbGVyICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvbnRleHRsaWIgJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1ob3RzaG90ICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlc291cmNlICR7UE59LXJvYm90cGFyc2VyICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LXpsaWIgICIKK0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi0zLjQtbWFuaWZlc3QuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2UxNDkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYwpAQCAtMCwwICsxLDI2OCBAQAorCisjIFdBUk5JTkc6IFRoaXMgZmlsZSBpcyBBVVRPIEdFTkVSQVRFRDogTWFudWFsIGVkaXRzIHdpbGwgYmUgbG9zdCBuZXh0IHRpbWUgSSByZWdlbmVyYXRlIHRoZSBmaWxlLgorIyBHZW5lcmF0b3I6ICcuLi8uLi8uLi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weScgVmVyc2lvbiAyMDE0MDEzMSAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKworIAorCitQUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgIgorCitQQUNLQUdFUz0iJHtQTn0tZGJnICR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0tbW9kdWxlcyIKKworU1VNTUFSWV8ke1BOfS0ydG8zPSJQeXRob24gYXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdG9yIgorUkRFUEVORFNfJHtQTn0tMnRvMz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LTJ0bzM9IiR7bGliZGlyfS9weXRob24zLjQvbGliMnRvMyAiCisKK1NVTU1BUllfJHtQTn0tYXN5bmNpbz0iUHl0aG9uIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzIgorUkRFUEVORFNfJHtQTn0tYXN5bmNpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWFzeW5jaW89IiR7bGliZGlyfS9weXRob24zLjQvYXN5bmNpbyAiCisKK1NVTU1BUllfJHtQTn0tYXVkaW89IlB5dGhvbiBBdWRpbyBIYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWF1ZGlvPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tYXVkaW89IiR7bGliZGlyfS9weXRob24zLjQvd2F2ZS4qICR7bGliZGlyfS9weXRob24zLjQvY2h1bmsuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NuZGhkci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvb3NzYXVkaW9kZXYuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2F1ZGlvb3AuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2F1ZGlvZGV2LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdW5hdWRpby4qICR7bGliZGlyfS9weXRob24zLjQvc3VuYXUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RvYWlmZi4qICIKKworU1VNTUFSWV8ke1BOfS1jb2RlY3M9IlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvZGVjcz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tY29kZWNzPSIke2xpYmRpcn0vcHl0aG9uMy40L2NvZGVjcy4qICR7bGliZGlyfS9weXRob24zLjQvZW5jb2RpbmdzICR7bGliZGlyfS9weXRob24zLjQvZ2V0dGV4dC4qICR7bGliZGlyfS9weXRob24zLjQvbG9jYWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbG9jYWxlLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY29kZWNzKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19tdWx0aWJ5dGVjb2RlYy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZ3ByZXAuKiAke2xpYmRpcn0vcHl0aG9uMy40L3hkcmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb21waWxlPSJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jb21waWxlPSIke2xpYmRpcn0vcHl0aG9uMy40L3B5X2NvbXBpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbXBpbGVhbGwuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcHJlc3Npb249IlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21wcmVzc2lvbj0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1jb21wcmVzc2lvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9nemlwLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC96aXBmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90YXJmaWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9iejIuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29yZT0iUHl0aG9uIGludGVycHJldGVyIGFuZCBjb3JlIG1vZHVsZXMiCitSREVQRU5EU18ke1BOfS1jb3JlPSIke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXJlcHJsaWIgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LW1hdGgiCitGSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMy40L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMy40L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMy40L2FiYy4qICR7bGliZGlyfS9weXRob24zLjQvY29weS4qICR7bGliZGlyfS9weXRob24zLjQvY29weXJlZy4qICR7bGliZGlyfS9weXRob24zLjQvQ29uZmlnUGFyc2VyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZW5lcmljcGF0aC4qICR7bGliZGlyfS9weXRob24zLjQvZ2V0b3B0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saW5lY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L25ldy4qICR7bGliZGlyfS9weXRob24zLjQvb3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3Bvc2l4cGF0aC4qICR7bGliZGlyfS9weXRob24zLjQvc3RydWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93YXJuaW5ncy4qICR7bGliZGlyfS9weXRob24zLjQvc2l0ZS4qICR7bGliZGlyfS9weXRob24zLjQvc3RhdC4qICR7bGliZGlyfS9weXRob24zLjQvVXNlckRpY3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L1VzZXJMaXN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Vc2VyU3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9iaW5hc2NpaS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3N0cnVjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvdGltZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQveHJlYWRsaW5lcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvdHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BsYXRmb3JtLiogJHtiaW5kaXJ9L3B5dGhvbiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fd2Vha3JlZnNldC4qICR7bGliZGlyfS9weXRob24zLjQvc3lzY29uZmlnLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fc3lzY29uZmlnZGF0YS4qICR7bGliZGlyfS9weXRob24zLjQvY29uZmlnL01ha2VmaWxlICR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZyouaCAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb2xsZWN0aW9ucyAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9fY29sbGVjdGlvbnNfYWJjLiogJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3NpdGVidWlsdGlucy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgorCitTVU1NQVJZXyR7UE59LWNyeXB0PSJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3J5cHQ9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jcnlwdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9oYXNobGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tZDUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NoYS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY3J5cHQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19oYXNobGliLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc2hhMjU2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc2hhNTEyLiouc28gIgorCitTVU1NQVJZXyR7UE59LWN0eXBlcz0iUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWN0eXBlcz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWN0eXBlcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jdHlwZXMgJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3R5cGVzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3R5cGVzX3Rlc3QuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3Vyc2VzPSJQeXRob24gY3Vyc2VzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdXJzZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdXJzZXM9IiR7bGliZGlyfS9weXRob24zLjQvY3Vyc2VzICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N1cnNlcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYXRldGltZT0iUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYXRldGltZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiCitGSUxFU18ke1BOfS1kYXRldGltZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9fc3RycHRpbWUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NhbGVuZGFyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9kYXRldGltZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYj0iUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRiPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGI9IiR7bGliZGlyfS9weXRob24zLjQvYW55ZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1iZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93aGljaGRiLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kYm0gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZGJtLiouc28gIgorCitTVU1NQVJZXyR7UE59LWRlYnVnZ2VyPSJQeXRob24gZGVidWdnZXIiCitSREVQRU5EU18ke1BOfS1kZWJ1Z2dlcj0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiCitGSUxFU18ke1BOfS1kZWJ1Z2dlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9iZGIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BkYi4qICIKKworU1VNTUFSWV8ke1BOfS1kZXY9IlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIgorUkRFUEVORFNfJHtQTn0tZGV2PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGV2PSIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7YmFzZV9saWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsICR7ZGF0YWRpcn0vcGtnY29uZmlnICIKKworU1VNTUFSWV8ke1BOfS1kaWZmbGliPSJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1kaWZmbGliPSIke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tZGlmZmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaWZmbGliLiogIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscz0iUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kaXN0dXRpbHM9IiR7bGliZGlyfS9weXRob24zLjQvY29uZmlnICR7bGliZGlyfS9weXRob24zLjQvZGlzdHV0aWxzICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke1BOfS1kaXN0dXRpbHMiCitGSUxFU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZy9saWIqLmEgIgorCitTVU1NQVJZXyR7UE59LWRvY3Rlc3Q9IlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIKK1JERVBFTkRTXyR7UE59LWRvY3Rlc3Q9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIgorRklMRVNfJHtQTn0tZG9jdGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kb2N0ZXN0LiogIgorCitTVU1NQVJZXyR7UE59LWVsZW1lbnR0cmVlPSJQeXRob24gZWxlbWVudHJlZSIKK1JERVBFTkRTXyR7UE59LWVsZW1lbnR0cmVlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZWxlbWVudHRyZWU9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLiouc28gIgorCitTVU1NQVJZXyR7UE59LWVtYWlsPSJQeXRob24gZW1haWwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWVtYWlsPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IgorRklMRVNfJHtQTn0tZW1haWw9IiR7bGliZGlyfS9weXRob24zLjQvaW1hcGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZW1haWwgIgorCitTVU1NQVJZXyR7UE59LWZjbnRsPSJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1mY250bD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWZjbnRsPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2ZjbnRsLiouc28gIgorCitTVU1NQVJZXyR7UE59LWdkYm09IlB5dGhvbiBHTlUgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWdkYm09IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1nZGJtPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19nZGJtLiouc28gIgorCitTVU1NQVJZXyR7UE59LWh0bWw9IlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWh0bWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1odG1sPSIke2xpYmRpcn0vcHl0aG9uMy40L2Zvcm1hdHRlci4qICR7bGliZGlyfS9weXRob24zLjQvaHRtbGVudGl0eWRlZnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0bWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21hcmt1cGJhc2UuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NnbWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L0hUTUxQYXJzZXIuKiAiCisKK1NVTU1BUllfJHtQTn0taWRsZT0iUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiCitSREVQRU5EU18ke1BOfS1pZGxlPSIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiCitGSUxFU18ke1BOfS1pZGxlPSIke2JpbmRpcn0vaWRsZSAke2xpYmRpcn0vcHl0aG9uMy40L2lkbGVsaWIgIgorCitTVU1NQVJZXyR7UE59LWltYWdlPSJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0taW1hZ2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbWFnZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2xvcnN5cy4qICR7bGliZGlyfS9weXRob24zLjQvaW1naGRyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9pbWFnZW9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZ2JpbWcuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0taW1wb3J0bGliPSJQeXRob24gaW1wb3J0IGltcGxlbWVudGF0aW9uIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1pbXBvcnRsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbXBvcnRsaWI9IiR7bGliZGlyfS9weXRob24zLjQvaW1wb3J0bGliICIKKworU1VNTUFSWV8ke1BOfS1pbz0iUHl0aG9uIGxvdy1sZXZlbCBJL08iCitSREVQRU5EU18ke1BOfS1pbz0iJHtQTn0tY29yZSAke1BOfS1tYXRoIgorRklMRVNfJHtQTn0taW89IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NvY2tldC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2lvLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc3NsLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zZWxlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3Rlcm1pb3MuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NTdHJpbmdJTy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcGlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NvY2tldC4qICR7bGliZGlyfS9weXRob24zLjQvc3NsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZW1wZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvU3RyaW5nSU8uKiAke2xpYmRpcn0vcHl0aG9uMy40L2lvLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fcHlpby4qICIKKworU1VNTUFSWV8ke1BOfS1qc29uPSJQeXRob24gSlNPTiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tanNvbj0iJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlIgorRklMRVNfJHtQTn0tanNvbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9qc29uICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2pzb24uKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbGFuZz0iUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbGFuZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWxhbmc9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2Jpc2VjdC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9faGVhcHEuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL193ZWFrcmVmLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZnVuY3Rvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9hcnJheS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvaXRlcnRvb2xzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9vcGVyYXRvci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcGFyc2VyLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9hdGV4aXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Jpc2VjdC4qICR7bGliZGlyfS9weXRob24zLjQvY29kZS4qICR7bGliZGlyfS9weXRob24zLjQvY29kZW9wLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2xsZWN0aW9ucy4qICR7bGliZGlyfS9weXRob24zLjQvX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24zLjQvZGlzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mdW5jdG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2hlYXBxLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9pbnNwZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9rZXl3b3JkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9vcGNvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N5bWJvbC4qICR7bGliZGlyfS9weXRob24zLjQvcmVwci4qICR7bGliZGlyfS9weXRob24zLjQvdG9rZW4uKiAke2xpYmRpcn0vcHl0aG9uMy40L3Rva2VuaXplLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90cmFjZWJhY2suKiAke2xpYmRpcn0vcHl0aG9uMy40L3dlYWtyZWYuKiAiCisKK1NVTU1BUllfJHtQTn0tbG9nZ2luZz0iUHl0aG9uIGxvZ2dpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxvZ2dpbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tbG9nZ2luZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9sb2dnaW5nICIKKworU1VNTUFSWV8ke1BOfS1tYWlsYm94PSJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1haWxib3g9IiR7UE59LWNvcmUgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW1haWxib3g9IiR7bGliZGlyfS9weXRob24zLjQvbWFpbGJveC4qICIKKworU1VNTUFSWV8ke1BOfS1tYXRoPSJQeXRob24gbWF0aCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWF0aD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LW1hdGg9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL21hdGguKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19yYW5kb20uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3JhbmRvbS4qICR7bGliZGlyfS9weXRob24zLjQvc2V0cy4qICIKKworU1VNTUFSWV8ke1BOfS1taW1lPSJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIgorUkRFUEVORFNfJHtQTn0tbWltZT0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1pbWU9IiR7bGliZGlyfS9weXRob24zLjQvbWltZXRvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC91dS4qICR7bGliZGlyfS9weXRob24zLjQvcXVvcHJpLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMy40L01pbWVXcml0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbW1hcD0iUHl0aG9uIG1lbW9yeS1tYXBwZWQgZmlsZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbW1hcD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LW1tYXA9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvbW1hcC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiCitGSUxFU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbXVsdGlwcm9jZXNzaW5nICIKKworU1VNTUFSWV8ke1BOfS1uZXRjbGllbnQ9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBjbGllbnRzIgorUkRFUEVORFNfJHtQTn0tbmV0Y2xpZW50PSIke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWRhdGV0aW1lICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbmV0Y2xpZW50PSIke2xpYmRpcn0vcHl0aG9uMy40LypDb29raWUqLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9iYXNlNjQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Nvb2tpZWxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZnRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9nb3BoZXJsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2htYWMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0dHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0eXBlcy4qICR7bGliZGlyfS9weXRob24zLjQvbm50cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvcG9wbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zbXRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZWxuZXRsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3VybGxpYiAke2xpYmRpcn0vcHl0aG9uMy40L3V1aWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24zLjQvbWltZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LW5ldHNlcnZlcj0iUHl0aG9uIEludGVybmV0IFByb3RvY29sIHNlcnZlcnMiCitSREVQRU5EU18ke1BOfS1uZXRzZXJ2ZXI9IiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIKK0ZJTEVTXyR7UE59LW5ldHNlcnZlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jZ2kuKiAke2xpYmRpcn0vcHl0aG9uMy40LypIVFRQU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Tb2NrZXRTZXJ2ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tbnVtYmVycz0iUHl0aG9uIG51bWJlciBBUElzIgorUkRFUEVORFNfJHtQTn0tbnVtYmVycz0iJHtQTn0tY29yZSAke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tbnVtYmVycz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9kZWNpbWFsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9mcmFjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L251bWJlcnMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGlja2xlPSJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGlja2xlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXBpY2tsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9waWNrbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NoZWx2ZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvY1BpY2tsZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcGlja2xldG9vbHMuKiAiCisKK1NVTU1BUllfJHtQTn0tcGtndXRpbD0iUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBrZ3V0aWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1wa2d1dGlsPSIke2xpYmRpcn0vcHl0aG9uMy40L3BrZ3V0aWwuKiAiCisKK1NVTU1BUllfJHtQTn0tcHByaW50PSJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcHJpbnQ9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1wcHJpbnQ9IiR7bGliZGlyfS9weXRob24zLjQvcHByaW50LiogIgorCitTVU1NQVJZXyR7UE59LXByb2ZpbGU9IlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXByb2ZpbGU9IiR7UE59LWNvcmUgJHtQTn0tdGV4dHV0aWxzIgorRklMRVNfJHtQTn0tcHJvZmlsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wc3RhdHMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NQcm9maWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbHNwcm9mLiouc28gIgorCitTVU1NQVJZXyR7UE59LXB5ZG9jPSJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHlkb2M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1weWRvYz0iJHtiaW5kaXJ9L3B5ZG9jICR7bGliZGlyfS9weXRob24zLjQvcHlkb2MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3B5ZG9jX2RhdGEgIgorCitTVU1NQVJZXyR7UE59LXJlPSJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiCitSREVQRU5EU18ke1BOfS1yZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlPSIke2xpYmRpcn0vcHl0aG9uMy40L3JlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfY29uc3RhbnRzKiAke2xpYmRpcn0vcHl0aG9uMy40L3NyZV9wYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1yZWFkbGluZT0iUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1yZWFkbGluZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlYWRsaW5lPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3JlYWRsaW5lLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9ybGNvbXBsZXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1yZXBybGliPSJQeXRob24gYWx0ZXJuYXRlIHJlcHIoKSBpbXBsZW1lbnRhdGlvbiIKK1JERVBFTkRTXyR7UE59LXJlcHJsaWI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXBybGliPSIke2xpYmRpcn0vcHl0aG9uMy40L3JlcHJsaWIucHkgIgorCitTVU1NQVJZXyR7UE59LXJlc291cmNlPSJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1yZXNvdXJjZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlc291cmNlPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3Jlc291cmNlLiouc28gIgorCitTVU1NQVJZXyR7UE59LXNoZWxsPSJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IgorUkRFUEVORFNfJHtQTn0tc2hlbGw9IiR7UE59LWNvcmUgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1zaGVsbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jbWQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbW1hbmRzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kaXJjYWNoZS4qICR7bGliZGlyfS9weXRob24zLjQvZm5tYXRjaC4qICR7bGliZGlyfS9weXRob24zLjQvZ2xvYi4qICR7bGliZGlyfS9weXRob24zLjQvcG9wZW4yLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGxleC4qICR7bGliZGlyfS9weXRob24zLjQvc2h1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXNtdHBkPSJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIKK1JERVBFTkRTXyR7UE59LXNtdHBkPSIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tc210cGQ9IiR7YmluZGlyfS9zbXRwZC4qICR7bGliZGlyfS9weXRob24zLjQvc210cGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3FsaXRlMz0iUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXNxbGl0ZTM9IiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1zcWxpdGUzPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zcWxpdGUzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL2RiYXBpMi4qICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9fX2luaXRfXy4qICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9kdW1wLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTMtdGVzdHM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiCitGSUxFU18ke1BOfS1zcWxpdGUzLXRlc3RzPSIke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tc3RyaW5nb2xkPSJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIgorUkRFUEVORFNfJHtQTn0tc3RyaW5nb2xkPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc3RyaW5nb2xkPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3N0cm9wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0cmluZ29sZC4qICIKKworU1VNTUFSWV8ke1BOfS1zdWJwcm9jZXNzPSJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tc3VicHJvY2Vzcz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1mY250bCAke1BOfS1waWNrbGUiCitGSUxFU18ke1BOfS1zdWJwcm9jZXNzPSIke2xpYmRpcn0vcHl0aG9uMy40L3N1YnByb2Nlc3MuKiAiCisKK1NVTU1BUllfJHtQTn0tc3lzbG9nPSJQeXRob24gc3lzbG9nIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXN5c2xvZz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXN5c2xvZz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zeXNsb2cuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tdGVybWluYWw9IlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGVybWluYWw9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS10ZXJtaW5hbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wdHkuKiAke2xpYmRpcn0vcHl0aG9uMy40L3R0eS4qICIKKworU1VNTUFSWV8ke1BOfS10ZXN0cz0iUHl0aG9uIHRlc3RzIgorUkRFUEVORFNfJHtQTn0tdGVzdHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS10ZXh0dXRpbHM9IlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXh0dXRpbHM9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tdGV4dHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jc3YuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2Nzdi4qICR7bGliZGlyfS9weXRob24zLjQvb3B0cGFyc2UuKiAke2xpYmRpcn0vcHl0aG9uMy40L3RleHR3cmFwLiogIgorCitTVU1NQVJZXyR7UE59LXRocmVhZGluZz0iUHl0aG9uIHRocmVhZGluZyAmIHN5bmNocm9uaXphdGlvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGhyZWFkaW5nPSIke1BOfS1jb3JlICR7UE59LWxhbmciCitGSUxFU18ke1BOfS10aHJlYWRpbmc9IiR7bGliZGlyfS9weXRob24zLjQvX3RocmVhZGluZ19sb2NhbC4qICR7bGliZGlyfS9weXRob24zLjQvZHVtbXlfdGhyZWFkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9kdW1teV90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L211dGV4LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90aHJlYWRpbmcuKiAke2xpYmRpcn0vcHl0aG9uMy40L1F1ZXVlLiogIgorCitTVU1NQVJZXyR7UE59LXRraW50ZXI9IlB5dGhvbiBUY2wvVGsgYmluZGluZ3MiCitSREVQRU5EU18ke1BOfS10a2ludGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGtpbnRlcj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fdGtpbnRlci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLXRrICR7bGliZGlyfS9weXRob24zLjQvdGtpbnRlciAiCisKK1NVTU1BUllfJHtQTn0tdW5pdHRlc3Q9IlB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIgorUkRFUEVORFNfJHtQTn0tdW5pdHRlc3Q9IiR7UE59LWNvcmUgJHtQTn0tc3RyaW5nb2xkICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tZGlmZmxpYiAke1BOfS1wcHJpbnQgJHtQTn0tc2hlbGwiCitGSUxFU18ke1BOfS11bml0dGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC91bml0dGVzdC8gIgorCitTVU1NQVJZXyR7UE59LXVuaXhhZG1pbj0iUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXVuaXhhZG1pbj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXVuaXhhZG1pbj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9uaXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2dycC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcHdkLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9nZXRwYXNzLiogIgorCitTVU1NQVJZXyR7UE59LXhtbD0iUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1sPSIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIgorRklMRVNfJHtQTn0teG1sPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3B5ZXhwYXQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3htbCAke2xpYmRpcn0vcHl0aG9uMy40L3htbGxpYi4qICIKKworU1VNTUFSWV8ke1BOfS14bWxycGM9IlB5dGhvbiBYTUwtUlBDIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS14bWxycGM9IiR7UE59LWNvcmUgJHtQTn0teG1sICR7UE59LW5ldHNlcnZlciAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0teG1scnBjPSIke2xpYmRpcn0vcHl0aG9uMy40L3htbHJwY2xpYi4qICR7bGliZGlyfS9weXRob24zLjQvU2ltcGxlWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Eb2NYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3htbHJwYyAiCisKK1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hc3luY2lvICR7UE59LWF1ZGlvICR7UE59LWNvZGVjcyAke1BOfS1jb21waWxlICR7UE59LWNvbXByZXNzaW9uICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVwcmxpYiAke1BOfS1yZXNvdXJjZSAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAgIgorQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIgorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tYXN5bmNfMC42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkMGIwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGZyYW1ld29yayB0byBwcm9jZXNzIGludGVyZGVwZW5kZW50IHRhc2tzIGluIGEgcG9vbCBvZiB3b3JrZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvYXN5bmMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUEtHLUlORk87YmVnaW5saW5lPTg7ZW5kbGluZT04O21kNT04OGRmOGU3OGI5ZWRmZDc0NDk1Mzg2MjE3OWYyZDE0ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9hL2FzeW5jL2FzeW5jLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YjA2YjU5OTdkZTIxNTRmM2JjMDI3M2Y4MGJjZWY2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzY4OTRkODc2ZTQ1ODc4ZmFhZTQ5M2IwY2Y2MWQwZTI4ZWM0MTczMzQ0NDhhYzBhNmVhMjIyOWQ4MzQzMDUxIgorCitTID0gIiR7V09SS0RJUn0vYXN5bmMtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGhyZWFkaW5nIHB5dGhvbi1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRidXNfMS4yLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTRkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgREJ1cyBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gc3lzdGVtIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9Tb2Z0d2FyZS9kYnVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYjgzMDQ3Y2U5ZTk0OGI2N2MwZmFjYzVmMjMzNDc2YSIKK0RFUEVORFMgPSAiZXhwYXQgZGJ1cyBkYnVzLWdsaWIgdmlydHVhbC9saWJpbnRsIHB5dGhvbi1weXJleC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL2RidXMtcHl0aG9uL2RidXMtcHl0aG9uLSR7UFZ9LnRhci5neiBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDljZDJkMWEwNTdjYzQzMmNlOTQ0ZGUzZmMwNmJmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMTJjNmM4YjJiZjNhOTMwMmY3NTE2Njk1MmNiZTQxZDZiMzhjMzQ0MWJiYzY3NjdkYmQ0OTg5NDIzMTZjNmRmIgorUyA9ICIke1dPUktESVJ9L2RidXMtcHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscy1iYXNlIGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/PSAiIgorUEFDS0FHRUNPTkZJR1tkb2NzXSA9ICItLWVuYWJsZS1odG1sLWRvY3MsLS1kaXNhYmxlLWh0bWwtZG9jcyxweXRob24tZG9jdXRpbHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1thcGktZG9jc10gPSAiLS1lbmFibGUtYXBpLWRvY3MsLS1kaXNhYmxlLWFwaS1kb2NzLHB5dGhvbi1kb2N1dGlscy1uYXRpdmUgcHl0aG9uLWVweWRvYy1uYXRpdmUiCisKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorCitSREVQRU5EU18ke1BOfSA9ICJweXRob24taW8gcHl0aG9uLWxvZ2dpbmcgcHl0aG9uLXN0cmluZ29sZCBweXRob24tdGhyZWFkaW5nIHB5dGhvbi14bWwiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWRvY3V0aWxzXzAuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZGE4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiVGV4dCBwcm9jZXNzaW5nIHN5c3RlbSBmb3IgZG9jdW1lbnRhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGICYgQlNELTItQ2xhdXNlICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9YTcyMmZiZGMyMDM0N2RiN2I2OTIyMzU5NGRkNTQ1NzQiCisKK0RFUEVORFMgPSAicHl0aG9uIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2N1dGlscy9kb2N1dGlscy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNDYyMjI2M2I2MmM1Yzc3MWMwMzUwMmFmYTMxNTc3NjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzdkYjcxNzgxMGFiNjk2NWY2NmM4Y2YwMzk4YTk4YzlkOGRmOTgyZGEzOWI0Y2Q3ZjE2MjkxMWViODk1OTZmYSIKKworUyA9ICIke1dPUktESVJ9L2RvY3V0aWxzLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OGQ3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRfMS4wLjEuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJQeXRob24gbGlicmFyeSB1c2VkIHRvIGludGVyYWN0IHdpdGggR2l0IHJlcG9zaXRvcmllcyIKK0RFU0NSSVBUSU9OID0gIkdpdFB5dGhvbiBwcm92aWRlcyBvYmplY3QgbW9kZWwgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIHRvIFwKK2EgZ2l0IHJlcG9zaXRvcnkuIEFjY2VzcyByZXBvc2l0b3J5IGluZm9ybWF0aW9uIGNvbnZlbmllbnRseSwgYWx0ZXIgdGhlIFwKK2luZGV4IGRpcmVjdGx5LCBoYW5kbGUgcmVtb3Rlcywgb3IgZ28gZG93biB0byBsb3ctbGV2ZWwgb2JqZWN0IGRhdGFiYXNlIFwKK2FjY2VzcyB3aXRoIGJpZy1maWxlcyBzdXBwb3J0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QtMy1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04YjhkMjZjMzdjMWQ1YTA0ZjliMDE4NmVkYmViYzE4MyIKK0RFUEVORFMgPSAicHl0aG9uLWdpdGRiIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL0cvR2l0UHl0aG9uL0dpdFB5dGhvbi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjU5NjQ0YjQyYzQxZTVlNTE3MGMwY2Q4M2VkNjQyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Yzg4YzE3YmJjYWUyYTQ0NWZmNjQwMjRlZjEzNTI2MjI0ZjcwZTM1ZTM4YzMzNDE2YmU1Y2ViNTZjYTdmNzYwIgorCitTID0gIiR7V09SS0RJUn0vR2l0UHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1naXRkYiBweXRob24tbGFuZyBweXRob24taW8gcHl0aG9uLXNoZWxsIHB5dGhvbi1tYXRoIHB5dGhvbi1yZSBweXRob24tc3VicHJvY2VzcyBweXRob24tc3RyaW5nb2xkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0ZGJfMC42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwODNiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQSBwdXJlLVB5dGhvbiBnaXQgb2JqZWN0IGRhdGFiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdGh1Yi5jb20vZ2l0cHl0aG9uLWRldmVsb3BlcnMvZ2l0ZGIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NTllNWVjYjEzMzM5YTkzNmVlZGY4MzI4MmVhZjQ1MjgiCitERVBFTkRTID0gInB5dGhvbi1hc3luYyBweXRob24tc21tYXAiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL2cvZ2l0ZGIvZ2l0ZGItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDRlNDM2NmI4YmRmZDMwNmIwNzVjM2E1MmM5NmFlMWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTNlYmJjMjdiZTAzNWEyZTg3NGVkOTA0ZGY1MTZlMzVmNGEyOWE3NzhhNzY0Mzg1ZGUwOWRlOWUwZjEzOTY1OCIKKworUyA9ICIke1dPUktESVJ9L2dpdGRiLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXNtbWFwIHB5dGhvbi1hc3luYyBweXRob24tbW1hcCBweXRob24tbGFuZyBweXRob24temxpYiBweXRob24taW8gcHl0aG9uLXNoZWxsIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3NTMwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gMDdkNGYwOTVhOWUyMmFlNjc2YThkNjgwNzMxMDExMzFlNjUwMTJkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUdWUsIDE1IE5vdiAyMDExIDEzOjE2OjU0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbiBpbWFnaW5nIHNldHVwLnB5OiBmb3JjZSBwYXRocyBmb3IgemxpYiwgZnJlZXR5cGUgYW5kIGpwZWcgYW5kIGRvbid0IGFkZCBob3N0IHBhdGhzCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBzZXR1cC5weSB8ICAgMTQgKysrLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA1ZDRkNTNhLi5iMWEyMmVjIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMzQsMTAgKzM0LDEwIEBAIGRlZiBsaWJpbmNsdWRlKHJvb3QpOgorICMgVElGRl9ST09UID0gbGliaW5jbHVkZSgiL29wdC90aWZmIikKKyAKKyBUQ0xfUk9PVCA9IE5vbmUKKy1KUEVHX1JPT1QgPSBOb25lCistWkxJQl9ST09UID0gTm9uZQorK0pQRUdfUk9PVCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10KKytaTElCX1JPT1QgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddCisgVElGRl9ST09UID0gTm9uZQorLUZSRUVUWVBFX1JPT1QgPSBOb25lCisrRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCisgTENNU19ST09UID0gTm9uZQorIAorICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKK0BAIC0xNDcsNyArMTQ3LDYgQEAgY2xhc3MgcGlsX2J1aWxkX2V4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL29wdC9sb2NhbC9saWIiKQorICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL29wdC9sb2NhbC9pbmNsdWRlIikKKyAKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9sb2NhbC9saWIiKQorICAgICAgICAgIyBGSVhNRTogY2hlY2sgL29wdC9zdHVmZiBkaXJlY3RvcmllcyBoZXJlPworIAorICAgICAgICAgcHJlZml4ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJwcmVmaXgiKQorQEAgLTIwNywxMyArMjA2LDYgQEAgY2xhc3MgcGlsX2J1aWxkX2V4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih0Y2xfZGlyLCAidGsuaCIpKToKKyAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsIHRjbF9kaXIpCisgCistICAgICAgICAjIHN0YW5kYXJkIGxvY2F0aW9ucworLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xvY2FsL2xpYiIpCistICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi91c3IvbG9jYWwvaW5jbHVkZSIpCistCistICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbGliIikKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCAiL3Vzci9pbmNsdWRlIikKKy0KKyAgICAgICAgICMKKyAgICAgICAgICMgaW5zZXJ0IG5ldyBkaXJzICpiZWZvcmUqIGRlZmF1bHQgbGlicywgdG8gYXZvaWQgY29uZmxpY3RzCisgICAgICAgICAjIGJldHdlZW4gUHl0aG9uIFBZRCBzdHViIGxpYnMgYW5kIHJlYWwgbGlicmFyaWVzCistLSAKKzEuNy4yLjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2FsbG93LnRvLmRpc2FibGUuc29tZS5mZWF0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTYwZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorQXQgbGVhc3QgbGNtcyB3YXNuJ3QgZGV0ZXJtaW5pc3RpY2x5IGRldGVjdGVkIGZyb20gc3lzcm9vdC4KKworVGhpcyB3aWxsIGFsbG93IHRvIGV4cG9ydCBMQ01TX0VOQUJMRUQ9RmFsc2Ugd2hlbiBsY21zIGlzbid0IGluIFBBQ0tBR0VDT05GSUcuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitkaWZmIC11TnIgSW1hZ2luZy0xLjEuNy5vcmlnL3NldHVwLnB5IEltYWdpbmctMS4xLjcvc2V0dXAucHkKKy0tLSBJbWFnaW5nLTEuMS43Lm9yaWcvc2V0dXAucHkJMjAxMy0wNy0yMiAxMDoxNzowMi4wODE0NTcwNzUgKzAyMDAKKysrKyBJbWFnaW5nLTEuMS43L3NldHVwLnB5CTIwMTMtMDctMjIgMTM6MTA6MDkuMDI5NzA3NDkyICswMjAwCitAQCAtMzksNiArMzksMTIgQEAKKyBUSUZGX1JPT1QgPSBOb25lCisgRlJFRVRZUEVfUk9PVCA9ICBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLCBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddCisgTENNU19ST09UID0gTm9uZQorK1RDTF9FTkFCTEVEID0gb3MuZ2V0ZW52KCdUQ0xfRU5BQkxFRCcsICJUcnVlIikKKytKUEVHX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0pQRUdfRU5BQkxFRCcsICJUcnVlIikKKytaTElCX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1pMSUJfRU5BQkxFRCcsICJUcnVlIikKKytUSUZGX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ1RJRkZfRU5BQkxFRCcsICJUcnVlIikKKytGUkVFVFlQRV9FTkFCTEVEID0gb3MuZ2V0ZW52KCdGUkVFVFlQRV9FTkFCTEVEJywgIlRydWUiKQorK0xDTVNfRU5BQkxFRCA9IG9zLmdldGVudignTENNU19FTkFCTEVEJywgIlRydWUiKQorIAorICMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKKyAKK0BAIC0yMjAsMjIgKzIyNiwyMiBAQAorICAgICAgICAgICAgIHpsaWIgPSBqcGVnID0gdGlmZiA9IGZyZWV0eXBlID0gdGNsID0gdGsgPSBsY21zID0gTm9uZQorICAgICAgICAgZmVhdHVyZSA9IGZlYXR1cmUoKQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgorKyAgICAgICAgaWYgWkxJQl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInpsaWIuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6Iik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6IgorICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ6bGliIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUuemxpYiA9ICJ6bGliIiAjIGFsdGVybmF0aXZlIG5hbWUKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKKysgICAgICAgIGlmIEpQRUdfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJqcGVnbGliLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAianBlZyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAianBlZyIKKyAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAibGlianBlZyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmpwZWcgPSAibGlianBlZyIgIyBhbHRlcm5hdGl2ZSBuYW1lCisgCistICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAidGlmZiIpOgorKyAgICAgICAgaWYgVElGRl9FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRpZmYiKToKKyAgICAgICAgICAgICBmZWF0dXJlLnRpZmYgPSAidGlmZiIKKyAKKy0gICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgorKyAgICAgICAgaWYgRlJFRVRZUEVfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJmcmVldHlwZSIpOgorICAgICAgICAgICAgICMgbG9vayBmb3IgZnJlZXR5cGUyIGluY2x1ZGUgZmlsZXMKKyAgICAgICAgICAgICBmcmVldHlwZV92ZXJzaW9uID0gMAorICAgICAgICAgICAgIGZvciBkaXIgaW4gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnM6CitAQCAtMjU2LDExICsyNjIsMTEgQEAKKyAgICAgICAgICAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgICAgICAgICAgYWRkX2RpcmVjdG9yeShzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgZGlyLCAwKQorIAorLSAgICAgICAgaWYgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgorKyAgICAgICAgaWYgTENNU19FTkFCTEVEID09ICdUcnVlJyBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgImxjbXMuaCIpOgorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJsY21zIik6CisgICAgICAgICAgICAgICAgIGZlYXR1cmUubGNtcyA9ICJsY21zIgorIAorLSAgICAgICAgaWYgX3RraW50ZXIgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ0ay5oIik6CisrICAgICAgICBpZiBUQ0xfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIF90a2ludGVyIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAidGsuaCIpOgorICAgICAgICAgICAgICMgdGhlIGxpYnJhcnkgbmFtZXMgbWF5IHZhcnkgc29tZXdoYXQgKGUuZy4gdGNsODQgb3IgdGNsOC40KQorICAgICAgICAgICAgIHZlcnNpb24gPSBUQ0xfVkVSU0lPTlswXSArIFRDTF9WRVJTSU9OWzJdCisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRjbCIgKyB2ZXJzaW9uKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9maXgtZnJlZXR5cGUtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjYzYzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gYzYwNDBmNjE4ZDhmMjcwNmE3YjQ2ZDFjZGYzN2QxYTU4N2Y5NzAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJldyBTdHJvbW5vdiA8c3Ryb21ub3ZAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBOb3YgMjAxMyAxNjo1ODo0MyArMDQwMAorU3ViamVjdDogW1BBVENIXSBmaXggY29tcGlsaW5nIHdpdGggRnJlZVR5cGUgMi41LjEKKworLS0tCisgX2ltYWdpbmdmdC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvX2ltYWdpbmdmdC5jIGIvX2ltYWdpbmdmdC5jCitpbmRleCA0N2Q1MGJkLi5mMTk1NTViIDEwMDY0NAorLS0tIGEvX2ltYWdpbmdmdC5jCisrKysgYi9faW1hZ2luZ2Z0LmMKK0BAIC01OSw3ICs1OSwxMSBAQCBzdHJ1Y3QgeworICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworIH0gZnRfZXJyb3JzW10gPQorIAorKyNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRV8yXzEpCisrI2luY2x1ZGUgRlRfRVJST1JTX0gKKysjZWxzZQorICNpbmNsdWRlIDxmcmVldHlwZS9mdGVycm9ycy5oPgorKyNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgLyogZm9udCBvYmplY3RzICovCistLSAKKzEuOC41LjEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmdfMS4xLjcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzgzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIEltYWdpbmcgTGlicmFyeSAoUElMKSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTkyO2VuZGxpbmU9MTIwO21kNT1jNDM3MWFmNDU3OWYxZTQ4OWNmODgxYzE0NDNkZDRlYyIKK0RFUEVORFMgPSAiZnJlZXR5cGUganBlZyB0aWZmIgorU1JDTkFNRSA9ICJJbWFnaW5nIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2VmZmJvdC5vcmcvZG93bmxvYWRzL0ltYWdpbmctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmMxNGE1NGUxY2UwMmEwMjI1YmU4ODU0YmZiYTQ3OGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk1YmM3YzI0OThjOGUxZjliOTk5MzhmMWE0MGRjODZiM2YxNDk3NDFmMTA1Y2Y3YzdiZDJlMDcyNTQwNTIxMSIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCisjIFRoZXJlIGlzbid0IGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwgYW5kIGxjbXMgaXMgaW4gbWV0YS1vZSwgYXQgbGVhc3QgbWFrZSBpdCBleHBsaWNpdCB3aGVuIGVuYWJsZWQKKyMgc2V0dXAucHkgYWxyZWFkeSBoYXMgRklYTUU6IGFkZCBtZWNoYW5pc20gdG8gZXhwbGljaXRseSAqZGlzYWJsZSogdGhlIHVzZSBvZiBhIGxpYnJhcnkKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xjbXNdID0gIiwsbGNtcyIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworZG9fY29tcGlsZSgpIHsKKyAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0KKyAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0KKyAgICBleHBvcnQgTENNU19FTkFCTEVEPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2xjbXMnLCAnVHJ1ZScsICdGYWxzZScsIGQpfQorICAgIGRpc3R1dGlsc19kb19jb21waWxlCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9CisgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9CisgICAgZXhwb3J0IExDTVNfRU5BQkxFRD0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsY21zJywgJ1RydWUnLCAnRmFsc2UnLCBkKX0KKyAgICBkaXN0dXRpbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS9odG1sLworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L1JFQURNRSAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59LworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L0RvY3MvKiAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59L2h0bWwvCisKKyAgICAjIGdldCByaWQgb2YgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24KKyAgICBzZWQgLWkgLWUgJ3M6L3Vzci9sb2NhbC9iaW4vOiR7YmluZGlyfS9lbnYgOmcnICR7RH0ke2JpbmRpcn0vKgorfQorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWxhbmcgcHl0aG9uLXN0cmluZ29sZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW1ha29fMS4wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVGVtcGxhdGluZyBsaWJyYXJ5IGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGViM2ZmOGU0YzE3YWFmN2I4MDg4OWI2YjJiZjRjODMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL00vTWFrby9NYWtvLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjlmMGFhZmQxNzdiMDM5ZWY2N2I5MGVhMzUwNDk3YTU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1ZjA4NjlmZWJlYTU5ZGFiN2VmZDI1NmZiNDUxYzM3N2NiYjc5NDdiZWYzODZmZjBiYjQ0NjI3YzMxYThkMWMiCisKK1MgPSAiJHtXT1JLRElSfS9NYWtvLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXRocmVhZGluZyBcCisgICAgICAgICAgICAgICAgICBweXRob24tbmV0Y2xpZW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1odG1sIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5MjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIFNvbWUgdmVyc2lvbnMgb2YgU1dJRyBkbyBub3QgdXNlIHRoZSBleHRlbnNpb24gcGFyYW1ldGVyLgorIyBNYWtlIGl0IG9wdGlvbmFsLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorQEAgLTU2Niw3ICs1NjYsNyBAQCBjbGFzcyBidWlsZF9leHQgKENvbW1hbmQpOgorICAgICAgICAgICAgIHRhcmdldF9sYW5nPWxhbmd1YWdlKQorIAorIAorLSAgICBkZWYgc3dpZ19zb3VyY2VzIChzZWxmLCBzb3VyY2VzLCBleHRlbnNpb24pOgorKyAgICBkZWYgc3dpZ19zb3VyY2VzIChzZWxmLCBzb3VyY2VzLCBleHRlbnNpb249Tm9uZSk6CisgCisgICAgICAgICAiIiJXYWxrIHRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyBpbiAnc291cmNlcycsIGxvb2tpbmcgZm9yIFNXSUcKKyAgICAgICAgIGludGVyZmFjZSAoLmkpIGZpbGVzLiAgUnVuIFNXSUcgb24gYWxsIHRoYXQgYXJlIGZvdW5kLCBhbmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI0NjliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIERvbid0IG1vZGlmeSB0aGUgc2hlLWJhbmcgbGluZSBmb3IgYSBjcm9zcy1idWlsZC4KKyMgT3RoZXJ3aXNlIGl0IHBvaW50cyB0byBvdXIgaG9zdHB5dGhvbiAod2hpY2ggd2UgZG8gbm90IHdhbnQpCisjCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorCitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrKyBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKK0BAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIGJ1aWxkX3NjcmlwdHMgKENvbW1hbmQpOgorICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlLm1hdGNoKGZpcnN0X2xpbmUpCistICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorKyAgICAgICAgICAgICAgICBpZiBGYWxzZTogI21hdGNoOgorICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gMQorICAgICAgICAgICAgICAgICAgICAgcG9zdF9pbnRlcnAgPSBtYXRjaC5ncm91cCgxKSBvciAnJworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5YWFmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisjIFNpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisKKy0tLSBQeXRob24tMi42LjYvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkub3JpZwkyMDEyLTAxLTAzIDE0OjAyOjAzLjAyNzAwNTI5NiArMDAwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQkyMDEyLTAxLTAzIDE0OjAyOjMxLjUxNzYwMTA4MSArMDAwMAorQEAgLTE5LDggKzE5LDggQEAKKyBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKKyAKKyAjIFRoZXNlIGFyZSBuZWVkZWQgaW4gYSBjb3VwbGUgb2Ygc3BvdHMsIHNvIGp1c3QgY29tcHV0ZSB0aGVtIG9uY2UuCistUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorLUVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCisrUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQorICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorQEAgLTcwLDcgKzcwLDcgQEAKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorICAgICBpZiBwcmVmaXggaXMgTm9uZToKKy0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorKyAgICAgICAgcHJlZml4ID0gb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXS5yc3RyaXAoJ2luY2x1ZGUnKQorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBpZiBweXRob25fYnVpbGQ6CitAQCAtMTE1LDEyICsxMTUsMTYgQEAKKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5wcmVmaXggb3IKKyAgICAgc3lzLmV4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorKyAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorLSAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisrICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgorKyAgICAgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgcHJlZml4ID0gUFJFRklYCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitAQCAtMjE2LDcgKzIyMCw3IEBACisgICAgIGVsc2U6CisgICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBjb25maWcuaCBmaWxlIGNoYW5nZWQgaW4gMi4yCisgICAgICAgICBjb25maWdfaCA9ICdweWNvbmZpZy5oJworLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsIGNvbmZpZ19oKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKK0BAIC0yMjUsNyArMjI5LDcgQEAKKyAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2VmaWxlIikKKyAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpCisrICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisgCisgCisgZGVmIHBhcnNlX2NvbmZpZ19oKGZwLCBnPU5vbmUpOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3OWU3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F2b2lkcyBwYXJhbGxlbCBtYWtlIHJhY2VzIGxpbmtpbmcgZXJyb3JzIHdoZW4gbWFraW5nIFBhcnNlci9QR0VOCisKKy0gSW1wbGVtZW50cyBSaWNoYXJkIFB1cmRpZSdzIGlkZWEKKworU2lnbmVkLU9mZi1CeTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtNjEwLDEyICs2MTAsMTAgQEAgTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZworIAorIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B3ZG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorLQkJJChNQUtFKSAkKFBHRU4pCisgCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKy0JCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKKyAKKyAkKFBHRU4pOgkkKFBHRU5PQkpTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzEwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvZGVidWcucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMi42LjEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNi4xLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMDktMTEtMTMgMTY6MDQ6NTQuMDAwMDAwMDAwICswMDAwCisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDA5LTExLTEzIDE2OjA2OjI3LjAwMDAwMDAwMCArMDAwMAorQEAgLTMwMCw2ICszMDAsOCBAQAorICAgICAgICAgZHlsaWJfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdkeWxpYicpCisgICAgICAgICBzdGF0aWNfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdzdGF0aWMnKQorIAorKyAgICAgICAgcHJpbnQgIkxvb2tpbmcgaW4gJXMgZm9yICVzIiAlIChsaWIsIGRpcnMpCisrCisgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgc2hhcmVkID0gb3MucGF0aC5qb2luKGRpciwgc2hhcmVkX2YpCisgICAgICAgICAgICAgZHlsaWIgPSBvcy5wYXRoLmpvaW4oZGlyLCBkeWxpYl9mKQorQEAgLTMwOSwxMCArMzExLDEzIEBACisgICAgICAgICAgICAgIyBhc3N1bWluZyB0aGF0ICphbGwqIFVuaXggQyBjb21waWxlcnMgZG8uICBBbmQgb2YgY291cnNlIEknbQorICAgICAgICAgICAgICMgaWdub3JpbmcgZXZlbiBHQ0MncyAiLXN0YXRpYyIgb3B0aW9uLiAgU28gc3VlIG1lLgorICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGR5bGliKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChkeWxpYikKKyAgICAgICAgICAgICAgICAgcmV0dXJuIGR5bGliCisgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzaGFyZWQpOgorKyAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgJXMiICUgKHNoYXJlZCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlZAorICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc3RhdGljKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChzdGF0aWMpCisgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWMKKyAKKyAgICAgICAgICMgT29wcywgZGlkbid0IGZpbmQgaXQgaW4gKmFueSogb2YgJ2RpcnMnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhODllNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDIzNSBAQAorUmViYXNlZCBmb3IgUHl0aG9uIDIuNy45CisKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisyMDExLzA5LzI5CitUaGUgcHl0aG9uIHJlY2lwZSBidWlsZGluZyB3YXMgZmFpbGluZyBiZWNhdXNlIHB5dGhvbi1uYXRpdmUgCitjb3VsZCBub3QgaGFuZGxlIHN5cy5saWIgdmFyLiBzeXMubGliIHZhciBpcyBkZWZpbmVkIGluIHRoZSAKK211bHRpbGliIHBhdGNoIGhlbmNlIGFkZGVkIHRoaXMgbXVsdGlsaWIucGF0Y2ggZm9yIHB5dGhvbi1uYXRpdmUgCityZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrKyBQeXRob24tMi43LjkvSW5jbHVkZS9weXRob25ydW4uaAorQEAgLTEwOCw2ICsxMDgsNyBAQCBQeUFQSV9GVU5DKGNoYXIgKikgUHlfR2V0UGF0aCh2b2lkKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMjIsNiArMjIsOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBpZiBzeXMudmVyc2lvbiA8ICIyLjIiOgorICAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlJywKK0BAIC00Miw3ICs0NCw3IEBAIGVsc2U6CisgSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAndW5peF9wcmVmaXgnOiB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlLycrbGlibmFtZSsnL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKKyAgICAgICAgICdzY3JpcHRzJzogJyRiYXNlL2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9weWRvYy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKK0BAIC0zODMsNyArMzgzLDcgQEAgY2xhc3MgRG9jOgorIAorICAgICAgICAgZG9jbG9jID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTkRPQ1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeSIpCistICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIrc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMi43LjkvTGliL3NpdGUucHkKK0BAIC0yODgsMTMgKzI4OCwxOSBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9kbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X2RsLnB5CitAQCAtNCwxMCArNCwxMSBAQAorIGltcG9ydCB1bml0dGVzdAorIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKyBkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQorK2ltcG9ydCBzeXMKKyAKKyBzaGFyZWRsaWJzID0gWworLSAgICAoJy91c3IvbGliL2xpYmMuc28nLCAnZ2V0cGlkJyksCistICAgICgnL2xpYi9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisrICAgICgnL3Vzci8nK3N5cy5saWIrJy9saWJjLnNvJywgJ2dldHBpZCcpLAorKyAgICAoJy8nK3N5cy5saWIrJy9saWJjLnNvLjYnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCisgICAgICgnL3Vzci9saWIvbGliYy5keWxpYicsICdnZXRwaWQnKSwKKyAgICAgXQorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdHJhY2UucHkKKysrKyBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5CitAQCAtNzU0LDEwICs3NTQsMTAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKKyAgICAgICAgICAgICAgICAgIyBzaG91bGQgSSBhbHNvIGNhbGwgZXhwYW5kdXNlcj8gKGFmdGVyIGFsbCwgY291bGQgdXNlICRIT01FKQorIAorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtODcsNiArODcsNyBAQCBQWV9DRkxBR1M9CSQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEwNiw3ICsxMDcsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CSQocHJlZml4KS9ATElCQAorIAorICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKKyBCSU5MSUJERVNUPQkkKExJQkRJUikvcHl0aG9uJChWRVJTSU9OKQorQEAgLTU5Nyw2ICs1OTgsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTYzOSw3ICs2NDEsNyBAQCAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1ETElCPSciJChMSUIpIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisgCisgUHl0aG9uL2ltcG9ydGRsLm86ICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworIAkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE2LDkgKzExNiwxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworLXN0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9ICJsaWIvcHl0aG9uIiBWRVJTSU9OOworK3N0YXRpYyBjaGFyIGxpYl9weXRob25bXSA9IExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2UoY2hhciAqZGlyKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMTMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNDM3LDYgKzE0MzcsOCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0Q29weXJpZ2h0KCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicGxhdGZvcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicHJlZml4IiwKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTczNiw2ICs3MzYsMTEgQEAgU3VuT1MqKQorICAgICA7OworIGVzYWMKKyAKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytMSUI9YGJhc2VuYW1lICR7bGliZGlyfWAKKytBQ19NU0dfUkVTVUxUKCRMSUIpCisrCisgCisgQUNfU1VCU1QoTElCUkFSWSkKKyBBQ19NU0dfQ0hFQ0tJTkcoTElCUkFSWSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL25vaG9zdGxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0NTJlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKzIwMTQvMTIvMTUKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC00MzksOSArNDM5LDkgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICBkZWYgZGV0ZWN0X21vZHVsZXMoc2VsZik6CisgICAgICAgICAjIEVuc3VyZSB0aGF0IC91c3IvbG9jYWwgaXMgYWx3YXlzIHVzZWQKKy0gICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCisrICAgICAgICAjIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgIyBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsICcvdXNyL2xvY2FsL2xpYicpCisrICAgICAgICAgICAgIyBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCisgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorQEAgLTQ4MCwxNSArNDgwLDE1IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyAgICAgICAgI2lmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysgICAgICAgICAgICAgICAgI2FuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorQEAgLTc2MSw4ICs3NjEsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIHBhc3MgIyBJc3N1ZSA3Mzg0OiBBbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKy0gICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDJhYWYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitPbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHN5c2NvbmZpZyByZWFkIHRoZSBkYXRhIGZyb20gYm90aCB0aGUgTWFrZWZpbGUgYW5kCit0aGUgUHl0aG9uLmggZmlsZSBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgY3JlYXRlZCBkaWN0aW9uYXJpZXMgd2l0aCB0aGVpciB2YXJpYWJsZXMKK2FuZCB1c2VkIHRob3NlIHdoZW4gdXNpbmcgZ2V0X2NvbmZpZ192YXIoKSwgbm93IGl0IHVzZXMgX3N5c2NvbmZpZ2RhdGEuYnVpbGRfdGltZV92YXJzW10KK3doaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIEhPU1QsIGVycm9uZW91cyBpbiBvdXIgY2FzZSwgdGhpcyBwYXRjaCByZXZlcnRzIHRoaXMKK2JlaGF2aW9yIGFuZCB1c2VzIFB5dGhvbi5oIGFuZCBNYWtlZmlsZSB0byBnZXQgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC00MDEsMTIgKzQwMSw2NiBAQCBfY29uZmlnX3ZhcnMgPSBOb25lCisgCisgZGVmIF9pbml0X3Bvc2l4KCk6CisgICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgUE9TSVggc3lzdGVtcy4iIiIKKy0gICAgIyBfc3lzY29uZmlnZGF0YSBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSwgc2VlIHRoZSBzeXNjb25maWcgbW9kdWxlCistICAgIGZyb20gX3N5c2NvbmZpZ2RhdGEgaW1wb3J0IGJ1aWxkX3RpbWVfdmFycworLSAgICBnbG9iYWwgX2NvbmZpZ192YXJzCistICAgIF9jb25maWdfdmFycyA9IHt9CistICAgIF9jb25maWdfdmFycy51cGRhdGUoYnVpbGRfdGltZV92YXJzKQorKyAgICBnID0ge30KKysgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgTWFrZWZpbGU6CisrICAgIHRyeToKKysgICAgICAgIGZpbGVuYW1lID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKKysgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQorKyAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorKyAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKKysgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKKysgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCisrCisrICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKG15X21zZykKKysKKysgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgcHljb25maWcuaDoKKysgICAgdHJ5OgorKyAgICAgICAgZmlsZW5hbWUgPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorKyAgICAgICAgcGFyc2VfY29uZmlnX2goZmlsZShmaWxlbmFtZSksIGcpCisrICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisrICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQorKyAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgorKyAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKKysKKysgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IobXlfbXNnKQorKworKyAgICAjIE9uIEFJWCwgdGhlcmUgYXJlIHdyb25nIHBhdGhzIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyBpbiB0aGUgTWFrZWZpbGUKKysgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAorKyAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KKysgICAgaWYgcHl0aG9uX2J1aWxkOgorKyAgICAgICAgZ1snTERTSEFSRUQnXSA9IGdbJ0JMRFNIQVJFRCddCisgCisrICAgIGVsaWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCkgPCAnMi4xJzoKKysgICAgICAgICMgVGhlIGZvbGxvd2luZyB0d28gYnJhbmNoZXMgYXJlIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5LgorKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdhaXg0JzogICAgICAgICAgIyB3aGF0IGFib3V0IEFJWCAzLnggPworKyAgICAgICAgICAgICMgTGlua2VyIHNjcmlwdCBpcyBpbiB0aGUgY29uZmlnIGRpcmVjdG9yeSwgbm90IGluIE1vZHVsZXMgYXMgdGhlCisrICAgICAgICAgICAgIyBNYWtlZmlsZSBzYXlzLgorKyAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKKysgICAgICAgICAgICBsZF9zb19haXggPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdsZF9zb19haXgnKQorKyAgICAgICAgICAgIHB5dGhvbl9leHAgPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsICdweXRob24uZXhwJykKKysKKysgICAgICAgICAgICBnWydMRFNIQVJFRCddID0gIiVzICVzIC1iSTolcyIgJSAobGRfc29fYWl4LCBnWydDQyddLCBweXRob25fZXhwKQorKworKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Jlb3MnOgorKyAgICAgICAgICAgICMgTGlua2VyIHNjcmlwdCBpcyBpbiB0aGUgY29uZmlnIGRpcmVjdG9yeS4gIEluIHRoZSBNYWtlZmlsZSBpdCBpcworKyAgICAgICAgICAgICMgcmVsYXRpdmUgdG8gdGhlIHNyY2Rpciwgd2hpY2ggYWZ0ZXIgaW5zdGFsbGF0aW9uIG5vIGxvbmdlciBtYWtlcworKyAgICAgICAgICAgICMgc2Vuc2UuCisrICAgICAgICAgICAgcHl0aG9uX2xpYiA9IGdldF9weXRob25fbGliKHN0YW5kYXJkX2xpYj0xKQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9wYXRoID0gc3RyaW5nLnNwbGl0KGdbJ0xEU0hBUkVEJ10pWzBdCisrICAgICAgICAgICAgbGlua2Vyc2NyaXB0X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxpbmtlcnNjcmlwdF9wYXRoKQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2Vyc2NyaXB0X25hbWUpCisrCisrICAgICAgICAgICAgIyBYWFggdGhpcyBpc24ndCB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpczogYWRkaW5nIHRoZSBQeXRob24KKysgICAgICAgICAgICAjIGxpYnJhcnkgdG8gdGhlIGxpbmssIGlmIG5lZWRlZCwgc2hvdWxkIGJlIGluIHRoZSAiYnVpbGRfZXh0IgorKyAgICAgICAgICAgICMgY29tbWFuZC4gIChJdCdzIGFsc28gbmVlZGVkIGZvciBub24tTVMgY29tcGlsZXJzIG9uIFdpbmRvd3MsIGFuZAorKyAgICAgICAgICAgICMgaXQncyB0YWtlbiBjYXJlIG9mIGZvciB0aGVtIGJ5IHRoZSAnYnVpbGRfZXh0LmdldF9saWJyYXJpZXMoKScKKysgICAgICAgICAgICAjIG1ldGhvZC4pCisrICAgICAgICAgICAgZ1snTERTSEFSRUQnXSA9ICgiJXMgLUwlcy9saWIgLWxweXRob24lcyIgJQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmtlcnNjcmlwdCwgUFJFRklYLCBnZXRfcHl0aG9uX3ZlcnNpb24oKSkpCisrCisrICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKKysgICAgX2NvbmZpZ192YXJzID0gZworIAorIGRlZiBfaW5pdF9udCgpOgorICAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIE5UIiIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDI4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIENDIHZhcmlhYmxlLHNvbWV0aW1lcyBsaWtlOiJ4ODZfNjQtcG9reS1saW51eC1nY2MgICAtbTY0IC0tc3lzcm9vdD0vJHtUTVBESVJ9L3N5c3Jvb3RzL3FlbXV4ODYtNjQiLCBjb250YWlucyBvcHRpb24gaW5mb3JtYXRpb24uIAorVGhpcyB3aWxsIGxlYWQgdG8gd3JvbmcgY29tcGlsZXIgbmFtZSAicWVtdXg4Ni02NCIgcmF0aGVyIHRoYW4gIng4Nl82NC1wb2t5LWxpbnV4LWdjYyIgd2hlbiBweXRob24gZmluZGluZyB0aGUgY29tcGlsZXIgbmFtZS4KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IFB5dGhvbi0yLjcuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMS0xMS0yNCAxMzo1MToxMC41Mzk5OTg3MjIgLTA4MDAKKysrKyBQeXRob24tMi43LjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTEtMTEtMjQgMTU6NTQ6MzYuODcyMTM3NzY2IC0wODAwCitAQCAtMjgyLDcgKzI4Miw3IEBACisgICAgICAgICAjIHRoaXMgdGltZSwgdGhlcmUncyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgIyB0aGUgY29uZmlndXJhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiwgc28KKyAgICAgICAgICMgd2UgdXNlIHRoaXMgaGFjay4KKy0gICAgICAgIGNvbXBpbGVyID0gb3MucGF0aC5iYXNlbmFtZShzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikpCisrICAgICAgICBjb21waWxlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIE1hY09TWCdzIGxpbmtlciBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIC1SIGZsYWcgYXQgYWxsCisgICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGY1YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlXzIuNy45LmJiCkBAIC0wLDAgKzEsNjMgQEAKK3JlcXVpcmUgcHl0aG9uLmluYworCitFWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKK0RFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSIKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGVidWcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL25vaG9zdGxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL211bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2J1aWxkZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBcCisgICAgICAgICAgICIKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9LyR7UE59OiIKKworaW5oZXJpdCBuYXRpdmUKKworUlBST1ZJREVTICs9ICJweXRob24tZGlzdHV0aWxzLW5hdGl2ZSBweXRob24tY29tcHJlc3Npb24tbmF0aXZlIHB5dGhvbi10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbi1jb2RlY3MtbmF0aXZlIHB5dGhvbi1jb3JlLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IgorCitFWFRSQV9PRU1BS0UgPSAnXAorICBCVUlMRF9TWVM9IiIgXAorICBIT1NUX1NZUz0iIiBcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorJworCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJFBZVEhTQ1JJUFQKKwlkb25lCisKKwkjIEFkZCBhIHN5bWxpbmsgdG8gdGhlIG5hdGl2ZSBQeXRob24gc28gdGhhdCBzY3JpcHRzIGNhbiBqdXN0IGludm9rZQorCSMgIm5hdGl2ZXB5dGhvbiIgYW5kIGdldCB0aGUgcmlnaHQgb25lIHdpdGhvdXQgbmVlZGluZyBhYnNvbHV0ZSBwYXRocworCSMgKHRoZXNlIG9mdGVuIGVuZCB1cCB0b28gbG9uZyBmb3IgdGhlICMhIHBhcnNlciBpbiB0aGUga2VybmVsIGFzIHRoZQorCSMgYnVmZmVyIGlzIDEyOCBieXRlcyBsb25nKS4KKwlsbiAtcyBweXRob24tbmF0aXZlL3B5dGhvbiAke0R9JHtiaW5kaXJ9L25hdGl2ZXB5dGhvbgorCisJIyBXZSBkb24ndCB3YW50IG1vZHVsZXMgaW4gfi8ubG9jYWwgYmVpbmcgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRob3NlCisJIyBpbnN0YWxsZWQgaW4gdGhlIG5hdGl2ZSBzeXNyb290LCBzbyBkaXNhYmxlIHVzZXIgc2l0ZSBzdXBwb3J0LgorCXNlZCAtaSAtZSAncyxeXChFTkFCTEVfVVNFUl9TSVRFID0gXCkuKixcMUZhbHNlLCcgJHtEfSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGUucHkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5vc2VfMS4zLjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZThmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiCkBAIC0wLDAgKzEsMTYgQEAKK0RFU0NSSVBUSU9OID0gIm5vc2UgZXh0ZW5kcyB0aGUgdGVzdCBsb2FkaW5nIGFuZCBydW5uaW5nIGZlYXR1cmVzIG9mIHVuaXR0ZXN0LCBcCittYWtpbmcgaXQgZWFzaWVyIHRvIHdyaXRlLCBmaW5kIGFuZCBydW4gdGVzdHMuIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGdwbC50eHQ7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL24vbm9zZS9ub3NlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjYTU0NmQ4MWNhODMwOTA4MGZjODBjYjM4OWU3YTE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2MWUwOTA5YTc0M2VlZDM3YjEyMDdlMzhhOGU3YjRhMmZlMGE4MjE4NWUzNmYyYmUyNTJlZjFiM2Y5MDE3NTgiCisKK1MgPSAiJHtXT1JLRElSfS9ub3NlLSR7UFZ9IgorCitpbmhlcml0IHNldHVwdG9vbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2VmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YmY2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qIC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9jb25maWcuaCAqLworLyogI2RlZmluZSBTSVpFT0ZfU0hPUlQgMiAqLworLyogI2RlZmluZSBTSVpFT0ZfSU5UIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0xPTkcgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRkxPQVQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfRE9VQkxFIDggKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFIDEyCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisvKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOCAqLworI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9GTE9BVF9GVU5DUworI2RlZmluZSBIQVZFX0xPRzFQCisjZGVmaW5lIEhBVkVfRVhQTTEKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUMKKyNkZWZpbmUgSEFWRV9JTlZFUlNFX0hZUEVSQk9MSUNfRkxPQVQKKyNkZWZpbmUgSEFWRV9JU05BTgorI2RlZmluZSBIQVZFX0lTSU5GCisjZGVmaW5lIEhBVkVfUklOVAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKiBjYXQgLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L251bXB5Y29uZmlnLmggKi8KKy8qCisgKiAgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IG51bXB5L2NvcmUvc2V0dXAucHljLiBETyBOT1QgRURJVCAKKyAqICAgKi8KKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCAyIAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0IAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4IAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNCAKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4IAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4IAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzQyODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjYxMzVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX0RPVUJMRV9CRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JRUVFX1FVQURfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9uby1ob3N0LXBhdGhzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ1MDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitEb24ndCBzZWFyY2ggL3VzciBhbmQgc28gb24gZm9yIGxpYnJhcmllcyBieSBkZWZhdWx0IHRvIGF2b2lkIGhvc3QgY29udGFtaW5hdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChBcyB0aGUgY29kZSBzdGFuZHMsIHRoaXMgaXMgYSBoYWNrKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weSBiL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQoraW5kZXggYmFjOTBmYi4uYTYzZDc5NiAxMDA2NDQKKy0tLSBhL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQorKysrIGIvbnVtcHkvZGlzdHV0aWxzL3N5c3RlbV9pbmZvLnB5CitAQCAtMTkxLDQxICsxOTEsMTIgQEAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gW10KKyAgICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gW10KKyBlbHNlOgorLSAgICBkZWZhdWx0X2xpYl9kaXJzID0gbGlicGF0aHMoWycvdXNyL2xvY2FsL2xpYicsICcvb3B0L2xpYicsICcvdXNyL2xpYicsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvbGliJywgJy9zdy9saWInXSwgcGxhdGZvcm1fYml0cykKKy0gICAgZGVmYXVsdF9pbmNsdWRlX2RpcnMgPSBbJy91c3IvbG9jYWwvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2luY2x1ZGUnLCAnL3Vzci9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRoIG9mIHVtZnBhY2sgdW5kZXIgbWFjcG9ydHMKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9vcHQvbG9jYWwvaW5jbHVkZS91ZnNwYXJzZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2luY2x1ZGUnLCAnL3N3L2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlL3N1aXRlc3BhcnNlJ10KKy0gICAgZGVmYXVsdF9zcmNfZGlycyA9IFsnLicsICcvdXNyL2xvY2FsL3NyYycsICcvb3B0L3NyYycsICcvc3cvc3JjJ10KKy0KKy0gICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBsaWJwYXRocyhbJy91c3IvWDExUjYvbGliJywgJy91c3IvWDExL2xpYicsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorLSAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbJy91c3IvWDExUjYvaW5jbHVkZScsICcvdXNyL1gxMS9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2luY2x1ZGUnXQorLQorLSAgICBpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9saWIvWDExJyk6CistICAgICAgICBnbG9iYmVkX3gxMV9kaXIgPSBnbG9iKCcvdXNyL2xpYi8qL2xpYlgxMS5zbycpCistICAgICAgICBpZiBnbG9iYmVkX3gxMV9kaXI6CistICAgICAgICAgICAgeDExX3NvX2RpciA9IG9zLnBhdGguc3BsaXQoZ2xvYmJlZF94MTFfZGlyWzBdKVswXQorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzLmV4dGVuZChbeDExX3NvX2RpciwgJy91c3IvbGliL1gxMSddKQorLSAgICAgICAgICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycy5leHRlbmQoWycvdXNyL2xpYi9YMTEvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvaW5jbHVkZS9YMTEnXSkKKy0KKy0gICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3AKKy0gICAgdHJ5OgorLSAgICAgICAgcCA9IHNwLlBvcGVuKFsiZ2NjIiwgIi1wcmludC1tdWx0aWFyY2giXSwgc3Rkb3V0PXNwLlBJUEUsCistICAgICAgICAgICAgICAgIHN0ZGVycj1vcGVuKG9zLmRldm51bGwsICd3JykpCistICAgIGV4Y2VwdCBPU0Vycm9yOgorLSAgICAgICAgcGFzcyAjIGdjYyBpcyBub3QgaW5zdGFsbGVkCistICAgIGVsc2U6CistICAgICAgICB0cmlwbGV0ID0gc3RyKHAuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoKS5zdHJpcCgpKQorLSAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CistICAgICAgICAgICAgIyBnY2Mgc3VwcG9ydHMgdGhlICItcHJpbnQtbXVsdGlhcmNoIiBvcHRpb24KKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9saWJfZGlycyArPSBbb3MucGF0aC5qb2luKCIvdXNyL2xpYi8iLCB0cmlwbGV0KV0KKy0gICAgICAgICAgICBkZWZhdWx0X2xpYl9kaXJzICs9IFtvcy5wYXRoLmpvaW4oIi91c3IvbGliLyIsIHRyaXBsZXQpXQorKyAgICBkZWZhdWx0X2xpYl9kaXJzID0gbGlicGF0aHMoWycvZGVhZGlyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorKyAgICBkZWZhdWx0X2luY2x1ZGVfZGlycyA9IFsnL2RlYWRkaXIvaW5jbHVkZSddCisrICAgIGRlZmF1bHRfc3JjX2RpcnMgPSBbJy4nLCAnL2RlYWRkaXIvc3JjJ10KKysKKysgICAgZGVmYXVsdF94MTFfbGliX2RpcnMgPSBsaWJwYXRocyhbJy9kZWFkZGlyL2xpYiddLCBwbGF0Zm9ybV9iaXRzKQorKyAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMgPSBbJy9kZWFkZGlyL2luY2x1ZGUnXQorIAorIGlmIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnbGliJykgbm90IGluIGRlZmF1bHRfbGliX2RpcnM6CisgICAgIGRlZmF1bHRfbGliX2RpcnMuaW5zZXJ0KDAsIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnbGliJykpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL19udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NiZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWQzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0RPVUJMRV9ET1VCTEVfQkUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U2M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lOVEVMX0VYVEVOREVEXzE2X0JZVEVTX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlNDFlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9jb25maWcuaApAQCAtMCwwICsxLDEwOCBAQAorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOCisjZGVmaW5lIEhBVkVfQ09TCisjZGVmaW5lIEhBVkVfVEFOCisjZGVmaW5lIEhBVkVfU0lOSAorI2RlZmluZSBIQVZFX0NPU0gKKyNkZWZpbmUgSEFWRV9UQU5ICisjZGVmaW5lIEhBVkVfRkFCUworI2RlZmluZSBIQVZFX0ZMT09SCisjZGVmaW5lIEhBVkVfQ0VJTAorI2RlZmluZSBIQVZFX1NRUlQKKyNkZWZpbmUgSEFWRV9MT0cxMAorI2RlZmluZSBIQVZFX0xPRworI2RlZmluZSBIQVZFX0VYUAorI2RlZmluZSBIQVZFX0FTSU4KKyNkZWZpbmUgSEFWRV9BQ09TCisjZGVmaW5lIEhBVkVfQVRBTgorI2RlZmluZSBIQVZFX0ZNT0QKKyNkZWZpbmUgSEFWRV9NT0RGCisjZGVmaW5lIEhBVkVfRlJFWFAKKyNkZWZpbmUgSEFWRV9MREVYUAorI2RlZmluZSBIQVZFX1JJTlQKKyNkZWZpbmUgSEFWRV9UUlVOQworI2RlZmluZSBIQVZFX0VYUDIKKyNkZWZpbmUgSEFWRV9MT0cyCisjZGVmaW5lIEhBVkVfQVRBTjIKKyNkZWZpbmUgSEFWRV9QT1cKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIKKyNkZWZpbmUgSEFWRV9TSU5GCisjZGVmaW5lIEhBVkVfQ09TRgorI2RlZmluZSBIQVZFX1RBTkYKKyNkZWZpbmUgSEFWRV9TSU5IRgorI2RlZmluZSBIQVZFX0NPU0hGCisjZGVmaW5lIEhBVkVfVEFOSEYKKyNkZWZpbmUgSEFWRV9GQUJTRgorI2RlZmluZSBIQVZFX0ZMT09SRgorI2RlZmluZSBIQVZFX0NFSUxGCisjZGVmaW5lIEhBVkVfUklOVEYKKyNkZWZpbmUgSEFWRV9UUlVOQ0YKKyNkZWZpbmUgSEFWRV9TUVJURgorI2RlZmluZSBIQVZFX0xPRzEwRgorI2RlZmluZSBIQVZFX0xPR0YKKyNkZWZpbmUgSEFWRV9MT0cxUEYKKyNkZWZpbmUgSEFWRV9FWFBGCisjZGVmaW5lIEhBVkVfRVhQTTFGCisjZGVmaW5lIEhBVkVfQVNJTkYKKyNkZWZpbmUgSEFWRV9BQ09TRgorI2RlZmluZSBIQVZFX0FUQU5GCisjZGVmaW5lIEhBVkVfQVNJTkhGCisjZGVmaW5lIEhBVkVfQUNPU0hGCisjZGVmaW5lIEhBVkVfQVRBTkhGCisjZGVmaW5lIEhBVkVfSFlQT1RGCisjZGVmaW5lIEhBVkVfQVRBTjJGCisjZGVmaW5lIEhBVkVfUE9XRgorI2RlZmluZSBIQVZFX0ZNT0RGCisjZGVmaW5lIEhBVkVfTU9ERkYKKyNkZWZpbmUgSEFWRV9GUkVYUEYKKyNkZWZpbmUgSEFWRV9MREVYUEYKKyNkZWZpbmUgSEFWRV9FWFAyRgorI2RlZmluZSBIQVZFX0xPRzJGCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRgorI2RlZmluZSBIQVZFX1NJTkwKKyNkZWZpbmUgSEFWRV9DT1NMCisjZGVmaW5lIEhBVkVfVEFOTAorI2RlZmluZSBIQVZFX1NJTkhMCisjZGVmaW5lIEhBVkVfQ09TSEwKKyNkZWZpbmUgSEFWRV9UQU5ITAorI2RlZmluZSBIQVZFX0ZBQlNMCisjZGVmaW5lIEhBVkVfRkxPT1JMCisjZGVmaW5lIEhBVkVfQ0VJTEwKKyNkZWZpbmUgSEFWRV9SSU5UTAorI2RlZmluZSBIQVZFX1RSVU5DTAorI2RlZmluZSBIQVZFX1NRUlRMCisjZGVmaW5lIEhBVkVfTE9HMTBMCisjZGVmaW5lIEhBVkVfTE9HTAorI2RlZmluZSBIQVZFX0xPRzFQTAorI2RlZmluZSBIQVZFX0VYUEwKKyNkZWZpbmUgSEFWRV9FWFBNMUwKKyNkZWZpbmUgSEFWRV9BU0lOTAorI2RlZmluZSBIQVZFX0FDT1NMCisjZGVmaW5lIEhBVkVfQVRBTkwKKyNkZWZpbmUgSEFWRV9BU0lOSEwKKyNkZWZpbmUgSEFWRV9BQ09TSEwKKyNkZWZpbmUgSEFWRV9BVEFOSEwKKyNkZWZpbmUgSEFWRV9IWVBPVEwKKyNkZWZpbmUgSEFWRV9BVEFOMkwKKyNkZWZpbmUgSEFWRV9QT1dMCisjZGVmaW5lIEhBVkVfRk1PREwKKyNkZWZpbmUgSEFWRV9NT0RGTAorI2RlZmluZSBIQVZFX0ZSRVhQTAorI2RlZmluZSBIQVZFX0xERVhQTAorI2RlZmluZSBIQVZFX0VYUDJMCisjZGVmaW5lIEhBVkVfTE9HMkwKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9ICisjZGVmaW5lIEhBVkVfTERPVUJMRV9JTlRFTF9FWFRFTkRFRF8xMl9CWVRFU19MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc5MzhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfTlBZX05VTVBZQ09ORklHX0hfCisjZGVmaW5lIF9OUFlfTlVNUFlDT05GSUdfSF8KKworI2luY2x1ZGUgIl9udW1weWNvbmZpZy5oIgorCisvKiAKKyAqIE9uIE1hYyBPUyBYLCBiZWNhdXNlIHRoZXJlIGlzIG9ubHkgb25lIGNvbmZpZ3VyYXRpb24gc3RhZ2UgZm9yIGFsbCB0aGUgYXJjaHMKKyAqIGluIHVuaXZlcnNhbCBidWlsZHMsIGFueSBtYWNybyB3aGljaCBkZXBlbmRzIG9uIHRoZSBhcmNoIG5lZWRzIHRvIGJlCisgKiBoYXJjb2RlZAorICovCisjaWZkZWYgX19BUFBMRV9fCisJI3VuZGVmIE5QWV9TSVpFT0ZfTE9ORworCSN1bmRlZiBOUFlfU0laRU9GX1BZX0lOVFBUUl9UCisKKwkjaWZkZWYgX19MUDY0X18KKwkJI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgCQk4CisJCSNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCAJOAorCSNlbHNlCisJCSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIAkJNAorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgCTQKKwkjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHlfMS43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjZGZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiCkBAIC0wLDAgKzEsOTkgQEAKK1NVTU1BUlkgPSAiQSBzb3BoaXN0aWNhdGVkIE51bWVyaWMgUHJvY2Vzc2luZyBQYWNrYWdlIGZvciBQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUFNGIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PWY4NzgzMmQ4NTRhY2JhZGU2ZTlmNWM2MDFjOGIzMGIxIgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L251bXB5L251bXB5LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ob3N0LXBhdGhzLnBhdGNoIFwKKyAgICAgICAgICAgJHtDT05GSUdGSUxFU1VSSX0gIgorCitDT05GSUdGSUxFU1VSSSA/PSAiIgorCitDT05GSUdGSUxFU1VSSV9hYXJjaDY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9hcm1lYiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwc2VsID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3g4Ni02NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHMgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9wb3dlcnBjID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYzY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfbWlwczY0bjMyID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorCitTID0gIiR7V09SS0RJUn0vbnVtcHktJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKKyMgTWFrZSB0aGUgYnVpbGQgZmFpbCBhbmQgcmVwbGFjZSAqY29uZmlnLmggd2l0aCBwcm9wZXIgb25lCisjIFRoaXMgaXMgYSB1Z2x5LCB1Z2x5IGhhY2sgLSBLb2VuCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgdHJ1ZQorICAgIGNwICR7V09SS0RJUn0vKmNvbmZpZy5oICR7U30vYnVpbGQvJChscyAke1N9L2J1aWxkIHwgZ3JlcCBzcmMpL251bXB5L2NvcmUvaW5jbHVkZS9udW1weS8KK30KKworRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9udW1weS9jb3JlL2xpYi8qLmEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZmE1NGU0MGI2YTI0MzQxNmYwMjQ4MTIzYjZlYzMzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNGZhNzBiN2VkYmFiNjVlZTY0MzJlYjYzNzQzZjU0ODlmMTkxOWM2MTQ2MzJiMjBiMmZiNDVhYTdlNjgyYWM2IgorCisjIGluc3RhbGwgd2hhdCBpcyBuZWVkZWQgZm9yIG51bXB5LnRlc3QoKQorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXVuaXR0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaWZmbGliIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1wcHJpbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tc2hlbGwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5vc2UgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRvY3Rlc3QgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWRhdGV0aW1lIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kaXN0dXRpbHMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW1pc2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW1tYXAgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24tbnVtYmVycyBcCisgICAgICAgICAgICAgICAgICBweXRob24tcHlkb2MgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXBrZ3V0aWwgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLWVtYWlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1zdWJwcm9jZXNzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcGV4cGVjdF8zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4MGFlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQSBQdXJlIFB5dGhvbiBFeHBlY3QgbGlrZSBNb2R1bGUgZm9yIFB5dGhvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZXhwZWN0LnJlYWR0aGVkb2NzLm9yZy8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiSVNDIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzI1ZDlhMDc3MGJhNjlhOTk2NWFjYzg5NGU5ZjM2NDQiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvcGV4cGVjdC9wZXhwZWN0LSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZGU3MjU0MWQzZjEzNzRiNzk1NDcyZmVkODQxZGNlOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkZmVhNjE4ZDQzZTgzY2ZmZjIxNTA0ZjE4Zjk4MDE5YmE1MjBmMzMwZTQxNDJlNTE4NWVmN2M3MzUyN2RlNWJhIgorCitTID0gIiR7V09SS0RJUn0vcGV4cGVjdC0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHB5dGhvbi1jb3JlIFwKKyAgICBweXRob24taW8gXAorICAgIHB5dGhvbi10ZXJtaW5hbCBcCisgICAgcHl0aG9uLXJlc291cmNlIFwKKyAgICBweXRob24tZmNudGwgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljYWlyb18xLjEwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmZTI1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGJpbmRpbmdzIGZvciB0aGUgQ2Fpcm8gY2FudmFzIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcHljYWlybyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJweXRob24tZGV2ZWwiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgTVBMLTEuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyZTA3MWFiNzI5Nzg0MzFiMjk0YTBkNjk2MzI3NDIxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTC0yLjE7bWQ1PWZhZDliMzMzMmJlODk0YmFiOWJjNTAxNTcyODY0YjI5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTVBMLTEuMTttZDU9YmZlMWY3NWQ2MDY5MTJhNDExMWM5MDc0M2Q2YzczMjUiCisKKyMgY2Fpcm8gPj0gMS44LjgKK0RFUEVORFMgPSAiY2Fpcm8iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcmVsZWFzZXMvcHkyY2Fpcm8tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjIwMzM3MTMyYzRhYjA2YzExNDZhZDM4NGQ1NTM3MmM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQzMDQzOWYwNmMyZWMxYTM5ZTI3NDY0YzZjODI4YjZlZmFjZTNiMjJlZTE3YjJkZTA1ZGM0MDllNDI5YTc0MzEiCisKK1MgPSAiJHtXT1JLRElSfS9weTJjYWlyby0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb25maWd1cmUoKSB7CisJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSAuL3dhZiBjb25maWd1cmUgLS1wcmVmaXg9JHtEfSR7cHJlZml4fSAtLWxpYmRpcj0ke0R9JHtsaWJkaXJ9Cit9CisKK2RvX2NvbXBpbGUoKSB7CisJLi93YWYgYnVpbGQgJHtQQVJBTExFTF9NQUtFfQorfQorCitkb19pbnN0YWxsKCkgeworCS4vd2FmIGluc3RhbGwKKwlzZWQgXAorCQktZSAnczpAcHJlZml4QDoke3ByZWZpeH06JyBcCisJCS1lICdzOkBWRVJTSU9OQDoke1BWfTonIFwKKwkJLWUgJ3M6QGluY2x1ZGVkaXJAOiR7aW5jbHVkZWRpcn06JyBcCisJCXB5Y2Fpcm8ucGMuaW4gPiBweWNhaXJvLnBjCisJaW5zdGFsbCAtbSAwNjQ0IHB5Y2Fpcm8ucGMgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNDllZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybC9uby1zdGF0aWMtbGluay5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogcHljdXJsLTcuMTkuMy4xL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHljdXJsLTcuMTkuMy4xLm9yaWcvc2V0dXAucHkJMjAxNC0wNy0xNiAxMjo1NzoyNC4wNjUzNDY4ODcgKzAwMDAKKysrKyBweWN1cmwtNy4xOS4zLjEvc2V0dXAucHkJMjAxNC0wNy0xNiAxMjo1Nzo1My4wNTczNDc2NzggKzAwMDAKK0BAIC0xNDcsNyArMTQ3LDcgQEAKKyAgICAgICAgIG9wdGJ1ZiA9ICcnCisgICAgICAgICBzc2xoaW50YnVmID0gJycKKyAgICAgICAgIGVycnRleHQgPSAnJworLSAgICAgICAgZm9yIG9wdGlvbiBpbiBbIi0tbGlicyIsICItLXN0YXRpYy1saWJzIl06CisrICAgICAgICBmb3Igb3B0aW9uIGluIFsiLS1saWJzIl06CisgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oKENVUkxfQ09ORklHLCBvcHRpb24pLAorICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y3VybF83LjE5LjUuMS5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgbGliY3VybCIKK0hPTUVQQUdFID0gImh0dHA6Ly9weWN1cmwuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSsgfCBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUucnN0O2JlZ2lubGluZT0xNjY7ZW5kbGluZT0xODE7bWQ1PTU3ZTVhYjBjMGY5NjQ1MzNmYzU5ZDkzZGVjNTY5NWJiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTEdQTDttZDU9MzU3OWE5ZmQwMjIxZDQ5YTIzN2FhYTMzNDkyZjk4OGMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy1NSVQ7bWQ1PWU4MjAwOTU1Yzc3M2IyYTBmZDZjZWEzNmVhNWU4N2JlIgorCitERVBFTkRTID0gImN1cmwgcHl0aG9uIgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUgY3VybCIKK1NSQ05BTUUgPSAicHljdXJsIgorCitTUkNfVVJJID0gIlwKKyAgaHR0cDovLyR7U1JDTkFNRX0uc291cmNlZm9yZ2UubmV0L2Rvd25sb2FkLyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgIGZpbGU6Ly9uby1zdGF0aWMtbGluay5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY0NGNkNTQyNTZkN2E2NDNhYjdiMTZlM2Y0MDliMjZiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNmU5NzcwZjgwNDU5NzU3ZjczYmQ3MWFmODJmYmIyOWNkMzk4YjM4Mzg4Y2RmMWJlYWIzMWVhOTFhMzMxYmM2YyIKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCisjIG5lZWQgdG8gZXhwb3J0IHRoZXNlIHZhcmlhYmxlcyBmb3IgcHl0aG9uLWNvbmZpZyB0byB3b3JrCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCisjIEVuc3VyZSB0aGUgZG9jc3RyaW5ncyBhcmUgZ2VuZXJhdGVkIGFzIG1ha2UgY2xlYW4gd2lsbCByZW1vdmUgdGhlbQorZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBkb2NzdHJpbmdzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9zaGFyZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1OTExMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTEwMV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcHlnb2JqZWN0LTIuMjcuOTEvY29uZmlndXJlLmFjIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYworLS0tIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYwkyMDExLTAyLTIzIDIyOjE0OjM3LjAwMDAwMDAwMCArMDIwMAorKysrIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA1OjEzOjQ0LjAzNDk0OTk1NCArMDIwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyBBQ19ERUZJTkUoUFlHT0JKRUNUX01JQ1JPX1ZFUlNJT04sIHB5Z29iamVjdF9taWNyb192ZXJzaW9uLCBbcHlnb2JqZWN0IG1pY3JvIHZlcnNpb25dKQorIEFDX1NVQlNUKFBZR09CSkVDVF9NSUNST19WRVJTSU9OLCBweWdvYmplY3RfbWljcm9fdmVyc2lvbikKKworLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisgbTRfaWZkZWYoW0FNX1NJTEVOVF9SVUxFU10sIFtBTV9TSUxFTlRfUlVMRVMoeWVzKV0pCisgQU1fSU5JVF9BVVRPTUFLRShmb3JlaWduKQorIEFNX01BSU5UQUlORVJfTU9ERQorQEAgLTgyLDcgKzgyLDYgQEAKKyBtNF9pZmRlZihbTFRfT1VUUFVUXSwgW0xUX09VVFBVVF0pCisgQUNfSVNDX1BPU0lYCisgQUNfUFJPR19DQworLUFNX1BST0dfQ0NfU1REQworIEFNX1BST0dfQ0NfQ19PCisKKyAjIGNoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIHB5dGhvbiBuZWNpc2FyeSB0byBidWlsZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlnb2JqZWN0XzIuMjguMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkMzdiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJQeXRob24gR09iamVjdCBiaW5kaW5ncyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiTmV3ZXIgdmVyc2lvbnMgb2YgcHl0aG9uLXB5Z29iamVjdCBkZXBlbmQgb24gZ29iamVjdC1pbnRyb3NwZWN0aW9uIHdoaWNoIGRvZXNuJ3QgY3Jvc3MtY29tcGlsZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzciCitERVBFTkRTID0gInB5dGhvbiBweXRob24tcHlnb2JqZWN0LW5hdGl2ZSBsaWJmZmkgZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJweXRob24tbmF0aXZlIGxpYmZmaS1uYXRpdmUgZ2xpYi0yLjAtbmF0aXZlIgorUkRFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworTUFKX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L3B5Z29iamVjdC8ke01BSl9WRVJ9L3B5Z29iamVjdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKKyMgbGlidG9vbC1uYXRpdmUgZG9lc24ndCBoYXZlIGZpeGluc3RhbGwucGF0Y2ggYXBwbGllZCB3aGljaCBtZWFucworIyB0aGF0IGxpYnMgZ2V0IHJlbGlua2VkIGF0IGluc3RhbGxhdGlvbiB0aW1lLiBUaGlzIHRyaWdnZXJzIGEgCisjIHJlbGlua2luZyBhbG9uZyB0aGUgbGluZXMgb2Y6CisjIGdjYyAtTC90bXAvZm9vL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYiAtbHB5Z2xpYi0yLjAtcHl0aG9uIC1vIC5saWJzL19nbGliLnNvCisjIHdoZXJlIC90bXAvZm9vIGlzIERFU1RESVIgYW5kIHB5Z2xpYi0yLjAtcHl0aG9uIG1heSBiZSBpbnN0YWxsZWQvcmVpbnN0YWxsZWQKKyMgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgZ2NjIGNvbW1hbmQgcnVucy4KKyMgSWYgdGhpcyBoYXBwZW5zIGJldHdlZW4gdGhlIGhhbmRvZmYgYmV0d2VlbiBnY2MgYW5kIGxkLCB5b3UgY2FuIHNlZToKKyMgL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxweWdsaWItMi4wLXB5dGhvbgorIyBBZGRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgbGlrZSAgaW5zdGFsbC1weWdsaWJMVExJQlJBUklFUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworIyB3b3VsZCBiZSBpZGVhbCBidXQgYXV0b21ha2UgY2FuJ3QgY29wZSB3aXRoIHRoYXQgd2l0aG91dCBtYW51YWxseSAKKyMgZGVmaW5pbmcgdGhlIHdob2xlIGZ1bmN0aW9uLiBHaXZlIHVwIGFuZCBkaXNhYmxlIHBhcmFsbGVsIG1ha2UgaW4gbmF0aXZlIGJ1aWxkcy4KK1BBUkFMTEVMX01BS0VJTlNUX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhYTY0OTAwYjI3NGM0NjYxYTVjMzJlNTI5MjI5NzdmOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGE4OGMxNjlhNTZlZmNjYzUxNmNlYmQ5MjM3ZGEzZmU1MThhMzQzMDk1YTY2NDYwN2IzNjhmZTIxZGY5NWI2IgorUyA9ICIke1dPUktESVJ9L3B5Z29iamVjdC0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHV0aWxzLWJhc2UgcGtnY29uZmlnCisKKyMgbmVjZXNzYXJ5IHRvIGxldCB0aGUgY2FsbCBmb3IgcHl0aG9uLWNvbmZpZyBzdWNjZWVkCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK1BBQ0tBR0VTICs9ICIke1BOfS1saWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tdGV4dHV0aWxzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vcHl0aG9uKiIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0gJHtkYXRhZGlyfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MThmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FjaW5jbHVkZS5tNApAQCAtMCwwICsxLDkwIEBACisjIyB0aGlzIG9uZSBpcyBjb21tb25seSB1c2VkIHdpdGggQU1fUEFUSF9QWVRIT05ESVIgLi4uCitkbmwgQU1fQ0hFQ0tfUFlNT0QoTU9ETkFNRSBbLFNZTUJPTCBbLEFDVElPTi1JRi1GT1VORCBbLEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCitkbmwgQ2hlY2sgaWYgYSBtb2R1bGUgY29udGFpbmluZyBhIGdpdmVuIHN5bWJvbCBpcyB2aXNpYmxlIHRvIHB5dGhvbi4KK0FDX0RFRlVOKEFNX0NIRUNLX1BZTU9ELAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK3B5X21vZF92YXI9YGVjaG8gJDFbJ18nXSQyIHwgc2VkICd5JS4vKy0lX19wXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciBpZmVsc2UoWyQyXSxbXSwsWyQyIGluIF0pcHl0aG9uIG1vZHVsZSAkMSkKK0FDX0NBQ0hFX1ZBTChweV9jdl9tb2RfJHB5X21vZF92YXIsIFsKK2lmZWxzZShbJDJdLFtdLCBbcHJvZz0iCitpbXBvcnQgc3lzCit0cnk6CisgICAgICAgIGltcG9ydCAkMQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0OgorICAgICAgICBzeXMuZXhpdCgwKQorc3lzLmV4aXQoMCkiXSwgW3Byb2c9IgoraW1wb3J0ICQxCiskMS4kMiJdKQoraWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JkFDX0ZEX0NDIDI+JkFDX0ZEX0NDCisgIHRoZW4KKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9eWVzIgorICBlbHNlCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPW5vIgorICBmaQorXSkKK3B5X3ZhbD1gZXZhbCAiZWNobyBcYGVjaG8gJyRweV9jdl9tb2RfJyRweV9tb2RfdmFyXGAiYAoraWYgdGVzdCAieCRweV92YWwiICE9IHhubzsgdGhlbgorICBBQ19NU0dfUkVTVUxUKHllcykKKyAgaWZlbHNlKFskM10sIFtdLCwgWyQzCitdKWRubAorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorICBpZmVsc2UoWyQ0XSwgW10sLCBbJDQKK10pZG5sCitmaQorXSkKKworZG5sIGEgbWFjcm8gdG8gY2hlY2sgZm9yIGFiaWxpdHkgdG8gY3JlYXRlIHB5dGhvbiBleHRlbnNpb25zCitkbmwgIEFNX0NIRUNLX1BZVEhPTl9IRUFERVJTKFtBQ1RJT04tSUYtUE9TU0lCTEVdLCBbQUNUSU9OLUlGLU5PVC1QT1NTSUJMRV0pCitkbmwgZnVuY3Rpb24gYWxzbyBkZWZpbmVzIFBZVEhPTl9JTkNMVURFUworQUNfREVGVU4oW0FNX0NIRUNLX1BZVEhPTl9IRUFERVJTXSwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGhlYWRlcnMgcmVxdWlyZWQgdG8gY29tcGlsZSBweXRob24gZXh0ZW5zaW9ucykKK2RubCBkZWR1Y2UgUFlUSE9OX0lOQ0xVREVTCitBQ19BUkdfV0lUSChweXRob24taW5jbHVkZXMsCisJWyAgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz1ESVIgIHBhdGggdG8gUHl0aG9uIGluY2x1ZGVzXSwgcHlfZXhlY19wcmVmaXg9JHdpdGh2YWwpCitpZiB0ZXN0IHgkcHlfZXhlY19wcmVmaXggIT0geDsgdGhlbgorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitlbHNlCitweV9wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5wcmVmaXgiYAorcHlfZXhlY19wcmVmaXg9YCRQWVRIT04gLWMgImltcG9ydCBzeXM7IHByaW50IHN5cy5leGVjX3ByZWZpeCJgCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitpZiB0ZXN0ICIkcHlfcHJlZml4IiAhPSAiJHB5X2V4ZWNfcHJlZml4IjsgdGhlbgorICBQWVRIT05fSU5DTFVERVM9IiRQWVRIT05fSU5DTFVERVMgLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZmkKK2ZpCitBQ19TVUJTVChQWVRIT05fSU5DTFVERVMpCitkbmwgY2hlY2sgaWYgdGhlIGhlYWRlcnMgZXhpc3Q6CitzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iJENQUEZMQUdTICRQWVRIT05fSU5DTFVERVMiCitBQ19UUllfQ1BQKFsjaW5jbHVkZSA8UHl0aG9uLmg+XSxkbmwKK1tBQ19NU0dfUkVTVUxUKGZvdW5kKQorJDFdLGRubAorW0FDX01TR19SRVNVTFQobm90IGZvdW5kKQorJDJdKQorQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorXSkKKworZG5sCitkbmwgSkhfQUREX0NGTEFHKEZMQUcpCitkbmwgY2hlY2tzIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgdGhlIGdpdmVuIGZsYWcsIGFuZCBpZiBzbywgYWRkcworZG5sIGl0IHRvICRDRkxBR1MuICBJZiB0aGUgZmxhZyBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGxpc3QsIHRoZW4gdGhlCitkbmwgY2hlY2sgaXMgbm90IHBlcmZvcm1lZC4KK0FDX0RFRlVOKFtKSF9BRERfQ0ZMQUddLAorWworY2FzZSAiICRDRkxBR1MgIiBpbgorKkA8OkBcCVwgQDo+QCQxQDw6QFwJXCBAOj5AKikKKyAgOzsKKyopCisgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgJDEiCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBbJF1DQyB1bmRlcnN0YW5kcyAkMV0pCisgIEFDX1RSWV9DT01QSUxFKFtdLCBbXSwgW2poX2hhc19vcHRpb249eWVzXSwgW2poX2hhc19vcHRpb249bm9dKQorICBBQ19NU0dfUkVTVUxUKCRqaF9oYXNfb3B0aW9uKQorICBpZiB0ZXN0ICRqaF9oYXNfb3B0aW9uID0gbm87IHRoZW4KKyAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgZmkKKyAgOzsKK2VzYWNdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWRkLWd0ay10eXBlcy5kZWZzLWludG8tZ2RrLmMtZGVwZW5kZW5jZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwZjljZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYWRkIGd0ay10eXBlcy5kZWZzIGludG8gZ2RrLmMgZGVwZW5kZW5jZQorCitnZGsuYyBkZXBlbmRzIG9uIGd0ay10eXBlcy5kZWZzIGJ1dAorZ2RrL01ha2VmaWxlLmFtIG1pc3MgdGhpcy4gVGhpcyB3aWxsIGNhdXNlCitidWlsZCBlcnJvciBzb21ldGltZXMgd2hlbiBidWlsdAord2l0aCBtdWx0aS1qb2JiaW5nLCBzbyBhZGQgZ3RrLXR5cGVzLmRlZnMgaW50bworZ2RrLmMgZGVwZW5kZW5jZS4KKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGd0ay9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9NYWtlZmlsZS5hbSBiL2d0ay9NYWtlZmlsZS5hbQoraW5kZXggN2JiNWQwYy4uNGE4ODM1MSAxMDA2NDQKKy0tLSBhL2d0ay9NYWtlZmlsZS5hbQorKysrIGIvZ3RrL01ha2VmaWxlLmFtCitAQCAtMjE0LDcgKzIxNCw3IEBAIGd0a3VuaXhwcmludC5kZWZzOiAkKEdUS1VOSVhQUklOVF9ERUZTKSBNYWtlZmlsZQorIGd0a3VuaXhwcmludC10eXBlcy5kZWZzOiAkKEdUS1VOSVhQUklOVF9UWVBFU19ERUZTKSBNYWtlZmlsZQorIAkkKENSRUFURURFRlMpICRAICQoR1RLVU5JWFBSSU5UX1RZUEVTX0RFRlMpCisgCistZ2RrLmM6IGdkay10eXBlcy5kZWZzIGdkay5kZWZzICQoR0RLX09WRVJSSURFUykKKytnZGsuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMgZ2RrLmRlZnMgJChHREtfT1ZFUlJJREVTKQorIGd0ay5jOiBnZGstdHlwZXMuZGVmcyBndGstdHlwZXMuZGVmcyBndGsuZGVmcyBnZGstdHlwZXMuZGVmcyAkKEdUS19PVkVSUklERVMpCisgX2d0a19sYV9DRkxBR1MgPSAkKFBZQ0FJUk9fQ0ZMQUdTKSAkKEdUS19DRkxBR1MpCisgX2d0a19sYV9MREZMQUdTID0gJChjb21tb25fbGRmbGFncykgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IGluaXRfZ3RrCistLSAKKzEuNy40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzBlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcHlndGstMi4yNC4wL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjI0LjAub3JpZy9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCisrKysgcHlndGstMi4yNC4wL2d0ay9ndGt1bml4cHJpbnQub3ZlcnJpZGUKK0BAIC0xMDIsMTEgKzEwMiw2IEBAIF93cmFwX2d0a19wcmludF9qb2JfZ2V0X3N1cmZhY2UoUHlHT2JqZWMKKyAgICAgaWYgKHB5Z19lcnJvcl9jaGVjaygmZXJyb3IpKQorICAgICAgICAgcmV0dXJuIE5VTEw7CisgCistI2lmIFBZQ0FJUk9fVkVSU0lPTl9IRVggPj0gMHgxMDEwNjAwCistICAgIHJldHVybiBQeWNhaXJvU3VyZmFjZV9Gcm9tU3VyZmFjZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSwgTlVMTCk7CistI2Vsc2UKKy0gICAgcmV0dXJuIFB5Y2Fpcm9TdXJmYWNlX0Zyb21TdXJmYWNlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKHN1cmZhY2UpLCBOVUxMLCBOVUxMKTsKKy0jZW5kaWYKKyB9CisgJSUKKyBvdmVycmlkZSBndGtfcHJpbnRfam9iX3NlbmQga3dhcmdzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtcHlndGstMi4wLnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE1NjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBweWd0ay0yLjI0LjAvcHlndGstMi4wLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4yNC4wLm9yaWcvcHlndGstMi4wLnBjLmluCisrKysgcHlndGstMi4yNC4wL3B5Z3RrLTIuMC5wYy5pbgorQEAgLTEsNSArMSw2IEBACisgcHJlZml4PUBwcmVmaXhACisgZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIGRhdGFkaXI9QGRhdGFkaXJACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3MzA5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBweWd0ay0yLjE3LjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjE3LjAub3JpZy9NYWtlZmlsZS5hbQorKysrIHB5Z3RrLTIuMTcuMC9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBAIGlmIEJVSUxEX0dUSworICAgR1RLX1NVQkRJUiA9IGd0aworIGVuZGlmCisgCistU1VCRElSUyA9IC4gJChHVEtfU1VCRElSKSBleGFtcGxlcyB0ZXN0cyBkb2NzCisrU1VCRElSUyA9IC4gJChHVEtfU1VCRElSKSBleGFtcGxlcyB0ZXN0cworIAorIFBMQVRGT1JNX1ZFUlNJT04gPSAyLjAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMwMzhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcHlndGstMi4xMC40L2d0ay9fX2luaXRfXy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMTAuNC5vcmlnL2d0ay9fX2luaXRfXy5weQkyMDA3LTExLTI3IDE5OjI3OjA1LjAwMDAwMDAwMCAtMDMwMAorKysrIHB5Z3RrLTIuMTAuNC9ndGsvX19pbml0X18ucHkJMjAwNy0xMS0yNyAxOToyODoyMi4wMDAwMDAwMDAgLTAzMDAKK0BAIC03OCw3ICs3OCw4IEBACisgCisga2V5c3ltcyA9IExhenlNb2R1bGUoJ2tleXN5bXMnLCBsb2NhbHMoKSkKKyAKKy1faW5pdCgpCisraWYgbm90IGhhc2F0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdweXRob25fbGF1bmNoZXJfZW5hYmxlZCcpOgorKyAgICBfaW5pdCgpCisgCisgIyBDQVBJCisgX1B5R3RrX0FQSSA9IF9ndGsuX1B5R3RrX0FQSQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9weXRob24tcHlndGsyL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUxOGZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5MCBAQAorIyMgdGhpcyBvbmUgaXMgY29tbW9ubHkgdXNlZCB3aXRoIEFNX1BBVEhfUFlUSE9ORElSIC4uLgorZG5sIEFNX0NIRUNLX1BZTU9EKE1PRE5BTUUgWyxTWU1CT0wgWyxBQ1RJT04tSUYtRk9VTkQgWyxBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQorZG5sIENoZWNrIGlmIGEgbW9kdWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBzeW1ib2wgaXMgdmlzaWJsZSB0byBweXRob24uCitBQ19ERUZVTihBTV9DSEVDS19QWU1PRCwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitweV9tb2RfdmFyPWBlY2hvICQxWydfJ10kMiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgaWZlbHNlKFskMl0sW10sLFskMiBpbiBdKXB5dGhvbiBtb2R1bGUgJDEpCitBQ19DQUNIRV9WQUwocHlfY3ZfbW9kXyRweV9tb2RfdmFyLCBbCitpZmVsc2UoWyQyXSxbXSwgW3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgJDEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIl0sIFtwcm9nPSIKK2ltcG9ydCAkMQorJDEuJDIiXSkKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiZBQ19GRF9DQyAyPiZBQ19GRF9DQworICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKK10pCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGlmZWxzZShbJDNdLCBbXSwsIFskMworXSlkbmwKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaWZlbHNlKFskNF0sIFtdLCwgWyQ0CitdKWRubAorZmkKK10pCisKK2RubCBhIG1hY3JvIHRvIGNoZWNrIGZvciBhYmlsaXR5IHRvIGNyZWF0ZSBweXRob24gZXh0ZW5zaW9ucworZG5sICBBTV9DSEVDS19QWVRIT05fSEVBREVSUyhbQUNUSU9OLUlGLVBPU1NJQkxFXSwgW0FDVElPTi1JRi1OT1QtUE9TU0lCTEVdKQorZG5sIGZ1bmN0aW9uIGFsc28gZGVmaW5lcyBQWVRIT05fSU5DTFVERVMKK0FDX0RFRlVOKFtBTV9DSEVDS19QWVRIT05fSEVBREVSU10sCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorQUNfTVNHX0NIRUNLSU5HKGZvciBoZWFkZXJzIHJlcXVpcmVkIHRvIGNvbXBpbGUgcHl0aG9uIGV4dGVuc2lvbnMpCitkbmwgZGVkdWNlIFBZVEhPTl9JTkNMVURFUworQUNfQVJHX1dJVEgocHl0aG9uLWluY2x1ZGVzLAorCVsgIC0td2l0aC1weXRob24taW5jbHVkZXM9RElSICBwYXRoIHRvIFB5dGhvbiBpbmNsdWRlc10sIHB5X2V4ZWNfcHJlZml4PSR3aXRodmFsKQoraWYgdGVzdCB4JHB5X2V4ZWNfcHJlZml4ICE9IHg7IHRoZW4KK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZWxzZQorcHlfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAKK3B5X2V4ZWNfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMuZXhlY19wcmVmaXgiYAorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgoraWYgdGVzdCAiJHB5X3ByZWZpeCIgIT0gIiRweV9leGVjX3ByZWZpeCI7IHRoZW4KKyAgUFlUSE9OX0lOQ0xVREVTPSIkUFlUSE9OX0lOQ0xVREVTIC1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2ZpCitmaQorQUNfU1VCU1QoUFlUSE9OX0lOQ0xVREVTKQorZG5sIGNoZWNrIGlmIHRoZSBoZWFkZXJzIGV4aXN0Ogorc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUFlUSE9OX0lOQ0xVREVTIgorQUNfVFJZX0NQUChbI2luY2x1ZGUgPFB5dGhvbi5oPl0sZG5sCitbQUNfTVNHX1JFU1VMVChmb3VuZCkKKyQxXSxkbmwKK1tBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKyQyXSkKK0NQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK10pCisKK2RubAorZG5sIEpIX0FERF9DRkxBRyhGTEFHKQorZG5sIGNoZWNrcyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBnaXZlbiBmbGFnLCBhbmQgaWYgc28sIGFkZHMKK2RubCBpdCB0byAkQ0ZMQUdTLiAgSWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBsaXN0LCB0aGVuIHRoZQorZG5sIGNoZWNrIGlzIG5vdCBwZXJmb3JtZWQuCitBQ19ERUZVTihbSkhfQUREX0NGTEFHXSwKK1sKK2Nhc2UgIiAkQ0ZMQUdTICIgaW4KKypAPDpAXAlcIEA6PkAkMUA8OkBcCVwgQDo+QCopCisgIDs7CisqKQorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgWyRdQ0MgdW5kZXJzdGFuZHMgJDFdKQorICBBQ19UUllfQ09NUElMRShbXSwgW10sIFtqaF9oYXNfb3B0aW9uPXllc10sIFtqaF9oYXNfb3B0aW9uPW5vXSkKKyAgQUNfTVNHX1JFU1VMVCgkamhfaGFzX29wdGlvbikKKyAgaWYgdGVzdCAkamhfaGFzX29wdGlvbiA9IG5vOyB0aGVuCisgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIGZpCisgIDs7Citlc2FjXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDk1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gZGMwMjRlOTA3OWJiZmZiYjQ0NDM2YmEzZTcwYTc1OGViYWQ1NTIwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJTb25nLkxpIiA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCA1IEphbiAyMDEzIDE0OjU1OjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVwZGF0ZSBkZXBlbmRlbmNlcyBvZiBkZWZzLmMgaW4gTWFrZWZpbGUuYW0KKworSW4gZ3RrL01ha2VmaWxlLmFtLCBkZWZzLmMgc2hvdWxkIGRlcGVuZGVzIG9uIGdkay10eXBlcy5kZWZzIGFuZAorZ3RrLXR5cGVzLmRlZnMsIG90aGVyd2lzZSBpdCBmYWlscyBvY2Nhc2lvbmFsbHkgd2hlbiBwYXJhbGxlbCBjb21waWxlLgorVGhlIGVycm9yIG1lc3NhZ2U6CisiSU9FcnJvcjogW0Vycm5vIDJdIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdndGstdHlwZXMuZGVmcyciCisKK0FkZCB0aGVtIHRvIGRlcGVuZGVuY2VzIG9mIGRlZnMuYyB0byBmaXggdGhpcyBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI3MDYKKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGd0ay9NYWtlZmlsZS5hbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2d0ay9NYWtlZmlsZS5hbSBiL2d0ay9NYWtlZmlsZS5hbQoraW5kZXggN2JiNWQwYy4uOTE4MjZjYiAxMDA2NDQKKy0tLSBhL2d0ay9NYWtlZmlsZS5hbQorKysrIGIvZ3RrL01ha2VmaWxlLmFtCitAQCAtMjg5LDcgKzI4OSw3IEBAIGlmIEhBVkVfR0lPX1RZUEVTX0RFRlMKKyBleHRyYV9jb2RlZ2VuX2FyZ3MgKz0gLS1yZWdpc3RlciAkKFBZR09CSkVDVF9ERUZTRElSKS9naW8tdHlwZXMuZGVmcworIGVuZGlmCisgCistLmRlZnMuYzogCisrLmRlZnMuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMKKyAJKCQoUFlUSE9OKSAkKENPREVHRU5ESVIpL2NvZGVnZW4ucHkgXAorIAkgICAkKFBZR1RLX0NPREVHRU5fREVGSU5FUykgXAorIAkgICAgLUkgJChzcmNkaXIpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjMzNhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrXzIuMjQuMC5iYgpAQCAtMCwwICsxLDUzIEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEdUSysgVUkgdG9vbGtpdCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorIyBuZWVkcyBndGsrIDIuMTcueAorREVQRU5EUyA9ICJndGsrIGxpYmdsYWRlIHB5dGhvbi1weWNhaXJvIHB5dGhvbi1weWdvYmplY3QiCitSREVQRU5EU18ke1BOfSA9ICJweXRob24tc2hlbGwgcHl0aG9uLXB5Y2Fpcm8gcHl0aG9uLXB5Z29iamVjdCIKK1BST1ZJREVTID0gInB5dGhvbi1weWd0azIiCitTUkNOQU1FID0gInB5Z3RrIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL3B5Z3RrLzIuMjQvJHtTUkNOQU1FfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWd0a3VuaXhwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXB5Z3RrLTIuMC5wYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8vdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImExMDUxZDU3OTRmZDc2OTZkM2MxYWY2NDIyZDE3YTQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNkMWMxZWEyNjViZDYzZmY2NjllOTJhMmQzYzJhODhlYjI2YmNkOWU1MzYzZTBmODJjODk2ZTY0OWYyMDY5MTIiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3MgLS13aXRoLXB5dGhvbi1pbmNsdWRlcz0ke1NUQUdJTkdfSU5DRElSfS8uLi8iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0dXRpbHMtYmFzZQorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKwlzZWQgLWkgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZSBkZWZzZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QvMi4wL2RlZnNcIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHlndGtpbmNsdWRlZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19JTkNESVJ9L3B5Z3RrLTIuMFwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZT1kYXRhZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfVwiOmcgXAorCQktZSBzOidgJFBLR19DT05GSUcgLS12YXJpYWJsZSBjb2RlZ2VuZGlyIHB5Z29iamVjdC0yLjBgJzpcIiR7U1RBR0lOR19EQVRBRElSfS9weWdvYmplY3QvMi4wL2NvZGVnZW5cIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Zml4eHJlZiBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0L3hzbC9maXh4cmVmLnB5XCI6ZyBcCisJCSR7U30vY29uZmlndXJlLmFjCit9CisKKyMgZGlydHkgZml4ICMyOiBmaXggYnVpbGQgc3lzdGVtIHBhdGhzIGxlYWtpbmcgaW4KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAnMXN8XiMhLipweXRob258IyEvdXNyL2Jpbi9lbnYgcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9weWd0ay1kZW1vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1kZW1vIgorRklMRVNfJHtQTn0tZGVtbyA9ICIgJHtiaW5kaXJ9L3B5Z3RrLWRlbW8gJHtsaWJkaXJ9L3B5Z3RrICIKK1JERVBFTkRTXyR7UE59LWRlbW8gPSAicHl0aG9uLXB5Z3RrIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLWxhbmciCisKKyMgdG9kbzogcmV2YW1wIHBhY2thZ2luZywgcGFja2FnZSBkZW1vIHNlcGVyYXRseQorRklMRVNfJHtQTn0tZGV2ICs9ICIgJHtsaWJkaXJ9L3B5Z3RrLzIuMCAke2JpbmRpcn0vcHlndGstKiAke2RhdGFkaXJ9L3B5Z3RrLzIuMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWYxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC1uYXRpdmVfMC45LjkuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIHB5dGhvbi1weXJleF8ke1BWfS5iYgoraW5oZXJpdCBuYXRpdmUgcHl0aG9ubmF0aXZlCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCitQUiA9ICJyMyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThjMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgvcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHlyZXgtMC45LjguNC9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHlyZXgtMC45LjguNC5vcmlnL1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKKysrKyBQeXJleC0wLjkuOC40L1B5cmV4L0Rpc3R1dGlscy9leHRlbnNpb24ucHkKK0BAIC0xNSw3ICsxNSw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgd2FybmluZ3MgPSBOb25lCisgCisgY2xhc3MgRXh0ZW5zaW9uKF9FeHRlbnNpb24uRXh0ZW5zaW9uKToKKy0gICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyArIFwKKysgICAgX0V4dGVuc2lvbi5FeHRlbnNpb24uX19kb2NfXyBvciAiIiArIFwKKyAgICAgIiIicHlyZXhfaW5jbHVkZV9kaXJzIDogW3N0cmluZ10KKyAgICAgICAgIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBQeXJleCBoZWFkZXIgZmlsZXMgKC5weGQpIChpbgorICAgICAgICAgVW5peCBmb3JtIGZvciBwb3J0YWJpbGl0eSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXhfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRkZDJlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGFuZ3VhZ2UgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIgorREVTQ1JJUFRJT04gPSAiUHlyZXggaXMgYSBsYW5ndWFnZSBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHdyaXRpbmcgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzLiBcCitJdCdzIGRlc2lnbmVkIHRvIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4gdGhlIG5pY2UsIGhpZ2gtbGV2ZWwsIGVhc3ktdG8tdXNlIHdvcmxkIG9mIFB5dGhvbiBcCithbmQgdGhlIG1lc3N5LCBsb3ctbGV2ZWwgd29ybGQgb2YgQy4iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT03NzFkNDcyZjUzZjkzMzAzM2Y1N2VlZWU3ODA4ZTViZCIKK1NSQ05BTUUgPSAiUHlyZXgiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorICBmaWxlOi8vcHlyZXgtZml4LW9wdGltaXplZC1tb2RlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxNWRlZTY3ZDE1ZDQzOTM4NDFlMmQ2MGU4MzQxOTQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmODdkZjA2ODMxZDBiMzQxMmViNGJjOWQzZmMyZWU3YmZhZTFiOTEzZDdkYThjMjNhYjJiZjU2OTlmYjZiNTAiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0ke2Jhc2VfbGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvUHlyZXgvQ29tcGlsZXIvTGV4aWNvbi5waWNrbGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlODlhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zLW5hdGl2ZV8yLjMuNi5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcHl0aG9uLXNjb25zXyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZSBweXRob25uYXRpdmUKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9zY29ucyBTQ09OU19MSUJfRElSPScke1NUQUdJTkdfRElSX0hPU1R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9JworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29uc18yLjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGFkN2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSBDb25zdHJ1Y3Rpb24gdG9vbCAobWFrZS9hdXRvdG9vbHMgcmVwbGFjZW1lbnQpIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT0yM2JjMTUzMGM1NWU5ZjBkMWI3MDkwNTZiY2VhMjM3ZCIKK1NSQ05BTUUgPSAic2NvbnMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Njb25zL3Njb25zLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjljNmExYzNjNzE2Y2JlNWYxNjUxNWYxNjNjOTFkOTI4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4YWRhYTM1MWQ4ZjRlNDA2OGE1YmYxODk0YmRkN2Y4NWIzOTBjOGMzZjgwZDQzN2NmOGJiMjY2MDEyNDA0ZGYiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTJiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zZXR1cHRvb2xzXzE4LjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJEb3dubG9hZHMsIGJ1aWxkcywgaW5zdGFsbHMsIHVwZ3JhZGVzLCBhbmQgdW5pbnN0YWxscyBQeXRob24gcGFja2FnZXMiCitIT01FUEFHRSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiUHl0aG9uLTIuMCB8IFpQTC0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9Nzg7ZW5kbGluZT03ODttZDU9OGEzMTQyNzBkZDdhOGRiY2E3NDE3NzU0MTVmMTcxNmUiCisKK1NSQ05BTUUgPSAic2V0dXB0b29scyIKKworUFJPVklERVMgPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0RFUEVORFMgKz0gInB5dGhvbiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24tbmF0aXZlIgorCitpbmhlcml0IGRpc3R1dGlscworCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NldHVwdG9vbHMvc2V0dXB0b29scy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNTJiNGU0ODkzOWVmMzExZDcyMDRmOGZlOTQwNzY0ZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDk5NGE1OGRmMjdlYTVkYzUyMzc4MmE2MDEzNTdhMjE5OGI3NDkzZGNjOTlhMzBkNTE4MjdhMjM1ODViNWIxZCIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uLXN0cmluZ29sZCBcCisgIHB5dGhvbi1lbWFpbCBcCisgIHB5dGhvbi1zaGVsbCBcCisgIHB5dGhvbi1kaXN0dXRpbHMgXAorICBweXRob24tY29tcHJlc3Npb24gXAorIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUlJFUExBQ0VTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUlBST1ZJREVTXyR7UE59ID0gInB5dGhvbi1kaXN0cmlidXRlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjdmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFkZC1mb3ItcnBtLWlnbm9yZXNpemUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorcHl0aG9uLXNtYXJ0cG06IEFkZCBjaGVja2luZyBmb3IgInJwbS1pZ25vcmVzaXplIiBvcHRpb24KKworVGhlIGRvX3Jvb3RmcyB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHdoZW4gYnVpbGQgaG9zdCBoYXMgbW91bnRlZCBtYW55IE5GUworZGV2aWNlcy4gc3lzY2FsbCBsc3RhdCgpIHdhcyBiZWluZyBjYWxsZWQgb24gZXZlcnkgZmlsZXN5c3RlbSBtb3VudGVkIG9uIHRoZQorYnVpbGQgaG9zdCBkdXJpbmcgYnVpbGRpbmcuCitUaGUgcmVhc29uIGZvciB0aGUgbHN0YXQoKSBpcyB0aGF0IHJwbSBpcyB2ZXJpZnlpbmcgdGhhdCBlbm91Z2ggZnJlZSBkaXNrIHNwYWNlCitpcyBhdmFpbGFibGUgdG8gZG8gdGhlIGluc3RhbGwuIEhvd2V2ZXIsIHNpbmNlIHRoZSBpbnN0YWxsIGlzIGludG8gdGhlIHRhcmdldAorcm9vdGZzIGl0IHNob3VsZCBub3QgbWF0dGVyIGhvdyBtdWNoIGZyZWUgc3BhY2UgdGhlcmUgaXMgaW4gdGhlIGhvc3QgbW91bnRzLgorQWRkIGNoZWNraW5nIGZvciAicnBtLWlnbm9yZXNpemUiLCBieSBpdCwgc21hcnQgY2FuIG1ha2Ugd2hldGhlciBSUE0gc2tpcAorY2hlY2tpbmcgZm9yIGRpc2tzcGFjZSB3aGVuIGluc3RhbGwgYSBycG0gcGFja2FnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHdlbmxpbi5rYW5nIDx3ZW5saW4ua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBzbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IDVkYTllZTYuLmYwNDg4ZWMgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTI0MSw2ICsyNDEsMTAgQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX0lHTk9SRUFSQ0gKKyAKKysgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0taWdub3Jlc2l6ZSIsIEZhbHNlKToKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9ESVNLTk9ERVMKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9ESVNLU1BBQ0UKKysKKyAgICAgICAgIGlmIGZvcmNlIG9yIHJlaW5zdGFsbDoKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFUEtHCisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRU9MREZJTEVTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU1NTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hbHJlYWR5LWluc3RhbGxlZC1tZXNzYWdlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYTc0YTlhOWViOWQ3NTk2NGEwZTk3ODk1MGU4YjE5MWQ3YTE4ZDc2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogRnJpLCA1IEp1biAyMDE1IDE3OjA3OjE2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNtYXJ0OiBjaGFuZ2UgImlzIGFscmVhZHkgaW5zdGFsbGVkIiBtZXNzYWdlIGZyb20gd2FybmluZyB0bworIGluZm8KKworVGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgYSB3YXJuaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5ICAgICAgICAgICAgfCA0ICsrLS0KKyBzbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5IGIvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weQoraW5kZXggNmVmOTY4Mi4uODBkNDU2YiAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKKysrKyBiL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKK0BAIC0xNTIsNyArMTUyLDcgQEAgZGVmIG1haW4oY3RybCwgb3B0cyk6CisgICAgICAgICAgICAgZm9yIG9iaiBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIG9iai5wYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgIGlmIHBrZy5pbnN0YWxsZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyAoZm9yICVzKSBpcyBhbHJlYWR5IGluc3RhbGxlZCIpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyAoZm9yICVzKSBpcyBhbHJlYWR5IGluc3RhbGxlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGFyZykpCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCitAQCAtMTg0LDcgKzE4NCw3IEBAIGRlZiBtYWluKGN0cmwsIG9wdHMpOgorICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAgcGtnID0gbmFtZXNbbmFtZV1bMF0KKyAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisrICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICB0cmFucy5lbnF1ZXVlKHBrZywgSU5TVEFMTCkKKyAKK2RpZmYgLS1naXQgYS9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkgYi9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKK2luZGV4IDk4NjU1ODQuLjE5MDg2N2IgMTAwNjQ0CistLS0gYS9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKKysrKyBiL3NtYXJ0L2ludGVyZmFjZXMvdGV4dC9pbnRlcmFjdGl2ZS5weQorQEAgLTI3OCw3ICsyNzgsNyBAQCBjbGFzcyBJbnRlcnByZXRlcihDbWQpOgorICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICBwa2cgPSBuYW1lc1tuYW1lXVswXQorICAgICAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorKyAgICAgICAgICAgICAgICAgICAgaWZhY2UuaW5mbyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5lbnF1ZXVlKHBrZywgSU5TVEFMTCkKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2NzJiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK1NhZGx5LCBzbWFydCBpcyBub3QgZGV0ZXJtaW5pc3RpYyBzbyB0aGUgc2FtZSBidWlsZCBjYW4gZ28gZG93biBtdWx0aXBsZSBkaWZmZXJlbnQKK3BhdGh3YXlzLiBXZSdkIGV4cGVjdCB0byBzZWUgdGhlIHNhbWUgd2FybmluZ3MgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlIHBhdGh3YXkKK3Rha2VuLCBpdCBtYXkgb3IgbWF5IG5vdCB3YXJuLCBwYXJ0aWN1bGFybHkgd2l0aCBSZWNvbW1lbmRzIHNpbmNlIHRoZXkncmUgb3B0aW9uYWwuCisKK0ZvciBleGFtcGxlLCB3aGVyZSBhIFJlY29tbWVuZGVkIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGJ1dCBoYXMgQ29uZmxpY3RzLCB3ZSdkIGV4cGVjdAordG8gc2VlIGFuIHdhcm5pbmcgdGhhdCB3ZSBjb3VsZG4ndCBpbnN0YWxsIGl0LiBTb21lIGNvZGUgcGF0aHMgc2lsZW50bHkgaGlkZSB0aGlzCisoaXRzIGEgTE9DS0VEX0NPTkZMSUNUKS4gV2UgYWRkIHByaW50aW5nIG9mIHdhcm5pbmdzIGZvciB0aGlzIGNhc2UuCisKK0Fsc28sIGlmIHRoZXJlIGFyZSB0d28gY29tcGF0aWJsZSBmZWVkcyBhdmFpbGFibGUgKGUuZy4gaTU4NiBhbmQgY29yZTJfMzIpLCB0aGlzIAorY2hhbmdlcyB0aGUgY29kZSBwYXRoIGZyb20gZGlyZWN0IF9pbnN0YWxsKCkgdG8gX3BlbmRpbmcoKSBzaW5jZSB0aGVyZSBhcmUgbXVsdGlwbGUKK3Byb3ZpZGVycy4gVGhpcyBwYXRjaCBhZGRzIHdhcm5pbmcgaGFuZGxpbmcgdG8gX3BlbmRpbmcoKSBzbyB3ZSBkb24ndCBoaXQgaGFyZCAKK2ZhaWx1cmVzIHRoZXJlLiBUaGlzIGlzIGFzIHNlZW4gd2l0aCB0aGUgbXlzdGVyaW91cyBsaWJzcGVleGRzcCBmYWlsdXJlcyBmb3IgeDg2LWxzYgorb24gdGhlIGF1dG9idWlsZGVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQCisyMDE1LzcvMTYKKworSW5kZXg6IGdpdC9zbWFydC90cmFuc2FjdGlvbi5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CisrKysgZ2l0L3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitAQCAtNjUxLDEzICs2NTEsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgICAgICBpZiBub3QgcHJ2cGtnczoKKyAgICAgICAgICAgICAgICAgIyBObyBwYWNrYWdlcyBwcm92aWRlIGl0IGF0IGFsbC4gR2l2ZSB1cC4KKysKKysgICAgICAgICAgICAgICAgcmVhc29ucyA9IFtdCisrICAgICAgICAgICAgICAgIGZvciBwcnYgaW4gcmVxLnByb3ZpZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2cGtnIGluIHBydi5wYWNrYWdlczoKKysgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRyZXMgPSBsb2NrZWRwa2dzLmdldChwcnZwa2csIE5vbmUpCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9ja2VkcmVzOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZChsb2NrX3JlYXNvbihwcnZwa2csIGxvY2tlZHJlcykpCisgICAgICAgICAgICAgICAgIGlmIHJlcXJlcXVpcmVkOgorLSAgICAgICAgICAgICAgICAgICAgcmVhc29ucyA9IFtdCistICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2IGluIHJlcS5wcm92aWRlZGJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcnZwa2cgaW4gcHJ2LnBhY2thZ2VzOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRyZXMgPSBsb2NrZWRwa2dzLmdldChwcnZwa2csIE5vbmUpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2tlZHJlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbnMuYXBwZW5kKGxvY2tfcmVhc29uKHBydnBrZywgbG9ja2VkcmVzKSkKKyAgICAgICAgICAgICAgICAgICAgIGlmIHJlYXNvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiB1bmFibGUgdG8gaW5zdGFsbCBwcm92aWRlciBmb3IgJXM6XG4gICAgJXMiKSAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcSwgJ1xuICAgICcuam9pbihyZWFzb25zKSkKK0BAIC02NjUsNyArNjY2LDExIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlIHByb3ZpZGVzICVzIikgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEpCisgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBpZiByZWFzb25zOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogdW5hYmxlIHRvIGluc3RhbGwgcHJvdmlkZXIgZm9yICVzOlxuICAgICVzIikgJSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEsICdcbiAgICAnLmpvaW4ocmVhc29ucykpKQorKworICAgICAgICAgICAgICAgICAgICAgIyBJdCdzIG9ubHkgYSByZWNvbW1lbmQsIHNraXAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgaWYgbGVuKHBydnBrZ3MpID09IDE6CitAQCAtODQ2LDYgKzg1MiwxNCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgaXNpbnN0ID0gY2hhbmdlc2V0Lmluc3RhbGxlZAorICAgICAgICAgZ2V0d2VpZ2h0ID0gc2VsZi5fcG9saWN5LmdldFdlaWdodAorIAorKyAgICAgICAgYXR0ZW1wdCA9IHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpCisrCisrICAgICAgICBkZWYgaGFuZGxlX2ZhaWx1cmUobXNnKToKKysgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKG1zZykKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIG1zZworKworICAgICAgICAgdXBkb3duID0gW10KKyAgICAgICAgIHdoaWxlIHBlbmRpbmc6CisgICAgICAgICAgICAgaXRlbSA9IHBlbmRpbmcucG9wKDApCitAQCAtODcwLDggKzg4NCw5IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICAgICAgICAgIGlmIG5vdCBwcnZwa2dzOgorICAgICAgICAgICAgICAgICAgICAgIyBObyBwYWNrYWdlcyBwcm92aWRlIGl0IGF0IGFsbC4gR2l2ZSB1cC4KKy0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzICVzIikgJSAocGtnLCByZXEpCisrICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCBpbnN0YWxsICVzOiBubyBwYWNrYWdlICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXMgJXMiKSAlIChwa2csIHJlcSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBpZiBsZW4ocHJ2cGtncykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgIyBNb3JlIHRoYW4gb25lIHBhY2thZ2UgcHJvdmlkZSBpdC4gV2UgdXNlIF9wZW5kaW5nIGhlcmUsCitAQCAtODk0LDkgKzkwOSwxMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwb3JkZXIsIGNzLCBsaykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBvcmRlciArPSAwLjAwMDAwMQorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGFsdGVybmF0aXZlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGluZyAlcyBmYWlsZWQgdG8gaW5zdGFsbDpcbiVzIilcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHJlcSwgICJcbiIuam9pbihmYWlsdXJlcykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHJlcSwgICJcbiIuam9pbihmYWlsdXJlcykpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuc29ydCgpCisgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0U3RhdGUoYWx0ZXJuYXRpdmVzWzBdWzFdKQorICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGFsdGVybmF0aXZlcykgPT0gMToKK0BAIC05NTQsMTggKzk3MCwyMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQgYW5kIGlzaW5zdChyZXFwa2cpOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgJXMgaXMgbG9ja2VkIikgJSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICBmb3IgcmVxcGtnIGluIHJlcXBrZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBjaGVjayBhZ2Fpbiwgc2luY2Ugb3RoZXIgYWN0aW9ucyBtYXkgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlZCB0aGVpciBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHJlcXBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxvY2tlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICVzIGlzIGxvY2tlZCIpICUgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShyZXFwa2csIGNoYW5nZXNldCwgbG9ja2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLCBkZXB0aCkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCitAQCAtOTc4LDEyICs5OTYsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQgYW5kIGlzaW5zdChyZXFwa2cpOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjcy5pbnN0YWxsZWQocmVxcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbGs6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiJXMgaXMgbG9ja2VkIikgJSByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHJlcXBrZywgY3MsIGxrLCBOb25lLCBkZXB0aCkKKyAgICAgICAgICAgICAgICAgZXhjZXB0IEZhaWxlZCwgZToKKyAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh1bmljb2RlKGUpKQorQEAgLTk5MSw5ICsxMDExLDEwIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKChnZXR3ZWlnaHQoY3MpLCBjcywgbGspKQorIAorICAgICAgICAgICAgICAgICBpZiBub3QgYWx0ZXJuYXRpdmVzOgorLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgcHJvdmlkaW5nICIKKysgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyBwcm92aWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBmYWlsZWQgdG8gaW5zdGFsbDpcbiVzIikgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHBydiwgICJcbiIuam9pbihmYWlsdXJlcykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgcHJ2LCAgIlxuIi5qb2luKGZhaWx1cmVzKSkpCisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMuc29ydCgpCisgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXRTdGF0ZShhbHRlcm5hdGl2ZXNbMF1bMV0pCitAQCAtMTI0Niw2ICsxMjY3LDcgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldFJlcXVlc3RlZChwa2csIFRydWUpCisgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmFpbGVkLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6ICVzIikgJSAocGtnLCBzdHIoZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2cgaW4gY2hhbmdlc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5OGUwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC5wYXRjaApAQCAtMCwwICsxLDE3NyBAQAorRnJvbSBiMTA1ZTdmZTgxMmRhM2NjYWY3MTU1YzBmZTE0Yzg3MjhiMGQzOWE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMCBKYW4gMjAxNCAxNDozMDo1MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBBZGQgbWVjaGFuaXNtIHRvIGF0dGVtcHQgaW5zdGFsbCB3aXRob3V0IGZhaWxpbmcKKworSW4gT3BlbkVtYmVkZGVkLCBmb3IgY29tcGxlbWVudGFyeSBhbmQgJ2F0dGVtcHRvbmx5JyBwYWNrYWdlIHByb2Nlc3NpbmcsCit3ZSBuZWVkIGEgd2F5IHRvIGluc3RydWN0IHNtYXJ0IHRvIHRyeSB0byBpbnN0YWxsLCBidXQgaWdub3JlIGFueQorZmFpbHVyZXMgKHVzdWFsbHkgY29uZmxpY3RzKS4KKworVGhpcyBvcHRpb24gb25seSB3b3JrcyBmb3IgdGhlIGluc3RhbGwgb3BlcmF0aW9uLgorCitJZiBhIGNvbXBsZW1lbnRhcnkgaW5zdGFsbCBmYWlscywgYW4gYWN0dWFsIGVycm9yIG9jY3VycmVkLCBvbmUgdGhhdAord2UgY2FuJ3QgaWdub3JlIHdpdGhvdXQgbG9zaW5nIHRoZSBlbnRpcmUgYXR0ZW1wdGVkIHRyYW5zYWN0aW9uLiAgS2VlcAordGhpcyBhcyBhbiBlcnJvciBzbyB0aGF0IHdlIGNhbiBjYXRjaCB0aGVzZSBjYXNlcyBpbiB0aGUgZnV0cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGJhY2tlbmRzL3JwbS9wbS5weSB8ICAgMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0cmFuc2FjdGlvbi5weSAgICAgfCAgIDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3MSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQoraW5kZXggOWJiZDk1Mi4uYmE2NDA1YSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMjQxLDE1ICsyNDEsNDggQEAgY2xhc3MgUlBNUGFja2FnZU1hbmFnZXIoUGFja2FnZU1hbmFnZXIpOgorICAgICAgICAgY2IgPSBSUE1DYWxsYmFjayhwcm9nLCB1cGdyYWRlZG5hbWVzKQorICAgICAgICAgY2IuZ3JhYk91dHB1dChUcnVlKQorICAgICAgICAgcHJvYnMgPSBOb25lCisrICAgICAgICByZXRyeSA9IDAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBwcm9icyA9IHRzLnJ1bihjYiwgTm9uZSkKKyAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgZGVsIGdldFRTLnRzCisgICAgICAgICAgICAgY2IuZ3JhYk91dHB1dChGYWxzZSkKKysgICAgICAgICAgICBpZiBwcm9icyBhbmQgc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSk6CisrICAgICAgICAgICAgICAgIGRlZiByZW1vdmVfY29uZmxpY3QocGtnTkVWUik6CisrICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGNoYW5nZXNldC5rZXlzKCk6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnTkVWUiA9PSBzdHIoa2V5KToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtrZXldCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBwa2dwYXRoc1trZXldCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoIlJlbW92aW5nICVzIGR1ZSB0byBmaWxlICVzIGNvbmZsaWN0aW5nIHdpdGggJXMiICUgKHBrZ05FVlIsIGZuYW1lLCBhbHRORVZSKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysKKysgICAgICAgICAgICAgICAgcmV0cnkgPSAxCisrICAgICAgICAgICAgICAgIGZvciBwcm9iIGluIHByb2JzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvYlsxXVswXSA9PSBycG0uUlBNUFJPQl9ORVdfRklMRV9DT05GTElDVDoKKysgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBwcm9iWzBdLnNwbGl0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IG1zZ1sxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBtc2dbN10KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gbXNnWzldCisrICAgICAgICAgICAgICAgICAgICAgICAgcGtnTkVWUiA9IHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMF0gKyAnQCcgKyBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzFdCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpCisrICAgICAgICAgICAgICAgICAgICBlbGlmIHByb2JbMV1bMF0gPT0gcnBtLlJQTVBST0JfRklMRV9DT05GTElDVDoKKysgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBwcm9iWzBdLnNwbGl0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IG1zZ1sxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBtc2dbNV0KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gbXNnWzExXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25mbGljdChwa2dORVZSKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICByZXRyeSA9IDAKKysKKyAgICAgICAgICAgICBwcm9nLnNldERvbmUoKQorLSAgICAgICAgICAgIGlmIHByb2JzOgorKyAgICAgICAgICAgIGlmIHByb2JzIGFuZCAobm90IHJldHJ5KToKKyAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsICJcbiIuam9pbihbeFswXSBmb3IgeCBpbiBwcm9ic10pCisgICAgICAgICAgICAgcHJvZy5zdG9wKCkKKysgICAgICAgICAgICBpZiByZXRyeSBhbmQgbGVuKGNoYW5nZXNldCk6CisrICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGNoYW5nZXNldCwgcGtncGF0aHMpCisgCisgY2xhc3MgUlBNQ2FsbGJhY2s6CisgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9nLCB1cGdyYWRlZG5hbWVzKToKK2RpZmYgLS1naXQgYS9zbWFydC90cmFuc2FjdGlvbi5weSBiL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitpbmRleCA0YjkwY2I3Li4zZTA0M2U5IDEwMDY0NAorLS0tIGEvc21hcnQvdHJhbnNhY3Rpb24ucHkKKysrKyBiL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CitAQCAtNTU1LDYgKzU1NSw4IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICBjaGFuZ2VzZXQuc2V0KHBrZywgSU5TVEFMTCkKKyAgICAgICAgIGlzaW5zdCA9IGNoYW5nZXNldC5pbnN0YWxsZWQKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgY29uZmxpY3RlZCBieSB0aGlzIG9uZS4KKyAgICAgICAgIGZvciBjbmYgaW4gcGtnLmNvbmZsaWN0czoKKyAgICAgICAgICAgICBmb3IgcHJ2IGluIGNuZi5wcm92aWRlZGJ5OgorQEAgLTU2NCwxMSArNTY2LDE2IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KHBydnBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW3BydnBrZ10gPSAoTE9DS0VEX0NPTkZMSUNUX0JZLCBwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0gICAgICAgICAgICAgICAgICAgIGlmIHBydnBrZyBpbiBsb2NrZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBjb25mbGljdGVkIHBhY2thZ2UgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbG9ja2VkIikgJSAocGtnLCBwcnZwa2cpCistICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocHJ2cGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCistICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIHBydnBrZykpCisrICAgICAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQgY29uZmxpY3RzIHdpdGggcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIpICUgKHBrZywgcHJ2cGtnKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcnZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGNvbmZsaWN0ZWQgcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbG9ja2VkIikgJSAocGtnLCBwcnZwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHBydnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgcHJ2cGtnKSkKKyAKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIGNvbmZsaWN0aW5nIHdpdGggdGhpcyBvbmUuCisgICAgICAgICBmb3IgcHJ2IGluIHBrZy5wcm92aWRlczoKK0BAIC01NzksMTIgKzU4NiwxOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChjbmZwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtjbmZwa2ddID0gKExPQ0tFRF9DT05GTElDVCwgcGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgICAgICBpZiBjbmZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgY29uZmxpY3RlZCBieSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbG9ja2VkIHBhY2thZ2UgJXMiKSBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKy0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShjbmZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKy0gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgY25mcGtnKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBwYWNrYWdlICVzIikgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBrZywgY25mcGtnKQorKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbmZwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgY29uZmxpY3RlZCBieSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxvY2tlZCBwYWNrYWdlICVzIikgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUoY25mcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCisrICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBjbmZwa2cpKQorIAorICAgICAgICAgIyBSZW1vdmUgcGFja2FnZXMgd2l0aCB0aGUgc2FtZSBuYW1lIHRoYXQgY2FuJ3QKKyAgICAgICAgICMgY29leGlzdCB3aXRoIHRoaXMgb25lLgorQEAgLTU5NCwxMCArNjA3LDE1IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QobmFtZXBrZyk6CisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbbmFtZXBrZ10gPSAoTE9DS0VEX05PX0NPRVhJU1QsIHBrZykKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgIGlmIG5hbWVwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0IGNhbid0IGNvZXhpc3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICVzIikgJSAocGtnLCBuYW1lcGtnKQorLSAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUobmFtZXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZXBrZyBpbiBsb2NrZWQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCBjYW4ndCBjb2V4aXN0ICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggJXMiKSAlIChwa2csIG5hbWVwa2cpCisrICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUobmFtZXBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorIAorICAgICAgICAgIyBJbnN0YWxsIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMgb25lLgorICAgICAgICAgZm9yIHJlcSBpbiBwa2cucmVxdWlyZXMgKyBwa2cucmVjb21tZW5kczoKK0BAIC0xMTc2LDYgKzExOTQsOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgc2VsZi5fcG9saWN5LnJ1blN0YXJ0aW5nKCkKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGNoYW5nZXNldCA9IHNlbGYuX2NoYW5nZXNldC5jb3B5KCkKKyAgICAgICAgICAgICBpc2luc3QgPSBjaGFuZ2VzZXQuaW5zdGFsbGVkCitAQCAtMTE5MCw3ICsxMjEwLDExIEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbcGtnXSA9IChMT0NLRURfS0VFUCwgTm9uZSkKKyAgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBJTlNUQUxMOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChwa2cpIGFuZCBwa2cgaW4gbG9ja2VkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGxvY2tlZCIpICUgcGtnCisgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0KHBrZywgSU5TVEFMTCkKKyAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtwa2ddID0gKExPQ0tFRF9JTlNUQUxMLCBOb25lKQorICAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJFTU9WRToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjFiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK01ha2UgQ0hBTk5FTFNESVIgaW4gc21hcnQgZW1wdHksIHNpbmNlIHRoaXMgY2F1c2VzIGhvc3QgY29udGFtaW5hdGlvbiBpc3N1ZXMKK29uIHNvbWUgUlBNLWJhc2VkIGhvc3RzIG9uIHdoaWNoIHNtYXJ0IGlzIGFscmVhZHkgaW5zdGFsbGVkLgorCitbWU9DVE8gIzM4ODFdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2RpZmYgLS1naXQgYS9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5IGIvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weQoraW5kZXggM2JhOTVmZi4uNjQ2ZDY5NiAxMDA2NDQKKy0tLSBhL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKKysrKyBiL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKK0BAIC0yMyw3ICsyMywxMSBAQCBmcm9tIHNtYXJ0LmNoYW5uZWwgaW1wb3J0ICoKKyBmcm9tIHNtYXJ0IGltcG9ydCAqCisgaW1wb3J0IG9zCisgCistQ0hBTk5FTFNESVIgPSAiL2V0Yy9zbWFydC9jaGFubmVscy8iCisrIyBGb3Igbm93LCB3ZSBsZWF2ZSB0aGUgZGVmaW5pdGlvbiBvZiBDSEFOTkVMU0RJUiBlbXB0eS4gVGhpcyBwcmV2ZW50cyBzbWFydAorKyMgZnJvbSBlcnJvbmVvdXNseSBjb25zaWRlciB0aGUgIGJ1aWxkIGhvc3QncyBjaGFubmVscyB3aGlsZSBzZXR0aW5nIHVwIGl0cworKyMgY2hhbm5lbHMgW1lPQ1RPICMzODgxXS4gSWYgdGhpcyBmZWF0dXJlIHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlLCBDSEFOTkVMU0RJUgorKyMgc2hvdWxkIGJlIHNldCB0byBhIHByb3BlciB2YWx1ZS4KKytDSEFOTkVMU0RJUiA9ICIiCisgCisgZGVmIHN5bmNDaGFubmVscyhjaGFubmVsc2RpciwgZm9yY2U9Tm9uZSk6CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIyNjViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaApAQCAtMCwwICsxLDkxIEBACitJbXByb3ZlIGVycm9yIHJlcG9ydGluZyBpbiBzbWFydAorCitBZGQgY29kZSB0byBjaGVjayBwcm9wZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgdmFyaW91cworc21hcnQgY29tbWFuZHMuIEV4aXQgd2l0aCBlcnJvciBpZiBlcnJvbmVvdXMvYWRkaXRpb25hbCBhcmd1bWVudHMKK2FyZSBnaXZlbiBpbiB0aGUgY29tbWFuZCBsaW5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQm9nZGFuIE1hcmluZXNjdSA8Ym9nZGFuLmEubWFyaW5lc2N1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkgYi9zbWFydC91dGlsL29wdHBhcnNlLnB5CitpbmRleCA2ZmZmMWJjLi5mNDQ1YTNiIDEwMDY0NAorLS0tIGEvc21hcnQvdXRpbC9vcHRwYXJzZS5weQorKysrIGIvc21hcnQvdXRpbC9vcHRwYXJzZS5weQorQEAgLTcwLDYgKzcwLDggQEAgaW1wb3J0IHN5cywgb3MKKyBpbXBvcnQgdHlwZXMKKyBpbXBvcnQgdGV4dHdyYXAKKyBmcm9tIGdldHRleHQgaW1wb3J0IGdldHRleHQgYXMgXworK2Zyb20gc21hcnQgaW1wb3J0IEVycm9yCisraW1wb3J0IHJlCisgCisgZGVmIF9yZXByKHNlbGYpOgorICAgICByZXR1cm4gIjwlcyBhdCAweCV4OiAlcz4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBpZChzZWxmKSwgc2VsZikKK0BAIC03MTAsNiArNzEyLDEyIEBAIGNsYXNzIE9wdGlvbjoKKyAgICAgICAgICAgICBzZWxmLmFjdGlvbiwgc2VsZi5kZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcikKKyAKKyAgICAgZGVmIHRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpOgorKyAgICAgICAgIyBLZWVwIGFsbCB0aGUgb3B0aW9ucyBpbiB0aGUgY29tbWFuZCBsaW5lIGluIHRoZSAnX2dpdmVuX29wdHMnIGFycmF5CisrICAgICAgICAjIFRoaXMgd2lsbCBiZSB1c2VkIGxhdGVyIHRvIHZhbGlkYXRlIHRoZSBjb21tYW5kIGxpbmUKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHBhcnNlci52YWx1ZXMsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgdXNlcl9vcHQgPSByZS5zdWIociJeXC0qIiwgIiIsIG9wdCkucmVwbGFjZSgiLSIsICJfIikKKysgICAgICAgIGdpdmVuX29wdHMuYXBwZW5kKHVzZXJfb3B0KQorKyAgICAgICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCAiX2dpdmVuX29wdHMiLCBnaXZlbl9vcHRzKQorICAgICAgICAgaWYgYWN0aW9uID09ICJzdG9yZSI6CisgICAgICAgICAgICAgc2V0YXR0cih2YWx1ZXMsIGRlc3QsIHZhbHVlKQorICAgICAgICAgZWxpZiBhY3Rpb24gPT0gInN0b3JlX2NvbnN0IjoKK0BAIC04MjEsNiArODI5LDU0IEBAIGNsYXNzIFZhbHVlczoKKyAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGF0dHIsIHZhbHVlKQorICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0cikKKyAKKysgICAgIyBDaGVjayBpZiB0aGUgZ2l2ZW4gb3B0aW9uIGhhcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBhcmd1bWVudHMKKysgICAgIyBSYWlzZSBhbiBlcnJvciBpZiB0aGUgb3B0aW9uIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMKKysgICAgIyBBIG5lZ2F0aXZlIG51bWJlciBmb3IgJ25hcmdzJyBtZWFucyAiYXQgbGVhc3QgfG5hcmdzfCBhcmd1bWVudHMgYXJlIG5lZWRlZCIKKysgICAgZGVmIGNoZWNrX2FyZ3Nfb2Zfb3B0aW9uKHNlbGYsIG9wdCwgbmFyZ3MsIGVycj1Ob25lKToKKysgICAgICAgIGdpdmVuX29wdHMgPSBnZXRhdHRyKHNlbGYsICJfZ2l2ZW5fb3B0cyIsIFtdKQorKyAgICAgICAgaWYgbm90IG9wdCBpbiBnaXZlbl9vcHRzOgorKyAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgdmFsdWVzID0gZ2V0YXR0cihzZWxmLCBvcHQsIFtdKQorKyAgICAgICAgaWYgdHlwZSh2YWx1ZXMpICE9IHR5cGUoW10pOgorKyAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgbmFyZ3MgPCAwOgorKyAgICAgICAgICAgIG5hcmdzID0gLW5hcmdzCisrICAgICAgICAgICAgaWYgbGVuKHZhbHVlcykgPj0gbmFyZ3M6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGlmIG5vdCBlcnI6CisrICAgICAgICAgICAgICAgIGlmIG5hcmdzID09IDE6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSAlIG9wdAorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgYXQgbGVhc3QgJWQgYXJndW1lbnRzIikgJSAob3B0LCBuYXJncykKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrICAgICAgICBlbGlmIG5hcmdzID09IDA6CisrICAgICAgICAgICAgaWYgbGVuKCB2YWx1ZXMgKSA9PSAwOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICByYWlzZSBFcnJvciwgZXJyCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID09IG5hcmdzOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBpZiBub3QgZXJyOgorKyAgICAgICAgICAgICAgICBpZiBuYXJncyA9PSAxOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgb25lIGFyZ3VtZW50IikgJSBvcHQKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzICVkIGFyZ3VtZW50cyIpICUgKG9wdCwgbmFyZ3MpCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKworKyAgICAjIENoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcHRpb25zIGluICdhY3RsaXN0JyB3YXMgZ2l2ZW4gYXMgYW4gYXJndW1lbnQKKysgICAgIyB0byB0aGUgY29tbWFuZCAnY21kbmFtZScKKysgICAgZGVmIGVuc3VyZV9hY3Rpb24oc2VsZiwgY21kbmFtZSwgYWN0bGlzdCk6CisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihzZWxmLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0bGlzdDoKKysgICAgICAgICAgICBpZiBhY3Rpb24gaW4gZ2l2ZW5fb3B0czoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICByYWlzZSBFcnJvciwgXygiTm8gYWN0aW9uIHNwZWNpZmllZCBmb3IgY29tbWFuZCAnJXMnIikgJSBjbWRuYW1lCisrCisrICAgICMgQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBhcmd1bWVudHMgbGVmdCBhZnRlciBwYXJzaW5nIHRoZSBjb21tYW5kIGxpbmUgYW5kCisrICAgICMgcmFpc2UgYW4gZXJyb3IgaWYgc3VjaCBhcmd1bWVudHMgYXJlIGZvdW5kCisrICAgIGRlZiBjaGVja19yZW1haW5pbmdfYXJncyhzZWxmKToKKysgICAgICAgIGlmIHNlbGYuYXJnczoKKysgICAgICAgICAgICByYWlzZSBFcnJvciwgXygiSW52YWxpZCBhcmd1bWVudChzKSAnJXMnIiAlIHN0cihzZWxmLmFyZ3MpKQorIAorIGNsYXNzIE9wdGlvbkNvbnRhaW5lcjoKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA3ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1yZWNvbW1lbmRzLnBhdGNoCkBAIC0wLDAgKzEsMzgxIEBACitIYW5kbGUgcmVjb21tZW5kZWQgcGFja2FnZXMgaW4gY29yZSBhbmQgcnBtIGJhY2tlbmRzCisKK0lkZW50aWZ5IGFuZCBzdG9yZSByZWNvbW1lbmRlZCBwYWNrYWdlcyBpbiB0aGUgY2FjaGUsIGFkZCBhIHF1ZXJ5IG9wdGlvbgordG8gcmVhZCB0aGVtIGFuZCBpZ25vcmUgdGhlbSBpZiB0aGV5IGFyZSBub3QgcHJlc2VudCB3aGVuIGluc3RhbGxpbmcuCisKK0luaXRpYWwgaWRlbnRpZmljYXRpb24gY29kZSBmcm9tIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK2luZGV4IDkzMzJlYTAuLjRmY2ZiZWUgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC0yMjUsNiArMjI1LDUyIEBAIGNsYXNzIFJQTVBhY2thZ2UoUGFja2FnZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgc3JlY3MgPSBmayhzZWxmLnJlY29tbWVuZHMpCisrICAgICAgICBvcmVjcyA9IGZrKG90aGVyLnJlY29tbWVuZHMpCisrICAgICAgICBpZiBzcmVjcyAhPSBvcmVjczoKKysgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgaWYgc3JlYy5uYW1lWzBdID09ICIvIiBvciBzcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIG9yZWMubmFtZVswXSA9PSAiLyIgb3Igb3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgc3JlY3MgPSBmayhzZWxmLnJlY29tbWVuZHMpCisrICAgICAgICBvcmVjcyA9IGZrKG90aGVyLnJlY29tbWVuZHMpCisrICAgICAgICBpZiBzcmVjcyAhPSBvcmVjczoKKysgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgaWYgc3JlYy5uYW1lWzBdID09ICIvIiBvciBzcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKysgICAgICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBpZiAoc3JlYy5uYW1lID09IG9yZWMubmFtZSBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBzcmVjLnJlbGF0aW9uID09IG9yZWMucmVsYXRpb24gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2t2ZXIoc3JlYy52ZXJzaW9uLCBvcmVjLnZlcnNpb24pKToKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisrICAgICAgICAgICAgZm9yIG9yZWMgaW4gb3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIG9yZWMubmFtZVswXSA9PSAiLyIgb3Igb3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBzcmVjIGluIHNyZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgcmV0dXJuIFRydWUKKyAKKyAgICAgZGVmIGNvZXhpc3RzKHNlbGYsIG90aGVyKToKK2RpZmYgLS1naXQgYS9zbWFydC9jY2FjaGUuYyBiL3NtYXJ0L2NjYWNoZS5jCitpbmRleCA3MTkzMTg1Li44YjY2NTE1IDEwMDY0NAorLS0tIGEvc21hcnQvY2NhY2hlLmMKKysrKyBiL3NtYXJ0L2NjYWNoZS5jCitAQCAtNTAwLDYgKzUwMCw0NiBAQCBQYWNrYWdlX2VxdWFscyhQYWNrYWdlT2JqZWN0ICpzZWxmLCBQYWNrYWdlT2JqZWN0ICpvdGhlcikKKyAgICAgICAgIH0KKyAgICAgfQorIAorKyAgICBpbGVuID0gMDsKKysgICAgamxlbiA9IDA7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPnJlY29tbWVuZHMpOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPnJlY29tbWVuZHMsIGkpOworKyAgICAgICAgaWYgKCFQeU9iamVjdF9Jc0luc3RhbmNlKGl0ZW0sIChQeU9iamVjdCAqKSZEZXBlbmRzX1R5cGUpKSB7CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIkRlcGVuZHMgaW5zdGFuY2UgZXhwZWN0ZWQiKTsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChTVFIoKChEZXBlbmRzT2JqZWN0ICopaXRlbSktPm5hbWUpWzBdICE9ICcvJykKKysgICAgICAgICAgICBpbGVuICs9IDE7CisrICAgIH0KKysgICAgZm9yIChqID0gMDsgaiAhPSBQeUxpc3RfR0VUX1NJWkUob3RoZXItPnJlY29tbWVuZHMpOyBqKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKG90aGVyLT5yZWNvbW1lbmRzLCBqKTsKKysgICAgICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZShpdGVtLCAoUHlPYmplY3QgKikmRGVwZW5kc19UeXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJEZXBlbmRzIGluc3RhbmNlIGV4cGVjdGVkIik7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpCisrICAgICAgICAgICAgamxlbiArPSAxOworKyAgICB9CisrICAgIGlmIChpbGVuICE9IGpsZW4pIHsKKysgICAgICAgIHJldCA9IFB5X0ZhbHNlOworKyAgICAgICAgZ290byBleGl0OworKyAgICB9CisrCisrICAgIGlsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+cmVjb21tZW5kcyk7CisrICAgIGpsZW4gPSBQeUxpc3RfR0VUX1NJWkUob3RoZXItPnJlY29tbWVuZHMpOworKyAgICBmb3IgKGkgPSAwOyBpICE9IGlsZW47IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+cmVjb21tZW5kcywgaSk7CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpIHsKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IGpsZW47IGorKykKKysgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gUHlMaXN0X0dFVF9JVEVNKG90aGVyLT5yZWNvbW1lbmRzLCBqKSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGlmIChqID09IGpsZW4pIHsKKysgICAgICAgICAgICAgICAgcmV0ID0gUHlfRmFsc2U7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKyBleGl0OgorICAgICBQeV9JTkNSRUYocmV0KTsKKyAgICAgcmV0dXJuIHJldDsKK0BAIC0xODEzLDYgKzE4NTMsNTkgQEAgTG9hZGVyX2J1aWxkUGFja2FnZShMb2FkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgfQorICAgICB9CisgCisrICAgIC8qIGlmIHJlY2FyZ3M6ICovCisrICAgIGlmIChyZWNhcmdzKSB7CisrICAgICAgICBpbnQgaSA9IDA7CisrICAgICAgICBpbnQgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHJlY2FyZ3MpOworKyAgICAgICAgLyogcGtnLnJlY29tbWVuZHMgPSBbXSAqLworKyAgICAgICAgUHlfREVDUkVGKHBrZ29iai0+cmVjb21tZW5kcyk7CisrICAgICAgICBwa2dvYmotPnJlY29tbWVuZHMgPSBQeUxpc3RfTmV3KGxlbik7CisrICAgICAgICAvKiBmb3IgYXJncyBpbiByZWNhcmdzOiAqLworKyAgICAgICAgZm9yICg7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5TGlzdF9HRVRfSVRFTShyZWNhcmdzLCBpKTsKKysgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWNvYmo7CisrICAgICAgICAgICAgUHlPYmplY3QgKnJlYzsKKysgICAgICAgICAgICAKKysgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJdGVtIGluIHJlY2FyZ3MgaXMgbm90IGEgdHVwbGUiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIHJlYyA9IGNhY2hlLl9vYmptYXAuZ2V0KGFyZ3MpICovCisrICAgICAgICAgICAgcmVjID0gUHlEaWN0X0dldEl0ZW0oY2FjaGUtPl9vYmptYXAsIGFyZ3MpOworKyAgICAgICAgICAgIHJlY29iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVjOworKworKyAgICAgICAgICAgIC8qIGlmIG5vdCByZWM6ICovCisrICAgICAgICAgICAgaWYgKCFyZWMpIHsKKysgICAgICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpIHx8IFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPCAyKSB7CisrICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgcmVjYXJncyB0dXBsZSIpOworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgLyogcmVjID0gYXJnc1swXSgqYXJnc1sxOl0pICovCisrICAgICAgICAgICAgICAgIGNhbGxhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKTsKKysgICAgICAgICAgICAgICAgcmVjID0gUHlPYmplY3RfQ2FsbE9iamVjdChQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApLCBjYWxsYXJncyk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjYWxsYXJncyk7CisrICAgICAgICAgICAgICAgIGlmICghcmVjKSByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgcmVjb2JqID0gKERlcGVuZHNPYmplY3QgKilyZWM7CisrCisrICAgICAgICAgICAgICAgIC8qIGNhY2hlLl9vYmptYXBbYXJnc10gPSByZWMgKi8KKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0oY2FjaGUtPl9vYmptYXAsIGFyZ3MsIHJlYyk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWMpOworKworKyAgICAgICAgICAgICAgICAvKiBjYWNoZS5fcmVjb21tZW5kcy5hcHBlbmQocmVjKSAqLworKyAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGNhY2hlLT5fcmVjb21tZW5kcywgcmVjKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgLyogcmVscGtncy5hcHBlbmQocmVjLnBhY2thZ2VzKSAqLworKyAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocmVscGtncywgcmVjb2JqLT5wYWNrYWdlcyk7CisrCisrICAgICAgICAgICAgLyogcGtnLnJlY29tbWVuZHMuYXBwZW5kKHJlYykgKi8KKysgICAgICAgICAgICBQeV9JTkNSRUYocmVjKTsKKysgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocGtnb2JqLT5yZWNvbW1lbmRzLCBpLCByZWMpOworKyAgICAgICAgfQorKyAgICB9CisrCisgICAgIC8qIGlmIHVwZ2FyZ3M6ICovCisgICAgIGlmICh1cGdhcmdzKSB7CisgICAgICAgICBpbnQgaSA9IDA7CitAQCAtMjU5Miw2ICsyNjg1LDE2IEBAIENhY2hlX3Jlc2V0KENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socmVxb2JqLT5wcm92aWRlZGJ5KSkKKyAgICAgICAgICAgICBMSVNUX0NMRUFSKHJlcW9iai0+cHJvdmlkZWRieSk7CisgICAgIH0KKysgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl9yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgRGVwZW5kc09iamVjdCAqcmVxb2JqOworKyAgICAgICAgUHlPYmplY3QgKnJlcTsKKysgICAgICAgIHJlcSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5fcmVjb21tZW5kcywgaSk7CisrICAgICAgICByZXFvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlcTsKKysgICAgICAgIExJU1RfQ0xFQVIocmVxb2JqLT5wYWNrYWdlcyk7CisrICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlcW9iai0+cHJvdmlkZWRieSkpCisrICAgICAgICAgICAgTElTVF9DTEVBUihyZXFvYmotPnByb3ZpZGVkYnkpOworKyAgICB9CisgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fdXBncmFkZXMpOworICAgICBmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisgICAgICAgICBEZXBlbmRzT2JqZWN0ICp1cGdvYmo7CitAQCAtMjgzNCw2ICsyOTM3LDMwIEBAIENhY2hlX19yZWxvYWQoQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgIGZvciByZWMgaW4gcGtnLnJlY29tbWVuZHM6CisrICAgICAgICAgICAgICAgICAgICAgICByZWMucGFja2FnZXMuYXBwZW5kKHBrZykKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYyBub3QgaW4gcmVjb21tZW5kczoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvbW1lbmRzW3JlY10gPSBUcnVlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqbWFwW3JlYy5nZXRJbml0QXJncygpXSA9IHJlYworKyAgICAgICAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBrZy0+cmVjb21tZW5kcykpIHsKKysgICAgICAgICAgICAgICAgICAgIGtsZW4gPSBQeUxpc3RfR0VUX1NJWkUocGtnLT5yZWNvbW1lbmRzKTsKKysgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgIT0ga2xlbjsgaysrKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShwa2ctPnJlY29tbWVuZHMsIGspOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQoKChEZXBlbmRzT2JqZWN0ICopcmVjKS0+cGFja2FnZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilwa2cpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUHlEaWN0X0dldEl0ZW0ocmVjb21tZW5kcywgcmVjKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNvbW1lbmRzLCByZWMsIFB5X1RydWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZWMsICJnZXRJbml0QXJncyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3MpIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShvYmptYXAsIGFyZ3MsIHJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHVwZyBpbiBwa2cudXBncmFkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB1cGcucGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHVwZyBub3QgaW4gdXBncmFkZXM6CitAQCAtMzA5Nyw2ICszMjI0LDQ3IEBAIENhY2hlX2xpbmtEZXBzKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICB9CisgCisrICAgIC8qIHJlY25hbWVzID0ge30gKi8KKysgICAgcmVjbmFtZXMgPSBQeURpY3RfTmV3KCk7CisrICAgIC8qIGZvciByZWMgaW4gc2VsZi5fcmVjb21tZW5kczogKi8KKysgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPl9yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworKyAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5fcmVjb21tZW5kcywgaSk7CisrCisrICAgICAgICAvKiBmb3IgbmFtZSBpbiByZWMuZ2V0TWF0Y2hOYW1lcygpOiAqLworKyAgICAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZWMsICJnZXRNYXRjaE5hbWVzIiwgTlVMTCk7CisrICAgICAgICBQeU9iamVjdCAqc2VxID0gUHlTZXF1ZW5jZV9GYXN0KG5hbWVzLCAiZ2V0TWF0Y2hOYW1lcygpIHJldHVybmVkICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24tc2VxdWVuY2Ugb2JqZWN0Iik7CisrICAgICAgICBpbnQgbmFtZXNsZW47CisrICAgICAgICBpZiAoIXNlcSkgcmV0dXJuIE5VTEw7CisrICAgICAgICBuYW1lc2xlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworKyAgICAgICAgZm9yIChqID0gMDsgaiAhPSBuYW1lc2xlbjsgaisrKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBqKTsKKysgICAgICAgICAgICAKKysgICAgICAgICAgICAvKiBsc3QgPSByZWNuYW1lcy5nZXQobmFtZSkgKi8KKysgICAgICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbShyZWNuYW1lcywgbmFtZSk7CisrCisrICAgICAgICAgICAgLyogCisrICAgICAgICAgICAgICAgaWYgbHN0OgorKyAgICAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHJlYykKKysgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICByZWNuYW1lc1tuYW1lXSA9IFtyZWNdCisrICAgICAgICAgICAgKi8KKysgICAgICAgICAgICBpZiAobHN0KSB7CisrICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQobHN0LCByZWMpOworKyAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgIGxzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihyZWMpOworKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obHN0LCAwLCByZWMpOworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNuYW1lcywgbmFtZSwgbHN0KTsKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKKysgICAgICAgIFB5X0RFQ1JFRihzZXEpOworKyAgICB9CisrCisgICAgIC8qIHVwZ25hbWVzID0ge30gKi8KKyAgICAgdXBnbmFtZXMgPSBQeURpY3RfTmV3KCk7CisgICAgIC8qIGZvciB1cGcgaW4gc2VsZi5fdXBncmFkZXM6ICovCitAQCAtMzI4Niw2ICszNDU0LDU2IEBAIENhY2hlX2xpbmtEZXBzKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgCisrICAgICAgICAvKiBsc3QgPSByZWNuYW1lcy5nZXQocHJ2Lm5hbWUpICovCisrICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbShyZWNuYW1lcywgcHJ2LT5uYW1lKTsKKysKKysgICAgICAgIC8qIGlmIGxzdDogKi8KKysgICAgICAgIGlmIChsc3QpIHsKKysgICAgICAgICAgICAvKiBmb3IgcmVjIGluIGxzdDogKi8KKysgICAgICAgICAgICBpbnQgcmVjbGVuID0gUHlMaXN0X0dFVF9TSVpFKGxzdCk7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSByZWNsZW47IGorKykgeworKyAgICAgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWMgPSAoRGVwZW5kc09iamVjdCAqKVB5TGlzdF9HRVRfSVRFTShsc3QsIGopOworKyAgICAgICAgICAgICAgICAvKiBpZiByZWMubWF0Y2hlcyhwcnYpOiAqLworKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilyZWMsICJtYXRjaGVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk8iLCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICBpZiAoIXJldCkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9Jc1RydWUocmV0KSkgeworKyAgICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYy5wcm92aWRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wcm92aWRlZGJ5LmFwcGVuZChwcnYpCisrICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5wcm92aWRlZGJ5ID0gW3Bydl0KKysgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlYy0+cHJvdmlkZWRieSkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJlYy0+cHJvdmlkZWRieSwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKl9sc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihwcnYpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShfbHN0LCAwLCAoUHlPYmplY3QgKilwcnYpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWMtPnByb3ZpZGVkYnkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYy0+cHJvdmlkZWRieSA9IF9sc3Q7CisrICAgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJ2LnJlY29tbWVuZGVkYnk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LnJlY29tbWVuZGVkYnkuYXBwZW5kKHBydikKKysgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LnJlY29tbWVuZGVkYnkgPSBbcHJ2XQorKyAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2socHJ2LT5yZWNvbW1lbmRlZGJ5KSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocHJ2LT5yZWNvbW1lbmRlZGJ5LCAoUHlPYmplY3QgKilyZWMpOworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqX2xzdCA9IFB5TGlzdF9OZXcoMSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKF9sc3QsIDAsIChQeU9iamVjdCAqKXJlYyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHBydi0+cmVjb21tZW5kZWRieSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJ2LT5yZWNvbW1lbmRlZGJ5ID0gX2xzdDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmV0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisgICAgICAgICAvKiBsc3QgPSB1cGduYW1lcy5nZXQocHJ2Lm5hbWUpICovCisgICAgICAgICBsc3QgPSBQeURpY3RfR2V0SXRlbSh1cGduYW1lcywgcHJ2LT5uYW1lKTsKKyAKK0BAIC0zODIxLDYgKzQwOTQsMjEgQEAgQ2FjaGVfX3NldHN0YXRlX18oQ2FjaGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIC8qCisrICAgICAgICAgICBmb3IgcmVjIGluIHBrZy5yZWNvbW1lbmRzOgorKyAgICAgICAgICAgICAgIHJlYy5wYWNrYWdlcy5hcHBlbmQocGtnKQorKyAgICAgICAgICAgICAgIHJlY29tbWVuZHNbcmVjXSA9IFRydWUKKysgICAgICAgICovCisrICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBrZ29iai0+cmVjb21tZW5kcykpIHsKKysgICAgICAgICAgICBqbGVuID0gUHlMaXN0X0dFVF9TSVpFKHBrZ29iai0+cmVjb21tZW5kcyk7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSBqbGVuOyBqKyspIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlYyA9IFB5TGlzdF9HRVRfSVRFTShwa2dvYmotPnJlY29tbWVuZHMsIGopOworKyAgICAgICAgICAgICAgICBEZXBlbmRzT2JqZWN0ICpyZWNvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlYzsKKysgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChyZWNvYmotPnBhY2thZ2VzLCBwa2cpOworKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWNvbW1lbmRzLCByZWMsIFB5X1RydWUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIC8qCisgICAgICAgICAgICBmb3IgdXBnIGluIHBrZy51cGdyYWRlczoKKyAgICAgICAgICAgICAgICB1cGcucGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICB1cGdyYWRlc1t1cGddID0gVHJ1ZQorZGlmZiAtLWdpdCBhL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5IGIvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKK2luZGV4IDkyNjVjZDkuLmI2ZjU2OTcgMTAwNjQ0CistLS0gYS9zbWFydC9jb21tYW5kcy9xdWVyeS5weQorKysrIGIvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKK0BAIC03NTAsNiArNzUwLDIyIEBAIGNsYXNzIFRleHRPdXRwdXQoTnVsbE91dHB1dCk6CisgICAgICAgICAgICAgbmFtZSA9IHN0cihwcnZwa2cpCisgICAgICAgICBwcmludCAiICAgICAgICIsICIlcyAoJXMpIiAlIChuYW1lLCBwcnYpCisgCisrICAgIGRlZiBzaG93UmVjb21tZW5kcyhzZWxmLCBwa2csIHJlYyk6CisrICAgICAgICBpZiBzZWxmLl9maXJzdHJlY29tbWVuZHM6CisrICAgICAgICAgICAgc2VsZi5fZmlyc3RyZWNvbW1lbmRzID0gRmFsc2UKKysgICAgICAgICAgICBwcmludCAiICIsIF8oIlJlY29tbWVuZHM6IikKKysgICAgICAgIHByaW50ICIgICAiLCByZWMKKysKKysgICAgZGVmIHNob3dSZWNvbW1lbmRzUHJvdmlkZWRCeShzZWxmLCBwa2csIHJlcSwgcHJ2LCBwcnZwa2cpOgorKyAgICAgICAgaWYgc2VsZi5fZmlyc3RyZWNvbW1lbmRzcHJvdmlkZWRieToKKysgICAgICAgICAgICBzZWxmLl9maXJzdHJlY29tbWVuZHNwcm92aWRlZGJ5ID0gRmFsc2UKKysgICAgICAgICAgICBwcmludCAiICAgICAiLCBfKCJQcm92aWRlZCBCeToiKQorKyAgICAgICAgaWYgc2VsZi5vcHRzLmhpZGVfdmVyc2lvbjoKKysgICAgICAgICAgICBuYW1lID0gcHJ2cGtnLm5hbWUKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgbmFtZSA9IHN0cihwcnZwa2cpCisrICAgICAgICBwcmludCAiICAgICAgICIsICIlcyAoJXMpIiAlIChuYW1lLCBwcnYpCisrCisgICAgIGRlZiBzaG93VXBncmFkZXMoc2VsZiwgcGtnLCB1cGcpOgorICAgICAgICAgaWYgc2VsZi5fZmlyc3R1cGdyYWRlczoKKyAgICAgICAgICAgICBzZWxmLl9maXJzdHVwZ3JhZGVzID0gRmFsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDhmZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1ycG00LWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKKworVGhpcyBwYXRjaCBjaGVja3MgZm9yIHJwbTUgcmVsYXRlZCBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gYWxsb3cgcnBtNCAKK3RvIHdvcmsgY29ycmVjdGx5LiBDdXJyZW50bHkgdGhlIHJwbTQgYXJjaHNjb3JlIGFuZCBmaWx0ZXIgd29yaworZGlmZmVyZW50bHkgZW5vdWdoIHRoYXQgdGhleSBuZWVkIHRvIGJlIGNoYW5nZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzbWFydC0xLjQuMS5vcmlnL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKK0BAIC0zMzgsMTAgKzMzOCwxNCBAQCBjbGFzcyBSUE1PYnNvbGV0ZXMoRGVwZW5kcyk6CisgCisgX1NDT1JFTUFQID0ge30KKyBkZWYgZ2V0QXJjaFNjb3JlKGFyY2gsIF9zbT1fU0NPUkVNQVApOgorLSAgICBpZiBhcmNoIG5vdCBpbiBfc206CistICAgICAgICBzY29yZSA9IHJwbS5hcmNoc2NvcmUoYXJjaCkKKy0gICAgICAgIF9zbVthcmNoXSA9IHNjb3JlCistICAgIHJldHVybiBfc20uZ2V0KGFyY2gsIDApCisrICAgIHRyeToKKysgICAgICAgIHJwbS5wbGF0Zm9ybXNjb3JlKGFyY2gpCisrICAgICAgICBpZiBhcmNoIG5vdCBpbiBfc206CisrICAgICAgICAgICAgc2NvcmUgPSBycG0uYXJjaHNjb3JlKGFyY2gpCisrICAgICAgICAgICAgX3NtW2FyY2hdID0gc2NvcmUKKysgICAgICAgIHJldHVybiBfc20uZ2V0KGFyY2gsIDApCisrICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysgICAgICAgIHJldHVybiAxCisgCisgIyBUT0RPOiBFbWJlZCBjb2xvciBpbnRvIG5hbWVwcm92aWRlcyBhbmQgb2Jzb2xldGVzIHJlbGF0aW9ucy4KKyBfQ09MT1JNQVAgPSB7Im5vYXJjaCI6IDAsICJ4ODZfNjQiOiAyLCAicHBjNjQiOiAyLCAiczM5MHgiOiAyLCAic3BhcmM2NCI6IDJ9CitJbmRleDogc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc21hcnQtMS40LjEub3JpZy9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBzbWFydC0xLjQuMS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yMzUsNiArMjM1LDEyIEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tb3JkZXIiKToKKyAgICAgICAgICAgICB0cy5vcmRlcigpCisgICAgICAgICBwcm9iZmlsdGVyID0gcnBtLlJQTVBST0JfRklMVEVSX09MRFBBQ0tBR0UKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICAjIFRlc3QgZm9yIFJQTTUgZnVuY3Rpb24KKysgICAgICAgICAgICBycG0ucGxhdGZvcm1zY29yZSgiIikKKysgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKysgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9JR05PUkVBUkNICisrCisgICAgICAgICBpZiBmb3JjZSBvciByZWluc3RhbGw6CisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRVBLRworICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VPTERGSUxFUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODU5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorU2V0IE5PUFJPR1JFU1MgZm9yIHB5Y3VybCBqdXN0IGFzIHNhbWUgYXMgZGVmYXVsdCBvcGVyYXRpb24gaW4gcHljdXJsIG1vZHVsZSBpdHNlbGYuCitJZiBzZXQgTk9QUk9HUkVTUyB3aXRoIDAgZm9yIHB5Y3VybCwgaXQgY2F1c2VzIGRlYWQgbG9jayBpc3N1ZSBvZiBQeXRob24gR0lMIHdoZW4KK2NhbGwgc21hcnQgbGlicmFyeSBieSBweXRob24gZ3VpIGp1c3QgbGlrZSBweWd0ay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC11IHNtYXJ0LTEuNC4xL3NtYXJ0Lm9yaWcvZmV0Y2hlci5weSBzbWFydC0xLjQuMS9zbWFydC9mZXRjaGVyLnB5CistLS0gc21hcnQtMS40LjEvc21hcnQub3JpZy9mZXRjaGVyLnB5CTIwMTQtMDctMTUgMTY6NDI6MTkuMjQwNDM3MDgwICswODAwCisrKysgc21hcnQtMS40LjEvc21hcnQvZmV0Y2hlci5weQkyMDE0LTA3LTE1IDE3OjAyOjM3LjgxMjQ3MDI4OSArMDgwMAorQEAgLTE3MjAsNyArMTcyMCw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuT1BUX0ZJTEVUSU1FLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLkxPV19TUEVFRF9MSU1JVCwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5MT1dfU1BFRURfVElNRSwgU09DS0VUVElNRU9VVCkKKy0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5OT1BST0dSRVNTLCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLk5PUFJPR1JFU1MsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuUFJPR1JFU1NGVU5DVElPTiwgcHJvZ3Jlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuV1JJVEVEQVRBLCBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5GT0xMT1dMT0NBVElPTiwgMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmYjI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1JQTTUgaGFzIHJlbW92ZWQgc3VwcG9ydCBmb3IgUlBNVlNGX05PU0lHTkFUVVJFUworCitQYXRjaCBzbWFydCB0byBubyBsb25nZXIgdXNlIHRoaXMgZmxhZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtNjMsMTEgKzYzLDExIEBAIGRlZiBnZXRUUyhuZXc9RmFsc2UpOgorICAgICAgICAgaWYgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKToKKyAgICAgICAgICAgICBycG0uYWRkTWFjcm8oJ19kYnBhdGgnLCAiLyIgKyBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpKQorICAgICAgICAgZ2V0VFMudHMgPSBycG0udHMoZ2V0VFMucm9vdCkKKy0gICAgICAgIGlmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CistICAgICAgICAgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorLSAgICAgICAgICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorKyAgICAgICAgI2lmIG5vdCBzeXNjb25mLmdldCgicnBtLWNoZWNrLXNpZ25hdHVyZXMiLCBGYWxzZSk6CisrICAgICAgICAjICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKysgICAgICAgICMgICAgICAgIGdldFRTLnRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorKyAgICAgICAgIyAgICBlbHNlOgorKyAgICAgICAgIyAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKyAgICAgICAgIHJwbV9kYnBhdGggPSBzeXNjb25mLmdldCgicnBtLWRicGF0aCIsICJ2YXIvbGliL3JwbSIpCisgICAgICAgICBkYmRpciA9IHJwbV9qb2luX2RicGF0aChnZXRUUy5yb290LCBycG1fZGJwYXRoKQorICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGJkaXIpOgorQEAgLTg5LDExICs4OSwxMSBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIHRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICB0cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisgICAgICAgICByZXR1cm4gdHMKKyAgICAgZWxzZToKKyAgICAgICAgIHJldHVybiBnZXRUUy50cworZGlmZiAtLWdpdCBhL3NtYXJ0L3BsdWdpbnMveXVtY2hhbm5lbHN5bmMucHkgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CistLS0gYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CisrKysgYi9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5CitAQCAtNTYsOCArNTYsOCBAQCBkZWYgX2dldHJlbGVhc2V2ZXIoKToKKyAKKyAgICAgcnBtcm9vdCA9IHN5c2NvbmYuZ2V0KCJycG0tcm9vdCIsICIvIikKKyAgICAgdHMgPSBycG1VdGlscy50cmFuc2FjdGlvbi5pbml0UmVhZE9ubHlUcmFuc2FjdGlvbihyb290PXJwbXJvb3QpCistICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgorLSAgICAgICAgdHMucHVzaFZTRmxhZ3MofihycG0uX1JQTVZTRl9OT1NJR05BVFVSRVN8cnBtLl9SUE1WU0ZfTk9ESUdFU1RTKSkKKysgICAgI2lmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKSBhbmQgaGFzYXR0cihycG0sICdfUlBNVlNGX05PRElHRVNUUycpOgorKyAgICAjICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCisgICAgIHJlbGVhc2V2ZXIgPSBOb25lCisgICAgICMgSEFDSzogd2UncmUgaGFyZC1jb2RpbmcgdGhlIG1vc3QgdXNlZCBkaXN0cm9zLCB3aWxsIGFkZCBtb3JlIGlmIG5lZWRlZAorICAgICBpZHggPSB0cy5kYk1hdGNoKCdwcm92aWRlcycsICdmZWRvcmEtcmVsZWFzZScpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTc0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgpAQCAtMCwwICsxLDEzOSBAQAorU1VNTUFSWSA9ICJUaGUgU21hcnQgUGFja2FnZSBNYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiVGhlIFNtYXJ0IFBhY2thZ2UgTWFuYWdlciBwcm9qZWN0IGhhcyB0aGUgYW1iaXRpb3VzIG9iamVjdGl2ZSBvZiBjcmVhdGluZyBcCitzbWFydCBhbmQgcG9ydGFibGUgYWxnb3JpdGhtcyBmb3Igc29sdmluZyBhZGVxdWF0ZWx5IHRoZSBwcm9ibGVtIG9mIG1hbmFnaW5nIHNvZnR3YXJlIFwKK3VwZ3JhZGVzIGFuZCBpbnN0YWxsYXRpb24uIgorCitIT01FUEFHRSA9ICJodHRwOi8vbGFiaXgub3JnL3NtYXJ0LyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitERVBFTkRTID0gInB5dGhvbiBycG0gZ2V0dGV4dC1uYXRpdmUgcHl0aG9uLXJwbSIKK1NSQ05BTUUgPSAic21hcnQiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgIGdpdDovL2dpdGh1Yi5jb20vc21hcnRwbS9zbWFydC5naXQgXAorICAgICAgICAgIGZpbGU6Ly9zbWFydHBtLXJwbTUtbm9kaWcucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1yZWNvbW1lbmRzLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1jaGFubmVsc2Rpci5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWF0dGVtcHQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hdHRlbXB0LWZpeC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LXNldC1ub3Byb2dyZXNzLWZvci1weWN1cmwucGF0Y2ggXAorICAgICAgICAgIgorCitTUkNSRVYgPSAiNDA3YTdlY2E3NjY0MzEyNTdkY2QxZGExNTE3NWNjMzZhMWJiMjJkMCIKK1BWID0gIjEuNStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBPcHRpb25zIC0gcnBtLCBxdDQsIGd0aworUEFDS0FHRUNPTkZJRyA/Pz0gInJwbSIKKworUlBNX1JERVAgPSAiJHtQTn0tYmFja2VuZC1ycG0iCitRVF9SREVQID0gIiR7UE59LWludGVyZmFjZS1xdDQiCitHVEtfUkRFUCA9ICIke1BOfS1pbnRlcmZhY2UtZ3RrIgorCitSUE1fUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorUVRfUkRFUF9jbGFzcy1uYXRpdmUgPSAiIgorR1RLX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKKworUlBNX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1FUX1JERVBfY2xhc3MtbmF0aXZlc2RrID0gIiIKK0dUS19SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1BBQ0tBR0VDT05GSUdbcnBtXSA9ICIsLHJwbSwke1JQTV9SREVQfSIKK1BBQ0tBR0VDT05GSUdbcXQ0XSA9ICIsLHF0NC14MTEsJHtRVF9SREVQfSIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICIsLGd0ayssJHtHVEtfUkRFUH0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIyBXZSBkb24ndCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaXRlbXMKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9zbGFjaworICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL2FyY2gKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL3F0CisKKyAgICMgVGVtcG9yYXJ5LCBkZWJpYW4gc3VwcG9ydCBpbiBPRSBpcyBtaXNzaW5nIHRoZSBweXRob24gbW9kdWxlCisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2FwdGNoYW5uZWxzeW5jLnB5KgorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9kZWJkaXIucHkqCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvZGViCisKKyAgICMgRGlzYWJsZSBhdXRvbWF0aWMgY2hhbm5lbCBkZXRlY3Rpb24KKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvZGV0ZWN0c3lzLnB5KgorCisgICAjIERpc2FibGUgbGFuZHNjYXBlIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvbGFuZHNjYXBlLnB5KgorCisgICAjIERpc2FibGUgdXJwbWkgY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3VycG1pY2hhbm5lbHN5bmMucHkqCisKKyAgICMgRGlzYWJsZSB5dW0gY2hhbm5lbCBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5KgorCisgICAjIERpc2FibGUgenlwcGVyIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy96eXBwY2hhbm5lbHN5bmMucHkqCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3JwbScsICdycG0nLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL3JwbWRpci5weSoKKyAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0KKyAgIGZpCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICdxdDQnLCAnJywgZCl9IiBdOyB0aGVuCisgICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQKKyAgIGZpCisKKyAgIGlmIFsgLXogIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2d0aysnLCAnZ3RrJywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvZ3RrCisgICBmaQorfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3NtYXJ0IFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICAgICAgc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7YmluZGlyfS9zbWFydAorICAgICAgICBhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgICAgICBhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tZGV2ICR7UE59LWRiZyAke1BOfS1kb2Mgc21hcnRwbSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycG0nLCAnJHtQTn0tYmFja2VuZC1ycG0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3F0NCcsICcke1BOfS1pbnRlcmZhY2UtcXQ0JywgJycsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdndGsnLCAnJHtQTn0taW50ZXJmYWNlLWd0aycsICcnLCBkKX0gXAorICAgICAgICAgICAgJHtQTn0taW50ZXJmYWNlLWltYWdlcyAke1BOfSIKKworUkRFUEVORFNfc21hcnRwbSA9ICIke1BOfSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWJhY2tlbmQtcnBtIHB5dGhvbi1jb2RlY3MgcHl0aG9uLXRleHR1dGlscyBweXRob24teG1sIHB5dGhvbi1mY250bCBcCisgICAgICAgICAgICAgICAgICAgcHl0aG9uLXBpY2tsZSBweXRob24tY3J5cHQgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi1zaGVsbCBcCisgICAgICAgICAgICAgICAgICAgcHl0aG9uLXJlc291cmNlIHB5dGhvbi1uZXRjbGllbnQgcHl0aG9uLXRocmVhZGluZyBweXRob24tdW5peGFkbWluIHB5dGhvbi1wcHJpbnQiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitSREVQRU5EU18ke1BOfS1iYWNrZW5kLXJwbSA9ICJweXRob24tcnBtIgorCitSREVQRU5EU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gInF0NC14MTEgJHtQTn0taW50ZXJmYWNlLWltYWdlcyIKK1JERVBFTkRTXyR7UE59LWludGVyZmFjZS1ndGsgPSAiZ3RrKyAke1BOfS1pbnRlcmZhY2UtaW1hZ2VzIgorCitGSUxFU19zbWFydHBtID0gIiR7YmluZGlyfS9zbWFydCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbS8uZGVidWciCisKK0ZJTEVTXyR7UE59LWJhY2tlbmQtcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtIgorCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtcXQ0ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdDQiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9ndGsiCitGSUxFU18ke1BOfS1pbnRlcmZhY2UtaW1hZ2VzID0gIiR7ZGF0YWRpcn0vJHtiYXNlbGlifS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9pbWFnZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbW1hcF8wLjkuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjU4YmU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJQeXRob24gaW1wbGVtZW50YXRpb24gb2YgYSBzbGlkaW5nIHdpbmRvdyBtZW1vcnkgbWFwIG1hbmFnZXIiCitERVNDUklQVElPTiA9ICJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyBtZW1vcnkgbWFwIHRvIFwKK2hlbHAgdW5pZnlpbmcgbWVtb3J5IG1hcHBlZCBhY2Nlc3Mgb24gMzIgYW5kIDY0IGJpdCBzeXN0ZW1zIGFuZCB0byBoZWxwIFwKK21hbmFnaW5nIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL0dpdFB5dGhvbiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9QS0ctSU5GTztiZWdpbmxpbmU9ODtlbmRsaW5lPTg7bWQ1PWU5MTBiMzViMGVmNGUxZjY2NWI5YTc1ZDZhZmI3NzA5IgorCitTUkNfVVJJID0gImh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3Mvc21tYXAvc21tYXAtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImQ3OTMyZDVhY2UyMDZiZjRhZTE1MTk4Y2YzNmZiNmFiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMmI2MmI0OTdiZDVmMGFmZWJjMDAyZWRhNGQ5MGRmOWQyMDljMzBlZjI1N2U4NjczYzkwYTZiNWMxMTlkNjIiCisKK1MgPSAiJHtXT1JLRElSfS9zbW1hcC0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tY29kZWNzIHB5dGhvbi1tbWFwIHB5dGhvbi1sYW5nIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThhYjhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiVGhlIFB5dGhvbiBQcm9ncmFtbWluZyBMYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKK0xJQ0VOU0UgPSAiUFNGdjIiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKKyMgYnVtcCB0aGlzIG9uIGV2ZXJ5IGNoYW5nZSBpbiBjb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKK0lOQ19QUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGZmM2QwMGYwNDk1NDU4NjI5OTJkMmQwOTc4MzFhMTMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vJHtQVn0vUHl0aG9uLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4ZDUzMGY3ZWZjMzczZDY0YThmYjE2MzdlM2JhYWE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwZDI3ZTE0ZWE3ZTAzNTcwMDI2ODUwZTJlNTBiYTcxYWQyMGI3ZWIzMTAzNWFhZGExY2YzZGVmOGY4ZDQ5MTYiCisKK1BZVEhPTl9NQUpNSU4gPSAiMi43IgorCitpbmhlcml0IGF1dG90b29scworCitQWVRIT05MU0JPUFRTID0gIi0td2l0aC13Y3R5cGUtZnVuY3Rpb25zIgorUFlUSE9OTFNCT1BUU19saW51eHN0ZGJhc2UgPSAiYWNfY3Zfc2l6ZW9mX29mZl90PTgiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgIC0td2l0aC10aHJlYWRzIFwKKyAgLS13aXRoLXB5bWFsbG9jIFwKKyAgLS13aXRob3V0LWN4eC1tYWluIFwKKyAgLS13aXRoLXNpZ25hbC1tb2R1bGUgXAorICAtLWVuYWJsZS1zaGFyZWQgXAorICAtLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0gXAorICBhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2JsdWV0b290aF9oPW5vIGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfaD1ubyBcCisgICR7UFlUSE9OTFNCT1BUU30gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjU3Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorV2UgbmVlZCB0byBlbnN1cmUgb3VyIGhvc3QgdG9vbHMgZ2V0IHJ1biBkdXJpbmcgYnVpbGQsIG5vdCB0aGUgZnJlc2hseQorYnVpbHQgY3Jvc3MtdG9vbHMgKHRoaXMgd2lsbCBub3Qgd29yayksIHNvIHdlIGludHJvZHVjZSBIT1NUUFlUSE9OIGFuZCBIT1NUUEdFTi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtMjM0LDYgKzIzNCw3IEBAIExJQkZGSV9JTkNMVURFRElSPQlATElCRkZJX0lOQ0xVREVESVJACisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFBhcnNlcgorIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQorK0hPU1RQR0VOPQkkKFBHRU4pJChFWEUpCisgCisgUFNSQ1M9CQlcCisgCQlQYXJzZXIvYWNjZWxlci5jIFwKK0BAIC00NDUsNyArNDQ2LDcgQEAgJChCVUlMRFBZVEhPTik6CU1vZHVsZXMvcHl0aG9uLm8gJChMSUJSQQorIAkJCSQoQkxETElCUkFSWSkgJChMSUJTKSAkKE1PRExJQlMpICQoU1lTTElCUykgJChMRExBU1QpCisgCisgcGxhdGZvcm06ICQoQlVJTERQWVRIT04pIHB5YnVpbGRkaXIudHh0CistCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50IGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdJyA+cGxhdGZvcm0KKysJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0gOyBwcmludCBnZXRfcGxhdGZvcm0oKSsiLSIrc3lzLnZlcnNpb25bMDozXScgPnBsYXRmb3JtCisgCisgIyBDcmVhdGUgYnVpbGQgZGlyZWN0b3J5IGFuZCBnZW5lcmF0ZSB0aGUgc3lzY29uZmlnIGJ1aWxkLXRpbWUgZGF0YSB0aGVyZS4KKyAjIHB5YnVpbGRkaXIudHh0IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBidWlsZCBkaXIgYW5kIGlzIHVzZWQgZm9yCitAQCAtNjExLDcgKzYxMiw3IEBAIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3AKKyAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJCSQoTUFLRSkgJChQR0VOKQorLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKysJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKK0BAIC0xMDQzLDI3ICsxMDQ0LDI3IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCisgCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKyAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXR0IC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisrCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10IC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKysJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorKwkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorIAorICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgorICQoc3JjZGlyKS9MaWIvJChQTEFURElSKToKK0luZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0yLjcuOS9zZXR1cC5weQorQEAgLTMzNCw2ICszMzQsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQorICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyoqKiBXQVJOSU5HOiByZW5hbWluZyAiJXMiIHNpbmNlIGltcG9ydGluZyBpdCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAlcycgJSAoZXh0Lm5hbWUsIHdoeSksIGxldmVsPTMpCisrICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlucGxhY2UKKyAgICAgICAgICAgICBiYXNlbmFtZSwgdGFpbCA9IG9zLnBhdGguc3BsaXRleHQoZXh0X2ZpbGVuYW1lKQorICAgICAgICAgICAgIG5ld25hbWUgPSBiYXNlbmFtZSArICJfZmFpbGVkIiArIHRhaWwKK0BAIC01NTgsNiArNTU5LDkgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICAgICAgIyBYWFggT21pdHRlZCBtb2R1bGVzOiBnbCwgcHVyZSwgZGwsIFNHSS1zcGVjaWZpYyBtb2R1bGVzCisgCisrICAgICAgICBsaWJfZGlycyA9IFsgb3MuZ2V0ZW52KCJTVEFHSU5HX0xJQkRJUiIpLCAgb3MuZ2V0ZW52KCJTVEFHSU5HX0JBU0VMSUJESVIiKSBdCisrICAgICAgICBpbmNfZGlycyA9IFsgb3MuZ2V0ZW52KCJTVEFHSU5HX0lOQ0RJUiIpIF0KKysKKyAgICAgICAgICMKKyAgICAgICAgICMgVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBhbGwgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGNvbXBpbGUKKyAgICAgICAgICMgb24gcHJldHR5IG11Y2ggYW55IFBPU0lYaXNoIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MGNlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworV2UgbmVlZCB0byBzdXBwbHkgU1RBR0lOR19JTkNESVIgaGVyZSwgb3RoZXJ3aXNlIHRoZSBUayBoZWFkZXJzCit3aWxsIG5vdCBiZSBmb3VuZC4KKworU2lnbmVkLW9mZi1ieTogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUuZGU+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA4ZmUxZmI4Li42N2VkYTc0IDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMTg5Miw3ICsxODkyLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICBkb3R2ZXJzaW9uID0gZG90dmVyc2lvbls6LTFdICsgJy4nICsgZG90dmVyc2lvblstMV0KKyAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgPSBbXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViID0gW10KKy0gICAgICAgICAgICBmb3IgZGlyIGluIGluY19kaXJzOgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gW29zLmdldGVudigiU1RBR0lOR19JTkNESVIiKV06CisgICAgICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRjbCIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRrIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gdGNsX2luY2x1ZGVfc3ViCitAQCAtMTkxMSwyMiArMTkxMSw2IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBpZiBkaXIgbm90IGluIGluY2x1ZGVfZGlyczoKKyAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZChkaXIpCisgCistICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9yaWVzCistICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdzdW5vczUnOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNi9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliNjQnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNS9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvbGliJykKKy0gICAgICAgIGVsc2U6CistICAgICAgICAgICAgIyBBc3N1bWUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgWDExCistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9saWInKQorLQorICAgICAgICAgIyBJZiBDeWd3aW4sIHRoZW4gdmVyaWZ5IHRoYXQgWCBpcyBpbnN0YWxsZWQgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgICAgICAgeDExX2luYyA9IGZpbmRfZmlsZSgnWDExL1hsaWIuaCcsIFtdLCBpbmNsdWRlX2RpcnMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNS1lbmFibGUtY3R5cGVzLWNyb3NzLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M4NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitSZWJhc2VkIGZvciBweXRob24gMi43LjkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBDVHlwZXMgbmVlZCB0byBrbm93IHRoZSBhY3R1YWwgaG9zdCB3ZSBhcmUgYnVpbGRpbmcgb24uCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgRGlldHJpY2ggPG1kdEBlbWRldGUuZGU+CisKK0luZGV4OiBQeXRob24tMi43Ljkvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0yLjcuOS9zZXR1cC5weQorQEAgLTIwMjgsMTIgKzIwMjgsMTIgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorIAorICAgICAgICAgICAgICAgICAjIFBhc3MgZW1wdHkgQ0ZMQUdTIGJlY2F1c2Ugd2UnbGwganVzdCBhcHBlbmQgdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAjIENGTEFHUyB0byBQeXRob24nczsgLWcgb3IgLU8yIGlzIHRvIGJlIGF2b2lkZWQuCistICAgICAgICAgICAgICAgIGNtZCA9ICJjZCAlcyAmJiBlbnYgQ0ZMQUdTPScnICclcy9jb25maWd1cmUnICVzIiBcCistICAgICAgICAgICAgICAgICAgICAgICUgKGZmaV9idWlsZGRpciwgZmZpX3NyY2RpciwgIiAiLmpvaW4oY29uZmlnX2FyZ3MpKQorKyAgICAgICAgICAgICAgICBjbWQgPSAiKGNkICVzICYmIGF1dG9jb25mIC1XIGNyb3NzKSAmJiAoY2QgJXMgJiYgZW52IENGTEFHUz0nJyAnJXMvY29uZmlndXJlJyAlcykiIFwKKysgICAgICAgICAgICAgICAgICAgICUgKGZmaV9zcmNkaXIsIGZmaV9idWlsZGRpciwgZmZpX3NyY2RpciwgIiAiLmpvaW4oY29uZmlnX2FyZ3MpKQorIAorICAgICAgICAgICAgICAgICByZXMgPSBvcy5zeXN0ZW0oY21kKQorICAgICAgICAgICAgICAgICBpZiByZXMgb3Igbm90IG9zLnBhdGguZXhpc3RzKGZmaV9jb25maWdmaWxlKToKKy0gICAgICAgICAgICAgICAgICAgIHByaW50ICJGYWlsZWQgdG8gY29uZmlndXJlIF9jdHlwZXMgbW9kdWxlIgorKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBjb25maWd1cmUgX2N0eXBlcyBtb2R1bGUgKHJlcz0lZCkgb3IgbWlzc2luZyBjb25mZmlsZT0lcyIgJSAoIHJlcywgZmZpX2NvbmZpZ2ZpbGUgKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgICAgICAgICAgICAgZmZpY29uZmlnID0ge30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA2LWF2b2lkX3Vzcl9saWJfdGVybWNhcF9wYXRoX2luX2xpbmtpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTJjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgcG9pc29uIGRpcmVjdG9yaWVzIHBhdGNoIGhhcyBkZXRlY3RlZCBsaWJyYXJ5IHBhdGggaXNzdWUgd2hpbGUgCitjb21waWxpbmcgdGhlIHB5dGhvbiBpbiBjcm9zcyBlbnZpcm9ubWVudCwgYXMgc2VlbiBiZWxsb3cuCisKK3dhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggIi91c3IvbGliL3Rlcm1jYXAiIGlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24KKworVGhpcyBQYXRjaCBmaXhlcyB0aGlzIGlzc3VlIGluIHRoZSBweXRob24gYnVpbGQgZW52aXJvbm1lbnQuCisxMSBPY3QgMjAxMAorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworMjAxMS8wOS8yOQorUmViYXNlZCBmb3IgcHl0aG9uIDIuNy4yCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IDY3ZWRhNzQuLjU5YzUzN2UgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC03NjEsMTIgKzc2MSwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgIHBhc3MgIyBJc3N1ZSA3Mzg0OiBBbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKy0gICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyL2xpYi90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9saW5rX2FyZ3M9cmVhZGxpbmVfZXh0cmFfbGlua19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPXJlYWRsaW5lX2xpYnMpICkKKyAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZWE3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy4yL01vZHVsZXMvU2V0dXAuZGlzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL01vZHVsZXMvU2V0dXAuZGlzdAkyMDExLTA2LTExIDA4OjQ2OjI2LjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0yLjcuMi9Nb2R1bGVzL1NldHVwLmRpc3QJMjAxMS0xMi0yNyAxNTo1MTo0MS4yNDQ2MjMyMTkgLTA4MDAKK0BAIC0yNDgsNyArMjQ4LDcgQEAKKyAjIE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSwgZGVzY3JpYmVkIGluIFJGQyAxMzIxLiAgVGhlIG5lY2Vzc2FyeSBmaWxlcworICMgbWQ1LmMgYW5kIG1kNS5oIGFyZSBpbmNsdWRlZCBoZXJlLgorIAorLSNfbWQ1IG1kNW1vZHVsZS5jIG1kNS5jCisrX21kNSBtZDVtb2R1bGUuYyBtZDUuYworIAorIAorICMgVGhlIF9zaGEgbW9kdWxlIGltcGxlbWVudHMgdGhlIFNIQSBjaGVja3N1bSBhbGdvcml0aG1zLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmFlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F2b2lkcyBwYXJhbGxlbCBtYWtlIHJhY2VzIGxpbmtpbmcgZXJyb3JzIHdoZW4gbWFraW5nIFBhcnNlci9QR0VOCisKKy0gSW1wbGVtZW50cyBSaWNoYXJkIFB1cmRpZSdzIGlkZWEKKworU2lnbmVkLU9mZi1CeTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCitAQCAtNjExLDEyICs2MTEsMTAgQEAgTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZworIAorIE1vZHVsZXMvcHdkbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B3ZG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKKyAKKy0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykgJChQR0VOKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorLQkJJChNQUtFKSAkKFBHRU4pCisgCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCistCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCisgCisgJChQR0VOKToJJChQR0VOT0JKUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK190a2ludGVyIG1vZHVsZSBuZWVkcyB0ayBtb2R1bGUgYWxvbmcgd2l0aCB0Y2wuIHRrIGlzIG5vdCB5ZXQgaW50ZWdyYXRlZAoraW4geW9jdG8gc28gd2Ugc2tpcCB0aGUgY2hlY2sgZm9yIHRoaXMgbW9kdWxlLgorQXZvaWQgYSB3YXJuaW5nIGJ5IG5vdCBhZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTg6MzguNTAwMTM2NjQ3ICswMzAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMDUgMjM6MTk6MzUuODg4MTM0OTY5ICswMzAwCitAQCAtMTYzNCw4ICsxNjM0LDEwIEBACisgICAgICAgICAjIENhbGwgdGhlIG1ldGhvZCBmb3IgZGV0ZWN0aW5nIHdoZXRoZXIgX3RraW50ZXIgY2FuIGJlIGNvbXBpbGVkCisgICAgICAgICBzZWxmLmRldGVjdF90a2ludGVyKGluY19kaXJzLCBsaWJfZGlycykKKyAKKy0gICAgICAgIGlmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKy0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorKyAgICAgICAgIyB0a2ludGVyIG1vZHVsZSB3aWxsIG5vdCBiZSBhdmFsYWlibGUgYXMgeW9jdG8KKysgICAgICAgICMgZG9lc24ndCBoYXZlIHRrIGludGVncmF0ZWQgKHlldCkKKysgICAgICAgICNpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CisrICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisgCisgICAgICAgICByZXR1cm4gbWlzc2luZworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzN2UwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Zvcl9zdW5vc19zcGVjaWZpY19tb2R1bGUucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorc3VuYXVkaW9kZXYgbW9kdWxlIGlzIHN1bm9zIHNwZWNpZmljIHNvIHdlIGF2b2lkIGEgd2FybmluZyBieSBub3QgCithZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMDUgMjI6Mjk6MTguMDQ5MTk2NjA4ICswMzAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMDUgMjI6Mjk6NTcuNTA1MTk1NDUzICswMzAwCitAQCAtMTUyMiw4ICsxNTIyLDkgQEAKKyAgICAgICAgIGlmIHBsYXRmb3JtID09ICdzdW5vczUnOgorICAgICAgICAgICAgICMgU3VuT1Mgc3BlY2lmaWMgbW9kdWxlcworICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3N1bmF1ZGlvZGV2JywgWydzdW5hdWRpb2Rldi5jJ10pICkKKy0gICAgICAgIGVsc2U6CistICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3N1bmF1ZGlvZGV2JykKKysgICAgICAgICMgSWYgcGxhdGZvcm0gaXMgbm90IHN1bm9zIHdhcm5pbmcgaXMgdXNlbGVzcworKyAgICAgICAgI2Vsc2U6CisrICAgICAgICAjICAgIG1pc3NpbmcuYXBwZW5kKCdzdW5hdWRpb2RldicpCisgCisgICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAjIF9zY3Byb3h5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9idWlsZGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2J1aWxkZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjI5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9idWlsZGRpci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitXaGVuIGNyb3NzIGNvbXBpbGluZyBweXRob24sIHdlIHVzZWQgdG8gbmVlZCB0byBpbnN0YWxsIHRoZSBNYWtlZmlsZSwgcHljb25maWcuaCAKK2FuZCB0aGUgcHl0aG9uIGxpYnJhcnkgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYmVmb3JlIGJlaW5nIGFibGUgdG8gY29tcGlsZSB0aGUgCityZXN0IG9mIHB5dGhvbi4gVGhpcyBjaGFuZ2UgYWxsb3dzIHVzIHRvIHBvaW50IHB5dGhvbiBhdCBpdHMgb3duIHNvdXJjZSB3aGVuCitidWlsZGluZywgYXZvaWRpbmcgYSB2YXJpZXR5IG9mIHN5c3Jvb3Qgc3RhZ2luZyBpc3N1ZXMgYW5kIHNpbXBsaWZ5aW5nIHRoZSBtYWluCitweXRob24gcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTIvMTEvMTMKKworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc3lzY29uZmlnLnB5CitAQCAtOTMsNiArOTMsNyBAQCBfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorIF9FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQorIF9DT05GSUdfVkFSUyA9IE5vbmUKKyBfVVNFUl9CQVNFID0gTm9uZQorK19QWVRIT05CVUlMRERJUiA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05CVUlMRERJUiIsIE5vbmUpCisgCisgZGVmIF9zYWZlX3JlYWxwYXRoKHBhdGgpOgorICAgICB0cnk6CitAQCAtMTAwLDcgKzEwMSw5IEBAIGRlZiBfc2FmZV9yZWFscGF0aChwYXRoKToKKyAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICByZXR1cm4gcGF0aAorIAorLWlmIHN5cy5leGVjdXRhYmxlOgorK2lmIF9QWVRIT05CVUlMRERJUjoKKysgICAgX1BST0pFQ1RfQkFTRSA9IF9QWVRIT05CVUlMRERJUgorK2VsaWYgc3lzLmV4ZWN1dGFibGU6CisgICAgIF9QUk9KRUNUX0JBU0UgPSBvcy5wYXRoLmRpcm5hbWUoX3NhZmVfcmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorIGVsc2U6CisgICAgICMgc3lzLmV4ZWN1dGFibGUgY2FuIGJlIGVtcHR5IGlmIGFyZ3ZbMF0gaGFzIGJlZW4gY2hhbmdlZCBhbmQgUHl0aG9uIGlzCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC0yNiw2ICsyNiw5IEBAIEVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY18KKyAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKKyAjIGl0J2xsIGxpdmUgaW4gcHJvamVjdC9QQ2J1aWxkL2FtZDY0LgorIHByb2plY3RfYmFzZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpKQorK19QWVRIT05CVUlMRERJUiA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05CVUlMRERJUiIsIE5vbmUpCisraWYgX1BZVEhPTkJVSUxERElSOgorKyAgICBwcm9qZWN0X2Jhc2UgPSBfUFlUSE9OQlVJTERESVIKKyBpZiBvcy5uYW1lID09ICJudCIgYW5kICJwY2J1aWxkIiBpbiBwcm9qZWN0X2Jhc2VbLTg6XS5sb3dlcigpOgorICAgICBwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHByb2plY3RfYmFzZSwgb3MucGF0aC5wYXJkaXIpKQorICMgUEMvVlM3LjEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUwNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2dpX3B5LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0xpYi9jZ2kucHk6IFVwZGF0ZSB0aGUgc2NyaXB0IGFzIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkub3JpZwkyMDEwLTA4LTAxIDIyOjE0OjI3LjAwMDAwMDAwMCAtMDUwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5CTIwMTEtMDktMjEgMTU6Mjg6NDAuNDc4MjA4NjMxIC0wNTAwCitAQCAtMSwxMyArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCistCistIyBOT1RFOiB0aGUgYWJvdmUgIi91c3IvbG9jYWwvYmluL3B5dGhvbiIgaXMgTk9UIGEgbWlzdGFrZS4gIEl0IGlzCistIyBpbnRlbnRpb25hbGx5IE5PVCAiL3Vzci9iaW4vZW52IHB5dGhvbiIuICBPbiBtYW55IHN5c3RlbXMKKy0jIChlLmcuIFNvbGFyaXMpLCAvdXNyL2xvY2FsL2JpbiBpcyBub3QgaW4gJFBBVEggYXMgcGFzc2VkIHRvIENHSQorLSMgc2NyaXB0cywgYW5kIC91c3IvbG9jYWwvYmluIGlzIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aGVyZSBQeXRob24gaXMKKy0jIGluc3RhbGxlZCwgc28gL3Vzci9iaW4vZW52IHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHB5dGhvbi4gIEdyYW50ZWQsCistIyBiaW5hcnkgaW5zdGFsbGF0aW9ucyBieSBMaW51eCB2ZW5kb3JzIG9mdGVuIGluc3RhbGwgUHl0aG9uIGluCistIyAvdXNyL2Jpbi4gIFNvIGxldCB0aG9zZSB2ZW5kb3JzIHBhdGNoIGNnaS5weSB0byBtYXRjaCB0aGVpciBjaG9pY2UKKy0jIG9mIGluc3RhbGxhdGlvbi4KKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgCisgIiIiU3VwcG9ydCBtb2R1bGUgZm9yIENHSSAoQ29tbW9uIEdhdGV3YXkgSW50ZXJmYWNlKSBzY3JpcHRzLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2MmRiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorQXV0aG9yOiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitEYXRlOiAgIFN1biBNYXIgMjUgMDI6MDI6MjcgMjAxMiArMDIwMAorCitUaGlzIHBhdGNoIHdhcyBhZGRlZCBmb3IgNjRiaXQgaG9zdCBtYWNoaW5lcy4gSW4gdGhlIGNvbXBpbGUgcHJvY2VzcyBweXRob24KK2lzIGNoZWNraW5nIGlmIHBsYXRmb3JtIGlzIGEgNjRiaXQgcGxhdGZvcm0gdXNpbmcgc3lzLm1heGludCB3aGljaCBpcyB0aGUgaG9zdCdzCit2YWx1ZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgaXNzdWUgc28gdGhhdCBweXRob24gd291bGQgY2hlY2sgaWYgVEFSR0VUIG1hY2hpbmUKK2lzIDY0Yml0IG5vdCB0aGUgSE9TVCBtYWNoaW5lLiBJbiB0aGlzIHdheSB3aWxsIGhhdmUgImRsIiBhbmQgImltYWdlb3AiIG1vZHVsZXMKK2J1aWx0IGlmIEhPU1QgbWFjaGluZSBpcyA2NGJpdCBidXQgdGhlIHRhcmdldCBtYWNoaW5lIGlzIDMyYml0LgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wMy0yNSAwMToxMDo0MS41NDAxNjMxODcgKzAyMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wMy0yNSAwMToyNjowNi4wOTI1Mzk5OTAgKzAyMDAKK0BAIC0yMyw2ICsyMywyMSBAQAorICMgVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCB0byBob2xkIHRoZSBsaXN0IG9mIG1vZHVsZXMgdG8gYmUgZGlzYWJsZWQuCisgZGlzYWJsZWRfbW9kdWxlX2xpc3QgPSBbXQorIAorK2RlZiB0YXJnZXRfaXNfNjRiaXRfcGxhdGZvcm0gKCk6CisrICAgICIiIgorKyAgICBJbiBjYXNlIG9mIGNyb3NzLWNvbXBpbGUsIHNvbWUgbW9kdWxlcyBhcmUgbm90IGJ1aWxkIGFzIHNldHVwIGNoZWNrcyBpZiBIT1NUCisrICAgIGlzIDY0Yml0IGFuZCBub3QgVEFSR0VULgorKyAgICBBcyBweXRob24gd2FzIGJ1aWx0IGZvciBUQVJHRVQgd2UgY2FuIGNoZWNrIHRoaXMgaW4gcHljb25maWcuaCBpbiB0aGlzIHdheToKKysJU2l6ZW9mIExPTkcgb24gYSAzMiBiaXQgcGxhdGZvcm0gaXMgNCBieXRlcworKwlTaXplb2YgTE9ORyBvbiBhIDY0IGJpdCBwbGF0Zm9ybSBpcyA4IGJ5dGVzCisrICAgICIiIgorKyAgICBweWNvbmYgPSBvcGVuKCJweWNvbmZpZy5oIikucmVhZCgpCisrICAgIGF1eCA9IHJlLnNlYXJjaChyIiNzKmRlZmluZVxzK1NJWkVPRl9MT05HXHMrOFxzKiIsIHB5Y29uZikKKysgICAgaWYgYXV4IGlzIG5vdCBOb25lOgorKwlyZXR1cm4gVHJ1ZQorKyAgICBlbHNlOgorKwlyZXR1cm4gRmFsc2UKKysKKyBkZWYgYWRkX2Rpcl90b19saXN0KGRpcmxpc3QsIGRpcik6CisgICAgICIiIkFkZCB0aGUgZGlyZWN0b3J5ICdkaXInIHRvIHRoZSBsaXN0ICdkaXJsaXN0JyAoYXQgdGhlIGZyb250KSBpZgorICAgICAxKSAnZGlyJyBpcyBub3QgYWxyZWFkeSBpbiAnZGlybGlzdCcKK0BAIC02MjgsNyArNjQzLDcgQEAKKyAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2F1ZGlvb3AnLCBbJ2F1ZGlvb3AuYyddKSApCisgCisgICAgICAgICAjIERpc2FibGVkIG9uIDY0LWJpdCBwbGF0Zm9ybXMKKy0gICAgICAgIGlmIHN5cy5tYXhpbnQgIT0gOTIyMzM3MjAzNjg1NDc3NTgwN0w6CisrICAgICAgICBpZiBub3QgdGFyZ2V0X2lzXzY0Yml0X3BsYXRmb3JtKCk6CisgICAgICAgICAgICAgIyBPcGVyYXRpb25zIG9uIGltYWdlcworICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2ltYWdlb3AnLCBbJ2ltYWdlb3AuYyddKSApCisgICAgICAgICBlbHNlOgorQEAgLTE0MTgsNyArMTQzMyw3IEBACisgICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfY29kZWNzXyVzJyAlIGxvYykKKyAKKyAgICAgICAgICMgRHluYW1pYyBsb2FkaW5nIG1vZHVsZQorLSAgICAgICAgaWYgc3lzLm1heGludCA9PSAweDdmZmZmZmZmOgorKyAgICAgICAgaWYgbm90IHRhcmdldF9pc182NGJpdF9wbGF0Zm9ybSgpOgorICAgICAgICAgICAgICMgVGhpcyByZXF1aXJlcyBzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZykgPT0gc2l6ZW9mKGNoYXIqKQorICAgICAgICAgICAgIGRsX2luYyA9IGZpbmRfZmlsZSgnZGxmY24uaCcsIFtdLCBpbmNfZGlycykKKyAgICAgICAgICAgICBpZiAoZGxfaW5jIGlzIG5vdCBOb25lKSBhbmQgKHBsYXRmb3JtIG5vdCBpbiBbJ2F0aGVvcyddKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeC1tYWtlZmlsZS1mb3ItcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTExMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCAnYnVpbGQtdGVzdCcgYW5kICdydW50ZXN0LVRFU1RTJyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtcnVOIGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCistLS0gYS9NYWtlZmlsZS5wcmUuaW4JMjAxMy0wNi0yNyAxMDo0NDoxMS4wMzM4NDA1MzIgKzAyMDAKKysrKyBiL01ha2VmaWxlLnByZS5pbgkyMDEzLTA2LTI3IDEwOjQ0OjM5LjU3MjYzNTI3MyArMDIwMAorQEAgLTcwOSwxNCArNzA5LDE5IEBACisgIyBnZW5lcmF0ZWQgYnl0ZWNvZGUuICBUaGlzIGlzIHNvbWV0aW1lcyBhIHZlcnkgc2h5IGJ1ZyBuZWVkaW5nIGEgbG90IG9mCisgIyBzYW1wbGUgZGF0YS4KKyAKKy1URVNUT1BUUz0JLWwgJChFWFRSQVRFU1RPUFRTKQorK1RFU1RPUFRTPQktbCAtdiAkKEVYVFJBVEVTVE9QVFMpCisgVEVTVFBST0c9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQorLVRFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1XZCAtMyAtRSAtdHQgJChURVNUUFlUSE9OT1BUUykKKy10ZXN0OgkJYWxsIHBsYXRmb3JtCistCQktZmluZCAkKHNyY2RpcikvTGliIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKKytURVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgJChCVUlMRFBZVEhPTikgLVdkIC0zIC1FIC10dCAkKFRFU1RQWVRIT05PUFRTKQorK3Rlc3Q6CQlidWlsZC10ZXN0CisrCQkkKE1BS0UpIHJ1bnRlc3QtVEVTVFMKKysKKytydW50ZXN0LVRFU1RTOgorKwkJLWZpbmQgJChzcmNkaXIpIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKKyAJCS0kKFRFU1RQWVRIT04pICQoVEVTVFBST0cpICQoVEVTVE9QVFMpCisgCQkkKFRFU1RQWVRIT04pICQoVEVTVFBST0cpICQoVEVTVE9QVFMpCisgCisrYnVpbGQtdGVzdDoJYWxsIHBsYXRmb3JtCisrCisgdGVzdGFsbDoJYWxsIHBsYXRmb3JtCisgCQktZmluZCAkKHNyY2RpcikvTGliIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKKyAJCSQoVEVTVFBZVEhPTikgJChzcmNkaXIpL0xpYi9jb21waWxlYWxsLnB5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNjJkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaApAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIHNwZWNpZmljXQorCitUaGlzIHBhdGNoIGZpeGVzIGlzc3Vpbmcgd2l0aCBkaWZmZXJlbnQgbGliZGlyIGxpa2UgbGliNjQuCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBuYXRpdmUgcHl0aG9uIGJpbmFyeSBtb2R1bGVzIGZpbmRhYmxlCitpbiB0aGUgaW5zdGFsbCBwcm9jZXNzIG9mIHRoZSBob3N0IHB5dGhvbi4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDMvMTQKKworVXBkYXRlZCBmb3IgcHl0aG9uIDIuNy4zCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wNS8wMQorCitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorQEAgLTksNyArOSw3IEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CisgICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3twbGF0YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorQEAgLTY3LDcgKzY3LDcgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CisgICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTEwNDYsMjcgKzEwNDYsMjcgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAorIAkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9Nb2R1bGVzL3h4bW9kdWxlLmMgXAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKy0JUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKysJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorLQlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9JChSVU5TSEFSRUQpIFwKKyAJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisgCisgIyBDcmVhdGUgdGhlIFBMQVRESVIgc291cmNlIGRpcmVjdG9yeSwgaWYgb25lIHdhc24ndCBkaXN0cmlidXRlZC4uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYWFmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACit3aGVuIGJ1aWxkaW5nIHB5dGhvbiBmb3IgcWVtdXg4Ni02NCBvbiB1YnVudHUgMTEuMTAvNjRiaXQKK2l0IGdyb3BlcyBpbnRvIGhvc3QgaW5jbHVkZXMgYW5kIHRoZW4gbWl4ZXMgdGhlbSB3aXRoIGNyb3NzCitpbmNsdWRlcyBhbmQgYXMgYSByZXN1bHQgc29tZSBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSBhbmQgbGluaworb25lIG9mIHRoZSBtb2R1bGVzIGlzIHB5dGhvbi1lbGVtZW50dHJlZSB3aGljaCBpcyB0aGVuIG5vdAorZm91bmQgZHVyaW5nIGltYWdlIGNyZWF0aW9uCisKK1Byb2JsZSBpcyB0aGF0IHNldHVwLnB5IHRyaWVzIHRvIGFkZCBuYXRpdmUgaW5jbHVkZXMgdGhhdCBuZXdlcgordWJ1bnR1IGhhcyBpbnRyb2R1Y2VkIGZvciBtdWx0aWFyY2ggc3VwcG9ydC4gQnV0IHRoYXQgc2hvdWxkCitvbmx5IGhhcHBlbiBmb3IgbmF0aXZlIGJ1aWxkcyBhbmQgbm90IGNyb3NzIGJ1aWxkaW5nIHB5dGhvbgorc28gd2UgYWRkIGEgY2hlY2sgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBiYTJkMjQyLi5iZjg1OWJlIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMzkzLDYgKzM5Myw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgICAgIGlmIG5vdCBmaW5kX2V4ZWN1dGFibGUoJ2Rwa2ctYXJjaGl0ZWN0dXJlJyk6CisgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnQ1JPU1NfQ09NUElMRScpIGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgb3B0ID0gJycKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBvcHQgPSAnLXQnICsgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdIT1NUX0dOVV9UWVBFJykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmYTBkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoCkBAIC0wLDAgKzEsMjk2IEBACitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0BAIC03MzYsNiArNzM2LDEwIEBAIFN1bk9TKikKKyAgICAgOzsKKyBlc2FjCisgCisrQUNfU1VCU1QoTElCKQorK0FDX01TR19DSEVDS0lORyhMSUIpCisrTElCPWBiYXNlbmFtZSAke2xpYmRpcn1gCisrQUNfTVNHX1JFU1VMVCgkTElCKQorIAorIEFDX1NVQlNUKExJQlJBUlkpCisgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCitJbmRleDogUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKK0BAIC0xMDgsNiArMTA4LDcgQEAgUHlBUElfRlVOQyhjaGFyICopIFB5X0dldFBhdGgodm9pZCk7CisgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRMaWIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEJ1aWxkSW5mbyh2b2lkKTsKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorQEAgLTIyLDYgKzIyLDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKKyBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorIAorIAorK2xpYm5hbWUgPSBzeXMubGliCisrCisgaWYgc3lzLnZlcnNpb24gPCAiMi4yIjoKKyAgICAgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZScsCitAQCAtNDIsNyArNDQsNyBAQCBlbHNlOgorIElOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3VuaXhfcHJlZml4JzogeworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS8nK2xpYm5hbWUrJy9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCisgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtMTE5LDggKzExOSwxMSBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCisgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorLSAgICAgICAgbGlicHl0aG9uID0gb3MucGF0aC5qb2luKHByZWZpeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKysgICAgICAgIGlmIHBsYXRfc3BlY2lmaWMgb3Igc3RhbmRhcmRfbGliOgorKyAgICAgICAgICAgIGxpYiA9IHN5cy5saWIKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgbGliID0gImxpYiIKKysgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsIGxpYiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCisgICAgICAgICBlbHNlOgorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5CitAQCAtMzgzLDcgKzM4Myw3IEBAIGNsYXNzIERvYzoKKyAKKyAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkiKQorLSAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iK3N5cy52ZXJzaW9uWzA6M10pCisgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKKyAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5CitAQCAtMjg4LDEzICsyODgsMTggQEAgZGVmIGdldHNpdGVwYWNrYWdlcygpOgorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKKyAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorQEAgLTcsMTAgKzcsMTAgQEAgZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCisgCisgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7cGxhdGJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9iaW4nLAorQEAgLTY1LDEwICs2NSwxMCBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCisgICAgICAgICB9LAorICAgICAncG9zaXhfdXNlcic6IHsKKy0gICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorQEAgLTQsMTAgKzQsMTEgQEAKKyBpbXBvcnQgdW5pdHRlc3QKKyBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCisgZGwgPSBpbXBvcnRfbW9kdWxlKCdkbCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKytpbXBvcnQgc3lzCisgCisgc2hhcmVkbGlicyA9IFsKKy0gICAgKCcvdXNyL2xpYi9saWJjLnNvJywgJ2dldHBpZCcpLAorLSAgICAoJy9saWIvbGliYy5zby42JywgJ2dldHBpZCcpLAorKyAgICAoJy91c3IvJytzeXMubGliKycvbGliYy5zbycsICdnZXRwaWQnKSwKKysgICAgKCcvJytzeXMubGliKycvbGliYy5zby42JywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvYmluL2N5Z3dpbjEuZGxsJywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvbGliL2xpYmMuZHlsaWInLCAnZ2V0cGlkJyksCisgICAgIF0KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorQEAgLTI0MSwxMiArMjQxLDE2IEBAIGNsYXNzIEhlbHBlckZ1bmN0aW9uc1Rlc3RzKHVuaXR0ZXN0LlRlc3QKKyAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMl0sIHdhbnRlZCkKKyAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgICAgICAjIE9TIFggbm9uLWZyYW13ZXdvcmsgYnVpbGRzLCBMaW51eCwgRnJlZUJTRCwgZXRjCistICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ2xpYicsICdweXRob24nICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCistICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCisrICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRlZCBpbiBkaXJzKQorICAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAnc2l0ZS1weXRob24nKQorLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1sxXSwgd2FudGVkKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKysgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCBzeXMubGliLCAncHl0aG9uJyArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKysgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCBzeXMubGliLCAnc2l0ZS1weXRob24nKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgIyBvdGhlciBwbGF0Zm9ybXMKKyAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMikKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorQEAgLTc1NCwxMCArNzU0LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKKyAKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJHByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRleGVjX3ByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQorICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTg3LDYgKzg3LDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRworIAorICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKKyBNQUNIREVQPQlATUFDSERFUEAKKytMSUI9CQlATElCQAorIAorICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQorIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKK0BAIC0xMDYsNyArMTA3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKKyBNQU5ESVI9CQlAbWFuZGlyQAorIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAorIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCistU0NSSVBURElSPQkkKHByZWZpeCkvbGliCisrU0NSSVBURElSPQkkKHByZWZpeCkvQExJQkAKKyAKKyAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCisgQklOTElCREVTVD0JJChMSUJESVIpL3B5dGhvbiQoVkVSU0lPTikKK0BAIC01OTgsNiArNTk5LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAorIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKKyAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKKysJCS1ETElCPSciJChMSUIpIicgXAorIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCisgCisgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK0BAIC02NDAsNyArNjQyLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKKyBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCisgCisgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworLQkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtRExJQj0nIiQoTElCKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworIAorIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKyAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKK0luZGV4OiBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworQEAgLTExNiw5ICsxMTYsMTEgQEAKKyAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorICNlbmRpZgorIAorKyNkZWZpbmUgTElCX1BZVEhPTiBMSUIgIi9weXRob24iIFZFUlNJT04KKysKKyAjaWZuZGVmIFBZVEhPTlBBVEgKKy0jZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiOiIgXAorLSAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICIvbGliLWR5bmxvYWQiCisrI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiLyIgTElCX1BZVEhPTiAiOiIgXAorKyAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIExBTkRNQVJLCitAQCAtMTI5LDcgKzEzMSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKKy1zdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSAibGliL3B5dGhvbiIgVkVSU0lPTjsKKytzdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSBMSUJfUFlUSE9OOworIAorIHN0YXRpYyB2b2lkCisgcmVkdWNlKGNoYXIgKmRpcikKK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworQEAgLTEwLDMgKzEwLDEzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCisgeworIAlyZXR1cm4gUExBVEZPUk07CisgfQorKworKyNpZm5kZWYgTElCCisrI2RlZmluZSBMSUIgImxpYiIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRMaWIodm9pZCkKKyt7CisrCXJldHVybiBMSUI7CisrfQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCitAQCAtMTQzNyw2ICsxNDM3LDggQEAgX1B5U3lzX0luaXQodm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFBsYXRmb3JtKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkpKTsKKyAgICAgU0VUX1NZU19GUk9NX1NUUklORygicHJlZml4IiwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3BhcmFsbGVsLW1ha2VpbnN0LWNyZWF0ZS1iaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWNiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gdXNpbmcgbWFrZSAtaiB3aXRoIHRoZSAnaW5zdGFsbCcgdGFyZ2V0LCBpdCdzIHBvc3NpYmxlIGZvciBhbHRiaW5pbnN0YWxsCisod2hpY2ggbm9ybWFsbHkgY3JlYXRlcyBCSU5ESVIpIGFuZCBsaWJhaW5zdGFsbCAod2hpY2ggZG9lc24ndCwgdGhvdWdoIGl0CitpbnN0YWxscyBweXRob24tY29uZmlnIHRoZXJlKSB0byByYWNlLCByZXN1bHRpbmcgaW4gYSBmYWlsdXJlIGR1ZSB0bworYXR0ZW1wdGluZyB0byBpbnN0YWxsIHB5dGhvbi1jb25maWcgaW50byBhIG5vbmV4aXN0ZW50IEJJTkRJUi4gRW5zdXJlIGl0IGFsc28KK2V4aXN0cyBpbiB0aGUgbGliYWluc3RhbGwgdGFyZ2V0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIFB5dGhvbi0yLjcuMy5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuMy9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDA4LDcgKzEwMDgsNyBAQCBMSUJQTD0JCSQoTElCUCkvY29uZmlnCisgTElCUEM9CQkkKExJQkRJUikvcGtnY29uZmlnCisKKyBsaWJhaW5zdGFsbDoJYWxsIHB5dGhvbi1jb25maWcKKy0JQGZvciBpIGluICQoTElCRElSKSAkKExJQlApICQoTElCUEwpICQoTElCUEMpOyBcCisrCUBmb3IgaSBpbiAkKExJQkRJUikgJChMSUJQKSAkKExJQlBMKSAkKExJQlBDKSAkKEJJTkRJUik7IFwKKwlkbyBcCisJCWlmIHRlc3QgISAtZCAkKERFU1RESVIpJCRpOyB0aGVuIFwKKwkJCWVjaG8gIkNyZWF0aW5nIGRpcmVjdG9yeSAkJGkiOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YmUwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitSZW1vdmUgdGhlIFJQQVRIIHRvIGF2b2lkIFFBIGlzc3VlIHdhcm5pbmcuCisKK1JQOiBBZGRlZCBzZWNvbmRhcnkgdW5uZWNlc3NhcnkgcnBhdGggdG8gdGhlIGxpc3QgMjAxMi84LzcKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CisKKworSW5kZXg6IFB5dGhvbi0yLjcuMy9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMy5vcmlnL3NldHVwLnB5CTIwMTItMDgtMDcgMTA6NDE6NTguNTYwMTMyNTI5ICswMDAwCisrKysgUHl0aG9uLTIuNy4zL3NldHVwLnB5CTIwMTItMDgtMDcgMTE6MDk6NDcuODUyMDk0NTE1ICswMDAwCitAQCAtMTA0Miw3ICsxMDQyLDYgQEAKKyAgICAgICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oJ19ic2RkYicsIFsnX2JzZGRiLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9IFsnYnNkZGIuaCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1kYmxpYl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1kYl9pbmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9ZGJsaWJzKSkKKyAgICAgICAgIGVsc2U6CitAQCAtMTI1Miw3ICsxMjUxLDYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnVpbGRpbmcgZGJtIHVzaW5nIGJkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYm1leHQgPSBFeHRlbnNpb24oJ2RibScsIFsnZGJtbW9kdWxlLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPWRibGliX2RpciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9ZGJfaW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0hBVkVfQkVSS0RCX0gnLCBOb25lKSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY5ZWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisjCisjVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gcHl0aG9uIHRlc3Qgc3VpdGVzCisKK21ha2UgLWYgTElCRElSL3B5dGhvbi9wdGVzdC9NYWtlZmlsZSAtayBydW50ZXN0LVRFU1RTIHNyY2Rpcj1MSUJESVIvcHl0aG9uMi43IFRFU1RQUk9HPUxJQkRJUi9weXRob24yLjcvdGVzdC9yZWdydGVzdC5weSB8IHNlZCAtZSAnL1wuXC5cLiBvay8gcy9eL1BBU1M6IC9nJyAtZSAnL1wuXC5cLiBbRVJST1J8RkFJTF0vIHMvXi9GQUlMOiAvZycgLWUgJy9cLlwuXC4gc2tpcHBlZC8gcy9eL1NLSVA6IC9nJyAtZSAncy8gXC5cLlwuIG9rLy9nJyAtZSAncy8gXC5cLlwuIEVSUk9SLy9nJyAtZSAncy8gXC5cLlwuIEZBSUwvL2cnIC1lICdzLyBcLlwuXC4gc2tpcHBlZC8vZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjYjU1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK3B5dGhvbiBzaG91bGQgc2VhcmNoIGZvciBkYi5oIGluIGluY19kaXJzIGFuZCBub3QgaW4gYSBoYXJkY29kZWQgcGF0aC4KK0lmIGRiLmggaXMgZm91bmQgYnV0IEhBU0hWRVJTSU9OIGlzIG5vdCAyIHdlIGF2b2lkIGEgd2FybmluZyBieSBub3QgCithZGRpbmcgdGhpcyBtb2R1bGUgdG8gbWlzc2luZyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KKworCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggYjg4NzgwOC4uYWU1MTYwNyAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTEyMzcsNiArMTIzNyw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgdGhlIG1vcmUgcmVjZW50IGJlcmtlbGV5ZGIncyBkYi5oIGZpbGUgZmlyc3QgaW4gdGhlIGluY2x1ZGUgcGF0aAorICAgICAgICAgIyB3aGVuIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBhbmQgaXQgd2lsbCBmYWlsLgorICAgICAgICAgZiA9ICIvdXNyL2luY2x1ZGUvZGIuaCIKKysgICAgICAgIGlmIGxlbihpbmNfZGlycykgIT0gMDoKKysgICAgICAgICAgICBmID0gb3MucGF0aC5qb2luKGluY19kaXJzWzBdLCAiZGIuaCIpCisgCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIGlmIGlzX21hY29zeF9zZGtfcGF0aChmKToKK0BAIC0xMjU3LDggKzEyNTksMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1saWJyYXJpZXMpKQorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdic2RkYjE4NScsIFsnYnNkZGJtb2R1bGUuYyddKSkKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnYnNkZGIxODUnKQorKyAgICAgICAgICAgICMgSWYgYSBuZXdlciB2ZXJzaW9uIGlzIGRldGVjdGVkIGRvbid0IHJlcG9ydCBhbiB1c2VsZXNzCisrICAgICAgICAgICAgIyB3YXJuaW5nCisrICAgICAgICAgICAgI2Vsc2U6CisrICAgICAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnYnNkZGIxODUnKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnYnNkZGIxODUnKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NkYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVGhpcyBwYXRjaCBza2lwcyBvdmVyIHRoZSAnaW1wb3J0IGNoZWNrJyBzZXR1cC5weSBkb2VzIHdoZW4gYnVpbGRpbmcKK2V4dGVuc2lvbnMuICBUaGlzIGdlbmVyYWxseSB3b24ndCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMS0xMS0wNCAxNjo0NjozNC41NTM3OTY0MTAgLTA1MDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMS0xMS0wNCAxNjo1OTo0OS42OTI4MDIzMTMgLTA1MDAKK0BAIC0yODcsNiArMjg3LDE1IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXh0Lm5hbWUsIHN5cy5leGNfaW5mbygpWzFdKSkKKyAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCisgICAgICAgICAgICAgcmV0dXJuCisrCisrICAgICAgICAjIElmIHdlJ3JlIGNyb3NzLWNvbXBpbGluZywgd2Ugd2FudCB0byBza2lwIHRoZSBpbXBvcnQgY2hlY2sKKysgICAgICAgICMgaS5lLiB3ZSBzaG91bGRuJ3QgYmUgZHluYW1pY2FsbHkgbG9hZGluZyB0YXJnZXQgc2hhcmVkIGxpYnMKKysgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdDUk9TU19DT01QSUxFJykgaXMgbm90IE5vbmU6CisrICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgKKysgICAgICAgICAgICAgICAgJ1dBUk5JTkc6IHNraXBwaW5nIGltcG9ydCBjaGVjayBmb3IgY3Jvc3MtY29tcGlsZWQgIiVzIicgJQorKyAgICAgICAgICAgICAgICBleHQubmFtZSkKKysgICAgICAgICAgICByZXR1cm4KKysKKyAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgTWFjIE9TIFg6IFRoZSBDYXJib24tYmFzZWQgbW9kdWxlcyBjYW5ub3QgYmUKKyAgICAgICAgICMgcmVsaWFibHkgaW1wb3J0ZWQgaW50byBhIGNvbW1hbmQtbGluZSBQeXRob24KKyAgICAgICAgIGlmICdDYXJib24nIGluIGV4dC5leHRyYV9saW5rX2FyZ3M6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cHR3ZWFrcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cHR3ZWFrcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIHJlbW92ZXMgdmFyaW91cyB3YXlzIG5hdGl2ZSBzeXN0ZW0gb3B0aW9ucyBjYW4gcGFzcyBpbnRvIHRoZSBweXRob24gCitjb21waWxhdGlvbiBhbmQgc29tZWhvdyBicmVhayBDIG1vZHVsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTIvMDQvMjMKKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6NDcuMjk1NTgyNTUzICswMDAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDQtMjMgMjA6MDM6MTUuMDAwMDAwMDAwICswMDAwCitAQCAtMjMxLDcgKzIzMSwxMyBAQAorICAgICAgICAgIyBjb21waWxlcnMKKyAgICAgICAgIGlmIGNvbXBpbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorLSAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCisrICAgICAgICAgICAgIyBOZWVkIHRvIGZpbHRlciBvdXQgLWlzeXNyb290IGZyb20gdGhlIGZsYWdzLiBJZGVhbGx5IHNob3VsZCAKKysgICAgICAgICAgICAjIGZpZ3VyZSBvdXQgdGFyZ2V0IGZsYWdzIGhlcmUuCisrICAgICAgICAgICAgZmxhZ3MgPSBbXQorKyAgICAgICAgICAgIGZvciBmIGluIGNmbGFncy5zcGxpdCgpOgorKyAgICAgICAgICAgICAgICBpZiBub3QgZi5zdGFydHN3aXRoKCItaXN5c3RlbSIpOgorKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGYpCisrICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyAnICcuam9pbihmbGFncykKKyAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKKyAKKyAgICAgICAgIGJ1aWxkX2V4dC5idWlsZF9leHRlbnNpb25zKHNlbGYpCitAQCAtMzkzLDcgKzM5OSw2IEBACisgICAgICAgICAjIGludG8gY29uZmlndXJlIGFuZCBzdG9yZWQgaW4gdGhlIE1ha2VmaWxlIChpc3N1ZSBmb3VuZCBvbiBPUyBYIDEwLjMpLgorICAgICAgICAgZm9yIGVudl92YXIsIGFyZ19uYW1lLCBkaXJfbGlzdCBpbiAoCisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctUicsIHNlbGYuY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2RpcnMpLAorLSAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLUwnLCBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnQ1BQRkxBR1MnLCAnLUknLCBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycykpOgorICAgICAgICAgICAgIGVudl92YWwgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoZW52X3ZhcikKKyAgICAgICAgICAgICBpZiBlbnZfdmFsOgorQEAgLTQxOSwxNiArNDI0LDE2IEBACisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCistICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKysjICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCisrIyAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICAjIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkIChpc3N1ZSAjNzQ3MykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKysjICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisgCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgaGF2ZV91bmljb2RlID0gdW5pY29kZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2l0ZWN1c3RvbWl6ZS5weSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczOTAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkKQEAgLTAsMCArMSw0NSBAQAorIyBPcGVuRW1iZWRkZWQgc2l0ZWN1c3RvbWl6ZS5weSAoQykgMjAwMi0yMDA4IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBHUEx2MiBvciBsYXRlcgorIyBWZXJzaW9uOiAyMDA4MTEyMworIyBGZWF0dXJlczoKKyMgKiBzZXQgcHJvcGVyIGRlZmF1bHQgZW5jb2RpbmcKKyMgKiBlbmFibGUgcmVhZGxpbmUgY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyMgKiBsb2FkIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIHN0YXJ0dXAKKyMgKiBzYXZlIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIGV4aXQgCisKK2ltcG9ydCBvcworCitkZWYgX19leGl0aGFuZGxlcigpOgorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpOgorICAgIGltcG9ydCBhdGV4aXQKKyAgICBhdGV4aXQucmVnaXN0ZXIoIF9fZXhpdGhhbmRsZXIgKQorCitkZWYgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKToKKyAgICByZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGgoIDEwMDAgKQorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCAidGFiOiBjb21wbGV0ZSIgKQorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgX19lbmFibGVEZWZhdWx0RW5jb2RpbmcoKToKKyAgICBpbXBvcnQgc3lzCisgICAgdHJ5OgorICAgICAgICBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCAidXRmOCIgKQorICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgcGFzcworCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgX19lbmFibGVEZWZhdWx0RW5jb2RpbmcoKQorICAgIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpCisgICAgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzY1Nzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUHl0aG9uIHRyaWVzIHRvIHVzZSBuY3Vyc2VzdyBmcm9tIHRoZSBob3N0LAoraWYgaXQgaXMgbm90IGZvdW5kIGNhdXNlcyBhbiBlcnJvciBvbiBjb25maWd1cmUsCit3ZSBzaG91bGQgdXNlIG5jdXJzZXN3IGZyb20gc3lzcm9vdCBpbnN0ZWFkCisKKworU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworQEAgLTQzMTEsNyArNDMxMSw3IEBAIGZpCisgCisgIyBmaXJzdCBjdXJzZXMgY29uZmlndXJlIGNoZWNrCisgYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgorLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAtST0vdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhjdXJzZXMuaCBuY3Vyc2VzLmgpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtbmF0aXZlXzMuNC4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRmZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYgpAQCAtMCwwICsxLDc2IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKKworUFIgPSAiJHtJTkNfUFJ9LjAiCitQWVRIT05fTUFKTUlOID0gIjMuNCIKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAorZmlsZTovLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBcCitmaWxlOi8vcHl0aG9uLWNvbmZpZy5wYXRjaCBcCitmaWxlOi8vMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggXAorZmlsZTovLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoIFwKK2ZpbGU6Ly8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggXAorZmlsZTovLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2ggXAorZmlsZTovLzExMC1lbmFibGUtemxpYi5wYXRjaCBcCitmaWxlOi8vMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIFwKK2ZpbGU6Ly8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBcCitmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCitmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKK2ZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorZmlsZTovL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2ggXAorZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCitmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAorZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorZmlsZTovL21ha2VyYWNlLnBhdGNoIFwKKyR7RElTVFJPX1NSQ19VUkl9IFwKK2ZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAorZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiN2QwOTJkMWJiYTZlMTdmMGQ5YmQyMWI0OWU0NDFkZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjViMzk2MzUzMzc2OGQ1ZmMzMjVhNGQ3YTZiZDZmNjY2NzI2MDAyZDY5NmYxZDM5OWVjMDZiMDQzZWE5OTZiOCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGQ5OGQwMWQ0NzFmYWM4ZDhkYmRkOTc1MjI5ZGJhMDMiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK0VYVFJBTkFUSVZFUEFUSCArPSAiYnppcDItbmF0aXZlIgorREVQRU5EUyA9ICJvcGVuc3NsLW5hdGl2ZSBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUgemxpYi1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCitSUFJPVklERVMgKz0gInB5dGhvbjMtZGlzdHV0aWxzLW5hdGl2ZSBweXRob24zLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24zLXRleHR1dGlscy1uYXRpdmUgcHl0aG9uMy1jb3JlLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1iaW5kaXI9JHtiaW5kaXJ9LyR7UE59IC0td2l0aG91dC1lbnN1cmVwaXAiCisKK0VYVFJBX09FTUFLRSA9ICdcCisgIEJVSUxEX1NZUz0iIiBcCisgIEhPU1RfU1lTPSIiIFwKKyAgTElCQz0iIiBcCisgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSBcCisgIExJQj0ke2Jhc2VsaWJ9IFwKKyAgQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisnCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8ke1BOfQorCWluc3RhbGwgLW0gMDc1NSBQYXJzZXIvcGdlbiAke0R9JHtiaW5kaXJ9LyR7UE59CisKKwkjIE1ha2Ugc3VyZSB3ZSB1c2UgL3Vzci9iaW4vZW52IHB5dGhvbgorCWZvciBQWVRIU0NSSVBUIGluIGBncmVwIC1ySWwgJHtiaW5kaXJ9LyR7UE59L3B5dGhvbiAke0R9JHtiaW5kaXJ9LyR7UE59YDsgZG8KKwkJc2VkIC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob24zfCcgJFBZVEhTQ1JJUFQKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtcGlwXzYuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZjMzBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlRoZSBQeVBBIHJlY29tbWVuZGVkIHRvb2wgZm9yIGluc3RhbGxpbmcgUHl0aG9uIHBhY2thZ2VzIgorc0hPTUVQQUdFc3NzID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGlwIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT00NTY2NWI1MzAzMmMwMmIzNWUyOWRkYWI4ZTYxZmE5MSIKKworU1JDTkFNRSA9ICJwaXAiCitERVBFTkRTICs9ICJweXRob24zIHB5dGhvbjMtc2V0dXB0b29scy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiIFwKKyAgaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvcC8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YjE5ZTBhOTM0ZDk4MmE1YTRiNzk4ZTk1N2NiNmQ0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4OWYzYjYyNmQyMjVlMDhlN2YyMGQ4NTA0NGFmYTQwZjYxMmViMzI4NDQ4NDE2OTgxM2RjMmQwNjMxZjJhNTU2IgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMzCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworfQorCisjIFVzZSBzZXR1cHRvb2xzIHNpdGUucHkgaW5zdGVhZCwgYXZvaWQgc2hhcmVkIHN0YXRlIGlzc3VlCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvc2l0ZS5weQorICAgIHJtICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcy9fX3B5Y2FjaGVfXy9zaXRlLmNweXRob24tMzQucHljCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uMy1jb21waWxlIFwKKyAgcHl0aG9uMy1pbyBcCisgIHB5dGhvbjMtanNvbiBcCisgIHB5dGhvbjMtbmV0c2VydmVyIFwKKyAgcHl0aG9uMy1zZXR1cHRvb2xzIFwKKyAgcHl0aG9uMy11bml4YWRtaW4gXAorICBweXRob24zLXhtbHJwYyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMtc2V0dXB0b29sc18xOC4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBhYzgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkRvd25sb2FkLCBidWlsZCwgaW5zdGFsbCwgdXBncmFkZSwgYW5kIHVuaW5zdGFsbCBQeXRob24gcGFja2FnZXMiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMucHl0aG9uLm9yZy9zZXR1cHRvb2xzIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NldHVwLnB5O2JlZ2lubGluZT03ODtlbmRsaW5lPTc4O21kNT04YTMxNDI3MGRkN2E4ZGJjYTc0MTc3NTQxNWYxNzE2ZSIKKworU1JDTkFNRSA9ICJzZXR1cHRvb2xzIgorREVQRU5EUyArPSAicHl0aG9uMyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJweXRob24zLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIgXAorICBodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zLyR7U1JDTkFNRX0vJHtTUkNOQU1FfS0ke1BWfS50YXIuZ3ogXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjUyYjRlNDg5MzllZjMxMWQ3MjA0ZjhmZTk0MDc2NGY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA5OTRhNThkZjI3ZWE1ZGM1MjM3ODJhNjAxMzU3YTIxOThiNzQ5M2RjYzk5YTMwZDUxODI3YTIzNTg1YjViMWQiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlsczMKKworRElTVFVUSUxTX0lOU1RBTExfQVJHUyArPSAiLS1pbnN0YWxsLWxpYj0ke0R9JHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcyIKKworZG9faW5zdGFsbF9wcmVwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzCit9CisjCisjICBUaGUgaW5zdGFsbGVyIHB1dHMgdGhlIHdyb25nIHBhdGggaW4gdGhlIHNldHVwdG9vbHMucHRoIGZpbGUuICBDb3JyZWN0IGl0LgorIworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCisgICAgbXYgJHtEfSR7YmluZGlyfS9lYXN5X2luc3RhbGwgJHtEfSR7YmluZGlyfS9lYXN5M19pbnN0YWxsCisgICAgZWNobyAiLi8ke1NSQ05BTUV9LSR7UFZ9LXB5JHtQWVRIT05fQkFTRVZFUlNJT059LmVnZyIgPiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vc2V0dXB0b29scy5wdGgKK30KKworUkRFUEVORFNfJHtQTn0gPSAiXAorICBweXRob24zLWRpc3R1dGlscyBcCisgIHB5dGhvbjMtY29tcHJlc3Npb24gXAorIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIlwKKyAgcHl0aG9uMy1jdHlwZXMgXAorICBweXRob24zLWRpc3R1dGlscyBcCisgIHB5dGhvbjMtZW1haWwgXAorICBweXRob24zLWltcG9ydGxpYiBcCisgIHB5dGhvbjMtbnVtYmVycyBcCisgIHB5dGhvbjMtY29tcHJlc3Npb24gXAorICBweXRob24zLXNoZWxsIFwKKyAgcHl0aG9uMy1zdWJwcm9jZXNzIFwKKyAgcHl0aG9uMy10ZXh0dXRpbHMgXAorICBweXRob24zLXBrZ3V0aWwgXAorICBweXRob24zLXRocmVhZGluZyBcCisgIHB5dGhvbjMtbWlzYyBcCisgIHB5dGhvbjMtdW5pdHRlc3QgXAorICBweXRob24zLXhtbCBcCisiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA2YTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK1dlIGNyb3NzIGNvbXBpbGUgcHl0aG9uLiBUaGlzIHBhdGNoIHVzZXMgdG9vbHMgZnJvbSBob3N0L25hdGl2ZQorcHl0aG9uIGluc3RlYWQgb2YgaW4tdHJlZSB0b29scworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbQ29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworLS0tCisgTWFrZWZpbGUucHJlLmluIHwgICAyNSArKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCistLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrKyBiL01ha2VmaWxlLnByZS5pbgorQEAgLTE5Myw2ICsxOTMsNyBAQCBMSUJPQkpTPQlATElCT0JKU0AKKyAKKyBQWVRIT049CQlweXRob24kKEVYRSkKKyBCVUlMRFBZVEhPTj0JcHl0aG9uJChCVUlMREVYRSkKKytIT1NUUFlUSE9OPQkkKEJVSUxEUFlUSE9OKQorIAorIFBZVEhPTl9GT1JfQlVJTEQ9QFBZVEhPTl9GT1JfQlVJTERACisgX1BZVEhPTl9IT1NUX1BMQVRGT1JNPUBfUFlUSE9OX0hPU1RfUExBVEZPUk1ACitAQCAtMjM5LDYgKzI0MCw3IEBAIExJQkZGSV9JTkNMVURFRElSPQlATElCRkZJX0lOQ0xVREVESVJACisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFBhcnNlcgorIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQorK0hPU1RQR0VOPQkkKFBHRU4pJChFWEUpCisgCisgUFNSQ1M9CQlcCisgCQlQYXJzZXIvYWNjZWxlci5jIFwKK0BAIC00NTEsNyArNDUzLDcgQEAgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGU6CisgCisgcnVuX3Byb2ZpbGVfdGFzazoKKyAJOiAjIEZJWE1FOiBjYW4ndCBydW4gZm9yIGEgY3Jvc3MgYnVpbGQKKy0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChQUk9GSUxFX1RBU0spCisrCSQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoUFJPRklMRV9UQVNLKQorIAorIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKKyAJJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKK0BAIC02NDAsNyArNjQyLDcgQEAgJChJT19PQkpTKTogJChJT19IKQorICQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJQCQoTUtESVJfUCkgSW5jbHVkZQorIAkJJChNQUtFKSAkKFBHRU4pCistCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorKwkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorIAkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorQEAgLTgyMCw3ICs4MjIsNyBAQCAkKExJQlJBUllfT0JKUykgJChNT0RPQkpTKSBNb2R1bGVzL3B5dGhvCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAorIFRFU1RPUFRTPQkkKEVYVFJBVEVTVE9QVFMpCistVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChURVNUUFlUSE9OT1BUUykKKytURVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKFRFU1RQWVRIT05PUFRTKQorIFRFU1RSVU5ORVI9CSQoVEVTVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcnVuX3Rlc3RzLnB5CisgVEVTVFRJTUVPVVQ9CTM2MDAKKyAKK0BAIC0xMjI5LDcgKzEyMzEsNyBAQCBmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlOgkkKExETElCUkFSWSkKKyAJCWZpOyBcCisgCWRvbmUKKyAJJChMTikgLWZzbiBpbmNsdWRlL3B5dGhvbiQoTERWRVJTSU9OKSAkKERFU1RESVIpJChwcmVmaXgpL0hlYWRlcnMKKy0Jc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtYyAnaW1wb3J0IHBsYXRmb3JtOyBwcmludChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpKSdgIicvZycgPCAkKFJFU1NSQ0RJUikvSW5mby5wbGlzdCA+ICQoREVTVERJUikkKHByZWZpeCkvUmVzb3VyY2VzL0luZm8ucGxpc3QKKysJc2VkICdzLyVWRVJTSU9OJS8nImAkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAtYyAnaW1wb3J0IHBsYXRmb3JtOyBwcmludChwbGF0Zm9ybS5weXRob25fdmVyc2lvbigpKSdgIicvZycgPCAkKFJFU1NSQ0RJUikvSW5mby5wbGlzdCA+ICQoREVTVERJUikkKHByZWZpeCkvUmVzb3VyY2VzL0luZm8ucGxpc3QKKyAJJChMTikgLWZzbiAkKFZFUlNJT04pICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL1ZlcnNpb25zL0N1cnJlbnQKKyAJJChMTikgLWZzbiBWZXJzaW9ucy9DdXJyZW50LyQoUFlUSE9ORlJBTUVXT1JLKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS8kKFBZVEhPTkZSQU1FV09SSykKKyAJJChMTikgLWZzbiBWZXJzaW9ucy9DdXJyZW50L0hlYWRlcnMgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvSGVhZGVycworQEAgLTEyODgsNyArMTI5MCw3IEBAIGNvbmZpZy5zdGF0dXM6CSQoc3JjZGlyKS9jb25maWd1cmUKKyAKKyAjIFJ1biByZWluZGVudCBvbiB0aGUgbGlicmFyeQorIHJlaW5kZW50OgorLQkuLyQoQlVJTERQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IC1yICQoc3JjZGlyKS9MaWIKKysJJChIT1NUUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSAtciAkKHNyY2RpcikvTGliCisgCisgIyBSZXJ1biBjb25maWd1cmUgd2l0aCB0aGUgc2FtZSBvcHRpb25zIGFzIGl0IHdhcyBydW4gbGFzdCB0aW1lLAorICMgcHJvdmlkZWQgdGhlIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGV4aXN0cworQEAgLTE0MTQsNyArMTQxNiw3IEBAIGZ1bm55OgorIAorICMgUGVyZm9ybSBzb21lIHZlcmlmaWNhdGlvbiBjaGVja3Mgb24gYW55IG1vZGlmaWVkIGZpbGVzLgorIHBhdGNoY2hlY2s6CistCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKKysJJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQorIAorICMgRGVwZW5kZW5jaWVzCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwMS1oMnB5LUZpeC1pc3N1ZS0xMzAzMi13aGVyZS1pdC1mYWlscy13aXRoLVVuaWNvZGVEZWNvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDZiMjRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDJmNWE0YzcwOGQ5MGZhOGRiMjFmNDQ2YWU4NzljZmY3OTM4NzQ0OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyMCBNYXkgMjAxMyAyMTowMzoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBoMnB5OiBGaXggaXNzdWUgMTMwMzIgd2hlcmUgaXQgZmFpbHMgd2l0aCBVbmljb2RlRGVjb2RlRXJyb3IKKwordXNlIHV0Zi04IHRvIG9wZW4gdGhlIGZpbGVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgVG9vbHMvc2NyaXB0cy9oMnB5LnB5IHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weSBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQoraW5kZXggNGY4NzFkOS4uYTUzZmJlMCAxMDA3NTUKKy0tLSBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weQorKysrIGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CitAQCAtNjksMTMgKzY5LDEzIEBAIGRlZiBtYWluKCk6CisgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tIHN0ZGluXG4nKQorICAgICAgICAgICAgIHByb2Nlc3Moc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQorICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKKysgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgICBpID0gb3V0ZmlsZS5yZmluZCgnLicpCisgICAgICAgICAgICAgaWYgaSA+IDA6IG91dGZpbGUgPSBvdXRmaWxlWzppXQorICAgICAgICAgICAgIG1vZG5hbWUgPSBvdXRmaWxlLnVwcGVyKCkKKyAgICAgICAgICAgICBvdXRmaWxlID0gbW9kbmFtZSArICcucHknCistICAgICAgICAgICAgb3V0ZnAgPSBvcGVuKG91dGZpbGUsICd3JykKKysgICAgICAgICAgICBvdXRmcCA9IG9wZW4ob3V0ZmlsZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICAgICAgIG91dGZwLndyaXRlKCcjIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gJXNcbicgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgICBmaWxlZGljdCA9IHt9CisgICAgICAgICAgICAgZm9yIGRpciBpbiBzZWFyY2hkaXJzOgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2VmMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAyMC1kb250LWNvbXBpbGUtcHl0aG9uLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0RvbnQgY3Jvc3MgY29tcGlsZSBzaXRlIHBhY2thZ2VzCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtFbWJlZGRlZC1TcGVjaWZpY10KKworLS0tCisgTWFrZWZpbGUucHJlLmluIHwgICAxNiAtLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGRlbGV0aW9ucygtKQorCistLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrKyBiL01ha2VmaWxlLnByZS5pbgorQEAgLTEwNzgsMjQgKzEwNzgsNiBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCisgCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01vZHVsZXMveHhtb2R1bGUuYyBcCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKSAtZiBcCistCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKy0JCSQoREVTVERJUikkKExJQkRFU1QpCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkgLWYgXAorLQkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCistCQkkKERFU1RESVIpJChMSUJERVNUKQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorLQkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKy0JCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCistCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorIAkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIFdlIG5lZWQgdG8gc3VwcGx5IFNUQUdJTkdfSU5DRElSIGhlcmUsIG90aGVyd2lzZSB0aGUgVGsgaGVhZGVycworIyB3aWxsIG5vdCBiZSBmb3VuZC4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUuZGU+CisKK0luZGV4OiBQeXRob24tMy4zLjByYzIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9zZXR1cC5weQkyMDEyLTA5LTIwIDE1OjI0OjE0LjAwOTEyNDAwMyAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQkyMDEyLTA5LTIwIDE1OjI1OjA4LjQ0OTEyNDk2MyAtMDcwMAorQEAgLTE2MjAsNyArMTYyMCw3IEBACisgICAgICAgICAgICAgICAgIGRvdHZlcnNpb24gPSBkb3R2ZXJzaW9uWzotMV0gKyAnLicgKyBkb3R2ZXJzaW9uWy0xXQorICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiA9IFtdCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgPSBbXQorLSAgICAgICAgICAgIGZvciBkaXIgaW4gaW5jX2RpcnM6CisrICAgICAgICAgICAgZm9yIGRpciBpbiBbb3MuZ2V0ZW52KCJTVEFHSU5HX0lOQ0RJUiIpXToKKyAgICAgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGNsIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IFtkaXIgKyBvcy5zZXAgKyAidGsiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSB0Y2xfaW5jbHVkZV9zdWIKK0BAIC0xNjM5LDIyICsxNjM5LDYgQEAKKyAgICAgICAgICAgICBpZiBkaXIgbm90IGluIGluY2x1ZGVfZGlyczoKKyAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZChkaXIpCisgCistICAgICAgICAjIENoZWNrIGZvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9yaWVzCistICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdzdW5vczUnOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3Ivb3Blbndpbi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNi9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliNjQnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNi9saWInKQorLSAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9YMTFSNS9pbmNsdWRlJyk6CistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTFSNS9pbmNsdWRlJykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvbGliJykKKy0gICAgICAgIGVsc2U6CistICAgICAgICAgICAgIyBBc3N1bWUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgWDExCistICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMS9saWInKQorLQorICAgICAgICAgIyBJZiBDeWd3aW4sIHRoZW4gdmVyaWZ5IHRoYXQgWCBpcyBpbnN0YWxsZWQgYmVmb3JlIHByb2NlZWRpbmcKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgICAgICAgeDExX2luYyA9IGZpbmRfZmlsZSgnWDExL1hsaWIuaCcsIFtdLCBpbmNsdWRlX2RpcnMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMzAtZml4dXAtaW5jbHVkZS1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitEbyBub3QgaGFyZGNvZGUgL3VzciBpbnRvIGluY2x1ZGUgcGF0aHMgd2hlbiBjcm9zcyBjb21waWxpbmcKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisgCistLS0KKyBzZXR1cC5weSB8ICAgMTUgKystLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBQeXRob24tMy4zLjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjIub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0zLjMuMi9zZXR1cC5weQorQEAgLTQ0NCw3ICs0NDQsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIG9ubHkgY2hhbmdlIHRoaXMgZm9yIGNyb3NzIGJ1aWxkcyBmb3IgMy4zLCBpc3N1ZXMgb24gTWFnZWlhCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfZ2NjX3BhdGhzKCkKKy0gICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCisrICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCisgCisgICAgICAgICAjIEFkZCBwYXRocyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMREZMQUdTIGFuZAorICAgICAgICAgIyBDUFBGTEFHUyBmb3IgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzLgorQEAgLTQ4MCw3ICs0ODEsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkgIT0gJy91c3InIFwKKysgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmcgYW5kIG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KSAhPSAnL3VzcicgXAorICAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNC1kZWZhdWx0LWlzLW9wdGltaXplZC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjIHdoZW4gY29tcGlsaW5nIGZvciBhbiBlbWJlZGRlZCBzeXN0ZW0sIHdlIG5lZWQgZXZlcnkgYml0IG9mCisjIHBlcmZvcm1hbmNlIHdlIGNhbiBnZXQuIGRlZmF1bHQgdG8gb3B0aW1pemVkIHdpdGggdGhlIG9wdGlvbgorIyBvZiBvcHQtb3V0LgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKworCisyMDEyLzA1LzAxCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitSZWJhc2VkIGZvciAzLjQuMiAwMi8yMDE1CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9QeXRob24vY29tcGlsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvUHl0aG9uL2NvbXBpbGUuYworKysrIFB5dGhvbi0zLjQuMi9QeXRob24vY29tcGlsZS5jCitAQCAtMzAsNyArMzAsNyBAQAorICNpbmNsdWRlICJzeW10YWJsZS5oIgorICNpbmNsdWRlICJvcGNvZGUuaCIKKyAKKy1pbnQgUHlfT3B0aW1pemVGbGFnID0gMDsKKytpbnQgUHlfT3B0aW1pemVGbGFnID0gMTsKKyAKKyAjZGVmaW5lIERFRkFVTFRfQkxPQ0tfU0laRSAxNgorICNkZWZpbmUgREVGQVVMVF9CTE9DS1MgOAorSW5kZXg6IFB5dGhvbi0zLjQuMi9Nb2R1bGVzL21haW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL01vZHVsZXMvbWFpbi5jCisrKysgUHl0aG9uLTMuNC4yL01vZHVsZXMvbWFpbi5jCitAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgd2NoYXJfdCAqKm9yaWdfYXJndjsKKyBzdGF0aWMgaW50ICBvcmlnX2FyZ2M7CisgCisgLyogY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KKy0jZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk9xUnNTdHV2Vlc6eFg6PyIKKysjZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk5PcVJzU3R1dlZXOnhYOj8iCisgCisgI2RlZmluZSBQUk9HUkFNX09QVFMgQkFTRV9PUFRTCisgCitAQCAtNjQsNiArNjQsNyBAQCBzdGF0aWMgY2hhciAqdXNhZ2VfMiA9ICJcCisgLW0gbW9kIDogcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0KVxuXAorIC1PICAgICA6IG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZSBzbGlnaHRseTsgYWxzbyBQWVRIT05PUFRJTUlaRT14XG5cCisgLU9PICAgIDogcmVtb3ZlIGRvYy1zdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSAtTyBvcHRpbWl6YXRpb25zXG5cCisrLU4gICAgIDogZG8gTk9UIG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZVxuXAorIC1xICAgICA6IGRvbid0IHByaW50IHZlcnNpb24gYW5kIGNvcHlyaWdodCBtZXNzYWdlcyBvbiBpbnRlcmFjdGl2ZSBzdGFydHVwXG5cCisgLXMgICAgIDogZG9uJ3QgYWRkIHVzZXIgc2l0ZSBkaXJlY3RvcnkgdG8gc3lzLnBhdGg7IGFsc28gUFlUSE9OTk9VU0VSU0lURVxuXAorIC1TICAgICA6IGRvbid0IGltcGx5ICdpbXBvcnQgc2l0ZScgb24gaW5pdGlhbGl6YXRpb25cblwKK0BAIC00MTgsOCArNDE5LDggQEAgUHlfTWFpbihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpCisgCisgICAgICAgICAvKiBjYXNlICdKJzogcmVzZXJ2ZWQgZm9yIEp5dGhvbiAqLworIAorLSAgICAgICAgY2FzZSAnTyc6CistICAgICAgICAgICAgUHlfT3B0aW1pemVGbGFnKys7CisrICAgICAgICBjYXNlICdOJzoKKysgICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWc9MDsKKyAgICAgICAgICAgICBicmVhazsKKyAKKyAgICAgICAgIGNhc2UgJ0InOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5OTI5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorY29uc2lkZXIgb3BrZyBkaXJlY3RvcmllcyB3aGVuIGNsZWFuaW5nIHVwCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8ICAgIDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKysgYi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMzA2LDggKzEzMDYsOCBAQCB0b3VjaDoKKyAjIFNhbml0YXRpb24gdGFyZ2V0cyAtLSBjbGVhbiBsZWF2ZXMgbGlicmFyaWVzLCBleGVjdXRhYmxlcyBhbmQgdGFncworICMgZmlsZXMsIHdoaWNoIGNsb2JiZXIgcmVtb3ZlcyBhcyB3ZWxsCisgcHljcmVtb3ZhbDoKKy0JLWZpbmQgJChzcmNkaXIpIC1kZXB0aCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fSAnOycKKy0JLWZpbmQgJChzcmNkaXIpIC1uYW1lICcqLnB5W2NvXScgLWV4ZWMgcm0gLWYge30gJzsnCisrCS1maW5kICQoc3JjZGlyKSAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtZGVwdGggLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30gJzsnCisrCS1maW5kICQoc3JjZGlyKSAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5weVtjb10nIC1leGVjIHJtIC1mIHt9ICc7JworIAorIHJtdGVzdHR1cmRzOgorIAktcm0gLWYgKkJBRCAqR09PRCAqU0tJUFBFRAorQEAgLTEzMjEsOSArMTMyMSw5IEBAIGRvY2NsZWFuOgorIAktcm0gLXJmIERvYy90b29scy9zcGhpbnggRG9jL3Rvb2xzL3B5Z21lbnRzIERvYy90b29scy9kb2N1dGlscworIAorIGNsZWFuOiBweWNyZW1vdmFsCistCWZpbmQgLiAtbmFtZSAnKi5bb2FdJyAtZXhlYyBybSAtZiB7fSAnOycKKy0JZmluZCAuIC1uYW1lICcqLnNbb2xdJyAtZXhlYyBybSAtZiB7fSAnOycKKy0JZmluZCAuIC1uYW1lICcqLnNvLlswLTldKi5bMC05XSonIC1leGVjIHJtIC1mIHt9ICc7JworKwlmaW5kIC4gISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyouW29hXScgLWV4ZWMgcm0gLWYge30gJzsnCisrCWZpbmQgLiAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5zW29sXScgLWV4ZWMgcm0gLWYge30gJzsnCisrCWZpbmQgLiAhIC1wYXRoICcuL2lwa2ctaW5zdGFsbC8qJyAtbmFtZSAnKi5zby5bMC05XSouWzAtOV0qJyAtZXhlYyBybSAtZiB7fSAnOycKKyAJZmluZCBidWlsZCAtbmFtZSAnZmZpY29uZmlnLmgnIC1leGVjIHJtIC1mIHt9ICc7JyB8fCB0cnVlCisgCWZpbmQgYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5weScgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKKyAJLXJtIC1mIExpYi9saWIydG8zLypHcmFtbWFyKi5waWNrbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA4MC1kaXN0dXRpbHMtZG9udF9hZGp1c3RfZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2NDE5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsOTIgQEAKK2RvIG5vdCAiYWRqdXN0IiBweXRob24gZmlsZXMgYmVmb3JlIGNvcHlpbmcKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZC1TcGVjaWZpY10KKworLS0tCisgTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkgfCAgIDQzICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQorCistLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKK0BAIC01MSwxMCArNTEsNyBAQCBjbGFzcyBidWlsZF9zY3JpcHRzKENvbW1hbmQpOgorIAorIAorICAgICBkZWYgY29weV9zY3JpcHRzKHNlbGYpOgorLSAgICAgICAgIiIiQ29weSBlYWNoIHNjcmlwdCBsaXN0ZWQgaW4gJ3NlbGYuc2NyaXB0cyc7IGlmIGl0J3MgbWFya2VkIGFzIGEKKy0gICAgICAgIFB5dGhvbiBzY3JpcHQgaW4gdGhlIFVuaXggd2F5IChmaXJzdCBsaW5lIG1hdGNoZXMgJ2ZpcnN0X2xpbmVfcmUnLAorLSAgICAgICAgaWUuIHN0YXJ0cyB3aXRoICJcIyEiIGFuZCBjb250YWlucyAicHl0aG9uIiksIHRoZW4gYWRqdXN0IHRoZSBmaXJzdAorLSAgICAgICAgbGluZSB0byByZWZlciB0byB0aGUgY3VycmVudCBQeXRob24gaW50ZXJwcmV0ZXIgYXMgd2UgY29weS4KKysgICAgICAgICIiIkNvcHkgZWFjaCBzY3JpcHQgbGlzdGVkIGluICdzZWxmLnNjcmlwdHMnCisgICAgICAgICAiIiIKKyAgICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfZGlyKQorICAgICAgICAgb3V0ZmlsZXMgPSBbXQorQEAgLTc4LDY0ICs3NSwxMCBAQCBjbGFzcyBidWlsZF9zY3JpcHRzKENvbW1hbmQpOgorICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgZiA9IE5vbmUKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICBlbmNvZGluZywgbGluZXMgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZi5yZWFkbGluZSkKKy0gICAgICAgICAgICAgICAgZi5zZWVrKDApCistICAgICAgICAgICAgICAgIGZpcnN0X2xpbmUgPSBmLnJlYWRsaW5lKCkKKy0gICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0X2xpbmU6CistICAgICAgICAgICAgICAgICAgICBzZWxmLndhcm4oIiVzIGlzIGFuIGVtcHR5IGZpbGUgKHNraXBwaW5nKSIgJSBzY3JpcHQpCistICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLQorLSAgICAgICAgICAgICAgICBtYXRjaCA9IGZpcnN0X2xpbmVfcmUubWF0Y2goZmlyc3RfbGluZSkKKy0gICAgICAgICAgICAgICAgaWYgbWF0Y2g6CistICAgICAgICAgICAgICAgICAgICBhZGp1c3QgPSBUcnVlCistICAgICAgICAgICAgICAgICAgICBwb3N0X2ludGVycCA9IG1hdGNoLmdyb3VwKDEpIG9yIGInJworLQorLSAgICAgICAgICAgIGlmIGFkanVzdDoKKy0gICAgICAgICAgICAgICAgbG9nLmluZm8oImNvcHlpbmcgYW5kIGFkanVzdGluZyAlcyAtPiAlcyIsIHNjcmlwdCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZF9kaXIpCistICAgICAgICAgICAgICAgIHVwZGF0ZWRfZmlsZXMuYXBwZW5kKG91dGZpbGUpCistICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CistICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3lzY29uZmlnLnB5dGhvbl9idWlsZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gc2VsZi5leGVjdXRhYmxlCistICAgICAgICAgICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5wYXRoLmpvaW4oCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQklORElSIiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVzJXMiICUgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiVkVSU0lPTiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkVYRSIpKSkKKy0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5mc2VuY29kZShleGVjdXRhYmxlKQorLSAgICAgICAgICAgICAgICAgICAgc2hlYmFuZyA9IGIiIyEiICsgZXhlY3V0YWJsZSArIHBvc3RfaW50ZXJwICsgYiJcbiIKKy0gICAgICAgICAgICAgICAgICAgICMgUHl0aG9uIHBhcnNlciBzdGFydHMgdG8gcmVhZCBhIHNjcmlwdCB1c2luZyBVVEYtOCB1bnRpbAorLSAgICAgICAgICAgICAgICAgICAgIyBpdCBnZXRzIGEgI2NvZGluZzp4eHggY29va2llLiBUaGUgc2hlYmFuZyBoYXMgdG8gYmUgdGhlCistICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IGxpbmUgb2YgYSBmaWxlLCB0aGUgI2NvZGluZzp4eHggY29va2llIGNhbm5vdCBiZQorLSAgICAgICAgICAgICAgICAgICAgIyB3cml0dGVuIGJlZm9yZS4gU28gdGhlIHNoZWJhbmcgaGFzIHRvIGJlIGRlY29kYWJsZSBmcm9tCistICAgICAgICAgICAgICAgICAgICAjIFVURi04LgorLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWJhbmcuZGVjb2RlKCd1dGYtOCcpCistICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc2hlYmFuZyAoeyFyfSkgaXMgbm90IGRlY29kYWJsZSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIHV0Zi04Ii5mb3JtYXQoc2hlYmFuZykpCistICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSBzY3JpcHQgaXMgZW5jb2RlZCB0byBhIGN1c3RvbSBlbmNvZGluZyAodXNlIGEKKy0gICAgICAgICAgICAgICAgICAgICMgI2NvZGluZzp4eHggY29va2llKSwgdGhlIHNoZWJhbmcgaGFzIHRvIGJlIGRlY29kYWJsZSBmcm9tCistICAgICAgICAgICAgICAgICAgICAjIHRoZSBzY3JpcHQgZW5jb2RpbmcgdG9vLgorLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWJhbmcuZGVjb2RlKGVuY29kaW5nKQorLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHNoZWJhbmcgKHshcn0pIGlzIG5vdCBkZWNvZGFibGUgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB0aGUgc2NyaXB0IGVuY29kaW5nICh7fSkiCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2hlYmFuZywgZW5jb2RpbmcpKQorLSAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICJ3YiIpIGFzIG91dGY6CistICAgICAgICAgICAgICAgICAgICAgICAgb3V0Zi53cml0ZShzaGViYW5nKQorLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGVsaW5lcyhmLnJlYWRsaW5lcygpKQorLSAgICAgICAgICAgICAgICBpZiBmOgorLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgaWYgZjoKKysgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCistICAgICAgICAgICAgICAgIHVwZGF0ZWRfZmlsZXMuYXBwZW5kKG91dGZpbGUpCistICAgICAgICAgICAgICAgIHNlbGYuY29weV9maWxlKHNjcmlwdCwgb3V0ZmlsZSkKKysgICAgICAgICAgICB1cGRhdGVkX2ZpbGVzLmFwcGVuZChvdXRmaWxlKQorKyAgICAgICAgICAgIHNlbGYuY29weV9maWxlKHNjcmlwdCwgb3V0ZmlsZSkKKyAKKyAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgICBmb3IgZmlsZSBpbiBvdXRmaWxlczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTJhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK0VuYWJsZSB6bGliIGluIHB5dGhvbgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorCistLS0KKyBNb2R1bGVzL1NldHVwLmRpc3QgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysrIGIvTW9kdWxlcy9TZXR1cC5kaXN0CitAQCAtMzU0LDcgKzM1NCw3IEBAIF9zeW10YWJsZSBzeW10YWJsZW1vZHVsZS5jCisgIyBBbmRyZXcgS3VjaGxpbmcncyB6bGliIG1vZHVsZS4KKyAjIFRoaXMgcmVxdWlyZSB6bGliIDEuMS4zIChvciBsYXRlcikuCisgIyBTZWUgaHR0cDovL3d3dy5nemlwLm9yZy96bGliLworLSN6bGliIHpsaWJtb2R1bGUuYyAtSSQocHJlZml4KS9pbmNsdWRlIC1MJChleGVjX3ByZWZpeCkvbGliIC1segorK3psaWIgemxpYm1vZHVsZS5jIC1segorIAorICMgSW50ZXJmYWNlIHRvIHRoZSBFeHBhdCBYTUwgcGFyc2VyCisgIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworMDIvMjAxNSBSZWJhc2VkIGZvciBQeXRob24gMy40LjIKKworIyBUaGUgcHJvcGVyIHByZWZpeCBpcyBpbnNpZGUgb3VyIHN0YWdpbmcgYXJlYS4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisjIFNpZ25lZC1vZmYtYnk6IFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisjIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFNpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKK0BAIC0xNiwxMCArMTYsMTEgQEAgaW1wb3J0IHN5cworIGZyb20gLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgorIAorICMgVGhlc2UgYXJlIG5lZWRlZCBpbiBhIGNvdXBsZSBvZiBzcG90cywgc28ganVzdCBjb21wdXRlIHRoZW0gb25jZS4KKy1QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpCistRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKKy1CQVNFX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KQorLUJBU0VfRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX2V4ZWNfcHJlZml4KQorK1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0JBU0VfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrQkFTRV9FWEVDX1BSRUZJWD0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKysKKyAKKyAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5CisgIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCitAQCAtOTMsNyArOTQsOSBAQCBkZWYgZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wLCBwcmVmCisgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKKyAgICAgc3lzLmJhc2VfZXhlY19wcmVmaXggLS0gaS5lLiwgaWdub3JlICdwbGF0X3NwZWNpZmljJy4KKyAgICAgIiIiCistICAgIGlmIHByZWZpeCBpcyBOb25lOgorKyAgICBpZiBwcmVmaXggaXMgTm9uZSBhbmQgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXSAhPSAiIjoKKysgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10ucnN0cmlwKCdpbmNsdWRlJykKKysgICAgZWxpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEJBU0VfRVhFQ19QUkVGSVggb3IgQkFTRV9QUkVGSVgKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgorQEAgLTEzNCw2ICsxMzcsMTIgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgorICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLmJhc2VfcHJlZml4IG9yCisgICAgIHN5cy5iYXNlX2V4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorKyAgICBpZiBwcmVmaXggaXMgTm9uZSBhbmQgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSAhPSAiIjoKKysgICAgICAgIGxpYl9iYXNlbmFtZSA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10uc3BsaXQoJy8nKVstMV0KKysgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10ucnN0cmlwKGxpYl9iYXNlbmFtZSkKKysgICAgZWxzZToKKysgICAgICAgIGxpYl9iYXNlbmFtZSA9IHN5cy5saWIKKysKKyAgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgQkFTRV9FWEVDX1BSRUZJWCBvciBCQVNFX1BSRUZJWAorQEAgLTE0Miw3ICsxNTEsNyBAQCBkZWYgZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2Jhc2VuYW1lLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHJldHVybiBsaWJweXRob24KKyAgICAgICAgIGVsc2U6CitAQCAtMjQyLDcgKzI1MSw3IEBAIGRlZiBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKToKKyAgICAgZWxzZToKKyAgICAgICAgIGluY19kaXIgPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTEpCisgCistICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJy5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKSkKKyAKKyAKKyBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CitAQCAtMjUxLDcgKzI2MCw3IEBAIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKKyAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oX3N5c19ob21lIG9yIHByb2plY3RfYmFzZSwgIk1ha2VmaWxlIikKKyAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCisgICAgIGNvbmZpZ19maWxlID0gJ2NvbmZpZy17fXt9Jy5mb3JtYXQoZ2V0X3B5dGhvbl92ZXJzaW9uKCksIGJ1aWxkX2ZsYWdzKQorLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsIGNvbmZpZ19maWxlLCAnTWFrZWZpbGUnKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsIGNvbmZpZ19maWxlLCAnTWFrZWZpbGUnKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBwYXJzZV9jb25maWdfaChmcCwgZz1Ob25lKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDU2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2UgcHl0aG9uLXJlYWRsaW5lCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgU3BlY2lmaWNdCisKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTY2Niw0NSArNjY2LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyByZWFkbGluZQorICAgICAgICAgZG9fcmVhZGxpbmUgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAncmVhZGxpbmUnKQorICAgICAgICAgcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5ID0gIiIKKy0gICAgICAgIGN1cnNlc19saWJyYXJ5ID0gIiIKKy0gICAgICAgICMgQ2Fubm90IHVzZSBvcy5wb3BlbiBoZXJlIGluIHB5M2suCistICAgICAgICB0bXBmaWxlID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfdGVtcCwgJ3JlYWRsaW5lX3Rlcm1jYXBfbGliJykKKy0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX3RlbXApOgorLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuYnVpbGRfdGVtcCkKKy0gICAgICAgICMgRGV0ZXJtaW5lIGlmIHJlYWRsaW5lIGlzIGFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzIG9yIHRpbmZvLgorLSAgICAgICAgaWYgZG9fcmVhZGxpbmU6CistICAgICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorLSAgICAgICAgICAgICAgICByZXQgPSBvcy5zeXN0ZW0oIiVzIC1kICVzIHwgZ3JlcCAnKE5FRURFRCknID4gJXMiIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUkVBREVMRicpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fcmVhZGxpbmUsIHRtcGZpbGUpKQorLSAgICAgICAgICAgIGVsaWYgZmluZF9leGVjdXRhYmxlKCdsZGQnKToKKy0gICAgICAgICAgICAgICAgcmV0ID0gb3Muc3lzdGVtKCJsZGQgJXMgPiAlcyIgJSAoZG9fcmVhZGxpbmUsIHRtcGZpbGUpKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJldCA9IDI1NgorLSAgICAgICAgICAgIGlmIHJldCA+PiA4ID09IDA6CistICAgICAgICAgICAgICAgIHdpdGggb3Blbih0bXBmaWxlKSBhcyBmcDoKKy0gICAgICAgICAgICAgICAgICAgIGZvciBsbiBpbiBmcDoKKy0gICAgICAgICAgICAgICAgICAgICAgICBpZiAnY3Vyc2VzJyBpbiBsbjoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5ID0gcmUuc3ViKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicuKmxpYihuP2N1cnNlc3c/KVwuc28uKicsIHInXDEnLCBsbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnJzdHJpcCgpCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXJtY2FwIGludGVyZmFjZSBzcGxpdCBvdXQgZnJvbSBuY3Vyc2VzCistICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ3RpbmZvJyBpbiBsbjoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5ID0gJ3RpbmZvJworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcGZpbGUpOgorLSAgICAgICAgICAgICAgICBvcy51bmxpbmsodG1wZmlsZSkKKy0gICAgICAgICMgSXNzdWUgNzM4NDogSWYgcmVhZGxpbmUgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMsCistICAgICAgICAjIHVzZSB0aGUgc2FtZSBsaWJyYXJ5IGZvciB0aGUgcmVhZGxpbmUgYW5kIGN1cnNlcyBtb2R1bGVzLgorLSAgICAgICAgaWYgJ2N1cnNlcycgaW4gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5OgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5CistICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXN3JworLSAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlcycpOgorLSAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXMnCistICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdjdXJzZXMnKToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICdjdXJzZXMnCisrICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICJuY3Vyc2VzIgorIAorICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICBvc19yZWxlYXNlID0gaW50KG9zLnVuYW1lKClbMl0uc3BsaXQoJy4nKVswXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ3Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0ZpeCB3YXJuaW5nIHdpdGggbmV3ZXIgY29tcGlsZXIKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworQEAgLTExNiw3ICsxMTYsNyBAQCBjaGFyICpQeUN1cnNlc1ZlcnNpb24gPSAiMi4yIjsKKyAgICAgI2RlZmluZXMgbWFueSBjb21tb24gc3ltYm9scyAoc3VjaCBhcyAibGluZXMiKSB3aGljaCBicmVha3MgdGhlCisgICAgIGN1cnNlcyBtb2R1bGUgaW4gb3RoZXIgd2F5cy4gIFNvIHRoZSBjb2RlIHdpbGwganVzdCBzcGVjaWZ5CisgICAgIGV4cGxpY2l0IHByb3RvdHlwZXMgaGVyZS4gKi8KKy1leHRlcm4gaW50IHNldHVwdGVybShjaGFyICosaW50LGludCAqKTsKKysvL2V4dGVybiBpbnQgc2V0dXB0ZXJtKGNoYXIgKixpbnQsaW50ICopOworICNpZmRlZiBfX3NnaQorICNpbmNsdWRlIDx0ZXJtLmg+CisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjlhZTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHN5c3Jvb3QgaXMgdXNlZCBieSBnY2MgaW5zdGVhZCBvZiBhc3N1bWluZworaGFyZGNvZGVkIGxvY2F0aW9ucyBmb3IgaW5jbHVkZSBwYXRocworCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworQEAgLTQ0MzQsNyArNDQzNCw3IEBAIGZpCisgCisgIyBmaXJzdCBjdXJzZXMgaGVhZGVyIGNoZWNrCisgYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgorLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisrQ1BQRkxBR1M9IiRDUFBGTEFHUyAtST0vdXNyL2luY2x1ZGUvbmN1cnNlc3ciCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhjdXJzZXMuaCBuY3Vyc2VzLmgpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhjNTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApAQCAtMCwwICsxLDI1IEBACitfdGtpbnRlciBtb2R1bGUgbmVlZHMgdGsgbW9kdWxlIGFsb25nIHdpdGggdGNsLiB0ayBpcyBub3QgeWV0IGludGVncmF0ZWQKK2luIHlvY3RvIHNvIHdlIHNraXAgdGhlIGNoZWNrIGZvciB0aGlzIG1vZHVsZS4KK0F2b2lkIGEgd2FybmluZyBieSBub3QgYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE4OjM4LjUwMDEzNjY0NyArMDMwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE5OjM1Ljg4ODEzNDk2OSArMDMwMAorQEAgLTE2MzQsOCArMTYzNCwxMCBAQAorICAgICAgICAgIyBDYWxsIHRoZSBtZXRob2QgZm9yIGRldGVjdGluZyB3aGV0aGVyIF90a2ludGVyIGNhbiBiZSBjb21waWxlZAorICAgICAgICAgc2VsZi5kZXRlY3RfdGtpbnRlcihpbmNfZGlycywgbGliX2RpcnMpCisgCistICAgICAgICBpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CistICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKysgICAgICAgICMgdGtpbnRlciBtb2R1bGUgd2lsbCBub3QgYmUgYXZhbGFpYmxlIGFzIHlvY3RvCisrICAgICAgICAjIGRvZXNuJ3QgaGF2ZSB0ayBpbnRlZ3JhdGVkICh5ZXQpCisrICAgICAgICAjaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorKyAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorIAorICAgICAgICAgcmV0dXJuIG1pc3NpbmcKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9jZ2lfcHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTA0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0xpYi9jZ2kucHk6IFVwZGF0ZSB0aGUgc2NyaXB0IGFzIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gUHl0aG9uLTIuNi42L0xpYi9jZ2kucHkub3JpZwkyMDEwLTA4LTAxIDIyOjE0OjI3LjAwMDAwMDAwMCAtMDUwMAorKysrIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5CTIwMTEtMDktMjEgMTU6Mjg6NDAuNDc4MjA4NjMxIC0wNTAwCitAQCAtMSwxMyArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCistCistIyBOT1RFOiB0aGUgYWJvdmUgIi91c3IvbG9jYWwvYmluL3B5dGhvbiIgaXMgTk9UIGEgbWlzdGFrZS4gIEl0IGlzCistIyBpbnRlbnRpb25hbGx5IE5PVCAiL3Vzci9iaW4vZW52IHB5dGhvbiIuICBPbiBtYW55IHN5c3RlbXMKKy0jIChlLmcuIFNvbGFyaXMpLCAvdXNyL2xvY2FsL2JpbiBpcyBub3QgaW4gJFBBVEggYXMgcGFzc2VkIHRvIENHSQorLSMgc2NyaXB0cywgYW5kIC91c3IvbG9jYWwvYmluIGlzIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aGVyZSBQeXRob24gaXMKKy0jIGluc3RhbGxlZCwgc28gL3Vzci9iaW4vZW52IHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHB5dGhvbi4gIEdyYW50ZWQsCistIyBiaW5hcnkgaW5zdGFsbGF0aW9ucyBieSBMaW51eCB2ZW5kb3JzIG9mdGVuIGluc3RhbGwgUHl0aG9uIGluCistIyAvdXNyL2Jpbi4gIFNvIGxldCB0aG9zZSB2ZW5kb3JzIHBhdGNoIGNnaS5weSB0byBtYXRjaCB0aGVpciBjaG9pY2UKKy0jIG9mIGluc3RhbGxhdGlvbi4KKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgCisgIiIiU3VwcG9ydCBtb2R1bGUgZm9yIENHSSAoQ29tbW9uIEdhdGV3YXkgSW50ZXJmYWNlKSBzY3JpcHRzLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2ZpeF9mb3JfdXNpbmdfZGlmZmVyZW50X2xpYmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxYTk3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyBwYXRjaCBmaXhlcyBpc3N1aW5nIHdpdGggZGlmZmVyZW50IGxpYmRpciBsaWtlIGxpYjY0LgorVGhpcyBwYXRjaCBtYWtlcyB0aGUgbmF0aXZlIHB5dGhvbiBiaW5hcnkgbW9kdWxlcyBmaW5kYWJsZQoraW4gdGhlIGluc3RhbGwgcHJvY2VzcyBvZiB0aGUgaG9zdCBweXRob24uCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzAzLzE0CisKK1VwZGF0ZWQgZm9yIHB5dGhvbiAyLjcuMworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDUvMDEKKworSW5kZXg6IFB5dGhvbi0zLjMuMHJjMi9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvTGliL3N5c2NvbmZpZy5weQkyMDEyLTA5LTIwIDIyOjUwOjExLjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9MaWIvc3lzY29uZmlnLnB5CTIwMTItMDktMjAgMjI6NTM6MDEuNTYxMTIzMzk2IC0wNzAwCitAQCAtMjEsOSArMjEsOSBAQAorIAorIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdzdGRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzoKKyAgICAgICAgICAgICAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fXthYmlmbGFnc30nLAorQEAgLTgzLDcgKzgzLDcgQEAKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CisgICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKK0luZGV4OiBQeXRob24tMy4zLjByYzIvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvTWFrZWZpbGUucHJlLmluCTIwMTItMDktMjAgMjI6NTA6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4wcmMyL01ha2VmaWxlLnByZS5pbgkyMDEyLTA5LTIwIDIyOjUwOjU0LjI0NTEyMzk5NyAtMDcwMAorQEAgLTEwODAsOSArMTA4MCw5IEBACisgCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL01vZHVsZXMveHhtb2R1bGUuYyBcCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKToke0NST1NTUFlUSE9OUEFUSH0gJChSVU5TSEFSRUQpIFwKKyAJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKyAKKyAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwNTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK3doZW4gYnVpbGRpbmcgcHl0aG9uIGZvciBxZW11eDg2LTY0IG9uIHVidW50dSAxMS4xMC82NGJpdAoraXQgZ3JvcGVzIGludG8gaG9zdCBpbmNsdWRlcyBhbmQgdGhlbiBtaXhlcyB0aGVtIHdpdGggY3Jvc3MKK2luY2x1ZGVzIGFuZCBhcyBhIHJlc3VsdCBzb21lIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIGFuZCBsaW5rCitvbmUgb2YgdGhlIG1vZHVsZXMgaXMgcHl0aG9uLWVsZW1lbnR0cmVlIHdoaWNoIGlzIHRoZW4gbm90Citmb3VuZCBkdXJpbmcgaW1hZ2UgY3JlYXRpb24KKworUHJvYmxlIGlzIHRoYXQgc2V0dXAucHkgdHJpZXMgdG8gYWRkIG5hdGl2ZSBpbmNsdWRlcyB0aGF0IG5ld2VyCit1YnVudHUgaGFzIGludHJvZHVjZWQgZm9yIG11bHRpYXJjaCBzdXBwb3J0LiBCdXQgdGhhdCBzaG91bGQKK29ubHkgaGFwcGVuIGZvciBuYXRpdmUgYnVpbGRzIGFuZCBub3QgY3Jvc3MgYnVpbGRpbmcgcHl0aG9uCitzbyB3ZSBhZGQgYSBjaGVjayBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBQeXRob24tMy4zLjByYzIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjByYzIub3JpZy9zZXR1cC5weQkyMDEyLTA5LTIwIDIxOjU0OjUwLjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9zZXR1cC5weQkyMDEyLTA5LTIwIDIxOjU3OjM1LjAyOTEyMzg1OCAtMDcwMAorQEAgLTQwMiw2ICs0MDIsOSBAQAorIAorICAgICAgICAgaWYgbm90IGZpbmRfZXhlY3V0YWJsZSgnZHBrZy1hcmNoaXRlY3R1cmUnKToKKyAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICByZXR1cm4KKysKKyAgICAgICAgIG9wdCA9ICcnCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgb3B0ID0gJy10JyArIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSE9TVF9HTlVfVFlQRScpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhNjg5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9tYWtlcmFjZS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitUaGVyZSBpcyBhIHJhY2UgZHVlIHRvIHRoZSBleGVjdXRpb24gb2YgbWFrZSBpbnNpZGUgdGhlIG1ha2VmaWxlOgorCit8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBPYmplY3RzL29ibWFsbG9jLm8gT2JqZWN0cy9vYm1hbGxvYy5jCit8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBQYXJzZXIvcGdlbi5vIFBhcnNlci9wZ2VuLmN8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBPYmplY3RzL29ibWFsbG9jLm8gT2JqZWN0cy9vYm1hbGxvYy5jCit8IGdjYyAgLXB0aHJlYWQgLWMgLVduby11bnVzZWQtcmVzdWx0IC1ETkRFQlVHIC1nICAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1PMiAtcGlwZSAgIC1JLiAtSUluY2x1ZGUgLUkuL0luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtaXN5c3RlbS9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci1kZXYveW9jdG8tc2xhdmUvbmlnaHRseS13b3JsZC9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9pbmNsdWRlIC1mUElDIC1EUHlfQlVJTERfQ09SRSAtbyBPYmplY3RzL29ibWFsbG9jLm8gT2JqZWN0cy9vYm1hbGxvYy5jCit8IE9iamVjdHMvb2JtYWxsb2MubzogZmlsZSBub3QgcmVjb2duaXplZDogRmlsZSB0cnVuY2F0ZWQKK3wgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCit8IG1ha2VbMV06ICoqKiBbUGFyc2VyL3BnZW5dIEVycm9yIDEKKworVGhlIGVhc2llc3Qgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gbGlzdCB0aGUgZGVwZW5kZW5jaWVzIGV4cGxpY3RseS4KKworUlAgMjgvMi8yMDE0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTMuMy4zL01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMy5vcmlnL01ha2VmaWxlLnByZS5pbgkyMDE0LTAyLTI3IDE0OjA0OjM4LjI2ODMzOTUzMyArMDAwMAorKysrIFB5dGhvbi0zLjMuMy9NYWtlZmlsZS5wcmUuaW4JMjAxNC0wMi0yOCAxMDo0MDo1OS4xNjYzNjExMjUgKzAwMDAKK0BAIC02NzYsNyArNjc2LDcgQEAKKyAKKyAkKElPX09CSlMpOiAkKElPX0gpCisgCistJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisrJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpICQoUEdFTikKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJCSQoTUFLRSkgJChQR0VOKQorIAkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tMy4zLW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTk4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDMzOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2dldCB0aGUgc3lzLmxpYiBmcm9tIHB5dGhvbiBpdHNlbGYgYW5kIGRvIG5vdCB1c2UgaGFyZGNvZGVkIHZhbHVlIG9mICdsaWInCisKKzAyLzIwMTUgUmViYXNlZCBmb3IgMy40LjIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL0luY2x1ZGUvcHl0aG9ucnVuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTMuNC4yL0luY2x1ZGUvcHl0aG9ucnVuLmgKK0BAIC0yMjAsNiArMjIwLDggQEAgaW50IF9QeV9DaGVja1B5dGhvbjMoKTsKKyAvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0UGxhdGZvcm0odm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEFyY2godm9pZCk7CisrUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldExpYih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29weXJpZ2h0KHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOworSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CitAQCAtMTksNiArMTksOCBAQCBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQorIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCisgSEFTX1VTRVJfU0lURSA9IFRydWUKKyAKKytsaWJuYW1lID0gc3lzLmxpYgorKworIFdJTkRPV1NfU0NIRU1FID0geworICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKK0BAIC0zMCw3ICszMiw3IEBAIFdJTkRPV1NfU0NIRU1FID0geworIElOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3VuaXhfcHJlZml4JzogeworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS8nK2xpYm5hbWUrJy9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQkYWJpZmxhZ3MvJGRpc3RfbmFtZScsCisgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvcHlkb2MucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMy40LjIvTGliL3B5ZG9jLnB5CitAQCAtMzk0LDcgKzM5NCw3IEBAIGNsYXNzIERvYzoKKyAKKyAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwgc2VsZi5QWVRIT05ET0NTKQorIAorLSAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJWQuJWQiICUgIHN5cy52ZXJzaW9uX2luZm9bOjJdKQorICAgICAgICAgaWYgKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKG9zKSkgYW5kCisgICAgICAgICAgICAgKG9iamVjdC5fX25hbWVfXyBpbiAoJ2Vycm5vJywgJ2V4Y2VwdGlvbnMnLCAnZ2MnLCAnaW1wJywKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3RyYWNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi90cmFjZS5weQorQEAgLTc1MSwxMCArNzUxLDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKKyAKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJHByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkZXhlY19wcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBvcy5wYXRoLm5vcm1wYXRoKHMpCisgICAgICAgICAgICAgICAgIGlnbm9yZV9kaXJzLmFwcGVuZChzKQorSW5kZXg6IFB5dGhvbi0zLjQuMi9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMy40LjIvTWFrZWZpbGUucHJlLmluCitAQCAtMTAxLDYgKzEwMSw4IEBAIFBZX0NPUkVfQ0ZMQUdTPQkkKFBZX0NGTEFHUykgJChQWV9DRkxBR1MKKyAKKyAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCisgTUFDSERFUD0JQE1BQ0hERVBACisrTElCPQkJQExJQkAKKytBUkNIPQkJQEFSQ0hACisgCisgIyBNdWx0aWFyY2ggZGlyZWN0b3J5IChtYXkgYmUgZW1wdHkpCisgTVVMVElBUkNIPQlATVVMVElBUkNIQAorQEAgLTEyMCw3ICsxMjIsNyBAQCBMSUJESVI9CQlAbGliZGlyQAorIE1BTkRJUj0JCUBtYW5kaXJACisgSU5DTFVERURJUj0JQGluY2x1ZGVkaXJACisgQ09ORklOQ0xVREVESVI9CSQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKy1TQ1JJUFRESVI9CSQocHJlZml4KS9saWIKKytTQ1JJUFRESVI9CUBsaWJkaXJACisgQUJJRkxBR1M9CUBBQklGTEFHU0AKKyAKKyAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCitAQCAtNzEyLDYgKzcxNCw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKKyAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKKyAJCS1EVkVSU0lPTj0nIiQoVkVSU0lPTikiJyBcCisgCQktRFZQQVRIPSciJChWUEFUSCkiJyBcCisrCQktREFSQ0g9JyIkKEFSQ0gpIicgLURMSUI9JyIkKExJQikiJyBcCisgCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKKyAKKyBNb2R1bGVzL3B5dGhvbi5vOiAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworQEAgLTc4MCw3ICs3ODMsNyBAQCAkKEFTVF9DKTogJChBU1RfSCkgJChBU1RfQVNETCkgJChBU0RMR0VOCisgUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQorIAorIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0JCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1EQVJDSD0nIiQoQVJDSCkiJyAtRExJQj0nIiQoTElCKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworIAorIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKyAJCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1JJChETElOQ0xESVIpIC1vICRAICQoc3JjZGlyKS9QeXRob24vaW1wb3J0ZGwuYworSW5kZXg6IFB5dGhvbi0zLjQuMi9Nb2R1bGVzL2dldHBhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL01vZHVsZXMvZ2V0cGF0aC5jCisrKysgUHl0aG9uLTMuNC4yL01vZHVsZXMvZ2V0cGF0aC5jCitAQCAtMTE3LDkgKzExNywxMSBAQAorICNkZWZpbmUgRVhFQ19QUkVGSVggUFJFRklYCisgI2VuZGlmCisgCisrI2RlZmluZSBMSUJfUFlUSE9OIExJQiAiL3B5dGhvbiIgVkVSU0lPTgorKworICNpZm5kZWYgUFlUSE9OUEFUSAorLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCistICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIi9saWItZHlubG9hZCIKKysjZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvIiBMSUJfUFlUSE9OICI6IiBcCisrICAgICAgICAgICAgICBFWEVDX1BSRUZJWCAiLyIgTElCX1BZVEhPTiAiL2xpYi1keW5sb2FkIgorICNlbmRpZgorIAorICNpZm5kZWYgTEFORE1BUksKK0BAIC0xMzAsNiArMTMyLDcgQEAgc3RhdGljIHdjaGFyX3QgcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIHdjaGFyX3QgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgd2NoYXJfdCBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworK3N0YXRpYyB3Y2hhcl90ICpsaWJfcHl0aG9uID0gTCIiIExJQl9QWVRIT047CisgCisgc3RhdGljIHZvaWQKKyByZWR1Y2Uod2NoYXJfdCAqZGlyKQorSW5kZXg6IFB5dGhvbi0zLjQuMi9QeXRob24vZ2V0cGxhdGZvcm0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrKysgUHl0aG9uLTMuNC4yL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitAQCAtMTAsMyArMTAsMjMgQEAgUHlfR2V0UGxhdGZvcm0odm9pZCkKKyB7CisgCXJldHVybiBQTEFURk9STTsKKyB9CisrCisrI2lmbmRlZiBBUkNICisrI2RlZmluZSBBUkNIICJ1bmtub3duIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldEFyY2godm9pZCkKKyt7CisrCXJldHVybiBBUkNIOworK30KKysKKysjaWZuZGVmIExJQgorKyNkZWZpbmUgTElCICJsaWIiCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0TGliKHZvaWQpCisreworKwlyZXR1cm4gTElCOworK30KK0luZGV4OiBQeXRob24tMy40LjIvUHl0aG9uL3N5c21vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTMuNC4yL1B5dGhvbi9zeXNtb2R1bGUuYworQEAgLTE2OTcsNiArMTY5NywxMCBAQCBfUHlTeXNfSW5pdCh2b2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRQbGF0Zm9ybSgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImFyY2giLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldEFyY2goKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldExpYigpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImV4ZWN1dGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1GdWxsUGF0aCgpLCAtMSkpOworSW5kZXg6IFB5dGhvbi0zLjQuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuNC4yL3NldHVwLnB5CitAQCAtNDU0LDcgKzQ1NCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgZGlyZWN0b3JpZXMgKGkuZS4gJy4nIGFuZCAnSW5jbHVkZScpIG11c3QgYmUgZmlyc3QuICBTZWUgaXNzdWUKKyAgICAgICAgICMgMTA1MjAuCisgICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgJy91c3IvbG9jYWwvbGliJykKKysgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsIG9zLnBhdGguam9pbignL3Vzci9sb2NhbCcsIHN5cy5saWIpKQorICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCisgICAgICAgICAjIG9ubHkgY2hhbmdlIHRoaXMgZm9yIGNyb3NzIGJ1aWxkcyBmb3IgMy4zLCBpc3N1ZXMgb24gTWFnZWlhCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CitAQCAtNTEyLDggKzUxMiw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgYmUgYXNzdW1lZCB0aGF0IG5vIGFkZGl0aW9uYWwgLUksLUwgZGlyZWN0aXZlcyBhcmUgbmVlZGVkLgorICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBsaWJfZGlycyA9IHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzICsgWworLSAgICAgICAgICAgICAgICAnL2xpYjY0JywgJy91c3IvbGliNjQnLAorLSAgICAgICAgICAgICAgICAnL2xpYicsICcvdXNyL2xpYicsCisrICAgICAgICAgICAgICAgICcvJyArIHN5cy5saWIsICcvdXNyLycgKyBzeXMubGliLAorICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgaW5jX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycyArIFsnL3Vzci9pbmNsdWRlJ10KKyAgICAgICAgIGVsc2U6CitAQCAtNjk2LDExICs2OTUsMTEgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQorICAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci8nK3N5cy5saWIrJy90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVybWNhcCcpOgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZCgndGVybWNhcCcpCisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvbGliL3Rlcm1jYXAnXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvJytzeXMubGliKycvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPXJlYWRsaW5lX2V4dHJhX2xpbmtfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1yZWFkbGluZV9saWJzKSApCisgICAgICAgICBlbHNlOgorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvc3lzY29uZmlnLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvc3lzY29uZmlnLnB5CitAQCAtMjAsMTAgKzIwLDEwIEBAIF9fYWxsX18gPSBbCisgCisgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKy0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6CisgICAgICAgICAgICAgJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH17YWJpZmxhZ3N9JywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6CitAQCAtMzIsMTAgKzMyLDEwIEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICAgICAnZGF0YSc6ICd7YmFzZX0nLAorICAgICAgICAgfSwKKyAgICAgJ3Bvc2l4X2hvbWUnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vbGliL3B5dGhvbicsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisrICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vJytzeXMubGliKycvcHl0aG9uJywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob24nLAorICAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorLSAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbicsCisgICAgICAgICAnaW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9uJywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9uJywKKyAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9iaW4nLAorQEAgLTYxLDEwICs2MSwxMCBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCisgICAgICAgICB9LAorICAgICAncG9zaXhfdXNlcic6IHsKKy0gICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKysgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKK0luZGV4OiBQeXRob24tMy40LjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworQEAgLTc5MSw2ICs3OTEsNDEgQEAgZXNhYworIE1VTFRJQVJDSD0kKCRDQyAtLXByaW50LW11bHRpYXJjaCAyPi9kZXYvbnVsbCkKKyBBQ19TVUJTVChNVUxUSUFSQ0gpCisgCisrQUNfU1VCU1QoQVJDSCkKKytBQ19NU0dfQ0hFQ0tJTkcoQVJDSCkKKytBUkNIPWB1bmFtZSAtbWAKKytjYXNlICRBUkNIIGluCisraT84NikgQVJDSD1pMzg2OzsKKytlc2FjCisrQUNfTVNHX1JFU1VMVCgkQVJDSCkKKysKKytBQ19TVUJTVChMSUIpCisrQUNfTVNHX0NIRUNLSU5HKExJQikKKytjYXNlICRhY19zeXNfc3lzdGVtIGluCisrTGludXgqKQorKyAgIyBUZXN0IGlmIHRoZSBjb21waWxlciBpcyA2NGJpdAorKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKysgIHB5dGhvbl9jdl9jY182NGJpdF9vdXRwdXQ9bm8KKysgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisrICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKysgICAgKiJFTEYgNjQiKikKKysgICAgICBweXRob25fY3ZfY2NfNjRiaXRfb3V0cHV0PXllcworKyAgICAgIDs7CisrICAgIGVzYWMKKysgIGZpCisrICBybSAtcmYgY29uZnRlc3QqCisrICA7OworK2VzYWMKKysKKytjYXNlICRBUkNIOiRweXRob25fY3ZfY2NfNjRiaXRfb3V0cHV0IGluCisrcHBjNjQ6eWVzIHwgcG93ZXJwYzY0OnllcyB8IHMzOTB4OnllcyB8IHNwYXJjNjQ6eWVzIHwgeDg2XzY0OnllcykKKysgIExJQj0ibGliNjQiCisrICA7OworKyo6KikKKysgIExJQj0ibGliIgorKyAgOzsKKytlc2FjCisrQUNfTVNHX1JFU1VMVCgkTElCKQorIAorIEFDX1NVQlNUKExJQlJBUlkpCisgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi9zaXRlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3NpdGUucHkKKysrKyBQeXRob24tMy40LjIvTGliL3NpdGUucHkKK0BAIC0zMDQsMTMgKzMwNCwxOSBAQCBkZWYgZ2V0c2l0ZXBhY2thZ2VzKHByZWZpeGVzPU5vbmUpOgorICAgICAgICAgc2Vlbi5hZGQocHJlZml4KQorIAorICAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBpZiBzeXMubGliICE9ICJsaWIiOgorKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIGZvciBmcmFtZXdvcmsgYnVpbGRzICpvbmx5KiB3ZSBhZGQgdGhlIHN0YW5kYXJkIEFwcGxlCisgICAgICAgICAgICAgIyBsb2NhdGlvbnMuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24tY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyM2I4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitweXRob24tY29uZmlnOiBSZXZlcnQgdG8gdXNpbmcgZGlzdHV0aWxzLnN5c2NvbmZpZworCitUaGUgbmV3ZXIgc3lzY29uZmlnIG1vZHVsZSBzaGFyZXMgc29tZSBjb2RlIHdpdGggZGlzdHV0aWxzLnN5c2NvbmZpZywgYnV0IHRoZSBzYW1lIG1vZGlmaWNhdGlvbnMgYXMgaW4KKworMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoIG1ha2VzIGRpc3R1dGlscy5zeXNjb25maWcKKworYWZmZWN0IHRoZSBuYXRpdmUgcnVudGltZSBhcyB3ZWxsIGFzIGNyb3NzIGJ1aWxkaW5nLiBVc2UgdGhlIG9sZCwgcGF0Y2hlZAoraW1wbGVtZW50YXRpb24gd2hpY2ggcmV0dXJucyBwYXRocyBpbiB0aGUgc3RhZ2luZyBkaXJlY3RvcnkgYW5kIGZvciB0aGUgdGFyZ2V0LAorYXMgYXBwcm9wcmlhdGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFR5bGVyIEhhbGwgPHR5bGVyd2hhbGxAZ21haWwuY29tPgorOgorSW5kZXg6IFB5dGhvbi0zLjMuMy9NaXNjL3B5dGhvbi1jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjMub3JpZy9NaXNjL3B5dGhvbi1jb25maWcuaW4KKysrKyBQeXRob24tMy4zLjMvTWlzYy9weXRob24tY29uZmlnLmluCitAQCAtNCw3ICs0LDcgQEAKKyBpbXBvcnQgZ2V0b3B0CisgaW1wb3J0IG9zCisgaW1wb3J0IHN5cworLWltcG9ydCBzeXNjb25maWcKKytmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisgCisgdmFsaWRfb3B0cyA9IFsncHJlZml4JywgJ2V4ZWMtcHJlZml4JywgJ2luY2x1ZGVzJywgJ2xpYnMnLCAnY2ZsYWdzJywKKyAgICAgICAgICAgICAgICdsZGZsYWdzJywgJ2V4dGVuc2lvbi1zdWZmaXgnLCAnaGVscCcsICdhYmlmbGFncycsICdjb25maWdkaXInXQorQEAgLTMyLDE0ICszMiwxNCBAQCBpZiAnLS1oZWxwJyBpbiBvcHRfZmxhZ3M6CisgCisgZm9yIG9wdCBpbiBvcHRfZmxhZ3M6CisgICAgIGlmIG9wdCA9PSAnLS1wcmVmaXgnOgorLSAgICAgICAgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdwcmVmaXgnKSkKKysgICAgICAgIHByaW50KHN5c2NvbmZpZy5QUkVGSVgpCisgCisgICAgIGVsaWYgb3B0ID09ICctLWV4ZWMtcHJlZml4JzoKKy0gICAgICAgIHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignZXhlY19wcmVmaXgnKSkKKysgICAgICAgIHByaW50KHN5c2NvbmZpZy5FWEVDX1BSRUZJWCkKKyAKKyAgICAgZWxpZiBvcHQgaW4gKCctLWluY2x1ZGVzJywgJy0tY2ZsYWdzJyk6CistICAgICAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9wYXRoKCdpbmNsdWRlJyksCistICAgICAgICAgICAgICAgICAnLUknICsgc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0aW5jbHVkZScpXQorKyAgICAgICAgZmxhZ3MgPSBbJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYygpLAorKyAgICAgICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPVRydWUpXQorICAgICAgICAgaWYgb3B0ID09ICctLWNmbGFncyc6CisgICAgICAgICAgICAgZmxhZ3MuZXh0ZW5kKGdldHZhcignQ0ZMQUdTJykuc3BsaXQoKSkKKyAgICAgICAgIHByaW50KCcgJy5qb2luKGZsYWdzKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjOGI4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNDMyMzhlMWFjMTNlMzI5ODRkMDE1YzkyYTU4NDFmM2RlMWZlMWQxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE4IE5vdiAyMDE0IDAwOjA3OjA3IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNldHVwLnB5OiBubyBob3N0IGhlYWRlcnMgbGlicworCitXaGVuIHdlIGFyZSBjcm9zcy1jb21waWxpbmcsIHNldHVwLnB5IHNob3VsZCBuZXZlciBsb29rIGluIC91c3IKK29yIC91c3IvbG9jYWwgdG8gZmluZCBoZWFkZXJzIG9yIGxpYnJhcmllcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDcm9zcyBjb21waWxlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc2V0dXAucHkgfCAzIC0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggZjAyMGIyOC4uZTgzMzljZCAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTQ0NCwxMCArNDQ0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsIG9zLnBhdGguam9pbignL3Vzci9sb2NhbCcsIHN5cy5saWIpKQorICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywgJy91c3IvbG9jYWwvaW5jbHVkZScpCistICAgICAgICAjIG9ubHkgY2hhbmdlIHRoaXMgZm9yIGNyb3NzIGJ1aWxkcyBmb3IgMy4zLCBpc3N1ZXMgb24gTWFnZWlhCistICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfZ2NjX3BhdGhzKCkKKy0gICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKKyAKKyAgICAgICAgICMgQWRkIHBhdGhzIHNwZWNpZmllZCBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIExERkxBR1MgYW5kCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDkwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNTNlZDIxNmQ3YmY3MGRkMmE5MjU0MzJiNjgwNWE3MDFlNWZjM2UwZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDE3IE5vdiAyMDE0IDA2OjQ0OjQ3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHB5dGhvbjMgdXNlIENST1NTUFlUSE9OUEFUSCBmb3IgUFlUSE9OX0ZPUl9CVUlMRAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0Nyb3NzIGNvbXBpbGUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk4OWJhZjkuLjI4OTBjOTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY3LDcgKzY3LDcgQEAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAJICAgIEFDX01TR19FUlJPUihbcHl0aG9uJFBBQ0tBR0VfVkVSU0lPTiBpbnRlcnByZXRlciBub3QgZm91bmRdKQorIAlmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaW50ZXJwKQorLQlQWVRIT05fRk9SX0JVSUxEPSdfUFlUSE9OX1BST0pFQ1RfQkFTRT0kKGFic19idWlsZGRpcikgX1BZVEhPTl9IT1NUX1BMQVRGT1JNPSQoX1BZVEhPTl9IT1NUX1BMQVRGT1JNKSBQWVRIT05QQVRIPSQoc2hlbGwgdGVzdCAtZiBweWJ1aWxkZGlyLnR4dCAmJiBlY2hvICQoYWJzX2J1aWxkZGlyKS9gY2F0IHB5YnVpbGRkaXIudHh0YDopJChzcmNkaXIpL0xpYjokKHNyY2RpcikvTGliLyQoUExBVERJUikgJyRpbnRlcnAKKysJUFlUSE9OX0ZPUl9CVUlMRD0nX1BZVEhPTl9QUk9KRUNUX0JBU0U9JChhYnNfYnVpbGRkaXIpIF9QWVRIT05fSE9TVF9QTEFURk9STT0kKF9QWVRIT05fSE9TVF9QTEFURk9STSkgUFlUSE9OUEFUSD0kKENST1NTUFlUSE9OUEFUSCkgJyRpbnRlcnAKKyAgICAgZmkKKyBlbGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKyAgICAgQUNfTVNHX0VSUk9SKFtDcm9zcyBjb21waWxpbmcgcmVxdWlyZWQgLS1ob3N0PUhPU1QtVFVQTEUgYW5kIC0tYnVpbGQ9QVJDSF0pCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmUxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gOGRhZDgxMGYzYTNkMDczZjA5YWQ3MmUxYTNlZTBhODk1ZWFiMmNhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCAxOCBKYW4gMjAxNSAxOTowNTozNiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBzZXR1cC5weTpjaGVjayBjcm9zc19jb21waWxpbmcgd2hlbiBnZXQgRkxBR1MKKworRml4ZWQgd2hlbiBjb21waWxlIHRhcmdldCBweXRobm9uMzoKK2djYyAtaXN5c3RlbS9wYXRoL3RvL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSBcCisgICAgLUw9L3BhdGgvdG8vc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWIKKworVGhpcyBpcyBpbmNvcnJlY3QsIHRoZSBuYXRpdmUgc3lzcm9vdCBzaG91bGQgbm90IGJlIHVzZWQgYnkgdGFyZ2V0CitweXRob24zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzZXR1cC5weSB8ICAgMTAgKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCBlODMzOWNkLi44M2ZkMzFmIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtMjM4LDcgKzIzOCwxMCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIGRpc3R1dGlscyBkb2Vzbid0IGxldCB1cyBwcm92aWRlIHNlcGFyYXRlIEMgYW5kIEMrKworICAgICAgICAgIyBjb21waWxlcnMKKyAgICAgICAgIGlmIGNvbXBpbGVyIGlzIG5vdCBOb25lOgorLSAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnQ0NTSEFSRUQnLCdDRkxBR1MnKQorKyAgICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSAob3MuZW52aXJvbi5nZXQoJ0NDU0hBUkVEJykgb3IgJycsIG9zLmVudmlyb24uZ2V0KCdDRkxBR1MnKSBvciAnJykKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKyAgICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArIGNmbGFncworICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfZXhlY3V0YWJsZXMoKiphcmdzKQorIAorQEAgLTQ1Nyw3ICs0NjAsMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLVInLCBzZWxmLmNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1MJywgc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0NQUEZMQUdTJywgJy1JJywgc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMpKToKKy0gICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisrICAgICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgICAgICBlbnZfdmFsID0gb3MuZW52aXJvbi5nZXQoZW52X3ZhcikKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisgICAgICAgICAgICAgaWYgZW52X3ZhbDoKKyAgICAgICAgICAgICAgICAgIyBUbyBwcmV2ZW50IG9wdHBhcnNlIGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gYWJvdXQgYW55CisgICAgICAgICAgICAgICAgICMgb3B0aW9ucyBpbiBlbnZfdmFsIHRoYXQgaXQgZG9lc24ndCBrbm93IGFib3V0IHdlIHN0cmlwIG91dAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmJkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1BhdGNoIHNldHVwLnB5IHNvIHRoYXQgdGhlIGRldGVjdF9tb2R1bGVzKCkgZnVuY3Rpb24gbG9va3MgZm9yIHJlcXVpcmVkCitsaWJyYXJpZXMgYW5kIGhlYWRlcnMgaW4gU1RBR0lOR19MSUJESVIgLyBTVEFHSU5HX0lOQ0RJUi4KKworV2l0aG91dCB0aGlzIHBhdGNoLCBzZXZlcmFsIGV4dGVuc2lvbiBtb2R1bGVzIGFyZSBub3QgYnVpbHQsIGV2ZW4gdGhvdWdoCit0aGVpciBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQgaW4gdGhlIGNvbXBpbGVyJ3Mgc2VhcmNoIHBhdGhzLgorVGhlIHJlc3VsdCBpcyB0aGUgZm9sbG93aW5nIHdhcm5pbmcsIGFuZCB1bHRpbWF0ZWx5IGluY29tcGxldGUgcGFja2FnZXM6CisKK3wgVGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG9wdGlvbmFsIG1vZHVsZXMgd2VyZSBub3QgZm91bmQ6Cit8IF9iejIgICAgICAgICAgICAgICAgICBfY3Vyc2VzX3BhbmVsICAgICAgICAgX2RibQorfCBfZ2RibSAgICAgICAgICAgICAgICAgX2x6bWEgICAgICAgICAgICAgICAgIF9zcWxpdGUzCit8IG5pcyAgICAgICAgICAgICAgICAgICByZWFkbGluZSAgICAgICAgICAgICAgemxpYgorfCBUbyBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cywgbG9vayBpbiBzZXR1cC5weSBpbiBkZXRlY3RfbW9kdWxlcygpIGZvciB0aGUgbW9kdWxlJ3MgbmFtZS4KKworVXBzdHJlYW0tU3RhdHVzOiAgSW5hcHByb3ByaWF0ZSBbQ3Jvc3MgY29tcGlsZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogRG9taW5pYyBTYWNyw6kgPGRvbWluaWMuc2FjcmVAZ214LmRlPgorCitJbmRleDogUHl0aG9uLTMuNC4zL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4zLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy40LjMvc2V0dXAucHkKK0BAIC01MjEsNiArNTIxLDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBsaWJfZGlycyA9IHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzWzpdCisgICAgICAgICAgICAgaW5jX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlyc1s6XQorKyAgICAgICAgICAgIGxpYl9kaXJzLmFwcGVuZChvcy5lbnZpcm9uLmdldCgnU1RBR0lOR19MSUJESVInKSkKKysgICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ1NUQUdJTkdfSU5DRElSJykpCisgICAgICAgICBleHRzID0gW10KKyAgICAgICAgIG1pc3NpbmcgPSBbXQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOTFiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXB0d2Vha3MucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorVGhpcyBwYXRjaCByZW1vdmVzIHZhcmlvdXMgd2F5cyBuYXRpdmUgc3lzdGVtIG9wdGlvbnMgY2FuIHBhc3MgaW50byB0aGUgcHl0aG9uIAorY29tcGlsYXRpb24gYW5kIHNvbWVob3cgYnJlYWsgQyBtb2R1bGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDEyLzA0LzIzCisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjQ3LjI5NTU4MjU1MyArMDAwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjE1LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzMSw3ICsyMzEsMTMgQEAKKyAgICAgICAgICMgY29tcGlsZXJzCisgICAgICAgICBpZiBjb21waWxlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKy0gICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArIGNmbGFncworKyAgICAgICAgICAgICMgTmVlZCB0byBmaWx0ZXIgb3V0IC1pc3lzcm9vdCBmcm9tIHRoZSBmbGFncy4gSWRlYWxseSBzaG91bGQgCisrICAgICAgICAgICAgIyBmaWd1cmUgb3V0IHRhcmdldCBmbGFncyBoZXJlLgorKyAgICAgICAgICAgIGZsYWdzID0gW10KKysgICAgICAgICAgICBmb3IgZiBpbiBjZmxhZ3Muc3BsaXQoKToKKysgICAgICAgICAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLWlzeXN0ZW0iKToKKysgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZChmKQorKyAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgJyAnLmpvaW4oZmxhZ3MpCisgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygqKmFyZ3MpCisgCisgICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9ucyhzZWxmKQorQEAgLTM5Myw3ICszOTksNiBAQAorICAgICAgICAgIyBpbnRvIGNvbmZpZ3VyZSBhbmQgc3RvcmVkIGluIHRoZSBNYWtlZmlsZSAoaXNzdWUgZm91bmQgb24gT1MgWCAxMC4zKS4KKyAgICAgICAgIGZvciBlbnZfdmFyLCBhcmdfbmFtZSwgZGlyX2xpc3QgaW4gKAorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLVInLCBzZWxmLmNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJzKSwKKy0gICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1MJywgc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0NQUEZMQUdTJywgJy1JJywgc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMpKToKKyAgICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisgICAgICAgICAgICAgaWYgZW52X3ZhbDoKK0BAIC00MTksMTYgKzQyNCwxNiBAQAorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorLSAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisrIyAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorKyMgICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgICMgYnVpbGRpbmcgYSBmcmFtZXdvcmsgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB0aGFuCisgICAgICAgICAgICAgIyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZCAoaXNzdWUgIzc0NzMpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGhhdmVfdW5pY29kZSA9IHVuaWNvZGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NodXRpbC1mb2xsb3ctc3ltbGluay1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjFjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK3NodXRpbHMgc2hvdWxkIGNvbnNpZGVyIHN5bWxpbmtzCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9MaWIvc2h1dGlsLnB5CTIwMTMtMDEtMjkgMTI6MzE6MDYuOTI2NTU1Nzc5IC0wODAwCisrKysgYi9MaWIvc2h1dGlsLnB5CTIwMTMtMDEtMjkgMTY6MzE6MzkuMDk3NTU0MTgyIC0wODAwCitAQCAtMTMyLDcgKzEzMiw3IEBAIGRlZiBjb3B5bW9kZShzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmsKKyAgICAgc3QgPSBzdGF0X2Z1bmMoc3JjKQorICAgICBjaG1vZF9mdW5jKGRzdCwgc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpKQorIAorLWlmIGhhc2F0dHIob3MsICdsaXN0eGF0dHInKToKKytpZiBoYXNhdHRyKG9zLCAnbGlzdHhhdHRyJykgYW5kIG9zLmxpc3R4YXR0ciBpbiBvcy5zdXBwb3J0c19mb2xsb3dfc3ltbGlua3M6CisgICAgIGRlZiBfY29weXhhdHRyKHNyYywgZHN0LCAqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSk6CisgICAgICAgICAiIiJDb3B5IGV4dGVuZGVkIGZpbGVzeXN0ZW0gYXR0cmlidXRlcyBmcm9tIGBzcmNgIHRvIGBkc3RgLgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NpdGVjdXN0b21pemUucHkgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2l0ZWN1c3RvbWl6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhiNWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NpdGVjdXN0b21pemUucHkKQEAgLTAsMCArMSwzNyBAQAorIyBPcGVuRW1iZWRkZWQgc2l0ZWN1c3RvbWl6ZS5weSAoQykgMjAwMi0yMDA4IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBHUEx2MiBvciBsYXRlcgorIyBWZXJzaW9uOiAyMDA4MTEyMworIyBGZWF0dXJlczoKKyMgKiBzZXQgcHJvcGVyIGRlZmF1bHQgZW5jb2RpbmcKKyMgKiBlbmFibGUgcmVhZGxpbmUgY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyMgKiBsb2FkIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIHN0YXJ0dXAKKyMgKiBzYXZlIGNvbW1hbmQgbGluZSBoaXN0b3J5IG9uIGV4aXQgCisKK2ltcG9ydCBvcworCitkZWYgX19leGl0aGFuZGxlcigpOgorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpOgorICAgIGltcG9ydCBhdGV4aXQKKyAgICBhdGV4aXQucmVnaXN0ZXIoIF9fZXhpdGhhbmRsZXIgKQorCitkZWYgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKToKKyAgICByZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGgoIDEwMDAgKQorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCAidGFiOiBjb21wbGV0ZSIgKQorICAgIHRyeToKKyAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoICIlcy8ucHl0aG9uLWhpc3RvcnkiICUgb3MuZ2V0ZW52KCAiSE9NRSIsICIvdG1wIiApICkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCitpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgX19yZWdpc3RlckV4aXRIYW5kbGVyKCkKKyAgICBfX2VuYWJsZVJlYWRsaW5lU3VwcG9ydCgpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA3NjQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGZjOTNiM2NjMjNiNGY5Njk4YWU5MmE0Mjk4NmRiYjAyYjZmMTk1ODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgMTggSmFuIDIwMTUgMDY6Mjk6NTAgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzY29uZmlnLnB5OiBhZGQgX1BZVEhPTl9QUk9KRUNUX1NSQworCitweXRob24zIGhhcyBpbnRyb2R1Y2VkIF9QWVRIT05fUFJPSkVDVF9CQVNFIHdoaWNoIGlzIHVzZWQgZm9yIHNlcGFyYXRlIEIKK2FuZCBTLCBidXQgaXQgZG9lc24ndCB3b3JrIHdoZW4gY29tcGlsZSBNb2R1bGVzLCB0aGUgdGFyZ2V0IHB5dGhvbjMgcnVucworcHl0aG9uMy1uYXRpdmUncyBzeXNjb25maWcgdG8gZ2V0IHNyY2RpciB3aGljaCBpcyB0aGUgbmF0aXZlJ3MsIHRoZXJlCit3b3VsZCBiZSBlcnJvcnMgd2hlbiBuYXRpdmUncyBzcmNkaXIgaGFzIGJlZW4gcmVtb3ZlZCwgYWRkCitfUFlUSE9OX1BST0pFQ1RfU1JDIHRvIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgfCAgICA1ICsrKystCisgTGliL3N5c2NvbmZpZy5weSAgICAgICAgICAgfCAgICA1ICsrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitpbmRleCBhNTQ1YWI5Li43NDMxN2QxIDEwMDY0NAorLS0tIGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtNTU0LDcgKzU1NCwxMCBAQCBkZWYgZ2V0X2NvbmZpZ192YXJzKCphcmdzKToKKyAgICAgICAgIF9jb25maWdfdmFyc1snZXhlY19wcmVmaXgnXSA9IEVYRUNfUFJFRklYCisgCisgICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCistICAgICAgICBzcmNkaXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdzcmNkaXInLCBwcm9qZWN0X2Jhc2UpCisrICAgICAgICBpZiAiX1BZVEhPTl9QUk9KRUNUX1NSQyIgaW4gb3MuZW52aXJvbjoKKysgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuZW52aXJvblsiX1BZVEhPTl9QUk9KRUNUX1NSQyJdKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBzcmNkaXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdzcmNkaXInLCBwcm9qZWN0X2Jhc2UpCisgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgorICAgICAgICAgICAgICAgICAjIElmIHNyY2RpciBpcyBhIHJlbGF0aXZlIHBhdGggKHR5cGljYWxseSAnLicgb3IgJy4uJykKK2RpZmYgLS1naXQgYS9MaWIvc3lzY29uZmlnLnB5IGIvTGliL3N5c2NvbmZpZy5weQoraW5kZXggNzI4N2YxMS4uY2M5Mjk5OCAxMDA2NDQKKy0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrKyBiL0xpYi9zeXNjb25maWcucHkKK0BAIC01NjIsNyArNTYyLDEwIEBAIGRlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgorICAgICAgICAgX0NPTkZJR19WQVJTWyd1c2VyYmFzZSddID0gX2dldHVzZXJiYXNlKCkKKyAKKyAgICAgICAgICMgQWx3YXlzIGNvbnZlcnQgc3JjZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKKy0gICAgICAgIHNyY2RpciA9IF9DT05GSUdfVkFSUy5nZXQoJ3NyY2RpcicsIF9QUk9KRUNUX0JBU0UpCisrICAgICAgICBpZiAiX1BZVEhPTl9QUk9KRUNUX1NSQyIgaW4gb3MuZW52aXJvbjoKKysgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuZW52aXJvblsiX1BZVEhPTl9QUk9KRUNUX1NSQyJdKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBzcmNkaXIgPSBfQ09ORklHX1ZBUlMuZ2V0KCdzcmNkaXInLCBfUFJPSkVDVF9CQVNFKQorICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgIGlmIF9QWVRIT05fQlVJTEQ6CisgICAgICAgICAgICAgICAgICMgSWYgc3JjZGlyIGlzIGEgcmVsYXRpdmUgcGF0aCAodHlwaWNhbGx5ICcuJyBvciAnLi4nKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODViNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0RvbnQgc2VhcmNoIGhhcmRjb2RlZCBwYXRocywgd2UgbWlnaHQgYmUgZG9pbmcgYSBjcm9zcy1idWlsZAorVXNlICc9JyBpbi1mcm9udCB0byBsZXQgY29tcGlsZXIgYXBwZW5kIHN5c3Jvb3QsIGlmIGl0IGNhbgorCitTaG91bGQgZml4IHRoaW5ncyBsaWtlCisKK2NvbmZpZ3VyZTo2OTcyOiBhcm0tYW5nc3Ryb20tbGludXgtZ251ZWFiaS1nY2MgIC1tYXJjaD1hcm12Ny1hIC1tdGh1bWItaW50ZXJ3b3JrIC1tZmxvYXQtYWJpPWhhcmQgLW1mcHU9bmVvbiAtbXR1bmU9Y29ydGV4LWE4IC1ETkRFQlVHIC1mbm8taW5saW5lIC1EX19TT0ZURlBfXyAtLXN5c3Jvb3Q9L2J1aWxkL3YyMDEzLjA2L2J1aWxkL3RtcC1hbmdzdHJvbV92MjAxM18wNi1lZ2xpYmMvc3lzcm9vdHMvYmVhZ2xlYm9uZSAtYyAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzICAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyBjb25mdGVzdC5jID4mNQorY2MxOiB3YXJuaW5nOiBpbmNsdWRlIGxvY2F0aW9uICIvdXNyL2luY2x1ZGUvbmN1cnNlc3ciIGlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24gWy1XcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10KKworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhagorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKworSW5kZXg6IFB5dGhvbi0zLjMuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMi5vcmlnL3NldHVwLnB5CTIwMTMtMDctMzAgMDE6MzA6NDguMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4yL3NldHVwLnB5CTIwMTMtMDctMzAgMDE6NDE6MTEuNjk3ODYyNzIzIC0wNzAwCitAQCAtMTIxMCw3ICsxMjEwLDcgQEAKKyAgICAgICAgIHBhbmVsX2xpYnJhcnkgPSAncGFuZWwnCisgICAgICAgICBpZiBjdXJzZXNfbGlicmFyeSA9PSAnbmN1cnNlc3cnOgorICAgICAgICAgICAgIGN1cnNlc19kZWZpbmVzLmFwcGVuZCgoJ0hBVkVfTkNVUlNFU1cnLCAnMScpKQorLSAgICAgICAgICAgIGN1cnNlc19pbmNsdWRlcy5hcHBlbmQoJy91c3IvaW5jbHVkZS9uY3Vyc2VzdycpCisrICAgICAgICAgICAgY3Vyc2VzX2luY2x1ZGVzLmFwcGVuZCgnPS91c3IvaW5jbHVkZS9uY3Vyc2VzdycpCisgICAgICAgICAgICAgIyBCdWcgMTQ2NDA1NjogSWYgX2N1cnNlcy5zbyBsaW5rcyB3aXRoIG5jdXJzZXN3LAorICAgICAgICAgICAgICMgX2N1cnNlc19wYW5lbC5zbyBtdXN0IGxpbmsgd2l0aCBwYW5lbHcuCisgICAgICAgICAgICAgcGFuZWxfbGlicmFyeSA9ICdwYW5lbHcnCitAQCAtMTgxOSw3ICsxODE5LDcgQEAKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgIyBPUyBYIDEwLjUgY29tZXMgd2l0aCBsaWJmZmkuZHlsaWI7IHRoZSBpbmNsdWRlIGZpbGVzIGFyZQorICAgICAgICAgICAgICMgaW4gL3Vzci9pbmNsdWRlL2ZmaQorLSAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZCgnL3Vzci9pbmNsdWRlL2ZmaScpCisrICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKCc9L3Vzci9pbmNsdWRlL2ZmaScpCisgCisgICAgICAgICBmZmlfaW5jID0gW3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRkZJX0lOQ0xVREVESVIiKV0KKyAgICAgICAgIGlmIG5vdCBmZmlfaW5jIG9yIGZmaV9pbmNbMF0gPT0gJyc6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy91bml4Y2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTBmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIENDIHZhcmlhYmxlLHNvbWV0aW1lcyBsaWtlOiJ4ODZfNjQtcG9reS1saW51eC1nY2MgICAtbTY0IC0tc3lzcm9vdD0vJHtUTVBESVJ9L3N5c3Jvb3RzL3FlbXV4ODYtNjQiLCBjb250YWlucyBvcHRpb24gaW5mb3JtYXRpb24uIAorVGhpcyB3aWxsIGxlYWQgdG8gd3JvbmcgY29tcGlsZXIgbmFtZSAicWVtdXg4Ni02NCIgcmF0aGVyIHRoYW4gIng4Nl82NC1wb2t5LWxpbnV4LWdjYyIgd2hlbiBweXRob24gZmluZGluZyB0aGUgY29tcGlsZXIgbmFtZS4KKworU2Vjb25kbHkgYWRkIC1MPTxwYXRoPiB0aGlzIHdheSBsaW5rZXIgd2lsbCBiZSBhYmxlIHRvIHJlc29sdmUgL3Vzci9saWIgdy5yLnQgc3lzcm9vdCBhbmQgbm90Cit1c2UgaGFyZGNvZGVkIC91c3IvbGliIHRvIGxvb2sgZm9yIGxpYnMgd2hpY2ggaXMgd3JvbmcgaW4gY3Jvc3MgY29tcGlsZSBlbnZpcm9ubWVudCBhbmQgdGhpcyB3aWxsIHdvcmsKK29rIG9uIG5hdGl2ZSBzeXN0ZW1zIHRvbyBzaW5jZSBzeXNyb290IGZvciBuYXRpdmUgY29tcGlsZXJzIGlzIC8KKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IFB5dGhvbi0zLjMuMi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjIub3JpZy9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAxMy0wNS0xNSAwOTozMjo1NC4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTMtMDgtMDEgMDA6NTg6MTguNjI5MDU2Mjg2IC0wNzAwCitAQCAtMjAyLDcgKzIwMiw5IEBACisgICAgICMgY2NvbXBpbGVyLnB5LgorIAorICAgICBkZWYgbGlicmFyeV9kaXJfb3B0aW9uKHNlbGYsIGRpcik6CistICAgICAgICByZXR1cm4gIi1MIiArIGRpcgorKyAgICAgICAgaWYgZGlyLnN0YXJ0c3dpdGgoIi4iKToKKysgICAgICAgICAgICByZXR1cm4gIi1MIiArIGRpcgorKyAgICAgICAgcmV0dXJuICItTD0iICsgZGlyCisgCisgICAgIGRlZiBfaXNfZ2NjKHNlbGYsIGNvbXBpbGVyX25hbWUpOgorICAgICAgICAgcmV0dXJuICJnY2MiIGluIGNvbXBpbGVyX25hbWUgb3IgImcrKyIgaW4gY29tcGlsZXJfbmFtZQorQEAgLTIyMSw3ICsyMjEsNyBAQAorICAgICAgICAgIyB0aGlzIHRpbWUsIHRoZXJlJ3Mgbm8gd2F5IHRvIGRldGVybWluZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KKyAgICAgICAgICMgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZWQgaW4gdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24sIHNvCisgICAgICAgICAjIHdlIHVzZSB0aGlzIGhhY2suCistICAgICAgICBjb21waWxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpKQorKyAgICAgICAgY29tcGlsZXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBNYWNPU1gncyBsaW5rZXIgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAtUiBmbGFnIGF0IGFsbAorICAgICAgICAgICAgIHJldHVybiAiLUwiICsgZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZDI3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uM18zLjQuMy5iYgpAQCAtMCwwICsxLDIyNSBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCisKK0RFUEVORFMgPSAicHl0aG9uMy1uYXRpdmUgbGliZmZpIGJ6aXAyIGRiIGdkYm0gb3BlbnNzbCByZWFkbGluZSBzcWxpdGUzIHpsaWIgdmlydHVhbC9saWJpbnRsIHh6IgorUFIgPSAiJHtJTkNfUFJ9LjAiCitQWVRIT05fTUFKTUlOID0gIjMuNCIKK1BZVEhPTl9CSU5BQkk9ICIke1BZVEhPTl9NQUpNSU59bSIKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHogXAorZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAorZmlsZTovLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoIFwKK2ZpbGU6Ly8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBcCitmaWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCitmaWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKK2ZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggXAorZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCitmaWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAorZmlsZTovLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBcCitmaWxlOi8vbWFrZXJhY2UucGF0Y2ggXAorJHtESVNUUk9fU1JDX1VSSX0gXAorIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wNC1kZWZhdWx0LWlzLW9wdGltaXplZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jZ2lfcHkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2hvc3RfaW5jbHVkZV9jb250YW1pbmF0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24tMy4zLW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdW5peGNjb21waWxlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXZvaWQtbmN1cnNlc3ctaW5jbHVkZS1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXVzZS1DUk9TU1BZVEhPTlBBVEgtZm9yLVBZVEhPTl9GT1JfQlVJTEQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbjMtc2V0dXAucHktbm8taG9zdC1oZWFkZXJzLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zZXR1cC5weS1maW5kLWxpYnJhcmllcy1pbi1zdGFnaW5nLWRpcnMucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiN2QwOTJkMWJiYTZlMTdmMGQ5YmQyMWI0OWU0NDFkZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjViMzk2MzUzMzc2OGQ1ZmMzMjVhNGQ3YTZiZDZmNjY2NzI2MDAyZDY5NmYxZDM5OWVjMDZiMDQzZWE5OTZiOCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZGQ5OGQwMWQ0NzFmYWM4ZDhkYmRkOTc1MjI5ZGJhMDMiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24zbmF0aXZlIHBrZ2NvbmZpZworCitDT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgorCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9oYXZlX2NoZmxhZ3M9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdD15ZXMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRteD15ZXMgXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX2Rldl9wdGM9bm8gXAorIgorIyBUaGUgMyBsaW5lcyBiZWxvdyBhcmUgY29waWVkIGZyb20gdGhlIGxpYmZmaSByZWNpcGUsIGN0eXBlcyBzaGlwcyBpdHMgb3duIGNvcHkgb2YgdGhlIGxpYmZmaSBzb3VyY2VzCisjU29tZWhvdyBnY2MgZG9lc24ndCBzZXQgX19TT0ZURlBfXyB3aGVuIHBhc3NpbmcgLW1mbG9hdGFiaT1zb2Z0cCA6KAorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY2ID0gIiAtRF9fU09GVEZQX18iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjdhID0gIiAtRF9fU09GVEZQX18iCitUQVJHRVRfQ0NfQVJDSCArPSAiLUROREVCVUcgLWZuby1pbmxpbmUiCitFWFRSQV9PRU1BS0UgKz0gIkNST1NTX0NPTVBJTEU9eWVzIgorRVhUUkFfT0VDT05GICs9ICJDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIC0td2l0aG91dC1lbnN1cmVwaXAiCisKK2V4cG9ydCBDUk9TU19DT01QSUxFID0gIiR7VEFSR0VUX1BSRUZJWH0iCitleHBvcnQgX1BZVEhPTl9QUk9KRUNUX0JBU0UgPSAiJHtCfSIKK2V4cG9ydCBfUFlUSE9OX1BST0pFQ1RfU1JDID0gIiR7U30iCitleHBvcnQgQ0NTSEFSRUQgPSAiLWZQSUMiCisKKyMgRml4IGN0eXBlcyBjcm9zcyBjb21waWxhdGlvbgorZXhwb3J0IENST1NTUFlUSE9OUEFUSCA9ICIke0J9L2J1aWxkL2xpYi5saW51eC0ke1RBUkdFVF9BUkNIfS0ke1BZVEhPTl9NQUpNSU59OiR7U30vTGliOiR7U30vTGliL3BsYXQtbGludXgiCisKKyMgTm8gY3R5cGVzIG9wdGlvbiBmb3IgcHl0aG9uIDMKK1BZVEhPTkxTQk9QVFMgPSAiIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZworCWF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgLS1leGNsdWRlPWF1dG9wb2ludCAuLi9QeXRob24tJHtQVn0vTW9kdWxlcy9fY3R5cGVzL2xpYmZmaQorfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIHJlZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMsIGJlY2F1c2UgdGhleSBkZXBlbmQgb24gc3lzdGVtIGhlYWRlcnMKKyAgICAgICAgY2QgJHtTfS9MaWIvcGxhdC1saW51eCoKKyAgICAgICAgaW5jbHVkZT0ke1NUQUdJTkdfSU5DRElSfSAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisgICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAorICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQorICAgICAgICBjZCAtCisKKworCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKKwlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKKworCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKKwlmaQorCXNlZCAtaSAtZSAncyxeQ09ORklHVVJFX0xERkxBR1M9LiosQ09ORklHVVJFX0xERkxBR1M9LUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKKwkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQlNYWtlZmlsZQorCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKKwkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAorCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIgbGlicHl0aG9uMy5zbworCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAorCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcKKworCSMgcmVydW4gdGhlIGJ1aWxkIG9uY2UgYWdhaW4gd2l0aCBvcmlnaW5hbCBtYWtlZmlsZSB0aGlzIHRpbWUKKwkjIHJ1biBpbnN0YWxsIGluIGEgc2VwYXJhdGUgc3RlcCB0byBhdm9pZCBjb21waWxlL2luc3RhbGwgcmFjZQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KKwkKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKKworCSMgYXZvaWQgY29uZmxpY3Qgd2l0aCAydG8zIGZyb20gUHl0aG9uIDIKKwlybSAtZiAke0R9LyR7YmluZGlyfS8ydG8zCisKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSBURVJNSU5GT19ESVJTPScke3N5c2NvbmZkaXJ9L3Rlcm1pbmZvOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbycKK30KKworU1NUQVRFX1NDQU5fRklMRVMgKz0gIk1ha2VmaWxlIgorUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJweV9wYWNrYWdlX3ByZXByb2Nlc3MiCisKK3B5X3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisJIyBjb3B5IGJhY2sgdGhlIG9sZCBNYWtlZmlsZSB0byBmaXggdGFyZ2V0IHBhY2thZ2UKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9NYWtlZmlsZS5vcmlnICR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisJIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQorCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdF9jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLW9wZW5zc2wiCisKK0ZJTEVTXyR7UE59LTJ0bzMgKz0gIiR7YmluZGlyfS8ydG8zLSR7UFlUSE9OX01BSk1JTn0iCitGSUxFU18ke1BOfS1weWRvYyArPSAiJHtiaW5kaXJ9L3B5ZG9jJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHlkb2MzIgorRklMRVNfJHtQTn0taWRsZSArPSAiJHtiaW5kaXJ9L2lkbGUzICR7YmluZGlyfS9pZGxlJHtQWVRIT05fTUFKTUlOfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dmVudiIKK0ZJTEVTXyR7UE59LXB5dmVudiArPSAiJHtiaW5kaXJ9L3B5dmVudi0ke1BZVEhPTl9NQUpNSU59ICR7YmluZGlyfS9weXZlbnYiCisKKyMgcGFja2FnZSBsaWJweXRob24zCitQQUNLQUdFUyA9KyAibGlicHl0aG9uMyBsaWJweXRob24zLXN0YXRpY2RldiIKK0ZJTEVTX2xpYnB5dGhvbjMgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKK0ZJTEVTX2xpYnB5dGhvbjMtc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWctJHtQWVRIT05fQklOQUJJfS9saWJweXRob24ke1BZVEhPTl9CSU5BQkl9LmEiCisKKyMgY2F0Y2ggZGVidWcgZXh0ZW5zaW9ucyAoaXNuJ3QgdGhhdCBhbHJlYWR5IGluIHB5dGhvbi1jb3JlLWRiZz8pCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLy5kZWJ1ZyIKKworIyBjYXRjaCBhbGwgdGhlIHJlc3QgKHVuc29ydGVkKQorUEFDS0FHRVMgKz0gIiR7UE59LW1pc2MiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKKworIyBjYXRjaCBtYW5wYWdlCitQQUNLQUdFUyArPSAiJHtQTn0tbWFuIgorRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob25fMi43LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NTU3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy45LmJiCkBAIC0wLDAgKzEsMTgwIEBACityZXF1aXJlIHB5dGhvbi5pbmMKK0RFUEVORFMgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmkgYnppcDIgZGIgZ2RibSBvcGVuc3NsIHJlYWRsaW5lIHNxbGl0ZTMgemxpYiIKK1BSID0gIiR7SU5DX1BSfSIKKworRElTVFJPX1NSQ19VUkkgPz0gImZpbGU6Ly9zaXRlY3VzdG9taXplLnB5IgorRElTVFJPX1NSQ19VUklfbGludXhzdGRiYXNlID0gIiIKK1NSQ19VUkkgKz0gIlwKKyAgZmlsZTovLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIFwKKyAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCisgIGZpbGU6Ly8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIFwKKyAgJHtESVNUUk9fU1JDX1VSSX0gXAorICBmaWxlOi8vbXVsdGlsaWIucGF0Y2ggXAorICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKKyAgZmlsZTovL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIFwKKyAgZmlsZTovL2FkZC1tZDVtb2R1bGUtc3VwcG9ydC5wYXRjaCBcCisgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCisgIGZpbGU6Ly9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggXAorICBmaWxlOi8vc2V0dXB0d2Vha3MucGF0Y2ggXAorICBmaWxlOi8vY2hlY2staWYtdGFyZ2V0LWlzLTY0Yi1ub3QtaG9zdC5wYXRjaCBcCisgIGZpbGU6Ly9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoIFwKKyAgZmlsZTovL3B5dGhvbi0yLjcuMy1yZW1vdmUtYnNkYi1ycGF0aC5wYXRjaCBcCisgIGZpbGU6Ly9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIFwKKyAgZmlsZTovL3J1bi1wdGVzdCBcCisgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIFwKKyAgZmlsZTovL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9QeXRob24tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIG11bHRpbGliX2hlYWRlciBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitDT05GSUdVUkVPUFRTICs9ICIgLS13aXRoLXN5c3RlbS1mZmkgIgorCisjIFRoZSAzIGxpbmVzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSB0aGUgbGliZmZpIHJlY2lwZSwgY3R5cGVzIHNoaXBzIGl0cyBvd24gY29weSBvZiB0aGUgbGliZmZpIHNvdXJjZXMKKyNTb21laG93IGdjYyBkb2Vzbid0IHNldCBfX1NPRlRGUF9fIHdoZW4gcGFzc2luZyAtbWZsb2F0YWJpPXNvZnRwIDooCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjYgPSAiIC1EX19TT0ZURlBfXyIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12N2EgPSAiIC1EX19TT0ZURlBfXyIKKworIyBUaGUgZm9sbG93aW5nIGlzIGEgaGFjayB1bnRpbCB3ZSBkcm9wIGFjX2N2X3NpemVvZl9vZmZfdCBmcm9tIHNpdGUgZmlsZXMKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnYWNfY3Zfc2l6ZW9mX29mZl90PTgnLCAnJywgZCl9IGFjX2N2X2ZpbGVfX2Rldl9wdG14PXllcyBhY19jdl9maWxlX19kZXZfcHRjPW5vIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXJtIC1mICR7U30vTWFrZWZpbGUub3JpZworICAgICAgICBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCisgICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgyCisgICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAke1N9L1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9kbGZjbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9saW51eC9jZHJvbS5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9uZXRpbmV0L2luLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L3N5cy90eXBlcy5oCisgICAgICAgIHNlZCAtZSAncywke1NUQUdJTkdfRElSX0hPU1R9LCxnJyAtaSAqLnB5CisgICAgICAgIGNkIC0KKworCSMgcmVtb3ZlIGFueSBib2d1cyBMRF9MSUJSQVJZX1BBVEgKKwlzZWQgLWkgLWUgcyxSVU5TSEFSRUQ9LiosUlVOU0hBUkVEPSwgTWFrZWZpbGUKKworCWlmIFsgISAtZiBNYWtlZmlsZS5vcmlnIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLm9yaWcKKwlmaQorCXNlZCAtaSAtZSAncyNeTERGTEFHUz0uKiNMREZMQUdTPSR7TERGTEFHU30gLUwuIC1MJHtTVEFHSU5HX0xJQkRJUn0jZycgXAorCQktZSAncyxsaWJkaXI9JHtsaWJkaXJ9LGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSxnJyBcCisJCS1lICdzLGxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSxsaWJleGVjZGlyPSR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9LGcnIFwKKwkJLWUgJ3MsXkxJQkRJUj0uKixMSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxpbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0saW5jbHVkZWRpcj0ke1NUQUdJTkdfSU5DRElSfSxnJyBcCisJCS1lICdzLF5JTkNMVURFRElSPS4qLElOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeQ09ORklOQ0xVREVESVI9LiosQ09ORklOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQlNYWtlZmlsZQorCSMgc2F2ZSBjb3B5IG9mIGl0IG5vdywgYmVjYXVzZSBpZiB3ZSBkbyBpdCBpbiBkb19pbnN0YWxsIGFuZCAKKwkjIHRoZW4gY2FsbCBkb19pbnN0YWxsIHR3aWNlIHdlIGdldCBNYWtlZmlsZS5vcmlnID09IE1ha2VmaWxlLnN5c3Jvb3QKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUgTWFrZWZpbGUuc3lzcm9vdAorCisJZXhwb3J0IENST1NTX0NPTVBJTEU9IiR7VEFSR0VUX1BSRUZJWH0iCisJZXhwb3J0IFBZVEhPTkJVSUxERElSPSIke0J9IgorCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlPUFQ9IiR7Q0ZMQUdTfSIKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIG1ha2UgaW5zdGFsbCBuZWVkcyB0aGUgb3JpZ2luYWwgTWFrZWZpbGUsIG9yIG90aGVyd2lzZSB0aGUgaW5jbHVlcyB3b3VsZAorCSMgZ28gdG8gJHtEfSR7U1RBR0lORy4uLn0vLi4uCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLm9yaWcgTWFrZWZpbGUKKworCWV4cG9ydCBDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IgorCWV4cG9ydCBQWVRIT05CVUlMRERJUj0iJHtCfSIKKworCSMgQWZ0ZXIgc3dpenpsaW5nIHRoZSBtYWtlZmlsZSwgd2UgbmVlZCB0byBydW4gdGhlIGJ1aWxkIGFnYWluLgorCSMgaW5zdGFsbCBjYW4gcmFjZSB3aXRoIHRoZSBidWlsZCBzbyB3ZSBoYXZlIHRvIHJ1biB0aGlzIGZpcnN0LCB0aGVuIGluc3RhbGwKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCUNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfQorCQorCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IGluc3RhbGwKKworCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5zeXNyb290ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnL01ha2VmaWxlCisKKwlpZiBbIC1lICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9weWNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayAoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9weXRob24yLjcgVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgorCitweV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCisJIyBSZW1vdmUgcmVmZXJlbmNlcyB0byBidWlsZG1hY2hpbmUgcGF0aHMgaW4gdGFyZ2V0IE1ha2VmaWxlIGFuZCBfc3lzY29uZmlnZGF0YQorCXNlZCAtaSAtZSAnczotLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9OjpnJyAtZSBzOictLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSc6OmcgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZSBcCisJCSR7UEtHRH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3N5c2NvbmZpZ2RhdGEucHkKK30KKworcmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMKKworIyBtYW51YWwgZGVwZW5kZW5jeSBhZGRpdGlvbnMKK1JQUk9WSURFU18ke1BOfS1jb3JlID0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tY29yZSA9ICIke1BOfS1yZWFkbGluZSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmVfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbmF0aXZlc2RrLXB5dGhvbi1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHQgPSAib3BlbnNzbCIKKworIyBwYWNrYWdlIGxpYnB5dGhvbjIKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0yIgorRklMRVNfbGliJHtCUE59MiA9ICIke2xpYmRpcn0vbGlicHl0aG9uKi5zby4qIgorCisjIGNhdGNoIGRlYnVnIGV4dGVuc2lvbnMgKGlzbid0IHRoYXQgYWxyZWFkeSBpbiBweXRob24tY29yZS1kYmc/KQorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8uZGVidWciCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIiR7UE59LW1vZHVsZXMgJHtQTn0tbWlzYyIKKyNpbmhlcml0IHB0ZXN0IGFmdGVyICJyZXF1aXJlIHB5dGhvbi0ke1BZVEhPTl9NQUpNSU59LW1hbmlmZXN0LmluYyIgc28gUEFDS0FHRVMgZG9lc24ndCBnZXQgb3ZlcndyaXR0ZW4KK2luaGVyaXQgcHRlc3QKKworIyBUaGlzIG11c3QgY29tZSBhZnRlciBpbmhlcml0IHB0ZXN0IGZvciB0aGUgb3ZlcnJpZGUgdG8gdGFrZSBlZmZlY3QKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSBzOkxJQkRJUi9weXRob24vcHRlc3Q6JHtQVEVTVF9QQVRIfTpnIFwKKwkgLWUgczpMSUJESVI6JHtsaWJkaXJ9OmcgXAorCSAtaSAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KKworIyBjYXRjaCBtYW5wYWdlCitQQUNLQUdFUyArPSAiJHtQTn0tbWFuIgorRklMRVNfJHtQTn0tbWFuID0gIiR7ZGF0YWRpcn0vbWFuIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L25hdGl2ZXNkay1xZW11LWhlbHBlcl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZDFjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiUWVtdSBoZWxwZXIgc2NyaXB0cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitSREVQRU5EU18ke1BOfSA9ICJuYXRpdmVzZGstcWVtdSIKK1BSID0gInI5IgorCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vdHVuY3RsLmM7ZW5kbGluZT00O21kNT1mZjNhMDk5OTZiYzVmZmY2YmM1ZDRlMGI0YzI4Zjk5OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXU7ZW5kbGluZT0xODttZDU9NzdmYmU0NDJhODhiMWJjZGMyOWMzYmE2NzczM2IyMWIiCisKKworU1JDX1VSSSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11IFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1pbnRlcm5hbCBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtYWRkcHRhYmxlMmltYWdlIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaWZ1cCBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaWZkb3duIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvb2UtZmluZC1uYXRpdmUtc3lzcm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMgXAorICAgICAgICAgICBmaWxlOi8vdHVuY3RsLmMgXAorICAgICAgICAgICBmaWxlOi8vcmF3MmZsYXNoLmMgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZXNkaworCitkb19jb21waWxlKCkgeworCSR7Q0N9IHR1bmN0bC5jIC1vIHR1bmN0bAorCSR7Q0N9IHJhdzJmbGFzaC5jIC1vIHJhdzJmbGFzaC5zcGl0egorCSR7Q0N9IHJhdzJmbGFzaC5jIC1vIGZsYXNoMnJhdy5zcGl0eiAtRGZsYXNoMnJhdworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9JHtDT1JFQkFTRX0vc2NyaXB0cy9vZS0qICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUqICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCB0dW5jdGwgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vCisJbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC5ha2l0YQorCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2guYm9yem9pCisJbG4gLWZzIHJhdzJmbGFzaC5zcGl0eiAke0R9JHtiaW5kaXJ9L3JhdzJmbGFzaC50ZXJyaWVyCisJbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy5ha2l0YQorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcuYm9yem9pCisJbG4gLWZzIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9L2ZsYXNoMnJhdy50ZXJyaWVyCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci1uYXRpdmVfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI3YzRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkhlbHBlciB1dGlsaXRpZXMgbmVlZGVkIGJ5IHRoZSBydW5xZW11IHNjcmlwdCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitSREVQRU5EU18ke1BOfSA9ICJxZW11LW5hdGl2ZSIKK1BSID0gInIxIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L3R1bmN0bC5jO2VuZGxpbmU9NDttZDU9ZmYzYTA5OTk2YmM1ZmZmNmJjNWQ0ZTBiNGMyOGY5OTkiCisKK1NSQ19VUkkgPSAiZmlsZTovL3R1bmN0bC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gdHVuY3RsLmMgLW8gdHVuY3RsCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCB0dW5jdGwgJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvcmF3MmZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmYWY2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9wZW5lZEhhbmQgTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHTlUgR1BMIHYyLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBURlIoXykJCV8KKyNkZWZpbmUgVkVSQk9TRQorI2RlZmluZSBQQkFSX0xFTgk0MAorCisjZGVmaW5lIFBBUlRJVElPTl9TVEFSVAkweDAwNzAwMDAwCisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczhbXSA9IHsKKwkweDAsIDB4MSwgMHgyLAorfTsKKworc3RhdGljIGNvbnN0IGludCBlY2NfcG9zMTZbXSA9IHsKKwkweDAsIDB4MSwgMHgyLCAweDMsIDB4NiwgMHg3LAorfTsKKworc3RhdGljIGNvbnN0IGludCBlY2NfcG9zNjRbXSA9IHsKKwkweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorCTB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCisJMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX2FraXRhW10gPSB7CisJMHgwNSwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgxNSwgMHgxMSwKKwkweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAorCTB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4MzcsCit9OworCitzdHJ1Y3QgamZmc19tYXJrZXJfcyB7CisJaW50IHBvczsKKwl1aW50OF90IHZhbHVlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfcG9zOFtdID0geworCXsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA2LCAweDg1IH0sIHsgMHgwNywgMHgxOSB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczE2W10gPSB7CisJeyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAweDIwIH0sCisJeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwgeyAweDBmLCAweDAwIH0sCisJeyAtMSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfcG9zNjRbXSA9IHsKKwl7IDB4MDIsIDB4ZmYgfSwgeyAweDAzLCAweGZmIH0sIHsgMHgwNCwgMHhmZiB9LCB7IDB4MDUsIDB4ZmYgfSwKKwl7IDB4MDYsIDB4ZmYgfSwgeyAweDA3LCAweGZmIH0sIHsgMHgwOCwgMHhmZiB9LCB7IDB4MDksIDB4ZmYgfSwKKwl7IDB4MGEsIDB4ZmYgfSwgeyAweDBiLCAweGZmIH0sIHsgMHgwYywgMHhmZiB9LCB7IDB4MGQsIDB4ZmYgfSwKKwl7IDB4MGUsIDB4ZmYgfSwgeyAweDBmLCAweGZmIH0sIHsgMHgxMCwgMHg4NSB9LCB7IDB4MTEsIDB4MTkgfSwKKwl7IDB4MTIsIDB4MDMgfSwgeyAweDEzLCAweDIwIH0sIHsgMHgxNCwgMHgwOCB9LCB7IDB4MTUsIDB4MDAgfSwKKwl7IDB4MTYsIDB4MDAgfSwgeyAweDE3LCAweDAwIH0sIHsgMHgxOCwgMHhmZiB9LCB7IDB4MTksIDB4ZmYgfSwKKwl7IDB4MWEsIDB4ZmYgfSwgeyAweDFiLCAweGZmIH0sIHsgMHgxYywgMHhmZiB9LCB7IDB4MWQsIDB4ZmYgfSwKKwl7IDB4MWUsIDB4ZmYgfSwgeyAweDFmLCAweGZmIH0sIHsgMHgyMCwgMHhmZiB9LCB7IDB4MjEsIDB4ZmYgfSwKKwl7IDB4MjIsIDB4ZmYgfSwgeyAweDIzLCAweGZmIH0sIHsgMHgyNCwgMHhmZiB9LCB7IDB4MjUsIDB4ZmYgfSwKKwl7IDB4MjYsIDB4ZmYgfSwgeyAweDI3LCAweGZmIH0sCisJeyAtMSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zIGZyZWVfYWtpdGFbXSA9IHsKKwl7IDB4MDgsIDB4ODUgfSwgeyAweDA5LCAweDE5IH0sIHsgMHgwYSwgMHgwMyB9LCB7IDB4MGIsIDB4MjAgfSwKKwl7IDB4MGMsIDB4MDggfSwgeyAweDBkLCAweDAwIH0sIHsgMHgwZSwgMHgwMCB9LCB7IDB4MGYsIDB4MDAgfSwKKwl7IDB4MTAsIDB4ZmYgfSwKKwl7IC0xIH0sCit9OworCisjZGVmaW5lIExFTihhcnJheSkJKHNpemVvZihhcnJheSkgLyBzaXplb2YoKmFycmF5KSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlY2Nfc3R5bGVfcyB7CisJaW50IHBhZ2Vfc2l6ZTsKKwlpbnQgb29iX3NpemU7CisJaW50IGVjY2J5dGVzOworCWludCBlY2NzaXplOworCWNvbnN0IGludCAqZWNjcG9zOworCWludCByb21zaXplOworCWNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zICpmcmVlcG9zOworfSBzcGl0eiA9IHsKKwkweDIwMCwgMHgxMCwgMHgxMDAsIExFTihlY2NfcG9zMTYpLCBlY2NfcG9zMTYsIDB4MDEwMDAwMDAsIGZyZWVfcG9zMTYKK30sIGFraXRhID0geworCTB4ODAwLCAweDQwLCAweDEwMCwgTEVOKGVjY19ha2l0YSksIGVjY19ha2l0YSwgMHgwODAwMDAwMCwgZnJlZV9ha2l0YQorfSwgYm9yem9pID0geworCTB4ODAwLCAweDQwLCAweDEwMCwgTEVOKGVjY19ha2l0YSksIGVjY19ha2l0YSwgMHgwODAwMDAwMCwgZnJlZV9ha2l0YQorfSwgdGVycmllciA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK307CisKK3N0cnVjdCBlY2Nfc3RhdGVfcyB7CisJaW50IGNvdW50OworCXVpbnQ4X3QgY3A7CisJdWludDhfdCBscFsyXTsKKwljb25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgKnN0eWxlOworfTsKKworI2lmbmRlZiBmbGFzaDJyYXcKKy8qCisgKiBQcmUtY2FsY3VsYXRlZCAyNTYtd2F5IDEgYnl0ZSBjb2x1bW4gcGFyaXR5LiAgVGFibGUgYm9ycm93ZWQgZnJvbSBMaW51eC4KKyAqLworc3RhdGljIGNvbnN0IHVpbnQ4X3QgZWNjX3ByZWNhbGNfdGFibGVbXSA9IHsKKwkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLAorCTB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCisJMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwKKwkweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAorCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsCisJMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKKwkweDAzLCAweDU2LCAweDU1LCAweDAwLCAweDVhLCAweDBmLCAweDBjLCAweDU5LAorCTB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCisJMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywKKwkweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAorCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCisJMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKKwkweDBmLCAweDVhLCAweDU5LCAweDBjLCAweDU2LCAweDAzLCAweDAwLCAweDU1LAorCTB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCisJMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwKKwkweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAorCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCisJMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKKwkweDBmLCAweDVhLCAweDU5LCAweDBjLCAweDU2LCAweDAzLCAweDAwLCAweDU1LAorCTB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCisJMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwKKwkweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAorCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCisJMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKKwkweDAzLCAweDU2LCAweDU1LCAweDAwLCAweDVhLCAweDBmLCAweDBjLCAweDU5LAorCTB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCisJMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywKKwkweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAorCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsCisJMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKKwkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLAorCTB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCit9OworCisvKiBVcGRhdGUgRUNDIHBhcml0eSBjb3VudCAqLworc3RhdGljIGlubGluZSB1aW50OF90IGVjY19kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICpzLCB1aW50OF90IHNhbXBsZSkgeworCXVpbnQ4X3QgaWR4ID0gZWNjX3ByZWNhbGNfdGFibGVbc2FtcGxlXTsKKworCXMtPmNwIF49IGlkeCAmIDB4M2Y7CisJaWYgKGlkeCAmIDB4NDApIHsKKwkJcy0+bHBbMF0gXj0gfihzLT5jb3VudCAmIDB4ZmYpOworCQlzLT5scFsxXSBePSBzLT5jb3VudCAmIDB4ZmY7CisJfQorCXMtPmNvdW50ICsrOworCisJcmV0dXJuIHNhbXBsZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2RpZ2VzdChzdHJ1Y3QgZWNjX3N0YXRlX3MgKmVjYywKKwkJY29uc3QgdWludDhfdCAqYnVmLCB1aW50OF90ICpvdXQpIHsKKwlpbnQgaSwgbHBfYVsyXTsKKworCWVjYy0+bHBbMF0gPSAweDAwOworCWVjYy0+bHBbMV0gPSAweDAwOworCWVjYy0+Y3AgPSAweDAwOworCWVjYy0+Y291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0eWxlLT5lY2NieXRlczsgaSArKykKKwkJZWNjX2RpZ2VzdChlY2MsIGJ1ZltpXSk7CisKKyMgZGVmaW5lIEJTSFIoYnl0ZSwgZnJvbSwgdG8pCSgoZWNjLT5scFtieXRlXSA+PiAoZnJvbSAtIHRvKSkgJiAoMSA8PCB0bykpCisJbHBfYVswXSA9CisJCUJTSFIoMCwgNCwgMCkgfCBCU0hSKDAsIDUsIDIpIHwKKwkJQlNIUigwLCA2LCA0KSB8IEJTSFIoMCwgNywgNikgfAorCQlCU0hSKDEsIDQsIDEpIHwgQlNIUigxLCA1LCAzKSB8CisJCUJTSFIoMSwgNiwgNSkgfCBCU0hSKDEsIDcsIDcpOworCisjIGRlZmluZSBCU0hMKGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPDwgKHRvIC0gZnJvbSkpICYgKDEgPDwgdG8pKQorCWxwX2FbMV0gPQorCQlCU0hMKDAsIDAsIDApIHwgQlNITCgwLCAxLCAyKSB8CisJCUJTSEwoMCwgMiwgNCkgfCBCU0hMKDAsIDMsIDYpIHwKKwkJQlNITCgxLCAwLCAxKSB8IEJTSEwoMSwgMSwgMykgfAorCQlCU0hMKDEsIDIsIDUpIHwgQlNITCgxLCAzLCA3KTsKKworCW91dFswXSA9IH5scF9hWzFdOworCW91dFsxXSA9IH5scF9hWzBdOworCW91dFsyXSA9ICh+ZWNjLT5jcCA8PCAyKSB8IDB4MDM7Cit9CisKK3N0YXRpYyB2b2lkIGpmZnMyX2Zvcm1hdChjb25zdCBzdHJ1Y3QgZWNjX3N0YXRlX3MgKmVjYywgdWludDhfdCBvb2JbXSkgeworCWNvbnN0IHN0cnVjdCBqZmZzX21hcmtlcl9zICpieXRlOworCWZvciAoYnl0ZSA9IGVjYy0+c3R5bGUtPmZyZWVwb3M7IGJ5dGUtPnBvcyA+PSAwOyBieXRlICsrKQorCQlvb2JbYnl0ZS0+cG9zXSA9IGJ5dGUtPnZhbHVlOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfZmlsbChjb25zdCBzdHJ1Y3QgZWNjX3N0YXRlX3MgKmVjYywgdWludDhfdCBidWZmZXJbXSwKKwkJaW50ICpsZW4sIGludCAqcGFydGl0aW9uLCBpbnQgY291bnQsIHVpbnQ4X3QgamZmc19idWZmZXJbXSkgeworCWludCByZXQ7CisKKwlzd2l0Y2ggKCpwYXJ0aXRpb24pIHsKKwljYXNlIDA6CisJCWlmIChjb3VudCA8IFBBUlRJVElPTl9TVEFSVCkgeworCQkJbWVtY3B5KGJ1ZmZlciwgamZmc19idWZmZXIgKyBjb3VudCwKKwkJCQkJZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpOworCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0KKwkJKnBhcnRpdGlvbiA9IDE7CisJY2FzZSAxOgorCQlpZiAoY291bnQgLSBQQVJUSVRJT05fU1RBUlQgPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJCW1lbWNweShidWZmZXIsIGpmZnNfYnVmZmVyICsgY291bnQgLSBQQVJUSVRJT05fU1RBUlQsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9CisKKwkJd2hpbGUgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgKmxlbiwgMHg4MDAgLSAqbGVuKSk7CisJCQlpZiAocmV0IDw9IDApCisJCQkJYnJlYWs7CisJCQkqbGVuICs9IHJldDsKKwkJfQorCisJCWlmICgqbGVuID09IDApCisJCQkqcGFydGl0aW9uID0gMjsKKwkJZWxzZSBpZiAoKmxlbiA8IGVjYy0+c3R5bGUtPmVjY2J5dGVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuV2FybmluZzogJWkgc3RyYXkgYnl0ZXNcbiIsICpsZW4pOworCQkJbWVtc2V0KGJ1ZmZlciArICpsZW4sIDB4ZmYsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzIC0gKmxlbik7CisJCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlicmVhazsKKwljYXNlIDI6CisJCW1lbXNldChidWZmZXIsIDB4ZmYsIGVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQlicmVhazsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSkgeworCXN0cnVjdCBlY2Nfc3RhdGVfcyBlY2M7CisJdWludDhfdCBidWZmZXJbMHgxMDAwXSwgZWNjX3BheWxvYWRbMHg0MF0sIHJlZ3NbM10sICpqZmZzOworCWludCByZXQsIGxlbiwgZWNjYnl0ZSwgY291bnQsIHBhcnRpdGlvbjsKKworCS8qIENoZWNrIGlmIHdlJ3JlIGNhbGxlZCBieSAicmF3MmZsYXNoLnNwaXR6IiBvciBzaW1pbGFyICovCisJbGVuID0gc3RybGVuKGFyZ3ZbMF0pOworCWlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNSwgImFraXRhIikpCisJCWVjYy5zdHlsZSA9ICZha2l0YTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNiwgImJvcnpvaSIpKQorCQllY2Muc3R5bGUgPSAmYm9yem9pOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA3LCAidGVycmllciIpKQorCQllY2Muc3R5bGUgPSAmdGVycmllcjsKKwllbHNlCisJCWVjYy5zdHlsZSA9ICZzcGl0ejsKKworIyBpZmRlZiBWRVJCT1NFCisJZnByaW50ZihzdGRlcnIsICJbIik7CisjIGVuZGlmCisKKwkvKiBTa2lwIGZpcnN0IDEwIGJ5dGVzICovCisJVEZSKHJlYWQoMCwgYnVmZmVyLCAweDEwKSk7CisKKwlsZW4gPSAwOworCWpmZnMgPSAodWludDhfdCAqKSBtYWxsb2MoUEFSVElUSU9OX1NUQVJUKTsKKwl3aGlsZSAobGVuIDwgUEFSVElUSU9OX1NUQVJUKSB7CisJCXJldCA9IFRGUihyZWFkKDAsIGpmZnMgKyBsZW4sIFBBUlRJVElPTl9TVEFSVCAtIGxlbikpOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKwkJbGVuICs9IHJldDsKKwl9CisKKwkvKiBDb252ZXJ0IGRhdGEgZnJvbSBzdGRpbiAqLworCXBhcnRpdGlvbiA9IGxlbiA9IGVjY2J5dGUgPSBjb3VudCA9IDA7CisJbWVtc2V0KGVjY19wYXlsb2FkLCAweGZmLCBlY2Muc3R5bGUtPm9vYl9zaXplKTsKKwlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOworCXdoaWxlIChjb3VudCA8IGVjYy5zdHlsZS0+cm9tc2l6ZSkgeworCQlidWZmZXJfZmlsbCgmZWNjLCBidWZmZXIsICZsZW4sICZwYXJ0aXRpb24sIGNvdW50LCBqZmZzKTsKKwkJYnVmZmVyX2RpZ2VzdCgmZWNjLCBidWZmZXIsIHJlZ3MpOworCisJCWVjY19wYXlsb2FkW2VjYy5zdHlsZS0+ZWNjcG9zW2VjY2J5dGUgKytdXSA9IHJlZ3NbMF07CisJCWVjY19wYXlsb2FkW2VjYy5zdHlsZS0+ZWNjcG9zW2VjY2J5dGUgKytdXSA9IHJlZ3NbMV07CisJCWVjY19wYXlsb2FkW2VjYy5zdHlsZS0+ZWNjcG9zW2VjY2J5dGUgKytdXSA9IHJlZ3NbMl07CisKKwkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNjLnN0eWxlLT5lY2NieXRlcykpOworCQljb3VudCArPSBlY2Muc3R5bGUtPmVjY2J5dGVzOworCQlsZW4gLT0gZWNjLnN0eWxlLT5lY2NieXRlczsKKwkJbWVtbW92ZShidWZmZXIsIGJ1ZmZlciArIGVjYy5zdHlsZS0+ZWNjYnl0ZXMsIGxlbik7CisKKwkJaWYgKGVjY2J5dGUgPj0gZWNjLnN0eWxlLT5lY2NzaXplKSB7CisJCQlURlIod3JpdGUoMSwgZWNjX3BheWxvYWQsIGVjYy5zdHlsZS0+b29iX3NpemUpKTsKKwkJCWVjY2J5dGUgPSAwOworCQkJbWVtc2V0KGVjY19wYXlsb2FkLCAweGZmLCBlY2Muc3R5bGUtPm9vYl9zaXplKTsKKwkJCWlmIChwYXJ0aXRpb24gPCAyKQorCQkJCWpmZnMyX2Zvcm1hdCgmZWNjLCBlY2NfcGF5bG9hZCk7CisJCX0KKworIyBpZmRlZiBWRVJCT1NFCisJCWlmIChjb3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KKwkJCQkoY291bnQgLSBlY2Muc3R5bGUtPmVjY2J5dGVzKSAqCisJCQkJUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiMiKTsKKyMgZW5kaWYKKwl9CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiXVxuIik7CisjIGVuZGlmCisJZnJlZShqZmZzKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKKwlzdHJ1Y3QgZWNjX3N0YXRlX3MgZWNjOworCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF07CisJaW50IHJldCwgbGVuLCBjb3VudDsKKworCS8qIENoZWNrIGlmIHdlJ3JlIGNhbGxlZCBieSAiZmxhc2gycmF3LnNwaXR6IiBvciBzaW1pbGFyICovCisJbGVuID0gc3RybGVuKGFyZ3ZbMF0pOworCWlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNSwgImFraXRhIikpCisJCWVjYy5zdHlsZSA9ICZha2l0YTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNiwgImJvcnpvaSIpKQorCQllY2Muc3R5bGUgPSAmYm9yem9pOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0gKyBsZW4gLSA3LCAidGVycmllciIpKQorCQllY2Muc3R5bGUgPSAmdGVycmllcjsKKwllbHNlCisJCWVjYy5zdHlsZSA9ICZzcGl0ejsKKworIyBpZmRlZiBWRVJCT1NFCisJZnByaW50ZihzdGRlcnIsICJbIik7CisjIGVuZGlmCisKKwkvKiBDb252ZXJ0IGRhdGEgZnJvbSBzdGRpbiAqLworCWNvdW50ID0gMDsKKwl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUpIHsKKwkJbGVuID0gMDsKKwkJd2hpbGUgKGxlbiA8IGVjYy5zdHlsZS0+cGFnZV9zaXplKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIgKyBsZW4sCisJCQkJCQllY2Muc3R5bGUtPnBhZ2Vfc2l6ZSAtIGxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJbGVuICs9IHJldDsKKwkJfQorCQlpZiAobGVuID09IDApCisJCQlicmVhazsKKwkJaWYgKGxlbiA8IGVjYy5zdHlsZS0+cGFnZV9zaXplKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuV2FybmluZzogJWkgc3RyYXkgYnl0ZXNcbiIsIGxlbik7CisJCX0KKworCQlURlIod3JpdGUoMSwgYnVmZmVyLCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkpOworCisJCWNvdW50ICs9IGxlbjsKKwkJbGVuID0gMDsKKwkJd2hpbGUgKGxlbiA8IGVjYy5zdHlsZS0+b29iX3NpemUpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSAtIGxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJbGVuICs9IHJldDsKKwkJfQorCisjIGlmZGVmIFZFUkJPU0UKKwkJaWYgKGNvdW50ICogUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUgPgorCQkJCShjb3VudCAtIGVjYy5zdHlsZS0+cGFnZV9zaXplKSAqCisJCQkJUEJBUl9MRU4gLyBlY2Muc3R5bGUtPnJvbXNpemUpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiMiKTsKKyMgZW5kaWYKKwl9CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiXVxuIik7CisjIGVuZGlmCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXIvdHVuY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMjRhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jCkBAIC0wLDAgKzEsMTU2IEBACisvKiBDb3B5cmlnaHQgMjAwMiBKZWZmIERpa2UKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdHVuLmg+CisKKy8qIFRVTlNFVEdST1VQIGFwcGVhcmVkIGluIDIuNi4yMyAqLworI2lmbmRlZiBUVU5TRVRHUk9VUAorI2RlZmluZSBUVU5TRVRHUk9VUCAgIF9JT1coJ1QnLCAyMDYsIGludCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBVc2FnZShjaGFyICpuYW1lKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0ZTogJXMgWy1iXSBbLXUgb3duZXJdIFstZyBncm91cF0gWy10IGRldmljZS1uYW1lXSAiCisJICAiWy1mIHR1bi1jbG9uZS1kZXZpY2VdXG4iLCBuYW1lKTsKKyAgZnByaW50ZihzdGRlcnIsICJEZWxldGU6ICVzIC1kIGRldmljZS1uYW1lIFstZiB0dW4tY2xvbmUtZGV2aWNlXVxuXG4iLAorCSAgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAiVGhlIGRlZmF1bHQgdHVuIGNsb25lIGRldmljZSBpcyAvZGV2L25ldC90dW4gLSBzb21lIHN5c3RlbXMiCisJICAiIHVzZVxuL2Rldi9taXNjL25ldC90dW4gaW5zdGVhZFxuXG4iKTsKKyAgZnByaW50ZihzdGRlcnIsICItYiB3aWxsIHJlc3VsdCBpbiBicmllZiBvdXRwdXQgKGp1c3QgdGhlIGRldmljZSBuYW1lKVxuIik7CisgIGV4aXQoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IHBhc3N3ZCAqcHc7CisgIHN0cnVjdCBncm91cCAqZ3I7CisgIHVpZF90IG93bmVyID0gLTE7CisgIGdpZF90IGdyb3VwID0gLTE7CisgIGludCB0YXBfZmQsIG9wdCwgZGVsZXRlID0gMCwgYnJpZWYgPSAwOworICBjaGFyICp0dW4gPSAiIiwgKmZpbGUgPSAiL2Rldi9uZXQvdHVuIiwgKm5hbWUgPSBhcmd2WzBdLCAqZW5kOworCisgIHdoaWxlKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgImJkOmY6dDp1Omc6IikpID4gMCl7CisgICAgc3dpdGNoKG9wdCkgeworICAgICAgY2FzZSAnYic6CisgICAgICAgIGJyaWVmID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdkJzoKKyAgICAgICAgZGVsZXRlID0gMTsKKwl0dW4gPSBvcHRhcmc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZic6CisJZmlsZSA9IG9wdGFyZzsKKwlicmVhazsKKyAgICAgIGNhc2UgJ3UnOgorCXB3ID0gZ2V0cHduYW0ob3B0YXJnKTsKKwlpZihwdyAhPSBOVUxMKXsKKwkgIG93bmVyID0gcHctPnB3X3VpZDsKKwkgIGJyZWFrOworCX0KKyAgICAgICAgb3duZXIgPSBzdHJ0b2wob3B0YXJnLCAmZW5kLCAwKTsKKwlpZigqZW5kICE9ICdcMCcpeworCSAgZnByaW50ZihzdGRlcnIsICInJXMnIGlzIG5laXRoZXIgYSB1c2VybmFtZSBub3IgYSBudW1lcmljIHVpZC5cbiIsCisJCSAgb3B0YXJnKTsKKwkgIFVzYWdlKG5hbWUpOworCX0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdnJzoKKwlnciA9IGdldGdybmFtKG9wdGFyZyk7CisJaWYoZ3IgIT0gTlVMTCl7CisJICBncm91cCA9IGdyLT5ncl9naWQ7CisJICBicmVhazsKKwl9CisgICAgICAgIGdyb3VwID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMCk7CisJaWYoKmVuZCAhPSAnXDAnKXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJyVzJyBpcyBuZWl0aGVyIGEgZ3JvdXBuYW1lIG5vciBhIG51bWVyaWMgZ3JvdXAuXG4iLAorCQkgIG9wdGFyZyk7CisJICBVc2FnZShuYW1lKTsKKwl9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlICd0JzoKKyAgICAgICAgdHVuID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2gnOgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgVXNhZ2UobmFtZSk7CisgICAgfQorICB9CisKKyAgYXJndiArPSBvcHRpbmQ7CisgIGFyZ2MgLT0gb3B0aW5kOworCisgIGlmKGFyZ2MgPiAwKQorICAgIFVzYWdlKG5hbWUpOworCisgIGlmKCh0YXBfZmQgPSBvcGVuKGZpbGUsIE9fUkRXUikpIDwgMCl7CisgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiAnJXMnIDogIiwgZmlsZSk7CisgICAgcGVycm9yKCIiKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKworICBpZnIuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSTsKKyAgc3RybmNweShpZnIuaWZyX25hbWUsIHR1biwgc2l6ZW9mKGlmci5pZnJfbmFtZSkgLSAxKTsKKyAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRJRkYsICh2b2lkICopICZpZnIpIDwgMCl7CisgICAgcGVycm9yKCJUVU5TRVRJRkYiKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYoZGVsZXRlKXsKKyAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVFBFUlNJU1QsIDApIDwgMCl7CisgICAgICBwZXJyb3IoImRpc2FibGluZyBUVU5TRVRQRVJTSVNUIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwcmludGYoIlNldCAnJXMnIG5vbnBlcnNpc3RlbnRcbiIsIGlmci5pZnJfbmFtZSk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogZW11bGF0ZSBiZWhhdmlvdXIgcHJpb3IgdG8gVFVOU0VUR1JPVVAgKi8KKyAgICBpZihvd25lciA9PSAtMSAmJiBncm91cCA9PSAtMSkgeworICAgICAgb3duZXIgPSBnZXRldWlkKCk7CisgICAgfQorCisgICAgaWYob3duZXIgIT0gLTEpIHsKKyAgICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUT1dORVIsIG93bmVyKSA8IDApeworICAgICAgCXBlcnJvcigiVFVOU0VUT1dORVIiKTsKKyAgICAgIAlleGl0KDEpOworICAgICAgfQorICAgIH0KKyAgICBpZihncm91cCAhPSAtMSkgeworICAgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRHUk9VUCwgZ3JvdXApIDwgMCl7CisgICAgICAJcGVycm9yKCJUVU5TRVRHUk9VUCIpOworICAgICAgCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRQRVJTSVNULCAxKSA8IDApeworICAgICAgcGVycm9yKCJlbmFibGluZyBUVU5TRVRQRVJTSVNUIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmKGJyaWVmKQorICAgICAgcHJpbnRmKCIlc1xuIiwgaWZyLmlmcl9uYW1lKTsKKyAgICBlbHNlIHsKKyAgICAgIHByaW50ZigiU2V0ICclcycgcGVyc2lzdGVudCBhbmQgb3duZWQgYnkiLCBpZnIuaWZyX25hbWUpOworICAgICAgaWYob3duZXIgIT0gLTEpCisgICAgICAgICAgcHJpbnRmKCIgdWlkICVkIiwgb3duZXIpOworICAgICAgaWYoZ3JvdXAgIT0gLTEpCisgICAgICAgICAgcHJpbnRmKCIgZ2lkICVkIiwgZ3JvdXApOworICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyAgfQorICByZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LXRhcmdldHMuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM1NjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYwpAQCAtMCwwICsxLDIyIEBACisjIHBvc3NpYmxlIGFyY2ggdmFsdWVzIGFyZSBhcm0gYWFyY2g2NCBtaXBzIG1pcHNlbCBtaXBzNjQgbWlwczY0ZWwgcHBjIHBwYzY0IHBwYzY0YWJpMzIKKyMgcHBjZW1iIGFybWViIGFscGhhIHNwYXJjMzJwbHVzIGkzODYgeDg2XzY0IGNyaXMgbTY4ayBtaWNyb2JsYXplIHNwYXJjIHNwYXJjMzIKKyMgc3BhcmMzMnBsdXMKKworZGVmIGdldF9xZW11X3RhcmdldF9saXN0KGQpOgorICAgIGltcG9ydCBiYgorICAgIGFyY2hzID0gZC5nZXRWYXIoJ1FFTVVfVEFSR0VUUycsIFRydWUpLnNwbGl0KCkKKyAgICB0b3MgPSBkLmdldFZhcignSE9TVF9PUycsIFRydWUpCisgICAgc29mdG1tdW9ubHkgPSAiIgorICAgIGZvciBhcmNoIGluIFsnbWlwczY0JywgJ21pcHM2NGVsJywgJ3BwY2VtYiddOgorICAgICAgICBpZiBhcmNoIGluIGFyY2hzOgorICAgICAgICAgICAgc29mdG1tdW9ubHkgKz0gYXJjaCArICItc29mdG1tdSwiCisgICAgICAgICAgICBhcmNocy5yZW1vdmUoYXJjaCkKKyAgICBsaW51eHVzZXJvbmx5ID0gIiIKKyAgICBmb3IgYXJjaCBpbiBbJ2FybWViJywgJ2FscGhhJywgJ3BwYzY0YWJpMzInLCAnc3BhcmMzMnBsdXMnXToKKyAgICAgICAgaWYgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgICAgIGxpbnV4dXNlcm9ubHkgKz0gYXJjaCArICItbGludXgtdXNlciwiCisgICAgICAgICAgICBhcmNocy5yZW1vdmUoYXJjaCkKKyAgICBpZiAnbGludXgnIG5vdCBpbiB0b3M6CisgICAgICAgIHJldHVybiBzb2Z0bW11b25seSArICcnLmpvaW4oW2FyY2ggKyAiLXNvZnRtbXUiICsgIiwiIGZvciBhcmNoIGluIGFyY2hzXSkucnN0cmlwKCcsJykKKyAgICByZXR1cm4gc29mdG1tdW9ubHkgKyBsaW51eHVzZXJvbmx5ICsgJycuam9pbihbYXJjaCArICItbGludXgtdXNlciIgKyAiLCIgKyBhcmNoICsgIi1zb2Z0bW11IiArICIsIiBmb3IgYXJjaCBpbiBhcmNoc10pLnJzdHJpcCgnLCcpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4YmYyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jCkBAIC0wLDAgKzEsMTM3IEBACitTVU1NQVJZID0gIkZhc3Qgb3BlbiBzb3VyY2UgcHJvY2Vzc29yIGVtdWxhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3FlbXUub3JnIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorREVQRU5EUyA9ICJnbGliLTIuMCB6bGliIHBpeG1hbiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAiYmFzaCBweXRob24iCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJiYXNoIG1ha2UiCisKK3JlcXVpcmUgcWVtdS10YXJnZXRzLmluYworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUFIgPSAicjEiCisKKyMgUUVNVV9UQVJHRVRTIGlzIG92ZXJyaWRhYmxlIHZhcmlhYmxlCitRRU1VX1RBUkdFVFMgPz0gImFybSBhYXJjaDY0IGkzODYgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIHBwYyBzaDQgeDg2XzY0IgorCitTUkNfVVJJID0gIlwKKyAgICBmaWxlOi8vcG93ZXJwY19yb20uYmluIFwKKyAgICBmaWxlOi8vZGlzYWJsZS1ncmFicy5wYXRjaCBcCisgICAgZmlsZTovL2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaCBcCisgICAgZmlsZTovL3dhY29tLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoIFwKKyAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICBmaWxlOi8vY3B1cy5jLXFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZC1maXgtcmFjZS1jb25kaXRpb24tYS5wYXRjaCBcCisgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiXAorICAgIGZpbGU6Ly9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaCBcCisgICAgZmlsZTovL2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2ggXAorICAgICIKKworRVhUUkFfT0VDT05GICs9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yICAtLWRpc2FibGUtYmx1ZXogLS1kaXNhYmxlLWxpYmlzY3NpIC0td2l0aC1zeXN0ZW0tcGl4bWFuIC0tZXh0cmEtY2ZsYWdzPScke0NGTEFHU30nIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgLS1lbmFibGUtZGVidWcgLS1lbmFibGUtZGVidWctaW5mbyIKK0lOSElCSVRfU1lTUk9PVF9TVFJJUCA9ICIxIgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0tdGFyZ2V0LWxpc3Q9JHtAZ2V0X3FlbXVfdGFyZ2V0X2xpc3QoZCl9IC0tZGlzYWJsZS13ZXJyb3IgXAorCQkJCSIKK2V4cG9ydCBMSUJUT09MPSIke0hPU1RfU1lTfS1saWJ0b29sIgorCitkb19jb25maWd1cmVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJIyBBcHBlbmQgYnVpbGQgaG9zdCBwa2ctY29uZmlnIHBhdGhzIGZvciBuYXRpdmUgdGFyZ2V0IHNpbmNlIHRoZSBob3N0IG1heSBwcm92aWRlIHNkbAorCUJIT1NUX1BLR0NPTkZJR19QQVRIPSQoUEFUSD0vdXNyL2JpbjovYmluIHBrZy1jb25maWcgLS12YXJpYWJsZSBwY19wYXRoIHBrZy1jb25maWcgfHwgZWNobyAiIikKKwlpZiBbICEgLXogIiRCSE9TVF9QS0dDT05GSUdfUEFUSCIgXTsgdGhlbgorCQlleHBvcnQgUEtHX0NPTkZJR19QQVRIPSRQS0dfQ09ORklHX1BBVEg6JEJIT1NUX1BLR0NPTkZJR19QQVRICisJZmkKK30KKworS1ZNRU5BQkxFID0gIi0tZW5hYmxlLWt2bSIKK0tWTUVOQUJMRV9kYXJ3aW4gPSAiLS1kaXNhYmxlLWt2bSIKK0tWTUVOQUJMRV9taW5ndzMyID0gIi0tZGlzYWJsZS1rdm0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICAjIEhhbmRsZSBkaXN0cm9zIHN1Y2ggYXMgQ2VudE9TIDUgMzItYml0IHRoYXQgZG8gbm90IGhhdmUga3ZtIHN1cHBvcnQKKyAgICBLVk1PUFRTPSItLWRpc2FibGUta3ZtIgorICAgIGlmIFsgIiR7UE59IiAhPSAicWVtdS1uYXRpdmUiIC1hICIke1BOfSIgIT0gIm5hdGl2ZXNkay1xZW11IiBdIFwKKyAgICAgICB8fCBbIC1mIC91c3IvaW5jbHVkZS9saW51eC9rdm0uaCBdIDsgdGhlbgorICAgICAgIEtWTU9QVFM9IiR7S1ZNRU5BQkxFfSIKKyAgICBmaQorCisgICAgJHtTfS9jb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9IC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IC0tbGliZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IC0tbG9jYWxzdGF0ZWRpcj0ke2xvY2Fsc3RhdGVkaXJ9IC0tZGlzYWJsZS1zdHJpcCAke0VYVFJBX09FQ09ORn0gJEtWTU9QVFMKKyAgICB0ZXN0ICEgLWUgJHtTfS90YXJnZXQtaTM4Ni9iZWdpbmVuZF9mdW5jcy5zaCB8fCBjaG1vZCBhK3ggJHtTfS90YXJnZXQtaTM4Ni9iZWdpbmVuZF9mdW5jcy5zaAorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW1ha2UgYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgLXJMICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0KKwlmaW5kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIC10eXBlIGYgLW5hbWUgIiouW1NzaGNvZF0iIHwgeGFyZ3MgLWkgcm0gLXJmIHt9CisKKwljcCAke1N9L3Rlc3RzL01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCit9CisKK2RvX2luc3RhbGwgKCkgeworCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vcWVtdQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Bvd2VycGNfcm9tLmJpbiAke0R9JHtkYXRhZGlyfS9xZW11Cit9CisKKyMgVGhlIGZvbGxvd2luZyBmcmFnbWVudCB3aWxsIGNyZWF0ZSBhIHdyYXBwZXIgZm9yIHFlbXUtbWlwcyB1c2VyIGVtdWxhdGlvbgorIyBiaW5hcnkgaW4gb3JkZXIgdG8gd29yayBhcm91bmQgYSBzZWdtZW50YXRpb24gZmF1bHQgaXNzdWUuIEJhc2ljYWxseSwgYnkKKyMgZGVmYXVsdCwgdGhlIHJlc2VydmVkIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBmb3IgMzItb24tNjQgYml0IGlzIHNldCB0byA0R0IuCisjIFRoaXMgd2lsbCB0cmlnZ2VyIGEgTU1VIGFjY2VzcyBmYXVsdCBpbiB0aGUgdmlydHVhbCBDUFUuIFdpdGggdGhpcyBjaGFuZ2UsCisjIHRoZSBxZW11LW1pcHMgd29ya3MgZmluZS4KKyMgSU1QT1JUQU5UOiBUaGlzIHBpZWNlIG5lZWRzIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgcm9vdCBjYXVzZSBpcyBmaXhlZCEKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIFsgLWUgIiR7RH0vJHtiaW5kaXJ9L3FlbXUtbWlwcyIgXTsgdGhlbgorCQljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9xZW11LW1pcHMgXAorCQkJUUVNVV9SRVNFUlZFRF9WQT0weDAKKwlmaQorfQorIyBFTkQgb2YgcWVtdS1taXBzIHdvcmthcm91bmQKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisJZmR0IHNkbCBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hlbicsICd4ZW4nLCAnJywgZCl9IFwKKwkiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA/Pz0gImZkdCBhbHNhIHV1aWQiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZXNkayA/Pz0gImZkdCBzZGwiCitOQVRJVkVERVBTID0gIiIKK05BVElWRURFUFNfY2xhc3MtbmF0aXZlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2xpYnhleHQtbmF0aXZlJywgJycsZCl9IgorUEFDS0FHRUNPTkZJR1tzZGxdID0gIi0tZW5hYmxlLXNkbCwtLWRpc2FibGUtc2RsLGxpYnNkbCAke05BVElWRURFUFN9LCIKK1BBQ0tBR0VDT05GSUdbdmlydGZzXSA9ICItLWVuYWJsZS12aXJ0ZnMgLS1lbmFibGUtYXR0ciwtLWRpc2FibGUtdmlydGZzLGxpYmNhcCBhdHRyLCIKK1BBQ0tBR0VDT05GSUdbYWlvXSA9ICItLWVuYWJsZS1saW51eC1haW8sLS1kaXNhYmxlLWxpbnV4LWFpbyxsaWJhaW8sIgorUEFDS0FHRUNPTkZJR1t4ZnNdID0gIi0tZW5hYmxlLXhmc2N0bCwtLWRpc2FibGUteGZzY3RsLHhmc3Byb2dzLCIKK1BBQ0tBR0VDT05GSUdbeGVuXSA9ICItLWVuYWJsZS14ZW4sLS1kaXNhYmxlLXhlbix4ZW4seGVuLWxpYnhlbnN0b3JlIHhlbi1saWJ4ZW5jdHJsIHhlbi1saWJ4ZW5ndWVzdCIKK1BBQ0tBR0VDT05GSUdbdm5jLXRsc10gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy10bHMsLS1kaXNhYmxlLXZuYy10bHMsIGdudXRscywiCitQQUNLQUdFQ09ORklHW3ZuYy1zYXNsXSA9ICItLWVuYWJsZS12bmMgLS1lbmFibGUtdm5jLXNhc2wsLS1kaXNhYmxlLXZuYy1zYXNsLGN5cnVzLXNhc2wsIgorUEFDS0FHRUNPTkZJR1t2bmMtanBlZ10gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1qcGVnLC0tZGlzYWJsZS12bmMtanBlZyxqcGVnLCIKK1BBQ0tBR0VDT05GSUdbdm5jLXBuZ10gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1wbmcsLS1kaXNhYmxlLXZuYy1wbmcsbGlicG5nLCIKK1BBQ0tBR0VDT05GSUdbbGliY3VybF0gPSAiLS1lbmFibGUtY3VybCwtLWRpc2FibGUtY3VybCxsaWJjdXJsLCIKK1BBQ0tBR0VDT05GSUdbbnNzXSA9ICItLWVuYWJsZS1zbWFydGNhcmQtbnNzLC0tZGlzYWJsZS1zbWFydGNhcmQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW3V1aWRdID0gIi0tZW5hYmxlLXV1aWQsLS1kaXNhYmxlLXV1aWQsdXRpbC1saW51eCwiCitQQUNLQUdFQ09ORklHW2N1cnNlc10gPSAiLS1lbmFibGUtY3Vyc2VzLC0tZGlzYWJsZS1jdXJzZXMsbmN1cnNlcywiCitQQUNLQUdFQ09ORklHW2d0aytdID0gIi0tZW5hYmxlLWd0ayAtLWVuYWJsZS12dGUsLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtdnRlLGd0aysgbGlidnRlLCIKK1BBQ0tBR0VDT05GSUdbbGliY2FwLW5nXSA9ICItLWVuYWJsZS1jYXAtbmcsLS1kaXNhYmxlLWNhcC1uZyxsaWJjYXAtbmcsIgorUEFDS0FHRUNPTkZJR1tzc2gyXSA9ICItLWVuYWJsZS1saWJzc2gyLC0tZGlzYWJsZS1saWJzc2gyLGxpYnNzaDIsIgorUEFDS0FHRUNPTkZJR1tsaWJ1c2JdID0gIi0tZW5hYmxlLWxpYnVzYiwtLWRpc2FibGUtbGlidXNiLGxpYnVzYjEiCitQQUNLQUdFQ09ORklHW2ZkdF0gPSAiLS1lbmFibGUtZmR0LC0tZGlzYWJsZS1mZHQsZHRjIgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICIsLGFsc2EtbGliIgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLW9wZW5nbCwtLWRpc2FibGUtb3BlbmdsLG1lc2EiCitQQUNLQUdFQ09ORklHW2x6b10gPSAiLS1lbmFibGUtbHpvLC0tZGlzYWJsZS1sem8sbHpvIgorUEFDS0FHRUNPTkZJR1tudW1hXSA9ICItLWVuYWJsZS1udW1hLC0tZGlzYWJsZS1udW1hLG51bWFjdGwiCitQQUNLQUdFQ09ORklHW2dudXRsc10gPSAiLS1lbmFibGUtZ251dGxzLC0tZGlzYWJsZS1nbnV0bHMsZ251dGxzIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2Fsc2EnLCAnLS1hdWRpby1kcnYtbGlzdD1vc3MsYWxzYScsICcnLCBkKX0iCisKKyMgUWVtdSB0YXJnZXQgd2lsbCBub3QgYnVpbGQgaW4gd29ybGQgYnVpbGQgZm9yIEFSTSBvciBNaXBzCitCUk9LRU5fcWVtdWFybSA9ICIxIgorQlJPS0VOX3FlbXVtaXBzNjQgPSAiMSIKK0JST0tFTl9xZW11bWlwcyA9ICIxIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L1FlbXUtQXJtLXZlcnNhdGlsZXBiLUFkZC1tZW1vcnktc2l6ZS1jaGVja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZjZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA4OTZmYTAyYzI0MzQ3ZTZlOTI1OTgxMmNmZGExODdiMWQ2Y2E2MTk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbmcgTHUgPGx1LmppYW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDEzIE5vdiAyMDEzIDEwOjM4OjA4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFFlbXU6QXJtOnZlcnNhdGlsZXBiOiBBZGQgbWVtb3J5IHNpemUgY2hlY2tpbmcKKworVGhlIG1hY2hpbmUgY2FuIG5vdCB3b3JrIHdpdGggbWVtb3J5IG92ZXIgMjU2TSwgc28gYWRkIGEgY2hlY2tpbmcKK2F0IHN0YXJ0dXAuIElmIHRoZSBtZW1vcnkgc2l6ZSBleGNlZWQgMjU2TSwganVzdCBzdG9wIGVtdWxhdGlvbiB0aGVuCit0aHJvdyBvdXQgd2FybmluZyBhYm91dCBtZW1vcnkgbGltaXRhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEppYW5nIEx1IDxsdS5qaWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIGl0IG9uIDIwMTQtMDEtMTUgZm9yIHJlYmFzaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgaXQgd2hlbiB1cGdyYWRlIHFlbXUgdG8gMi4yLjAKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgaHcvYXJtL3ZlcnNhdGlsZXBiLmMgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ody9hcm0vdmVyc2F0aWxlcGIuYyBiL2h3L2FybS92ZXJzYXRpbGVwYi5jCitpbmRleCA2YzY5ZjRlLi45Mjc4ZDkwIDEwMDY0NAorLS0tIGEvaHcvYXJtL3ZlcnNhdGlsZXBiLmMKKysrKyBiL2h3L2FybS92ZXJzYXRpbGVwYi5jCitAQCAtMjA0LDYgKzIwNCwxMyBAQCBzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUsIGludCBib2FyZF9pZCkKKyAgICAgICAgIGV4aXQoMSk7CisgICAgIH0KKworKyAgICBpZiAobWFjaGluZS0+cmFtX3NpemUgPiAoMjU2IDw8IDIwKSkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisrICAgICAgICAgICAgICAgICJxZW11OiBUb28gbXVjaCBtZW1vcnkgZm9yIHRoaXMgbWFjaGluZTogJWQgTUIsIG1heGltdW0gMjU2IE1CXG4iLAorKyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGludClyYW1fc2l6ZSAvICgxIDw8IDIwKSkpOworKyAgICAgICAgZXhpdCgxKTsKKysgICAgfQorKworICAgICBjcHVvYmogPSBvYmplY3RfbmV3KG9iamVjdF9jbGFzc19nZXRfbmFtZShjcHVfb2MpKTsKKworICAgICAvKiBCeSBkZWZhdWx0IEFSTTExNzYgQ1BVcyBoYXZlIEVMMyBlbmFibGVkLiAgVGhpcyBib2FyZCBkb2VzIG5vdAorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvYWRkLXB0ZXN0LWluLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OWY3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIHN1YnBhY2thZ2UgLXB0ZXN0IHdoaWNoIHJ1bnMgYWxsIHVuaXQgdGVzdCBjYXNlcyBmb3IgcWVtdS4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9NYWtlZmlsZSB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCitpbmRleCA4OGY3MTA1Li4zZjQwYjRiIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUKKysrKyBiL3Rlc3RzL01ha2VmaWxlCitAQCAtNDA1LDMgKzQwNSwxMiBAQCBhbGw6ICQoUUVNVV9JT1RFU1RTX0hFTFBFUlMteSkKKyAKKyAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzLyouZCkKKyAtaW5jbHVkZSAkKHdpbGRjYXJkIHRlc3RzL2xpYnFvcy8qLmQpCisrCisrYnVpbGR0ZXN0LVRFU1RTOiAkKGNoZWNrLXVuaXQteSkKKysKKytydW50ZXN0LVRFU1RTOgorKwlmb3IgZiBpbiAkKGNoZWNrLXVuaXQteSk7IGRvIFwKKysJCW5mPSQkKGVjaG8gJCRmIHwgc2VkICdzL3Rlc3RzXC8vXC5cLy9nJyk7IFwKKysJCSQkbmY7IFwKKysJZG9uZQorKworLS0KKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2RjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorCitGcm9tIDlhYzA5NmQ4ZWNjZjJkNTZlY2U2NDYzMjBjMjgyYzgzNjlmODMzN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyOSBKdWwgMjAxNCAxODozNTo1OSArMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IGZpeCBEYXJ3aW4gdGFyZ2V0IGRldGVjdGlvbgorCitmaXggRGFyd2luIHRhcmdldCBkZXRlY3Rpb24gZm9yIHFlbXUKK2Nyb3NzLWNvbXBpbGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggMjgzYzcxYy4uMWM2NmExMSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDQ0LDYgKzQ0NCw4IEBAIGVsaWYgY2hlY2tfZGVmaW5lIF9fc3VuX18gOyB0aGVuCisgICB0YXJnZXRvcz0nU3VuT1MnCisgZWxpZiBjaGVja19kZWZpbmUgX19IQUlLVV9fIDsgdGhlbgorICAgdGFyZ2V0b3M9J0hhaWt1JworK2VsaWYgY2hlY2tfZGVmaW5lIF9fQVBQTEVfXyA7IHRoZW4KKysgIHRhcmdldG9zPSdEYXJ3aW4nCisgZWxzZQorICAgdGFyZ2V0b3M9YHVuYW1lIC1zYAorIGZpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODIyMTMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK0Zyb20gNjk3YTgzNGMzNWQxOTQ0N2I3ZGNkYjllMWQ5NDM0YmM2Y2UxN2MyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTIgQXVnIDIwMTUgMTU6MTE6MzAgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3B1cy5jOiBBZGQgZXJyb3IgbWVzc2FnZXMgd2hlbiBxZW1pX2NwdV9raWNrX3RocmVhZCBmYWlscy4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworQWRkIGN1c3RvbV9kZWJ1Zy5oIHdpdGggZnVuY3Rpb24gZm9yIHByaW50IGJhY2t0cmFjZSBpbmZvcm1hdGlvbi4KK1doZW4gcHRocmVhZF9raWxsIGZhaWxzIGluIHFlbXVfY3B1X2tpY2tfdGhyZWFkIGRpc3BsYXkgYmFja3RyYWNlIGFuZAorY3VycmVudCBjcHUgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjcHVzLmMgICAgICAgICB8ICA1ICsrKysrCisgY3VzdG9tX2RlYnVnLmggfCAyNCArKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY3VzdG9tX2RlYnVnLmgKKworZGlmZiAtLWdpdCBhL2NwdXMuYyBiL2NwdXMuYworaW5kZXggYTgyMmNlMy4uN2U0Nzg2ZSAxMDA2NDQKKy0tLSBhL2NwdXMuYworKysrIGIvY3B1cy5jCitAQCAtMTA4MCw2ICsxMDgwLDggQEAgc3RhdGljIHZvaWQgKnFlbXVfdGNnX2NwdV90aHJlYWRfZm4odm9pZCAqYXJnKQorICAgICByZXR1cm4gTlVMTDsKKyB9CisgCisrI2luY2x1ZGUgImN1c3RvbV9kZWJ1Zy5oIgorKworIHN0YXRpYyB2b2lkIHFlbXVfY3B1X2tpY2tfdGhyZWFkKENQVVN0YXRlICpjcHUpCisgeworICNpZm5kZWYgX1dJTjMyCitAQCAtMTA4OCw2ICsxMDkwLDkgQEAgc3RhdGljIHZvaWQgcWVtdV9jcHVfa2lja190aHJlYWQoQ1BVU3RhdGUgKmNwdSkKKyAgICAgZXJyID0gcHRocmVhZF9raWxsKGNwdS0+dGhyZWFkLT50aHJlYWQsIFNJR19JUEkpOworICAgICBpZiAoZXJyKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6JXM6ICVzIiwgX19mdW5jX18sIHN0cmVycm9yKGVycikpOworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDUFUgIyVkOlxuIiwgY3B1LT5jcHVfaW5kZXgpOworKyAgICAgICAgY3B1X2R1bXBfc3RhdGUoY3B1LCBzdGRlcnIsIGZwcmludGYsIDApOworKyAgICAgICAgYmFja3RyYWNlX3ByaW50KCk7CisgICAgICAgICBleGl0KDEpOworICAgICB9CisgI2Vsc2UgLyogX1dJTjMyICovCitkaWZmIC0tZ2l0IGEvY3VzdG9tX2RlYnVnLmggYi9jdXN0b21fZGVidWcuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYwMjllNDUKKy0tLSAvZGV2L251bGwKKysrKyBiL2N1c3RvbV9kZWJ1Zy5oCitAQCAtMCwwICsxLDI0IEBACisrI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2RlZmluZSBCQUNLVFJBQ0VfTUFYIDEyOAorK3N0YXRpYyB2b2lkIGJhY2t0cmFjZV9wcmludCh2b2lkKQorK3sKKysJaW50IG5mdW5jcyA9IDA7CisrCXZvaWQgKmJ1ZltCQUNLVFJBQ0VfTUFYXTsKKysJY2hhciAqKnN5bWJvbHM7CisrCWludCBpOworKworKwluZnVuY3MgPSBiYWNrdHJhY2UoYnVmLCBCQUNLVFJBQ0VfTUFYKTsKKysKKysJc3ltYm9scyA9IGJhY2t0cmFjZV9zeW1ib2xzKGJ1ZiwgbmZ1bmNzKTsKKysJaWYgKHN5bWJvbHMgPT0gTlVMTCkgeworKwkJZnByaW50ZihzdGRlcnIsICJiYWNrdHJhY2VfcHJpbnQgZmFpbGVkIHRvIGdldCBzeW1ib2xzIik7CisrCQlyZXR1cm47CisrCX0KKysKKysJZnByaW50ZihzdGRlcnIsICJCYWNrdHJhY2UgLi4uXG4iKTsKKysJZm9yIChpID0gMDsgaSA8IG5mdW5jczsgaSsrKQorKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgc3ltYm9sc1tpXSk7CisrCisrCWZyZWUoc3ltYm9scyk7CisrfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZmZhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZC1maXgtcmFjZS1jb25kaXRpb24tYS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitGcm9tIGYzNTRiOTMzMzQwOGQ0MTE4NTRhZjA1OGNjNDRjY2VkYTYwYjQ0NzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDMgU2VwIDIwMTUgMTQ6MDc6MzQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3B1cy5jOiBxZW11X211dGV4X2xvY2tfaW90aHJlYWQgZml4IHJhY2UgY29uZGl0aW9uIGF0IGNwdQorIHRocmVhZCBpbml0CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1doZW4gUUVNVSBzdGFydHMgdGhlIFJDVSB0aHJlYWQgZXhlY3V0ZXMgcWVtdV9tdXRleF9sb2NrX3RocmVhZAorY2F1c2luZyBlcnJvciAicWVtdTpxZW11X2NwdV9raWNrX3RocmVhZDogTm8gc3VjaCBwcm9jZXNzIiBhbmQgZXhpdHMuCisKK1RoaXMgaXNuJ3Qgb2NjdXIgZnJlcXVlbnRseSBidXQgaW4gZ2xpYmMgdGhlIHRocmVhZCBpZCBjYW4gZXhpc3QgYW5kCit0aGlzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdGhyZWFkIGlzIG9uIGFjdGl2ZS9ydW5uaW5nIHN0YXRlLiBJZiBpcworaW5zZXJ0ZWQgYSBzbGVlcCgxKSBhZnRlciBuZXd0aHJlYWQgYXNzaWdubWVudCBbMV0gdGhlIGlzc3VlIGFwcGVhcnMuCisKK1NvIG5vdCBtYWtlIGFzc3VtcHRpb24gdGhhdCB0aHJlYWQgZXhpc3QgaWYgZmlyc3RfY3B1LT50aHJlYWQgaXMgc2V0Cit0aGVuIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiBvZiBjcHUgdG8gY3JlYXRlZCB0aGF0IGlzIHNldCBpbnRvIGNwdQordGhyZWFkcyAoa3ZtLCB0Y2csIGR1bW15KS4KKworWzFdIGh0dHBzOi8vc291cmNld2FyZS5vcmcvZ2l0Lz9wPWdsaWJjLmdpdDthPWJsb2I7Zj1ucHRsL3B0aHJlYWRfY3JlYXRlLmM7aD1kMTBmNGVhODAwNGUxZDhmM2EyNjhiOTVjYzBmOGQ5M2I4ZDg5ODY3O2hiPUhFQUQjbDYyMQorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGNwdXMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwdXMuYyBiL2NwdXMuYworaW5kZXggN2U0Nzg2ZS4uMDVlNTQwMCAxMDA2NDQKKy0tLSBhL2NwdXMuYworKysrIGIvY3B1cy5jCitAQCAtMTE3MSw3ICsxMTcxLDcgQEAgdm9pZCBxZW11X211dGV4X2xvY2tfaW90aHJlYWQodm9pZCkKKyAgICAgICogVENHIGNvZGUgZXhlY3V0aW9uLgorICAgICAgKi8KKyAgICAgaWYgKCF0Y2dfZW5hYmxlZCgpIHx8IHFlbXVfaW5fdmNwdV90aHJlYWQoKSB8fAorLSAgICAgICAgIWZpcnN0X2NwdSB8fCAhZmlyc3RfY3B1LT50aHJlYWQpIHsKKysgICAgICAgICFmaXJzdF9jcHUgfHwgIWZpcnN0X2NwdS0+Y3JlYXRlZCkgeworICAgICAgICAgcWVtdV9tdXRleF9sb2NrKCZxZW11X2dsb2JhbF9tdXRleCk7CisgICAgICAgICBhdG9taWNfZGVjKCZpb3RocmVhZF9yZXF1ZXN0aW5nX211dGV4KTsKKyAgICAgfSBlbHNlIHsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzI2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2Rpc2FibGUtZ3JhYnMucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorV2hlbiB0aGUgcG9pbnRlciBlbnRlcnMgdGhlIFFlbXUgd2luZG93IGl0IGNhbGxzIFNETF9XTV9HcmFiSW5wdXQsIHdoaWNoIGNhbGxzCitYR3JhYlBvaW50ZXIgaW4gYSBidXN5bG9vcCB1bnRpbCBpdCByZXR1cm5zIEdyYWJTdWNjZXNzLiBIb3dldmVyIGlmIHRoZXJlJ3MgYWxyZWFkeQorYSBwb2ludGVyIGdyYWIgKHNjcmVlbiBpcyBsb2NrZWQsIGEgbWVudSBpcyBvcGVuKSB0aGVuIHFlbXUgd2lsbCBoYW5nIHVudGlsIHRoZQorZ3JhYiBjYW4gYmUgdGFrZW4uICBJbiB0aGUgc3BlY2lmaWMgY2FzZSBvZiBhIGhlYWRsZXNzIFggc2VydmVyIG9uIGFuIGF1dG9idWlsZGVyLCBvbmNlCit0aGUgc2NyZWVuc2F2ZXIgaGFzIGtpY2tlZCBpbiBhbnkgcWVtdSBpbnN0YW5jZSB0aGF0IGFwcGVhcnMgdW5kZXJuZWF0aCB0aGUKK3BvaW50ZXIgd2lsbCBoYW5nLgorCitJJ20gbm90IGVudGlyZWx5IHN1cmUgd2h5IHBvaW50ZXIgZ3JhYnMgYXJlIHJlcXVpcmVkICh0aGUgZG9jdW1lbnRhdGlvbgorZXhwbGljaXRseSBzYXlzIGl0IGRvZXNuJ3QgZG8gZ3JhYnMgd2hlbiB1c2luZyBhIHRhYmxldCwgd2hpY2ggd2UgYXJlKSBzbyB3cmFwCit0aGVtIGluIGEgY29uZGl0aW9uYWwgdGhhdCBjYW4gYmUgc2V0IGJ5IHRoZSBhdXRvYnVpbGRlciBlbnZpcm9ubWVudCwgcHJlc2VydmluZwordGhlIGN1cnJlbnQgZ3JhYmJpbmcgYmVoYXZpb3VyIGZvciBldmVyeW9uZSBlbHNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gNGIxOTg4ZWNiMDFhMTc4MjY5ZWMwNTEzYTc1ZjJlYzYyMGM3ZWY2YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDE4IFNlcCAyMDEzIDE0OjA0OjU0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNkbC5jOiBhbGxvdyB1c2VyIHRvIGRpc2FibGUgcG9pbnRlciBncmFicworCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+CistLS0KKyB1aS9zZGwuYyB8IDEyICsrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdWkvc2RsLmMgYi91aS9zZGwuYworaW5kZXggMzlhNDJkNi4uOWI4YWJlNSAxMDA2NDQKKy0tLSBhL3VpL3NkbC5jCisrKysgYi91aS9zZGwuYworQEAgLTU5LDYgKzU5LDEwIEBAIHN0YXRpYyBTRExfQ3Vyc29yICpndWVzdF9zcHJpdGUgPSBOVUxMOworIHN0YXRpYyBTRExfUGl4ZWxGb3JtYXQgaG9zdF9mb3JtYXQ7Cisgc3RhdGljIGludCBzY2FsaW5nX2FjdGl2ZSA9IDA7Cisgc3RhdGljIE5vdGlmaWVyIG1vdXNlX21vZGVfbm90aWZpZXI7CisrI2lmbmRlZiBUcnVlCisrI2RlZmluZSBUcnVlIDEKKysjZW5kaWYKKytzdGF0aWMgZG9pbmdfZ3JhYnMgPSBUcnVlOworIAorIHN0YXRpYyB2b2lkIHNkbF91cGRhdGUoRGlzcGxheUNoYW5nZUxpc3RlbmVyICpkY2wsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK0BAIC0zODQsMTQgKzM4OCwxNiBAQCBzdGF0aWMgdm9pZCBzZGxfZ3JhYl9zdGFydCh2b2lkKQorICAgICAgICAgICAgIFNETF9XYXJwTW91c2UoZ3Vlc3RfeCwgZ3Vlc3RfeSk7CisgICAgIH0gZWxzZQorICAgICAgICAgc2RsX2hpZGVfY3Vyc29yKCk7CistICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT04pOworKyAgICBpZiAoZG9pbmdfZ3JhYnMpCisrICAgICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PTik7CisgICAgIGd1aV9ncmFiID0gMTsKKyAgICAgc2RsX3VwZGF0ZV9jYXB0aW9uKCk7CisgfQorIAorIHN0YXRpYyB2b2lkIHNkbF9ncmFiX2VuZCh2b2lkKQorIHsKKy0gICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PRkYpOworKyAgICBpZiAoZG9pbmdfZ3JhYnMpCisrICAgICAgU0RMX1dNX0dyYWJJbnB1dChTRExfR1JBQl9PRkYpOworICAgICBndWlfZ3JhYiA9IDA7CisgICAgIHNkbF9zaG93X2N1cnNvcigpOworICAgICBzZGxfdXBkYXRlX2NhcHRpb24oKTsKK0BAIC05MDksNiArOTE1LDggQEAgdm9pZCBzZGxfZGlzcGxheV9pbml0KERpc3BsYXlTdGF0ZSAqZHMsIGludCBmdWxsX3NjcmVlbiwgaW50IG5vX2ZyYW1lKQorICAgICAgKiBUaGlzIHJlcXVpcmVzIFNETCA+PSAxLjIuMTQuICovCisgICAgIHNldGVudigiU0RMX0RJU0FCTEVfTE9DS19LRVlTIiwgIjEiLCAxKTsKKyAKKysgICAgZG9pbmdfZ3JhYnMgPSAoZ2V0ZW52KCJRRU1VX0RPTlRfR1JBQiIpID09IE5VTEwpOworKworICAgICBmbGFncyA9IFNETF9JTklUX1ZJREVPIHwgU0RMX0lOSVRfTk9QQVJBQ0hVVEU7CisgICAgIGlmIChTRExfSW5pdCAoZmxhZ3MpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBpbml0aWFsaXplIFNETCglcykgLSBleGl0aW5nXG4iLAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxYmRhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsOTMgQEAKK1tQQVRDSF0gZXhjbHVkZSBzb21lIGFybSBFQUJJIG9ic29sZXRlIHN5c2NhbGxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitzb21lIHN5c2NhbGxzIGFyZSBvYnNvbGV0ZSBhbmQgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgRUFCSSwgZXhjbHVkZSB0aGVtIHRvCitmaXggdGhlIGJlbG93IGVycm9yOgorCUluIGZpbGUgaW5jbHVkZWQgZnJvbSBxZW11LXNlY2NvbXAuYzoxNjowOgorCXFlbXUtc2VjY29tcC5jOjI4Ojc6IGVycm9yOiAnX19OUl9zZWxlY3QnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhzZWxlY3QpLCAyNTIgfSwKKwkgICAgICAgIF4KKwlxZW11LXNlY2NvbXAuYzozNjo3OiBlcnJvcjogJ19fTlJfbW1hcCcgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKwkgICAgICAgIF4KKwlxZW11LXNlY2NvbXAuYzo1Nzo3OiBlcnJvcjogJ19fTlJfZ2V0cmxpbWl0JyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMoZ2V0cmxpbWl0KSwgMjQ1IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6OTY6NzogZXJyb3I6ICdfX05SX3RpbWUnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6MTg1Ojc6IGVycm9yOiAnX19OUl9hbGFybScgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKGFsYXJtKSwgMjQxIH0sCisKK3BsZWFzZSByZWZlciBzb3VyY2UgZmlsZXM6CisJYXJjaC9hcm0vaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorb3Iga2VybmVsIGhlYWRlcjoKKwkvdXNyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHFlbXUtc2VjY29tcC5jIHwgMTQgKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcWVtdS1zZWNjb21wLmMgYi9xZW11LXNlY2NvbXAuYworaW5kZXggY2FhOTI2ZS4uNWE3ODUwMiAxMDA2NDQKKy0tLSBhL3FlbXUtc2VjY29tcC5jCisrKysgYi9xZW11LXNlY2NvbXAuYworQEAgLTI1LDE1ICsyNSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKHRpbWVyX3NldHRpbWUpLCAyNTUgfSwKKyAgICAgeyBTQ01QX1NZUyh0aW1lcl9nZXR0aW1lKSwgMjU0IH0sCisgICAgIHsgU0NNUF9TWVMoZnV0ZXgpLCAyNTMgfSwKKysjaWYgIWRlZmluZWQoX19BUk1fRUFCSV9fKQorICAgICB7IFNDTVBfU1lTKHNlbGVjdCksIDI1MiB9LAorKyAgICB7IFNDTVBfU1lTKHRpbWUpLCAyNDUgfSwKKysgICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorKyAgICB7IFNDTVBfU1lTKGdldHJsaW1pdCksIDI0NSB9LAorKyAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKysgICAgeyBTQ01QX1NZUyhzb2NrZXRjYWxsKSwgMjUwIH0sCisrICAgIHsgU0NNUF9TWVMoaXBjKSwgMjQ1IH0sCisrI2VuZGlmCisgICAgIHsgU0NNUF9TWVMocmVjdmZyb20pLCAyNTEgfSwKKyAgICAgeyBTQ01QX1NZUyhzZW5kdG8pLCAyNTAgfSwKKy0gICAgeyBTQ01QX1NZUyhzb2NrZXRjYWxsKSwgMjUwIH0sCisgICAgIHsgU0NNUF9TWVMocmVhZCksIDI0OSB9LAorICAgICB7IFNDTVBfU1lTKGlvX3N1Ym1pdCksIDI0OSB9LAorICAgICB7IFNDTVBfU1lTKGJyayksIDI0OCB9LAorICAgICB7IFNDTVBfU1lTKGNsb25lKSwgMjQ3IH0sCistICAgIHsgU0NNUF9TWVMobW1hcCksIDI0NyB9LAorICAgICB7IFNDTVBfU1lTKG1wcm90ZWN0KSwgMjQ2IH0sCisgICAgIHsgU0NNUF9TWVMoZXhlY3ZlKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMob3BlbiksIDI0NSB9LAorQEAgLTQ4LDEzICs1NCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKGJpbmQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhsaXN0ZW4pLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzZW1nZXQpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyhpcGMpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhnZXR0aW1lb2ZkYXkpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhyZWFkbGluayksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGFjY2VzcyksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHByY3RsKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2lnbmFsZmQpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyhnZXRybGltaXQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzZXRfdGlkX2FkZHJlc3MpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhzdGF0ZnMpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyh1bmxpbmspLCAyNDUgfSwKK0BAIC05Myw3ICs5Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWVtdVNlY2NvbXBTeXNjYWxsIHNlY2NvbXBfd2hpdGVsaXN0W10gPSB7CisgICAgIHsgU0NNUF9TWVModGltZXMpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhleGl0KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoY2xvY2tfZ2V0dGltZSksIDI0NSB9LAorLSAgICB7IFNDTVBfU1lTKHRpbWUpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhyZXN0YXJ0X3N5c2NhbGwpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhwd3JpdGU2NCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKG5hbm9zbGVlcCksIDI0NSB9LAorQEAgLTE4Miw3ICsxODUsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKGxzdGF0NjQpLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhzZW5kZmlsZTY0KSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVModWdldHJsaW1pdCksIDI0MSB9LAorLSAgICB7IFNDTVBfU1lTKGFsYXJtKSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMocnRfc2lnc3VzcGVuZCksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3NpZ3F1ZXVlaW5mbyksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3Rnc2lncXVldWVpbmZvKSwgMjQxIH0sCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTZlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK2ZpeCBsaWJjYXAgaGVhZGVyIGlzc3VlIG9uIHNvbWUgZGlzdHJvCisKKzEsIFdoZW4gYnVpbGQgcWVtdS1uYXRpdmUgb24gU0xFRCAxMS4yLCB0aGVyZSBpcyBhbiBlcnJvcjoKKy4uLgorfCBJbiBmaWxlIGluY2x1ZGVkIGZyb20gL3Vzci9pbmNsdWRlL2JpdHMvc2lnY29udGV4dC5oOjI4LAorfCAgZnJvbSAvdXNyL2luY2x1ZGUvc2lnbmFsLmg6MzM5LAorfCAgZnJvbSAvYnVpbGRhcmVhMi90bXAvd29yay9pNjg2LWxpbnV4L3FlbXUtbmF0aXZlLzEuNC4wLXIwLworcWVtdS0xLjQuMC9pbmNsdWRlL3FlbXUtY29tbW9uLmg6NDIsCit8ICBmcm9tIGZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYzoyMzoKK3wgIC91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oOjI4OiBlcnJvcjogZXhwZWN0ZWQgc3BlY2lmaWVyLQorcXVhbGlmaWVyLWxpc3QgYmVmb3JlICdfX3U2NCcKK3wgIC91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oOjE5MTogZXJyb3I6IGV4cGVjdGVkIHNwZWNpZmllci0KK3F1YWxpZmllci1saXN0IGJlZm9yZSAnX191NjQnCisuLi4KKworMiwgVGhlIHZpcnRmcy1wcm94eS1oZWxwZXIuYyBpbmNsdWRlcyA8c3lzL2NhcGFiaWxpdHkuaD4gYW5kCitxZW11LWNvbW1vbi5oIGluIHNlcXVlbmNlLiBUaGUgaGVhZGVyIGluY2x1ZGUgbWFwIGlzOgorKGAtLT4nIHByZXNlbnRzIGBpbmNsdWRlJykKKy4uLgorInZpcnRmcy1wcm94eS1oZWxwZXIuYyIgLS0+IDxzeXMvY2FwYWJpbGl0eS5oPgorLi4uCisidmlydGZzLXByb3h5LWhlbHBlci5jIiAtLT4gInFlbXUtY29tbW9uLmgiIC0tPiA8c2lnbmFsLmg+IC0tPgorPGJpdHMvc2lnY29udGV4dC5oPiAtLT4gPGFzbS9zaWdjb250ZXh0Lmg+IC0tPiA8bGludXgvdHlwZXMuaD4gLS0+Cis8YXNtL3R5cGVzLmg+IC0tPiA8YXNtLWdlbmVyaWMvdHlwZXMuaD4gLS0+IDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorLi4uCisKKzMsIFRoZSBidWcgaXMgZm91bmQgb24gU0xFRCAxMS4yIHg4Ni4gSW4gbGliY2FwIGhlYWRlciBmaWxlCisvdXNyL2luY2x1ZGUvc3lzL2NhcGFiaWxpdHkuaCwgaXQgZG9lcyBldmlsIHN0dWZmIGxpa2UgdGhpczoKKy4uLgorICAyNSAvKgorICAyNiAgKiBNYWtlIHN1cmUgd2UgY2FuIGJlIGluY2x1ZGVkIGZyb20gdXNlcmxhbmQgYnkgcHJldmVudGluZworICAyNyAgKiBjYXBhYmlsaXR5LmggZnJvbSBpbmNsdWRpbmcgb3RoZXIga2VybmVsIGhlYWRlcnMKKyAgMjggICovCisgIDI5ICNkZWZpbmUgX0xJTlVYX1RZUEVTX0gKKyAgMzAgI2RlZmluZSBfTElOVVhfRlNfSAorICAzMSAjZGVmaW5lIF9fTElOVVhfQ09NUElMRVJfSAorICAzMiAjZGVmaW5lIF9fdXNlcgorICAzMworICAzNCB0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKyAgMzUgdHlwZWRlZiBfX3UzMiBfX2xlMzI7CisuLi4KK1RoaXMgY29tcGxldGVseSBwcmV2ZW50cyBpbmNsdWRpbmcgL3Vzci9pbmNsdWRlL2xpbnV4L3R5cGVzLmguCitUaGUgYWJvdmUgYDxhc20vc2lnY29udGV4dC5oPiAtLT4gPGxpbnV4L3R5cGVzLmg+JyBpcyBwcmV2ZW50ZWQsCithbmQgJ19fdTY0JyBpcyBkZWZpbmVkIGluIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPi4KKworNCwgTW9kaWZ5IHZpcnRmcy1wcm94eS1oZWxwZXIuYyB0byBpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorbGFzdCB0byB3b3JrYXJvdW5kIHRoZSBpc3N1ZS4KKworaHR0cDovL3d3dy5saW51eHR2Lm9yZy9waXBlcm1haWwvdmRyLzIwMDktQXVndXN0LzAyMTE5NC5odG1sCitodHRwOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3BhdGNoLzEyNzQ4LworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYyB8ICAgIDcgKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMgYi9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMKKy0tLSBhL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYworKysrIGIvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jCitAQCAtMTIsNyArMTIsNiBAQAorICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorLSNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorICNpbmNsdWRlIDxzeXMvZnN1aWQuaD4KKyAjaW5jbHVkZSA8c3lzL3Zmcy5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KK0BAIC0yNiw3ICsyNSwxMSBAQAorICNpbmNsdWRlICJ2aXJ0aW8tOXAtbWFyc2hhbC5oIgorICNpbmNsdWRlICJody85cGZzL3ZpcnRpby05cC1wcm94eS5oIgorICNpbmNsdWRlICJmc2Rldi92aXJ0aW8tOXAtbWFyc2hhbC5oIgorLQorKy8qCisrICogSW5jbHVkZSB0aGlzIG9uZSBsYXN0IGR1ZSB0byBzb21lIHZlcnNpb25zIG9mIGl0IGJlaW5nIGJ1Z2d5OgorKyAqIGh0dHA6Ly93d3cubGludXh0di5vcmcvcGlwZXJtYWlsL3Zkci8yMDA5LUF1Z3VzdC8wMjExOTQuaHRtbAorKyAqLworKyNpbmNsdWRlIDxzeXMvY2FwYWJpbGl0eS5oPgorICNkZWZpbmUgUFJPR05BTUUgInZpcnRmcy1wcm94eS1oZWxwZXIiCisgCisgI2lmbmRlZiBYRlNfU1VQRVJfTUFHSUMKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3Bvd2VycGNfcm9tLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDA0NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQyNWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorcWVtdTogQWRkIGFkZGl0aW9uIGVudmlyb25tZW50IHNwYWNlIHRvIGJvb3QgbG9hZGVyIHFlbXUtc3lzdGVtLW1pcHMgCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAtIE9FIHVzZXMgZGVlcCBwYXRocworCitJZiB5b3UgY3JlYXRlIGEgcHJvamVjdCB3aXRoIHZlcnkgbG9uZyBkaXJlY3RvcnkgbmFtZXMgbGlrZSAxMjggY2hhcmFjdGVycworZGVlcCBhbmQgdXNlIE5GUywgdGhlIGtlcm5lbCBhcmd1bWVudHMgd2lsbCBiZSB0cnVuY2F0ZWQuIFRoZSBrZXJuZWwgd2lsbAorYWNjZXB0IGxvbmdlciBzdHJpbmdzIHN1Y2ggYXMgMTAyNCBieXRlcywgYnV0IHRoZSBxZW11IGJvb3QgbG9hZGVyIGRlZmF1bHRlZAordG8gb25seSAyNTYgYnl0ZXMuIFRoaXMgcGF0Y2ggZXhwYW5kcyB0aGUgbGltaXQuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBody9taXBzL21pcHNfbWFsdGEuYyAgICB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2h3L21pcHMvbWlwc19tYWx0YS5jIGIvaHcvbWlwcy9taXBzX21hbHRhLmMKK2luZGV4IDlkNTIxY2MuLjE3YzAzOTEgMTAwNjQ0CistLS0gYS9ody9taXBzL21pcHNfbWFsdGEuYworKysrIGIvaHcvbWlwcy9taXBzX21hbHRhLmMKK0BAIC01Myw3ICs1Myw3IEBACisgCisgI2RlZmluZSBFTlZQX0FERFIJCTB4ODAwMDIwMDBsCisgI2RlZmluZSBFTlZQX05CX0VOVFJJRVMJIAkxNgorLSNkZWZpbmUgRU5WUF9FTlRSWV9TSVpFCSAJMjU2CisrI2RlZmluZSBFTlZQX0VOVFJZX1NJWkUJIAkxMDI0CisgCisgLyogSGFyZHdhcmUgYWRkcmVzc2VzICovCisgI2RlZmluZSBGTEFTSF9BRERSRVNTIDB4MWUwMDAwMDBVTEwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI4ZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKyMKKyNUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biBxZW11IHRlc3Qgc3VpdGVzCitwdGVzdGRpcj0kKHB3ZCkKK2NkIHRlc3RzCisKK2V4cG9ydCBTUkNfUEFUSD0kcHRlc3RkaXIKK21ha2UgLWsgcnVudGVzdC1URVNUUyB8IHNlZCAnLzogT0svIHMvXi9QQVNTOiAvZycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzdlNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4LnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK1RoZSBzbWM5MWMxMTEuYyBkcml2ZXIgYXBwZWFycyB0byBoYXZlIHNldmVyYWwgaXNzdWVzLiBUaGUgY2FuX3JlY2VpdmUoKQorZnVuY3Rpb24gY2FuIHJldHVybiB0aGF0IHRoZSBkcml2ZXIgaXMgcmVhZHkgd2hlbiByeF9maWZvIGhhcyBub3QgYmVlbiAKK2ZyZWVkIHlldC4gVGhlcmUgaXMgYWxzbyBubyBzYW5pdHkgY2hlY2sgb2YgcnhfZmlmbygpIGluIF9yZWNlaXZlKCkgd2hpY2gKK2NhbiBsZWFkIHRvIGNvcnJ1cHRpb24gb2YgdGhlIHJ4X2ZpZm8gYXJyYXkuCisKK3JlbGVhc2VfcGFja2V0KCkgY2FuIGFsc28gY2FsbCBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkgYmVmb3JlIHJ4X2ZpZm8gCitoYXMgYmVlbiBjbGVhbmVkIHVwLCByZXN1bHRpbmcgaW4gY2FzZXMgd2hlcmUgcGFja2V0cyBhcmUgc3VibWl0dGVkCitmb3Igd2hpY2ggdGhlcmUgaXMgbm90IHlldCBhbnkgc3BhY2UuCisKK1RoaXMgcGF0Y2ggdGhlcmVmb3JlOgorCisqIGZpeGVzIHRoZSBsb2dpYyBpbiBjYW5fcmVjZWl2ZSgpCisqIGFkZHMgbG9naWMgdG8gcmVjZWl2ZSgpIGFzIGEgc2FuaXR5IGNoZWNrCisqIG1vdmVzIHRoZSBmbHVzaCgpIGNhbGxzIHRvIHRoZSBjb3JyZWN0IHBsYWNlcyB3aGVyZSBkYXRhIGlzIHJlYWR5CisgIHRvIGJlIHJlY2VpdmVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZGlzY3Vzc2lvbiBpbiBwcm9ncmVzcyBvbiBtYWlsaW5nIGxpc3RdCitSUCAyMDE1LzkvNworCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0xODUsNyArMTg1LDYgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHNtYworICAgICBzLT5hbGxvY2F0ZWQgJj0gfigxIDw8IHBhY2tldCk7CisgICAgIGlmIChzLT50eF9hbGxvYyA9PSAweDgwKQorICAgICAgICAgc21jOTFjMTExX3R4X2FsbG9jKHMpOworLSAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworIH0KKyAKKyAvKiBGbHVzaCB0aGUgVFggRklGTy4gICovCitAQCAtMjM3LDkgKzIzNiwxMSBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfZG9fdHgoc21jOTFjMTExX3N0CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICNlbmRpZgorLSAgICAgICAgaWYgKHMtPmN0ciAmIENUUl9BVVRPX1JFTEVBU0UpCisrICAgICAgICBpZiAocy0+Y3RyICYgQ1RSX0FVVE9fUkVMRUFTRSkgeworICAgICAgICAgICAgIC8qIFJhY2U/ICAqLworICAgICAgICAgICAgIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzLCBwYWNrZXRudW0pOworKyAgICAgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChzLT50eF9maWZvX2RvbmVfbGVuIDwgTlVNX1BBQ0tFVFMpCisgICAgICAgICAgICAgcy0+dHhfZmlmb19kb25lW3MtPnR4X2ZpZm9fZG9uZV9sZW4rK10gPSBwYWNrZXRudW07CisgICAgICAgICBxZW11X3NlbmRfcGFja2V0KHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYyksIHAsIGxlbik7CitAQCAtMzc5LDkgKzM4MCwxMSBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfd3JpdGViKHZvaWQgKm9wYXF1CisgICAgICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcy0+cnhfZmlmb1swXSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3BvcF9yeF9maWZvKHMpOworKyAgICAgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIDU6IC8qIFJlbGVhc2UuICAqLworICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcy0+cGFja2V0X251bSk7CisrICAgICAgICAgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgNjogLyogQWRkIHRvIFRYIEZJRk8uICAqLworICAgICAgICAgICAgICAgICBzbWM5MWMxMTFfcXVldWVfdHgocywgcy0+cGFja2V0X251bSk7CitAQCAtNjQyLDcgKzY0Miw3IEBAIHN0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKE5ldENsaWUKKyAKKyAgICAgaWYgKChzLT5yY3IgJiBSQ1JfUlhFTikgPT0gMCB8fCAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSkKKyAgICAgICAgIHJldHVybiAxOworLSAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpCisrICAgIGlmICgocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpIHx8IChzLT5yeF9maWZvX2xlbiA9PSBOVU1fUEFDS0VUUykpCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgcmV0dXJuIDE7CisgfQorQEAgLTY3MSw2ICs2NzEsOCBAQCBzdGF0aWMgc3NpemVfdCBzbWM5MWMxMTFfcmVjZWl2ZShOZXRDbGllCisgICAgIC8qIFRPRE86IEZsYWcgb3ZlcnJ1biBhbmQgcmVjZWl2ZSBlcnJvcnMuICAqLworICAgICBpZiAocGFja2V0c2l6ZSA+IDIwNDgpCisgICAgICAgICByZXR1cm4gLTE7CisrICAgIGlmICAocy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpCisrICAgICAgICByZXR1cm4gLTE7ICAgIAorICAgICBwYWNrZXRudW0gPSBzbWM5MWMxMTFfYWxsb2NhdGVfcGFja2V0KHMpOworICAgICBpZiAocGFja2V0bnVtID09IDB4ODApCisgICAgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEyMjNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitTdWJqZWN0OiBbUkZUIFBBVENIIHYxIDEvM10gbmV0OiBzbWM5MWMxMTE6IGd1YXJkIGZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkgb24KKyBjYW5fcngoKQorRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAyMToyMzo0MyAtMDcwMAorCitDaGVjayB0aGF0IHRoZSBjb3JlIGNhbiBvbmNlIGFnYWluIHJlY2VpdmUgcGFja2V0cyBiZWZvcmUgYXNraW5nIHRoZQorbmV0IGxheWVyIHRvIGRvIGEgZmx1c2guIFRoaXMgd2lsbCBtYWtlIGl0IG1vcmUgY29udmVuaWVudCB0byBmbHVzaAorcGFja2V0cyB3aGVuIGFkZGluZyBuZXcgY29uZGl0aW9ucyB0byBjYW5fcmVjZWl2ZS4KKworQWRkIG1pc3NpbmcgaWYgYnJhY2VzIHdoaWxlIG1vdmluZyB0aGUgY2FuX3JlY2VpdmUoKSBjb3JlIGNvZGUuCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKy0tLQorCisgaHcvbmV0L3NtYzkxYzExMS5jIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTEyNCw2ICsxMjQsMjQgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3VwZGF0ZShzbWM5MWMxMTFfcworICAgICBxZW11X3NldF9pcnEocy0+aXJxLCBsZXZlbCk7CisgfQorIAorK3N0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKHNtYzkxYzExMV9zdGF0ZSAqcykKKyt7CisrICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpIHsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkgeworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMoc21jOTFjMTExX3N0YXRlICpzKQorK3sKKysgICAgaWYgKHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzKSkgeworKyAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKysgICAgfQorK30KKysKKyAvKiBUcnkgdG8gYWxsb2NhdGUgYSBwYWNrZXQuICBSZXR1cm5zIDB4ODAgb24gZmFpbHVyZS4gICovCisgc3RhdGljIGludCBzbWM5MWMxMTFfYWxsb2NhdGVfcGFja2V0KHNtYzkxYzExMV9zdGF0ZSAqcykKKyB7CitAQCAtMTg1LDcgKzIwMyw3IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzbWMKKyAgICAgcy0+YWxsb2NhdGVkICY9IH4oMSA8PCBwYWNrZXQpOworICAgICBpZiAocy0+dHhfYWxsb2MgPT0gMHg4MCkKKyAgICAgICAgIHNtYzkxYzExMV90eF9hbGxvYyhzKTsKKy0gICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKysgICAgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHMpOworIH0KKyAKKyAvKiBGbHVzaCB0aGUgVFggRklGTy4gICovCitAQCAtNjM2LDE1ICs2NTQsMTEgQEAgc3RhdGljIHVpbnQzMl90IHNtYzkxYzExMV9yZWFkbCh2b2lkICpvcAorICAgICByZXR1cm4gdmFsOworIH0KKyAKKy1zdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShOZXRDbGllbnRTdGF0ZSAqbmMpCisrc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmVfbmMoTmV0Q2xpZW50U3RhdGUgKm5jKQorIHsKKyAgICAgc21jOTFjMTExX3N0YXRlICpzID0gcWVtdV9nZXRfbmljX29wYXF1ZShuYyk7CisgCistICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpCistICAgICAgICByZXR1cm4gMTsKKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKQorLSAgICAgICAgcmV0dXJuIDA7CistICAgIHJldHVybiAxOworKyAgICByZXR1cm4gc21jOTFjMTExX2Nhbl9yZWNlaXZlKHMpOworIH0KKyAKKyBzdGF0aWMgc3NpemVfdCBzbWM5MWMxMTFfcmVjZWl2ZShOZXRDbGllbnRTdGF0ZSAqbmMsIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IHNpemUpCitAQCAtNzM5LDcgKzc1Myw3IEBAIHN0YXRpYyBjb25zdCBNZW1vcnlSZWdpb25PcHMgc21jOTFjMTExX20KKyBzdGF0aWMgTmV0Q2xpZW50SW5mbyBuZXRfc21jOTFjMTExX2luZm8gPSB7CisgICAgIC50eXBlID0gTkVUX0NMSUVOVF9PUFRJT05TX0tJTkRfTklDLAorICAgICAuc2l6ZSA9IHNpemVvZihOSUNTdGF0ZSksCistICAgIC5jYW5fcmVjZWl2ZSA9IHNtYzkxYzExMV9jYW5fcmVjZWl2ZSwKKysgICAgLmNhbl9yZWNlaXZlID0gc21jOTFjMTExX2Nhbl9yZWNlaXZlX25jLAorICAgICAucmVjZWl2ZSA9IHNtYzkxYzExMV9yZWNlaXZlLAorIH07CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMThhZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitYLUdvb2dsZS1PcmlnaW5hbC1Gcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorVG86IHFlbXUtZGV2ZWxAbm9uZ251Lm9yZworQ2M6IHBldGVyLm1heWRlbGxAbGluYXJvLm9yZywgcmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZworU3ViamVjdDogW1JGVCBQQVRDSCB2MSAyLzNdIG5ldDogc21jOTFjMTExOiBnYXRlIGNhbl9yZWNlaXZlKCkgb24gcnggRklGTworIGhhdmluZyBhIHNsb3QKK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMjE6MjM6NTcgLTA3MDAKKworUmV0dXJuIGZhbHNlIGZyb20gY2FuX3JlY2VpdmUoKSB3aGVuIHRoZSBGSUZPIGRvZXNuJ3QgaGF2ZSBhIGZyZWUgUlgKK3Nsb3QuIFRoaXMgZml4ZXMgYSBidWcgaW4gdGhlIGN1cnJlbnQgY29kZSB3aGVyZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlcgoraXMgZnJlZWQgYmVmb3JlIHRoZSBmaWZvIHBvcCwgdHJpZ2dlcmluZyBhIHByZW1hdHVyZSBmbHVzaCBvZiBxdWV1ZWQgUlgKK3BhY2tldHMuIEl0IGFsc28gd2lsbCBoYW5kbGUgYSBjb3JuZXIgY2FzZSwgd2hlcmUgdGhlIGd1ZXN0IG1hbnVhbGx5CitmcmVlcyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBiZWZvcmUgcG9wcGluZyB0aGUgcnggRklGTyAoaGVuY2UgaXQgaXMgbm90Citlbm91Z2ggdG8ganVzdCBkZWxheSB0aGUgZmx1c2hfcXVldWVkX3BhY2tldHMoKSkuCisKK1JlcG9ydGVkLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KK1NpZ25lZC1vZmYtYnk6IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMTI5LDcgKzEyOSw4IEBAIHN0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlKHNtYzkxYzEKKyAgICAgaWYgKChzLT5yY3IgJiBSQ1JfUlhFTikgPT0gMCB8fCAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSkgeworICAgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKSB7CisrICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSB8fAorKyAgICAgICAgcy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpIHsKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgICAgIHJldHVybiAxOworQEAgLTE4Miw2ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfcG9wX3J4X2ZpZm8oc21jOTFjCisgICAgIH0gZWxzZSB7CisgICAgICAgICBzLT5pbnRfbGV2ZWwgJj0gfklOVF9SQ1Y7CisgICAgIH0KKysgICAgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHMpOworICAgICBzbWM5MWMxMTFfdXBkYXRlKHMpOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODY1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb206IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZXBldGVyQGdtYWlsLmNvbT4KK1RvOiBxZW11LWRldmVsQG5vbmdudS5vcmcKK0NjOiBwZXRlci5tYXlkZWxsQGxpbmFyby5vcmcsIHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmcKK1N1YmplY3Q6IFtSRlQgUEFUQ0ggdjEgMy8zXSBuZXQ6IHNtYzkxYzExMTogZmx1c2ggcGFja2V0cyBvbiBSQ1IgcmVnaXN0ZXIKKyBjaGFuZ2VzCitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDIxOjI0OjEyIC0wNzAwCisKK1RoZSBTT0ZUX1JTVCBvciBSWEVOIGluIHRoZSBjb250cm9sIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIGFzIGEgY29uZGl0aW9uCit0byB1bmJsb2NrIHRoZSBuZXQgbGF5ZXIgdmlhIGNhbl9yZWNlaXZlKCkuIFNvIGNoZWNrIGZvciBwb3NzaWJsZQorZmx1c2hlcyBvbiBSQ1IgY2hhbmdlcy4gVGhpcyB3aWxsIGRyb3AgYWxsIHBlbmRpbmcgcGFja2V0cyBvbiBzb2Z0CityZXNldCBvciBkaXNhYmxlIHdoaWNoIGlzIHRoZSBmdW5jdGlvbmFsIGludGVudCBvZiB0aGUgY2FuX3JlY2VpdmUoKQorbG9naWMuCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIENyb3N0aHdhaXRlIDxjcm9zdGh3YWl0ZS5wZXRlckBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0zMzEsNiArMzMxLDcgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3dyaXRlYih2b2lkICpvcGFxdQorICAgICAgICAgICAgIGlmIChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpIHsKKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3Jlc2V0KERFVklDRShzKSk7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICBjYXNlIDEwOiBjYXNlIDExOiAvKiBSUENSICovCisgICAgICAgICAgICAgLyogSWdub3JlZCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS93YWNvbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNmFhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2gKQEAgLTAsMCArMSwxMzAgQEAKK1RoZSBVU0Igd2Fjb20gZGV2aWNlIGlzIG1pc3NpbmcgYSBISUQgZGVzY3JpcHRvciB3aGljaCBjYXVzZXMgaXQKK3RvIGZhaWwgdG8gb3BlcmF0ZSB3aXRoIHJlY2VudCBrZXJuZWxzIChlLmcuIDMuMTcpLgorCitUaGlzIHBhdGNoIGFkZHMgYSBISUQgZGVzcmlwdG9yIHRvIHRoZSBkZXZpY2UsIGJhc2VkIHVwb24gb25lIGZyb20gCityZWFsIHdjb20gZGV2aWNlLgorCitTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZC5wdXJkaWVAbGludXhmb3VuZGF0aW9uLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKzIwMTQvMTEvMjcKKworSW5kZXg6IHFlbXUtMi4xLjAvaHcvdXNiL2Rldi13YWNvbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjEuMC5vcmlnL2h3L3VzYi9kZXYtd2Fjb20uYwkyMDE0LTA4LTAxIDE1OjEyOjE3LjAwMDAwMDAwMCArMDEwMAorKysrIHFlbXUtMi4xLjAvaHcvdXNiL2Rldi13YWNvbS5jCTIwMTQtMTAtMTIgMTI6MTM6MzAuNTQwMzA2MDQyICswMTAwCitAQCAtNjgsNiArNjgsODkgQEAKKyAgICAgW1NUUl9TRVJJQUxOVU1CRVJdICAgICA9ICIxIiwKKyB9OworIAorK3N0YXRpYyBjb25zdCB1aW50OF90IHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvcltdID0geworKyAgICAweDA1LCAweDAxLAkJLyogVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDAyLAkJLyogVXNhZ2UgKE1vdXNlKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDEsCQkvKiAgIFJlcG9ydCBJRCAoMSkgKi8gCisrICAgIDB4MDksIDB4MDEsCQkvKiAgIFVzYWdlIChQb2ludGVyKSAqLworKyAgICAweGExLCAweDAwLAkJLyogICBDb2xsZWN0aW9uIChQaHlzaWNhbCkgKi8KKysgICAgMHgwNSwgMHgwOSwJCS8qICAgICBVc2FnZSBQYWdlIChCdXR0b24pICovCisrICAgIDB4MTksIDB4MDEsCQkvKiAgICAgVXNhZ2UgTWluaW11bSAoMSkgKi8KKysgICAgMHgyOSwgMHgwNSwJCS8qICAgICBVc2FnZSBNYXhpbXVtICg1KSAqLworKyAgICAweDE1LCAweDAwLAkJLyogICAgIExvZ2ljYWwgTWluaW11bSAoMCkgKi8KKysgICAgMHgyNSwgMHgwMSwJCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDEpICovCisrICAgIDB4OTUsIDB4MDUsCQkvKiAgICAgUmVwb3J0IENvdW50ICg1KSAqLworKyAgICAweDc1LCAweDAxLAkJLyogICAgIFJlcG9ydCBTaXplICgxKSAqLworKyAgICAweDgxLCAweDAyLAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4OTUsIDB4MDEsCQkvKiAgICAgUmVwb3J0IENvdW50ICgxKSAqLworKyAgICAweDc1LCAweDAzLAkJLyogICAgIFJlcG9ydCBTaXplICgzKSAqLworKyAgICAweDgxLCAweDAxLAkJLyogICAgIElucHV0IChDb25zdGFudCkgKi8KKysgICAgMHgwNSwgMHgwMSwJCS8qICAgICBVc2FnZSBQYWdlIChHZW5lcmljIERlc2t0b3ApICovCisrICAgIDB4MDksIDB4MzAsCQkvKiAgICAgVXNhZ2UgKFgpICovCisrICAgIDB4MDksIDB4MzEsCQkvKiAgICAgVXNhZ2UgKFkpICovCisrICAgIDB4MTUsIDB4ODEsCQkvKiAgICAgTG9naWNhbCBNaW5pbXVtICgtMTI3KSAqLworKyAgICAweDI1LCAweDdmLAkJLyogICAgIExvZ2ljYWwgTWF4aW11bSAoMTI3KSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDAyLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMikgKi8KKysgICAgMHg4MSwgMHgwNiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIFJlbGF0aXZlKSAqLworKyAgICAweGMwLAkJLyogICBFbmQgQ29sbGVjdGlvbiAqLworKyAgICAweGMwLAkJLyogRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHgwNSwgMHgwZCwJCS8qIFVzYWdlIFBhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4YTEsIDB4MDEsCQkvKiBDb2xsZWN0aW9uIChBcHBsaWNhdGlvbikgKi8KKysgICAgMHg4NSwgMHgwMiwJCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHhhMSwgMHgwMCwJCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsICAgLyogICBVc2FnZSBQYWdlIChWZW5kb3IgMHhmZjAwKSAqLworKyAgICAweDA5LCAweDAxLCAJLyogICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDE1LCAweDAwLCAJLyogICAgIExvZ2ljYWwgTWluaW11bSAoMCkgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwJLyogICAgIExvZ2ljYWwgTWF4aW11bSAoMjU1KSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDA4LAkJLyogICAgIFJlcG9ydCBDb3VudCAoOCkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweGMwLCAJCS8qICAgRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHg4NSwgMHgwMiwgCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHg5NSwgMHgwMSwJCS8qICAgUmVwb3J0IENvdW50ICgxKSAqLworKyAgICAweGIxLCAweDAyLAkJLyogICBGRUFUVVJFICgyKSAqLworKyAgICAweGMwLAkJLyogRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwJLyogVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4YTEsIDB4MDEsCQkvKiBDb2xsZWN0aW9uIChBcHBsaWNhdGlvbikgKi8KKysgICAgMHg4NSwgMHgwMiwgICAJLyogICBSZXBvcnQgSUQgKDIpICovIAorKyAgICAweDA1LCAweDBkLAkJLyogICBVc2FnZSBQYWdlIChEaWdpdGl6ZXIpICAqLworKyAgICAweDA5LCAweDIyLCAJLyogICBVc2FnZSAoRmluZ2VyKSAqLworKyAgICAweGExLCAweDAwLCAgCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsCS8qICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwJCS8qICAgICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDE1LCAweDAwLCAJLyogICAgIExvZ2ljYWwgTWluaW11bSAoMCkgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwgIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MDIsCQkvKiAgICAgUmVwb3J0IENvdW50ICgyKSAqLworKyAgICAweDgxLCAweDAyLCAJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4MDUsIDB4MDEsCQkvKiAgICAgVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDMwLAkJLyogICAgIFVzYWdlIChYKSAqLworKyAgICAweDM1LCAweDAwLCAJLyogICAgIFBoeXNpY2FsIE1pbmltdW0gKi8KKysgICAgMHg0NiwgMHhlMCwgMHgyZSwJLyogICAgIFBoeXNpY2FsIE1heGltdW0gKi8KKysgICAgMHgyNiwgMHhlMCwgMHgwMSwgICAvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MTAsCQkvKiAgICAgUmVwb3J0IFNpemUgKDE2KSAqLworKyAgICAweDk1LCAweDAxLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA5LCAweDMxLAkJLyogICAgIFVzYWdlIChZKSAqLworKyAgICAweDQ2LCAweDQwLCAweDFmLCAJLyogICAgIFBoeXNpY2FsIE1heGltdW0gKi8KKysgICAgMHgyNiwgMHg0MCwgMHgwMSwgCS8qICAgICBMb2dpY2FsIE1heGltdW0gKi8KKysgICAgMHg4MSwgMHgwMiwgCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLAkvKiAgICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwgCS8qICAgICBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweDI2LCAweGZmLCAweDAwLCAgCS8qICAgICBMb2dpY2FsIE1heGltdW0gKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwZCwJCS8qICAgICBSZXBvcnQgQ291bnQgKDEzKSAqLworKyAgICAweDgxLCAweDAyLAkJLyogICAgIElucHV0IChEYXRhLCBWYXJpYWJsZSwgQWJzb2x1dGUpICovCisrICAgIDB4YzAsCQkvKiAgIEVuZCBDb2xsZWN0aW9uICovIAorKyAgICAweGMwLAkJLyogRW5kIENvbGxlY3Rpb24gKi8KKyt9OworKworKworIHN0YXRpYyBjb25zdCBVU0JEZXNjSWZhY2UgZGVzY19pZmFjZV93YWNvbSA9IHsKKyAgICAgLmJJbnRlcmZhY2VOdW1iZXIgICAgICAgICAgICAgID0gMCwKKyAgICAgLmJOdW1FbmRwb2ludHMgICAgICAgICAgICAgICAgID0gMSwKK0BAIC04NSw3ICsxNjgsNyBAQAorICAgICAgICAgICAgICAgICAweDAwLCAgICAgICAgICAvKiAgdTggIGNvdW50cnlfY29kZSAqLworICAgICAgICAgICAgICAgICAweDAxLCAgICAgICAgICAvKiAgdTggIG51bV9kZXNjcmlwdG9ycyAqLworICAgICAgICAgICAgICAgICAweDIyLCAgICAgICAgICAvKiAgdTggIHR5cGU6IFJlcG9ydCAqLworLSAgICAgICAgICAgICAgICAweDZlLCAwLCAgICAgICAvKiAgdTE2IGxlbiAqLworKyAgICAgICAgICAgICAgICBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKSwgMCwgLyogIHUxNiBsZW4gKi8KKyAgICAgICAgICAgICB9LAorICAgICAgICAgfSwKKyAgICAgfSwKK0BAIC0yNjUsNiArMzUwLDE1IEBACisgICAgIH0KKyAKKyAgICAgc3dpdGNoIChyZXF1ZXN0KSB7CisrICAgIGNhc2UgSW50ZXJmYWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisrICAgICAgICBzd2l0Y2ggKHZhbHVlID4+IDgpIHsKKysgICAgICAgIGNhc2UgMHgyMjoKKysgICAgICAgICAgICAgICAgbWVtY3B5KGRhdGEsIHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvciwKKysgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpKTsKKysgICAgICAgICAgICAgICAgcC0+YWN0dWFsX2xlbmd0aCA9IHNpemVvZihxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgV0FDT01fU0VUX1JFUE9SVDoKKyAgICAgICAgIGlmIChzLT5tb3VzZV9ncmFiYmVkKSB7CisgICAgICAgICAgICAgcWVtdV9yZW1vdmVfbW91c2VfZXZlbnRfaGFuZGxlcihzLT5laF9lbnRyeSk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11XzIuNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWIxNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHFlbXUuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ0MWMyOGQyY2Y4NmUxNWEzN2ZhNDdlMTVhNzJmYmFjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO2VuZGxpbmU9MjQ7bWQ1PWMwNGRlZjdhZTM4ODUwZTdkM2VmNTQ4NTg4MTU5OTEzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NtYzkxYzExMV9maXgxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbWM5MWMxMTFfZml4Mi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc21jOTFjMTExX2ZpeDMucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJX3ByZXBlbmQgPSAiaHR0cDovL3dpa2kucWVtdS1wcm9qZWN0Lm9yZy9kb3dubG9hZC8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjE4NmVlODE5NDE0MGE0ODRhNDU1ZjhlM2M3NDU4OWY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyYjBiOTkxYmJjYzU0MDY2M2EwMTllMWU4YzRmNzE0MDUzYjY5MWRkYTMyYzliOWVlODBiMjVmMzY3ZTY2MjAiCisKK0NPTVBBVElCTEVfSE9TVF9jbGFzcy10YXJnZXRfbWlwczY0ID0gIm51bGwiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICMgUHJldmVudCBRQSB3YXJuaW5ncyBhYm91dCBpbnN0YWxsZWQgJHtsb2NhbHN0YXRlZGlyfS9ydW4KKyAgICBpZiBbIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biBdOyB0aGVuIHJtZGlyICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bjsgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdXdyYXBwZXItY3Jvc3NfMS4wLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiUUVNVSB3cmFwcGVyIHNjcmlwdCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBxZW11CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisKKwllY2hvICIjIS9iaW4vc2giID4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKKwlxZW11X2JpbmFyeT0ke0BxZW11X3RhcmdldF9iaW5hcnkoZCl9CisJcWVtdV9vcHRpb25zPScke1FFTVVfT1BUSU9OU30nCisJZWNobyAiJHFlbXVfYmluYXJ5ICRxZW11X29wdGlvbnMgXCJcJEBcIiIgPj4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKKwlmYWxsYmFja19xZW11X2Jpbj0KKwljYXNlICRxZW11X2JpbmFyeSBpbgorCQkicWVtdS1pMzg2IikKKwkJCWZhbGxiYWNrX3FlbXVfYmluPXFlbXUteDg2XzY0CisJCQk7OworCQkicWVtdS14ODZfNjQiKQorCQkJZmFsbGJhY2tfcWVtdV9iaW49cWVtdS1pMzg2CisJCQk7OworCQkqKQorCQkJOzsKKwllc2FjCisKKwlpZiBbIC1uICIkZmFsbGJhY2tfcWVtdV9iaW4iIF07IHRoZW4KKworCQljYXQgPj4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIgPDwgRU9GCityYz1cJD8KK2lmIFsgXCRyYyA9IDI1NSBdOyB0aGVuCisJJGZhbGxiYWNrX3FlbXVfYmluICJcJEAiCisJcmM9XCQ/CitmaQorZXhpdCBcJHJjCitFT0YKKworCWZpCisKKwljaG1vZCAreCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9xZW11d3JhcHBlcgorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInFlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworcWVtdXdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNGIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYwpAQCAtMCwwICsxLDE4IEBACitSREVQRU5EU18ke1BOfSA9ICJkaWZmc3RhdC1uYXRpdmUgcGF0Y2gtbmF0aXZlIGJ6aXAyLW5hdGl2ZSB1dGlsLWxpbnV4LW5hdGl2ZSIKKworSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorCitpbmhlcml0IG5hdGl2ZQorCitQQVRDSFRPT0wgPSAicGF0Y2giCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW5scyIKKworZG9fY29uZmlndXJlICgpIHsKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIER1bW15IHF1aWx0cmMgZmlsZSBmb3IgcGF0Y2guYmJjbGFzcworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vcXVpbHRyYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzdkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlXzAuNjQuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHF1aWx0LmluYworcmVxdWlyZSBxdWlsdC1uYXRpdmUuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdiMzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYwpAQCAtMCwwICsxLDYyIEBACitTVU1NQVJZID0gIlRvb2wgZm9yIHdvcmtpbmcgd2l0aCBzZXJpZXMgb2YgcGF0Y2hlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0LyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9xdWlsdC9xdWlsdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vaW5zdGFsbC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmMwMzEwZGI1ODY4YTA4NzNkNjAyZDQzMzJhNzZkNDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzRiZmQzMjgyMjE0YTI4OGU4ZDNlOTIxYWU0ZDUyZTczZTI0YzRmZWFkNzJiNTQ0Njc1MmFkZWU5OWE3YWZmZCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0CisKK0VYVFJBX09FQ09ORl9kYXJ3aW4gKz0gIi0td2l0aG91dC1kYXRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1nZXRvcHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitQQUNLQUdFUyArPSAiZ3VhcmRzIGd1YXJkcy1kb2MiCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0vcXVpbHQgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3F1aWx0ICR7bGliZGlyfS9xdWlsdCIKK0ZJTEVTX2d1YXJkcyA9ICIke2JpbmRpcn0vZ3VhcmRzIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfS9tYW4xL3F1aWx0LjEgJHtkb2NkaXJ9LyR7QlBOfSIKK0ZJTEVTX2d1YXJkcy1kb2MgPSAiJHttYW5kaXJ9L21hbjEvZ3VhcmRzLjEiCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCisKK0VYVFJBX09FX01BS0VfQVJHU19kYXJ3aW4gPz0gIiIKK0VYVFJBX09FX01BS0VfQVJHUyA/PSAiQlVJTERfUk9PVD0ke0R9IgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9CQVNIPS9iaW4vYmFzaCIKKworIyBxdWlsdCBpZ25vcmVzIERFU1RESVIKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJHtFWFRSQV9PRV9NQUtFX0FSR1N9IGluc3RhbGwKKwkjIGNsZWFudXAgdW5wYWNrYWdlZCBmaWxlcworCXJtIC1yZiAke0R9LyR7ZGF0YWRpcn0vZW1hY3MKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIGJpbi9wYXRjaC13cmFwcGVyIHRlc3QvLmRlcGVuZAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSBiaW4vIC0tZXhjbHVkZSBcKi5pbiB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwl0YXIgLWNmIC0gY29tcGF0LyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIHF1aWx0LyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIHRlc3QvIC0tZXhjbHVkZSBtYWlsLnRlc3QgLS1leGNsdWRlIGRlbGV0ZS50ZXN0IHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAibWFrZSBmaWxlIHNlZCBnYXdrIGRpZmZ1dGlscyBmaW5kdXRpbHMgZWQgcGVybCBcCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS1maWxlaGFuZGxlIHBlcmwtbW9kdWxlLWdldG9wdC1zdGQgXAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtcG9zaXggcGVybC1tb2R1bGUtZmlsZS10ZW1wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXRleHQtcGFyc2V3b3JkcyBwZXJsLW1vZHVsZS1vdmVybG9hZGluZyBcCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNoIHV0aWwtbGludXgtZ2V0b3B0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2FjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorUEFUSCA6PSAgICAgICAgICQoQ1VSRElSKS9iaW46JChDVVJESVIpL2NvbXBhdDokKFBBVEgpCitRVUlMVF9ESVIgOj0gICAgJChDVVJESVIpL3F1aWx0CitRVUlMVFJDIDo9ICAgICAgJChDVVJESVIpL3Rlc3QvdGVzdC5xdWlsdHJjCitleHBvcnQgUVVJTFRfRElSIFFVSUxUUkMKK0NIRUNLX0VOViA6PSBQPXBhdGNoZXMvOyBfUD0uLi9wYXRjaGVzLzsgZXhwb3J0IFAgX1AKKy1pbmNsdWRlIHRlc3QvLmRlcGVuZAorCitjaGVjay0lIDogdGVzdC8lLnRlc3QKKwlATEFORz1DOyBMQ19BTEw9QzsgXAorCWV4cG9ydCBMQU5HIExDX0FMTDsgXAorCSQoQ0hFQ0tfRU5WKTsgXAorCWNkICQoPEQpOyBcCisJLi9ydW4gLXEgJCg8RikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2FjbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNDQyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoCkBAIC0wLDAgKzEsMTI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIHRoZSBhY2xvY2FsLm00IGFzIGFjaW5jbHVkZS5tNAorCitJbmRleDogcXVpbHQtMC40Ny9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBxdWlsdC0wLjQ3L2FjaW5jbHVkZS5tNAkyMDA2LTEwLTEwIDE3OjA1OjU2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMTkgQEAKKytkbmwgQWxsb3cgY29uZmlndXJlIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyBiaW5hcnkKKytkbmwgMTogRW52aXJvbm1lbnQgdmFyaWFibGUKKytkbmwgMjogYmluYXJ5IG5hbWUKKytkbmwgMzogb3B0aW9uYWwgbGlzdCBvZiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtZXMKKytkbmwgNDogb3B0aW9uYWwgbGlzdCBvZiBhZGRpdGlvbmFsIHNlYXJjaCBkaXJlY3RvcmllcworK0FDX0RFRlVOKFtRVUlMVF9DT01QQVRfUFJPR19QQVRIXSxbCisrICBtNF9kZWZpbmUoW2ludGVybmFsXyQyX2NtZF0sW2VzeXNjbWQobHMgY29tcGF0LyQyLmluIDI+L2Rldi9udWxsKV0pCisrCisrICBBQ19BUkdfV0lUSCgkMiwgQUNfSEVMUF9TVFJJTkcoCisrICAgIFstLXdpdGgtJDJdLCBbbmFtZSBvZiB0aGUgJDIgZXhlY3V0YWJsZSB0byB1c2VdCisrICAgICAgICAgICAgICAgICBtNF9pZihpbnRlcm5hbF8kMl9jbWQsW10sW10sWyAodXNlIC0td2l0aG91dC0kMgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdXNlIGFuIGludGVybmFsIG1lY2hhbmlzbSldKSksCisrICBbCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgPSB4bm9uZTsgdGhlbgorKyAgICAgIEFDX01TR19FUlJPUihbSW52YWxpZCBjb25maWd1cmUgYXJndW1lbnQuICB1c2UgLS13aXRob3V0LSQyXSkKKysgICAgZmkKKysgICAgaWYgdGVzdCB4IiR3aXRodmFsIiAhPSB4bm87IHRoZW4KKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yICQyKQorKyAgICAgICQxPSIkd2l0aHZhbCIKKysgICAgICBpZiB0ZXN0IC1lICIkJDEiOyB0aGVuCisrCWlmIHRlc3QgISAtZiAiJCQxIiAtYSAhIC1oICIkJDEiIHx8IHRlc3QgISAteCAiJCQxIjsgdGhlbgorKwkgIEFDX01TR19FUlJPUihbJCQxIGlzIG5vdCBhbiBleGVjdXRhYmxlIGZpbGVdKQorKwlmaQorKyAgICAgIGZpCisrICAgICAgQUNfTVNHX1JFU1VMVChbJCQxXSkKKysgICAgICBpZiB0ZXN0ICEgLWUgIiQkMSI7IHRoZW4KKysgICAgICAgIEFDX01TR19XQVJOKFskJDEgZG9lcyBub3QgZXhpc3RdKQorKyAgICAgIGZpCisrICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICBmaQorKyAgXSxbCisrICAgIG00X2lmKFskM10sW10sWworKyAgICAgIEFDX1BBVEhfUFJPRygkMSwkMiwsJFBBVEg6JDQpCisrICAgIF0sWworKyAgICAgIEFDX1BBVEhfUFJPR1MoJDEsJDMsLCRQQVRIOiQ0KQorKyAgICAgIGlmIHRlc3QgLW4gIiQkMSIgLWEgImBleHByICIkJDEiIDogJy4qL1woW1teL11dKlwpJCdgIiAhPSAiJDIiOyB0aGVuCisrCUNPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgICBmaQorKyAgICBdKQorKyAgICBtNF9pZihbJDRdLFtdLFtdLFsKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisrCWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKysgICAgICAgIGZvciBkaXIgaW4gIiQ0IjsgZG8KKysgICAgICAgICAgaWYgdGVzdCAiYGRpcm5hbWUgJCQxYCIgPSAiJGRpciI7IHRoZW4KKysgICAgICAgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrCSAgICBicmVhaworKwkgIGZpCisrICAgICAgICBkb25lCisrCUlGUz0iJGFzX3NhdmVfSUZTIgorKyAgICAgIGZpCisrICAgIF0pCisrICBdKQorKyAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICBtNF9pZihpbnRlcm5hbF8kMl9jbWQsW10sWworKyAgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mICQyIHdpdGggdGhlIG9wdGlvbiAnLS13aXRoLSQyJ10pCisrICAgIF0sWworKyAgICAgIEFDX01TR19XQVJOKFtVc2luZyBpbnRlcm5hbCAkMiBtZWNoYW5pc20uICBVc2Ugb3B0aW9uICctLXdpdGgtJDInIHRvIG92ZXJyaWRlXSkKKysgICAgICBDT01QQVRfUFJPR1JBTVM9IiRDT01QQVRfUFJPR1JBTVMgJDIiCisrICAgICAgJDE9JDIKKysgICAgICBJTlRFUk5BTF8kMT0xCisrICAgIF0pCisrICBmaQorKyAgQUNfU1VCU1QoJDEpCisrXSkKKysKKytkbmwgQWxsb3cgY29uZmlndXJlIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyBiaW5hcnkKKytkbmwgVGhpcyB2YXJpYW50IGlzIGZvciBvcHRpb25hbCBiaW5hcmllcy4KKytkbmwgMTogRW52aXJvbm1lbnQgdmFyaWFibGUKKytkbmwgMjogYmluYXJ5IG5hbWUKKytkbmwgMzogb3B0aW9uYWwgbGlzdCBvZiBhbHRlcm5hdGl2ZSBiaW5hcnkgbmFtZXMKKytkbmwgNDogb3B0aW9uYWwgbGlzdCBvZiBhZGRpdGlvbmFsIHNlYXJjaCBkaXJlY3RvcmllcworK0FDX0RFRlVOKFtRVUlMVF9DT01QQVRfUFJPR19QQVRIX09QVF0sWworKyAgQUNfQVJHX1dJVEgoJDIsIEFDX0hFTFBfU1RSSU5HKAorKyAgICBbLS13aXRoLSQyXSwgW25hbWUgb2YgdGhlICQyIGV4ZWN1dGFibGUgdG8gdXNlXSksCisrICBbCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgIT0geG5vOyB0aGVuCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAkMikKKysgICAgICAkMT0iJHdpdGh2YWwiCisrICAgICAgaWYgdGVzdCAtZSAiJCQxIjsgdGhlbgorKwlpZiB0ZXN0ICEgLWYgIiQkMSIgLWEgISAtaCAiJCQxIiB8fCB0ZXN0ICEgLXggIiQkMSI7IHRoZW4KKysJICBBQ19NU0dfRVJST1IoWyQkMSBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlXSkKKysJZmkKKysgICAgICBmaQorKyAgICAgIEFDX01TR19SRVNVTFQoWyQkMV0pCisrICAgICAgaWYgdGVzdCAhIC1lICIkJDEiOyB0aGVuCisrICAgICAgICBBQ19NU0dfV0FSTihbJCQxIGRvZXMgbm90IGV4aXN0XSkKKysgICAgICBmaQorKyAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgZmkKKysgIF0sWworKyAgICBtNF9pZihbJDNdLFtdLFsKKysgICAgICBBQ19QQVRIX1BST0coJDEsJDIsLCRQQVRIOiQ0KQorKyAgICBdLFsKKysgICAgICBBQ19QQVRIX1BST0dTKCQxLCQzLCwkUEFUSDokNCkKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiIC1hICJgZXhwciAiJCQxIiA6ICcuKi9cKFtbXi9dXSpcKSQnYCIgIT0gIiQyIjsgdGhlbgorKwlDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgbTRfaWYoWyQ0XSxbXSxbXSxbCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorKwlhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICAgICAgICBmb3IgZGlyIGluICIkNCI7IGRvCisrICAgICAgICAgIGlmIHRlc3QgImBkaXJuYW1lICQkMWAiID0gIiRkaXIiOyB0aGVuCisrICAgICAgICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKwkgICAgYnJlYWsKKysJICBmaQorKyAgICAgICAgZG9uZQorKwlJRlM9IiRhc19zYXZlX0lGUyIKKysgICAgICBmaQorKyAgICBdKQorKyAgICBpZiB0ZXN0IC16ICIkJDEiOyB0aGVuCisrICAgICAgQUNfTVNHX1dBUk4oWyQyIG5vdCBmb3VuZCwgc29tZSBvcHRpb25hbCBmdW5jdGlvbmFsaXRpZXMgd2lsbCBiZSBtaXNzaW5nXSkKKysgICAgZmkKKysgIF0pCisrICBpZiB0ZXN0IC16ICIkJDEiOyB0aGVuCisrICAgICQxPSQyCisrICBmaQorKyAgQUNfU1VCU1QoJDEpCisrXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMTU1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit0aGUgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgY3Jvc3MgY29tcGlsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMDI2YTM2Yy4uOGFmNTkxYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjQ1LDYgKzI0NSw3IEBAIGZpCisgUVVJTFRfQ09NUEFUX1BST0dfUEFUSChESUZGLCBkaWZmKQorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoUEFUQ0gsIHBhdGNoKQorIAorK2lmIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiAhPSAieHllcyI7IHRoZW4KKyAjIFN1biBkaWZmIGFuZCBvdGhlcnMgd2lsbCBub3Qgd29yayBiZWNhdXNlIEdOVSBwYXRjaCBvcHRpb25zIGFyZSB1c2VkLgorIEFDX01TR19DSEVDS0lORyhbdGhlIHZlcnNpb24gb2YgJERJRkZdKQorIGlmICRESUZGIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGw7IHRoZW4KK0BAIC0yOTMsNiArMjk0LDcgQEAgY3VycmVudCB2ZXJzaW9uIG9mIHBhdGNoIGZyb20gZnRwLmdudS5vcmcsIG9yIGlmIHlvdSBhbHJlYWR5IGhhdmUgR05VIHBhdGNoCisgdGhlbiB5b3UgY2FuIHN1cHBseSBpdHMgcGF0aCB3aXRoIHRoZSAnLS13aXRoLXBhdGNoPScgb3B0aW9uLgorIF0pCisgZmkKKytmaQorIAorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoRklORCwgZmluZCkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L2luc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhN2FmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gcXVpbHQtMC40Ny9NYWtlZmlsZS5pbgkyMDA4LTEyLTMxIDE5OjA5OjEzLjAwMDAwMDAwMCArMDAwMAorKysrIHF1aWx0LTAuNDcvTWFrZWZpbGUuaW4ub3JpZwkyMDA4LTA4LTIxIDEzOjIxOjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDcgKzEzLDcgQEAKKyBtYW5kaXIgOj0JQG1hbmRpckAKKyBsb2NhbGVkaXIgOj0JJChkYXRhZGlyKS9sb2NhbGUKKyBlbWFjc2RpciA6PQkkKGRhdGFkaXIpL2VtYWNzL3NpdGUtbGlzcAorLWV0Y2RpciA6PQkkKHN1YnN0IC91c3IvZXRjLC9ldGMsJChwcmVmaXgpL2V0YykKKytldGNkaXIgOj0JQHN5c2NvbmZkaXJACisgCisgSU5TVEFMTCA6PQlASU5TVEFMTEAKKyBQT0QyTUFOIDo9CUBQT0QyTUFOQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTU4YTlkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworbG4gLXNmIC9iaW4vZWQgL3Vzci9iaW4vZWQKK2ZvciBpIGluIGBscyB0ZXN0LyoudGVzdCB8YXdrIC1GLiAne3ByaW50ICQxfScgfGF3ayAtRi8gJ3twcmludCAkMn0nYDsgZG8gbWFrZSBjaGVjay0kaTsgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gUEFTUzogJGkudGVzdDsgZWxzZSBlY2hvIEZBSUw6ICRpLnRlc3Q7IGZpOyBkb25lCitybSAtZiAvdXNyL2Jpbi9lZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHRfMC42NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY5MDBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSBxdWlsdC5pbmMKK2luaGVyaXQgZ2V0dGV4dAorUkRFUEVORFNfJHtQTn0gKz0gInBhdGNoIGRpZmZzdGF0IGJ6aXAyIHV0aWwtbGludXgiCitTUkNfVVJJICs9ICJmaWxlOi8vYWNsb2NhbC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaCBcCisgICAgICAgICAgICIKKworIyBmaXggYnVpbGQtZGlzdHJvIHNwZWNpZmljIHBlcmwgcGF0aCBpbiB0aGUgdGFyZ2V0IHBlcmwgc2NyaXB0cworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZm9yIHBlcmxzY3JpcHQgaW4gJHtEfSR7ZGF0YWRpcn0vcXVpbHQvc2NyaXB0cy9yZW1vdmUtdHJhaWxpbmctd3MgJHtEfSR7ZGF0YWRpcn0vcXVpbHQvc2NyaXB0cy9kZXBlbmRlbmN5LWdyYXBoICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvZWRtYWlsICR7RH0ke2JpbmRpcn0vZ3VhcmRzCisJZG8KKwkJaWYgWyAtZiAkcGVybHNjcmlwdCBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAkcGVybHNjcmlwdAorCQlmaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjg4OWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTWFrZWZpbGUgZGVidWdnZXIgd2hpY2ggaXMgZ251bWFrZSBjb21wYXRpYmxlIgorREVTQ1JJUFRJT04gPSAicmVtYWtlIGlzIGEgcGF0Y2hlZCBhbmQgbW9kZXJuaXplZCB2ZXJzaW9uIG9mIEdOVSBtYWtlIFwKK3V0aWxpdHkgdGhhdCBhZGRzIGltcHJvdmVkIGVycm9yIHJlcG9ydGluZywgdGhlIGFiaWxpdHkgdG8gdHJhY2UgXAorZXhlY3V0aW9uIGluIGEgY29tcHJlaGVuc2libGUgd2F5LCBhbmQgYSBkZWJ1Z2dlci4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9iYXNoZGIuc291cmNlZm9yZ2UubmV0L3JlbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vcm9ja3kvcmVtYWtlLmdpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJtYWtlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21ha2VdID0gIiR7YmluZGlyfS9tYWtlIgorQUxURVJOQVRJVkVfVEFSR0VUW21ha2VdID0gIiR7YmluZGlyfS9yZW1ha2UiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS92ZXJzaW9uLXJlbWFrZS50ZXhpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTYzMjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordmVyc2lvbi1yZW1ha2UudGV4aSBpcyBub3QgdGhlcmUgYnV0IGl0IGlzIHJlcXVpcmVkIGJ5IHJlbWFrZS50ZXhpLAoranVzdCBhZGQgaXQgZm9yIGdldHRpbmcgdGhlICdtYWtlIHJlbWFrZS5pbmZvJyB3b3Jrcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLS1naXQgYS9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aSBiL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmEzYjcyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkKK0BAIC0wLDAgKzEsNCBAQAorK0BzZXQgVVBEQVRFRCAxMCBKdW5lIDIwMTIKKytAc2V0IFVQREFURUQtTU9OVEggSnVuZSAyMDEyCisrQHNldCBFRElUSU9OIDMuODIrZGJnLTAuOWdpdAorK0BzZXQgVkVSU0lPTiAzLjgyK2RiZy0wLjlnaXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2VfNC4xK2RiZy0xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiCkBAIC0wLDAgKzEsMjcgQEAKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbG9iL0NPUFlJTkcuTElCO21kNT00YTc3MGI2N2U2YmUwZjYwZGEyNDRiZWIyZGUwZmNlNCIKK3JlcXVpcmUgcmVtYWtlLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ1JFViA9ICJjZjU0NjQxZDUwYTAxNjViYjE3NjIyYjNlOTc3MGY0MjZjY2JjNTYxIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworREVQRU5EUyArPSAicmVhZGxpbmUgZ3VpbGUiCisjIE5lZWQgdG8gYWRkICJnZXR0ZXh0LW5hdGl2ZSIgZGVwZW5kZW5jeSB0byByZW1ha2UtbmF0aXZlLgorIyBCeSBkZWZhdWx0IG9ubHkgImdldHRleHQtbWluaW1hbC1uYXRpdmUiIGlzIGFkZGVkCisjIHdoZW4gaW5oZXJpdCBnZXR0ZXh0LgorREVQRU5EU19jbGFzcy1uYXRpdmUgKz0gImdldHRleHQtbmF0aXZlIgorUFJPVklERVMgKz0gIm1ha2UiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgcmVtb3ZlIHRoZSBkZWZhdWx0IExJTkdVQVMgc2luY2Ugd2UgYXJlIG5vdCBnb2luZyB0byBnZW5lcmF0ZSBsYW5ndWFnZXMKKyAgICBybSAke1N9L3BvL0xJTkdVQVMKKyAgICB0b3VjaCAke1N9L3BvL0xJTkdVQVMKKyAgICAjIGNyZWF0ZSBjb25maWcucnBhdGggd2hpY2ggcmVxdWlyZWQgYnkgY29uZmlndXJlLmFjCisgICAgKCBjZCAke1N9OyBhdXRvcG9pbnQgfHwgdG91Y2ggY29uZmlnLnJwYXRoICkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3Nzg3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4gCisKK2RpZmYgLS1naXQgYS9weXRob24vcnBtbW9kdWxlLmMgYi9weXRob24vcnBtbW9kdWxlLmMKK2luZGV4IGE0ZmUyMTcuLjcyOGM2NmMgMTAwNjQ0CistLS0gYS9weXRob24vcnBtbW9kdWxlLmMKKysrKyBiL3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTM5Niw2ICszOTYsMTAgQEAgc3RhdGljIGludCBpbml0TW9kdWxlKFB5T2JqZWN0ICptKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NUUk9ORyk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfQ09ORklHKTsKKyAKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX01JU1NJTkdPSyk7CisrI2VuZGlmCisrCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19URVNUKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1UUkFOU19GTEFHX0JVSUxEX1BST0JTKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1UUkFOU19GTEFHX05PU0NSSVBUUyk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9kaXNhYmxlX3Nob3J0Y2lyY3VpdGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNjQ2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworSW5kZXg6IHJwbS00LjExLjIvYnVpbGQvcGFjay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2J1aWxkL3BhY2suYworKysrIHJwbS00LjExLjIvYnVpbGQvcGFjay5jCitAQCAtNTcxLDkgKzU3MSw5IEBAIHJwbVJDIHBhY2thZ2VCaW5hcmllcyhycG1TcGVjIHNwZWMsIGNvbnMKKyAJICAgIGhlYWRlclB1dEJpbihwa2ctPmhlYWRlciwgUlBNVEFHX1NPVVJDRVBLR0lELCBzcGVjLT5zb3VyY2VQa2dJZCwxNik7CisgCX0KKyAKKy0JaWYgKGNoZWF0aW5nKSB7CistCSAgICAodm9pZCkgcnBtbGliTmVlZHNGZWF0dXJlKHBrZywgIlNob3J0Q2lyY3VpdGVkIiwgIjQuOS4wLTEiKTsKKy0JfQorKy8vCWlmIChjaGVhdGluZykgeworKy8vCSAgICAodm9pZCkgcnBtbGliTmVlZHNGZWF0dXJlKHBrZywgIlNob3J0Q2lyY3VpdGVkIiwgIjQuOS4wLTEiKTsKKysvLwl9CisgCQorIAl7ICAgY2hhciAqYmluRm9ybWF0ID0gcnBtR2V0UGF0aCgiJXtfcnBtZmlsZW5hbWV9IiwgTlVMTCk7CisgCSAgICBjaGFyICpiaW5ScG0sICpiaW5EaXI7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9maXhfbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDYyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK2RpZmYgLS1naXQgYS9pbnN0YWxscGxhdGZvcm0gYi9pbnN0YWxscGxhdGZvcm0KK2luZGV4IDhjM2ViYTAuLmZhMTVlOTEgMTAwNzU1CistLS0gYS9pbnN0YWxscGxhdGZvcm0KKysrKyBiL2luc3RhbGxwbGF0Zm9ybQorQEAgLTExMiw3ICsxMTIsNyBAQCBmb3IgQVJDSCBpbiBub2FyY2ggYGdyZXAgXmFyY2hfY2Fub24gJFJQTVJDIHwgY3V0IC1kOiAtZjJgOyBkbworICAgWyAteiAiJENBTk9OQVJDSCIgXSAmJiBjb250aW51ZQorIAorICAgaWYgWyAiJE9TIiA9ICJsaW51eCIgXSAmJiBbICIkQ0FOT05DT0xPUiIgPSAzIF07IHRoZW4KKy0gICAgICBMSUI9JHtMSUJ9NjQKKysgICAgICBMSUI9JHtMSUJ9CisgICBmaQorIAorICAgUFBEPSIke0RFU1RESVJ9LyR7cGxhdGZvcm1kaXJ9LyR7QVJDSH0tJHtPU30iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9weXRob25kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4M2IxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworWyAkIyAtZ2UgMSBdIHx8IHsKKyAgICBjYXQgPiAvZGV2L251bGwKKyAgICBleGl0IDAKK30KKworY2FzZSAkMSBpbgorLVJ8LS1yZXF1aXJlcykKKyAgICBzaGlmdAorICAgIGdyZXAgIi91c3IvXChsaWJbXi9dKlx8c2hhcmVcKS9weXRob25bXi9dKi8iID4vZGV2L251bGwgJiYgZWNobyAicHl0aG9uIgorICAgIGV4aXQgMAorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRiMy1mcm9tLWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjQwZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorCitEaXNhYmxlIGNvbmZpZ3VyaW5nIHRoZSBkYjMgZGlyZWN0b3J5IHNpbmNlIHdlIHdpbGwgYmUgdXNpbmcgdGhlCitleHRlcm5hbCBEQiBwcm92aWRlZCBhcyBwYXJ0IG9mIE9FLUNvcmUgYWxyZWFkeSwgbm8gbmVlZCB0byBoYXZlCitkdXBsaWNhdGUgZGF0YWJhc2UgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBycG0tNC4xMS4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNC4xMS4yL2NvbmZpZ3VyZS5hYworQEAgLTgyNSw5ICs4MjUsOSBAQCBBQ19TVUJTVChSUE1DT05GSUdESVIpCisgCisgQUNfU1VCU1QoT0JKRFVNUCkKKyAKKy1pZiB0ZXN0ICIkd2l0aF9leHRlcm5hbF9kYiIgPSBubzsgdGhlbgorLSAgICBBQ19DT05GSUdfU1VCRElSUyhkYjMpCistZmkKKysjaWYgdGVzdCAiJHdpdGhfZXh0ZXJuYWxfZGIiID0gbm87IHRoZW4KKysjICAgIEFDX0NPTkZJR19TVUJESVJTKGRiMykKKysjZmkKKyAKKyBBTV9DT05ESVRJT05BTChbV0lUSF9JTlRFUk5BTF9EQl0sW3Rlc3QgIiR3aXRoX2V4dGVybmFsX2RiIiA9IG5vXSkKKyBBTV9DT05ESVRJT05BTChbRE9YWUdFTl0sW3Rlc3QgIiRET1hZR0VOIiAhPSBub10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGlyLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZWNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworSW5kZXg6IHJwbS00LjExLjIvYnVpbGQvZmlsZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9idWlsZC9maWxlcy5jCisrKysgcnBtLTQuMTEuMi9idWlsZC9maWxlcy5jCitAQCAtMTMyMSwxMiArMTMyMSw2IEBAIHN0YXRpYyBycG1SQyBhZGRGaWxlKEZpbGVMaXN0IGZsLCBjb25zdAorIAl9CisgICAgIH0KKyAKKy0gICAgLyogRXJyb3Igb3V0IHdoZW4gYSBub24tZGlyZWN0b3J5IGlzIHNwZWNpZmllZCBhcyBvbmUgaW4gc3BlYyAqLworLSAgICBpZiAoZmwtPmN1ci5pc0RpciAmJiAoc3RhdHAgPT0gJnN0YXRidWYpICYmICFTX0lTRElSKHN0YXRwLT5zdF9tb2RlKSkgeworLQlycG1sb2coUlBNTE9HX0VSUiwgXygiTm90IGEgZGlyZWN0b3J5OiAlc1xuIiksIGRpc2tQYXRoKTsKKy0JZ290byBleGl0OworLSAgICB9CistCisgICAgIC8qIERvbid0IHJlY3Vyc2UgaW50byBleHBsaWNpdCAlZGlyLCBkb24ndCBkb3VibGUtcmVjdXJzZSBmcm9tIGZ0cyAqLworICAgICBpZiAoKGZsLT5jdXIuaXNEaXIgIT0gMSkgJiYgKHN0YXRwID09ICZzdGF0YnVmKSAmJiBTX0lTRElSKHN0YXRwLT5zdF9tb2RlKSkgeworIAlyZXR1cm4gcmVjdXJzZURpcihmbCwgZGlza1BhdGgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzNkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcnBtLXNjcmlwdGV0ZXhlY2hlbHAucGF0Y2gKQEAgLTAsMCArMSwxOTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZV0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKKworSW5kZXg6IHJwbS00LjExLjIvbGliL3BzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2xpYi9wc20uYworKysrIHJwbS00LjExLjIvbGliL3BzbS5jCitAQCAtNDIxLDcgKzQyMSw4IEBAIHN0YXRpYyBycG1SQyBydW5TY3JpcHQocnBtcHNtIHBzbSwgQVJHVl8KKyAKKyAgICAgcnBtc3dFbnRlcihycG10c09wKHBzbS0+dHMsIFJQTVRTX09QX1NDUklQVExFVFMpLCAwKTsKKyAgICAgcmMgPSBycG1TY3JpcHRSdW4oc2NyaXB0LCBhcmcxLCBhcmcyLCBzZmQsCistCQkgICAgICBwcmVmaXhlcywgd2Fybl9vbmx5LCBzZWxpbnV4KTsKKysJCSAgICAgIHByZWZpeGVzLCB3YXJuX29ubHksIHNlbGludXgsIHJwbXRzUm9vdERpcihwc20tPnRzKSApOworKworICAgICBycG1zd0V4aXQocnBtdHNPcChwc20tPnRzLCBSUE1UU19PUF9TQ1JJUFRMRVRTKSwgMCk7CisgCisgICAgIC8qIE1hcCB3YXJuLW9ubHkgZXJyb3JzIHRvICJub3Rmb3VuZCIgZm9yIHNjcmlwdCBzdG9wIGNhbGxiYWNrICovCitAQCAtOTU4LDE1ICs5NTksNDkgQEAgc3RhdGljIHJwbVJDIHJwbXBzbVN0YWdlKHJwbXBzbSBwc20sIHBrZworICAgICBjYXNlIFBTTV9ERVNUUk9ZOgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fU0NSSVBUOgkvKiBSdW4gY3VycmVudCBwYWNrYWdlIHNjcmlwdGxldHMuICovCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIHsKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RPdXQoKTsKKysjZW5kaWYKKysKKyAJcmMgPSBydW5JbnN0U2NyaXB0KHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdEluKCk7CisrICAgICAgICB9CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIG90aGVyIHBhY2thZ2UocykgdGhpcyBwYWNrYWdlIHNldHMgb2ZmLiAqLworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICB7CisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisgCXJjID0gcnVuVHJpZ2dlcnMocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290SW4oKTsKKysgICAgICAgIH0KKysjZW5kaWYKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX0lNTUVEX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gdGhpcyBwYWNrYWdlIG90aGVyIHBhY2thZ2Uocykgc2V0IG9mZi4gKi8KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwl7CisrICAgICAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RPdXQoKTsKKysjZW5kaWYKKyAJcmMgPSBydW5JbW1lZFRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RJbigpOworKwl9CisrI2VuZGlmCisgCWJyZWFrOworIAorICAgICBjYXNlIFBTTV9SUE1EQl9BREQ6IHsKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcnBtc2NyaXB0LmMKKysrKyBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuYworQEAgLTkyLDcgKzkyLDcgQEAgc3RhdGljIHJwbVJDIHJ1bkx1YVNjcmlwdChpbnQgc2VsaW51eCwgQQorIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgU0NSSVBUX1BBVEggPSAiUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjovdXNyL1gxMVI2L2JpbiI7CisgCisgc3RhdGljIHZvaWQgZG9TY3JpcHRFeGVjKGludCBzZWxpbnV4LCBBUkdWX2NvbnN0X3QgYXJndiwgQVJHVl9jb25zdF90IHByZWZpeGVzLAorLQkJCUZEX3Qgc2NyaXB0RmQsIEZEX3Qgb3V0KQorKwkJCUZEX3Qgc2NyaXB0RmQsIEZEX3Qgb3V0LCBjaGFyICogcm9vdERpciApCisgeworICAgICBpbnQgcGlwZXNbMl07CisgICAgIGludCBmbGFnOworQEAgLTE1OCwxMyArMTU4LDEyIEBAIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVIKKyAJICAgIHNldGVudigiUlBNX0lOU1RBTExfUFJFRklYIiwgKnBmLCAxKTsKKyAJfQorICAgICB9CistCQorLSAgICBpZiAoY2hkaXIoIi8iKSA9PSAwKSB7CisrICAgIGlmIChjaGRpcihyb290RGlyKSA9PSAwKSB7CisgCS8qIFhYWCBEb24ndCBtdHJhY2UgaW50byBjaGlsZHJlbi4gKi8KKyAJdW5zZXRlbnYoIk1BTExPQ19DSEVDS18iKTsKKyAKKyAJLyogUGVybWl0IGxpYnNlbGludXggdG8gZG8gdGhlIHNjcmlwdGxldCBleGVjLiAqLworLQlpZiAoc2VsaW51eCA9PSAxKSB7CQorKwlpZiAoc2VsaW51eCA9PSAxKSB7CisgCSAgICB4eCA9IHJwbV9leGVjY29uKDAsIGFyZ3ZbMF0sIGFyZ3YsIGVudmlyb24pOworIAl9CisgCitAQCAtMTc1LDEyICsxNzQsMTIgQEAgc3RhdGljIHZvaWQgZG9TY3JpcHRFeGVjKGludCBzZWxpbnV4LCBBUgorICAgICBfZXhpdCgxMjcpOyAvKiBleGl0IDEyNyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJhc2goMSkgKi8KKyB9CisgCistc3RhdGljIGNoYXIgKiB3cml0ZVNjcmlwdChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnNjcmlwdCkKKytzdGF0aWMgY2hhciAqIHdyaXRlU2NyaXB0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqc2NyaXB0LCBjaGFyICogcm9vdERpcikKKyB7CisgICAgIGNoYXIgKmZuID0gTlVMTDsKKyAgICAgc2l6ZV90IHNsZW4gPSBzdHJsZW4oc2NyaXB0KTsKKyAgICAgaW50IG9rID0gMDsKKy0gICAgRkRfdCBmZCA9IHJwbU1rVGVtcEZpbGUoIi8iLCAmZm4pOworKyAgICBGRF90IGZkID0gcnBtTWtUZW1wRmlsZShyb290RGlyLCAmZm4pOworIAorICAgICBpZiAoRmVycm9yKGZkKSkKKyAJZ290byBleGl0OworQEAgLTIwNCw3ICsyMDMsNyBAQCBleGl0OgorICAqLworIHN0YXRpYyBycG1SQyBydW5FeHRTY3JpcHQoaW50IHNlbGludXgsIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywKKyAJCSAgIGNvbnN0IGNoYXIgKnNuYW1lLCBycG1sb2dMdmwgbHZsLCBGRF90IHNjcmlwdEZkLAorLQkJICAgQVJHVl90ICogYXJndnAsIGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyKQorKwkJICAgQVJHVl90ICogYXJndnAsIGNvbnN0IGNoYXIgKnNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyLGNoYXIgKiByb290RGlyKQorIHsKKyAgICAgRkRfdCBvdXQgPSBOVUxMOworICAgICBjaGFyICogZm4gPSBOVUxMOworQEAgLTIxNSw3ICsyMTQsNyBAQCBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBCisgICAgIHJwbWxvZyhSUE1MT0dfREVCVUcsICIlczogc2NyaXB0bGV0IHN0YXJ0XG4iLCBzbmFtZSk7CisgCisgICAgIGlmIChzY3JpcHQpIHsKKy0JZm4gPSB3cml0ZVNjcmlwdCgqYXJndnBbMF0sIHNjcmlwdCk7CisrCWZuID0gd3JpdGVTY3JpcHQoKmFyZ3ZwWzBdLCBzY3JpcHQsIHJvb3REaXIpOworIAlpZiAoZm4gPT0gTlVMTCkgeworIAkgICAgcnBtbG9nKFJQTUxPR19FUlIsCisgCQkgICBfKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgZm9yICVzOiAlc1xuIiksCitAQCAtMjU4LDcgKzI1Nyw3IEBAIHN0YXRpYyBycG1SQyBydW5FeHRTY3JpcHQoaW50IHNlbGludXgsIEEKKyAgICAgfSBlbHNlIGlmIChwaWQgPT0gMCkgey8qIENoaWxkICovCisgCXJwbWxvZyhSUE1MT0dfREVCVUcsICIlczogZXhlY3YoJXMpIHBpZCAlZFxuIiwKKyAJICAgICAgIHNuYW1lLCAqYXJndnBbMF0sICh1bnNpZ25lZClnZXRwaWQoKSk7CistCWRvU2NyaXB0RXhlYyhzZWxpbnV4LCAqYXJndnAsIHByZWZpeGVzLCBzY3JpcHRGZCwgb3V0KTsKKysJZG9TY3JpcHRFeGVjKHNlbGludXgsICphcmd2cCwgcHJlZml4ZXMsIHNjcmlwdEZkLCBvdXQsIHJvb3REaXIpOworICAgICB9CisgCisgICAgIGRvIHsKK0BAIC0yOTcsMTMgKzI5NiwyNyBAQCBleGl0OgorIH0KKyAKKyBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyLCBGRF90IHNjcmlwdEZkLAorLQkJICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCkKKysJCSAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgsIGNoYXIgKiByb290RGlyKQorIHsKKyAgICAgQVJHVl90IGFyZ3MgPSBOVUxMOworICAgICBycG1sb2dMdmwgbHZsID0gd2Fybl9vbmx5ID8gUlBNTE9HX1dBUk5JTkcgOiBSUE1MT0dfRVJSOworICAgICBycG1SQyByYzsKKy0KKy0gICAgaWYgKHNjcmlwdCA9PSBOVUxMKSByZXR1cm4gUlBNUkNfT0s7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysjZW5kaWYKKysgCisrICAgICBpZiAoc2NyaXB0ID09IE5VTEwpIHJldHVybiBSUE1SQ19PSzsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgeworKyAgICAgICBhcmd2QWRkKCZhcmdzLCBzY3JpcHRsZXRXcmFwcGVyKTsKKysKKysgICAgICAgaWYgKCByb290RGlyICkgeworKyAgICAgICAgIGFyZ3ZBZGQoJmFyZ3MsIHJvb3REaXIpOworKyAgICAgICB9IGVsc2UgeworKyAgICAgICAgIGFyZ3ZBZGQoJmFyZ3MsICIvIik7CisrICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorIAorICAgICAvKiBjb25zdHJ1Y3QgYSBuZXcgYXJndiBhcyB3ZSBjYW4ndCBtb2RpZnkgdGhlIG9uZSBmcm9tIGhlYWRlciAqLworICAgICBpZiAoc2NyaXB0LT5hcmdzKSB7CitAQCAtMzE1LDcgKzMyOCw3IEBAIHJwbVJDIHJwbVNjcmlwdFJ1bihycG1TY3JpcHQgc2NyaXB0LCBpbnQKKyAgICAgaWYgKHJzdHJlcShhcmdzWzBdLCAiPGx1YT4iKSkgeworIAlyYyA9IHJ1bkx1YVNjcmlwdChzZWxpbnV4LCBwcmVmaXhlcywgc2NyaXB0LT5kZXNjciwgbHZsLCBzY3JpcHRGZCwgJmFyZ3MsIHNjcmlwdC0+Ym9keSwgYXJnMSwgYXJnMik7CisgICAgIH0gZWxzZSB7CistCXJjID0gcnVuRXh0U2NyaXB0KHNlbGludXgsIHByZWZpeGVzLCBzY3JpcHQtPmRlc2NyLCBsdmwsIHNjcmlwdEZkLCAmYXJncywgc2NyaXB0LT5ib2R5LCBhcmcxLCBhcmcyKTsKKysJcmMgPSBydW5FeHRTY3JpcHQoc2VsaW51eCwgcHJlZml4ZXMsIHNjcmlwdC0+ZGVzY3IsIGx2bCwgc2NyaXB0RmQsICZhcmdzLCBzY3JpcHQtPmJvZHksIGFyZzEsIGFyZzIsIHJvb3REaXIpOworICAgICB9CisgICAgIGFyZ3ZGcmVlKGFyZ3MpOworIAorSW5kZXg6IHJwbS00LjExLjIvbGliL3JwbXNjcmlwdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTQuMTEuMi5vcmlnL2xpYi9ycG1zY3JpcHQuaAorKysrIHJwbS00LjExLjIvbGliL3JwbXNjcmlwdC5oCitAQCAtMjksNyArMjksNyBAQCBycG1TY3JpcHQgcnBtU2NyaXB0RnJlZShycG1TY3JpcHQgc2NyaXB0CisgCisgUlBNX0dOVUNfSU5URVJOQUwKKyBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50IGFyZzEsIGludCBhcmcyLCBGRF90IHNjcmlwdEZkLAorLSAgICAgICAgICAgICAgICAgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4KTsKKysgICAgICAgICAgICAgICAgICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCwgY2hhciAqIHJvb3REaXIpOworIAorIFJQTV9HTlVDX0lOVEVSTkFMCisgcnBtVGFnVmFsIHJwbVNjcmlwdFRhZyhycG1TY3JpcHQgc2NyaXB0KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGE2MDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3N1cHBvcnQtc3VnZ2VzdHMtdGFnLnBhdGNoCkBAIC0wLDAgKzEsMzg0IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworZGlmZiAtLWdpdCBhL2J1aWxkL3BhY2suYyBiL2J1aWxkL3BhY2suYworaW5kZXggYjZiMmJlYS4uNWMzZDhkZiAxMDA2NDQKKy0tLSBhL2J1aWxkL3BhY2suYworKysrIGIvYnVpbGQvcGFjay5jCitAQCAtMjczLDggKzI3MywxMCBAQCBzdGF0aWMgcnBtVGFnVmFsIGRlcGV2cnRhZ3NbXSA9IHsKKyAgICAgUlBNVEFHX0NPTkZMSUNUVkVSU0lPTiwKKyAgICAgUlBNVEFHX09SREVSVkVSU0lPTiwKKyAgICAgUlBNVEFHX1RSSUdHRVJWRVJTSU9OLAorLSAgICBSUE1UQUdfU1VHR0VTVFNWRVJTSU9OLAorLSAgICBSUE1UQUdfRU5IQU5DRVNWRVJTSU9OLAorKyAgICBSUE1UQUdfU1VHR0VTVFZFUlNJT04sCisrICAgIFJQTVRBR19FTkhBTkNFVkVSU0lPTiwKKysgICAgUlBNVEFHX1JFQ09NTUVORFZFUlNJT04sCisrICAgIFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTiwKKyAgICAgMAorIH07CisgCitkaWZmIC0tZ2l0IGEvYnVpbGQvcGFyc2VQcmVhbWJsZS5jIGIvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCitpbmRleCA1NzcyYmVmLi5jYmJiZWUzIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCisrKysgYi9idWlsZC9wYXJzZVByZWFtYmxlLmMKK0BAIC04MjEsNiArODIxLDEwIEBAIHN0YXRpYyBycG1SQyBoYW5kbGVQcmVhbWJsZVRhZyhycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBycG1UYWdWYWwgdGFnLAorIAl9CisgCS8qIGZhbGx0aHJvdWdoICovCisgICAgIGNhc2UgUlBNVEFHX1BSRVJFUToKKysgICAgY2FzZSBSUE1UQUdfUkVDT01NRU5ERkxBR1M6CisrICAgIGNhc2UgUlBNVEFHX1NVR0dFU1RGTEFHUzoKKysgICAgY2FzZSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOgorKyAgICBjYXNlIFJQTVRBR19FTkhBTkNFRkxBR1M6CisgICAgIGNhc2UgUlBNVEFHX0NPTkZMSUNURkxBR1M6CisgICAgIGNhc2UgUlBNVEFHX09CU09MRVRFRkxBR1M6CisgICAgIGNhc2UgUlBNVEFHX1BST1ZJREVGTEFHUzoKK0BAIC05MjIsNiArOTI2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgUHJlYW1ibGVSZWNfcyBjb25zdCBwcmVhbWJsZUxpc3RbXSA9IHsKKyAgICAge1JQTVRBR19JQ09OLAkJMCwgMCwgTEVOX0FORF9TVFIoImljb24iKX0sCisgICAgIHtSUE1UQUdfUFJPVklERUZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigicHJvdmlkZXMiKX0sCisgICAgIHtSUE1UQUdfUkVRVUlSRUZMQUdTLAkyLCAwLCBMRU5fQU5EX1NUUigicmVxdWlyZXMiKX0sCisrICAgIHtSUE1UQUdfUkVDT01NRU5ERkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJyZWNvbW1lbmRzIil9LAorKyAgICB7UlBNVEFHX1NVR0dFU1RGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInN1Z2dlc3RzIil9LAorKyAgICB7UlBNVEFHX1NVUFBMRU1FTlRGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInN1cHBsZW1lbnRzIil9LAorKyAgICB7UlBNVEFHX0VOSEFOQ0VGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoImVuaGFuY2VzIil9LAorICAgICB7UlBNVEFHX1BSRVJFUSwJCTIsIDEsIExFTl9BTkRfU1RSKCJwcmVyZXEiKX0sCisgICAgIHtSUE1UQUdfQ09ORkxJQ1RGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoImNvbmZsaWN0cyIpfSwKKyAgICAge1JQTVRBR19PQlNPTEVURUZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigib2Jzb2xldGVzIil9LAorZGlmZiAtLWdpdCBhL2J1aWxkL3BhcnNlUmVxcy5jIGIvYnVpbGQvcGFyc2VSZXFzLmMKK2luZGV4IGJhMDgwYTEuLjE0MjcxMTEgMTAwNjQ0CistLS0gYS9idWlsZC9wYXJzZVJlcXMuYworKysrIGIvYnVpbGQvcGFyc2VSZXFzLmMKK0BAIC02MSw2ICs2MSwxOCBAQCBycG1SQyBwYXJzZVJDUE9UKHJwbVNwZWMgc3BlYywgUGFja2FnZSBwa2csIGNvbnN0IGNoYXIgKmZpZWxkLCBycG1UYWdWYWwgdGFnTiwKKyAJbmFtZXRhZyA9IFJQTVRBR19SRVFVSVJFTkFNRTsKKyAJdGFnZmxhZ3MgfD0gUlBNU0VOU0VfQU5ZOworIAlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfUkVDT01NRU5ERkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfUkVDT01NRU5ETkFNRTsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVR0dFU1RGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19TVUdHRVNUTkFNRTsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19TVVBQTEVNRU5UTkFNRTsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX0VOSEFOQ0VGTEFHUzoKKysJbmFtZXRhZyA9IFJQTVRBR19FTkhBTkNFTkFNRTsKKysJYnJlYWs7CisgICAgIGNhc2UgUlBNVEFHX1BST1ZJREVGTEFHUzoKKyAJbmFtZXRhZyA9IFJQTVRBR19QUk9WSURFTkFNRTsKKyAJYnJlYWs7CitkaWZmIC0tZ2l0IGEvYnVpbGQvcmVxcHJvdi5jIGIvYnVpbGQvcmVxcHJvdi5jCitpbmRleCBhMzY4ZjQyLi5jMjcwYWY2IDEwMDY0NAorLS0tIGEvYnVpbGQvcmVxcHJvdi5jCisrKysgYi9idWlsZC9yZXFwcm92LmMKK0BAIC04MSw2ICs4MSwzMCBAQCBpbnQgYWRkUmVxUHJvdihQYWNrYWdlIHBrZywgcnBtVGFnVmFsIHRhZ04sCisgCWV4dHJhID0gRmxhZ3MgJiBSUE1TRU5TRV9UUklHR0VSOworIAlkc3AgPSAmcGtnLT50cmlnZ2VyczsKKyAJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVORE5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19SRUNPTU1FTkRGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+cmVjb21tZW5kczsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1NVR0dFU1ROQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX1NVR0dFU1RWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX1NVR0dFU1RGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+c3VnZ2VzdHM7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVVBQTEVNRU5UTkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19TVVBQTEVNRU5URkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnN1cHBsZW1lbnRzOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfRU5IQU5DRU5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfRU5IQU5DRVZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfRU5IQU5DRUZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5lbmhhbmNlczsKKysJYnJlYWs7CisgICAgIGNhc2UgUlBNVEFHX1JFUVVJUkVOQU1FOgorICAgICBkZWZhdWx0OgorIAl0YWdOID0gUlBNVEFHX1JFUVVJUkVOQU1FOworZGlmZiAtLWdpdCBhL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmggYi9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oCitpbmRleCBhOWU0YzdjLi4wYTE5NzdmIDEwMDY0NAorLS0tIGEvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAorKysrIGIvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAorQEAgLTkzLDYgKzkzLDEwIEBAIHN0cnVjdCBQYWNrYWdlX3MgeworICAgICBycG1kcyBkczsJCQkvKiE8IFJlcXVpcmVzOiBOID0gRVZSICovCisgICAgIHJwbWRzIHJlcXVpcmVzOworICAgICBycG1kcyBwcm92aWRlczsKKysgICAgcnBtZHMgcmVjb21tZW5kczsKKysgICAgcnBtZHMgc3VnZ2VzdHM7CisrICAgIHJwbWRzIHN1cHBsZW1lbnRzOworKyAgICBycG1kcyBlbmhhbmNlczsKKyAgICAgcnBtZHMgY29uZmxpY3RzOworICAgICBycG1kcyBvYnNvbGV0ZXM7CisgICAgIHJwbWRzIHRyaWdnZXJzOworZGlmZiAtLWdpdCBhL2J1aWxkL3NwZWMuYyBiL2J1aWxkL3NwZWMuYworaW5kZXggNzAzZWM3OC4uN2FlMjEyMCAxMDA2NDQKKy0tLSBhL2J1aWxkL3NwZWMuYworKysrIGIvYnVpbGQvc3BlYy5jCitAQCAtMTM5LDYgKzEzOSwxMSBAQCBzdGF0aWMgUGFja2FnZSBmcmVlUGFja2FnZShQYWNrYWdlIHBrZykKKyAgICAgcGtnLT5kcyA9IHJwbWRzRnJlZShwa2ctPmRzKTsKKyAgICAgcGtnLT5yZXF1aXJlcyA9IHJwbWRzRnJlZShwa2ctPnJlcXVpcmVzKTsKKyAgICAgcGtnLT5wcm92aWRlcyA9IHJwbWRzRnJlZShwa2ctPnByb3ZpZGVzKTsKKysgICAgcGtnLT5yZWNvbW1lbmRzID0gcnBtZHNGcmVlKHBrZy0+cmVjb21tZW5kcyk7CisrICAgIHBrZy0+c3VnZ2VzdHMgPSBycG1kc0ZyZWUocGtnLT5zdWdnZXN0cyk7CisrICAgIHBrZy0+c3VwcGxlbWVudHMgPSBycG1kc0ZyZWUocGtnLT5zdXBwbGVtZW50cyk7CisrICAgIHBrZy0+ZW5oYW5jZXMgPSBycG1kc0ZyZWUocGtnLT5lbmhhbmNlcyk7CisrCisgICAgIHBrZy0+Y29uZmxpY3RzID0gcnBtZHNGcmVlKHBrZy0+Y29uZmxpY3RzKTsKKyAgICAgcGtnLT5vYnNvbGV0ZXMgPSBycG1kc0ZyZWUocGtnLT5vYnNvbGV0ZXMpOworICAgICBwa2ctPnRyaWdnZXJzID0gcnBtZHNGcmVlKHBrZy0+dHJpZ2dlcnMpOworZGlmZiAtLWdpdCBhL2xpYi9ycG1kcy5jIGIvbGliL3JwbWRzLmMKK2luZGV4IDdhNTExNjcuLjFlNWRkYTAgMTAwNjQ0CistLS0gYS9saWIvcnBtZHMuYworKysrIGIvbGliL3JwbWRzLmMKK0BAIC01Miw2ICs1MiwyMiBAQCBzdGF0aWMgaW50IGRzVHlwZShycG1UYWdWYWwgdGFnLAorIAl0ID0gIlJlcXVpcmVzIjsKKyAJZXZyID0gUlBNVEFHX1JFUVVJUkVWRVJTSU9OOworIAlmID0gUlBNVEFHX1JFUVVJUkVGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX1NVUFBMRU1FTlROQU1FKSB7CisrCXQgPSAiU3VwcGxlbWVudHMiOworKwlldnIgPSBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT047CisrCWYgPSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfRU5IQU5DRU5BTUUpIHsKKysJdCA9ICJFbmhhbmNlcyI7CisrCWV2ciA9IFJQTVRBR19FTkhBTkNFVkVSU0lPTjsKKysJZiA9IFJQTVRBR19FTkhBTkNFRkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19SRUNPTU1FTkROQU1FKSB7CisrCXQgPSAiUmVjb21tZW5kcyI7CisrCWV2ciA9IFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OOworKwlmID0gUlBNVEFHX1JFQ09NTUVOREZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfU1VHR0VTVE5BTUUpIHsKKysJdCA9ICJTdWdnZXN0cyI7CisrCWV2ciA9IFJQTVRBR19TVUdHRVNUVkVSU0lPTjsKKysJZiA9IFJQTVRBR19TVUdHRVNURkxBR1M7CisgICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19DT05GTElDVE5BTUUpIHsKKyAJdCA9ICJDb25mbGljdHMiOworIAlldnIgPSBSUE1UQUdfQ09ORkxJQ1RWRVJTSU9OOworZGlmZiAtLWdpdCBhL2xpYi9ycG10YWcuaCBiL2xpYi9ycG10YWcuaAoraW5kZXggNjRiMDNmMS4uYjk0MzIyOSAxMDA2NDQKKy0tLSBhL2xpYi9ycG10YWcuaAorKysrIGIvbGliL3JwbXRhZy5oCitAQCAtMjE3LDE0ICsyMTcsMTQgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX1BSRVRSQU5TUFJPRwkJPSAxMTUzLAkvKiBzW10gKi8KKyAgICAgUlBNVEFHX1BPU1RUUkFOU1BST0cJPSAxMTU0LAkvKiBzW10gKi8KKyAgICAgUlBNVEFHX0RJU1RUQUcJCT0gMTE1NSwJLyogcyAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNOQU1FCQk9IDExNTYsCS8qIHNbXSBleHRlbnNpb24gKHVuaW1wbGVtZW50ZWQpICovCistI2RlZmluZQlSUE1UQUdfU1VHR0VTVFMgUlBNVEFHX1NVR0dFU1RTTkFNRQkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19TVUdHRVNUU1ZFUlNJT04JPSAxMTU3LAkvKiBzW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNGTEFHUwk9IDExNTgsCS8qIGlbXSBleHRlbnNpb24gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU05BTUUJCT0gMTE1OSwJLyogc1tdIGV4dGVuc2lvbiBwbGFjZWhvbGRlciAodW5pbXBsZW1lbnRlZCkgKi8KKy0jZGVmaW5lCVJQTVRBR19FTkhBTkNFUyBSUE1UQUdfRU5IQU5DRVNOQU1FCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX0VOSEFOQ0VTVkVSU0lPTgk9IDExNjAsCS8qIHNbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU0ZMQUdTCT0gMTE2MSwJLyogaVtdIGV4dGVuc2lvbiBwbGFjZWhvbGRlciAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MRFNVR0dFU1RTTkFNRQk9IDExNTYsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysjZGVmaW5lCVJQTVRBR19PTERTVUdHRVNUUyBSUE1UQUdfT0xEU1VHR0VTVFNOQU1FIC8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MRFNVR0dFU1RTVkVSU0lPTgk9IDExNTcsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MRFNVR0dFU1RTRkxBR1MJPSAxMTU4LAkvKiBpW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERFTkhBTkNFU05BTUUJCT0gMTE1OSwJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyNkZWZpbmUJUlBNVEFHX09MREVOSEFOQ0VTIFJQTVRBR19PTERFTkhBTkNFU05BTUUgLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNWRVJTSU9OCT0gMTE2MCwJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNGTEFHUwk9IDExNjEsCS8qIGlbXSAodW5pbXBsZW1lbnRlZCkgKi8KKyAgICAgUlBNVEFHX1BSSU9SSVRZCQk9IDExNjIsIC8qIGlbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19DVlNJRAkJPSAxMTYzLCAvKiBzICh1bmltcGxlbWVudGVkKSAqLworICNkZWZpbmUJUlBNVEFHX1NWTklECVJQTVRBR19DVlNJRAkvKiBzICh1bmltcGxlbWVudGVkKSAqLworQEAgLTI2MSw2ICsyNjEsNyBAQCB0eXBlZGVmIGVudW0gcnBtVGFnX2UgeworICAgICBSUE1UQUdfQlVJTERPQlNPTEVURVMJPSAxMTk0LCAvKiBpbnRlcm5hbCAodW5pbXBsZW1lbnRlZCkgKi8KKyAgICAgUlBNVEFHX0RCSU5TVEFOQ0UJCT0gMTE5NSwgLyogaSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX05WUkEJCQk9IDExOTYsIC8qIHMgZXh0ZW5zaW9uICovCisrCisgICAgIC8qIHRhZ3MgMTk5Ny00OTk5IHJlc2VydmVkICovCisgICAgIFJQTVRBR19GSUxFTkFNRVMJCT0gNTAwMCwgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfRklMRVBST1ZJREUJCT0gNTAwMSwgLyogc1tdIGV4dGVuc2lvbiAqLworQEAgLTMwNyw2ICszMDgsMjYgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX09CU09MRVRFTkVWUlMJPSA1MDQzLCAvKiBzW10gZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19DT05GTElDVE5FVlJTCT0gNTA0NCwgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfRklMRU5MSU5LUwkJPSA1MDQ1LAkvKiBpW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19SRUNPTU1FTkROQU1FCT0gNTA0NiwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfUkVDT01NRU5EUyBSUE1UQUdfUkVDT01NRU5ETkFNRQkvKiBzW10gKi8KKysgICAgUlBNVEFHX1JFQ09NTUVORFZFUlNJT04JPSA1MDQ3LAkvKiBzW10gKi8KKysgICAgUlBNVEFHX1JFQ09NTUVOREZMQUdTCT0gNTA0OCwJLyogaVtdICovCisrICAgIFJQTVRBR19TVUdHRVNUTkFNRQkJPSA1MDQ5LAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19TVUdHRVNUUyBSUE1UQUdfU1VHR0VTVE5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19TVUdHRVNUVkVSU0lPTgk9IDUwNTAsCS8qIHNbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1NVR0dFU1RGTEFHUwkJPSA1MDUxLAkvKiBpW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UTkFNRQk9IDUwNTIsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX1NVUFBMRU1FTlRTIFJQTVRBR19TVVBQTEVNRU5UTkFNRSAvKiBzW10gKi8KKysgICAgUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OCT0gNTA1MywJLyogc1tdICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5URkxBR1MJPSA1MDU0LAkvKiBpW10gKi8KKysgICAgUlBNVEFHX0VOSEFOQ0VOQU1FCQk9IDUwNTUsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX0VOSEFOQ0VTIFJQTVRBR19FTkhBTkNFTkFNRQkvKiBzW10gKi8KKysgICAgUlBNVEFHX0VOSEFOQ0VWRVJTSU9OCT0gNTA1NiwJLyogc1tdICovCisrICAgIFJQTVRBR19FTkhBTkNFRkxBR1MJCT0gNTA1NywJLyogaVtdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRORVZSUwk9IDUwNTgsIC8qIHNbXSBleHRlbnNpb24gKi8KKysgICAgUlBNVEFHX1NVR0dFU1RORVZSUwkJPSA1MDU5LCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UTkVWUlMJPSA1MDYwLCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19FTkhBTkNFTkVWUlMJCT0gNTA2MSwgLyogc1tdIGV4dGVuc2lvbiAqLworIAorICAgICBSUE1UQUdfRklSU1RGUkVFX1RBRwkvKiE8IGludGVybmFsICovCisgfSBycG1UYWc7CitkaWZmIC0tZ2l0IGEvbGliL3RhZ2V4dHMuYyBiL2xpYi90YWdleHRzLmMKK2luZGV4IDI5YjJiYWUuLmU5NDAzMTAgMTAwNjQ0CistLS0gYS9saWIvdGFnZXh0cy5jCisrKysgYi9saWIvdGFnZXh0cy5jCitAQCAtNzYxLDYgKzc2MSwyNiBAQCBzdGF0aWMgaW50IHJlcXVpcmVuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisgICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1JFUVVJUkVOQU1FKTsKKyB9CisgCisrc3RhdGljIGludCByZWNvbW1lbmRuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19SRUNPTU1FTkROQU1FKTsKKyt9CisrCisrc3RhdGljIGludCBzdWdnZXN0bmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfU1VHR0VTVE5BTUUpOworK30KKysKKytzdGF0aWMgaW50IHN1cHBsZW1lbnRuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19TVVBQTEVNRU5UTkFNRSk7CisrfQorKworK3N0YXRpYyBpbnQgZW5oYW5jZW5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX0VOSEFOQ0VOQU1FKTsKKyt9CisrCisgc3RhdGljIGludCBwcm92aWRlbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorIHsKKyAgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfUFJPVklERU5BTUUpOworQEAgLTgyMyw2ICs4NDMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJUYWdGdW5jX3MgcnBtSGVhZGVyVGFnRXh0ZW5zaW9uc1tdID0geworICAgICB7IFJQTVRBR19FUE9DSE5VTSwJCWVwb2NobnVtVGFnIH0sCisgICAgIHsgUlBNVEFHX0lOU1RGSUxFTkFNRVMsCWluc3RmaWxlbmFtZXNUYWcgfSwKKyAgICAgeyBSUE1UQUdfUkVRVUlSRU5FVlJTLAlyZXF1aXJlbmV2cnNUYWcgfSwKKysgICAgeyBSUE1UQUdfUkVDT01NRU5ETkVWUlMsCXJlY29tbWVuZG5ldnJzVGFnfSwKKysgICAgeyBSUE1UQUdfU1VHR0VTVE5FVlJTLAlzdWdnZXN0bmV2cnNUYWd9LAorKyAgICB7IFJQTVRBR19TVVBQTEVNRU5UTkVWUlMsCXN1cHBsZW1lbnRuZXZyc1RhZ30sCisrICAgIHsgUlBNVEFHX0VOSEFOQ0VORVZSUywJZW5oYW5jZW5ldnJzVGFnfSwKKyAgICAgeyBSUE1UQUdfUFJPVklERU5FVlJTLAlwcm92aWRlbmV2cnNUYWcgfSwKKyAgICAgeyBSUE1UQUdfT0JTT0xFVEVORVZSUywJb2Jzb2xldGVuZXZyc1RhZyB9LAorICAgICB7IFJQTVRBR19DT05GTElDVE5FVlJTLAljb25mbGljdG5ldnJzVGFnIH0sCitkaWZmIC0tZ2l0IGEvcnBtcG9wdC5pbiBiL3JwbXBvcHQuaW4KK2luZGV4IDgwNTU5OWUuLjAzNmFiNGUgMTAwNjQ0CistLS0gYS9ycG1wb3B0LmluCisrKysgYi9ycG1wb3B0LmluCitAQCAtNjcsNiArNjcsMTkgQEAgcnBtCWFsaWFzIC0tcmVxdWlyZXMJLS1xZiBcCisgCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyByZXF1aXJlZCBieSBwYWNrYWdlKHMpIgorIHJwbQlhbGlhcyAtUiAtLXJlcXVpcmVzCisgCisrcnBtCWFsaWFzIC0tcmVjb21tZW5kcwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle1JFQ09NTUVOREZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7UkVDT01NRU5ETkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyByZWNvbW1lbmRlZCBieSBwYWNrYWdlKHMpIgorK3JwbQlhbGlhcyAtLXN1Z2dlc3RzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7U1VHR0VTVEZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7U1VHR0VTVE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgc3VnZ2VzdGVkIGJ5IHBhY2thZ2UocykiCisrcnBtCWFsaWFzIC0tc3VwcGxlbWVudHMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtTVVBQTEVNRU5URkxBR1M6ZGVwdHlwZX06IH06e318JXtTVVBQTEVNRU5UTkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyBzdXBwbGVtZW50ZWQgYnkgcGFja2FnZShzKSIKKytycG0JYWxpYXMgLS1lbmhhbmNlcwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle0VOSEFOQ0VGTEFHUzpkZXB0eXBlfTogfTp7fXwle0VOSEFOQ0VORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIGVuaGFuY2VkIGJ5IHBhY2thZ2UocykiCisrCisgcnBtCWFsaWFzIC0taW5mbyAtLXFmICdcCisgTmFtZSAgICAgICAgOiAle05BTUV9XG5cCisgJXxFUE9DSD97RXBvY2ggICAgICAgOiAle0VQT0NIfVxufXxcCitkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMgYi90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworaW5kZXggY2I0Y2JiZC4uN2M0N2Y2ZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCisrKysgYi90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworQEAgLTEwLDYgKzEwLDEwIEBAIEJ1aWxkQXJjaDoJbm9hcmNoCisgJXs/cHJvdnM6UHJvdmlkZXM6ICV7cHJvdnN9fQorICV7P2NmbHM6Q29uZmxpY3RzOiAle2NmbHN9fQorICV7P29iczpPYnNvbGV0ZXM6ICV7b2JzfX0KKyslez9yZWNzOlJlY29tbWVuZHM6ICV7cmVjc319CisrJXs/c3VnczpTdWdnZXN0czogJXtzdWdzfX0KKyslez9zdXBzOlN1cHBsZW1lbnRzOiAle3N1cHN9fQorKyV7P2VuczpFbmhhbmNlczogJXtlbnN9fQorIAorICVkZXNjcmlwdGlvbgorICV7c3VtbWFyeX0KK2RpZmYgLS1naXQgYS90ZXN0cy9ycG1idWlsZC5hdCBiL3Rlc3RzL3JwbWJ1aWxkLmF0CitpbmRleCA2MjMwOTAzLi5jNGM5NTRjIDEwMDY0NAorLS0tIGEvdGVzdHMvcnBtYnVpbGQuYXQKKysrKyBiL3Rlc3RzL3JwbWJ1aWxkLmF0CitAQCAtMTg1LDMgKzE4NSwyNSBAQCBscnd4cnd4cnd4IC9vcHQvZ2xvYnRlc3QvbGlua2dvb2QKKyBdLAorIFtdKQorIEFUX0NMRUFOVVAKKysKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2sgaWYgd2VhayBhbmQgcmV2ZXJzZSByZXF1aXJlcyBjYW4gYmUgYnVpbHQKKytBVF9TRVRVUChbV2VhayBhbmQgcmV2ZXJzZSByZXF1aXJlc10pCisrQVRfS0VZV09SRFMoW2J1aWxkXSkKKytBVF9DSEVDSyhbCisrCisrcnVucm9vdCBycG1idWlsZCAtYmIgLS1xdWlldCBcCisrCS0tZGVmaW5lICJwa2cgd2Vha2RlcHMiIFwKKysJLS1kZWZpbmUgInJlY3MgZm9vID4gMS4yLjMiIFwKKysJLS1kZWZpbmUgInN1Z3MgYmFyID49IDAuMS4yIiBcCisrCS0tZGVmaW5lICJzdXBzIGJheiIgXAorKwktLWRlZmluZSAiZW5zIHphcCA9IDMiIFwKKysJICAvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKKysKKytydW5yb290IHJwbSAtcXAgLS1xZiAiWyV7c3VwcGxlbWVudG5hbWV9XG5dIiAvYnVpbGQvUlBNUy9ub2FyY2gvZGVwdGVzdC13ZWFrZGVwcy0xLjAtMS5ub2FyY2gucnBtCisrXSwKKytbMF0sCisrW2JhegorK10sCisrW2lnbm9yZV0pCisrQVRfQ0xFQU5VUAorZGlmZiAtLWdpdCBhL3Rlc3RzL3JwbWdlbmVyYWwuYXQgYi90ZXN0cy9ycG1nZW5lcmFsLmF0CitpbmRleCAxMzEzMWUyLi44MGNjYTYzIDEwMDY0NAorLS0tIGEvdGVzdHMvcnBtZ2VuZXJhbC5hdAorKysrIGIvdGVzdHMvcnBtZ2VuZXJhbC5hdAorQEAgLTc5LDYgKzc5LDExIEBAIERJU1RUQUcKKyBESVNUVVJMCisgRFNBSEVBREVSCisgRQorK0VOSEFOQ0VGTEFHUworK0VOSEFOQ0VOQU1FCisrRU5IQU5DRU5FVlJTCisrRU5IQU5DRVMKKytFTkhBTkNFVkVSU0lPTgorIEVQT0NICisgRVBPQ0hOVU0KKyBFVlIKK0BAIC0xOTksNiArMjA0LDExIEBAIFBST1ZJREVTCisgUFJPVklERVZFUlNJT04KKyBQVUJLRVlTCisgUgorK1JFQ09NTUVOREZMQUdTCisrUkVDT01NRU5ETkFNRQorK1JFQ09NTUVORE5FVlJTCisrUkVDT01NRU5EUworK1JFQ09NTUVORFZFUlNJT04KKyBSRUNPTlRFWFRTCisgUkVMRUFTRQorIFJFTU9WRVRJRAorQEAgLTIxOSw3ICsyMjksMTcgQEAgU09VUkNFCisgU09VUkNFUEFDS0FHRQorIFNPVVJDRVBLR0lECisgU09VUkNFUlBNCisrU1VHR0VTVEZMQUdTCisrU1VHR0VTVE5BTUUKKytTVUdHRVNUTkVWUlMKKytTVUdHRVNUUworK1NVR0dFU1RWRVJTSU9OCisgU1VNTUFSWQorK1NVUFBMRU1FTlRGTEFHUworK1NVUFBMRU1FTlROQU1FCisrU1VQUExFTUVOVE5FVlJTCisrU1VQUExFTUVOVFMKKytTVVBQTEVNRU5UVkVSU0lPTgorIFRSSUdHRVJDT05EUworIFRSSUdHRVJGTEFHUworIFRSSUdHRVJJTkRFWApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3VzZS1wa2djb25maWctZm9yLXB5dGhvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4NGNmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorCitVc2UgcGtnY29uZmlnIHRvIGdldCB0aGUgY29ycmVjdCBpbmNsdWRlIHBhdGhzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTk3ZjcyNy4uODE3OWY0NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTQwLDEwICs1NDAsMTAgQEAgZXNhY10sCisgCisgQVNfSUYoW3Rlc3QgIiRlbmFibGVfcHl0aG9uIiA9IHllc10sWworICAgQU1fUEFUSF9QWVRIT04oWzIuNl0sWworLSAgICBXSVRIX1BZVEhPTl9JTkNMVURFPWAke1BZVEhPTn0gLWMgJ2Zyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgKjsgaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShnZXRfcHl0aG9uX2luYygpKSdgCisrICAgIFdJVEhfUFlUSE9OX0lOQ0xVREU9JCgke1BLR19DT05GSUd9IC0tY2ZsYWdzLW9ubHktSSAgcHl0aG9uKQorICAgICBXSVRIX1BZVEhPTl9TVUJQQUNLQUdFPTEKKyAgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorLSAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JJFdJVEhfUFlUSE9OX0lOQ0xVREUiCisrICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFdJVEhfUFlUSE9OX0lOQ0xVREUiCisgICAgIEFDX0NIRUNLX0hFQURFUihbUHl0aG9uLmhdLFtdLAorICAgICAgIFtBQ19NU0dfRVJST1IoW21pc3NpbmcgUHl0aG9uLmhdKQorICAgICAgIF0pCitkaWZmIC0tZ2l0IGEvcHl0aG9uL01ha2VmaWxlLmFtIGIvcHl0aG9uL01ha2VmaWxlLmFtCitpbmRleCBmZmY1MWFlLi5mMzdjYjlkIDEwMDY0NAorLS0tIGEvcHl0aG9uL01ha2VmaWxlLmFtCisrKysgYi9weXRob24vTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQCBFWFRSQV9ESVNUID0gcnBtL19faW5pdF9fLnB5IHJwbS90cmFuc2FjdGlvbi5weQorIAorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9idWlsZGRpcikvaW5jbHVkZS8KKyBBTV9DUFBGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvcHl0aG9uCistQU1fQ1BQRkxBR1MgKz0gLUlAV0lUSF9QWVRIT05fSU5DTFVERUAKKytBTV9DUFBGTEFHUyArPSBAV0lUSF9QWVRIT05fSU5DTFVERUAKKyAKKyBwa2dweWV4ZWNfTFRMSUJSQVJJRVMgPSBfcnBtbW9kdWxlLmxhIF9ycG1ibW9kdWxlLmxhIF9ycG1zbW9kdWxlLmxhCisgcGtncHlleGVjX0RBVEEgPSBycG0vX19pbml0X18ucHkgcnBtL3RyYW5zYWN0aW9uLnB5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiYzMzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLzAwMDEtdXNpbmctcG9wdFBhcnNlQXJndlN0cmluZy10by1wYXJzZS10aGUtX2dwZ19jaGVja19wYS5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDY0ODUxYzY2MjJhZmY2NDc4N2E5ZmNlYTI2Y2NjZGUxODNiN2M3NDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiUm95LkxpIiA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTEgTm92IDIwMTQgMTY6Mjg6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNpbmcgcG9wdFBhcnNlQXJndlN0cmluZyB0byBwYXJzZSB0aGUKKyBfZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQm90aCBfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgYW5kIF9fZ3BnX3NpZ25fY21kIGluY2x1ZGUgIiV7X2dwZ19uYW1lfSIsIGJ1dAorc3RyYWNlIHNob3dzIHRoYXQgZ3BnX25hbWUgaGFzIGEgcXVvdGUgd2hlbiBydW4gX2dwZ19jaGVja19wYXNzd29yZCwKK2J1dCBub3Qgd2hlbiBydW4gX19ncGdfc2lnbl9jbWQ7IGZvciBleGFtcGxlLCBpZiBncGdfbmFtZSBpcyAidGVzdGVyIgorCisgICAgZXhlY3ZlKCIvdXNyL2Jpbi9ncGciLCBbImdwZyIsICItLWJhdGNoIiwgIi0tbm8tdmVyYm9zZSIsCisgICAgIi0tcGFzc3BocmFzZS1mZCIsICIzIiwgIi11IiwgIlwidGVzdGVyXCIiLCAiLXNvIiwgIi0iXSwgWy8qIDIwIHZhcnMgKi9dKSA9IDAKKworICAgIGV4ZWN2ZSgiL3Vzci9iaW4vZ3BnIiwgWyJncGciLCAiLS1iYXRjaCIsICItLW5vLXZlcmJvc2UiLCAiLS1uby1hcm1vciIsCisgICAgIi0tcGFzc3BocmFzZS1mZCIsICIzIiwgIi0tbm8tc2VjbWVtLXdhcm5pbmciLCAiLXUiLCAidGVzdGVyIiwgIi1zYm8iLi4sKSA9IDAKKworaXQgY2FuIGJlIGZpeGVkIGJ5IHJlbW92aW5nIHRoZSBxdW90ZSBhcm91bmQgJXtncGdfbmFtZX0gd2hlbiBkZWZpbmUKK19fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCBpbiBtYWNyb3MvbWFjcm9zLCBsaWtlIGJlbG93LCBidXQgaWYgZ3BnX25hbWUgaW5jbHVkZXMKK3NwYWNlLCBpdCB3aWxsIG5vdCB3b3JrLgorCisgICAgICVfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgICAgICAgJXtfX2dwZ30gXAorICAgICAgICBncGcgLS1iYXRjaCAtLW5vLXZlcmJvc2UgLS1wYXNzcGhyYXNlLWZkIDMgLXUgJXtfZ3BnX25hbWV9IC1zbyAtCisKK1RoZSBwb3B0UGFyc2VBcmd2U3RyaW5nIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFyc2UgX2dwZ19zaWduX2NtZCwgc28gdXNpbmcKK3BvcHRQYXJzZUFyZ3ZTdHJpbmcgdG8gcGFyc2UgX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kIHRvIGZpeCB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBycG1kYi9zaWduYXR1cmUuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JwbWRiL3NpZ25hdHVyZS5jIGIvcnBtZGIvc2lnbmF0dXJlLmMKK2luZGV4IGMzNWUwYWIuLjAxNmU4ZDEgMTAwNjQ0CistLS0gYS9ycG1kYi9zaWduYXR1cmUuYworKysrIGIvcnBtZGIvc2lnbmF0dXJlLmMKK0BAIC01MjksNyArNTI5LDcgQEAgaW50IHJwbUNoZWNrUGFzc1BocmFzZShjb25zdCBjaGFyICogcGFzc1BocmFzZSkKKyAgIAkJKHZvaWQpIHNldGVudigiR05VUEdIT01FIiwgZ3BnX3BhdGgsIDEpOworIAorIAkgICAgY21kID0gcnBtRXhwYW5kKCIlez9fX2dwZ19jaGVja19wYXNzd29yZF9jbWR9IiwgTlVMTCk7CistCSAgICByYyA9IGFyZ3ZTcGxpdCgmYXYsIGNtZCwgTlVMTCk7CisrCSAgICByYyA9IHBvcHRQYXJzZUFyZ3ZTdHJpbmcoY21kLCBOVUxMLCAoY29uc3QgY2hhciAqKiopJmF2KTsKKyAJICAgIGlmICghcmMpCisgCQlyYyA9IGV4ZWN2ZShhdlswXSwgKGNoYXIgKmNvbnN0ICopYXYrMSwgZW52aXJvbik7CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGJjb252ZXJ0LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitIYWNrIHRvIHByZXZlbnQgdW5uZWVkZWQgZGVtbyBhcHAgZnJvbSBidWlsZGluZyBvbiBvbGRlciBsaWJjCit3aGVyZSBpdCB3aWxsIGJyZWFrIHRoZSBidWlsZAorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0yOSw3ICsyOSw3IEBAIEVYVFJBX1BST0dSQU1TID0gbml4LWNvcHktY2xvc3VyZSBuaXgtZW4KKyAJeGl1LWluc3RhbnRpYXRlIHhpdS1zdG9yZQorIG5vaW5zdF9QUk9HUkFNUyA9CisgCistRVhUUkFfUFJPR1JBTVMgKz0gYXVndG9vbCBjdWRmdG9vbCBkYmNvbnZlcnQgZGVidWdlZGl0IFwKKytFWFRSQV9QUk9HUkFNUyArPSBhdWd0b29sIGN1ZGZ0b29sIGRlYnVnZWRpdCBcCisgCW5peC1idWlsZCBuaXgtY2hhbm5lbCBuaXgtY29sbGVjdC1nYXJiYWdlIFwKKyAJbml4LWxvZzJ4bWwgbml4LXByZWZldGNoLXVybCBuaXgtcHVsbCBuaXgtcHVzaCBcCisgCXhpdS1lY2hvIHhpdS1oYXNoIFwKK0BAIC02NCw3ICs2NCw3IEBAIHBrZ2Jpbl9QUk9HUkFNUyA9CVwKKyAJcnBtY2FjaGUgcnBtZGlnZXN0IHJwbXJlcG8gcnBtc3BlY2R1bXAgXAorIAlycG1jbXAgcnBtZGVwcyBycG1kZXBzLW9lY29yZSBzcWxpdGUzIEBXSVRIX0tFWVVUSUxTX1JQTUtFWUAgQFdJVEhfTElCRUxGX0RFQlVHRURJVEAKKyBpZiBXSVRIX0RCCistcGtnYmluX1BST0dSQU1TICs9CWRiY29udmVydAorK3BrZ2Jpbl9QUk9HUkFNUyArPQkKKyBlbmRpZgorIGRpc3RfbWFuX01BTlMgPQkJcnBtZ3JlcC4xCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC1zZWd2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWY1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaApAQCAtMCwwICsxLDk4IEBACitEdXJpbmcgdGhlIHJlY2FsY3VsYXRpb24gb2YgdGhlIGJ1aWxkaWQsIGl0J3MgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUgd29yZAorYmFjayB0byB0aGUgb3JpZ2luYWwgZW5kaWFuLiAgSG93ZXZlciwgaWYgd2UgZG8gdGhpcyBpbi1wbGFjZSwgd2UndmUgYWxzbworYWZmZWN0ZWQgdGhlIGhlYWRlcnMgdGhhdCB3ZSdyZSBhbHNvIHdvcmtpbmcgb24uICBUaGUgc2lkZSBlZmZlY3Qgb2YgdGhpcyBpcword2UgY2FuIG5vIGxvbmdlciByZWx5IG9uICdzaF90eXBlJyBhcyBpdCBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGFueSB0aW1lIHdlIHRyYW5zbGF0ZSB0aGUgbG9hZGVkIGRhdGEgdG8gdGhlIG1hY2hpbmUKK2Zvcm1hdCwgd2Ugb25seSBkbyBpdCBpbiBhIGJhY2t1cCBjb3B5IGFuZCBuZXZlciB0aGUgb3JpZ2luYWwgY29weS4KKworTm90ZTogaW4gYWxsIG90aGVyIHBsYWNlcyBhIGJhY2t1cCBjb3B5IHdhcyB1c2VkLCBqdXN0IG5vdCBidWlsZGlkIHByb2Nlc3NpbmcuCisKK0Fsc28gdGhlIHByb2Nlc3MgKC4uLikgZnVuY3Rpb24gd2FzIG1vZGlmaWVkIHRvIHZlcmlmeSB0aGUgZGF0YSBpcyBub3QKK05VTEwgYXMgd2VsbC4gIFRoaXMgaXMgYW4gZXh0cmEgY2hlY2sgYW5kIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL2RlYnVnZWRpdC5jCisrKysgcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworQEAgLTE0NDUsMjEgKzE0NDUsMjQgQEAgaGFuZGxlX2J1aWxkX2lkIChEU08gKmRzbywgRWxmX0RhdGEgKmJ1aQorICAgICBhdXRvIGlubGluZSB2b2lkIHByb2Nlc3MgKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQorICAgICB7CisgICAgICAgbWVtY2h1bmsgY2h1bmsgPSB7IC5kYXRhID0gKHZvaWQgKikgZGF0YSwgLnNpemUgPSBzaXplIH07CistICAgICAgaGFzaEZ1bmN0aW9uQ29udGV4dFVwZGF0ZU1DICgmY3R4LCAmY2h1bmspOworKyAgICAgIGlmIChkYXRhICE9IE5VTEwgJiYgc2l6ZSAhPSAwKQorKyAgICAgICAgaGFzaEZ1bmN0aW9uQ29udGV4dFVwZGF0ZU1DICgmY3R4LCAmY2h1bmspOworICAgICB9CisgICAgIHVuaW9uCisgICAgIHsKKyAgICAgICBHRWxmX0VoZHIgZWhkcjsKKyAgICAgICBHRWxmX1BoZHIgcGhkcjsKKyAgICAgICBHRWxmX1NoZHIgc2hkcjsKKy0gICAgfSB1OworLSAgICBFbGZfRGF0YSB4ID0geyAuZF92ZXJzaW9uID0gRVZfQ1VSUkVOVCwgLmRfYnVmID0gJnUgfTsKKysgICAgfSB1MSwgdTI7CisrICAgIEVsZl9EYXRhIHNyYyAgPSB7IC5kX3ZlcnNpb24gPSBFVl9DVVJSRU5ULCAuZF9idWYgPSAmdTEgfTsKKysgICAgRWxmX0RhdGEgZGVzdCA9IHsgLmRfdmVyc2lvbiA9IEVWX0NVUlJFTlQsIC5kX2J1ZiA9ICZ1MiB9OworIAorLSAgICB4LmRfdHlwZSA9IEVMRl9UX0VIRFI7CistICAgIHguZF9zaXplID0gc2l6ZW9mIHUuZWhkcjsKKy0gICAgdS5laGRyID0gZHNvLT5laGRyOworLSAgICB1LmVoZHIuZV9waG9mZiA9IHUuZWhkci5lX3Nob2ZmID0gMDsKKy0gICAgaWYgKGVsZjY0X3hsYXRldG9tICgmeCwgJngsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorKyAgICBzcmMuZF90eXBlID0gRUxGX1RfRUhEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5laGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5laGRyOworKyAgICB1MS5laGRyID0gZHNvLT5laGRyOworKyAgICB1MS5laGRyLmVfcGhvZmYgPSB1MS5laGRyLmVfc2hvZmYgPSAwOworKyAgICBpZiAoZWxmNjRfeGxhdGV0b20gKCZkZXN0LCAmc3JjLCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKyAgICAgICB7CisgICAgICAgYmFkOgorIAlmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gY29tcHV0ZSBoZWFkZXIgY2hlY2tzdW06ICVzXG4iLAorQEAgLTE0NjcsMjkgKzE0NzAsMzEgQEAgaGFuZGxlX2J1aWxkX2lkIChEU08gKmRzbywgRWxmX0RhdGEgKmJ1aQorIAlleGl0ICgxKTsKKyAgICAgICB9CisgCistICAgIHguZF90eXBlID0gRUxGX1RfUEhEUjsKKy0gICAgeC5kX3NpemUgPSBzaXplb2YgdS5waGRyOworKyAgICBzcmMuZF90eXBlID0gRUxGX1RfUEhEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5waGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5waGRyOworICAgICBmb3IgKGkgPSAwOyBpIDwgZHNvLT5laGRyLmVfcGhudW07ICsraSkKKyAgICAgICB7CistCWlmIChnZWxmX2dldHBoZHIgKGRzby0+ZWxmLCBpLCAmdS5waGRyKSA9PSBOVUxMKQorKwlpZiAoZ2VsZl9nZXRwaGRyIChkc28tPmVsZiwgaSwgJnUxLnBoZHIpID09IE5VTEwpCisgCSAgZ290byBiYWQ7CistCWlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysJaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgCSAgZ290byBiYWQ7CistCXByb2Nlc3MgKHguZF9idWYsIHguZF9zaXplKTsKKysJcHJvY2VzcyAoZGVzdC5kX2J1ZiwgZGVzdC5kX3NpemUpOworICAgICAgIH0KKyAKKy0gICAgeC5kX3R5cGUgPSBFTEZfVF9TSERSOworLSAgICB4LmRfc2l6ZSA9IHNpemVvZiB1LnNoZHI7CisrICAgIHNyYy5kX3R5cGUgPSBFTEZfVF9TSERSOworKyAgICBzcmMuZF9zaXplID0gc2l6ZW9mIHUxLnNoZHI7CisrICAgIGRlc3QuZF9zaXplID0gc2l6ZW9mIHUyLnNoZHI7CisgICAgIGZvciAoaSA9IDA7IGkgPCBkc28tPmVoZHIuZV9zaG51bTsgKytpKQorICAgICAgIGlmIChkc28tPnNjbltpXSAhPSBOVUxMKQorIAl7CistCSAgdS5zaGRyID0gZHNvLT5zaGRyW2ldOworLQkgIHUuc2hkci5zaF9vZmZzZXQgPSAwOworLQkgIGlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysJICB1MS5zaGRyID0gZHNvLT5zaGRyW2ldOworKwkgIHUxLnNoZHIuc2hfb2Zmc2V0ID0gMDsKKysJICBpZiAoZWxmNjRfeGxhdGV0b20gKCZkZXN0LCAmc3JjLCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKyAJICAgIGdvdG8gYmFkOworLQkgIHByb2Nlc3MgKHguZF9idWYsIHguZF9zaXplKTsKKysJICBwcm9jZXNzIChkZXN0LmRfYnVmLCBkZXN0LmRfc2l6ZSk7CisgCistCSAgaWYgKHUuc2hkci5zaF90eXBlICE9IFNIVF9OT0JJVFMpCisrCSAgaWYgKHUxLnNoZHIuc2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorIAkgICAgeworIAkgICAgICBFbGZfRGF0YSAqZCA9IGVsZl9yYXdkYXRhIChkc28tPnNjbltpXSwgTlVMTCk7CisgCSAgICAgIGlmIChkID09IE5VTEwpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RlYnVnZWRpdC12YWxpZC1maWxlLXRvLWZpeC1zZWdtZW50LWZhdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzMxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaApAQCAtMCwwICsxLDY1IEBACitkZWJ1Z2VkaXQ6IGZpeCBzZWdtZW50IGZhdWx0IHdoaWxlIGZpbGUncyBic3Mgb2Zmc2V0IGhhdmUgYSBsYXJnZSBudW1iZXIKKworV2hpbGUgRUxGX0NfUkRXUl9NTUFQIHdhcyB1c2VkLCBlbGZfYmVnaW4gaW52b2tlZCBtbWFwKCkgdG8gbWFwIGZpbGUKK2ludG8gbWVtb3J5LiBXaGlsZSB0aGUgZmlsZSdzIGJzcyBPZmZzZXQgaGFzIGEgbGFyZ2UgbnVtYmVyLCBlbGZfdXBkYXRlCitjYWN1bGF0ZWQgZmlsZSBzaXplIGJ5IF9fZWxmNjRfdXBkYXRlbnVsbF93cmxvY2sgYW5kIHRoZSBzaXplIHdhcworZW5sYXJnZWQuCisKK0luIHRoaXMgc2l0dWF0aW9uLCBlbGZfdXBkYXRlIGludm9rZWQgZnRydW5jYXRlIHRvIGVubGFyZ2UgdGhlIGZpbGUsCithbmQgbWVtb3J5IHNpemUgKGVsZi0+bWF4aW11bV9zaXplKSBhbHNvIHdhcyBpbmNvcnJlY3RseSB1cGRhdGVkLgorVGhlcmUgd2FzIHNlZ21lbnQgZmF1bHQgaW4gZWxmX2VuZCB3aGljaCBpbnZva2VkIG11bm1hcCB3aXRoIHRoZQorbGVuZ3RoIGlzIHRoZSBlbmxhcmdlZCBmaWxlIHNpemUsIG5vdCB0aGUgbW1hcCdzIGxlbmd0aC4KKworQmVmb3JlIHRoZSBhYm92ZSBvcGVyYXRpb25zLCBpbnZva2UgZWxmX2JlZ2luL2VsZl91cGRhdGUvZWxmX2VuZAord2l0aCBFTEZfQ19SRFdSIGFuZCBFTEZfRl9MQVlPVVQgc2V0IHRvIGVubGFyZ2UgdGhlIGFib3ZlIGZpbGUsIGl0Citjb3VsZCBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgc2FmZSBmb3IgdGhlIGZvbGxvd2luZyBlbGYgb3BlcmF0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyB0b29scy9kZWJ1Z2VkaXQuYyB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9kZWJ1Z2VkaXQuYworKysrIHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKK0BAIC0xNTI1LDYgKzE1MjUsMjggQEAgaGFuZGxlX2J1aWxkX2lkIChEU08gKmRzbywgRWxmX0RhdGEgKmJ1aQorICAgfQorIH0KKyAKKysvKiBJdCBhdm9pZGVkIHRoZSBzZWdtZW50IGZhdWx0IHdoaWxlIGZpbGUncyBic3Mgb2Zmc2V0IGhhdmUgYSBsYXJnZSBudW1iZXIuCisrICAgU2VlIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTAxOTcwNworKyAgICAgICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEwMjA4NDIgZm9yIGRldGFpbC4gKi8KKyt2b2lkIHZhbGlkX2ZpbGUoaW50IGZkKQorK3sKKysgIEVsZiAqZWxmID0gZWxmX2JlZ2luIChmZCwgRUxGX0NfUkRXUiwgTlVMTCk7CisrICBpZiAoZWxmID09IE5VTEwpCisrICB7CisrICAgIGVycm9yICgxLCAwLCAiZWxmX2JlZ2luOiAlcyIsIGVsZl9lcnJtc2cgKC0xKSk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGVsZl9mbGFnZWxmIChlbGYsIEVMRl9DX1NFVCwgRUxGX0ZfTEFZT1VUKTsKKysKKysgIGlmIChlbGZfdXBkYXRlIChlbGYsIEVMRl9DX1dSSVRFKSA8IDApCisrICAgIGVycm9yICgxLCAwLCAiZWxmX3VwZGF0ZTogJXMiLCBlbGZfZXJybXNnICgtMSkpOworKworKyAgZWxmX2VuZCAoZWxmKTsKKysKKysgIHJldHVybjsKKyt9CisrCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CitAQCAtMTYyMSw2ICsxNjQzLDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBleGl0ICgxKTsKKyAgICAgfQorIAorKyAgLyogTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHZhbGlkLiAqLworKyAgdmFsaWRfZmlsZShmZCk7CisrCisgICBkc28gPSBmZG9wZW5fZHNvIChmZCwgZmlsZSk7CisgICBpZiAoZHNvID09IE5VTEwpCisgICAgIGV4aXQgKDEpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzZhZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorU29tZSBvcHRpb25zIGNoZWNrZWQgaW4gdGhpcyBsb29wIGFyZSBuZWVkaW5nIGxpbmtpbmcgdG8gZmluZCBvdXQKK2lmIHRoZSBvcHRpb24gY2FuIGJlIHVzZWQgb3Igbm90IGUuZy4gLWZzdGFjay1wcm90ZWN0b3Igd2hpY2ggbmVlZHMKK2xpYnNzcCB0byBiZSBzdGFnZWQgYW5kIGF2YWlsYWJsZSBmb3IgY29tcGlsZXIgdG8gbGluayBhZ2FpbnN0CitUaGVyZWZvcmUgd2UgY2hhbmdlIHRoZSBjb21waWxlIG9ubHkgY2hlY2sgdG8gY29tcGlsZSBhbmQgbGluayBjaGVjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTIwMSw3ICsyMDEsNyBAQCBkbmwgIyBHTlUgR0NDICh1c3VhbGx5ICJnY2MiKQorICBteV9zYXZlX2NmbGFncz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSRjCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHQ0Mgc3VwcG9ydHMgJGNdKQorLSBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdKV0sCisrIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10pXSwKKyAgICAgW0FDX01TR19SRVNVTFQoW3llc10pXQorICAgICBbbXlfY2ZsYWdzPSRjXSwKKyAgICAgW0FDX01TR19SRVNVTFQoW25vXSldCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmYjE4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9ycG1kYi5oCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG1kYi5oCitAQCAtOSw2ICs5LDcgQEAKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPG1pcmUuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKyAKKyAjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKyAjaW5jbHVkZSA8cnBtdGFnLmg+CS8qIFhYWCBIZWFkZXIgdHlwZWRlZiAqLworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvcnBtdGFnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtdGFnLmgKKysrKyBycG0tNS40LjE0L3JwbWRiL3JwbXRhZy5oCitAQCAtNyw2ICs3LDcgQEAKKyAKKyAjaW5jbHVkZSA8cnBtaW90eXBlcy5oPgorICNpbmNsdWRlIDxycG1zdy5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFiOWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK3JwbTogUmVzb2x2ZSBwYXJhbGxlbCBpbnN0YWxsIGlzc3VlIHdoZW4gaW5zdGFsbGluZyBsdWEKKworV2hlbiBsdWEgaXMgYmVpbmcgaW5zdGFsbGVkIG9uIHNvbWUgc3lzdGVtcyB0aGF0IGFyZSBiZWluZyBydW4gd2l0aCBoaWdoIGxldmVscworb2YgcGFyYWxsZWxpemF0aW9uIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBpbnN0YWxsLWRhdGEtYW0gYW5kIGluc3RhbGwtZXhlYy1ob29rCithcmUgcHJvY2Vzc2VkIGF0IHRoZSBzYW1lIG9yIGEgdmVyeSBzaG9ydCB0aW1lIGFwYXJ0LiBUaGlzIGNhdXNlcworaW5zdGFsbC1wa2diaW5QUk9HUkFNUywgd2hpY2ggaXMgYSBkZXBlbmRlbmN5IG9mIGJvdGgsIHRvIGJlIHJ1biBhdCBhcm91bmQgdGhlCitzYW1lIHRpbWUgVGhpcyBzb21ldGltZXMgY2F1c2VzIGZpbGUgY29udGVudGlvbiBhbmQgd2lsbCBzb21ldGltZXMgYmUgaW4gYSBzdGF0ZQord2hlcmUgaW5zdGFsbC1leGVjLWhvb2sgaXMgbG9va2luZyBmb3IgYSBmaWxlIHRoYXQgaXMgYmVpbmcgaW5zdGFsbGVkIG9yIGJvdGgKK2luc3RhbGwtcGtnYmluUFJPR1JBTVMgYmVpbmcgcnVuIGFyZSBpbnN0YWxsaW5nIHRoZSBzYW1lIGZpbGUgYW5kIGZhaWwgYmVjYXVzZQoraXQgY2Fubm9uIGNyZWF0ZSBhIG5ldyBmaWxlLgorCitUaGlzIHBhdGNoIGFsbG93cyBpbnN0YWxsLWV4ZWMtaG9vayB0byBiZSBjYWxsZWQgYnkgaW5zdGFsbC1kYXRhLWFtIGluc3RlYWQgb2YKK2luc3RhbGwtZXhlYy1hbS4gSXQgYWxzbyByZW1vdmVkIHRoZSBkZXBlbmRlbmN5IGluIGluc3RhbGwtZGF0YS1ob29rIG9uCitpbnN0YWxsLXBrZ2JpblBST0dSQU1TLiBUaGlzIG1lYW5zIGluc3RhbGwtcGtnYmluUFJPR1JBTVMgd2lsbCBvbmx5IGJlIHJ1biBvbmNlCitzbyB0aGVyZSB3aG91bGQgYmUgYW55IGZpbGUgY29udGVudGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1vcmdhbiBMaXR0bGUgPG1vcmdhbi5saXR0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCitAQCAtMzI2LDcgKzMyNiw3IEBAIGNsZWFuLWxvY2FsOgorICMgWFhYIEJ1aWxkICYgaW5zdGFsbCBhcyBycG1sdWEvcnBtbHVhYyB3aXRoIGhhcmRsaW5rcyB0byBsdWEvbHVhYyBwb3N0IGluc3RhbGwuCisgIyBYWFggQ1ZTIGhhcyBsdWEvbHVhYyBzdWItZGlyZWN0b3JpZXMgaW4gdGhlIEF0dGljIHRoYXQgY29sbGlkZSB3aXRoIHRoZQorICMgWFhYIGx1YS9sdWFjIGV4ZWN1dGFibGUgbmFtZXMgd2hlbiB1c2luZyBjdnMgdXBkYXRlLgorLWluc3RhbGwtZXhlYy1ob29rOglpbnN0YWxsLXBrZ2JpblBST0dSQU1TCisraW5zdGFsbC1kYXRhLWhvb2s6CQorIAlta2RpciAtcCAkKERFU1RESVIpJChwa2diaW5kaXIpCisgCSQoX19STSkgLWYgJChERVNURElSKSQocGtnYmluZGlyKS9sdWEKKyAJJChfX0xOKSAkKERFU1RESVIpJChwa2diaW5kaXIpL3JwbWx1YSAkKERFU1RESVIpJChwa2diaW5kaXIpL2x1YQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9uby1sZGZsYWdzLWluLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA2MjNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorRG9uJ3QgcHV0IExERkxBR1MgaW50byB0aGUgTGlicy5wcml2YXRlLCBhbGwgaXQgZ2VuZXJhbGx5IGNvbnRhaW5zIGlzIGEgbGlua2VyCitoYXNoIHNlbGVjdGlvbiAoaGFybWxlc3MpIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGliZGlyIGluIHRoZSBzeXNyb290CisoYWN0aXZlbHkgaGFybWZ1bCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NjcmlwdHMvcnBtLnBjLmluIGIvc2NyaXB0cy9ycG0ucGMuaW4KK2luZGV4IDgyOTM0NzEuLjJlYTQ2OWMgMTAwNjQ0CistLS0gYS9zY3JpcHRzL3JwbS5wYy5pbgorKysrIGIvc2NyaXB0cy9ycG0ucGMuaW4KK0BAIC0xNyArMTcgQEAgTGliczogLUwke2xpYmRpcn0gLWxycG1idWlsZCR7c3VmZml4fSAtbHJwbSR7c3VmZml4fSAtbHJwbWRiJHtzdWZmaXh9IC1scnBtaW8ke3MKKy1MaWJzLnByaXZhdGU6IEBMREZMQUdTQCBATElCU0AKKytMaWJzLnByaXZhdGU6IEBMSUJTQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3MmM5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL2Jhc2gKKworOiAke1JQTURFUFM6PXJwbWRlcHN9CisKK3Byb2Nlc3MoKSB7CisJd2hpbGUgcmVhZCBmaWxlX25hbWUgOyBkbworCQlwcmludGYgIiVzXHQiICR7ZmlsZV9uYW1lfQorCQlpZiBbICEgLWQgJGZpbGVfbmFtZSBdOyB0aGVuCisJCQlwcmludGYgIiVzICIgJCgkUlBNREVQUyAkMSAkZmlsZV9uYW1lIHwgc2VkIC1lICdzLHJwbWxpYiguKiwsJyAtZSAncyxcKFs8Plw9XVwrIFwrW14gXSpcKSwoXDEpLGcnKQorCQlmaQorCQlwcmludGYgIlxuIgorCWRvbmUKK30KKwordXNhZ2UoKSB7CisJZWNobyAiJDAgey1QfC0tcHJvdmlkZXN9IHstUnwtLXJlcXVpcmVzfSBGSUxFIC4uLiIKK30KKword2hpbGUgWyAkIyAtZ3QgMCBdOyBkbworICAgY2FzZSAiJDEiIGluCisJLS1ycG1kZXBzKQorCQlSUE1ERVBTPSQyCisJCXNoaWZ0CisJCXNoaWZ0CisJCTs7CisJLVJ8LS1yZXF1aXJlcykKKwkJcHJvY2Vzc190eXBlPS0tcmVxdWlyZXMKKwkJc2hpZnQKKwkJOzsKKwktUHwtLXByb3ZpZGVzKQorCQlwcm9jZXNzX3R5cGU9LS1wcm92aWRlcworCQlzaGlmdAorCQk7OworCSopCisJCWJyZWFrOworCQk7OworICAgZXNhYworZG9uZQorCitpZiBbIC16ICIkcHJvY2Vzc190eXBlIiBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgJCMgLWd0IDAgXTsgdGhlbgorCWZpbmQgIiRAIiB8IHByb2Nlc3MgJHByb2Nlc3NfdHlwZQorCWV4aXQgJD8KK2ZpCisKK3Byb2Nlc3MgJHByb2Nlc3NfdHlwZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzOGE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorcnBtbW9kdWxlLmM6IEV4cG9ydCBhIGZldyBhZGRpdGlvbmFsIFJQTVNFTlNFIHZhbHVlcworCitXZSB3YW50IHRvIHNlZSB0aGUgUlBNU0VOU0VfU0NSSVBUIHZhbHVlcyBmb3IgdXNlIHdpdGggU01BUlQuICBXZSBhbHNvCit3YW50IHRvIHNlZSB0aGUgTUlTU0lOR09LIHZhbHVlIHNvIHdlIGNhbiBhdm9pZCByZWNvbW1lbmRlZCBwYWNrYWdlcyBjYXVzaW5nCitmYWlsdXJlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtNDk0LDEyICs0OTQsMTYgQEAgdm9pZCBpbml0X3JwbSh2b2lkKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0VRVUFMKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9OT1RFUVVBTCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfRklORF9SRVFVSVJFUyk7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfUFJFUkVRKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUFJFKTsKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BSRVVOKTsKKy0gICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVFVOKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QT1NUVU4pOworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfTUlTU0lOR09LKTsKKyAjZW5kaWYKKyAKKyAgICAgUkVHSVNURVJfRU5VTShSUE1ERVBTX0ZMQUdfTk9VUEdSQURFKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbmRlcHMuc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4M2IxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitbICQjIC1nZSAxIF0gfHwgeworICAgIGNhdCA+IC9kZXYvbnVsbAorICAgIGV4aXQgMAorfQorCitjYXNlICQxIGluCistUnwtLXJlcXVpcmVzKQorICAgIHNoaWZ0CisgICAgZ3JlcCAiL3Vzci9cKGxpYlteL10qXHxzaGFyZVwpL3B5dGhvblteL10qLyIgPi9kZXYvbnVsbCAmJiBlY2hvICJweXRob24iCisgICAgZXhpdCAwCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxMy02NDM1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDdlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaApAQCAtMCwwICsxLDEwOSBAQAorRnJvbSAwODEwNWFjZGExZGE2M2QzMmZiYjE4NTk2YTNkNmMzZTBhYTEwNmQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMTQ6MzY6NTYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHJwbTogQ1ZFLTIwMTMtNjQzNQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JlZmVyZW5jZToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9Q1ZFLTIwMTMtNjQzNQorCitEZXNjcmlwdGlvbjoKK0l0IHdhcyBmb3VuZCB0aGF0IFJQTSB3cm90ZSBmaWxlIGNvbnRlbnRzIHRvIHRoZSB0YXJnZXQgaW5zdGFsbGF0aW9uCitkaXJlY3RvcnkgdW5kZXIgYSB0ZW1wb3JhcnkgbmFtZSwgYW5kIHZlcmlmaWVkIGl0cyBjcnlwdG9ncmFwaGljIHNpZ25hdHVyZQorb25seSBhZnRlciB0aGUgdGVtcG9yYXJ5IGZpbGUgaGFzIGJlZW4gd3JpdHRlbiBjb21wbGV0ZWx5LiBVbmRlciBjZXJ0YWluCitjb25kaXRpb25zLCB0aGUgc3lzdGVtIGludGVycHJldHMgdGhlIHVudmVyaWZpZWQgdGVtcG9yYXJ5IGZpbGUgY29udGVudHMKK2FuZCBleHRyYWN0cyBjb21tYW5kcyBmcm9tIGl0LiBUaGlzIGNvdWxkIGFsbG93IGFuIGF0dGFja2VyIHRvIG1vZGlmeQorc2lnbmVkIFJQTSBmaWxlcyBpbiBzdWNoIGEgd2F5IHRoYXQgdGhleSB3b3VsZCBleGVjdXRlIGNvZGUgY2hvc2VuCitieSB0aGUgYXR0YWNrZXIgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uLgorCitPcmlnaW5hbCBQYXRjaDoKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD05NTYyMDcKKworU2lnbmVkLW9mZi1ieTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGxpYi9mc20uYyAgICAgfCAgMiArLQorIHJwbWlvL3JwbWlvLmMgfCAxOCArKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZnNtLmMgYi9saWIvZnNtLmMKK2luZGV4IDFlZTdlNjcuLjA5NGViMWQgMTAwNjQ0CistLS0gYS9saWIvZnNtLmMKKysrKyBiL2xpYi9mc20uYworQEAgLTcyNiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IGV4cGFuZFJlZ3VsYXIoRlNNX3QgZnNtLCBycG1wc20gcHNtLCBycG1jcGlvX3QgYXJjaGl2ZSwgaW50IG5vZGlnZXN0KQorIHsKKyAgICAgRkRfdCB3ZmQgPSBOVUxMOworICAgICBjb25zdCBzdHJ1Y3Qgc3RhdCAqIHN0ID0gJmZzbS0+c2I7CistICAgIHJwbV9sb2ZmX3QgbGVmdCA9IHN0LT5zdF9zaXplOworKyAgICBycG1fbG9mZl90IGxlZnQgPSBycG1maUZTaXplSW5kZXgoZnNtR2V0RmkoZnNtKSwgZnNtLT5peCk7CisgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBmaWRpZ2VzdCA9IE5VTEw7CisgICAgIHBncEhhc2hBbGdvIGRpZ2VzdGFsZ28gPSAwOworICAgICBpbnQgcmMgPSAwOworZGlmZiAtLWdpdCBhL3JwbWlvL3JwbWlvLmMgYi9ycG1pby9ycG1pby5jCitpbmRleCBjZDIyM2U4Li4wYjEyZTMxIDEwMDY0NAorLS0tIGEvcnBtaW8vcnBtaW8uYworKysrIGIvcnBtaW8vcnBtaW8uYworQEAgLTEzMDksMTUgKzEzMDksMTkgQEAgaW50IEZjbG9zZShGRF90IGZkKQorICAqIC0gYnpvcGVuOglbMS05XSBpcyBibG9jayBzaXplIChtb2R1bG8gMTAwSykKKyAgKiAtIGJ6b3BlbjoJJ3MnIGlzIHNtYWxsbW9kZQorICAqIC0gSEFDSzoJJy4nIHRlcm1pbmF0ZXMsIHJlc3QgaXMgdHlwZSBvZiBJL08KKysgKiAtICAgICAgICAgICAgJ1UnIHNldHMgKm1vZGUgdG8gemVybyAobm8gcGVybWlzc2lvbnMpIGluc3RlYWQgb2YgMDY2NgorICAqLworIHN0YXRpYyB2b2lkIGN2dGZtb2RlIChjb25zdCBjaGFyICptLAorIAkJCQljaGFyICpzdGRpbywgc2l6ZV90IG5zdGRpbywKKyAJCQkJY2hhciAqb3RoZXIsIHNpemVfdCBub3RoZXIsCistCQkJCWNvbnN0IGNoYXIgKiplbmQsIGludCAqIGYpCisrCQkJCWNvbnN0IGNoYXIgKiplbmQsIGludCAqZiwgbW9kZV90ICptb2RlKQorIHsKKyAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgY2hhciBjOworIAorKyAgICBpZiAobW9kZSkKKysgICAgKm1vZGUgPSAwNjY2OworKworICAgICBzd2l0Y2ggKCptKSB7CisgICAgIGNhc2UgJ2EnOgorIAlmbGFncyB8PSBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0FQUEVORDsKK0BAIC0xMzU3LDYgKzEzNjEsMTAgQEAgc3RhdGljIHZvaWQgY3Z0Zm1vZGUgKGNvbnN0IGNoYXIgKm0sCisgCSAgICBpZiAoLS1uc3RkaW8gPiAwKSAqc3RkaW8rKyA9IGM7CisgCSAgICBjb250aW51ZTsKKyAJICAgIGJyZWFrOworKwljYXNlICdVJzoKKysJICAgIGlmIChtb2RlKQorKwkJKm1vZGUgPSAwOworKwkgICAgYnJlYWs7CisgCWRlZmF1bHQ6CisgCSAgICBpZiAoLS1ub3RoZXIgPiAwKSAqb3RoZXIrKyA9IGM7CisgCSAgICBjb250aW51ZTsKK0BAIC0xMzg1LDcgKzEzOTMsOCBAQCBmcHJpbnRmKHN0ZGVyciwgIioqKiBGZG9wZW4oJXAsJXMpICVzXG4iLCBmZCwgZm1vZGUsIGZkYmcoZmQpKTsKKyAgICAgaWYgKGZkID09IE5VTEwgfHwgZm1vZGUgPT0gTlVMTCkKKyAJcmV0dXJuIE5VTEw7CisgCistICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsIE5VTEwpOworKyAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCBOVUxMLAorKyAgICAgICAgTlVMTCk7CisgICAgIGlmIChzdGRpb1swXSA9PSAnXDAnKQorIAlyZXR1cm4gTlVMTDsKKyAgICAgenN0ZGlvWzBdID0gJ1wwJzsKK0BAIC0xNDM2LDcgKzE0NDUsNyBAQCBGRF90IEZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtb2RlKQorIHsKKyAgICAgY2hhciBzdGRpb1syMF0sIG90aGVyWzIwXTsKKyAgICAgY29uc3QgY2hhciAqZW5kID0gTlVMTDsKKy0gICAgbW9kZV90IHBlcm1zID0gMDY2NjsKKysgICAgbW9kZV90IHBlcm1zOworICAgICBpbnQgZmxhZ3MgPSAwOworICAgICBGRF90IGZkOworIAorQEAgLTE0NDQsNyArMTQ1Myw4IEBAIEZEX3QgRm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm1vZGUpCisgCXJldHVybiBOVUxMOworIAorICAgICBzdGRpb1swXSA9ICdcMCc7CistICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsICZmbGFncyk7CisrICAgIGN2dGZtb2RlKGZtb2RlLCBzdGRpbywgc2l6ZW9mKHN0ZGlvKSwgb3RoZXIsIHNpemVvZihvdGhlciksICZlbmQsICZmbGFncywKKysgICAgICAgICZwZXJtcyk7CisgICAgIGlmIChzdGRpb1swXSA9PSAnXDAnKQorIAlyZXR1cm4gTlVMTDsKKyAKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1DVkUtMjAxNC04MTE4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTc5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDcxYzgxMmVkZjE0MzFhOTk2N2JkOTliYTZmZmE2YWI4OWViN2VjN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMZW9uYXJkbyBTYW5kb3ZhbCA8bGVvbmFyZG8uc2FuZG92YWwuZ29uemFsZXpAbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAxMjo1Njo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gcnBtOiBDVkUtMjAxNC04MTE4CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUmVmZXJlbmNlOgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMTY4NzE1CisKK0Rlc2NyaXB0aW9uOgorSXQgd2FzIGZvdW5kIHRoYXQgUlBNIGNvdWxkIGVuY291bnRlciBhbiBpbnRlZ2VyIG92ZXJmbG93LAorbGVhZGluZyB0byBhIHN0YWNrLWJhc2VkIG92ZXJmbG93LCB3aGlsZSBwYXJzaW5nIGEgY3JhZnRlZAorQ1BJTyBoZWFkZXIgaW4gdGhlIHBheWxvYWQgc2VjdGlvbiBvZiBhbiBSUE0gZmlsZS4gIFRoaXMgY291bGQKK2FsbG93IGFuIGF0dGFja2VyIHRvIG1vZGlmeSBzaWduZWQgUlBNIGZpbGVzIGluIHN1Y2ggYSB3YXkgdGhhdAordGhleSB3b3VsZCBleGVjdXRlIGNvZGUgY2hvc2VuIGJ5IHRoZSBhdHRhY2tlciBkdXJpbmcgcGFja2FnZQoraW5zdGFsbGF0aW9uLgorCitPcmlnaW5hbCBQYXRjaDoKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD05NjIxNTkKKworU2lnbmVkLW9mZi1ieTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGxpYi9jcGlvLmMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYi9jcGlvLmMgYi9saWIvY3Bpby5jCitpbmRleCAzODJlZWI2Li43NGRkZDljIDEwMDY0NAorLS0tIGEvbGliL2NwaW8uYworKysrIGIvbGliL2NwaW8uYworQEAgLTI5Niw2ICsyOTYsOSBAQCBpbnQgcnBtY3Bpb0hlYWRlclJlYWQocnBtY3Bpb190IGNwaW8sIGNoYXIgKiogcGF0aCwgc3RydWN0IHN0YXQgKiBzdCkKKyAgICAgc3QtPnN0X3JkZXYgPSBtYWtlZGV2KG1ham9yLCBtaW5vcik7CisgCisgICAgIEdFVF9OVU1fRklFTEQoaGRyLm5hbWVzaXplLCBuYW1lU2l6ZSk7CisrICAgIGlmIChuYW1lU2l6ZSA8PSAwIHx8IG5hbWVTaXplID4gNDA5NikgeworKyAgICAgICAgcmV0dXJuIENQSU9FUlJfQkFEX0hFQURFUjsKKysgICAgfQorIAorICAgICAqcGF0aCA9IHhtYWxsb2MobmFtZVNpemUgKyAxKTsKKyAgICAgcmVhZCA9IEZyZWFkKCpwYXRoLCBuYW1lU2l6ZSwgMSwgY3Bpby0+ZmQpOworLS0gCisxLjguNC41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWF1dG9nZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MTIzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1JlbW92ZSB0aGUgc2FuaXR5IGNoZWNraW5nIGZyb20gdGhlIHJwbSBhdXRvZ2VuLnNoLiAgVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlCit3ZSBtYXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQsIGJ1dCB5ZXQgY29tcGF0aWJsZSB2ZXJzaW9ucy4gIElmIHdlIGRvIGVuZAordXAgYnJlYWtpbmcgdGhpbmdzLCB3ZSdsbCBkZWFsIHdpdGggaXQgYXQgdGhhdCB0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvc3ljay9hdXRvZ2VuLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5Y2svYXV0b2dlbi5zaAorKysrIHJwbS01LjQuMTQvc3ljay9hdXRvZ2VuLnNoCitAQCAtMzQsMTIgKzM0LDYgQEAgbGlidG9vbGl6ZSAoKSB7CisgICAgIGV2YWwgJF9saWJ0b29saXplICRfbGlidG9vbGl6ZV9hcmdzCisgfQorIAorLSMgICByZXF1aXJlbWVudHMgc2FuaXR5IGNoZWNrCistWyAiYGF1dG9tYWtlICAgLS12ZXJzaW9uIHwgaGVhZCAtMWAiICE9ICIkQU1WIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy1bICJgYXV0b2NvbmYgICAtLXZlcnNpb24gfCBoZWFkIC0xYCIgIT0gIiRBQ1YiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLVsgImBsaWJ0b29saXplIC0tdmVyc2lvbiB8IGhlYWQgLTFgIiAhPSAiJExUViIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistWyAiYGdldHRleHRpemUgLS12ZXJzaW9uIHwgaGVhZCAtMSB8IHNlZCAtZSAnczteLiovXFwoZ2V0dGV4dGl6ZVxcKTtcXDE7J2AiICE9ICIkR1RUIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy0KKyBlY2hvICItLS0+IGdlbmVyYXRlIGZpbGVzIHZpYSBHTlUgbGlidG9vbCAobGlidG9vbGl6ZSkiCisgbGlidG9vbGl6ZSAtLXF1aWV0IC0tY29weSAtLWZvcmNlIC0taW5zdGFsbAorIGVjaG8gIi0tLT4gZ2VuZXJhdGUgZmlsZXMgdmlhIEdOVSBhdXRvY29uZiAoYWNsb2NhbCwgYXV0b2hlYWRlcikiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2Fub25hcmNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFiNDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaApAQCAtMCwwICsxLDEzNiBAQAorbGliL3JwbXJjLmM6IFVwZGF0ZSAtLXRhcmdldCBwcm9jZXNzaW5nIHRvIHN1cHBvcnQgZnVsbCBHTlUgY2Fub25pY2FsIGFyY2gKKworUHJpb3IgdG8gdGhpcyBwYXRjaCwgd2hlbiB1c2luZyAtLXRhcmdldCwgUlBNIHN1cHBvcnRlZCB0aGUgZm9ybWF0OgorICA8YXJjaD4KKyAgPGFyY2g+LTxvcz4KKyAgPGFyY2g+LTxvcz4tZ251CisgIDxhcmNoPi08YXJiaXRyYXJ5IGl0ZW1zPi08b3M+CisgIDxhcmNoPi08YXJiaXRyYXJ5IGl0ZW1zPi08b3M+LWdudQorCitUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGl0ZW1zIHRvOgorICA8YXJjaD4KKyAgPGFyY2g+LTxvcz4KKyAgPGFyY2g+LTxvcz4tZ251CisgIDxhcmNoPi08dmVuZG9yPi08b3M+CisgIDxhcmNoPi08dmVuZG9yPi08b3M+LTxleHRlbnNpb24+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTkyNSw4ICs5MjUsOCBAQCBzdGF0aWMgdm9pZCBnZXRNYWNoaW5lSW5mbyhpbnQgdHlwZSwgLypACisgCisgc3RhdGljIHZvaWQgcnBtUmVidWlsZFRhcmdldFZhcnMoY29uc3QgY2hhciAqKiB0YXJnZXQsIGNvbnN0IGNoYXIgKiogY2Fub250YXJnZXQpCisgeworLQorLSAgICBjaGFyICpjYSA9IE5VTEwsICpjbyA9IE5VTEwsICpjdCA9IE5VTEw7CisrICAgIC8qIGNhID0gYXJjaCwgY3YgPSB2ZW5kb3IsIGNvID0gb3MsIGNlID0gZXh0ZW5zaW9uLCBjdCA9IGNhbm9uIHRhcmdldCAqLworKyAgICBjaGFyICpjYSA9IE5VTEwsICpjdiA9IE5VTEwsICpjbyA9IE5VTEwsICpjZSA9IE5VTEwsICpjdCA9IE5VTEw7CisgICAgIGludCB4OworIAorICAgICAvKiBSZWJ1aWxkIHRoZSBjb21wYXQgdGFibGUgdG8gcmVjYWxjdWxhdGUgdGhlIGN1cnJlbnQgdGFyZ2V0IGFyY2guICAqLworQEAgLTkzNiwyMyArOTM2LDYwIEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAgICAgcnBtU2V0VGFibGVzKFJQTV9NQUNIVEFCTEVfQlVJTERBUkNILCBSUE1fTUFDSFRBQkxFX0JVSUxET1MpOworIAorICAgICBpZiAodGFyZ2V0ICYmICp0YXJnZXQpIHsKKysJLyogR05VIGNhbm9uaWNhbCBmb3JtYXQgaXM6CisrCSAqICA8YXJjaD4tPHZlbmRvcj4tPG9zPlstZXh0ZW5zaW9uXQorKwkgKgorKwkgKiBXZSBzdXBwb3J0IHRoZSBib3RoIHRoZSBHTlUgY2Fub25pY2FsIGZvcm1hdAorKwkgKiBhcyB3ZWxsIGFzIHRoZSB0cmFkaXRpb25hbCBSUE0gZm9ybWF0czogCisrCSAqICA8YXJjaD4KKysJICogIDxhcmNoPi08b3M+Wy1nbnVdCisrCSAqLworIAljaGFyICpjOworIAkvKiBTZXQgYXJjaCBhbmQgb3MgZnJvbSBzcGVjaWZpZWQgYnVpbGQgdGFyZ2V0ICovCisgCWNhID0geHN0cmR1cCgqdGFyZ2V0KTsKKy0JaWYgKChjID0gc3RyY2hyKGNhLCAnLScpKSAhPSBOVUxMKSB7CisrCWlmICgoYyA9IHN0cmNocihjYSwgJy0nKSkgPT0gTlVMTCkgeworKwkgICAgLyogRm9ybWF0IGlzIDxhcmNoPiAqLworKwkgICAgOworKwl9IGVsc2UgeworIAkgICAgKmMrKyA9ICdcMCc7CistCSAgICAKKy0JICAgIGlmICgoY28gPSBzdHJyY2hyKGMsICctJykpID09IE5VTEwpIHsKKy0JCWNvID0gYzsKKysJICAgIGN2ID0gYzsKKysKKysJICAgIGlmICgoYyA9IHN0cmNocihjLCAnLScpKSA9PSBOVUxMKSB7CisrCQkvKiBGb3JtYXQgaXMgPGFyY2g+LTxvcz4gKi8KKysJCWNvID0gY3Y7CisrCQljdiA9IE5VTEw7CisgCSAgICB9IGVsc2UgeworLQkJaWYgKCF4c3RyY2FzZWNtcChjbywgIi1nbnUiKSkKKy0JCSAgICAqY28gPSAnXDAnOworLQkJaWYgKChjbyA9IHN0cnJjaHIoYywgJy0nKSkgPT0gTlVMTCkKKy0JCSAgICBjbyA9IGM7CistCQllbHNlCistCQkgICAgY28rKzsKKysJCSpjKysgPSAnXDAnOworKwkJY28gPSBjOworKworKwkJaWYgKChjID0gc3RyY2hyKGMsICctJykpID09IE5VTEwpIHsKKysJCSAgICAvKiBNaWdodCBiZToKKysJCSAgICAgKiAgPGFyY2g+LTx2ZW5kb3I+LTxvcz4KKysJCSAgICAgKiAgPGFyY2g+LTxvcz4tZ251CisrCQkgICAgICovCisrCQkgICAgaWYgKCF4c3RyY2FzZWNtcChjbywgImdudSIpKSB7CisrCQkJLyogRm9ybWF0IHdhcyA8YXJjaD4tPG9zPi1nbnUgKi8KKysJCQljZSA9IGNvOworKwkJCWNvID0gY3Y7CisrCQkJY3YgPSBOVUxMOworKwkJICAgIH0KKysJCX0gZWxzZSB7CisrCQkgICAgLyogRm9ybWF0IHdhcyA8YXJjaD4tPHZlbmRvcj4tPG9zPi08ZXh0ZW5zaW9uPiAqLworKwkJICAgICpjKysgPSAnXDAnOworKwkJICAgIGNlID0gYzsKKysJCX0KKyAJICAgIH0KKysJICAgIGlmIChjdiAhPSBOVUxMKSBjdiA9IHhzdHJkdXAoY3YpOworIAkgICAgaWYgKGNvICE9IE5VTEwpIGNvID0geHN0cmR1cChjbyk7CisrCSAgICBpZiAoY2UgIT0gTlVMTCkgeworKwkJLyogV2UgbmVlZCB0byBwcmVmaXggaXQgd2l0aCBhICItIiAqLworKwkJY2hhciAqIGxjZSA9IE5VTEw7CisrCisrCQlsY2UgPSB4bWFsbG9jKHN0cmxlbihjZSkgKyBzaXplb2YoIi0iKSk7CisrCQlzcHJpbnRmKGxjZSwgIi0lcyIsIGNlKTsKKysKKysJCWNlID0gbGNlOworKwkgICAgfQorIAl9CisgICAgIH0gZWxzZSB7CisgCWNvbnN0IGNoYXIgKmEgPSBOVUxMOworQEAgLTk5NSw4ICsxMDMyLDE2IEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl90YXJnZXQiLCBOVUxMLCBjdCwgUk1JTF9SUE1SQyk7CisgICAgIGRlbE1hY3JvKE5VTEwsICJfdGFyZ2V0X2NwdSIpOworICAgICBhZGRNYWNybyhOVUxMLCAiX3RhcmdldF9jcHUiLCBOVUxMLCBjYSwgUk1JTF9SUE1SQyk7CisrICAgIGlmIChjdikgeworKwlkZWxNYWNybyhOVUxMLCAiX3RhcmdldF92ZW5kb3IiKTsKKysJYWRkTWFjcm8oTlVMTCwgIl90YXJnZXRfdmVuZG9yIiwgTlVMTCwgY3YsIFJNSUxfUlBNUkMpOworKyAgICB9CisgICAgIGRlbE1hY3JvKE5VTEwsICJfdGFyZ2V0X29zIik7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0X29zIiwgTlVMTCwgY28sIFJNSUxfUlBNUkMpOworKyAgICBpZiAoY2UpIHsKKysJZGVsTWFjcm8oTlVMTCwgIl9nbnUiKTsKKysJYWRkTWFjcm8oTlVMTCwgIl9nbnUiLCBOVUxMLCBjZSwgUk1JTF9SUE1SQyk7CisrICAgIH0KKyAKKyAgICAgaWYgKGNhbm9udGFyZ2V0KQorIAkqY2Fub250YXJnZXQgPSBjdDsKK0BAIC0xMDA0LDggKzEwNDksMTIgQEAgc3RhdGljIHZvaWQgcnBtUmVidWlsZFRhcmdldFZhcnMoY29uc3QgYworIAljdCA9IF9mcmVlKGN0KTsKKyAgICAgY2EgPSBfZnJlZShjYSk7CisgICAgIC8qQC11c2VyZWxlYXNlZEAqLworKyAgICBjdiA9IF9mcmVlKGN2KTsKKysgICAgLypALXVzZXJlbGVhc2VkQCovCisgICAgIGNvID0gX2ZyZWUoY28pOworICAgICAvKkA9dXNlcmVsZWFzZWRAKi8KKysgICAgY2UgPSBfZnJlZShjZSk7CisrICAgIC8qQC11c2VyZWxlYXNlZEAqLworIH0KKyAKKyB2b2lkIHJwbUZyZWVScG1yYyh2b2lkKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODYwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tY2hlY2stcm9vdHBhdGgtcmVhc29uYWJsZW5lc3MucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorcnBtOiBjaGVjayBpZiB0aGUgYXJndW1lbnQocm9vdHBhdGgpIGV4aXN0cyBvciBiZSB3cml0YWJsZQorCitXaGVuIHVzZXIgZXhlY3V0ZSB0aGUgY29tbWFuZCAicnBtIC1xYWkgLS1yb290PSRkaXIiLGlmICRkaXIgZG9lc24ndAorZXhpc3Qgb3IgaXMgdW53cml0YWJsZSBhcyByZXN1bHQgb2YgbWFraW5nIGEgdHlwbyBpbiByb290cGF0aCx0aGVuCitpdCB3aWxsIGNyZWF0ZSBkaXJlbnQgJGRpciBhbmQgc3ViZGlyZWN0b3J5LgorU28gd2Ugc2hvdWxkIGFkZCB0aGUgY2hlY2sgZnVuY3Rpb24gdG8gZml4IGl0IGJlZm9yZSBjcmVhdGluZyByZWxhdGlvbmFsCitzdWJkaXJlY3RvcnksYW5kIHdhcm4gdGhlIGluY29ycmVjdCByb290cGF0aCB0byB1c2VyLiBJdCBqdXN0IGNoZWNrcyB0aGUKK3Jvb3RwYXRoIHJlYXNvbmFibGVuZXNzIHdoZW4gdGhlIHVzZXIgaW5wdXQgdGhlIGFyZ3VtZW50KC0tcm9vdD0vLXI9KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emNoaUB3aW5kcml2ZXIuY29tPgorLS0tCisgcnBtcXYuYyB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ycG1xdi5jIGIvcnBtcXYuYworaW5kZXggNDBjNDJiZC4uODhkODVhYiAxMDA2NDQKKy0tLSBhL3JwbXF2LmMKKysrKyBiL3JwbXF2LmMKK0BAIC0yMDYsNiArMjA2LDggQEAgc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNUYWJsZVtdID0geworICAgIFBPUFRfVEFCTEVFTkQKKyB9OworIAorK3N0YXRpYyBpbnQgX3JwbXF2X3Jvb3RwYXRoX3N0YXRlID0gMDsKKysKKyAjaWZkZWYgX19NSU5UX18KKyAvKiBNaU5UIGNhbm5vdCBkeW5hbWljYWxseSBpbmNyZWFzZSB0aGUgc3RhY2suICAqLworIGxvbmcgX3N0a3NpemUgPSA2NCAqIDEwMjRMOworQEAgLTQyNyw2ICs0MjksNDEgQEAgc3RhdGljIHZvaWQgaW50ZWdyaXR5X2NoZWNrKGNvbnN0IGNoYXIgKnByb2duYW1lLCBlbnVtIG1vZGVzIHByb2dtb2RlX251bSkKKyB9CisgI2VuZGlmCisgCisrLypjaGVjayBpZiB0aGUgcm9vdGRpciBpcyB3cml0YWJsZSBvciBleGlzdHMgKi8KKytpbnQgYWNjZXNzX2ZpbGUoY29uc3QgY2hhciAqcm9vdGRpcikKKyt7CisrICAgIGludCByZXQscm9vdGRpcl9sZW47CisrCisrICAgIGlmKHJvb3RkaXIgPT0gTlVMTCkgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAgIHJvb3RkaXJfbGVuID0gc3RybGVuKHJvb3RkaXIpOworKyAgICAvKm1ha2Ugc3VyZSB0aGF0IGRpcmVudCBhcmd1bWVudCB0cmFpbGluZyBpcyAiLyIgKi8KKysgICAgaWYoIShyb290ZGlyX2xlbiAmJiByb290ZGlyW3Jvb3RkaXJfbGVuIC0gMV0gPT0gJy8nKSl7CisrICAgICAgICBjaGFyICp0ID0gKGNoYXIgKiltYWxsb2Mocm9vdGRpcl9sZW4gKyAyKTsKKysgICAgICAgICp0ID0gJ1wwJzsKKysgICAgICAgICh2b2lkKXN0cGNweShzdHBjcHkodCxyb290ZGlyKSwiLyIpOworKyAgICAgICAgcmV0ID0gYWNjZXNzKHQsRl9PS3xXX09LKTsKKysgICAgICAgIGZyZWUodCk7CisrICAgIH1lbHNleworKyAgICAgICAgcmV0ID0gYWNjZXNzKHJvb3RkaXIsRl9PS3xXX09LKTsKKysgICAgfQorKyAgICByZXR1cm4gcmV0OworK30KKysKKysvKmNoZWNrIGlmIGlucHV0IHRoZSBhcmd1bWVudCAiLS1yb290Ly1yIiAgKi8KKyt2b2lkIGNoZWNrX2FyZ3VtZW50X3Jvb3QoaW50IGFyZ2MsY2hhciAqIGNvbnN0IGFyZ3ZbXSkKKyt7CisrICAgIGludCBpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisrICAgICAgICBpZihzdHJuY21wKGFyZ3ZbaV0sIi0tcm9vdD0iLDcpID09IDAgfHwgc3RybmNtcChhcmd2W2ldLCItcj0iLDMpID09IDApIHsKKysgICAgICAgICAgICBfcnBtcXZfcm9vdHBhdGhfc3RhdGUgPSAxOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworIC8qQC1ib3VuZHNAKi8gLyogTENMOiBzZWdmYXVsdCAqLworIC8qQC1tb2RzQCovIC8qIEZJWDogc2hydWcgKi8KKyAjaWYgIWRlZmluZWQoX19HTElCQ19fKSAmJiAhZGVmaW5lZChfX0xDTElOVF9fKQorQEAgLTQ3Niw2ICs1MTMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQorICAgICBpbnQgeHg7CisgI2VuZGlmCisgCQorKyAgICBjaGVja19hcmd1bWVudF9yb290KGFyZ2MsKGNoYXIgKmNvbnN0ICopYXJndik7CisrCisgI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKKyAgICAgZW52aXJvbiA9IGVudnA7CisgI2Vsc2UKK0BAIC03MTUsNiArNzU0LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YpCisgCQlhcmdlcnJvcihfKCJhcmd1bWVudHMgdG8gLS1yb290ICgtcikgbXVzdCBiZWdpbiB3aXRoIGEgLyIpKTsKKyAJICAgIGJyZWFrOworIAl9CisrICAgICAgICBpZiAoX3JwbXF2X3Jvb3RwYXRoX3N0YXRlKSB7CisrICAgICAgICAgICAgaWYgKGFjY2Vzc19maWxlKHJwbWlvUm9vdERpcikpIHsKKysgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF8oIkludmFsaWQgZGlyZWN0b3J5OiVzLCBlbnN1cmUgaXQgZXhpc3RzIG9yIGJlIHdyaXRhYmxlXG4iKSxycG1pb1Jvb3REaXIpOworKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICB9CisgCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBpbnRlZ3JpdHktY2hlY2tpbmcgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiLXJlZHVjZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2OTM3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitDaGFuZ2UgY2FjaGUgc2l6ZSB0byByZWR1Y2UgdGhlIHVzYWdlIG9mIGRpc2sgc3BhY2UgZnJvbSA2Mk1CIHRvIDI2TUIuIAorCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL0RCX0NPTkZJRy5pbgorKysrIHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCitAQCAtMjksNyArMjksNyBAQCBzZXRfdGhyZWFkX2NvdW50IDY0CisgCisgIyA9PT09PT09PT09PT09PT09IE1lbW9yeSBQb29sCisgI1hYWCBpbml0aWFsaXppbmcgZGJlbnYgd2l0aCBzZXRfY2FjaGVzaXplIGhhcyB1bmltcGxlbWVudGVkIHByZXJlcXVzaXRlcworLSNzZXRfY2FjaGVzaXplIDAgMTA0ODU3NiAwIAorK3NldF9jYWNoZXNpemUgMCAxMDQ4NTc2IDAgCisgc2V0X21wX21tYXBzaXplIDI2ODQzNTQ1NgorIAorICMgPT09PT09PT09PT09PT09PSBMb2NraW5nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYjUtb3ItZGI2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaApAQCAtMCwwICsxLDE2MiBAQAorU3VwcG9ydCBib3RoIGRiNSBhbmQgZGI2LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0ub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0vY29uZmlndXJlLmFjCitAQCAtNTQ3LDggKzU0Nyw2IEBAIGVsc2UKKyAgICAgTVlQQVRIPSRQQVRICisgZmkKKyAKKy1EQlhZPWRiNjAKKy0KKyBBQ19QQVRIX1BST0coX19CQVNILCBiYXNoLCAle19iaW5kaXJ9L2Jhc2gsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fQlpJUDIsIGJ6aXAyLCAle19iaW5kaXJ9L2J6aXAyLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NBVCwgY2F0LCAvYmluL2NhdCwgJE1ZUEFUSCkKK0BAIC01NjAsMjIgKzU1OCw2IEBAIEFDX1BBVEhfUFJPRyhfX0NNQUtFLCBjbWFrZSwgJXtfYmluZGlyfS8KKyBBQ19QQVRIX1BST0coX19DUElPLCBjcGlvLCAvYmluL2NwaW8sICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fQ1VSTCwgY3VybCwgJXtfYmluZGlyfS9jdXJsLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NWUywgY3ZzLCAle19iaW5kaXJ9L2N2cywgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9BUkNISVZFLCAke0RCWFl9X2FyY2hpdmUsICV7X2JpbmRpcn0vJHtEQlhZfV9hcmNoaXZlLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0NIRUNLUE9JTlQsICR7REJYWX1fY2hlY2twb2ludCwgJXtfYmluZGlyfS8ke0RCWFl9X2NoZWNrcG9pbnQsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfREVBRExPQ0ssICR7REJYWX1fZGVhZGxvY2ssICV7X2JpbmRpcn0vJHtEQlhZfV9kZWFkbG9jaywgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9EVU1QLCAke0RCWFl9X2R1bXAsICV7X2JpbmRpcn0vJHtEQlhZfV9kdW1wLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0hPVEJBQ0tVUCwgJHtEQlhZfV9ob3RiYWNrdXAsICV7X2JpbmRpcn0vJHtEQlhZfV9ob3RiYWNrdXAsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfTE9BRCwgJHtEQlhZfV9sb2FkLCAle19iaW5kaXJ9LyR7REJYWX1fbG9hZCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9MT0dfVkVSSUZZLCAke0RCWFl9X2xvZ192ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV9sb2dfdmVyaWZ5LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1BSSU5UTE9HLCAke0RCWFl9X3ByaW50bG9nLCAle19iaW5kaXJ9LyR7REJYWX1fcHJpbnRsb2csICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfUkVDT1ZFUiwgJHtEQlhZfV9yZWNvdmVyLCAle19iaW5kaXJ9LyR7REJYWX1fcmVjb3ZlciwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9SRVBMSUNBVEUsICR7REJYWX1fcmVwbGljYXRlLCAle19iaW5kaXJ9LyR7REJYWX1fcmVwbGljYXRlLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCU1FMLCAke0RCWFl9c3FsLCAle19iaW5kaXJ9LyR7REJYWX1zcWwsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfU1FMX0NPREVHRU4sICR7REJYWX1fc3FsX2NvZGVnZW4sICV7X2JpbmRpcn0vJHtEQlhZfV9zcWxfY29kZWdlbiwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9TVEFULCAke0RCWFl9X3N0YXQsICV7X2JpbmRpcn0vJHtEQlhZfV9zdGF0LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1RVTkVSLCAke0RCWFl9X3R1bmVyLCAle19iaW5kaXJ9LyR7REJYWX1fdHVuZXIsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfVVBHUkFERSwgJHtEQlhZfV91cGdyYWRlLCAle19iaW5kaXJ9LyR7REJYWX1fdXBncmFkZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9WRVJJRlksICR7REJYWX1fdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fdmVyaWZ5LCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0RJRkYsIGRpZmYsIC9iaW4vZGlmZiwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19ESVRUTywgZGl0dG8sICV7X2JpbmRpcn0vZGl0dG8sICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fRklMRSwgZmlsZSwgJXtfYmluZGlyfS9maWxlLCAkTVlQQVRIKQorQEAgLTE2MDQsMTMgKzE1ODYsMTggQEAgUlBNX0NIRUNLX0xJQigKKyAKKyBkbmwgIyBCZXJrZWxleS1EQiAmIFNRTGl0ZQorIERCTElCU1JDUz0iIgorK0RCWFk9ZGIKKysKKyAjIFhYWCB3b24ndCBoYW5kbGUgLS1pbmNsdWRlZGlyIG92ZXJyaWRlCistQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHtwcmVmaXh9L2luY2x1ZGUvJHtEQlhZfSIKKytDUFBGTEFHU19zYXZlPSIke0NQUEZMQUdTfSIKKytDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSAtSSR7cHJlZml4fS9pbmNsdWRlL2RiLTYuMCIKKyt3aXRoX2RiX3NhdmU9IiR7d2l0aF9kYn0iCisgUlBNX0NIRUNLX0xJQigKKyAgICAgW0JlcmtlbGV5LURCXSwgW2RiXSwKKyAgICAgW2RiLTYuMF0sIFtkYl9jcmVhdGVdLCBbZGIuaF0sCistICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGIzXSwKKysgICAgW3llcyxleHRlcm5hbF0sIFtkYjZdLAorICAgICBbIERCTElCU1JDUz0iJERCTElCU1JDUyBkYjMuYyIKKysgICAgICBEQlhZPWRiNjAKKyAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIHRydWUgXSkKKyAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWwgXSkKKyAgICAgICBpZiB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsOyB0aGVuCitAQCAtMTYxOSwxMCArMTYwNiwzMiBAQCBSUE1fQ0hFQ0tfTElCKAorICAgICAgICAgICBXSVRIX0RCX1NVQkRJUj0iIgorICAgICAgIGZpCisgICAgIF0sCistICAgIFsgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyBmYWxzZSBdKQorLSAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgZmFsc2UgXSkKKysgICAgWyAjIFJlc2V0IGEgZmV3IHZhcmlhYmxlcyB0byBmcmVzaAorKyAgICAgIHdpdGhfZGI9IiR7d2l0aF9kYl9zYXZlfSIKKysgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSAtSSR7cHJlZml4fS9pbmNsdWRlL2RiLTUuMyIKKysgICAgICBSUE1fQ0hFQ0tfTElCKAorKyAgICAgICAgW0JlcmtlbGV5LURCXSwgW2RiXSwKKysgICAgICAgIFtkYi01LjNdLCBbZGJfY3JlYXRlXSwgW2RiLmhdLAorKyAgICAgICAgW3llcyxleHRlcm5hbF0sIFtkYjUzXSwKKysgICAgICAgIFsgREJMSUJTUkNTPSIkREJMSUJTUkNTIGRiMy5jIgorKyAgICAgICAgICBEQlhZPWRiNTMKKysgICAgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyB0cnVlIF0pCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbCBdKQorKyAgICAgICAgICBpZiB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsOyB0aGVuCisrICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9EQl9ILCAxLCBbSGF2ZSA8ZGIuaD4gaGVhZGVyXSkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgV0lUSF9EQl9TVUJESVI9IiIKKysgICAgICAgICAgZmkKKysgICAgICAgIF0sCisrICAgICAgICBbIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgZmFsc2UgXSkKKysgICAgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyBmYWxzZSBdKQorKyAgICAgICAgXSkKKyAgICAgXSkKKyAKKytpZiB0ZXN0ICIuJGFjX2N2X2xpYl9kYl82XzBfZGJfY3JlYXRlIiAhPSAueWVzIC1hICIuJGFjX2N2X2xpYl9kYl81XzNfZGJfY3JlYXRlIiAhPSAueWVzOyB0aGVuCisrICAgIENQUEZMQUdTPSIke0NQUEZMQUdTX3NhdmV9IgorK2ZpCisrCisgZG5sICMgU3FsaXRlIGV4dGVybmFsCisgUlBNX0NIRUNLX0xJQigKKyAgICAgW1NRTGl0ZV0sIFtzcWxpdGVdLAorQEAgLTE2MzMsMTAgKzE2NDIsMTEgQEAgUlBNX0NIRUNLX0xJQigKKyAKKyBkbmwgIyBTcWxpdGUgMy43LjAuMSBmcm9tIGRiLTUuMS4xOQorIGRubCBYWFggZXJyb3I6IGBkYjMnIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIEFDX0NPTkZJR19TVUJESVJTLgorK2lmIHRlc3QgIi4kYWNfY3ZfbGliX2RiXzZfMF9kYl9jcmVhdGUiID0gLnllczsgdGhlbgorIFJQTV9DSEVDS19MSUIoCisgICAgIFtCZXJrZWxleS1EQiAoK1NRTGl0ZTMpXSwgW2Ric3FsXSwKKyAgICAgW2RiX3NxbC02LjBdLCBbc3FsaXRlM19vcGVuXSwgW2Ric3FsLmhdLAorLSAgICBbeWVzLGV4dGVybmFsXSwgW2RiMy9zcWxdLAorKyAgICBbeWVzLGV4dGVybmFsXSwgW2RiNi9zcWxdLAorICAgICBbCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyB0cnVlIF0pCisgICAgICAgQUNfREVGSU5FKFdJVEhfU1FMSVRFLCAxLCBbRGVmaW5lIGFzIDEgaWYgYnVpbGRpbmcgd2l0aCBTUUxpdGUgbGlicmFyeV0pCitAQCAtMTY1MCwxMiArMTY2MCw1MCBAQCBSUE1fQ0hFQ0tfTElCKAorICAgICBdLCBbCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyBmYWxzZSBdKQorICAgICBdKQorK2VsaWYgdGVzdCAiLiRhY19jdl9saWJfZGJfNV8zX2RiX2NyZWF0ZSIgPSAueWVzOyB0aGVuCisrUlBNX0NIRUNLX0xJQigKKysgICAgW0JlcmtlbGV5LURCICgrU1FMaXRlMyldLCBbZGJzcWxdLAorKyAgICBbZGJfc3FsLTUuM10sIFtzcWxpdGUzX29wZW5dLCBbZGJzcWwuaF0sCisrICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI1My9zcWxdLAorKyAgICBbCisrICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyB0cnVlIF0pCisrICAgICAgQUNfREVGSU5FKFdJVEhfU1FMSVRFLCAxLCBbRGVmaW5lIGFzIDEgaWYgYnVpbGRpbmcgd2l0aCBTUUxpdGUgbGlicmFyeV0pCisrICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorKyAgICAgICAgV0lUSF9EQl9DUFBGTEFHUz0iJHtXSVRIX0RCX0NQUEZMQUdTfSAtSVwkKHRvcF9zcmNkaXIpL2RiL3NxbC9nZW5lcmF0ZWQiCisrICAgICAgICBXSVRIX0RCX0xJQlM9IiR7V0lUSF9EQlNRTF9MSUJTfSIKKysgICAgICAgIERCTElCU1JDUz0iJERCTElCU1JDUyBzcWxpdGUuYyIKKysgICAgICBlbHNlCisrICAgICAgICBXSVRIX0RCU1FMX1NVQkRJUj0iIgorKyAgICAgIGZpCisrICAgIF0sIFsKKysgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIGZhbHNlIF0pCisrICAgIF0pCisrZWxzZQorK0FNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgZmFsc2UgXSkKKytmaQorIAorIERCTElCT0JKUz1gZWNobyAkREJMSUJTUkNTIHwgc2VkIC1lICJzL1wuYy9cLmxvL2ciYAorIAorIEFDX1NVQlNUKERCTElCU1JDUykKKyBBQ19TVUJTVChEQkxJQk9CSlMpCisgCisrQUNfUEFUSF9QUk9HKF9fREJfQVJDSElWRSwgJHtEQlhZfV9hcmNoaXZlLCAle19iaW5kaXJ9LyR7REJYWX1fYXJjaGl2ZSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9DSEVDS1BPSU5ULCAke0RCWFl9X2NoZWNrcG9pbnQsICV7X2JpbmRpcn0vJHtEQlhZfV9jaGVja3BvaW50LCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0RFQURMT0NLLCAke0RCWFl9X2RlYWRsb2NrLCAle19iaW5kaXJ9LyR7REJYWX1fZGVhZGxvY2ssICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfRFVNUCwgJHtEQlhZfV9kdW1wLCAle19iaW5kaXJ9LyR7REJYWX1fZHVtcCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9IT1RCQUNLVVAsICR7REJYWX1faG90YmFja3VwLCAle19iaW5kaXJ9LyR7REJYWX1faG90YmFja3VwLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0xPQUQsICR7REJYWX1fbG9hZCwgJXtfYmluZGlyfS8ke0RCWFl9X2xvYWQsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfTE9HX1ZFUklGWSwgJHtEQlhZfV9sb2dfdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fbG9nX3ZlcmlmeSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9QUklOVExPRywgJHtEQlhZfV9wcmludGxvZywgJXtfYmluZGlyfS8ke0RCWFl9X3ByaW50bG9nLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1JFQ09WRVIsICR7REJYWX1fcmVjb3ZlciwgJXtfYmluZGlyfS8ke0RCWFl9X3JlY292ZXIsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfUkVQTElDQVRFLCAke0RCWFl9X3JlcGxpY2F0ZSwgJXtfYmluZGlyfS8ke0RCWFl9X3JlcGxpY2F0ZSwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQlNRTCwgJHtEQlhZfXNxbCwgJXtfYmluZGlyfS8ke0RCWFl9c3FsLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1NRTF9DT0RFR0VOLCAke0RCWFl9X3NxbF9jb2RlZ2VuLCAle19iaW5kaXJ9LyR7REJYWX1fc3FsX2NvZGVnZW4sICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfU1RBVCwgJHtEQlhZfV9zdGF0LCAle19iaW5kaXJ9LyR7REJYWX1fc3RhdCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9UVU5FUiwgJHtEQlhZfV90dW5lciwgJXtfYmluZGlyfS8ke0RCWFl9X3R1bmVyLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1VQR1JBREUsICR7REJYWX1fdXBncmFkZSwgJXtfYmluZGlyfS8ke0RCWFl9X3VwZ3JhZGUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfVkVSSUZZLCAke0RCWFl9X3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X3ZlcmlmeSwgJE1ZUEFUSCkKKysKKyBBQ19BUkdfV0lUSChkYi1sYXJnZWZpbGUsIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZGItbGFyZ2VmaWxlXSwgW2J1aWxkIEJlcmtlbGV5LURCIHdpdGggTEFSR0VGSUxFIHN1cHBvcnRdKSkKKyBBQ19BUkdfV0lUSChkYi1tdXRleCwgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZGItbXV0ZXg9QVJHXSwgW2J1aWxkIEJlcmtlbGV5LURCIHdpdGggTVVURVggdHlwZSBBUkddKSkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYl9idWZmZXJfc21hbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjhlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0luIGNlcnRhaW4gY2FzZXMgd2l0aCBCZXJrbGV5REIgNS4zLnggd2UgYXJlIGdldHRpbmcgdGhlIGVycm9yOgorCitkYjMuYzoxNDQzOiBkYmN1cnNvci0+cGdldCgtMzA5OTkpOiBCREIwMDYzIERCX0JVRkZFUl9TTUFMTDogVXNlciBtZW1vcnkgdG9vIHNtYWxsIGZvciByZXR1cm4gdmFsdWUKKworU2VlIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L3JwbS8rYnVnLzkzNDQyMCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworSXQgYXBwZWFycyB0byBiZSBzb21lIHR5cGUgb2YgYSBidWcgaW4gdGhlIEJlcmtsZXlEQiA1LjMueC4gIEluIGFuIGF0dGVtcHQKK3RvIHdvcmthcm91bmQgdGhlIHByb2JsZW0sIHdoZW4gd2UgZW5jb3VudGVyIHRoaXMgc2l0dWF0aW9uIHdlIGF0dGVtcHQKK3RvIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgbW1hcCBidWZmZXIgdW50aWwgdGhlIGNhbGwgd29ya3MsIG9yIHdlCitlbmQgdXAgdHJ5aW5nIDEwIHRpbWVzLiAgVGhlIG5ldyBzaXplIGlzIGVpdGhlciB0aGUgdXBkYXRlZCB2cC0+c2l6ZQorZnJvbSB0aGUgZmFpbGVkIHBnZXQgY2FsbCwgb3IgdGhlIHByZXZpb3VzIHNpemUgKyAxMDI0LgorCitJZiBEQkkgZGVidWdnaW5nIGlzIGVuYWJsZWQsIGFkZGl0aW9uYWwgZGlhZ25vc3RpY3MgYXJlIHByaW50ZWQsIG90aGVyd2lzZQorYSBiYXNpYyByZXRyeSBhbmQgc3VjY2VzcyBtZXNzYWdlIGlzIGFkZGVkIHRvIHNob3cgdGhhdCB0aGUgZmFpbHVyZSB3YXMKK3Jlc29sdmVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKHdvcmthcm91bmQpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9ycG1kYi5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG1kYi5jCitAQCAtMjIxMiw4ICsyMjEyLDEyIEBAIHN0YXRpYyBpbnQgcnBtbWlHZXQoZGJpSW5kZXggZGJpLCBEQkMgKgorIAl2cC0+ZmxhZ3MgfD0gREJfREJUX1VTRVJNRU07CisgCXJjID0gZGJpR2V0KGRiaSwgZGJjdXJzb3IsIGtwLCB2cCwgZmxhZ3MpOworIAlpZiAocmMgPT0gREJfQlVGRkVSX1NNQUxMKSB7CisrCSAgICBpbnQgcmV0cnkgPSAwOworKwkgICAgc2l6ZV90IG9yaWdsZW4gPSB2cC0+c2l6ZTsKKyAJICAgIHNpemVfdCB1aGxlbiA9IHZwLT5zaXplOworLQkgICAgdm9pZCAqIHVoID0gbW1hcChOVUxMLCB1aGxlbiwgX3Byb3QsIF9mbGFncywgX2Zkbm8sIF9vZmYpOworKwkgICAgdm9pZCAqIHVoOworK3JldHJ5X2dldDoKKysJICAgIHVoID0gbW1hcChOVUxMLCB1aGxlbiwgX3Byb3QsIF9mbGFncywgX2Zkbm8sIF9vZmYpOworIAkgICAgaWYgKHVoID09IE5VTEwgfHwgdWggPT0gKHZvaWQgKiktMSkKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJICAgICI9PT4gbW1hcCglcFsldV0sIDB4JXgsIDB4JXgsICVkLCAweCV4KSBlcnJvciglZCk6ICVzXG4iLAorQEAgLTIyMzUsNiArMjIzOSwyNSBAQCBzdGF0aWMgaW50IHJwbW1pR2V0KGRiaUluZGV4IGRiaSwgREJDICoKKyAJCWlmIChtdW5tYXAodWgsIHVobGVuKSAhPSAwKQorIAkJICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IG11bm1hcCglcFsldV0pIGVycm9yKCVkKTogJXNcbiIsCisgICAgICAgICAgICAgICAgIAl1aCwgKHVuc2lnbmVkKXVobGVuLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKysJICAgICAgICAvKiBXZSB3YW50IHRvIGJlIHN1cmUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyB0byBhdm9pZCBhIGxvb3AhICovCisrCSAgICAgICAgaWYgKHJjID09IERCX0JVRkZFUl9TTUFMTCAmJiByZXRyeSA8IDEwKSB7CisrCQkgICAvKiBJZiB3ZSBnb3QgYSBsYXJnciB2cC1zaXplIGJhY2ssIHVzZSB0aGF0LCBvdGhlcndpc2UgaW5jcmVtZW50IHRoZSBzaXplIGJ5IDFrICovCisrCSAgICAgICAgICAgdWhsZW4gPSB2cC0+c2l6ZSA+IHVobGVuID8gdnAtPnNpemUgOiB1aGxlbiArIDEwMjQ7CisrCQkgICByZXRyeSsrOworKwkgICAgICAgICAgIGlmICgoZGJpKS0+ZGJpX2RlYnVnKQorKwkgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBEQl9CVUZGRVJfU01BTEwgb3JpZyByZXF1ZXN0ZWQgKCVkKSwgY29uZmlndXJlZCAoJWQpLCBmb3JjaW5nIGxhcmdlciBidWZmZXIgKCVkKSwgbmV3IHNpemUgKCVkKVxuIiwKKysJICAgICAgICAgICAgICAgICAgICBvcmlnbGVuLCB2cC0+dWxlbiwgdWhsZW4sIHZwLT5zaXplKTsKKysJICAgICAgICAgICBlbHNlCisrCSAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPT0+IHJldHJ5ICglZCkgZGIzY3BnZXQgKCVkKVxuIiwgcmV0cnksIHVobGVuKTsKKysJICAgICAgICAgICBnb3RvIHJldHJ5X2dldDsKKysJICAgICAgICB9CisrCSAgICB9CisrCSAgICBpZiAocmV0cnkpIHsKKysJICAgICAgICBpZiAoKGRiaSktPmRiaV9kZWJ1ZykKKysJICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBzdWNjZXNzIG9yaWcgcmVxdWVzdGVkICglZCksIGNvbmZpZ3VyZWQgYnVmZmVyICglZCksIGJ1ZmZlciAoJWQpLCBzaXplIGFmdGVyIGRiaUdldCAoJWQpXG4iLAorKwkJCW9yaWdsZW4sIHZwLT51bGVuLCB1aGxlbiwgdnAtPnNpemUpOworKwkgICAgICAgIGVsc2UKKysJICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBzdWNjZXNzXG4iKTsKKyAJICAgIH0KKyAJfQorICAgICB9IGVsc2UKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL2RiMy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL2RiMy5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi9kYjMuYworQEAgLTE1MDksNyArMTUwOSw3IEBAIGFzc2VydChkYiAhPSBOVUxMKTsKKyAjZW5kaWYKKyAgICAgfQorIAorLURCSURFQlVHKGRiaSwgKHN0ZGVyciwgIjwtLSAlcyglcCwlcCwlcCwlcCwlcCwweCV4KSByYyAlZCAlcyVzXG4iLCBfX0ZVTkNUSU9OX18sIGRiaSwgZGJjdXJzb3IsIGtleSwgcGtleSwgZGF0YSwgZmxhZ3MsIHJjLCBfREJDRkxBR1MoZmxhZ3MpLCBfS0VZREFUQShrZXksIHBrZXksIGRhdGEsIE5VTEwpKSk7CisrREJJREVCVUcoZGJpLCAoc3RkZXJyLCAiPC0tICVzKCVwLCVwLCVwLCVwLCVwLDB4JXgpIHJjICVkICVzJXNcbiIsIF9fRlVOQ1RJT05fXywgZGJpLCBkYmN1cnNvciwga2V5LCBwa2V5LCBkYXRhLCBmbGFncywgcmMsIF9EQkNGTEFHUyhmbGFncyksIF9LRVlEQVRBKGtleSwgcGtleSwgcmMgPT0gREJfQlVGRkVSX1NNQUxMID8gTlVMTCA6IGRhdGEsIE5VTEwpKSk7CisgICAgIHJldHVybiByYzsKKyB9CisgLypAPW11c3Rtb2RAKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI2ZTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0RlYnVnIHRoZSBwbGF0Zm9ybSBzY29yZSBnZW5lcmF0aW9uLi4uCisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTQ2NSw2ICs0NjUsOCBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCisgICAgIHJjID0gKHJwbVJDKSBycG1pb2JTbHVycChwbGF0Zm9ybSwgJmlvYik7CisgCisrICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gZmlsZSAlc1xuIiwgcGxhdGZvcm0pOworKworICAgICBpZiAocmMgfHwgaW9iID09IE5VTEwpIHsKKyAJcmMgPSBSUE1SQ19GQUlMOworIAlnb3RvIGV4aXQ7CitAQCAtNDg2LDYgKzQ4OCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJICAgIHdoaWxlICgtLXQgPiBwICYmIHhpc3NwYWNlKCp0KSkKKyAJCSp0ID0gJ1wwJzsKKyAJICAgIGlmICh0ID4gcCkgeworKwkJZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBtaXJlQXBwZW5kIFJFR0VYICVzXG4iLCBwKTsKKyAJCXh4ID0gbWlyZUFwcGVuZChSUE1NSVJFX1JFR0VYLCAwLCBwLCBOVUxMLCAmbWlfcmUsICZtaV9ucmUpOworIAkgICAgfQorIAkgICAgY29udGludWU7CitAQCAtNTAzLDYgKzUwNiwxMSBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCQlfZ251ID0gcnBtRXhwYW5kKCItIiwgY3ZvZy0+Z251LCBOVUxMKTsKKyAKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fZ251IiwgTlVMTCwgKF9nbnUgPyBfZ251IDogIiIpLCAtMSk7CisrCSAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIGFkZE1hY3JvICVzLSVzLSVzKCVzKVxuIiwKKysJICAgIAlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX2NwdX0iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fdmVuZG9yfSIsIE5VTEwpLAorKwkJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV9vc30iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fZ251fSIsIE5VTEwpKTsKKyAjZWxzZQorIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X2NwdSIsIE5VTEwsIGN2b2ctPmNwdSwgLTEpOworIAkgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X3ZlbmRvciIsIE5VTEwsIGN2b2ctPnZlbmRvciwgLTEpOworQEAgLTUxMCw2ICs1MTgsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgI2VuZGlmCisgCX0KKyAKKysJZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBtaXJlQXBwZW5kIFNUUkNNUCAlcyAtLSAiLCBwKTsKKyAjaWYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkgLyogU2tpcCB0aGUgZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGV4cGxpY2l0LXBsYXRmb3JtICovCisgCS8qIGRvIG5vdCB1c2UgdmVuZG9yIGFuZCBHTlUgYXR0cmlidXRpb24gKi8KK0BAIC01MTksNiArNTI4LDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAkJKGN2b2cgJiYgKmN2b2ctPmdudSA/ICItIiA6IE5VTEwpLAorIAkJKGN2b2cgPyBjdm9nLT5nbnUgOiBOVUxMKSwgTlVMTCk7CisgI2VuZGlmCisrCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHApOworIAl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9TVFJDTVAsIDAsIHAsIE5VTEwsICZtaV9yZSwgJm1pX25yZSk7CisgCXAgPSBfZnJlZShwKTsKKyAjZW5kaWYKK0BAIC02ODgsOSArNjk4LDEyIEBAIGludCBycG1QbGF0Zm9ybVNjb3JlKGNvbnN0IGNoYXIgKiBwbGF0Zm8KKyAKKyAgICAgaWYgKChtaXJlID0gKG1pUkUpIG1pX3JlKSAhPSBOVUxMKQorICAgICBmb3IgKGkgPSAwOyBpIDwgbWlfbnJlOyBpKyspIHsKKy0JaWYgKG1pcmVSZWdleGVjKG1pcmUgKyBpLCBwbGF0Zm9ybSwgMCkgPj0gMCkKKysJaWYgKG1pcmVSZWdleGVjKG1pcmUgKyBpLCBwbGF0Zm9ybSwgMCkgPj0gMCkgeworKwkgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybVNjb3JlICVzICglZClcbiIsIHBsYXRmb3JtLCBpICsgMSk7CisgCSAgICByZXR1cm4gKGkgKyAxKTsKKysJfQorICAgICB9CisrICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm1TY29yZSAlcyAoJWQpXG4iLCBwbGF0Zm9ybSwgMCk7CisgICAgIHJldHVybiAwOworIH0KKyAvKkA9b25seXRyYW5zQCovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWY4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDcwZDg4MTg3M2I0NDNjOWJhZDUwMmRiOTY2NTU5NTQ1NWQ0ZjBhYzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgOCBKdWwgMjAxNCAwNzo0MToxMCArMDgwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuYWM6IGRpc2FibGUgLVduby1vdmVycmlkZS1pbml0CisKK0ZpeGVkIHJwbS1uYXRpdmUuZG9fY29uZmlndXJlIGVycm9yIG9uIENlbnRPUyA1Lng6CisKK2NjMTogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW92ZXJyaWRlLWluaXQiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYWRlZmZlMC4uNjc0NmI0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTYzLDcgKzE2Myw3IEBAIEFDX0FSR19FTkFCTEUoYnVpbGQtd2FybmluZ3MsCisgIyBYWFggZ2NjLTQuMiBvbiBNYWMgT1MgWCBoYXNuJ3QKKyAjICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUiCisgIyBYWFggcnBtaW8vc2V0LmMgbmVlZHMgdGhpcworLSAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLW92ZXJyaWRlLWluaXQiCisrIyAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLW92ZXJyaWRlLWluaXQiCisgICAgICAgICBlbGlmIHRlc3QgIi5gJENDIC1WIDI+JjEgfCBncmVwICdTdW4gQydgIiAhPSAuOyB0aGVuCisgICAgICAgICAgICAgZG5sICMgU3VuIFN0dWRpbyAodXN1YWxseSAiY2MiKQorICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtdiIKKy0tCisxLjguMi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maWxlY2xhc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZGI2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK3JwbWZjLmM6ICBBbHdheXMgZ2VuZXJhdGUgcGVyLWZpbGUgaW5mb3JtYXRpb24KKworRXZlbiB3aGVuIHRoZSBwZXItZmlsZSBkZXBlbmRlbmN5IGdlbmVyYXRlIGlzIGRpc2FibGVkLCB3ZSB3YW50IHRvIGdlbmVyYXRlCitwZXIgZmlsZSBjbGFzc2lmaWNhdGlvbiBhbmQgb3RoZXIgYXNzb2NpYXRlZCBkYXRhLgorCitOb3RlOiB0aGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuICBFdmVudHVhbGx5IHdlIHdpbGwgd2FudCB0byBoYXZlIGEgd2F5Cit0byBzZWVkIHBlci1maWxlIGRlcGVuZGVuY3kgYW5kIG90aGVyIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEKK3BhY2thZ2UgZnJvbSBwcmV2aW91c2x5IGRldGVybWluZWQgaW5mb3JtYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1mYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1mYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtZmMuYworQEAgLTE3MzQsNyArMTczNCw2IEBAIHJwbVJDIHJwbWZjR2VuZXJhdGVEZXBlbmRzKHZvaWQgKiBfc3BlYywKKyAJLyogLi4uIHRoZW4gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIHVzaW5nICV7X19maW5kX3JlcXVpcmVzfSBldCBhbC4gKi8KKyAJcmMgPSBycG1mY0dlbmVyYXRlRGVwZW5kc0hlbHBlcihzcGVjLCBwa2csIGZpKTsKKyAJcHJpbnREZXBzKHBrZy0+aGVhZGVyKTsKKy0JcmV0dXJuIHJjOworICAgICB9CisgCisgICAgIC8qIEdlbmVyYXRlIHNjcmlwdGxldCBEZXBlbmRlbmNpZXMuICovCitAQCAtMTc2Miw4ICsxNzYxLDggQEAgcnBtUkMgcnBtZmNHZW5lcmF0ZURlcGVuZHModm9pZCAqIF9zcGVjLAorICAgICBhdlthY10gPSBOVUxMOworIAorICAgICBmYyA9IHJwbWZjTmV3KCk7CistICAgIGZjLT5za2lwUHJvdiA9ICFwa2ctPmF1dG9Qcm92OworLSAgICBmYy0+c2tpcFJlcSA9ICFwa2ctPmF1dG9SZXE7CisrICAgIGZjLT5za2lwUHJvdiA9ICFwa2ctPmF1dG9Qcm92IHx8ICFpbnRlcm5hbGRlcHM7CisrICAgIGZjLT5za2lwUmVxID0gIXBrZy0+YXV0b1JlcSB8fCAhaW50ZXJuYWxkZXBzOworICAgICBmYy0+dHJhY2tlZCA9IDA7CisgCisgICAgIHsJY29uc3QgY2hhciAqIGJ1aWxkUm9vdFVSTDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YTBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK09jY2FzaW9uYWxseSB0aGUgY3AgLXAgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIHJldHVybiBjb2RlLiAgVGhpcyB3aWxsIGNhdXNlCit0aGUgc3lzdGVtIGFib3J0IHRoZSBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9ycG1kYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS5vcmlnL3JwbWRiL01ha2VmaWxlLmFtCisrKysgcnBtL3JwbWRiL01ha2VmaWxlLmFtCitAQCAtMjM0LDExICsyMzQsMTQgQEAgbGNvdi1yZXBvcnQ6CisgI2xjb3YtdXBsb2FkOiBsY292CisgIwlyc3luYyAtcnZ6IC1lIHNzaCAtLWRlbGV0ZSBsY292LyogPz8/CisgCisrJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZTogJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKysJQGlmIHRlc3QgIi4kKGJ1aWxkZGlyKSIgIT0gIi4kKHNyY2RpcikiOyB0aGVuIFwKKysJCWNwIC1mcCAkKHNyY2RpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSBcCisrCQkgICAgICAkKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlIDsgXAorKwkgZmkKKysKKyBsb2dpb19CVUlMVCA9IGxvZ2lvX2F1dG8uYyBsb2dpb19hdXRvcC5jIGxvZ2lvX2F1dG8uaCBsb2dpb190ZW1wbGF0ZQorLSQobG9naW9fQlVJTFQpOglsb2dpby5hd2sgbG9naW8uc3JjIGxvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKy0JQHRlc3QgLWUgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSB8fCBcCistCQljcCAtcCAkKHNyY2RpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSBcCistCQkgICAgICAkKGJ1aWxkZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlCisrJChsb2dpb19CVUlMVCk6CWxvZ2lvLmF3ayBsb2dpby5zcmMgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorIAlAcm0gLWYgJChsb2dpb19CVUlMVCkKKyAJQCQoQVdLKSAtZiAkKHNyY2RpcikvbG9naW8uYXdrIFwKKyAJCS12IGhlYWRlcl9maWxlPWxvZ2lvX2F1dG8uaCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGViMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBuZWVkIHRvIHNhbml0eSBjaGVjayB0aGF0IHRoZSBubGluayBzaXplIGFuZCBvdXIgbGlua3NMZWZ0IGNvdW50ZXIKK2RvIG1hdGNoLiBJZiBhbiBycG0gaXMgYmFkbHkgY29uc3RydWN0ZWQgd2l0aCBpZGVudGljYWwgaW5vZGUgdmFsdWVzCitmb3IgbXVsdGlwbGUgaGFyZGxpbmtlZCBmaWxlcywgc3VjaCBhbiBycG0gd2lsbCBvdGhlcndpc2UgYWNjZXNzIG1lbW9yeQorb3V0IG9mIGFycmF5IGJvdW5kcyBhbmQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNyYXNoZXMuCisKK1RoZSBmaXggaXMgdG8gYWRkIGluIHRoZSBzYW5pdHkgY2hlY2sgYW5kIGV4aXQgaWYgYmFkIGNpcmN1bXN0YW5jZXMKK2FyZSBmb3VuZC4gV2UgbmVlZCB0byBmaXggdGhlIGNhbGxlciB0byBjaGVjayB0aGUgcmV0dXJuIGNvZGUgdG9vLgorCitSUCAyMDE0LzYvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9mc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZnNtLmMKKysrKyBycG0tNS40LjE0L2xpYi9mc20uYworQEAgLTQ5NSw2ICs0OTUsMTEgQEAgc3RhdGljIGludCBzYXZlSGFyZExpbmsoLypAc3BlY2lhbEAqLyAvKgorICAgICB9CisgCisgICAgIGlmIChmc20tPmdvYWwgPT0gSU9TTV9QS0dCVUlMRCkgLS1mc20tPmxpLT5saW5rc0xlZnQ7CisrICAgIGlmIChmc20tPmxpLT5saW5rc0xlZnQgPiBzdC0+c3RfbmxpbmspIHsKKysJcnBtbG9nKFJQTUxPR19FUlIsIF8oIkNvcnJ1cHRlZCBoYXJkbGlua3MgZm91bmQgKGNvdW50ICVkIGRvZXMgbm90IG1hdGNoICVkKSwgZXhpdGluZy5cbiIpLCBmc20tPmxpLT5saW5rc0xlZnQsIHN0LT5zdF9ubGluayk7CisrCXJldHVybiAtMTsKKysgICAgfQorKworICAgICBmc20tPmxpLT5maWxleFtmc20tPmxpLT5saW5rc0xlZnRdID0gZnNtLT5peDsKKyAgICAgLypALW9ic2VydmVydHJhbnMgLWRlcGVuZGVudHRyYW5zQCovCisgICAgIGZzbS0+bGktPm5zdWZmaXhbZnNtLT5saS0+bGlua3NMZWZ0XSA9IGZzbS0+bnN1ZmZpeDsKK0BAIC0xODc4LDggKzE4ODMsMTMgQEAgaWYgKCEoZnNtR2V0RmkoZnNtKS0+bWFwZmxhZ3MgJiBJT1NNX1BBWQorIAlmc20tPnBvc3Rwb25lID0gaW9zbUZpbGVBY3Rpb25Ta2lwcGVkKGZzbS0+YWN0aW9uKTsKKyAJaWYgKGZzbS0+Z29hbCA9PSBJT1NNX1BLR0lOU1RBTEwgfHwgZnNtLT5nb2FsID09IElPU01fUEtHQlVJTEQpIHsKKyAJICAgIC8qQC1ldmFsb3JkZXJAKi8gLyogRklYOiBzYXZlSGFyZExpbmsgY2FuIG1vZGlmeSBmc20gKi8KKy0JICAgIGlmIChTX0lTUkVHKHN0LT5zdF9tb2RlKSAmJiBzdC0+c3RfbmxpbmsgPiAxKQorKwkgICAgaWYgKFNfSVNSRUcoc3QtPnN0X21vZGUpICYmIHN0LT5zdF9ubGluayA+IDEpIHsKKyAJCWZzbS0+cG9zdHBvbmUgPSBzYXZlSGFyZExpbmsoZnNtKTsKKysJCWlmIChmc20tPnBvc3Rwb25lIDwgMCkgeworKwkJICAgIHJjID0gUlBNUkNfRkFJTDsKKysJCSAgICBicmVhazsKKysJCX0KKysJICAgIH0KKyAJICAgIC8qQD1ldmFsb3JkZXJAKi8KKyAJfQorIGlmIChmc21HZXRGaShmc20pLT5tYXBmbGFncyAmIElPU01fUEFZTE9BRF9MSVNUKSBmc20tPnBvc3Rwb25lID0gMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxpYnNxbC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZTQxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0R1cmluZyBpbnN0YWxsYXRpb24sIHRoZSBsaWJ0b29sIHJlbGluayBhdHRlbXB0cyB0byBsaW5rIHRvIC1scnBtLi4uCitUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGhhc24ndCBiZWVuIGluc3RhbGxlZCB5ZXQhICBTbyBzbWFsbCBjaGFuZ2UgY2F1c2VzCit0aGUgbGlidG9vbCB0byBpbnN0ZWFkIHVzZSB0aGUgYnVpbGQgdmVyc2lvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvbGliL01ha2VmaWxlLmFtCitAQCAtMTIwLDYgKzEyMCw5IEBAIGxpYnJwbS5sYTogJChsaWJycG1fbGFfT0JKRUNUUykgJChsaWJycG0KKyAjbGlic3FsX2xhX1NPVVJDRVMJPSBsaWJzcWwuYworICNsaWJzcWxfbGFfTElCQURECT0gbGlicnBtLmxhICQoUlBNREJfTERBRERfQ09NTU9OKQorIAorKyMgcGtnbGliIGxpYnJhcmllcyBuZWVkcyB0byBoYXZlIHVzcmxpYiBsaWJyYXJpZXMgYWxyZWFkeSBpbnN0YWxsZWQhCisraW5zdGFsbC1wa2dsaWJMVExJQlJBUklFUzogaW5zdGFsbC11c3JsaWJMVExJQlJBUklFUworKworIGluc3RhbGwtZGF0YS1ob29rOgorIGlmICFFTkFCTEVfQlVJTERfTEFGSUxFUworIAktZm9yIGwgaW4gJCh1c3JsaWJfTFRMSUJSQVJJRVMpOyBkbyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1M2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sb2ctYXV0by1ybS5wYXRjaApAQCAtMCwwICsxLDE1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL0RCX0NPTkZJRy5pbgorKysrIHJwbS01LjQuMTQvcnBtZGIvREJfQ09ORklHLmluCitAQCAtNCw2ICs0LDcgQEAgc2V0X2RhdGFfZGlyIC4KKyBzZXRfY3JlYXRlX2RpciAuCisgc2V0X2xnX2RpciAuL2xvZworIHNldF90bXBfZGlyIC4vdG1wCisrc2V0X2ZsYWdzIGRiX2xvZ19hdXRvcmVtb3ZlIG9uCisgCisgIyAtLSB0aHJlYWRfY291bnQgbXVzdCBiZSA+PSA4Cisgc2V0X3RocmVhZF9jb3VudCA2NApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGE2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRW5hYmxlIHBsYXRmb3JtIHRhZyBtYXRjaGluZyB3b3JrYXJvdW5kIGluIE9FLgorCitXaGVuIGluc3RhbGxpbmcgc29tZSBMU0IgcGFja2FnZXMgdGhlICdwbGF0Zm9ybScgZmllbGQgaW4gdGhlIHBhY2thZ2UKK2FwcGVhcnMgdG8gYmUgaW52YWxpZC4gIEluc3RlYWQgb2YgcmVseWluZyBzb2xlbHkgb24gdGhlIHBsYXRmb3JtIGNvbXBhcmlzb24KK3dlIGFsc28gd2FudCB0byBnZW5lcmF0ZSBhIHBlcmNlaXZlZCBwbGF0Zm9ybSBiYXNlZCBvbiB0aGUgdmFsaWQgcnBtIGNvbnRlbnRzCitvZiBhcmNoIGFuZCBvcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZGVwZW5kcy5jCisrKysgcnBtLTUuNC4xNC9saWIvZGVwZW5kcy5jCitAQCAtNTk1LDcgKzU5NSw3IEBAIGludCBycG10c0FkZEluc3RhbGxFbGVtZW50KHJwbXRzIHRzLCBIZWEKKyAJICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItdW5rbm93bi0iLCBvcywgTlVMTCk7CisgCisgCXJjID0gcnBtUGxhdGZvcm1TY29yZShwbGF0Zm9ybSwgcGxhdHBhdCwgbnBsYXRwYXQpOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorIAkvKgorIAkgKiBJZiBubyBtYXRjaCBvbiBwbGF0Zm9ybSB0YWcsIHdlJ2xsIHRyeSBhZ2FpbiB3aXRoIGFyY2ggdGFnCisgCSAqIGluIGNhc2UgcGxhdGZvcm0gdGFnIGlzIGluY29uc2lzdGVudCB3aXRoIGl0LCB3aGljaCBpcyB0aGUgY2FzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLWZpeC1wcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWI0OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK0x1YSAncHJpbnQnIHN0YXRlbWVudCBpcyBub3Qgd29ya2luZyBwcm9wZXJseSBpbnNpZGUgb2YgUlBNIDUKKworVGhlIHByaW50IHN0YXRlbWVudCBzaG91bGQgY2FwdHVyZSB0aGUgb3V0cHV0IGFuZCBzZW5kIGl0IHRvIHRoZSBzY3JpcHQKK3Byb2Nlc3NpbmcgZW5naW5lLCBhbmQgbm90IGRpc3BsYXkgaXQgZGlyZWN0bHkgdG8gdGhlIHNjcmVlbi4KKworVGhpcyBwYXRjaCBpcyBmcm9tOiBodHRwOi8vcnBtNS5vcmcvY3ZzL3BhdGNoc2V0P2NuPTE3NjcxCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQgKHBhdGNoc2V0IDE3NjcxIGZyb20gcnBtNS5vcmcpCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvQ0hBTkdFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9DSEFOR0VTCisrKysgcnBtLTUuNC4xNC9DSEFOR0VTCitAQCAtMSwzICsxLDQgQEAKKysgICAgLSBqYmo6IGx1YTogZml4OiByZXN1cnJlY3Qgb3V0cHV0IGNhcHR1cmUgd2l0aCBsdWEtNS4yLgorICAgICAtIGpiajogdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyayBIYXRsZSkuCisgCisgNS40LjEzIC0+IDUuNC4xNDoKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbWx1YS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL3JwbWx1YS5jCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG1sdWEuYworQEAgLTE3NSw3ICsxNzUsNyBAQCBycG1sdWEgcnBtbHVhTmV3KHZvaWQpCisgICAgIH07CisgICAgIC8qQD1yZWFkb25seXRyYW5zID1udWxsYXNzaWduIEAqLworICAgICAvKkBvYnNlcnZlckAqLyAvKkB1bmNoZWNrZWRAKi8KKy0gICAgY29uc3QgbHVhTF9SZWcgKmxpYiA9IGx1YWxpYnM7CisrICAgIGNvbnN0IGx1YUxfUmVnICpsaWI7CisgICAgIGNoYXIgKnBhdGhfYnVmOworICAgICBjaGFyICpwYXRoX25leHQ7CisgICAgIGNoYXIgKnBhdGg7CitAQCAtMTkwLDMxICsxOTAsMzQgQEAgcnBtbHVhIHJwbWx1YU5ldyh2b2lkKQorIAorICAgICBsdWFMX29wZW5saWJzKEwpOworIAorLSAgICBmb3IgKDsgbGliLT5uYW1lOyBsaWIrKykgeworKyAgICBmb3IgKGxpYiA9IGx1YWxpYnM7IGxpYi0+bmFtZTsgbGliKyspIHsKKyAJbHVhTF9yZXF1aXJlZihMLCBsaWItPm5hbWUsIGxpYi0+ZnVuYywgMSk7CisrCWx1YV9wb3AoTCwgMSk7CisgICAgIH0KKyAKKyAgICAgewljb25zdCBjaGFyICogX2x1YV9wYXRoID0gcnBtR2V0UGF0aChycG1sdWFQYXRoLCBOVUxMKTsKKyAgCWlmIChfbHVhX3BhdGggIT0gTlVMTCkgeworKyNpZiBkZWZpbmVkKExVQV9HTE9CQUxTSU5ERVgpCisgCSAgICBsdWFfcHVzaGxpdGVyYWwoTCwgIkxVQV9QQVRIIik7CisgCSAgICBsdWFfcHVzaHN0cmluZyhMLCBfbHVhX3BhdGgpOworKwkgICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKysjZWxzZQorKwkgICAgbHVhX3B1c2hzdHJpbmcoTCwgX2x1YV9wYXRoKTsKKysJICAgIGx1YV9zZXRnbG9iYWwoTCwgIkxVQV9QQVRIIik7CisrI2VuZGlmCisgCSAgICBfbHVhX3BhdGggPSBfZnJlZShfbHVhX3BhdGgpOworIAl9CisgICAgIH0KKyAKKyAjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorLSAgICBsdWFfcmF3c2V0KEwsIExVQV9HTE9CQUxTSU5ERVgpOworLSNlbHNlCistICAgIGx1YV9wdXNoZ2xvYmFsdGFibGUoTCk7CistI2VuZGlmCisgICAgIGx1YV9wdXNobGl0ZXJhbChMLCAicHJpbnQiKTsKKyAgICAgbHVhX3B1c2hjZnVuY3Rpb24oTCwgcnBtX3ByaW50KTsKKy0KKy0jaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorICAgICBsdWFfcmF3c2V0KEwsIExVQV9HTE9CQUxTSU5ERVgpOworICNlbHNlCistICAgIGx1YV9wdXNoZ2xvYmFsdGFibGUoTCk7CisrICAgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsIHJwbV9wcmludCk7CisrICAgIGx1YV9zZXRnbG9iYWwoTCwgInByaW50Iik7CisgI2VuZGlmCisrCisgICAgIHJwbWx1YVNldERhdGEobHVhLCAibHVhIiwgbHVhKTsKKyAKKyAgICAgLyogbG9hZCBhbGwgc3RhbmRhcmQgUlBNIEx1YSBzY3JpcHQgZmlsZXMgKi8KK0BAIC0zNTEsNiArMzU0LDkgQEAgdm9pZCBycG1sdWFTZXRWYXIocnBtbHVhIF9sdWEsIHJwbWx1YXYgdgorICNpZiBkZWZpbmVkKExVQV9HTE9CQUxTSU5ERVgpCisgCWlmIChsdWEtPnB1c2hzaXplID09IDApCisgCSAgICBsdWFfcHVzaHZhbHVlKEwsIExVQV9HTE9CQUxTSU5ERVgpOworKyNlbHNlCisrCWlmIChsdWEtPnB1c2hzaXplID09IDApCisrCSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworICNlbmRpZgorIAlpZiAocHVzaHZhcihMLCB2YXItPmtleVR5cGUsICZ2YXItPmtleSkgIT0gLTEpIHsKKyAJICAgIGlmIChwdXNodmFyKEwsIHZhci0+dmFsdWVUeXBlLCAmdmFyLT52YWx1ZSkgIT0gLTEpCitAQCAtMTAzOSwxNCArMTA0NSwxNSBAQCBzdGF0aWMgaW50IHJwbV9wcmludCAobHVhX1N0YXRlICpMKQorICAgICBsdWFfZ2V0Z2xvYmFsKEwsICJ0b3N0cmluZyIpOworICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworIAljb25zdCBjaGFyICpzOworKwlzaXplX3QgbDsKKyAJbHVhX3B1c2h2YWx1ZShMLCAtMSk7ICAvKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgKi8KKyAJbHVhX3B1c2h2YWx1ZShMLCBpKTsgICAvKiB2YWx1ZSB0byBwcmludCAqLworIAlsdWFfY2FsbChMLCAxLCAxKTsKKy0JcyA9IGx1YV90b3N0cmluZyhMLCAtMSk7ICAvKiBnZXQgcmVzdWx0ICovCisrCXMgPSBsdWFfdG9sc3RyaW5nKEwsIC0xLCAmbCk7ICAvKiBnZXQgcmVzdWx0ICovCisgCWlmIChzID09IE5VTEwpCisgCSAgICByZXR1cm4gbHVhTF9lcnJvcihMLCAiYHRvc3RyaW5nJyBtdXN0IHJldHVybiBhIHN0cmluZyB0byBgcHJpbnQnIik7CisgCWlmIChsdWEtPnN0b3JlcHJpbnQpIHsKKy0JICAgIHNpemVfdCBzbCA9IGx1YV9yYXdsZW4oTCwgLTEpOworKwkgICAgc2l6ZV90IHNsID0gbDsKKyAJICAgIGlmICgoc2l6ZV90KShsdWEtPnByaW50YnVmdXNlZCtzbCsxKSA+IGx1YS0+cHJpbnRidWZzaXplKSB7CisgCQlsdWEtPnByaW50YnVmc2l6ZSArPSBzbCs1MTI7CisgCQlsdWEtPnByaW50YnVmID0gKGNoYXIgKikgeHJlYWxsb2MobHVhLT5wcmludGJ1ZiwgbHVhLT5wcmludGJ1ZnNpemUpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5MzBkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorQWRkIHN1cHBvcnQgZm9yIGNyb3NzIGNvbXBpbGluZyBsdWEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTIxLDYgKzEyMSw5IEBAIEFDX1BST0dfWUFDQworIAorIEFDX1BBVEhfUFJPRyhBUywgYXMsIGFzKQorIAorK0NDX0ZPUl9CVUlMRD0ke0NDX0ZPUl9CVUlMRC1cJChDQyl9CisrQUNfU1VCU1QoQ0NfRk9SX0JVSUxEKQorKworIGRubCAjIEdDQyBzcGVjaWZpY3MKKyBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIEFDX0FSR19FTkFCTEUoYnVpbGQtcGljLAorSW5kZXg6IHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvbHVhL01ha2VmaWxlLmFtCitAQCAtNDEsNyArNDEsNyBAQCBycG1sdWFjX0xEQUREID0gbGlibHVhLmxhCisgCisgIyAtLS0gYmluMmMgZG9lc24ndCBuZWVkIGFueXRoaW5nIGJ1dCBhIGNvbXBpbGVyCisgYmluMmMkKEVYRUVYVCk6ICBiaW4yYy5jCistCSQoQ0MpIC1vICRAICQ8CisrCSQoQ0NfRk9SX0JVSUxEKSAtbyAkQCAkPAorIAorIGxpYmx1YV9sYV9TT1VSQ0VTID0KKyBsaWJsdWFfbGFfQ0ZMQUdTID0gQFdJVEhfTFVBX1NVQkRJUl9ERUZACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTBjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaApAQCAtMCwwICsxLDI3IEBACitkaXNhYmxlIGV4dGVybmFsIGtleSBzZXJ2ZXIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1doZW4gUlBNIGV4cGVyaWVuY2VzIGEgc2lnbmVkIHBhY2thZ2UsIHdpdGggYSBzaWduYXR1cmUgdGhhdCBpdCBkb2VzIE5PVCBrbm93LgorQnkgZGVmYXVsdCBpdCB3aWxsIHNlbmQgdGhlIC1maW5nZXJwcmludC0gKGFuZCBvbmx5IHRoZSAxNiBkaWdpdCBmaW5nZXJwcmludCkgdG8KK2FuIGV4dGVybmFsIEhLUCBzZXJ2ZXIsIHRyeWluZyB0byBnZXQgdGhlIGtleSBkb3duLgorCitUaGlzIGlzIHByb2JhYmx5IG5vdCBhIHJlYXNvbmFibGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIHN5c3RlbSB0byBkbywgaW5zdGVhZAoraXQgc2hvdWxkIHNpbXBseSBmYWlsIHRoZSBrZXkgbG9va3VwLiAgSWYgc29tZW9uZSB3YW50cyB0byBlbmFibGUgdGhlIEhLUCBzZXJ2ZXIKK2l0J3MgZWFzeSBlbm91Z2ggdG8gZG8gYnkgZW5hYmxpbmcgdGhlIG5lY2Vzc2FyeSBtYWNyb3MuCisKK1NpZ25lZC1vZmYtYnk6IHl6aHUxIDx5YW5qdW4uemh1QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0gYS9tYWNyb3MvbWFjcm9zLmluCisrKysgYi9tYWNyb3MvbWFjcm9zLmluCitAQCAtNTQ2LDggKzU0Niw4IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICMgSG9yb3dpdHogS2V5IFByb3RvY29sIHNlcnZlciBjb25maWd1cmF0aW9uCisgIworICMlX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9rZXlzLm4zbnBxLm5ldAorLSVfaGtwX2tleXNlcnZlciAgICAgICAgIGhrcDovL3Bvb2wuc2tzLWtleXNlcnZlcnMubmV0CistJV9oa3Bfa2V5c2VydmVyX3F1ZXJ5ICAgJXtfaGtwX2tleXNlcnZlcn0vcGtzL2xvb2t1cD9vcD1nZXQmc2VhcmNoPQorKyMlX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9wb29sLnNrcy1rZXlzZXJ2ZXJzLm5ldAorKyMlX2hrcF9rZXlzZXJ2ZXJfcXVlcnkgICAle19oa3Bfa2V5c2VydmVyfS9wa3MvbG9va3VwP29wPWdldCZzZWFyY2g9CisgCisgCisgJV9uc3NkYl9wYXRoCS9ldGMvcGtpL25zc2RiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FiMmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACittYWNyb3MvbWFjcm9zLmluOiBSZXZlcnQgc2V0dGluZ3MgdG8gdGhlIHNhbWUgYXMgUlBNIDUuNC4wCisKK0VuYWJsZSBhIHJlYXNvbmFibGUgc2V0IG9mIHJwbWRlcHMgZGVwZW5kZW5jeSBoZWxwZXIgbWFjcm9zLiAgVGhlc2Ugc2V0cword2VyZSB1c2VkIGJ5IFJQTSA1LjQuMC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbWFjcm9zL21hY3Jvcy5pbgorKysrIHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTEwMjIsNyArMTAyMiw3IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorIAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gcnBtYnVpbGQgbWFjcm9zLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLnJwbWJ1aWxkfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5ycG1idWlsZH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBjbWFrZSguLi4pIGNvbmZpZ3VyYXRpb24KK0BAIC0xMDM4LDE1ICsxMDM4LDE1IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHBlcmwoLi4uKSBjb25maWd1cmF0aW9uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wZXJsfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3Blcmx9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcHl0aG9uKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3B5dGhvbn0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9weXRob259CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcGhwKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BocH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9waHB9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgamF2YSguLi4pIGNvbmZpZ3VyYXRpb24uCitAQCAtMTA1NCwxMSArMTA1NCwxMSBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBsaWJ0b29sKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL2xpYnRvb2x9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvbGlidG9vbH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBwa2djb25maWcoLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGtnY29uZmlnfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BrZ2NvbmZpZ30KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBtb25vKC4uLikgY29uZmlndXJhdGlvbi4KK0BAIC0xMDcwLDcgKzEwNzAsNyBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0Y2woLi4uKSBjb25maWd1cmF0aW9uLgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvdGNsfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3RjbH0KKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0eXBlbGliKC4uLikgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLWxvb3Btc2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2ZWQyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2xpYi9vcmRlci5jOiBNYWtlIHRoZSBkZXBlbmRlbmN5IGxvb3AgbWVzc2FnZXMgaW50byBkZWJ1ZyBtc2dzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9vcmRlci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9vcmRlci5jCisrKysgcnBtLTUuNC4xNC9saWIvb3JkZXIuYworQEAgLTIxNzUsNyArMjE3NSw3IEBAIHJlc2NhbjoKKyAJCWNvbnN0IGNoYXIgKiBkcDsKKyAJCXJwbWxvZ0x2bCBtc2dsdmwgPSAoYW5hY29uZGEgfHwgKHJwbXRzREZsYWdzKHRzKSAmIFJQTURFUFNfRkxBR19ERVBMT09QUykpCisgCQkJPyBSUE1MT0dfV0FSTklORyA6IFJQTUxPR19FUlI7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgLyogbG9vcC1kZXRlY3Rpb24tb3B0aW9uYWwtbG9nbGV2ZWwgKi8KKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIGxvb3AtZGV0ZWN0aW9uLW9wdGlvbmFsLWxvZ2xldmVsICovCisgCQkvLyBSZXBvcnQgbG9vcHMgYXMgZGVidWctbGV2ZWwgbWVzc2FnZSBieSBkZWZhdWx0ICg3ID0gUlBNTE9HX0RFQlVHKSwgb3ZlcnJpZGFibGUKKyAJCW1zZ2x2bCA9IHJwbUV4cGFuZE51bWVyaWMoIiV7P19sb29wX2RldGVjdGlvbl9sb2dsZXZlbH0lez8hX2xvb3BfZGV0ZWN0aW9uX2xvZ2xldmVsOjd9Iik7CisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tcGVybC11cnBtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE4MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitEaXNhYmxlIHBlcmwtVVJQTSBzdXBwb3J0CisKK1RoaXMgY2F1c2VzIGEgY29uZmlndXJlIGZhaWx1cmUgd2hlbiBwZXJsLVVSUE0gaXMgbm90IHVzZWQuCisKK3wgY29uZmlndXJlLmFjOjExNTk6IHJlcXVpcmVkIGZpbGUgYHBlcmwtVVJQTS9NYWtlZmlsZS5QTC5pbicgbm90IGZvdW5kCit8IGNvbmZpZ3VyZS5hYzoxMTU5OiByZXF1aXJlZCBmaWxlIGBwZXJsLVVSUE0vTWFrZWZpbGUuaW4nIG5vdCBmb3VuZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0xMTg2LDMwICsxMTg2LDEwIEBAIEFDX1NVQlNUKFdJVEhfUEVSTF9TVUJESVIpCisgQUNfU1VCU1QoV0lUSF9QRVJMX1NVQlBBQ0tBR0UpCisgQUNfU1VCU1QoV0lUSF9QRVJMX0xJQlMpCisgCistZG5sICMgb3B0aW9uYWwgUGVybC1VUlBNIGxhbmd1YWdlIGJpbmRpbmdzCisrZG5sICMgZGlzYWJsZSBQZXJsLVVSUE0gbGFuZ3VhZ2UgYmluZGluZ3MKKyBXSVRIX1BFUkxfVVJQTV9TVUJESVI9IiIKKyBXSVRIX1BFUkxfVVJQTV9TVUJQQUNLQUdFPTAKKyBXSVRIX1BFUkxfVVJQTV9MSUJTPSIiCistaWYgdGVzdCAiLiRXSVRIX1BUSFJFQURTIiA9IC55ZXM7IHRoZW4KKy0gICAgV0lUSF9QRVJMX1VSUE1fTElCUz0iJExJQlMiCistZmkKKy1BQ19BUkdfV0lUSChwZXJsLXVycG0sIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGVybC11cnBtXSwgW2J1aWxkIHdpdGggUGVybCBVUlBNIGxhbmd1YWdlIGJpbmRpbmdzXSksIFsKKy0gICAgaWYgdGVzdCAiLiR3aXRodmFsIiAhPSAubm87IHRoZW4KKy0JUEVSTF9VUlBNX0lOU1RBTExESVJTPSIiCistCSAgIGlmIHRlc3QgIiR3aXRodmFsIiA9PSAidmVuZG9yIjsgdGhlbgorLQkJICAgIFBFUkxfVVJQTV9JTlNUQUxMRElSUz0iJ0lOU1RBTExESVJTJwk9PiAndmVuZG9yJywiCistCSAgICBmaQorLQkgICAgaWYgdGVzdCAiJHdpdGh2YWwiID09ICJzaXRlIjsgdGhlbgorLQkJICAgIFBFUkxfVVJQTV9JTlNUQUxMRElSUz0iJ0lOU1RBTExESVJTJyAgICAgPT4gJ3NpdGUnLCIKKy0JICAgIGZpCistCSAgICBBQ19ERUZJTkVfVU5RVU9URUQoW1BFUkxfVVJQTV9JTlNUQUxMRElSU10sIFskUEVSTF9VUlBNX0lOU1RBTExESVJTXSwgW1BlcmwgaW5zdGFsbCBkaXJlY3RvcnkgKHZlbmRvci9zaXRlKV0pCistCSAgICBBQ19TVUJTVChQRVJMX1VSUE1fSU5TVEFMTERJUlMpCistICAgICAgICBXSVRIX1BFUkxfVVJQTV9TVUJESVI9cGVybC1VUlBNCistICAgICAgICBXSVRIX1BFUkxfVVJQTV9TVUJQQUNLQUdFPTEKKy0gICAgICAgIEFDX0NPTkZJR19GSUxFUyhbcGVybC1VUlBNL01ha2VmaWxlLlBMXSkKKy0gICAgICAgIEFDX0NPTkZJR19GSUxFUyhbcGVybC1VUlBNL01ha2VmaWxlXSkKKy0gICAgZmkKKy1dKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9VUlBNX1NVQkRJUikKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9TVUJQQUNLQUdFKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9VUlBNX0xJQlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vcGVuZGItYmVmb3JlLXZlcmlmeXNjcmlwdC10by1hdm9pZC1udWxsLXBvaW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDU4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitycG06IG9wZW5kYiBiZWZvcmUgcnBtdmVyaWZ5c2NyaXB0IHRvIGF2b2lkIG51bGwgcG9pbnQgaW5wdXQKKworSWYgdGhlIGNvbW1hbmQgaXMgInJwbSAtViIgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgKGhlYWRlcklzRW50cnkoaCwgUlBNVEFHX1ZFUklGWVNDUklQVCkgCit8fCBoZWFkZXJJc0VudHJ5KGgsIFJQTVRBR19TQU5JVFlDSEVDSykpIGxvY2F0ZWQgaW4gL2xpYi92ZXJpZnkuYyBpcyB0cnVlLCBpdCB3aWxsIGNhbGwKK3JwbXBzbVN0YWdlIGZ1bmN0aW9uKHJwbVZlcmlmeVNjcmlwdC0+cnBtcHNtU2NyaXB0U3RhZ2UtPnJwbXBzbVN0YWdlKSBhbmQgb2NjdXIgc2VnbWVudAorZmF1bHQgYmVjYXVzZSBvZiBudWxsIHBvaW50KHJwbXRzR2V0UmRiKHRzKSA9PSBOVUxMIGFuZCBycG10c0dldFJkYih0cyktPmRiX3R4bikuCitTbyB3ZSBvcGVuIHJwbWRiIHRvIGF2b2lkIGJhZCBpbnB1dCB3aGVuIGZpbmQgaGVhZGVySXNFbnRyeSB0cnVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhpeGlvbmcgQ2hpIDx6aGl4aW9uZy5jaGlAd2luZHJpdmVyLmNvbT4KK0luZGV4OiBycG0tNS40LjE0L2xpYi92ZXJpZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvdmVyaWZ5LmMJMjAxNS0wNy0yMiAyMjowOTo1OS45OTI4OTUzNTUgKzA4MDAKKysrKyBycG0tNS40LjE0L2xpYi92ZXJpZnkuYwkyMDE1LTA4LTEzIDEwOjIwOjMzLjc1MjE3NzkwNiArMDgwMAorQEAgLTYxMyw2ICs2MTMsOCBAQAorIAl7CisgCSAgICBGRF90IGZkbyA9IGZkRHVwKFNURE9VVF9GSUxFTk8pOworIAorKwkgICAgcnBtdHNPcGVuREIodHMsIE9fUkRPTkxZKTsgICAgICAgICAgICAvKk9wZW4gdGhlIERCIHRvIGF2b2lkIG51bGwgcG9pbnQgaW5wdXQgaW4gZnVuY3Rpb24gcnBtcHNtU3RhZ2UoKSovCisrCisgCSAgICByYyA9IHJwbWZpU2V0SGVhZGVyKGZpLCBoKTsKKyAJICAgIGlmICgocmMgPSBycG1WZXJpZnlTY3JpcHQocXZhLCB0cywgZmksIGZkbykpICE9IDApCisgCQllYyArPSByYzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1vc3NwLXV1aWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MWFiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0ZpeCBpbnRlZ3JhdGlvbiBvZiBvc3NwLXV1aWQKKworV2UgbmVlZCB0byBhdm9pZCBpbmNsdWRpbmcgdGhlIHV0aWwtbGludXggdXVpZCBsaWJyYXJ5LCBpbnN0ZWFkCit3ZSBuZWVkIG9zc3AtdXVpZC4gIFRoZXJlIGlzIGEgcmVsYXRlZCBoYWNrIGluIGRvX2NvbmZpZ3VyZSB0bworbWFrZSBzdXJlIHRoYXQgd2UgdXNlIHRoZSByaWdodCAucGMgZmlsZSBhcyB3ZWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0xOTUxLDcgKzE5NTEsNyBAQCBncmVwIC12ICdkZWZpbmUgSEFWRV9VTklTVERfSCcgY29uZmRlZnMuCisgZXNhYworIFJQTV9DSEVDS19MSUIoCisgICAgIFtPU1NQIHV1aWRdLCBbdXVpZF0sCistICAgIFtvc3NwLXV1aWQgdXVpZF0sIFt1dWlkX2ltcG9ydF0sIFt1dWlkLmhdLAorKyAgICBbb3NzcC11dWlkXSwgW3V1aWRfaW1wb3J0XSwgW3V1aWQuaF0sCisgICAgIFtubyxleHRlcm5hbDpub25lXSwgW10sCisgICAgIFsgZG5sICMgZW5hYmxlIE9TU1AgdXVpZCBuYXRpdmUgQVBJIHN1cHBvcnQgZm9yIGVtYmVkZGVkIEx1YQorICAgICAgIGlmIHRlc3QgIi4kV0lUSF9MVUEiID0gLnllczsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVlMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIHRoZSBhYmlsaXR5IHRvIHF1ZXJ5IHRoZSBwYWNrYWdlb3JpZ2luCisKK1dyaXR0ZW4gYnkgamJqIGF0IHJwbTUub3JnCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9oZHJmbXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9oZHJmbXQuYworKysrIHJwbS01LjQuMTQvcnBtZGIvaGRyZm10LmMKK0BAIC0yNDA5LDggKzI0MDksMTAgQEAgc3RhdGljIGludCBwa2dvcmlnaW5UYWcoSGVhZGVyIGgsIEhFX3QgaAorICAgICBpbnQgcmMgPSAxOworIAorICAgICBoZS0+dGFnID0gUlBNVEFHX1BBQ0tBR0VPUklHSU47CistICAgIGlmICghaGVhZGVyR2V0KGgsIGhlLCBIRUFERVJHRVRfTk9FWFRFTlNJT04pCistICAgICAmJiAob3JpZ2luID0gaGVhZGVyR2V0T3JpZ2luKGgpKSAhPSBOVUxMKQorKyAgICAvKiBYWFggdHdvIHNvdXJjZXMgZm9yIHRhZyBkYXRhOiB3aGF0IHNlYXJjaCBwcmVjZWRlbmNlPyAqLworKyAgICBpZiAoaGVhZGVyR2V0KGgsIGhlLCBIRUFERVJHRVRfTk9FWFRFTlNJT04pKQorKwlyYyA9IDA7CisrICAgIGVsc2UgaWYgKChvcmlnaW4gPSBoZWFkZXJHZXRPcmlnaW4oaCkpICE9IE5VTEwpCisgICAgIHsKKyAJaGUtPnQgPSBSUE1fU1RSSU5HX1RZUEU7CisgCWhlLT5wLnN0ciA9IHhzdHJkdXAob3JpZ2luKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZDAyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoCkBAIC0wLDAgKzEsMTQ2IEBACitJZiB3ZSBydW4gYnVpbGRzIG9uIGEgZmlsZXN5c3RlbSB3aXRoIDY0IGJpdCBpbm9kZXMgbGlrZSBYRlMsIHdlIG5lZWQgdG8KK21hcCB0aGUgaW5vZGUgbnVtYmVycyB0byBzb21ldGhpbmcgMzIgYml0IHNpbmNlIHRoZSBjcGlvIGhlYWRlciBvbmx5IGFsbG93cworZm9yIDMyIGJpdCBpbm9kZSB2YWx1ZXMuIElmIHdlIGRvbid0IGRvIHRoaXM6CisKKyNkZWZpbmUgU0VUX05VTV9GSUVMRChwaHlzLCB2YWwsIHNwYWNlKSBcCisgICAgICAgIHNwcmludGYoc3BhY2UsICIlOC44bHgiLCAodW5zaWduZWQgbG9uZykgKHZhbCkpOyBcCisgICAgICAgIG1lbWNweShwaHlzLCBzcGFjZSwgOCkKKworZnJvbSBjcGlvLmMgd2lsbCBwcmludCBsYXJnZXIgdGhhdCA4IGNoYXJhY3RlciB2YWx1ZXMgYW5kIHRoZW4gdHJ1bmNhdGUgdGhlIAorTFNCcy4gVGhpcyBnZW5lcmF0ZXMgY3BpbyBmaWxlcyB3aGVyZSBoYXJkbGlua2VkIGZpbGVzIG1heSBoYXZlIHRoZSBzYW1lCitpbm9kZSBudW1iZXIuIFRoZSByZXN1bHRpbmcgcnBtcyBhcmUgdGhlbiBjb3JydXB0ZWQuCisKK1RoZXJlIGlzIGEgc2VwYXJhdGUgcGF0Y2ggZm9yIHRoZSBjcmFzaCB0aGUgaWRlbnRpY2FsIGlub2RlIG51bWJlcnMgY2F1c2VzCit3aGVuIGV4dHJhY3RpbmcgdGhlIHJwbS4KKworUGF0Y2ggdGFrZW4gZnJvbSBodHRwOi8vZ2l0LnBsZC1saW51eC5vcmcvP3A9cGFja2FnZXMvcnBtLmdpdDthPWNvbW1pdGRpZmY7aD0xMDUyNmMyM2FhYzYwYjdiNjM2ZTRjOTM4NjI4ODdkYmVmOGU4ZjE1CisKK1JQIDIwMTQvNi8xMAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwbS01LjQuMTQvYnVpbGQvZmlsZXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9idWlsZC9maWxlcy5jCisrKysgcnBtLTUuNC4xNC9idWlsZC9maWxlcy5jCitAQCAtMTMyOCw2ICsxMzI4LDI2IEBAIHN0YXRpYyBycG11aW50MzJfdCBnZXREaWdlc3RBbGdvKEhlYWRlcgorICAgICByZXR1cm4gZGFsZ287CisgfQorIAorK3N0YXRpYyBpbnQgaXNIYXJkTGluayhGaWxlTGlzdFJlYyBmbHAsIEZpbGVMaXN0UmVjIHRscCkKKyt7CisrICAgIHJldHVybiAoKFNfSVNSRUcoZmxwLT5mbF9tb2RlKSAmJiBTX0lTUkVHKHRscC0+ZmxfbW9kZSkpICYmCisrICAgICAgICAgICAgKChmbHAtPmZsX25saW5rID4gMSkgJiYgKGZscC0+ZmxfbmxpbmsgPT0gdGxwLT5mbF9ubGluaykpICYmCisrICAgICAgICAgICAgKGZscC0+ZmxfaW5vID09IHRscC0+ZmxfaW5vKSAmJgorKyAgICAgICAgICAgIChmbHAtPmZsX2RldiA9PSB0bHAtPmZsX2RldikpOworK30KKysKKytzdGF0aWMgaW50IHNlZW5IYXJkTGluayhGaWxlTGlzdCBmbCwgRmlsZUxpc3RSZWMgZmxwLCBpbm9fdCAqZmlsZWlkKQorK3sKKysgICAgRmlsZUxpc3RSZWMgaWxwOworKyAgICBmb3IgKGlscCA9IGZsLT5maWxlTGlzdDsgaWxwIDwgZmxwOyBpbHArKykgeworKyAgICAgICAgaWYgKGlzSGFyZExpbmsoZmxwLCBpbHApKSB7CisrICAgICAgICAgICAgKmZpbGVpZCA9IGlscCAtIGZsLT5maWxlTGlzdDsKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisgLyoqCisgICogQWRkIGZpbGUgZW50cmllcyB0byBoZWFkZXIuCisgICogQHRvZG8gU2hvdWxkIGRpcmVjdG9yaWVzIGhhdmUgJWRvYy8lY29uZmlnIGF0dHJpYnV0ZXM/ICgjMTQ1MzEpCitAQCAtMTM3NCw2ICsxMzk0LDcgQEAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwkvKiBYWFggdmFsZworIAorICAgICBmb3IgKGkgPSAwLCBmbHAgPSBmbC0+ZmlsZUxpc3Q7IGkgPCBmbC0+ZmlsZUxpc3RSZWNzVXNlZDsgaSsrLCBmbHArKykgeworIAljb25zdCBjaGFyICpzOworKwlpbm9fdCBmaWxlaWQgPSBmbHAgLSBmbC0+ZmlsZUxpc3Q7CisgCisgIAkvKiBNZXJnZSBkdXBsaWNhdGUgZW50cmllcy4gKi8KKyAJd2hpbGUgKGkgPCAoZmwtPmZpbGVMaXN0UmVjc1VzZWQgLSAxKSAmJgorQEAgLTE0MzYsNiArMTQ1NywxMyBAQCBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CS8qIFhYWCB2YWxnCisgCS8qIExlYXZlIHJvb20gZm9yIGJvdGggZGlybmFtZSBhbmQgYmFzZW5hbWUgTlVMJ3MgKi8KKyAJZHBhdGhsZW4gKz0gKHN0cmxlbihmbHAtPmRpc2tVUkwpICsgMik7CisgCisrCS8qIEV4Y2x1ZGVzIGFuZCBkdXBlcyBoYXZlIGJlZW4gZmlsdGVyZWQgb3V0IGJ5IG5vdy4gKi8KKysJaWYgKFNfSVNSRUcoZmxwLT5mbF9tb2RlKSkgeworKwkgICAgaWYgKGZscC0+ZmxfbmxpbmsgPT0gMSB8fCAhc2VlbkhhcmRMaW5rKGZsLCBmbHAsICZmaWxlaWQpKSB7CisrCQlmbC0+dG90YWxGaWxlU2l6ZSArPSBmbHAtPmZsX3NpemU7CisrCSAgICB9CisrCX0KKysKKyAJLyoKKyAJICogTWFrZSB0aGUgaGVhZGVyLCB0aGUgT0xERklMRU5BTUVTIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBhIAorIAkgKiBjb21wcmVzc2VkIGZpbGUgbGlzdCB3cml0ZSBiZWZvcmUgd2Ugd3JpdGUgdGhlIGFjdHVhbCBwYWNrYWdlIHRvCitAQCAtMTUxOCw3ICsxNTQ2LDExIEBAIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsJLyogWFhYIHZhbGcKKyAKKyAJLyogWFhYIEhhc2ggaW5zdGVhZCBvZiA2NGItPjMyYiB0cnVuY2F0ZSB0byBwcmV2ZW50IGFsaWFzaW5nLiAqLworIAl7ICAgaW5vX3QgX2lubyA9IGZscC0+ZmxfaW5vOworKwkvKiBkb24ndCB1c2UgaGFzaCBoZXJlLCBhcyBoYXNoIGNvbGxpc2lvbnMgd2hpY2ggaGFwcGVuIG9uIGxhcmdlIHBhY2thZ2VzCisrCSAgIGNhdXNlIGJ1cyBlcnJvcnMgaW4gcnBtYnVpbGQKKyAJICAgIHVpMzIgPSBoYXNoRnVuY3Rpb25TdHJpbmcoMCwgJl9pbm8sIHNpemVvZihfaW5vKSk7CisrCSovCisrCSAgICB1aTMyID0gZmlsZWlkICsgMTsKKyAJfQorIAloZS0+dGFnID0gUlBNVEFHX0ZJTEVJTk9ERVM7CisgCWhlLT50ID0gUlBNX1VJTlQzMl9UWVBFOworQEAgLTE3NTEsMzkgKzE3ODMsNiBAQCBpZiAoX3JwbWJ1aWxkRmxhZ3MgJiA0KSB7CisgCQlJT1NNX01BUF9UWVBFIHwgSU9TTV9NQVBfTU9ERSB8IElPU01fTUFQX1VJRCB8IElPU01fTUFQX0dJRDsKKyAJaWYgKGlzU3JjKQorIAkgICAgZmktPmZtYXBmbGFnc1tpXSB8PSBJT1NNX0ZPTExPV19TWU1MSU5LUzsKKy0KKy0JaWYgKFNfSVNSRUcoZmxwLT5mbF9tb2RlKSkgeworLQkgICAgaW50IGJpbmdvID0gMTsKKy0JICAgIC8qIEhhcmQgbGlua3MgbmVlZCBiZSB0YWxsaWVkIG9ubHkgb25jZS4gKi8KKy0JICAgIGlmIChmbHAtPmZsX25saW5rID4gMSkgeworLQkJRmlsZUxpc3RSZWMgamxwID0gZmxwICsgMTsKKy0JCWludCBqID0gaSArIDE7CistCQlmb3IgKDsgKHVuc2lnbmVkKWogPCBmaS0+ZmM7IGorKywgamxwKyspIHsKKy0JCSAgICAvKiBmb2xsb3cgb3V0ZXIgbG9vcCBsb2dpYyAqLworLQkJICAgIHdoaWxlICgoKGpscCAtIGZsLT5maWxlTGlzdCkgPCAoZmwtPmZpbGVMaXN0UmVjc1VzZWQgLSAxKSkgJiYKKy0JCQkgICAgIXN0cmNtcChqbHAtPmZpbGVVUkwsIGpscFsxXS5maWxlVVJMKSkKKy0JCQlqbHArKzsKKy0JCSAgICBpZiAoamxwLT5mbGFncyAmIFJQTUZJTEVfRVhDTFVERSkgeworLQkJCWotLTsKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIH0KKy0JCSAgICBpZiAoamxwLT5mbGFncyAmIFJQTUZJTEVfR0hPU1QpCistCQkgICAgICAgIC8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKCFTX0lTUkVHKGpscC0+ZmxfbW9kZSkpCistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICBpZiAoZmxwLT5mbF9ubGluayAhPSBqbHAtPmZsX25saW5rKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfaW5vICE9IGpscC0+ZmxfaW5vKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfZGV2ICE9IGpscC0+ZmxfZGV2KQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgYmluZ28gPSAwOwkvKiBkb24ndCB0YWxseSBoYXJkbGluayB5ZXQuICovCistCQkgICAgLypAaW5uZXJicmVha0AqLyBicmVhazsKKy0JCX0KKy0JICAgIH0KKy0JICAgIGlmIChiaW5nbykKKy0JCWZsLT50b3RhbEZpbGVTaXplICs9IGZscC0+Zmxfc2l6ZTsKKy0JfQorICAgICB9CisgCisgICAgIHVpMzIgPSBmbC0+dG90YWxGaWxlU2l6ZTsKK0luZGV4OiBycG0tNS40LjE0L2xpYi9mc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZnNtLmMKKysrKyBycG0tNS40LjE0L2xpYi9mc20uYworQEAgLTkwNCw2ICs5MDQsNyBAQCBpbnQgZnNtTWFwQXR0cnMoSU9TTV90IGZzbSkKKyAKKyAgICAgaWYgKGZpICYmIGkgPj0gMCAmJiBpIDwgKGludCkgZmktPmZjKSB7CisgCW1vZGVfdCBwZXJtcyA9IChTX0lTRElSKHN0LT5zdF9tb2RlKSA/IGZpLT5kcGVybXMgOiBmaS0+ZnBlcm1zKTsKKysJaW5vX3QgZmluYWxJbm9kZSA9IChmaS0+Zmlub2RlcyA/IChpbm9fdClmaS0+Zmlub2Rlc1tpXSA6IDApOworIAltb2RlX3QgZmluYWxNb2RlID0gKGZpLT5mbW9kZXMgPyAobW9kZV90KWZpLT5mbW9kZXNbaV0gOiBwZXJtcyk7CisgCWRldl90IGZpbmFsUmRldiA9IChkZXZfdCkoZmktPmZyZGV2cyA/IGZpLT5mcmRldnNbaV0gOiAwKTsKKyAJcnBtdWludDMyX3QgZmluYWxNdGltZSA9IChmaS0+Zm10aW1lcyA/IGZpLT5mbXRpbWVzW2ldIDogMCk7CitAQCAtOTQzLDYgKzk0NCw3IEBAIGludCBmc21NYXBBdHRycyhJT1NNX3QgZnNtKQorIAkgICAgaWYgKChTX0lTQ0hSKHN0LT5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0LT5zdF9tb2RlKSkKKyAJICAgICYmIHN0LT5zdF9ubGluayA9PSAwKQorIAkJc3QtPnN0X25saW5rID0gMTsKKysJICAgIHN0LT5zdF9pbm8gPSBmaW5hbElub2RlOworIAkgICAgc3QtPnN0X3JkZXYgPSBmaW5hbFJkZXY7CisgCSAgICBzdC0+c3RfbXRpbWUgPSBmaW5hbE10aW1lOworIAl9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wa2djb25maWdkZXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTgyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitwa2djb25maWdkZXBzLnNoOiBDaGFuZ2UgdG8gcmVzdHJpY3RpbmcgcGtnY29uZmlnIHRvIHRoZSBsb2NhbCBkaXJlY3RvcnkKKworVXNpbmcgUEtHX0NPTkZJR19QQVRIIHdpbGwgYWxsb3cgcGtnLWNvbmZpZyB0byBmYWxsIGJhY2sgdG8gdGhlIHN5c3RlbSBwYXRocywKK3dlIGRvbid0IHdhbnQgdGhpcyBhcyBpdCBtYXkgbGVhZCB0byBpbmFjY3VyYXRlIHJlc3VsdHMgaW4gc29tZSBjb3JuZXIgY2FzZXMuCisKK1BLR19DT05GSUdfTElCRElSIHdpbGwgZW5zdXJlIHBrZy1jb25maWcgc3RheXMgd2l0aGluIHRoZSBpbnN0YWxsIGRpcmVjdG9yeS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3NjcmlwdHMvcGtnY29uZmlnZGVwcy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKKysrKyBycG0tNS40LjE0L3NjcmlwdHMvcGtnY29uZmlnZGVwcy5zaAorQEAgLTE4LDggKzE4LDggQEAgY2FzZSAkMSBpbgorICAgICAqLnBjKQorIAkjIFF1ZXJ5IHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhY2thZ2UuCisgCURJUj1gZGlybmFtZSAke2ZpbGVuYW1lfWAKKy0JUEtHX0NPTkZJR19QQVRIPSIkRElSOiRESVIvLi4vLi4vc2hhcmUvcGtnY29uZmlnIgorLQlleHBvcnQgUEtHX0NPTkZJR19QQVRICisrCVBLR19DT05GSUdfTElCRElSPSIkRElSOiRESVIvLi4vLi4vc2hhcmUvcGtnY29uZmlnIgorKwlleHBvcnQgUEtHX0NPTkZJR19MSUJESVIKKyAJJHBrZ2NvbmZpZyAtLXByaW50LXByb3ZpZGVzICIkZmlsZW5hbWUiIDI+IC9kZXYvbnVsbCB8IHdoaWxlIHJlYWQgbiByIHYgOyBkbworIAkgICAgWyAtbiAiJG4iIF0gfHwgY29udGludWUKKyAJICAgICMgV2UgaGF2ZSBhIGRlcGVuZGVuY3kuICBNYWtlIGEgbm90ZSB0aGF0IHdlIG5lZWQgdGhlIHBrZ2NvbmZpZworQEAgLTQyLDggKzQyLDggQEAgY2FzZSAkMSBpbgorIAlbIC1uICIkb25lc2hvdCIgXSAmJiBlY2hvICIkb25lc2hvdCI7IG9uZXNob3Q9IiIKKyAJIyBRdWVyeSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlLgorIAlESVI9YGRpcm5hbWUgJHtmaWxlbmFtZX1gCistCVBLR19DT05GSUdfUEFUSD0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKy0JZXhwb3J0IFBLR19DT05GSUdfUEFUSAorKwlQS0dfQ09ORklHX0xJQkRJUj0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKysJZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgCSRwa2djb25maWcgLS1wcmludC1yZXF1aXJlcyAiJGZpbGVuYW1lIiAyPiAvZGV2L251bGwgfCB3aGlsZSByZWFkIG4gciB2IDsgZG8KKyAJICAgIFsgLW4gIiRuIiBdIHx8IGNvbnRpbnVlCisgCSAgICBpZiAgWyAtbiAiJHIiIF0gJiYgWyAtbiAiJHYiIF07IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZhNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLWZpbGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Rvbid0IGFkZCB0aGUgZmlyc3QgbGluZSBvZiAvZXRjL3JwbS9wbGF0Zm9ybSB0byB0aGUgbGlzdCBvZiBwYXR0ZXJucwordG8gbWF0Y2ggd2hlbiBjb21wdXRpbmcgYW4gYXJjaCBzY29yZSwgdXNlIGl0IGp1c3QgZm9yIGdldHRpbmcKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBwbGF0Zm9ybSAoY3B1L3ZlbmRvci9vcykuIEZpeGVzICMzODY0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC01MTAsNiArNTEwLDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl9CisgCisrI2lmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIFNraXAgdGhlIGV4cGxpY2l0LXBsYXRmb3JtICovCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworIAkvKiBkbyBub3QgdXNlIHZlbmRvciBhbmQgR05VIGF0dHJpYnV0aW9uICovCisgCXAgPSBycG1FeHBhbmQoIiV7X2hvc3RfY3B1fS0le19ob3N0X29zfSIsIE5VTEwpOworQEAgLTUyMCw3ICs1MjEsOCBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgI2VuZGlmCisgCXh4ID0gbWlyZUFwcGVuZChSUE1NSVJFX1NUUkNNUCwgMCwgcCwgTlVMTCwgJm1pX3JlLCAmbWlfbnJlKTsKKyAJcCA9IF9mcmVlKHApOworLQkKKysjZW5kaWYKKysKKyAJaW5pdF9wbGF0Zm9ybSsrOworICAgICB9CisgICAgIHJjID0gKGluaXRfcGxhdGZvcm0gPyBSUE1SQ19PSyA6IFJQTVJDX0ZBSUwpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZmQwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0ucGF0Y2gKQEAgLTAsMCArMSwxMzcgQEAKK0ZpeCB1cCBwbGF0Zm9ybSBhbmQgcmVsYXRlZCBzeXNpbmZvIGZpbGUgbG9hZGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZW5zdXJlcyB0aGF0IFJQTSBrbm93cyB0aGUgY29tcGF0aWJsZSBzZXQgb2YgcGFja2FnZSB0eXBlcyBhdCBhbGwgdGltZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvZGVwZW5kcy5jCisrKysgcnBtLTUuNC4xNC9saWIvZGVwZW5kcy5jCitAQCAtMjUwLDcgKzI1MCw3IEBAIHN0YXRpYyBpbnQgcnBtdHNBZGRVcGdyYWRlcyhycG10cyB0cywgcnAKKyAJICAgIGhlLT5wLnB0ciA9IF9mcmVlKGhlLT5wLnB0cik7CisgCX0KKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgJiYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAJLyoKKyAJICogSWYgd2UncmUgY2FwYWJsZSBvZiBpbnN0YWxsaW5nIG11bHRpcGxlIGNvbG9ycworIAkgKiBidXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBwYWNrYWdlcyBhcmUgd2hpdGUgKDApLCB3ZQorQEAgLTUwNyw3ICs1MDcsNyBAQCBhc3NlcnQobGFzdHggPj0gMCAmJiBsYXN0eCA8IHRzLT5vcmRlckNvCisgICAgIHJldHVybiAwOworIH0KKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgJiYgIWRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAvKiBJcyAiY29tcGF0IiBjb21wYXRpYmxlIHcvIGFyY2g/ICovCisgaW50IF9pc0NvbXBhdGlibGVBcmNoKGNvbnN0IGNoYXIgKiBhcmNoLCBjb25zdCBjaGFyICogY29tcGF0KQorIHsKK0BAIC02NjMsNyArNjYzLDcgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAKKyAJICAgIGlmIChhcmNoID09IE5VTEwgfHwgKHBhcmNoID0gcnBtdGVBKHApKSA9PSBOVUxMKQorIAkJY29udGludWU7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgCSAgICAvKiBYWFggaGFja2VyeSBmb3IgYWxpYXMgbWF0Y2hpbmcuICovCisgCSAgICBpZiAoIV9pc0NvbXBhdGlibGVBcmNoKGFyY2gsIHBhcmNoKSkKKyAJCWNvbnRpbnVlOworQEAgLTgyOSw2ICs4MjksMTIgQEAgaW50IHJwbXRzQWRkRXJhc2VFbGVtZW50KHJwbXRzIHRzLCBIZWFkZQorICAgICByZXR1cm4gcmM7CisgfQorIAorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisrI2RlZmluZSBfRVRDX1JQTV9TWVNJTkZPICAgICAgICAiJXtfZXRjcnBtfS9zeXNpbmZvIgorKyNlbHNlCisrI2RlZmluZSBfRVRDX1JQTV9TWVNJTkZPICAgICAgICBTWVNDT05GSUdESVIgIi9zeXNpbmZvIgorKyNlbmRpZgorKworIC8qQG9ubHlAKi8gLypAbnVsbEAqLyAvKkB1bmNoZWNrZWRAKi8KKyBzdGF0aWMgY2hhciAqc3lzaW5mb19wYXRoID0gTlVMTDsKKyAKK0BAIC0xMzExLDcgKzEzMTcsNyBAQCByZXRyeToKKyAJc3lzaW5mb19wYXRoID0gcnBtRXhwYW5kKCIlez9fcnBtZHNfc3lzaW5mb19wYXRofSIsIE5VTEwpOworIAlpZiAoIShzeXNpbmZvX3BhdGggIT0gTlVMTCAmJiAqc3lzaW5mb19wYXRoID09ICcvJykpIHsKKyAJICAgIHN5c2luZm9fcGF0aCA9IF9mcmVlKHN5c2luZm9fcGF0aCk7CistCSAgICBzeXNpbmZvX3BhdGggPSB4c3RyZHVwKFNZU0NPTkZJR0RJUiAiL3N5c2luZm8iKTsKKysJICAgIHN5c2luZm9fcGF0aCA9IHJwbUV4cGFuZChfRVRDX1JQTV9TWVNJTkZPLCBOVUxMKTsKKyAJfQorICAgICB9CisgCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtZHMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbWRzLmMKK0BAIC0xNzU5LDcgKzE3NTksNyBAQCBpbnQgcnBtZHNTeXNpbmZvKHJwbVBSQ08gUFJDTywgY29uc3QgY2hhCisgLypALW9ic2VydmVydHJhbnMgQCovCisgCSAgICBfc3lzaW5mb19wYXRoID0gX2ZyZWUoX3N5c2luZm9fcGF0aCk7CisgLypAPW9ic2VydmVydHJhbnMgQCovCistCSAgICBfc3lzaW5mb19wYXRoID0geHN0cmR1cChfRVRDX1JQTV9TWVNJTkZPKTsKKysJICAgIF9zeXNpbmZvX3BhdGggPSBycG1FeHBhbmQoX0VUQ19SUE1fU1lTSU5GTywgTlVMTCk7CisgCX0KKyAgICAgfQorIC8qQD1tb2RvYnNlcnZlckAqLworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtMzgsNyArMzgsMTMgQEAKKyBzdGF0aWMgY29uc3QgY2hhciAqIGNvbmZpZ1RhcmdldCA9IE5VTEw7CisgCisgLypAb2JzZXJ2ZXJAKi8gLypAdW5jaGVja2VkQCovCistc3RhdGljIGNvbnN0IGNoYXIgKiBwbGF0Zm9ybSA9IFNZU0NPTkZJR0RJUiAiL3BsYXRmb3JtIjsKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKysjZGVmaW5lIF9FVENfUlBNX1BMQVRGT1JNICAgICAgICAiJXtfZXRjcnBtfS9wbGF0Zm9ybSIKKysjZWxzZQorKyNkZWZpbmUgX0VUQ19SUE1fUExBVEZPUk0gICAgICAgIFNZU0NPTkZJR0RJUiAiL3BsYXRmb3JtIgorKyNlbmRpZgorKworK3N0YXRpYyBjb25zdCBjaGFyICogX3BsYXRmb3JtID0gTlVMTDsKKyAKKyAvKkBvbmx5QCovIC8qQHJlbG51bGxAKi8gLypAdW5jaGVja2VkQCovCisgdm9pZCAqIHBsYXRwYXQgPSBOVUxMOworQEAgLTY5NCwxNiArNzAwLDE3IEBAIHN0YXRpYyB2b2lkIGRlZmF1bHRNYWNoaW5lKC8qQG91dEAqLyBjb24KKyAgICAgaW50IHJjOworIAorICAgICB3aGlsZSAoIWdvdERlZmF1bHRzKSB7CistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCistCWNvbnN0IGNoYXIgKiBfcGxhdGZvcm0gPSBycG1HZXRQYXRoKF9fZXRjcnBtLCAiL3BsYXRmb3JtIiwgTlVMTCk7CistI2Vsc2UKKy0JY29uc3QgY2hhciAqIF9wbGF0Zm9ybSA9IHBsYXRmb3JtOworLSNlbmRpZgorKwlpZiAoX3BsYXRmb3JtID09IE5VTEwpIHsKKysJICAgIF9wbGF0Zm9ybSA9IHJwbUV4cGFuZCgiJXs/X3JwbXJjX3BsYXRmb3JtX3BhdGh9IiwgTlVMTCk7CisrCSAgICAvKiBYWFggbWF5IG5lZWQgdG8gdmFsaWRhdGUgcGF0aCBleGlzdGVuY2Ugc29tZXdoZW4uICovCisrCSAgICBpZiAoIShfcGxhdGZvcm0gIT0gTlVMTCAmJiAqX3BsYXRmb3JtID09ICcvJykpIHsKKysJCV9wbGF0Zm9ybSA9IF9mcmVlKF9wbGF0Zm9ybSk7CisrCQlfcGxhdGZvcm0gPSBycG1FeHBhbmQoX0VUQ19SUE1fUExBVEZPUk0sIE5VTEwpOworKwkgICAgfQorKwl9CisgCUNWT0dfdCBjdm9nID0gTlVMTDsKKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGxhcmdlci11dHNuYW1lICovCisgCWNvbnN0IGNoYXIgKmNwOworLSNlbmRpZgorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogbGFyZ2VyLXV0c25hbWUgKi8KKyAJLyogdXRzbmFtZSBmaWVsZHMgb24gc29tZSBwbGF0Zm9ybXMgKGxpa2UgSFAtVVgpIGFyZSB2ZXJ5IHNtYWxsCisgCSAgIChqdXN0IGFib3V0IDggY2hhcmFjdGVycykuIFRoaXMgaXMgdG9vIHNtYWxsIGZvciBPcGVuUEtHLCBzbyBjaGVhdCEgKi8KKyAJcmMgPSB1bmFtZSgmdW5fcmVhbCk7CitAQCAtNzgwLDkgKzc4Nyw3IEBAIHN0YXRpYyB2b2lkIGRlZmF1bHRNYWNoaW5lKC8qQG91dEAqLyBjb24KKyAJaWYgKGNwICE9IE5VTEwgJiYgY3AgIT0gX3BsYXRmb3JtKQorIAkgICAgY3AgPSBfZnJlZShjcCk7CisgI2VuZGlmCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisgCV9wbGF0Zm9ybSA9IF9mcmVlKF9wbGF0Zm9ybSk7CistI2VuZGlmCisgCisgCWlmIChjb25maWdUYXJnZXQgJiYgIXBhcnNlQ1ZPRyhjb25maWdUYXJnZXQsICZjdm9nKSAmJiBjdm9nICE9IE5VTEwpIHsKKyAJICAgIGdvdERlZmF1bHRzID0gMTsKK0BAIC0xMTAxLDYgKzExMDYsOCBAQCBpbnQgcnBtUmVhZENvbmZpZ0ZpbGVzKC8qQHVudXNlZEAqLyBjb25zCisgCisgI2lmZGVmIFBSRU1BQ1JPRklMRVMKKyAgICAgaWYgKHJwbVJlYWRSQyhQUkVNQUNST0ZJTEVTKSkgcmV0dXJuIC0xOworKyNlbHNlCisrICAgIGlmIChycG1SZWFkUkMoTlVMTCkpIHJldHVybiAtMTsKKyAjZW5kaWYKKyAKKyAgICAgLyogUmVzZXQgdW1hc2sgdG8gaXRzIGRlZmF1bHQgdW1hc2soMikgdmFsdWUuICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ1NGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorRml4IHVwIHBsYXRmb3JtIGFuZCByZWxhdGVkIHN5c2luZm8gZmlsZSBsb2FkaW5nIChwYXJ0IDIpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBzZXQgdGhlIF9nbnUgZmxhZyBzb21laG93LiAgV2UgZG8gdGhpcyBieSByZWFkaW5nCitmcm9tIHRoZSBwbGF0Zm9ybSBmaWxlLCBhbmQgc2V0dGluZyBhIG5ldyBfcGxhdGZvcm1fZ251IGFuZCByZWxhdGVkIHZhcnMuCisKK1RoZSBkZWZhdWx0IHZhbHVlcyBvZiBfaG9zdF9jcHUsIF9ob3N0X3ZlbmRvciBhbmQgX2hvc3Rfb3MgYXJlIGNoYW5nZWQgdG8KK3JlZmVyZW5jZSBlaXRoZXIgdGhlIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBfdGFyZ2V0Xy4uLiBvciBfcGxhdGZvcm1fLi4uCit2YWx1ZXMuICBUaGUgbWFjcm9zIGZpbGUgdXNlcyB0aGUgY29uZmlndXJlIHRpbWUgZGVmYXVsdHMgaW4gX3BsYXRmb3JtXy4uLgordmVyc2lvbnMgaGF2ZSBub3QgYmVlbiBkZWZpbmVkLiAgVGhpcyBwcmVzZXJ2ZXMgZXhpc3RpbmcgYmVoYXZpb3IsIGJ1dAorZW5zdXJlcyByZWFzb25hYmxlIGRlZmF1bHRzIGFyZSBhbHdheXMgYXZhaWxhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTMyOCwxMCArMzI4LDE1IEBAIHN0YXRpYyB2b2lkIHNldERlZmF1bHRzKHZvaWQpCisgCS8qQG1vZGlmaWVzIHJwbUdsb2JhbE1hY3JvQ29udGV4dCwgaW50ZXJuYWxTdGF0ZSBAKi8KKyB7CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl91c3JsaWJycG0iLCBOVUxMLCBfX3VzcmxpYnJwbSwgUk1JTF9ERUZBVUxUKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl9ldGNycG0iLCBOVUxMLCBfX2V0Y3JwbSwgUk1JTF9ERUZBVUxUKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl92ZW5kb3IiLCBOVUxMLCAiJXs/X2hvc3RfdmVuZG9yfSV7IT9faG9zdF92ZW5kb3I6d3JzfSIsIFJNSUxfREVGQVVMVCk7CisrCisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX2NwdX0leyE/X3BsYXRmb3JtX2NwdTolez9fdGFyZ2V0X2NwdX19IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X3ZlbmRvciIsIE5VTEwsICIlez9fcGxhdGZvcm1fdmVuZG9yfSV7IT9fcGxhdGZvcm1fY3B1OiV7P190YXJnZXRfdmVuZG9yfX0iLCBSTUlMX0RFRkFVTFQpOworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3Rfb3MiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX29zfSV7IT9fcGxhdGZvcm1fb3M6JXs/X3RhcmdldF9vc319IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X2dudSIsIE5VTEwsICIlez9fcGxhdGZvcm1fZ251fSV7IT9fcGxhdGZvcm1fZ251OiV7P19nbnV9fSIsIFJNSUxfREVGQVVMVCk7CisgI2VuZGlmCisgCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdXNyIiwgTlVMTCwgVVNSUFJFRklYLCBSTUlMX0RFRkFVTFQpOworQEAgLTQ4Nyw5ICs0OTIsMjIgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAl9CisgCisgCWlmICghcGFyc2VDVk9HKHAsICZjdm9nKSAmJiBjdm9nICE9IE5VTEwpIHsKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKwkgICAgY2hhciAqIF9nbnUgPSBOVUxMOworKworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fdmVuZG9yIiwgTlVMTCwgY3ZvZy0+dmVuZG9yLCAtMSk7CisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX29zIiwgTlVMTCwgY3ZvZy0+b3MsIC0xKTsKKysKKysJICAgIGlmIChjdm9nLT5nbnUgJiYgY3ZvZy0+Z251WzBdICE9ICdcMCcpCisrCQlfZ251ID0gcnBtRXhwYW5kKCItIiwgY3ZvZy0+Z251LCBOVUxMKTsKKysKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fZ251IiwgTlVMTCwgKF9nbnUgPyBfZ251IDogIiIpLCAtMSk7CisrI2Vsc2UKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCBjdm9nLT52ZW5kb3IsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9vcyIsIE5VTEwsIGN2b2ctPm9zLCAtMSk7CisrI2VuZGlmCisgCX0KKyAKKyAjaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGV4cGxpY2l0LXBsYXRmb3JtICovCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC05MDAsOSArOTAwLDkgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgJV9vcwkJCUBSUE1DQU5PTk9TQAorICVfZ251CQkJQFJQTUNBTk9OR05VQAorIAorLSVfaG9zdF9wbGF0Zm9ybQkJJXtfaG9zdF9jcHV9LSV7X2hvc3RfdmVuZG9yfS0le19ob3N0X29zfSV7P19nbnV9CistJV9idWlsZF9wbGF0Zm9ybQkle19idWlsZF9jcHV9LSV7X2J1aWxkX3ZlbmRvcn0tJXtfYnVpbGRfb3N9JXs/X2dudX0KKy0lX3RhcmdldF9wbGF0Zm9ybQkle190YXJnZXRfY3B1fS0le190YXJnZXRfdmVuZG9yfS0le190YXJnZXRfb3N9JXs/X2dudX0KKyslX2hvc3RfcGxhdGZvcm0JCSV7X2hvc3RfY3B1fS0le19ob3N0X3ZlbmRvcn0tJXtfaG9zdF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0KKyslX2J1aWxkX3BsYXRmb3JtCSV7X2J1aWxkX2NwdX0tJXtfYnVpbGRfdmVuZG9yfS0le19idWlsZF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0KKyslX3RhcmdldF9wbGF0Zm9ybQkle190YXJnZXRfY3B1fS0le190YXJnZXRfdmVuZG9yfS0le190YXJnZXRfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisgCisgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICMgLS0tLSBjb25maWd1cmUgbWFjcm9zLgorQEAgLTk0NSw5ICs5NDUsMTAgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgJV9idWlsZF9vcwkJJXtfaG9zdF9vc30KKyAlX2hvc3QJCQlAaG9zdEAKKyAlX2hvc3RfYWxpYXMJCUBob3N0X2FsaWFzQCV7bmlsfQorLSVfaG9zdF9jcHUJCUBob3N0X2NwdUAKKy0lX2hvc3RfdmVuZG9yCQlAaG9zdF92ZW5kb3JACistJV9ob3N0X29zCQlAaG9zdF9vc0AKKyslX2hvc3RfY3B1CQklez9fcGxhdGZvcm1fY3B1fSV7IT9fcGxhdGZvcm1fY3B1OiV7X2FyY2h9fQorKyVfaG9zdF92ZW5kb3IJCSV7P19wbGF0Zm9ybV92ZW5kb3J9JXshP19wbGF0Zm9ybV92ZW5kb3I6JXtfdmVuZG9yfX0KKyslX2hvc3Rfb3MJCSV7P19wbGF0Zm9ybV9vc30leyE/X3BsYXRmb3JtX29zOiV7X29zfX0KKyslX2hvc3RfZ251CQklez9fcGxhdGZvcm1fZ251fSV7IT9fcGxhdGZvcm1fZ251OiV7X2dudX19CisgJV90YXJnZXQJCSV7X2hvc3R9CisgJV90YXJnZXRfYWxpYXMJCSV7X2hvc3RfYWxpYXN9CisgJV90YXJnZXRfY3B1CQkle19ob3N0X2NwdX0KK0luZGV4OiBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9weXRob24vcnBtbW9kdWxlLmMKKysrKyBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTY1LDggKzY1LDggQEAgc3RhdGljIFB5T2JqZWN0ICogYXJjaFNjb3JlKFB5T2JqZWN0ICogcworICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAicyIsIGt3bGlzdCwgJmFyY2gpKQorIAlyZXR1cm4gTlVMTDsKKyAKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikKKy0gICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0le19ob3N0X3ZlbmRvcn0iLCAiLSV7X2hvc3Rfb3N9JXs/X2dudX0iLCBOVUxMKTsKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLSV7X2hvc3RfdmVuZG9yfSIsICItJXtfaG9zdF9vc30lez9faG9zdF9nbnV9JXshP19ob3N0X2dudTolez9fZ251fX0iLCBOVUxMKTsKKyAjZWxzZQorICAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLSIsICIle192ZW5kb3J9IiwgIi0iLCAiJXtfb3N9IiwgTlVMTCk7CisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1weS1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDQwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitweXRob24vcnBtbW9kdWxlcy5jOiBDaGFuZ2UgdGhlIHdheSB0aGUgcHl0aG9uIG1vZHVsZSBsb2FkcyB0aGUgUlBNIGNvbmZpZworCitJbiBvcmRlciB0byBzdXBwb3J0IHRoZSBSUE1fVkVORE9SX1dJTkRSSVZFUiBlbmhhbmNlbWVudCBvZiBkeW5hbWljCitydW50aW1lIHJlbG9jYXRpb24gcGF0aHMsIHdlIG5lZWQgdG8gY2FsbCBycG1jbGlJbml0IGluc3RlYWQgb2YgCitycG1SZWFkQ29uZmlnRmlsZXMuICBUaGUgcnBtY2xpSW5pdCB3aWxsIGVuZCB1cCBjYWxsaW5nIHJwbVJlYWRDb25maWdGaWxlcworYWZ0ZXIgdGhlIG5lY2Vzc2FyeSByZWxvY2F0aW9uIHByb2Nlc3NpbmcgKGlmIGVuYWJsZWQpLgorCitDb2RlIGRlcml2ZWQgZnJvbSBjaGFuZ2VzIHN1Z2dlc3RlZCBieSBQYXVsIEVnZ2xldG9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKK0BAIC0zOTIsNyArMzkyLDggQEAgdm9pZCBpbml0X3JwbSh2b2lkKQorICAgICBpZiAoUHlfQXRFeGl0KHJwbV9leGl0aG9vaykgPT0gLTEpCisgCXJldHVybjsKKyAKKy0gICAgcnBtUmVhZENvbmZpZ0ZpbGVzKE5VTEwsIE5VTEwpOworKyAgICBjb25zdCBjaGFyICphcmd2WzFdID0geyJycG1tb2R1bGUiLCAwfTsKKysgICAgcnBtY2xpSW5pdCgxLCBhcmd2LCBOVUxMKTsKKyAKKyAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxMDEyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWFscGF0aC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitjaHJvb3Q6IHJlYWxwYXRoIGlzIHJlcXVpcmVkIGJlZm9yZSBleHBhbmRpbmcgX2RicGF0aAorCitfdXNyIHR1cm5lZCBvdXQgdG8gYmUgYSByZWxhdGl2ZSBwYXRoIHRvIHN1cHBvcnQgZHlhbm1pYyBjb25maWcsIGJ1dCBpdCdzCitiZWluZyB1c2VkIHNvbWV3aGVyZSBhcyBhIGluZGljYXRvciB0byBsb2NhdGUgc3Vic3RyaW5ncywgc28gd2UgbXVzdCBnZXQKK3RoZSByZWFsIHBhdGggb2YgaXQgaW4gYWR2YW5jZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChPcGVuRW1iZWRkZWQgc3BlY2lmaWMpCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11cnBOIGEvcnBtaW8vcnBtcnBjLmMgYi9ycG1pby9ycG1ycGMuYworLS0tIGEvcnBtaW8vcnBtcnBjLmMKKysrKyBiL3JwbWlvL3JwbXJwYy5jCitAQCAtMjU3LDcgKzI1Nyw5IEBAIGludCBPcGVuKGNvbnN0IGNoYXIgKiBwYXRoLCBpbnQgZmxhZ3MsIG0KKyAgICAgLyogWFhYIGlmIHRoZSBvcGVuKDIpIGZhaWxzLCB0cnkgdG8gc3RyaXAgYSBwb3NzaWJsZSBjaHJvb3QoMikgcHJlZml4LiAqLworICAgICBpZiAoZmRubyA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKSB7CisgCWNvbnN0IGNoYXIgKmRicGF0aCA9IHJwbUV4cGFuZCgiJXs/X2RicGF0aH0vIiwgTlVMTCk7CistCWNvbnN0IGNoYXIgKiBmbiA9IHN0cnN0cihwYXRoICsgMSwgZGJwYXRoKTsKKysJY2hhciByZXNvbHZlZF9kYnBhdGhbUEFUSF9NQVhdOworKwlyZWFscGF0aChkYnBhdGgsIHJlc29sdmVkX2RicGF0aCk7CisrCWNvbnN0IGNoYXIgKiBmbiA9IHN0cnN0cihwYXRoICsgMSwgcmVzb2x2ZWRfZGJwYXRoKTsKKyAJaWYgKGZuKQorIAkgICAgZmRubyA9IG9wZW4oZm4sIGZsYWdzLCBtb2RlKTsKKyAJZGJwYXRoID0gX2ZyZWUoZGJwYXRoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK21hY3JvczogVXNlIGR5YW5taWMgY29uZmlnIHZzIGhhcmQgY29kZWQgc2V0dGluZ3MKKworV2hlbiB0aGUgZHluYW1pYywgcnVudGltZSByZWxvY2F0aW9uIGlzIGVuYWJsZXMgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgCitSUE0gbWFjcm8gZmlsZSBkb2VzIG5vdCBvdmVycmlkZSB0aGUgZHluYW1pYyBzZXR0aW5ncy4gIEZpeCB0aGlzIGJ5IGZvcmNpbmcgdGhlCitkeW5hbWljIHZlcnNpb24gdG8gYmUgdXNlZCBpbiBhbGwgY2FzZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoT3BlbkVtYmVkZGVkIHNwZWNpZmljKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbWFjcm9zL21hY3Jvcy5pbgorKysrIHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTI3LDExICsyNywxMiBAQAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gZmlsZXN5c3RlbSBtYWNyb3MuCisgIworLSVfdXNyCQkJQHVzcnByZWZpeEAKKyslX3VzcgkJCSV7X3VzcmxpYnJwbX0vLi4vLi4KKyAlX3VzcnNyYwkJJXtfdXNyfS9zcmMKKy0lX3ZhcgkJCUB2YXJwcmVmaXhACistJV91c3JsaWJycG0JCUBVU1JMSUJSUE1ACistJV9ldGNycG0JCUBTWVNDT05GSUdESVJACisrJV92YXIJCQkle191c3J9Ly4uL3ZhcgorKyMgVGhlIGR5bmFtaWMgcmVsb2NhdGlvbiBjb2RlIHNldHMgdGhlIGZvbGxvd2luZyB0d28gaXRlbXMKKysjJV91c3JsaWJycG0JCUBVU1JMSUJSUE1ACisrIyVfZXRjcnBtCQlAU1lTQ09ORklHRElSQAorIAorICVfX29iamV4dAkJQG9iamV4dEAKKyAlX19saWJleHQJCUBsaWJleHRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkwMTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitJbmRleDogcnBtLTUuNC4xNC9zeWNrL2xpYi9zeWNrLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3ljay9saWIvc3ljay5oCisrKysgcnBtLTUuNC4xNC9zeWNrL2xpYi9zeWNrLmgKK0BAIC02MjEsOSArNjIxLDYgQEAgbG9uZyBzeWNrX3NlcV9jb3VudCggU3lja05vZGUgKnNlcSApCisgICovCisgdm9pZCBzeWNrZXJyb3IoIGNoYXIgKm1zZyApCisgCS8qQCovOworLWludCBzeWNrcGFyc2UoIHZvaWQgKiApCistCS8qQGdsb2JhbHMgZmlsZVN5c3RlbSBAKi8KKy0JLypAbW9kaWZpZXMgZmlsZVN5c3RlbSBAKi87CisgLyogWFhYIHVuaW9uIFlZU1RZUEUgKnN5Y2tsdmFsIGhhcyBpc3N1ZXMgb24gTWFjIE9TIFguICovCisgaW50IHN5Y2tsZXgoIHZvaWQgKl9zeWNrbHZhbCwgU3lja1BhcnNlciAqcGFyc2VyICkKKyAJLypAbW9kaWZpZXMgX3N5Y2tsdmFsLCBwYXJzZXIgQCovOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVzb2x2ZWRlcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmEyNDNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorbGliL3JwbXRzLmM6IEVuc3VyZSB0aGF0IHdlIGNoZWNrIGJvdGggcHJvdmlkZW5hbWUgYW5kIGZpbGVwYXRocworCitXaGVuIGxvb2tpbmcgdXAgYSBtaXNzaW5nIGRlcGVuZGVuY2llcywgc3VjaCBhcyAvYmluL3NoLCB3ZSBuZWVkIHRvIGxvb2t1cAoraW4gYm90aCB0aGUgcHJvdmlkZW5hbWUgYW5kIGZpbGVwYXRocyBEQiwgbm90IGp1c3QgdGhlIGZpbGVwYXRocyBEQi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG10cy5jCitAQCAtNDEwLDggKzQxMCw4IEBAIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzKCVwLCVwLCVwKVxuIiwgX18KKyAJaWYgKHNkYiA9PSBOVUxMKQorIAkgICAgY29udGludWU7CisgCistCS8qIExvb2sgZm9yIGEgbWF0Y2hpbmcgUHJvdmlkZXM6IGluIHN1Z2dlc3RlZCB1bml2ZXJzZS4gKi8KKy0JcnBtdGFnID0gKCprZXlwID09ICcvJyA/IFJQTVRBR19GSUxFUEFUSFMgOiBSUE1UQUdfUFJPVklERU5BTUUpOworKwlycG10YWcgPSBSUE1UQUdfUFJPVklERU5BTUU7CisrICAgICAgIGRvIHsKKyAJbWkgPSBycG1taUluaXQoc2RiLCBycG10YWcsIGtleXAsIGtleWxlbik7CisgCXdoaWxlICgoaCA9IHJwbW1pTmV4dChtaSkpICE9IE5VTEwpIHsKKyAJICAgIHNpemVfdCBobmFtZWxlbjsKK0BAIC00NDYsNiArNDQ2LDE1IEBAIGZwcmludGYoc3RkZXJyLCAiLS0+ICVzKCVwLCVwLCVwKVxuIiwgX18KKyAJICAgIGJobmFtZWxlbiA9IGhuYW1lbGVuOworIAl9CisgCW1pID0gcnBtbWlGcmVlKG1pKTsKKysKKysJaWYgKGJoID09IE5VTEwgJiYgKmtleXAgPT0gJy8nICYmIHJwbXRhZyA9PSBSUE1UQUdfUFJPVklERU5BTUUpIHsKKysJICAgcnBtdGFnID0gUlBNVEFHX0ZJTEVQQVRIUzsKKysJICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgICAgICBicmVhazsKKysgICAgICB9IHdoaWxlICgxKTsKKysKKyAgICAgfQorIAorICAgICAvKiBJcyB0aGVyZSBhIHN1Z2dlc3RlZCByZXNvbHV0aW9uPyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcnBtcGdwLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGZlZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorcnBtcGdwLmM6IEFkZCBtaXNzaW5nIGlmIGRlZnMgYXJvdW5kIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMKKworV2l0aG91dCB0aGVzZSwgdGhlIHN5c3RlbSB3aWxsIGVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBjb3JyZWN0IGNyeXB0byAKK2xpYnJhcnkgdG8gdXNlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtL3JwbWlvL3JwbXBncC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLm9yaWcvcnBtaW8vcnBtcGdwLmMKKysrKyBycG0vcnBtaW8vcnBtcGdwLmMKK0BAIC0xMzM5LDE2ICsxMzM5LDI2IEBAIGludCBwZ3BFeHBvcnRQdWJrZXkocGdwRGlnIGRpZykKKyB7CisgICAgIGludCByYyA9IDA7CQkvKiBhc3N1bWUgZmFpbHVyZSAqLworIAorKyNpZiBkZWZpbmVkKFdJVEhfQkVFQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtYmNJbXBsVmVjcykKKyAJcmMgPSBycG1iY0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfU1NMKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbXNzbEltcGxWZWNzKQorIAlyYyA9IHJwbXNzbEV4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfTlNTKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbW5zc0ltcGxWZWNzKQorIAlyYyA9IHJwbW5zc0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfR0NSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWdjSW1wbFZlY3MpCisgCXJjID0gcnBtZ2NFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1RPTUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWx0Y0ltcGxWZWNzKQorIAlyYyA9IHJwbWx0Y0V4cG9ydFB1YmtleShkaWcpOworKyNlbmRpZgorICAgICByZXR1cm4gcmM7CisgfQorIAorQEAgLTEzNTYsMTYgKzEzNjYsMjYgQEAgaW50IHBncEV4cG9ydFNpZ25hdHVyZShwZ3BEaWcgZGlnLCBESUdFUworIHsKKyAgICAgaW50IHJjID0gMDsJCS8qIGFzc3VtZSBmYWlsdXJlICovCisgCisrI2lmIGRlZmluZWQoV0lUSF9CRUVDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1iY0ltcGxWZWNzKQorIAlyYyA9IHJwbWJjRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1NTTCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1zc2xJbXBsVmVjcykKKyAJcmMgPSBycG1zc2xFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfTlNTKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbW5zc0ltcGxWZWNzKQorIAlyYyA9IHJwbW5zc0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9HQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtZ2NJbXBsVmVjcykKKyAJcmMgPSBycG1nY0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9UT01DUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1sdGNJbXBsVmVjcykKKyAJcmMgPSBycG1sdGNFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorICAgICByZXR1cm4gcmM7CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI1MzcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK0VuYWJsZSBhIGNyb3NzLWluc3RhbGwgc2NyaXB0bGV0IGhlbHBlci4KKworVGhlIGhlbHBlciBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIHRoZSBjaHJvb3Qgd2l0aCB0aGUgYXJndW1lbnRzOgorCis8cm9vdD4gPHByb2c+IDxzY3JpcHQ+IDxhcmcxPiBbPGFyZzI+IC4uLiA8YXJnTj5dCisKK1RoZSBoZWxwZXIgc2NyaXB0IGlzIHVzZWQgYnkgb2UtY29yZSB0byBmYWNpbGl0YXRlIHNoZWxsIHNjcmlwdCBhY3Rpb25zIHRoYXQKK2NhbiBub3QgYmUgcnVuIGZyb20gd2l0aGluIGEgY2hyb290IG9uIGEgZm9yZWlnbiB0YXJnZXQgc3lzdGVtIGR1cmluZyBhCitjcm9zcyBpbnN0YWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcHNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3BzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvcHNtLmMKK0BAIC04MDYsNiArODA2LDEwIEBAIHN0YXRpYyBycG1SQyBydW5TY3JpcHQocnBtcHNtIHBzbSwgSGVhZGUKKyAgICAgaW50IHh4OworICAgICBpbnQgaTsKKyAKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKyNlbmRpZgorKyAgICAKKyAgICAgaWYgKHBzbS0+c3N0YXRlcyAhPSBOVUxMICYmIGl4ID49IDAgJiYgaXggPCBSUE1TQ1JJUFRfTUFYKQorIAlzc3AgPSBwc20tPnNzdGF0ZXMgKyBpeDsKKyAgICAgaWYgKHNzcCAhPSBOVUxMKQorQEAgLTg3MiwxNCArODc2LDI5IEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCQkoRl9JU1NFVChwc20sIFVOT1JERVJFRCkgPyAiYSIgOiAiIikpOworIAorICAgICBpZiAoUGhlLT5wLmFyZ3YgPT0gTlVMTCkgeworLQlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSg1ICogc2l6ZW9mKCphcmd2KSk7CistCWFyZ3ZbMF0gPSAiL2Jpbi9zaCI7CistCWFyZ2MgPSAxOworKwlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSg3ICogc2l6ZW9mKCphcmd2KSk7CisrCWFyZ2MgPSAwOworKyAgICB9IGVsc2UgeworKwlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSgoUGhlLT5jICsgNikgKiBzaXplb2YoKmFyZ3YpKTsKKysJYXJnYyA9IDA7CisrICAgIH0KKysKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgeworKwlhcmd2W2FyZ2MrK10gPSBzY3JpcHRsZXRXcmFwcGVyOworKwlhcmd2W2FyZ2NdID0gcnBtdHNSb290RGlyKHRzKTsKKysJaWYgKCFhcmd2W2FyZ2NdIHx8ICEqYXJndlthcmdjXSkKKysJICAgYXJndlthcmdjXSA9ICIvIjsKKysJYXJnYysrOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIGlmIChQaGUtPnAuYXJndiA9PSBOVUxMKSB7CisrCWFyZ3ZbYXJnYysrXSA9ICIvYmluL3NoIjsKKyAJbGRjb25maWdfZG9uZSA9IDA7CisgICAgIH0gZWxzZSB7CistCWFyZ3YgPSAoY29uc3QgY2hhciAqKikgYWxsb2NhKChQaGUtPmMgKyA0KSAqIHNpemVvZigqYXJndikpOworLQltZW1jcHkoYXJndiwgUGhlLT5wLmFyZ3YsIFBoZS0+YyAqIHNpemVvZigqYXJndikpOworLQlhcmdjID0gUGhlLT5jOworKwltZW1jcHkoKGFyZ3YgKyBhcmdjKSwgUGhlLT5wLmFyZ3YsIFBoZS0+YyAqIHNpemVvZigqYXJndikpOworKwlhcmdjICs9IFBoZS0+YzsKKyAJbGRjb25maWdfZG9uZSA9IChsZGNvbmZpZ19wYXRoICYmICFzdHJjbXAoYXJndlswXSwgbGRjb25maWdfcGF0aCkKKyAJCT8gMSA6IDApOworICAgICB9CitAQCAtOTMwLDcgKzk0OSwxMiBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAkgICAgZ290byBleGl0OworIAorIAlpZiAocnBtSXNEZWJ1ZygpICYmCistCSAgICAoIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9zaCIpIHx8ICFzdHJjbXAoYXJndlswXSwgIi9iaW4vYmFzaCIpKSkKKysJICAgICghc3RyY21wKGFyZ3ZbMF0sICIvYmluL3NoIikgfHwgIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9iYXNoIikpCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIHx8IChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyICYmICFzdHJjbXAoYXJndlsxXSwgIi9iaW4vc2giKSkKKysJICAgIHx8IChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyICYmICFzdHJjbXAoYXJndlsxXSwgIi9iaW4vYmFzaCIpKQorKyNlbmRpZgorKwkgICApCisgCXsKKyAJICAgIHN0YXRpYyBjb25zdCBjaGFyIHNldF94W10gPSAic2V0IC14XG4iOworIAkgICAgbncgPSBGd3JpdGUoc2V0X3gsIHNpemVvZihzZXRfeFswXSksIHNpemVvZihzZXRfeCktMSwgZmQpOworQEAgLTEwNjUsMTIgKzEwODksMjIgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAKKyAJeyAgIGNvbnN0IGNoYXIgKiByb290RGlyID0gcnBtdHNSb290RGlyKHRzKTsKKyAJICAgIGlmICghcnBtdHNDaHJvb3REb25lKHRzKSAmJiByb290RGlyICE9IE5VTEwgJiYKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkJIShzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKSAmJgorKyNlbmRpZgorIAkJIShyb290RGlyWzBdID09ICcvJyAmJiByb290RGlyWzFdID09ICdcMCcpKQorIAkgICAgeworIAkJLypALW1vZG9ic2VydmVyQCovCisgCQl4eCA9IENocm9vdChyb290RGlyKTsKKyAJCS8qQD1tb2RvYnNlcnZlckAqLworIAkgICAgfQorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICBpZiAoIXJwbXRzQ2hyb290RG9uZSh0cykgJiYgcm9vdERpciAhPSBOVUxMICYmCisrCQkoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgJiYKKysJCSEocm9vdERpclswXSA9PSAnLycgJiYgcm9vdERpclsxXSA9PSAnXDAnKSkKKysJCXh4ID0gQ2hkaXIocm9vdERpcik7CisrCSAgICBlbHNlIAorKyNlbmRpZgorIAkgICAgeHggPSBDaGRpcigiLyIpOworIAkgICAgcnBtbG9nKFJQTUxPR19ERUJVRywgRF8oIiVzOiAlcyglcylcdGV4ZWN2KCVzKSBwaWQgJWRcbiIpLAorIAkJCXBzbS0+c3RlcE5hbWUsIHNsbiwgTlZSQSwKK0BAIC0yOTg1LDYgKzMwMTksMTMgQEAgYXNzZXJ0KHBzbS0+dGUgIT0gTlVMTCk7CisgICAgIGNhc2UgUFNNX1NDUklQVDoJLyogUnVuIGN1cnJlbnQgcGFja2FnZSBzY3JpcHRsZXRzLiAqLworIAkvKiBYWFggcnVubmluZyAldmVyaWZ5c2NyaXB0LyVzYW5pdHljaGVjayBkb2Vzbid0IGhhdmUgcHNtLT50ZSAqLworICAgICB7CXJwbXR4biBfcGFyZW50ID0gKHBzbSAmJiBwc20tPnRlID8gcHNtLT50ZS0+dHhuIDogTlVMTCk7CisrCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfT1VUKTsKKysjZW5kaWYKKysKKyAJeHggPSBycG10eG5CZWdpbihycG10c0dldFJkYih0cyksIF9wYXJlbnQsIE5VTEwpOworIAlyYyA9IHJ1bkluc3RTY3JpcHQocHNtKTsKKyAJaWYgKHJjKQorQEAgLTI5OTIsMTEgKzMwMzMsMjQgQEAgYXNzZXJ0KHBzbS0+dGUgIT0gTlVMTCk7CisgCWVsc2UKKyAJICAgICB4eCA9IHJwbXR4bkNvbW1pdChycG10c0dldFJkYih0cyktPmRiX3R4bik7CisgCXJwbXRzR2V0UmRiKHRzKS0+ZGJfdHhuID0gTlVMTDsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX0lOKTsKKysjZW5kaWYKKyAgICAgfQlicmVhazsKKyAgICAgY2FzZSBQU01fVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiBvdGhlciBwYWNrYWdlKHMpIHRoaXMgcGFja2FnZSBzZXRzIG9mZi4gKi8KKyAJaWYgKHJwbXRzRmxhZ3ModHMpICYgUlBNVFJBTlNfRkxBR19URVNUKQlicmVhazsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9PVVQpOworKyNlbmRpZgorIAlyYyA9IHJ1blRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9JTik7CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9JTU1FRF9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIHRoaXMgcGFja2FnZSBvdGhlciBwYWNrYWdlKHMpIHNldCBvZmYuICovCitAQCAtMzAwNiw3ICszMDYwLDE4IEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworIAkgICAgRl9TRVQocHNtLCBHT1RUUklHR0VSUyk7CisgCX0KKyAJaWYgKHBzbS0+dHJpZ2dlcnMgIT0gTlVMTCkKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwl7CisrICAgICAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX09VVCk7CisrI2VuZGlmCisgCSAgICByYyA9IHJ1bkltbWVkVHJpZ2dlcnMocHNtKTsKKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfSU4pOworKwl9CisrI2VuZGlmCisgCWJyZWFrOworIAorICAgICBjYXNlIFBTTV9SUE1JT19GTEFHUzoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zaG93cmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzhiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1dvcmthcm91bmQgZm9yIGEgbWVtb3J5IGxlYWsgaW4gLS1zaG93cmMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTEyMjgsMTEgKzEyMjgsMTUgQEAgaW50IHJwbVNob3dSQyhGSUxFICogZnApCisgCQlpZiAoRE5FVlIgIT0gTlVMTCkKKyAJCSAgICBmcHJpbnRmKGZwLCAiICAgICVzXG4iLCBETkVWUisyKTsKKyAJICAgIH0KKysjaWYgMAorIAkgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKyAJICAgIGRzID0gTlVMTDsKKysjZW5kaWYKKyAJICAgIGZwcmludGYoZnAsICJcbiIpOworIAl9CisrI2lmIDAKKyAJUFJDTyA9IHJwbWRzRnJlZVBSQ08oUFJDTyk7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgICAgaWYgKHJwbUlzVmVyYm9zZSgpKSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzI3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitmaXggYSBlbmRpYW4gaW5jb21wYXRpYmxlIGVycm9yIGluIGdlbmVyYXRpbmcgcnBtIHRhZworCitBIGZsYXcgd2FzIGZvdW5kIGluIHRoZSB3YXkgcnBtIGdlbmVyYXRpbmcgYXJiaXRyYXJ5IHRhZ3MsIHdoaWNoIGxlYWRzIHRvIGEKK2luY29ycmVjdCBxdWVyeSByZXN1bHQsIHRoaXMgaXNzdWUgaXMgaW50cm9kdWNlZCBieSBhIGluY29tcGF0aWJsZSBlbmRpYW5lc3MKK3doZW4gdGhlIGdlbmVyYXRpbmcgcHJvY2VzcyBpcyBleGVjdXRlZCBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4KKworVGhpcyBwYXRjaCByZXNvbHZlcyBpdCBieSB0YWtpbmcgdGhlIGJ5dGUgb3JkZXIgdGhhdCBob3N0IHVzZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRhZ25hbWUuYyB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3RhZ25hbWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi90YWduYW1lLmMKKysrKyBycG0tNS40LjE0L3JwbWRiL3RhZ25hbWUuYworQEAgLTMsNiArMywxOSBAQAorICAqLworIAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrCisrLyogRG9uJ3QgcmVkZWZpbmUgdGhpcyBtYWNybyBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLworKyNpZm5kZWYgbGUzMnRvaAorKyNpZmRlZiBfX1VTRV9CU0QKKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorKyNkZWZpbmUgbGUzMnRvaCh4KSAoeCkKKysjZWxzZQorKyNkZWZpbmUgbGUzMnRvaCh4KSBfX2Jzd2FwXzMyKHgpCisrI2VuZGlmCisrI2VuZGlmIC8qIF9fVVNFX0JTRCAqLworKyNlbmRpZiAvKiBsZTMydG9oICovCisgCisgI2luY2x1ZGUgPHJwbWlvX2ludGVybmFsLmg+CS8qIFhYWCBESUdFU1RfQ1RYLCB4dG9sb3dlciwgeHN0cmNhc2VjbXAgKi8KKyAjaW5jbHVkZSA8cnBtbWFjcm8uaD4KK0BAIC0xNTIsNyArMTY1LDEwIEBAIHN0YXRpYyBycG1UYWcgX3RhZ0dlbmVyYXRlKGNvbnN0IGNoYXIgKnMKKyAgICAgeHggPSBycG1EaWdlc3RVcGRhdGUoY3R4LCBzLCBuYik7CisgICAgIHh4ID0gcnBtRGlnZXN0RmluYWwoY3R4LCAmZGlnZXN0LCAmZGlnZXN0bGVuLCAwKTsKKyAgICAgaWYgKGRpZ2VzdCAmJiBkaWdlc3RsZW4gPiA0KSB7CisrCS8qIFRoZSB0YWcgaXMgc3RvcmVkIGluIGEgdW5pZm9ybSBieXRlIG9yZGVyIGZvciBjcm9zcy1lbmRpYW4gY29tcGF0aWJpbGl0eS4KKysJICAgU3dhcCB0byB0aGUgaG9zdCB1c2VzLiAqLworIAltZW1jcHkoJnRhZywgZGlnZXN0ICsgKGRpZ2VzdGxlbiAtIDQpLCA0KTsKKysJdGFnID0gbGUzMnRvaCh0YWcpOworIAl0YWcgPSAocnBtVGFnKSAodGFnICYgMHgzZmZmZmZmZik7CisgCXRhZyA9IChycG1UYWcpICh0YWcgfCAweDQwMDAwMDAwKTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjg1YmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorU291cmNlOiBOb25lCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0F1dGhvcjogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IDIwMTEtMDMtMDMKK0Rlc2NyaXB0aW9uOgorVGhpcyBwYXRjaCBmaXhlcyBidWlsZCBpc3N1ZSBmb3VuZCB3aGVuIGNvbXBpbGluZyBycG0tbmF0aXZlIG9uIHVidW50dQorMTEuMDQtYWxwaGEuIFByb2JsZW0gaXMgdGhhdCBsaW5rZXIgZG9lcyBub3QgZ2V0IGNvcnJlY3Qgc2V0IG9mIGRlcGVuZGVudAorbGlicmFyaWVzIHdoZW4gbGlua2luZyBtdHJlZSBiaW5hcnkgd2hpY2ggcmVzdWx0cyBpbiB1bmRlZmluZWQgc3ltYm9scworaW4gbGlicnBtaW8uc28uIFRoaXMgcGF0Y2ggYWRkcyBjb3JyZWN0IGZsYWdzIHRvIG10cmVlX0xEQUREIHRvIGFjY291bnQKK2ZvciBycG1pbyBkZXBzCisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorQEAgLTE4Niw3ICsxODYsNyBAQCBncmVwX0xEQUREID0JCSQoUlBNSU9fTERBRERfQ09NTU9OKQorIAorIG10cmVlX1NPVVJDRVMgPQkJcnBtbXRyZWUuYworIG10cmVlX0xERkxBR1MgPQkJQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCistbXRyZWVfTERBREQgPQkJJChSUE1fTERBRERfQ09NTU9OKQorK210cmVlX0xEQUREID0JCSQoUlBNSU9fTERBRERfQ09NTU9OKQorIAorIHJwbXJlcG9fU09VUkNFUyA9CXJwbXJlcG8uYworIHJwbXJlcG9fQ1BQRkxBR1MgPQkkKEFNX0NQUEZMQUdTKSAtSSQodG9wX3NyY2Rpcikvc2NyaXB0cyAtSSQodG9wX2J1aWxkZGlyKS9zY3JpcHRzICQoQ1BQRkxBR1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNmODRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitBIHBhdGNoIHRvIGZpeCBhIHByb2JsZW0gd2hlbiBjb21waWxpbmcgd2l0aCB1dWlkLgorCitXaGVuIGF0dGVtcHRpbmcgdG8gYnVpbGQgd2l0aCB1dWlkIGFuZCBhbGwgdGVzdHMgY29tcGlsaW5nIHdpbGwgZXJyb3IgYmVjYXVzZQordXVpZC5oIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHJwbSB0YXJiYWxsLiBGaXggdGhpcyBieSBjaGFuZ2luZyB0aGUgaW5jbHVkZSB0bwordXNlIHRoZSBvbmUgaW4gb3NzcCB3aGljaCBzb2x2ZXMgdGhlIGlzc3VlLiAKKworVGhlIHJlY2lwZSBhbHJlYWR5IGRlcGVuZHMgb24gb3NzcCBzbyBvc3NwL3V1aWQuaCB3aWxsIGJlIHRoZXJlIHdoZW4gcnBtLW5hdGl2ZQoraXMgYnVpbHQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNb3JnYW4gTGl0dGxlIDxtb3JnYW4ubGl0dGxlQHdpbmRyaXZlci5jb20+CisKKworSW5kZXg6IHJwbS01LjQuMTQvbHVhL2xvY2FsL2x1dWlkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbHVhL2xvY2FsL2x1dWlkLmMKKysrKyBycG0tNS40LjE0L2x1YS9sb2NhbC9sdXVpZC5jCitAQCAtMjEsNyArMjEsNyBAQAorIAorICNpZmRlZiBMVUFfVVNFX1VVSUQKKyAKKy0jaW5jbHVkZSAidXVpZC5oIgorKyNpbmNsdWRlIDxvc3NwL3V1aWQuaD4KKyAKKyAvKiAgTHVhIG1ldGhvZDogPHV1aWQ+ID0gdXVpZC5nZW5lcmF0ZSg8dmVyc2lvbj5bLCA8dXVpZC1uYW1lc3BhY2U+LCA8ZGF0YT5dKSAgKi8KKyBzdGF0aWMgaW50IGx1dWlkX2dlbmVyYXRlKGx1YV9TdGF0ZSAqTCkKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbXV1aWQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG11dWlkLmMKKysrKyBycG0tNS40LjE0L3JwbWlvL3JwbXV1aWQuYworQEAgLTE2LDcgKzE2LDcgQEAKKyAjaW5jbHVkZSAicnBtbG9nLmgiCisgI2luY2x1ZGUgInJwbXV1aWQuaCIKKyAjaWZkZWYgV0lUSF9VVUlECistI2luY2x1ZGUgInV1aWQuaCIKKysjaW5jbHVkZSA8b3NzcC91dWlkLmg+CisgI2VuZGlmCisgI2luY2x1ZGUgImRlYnVnLmgiCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbTJjcGlvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiY2VmNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbwpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworIyBQcmV2ZW50IGdhd2sgPj0gNC4wLnggZnJvbSBnZXR0aW5nIGZ1bm55IGlkZWFzIHdydCBVVEYgaW4gcHJpbnRmKCkKK0xBTkc9QworCitwa2c9JDEKK2lmIFsgIiRwa2ciID0gIiIgLW8gISAtZSAiJHBrZyIgXTsgdGhlbgorICAgIGVjaG8gIm5vIHBhY2thZ2Ugc3VwcGxpZWQiIDE+JjIKKyAgIGV4aXQgMQorZmkKKworbGVhZHNpemU9OTYKK289YGV4cHIgJGxlYWRzaXplICsgOGAKK3NldCBgb2QgLWogJG8gLU4gOCAtdCB1MSAkcGtnYAoraWw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDIgKyAkMyBcKSArICQ0IFwpICsgJDVgCitkbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkNiArICQ3IFwpICsgJDggXCkgKyAkOWAKKyMgZWNobyAic2lnIGlsOiAkaWwgZGw6ICRkbCIKKworc2lnc2l6ZT1gZXhwciA4ICsgMTYgXCogJGlsICsgJGRsYAorbz1gZXhwciAkbyArICRzaWdzaXplICsgXCggOCAtIFwoICRzaWdzaXplIFwlIDggXCkgXCkgXCUgOCArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gImhkciBpbDogJGlsIGRsOiAkZGwiCisKK2hkcnNpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkaGRyc2l6ZWAKK2NvbXA9YGRkIGlmPSRwa2cgaWJzPSRvIHNraXA9MSBjb3VudD0xIDI+L2Rldi9udWxsIHwgZGQgYnM9MyBjb3VudD0xIDI+IC9kZXYvbnVsbGAKKworZ3o9ImBlY2hvIC4gfCBhd2sgJ3sgcHJpbnRmKCIlYyVjIiwgMHgxZiwgMHg4Yik7IH0nYCIKK2x6bWE9ImBlY2hvIC4gfCBhd2sgJ3sgcHJpbnRmKCIlY0xaIiwgMHhmZik7IH0nYCIKK3h6PSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWM3eiIsIDB4ZmQpOyB9J2AiCitjYXNlICIkY29tcCIgaW4KKyAgICBCWmgpICAgICAgZGQgaWY9IiRwa2ciIGlicz0kbyBza2lwPTEgMj4vZGV2L251bGwgfCBidW56aXAyIDs7CisgICAgIiRneiIqKSAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgZ3VuemlwIDs7CisgICAgIiR4eiIqKSAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgeHpjYXQgOzsKKyAgICAiJGx6bWEiKikgZGQgaWY9IiRwa2ciIGlicz0kbyBza2lwPTEgMj4vZGV2L251bGwgfCB1bmx6bWEgOzsKKyAgICAqKSAgICAgICAgZWNobyAiVW5yZWNvZ25pemVkIHJwbSBmaWxlOiAkcGtnIjsgZXhpdCAxIDs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1hdGNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQxM2FhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitBZGQgY29uZmlndXJlIGNoZWNrIGZvciBycG1hdGNoKCkgYW5kIAorY3JlYXRlcyBhIGNvbXBhdGFibGUgbWFjcm8gaWYgaXQgaXMgbm90IHByb3ZpZGVkIGJ5IHRoZSBDIGxpYnJhcnkuCisKK1RoaXMgaXMgbmVlZGVkIGZvciB1Y2xpYmMgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSB0aGUgYWJvdmUgZnVuY3Rpb24KK2ltcGxlbWVudGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtOTQzLDcgKzk0Myw3IEBAIEFDX0NIRUNLX0ZVTkNTKFtkbmwKKyAgICAgZnRvayBnZXRhZGRyaW5mbyBnZXRhdHRybGlzdCBnZXRjd2QgZ2V0ZGVsaW0gZ2V0bGluZSBnZXRtb2RlIGdldG5hbWVpbmZvIGRubAorICAgICBnZXRwYXNzcGhyYXNlIGdldHhhdHRyIGdldHdkIGljb252IGluZXRfYXRvbiBsY2hmbGFncyBsY2htb2QgbGNob3duIGRubAorICAgICBsZ2V0eGF0dHIgbHNldHhhdHRyIGx1dGltZXMgbWFkdmlzZSBtZW1wY3B5IG1rZHRlbXAgbWtzdGVtcCBtdHJhY2UgZG5sCistICAgIHBvc2l4X2ZhZHZpc2UgcG9zaXhfZmFsbG9jYXRlIHB1dGVudiByZWFscGF0aCByZWdjb21wIHNlY3VyZV9nZXRlbnYgX19zZWN1cmVfZ2V0ZW52IGRubAorKyAgICBwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhbGxvY2F0ZSBwdXRlbnYgcmVhbHBhdGggcmVnY29tcCBycG1hdGNoIHNlY3VyZV9nZXRlbnYgX19zZWN1cmVfZ2V0ZW52IGRubAorICAgICBzZXRhdHRybGlzdCBzZXRlbnYgc2V0bG9jYWxlIHNldG1vZGUgc2V0eGF0dHIgZG5sCisgICAgIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnaG9sZCBzaWdyZWxzZSBzaWdwYXVzZSBkbmwKKyAgICAgc2lncHJvY21hc2sgc2lnc3VzcGVuZCBzaWdhY3Rpb24gZG5sCitJbmRleDogcnBtLTUuNC4xNC9zeXN0ZW0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeXN0ZW0uaAorKysrIHJwbS01LjQuMTQvc3lzdGVtLmgKK0BAIC0zNTMsNiArMzUzLDE0IEBAIGV4dGVybiBpbnQgX3RvbG93ZXIoaW50KSBfX1RIUk9XCS8qQCovOworICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAjZW5kaWYKKyAKKysjaWZuZGVmIEhBVkVfUlBNQVRDSAorKyNkZWZpbmUgcnBtYXRjaChsaW5lKSBcCisrCSggKGxpbmUgPT0gTlVMTCk/IC0xIDogXAorKwkgICgqbGluZSA9PSAneScgfHwgKmxpbmUgPT0gJ1knKT8gMSA6IFwKKysJICAoKmxpbmUgPT0gJ24nIHx8ICpsaW5lID09ICdOJyk/IDAgOiBcCisrCSAgLTEgKQorKyNlbmRpZgorKworIC8qIC0tIFJldHJvZml0IGdsaWJjIF9fcHJvZ25hbWUgKi8KKyAjaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgX19HTElCQ19fID49IDIKKyAjaWYgX19HTElCQ19NSU5PUl9fID49IDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtZGVwcy1vZWNvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkZDFkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitBZGQgYW4gInJwbWRlcHMtb2Vjb3JlIiBiaW5hcnkgd2hpY2ggYWxsb3dzIGJhdGNoIHByb2Nlc3Npbmcgb2YgaW5kaXZpZHVhbCBmaWxlCitkZXBlbmRlbmNpZXMgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBycG1kZXBzIC0tcHJvdmlkZXMgLS1yZXF1aXJlcyAtdiwgcHJlZml4aW5nCitlYWNoIGxpbmUgb2Ygb3V0cHV0IHdpdGggdGhlIGZpbGVuYW1lIHRoYXQgaGFzIHRoZSBkZXBlbmRlbmN5LgorCitUaGlzIGlzIG11Y2ggZmFzdGVyIHRoYW4gaW5kaXZpZHVhbGx5IGNhbGxpbmcgcnBtZGVwcyBvbiBlYWNoIGZpbGUuCisKK1RoaXMgYmluYXJ5IGlzIHVzZWQgYnkgcGFja2FnZS5iYmNsYXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDEyLzIvNworCistLS0KKyB0b29scy9NYWtlZmlsZS5hbSAgICAgIHwgICAgNiArKy0KKyB0b29scy9ycG1kZXBzLW9lY29yZS5jIHwgIDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9ycG1kZXBzLW9lY29yZS5jCisKK0luZGV4OiBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3Rvb2xzL01ha2VmaWxlLmFtCisrKysgcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorQEAgLTYyLDcgKzYyLDcgQEAgcGtnYmluX1BST0dSQU1TID0JXAorIAlAV0lUSF9BVUdFQVNfQVVHVE9PTEAgY2hyb290IGNwIEBXSVRIX0NVREZfQ1VERlRPT0xAIGZpbmQgbXRyZWUgXAorIAlAV0lUSF9TRU1BTkFHRV9TRU1PRFVMRUAgd2dldCBcCisgCXJwbWNhY2hlIHJwbWRpZ2VzdCBycG1yZXBvIHJwbXNwZWNkdW1wIFwKKy0JcnBtY21wIHJwbWRlcHMgc3FsaXRlMyBAV0lUSF9LRVlVVElMU19SUE1LRVlAIEBXSVRIX0xJQkVMRl9ERUJVR0VESVRACisrCXJwbWNtcCBycG1kZXBzIHJwbWRlcHMtb2Vjb3JlIHNxbGl0ZTMgQFdJVEhfS0VZVVRJTFNfUlBNS0VZQCBAV0lUSF9MSUJFTEZfREVCVUdFRElUQAorIGlmIFdJVEhfREIKKyBwa2diaW5fUFJPR1JBTVMgKz0JZGJjb252ZXJ0CisgZW5kaWYKK0BAIC0xNzIsNiArMTcyLDEwIEBAIHJwbWRlcHNfU09VUkNFUyA9CXJwbWRlcHMuYworIHJwbWRlcHNfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWRlcHNfTERBREQgPQkJJChSUE1fTERBRERfQ09NTU9OKQorIAorK3JwbWRlcHNfb2Vjb3JlX1NPVVJDRVMgPSAgcnBtZGVwcy1vZWNvcmUuYworK3JwbWRlcHNfb2Vjb3JlX0xERkxBR1MgPSAgQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisrcnBtZGVwc19vZWNvcmVfTERBREQgPSAgICAkKFJQTV9MREFERF9DT01NT04pCisrCisgcnBtZGlnZXN0X1NPVVJDRVMgPQlycG1kaWdlc3QuYworIHJwbWRpZ2VzdF9MREZMQUdTID0JQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtZGlnZXN0X0xEQUREID0JJChSUE1JT19MREFERF9DT01NT04pCitJbmRleDogcnBtLTUuNC4xNC90b29scy9ycG1kZXBzLW9lY29yZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgcnBtLTUuNC4xNC90b29scy9ycG1kZXBzLW9lY29yZS5jCitAQCAtMCwwICsxLDE0NyBAQAorKyNpbmNsdWRlICJzeXN0ZW0uaCIKKytjb25zdCBjaGFyICpfX3Byb2duYW1lOworKworKyNpbmNsdWRlIDxycG1pby5oPgorKyNpbmNsdWRlIDxycG1pb3R5cGVzLmg+CisrI2luY2x1ZGUgPHJwbWNiLmg+CisrI2luY2x1ZGUgPGFyZ3YuaD4KKysjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKysjaW5jbHVkZSA8cnBtdGFnLmg+CisrCisrI2luY2x1ZGUgPHJwbWRzLmg+CisrI2RlZmluZSAgIF9SUE1GQ19JTlRFUk5BTCAgICAgLyogWFhYIGZvciBkZWJ1Z2dpbmcgKi8KKysjaW5jbHVkZSA8cnBtZmMuaD4KKysKKysjaW5jbHVkZSA8cnBtY2xpLmg+CisrCisrI2luY2x1ZGUgImRlYnVnLmgiCisrCisrLypAdW5jaGVja2VkQCovCisrY2hhciAqcHJvZ25hbWU7CisrCisrI2RlZmluZSAgIFJQTURFUF9SUE1GQyAgICAgICAgMQorKworK3N0YXRpYyBpbnQgcnBtZGVwUHJpbnQoY2hhciAqZmlsZW5hbWUsIHJwbWRzIGRzLCBGSUxFICogZnApCisreworKyAgICBpZiAoZnAgPT0gTlVMTCkgZnAgPSBzdGRlcnI7CisrCisrICAgIGRzID0gcnBtZHNJbml0KGRzKTsKKysgICAgd2hpbGUgKHJwbWRzTmV4dChkcykgPj0gMCkgeworKyAgZnByaW50ZihmcCwgIiVzICVzOiAlc1xuIiwgZmlsZW5hbWUsIHJwbWRzVHlwZShkcyksIHJwbWRzRE5FVlIoZHMpKzIpOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uc1RhYmxlW10gPSB7CisrCisrIHsgTlVMTCwgJ1wwJywgUE9QVF9BUkdfSU5DTFVERV9UQUJMRSwgcnBtY2xpQWxsUG9wdFRhYmxlLCAwLAorKyAgTl8oIkNvbW1vbiBvcHRpb25zOiIpLAorKyAgTlVMTCB9LCAKKysKKysgICBQT1BUX0FVVE9BTElBUworKyAgIFBPUFRfQVVUT0hFTFAKKysgICBQT1BUX1RBQkxFRU5ECisrfTsKKysKKysKKytpbnQKKyttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwb3B0Q29udGV4dCBvcHRDb247CisrICAgIEFSR1ZfdCBhdiA9IE5VTEw7CisrICAgIHJwbWZjIGZjID0gTlVMTDsKKysgICAgRklMRSAqIGZwID0gTlVMTDsKKysgICAgaW50IGZsYWdzID0gMDsKKysgICAgaW50IGFjID0gMDsKKysgICAgaW50IGVjID0gMTsKKysgICAgaW50IHh4OworKyAgICBpbnQgaTsKKysgICAgY2hhciBidWZbQlVGU0laXTsKKysgICAgaW50IG5kZGljdDsKKysgICAgY29uc3QgY2hhciAqIHM7CisrICAgIGNoYXIgKiBzZTsKKysgICAgY29uc3QgY2hhciAqIGZuOworKyAgICBjb25zdCBjaGFyICogTjsKKysgICAgY29uc3QgY2hhciAqIEVWUjsKKysgICAgZXZyRmxhZ3MgRmxhZ3M7CisrICAgIHVuc2lnbmVkIGNoYXIgZGVwdHlwZTsKKysgICAgaW50IGl4OworKyAgICBycG1kcyBkczsKKysKKysvKkAtbW9kb2JzZXJ2ZXJAKi8KKysgICAgaWYgKChwcm9nbmFtZSA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkgIT0gTlVMTCkKKysgIHByb2duYW1lKys7CisrICAgIGVsc2UKKysgIHByb2duYW1lID0gYXJndlswXTsKKysvKkA9bW9kb2JzZXJ2ZXJAKi8KKysKKysgICAgb3B0Q29uID0gcnBtY2xpSW5pdChhcmdjLCBhcmd2LCBvcHRpb25zVGFibGUpOworKyAgICBpZiAob3B0Q29uID09IE5VTEwpCisrICBnb3RvIGV4aXQ7CisrCisrICAgIGF2ID0gcG9wdEdldEFyZ3Mob3B0Q29uKTsKKysgICAgYWMgPSBhcmd2Q291bnQoYXYpOworKworKyAgICBpZiAoYWMgPT0gMCkgeworKyAgYXYgPSBOVUxMOworKyAgeHggPSBhcmd2RmdldHMoJmF2LCBOVUxMKTsKKysgIGFjID0gYXJndkNvdW50KGF2KTsKKysgICAgfQorKworKyAgICAvKiBNYWtlIHN1cmUgZmlsZSBuYW1lcyBhcmUgc29ydGVkLiAqLworKyAgICB4eCA9IGFyZ3ZTb3J0KGF2LCBOVUxMKTsKKysKKysgICAgLyogQnVpbGQgZmlsZSBjbGFzcyBkaWN0aW9uYXJ5LiAqLworKyAgICBmYyA9IHJwbWZjTmV3KCk7CisrICAgIHh4ID0gcnBtZmNDbGFzc2lmeShmYywgYXYsIE5VTEwpOworKworKyAgICAvKiBCdWlsZCBmaWxlL3BhY2thZ2UgZGVwZW5kZW5jeSBkaWN0aW9uYXJ5LiAqLworKyAgICB4eCA9IHJwbWZjQXBwbHkoZmMpOworKworKyAgICAvKiBHZW5lcmF0ZSBwZXItZmlsZSBpbmRpY2VzIGludG8gcGFja2FnZSBkZXBlbmRlbmNpZXMuICovCisrICAgIG5kZGljdCA9IGFyZ3ZDb3VudChmYy0+ZGRpY3QpOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgbmRkaWN0OyBpKyspIHsKKysgIHMgPSBmYy0+ZGRpY3RbaV07CisrCisrICAvKiBQYXJzZSBvdXQgKGZpbGUjLGRlcHR5cGUsTixFVlIsRmxhZ3MpICovCisrICBpeCA9IHN0cnRvbChzLCAmc2UsIDEwKTsKKysgIGFzc2VydChzZSAhPSBOVUxMKTsKKysgIGRlcHR5cGUgPSAqc2UrKzsKKysgIHNlKys7CisrICBOID0gc2U7CisrICB3aGlsZSAoKnNlICYmICpzZSAhPSAnICcpCisrICAgICAgc2UrKzsKKysgICpzZSsrID0gJ1wwJzsKKysgIEVWUiA9IHNlOworKyAgd2hpbGUgKCpzZSAmJiAqc2UgIT0gJyAnKQorKyAgICAgIHNlKys7CisrICAqc2UrKyA9ICdcMCc7CisrICBGbGFncyA9IHN0cnRvbChzZSwgTlVMTCwgMTYpOworKworKyAgc3dpdGNoIChkZXB0eXBlKSB7CisrICBkZWZhdWx0OgorKyAgICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworKyAgY2FzZSAnUCc6ICAgCisrICAgICAgZHMgPSBycG1kc1NpbmdsZShSUE1UQUdfUFJPVklERU5BTUUsIE4sIEVWUiwgRmxhZ3MpOworKyAgICAgIHJwbWRlcFByaW50KChjaGFyICopZmMtPmZuW2l4XSwgZHMsIHN0ZG91dCk7CisrICAgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKysgICAgICBkcyA9IE5VTEw7CisrICAgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisrICBjYXNlICdSJzoKKysgICAgICBkcyA9IHJwbWRzU2luZ2xlKFJQTVRBR19SRVFVSVJFTkFNRSwgTiwgRVZSLCBGbGFncyk7CisrICAgICAgcnBtZGVwUHJpbnQoKGNoYXIgKilmYy0+Zm5baXhdLCBkcywgc3Rkb3V0KTsKKysgICAgICAodm9pZClycG1kc0ZyZWUoZHMpOworKyAgICAgIGRzID0gTlVMTDsKKysgICAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKysgIH0KKysgICAgfQorKworKyAgICBmYyA9IHJwbWZjRnJlZShmYyk7CisrCisrICAgIGVjID0gMDsKKysKKytleGl0OgorKyAgICBvcHRDb24gPSBycG1jbGlGaW5pKG9wdENvbik7CisrICAgIHJldHVybiBlYzsKKyt9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4YmQ2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbXF2X2NjX2JfZ29uZS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitycG06IGNvbXBpbGUgcnBtcXYuYyBpbnN0ZWFkIG9mIHJwbXF2LmNjCisKK1NvbWUgdmVyc2lvbnMgb2YgZ2NjLCA0LjQuNSBmb3IgZXhhbXBsZSwgd2lsbCBwdXQgYSByZWZlcmVuY2UgdG8gX19neHhfcGVyc29uYWxpdHlfdjAKK2ludG8gcnBtLm8gYW5kIHJwbWJ1aWxkLm8uICBUaGlzIG1lYW5zIHdlIG11c3QgbGluayB3aXRoIGcrKywgYW5kIHRoZSBNYWtlZmlsZSB3ZQorZ2VuZXJhdGUgZG9lcyBub3QuCisKK1NvLCBnbyBiYWNrIHRvIHVzaW5nIHJwbXF2LmMgKHdoaWNoIGlzIGN1cnJlbnRseSBpZGVudGljYWwgdG8gcnBtcXYuY2MpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCisgICBXaGVuIGxpbmtpbmcgd2l0aCBnKysgaXMgcmVhbGx5IG5lY2Vzc2FyeSwgdGhlIHVwc3RyZWFtIHBhY2thZ2Ugd2lsbCBkbyB0aGF0LgorCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEyNywxMyArMTI3LDEzIEBAIHJwbV9TT1VSQ0VTID0JCWJ1aWxkLmMKKyBycG1fTERGTEFHUyA9CQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1fTERBREQgPQkJcnBtLm8gJChteUxEQUREKQorIHJwbS5vOgkkKHRvcF9zcmNkaXIpL3JwbXF2LmMKKy0JJChDT01QSUxFKSAtRElBTV9SUE1CVCAtRElBTV9SUE1EQiAtRElBTV9SUE1FSVUgLURJQU1fUlBNSyAtRElBTV9SUE1RViAtbyAkQCAtYyAkKHRvcF9zcmNkaXIpL3JwbXF2LmNjCisrCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLURJQU1fUlBNREIgLURJQU1fUlBNRUlVIC1ESUFNX1JQTUsgLURJQU1fUlBNUVYgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCisgCisgcnBtYnVpbGRfU09VUkNFUyA9CWJ1aWxkLmMKKyBycG1idWlsZF9MREZMQUdTID0JQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtYnVpbGRfTERBREQgPQlycG1idWlsZC5vICQobXlMREFERCkKKyBycG1idWlsZC5vOiAkKHRvcF9zcmNkaXIpL3JwbXF2LmMKKy0JJChDT01QSUxFKSAtRElBTV9SUE1CVCAtbyAkQCAtYyAkKHRvcF9zcmNkaXIpL3JwbXF2LmNjCisrCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCisgCisgLlBIT05ZOglzcGxpbnQKKyBzcGxpbnQ6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3VjbGliYy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzBhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDYzIEBACitEZWZpbmUgdGhlIHgqIHdyYXBwZXJzIGZvciB1Y2xpYmMgYXMgd2VsbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtaW8vcnBtaW8uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG1pby5oCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG1pby5oCitAQCAtMjMsNyArMjMsOCBAQAorICAqLworIC8qQHsqLworICNpZiAhZGVmaW5lZChfX0xDTElOVF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgXAorLQkoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpKQorKwkoX19HTElCQ19fID4gMiB8fCAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDIpKSAmJiBcCisrCSFkZWZpbmVkKF9fVUNMSUJDX18pCisgI2RlZmluZSBVU0VfQ09PS0lFX1NFRUtfUE9JTlRFUiAxCisgdHlwZWRlZiBfSU9fb2ZmNjRfdCAJX2xpYmlvX29mZl90OworIHR5cGVkZWYgX2xpYmlvX29mZl90ICoJX2xpYmlvX3Bvc190OworSW5kZXg6IHJwbS01LjQuMTQvc3lzdGVtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3lzdGVtLmgKKysrKyBycG0tNS40LjE0L3N5c3RlbS5oCitAQCAtNDgxLDcgKzQ4MSw3IEBAIGV4dGVybiB2b2lkIG11bnRyYWNlICh2b2lkKQorICNlbmRpZiAvKiBkZWZpbmVkKF9fTENMSU5UX18pICovCisgCisgLyogTWVtb3J5IGFsbG9jYXRpb24gdmlhIG1hY3JvIGRlZnMgdG8gZ2V0IG1lYW5pbmdmdWwgbG9jYXRpb25zIGZyb20gbXRyYWNlKCkgKi8KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykKKysjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorICNkZWZpbmUJeG1hbGxvYyhfc2l6ZSkgCQkobWFsbG9jKF9zaXplKSA/IDogdm1lZmFpbChfc2l6ZSkpCisgI2RlZmluZQl4Y2FsbG9jKF9ubWVtYiwgX3NpemUpCShjYWxsb2MoKF9ubWVtYiksIChfc2l6ZSkpID8gOiB2bWVmYWlsKF9zaXplKSkKKyAjZGVmaW5lCXhyZWFsbG9jKF9wdHIsIF9zaXplKQkocmVhbGxvYygoX3B0ciksIChfc2l6ZSkpID8gOiB2bWVmYWlsKF9zaXplKSkKK0luZGV4OiBycG0tNS40LjE0L2xpYi9saWJycG0udmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvbGlicnBtLnZlcnMKKysrKyBycG0tNS40LjE0L2xpYi9saWJycG0udmVycworQEAgLTQwNSw2ICs0MDUsMTAgQEAgTElCUlBNXzAKKyAgICAgc3BlY2VkaXQ7CisgICAgIHN0cmljdF9lcmFzdXJlczsKKyAgICAgWHJwbXRzaUluaXQ7CisrICAgIHhtYWxsb2M7CisrICAgIHhyZWFsbG9jOworKyAgICB4Y2FsbG9jOworKyAgICB4c3RyZHVwOworICAgbG9jYWw6CisgICAgICo7CisgfTsKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL2xpYnJwbWlvLnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vbGlicnBtaW8udmVycworKysrIHJwbS01LjQuMTQvcnBtaW8vbGlicnBtaW8udmVycworQEAgLTEwNTYsNiArMTA1NiwxMCBAQCBMSUJSUE1JT18wCisgICAgIG1vbmdvX3dyaXRlX2NvbmNlcm5fc2V0X21vZGU7CisgICAgIG1vbmdvX3dyaXRlX2NvbmNlcm5fc2V0X3c7CisgICAgIG1vbmdvX3dyaXRlX2NvbmNlcm5fc2V0X3d0aW1lb3V0OworKyAgICB4bWFsbG9jOworKyAgICB4cmVhbGxvYzsKKysgICAgeGNhbGxvYzsKKysgICAgeHN0cmR1cDsKKyAgIGxvY2FsOgorICAgICAqOworIH07CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS92ZXJpZnktZml4LWJyb2tlbi1sb2dpYy1mb3ItZ2hvc3QtYXZvaWRhbmNlLU1hcmstSGF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTA0NWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDllN2I3MmVlMGM5OTQ2MDk5NzU5ODFlMTM1ZmMxOGQwMzg3YWVmYjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBqYmogPGpiaj4KK0RhdGU6IFdlZCwgMTQgTWF5IDIwMTQgMjE6MTk6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gLSB2ZXJpZnk6IGZpeDogYnJva2VuIGxvZ2ljIGZvciAlZ2hvc3QgYXZvaWRhbmNlIChNYXJrCisgSGF0bGUpLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIENIQU5HRVMgICAgICB8IDEgKworIGxpYi92ZXJpZnkuYyB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBycG0tNS40LjE0L0NIQU5HRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvQ0hBTkdFUworKysrIHJwbS01LjQuMTQvQ0hBTkdFUworQEAgLTEsMyArMSw1IEBACisrICAgIC0gamJqOiB2ZXJpZnk6IGZpeDogYnJva2VuIGxvZ2ljIGZvciAlZ2hvc3QgYXZvaWRhbmNlIChNYXJrIEhhdGxlKS4KKysKKyA1LjQuMTMgLT4gNS40LjE0OgorICAgICAtIG1vb25leTogdXNlIF9fc3VuIGluc3RlYWQgb2YgX19zdW5fXyBpbiAjZGVmaW5lIChscCMxMjQzNDcyKS4KKyAgICAgLSBtb29uZXk6IHJwbWNvbnN0YW50OiBlbnN1cmUgbGlua2FnZSB3IE9yYWNsZSBTdHVkaW8gMTIuMyAobHAjMTI0MzQ2OSkuCitJbmRleDogcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3ZlcmlmeS5jCisrKysgcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKK0BAIC01ODgsOCArNTg4LDcgQEAgdWludDMyX3QgZmMgPSBycG1maUZDKGZpKTsKKyAJICAgIGNvbnRpbnVlOworIAorIAkvKiBJZiBub3QgdmVyaWZ5aW5nICVnaG9zdCwgc2tpcCBnaG9zdCBmaWxlcy4gKi8KKy0JLyogWFhYIHRoZSBicm9rZW4hISEgbG9naWMgZGlzYWJsZXMgJWdob3N0IHF1ZXJpZXMgYWx3YXlzLiAqLworLQlpZiAoIShGRl9JU1NFVChxdmEtPnF2YV9mZmxhZ3MsIEdIT1NUKSAmJiBGRl9JU1NFVChmZmxhZ3MsIEdIT1NUKSkpCisrCWlmICghRkZfSVNTRVQocXZhLT5xdmFfZmZsYWdzLCBHSE9TVCkgJiYgRkZfSVNTRVQoZmZsYWdzLCBHSE9TVCkpCisgCSAgICBjb250aW51ZTsKKyAKKyAJLyogR2F0aGVyIHBlci1maWxlIGRhdGEgaW50byBhIGNhcnJpZXIuICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwYzk0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzQuMTEuMi5iYgpAQCAtMCwwICsxLDEzNyBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCitkZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCittYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAorc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKK290aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKK3RvIGZ1bmN0aW9uLiIKKworU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucnBtLm9yZyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID8/PSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworREVQRU5EUyA9ICJkYiBsaWJ4bWwyIHh6IGZpbmR1dGlscyBmaWxlIHBvcHQgbnNzIGJ6aXAyIGVsZnV0aWxzIHBhdGNoIGF0dHIgemxpYiBhY2wgZ3ppcCBtYWtlIGJpbnV0aWxzIHB5dGhvbiIKKworU1JDX1VSSSArPSAiaHR0cDovL3JwbS5vcmcvcmVsZWFzZXMvcnBtLTQuMTEueC8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF9SUE1TRU5TRV9NSVNTSU5HT0tfdG9fcnBtbW9kdWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWRpci1jaGVjay5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4X2xpYmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnBtLXNjcmlwdGV0ZXhlY2hlbHAucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3B5dGhvbmRlcHMuc2ggXAorICAgICAgICAgICAgZmlsZTovL3JwbS1DVkUtMjAxNC04MTE4LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3NmFjOTk0OGE4ODM2NzA1NGY4ZGRiNWMwZTg3MTczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQwM2Y4ZGU2MzJiMzM4NDZjZTU3NDZmNDI5YzIxYTYwZjQwZGZmOWRjYjU2ZjFiNDExOGYzN2EwNjUyYTQ4ZDQiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworaW5oZXJpdCBweXRob25uYXRpdmUKK2luaGVyaXQgcGtnY29uZmlnCitpbmhlcml0IGdldHRleHQKKworRVhUUkFfT0VDT05GICs9ICItLWhvc3Q9JHtIT1NUX1NZU30gXAorICAgICAgICAgICAgICAgICAtLXByb2dyYW0tcHJlZml4PSBcCisgICAgICAgICAgICAgICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgIC0tZXhlYy1wcmVmaXg9JHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAgLS1iaW5kaXI9JHtwcmVmaXh9L2JpbiBcCisgICAgICAgICAgICAgICAgIC0tc2JpbmRpcj0ke3ByZWZpeH0vc2JpbiBcCisgICAgICAgICAgICAgICAgIC0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS1kYXRhZGlyPSR7cHJlZml4fS9zaGFyZSBcCisgICAgICAgICAgICAgICAgIC0taW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgIC0tbGliZGlyPSR7cHJlZml4fS9saWIgXAorICAgICAgICAgICAgICAgICAtLWxpYmV4ZWNkaXI9JHtwcmVmaXh9L2xpYmV4ZWMgXAorICAgICAgICAgICAgICAgICAtLWxvY2Fsc3RhdGVkaXI9JHtsb2NhbHN0YXRlZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tc2hhcmVkc3RhdGVkaXI9JHtwcmVmaXh9L2NvbSBcCisgICAgICAgICAgICAgICAgIC0tbWFuZGlyPSR7bWFuZGlyfSBcCisgICAgICAgICAgICAgICAgIC0taW5mb2Rpcj0ke2luZm9kaXJ9IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtYWNsIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1jYXAgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1weXRob24gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXh0ZXJuYWwtZGIgXAorICAgICAgICAgICAgICAgICIKKworQ1BQRkxBR1NfYXBwZW5kID0gIiBgcGtnLWNvbmZpZyAtLWNmbGFncyBuc3NgIgorTERGTEFHU19hcHBlbmQgPSAiIC1XbCwtQnN5bWJvbGljLWZ1bmN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIgorQ0NGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKK0NYWEZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBybSAtcmYgc3FsaXRlCisgICAgcm0gLWYgbTQvbGlidG9vbC5tNAorICAgIHJtIC1mIG00L2x0Ki5tNAorICAgIHJtIC1yZiBkYjMvY29uZmlndXJlKgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBtdiAke0R9LyR7YmFzZV9iaW5kaXJ9L3JwbSAke0R9LyR7YmluZGlyfS8KKyAgICBybWRpciAke0R9LyR7YmFzZV9iaW5kaXJ9CisgICAgcm0gLWYgJHtEfSR7cHJlZml4fS9saWIvKi5sYQorICAgIHJtIC1mICR7RH0ke3ByZWZpeH0vbGliL3JwbS1wbHVnaW5zLyoubGEKKyAgICBybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi57YSxsYX0KKyAgICBybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoue2EsbGF9CisgICAgcm0gLWZyICR7RH0vdmFyCisgICAgaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluCisgICAgbG4gLXMgLi4vZGVidWdlZGl0ICR7RH0ke3ByZWZpeH0vbGliL3JwbS9iaW4vZGVidWdlZGl0CisgICAgbG4gLXMgLi4vcnBtZGVwcyAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorfQorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisKKyAgICBbICJ4XCREIiA9PSAieCIgXSAmJiBsZGNvbmZpZworICAgIHRlc3QgLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL1BhY2thZ2VzIHx8IHJwbSAtLWluaXRkYgorICAgIHJtIC1mICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9GaWxlbWQ1cyBcCisgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL0ZpbGVkaWdlc3RzIFwKKyAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vUmVxdWlyZXZlcnNpb24gXAorICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9Qcm92aWRldmVyc2lvbgorCit9CisKK3BrZ19wb3N0cm1fJHtQTn0oKSB7CisgICAgWyAieFwkRCIgPT0gIngiIF0gJiYgbGRjb25maWcKKworfQorCitQQUNLQUdFUyArPSAicHl0aG9uLSR7UE59IgorUFJPVklERVMgKz0gInB5dGhvbi1ycG0iCisKK0ZJTEVTXyR7UE59ICs9ICAiJHtsaWJkaXJ9L3JwbSBcCisgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ycG0tcGx1Z2lucy9leGVjLnNvIFwKKyAgICAgICAgICAgICAgICAiCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIHJ1bi1wb3N0aW5zdHMiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnBtLXBsdWdpbnMvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvcnBtLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8qLmxhIgorCitGSUxFU19weXRob24tJHtQTn0gPSAiJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8qIgorUkRFUEVORFNfcHl0aG9uLSR7UE59ID0gIiR7UE59IHB5dGhvbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTAzZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYgpAQCAtMCwwICsxLDUyOCBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1NVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCitERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCithbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAordGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtLWRldiA9ICJEZXZlbG9wbWVudCBjb21wb25lbnRzIGZvciBwZXJsIGJpbmRpbmdzIgorREVTQ1JJUFRJT05fcGVybC1tb2R1bGVzLXJwbS1kZXYgPSAiRGV2ZWxvcG1lbnQgaXRlbXMgc3VjaCBhcyBtYW4gcGFnZXMgZm9yIHVzZSB3aXRoIHRoZSBQZXJsIFwKK2xhbmd1YWdlIGJpbmRpbmdzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK0RFUEVORFMgPSAibGlicGNyZSBhdHRyIGFjbCBwb3B0IG9zc3AtdXVpZCBmaWxlIGJ5YWNjLW5hdGl2ZSIKKworUyA9ICIke1dPUktESVJ9L3JwbSIKKworIyBBcHBseSB2YXJpb3VzIGZpeHVwcyB0aGF0IGFyZSB1bmlxdWUgdG8gdGhlIENWUyBlbnZpcm9ubWVudAorZG9fZml4dXBfdW5wYWNrICgpIHsKKwlsbiAtc2YgLi4vc3ljayAke1N9L3N5Y2sgfHwgOgorCWxuIC1zZiAuLi9sdWEgJHtTfS9sdWEgfHwgOgorCWxuICR7U30vcnBtcXYuYyAke1N9L3JwbXF2LmNjIHx8IDoKK30KKworYWRkdGFzayBmaXh1cF91bnBhY2sgYWZ0ZXIgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorCisjIFRoaXMgcmVjaXBlIGlzIHJlYWxseSBkZXNpZ25lZCBmb3IgZGV2ZWxvcG1lbnQuLi4gdG8gVHJ5IG91dCB0aGUgbGF0ZXN0CisjIGNvbW11bml0eSB3b3JrIGluIHByb2dyZXNzLgorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCisjIHJwbTJjcGlvIGlzIGEgc2hlbGwgc2NyaXB0LCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBycG0gc3JjLnJwbS4gIEl0IGlzIG5lZWRlZAorIyBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBkaXN0cmlidXRpb24gU1JQTSBpbnRvIGEgZm9ybWF0IHdlIGNhbiBleHRyYWN0Li4uCitTUkNfVVJJID0gImN2czovL2Fub255bW91c0BycG01Lm9yZy9jdnM7dGFnPXJwbS01XzQ7bW9kdWxlPXJwbSBcCisJICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9c3ljayBcCisJICAgY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9bHVhIFwKKwkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCisJICAgZmlsZTovL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxpYnNxbC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZmlsZWNsYXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVzb2x2ZWRlcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1wZXJsLXVycG0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vc3NwLXV1aWQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKKwkgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1hdGNoLnBhdGNoIFwKKwkgICBmaWxlOi8vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0yLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC1zZWd2LnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpeC1sb2dpby1jcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYjUtb3ItZGI2LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJwbXBncC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWFscGF0aC5wYXRjaCBcCisJICAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgcGxhdGZvcm0gc2NvcmUgZGVidWdnaW5nCisjIFRoaXMgaXMgdXNlZnVsIHdoZW4gaWRlbnRpZnlpbmcgaXNzdWVzIHdpdGggU21hcnQgYmVpbmcgdW5hYmxlCisjIHRvIHByb2Nlc3MgY2VydGFpbiBwYWNrYWdlIGZlZWRzLgorI1NSQ19VUkkgKz0gImZpbGU6Ly9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworYWNwYXRocyA9ICItSSAke1N9L2RiL2Rpc3QvYWNsb2NhbCAtSSAke1N9L2RiL2Rpc3QvYWNsb2NhbF9qYXZhIgorCisjIFNwZWNpZnkgdGhlIGRlZmF1bHQgcnBtIG1hY3JvcyBpbiB0ZXJtcyBvZiBhZGp1c3RhYmxlIHZhcmlhYmxlcworcnBtX21hY3JvcyA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19L3Bva3kvbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlc2RrID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorCisjIHNxbGl0ZSBsdWEgdGNsIGF1Z2VhcyBuc3MgZ2NyeXB0IG5lb24geHogeGFyIGtleXV0aWxzIHBlcmwgc2VsaW51eAorCisjIE5vdGU6IHBlcmwgYW5kIHNxbGl0ZSB3L28gZGIgc3BlY2lmaWVkIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrLgorIyAgICAgICB0Y2wsIGF1Z2VhcywgbnNzLCBnY3J5cHQsIHhhciBhbmQga2V5dXRpbHMgc3VwcG9ydCBpcyB1bnRlc3RlZC4KK1BBQ0tBR0VDT05GSUcgPz89ICJkYiBiemlwMiB6bGliIGJlZWNyeXB0IG9wZW5zc2wgbGliZWxmIHB5dGhvbiIKKworUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS13aXRoLWJ6aXAyLC0td2l0aG91dC1iemlwMixiemlwMiwiCitQQUNLQUdFQ09ORklHW3h6XSA9ICItLXdpdGgteHosLS13aXRob3V0LXh6LHh6LCIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsLS13aXRob3V0LXpsaWIsemxpYiwiCitQQUNLQUdFQ09ORklHW3hhcl0gPSAiLS13aXRoLXhhciwtLXdpdGhvdXQteGFyLHhhciwiCisKK1dJVEhfUFlUSE9OID0gIiAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24taW5jLWRpcj0ke1NUQUdJTkdfSU5DRElSfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWxpYi1kaXI9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzIFwKKwkJLS13aXRob3V0LXB5dGhvbmVtYmVkIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiR7V0lUSF9QWVRIT059LC0td2l0aG91dC1weXRob24scHl0aG9uLCIKKworIyBQZXJsIG1vZHVsZXMgYXJlIG5vdCBidWlsdCwgYnV0IHRoZXkgY291bGQgYmUgZW5hYmxlZCBmYWlybHkgZWFzaWx5CisjIHRoZSBwZXJsIG1vZHVsZSBjcmVhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgcGF0Y2hlZC4KKyMgKGN1cnJlbnRseSBoYXMgaG9zdCBwZXJsIGNvbnRhbWluYXRpb24gaXNzdWVzKQorV0lUSF9QRVJMID0gIi0td2l0aC1wZXJsIC0td2l0aG91dC1wZXJsZW1iZWQgLS13aXRob3V0LXBlcmwtdXJwbSIKK1dJVEhPVVRfUEVSTCA9ICItLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC11cnBtIgorUEFDS0FHRUNPTkZJR1twZXJsXSA9ICIke1dJVEhfUEVSTH0sJHtXSVRIT1VUX1BFUkx9LHBlcmwsIgorCisjIFRoZSAtLXdpdGgtZGJzcWwgd2lsbCBvbmx5IHRlbGwgUlBNIHRvIGNoZWNrIGZvciBzdXBwb3J0LCBkYgorIyBtYXkgb3IgbWF5IG5vdCBiZSBidWlsdCB3LyB0aGUgZGJzcWwgc3VwcG9ydC4KK1dJVEhfREIgPSAiLS13aXRoLWRiIC0td2l0aC1kYnNxbCAtLXdpdGhvdXQtZGItdG9vbHMtaW50ZWdyYXRlZCIKK1BBQ0tBR0VDT05GSUdbZGJdID0gIiR7V0lUSF9EQn0sLS13aXRob3V0LWRiLGRiLCIKKworUEFDS0FHRUNPTkZJR1tzcWxpdGVdID0gIi0td2l0aC1zcWxpdGUsLS13aXRob3V0LXNxbGl0ZSxzcWxpdGUzLCIKKworUEFDS0FHRUNPTkZJR1tiZWVjcnlwdF0gPSAiLS13aXRoLWJlZWNyeXB0PWV4dGVybmFsLC0td2l0aG91dC1iZWVjcnlwdCxiZWVjcnlwdCwiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLC0td2l0aG91dC1vcGVuc3NsLG9wZW5zc2wsIgorUEFDS0FHRUNPTkZJR1tuc3NdID0gIi0td2l0aC1uc3MsLS13aXRob3V0LW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1tnY3J5cHRdID0gIi0td2l0aC1nY3J5cHQsLS13aXRob3V0LWdjcnlwdCxnY3J5cHQsIgorUEFDS0FHRUNPTkZJR1trZXl1dGlsc10gPSAiLS13aXRoLWtleXV0aWxzLC0td2l0aG91dC1rZXl1dGlscyxrZXl1dGlscywiCitQQUNLQUdFQ09ORklHW2xpYmVsZl0gPSAiLS13aXRoLWxpYmVsZiwtLXdpdGhvdXQtbGliZWxmLGVsZnV0aWxzLCIKKworV0lUSF9TRUxJTlVYID0gIi0td2l0aC1zZWxpbnV4IC0td2l0aC1zZXBvbCAtLXdpdGgtc2VtYW5hZ2UiCitXSVRIT1VUX1NFTElOVVggPSAiLS13aXRob3V0LXNlbGludXggLS13aXRob3V0LXNlcG9sIC0td2l0aG91dC1zZW1hbmFnZSIKK1BBQ0tBR0VDT05GSUdbc2VsaW51eF0gPSAiJHtXSVRIX1NFTElOVVh9LCR7V0lUSE9VVF9TRUxJTlVYfSxsaWJzZWxpbnV4LCIKKworV0lUSF9ORU9OID0gIi0td2l0aC1uZW9uIC0td2l0aC1saWJwcm94eSAtLXdpdGgtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1dJVEhPVVRfTkVPTiA9ICItLXdpdGhvdXQtbmVvbiAtLXdpdGhvdXQtbGlicHJveHkgLS13aXRob3V0LWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitQQUNLQUdFQ09ORklHW25lb25dID0gIiR7V0lUSF9ORU9OfSwke1dJVEhPVVRfTkVPTn0sbmVvbiBleHBhdCwiCisKK1BBQ0tBR0VDT05GSUdbbHVhXSA9ICItLXdpdGgtbHVhLC0td2l0aG91dC1sdWEsZXhwYXQsIgorUEFDS0FHRUNPTkZJR1t0Y2xdID0gIi0td2l0aC10Y2wsLS13aXRob3V0LXRjbCx0Y2wsIgorCitQQUNLQUdFQ09ORklHW2F1Z2Vhc10gPSAiLS13aXRoLWF1Z2VhcywtLXdpdGhvdXQtYXVnZWFzLGF1Z2VhcywiCisKK0VYVFJBX09FQ09ORiArPSAiLS12ZXJib3NlIFwKKwkJLS1zeXNjb25mZGlyPSR7c3lzY29uZmRpcn0gXAorCQktLXdpdGgtZmlsZSBcCisJCS0td2l0aC1wYXRoLW1hZ2ljPSV7X3VzcmxpYnJwbX0vLi4vLi4vc2hhcmUvbWlzYy9tYWdpYy5tZ2MgXAorCQktLXdpdGgtc3ljaz1pbnRlcm5hbCBcCisJCS0td2l0aG91dC1yZWFkbGluZSBcCisJCS0td2l0aG91dC1saWJ0YXNuMSBcCisJCS0td2l0aG91dC1wYWtjaG9pcyBcCisJCS0td2l0aG91dC1nbnV0bHMgXAorCQktLXdpdGgtcGNyZSBcCisJCS0tZW5hYmxlLXV0ZjggXAorCQktLXdpdGgtdXVpZCBcCisJCS0td2l0aC1hdHRyIFwKKwkJLS13aXRoLWFjbCBcCisJCS0td2l0aC1wb3B0PWV4dGVybmFsIFwKKwkJLS13aXRoLXB0aHJlYWRzIFwKKwkJLS13aXRob3V0LWN1ZGYgXAorCQktLXdpdGhvdXQtZmljbCBcCisJCS0td2l0aG91dC1hdGVybSBcCisJCS0td2l0aG91dC1uaXggXAorCQktLXdpdGhvdXQtYmFzaCBcCisJCS0td2l0aG91dC1yYyBcCisJCS0td2l0aG91dC1qcyBcCisJCS0td2l0aG91dC1ncHNlZSBcCisJCS0td2l0aG91dC1ydWJ5IFwKKwkJLS13aXRob3V0LXNxdWlycmVsIFwKKwkJLS13aXRoLWJ1aWxkLWV4dGxpYmRlcCBcCisJCS0td2l0aC1idWlsZC1tYXhleHRsaWJkZXAgXAorCQktLXdpdGhvdXQtdmFsZ3JpbmQgXAorCQktLWRpc2FibGUtb3Blbm1wIFwKKwkJLS1lbmFibGUtYnVpbGQtcGljIFwKKwkJLS1lbmFibGUtYnVpbGQtdmVyc2lvbnNjcmlwdCBcCisJCS0tZW5hYmxlLWJ1aWxkLXdhcm5pbmdzIFwKKwkJLS1lbmFibGUtYnVpbGQtZGVidWcgXAorCQktLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgXAorCQktLXdpdGgtcGF0aC1tYWNyb3M9JHtycG1fbWFjcm9zfSBcCisJCS0td2l0aC1wYXRoLWxpYj0ke2xpYmRpcn0vcnBtIFwKKwkJLS13aXRoLWJ1Z3JlcG9ydD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZyBcCisJCS0tcHJvZ3JhbS1wcmVmaXg9IFwKKwkJWUFDQz1ieWFjYyIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLURSUE1fVkVORE9SX1dJTkRSSVZFUiAtRFJQTV9WRU5ET1JfUE9LWSAtRFJQTV9WRU5ET1JfT0UiCisKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIi1scnQgLWxwdGhyZWFkIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jICR7UE59LWxpYnMgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1jb21tb24gJHtQTn0tYnVpbGQgcHl0aG9uLXJwbS1kYmcgcHl0aG9uLXJwbS1zdGF0aWNkZXYgcHl0aG9uLXJwbS1kZXYgcHl0aG9uLXJwbSBwZXJsLW1vZHVsZS1ycG0gcGVybC1tb2R1bGUtcnBtLWRldiAke1BOfS1sb2NhbGUiCisKK1NPTElCUyA9ICI1LjQuc28iCisKKyMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCisKK0ZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCisJCSR7bGliZGlyfS9ycG0vdGdwZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCisJCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKKwkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9xZiBcCisJCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAorCQkke2JpbmRpcn0vcnBtLnJlYWwgXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCisJCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKKwkJIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vLmRlYnVnIFwKKwkJIgorCitGSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJJHtiaW5kaXJ9L2dlbmRpZmYgXAorCQkke3N5c2NvbmZkaXJ9L3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKKwkJIgorCitGSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCisJCSIKKworRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAorCQkke2JpbmRpcn0vcnBtYnVpbGQgXAorCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYnJwLSogXAorCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAorCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJCSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCisKK1JERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0iCisKK0ZJTEVTX3B5dGhvbi1ycG0tZGJnID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLy5kZWJ1Zy9fKiIKK0ZJTEVTX3B5dGhvbi1ycG0tZGV2ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyoubGEiCitGSUxFU19weXRob24tcnBtLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmEiCitGSUxFU19weXRob24tcnBtID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0gPSAiJHtsaWJkaXJ9L3BlcmwvKi8qIFwKKwkJIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0tZGV2ID0gIiR7cHJlZml4fS9zaGFyZS9tYW4vbWFuMy9SUE0qIFwKKwkJIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9L3JwbSBcCisJCSR7bGliZGlyfS9saWJycG0ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MubGEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5zbyBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5sYSBcCisJCSR7bGliZGlyfS9wa2djb25maWcvcnBtLnBjIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1kYl9sb2FkY3Z0IFwKKwkJIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MuYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5hIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmEgXAorCQkiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIERpc2FibGUgdGVzdHMhCisJZWNobyAiYWxsOiIgPiAke1N9L3Rlc3RzL01ha2VmaWxlLmFtCisJc2VkIC1lICdzL0BfX01LRElSX1BALyV7X19ta2Rpcn0gLXAvJyAtaSAke1N9L21hY3Jvcy9tYWNyb3MuaW4KKworCSggY2QgJHtTfTsgJHtTfS9hdXRvZ2VuLnNoICkKKworCSMgTkFTVFkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIGZpbGVzIHRoZSByaWdodCBwa2ctY29uZmlnIGZpbGUuLi4KKwlzZWQgLWUgJ3MvcGtnLWNvbmZpZyAtLWV4aXN0cyB1dWlkL3BrZy1jb25maWcgLS1leGlzdHMgb3NzcC11dWlkL2cnIFwKKwkgICAgLWUgJ3MvcGtnLWNvbmZpZyB1dWlkL3BrZy1jb25maWcgb3NzcC11dWlkL2cnIC1pICR7U30vY29uZmlndXJlCisKKwkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IG1ha2UgZGlzdGNsZWFuICkgfHwgOgorCisJZXhwb3J0IHZhcnByZWZpeD0ke2xvY2Fsc3RhdGVkaXJ9CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MsJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCMlJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncywlX19wZXJsX3Byb3ZpZGVzLCMlJV9fcGVybF9wcm92aWRlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9yZXF1aXJlcywjJSVfX3BlcmxfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlc1teX10uKiwlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXMgMCwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsXiMlX29wZW5hbGxfYmVmb3JlX2Nocm9vdC4qLCVfb3BlbmFsbF9iZWZvcmVfY2hyb290XHQxLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJIyBFbmFibGUgRGViaWFuIHN0eWxlIGFyYml0cmFyeSB0YWdzLi4uCisJc2VkIC1pIC1lICdzLCVfYXJiaXRyYXJ5X3RhZ3NbXl9dLiosJV9hcmJpdHJhcnlfdGFncyAle19hcmJpdHJhcnlfdGFnc19kZWJpYW59LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BlcmZpbGVfcnBtZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCisKKwkjIFJlbW92ZSB1bnBhY2thZ2VkIGZpbGVzIChiYXNlZCBvbiBsaXN0IGluIHJwbS5zcGVjKQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS97U3BlY2ZpbGUucG0sY3BhbmZsdXRlLGNwYW5mbHV0ZTIscnBtZGlmZixycG1kaWZmLmNnaSxzcWwucHJvdixzcWwucmVxLHRjbC5yZXEsdHJwbX0KKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWdyYXBoLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWdyYXBoLjgqCisJcm0gLXJmICR7RH0vJHttYW5kaXJ9L3tmcixrb30KKworCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9wb3B0LmgKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJwb3B0LioKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvcG9wdC5wYworCXJtIC1mICR7RH0vJHtkYXRhZGlyfS9sb2NhbGUvKi9MQ19NRVNTQUdFUy9wb3B0Lm1vCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMy9wb3B0LjMKKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEveGFyLjEqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veGFyCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS94YXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJ4YXIqCisKKwlybSAtZiAke0R9LyR7YmluZGlyfS9seioKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bmx6bWEKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bnh6CisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veHoqCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS9sem1hKgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEvbHoqLjEKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlibHptYSoKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLnthLGxhfQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi57YSxsYX0KKworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAorCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKKworCSMgV2UgZG9uJ3Qgd2FudCB0aGUgZGVmYXVsdCBtYWNybyBzZXQKKwlybSAtcmYgJHtEfS8ke2xpYmRpcn0vcnBtL3tpWzM0NTZdODYqLGF0aGxvbioscGVudGl1bSoseDg2XzY0KixhbHBoYSosc3BhcmMqLGlhNjQqLHBwYyosczM5MCosYXJtdlszNF1bbGJdKixhcm12WzM0NV0qLG1pcHMqLG5vYXJjaCp9CisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgorCisJIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAorCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2ttb2QtZGVwcy5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25lZ2dzLnB5CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2tlcm5lbAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9nc3RyZWFtZXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL21nbworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGJjb252ZXJ0CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9wb20yc3BlYworCisJcm0gLXJmICR7RH0vdmFyL2xpYi93ZGogJHtEfS92YXIvY2FjaGUvd2RqCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWNoZWNrZXIucGwKKworfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbSBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtYnVpbGQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisJZm9yIHJwbV9iaW5hcnkgaW4gJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9ycG0qICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0OyBkbworICAgICAgICAJY3JlYXRlX3dyYXBwZXIgJHJwbV9iaW5hcnkgXAorCQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKwlkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5YTRiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYgpAQCAtMCwwICsxLDUxNiBAQAorU1VNTUFSWSA9ICJUaGUgUlBNIHBhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJUaGUgUlBNIFBhY2thZ2UgTWFuYWdlciAoUlBNKSBpcyBhIHBvd2VyZnVsIGNvbW1hbmQgbGluZSBkcml2ZW4gXAorcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSBjYXBhYmxlIG9mIGluc3RhbGxpbmcsIHVuaW5zdGFsbGluZywgXAordmVyaWZ5aW5nLCBxdWVyeWluZywgYW5kIHVwZGF0aW5nIHNvZnR3YXJlIHBhY2thZ2VzLiBFYWNoIHNvZnR3YXJlIFwKK3BhY2thZ2UgY29uc2lzdHMgb2YgYW4gYXJjaGl2ZSBvZiBmaWxlcyBhbG9uZyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFwKK3RoZSBwYWNrYWdlIGxpa2UgaXRzIHZlcnNpb24sIGEgZGVzY3JpcHRpb24sIGV0Yy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIjUuNC4xNSBoYXMgYSBwYWNrYWdlIGRhdGFiYXNlIGlzc3VlOiBodHRwOi8vbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9waXBlcm1haWwvb3BlbmVtYmVkZGVkLWNvcmUvMjAxNS1BdWd1c3QvMTA5MTg3Lmh0bWwiCisKK1NVTU1BUllfJHtQTn0tbGlicyA9ICJMaWJyYXJpZXMgZm9yIG1hbmlwdWxhdGluZyBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1saWJzID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIHNoYXJlZCBsaWJyYXJpZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfJHtQTn0tY29tbW9uID0gIkNvbW1vbiBSUE0gcGF0aHMsIHNjcmlwdHMsIGRvY3VtZW50YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24iCitERVNDUklQVElPTl8ke1BOfS1jb21tb24gPSAiVGhlIHJwbS1jb21tb24gcGFja2FnZSBjb250YWlucyBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBcCithbmQgY29uZmlndXJhdGlvbiBjb21tb24gYmV0d2VlbiBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV8ke1BOfS1idWlsZCA9ICJTY3JpcHRzIGFuZCBleGVjdXRhYmxlIHByb2dyYW1zIHVzZWQgdG8gYnVpbGQgcGFja2FnZXMiCitERVNDUklQVElPTl8ke1BOfS1idWlsZCA9ICJUaGUgcnBtLWJ1aWxkIHBhY2thZ2VjIG9udGFpbnMgdGhlIHNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgXAordGhhdCBhcmUgdXNlZCB0byBidWlsZCBwYWNrYWdlcyB1c2luZyB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlci4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitTVU1NQVJZX3BlcmwtbW9kdWxlLXJwbSA9ICJQZXJsIGJpbmRpbmdzIGZvciBhcHBzIHdoaWNoIHdpbGwgbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtID0gIlRoZSBwZXJsLW1vZHVsZXMtcnBtIHBhY2thZ2UgY29udGFpbnMgYSBtb2R1bGUgdGhhdCBwZXJtaXRzIGFwcGxpY2F0aW9ucyBcCit3cml0dGVuIGluIHRoZSBQZXJsIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImxpYnBjcmUgYXR0ciBhY2wgcG9wdCBvc3NwLXV1aWQgZmlsZSBieWFjYy1uYXRpdmUiCisKKyMgcnBtMmNwaW8gaXMgYSBzaGVsbCBzY3JpcHQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJwbSBzcmMucnBtLiAgSXQgaXMgbmVlZGVkCisjIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGRpc3RyaWJ1dGlvbiBTUlBNIGludG8gYSBmb3JtYXQgd2UgY2FuIGV4dHJhY3QuLi4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ycG01Lm9yZy9maWxlcy9ycG0vcnBtLTUuNC9ycG0tNS40LjE0LTAuMjAxMzEwMjQuc3JjLnJwbTtleHRyYWN0PXJwbS01LjQuMTQudGFyLmd6IFwKKwkgICBmaWxlOi8vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiLXJlZHVjZS5wYXRjaCBcCisJICAgZmlsZTovL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJICAgZmlsZTovL3JwbS1hdXRvZ2VuLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWxpYnNxbC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2hvd3JjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZmlsZWNsYXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNhbm9uYXJjaC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1sb29wbXNnLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtZGVwcy1vZWNvcmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVzb2x2ZWRlcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1uby1wZXJsLXVycG0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbWFjcm9zLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWx1YS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1vc3NwLXV1aWQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGFja2FnZW9yaWdpbi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wa2djb25maWdkZXBzLnBhdGNoIFwKKwkgICBmaWxlOi8vdWNsaWJjLXN1cHBvcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1hdGNoLnBhdGNoIFwKKwkgICBmaWxlOi8vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9kYmNvbnZlcnQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdXVpZC1pbmNsdWRlLnBhdGNoIFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtYW0tZXhlYy1ob29rLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1weS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcHl0aG9uLXJwbS1ycG1zZW5zZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZWxvYy1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0yLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBcCisJICAgZmlsZTovL2RlYnVnZWRpdC1zZWd2LnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHNiLWNvbXBhdGliaWxpdHkucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0taGFyZGxpbmstc2VnZmF1bHQtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maXgtbG9naW8tY3AucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGI1LW9yLWRiNi5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtcXZfY2NfYl9nb25lLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlYWxwYXRoLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoIFwKKwkgICBmaWxlOi8vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLWZpeC1wcmludC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MuaW4tZGlzYWJsZS1leHRlcm5hbC1rZXktc2VydmVyLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2ggXAorCSAgIgorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIHBsYXRmb3JtIHNjb3JlIGRlYnVnZ2luZworIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nIGlzc3VlcyB3aXRoIFNtYXJ0IGJlaW5nIHVuYWJsZQorIyB0byBwcm9jZXNzIGNlcnRhaW4gcGFja2FnZSBmZWVkcy4KKyNTUkNfVVJJICs9ICJmaWxlOi8vcnBtLWRlYnVnLXBsYXRmb3JtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjUwOTNkMzk5YTBiNWQxMzQyZDI0OTAwYTkxYjM0N2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjc2ZTNhYjQxZjcyZTNiNTA0ZTA0MTA5Y2ZiNTY1YTMwMDc0MmY1NmE3ZGEwODRmMjAyMDEzYjMwZWVhZTQ2NyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vZGIvZGlzdC9hY2xvY2FsIC1JICR7U30vZGIvZGlzdC9hY2xvY2FsX2phdmEiCisKKyMgU3BlY2lmeSB0aGUgZGVmYXVsdCBycG0gbWFjcm9zIGluIHRlcm1zIG9mIGFkanVzdGFibGUgdmFyaWFibGVzCitycG1fbWFjcm9zID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczole19ldGNycG19L21hY3Jvcy4qOiV7X2V0Y3JwbX0vbWFjcm9zOiV7X2V0Y3JwbX0vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZSA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCitycG1fbWFjcm9zX2NsYXNzLW5hdGl2ZXNkayA9ICIle191c3JsaWJycG19L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCisKKyMgc3FsaXRlIGx1YSB0Y2wgYXVnZWFzIG5zcyBnY3J5cHQgbmVvbiB4eiB4YXIga2V5dXRpbHMgcGVybCBzZWxpbnV4CisKKyMgTm90ZTogcGVybCBhbmQgc3FsaXRlIHcvbyBkYiBzcGVjaWZpZWQgZG9lcyBub3QgY3VycmVudGx5IHdvcmsuCisjICAgICAgIHRjbCwgYXVnZWFzLCBuc3MsIGdjcnlwdCwgeGFyIGFuZCBrZXl1dGlscyBzdXBwb3J0IGlzIHVudGVzdGVkLgorUEFDS0FHRUNPTkZJRyA/Pz0gImRiIGJ6aXAyIHpsaWIgYmVlY3J5cHQgb3BlbnNzbCBsaWJlbGYgcHl0aG9uIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC14eiwtLXdpdGhvdXQteHoseHosIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbeGFyXSA9ICItLXdpdGgteGFyLC0td2l0aG91dC14YXIseGFyLCIKKworV0lUSF9QWVRIT04gPSAiIC0td2l0aC1weXRob249JHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1pbmMtZGlyPSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24tbGliLWRpcj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMgXAorCQktLXdpdGhvdXQtcHl0aG9uZW1iZWQiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiJHtXSVRIX1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24sIgorCisjIFBlcmwgbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBidXQgdGhleSBjb3VsZCBiZSBlbmFibGVkIGZhaXJseSBlYXNpbHkKKyMgdGhlIHBlcmwgbW9kdWxlIGNyZWF0aW9uIGFuZCBpbnN0YWxsYXRpb24gd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLgorIyAoY3VycmVudGx5IGhhcyBob3N0IHBlcmwgY29udGFtaW5hdGlvbiBpc3N1ZXMpCitXSVRIX1BFUkwgPSAiLS13aXRoLXBlcmwgLS13aXRob3V0LXBlcmxlbWJlZCAtLXdpdGhvdXQtcGVybC11cnBtIgorV0lUSE9VVF9QRVJMID0gIi0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLXVycG0iCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiR7V0lUSF9QRVJMfSwke1dJVEhPVVRfUEVSTH0scGVybCwiCisKKyMgVGhlIC0td2l0aC1kYnNxbCB3aWxsIG9ubHkgdGVsbCBSUE0gdG8gY2hlY2sgZm9yIHN1cHBvcnQsIGRiCisjIG1heSBvciBtYXkgbm90IGJlIGJ1aWx0IHcvIHRoZSBkYnNxbCBzdXBwb3J0LgorV0lUSF9EQiA9ICItLXdpdGgtZGIgLS13aXRoLWRic3FsIC0td2l0aG91dC1kYi10b29scy1pbnRlZ3JhdGVkIgorUEFDS0FHRUNPTkZJR1tkYl0gPSAiJHtXSVRIX0RCfSwtLXdpdGhvdXQtZGIsZGIsIgorCitQQUNLQUdFQ09ORklHW3NxbGl0ZV0gPSAiLS13aXRoLXNxbGl0ZSwtLXdpdGhvdXQtc3FsaXRlLHNxbGl0ZTMsIgorCitQQUNLQUdFQ09ORklHW2JlZWNyeXB0XSA9ICItLXdpdGgtYmVlY3J5cHQ9ZXh0ZXJuYWwsLS13aXRob3V0LWJlZWNyeXB0LGJlZWNyeXB0LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS13aXRoLW5zcywtLXdpdGhvdXQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS13aXRoLWdjcnlwdCwtLXdpdGhvdXQtZ2NyeXB0LGdjcnlwdCwiCitQQUNLQUdFQ09ORklHW2tleXV0aWxzXSA9ICItLXdpdGgta2V5dXRpbHMsLS13aXRob3V0LWtleXV0aWxzLGtleXV0aWxzLCIKK1BBQ0tBR0VDT05GSUdbbGliZWxmXSA9ICItLXdpdGgtbGliZWxmLC0td2l0aG91dC1saWJlbGYsZWxmdXRpbHMsIgorCitXSVRIX1NFTElOVVggPSAiLS13aXRoLXNlbGludXggLS13aXRoLXNlcG9sIC0td2l0aC1zZW1hbmFnZSIKK1dJVEhPVVRfU0VMSU5VWCA9ICItLXdpdGhvdXQtc2VsaW51eCAtLXdpdGhvdXQtc2Vwb2wgLS13aXRob3V0LXNlbWFuYWdlIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIke1dJVEhfU0VMSU5VWH0sJHtXSVRIT1VUX1NFTElOVVh9LGxpYnNlbGludXgsIgorCitXSVRIX05FT04gPSAiLS13aXRoLW5lb24gLS13aXRoLWxpYnByb3h5IC0td2l0aC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorV0lUSE9VVF9ORU9OID0gIi0td2l0aG91dC1uZW9uIC0td2l0aG91dC1saWJwcm94eSAtLXdpdGhvdXQtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1BBQ0tBR0VDT05GSUdbbmVvbl0gPSAiJHtXSVRIX05FT059LCR7V0lUSE9VVF9ORU9OfSxuZW9uIGV4cGF0LCIKKworUEFDS0FHRUNPTkZJR1tsdWFdID0gIi0td2l0aC1sdWEsLS13aXRob3V0LWx1YSxleHBhdCwiCitQQUNLQUdFQ09ORklHW3RjbF0gPSAiLS13aXRoLXRjbCwtLXdpdGhvdXQtdGNsLHRjbCwiCisKK1BBQ0tBR0VDT05GSUdbYXVnZWFzXSA9ICItLXdpdGgtYXVnZWFzLC0td2l0aG91dC1hdWdlYXMsYXVnZWFzLCIKKworRVhUUkFfT0VDT05GICs9ICItLXZlcmJvc2UgXAorCQktLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCS0td2l0aC1maWxlIFwKKwkJLS13aXRoLXBhdGgtbWFnaWM9JXtfdXNybGlicnBtfS8uLi8uLi9zaGFyZS9taXNjL21hZ2ljLm1nYyBcCisJCS0td2l0aC1zeWNrPWludGVybmFsIFwKKwkJLS13aXRob3V0LXJlYWRsaW5lIFwKKwkJLS13aXRob3V0LWxpYnRhc24xIFwKKwkJLS13aXRob3V0LXBha2Nob2lzIFwKKwkJLS13aXRob3V0LWdudXRscyBcCisJCS0td2l0aC1wY3JlIFwKKwkJLS1lbmFibGUtdXRmOCBcCisJCS0td2l0aC11dWlkIFwKKwkJLS13aXRoLWF0dHIgXAorCQktLXdpdGgtYWNsIFwKKwkJLS13aXRoLXBvcHQ9ZXh0ZXJuYWwgXAorCQktLXdpdGgtcHRocmVhZHMgXAorCQktLXdpdGhvdXQtY3VkZiBcCisJCS0td2l0aG91dC1maWNsIFwKKwkJLS13aXRob3V0LWF0ZXJtIFwKKwkJLS13aXRob3V0LW5peCBcCisJCS0td2l0aG91dC1iYXNoIFwKKwkJLS13aXRob3V0LXJjIFwKKwkJLS13aXRob3V0LWpzIFwKKwkJLS13aXRob3V0LWdwc2VlIFwKKwkJLS13aXRob3V0LXJ1YnkgXAorCQktLXdpdGhvdXQtc3F1aXJyZWwgXAorCQktLXdpdGgtYnVpbGQtZXh0bGliZGVwIFwKKwkJLS13aXRoLWJ1aWxkLW1heGV4dGxpYmRlcCBcCisJCS0td2l0aG91dC12YWxncmluZCBcCisJCS0tZGlzYWJsZS1vcGVubXAgXAorCQktLWVuYWJsZS1idWlsZC1waWMgXAorCQktLWVuYWJsZS1idWlsZC12ZXJzaW9uc2NyaXB0IFwKKwkJLS1lbmFibGUtYnVpbGQtd2FybmluZ3MgXAorCQktLWVuYWJsZS1idWlsZC1kZWJ1ZyBcCisJCS0tZW5hYmxlLW1haW50YWluZXItbW9kZSBcCisJCS0td2l0aC1wYXRoLW1hY3Jvcz0ke3JwbV9tYWNyb3N9IFwKKwkJLS13aXRoLXBhdGgtbGliPSR7bGliZGlyfS9ycG0gXAorCQktLXdpdGgtYnVncmVwb3J0PWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIFwKKwkJLS1wcm9ncmFtLXByZWZpeD0gXAorCQlZQUNDPWJ5YWNjIgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MgJHtQTn0tbGlicyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWNvbW1vbiAke1BOfS1idWlsZCBweXRob24tcnBtIHBlcmwtbW9kdWxlLXJwbSAke1BOfS1sb2NhbGUiCisKK1NPTElCUyA9ICI1LjQuc28iCisKKyMgQmFzZWQgb24gJWZpbGVzIHNlY3Rpb24gaW4gdGhlIHJwbS5zcGVjCisKK0ZJTEVTXyR7UE59ID0gICIke2JpbmRpcn0vcnBtIFwKKwkJJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0uKiBcCisJCSR7bGliZGlyfS9ycG0vdGdwZyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1wb3B0IFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG0yY3BpbyBcCisJCSR7bGliZGlyfS9ycG0vdmNoZWNrIFwKKwkJJHtsaWJkaXJ9L3JwbS9oZWxwZXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9xZiBcCisJCSR7bGliZGlyfS9ycG0vY3B1aW5mby55YW1sIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbXRyZWUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1rZXkgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtcmVwby5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtc3BlY2R1bXAgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vd2dldCBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvd2RqIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9saWIgXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0gXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYi93ZGogXAorCQkke2JpbmRpcn0vcnBtLnJlYWwgXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQucmVhbCBcCisJCSR7YmluZGlyfS9ycG0yY3Bpby5yZWFsIFwKKwkJIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ycG0vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vLmRlYnVnIFwKKwkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vLmRlYnVnL18qIFwKKwkJIgorCitGSUxFU18ke1BOfS1jb21tb24gPSAiJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJJHtiaW5kaXJ9L2dlbmRpZmYgXAorCQkke3N5c2NvbmZkaXJ9L3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvcmVwYWNrYWdlIFwKKwkJIgorCitGSUxFU18ke1BOfS1saWJzID0gIiR7bGliZGlyfS9saWJycG0tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8tKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQtKi5zbyBcCisJCSIKKworRklMRVNfJHtQTn0tYnVpbGQgPSAiJHtwcmVmaXh9L3NyYy9ycG0gXAorCQkke2JpbmRpcn0vcnBtYnVpbGQgXAorCQkke2JpbmRpcn0vcnBtYnVpbGQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYnJwLSogXAorCQkke2xpYmRpcn0vcnBtL2NoZWNrLWZpbGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcm9zcy1idWlsZCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1kZWJ1Z2luZm8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtbGFuZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1wcm92LnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3ZpZGVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXJlcXVpcmVzLnBlcmwgXAorCQkke2xpYmRpcn0vcnBtL2dldHBvLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9odHRwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vamF2YWRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL21vbm8tZmluZC1wcm92aWRlcyBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXJlcXVpcmVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9leGVjdXRhYmxlZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbGlidG9vbGRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL29zZ2lkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsZGVwcy5wbCBcCisJCSR7bGliZGlyfS9ycG0vcGVybC5wcm92IFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BocC5yZXEgXAorCQkke2xpYmRpcn0vcnBtL3BrZ2NvbmZpZ2RlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNhY2hlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWNtcC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRlcHMtb2Vjb3JlIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUucmVhbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWRpZ2VzdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYWJpLWNvbXBsaWFuY2UtY2hlY2tlci5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktYXV0b3Rlc3QucGwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jaHJvb3QgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9jcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Ric3FsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZmluZCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2luc3RhbGwtc2ggXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWEgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9sdWFjIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vbWtpbnN0YWxsZGlycyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWx1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9zcWxpdGUzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9jbWFrZSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvamF2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbGlidG9vbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbWFuZHJpdmEgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL21vbm8gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BlcmwgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3BocCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGtnY29uZmlnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9weXRob24gXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3J1YnkgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3NlbGludXggXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3RjbCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLnJwbWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS91X3BrZy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vdnBrZy1wcm92aWRlczIuc2ggXAorCQkke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBcCisJCSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMgcnVuLXBvc3RpbnN0cyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn0tYnVpbGQgPSAiZmlsZSBiYXNoIHBlcmwiCisKK1JERVBFTkRTX3B5dGhvbi1ycG0gPSAiJHtQTn0iCisKK0ZJTEVTX3B5dGhvbi1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0iCitQUk9WSURFUyArPSAicHl0aG9uLXJwbSIKKworRklMRVNfcGVybC1tb2R1bGUtcnBtID0gIiR7bGliZGlyfS9wZXJsLyovKiBcCisJCSIKKworUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9ycG0gXAorCQkke2xpYmRpcn0vbGlicnBtLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5zbyBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5zbyBcCisJCSR7bGliZGlyfS9saWJycG1kYi5sYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby5sYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5zbyBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2Muc28gXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuc28gXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEubGEgXAorCQkke2xpYmRpcn0vcGtnY29uZmlnL3JwbS5wYyBcCisJCSR7bGliZGlyfS9ycG0vcnBtZGJfbG9hZGN2dCBcCisJCSIKKworRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiBcCisJCSR7bGliZGlyfS9saWJycG0uYSBcCisJCSR7bGliZGlyfS9saWJycG1jb25zdGFudC5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLmEgXAorCQkke2xpYmRpcn0vbGlicnBtYnVpbGQuYSBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5hIFwKKwkJJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5hIFwKKwkJIgorCitkb19jb25maWd1cmUoKSB7CisJIyBEaXNhYmxlIHRlc3RzIQorCWVjaG8gImFsbDoiID4gJHtTfS90ZXN0cy9NYWtlZmlsZS5hbQorCXNlZCAtZSAncy9AX19NS0RJUl9QQC8le19fbWtkaXJ9IC1wLycgLWkgJHtTfS9tYWNyb3MvbWFjcm9zLmluCisKKwkoIGNkICR7U307ICR7U30vYXV0b2dlbi5zaCApCisKKwkjIE5BU1RZIGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSBmaWxlcyB0aGUgcmlnaHQgcGtnLWNvbmZpZyBmaWxlLi4uCisJc2VkIC1lICdzL3BrZy1jb25maWcgLS1leGlzdHMgdXVpZC9wa2ctY29uZmlnIC0tZXhpc3RzIG9zc3AtdXVpZC9nJyBcCisJICAgIC1lICdzL3BrZy1jb25maWcgdXVpZC9wa2ctY29uZmlnIG9zc3AtdXVpZC9nJyAtaSAke1N9L2NvbmZpZ3VyZQorCisJKCBjZCAke1N9L3N5Y2sgOyBzZXQgK2UgOyBybSAtLSAtbCogOyBtYWtlIGRpc3RjbGVhbiApIHx8IDoKKworCWV4cG9ydCB2YXJwcmVmaXg9JHtsb2NhbHN0YXRlZGlyfQorCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICdzLCVfX3NjcmlwdGxldF9yZXF1aXJlcywjJSVfX3NjcmlwdGxldF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9wcm92aWRlcywjJSVfX3BlcmxfcHJvdmlkZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcmVxdWlyZXMsIyUlX19wZXJsX3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXNbXl9dLiosJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzIDAsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLF4jJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3QuKiwlX29wZW5hbGxfYmVmb3JlX2Nocm9vdFx0MSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCSMgRW5hYmxlIERlYmlhbiBzdHlsZSBhcmJpdHJhcnkgdGFncy4uLgorCXNlZCAtaSAtZSAncywlX2FyYml0cmFyeV90YWdzW15fXS4qLCVfYXJiaXRyYXJ5X3RhZ3MgJXtfYXJiaXRyYXJ5X3RhZ3NfZGViaWFufSwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wZXJmaWxlX3JwbWRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaAorCisJIyBSZW1vdmUgdW5wYWNrYWdlZCBmaWxlcyAoYmFzZWQgb24gbGlzdCBpbiBycG0uc3BlYykKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0ve1NwZWNmaWxlLnBtLGNwYW5mbHV0ZSxjcGFuZmx1dGUyLHJwbWRpZmYscnBtZGlmZi5jZ2ksc3FsLnByb3Ysc3FsLnJlcSx0Y2wucmVxLHRycG19CisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1ncmFwaC44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9LyovbWFuOC9ycG1ncmFwaC44KgorCXJtIC1yZiAke0R9LyR7bWFuZGlyfS97ZnIsa299CisKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vcG9wdC5oCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlicG9wdC4qCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL3BvcHQucGMKKwlybSAtZiAke0R9LyR7ZGF0YWRpcn0vbG9jYWxlLyovTENfTUVTU0FHRVMvcG9wdC5tbworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjMvcG9wdC4zCisKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL3hhci4xKgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3hhcgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0veGFyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vbGlieGFyKgorCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbHoqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW5sem1hCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vdW54egorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3h6KgorCXJtIC1yZiAke0R9LyR7aW5jbHVkZWRpcn0vbHptYSoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4xL2x6Ki4xCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmx6bWEqCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvKi57YSxsYX0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9weXRob24le3dpdGhfcHl0aG9uX3ZlcnNpb259L3NpdGUtcGFja2FnZXMvcnBtLyoue2EsbGF9CisKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBmIC1hIFwoIC1uYW1lIHBlcmxsb2NhbC5wb2QgLW8gLW5hbWUgLnBhY2tsaXN0IFwKKwkjCS1vIFwoIC1uYW1lICcqLmJzJyAtYSAtZW1wdHkgXCkgXCkgLWV4ZWMgcm0gLWYge30gJzsnCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZCAtZGVwdGggLWV4ZWMgcm1kaXIge30gMj4vZGV2L251bGwgJzsnCisKKwkjIFdlIGRvbid0IHdhbnQgdGhlIGRlZmF1bHQgbWFjcm8gc2V0CisJcm0gLXJmICR7RH0vJHtsaWJkaXJ9L3JwbS97aVszNDU2XTg2KixhdGhsb24qLHBlbnRpdW0qLHg4Nl82NCosYWxwaGEqLHNwYXJjKixpYTY0KixwcGMqLHMzOTAqLGFybXZbMzRdW2xiXSosYXJtdlszNDVdKixtaXBzKixub2FyY2gqfQorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2RiY29udmVydC5zaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2xpYnNxbGRiLioKKworCSMgV2UgZG9uJ3Qgd2FudCwgbm9yIG5lZWQgdGhlIE1hbmRyaXZhIG11bHRpYXJjaCBpdGVtcworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1kaXNwYXRjaAorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L211bHRpYXJjaC1wbGF0Zm9ybQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9jaGVjay1tdWx0aWFyY2gtZmlsZXMKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWttdWx0aWFyY2gKKwlybSAtZiAke0R9LyR7aW5jbHVkZWRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoLmgKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nc3RyZWFtZXIuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ2VtX2hlbHBlci5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ydWJ5Z2Vtcy5yYgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9rbW9kLWRlcHMuc2gKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZWdncy5weQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9rZXJuZWwKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvZ3N0cmVhbWVyCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9tZ28KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RiY29udmVydAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcG9tMnNwZWMKKworCXJtIC1yZiAke0R9L3Zhci9saWIvd2RqICR7RH0vdmFyL2NhY2hlL3dkagorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1jaGVja2VyLnBsCisKK30KKworYWRkX25hdGl2ZV93cmFwcGVyKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG0yY3BpbyBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWJ1aWxkIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworCWZvciBycG1fYmluYXJ5IGluICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vcnBtKiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdDsgZG8KKyAgICAgICAgCWNyZWF0ZV93cmFwcGVyICRycG1fYmluYXJ5IFwKKwkJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisJZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0Y2FmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZS9ycG1yZXNvbHZlLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qIE9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgdXRpbGl0eQorCisgIFdyaXR0ZW4gYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCisgIENvcHlyaWdodCAyMDEyIEludGVsIENvcnBvcmF0aW9uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPHJwbWRiLmg+CisjaW5jbHVkZSA8cnBtdHlwZXMuaD4KKyNpbmNsdWRlIDxycG10YWcuaD4KKyNpbmNsdWRlIDxycG10cy5oPgorI2luY2x1ZGUgPHJwbW1hY3JvLmg+CisjaW5jbHVkZSA8cnBtY2IuaD4KKyNpbmNsdWRlIDxycG1sb2cuaD4KKyNpbmNsdWRlIDxhcmd2Lmg+CisjaW5jbHVkZSA8bWlyZS5oPgorCitpbnQgZGVidWdtb2RlOworRklMRSAqb3V0ZjsKKworaW50IGdldFBhY2thZ2VTdHIocnBtdHMgdHMsIGNvbnN0IGNoYXIgKk5WUkEsIHJwbVRhZyB0YWcsIGNoYXIgKip2YWx1ZSkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBycG1taSBtaSA9IHJwbXRzSW5pdEl0ZXJhdG9yKHRzLCBSUE1UQUdfTlZSQSwgTlZSQSwgMCk7CisgICAgSGVhZGVyIGg7CisgICAgaWYgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworICAgICAgICBIRV90IGhlID0gKEhFX3QpIG1lbXNldChhbGxvY2Eoc2l6ZW9mKCpoZSkpLCAwLCBzaXplb2YoKmhlKSk7CisgICAgICAgIGhlLT50YWcgPSB0YWc7CisgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgIGlmKHJjPT0wKQorICAgICAgICAgICAgKnZhbHVlID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICB9CisgICAgKHZvaWQpcnBtbWlGcmVlKG1pKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsb2FkVHMocnBtdHMgKip0cywgaW50ICp0c2N0LCBjb25zdCBjaGFyICpkYmxpc3RmbikKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBzeiA9IDU7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgbGlzdGZpbGUgPSAxOworICAgIHN0cnVjdCBzdGF0IHN0X2J1ZjsKKworICAgIHJjID0gc3RhdChkYmxpc3RmbiwgJnN0X2J1Zik7CisgICAgaWYocmMgIT0gMCkgeworICAgICAgICBwZXJyb3IoInN0YXQiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmKFNfSVNESVIoc3RfYnVmLnN0X21vZGUpKQorICAgICAgICBsaXN0ZmlsZSA9IDA7CisKKyAgICBpZihsaXN0ZmlsZSkgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiByZWFkaW5nIGRhdGFiYXNlIGxpc3QgZmlsZSAnJXMnXG4iLCBkYmxpc3Rmbik7CisgICAgICAgICp0cyA9IG1hbGxvYyhzeiAqIHNpemVvZihycG10cykpOworICAgICAgICBGSUxFICpmID0gZm9wZW4oZGJsaXN0Zm4sICJyIiApOworICAgICAgICBpZihmKSB7CisgICAgICAgICAgICBjaGFyIGxpbmVbMjA0OF07CisgICAgICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihsaW5lKSAtIDE7CisgICAgICAgICAgICAgICAgaWYobGVuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIHdoaWxlKGxlbiA+IDAgJiYgaXNzcGFjZShsaW5lW2xlbl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVtsZW4tLV0gPSAnXDAnOworCisgICAgICAgICAgICAgICAgaWYobGVuID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYXJyYXkgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50ID09IHN6KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiArPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgKnRzID0gKHJwbXRzICopcmVhbGxvYygqdHMsIHN6KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiREVCVUc6IG9wZW5pbmcgZGF0YWJhc2UgJyVzJ1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRicGF0aG0gPSBtYWxsb2Moc3RybGVuKGxpbmUpICsgMTApOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGRicGF0aG0sICJfZGJwYXRoICVzIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIHJwbURlZmluZU1hY3JvKE5VTEwsIGRicGF0aG0sIFJNSUxfQ01ETElORSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoZGJwYXRobSk7CisKKyAgICAgICAgICAgICAgICAgICAgcnBtdHMgdHNpID0gcnBtdHNDcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgKCp0cylbY291bnRdID0gdHNpOworICAgICAgICAgICAgICAgICAgICByYyA9IHJwbXRzT3BlbkRCKHRzaSwgT19SRE9OTFkpOworICAgICAgICAgICAgICAgICAgICBpZiggcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmNsb3NlKGYpOworICAgICAgICAgICAgKnRzY3QgPSBjb3VudDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBlcnJvcihkYmxpc3Rmbik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBvcGVuaW5nIGRhdGFiYXNlICclcydcbiIsIGRibGlzdGZuKTsKKyAgICAgICAgLy8gTG9hZCBmcm9tIHNpbmdsZSBkYXRhYmFzZQorICAgICAgICAqdHMgPSBtYWxsb2Moc2l6ZW9mKHJwbXRzKSk7CisgICAgICAgIGNoYXIgKmRicGF0aG0gPSBtYWxsb2Moc3RybGVuKGRibGlzdGZuKSArIDEwKTsKKyAgICAgICAgc3ByaW50ZihkYnBhdGhtLCAiX2RicGF0aCAlcyIsIGRibGlzdGZuKTsKKyAgICAgICAgcnBtRGVmaW5lTWFjcm8oTlVMTCwgZGJwYXRobSwgUk1JTF9DTURMSU5FKTsKKyAgICAgICAgZnJlZShkYnBhdGhtKTsKKworICAgICAgICBycG10cyB0c2kgPSBycG10c0NyZWF0ZSgpOworICAgICAgICAoKnRzKVswXSA9IHRzaTsKKyAgICAgICAgcmMgPSBycG10c09wZW5EQih0c2ksIE9fUkRPTkxZKTsKKyAgICAgICAgaWYoIHJjICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSAlc1xuIiwgZGJsaXN0Zm4pOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICAqdHNjdCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHJvY2Vzc1BhY2thZ2VzKHJwbXRzICp0cywgaW50IHRzY291bnQsIGNvbnN0IGNoYXIgKnBhY2thZ2VsaXN0Zm4sIGludCBpZ25vcmVtaXNzaW5nKQoreworICAgIGludCByYyA9IDA7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBpbnQgc3ogPSAxMDA7CisgICAgaW50IGkgPSAwOworICAgIGludCBtaXNzaW5nID0gMDsKKworICAgIEZJTEUgKmYgPSBmb3BlbihwYWNrYWdlbGlzdGZuLCAiciIgKTsKKyAgICBpZihmKSB7CisgICAgICAgIGNoYXIgbGluZVsyNTVdOworICAgICAgICB3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGxpbmUpIC0gMTsKKyAgICAgICAgICAgIGlmKGxlbiA+IDApCisgICAgICAgICAgICAgICAgLy8gVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgd2hpbGUobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuXSkpCisgICAgICAgICAgICAgICAgICAgIGxpbmVbbGVuLS1dID0gJ1wwJzsKKworICAgICAgICAgICAgaWYobGVuID4gMCkgeworICAgICAgICAgICAgICAgIGludCBmb3VuZCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGk9MDsgaTx0c2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQVJHVl90IGtleXMgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBycG1kYiBkYiA9IHJwbXRzR2V0UmRiKHRzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBycG1kYk1pcmVBcHBseShkYiwgUlBNVEFHX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBsaW5lLCAma2V5cyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmtleXMgPSBhcmd2Q291bnQoa2V5cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggbmtleXMgPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBnZXRQYWNrYWdlU3RyKHRzW2ldLCBrZXlzWzBdLCBSUE1UQUdfUEFDS0FHRU9SSUdJTiwgJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyYyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc1xuIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugb3JpZ2luIGZvciAlc1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggbmtleXMgPiAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlpbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJNdWx0aXBsZSBtYXRjaGVzIGZvciAlczpcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigga2V5aW5kZXg9MDsga2V5aW5kZXg8bmtleXM7IGtleWluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IGdldFBhY2thZ2VTdHIodHNbaV0sIGtleXNba2V5aW5kZXhdLCBSUE1UQUdfUEFDS0FHRU9SSUdJTiwgJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgKCVzKVxuIiwga2V5c1trZXlpbmRleF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihmb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCAhZm91bmQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKCBpZ25vcmVtaXNzaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlICVzIC0gaWdub3JpbmdcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZik7CisKKyAgICAgICAgaWYoIG1pc3NpbmcgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBzb21lIHBhY2thZ2VzIHdlcmUgbWlzc2luZ1xuIik7CisgICAgICAgICAgICByYyA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHBlcnJvcihwYWNrYWdlbGlzdGZuKTsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsb29rdXBQcm92aWRlcihycG10cyB0cywgY29uc3QgY2hhciAqcmVxLCBjaGFyICoqcHJvdmlkZXIpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBycG1taSBwcm92bWkgPSBycG10c0luaXRJdGVyYXRvcih0cywgUlBNVEFHX1BST1ZJREVOQU1FLCByZXEsIDApOworICAgIGlmKHByb3ZtaSkgeworICAgICAgICBIZWFkZXIgaDsKKyAgICAgICAgaWYgKChoID0gcnBtbWlOZXh0KHByb3ZtaSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfTkFNRTsKKyAgICAgICAgICAgIHJjID0gKGhlYWRlckdldChoLCBoZSwgMCkgIT0gMSk7CisgICAgICAgICAgICBpZihyYz09MCkKKyAgICAgICAgICAgICAgICAqcHJvdmlkZXIgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgICAgICB9CisgICAgICAgICh2b2lkKXJwbW1pRnJlZShwcm92bWkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHJpbnREZXBMaXN0KHJwbXRzICp0cywgaW50IHRzY291bnQpCit7CisgICAgaW50IHJjID0gMDsKKworICAgIGlmKCB0c2NvdW50ID4gMSApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiPjEgZGF0YWJhc2Ugc3BlY2lmaWVkIHdpdGggZGVwZW5kZW5jeSBsaXN0LCB1c2luZyBmaXJzdCBvbmx5XG4iKTsKKworICAgIC8qIEdldCBsaXN0IG9mIG5hbWVzICovCisgICAgcnBtZGIgZGIgPSBycG10c0dldFJkYih0c1swXSk7CisgICAgQVJHVl90IG5hbWVzID0gTlVMTDsKKyAgICByYyA9IHJwbWRiTWlyZUFwcGx5KGRiLCBSUE1UQUdfTkFNRSwKKyAgICAgICAgICAgICAgICBSUE1NSVJFX1NUUkNNUCwgTlVMTCwgJm5hbWVzKTsKKyAgICBpbnQgbm5hbWVzID0gYXJndkNvdW50KG5hbWVzKTsKKworICAgIC8qIEdldCBsaXN0IG9mIE5WUkFzICovCisgICAgQVJHVl90IGtleXMgPSBOVUxMOworICAgIHJjID0gcnBtZGJNaXJlQXBwbHkoZGIsIFJQTVRBR19OVlJBLAorICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBOVUxMLCAma2V5cyk7CisgICAgaWYgKGtleXMpIHsKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgaW50IG5rZXlzID0gYXJndkNvdW50KGtleXMpOworICAgICAgICBmb3IoaT0wOyBpPG5rZXlzOyBpKyspIHsKKyAgICAgICAgICAgIHJwbW1pIG1pID0gcnBtdHNJbml0SXRlcmF0b3IodHNbMF0sIFJQTVRBR19OVlJBLCBrZXlzW2ldLCAwKTsKKyAgICAgICAgICAgIEhlYWRlciBoOworICAgICAgICAgICAgaWYgKChoID0gcnBtbWlOZXh0KG1pKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qIEdldCBuYW1lIG9mIHBhY2thZ2UgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX05BTUU7CisgICAgICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgICAgICBjaGFyICpuYW1lID0gc3RyZHVwKChjaGFyICopaGUtPnAucHRyKTsKKyAgICAgICAgICAgICAgICAvKiBHZXQgaXRzIHJlcXVpcmVzICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19SRVFVSVJFTkFNRTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWdtb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkRFQlVHOiAlcyByZXF1aXJlcyBudWxsXG4iLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBUkdWX3QgcmVxcyA9IChBUkdWX3QpaGUtPnAucHRyOworICAgICAgICAgICAgICAgIC8qIEdldCBpdHMgcmVxdWlyZWZsYWdzICovCisgICAgICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19SRVFVSVJFRkxBR1M7CisgICAgICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgICAgICBycG11aW50MzJfdCAqcmVxZmxhZ3MgPSAocnBtdWludDMyX3QgKiloZS0+cC51aTMycDsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPGhlLT5jOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKnByb3YgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBmb3Ioaz0wOyBrPG5uYW1lczsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJjbXAobmFtZXNba10sIHJlcXNbal0pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92ID0gbmFtZXNba107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYocHJvdikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKGludClyZXFmbGFnc1tqXSAmIDB4ODAwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXMgW1JFQ11cbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzfCVzXG4iLCBuYW1lLCBwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gbG9va3VwUHJvdmlkZXIodHNbMF0sIHJlcXNbal0sICZwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJjPT0wICYmIHByb3YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoaW50KXJlcWZsYWdzW2pdICYgMHg4MDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXMgW1JFQ11cbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXNcbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUocHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnJlZShuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh2b2lkKXJwbW1pRnJlZShtaSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgdXNhZ2UoKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiT3BlbkVtYmVkZGVkIHJwbSByZXNvbHZlciB1dGlsaXR5XG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5bnRheDogcnBtcmVzb2x2ZSBbLWldIFstZF0gWy10XSA8ZGJsaXN0ZmlsZT4gPHBhY2thZ2VsaXN0ZmlsZT5cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgcnBtdHMgKnRzID0gTlVMTDsKKyAgICBpbnQgdHNjb3VudCA9IDA7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaTsKKyAgICBpbnQgYzsKKyAgICBpbnQgaWdub3JlbWlzc2luZyA9IDA7CisgICAgaW50IGRlcGxpc3Rtb2RlID0gMDsKKyAgICBjaGFyICpvdXRmaWxlID0gTlVMTDsKKworICAgIGRlYnVnbW9kZSA9IDA7CisgICAgb3V0ZiA9IHN0ZG91dDsKKworICAgIG9wdGVyciA9IDA7CisgICAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiaXRkbzoiKSkgIT0gLTEpIHsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBpZ25vcmVtaXNzaW5nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgIGRlcGxpc3Rtb2RlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIGRlYnVnbW9kZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBvdXRmaWxlID0gc3RyZHVwKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICBpZihpc3ByaW50KG9wdG9wdCkpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gYC0lYycuXG4iLCBvcHRvcHQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiBjaGFyYWN0ZXIgYFxceCV4Jy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRvcHQpOworICAgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiggYXJnYyAtIG9wdGluZCA8IDEgKSB7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKCBvdXRmaWxlICkgeworICAgICAgICBpZihkZWJ1Z21vZGUpCisgICAgICAgICAgICBwcmludGYoIkRFQlVHOiBVc2luZyBvdXRwdXQgZmlsZSAlc1xuIiwgb3V0ZmlsZSk7CisgICAgICAgIG91dGYgPSBmb3BlbihvdXRmaWxlLCAidyIpOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgKmRibGlzdGZuID0gYXJndltvcHRpbmRdOworCisgICAgcnBtY2xpSW5pdChhcmdjLCBhcmd2LCBOVUxMKTsKKworICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgcnBtU2V0VmVyYm9zaXR5KFJQTUxPR19ERUJVRyk7CisKKyAgICBycG1EZWZpbmVNYWNybyhOVUxMLCAiX19kYmlfdHhuIGNyZWF0ZSBub2ZzeW5jIiwgUk1JTF9DTURMSU5FKTsKKworICAgIHJjID0gbG9hZFRzKCZ0cywgJnRzY291bnQsIGRibGlzdGZuKTsKKyAgICBpZiggcmMgKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiggdHNjb3VudCA9PSAwICkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBzcGVjaWZ5IGRhdGFiYXNlIGxpc3QgZmlsZSBvciBkYXRhYmFzZSBsb2NhdGlvblxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmKGRlcGxpc3Rtb2RlKSB7CisgICAgICAgIHJjID0gcHJpbnREZXBMaXN0KHRzLCB0c2NvdW50KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmKCBhcmdjIC0gb3B0aW5kIDwgMiApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgcGFja2FnZSBsaXN0IGZpbGVcbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcGtnbGlzdGZuID0gYXJndltvcHRpbmQrMV07CisgICAgICAgICAgICByYyA9IHByb2Nlc3NQYWNrYWdlcyh0cywgdHNjb3VudCwgcGtnbGlzdGZuLCBpZ25vcmVtaXNzaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcihpPTA7IGk8dHNjb3VudDsgaSsrKQorICAgICAgICAodm9pZCkgcnBtdHNDbG9zZURCKHRzW2ldKTsKKyAgICBmcmVlKHRzKTsKKworICAgIGlmKCBvdXRmaWxlICkgeworICAgICAgICBmY2xvc2Uob3V0Zik7CisgICAgICAgIGZyZWUob3V0ZmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNTVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJPcGVuRW1iZWRkZWQgUlBNIHJlc29sdmVyIC0gcGVyZm9ybXMgUlBNIGRhdGFiYXNlIGxvb2t1cHMgaW4gYmF0Y2hlcyB0byBhdm9pZCBcCisgcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2YgcnBtIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorREVQRU5EUyA9ICJycG0iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZmlsZTovL3JwbXJlc29sdmUuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeworCSR7Q0N9ICR7Q0ZMQUdTfSAtZ2dkYiAtSSR7U1RBR0lOR19JTkNESVJ9L3JwbSAke0xERkxBR1N9IHJwbXJlc29sdmUuYyAtbyBycG1yZXNvbHZlIC1scnBtYnVpbGQgLWxycG0gLWxycG1pbyAtbHJwbWRiIC1scG9wdAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBycG1yZXNvbHZlICR7RH0ke2JpbmRpcn0KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbXJlc29sdmUgXAorCQkJUlBNX1VTUkxJQlJQTT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9FVENSUE09JHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3JwbSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vbG9jYWxlCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNWI0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsOTUgQEAKK2RubCB2ZXJiYXRpbSByZW5hbWVkIGZyb20gYWNsb2NhbC5tNCBpbiByc3luY18zLjAuNworZG5sIDA3LzA2LzIwMTAgLSBxaGUKKworZG5sIEFDX1ZBTElEQVRFX0NBQ0hFX1NZU1RFTV9UWVBFWyhjbWQpXQorZG5sIGlmIHRoZSBjYWNoZSBmaWxlIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBjdXJyZW50IGhvc3QsCitkbmwgdGFyZ2V0IGFuZCBidWlsZCBzeXN0ZW0gdHlwZXMsIGV4ZWN1dGUgQ01EIG9yIHByaW50IGEgZGVmYXVsdAorZG5sIGVycm9yIG1lc3NhZ2UuCitBQ19ERUZVTihBQ19WQUxJREFURV9DQUNIRV9TWVNURU1fVFlQRSwgWworICAgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9TWVNURU1dKQorICAgIEFDX01TR19DSEVDS0lORyhbY29uZmlnLmNhY2hlIHN5c3RlbSB0eXBlXSkKKyAgICBpZiB7IHRlc3QgeCIke2FjX2N2X2hvc3Rfc3lzdGVtX3R5cGUrc2V0fSIgPSB4InNldCIgJiYKKyAgICAgICAgIHRlc3QgeCIkYWNfY3ZfaG9zdF9zeXN0ZW1fdHlwZSIgIT0geCIkaG9zdCI7IH0gfHwKKyAgICAgICB7IHRlc3QgeCIke2FjX2N2X2J1aWxkX3N5c3RlbV90eXBlK3NldH0iID0geCJzZXQiICYmCisgICAgICAgICB0ZXN0IHgiJGFjX2N2X2J1aWxkX3N5c3RlbV90eXBlIiAhPSB4IiRidWlsZCI7IH0gfHwKKyAgICAgICB7IHRlc3QgeCIke2FjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZStzZXR9IiA9IHgic2V0IiAmJgorICAgICAgICAgdGVzdCB4IiRhY19jdl90YXJnZXRfc3lzdGVtX3R5cGUiICE9IHgiJHRhcmdldCI7IH07IHRoZW4KKwlBQ19NU0dfUkVTVUxUKFtkaWZmZXJlbnRdKQorCWlmZWxzZSgkIywgMSwgWyQxXSwKKwkJW0FDX01TR19FUlJPUihbInlvdSBtdXN0IHJlbW92ZSBjb25maWcuY2FjaGUgYW5kIHJlc3RhcnQgY29uZmlndXJlIl0pXSkKKyAgICBlbHNlCisJQUNfTVNHX1JFU1VMVChbc2FtZV0pCisgICAgZmkKKyAgICBhY19jdl9ob3N0X3N5c3RlbV90eXBlPSIkaG9zdCIKKyAgICBhY19jdl9idWlsZF9zeXN0ZW1fdHlwZT0iJGJ1aWxkIgorICAgIGFjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZT0iJHRhcmdldCIKK10pCisKK2RubCBDaGVjayBmb3Igc29ja2xlbl90OiBoaXN0b3JpY2FsbHkgb24gQlNEIGl0IGlzIGFuIGludCwgYW5kIGluCitkbmwgUE9TSVggMWcgaXQgaXMgYSB0eXBlIG9mIGl0cyBvd24sIGJ1dCBzb21lIHBsYXRmb3JtcyB1c2UgZGlmZmVyZW50CitkbmwgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB0byBnZXRzb2Nrb3B0LCBnZXRwZWVybmFtZSwgZXRjLiAgU28gd2UKK2RubCBoYXZlIHRvIHRlc3QgdG8gZmluZCBzb21ldGhpbmcgdGhhdCB3aWxsIHdvcmsuCisKK2RubCBUaGlzIGlzIG5vIGdvb2QsIGJlY2F1c2UgcGFzc2luZyB0aGUgd3JvbmcgcG9pbnRlciBvbiBDIGNvbXBpbGVycyBpcworZG5sIGxpa2VseSB0byBvbmx5IGdlbmVyYXRlIGEgd2FybmluZywgbm90IGFuIGVycm9yLiAgV2UgZG9uJ3QgY2FsbCB0aGlzIGF0CitkbmwgdGhlIG1vbWVudC4KKworQUNfREVGVU4oW1RZUEVfU09DS0xFTl9UXSwKK1sKKyAgIEFDX0NIRUNLX1RZUEUoW3NvY2tsZW5fdF0sICxbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW3JzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdl0sCisgICAgICBbCisgICAgICAgICAjIFN5c3RlbXMgaGF2ZSBlaXRoZXIgInN0cnVjdCBzb2NrYWRkciAqIiBvcgorICAgICAgICAgIyAidm9pZCAqIiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGdldHBlZXJuYW1lCisgICAgICAgICByc3luY19jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIjsgZG8KKyAgICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyAgICAgICAgICAgICAgICAgIGludCBnZXRwZWVybmFtZSAoaW50LCAkYXJnMiAqLCAkdCAqKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgJHQgbGVuOworICAgICAgICAgICAgICAgICAgZ2V0cGVlcm5hbWUoMCwwLCZsZW4pOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICByc3luY19jdl9zb2NrbGVuX3RfZXF1aXY9IiR0IgorICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBkb25lCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGlmIHRlc3QgIngkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2IiA9IHg7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3RdKQorICAgICAgICAgZmkKKyAgICAgIF0pCisgICAgICBBQ19NU0dfUkVTVUxUKCRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoc29ja2xlbl90LCAkcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2LAorCQkJW3R5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZF0pXSwKKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitdKQorCitkbmwgQUNfSEFWRV9UWVBFKFRZUEUsSU5DTFVERVMpCitBQ19ERUZVTihbQUNfSEFWRV9UWVBFXSwgWworQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorY3Y9YGVjaG8gIiQxIiB8IHNlZCAneSUuLystICVfX3BfXyUnYAorQUNfTVNHX0NIRUNLSU5HKGZvciAkMSkKK0FDX0NBQ0hFX1ZBTChbYWNfY3ZfdHlwZV8kY3ZdLAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworQUNfSU5DTFVERVNfREVGQVVMVAorJDJdXSwKK1tbJDEgZm9vO11dKV0sCitbZXZhbCAiYWNfY3ZfdHlwZV8kY3Y9eWVzIl0sCitbZXZhbCAiYWNfY3ZfdHlwZV8kY3Y9bm8iXSkpZG5sCithY19mb289YGV2YWwgZWNobyBcXCRhY19jdl90eXBlXyRjdmAKK0FDX01TR19SRVNVTFQoJGFjX2ZvbykKK2lmIHRlc3QgIiRhY19mb28iID0geWVzOyB0aGVuCisgIGFjX3RyX2hkcj1IQVZFX2BlY2hvICQxIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tICVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX18lJ2AKK2lmIGZhbHNlOyB0aGVuCisJQUNfQ0hFQ0tfVFlQRVMoJDEpCitmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoJGFjX3RyX2hkciwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIGAkMSddKQorZmkKK10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvZmlsZXMvcnN5bmNkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZjViMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZgpAQCAtMCwwICsxLDE1IEBACisjIC9ldGMvcnN5bmNkLmNvbmYKKworIyBNaW5pbWFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgcnN5bmMgZGFlbW9uCisjIFNlZSByc3luYygxKSBhbmQgcnN5bmNkLmNvbmYoNSkgbWFuIHBhZ2VzIGZvciBoZWxwCisKKyMgVGhpcyBmaWxlIGlzIHJlcXVpcmVkIGJ5IHJzeW5jIC0tZGFlbW9uCitwaWQgZmlsZSA9IC92YXIvcnVuL3JzeW5jZC5waWQKK3VzZSBjaHJvb3QgPSB5ZXMKK3JlYWQgb25seSA9IHllcworCisjIFNpbXBsZSBleGFtcGxlIGZvciBlbmFibGluZyB5b3VyIG93biBsb2NhbCByc3luYyBzZXJ2ZXIKKyNbZXZlcnl0aGluZ10KKyMJcGF0aCA9IC8KKyMJY29tbWVudCA9IEV2ZXJ5dGhpbmcgZXhjZXB0IC9ldGMgZXhwb3NlZAorIwlleGNsdWRlID0gL2V0YwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1NDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luYy0yLjYuOS1mbmFtZS1vYm8ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbIFRoZSBwYXRjaCBpcyByc3luYy0yLjYuOSBzcGVjaWZpYyBdCisKK1RoZSBwYXRjaCBpcyBmcm9tIGh0dHBzOi8vaXNzdWVzLnJwYXRoLmNvbS9icm93c2UvUlBMLTE2NDcgYW5kIGlzIHVzZWQgdG8KK2FkZHJlc3MgaHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMDctNDA5MQorCitEYXRlOiAgIFR1ZSBNYXkgMTAgMTA6MDc6MzYgMjAxMSArMDgwMAorRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zZW5kZXIuYyBiL3NlbmRlci5jCitpbmRleCA2ZmNhYTY1Li4wNTNhOGYxIDEwMDY0NAorLS0tIGEvc2VuZGVyLmMKKysrKyBiL3NlbmRlci5jCitAQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgc3VjY2Vzc2Z1bF9zZW5kKGludCBuZHgpCisgCWNoYXIgZm5hbWVbTUFYUEFUSExFTl07CisgCXN0cnVjdCBmaWxlX3N0cnVjdCAqZmlsZTsKKyAJdW5zaWduZWQgaW50IG9mZnNldDsKKysJc2l6ZV90IGwgPSAwOworIAorIAlpZiAobmR4IDwgMCB8fCBuZHggPj0gdGhlX2ZpbGVfbGlzdC0+Y291bnQpCisgCQlyZXR1cm47CitAQCAtMTMzLDYgKzEzNCwyMCBAQCB2b2lkIHN1Y2Nlc3NmdWxfc2VuZChpbnQgbmR4KQorIAkJCQkgICAgZmlsZS0+ZGlyLnJvb3QsICIvIiwgTlVMTCk7CisgCX0gZWxzZQorIAkJb2Zmc2V0ID0gMDsKKysKKysJbCA9IG9mZnNldCArIDE7CisrCWlmIChmaWxlKSB7CisrCQlpZiAoZmlsZS0+ZGlybmFtZSkKKysJCQlsICs9IHN0cmxlbihmaWxlLT5kaXJuYW1lKTsKKysJCWlmIChmaWxlLT5iYXNlbmFtZSkKKysJCQlsICs9IHN0cmxlbihmaWxlLT5iYXNlbmFtZSk7CisrCX0KKysKKysJaWYgKGwgPj0gc2l6ZW9mKGZuYW1lKSkgeworKwkJcnByaW50ZihGRVJST1IsICJPdmVybG9uZyBwYXRobmFtZVxuIik7CisrCQlleGl0X2NsZWFudXAoUkVSUl9GSUxFU0VMRUNUKTsKKysJfQorKworIAlmX25hbWUoZmlsZSwgZm5hbWUgKyBvZmZzZXQpOworIAlpZiAocmVtb3ZlX3NvdXJjZV9maWxlcykgeworIAkJaWYgKGRvX3VubGluayhmbmFtZSkgPT0gMCkgeworQEAgLTIyNCw2ICsyMzksNyBAQCB2b2lkIHNlbmRfZmlsZXMoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIGludCBmX291dCwgaW50IGZfaW4pCisgCWVudW0gbG9nY29kZSBsb2dfY29kZSA9IGxvZ19iZWZvcmVfdHJhbnNmZXIgPyBGTE9HIDogRklORk87CisgCWludCBmX3hmZXIgPSB3cml0ZV9iYXRjaCA8IDAgPyBiYXRjaF9mZCA6IGZfb3V0OworIAlpbnQgaSwgajsKKysJc2l6ZV90IGwgPSAwOworIAorIAlpZiAodmVyYm9zZSA+IDIpCisgCQlycHJpbnRmKEZJTkZPLCAic2VuZF9maWxlcyBzdGFydGluZ1xuIik7CitAQCAtMjU5LDYgKzI3NSwyMCBAQCB2b2lkIHNlbmRfZmlsZXMoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIGludCBmX291dCwgaW50IGZfaW4pCisgCQkJCWZuYW1lW29mZnNldCsrXSA9ICcvJzsKKyAJCX0gZWxzZQorIAkJCW9mZnNldCA9IDA7CisrCisrCQlsID0gb2Zmc2V0ICsgMTsKKysJCWlmIChmaWxlKSB7CisrCQkJaWYgKGZpbGUtPmRpcm5hbWUpCisrCQkJCWwgKz0gc3RybGVuKGZpbGUtPmRpcm5hbWUpOworKwkJCWlmIChmaWxlLT5iYXNlbmFtZSkKKysJCQkJbCArPSBzdHJsZW4oZmlsZS0+YmFzZW5hbWUpOworKwkJfQorKworKwkJaWYgKGwgPj0gc2l6ZW9mKGZuYW1lKSkgeworKwkJCXJwcmludGYoRkVSUk9SLCAiT3ZlcmxvbmcgcGF0aG5hbWVcbiIpOworKwkJCWV4aXRfY2xlYW51cChSRVJSX0ZJTEVTRUxFQ1QpOworKwkJfQorKworIAkJZm5hbWUyID0gZl9uYW1lKGZpbGUsIGZuYW1lICsgb2Zmc2V0KTsKKyAKKyAJCWlmICh2ZXJib3NlID4gMikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0yLjYuOS9yc3luY2QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVmNWIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKyMgL2V0Yy9yc3luY2QuY29uZgorCisjIE1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciByc3luYyBkYWVtb24KKyMgU2VlIHJzeW5jKDEpIGFuZCByc3luY2QuY29uZig1KSBtYW4gcGFnZXMgZm9yIGhlbHAKKworIyBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgcnN5bmMgLS1kYWVtb24KK3BpZCBmaWxlID0gL3Zhci9ydW4vcnN5bmNkLnBpZAordXNlIGNocm9vdCA9IHllcworcmVhZCBvbmx5ID0geWVzCisKKyMgU2ltcGxlIGV4YW1wbGUgZm9yIGVuYWJsaW5nIHlvdXIgb3duIGxvY2FsIHJzeW5jIHNlcnZlcgorI1tldmVyeXRoaW5nXQorIwlwYXRoID0gLworIwljb21tZW50ID0gRXZlcnl0aGluZyBleGNlcHQgL2V0YyBleHBvc2VkCisjCWV4Y2x1ZGUgPSAvZXRjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWNlNTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xLzAwMDEtQ29tcGxhaW4taWYtYW4taW5jLXJlY3Vyc2l2ZS1wYXRoLWlzLW5vdC1yaWdodC1mb3ItaS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSA5NjJmOGI5MDA0NWFiMzMxZmMwNGM5ZTY1ZjgwZjFhNTNlNjgyNDNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2F5bmUgRGF2aXNvbiA8d2F5bmVkQHNhbWJhLm9yZz4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTI6NDE6MDMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQ29tcGxhaW4gaWYgYW4gaW5jLXJlY3Vyc2l2ZSBwYXRoIGlzIG5vdCByaWdodCBmb3IgaXRzIGRpci4KKyBUaGlzIGVuc3VyZXMgdGhhdCBhIG1hbGljaW91cyBzZW5kZXIgY2FuJ3QgdXNlIGEganVzdC1zZW50IHN5bWxpbmsgYXMgYQorIHRyYXNuZmVyIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja1BvcnQKKworRml4IHRoZSBDVkUtMjAxNC05NTEyLCByc3luYyAzLjEuMSBhbGxvd3MgcmVtb3RlIGF0dGFja2VycyB0byB3cml0ZSB0byBhcmJpdHJhcnkKK2ZpbGVzIHZpYSBhIHN5bWxpbmsgYXR0YWNrIG9uIGEgZmlsZSBpbiB0aGUgc3luY2hyb25pemF0aW9uIHBhdGguCisKK0JhY2tQb3J0IGFuZCBmaXggdGhpcyBwYXRjaCB0byBtYWtlIGl0IGFibGUgdG8gYXBwbHkgdG8gc291cmNlIGNvZGUKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgZmxpc3QuYyB8IDIyICsrKysrKysrKysrKysrKysrKysrLS0KKyBpby5jICAgIHwgIDIgKy0KKyBtYWluLmMgIHwgIDQgKystLQorIHJzeW5jLmMgfCAgMiArLQorIHByb3RvLmggfCAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmxpc3QuYyBiL2ZsaXN0LmMKK2luZGV4IGMyNDY3MmUuLjkyZTRiNjUgMTAwNjQ0CistLS0gYS9mbGlzdC5jCisrKysgYi9mbGlzdC5jCitAQCAtMjQzNSw4ICsyNDM1LDkgQEAgc3RydWN0IGZpbGVfbGlzdCAqc2VuZF9maWxlX2xpc3QoaW50IGYsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCXJldHVybiBmbGlzdDsKKyB9CisgCistc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYpCisrc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYsIGludCBkaXJfbmR4KQorIHsKKysJY29uc3QgY2hhciAqZ29vZF9kaXJuYW1lID0gTlVMTDsKKyAJc3RydWN0IGZpbGVfbGlzdCAqZmxpc3Q7CisgCWludCBkc3RhcnQsIGZsYWdzOworIAlpbnQ2NCBzdGFydF9yZWFkOworQEAgLTI0OTIsNiArMjQ5MywyMyBAQCBzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZikKKyAJCWZsaXN0X2V4cGFuZChmbGlzdCwgMSk7CisgCQlmaWxlID0gcmVjdl9maWxlX2VudHJ5KGYsIGZsaXN0LCBmbGFncyk7CisgCisrCQlpZiAoaW5jX3JlY3Vyc2UpIHsKKysJCQlzdGF0aWMgY29uc3QgY2hhciBlbXB0eV9kaXJbXSA9ICJcMCI7CisrCQkJY29uc3QgY2hhciAqY3VyX2RpciA9IGZpbGUtPmRpcm5hbWUgPyBmaWxlLT5kaXJuYW1lIDogZW1wdHlfZGlyOworKwkJCWlmIChyZWxhdGl2ZV9wYXRocyAmJiAqY3VyX2RpciA9PSAnLycpCisrCQkJCWN1cl9kaXIrKzsKKysJCQlpZiAoY3VyX2RpciAhPSBnb29kX2Rpcm5hbWUpIHsKKysJCQkJY29uc3QgY2hhciAqZCA9IGRpcl9uZHggPj0gMCA/IGZfbmFtZShkaXJfZmxpc3QtPmZpbGVzW2Rpcl9uZHhdLCBOVUxMKSA6IGVtcHR5X2RpcjsKKysJCQkJaWYgKHN0cmNtcChjdXJfZGlyLCBkKSAhPSAwKSB7CisrCQkJCQlycHJpbnRmKEZFUlJPUiwKKysJCQkJCQkiQUJPUlRJTkcgZHVlIHRvIGludmFsaWQgZGlyIHByZWZpeCBmcm9tIHNlbmRlcjogJXMgKHNob3VsZCBiZTogJXMpXG4iLAorKwkJCQkJCWN1cl9kaXIsIGQpOworKwkJCQkJZXhpdF9jbGVhbnVwKFJFUlJfUFJPVE9DT0wpOworKwkJCQl9CisrCQkJCWdvb2RfZGlybmFtZSA9IGN1cl9kaXI7CisrCQkJfQorKwkJfQorKworIAkJaWYgKFNfSVNSRUcoZmlsZS0+bW9kZSkpIHsKKyAJCQkvKiBBbHJlYWR5IGNvdW50ZWQgKi8KKyAJCX0gZWxzZSBpZiAoU19JU0RJUihmaWxlLT5tb2RlKSkgeworQEAgLTI2MTUsNyArMjYzMyw3IEBAIHZvaWQgcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChpbnQgZikKKyAJCQlycHJpbnRmKEZJTkZPLCAiWyVzXSByZWNlaXZpbmcgZmxpc3QgZm9yIGRpciAlZFxuIiwKKyAJCQkJd2hvX2FtX2koKSwgbmR4KTsKKyAJCX0KKy0JCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZik7CisrCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGYsIG5keCk7CisgCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAJfQorIH0KK2RpZmYgLS1naXQgYS9pby5jIGIvaW8uYworaW5kZXggYjlhOWJkMC4uYTg2OGZhOSAxMDA2NDQKKy0tLSBhL2lvLmMKKysrKyBiL2lvLmMKK0BAIC0xNjg1LDcgKzE2ODUsNyBAQCB2b2lkIHdhaXRfZm9yX3JlY2VpdmVyKHZvaWQpCisgCQkJCXJwcmludGYoRklORk8sICJbJXNdIHJlY2VpdmluZyBmbGlzdCBmb3IgZGlyICVkXG4iLAorIAkJCQkJd2hvX2FtX2koKSwgbmR4KTsKKyAJCQl9CistCQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChpb2J1Zi5pbl9mZCk7CisrCQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChpb2J1Zi5pbl9mZCwgbmR4KTsKKyAJCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAjaWZkZWYgU1VQUE9SVF9IQVJEX0xJTktTCisgCQkJaWYgKHByZXNlcnZlX2hhcmRfbGlua3MpCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCitpbmRleCBlN2ExM2Y3Li43MTNiODE4IDEwMDY0NAorLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xMDA5LDcgKzEwMDksNyBAQCBzdGF0aWMgdm9pZCBkb19zZXJ2ZXJfcmVjdihpbnQgZl9pbiwgaW50IGZfb3V0LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJZmlsZXNmcm9tX2ZkID0gLTE7CisgCX0KKyAKKy0JZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luKTsKKysJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luLCAtMSk7CisgCWlmICghZmxpc3QpIHsKKyAJCXJwcmludGYoRkVSUk9SLCJzZXJ2ZXJfcmVjdjogcmVjdl9maWxlX2xpc3QgZXJyb3JcbiIpOworIAkJZXhpdF9jbGVhbnVwKFJFUlJfRklMRVNFTEVDVCk7CitAQCAtMTE4Myw3ICsxMTgzLDcgQEAgaW50IGNsaWVudF9ydW4oaW50IGZfaW4sIGludCBmX291dCwgcGlkX3QgcGlkLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAlpZiAod3JpdGVfYmF0Y2ggJiYgIWFtX3NlcnZlcikKKyAJCXN0YXJ0X3dyaXRlX2JhdGNoKGZfaW4pOworLQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4pOworKwlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIC0xKTsKKyAJaWYgKGluY19yZWN1cnNlICYmIGZpbGVfdG90YWwgPT0gMSkKKyAJCXJlY3ZfYWRkaXRpb25hbF9maWxlX2xpc3QoZl9pbik7CisgCitkaWZmIC0tZ2l0IGEvcnN5bmMuYyBiL3JzeW5jLmMKK2luZGV4IDY4ZmY2YjEuLmMzZWNjNTEgMTAwNjQ0CistLS0gYS9yc3luYy5jCisrKysgYi9yc3luYy5jCitAQCAtMzY0LDcgKzM2NCw3IEBAIGludCByZWFkX25keF9hbmRfYXR0cnMoaW50IGZfaW4sIGludCBmX291dCwgaW50ICppZmxhZ19wdHIsIHVjaGFyICp0eXBlX3B0ciwKKyAJCX0KKyAJCS8qIFNlbmQgYWxsIHRoZSBkYXRhIHdlIHJlYWQgZm9yIHRoaXMgZmxpc3QgdG8gdGhlIGdlbmVyYXRvci4gKi8KKyAJCXN0YXJ0X2ZsaXN0X2ZvcndhcmQobmR4KTsKKy0JCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbik7CisrCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIG5keCk7CisgCQlmbGlzdC0+cGFyZW50X25keCA9IG5keDsKKyAJCXN0b3BfZmxpc3RfZm9yd2FyZCgpOworIAl9CitkaWZmIC0tZ2l0IGEvcHJvdG8uaCBiL3Byb3RvLmgKK2luZGV4IDIyZmM1MzkuLjI0N2M1NTggMTAwNjQ0CistLS0gYS9wcm90by5oCisrKysgYi9wcm90by5oCitAQCAtODksNyArODksNyBAQCBzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKm1ha2VfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsCisgdm9pZCB1bm1ha2VfZmlsZShzdHJ1Y3QgZmlsZV9zdHJ1Y3QgKmZpbGUpOworIHZvaWQgc2VuZF9leHRyYV9maWxlX2xpc3QoaW50IGYsIGludCBhdF9sZWFzdCk7Cisgc3RydWN0IGZpbGVfbGlzdCAqc2VuZF9maWxlX2xpc3QoaW50IGYsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworLXN0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmKTsKKytzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZiwgaW50IGRpcl9uZHgpOworIHZvaWQgcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChpbnQgZik7CisgaW50IGZsaXN0X2ZpbmQoc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIHN0cnVjdCBmaWxlX3N0cnVjdCAqZik7CisgaW50IGZsaXN0X2ZpbmRfaWdub3JlX2Rpcm5lc3Moc3RydWN0IGZpbGVfbGlzdCAqZmxpc3QsIHN0cnVjdCBmaWxlX3N0cnVjdCAqZik7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjYWM0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIGVhYzg1ODA4NWUzYWM5NGVjMGFiNTA2MWQxMWY1MjY1MmM5MGE4NjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXYXluZSBEYXZpc29uIDx3YXluZWRAc2FtYmEub3JnPgorRGF0ZTogTW9uLCAxMSBNYXkgMjAxNSAxMjozNjoyMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDEvMV0gQWRkIGNvbXBhdCBmbGFnIHRvIGFsbG93IHByb3BlciBzZWVkIGNoZWNrc3VtIG9yZGVyLgorIEZpeGVzIHRoZSBlcXVpdmFsZW50IG9mIGxpYnJzeW5jJ3MgQ1ZFLTIwMTQtODI0MiBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjaGVja3N1bS5jIHwgMTcgKysrKysrKysrKysrKy0tLS0KKyBjb21wYXQuYyAgIHwgIDUgKysrKysKKyBvcHRpb25zLmMgIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NoZWNrc3VtLmMgYi9jaGVja3N1bS5jCitpbmRleCBhMWMyYWEyLi45MzNiNTE0IDEwMDY0NAorLS0tIGEvY2hlY2tzdW0uYworKysrIGIvY2hlY2tzdW0uYworQEAgLTIzLDYgKzIzLDcgQEAKKyAKKyBleHRlcm4gaW50IGNoZWNrc3VtX3NlZWQ7CisgZXh0ZXJuIGludCBwcm90b2NvbF92ZXJzaW9uOworK2V4dGVybiBpbnQgcHJvcGVyX3NlZWRfb3JkZXI7CisgCisgLyoKKyAgIGEgc2ltcGxlIDMyIGJpdCBjaGVja3N1bSB0aGF0IGNhbiBiZSB1cGFkdGVkIGZyb20gZWl0aGVyIGVuZAorQEAgLTU0LDEwICs1NSwxOCBAQCB2b2lkIGdldF9jaGVja3N1bTIoY2hhciAqYnVmLCBpbnQzMiBsZW4sIGNoYXIgKnN1bSkKKyAJaWYgKHByb3RvY29sX3ZlcnNpb24gPj0gMzApIHsKKyAJCXVjaGFyIHNlZWRidWZbNF07CisgCQltZDVfYmVnaW4oJm0pOworLQkJbWQ1X3VwZGF0ZSgmbSwgKHVjaGFyICopYnVmLCBsZW4pOworLQkJaWYgKGNoZWNrc3VtX3NlZWQpIHsKKy0JCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CistCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQlpZiAocHJvcGVyX3NlZWRfb3JkZXIpIHsKKysJCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworKwkJCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CisrCQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJCX0KKysJCQltZDVfdXBkYXRlKCZtLCAodWNoYXIgKilidWYsIGxlbik7CisrCQl9IGVsc2UgeworKwkJCW1kNV91cGRhdGUoJm0sICh1Y2hhciAqKWJ1ZiwgbGVuKTsKKysJCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworKwkJCQlTSVZBTHUoc2VlZGJ1ZiwgMCwgY2hlY2tzdW1fc2VlZCk7CisrCQkJCW1kNV91cGRhdGUoJm0sIHNlZWRidWYsIDQpOworKwkJCX0KKyAJCX0KKyAJCW1kNV9yZXN1bHQoJm0sICh1Y2hhciAqKXN1bSk7CisgCX0gZWxzZSB7CitkaWZmIC0tZ2l0IGEvY29tcGF0LmMgYi9jb21wYXQuYworaW5kZXggMjQ1NDkzNy4uZjg5ZDQ2NiAxMDA2NDQKKy0tLSBhL2NvbXBhdC5jCisrKysgYi9jb21wYXQuYworQEAgLTI3LDYgKzI3LDcgQEAgaW50IGluY19yZWN1cnNlID0gMDsKKyBpbnQgY29tcGF0X2ZsYWdzID0gMDsKKyBpbnQgdXNlX3NhZmVfaW5jX2ZsaXN0ID0gMDsKKyBpbnQgd2FudF94YXR0cl9vcHRpbSA9IDA7CisraW50IHByb3Blcl9zZWVkX29yZGVyID0gMDsKKyAKKyBleHRlcm4gaW50IGFtX3NlcnZlcjsKKyBleHRlcm4gaW50IGFtX3NlbmRlcjsKK0BAIC03OCw2ICs3OSw3IEBAIGludCBmaWxlc2Zyb21fY29udmVydCA9IDA7CisgI2RlZmluZSBDRl9TWU1MSU5LX0lDT05WICgxPDwyKQorICNkZWZpbmUgQ0ZfU0FGRV9GTElTVAkgKDE8PDMpCisgI2RlZmluZSBDRl9BVk9JRF9YQVRUUl9PUFRJTSAoMTw8NCkKKysjZGVmaW5lIENGX0NIS1NVTV9TRUVEX0ZJWCAoMTw8NSkKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqY2xpZW50X2luZm87CisgCitAQCAtMjcxLDEyICsyNzMsMTUgQEAgdm9pZCBzZXR1cF9wcm90b2NvbChpbnQgZl9vdXQsaW50IGZfaW4pCisgCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9TQUZFX0ZMSVNUOworIAkJCWlmIChsb2NhbF9zZXJ2ZXIgfHwgc3RyY2hyKGNsaWVudF9pbmZvLCAneCcpICE9IE5VTEwpCisgCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9BVk9JRF9YQVRUUl9PUFRJTTsKKysJCQlpZiAobG9jYWxfc2VydmVyIHx8IHN0cmNocihjbGllbnRfaW5mbywgJ0MnKSAhPSBOVUxMKQorKwkJCQljb21wYXRfZmxhZ3MgfD0gQ0ZfQ0hLU1VNX1NFRURfRklYOworIAkJCXdyaXRlX2J5dGUoZl9vdXQsIGNvbXBhdF9mbGFncyk7CisgCQl9IGVsc2UKKyAJCQljb21wYXRfZmxhZ3MgPSByZWFkX2J5dGUoZl9pbik7CisgCQkvKiBUaGUgaW5jX3JlY3Vyc2UgdmFyIE1VU1QgYmUgc2V0IHRvIDAgb3IgMS4gKi8KKyAJCWluY19yZWN1cnNlID0gY29tcGF0X2ZsYWdzICYgQ0ZfSU5DX1JFQ1VSU0UgPyAxIDogMDsKKyAJCXdhbnRfeGF0dHJfb3B0aW0gPSBwcm90b2NvbF92ZXJzaW9uID49IDMxICYmICEoY29tcGF0X2ZsYWdzICYgQ0ZfQVZPSURfWEFUVFJfT1BUSU0pOworKwkJcHJvcGVyX3NlZWRfb3JkZXIgPSBjb21wYXRfZmxhZ3MgJiBDRl9DSEtTVU1fU0VFRF9GSVggPyAxIDogMDsKKyAJCWlmIChhbV9zZW5kZXIpIHsKKyAJCQlyZWNlaXZlcl9zeW1saW5rX3RpbWVzID0gYW1fc2VydmVyCisgCQkJICAgID8gc3RyY2hyKGNsaWVudF9pbmZvLCAnTCcpICE9IE5VTEwKK2RpZmYgLS1naXQgYS9vcHRpb25zLmMgYi9vcHRpb25zLmMKK2luZGV4IDE5YzJiN2QuLjQxMjhiNTkgMTAwNjQ0CistLS0gYS9vcHRpb25zLmMKKysrKyBiL29wdGlvbnMuYworQEAgLTI1MDMsNiArMjUwMyw3IEBAIHZvaWQgc2VydmVyX29wdGlvbnMoY2hhciAqKmFyZ3MsIGludCAqYXJnY19wKQorICNlbmRpZgorIAkJYXJnc3RyW3grK10gPSAnZic7IC8qIGZsaXN0IEkvTy1lcnJvciBzYWZldHkgc3VwcG9ydCAqLworIAkJYXJnc3RyW3grK10gPSAneCc7IC8qIHhhdHRyIGhhcmRsaW5rIG9wdGltaXphdGlvbiBub3QgZGVzaXJlZCAqLworKwkJYXJnc3RyW3grK10gPSAnQyc7IC8qIHN1cHBvcnQgY2hlY2tzdW0gc2VlZCBvcmRlciBmaXggKi8KKyAJfQorIAorIAlpZiAoeCA+PSAoaW50KXNpemVvZiBhcmdzdHIpIHsgLyogTm90IHBvc3NpYmxlLi4uICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWYyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMuaW5jCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiRmlsZSBzeW5jaHJvbml6YXRpb24gdG9vbCIKK0hPTUVQQUdFID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2J1Z3ppbGxhLmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworIyBHUEx2MisgKDw8IDMuMC4wKSwgR1BMdjMrICg+PSAzLjAuMCkKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKKyMgbmVlZHMgdG8gYWRkIGFjbCBhbmQgYXR0cgorREVQRU5EUyA9ICJwb3B0IgorCitTUkNfVVJJID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvZnRwL3JzeW5jL3NyYy9yc3luYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnN5bmNkLmNvbmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yc3luY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfQorfQorCitFWFRSQV9PRU1BS0U9J1NUUklQPSIiJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzIuNi45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NTRjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJGaWxlIHN5bmNocm9uaXphdGlvbiB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCisjIG5lZWRzIHRvIGFkZCBhY2wgYW5kIGF0dHIKK0RFUEVORFMgPSAicG9wdCIKKworU1JDX1VSSSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnL2Z0cC9yc3luYy9zcmMvcnN5bmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yc3luY2QuY29uZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5NmQ4ZDg4MzFkYmNhMTc5MTAwOTRlNTZkY2I1OTQyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNhNDM3MzAxYmVjZDg5MGU3MzMwMGJjNjlhMzkxODlmZjE1NjRiYWE3NjE5NDhmZjE0OWIzZGQ3YmRlNjMzZjkiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yc3luY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfQorfQorCitFWFRSQV9PRU1BS0U9J1NUUklQPSIiJworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkNWE5ZDRjNGQzYWYyNWNkNjhmZDgzZThhOGNiMDljIgorCitQUiA9ICJyNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18zLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzRjZGRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKK3JlcXVpcmUgcnN5bmMuaW5jCisKKworU1JDX1VSSSArPSAiZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yc3luYy5naXQtZWFjODU4MDg1LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQzYmQ2Njc2ZjBiNDA0MzI2ZWVlMmQ2M2JlM2NkY2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdkZTQzNjRmY2Y1ZmU0MmYzYmRiNTE0NDE3ZjFjNDBkMTBiYmNhODk2YWJlN2U3ZjJjNTgxYzZlYTA4YTI2MjEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJhY2wgYXR0ciIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wtc3VwcG9ydCwtLWRpc2FibGUtYWNsLXN1cHBvcnQsYWNsLCIKK1BBQ0tBR0VDT05GSUdbYXR0cl0gPSAiLS1lbmFibGUteGF0dHItc3VwcG9ydCwtLWRpc2FibGUteGF0dHItc3VwcG9ydCxhdHRyLCIKKworIyByc3luYyAzLjAgdXNlcyBjb25maWd1cmUuc2ggaW5zdGVhZCBvZiBjb25maWd1cmUsIGFuZAorIyBtYWtlZmlsZSBjaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBjb25maWd1cmUuc2gKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L2NvbmZpZ3VyZSAke1N9L2NvbmZpZ3VyZS5zaAorCWNwIC1mICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCisKKwkjIEJ5IGRlZmF1bHQsIGlmIGNyb3NzY29tcGlsaW5nLCByc3luYyBkaXNhYmxlcyBhIG51bWJlciBvZgorCSMgY2FwYWJpbGl0aWVzLCBoYXJkbGlua2luZyBzeW1saW5rcyBhbmQgc3BlY2lhbCBmaWxlcyAoaS5lLiBkZXZpY2VzKQorCWV4cG9ydCByc3luY19jdl9jYW5faGFyZGxpbmtfc3BlY2lhbD15ZXMKKwlleHBvcnQgcnN5bmNfY3ZfY2FuX2hhcmRsaW5rX3N5bWxpbms9eWVzCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCWNwIC1mICR7U30vY29uZmlndXJlICR7U30vY29uZmlndXJlLnNoCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWE3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5LmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkFuIGludGVycHJldGVyIG9mIG9iamVjdC1vcmllbnRlZCBzY3JpcHRpbmcgbGFuZ3VhZ2UiCitERVNDUklQVElPTiA9ICJSdWJ5IGlzIGFuIGludGVycHJldGVkIHNjcmlwdGluZyBsYW5ndWFnZSBmb3IgcXVpY2sgXAorYW5kIGVhc3kgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nLiBJdCBoYXMgbWFueSBmZWF0dXJlcyB0byBwcm9jZXNzIFwKK3RleHQgZmlsZXMgYW5kIHRvIGRvIHN5c3RlbSBtYW5hZ2VtZW50IHRhc2tzIChhcyBpbiBQZXJsKS4gXAorSXQgaXMgc2ltcGxlLCBzdHJhaWdodC1mb3J3YXJkLCBhbmQgZXh0ZW5zaWJsZS4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ydWJ5LWxhbmcub3JnLyIKK1NFQ1RJT04gPSAiZGV2ZWwvcnVieSIKK0xJQ0VOU0UgPSAiUnVieSB8IEJTRCB8IEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTgzN2IzMjU5MzUxN2FlNDhiOWMzYjVjODdhNWQyODhjIFwKKyAgICBmaWxlOi8vQlNETDttZDU9MTlhYWY2NWM4OGE0MGI1MDhkMTdhZTRiZTUzOWM0YjVcCisgICAgZmlsZTovL0dQTDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjNcCisgICAgZmlsZTovL0xFR0FMO21kNT1jNDQwYWRiNTc1YmE0ZTZlMjM0NGMyNjMwYjZhNTU4NFwKKyIKKworREVQRU5EUyA9ICJydWJ5LW5hdGl2ZSB6bGliIG9wZW5zc2wgdGNsIGxpYnlhbWwgZGIgZ2RibSByZWFkbGluZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnlhbWwtbmF0aXZlIgorCitTSFJUX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorU1JDX1VSSSA9ICJodHRwOi8vY2FjaGUucnVieS1sYW5nLm9yZy9wdWIvcnVieS8ke1NIUlRfVkVSfS9ydWJ5LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9leHRtay5wYXRjaCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKworIyBUaGlzIHNuaXBwZXQgbGV0cyBjb21waWxlZCBleHRlbnNpb25zIHdoaWNoIHJlbHkgb24gZXh0ZXJuYWwgbGlicmFyaWVzLAorIyBzdWNoIGFzIHpsaWIsIGNvbXBpbGUgcHJvcGVybHkuICBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVuIHdoZW4gZXh0bWsucmIKKyMgcnVucywgaXQgdXNlcyB0aGUgbmF0aXZlIGxpYnJhcmllcyBpbnN0ZWFkIG9mIHRoZSB0YXJnZXQgbGlicmFyaWVzLCBhbmQgc28KKyMgbm9uZSBvZiB0aGUgbGlua2luZyBvcGVyYXRpb25zIHN1Y2NlZWQgLS0gd2hpY2ggbWFrZXMgZXh0Y29uZi5yYiB0aGluaworIyB0aGF0IHRoZSBsaWJyYXJpZXMgYXJlbid0IGF2YWlsYWJsZSBhbmQgaGVuY2UgdGhhdCB0aGUgZXh0ZW5zaW9uIGNhbid0IGJlCisjIGJ1aWx0LgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzZWQgLWkgInMjJSVUQVJHRVRfQ0ZMQUdTJSUjJFRBUkdFVF9DRkxBR1MjOyBzIyUlVEFSR0VUX0xERkxBR1MlJSMkVEFSR0VUX0xERkxBR1MjIiAke1N9L2NvbW1vbi5taworICAgIHJtIC1yZiAke1N9L3J1YnkvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjY4NDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS9leHRtay5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC1ydSBydWJ5LTEuOC43LXAyNDgub3JpZy9leHQvZXh0bWsucmIgcnVieS0xLjguNy1wMjQ4L2V4dC9leHRtay5yYgorLS0tIHJ1YnktMS44LjctcDI0OC5vcmlnL2V4dC9leHRtay5yYgkyMDA5LTEyLTI0IDAzOjAxOjU4LjAwMDAwMDAwMCAtMDYwMAorKysrIHJ1YnktMS44LjctcDI0OC9leHQvZXh0bWsucmIJMjAxMC0wMi0xMiAxNTo1NToyNy4zNzAwNjE1NTggLTA2MDAKK0BAIC0zNTQsOCArMzU0LDggQEAKKyAgICRydWJ5ID0gJyQodG9wZGlyKS9taW5pcnVieScgKyBFWEVFWFQKKyBlbmQKKyAkcnVieSA8PCAiIC1JJyQodG9wZGlyKSciCisrJHJ1YnkgPDwgIiAtSSckKHRvcF9zcmNkaXIpL2xpYiciCisgdW5sZXNzIENST1NTX0NPTVBJTElORworLSAgJHJ1YnkgPDwgIiAtSSckKHRvcF9zcmNkaXIpL2xpYiciCisgICAkcnVieSA8PCAiIC1JJyQoZXh0b3V0KS8kKGFyY2gpJyAtSSckKGV4dG91dCkvY29tbW9uJyIgaWYgJGV4dG91dAorICAgJHJ1YnkgPDwgIiAtSS4vLSAtSSckKHRvcF9zcmNkaXIpL2V4dCcgLXJwdXJlbGliLnJiIgorICAgRU5WWyJSVUJZTElCIl0gPSAiLSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Yzk0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5XzIuMi4yLmJiCkBAIC0wLDAgKzEsNDIgQEAKK3JlcXVpcmUgcnVieS5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjMyNmU5OWRkYzc1MzgxYzdiNTBjODVmNzA4OWYzMjYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmZmMwZjMxN2U0MjllNmIyOWQ0YTk4YWM1MjFjM2NlNjU0ODFiZmQyMmE4Y2Y4NDVmYTAyYTdiMTEzZDliNDQiCisKKyMgaXQncyB1bmtub3duIHRvIGNvbmZpZ3VyZSBzY3JpcHQsIGJ1dCB0aGVuIHBhc3NlZCB0byBleHRjb25mLnJiCisjIG1heWJlIGl0J3Mgbm90IHJlYWxseSBuZWVkZWQgYXMgd2UncmUgaGFyZGNvZGluZyB0aGUgcmVzdWx0IHdpdGgKKyMgMDAwMS1zb2NrZXQtZXh0Y29uZi1oYXJkY29kZS13aWRlLWdldGFkZHItaW5mby10ZXN0LW91dGNvLnBhdGNoCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gIi0td2l0aC12YWxncmluZD15ZXMsIC0td2l0aC12YWxncmluZD1ubywgdmFsZ3JpbmQiCitQQUNLQUdFQ09ORklHW2dwbV0gPSAiLS13aXRoLWdtcD15ZXMsIC0td2l0aC1nbXA9bm8sIGdtcCIKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLC0tZW5hYmxlLXdpZGUtZ2V0YWRkcmluZm8sIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0tZGlzYWJsZS12ZXJzaW9uZWQtcGF0aHMgXAorICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgLS1kaXNhYmxlLWR0cmFjZSBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1sb2FkLXJlbGF0aXZlIFwKKyIKKworRVhUUkFfT0VNQUtFID0gIiBcCisgICAgTElCUlVCWUFSRz0nLWxydWJ5LXN0YXRpYycgXAorIgorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9ydWJ5Z2VtcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9yaSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnVieS8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnVieS8qLyovKi8qLy5kZWJ1ZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNhOGUxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cwpAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IDIwMDcgT3BlbmVkaGFuZCBMdGQuCisjCisjIEF1dGhvcjogUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAb3BlbmVkaGFuZC5jb20+CisjCisKKyMgVGhlIGZvbGxvd2luZyBzY3JpcHQgd2lsbCBydW4gYWxsIHRoZSBzY3JpcHRsZXRzIGZvdW5kIGluICNTWVNDT05GRElSIy9kZWItcG9zdGluc3RzLAorIyAjU1lTQ09ORkRJUiMvaXBrLXBvc3RpbnN0cyBvciAjU1lTQ09ORkRJUiMvcnBtLXBvc2luc3RzLgorCisjIHRoZSBvcmRlciBvZiB0aGlzIGxpc3QgaXMgaW1wb3J0YW50LCBkbyBub3QgY2hhbmdlIQorYmFja2VuZF9saXN0PSJycG0gZGViIGlwayIKKworcG1faW5zdGFsbGVkPWZhbHNlCisKK2ZvciBwbSBpbiAkYmFja2VuZF9saXN0OyBkbworCXBpX2Rpcj0iI1NZU0NPTkZESVIjLyRwbS1wb3N0aW5zdHMiCisKKwlbIC1kICRwaV9kaXIgXSAmJiBicmVhaworCisJY2FzZSAkcG0gaW4KKwkJImRlYiIpCisJCQlpZiBbIC1zICIjTE9DQUxTVEFURURJUiMvbGliL2Rwa2cvc3RhdHVzIiBdOyB0aGVuCisJCQkJcG1faW5zdGFsbGVkPXRydWUKKwkJCQlicmVhaworCQkJZmkKKwkJCTs7CisKKwkJImlwayIpCisJCQlpZiBbIC1zICIvdmFyL2xpYi9vcGtnL3N0YXR1cyIgXTsgdGhlbgorCQkJCXBtX2luc3RhbGxlZD10cnVlCisJCQkJYnJlYWsKKwkJCWZpCisJCQk7OworCWVzYWMKK2RvbmUKKworcmVtb3ZlX3Jjc2RfbGluayAoKSB7CisJaWYgWyAtbiAiYHdoaWNoIHVwZGF0ZS1yYy5kYCIgXTsgdGhlbgorCQl1cGRhdGUtcmMuZCAtZiBydW4tcG9zdGluc3RzIHJlbW92ZQorCWZpCit9CisKK2lmIFsgLXogIiRwaV9kaXIiIF07IHRoZW4KKwlyZW1vdmVfcmNzZF9saW5rCisJZXhpdCAwCitmaQorCitbIC1lICNTWVNDT05GRElSIy9kZWZhdWx0L3Bvc3RpbnN0IF0gJiYgLiAjU1lTQ09ORkRJUiMvZGVmYXVsdC9wb3N0aW5zdAorCitpZiBbICIkUE9TVElOU1RfTE9HR0lORyIgPSAiMSIgXTsgdGhlbgorCXJtIC1mICRMT0dGSUxFCisJYXBwZW5kX2xvZz0iPj4kTE9HRklMRSAyPiYxIgorZmkKKworZXhlY19wb3N0aW5zdF9zY3JpcHRsZXRzKCkgeworCWZvciBpIGluIGBscyAkcGlfZGlyYDsgZG8KKwkJaT0kcGlfZGlyLyRpCisJCWVjaG8gIlJ1bm5pbmcgcG9zdGluc3QgJGkuLi4iCisJCVsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdICYmIGV2YWwgZWNobyAiUnVubmluZyBwb3N0aW5zdCAkaS4uLiIgJGFwcGVuZF9sb2cKKwkJaWYgWyAteCAkaSBdOyB0aGVuCisJCQlldmFsIHNoIC1jICRpICRhcHBlbmRfbG9nCisJCQlybSAkaQorCQllbHNlCisJCQllY2hvICJFUlJPUjogcG9zdGluc3QgJGkgZmFpbGVkLiIKKwkJCVsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdICYmIGV2YWwgZWNobyAiRVJST1I6IHBvc3RpbnN0ICRpIGZhaWxlZC4iICRhcHBlbmRfbG9nCisJCQlyZW1vdmVfcGlfZGlyPTAKKwkJZmkKKwlkb25lCit9CisKK3JlbW92ZV9waV9kaXI9MQoraWYgJHBtX2luc3RhbGxlZDsgdGhlbgorCWNhc2UgJHBtIGluCisJCSJpcGsiKQorCQkJZXZhbCBvcGtnIGNvbmZpZ3VyZSAkYXBwZW5kX2xvZworCQkJOzsKKworCQkiZGViIikKKwkJCWV2YWwgZHBrZyAtLWNvbmZpZ3VyZSAtYSAkYXBwZW5kX2xvZworCQkJOzsKKwllc2FjCitlbHNlCisJZXhlY19wb3N0aW5zdF9zY3JpcHRsZXRzCitmaQorCisjIHNpbmNlIGFsbCBwb3N0aW5zdGFsbHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCByZW1vdmUgdGhlIHBvc3RpbnN0YWxscyBkaXJlY3RvcnkKKyMgYW5kIHRoZSByY1MuZCBsaW5rCitpZiBbICRyZW1vdmVfcGlfZGlyID0gMSBdOyB0aGVuCisJcm0gLXJmICRwaV9kaXIKKwlyZW1vdmVfcmNzZF9saW5rCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNhMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLmluaXQKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworcnVuLXBvc3RpbnN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWEwNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzLnNlcnZpY2UKQEAgLTAsMCArMSwxNiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SdW4gcGVuZGluZyBwb3N0aW5zdHMKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorQ29uZGl0aW9uUGF0aEV4aXN0c0dsb2I9I1NZU0NPTkZESVIjLyotcG9zdGluc3RzCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFeGVjU3RhcnQ9I1NCSU5ESVIjL3J1bi1wb3N0aW5zdHMKK0V4ZWNTdGFydFBvc3Q9I0JBU0VfQklORElSIy9zeXN0ZW1jdGwgZGlzYWJsZSBydW4tcG9zdGluc3RzLnNlcnZpY2UKK1JlbWFpbkFmdGVyRXhpdD1ObworVGltZW91dFNlYz0wCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjOTRlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHNfMS4wLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiUnVucyBwb3N0aW5zdGFsbCBzY3JpcHRzIG9uIGZpcnN0IGJvb3Qgb2YgdGhlIHRhcmdldCBkZXZpY2UiCitTRUNUSU9OID0gImRldmVsIgorUFIgPSAicjkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gImZpbGU6Ly9ydW4tcG9zdGluc3RzIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wb3N0aW5zdHMuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcG9zdGluc3RzLnNlcnZpY2UiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBhbGxhcmNoIHN5c3RlbWQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gInJ1bi1wb3N0aW5zdHMiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSBTIC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJydW4tcG9zdGluc3RzLnNlcnZpY2UiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnVuLXBvc3RpbnN0cyAke0R9JHtzYmluZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3J1bi1wb3N0aW5zdHMuaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnVuLXBvc3RpbnN0cworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ydW4tcG9zdGluc3RzLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisKKwlzZWQgLWkgLWUgJ3M6I1NZU0NPTkZESVIjOiR7c3lzY29uZmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I1NCSU5ESVIjOiR7c2JpbmRpcn06ZycgXAorICAgICAgICAgICAgICAgLWUgJ3M6I0JBU0VfQklORElSIzoke2Jhc2VfYmluZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojTE9DQUxTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfTpnJyBcCisgICAgICAgICAgICAgICAke0R9JHtzYmluZGlyfS9ydW4tcG9zdGluc3RzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3J1bi1wb3N0aW5zdHMuc2VydmljZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2F1dG9oZWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzliMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorUGF0Y2ggb2J0YWluZWQgZnJvbSBPcGVuRW1iZWRkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9NYWtlZmlsZS5hbX5hdXRvaGVsbC5wYXRjaAkyMDAxLTAxLTMwIDE1OjQyOjIxLjAwMDAwMDAwMCArMDEwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9NYWtlZmlsZS5hbQkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTEsNiArMSw1IEBACisgcHJpbWl0aXZlX3NjcmlwdHMgPSBzZ21sd2hpY2gKKyAKKy1iaW5kaXIgPSAkKHByZWZpeCkvYmluCisgYmluX1NDUklQVFMgPSBpbnN0YWxsLWNhdGFsb2cgJChwcmltaXRpdmVfc2NyaXB0cykKKyAKKyBFWFRSQV9ESVNUID0gIGluc3RhbGwtY2F0YWxvZy5pbiAkKHByaW1pdGl2ZV9zY3JpcHRzKQorLS0tIC9kZXYvbnVsbAkyMDAzLTA5LTIzIDE5OjU5OjIyLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL2Jpbi9zZ21sd2hpY2guaW4JMjAwNC0wNi0xNyAxMTo1MToxMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNyBAQAorKyMhL2Jpbi9zaAorKyMgTG9jYXRpb24gb2YgdGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlIGZvciBjb25zaXN0ZW5jeSB3aXRoIG5vbi1MU0IgcGxhdGZvcm1zCisrIyBTZW5kIGFueSBjb21tZW50cyB0byBFcmljIEJpc2Nob2ZmIDxlcmljQGNhbGRlcmEuZGU+CisrIyBUaGlzIHByb2dyYW0gaXMgdW5kZXIgR1BMIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMuCisrCisrZWNobyAiQHN5c2NvbmZkaXJAL3NnbWwvc2dtbC5jb25mIgorKyMgU2ltcGxlLCBpc24ndCBpdD8gOy0pCistLS0gL2Rldi9udWxsCTIwMDMtMDktMjMgMTk6NTk6MjIuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvY29uZmlnL3NnbWwuY29uZi5pbgkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyIEBACisrU0dNTF9CQVNFX0RJUj1AZGF0YWRpckAvc2dtbAorK1NHTUxfQ0FUQUxPR1NfRElSPUBzeXNjb25mZGlyQC9zZ21sCistLS0gc2dtbC1jb21tb24tMC42LjMvY29uZmlndXJlLmlufmF1dG9oZWxsLnBhdGNoCTIwMDEtMDUtMjUgMTg6NDA6NTQuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvY29uZmlndXJlLmluCTIwMDQtMDYtMTcgMTE6NTM6MjIuMDAwMDAwMDAwICswMjAwCitAQCAtMywxMSArMyw2IEBACisgCisgQU1fSU5JVF9BVVRPTUFLRShzZ21sLWNvbW1vbiwgMC42LjMpCisgCistZG9jZGlyPSckKHByZWZpeCkvZG9jJworLUFDX1NVQlNUKGRvY2RpcikKKy0KKy1kbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKy0KKyBkbmwgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCisgCisgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorQEAgLTE4LDYgKzEzLDUgQEAKKyAKKyBBQ19PVVRQVVQoTWFrZWZpbGUgXAorICAgICAgICAgICBiaW4vTWFrZWZpbGUgYmluL2luc3RhbGwtY2F0YWxvZyBcCistICAgICAgICAgIGNvbmZpZy9NYWtlZmlsZSBcCistICAgICAgICAgIGRvYy9NYWtlZmlsZSBkb2MvSFRNTC9NYWtlZmlsZSBkb2MvbWFuL01ha2VmaWxlIGRvYy9yZWZlbnRyeS9NYWtlZmlsZSBcCisrICAgICAgICAgIGNvbmZpZy9NYWtlZmlsZSBjb25maWcvc2dtbC5jb25mIGJpbi9zZ21sd2hpY2ggXAorICAgICAgICAgICBzZ21sLWlzby1lbnRpdGllcy9NYWtlZmlsZSB4bWwtaXNvLWVudGl0aWVzL01ha2VmaWxlKQorCistLS0gc2dtbC1jb21tb24tMC42LjMvTWFrZWZpbGUuYW1+bm8tZG9jcwkyMDAxLTA1LTI1IDE4OjIyOjAxLjAwMDAwMDAwMCArMDIwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL01ha2VmaWxlLmFtCTIwMDQtMDYtMTcgMTE6NDk6MDkuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gYmluIGNvbmZpZyBkb2Mgc2dtbC1pc28tZW50aXRpZXMgeG1sLWlzby1lbnRpdGllcworK1NVQkRJUlMgPSBiaW4gY29uZmlnIHNnbWwtaXNvLWVudGl0aWVzIHhtbC1pc28tZW50aXRpZXMKKyAKKyBzZ21sY29kaXIgPSAkKHByZWZpeCkvc2hhcmUvc2dtbAorIHNnbWxjb19EQVRBID0geG1sLmRjbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGIzZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLTAuNi4zL2xpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVGhlIENPUFlJTkcgZmlsZSBzZ21sLWNvbW1vbiBzaGlwcyB3aXRoIGlzIGp1c3QgYSBzeW1saW5rIHRvCisvdXNyL3NoYXJlL2F1dG9tYWtlL0NPUFlJTkcsIHdoaWNoIG1lYW5zIHdlIGNhbid0IHZlcmlmeSBpdAordXNpbmcgb3VyIG5vcm1hbCBtZWFucy4gV2Ugd29ya2Fyb3VuZCB0aGlzIGJ5IHVzaW5nIHRoaXMgcGF0Y2gKK3RvIGNyZWF0ZSBvdXIgb3duIGxpY2Vuc2UgZmlsZS4gCisKK1Vwc3RyZWFtIHdhcyBub3RpZmllZCBhYm91dCB0aGlzIG9uIDIwMTEtMDEtMjQuIFdoZW4gdXBncmFkaW5nCit0aGlzIHJlY2lwZSwgdGhpcyBzaG91bGQgYmUgZml4ZWQgYW5kIHlvdSBzaG91bGQgcmVtb3ZlIHRoaXMKK3BhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBzZ21sLWNvbW1vbi0wLjYuMy5vcmlnL0xJQ0VOU0UtR1BMdjIgc2dtbC1jb21tb24tMC42LjMvTElDRU5TRS1HUEx2MgorLS0tIHNnbWwtY29tbW9uLTAuNi4zLm9yaWcvTElDRU5TRS1HUEx2MgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIHNnbWwtY29tbW9uLTAuNi4zL0xJQ0VOU0UtR1BMdjIJMjAxMS0wMS0yOCAxNzowNToxNy4yOTk1MjgwMDEgLTA4MDAKK0BAIC0wLDAgKzEsMTIgQEAKKytDb3B5cmlnaHQgKEMpIDE5OTcgQ2hyaXN0aWFuIFNjaHdhcnogPHNjaHdhcnpAZGViaWFuLm9yZz4uCisrQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQXJkbyB2YW4gUmFuZ2Vscm9vaWogPGFyZG9AZGViaWFuLm9yZz4KKysKKytUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyt0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisrdmVyc2lvbi4KKysKKytUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCB3aXRob3V0CisrYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5IG9yCisrZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NzUzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tbmF0aXZlXzAuNi4zLmJiCkBAIC0wLDAgKzEsNzEgQEAKK1NVTU1BUlkgPSAiQmFzZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBTR01MIGFuZCBYTUwiCitERVNDUklQVElPTiA9ICJUaGUgc2dtbC1jb21tb24gcGFja2FnZSBnYXRoZXJzIHZlcnkgYmFzaWMgXAorc3R1ZmYgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBTR01MIGFuZCBYTUwsIHN1Y2ggYXMgeG1sLmRjbCwgXAorYSBTR01MIGRlY2xhcmF0aW9uIG9mIFhNTDsgaXNvLWVudGl0aWVzLCBhIGxpc3Qgb2YgdGhlIGJhc2ljIFwKK1NHTUwgSVNPIGVudGl0aWVzOyBhbmQgaW5zdGFsbC1jYXRhbG9nLCBhIHNjcmlwdCB1c2VkIHRvIFwKK2FkZCBlbnRyaWVzIHRvIChvciByZW1vdmUgZW50cmllcyBmcm9tKSBjZW50cmFsaXplZCBjYXRhbG9ncyBcCit3aG9zZSBlbnRyaWVzIGFyZSBwb2ludGVycyB0byBTR01MIG9wZW4gY2F0YWxvZ3MsIFwKK2FzIGRlZmluZWQgYnkgT0FTSVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorIyBTZWUgdGhlIGNvbW1lbnRzIGluIGxpY2Vuc2UucGF0Y2ggd2hlbiB1cGdyYWRpbmcgdGhpcyByZWNpcGUuCisjIFRoaXMgaXMgaW50ZWRlZCB0byBiZSBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1HUEx2MjttZDU9YWI4YTUwYWJlODZkZmM4NTllMTQ4YmFhZTA0M2M4OWIiCitTRUNUSU9OID0gImJhc2UiCisKK1BSID0gInIxIgorCityZXF1aXJlIHNnbWwtY29tbW9uXyR7UFZ9LmJiCitpbmhlcml0IG5hdGl2ZQorCitTID0gIiR7V09SS0RJUn0vc2dtbC1jb21tb24tJHtQVn0iCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAic2dtbF9jb21tb25fbmF0aXZlX21hbmdsZSIKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gInNnbWxfY29tbW9uX3NzdGF0ZV9wb3N0aW5zdCIKK0NMRUFORlVOQ1MgKz0gInNnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiIKKworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGluc3RhbGwtY2F0YWxvZyBzY3JpcHQgY29udGFpbnMgaGFyZC1jb2RlZCByZWZlcmVuY2VzIHRvCisJIyB7c3lzY29uZmRpcn0uIENoYW5nZSBpdCB0byAke0R9JHtzeXNjb25mZGlyfS4KKwlzZWQgLWkgLWUgInN8JHtzeXNjb25mZGlyfS9zZ21sfCR7RH0ke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtEfSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cKKworCSR7RH0ke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke0R9JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwkjIFRoZSBzZ21sLWRvY2Jvb2suY2F0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgYnkgc3N0YXRlX3Bvc3RpbnN0CisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0Cit9CisKK3NnbWxfY29tbW9uX25hdGl2ZV9tYW5nbGUgKCkgeworCSMgUmV2ZXJ0IGJhY2sgdG8gJHtzeXNjb25mZGlyfSBwYXRoIGluIGluc3RhbGwtY2F0YWxvZworCXNlZCAtaSAtZSAic3wke0R9JHtzeXNjb25mZGlyfS9zZ21sfCR7c3lzY29uZmRpcn0vc2dtbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke1NUQUdJTkdfQklORElSfS9pbnN0YWxsLWNhdGFsb2cKKwkjIENoYW5nZSBwYXRoIGZyb20gJHtEfSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyB0byAke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cgaW4gc2dtbC1lbnQuY2F0CisJc2VkIC1pIC1lICJzfCR7RH0ke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2d8JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwkjIFJlbW92ZSAke0R9IHBhdGggZnJvbSBjYXRhbG9nIGZpbGUgY3JlYXRlZCBieSBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0CisJc2VkIC1pIC1lICJzfCR7RH18fGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCit9CisKK3NnbWxfY29tbW9uX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkke2JpbmRpcn0vaW5zdGFsbC1jYXRhbG9nIC0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwkJaWYgWyAtZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBdOyB0aGVuCisJCQlmb3IgY2F0YWxvZyBpbiBgYXdrICd7cHJpbnQgJDJ9JyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJha2A7IGRvCisJCQkJaWYgWyAhIGBncmVwICRjYXRhbG9nICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IDE+IC9kZXYvbnVsbCAyPiYxYCBdOyB0aGVuCisJCQkJCSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgXAorCQkJCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJGNhdGFsb2cKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCWZpCit9CisKK3NnbWxfY29tbW9uX3NzdGF0ZV9jbGVhbiAoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyByZW1vdmVkIGZyb20gc3N0YXRlIGNhY2hlLgorCWlmIFsgLWYgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXTsgdGhlbgorCQlzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZW50LmNhdC9kJyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb25fMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5ODY3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYgpAQCAtMCwwICsxLDY4IEBACitTVU1NQVJZID0gIkJhc2UgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggU0dNTCBhbmQgWE1MIgorREVTQ1JJUFRJT04gPSAiVGhlIHNnbWwtY29tbW9uIHBhY2thZ2UgZ2F0aGVycyB2ZXJ5IGJhc2ljIFwKK3N0dWZmIG5lY2Vzc2FyeSB0byB3b3JrIHdpdGggU0dNTCBhbmQgWE1MLCBzdWNoIGFzIHhtbC5kY2wsIFwKK2EgU0dNTCBkZWNsYXJhdGlvbiBvZiBYTUw7IGlzby1lbnRpdGllcywgYSBsaXN0IG9mIHRoZSBiYXNpYyBcCitTR01MIElTTyBlbnRpdGllczsgYW5kIGluc3RhbGwtY2F0YWxvZywgYSBzY3JpcHQgdXNlZCB0byBcCithZGQgZW50cmllcyB0byAob3IgcmVtb3ZlIGVudHJpZXMgZnJvbSkgY2VudHJhbGl6ZWQgY2F0YWxvZ3MgXAord2hvc2UgZW50cmllcyBhcmUgcG9pbnRlcnMgdG8gU0dNTCBvcGVuIGNhdGFsb2dzLCBcCithcyBkZWZpbmVkIGJ5IE9BU0lTLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG9jYm9vay10b29scy8iCitMSUNFTlNFID0gIkdQTHYyKyIKKyMgU2VlIHRoZSBjb21tZW50cyBpbiBsaWNlbnNlLnBhdGNoIHdoZW4gdXBncmFkaW5nIHRoaXMgcmVjaXBlLgorIyBUaGlzIGlzIGludGVkZWQgdG8gYmUgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC4KK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UtR1BMdjI7bWQ1PWFiOGE1MGFiZTg2ZGZjODU5ZTE0OGJhYWUwNDNjODliIgorU0VDVElPTiA9ICJiYXNlIgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJmdHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vcHViL2RvY2Jvb2stdG9vbHMvbmV3LXRyaWFscy9TT1VSQ0VTL3NnbWwtY29tbW9uLSR7UFZ9LnRneiBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvaGVsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWNlbnNlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTAzYzk4MjhmMjQ4MjBkZjg2ZTU1ZTc4NjJlMjg5NzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RjNDE4YzFkMzYxMTIzZmZjNWU0NWQ2MWYxYjk3MjU3OTQwYThlYjM1ZDBiZmJiYzQ5MzM4MWNjNWIxZjk1OSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJIyBpbnN0YWxsLWNhdGFsb2cgc2NyaXB0IGNvbnRhaW5zIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC9ldGMvc2dtbAorCXNlZCAtaSAtZSAnc3xcKFsgIl1cK1wpL2V0Yy9zZ21sfFwxJHtzeXNjb25mZGlyfS9zZ21sfGcnIGJpbi9pbnN0YWxsLWNhdGFsb2cKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc2dtbCIKKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworICAgIGlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorICAgIGVsc2UKKwlpZiAhIGdyZXAgLXEgJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdDsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisJZmkKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nOyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworCWZpCisKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0OyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdAorCWZpCisJaWYgISBncmVwIC1xICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2c7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCIgPj4gJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZworCWZpCisgICAgZmkKK30KKworcGtnX3Bvc3RybV8ke1BOfSgpIHsKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLXJlbW92ZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IFwKKwkJJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nCisKKwlpbnN0YWxsLWNhdGFsb2cgXAorCQktLXJlbW92ZSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCSR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sc3BsL3NnbWxzcGwtbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM0NjBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgcG9zdC1wcm9jZXNzb3IgZm9yIFNHTUxTIGFuZCBOU0dNTFMiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZ2l0cGFuL1NHTUxTcG0iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZ2l0cGFuL1NHTUxTcG0gXAorICAgICAgICAgICIKKworU1JDUkVWID0gIjcxNTk1YjliNWUzNmJmYzAwMDQ2OTk1ZTA1ODkyNmJkMjc3OTNmZWYiCisKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBuYXRpdmUgY3BhbgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBsbiAtcyBzZ21sc3BsLnBsICR7RH0ke2JpbmRpcn0vc2dtbHNwbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3YjI4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zcXVhc2hmcy10b29scy9zcXVhc2hmcy10b29sc19naXQuYmIKQEAgLTAsMCArMSwzNyBAQAorIyBOb3RlLCB3ZSBjYW4gcHJvYmFibHkgcmVtb3ZlIHRoZSBsem1hIG9wdGlvbiBhcyBpdCBoYXMgYmUgcmVwbGFjZWQgd2l0aCB4eiwKKyMgYW5kIEkgZG9uJ3QgdGhpbmsgdGhlIGtlcm5lbCBzdXBwb3J0cyBpdCBhbnkgbW9yZS4KK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmlwdWxhdGluZyBTcXVhc2hGUyBmaWxlc3lzdGVtcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMLTIgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLy4uLy4uLzd6Qy50eHQ7YmVnaW5saW5lPTEyO2VuZGxpbmU9MTY7bWQ1PTIwNTZjZDZkOTE5ZWJjMzgwNzYwMjE0M2M3NDQ5YTdjIFwKKyIKK0RFUEVORFMgPSAiYXR0ciB6bGliIHh6IGx6byBsejQiCisKK1BWID0gIjQuMytnaXRyJHtTUkNQVn0iCitTUkNSRVYgPSAiOWMxZGI2ZDEzYTUxYTJlMDA5ZjAwMjdlZjMzNmNlMDM2MjRlYWMwZCIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9wbG91Z2hlci9zcXVhc2hmcy10b29scy5naXQ7cHJvdG9jb2w9aHR0cHMgXAorICAgICAgICAgICBodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9zZXZlbnppcC9sem1hNDY1LnRhci5iejI7bmFtZT1sem1hIFwKKyIKK1NSQ19VUklbbHptYS5tZDVzdW1dID0gIjI5ZDVmZmQwM2E1YTNlNTFhZWY2YTc0ZTllYWZiNzU5IgorU1JDX1VSSVtsem1hLnNoYTI1NnN1bV0gPSAiYzkzNWZkMDRkZDhlMGU4YzY4OGEzMDc4ZjM2NzVkNjk5Njc5YTkwYmU4MWMxMjY4NjgzN2UwODgwYWEwZmExZSIKKworUyA9ICIke1dPUktESVJ9L2dpdC9zcXVhc2hmcy10b29scyIKKworIyBFWFRSQV9PRU1BS0UgaXMgdHlwaWNhbGx5OiAtZSBNQUtFRkxBR1M9CisjIHRoZSAtZSBjYXVzZXMgcHJvYmxlbXMgYXMgQ0ZMQUdTIGlzIG1vZGlmaWVkIGluIHRoZSBNYWtlZmlsZSwgc28KKyMgd2UgcmVkZWZpbmUgRVhUUkFfT0VNQUtFIGhlcmUKK0VYVFJBX09FTUFLRSA9ICJNQUtFRkxBR1M9IExaTUFfU1VQUE9SVD0xIExaTUFfRElSPS4uLy4uIFhaX1NVUFBPUlQ9MSBMWk9fU1VQUE9SVD0xIExaNF9TVVBQT1JUPTEiCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSBta3NxdWFzaGZzIHVuc3F1YXNoZnMKK30KK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgbWtzcXVhc2hmcyAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgdW5zcXVhc2hmcyAke0R9JHtzYmluZGlyfS8KK30KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTM5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb20gZjg1ODU0MTMxYzgyNjVmMmViNTljNzE0ZGNlYTVjNGIzZGMwOWJlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDE0OjI5OjM3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCisKK0l0IGlzIG1pc3NpbmcgZnJvbSB0aGUgdGFyYmFsbCwgYnV0IGl0IGlzIHByZXNlbnQgaW4gZ2l0IGZvciB2NC4xMAorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW4ua29vaUBsaW5hcm8ub3JnPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorCitkaWZmIC0tZ2l0IGEvbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaCBiL2xpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45YTVlMzNlCistLS0gL2Rldi9udWxsCisrKysgYi9saW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCitAQCAtMCwwICsxLDIgQEAKKytleHRlcm4gdWludDY0X3QgKmNvbnN0IGFhcmNoNjRfc3BfcHRyOworK2V4dGVybiB1aW50MzJfdCAqY29uc3QgYXJtX3NwX3B0cjsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM0NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdHJhY2UvY29kZS9jaS8zNDYwZGM0ODZkMzMzMjMxOTk4ZGUwZjE5OTE4MjA0YWFjZWU5YWUzCisKK0V4cGVjdGVkIHRvIGJlIHJlbGVhc2VkIG9mZmljaWFsbHkgYXMgcGFydCBvZiBzdHJhY2UgNC4xMQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorCitGcm9tIDM0NjBkYzQ4NmQzMzMyMzE5OThkZTBmMTk5MTgyMDRhYWNlZTlhZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogU2F0LCAyOCBNYXIgMjAxNSAxODo0MDoxMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPiBmb3IgX0lPQ18qIG1hY3JvcworCitGaXggYSBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggbXVzbCBsaWJjLgorCisqIGV2ZGV2LmM6IEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+LgorKiBpb2N0bC5jOiBJbmNsdWRlIDxsaW51eC9pb2N0bC5oPiBpbnN0ZWFkIG9mIDxhc20vaW9jdGwuaD4uCisqIGlvY3Rsc29ydC5jOiBMaWtld2lzZS4KKworUmVwb3J0ZWQtYnk6IERpbWEgS3Jhc25lciA8ZGltYUBkaW1ha3Jhc25lci5jb20+CitBY2tlZC1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorLS0tCisgZXZkZXYuYyAgICAgfCAyICsrCisgaW9jdGwuYyAgICAgfCAyICstCisgaW9jdGxzb3J0LmMgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ldmRldi5jIGIvZXZkZXYuYworaW5kZXggOWE3NDMwZC4uZTA2ZjljMSAxMDA2NDQKKy0tLSBhL2V2ZGV2LmMKKysrKyBiL2V2ZGV2LmMKK0BAIC0yOCw2ICsyOCw4IEBACisgCisgI2luY2x1ZGUgImRlZnMuaCIKKyAKKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKysKKyAjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICisgI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisgI2luY2x1ZGUgInhsYXQvZXZkZXZfYWJzLmgiCitkaWZmIC0tZ2l0IGEvaW9jdGwuYyBiL2lvY3RsLmMKK2luZGV4IDQ2ZjgzMzQuLmM2N2QwNDggMTAwNjQ0CistLS0gYS9pb2N0bC5jCisrKysgYi9pb2N0bC5jCitAQCAtMjksNyArMjksNyBAQAorICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCistI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorICNpbmNsdWRlICJ4bGF0L2lvY3RsX2RpcnMuaCIKKyAKKyAjaWZkZWYgSEFWRV9MSU5VWF9JTlBVVF9ICitkaWZmIC0tZ2l0IGEvaW9jdGxzb3J0LmMgYi9pb2N0bHNvcnQuYworaW5kZXggMzMzNTU2Yy4uOWMzMTY5MSAxMDA2NDQKKy0tLSBhL2lvY3Rsc29ydC5jCisrKysgYi9pb2N0bHNvcnQuYworQEAgLTMzLDcgKzMzLDcgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKysjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyAKKyBzdHJ1Y3QgaW9jdGxlbnQgeworIAljb25zdCBjaGFyICppbmZvOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwNzJmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0cmFjZS9jb2RlL2NpL2QzNGUwMGIyOTM5NDJiMTAxMmRkYzQ5ZWQzYWIzNzlhMzIzMzc2MTEKKworRXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQgb2ZmaWNpYWxseSBhcyBwYXJ0IG9mIHN0cmFjZSA0LjExCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CisKK0Zyb20gZDM0ZTAwYjI5Mzk0MmIxMDEyZGRjNDllZDNhYjM3OWEzMjMzNzYxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitEYXRlOiBTYXQsIDI4IE1hciAyMDE1IDE4OjIxOjA5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPHN5cy9zdGF0Lmg+IGZvciBTX0kqIG1hY3JvcworCitGaXggYSBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggbXVzbCBsaWJjLgorCisqIG1rbm9kLmM6IEluY2x1ZGUgPHN5cy9zdGF0Lmg+LgorKiBwcmludG1vZGUuYzogTGlrZXdpc2UuCisKK1JlcG9ydGVkLWJ5OiBEaW1hIEtyYXNuZXIgPGRpbWFAZGltYWtyYXNuZXIuY29tPgorQWNrZWQtYnk6IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KKy0tLQorIG1rbm9kLmMgICAgIHwgMSArCisgcHJpbnRtb2RlLmMgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWtub2QuYyBiL21rbm9kLmMKK2luZGV4IDA3ZTlhNDUuLjE0NjMyMzIgMTAwNjQ0CistLS0gYS9ta25vZC5jCisrKysgYi9ta25vZC5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpZmRlZiBNQUpPUl9JTl9TWVNNQUNST1MKKyAjIGluY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KK2RpZmYgLS1naXQgYS9wcmludG1vZGUuYyBiL3ByaW50bW9kZS5jCitpbmRleCA0ZGYxYjlmLi5hNzIxOTM2IDEwMDY0NAorLS0tIGEvcHJpbnRtb2RlLmMKKysrKyBiL3ByaW50bW9kZS5jCitAQCAtMSw2ICsxLDcgQEAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorIAorICNpbmNsdWRlICJ4bGF0L21vZGV0eXBlcy5oIgorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjAzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9NYWtlZmlsZS1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitzdHJhY2U6IEFkZCBwdGVzdAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogR2FicmllbCBCYXJidSA8Z2FicmllbC5iYXJidUBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgfCAgMiArLQorIHRlc3RzL01ha2VmaWxlLmFtIHwgMTggKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU3Mzk1OGMuLjVmMGRmZWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYsNyArNiw3IEBAIEFDX0lOSVQoW3N0cmFjZV0sCisgQUNfQ09ORklHX1NSQ0RJUihbc3RyYWNlLmNdKQorIEFDX0NPTkZJR19BVVhfRElSKFsuXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorLUFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC14eiBuby1kaXN0LWd6aXAgc2lsZW50LXJ1bGVzIHBhcmFsbGVsLXRlc3RzXSkKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QteHogbm8tZGlzdC1nemlwIHNpbGVudC1ydWxlcyBzZXJpYWwtdGVzdHNdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIEFDX0NBTk9OSUNBTF9IT1NUCisgCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZmY1ZTEzNi4uOTg0YmRiNiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEwMSwzICsxMDEsMjEgQEAgRVhUUkFfRElTVCA9IGluaXQuc2ggcnVuLnNoIFwKKyAJICAgICAkKFRFU1RTKQorIAorIENMRUFORklMRVMgPSAkKFRFU1RTOj0udG1wKQorKworK2J1aWxkdGVzdC1URVNUUzogJChjaGVja19QUk9HUkFNUykgJChURVNUUykKKysKKytpbnN0YWxsLXB0ZXN0OgorKwlpbnN0YWxsICQoQlVJTERESVIpL3N0cmFjZSAkKERFU1RESVIpCisrCWluc3RhbGwgIiQoc3JjZGlyKS8uLiIvc3RyYWNlLWxvZy1tZXJnZSAkKERFU1RESVIpCisrCWluc3RhbGwgLWQgJChERVNURElSKS8kKFRFU1RESVIpCisrCWNwICQoQlVJTERESVIpLyQoVEVTVERJUikvTWFrZWZpbGUgJChERVNURElSKS8kKFRFU1RESVIpCisrCXNlZCAtaSAtZSAncy9eTWFrZWZpbGU6L19NYWtlZmlsZTovJyAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJc2VkIC1pIC1lICdzL2Jhc2gvc2gvJyAkKERFU1RESVIpLyQoVEVTVERJUikvTWFrZWZpbGUKKysJZm9yIGZpbGUgaW4gJChjaGVja19QUk9HUkFNUyk7IGRvIFwKKysJCWluc3RhbGwgJChCVUlMRERJUikvJChURVNURElSKS8kJGZpbGUgJChERVNURElSKS8kKFRFU1RESVIpOyBcCisrCWRvbmUKKysJZm9yIGZpbGUgaW4gJChFWFRSQV9ESVNUKTsgZG8gXAorKwkJaW5zdGFsbCAkKHNyY2RpcikvJCRmaWxlICQoREVTVERJUikvJChURVNURElSKTsgXAorKwkJc2VkIC1pIC1lICdzLyQke3NyY2Rpcj0ufS8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGZpbGU7IFwKKysJZG9uZQorKwlmb3IgaSBpbiBuZXQgbmV0LWZkIHNjbV9yaWdodHMtZmQgc2lnYWN0aW9uOyBkbyBzZWQgLWkgLWUgJ3MvJCRzcmNkaXIvLi9nJyAkKERFU1RESVIpLyQoVEVTVERJUikvJCRpLnRlc3Q7IGRvbmUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvZ2l0LXZlcnNpb24tZ2VuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmZWU3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4KQEAgLTAsMCArMSwyMjUgQEAKKyMhL2Jpbi9zaAorIyBQcmludCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0yMDEyLTEyLTMxLjIzOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIHNjcmlwdCBpcyBkZXJpdmVkIGZyb20gR0lULVZFUlNJT04tR0VOIGZyb20gR0lUOiBodHRwOi8vZ2l0Lm9yLmN6Ly4KKyMgSXQgbWF5IGJlIHJ1biB0d28gd2F5czoKKyMgLSBmcm9tIGEgZ2l0IHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlICJnaXQgZGVzY3JpYmUiIGNvbW1hbmQgYmVsb3cKKyMgICBwcm9kdWNlcyB1c2VmdWwgb3V0cHV0ICh0aHVzIHJlcXVpcmluZyBhdCBsZWFzdCBvbmUgc2lnbmVkIHRhZykKKyMgLSBmcm9tIGEgbm9uLWdpdC1yZXBvIGRpcmVjdG9yeSBjb250YWluaW5nIGEgLnRhcmJhbGwtdmVyc2lvbiBmaWxlLCB3aGljaAorIyAgIHByZXN1bWVzIHRoaXMgc2NyaXB0IGlzIGludm9rZWQgbGlrZSAiLi9naXQtdmVyc2lvbi1nZW4gLnRhcmJhbGwtdmVyc2lvbiIuCisKKyMgSW4gb3JkZXIgdG8gdXNlIGludHJhLXZlcnNpb24gc3RyaW5ncyBpbiB5b3VyIHByb2plY3QsIHlvdSB3aWxsIG5lZWQgdHdvCisjIHNlcGFyYXRlIGdlbmVyYXRlZCB2ZXJzaW9uIHN0cmluZyBmaWxlczoKKyMKKyMgLnRhcmJhbGwtdmVyc2lvbiAtIHByZXNlbnQgb25seSBpbiBhIGRpc3RyaWJ1dGlvbiB0YXJiYWxsLCBhbmQgbm90IGluCisjICAgYSBjaGVja2VkLW91dCByZXBvc2l0b3J5LiAgQ3JlYXRlZCB3aXRoIGNvbnRlbnRzIHRoYXQgd2VyZSBsZWFybmVkIGF0CisjICAgdGhlIGxhc3QgdGltZSBhdXRvY29uZiB3YXMgcnVuLCBhbmQgdXNlZCBieSBnaXQtdmVyc2lvbi1nZW4uICBNdXN0IG5vdAorIyAgIGJlIHByZXNlbnQgaW4gZWl0aGVyICQoc3JjZGlyKSBvciAkKGJ1aWxkZGlyKSBmb3IgZ2l0LXZlcnNpb24tZ2VuIHRvCisjICAgZ2l2ZSBhY2N1cmF0ZSBhbnN3ZXJzIGR1cmluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBhIGNoZWNrZWQgb3V0IHRyZWUsCisjICAgYnV0IG11c3QgYmUgcHJlc2VudCBpbiBhIHRhcmJhbGwgd2hlbiB0aGVyZSBpcyBubyB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLgorIyAgIFRoZXJlZm9yZSwgaXQgY2Fubm90IGJlIHVzZWQgaW4gYW55IGRlcGVuZGVuY2llcy4gIEdOVW1ha2VmaWxlIGhhcworIyAgIGhvb2tzIHRvIGZvcmNlIGEgcmVjb25maWd1cmUgYXQgZGlzdHJpYnV0aW9uIHRpbWUgdG8gZ2V0IHRoZSB2YWx1ZQorIyAgIGNvcnJlY3QsIHdpdGhvdXQgcGVuYWxpemluZyBub3JtYWwgZGV2ZWxvcG1lbnQgd2l0aCBleHRyYSByZWNvbmZpZ3VyZXMuCisjCisjIC52ZXJzaW9uIC0gcHJlc2VudCBpbiBhIGNoZWNrZWQtb3V0IHJlcG9zaXRvcnkgYW5kIGluIGEgZGlzdHJpYnV0aW9uCisjICAgdGFyYmFsbC4gIFVzYWJsZSBpbiBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBmb3IgZmlsZXMgdGhhdCBkb24ndAorIyAgIHdhbnQgdG8gZGVwZW5kIG9uIGNvbmZpZy5oIGJ1dCBkbyB3YW50IHRvIHRyYWNrIHZlcnNpb24gY2hhbmdlcy4KKyMgICBEZWxldGUgdGhpcyBmaWxlIHByaW9yIHRvIGFueSBhdXRvY29uZiBydW4gd2hlcmUgeW91IHdhbnQgdG8gcmVidWlsZAorIyAgIGZpbGVzIHRvIHBpY2sgdXAgYSB2ZXJzaW9uIHN0cmluZyBjaGFuZ2U7IGFuZCBsZWF2ZSBpdCBzdGFsZSB0bworIyAgIG1pbmltaXplIHJlYnVpbGQgdGltZSBhZnRlciB1bnJlbGF0ZWQgY2hhbmdlcyB0byBjb25maWd1cmUgc291cmNlcy4KKyMKKyMgQXMgd2l0aCBhbnkgZ2VuZXJhdGVkIGZpbGUgaW4gYSBWQydkIGRpcmVjdG9yeSwgeW91IHNob3VsZCBhZGQKKyMgLy52ZXJzaW9uIHRvIC5naXRpZ25vcmUsIHNvIHRoYXQgeW91IGRvbid0IGFjY2lkZW50YWxseSBjb21taXQgaXQuCisjIC50YXJiYWxsLXZlcnNpb24gaXMgbmV2ZXIgZ2VuZXJhdGVkIGluIGEgVkMnZCBkaXJlY3RvcnksIHNvIG5lZWRuJ3QKKyMgYmUgbGlzdGVkIHRoZXJlLgorIworIyBVc2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIHlvdXIgY29uZmlndXJlLmFjLCBzbyB0aGF0ICQoVkVSU0lPTikgd2lsbAorIyBhdXRvbWF0aWNhbGx5IGJlIHVwLXRvLWRhdGUgZWFjaCB0aW1lIGNvbmZpZ3VyZSBpcyBydW4gKGFuZCBub3RlIHRoYXQKKyMgc2luY2UgY29uZmlndXJlLmFjIG5vIGxvbmdlciBpbmNsdWRlcyBhIHZlcnNpb24gc3RyaW5nLCBNYWtlZmlsZSBydWxlcworIyBzaG91bGQgbm90IGRlcGVuZCBvbiBjb25maWd1cmUuYWMgZm9yIHZlcnNpb24gdXBkYXRlcykuCisjCisjIEFDX0lOSVQoW0dOVSBwcm9qZWN0XSwKKyMgICAgICAgICBtNF9lc3lzY21kKFtidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIC50YXJiYWxsLXZlcnNpb25dKSwKKyMgICAgICAgICBbYnVnLXByb2plY3RAZXhhbXBsZV0pCisjCisjIFRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4geW91ciBNYWtlZmlsZS5hbSwgc28gdGhhdCAudmVyc2lvbgorIyB3aWxsIGJlIHByZXNlbnQgZm9yIGRlcGVuZGVuY2llcywgYW5kIHNvIHRoYXQgLnZlcnNpb24gYW5kCisjIC50YXJiYWxsLXZlcnNpb24gd2lsbCBleGlzdCBpbiBkaXN0cmlidXRpb24gdGFyYmFsbHMuCisjCisjIEVYVFJBX0RJU1QgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjIEJVSUxUX1NPVVJDRVMgPSAkKHRvcF9zcmNkaXIpLy52ZXJzaW9uCisjICQodG9wX3NyY2RpcikvLnZlcnNpb246CisjCWVjaG8gJChWRVJTSU9OKSA+ICRALXQgJiYgbXYgJEAtdCAkQAorIyBkaXN0LWhvb2s6CisjCWVjaG8gJChWRVJTSU9OKSA+ICQoZGlzdGRpcikvLnRhcmJhbGwtdmVyc2lvbgorCisKK21lPSQwCisKK3ZlcnNpb249ImdpdC12ZXJzaW9uLWdlbiAkc2NyaXB0dmVyc2lvbgorCitDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoZXJlIGlzIE5PIHdhcnJhbnR5LiAgWW91IG1heSByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG1hdHRlcnMsIHNlZSB0aGUgZmlsZXMgbmFtZWQgQ09QWUlORy4iCisKK3VzYWdlPSJcCitVc2FnZTogJG1lIFtPUFRJT05dLi4uIFwkc3JjZGlyLy50YXJiYWxsLXZlcnNpb24gW1RBRy1OT1JNQUxJWkFUSU9OLVNFRC1TQ1JJUFRdCitQcmludCBhIHZlcnNpb24gc3RyaW5nLgorCitPcHRpb25zOgorCisgICAtLXByZWZpeCAgICAgICAgICAgcHJlZml4IG9mIGdpdCB0YWdzIChkZWZhdWx0ICd2JykKKyAgIC0tZmFsbGJhY2sgICAgICAgICBmYWxsYmFjayB2ZXJzaW9uIHRvIHVzZSBpZiBcImdpdCAtLXZlcnNpb25cIiBmYWlscworCisgICAtLWhlbHAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgIC0tdmVyc2lvbiAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCitSdW5uaW5nIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgc3VmZmljZSBpbiBtb3N0IGNhc2VzLiIKKworcHJlZml4PXYKK2ZhbGxiYWNrPQorCit3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICBjYXNlICQxIGluCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0IDA7OworICAgIC0tdmVyc2lvbikgZWNobyAiJHZlcnNpb24iOyBleGl0IDA7OworICAgIC0tcHJlZml4KSBzaGlmdDsgcHJlZml4PSIkMSI7OworICAgIC0tZmFsbGJhY2spIHNoaWZ0OyBmYWxsYmFjaz0iJDEiOzsKKyAgICAtKikKKyAgICAgIGVjaG8gIiQwOiBVbmtub3duIG9wdGlvbiAnJDEnLiIgPiYyCisgICAgICBlY2hvICIkMDogVHJ5ICctLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisgICAgICBleGl0IDE7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JHRhcmJhbGxfdmVyc2lvbl9maWxlIiA9IHg7IHRoZW4KKyAgICAgICAgdGFyYmFsbF92ZXJzaW9uX2ZpbGU9IiQxIgorICAgICAgZWxpZiB0ZXN0ICJ4JHRhZ19zZWRfc2NyaXB0IiA9IHg7IHRoZW4KKyAgICAgICAgdGFnX3NlZF9zY3JpcHQ9IiQxIgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIkMDogZXh0cmEgbm9uLW9wdGlvbiBhcmd1bWVudCAnJDEnLiIgPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmk7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgIngkdGFyYmFsbF92ZXJzaW9uX2ZpbGUiID0geDsgdGhlbgorICAgIGVjaG8gIiR1c2FnZSIKKyAgICBleGl0IDEKK2ZpCisKK3RhZ19zZWRfc2NyaXB0PSIke3RhZ19zZWRfc2NyaXB0Oi1zL3gveC99IgorCitubD0nCisnCisKKyMgQXZvaWQgbWVkZGxpbmcgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgb2YgdGhlIHNhbWUgbmFtZS4KK3Y9Cit2X2Zyb21fZ2l0PQorCisjIEZpcnN0IHNlZSBpZiB0aGVyZSBpcyBhIHRhcmJhbGwtb25seSB2ZXJzaW9uIGZpbGUuCisjIHRoZW4gdHJ5ICJnaXQgZGVzY3JpYmUiLCB0aGVuIGRlZmF1bHQuCitpZiB0ZXN0IC1mICR0YXJiYWxsX3ZlcnNpb25fZmlsZQordGhlbgorICAgIHY9YGNhdCAkdGFyYmFsbF92ZXJzaW9uX2ZpbGVgIHx8IHY9CisgICAgY2FzZSAkdiBpbgorICAgICAgICAqJG5sKikgdj0gOzsgIyByZWplY3QgbXVsdGktbGluZSBvdXRwdXQKKyAgICAgICAgWzAtOV0qKSA7OworICAgICAgICAqKSB2PSA7OworICAgIGVzYWMKKyAgICB0ZXN0ICJ4JHYiID0geCBcCisgICAgICAgICYmIGVjaG8gIiQwOiBXQVJOSU5HOiAkdGFyYmFsbF92ZXJzaW9uX2ZpbGUgaXMgbWlzc2luZyBvciBkYW1hZ2VkIiAxPiYyCitmaQorCitpZiB0ZXN0ICJ4JHYiICE9IHgKK3RoZW4KKyAgICA6ICMgdXNlICR2CisjIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdpdCBjb21taXQgaW52b2x2aW5nIHRoZSB3b3JraW5nCisjIGRpcmVjdG9yeSwgYW5kICJnaXQgZGVzY3JpYmUiIG91dHB1dCBsb29rcyBzZW5zaWJsZSwgdXNlIHRoYXQgdG8KKyMgZGVyaXZlIGEgdmVyc2lvbiBzdHJpbmcuCitlbGlmIHRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDp4IC4gMj4mMWAiID0geCBcCisgICAgJiYgdj1gZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgLS1tYXRjaD0iJHByZWZpeCoiIEhFQUQgMj4vZGV2L251bGwgXAorICAgICAgICAgIHx8IGdpdCBkZXNjcmliZSAtLWFiYnJldj00IEhFQUQgMj4vZGV2L251bGxgIFwKKyAgICAmJiB2PWBwcmludGYgJyVzXG4nICIkdiIgfCBzZWQgIiR0YWdfc2VkX3NjcmlwdCJgIFwKKyAgICAmJiBjYXNlICR2IGluCisgICAgICAgICAkcHJlZml4WzAtOV0qKSA7OworICAgICAgICAgKikgKGV4aXQgMSkgOzsKKyAgICAgICBlc2FjCit0aGVuCisgICAgIyBJcyB0aGlzIGEgbmV3IGdpdCB0aGF0IGxpc3RzIG51bWJlciBvZiBjb21taXRzIHNpbmNlIHRoZSBsYXN0CisgICAgIyB0YWcgb3IgdGhlIHByZXZpb3VzIG9sZGVyIHZlcnNpb24gdGhhdCBkaWQgbm90PworICAgICMgICBOZXdlcjogdjYuMTAtNzctZzBmOGZhZWIKKyAgICAjICAgT2xkZXI6IHY2LjEwLWcwZjhmYWViCisgICAgY2FzZSAkdiBpbgorICAgICAgICAqLSotKikgOiBnaXQgZGVzY3JpYmUgaXMgb2theSB0aHJlZSBwYXJ0IGZsYXZvciA7OworICAgICAgICAqLSopCisgICAgICAgICAgICA6IGdpdCBkZXNjcmliZSBpcyBvbGRlciB0d28gcGFydCBmbGF2b3IKKyAgICAgICAgICAgICMgUmVjcmVhdGUgdGhlIG51bWJlciBvZiBjb21taXRzIGFuZCByZXdyaXRlIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgICAgICMgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGlmIHdlIHdlcmUgdXNpbmcgdGhlIG5ld2VyIHZlcnNpb24KKyAgICAgICAgICAgICMgb2YgZ2l0IGRlc2NyaWJlLgorICAgICAgICAgICAgdnRhZz1gZWNobyAiJHYiIHwgc2VkICdzLy0uKi8vJ2AKKyAgICAgICAgICAgIGNvbW1pdF9saXN0PWBnaXQgcmV2LWxpc3QgIiR2dGFnIi4uSEVBRCAyPi9kZXYvbnVsbGAgXAorICAgICAgICAgICAgICAgIHx8IHsgY29tbWl0X2xpc3Q9ZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgZWNobyAiJDA6IFdBUk5JTkc6IGdpdCByZXYtbGlzdCBmYWlsZWQiIDE+JjI7IH0KKyAgICAgICAgICAgIG51bWNvbW1pdHM9YGVjaG8gIiRjb21taXRfbGlzdCIgfCB3YyAtbGAKKyAgICAgICAgICAgIHY9YGVjaG8gIiR2IiB8IHNlZCAicy9cKC4qXCktXCguKlwpL1wxLSRudW1jb21taXRzLVwyLyJgOworICAgICAgICAgICAgdGVzdCAiJGNvbW1pdF9saXN0IiA9IGZhaWxlZCAmJiB2PVVOS05PV04KKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBDaGFuZ2UgdGhlIGZpcnN0ICctJyB0byBhICcuJywgc28gdmVyc2lvbi1jb21wYXJpbmcgdG9vbHMgd29yayBwcm9wZXJseS4KKyAgICAjIFJlbW92ZSB0aGUgImciIGluIGdpdCBkZXNjcmliZSdzIG91dHB1dCBzdHJpbmcsIHRvIHNhdmUgYSBieXRlLgorICAgIHY9YGVjaG8gIiR2IiB8IHNlZCAncy8tLy4wLi87cy9cKC4qXCktZy9cMS0vJ2A7CisgICAgdl9mcm9tX2dpdD0xCitlbGlmIHRlc3QgIngkZmFsbGJhY2siID0geCB8fCBnaXQgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIHY9VU5LTk9XTgorZWxzZQorICAgIHY9JGZhbGxiYWNrCitmaQorCit2PWBlY2hvICIkdiIgfHNlZCAicy9eJHByZWZpeC8vImAKKworIyBUZXN0IHdoZXRoZXIgdG8gYXBwZW5kIHRoZSAiLWRpcnR5IiBzdWZmaXggb25seSBpZiB0aGUgdmVyc2lvbgorIyBzdHJpbmcgd2UncmUgdXNpbmcgY2FtZSBmcm9tIGdpdC4gIEkuZS4sIHNraXAgdGhlIHRlc3QgaWYgaXQncyAiVU5LTk9XTiIKKyMgb3IgaWYgaXQgY2FtZSBmcm9tIC50YXJiYWxsLXZlcnNpb24uCitpZiB0ZXN0ICJ4JHZfZnJvbV9naXQiICE9IHg7IHRoZW4KKyAgIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKyAgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggPiAvZGV2L251bGwgMj4mMQorCisgIGRpcnR5PWBleGVjIDI+L2Rldi9udWxsO2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQURgIHx8IGRpcnR5PQorICBjYXNlICIkZGlydHkiIGluCisgICAgICAnJykgOzsKKyAgICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKyAgICAgICAgICBjYXNlICR2IGluCisgICAgICAgICAgICAqLWRpcnR5KSA7OworICAgICAgICAgICAgKikgdj0iJHYtZGlydHkiIDs7CisgICAgICAgICAgZXNhYyA7OworICBlc2FjCitmaQorCisjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCitlY2hvICIkdiIgfCB0ciAtZCAiJG5sIgorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTMzY2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtQyB0ZXN0cyAtayBydW50ZXN0LVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhlNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2Uvc3RyYWNlLWFkZC1jb25maWd1cmUtb3B0aW9ucy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitBZGQgb3B0aW9ucyAiYWlvIiBhbmQgImFjbCIgdG8gZW5hYmxlL2Rpc2FibGUgbGliYWlvIGFuZCBhY2wgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTczOTU4Yy4uOTA5OTM3MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjcwLDYgKzI3MCwxOCBAQCBBQ19DSEVDS19IRUFERVJTKG00X25vcm1hbGl6ZShbCisgCXN5cy92ZnMuaAorIAlzeXMveGF0dHIuaAorIF0pKQorKworK0FDX0FSR19FTkFCTEUoW2FjbF0sCisrCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYWNsXSwgW3R1cm4gb24gYWNsIHN1cHBvcnRdKV0sCisrCVtjYXNlICRlbmFibGV2YWwgaW4KKysJeWVzKQorKwkJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL2FjbC5oXSkKKysJCTs7CisrCW5vKSAgOzsKKysJKikgICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxldmFsIGZvciBhaW8gb3B0aW9uXSkgOzsKKysJZXNhY10KKyspCisrCisgQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvaWNtcC5oIGxpbnV4L2luNi5oIGxpbnV4L25ldGxpbmsuaCBsaW51eC9pZl9wYWNrZXQuaF0sCisgICAgICAgICAgICAgICAgICBbXSwgW10sIFsjaW5jbHVkZSA8c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK0BAIC03NDUsNiArNzU3LDIwIEBAIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2RsYWRkciIgPSB4eWVzOyB0aGVuCisgZmkKKyBBQ19TVUJTVChkbF9MSUJTKQorIAorK0FDX0FSR19FTkFCTEUoW2Fpb10sCisrCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtYWlvXSwgW3R1cm4gb24gbGliYWlvIHN1cHBvcnRdKV0sCisrCVtjYXNlICRlbmFibGV2YWwgaW4KKysJeWVzKQorKwlBQ19DSEVDS19IRUFERVJTKFtsaWJhaW8uaF0sIFsKKysJCUFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpb2NiLnUuYy5mbGFnc10sLCwgWyNpbmNsdWRlIDxsaWJhaW8uaD5dKQorKwkJQUNfQ0hFQ0tfREVDTFMoW0lPX0NNRF9QV1JJVEUsIElPX0NNRF9QV1JJVEVWXSwsLCBbI2luY2x1ZGUgPGxpYmFpby5oPl0pCisrCV0pCisrCTs7CisrCW5vKSAgOzsKKysJKikgICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxldmFsIGZvciBhaW8gb3B0aW9uXSkgOzsKKysJZXNhY10KKyspCisrCisgQUNfUEFUSF9QUk9HKFtQRVJMXSwgW3BlcmxdKQorIAorIGRubCBzdGFjayB0cmFjZSB3aXRoIGxpYnVud2luZAorLS0KKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjdlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZV80LjEwLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGNhbGwgdHJhY2luZyB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3N0cmFjZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyNDUwMGMyMWU4NTZmMDkxMmRmMjkyOTViYTEwNGM3IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zdHJhY2Uvc3RyYWNlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1saW51eC1hYXJjaDY0LWFyY2hfcmVncy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dpdC12ZXJzaW9uLWdlbiBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9JbmNsdWRlLXN5cy1zdGF0LmgtZm9yLVNfSS1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vSW5jbHVkZS1saW51eC1pb2N0bC5oLWZvci1fSU9DXy1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjEwN2E1YmU0NTU0OTM4NjExODllOWI1N2EzYTUxOTEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2MTgwZDg2NmVmOWU3NjU4NmI5NmUyZWNlMmJmZWViM2FhMjNmNWNjODgxNTNmNzZlOWNhZWRkNjVlNDBlZTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJsdWV0b290aAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgY29yZXV0aWxzIGdyZXAgZ2F3ayIKKworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICJcCisgICAgbGliYWlvICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWNsJywgJ2FjbCcsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJ2JsdWV6JywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdbbGliYWlvXSA9ICItLWVuYWJsZS1haW8sLS1kaXNhYmxlLWFpbyxsaWJhaW8iCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsIC0td2l0aG91dC1saWJ1bndpbmQsIGxpYnVud2luZCIKK1BBQ0tBR0VDT05GSUdbYmx1ZXpdID0gImFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9eWVzLGFjX2N2X2hlYWRlcl9ibHVldG9vdGhfYmx1ZXRvb3RoX2g9bm8sJHtCTFVFWn0iCisKK1RFU1RESVIgPSAidGVzdHMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNwICR7V09SS0RJUn0vZ2l0LXZlcnNpb24tZ2VuICR7U30KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZSBkb24ndCBzaGlwIHN0cmFjZS1ncmFwaCBoZXJlIGJlY2F1c2UgaXQgbmVlZHMgcGVybAorCXJtICR7RH0ke2JpbmRpcn0vc3RyYWNlLWdyYXBoCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUyBPUz1saW51eCBBUkNIPSIke1RBUkdFVF9BUkNIfSIKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gaW5zdGFsbC1wdGVzdCBCVUlMRERJUj0ke0J9IERFU1RESVI9JHtEfSR7UFRFU1RfUEFUSH0gVEVTVERJUj0ke1RFU1RESVJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzYmU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2Rpc2FibGVfbWFjb3MucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVGhlc2UgdGVzdHMgZG9uJ3Qgd29yayBpbiBjcm9zcyBjb21waWxpbmcsIGp1c3QgZGlzYWJsZSB0aGVtIGZvciBub3csIHdlIGRvbid0CitidWlsZCBzdWJ2ZXJzaW9uIG9uIE9TLVggYXQgdGhpcyB0aW1lLgorCitSUCAxMDE0LzcvMTYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtuZWVkcyBhIHJld3JpdGUgdG8gc3VwcG9ydCBhIGNhY2hlIHZhbHVlXQorCitJbmRleDogc3VidmVyc2lvbi0xLjguOS9idWlsZC9hYy1tYWNyb3MvbWFjb3N4Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3VidmVyc2lvbi0xLjguOS5vcmlnL2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQJMjAxMi0xMS0yNiAwMzowNDoyNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBzdWJ2ZXJzaW9uLTEuOC45L2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQJMjAxNC0wNy0xNiAxMjoyODo1OC4zNTczMDA0MDMgKzAwMDAKK0BAIC0yNCwyMSArMjQsNyBAQAorIEFDX0RFRlVOKFNWTl9MSUJfTUFDSE9fSVRFUkFURSwKKyBbCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNYWNoLU8gZHluYW1pYyBtb2R1bGUgaXRlcmF0aW9uIGZ1bmN0aW9uc10pCistICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0gICAgI2luY2x1ZGUgPG1hY2gtby9keWxkLmg+CistICAgICNpbmNsdWRlIDxtYWNoLW8vbG9hZGVyLmg+CistICBdXSxbWworLSAgICBjb25zdCBzdHJ1Y3QgbWFjaF9oZWFkZXIgKmhlYWRlciA9IF9keWxkX2dldF9pbWFnZV9oZWFkZXIoMCk7CistICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBfZHlsZF9nZXRfaW1hZ2VfbmFtZSgwKTsKKy0gICAgaWYgKG5hbWUgJiYgaGVhZGVyKSByZXR1cm4gMDsKKy0gICAgcmV0dXJuIDE7CistICBdXSldLFsKKy0gICAgQUNfREVGSU5FKFtTVk5fSEFWRV9NQUNIT19JVEVSQVRFXSwgWzFdLAorLSAgICAgICAgICAgICAgW0lzIE1hY2gtTyBsb3ctbGV2ZWwgX2R5bGQgQVBJIGF2YWlsYWJsZT9dKQorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgXSxbCisgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gIF0pCisgXSkKKyAKKyBkbmwgU1ZOX0xJQl9NQUNPU19QTElTVAorQEAgLTQ2LDM0ICszMiw3IEBACisgQUNfREVGVU4oU1ZOX0xJQl9NQUNPU19QTElTVCwKKyBbCisgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBNYWMgT1MgcHJvcGVydHkgbGlzdCB1dGlsaXRpZXNdKQorLQorLSAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLSAgICAjaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+CistICAgICNpZiAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEKSBcCistICAgICB8fCAhZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzApIFwKKy0gICAgIHx8IChNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEIDw9IE1BQ19PU19YX1ZFUlNJT05fMTBfMCkKKy0gICAgI2Vycm9yIFByb3BlcnlMaXN0IEFQSSB1bmF2YWlsYWJsZS4KKy0gICAgI2VuZGlmCistICBdXSxbW11dKV0sWworLSAgICBkbmwgIyMjIEhhY2suICBXZSBzaG91bGQgb25seSBuZWVkIHRvIHBhc3MgdGhlIC1mcmFtZXdvcmsgb3B0aW9ucyB3aGVuCistICAgIGRubCBsaW5raW5nIGxpYnN2bl9zdWJyLCBzaW5jZSBpdCBpcyB0aGUgb25seSBsaWJyYXJ5IHRoYXQgdXNlcyBLZXljaGFpbi4KKy0gICAgZG5sCistICAgIGRubCBVbmZvcnR1bmF0ZWx5LCBsaWJ0b29sIDEuNS54IGRvZXNuJ3QgdHJhY2sgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgZm9yCistICAgIGRubCBPUyBYIGZyYW1ld29ya3MgbGlrZSBpdCBkb2VzIGZvciBub3JtYWwgbGlicmFyaWVzLCBzbyB3ZSBuZWVkIHRvCistICAgIGRubCBleHBsaWNpdGx5IHBhc3MgdGhlIG9wdGlvbiB0byBhbGwgdGhlIHVzZXJzIG9mIGxpYnN2bl9zdWJyIHRvIGFsbG93CistICAgIGRubCBzdGF0aWMgYnVpbGRzIHRvIGxpbmsgc3VjY2Vzc2Z1bGx5LgorLSAgICBkbmwKKy0gICAgZG5sIFRoaXMgZG9lcyBtZWFuIHRoYXQgYWxsIGV4ZWN1dGFibGVzIHdlIGxpbmsgd2lsbCBiZSBsaW5rZWQgZGlyZWN0bHkKKy0gICAgZG5sIHRvIHRoZXNlIGZyYW1ld29ya3MgLSBldmVuIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyAtIGJ1dCB0aGF0CistICAgIGRubCBzaG91bGRuJ3QgY2F1c2UgYW55IHByb2JsZW1zLgorLQorLSAgICBMSUJTPSIkTElCUyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorLSAgICBBQ19ERUZJTkUoW1NWTl9IQVZFX01BQ09TX1BMSVNUXSwgWzFdLAorLSAgICAgICAgICAgICAgW0lzIE1hYyBPUyBwcm9wZXJ0eSBsaXN0IEFQSSBhdmFpbGFibGU/XSkKKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKy0gIF0sWworICAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICBdKQorIF0pCisgCisgZG5sIFNWTl9MSUJfTUFDT1NfS0VZQ0hBSU4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL2xpYnRvb2wyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTIwIDIxOjU2OjAyLjIzMDY2Mzk4NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTEtMDgtMTcgMTU6MDE6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtMjI3LDggKzIyNyw4IEBACisgICBMSUJUT09MPSIkc2hfbGlidG9vbCIKKyAgIFNWTl9MSUJUT09MPSIkc2hfbGlidG9vbCIKKyBlbHNlCistICBzaF9saWJ0b29sPSIkYWJzX2J1aWxkZGlyL2xpYnRvb2wiCistICBTVk5fTElCVE9PTD0iXCQoU0hFTEwpICRzaF9saWJ0b29sIgorKyAgc2hfbGlidG9vbD0iJGFic19idWlsZGRpci8kaG9zdF9hbGlhcy1saWJ0b29sIgorKyAgU1ZOX0xJQlRPT0w9IlwkKFNIRUxMKSBcJChhYnNfYnVpbGRkaXIpLyRob3N0X2FsaWFzLWxpYnRvb2wiCisgZmkKKyBBQ19TVUJTVChTVk5fTElCVE9PTCkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb24tMS44LjEzL3NlcmYubTQtUmVnZXgtbW9kaWZpZWQtdG8tYWxsb3ctRC1pbi1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDBlNTIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZjFiNmU0OWYxMmExOGVhYmU4OGViNzMyYjU3OGExNjI4MWQwOTQ5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMiBKdWwgMjAxNSAxMTozNzo0MyArMDAwMAorU3ViamVjdDogW1BBVENIXSBzZXJmLm00OiBSZWdleCBtb2RpZmllZCB0byBhbGxvdyAnLUQnIGluIHBhdGhzCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKworVGhlIHBhdGNoIGlzIG1lcmdlZCBieSBzdWJ2ZXJzaW9uIHVwc3RyZWFtIHdpdGggcmVwbGFjaW5nICdbWzpzcGFjZTpdXScgd2l0aCAnICcuCisKK2h0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvc3VidmVyc2lvbi90cnVuay9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tND9yMT0xNTk0MTU2JnIyPTE2ODk4MjQgIAorCitTaWduZWQtb2ZmLWJ5OiBKb3NlIExhbWVnbyA8am9zZS5hLmxhbWVnb0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBidWlsZC9hYy1tYWNyb3Mvc2VyZi5tNCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00IGIvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKK2luZGV4IGFlMTFlNzUuLmZmOGNiYWUgMTAwNjQ0CistLS0gYS9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAorKysrIGIvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQKK0BAIC0xNDMsNyArMTQzLDcgQEAgQUNfREVGVU4oU1ZOX1NFUkZfUEtHX0NPTkZJRywKKyAgICAgICAgIGlmICRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tYXRsZWFzdC12ZXJzaW9uPSRzZXJmX2NoZWNrX3ZlcnNpb247IHRoZW4KKyAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgICAgICAgc2VyZl9mb3VuZD15ZXMKKy0gICAgICAgICAgU1ZOX1NFUkZfSU5DTFVERVM9W2AkUEtHX0NPTkZJRyAkc2VyZl9tYWpvciAtLWNmbGFncyB8ICRTRUQgLWUgJ3MvLURbXiBdKi8vZydgXQorKyAgICAgICAgICBTVk5fU0VSRl9JTkNMVURFUz1bYCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tY2ZsYWdzIHwgJFNFRCAtZSAncy9bWzpzcGFjZTpdXS1EW14gXSovL2cnIC1lICdzL14tRFteIF0qLy9nJ2BdCisgICAgICAgICAgIFNWTl9TRVJGX0xJQlM9YCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tbGlic2AgCisgICAgICAgICAgIGJyZWFrCisgICAgICAgICBlbHNlCistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQzYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbl8xLjguMTMuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTdWJ2ZXJzaW9uIChzdm4pIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gY2xpZW50IgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gImFwci11dGlsIHNlcmYgc3FsaXRlMyBmaWxlIgorUkRFUEVORFNfJHtQTn0gPSAic2VyZiIKK0xJQ0VOU0UgPSAiQXBhY2hlLTIiCitIT01FUEFHRSA9ICJodHRwOi8vc3VidmVyc2lvbi50aWdyaXMub3JnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBnZXR0ZXh0IHB5dGhvbm5hdGl2ZQorCitTUkNfVVJJID0gIiR7QVBBQ0hFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfbWFjb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDEzNDE3YjUyOWQ3YmRmODJmNzRlNTBkZjAyZTg4YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMDk5Y2M2ODg0MDc1M2I0OGFlZGIzYTI3ZWJkMWUyYWZiY2M4NGRkYjg3MTQxMmU1ZDUwMGU4NDNkNjA3NTc5IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xYzJmMDExOWU0Nzg3MDBiNTQyOGUyNjM4NmNmZjkyMyIKKworUEFDS0FHRUNPTkZJR1tzYXNsXSA9ICItLXdpdGgtc2FzbCwtLXdpdGhvdXQtc2FzbCxjeXJ1cy1zYXNsIgorUEFDS0FHRUNPTkZJR1tnbm9tZS1rZXlyaW5nXSA9ICItLXdpdGgtZ25vbWUta2V5cmluZywtLXdpdGhvdXQtZ25vbWUta2V5cmluZyxnbGliLTIuMCBnbm9tZS1rZXlyaW5nIgorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtYmVya2VsZXktZGIgLS13aXRob3V0LWFweHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zd2lnIC0td2l0aC1hcHI9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30gXAorICAgICAgICAgICAgICAgIC0td2l0aC1hcHItdXRpbD0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWtleWNoYWluIFwKKyAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1JVQlk9bm9uZSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZXhwb3J0IExERkxBR1MgKz0gIiAtTCR7U1RBR0lOR19MSUJESVJ9ICIKK0NQUEZMQUdTICs9ICItUCIKK0JVSUxEX0NQUEZMQUdTICs9ICItUCIKKworYWNwYXRocyA9ICItSSBidWlsZC8gLUkgYnVpbGQvYWMtbWFjcm9zLyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vbGlidG9vbAorCXJtIC1mICR7U30vYnVpbGQvbGlidG9vbC5tNCAke1N9L2J1aWxkL2x0bWFpbi5zaCAke1N9L2J1aWxkL2x0b3B0aW9ucy5tNCAke1N9L2J1aWxkL2x0c3VnYXIubTQgJHtTfS9idWlsZC9sdHZlcnNpb24ubTQgJHtTfS9idWlsZC9sdH5vYnNvbGV0ZS5tNAorCXJtIC1mICR7U30vYWNsb2NhbC5tNAorCXNlZCAtaSAtZSAnczp3aXRoX3Nhc2w9Ii91c3IvbG9jYWwiOndpdGhfc2FzbD0iJHtTVEFHSU5HX0RJUn0iOicgJHtTfS9idWlsZC9hYy1tYWNyb3Mvc2FzbC5tNAorfQorCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX2xvY2FsL2xpYnN2bl9yYV9sb2NhbC0xLmxhJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYid8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sc3ZuX2RlbHRhLTF8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3N2bi9saWJzdm5fcmFfc3ZuLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yYV9zZXJmL2xpYnN2bl9yYV9zZXJmLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IGVycm9yOiByZWxpbmsgYGxpYnN2bl9yYV9zZXJmLTEubGEnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgLi4vLi4vc3VidmVyc2lvbi9saWJzdm5fcmVwb3MvbGlic3ZuX3JlcG9zLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJworI3wgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvc3VidmVyc2lvbi0xLjguOS9idWlsZC1vdXRwdXRzLm1rOjEwOTA6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXNlcmYtbGliJyBmYWlsZWQKKyN8IG1ha2U6ICoqKiBbaW5zdGFsbC1zZXJmLWxpYl0gRXJyb3IgMQorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3YWJiZXIvc3dhYmJlci1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzEzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJUb29sIHRvIG1vbml0b3IgYW5kIHJlcG9ydCBvbiBob3N0IHN5c3RlbSBmaWxlIHVzYWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvc3dhYmJlciIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDUkVWID0gIjJkMWZlMzZmYjBhNGZkYWFlODgyM2E5ODE4YTY3ODUxODJkNzVlNjYiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvc3dhYmJlciIKKworaW5oZXJpdCBuYXRpdmUKKworZG9fY29uZmlndXJlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODIxZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy5pbmMKQEAgLTAsMCArMSw2MyBAQAorREVTQ1JJUFRJT04gPSAiU1dJRyAtIFNpbXBsaWZpZWQgV3JhcHBlciBhbmQgSW50ZXJmYWNlIEdlbmVyYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly9zd2lnLnNvdXJjZWZvcmdlLm5ldC8iCitMSUNFTlNFID0gIkJTRCAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZTc4MDdhNjI4Mjc4NGE3ZGRlNGM4NDY2MjZiMDhmYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1HUEw7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtVU5JVkVSU0lUSUVTO21kNT04Y2U5ZGNjOGY3Yzk5NGRlNGE0MDhiMjA1YzcyYmEwOCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworREVQRU5EUyA9ICJsaWJwY3JlIHB5dGhvbiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiIFwKKyAgICAtLXdpdGgtcHl0aG9uPSR7UFlUSE9OfSBcCisgICAgLS13aXRob3V0LWFsbGVncm9jbCBcCisgICAgLS13aXRob3V0LWFuZHJvaWQgXAorICAgIC0td2l0aG91dC1ib29zdCBcCisgICAgLS13aXRob3V0LWNoaWNrZW4gXAorICAgIC0td2l0aG91dC1jbGlzcCBcCisgICAgLS13aXRob3V0LWNzaGFycCBcCisgICAgLS13aXRob3V0LWQgXAorICAgIC0td2l0aG91dC1nY2ogXAorICAgIC0td2l0aG91dC1nbyBcCisgICAgLS13aXRob3V0LWd1aWxlIFwKKyAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgLS13aXRob3V0LWx1YSBcCisgICAgLS13aXRob3V0LW16c2NoZW1lIFwKKyAgICAtLXdpdGhvdXQtb2NhbWwgXAorICAgIC0td2l0aG91dC1vY3RhdmUgXAorICAgIC0td2l0aG91dC1wZXJsNSBcCisgICAgLS13aXRob3V0LXBpa2UgXAorICAgIC0td2l0aG91dC1waHAgXAorICAgIC0td2l0aG91dC1weXRob24zIFwKKyAgICAtLXdpdGhvdXQtciBcCisgICAgLS13aXRob3V0LXJ1YnkgXAorICAgIC0td2l0aG91dC10Y2wgXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5ndWVzcyAke1N9L1Rvb2xzL2NvbmZpZworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9L1Rvb2xzL2NvbmZpZworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgJHtTfQorICAgIG9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGNkICR7RH0ke2JpbmRpcn0KKyAgICBsbiAtcyBzd2lnIHN3aWcyLjAKK30KKworZGVmIHN3aWdsaWJfcmVscGF0aChkKToKKyAgICBzd2lnbGliID0gZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSArICIvIiArIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSArICIvIiArIGQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgcmV0dXJuIG9zLnBhdGgucmVscGF0aChzd2lnbGliLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3N3aWcgU1dJR19MSUI9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAc3dpZ2xpYl9yZWxwYXRoKGQpfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRmM2UyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLVVzZS1wcm9jLXNlbGYtZXhlLWZvci1zd2lnLXN3aWdsaWItb24tbm9uLVdpbjMyLXBsYXQucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorRnJvbSBhNGEwNDQwYTY0NGM2YzVlNWRhMDk2ZWZlM2NmMDViYTMwOWEyODRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk5PREEsIEthaSIgPG5vZGFrYWlAZ21haWwuY29tPgorRGF0ZTogU3VuLCAyMiBBcHIgMjAxMiAxNzowMTowMiArMDkwMAorU3ViamVjdDogW1BBVENIXSBVc2UgL3Byb2Mvc2VsZi9leGUgZm9yICJzd2lnIC1zd2lnbGliIiBvbiBub24tV2luMzIKKyBwbGF0Zm9ybXMuCisKK0lmIGl0IHdhc24ndCBmb3VuZCwgdGhlbiBmYWxsIGJhY2sgdG8gYSBmaXhlZCBzdHJpbmcganVzdCBhcyBiZWZvcmUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL21lc3NhZ2UucGhwP21zZ19pZD0yOTE3OTczMworCistLS0KKyBTb3VyY2UvTW9kdWxlcy9tYWluLmN4eCB8ICAgMjQgKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eCBiL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CitpbmRleCBkMmY1ZDNiLi5jYmIwYTEyIDEwMDY0NAorLS0tIGEvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKKysrKyBiL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4CitAQCAtMjYsNiArMjYsMTEgQEAgY2hhciBjdnNyb290X21haW5fY3h4W10gPSAiJElkJCI7CisgI2luY2x1ZGUgImNwYXJzZS5oIgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4JCS8vIGZvciBJTlRfTUFYCisrI2lmbmRlZiBfV0lOMzIKKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CQkvLyBmb3IgcmVhZGxpbmsKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4JCS8vIGZvciBzdGF0CisrI2VuZGlmCisgCisgLy8gR2xvYmFsIHZhcmlhYmxlcworIAorQEAgLTkwMiw5ICs5MDcsOSBAQCBpbnQgU1dJR19tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIExhbmd1YWdlICpsKSB7CisgCisgICAvLyBDaGVjayBmb3IgU1dJR19MSUIgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIGlmICgoYyA9IGdldGVudigiU1dJR19MSUIiKSkgPT0gKGNoYXIgKikgMCkgeworKyAgICBjaGFyICpwOworICNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICAgY2hhciBidWZbTUFYX1BBVEhdOworLSAgICBjaGFyICpwOworICAgICBpZiAoIShHZXRNb2R1bGVGaWxlTmFtZSgwLCBidWYsIE1BWF9QQVRIKSA9PSAwIHx8IChwID0gc3RycmNocihidWYsICdcXCcpKSA9PSAwKSkgeworICAgICAgICoocCArIDEpID0gJ1wwJzsKKyAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nZigiJXNMaWIiLCBidWYpOyAvLyBOYXRpdmUgd2luZG93cyBpbnN0YWxsYXRpb24gcGF0aAorQEAgLTkxNCw3ICs5MTksMjIgQEAgaW50IFNXSUdfbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBMYW5ndWFnZSAqbCkgeworICAgICBpZiAoTGVuKFNXSUdfTElCX1dJTl9VTklYKSA+IDApCisgICAgICAgU3dpZ0xpYldpblVuaXggPSBOZXdTdHJpbmcoU1dJR19MSUJfV0lOX1VOSVgpOyAvLyBVbml4IGluc3RhbGxhdGlvbiBwYXRoIHVzaW5nIGEgZHJpdmUgbGV0dGVyIChmb3IgbXN5cy9taW5ndykKKyAjZWxzZQorLSAgICBTd2lnTGliID0gTmV3U3RyaW5nKFNXSUdfTElCKTsKKysgICAgY2hhciBidWZbUEFUSF9NQVhdOworKyAgICBpZiAoMCA8IDo6cmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgYnVmLCBzaXplb2YoYnVmKSkgJiYKKysgICAgICAgIChwID0gOjpzdHJzdHIoYnVmLCAiL2Jpbi9zd2lnIikpKSB7CisrICAgICAgICBpbnQgbWFqb3IsIG1pbm9yLCBwYXRjaDsKKysgICAgICAgIGNvbnN0IGludCByZXQgPSA6OnNzY2FuZihWRVJTSU9OLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJnBhdGNoKTsKKysgICAgICAgIGlmICgzID09IHJldCkgeworKyAgICAgICAgICAgIGNvbnN0IDo6cHRyZGlmZl90IGRpcl9wYXJ0X2xlbiA9IHAgLSBidWY7CisrICAgICAgICAgICAgOjpzbnByaW50ZihwLCBQQVRIX01BWCAtIGRpcl9wYXJ0X2xlbiwgIi9zaGFyZS9zd2lnLyVkLiVkLiVkIiwgbWFqb3IsIG1pbm9yLCBwYXRjaCk7CisrICAgICAgICAgICAgc3RydWN0IDo6c3RhdCBzdGF0X3JlczsKKysgICAgICAgICAgICBpZiAoMCA9PSA6OnN0YXQoYnVmLCAmc3RhdF9yZXMpICYmIFNfSVNESVIoc3RhdF9yZXMuc3RfbW9kZSkpIHsKKysgICAgICAgICAgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhidWYpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICBpZiAoTlVMTCA9PSBTd2lnTGliKQorKyAgICAgICAgU3dpZ0xpYiA9IE5ld1N0cmluZyhTV0lHX0xJQik7CisgI2VuZGlmCisgICB9IGVsc2UgeworICAgICBTd2lnTGliID0gTmV3U3RyaW5nKGMpOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxMTI4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gNWM0ZDZkODUzODk5NGQ1ZmU5YjNiNDZiZmFmYWYwYTYwNWUzYmRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitEYXRlOiBUdWUsIDE3IEp1biAyMDE0IDA4OjE4OjE3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGV0ZWN0aW9uCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDM4ICsrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDBjOTg0YjcuLjZlZGNlYzEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDM4ICs3MCwxNCBAQCBBQ19NU0dfUkVTVUxUKFskd2l0aF9wY3JlXSkKKyAKKyBkbmwgVG8gbWFrZSBjb25maWd1cmluZyBlYXNpZXIsIGNoZWNrIGZvciBhIGxvY2FsbHkgYnVpbHQgUENSRSB1c2luZyB0aGUgVG9vbHMvcGNyZS1idWlsZC5zaCBzY3JpcHQKKyBpZiB0ZXN0IHgiJHt3aXRoX3BjcmV9IiA9IHh5ZXMgOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGxvY2FsIFBDUkVdKQorLSAgbG9jYWxfcGNyZV9jb25maWc9bm8KKy0gIGlmIHRlc3QgLXogJFBDUkVfQ09ORklHOyB0aGVuCistICAgIGlmIHRlc3QgLWYgYHB3ZGAvcGNyZS9wY3JlLXN3aWctaW5zdGFsbC9iaW4vcGNyZS1jb25maWc7IHRoZW4KKy0gICAgICBQQ1JFX0NPTkZJRz1gcHdkYC9wY3JlL3BjcmUtc3dpZy1pbnN0YWxsL2Jpbi9wY3JlLWNvbmZpZworLSAgICAgIGxvY2FsX3BjcmVfY29uZmlnPSRQQ1JFX0NPTkZJRworLSAgICBmaQorLSAgZmkKKy0gIEFDX01TR19SRVNVTFQoWyRsb2NhbF9wY3JlX2NvbmZpZ10pCistZmkKKy1BU19JRihbdGVzdCAieCR3aXRoX3BjcmUiICE9IHhub10sCistICBbQVhfUEFUSF9HRU5FUklDKFtwY3JlXSwKKy0gICAgW10sIGRubCBNaW5pbWFsIHZlcnNpb24gb2YgUENSRSB3ZSBuZWVkIC0tIGFjY2VwdCBhbnkKKy0gICAgW10sIGRubCBjdXN0b20gc2VkIHNjcmlwdCBmb3IgdmVyc2lvbiBwYXJzaW5nIGlzIG5vdCBuZWVkZWQKKy0gICAgW0FDX0RFRklORShbSEFWRV9QQ1JFXSwgWzFdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFBDUkUgbGlicmFyeV0pCistICAgICBMSUJTPSIkTElCUyAkUENSRV9MSUJTIgorLSAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUENSRV9DRkxBR1MiCistICAgIF0sCistICAgIFtBQ19NU0dfRkFJTFVSRShbCistICAgICAgICBDYW5ub3QgZmluZCBwY3JlLWNvbmZpZyBzY3JpcHQgZnJvbSBQQ1JFIChQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucykKKy0gICAgICAgIGxpYnJhcnkgcGFja2FnZS4gVGhpcyBkZXBlbmRlbmN5IGlzIG5lZWRlZCBmb3IgY29uZmlndXJlIHRvIGNvbXBsZXRlLAorLSAgICAgICAgRWl0aGVyOgorLSAgICAgICAgLSBJbnN0YWxsIHRoZSBQQ1JFIGRldmVsb3BlciBwYWNrYWdlIG9uIHlvdXIgc3lzdGVtIChwcmVmZXJyZWQgYXBwcm9hY2gpLgorLSAgICAgICAgLSBEb3dubG9hZCB0aGUgUENSRSBzb3VyY2UgdGFyYmFsbCwgYnVpbGQgYW5kIGluc3RhbGwgb24geW91ciBzeXN0ZW0KKy0gICAgICAgICAgYXMgeW91IHdvdWxkIGZvciBhbnkgcGFja2FnZSBidWlsdCBmcm9tIHNvdXJjZSBkaXN0cmlidXRpb24uCistICAgICAgICAtIFVzZSB0aGUgVG9vbHMvcGNyZS1idWlsZC5zaCBzY3JpcHQgdG8gYnVpbGQgUENSRSBqdXN0IGZvciBTV0lHIHRvIHN0YXRpY2FsbHkKKy0gICAgICAgICAgbGluayBhZ2FpbnN0LiBSdW4gJ1Rvb2xzL3BjcmUtYnVpbGQuc2ggLS1oZWxwJyBmb3IgaW5zdHJ1Y3Rpb25zLgorLSAgICAgICAgICAocXVpdGUgZWFzeSBhbmQgZG9lcyBub3QgcmVxdWlyZSBwcml2aWxlZ2VzIHRvIGluc3RhbGwgUENSRSBvbiB5b3VyIHN5c3RlbSkKKy0gICAgICAgIC0gVXNlIGNvbmZpZ3VyZSAtLXdpdGhvdXQtcGNyZSB0byBkaXNhYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydCBpbiBTV0lHCistICAgICAgICAgIChub3QgcmVjb21tZW5kZWQpLl0pCistICAgIF0pCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbUENSRV0sIFtsaWJwY3JlXSwgWworKyAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV0sIFsxXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBQQ1JFIGxpYnJhcnldKQorKyAgICBMSUJTPSIkTElCUyAkUENSRV9MSUJTIgorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRQQ1JFX0NGTEFHUyIKKysgIF0sIFsKKysgICAgQUNfTVNHX1dBUk4oWyRQQ1JFX1BLR19FUlJPUlNdKQorICAgXSkKKytmaQorIAorIAorIGRubCBDQ2FjaGUKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwOTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWdfMy4wLjYuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtdXNlLXBrZy1jb25maWctZm9yLXBjcmUtZGV0ZWN0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImRmNDNhZTI3MTY0MmJjZmE2MWMxZTU5Zjk3MGY5OTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM2N2Y2M2VhMTE5NTYxMDZlNGNkYTY2NDE2ZDUwMjAzMzBkYzRjZTJlZTQ1MDU3ZDM5YTk0OTRjZTMzZWNhMDUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiNzg3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAxLWxpbnV4LXN5c2xpbnV4LXN1cHBvcnQtZXh0Mi0zLTQtZGV2aWNlLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gNjBmMzgzM2FiMmI1ODk5NzcxYjRlYWI2NTRlODhmOTg4OGI5OTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjowMTo1NSArMDgwMAorU3ViamVjdDogW1BBVENIIDEvOV0gbGludXgvc3lzbGludXg6IHN1cHBvcnQgZXh0Mi8zLzQgZGV2aWNlCisKKyogU3VwcG9ydCBleHQyLzMvNCBkZWl2Y2UuCisqIFRoZSBvcGVuX2V4dDJfZnMoKSBjaGVja3Mgd2hldGhlciBpdCBpcyBhbiBleHQyLzMvNCBkZXZpY2UsCisgIGRvIHRoZSBleHQyLzMvNCBpbnN0YWxsYXRpb24gKGluc3RhbGxfdG9fZXh0MigpKSBpZiB5ZXMsIG90aGVyd2lzZSBnbworICBvbiB0byB0aGUgZmF0L250ZnMuCisqIFRoZSBleHQyLzMvNCBzdXBwb3J0IGRvZXNuJ3QgcmVxdWlyZSByb290IHByaXZpbGVnZXMgc2luY2UgaXQgZG9lc24ndCBuZWVkCisgIG1vdW50IChidXQgd3JpdGUgcGVybWlzc2lvbiBpcyByZXF1aXJlZCkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCAzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDkxMmRlNzEuLjM2ZmMyMDIgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMjU2LDYgKzI1NiwyMyBAQCBpbnQgZG9fb3Blbl9maWxlKGNoYXIgKm5hbWUpCisgICAgIHJldHVybiBmZDsKKyB9CisgCisrLyoKKysgKiBDaGVjayB3aGV0aGVyIHRoZSBkZXZpY2UgY29udGFpbnMgYW4gZXh0MiwgZXh0MyBvciBleHQ0IGZzIGFuZCBvcGVuIGl0IGlmCisrICogdHJ1ZS4KKysgKiByZXR1cm4gdmFsdWU6CisrICogMDogRXZlcnl0aGluZyBpcyBPSworKyAqIDE6IE5vdCBhbiBleHQyLCBleHQzIG9yIGV4dDQKKysgKiAtMTogdW5leHBlY3RlZCBlcnJvcgorKyAqLworK3N0YXRpYyBpbnQgb3Blbl9leHQyX2ZzKGNvbnN0IGNoYXIgKmRldmljZSwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyt9CisrCisrLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworK3N0YXRpYyBpbnQgaW5zdGFsbF90b19leHQyKGNvbnN0IGNoYXIgKmRldmljZSwgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorK3sKKyt9CisrCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlY3RidWZbU0VDVE9SX1NJWkVdOworQEAgLTMxMyw2ICszMzAsMjQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJZGllKCJjYW4ndCBjb21iaW5lIGFuIG9mZnNldCB3aXRoIGEgYmxvY2sgZGV2aWNlIik7CisgICAgIH0KKyAKKysgICAgLyoKKysgICAgICogQ2hlY2sgaWYgaXQgaXMgYW4gZXh0MiwgZXh0MyBvciBleHQ0CisrICAgICAqLworKyAgICBydiA9IG9wZW5fZXh0Ml9mcyhvcHQuZGV2aWNlLCBzdWJkaXIpOworKyAgICBpZiAocnYgPT0gMCkgeworKyAgICAgICAgaWYgKGluc3RhbGxfdG9fZXh0MihvcHQuZGV2aWNlLCBkZXZfZmQsIHN1YmRpcikpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnN0YWxsYXRpb24gZmFpbGVkXG4iLCBvcHQuZGV2aWNlKTsKKysgICAgICAgICAgICBleGl0KDEpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIC8qIFVuZXhwZWN0ZWQgZXJyb3JzICovCisrICAgIH0gZWxzZSBpZiAocnYgPT0gLTEpIHsKKysgICAgICAgIGV4aXQoMSk7CisrICAgIH0KKysKKysgICAgLyogUmVzZXQgcnYgKi8KKysgICAgcnYgPSAwOworKworICAgICB4cHJlYWQoZGV2X2ZkLCBzZWN0YnVmLCBTRUNUT1JfU0laRSwgb3B0Lm9mZnNldCk7CisgICAgIGZzeW5jKGRldl9mZCk7CisgCitAQCAtMzIyLDYgKzM1Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAqLworICAgICBpZiAoKGVycm1zZyA9IHN5c2xpbnV4X2NoZWNrX2Jvb3RzZWN0KHNlY3RidWYsICZmc190eXBlKSkpIHsKKyAJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG9wdC5kZXZpY2UsIGVycm1zZyk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6IHN1cHBvcnRlZCBmczogZmF0L250ZnMvZXh0Mi9leDMvZXh0NFxuIiwgcHJvZ3JhbSk7CisgCWV4aXQoMSk7CisgICAgIH0KKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjZjA2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2gKQEAgLTAsMCArMSwxNDEgQEAKK0Zyb20gMDdmYjczN2ZiNjBjMDhlYWFhNDE5ODlkNTMxZmMyMzAwOTUyMzU0NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjowOToxOCArMDgwMAorU3ViamVjdDogW1BBVENIIDIvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBvcGVuX2V4dDJfZnMoKQorCitUaGUgb3Blbl9leHQyX2ZzKCkgY2hlY2tzIHdoZXRoZXIgaXQgaXMgYW4gZXh0Mi9leHQzL2V4dDQgZGV2aWNlLCBhbmQKK3JldHVybjoKKzA6IEl0IGlzIGFuIGV4dDIsIGV4dDMgb3IgZXh0NC4KKzE6IE5vdCBhbiBleHQyLCBleHQzIG9yIGV4dDQuCistMTogdW5leHBlY3RlZCBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvTWFrZWZpbGUgICB8ICAyICstCisgbGludXgvc3lzbGludXguYyB8IDgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saW51eC9NYWtlZmlsZSBiL2xpbnV4L01ha2VmaWxlCitpbmRleCAxMTY2N2UxLi5hYzFhYzU4IDEwMDY0NAorLS0tIGEvbGludXgvTWFrZWZpbGUKKysrKyBiL2xpbnV4L01ha2VmaWxlCitAQCAtNTEsNyArNTEsNyBAQCBzcG90bGVzczogY2xlYW4KKyBpbnN0YWxsZXI6IHN5c2xpbnV4IHN5c2xpbnV4LW5vbXRvb2xzCisgCisgc3lzbGludXg6ICQoT0JKUykKKy0JJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorKwkkKENDKSAkKExERkxBR1MpIC1vICRAICReIC1sZXh0MmZzCisgCisgc3lzbGludXgtbm9tdG9vbHM6IHN5c2xpbnV4CisgCWxuIC1mICQ8ICRACitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDM2ZmMyMDIuLmNjNGU3ZGEgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNzIsNiArNzIsNyBAQAorICNpbmNsdWRlICJzeXNseGZzLmgiCisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKysjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorIAorIGV4dGVybiBjb25zdCBjaGFyICpwcm9ncmFtOwkvKiBOYW1lIG9mIHByb2dyYW0gKi8KKyAKK0BAIC04Miw2ICs4Myw5IEBAIGNoYXIgKm1udHBhdGggPSBOVUxMOwkJLyogUGF0aCBvbiB3aGljaCB0byBtb3VudCAqLworIGludCBsb29wX2ZkID0gLTE7CQkvKiBMb29wIGRldmljZSAqLworICNlbmRpZgorIAorK2V4dDJfZmlsc3lzICAgICBlMmZzID0gTlVMTDsgICAgLyogRXh0Mi8zLzQgZmlsZXN5c3RlbSAqLworK2V4dDJfaW5vX3QgICAgICByb290LCBjd2Q7ICAgICAgLyogVGhlIHJvb3QgYW5kIGN3ZCBvZiBlMmZzICovCisrCisgdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSBkaWUoY29uc3QgY2hhciAqbXNnKQorIHsKKyAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHByb2dyYW0sIG1zZyk7CitAQCAtMjY2LDYgKzI3MCw4MiBAQCBpbnQgZG9fb3Blbl9maWxlKGNoYXIgKm5hbWUpCisgICovCisgc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBpbnQgICAgICAgICByZXR2YWw7CisrICAgIGludCAgICAgICAgIG9wZW5fZmxhZyA9IEVYVDJfRkxBR19SVywgbW91bnRfZmxhZ3M7CisrICAgIGV4dDJfaW5vX3QgIGRpcmlubzsKKysgICAgY2hhciAgICAgICAgb3B0X3N0cmluZ1s0MF07CisrCisrICAgIGlmIChvcHQub2Zmc2V0KSB7CisrICAgICAgICBzcHJpbnRmKG9wdF9zdHJpbmcsICJvZmZzZXQ9JWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpb3B0Lm9mZnNldCk7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfb3BlbjIoZGV2aWNlLCBvcHRfc3RyaW5nLCBvcGVuX2ZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmUyZnMpOworKyAgICB9IGVsc2UKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19vcGVuKGRldmljZSwgb3Blbl9mbGFnLCAwLCAwLCB1bml4X2lvX21hbmFnZXIsICZlMmZzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgLyogSXQgbWlnaHQgbm90IGJlIGFuIGV4dE4gZnMsIHNvIHdlIG5lZWQgY2hlY2sgbWFnaWMgZmlyc3RseSAqLworKyAgICAgICAgaWYgKHJldHZhbCA9PSBFWFQyX0VUX0JBRF9NQUdJQykgeworKyAgICAgICAgICAgIC8qIERvIG5vdGhpbmcsIHJldHVybiBzaWxlbnRseSAqLworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gb3BlbjogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIFN0b3AgaWYgaXQgaXMgbW91bnRlZCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfY2hlY2tfaWZfbW91bnRlZChkZXZpY2UsICZtb3VudF9mbGFncyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19jaGVja19pZl9tb3VudCgpIGVycm9yIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIGlmIChtb3VudF9mbGFncyAmIEVYVDJfTUZfTU9VTlRFRCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXMgaXMgbW91bnRlZFxuIiwgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICBlMmZzLT5kZWZhdWx0X2JpdG1hcF90eXBlID0gRVhUMkZTX0JNQVA2NF9SQlRSRUU7CisrCisrICAgIC8qIFJlYWQgdGhlIGlub2RlIG1hcCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZV9iaXRtYXAoZTJmcyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdoaWxlIHJlYWRpbmcgaW5vZGUgYml0bWFwOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBSZWFkIHRoZSBibG9jayBtYXAgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX3JlYWRfYmxvY2tfYml0bWFwKGUyZnMpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3aGlsZSByZWFkaW5nIGJsb2NrIGJpdG1hcDogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgcm9vdCA9IGN3ZCA9IEVYVDJfUk9PVF9JTk87CisrICAgIC8qIENoZWNrIHRoZSBzdWJkaXIgKi8KKysgICAgaWYgKHN0cmNtcChzdWJkaXIsICIvIikpIHsKKysJcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgc3ViZGlyLCAmZGlyaW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gZmluZCBkaXIgJXMgb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIHN1YmRpciwgZGV2aWNlKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfY2hlY2tfZGlyZWN0b3J5KGUyZnMsIGRpcmlubyk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIGNkIHRvOiAlc1xuIiwgcHJvZ3JhbSwgc3ViZGlyKTsKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICAgICAgY3dkID0gZGlyaW5vOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIHJldHVybiAtMTsKKyB9CisgCisgLyogVGhlIGluc3RhbGwgZnVuYyBmb3IgZXh0MiwgZXh0MyBhbmQgZXh0NCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGJhMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaApAQCAtMCwwICsxLDExNiBAQAorRnJvbSA2NGQ4NTZiMjQzODEyOTA3MDY4Nzc2YjIwNGEwMDNhM2E4ZmExMjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjE3OjQyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMy85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGluc3RhbGxfdG9fZXh0MigpCisKKyogVGhlIGhhbmRsZV9hZHZfb25fZXh0KCkgY2hlY2tzIHdoZXRoZXIgd2Ugb25seSBuZWVkIHVwZGF0ZSBhZHYuCisqIFRoZSB3cml0ZV90b19leHQoKSBpbnN0YWxscyBmaWxlcyAobGRsaW51eC5zeXMgb3IgbGRsaW51eC5jMzIpIHRvIHRoZQorICBkZXZpY2UuCisqIFRoZSBpbnN0YWxsX2Jvb3RibG9jaygpIGluc3RhbGxzIHRoZSBib290IGJsb2NrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGNjNGU3ZGEuLjQ1ZjA4MGQgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtMzQ2LDExICszNDYsOTAgQEAgc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisgZmFpbDoKKyAgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKyAgICAgcmV0dXJuIC0xOworKworK30KKysKKysvKgorKyAqIEluc3RhbGwgdGhlIGJvb3QgYmxvY2sgb24gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisrICogTXVzdCBiZSBydW4gQUZURVIgZmlsZSBpbnN0YWxsZWQuCisrICovCisraW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorK3sKKyt9CisrCisrc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorK3sKKyt9CisrCisrLyogV3JpdGUgZmlsZXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKytzdGF0aWMgaW50IHdyaXRlX3RvX2V4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuZ3RoLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpX2ZsYWdzLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCisgc3RhdGljIGludCBpbnN0YWxsX3RvX2V4dDIoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBpbnQgICAgICAgICByZXR2YWw7CisrICAgIGV4dDJfaW5vX3QgIG9sZGlubzsKKysKKysgICAgY29uc3QgY2hhciAqZmlsZSA9ICJsZGxpbnV4LnN5cyI7CisrICAgIGNvbnN0IGNoYXIgKm9sZGZpbGUgPSAiZXh0bGludXguc3lzIjsKKysgICAgY29uc3QgY2hhciAqYzMyZmlsZSA9ICJsZGxpbnV4LmMzMiI7CisrCisrICAgIC8qIEhhbmRsZSB0aGUgYWR2ICovCisrICAgIGlmIChoYW5kbGVfYWR2X29uX2V4dCgpIDwgMCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgaGFuZGxpbmcgQURWIG9uICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgcmV0dmFsID0gMTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBSZXR1cm4gaWYgb25seSBuZWVkIHVwZGF0ZSB0aGUgYWR2ICovCisrICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgIHJldHVybiBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgbGRsaW51eC5zeXMsIGFkdiwgYm9vdCBzZWN0b3IgKi8KKysgICAgcmV0dmFsID0gd3JpdGVfdG9fZXh0KGZpbGUsIChjb25zdCBjaGFyIF9mb3JjZSAqKWJvb3RfaW1hZ2UsCisrICAgICAgICAgICAgICAgIGJvb3RfaW1hZ2VfbGVuLCBFWFQyX0lNTVVUQUJMRV9GTCwgZGV2X2ZkLCBzdWJkaXIpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdGluZzogJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBsZGxpbnV4LmMzMiAqLworKyAgICByZXR2YWwgPSB3cml0ZV90b19leHQoYzMyZmlsZSwKKysgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgX2ZvcmNlICopc3lzbGludXhfbGRsaW51eGMzMiwKKysgICAgICAgICAgICAgICAgc3lzbGludXhfbGRsaW51eGMzMl9sZW4sIDAsIGRldl9mZCwgc3ViZGlyKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXRpbmc6ICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgYzMyZmlsZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogTG9vayBpZiB3ZSBoYXZlIHRoZSBleHRsaW51eC5zeXMgYW5kIHJlbW92ZSBpdCovCisrICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIG9sZGZpbGUsICZvbGRpbm8pOworKyAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc191bmxpbmsoZTJmcywgY3dkLCBvbGRmaWxlLCBvbGRpbm8sIDApOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gdW5saW5rOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgb2xkZmlsZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgICAgcmV0dmFsID0gMDsKKysgICAgfQorKworKyAgICBzeW5jKCk7CisrICAgIHJldHZhbCA9IGluc3RhbGxfYm9vdGJsb2NrKGRldl9mZCwgZGV2aWNlKTsKKysgICAgY2xvc2UoZGV2X2ZkKTsKKysgICAgc3luYygpOworKworK2ZhaWw6CisrICAgICh2b2lkKSBleHQyZnNfY2xvc2UoZTJmcyk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI1NmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK0Zyb20gMzVkMzg0MmNjNGI5MzBjNTEwMmVlZDI5MjFlMDE4OWI3ZjRmZDA2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjo0MzozNyArMDgwMAorU3ViamVjdDogW1BBVENIIDQvOV0gbGludXgvc3lzbGludXg6IGFkZCBleHRfZmlsZV9yZWFkKCkgYW5kIGV4dF9maWxlX3dyaXRlKCkKKworV2lsbCB1c2UgdGhlbSB0byByZWFkIGFuZCB3cml0ZSBvbiB0aGUgZXh0WCBkZXZpY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggNDVmMDgwZC4uMjQ3Yzg2YSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0zNDksNiArMzQ5LDY4IEBAIGZhaWw6CisgCisgfQorIAorKy8qIFJlYWQgZnJvbSBhbiBleHQyX2ZpbGUgKi8KKytzdGF0aWMgaW50IGV4dF9maWxlX3JlYWQoZXh0Ml9maWxlX3QgZTJfZmlsZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICptc2cpCisreworKyAgICBpbnQgICAgICAgICAgICAgICAgIHJldHZhbDsKKysgICAgY2hhciAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKikgYnVmOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGdvdCA9IDA7CisrICAgIHNpemVfdCAgICAgICAgICAgICAgZG9uZSA9IDA7CisrCisrICAgIC8qIEFsd2F5cyBsc2VlayBzaW5jZSBlMl9maWxlIGlzIHVuY29udHJvbGxlZCBieSB0aGlzIGZ1bmMgKi8KKysgICAgaWYgKGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCkpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19maWxlX2xzZWVrKCkgZmFpbGVkLlxuIiwKKysgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfcmVhZChlMl9maWxlLCBwdHIsIGNvdW50LCAmZ290KTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSByZWFkaW5nICVzXG4iLAorKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbXNnKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBjb3VudCAtPSBnb3Q7CisrICAgICAgICBwdHIgKz0gZ290OworKyAgICAgICAgZG9uZSArPSBnb3Q7CisrICAgICAgICBpZiAoZ290ID09IDAgfHwgY291bnQgPT0gMCkKKysgICAgICAgICAgICBicmVhazsKKysgICAgfQorKworKyAgICByZXR1cm4gZG9uZTsKKyt9CisrCisrLyogV3JpdGUgdG8gYW4gZXh0Ml9maWxlICovCisrc3RhdGljIGludCBleHRfZmlsZV93cml0ZShleHQyX2ZpbGVfdCBlMl9maWxlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQpCisreworKyAgICBjb25zdCBjaGFyICAgICAgICAgICpwdHIgPSAoY29uc3QgY2hhciAqKSBidWY7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgd3JpdHRlbiA9IDA7CisrICAgIHNpemVfdCAgICAgICAgICAgICAgZG9uZSA9IDA7CisrCisrICAgIC8qIEFsd2F5cyBsc2VlayBzaW5jZSBlMl9maWxlIGlzIHVuY29udHJvbGxlZCBieSB0aGlzIGZ1bmMgKi8KKysgICAgaWYgKGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIG9mZnNldCwgRVhUMl9TRUVLX1NFVCwgTlVMTCkpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHQyZnNfZmlsZV9sc2VlaygpIGZhaWxlZC5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAoY291bnQgPiAwKSB7CisrICAgICAgICBpZiAoZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLCBjb3VudCwgJndyaXR0ZW4pKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHdyaXRlIHN5c2xpbnV4IGFkdi5cbiIsCisrICAgICAgICAgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBjb3VudCAtPSB3cml0dGVuOworKyAgICAgICAgcHRyICs9IHdyaXR0ZW47CisrICAgICAgICBkb25lICs9IHdyaXR0ZW47CisrICAgIH0KKysKKysgICAgcmV0dXJuIGRvbmU7CisrfQorKworIC8qCisgICogSW5zdGFsbCB0aGUgYm9vdCBibG9jayBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAgKiBNdXN0IGJlIHJ1biBBRlRFUiBmaWxlIGluc3RhbGxlZC4KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOWU3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2gKQEAgLTAsMCArMSwxMjcgQEAKK0Zyb20gY2RiOTgwYjM3ZjQwZGMyYzQxODkxNDM0Yzc3MzZlNDlkYTUzNzU2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxNjo0Nzo1MiArMDgwMAorU3ViamVjdDogW1BBVENIIDUvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBoYW5kbGVfYWR2X29uX2V4dCgpCisKK0l0IHJlYWRzIGFkdiBpZiBmb3VuZCBvbiB0aGUgZGV2aWNlLCBvciByZXNldHMgc3lzbGludXhfYWR2LCBvciB1cGRhdGUKK3RoZSBhZHYgaWYgdXBkYXRlIGFkdiBvbmx5LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IDI0N2M4NmEuLmRlNWQyNzIgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDIxLDYgKzQyMSwxMDMgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIAorIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyB7CisrICAgIGludCAgICAgICAgICAgICAgICAgaSwgcmV0dmFsLCBmb3VuZF9maWxlOworKyAgICBpbnQgICAgICAgICAgICAgICAgIG5lZWRfY2xvc2UgPSAyOyAvKiAyIG1lYW5zIG5vIG5lZWQgZXh0cmEgY2xvc2UgKi8KKysgICAgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWVzWzJdID0geyJsZGxpbnV4LnN5cyIsICJleHRsaW51eC5zeXMifTsKKysgICAgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWU7CisrICAgIGV4dDJfaW5vX3QgICAgICAgICAgbmV3aW5vOworKyAgICBleHQyX2ZpbGVfdCAgICAgICAgIGUyX2ZpbGU7CisrICAgIHN0cnVjdCBleHQyX2lub2RlICAgaW5vZGU7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVzW2ldOworKyAgICAgICAgZm91bmRfZmlsZSA9IDA7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBmaWxlbmFtZSwgJm5ld2lubyk7CisrICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgICAgICBmb3VuZF9maWxlID0gMTsKKysgICAgICAgIH0gZWxzZQorKyAgICAgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgICAgbmVlZF9jbG9zZSA9IGk7CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGUyZnMsIG5ld2lubywgRVhUMl9GTEFHX1JXLCAmZTJfZmlsZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIG9wZW4gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9pbm9kZShlMmZzLCBuZXdpbm8sICZpbm9kZSk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgcmVhZGluZyBpbm9kZTogJXUsIGZpbGU6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBuZXdpbm8sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBDaGVjayB0aGUgc2l6ZSB0byBzZWUgaWYgdG9vIHNtYWxsIHRvIHJlYWQgKi8KKysgICAgICAgIGlmIChpbm9kZS5pX3NpemUgPCAyICogQURWX1NJWkUpIHsKKysgICAgICAgICAgICBpZiAob3B0LnVwZGF0ZV9vbmx5ID09IC0xKSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byB3cml0ZSBhdXhpbGxpYXJ5IGRhdGFcblwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiAlcyBpcyB0b28gc21hbGwgKG5lZWQgLS11cGRhdGUpP1xuIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOworKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHN5c2xpbnV4X3Jlc2V0X2FkdihzeXNsaW51eF9hZHYpOworKyAgICAgICAgICAgIGZvdW5kX2ZpbGUgPSAwOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogUmVhZCB0aGUgYWR2ICovCisrICAgICAgICByZXR2YWwgPSBleHRfZmlsZV9yZWFkKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RlLmlfc2l6ZSAtIDIgKiBBRFZfU0laRSwgIkFEViIpOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAtMSkKKysgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgaWYgKHJldHZhbCA9PSAyICogQURWX1NJWkUpIHsKKysgICAgICAgICAgICByZXR2YWwgPSBzeXNsaW51eF92YWxpZGF0ZV9hZHYoc3lzbGludXhfYWR2KTsKKysgICAgICAgICAgICAvKiBSZWFkIHRoZSBhZHYgc3VjY2Vzc2Z1bGx5ICovCisrICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKQorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIENsb3NlIHRoZSBmaWxlIGlmIHJlYWNoZXMgaGVyZSwgb3RoZXJ3aXNlIHdlIGxlYXZlIHRoZSBmaWxlCisrICAgICAgICAgKiBvcGVuIGluIGNhc2Ugd2UgbmVlZCB3cml0ZSBpdCAqLworKyAgICAgICAgbmVlZF9jbG9zZSA9IDI7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSBjbG9zaW5nICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIWZvdW5kX2ZpbGUpIHsKKysgICAgICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBubyBsZGxpbnV4LnN5cyBvciBleHRsaW51eC5zeXMgZm91bmQgb24gdGhlIGRldmljZVxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICAgICAgc3lzbGludXhfcmVzZXRfYWR2KHN5c2xpbnV4X2Fkdik7CisrICAgIH0KKysKKysgICAgLyogVGhlIG1vZGlmeV9hZHYgd2lsbCByZXNldCB0aGUgYWR2IGlmIG9wdC5yZXNldF9hZHYgKi8KKysgICAgaWYgKG1vZGlmeV9hZHYoKSA8IDApIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIG1vZGlmeWluZyBhZHZcbiIsIHByb2dyYW0pOworKyAgICAgICAgcmV0dmFsID0gLTE7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgYWR2IGlmIHVwZGF0ZV9vbmx5ID09IC0xIGFuZCBmb3VuZCBmaWxlICovCisrICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEgJiYgZm91bmRfZmlsZSkgeworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFICwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbm9kZS5pX3NpemUgLSAyICogQURWX1NJWkUpID09IC0xKQorKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKytmYWlsOgorKyAgICBpZiAobmVlZF9jbG9zZSAhPSAyKQorKyAgICAgICAgKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBXcml0ZSBmaWxlcywgYWR2LCBib290IHNlY3RvciAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmE4NzI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaApAQCAtMCwwICsxLDIxNSBAQAorRnJvbSA5MjJlNTZjMTBlMzZkODc2Nzc3NTgwYzg0ZGFlZjlhNjZiZWE2NTI1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE3OjIwOjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNi85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IHdyaXRlX3RvX2V4dCgpIGFuZCBhZGQKKyBzeXNsaW51eGV4dC5jCisKKyogVGhlIHdyaXRlX3RvX2V4dCgpIHdyaXRlIGZpbGUgdG8gdGhlIGV4dFggZGV2aWNlLCBhbmQgaGFuZGxlIHRoZSBib290CisgIHNlY3Rvci4KKyogVGhlIHN5c2xpbnV4ZXh0LmMgaXMgdXNlZCBmb3IgcGxhY2luZyB0aGUgY29kZSB3aGljaCBhcmUgdXNlZCBieQorICBleHRsaW51eCBhbmQgc3lzbGludXggKHdoaWNoIGlzIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KCkpLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyB8ICAgNyArKysKKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuaCB8ICAgNSArKworIGxpbnV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCisgbGludXgvc3lzbGludXguYyAgICAgICAgICAgfCAxMTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuaAorCitkaWZmIC0tZ2l0IGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJiNTRjZWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCitAQCAtMCwwICsxLDcgQEAKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKyt2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpCisreworK30KKysKK2RpZmYgLS1naXQgYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuaCBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOGFiZDhiOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmgKK0BAIC0wLDAgKzEsNSBAQAorKyNpZm5kZWYgRVhUMl9TVVBFUl9PRkZTRVQKKysjZGVmaW5lIEVYVDJfU1VQRVJfT0ZGU0VUIDEwMjQKKysjZW5kaWYKKysKKyt2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpOworZGlmZiAtLWdpdCBhL2xpbnV4L01ha2VmaWxlIGIvbGludXgvTWFrZWZpbGUKK2luZGV4IGFjMWFjNTguLjNiMjM4NjcgMTAwNjQ0CistLS0gYS9saW51eC9NYWtlZmlsZQorKysrIGIvbGludXgvTWFrZWZpbGUKK0BAIC0zMCw3ICszMCw4IEBAIFNSQ1MgICAgID0gc3lzbGludXguYyBcCisgICAgICAgICAgICAuLi9saWJpbnN0YWxsZXIvc3lzbHhtb2QuYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9ib290c2VjdF9iaW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4YzMyX2Jpbi5jIFwKKy0JICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMKKysJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhfYmluLmMgXAorKwkgICAuLi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworIE9CSlMJID0gJChwYXRzdWJzdCAlLmMsJS5vLCQobm90ZGlyICQoU1JDUykpKQorIAorIC5TVUZGSVhFUzogLmMgLm8gLmkgLnMgLlMKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggZGU1ZDI3Mi4uZjBjOTdhOCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00Niw2ICs0Niw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorIAorICNpbmNsdWRlICJsaW51eGlvY3RsLmgiCisgCitAQCAtNzIsNiArNzMsNyBAQAorICNpbmNsdWRlICJzeXNseGZzLmgiCisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKysjaW5jbHVkZSAic3lzbGludXhleHQuaCIKKyAjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorIAorIGV4dGVybiBjb25zdCBjaGFyICpwcm9ncmFtOwkvKiBOYW1lIG9mIHByb2dyYW0gKi8KK0BAIC00MTksNiArNDIxLDEyIEBAIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisgfQorIAorKy8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworK2ludCBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgbmV3aW5vLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgKnNlY3RvcnMsIGludCBuc2VjdCkKKyt7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKyB7CisgICAgIGludCAgICAgICAgICAgICAgICAgaSwgcmV0dmFsLCBmb3VuZF9maWxlOworQEAgLTUyNCw2ICs1MzIsMTE2IEBAIGZhaWw6Cisgc3RhdGljIGludCB3cml0ZV90b19leHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaV9mbGFncywgaW50IGRldl9mZCwgY29uc3QgY2hhciAqc3ViZGlyKQorIHsKKysgICAgZXh0Ml9pbm9fdCAgICAgICAgICBuZXdpbm87CisrICAgIHN0cnVjdCBleHQyX2lub2RlICAgaW5vZGU7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsLCBpLCBtb2RieXRlcywgbnNlY3Q7CisrICAgIGV4dDJfZmlsZV90ICAgICAgICAgZTJfZmlsZTsKKysgICAgc2VjdG9yX3QgICAgICAgICAgICAqc2VjdG9yczsKKysKKysgICAgLyogUmVtb3ZlIGl0IGlmIGl0IGlzIGFscmVhZHkgZXhpc3RzICovCisrICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIGZpbGVuYW1lLCAmbmV3aW5vKTsKKysgICAgaWYgKHJldHZhbCA9PSAwKSB7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfdW5saW5rKGUyZnMsIGN3ZCwgZmlsZW5hbWUsIG5ld2lubywgMCk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHVubGluazogJXNcbiIsIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8qIENyZWF0ZSBuZXcgaW5vZGUgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShlMmZzLCBjd2QsIDAxMDc1NSwgMCwgJm5ld2lubyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gY3JlYXRlIGlub2RlIGZvcjogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysKKysgICAgLyogTGluayB0aGUgaW5vZGUgYW5kIHRoZSBmaWxlbmFtZSAqLworKyAgICByZXR2YWwgPSBleHQyZnNfbGluayhlMmZzLCBjd2QsIGZpbGVuYW1lLCBuZXdpbm8sIEVYVDJfRlRfUkVHX0ZJTEUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIGxpbmsgaW5vZGUgZm9yOiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgIH0KKysKKysgICAgaWYgKGV4dDJmc190ZXN0X2lub2RlX2JpdG1hcDIoZTJmcy0+aW5vZGVfbWFwLCBuZXdpbm8pKQorKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3YXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCAlcy5cbiIsCisrICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKworKyAgICAgICAgZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihlMmZzLCBuZXdpbm8sICsxLCAwKTsKKysgICAgICAgIG1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSBMSU5VWF9TX0lGUkVHIHwgTElOVVhfU19JUlVTUiB8IExJTlVYX1NfSVJHUlAKKysgICAgICAgICAgICAgICAgICAgICAgICB8IExJTlVYX1NfSVJPVEg7CisrCWlub2RlLmlfZmxhZ3MgfD0gaV9mbGFnczsKKysgICAgICAgIGlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CisrICAgICAgICAgICAgZTJmcy0+bm93ID8gZTJmcy0+bm93IDogdGltZSgwKTsKKysgICAgICAgIGlub2RlLmlfbGlua3NfY291bnQgPSAxOworKyAgICAgICAgaWYgKGUyZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorKyAgICAgICAgICAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSB7CisrICAgICAgICAgICAgc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CisrCisrICAgICAgICAgICAgZWggPSAoc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqKSAmaW5vZGUuaV9ibG9ja1swXTsKKysgICAgICAgICAgICBlaC0+ZWhfZGVwdGggPSAwOworKyAgICAgICAgICAgIGVoLT5laF9lbnRyaWVzID0gMDsKKysgICAgICAgICAgICBlaC0+ZWhfbWFnaWMgPSBleHQyZnNfY3B1X3RvX2xlMTYoRVhUM19FWFRfTUFHSUMpOworKyAgICAgICAgICAgIGkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKysgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisrICAgICAgICAgICAgZWgtPmVoX21heCA9IGV4dDJmc19jcHVfdG9fbGUxNihpKTsKKysgICAgICAgICAgICBpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKysgICAgfQorKworKyAgICByZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGUyZnMsIG5ld2lubywgJmlub2RlKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IHdoaWxlIHdyaXR0aW5nIGlub2RlICVkLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgbmV3aW5vKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIHJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oZTJmcywgbmV3aW5vLCBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBvcGVuICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgLyogV3JpdGUgdG8gZmlsZSAqLworKyAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3RyLCBsZW5ndGgsIDApID09IC0xKQorKyAgICAgICAgZ290byBmYWlsOworKworKyAgICBpZiAoc3RyY21wKGZpbGVuYW1lLCAibGRsaW51eC5zeXMiKSA9PSAwKSB7CisrICAgICAgICAvKiBXcml0ZSBBRFYgKi8KKysgICAgICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzeXNsaW51eF9hZHYsIDIgKiBBRFZfU0laRSwKKysgICAgICAgICAgICAgICAgYm9vdF9pbWFnZV9sZW4pID09IC0xKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisrICAgICAgICBzeXNsaW51eF9wYXRjaF9ib290c2VjdChkZXZfZmQpOworKworKyAgICAgICAgLyogUGF0Y2ggbGRsaW51eC5zeXMgKi8KKysgICAgICAgIG5zZWN0ID0gKGJvb3RfaW1hZ2VfbGVuICsgU0VDVE9SX1NJWkUgLSAxKSA+PiBTRUNUT1JfU0hJRlQ7CisrICAgICAgICBuc2VjdCArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR3byBzZWN0b3JzIGZvciB0aGUgQURWICovCisrICAgICAgICBzZWN0b3JzID0gYWxsb2NhKHNpemVvZihzZWN0b3JfdCkgKiBuc2VjdCk7CisrICAgICAgICBtZW1zZXQoc2VjdG9ycywgMCwgbnNlY3QgKiBzaXplb2YgKnNlY3RvcnMpOworKyAgICAgICAgLyogVGhlIHNlY3RvcnMgd2lsbCBiZSBtb2RpZmllZCBhbmQgdXNlZCBieSBzeXNsaW51eF9wYXRjaCgpICovCisrICAgICAgICByZXR2YWwgPSBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZTJmcywgbmV3aW5vLCBzZWN0b3JzLCBuc2VjdCk7CisrICAgICAgICBpZiAocmV0dmFsKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgbW9kaWZpZWQgaW1hZ2UgaW4gbWVtb3J5ICovCisrICAgICAgICBtb2RieXRlcyA9IHN5c2xpbnV4X3BhdGNoKHNlY3RvcnMsIG5zZWN0LCBvcHQuc3R1cGlkX21vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5yYWlkX21vZGUsIHN1YmRpciwgTlVMTCk7CisrCisrICAgICAgICAvKiBSZXdyaXRlIHRoZSBmaXJzdCBtb2RieXRlcyBvZiBsZGxpbnV4LnN5cyAqLworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN0ciwgbW9kYnl0ZXMsIDApID09IC0xKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBwYXRjaCAlcy5cbiIsIHByb2dyYW0sCisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgfQorKyAgICB9CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICByZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTM4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gYTk1YjgzMWUxOGRkMTIzZjg1OWJjNWU2YzRjZWNkY2MwMTg0ZWUzNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjE4OjAyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNy85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcygpCisKK1RoZSBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoKSBjb25zdHVjdHMgdGhlIHNlY3RvciBhY2NvcmRpbmcgdG8gdGhlCitibWFwLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGYwYzk3YTguLmM3NDE3NTAgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDIxLDEwICs0MjEsNjAgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKyB9CisgCisrLyogVGhlIGZpbGUncyBibG9jayBjb3VudCAqLworK2ludCBibG9ja19jb3VudCA9IDA7Cisrc3RhdGljIGludCBnZXRfYmxvY2tfY291bnQoZXh0Ml9maWxzeXMgZnMgRVhUMkZTX0FUVFIoKHVudXNlZCkpLAorKwkJCSAgICAgYmxrNjRfdCAqYmxvY2tuciBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBlMl9ibGtjbnRfdCBibG9ja2NudCBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBibGs2NF90IHJlZl9ibG9jayBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBpbnQgcmVmX29mZnNldCBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICB2b2lkICpwcml2YXRlIEVYVDJGU19BVFRSKCh1bnVzZWQpKSkKKyt7CisrICAgIGJsb2NrX2NvdW50Kys7CisrICAgIHJldHVybiAwOworK30KKysKKyAvKiBDb25zdHJ1Y3QgdGhlIGJvb3QgZmlsZSBtYXAgKi8KKyBpbnQgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IG5ld2lubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl90ICpzZWN0b3JzLCBpbnQgbnNlY3QpCisgeworKyAgICBibGs2NF90ICAgICAgICAgICAgIHBibGssIGJsa3NpemUsIGJsayA9IDA7CisrICAgIHNlY3Rvcl90ICAgICAgICAgICAgc2VjOworKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIGk7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsOworKworKyAgICBibGtzaXplID0gZnMtPmJsb2Nrc2l6ZTsKKysgICAgYmxrc2l6ZSA+Pj0gU0VDVE9SX1NISUZUOworKworKyAgICAvKiBHZXQgdGhlIHRvdGFsIGJsb2NrcyBuby4gKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX2Jsb2NrX2l0ZXJhdGUzKGZzLCBuZXdpbm8sIEJMT0NLX0ZMQUdfUkVBRF9PTkxZLAorKyAgICAgICAgICAgIE5VTEwsIGdldF9ibG9ja19jb3VudCwgTlVMTCk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoKSBmYWlsZWQuXG4iLCBwcm9ncmFtKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB3aGlsZSAobnNlY3QpIHsKKysgICAgICAgIGlmIChibG9ja19jb3VudC0tID09IDApCisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvKiBHZXQgdGhlIHBoeXNpY2FsIGJsb2NrIG5vLiAoYm1hcCkgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19ibWFwMihmcywgbmV3aW5vLCAwLCAwLCAwLCBibGssIDAsICZwYmxrKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZXh0MmZzX2JtYXAyKCkgZmFpbGVkLlxuIiwgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKworKyAgICAgICAgYmxrKys7CisrICAgICAgICBzZWMgPSAoc2VjdG9yX3QpcGJsayAqIGJsa3NpemU7CisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxrc2l6ZTsgaSsrKSB7CisrICAgICAgICAgICAgKnNlY3RvcnMrKyA9IHNlYysrOworKyAgICAgICAgICAgIGlmICghIC0tbnNlY3QpCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MDBjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoCkBAIC0wLDAgKzEsNDI3IEBACitGcm9tIDc4ZDc2Yjg3YTRiODU1ZTZiNjYxYWU0NTcyODNhNjNmMzg1YzA0YzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoyNjo0NiArMDgwMAorU3ViamVjdDogW1BBVENIIDgvOV0gbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0OiBpbXBsZW1lbnQKKyBzeXNsaW51eF9wYXRjaF9ib290c2VjdCgpCisKK01vdmUgdGhlIHJlbGF0ZWQgZnJvbSBleHRsaW51eC9tYWluLmMgdG8gbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMsIHRoZQorc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoKSBhcmUgdXNlZCBieSBib3RoIGV4dGxpbnV4L21haW4uYyBhbmQKK2xpbnV4L3N5c2xpbnV4LmMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGV4dGxpbnV4L01ha2VmaWxlICAgICAgICAgIHwgICAzICstCisgZXh0bGludXgvbWFpbi5jICAgICAgICAgICAgfCAxNjcgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyB8IDE3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE3NSBpbnNlcnRpb25zKCspLCAxNjUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRsaW51eC9NYWtlZmlsZSBiL2V4dGxpbnV4L01ha2VmaWxlCitpbmRleCAwMmQxZGI1Li45MGRkOTJmIDEwMDY0NAorLS0tIGEvZXh0bGludXgvTWFrZWZpbGUKKysrKyBiL2V4dGxpbnV4L01ha2VmaWxlCitAQCAtMzEsNyArMzEsOCBAQCBTUkNTICAgICA9IG1haW4uYyBcCisgCSAgIC4uL2xpYmluc3RhbGxlci9hZHZpby5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2Jvb3RzZWN0X2Jpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhjMzJfYmluLmMgXAorLQkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYworKwkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYyBcCisrCSAgIC4uL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgT0JKUwkgPSAkKHBhdHN1YnN0ICUuYywlLm8sJChub3RkaXIgJChTUkNTKSkpCisgCisgLlNVRkZJWEVTOiAuYyAubyAuaSAucyAuUworZGlmZiAtLWdpdCBhL2V4dGxpbnV4L21haW4uYyBiL2V4dGxpbnV4L21haW4uYworaW5kZXggMDk3NDBiZC4uNmZlMDI2ZSAxMDA2NDQKKy0tLSBhL2V4dGxpbnV4L21haW4uYworKysrIGIvZXh0bGludXgvbWFpbi5jCitAQCAtNjAsNiArNjAsNyBAQAorICNpbmNsdWRlICJzZXRhZHYuaCIKKyAjaW5jbHVkZSAic3lzbHhvcHQuaCIgLyogdW5pZmllZCBvcHRpb25zICovCisgI2luY2x1ZGUgIm1vdW50aW5mby5oIgorKyNpbmNsdWRlICJzeXNsaW51eGV4dC5oIgorIAorICNpZmRlZiBERUJVRworICMgZGVmaW5lIGRwcmludGYgcHJpbnRmCitAQCAtNjcsMTAgKzY4LDYgQEAKKyAjIGRlZmluZSBkcHJpbnRmKC4uLikgKCh2b2lkKTApCisgI2VuZGlmCisgCistI2lmbmRlZiBFWFQyX1NVUEVSX09GRlNFVAorLSNkZWZpbmUgRVhUMl9TVVBFUl9PRkZTRVQgMTAyNAorLSNlbmRpZgorLQorIC8qIFNpbmNlIHdlIGhhdmUgdW51c2VkIDIwNDggYnl0ZXMgaW4gdGhlIHByaW1hcnkgQUcgb2YgYW4gWEZTIHBhcnRpdGlvbiwKKyAgKiB3ZSB3aWxsIHVzZSB0aGUgZmlyc3QgMH41MTIgYnl0ZXMgc3RhcnRpbmcgZnJvbSAyMDQ4IGZvciB0aGUgU3lzbGludXgKKyAgKiBib290IHNlY3Rvci4KK0BAIC05MiwxMzYgKzg5LDYgQEAgc3RhdGljIGNoYXIgc3Vidm9sW0JUUkZTX1NVQlZPTF9NQVhdOworIAkJCSAgLSAyKkFEVl9TSVpFKQorIAorIC8qCistICogR2V0IHRoZSBzaXplIG9mIGEgYmxvY2sgZGV2aWNlCistICovCistc3RhdGljIHVpbnQ2NF90IGdldF9zaXplKGludCBkZXZmZCkKKy17CistICAgIHVpbnQ2NF90IGJ5dGVzOworLSAgICB1aW50MzJfdCBzZWN0czsKKy0gICAgc3RydWN0IHN0YXQgc3Q7CistCistI2lmZGVmIEJMS0dFVFNJWkU2NAorLSAgICBpZiAoIWlvY3RsKGRldmZkLCBCTEtHRVRTSVpFNjQsICZieXRlcykpCistCXJldHVybiBieXRlczsKKy0jZW5kaWYKKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgQkxLR0VUU0laRSwgJnNlY3RzKSkKKy0JcmV0dXJuICh1aW50NjRfdCkgc2VjdHMgPDwgOTsKKy0gICAgZWxzZSBpZiAoIWZzdGF0KGRldmZkLCAmc3QpICYmIHN0LnN0X3NpemUpCistCXJldHVybiBzdC5zdF9zaXplOworLSAgICBlbHNlCistCXJldHVybiAwOworLX0KKy0KKy0vKgorLSAqIEdldCBkZXZpY2UgZ2VvbWV0cnkgYW5kIHBhcnRpdGlvbiBvZmZzZXQKKy0gKi8KKy1zdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgeworLSAgICB1aW50NjRfdCBieXRlczsKKy0gICAgc3RydWN0IGhkX2dlb21ldHJ5IGc7CistfTsKKy0KKy1zdGF0aWMgaW50IHN5c2ZzX2dldF9vZmZzZXQoaW50IGRldmZkLCB1bnNpZ25lZCBsb25nICpzdGFydCkKKy17CistICAgIHN0cnVjdCBzdGF0IHN0OworLSAgICBjaGFyIHN5c2ZzX25hbWVbMTI4XTsKKy0gICAgRklMRSAqZjsKKy0gICAgaW50IHJ2OworLQorLSAgICBpZiAoZnN0YXQoZGV2ZmQsICZzdCkpCistCXJldHVybiAtMTsKKy0KKy0gICAgaWYgKChzaXplX3Qpc25wcmludGYoc3lzZnNfbmFtZSwgc2l6ZW9mIHN5c2ZzX25hbWUsCistCQkJICIvc3lzL2Rldi9ibG9jay8ldToldS9zdGFydCIsCistCQkJIG1ham9yKHN0LnN0X3JkZXYpLCBtaW5vcihzdC5zdF9yZGV2KSkKKy0JPj0gc2l6ZW9mIHN5c2ZzX25hbWUpCistCXJldHVybiAtMTsKKy0KKy0gICAgZiA9IGZvcGVuKHN5c2ZzX25hbWUsICJyIik7CistICAgIGlmICghZikKKy0JcmV0dXJuIC0xOworLQorLSAgICBydiA9IGZzY2FuZihmLCAiJWx1Iiwgc3RhcnQpOworLSAgICBmY2xvc2UoZik7CistCistICAgIHJldHVybiAocnYgPT0gMSkgPyAwIDogLTE7CistfQorLQorLS8qIFN0YW5kYXJkIGZsb3BweSBkaXNrIGdlb21ldHJpZXMsIHBsdXMgTFMtMTIwLiAgWmlwZGlzayBnZW9tZXRyeQorLSAgICh4LzY0LzMyKSBpcyB0aGUgZmluYWwgZmFsbGJhY2suICBJIGRvbid0IGtub3cgd2hhdCBMUy0yNDAgaGFzCistICAgYXMgaXRzIGdlb21ldHJ5LCBzaW5jZSBJIGRvbid0IGhhdmUgb25lIGFuZCBkb24ndCBrbm93IGFueW9uZSB0aGF0IGRvZXMsCistICAgYW5kIEdvb2dsZSB3YXNuJ3QgaGVscGZ1bC4uLiAqLworLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgc3RhbmRhcmRfZ2VvbWV0cmllc1tdID0geworLSAgICB7MzYwICogMTAyNCwgezIsIDksIDQwLCAwfX0sCistICAgIHs3MjAgKiAxMDI0LCB7MiwgOSwgODAsIDB9fSwKKy0gICAgezEyMDAgKiAxMDI0LCB7MiwgMTUsIDgwLCAwfX0sCistICAgIHsxNDQwICogMTAyNCwgezIsIDE4LCA4MCwgMH19LAorLSAgICB7MTY4MCAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKy0gICAgezE3MjIgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCistICAgIHsyODgwICogMTAyNCwgezIsIDM2LCA4MCwgMH19LAorLSAgICB7Mzg0MCAqIDEwMjQsIHsyLCA0OCwgODAsIDB9fSwKKy0gICAgezEyMzI2NCAqIDEwMjQsIHs4LCAzMiwgOTYzLCAwfX0sCS8qIExTMTIwICovCistICAgIHswLCB7MCwgMCwgMCwgMH19CistfTsKKy0KKy1pbnQgZ2V0X2dlb21ldHJ5KGludCBkZXZmZCwgdWludDY0X3QgdG90YWxieXRlcywgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCisteworLSAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmZF9zdHI7CistICAgIHN0cnVjdCBsb29wX2luZm8gbGk7CistICAgIHN0cnVjdCBsb29wX2luZm82NCBsaTY0OworLSAgICBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgKmdwOworLSAgICBpbnQgcnYgPSAwOworLQorLSAgICBtZW1zZXQoZ2VvLCAwLCBzaXplb2YgKmdlbyk7CistCistICAgIGlmICghaW9jdGwoZGV2ZmQsIEhESU9fR0VUR0VPLCBnZW8pKSB7CistCWdvdG8gb2s7CistICAgIH0gZWxzZSBpZiAoIWlvY3RsKGRldmZkLCBGREdFVFBSTSwgJmZkX3N0cikpIHsKKy0JZ2VvLT5oZWFkcyA9IGZkX3N0ci5oZWFkOworLQlnZW8tPnNlY3RvcnMgPSBmZF9zdHIuc2VjdDsKKy0JZ2VvLT5jeWxpbmRlcnMgPSBmZF9zdHIudHJhY2s7CistCWdlby0+c3RhcnQgPSAwOworLQlnb3RvIG9rOworLSAgICB9CistCistICAgIC8qIERpZG4ndCB3b3JrLiAgTGV0J3Mgc2VlIGlmIHRoaXMgaXMgb25lIG9mIHRoZSBzdGFuZGFyZCBnZW9tZXRyaWVzICovCistICAgIGZvciAoZ3AgPSBzdGFuZGFyZF9nZW9tZXRyaWVzOyBncC0+Ynl0ZXM7IGdwKyspIHsKKy0JaWYgKGdwLT5ieXRlcyA9PSB0b3RhbGJ5dGVzKSB7CistCSAgICBtZW1jcHkoZ2VvLCAmZ3AtPmcsIHNpemVvZiAqZ2VvKTsKKy0JICAgIGdvdG8gb2s7CistCX0KKy0gICAgfQorLQorLSAgICAvKiBEaWRuJ3Qgd29yayBlaXRoZXIuLi4gYXNzaWduIGEgZ2VvbWV0cnkgb2YgNjQgaGVhZHMsIDMyIHNlY3RvcnM7IHRoaXMgaXMKKy0gICAgICAgd2hhdCB6aXBkaXNrcyB1c2UsIHNvIHRoaXMgd291bGQgaGVscCBpZiBzb21lb25lIGhhcyBhIFVTQiBrZXkgdGhhdAorLSAgICAgICB0aGV5J3JlIGJvb3RpbmcgaW4gVVNCLVpJUCBtb2RlLiAqLworLQorLSAgICBnZW8tPmhlYWRzID0gb3B0LmhlYWRzID8gOiA2NDsKKy0gICAgZ2VvLT5zZWN0b3JzID0gb3B0LnNlY3RvcnMgPyA6IDMyOworLSAgICBnZW8tPmN5bGluZGVycyA9IHRvdGFsYnl0ZXMgLyAoZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyA8PCBTRUNUT1JfU0hJRlQpOworLSAgICBnZW8tPnN0YXJ0ID0gMDsKKy0KKy0gICAgaWYgKCFvcHQuc2VjdG9ycyAmJiAhb3B0LmhlYWRzKSB7CistCWZwcmludGYoc3RkZXJyLAorLQkJIldhcm5pbmc6IHVuYWJsZSB0byBvYnRhaW4gZGV2aWNlIGdlb21ldHJ5IChkZWZhdWx0aW5nIHRvICVkIGhlYWRzLCAlZCBzZWN0b3JzKVxuIgorLQkJIiAgICAgICAgIChvbiBoYXJkIGRpc2tzLCB0aGlzIGlzIHVzdWFsbHkgaGFybWxlc3MuKVxuIiwKKy0JCWdlby0+aGVhZHMsIGdlby0+c2VjdG9ycyk7CistCXJ2ID0gMTsJCQkvKiBTdWJvcHRpbWFsIHJlc3VsdCAqLworLSAgICB9CistCistb2s6CistICAgIC8qIElmIHRoaXMgaXMgYSBsb29wYmFjayBkZXZpY2UsIHRyeSB0byBzZXQgdGhlIHN0YXJ0ICovCistICAgIGlmICghaW9jdGwoZGV2ZmQsIExPT1BfR0VUX1NUQVRVUzY0LCAmbGk2NCkpCistCWdlby0+c3RhcnQgPSBsaTY0LmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGVsc2UgaWYgKCFpb2N0bChkZXZmZCwgTE9PUF9HRVRfU1RBVFVTLCAmbGkpKQorLQlnZW8tPnN0YXJ0ID0gKHVuc2lnbmVkIGludClsaS5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworLSAgICBlbHNlIGlmICghc3lzZnNfZ2V0X29mZnNldChkZXZmZCwgJmdlby0+c3RhcnQpKSB7CistCS8qIE9LICovCistICAgIH0KKy0KKy0gICAgcmV0dXJuIHJ2OworLX0KKy0KKy0vKgorICAqIFF1ZXJ5IHRoZSBkZXZpY2UgZ2VvbWV0cnkgYW5kIHB1dCBpdCBpbnRvIHRoZSBib290IHNlY3Rvci4KKyAgKiBNYXAgdGhlIGZpbGUgYW5kIHB1dCB0aGUgbWFwIGluIHRoZSBib290IHNlY3RvciBhbmQgZmlsZS4KKyAgKiBTdGljayB0aGUgImN1cnJlbnQgZGlyZWN0b3J5IiBpbm9kZSBudW1iZXIgaW50byB0aGUgZmlsZS4KK0BAIC0yMzEsMTEgKzk4LDggQEAgb2s6Cisgc3RhdGljIGludCBwYXRjaF9maWxlX2FuZF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkaXIsIGludCBkZXZmZCkKKyB7CisgICAgIHN0cnVjdCBzdGF0IGRpcnN0LCB4ZHN0OworLSAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvOworICAgICBzZWN0b3JfdCAqc2VjdHA7CistICAgIHVpbnQ2NF90IHRvdGFsYnl0ZXMsIHRvdGFsc2VjdG9yczsKKyAgICAgaW50IG5zZWN0OworLSAgICBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICpzYnM7CisgICAgIGNoYXIgKmRpcnBhdGgsICpzdWJwYXRoLCAqeGRpcnBhdGg7CisgICAgIGludCBydjsKKyAKK0BAIC0yNzksMzMgKzE0Myw4IEBAIHN0YXRpYyBpbnQgcGF0Y2hfZmlsZV9hbmRfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGlyLCBpbnQgZGV2ZmQpCisgICAgIC8qIE5vdyBzdWJwYXRoIHNob3VsZCBjb250YWluIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBmcyBiYXNlICovCisgICAgIGRwcmludGYoInN1YnBhdGggPSAlc1xuIiwgc3VicGF0aCk7CisgCistICAgIHRvdGFsYnl0ZXMgPSBnZXRfc2l6ZShkZXZmZCk7CistICAgIGdldF9nZW9tZXRyeShkZXZmZCwgdG90YWxieXRlcywgJmdlbyk7CistCistICAgIGlmIChvcHQuaGVhZHMpCistCWdlby5oZWFkcyA9IG9wdC5oZWFkczsKKy0gICAgaWYgKG9wdC5zZWN0b3JzKQorLQlnZW8uc2VjdG9ycyA9IG9wdC5zZWN0b3JzOworLQorLSAgICAvKiBQYXRjaCB0aGlzIGludG8gYSBmYWtlIEZBVCBzdXBlcmJsb2NrLiAgVGhpcyBpc24ndCBiZWNhdXNlCistICAgICAgIEZBVCBpcyBhIGdvb2QgZm9ybWF0IGluIGFueSB3YXksIGl0J3MgYmVjYXVzZSBpdCBsZXRzIHRoZQorLSAgICAgICBlYXJseSBib290c3RyYXAgc2hhcmUgY29kZSB3aXRoIHRoZSBGQVQgdmVyc2lvbi4gKi8KKy0gICAgZHByaW50ZigiaGVhZHMgPSAldSwgc2VjdCA9ICV1XG4iLCBnZW8uaGVhZHMsIGdlby5zZWN0b3JzKTsKKy0KKy0gICAgc2JzID0gKHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKilzeXNsaW51eF9ib290c2VjdDsKKy0KKy0gICAgdG90YWxzZWN0b3JzID0gdG90YWxieXRlcyA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGlmICh0b3RhbHNlY3RvcnMgPj0gNjU1MzYpIHsKKy0Jc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgMCk7CistICAgIH0gZWxzZSB7CistCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CistICAgIH0KKy0gICAgc2V0XzMyKCZzYnMtPmJzSHVnZVNlY3RvcnMsIHRvdGFsc2VjdG9ycyk7CistCistICAgIHNldF8xNigmc2JzLT5ic0J5dGVzUGVyU2VjLCBTRUNUT1JfU0laRSk7CistICAgIHNldF8xNigmc2JzLT5ic1NlY1BlclRyYWNrLCBnZW8uc2VjdG9ycyk7CistICAgIHNldF8xNigmc2JzLT5ic0hlYWRzLCBnZW8uaGVhZHMpOworLSAgICBzZXRfMzIoJnNicy0+YnNIaWRkZW5TZWNzLCBnZW8uc3RhcnQpOworKyAgICAvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworKyAgICBzeXNsaW51eF9wYXRjaF9ib290c2VjdChkZXZmZCk7CisgCisgICAgIC8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworIAorZGlmZiAtLWdpdCBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK2luZGV4IGJiNTRjZWYuLjVhNDQyM2IgMTAwNjQ0CistLS0gYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK0BAIC0xLDcgKzEsMTc3IEBACisgI2RlZmluZSBfR05VX1NPVVJDRQorIAorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8Z2V0b3B0Lmg+CisrI2luY2x1ZGUgPGV4dDJmcy9leHQyZnMuaD4KKysKKysjaW5jbHVkZSAibGludXhpb2N0bC5oIgorKyNpbmNsdWRlICJzeXNsaW51eC5oIgorKyNpbmNsdWRlICJzeXNseGludC5oIgorKyNpbmNsdWRlICJzeXNseG9wdC5oIgorKworKy8qCisrICogR2V0IHRoZSBzaXplIG9mIGEgYmxvY2sgZGV2aWNlCisrICovCisrc3RhdGljIHVpbnQ2NF90IGdldF9zaXplKGludCBkZXZfZmQpCisreworKyAgICB1aW50NjRfdCBieXRlczsKKysgICAgdWludDMyX3Qgc2VjdHM7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKworKyNpZmRlZiBCTEtHRVRTSVpFNjQKKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIEJMS0dFVFNJWkU2NCwgJmJ5dGVzKSkKKysJcmV0dXJuIGJ5dGVzOworKyNlbmRpZgorKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgQkxLR0VUU0laRSwgJnNlY3RzKSkKKysJcmV0dXJuICh1aW50NjRfdCkgc2VjdHMgPDwgOTsKKysgICAgZWxzZSBpZiAoIWZzdGF0KGRldl9mZCwgJnN0KSAmJiBzdC5zdF9zaXplKQorKwlyZXR1cm4gc3Quc3Rfc2l6ZTsKKysgICAgZWxzZQorKwlyZXR1cm4gMDsKKyt9CisrCisrLyoKKysgKiBHZXQgZGV2aWNlIGdlb21ldHJ5IGFuZCBwYXJ0aXRpb24gb2Zmc2V0CisrICovCisrc3RhdGljIHN0cnVjdCBnZW9tZXRyeV90YWJsZSB7CisrICAgIHVpbnQ2NF90IGJ5dGVzOworKyAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZzsKKyt9OworKworK3N0YXRpYyBpbnQgc3lzZnNfZ2V0X29mZnNldChpbnQgZGV2X2ZkLCB1bnNpZ25lZCBsb25nICpzdGFydCkKKyt7CisrICAgIHN0cnVjdCBzdGF0IHN0OworKyAgICBjaGFyIHN5c2ZzX25hbWVbMTI4XTsKKysgICAgRklMRSAqZjsKKysgICAgaW50IHJ2OworKworKyAgICBpZiAoZnN0YXQoZGV2X2ZkLCAmc3QpKQorKwlyZXR1cm4gLTE7CisrCisrICAgIGlmICgoc2l6ZV90KXNucHJpbnRmKHN5c2ZzX25hbWUsIHNpemVvZiBzeXNmc19uYW1lLAorKwkJCSAiL3N5cy9kZXYvYmxvY2svJXU6JXUvc3RhcnQiLAorKwkJCSBtYWpvcihzdC5zdF9yZGV2KSwgbWlub3Ioc3Quc3RfcmRldikpCisrCT49IHNpemVvZiBzeXNmc19uYW1lKQorKwlyZXR1cm4gLTE7CisrCisrICAgIGYgPSBmb3BlbihzeXNmc19uYW1lLCAiciIpOworKyAgICBpZiAoIWYpCisrCXJldHVybiAtMTsKKysKKysgICAgcnYgPSBmc2NhbmYoZiwgIiVsdSIsIHN0YXJ0KTsKKysgICAgZmNsb3NlKGYpOworKworKyAgICByZXR1cm4gKHJ2ID09IDEpID8gMCA6IC0xOworK30KKysKKysvKiBTdGFuZGFyZCBmbG9wcHkgZGlzayBnZW9tZXRyaWVzLCBwbHVzIExTLTEyMC4gIFppcGRpc2sgZ2VvbWV0cnkKKysgICAoeC82NC8zMikgaXMgdGhlIGZpbmFsIGZhbGxiYWNrLiAgSSBkb24ndCBrbm93IHdoYXQgTFMtMjQwIGhhcworKyAgIGFzIGl0cyBnZW9tZXRyeSwgc2luY2UgSSBkb24ndCBoYXZlIG9uZSBhbmQgZG9uJ3Qga25vdyBhbnlvbmUgdGhhdCBkb2VzLAorKyAgIGFuZCBHb29nbGUgd2Fzbid0IGhlbHBmdWwuLi4gKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGdlb21ldHJ5X3RhYmxlIHN0YW5kYXJkX2dlb21ldHJpZXNbXSA9IHsKKysgICAgezM2MCAqIDEwMjQsIHsyLCA5LCA0MCwgMH19LAorKyAgICB7NzIwICogMTAyNCwgezIsIDksIDgwLCAwfX0sCisrICAgIHsxMjAwICogMTAyNCwgezIsIDE1LCA4MCwgMH19LAorKyAgICB7MTQ0MCAqIDEwMjQsIHsyLCAxOCwgODAsIDB9fSwKKysgICAgezE2ODAgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCisrICAgIHsxNzIyICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorKyAgICB7Mjg4MCAqIDEwMjQsIHsyLCAzNiwgODAsIDB9fSwKKysgICAgezM4NDAgKiAxMDI0LCB7MiwgNDgsIDgwLCAwfX0sCisrICAgIHsxMjMyNjQgKiAxMDI0LCB7OCwgMzIsIDk2MywgMH19LAkvKiBMUzEyMCAqLworKyAgICB7MCwgezAsIDAsIDAsIDB9fQorK307CisrCisrc3RhdGljIGludCBnZXRfZ2VvbWV0cnkoaW50IGRldl9mZCwgdWludDY0X3QgdG90YWxieXRlcywgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCisreworKyAgICBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmZF9zdHI7CisrICAgIHN0cnVjdCBsb29wX2luZm8gbGk7CisrICAgIHN0cnVjdCBsb29wX2luZm82NCBsaTY0OworKyAgICBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgKmdwOworKyAgICBpbnQgcnYgPSAwOworKworKyAgICBtZW1zZXQoZ2VvLCAwLCBzaXplb2YgKmdlbyk7CisrCisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBIRElPX0dFVEdFTywgZ2VvKSkgeworKwlnb3RvIG9rOworKyAgICB9IGVsc2UgaWYgKCFpb2N0bChkZXZfZmQsIEZER0VUUFJNLCAmZmRfc3RyKSkgeworKwlnZW8tPmhlYWRzID0gZmRfc3RyLmhlYWQ7CisrCWdlby0+c2VjdG9ycyA9IGZkX3N0ci5zZWN0OworKwlnZW8tPmN5bGluZGVycyA9IGZkX3N0ci50cmFjazsKKysJZ2VvLT5zdGFydCA9IDA7CisrCWdvdG8gb2s7CisrICAgIH0KKysKKysgICAgLyogRGlkbid0IHdvcmsuICBMZXQncyBzZWUgaWYgdGhpcyBpcyBvbmUgb2YgdGhlIHN0YW5kYXJkIGdlb21ldHJpZXMgKi8KKysgICAgZm9yIChncCA9IHN0YW5kYXJkX2dlb21ldHJpZXM7IGdwLT5ieXRlczsgZ3ArKykgeworKwlpZiAoZ3AtPmJ5dGVzID09IHRvdGFsYnl0ZXMpIHsKKysJICAgIG1lbWNweShnZW8sICZncC0+Zywgc2l6ZW9mICpnZW8pOworKwkgICAgZ290byBvazsKKysJfQorKyAgICB9CisrCisrICAgIC8qIERpZG4ndCB3b3JrIGVpdGhlci4uLiBhc3NpZ24gYSBnZW9tZXRyeSBvZiA2NCBoZWFkcywgMzIgc2VjdG9yczsgdGhpcyBpcworKyAgICAgICB3aGF0IHppcGRpc2tzIHVzZSwgc28gdGhpcyB3b3VsZCBoZWxwIGlmIHNvbWVvbmUgaGFzIGEgVVNCIGtleSB0aGF0CisrICAgICAgIHRoZXkncmUgYm9vdGluZyBpbiBVU0ItWklQIG1vZGUuICovCisrCisrICAgIGdlby0+aGVhZHMgPSBvcHQuaGVhZHMgPyA6IDY0OworKyAgICBnZW8tPnNlY3RvcnMgPSBvcHQuc2VjdG9ycyA/IDogMzI7CisrICAgIGdlby0+Y3lsaW5kZXJzID0gdG90YWxieXRlcyAvIChnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CisrICAgIGdlby0+c3RhcnQgPSAwOworKworKyAgICBpZiAoIW9wdC5zZWN0b3JzICYmICFvcHQuaGVhZHMpIHsKKysJZnByaW50ZihzdGRlcnIsCisrCQkiV2FybmluZzogdW5hYmxlIHRvIG9idGFpbiBkZXZpY2UgZ2VvbWV0cnkgKGRlZmF1bHRpbmcgdG8gJWQgaGVhZHMsICVkIHNlY3RvcnMpXG4iCisrCQkiICAgICAgICAgKG9uIGhhcmQgZGlza3MsIHRoaXMgaXMgdXN1YWxseSBoYXJtbGVzcy4pXG4iLAorKwkJZ2VvLT5oZWFkcywgZ2VvLT5zZWN0b3JzKTsKKysJcnYgPSAxOwkJCS8qIFN1Ym9wdGltYWwgcmVzdWx0ICovCisrICAgIH0KKysKKytvazoKKysgICAgLyogSWYgdGhpcyBpcyBhIGxvb3BiYWNrIGRldmljZSwgdHJ5IHRvIHNldCB0aGUgc3RhcnQgKi8KKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIExPT1BfR0VUX1NUQVRVUzY0LCAmbGk2NCkpCisrCWdlby0+c3RhcnQgPSBsaTY0LmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CisrICAgIGVsc2UgaWYgKCFpb2N0bChkZXZfZmQsIExPT1BfR0VUX1NUQVRVUywgJmxpKSkKKysJZ2VvLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpbGkubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKysgICAgZWxzZSBpZiAoIXN5c2ZzX2dldF9vZmZzZXQoZGV2X2ZkLCAmZ2VvLT5zdGFydCkpIHsKKysJLyogT0sgKi8KKysgICAgfQorKworKyAgICByZXR1cm4gcnY7CisrfQorKworKworIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisgdm9pZCBzeXNsaW51eF9wYXRjaF9ib290c2VjdChpbnQgZGV2X2ZkKQorIHsKKysgICAgdWludDY0X3QgdG90YWxieXRlcywgdG90YWxzZWN0b3JzOworKyAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZ2VvOworKyAgICBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICpzYnM7CisrCisrICAgIHRvdGFsYnl0ZXMgPSBnZXRfc2l6ZShkZXZfZmQpOworKyAgICBnZXRfZ2VvbWV0cnkoZGV2X2ZkLCB0b3RhbGJ5dGVzLCAmZ2VvKTsKKysKKysgICAgaWYgKG9wdC5oZWFkcykKKysJZ2VvLmhlYWRzID0gb3B0LmhlYWRzOworKyAgICBpZiAob3B0LnNlY3RvcnMpCisrCWdlby5zZWN0b3JzID0gb3B0LnNlY3RvcnM7CisrCisrICAgIC8qIFBhdGNoIHRoaXMgaW50byBhIGZha2UgRkFUIHN1cGVyYmxvY2suICBUaGlzIGlzbid0IGJlY2F1c2UKKysgICAgICAgRkFUIGlzIGEgZ29vZCBmb3JtYXQgaW4gYW55IHdheSwgaXQncyBiZWNhdXNlIGl0IGxldHMgdGhlCisrICAgICAgIGVhcmx5IGJvb3RzdHJhcCBzaGFyZSBjb2RlIHdpdGggdGhlIEZBVCB2ZXJzaW9uLiAqLworKyAgICBzYnMgPSAoc3RydWN0IGZhdF9ib290X3NlY3RvciAqKXN5c2xpbnV4X2Jvb3RzZWN0OworKworKyAgICB0b3RhbHNlY3RvcnMgPSB0b3RhbGJ5dGVzID4+IFNFQ1RPUl9TSElGVDsKKysgICAgaWYgKHRvdGFsc2VjdG9ycyA+PSA2NTUzNikgeworKwlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCAwKTsKKysgICAgfSBlbHNlIHsKKysJc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKysgICAgfQorKyAgICBzZXRfMzIoJnNicy0+YnNIdWdlU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKysKKysgICAgc2V0XzE2KCZzYnMtPmJzQnl0ZXNQZXJTZWMsIFNFQ1RPUl9TSVpFKTsKKysgICAgc2V0XzE2KCZzYnMtPmJzU2VjUGVyVHJhY2ssIGdlby5zZWN0b3JzKTsKKysgICAgc2V0XzE2KCZzYnMtPmJzSGVhZHMsIGdlby5oZWFkcyk7CisrICAgIHNldF8zMigmc2JzLT5ic0hpZGRlblNlY3MsIGdlby5zdGFydCk7CisgfQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwOS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF9ib290YmxvY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDc2YzQ2NWU4NzMxMmRiYzZjZmZkMDU0MjdmMWY0ZDJlYmRlZTRmMTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMiBKYW4gMjAxNSAxMjoyODozNSArMDgwMAorU3ViamVjdDogW1BBVENIIDkvOV0gbGludXgvc3lzbGludXg6IGltcGxlbWVudCBpbnN0YWxsX2Jvb3RibG9jaygpCisKK1JlZmVyIHRvIHRoZSBpbnN0YWxsX2Jvb3RibG9jaygpIGluIGV4dGxpbnV4L21haW4uYyB0byBtYWtlCitsaW51eC9zeXNsaW51eC5jJ3MgaW5zdGFsbF9ib290YmxvY2soKSB3aGljaCBvbmx5IHN1cHBvcnRzIGV4dDIvMy80LgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9zeXNsaW51eC5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGludXgvc3lzbGludXguYyBiL2xpbnV4L3N5c2xpbnV4LmMKK2luZGV4IGM3NDE3NTAuLjkxN2Y4M2EgMTAwNzU1CistLS0gYS9saW51eC9zeXNsaW51eC5jCisrKysgYi9saW51eC9zeXNsaW51eC5jCitAQCAtNDE5LDYgKzQxOSwyNiBAQCBzdGF0aWMgaW50IGV4dF9maWxlX3dyaXRlKGV4dDJfZmlsZV90IGUyX2ZpbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorICAqLworIGludCBpbnN0YWxsX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKKyB7CisrICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHNiOworKworKyAgICBpZiAoeHByZWFkKGZkLCAmc2IsIHNpemVvZiBzYiwgRVhUMl9TVVBFUl9PRkZTRVQgKyBvcHQub2Zmc2V0KSAhPSBzaXplb2Ygc2IpIHsKKysgICAgICAgIHBlcnJvcigicmVhZGluZyBzdXBlcmJsb2NrIik7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAoc2Iuc19tYWdpYyAhPSBFWFQyX1NVUEVSX01BR0lDKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKysgICAgICAgICAgICAgICAgIm5vIGV4dDIvMy80IHN1cGVyYmxvY2sgZm91bmQgb24gJXNcbiIsIGRldmljZSk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICBpZiAoeHB3cml0ZShmZCwgc3lzbGludXhfYm9vdHNlY3QsIHN5c2xpbnV4X2Jvb3RzZWN0X2xlbiwgMCkKKysgICAgICAgICE9IChzaWduZWQpc3lzbGludXhfYm9vdHNlY3RfbGVuKSB7CisrICAgICAgICBwZXJyb3IoIndyaXRpbmcgYm9vdGJsb2NrIik7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKyB9CisgCisgLyogVGhlIGZpbGUncyBibG9jayBjb3VudCAqLworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJiMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitzeXNsaW51eC1uYXRpdmU6IGZpeCBwYXJhbGxlbCBidWlsZGluZyBpc3N1ZQorCitUaGVyZSBtaWdodCBiZSBhbiBlcnJvciB3aGVuIHBhcmFsbGVsIGJ1aWxkOgorCitbc25pcF0KK2NwOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvCitzeXNsaW51eC9jb20zMi9pbmNsdWRlL2dwbGluY2x1ZGUnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CittYWtlWzRdOiAqKiogW2luc3RhbGxdIEVycm9yIDEKK21ha2VbM106ICoqKiBbZ3BsbGliXSBFcnJvciAyCitbc25pcF0KKworVGhpcyBpcyBhIHBvdGVudGlhbCBpc3N1ZS4gSW4gJHtTfS9jb20zMi9ncGxsaWIvTWFrZWZpbGUgZmlsZSwKK2luc3RhbGwgdGFyZ2V0IHdhbnRzIHRvIGNvcHkgJChTUkMpLy4uL2dwbGluY2x1ZGUgdG8KKyQoSU5TVEFMTFJPT1QpJChDT00zMkRJUikvaW5jbHVkZS8gZGlyZWN0b3J5LCBidXQgaW4gJHtTfS9jb20zMi9saWIvTWFrZWZpbGUKK2ZpbGUsIHRoZSBpbnN0YWxsIHRhcmdldCB3aWxsIHJlbW92ZSAkKElOU1RBTExST09UKSQoQ09NMzJESVIpL2luY2x1ZGUKK2RpcmVjdG9yeS4gV2UgbmVlZCB0byBkbyBjb20zMi9saWIgZmlyc3QuCisKK1RoZSBwYXRjaCBtYWtlIGNvbTMyL2dwbGxpYiBkZXBlbmRzIG9uIGNvbTMyL2xpYiB0byBmaXggdGhpcyBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29tMzIvTWFrZWZpbGUgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IHN5c2xpbnV4LTYuMDMvY29tMzIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNsaW51eC02LjAzLm9yaWcvY29tMzIvTWFrZWZpbGUKKysrKyBzeXNsaW51eC02LjAzL2NvbTMyL01ha2VmaWxlCitAQCAtMjEsMyArMjEsNCBAQCByb3NoOiBsaWIgbGlidXRpbAorIHNhbXBsZXM6IGxpYnV0aWwgZWxmbGluay9sZGxpbnV4Cisgc3lzZHVtcDogbGliIGxpYnV0aWwgbGlidXBsb2FkIGdwbGxpYgorIGx1YS9zcmM6IGNtZW51IG1vZHVsZXMKKytncGxsaWI6IGxpYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzE0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA0OTBmYzNiYmQ2NWMyYzI1MmMxZmRmM2RhMGZhYzk4OThhYTllZWE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE1IEF1ZyAyMDE0IDIxOjA5OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbTMyL01ha2VmaWxlOiBmaXggcGFyYWxsZWwgaXNzdWUKKworRml4ZWQ6CitjcCAtciBzeXNsaW51eC02LjAxL2NvbTMyL2xpYnVwbG9hZC8qLmggaW1hZ2UvdXNyL3NoYXJlL3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvCitbc25pcF0KK3JtIC1yZiBpbWFnZS91c3Ivc2hhcmUvc3lzbGludXgvY29tMzIvaW5jbHVkZQorW3NuaXBdCitjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGltYWdlL3Vzci9zaGFyZS9zeXNsaW51eC9jb20zMi9pbmNsdWRlL3NlcmlhbC5oJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitUaGUgY3AgaXMgaGFwcGVuZWQgaW4gdGhlICJsaWJ1cGxvYWQiIGRpciwgd2hpbGUgInJtIC1mciIgaXMgaGFwcGVuZCBpbgorImxpYiIgZGlyLCBsZXQgImxpYnVwbG9hZCIgZGVwZW5kICJsaWIiIHdpbGwgZml4IHRoZSBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb20zMi9NYWtlZmlsZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvY29tMzIvTWFrZWZpbGUgYi9jb20zMi9NYWtlZmlsZQoraW5kZXggOWExNzIxYi4uZjE3MmRiMiAxMDA2NDQKKy0tLSBhL2NvbTMyL01ha2VmaWxlCisrKysgYi9jb20zMi9NYWtlZmlsZQorQEAgLTIxLDMgKzIxLDQgQEAgcm9zaDogbGliIGxpYnV0aWwKKyBzYW1wbGVzOiBsaWJ1dGlsIGVsZmxpbmsvbGRsaW51eAorIHN5c2R1bXA6IGxpYnVwbG9hZCBncGxsaWIKKyBncGxsaWI6IGxpYgorK2xpYnVwbG9hZDogbGliCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzAwM2UxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4L3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhpcyBzY3JpcHQgdHJ5IHRvIGNhbGwgZ2l0IHN1Ym1vZHVsZSwgc2luY2Ugd2UgYXJlIGRvd25sb2FkaW5nCit0aGUgdGFyYmFsbCBpdCBzZWVtcyBpbi1jb3JyZWN0IHRvIGRvIHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogc3lzbGludXgtNi4wMy9lZmkvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNsaW51eC02LjAzLm9yaWcvZWZpL01ha2VmaWxlCisrKysgc3lzbGludXgtNi4wMy9lZmkvTWFrZWZpbGUKK0BAIC0xMDEsNyArMTAxLDYgQEAgdGlkeSBkaXN0OgorIAlybSAtZiAqLnNvICoubyB3cmFwcGVyCisgCWZpbmQgLiBcKCAtbmFtZSBcKi5vIC1vIC1uYW1lIFwqLmEgLW8gLW5hbWUgLlwqLmQgLW8gLW5hbWUgXCoudG1wIFwpIC1wcmludDAgfCBcCisgCQl4YXJncyAtMHIgcm0gLWYKKy0JJCh0b3BkaXIpL2VmaS9jbGVhbi1nbnUtZWZpLnNoICQoRUZJX1NVQkFSQ0gpICQob2JqZGlyKQorIAorIGNsZWFuOiB0aWR5CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOWFlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXhfNi4wMy5iYgpAQCAtMCwwICsxLDg5IEBACitTVU1NQVJZID0gIk11bHRpLXB1cnBvc2UgbGludXggYm9vdGxvYWRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9zeXNsaW51eC56eXRvci5jb20vIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTM1O2VuZGxpbmU9NDE7bWQ1PTU1OGYyYzcxY2IxZmI5YmE1MTFjY2Q0ODU4ZTQ4ZThhIgorCisjIElmIHlvdSByZWFsbHkgd2FudCB0byBydW4gc3lzbGludXgsIHlvdSBuZWVkIG10b29scy4gIFdlIGp1c3Qgd2FudCB0aGUKKyMgbGRsaW51eC4qIHN0dWZmIGZvciBub3csIHNvIHNraXAgbXRvb2xzLW5hdGl2ZQorREVQRU5EUyA9ICJuYXNtLW5hdGl2ZSB1dGlsLWxpbnV4IGUyZnNwcm9ncyIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2Jvb3Qvc3lzbGludXgvc3lzbGludXgtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LWZpeC1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfdG9fZXh0Mi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWxpbnV4LXN5c2xpbnV4LWFkZC1leHRfZmlsZV9yZWFkLWFuZC1leHRfZmlsZV93cml0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjkyYTI1M2RmOTIxMWU5YzIwMTcyNzk2ZWNmMzg4ZjEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ZDM5ODZkMmJlYTEwOWQ1ZGMwZTRmOGM0ODIyYTQ1OTI3NmNmMDIxMTI1ZThjOWYyM2MzY2NhNWQ4Yzg1MGUiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisjIERvbid0IGxldCB0aGUgc2FuaXR5IGNoZWNrZXIgdHJpcCBvbiB0aGUgMzIgYml0IHJlYWwgbW9kZSBCSU9TIGJpbmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS1taXNjID0gImFyY2giCitJTlNBTkVfU0tJUF8ke1BOfS1jaGFpbiA9ICJhcmNoIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKwlCSU5ESVI9JHtiaW5kaXJ9IFNCSU5ESVI9JHtzYmluZGlyfSBMSUJESVI9JHtsaWJkaXJ9IFwKKwlEQVRBRElSPSR7ZGF0YWRpcn0gTUFORElSPSR7bWFuZGlyfSBJTkNESVI9JHtpbmNsdWRlZGlyfSBcCisiCisjIHN5c2xpbnV4IHVzZXMgJExEIGZvciBsaW5raW5nLCBzdHJpcCBgLVdsLCcgc28gaXQgY2FuIHdvcmsKK2V4cG9ydCBMREZMQUdTID0gImBlY2hvICRMREZMQUdTIHwgc2VkICdzLy1XbCwvL2cnYCIKKworZG9fY29uZmlndXJlKCkgeworCSMgZHJvcCB3aW4zMiB0YXJnZXRzIG9yIGJ1aWxkIGZhaWxzCisJc2VkIC1lICdzLHdpbjMyL1xTKiwsZycgLWkgTWFrZWZpbGUKKworCSMgY2xlYW4gaW5zdGFsbGVyIGV4ZWN1dGFibGVzIGluY2x1ZGVkIGluIHNvdXJjZSB0YXJiYWxsCisJb2VfcnVubWFrZSBjbGVhbiBmaXJtd2FyZT0iZWZpMzIiIEVGSUlOQz0iJHtpbmNsdWRlZGlyfSIKKwkjIE5PVEU6IFRoZXJlIGlzIGEgdGVtcG9yYXJ5IHdvcmsgYXJvdW5kIGFib3ZlIHRvIHNwZWNpZnkKKwkjCXRoZSBlZmkzMiBhcyB0aGUgZmlybXdhcmUgZWxzZSB0aGUgcHJlLWJ1aWx0IGJpb3MKKwkjCWZpbGVzIGdldCBlcmFzZWQgY29udHJhcnkgdG8gdGhlIGRvYy9kaXN0aWIudHh0CisJIwlJbiB0aGUgZnV0dXJlIHRoaXMgc2hvdWxkIGJlICJiaW9zIiBhbmQgbm90ICJlZmkzMiIuCit9CisKK2RvX2NvbXBpbGUoKSB7CisJIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSy4KKwkjIFRob3VnaCB0aGUgJHtCfSBzaG91bGQgYWx3YXlzIGV4aXN0LCBzdGlsbCBjaGVjayBpdCBiZWZvcmUgZmluZCBhbmQgcm0uCisJWyAtZCAiJHtCfSIgXSAmJiBmaW5kICR7Qn0gLW5hbWUgJy4qLmQnIC10eXBlIGYgLWV4ZWMgcm0gLWYge30gXDsKKworCSMgUmVidWlsZCBvbmx5IHRoZSBpbnN0YWxsZXI7IGtlZXAgcHJlY29tcGlsZWQgYm9vdGxvYWRlcnMKKwkjIGFzIHBlciBhdXRob3IncyByZXF1ZXN0IChkb2MvZGlzdHJpYi50eHQpCisJb2VfcnVubWFrZSBDQz0iJHtDQ30gJHtDRkxBR1N9IiBMREZMQUdTPSIke0xERkxBR1N9IiBmaXJtd2FyZT0iYmlvcyIgaW5zdGFsbGVyCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDQz0iJHtDQ30gJHtDRkxBR1N9IiBpbnN0YWxsIElOU1RBTExST09UPSIke0R9IiBmaXJtd2FyZT0iYmlvcyIKKworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9iaW9zL2NvcmUvbGRsaW51eC5zeXMgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9iaW9zL2NvcmUvbGRsaW51eC5ic3MgJHtEfSR7ZGF0YWRpcn0vc3lzbGludXgvCisJaW5zdGFsbCAtbSA3NTUgJHtTfS9iaW9zL2xpbnV4L3N5c2xpbnV4LW5vbXRvb2xzICR7RH0ke2JpbmRpcn0vCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1ub210b29scyAke1BOfS1leHRsaW51eCAke1BOfS1tYnIgJHtQTn0tY2hhaW4gJHtQTn0tcHhlbGludXggJHtQTn0taXNvbGludXggJHtQTn0tbWlzYyIKKworUkRFUEVORFNfJHtQTn0gKz0gIm10b29scyIKK1JERVBFTkRTXyR7UE59LW5vbXRvb2xzICs9ICJsaWJleHQyZnMiCitSREVQRU5EU18ke1BOfS1taXNjICs9ICJwZXJsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vc3lzbGludXgiCitGSUxFU18ke1BOfS1ub210b29scyA9ICIke2JpbmRpcn0vc3lzbGludXgtbm9tdG9vbHMiCitGSUxFU18ke1BOfS1leHRsaW51eCA9ICIke3NiaW5kaXJ9L2V4dGxpbnV4IgorRklMRVNfJHtQTn0tbWJyID0gIiR7ZGF0YWRpcn0vJHtCUE59L21ici5iaW4iCitGSUxFU18ke1BOfS1jaGFpbiA9ICIke2RhdGFkaXJ9LyR7QlBOfS9jaGFpbi5jMzIiCitGSUxFU18ke1BOfS1pc29saW51eCA9ICIke2RhdGFkaXJ9LyR7QlBOfS9pc29saW51eC5iaW4iCitGSUxFU18ke1BOfS1weGVsaW51eCA9ICIke2RhdGFkaXJ9LyR7QlBOfS9weGVsaW51eC4wIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2luY2x1ZGUgJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvY29tMzIubGQiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2xpYiouYSAke2xpYmRpcn0vJHtCUE59L2NvbTMyL2xpYiouYSIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtkYXRhZGlyfS8ke0JQTn0vKiAke2xpYmRpcn0vJHtCUE59LyogJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzA0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC9maXhfcmFubGliLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbcG9reS1zcGVjaWZpYyBmaXhdCisKKy0tLSBhL01ha2VmaWxlLmluYworKysrIGIvTWFrZWZpbGUuaW5jCitAQCAtNTcsNiArNTcsOSBAQAorICAgaWZlcSAoJChOT19VVUlEKSwpCisgICAgIExJQlMgKz0gLWx1dWlkCisgICBlbmRpZgorKyAgaWZuZXEgKCQoUkFOTElCKSwpCisrICAgIFJBTkxJQiArPSAkQAorKyAgZW5kaWYKKyBlbmRpZgorIAorIGlmbmVxICgkKE9QU1lTKSxXaW5kb3dzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzAzMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LmluaXQKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB0Y2YtYWdlbnQKKyMgRGVmYXVsdC1TdGFydDogICAgIDMgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDIgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIGFnZW50CisjIyMgRU5EIElOSVQgSU5GTworCitEQUVNT05fUEFUSD0vdXNyL3NiaW4vdGNmLWFnZW50CitEQUVNT05fTkFNRT1gYmFzZW5hbWUgJERBRU1PTl9QQVRIYAorCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14ICREQUVNT05fUEFUSCB8fCBleGl0IDAKKworUEFUSD0vc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbgorZXhwb3J0IFBBVEgKKworUkVUVkFMPTAKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gIlN0YXJ0aW5nICREQUVNT05fTkFNRTogIgorICAgICAgICAkREFFTU9OX1BBVEggLWQgLUwtIC1sMAorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJPSyIKKyAgICAgICAgICAgIHRvdWNoIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIkZBSUwiCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJTdG9wcGluZyAkREFFTU9OX05BTUU6ICIKKyAgICAgICAgY291bnQ9MAorICAgICAgICB3aGlsZSBbIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiAtYSAkY291bnQgLWx0IDEwIF0gOyBkbworICAgICAgICAgICAga2lsbHByb2MgJERBRU1PTl9QQVRIID4mIC9kZXYvbnVsbAorICAgICAgICAgICAgc2xlZXAgMQorICAgICAgICAgICAgUkVUVkFMPSQ/CisgICAgICAgICAgICBpZiBbICRSRVRWQUwgIT0gMCAtbyAtbiAiYC9iaW4vcGlkb2YgJERBRU1PTl9QQVRIYCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBzbGVlcCAzCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKyAgICAgICAgZG9uZQorICAgICAgICBybSAtZiAvdmFyL2xvY2svc3Vic3lzLyREQUVNT05fTkFNRQorICAgICAgICBpZiBbIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiRkFJTCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiT0siCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICByZXN0YXJ0KQorICAgICAgICAkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgICAgICAgOzsKKworICAgIHN0YXR1cykKKyAgICAgICAgc3RhdHVzICREQUVNT05fTkFNRQorICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgOzsKKworICAgIGNvbmRyZXN0YXJ0KQorICAgICAgICBbIC1mIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FIF0gJiYgJDAgcmVzdGFydAorICAgICAgICA7OworCisgICAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgc3RhdHVzIHwgcmVzdGFydCB8IGNvbmRyZXN0YXJ0IHwgc3RhdHVzIH0iCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgJFJFVFZBTAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWE2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBhZ2VudAorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvdGNmLWFnZW50IC1kIC1MLSAtbDAKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZmQzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgZm9yIHRoZSBFY2xpcHNlIElERSIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1RDRiIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvIgorCitMSUNFTlNFID0gIkVQTC0xLjAgfCBFREwtMS4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZWRsLXYxMC5odG1sO21kNT01MjJhMzkwYTgzZGMxODY1MTNmMDUwMDU0M2FkMzY3OSIKKworU1JDUkVWID0gImI5YTczNWU5YzdjZjgyZjgwZDQxMmI3YWIxNWQwOGI4OWQ1YTRjY2MiCitQViA9ICIxLjMuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWNsaXBzZS5vcmcvZ2l0cm9vdC90Y2Yvb3JnLmVjbGlwc2UudGNmLmFnZW50LmdpdDticmFuY2g9MS4zX21hcnNfYnVnZml4IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9yYW5saWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNmLWFnZW50LmluaXQgXAorICAgICAgICAgICBmaWxlOi8vdGNmLWFnZW50LnNlcnZpY2UgXAorICAgICAgICAgICIKKworREVQRU5EUyA9ICJ1dGlsLWxpbnV4IG9wZW5zc2wiCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L2FnZW50IgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInRjZi1hZ2VudC5zZXJ2aWNlIgorCitJTklUU0NSSVBUX05BTUUgPSAidGNmLWFnZW50IgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgMyA1IC4gc3RvcCAyMCAwIDEgMiA2IC4iCisKKyMgbWFuZ2xpbmcgbmVlZGVkIGZvciBtYWtlCitNQUtFX0FSQ0ggPSAiYGVjaG8gJHtUQVJHRVRfQVJDSH0gfCBzZWQgcyxpLjg2LGk2ODYsYCIKK01BS0VfT1MgPSAiYGVjaG8gJHtUQVJHRVRfT1N9IHwgc2VkIHMsXmxpbnV4LiosR05VL0xpbnV4LGAiCisKK0VYVFJBX09FTUFLRSA9ICJNQUNISU5FPSR7TUFLRV9BUkNIfSBPUFNZUz0ke01BS0VfT1N9ICdDQz0ke0NDfScgJ0FSPSR7QVJ9JyIKKworIyBUaGV5IGRvbid0IGJ1aWxkIG9uIEFSTSBhbmQgd2UgZG9uJ3QgbmVlZCB0aGVtIGFjdHVhbGx5LgorQ0ZMQUdTICs9ICItRFNFUlZJQ0VfUnVuQ29udHJvbD0wIC1EU0VSVklDRV9CcmVha3BvaW50cz0wIFwKKyAgICAtRFNFUlZJQ0VfTWVtb3J5PTAgLURTRVJWSUNFX1JlZ2lzdGVycz0wIC1EU0VSVklDRV9NZW1vcnlNYXA9MCBcCisgICAgLURTRVJWSUNFX1N0YWNrVHJhY2U9MCAtRFNFUlZJQ0VfU3ltYm9scz0wIC1EU0VSVklDRV9MaW5lTnVtYmVycz0wIFwKKyAgICAtRFNFUlZJQ0VfRXhwcmVzc2lvbnM9MCIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTFJPT1Q9JHtEfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3RjZi1hZ2VudC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC90Y2YtYWdlbnQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGNmLWFnZW50LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vdGNmLWFnZW50LnNlcnZpY2UKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9hbHRlci1pbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTMwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorTGV0cyBpbnN0YWxsIHRoZSBpbmNsdWRlIGhlYWRlciBhbmQgcHJpdmF0ZSBoZWFkZXIgZmlsZXMgaW50byAKK3Vzci9pbmNsdWRlL3RjbDguNiB3aGVuIHZlcnNpb24gb2YgdGNsIGlzIDguNi54CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ29uZmlndXJhdGlvbiBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWkuY29tPgorCitGaXhlZCB0aGUgVENMX0lOQ0xVREVfU1BFQworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluICB8ICAgIDIgKy0KKyBjb25maWd1cmUgICAgfCAgICA0ICsrLS0KKyBjb25maWd1cmUuaW4gfCAgICA0ICsrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDk3Yjk4M2IuLmRjMmE0ZGYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC01Myw3ICs1Myw3IEBAIERMTF9JTlNUQUxMX0RJUgkJPSBARExMX0lOU1RBTExfRElSQAorIFNDUklQVF9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoVENMX0xJQlJBUlkpCisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgaW5jbHVkZSBmaWxlIHRjbC5oOgorLUlOQ0xVREVfSU5TVEFMTF9ESVIJPSAkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpCisrSU5DTFVERV9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvdGNsJChWRVJTSU9OKQorIAorICMgUGF0aCB0byB0aGUgcHJpdmF0ZSB0Y2wgaGVhZGVyIGRpcjoKKyBQUklWQVRFX0lOQ0xVREVfRElSCT0gQFBSSVZBVEVfSU5DTFVERV9ESVJACitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAzZTc4YjQ5Li4yNGIzZjkyIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xOTEzNCw3ICsxOTEzNCw3IEBAIGV2YWwgIlRDTF9MSUJfRklMRT1saWJ0Y2wke0xJQl9TVUZGSVh9IgorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCisgVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworLVBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisrUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKS90Y2wkKFZFUlNJT04pJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCisgIyBOb3RlOiAgaW4gdGhlIGZvbGxvd2luZyB2YXJpYWJsZSwgaXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSBhYnNvbHV0ZQorQEAgLTE5MjkzLDcgKzE5MjkzLDcgQEAgVENMX0JVSUxEX1NUVUJfTElCX1BBVEg9ImBwd2RgLyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9TVFVCX0xJQl9ESVJ9LyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIAorICMgSW5zdGFsbCB0aW1lIGhlYWRlciBkaXIgY2FuIGJlIHNldCB2aWEgLS1pbmNsdWRlZGlyCistZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfVwiIgorK2V2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn0vdGNsJHtWRVJTSU9OfVwiIgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHRjbENvbmZpZy5zaCByZWZlcnMgdG8gdGhpcyBieSBhIGRpZmZlcmVudCBuYW1lCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCAwZTI4YjE0Li42MmQ5YjQxIDEwMDc1NQorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC03OTEsNyArNzkxLDcgQEAgZXZhbCAiVENMX0xJQl9GSUxFPWxpYnRjbCR7TElCX1NVRkZJWH0iCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKyBUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCistUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKytQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpL3RjbCQoVkVSU0lPTiknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKKyAjIE5vdGU6ICBpbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlLCBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGFic29sdXRlCitAQCAtOTEyLDcgKzkxMiw3IEBAIFRDTF9CVUlMRF9TVFVCX0xJQl9QQVRIPSJgcHdkYC8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyBUQ0xfU1RVQl9MSUJfUEFUSD0iJHtUQ0xfU1RVQl9MSUJfRElSfS8ke1RDTF9TVFVCX0xJQl9GSUxFfSIKKyAKKyAjIEluc3RhbGwgdGltZSBoZWFkZXIgZGlyIGNhbiBiZSBzZXQgdmlhIC0taW5jbHVkZWRpcgorLWV2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn1cIiIKKytldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9L3RjbCR7VkVSU0lPTn1cIiIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyB0Y2xDb25maWcuc2ggcmVmZXJzIHRvIHRoaXMgYnkgYSBkaWZmZXJlbnQgbmFtZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeC1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5MmEwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHVuaXgvdGNsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNsOC40LjExL3VuaXgub3JpZy90Y2wubTQKKysrKyB0Y2w4LjQuMTEvdW5peC90Y2wubTQKK0BAIC04NDUsNyArODQ1LDcgQEAgQUNfREVGVU4oU0NfQ09ORklHX0NGTEFHUywgWworIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitAQCAtMjI1MCw3ICsyMjUwLDcgQEAgQUNfREVGVU4oU0NfQkxPQ0tJTkdfU1RZTEUsIFsKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGNsOC40LjExL3VuaXgub3JpZy9jb25maWd1cmUKKysrKyB0Y2w4LjQuMTEvdW5peC9jb25maWd1cmUKK0BAIC0yMTMwLDcgKzIxMzAsNyBAQCBlY2hvICJjb25maWd1cmU6MjEyMTogY2hlY2tpbmcgc3lzdGVtIHZlCisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50IH0nIC9ldGMvLnJlbGlkYAorIAkgICAgZmkKKyAJICAgIGlmIHRlc3QgImB1bmFtZSAtc2AiID0gIkFJWCIgOyB0aGVuCisgCQlzeXN0ZW09QUlYLWB1bmFtZSAtdmAuYHVuYW1lIC1yYAorQEAgLTc2MDgsNyArNzYwOCw3IEBAIGVjaG8gImNvbmZpZ3VyZTo3NjAwOiBjaGVja2luZyBGSU9OQklPIHYKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNzM0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXhlcyB0Y2wgdGFyZ2V0IHJlY2lwZSBidWlsZCBvbiBvbGQgZGlzdHJvcyB3aGljaCBoYXZlIGdsaWJjIG9sZGVyIHRoYW4gMi4xNAorCit8ICsgZWNobyAnTk9URTogbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbCcKK3wgTk9URTogbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbAorfCArIG1ha2UgIERFU1RESVI9L3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlIGluc3RhbGwKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL2xpYgorfCBJbnN0YWxsaW5nIG1lc3NhZ2UgY2F0YWxvZ3MKK3wgTWFraW5nIGRpcmVjdG9yeSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UvdXNyL3NoYXJlL21hbgorfCB0Y2xzaDogL2xpYjY0L2xpYmMuc28uNjogdmVyc2lvbiBgR0xJQkNfMi4xNCcgbm90IGZvdW5kIChyZXF1aXJlZCBieSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvdGNsOC41LjExL3VuaXgvbGlidGNsOC41LnNvKQorfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3IvYmluCit8IG1ha2U6ICoqKiBbaW5zdGFsbC1tc2dzXSBFcnJvciAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA0LzI2CisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MDEuNzg3NDI1NjI4IC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjU5LjgwNzQyNTU3OCAtMDgwMAorQEAgLTY4Niw3ICs2ODYsNyBAQAorICMgdGNsdGVzdCBleGVjdXRhYmxlIGdldHMgdGhlIGJ1aWxkIGRpcmVjdG9yeSBidXJuZWQgaW50byBpdHMgbGQgc2VhcmNoIHBhdGguCisgIyBUaGlzIGtlZXBzIHRjbHRlc3QgZnJvbSBwaWNraW5nIHVwIGFuIGFscmVhZHkgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIFRjbAorICMgbGlicmFyeS4KKy1TSEVMTF9FTlYgPQlATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IFwKKytTSEVMTF9FTlYgPQlATERfTElCUkFSWV9QQVRIX1ZBUkA9JHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IFwKKyAJCVRDTExJQlBBVEg9IkBhYnNfYnVpbGRkaXJAL3BrZ3MiIFwKKyAJCVRDTF9MSUJSQVJZPSIke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iCisgCitAQCAtNzEyLDcgKzcxMiw3IEBACisgCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisgCisgZ2RiLXRlc3Q6ICR7VENMVEVTVF9FWEV9CistCUBlY2hvICJzZXQgZW52IEBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDokJHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IiA+IGdkYi5ydW4KKysJQGVjaG8gInNldCBlbnYgQExEX0xJQlJBUllfUEFUSF9WQVJAPSQke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0iID4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGVudiBUQ0xfTElCUkFSWT0ke1RDTF9CVUlMRFRJTUVfTElCUkFSWX0iID4+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBhcmdzICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykgLXNpbmdsZXByb2MgMSIgPj4gZ2RiLnJ1bgorIAkkKEdEQikgJHtUQ0xURVNUX0VYRX0gLS1jb21tYW5kPWdkYi5ydW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjM0LjI0MzQyNDkzNCAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozNzozNC4yNDM0MjQ5MzQgLTA4MDAKK0BAIC03MDksMjMgKzcwOSwyMyBAQAorIHRlc3Q6IHRlc3QtdGNsIHRlc3QtcGFja2FnZXMKKyAKKyB0ZXN0LXRjbDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorKwkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorIAorIGdkYi10ZXN0OiAke1RDTFRFU1RfRVhFfQorIAlAZWNobyAic2V0IGVudiBATERfTElCUkFSWV9QQVRIX1ZBUkA9YHB3ZGA6JCR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSIgPiBnZGIucnVuCisgCUBlY2hvICJzZXQgZW52IFRDTF9MSUJSQVJZPSR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIgPj4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGFyZ3MgJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKSAtc2luZ2xlcHJvYyAxIiA+PiBnZGIucnVuCistCSQoR0RCKSAuLyR7VENMVEVTVF9FWEV9IC0tY29tbWFuZD1nZGIucnVuCisrCSQoR0RCKSAke1RDTFRFU1RfRVhFfSAtLWNvbW1hbmQ9Z2RiLnJ1bgorIAlybSBnZGIucnVuCisgCisgIyBVc2VmdWwgdGFyZ2V0IHRvIGxhdW5jaCBhIGJ1aWx0IHRjbHRlc3Qgd2l0aCB0aGUgcHJvcGVyIHBhdGgsLi4uCisgcnVudGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0KKysJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9CisgCisgIyBVc2VmdWwgdGFyZ2V0IGZvciBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlIHdpdGggYW4gdW53cml0YWJsZSBjdXJyZW50CisgIyBkaXJlY3RvcnkuLi4KKyByby10ZXN0OiAke1RDTFRFU1RfRVhFfQorLQllY2hvICdleGVjIGNobW9kIC13IC47cGFja2FnZSByZXF1aXJlIHRjbHRlc3Q7dGNsdGVzdDo6dGVtcG9yYXJ5RGlyZWN0b3J5IC90bXA7c291cmNlIC4uL3Rlc3RzL2FsbC50Y2w7ZXhlYyBjaG1vZCArdyAuJyB8ICQoU0hFTExfRU5WKSAuLyR7VENMVEVTVF9FWEV9CisrCWVjaG8gJ2V4ZWMgY2htb2QgLXcgLjtwYWNrYWdlIHJlcXVpcmUgdGNsdGVzdDt0Y2x0ZXN0Ojp0ZW1wb3JhcnlEaXJlY3RvcnkgL3RtcDtzb3VyY2UgLi4vdGVzdHMvYWxsLnRjbDtleGVjIGNobW9kICt3IC4nIHwgJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9CisgCisgIyBUaGUgZm9sbG93aW5nIHRhcmdldCBnZW5lcmF0ZXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW4gZGx0ZXN0LyB0aGF0IGFyZSB1c2VkCisgIyBmb3IgdGVzdGluZzsgdGhleSBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgInRjbHRlc3QiIHRhcmdldCAodmlhIHRoZQorQEAgLTc0MywyMyArNzQzLDIzIEBACisgIyBUaGlzIHRhcmdldCBjYW4gYmUgdXNlZCB0byBydW4gdGNsc2ggZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgIyB2aWEgYG1ha2Ugc2hlbGwgU0NSSVBUPS90bXAvZm9vLnRjbGAKKyBzaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTF9FWEV9ICQoU0NSSVBUKQorKwkkKFNIRUxMX0VOVikgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyAjIFRoaXMgdGFyZ2V0IGNhbiBiZSB1c2VkIHRvIHJ1biB0Y2xzaCBpbnNpZGUgZWl0aGVyIGdkYiBvciBpbnNpZ2h0CisgZ2RiOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAkKEdEQikgLi8ke1RDTF9FWEV9CisrCSQoU0hFTExfRU5WKSAkKEdEQikgJHtUQ0xfRVhFfQorIAorIHZhbGdyaW5kOiAke1RDTF9FWEV9ICR7VENMVEVTVF9FWEV9CistCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAtY29uc3RyYWludHMgdmFsZ3JpbmQgJChURVNURkxBR1MpCisrCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgLWNvbnN0cmFpbnRzIHZhbGdyaW5kICQoVEVTVEZMQUdTKQorIAorIHZhbGdyaW5kc2hlbGw6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAkKFZBTEdSSU5EKSAkKFZBTEdSSU5EQVJHUykgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyB0cmFjZS1zaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpICR7VENMX0VYRX0gJChTQ1JJUFQpCisgCisgdHJhY2UtdGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAkKFRFU1RGTEFHUykKKysJJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsIC1zaW5nbGVwcm9jIDEgJChURVNURkxBR1MpCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBJbnN0YWxsYXRpb24gcnVsZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmNjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL25vX3BhY2thZ2VzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK3RjbCA4LjYuMCBidWlsZHMgYnkgZGVmYXVsdCBhIG51bWJlciBvZiBwYWNrYWdlcyB0aGF0IGFyZSBub3QgbmVlZGVkIGluIFlvY3RvLgorVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBtYWtlZmlsZSBzbyB0aGF0IHRoZXNlIHBhY2thZ2VzIGFyZSBub3QgYnVpbHQgYnkgZGVmYXVsdC4KKworVXBzdHJlYW0tU3RhdHVzOkluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBCb2dkYW4gTWFyaW5lc2N1IDxib2dkYW4uYS5tYXJpbmVzY3VAaW50ZWwuY29tPgorCitJbmRleDogdW5peC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjEyLjIzNTQyNTg5MSAtMDgwMAorKysrIHVuaXgvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODoxMi4yMzE0MjU4OTEgLTA4MDAKK0BAIC02MTEsNyArNjExLDcgQEAKKyAjIFN0YXJ0IG9mIHJ1bGVzCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCistYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jIHBhY2thZ2VzCisrYWxsOiBiaW5hcmllcyBsaWJyYXJpZXMgZG9jCisgCisgYmluYXJpZXM6ICR7TElCX0ZJTEV9ICQoU1RVQl9MSUJfRklMRSkgJHtUQ0xfRVhFfQorIAorQEAgLTY1MywxMiArNjUzLDEyIEBACisgI3RjbENvbmZpZy5oOiAkKFVOSVhfRElSKS90Y2xDb25maWcuaC5pbgorICMJJChTSEVMTCkgY29uZmlnLnN0YXR1cworIAorLWNsZWFuOiBjbGVhbi1wYWNrYWdlcworK2NsZWFuOgorIAlybSAtZiAqLmEgKi5vIGxpYnRjbCogY29yZSBlcnJzICp+IFwjKiBUQUdTICouRSBhLm91dCBcCisgCQllcnJvcnMgJHtUQ0xfRVhFfSAke1RDTFRFU1RfRVhFfSBsaWIuZXhwIFRjbCBARFRSQUNFX0hEUkAKKyAJY2QgZGx0ZXN0IDsgJChNQUtFKSBjbGVhbgorIAorLWRpc3RjbGVhbjogZGlzdGNsZWFuLXBhY2thZ2VzIGNsZWFuCisrZGlzdGNsZWFuOiBjbGVhbgorIAlybSAtcmYgTWFrZWZpbGUgY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyB0Y2xDb25maWcuc2ggXAorIAkJdGNsQ29uZmlnLmggKi5wbGlzdCBUY2wuZnJhbWV3b3JrIHRjbC5wYworIAljZCBkbHRlc3QgOyAkKE1BS0UpIGRpc3RjbGVhbgorQEAgLTcwNiw3ICs3MDYsNyBAQAorICMgdGNsdGVzdCwgaWU6CisgIwklIG1ha2UgdGVzdCBURVNURkxBR1M9Ii12ZXJib3NlIGJwcyAtZmlsZSBmaWxlTmFtZS50ZXN0IgorIAorLXRlc3Q6IHRlc3QtdGNsIHRlc3QtcGFja2FnZXMKKyt0ZXN0OiB0ZXN0LXRjbAorIAorIHRlc3QtdGNsOiAke1RDTFRFU1RfRVhFfQorIAkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0gJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKQorQEAgLTc3MSw3ICs3NzEsNyBAQAorIElOU1RBTExfREVWX1RBUkdFVFMgPSBpbnN0YWxsLWhlYWRlcnMKKyBJTlNUQUxMX0VYVFJBX1RBUkdFVFMgPSBARVhUUkFfSU5TVEFMTEAKKyBJTlNUQUxMX1RBUkdFVFMgPSAkKElOU1RBTExfQkFTRV9UQVJHRVRTKSAkKElOU1RBTExfRE9DX1RBUkdFVFMpICQoSU5TVEFMTF9ERVZfVEFSR0VUUykgXAorLQkJICAkKElOU1RBTExfUEFDS0FHRV9UQVJHRVRTKSAkKElOU1RBTExfRVhUUkFfVEFSR0VUUykKKysJCSAgJChJTlNUQUxMX0VYVFJBX1RBUkdFVFMpCisgCisgaW5zdGFsbDogJChJTlNUQUxMX1RBUkdFVFMpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZGJhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3J1bi1wdGVzdApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorCitmb3IgaSBpbiBgbHMgdGVzdHMvKi50ZXN0IHxhd2sgLUYvICd7cHJpbnQgJDJ9J2A7IFwKKyAgICBkbyBUQ0xfTElCUkFSWT1saWJyYXJ5IC4vdGNsdGVzdCB0ZXN0cy9hbGwudGNsIC1maWxlICRpID4kaS50bXAgMj4mMTsgXAorICAgIGdyZXAgLXEgIl5GaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IiAkaS50bXA7IFwKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4gZWNobyAiRkFJTDogJGkiOyBcCisgICAgZWxzZSBlY2hvICJQQVNTOiAkaSI7IHJtIC1mICRpLnRtcDsgZmk7IFwKK2RvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Mjc2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1hZGQtc29uYW1lLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlCTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC9jb25maWd1cmUJMjAxMy0xMS0xMSAwMDoyMDo1MS41MTk0OTAzNDIgLTA4MDAKK0BAIC03NTk5LDYgKzc1OTksOSBAQAorIAkgICAgIyBnZXQgcmlkIG9mIHRoZSB3YXJuaW5ncy4KKyAJICAgICNDRkxBR1NfT1BUSU1JWkU9IiR7Q0ZMQUdTX09QVElNSVpFfSAtRF9fTk9fU1RSSU5HX0lOTElORVMgLURfX05PX01BVEhfSU5MSU5FUyIKKyAKKysJICAgICMgZm9sbG93aW5nIGxpbmUgYWRkZWQgYnkgQ1cgZm9yIERlYmlhbiBHTlUvTGludXgKKysJICAgIFRDTF9TSExJQl9MRF9FWFRSQVM9Ii1XbCwtc29uYW1lLFwke1RDTF9MSUJfRklMRX0uMCIKKysKKyAJICAgIFNITElCX0xEPScke0NDfSAtc2hhcmVkICR7Q0ZMQUdTfSAke0xERkxBR1N9JworIAkgICAgRExfT0JKUz0idGNsTG9hZERsLm8iCisgCSAgICBETF9MSUJTPSItbGRsIgorSW5kZXg6IHVuaXgvdGNsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL3RjbC5tNAkyMDEzLTA5LTE5IDEzOjE3OjEzLjAwMDAwMDAwMCAtMDcwMAorKysrIHVuaXgvdGNsLm00CTIwMTMtMTEtMTEgMDA6MTc6MjQuMjYzNDg1MTIzIC0wODAwCitAQCAtMTQxNSw2ICsxNDE1LDkgQEAKKyAJICAgICMgZ2V0IHJpZCBvZiB0aGUgd2FybmluZ3MuCisgCSAgICAjQ0ZMQUdTX09QVElNSVpFPSIke0NGTEFHU19PUFRJTUlaRX0gLURfX05PX1NUUklOR19JTkxJTkVTIC1EX19OT19NQVRIX0lOTElORVMiCisgCisrCSAgICAjIGZvbGxvd2luZyBsaW5lIGFkZGVkIGJ5IENXIGZvciBEZWJpYW4gR05VL0xpbnV4CisrCSAgICBUQ0xfU0hMSUJfTERfRVhUUkFTPSItV2wsLXNvbmFtZSxcJHtUQ0xfTElCX0ZJTEV9LjAiCisrCisgCSAgICBTSExJQl9MRD0nJHtDQ30gLXNoYXJlZCAke0NGTEFHU30gJHtMREZMQUdTfScKKyAJICAgIERMX09CSlM9InRjbExvYWREbC5vIgorIAkgICAgRExfTElCUz0iLWxkbCIKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTExIDAwOjIwOjMyLjQyMzQ4OTg2MSAtMDgwMAorQEAgLTc5Niw3ICs3OTYsMTAgQEAKKyAJICAgIGRvbmU7CisgCUBlY2hvICJJbnN0YWxsaW5nICQoTElCX0ZJTEUpIHRvICQoRExMX0lOU1RBTExfRElSKS8iCisgCUBASU5TVEFMTF9MSUJACistCUBjaG1vZCA1NTUgIiQoRExMX0lOU1RBTExfRElSKS8kKExJQl9GSUxFKSIKKysJbXYgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMAorKwlsbiAtc2YgJChMSUJfRklMRSkuMCAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKQorKwlsbiAtc2YgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMCAuLworKwlAY2htb2QgNTU1ICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpLjAKKyAJQGVjaG8gIkluc3RhbGxpbmcgJHtUQ0xfRVhFfSBhcyAkKEJJTl9JTlNUQUxMX0RJUikvdGNsc2gkKFZFUlNJT04pJHtFWEVfU1VGRklYfSIKKyAJQCQoSU5TVEFMTF9QUk9HUkFNKSAke1RDTF9FWEV9ICIkKEJJTl9JTlNUQUxMX0RJUikvdGNsc2gkKFZFUlNJT04pJHtFWEVfU1VGRklYfSIKKyAJQGVjaG8gIkluc3RhbGxpbmcgdGNsQ29uZmlnLnNoIHRvICQoQ09ORklHX0lOU1RBTExfRElSKS8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjdjODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL3RjbC1yZW1vdmUtaGFyZGNvZGVkLWluc3RhbGwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDZlZmM5ODc3NDY4MTc5NTcxMjA3M2MyYjkxZTVlOWQxNzYzMjM5YjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiU29uZy5MaSIgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMSBBdWcgMjAxMiAxOTowNTo1MSArMDgwMAorU3ViamVjdDogW1BBVENIXSB0Y2w6aW5zdGFsbCB0Y2wgdG8gbGliNjQgaW5zdGVhZCBvZiBsaWIgb24gNjRiaXQgdGFyZ2V0CisKK1JlbW92ZSBoYXJkY29kZWQgbGlicmFyeSBpbnN0YWxsIHBhdGguIENoYW5nZSAkKHByZWZpeCkvbGliLyB0byAke2xpYmRpcn0uCisKK1tZT0NUTyAjMjg3Nl0KKworVGhpcyBpcyBub3QgYSBidWcsIGJ1dCBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZCBpbnRvIGRpcmVjdG9yeSAuLi4vbGliLy4KK09uIDY0Yml0IHRhcmdldCB0aGF0IHNob3VsZCBiZSBsaWI2NC8uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIGNvbmZpZ3VyZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHVuaXgvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZQkyMDEzLTExLTEwIDIzOjM4OjMzLjY0MzQyNjQzMCAtMDgwMAorKysrIHVuaXgvY29uZmlndXJlCTIwMTMtMTEtMTAgMjM6Mzk6NTEuMzQ3NDI4Mzg3IC0wODAwCitAQCAtMTkxMzQsNyArMTkxMzQsNyBAQAorIAorIGV2YWwgIlRDTF9MSUJfRklMRT0ke1RDTF9MSUJfRklMRX0iCisgCistVENMX0xJQlJBUlk9JyQocHJlZml4KS9saWIvdGNsJChWRVJTSU9OKScKKytUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCisgUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIAorSW5kZXg6IHVuaXgvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEzLTExLTEwIDIzOjIwOjUwLjAwMDAwMDAwMCAtMDgwMAorKysrIHVuaXgvY29uZmlndXJlLmluCTIwMTMtMTEtMTAgMjM6Mzk6NDEuMTk5NDI4MTMxIC0wODAwCitAQCAtNzkwLDcgKzc5MCw3IEBACisgCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKy1UQ0xfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90Y2wkKFZFUlNJT04pJworK1RDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKyBQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTkyYjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbF84LjYuNC5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUb29sIENvbW1hbmQgTGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vdGNsLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiZGV2ZWwvdGNsdGsiCisKKyMgaHR0cDovL3d3dy50Y2wudGsvc29mdHdhcmUvdGNsdGsvbGljZW5zZS5odG1sCitMSUNFTlNFID0gInRjbCAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vY29tcGF0L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbGlicmFyeS9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL21hY29zeC9saWNlbnNlLnRlcm1zO21kNT0wNThmNjIyOTc5ODI4MWJiY2FjNDIzOWM3ODhjZmEzOCBcCisgICAgZmlsZTovLy4uL3Rlc3RzL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vd2luL2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyIKKworREVQRU5EUyA9ICJ0Y2wtbmF0aXZlIHpsaWIiCisKK0JBU0VfU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vdGNsLyR7QlBOfSR7UFZ9LXNyYy50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly90Y2wtYWRkLXNvbmFtZS5wYXRjaCIKK1NSQ19VUkkgPSAiJHtCQVNFX1NSQ19VUkl9IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9ub25fbmF0aXZlX2J1aWxkX2lzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9pc3N1ZV93aXRoX29sZF9kaXN0cm9fZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9fcGFja2FnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkN2NiYjkxZjFkZWQxOTE5MzcwYTMwZWRkMTUzNDMwNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZTZlZDk0Yzk4MWMxZDBjNWY1ZmVmYjgxMTJkMDZjNmJmNGQwNTBhNzMyN2U5NWU3MWQ0MTdjNDE2NTE5YzhkIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke0JBU0VfU1JDX1VSSX0iCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0ke1BWfS91bml4IgorCitWRVIgPSAiJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0IGJpbmNvbmZpZworCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRocmVhZHMgLS1kaXNhYmxlLXJwYXRoIC0tbGliZGlyPSR7bGliZGlyfSIKKworZG9fY29uZmlndXJlKCkgeworCWNkICR7U30KKwlnbnUtY29uZmlnaXplCisJY2QgJHtCfQorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWVjaG8gPiAke1N9Ly4uL2NvbXBhdC9maXhzdHJ0b2QuYworfQorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsIGluc3RhbGwtcHJpdmF0ZS1oZWFkZXJzCisJbG4gLXNmIC4vdGNsc2gke1ZFUn0gJHtEfSR7YmluZGlyfS90Y2xzaAorCWxuIC1zZiB0Y2xzaDguNiAke0R9JHtiaW5kaXJ9L3RjbHNoJHtWRVJ9CisJc2VkIC1pICJzKy1MJHtCfSstTCR7U1RBR0lOR19MSUJESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicyske1dPUktESVJ9KyR7U1RBR0lOR19JTkNESVJ9K2ciIHRjbENvbmZpZy5zaAorCXNlZCAtaSAicywtTCR7bGliZGlyfSwtTD0ke2xpYmRpcn0sZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzLC1JJHtpbmNsdWRlZGlyfSwtST0ke2luY2x1ZGVkaXJ9LGciIHRjbENvbmZpZy5zaAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJaW5zdGFsbCAtbSAwNzU1IHRjbENvbmZpZy5zaCAke0R9JHtsaWJkaXJ9CisJY2QgLi4KKwlmb3IgZGlyIGluIGNvbXBhdCBnZW5lcmljIHVuaXg7IGRvCisJCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7U30vLi4vJGRpci8qLmggJHtEfSR7aW5jbHVkZWRpcn0vJHtCUE59JHtWRVJ9LyRkaXIvCisJZG9uZQorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInRjbF9zeXNyb290X3ByZXByb2Nlc3MiCit0Y2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CisKK1BBQ0tBR0VTID0rICJ0Y2wtbGliIgorRklMRVNfdGNsLWxpYiA9ICIke2xpYmRpcn0vbGlidGNsOC42LnNvLioiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3RjbCR7VkVSfSAke2xpYmRpcn0vdGNsOC42ICR7bGliZGlyfS90Y2w4IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vdGNsQ29uZmlnLnNoICR7bGliZGlyfS90Y2xvb0NvbmZpZy5zaCIKKworIyBpc24ndCBnZXR0aW5nIHBpY2tlZCB1cCBieSBzaGxpYnMgY29kZQorUkRFUEVORFNfJHtQTn0gKz0gInRjbC1saWIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImxpYmdjYyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSB0Y2x0ZXN0Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJY3AgJHtCfS90Y2x0ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi9saWJyYXJ5ICR7RH0ke1BURVNUX1BBVEh9CisJY3AgLXIgJHtTfS8uLi90ZXN0cyAke0R9JHtQVEVTVF9QQVRIfQorfQorCisjIEZpeCBzb21lIHBhdGhzIHRoYXQgbWlnaHQgYmUgdXNlZCBieSBUY2wgZXh0ZW5zaW9ucworQklOQ09ORklHX0dMT0IgPSAiKkNvbmZpZy5zaCIKKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKkNvbmZpZy5zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3NDVkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9hbHRlcm5hdGVfcnBjX3BvcnRzLnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitBZGQgYWJpbGl0eSB0byBzcGVjaWZ5IHJjcCBwb3J0IG51bWJlcnMKKworSW4gb3JkZXIgdG8gcnVuIG1vcmUgdGhhbiBvbmUgdW5mcyBzZXJ2ZXIgb24gYSBob3N0IHN5c3RlbSwgeW91IG11c3QKK2JlIGFibGUgdG8gc3BlY2lmeSBhbHRlcm5hdGUgcnBjIHBvcnQgbnVtYmVycy4KKworSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgIDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCisgbW91bnQuYyAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC03OCw2ICs3OCw4IEBAIGludCBvcHRfdGVzdGNvbmZpZyA9IEZBTFNFOworIHN0cnVjdCBpbl9hZGRyIG9wdF9iaW5kX2FkZHI7CisgaW50IG9wdF9yZWFkYWJsZV9leGVjdXRhYmxlcyA9IEZBTFNFOworIGNoYXIgKm9wdF9waWRfZmlsZSA9IE5VTEw7CisraW50IG5mc19wcm9nID0gTkZTM19QUk9HUkFNOworK2ludCBtb3VudF9wcm9nID0gTU9VTlRQUk9HOworIAorIC8qIFJlZ2lzdGVyIHdpdGggcG9ydG1hcHBlcj8gKi8KKyBpbnQgb3B0X3BvcnRtYXBwZXIgPSBUUlVFOworQEAgLTIwNiw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgeworIAorICAgICBpbnQgb3B0ID0gMDsKKy0gICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6IjsKKysgICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6eDp5OiI7CisgCisgICAgIHdoaWxlIChvcHQgIT0gLTEpIHsKKyAJb3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIG9wdHN0cmluZyk7CitAQCAtMjYxLDggKzI2MywyNCBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgCQlwcmludGYKKyAJCSAgICAoIlx0LXIgICAgICAgICAgcmVwb3J0IHVucmVhZGFibGUgZXhlY3V0YWJsZXMgYXMgcmVhZGFibGVcbiIpOworIAkJcHJpbnRmKCJcdC1UICAgICAgICAgIHRlc3QgZXhwb3J0cyBmaWxlIGFuZCBleGl0XG4iKTsKKysJCXByaW50ZigiXHQteCA8cG9ydD4gICBhbHRlcm5hdGUgTkZTIFJQQyBwb3J0XG4iKTsKKysJCXByaW50ZigiXHQteSA8cG9ydD4gICBhbHRlcm5hdGUgTU9VTlREIFJQQyBwb3J0XG4iKTsKKyAJCWV4aXQoMCk7CisgCQlicmVhazsKKysJICAgIGNhc2UgJ3gnOgorKwkJbmZzX3Byb2cgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisrCQlpZiAobmZzX3Byb2cgPT0gMCkgeworKwkJICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBORlMgUlBDIHBvcnRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrCQlicmVhazsKKysJICAgIGNhc2UgJ3knOgorKwkJbW91bnRfcHJvZyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKysJCWlmIChtb3VudF9wcm9nID09IDApIHsKKysJCSAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgTU9VTlREIFJQQyBwb3J0XG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQorKwkJYnJlYWs7CisgCSAgICBjYXNlICdsJzoKKyAJCW9wdF9iaW5kX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKG9wdGFyZyk7CisgCQlpZiAob3B0X2JpbmRfYWRkci5zX2FkZHIgPT0gKHVuc2lnbmVkKSAtMSkgeworQEAgLTM0NywxMiArMzY1LDEyIEBAIHZvaWQgZGFlbW9uX2V4aXQoaW50IGVycm9yKQorICNlbmRpZgkJCQkgICAgICAgLyogV0lOMzIgKi8KKyAKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXN2Y191bnJlZ2lzdGVyKE1PVU5UUFJPRywgTU9VTlRWRVJTMSk7CistCXN2Y191bnJlZ2lzdGVyKE1PVU5UUFJPRywgTU9VTlRWRVJTMyk7CisrCXN2Y191bnJlZ2lzdGVyKG1vdW50X3Byb2csIE1PVU5UVkVSUzEpOworKwlzdmNfdW5yZWdpc3Rlcihtb3VudF9wcm9nLCBNT1VOVFZFUlMzKTsKKyAgICAgfQorIAorICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0Jc3ZjX3VucmVnaXN0ZXIoTkZTM19QUk9HUkFNLCBORlNfVjMpOworKwlzdmNfdW5yZWdpc3RlcihuZnNfcHJvZywgTkZTX1YzKTsKKyAgICAgfQorIAorICAgICBpZiAoZXJyb3IgPT0gU0lHU0VHVikKK0BAIC02NTcsMTMgKzY3NSwxMyBAQCBzdGF0aWMgdm9pZCBtb3VudHByb2dfMyhzdHJ1Y3Qgc3ZjX3JlcSAqCisgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVCAqIHVkcHRyYW5zcCwgU1ZDWFBSVCAqIHRjcHRyYW5zcCkKKyB7CisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlwbWFwX3Vuc2V0KE5GUzNfUFJPR1JBTSwgTkZTX1YzKTsKKysJcG1hcF91bnNldChuZnNfcHJvZywgTkZTX1YzKTsKKyAgICAgfQorIAorICAgICBpZiAodWRwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTkZTIHNlcnZpY2UgZm9yIFVEUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHVkcHRyYW5zcCwgTkZTM19QUk9HUkFNLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorKwkgICAgKHVkcHRyYW5zcCwgbmZzX3Byb2csIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE5GUzNfUFJPR1JBTSwgTkZTX1YzLCB1ZHApLiIpOworQEAgLTY3NCw3ICs2OTIsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUCisgICAgIGlmICh0Y3B0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBORlMgc2VydmljZSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBORlMzX1BST0dSQU0sIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisrCSAgICAodGNwdHJhbnNwLCBuZnNfcHJvZywgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTkZTM19QUk9HUkFNLCBORlNfVjMsIHRjcCkuIik7CitAQCAtNjg2LDE0ICs3MDQsMTQgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbmZzX3NlcnZpY2UoU1ZDWFBSVAorIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFBSVCAqIHVkcHRyYW5zcCwgU1ZDWFBSVCAqIHRjcHRyYW5zcCkKKyB7CisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlwbWFwX3Vuc2V0KE1PVU5UUFJPRywgTU9VTlRWRVJTMSk7CistCXBtYXBfdW5zZXQoTU9VTlRQUk9HLCBNT1VOVFZFUlMzKTsKKysJcG1hcF91bnNldChtb3VudF9wcm9nLCBNT1VOVFZFUlMxKTsKKysJcG1hcF91bnNldChtb3VudF9wcm9nLCBNT1VOVFZFUlMzKTsKKyAgICAgfQorIAorICAgICBpZiAodWRwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjEpIGZvciBVRFAgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh1ZHB0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisrCSAgICAodWRwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCB1ZHApLiIpOworQEAgLTcwMiw3ICs3MjAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgCisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYzKSBmb3IgVURQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodWRwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorKwkgICAgKHVkcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1VEUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMywgdWRwKS4iKTsKK0BAIC03MTMsNyArNzMxLDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUAorICAgICBpZiAodGNwdHJhbnNwICE9IE5VTEwpIHsKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjEpIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMSwgbW91bnRwcm9nXzMsCisrCSAgICAodGNwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCB0Y3ApLiIpOworQEAgLTcyMiw3ICs3NDAsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgCisgCS8qIFJlZ2lzdGVyIE1PVU5UIHNlcnZpY2UgKHYzKSBmb3IgVENQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodGNwdHJhbnNwLCBNT1VOVFBST0csIE1PVU5UVkVSUzMsIG1vdW50cHJvZ18zLAorKwkgICAgKHRjcHRyYW5zcCwgbW91bnRfcHJvZywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisgCSAgICAgb3B0X3BvcnRtYXBwZXIgPyBJUFBST1RPX1RDUCA6IDApKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLAorIAkJICAgICJ1bmFibGUgdG8gcmVnaXN0ZXIgKE1PVU5UUFJPRywgTU9VTlRWRVJTMywgdGNwKS4iKTsKKy0tLSBhL21vdW50LmMKKysrKyBiL21vdW50LmMKK0BAIC0xNTUsOCArMTU1LDggQEAgbW91bnRyZXMzICptb3VudHByb2NfbW50XzNfc3ZjKGRpcnBhdGggKgorICAgICAvKiBlcnJvciBvdXQgaWYgbm90IHZlcnNpb24gMyAqLworICAgICBpZiAocnFzdHAtPnJxX3ZlcnMgIT0gMykgeworIAlsb2dtc2coTE9HX0lORk8sCistCSAgICAgICAiJXMgYXR0ZW1wdGVkIG1vdW50IHdpdGggdW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiIsCistCSAgICAgICBpbmV0X250b2EoZ2V0X3JlbW90ZShycXN0cCkpKTsKKysJICAgICAgICIlcyBhdHRlbXB0ZWQgbW91bnQgd2l0aCB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uOiAlaSIsCisrCSAgICAgICBpbmV0X250b2EoZ2V0X3JlbW90ZShycXN0cCkpLCBycXN0cC0+cnFfdmVycyk7CisgCXJlc3VsdC5maHNfc3RhdHVzID0gTU5UM0VSUl9JTlZBTDsKKyAJcmV0dXJuICZyZXN1bHQ7CisgICAgIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkYTAxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfY29tcGlsZV93YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2RhZW1vbi5jOiBDaGVjayBleGl0IGNvZGUgb2YgY2hkaXIoKQorCitTdG9wIHRoZSBjb21waWxlIHdhcm5pbmcgYW5kIGZpeCB0aGUgY29kZSB0byBhY3Qgb24gYSBjaGRpcigpIGZhaWx1cmUuCitJZiB0aGlzIG9uZSBkb2VzIGZhaWwgc29tZXRoaW5nIGlzIHZlcnksIHZlcnkgd3JvbmcuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICAgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTk2NCw3ICs5NjQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCXNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0LCBOVUxMKTsKKyAKKyAJLyogZG9uJ3QgbWFrZSBkaXJlY3Rvcnkgd2Ugc3RhcnRlZCBpbiBidXN5ICovCistCWNoZGlyKCIvIik7CisrCWlmKGNoZGlyKCIvIikgPCAwKQorKwkgICAgZGFlbW9uX2V4aXQoMCk7CisgCisgCS8qIGRldGFjaCBmcm9tIHRlcm1pbmFsICovCisgCWlmIChvcHRfZGV0YWNoKSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmIxODdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9waWRfcmFjZV9wYXJlbnRfd3JpdGVzX2NoaWxkX3BpZC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitkYWVtb24uYzogRml4IHJhY2Ugd2luZG93IGZvciB3cml0aW5nIG9mIHRoZSBwaWQgZmlsZQorCitUaGUgcGFyZW50IHByb2Nlc3Mgc2hvdWxkIHdyaXRlIHRoZSBwaWQgZmlsZSBzdWNoIHRoYXQgdGhlIHBpZCBmaWxlCit3aWxsIGNhbiBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBleGl0IG9mIHRoZSBmb3JrIGZyb20gdGhlCitwYXJlbnQuCisKK1RoaXMgYWxsb3dzIGV4dGVybmFsIG1vbml0b3JpbmcgYXBwbGljYXRpb25zIHRvIHdhdGNoIHRoZSBkYWVtb24KK3dpdGhvdXQgaGF2aW5nIHRvIGFkZCBzbGVlcCBjYWxscyB0byB3YWl0IGZvciB0aGUgcGlkIGZpbGUgYmUgd3JpdHRlbgorb24gYSBidXN5IHN5c3RlbS4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgIDEyICsrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTE1Myw3ICsxNTMsNyBAQCBpbnQgZ2V0X3NvY2tldF90eXBlKHN0cnVjdCBzdmNfcmVxICpycXN0CisgLyoKKyAgKiB3cml0ZSBjdXJyZW50IHBpZCB0byBhIGZpbGUKKyAgKi8KKy1zdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUodm9pZCkKKytzdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUoaW50IHBpZCkKKyB7CisgICAgIGNoYXIgYnVmWzE2XTsKKyAgICAgaW50IGZkLCByZXMsIGxlbjsKK0BAIC0xNzUsNyArMTc1LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX3BpZF9maWxlKHZvaWQpCisgICAgIH0KKyAjZW5kaWYKKyAKKy0gICAgc3ByaW50ZihidWYsICIlaVxuIiwgYmFja2VuZF9nZXRwaWQoKSk7CisrICAgIHNwcmludGYoYnVmLCAiJWlcbiIsIHBpZCk7CisgICAgIGxlbiA9IHN0cmxlbihidWYpOworIAorICAgICByZXMgPSBiYWNrZW5kX3B3cml0ZShmZCwgYnVmLCBsZW4sIDApOworQEAgLTk3MCw2ICs5NzAsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgZm9yayBpbnRvIGJhY2tncm91bmRcbiIpOworIAkgICAgZGFlbW9uX2V4aXQoMCk7CisgCX0KKysJaWYgKHBpZCkKKysJICAgIGNyZWF0ZV9waWRfZmlsZShwaWQpOworKyAgICB9IGVsc2UgeworKwljcmVhdGVfcGlkX2ZpbGUoYmFja2VuZF9nZXRwaWQoKSk7CisgICAgIH0KKyAjZW5kaWYJCQkJICAgICAgIC8qIFdJTjMyICovCisgCitAQCAtMTAwNiw4ICsxMDEwLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJLyogbm8gdW1hc2sgdG8gbm90IHNjcmV3IHVwIGNyZWF0ZSBtb2RlcyAqLworIAl1bWFzaygwKTsKKyAKKysjaWZkZWYgV0lOMzIKKyAJLyogY3JlYXRlIHBpZCBmaWxlIGlmIHdhbnRlZCAqLworLQljcmVhdGVfcGlkX2ZpbGUoKTsKKysJY3JlYXRlX3BpZF9maWxlKGJhY2tlbmRfZ2V0cGlkKCkpOworKyNlbmRpZgorIAorIAkvKiBpbml0aWFsaXplIGludGVybmFsIHN0dWZmICovCisgCWZoX2NhY2hlX2luaXQoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTg2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3dhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2V4cG9ydHMuKjogZml4IHdhcm5pbmdzLgorCitGaXggdGhlc2Ugd2FybmluZ3M6CitsZXgueXkuYzoxMjA3OiB3YXJuaW5nOiAneXl1bnB1dCcgZGVmaW5lZCBidXQgbm90IHVzZWQKK2xleC55eS5jOjEyNDg6IHdhcm5pbmc6ICdpbnB1dCcgZGVmaW5lZCBidXQgbm90IHVzZWQKK2V4cG9ydHMueTogSW4gZnVuY3Rpb24gJ3NldF9ob3N0bmFtZSc6CitleHBvcnRzLnk6MzM0OiB3YXJuaW5nOiBsYXJnZSBpbnRlZ2VyIGltcGxpY2l0bHkgdHJ1bmNhdGVkIHRvIHVuc2lnbmVkIHR5cGUKK2V4cG9ydHMueTogSW4gZnVuY3Rpb24gJ3NldF9pcGFkZHInOgorZXhwb3J0cy55OjM1MDogd2FybmluZzogbGFyZ2UgaW50ZWdlciBpbXBsaWNpdGx5IHRydW5jYXRlZCB0byB1bnNpZ25lZCB0eXBlCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIENvbmZpZy9leHBvcnRzLmwgfCAgICAzICsrKworIENvbmZpZy9leHBvcnRzLnkgfCAgICA2ICsrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9Db25maWcvZXhwb3J0cy5sCisrKysgYi9Db25maWcvZXhwb3J0cy5sCitAQCAtNDgsNiArNDgsOSBAQCBORVRDT01QIFswLTldezEsMn0KKyBORVQge0lQfSIvIntORVRDT01QfQorIE9MRE5FVCB7SVB9Ii8ie0lQfQorIAorKyVvcHRpb24gbm91bnB1dAorKyVvcHRpb24gbm9pbnB1dAorKworICUlCisgCisgXntXSElURX0qXG4JCXsgLyogZWF0IGVtcHR5IGxpbmUgKi8gfQorLS0tIGEvQ29uZmlnL2V4cG9ydHMueQorKysrIGIvQ29uZmlnL2V4cG9ydHMueQorQEAgLTMzMSw3ICszMzEsOCBAQCBzdGF0aWMgdm9pZCBzZXRfaG9zdG5hbWUoY29uc3QgY2hhciAqbmFtCisgCWlmIChlbnQpIHsKKyAJCW1lbWNweSgmY3VyX2hvc3QuYWRkciwgZW50LT5oX2FkZHJfbGlzdFswXSwKKyAJCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKy0JCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfjBVTDsKKysJCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gMDsKKysJCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfmN1cl9ob3N0Lm1hc2suc19hZGRyOworIAl9IGVsc2UgeworIAkJbG9nbXNnKExPR19DUklULCAiY291bGQgbm90IHJlc29sdmUgaG9zdG5hbWUgJyVzJyIsIG5hbWUpOworIAkJZV9lcnJvciA9IFRSVUU7CitAQCAtMzQ3LDcgKzM0OCw4IEBAIHN0YXRpYyB2b2lkIHNldF9pcGFkZHIoY29uc3QgY2hhciAqYWRkcikKKyAJCisgCWlmICghaW5ldF9hdG9uKGFkZHIsICZjdXJfaG9zdC5hZGRyKSkKKyAJCWVfZXJyb3IgPSBUUlVFOworLQljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH4wVUw7CisrCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gMDsKKysJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+Y3VyX2hvc3QubWFzay5zX2FkZHI7CisgfQorIAorIC8qCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaApAQCAtMCwwICsxLDc0IEBACituZnMuYzogQWxsb3cgbWF4IHNhLnN1bl9wYXRoIGZvciBhIGxvY2FsZG9tYWluIHNvY2tldCB3aXRoIHRoZSB1c2VyIG5mcy1zZXJ2ZXIKKworVGhlcmUgaXMgYSBoYXJkIGxpbWl0IGZvciB0aGUga2VybmVsIG9mIDEwOCBjaGFyYWN0ZXJzIGZvciBhCitsb2NhbGRvbWFpbiBzb2NrZXQgbmFtZS4gIFRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhlIHVzZXIgbmZzCitzZXJ2ZXIgaXQgc2hvdWxkIG1heGltaXplIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBieSB1c2luZworYSByZWxhdGl2ZSBwYXRoIG9uIHRoZSBzZXJ2ZXIgc2lkZS4KKworUHJldmlvdXNseSB0aGUgbmZzLXNlcnZlciB1c2VkIHRoZSBhYnNvbHV0ZSBwYXRoIG5hbWUgcGFzc2VkIHRvCit0aGUgc2Euc3VucGF0aCBhcmcgZm9yIGJpbmRpbmcgdGhlIHNvY2tldCBhbmQgdGhpcyBoYXMgY2F1c2VkCitwcm9ibGVtcyBmb3IgYm90aCB0aGUgWCBzZXJ2ZXIgYW5kIFVTVCBiaW5hcmllcyB3aGljaCBtYWtlCitoZWF2eSB1c2Ugb2YgbmFtZWQgc29ja2V0cyB3aXRoIGxvbmcgbmFtZXMuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIG5mcy5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9uZnMuYworKysrIGIvbmZzLmMKK0BAIC02NzIsNiArNjcyLDcgQEAgU1lNTElOSzNyZXMgKm5mc3Byb2MzX3N5bWxpbmtfM19zdmMoU1lNTAorIH0KKyAKKyAjaWZuZGVmIFdJTjMyCisrc3RhdGljIGNoYXIgcGF0aGJ1Zl90bXBbTkZTX01BWFBBVEhMRU4gKyBORlNfTUFYTkFNTEVOICsgMV07CisgCisgLyoKKyAgKiBjcmVhdGUgVW5peCBzb2NrZXQKK0BAIC02ODAsMTcgKzY4MSw0MSBAQCBzdGF0aWMgaW50IG1rc29ja2V0KGNvbnN0IGNoYXIgKnBhdGgsIG1vCisgeworICAgICBpbnQgcmVzLCBzb2NrOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKysgICAgdW5zaWduZWQgaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKyAKKyAgICAgc29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CistICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CistICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwYXRoKTsKKyAgICAgcmVzID0gc29jazsKKyAgICAgaWYgKHJlcyAhPSAtMSkgeworKwlhZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworKwlpZiAobGVuIDwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpIC0xKSB7CisrCSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcGF0aCk7CisrCX0gZWxzZSB7CisrCSAgICBjaGFyICpwdHI7CisrCSAgICByZXMgPSAtMTsKKysJICAgIGlmIChsZW4gPj0gc2l6ZW9mKHBhdGgpKQorKwkJZ290byBvdXQ7CisrCSAgICBzdHJjcHkocGF0aGJ1Zl90bXAsIHBhdGgpOworKwkgICAgcHRyID0gc3RycmNocihwYXRoYnVmX3RtcCwnLycpOworKwkgICAgaWYgKHB0cikgeworKwkJKnB0ciA9ICdcMCc7CisrCQlwdHIrKzsKKysJCWlmIChjaGRpcihwYXRoYnVmX3RtcCkpCisrCQkgICAgZ290byBvdXQ7CisrCSAgICB9IGVsc2UgeworKwkJcHRyID0gcGF0aGJ1Zl90bXA7CisrCSAgICB9CisrCSAgICBpZiAoc3RybGVuKHB0cikgPj0gc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKQorKwkJZ290byBvdXQ7CisrCSAgICBzdHJjcHkoYWRkci5zdW5fcGF0aCwgcHRyKTsKKysJfQorIAl1bWFzayh+bW9kZSk7CisgCXJlcyA9CisgCSAgICBiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsCisgCQkgc2l6ZW9mKGFkZHIuc3VuX2ZhbWlseSkgKyBzdHJsZW4oYWRkci5zdW5fcGF0aCkpOworIAl1bWFzaygwKTsKKytvdXQ6CisrCWlmIChjaGRpcigiLyIpKQorKwkgICAgZnByaW50ZihzdGRlcnIsICJJbnRlcm5hbCBmYWlsdXJlIHRvIGNoZGlyIC9cbiIpOworIAljbG9zZShzb2NrKTsKKyAgICAgfQorICAgICByZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkODk1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZW5hbWVfZmhfY2FjaGUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjMgRmViIDIwMTMgMDg6NDk6MDggLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmhfY2FjaGU6IGZpeCBzdGF0bGUgbmZzIGhhbmRsZSBvbiByZW5hbWUgcHJvYmxlbQorCitUaGUgZm9sbG93aW5nIHRlc3QgY2FzZSBmYWlscyB3aXRoIG1vZGVybiBsaW51bngga2VybmVscyB3aGljaCBjYWNoZQordGhlIHJlbmFtZWQgaW5vZGUuCisKKyAgJSBta2RpciBhO21rZGlyIGI7bXYgYiBhLztscyAtbCBhCisgIGxzOiBhL2I6IFN0YWxlIE5GUyBmaWxlIGhhbmRsZQorCitUaGUgaXNzdWUgaXMgdGhhdCBuZnNlcnZlciB3YXMgbm90IHVwZGF0aW5nIHRoZSBmaF9jYWNoZSB3aXRoIHRoZSBuZXcKK2xvY2F0aW9uIG9mIHRoZSBpbm9kZSwgd2hlbiBpdCBtb3ZlcyBkaXJlY3Rvcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZmhfY2FjaGUuYyB8ICAgMTIgKysrKysrKysrKysrCisgZmhfY2FjaGUuaCB8ICAgIDEgKworIG5mcy5jICAgICAgfCAgICAyICsrCisgMyBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2ZoX2NhY2hlLmMKKysrKyBiL2ZoX2NhY2hlLmMKK0BAIC0xOTksNiArMTk5LDE4IEBAIHN0YXRpYyBjaGFyICpmaF9jYWNoZV9sb29rdXAodWludDMyIGRldiwKKyB9CisgCisgLyoKKysgKiB1cGRhdGUgYSBmaCBpbm9kZSBjYWNoZSBmb3IgYW4gb3BlcmF0aW9uIGxpa2UgcmVuYW1lCisrICovCisrdm9pZCBmaF9jYWNoZV91cGRhdGUobmZzX2ZoMyBmaCwgY2hhciAqcGF0aCkKKyt7CisrICAgIHVuZnMzX2ZoX3QgKm9iaiA9ICh2b2lkICopIGZoLmRhdGEuZGF0YV92YWw7CisrICAgIGJhY2tlbmRfc3RhdHN0cnVjdCBidWY7CisrCisrICAgIGlmIChiYWNrZW5kX2xzdGF0KHBhdGgsICZidWYpICE9IC0xKSB7CisrCWZoX2NhY2hlX2FkZChvYmotPmRldiwgYnVmLnN0X2lubywgcGF0aCk7CisrICAgIH0KKyt9CisrLyoKKyAgKiByZXNvbHZlIGEgZmlsZW5hbWUgaW50byBhIHBhdGgKKyAgKiBjYWNoZS11c2luZyB3cmFwcGVyIGZvciBmaF9kZWNvbXBfcmF3CisgICovCistLS0gYS9maF9jYWNoZS5oCisrKysgYi9maF9jYWNoZS5oCitAQCAtMTksNSArMTksNiBAQCB1bmZzM19maF90IGZoX2NvbXAoY29uc3QgY2hhciAqcGF0aCwgc3RyCisgdW5mczNfZmhfdCAqZmhfY29tcF9wdHIoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN2Y19yZXEgKnJxc3RwLCBpbnQgbmVlZF9kaXIpOworIAorIGNoYXIgKmZoX2NhY2hlX2FkZCh1aW50MzIgZGV2LCB1aW50NjQgaW5vLCBjb25zdCBjaGFyICpwYXRoKTsKKyt2b2lkIGZoX2NhY2hlX3VwZGF0ZShuZnNfZmgzIGZoLCBjaGFyICpwYXRoKTsKKyAKKyAjZW5kaWYKKy0tLSBhL25mcy5jCisrKysgYi9uZnMuYworQEAgLTg3Niw2ICs4NzYsOCBAQCBSRU5BTUUzcmVzICpuZnNwcm9jM19yZW5hbWVfM19zdmMoUkVOQU1FCisgCSAgICByZXMgPSBiYWNrZW5kX3JlbmFtZShmcm9tX29iaiwgdG9fb2JqKTsKKyAJICAgIGlmIChyZXMgPT0gLTEpCisgCQlyZXN1bHQuc3RhdHVzID0gcmVuYW1lX2VycigpOworKwkgICAgLyogVXBkYXRlIHRoZSBmaF9jYWNoZSB3aXRoIG1vdmVkIGlub2RlIHZhbHVlICovCisrCSAgICBmaF9jYWNoZV91cGRhdGUoYXJncC0+dG8uZGlyLCB0b19vYmopOworIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTIxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdGNwX25vX2RlbGF5LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK2RhZW1vbi5jOiBBZGQgb3B0aW9uIGZvciB0Y3Agbm8gZGVsYXkKKworQWxsb3cgdGhlIE5GUyB0Y3Agc29ja2V0cyB0byBjb25kaXRpb25hbGx5IHVzZSBUQ1BfTk9ERUxBWQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgIDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kYWVtb24uYworKysrIGIvZGFlbW9uLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgI2lmbmRlZiBXSU4zMgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorICNlbHNlCQkJCSAgICAgICAvKiBXSU4zMiAqLworQEAgLTc1LDYgKzc2LDcgQEAgdW5zaWduZWQgaW50IG9wdF9tb3VudF9wb3J0ID0gTkZTX1BPUlQ7CisgaW50IG9wdF9zaW5nbGV1c2VyID0gRkFMU0U7CisgaW50IG9wdF9icnV0ZV9mb3JjZSA9IEZBTFNFOworIGludCBvcHRfdGVzdGNvbmZpZyA9IEZBTFNFOworK2ludCBvcHRfdGNwX25vZGVsYXkgPSBGQUxTRTsKKyBzdHJ1Y3QgaW5fYWRkciBvcHRfYmluZF9hZGRyOworIGludCBvcHRfcmVhZGFibGVfZXhlY3V0YWJsZXMgPSBGQUxTRTsKKyBjaGFyICpvcHRfcGlkX2ZpbGUgPSBOVUxMOworQEAgLTIwOCw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgeworIAorICAgICBpbnQgb3B0ID0gMDsKKy0gICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOm46cHJzdFR1d2k6eDp5OiI7CisrICAgIGNoYXIgKm9wdHN0cmluZyA9ICJiY0M6ZGU6aGw6bTpObjpwcnN0VHV3aTp4Onk6IjsKKyAKKyAgICAgd2hpbGUgKG9wdCAhPSAtMSkgeworIAlvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgb3B0c3RyaW5nKTsKK0BAIC0yOTUsNiArMjk3LDkgQEAgc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9ucyhpbnQgYXJnYywgY2hhcgorIAkJICAgIGV4aXQoMSk7CisgCQl9CisgCQlicmVhazsKKysJICAgIGNhc2UgJ04nOgorKwkJb3B0X3RjcF9ub2RlbGF5ID0gVFJVRTsKKysJCWJyZWFrOworIAkgICAgY2FzZSAnbic6CisgCQlvcHRfbmZzX3BvcnQgPSBzdHJ0b2wob3B0YXJnLCBOVUxMLCAxMCk7CisgCQlpZiAob3B0X25mc19wb3J0ID09IDApIHsKK0BAIC04MDIsNiArODA3LDggQEAgc3RhdGljIFNWQ1hQUlQgKmNyZWF0ZV90Y3BfdHJhbnNwb3J0KHVucworIAlzaW4uc2luX2FkZHIuc19hZGRyID0gb3B0X2JpbmRfYWRkci5zX2FkZHI7CisgCXNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworIAlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNvbnN0IGNoYXIgKikgJm9uLCBzaXplb2Yob24pKTsKKysJaWYgKG9wdF90Y3Bfbm9kZWxheSkKKysJICAgIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCAmb24sIHNpemVvZihvbikpOworIAlpZiAoYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSkgeworIAkgICAgcGVycm9yKCJiaW5kIik7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGJpbmQgdG8gdGNwIHBvcnQgJWRcbiIsIHBvcnQpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjRkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRml4IHBhcmFsbGVsIGJ1aWxkIGRlcGVuZGVuY3kgaXNzdWUKKworSWYgYnVpbGRpbmcgd2l0aCBtYWtlIC1qMiB0aGUgbGliLmEgd2lsbCBub3QgZ2V0IGJ1aWx0IGluIHRpbWUuCisKK0phc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIENvbmZpZy9NYWtlZmlsZS5pbiB8ICAgIDMgKysrCisgTWFrZWZpbGUuaW4gICAgICAgIHwgICAgMyArKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yOSw3ICsyOSw4IEBAIERFU1RESVIgPQorIAorIFZQQVRIID0gJChzcmNkaXIpCisgCistYWxsOiBzdWJkaXJzIHVuZnNkJChFWEVFWFQpCisrYWxsOiBzdWJkaXJzCisrCSQoTUFLRSkgdW5mc2QkKEVYRUVYVCkKKyAKKyB1bmZzZCQoRVhFRVhUKTogJChPQkpTKSAkKENPTkZPQkopICQoRVhUUkFPQkopCisgCSQoQ0MpIC1vICRAICQoT0JKUykgJChDT05GT0JKKSAkKEVYVFJBT0JKKSAkKExERkxBR1MpCistLS0gYS9Db25maWcvTWFrZWZpbGUuaW4KKysrKyBiL0NvbmZpZy9NYWtlZmlsZS5pbgorQEAgLTE2LDYgKzE2LDkgQEAgbGliLmE6ICQoT0JKUykKKyAJJChBUikgY3JzIGxpYi5hICQoT0JKUykKKyAKKyB5LnRhYi5oIHkudGFiLmM6ICQoc3JjZGlyKS9leHBvcnRzLnkKKyt5LnRhYi5oOiB5LnRhYi5jCisrCisreS50YWIuYzogJChzcmNkaXIpL2V4cG9ydHMueQorIAkkKFlBQ0MpIC1kICQoc3JjZGlyKS9leHBvcnRzLnkKKyAKKyB5LnRhYi5vOiB5LnRhYi5jICQoc3JjZGlyKS9leHBvcnRzLmggJCh0b3Bfc3JjZGlyKS9uZnMuaCAkKHRvcF9zcmNkaXIpL21vdW50LmggJCh0b3Bfc3JjZGlyKS9kYWVtb24uaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzXzAuOS4yMi5yNDkwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgTkZTIHNlcnZlciB2MyBwcm90b2NvbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJ1bmZzMyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTk0NzU4ODUyOTRlMTdjMGNjMDA2NzgyMGQwNDI3OTJlIgorCisjIFNWTiBzdXBwb3J0IGZvciB1cHN0cmVhbSB2ZXJzaW9uIGNoZWNrIGlzbid0IGltcGxlbWVudGVkIHlldAorUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04gPSAiMC45LjIyLnI0OTUiCitSRUNJUEVfVVBTVFJFQU1fREFURSA9ICJGZWIgMDUsIDIwMTUiCitDSEVDS19EQVRFID0gIkp1biAxMCwgMjAxNSIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgZmxleCIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayArPSAiZmxleC1uYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjg3YWNjNGVlOTkyZTUzNjQ3MjM2NWRkOTk3MTJhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNzRiNDNhZGE5YzZlZWExZGEyNmViNzAxMGQ3Mjg4OWM1Mjc4OTg0YmEwYjUwZGZmNGUwOTMwNTdkNGQ2NGY4IgorCitNT0RfUFYgPSAiNDkwIgorUyA9ICIke1dPUktESVJ9L3RydW5rIgorU1JDX1VSSSA9ICJzdm46Ly9zdm4uY29kZS5zZi5uZXQvcC91bmZzMy9jb2RlO21vZHVsZT10cnVuaztyZXY9JHtNT0RfUFZ9IFwKKyAgICAgICAgICAgZmlsZTovL3VuZnMzX3BhcmFsbGVsX2J1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVuYW1lX2ZoX2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X3dhcm5pbmdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjcF9ub19kZWxheS5wYXRjaCBcCisgICAgICAgICAgIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitpbmhlcml0IGF1dG90b29scworCisjIFR1cm4gb2ZmIHRoZXNlIGhlYWRlciBkZXRlY3RzIGVsc2UgdGhlIGlub2RlIHNlYXJjaAorIyB3aWxsIHdhbGsgZW50aXJlIGZpbGUgc3lzdGVtcyBhbmQgdGhpcyBpcyBhIHJlYWwgcHJvYmxlbQorIyBpZiB5b3UgaGF2ZSAyIFRCIG9mIGZpbGVzIHRvIHdhbGsgaW4geW91ciBmaWxlIHN5c3RlbQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGVhZGVyX21udGVudF9oPW5vIGFjX2N2X2hlYWRlcl9zeXNfbW50dGFiX2g9bm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5pZmRlZi91bmlmZGVmXzIuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhMDA3OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYgpAQCAtMCwwICsxLDE1IEBACitTVU1NQVJZID0gIlNlbGVjdGl2ZWx5IHJlbW92ZSAjaWZkZWYgc3RhdGVtZW50cyBmcm9tIHNvdXJjZXMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3VuaWZkZWYuYztlbmRsaW5lPTMyO21kNT0yY2MyM2YwMzgyYTZmNTYwZjZhOWVjZjRlMDQwYzBkYSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG90YXQuYXQvcHJvZy8ke0JQTn0vJHtCUH0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gImJiNWQ4OTVlNWViYmJhNWM1Y2MwYzI3NzFjZjk3ZWJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiOWIyYjZiMTk1MmU5YjljMWI5ZjczNGVkZWMyNzA2ODlhMzViZGJmMzNhZTY2YjUwZTE5YjJlZDBkMmRmMDYiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBwcmVmaXg9JHtwcmVmaXh9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA1NmZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJDIy1saWtlIHByb2dyYW1taW5nIGxhbmd1YWdlIGZvciBlYXNpbmcgR09iamVjdCBwcm9ncmFtbWluZyIKK0RFU0NSSVBUSU9OID0gIlZhbGEgaXMgYSBDIy1saWtlIGxhbmd1YWdlIGRlZGljYXRlZCB0byBlYXNlIEdPYmplY3QgcHJvZ3JhbW1pbmcuIFwKK1ZhbGEgY29tcGlsZXMgdG8gcGxhaW4gQyBhbmQgaGFzIG5vIHJ1bnRpbWUgZW52aXJvbm1lbnQgbm9yIHBlbmFsaXRpZXMgd2hhdHNvZXZlci4iCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUgbGlieHNsdC1uYXRpdmUgZ2xpYi0yLjAiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK0hPTUVQQUdFID0gImh0dHA6Ly92YWxhLXByb2plY3Qub3JnIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvJHtCUE59LyR7U0hSVF9WRVJ9LyR7QlB9LnRhci54eiIKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vdmFwaSAke2xpYmRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9LyIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kZXZoZWxwIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LSR7U0hSVF9WRVJ9Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEvMDAwMS1naXQtdmVyc2lvbi1nZW4tZG9uLXQtYXBwZW5kLWRpcnR5LWlmLXdlLXJlLW5vdC1pbi1nLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gMjQ2MGQ3Yjc5ZjdlOTBkY2ZlZWJkZTVlOWM1M2Q5YjY3OThhMWYzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjEgRmViIDIwMTIgMTc6MTI6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2l0LXZlcnNpb24tZ2VuOiBkb24ndCBhcHBlbmQgLWRpcnR5IGlmIHdlJ3JlIG5vdCBpbiBnaXQKKyByZXBvCisKKyogZm9yIGV4YW1wbGUgaWYgd2UgaGF2ZSBzb21lIGRpcnR5IGRpcmVjdG9yeSBhbmQgd2UgdW5wYWNrIGNsZWFuIHZhbGEgdGFyYmFsbCBpbiBpdCwgdGhlbiBpdCB3aWxsIGFwcGVuZCAtZGlydHkKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorLS0tCisgYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbiB8ICAgMjUgKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIGIvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgoraW5kZXggMGZhNmZhYS4uMWQxZjlkMiAxMDA3NTUKKy0tLSBhL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KKysrKyBiL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4KK0BAIC0xMjYsMTggKzEyNiwyMSBAQCBmaQorIAorIHY9YGVjaG8gIiR2IiB8c2VkICdzL152Ly8nYAorIAorLSMgRG9uJ3QgZGVjbGFyZSBhIHZlcnNpb24gImRpcnR5IiBtZXJlbHkgYmVjYXVzZSBhIHRpbWUgc3RhbXAgaGFzIGNoYW5nZWQuCistZ2l0IHN0YXR1cyA+IC9kZXYvbnVsbCAyPiYxCisraWYgdGVzdCAtZCAuZ2l0CisrdGhlbgorKwkjIERvbid0IGRlY2xhcmUgYSB2ZXJzaW9uICJkaXJ0eSIgbWVyZWx5IGJlY2F1c2UgYSB0aW1lIHN0YW1wIGhhcyBjaGFuZ2VkLgorKwlnaXQgc3RhdHVzID4gL2Rldi9udWxsIDI+JjEKKyAKKy1kaXJ0eT1gc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsYCB8fCBkaXJ0eT0KKy1jYXNlICIkZGlydHkiIGluCistICAgICcnKSA7OworLSAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCistCWNhc2UgJHYgaW4KKy0JICAqLWRpcnR5KSA7OworLQkgICopIHY9IiR2LWRpcnR5IiA7OworLQllc2FjIDs7CistZXNhYworKwlkaXJ0eT1gc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsYCB8fCBkaXJ0eT0KKysJY2FzZSAiJGRpcnR5IiBpbgorKwkgICAgJycpIDs7CisrCSAgICAqKSAjIEFwcGVuZCB0aGUgc3VmZml4IG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuCisrCQljYXNlICR2IGluCisrCQkgICotZGlydHkpIDs7CisrCQkgICopIHY9IiR2LWRpcnR5IiA7OworKwkJZXNhYyA7OworKwllc2FjCisrZmkKKyAKKyAjIE9taXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUsIHNvIHRoYXQgbTRfZXN5c2NtZCBjYW4gdXNlIHRoZSByZXN1bHQgZGlyZWN0bHkuCisgZWNobyAiJHYiIHwgdHIgLWQgJ1wwMTInCistLSAKKzEuNy44LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA5MDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYV8wLjI4LjAuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSArPSAiIGZpbGU6Ly8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDRjZWFjMzQ1MWEwZDU0OTdlN2JlMzhlNWU0YzJhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZDllM2JkM2Y4MjE0NTY2NDg3NWY3YzI5YjJmNTQ0YmE5MmQyODE0Zjc1NDEyOTQ4Zjc3NGMwNzI3ZmM5NzdmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiYjVmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC8wMDAxLXZhbGdyaW5kLUVuYWJsZS1ydF9zaWdwZW5kaW5nLXN5c2NhbGwtb24tcHBjNjQtbGludXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxYTgwMDZmNTYzNDJkYWU5ZjcxMDBhM2MzM2Q4MDg3MzY3NmUwNDA0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyNCBBdWcgMjAxNSAwMzo1NToxOCAtMDQwMAorU3ViamVjdDogW1BBVENIXSB2YWxncmluZDogRW5hYmxlIHJ0X3NpZ3BlbmRpbmcgc3lzY2FsbCBvbiBwcGM2NCBsaW51eAorCitOZXcgUmV2aXNpb246IDE1MTMzCitFbmFibGUgcnRfc2lncGVuZGluZyBzeXNjYWxsIG9uIHBwYzY0IGxpbnV4LgorUGF0Y2ggZnJvbSBUaG9tYXMgSHV0aCA8dGh1dGhAcmVkaGF0LmNvbT4KKworR2V0IHRoZSBwYXRjaCBmcm9tIHZhbGdyaW5kIHVwc3RyZWFtOgoraHR0cDovL3ZhbGdyaW5kLjEwOTA4Lm43Lm5hYmJsZS5jb20vVmFsZ3JpbmQtcjE1MTMzLWluLXRydW5rLU5FV1MtY29yZWdyaW5kLW0tc3lzd3JhcC1zeXN3cmFwLXBwYzY0LWxpbnV4LWMtdGQ1NDU4OS5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCitpbmRleCA1OTQ2ZWUxLi44YWFhMWQ3IDEwMDY0NAorLS0tIGEvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKKysrKyBiL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jCitAQCAtODg3LDcgKzg4Nyw3IEBAIHN0YXRpYyBTeXNjYWxsVGFibGVFbnRyeSBzeXNjYWxsX3RhYmxlW10gPSB7CisgICAgTElOWFkoX19OUl9ydF9zaWdhY3Rpb24sICAgICAgc3lzX3J0X3NpZ2FjdGlvbiksICAgICAgIC8vIDE3MworICAgIExJTlhZKF9fTlJfcnRfc2lncHJvY21hc2ssICAgIHN5c19ydF9zaWdwcm9jbWFzayksICAgICAvLyAxNzQKKyAKKy0vLyBfX19fXyhfX05SX3J0X3NpZ3BlbmRpbmcsICAgICBzeXNfcnRfc2lncGVuZGluZyksICAgICAgLy8gMTc1CisrICAgTElOWFkoX19OUl9ydF9zaWdwZW5kaW5nLCAgICAgc3lzX3J0X3NpZ3BlbmRpbmcpLCAgICAgIC8vIDE3NQorICAgIExJTlhZKF9fTlJfcnRfc2lndGltZWR3YWl0LCAgIHN5c19ydF9zaWd0aW1lZHdhaXQpLCAgICAvLyAxNzYKKyAgICBMSU5YWShfX05SX3J0X3NpZ3F1ZXVlaW5mbywgICBzeXNfcnRfc2lncXVldWVpbmZvKSwgICAgLy8gMTc3CisgICAgTElOWF8oX19OUl9ydF9zaWdzdXNwZW5kLCAgICAgc3lzX3J0X3NpZ3N1c3BlbmQpLCAgICAgIC8vIDE3OAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc3NGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL0FkZGVkLXN1cHBvcnQtZm9yLVBQQy1pbnN0cnVjdGlvbnMtbWZhdGJ1LW1mYXRibC5wYXRjaApAQCAtMCwwICsxLDk2IEBACitGcm9tIDBiZjRiMGFjMThkMWVhNDFiMzJhZDc4MWQyMTRiMjk1Y2ExOTk4ZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDIxIE5vdiAyMDExIDE3OjMxOjM5ICswNTMwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZGVkIHN1cHBvcnQgZm9yIFBQQyBpbnN0cnVjdGlvbnMgbWZhdGJ1LCBtZmF0YmwuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmVlc2ggQmFuc2FsIDxhbmVlc2guYmFuc2FsQGZyZWVzY2FsZS5jb20+CistLS0KK0N1cnJlbnRseSBWYWxncmluZCAzLjcuMCBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIFBQQyBpbnN0cnVjdGlvbnMgbWZhdGJ1IGFuZCBtZmF0YmwuIFdoZW4gd2UgcnVuIGEgVVNEUEFBIGFwcGxpY2F0aW9uIHdpdGggVkFMR1JJTkQsIHRoZSBmb2xsb3dpbmcgZXJyb3IgaXMgZ2l2ZW4gYnkgdmFsZ3JpbmQgOgorZGlzX3Byb2NfY3RsKHBwYykobWZzcHIsU1BSKSgweDIwRikKK2Rpc0luc3RyKHBwYyk6IHVuaGFuZGxlZCBpbnN0cnVjdGlvbjogMHg3QzBGODJBNgorCisKKyBWRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oICAgIHwgICAgMiArKworIFZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMgfCAgIDE4ICsrKysrKysrKysrKysrKysrKworIFZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAoraW5kZXggZGQzYzYyZS4uMTFhMzRhYSAxMDA2NDQKKy0tLSBhL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKKysrKyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmgKK0BAIC0xNDYsNiArMTQ2LDggQEAgZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI2OF8yNjkgKCBVSW50ICk7CisgCisgZXh0ZXJuIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI4NyAoIHZvaWQgKTsKKyAKKytleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyAoIFVJbnQgKTsKKysKKyBleHRlcm4gdm9pZCBwcGMzMmdfZGlydHloZWxwZXJfTFZTICggVmV4R3Vlc3RQUEMzMlN0YXRlKiBnc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgdkRfaWR4LCBVSW50IHNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50IHNoaWZ0X3JpZ2h0ICk7CitkaWZmIC0tZ2l0IGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKK2luZGV4IDExYWE0MjguLmI0OWVhM2YgMTAwNjQ0CistLS0gYS9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCisrKysgYi9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jCitAQCAtMTE5LDYgKzExOSwyNCBAQCBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl8yODcgKCB2b2lkICkKKyAjICBlbmRpZgorIH0KKyAKKysvKiBDQUxMRUQgRlJPTSBHRU5FUkFURUQgQ09ERSAqLworKy8qIERJUlRZIEhFTFBFUiAobm9uLXJlZmVyZW50aWFsbHkgdHJhbnNwYXJlbnQpICovCisrVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyAoIFVJbnQgcjUyNyApCisreworKyMgIGlmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX0FJWCkKKysgICBVSW50IHNwcjsKKysgICBpZiAocjUyNykgeworKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtZnNwciAlMCw1MjciIDogIj1iIihzcHIpKTsKKysgICB9IGVsc2UgeworKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtZnNwciAlMCw1MjYiIDogIj1iIihzcHIpKTsKKysgICB9CisrICAgcmV0dXJuIHNwcjsKKysjICBlbHNlCisrICAgcmV0dXJuIDA7CisrIyAgZW5kaWYKKyt9CisrCisrCisgCisgLyogQ0FMTEVEIEZST00gR0VORVJBVEVEIENPREUgKi8KKyAvKiBESVJUWSBIRUxQRVIgKHJlYWRzIGd1ZXN0IHN0YXRlLCB3cml0ZXMgZ3Vlc3QgbWVtKSAqLworZGlmZiAtLWdpdCBhL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMgYi9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCitpbmRleCBmOGQyMjBkLi4zN2M4OTc0IDEwMDY0NAorLS0tIGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworKysrIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYworQEAgLTU2NTcsNiArNTY1NywyOCBAQCBzdGF0aWMgQm9vbCBkaXNfcHJvY19jdGwgKCBWZXhBYmlJbmZvKiB2YmksIFVJbnQgdGhlSW5zdHIgKQorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAKKysKKysgICAgICBjYXNlIDUyNiAvKiAweDIwRSAqLzoKKysgICAgICBjYXNlIDUyNyAvKiAweDIwRiAqLzogeworKyAgICAgICAgIFVJbnQgICAgIGFyZyAgPSBTUFI9PTUyNiA/IDAgOiAxOworKyAgICAgICAgIElSVGVtcCAgIHZhbCAgPSBuZXdUZW1wKEl0eV9JMzIpOworKyAgICAgICAgIElSRXhwcioqIGFyZ3MgPSBta0lSRXhwclZlY18xKCBta1UzMihhcmcpICk7CisrICAgICAgICAgSVJEaXJ0eSogZCAgICA9IHVuc2FmZUlSRGlydHlfMV9OKAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAvKnJlZ3Bhcm1zKi8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfNTI2XzUyNyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZucHRyX3RvX2ZuZW50cnkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZiaSwgJnBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncworKyAgICAgICAgICAgICAgICAgICAgICAgICApOworKyAgICAgICAgIC8qIGV4ZWN1dGUgdGhlIGRpcnR5IGNhbGwsIGR1bXBpbmcgdGhlIHJlc3VsdCBpbiB2YWwuICovCisrICAgICAgICAgc3RtdCggSVJTdG10X0RpcnR5KGQpICk7CisrICAgICAgICAgcHV0SVJlZyggckRfYWRkciwKKysgICAgICAgICAgICAgICAgICBta1dpZGVuRnJvbTMyKHR5LCBta2V4cHIodmFsKSwgRmFsc2UvKnVuc2lnbmVkKi8pICk7CisrICAgICAgICAgRElQKCJtZnNwciByJXUsJXUiLCByRF9hZGRyLCAoVUludClTUFIpOworKyAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysKKyAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHZleF9wcmludGYoImRpc19wcm9jX2N0bChwcGMpKG1mc3ByLFNQUikoMHgleClcbiIsIFNQUik7CisgICAgICAgICAgcmV0dXJuIEZhbHNlOworLS0gCisxLjcuMC40CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVmODQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2FkZC1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDI0MyBAQAorTW9kaWZ5IHZnX3Rlc3Qgd3JhcHBlciB0byBzdXBwb3J0IFBURVNUIGZvcm1hdHMKKworQ2hhbmdlIHRoZSB2YWxncmluZCByZWdyZXNzaW9uIHRlc3Qgc2NyaXB0IHZnX3JlZ3Rlc3QgdG8KK3N1cHBvcnQgdGhlIHlvY3RvIHB0ZXN0IHN0ZG91dCByZXBvcnRpbmcgZm9ybWF0LiAgVGhlIGNvbW1pdCBhZGRzCisnLS15b2N0by1wdGVzdCcgYXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdG8gdmdfcmVndGVzdCwgd2hpY2ggYWx0ZXJzCit0aGUgb3V0cHV0IHRvIHVzZSB0aGUgcHRlc3QgaW5mcmFzdHJ1Y3R1cmUgcmVwb3J0aW5nIGZvcm1hdDoKKyAgICAiW1BBU1N8U0tJUHxGQUlMXTogdGVzdG5hbWUiCitpbnN0ZWFkIG9mIHZhbGdyaW5kJ3MgaW50ZXJuYWwgdGVzdCByZXBvcnRpbmcgZm9ybWF0LiAgV2l0aG91dCB0aGUgYWRkZWQKK29wdGlvbiwgLS15b2N0by1wdGVzdCwgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgaXMgdW5jaGFuZ2VkLgorCitFbmZvcmNlIDMwIHNlY29uZHMgbGltaXQgZm9yIHRoZSB0ZXN0LgorVGhpcyByZXN1bWUgZXhlY3V0aW9uIG9mIHRoZSByZW1haW5pbmcgdGVzdHMgd2hlbiB2YWxncmluZCBoYW5ncy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy92Z19yZWd0ZXN0LmluIGIvdGVzdHMvdmdfcmVndGVzdC5pbgoraW5kZXggMjI0Mzg1Zi4uM2UwMzgzYiAxMDA3NTUKKy0tLSBhL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KKysrKyBiL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4KK0BAIC0zOSwxMSArMzksMTEgQEAKKyAjICAgICAgICAgICAgICAgLS12YWxncmluZC4pCisgIyAgIC0ta2VlcC11bmZpbHRlcmVkOiBrZWVwIGEgY29weSBvZiB0aGUgdW5maWx0ZXJlZCBvdXRwdXQvZXJyb3Igb3V0cHV0CisgIyAgICAgb2YgZWFjaCB0ZXN0IGJ5IGFkZGluZyBhbiBleHRlbnNpb24gLnVuZmlsdGVyZWQub3V0CistIworICMgICAtLW91dGVyLXZhbGdyaW5kOiBydW4gdGhpcyB2YWxncmluZCB1bmRlciB0aGUgZ2l2ZW4gb3V0ZXIgdmFsZ3JpbmQuCisgIyAgICAgVGhpcyB2YWxncmluZCBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1pbm5lci4KKyAjICAgLS1vdXRlci10b29sOiB0b29sIHRvIHVzZSBieSB0aGUgb3V0ZXIgdmFsZ3JpbmQgKGRlZmF1bHQgbWVtY2hlY2spLgorICMgICAtLW91dGVyLWFyZ3M6IHVzZSB0aGlzIGFzIG91dGVyIHRvb2wgYXJncy4KKysjICAgLS15b2N0by1wdGVzdDogb3V0cHV0IGluIHlvY3RvIHB0ZXN0IGZvcm1hdAorICMKKyAjIFRoZSBlYXNpZXN0IHdheSBpcyB0byBydW4gYWxsIHRlc3RzIGluIHZhbGdyaW5kLyB3aXRoIChhc3N1bWluZyB5b3UgaW5zdGFsbGVkCisgIyBpbiAkUFJFRklYKToKK0BAIC0xMjYsNyArMTI2LDcgQEAgdXNlIHN0cmljdDsKKyBteSAkdXNhZ2U9IlxuIgorICAgICAgLiAiVXNhZ2U6XG4iCisgICAgICAuICIgICB2Z19yZWd0ZXN0IFstLWFsbCwgLS12YWxncmluZCwgLS12YWxncmluZC1saWIsIC0ta2VlcC11bmZpbHRlcmVkXG4iCistICAgICAuICIgICAgICAgICAgICAgICAgIC0tb3V0ZXItdmFsZ3JpbmQsIC0tb3V0ZXItdG9vbCwgLS1vdXRlci1hcmdzXVxuIgorKyAgICAgLiAiICAgICAgICAgICAgICAgICAtLW91dGVyLXZhbGdyaW5kLCAtLW91dGVyLXRvb2wsIC0tb3V0ZXItYXJncywgLS15b2N0by1wdGVzdF1cbiIKKyAgICAgIC4gIiAgIFVzZSBFWFRSQV9SRUdURVNUX09QVFMgdG8gc3VwcGx5IGV4dHJhIGFyZ3MgZm9yIGFsbCB0ZXN0c1xuIgorICAgICAgLiAiXG4iOworIAorQEAgLTE3MCw2ICsxNzAsNyBAQCBteSAkb3V0ZXJfYXJnczsKKyAKKyBteSAkdmFsZ3JpbmRfbGliID0gIiR0ZXN0c19kaXIvLmluX3BsYWNlIjsKKyBteSAka2VlcHVuZmlsdGVyZWQgPSAwOworK215ICR5b2N0b3B0ZXN0ID0gMDsKKyAKKyAjIGRlZmF1bHQgZmlsdGVyIGlzIHRoZSBvbmUgbmFtZWQgImZpbHRlcl9zdGRlcnIiIGluIHRoZSB0ZXN0J3MgZGlyZWN0b3J5CisgbXkgJGRlZmF1bHRfc3RkZXJyX2ZpbHRlciA9ICJmaWx0ZXJfc3RkZXJyIjsKK0BAIC0yMjYsNiArMjI3LDggQEAgc3ViIHByb2Nlc3NfY29tbWFuZF9saW5lKCkKKyAgICAgICAgICAgICAgICAgJHZhbGdyaW5kX2xpYiA9ICQxOworICAgICAgICAgICAgIH0gZWxzaWYgKCRhcmcgPX4gL14tLWtlZXAtdW5maWx0ZXJlZCQvKSB7CisgICAgICAgICAgICAgICAgICRrZWVwdW5maWx0ZXJlZCA9IDE7CisrICAgICAgICAgICAgfSBlbHNpZiAoJGFyZyA9fiAvXi0teW9jdG8tcHRlc3QkLykgeworKyAgICAgICAgICAgICAgICAkeW9jdG9wdGVzdCA9IDE7CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgZGllICR1c2FnZTsKKyAgICAgICAgICAgICB9CitAQCAtMzQwLDEzICszNDMsMjggQEAgc3ViIHJlYWRfdmd0ZXN0X2ZpbGUoJCkKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgU2luY2UgbW9zdCBvZiB0aGUgcHJvZ3JhbSB0aW1lIGlzIHNwZW50IGluIHN5c3RlbSgpIGNhbGxzLCBuZWVkIHRoaXMgdG8KKyAjIHByb3BhZ2F0ZSBhIEN0cmwtQyBlbmFibGluZyB1cyB0byBxdWl0LgorLXN1YiBteXN5c3RlbSgkKSAKKysjIEVuZm9yY2UgMzAgc2Vjb25kcyBsaW1pdCBmb3IgdGhlIHRlc3QuCisrIyBUaGlzIHJlc3VtZSBleGVjdXRpb24gb2YgdGhlIHJlbWFpbmluZyB0ZXN0cyBpZiB2YWxncmluZCBoYW5ncy4KKytzdWIgbXlzeXN0ZW0oJCkKKyB7CistICAgIG15ICRleGl0X2NvZGUgPSBzeXN0ZW0oJF9bMF0pOworLSAgICAoJGV4aXRfY29kZSA9PSAyKSBhbmQgZXhpdCAxOyAgICAgICMgMiBpcyBTSUdJTlQKKy0gICAgcmV0dXJuICRleGl0X2NvZGU7CisrICAgIG15ICRleGl0X2NvZGU9MDsKKysgICAgZXZhbCB7CisrICAgICAgICBsb2NhbCAkU0lHeydBTFJNJ30gPSBzdWIgeyBkaWUgInRpbWVkIG91dFxuIiB9OworKyAgICAgICAgYWxhcm0oMzApOworKyAgICAgICAgJGV4aXRfY29kZSA9IHN5c3RlbSgkX1swXSk7CisrICAgICAgICBhbGFybSAoMCk7CisrICAgICAgICAoJGV4aXRfY29kZSA9PSAyKSBhbmQgZGllICJTSUdJTlRcbiI7ICAgIyAyIGlzIFNJR0lOVAorKyAgICB9OworKyAgICBpZiAoJEApIHsKKysgICAgICAgIGlmICgkQCBlcSAidGltZWQgb3V0XG4iKSB7CisrICAgICAgICAgICAgcHJpbnQgInRpbWVkIG91dFxuIjsKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICgkQCBlcSAiU0lHSU5UXG4iKSB7CisrICAgICAgICAgICAgZXhpdCAxOworKyAgICAgICAgfQorKyAgICB9CisgfQorLQorICMgaWYgJGtlZXB1bmZpbHRlcmVkLCBjb3BpZXMgJDEgdG8gJDEudW5maWx0ZXJlZC5vdXQKKyAjIHJlbmFtZXMgJDAgdHAgJDEKKyBzdWIgZmlsdGVyZWRfcmVuYW1lKCQkKSAKK0BAIC0zOTQsMTkgKzQxMiwyMSBAQCBzdWIgZG9fZGlmZnMoJCQkJCkKKyAgICAgICAgICAgICAgICAgIyBBIG1hdGNoOyAgcmVtb3ZlIC5vdXQgYW5kIGFueSBwcmV2aW91c2x5IGNyZWF0ZWQgLmRpZmYgZmlsZXMuCisgICAgICAgICAgICAgICAgIHVubGluaygiJG5hbWUuJG1pZC5vdXQiKTsKKyAgICAgICAgICAgICAgICAgdW5saW5rKDwkbmFtZS4kbWlkLmRpZmYqPik7CistICAgICAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgICAgICMgSWYgd2UgcmVhY2ggaGVyZSwgbm9uZSBvZiB0aGUgLmV4cCBmaWxlcyBtYXRjaGVkLgorLSAgICBwcmludCAiKioqICRuYW1lIGZhaWxlZCAoJG1pZCkgKioqXG4iOworKyAgICBwcmludCAiKioqICRuYW1lIGZhaWxlZCAoJG1pZCkgKioqXG4iIGlmICgkeW9jdG9wdGVzdCA9PSAwKSA7CisgICAgIHB1c2goQGZhaWx1cmVzLCBzcHJpbnRmKCIlLTQwcyAoJG1pZCkiLCAiJGZ1bGxuYW1lIikpOworICAgICAkbnVtX2ZhaWx1cmVzeyRtaWR9Kys7CisrICAgIHJldHVybiAxOworIH0KKyAKKyBzdWIgZG9fb25lX3Rlc3QoJCQpIAorIHsKKyAgICAgbXkgKCRkaXIsICR2Z3Rlc3QpID0gQF87CisrICAgIG15ICRkaWZmU3RhdHVzID0gMDsKKyAgICAgJHZndGVzdCA9fiAvXiguKilcLnZndGVzdC87CisgICAgIG15ICRuYW1lID0gJDE7CisgICAgIG15ICRmdWxsbmFtZSA9ICIkZGlyLyRuYW1lIjsgCitAQCAtNDI1LDcgKzQ0NSwxMSBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICB9IGVsc2lmICgyNTYgPT0gJHByZXJlcV9yZXMpIHsKKyAgICAgICAgICAgICAjIE5iOiB3ZWlyZCBQZXJsLWlzbSAtLSBleGl0IGNvZGUgb2YgJzEnIGlzIHNlZW4gYnkgUGVybCBhcyAyNTYuLi4KKyAgICAgICAgICAgICAjIFByZXJlcSBmYWlsZWQsIHNraXAuCistICAgICAgICAgICAgcHJpbnRmKCIlLTE2cyAoc2tpcHBpbmcsIHByZXJlcSBmYWlsZWQ6ICRwcmVyZXEpXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICAgICAgaWYgKCR5b2N0b3B0ZXN0ID09IDApIHsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCIlLTE2cyAoc2tpcHBpbmcsIHByZXJlcSBmYWlsZWQ6ICRwcmVyZXEpXG4iLCAiJG5hbWU6Iik7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCJTS0lQOiAkZnVsbG5hbWVcbiIpOworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICMgQmFkIHByZXJlcTsgYWJvcnQuCitAQCAtNDM4LDcgKzQ2Miw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgaWYgKGRlZmluZWQgJHByb2dCKSB7CisgICAgICAgICAjIElmIHRoZXJlIGlzIGEgcHJvZ0IsIGxldCdzIHN0YXJ0IGl0IGluIGJhY2tncm91bmQ6CisgICAgICAgICBwcmludGYoIiUtMTZzIHZhbGdyaW5kICRleHRyYW9wdHMgJHZnb3B0cyAkcHJvZyAkYXJncyAocHJvZ0I6ICRwcm9nQiAkYXJnc0IpXG4iLAorLSAgICAgICAgICAgICAgICIkbmFtZToiKTsKKysgICAgICAgICAgICAgICAiJG5hbWU6IikgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICAgICAgIyBwcm9nQi5kb25lIHVzZWQgdG8gZGV0ZWN0IGNoaWxkIGhhcyBmaW5pc2hlZC4gU2VlIGJlbG93LgorICAgICAgICAgIyBOb3RlOiByZWRpcmVjdGlvbiBvZiBzdGRvdXQgYW5kIHN0ZGVyciBpcyBiZWZvcmUgJHByb2dCIHRvIGFsbG93IGFyZ3NCCisgICAgICAgICAjIHRvIGUuZy4gcmVkaXJlY3Qgc3Rkb3V0QiB0byBzdGRlcnJCCitAQCAtNDUyLDcgKzQ3Niw4IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICAgICAgICAgICAgICAuICJ0b3VjaCBwcm9nQi5kb25lKSAgJiIpOworICAgICAgICAgfQorICAgICB9IGVsc2UgeworLSAgICAgICAgcHJpbnRmKCIlLTE2cyB2YWxncmluZCAkZXh0cmFvcHRzICR2Z29wdHMgJHByb2cgJGFyZ3NcbiIsICIkbmFtZToiKTsKKysgICAgICAgIHByaW50ZigiJS0xNnMgdmFsZ3JpbmQgJGV4dHJhb3B0cyAkdmdvcHRzICRwcm9nICRhcmdzXG4iLCAiJG5hbWU6IikKKysgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgCisgICAgICMgUGFzcyB0aGUgYXBwcm9wcmlhdGUgLS10b29sIG9wdGlvbiBmb3IgdGhlIGRpcmVjdG9yeSAoY2FuIGJlIG92ZXJyaWRkZW4KK0BAIC00ODcsNyArNTEyLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAjIEZpbmQgYWxsIHRoZSAuc3Rkb3V0LmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgICAgIG15IEBzdGRvdXRfZXhwcyA9IDwkbmFtZS5zdGRvdXQuZXhwKj47CisgICAgIEBzdGRvdXRfZXhwcyA9ICggIi9kZXYvbnVsbCIgKSBpZiAoMCA9PSBzY2FsYXIgQHN0ZG91dF9leHBzKTsKKy0gICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dCIsIFxAc3Rkb3V0X2V4cHMpOyAKKysgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dCIsIFxAc3Rkb3V0X2V4cHMpOworIAorICAgICAjIEZpbHRlciBzdGRlcnIKKyAgICAgJHN0ZGVycl9maWx0ZXJfYXJncyA9ICRuYW1lIGlmICghIGRlZmluZWQgJHN0ZGVycl9maWx0ZXJfYXJncyk7CitAQCAtNDk2LDcgKzUyMSw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZGVyci5leHAgZmlsZXMuICBBdCBsZWFzdCBvbmUgbXVzdCBleGlzdC4KKyAgICAgbXkgQHN0ZGVycl9leHBzID0gPCRuYW1lLnN0ZGVyci5leHAqPjsKKyAgICAgKDAgIT0gc2NhbGFyIEBzdGRlcnJfZXhwcykgb3IgZGllICJDb3VsZCBub3QgZmluZCBgJG5hbWUuc3RkZXJyLmV4cConXG4iOworLSAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyIiwgXEBzdGRlcnJfZXhwcyk7IAorKyAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3RkZXJyIiwgXEBzdGRlcnJfZXhwcyk7CisgCisgICAgIGlmIChkZWZpbmVkICRwcm9nQikgeworICAgICAgICAgIyB3YWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgZmluaXNoZWQKK0BAIC01MjAsNyArNTQ1LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZG91dEIuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAgICAgICAgIG15IEBzdGRvdXRCX2V4cHMgPSA8JG5hbWUuc3Rkb3V0Qi5leHAqPjsKKyAgICAgICAgIEBzdGRvdXRCX2V4cHMgPSAoICIvZGV2L251bGwiICkgaWYgKDAgPT0gc2NhbGFyIEBzdGRvdXRCX2V4cHMpOworLSAgICAgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dEIiLCBcQHN0ZG91dEJfZXhwcyk7IAorKyAgICAgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZG91dEIiLCBcQHN0ZG91dEJfZXhwcyk7CisgICAgICAgICAKKyAgICAgICAgICMgRmlsdGVyIHN0ZGVycgorICAgICAgICAgJHN0ZGVyckJfZmlsdGVyX2FyZ3MgPSAkbmFtZSBpZiAoISBkZWZpbmVkICRzdGRlcnJCX2ZpbHRlcl9hcmdzKTsKK0BAIC01MjksNyArNTU0LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgIyBGaW5kIGFsbCB0aGUgLnN0ZGVyckIuZXhwIGZpbGVzLiAgQXQgbGVhc3Qgb25lIG11c3QgZXhpc3QuCisgICAgICAgICBteSBAc3RkZXJyQl9leHBzID0gPCRuYW1lLnN0ZGVyckIuZXhwKj47CisgICAgICAgICAoMCAhPSBzY2FsYXIgQHN0ZGVyckJfZXhwcykgb3IgZGllICJDb3VsZCBub3QgZmluZCBgJG5hbWUuc3RkZXJyQi5leHAqJ1xuIjsKKy0gICAgICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnJCIiwgXEBzdGRlcnJCX2V4cHMpOyAKKysgICAgICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnJCIiwgXEBzdGRlcnJCX2V4cHMpOworICAgICB9CisgCisgICAgICMgTWF5YmUgZG8gcG9zdC10ZXN0IGNoZWNrCitAQCAtNTQxLDcgKzU2Niw3IEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAJICAgICMgRmluZCBhbGwgdGhlIC5wb3N0LmV4cCBmaWxlcy4gIElmIG5vbmUsIHVzZSAvZGV2L251bGwuCisgCSAgICBteSBAcG9zdF9leHBzID0gPCRuYW1lLnBvc3QuZXhwKj47CisgCSAgICBAcG9zdF9leHBzID0gKCAiL2Rldi9udWxsIiApIGlmICgwID09IHNjYWxhciBAcG9zdF9leHBzKTsKKy0JICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJwb3N0IiwgXEBwb3N0X2V4cHMpOworKwkgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInBvc3QiLCBcQHBvc3RfZXhwcyk7CisgCX0KKyAgICAgfQorICAKK0BAIC01NTAsNiArNTc1LDEzIEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgICAgICBwcmludCgiKGNsZWFudXAgb3BlcmF0aW9uIGZhaWxlZDogJGNsZWFudXApXG4iKTsKKyAgICAgfQorIAorKyAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMSkgeworKyAgICAgICAgaWYgKCRkaWZmU3RhdHVzID09IDApIHsKKysgICAgICAgICAgICBwcmludCgiUEFTUzogJGZ1bGxuYW1lXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICRmdWxsbmFtZVxuIik7CisrICAgICAgICB9CisrICAgIH0KKyAgICAgJG51bV90ZXN0c19kb25lKys7CisgfQorIAorQEAgLTU4OSw3ICs2MjEsNyBAQCBzdWIgdGVzdF9vbmVfZGlyKCQkKQorICAgICBteSAkZm91bmRfdGVzdHMgPSAoMCAhPSAoZ3JlcCB7ICRfID1+IC9cLnZndGVzdCQvIH0gQGZzKSk7CisgCisgICAgIGlmICgkZm91bmRfdGVzdHMpIHsKKy0gICAgICAgIHByaW50ICItLSBSdW5uaW5nICB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIjsKKysgICAgICAgIHByaW50ICItLSBSdW5uaW5nICB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIiBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgICAgZm9yZWFjaCBteSAkZiAoQGZzKSB7CisgICAgICAgICBpZiAoLWQgJGYpIHsKK0BAIC01OTksNyArNjMxLDcgQEAgc3ViIHRlc3Rfb25lX2RpcigkJCkKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBpZiAoJGZvdW5kX3Rlc3RzKSB7CistICAgICAgICBwcmludCAiLS0gRmluaXNoZWQgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiI7CisrICAgICAgICBwcmludCAiLS0gRmluaXNoZWQgdGVzdHMgaW4gJGZ1bGxfZGlyICRkYXNoZXNcbiIgaWYgKCR5b2N0b3B0ZXN0ID09IDApOworICAgICB9CisgCisgICAgIGNoZGlyKCIuLiIpOworQEAgLTYyNSwxMCArNjU3LDEyIEBAIHN1YiBzdW1tYXJpc2VfcmVzdWx0cworICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3Rkb3V0In0sICAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZG91dCJ9KSwKKyAgICAgICAgICAgICRudW1fZmFpbHVyZXN7InN0ZGVyckIifSwgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJzdGRlcnJCIn0pLAorICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3Rkb3V0QiJ9LCAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZG91dEIifSksCistICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJwb3N0In0sICAgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sicG9zdCJ9KSk7CisrICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJwb3N0In0sICAgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sicG9zdCJ9KSkKKysgICAgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgCisgICAgIGZvcmVhY2ggbXkgJGZhaWx1cmUgKEBmYWlsdXJlcykgeworLSAgICAgICAgcHJpbnQgIiRmYWlsdXJlXG4iOworKyAgICAgICAgcHJpbnQgIiRmYWlsdXJlXG4iCisrICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAgICAgcHJpbnQgIlxuIjsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwZjJmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitFbmFibGUgYnVpbGRpbmcgdmFsZ3JpbmQgb24gaG9zdCB3aXRoIDQueCBrZXJuZWwuCisKK0ZvciBPcGVuRW1iZWRkZWQgYnVpbGRzIHdlIHNob3VsZCBiZSBjaGVja2luZyBzb21ldGhpbmcgbGlrZQorT0xERVNUX0tFUk5FTCBpbnN0ZWFkIG9mIGB1bmFtZSAtcmAsIGJ1dCB0aGlzIGlzIGdvb2QgZW5vdWdoIGZvciBub3cuCisKK0J1aWxkaW5nIG9uIDQueCogY3VycmVudGx5IGZhaWxzIHdpdGg6CisgIGNvbmZpZ3VyZTo1NTU2OiBjaGVja2luZyBmb3IgdGhlIGtlcm5lbCB2ZXJzaW9uCisgIGNvbmZpZ3VyZTo1NTc5OiByZXN1bHQ6IHVuc3VwcG9ydGVkICg0LjAuMC1yYzMtMDAxMTEtZ2FmZmI4MTcpCisgIGNvbmZpZ3VyZTo1NTgxOiBlcnJvcjogVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYy5vcmlnCTIwMTUtMDMtMTMgMTk6MTc6MDEuMjQ3MzEwODY4ICswMTAwCisrKysgdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjCTIwMTUtMDMtMTMgMTk6MTk6MjcuMzg4MzE2MTA4ICswMTAwCitAQCAtMjc2LDkgKzI3Niw5IEBACisgICAgICAgICBrZXJuZWw9YHVuYW1lIC1yYAorIAorICAgICAgICAgY2FzZSAiJHtrZXJuZWx9IiBpbgorLSAgICAgICAgICAgICAyLjYuKnwzLiopIAorLSAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFsyLjYueC8zLnggZmFtaWx5ICgke2tlcm5lbH0pXSkKKy0gICAgICAgIAkgICAgQUNfREVGSU5FKFtLRVJORUxfMl82XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBMaW51eCAyLjYueCBvciBMaW51eCAzLnhdKQorKyAgICAgICAgICAgICAyLjYuKnwzLip8NC4qKSAKKysgICAgICAgIAkgICAgQUNfTVNHX1JFU1VMVChbMi42LngvMy54LzQueCBmYW1pbHkgKCR7a2VybmVsfSldKQorKyAgICAgICAgCSAgICBBQ19ERUZJTkUoW0tFUk5FTF8yXzZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIExpbnV4IDIuNi54IG9yIExpbnV4IDMueCBvciBMaW51eCA0LnhdKQorICAgICAgICAgCSAgICA7OworIAorICAgICAgICAgICAgICAyLjQuKikgCitAQCAtMjg4LDcgKzI4OCw3IEBACisgCisgICAgICAgICAgICAgICopIAorICAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFt1bnN1cHBvcnRlZCAoJHtrZXJuZWx9KV0pCistICAgICAgICAJICAgIEFDX01TR19FUlJPUihbVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNl0pCisrICAgICAgICAJICAgIEFDX01TR19FUlJPUihbVmFsZ3JpbmQgd29ya3Mgb24ga2VybmVscyAyLjQsIDIuNiwgMy54LCA0LnhdKQorICAgICAgICAgCSAgICA7OworICAgICAgICAgZXNhYworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1NGQwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9maXhlZC1wZXJsLXBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAordGhpcyBpcyBhIHRlbXBvcmFyeSBwYXRjaCB0byB3b3JrYXJvdW5kIGNyb3NzIGNvbXBpbGF0aW9uLgorb3RoZXJ3aXNlIEBQRVJMQCB3aWxsIGJlIHJlcGxhY2VkIHRvIHBlcmwtbmF0aXZlIGJpbmFyeSwKK3RoaXMgY3JlYXRlcyB1bnVzYWJsZSBzY3JpcHRzIGFuZCBmYWlscyBGSUxFUkRFUEVORFMgbWVjaGFuaXNtCisoZXNwLiBycG0pCisKK2EgYmV0dGVyIGZpeCB3b3VsZCBuZWVkOgorIDEuIGNvbmZpZ3VyZS5hYyBzaG91bGQgZGlmZmVyZW50aWF0ZSBQRVJMIGFuZCBIT1NUUEVSTAorIDIuIG9wdGlvbmFsbHkgcmVtb3ZlICR7U1RBR0lOR19ESVJ9IGluICMhIGxpbmUgYmVmb3JlIGRvX2luc3RhbGwKKworOC8zMS8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC0tZ2l0IGEvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbiBiL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KK2luZGV4IDlkYzk1NjUuLmNjNGVmMDUgMTAwNjQ0CistLS0gYS9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCisrKysgYi9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gQ2FjaGVncmluZCdzIGFubm90YXRvci4gICAgICAgICAgICAgICAgICAgICAgIGNnX2Fubm90YXRlLmluIC0tLSMjCitkaWZmIC0tZ2l0IGEvY2FjaGVncmluZC9jZ19kaWZmLmluIGIvY2FjaGVncmluZC9jZ19kaWZmLmluCitpbmRleCA5NTEwNjZlLi44NGMyZGRlIDEwMDY0NAorLS0tIGEvY2FjaGVncmluZC9jZ19kaWZmLmluCisrKysgYi9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBDYWNoZWdyaW5kJ3MgZGlmZmVyZW5jZXIuICAgICAgICAgICAgICAgICAgICAgICAgIGNnX2RpZmYuaW4gLS0tIyMKK2RpZmYgLS1naXQgYS9tYXNzaWYvbXNfcHJpbnQuaW4gYi9tYXNzaWYvbXNfcHJpbnQuaW4KK2luZGV4IGU2ZmZkYmYuLmZiNDU5MDYgMTAwNzU1CistLS0gYS9tYXNzaWYvbXNfcHJpbnQuaW4KKysrKyBiL21hc3NpZi9tc19wcmludC5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorIAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIE1hc3NpZidzIHJlc3VsdHMgcHJpbnRlciAgICAgICAgICAgICAgICAgICAgICAgICBtc19wcmludC5pbiAtLS0jIworZGlmZiAtLWdpdCBhL3BlcmYvdmdfcGVyZi5pbiBiL3BlcmYvdmdfcGVyZi5pbgoraW5kZXggMjE4OGEzMS4uODNhZDAyNCAxMDA2NDQKKy0tLSBhL3BlcmYvdmdfcGVyZi5pbgorKysrIGIvcGVyZi92Z19wZXJmLmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gVmFsZ3JpbmQgcGVyZm9ybWFuY2UgdGVzdGluZyBzY3JpcHQgICAgICAgICAgICAgICAgICB2Z19wZXJmIC0tLSMjCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OWRmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZm9yY2Utbm9zdGFicy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitTdXBwcmVzcyBidWlsZGluZyBwdGVzdCBhcHBzIHdpdGggdGhlIC1nc3RhYnMgb3B0aW9uCisKK0ZvcmNlIHRoZSBjb25maWd1cmUgdGVzdHMgZm9yIC1nc3RhYnMgY29tcGlsZXIgc3VwcG9ydCB0byBmYWlsIHNvIHRoYXQKK3RoZSByZWdyZXNzaW9uIHRlc3RzIGRvbid0IHRyeSB0byBidWlsZCB3aXRoIHRoZSAtZ3N0YWJzIG9wdGlvbi4KK090aGVyd2lzZSwgdGhlIHZhbGdyaW5kIGJ1aWxkIHdoZW4gcHRlc3QgaXMgZW5hYmxlZCBmYWlscyB3aXRoIHRoZQorZXJyb3I6CisgICAgU3RhYnMgZGVidWdpbmZvIG5vdCBzdXBwb3J0ZWQ6CisgICAgLi4vcGFja2FnZS91c3IvbGliL3ZhbGdyaW5kL3B0ZXN0L21lbWNoZWNrL3Rlc3RzL2RlZXBfdGVtcGxhdGVzCisgICAgRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogc3BsaXRfYW5kX3N0cmlwX2ZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZ3N0YWJzIHN1cHBvcnQgaXMgYXBwcm9wcmlhdGUgdXBzdHJlYW0sCisgICAgICAgIGJ1dCBub3QgZm9yIHRoaXMgZGlzdHJvXQorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzU1ZGZiOS4uY2M4YjVlMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc0MywyMiArMTc0Myw3IEBAIEFNX0NPTkRJVElPTkFMKERXQVJGNCwgdGVzdCB4JGFjX2hhdmVfZHdhcmY0ID0geHllcykKKyBDRkxBR1M9JHNhZmVfQ0ZMQUdTCisgCisgCistIyBkb2VzIHRoaXMgY29tcGlsZXIgc3VwcG9ydCAtZ3N0YWJzID8KKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGdjYyBhY2NlcHRzIC1nc3RhYnNdKQorLQorLXNhZmVfQ0ZMQUdTPSRDRkxBR1MKKy1DRkxBR1M9Ii1nc3RhYnMiCistQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworLSAgcmV0dXJuIDA7CistXV0pXSwgWworLWFjX2hhdmVfZ3N0YWJzPXllcworLUFDX01TR19SRVNVTFQoW3llc10pCistXSwgWworIGFjX2hhdmVfZ3N0YWJzPW5vCistQUNfTVNHX1JFU1VMVChbbm9dKQorLV0pCistQ0ZMQUdTPSRzYWZlX0NGTEFHUworIEFNX0NPTkRJVElPTkFMKFtIQVZFX0dTVEFCU10sIFt0ZXN0IHgkYWNfaGF2ZV9nc3RhYnMgPSB4eWVzXSkKKyAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM0OTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0JhY2twb3J0IG9mIGdsaWJjIDIuMTkgYW5kIDIuMjAgYW5kIDIuMjEgc3VwcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB2YWxncmluZC0zLjEwLjEvY29uZmlndXJlLmFjCitAQCAtMTAxOCw2ICsxMDE4LDM0IEBAIGNhc2UgIiR7R0xJQkNfVkVSU0lPTn0iIGluCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisrICAgICAyLjE5KQorKwlBQ19NU0dfUkVTVUxUKDIuMTkgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMTldLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTkueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKysgICAgIDIuMjApCisrCUFDX01TR19SRVNVTFQoMi4yMCBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8yMF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yMC54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworKyAgICAgMi4yMSkKKysJQUNfTVNHX1JFU1VMVCgyLjIxIGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzIxXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIxLnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisrICAgICAyLjIyKQorKwlBQ19NU0dfUkVTVUxUKDIuMjIgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMjJdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMjIueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKyAgICAgIGRhcndpbikKKyAJQUNfTVNHX1JFU1VMVChEYXJ3aW4pCisgCUFDX0RFRklORShbREFSV0lOX0xJQkNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIERhcndpbl0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTY3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK3IxNDU2NiB8IGZsb3JpYW4gfCAyMDE0LTA5LTI0IDE3OjAyOjU0IC0wNTAwIChXZWQsIDI0IFNlcCAyMDE0KSB8IDQgbGluZXMKKworVGhlIHRlc3RidWNrZXRzIG5vbmUvdGVzdHMvcHBjezMyLDY0fSBkaWQgbm90IGJ1aWxkIGluIGNhc2UgdGhlCit0b29sY2hhaW4gZGlkIG5vdCBzdXBwb3J0IC1tYWx0aXZlYyAtbWFiaT1hbHRpdmVjLgorVGhpcyBzaG91bGQgd29yayBub3cuIEZpeGVzIEJaICMzMzg3MzEKKworSW5kZXg6IG5vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY1KQorKysrIGIvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjYpCitAQCAtNzIsOCArNzIsMTIgQEAKKyBhbGxleGVjX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgQEZMQUdfV19OT19OT05OVUxMQAorIAorIGlmIEhBU19BTFRJVkVDCisrQlVJTERfRkxBR19BTFRJVkVDID0gLW1hbHRpdmVjCisrQlVJTERfRkxBR19BQklfQUxUSVZFQyA9IC1tYWJpPWFsdGl2ZWMKKyBBTFRJVkVDX0ZMQUcgPSAtREhBU19BTFRJVkVDCisgZWxzZQorK0JVSUxEX0ZMQUdfQUxUSVZFQyA9CisrQlVJTERfRkxBR19BQklfQUxUSVZFQyA9CisgQUxUSVZFQ19GTEFHID0KKyBlbmRpZgorIAorQEAgLTEwMSwxMSArMTA1LDEyIEBACisgSVNBXzJfMDdfRkxBRyA9CisgZW5kaWYKKyAKKy1qbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAtbWFsdGl2ZWMgXAorLQkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpCisram1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgXAorKwkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19BTFRJVkVDKQorIAorLXRlc3RWTVhfQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtTyAtZyAtV2FsbCAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYyAtREFMVElWRUMgXAorLQkJCS1ER0NDX0NPTVBJTEVSIEBGTEFHX00zMkAKKyt0ZXN0Vk1YX0NGTEFHUyAgPSAkKEFNX0NGTEFHUykgLU8gLWcgLVdhbGwgLURBTFRJVkVDIFwKKysJCQktREdDQ19DT01QSUxFUiBARkxBR19NMzJAICAkKEJVSUxEX0ZMQUdfQUxUSVZFQykgXAorKwkJCSQoQlVJTERfRkxBR19BQklfQUxUSVZFQykKKyAKKyB0ZXN0X2lzYV8yXzA2X3BhcnQxX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoVlNYX0ZMQUcpIFwKKyAJCQlARkxBR19NMzJAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfVlNYKQorSW5kZXg6IG5vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL25vbmUvdGVzdHMvcHBjNjQvTWFrZWZpbGUuYW0JKHJldmlzaW9uIDE0NTY1KQorKysrIGIvbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjYpCitAQCAtNTAsOCArNTAsMTAgQEAKKyBhbGxleGVjX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgQEZMQUdfV19OT19OT05OVUxMQAorIAorIGlmIEhBU19BTFRJVkVDCisrQlVJTERfRkxBR19BTFRJVkVDID0gLW1hbHRpdmVjCisgQUxUSVZFQ19GTEFHID0gLURIQVNfQUxUSVZFQworIGVsc2UKKytCVUlMRF9GTEFHX0FMVElWRUMgPQorIEFMVElWRUNfRkxBRyA9CisgZW5kaWYKKyAKK0BAIC04OCw4ICs5MCw4IEBACisgdGVzdF9pc2FfMl8wNl9wYXJ0M19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKFZTWF9GTEFHKSBcCisgCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX1ZTWCkKKyAKKy1qbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAtbWFsdGl2ZWMgXAorLQkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpCisram1faW5zbnNfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgXAorKwkJCUBGTEFHX002NEAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19BTFRJVkVDKQorIAorIHRlc3RfZGZwMV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyAkKERGUF9GTEFHKSBcCisgCQkJQEZMQUdfTTY0QCAkKEJVSUxEX0ZMQUdTX0RGUCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTlhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK1JlbW92ZSBhcm0gdGVzdHMgdGhhdCBkb24ndCBjb21waWxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDb3JyZWN0cyB0aGUgb3JpZ2luYWwgY29tbWl0IGZvciB0aGUgcGF0Y2ggdGhhdCByZW1vdmVkIEFSTSBwdGVzdCBDRkxBR1MKK3NldHRpbmdzLiBTaW5jZSB0aGUgZmxhZ3MgY291bGQgYmUgc2V0IGJ5IGEgdXNlciwgdGhlIGZsYWdzIHNob3VsZAorYmUga2VwdCBpbiBwbGFjZSBkdXJpbmcgY29tcGlsYXRpb24uICBCeSBrZWVwaW5nIHRoZSBvcmlnaW5hbCB1cC1zdHJlYW0KK0NGTEFHUyBmb3IgdGhlIHRlc3RzLCB0aGVuIGFkZGl0aW9uYWwgdGVzdHMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGUKK2ZvciBhbGwgdGVzdGVkIEFSTSB0dW5pbmdzLgorCitIb3dldmVyLCB0aGVyZSB3ZXJlIHN0aWxsIHR3byB0ZXN0cyBsaXN0ZWQgYmVsb3cgdGhhdCBkaWQgbm90IGNvbXBpbGUKK2ZvciBhbnkgYmVhZ2xlYm9uZSB0dW5pbmcgdGhhdCBpcyB2YWxpZCBmb3IgdmFsZ3JpbmQuIFdpdGggdGhlIHVwZGF0ZWQKK3BhdGNoLCB0aGUgc2V0IG9mIGV4Y2x1ZGVkIEFSTSBwdGVzdHMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgYnVpbGQKK2ZhaWx1cmVzIGFyZToKKyAgaW50ZGl2IC0gZmFpbHMgZm9yIGFsbCBiZWFnbGVib25lIHR1bmluZ3Mgd2l0aCAyIGVycm9yczoKKyAge3N0YW5kYXJkIGlucHV0fTooNDAgb3IgNDEpOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBUaHVtYiBtb2RlIGB1ZGl2IHIzLHI5LHIxMCcKKyAge3N0YW5kYXJkIGlucHV0fTooNzIgb3IgNzMpOiBFcnJvcjogc2VsZWN0ZWQgcHJvY2Vzc29yIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBUaHVtYiBtb2RlIGBzZGl2IHIzLHI5LHIxMCcKKworICB2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUCAtIGZhaWxzIGZvciBhbGwgYmVhZ2xlYm9uZSB0dW5pbmdzIGluIG9uZSBvZgorICB0d28gd2F5czoKKyAgICB3aXRoIG5lb24gdHVuaW5nICgtbWZwdT1uZW9uKSBmYWlscyB3aXRoIEludGVybmFsIENvbXBpbGVyIEVycm9yCisgICAgd2l0aG91dCBuZW9uIHR1bmluZyBmYWlscyB3aXRoIDMgZXJyb3JzOgorICAgIHtzdGFuZGFyZCBpbnB1dH06MzM6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnMzMiBzMTUsczE1LCMxJworICAgIHtzdGFuZGFyZCBpbnB1dH06NTg6IEVycm9yOiBzZWxlY3RlZCBGUFUgZG9lcyBub3Qgc3VwcG9ydAorICAgICAgaW5zdHJ1Y3Rpb24gLS0gYHZjdnQuZjMyLnMzMiBzMTUsczE1LCMzMicKKyAgICB7c3RhbmRhcmQgaW5wdXR9OjEzNjogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIudTMyIHMxNSxzMTUsIzEnCisKK0FmdGVyIGFwcGx5aW5nIHRoaXMgY29tbWl0LCB0aGUgdmFsZ3JpbmQgQVJNIHB0ZXN0cyBjb21waWxlIHdpdGhvdXQKK2Vycm9ycyBmb3IgdHVuaW5nczoKKyAgYXJtdjdbdF1baGZdW2JdWy1uZW9uXSBjb3J0ZXhhOFt0XVtoZl1bLW5lb25dCit3aGVyZSB0aGUgdHVuaW5nIFtvcHRpb25dIHdhcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGJvdGggd2l0aAorYW5kIHdpdGhvdXQgdGhlICdvcHRpb24nLCBhbmQgaW4gY29tYmluYXRpb24gd2l0aCBhbGwgb3RoZXIgb3B0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjEvbm9uZS90ZXN0cy9hcm0vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjEub3JpZy9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQkyMDE1LTA1LTE5IDE1OjExOjU5LjIyNDg0MjkyNyAtMDUwMAorKysrIHZhbGdyaW5kLTMuMTAuMS9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQkyMDE1LTA1LTE5IDE1OjE0OjIwLjgwODg0NzAyOCAtMDUwMAorQEAgLTE3LDkgKzE3LDEzIEBACisgCXZmcC5zdGRvdXQuZXhwIHZmcC5zdGRlcnIuZXhwIHZmcC52Z3Rlc3QgXAorIAl2ZnB2NF9mbWEuc3Rkb3V0LmV4cCB2ZnB2NF9mbWEuc3RkZXJyLmV4cCB2ZnB2NF9mbWEudmd0ZXN0CisgCisrIyBSZW1vdmUgdGhlIGZvbGxvd2luZyB0ZXN0cyB3aGljaCBjYXVzZSBjb21waWxlciBlcnJvcnMgZm9yIGFsbCB0dW5pbmdzCisrIyAgYXZhaWxhYmxlIGZvciBiZWFnbGUgYm9uZSAoc2VlIHJlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaCk6CisrIwlpbnRkaXYKKysjCXZjdnRfZml4ZWRfZmxvYXRfVkZQCisrCisgY2hlY2tfUFJPR1JBTVMgPSBcCisgCWFsbGV4ZWMgXAorLQlpbnRkaXYgXAorIAlsZHJ0IFwKKyAJbGRydF9hcm0gXAorIAluZW9uMTI4IFwKK0BAIC0yNyw3ICszMSw2IEBACisgCXY2aW50QVJNIFwKKyAJdjZpbnRUaHVtYiBcCisgCXY2bWVkaWEgXAorLQl2Y3Z0X2ZpeGVkX2Zsb2F0X1ZGUCBcCisgCXZmcCBcCisgCXZmcHY0X2ZtYQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2NDBmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtcHBjLXRlc3RzLWZhaWxpbmctYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorUmVtb3ZlIHRlc3QgYXBwcyBub3QgYnVpbGRpbmcgd2l0aCBwcGMgYW5kIFBURVNUCisKK0ZvciBtcGM4MzE2LXJkYiBpbiBub25lL3Rlc3RzL3BwYzMyLCB0aGUgb2UgY29tcGlsZXIgb3B0aW9ucyBhcmUKK2luY29uc2lzdGVudCB3aXRoIHRoZSBpbXBvc2VkIHRlc3QgY29tcGlsZXIgb3B0aW9ucyBnZW5lcmF0aW5nIGVycm9ycworYXMgZm9sbG93czoKK3Rlc3RfaXNhXzJfMDdfcGFydDEKK3Rlc3RfaXNhXzJfMDdfcGFydDIKK3Rlc3RfdG0KK3Rlc3RfdG91Y2hfdG0KKyAgICA6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICctbWh0bScKKworam0taW5zbnMKK3Rlc3RWTVgKKyAgICA6IEFsdGlWZWMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHRhcmdldAorCitGb3IgdGhlIGZvbGxvd2luZyB0ZXN0cywgdGhlaXIgaW5saW5lIGFzc2VtYmxlciBpcyBpbmNvbnNpc3RlbnQgd2l0aAordGhlIHBwY2UzMDBjMyB2YXJpYW50Ogorcm91bmQuYzozOTMKK3Bvd2VyNStfcm91bmQuYzo5OAorICAgIDogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisKK0ZvciB0aGUgZm9sbG93aW5nIHRlc3RzLCB3aXRoIGJvdGggbXBjODMxNi1yZGIgYW5kIHdpdGggcWVtdXBwYyBic3AsCit0aGUgaW5saW5lIGFzc2VtYmVyIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBvZSBjb21waWxlciBtYWNoaW5lCit0dW5pbmc6CitJbiBtZW1jaGVjay90ZXN0cy9wcGMzMgorIHBvd2VyX0lTQTJfMDUuYzo1NgorSW4gbm9uZS90ZXN0cy9wcGMzMgorIHRlc3RfZGZwMS5jOjg1CisgdGVzdF9kZnAyLmM6MTYwCisgdGVzdF9kZnAzLmM6MTU3CisgdGVzdF9kZnA0LmM6NzMKKyB0ZXN0X2RmcDUuYzo3MworICAgIDogaW1wb3NzaWJsZSBjb25zdHJhaW50IGluICdhc20nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMC9tZW1jaGVjay90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCitAQCAtNyw4ICs3LDcgQEAgRVhUUkFfRElTVCA9ICQobm9pbnN0X1NDUklQVFMpIFwKKyAJcG93ZXJfSVNBMl8wNS5zdGRlcnIuZXhwIHBvd2VyX0lTQTJfMDUuc3Rkb3V0LmV4cCBwb3dlcl9JU0EyXzA1LnZndGVzdCBcCisgCXBvd2VyX0lTQTJfMDUuc3Rkb3V0LmV4cF9XaXRob3V0X0ZQUE8KKyAKKy1jaGVja19QUk9HUkFNUyA9IFwKKy0JcG93ZXJfSVNBMl8wNQorK2NoZWNrX1BST0dSQU1TID0gCisgCisgcG93ZXJfSVNBMl8wNV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChXRVJST1IpIC1XaW5saW5lIC1XYWxsIC1Xc2hhZG93IC1nIFwKKyAJCS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIEBGTEFHX00zMkAKK0luZGV4OiB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL25vbmUvdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorQEAgLTUyLDE2ICs1Miw4IEBAIGNoZWNrX1BST0dSQU1TID0gXAorIAlhbGxleGVjIFwKKyAJYnVnMTI5MzkwLXBwYzMyIFwKKyAJYnVnMTM5MDUwLXBwYzMyIFwKKy0JbGRzdHJldiBsc3cgam0taW5zbnMgbWZ0b2NyZiBtY3JmcyByb3VuZCB0ZXN0X2Z4IHRlc3RfZ3ggXAorLQl0ZXN0Vk1YIHR3aSB0dyB4bGNfZGJsX3UzMiBwb3dlcjUrX3JvdW5kIHBvd2VyNl9iY21wIFwKKy0JdGVzdF9pc2FfMl8wNl9wYXJ0MSBcCistCXRlc3RfaXNhXzJfMDZfcGFydDIgXAorLQl0ZXN0X2lzYV8yXzA2X3BhcnQzIFwKKy0JdGVzdF9kZnAxIHRlc3RfZGZwMiB0ZXN0X2RmcDMgdGVzdF9kZnA0IHRlc3RfZGZwNSBcCistCXRlc3RfaXNhXzJfMDdfcGFydDEgXAorLQl0ZXN0X2lzYV8yXzA3X3BhcnQyIFwKKy0JdGVzdF90bSBcCistCXRlc3RfdG91Y2hfdG0gXAorKwlsZHN0cmV2IGxzdyBtZnRvY3JmIG1jcmZzIHRlc3RfZnggdGVzdF9neCBcCisrCXR3aSB0dyB4bGNfZGJsX3UzMiBwb3dlcjZfYmNtcCBcCisgCWxkc3RfbXVsdGlwbGUgXAorIAlkYXRhLWNhY2hlLWluc3RydWN0aW9ucworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjlhNzJlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCisKKyMgcnVuLXB0ZXN0IC0gJ3B0ZXN0JyB0ZXN0IGluZnJhc3RydWN0dXJlIHNoZWxsIHNjcmlwdCB0aGF0CisjICAgd3JhcHMgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gc2NyaXB0IHZnX3JlZ3Rlc3QuIAorIyAgIE11c3QgYmUgcnVuIGluIHRoZSAvdXNyL2xpYi92YWxncmluZC9wdGVzdCBkaXJlY3RvcnkuIAorIworIyBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworVkFMR1JJTkRMSUI9QGxpYmRpckAvdmFsZ3JpbmQKK3Rlc3RzL3ZnX3JlZ3Rlc3QgLS1hbGwgXAorICAgIC0tdmFsZ3JpbmQ9L3Vzci9iaW4vdmFsZ3JpbmQgLS12YWxncmluZC1saWI9JFZBTEdSSU5ETElCIFwKKwktLXlvY3RvLXB0ZXN0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiMGVmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaApAQCAtMCwwICsxLDIzNSBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcy4gVGhlIHBhdGhzIHRvIHRoZXNlIGZpbGVzIG5lZWQgdG8gYmUgZnVsbHkgc3BlY2lmaWVkIGluCit0aGUgb3V0IG9mIHRyZWUgYnVpbGQgY2FzZS4gZ2xpYmMtMi5YLnN1cHAgaXMgYSBnZW5lcmF0ZWQgZmlsZSBzbyB0aGUgZnVsbCBwYXRoCitpcyBkZWxpYmVyYXRlbHkgbm90IHNwZWNpZmllZCBpbiB0aGF0IGNhc2UuCisKK1JQIDIwMTMvMDMvMjMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjkuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYworQEAgLTMyNSwyNiArMzI1LDI2IEBAIGNhc2UgIiR7aG9zdF9vc30iIGluCisgCSAgICAgOS4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gOS54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuNSBMZW9wYXJkXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF81LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luOS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2Rhcndpbjkuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW45LWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMC4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTAueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF82LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgCSAgICAgMTEuKikKKyAJCSAgQUNfTVNHX1JFU1VMVChbRGFyd2luIDExLnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC43IExpb25dKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzcsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMi4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTIueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjggTW91bnRhaW4gTGlvbl0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfOCwgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEyLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEyLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworICAgICAgICAgICAgICAqKSAKKyAJCSAgQUNfTVNHX1JFU1VMVChbdW5zdXBwb3J0ZWQgKCR7a2VybmVsfSldKQorQEAgLTc5OSwxMjQgKzc5OSwxMjQgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgIDIuMikKKyAJQUNfTVNHX1JFU1VMVCgyLjIgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yLnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjItTGludXhUaHJlYWRzLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjItTGludXhUaHJlYWRzLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgIDIuMykKKyAJQUNfTVNHX1JFU1VMVCgyLjMgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfM10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4zLnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMy5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAyLjQpCisgCUFDX01TR19SRVNVTFQoMi40IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzRdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNC54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgMi41KQorIAlBQ19NU0dfUkVTVUxUKDIuNSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl81XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjUueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi41LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi41LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuNikKKyAJQUNfTVNHX1JFU1VMVCgyLjYgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi42LnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuNi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjcpCisgCUFDX01TR19SRVNVTFQoMi43IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzddLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNy54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi44KQorIAlBQ19NU0dfUkVTVUxUKDIuOCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl84XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjgueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuOSkKKyAJQUNfTVNHX1JFU1VMVCgyLjkgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfOV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi45LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjEwKQorIAlBQ19NU0dfUkVTVUxUKDIuMTAgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTBdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTAueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTEpCisgCUFDX01TR19SRVNVTFQoMi4xMSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorICAgICAgICAgOzsKKyAgICAgIDIuMTIpCisgCUFDX01TR19SRVNVTFQoMi4xMiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMi54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xMykKKyAJQUNfTVNHX1JFU1VMVCgyLjEzIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzEzXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjEzLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE0KQorIAlBQ19NU0dfUkVTVUxUKDIuMTQgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTRdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTQueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTUpCisgCUFDX01TR19SRVNVTFQoMi4xNSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xNV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNS54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNikKKyAJQUNfTVNHX1JFU1VMVCgyLjE2IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE2XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE2LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE3KQorIAlBQ19NU0dfUkVTVUxUKDIuMTcgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTddLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTcueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTgpCisgCUFDX01TR19SRVNVTFQoMi4xOCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xOF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xOC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgZGFyd2luKQorIAlBQ19NU0dfUkVTVUxUKERhcndpbikKK0BAIC05MjYsNyArOTI2LDcgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAgICAgIGJpb25pYykKKyAJQUNfTVNHX1JFU1VMVChCaW9uaWMpCisgCUFDX0RFRklORShbQklPTklDX0xJQkNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIEJpb25pY10pCistCURFRkFVTFRfU1VQUD0iYmlvbmljLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvYmlvbmljLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgKikKK0BAIC05NDMsMTEgKzk0MywxMSBAQCBBQ19TVUJTVChHTElCQ19WRVJTSU9OKQorICMgYXR0ZW1wdCB0byBkZXRlY3Qgd2hldGhlciBzdWNoIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIG9uIHRoZQorICMgYnVpbGQgbWFjaGluZSAob3IgZXZlbiBpZiBhbnkgWCBmYWNpbGl0aWVzIGFyZSBwcmVzZW50KTsganVzdAorICMgYWRkIHRoZSBzdXBwcmVzc2lvbnMgYW50aWRpc2lycmVnYXJkbGVzcy4KKy1ERUZBVUxUX1NVUFA9InhmcmVlLTQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistREVGQVVMVF9TVVBQPSJ4ZnJlZS0zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci94ZnJlZS00LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorK0RFRkFVTFRfU1VQUD0iJHNyY2Rpci94ZnJlZS0zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAorICMgQWRkIGdsaWJjIGFuZCBYMTEgc3VwcHJlc3Npb25zIGZvciBleHAtc2djaGVjaworLURFRkFVTFRfU1VQUD0iZXhwLXNnY2hlY2suc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL2V4cC1zZ2NoZWNrLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJlOWNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaApAQCAtMCwwICsxLDI1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgY29uZmlnXQorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB2YWxncmluZC0zLjEwLjAub3JpZy9ub25lL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgdmFsZ3JpbmQtMy4xMC4wL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yODAsNyArMjgwLDYgQEAgdGhyZWFkZWRfZm9ya19MREFERAk9IC1scHRocmVhZAorIHRocmVhZGVkZXJybm9fTERBREQJPSAtbHB0aHJlYWQKKyB0bHNfU09VUkNFUwkJPSB0bHMuYyB0bHMyLmMKKyB0bHNfREVQRU5ERU5DSUVTCT0gdGxzLnNvIHRsczIuc28KKy10bHNfTERGTEFHUwkJPSAtV2wsLXJwYXRoLCQoYWJzX3RvcF9idWlsZGRpcikvbm9uZS90ZXN0cworIHRsc19MREFERAkJPSB0bHMuc28gdGxzMi5zbyAtbHB0aHJlYWQKKyB0bHNfc29fU09VUkNFUwkJPSB0bHNfc28uYworIHRsc19zb19ERVBFTkRFTkNJRVMJPSB0bHMyLnNvCitAQCAtMjg4LDcgKzI4Nyw3IEBAIGlmIFZHQ09ORl9PU19JU19EQVJXSU4KKyAgdGxzX3NvX0xERkxBR1MJCT0gLWR5bmFtaWMgLWR5bmFtaWNsaWIgLWFsbF9sb2FkIC1mcGljCisgIHRsc19zb19MREFERAkJPSBgcHdkYC90bHMyLnNvCisgZWxzZQorLSB0bHNfc29fTERGTEFHUwkJPSAtV2wsLXJwYXRoLCQoYWJzX3RvcF9idWlsZGRpcikvbm9uZS90ZXN0cyAtc2hhcmVkIC1mUElDCisrIHRsc19zb19MREZMQUdTCQk9IC1zaGFyZWQgLWZQSUMKKyAgdGxzX3NvX0xEQURECQk9IHRsczIuc28KKyBlbmRpZgorIHRsc19zb19DRkxBR1MJCT0gJChBTV9DRkxBR1MpIC1mUElDCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmJhOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kXzMuMTAuMS5iYgpAQCAtMCwwICsxLDEwNSBAQAorU1VNTUFSWSA9ICJWYWxncmluZCBtZW1vcnkgZGVidWdnZXIgYW5kIGluc3RydW1lbnRhdGlvbiBmcmFtZXdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vdmFsZ3JpbmQub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3ZhbGdyaW5kLm9yZy9zdXBwb3J0L2J1Z19yZXBvcnRzLmh0bWwiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ2MDgyMTY3YTMxNGQ3ODVkMDEyYTI0NDc0OGQ4MDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9wdWJfdG9vbF9iYXNpY3MuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI5O21kNT1lNzA3MTkyOWE1MGQ0YjBmYzI3YTMwMTRiMzE1YjBmNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3ZhbGdyaW5kLmg7YmVnaW5saW5lPTE7ZW5kbGluZT01NjttZDU9OTJkZjhhMWJkZTU2ZmUyYWY3MDkzMWZmNTVmNjYyMmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5ET0NTO21kNT04ZmRlYjVhYmRiMjM1YTA4ZTc2ODM1ZjhmMzI2MDIxNSIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSIKK0RFUEVORFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJHtYMTFERVBFTkRTfScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJ2Jvb3N0JywgJycsIGQpfSBcCisgICAgICAgICIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnZhbGdyaW5kLm9yZy9kb3dubG9hZHMvdmFsZ3JpbmQtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhlZC1wZXJsLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGJ1aWxkZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZvcmNlLW5vc3RhYnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5hYmxlLmJ1aWxkaW5nLm9uLjQueC5rZXJuZWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjBkZGFlOTYyYmM3OWU3Yzk1Y2ZjNDY2NzI0NTcwN2YiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmEyNTNkYzI2ZGRiNjYxYjYyNjlkZjU4MTQ0ZWZmNjA3ZWEzZjc2YTliY2ZlNTc0YjBjNzcyNmUxZGZjYjk5NyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NHxtaXBzfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4JworQ09NUEFUSUJMRV9IT1NUX2FybXY3YSA9ICdhcm0uKi1saW51eCcKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS10bHMgLS13aXRob3V0LW1waWNjIgorRVhUUkFfT0VDT05GX2FybXY3YSA9ICItLWVuYWJsZS10bHMgLWhvc3Q9YXJtdjctbm9uZS1saW51eC1nbnVlYWJpIC0td2l0aG91dC1tcGljYyIKK0VYVFJBX09FQ09ORiArPSAiJHtAWyctLWVuYWJsZS1vbmx5MzJiaXQnLCctLWVuYWJsZS1vbmx5NjRiaXQnXVtkLmdldFZhcignU0lURUlORk9fQklUUycsIFRydWUpICE9ICczMiddfSIKK0VYVFJBX09FTUFLRSA9ICItdyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLW0gNjQ0ICR7Qn0vZGVmYXVsdC5zdXBwICR7RH0vJHtsaWJkaXJ9L3ZhbGdyaW5kLworfQorCitSREVQRU5EU18ke1BOfSArPSAicGVybCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtQTn0vKi8uZGVidWcvKiIKKworIyB2YWxncmluZCBuZWVkcyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgbGQuc28gYXQgcnVudGltZSBpbiBvcmRlciB0bworIyByZWRpcmVjdCBmdW5jdGlvbnMgbGlrZSBzdHJsZW4uCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtUQ0xJQkN9LWRiZyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiBzZWQgcGVybCBnbGliYy11dGlscyBwZXJsLW1vZHVsZS1maWxlLWdsb2IiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgb2VfcnVubWFrZSBjaGVjayBDRkxBR1M9IiR7Q0ZMQUdTfSAtTzAiIENYWEZMQUdTPSIke0NYWEZMQUdTfSAtTzAiCit9CisKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICBjaG1vZCAreCAke0J9L3Rlc3RzL3ZnX3JlZ3Rlc3QKKworICAgICMgVGhlIHRlc3QgYXBwbGljYXRpb24gYmluYXJpZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZC4KKyAgICAjIEdyYWIgdGhlbSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisgICAgIworICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZSBzY3JpcHRzIGFuZCBkYXRhIGZpbGVzIHRoYXQgYXJlIG5vdAorICAgICMgY29waWVkIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuICBUaGV5IG11c3QgYmUgY29waWVkIGZyb20gdGhlCisgICAgIyBzb3VyY2UgZGlyZWN0b3J5LiAKKyAgICBzYXZlZF9kaXI9JFBXRAorICAgIGZvciBwYXJlbnRfZGlyIGluICR7U30gJHtCfSA7IGRvCisgICAgICAgIGNkICRwYXJlbnRfZGlyCisKKyAgICAgICAgIyBleGNsdWRlIHNoZWxsIG9yIHRoZSBwYWNrYWdlIHdvbid0IGluc3RhbGwKKyAgICAgICAgcm0gLXJmIG5vbmUvdGVzdHMvc2hlbGwqIDI+L2Rldi9udWxsCisKKyAgICAgICAgc3ViZGlycz0idGVzdHMgY2FjaGVncmluZC90ZXN0cyBjYWxsZ3JpbmQvdGVzdHMgZHJkL3Rlc3RzIGhlbGdyaW5kL3Rlc3RzIG1hc3NpZi90ZXN0cyBtZW1jaGVjay90ZXN0cyBub25lL3Rlc3RzIgorCisgICAgICAgICMgR2V0IHRoZSB2ZyB0ZXN0IHNjcmlwdHMsIGZpbHRlcnMsIGFuZCBleHBlY3RlZCBmaWxlcworICAgICAgICBmb3IgZGlyIGluICRzdWJkaXJzIDsgZG8KKyAgICAgICAgICAgIGZpbmQgJGRpciB8IGNwaW8gLXB2ZHUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgZG9uZQorICAgICAgICBjZCAkc2F2ZWRfZGlyCisgICAgZG9uZQorCisgICAgIyBjbGVhbiBvdXQgYnVpbGQgYXJ0aWZhY3RzIGJlZm9yZSBidWlsZGluZyB0aGUgcnBtCisgICAgZmluZCAke0R9JHtQVEVTVF9QQVRIfSBcCisgICAgICAgICBcKCAtbmFtZSAiTWFrZWZpbGUqIiBcCisgICAgICAgIC1vIC1uYW1lICIqLm8iIFwKKyAgICAgICAgLW8gLW5hbWUgIiouYyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5TIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmgiIFwpIFwKKyAgICAgICAgLWV4ZWMgcm0ge30gXDsKKworICAgICMgbmVlZGVkIGJ5IG1hc3NpZiB0ZXN0cworICAgIGNwICR7Qn0vbWFzc2lmL21zX3ByaW50ICR7RH0ke1BURVNUX1BBVEh9L21hc3NpZi9tc19wcmludAorCisgICAgIyBoYW5kbGUgbXVsdGlsaWIKKyAgICBzZWQgLWkgczpAbGliZGlyQDoke2xpYmRpcn06ZyAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL2ZpbGVzL2NhdGFsb2cueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODgzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKzxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1IiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRUxFTUVOVFMgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCIgY2F0YWxvZz0iLi9kb2Nib29rLXhtbC54bWwiLz4KKzxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYWwgV2Fsc2gvL0V4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvIiBjYXRhbG9nPSIuL2RvY2Jvb2steHNsLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14c2wueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU0N2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvLTAuMC4yNi9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitjb25maWd1cmUuaW46IGRyb3AgdGhlIHRlc3Qgb2YgeG1sbGludCBhbmQgeHNsdHByb2MKKworVGhlIHRlc3QgaXMgdW5uZWNlc3NhcnksIHRoZSB4bWxsaW50IGFuZCB4c2x0cHJvYyB3ZXJlIGV4cGxpY2l0bHkKK2FkZGVkIHRvIFJERVBFTkRTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtNDIsMTAgKzQyLDEwIEBAIEFDX0FSR19WQVIoW0xPQ0FMRV0sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgbG9jYWxlJyBwcm9ncmFtLl0pCisgQUNfUEFUSF9QUk9HKFtMT0NBTEVdLCBbbG9jYWxlXSwgW2xvY2FsZV0pCisgCisgQUNfQVJHX1ZBUihbWE1MTElOVF0sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgeG1sbGludCcgcHJvZ3JhbS5dKQorLUFDX1BBVEhfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorK2RubCBBQ19QQVRIX1BST0coW1hNTExJTlRdLCBbeG1sbGludF0sIFt4bWxsaW50XSkKKyAKKyBBQ19BUkdfVkFSKFtYU0xUUFJPQ10sIFtOYW1lIGFuZCBwYXRoIG9mIHRoZSBgeHNsdHByb2MnIHByb2dyYW0uXSkKKy1BQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSwgW3hzbHRwcm9jXSkKKytkbmwgQUNfUEFUSF9QUk9HKFtYU0xUUFJPQ10sIFt4c2x0cHJvY10sIFt4c2x0cHJvY10pCisgCisgZG5sCisgZG5sIHRvb2xjaGFpbnMKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2EwMTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3htbHRvL3htbHRvXzAuMC4yNi5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIkEgc2hlbGwtc2NyaXB0IHRvb2wgZm9yIGNvbnZlcnRpbmcgWE1MIGZpbGVzIHRvIHZhcmlvdXMgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy94bWx0by8iCitTRUNUSU9OID0gImRvY3MveG1sdG8iCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMveC9tL3htbHRvL3htbHRvLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuaW4tZHJvcC10aGUtdGVzdC1vZi14bWxsaW50LWFuZC14c2x0cHJvYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jYXRhbG9nLnhtbCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMGNjYThiZTc4N2JhMDFlMDBjNjE4Y2IzOTBjOTg4YjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZkOGQyYTI2MDc3YmUxZDU1NjZkZmUyMmRkNjYwOTlhZTRmNDYwMGRlYTk3ZDZlMTEzYTJjYzViODcwODk3NyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyB4bWx0byBuZWVkcyBnZXRvcHQveG1sbGludC94c2x0cHJvYy9iYXNoIGF0IHJ1bnRpbWUKK1JERVBFTkRTXyR7UE59ID0gImRvY2Jvb2steG1sLWR0ZDQgXAorICAgICAgICAgICAgICAgICAgZG9jYm9vay14c2wtc3R5bGVzaGVldHMgXAorICAgICAgICAgICAgICAgICAgdXRpbC1saW51eCBcCisgICAgICAgICAgICAgICAgICBsaWJ4bWwyIFwKKyAgICAgICAgICAgICAgICAgIGJhc2ggXAorIgorUkRFUEVORFNfJHtQTn1fYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAorICAgICAgICAgICAgICAgICAgbGlieHNsdC1iaW4gXAorIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgWE1MTElOVD14bWxsaW50IFhTTFRQUk9DPXhzbHRwcm9jIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKyAgICBpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9jYXRhbG9nLnhtbCAke0R9JHtzeXNjb25mZGlyfS94bWwvY2F0YWxvZy54bWwKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS94bWx0byBYTUxfQ0FUQUxPR19GSUxFUz0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W3JkZXB0YXNrXSA9ICJkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MDJlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy95YXNtL3lhc21fMS4zLjAuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJ4ODYgKFNTRSkgYXNzZW1ibGVyIHN1cHBvcnRpbmcgTkFTTSBhbmQgR0FTLXN5bnRheGVzIgorTElDRU5TRSA9ICJCU0QiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRvcnRhbGwubmV0L3Byb2plY3RzL3lhc20vIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMTJkODkwMzUwOGZiNmJmZDQ5ZDhkODJjNjE3MGRkOSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LnRvcnRhbGwubmV0L3Byb2plY3RzL3lhc20vcmVsZWFzZXMvJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM5ZTU4Njc1MWZmNzg5YjM0YjFmMjFkNTcyZDk2YWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2RjZTY2MDFiNDk1ZjViM2Q0NWI1OWY3ZDI0OTJhMzQwZWU3ZTg0YjViZWNhMTdlNDhmODYyNTAyYmQ1NjAzZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLW5hdGl2ZV8xLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFjMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiCkBAIC0wLDAgKzEsMjAgQEAKKyMgemlzb2ZzLXRvb2xzLW5hdGl2ZSBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBjcmVhdGluZyBjb21wcmVzc2VkIENELVJPTSBmaWxlc3lzdGVtcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlY29kZS5jb20vcHJvamVjdHMvemlzb2ZzLXRvb2xzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInpsaWItbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy96aXNvZnMtdG9vbHMvemlzb2ZzLXRvb2xzLSR7UFZ9LnRhci5iejIvMmQwZWQ4YzlhMWY2MGI0NWY5NDliMTM2ZjliZTFmNmMvemlzb2ZzLXRvb2xzLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZDBlZDhjOWExZjYwYjQ1Zjk0OWIxMzZmOWJlMWY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZTRlNTNlNDkxNDkzNGQ0MTY2MDI0OGZiNTlkM2M4NzYxZjFmMWZkMTgwZDVlYzk5M2MxN2RkYjNhZmQwNGYzIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0ke0R9IGJpbmRpcj0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhZTI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gN2Y4MTFkOWM0ZWJjOTQ0NGU2MTNlMjUxYzMxZDZiZjUzN2EyNGRjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE2OjM1OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSBnbGliYyBhc3N1bXB0aW9uCisKK2dsaWJjIHRpbWUuaCBoZWFkZXIgaGFzIGFuIHVuZG9jdW1lbnRlZCBfX2lzbGVhcCBtYWNybwordGhhdCB3ZSBhcmUgdXNpbmcgYW5mIG11c2wgaXMgbWlzc2luZyBpdC4KK1NpbmNlIGl0IGlzIHVuZG9jdW1lbnRlZCAmIGRvZXMgbm90IGFwcGVhcgorb24gYW55IG90aGVyIGxpYmMsIHN0b3AgdXNpbmcgaXQgYW5kIGp1c3QgZGVmaW5lIHRoZSBtYWNybyBpbgorbG9jYWxseSAgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBwYXJzZXRpbWUueSB8IDExICsrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BhcnNldGltZS55IGIvcGFyc2V0aW1lLnkKK2luZGV4IDcwMDVlODguLjMyNGU2ZDMgMTAwNjQ0CistLS0gYS9wYXJzZXRpbWUueQorKysrIGIvcGFyc2V0aW1lLnkKK0BAIC04LDYgKzgsOSBAQAorIAorICNkZWZpbmUgWVlERUJVRyAxCisgCisrI2RlZmluZSBpc19sZWFwX3llYXIoeSkgXAorKyAgICAoKHkpICUgNCA9PSAwICYmICgoeSkgJSAxMDAgIT0gMCB8fCAoeSkgJSA0MDAgPT0gMCkpCisrCisgc3RydWN0IHRtIGV4ZWN0bTsKKyBzdGF0aWMgaW50IGlzZ210OworIHN0YXRpYyBpbnQgeWVhcnNwZWM7CitAQCAtMjE3LDggKzIyMCw4IEBAIGRhdGUgICAgICAgICAgICA6IG1vbnRoX25hbWUgZGF5X251bWJlcgorIAkJCQkgbW51bSA9PSAxMikgJiYgZG51bSA+IDMxKQorIAkJCSAgICB8fCAoKG1udW0gPT0gIDQgfHwgbW51bSA9PSAgNiB8fCBtbnVtID09ICA5IHx8CisgCQkJICAgICAgICAgbW51bSA9PSAxMSkgJiYgZG51bSA+IDMwKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIF9faXNsZWFwKHludW0rMTkwMCkpCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhX19pc2xlYXAoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKysJCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFpc19sZWFwX3llYXIoeW51bSsxOTAwKSkKKyAJCQkgICApCisgCQkJeworIAkJCSAgICB5eWVycm9yKCJFcnJvciBpbiBkYXkgb2YgbW9udGgiKTsKK0BAIC0yNjEsOCArMjY0LDggQEAgZGF0ZSAgICAgICAgICAgIDogbW9udGhfbmFtZSBkYXlfbnVtYmVyCisgCQkJCSBtbnVtID09IDEyKSAmJiBkbnVtID4gMzEpCisgCQkJICAgIHx8ICgobW51bSA9PSAgNCB8fCBtbnVtID09ICA2IHx8IG1udW0gPT0gIDkgfHwKKyAJCQkgICAgICAgICBtbnVtID09IDExKSAmJiBkbnVtID4gMzApCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgX19pc2xlYXAoeW51bSsxOTAwKSkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFfX2lzbGVhcCh5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIGlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIWlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorIAkJCSAgICkKKyAJCQl7CisgCQkJICAgIHl5ZXJyb3IoIkVycm9yIGluIGRheSBvZiBtb250aCIpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvYXRkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhMzc5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMKKyMgU3RhcnRzIGF0IGRhZW1vbgorIworCit1bWFzayAwNzcKKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3N0YXJ0KCkgeworCWVjaG8gLW4gIlN0YXJ0aW5nIGF0ZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vYXRkLnBpZCAtLWJhY2tncm91bmQgLS1leGVjIC91c3Ivc2Jpbi9hdGQgLS0gLWYKKwllY2hvICJPSyIKK30KK3N0b3AoKSB7CisJZWNobyAtbiAiU3RvcHBpbmcgYXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuL2F0ZC5waWQKKwllY2hvICJPSyIKK30KK3Jlc3RhcnQoKSB7CisJc3RvcAorCXN0YXJ0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydAorCTs7CisgIHN0b3ApCisJc3RvcAorCTs7CisgIHJlc3RhcnR8cmVsb2FkKQorCXJlc3RhcnQKKwk7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9hdGQKKwk7OworICAqKQorCWVjaG8gJCJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxzdGF0dXN9IgorCWV4aXQgMQorZXNhYworCitleGl0ICQ/CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGM4NDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1Kb2Igc3Bvb2xpbmcgdG9vbHMKK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2F0ZCAtZgorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVlZmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGF0LTMuMS4xMi9jb25maWd1cmUuYWMJMjAxMS0wNi0yMyAxNDo1MTowMy42NTM1NzI5NDUgKzA4MDAKKysrKyBhdC0zLjEuMTIvY29uZmlndXJlLmFjLm5ldwkyMDExLTA2LTI3IDE2OjEyOjE0LjkwMzU3Mjk0NSArMDgwMAorQEAgLTgxLDEwICs4MSwxOCBAQAorIEFDX0ZVTkNfVlBSSU5URgorIEFDX0ZVTkNfR0VUTE9BREFWRworIEFDX0NIRUNLX0ZVTkNTKGdldGN3ZCBta3RpbWUgc3RyZnRpbWUgc2V0cmV1aWQgc2V0cmVzdWlkIHNpZ2FjdGlvbiB3YWl0cGlkKQorKworK0FDX0FSR19XSVRIKFtwYW1dLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtcGFtXSwgW3dpdGhvdXQgUEFNIHN1cHBvcnRdKV0pCisrCisraWYgdGVzdCAieCR3aXRoX3BhbSIgIT0geG5vOyB0aGVuCisgQUNfQ0hFQ0tfSEVBREVSUyhzZWN1cml0eS9wYW1fYXBwbC5oLCBbCisgICBQQU1MSUI9Ii1scGFtIgorLSAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSkKKy1dKQorKyAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSldLAorKyAgIFtpZiB0ZXN0ICJ4JHdpdGhfcGFtIiA9IHh5ZXM7IHRoZW4KKysgICBBQ19NU0dfRVJST1IoW1BBTSBzZWxlY3RlZCBidXQgc2VjdXJpdHkvcGFtX21pc2MuaCBub3QgZm91bmRdKQorKyAgIGZpXSkKKytmaQorCisgZG5sIENoZWNraW5nIGZvciBwcm9ncmFtcworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWVmMDAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworcG9zaXh0bS5bY2hdIGZpbGVzIGFyZSByZXBsYWNlZCB3aXRoIGdwbHYyIHZlcnNpb24gZnJvbSB0aGVzZSBsb2NhdGlvbnM6CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5jO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5oO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEgCisKK3VwZGF0ZSB0aGUgQ29weXJpZ2h0IGZpbGUgaW5mb3JtYXRpb24gdG8gcmVmbGVjdCB0aGUgcmVwbGFjZWQgZmlsZXMuCisKK0RhdGU6IDIwMTAvMDgvMzEKK05pdGluIEEgS2FtYmxlIG5pdGluLmEua2FtYmxlQGludGVsLmNvbQorCitJbmRleDogYXQtMy4xLjEyL0NvcHlyaWdodAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL0NvcHlyaWdodAorKysrIGF0LTMuMS4xMi9Db3B5cmlnaHQKK0BAIC0zMSwxMCArMzEsMTAgQEAgVGhlIGZpbGVzIHBvc2l4dG0uYyBhbmQgcG9zaXh0bS5oIGhhdmUgdAorICAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgICAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZjNlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorbWFrZSAtaiB3YXMgZmFpbGluZyBzb21ldGltZXNhIGxpa2UgdGhpcworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvbml0aW4vYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggLUkuIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLW8gYXRkIGF0ZC5vIGRhZW1vbi5vICAtbGZsICAtbHBhbSAtV2wsLU8xIC1XbCwtLWFzLW5lZWRlZAorfCBwYXJzZXRpbWUubDo1OjE5OiBmYXRhbCBlcnJvcjogeS50YWIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorfCBtYWtlOiAqKiogW2xleC55eS5vXSBFcnJvciAxCit8IG1ha2U6ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCisKK0ZpeGVkIHRoZSBpc3N1ZSBieSBhZGRpbmcgYSBkZXBlbmRlbmN5IGluIHRoZSBtYWtlZmlsZS4KK05pdGluIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEwLzA5LzAyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGF0LTMuMS4xMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL01ha2VmaWxlLmluCisrKysgYXQtMy4xLjEyL01ha2VmaWxlLmluCitAQCAtODMsNiArODMsOCBAQCB5LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisgbGV4Lnl5LmM6IHBhcnNldGltZS5sCisgCSQoTEVYKSAtaSBwYXJzZXRpbWUubAorIAorK3BhcnNldGltZS5sOiB5LnRhYi5oCisrCisgYXRydW46IGF0cnVuLmluCisgCWNvbmZpZ3VyZQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyYTRjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxNTBiNjNhOTM2YWY3MWI5OTJhM2E3YjBmYzJkMjQ5N2U1MWZjODAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI4IEphbiAyMDE1IDIzOjUyOjAwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgoreS50YWIuYzoxMDAxOjA6IGVycm9yOiB1bnRlcm1pbmF0ZWQgI2lmCisKK0xldCAiJChZQUNDKSAtZCBwYXJzZXRpbWUueSIgb25seSBydW4gb25jZSB3aWxsIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAyYTliOTE4Li5hYTdjMDRhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzUsNyArNzUsOSBAQCBhdDogJChBVE9CSkVDVFMpCisgYXRkOiAkKFJVTk9CSkVDVFMpCisgCSQoQ0MpICQoTERGTEFHUykgLW8gYXRkICQoUlVOT0JKRUNUUykgJChMSUJTKSAkKFBBTUxJQikKKyAKKy15LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisreS50YWIuaDogeS50YWIuYworKworK3kudGFiLmM6IHBhcnNldGltZS55CisgCSQoWUFDQykgLWQgcGFyc2V0aW1lLnkKKyAKKyBsZXgueXkuYzogcGFyc2V0aW1lLmwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjZWI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitvZSBkb2Vzbid0IHN1cHBvcnQgIkBpbmNsdWRlIiwgdXNlIHRoZSBjb25jcmV0ZSBkaXJlY3RpdmUgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorSW5kZXg6IGF0LTMuMS4xNS9wYW0uY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xNS5vcmlnL3BhbS5jb25mCisrKysgYXQtMy4xLjE1L3BhbS5jb25mCitAQCAtMSwxMCArMSwxMSBAQAorICMKKyAjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgYXQgZGFlbW9uCisgIworKyAKKythdXRoICAgIHJlcXVpcmVkICAgIHBhbV9lbnYuc28KKythdXRoICAgIGluY2x1ZGUgICAgIGNvbW1vbi1hdXRoCisrYWNjb3VudCBpbmNsdWRlICAgICBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gaW5jbHVkZSAgICAgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9saW1pdHMuc28KKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9sb2dpbnVpZC5zbworIAorLWF1dGgJcmVxdWlyZWQJcGFtX2Vudi5zbworLUBpbmNsdWRlIGNvbW1vbi1hdXRoCistQGluY2x1ZGUgY29tbW9uLWFjY291bnQKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCistQGluY2x1ZGUgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNGJhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qIFBhcnNlIGRhdGVzIGZvciB0b3VjaCBhbmQgZGF0ZS4KKworICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkwLCAxOTkxLCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorICAgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJwb3NpeHRtLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgVVNFX1VOTE9DS0VEX0lPCisjIGluY2x1ZGUgInVubG9ja2VkLWlvLmgiCisjZW5kaWYKKworLyogSVNESUdJVCBkaWZmZXJzIGZyb20gaXNkaWdpdCwgYXMgZm9sbG93czoKKyAgIC0gSXRzIGFyZyBtYXkgYmUgYW55IGludCBvciB1bnNpZ25lZCBpbnQ7IGl0IG5lZWQgbm90IGJlIGFuIHVuc2lnbmVkIGNoYXIKKyAgICAgb3IgRU9GLgorICAgLSBJdCdzIHR5cGljYWxseSBmYXN0ZXIuCisgICBQT1NJWCBzYXlzIHRoYXQgb25seSAnMCcgdGhyb3VnaCAnOScgYXJlIGRpZ2l0cy4gIFByZWZlciBJU0RJR0lUIHRvCisgICBpc2RpZ2l0IHVubGVzcyBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGxvY2FsZSdzIGRlZmluaXRpb24KKyAgIG9mIGBkaWdpdCcgZXZlbiB3aGVuIHRoZSBob3N0IGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVguICAqLworI2RlZmluZSBJU0RJR0lUKGMpICgodW5zaWduZWQgaW50KSAoYykgLSAnMCcgPD0gOSkKKwordGltZV90IG1rdGltZSAoKTsKKworLyoKKyAgUE9TSVggcmVxdWlyZXM6CisKKyAgdG91Y2ggLXQgW1tDQ11ZWV1tbWRkaGhtbVsuc3NdIEZJTEUuLi4KKyAgICA4LCAxMCwgb3IgMTIgZGlnaXRzLCBmb2xsb3dlZCBieSBvcHRpb25hbCAuc3MKKyAgICAoUERTX0xFQURJTkdfWUVBUiB8IFBEU19DRU5UVVJZIHwgUERTX1NFQ09ORFMpCisKKyAgdG91Y2ggbW1kZGhobW1bWVldIEZJTEUuLi4gKG9ic29sZXRlZCBieSBQT1NJWCAxMDAzLjEtMjAwMSkKKyAgICA4IG9yIDEwIGRpZ2l0cywgWVkgKGlmIHByZXNlbnQpIG11c3QgYmUgaW4gdGhlIHJhbmdlIDY5LTk5CisgICAgKFBEU19UUkFJTElOR19ZRUFSIHwgUERTX1BSRV8yMDAwKQorCisgIGRhdGUgbW1kZGhobW1bW0NDXVlZXQorICAgIDgsIDEwLCBvciAxMiBkaWdpdHMKKyAgICAoUERTX1RSQUlMSU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSkKKworKi8KKworc3RhdGljIGludAoreWVhciAoc3RydWN0IHRtICp0bSwgY29uc3QgaW50ICpkaWdpdF9wYWlyLCBzaXplX3QgbiwgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKQoreworICBzd2l0Y2ggKG4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIHRtLT50bV95ZWFyID0gKmRpZ2l0X3BhaXI7CisgICAgICAvKiBEZWR1Y2UgdGhlIGNlbnR1cnkgYmFzZWQgb24gdGhlIHllYXIuCisJIFBPU0lYIHJlcXVpcmVzIHRoYXQgMDAtNjggYmUgaW50ZXJwcmV0ZWQgYXMgMjAwMC0yMDY4LAorCSBhbmQgdGhhdCA2OS05OSBiZSBpbnRlcnByZXRlZCBhcyAxOTY5LTE5OTkuICAqLworICAgICAgaWYgKGRpZ2l0X3BhaXJbMF0gPD0gNjgpCisJeworCSAgaWYgKHN5bnRheF9iaXRzICYgUERTX1BSRV8yMDAwKQorCSAgICByZXR1cm4gMTsKKwkgIHRtLT50bV95ZWFyICs9IDEwMDsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIGlmICghIChzeW50YXhfYml0cyAmIFBEU19DRU5UVVJZKSkKKwlyZXR1cm4gMTsKKyAgICAgIHRtLT50bV95ZWFyID0gZGlnaXRfcGFpclswXSAqIDEwMCArIGRpZ2l0X3BhaXJbMV0gLSAxOTAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDA6CisgICAgICB7CisJdGltZV90IG5vdzsKKwlzdHJ1Y3QgdG0gKnRtcDsKKworCS8qIFVzZSBjdXJyZW50IHllYXIuICAqLworCXRpbWUgKCZub3cpOworCXRtcCA9IGxvY2FsdGltZSAoJm5vdyk7CisJaWYgKCEgdG1wKQorCSAgcmV0dXJuIDE7CisJdG0tPnRtX3llYXIgPSB0bXAtPnRtX3llYXI7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Bvc2l4X3RpbWVfcGFyc2UgKHN0cnVjdCB0bSAqdG0sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgY29uc3QgY2hhciAqZG90ID0gTlVMTDsKKyAgaW50IHBhaXJbNl07CisgIGludCAqcDsKKyAgc2l6ZV90IGk7CisKKyAgc2l6ZV90IHNfbGVuID0gc3RybGVuIChzKTsKKyAgc2l6ZV90IGxlbiA9ICgoKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpICYmIChkb3QgPSBzdHJjaHIgKHMsICcuJykpKQorCQk/IChzaXplX3QpIChkb3QgLSBzKQorCQk6IHNfbGVuKTsKKworICBpZiAobGVuICE9IDggJiYgbGVuICE9IDEwICYmIGxlbiAhPSAxMikKKyAgICByZXR1cm4gMTsKKworICBpZiAoZG90KQorICAgIHsKKyAgICAgIGlmICghKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpKQorCXJldHVybiAxOworCisgICAgICBpZiAoc19sZW4gLSBsZW4gIT0gMykKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIGlmICghSVNESUdJVCAoc1tpXSkpCisgICAgICByZXR1cm4gMTsKKworICBsZW4gLz0gMjsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHBhaXJbaV0gPSAxMCAqIChzWzIqaV0gLSAnMCcpICsgc1syKmkgKyAxXSAtICcwJzsKKworICBwID0gcGFpcjsKKyAgaWYgKHN5bnRheF9iaXRzICYgUERTX0xFQURJTkdfWUVBUikKKyAgICB7CisgICAgICBpZiAoeWVhciAodG0sIHAsIGxlbiAtIDQsIHN5bnRheF9iaXRzKSkKKwlyZXR1cm4gMTsKKyAgICAgIHAgKz0gbGVuIC0gNDsKKyAgICAgIGxlbiA9IDQ7CisgICAgfQorCisgIC8qIEhhbmRsZSA4IGRpZ2l0cyB3b3J0aCBvZiBgTU1ERGhobW0nLiAgKi8KKyAgdG0tPnRtX21vbiA9ICpwKysgLSAxOworICB0bS0+dG1fbWRheSA9ICpwKys7CisgIHRtLT50bV9ob3VyID0gKnArKzsKKyAgdG0tPnRtX21pbiA9ICpwKys7CisgIGxlbiAtPSA0OworCisgIC8qIEhhbmRsZSBhbnkgdHJhaWxpbmcgeWVhci4gICovCisgIGlmIChzeW50YXhfYml0cyAmIFBEU19UUkFJTElOR19ZRUFSKQorICAgIHsKKyAgICAgIGlmICh5ZWFyICh0bSwgcCwgbGVuLCBzeW50YXhfYml0cykpCisJcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEhhbmRsZSBzZWNvbmRzLiAgKi8KKyAgaWYgKCFkb3QpCisgICAgeworICAgICAgdG0tPnRtX3NlYyA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IHNlY29uZHM7CisKKyAgICAgICsrZG90OworICAgICAgaWYgKCFJU0RJR0lUIChkb3RbMF0pIHx8ICFJU0RJR0lUIChkb3RbMV0pKQorCXJldHVybiAxOworICAgICAgc2Vjb25kcyA9IDEwICogKGRvdFswXSAtICcwJykgKyBkb3RbMV0gLSAnMCc7CisKKyAgICAgIHRtLT50bV9zZWMgPSBzZWNvbmRzOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUGFyc2UgYSBQT1NJWC1zdHlsZSBkYXRlLCByZXR1cm5pbmcgdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworYm9vbAorcG9zaXh0aW1lICh0aW1lX3QgKnAsIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgc3RydWN0IHRtIHRtMAorI2lmZGVmIGxpbnQKKyAgLyogUGxhY2F0ZSBnY2MtNCdzIC1XdW5pbml0aWFsaXplZC4KKyAgICAgcG9zaXhfdGltZV9wYXJzZSBmYWlscyB0byBzZXQgYWxsIG9mIHRtMCBvbmx5IHdoZW4gaXQgcmV0dXJucworICAgICBub256ZXJvIChkdWUgdG8geWVhcigpIHJldHVybmluZyBub256ZXJvKSwgYW5kIGluIHRoYXQgY2FzZSwKKyAgICAgdGhpcyBjb2RlIGRvZXNuJ3QgdXNlIHRoZSB0bTAgYXQgYWxsLiAgKi8KKyAgICA9IHsgMCwgfQorI2VuZGlmCisgICAgOworICBzdHJ1Y3QgdG0gdG0xOworICBzdHJ1Y3QgdG0gY29uc3QgKnRtOworICB0aW1lX3QgdDsKKworICBpZiAocG9zaXhfdGltZV9wYXJzZSAoJnRtMCwgcywgc3ludGF4X2JpdHMpKQorICAgIHJldHVybiBmYWxzZTsKKworICB0bTEgPSB0bTA7CisgIHRtMS50bV9pc2RzdCA9IC0xOworICB0ID0gbWt0aW1lICgmdG0xKTsKKworICBpZiAodCAhPSAodGltZV90KSAtMSkKKyAgICB0bSA9ICZ0bTE7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBta3RpbWUgcmV0dXJucyAtMSBmb3IgZXJyb3JzLCBidXQgLTEgaXMgYWxzbyBhIHZhbGlkIHRpbWVfdAorCSB2YWx1ZS4gIENoZWNrIHdoZXRoZXIgYW4gZXJyb3IgcmVhbGx5IG9jY3VycmVkLiAgKi8KKyAgICAgIHRtID0gbG9jYWx0aW1lICgmdCk7CisgICAgICBpZiAoISB0bSkKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgIC8qIFJlamVjdCBkYXRlcyBsaWtlICJTZXB0ZW1iZXIgMzEiIGFuZCB0aW1lcyBsaWtlICIyNTo2MSIuICAqLworICBpZiAoKHRtMC50bV95ZWFyIF4gdG0tPnRtX3llYXIpCisgICAgICB8ICh0bTAudG1fbW9uIF4gdG0tPnRtX21vbikKKyAgICAgIHwgKHRtMC50bV9tZGF5IF4gdG0tPnRtX21kYXkpCisgICAgICB8ICh0bTAudG1faG91ciBeIHRtLT50bV9ob3VyKQorICAgICAgfCAodG0wLnRtX21pbiBeIHRtLT50bV9taW4pCisgICAgICB8ICh0bTAudG1fc2VjIF4gdG0tPnRtX3NlYykpCisgICAgcmV0dXJuIGZhbHNlOworCisgICpwID0gdDsKKyAgcmV0dXJuIHRydWU7Cit9CisKKyNpZmRlZiBURVNUX1BPU0lYVElNRQorLyoKKyAgICBUZXN0IG1haW5seSB3aXRoIHN5bnRheF9iaXRzID09IDEzCisgICAgKGFrYTogKFBEU19MRUFESU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSB8IFBEU19TRUNPTkRTKSkKKworICAgIFRoaXMgdGVzdCBkYXRhIGFzc3VtZXMgVW5pdmVyc2FsIFRpbWUsIGUuZy4sIFRaPSJVVEMwIi4KKworICAgIFRoaXMgdGVzdCBkYXRhIGFsc28gYXNzdW1lcyB0aGF0IHRpbWVfdCBpcyBzaWduZWQgYW5kIGlzIGF0IGxlYXN0CisgICAgMzkgYml0cyB3aWRlLCBzbyB0aGF0IGl0IGNhbiByZXByZXNlbnQgYWxsIHllYXJzIGZyb20gMDAwMCB0aHJvdWdoCisgICAgOTk5OS4gIEEgaG9zdCB3aXRoIDMyLWJpdCBzaWduZWQgdGltZV90IGNhbiByZXByZXNlbnQgb25seSB0aW1lCisgICAgc3RhbXBzIGluIHRoZSByYW5nZSAxOTAxLTEyLTEzIDIwOjQ1OjUyIHRocm91Z2ggMjAzOC0wMS0xOAorICAgIDAzOjE0OjA3IFVUQywgYXNzdW1pbmcgUE9TSVggdGltZV90IHdpdGggbm8gbGVhcCBzZWNvbmRzLCBzbyB0ZXN0CisgICAgY2FzZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHdpbGwgbm90IHdvcmsgb24gc3VjaCBhIGhvc3QuCisKKyAgICBBbHNvLCB0aGUgZmlyc3QgdHdvIGxpbmVzIG9mIHRlc3QgZGF0YSBhc3N1bWUgdGhhdCB0aGUgY3VycmVudAorICAgIHllYXIgaXMgMjAwMi4KKworQkVHSU4tREFUQQorMTIxMzE0MTUuMTYgICAgIDEzICAgMTAzOTc4ODkxNiBGcmkgRGVjIDEzIDE0OjE1OjE2IDIwMDIKKzEyMTMxNDE1LjE2ICAgICAxMyAgIDEwMzk3ODg5MTYgRnJpIERlYyAxMyAxNDoxNToxNiAyMDAyCiswMDAwMDEwMTAwMDAuMDAgMTMgLTYyMTY3MTMyODAwIFN1biBKYW4gIDEgMDA6MDA6MDAgMDAwMAorMTkwMTEyMTMyMDQ1LjUyIDEzICAtMjE0NzQ4MzY0OCBGcmkgRGVjIDEzIDIwOjQ1OjUyIDE5MDEKKzE5MDExMjEzMjA0NS41MyAxMyAgLTIxNDc0ODM2NDcgRnJpIERlYyAxMyAyMDo0NTo1MyAxOTAxCisxOTAxMTIxMzIwNDYuNTIgMTMgIC0yMTQ3NDgzNTg4IEZyaSBEZWMgMTMgMjA6NDY6NTIgMTkwMQorMTkwMTEyMTMyMTQ1LjUyIDEzICAtMjE0NzQ4MDA0OCBGcmkgRGVjIDEzIDIxOjQ1OjUyIDE5MDEKKzE5MDExMjE0MjA0NS41MiAxMyAgLTIxNDczOTcyNDggU2F0IERlYyAxNCAyMDo0NTo1MiAxOTAxCisxOTAyMDExMzIwNDUuNTIgMTMgIC0yMTQ0ODA1MjQ4IE1vbiBKYW4gMTMgMjA6NDU6NTIgMTkwMgorMTk2OTEyMzEyMzU5LjU5IDEzICAgICAgICAgICAtMSBXZWQgRGVjIDMxIDIzOjU5OjU5IDE5NjkKKzE5NzAwMTAxMDAwMC4wMCAxMyAgICAgICAgICAgIDAgVGh1IEphbiAgMSAwMDowMDowMCAxOTcwCisxOTcwMDEwMTAwMDAuMDEgMTMgICAgICAgICAgICAxIFRodSBKYW4gIDEgMDA6MDA6MDEgMTk3MAorMTk3MDAxMDEwMDAxLjAwIDEzICAgICAgICAgICA2MCBUaHUgSmFuICAxIDAwOjAxOjAwIDE5NzAKKzE5NzAwMTAxMDEwMC4wMCAxMyAgICAgICAgIDM2MDAgVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisxOTcwMDEwMjAwMDAuMDAgMTMgICAgICAgIDg2NDAwIEZyaSBKYW4gIDIgMDA6MDA6MDAgMTk3MAorMTk3MDAyMDEwMDAwLjAwIDEzICAgICAgMjY3ODQwMCBTdW4gRmViICAxIDAwOjAwOjAwIDE5NzAKKzE5NzEwMTAxMDAwMC4wMCAxMyAgICAgMzE1MzYwMDAgRnJpIEphbiAgMSAwMDowMDowMCAxOTcxCisxOTcwMDEwMDAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMDAxMDAwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMDEwMDAwLjYwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDEwMTAwNjAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTAxMjQwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMzIwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMTMwMTAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzIwMzgwMTE5MDMxNC4wNiAxMyAgIDIxNDc0ODM2NDYgVHVlIEphbiAxOSAwMzoxNDowNiAyMDM4CisyMDM4MDExOTAzMTQuMDcgMTMgICAyMTQ3NDgzNjQ3IFR1ZSBKYW4gMTkgMDM6MTQ6MDcgMjAzOAorMjAzODAxMTkwMzE0LjA4IDEzICAgMjE0NzQ4MzY0OCBUdWUgSmFuIDE5IDAzOjE0OjA4IDIwMzgKKzk5OTkxMjMxMjM1OS41OSAxMyAyNTM0MDIzMDA3OTkgRnJpIERlYyAzMSAyMzo1OTo1OSA5OTk5CisxMTEyMTMxNDE1ICAgICAgMTMgICAxMzIzNzg1NzAwIFR1ZSBEZWMgMTMgMTQ6MTU6MDAgMjAxMQorMTExMjEzMTQxNS4xNiAgIDEzICAgMTMyMzc4NTcxNiBUdWUgRGVjIDEzIDE0OjE1OjE2IDIwMTEKKzIwMTExMjEzMTQxNS4xNiAxMyAgIDEzMjM3ODU3MTYgVHVlIERlYyAxMyAxNDoxNToxNiAyMDExCisxOTExMTIxMzE0MTUuMTYgMTMgIC0xODMxOTc0Mjg0IFdlZCBEZWMgMTMgMTQ6MTU6MTYgMTkxMQorMjAzNzEyMTMxNDE1LjE2IDEzICAgMjE0NDMyNjUxNiBTdW4gRGVjIDEzIDE0OjE1OjE2IDIwMzcKKzM3MTIxMzE0MTUuMTYgICAxMyAgIDIxNDQzMjY1MTYgU3VuIERlYyAxMyAxNDoxNToxNiAyMDM3Cis2ODEyMTMxNDE1LjE2ICAgMTMgICAzMTIyNjMzNzE2IFRodSBEZWMgMTMgMTQ6MTU6MTYgMjA2OAorNjkxMjEzMTQxNS4xNiAgIDEzICAgICAtMTU5MDI4NCBTYXQgRGVjIDEzIDE0OjE1OjE2IDE5NjkKKzcwMTIxMzE0MTUuMTYgICAxMyAgICAgMjk5NDU3MTYgU3VuIERlYyAxMyAxNDoxNToxNiAxOTcwCisxMjEzMTQxNTk5ICAgICAgIDIgICAgOTQ1MDk0NTAwIE1vbiBEZWMgMTMgMTQ6MTU6MDAgMTk5OQorMTIxMzE0MTUwMCAgICAgICAyICAgIDk3NjcxNjkwMCBXZWQgRGVjIDEzIDE0OjE1OjAwIDIwMDAKK0VORC1EQVRBCisKKyovCisKKyMgZGVmaW5lIE1BWF9CVUZGX0xFTiAxMDI0CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgY2hhciBidWZmW01BWF9CVUZGX0xFTiArIDFdOworCisgIGJ1ZmZbTUFYX0JVRkZfTEVOXSA9IDA7CisgIHdoaWxlIChmZ2V0cyAoYnVmZiwgTUFYX0JVRkZfTEVOLCBzdGRpbikgJiYgYnVmZlswXSkKKyAgICB7CisgICAgICBjaGFyIHRpbWVfc3RyW01BWF9CVUZGX0xFTl07CisgICAgICB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHM7CisgICAgICB0aW1lX3QgdDsKKyAgICAgIGlmIChzc2NhbmYgKGJ1ZmYsICIlcyAldSIsIHRpbWVfc3RyLCAmc3ludGF4X2JpdHMpICE9IDIpCisJcHJpbnRmICgiKlxuIik7CisgICAgICBlbHNlCisJeworCSAgcHJpbnRmICgiJS0xNXMgJTJ1ICIsIHRpbWVfc3RyLCBzeW50YXhfYml0cyk7CisJICBpZiAocG9zaXh0aW1lICgmdCwgdGltZV9zdHIsIHN5bnRheF9iaXRzKSkKKwkgICAgcHJpbnRmICgiJTEybGQgJXMiLCAobG9uZyBpbnQpIHQsIGN0aW1lICgmdCkpOworCSAgZWxzZQorCSAgICBwcmludGYgKCIlMTJzICVzIiwgIioiLCAiKlxuIik7CisJfQorICAgIH0KKyAgZXhpdCAoMCk7CisKK30KKyNlbmRpZgorDAorLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvbXBpbGUtY29tbWFuZDogImdjYyAtRFRFU1RfUE9TSVhUSU1FIC1nIC1PIC1XYWxsIC1XIHBvc2l4dG0uYyIKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE3NDlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApAQCAtMCwwICsxLDM3IEBACisvKiBQYXJzZSBkYXRlcyBmb3IgdG91Y2ggYW5kIGRhdGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaWZuZGVmIFBPU0lYVE1fSF8KKyMgZGVmaW5lIFBPU0lYVE1fSF8KKworIyBpbmNsdWRlIDxzdGRib29sLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKworLyogUE9TSVggRGF0ZSBTeW50YXggZmxhZ3MuICAqLworIyBkZWZpbmUgUERTX0xFQURJTkdfWUVBUiAxCisjIGRlZmluZSBQRFNfVFJBSUxJTkdfWUVBUiAyCisjIGRlZmluZSBQRFNfQ0VOVFVSWSA0CisjIGRlZmluZSBQRFNfU0VDT05EUyA4CisjIGRlZmluZSBQRFNfUFJFXzIwMDAgMTYKKworYm9vbCBwb3NpeHRpbWUgKHRpbWVfdCAqcCwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEyYmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIkRlbGF5ZWQgam9iIGV4ZWN1dGlvbiBhbmQgYmF0Y2ggcHJvY2Vzc2luZyIKK0RFU0NSSVBUSU9OID0gIkF0IGFsbG93cyBmb3IgY29tbWFuZHMgdG8gYmUgcnVuIGF0IGEgcGFydGljdWxhciB0aW1lLiAgQmF0Y2ggd2lsbCBleGVjdXRlIGNvbW1hbmRzIHdoZW4gXAordGhlIHN5c3RlbSBsb2FkIGxldmVscyBkcm9wIHRvIGEgcGFydGljdWxhciBsZXZlbC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IgorREVQRU5EUyA9ICJmbGV4IGZsZXgtbmF0aXZlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fREVQU30nLCAnJywgZCl9IFwKKyIKKworUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tZW52IHBhbS1wbHVnaW4tbGltaXRzIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImF0ZCIKK1JSRVBMQUNFU18ke1BOfSA9ICJhdGQiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXQvYXRfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgIGZpbGU6Ly9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly9wb3NpeHRtLmMgXAorICAgIGZpbGU6Ly9wb3NpeHRtLmggXAorICAgIGZpbGU6Ly9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2ggXAorICAgIGZpbGU6Ly9hdGQuaW5pdCBcCisgICAgZmlsZTovL2F0ZC5zZXJ2aWNlIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgIGZpbGU6Ly9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIFwKKyAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uY29uZi5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDA1ZGE3NWQ5Yjc1ZDkzOTE3ZmZiMTZhYjQ4YjFlMTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2I5YWY1OWM2YTU0ZWRjZTk1MzZiYTYyOTg0MTA1NTQwOWQxZjg5ZDhhZTI2NDk0NzI3YTk3MTQxZmI0ZDVjMSIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NFTkRNQUlMPS9iaW4vdHJ1ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fdXNlcm5hbWU9cm9vdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fZ3JvdXBuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtam9iZGlyPS92YXIvc3Bvb2wvYXQvam9icyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1hdHNwb29sPS92YXIvc3Bvb2wvYXQvc3Bvb2wgXAorICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfc2VjdXJpdHlfcGFtX2FwcGxfaD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd5ZXMnLCAnbm8nLCBkKX0gIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXRkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhdGQuc2VydmljZSIKKworCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWNwIC1mICR7V09SS0RJUn0vcG9zaXh0bS5bY2hdICR7U30KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAiSVJPT1Q9JHtEfSIgaW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9hdGQuaW5pdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2F0ZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hdGQuc2VydmljZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gMDY0NCAke1dPUktESVJ9LyR7QlB9L3BhbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2F0ZAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkMTJjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkF1Z2VhcyBjb25maWd1cmF0aW9uIEFQSSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hdWdlYXMubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2F1Z2Vhcy9yZXBvcnQvMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuYXVnZWFzLm5ldC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgPSAicmVhZGxpbmUgbGlieG1sMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0rICIke1BOfS1sZW5zZXMgbGliJHtCUE59IgorCitGSUxFU18ke1BOfS1sZW5zZXMgPSAiJHtkYXRhZGlyfS9hdWdlYXMvbGVuc2VzIgorRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitSREVQRU5EU19saWIke0JQTn0gKz0gIiR7UE59LWxlbnNlcyIKK1JSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiJHtQTn0iCisKK0xFQURfU09OQU1FID0gImxpYmF1Z2Vhcy5zbyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLWZyICR7RH0ke2RhdGFkaXJ9L3ZpbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExOTg3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4yLjAub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC00NjMsNyArNDYzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmRiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0FkZCBtaXNzaW5nIEdMX0dFTkVSQVRFX0FSR1pfSCBjb25kaXRpb25hbAorCistIEdMX0dFTkVSQVRFX0FSR1pfSCBpcyB1c2VkIGluIGdudWxpYi9saWIvTWFrZWZpbGUuYW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMC4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYworQEAgLTU1LDYgKzU1LDggQEAgQUNfQVJHX1dJVEgoW2ZhaWxtYWxsb2NdLAorIAorIEFNX0NPTkRJVElPTkFMKFtXSVRIX0ZBSUxNQUxMT0NdLCBbdGVzdCB4JHdpdGhfZmFpbG1hbGxvYyAhPSB4bm9dKQorIAorK0FNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9BUkdaX0hdLCBbdGVzdCAtbiAiJEFSR1pfSCJdKQorKworIGRubCAtLWVuYWJsZS1kZWJ1Zz0oeWVzfG5vKQorIEFDX0FSR19FTkFCTEUoW2RlYnVnXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVidWc9bm8veWVzXSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyYTNlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Vuc3VyZSB0aGF0IGJ1aWxkcyBpbiBzZXBhcmF0ZSBidWlsZGRpcnMgKCR7Qn0gIT0gJHtTfSkgY29ycmVjdGx5IGluc3RhbGwgdGhlIAorbGVuc2VzIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy80LzE3CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4wLjAub3JpZy9NYWtlZmlsZS5hbQkyMDEyLTExLTAyIDE1OjIwOjExLjAwMDAwMDAwMCArMDAwMAorKysrIGF1Z2Vhcy0xLjAuMC9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDEwOjM2OjI0LjAzMzQwMDEyNSArMDAwMAorQEAgLTUsOCArNSw4IEBACisgbGVuc2Rpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdAorIGxlbnN0ZXN0ZGlyPSQoZGF0YWRpcikvYXVnZWFzL2xlbnNlcy9kaXN0L3Rlc3RzCisgCistZGlzdF9sZW5zX0RBVEE9JCh3aWxkY2FyZCBsZW5zZXMvKi5hdWcpCistZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgbGVuc2VzL3Rlc3RzLyouYXVnKQorK2Rpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9sZW5zZXMvKi5hdWcpCisrZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKWxlbnNlcy90ZXN0cy8qLmF1ZykKKyAKKyBFWFRSQV9ESVNUPWF1Z2Vhcy5zcGVjIGJ1aWxkL2F1eC9tb3ZlLWlmLWNoYW5nZSBNYWtlZmlsZS5hbSBIQUNLSU5HCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzXzEuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjRhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgYXVnZWFzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYTI1MzZhOWMzZDc0NGRjMDlkMjM0MjI4ZmU0YjBjOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU5ZmFlN2FjMjI5MDI5ZTYwYTg2OWEzYjg4YzYxNmNmZDUxY2YyZmJhMjg2Y2RmZTNhZjNhMDUyY2IzNWIzMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvYnVpbGQtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzNDFlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLWROYXVyIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluLm9yaWcgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4KKy0tLSBiYXNoLTMuMi40OC9NYWtlZmlsZS5pbi5vcmlnCTIwMDYtMDgtMTcgMjM6MDM6MzUuMDAwMDAwMDAwICswNTAwCisrKysgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4JMjAxMy0wNy0wMiAyMDoyMDowNy41MTI3MDkzMjcgKzA1MDAKK0BAIC04MDMsMTcgKzgwMywzMSBAQAorIAlmaQorIAorIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCisgemVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXplY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFNVUFBPUlRfU1JDKXplY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCistdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrdGVzdCB0ZXN0cyBjaGVjazoKKysJQCQoTUFLRSkgaW5zdGFsbC10ZXN0CisrCUAkKE1BS0UpIHJ1bnRlc3QKKysKKytpbnN0YWxsLXRlc3Q6IGJ1aWxkdGVzdAorK2lmZXEgKCQob3JpZ2luIElOU1RBTExfVEVTVF9ESVIpLCB1bmRlZmluZWQpCisgCUAtdGVzdCAtZCB0ZXN0cyB8fCBta2RpciB0ZXN0cworIAlAY3AgJChURVNUU19TVVBQT1JUKSB0ZXN0cworK2Vsc2UKKysJQC10ZXN0IC1kICQoSU5TVEFMTF9URVNUX0RJUikgfHwgbWtkaXIgLXAgJChJTlNUQUxMX1RFU1RfRElSKQorKwlAY3AgLXIgJChzcmNkaXIpL3Rlc3RzLyogJChJTlNUQUxMX1RFU1RfRElSKS8KKysJQGNwICQoVEVTVFNfU1VQUE9SVCkgJChJTlNUQUxMX1RFU1RfRElSKQorK2VuZGlmCisrCisrYnVpbGR0ZXN0OiBmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKysKKytydW50ZXN0OgorIAlAKCBjZCAkKHNyY2RpcikvdGVzdHMgJiYgXAorIAkJUEFUSD0kKEJVSUxEX0RJUikvdGVzdHM6JCRQQVRIIFRISVNfU0g9JChUSElTX1NIKSAkKFNIRUxMKSAke1RFU1RTQ1JJUFR9ICkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc1NmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gOTMzYmQ4ODZhZjQ5NjY3ZTg4ZTIzODU0MDk0NDlhYjU5ODgxM2RhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDAwOjU0OjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvbnQgaW5jbHVkZSB0YXJnZXQgQ0ZMQUdTIGluIGhvc3QgTERGTEFHUworCitCdWlsZGluZyB0aGUgaG9zdCB0b29sICdta2J1aWx0aW5zJyB3aWxsIGZhaWwgaWYgdGhlIHRhcmdldCBDRkxBR1MKK2NvbnRhaW5zIGFuIG9wdGlvbiB3aGljaCBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QncyBnY2MuIFRvIHByZXZlbnQKK3RoZSBpc3N1ZSwgZGVmaW5lIExERkxBR1NfRk9SX0JVSUxEIGJhc2VkIG9uIENGTEFHU19GT1JfQlVJTEQgaW5zdGVhZAorb2YgQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3JlcXVpcmVkIGZvciBiYXNoIDMuMi41NyAoR1BMdjIpIHJlY2lwZSBvbmx5XQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgYnVpbHRpbnMvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGlucy9NYWtlZmlsZS5pbiBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitpbmRleCBlMDI3ZjdhLi5lYmZkZGYzIDEwMDY0NAorLS0tIGEvYnVpbHRpbnMvTWFrZWZpbGUuaW4KKysrKyBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitAQCAtNjMsNyArNjMsNyBAQCBMT0NBTF9ERUZTID0gQExPQ0FMX0RFRlNACisgCisgTElCUyA9IEBMSUJTQAorIExERkxBR1MgPSBATERGTEFHU0AgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHUykKKy1MREZMQUdTX0ZPUl9CVUlMRCA9ICQoTERGTEFHUykKKytMREZMQUdTX0ZPUl9CVUlMRCA9IEBMREZMQUdTX0ZPUl9CVUlMREAgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpCisgTE9DQUxfTERGTEFHUyA9IEBMT0NBTF9MREZMQUdTQAorICNMSUJTX0ZPUl9CVUlMRCA9IEBMSUJTX0ZPUl9CVUlMREAKKyBMSUJTX0ZPUl9CVUlMRCA9ICQoTElCUykKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyMjlhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorT24gaG9zdHMgd2l0aCBGT1JUSUZZX1NPVVJDRVMsIHN0cmluZ2l6ZSBzdXBwb3J0IGlzIHJlcXVpcmVkLCBhcyBpdCdzIHVzZWQgYnkKK3RoZSBtYWNyb3MgdG8gd3JhcCBmdW5jdGlvbnMgKGUuZy4gcmVhZCBhbmQgb3BlbiBpbiB1bmlzdGQuaCkuIFRob3NlIHdyYXBwZXJzCit1c2UgdGhlIFNUUklORygpIG1hY3JvIGZyb20gdW5pc3RkLmguIEEgaGVhZGVyIGluIHRoZSBiYXNoIHNvdXJjZXMgb3ZlcnJpZGVzCit0aGUgdW5pc3RkLmggbWFjcm8gdG8gJ3gnIHdoZW4gSEFWRV9TVFJJTkdJWkUgaXMgbm90IGRlZmluZWQsIGNhdXNpbmcgdGhlCit3cmFwcGVycyB0byBnZW5lcmF0ZSBjYWxscyB0byAneHJlYWQnIGFuZCAneG9wZW4nLCB3aGljaCBkbyBub3QgZXhpc3QsCityZXN1bHRpbmcgaW4gYSBmYWlsdXJlIHRvIGxpbmsuCisKK0Fzc3VtZSB3ZSBoYXZlIHN0cmluZ2l6ZSBzdXBwb3J0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB3aGljaCB3b3JrcyBhcm91bmQgdGhlCitpc3N1ZS4KKworSXQgbWF5IGJlIGJlc3QgZm9yIHVwc3RyZWFtIHRvIGVpdGhlciBnaXZlIHVwIG9uIHN1cHBvcnRpbmcgY29tcGlsZXJzIHdpdGhvdXQKK3N0cmluZ2l6ZSBzdXBwb3J0LCBvciB0byBub3QgZGVmaW5lIFNUUklORygpIGF0IGFsbCB3aGVuIEZPUlRJRllfU09VUkNFUyBpcworZGVmaW5lZCwgbGV0dGluZyB0aGUgdW5pc3RkLmggb25lIGJlIHVzZWQsIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCistLS0gYmFzaC00LjIub3JpZy9idWlsdGlucy9ta2J1aWx0aW5zLmMKKysrKyBiYXNoLTQuMi9idWlsdGlucy9ta2J1aWx0aW5zLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgIyAgZGVmaW5lIEhBVkVfU1RETElCX0gKKworICMgIGRlZmluZSBIQVZFX1JFTkFNRQorKyMgIGRlZmluZSBIQVZFX1NUUklOR0laRQorICNlbmRpZiAvKiBDUk9TU19DT01QSUxJTkcgKi8KKworICNpZiBkZWZpbmVkIChIQVZFX1VOSVNURF9IKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDNiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPS4gcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC90ZXN0LW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA5YjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2ZjE1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiQW4gc2gtY29tcGF0aWJsZSBjb21tYW5kIGxhbmd1YWdlIGludGVycHJldGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9iYXNoL2Jhc2h0b3AuaHRtbCIKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworREVQRU5EUyA9ICJuY3Vyc2VzIGJpc29uLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtam9iLWNvbnRyb2wiCisKKyMgSWYgTk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyBpcyBkZWZpbmVkLCBhbGwgbG9naW4gc2hlbGxzIHJlYWQgdGhlCisjIHN0YXJ0dXAgZmlsZXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGludGVyYWN0aXZlLgorIyBUaGlzIGlzIHdoYXQgb3RoZXIgbWFqb3IgZGlzdHJvcyBkby4gQW5kIHRoaXMgaXMgd2hhdCB3ZSB3YW50ZWQuIFNlZSBidWcjNTM1OSBhbmQgYnVnIzcxMzcuCitDRkxBR1MgKz0gIi1ETk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2giCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2hdID0gIiR7YmFzZV9iaW5kaXJ9L3NoIgorQUxURVJOQVRJVkVfVEFSR0VUW3NoXSA9ICIke2Jhc2VfYmluZGlyfS9iYXNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QgKCkgeworCW9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1vdmUgL3Vzci9iaW4vYmFzaCB0byAvYmluL2Jhc2gsIGlmIG5lZWQKKwlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorCQlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJbXYgJHtEfSR7YmluZGlyfS9iYXNoICR7RH0ke2Jhc2VfYmluZGlyfQorCWZpCit9Citkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGJhc2hidWcKKwlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0RJUl9UQVJHRVR9LCxnIiAke0R9JHtiaW5kaXJ9L2Jhc2hidWcKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWFrZSBJTlNUQUxMX1RFU1RfRElSPSR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIGluc3RhbGwtdGVzdAorCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2Jhc2VfYmluZGlyfS9iYXNoJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmFzZV9iaW5kaXJ9L2Jhc2ggPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmFzZV9iaW5kaXJ9L2Jhc2gkIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTgxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDI0ICsrKysrKysrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtODQ4LDIwICs4NDgsMzQgQEAgbWF5YmUtY2xlYW46CisgCWZpCisgCisgcmVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXJlY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAke0xERkxBR1NfRk9SX0JVSUxEfSAtbyAkQCAkKFNVUFBPUlRfU1JDKXJlY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgJHtMREZMQUdTfSAtbyAkQCAkPAorIAorIHplY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQyl6ZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl6ZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyB4Y2FzZSQoRVhFRVhUKToJJChTVVBQT1JUX1NSQyl4Y2FzZS5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl4Y2FzZS5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKy10ZXN0IHRlc3RzIGNoZWNrOglmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKyt0ZXN0IHRlc3RzIGNoZWNrOgorKwlAJChNQUtFKSBpbnN0YWxsLXRlc3QKKysJQCQoTUFLRSkgcnVudGVzdAorKworK2luc3RhbGwtdGVzdDogYnVpbGR0ZXN0CisraWZlcSAoJChvcmlnaW4gSU5TVEFMTF9URVNUX0RJUiksIHVuZGVmaW5lZCkKKyAJQC10ZXN0IC1kIHRlc3RzIHx8IG1rZGlyIHRlc3RzCisgCUBjcCAkKFRFU1RTX1NVUFBPUlQpIHRlc3RzCisrZWxzZQorKwlALXRlc3QgLWQgJChJTlNUQUxMX1RFU1RfRElSKSB8fCBta2RpciAtcCAkKElOU1RBTExfVEVTVF9ESVIpCisrCUBjcCAtciAkKHNyY2RpcikvdGVzdHMvKiAkKElOU1RBTExfVEVTVF9ESVIpLworKwlAY3AgJChURVNUU19TVVBQT1JUKSAkKElOU1RBTExfVEVTVF9ESVIpCisrZW5kaWYKKysKKytidWlsZHRlc3Q6IGZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQorKworK3J1bnRlc3Q6CisgCUAoIGNkICQoc3JjZGlyKS90ZXN0cyAmJiBcCisgCQlQQVRIPSQoQlVJTERfRElSKS90ZXN0czokJFBBVEggVEhJU19TSD0kKFRISVNfU0gpICQoU0hFTEwpICR7VEVTVFNDUklQVH0gKQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjhmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBleGVjdXRlX2NtZC5jLm9yaWcJRnJpIEp1biAgMyAxMzozNDo0MiAyMDExCisrKysgZXhlY3V0ZV9jbWQuYwlGcmkgSnVuICAzIDEzOjM2OjQxIDIwMTEKK0BAIC0yMjAyLDcgKzIyMDIsMTEgQEAKKyAgIC8qIElmIHRoZSBgbGFzdHBpcGUnIG9wdGlvbiBpcyBzZXQgd2l0aCBzaG9wdCwgYW5kIGpvYiBjb250cm9sIGlzIG5vdAorICAgICAgZW5hYmxlZCwgZXhlY3V0ZSB0aGUgbGFzdCBlbGVtZW50IG9mIG5vbi1hc3luYyBwaXBlbGluZXMgaW4gdGhlCisgICAgICBjdXJyZW50IHNoZWxsIGVudmlyb25tZW50LiAqLworLSAgaWYgKGxhc3RwaXBlX29wdCAmJiBqb2JfY29udHJvbCA9PSAwICYmIGFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisrICBpZiAobGFzdHBpcGVfb3B0ICYmIAorKyNpZiBkZWZpbmVkKEpPQl9DT05UUk9MKQorKwkJam9iX2NvbnRyb2wgPT0gMCAmJiAKKysjZW5kaWYKKysJCWFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisgICAgIHsKKyAgICAgICBsc3RkaW4gPSBtb3ZlX3RvX2hpZ2hfZmQgKDAsIDAsIDI1NSk7CisgICAgICAgaWYgKGxzdGRpbiA+IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzOTFkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiBob3N0cyB3aXRoIEZPUlRJRllfU09VUkNFUywgc3RyaW5naXplIHN1cHBvcnQgaXMgcmVxdWlyZWQsIGFzIGl0J3MgdXNlZCBieQordGhlIG1hY3JvcyB0byB3cmFwIGZ1bmN0aW9ucyAoZS5nLiByZWFkIGFuZCBvcGVuIGluIHVuaXN0ZC5oKS4gVGhvc2Ugd3JhcHBlcnMKK3VzZSB0aGUgU1RSSU5HKCkgbWFjcm8gZnJvbSB1bmlzdGQuaC4gQSBoZWFkZXIgaW4gdGhlIGJhc2ggc291cmNlcyBvdmVycmlkZXMKK3RoZSB1bmlzdGQuaCBtYWNybyB0byAneCcgd2hlbiBIQVZFX1NUUklOR0laRSBpcyBub3QgZGVmaW5lZCwgY2F1c2luZyB0aGUKK3dyYXBwZXJzIHRvIGdlbmVyYXRlIGNhbGxzIHRvICd4cmVhZCcgYW5kICd4b3BlbicsIHdoaWNoIGRvIG5vdCBleGlzdCwKK3Jlc3VsdGluZyBpbiBhIGZhaWx1cmUgdG8gbGluay4KKworQXNzdW1lIHdlIGhhdmUgc3RyaW5naXplIHN1cHBvcnQgd2hlbiBjcm9zcy1jb21waWxpbmcsIHdoaWNoIHdvcmtzIGFyb3VuZCB0aGUKK2lzc3VlLgorCitJdCBtYXkgYmUgYmVzdCBmb3IgdXBzdHJlYW0gdG8gZWl0aGVyIGdpdmUgdXAgb24gc3VwcG9ydGluZyBjb21waWxlcnMgd2l0aG91dAorc3RyaW5naXplIHN1cHBvcnQsIG9yIHRvIG5vdCBkZWZpbmUgU1RSSU5HKCkgYXQgYWxsIHdoZW4gRk9SVElGWV9TT1VSQ0VTIGlzCitkZWZpbmVkLCBsZXR0aW5nIHRoZSB1bmlzdGQuaCBvbmUgYmUgdXNlZCwgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBiYXNoLTQuMi5vcmlnL2J1aWx0aW5zL21rYnVpbHRpbnMuYworKysrIGJhc2gtNC4yL2J1aWx0aW5zL21rYnVpbHRpbnMuYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjICBkZWZpbmUgSEFWRV9TVERMSUJfSAorCisgIyAgZGVmaW5lIEhBVkVfUkVOQU1FCisrIyAgZGVmaW5lIEhBVkVfU1RSSU5HSVpFCisgI2VuZGlmIC8qIENST1NTX0NPTVBJTElORyAqLworCisgI2lmIGRlZmluZWQgKEhBVkVfVU5JU1REX0gpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjgxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBUSElTX1NIPS9iaW4vYmFzaCBCVUlMRF9ESVI9LiBzcmNkaXI9LiAgcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwOWI3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyYjI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK3JlcXVpcmUgYmFzaC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDVkOWJjYWJkOGVkNWE1NGEwMWNlOGQxODNkNTkyYSIKKworUFIgPSAicjExIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmFzaC9iYXNoLSR7UFZ9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDQ5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0OSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUwIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1MTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTEgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUyO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUzIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NDthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTQgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDU1O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1NSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTY7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU2IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTcgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjMzOGRjZjk3NWE5MzY0MGJiM2VhYTg0M2NhNDJlM2Y4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMTI4ZDI4MWJkNTY4MmJhNWY2OTUzMTIyOTE1ZGE3MTk3NjM1N2Q3YTc2NDkwZDI2NmM5MTczYjFkMDQyNjM0OCIKK1NSQ19VUklbcGF0Y2gwNDkubWQ1c3VtXSA9ICJhZjU3MWEyZDE2NGQ1YWJkY2FlNDQ5OWU5NGU4ODkyYyIKK1NSQ19VUklbcGF0Y2gwNDkuc2hhMjU2c3VtXSA9ICJiMTIxN2VkOTRiZGI5NWRjODc4ZmE1Y2FiYmY4YTE2NDQzNWViMGQ5ZGEyM2EzOTIxOThmNDg1NjZlZTM0YTJmIgorU1JDX1VSSVtwYXRjaDA1MC5tZDVzdW1dID0gIjg0NDNkNDM4NWQ3M2VjODM1YWJlNDAxZDkwNTkxMzc3IgorU1JDX1VSSVtwYXRjaDA1MC5zaGEyNTZzdW1dID0gIjA4MWJiMDNjNTgwZWNlZTYzYmEwM2I0MGJlYjNjYWY1MDllY2EyOTUxNWIyZThkZDNjMDc4NTAzNjA5YTE2NDIiCitTUkNfVVJJW3BhdGNoMDUxLm1kNXN1bV0gPSAiMTVjNjY1MzA0MmU5ODE0YWE4NzEyMDA5OGZjN2E4NDkiCitTUkNfVVJJW3BhdGNoMDUxLnNoYTI1NnN1bV0gPSAiMzU0ODg2MDk3Y2Q5NWI0ZGVmNzcwMjhmMzJlZTAxZTJlMDg4ZDU4YTk4MTg0ZmVkZTlkM2NlOTMyMGUyMThlZiIKK1NSQ19VUklbcGF0Y2gwNTIubWQ1c3VtXSA9ICI2OTEwMjNhOTQ0YmJiOTAwM2NjOTJhZDQ2MmQ5MWZhMSIKK1NSQ19VUklbcGF0Y2gwNTIuc2hhMjU2c3VtXSA9ICJhMGVjY2Y5Y2VkYTUwODcxZGIxMGQyMWVmZGQ3NGI5OWUzNWVmYmQ1NWM5NzBjNDAwZWVhZGUwMTI4MTZiYjYxIgorU1JDX1VSSVtwYXRjaDA1My5tZDVzdW1dID0gImViOTdkMWM5MjMwYTU1MjgzZDlkYWM2OWQzZGUyZTQ2IgorU1JDX1VSSVtwYXRjaDA1My5zaGEyNTZzdW1dID0gImZlNmYwZTk2ZTBiOTY2ZWFlZDlmYjVlOTMwY2ExMjg5MWY0MzgwZjMwZjllMGE3NzNkMjAwZmYyMDYzYTg2NGUiCitTUkNfVVJJW3BhdGNoMDU0Lm1kNXN1bV0gPSAiMTEwNzc0NDA1OGM0M2IyNDdmNTk3NTg0Yjg4YmEwYTYiCitTUkNfVVJJW3BhdGNoMDU0LnNoYTI1NnN1bV0gPSAiYzZkYWI5MTFlODU2ODhjNTQyY2U3NWFmYzE3NWRiYjRlNTAxMWRlNTEwMjc1OGUxOWE0YTgwZGFjMWU3OTM1OSIKK1NSQ19VUklbcGF0Y2gwNTUubWQ1c3VtXSA9ICIwNWQyMDExNzZkMzQ5OWUyZGZhNGE3M2QwOWQ0MmYwNSIKK1NSQ19VUklbcGF0Y2gwNTUuc2hhMjU2c3VtXSA9ICJjMGU4MTY3MDA4Mzc5NDJlZDU0OGRhNzRlNTkxN2Y3NGI3MGNiYmJiMTBjOWYyY2FmNzNlOGUwNmEwNzEzZDBhIgorU1JDX1VSSVtwYXRjaDA1Ni5tZDVzdW1dID0gIjIyMmVhYTNhMmMyNmY1NGExNWFhNWUwODgxN2E1MzRhIgorU1JDX1VSSVtwYXRjaDA1Ni5zaGEyNTZzdW1dID0gIjA2M2E4ZDhkNzRlNDQwN2JmMDdhMzJiOTY1YjhlZjZkMjEzYTY2YWJkYjZhZjI2Y2MzNTg0YTQzN2E1NmJiYjQiCitTUkNfVVJJW3BhdGNoMDU3Lm1kNXN1bV0gPSAiNDdkOThlM2UwNDI4OTI0OTVjNWVmZTU0ZWM2ZTU5MTMiCitTUkNfVVJJW3BhdGNoMDU3LnNoYTI1NnN1bV0gPSAiNWZjNjg5Mzk0ZDUxNTk5MGY1ZWE3NGUyZGY3NjVmYzZlNWU0MmNhNDRiNDU5MWIyYzZmOWJlNGIwY2FkZjBmMCIKKworUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWU2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgpAQCAtMCwwICsxLDQ2IEBACityZXF1aXJlIGJhc2guaW5jCisKKyMgR1BMdjIrICg8IDQuMCksIEdQTHYzKyAoPj0gNC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvJHtCUH0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM3IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzODthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzggXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzOSBcCisgICAgICAgICAgIGZpbGU6Ly9leGVjdXRlX2NtZC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImEyN2IzZWU5YmU4M2JkM2JhNDQ4YzBmZjUyYjI4NDQ3IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMzE3ODgxMDE5YmJmMjI2MmZiODE0YjdkZDhlNDA2MzJkMTNjMzYwOGQyZjIzNzgwMGE4ODI4ZmJiOGE2NDBkZCIKKworU1JDX1VSSVtwYXRjaDAzMS5tZDVzdW1dID0gIjIzNmRmMWFjMTEzMGEwMzNlZDBkYmUyZDIxMTVmMjhmIgorU1JDX1VSSVtwYXRjaDAzMS5zaGEyNTZzdW1dID0gImNkNTI5ZjU5ZGQwZjJmZGQ0OWQ2MTlmZTM0NjkxZGE2ZjBhZmZlZGY4N2NjMzdjZDQ2MGE5ZjNmZTgxMmE2MWQiCitTUkNfVVJJW3BhdGNoMDMyLm1kNXN1bV0gPSAiMjM2MGY3ZTc5Y2ZiMjg1MjZmODAwMjEwMjVlYTU5MDkiCitTUkNfVVJJW3BhdGNoMDMyLnNoYTI1NnN1bV0gPSAiODg5MzU3ZDI5YTYwMDViMmMzMzA4Y2E1YjYyODZjYjIyM2I1ZTljMDgzMjE5ZTVkYjMxNTYyODJkZDU1NGY0YSIKK1NSQ19VUklbcGF0Y2gwMzMubWQ1c3VtXSA9ICJiNTUxYzRlZTdiODcxMzc1OWU0MTQzNDk5ZDBiYmQ0OCIKK1NSQ19VUklbcGF0Y2gwMzMuc2hhMjU2c3VtXSA9ICJmYjJhNzc4N2ExM2ZiZTAyN2E3MzM1YWNhNmViM2MyMWNkYmQ4MTNlOWVkYzIyMTI3NGI2YTlkODY5MmVhYTE2IgorU1JDX1VSSVtwYXRjaDAzNC5tZDVzdW1dID0gImM5YTU2ZmJlMDM0OGUwNWE4ODZkZmY5N2YyODcyYjc0IgorU1JDX1VSSVtwYXRjaDAzNC5zaGEyNTZzdW1dID0gImYxNjk0ZjA0ZjExMGRlZmUxMzMwYTg1MWNjMjc2OGU3ZTU3ZGRkMmRmZGIwZTNlMzUwY2EwZTNjMjE0ZmY4ODkiCitTUkNfVVJJW3BhdGNoMDM1Lm1kNXN1bV0gPSAiZTU2NGU4YWI0NGVkMWNhM2E0ZTMxNWE5ZjZjYWJkYzkiCitTUkNfVVJJW3BhdGNoMDM1LnNoYTI1NnN1bV0gPSAiMzcwZDg1ZTUxNzgwMDM2ZjIzODZkYzE4YzVlZmU5OTZlYmE4ZTY1MmZjMTk3M2YwZjRmMmFiNTVhOTkzYzFlMyIKK1NSQ19VUklbcGF0Y2gwMzYubWQ1c3VtXSA9ICJiMDBmZjY2YzQxYTdjMGYwNmUxOTEyMDA5ODE5ODBiMCIKK1NSQ19VUklbcGF0Y2gwMzYuc2hhMjU2c3VtXSA9ICJhYzVmODI0NDViMzZlZmRiNTQzZGJmYWU2NGFmZWQ2M2Y1ODZkNzU3NGI4MzNlOWFhOWNkNTE3MGJjNWZkMjdjIgorU1JDX1VSSVtwYXRjaDAzNy5tZDVzdW1dID0gImJlMmE3YjA1ZjZhZTU2MDMxM2YzYzlkNWY3MTI3YmRhIgorU1JDX1VSSVtwYXRjaDAzNy5zaGEyNTZzdW1dID0gIjMzZjE3MGRkNzQwMGFiMzQxOGQ3NDljNTVjNjM5MWIxZDE2MWVmMmRlN2FjZWQxODczNDUxYjNhM2ZjYTU4MTMiCitTUkNfVVJJW3BhdGNoMDM4Lm1kNXN1bV0gPSAiNjFlMDUyMjgzMGIyNGZiZThjMGQxYjAxMGYxMzI0NzAiCitTUkNfVVJJW3BhdGNoMDM4LnNoYTI1NnN1bV0gPSAiYWRiZWFhNTAwY2E3YTgyNTM1ZjBlODhkNjczNjYxOTYzZjhhNWZjZGM3YWQ2MzQ0NWU2OGJmNWI0OTc4NjM2NyIKK1NSQ19VUklbcGF0Y2gwMzkubWQ1c3VtXSA9ICJhNDc3NTQ4N2FiZTk1ODUzNjc1MWM4Y2U1M2NkZjZmOSIKK1NSQ19VUklbcGF0Y2gwMzkuc2hhMjU2c3VtXSA9ICJhYjk0ZGNlZDIyMTU1NDEwOTc2OTFmNjBjM2ViMzIzY2MyOGVmMjU0OTQ2M2U2YTUzMzRiYmNjMWU2MWU3NGVjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2JjL2JjXzEuMDYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjOGE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQXJiaXRyYXJ5IHByZWNpc2lvbiBjYWxjdWxhdG9yIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JjL2JjLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmMvYmNkZWZzLmg7ZW5kbGluZT0zMTttZDU9NDZkZmZkYWYxMGE5OTcyOGRkOGNlMzU4ZTQ1ZDQ2ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGMvZGMuaDtlbmRsaW5lPTI1O21kNT0yZjljNTU4Y2RkODBlMzFiNGQ5MDRlNDhjMjM3NDMyOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvbnVtYmVyLmM7ZW5kbGluZT0zMTttZDU9OTk0MzRhMDg5OGFiY2E3Nzg0YWNmZDM2YjgxOTExOTkiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiZmxleCIKK1BSID0gInIzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmMvYmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWdtZW50LWZhdWx0LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0NGI1ZGRkZWJkOGE3YTczMDlhZWE2YzM2ZmRhMTE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlZjZkOWYxN2MzYzBkOTJkODc5OGUzNTY2NjE3NWVjZDNkOGVmYWM0MDA5ZDY0NTdiNWM5OWNlYTcyYzBlMzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJkYyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMGRhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKword2hlbiBydW4gY29tbWFuZCBzdWNoIGFzICdlY2hvICJhID0gMTMiIHwgYmMgLWwnLCBpdCBzZWdtZW50YXRpb24gZmF1bHRzLgorVGhpcyBwYXRjaCBpcyBmcm9tIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9ibGZzLXN1cHBvcnRAbGludXhmcm9tc2NyYXRjaC5vcmcvbXNnMDQ2MDIuaHRtbC4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBiYy0xLjA2L2xpYi9udW1iZXIuYy5vcmlnCTIwMDMtMDktMjYgMjE6MTQ6MDIuMDAwMDAwMDAwICswMDAwCisrKysgYmMtMS4wNi9saWIvbnVtYmVyLmMJMjAwMy0wOS0yNiAyMToxNDoyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zNCw2ICszNCw3IEBACisgI2luY2x1ZGUgPG51bWJlci5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPi8qIFByb3RvdHlwZXMgbmVlZGVkIGZvciBleHRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLiAqLworIAorICNkZWZpbmUgYmNfcnRfd2FybiBydF93YXJuCistLS0gYmMtMS4wNi9iYy9sb2FkLmMub3JpZwkyMDAzLTA5LTI2IDIxOjE0OjE0LjAwMDAwMDAwMCArMDAwMAorKysrIGJjLTEuMDYvYmMvbG9hZC5jCTIwMDMtMDktMjYgMjE6MTQ6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtMTU2LDcgKzE1Niw3IEBACisgICBsb25nICBsYWJlbF9ubzsKKyAgIGxvbmcgIHZhZl9uYW1lOwkvKiB2YXJpYWJsZSwgYXJyYXkgb3IgZnVuY3Rpb24gbnVtYmVyLiAqLworICAgbG9uZyAgZnVuYzsKKy0gIHByb2dyYW1fY291bnRlciBzYXZlX2FkcjsKKysgIHN0YXRpYyBwcm9ncmFtX2NvdW50ZXIgc2F2ZV9hZHI7CisgCisgICAvKiBJbml0aWFsaXplLiAqLworICAgc3RyID0gY29kZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWUzNjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOWNiMTY2N2Y5ZDNhOWJjZmMzYjgzNDY2Y2Q4ZDNiNzlmMDU1NGZmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOCBKdWwgMjAxNSAwMTozNzowOSArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gZml4IHR5cG9zIGluIG1hbnBhZ2UKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQtNy5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGJsa3Rvb2wuOCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLjggYi9ibGt0b29sLjgKK2luZGV4IGExZjVjOTYuLjQ1Yjc3MjQgMTAwNjQ0CistLS0gYS9ibGt0b29sLjgKKysrKyBiL2Jsa3Rvb2wuOAorQEAgLTE5MSw3ICsxOTEsNyBAQCBRdWVyeSBvciBzZXQgZGV2aWNlIGJ1cyBzdGF0ZSAoMCBvZmYsIDEgb24sIDIgdHJpc3RhdGUpCisgUXVlcnkgdGhlIGRldGVjdGVkIChvciBvdmVycmlkZGVuLCB2aWEgLXQpIGRldmljZSBjbGFzcy4KKyBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlc3VsdCBpbiAnQVRBJyBvciAnU0NTSScgZm9yIG1vc3QgZGV2aWNlcy4KKyBEZXRlY3Rpb24gaXMgYmFzZWQgb24gZGV2aWNlIG1ham9yOyB0aHVzIHlvdXIgU0FUQSBkZXZpY2UgbWF5IGFwcGVhciBhcworLSdTQ1NJJy4KKytcJidTQ1NJJy4KKyAKKyAuVFAKKyAuQiBjZC1zcGVlZAorQEAgLTIzNyw3ICsyMzcsNyBAQCBPbWl0dGluZyB0aGUgb24vb2ZmIGFyZ3VtZW50IHdpbGwgcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUuCisgCisgLlRQCisgLkIgbWVkaWEKKy1Mb2NrIGluIChvciB1bmxvY2spIGEgcmVtb3ZlYWJsZSBkZXZpY2UuCisrTG9jayBpbiAob3IgdW5sb2NrKSBhIHJlbW92YWJsZSBkZXZpY2UuCisgCisgLlRQCisgLkIgbXVsdGlwbGUtY291bnQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhhYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkZGIxMDcxZGEyYzc4ZDgxNTVhYWI2MmU5ZjBkNDZmNjk1MDAyMDBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXphdCBLaHV6aGluIDxhM2F0Lm1haWxAZ21haWwuY29tPgorRGF0ZTogV2VkLCA4IEp1bCAyMDE1IDAxOjQyOjI0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBmaXggc3RyaW5nIGVycm9yCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyB1dGlsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMKK2luZGV4IDFmM2E5Y2EuLjJjY2Y1NmEgMTAwNjQ0CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTI4LDcgKzI4LDcgQEAgdm9pZCBwZGllKGNvbnN0IGNoYXIgKm1zZywgaW50IHBlcnIpCisgCWlmIChwZXJyKQorIAkJcGVycm9yKG1zZyk7CisgCWVsc2UKKy0JCWZwcmludGYoc3RkZXJyLCBtc2cpOworKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIG1zZyk7CisgCWlmIChibGtkZXYgPj0gMCkKKyAJCWNsb3NlKGJsa2Rldik7CisgCWV4aXQoMSk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2VkMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoCkBAIC0wLDAgKzEsNzggQEAKK0Zyb20gNjhmYWE2M2FhYWQ4MWY0YTI4OWU0YTAzMTczYWI0Y2Y3OThkZWI1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMSBOb3YgMjAxNCAyMjoyNDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gRml4IDMtZCBhcmd1bWVudCBmb3IgQkxLUk9TRVQgaXQgbXVzdCBiZSAnY29uc3QgaW50IConCisKK01vc3Qgb2YgKlNFVCBpb2N0bHMgaGF2ZSBpbnQgdHlwZSBmb3IgMy1kIGFyZ3VtZW50LCBleGNlcHQgQkxLUk9TRVQuCitTbyBhZGQgYmNfYXJnX3R5cGUgZW51bSwgYnVpbGQgaXQgaW50byBib29sX2NvbWFuZCBhbmQgaW5zdGFsbCBhcmdfdHlwZQordG8gYmNfYXJnX2ludF9wdHIgZm9yIEJMS1JPU0VUIG9ubHkuCisKK0RlYmlhbi1idWctaWQ6IDY0MTE2NAorTGluazogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNjQxMTY0CisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBibGt0b29sLmMgfCAxMSArKysrKysrKystLQorIGJsa3Rvb2wuaCB8ICA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLmMgYi9ibGt0b29sLmMKK2luZGV4IGZiZWZlY2QuLjIyMWExOTUgMTAwNjQ0CistLS0gYS9ibGt0b29sLmMKKysrKyBiL2Jsa3Rvb2wuYworQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHN0cnVjdCBib29sX2NvbW1hbmQgYm9vbF9jbWRfdGJsW10gPSB7CisgCXsgeyBERUZfQk9PTCgicGlvLWRhdGEiKSwgZGNfYXRhLCBERUZfSERJTygzMkJJVCkgfSwKKyAJICAiMTYtYml0IiwgIjMyLWJpdCIgfSwKKyAJeyB7IERFRl9CT09MKCJyZWFkb25seSIpLCBkY19hbnksIElPQ05BTUUoQkxLUk9HRVQpLCBJT0NOQU1FKEJMS1JPU0VUKSB9LAorLQkgIERFRl9CT09MU1RSIH0sCisrCSAgREVGX0JPT0xTVFIsIGJjX2FyZ19pbnRfcHRyIH0sCisgCXsgeyBERUZfQk9PTCgidW5tYXNrLWlycSIpLCBkY19hdGEsIERFRl9IRElPKFVOTUFTS0lOVFIpIH0sCisgCSAgREVGX0JPT0xTVFIgfSwKKyAJeyB7ICJ3Y2FjaGUiLCBjdF9ib29sLCBoYW5kbGVfd2NhY2hlLCBkY19hbnksCitAQCAtMTcxLDcgKzE3MSwxNCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9vbChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBjb21tYW5kICpjbWQpCisgCisgCX0gZWxzZSBpZiAoKGFyZ2MgPT0gNCkgJiYgKGNtZC0+d3JpdGVfaW9jdGxfbmFtZSAhPSBOVUxMKSkgeworIAkJZG9fMzIgPSBwYXJzZV9ib29sKGFyZ2MsIGFyZ3YsIGJjbSk7CistCQlpZiAoaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMikpCisrCQkKKysJCWludCByZXQ7CisrCQlpZiAoYmNtLT5hcmdfdHlwZSA9PSBiY19hcmdfaW50X3B0cikgeworKwkJCXJldCA9IGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgJmRvXzMyKTsKKysJCX0gZWxzZSB7CisrCQkJcmV0ID0gaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMik7CisrCQl9CisrCQlpZiAocmV0KQorIAkJCXBkaWUoY21kLT53cml0ZV9pb2N0bF9uYW1lLCAxKTsKKyAJfQorIAllbHNlIHsKK2RpZmYgLS1naXQgYS9ibGt0b29sLmggYi9ibGt0b29sLmgKK2luZGV4IGZjZTQzODcuLjg1YWRkODMgMTAwNjQ0CistLS0gYS9ibGt0b29sLmgKKysrKyBiL2Jsa3Rvb2wuaAorQEAgLTg1LDExICs4NSwxOCBAQCBzdHJ1Y3QgY29tbWFuZCB7CisgCWNvbnN0IGNoYXIJCSp3cml0ZV9pb2N0bF9uYW1lOworIH07CisgCisrZW51bSBiY19hcmdfdHlwZSB7CisrCWJjX2FyZ19pbnQsCisrCWJjX2FyZ19pbnRfcHRyLAorK307CisrCisgc3RydWN0IGJvb2xfY29tbWFuZCB7CisgCXN0cnVjdCBjb21tYW5kCQljbWQ7CisgCisgCWNvbnN0IGNoYXIJCSpzdHJfZmFsc2U7CisgCWNvbnN0IGNoYXIJCSpzdHJfdHJ1ZTsKKysKKysJZW51bSBiY19hcmdfdHlwZSBhcmdfdHlwZTsKKyB9OworIAorIHN0cnVjdCBjbGFzc19vcGVyYXRpb25zIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzkxOTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJUdW5lIGxvdy1sZXZlbCBibG9jayBkZXZpY2UgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImJsa3Rvb2wgaXMgdXNlZCBmb3IgcXVlcnlpbmcgYW5kL29yIGNoYW5naW5nIHNldHRpbmdzIFwKK29mIGEgYmxvY2sgZGV2aWNlLiBJdCBpcyBsaWtlIGhkcGFybSBidXQgYSBtb3JlIGdlbmVyYWwgdG9vbCwgYXMgaXQgXAord29ya3Mgb24gU0NTSSwgSURFIGFuZCBTQVRBIGRldmljZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvdW5zdGFibGUvYWRtaW4vYmxrdG9vbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmxrdG9vbC5jO2JlZ2lubGluZT03O2VuZGxpbmU9ODttZDU9YTVlNzk4ZWE5OGZkNTA5NzIwODg5NjhhMTVlNWYzNzMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LXR5cG9zLWluLW1hbnBhZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRml4LTMtZC1hcmd1bWVudC1mb3ItQkxLUk9TRVQtaXQtbXVzdC1iZS1jb25zdC1pbnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNjJlZGMwOWM5OTA4MTA3ZTY5MzkxYzg3ZjRmM2ZkNDAiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJiMWU2ZDU5MTI1NDZkMmE0YjcwNGVjNjVjMmI5NjY0YWEzYjQ2NjNlN2Q4MDBlMDY4MDMzMzAzMzVhMmNiNzY0IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LTQub3JpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY4ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkJlcmtlbGV5IExBTFIgWWFjYyBwYXJzZXIgZ2VuZXJhdG9yIgorREVTQ1JJUFRJT04gPSAiQSBwYXJzZXIgZ2VuZXJhdG9yIHV0aWxpdHkgdGhhdCByZWFkcyBhIGdyYW1tYXIgc3BlY2lmaWNhdGlvbiBmcm9tIGEgZmlsZSBhbmQgZ2VuZXJhdGVzIGFuIExSKDEpIFwKK3BhcnNlciBmb3IgaXQuICBUaGUgcGFyc2VycyBjb25zaXN0IG9mIGEgc2V0IG9mIExBTFIoMSkgcGFyc2luZyB0YWJsZXMgYW5kIGEgZHJpdmVyIHJvdXRpbmUgd3JpdHRlbiBpbiB0aGUgQyBcCitwcm9ncmFtbWluZyBsYW5ndWFnZS4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJQRCIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9ieWFjYy9ieWFjYy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYnlhY2Mtb3Blbi5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICItLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9J3MsXixiLCciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmUoKSB7CisJaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQorCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9CisJb2VfcnVuY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MvYnlhY2Mtb3Blbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYwNTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworaW5kZXggNjIwY2UzZi4uODIwNzFhNCAxMDA2NDQKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtNTI2LDcgKzUyNiw3IEBAIG15X21rc3RlbXAoY2hhciAqdGVtcCkKKyAgICAgfQorICAgICBpZiAoKG5hbWUgPSB0ZW1wbmFtKGRuYW1lLCBmbmFtZSkpICE9IDApCisgICAgIHsKKy0JZmQgPSBvcGVuKG5hbWUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IpOworKyAgICAgIGZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSLCAwNjY2KTsKKyAJc3RyY3B5KHRlbXAsIG5hbWUpOworICAgICB9CisgICAgIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI1NDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2lnaC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UgcGxhY2VzIHdoZXJlIGV2ZXJ5b25lIGxpY2Vuc2VzIGl0IGRpZmZlcmVudGx5LiBTb21lb25lCisjIGV2ZW4gYXBwbHkgVUNCIHRvIGl0IChGcmVlL05ldC9PcGVuQlNEKS4gVGhlIG1haW50YWluZXIgc3RhdGVzIHRoYXQ6CisjICJJJ3ZlIGZvdW5kIG5vIHJlbGlhYmxlIHNvdXJjZSB3aGljaCBzdGF0ZXMgdGhhdCBieWFjYyBtdXN0IGJlYXIgYSBVQ0IgY29weXJpZ2h0LiIKKyMgU2V0dGluZyB0byBQRCBhcyB0aGlzIGlzIHdoYXQgdGhlIHVwc3RyZWFtIGhhcyBpdCBhcy4KKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BhY2thZ2UvZGViaWFuL2NvcHlyaWdodDttZDU9YzUyZmIyZDFiM2Y3NWIzYjc1MzQ5Mjc4MDdhMWI3MTQiCityZXF1aXJlIGJ5YWNjLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiMjcwMDQwMTAzMDU4M2M0ZTkxNjlhYzdlYTdkMDhkZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzM1NGU0ZWUxNGM0YTFiZjExZTU1ZGRlOTI3NTAxMWQxNDg4N2VmMDY2NDA2YTA4OGI2ZmE1NmNhZjAzOTI0OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE2M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNzEgQEAKKworbGliX0xUTElCUkFSSUVTID0gbGliYnoyLmxhCisKK2xpYmJ6Ml9sYV9TT1VSQ0VTID0gYmxvY2tzb3J0LmMgIFwKKyAgICAgICAgICAgICAgICAgICAgaHVmZm1hbi5jICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY3JjdGFibGUuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgcmFuZHRhYmxlLmMgIFwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzcy5jIFwKKyAgICAgICAgICAgICAgICAgICAgYnpsaWIuYworCitiaW5fUFJPR1JBTVMgPSBiemlwMiBiemlwMnJlY292ZXIKKworYnppcDJfU09VUkNFUyA9IGJ6aXAyLmMKK2J6aXAyX0xEQUREID0gbGliYnoyLmxhCitiemlwMl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworaW5jbHVkZV9IRUFERVJTID0gYnpsaWIuaAorCitiemlwMnJlY292ZXJfU09VUkNFUyA9IGJ6aXAycmVjb3Zlci5jCitiemlwMnJlY292ZXJfTERBREQgPSBsaWJiejIubGEKK2J6aXAycmVjb3Zlcl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworYmluX1NDUklQVFMgPSBiemdyZXAgYnptb3JlIGJ6ZGlmZgorCittYW5fTUFOUyA9IGJ6aXAyLjEgYnpncmVwLjEgYnptb3JlLjEgYnpkaWZmLjEKK0VYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorCitydW50ZXN0OgorCS4vYnppcDIgLTEgIDwgc2FtcGxlMS5yZWYgPiBzYW1wbGUxLnJiMgorCS4vYnppcDIgLTIgIDwgc2FtcGxlMi5yZWYgPiBzYW1wbGUyLnJiMgorCS4vYnppcDIgLTMgIDwgc2FtcGxlMy5yZWYgPiBzYW1wbGUzLnJiMgorCS4vYnppcDIgLWQgIDwgc2FtcGxlMS5iejIgPiBzYW1wbGUxLnRzdAorCS4vYnppcDIgLWQgIDwgc2FtcGxlMi5iejIgPiBzYW1wbGUyLnRzdAorCS4vYnppcDIgLWRzIDwgc2FtcGxlMy5iejIgPiBzYW1wbGUzLnRzdAorCUBpZiBjbXAgc2FtcGxlMS5iejIgc2FtcGxlMS5yYjI7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMSBjb21wcmVzcyI7IGZpCisJQGlmIGNtcCBzYW1wbGUyLmJ6MiBzYW1wbGUyLnJiMjsgdGhlbiBlY2hvICJQQVNTOiBzYW1wbGUyIGNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTMuYnoyIHNhbXBsZTMucmIyOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTMgY29tcHJlc3MiO1wKKwllbHNlIGVjaG8gIkZBSUw6IHNhbXBsZTMgY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMS50c3Qgc2FtcGxlMS5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUxIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMi50c3Qgc2FtcGxlMi5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMiBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMy50c3Qgc2FtcGxlMy5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMyBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUzIGRlY29tcHJlc3MiOyBmaQorCitpbnN0YWxsLXB0ZXN0OgorCWNwICQoc3JjZGlyKS9NYWtlZmlsZQkJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5iejIJJChERVNURElSKS8KKwlsbiAtcyAkKGJpbmRpcikvYnppcDIJCSQoREVTVERJUikvYnppcDIKKworaW5zdGFsbC1leGVjLWhvb2s6CisJbG4gLXMgJChiaW5kaXIpL2J6aXAyJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnVuemlwMiQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iemlwMiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6Y2F0JChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6Z3JlcCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6ZWdyZXAkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpncmVwJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpmZ3JlcCQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iem1vcmUkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemxlc3MkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpkaWZmJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpjbXAkKEVYRUVYVCkKKworaW5zdGFsbC1kYXRhLWhvb2s6CisJZWNobyAiLnNvIG1hbjEvYnpncmVwLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6ZWdyZXAuMQorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9iemZncmVwLjEKKwllY2hvICIuc28gbWFuMS9iem1vcmUuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpsZXNzLjEKKwllY2hvICIuc28gbWFuMS9iemRpZmYuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpjbXAuMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZTU3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxNCBAQAorQUNfUFJFUkVRKFsyLjU3XSkKKworQUNfSU5JVChiemlwMiwgMi4wLjUsICwgbGliWHJlbmRlcikKK0FNX0lOSVRfQVVUT01BS0UoZm9yZWlnbikKK0FNX01BSU5UQUlORVJfTU9ERQorCisjQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKworIyBDaGVjayBmb3IgcHJvZ3MKK0FDX1BST0dfQ0MKK0FDX1BST0dfTElCVE9PTAorCitBQ19PVVRQVVQoW01ha2VmaWxlXSkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMGZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2ZlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJWZXJ5IGhpZ2gtcXVhbGl0eSBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJiemlwMiBjb21wcmVzc2VzIGZpbGVzIHVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2stc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIFwKK0h1ZmZtYW4gY29kaW5nLiBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkgY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwgXAorTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5iemlwLm9yZy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gImJ6aXAyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTtiZWdpbmxpbmU9ODtlbmRsaW5lPTM3O21kNT00MGQ5ZDFlYjA1NzM2ZDFiZmM4NmNmZGQ5MTA2ZTZiMiIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYnppcC5vcmcvJHtQVn0vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYztzdWJkaXI9JHtCUH0gXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW07c3ViZGlyPSR7QlB9IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwYjUxNmY0NzA0ZDRhN2NiNTBhMWQ5N2U2ZThlMTViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyODQ4ZjM0ZmNkNWQ2Y2Y0N2RlZjAwNDYxZmNiNTI4YTA0ODRkOGVkZWY4MjA4ZDZkMmUyOTA5ZGM2MWQ5Y2QiCisKK1BBQ0tBR0VTID0rICJsaWJiejIiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1mcGljIC1XaW5saW5lIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYnVuemlwMiBiemNhdCIKKworI2luc3RhbGwgYmluYXJpZXMgdG8gYnppcDItbmF0aXZlIHVuZGVyIHN5c3Jvb3QgZm9yIHJlcGxhY2VtZW50LW5hdGl2ZQorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tYmluZGlyPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BOfSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLWYgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorCXNlZCAtaSAtZSAic3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8IiAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitGSUxFU19saWJiejIgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlXzEuMy41OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQzNGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCisKK1NVTU1BUlkgPSAiJHtTVU1NQVJZX2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXN9IgorREVTQ1JJUFRJT04gPSAiJHtERVNDUklQVElPTl9jaGtjb25maWctYWx0ZXJuYXRpdmVzfSIKK0RFUEVORFMgPSAiIgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworIyBUaGUgc3lzcm9vdCBicmFuY2ggaXMgMS4zLjU5ICsgc29tZSBnaXQgY29tbWl0cyBmcm9tIG1hc3RlciArIC0tc3lzcm9vdAorIyBzdXBwb3J0IGZvciBhbHRlcm5hdGl2ZXMuCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20va2VyZ290aC9jaGtjb25maWc7YnJhbmNoPXN5c3Jvb3QiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiY2Q0MzdlY2JkODk4NmM4OTQ0NDJmOGZjZTFlMDA2MWUyMGYwNGRlZSIKK1BWID0gIjEuMy41OSske1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworIyBXZSB3YW50IG91ciBuYXRpdmUgcmVjaXBlcyB0byBidWlsZCB1c2luZyB0aGUgdGFyZ2V0IHBhdGhzIHJhdGhlciB0aGFuIHBhdGhzCisjIGludG8gdGhlIHN5c3Jvb3QsIGFzIHdlIG1heSB1c2UgdGhlbSB0byBjb25zdHJ1Y3QgdGhlIHJvb3Rmcy4gQXMgc3VjaCwgd2UKKyMgb25seSBhZGp1c3QgdGhlIHBhdGhzIHRvIG1hdGNoIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHRhcmdldCwgbm90IG5hdGl2ZS4KK29iZXlfdmFyaWFibGVzICgpIHsKKwlzZWQgLWkgJ3MsQUxURVJOQVRJVkVTX1JPT1QsT1BLR19PRkZMSU5FX1JPT1QsJyBhbHRlcm5hdGl2ZXMuYworfQorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsdGVybmF0aXZlcworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyBcCisJICAgICAgICAgICAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzCisKKwlpbnN0YWxsIC1EIC1tIDA3NTUgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vYWx0ZXJuYXRpdmVzCisJaW5zdGFsbCAtRCAtbSAwNjQ0IGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOAorCisJbG4gLXMgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCWxuIC1zIGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC91cGRhdGUtYWx0ZXJuYXRpdmVzLjgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2xzYgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODg0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIKQEAgLTAsMCArMSw2NSBAQAorU1VNTUFSWSA9ICJBIHN5c3RlbSB0b29sIGZvciBtYWludGFpbmluZyB0aGUgL2V0Yy9yYyouZCBoaWVyYXJjaHkiCitERVNDUklQVElPTiA9ICJDaGtjb25maWcgaXMgYSBiYXNpYyBzeXN0ZW0gdXRpbGl0eS4gIEl0IHVwZGF0ZXMgYW5kIHF1ZXJpZXMgcnVubGV2ZWwgXAoraW5mb3JtYXRpb24gZm9yIHN5c3RlbSBzZXJ2aWNlcy4gIENoa2NvbmZpZyBtYW5pcHVsYXRlcyB0aGUgbnVtZXJvdXMgXAorc3ltYm9saWMgbGlua3MgaW4gL2V0Yy9yYy5kLCB0byByZWxpZXZlIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBvZiBzb21lIFwKK29mIHRoZSBkcnVkZ2VyeSBvZiBtYW51YWxseSBlZGl0aW5nIHRoZSBzeW1ib2xpYyBsaW5rcy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMS41IHJlcXVpcmVzIHNlbGludXgiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2MvaC9jaGtjb25maWciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NTc0YzY5NjVhZTVmNTgzZTU1ODgwZTM5N2ZiYjAxOCIKKworREVQRU5EUyA9ICJsaWJuZXd0IHBvcHQiCitQUk9WSURFUyArPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJodHRwOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL2gvY2hrY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzIwMzljYTY3ZjI3NDlmZTBjMDZlZjdjNmY4ZWUyNDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMThiNDk3ZDI1YjJjYWRhOTU1YzcyODEwZTQ1ZmNhZDgyODBkMTA1ZjE3Y2Y0NWUyOTcwZjE4MjcxMjExZGU2OCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgTWFrZWZpbGUgdXNlcyBSUE1fT1BUX0ZMQUdTIHRvIGNvbnN0cnVjdCBDRkxBR1MKKyMKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ1JQTV9PUFRfRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdCSU5ESVI9JHtiYXNlX3NiaW5kaXJ9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisgICAgJ0FMVERJUj0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMnIFwKKyAgICAnQUxUREFUQURJUj0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcycgXAorIgorCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAib2JleV92YXJpYWJsZXMiCitkb191bnBhY2tbdmFyZGVwc10gKz0gIm9iZXlfdmFyaWFibGVzIgorb2JleV92YXJpYWJsZXMgKCkgeworCXNlZCAtaSAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sOyBzLC9saWIvc3lzdGVtZCwke2Jhc2VfbGliZGlyfS9zeXN0ZW1kLCcgJHtTfS9sZXZlbGRiLmgKKwlzZWQgLWkgLWUgJ3MsL2V0Yy9hbHRlcm5hdGl2ZXMsJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC92YXIvbGliL2FsdGVybmF0aXZlcywke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC91c3Ivc2hhcmUvbG9jYWxlLCR7ZGF0YWRpcn0vbG9jYWxlLCcgJHtTfS9hbHRlcm5hdGl2ZXMuYworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ0lOU1RBTExOTFNESVI9JHtEfSR7ZGF0YWRpcn0vbG9jYWxlJyBcCisJCSdCSU5ESVI9JHtzYmluZGlyfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY2hrY29uZmlnLmQKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWFsdGVybmF0aXZlcyAke1BOfS1hbHRlcm5hdGl2ZXMtZG9jIgorU1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXMgPSAiTWFpbnRhaW4gc3ltYm9saWMgbGlua3MgZGV0ZXJtaW5pbmcgZGVmYXVsdCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlcyA9ICJhbHRlcm5hdGl2ZXMgY3JlYXRlcywgcmVtb3ZlcywgbWFpbnRhaW5zIGFuZCBkaXNwbGF5cyBcCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ltYm9saWMgbGlua3MgY29tcHJpc2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbS4iCitTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHtTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlc30gLSBEb2N1bWVudGF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlc30gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKK1JQUk9WSURFU18ke1BOfS1hbHRlcm5hdGl2ZXMgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCitSQ09ORkxJQ1RTXyR7UE59LWFsdGVybmF0aXZlcyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzID0gIiR7c2JpbmRpcn0vYWx0ZXJuYXRpdmVzICR7c2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyBcCisJCQkgICAgJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW44L3VwZGF0ZS1hbHRlcm5hdGl2ZXMuOCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMjEzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGNwaW8tMi4xMS9nbnUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcGlvLTIuMTEub3JpZy9nbnUvTWFrZWZpbGUuYW0KKysrKyBjcGlvLTIuMTEvZ251L01ha2VmaWxlLmFtCitAQCAtNzM0LDcgKzczNCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRhZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorRGVzY3JpcHRpb246IENWRS0yMDE1LTExOTcKKyBBcHBseSBwYXRjaCBieSBWaXRlenNsYXYgQ2l6ZWsgb2YgU3VTRSB0byBmaXggQ1ZFLTIwMTUtMTE5Ny4KKyBVcHN0cmVhbSBpcyBkb3JtYW50IG9yIG5vIGxvbmdlciBleGlzdGluZy4gVG8gcmVzdG9yZSB0aGUgb2xkCisgYmVoYXZpb3VyIHVzZSAtLWV4dHJhY3Qtb3Zlci1zeW1saW5rcyAoQ2xvc2VzOiAjNzc0NjY5KQorIFRoaXMgaXNzdWUgaGFzIGJlZW4gZGlzY292ZXJlZCBieSBBbGV4YW5kZXIgQ2hlcmVwYW5vdi4KK0F1dGhvcjogVml0ZXpzbGF2IENpemVrIDx2Y2l6ZWtAc3VzZS5jej4KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NDY2OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9kb2MvY3Bpby4xCisrKysgY3Bpby0yLjExK2Rmc2cvZG9jL2NwaW8uMQorQEAgLTIyLDYgKzIyLDcgQEAgY3BpbyBcLSBjb3B5IGZpbGVzIHRvIGFuZCBmcm9tIGFyY2hpdmVzCisgW1wtXC1vd25lcj1bdXNlcl1bOi5dW2dyb3VwXV0gW1wtXC1uby1wcmVzZXJ2ZS1vd25lcl0gW1wtXC1tZXNzYWdlPW1lc3NhZ2VdCisgW1wtXC1mb3JjZVwtbG9jYWxdIFtcLVwtbm9cLWFic29sdXRlXC1maWxlbmFtZXNdIFtcLVwtc3BhcnNlXQorIFtcLVwtb25seVwtdmVyaWZ5XC1jcmNdIFtcLVwtdG9cLXN0ZG91dF0gW1wtXC1xdWlldF0gW1wtXC1yc2gtY29tbWFuZD1jb21tYW5kXQorK1tcLVwtZXh0cmFjdFwtb3Zlclwtc3ltbGlua3NdCisgW1wtXC1oZWxwXSBbXC1cLXZlcnNpb25dIFtwYXR0ZXJuLi4uXSBbPCBhcmNoaXZlXQorIAorIC5CIGNwaW8KKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9jb3B5aW4uYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9jb3B5aW4uYworQEAgLTcwMCw2ICs3MDAsNTEgQEAgY29weWluX2xpbmsgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZQorICAgZnJlZSAobGlua19uYW1lKTsKKyB9CisgDAorKworK3N0YXRpYyBpbnQKKytwYXRoX2NvbnRhaW5zX3N5bWxpbmsoY2hhciAqcGF0aCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdDsKKysgIGNoYXIgKnNsYXNoOworKyAgY2hhciAqbmV4dHNsYXNoOworKworKyAgLyogd2UgZ290IE5VTEwgcG9pbnRlciBvciBlbXB0eSBzdHJpbmcgKi8KKysgIGlmICghcGF0aCB8fCAhKnBhdGgpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgc2xhc2ggPSBwYXRoOworKworKyAgd2hpbGUgKChuZXh0c2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSAhPSBOVUxMKSB7CisrICAgIHNsYXNoID0gbmV4dHNsYXNoOworKyAgICAqc2xhc2ggPSAnXDAnOworKworKyAgICBpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKSB7CisrICAgICAgaWYgKGVycm5vID09IEVMT09QKSB7CisrICAgICAgICAvKiBFTE9PUCAtIHRvbyBtYW55IHN5bWxpbmtzICovCisrICAgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT01FTSkgeworKyAgICAgICAgLyogTm8gbWVtb3J5IGZvciBsc3RhdCAtIHRlcm1pbmF0ZSAqLworKyAgICAgICAgeGFsbG9jX2RpZSgpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvKiBjYW5ub3QgbHN0YXQgcGF0aCAtIGdpdmUgdXAgKi8KKysgICAgICAgICpzbGFzaCA9ICcvJzsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKysgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgICAgKnNsYXNoID0gJy8nOworKyAgfQorKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNvcHlpbl9maWxlIChzdHJ1Y3QgY3Bpb19maWxlX3N0YXQgKmZpbGVfaGRyLCBpbnQgaW5fZmlsZV9kZXMpCisgeworQEAgLTE0NzEsNiArMTUxNiwyMyBAQCBwcm9jZXNzX2NvcHlfaW4gKCkKKyAJeworIAkgIC8qIENvcHkgdGhlIGlucHV0IGZpbGUgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gICovCisgCisrICAgICAgICAgIC8qIENhbiB3ZSB3cml0ZSBmaWxlcyBvdmVyIHN5bWxpbmtzPyAqLworKyAgICAgICAgICBpZiAoIWV4dHJhY3Rfb3Zlcl9zeW1saW5rcykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAocGF0aF9jb250YWluc19zeW1saW5rKGZpbGVfaGRyLmNfbmFtZSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBmaWxlICovCisrICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHdyaXRlIG92ZXIgc3ltbGlua3MuIFNraXBwaW5nICVzXG4iLCBmaWxlX2hkci5jX25hbWUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfdG9zc19pbnB1dCAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLmNfZmlsZXNpemUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHIuY19maWxlc2l6ZSk7CisrICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KKysJICAgICAgICAgIGVycm9yICgxLCAwLCBfKCJDYW4ndCB3cml0ZSBvdmVyIHN5bWxpbmtzOiAlc1xuIiksIGZpbGVfaGRyLmNfbmFtZSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisgCSAgLyogRG8gd2UgbmVlZCB0byByZW5hbWUgdGhlIGZpbGU/ICovCisgCSAgaWYgKHJlbmFtZV9mbGFnIHx8IHJlbmFtZV9iYXRjaF9maWxlKQorIAkgICAgeworLS0tIGNwaW8tMi4xMStkZnNnLm9yaWcvc3JjL2V4dGVybi5oCisrKysgY3Bpby0yLjExK2Rmc2cvc3JjL2V4dGVybi5oCitAQCAtOTUsNiArOTUsNyBAQCBleHRlcm4gY2hhciBpbnB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIGlucHV0X2lzX3NlZWthYmxlOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zZWVrYWJsZTsKKytleHRlcm4gYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisgZXh0ZXJuIGludCAoKnhzdGF0KSAoKTsKKyBleHRlcm4gdm9pZCAoKmNvcHlfZnVuY3Rpb24pICgpOworIAwKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9nbG9iYWwuYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9nbG9iYWwuYworQEAgLTE4Nyw2ICsxODcsOSBAQCBib29sIHRvX3N0ZG91dF9vcHRpb24gPSBmYWxzZTsKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAgKi8KKyBjaGFyICpwcm9ncmFtX25hbWU7CisgCisrLyogRXh0cmFjdCBmaWxlcyBvdmVyIHN5bWJvbGljIGxpbmtzICovCisrYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisrCisgLyogQSBwb2ludGVyIHRvIGVpdGhlciBsc3RhdCBvciBzdGF0LCBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgIGRlcmVmZXJlbmNpbmcgb2Ygc3ltbGlua3MgaXMgZG9uZSBmb3IgaW5wdXQgZmlsZXMuICAqLworIGludCAoKnhzdGF0KSAoKTsKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9tYWluLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvbWFpbi5jCitAQCAtNTcsNyArNTcsOCBAQCBlbnVtIGNwaW9fb3B0aW9ucyB7CisgICBGT1JDRV9MT0NBTF9PUFRJT04sICAgICAgICAgICAgCisgICBERUJVR19PUFRJT04sICAgICAgICAgICAgICAgICAgCisgICBCTE9DS19TSVpFX09QVElPTiwgICAgICAgICAgICAgCistICBUT19TVERPVVRfT1BUSU9OCisrICBUT19TVERPVVRfT1BUSU9OLAorKyAgRVhUUkFDVF9PVkVSX1NZTUxJTktTCisgfTsKKyAKKyBjb25zdCBjaGFyICpwcm9ncmFtX2F1dGhvcnNbXSA9CitAQCAtMjIyLDYgKzIyMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworICAgIE5fKCJDcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyB3aGVyZSBuZWVkZWQiKSwgR1JJRCsxIH0sCisgICB7Im5vLXByZXNlcnZlLW93bmVyIiwgTk9fUFJFU0VSVkVfT1dORVJfT1BUSU9OLCAwLCAwLAorICAgIE5fKCJEbyBub3QgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGVzIiksIEdSSUQrMSB9LAorKyAgeyJleHRyYWN0LW92ZXItc3ltbGlua3MiLCBFWFRSQUNUX09WRVJfU1lNTElOS1MsIDAsIDAsCisrICAgTl8oIkZvcmNlIHdyaXRpbmcgb3ZlciBzeW1ib2xpYyBsaW5rcyIpLCBHUklEKzEgfSwKKyAgIHsidW5jb25kaXRpb25hbCIsICd1JywgTlVMTCwgMCwKKyAgICBOXygiUmVwbGFjZSBhbGwgZmlsZXMgdW5jb25kaXRpb25hbGx5IiksIEdSSUQrMSB9LAorICAgeyJzcGFyc2UiLCBTUEFSU0VfT1BUSU9OLCBOVUxMLCAwLAorQEAgLTQxMiw2ICs0MTUsMTAgQEAgY3JjIG5ld2Mgb2RjIGJpbiB1c3RhciB0YXIgKGFsbC1jYXBzIGFscworICAgICAgIG5vX2Nob3duX2ZsYWcgPSB0cnVlOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIEVYVFJBQ1RfT1ZFUl9TWU1MSU5LUzoJCSAgICAgICAgLyogLS1leHRyYWN0LW92ZXItc3ltbGlua3MgKi8KKysgICAgICBleHRyYWN0X292ZXJfc3ltbGlua3MgPSB0cnVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlICdvJzoJCS8qIENvcHktb3V0IG1vZGUuICAqLworICAgICAgIGlmIChjb3B5X2Z1bmN0aW9uICE9IDApCisgCWVycm9yIChQQVhFWElUX0ZBSUxVUkUsIDAsIF8oIk1vZGUgYWxyZWFkeSBkZWZpbmVkIikpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZDNjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKQEAgLTAsMCArMSwyMjAgQEAKK2NwaW86IEZpeCBtZW1vcnkgb3ZlcnJ1biBvbiByZWFkaW5nIGltcHJvcGVybHkgY3JlYXRlZCBsaW5rIHJlY29yZHMKKworU2lnbmVkLW9mZi1ieTogQmlhbiBOYWltZW5nIDxiaWFubm1AY24uZnVqaXRzdS5jb20+CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NwaW8uZ2l0L2NvbW1pdC8/aWQ9NzQ2ZjNmZjY3MGRjZmNkZDI4ZmNjOTkwZTc5Y2Q2ZmNjYzdhZTQ4ZAorCisgICogc3JjL2NvcHlpbi5jIChnZXRfbGlua19uYW1lKTogTmV3IGZ1bmN0aW9uLgorICAobGlzdF9maWxlLCBjb3B5aW5fbGluayk6IHVzZSBnZXRfbGlua19uYW1lCisKKyAgKiB0ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL3N5bWxpbmstbG9uZy5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisgICogdGVzdHMvdGVzdHN1aXRlLmF0OiBMaWtld2lzZS4KKworICBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNlcmdleSBQb3pueWFrb2ZmIDxncmF5QGdudS5vcmcudWE+CisKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvc3JjL2NvcHlpbi5jIGNwaW8tMi4xMS9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuMTEub3JpZy9zcmMvY29weWluLmMJMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvc3JjL2NvcHlpbi5jCTIwMTQtMTItMDggMTM6MTQ6MDQuMzU1NTQ3NTA4ICswODAwCitAQCAtMTI2LDYgKzEyNiwyOCBAQCB0YXBlX3NraXBfcGFkZGluZyAoaW50IGluX2ZpbGVfZGVzLCBvZmZfCisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTY1MCwxMCArNjY3LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0gY3Bpby0yLjExL3Rlc3RzL01ha2VmaWxlLmFtCistLS0gY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxNC0xMi0wOCAxMzoxNDo0OS45MzE1NDU3MjcgKzA4MDAKK0BAIC01Miw2ICs1Miw4IEBAIFRFU1RTVUlURV9BVCA9IFwKKyAgc2V0c3RhdDA0LmF0XAorICBzZXRzdGF0MDUuYXRcCisgIHN5bWxpbmsuYXRcCisrIHN5bWxpbmstYmFkLWxlbmd0aC5hdFwKKysgc3ltbGluay1sb25nLmF0XAorICB2ZXJzaW9uLmF0CisgCisgVEVTVFNVSVRFID0gJChzcmNkaXIpL3Rlc3RzdWl0ZQorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMzoxNzo0NS45Nzk1Mzg4NDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMjAxNC0xMi0wOCAxMzoxNzo1Ny4yMTk1Mzg0MDggKzA4MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEuOTAgY2hhbmdlZCB0aGUgd2F5IHN5bWxpbmsgbmFtZSBpcyByZWFkIGZyb20gYXJjaGl2ZS4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstbG9uZ10pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9DSEVDSyhbCisrCisrIyBsZW4oZGlybmFtZSkgPiBSRUFEQlVGU0laRQorK2Rpcm5hbWU9CisrZm9yIGkgaW4gezEuLjUyfTsgZG8KKysgICAgZGlybmFtZT0ieHh4eHh4eHh4LyRkaXJuYW1lIgorKyAgICBta2RpciAiJGRpcm5hbWUiCisrZG9uZQorK2xuIC1zICIkZGlybmFtZSIgeCB8fCBBVF9TS0lQX1RFU1QKKysKKytlY2hvIHggfCBjcGlvIC1vID4gYXIKKytsaXN0PWBjcGlvIC10diA8IGFyIHwgc2VkICdzfC4qLT4gfHwnYAorK3Rlc3QgIiRsaXN0IiA9ICIkZGlybmFtZSIgJiYgZWNobyBzdWNjZXNzIHx8IGVjaG8gZmFpbAorK10sCisrWzBdLAorK1tzdWNjZXNzCisrXSxbMiBibG9ja3MKKysyIGJsb2NrcworK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy90ZXN0c3VpdGUuYXQgY3Bpby0yLjExL3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDEwLTAyLTE1IDE4OjAyOjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy90ZXN0c3VpdGUuYXQJMjAxNC0xMi0wOCAxMzoxNToxMy41MTU1NDQ4MDUgKzA4MDAKK0BAIC0zMSw2ICszMSw4IEBAIG00X2luY2x1ZGUoW3ZlcnNpb24uYXRdKQorIAorIG00X2luY2x1ZGUoW2lub3V0LmF0XSkKKyBtNF9pbmNsdWRlKFtzeW1saW5rLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWJhZC1sZW5ndGguYXRdKQorK200X2luY2x1ZGUoW3N5bWxpbmstbG9uZy5hdF0pCisgbTRfaW5jbHVkZShbaW50ZXJkaXIuYXRdKQorIAorIG00X2luY2x1ZGUoW3NldHN0YXQwMS5hdF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGNwaW8tMi4xMS9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNwaW8tMi4xMS5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTM6NDMuMTMzMDY2MjQ3IC0wNzAwCisrKysgY3Bpby0yLjExL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTQ6MTAuMTg5MDY3NTY0IC0wNzAwCitAQCAtMTM4LDggKzEzOCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9zdGF0ZGVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjhlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBdm9pZCBtdWx0aXBsZSBzdGF0IGRlZmluaXRpb25zCitQYXRjaCB0YWtlbiBmcm9tIGNwaW8gbWFpbGluZyBsaXN0IHBvc3RpbmcgMjAxMC0wMy0xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmggY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAorLS0tIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaAkyMDEwLTAyLTEyIDAyOjE5OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wNy0yMyAxMzoxNzoyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Miw0ICs4Miw2IEBACisgI2RlZmluZSBsc3RhdCBzdGF0CisgI2VuZGlmCisgaW50IGxzdGF0ICgpOworKyNpZm5kZWYgc3RhdAorIGludCBzdGF0ICgpOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhN2NmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCit0aGUgR1BMdjIgdGFyIHJlY2lwZSBwYXRjaCBpcyBhbHNvIGFwcGxpY2FibGUgdG8gdGhpcyBHUEx2MiBjcGlvIAorcmVjaXBlLCBhcyB0aGV5IHNoYXJlIGNvZGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjUKKworSW5kZXg6IHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGFyLTEuMTcub3JpZy9saWIvcnRhcGVsaWIuYworKysrIHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCitAQCAtNTcwLDcgKzU3MCw3IEBAIHJtdF9yZWFkX18gKGludCBoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2kKKyAKKyAgIHNwcmludGYgKGNvbW1hbmRfYnVmZmVyLCAiUiVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCk7CisgICBpZiAoZG9fY29tbWFuZCAoaGFuZGxlLCBjb21tYW5kX2J1ZmZlcikgPT0gLTEKKy0gICAgICB8fCAoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKQorKyAgICAgIHx8ICgoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKSB8fCAoc3RhdHVzID4gbGVuZ3RoKSkKKyAgICAgcmV0dXJuIFNBRkVfUkVBRF9FUlJPUjsKKyAKKyAgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBzdGF0dXM7IGNvdW50ZXIgKz0gcmxlbiwgYnVmZmVyICs9IHJsZW4pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0OGU3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApAQCAtMCwwICsxLDIxNyBAQAorY3BpbzogRml4IG1lbW9yeSBvdmVycnVuIG9uIHJlYWRpbmcgaW1wcm9wZXJseSBjcmVhdGVkIGxpbmsgcmVjb3JkcworCitTaWduZWQtb2ZmLWJ5OiBCaWFuIE5haW1lbmcgPGJpYW5ubUBjbi5mdWppdHN1LmNvbT4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY3Bpby5naXQvY29tbWl0Lz9pZD03NDZmM2ZmNjcwZGNmY2RkMjhmY2M5OTBlNzljZDZmY2NjN2FlNDhkCisKKyAgKiBzcmMvY29weWluLmMgKGdldF9saW5rX25hbWUpOiBOZXcgZnVuY3Rpb24uCisgIChsaXN0X2ZpbGUsIGNvcHlpbl9saW5rKTogdXNlIGdldF9saW5rX25hbWUKKworICAqIHRlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvc3ltbGluay1sb25nLmF0OiBOZXcgZmlsZS4KKyAgKiB0ZXN0cy9NYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KKyAgKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IExpa2V3aXNlLgorCisgIFNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2VyZ2V5IFBvem55YWtvZmYgPGdyYXlAZ251Lm9yZy51YT4KKworZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYyBjcGlvLTIuOC9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYwkyMDA3LTA2LTA3IDE5OjU4OjAzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3NyYy9jb3B5aW4uYwkyMDE0LTEyLTA4IDExOjMwOjAxLjE1OTc5MTQ4NCArMDgwMAorQEAgLTEyNiw2ICsxMjYsMjggQEAgdGFwZV9za2lwX3BhZGRpbmcgKGludCBpbl9maWxlX2RlcywgaW50CisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTczMiwxMCArNzQ5LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9NYWtlZmlsZS5hbSBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAwNi0xMC0yNCAxODozMjoxMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQkyMDE0LTEyLTA4IDExOjMwOjUyLjM4Nzc4OTQ4MiArMDgwMAorQEAgLTQ1LDYgKzQ1LDggQEAgVEVTVFNVSVRFX0FUID0gXAorICB0ZXN0c3VpdGUuYXRcCisgIGlub3V0LmF0XAorICBzeW1saW5rLmF0XAorKyBzeW1saW5rLWJhZC1sZW5ndGguYXRcCisrIHN5bWxpbmstbG9uZy5hdFwKKyAgdmVyc2lvbi5hdAorIAorIFRFU1RTVUlURSA9ICQoc3JjZGlyKS90ZXN0c3VpdGUKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CistLS0gY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMTozMzoyNS4yODM3ODM1MDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdCBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWxvbmcuYXQKKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkyMDE0LTEyLTA4IDExOjM0OjI4LjgwNzc4MTAyNCArMDgwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbTR0ZSB0byBjcmVhdGUgdGVzdHN1aXRlLiAgLSotIEF1dG90ZXN0IC0qLQorKyMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEgVVNBLgorKworKyMgQ3BpbyB2Mi4xMS45MCBjaGFuZ2VkIHRoZSB3YXkgc3ltbGluayBuYW1lIGlzIHJlYWQgZnJvbSBhcmNoaXZlLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1sb25nXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0NIRUNLKFsKKysKKysjIGxlbihkaXJuYW1lKSA+IFJFQURCVUZTSVpFCisrZGlybmFtZT0KKytmb3IgaSBpbiB7MS4uNTJ9OyBkbworKyAgICBkaXJuYW1lPSJ4eHh4eHh4eHgvJGRpcm5hbWUiCisrICAgIG1rZGlyICIkZGlybmFtZSIKKytkb25lCisrbG4gLXMgIiRkaXJuYW1lIiB4IHx8IEFUX1NLSVBfVEVTVAorKworK2VjaG8geCB8IGNwaW8gLW8gPiBhcgorK2xpc3Q9YGNwaW8gLXR2IDwgYXIgfCBzZWQgJ3N8LiotPiB8fCdgCisrdGVzdCAiJGxpc3QiID0gIiRkaXJuYW1lIiAmJiBlY2hvIHN1Y2Nlc3MgfHwgZWNobyBmYWlsCisrXSwKKytbMF0sCisrW3N1Y2Nlc3MKKytdLFsyIGJsb2NrcworKzIgYmxvY2tzCisrXSkKKysKKytBVF9DTEVBTlVQCitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0IGNwaW8tMi44L3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMDYtMTAtMjQgMTg6MzI6MTMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMTQtMTItMDggMTE6MzQ6NTYuNTE1Nzc5OTQyICswODAwCitAQCAtMzEsMyArMzEsNSBAQCBtNF9pbmNsdWRlKFt2ZXJzaW9uLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtpbm91dC5hdF0pCisgbTRfaW5jbHVkZShbc3ltbGluay5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1iYWQtbGVuZ3RoLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWxvbmcuYXRdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjU4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRGVmaW5lIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBvbmx5IGlmIGl0IHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZC4KKyMgVGhpcyBpcyBuZWVkZWQgdG8gY29uZmlndXJlIGNvcnJlY3RseSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mLgorCitkaWZmIC11ck4gY3Bpby0yLjgub3JpZy9tNC9leHRlbnNpb25zLm00IGNwaW8tMi44L200L2V4dGVuc2lvbnMubTQKKy0tLSBjcGlvLTIuOC5vcmlnL200L2V4dGVuc2lvbnMubTQJMjAwNi0xMC0xMiAwNDozNDo0NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjcGlvLTIuOC9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjMgMTQ6Mzc6MzYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDc5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEF2b2lkIG11bHRpcGxlIHN0YXQgZGVmaW5pdGlvbnMKKyMgUGF0Y2ggdGFrZW4gZnJvbSBjcGlvIG1haWxpbmcgbGlzdCBwb3N0aW5nIDIwMTAtMDMtMTkKKworZGlmZiAtdXJOIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaCBjcGlvLTIuMTEvc3JjL2ZpbGV0eXBlcy5oCistLS0gY3Bpby0yLjExLm9yaWcvc3JjL2ZpbGV0eXBlcy5oCTIwMTAtMDItMTIgMDI6MTk6MjMuMDAwMDAwMDAwIC0wODAwCisrKysgY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAkyMDEwLTA3LTIzIDEzOjE3OjI1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTgyLDQgKzgyLDYgQEAKKyAjZGVmaW5lIGxzdGF0IHN0YXQKKyAjZW5kaWYKKyBpbnQgbHN0YXQgKCk7CisrI2lmbmRlZiBzdGF0CisgaW50IHN0YXQgKCk7CisrI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkOTJiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYgpAQCAtMCwwICsxLDE1IEBACitpbmNsdWRlIGNwaW9fdjIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSIKKworUFIgPSAicjUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMTEyYmI2YzQ1ODYzNDY4YjU0OTZiYTEyODc5MmY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDFiMWQ3NzRjZDZlNGNkMzk0MTYyMDNjOTFlYzU5ZGJkNjVkZDI3ZDc5ZDc1ZTFhOWI4OTQ5N2VhNjQzOTc4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk3ZGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBjcGlvX3YyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjdmNzcyZWEzYTI0ODkyMzFjYjQ4NzI2NTZjYWMzNGIiCisKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKwkgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorCSAgICBmaWxlOi8vZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2FhMzU2ZTY5ZTE0OWZiNDliNzZiYWNjNjQ2MTVhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYjIwMzI0ODg3NGMzYjVhNzI4YjM1MWYwNjUxM2U1MjgyZjczZTAxNzBiN2YyMDdmYmY4YzM5ZjI4ZjZiNGFkIgorCisjIFJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggZ2NjIDQuMyBhbmQgbGF0ZXI6CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2RlNGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJHTlUgY3BpbyBpcyBhIHByb2dyYW0gdG8gbWFuYWdlIGFyY2hpdmVzIG9mIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiR05VIGNwaW8gaXMgYSB0b29sIGZvciBjcmVhdGluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcywgb3IgY29weWluZyBmaWxlcyBmcm9tIG9uZSBwbGFjZSB0byBcCithbm90aGVyLiBJdCBoYW5kbGVzIGEgbnVtYmVyIG9mIGNwaW8gZm9ybWF0cyBhcyB3ZWxsIGFzIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jcGlvLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJ0ZXhpbmZvLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NwaW8vY3Bpby0ke1BWfS50YXIuZ3ogXAorICAgIGZpbGU6Ly9zdGF0ZGVmLnBhdGNoIFwKKyAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTID0gIiR7V09SS0RJUn0vY3Bpby0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICJERUZBVUxUX1JNVF9ESVI9JHtiYXNlX3NiaW5kaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9LworICAgIG12ICIke0R9JHtiaW5kaXJ9L2NwaW8iICIke0R9JHtiYXNlX2JpbmRpcn0vY3BpbyIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcm10IgorCitGSUxFU18ke1BOfS1ybXQgPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNwaW8iCitBTFRFUk5BVElWRV8ke1BOfS1ybXQgPSAicm10IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbcm10XSA9ICI1MCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybXRdID0gIiR7YmFzZV9zYmluZGlyfS9ybXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJlN2RmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApAQCAtMCwwICsxLDMzOSBAQAorRnJvbSA4YTZlNDM3MjZhZDBhZTQxYmQxY2MyYzI0OGQ5MWRlYjMxNDU5MzU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjExOjQ4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhY2tsaWIuYzogc3VwcG9ydCBkaWN0aW9uYXJ5IGJ5dGUgb3JkZXIgZGVwZW5kZW50CisKK1RoZSBwcmV2aW91cyBkaWN0IGZpbGVzIGFyZSBOT1QgYnl0ZS1vcmRlciBpbmRlcGVuZGVudCwgaW4gZmFjdCB0aGV5IGFyZQorcHJvYmFibHkgQVJDSElURUNUVVJFIFNQRUNJRklDLgorQ3JlYXRlIHRoZSBkaWN0IGZpbGVzIGluIGJpZyBlbmRpYW4sIGFuZCBjb252ZXJ0IHRvIGhvc3QgZW5kaWFuIHdoaWxlCitsb2FkIHRoZW0uIFRoaXMgY291bGQgZml4IHRoZSBlbmRpYW4gaXNzdWUgb24gbXVsdGlwbGUgcGxhdGZvcm0uCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBjYW4ndCB1c2UgdGhlIGVuZGlhbi5oLCBodG9iZSogYW5kIGJlKnRvaCBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZQorbm90IGF2YWlsYWJsZSBvbiBvbGRlciB2ZXJzaW9ucyBvZiBnbGliYywgc3VjaCBhcyB0aGF0IGZvdW5kIGluIFJIRUwKKzUuOS4KKworQ2hhbmdlIHRvIGNoZWNraW5nIGVuZGlhbiBhbmQgZGlyZWN0bHkgY2FsbGluZyBic3dhcF8qIGFzIGRlZmluZWQgaW4KK2J5dGVzd2FwLmguCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworU2lnbmVkLW9mZi1ieTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorLS0tCisgbGliL3BhY2tsaWIuYyB8IDIxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3BhY2tsaWIuYyBiL2xpYi9wYWNrbGliLmMKK2luZGV4IGY4NTE0MjQuLjNhYWM4MDUgMTAwNjQ0CistLS0gYS9saWIvcGFja2xpYi5jCisrKysgYi9saWIvcGFja2xpYi5jCitAQCAtMTYsNiArMTYsMTIgQEAKKyAjaWZkZWYgSEFWRV9TVERJTlRfSAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjZW5kaWYKKysKKysjaWZuZGVmIF9CU0RfU09VUkNFCisrI2RlZmluZSBfQlNEX1NPVVJDRSAgICAgICAgICAgICAvKiBTZWUgZmVhdHVyZV90ZXN0X21hY3Jvcyg3KSAqLworKyNlbmRpZgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyAjaW5jbHVkZSAicGFja2VyLmgiCisgCisgc3RhdGljIGNvbnN0IGNoYXIgdmVyc19pZFtdID0gInBhY2tsaWIuYyA6IHYyLjNwMiBBbGVjIE11ZmZldHQgMTggTWF5IDE5OTMiOworQEAgLTQ1LDYgKzUxLDE4NSBAQCB0eXBlZGVmIHN0cnVjdAorICAgICBjaGFyIGRhdGFfZ2V0W05VTVdPUkRTXVtNQVhXT1JETEVOXTsKKyB9IFBXRElDVDY0OworIAorK2VudW17CisrICAgIGVuX2lzMzIsCisrICAgIGVuX2lzNjQKKyt9OworKworK3N0YXRpYyBpbnQKKytJaGVhZGVySG9zdFRvQmlnRW5kaWFuKGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljLCBwSGVhZGVyMzItPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4sIHBIZWFkZXIzMi0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgICAgcEhlYWRlcjMyLT5waWhfbWFnaWMsIHBIZWFkZXIzMi0+cGloX251bXdvcmRzLAorKyAgICAgICAgICAgIHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyMzItPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciAzMiBvciA2NDogJWRcbiIsIG5CaXRUeXBlKTsKKysgICAgICAgIHJldHVybiAoLTEpOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSHdtc0hvc3RUb0JpZ0VuZGlhbihjaGFyICpwSHdtcywgaW50IG5MZW4saW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCA9IGJzd2FwXzY0KCpwSHdtczY0KTsKKysgICAgICAgICAgICAqcEh3bXM2NCsrOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytId21zQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBId21zLCBpbnQgbkxlbiwgaW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCsrID0gYnN3YXBfNjQoKnBId21zNjQpOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorIAorIHN0YXRpYyBpbnQKKyBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKK0BAIC01Nyw2ICsyNDIsNyBAQCBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKKysgICAgSWhlYWRlckJpZ0VuZGlhblRvSG9zdCgoY2hhciAqKSAmcGRlc2M2NC5oZWFkZXIsIGVuX2lzNjQpOworICAgICByZXR1cm4gKHBkZXNjNjQuaGVhZGVyLnBpaF9tYWdpYyA9PSBQSUhfTUFHSUMpOworIH0KKyAKK0BAIC0xNDksNyArMzM1LDExIEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCXBkZXNjLmhlYWRlci5waWhfYmxvY2tsZW4gPSBOVU1XT1JEUzsKKyAJcGRlc2MuaGVhZGVyLnBpaF9udW13b3JkcyA9IDA7CisgCistCWZ3cml0ZSgoY2hhciAqKSAmcGRlc2MuaGVhZGVyLCBzaXplb2YocGRlc2MuaGVhZGVyKSwgMSwgaWZwKTsKKysJc3RydWN0IHBpX2hlYWRlciB0bXBoZWFkZXIzMjsKKysKKysJbWVtY3B5KCZ0bXBoZWFkZXIzMiwgICZwZGVzYy5oZWFkZXIsIHNpemVvZihwZGVzYy5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlmd3JpdGUoKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBzaXplb2YodG1waGVhZGVyMzIpLCAxLCBpZnApOworICAgICB9IGVsc2UKKyAgICAgeworIAlwZGVzYy5mbGFncyAmPSB+UEZPUl9XUklURTsKK0BAIC0xNzMsNiArMzYzLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJICAgIHJldHVybiBOVUxMOworIAl9CisgCisrICAgICAgICBJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KChjaGFyICopICZwZGVzYy5oZWFkZXIsIGVuX2lzMzIpOworICAgICAgICAgaWYgKChwZGVzYy5oZWFkZXIucGloX21hZ2ljID09IDApIHx8IChwZGVzYy5oZWFkZXIucGloX251bXdvcmRzID09IDApKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qIHVoLW9oLiBlaXRoZXIgYSBicm9rZW4gIjY0LWJpdCIgZmlsZSBvciBhIGdhcmJhZ2UgZmlsZS4gKi8KK0BAIC0xOTUsNiArMzg2LDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJCX0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEloZWFkZXJCaWdFbmRpYW5Ub0hvc3QoKGNoYXIgKikgJnBkZXNjNjQuaGVhZGVyLCBlbl9pczY0KTsKKyAgICAgICAgICAgICBpZiAocGRlc2M2NC5oZWFkZXIucGloX21hZ2ljICE9IFBJSF9NQUdJQykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8qIG5vcGUsIG5vdCAiNjQtYml0IiBhZnRlciBhbGwgKi8KK0BAIC0yOTAsNiArNDgyLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBId21zQmlnRW5kaWFuVG9Ib3N0KChjaGFyKilwZGVzYzY0Lmh3bXMsIHNpemVvZihwZGVzYzY0Lmh3bXMpLCBlbl9pczY0KTsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihwZGVzYy5od21zKSAvIHNpemVvZihwZGVzYy5od21zWzBdKTsgaSsrKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwZGVzYy5od21zW2ldID0gcGRlc2M2NC5od21zW2ldOworQEAgLTI5OSw2ICs0OTIsNyBAQCBQV09wZW4ocHJlZml4LCBtb2RlKQorIAkgICAgeworIAkJcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAJICAgIH0KKysJICAgIEh3bXNCaWdFbmRpYW5Ub0hvc3QoKGNoYXIqKXBkZXNjLmh3bXMsIHNpemVvZihwZGVzYy5od21zKSwgZW5faXMzMik7CisgI2lmIERFQlVHCisgICAgICAgICAgICAgZm9yIChpPTE7IGk8PTB4ZmY7IGkrKykKKyAgICAgICAgICAgICB7CitAQCAtMzMyLDcgKzUyNiwxMSBAQCBQV0Nsb3NlKHB3cCkKKyAJICAgIHJldHVybiAoLTEpOworIAl9CisgCistCWlmICghZndyaXRlKChjaGFyICopICZwd3AtPmhlYWRlciwgc2l6ZW9mKHB3cC0+aGVhZGVyKSwgMSwgcHdwLT5pZnApKQorKwlzdHJ1Y3QgcGlfaGVhZGVyIHRtcGhlYWRlcjMyOworKworKwltZW1jcHkoJnRtcGhlYWRlcjMyLCAgJnB3cC0+aGVhZGVyLCBzaXplb2YocHdwLT5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlpZiAoIWZ3cml0ZSgoY2hhciAqKSAmdG1waGVhZGVyMzIsIHNpemVvZih0bXBoZWFkZXIzMiksIDEsIHB3cC0+aWZwKSkKKyAJeworIAkgICAgZnByaW50ZihzdGRlcnIsICJpbmRleCBtYWdpYyBmd3JpdGUgZmFpbGVkXG4iKTsKKyAJICAgIHJldHVybiAoLTEpOworQEAgLTM1MSw3ICs1NDksMTIgQEAgUFdDbG9zZShwd3ApCisgCSAgICAJcHJpbnRmKCJod21bJTAyeF0gPSAlZFxuIiwgaSwgcHdwLT5od21zW2ldKTsKKyAjZW5kaWYKKyAJICAgIH0KKy0JICAgIGZ3cml0ZShwd3AtPmh3bXMsIDEsIHNpemVvZihwd3AtPmh3bXMpLCBwd3AtPndmcCk7CisrCisrCSAgICBQV0RJQ1QgdG1wX3B3cDsKKysKKysJICAgIG1lbWNweSgmdG1wX3B3cCwgcHdwLCBzaXplb2YoUFdESUNUKSk7CisrCSAgICBId21zSG9zdFRvQmlnRW5kaWFuKHRtcF9wd3AuaHdtcywgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIGVuX2lzMzIpOworKwkgICAgZndyaXRlKHRtcF9wd3AuaHdtcywgMSwgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIHB3cC0+d2ZwKTsKKyAJfQorICAgICB9CisgCitAQCAtNDA1LDcgKzYwOCw4IEBAIFB1dFBXKHB3cCwgc3RyaW5nKQorIAorIAlkYXR1bSA9ICh1aW50MzJfdCkgZnRlbGwocHdwLT5kZnApOworIAorLQlmd3JpdGUoKGNoYXIgKikgJmRhdHVtLCBzaXplb2YoZGF0dW0pLCAxLCBwd3AtPmlmcCk7CisrCXVpbnQzMl90IHRtcGRhdHVtID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfMzIoZGF0dW0pIDogZGF0dW07CisrCWZ3cml0ZSgoY2hhciAqKSAmdG1wZGF0dW0sIHNpemVvZih0bXBkYXR1bSksIDEsIHB3cC0+aWZwKTsKKyAKKyAJZnB1dHMocHdwLT5kYXRhX3B1dFswXSwgcHdwLT5kZnApOworIAlwdXRjKDAsIHB3cC0+ZGZwKTsKK0BAIC00NjQsNiArNjY4LDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bTY0ID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfNjQoZGF0dW02NCkgOiBkYXR1bTY0OworICAgICAgICBkYXR1bSA9IGRhdHVtNjQ7CisgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmc2Vlayhwd3AtPmlmcCwgc2l6ZW9mKHN0cnVjdCBwaV9oZWFkZXIpICsgKHRoaXNibG9jayAqIHNpemVvZih1aW50MzJfdCkpLCAwKSkKK0BAIC00NzcsNiArNjgyLDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bSA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzMyKGRhdHVtKSA6IGRhdHVtOworICAgICB9CisgCisgCWludCByID0gMTsKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTBlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDA2ZjlhODhiNWRkNTU5N2Y5MTk4ZWEwY2IzNGY1ZTk2ZjE4MGU2ZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDI3IEFwciAyMDEzIDE2OjAyOjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyYWtsaWI6Zml4IHRlc3RudW0gYW5kIHRlc3RzdHIgZmFpbGVkCisKK0Vycm9yIGxvZzoKKy4uLgorJCAuL3Rlc3RudW0KKyhudWxsKS5wd2QuZ3o6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK1BXT3BlbjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCiskIC4vdXRpbC90ZXN0c3RyCisobnVsbCkucHdkLmd6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQV09wZW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy4uLgorU2V0IERFRkFVTFRfQ1JBQ0tMSUJfRElDVCBhcyB0aGUgcGF0aCBvZiAgUFdPcGVuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdXRpbC90ZXN0bnVtLmMgfCAgICAyICstCisgdXRpbC90ZXN0c3RyLmMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RudW0uYyBiL3V0aWwvdGVzdG51bS5jCitpbmRleCBhZTIyNDZkLi5jYTIxMGZmIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0bnVtLmMKKysrKyBiL3V0aWwvdGVzdG51bS5jCitAQCAtMjAsNyArMjAsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RzdHIuYyBiL3V0aWwvdGVzdHN0ci5jCitpbmRleCAyYTMxZmE0Li45ZmI5Y2RhIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0c3RyLmMKKysrKyBiL3V0aWwvdGVzdHN0ci5jCitAQCAtMTUsNyArMTUsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZmZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJQYXNzd29yZCBzdHJlbmd0aCBjaGVja2VyIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NyYWNrbGliIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKKworREVQRU5EUyA9ICJjcmFja2xpYi1uYXRpdmUgemxpYiBweXRob24iCitSREVQRU5EXyR7UE59LXB5dGhvbiArPSAicHl0aG9uIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB5dGhvbiAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY3JhY2tsaWIvY3JhY2tsaWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzc2NzkwYTk1YzFmYjY0NWU1OWU2ZTk4MDNjNzg1ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTlhYjAxMzhiYzhjZjkwY2NjYjg1MDliNjk2OWEwMjRkNWU1OGQyZDAyYmNiZGNjYmI5YmE5Yjg4YmUzZmEzMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBweXRob25uYXRpdmUgcHl0aG9uLWRpcgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJY3JlYXRlLWNyYWNrbGliLWRpY3QgLW8gJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvcHdfZGljdCAke0R9JHtkYXRhZGlyfS9jcmFja2xpYi9jcmFja2xpYi1zbWFsbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzcmNfZGlyPSIke0R9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCXJtIC1mICRzcmNfZGlyLyoucHlvCisJcm0gLWYgJHNyY19kaXIvdGVzdF9jcmFja2xpYi5weQorCSMgTW92ZSBweXRob24gZmlsZXMgZnJvbSAke2Jhc2VfbGliZGlyfSB0byAke2xpYmRpcn0gc2luY2UgdXNlZCAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJbXYgJHNyY19kaXIvKiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKwlybSAtZnIgJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vY3JhY2tsaWIucHkgXAorCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvX2NyYWNrbGliLnNvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fY3JhY2tsaWIuYSBcCisJJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmxhIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2I4NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGNyb25kIGNyb250YWIKKyMgRGVmYXVsdC1TdGFydDogIDIzNDUKKyMgRGVmYXVsdC1TdG9wOiAgIDAxNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogcnVuIGNyb24gZGFlbW9uCisjIERlc2NyaXB0aW9uOiBjcm9uIGlzIGEgc3RhbmRhcmQgVU5JWCBwcm9ncmFtIHRoYXQgcnVucyB1c2VyLXNwZWNpZmllZAorIyAgICAgICAgICAgICAgcHJvZ3JhbXMgYXQgcGVyaW9kaWMgc2NoZWR1bGVkIHRpbWVzLiB2aXhpZSBjcm9uIGFkZHMgYQorIyAgICAgICAgICAgICAgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHRoZSBiYXNpYyBVTklYIGNyb24sIGluY2x1ZGluZyBiZXR0ZXIKKyMgICAgICAgICAgICAgIHNlY3VyaXR5IGFuZCBtb3JlIHBvd2VyZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0NST05EPS91c3Ivc2Jpbi9jcm9uZAorQ09ORklHPS9ldGMvc3lzY29uZmlnL2Nyb25kCisKK1sgLWYgJENPTkZJRyBdIHx8IGV4aXQgMQorWyAteCAkQ1JPTkQgXSB8fCBleGl0IDEKKworLiAkQ09ORklHCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZWNobyAtbiAiU3RhcnRpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjICRDUk9ORCAtLSAkQ1JPTkRBUkdTCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAtbiAiU3RvcHBpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vY3JvbmQucGlkCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgY3JvbmQKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wICYmIHNsZWVwIDEgJiYgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9jcm9uZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDM1YTZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBlcmlvZGljIENvbW1hbmQgU2NoZWR1bGVyCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Nyb25kCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2Nyb25kIC1uICRDUk9OREFSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1Jlc3RhcnQ9YWx3YXlzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTg3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3Bhc3N3b3JkLWF1dGggaXMgdGhlIEZlZG9yYSdzIGNvbW1vbiBwYW0gY29uZmlndXJlIGZpbGUsIHVzZSBvZSBjb21tb24gcGFtCitjb25maWd1cmUgZmlsZXMgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQub3JpZwkyMDEwLTEyLTE2IDE2OjU5OjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQJMjAxMS0wNy0yMCAwOTo0NzoxNi4wODA4MTkyMDMgKzA4MDAKK0BAIC00LDcgKzQsNyBAQAorICMKKyAjIE5vIFBBTSBhdXRoZW50aWNhdGlvbiBjYWxsZWQsIGF1dGggbW9kdWxlcyBub3QgbmVlZGVkCisgYWNjb3VudCAgICByZXF1aXJlZCAgIHBhbV9hY2Nlc3Muc28KKy1hY2NvdW50ICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK2FjY291bnQgICAgaW5jbHVkZSAgICBjb21tb24tYWNjb3VudAorIHNlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbG9naW51aWQuc28KKy1zZXNzaW9uICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorLWF1dGggICAgICAgaW5jbHVkZSAgICBwYXNzd29yZC1hdXRoCisrc2Vzc2lvbiAgICBpbmNsdWRlICAgIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCisrYXV0aCAgICAgICBpbmNsdWRlICAgIGNvbW1vbi1hdXRoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM0ZmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpAQCAtMCwwICsxLDE0IEBACisjIC9ldGMvY3JvbnRhYjogc3lzdGVtLXdpZGUgY3JvbnRhYgorIyBVbmxpa2UgYW55IG90aGVyIGNyb250YWIgeW91IGRvbid0IGhhdmUgdG8gcnVuIHRoZSBgY3JvbnRhYicKKyMgY29tbWFuZCB0byBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiB3aGVuIHlvdSBlZGl0IHRoaXMgZmlsZQorIyBhbmQgZmlsZXMgaW4gL2V0Yy9jcm9uLmQuIFRoZXNlIGZpbGVzIGFsc28gaGF2ZSB1c2VybmFtZSBmaWVsZHMsCisjIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXIgY3JvbnRhYnMgZG8uCisKK1NIRUxMPS9iaW4vc2gKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgIG0gIGggIGRvbSBtb24gZG93IHVzZXIJY29tbWFuZAorIyAgMSAgKiAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmhvdXJseQorIyAzMCAgNyAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmRhaWx5CisjIDQyICA3ICAgICAqICogNyAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ud2Vla2x5CisjIDU1ICA3ICAgICAxICogKiAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ubW9udGhseQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJkNTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIKQEAgLTAsMCArMSw4MSBAQAorU1VNTUFSWSA9ICJDcm9uIGRhZW1vbiBmb3IgZXhlY3V0aW5nIHByb2dyYW1zIGF0IHNldCB0aW1lcyIKK0RFU0NSSVBUSU9OID0gIkNyb25pZSBjb250YWlucyB0aGUgc3RhbmRhcmQgVU5JWCBkYWVtb24gY3JvbmQgdGhhdCBydW5zIFwKK3NwZWNpZmllZCBwcm9ncmFtcyBhdCBzY2hlZHVsZWQgdGltZXMgYW5kIHJlbGF0ZWQgdG9vbHMuIEl0IGlzIGJhc2VkIG9uIHRoZSBcCitvcmlnaW5hbCBjcm9uIGFuZCBoYXMgc2VjdXJpdHkgYW5kIGNvbmZpZ3VyYXRpb24gZW5oYW5jZW1lbnRzIGxpa2UgdGhlIFwKK2FiaWxpdHkgdG8gdXNlIHBhbSBhbmQgU0VMaW51eC4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvY3JvbmllLyIKK0JVR1RSQUNLRVIgPSAibW1hc2xhbm9AcmVkaGF0LmNvbSIKKworIyBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0gTGljZW5zZQorTElDRU5TRSA9ICJJU0MgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZDJhNTkyMTcwNzYwZTEzODZjNzY5ZTEwNDNiMzcyMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Jvbi5jO2VuZGxpbmU9MjA7bWQ1PWI0MjVjMzM0MjY1MDI2MTc3MTI4MzUzYTE0MjYzM2I0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wb3Blbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MzE7bWQ1PWVkZDUwNzQyZDhkZWY3MTJlOTQ3MmRiYTM1MzY2OGE5IgorCitTRUNUSU9OID0gInV0aWxzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL3IvY3JvbmllL2Nyb25pZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY3JvbmQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9udGFiIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLnNlcnZpY2UgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0iCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9jcm9uZF9wYW1fY29uZmlnLnBhdGNoIgorUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tYWNjZXNzIHBhbS1wbHVnaW4tbG9naW51aWQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZGI3NWUxODg0ZDgzYTQ1ZTAwMmQxNDVjNmM1NGQ0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2YwZTNmNGY1MDQyYTljMDk0MTNkNjJjOGUwYzA1NWUxMjQwMWY3MGIxMTI0NjVmMGY4MWYyYzg0ZWJmYjNmIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS13aXRoLWF1ZGl0LC0td2l0aG91dC1hdWRpdCxhdWRpdCwiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLXBhbSwtLXdpdGhvdXQtcGFtLGxpYnBhbSwke1BBTV9ERVBTfSIKKworSU5JVFNDUklQVF9OQU1FID0gImNyb25kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTAgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGNyb250YWIiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjcm9uZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vY3JvbmQuc3lzY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9jcm9uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nyb25kLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nyb25kCisKKwkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Nyb25kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY3JvbmQuc2VydmljZQorCisJIyBiZWxvdyBhcmUgbmVjZXNzYXJ5IGZvciBhIGNvbXBsZXRlIGNyb24gZW52aXJvbm1lbnQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9udGFiICR7RH0ke3N5c2NvbmZkaXJ9LworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZAorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uaG91cmx5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ud2Vla2x5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5tb250aGx5CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kZW55CisKKwkjIGJlbG93IHNldHRpbmcgaXMgbmVjZXNzYXJ5IHRvIGFsbG93IG5vcm1hbCB1c2VyIHVzaW5nIGNyb250YWIKKworCSMgc2V0Z2lkIGZvciBjcm9udGFiIGJpbmFyeQorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKwljaG1vZCAyNzU1ICR7RH0ke2JpbmRpcn0vY3JvbnRhYgorCisJIyBhbGxvdyAnY3JvbnRhYicgZ3JvdXAgd3JpdGUgdG8gL3Zhci9zcG9vbC9jcm9uCisJY2hvd24gcm9vdDpjcm9udGFiICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwljaG1vZCA3NzAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvY3JvbgorCisJY2htb2QgNjAwICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb250YWIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbioiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbnRhYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjZGYyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCkBAIC0wLDAgKzEsMTIzIEBACitTVU1NQVJZID0gIkFuIEludGVybmV0IHByaW50aW5nIHN5c3RlbSBmb3IgVW5peCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitERVBFTkRTID0gImdudXRscyBsaWJwbmcganBlZyBkYnVzIGRidXMtZ2xpYiB6bGliIGxpYnVzYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLyR7UFZ9LyR7QlB9LXNvdXJjZS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRvbi10LXRyeS10by1ydW4tZ2VuZXJhdGVkLWJpbmFyaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHNfc2VydmVyYmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMucGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnNlcnZpY2UgXAorCSAgIgorCitMRUFEX1NPTkFNRSA9ICJsaWJjdXBzZHJpdmVyLnNvIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgYmluY29uZmlnIHVzZXJhZGQgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gbHBhZG1pbiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImN1cHMuc29ja2V0IGN1cHMucGF0aCBjdXBzLnNlcnZpY2UiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLCAtLWRpc2FibGUtcGFtLCBsaWJwYW0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtZ251dGxzIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWRidXMgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtYnJvd3NpbmcgXAorICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzc2FwaSBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1kZWJ1ZyBcCisgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVscm8gXAorICAgICAgICAgICAgICAgLS1lbmFibGUtbGlidXNiIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1waHAgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXBlcmwgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXB5dGhvbiBcCisgICAgICAgICAgICAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgICAgICAgICAgICAiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb21waWxlICgpIHsKKwllY2hvICJhbGw6IiAgICA+ICBtYW4vTWFrZWZpbGUKKwllY2hvICJsaWJzOiIgPj4gbWFuL01ha2VmaWxlCisJZWNobyAiaW5zdGFsbDoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZGF0YToiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZXhlYzoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtaGVhZGVyczoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtbGliczoiID4+IG1hbi9NYWtlZmlsZQorCisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJEU1RST09UPSR7RH0iIGluc3RhbGwKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjdXBzZCB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKKwlybSAtZnIgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9LyR7QlBOfS9kcml2ZXIKKworCSMgUmVtb3ZlIHN5c2luaXQgc2NyaXB0IGFuZCBzeW1saW5rcyBpZiBzeXN2aW5pdCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07IHRoZW4KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L3JjKgorCWZpCisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5wYXRoICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2N1cHMuc2VydmljZQorfQorCitweXRob24gZG9fcGFja2FnZV9hcHBlbmQoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAjIENoYW5nZSBwZXJtaXNzaW9ucyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlLCB0aGV5IHByb2JhYmx5IGhhZCBhIHJlYXNvbi4uLgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgc3VicHJvY2Vzcy5jYWxsKCdjaG1vZCAwNTExICVzL2luc3RhbGwvY3Vwcy92YXIvcnVuL2N1cHMvY2VydHMnICUgd29ya2Rpciwgc2hlbGw9VHJ1ZSkKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWxpYiAke1BOfS1saWJpbWFnZSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAncHJvY3BzJywgJycsIGQpfSIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kIFwKKwkJJHtsaWJkaXJ9L2N1cHMvY2dpLWJpbiBcCisJCSR7bGliZGlyfS9jdXBzL2ZpbHRlciBcCisJCSR7bGliZGlyfS9jdXBzL21vbml0b3IgXAorCQkke2xpYmRpcn0vY3Vwcy9ub3RpZmllciBcCisJCSR7bGliZGlyfS9jdXBzL2RhZW1vbiBcCisJICAgICAgICIKKworRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWJjdXBzLnNvLioiCisKK0ZJTEVTXyR7UE59LWxpYmltYWdlID0gIiR7bGliZGlyfS9saWJjdXBzaW1hZ2Uuc28uKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2NnaS1iaW4vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZmlsdGVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL21vbml0b3IvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvbm90aWZpZXIvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZGFlbW9uLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorCisjcGFja2FnZSB0aGUgaHRtbCBmb3IgdGhlIHdlYmd1aSBpbnNpZGUgdGhlIG1haW4gcGFja2FnZXMgKH4xTUIgdW5jb21wcmVzc2VkKQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kb2MvY3Vwcy9pbWFnZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKmh0bWwgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKi5jc3MgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvIFwKKyAgICAgICAgICAgICAgICIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jdXBzL2N1cHNkLmNvbmYiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiY3Vwc19zeXNyb290X3ByZXByb2Nlc3MiCitjdXBzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc2VkIC1pICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vY3Vwcy1jb25maWcgLWUgJ3M6Y3Vwc19kYXRhZGlyPS4qOmN1cHNfZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHM6JyAtZSAnczpjdXBzX3NlcnZlcmJpbj0uKjpjdXBzX3NlcnZlcmJpbj0ke2xpYmRpcn0vY3VwczonCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3OWViNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGcm9tIDkwMDY5NTg2MTY3YjkzMGJlZmNlNzMwM2FlYTU3MDc4ZjA0YjRlZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogU3VuLCAzMCBKYW4gMjAxMSAxNjozNzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBkb24ndCB0cnkgdG8gcnVuIGdlbmVyYXRlZCBiaW5hcmllcworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorLS0tCisgcHBkYy9NYWtlZmlsZSB8ICAgMzAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGN1cHMtMi4wLjAvcHBkYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMi4wLjAub3JpZy9wcGRjL01ha2VmaWxlCisrKysgY3Vwcy0yLjAuMC9wcGRjL01ha2VmaWxlCitAQCAtMjQyLDggKzI0Miw4IEBAIGdlbnN0cmluZ3M6CQlnZW5zdHJpbmdzLm8gbGliY3Vwc3BwZGMuYQorIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gZ2Vuc3RyaW5ncyBnZW5zdHJpbmdzLm8gXAorIAkJbGliY3Vwc3BwZGMuYSAuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgXAorIAkJJChETlNTRExJQlMpICQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIEdlbmVyYXRpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MuLi4KKy0JLi9nZW5zdHJpbmdzID5zYW1wbGUuYworKyMJZWNobyBHZW5lcmF0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzLi4uCisrIwkuL2dlbnN0cmluZ3MgPnNhbXBsZS5jCisgCisgCisgIworQEAgLTI2MCw5ICsyNjAsOSBAQCBwcGRjLXN0YXRpYzoJCXBwZGMubyBsaWJjdXBzcHBkYy5hIC4uL2N1CisgCSQoQ1hYKSAkKEFSQ0hGTEFHUykgJChMREZMQUdTKSAtbyBwcGRjLXN0YXRpYyBwcGRjLm8gbGliY3Vwc3BwZGMuYSBcCisgCQkuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgJChETlNTRExJQlMpIFwKKyAJCSQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLUkgLi4vZGF0YSBmb28uZHJ2CistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLXogLUkgLi4vZGF0YSBmb28uZHJ2CisrIwllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCisrIwkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC1JIC4uL2RhdGEgZm9vLmRydgorKyMJLi9wcGRjLXN0YXRpYyAtbCBlbixmciAteiAtSSAuLi9kYXRhIGZvby5kcnYKKyAKKyAKKyAjCitAQCAtMjg4LDE3ICsyODgsMTcgQEAgcHBkaS1zdGF0aWM6CQlwcGRjLXN0YXRpYyBwcGRpLm8gbGliY3VwcworIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gcHBkaS1zdGF0aWMgcHBkaS5vIGxpYmN1cHNwcGRjLmEgXAorIAkJLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpICQoRE5TU0RMSUJTKSBcCisgCQkkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorLQkkKFJNKSAtciBwcGQgcHBkMiBzYW1wbGUtaW1wb3J0LmRydgorLQkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgc2FtcGxlLmRydgorLQkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKy0JLi9wcGRjLXN0YXRpYyAtbCBlbiAtSSAuLi9kYXRhIC1kIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKy0JaWYgZGlmZiAtciBwcGQgcHBkMiA+L2Rldi9udWxsOyB0aGVuIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorLQllbHNlIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBGQUlMRUQ7IFwKKy0JCWV4aXQgMTsgXAorLQlmaQorKyMJZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorKyMJJChSTSkgLXIgcHBkIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSBzYW1wbGUuZHJ2CisrIwkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSAtZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CisrIwlpZiBkaWZmIC1yIHBwZCBwcGQyID4vZGV2L251bGw7IHRoZW4gXAorKyMJCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorKyMJZWxzZSBcCisrIwkJZWNobyBQUEQgaW1wb3J0IEZBSUxFRDsgXAorKyMJCWV4aXQgMTsgXAorKyMJZmkKKyAKKyAKKyAjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5wYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOGNjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGVyIFNlcnZpY2UgU3Bvb2wKKworW1BhdGhdCitQYXRoRXhpc3RzR2xvYj0vdmFyL3Nwb29sL2N1cHMvZCoKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDNlODM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2N1cHNkIC1mCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitBbHNvPWN1cHMuc29ja2V0IGN1cHMucGF0aAorV2FudGVkQnk9cHJpbnRlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTQ4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UgU29ja2V0cworCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPS92YXIvcnVuL2N1cHMvY3Vwcy5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjQ0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK01ha2UgQ1VQU19TRVJWRVJCSU4gcmVsYXRpdmUgdG8gbGliZGlyIG90aGVyd2lzZSBvbiA2NGJpdCBhcmNoZXMKK2UuZy4gcHBjNjQgd2hlcmUgYmFzZSBsaWJkaXIgaXMgbGliNjQgdGhpcyBkb2VzIG5vdCBnbyB3ZWxsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS40LjYvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMDktMDQtMTIgMTY6MDQ6NTEuMDAwMDAwMDAwIC0wNzAwCisrKysgY3Vwcy0xLjQuNi9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMTItMDctMjEgMTI6MTI6MDUuODk2NDA1OTIzIC0wNzAwCitAQCAtMzk3LDcgKzM5Nyw3IEBACisgCSopCisgCQkjIEFsbCBvdGhlcnMKKyAJCUlOU1RBTExfU1lTVj0iaW5zdGFsbC1zeXN2IgorLQkJQ1VQU19TRVJWRVJCSU49IiRleGVjX3ByZWZpeC9saWIvY3VwcyIKKysJCUNVUFNfU0VSVkVSQklOPSIkbGliZGlyL2N1cHMiCisgCQk7OworIGVzYWMKKyAKK0luZGV4OiBjdXBzLTEuNC42L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWd1cmUJMjAxMi0wNy0yMSAxMjoxMzozNC41MTI0MDU5NTAgLTA3MDAKKysrKyBjdXBzLTEuNC42L2NvbmZpZ3VyZQkyMDEyLTA3LTIxIDEyOjE0OjA1LjcyNDQwNjAxNyAtMDcwMAorQEAgLTExMTgxLDcgKzExMTgxLDcgQEAKKyAJKikKKyAJCSMgQWxsIG90aGVycworIAkJSU5TVEFMTF9TWVNWPSJpbnN0YWxsLXN5c3YiCistCQlDVVBTX1NFUlZFUkJJTj0iJGV4ZWNfcHJlZml4L2xpYi9jdXBzIgorKwkJQ1VQU19TRVJWRVJCSU49IiRsaWJkaXIvY3VwcyIKKyAJCTs7CisgZXNhYworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZmMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS42LjEvc2NoZWR1bGVyL2N1cHMuc2guaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNi4xLm9yaWcvc2NoZWR1bGVyL2N1cHMuc2guaW4KKysrKyBjdXBzLTEuNi4xL3NjaGVkdWxlci9jdXBzLnNoLmluCitAQCAtNjcsNyArNjcsNyBAQCBjYXNlICJgdW5hbWVgIiBpbgorIAkJRUNIT19FUlJPUj06CisgCQk7OworIAorLQlMaW51eCopCisrCURpc2FibGVMaW51eCopCisgCQlJU19PTj0vYmluL3RydWUKKyAJCWlmIHRlc3QgLWYgL2V0Yy9pbml0LmQvZnVuY3Rpb25zOyB0aGVuCisgCQkJLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDczYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjdXBzLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NmM1YTM1MDU5NmZiYTAyNzU0YmQ5NmViNmRmM2FmZDAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNWM4NDdkOWE0ZmFjNmM0YzY2ZmIwNTI2YTdhZmFhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMWQ1ZTY4ZDlmMjRmYWNhMzE3YWVhZWJjMTY0YzM0MTAyODEzYmMwZjFkNjljMDBiM2E1OWI0OWM0OWY0YWJkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3dhdXRvbWFjcm9zL2N3YXV0b21hY3Jvc18yMDExMDIwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VhM2NlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGF1dG9jb25mIG00IG1hY3JvcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3dhdXRvbWFjcm9zLmJlcmxpb3MvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0uYmVybGlvcy8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjA3NGFmY2I1MGQwYThiZmYxMDc4NmEyOTU0YjJiMDJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMxMTU2MDNiODkxZjNhMTYzYzBiYmI1ZmVhMmYzNzQyMTEzYTE4M2ZhNjc0NWVlNWU4OWU1ZjZkMGU5ZjYxMjEiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDV0FVVE9NQUNST1NQUkVGSVg9JHtEfSR7cHJlZml4fSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwNWQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmFjOjkwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay9pNTg2LXBva3ktbGludXgvZGlmZnV0aWxzLTIuOC4xLXI0L2RpZmZ1dGlscy0yLjguMS9tNC9wcmVyZXEubTQ6MTEwOiBqbV9QUkVSRVFfUVVPVEVBUkcgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6OTA6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBkaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlmZnV0aWxzLTIuOC4xLm9yaWcvbTQvcHJlcmVxLm00CisrKysgZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNAorQEAgLTExNSw3ICsxMTUsNiBAQCBBQ19ERUZVTihbam1fUFJFUkVRX1FVT1RFQVJHXSwKKyAgIEFDX0hFQURFUl9TVERDCisgICBBQ19DX0JBQ0tTTEFTSF9BCisgICBBQ19NQlNUQVRFX1QKKy0gIEFNX0NfUFJPVE9UWVBFUworIF0pCisgCisgQUNfREVGVU4oW2ptX1BSRVJFUV9SRUdFWF0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVjNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkRpZmZ1dGlscyBjb250YWlucyB0b29scyB1c2VkIGZvciBmaW5kaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gZmlsZXMiCitERVNDUklQVElPTiA9ICJEaWZmdXRpbHMgY29udGFpbnMgdGhlIEdOVSBkaWZmLCBkaWZmMywgXAorc2RpZmYsIGFuZCBjbXAgdXRpbGl0aWVzLiBUaGVzZSBwcm9ncmFtcyBhcmUgdXN1YWxseSBcCit1c2VkIGZvciBjcmVhdGluZyBwYXRjaCBmaWxlcy4iCitTRUNUSU9OID0gImJhc2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKKyMgZGlmZnV0aWxzIGFzc3VtZXMgbm9uLWdsaWJjIGNvbXBpbGF0aW9uIHdpdGggdWNsaWJjIGFuZAorIyB0aGlzIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBpdHMgb3duIGltcGxlbWVudGF0aW9ucyBvZgorIyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LiAgcmVnZXguYyBhY3R1YWxseSBicmVha3MgY29tcGlsYXRpb24KKyMgYmVjYXVzZSBpdCB1c2VzIF9fbWVtcGNweSwgdGhlcmUgYXJlIG90aGVyIHRoaW5ncyAoVEJEOgorIyBzZWUgZGlmZnV0aWxzLm1rIGluIGJ1aWxkcm9vdCkKK0VYVFJBX09FQ09ORl9saWJjLXVjbGliYyA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImRpZmYgY21wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgpAQCAtMCwwICsxLDE2IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCityZXF1aXJlIGRpZmZ1dGlscy5pbmMKKworUFIgPSAicjcuMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MWY5YzVhZTE5YjYwNjA4ZjZjN2YxNjJkYTg2YTQyOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTAwMTc0OGIwNjkyMjRkZDk4YmYxYmI5ZWU4NzczMjFjN2RlOGIzMzJjOGFhZDVhZjNlMmE3MzcyZDIzZjVhIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY2htb2QgdSt3ICR7U30vcG8vTWFrZWZpbGUuaW4uaW4KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDA4NjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCkBAIC0wLDAgKzEsMzcgQEAKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK3JlcXVpcmUgZGlmZnV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgTmVlZCB0byByZW1vdmUgZ2V0dGV4dCBtYWNyb3Mgd2l0aCB3ZWlyZCBtaXggb2YgdmVyc2lvbnMKKwlmb3IgaSBpbiBjb2Rlc2V0Lm00IGdldHRleHRfZ2wubTQgaW50bG1hY29zeC5tNCBpbnR0eXBlcy1wcmkubTQgbGliLWxkX2dsLm00IGxpYi1wcmVmaXhfZ2wubTQgcG9fZ2wubTQgc3NpemVfdC5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNDsgZG8KKwkJcm0gLWYgJHtTfS9tNC8kaQorCWRvbmUKK30KKworU1JDX1VSSVttZDVzdW1dID0gIjk5MTgwMjA4ZWMyYTgyY2U3MWY1NWIwZDczODlmMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyNWU4OWE4YWI2NWZkZWQxNzMxZTQxODZiZTFiYjI1Y2RhOTY3ODM0YjZkZjk3MzU5OWNkY2Q1YWJkZmMxOWMiCisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvdGVzdC1kcml2ZXIKKwljcCAtciAke1N9L3Rlc3RzICR0LworCWluc3RhbGwgJHtCfS90ZXN0cy9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgXAorCSAgICAtZSAnc3xiYXNofHNofCcgXAorCSAgICAtZSAnc3xedG9wX3NyY2RpciA9IFwoLipcKXx0b3Bfc3JjZGlyID0gLi5cL3wnIFwKKwkgICAgLWUgJ3N8XnNyY2RpciA9IFwoLipcKXxzcmNkaXIgPSAufCcgXAorCSAgICAtZSAnc3wiYCQoYnVpbHRfcHJvZ3JhbXMpYCJ8ZGlmZnwnIFwKKwkgICAgLWUgJ3N8Z2F3a3xhd2t8ZycgXAorCSAgICAtaSAkdC90ZXN0cy9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZTYzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmRkZDUzMzVlZjk2ZmI4NThhMTM4MjMwYWY3NzM3MTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTM2ZDRiODVlNWFlOTAyOGU5MThkMWNjNzc1YzI0NzVlIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9lZC9lZC0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMjFlOWRjYzliNWI2MDEyYzIzMDM4NzM0ZTE2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRlZjJiYmRlMGZiZjBkODgyMzI3ODJhMGVkZWQzMjNmNDgzYTA1MTlkNmZkZTlhM2IxODA5MDU2ZmQzNWYzZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiJ0NDPSR7Q0N9JyAnQ1hYPSR7Q1hYfScgJ0NGTEFHUz0ke0NGTEFHU30nICdDWFhGTEFHUz0ke0NYWEZMQUdTfScgJ0NQUEZMQUdTPSR7Q1BQRkxBR1N9JyAnTERGTEFHUz0ke0xERkxBR1N9JyIKKworQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsICcgJyl9IgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtc2lsZW50LXJ1bGVzJywgJyAnKX0iCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NGVlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9lZC5oO2VuZGxpbmU9MjA7bWQ1PTM3NWEyMGNjMjU0NWFjMTExNWVlYjdiMzIzYzYwYWUzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTE3O21kNT0xNGRiYjMyNWMxZjJkNGRhZjUwZTBhYTVjNTAzOGU5NiIKKworU0VDVElPTiA9ICJiYXNlIgorCisjIExTQiBzdGF0ZXMgdGhhdCBlZCBzaG91bGQgYmUgaW4gL2Jpbi8KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2VkL2VkLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU2NWI2ZDFkNWE5YTg4MTZiOWIzMDRmYzRlZDk0MDVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1YjM3MmNmYWRmMDczMDAxODIzNzcyMjcyZmNlYWMyY2ZhODc1NTJjNWNkNWE4ZWZjMWM4YWFlNjFmNDVhODgiCisKK2luaGVyaXQgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJJHtTfS9jb25maWd1cmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2NjI2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorcHRlc3QgbmVlZHMgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMuCitzZXJpYWwtdGVzdHMgaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhvc2UgdGFyZ2V0cy4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhkZWZhdWx0IGF1dG9tYWtlIGJlaGF2aW9yIGluY29tcGF0aWJsZSB3aXRoIHB0ZXN0KQorCitkaWZmIC1ydU4gYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTI4IDE4OjE5OjEzLjUxMzk4MDk3NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTQtMDUtMjggMTg6MTk6MjEuMTI5NjYwMjE1ICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBBQ19JTklUKGV0aHRvb2wsIDMuMTQsIG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcpCisgQUNfUFJFUkVRKDIuNTIpCisgQUNfQ09ORklHX1NSQ0RJUihbZXRodG9vbC5jXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtnbnVdKQorK0FNX0lOSVRfQVVUT01BS0UoW2dudSBzZXJpYWwtdGVzdHNdKQorIEFDX0NPTkZJR19IRUFERVJTKFtldGh0b29sLWNvbmZpZy5oXSkKKyAKKyBBTV9NQUlOVEFJTkVSX01PREUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyNDVkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmMmIxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiRGlzcGxheSBvciBjaGFuZ2UgZXRoZXJuZXQgY2FyZCBzZXR0aW5ncyIKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgdXRpbGl0eSBmb3IgZXhhbWluaW5nIGFuZCB0dW5pbmcgdGhlIHNldHRpbmdzIG9mIHlvdXIgZXRoZXJuZXQtYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ldGh0b29sLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YzE5YjMwNTQ4YzU4MjU3N2ZjNmI0NDM2MjZmYzEyMTYiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvZXRodG9vbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGExYzc4Nzg3YzdkY2YwNzcwMTZlZDg2MzcyYTQ3MmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTIwMDUxNjcyN2NjOTU4M2U4YjYzZmQ2ZTcyZjY2N2Y5ZWQ0MWJiNGYwNTc3ZmY0ODAzYjYwYzY0Y2ZkMWRiYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICBjcCAke0J9L01ha2VmaWxlICAgICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L3Rlc3QtY21kbGluZSAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWZlYXR1cmVzICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vZXRodG9vbCAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9ldGh0b29sCisgICBzZWQgLWkgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNzZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAzM2NiYTI0Y2JhN2IwOTczYTcwMmU5NjI3YmQ1YjkzOTYyOTQ4YWU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTY6MTE6MTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmluZHV0aWxzOiBmaXggZG9jIGJ1aWxkIGVycm9yCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9maW5kLnRleGkgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2ZpbmQudGV4aSBiL2RvYy9maW5kLnRleGkKK2luZGV4IDViNWYwY2YuLmIzZDljNmIgMTAwNjQ0CistLS0gYS9kb2MvZmluZC50ZXhpCisrKysgYi9kb2MvZmluZC50ZXhpCitAQCAtNjMsNyArNjMsNyBAQCB0cmFuc2xhdGlvbiBhcHByb3ZlZCBieSB0aGUgRm91bmRhdGlvbi4KKworIEBwYWdlCisgQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorLUBpbnNlcnRjb3B5aW5ne30KKytAaW5zZXJ0Y29weWluZworIEBlbmQgdGl0bGVwYWdlCisKKyBAY29udGVudHMKK0BAIC0xNDY2LDYgKzE0NjYsNyBAQCBubyBvdXRwdXQgaXMgZXZlciBzZW50IHRvIGl0LgorICogRXNjYXBlczo6CisgKiBGb3JtYXQgRGlyZWN0aXZlczo6CisgKiBUaW1lIEZvcm1hdHM6OgorKyogRm9ybWF0dGluZyBGbGFnczo6CisgQGVuZCBtZW51CisKKyBAbm9kZSBFc2NhcGVzCitAQCAtMTUzNCw3ICsxNTM1LDYgQEAgZnJvbSB0aGUgbm92ZWwgeW91IGFyZSByZWFkaW5nLgorICogU2l6ZSBEaXJlY3RpdmVzOjoKKyAqIExvY2F0aW9uIERpcmVjdGl2ZXM6OgorICogVGltZSBEaXJlY3RpdmVzOjoKKy0qIEZvcm1hdHRpbmcgRmxhZ3M6OgorIEBlbmQgbWVudQorCisgQG5vZGUgTmFtZSBEaXJlY3RpdmVzCitAQCAtMTc4MCw3ICsxNzgwLDcgQEAgc2V0dGluZyB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUpLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uCisgQGVuZCB0YWJsZQorCisgQG5vZGUgRm9ybWF0dGluZyBGbGFncworLUBzdWJzdWJzZWN0aW9uIEZvcm1hdHRpbmcgRmxhZ3MKKytAc3Vic2VjdGlvbiBGb3JtYXR0aW5nIEZsYWdzCisKKyBUaGUgQHNhbXB7JW19IGFuZCBAc2FtcHslZH0gZGlyZWN0aXZlcyBzdXBwb3J0IHRoZSBAc2FtcHsjfSwgQHNhbXB7MH0KKyBhbmQgQHNhbXB7K30gZmxhZ3MsIGJ1dCB0aGUgb3RoZXIgZGlyZWN0aXZlcyBkbyBub3QsIGV2ZW4gaWYgdGhleQorLS0KKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBkZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjc1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjIuMzEub3JpZy9jb25maWd1cmUuaW4KKysrKyBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorQEAgLTcyLDcgKzcyLDYgQEAgZG5sIGdsX0VBUkxZIGNhbGxzIEFDX0dOVV9TT1VSQ0UgYW55d2F5LgorIAorIAorIEFDX0lTQ19QT1NJWAorLUFNX0NfUFJPVE9UWVBFUworIAorIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfUkFOTElCCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YmQ2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCit0aGUgb2xkIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB3b24ndCB3b3JrIHdpdGggQUNfR05VX1NPVVJDRQorCithZ2FpbnN0IDQuMi4zMQorMDcvMDgvMjAxMCAtIHFoZQorCitkaWZmIC0tZ2l0IGEvZ251bGliL200L2V4dGVuc2lvbnMubTQgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAoraW5kZXggMTQzYTllNS4uMGYyN2NlYiAxMDA2NDQKKy0tLSBhL2dudWxpYi9tNC9leHRlbnNpb25zLm00CisrKysgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M4NGNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiZmluZCwgbG9jYXRlLCBhbmQgeGFyZ3MgYmluYXJpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEZpbmQgVXRpbGl0aWVzIGFyZSB0aGUgYmFzaWMgZGlyZWN0b3J5IHNlYXJjaGluZyB1dGlsaXRpZXMgb2YgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLiBcCitUaGVzZSBwcm9ncmFtcyBhcmUgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBwcm9ncmFtcyB0byBwcm92aWRlIG1vZHVsYXIgYW5kIHBvd2VyZnVsIGRpcmVjdG9yeSBcCitzZWFyY2ggYW5kIGZpbGUgbG9jYXRpbmcgY2FwYWJpbGl0aWVzIHRvIG90aGVyIGNvbW1hbmRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9maW5kdXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1maW5kdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9hbHBoYS5nbnUub3JnL2dudS8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmaW5kIHhhcmdzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCisjIGRpZmZ1dGlscyBhc3N1bWVzIG5vbi1nbGliYyBjb21waWxhdGlvbiB3aXRoIHVjbGliYyBhbmQKKyMgdGhpcyBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMgb2YKKyMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eS4gIHJlZ2V4LmMgYWN0dWFsbHkgYnJlYWtzIGNvbXBpbGF0aW9uCisjIGJlY2F1c2UgaXQgdXNlcyBfX21lbXBjcHksIHRoZXJlIGFyZSBvdGhlciB0aGluZ3MgKFRCRDoKKyMgc2VlIGRpZmZ1dGlscy5tayBpbiBidWlsZHJvb3QpCitFWFRSQV9PRUNPTkZfbGliYy11Y2xpYmMgPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI5ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjUuMTQub3JpZy9nbC9saWIvTWFrZWZpbGUuYW0KKysrKyBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMjAsNyArMTIyMCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZTAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYgpAQCAtMCwwICsxLDE0IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorUFIgPSAicjQiCisKK3JlcXVpcmUgZmluZHV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMGUzMWEwZjE4YTQ5NzA5YmY1YTQ0OTg2N2M4MDQ5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMGQzNGI4ZmFjYTBiM2NjYTA3MDNmNmM2YjQ5OGFmYmU3MmYwYmExNmMzNTk4MGMxMGVjOWVmNzcyNGQ2MjA0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGE4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBmaW5kdXRpbHMuaW5jCisKKyMgR1BMdjIrICg8PCA0LjIuMzIpLCBHUEx2MysgKD49IDQuMi4zMikKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkiCisgCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOGE4MTc2MjgyZmQyOGU4ZDEyMzRjODRkODQ3ZmE2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGUzY2Y2MjVhNWM5ZjE1NGVlZTMxNzFlMDcyNTE1ZmZkZGU0MDUyNDRkZDAwNTAyYWY2MTdhYzU3YjczYWUyIgorCisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzI3Mjk5CitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgJ2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz15ZXMnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfU09SVD0ke2JpbmRpcn0vc29ydCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBjOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiT3BlblByaW50aW5nIHByaW50ZXIgc3VwcG9ydCAtIGZpbHRlcnMiCitERVNDUklQVElPTiA9ICJGb29tYXRpYyBpcyBhIHByaW50ZXIgZGF0YWJhc2UgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2V0IHVwIFwKK2NvbW1vbiBwcmludGVycyBmb3IgdXNlIHdpdGggVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLlwKK0l0IHByb3ZpZGVzIHRoZSAiZ2x1ZSIgYmV0d2VlbiBhIHByaW50IHNwb29sZXIgKGxpa2UgQ1VQUyBvciBscHIpIGFuZCBcCit0aGUgcHJpbnRlciwgYnkgcHJvY2Vzc2luZyBmaWxlcyBzZW50IHRvIHRoZSBwcmludGVyLiBcCisgXAorVGhpcyBwYWNrYWdlIGNvbnNpc3RzIG9mIGZpbHRlcnMgdXNlZCBieSB0aGUgcHJpbnRlciBzcG9vbGVycyBcCit0byBjb252ZXJ0IHRoZSBpbmNvbWluZyBQb3N0U2NyaXB0IGRhdGEgaW50byB0aGUgcHJpbnRlcidzIG5hdGl2ZSBcCitmb3JtYXQgdXNpbmcgYSBwcmludGVyLXNwZWNpZmljLCBidXQgc3Bvb2xlci1pbmRlcGVuZGVudCBQUEQgZmlsZS4gXAorIgorCitERVBFTkRTICs9ICJjdXBzIHBlcmwgbGlieG1sMiIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vZm9vbWF0aWMtZmlsdGVycy0ke1BWfS9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5wcmludGluZy5vcmcvZG93bmxvYWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDVmNWRjYmZlMzU5ZjE5OGVlZjNkZjViMjgzZDg5NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMmUyZTUzZTUwMjU3MWU4OGVlYjkwMTBjNDVhMGQ1NDY3MWYxNTcwN2VlMTA0ZjVjOWMyMmI1OWVhN2EzM2UzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZmlsZS1jb252ZXJ0ZXItY2hlY2sgLS13aXRoLWZpbGUtY29udmVydGVyPXRleHR0b3BzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgUEVSTD0iJHtiaW5kaXJ9L2VudiBwZXJsIgorICAgIGV4cG9ydCBDVVBTX1NFUlZFUkJJTj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyAgICAgICAjIC91c3IvbGliIE5PVCBsaWJkaXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzL2ZpbHRlcgorICAgIGxuIC1zZiAke2JpbmRpcn0vZm9vbWF0aWMtcmlwICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy9maWx0ZXIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzLyAke2V4ZWNfcHJlZml4fS9saWIvcHByLyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTc5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzoxMjc6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MTI3OiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorLi4uCit8IE1ha2VmaWxlLmFtOjI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9jb25maWd1cmUuYWMKKysrKyBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworQEAgLTEyNCw3ICsxMjQsNiBAQCBmaQorIAorIGRubCBjaGVjayBmb3IgQyBjb21waWxlciBmb3IgYXV0b21ha2UKKyBBTV9QUk9HX0NDX1NUREMKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBkbmwgQ3lnd2luIGRvZXNuJ3QgbGlrZSB0byBnZXQgbGlicyB3aXRoIGZ1bGwgcGF0aHMKKyBkbmwgc2luY2UgdGhhdCBvdmVycmlkZXMgbGlua2luZyBhZ2FpbnN0IERMTHMuCitJbmRleDogZ2F3ay0zLjEuNS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9NYWtlZmlsZS5hbQorKysrIGdhd2stMy4xLjUvTWFrZWZpbGUuYW0KK0BAIC0yNCw3ICsyNCw3IEBACisgIyMgcHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBBdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBpZiBuZWVkZWQsIG1ha2UgLmJ6MiBmaWxlcyBhbHNvLgorLUFVVE9NQUtFX09QVElPTlMgPSBhbnNpMmtuciBkaXN0LWJ6aXAyCisrQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIKKyAKKyAjIFRoaXMgdW5kb2N1bWVudGVkIHZhcmlhYmxlIGluc3VyZXMgdGhhdCBhY2xvY2FsIHJ1bnMKKyAjIGNvcnJlY3RseSBhZnRlciBjaGFuZ2luZyBjb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay00LjEuMy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzZjBiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0Citmb3IgaSBpbiBgZ3JlcCAtdkUgIkB8XiR8I3xHdC1kdW1teSIgTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2A7IFwKKyAgZG8gTENfQUxMPSR7R0FXS0xPQ0FMRTotQ30gTEFORz0ke0dBV0tMT0NBTEU6LUN9IHNyY2Rpcj1gcHdkYCBBV0s9Z2F3ayBDTVA9Y21wIFwKKyAgbWFrZSAtZiBNYWtldGVzdHMgJGkgPiRpLnRtcCAyPiYxOyBcCisgIGdyZXAgLXEgIkVycm9yIiAkaS50bXA7IFwKKyAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIkZBSUw6ICRpIjsgXAorICBlbHNlIGVjaG8gIlBBU1M6ICRpIjsgcm0gLWYgJGkudG1wOyBmaTsgXAorZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhZjRhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgYXdrIHRleHQgcHJvY2Vzc2luZyB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSB2ZXJzaW9uIG9mIGF3aywgYSB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eS4gXAorQXdrIGludGVycHJldHMgYSBzcGVjaWFsLXB1cnBvc2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gZG8gXAorcXVpY2sgYW5kIGVhc3kgdGV4dCBwYXR0ZXJuIG1hdGNoaW5nIGFuZCByZWZvcm1hdHRpbmcgam9icy4iCitIT01FUEFHRSA9ICJ3d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrIgorQlVHVFJBQ0tFUiAgPSAiYnVnLWdhd2tAZ251Lm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyBnYXdrIDw9IDMuMS41OiBHUEx2MgorIyBnYXdrID49IDMuMS42OiBHUEx2MworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitSREVQRU5EU19nYXdrICs9ICJnYXdrLWNvbW1vbiIKK1JERVBFTkRTX3BnYXdrICs9ICJnYXdrLWNvbW1vbiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDc2MDMyNTQ4OTQ3OWNhYzE3ZmUwMTE0YjhmNjJmMzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYzZGNiOWQwY2EzOThiMWQ0ZjVhMzMyZjZjZDljZWM1NjQ0MTI2NWZjYTYxNmYyZWExYjQ0ZDQ1OWU5ZjBmOCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUEFDS0FHRVMgKz0gImdhd2stY29tbW9uIHBnYXdrIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2F3ayogJHtiaW5kaXJ9L2lnYXdrIgorRklMRVNfZ2F3ay1jb21tb24gKz0gIiR7ZGF0YWRpcn0vYXdrLyogJHtsaWJkaXJ9L2dhd2svYXdrLyoiCitGSUxFU19wZ2F3ayA9ICIke2JpbmRpcn0vcGdhd2sqIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2F3ay9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQ0ZMQUdTICs9ICItRCBQUk9UT1RZUEVTIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHJlbW92ZSB0aGUgbGluayBzaW5jZSB3ZSBkb24ndCBwYWNrYWdlIGl0CisJcm0gJHtEfSR7YmluZGlyfS9hd2sKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTg4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiR05VIGF3ayB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgdmVyc2lvbiBvZiBhd2ssIGEgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkuIFwKK0F3ayBpbnRlcnByZXRzIGEgc3BlY2lhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGRvIFwKK3F1aWNrIGFuZCBlYXN5IHRleHQgcGF0dGVybiBtYXRjaGluZyBhbmQgcmVmb3JtYXR0aW5nIGpvYnMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrLyIKK0JVR1RSQUNLRVIgID0gImJ1Zy1nYXdrQGdudS5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgZ2F3ayA8PSAzLjEuNTogR1BMdjIKKyMgZ2F3ayA+PSAzLjEuNjogR1BMdjMKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyArPSAicmVhZGxpbmUiCisKK1BBQ0tBR0VDT05GSUdbbXBmcl0gPSAiLS13aXRoLW1wZnIsLS13aXRob3V0LW1wZnIsIG1wZnIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nYXdrL2dhd2stJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NWQzN2Y0MDY5NTAyNjc3ZjI1ZDEzNDBkZjhlZWM5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MjRlZmZhNWI5ZWNkNGVkOTQwZjI1ODFjNWQzYzFkZjRlNGJkN2U2Zjc2OGFhMDMzYzE5MTZmNDdkZmM2ZTI5IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hd2siCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgdGhlIGxpbmsgc2luY2Ugd2UgZG9uJ3QgcGFja2FnZSBpdAorCXJtICR7RH0ke2JpbmRpcn0vYXdrCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiICR7U30vdGVzdC9NYWtldGVzdHMgfGF3ayAtRjogJ3twcmludCAkMX0nYCBNYWtldGVzdHM7IFwKKwkgIGRvIGNwICR7U30vdGVzdC8kaSogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAzCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgOAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybS9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3NzJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTA5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAxCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3ZDRlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2Jhc2UvZ2VuaHQuYzogYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSB0byBhbGxvdyBmb3BlbiBjYWxsaW5nCisKK1RoZSBjb21taXQgaW4gdXBzdHJlYW06CitodHRwOi8vZ2l0Lmdob3N0c2NyaXB0LmNvbS8/cD1naG9zdHBkbC5naXQ7YT1jb21taXRkaWZmO2g9NzczYzY5ZTQ2ZTcwYmRkNTQ4MjY3NjQzN2RhZmQyY2E4MzM5NzY0MworCitSZXBsYWNlIGFsbCBmb3BlbiBjYWxscyB3aXRoIGdwX2ZvcGVuIGFuZCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHNvCit0aGF0IGFueSB1bmludGVudGlhbCBjYWxscyBkaXJlY3RseSB0byBmb3BlbiB3aWxsIGNhdXNlIGFuIGVycm9yLgorCitPbmx5IGV4Y2VwdGlvbnMgYXJlIHRob3NlIGluIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLCBhbmQgbWtyb21mcy5jLgorVGhpcyBwYXRjaCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHRvIGFsbG93IGZvcGVuIGNhbGxpbmcgaW4gYmFzZS9nZW5odC5jLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFzZS9nZW5odC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9nZW5odC5jIGIvYmFzZS9nZW5odC5jCitpbmRleCA0YjA0MDg1Li5jYzgyZmZmIDEwMDY0NAorLS0tIGEvYmFzZS9nZW5odC5jCisrKysgYi9iYXNlL2dlbmh0LmMKK0BAIC0xNiw2ICsxNiwxMCBAQAorIAorIC8qIEdlbmVyYXRlIEMgY29kZSBmb3IgY29tcGlsaW5nIGhhbGZ0b25lcyBpbnRvIFJPTS4gKi8KKyAjaW5jbHVkZSAibWFsbG9jXy5oIgorKworKy8qIHByZXZlbnQgZ3AuaCBmcm9tIGRlZmluaW5nIGZvcGVuICovCisrI2RlZmluZSBmb3BlbiBmb3BlbgorKworICNpbmNsdWRlICJzdGRpb18uaCIKKyAjaW5jbHVkZSAic3RyaW5nXy5oIgorICNpbmNsdWRlICJnc2NkZWZzLmgiCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzkzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorU3ViamVjdDogW1BBVENIXSBEb24ndCBidWlsZC1kZXBlbmQgb24gbGliZ2NyeXB0LCBhcyBub3RoaW5nIGlzIHVzZWQgZnJvbSBpdAorCitCYWNrcG9ydGVkIGZyb20gaHR0cDovL3d3dy5jdXBzLm9yZy9zdHJmaWxlcy5waHAvMzMwOC9jdXBzLW5vLWdjcnlwdC5wYXRjaAorCitUaGlzIGFkZHJlc3NlcyB0aGUgY3J5dG8gZGVwZW5kZW5jeSBzZWVuIGR1cmluZyBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCitSZWJhc2UgdGhlIHBhdGNoIHRvIGdob3N0c2NyaXB0LTkuMTUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGN1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK2luZGV4IDk5YTg1YzMuLmE2NzQ4NTIgMTAwNjQ0CistLS0gYS9jdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaAorKysrIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK0BAIC04MCw3ICs4MCw2IEBAIHR5cGVkZWYgaW50IHNvY2tsZW5fdDsKKyAjICBlbGlmIGRlZmluZWQgSEFWRV9HTlVUTFMKKyAjICAgIGluY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KKyAjICAgIGluY2x1ZGUgPGdudXRscy94NTA5Lmg+CistIyAgICBpbmNsdWRlIDxnY3J5cHQuaD4KKyAjICBlbGlmIGRlZmluZWQoSEFWRV9DRFNBU1NMKQorICMgICAgaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyAjICAgIGluY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGE5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ltcG9ydCBwYXRjaCBmcm9tIHdpbmRyaXZlciBsaW51eCBmb3IgY3Jvc3MgY29tcGlsYXRpb24sIGFuZCBzcGxpdCBwYXRjaGVzCitpbnRvIG9lIHdheSB1bmRlciBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgc3VjaCBhcyBpNTg2LCBwb3dlcnBjIGV0YyBhY2NvcmRpbmcgCit0byBSaWNoYXJkJ3Mgb3Bpbmlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CisKKyMgQXV0aG9yOiBDaGkgWHUgPGNoaS54dUB3aW5kcml2ZXIuY29tPgorIyBEYXRlOiBGZWIgMjYgMjAxMAorIyBTdW1tYXJ5OiBHZW5lcmF0ZSBhcmNoLmggZm9yIHBwYzMyCisjCisKK2RpZmYgLU5ydSBnaG9zdHNjcmlwdC04LjY0Lm9yaWcvYmFzZS9saWIubWFrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCistLS0gZ2hvc3RzY3JpcHQtOC42NC5vcmlnL2Jhc2UvbGliLm1hawkyMDEwLTAyLTEwIDEwOjMwOjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCTIwMTAtMDItMTAgMTA6NTY6MjEuMDAwMDAwMDAwICswODAwCitAQCAtNjcsOCArNjcsOCBAQAorIHN0ZHByZV9oPSQoR0xTUkMpc3RkcHJlLmggJChzdGRwbl9oKQorIHN0ZGludF9faD0kKEdMU1JDKXN0ZGludF8uaCAkKHN0ZF9oKQorIAorLSQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorLQkkKEVYUCkkKEdFTkFSQ0hfWEUpICQoR0xHRU4pYXJjaC5oICQoVEFSR0VUX0FSQ0hfRklMRSkKKysjIyQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorKyMjCSQoRVhQKSQoR0VOQVJDSF9YRSkgJChHTEdFTilhcmNoLmggJChUQVJHRVRfQVJDSF9GSUxFKQorIAorICMgUGxhdGZvcm0gaW50ZXJmYWNlcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyOWJlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK3VzdCB1c2UgY29tbWFuZHMgcHJvdmlkZWQgYnkgZ2hvc3RzY3JpcHQtbmF0aXZlLCBwcmV2ZW50aW5nIHJlY29tcGlsZSB0aGVtIHdoZW4KK2NvbXBpbGUgZ2hvc3RzY3JpcHQuCitXYXkgdG8gZW5hYmxlIGNyb3NzIGNvbXBpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYmFzZS91bml4LWF1eC5tYWsgYi9iYXNlL3VuaXgtYXV4Lm1haworaW5kZXggYTkxZmIyNi4uYzk5MWQxMSAxMDA2NDQKKy0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCisrKysgYi9iYXNlL3VuaXgtYXV4Lm1haworQEAgLTY5LDQ2ICs2OSw0NiBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAorICAkKE1BS0VESVJTKQorIAkkKEdMQ0MpICQoR0xPXylncF9zeXN2LiQoT0JKKSAkKENfKSAkKEdMU1JDKWdwX3N5c3YuYworIAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCistCistJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTworLSMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorLSQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CistIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgorLSMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKy1NS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorLQorLSMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCistTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorLQorLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1BS0VESVJTKQorLQkkKENQXykgJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUtST01GU19YRSkKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKysjCisrIyQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoRUNIT0dTX1hFKSAkKEdMU1JDKWVjaG9ncy5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKysjIyBwcm9kdWNlcyBhIGJ1Z2d5IGV4ZWN1dGFibGUuCisrIyQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CisrIyMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKysjIyBTbyBpdCdzIHNwbGl0IGludG8gdHdvIHRhcmdldHMsIG9uZSB1c2luZyB0aGUgemxpYiBzb3VyY2UgZGlyZWN0bHkuLi4uLgorKyNNS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopICQoQVVYKW1lbWVudG8uJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIC4uLi4gYW5kIG9uZSB1c2luZyB0aGUgemxpYiBsaWJyYXJ5IGxpbmtlZCB2aWEgdGhlIGNvbW1hbmQgbGluZQorKyNNS1JPTUZTX09CSlNfMT0kKEFVWClnc2NkZWZzLiQoT0JKKSBcCisrIyAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzEgJChNS1JPTUZTX09CSlNfMSkgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKysjCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQorIAorICMgUXVlcnkgdGhlIGVudmlyb25tZW50IHRvIGNvbnN0cnVjdCBnY29uZmlnXy5oLgorICMgVGhlc2UgYXJlIGFsbCBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgKGV4Y2VwdCB0aGUgSmFzUEVSIG9uZSksIHNvIHRoYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2I4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYmUxZTFiMzMxOTFhZmRjZmUzYzJlY2M0ZmYzZTM2MWE1ODU5ZTljNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAzMCBKYW4gMjAxNSAwMDo0MDoyMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb250cmliLm1hazogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3JtOiBjYW5ub3QgcmVtb3ZlIGAvdXNyL3NoYXJlL2dob3N0c2NyaXB0LzkuMTUvbGliJzogSXMgYSBkaXJlY3RvcnkKKworQ3JlYXRlIGxpYiBiZWZvcmUgaW5zdGFsbCB0byBmaXggdGhlIHJhY2UgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbnRyaWIvY29udHJpYi5tYWsgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250cmliLm1hayBiL2NvbnRyaWIvY29udHJpYi5tYWsKK2luZGV4IDA4YTgwZDEuLmRlMmUyMGQgMTAwNjQ0CistLS0gYS9jb250cmliL2NvbnRyaWIubWFrCisrKysgYi9jb250cmliL2NvbnRyaWIubWFrCitAQCAtOTQ3LDYgKzk0Nyw3IEBAICQoREVWT0JKKWR2aXBybGliLiQoT0JKKSA6ICQoSkFQU1JDKWR2aXBybGliLmMgJChKQVBTUkMpZHZpcHJsaWIuaAorIAkkKERFVkNDKSAkKE9fKSRAICQoQ18pICQoSkFQU1JDKWR2aXBybGliLmMKKyAKKyBleHRyYS1kbXBydC1pbnN0YWxsOgorKwlta2RpciAtcCAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYgorIAkkKElOU1RBTExfREFUQSkgJChKQVBTUkMpZG1wX2luaXQucHMgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxCisgCSQoSU5TVEFMTF9EQVRBKSAkKEpBUFNSQylkbXBfc2l0ZS5wcyAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDEKKyAJJChJTlNUQUxMX0RBVEEpICQoSkFQU1JDKWVzY3BfMjQuc3JjICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliIHx8IGV4aXQgMQorQEAgLTEwODgsNiArMTA4OSw3IEBAICQoREVWT0JKKWdkZXZhbHBzLiQoT0JKKSA6ICQoSkFQU1JDKWdkZXZhbHBzLmMgJChQREVWSCkKKyAjIyMgLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpb25hbCAudXBwIGZpbGVzIC0tLS0tLS0tLS0tLS0tLS0gIyMjCisgCisgZXh0cmEtdXBwLWluc3RhbGw6CisrCW1rZGlyIC1wICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliCisgCWZvciBmIGluICQoQ09OVFJJQlNSQyl1bmlwcmludCQoRCkqLnVwcDsgZG8gXAorIAkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDE7IFwKKyAJZG9uZQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg2NDgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNWQ1YzgzYzg5YmUwY2ZmMjlkZGUyMjY3ZmExNjhlNmY3MTQ2YmU4YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCA0IE1heSAyMDE1IDIyOjMxOjQ4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJhc2UvZ2VuZGV2LmM6IGZpeCBmb3IgLVdlcnJvcj1yZXR1cm4tdHlwZQorCitGaXhlZDoKK2Jhc2UvZ2VuZGV2LmM6ODA6MTogZXJyb3I6IHJldHVybiB0eXBlIGRlZmF1bHRzIHRvICdpbnQnIFstV2Vycm9yPXJldHVybi10eXBlXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBiYXNlL2dlbmRldi5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9iYXNlL2dlbmRldi5jIGIvYmFzZS9nZW5kZXYuYworaW5kZXggNjhhNzQ1Zi4uODA1OGI1YSAxMDA2NDQKKy0tLSBhL2Jhc2UvZ2VuZGV2LmMKKysrKyBiL2Jhc2UvZ2VuZGV2LmMKK0BAIC03Nyw2ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICppbmRlbnRfaXRlbSA9ICIiOworIC8qIEZvcndhcmQgZGVmaW5pdGlvbnMgKi8KKyB2b2lkIGFkZF9lbnRyeShjb25maWcgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJvb2wpOworIAorK2ludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIGNvbmZpZyBjb25mOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTgxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2dob3N0c2NyaXB0LW5hdGl2ZTpmaXggZGlzYWJsZS1zeXN0ZW0tbGlidGlmZgorCitNb2RpZnkgY29uZmlndXJlIHRvIGFkZCB0aGUgY2hlY2sgdG8gbWFrZSBzdXJlCitnaG9zdHNjcmlwIGNvdWxkIHdvcmsgd2hpbGUgc3lzdGVtLWxpYnRpZmYgaXMKK2Rpc2FibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA1NSw2ICsxMDU1LDcgQEAgRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKyBlc2FjCisgCisgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorKyAgICBpZiB0ZXN0IC1lICRMSUJUSUZGRElSL2NvbmZpZ3VyZTsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJSdW5uaW5nIGxpYnRpZmYgY29uZmlndXJlIHNjcmlwdC4uLiIKKyAgICAgICBvbGRkaXI9YHB3ZGAKK0BAIC0xMDY5LDYgKzEwNzAsMTAgQEAgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorICAgICAgIGNkICIkb2xkZGlyIgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJDb250aW51aW5nIHdpdGggR2hvc3RzY3JpcHQgY29uZmlndXJhdGlvbi4uLiIKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19OT1RJQ0UoW0NvdWxkIG5vdCBmaW5kIGxvY2FsIGNvcHkgb2YgbGlidGlmZi4KKytEaXNhYmxpbmcgdGlmZiBvdXRwdXQgZGV2aWNlcy5dKQorKyAgICBmaQorIGZpCisgCisgQUNfU1VCU1QoU0hBUkVfTElCVElGRikKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxN2I3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaApAQCAtMCwwICsxLDQxIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2k2ODYKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uODdhYWNhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2CkBAIC0wLDAgKzEgQEAKK2k1ODYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzgxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiNjM3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRuMzIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjkwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC94ODYtNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGFjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYgpAQCAtMCwwICsxLDEwMyBAQAorU1VNTUFSWSA9ICJUaGUgR1BMIEdob3N0c2NyaXB0IFBvc3RTY3JpcHQvUERGIGludGVycHJldGVyIgorREVTQ1JJUFRJT04gPSAiR2hvc3RzY3JpcHQgaXMgdXNlZCBmb3IgUG9zdFNjcmlwdC9QREYgcHJldmlldyBhbmQgcHJpbnRpbmcuICBVc3VhbGx5IGFzIFwKK2EgYmFjay1lbmQgdG8gYSBwcm9ncmFtIHN1Y2ggYXMgZ2hvc3R2aWV3LCBpdCBjYW4gZGlzcGxheSBQb3N0U2NyaXB0IGFuZCBQREYgXAorZG9jdW1lbnRzIGluIGFuIFgxMSBlbnZpcm9ubWVudC4gXAorXAorRnVydGhlcm1vcmUsIGl0IGNhbiByZW5kZXIgUG9zdFNjcmlwdCBhbmQgUERGIGZpbGVzIGFzIGdyYXBoaWNzIHRvIGJlIHByaW50ZWQgXAorb24gbm9uLVBvc3RTY3JpcHQgcHJpbnRlcnMuIFN1cHBvcnRlZCBwcmludGVycyBpbmNsdWRlIGNvbW1vbiBcCitkb3QtbWF0cml4LCBpbmtqZXQgYW5kIGxhc2VyIG1vZGVscy4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMTdjZWE1NDc0MzQzNWFiMmE1ODFjMjM3YmVhMjk0YSIKKworREVQRU5EUyA9ICJnaG9zdHNjcmlwdC1uYXRpdmUgdGlmZiBqcGVnIGZvbnRjb25maWcgY3VwcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSV9CQVNFID0gImh0dHA6Ly9kb3dubG9hZHMuZ2hvc3RzY3JpcHQuY29tL3B1YmxpYy9naG9zdHNjcmlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBcCisiCisKK1NSQ19VUkkgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqYXJjaC5oIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMtbm8tZ2NyeXB0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke1NSQ19VUklfQkFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjkzMTkzMjViYmRiODNmNWM4MTM3OWE4Zjg2ZjM4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDZkNzcyODBjY2E4YWZkZDNkNGMyYzEzODllMzMyZWQ5YjA2MDViZDEwN2JjYWFlMWQ3NjFiMDYxZDFhNjhkIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS13aXRoLWN1cHMtc2VydmVyYmluPSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vwcy1kYXRhZGlyPSR7ZGF0YWRpcn0vY3VwcyBcCisgICAgICAgICAgICAgICAgJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctLWVuYWJsZS1saXR0bGUtZW5kaWFuJywgJy0tZW5hYmxlLWJpZy1lbmRpYW4nLCBkKX0gXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2VsID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKKworIyBFeHBsaWNpdHkgZGlzYWJsZSBsaWJ0aWZmLCBmb250Y29uZmlnLAorIyBmcmVldHlwZSwgY3VwcyBmb3IgZ2hvc3RzY3JpcHQtbmF0aXZlCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZj1ubyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLWRpc2FibGUtZm9udGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mcmVldHlwZSAtLWRpc2FibGUtY3VwcyIKKworIyBUaGlzIGhhcyBiZWVuIGZpeGVkIHVwc3RyZWFtIGJ1dCBmb3Igbm93IHdlIG5lZWQgdG8gc3VidmVydCB0aGUgY2hlY2sgZm9yIHRpbWUuaAorIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQ0MworIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQyNgorQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorQlVJTERfQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgb2JqCisJbWtkaXIgLXAgc29vYmoKKwlpZiBbIC1lICR7V09SS0RJUn0vb2JqYXJjaC5oIF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9vYmphcmNoLmggb2JqL2FyY2guaAorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCSMgY29weSB0b29scyBmcm9tIHRoZSBuYXRpdmUgZ2hvc3RzY3JpcHQgYnVpbGQKKwlpZiBbICIke1BOfSIgIT0gImdob3N0c2NyaXB0LW5hdGl2ZSIgXTsgdGhlbgorCQlta2RpciAtcCBvYmovYXV4IHNvb2JqCisJCWZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisJCQljcCAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkgb2JqL2F1eC8kaQorCQlkb25lCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vUmVzb3VyY2UgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCisgICAgY3AgLXIgJHtTfS9pY2Nwcm9maWxlcyAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KK30KKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUgKCkgeworICAgIG1rZGlyIC1wIG9iagorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIG9lX3J1bm1ha2Ugb2JqL2F1eC8kaQorICAgIGRvbmUKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfQorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IG9iai9hdXgvJGkgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfS8kaQorICAgIGRvbmUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNlMjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpAQCAtMCwwICsxLDIyIEBACitERVNDUklQVElPTiA9ICJHTlUgZ3BlcmYgaXMgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZ2VuZXJhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dwZXJmIgorU1VNTUFSWSAgPSAiR2VuZXJhdGUgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZnJvbSBhIHNldCBvZiBrZXl3b3JkcyIKK0xJQ0VOU0UgID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmNjO2JlZ2lubGluZT04O2VuZGxpbmU9MTk7bWQ1PWRlYzhmNjExODQ1ZDA0NzM4N2VkNTZiNWI4NWZhOTliIgorCitTUkNfVVJJICA9ICIke0dOVV9NSVJST1J9L2dwZXJmL2dwZXJmLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBhdXRvcmVjb25mIGNvdWxkbid0IGZpbmQgYWNpbmNsdWRlLm00IHdoZW4gc3RlcHBpbmcgaW50byBzdWJkaXJlY3RvcnkuIEluc3RlYWQgb2YKKyMgZHVwbGljYXRpbmcgYWNpbmNsdWRlLm00IGluIGV2ZXJ5IHN1YmRpcmVjdG9yeSwgdXNlIGFic29sdXRlIGluY2x1ZGUgcGF0aCB0byBhY2xvY2FsCitFWFRSQV9BVVRPUkVDT05GICs9ICIgLUkgJHtTfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgICAgICAgICAgICAgY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgIGZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Mjg4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworTElDRU5TRSAgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTVmODRhYmIwMDcwYWRmOGEwOTI1ZDdkNTM0YjZlMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uY2M7YmVnaW5saW5lPTg7ZW5kbGluZT0xOTttZDU9NzJhMzAzNGExOWU3MmYwOGVlNDhlZjgyNDRhMTIxZmQiCisKK1BSID0gInIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2MyMGU1ODk3NWEzODA3NTQ0MDQyM2M4ZmI4NWZkMDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMyODc1MjdjOGQ5ZTI3ZTgwMWNmMDgwNDQzNmYzNDk0YmQ1NjlkYjA1ZDQ5ZGNkZDJhOTQyYWU3MmZhOTA1NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYzFmMWRiMzJmYjY1OThkNmE5M2U2ZTg4Nzk2YTg2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzY3MTEyYTIwNDQwN2U2MmRiYzMxMDY2NDdjZjgzOWVkNTQ0ZjNjZjVkMGYwNTIzYWFhMjUwODYyM2FhZDYzZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwOWY1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQxNDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Bva3kgU3BlY2lmaWMgdGhpcyBpcyBncGx2MiB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdyZXAtMi41LjFhL2RvYy9ncmVwLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2RvYy9ncmVwLnRleGkKKysrKyBncmVwLTIuNS4xYS9kb2MvZ3JlcC50ZXhpCitAQCAtMjg4LDcgKzI4OCw3IEBAIFRoaXMgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGkKKyBQcmludCBhIHVzYWdlIG1lc3NhZ2UgYnJpZWZseSBzdW1tYXJpemluZyB0aGVzZSBjb21tYW5kLWxpbmUgb3B0aW9ucworIGFuZCB0aGUgYnVnLXJlcG9ydGluZyBhZGRyZXNzLCB0aGVuIGV4aXQuCisgCistQGl0ZW14IC0tYmluYXJ5LWZpbGVzPUB2YXJ7dHlwZX0KKytAaXRlbSAtLWJpbmFyeS1maWxlcz1AdmFye3R5cGV9CisgQG9waW5kZXggLS1iaW5hcnktZmlsZXMKKyBAY2luZGV4IGJpbmFyeSBmaWxlcworIElmIHRoZSBmaXJzdCBmZXcgYnl0ZXMgb2YgYSBmaWxlIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgYmluYXJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTE1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBbHdheXMgdXNlIGxvY2FsZS5oIGFzIEhBVkVfTE9DQUxFX0ggaXMgbm8gbG9uZ2VyIGhhbmRsZWQgYnkgLi9jb25maWd1cmUKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIG9sZCB2ZXJzaW9uIHRoYXQgd2lsbCBub3QgYmUgbWFpbnRhaW5lZCBdCitTaWduZWQtb2ZmLWJ5OiBBbGV4IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CisKK2RpZmYgLS1yZWN1cnNpdmUgLS11bmlmaWVkIGdyZXAtMi41LjFhLW9yaWcvbGliL2hhcmQtbG9jYWxlLmMgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMKKy0tLSBncmVwLTIuNS4xYS1vcmlnL2xpYi9oYXJkLWxvY2FsZS5jCTIwMDEtMDMtMDQgMDc6MzM6MTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMJMjAxMy0wMy0xMSAxNzowNTo1Mi4wODY0NDQ4OTEgKzAyMDAKK0BAIC0zOCw5ICszOCw3IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBIQVZFX0xPQ0FMRV9ICisgIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKyAKKyAjaWYgSEFWRV9TVFJJTkdfSAorICMgaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ2MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitFbmFibGUgb3BlcmF0aW9uIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDEyLzEwLzE5CisKK0luZGV4OiBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU3OjUxLjY0Njk3MDIwNCArMDAwMAorKysrIGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU5OjQ5Ljk0Njk2ODgwMyArMDAwMAorQEAgLTE0MCw0ICsxNDAsNCBAQAorIAlBQ19DSEVDS19MSUIocGNyZSwgcGNyZV9leGVjKQorIGZpCisgCistQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaF0pCisrQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWQwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVGhlIHBhdGNoIHRvIGZpeCBDVkUtMjAxMi01NjY3CitSZWZlcmVuY2U6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02ODY2MDUmYWN0aW9uPWRpZmYKKworTXVsdGlwbGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gR05VIEdyZXAgYmVmb3JlIDIuMTEgbWlnaHQgYWxsb3cKK2NvbnRleHQtZGVwZW5kZW50IGF0dGFja2VycyB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHZpYSB2ZWN0b3JzCitpbnZvbHZpbmcgYSBsb25nIGlucHV0IGxpbmUgdGhhdCB0cmlnZ2VycyBhIGhlYXAtYmFzZWQgYnVmZmVyIG92ZXJmbG93LgorCitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMi01NjY3CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitUaGlzIHZlcnNpb24gb2YgR05VIEdyZXAgaGFzIGJlZW4gYWJhbmRvbmVkIHVwc3RyZWFtIGFuZCB0aGV5IGFyZSBubyBsb25nZXIKK2FjY2VwdGluZyBwYXRjaGVzLiAgVGhpcyBpcyBub3QgYSBiYWNrcG9ydC4KKworU2lnbmVkLW9mZi1ieSBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdyZXAuYyB8ICAgIDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzozOTozMy4zNTkxOTE3NjkgKzA4MDAKKysrKyBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzo1MDoyMi42MDkxOTE4ODIgKzA4MDAKK0BAIC0zMDYsNiArMzA2LDExIEBAIGZpbGxidWYgKHNpemVfdCBzYXZlLCBzdHJ1Y3Qgc3RhdHMgY29uc3QKKyAgIGludCBjYyA9IDE7CisgICBjaGFyICpyZWFkYnVmOworICAgc2l6ZV90IHJlYWRzaXplOworKyAgY29uc3Qgc2l6ZV90IG1heF9zYXZlID0gSU5UX01BWCAvIDI7CisrCisrICAvKiBMaW1pdCB0aGUgYW1vdW50IG9mIHNhdmVkIGRhdGEgdG8gSU5UX01BWCB0byBmaXggQ1ZFLTIwMTItNTY2NyAqLworKyAgaWYgKHNhdmUgPiBtYXhfc2F2ZSkKKysgICAgIGVycm9yICgyLCAwLCBfKCJsaW5lIHRvbyBsb25nIikpOworIAorICAgLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgYnVmZmVyIHRvIHN0YXJ0IG9mIG9sZCBzdHVmZgorICAgICAgdGhhdCB3ZSB3YW50IHRvIHNhdmUuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyN2VlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2gKQEAgLTAsMCArMSwxMzQyIEBACitGcm9tIGM4ODRkZDEyZWMwNjI1NjkzMzU3MDI4NDhmYzVmMjlmNDM2YzI4ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBNb24sIDI1IE1heSAyMDE1IDEwOjE1OjU3ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdyZXAgZWdyZXAgZmdyZXA6IEZpeCBMU0IgTkcgY2FzZXMuCisKK1RoZSBMU0IgY29yZSB0ZXN0IHJlcXVpcmVzIGdyZXAgZWdyZXAgYW5kIGZncmVwIGNhbgorcGVyZm9ybSBwYXR0ZXJuIG1hdGNoaW5nIGluIHNlYXJjaGVzIHdpdGhvdXQgcmVnYXJkCit0byBjYXNlIGlmIC1pIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQuCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYi9wb3NpeC9yZWdleC5oIHwgICA0ICsKKyBzcmMvZGZhLmMgICAgICAgICB8ICAyMiArLQorIHNyYy9ncmVwLmMgICAgICAgIHwgIDk2ICsrKystLS0KKyBzcmMvc2VhcmNoLmMgICAgICB8IDgzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRpb25zKCspLCAxODcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcG9zaXgvcmVnZXguaCBiL2xpYi9wb3NpeC9yZWdleC5oCitpbmRleCA2M2MyZmVmLi43YmIyYjBlIDEwMDY0NAorLS0tIGEvbGliL3Bvc2l4L3JlZ2V4LmgKKysrKyBiL2xpYi9wb3NpeC9yZWdleC5oCitAQCAtMTA5LDYgKzEwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAgICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisgI2RlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorIAorKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisrI2RlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKKysKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICssID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyAjZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKK2RpZmYgLS1naXQgYS9zcmMvZGZhLmMgYi9zcmMvZGZhLmMKK2luZGV4IDU5MGJmYTcuLjI3Yzg3NmEgMTAwNjQ0CistLS0gYS9zcmMvZGZhLmMKKysrKyBiL3NyYy9kZmEuYworQEAgLTQxNCw3ICs0MTQsNyBAQCB1cGRhdGVfbWJfbGVuX2luZGV4ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBpbnQgbGVuKQorIAorIC8qIFRoaXMgZnVuY3Rpb24gZmV0Y2ggYSB3aWRlIGNoYXJhY3RlciwgYW5kIHVwZGF0ZSBjdXJfbWJfbGVuLAorICAgIHVzZWQgb25seSBpZiB0aGUgY3VycmVudCBsb2NhbGUgaXMgYSBtdWx0aWJ5dGUgZW52aXJvbm1lbnQuICAqLworLXN0YXRpYyB3Y2hhcl90Cisrc3RhdGljIHdpbnRfdAorIGZldGNoX3djIChjaGFyIGNvbnN0ICplb2ZlcnIpCisgeworICAgd2NoYXJfdCB3YzsKK0BAIC00MjMsNyArNDIzLDcgQEAgZmV0Y2hfd2MgKGNoYXIgY29uc3QgKmVvZmVycikKKyAgICAgICBpZiAoZW9mZXJyICE9IDApCisgCWRmYWVycm9yIChlb2ZlcnIpOworICAgICAgIGVsc2UKKy0JcmV0dXJuIC0xOworKwlyZXR1cm4gV0VPRjsKKyAgICAgfQorIAorICAgY3VyX21iX2xlbiA9IG1icnRvd2MoJndjLCBsZXhwdHIsIGxleGxlZnQsICZtYnMpOworQEAgLTQ1OSw3ICs0NTksNyBAQCBmZXRjaF93YyAoY2hhciBjb25zdCAqZW9mZXJyKQorIHN0YXRpYyB2b2lkCisgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyB7CistICB3Y2hhcl90IHdjLCB3YzEsIHdjMjsKKysgIHdpbnRfdCB3Yywgd2MxLCB3YzI7CisgCisgICAvKiBXb3JrIGFyZWEgdG8gYnVpbGQgYSBtYl9jaGFyX2NsYXNzZXMuICAqLworICAgc3RydWN0IG1iX2NoYXJfY2xhc3NlcyAqd29ya19tYmM7CitAQCAtNDk2LDcgKzQ5Niw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgICAgIHdvcmtfbWJjLT5pbnZlcnQgPSAwOworICAgZG8KKyAgICAgeworLSAgICAgIHdjMSA9IC0xOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKysgICAgICB3YzEgPSBXRU9GOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKyAKKyAgICAgICAvKiBOb3RlIHRoYXQgaWYgd2UncmUgbG9va2luZyBhdCBzb21lIG90aGVyIFs6Li4uOl0gY29uc3RydWN0LAorIAkgd2UganVzdCB0cmVhdCBpdCBhcyBhIGJ1bmNoIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMuICBXZSBjYW4gZG8KK0BAIC01ODYsNyArNTg2LDcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJCSAgICAgIHdvcmtfbWJjLT5jb2xsX2VsZW1zW3dvcmtfbWJjLT5uY29sbF9lbGVtcysrXSA9IGVsZW07CisgCQkgICAgfQorICAJCX0KKy0JICAgICAgd2MgPSAtMTsKKysJICAgICAgd2MxID0gd2MgPSBXRU9GOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIC8qIFdlIHRyZWF0ICdbJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIgaGVyZS4gICovCitAQCAtNjAwLDcgKzYwMCw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCSAgICB3YyA9IGZldGNoX3djKCgiVW5iYWxhbmNlZCBbIikpOworIAl9CisgCistICAgICAgaWYgKHdjMSA9PSAtMSkKKysgICAgICBpZiAod2MxID09IFdFT0YpCisgCXdjMSA9IGZldGNoX3djKF8oIlVuYmFsYW5jZWQgWyIpKTsKKyAKKyAgICAgICBpZiAod2MxID09IEwnLScpCitAQCAtNjMwLDE3ICs2MzAsMTcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJICAgIH0KKyAJICBSRUFMTE9DX0lGX05FQ0VTU0FSWSh3b3JrX21iYy0+cmFuZ2Vfc3RzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9zdHNfYWwsIHdvcmtfbWJjLT5ucmFuZ2VzICsgMSk7CistCSAgd29ya19tYmMtPnJhbmdlX3N0c1t3b3JrX21iYy0+bnJhbmdlc10gPSB3YzsKKysJICB3b3JrX21iYy0+cmFuZ2Vfc3RzW3dvcmtfbWJjLT5ucmFuZ2VzXSA9ICh3Y2hhcl90KXdjOworIAkgIFJFQUxMT0NfSUZfTkVDRVNTQVJZKHdvcmtfbWJjLT5yYW5nZV9lbmRzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9lbmRzX2FsLCB3b3JrX21iYy0+bnJhbmdlcyArIDEpOworLQkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gd2MyOworKwkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gKHdjaGFyX3Qpd2MyOworIAl9CistICAgICAgZWxzZSBpZiAod2MgIT0gLTEpCisrICAgICAgZWxzZSBpZiAod2MgIT0gV0VPRikKKyAJLyogYnVpbGQgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworIAl7CisgCSAgUkVBTExPQ19JRl9ORUNFU1NBUlkod29ya19tYmMtPmNoYXJzLCB3Y2hhcl90LCBjaGFyc19hbCwKKyAJCQkgICAgICAgd29ya19tYmMtPm5jaGFycyArIDEpOworLQkgIHdvcmtfbWJjLT5jaGFyc1t3b3JrX21iYy0+bmNoYXJzKytdID0gd2M7CisrCSAgd29ya19tYmMtPmNoYXJzW3dvcmtfbWJjLT5uY2hhcnMrK10gPSAod2NoYXJfdCl3YzsKKyAJfQorICAgICB9CisgICB3aGlsZSAoKHdjID0gd2MxKSAhPSBMJ10nKTsKK0BAIC0yNTUyLDYgKzI1NTIsOCBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBpbnQgcywgcG9zaXRpb24gcG9zLCBpbnQgaW5kZXgpCisgICAgIH0KKyAKKyAgIC8qIG1hdGNoIHdpdGggYSBjaGFyYWN0ZXI/ICAqLworKyAgaWYgKGNhc2VfZm9sZCkKKysgICAgd2MgPSB0b3dsb3dlciAod2MpOworICAgZm9yIChpID0gMDsgaTx3b3JrX21iYy0+bmNoYXJzOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAod2MgPT0gd29ya19tYmMtPmNoYXJzW2ldKQorZGlmZiAtLWdpdCBhL3NyYy9ncmVwLmMgYi9zcmMvZ3JlcC5jCitpbmRleCAyZmIyZmFjLi4zZmQ0YjQ3IDEwMDY0NAorLS0tIGEvc3JjL2dyZXAuYworKysrIGIvc3JjL2dyZXAuYworQEAgLTMwLDYgKzMwLDEyIEBACisgIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorICMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2VuZGlmCisrI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworKy8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCisrIyBkZWZpbmUgTUJTX1NVUFBPUlQKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImdldG9wdC5oIgorQEAgLTI1NSwxOSArMjYxLDYgQEAgcmVzZXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXRzICpzdGF0cykKKyAgIGJ1ZmJlZ1stMV0gPSBlb2xieXRlOworICAgYnVmZGVzYyA9IGZkOworIAorLSAgaWYgKGZzdGF0IChmZCwgJnN0YXRzLT5zdGF0KSAhPSAwKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiZnN0YXQiKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCistICAgIHJldHVybiAwOworLSNpZm5kZWYgREpHUFAKKy0gIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKy0jZWxzZQorLSAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorLSNlbmRpZgorLSAgICByZXR1cm4gMDsKKyAgIGlmIChTX0lTUkVHIChzdGF0cy0+c3RhdC5zdF9tb2RlKSkKKyAgICAgeworICAgICAgIGlmIChmaWxlKQorQEAgLTU1OCwzMyArNTUxLDYgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAgICAgeworICAgICAgIHNpemVfdCBtYXRjaF9zaXplOworICAgICAgIHNpemVfdCBtYXRjaF9vZmZzZXQ7CistICAgICAgaWYobWF0Y2hfaWNhc2UpCistICAgICAgICB7CistCSAgLyogWXVjaywgdGhpcyBpcyB0cmlja3kgKi8KKy0gICAgICAgICAgY2hhciAqYnVmID0gKGNoYXIqKSB4bWFsbG9jIChsaW0gLSBiZWcpOworLQkgIGNoYXIgKmliZWcgPSBidWY7CistCSAgY2hhciAqaWxpbSA9IGliZWcgKyAobGltIC0gYmVnKTsKKy0JICBpbnQgaTsKKy0JICBmb3IgKGkgPSAwOyBpIDwgbGltIC0gYmVnOyBpKyspCistCSAgICBpYmVnW2ldID0gdG9sb3dlciAoYmVnW2ldKTsKKy0JICB3aGlsZSAoKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGliZWcsIGlsaW0taWJlZywgJm1hdGNoX3NpemUsIDEpKQorLQkJICE9IChzaXplX3QpIC0xKQorLQkgICAgeworLQkgICAgICBjaGFyIGNvbnN0ICpiID0gYmVnICsgbWF0Y2hfb2Zmc2V0OworLQkgICAgICBpZiAoYiA9PSBsaW0pCistCQlicmVhazsKKy0JICAgICAgZndyaXRlIChiZWcsIHNpemVvZiAoY2hhciksIG1hdGNoX29mZnNldCwgc3Rkb3V0KTsKKy0JICAgICAgcHJpbnRmICgiXDMzWyVzbSIsIGdyZXBfY29sb3IpOworLQkgICAgICBmd3JpdGUgKGIsIHNpemVvZiAoY2hhciksIG1hdGNoX3NpemUsIHN0ZG91dCk7CistCSAgICAgIGZwdXRzICgiXDMzWzAwbSIsIHN0ZG91dCk7CistCSAgICAgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworLQkgICAgICBpYmVnID0gaWJlZyArIG1hdGNoX29mZnNldCArIG1hdGNoX3NpemU7CistCSAgICB9CistCSAgZndyaXRlIChiZWcsIDEsIGxpbSAtIGJlZywgc3Rkb3V0KTsKKy0JICBmcmVlIChidWYpOworLQkgIGxhc3RvdXQgPSBsaW07CistCSAgcmV0dXJuOworLQl9CisgICAgICAgd2hpbGUgKGxpbS1iZWcgJiYgKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGJlZywgbGltIC0gYmVnLCAmbWF0Y2hfc2l6ZSwgMSkpCisgCSAgICAgIT0gKHNpemVfdCkgLTEpCisgCXsKK0BAIC02MDEsNiArNTY3LDcgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAJICBmcHV0cyAoIlwzM1swMG0iLCBzdGRvdXQpOworIAkgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworIAl9CisrICAgICAgZnB1dHMgKCJcMzNbSyIsIHN0ZG91dCk7CisgICAgIH0KKyAgIGZ3cml0ZSAoYmVnLCAxLCBsaW0gLSBiZWcsIHN0ZG91dCk7CisgICBpZiAoZmVycm9yIChzdGRvdXQpKQorQEAgLTYyMyw3ICs1OTAsNyBAQCBwcnBlbmRpbmcgKGNoYXIgY29uc3QgKmxpbSkKKyAgICAgICBzaXplX3QgbWF0Y2hfc2l6ZTsKKyAgICAgICAtLXBlbmRpbmc7CisgICAgICAgaWYgKG91dGxlZnQKKy0JICB8fCAoKCgqZXhlY3V0ZSkgKGxhc3RvdXQsIG5sIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorKwkgIHx8ICgoKCpleGVjdXRlKSAobGFzdG91dCwgbmwgKyAxIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorIAkgICAgICA9PSAhb3V0X2ludmVydCkpCisgCXBybGluZSAobGFzdG91dCwgbmwgKyAxLCAnLScpOworICAgICAgIGVsc2UKK0BAIC04OTUsNiArODYyLDE5IEBAIGdyZXBmaWxlIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3Qgc3RhdHMgKnN0YXRzKQorICAgICB9CisgICBlbHNlCisgICAgIHsKKysgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0YXRzLT5zdGF0KSAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBzdXBwcmVzc2libGVfZXJyb3IgKGZpbGUsIGVycm5vKTsKKysgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgICAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCisrICAgICAgICByZXR1cm4gMTsKKysjaWZuZGVmIERKR1BQCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU1NPQ0soc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU0ZJRk8oc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbHNlCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbmRpZgorKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgd2hpbGUgKChkZXNjID0gb3BlbiAoZmlsZSwgT19SRE9OTFkpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisgCWNvbnRpbnVlOworIAorQEAgLTE2ODEsOSArMTY2MSw2IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIikpCisgCSAgb3V0X2ludmVydCBePSAxOworIAkgIG1hdGNoX2xpbmVzID0gbWF0Y2hfd29yZHMgPSAwOworIAl9CistICAgICAgZWxzZQorLQkvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworLSAgICAgICAgLS1rZXljYzsKKyAgICAgfQorICAgZWxzZQorICAgICBpZiAob3B0aW5kIDwgYXJnYykKK0BAIC0xNjk3LDYgKzE2NzQsMzcgQEAgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iKSkKKyAgIGlmICghaW5zdGFsbF9tYXRjaGVyIChtYXRjaGVyKSAmJiAhaW5zdGFsbF9tYXRjaGVyICgiZGVmYXVsdCIpKQorICAgICBhYm9ydCAoKTsKKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEgJiYgbWF0Y2hfaWNhc2UpCisrICAgIHsKKysgICAgICB3Y2hhcl90IHdjOworKyAgICAgIG1ic3RhdGVfdCBjdXJfc3RhdGUsIHByZXZfc3RhdGU7CisrICAgICAgaW50IGksIGxlbiA9IHN0cmxlbihrZXlzKTsKKysKKysgICAgICBtZW1zZXQoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuIDspCisrCXsKKysJICBzaXplX3QgbWJjbGVuOworKwkgIG1iY2xlbiA9IG1icnRvd2MoJndjLCBrZXlzICsgaSwgbGVuIC0gaSwgJmN1cl9zdGF0ZSk7CisrCSAgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IDApCisrCSAgICB7CisrCSAgICAgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisrCQkgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisrCSAgICAgIG1iY2xlbiA9IDE7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoaXN3dXBwZXIoKHdpbnRfdCl3YykpCisrCQl7CisrCQkgIHdjID0gdG93bG93ZXIoKHdpbnRfdCl3Yyk7CisrCQkgIHdjcnRvbWIoa2V5cyArIGksIHdjLCAmY3VyX3N0YXRlKTsKKysJCX0KKysJICAgIH0KKysJICBpICs9IG1iY2xlbjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisgICAoKmNvbXBpbGUpKGtleXMsIGtleWNjKTsKKyAKKyAgIGlmICgoYXJnYyAtIG9wdGluZCA+IDEgJiYgIW5vX2ZpbGVuYW1lcykgfHwgd2l0aF9maWxlbmFtZXMpCitkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIvc3JjL3NlYXJjaC5jCitpbmRleCA3YmQyMzNmLi4zYzZhNDg1IDEwMDY0NAorLS0tIGEvc3JjL3NlYXJjaC5jCisrKysgYi9zcmMvc2VhcmNoLmMKK0BAIC0xOCw5ICsxOCwxMyBAQAorIAorIC8qIFdyaXR0ZW4gQXVndXN0IDE5OTIgYnkgTWlrZSBIYWVydGVsLiAqLworIAorKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAxCisrI2VuZGlmCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworIC8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCitAQCAtMzEsNyArMzUsNyBAQAorIAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZ3JlcC5oIgorLSNpbmNsdWRlICJyZWdleC5oIgorKyNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlICJkZmEuaCIKKyAjaW5jbHVkZSAia3dzZXQuaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zOSw2ICs0Myw5IEBACisgI2lmZGVmIEhBVkVfTElCUENSRQorICMgaW5jbHVkZSA8cGNyZS5oPgorICNlbmRpZgorKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBOQ0hBUiAoVUNIQVJfTUFYICsgMSkKKyAKK0BAIC03MCw5ICs3NywxMCBAQCBzdGF0aWMga3dzZXRfdCBrd3NldDsKKyAgICBjYWxsIHRoZSByZWdleHAgbWF0Y2hlciBhdCBhbGwuICovCisgc3RhdGljIGludCBrd3NldF9leGFjdF9tYXRjaGVzOworIAorLSNpZiBkZWZpbmVkKE1CU19TVVBQT1JUKQorLXN0YXRpYyBjaGFyKiBjaGVja19tdWx0aWJ5dGVfc3RyaW5nIFBBUkFNUyAoKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKy0jZW5kaWYKKysvKiBVVEYtOCBlbmNvZGluZyBhbGxvd3Mgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgd2UgY2FuJ3Qgb3RoZXJ3aXNlCisrICAgYXNzdW1lIGluIGEgbXVsdGlieXRlIGVuY29kaW5nLiAqLworK3N0YXRpYyBpbnQgdXNpbmdfdXRmODsKKysKKyBzdGF0aWMgdm9pZCBrd3Npbml0IFBBUkFNUyAoKHZvaWQpKTsKKyBzdGF0aWMgdm9pZCBrd3NtdXN0cyBQQVJBTVMgKCh2b2lkKSk7Cisgc3RhdGljIHZvaWQgR2NvbXBpbGUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBzaXplX3QpKTsKK0BAIC04NCw2ICs5MiwxNSBAQCBzdGF0aWMgdm9pZCBQY29tcGlsZSBQQVJBTVMgKChjaGFyIGNvbnN0ICosIHNpemVfdCApKTsKKyBzdGF0aWMgc2l6ZV90IFBleGVjdXRlIFBBUkFNUyAoKGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzaXplX3QgKiwgaW50KSk7CisgCisgdm9pZAorK2NoZWNrX3V0ZjggKHZvaWQpCisreworKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysgIGlmIChzdHJjbXAgKG5sX2xhbmdpbmZvIChDT0RFU0VUKSwgIlVURi04IikgPT0gMCkKKysgICAgdXNpbmdfdXRmOCA9IDE7CisrI2VuZGlmCisrfQorKworK3ZvaWQKKyBkZmFlcnJvciAoY2hhciBjb25zdCAqbWVzZykKKyB7CisgICBlcnJvciAoMiwgMCwgbWVzZyk7CitAQCAtMTQxLDM4ICsxNTgsNiBAQCBrd3NtdXN0cyAodm9pZCkKKyAgICAgfQorIH0KKyAKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0vKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBhcnJheSB3aGljaCBjb3JyZXNwb25kIHRvICJidWYiLgorLSAgIFRoZW4gdGhpcyBjaGVjayBtdWx0aWJ5dGUgc3RyaW5nIGFuZCBtYXJrIG9uIHRoZSBwb3NpdGlvbnMgd2hpY2gKKy0gICBhcmUgbm90IHNpbmdsZWJ5dGUgY2hhcmFjdGVyIG5vciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZQorLSAgIGNoYXJhY3Rlci4gIENhbGxlciBtdXN0IGZyZWUgdGhlIGFycmF5LiAgKi8KKy1zdGF0aWMgY2hhcioKKy1jaGVja19tdWx0aWJ5dGVfc3RyaW5nKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpCisteworLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IG1hbGxvYyhzaXplKTsKKy0gIG1ic3RhdGVfdCBjdXJfc3RhdGU7CistICBpbnQgaTsKKy0gIG1lbXNldCgmY3VyX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CistICBtZW1zZXQobWJfcHJvcGVydGllcywgMCwgc2l6ZW9mKGNoYXIpKnNpemUpOworLSAgZm9yIChpID0gMDsgaSA8IHNpemUgOykKKy0gICAgeworLSAgICAgIHNpemVfdCBtYmNsZW47CistICAgICAgbWJjbGVuID0gbWJybGVuKGJ1ZiArIGksIHNpemUgLSBpLCAmY3VyX3N0YXRlKTsKKy0KKy0gICAgICBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAoc2l6ZV90KSAtMiB8fCBtYmNsZW4gPT0gMCkKKy0JeworLQkgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCistCSAgICAgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCistCSAgbWJjbGVuID0gMTsKKy0JfQorLSAgICAgIG1iX3Byb3BlcnRpZXNbaV0gPSBtYmNsZW47CistICAgICAgaSArPSBtYmNsZW47CistICAgIH0KKy0KKy0gIHJldHVybiBtYl9wcm9wZXJ0aWVzOworLX0KKy0jZW5kaWYKKy0KKyBzdGF0aWMgdm9pZAorIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtMTgxLDcgKzE2Niw4IEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCistICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSk7CisrICBjaGVja191dGY4ICgpOworKyAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgfCAobWF0Y2hfaWNhc2UgPyBSRV9JQ0FTRSA6IDApKTsKKyAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAKKyAgIC8qIEZvciBHTlUgcmVnZXggY29tcGlsZXIgd2UgaGF2ZSB0byBwYXNzIHRoZSBwYXR0ZXJucyBzZXBhcmF0ZWx5IHRvIGRldGVjdAorQEAgLTIxOCw2ICsyMDQsMTAgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0yMzMsNyArMjIzLDcgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiXFwpJCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9iZWdbXSA9ICJcXCheXFx8W15bOmFsbnVtOl1fXVxcKVxcKCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9lbmRbXSA9ICJcXClcXChbXls6YWxudW06XV9dXFx8JFxcKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4gKG4pOworQEAgLTI1NywxNCArMjQ3LDE1IEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCisrICBjaGVja191dGY4ICgpOworICAgaWYgKHN0cmNtcCAobWF0Y2hlciwgImF3ayIpID09IDApCisgICAgIHsKKy0gICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLKTsKKysgICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfQVdLLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCk7CisrICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAgICAgfQorIAorQEAgLTMwMSw2ICsyOTIsMTAgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0zMTYsNyArMzExLDcgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiKSQiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfYmVnW10gPSAiKF58W15bOmFsbnVtOl1fXSkoIjsKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCB3b3JkX2VuZFtdID0gIikoW15bOmFsbnVtOl1fXXwkKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4obik7CitAQCAtMzM5LDE1ICszMzQsMzQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgIGludCBiYWNrcmVmLCBzdGFydCwgbGVuOworICAgc3RydWN0IGt3c21hdGNoIGt3c207CistICBzaXplX3QgaTsKKysgIHNpemVfdCBpLCByZXRfdmFsOworKyAgc3RhdGljIGludCB1c2VfZGZhOworKyAgc3RhdGljIGludCB1c2VfZGZhX2NoZWNrZWQgPSAwOworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IE5VTEw7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisrICBtYnN0YXRlX3QgbWJzOworKyAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorKyAgaWYgKCF1c2VfZGZhX2NoZWNrZWQpCisrICAgIHsKKysgICAgICBjaGFyICpncmVwX3VzZV9kZmEgPSBnZXRlbnYgKCJHUkVQX1VTRV9ERkEiKTsKKysgICAgICBpZiAoIWdyZXBfdXNlX2RmYSkKKysJeworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIGt3c2V0KQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyhidWYsIHNpemUpOworKwkgIC8qIFR1cm4gb2ZmIERGQSB3aGVuIHByb2Nlc3NpbmcgbXVsdGlieXRlIGlucHV0LiAqLworKwkgIHVzZV9kZmEgPSAoTUJfQ1VSX01BWCA9PSAxKTsKKysjZWxzZQorKwkgIHVzZV9kZmEgPSAxOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgdXNlX2RmYSA9IGF0b2kgKGdyZXBfdXNlX2RmYSk7CisrCX0KKysKKysgICAgICB1c2VfZGZhX2NoZWNrZWQgPSAxOworKyAgICB9CisgCisgICBidWZsaW0gPSBidWYgKyBzaXplOworIAorQEAgLTM1OCw0NyArMzcyLDEyMCBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkgIGlmIChrd3NldCkKKyAJICAgIHsKKyAJICAgICAgLyogRmluZCBhIHBvc3NpYmxlIG1hdGNoIHVzaW5nIHRoZSBLV3NldCBtYXRjaGVyLiAqLworLQkgICAgICBzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmbGltIC0gYmVnLCAma3dzbSk7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldDsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgLyoga3dzZXhlYyBkb2Vzbid0IHdvcmsgd2l0aCBtYXRjaF9pY2FzZSBhbmQgbXVsdGlieXRlIGlucHV0LiAqLworKwkgICAgICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrCQkvKiBBdm9pZCBrd3NldCAqLworKwkJb2Zmc2V0ID0gMDsKKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkgICAgICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWZsaW0gLSBiZWcsICZrd3NtKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKy0JCXsKKysJICAgICAgICBnb3RvIGZhaWx1cmU7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCQkgIGlmIChNQl9DVVJfTUFYID4gMSkKKy0JCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZgorLQkJICByZXR1cm4gKHNpemVfdCktMTsKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKyAJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSBjb250YWluaW5nIHRoZSBjYW5kaWRhdGUsIGFuZAorIAkJIHJ1biBpdCB0aHJvdWdoIERGQS4gKi8KKyAJICAgICAgZW5kID0gbWVtY2hyKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbYmVnIC0gYnVmXSA9PSAwKQorKwkgICAgICBpZiAobWJfY3VyX21heCA+IDEgJiYgYnl0ZXNfbGVmdCkKKyAJCWNvbnRpbnVlOworLSNlbmRpZgorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICB3aGlsZSAoYmVnID4gYnVmICYmIGJlZ1stMV0gIT0gZW9sKQorIAkJLS1iZWc7CistCSAgICAgIGlmIChrd3NtLmluZGV4IDwga3dzZXRfZXhhY3RfbWF0Y2hlcykKKy0JCWdvdG8gc3VjY2VzczsKKy0JICAgICAgaWYgKGRmYWV4ZWMgKCZkZmEsIGJlZywgZW5kIC0gYmVnLCAmYmFja3JlZikgPT0gKHNpemVfdCkgLTEpCisrCSAgICAgIGlmICgKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgIShtYXRjaF9pY2FzZSAmJiBtYl9jdXJfbWF4ID4gMSkgJiYKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCSAgKGt3c20uaW5kZXggPCBrd3NldF9leGFjdF9tYXRjaGVzKSkKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKysJICAgICAgaWYgKHVzZV9kZmEgJiYKKysJCSAgZGZhZXhlYyAoJmRmYSwgYmVnLCBlbmQgLSBiZWcsICZiYWNrcmVmKSA9PSAoc2l6ZV90KSAtMSkKKyAJCWNvbnRpbnVlOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgLyogTm8gZ29vZCBmaXhlZCBzdHJpbmdzOyBzdGFydCB3aXRoIERGQS4gKi8KKy0JICAgICAgc2l6ZV90IG9mZnNldCA9IGRmYWV4ZWMgKCZkZmEsIGJlZywgYnVmbGltIC0gYmVnLCAmYmFja3JlZik7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisrCSAgICAgIGlmICh1c2VfZGZhKQorKwkJb2Zmc2V0ID0gZGZhZXhlYyAoJmRmYSwgYmVnLCBidWZsaW0gLSBiZWcsICZiYWNrcmVmKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKyAJCWJyZWFrOworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSB3ZSd2ZSBmb3VuZC4gKi8KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICBlbmQgPSBtZW1jaHIgKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmIGJ5dGVzX2xlZnQpCisrCQljb250aW51ZTsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgd2hpbGUgKGJlZyA+IGJ1ZiAmJiBiZWdbLTFdICE9IGVvbCkKKyAJCS0tYmVnOworIAkgICAgfQorIAkgIC8qIFN1Y2Nlc3NmdWwsIG5vIGJhY2tyZWZlcmVuY2VzIGVuY291bnRlcmVkISAqLworLQkgIGlmICghYmFja3JlZikKKy0JICAgIGdvdG8gc3VjY2VzczsKKysJICBpZiAodXNlX2RmYSAmJiAhYmFja3JlZikKKysJICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJfQorICAgICAgIGVsc2UKKyAJZW5kID0gYmVnICsgc2l6ZTsKK0BAIC00MTMsMTQgKzUwMCwxMSBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkJCQkgICAgICAgZW5kIC0gYmVnIC0gMSwgJihwYXR0ZXJuc1tpXS5yZWdzKSkpKQorIAkgICAgeworIAkgICAgICBsZW4gPSBwYXR0ZXJuc1tpXS5yZWdzLmVuZFswXSAtIHN0YXJ0OworLQkgICAgICBpZiAoZXhhY3QpCistCQl7CistCQkgICptYXRjaF9zaXplID0gbGVuOworLQkJICByZXR1cm4gc3RhcnQ7CistCQl9CisrCSAgICAgIGlmIChleGFjdCAmJiAhbWF0Y2hfd29yZHMpCisrCSAgICAgICAgZ290byBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW47CisgCSAgICAgIGlmICgoIW1hdGNoX2xpbmVzICYmICFtYXRjaF93b3JkcykKKyAJCSAgfHwgKG1hdGNoX2xpbmVzICYmIGxlbiA9PSBlbmQgLSBiZWcgLSAxKSkKKy0JCWdvdG8gc3VjY2VzczsKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJICAgICAgLyogSWYgLXcsIGNoZWNrIGlmIHRoZSBtYXRjaCBhbGlnbnMgd2l0aCB3b3JkIGJvdW5kYXJpZXMuCisgCQkgV2UgZG8gdGhpcyBpdGVyYXRpdmVseSBiZWNhdXNlOgorIAkJIChhKSB0aGUgbGluZSBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIG9jY3VyZW5jZSBvZiB0aGUKK0BAIC00MzEsMTAgKzUxNSwxMTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgICAgaWYgKG1hdGNoX3dvcmRzKQorIAkJd2hpbGUgKHN0YXJ0ID49IDApCisgCQkgIHsKKy0JCSAgICBpZiAoKHN0YXJ0ID09IDAgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0IC0gMV0pKQorLQkJCSYmIChsZW4gPT0gZW5kIC0gYmVnIC0gMQorLQkJCSAgICB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkpCistCQkgICAgICBnb3RvIHN1Y2Nlc3M7CisrCQkgICAgaW50IGx3b3JkX21hdGNoID0gMDsKKysJCSAgICBpZiAoc3RhcnQgPT0gMCkKKysJCSAgICAgIGx3b3JkX21hdGNoID0gMTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJYXNzZXJ0IChzdGFydCA+IDApOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCWlmIChtYl9jdXJfbWF4ID4gMSkKKysJCQkgIHsKKysJCQkgICAgY29uc3QgY2hhciAqczsKKysJCQkgICAgc2l6ZV90IG1yOworKwkJCSAgICB3Y2hhcl90IHB3YzsKKysKKysJCQkgICAgLyogTG9jYXRlIHRoZSBzdGFydCBvZiB0aGUgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCSAgICAgICBiZWZvcmUgdGhlIG1hdGNoIHBvc2l0aW9uICg9PSBiZWcgKyBzdGFydCkuICovCisrCQkJICAgIGlmICh1c2luZ191dGY4KQorKwkJCSAgICAgIHsKKysJCQkJLyogVVRGLTggaXMgYSBzcGVjaWFsIGNhc2U6IHNjYW4gYmFja3dhcmRzCisrCQkJCSAgIHVudGlsIHdlIGZpbmQgYSA3LWJpdCBjaGFyYWN0ZXIgb3IgYQorKwkJCQkgICBsZWFkIGJ5dGUuICovCisrCQkJCXMgPSBiZWcgKyBzdGFydCAtIDE7CisrCQkJCXdoaWxlIChzID4gYnVmCisrCQkJCSAgICAgICAmJiAodW5zaWduZWQgY2hhcikgKnMgPj0gMHg4MAorKwkJCQkgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpICpzIDw9IDB4YmYpCisrCQkJCSAgLS1zOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKwkJCSAgICAgIHsKKysJCQkJLyogU2NhbiBmb3J3YXJkcyB0byBmaW5kIHRoZSBzdGFydCBvZiB0aGUKKysJCQkJICAgbGFzdCBjb21wbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZQorKwkJCQkgICBtYXRjaCBwb3NpdGlvbi4gICovCisrCQkJCXNpemVfdCBieXRlc19sZWZ0ID0gc3RhcnQgLSAxOworKwkJCQlzID0gYmVnOworKwkJCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApCisrCQkJCSAgeworKwkJCQkgICAgbXIgPSBtYnJsZW4gKHMsIGJ5dGVzX2xlZnQsICZtYnMpOworKwkJCQkgICAgaWYgKG1yID09IChzaXplX3QpIC0xIHx8IG1yID09IDApCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCXMrKzsKKysJCQkJCWJ5dGVzX2xlZnQtLTsKKysJCQkJCWNvbnRpbnVlOworKwkJCQkgICAgICB9CisrCQkJCSAgICBpZiAobXIgPT0gKHNpemVfdCkgLTIpCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCWJyZWFrOworKwkJCQkgICAgICB9CisrCQkJCSAgICBzICs9IG1yOworKwkJCQkgICAgYnl0ZXNfbGVmdCAtPSBtcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKwkJCSAgICBtciA9IG1icnRvd2MgKCZwd2MsIHMsIGJlZyArIHN0YXJ0IC0gcywgJm1icyk7CisrCQkJICAgIGlmIChtciA9PSAoc2l6ZV90KSAtMiB8fCBtciA9PSAoc2l6ZV90KSAtMSB8fAorKwkJCQltciA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCQlsd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlIGlmICghKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCQkgICAgICYmIG1yID09IGJlZyArIHN0YXJ0IC0gcykKKysJCQkgICAgICBsd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCQkJZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJCWlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgLSAxXSkpCisrCQkJICBsd29yZF9tYXRjaCA9IDE7CisrCQkgICAgICB9CisrCisrCQkgICAgaWYgKGx3b3JkX21hdGNoKQorKwkJICAgICAgeworKwkJCWludCByd29yZF9tYXRjaCA9IDA7CisrCQkJaWYgKHN0YXJ0ICsgbGVuID09IGVuZCAtIGJlZyAtIDEpCisrCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJZWxzZQorKwkJCSAgeworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCSAgICBpZiAobWJfY3VyX21heCA+IDEpCisrCQkJICAgICAgeworKwkJCQl3Y2hhcl90IG53YzsKKysJCQkJaW50IG1yOworKworKwkJCQltciA9IG1idG93YyAoJm53YywgYmVnICsgc3RhcnQgKyBsZW4sCisrCQkJCQkgICAgIGVuZCAtIGJlZyAtIHN0YXJ0IC0gbGVuIC0gMSk7CisrCQkJCWlmIChtciA8PSAwKQorKwkJCQkgIHsKKysJCQkJICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkJICAgIHJ3b3JkX21hdGNoID0gMTsKKysJCQkJICB9CisrCQkJCWVsc2UgaWYgKCFpc3dhbG51bSAobndjKSAmJiBud2MgIT0gTCdfJykKKysJCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkJICAgIGlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkKKysJCQkgICAgICByd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCisrCQkJaWYgKHJ3b3JkX21hdGNoKQorKwkJCSAgeworKwkJCSAgICBpZiAoIWV4YWN0KQorKwkJCSAgICAgIC8qIFJldHVybnMgdGhlIHdob2xlIGxpbmUuICovCisrCQkJICAgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOworKwkJCSAgICBlbHNlCisrCQkJICAgICAgLyogUmV0dXJucyBqdXN0IHRoaXMgd29yZCBtYXRjaC4gKi8KKysJCQkgICAgICBnb3RvIHN1Y2Nlc3NfaW5fc3RhcnRfYW5kX2xlbjsKKysJCQkgIH0KKysJCSAgICAgIH0KKyAJCSAgICBpZiAobGVuID4gMCkKKyAJCSAgICAgIHsKKyAJCQkvKiBUcnkgYSBzaG9ydGVyIGxlbmd0aCBhbmNob3JlZCBhdCB0aGUgc2FtZSBwbGFjZS4gKi8KK0BAIC00NjEsMjYgKzY0OSwxNTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgIH0KKyAJfSAvKiBmb3IgUmVnZXggcGF0dGVybnMuICAqLworICAgICB9IC8qIGZvciAoYmVnID0gZW5kIC4uKSAqLworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKyBmYWlsdXJlOgorICAgcmV0dXJuIChzaXplX3QpIC0xOworIAorLSBzdWNjZXNzOgorLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLSAgKm1hdGNoX3NpemUgPSBlbmQgLSBiZWc7CistICByZXR1cm4gYmVnIC0gYnVmOworKyBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOgorKyAgbGVuID0gZW5kIC0gYmVnOworKyAgc3RhcnQgPSBiZWcgLSBidWY7CisrICAvKiBGQUxMVEhST1VHSCAqLworKworKyBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKysgIHJldHVybiBzdGFydDsKKyB9CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIGludCBmX2lfbXVsdGlieXRlOyAvKiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHRoZSBuZXcgLUZpIE1CIG1ldGhvZCAqLworK3N0YXRpYyBzdHJ1Y3QKKyt7CisrICB3Y2hhcl90ICoqcGF0dGVybnM7CisrICBzaXplX3QgY291bnQsIG1heGxlbjsKKysgIHVuc2lnbmVkIGNoYXIgKm1hdGNoOworK30gRmltYjsKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIEZjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisgICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICplcnI7CisgCisrICBjaGVja191dGY4ICgpOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKyAgLyogU3VwcG9ydCAtRiAtaSBmb3IgVVRGLTggaW5wdXQuICovCisrICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrICAgIHsKKysgICAgICBtYnN0YXRlX3QgbWJzOworKyAgICAgIHdjaGFyX3QgKndjcGF0dGVybiA9IHhtYWxsb2MgKChzaXplICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuZW5kID0gcGF0dGVybjsKKysgICAgICBzaXplX3Qgd2NzaXplOworKyAgICAgIGt3c2V0X3QgZmltYl9rd3NldCA9IE5VTEw7CisrICAgICAgY2hhciAqc3RhcnRzID0gTlVMTDsKKysgICAgICB3Y2hhcl90ICp3Y2JlZywgKndjbGltOworKyAgICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOworKworKyAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysjIGlmZGVmIF9fR05VX0xJQlJBUllfXworKyAgICAgIHdjc2l6ZSA9IG1ic25ydG93Y3MgKHdjcGF0dGVybiwgJnBhdHRlcm5lbmQsIHNpemUsIHNpemUsICZtYnMpOworKyAgICAgIGlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm4gKyBzaXplKQorKwl3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysjIGVsc2UKKysgICAgICB7CisrCWNoYXIgKnBhdHRlcm5jb3B5ID0geG1hbGxvYyAoc2l6ZSArIDEpOworKworKwltZW1jcHkgKHBhdHRlcm5jb3B5LCBwYXR0ZXJuLCBzaXplKTsKKysJcGF0dGVybmNvcHlbc2l6ZV0gPSAnXDAnOworKwlwYXR0ZXJuZW5kID0gcGF0dGVybmNvcHk7CisrCXdjc2l6ZSA9IG1ic3J0b3djcyAod2NwYXR0ZXJuLCAmcGF0dGVybmVuZCwgc2l6ZSwgJm1icyk7CisrCWlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm5jb3B5ICsgc2l6ZSkKKysJICB3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysJZnJlZSAocGF0dGVybmNvcHkpOworKyAgICAgIH0KKysjIGVuZGlmCisrICAgICAgaWYgKHdjc2l6ZSArIDIgPD0gMikKKysJeworK2ZpbWJfZmFpbDoKKysJICBmcmVlICh3Y3BhdHRlcm4pOworKwkgIGZyZWUgKHN0YXJ0cyk7CisrCSAgaWYgKGZpbWJfa3dzZXQpCisrCSAgICBrd3NmcmVlIChmaW1iX2t3c2V0KTsKKysJICBmcmVlIChGaW1iLnBhdHRlcm5zKTsKKysJICBGaW1iLnBhdHRlcm5zID0gTlVMTDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmICghKGZpbWJfa3dzZXQgPSBrd3NhbGxvYyAoTlVMTCkpKQorKwkgICAgZXJyb3IgKDIsIDAsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisrCisrCSAgc3RhcnRzID0geG1hbGxvYyAobWJfY3VyX21heCAqIDMpOworKwkgIHdjYmVnID0gd2NwYXR0ZXJuOworKwkgIGRvCisrCSAgICB7CisrCSAgICAgIGludCBpOworKwkgICAgICBzaXplX3Qgd2NsZW47CisrCisrCSAgICAgIGlmIChGaW1iLmNvdW50ID49IGFsbG9jYXRlZCkKKysJCXsKKysJCSAgaWYgKGFsbG9jYXRlZCA9PSAwKQorKwkJICAgIGFsbG9jYXRlZCA9IDEyODsKKysJCSAgZWxzZQorKwkJICAgIGFsbG9jYXRlZCAqPSAyOworKwkJICBGaW1iLnBhdHRlcm5zID0geHJlYWxsb2MgKEZpbWIucGF0dGVybnMsCisrCQkJCQkgICAgc2l6ZW9mICh3Y2hhcl90ICopICogYWxsb2NhdGVkKTsKKysJCX0KKysJICAgICAgRmltYi5wYXR0ZXJuc1tGaW1iLmNvdW50KytdID0gd2NiZWc7CisrCSAgICAgIGZvciAod2NsaW0gPSB3Y2JlZzsKKysJCSAgIHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplICYmICp3Y2xpbSAhPSBMJ1xuJzsgKyt3Y2xpbSkKKysJCSp3Y2xpbSA9IHRvd2xvd2VyICgqd2NsaW0pOworKwkgICAgICAqd2NsaW0gPSBMJ1wwJzsKKysJICAgICAgd2NsZW4gPSB3Y2xpbSAtIHdjYmVnOworKwkgICAgICBpZiAod2NsZW4gPiBGaW1iLm1heGxlbikKKysJCUZpbWIubWF4bGVuID0gd2NsZW47CisrCSAgICAgIGlmICh3Y2xlbiA+IDMpCisrCQl3Y2xlbiA9IDM7CisrCSAgICAgIGlmICh3Y2xlbiA9PSAwKQorKwkJeworKwkJICBpZiAoKGVyciA9IGt3c2luY3IgKGZpbWJfa3dzZXQsICIiLCAwKSkgIT0gMCkKKysJCSAgICBlcnJvciAoMiwgMCwgZXJyKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IHdjbGVuKTsgaSsrKQorKwkJICB7CisrCQkgICAgY2hhciAqcCA9IHN0YXJ0czsKKysJCSAgICBpbnQgaiwgazsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgd2NsZW47ICsraikKKysJCSAgICAgIHsKKysJCQl3Y2hhcl90IHdjID0gd2NiZWdbal07CisrCQkJaWYgKGkgJiAoMSA8PCBqKSkKKysJCQkgIHsKKysJCQkgICAgd2MgPSB0b3d1cHBlciAod2MpOworKwkJCSAgICBpZiAod2MgPT0gd2NiZWdbal0pCisrCQkJICAgICAgY29udGludWU7CisrCQkJICB9CisrCQkJayA9IHdjdG9tYiAocCwgd2MpOworKwkJCWlmIChrIDw9IDApCisrCQkJICBnb3RvIGZpbWJfZmFpbDsKKysJCQlwICs9IGs7CisrCQkgICAgICB9CisrCQkgICAgaWYgKChlcnIgPSBrd3NpbmNyIChmaW1iX2t3c2V0LCBzdGFydHMsIHAgLSBzdGFydHMpKSAhPSAwKQorKwkJICAgICAgZXJyb3IgKDIsIDAsIGVycik7CisrCQkgIH0KKysJICAgICAgaWYgKHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplKQorKwkJKyt3Y2xpbTsKKysJICAgICAgd2NiZWcgPSB3Y2xpbTsKKysJICAgIH0KKysJICB3aGlsZSAod2NiZWcgPCB3Y3BhdHRlcm4gKyB3Y3NpemUpOworKwkgIGZfaV9tdWx0aWJ5dGUgPSAxOworKwkgIGt3c2V0ID0gZmltYl9rd3NldDsKKysJICBmcmVlIChzdGFydHMpOworKwkgIEZpbWIubWF0Y2ggPSB4bWFsbG9jIChGaW1iLmNvdW50KTsKKysJICBpZiAoKGVyciA9IGt3c3ByZXAgKGt3c2V0KSkgIT0gMCkKKysJICAgIGVycm9yICgyLCAwLCBlcnIpOworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisrCisgICBrd3Npbml0ICgpOworICAgYmVnID0gcGF0dGVybjsKKyAgIGRvCitAQCAtNDk5LDYgKzgxNSw3NiBAQCBGY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICAgIGVycm9yICgyLCAwLCBlcnIpOworIH0KKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKytzdGF0aWMgaW50CisrRmltYmV4ZWMgKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqcGxlbiwgaW50IGV4YWN0KQorK3sKKysgIHNpemVfdCBsZW4sIGxldHRlciwgaTsKKysgIGludCByZXQgPSAtMTsKKysgIG1ic3RhdGVfdCBtYnM7CisrICB3Y2hhcl90IHdjOworKyAgaW50IHBhdHRlcm5zX2xlZnQ7CisrCisrICBhc3NlcnQgKG1hdGNoX2ljYXNlICYmIGZfaV9tdWx0aWJ5dGUgPT0gMSk7CisrICBhc3NlcnQgKE1CX0NVUl9NQVggPiAxKTsKKysKKysgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysgIG1lbXNldCAoRmltYi5tYXRjaCwgJ1wxJywgRmltYi5jb3VudCk7CisrICBsZXR0ZXIgPSBsZW4gPSAwOworKyAgcGF0dGVybnNfbGVmdCA9IDE7CisrICB3aGlsZSAocGF0dGVybnNfbGVmdCAmJiBsZW4gPD0gc2l6ZSkKKysgICAgeworKyAgICAgIHNpemVfdCBjOworKworKyAgICAgIHBhdHRlcm5zX2xlZnQgPSAwOworKyAgICAgIGlmIChsZW4gPCBzaXplKQorKwl7CisrCSAgYyA9IG1icnRvd2MgKCZ3YywgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmbWJzKTsKKysJICBpZiAoYyArIDIgPD0gMikKKysJICAgIHJldHVybiByZXQ7CisrCisrCSAgd2MgPSB0b3dsb3dlciAod2MpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgYyA9IDE7CisrCSAgd2MgPSBMJ1wwJzsKKysJfQorKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBGaW1iLmNvdW50OyBpKyspCisrCXsKKysJICBpZiAoRmltYi5tYXRjaFtpXSkKKysJICAgIHsKKysJICAgICAgaWYgKEZpbWIucGF0dGVybnNbaV1bbGV0dGVyXSA9PSBMJ1wwJykKKysJCXsKKysJCSAgLyogRm91bmQgYSBtYXRjaC4gKi8KKysJCSAgKnBsZW4gPSBsZW47CisrCQkgIGlmICghZXhhY3QgJiYgIW1hdGNoX3dvcmRzKQorKwkJICAgIHJldHVybiAwOworKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgLyogRm9yIC13IG9yIGV4YWN0IGxvb2sgZm9yIGxvbmdlc3QgbWF0Y2guICAqLworKwkJICAgICAgcmV0ID0gMDsKKysJCSAgICAgIEZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkJICAgICAgY29udGludWU7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAoRmltYi5wYXR0ZXJuc1tpXVtsZXR0ZXJdID09IHdjKQorKwkJcGF0dGVybnNfbGVmdCA9IDE7CisrCSAgICAgIGVsc2UKKysJCUZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkgICAgfQorKwl9CisrCisrICAgICAgbGVuICs9IGM7CisrICAgICAgbGV0dGVyKys7CisrICAgIH0KKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworIHN0YXRpYyBzaXplX3QKKyBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgeworQEAgLTUwNiw4OCArODkyLDI2OCBAQCBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgICByZWdpc3RlciBzaXplX3QgbGVuOworICAgY2hhciBlb2wgPSBlb2xieXRlOworICAgc3RydWN0IGt3c21hdGNoIGt3c21hdGNoOworKyAgc2l6ZV90IHJldF92YWw7CisgI2lmZGVmIE1CU19TVVBQT1JUCistICBjaGFyICptYl9wcm9wZXJ0aWVzOworLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyAoYnVmLCBzaXplKTsKKysgIGludCBtYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKysgIG1ic3RhdGVfdCBtYnM7CisrICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrICBjb25zdCBjaGFyICpsYXN0X2NoYXIgPSBOVUxMOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorLSAgZm9yIChiZWcgPSBidWY7IGJlZyA8PSBidWYgKyBzaXplOyArK2JlZykKKysgIGZvciAoYmVnID0gYnVmOyBiZWcgPCBidWYgKyBzaXplOyArK2JlZykKKyAgICAgeworLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWYgKyBzaXplIC0gYmVnLCAma3dzbWF0Y2gpOworKyAgICAgIHNpemVfdCBvZmZzZXQ7CisrICAgICAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoKTsKKysKKyAgICAgICBpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQorLQl7CisrCWdvdG8gZmFpbHVyZTsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkgIHJldHVybiBvZmZzZXQ7CisrICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwl7CisrCSAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBvZmZzZXQ7CisrCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkgICAgICBsYXN0X2NoYXIgPSBiZWc7CisrCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCXsKKysJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkgIGJlZysrOworKwkJICBieXRlc19sZWZ0LS07CisrCQkgIGNvbnRpbnVlOworKwkJfQorKworKwkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6IG5vIGdvb2QuICovCisrCQlicmVhazsKKysKKysJICAgICAgYmVnICs9IG1sZW47CisrCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJICAgIH0KKysKKysJICBpZiAoYnl0ZXNfbGVmdCkKKysJICAgIGNvbnRpbnVlOworIAl9CistI2lmZGVmIE1CU19TVVBQT1JUCistICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbb2Zmc2V0K2JlZy1idWZdID09IDApCistCWNvbnRpbnVlOyAvKiBJdCBpcyBhIHBhcnQgb2YgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisrICAgICAgZWxzZQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgICAgIGJlZyArPSBvZmZzZXQ7CistICAgICAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0gICAgICBpZiAoZXhhY3QpCistCXsKKy0JICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBGb3IgZl9pX211bHRpYnl0ZSwgdGhlIHN0cmluZyBhdCBiZWcgbm93IG1hdGNoZXMgZmlyc3QgMyBjaGFycyBvZgorKwkgb25lIG9mIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2ggc3RyaW5ncykuCisrCSBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKyAgICAgIGlmIChmX2lfbXVsdGlieXRlCisrCSAgJiYgRmltYmV4ZWMgKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoLnNpemVbMF0sIGV4YWN0KSkKKysJZ290byBuZXh0X2NoYXI7CisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCSAgcmV0dXJuIGJlZyAtIGJ1ZjsKKy0JfQorKyAgICAgIGxlbiA9IGt3c21hdGNoLnNpemVbMF07CisrICAgICAgaWYgKGV4YWN0ICYmICFtYXRjaF93b3JkcykKKysJZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworICAgICAgIGlmIChtYXRjaF9saW5lcykKKyAJeworIAkgIGlmIChiZWcgPiBidWYgJiYgYmVnWy0xXSAhPSBlb2wpCistCSAgICBjb250aW51ZTsKKysJICAgIGdvdG8gbmV4dF9jaGFyOworIAkgIGlmIChiZWcgKyBsZW4gPCBidWYgKyBzaXplICYmIGJlZ1tsZW5dICE9IGVvbCkKKy0JICAgIGNvbnRpbnVlOworKwkgICAgZ290byBuZXh0X2NoYXI7CisgCSAgZ290byBzdWNjZXNzOworIAl9CisgICAgICAgZWxzZSBpZiAobWF0Y2hfd29yZHMpCistCWZvciAodHJ5ID0gYmVnOyBsZW47ICkKKy0JICB7CistCSAgICBpZiAodHJ5ID4gYnVmICYmIFdDSEFSKCh1bnNpZ25lZCBjaGFyKSB0cnlbLTFdKSkKKy0JICAgICAgYnJlYWs7CistCSAgICBpZiAodHJ5ICsgbGVuIDwgYnVmICsgc2l6ZSAmJiBXQ0hBUigodW5zaWduZWQgY2hhcikgdHJ5W2xlbl0pKQorLQkgICAgICB7CistCQlvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoKTsKKy0JCWlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCistCQkgIHsKKysJeworKwkgIHdoaWxlIChsZW4pCisrCSAgICB7CisrCSAgICAgIGludCB3b3JkX21hdGNoID0gMDsKKysJICAgICAgaWYgKGJlZyA+IGJ1ZikKKysJCXsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JCSAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCQkgICAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysJCSAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJICAgIHsKKysJCSAgICAgIGNvbnN0IGNoYXIgKnM7CisrCQkgICAgICBpbnQgbXI7CisrCQkgICAgICB3Y2hhcl90IHB3YzsKKysKKysJCSAgICAgIGlmICh1c2luZ191dGY4KQorKwkJCXsKKysJCQkgIHMgPSBiZWcgLSAxOworKwkJCSAgd2hpbGUgKHMgPiBidWYKKysJCQkJICYmICh1bnNpZ25lZCBjaGFyKSAqcyA+PSAweDgwCisrCQkJCSAmJiAodW5zaWduZWQgY2hhcikgKnMgPD0gMHhiZikKKysJCQkgICAgLS1zOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQlzID0gbGFzdF9jaGFyOworKwkJICAgICAgbXIgPSBtYnRvd2MgKCZwd2MsIHMsIGJlZyAtIHMpOworKwkJICAgICAgaWYgKG1yIDw9IDApCisrCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgZWxzZSBpZiAoKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCSAgICAgICAmJiBtciA9PSAoaW50KSAoYmVnIC0gcykpCisrCQkJZ290byBuZXh0X2NoYXI7CisrCQkgICAgfQorKwkJICBlbHNlCisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCQkgICAgcmV0dXJuIG9mZnNldDsKKy0JCSAgfQorLQkJdHJ5ID0gYmVnICsgb2Zmc2V0OworLQkJbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0JICAgICAgfQorLQkgICAgZWxzZQorLQkgICAgICBnb3RvIHN1Y2Nlc3M7CistCSAgfQorKwkJICBpZiAoV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbLTFdKSkKKysJCSAgICBnb3RvIG5leHRfY2hhcjsKKysJCX0KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJeworKwkJICB3Y2hhcl90IG53YzsKKysJCSAgaW50IG1yOworKworKwkJICBtciA9IG1idG93YyAoJm53YywgYmVnICsgbGVuLCBidWYgKyBzaXplIC0gYmVnIC0gbGVuKTsKKysJCSAgaWYgKG1yIDw9IDApCisrCQkgICAgeworKwkJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgd29yZF9tYXRjaCA9IDE7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICghaXN3YWxudW0gKG53YykgJiYgbndjICE9IEwnXycpCisrCQkgICAgd29yZF9tYXRjaCA9IDE7CisrCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCWlmIChiZWcgKyBsZW4gPj0gYnVmICsgc2l6ZSB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbbGVuXSkpCisrCQkgIHdvcmRfbWF0Y2ggPSAxOworKwkgICAgICBpZiAod29yZF9tYXRjaCkKKysJCXsKKysJCSAgaWYgKCFleGFjdCkKKysJCSAgICAvKiBSZXR1cm5zIHRoZSB3aG9sZSBsaW5lIG5vdyB3ZSBrbm93IHRoZXJlJ3MgYSB3b3JkIG1hdGNoLiAqLworKwkJICAgIGdvdG8gc3VjY2VzczsKKysJCSAgZWxzZQorKwkJICAgIC8qIFJldHVybnMganVzdCB0aGlzIHdvcmQgbWF0Y2guICovCisrCQkgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworKwkJfQorKwkgICAgICBpZiAobGVuID4gMCkKKysJCXsKKysJCSAgLyogVHJ5IGEgc2hvcnRlciBsZW5ndGggYW5jaG9yZWQgYXQgdGhlIHNhbWUgcGxhY2UuICovCisrCQkgIC0tbGVuOworKwkJICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBsZW4sICZrd3NtYXRjaCk7CisrCisrCQkgIGlmIChvZmZzZXQgPT0gLTEpCisrCQkgICAgZ290byBuZXh0X2NoYXI7IC8qIFRyeSBhIGRpZmZlcmVudCBhbmNob3IuICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgICAgIHdoaWxlIChieXRlc19sZWZ0KQorKwkJCXsKKysJCQkgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkJCSAgbGFzdF9jaGFyID0gYmVnOworKwkJCSAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTEgfHwgbWxlbiA9PSAwKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkgICAgICBiZWcrKzsKKysJCQkgICAgICBieXRlc19sZWZ0LS07CisrCQkJICAgICAgY29udGludWU7CisrCQkJICAgIH0KKysKKysJCQkgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogT2Zmc2V0IHBvaW50cyBpbnNpZGUgbXVsdGlieXRlIGNoYXJhY3RlcjoKKysJCQkgICAgICAgKiBubyBnb29kLiAqLworKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICB9CisrCisrCQkJICBiZWcgKz0gbWxlbjsKKysJCQkgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCQl9CisrCisrCQkgICAgICBpZiAoYnl0ZXNfbGVmdCkKKysJCQl7CisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBnb3RvIG5leHRfY2hhcjsgLyogVHJ5IGEgZGlmZmVyZW50IGFuY2hvci4gKi8KKysJCQl9CisrCQkgICAgfQorKwkJICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkgIGJlZyArPSBvZmZzZXQ7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIC8qIFRoZSBzdHJpbmcgYXQgYmVnIG5vdyBtYXRjaGVzIGZpcnN0IDMgY2hhcnMgb2Ygb25lIG9mCisrCQkgICAgIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2gKKysJCSAgICAgc3RyaW5ncykuICBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKwkJICBpZiAoZl9pX211bHRpYnl0ZQorKwkJICAgICAgJiYgRmltYmV4ZWMgKGJlZywgbGVuIC0gb2Zmc2V0LCAma3dzbWF0Y2guc2l6ZVswXSwKKysJCQkJICAgZXhhY3QpKQorKwkJICAgIGdvdG8gbmV4dF9jaGFyOworKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJICBsZW4gPSBrd3NtYXRjaC5zaXplWzBdOworKwkJfQorKwkgICAgfQorKwl9CisgICAgICAgZWxzZQorIAlnb3RvIHN1Y2Nlc3M7CistICAgIH0KKy0KKytuZXh0X2NoYXI6OworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgY2hhcmFjdGVyLiAgRm9yIE1CX0NVUl9NQVggPT0gMSBjYXNlIHRoaXMgaXMgaGFuZGxlZAorKwkgYnkgKytiZWcgYWJvdmUuICAqLworKyAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJeworKwkgIGlmICh1c2luZ191dGY4KQorKwkgICAgeworKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnOworKwkgICAgICBpZiAoYyA+PSAweGMyKQorKwkJeworKwkJICBpZiAoYyA8IDB4ZTApCisrCQkgICAgKytiZWc7CisrCQkgIGVsc2UgaWYgKGMgPCAweGYwKQorKwkJICAgIGJlZyArPSAyOworKwkJICBlbHNlIGlmIChjIDwgMHhmOCkKKysJCSAgICBiZWcgKz0gMzsKKysJCSAgZWxzZSBpZiAoYyA8IDB4ZmMpCisrCQkgICAgYmVnICs9IDQ7CisrCQkgIGVsc2UgaWYgKGMgPCAweGZlKQorKwkJICAgIGJlZyArPSA1OworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgc2l6ZV90IGwgPSBtYnJsZW4gKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJm1icyk7CisrCisrCSAgICAgIGxhc3RfY2hhciA9IGJlZzsKKysJICAgICAgaWYgKGwgKyAyID49IDIpCisrCQliZWcgKz0gbCAtIDE7CisrCSAgICAgIGVsc2UKKysJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJICAgIH0KKysJfQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKyAgICB9CisrCisrIGZhaWx1cmU6CisgICByZXR1cm4gLTE7CisgCisgIHN1Y2Nlc3M6CisrI2lmZGVmIE1CU19TVVBQT1JUCisrICBpZiAobWJfY3VyX21heCA+IDEgJiYgIXVzaW5nX3V0ZjgpCisrICAgIHsKKysgICAgICBlbmQgPSBiZWcgKyBsZW47CisrICAgICAgd2hpbGUgKGVuZCA8IGJ1ZiArIHNpemUpCisrCXsKKysJICBzaXplX3QgbWxlbiA9IG1icmxlbiAoZW5kLCBidWYgKyBzaXplIC0gZW5kLCAmbWJzKTsKKysJICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IChzaXplX3QpIC0yIHx8IG1sZW4gPT0gMCkKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkgICAgICBtbGVuID0gMTsKKysJICAgIH0KKysJICBpZiAobWxlbiA9PSAxICYmICplbmQgPT0gZW9sKQorKwkgICAgYnJlYWs7CisrCisrCSAgZW5kICs9IG1sZW47CisrCX0KKysgICAgfQorKyAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgZW5kID0gbWVtY2hyIChiZWcgKyBsZW4sIGVvbCwgKGJ1ZiArIHNpemUpIC0gKGJlZyArIGxlbikpOworKworICAgZW5kKys7CisgICB3aGlsZSAoYnVmIDwgYmVnICYmIGJlZ1stMV0gIT0gZW9sKQorICAgICAtLWJlZzsKKy0gICptYXRjaF9zaXplID0gZW5kIC0gYmVnOworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysgIGxlbiA9IGVuZCAtIGJlZzsKKysgIC8qIEZBTExUSFJPVUdIICovCisrCisrIHN1Y2Nlc3NfaW5fYmVnX2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAgIHJldHVybiBiZWcgLSBidWY7CisgfQorIAorQEAgLTcwMSw4ICsxMjY3LDkgQEAgUGV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorICAgICAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgICAgICBpZiAoIWV4YWN0KQorIAl7CistCSAgZW5kID0gbWVtY2hyIChlbmQsIGVvbCwgYnVmbGltIC0gZW5kKTsKKy0JICBlbmQrKzsKKysJICB3aGlsZSAoZW5kIDwgYnVmbGltKQorKwkgICAgaWYgKCplbmQrKyA9PSBlb2wpCisrCSAgICAgIGJyZWFrOworIAkgIHdoaWxlIChidWYgPCBiZWcgJiYgYmVnWy0xXSAhPSBlb2wpCisgCSAgICAtLWJlZzsKKyAJfQorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjY2U1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjozMzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IGNvbmZpZ3VyZS5pbjozMzogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKy4uLgorfCBsaWIvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBzcmMvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9jb25maWd1cmUuaW4KKysrKyBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KK0BAIC0zMCw3ICszMCw2IEBAIEFDX1BST0dfUkFOTElCCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfU1lTX0xBUkdFRklMRQorLUFNX0NfUFJPVE9UWVBFUworIEFDX1RZUEVfU0laRV9UCisgQUNfQ0hFQ0tfVFlQRShzc2l6ZV90LCBpbnQpCisgQUNfQ19DT05TVAorSW5kZXg6IGdyZXAtMi41LjFhL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjFhLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgZ3JlcC0yLjUuMWEvbGliL01ha2VmaWxlLmFtCitAQCAtMSw1ICsxLDUgQEAKKyAjCistQVVUT01BS0VfT1BUSU9OUyA9IC4uL3NyYy9hbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAKKyAKKyBTVUJESVJTID0gcG9zaXgKKyAKK0luZGV4OiBncmVwLTIuNS4xYS9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGdyZXAtMi41LjFhL3NyYy9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSw1IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKy1BVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIgbm8tZGVwZW5kZW5jaWVzCisrQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworIAorIExOID0gbG4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDU0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEZpeCB0byB1c2UgbWVtcGNweSBpbnN0ZWFkIG9mIF9fbWVtcGNweS4gVGhpcyBpcyBuZWVkZWQgZm9yIHVjbGliYyB3aGljaAorIyBkb2Vzbid0IGRlZmluZSBfX21lbXBjcHksIG9ubHkgbWVtcGNweS4gU2luY2UgYm90aCB1Y2xpYmMgYW5kIGdsaWJjIGhhdmUKKyMgbWVtcGNweSwgd2UnbGwganVzdCB1c2UgdGhhdCBpbnN0ZWFkLgorIyBQYXRjaCBzb3VyY2U6IE9wZW5FbWJlZGRlZAorCitJbmRleDogZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDItMDMtMTQgMDA6Mzk6MDYuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMJMjAwNy0wNS0xNyAxMzo1Mzo1OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC02NSw3ICs2NSw3IEBACisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKyAKKyAjIGlmbmRlZiBtZW1wY3B5CistIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyAgZXJyb3IgIm1lbXBjcHkgbm90IGRldGVjdGVkIgorICMgZW5kaWYKKyAjIGRlZmluZSBIQVZFX01FTVBDUFkJMQorICMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCitJbmRleDogZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvbGliL2dldG9wdC5jCTIwMDEtMDMtMDQgMTY6MzM6MTIuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMJMjAwNy0wNS0xNyAxMzo1MTo0NC4wMDAwMDAwMDAgKzEwMDAKK0BAIC0zMjYsNyArMzI2LDcgQEAKKyAJbm9ub3B0aW9uX2ZsYWdzX2xlbiA9IG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gMDsKKyAgICAgICBlbHNlCisgCXsKKy0JICBtZW1zZXQgKF9fbWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorKwkgIG1lbXNldCAobWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorIAkJCSAgICAgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pLAorIAkJICAnXDAnLCB0b3AgKyAxIC0gbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pOworIAkgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gdG9wICsgMTsKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAJICAgICAgaWYgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9PSBOVUxMKQorIAkJbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAtMTsKKyAJICAgICAgZWxzZQorLQkJbWVtc2V0IChfX21lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisrCQltZW1zZXQgKG1lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisgCQkJJ1wwJywgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gLSBsZW4pOworIAkgICAgfQorIAl9CitJbmRleDogZ3JlcC0yLjUuMS9saWIvcmVnZXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjEub3JpZy9saWIvcmVnZXguYwkyMDAxLTA0LTAzIDA0OjA0OjQ1LjAwMDAwMDAwMCArMTAwMAorKysrIGdyZXAtMi41LjEvbGliL3JlZ2V4LmMJMjAwNy0wNS0xNyAxMzo1MTo0OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC03ODQyLDcgKzc4NDIsNyBAQAorICAgICAgIGlmIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplKQorICAgICAgICAgeworICNpZiBkZWZpbmVkIEhBVkVfTUVNUENQWSB8fCBkZWZpbmVkIF9MSUJDCistCSAgKigoY2hhciAqKSBfX21lbXBjcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpKSA9ICdcMCc7CisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworICNlbHNlCisgICAgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisgICAgICAgICAgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhhOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoCkBAIC0wLDAgKzEsMTU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNS0xMzQ1LgoraHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZ3JlcC5naXQvY29tbWl0Lz9pZD04M2E5NWJkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDgzYTk1YmQ4Yzg1NjE4NzViOTQ4Y2FkZDQxN2M2NTNkYmU3ZWYyZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWxpeSBQaXNldHNreSA8eXBpc2V0c2t5QGZiLmNvbT4KK0RhdGU6IFRodSwgMSBKYW4gMjAxNSAxNTozNjo1NSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBncmVwIC1GOiBmaXggYSBoZWFwIGJ1ZmZlciAocmVhZCkgb3ZlcnJ1bgorCitncmVwJ3MgcmVhZCBidWZmZXIgaXMgb2Z0ZW4gZmlsbGVkIHRvIGl0cyBmdWxsIHNpemUsIGV4Y2VwdCB3aGVuCityZWFkaW5nIHRoZSBmaW5hbCBidWZmZXIgb2YgYSBmaWxlLiAgSW4gdGhhdCBjYXNlLCB0aGUgbnVtYmVyIG9mCitieXRlcyByZWFkIG1heSBiZSBmYXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBIb3dldmVyLCBmb3IKK2NlcnRhaW4gdW51c3VhbCBwYXR0ZXJuL3RleHQgY29tYmluYXRpb25zLCBncmVwIC1GIHdvdWxkIG1pc3Rha2VubHkKK2V4YW1pbmUgYnl0ZXMgaW4gdGhhdCB1bmluaXRpYWxpemVkIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiBzZWFyY2hpbmcKK2ZvciBhIG1hdGNoLiAgV2l0aCBjYXJlZnVsbHkgY2hvc2VuIGlucHV0cywgb25lIGNhbiBjYXVzZSBncmVwIC1GIHRvCityZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoYXQgYnVmZmVyIGFsdG9nZXRoZXIuICBUaGlzIHByb2JsZW0gYXJvc2UgdmlhCitjb21taXQgdjIuMTgtOTAtZzczODkzZmYgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbW9yZSBlZmZpY2llbnQKK2hldXJpc3RpYyB1c2luZyB3aGF0IGlzIG5vdyB0aGUgbWVtY2hyX2t3c2V0IGZ1bmN0aW9uLiBUaGUgdXNlIG9mCit0aGF0IGZ1bmN0aW9uIGluIGJtZXhlY190cmFucyBjb3VsZCBsZWF2ZSBUUCBtdWNoIGxhcmdlciB0aGFuIEVQLAorYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYm1fZGVsdGEyX3NlYXJjaCB3b3VsZCBtaXN0YWtlbmx5IGFjY2VzcworYmV5b25kIGVuZCBvZiB0aGUgbWFpbiBpbnB1dCByZWFkIGJ1ZmZlci4KKworKiBzcmMva3dzZXQuYyAoYm1leGVjX3RyYW5zKTogV2hlbiBUUCByZWFjaGVzIG9yIGV4Y2VlZHMgRVAsCitkbyBub3QgY2FsbCBibV9kZWx0YTJfc2VhcmNoLgorKiB0ZXN0cy9rd3NldC1hYnVzZTogTmV3IGZpbGUuCisqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBpdC4KKyogVEhBTktTLmluOiBVcGRhdGUuCisqIE5FV1MgKEJ1ZyBmaXhlcyk6IE1lbnRpb24gaXQuCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHRoaXMgY29tbWFuZCB3b3VsZCB0cmlnZ2VyIGEgVU1SOgorCisgIHByaW50ZiAlMDM2MGRiIDAgfCB2YWxncmluZCBzcmMvZ3JlcCAtRiAkKHByaW50ZiAlMDE5ZFhiIDApCisKKyAgVXNlIG9mIHVuaW5pdGlhbGlzZWQgdmFsdWUgb2Ygc2l6ZSA4CisgICAgIGF0IDB4NDE0MkJFOiBibWV4ZWNfdHJhbnMgKGt3c2V0LmM6NjU3KQorICAgICBieSAweDQxNDNDQTogYm1leGVjIChrd3NldC5jOjY3OCkKKyAgICAgYnkgMHg0MTQ5NzM6IGt3c2V4ZWMgKGt3c2V0LmM6ODQ4KQorICAgICBieSAweDQxNERDNDogRmV4ZWN1dGUgKGt3c2VhcmNoLmM6MTI4KQorICAgICBieSAweDQwNEUyRTogZ3JlcGJ1ZiAoZ3JlcC5jOjEyMzgpCisgICAgIGJ5IDB4NDA1NEJGOiBncmVwIChncmVwLmM6MTQxNykKKyAgICAgYnkgMHg0MDVDRUI6IGdyZXBkZXNjIChncmVwLmM6MTY0NSkKKyAgICAgYnkgMHg0MDVFQzE6IGdyZXBfY29tbWFuZF9saW5lX2FyZyAoZ3JlcC5jOjE2OTIpCisgICAgIGJ5IDB4NDA3N0Q0OiBtYWluIChncmVwLmM6MjU3MCkKKworU2VlIHRoZSBhY2NvbXBhbnlpbmcgdGVzdCBmb3IgaG93IHRvIHRyaWdnZXIgdGhlIGhlYXAgYnVmZmVyIG92ZXJydW4uCisKK1RoYW5rcyB0byBOaW1hIEFnaGRhaWkgZm9yIHRlc3RpbmcgYW5kIGZpbmRpbmcgbnVtZXJvdXMKK3dheXMgdG8gYnJlYWsgZWFybHkgaXRlcmF0aW9ucyBvZiB0aGlzIHBhdGNoLgorLS0tCisgTkVXUyAgICAgICAgICAgICAgfCAgNSArKysrKworIFRIQU5LUy5pbiAgICAgICAgIHwgIDEgKworIHNyYy9rd3NldC5jICAgICAgIHwgIDIgKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSB8ICAxICsKKyB0ZXN0cy9rd3NldC1hYnVzZSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNSBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RzL2t3c2V0LWFidXNlCisKK2RpZmYgLS1naXQgYS9ORVdTIGIvTkVXUworaW5kZXggOTc1NDQwZC4uMzgzNWQ4ZCAxMDA2NDQKKy0tLSBhL05FV1MKKysrKyBiL05FV1MKK0BAIC0yLDYgKzIsMTEgQEAgR05VIGdyZXAgTkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvdXRsaW5lIC0qLQorIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgPy4/ICg/Pz8/LT8/LT8/KSBbP10KKyAKKysqKiBCdWcgZml4ZXMKKysKKysgIGdyZXAgbm8gbG9uZ2VyIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZnJvbSBiZXlvbmQgdGhlIGVuZAorKyAgb2YgdGhlIGhlYXAtYWxsb2NhdGVkIGlucHV0IGJ1ZmZlci4KKysKKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuMjEgKDIwMTQtMTEtMjMpIFtzdGFibGVdCisgCitkaWZmIC0tZ2l0IGEvVEhBTktTLmluIGIvVEhBTktTLmluCitpbmRleCBhZWFmNTE2Li42MjQ0NzhkIDEwMDY0NAorLS0tIGEvVEhBTktTLmluCisrKysgYi9USEFOS1MuaW4KK0BAIC02Miw2ICs2Miw3IEBAIE1pY2hhZWwgQWljaGxtYXlyICAgICAgICAgICAgICAgICAgIG1pa2xhQG54LmNvbQorIE1pbGVzIEJhZGVyICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzQGNjcy5tdC5uZWMuY28uanAKKyBNaXJyYXogTWlycmF6ICAgICAgICAgICAgICAgICAgICAgICBtaXJyYXoxQHJhbWJsZXIucnUKKyBOZWxzb24gSC4gRi4gQmVlYmUgICAgICAgICAgICAgICAgICBiZWViZUBtYXRoLnV0YWguZWR1CisrTmltYSBBZ2hkYWlpICAgICAgICAgICAgICAgICAgICAgICAgbmFnaGRhaWlAZmIuY29tCisgT2xhZiBLaXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgb2tpckBucy5sc3QuZGUKKyBQYXVsIEtpbW90byAgICAgICAgICAgICAgICAgICAgICAgICBraW1vdG9Ac3BhY2VuZXQudG4uY29ybmVsbC5lZHUKKyBQw6l0ZXIgUmFkaWNzICAgICAgICAgICAgICAgICAgICAgICAgbWl0Y2hudWxsQGdtYWlsLmNvbQorZGlmZiAtLWdpdCBhL3NyYy9rd3NldC5jIGIvc3JjL2t3c2V0LmMKK2luZGV4IDQwMDNjOGQuLjM3NmY3YzMgMTAwNjQ0CistLS0gYS9zcmMva3dzZXQuYworKysrIGIvc3JjL2t3c2V0LmMKK0BAIC02NDMsNiArNjQzLDggQEAgYm1leGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgIGlmICghIHRwKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICB0cCsrOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGVwIDw9IHRwKQorKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAyY2JhMmNkLi4wNTA4Y2QyIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsNyBAQCBURVNUUyA9CQkJCQkJXAorICAgaW5jb25zaXN0ZW50LXJhbmdlCQkJCVwKKyAgIGludmFsaWQtbXVsdGlieXRlLWluZmxvb3AJCQlcCisgICBraGFkYWZ5CQkJCQlcCisrICBrd3NldC1hYnVzZQkJCQkJXAorICAgbG9uZy1saW5lLXZzLTJHaUItcmVhZAkJCVwKKyAgIG1hdGNoLWxpbmVzCQkJCQlcCisgICBtYXgtY291bnQtb3ZlcnJlYWQJCQkJXAorZGlmZiAtLWdpdCBhL3Rlc3RzL2t3c2V0LWFidXNlIGIvdGVzdHMva3dzZXQtYWJ1c2UKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi42ZDhlYzBjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0cy9rd3NldC1hYnVzZQorQEAgLTAsMCArMSwzMiBAQAorKyMhIC9iaW4vc2gKKysjIEV2b2tlIGEgc2VnZmF1bHQgaW4gYSBoYXJkLXRvLXJlYWNoIGNvZGUgcGF0aCBvZiBrd3NldC5jLgorKyMgVGhpcyBidWcgYWZmZWN0ZWQgZ3JlcCB2ZXJzaW9ucyAyLjE5IHRocm91Z2ggMi4yMS4KKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrLiAiJHtzcmNkaXI9Ln0vaW5pdC5zaCI7IHBhdGhfcHJlcGVuZF8gLi4vc3JjCisrCisrZmFpbD0wCisrCisrIyBUaGlzIHRlc3QgY2FzZSBjaG9vc2VzIGEgaGF5c3RhY2sgb2Ygc2l6ZSAyNjAsMDAwLCBzaW5jZSBwcm9kZGluZworKyMgd2l0aCBnZGIgc2hvd2VkIGEgcmVhbGxvY2F0aW9uIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoYXQgaW4gZmlsbGJ1Zi4KKysjIFRvIHJlYWNoIHRoZSBidWdneSBjb2RlLCB0aGUgbmVlZGxlIG11c3QgaGF2ZSBsZW5ndGggPCAxLzExIHRoYXQgb2YKKysjIHRoZSBoYXlzdGFjaywgYW5kIDEwLDAwMCBpcyBhIG5pY2Ugcm91bmQgbnVtYmVyIHRoYXQgZml0cyB0aGUgYmlsbC4KKytwcmludGYgJyUwMjYwMDAwZFh5XG4nIDAgfCBncmVwIC1GICQocHJpbnRmICUwMTAwMDBkeSAwKQorKworK3Rlc3QgJD8gPSAxIHx8IGZhaWw9MQorKworK0V4aXQgJGZhaWwKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NjEwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNjNDgwNjRkNjQwOTg2MmI4YTg1MGRiODNjODAzOGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTI0NGExMWMwMGRlZThlN2U1ZTcxNGI5YWFhMDUzYWM2Y2JmYTI3ZTEwNGFiZWUyMGQzYzc3OGU0YmIwZTVkZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2luaXQubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwlybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjUuMWEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyZGEyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiUGF0dGVybiBtYXRjaGluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIHZlcnNpb25zIG9mIGNvbW1vbmx5IHVzZWQgZ3JlcCB1dGlsaXRpZXMuICBUaGUgZ3JlcCBjb21tYW5kIHNlYXJjaGVzIG9uZSBvciBtb3JlIGlucHV0IFwKK2ZpbGVzIGZvciBsaW5lcyBjb250YWluaW5nIGEgbWF0Y2ggdG8gYSBzcGVjaWZpZWQgcGF0dGVybi4iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2V2YXJzIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtZWdyZXAtZmdyZXAtRml4LUxTQi1ORy1jYXNlcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTIyMDJmZTQ2Mjc3MGZhNmJlMWJiNjY3YmQ2Y2YzMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzhjOGEyYmI5MjIzZDFmYjFiMTBiZGQ2MDdjZjQ0ODMwYWZjOTJmZDQ1MWFjNGNkMDc2MTliZjkyYmRkMzEzMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORl9JTkNMVURFRF9SRUdFWCA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCitFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVhfbGliYy1tdXNsID0gIi0td2l0aC1pbmNsdWRlZC1yZWdleCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCBcCisgICAgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVh9IgorCitDRkxBR1MgKz0gIi1EIFBST1RPVFlQRVMiCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00CisJY3AgLWYgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9ncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9ncmVwCisJbXYgJHtEfSR7YmluZGlyfS9lZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZWdyZXAKKwltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAorCXJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtZml4LWJpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTlhZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5zdWIgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCisrKysgYi9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCitAQCAtMzgsMTYgKzM4LDE2IEBAIGdyb2ZmZXI6IGdyb2ZmZXIuc2ggZ3JvZmZlcjIuc2ggdmVyc2lvbi4KKyAJJChSTSkgJEA7CisgCXNlZCBcCisgICAgICAgICAgICAgLWUgInN8QGdAfCQoZyl8ZyIgXAorLQkgICAgLWUgInN8QEJJTkRJUkB8JChERVNURElSKSQoYmluZGlyKXxnIiBcCisrCSAgICAtZSAic3xAQklORElSQHwkKGJpbmRpcil8ZyIgXAorIAkgICAgLWUgInN8QGxpYmRpckB8JChERVNURElSKSQobGliZGlyKXxnIiBcCisgCSAgICAtZSAic3xAVkVSU0lPTkB8JCh2ZXJzaW9uKSQocmV2aXNpb24pfGciIFwKKyAJICAgICQoc3JjZGlyKS9ncm9mZmVyLnNoID4kQDsKKyAJY2htb2QgK3ggJEAKKyAKKyBpbnN0YWxsX2RhdGE6IGdyb2ZmZXIKKy0JLXRlc3QgLWQgJChERVNURElSKSQoYmluZGlyKSB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGJpbmRpcikKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorLQkkKElOU1RBTExfU0NSSVBUKSBncm9mZmVyICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktdGVzdCAtZCAkKGJpbmRpcikgfHwgJChta2luc3RhbGxkaXJzKSAkKGJpbmRpcikKKysJLSQoUk0pICQoYmluZGlyKS9ncm9mZmVyCisrCSQoSU5TVEFMTF9TQ1JJUFQpIGdyb2ZmZXIgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLXRlc3QgLWQgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyIHx8IFwKKyAgICAgICAgICAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorQEAgLTU4LDcgKzU4LDcgQEAgaW5zdGFsbF9kYXRhOiBncm9mZmVyCisgCSQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci92ZXJzaW9uLnNoCisgCisgdW5pbnN0YWxsX3N1YjoKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktJChSTSkgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorIAktJChSTSkgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyL3ZlcnNpb24uc2gKKyAJLXJtZGlyICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtcmVtb3ZlLW1vbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjRlZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBncm9mZi0xLjE4LjEuNC9NYWtlZmlsZS5pbiB8ICAgIDcgKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDYwLDI3ICs0NjAsMjIgQEAgT1RIRVJESVJTPVwKKyAgIHNyYy9yb2ZmL2dyb2cgXAorICAgc3JjL3JvZmYvbnJvZmYgXAorICAgY29udHJpYi9tbSBcCisgICBjb250cmliL3BpYzJncmFwaCBcCisgICBjb250cmliL2VxbjJncmFwaCBcCistICBjb250cmliL2dyb2ZmZXIgXAorLSAgY29udHJpYi9tb20gXAorLSAgZG9jCisrICBjb250cmliL2dyb2ZmZXIKKyBBTExESVJTPSQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSBcCisgICAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSAkKFRUWURFVkRJUlMpICQoT1RIRVJESVJTKQorIEVYVFJBRElSUz1cCisgICBmb250L2RldnBzL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2ZHZpL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2bGo0L2dlbmVyYXRlIFwKKy0gIHNyYy94ZGl0dmlldyBcCisgICBkb2MKKyBOT01BS0VESVJTPVwKKyAgIGFyY2gvZGpncHAgXAorICAgY29udHJpYi9tbS9leGFtcGxlcyBcCisgICBjb250cmliL21tL21tIFwKKy0gIGNvbnRyaWIvbW9tL2V4YW1wbGVzIFwKKy0gIGNvbnRyaWIvbW9tL21vbWRvYyBcCisgICBzcmMvbGlicy9zbnByaW50ZgorIERJU1RESVJTPVwKKyAgICQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSBcCisgICAkKEFMTFRUWURFVkRJUlMpICQoT1RIRVJESVJTKSAkKEVYVFJBRElSUykgJChOT01BS0VESVJTKQorIFRBUkdFVFM9YWxsIGluc3RhbGwgaW5zdGFsbF9iaW4gaW5zdGFsbF9kYXRhIGNsZWFuIGRpc3RjbGVhbiBtb3N0bHljbGVhbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YxYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyb2ZmLTEuMTguMS40Lm9yaWcvdG1hYy9tYW4ubG9jYWwJMjAwMC0xMC0yNiAyMjoxNToxNy4wMDAwMDAwMDAgKzA4MDAKKysrKyBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAkyMDEwLTA4LTI0IDE0OjE3OjUyLjA3MDAwNjY2NCArMDgwMAorQEAgLTEsMiArMSwyNyBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGFuLW9sZC50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gYW4tb2xkLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWRvYy1sb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDljMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21kb2MubG9jYWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjE4LjEuNC5vcmlnL3RtYWMvbWRvYy5sb2NhbAkyMDAxLTAzLTIzIDA4OjE3OjUxLjAwMDAwMDAwMCArMDgwMAorKysrIGdyb2ZmLTEuMTguMS40L3RtYWMvbWRvYy5sb2NhbAkyMDEwLTA4LTI0IDE0OjIwOjIyLjAxNDAwNjg0NiArMDgwMAorQEAgLTEsMiArMSwyNiBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGRvYy50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gZG9jLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWI0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjIyLjMub3JpZy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMTMsNyArMTEzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzMzMjhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0NvcnJlY3QgdGhlIGluc3RhbGwgcGF0aCBvZiBtYW4ubG9jYWwgdG8gZml4IGZvbGxvd2luZyBlcnJvcjoKKyAgICAveW9jdG8vYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvZ3JvZmYvMS4yMi4yL3RtYWMvYW4tb2xkLnRtYWM6NjkwOiB3YXJuaW5nOiBjYW4ndCBmaW5kIG1hY3JvIGZpbGUgYG1hbi5sb2NhbCcKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3RtYWMvTWFrZWZpbGUuc3ViIGIvdG1hYy9NYWtlZmlsZS5zdWIKK2luZGV4IDE1MDYyMzIuLmYxNDY4YzUgMTAwNjQ0CistLS0gYS90bWFjL01ha2VmaWxlLnN1YgorKysrIGIvdG1hYy9NYWtlZmlsZS5zdWIKK0BAIC0xMjEsOSArMTIxLDkgQEAgaW5zdGFsbF9kYXRhOiAkKE5PUk1BTEZJTEVTKSAkKFNQRUNJQUxGSUxFUykgbWFuLmxvY2FsIFwKKyAJICAkKFJNKSAkKERFU1RESVIpJChtZG9jZGlyKS8kJGY7IFwKKyAJICAkKElOU1RBTExfREFUQSkgJCRmLXMgJChERVNURElSKSQobWRvY2RpcikvJCRmOyBcCisgCWRvbmUKKy0JLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tYW4ubG9jYWwgXAorKwktdGVzdCAtZiAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgIHx8ICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbWFuLmxvY2FsIFwKKy0JICAgICAgICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsCisrCSAgICAgICAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwKKyAJLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICB8fCAkKElOU1RBTExfREFUQSkgbWRvYy5sb2NhbC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbAorIAorQEAgLTE2NCw5ICsxNjQsOSBAQCB1bmluc3RhbGxfc3ViOgorIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS8kKHRtYWNfc19wcmVmaXgpcy50bWFjCisgCSQoUk0pICQoREVTVERJUikkKHRtYWNkaXIpLyQodG1hY19hbl9wcmVmaXgpYW4udG1hYworIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS93d3cudG1hYworLQktaWYgY21wIC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsIFwKKysJLWlmIGNtcCAtcyAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgICAgICAgICAgICQoc3JjZGlyKS9tYW4ubG9jYWw7IHRoZW4gXAorLQkgICQoUk0pICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsOyBcCisrCSAgJChSTSkgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsOyBcCisgCWZpCisgCS1pZiBjbXAgLXMgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICAgICAgICAgICAkKHNyY2RpcikvbWRvYy5sb2NhbDsgdGhlbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3ODZhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQzZmMxNmZjY2Q4NTE5ZmJhNDA1ZjBhMGZmNmU4YTMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vb2xkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICBmaWxlOi8vbWFuLWxvY2FsLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vbWRvYy1sb2NhbC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggXAorIiAKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkY9Ii0td2l0aG91dC14IC0tcHJlZml4PSR7RH0gLS1leGVjLXByZWZpeD0ke0R9IC0tYmluZGlyPSR7RH0ke2JpbmRpcn0gLS1kYXRhZGlyPSR7RH0ke2RhdGFkaXJ9IC0tbWFuZGlyPSR7RH0ke2RhdGFkaXJ9L21hbiAtLWluZm9kaXI9JHtEfSR7ZGF0YWRpcn1pbmZvIC0td2l0aC1hcHByZXNkaXI9JHtEfSR7ZGF0YWRpcn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZWVjYjgxNTMzOTM2ZDI1MWVkMDE1ZjQwZTVmNzI4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjNjN2MzYjZjYWU1ZThjYzUwNjJhMTQ0ZGU1ZWZmMDAyMmU4ZTk3MGUxNzc0NTI5Y2MyZDVkZGU0NmNlNTBkIgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKyAgICBvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU29tZSBkaXN0cm9zIGhhdmUgYm90aCAvYmluL3BlcmwgYW5kIC91c3IvYmluL3BlcmwsIGJ1dCB3ZSBzZXQgcGVybCBsb2NhdGlvbgorCSMgZm9yIHRhcmdldCBhcyAvdXNyL2Jpbi9wZXJsLCBzbyBmaXggaXQgdG8gL3Vzci9iaW4vcGVybC4KKwlmb3IgaSBpbiBhZm10b2RpdCBtbXJvZmY7IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9LyRpCisJCWZpCisJZG9uZQorCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYKKwljcCAtcmYgJHtEfSR7ZGF0YWRpcn0vZ3JvZmYvc2l0ZS10bWFjLyogJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYvCisJY3AgLXJmICR7RH0ke2RhdGFkaXJ9L2dyb2ZmL3NpdGUtdG1hYy8qICR7RH0ke2RhdGFkaXJ9L2dyb2ZmLyR7UFZ9L3RtYWMvCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKwlsbiAtcyB0YmwgJEQke2JpbmRpcn0vZ3RibAorCWVjaG8gImV4cG9ydCBHUk9GRl9GT05UX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS9mb250IiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWVjaG8gImV4cG9ydCBHUk9GRl9UTUFDX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS90bWFjIiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZmYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpAQCAtMCwwICsxLDcwIEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JvZmYvZ3JvZmYtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBcCisJZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2M4MjVmYTY0YmM3MzA2YTg4NWYyZmIyMjY4ZDNlYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2E0OGE5ZDZjOTc3NTBiZmJkNTM1ZmVlYjViZTAxMTFkYjY0MDZkZGI3YmI3OWZjNjgwODA5Y2RhNmQ4MjhhNSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfSArPSAicGVybCBzZWQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgIiR7QlVJTERfU1lTfSIgIT0gIiR7SE9TVF9TWVN9IiBdOyB0aGVuCisJCXNlZCAtaSBcCisJCSAgICAtZSAnL15HUk9GRkJJTj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm9mZjonIFwKKwkJICAgIC1lICcvXlRST0ZGQklOPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Ryb2ZmOicgXAorCQkgICAgLWUgJy9eR1JPRkZfQklOX1BBVEg9L3M6PS4qOj0ke1NUQUdJTkdfQklORElSX05BVElWRX06JyBcCisJCSAgICAtZSAnL15HUk9GRl9CSU5fRElSPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OicgXAorCQkgICAgJHtTfS9jb250cmliLyovTWFrZWZpbGUuc3ViIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLmluIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLnN1YgorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisgICAgIyBnZW5lcmF0ZSBnbnVsaWIgY29uZmlndXJlIHNjcmlwdAorICAgIG9sZGRpcj1gcHdkYAorICAgIGNkICR7U30vc3JjL2xpYnMvZ251bGliLworICAgIEFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorICAgIGNkICR7b2xkZGlyfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJZm9yIGkgaW4gYWZtdG9kaXQgbW1yb2ZmIGdyb3BkZiBwZGZtb20gZ3JvZzsgZG8KKwkJaWYgWyAtZiAke0R9JHtiaW5kaXJ9LyRpIF07IHRoZW4KKwkJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vJGkKKwkJZmkKKwlkb25lCisJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXTsgdGhlbgorCQlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3JvZmYgXAorCQktRiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L2ZvbnQgXAorCQktTSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L3RtYWMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc2l0ZS10bWFjIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59L2dyb2ZmZXIvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvZHVwLWRlZi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllOGQyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2d6aXAgdXNlcyBnbnVsaWIsIHdob3NlIGhlYWRlciBjb25mbGljdCB3aXRoIGdsaWJjLiBUaGlzIHBhdGNoIHJlbmFtZSBzb21lIGZ1bmN0aW9uIHRvIGF2b2lkIGNvbmZsaWN0LgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9nemlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjM4LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjQ0LjAwMDAwMDAwMCArMDgwMAorQEAgLTE2MzcsNyArMTYzNyw3IEBACisgCX0KKyAgICAgICB9CisgCistICAgIGlmIChmdXRpbWVucyAob2ZkLCBvZm5hbWUsIHRpbWVzcGVjKSAhPSAwKQorKyAgICBpZiAoZnV0aW1lbnNfZ251bGliIChvZmQsIG9mbmFtZSwgdGltZXNwZWMpICE9IDApCisgICAgICAgeworIAlpbnQgZSA9IGVycm5vOworIAlXQVJOICgoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSkpOworSW5kZXg6IGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2xpYi91dGltZW5zLmMJMjAxMC0wOC0xMyAxMDozMzo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5jCTIwMTAtMDgtMTMgMTA6MzQ6MDIuMDAwMDAwMDAwICswODAwCitAQCAtNzUsNyArNzUsNyBAQAorICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIChzZXR0aW5nIGVycm5vKSBvbiBmYWlsdXJlLiAgKi8KKyAKKyBpbnQKKy1mdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisrZnV0aW1lbnNfZ251bGliIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKyAJICBjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworICAgLyogU29tZSBMaW51eC1iYXNlZCBORlMgY2xpZW50cyBhcmUgYnVnZ3ksIGFuZCBtaXNoYW5kbGUgdGltZSBzdGFtcHMKK0BAIC0xODUsNSArMTg1LDUgQEAKKyBpbnQKKyB1dGltZW5zIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworLSAgcmV0dXJuIGZ1dGltZW5zICgtMSwgZmlsZSwgdGltZXNwZWMpOworKyAgcmV0dXJuIGZ1dGltZW5zX2dudWxpYiAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKyB9CitJbmRleDogZ3ppcC0xLjMuMTIvbGliL3V0aW1lbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS4zLjEyLm9yaWcvbGliL3V0aW1lbnMuaAkyMDEwLTA4LTEzIDEwOjE0OjU3LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmgJMjAxMC0wOC0xMyAxMDoyMTo0NS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDMgKzEsMyBAQAorICNpbmNsdWRlIDx0aW1lLmg+CistaW50IGZ1dGltZW5zIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisraW50IGZ1dGltZW5zX2dudWxpYiAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworIGludCB1dGltZW5zIChjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9tNC1leHRlbnNpb25zLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJmNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorcmVtb3ZlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB0byBmaXggdGhlIGF1dG9jb25mIGVycm9yICJBQ19SRVFVSVJFOiBjaXJjdWxhcgorZGVwZW5kZW5jeSBvZiBBQ19HTlVfU09VUkNFIgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9tNC9leHRlbnNpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDgtMTYgMTQ6MTg6MTYuMDAwMDAwMDAwICswODAwCisrKysgZ3ppcC0xLjMuMTIvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA4LTE2IDE0OjIxOjU0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjYvd3JvbmctcGF0aC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NjNkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2ZpeCBNYWtlTWFrZXIgaXNzdWVzIHdpdGggdXNpbmcgd3JvbmcgU0hFTEwvR1JFUAorCitBIHNldCBvZiBzdWJzdGl0dXRpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbCB0YXJnZXQgc2NyaXB0cyB3aXRoIHNlZCBieQorcmVwbGFjaW5nIHNvbWUga2V5IHdvcmRzIHdpdGggdGhlIGRldGVjdGVkIHZhbHVlcyBhdCBjb25maWd1cmUgdGltZSwgdGhpcworaXMgZXhhY3RseSBub3QgY29tcGxpYW50IHdpdGggY3Jvc3MgY29tcGxpbmcsIGFuZCB3aWxsIGNhdXNlIG1pc3NpbmcgcGF0aAorZXJyb3JzIGF0IHJ1biB0aW1lIGxpa2U6CisiL3Vzci9iaW4vemdyZXA6IGxpbmUgMjMwOiAvdXNyL2Jpbi9ncmVwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorCitGaXhlZCBieSByZW1vdmluZyB1bm5lZWRlZCBzdWJzdGl0dXRpb24gYW5kIHVzaW5nIHJlYWwgcnVudGltZSBwYXRocworaW5zdGVhZC4KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3ppcC0xLjMuMTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLXVycE4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTExLTMwIDEwOjA2OjA5LjQwMjIzNDg3MSArMDgwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDoxMzo0Mi45NTIyMzYwMjUgKzA4MDAKK0BAIC04MSw5ICs4MSw4IEBAIGd6aXAuZG9jLmd6OiBnemlwLmRvYyAkKGJpbl9QUk9HUkFNUykKKyBTVUZGSVhFUyA9IC5pbgorIC5pbjoKKyAJJChBTV9WX0dFTilzZWQgXAorLQkJLWUgJ3N8L2Jpbi9zaHwkKFNIRUxMKXxnJyBcCisgCQktZSAnc3xbQF1iaW5kaXJAfCdcJyckKGJpbmRpciknXCcnfGcnIFwKKy0JCS1lICdzfFtAXUdSRVBAfCQoR1JFUCl8ZycgXAorKwkJLWUgJ3N8W0BdR1JFUEB8JChiYXNlX2JpbmRpcikvZ3JlcHxnJyBcCisgCQktZSAnc3xbQF1WRVJTSU9OQHwkKFZFUlNJT04pfGcnIFwKKyAJCSQoc3JjZGlyKS8kQC5pbiA+JEAtdCBcCisgCSAgJiYgY2htb2QgYSt4ICRALXQgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQ4MGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJTdGFuZGFyZCBHTlUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gIkdOVSBHemlwIGlzIGEgcG9wdWxhciBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0gb3JpZ2luYWxseSB3cml0dGVuIGJ5IEplYW4tbG91cCBHYWlsbHkgZm9yIHRoZSBHTlUgXAorcHJvamVjdC4gTWFyayBBZGxlciB3cm90ZSB0aGUgZGVjb21wcmVzc2lvbiBwYXJ0IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d6aXAvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorIyBjaGFuZ2UgdG8gR1BMdjMrIGluIDIwMDcvMDcuIFByZXZpb3VzIEdQTHYyIHZlcnNpb24gaXMgMS4zLjEyCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJHUkVQPSR7YmFzZV9iaW5kaXJ9L2dyZXAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIFJlbmFtZSBhbmQgbW92ZSBmaWxlcyBpbnRvIC9iaW4gKEZIUyksIHdoaWNoIGlzIHR5cGljYWwgcGxhY2UgZm9yIGd6aXAKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3VuemlwICR7RH0ke2Jhc2VfYmluZGlyfS9ndW56aXAKKwltdiAke0R9JHtiaW5kaXJ9L2d6aXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2d6aXAKKwltdiAke0R9JHtiaW5kaXJ9L3pjYXQgJHtEfSR7YmFzZV9iaW5kaXJ9L3pjYXQKKwltdiAke0R9JHtiaW5kaXJ9L3VuY29tcHJlc3MgJHtEfSR7YmFzZV9iaW5kaXJ9L3VuY29tcHJlc3MKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3VuemlwXSA9ICIke2Jhc2VfYmluZGlyfS9ndW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3ppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3ppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt6Y2F0XSA9ICIke2Jhc2VfYmluZGlyfS96Y2F0IgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuMy4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA2MjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtlbmRsaW5lPTIyO21kNT1jMDkzNGFkMTkwMGQ5MjdmODY1NTYxNTNkNGM3NmQyMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sencuaDtlbmRsaW5lPTE5O21kNT1jMjczZTA5YTAyZWRkOTgwMWNjNzRkMzk2ODMwNDllOSAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nemlwL2d6aXAtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL200LWV4dGVuc2lvbnMtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1cC1kZWYtZml4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjViYWMyZDIxODQwYWUwNzdlMDIxN2JjNWU0ODQ1YjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Y1NjViZTA1ZjdmM2QxYWZmMTE3YzAzMGViN2M3MzgzMDA1MTBiN2QwOThjZWRlYTc5NmNhOGU0Y2Q1ODdhZiIKKworUFIgPSAicjIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDdmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIGd6aXAuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC8ke0JQfS50YXIuZ3oiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGZpbGU6Ly93cm9uZy1wYXRoLWZpeC5wYXRjaCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3ppcC5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjA7bWQ1PTZlNDdjYWFhNjMwZTBjOGJmOWYxYmM4ZDk0YThlZDBlIgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnemlwLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzODYwM2NiMjg0M2JmNTY4MWZmNDFhYWIzYmNkNmEyMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5N2ViODNiNzYzZDllNWFkMzVmMzUxZmU1NTE3ZTZiNzE1MjFkN2FhYzdhY2YzZTNjYWNkYjZiMTQ5NmQ4ZjdlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2N2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciB2aWV3aW5nL21hbmlwdWxhdGluZyBJREUgZGlzayBkcml2ZS9kcml2ZXIgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImhkcGFybSBpcyBhIExpbnV4IHNoZWxsIHV0aWxpdHkgZm9yIHZpZXdpbmcgXAorYW5kIG1hbmlwdWxhdGluZyB2YXJpb3VzIElERSBkcml2ZSBhbmQgZHJpdmVyIHBhcmFtZXRlcnMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNFTlNFX3dpcGVyID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5UWFQ7bWQ1PTkxMGE4YTQyYzk2MmQyMzg2MTljNzVmZGI3OGJkYjI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWE4MmQ3YmEzYWRlOWU4ZWM5MDI3NDlkYjk4YzU5MmYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL0dQTHYyLnR4dDttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lwZXIvd2lwZXIuc2g7YmVnaW5saW5lPTc7ZW5kbGluZT0zMTttZDU9YjdiYzY0MmFkZGMxNTJlYTMwNzUwNWJmMWEyOTZmMDkiCisKKworUEFDS0FHRVMgPSsgIndpcGVyIgorCitGSUxFU193aXBlciA9ICIke2JpbmRpcn0vd2lwZXIuc2giCisKK1JERVBFTkRTX3dpcGVyID0gImJhc2ggZ2F3ayBzdGF0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9oZHBhcm0vJHtCUH0udGFyLmd6ICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIxM2VmZGJlNzQ3MWZhZDM0MDgxOTg5MThlMTY0MzU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlOTdiNGE3MWNiMDQxNDZmNTRjZjZmNjk3ODdlN2Y5N2RkZmRhOTgzNmRjODAzYjQ1OWQzYjNkZjNhNGZiZWUiCisKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9ImVjaG8iJworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaGRwYXJtIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hkcGFybV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hkcGFybSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfSAke0R9LyR7bWFuZGlyfS9tYW44ICR7RH0vJHtiaW5kaXJ9CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAnc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0nIGluc3RhbGwKKwljcCAke1N9L3dpcGVyL3dpcGVyLnNoICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY5MDczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpAQCAtMCwwICsxLDEyIEBACitERVNDUklQVElPTiA9ICJBIGNvbnNvbGUtb25seSBpbWFnZSB3aXRoIG1vcmUgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0gXAorZnVuY3Rpb25hbGl0eSBpbnN0YWxsZWQuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHNzaC1zZXJ2ZXItb3BlbnNzaCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICAke0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTH0gXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjM2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJBIGRldmVsb3BtZW50IGltYWdlIHRoYXQgYnVpbGRzIHRoZSBrZXJuZWwgYW5kIHBhY2thZ2VzIHRoYXQgYXJlIFwKK3NlbnNpdGl2ZSB0byBrZXJuZWwgdXBkYXRlcyBhbmQgdmVyc2lvbiBjaGFuZ2VzIgorCisjIENvdWxkIGFsc28gYmUgY29yZS1pbWFnZS1iYXNpYywgYnV0IHdlJ2xsIGtlZXAgdGhpcyBzbWFsbCBmb3Igbm93CityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0tFUk5FTF9ERVZfVVRJTFMgPz0gImRyb3BiZWFyIGNvbm5tYW4iCitLRVJORUxfREVWX1RPT0xTID89ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsIGtlcm5lbC1kZXZzcmMiCitLRVJORUxfREVWX01PRFVMRSA/PSAia2VybmVsLW1vZHVsZXMiCisKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAiJHtLRVJORUxfREVWX01PRFVMRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0tFUk5FTF9ERVZfVVRJTFN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtLRVJORUxfREVWX1RPT0xTfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisjIFdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIHRoaW5ncyBsaWtlIGtlcm5lbCBidWlsZHMsIGV0Yy4KK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgKz0gIisgMzAwMDAwMCIKKworIyBMZXQncyBkZWZpbmUgb3VyIG93biBzdWJzZXQgdG8gdGVzdCwgd2UgY2FuIGxhdGVyIGFkZCBhIG9uLXRhcmdldCBrZXJuZWwgYnVpbGQgZXZlbiEKK0RFRkFVTFRfVEVTVF9TVUlURVMgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgc2NwIGRhdGUgZG1lc2cgcGFyc2Vsb2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmRjOWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiBJdCBcCitjYW4gYmUgdXNlZCBmb3IgY3VzdG9taXphdGlvbiBhbmQgaW1wbGVtZW50YXRpb25zIHRoYXQgY29uZm9ybSB0byBMaW51eCBcCitTdGFuZGFyZCBCYXNlIChMU0IpLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2I2ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBMaW51eCBTdGFuZGFyZCBCYXNlIFwKKyhMU0IpIGltcGxlbWVudGF0aW9ucy4gSXQgaW5jbHVkZXMgdGhlIGZ1bGwgbWV0YS10b29sY2hhaW4sIHBsdXMgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ0b29scy1zZGsgZGV2LXBrZ3MgdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyIKKworSU1BR0VfSU5TVEFMTCArPSAia2VybmVsLWRldnNyYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjFjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgcGFja2FnZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gY29uZm9ybSBcCit0byB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSBzcGVjaWZpY2F0aW9uLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBzc2gtc2VydmVyLW9wZW5zc2ggaHdjb2RlY3MgcGFja2FnZS1tYW5hZ2VtZW50IgorCitJTUFHRV9JTlNUQUxMID0gIlwKKyAgICAke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAicGFtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzI2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKQEAgLTAsMCArMSwxOSBAQAorREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggY3VzdG9tIGluc3RhbGwgc2NyaXB0cywgXAorYWRkaW5nIGEgc2Vjb25kIHJvb3RmcywgdXNlZCBmb3IgdGVzdGluZy4iCisKKyMgdXNlIC10ZXN0ZnMgbGl2ZS1pbnN0YWxsIHNjcmlwdHMKK1BBQ0tBR0VfSU5TVEFMTCA9ICJpbml0cmFtZnMtbGl2ZS1ib290IGluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzIGluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKK0JBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODI5NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIKQEAgLTAsMCArMSwxOCBAQAorREVTQ1JJUFRJT04gPSAiQSBtYXN0ZXIgaW1hZ2UgdG8gYmUgZGVwbG95ZWQgb24gYSB0YXJnZXQgdXNlZnVsIGZvciB0ZXN0aW5nIG90aGVyIGltYWdlcyIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCBwYWNrYWdlLW1hbmFnZW1lbnQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCisjIHRoZSBkZXBsb3kgY29kZSByZXF1aXJlcyBiYXNoIGFuZAorIyBub3JtYWwgbGludXggdXRpbGl0aWVzIG5vdCBidXN5Ym94IG9uZXMKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKyAgICBiYXNoIGNvcmV1dGlscyB1dGlsLWxpbnV4IHRhciBnemlwIGJ6aXAyIGttb2QgXAorICAgIHB5dGhvbi1tb2R1bGVzIHB5dGhvbi1taXNjIFwKKyAgICBlMmZzcHJvZ3MgZTJmc3Byb2dzLW1rZTJmcyBwYXJ0ZWQgXAorICAgICIKKyMgd2UgbmVlZCBhIHBhcnRpY3VsYXIgaW5pdHJhbWZzIGZvciBsaXZlIGltYWdlcworIyB0aGF0IHB1bGxzIGN1c3RvbSBpbnN0YWxsIHNjcmlwdHMgd2hpY2ggdGFrZQorIyBjYXJlIG9mIHBhcnRpdGlvbmluZyBmb3IgdXMKK0lOSVRSRF9JTUFHRSA9ICJjb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNjNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkFuIGV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2UuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iCisKK0lNQUdFX0ZTVFlQRVMgPSAid2ljLmJ6MiIKK1JNX09MRF9JTUFHRSA9ICIxIgorCisjIGNvcmUtaW1hZ2UtbWluaW1hbCBpcyByZWZlcmVuY2VkIGluIC53a3MsIHNvIHdlIG5lZWQgaXRzIHJvb3RmcworIyB0byBiZSByZWFkeSBiZWZvcmUgb3VyIHJvb3RmcworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJjb3JlLWltYWdlLW1pbmltYWw6ZG9fcm9vdGZzIgorCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMjAwMCIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNkOGYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogRXhhbXBsZSBvZiBwYXJ0aXRpb25lZCBpbWFnZSB3aXRoIGNvbXBsZXggbGF5b3V0CisjIGxvbmctZGVzY3JpcHRpb246IFRoaXMgaW1hZ2UgY29udGFpbnMgYm9vdCBwYXJ0aXRpb24gYW5kIDMgcm9vdGZzIHBhcnRpdGlvbnMKKyMgY3JlYXRlZCBmcm9tIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgd2ljLWltYWdlLW1pbmltYWwgaW1hZ2UgcmVjaXBlcy4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvY29yZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPWNvcmUtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGNvcmUgLS1hbGlnbiAxMDI0CitwYXJ0IC9iYWNrdXAgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj13aWMtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGJhY2t1cCAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2MDllMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDVjNDdjZjUwNjFiODUyYzAyMTc4ZjAxZTIzNjkwYmZlMzhhOTlkOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNyBNYXIgMjAxMyAxMToyMTozNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFkZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgbGlibmZuZXRsaW5rCisKK1RoaXMgY2hhbmdlcyB0aGUgY29uZmlndXJlIGJlaGF2aW91ciBmcm9tIGF1dG9kZXRlY3RpbmcKK2ZvciBsaWJuZm5ldGxpbmsgdG8gaGF2aW5nIGFuIG9wdGlvbiB0byBkaXNhYmxlIGl0IGV4cGxpY2l0bHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmE2MTZhYi4uY2UyZDMxNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTMsNiArNTMsOSBAQCBBQ19BUkdfRU5BQkxFKFtsaWJpcHFdLAorIEFDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcj1QQVRIXSwKKyAJW1BhdGggdG8gdGhlIHBrZ2NvbmZpZyBkaXJlY3RvcnkgW1tMSUJESVIvcGtnY29uZmlnXV1dKSwKKyAJW3BrZ2NvbmZpZ2Rpcj0iJHdpdGh2YWwiXSwgW3BrZ2NvbmZpZ2Rpcj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKQorK0FDX0FSR19FTkFCTEUoW2xpYm5mbmV0bGlua10sCisrCUFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlibmZuZXRsaW5rXSwgW0RvIG5vdCB1c2UgbmV0ZmlsdGVyIG5ldGxpbmsgbGlicmFyeV0pLAorKwlbZW5hYmxlX2xpYm5mbmV0bGluaz0iJGVuYWJsZXZhbCJdLCBbZW5hYmxlX2xpYm5mbmV0bGluaz0ieWVzIl0pCisgCisgbGliaXB0Y19MREZMQUdTMj0iIjsKKyBBWF9DSEVDS19MSU5LRVJfRkxBR1MoWy1XbCwtLW5vLWFzLW5lZWRlZF0sCitAQCAtODksOSArOTIsMTEgQEAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MQVJHRUZJTEVdLCBbdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiID0gInllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREVWRUxdLCBbdGVzdCAiJGVuYWJsZV9kZXZlbCIgPSAieWVzIl0pCisgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MSUJJUFFdLCBbdGVzdCAiJGVuYWJsZV9saWJpcHEiID0gInllcyJdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFtsaWJuZm5ldGxpbmtdLCBbbGlibmZuZXRsaW5rID49IDEuMF0sCistCVtuZm5ldGxpbms9MV0sIFtuZm5ldGxpbms9MF0pCistQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCTkZORVRMSU5LXSwgW3Rlc3QgIiRuZm5ldGxpbmsiID0gMV0pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2xpYm5mbmV0bGluayIgPSAieHllcyJdLCBbCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbbGlibmZuZXRsaW5rXSwgW2xpYm5mbmV0bGluayA+PSAxLjBdKQorKyAgXSkKKysKKytBTV9DT05ESVRJT05BTChbSEFWRV9MSUJORk5FVExJTktdLCBbdGVzdCAieCRlbmFibGVfbGlibmZuZXRsaW5rIiA9ICJ4eWVzIl0pCisgCisgcmVndWxhcl9DRkxBR1M9Ii1XYWxsIC1XYWdncmVnYXRlLXJldHVybiAtV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKyAJLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdyZWR1bmRhbnQtZGVjbHMgLVdzaGFkb3cgLVdzdHJpY3QtcHJvdG90eXBlcyBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMDNkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSA3YzA3YjdmZDRmZGQ3ODQ0ZGQwMzJhZjgyMjMwNmYwOGU0NDIyYzM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo0NzoyOSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBmaXggYnVpbGQgd2l0aCBtdXNsCisKK0FkZCBuZWVkZWQgaGVhZGVycyB0aGV5IGFyZSBqdXN0IG5vdCBuZWVkZWQgZm9yIGdsaWJjNisgYnV0IGFsc28KK2ZvciBtdXNsCitEZWZpbmUgYWRkaXRpb25hbCBUQ09QVFMgaWYgbm90IHRoZXJlCisKK3VfaW5pdFggdHlwZXMgYXJlIGluIHN5cy90eXBlcy5oIGJlIGV4cGxpY2l0IGFib3V0IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKworIGluY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCAgICAgfCAxMiAtLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMgYi9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKK2luZGV4IDY4OTc4NTcuLjhhMTcwYjIgMTAwNjQ0CistLS0gYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKKysrKyBiL2V4dGVuc2lvbnMvbGlieHRfVENQT1BUU1RSSVAuYworQEAgLTEyLDYgKzEyLDIxIEBACisgI2lmbmRlZiBUQ1BPUFRfTUQ1U0lHCisgIwlkZWZpbmUgVENQT1BUX01ENVNJRyAxOQorICNlbmRpZgorKyNpZm5kZWYgVENQT1BUX01BWFNFRworKyMJZGVmaW5lIFRDUE9QVF9NQVhTRUcgMgorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1dJTkRPVworKyMJZGVmaW5lIFRDUE9QVF9XSU5ET1cgMworKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1NBQ0tfUEVSTUlUVEVECisrIwlkZWZpbmUgVENQT1BUX1NBQ0tfUEVSTUlUVEVEIDQKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9TQUNLCisrIwlkZWZpbmUgVENQT1BUX1NBQ0sgNQorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1RJTUVTVEFNUAorKyMJZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAgOAorKyNlbmRpZgorIAorIGVudW0geworIAlPX1NUUklQX09QVElPTiA9IDAsCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCitpbmRleCAxODg2MWZlLi5hNTk2M2U5IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCisrKysgYi9pbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmgKK0BAIC01LDcgKzUsNiBAQAorIAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKy0jaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA9PSAyCisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KK0BAIC0xMywxNSArMTIsNCBAQAorICNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2Vsc2UgLyogbGliYzUgKi8KKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSNpbmNsdWRlIDxsaW51eC9pcC5oPgorLSNpbmNsdWRlIDxsaW51eC9pbi5oPgorLSNpbmNsdWRlIDxsaW51eC9pZi5oPgorLSNpbmNsdWRlIDxsaW51eC9pY21wLmg+CistI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKy0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy0jaW5jbHVkZSA8bGludXgvaW42Lmg+CistI2VuZGlmCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKK2luZGV4IDU3ZmQ4MmEuLjQ4MDcyNDYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitAQCAtMTUsNiArMTUsNyBAQAorICNpZm5kZWYgX0lQVEFCTEVTX0gKKyAjZGVmaW5lIF9JUFRBQkxFU19ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIAorICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVlMjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDE5NTkzNDkxZjQzYjcwYzFhNzFjM2I5YjhmNGZmNGZkMTQ1MDAwMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjMgTWFyIDIwMTIgMTQ6Mjc6MjAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gdHlwZXMuaDogYWRkIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIGlmX3BhY2tldC5oCisKK1RoZSBpcHRhYmxlcyBsb2NhbCBsaW51eC90eXBlcy5oIG92ZXJyaWRlcyB0aGUga2VybmVsL3N5c3Jvb3QKK3R5cGVzLmguIEFzIHN1Y2gsIHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQKK3RvIGJ1aWxkIGFnYWluc3QgMy4yKyBrZXJuZWwgaGVhZGVycy4KKworaWZuZGVmIHByb3RlY3Rpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBkZWZpbmVzIHRvIGVuc3VyZSB0aGF0Citjb25maWd1cmF0aW9uIHRoYXQgYWxyZWFkeSBoYXZlIHRoZXNlIGRlZmluZXMgYXJlIHN0aWxsIGJ1aWxkYWJsZS4KKworVGhpcyBjb21taXQgaXMgdGVtcG9yYXJ5IHVudGlsIGEgbmV3IHZlcnNpb24gb2YgaXB0YWJsZXMgY2FuIGJlCit1c2VkIHRoYXQgY29udGFpbnMgdGhlIGRlZmluZXMuCisKK1RoaXMgaXMgc2ltaWxhciB0byB0aGUgY29tbWl0IGluIHRoZSBpcHRhYmxlcyBnaXQgcmVwb3NpdG9yeToKKworICBodHRwczovL2dpdC5uZXRmaWx0ZXIub3JnL2NnaS1iaW4vZ2l0d2ViLmNnaT9wPWlwdGFibGVzLmdpdDthPWNvbW1pdDtoPWRiZTc3Y2M5NzRjZWU2NTZlYWUzN2U3NTAzOWRkMWE0MTBhNDUzNWIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGUvbGludXgvdHlwZXMuaCB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAoraW5kZXggOGI0ODNjOC4uZWJmNjQzMiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCitAQCAtMzQsNSArMzQsMTUgQEAgdHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OworIHR5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fc3VtMTY7CisgdHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX193c3VtOworIAorKyNpZm5kZWYgX19hbGlnbmVkX3U2NAorKyNkZWZpbmUgX19hbGlnbmVkX3U2NCBfX3U2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKysjZW5kaWYKKysjaWZuZGVmIF9fYWxpZ25lZF9iZTY0CisrI2RlZmluZSBfX2FsaWduZWRfYmU2NCBfX2JlNjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisrI2VuZGlmCisrI2lmbmRlZiBfX2FsaWduZWRfbGU2NAorKyNkZWZpbmUgX19hbGlnbmVkX2xlNjQgX19sZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorKyNlbmRpZgorKworICNlbmRpZiAvKiAgX19BU1NFTUJMWV9fICovCisgI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjMDE3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcga2VybmVsIHBhY2tldCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiaXB0YWJsZXMgaXMgdGhlIHVzZXJzcGFjZSBjb21tYW5kIGxpbmUgcHJvZ3JhbSB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgY29udHJvbCBuZXR3b3JrIHBhY2tldCBcCitmaWx0ZXJpbmcgY29kZSBpbiBMaW51eC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubmV0ZmlsdGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaXB0YWJsZXMvaXB0YWJsZXMuYztiZWdpbmxpbmU9MTM7ZW5kbGluZT0yNTttZDU9YzVjZmZkMDk5NzQ1NThjZjI3ZDBmNzYzZGYyYTEyZGMiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUteC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtbmF0IFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtZGVmcmFnLWlwdjQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2sgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2staXB2NCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLW5mLW5hdCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdC1tYXNxdWVyYWRlIgorRklMRVNfJHtQTn0gPSsgIiR7bGliZGlyfS94dGFibGVzLyAke2RhdGFkaXJ9L3h0YWJsZXMiCitGSUxFU18ke1BOfS1kYmcgPSsgIiR7bGliZGlyfS94dGFibGVzLy5kZWJ1ZyIKKworU1JDX1VSSSA9ICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUzNmQwNDhjOGU4ZWVlYmNkOTc1N2QwODYzZWJiMGMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyMDA0YzY4MDIxZGE5YTU5OWZlZWQyN2Y2NWRlZmNmYjIyMTI4ZjdkYTJjMDUzMWMwZjc1ZGUwZjQ3OWQzZTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAiCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKKyMgbGlibmZuZXRsaW5rIHJlY2lwZSBpcyBpbiBtZXRhLW5ldHdvcmtpbmcgbGF5ZXIKK1BBQ0tBR0VDT05GSUdbbGlibmZuZXRsaW5rXSA9ICItLWVuYWJsZS1saWJuZm5ldGxpbmssLS1kaXNhYmxlLWxpYm5mbmV0bGluayxsaWJuZm5ldGxpbmsiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgUmVtb3ZlIHNvbWUgbGlidG9vbCBtNCBmaWxlcworCSMgS2VlcCBheF9jaGVja19saW5rZXJfZmxhZ3MubTQgd2hpY2ggYmVsb25ncyB0byBhdXRvY29uZi1hcmNoaXZlLgorCXJtIC1mIGxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I1NTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9NYWtlZmlsZQorKysrIGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCitAQCAtMTA2LDcgKzEwNiw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1JUFY0X1RBUkdFVFM9dHJhY2VwYXRoIHBpbmcgY2xvY2tkaWZmIHJkaXNjIGFycGluZyB0ZnRwZCByYXJwZAorK0lQVjRfVEFSR0VUUz10cmFjZXBhdGggcGluZyBjbG9ja2RpZmYgYXJwaW5nCisgSVBWNl9UQVJHRVRTPXRyYWNlcGF0aDYgdHJhY2Vyb3V0ZTYgcGluZzYKKyBUQVJHRVRTPSQoSVBWNF9UQVJHRVRTKSAkKElQVjZfVEFSR0VUUykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2IxODg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEyMTIyMS5vcmlnL3RyYWNlcGF0aC5jCisrKysgaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKK0BAIC0zNzAsOSArMzcwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCX0KKyAjZW5kaWYKKyAKKy0JaGUgPSBnZXRob3N0YnluYW1lKHApOworKwloZSA9IGdldGhvc3RieW5hbWUyKGFyZ3ZbMF0sIEFGX0lORVQpOworIAlpZiAoaGUgPT0gTlVMTCkgeworLQkJaGVycm9yKCJnZXRob3N0YnluYW1lIik7CisrCQloZXJyb3IoImdldGhvc3RieW5hbWUyIik7CisgCQlleGl0KDEpOworIAl9CisgCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvcGluZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9waW5nLmMKKysrKyBpcHV0aWxzLXMyMDEyMTIyMS9waW5nLmMKK0BAIC0yNzksNyArMjc5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2Vsc2UKKyAJCQlpZG4gPSB0YXJnZXQ7CisgI2VuZGlmCistCQkJaHAgPSBnZXRob3N0YnluYW1lKGlkbik7CisrCQkJaHAgPSBnZXRob3N0YnluYW1lMihpZG4sIEFGX0lORVQpOworIAkJCWlmICghaHApIHsKKyAJCQkJZnByaW50ZihzdGRlcnIsICJwaW5nOiB1bmtub3duIGhvc3QgJXNcbiIsIHRhcmdldCk7CisgCQkJCWV4aXQoMik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkODJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb20gNTY4ZTk5MGQzMGZjN2U5NDE2ZTBhNmY4Yzc0ZWE1MDEzOTIxZWFlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudmFuZGV2ZW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxNiBKYW4gMjAxMyAwMzoxMjoxNSArMDkwMAorU3ViamVjdDogW1BBVENIXSBwaW5nNjogRml4IGJ1aWxkIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3aXRoIGdudXRscy4KKworVGhlIHBpbmc2IGNvbW1hbmQgY2FuIHVzZSBlaXRoZXIgb3BlbnNzbCBvciBnbnV0bHMuLi4KK2FuZCB0aGUgTWFrZWZpbGUgaGFzIGEgYnVuY2ggb2Ygc2V0dXAgZm9yIGRlZmluaW5nIHdoaWNoIG9mIHRoZSB0d28gdG8gdXNlLgorCitVbmZvcnR1bmF0ZWx5LCB0aGUgZmluYWwgLUQgZGVmaW5lIG9uIHRoZSBjb21tYW5kbGluZSB0byBlbmFibGUgZ251dGxzCitpbnNpZGUgdGhlIHBpbmc2LmMgZmlsZSBkaWRuJ3QgYWN0dWFsbHkgbWFrZSBpdCBvbnRvIHRoZSBnY2MKK2NvbW1hbmRsaW5lLgorVGhpcyBwYXRjaCBhZGRzIHRoZSAkKERFRl9DUllQVE8pIE1ha2VmaWxlIHZhcmlhYmxlIHRvIGZpeCB0aGlzIGdhcC4KKworU2lnbmVkLW9mZi1ieTogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52YW5kZXZlbkBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGM2MmQ5ZGYuLjg5MjQ5ZjUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xNDksNyArMTQ5LDcgQEAgTElCX2Nsb2NrZGlmZiA9ICQoTElCX0NBUCkKKyBERUZfcGluZ19jb21tb24gPSAkKERFRl9DQVApICQoREVGX0lETikKKyBERUZfcGluZyAgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKQorIExJQl9waW5nICA9ICQoTElCX0NBUCkgJChMSUJfSUROKQorLURFRl9waW5nNiA9ICQoREVGX0NBUCkgJChERUZfSUROKSAkKERFRl9XSVRIT1VUX0lGQUREUlMpICQoREVGX0VOQUJMRV9QSU5HNl9SVEhEUikKKytERUZfcGluZzYgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKSAkKERFRl9FTkFCTEVfUElORzZfUlRIRFIpICQoREVGX0NSWVBUTykKKyBMSUJfcGluZzYgPSAkKExJQl9DQVApICQoTElCX0lETikgJChMSUJfUkVTT0xWKSAkKExJQl9DUllQVE8pCisgCisgcGluZzogcGluZ19jb21tb24ubworLS0gCisxLjcuMi41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJmOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZpeCBuc2dtbHMgcGF0aCBpc3N1ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK0luZGV4OiBpcHV0aWxzLXMyMDEwMTAwNi9kb2MvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEwMTAwNi5vcmlnL2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIwOjQyOjI3LjAwMDAwMDAwMCArMDgwMAorKysrIGlwdXRpbHMtczIwMTAxMDA2L2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIxOjAxOjUyLjAwMDAwMDAwMCArMDgwMAorQEAgLTI3LDEwICsyNywxNSBAQAorICMgZG9jYm9vazJtYW4gcHJvZHVjZXMgdXR0ZXJseSB1Z2x5IG91dHB1dCBhbmQgSSBkaWQgbm90IGZpbmQKKyAjIGFueSB3YXkgdG8gY3VzdG9taXplIHRoaXMgYnV0IGhhY2tpbmcgYmFja2VuZCBwZXJsIHNjcmlwdCBhIGxpdHRsZS4KKyAjIFdlbGwsIGhlbmNlLi4uCisrIyBuc2dtbHMgc2VlbXMgYXBwZW5kIHBhdGggdG8gc2VhcmNoIGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8gdGhlIHN5c2lkIHBhdGguCisrIyBlLmcuIGlmIGlucHV0IC4uL2luZGV4LmRiLCBpdCB3b3VsZCBzZWFyY2ggJHNlYXJjaF9kaXJlY3RvcnkvLi4vIHJhdGhlciB0aGFuCisrIyAkc2VhcmNoX2RpcmVjdG9yeSwgd2hpY2ggbGVhZHMgc2VhcmNoaW5nIGZhaWx1cmUuIEZpeGluZyBuc2dtbHMgcHJvYmFibHkKKysjIGludHJvZHVjZSBzb21lIHNpZGUgZWZmZWN0cywgc28gdXNlIHRoaXMgdWdseSBoYWNrOiBydW5uaW5nIG5zZ21scyBpbiBjdXJyZW50CisrIyBkaXJlY3RvcnksIGFuZCBydW5uaW5nIGRvY2Jvb2sybWFuIGluIHRtcCBkaXJlY3RvcnkuCisgCisgJChNQU5GSUxFUyk6IGluZGV4LmRiCisgCUAtbWtkaXIgdG1wLmRiMm1hbgorLQlAc2V0IC1lOyBjZCB0bXAuZGIybWFuOyBuc2dtbHMgLi4vJDwgfCBzZ21sc3BsIC4uL2RvY2Jvb2sybWFuLXNwZWMucGwgOwltdiAkQCAuLgorKwlAc2V0IC1lOyBuc2dtbHMgJDwgPnRtcC5kYjJtYW4vb3V0cHV0OyBjZCB0bXAuZGIybWFuOyBjYXQgb3V0cHV0IHwgc2dtbHNwbCAuLi9kb2Nib29rMm1hbi1zcGVjLnBsIDsJbXYgJEAgLi4KKyAJQC1ybSAtcmYgdG1wLmRiMm1hbgorIAorIGNsZWFuOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9pcHV0aWxzX3MyMDEyMTIyMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdhMzJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJOZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMiCitERVNDUklQVElPTiA9ICJVdGlsaXRpZXMgZm9yIHRoZSBJUCBwcm90b2NvbCwgaW5jbHVkaW5nIHRyYWNlcm91dGU2LCBcCit0cmFjZXBhdGgsIHRyYWNlcGF0aDYsIHBpbmcsIHBpbmc2IGFuZCBhcnBpbmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJCU0QgJiBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTM1O21kNT1mOWNlYjIwMTczM2U5YTZjZjhmMDA3NjZkZDI3OGQ4MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZXBhdGguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0wZWNlYTJiZjYwYmZmMmYzZDg0MDA5NmQ4NzY0N2YzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcnBpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1mZTg0MzAxYjVjMjY1NWM5NTBmOGI5MmEwNTdmYWZhNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZnRwZC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PTI4ODM0YmY4YTkxYTViOGE5Mjc1NWRiZWU3MDllZjk2ICIKKworREVQRU5EUyA9ICJnbnV0bHMgZG9jYm9vay11dGlscy1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgbGliY2FwIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi90YXJnZXRzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vbnNnbWxzLXBhdGgtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYwNzJhZWY2NDIwNTcyMGRkMTg5M2IzNzVlMTg0MTcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1MGY1NDlmYzViNjIwYzIzYzU5MjlhYTZkNTRiN2RkZmM3ZWUxY2IxZThlZmRjNWU4YmIyMWQ4ZDBjNTMxOWYiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9IC1EX0dOVV9TT1VSQ0UnIFZQQVRIPSIke1NUQUdJTkdfTElCRElSfToke1NUQUdJTkdfRElSX0hPU1R9LyR7YmFzZV9saWJkaXJ9IiBhbGwgbWFuCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJIyBTVUlEIHJvb3QgcHJvZ3JhbXMKKwlpbnN0YWxsIC1tIDQ1NTUgcGluZyAke0R9JHtiYXNlX2JpbmRpcn0vcGluZworCWluc3RhbGwgLW0gNDU1NSBwaW5nNiAke0R9JHtiYXNlX2JpbmRpcn0vcGluZzYKKwlpbnN0YWxsIC1tIDQ1NTUgdHJhY2Vyb3V0ZTYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCWluc3RhbGwgLW0gNDU1NSBjbG9ja2RpZmYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCSMgT3RoZXIgcHJvZ3JhbWdzCisJZm9yIGkgaW4gYXJwaW5nIHRyYWNlcGF0aCB0cmFjZXBhdGg2OyBkbworCSAgaW5zdGFsbCAtbSAwNzU1ICRpICR7RH0ke2Jhc2VfYmluZGlyfS8KKwlkb25lCisJIyBNYW51YWwgcGFnZXMgZm9yIHRoaW5ncyB3ZSBidWlsZCBwYWNrYWdlcyBmb3IKKwlmb3IgaSBpbiB0cmFjZXBhdGguOCB0cmFjZXJvdXRlNi44IHBpbmcuOCBhcnBpbmcuODsgZG8KKwkgIGluc3RhbGwgLW0gMDY0NCBkb2MvJGkgJHtEfSR7bWFuZGlyfS9tYW44LyB8fCB0cnVlCisJZG9uZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfS1waW5nID0gInBpbmciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZ10gPSAiJHtiYXNlX2JpbmRpcn0vcGluZyIKKworQUxURVJOQVRJVkVfJHtQTn0tcGluZzYgPSAicGluZzYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZzZdID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcGluZyAke1BOfS1waW5nNiAke1BOfS1hcnBpbmcgJHtQTn0tdHJhY2VwYXRoICR7UE59LXRyYWNlcGF0aDYgJHtQTn0tdHJhY2Vyb3V0ZTYgJHtQTn0tY2xvY2tkaWZmIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXBpbmcgJHtQTn0tcGluZzYgJHtQTn0tYXJwaW5nICR7UE59LXRyYWNlcGF0aCAke1BOfS10cmFjZXBhdGg2ICR7UE59LXRyYWNlcm91dGU2ICR7UE59LWNsb2NrZGlmZiIKKworRklMRVNfJHtQTn0JPSAiIgorRklMRVNfJHtQTn0tcGluZyA9ICIke2Jhc2VfYmluZGlyfS9waW5nLiR7QlBOfSIKK0ZJTEVTXyR7UE59LXBpbmc2ID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2LiR7QlBOfSIKK0ZJTEVTXyR7UE59LWFycGluZyA9ICIke2Jhc2VfYmluZGlyfS9hcnBpbmciCitGSUxFU18ke1BOfS10cmFjZXBhdGggPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2VwYXRoIgorRklMRVNfJHtQTn0tdHJhY2VwYXRoNiA9ICIke2Jhc2VfYmluZGlyfS90cmFjZXBhdGg2IgorRklMRVNfJHtQTn0tdHJhY2Vyb3V0ZTYJPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2Vyb3V0ZTYiCitGSUxFU18ke1BOfS1jbG9ja2RpZmYgPSAiJHtiYXNlX2JpbmRpcn0vY2xvY2tkaWZmIgorRklMRVNfJHtQTn0tZG9jCT0gIiR7bWFuZGlyfS9tYW44IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGVzcy9sZXNzXzQ3OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg5NTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUZXh0IGZpbGUgdmlld2VyIHNpbWlsYXIgdG8gbW9yZSIKK0RFU0NSSVBUSU9OID0gIkxlc3MgaXMgYSBwcm9ncmFtIHNpbWlsYXIgdG8gbW9yZSwgaS5lLiBhIHRlcm1pbmFsIFwKK2Jhc2VkIHByb2dyYW0gZm9yIHZpZXdpbmcgdGV4dCBmaWxlcyBhbmQgdGhlIG91dHB1dCBmcm9tIG90aGVyIFwKK3Byb2dyYW1zLiBMZXNzIG9mZmVycyBtYW55IGZlYXR1cmVzIGJleW9uZCB0aG9zZSB0aGF0IG1vcmUgZG9lcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdyZWVud29vZHNvZnR3YXJlLmNvbS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgKEdQTHYyKyAoPDwgNDE4KSwgR1BMdjMrICg+PSA0MTgpKSB8IGxlc3MKKyMgSW5jbHVkaW5nIGVtYWlsIGF1dGhvciBnaXZpbmcgcGVybWlzc2luZyB0byB1c2UgQlNECisjCisjIEZyb206IE1hcmsgTnVkZWxtYW4gPG1hcmtuQGdyZWVud29vZHNvZnR3YXJlLmNvbT4KKyMgVG86IEVsaXphYmV0aCBGbGFuYWdhbiA8ZWxpemFiZXRoLmZsYW5hZ2FuQGludGVsLmNvbQorIyBEYXRlOiAxMi8xOS8xMQorIworIyBIaSBFbGl6YWJldGgsCisjIFVzaW5nIGEgZ2VuZXJpYyBCU0QgbGljZW5zZSBmb3IgbGVzcyBpcyBmaW5lIHdpdGggbWUuCisjIFRoYW5rcywKKyMKKyMgLS1NYXJrCisjCisKK0xJQ0VOU0UgPSAiR1BMdjMrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRTttZDU9NDhjMjZhMzA3ZjkxYWY3MDBlMWYwMDU4NWYyMTVhYWYiCitERVBFTkRTID0gIm5jdXJzZXMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQ5ZjUxY2NmZTI2ODYwMDljNmNlOTQzZWViNGJiYWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWJmMDZjYjMwZWUyYTJiZDFmNzlmMzlhYTkxZTQ2NDQ0ZTdjYjE5YjQ4Yzk1YzQ5OTJmYTYzY2ZlNDUyN2E4MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAnYmluZGlyPSR7RH0ke2JpbmRpcn0nICdtYW5kaXI9JHtEfSR7bWFuZGlyfScgaW5zdGFsbAorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsZXNzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjQ0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2gKQEAgLTAsMCArMSw2MDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorQEAgLTAsMCArMSw3OCBAQAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQxCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ0CisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisrCisrI2RlZmluZSBpb19zeXNjYWxsMSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLGJ0eXBlIGIpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYikgXAorKwkJICAgICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKKyt0eXBlIGZuYW1lIChhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytyZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZykoZCk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpLCAiZCIgKF9fZCkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2UgX19hc21fXyAoIiVkNSIpID0gKGxvbmcpKGUpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSwgImQiIChfX2QpLCAiZCIgKF9fZSkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTEwLm9yaWcvc3JjL3N5c2NhbGwuaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLmgKK0BAIC0yOCw2ICsyOCwxMiBAQAorICNpbmNsdWRlICJzeXNjYWxsLXNwYXJjLmgiCisgI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyAjaW5jbHVkZSAic3lzY2FsbC1hcm02NC5oIgorKyNlbGlmIGRlZmluZWQoX19tNjhrX18pCisrI2luY2x1ZGUgInN5c2NhbGwtbTY4ay5oIgorKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisrI2luY2x1ZGUgInN5c2NhbGwtcGFyaXNjLmgiCisrI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKysjaW5jbHVkZSAic3lzY2FsbC1taXBzLmgiCisgI2Vsc2UKKyAjd2FybmluZyAidXNpbmcgZ2VuZXJpYyBzeXNjYWxsIG1ldGhvZCIKKyAjaW5jbHVkZSAic3lzY2FsbC1nZW5lcmljLmgiCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtMCwwICsxLDIyMyBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisrICogZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisrICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKysgKgorKyAqIENoYW5nZWQgc3lzdGVtIGNhbGxzIG1hY3JvcyBfc3lzY2FsbDUgLSBfc3lzY2FsbDcgdG8gcHVzaCBhcmdzIDUgdG8gNyBvbnRvCisrICogdGhlIHN0YWNrLiBSb2JpbiBGYXJpbmUgZm9yIEFDTiBTLkEsIENvcHlyaWdodCAoQykgMTk5NiBieSBBQ04gUy5BCisrICovCisrCisrI2lmbmRlZiBfTUlQU19TSU1fQUJJMzIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkkzMgkJCTEKKysjZGVmaW5lIF9NSVBTX1NJTV9OQUJJMzIJCTIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkk2NAkJCTMKKysjZW5kaWYKKysKKysjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorKworKy8qCisrICogTGludXggbzMyIHN0eWxlIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA0MDAwIHRvIDQ5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNDAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjQxKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyNDIpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyNDMpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjQ0KQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDI0NSkKKysKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworKworKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisrCisrLyoKKysgKiBMaW51eCA2NC1iaXQgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDUwMDAgdG8gNTk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk1MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCisrCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCisrCisrLyoKKysgKiBMaW51eCBOMzIgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDYwMDAgdG8gNjk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk2MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLworKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICUzXHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICI9ciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTRcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKTsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikKKysKKysvKgorKyAqIFVzaW5nIHRob3NlIG1lYW5zIHlvdXIgYnJhaW4gbmVlZHMgbW9yZSB0aGFuIGFuIG9pbCBjaGFuZ2UgOy0pCisrICovCisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImx3XHQkMiwgJTZcblx0IiBcCisrCSJzdWJ1XHQkMjksIDMyXG5cdCIgXAorKwkic3dcdCQyLCAxNigkMjkpXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSJhZGRpdVx0JDI5LCAzMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiaSIgKF9fTlJfIyNzbmFtZSksIFwKKysJICAibSIgKCh1bnNpZ25lZCBsb25nKWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KKysKKysjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkKKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlKSBcCisrdHlwZSBmbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTQgYXNtKCIkOCIpID0gKHVuc2lnbmVkIGxvbmcpIGU7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTZcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIityIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJyIiAoX19hNCksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZW5kaWYgLyogKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkgKi8KKysKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLXBhcmlzYy5oCitAQCAtMCwwICsxLDE0NiBAQAorKy8qCisrICogTGludXggc3lzdGVtIGNhbGwgbnVtYmVycy4KKysgKgorKyAqIENhcnkgQ291dGFudCBzYXlzIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIGFub3RoZXIgc3lzY2FsbCBnYXRld2F5CisrICogcGFnZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoIHRoZSBIUFVYIHNwYWNlLCBhbmQgSSB0aGluayBoZSdzIHJpZ2h0OgorKyAqIGl0IHdpbGwgd291bGQga2VlcCBhIGJyYW5jaCBvdXQgb2Ygb3VyIHN5c2NhbGwgZW50cnkgcGF0aCwgYXQgdGhlCisrICogdmVyeSBsZWFzdC4gIElmIHdlIGRlY2lkZSB0byBjaGFuZ2UgaXQgbGF0ZXIsIHdlIGNhbiBgYGp1c3QnJyB0d2VhaworKyAqIHRoZSBMSU5VWF9HQVRFV0FZX0FERFIgZGVmaW5lIGF0IHRoZSBib3R0b20gYW5kIG1ha2UgX19OUl9MaW51eCBiZQorKyAqIDEwMjQgb3Igc29tZXRoaW5nLiAgT2gsIGFuZCByZWNvbXBpbGUgbGliYy4gPSkKKysgKgorKyAqIDY0LWJpdCBIUFVYIGJpbmFyaWVzIGdldCB0aGUgc3lzY2FsbCBnYXRld2F5IGFkZHJlc3MgcGFzc2VkIGluIGEgcmVnaXN0ZXIKKysgKiBmcm9tIHRoZSBrZXJuZWwgYXQgc3RhcnR1cCwgd2hpY2ggc2VlbXMgYSBzYW5lIHN0cmF0ZWd5LgorKyAqLworKworKyNkZWZpbmUgX19OUl9MaW51eCAgICAgICAgICAgICAgICAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwICAgICAgICAgICAoX19OUl9MaW51eCArIDIxNSkKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAgICAgICAgIChfX05SX0xpbnV4ICsgMjE2KQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgICAgICAgKF9fTlJfTGludXggKyAyMTcpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOCkKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE5KQorKworKyNkZWZpbmUgU1lTX2lmeShzeXNjYWxsX25hbWUpICAgX19OUl8jI3N5c2NhbGxfbmFtZQorKworKy8qIEFzc3VtZSBhbGwgc3lzY2FsbHMgYXJlIGRvbmUgZnJvbSBQSUMgY29kZSBqdXN0IHRvIGJlCisrICogc2FmZS4gVGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB5b3UgbG9zZSBhIHJlZ2lzdGVyCisrICogYW5kIHNhdmUvcmVzdG9yZSByMTkgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKyNkZWZpbmUgUElDCisrCisrLyogRGVmaW5pdGlvbiB0YWtlbiBmcm9tIGdsaWJjIDIuMy4zCisrICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9zeXNkZXAuaAorKyAqLworKworKyNpZmRlZiBQSUMKKysvKiBXQVJOSU5HOiBDQU5OT1QgQkUgVVNFRCBJTiBBIE5PUCEgKi8KKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgICAgICAgY29weSAlJXIxOSwgJSVyNFxuIgorKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjQsICUlcjE5XG4iCisrIyBkZWZpbmUgS19VU0lOR19HUjQJIiVyNCIsCisrI2Vsc2UKKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgXG4iCisrIyBkZWZpbmUgS19MRFdfQVNNX1BJQwkiIFxuIgorKyMgZGVmaW5lIEtfVVNJTkdfR1I0CisrI2VuZGlmCisrCisrLyogR0NDIGhhcyB0byBiZSB3YXJuZWQgdGhhdCBhIHN5c2NhbGwgbWF5IGNsb2JiZXIgYWxsIHRoZSBBQkkKKysgICByZWdpc3RlcnMgbGlzdGVkIGFzICJjYWxsZXItc2F2ZXMiLCBzZWUgcGFnZSA4LCBUYWJsZSAyCisrICAgaW4gc2VjdGlvbiAyLjIuNiBvZiB0aGUgUEEtUklTQyBSVU4tVElNRSBhcmNoaXRlY3R1cmUKKysgICBkb2N1bWVudC4gSG93ZXZlciEgcjI4IGlzIHRoZSByZXN1bHQgYW5kIHdpbGwgY29uZmxpY3Qgd2l0aAorKyAgIHRoZSBjbG9iYmVyIGxpc3Qgc28gaXQgaXMgbGVmdCBvdXQuIEFsc28gdGhlIGlucHV0IGFyZ3VtZW50cworKyAgIHJlZ2lzdGVycyByMjAgLT4gcjI2IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgbGlzdCBzbyB0aGV5CisrICAgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5LiBBbHRob3VnaCByMTkgaXMgY2xvYmJlcmVkIGJ5IHRoZSBzeXNjYWxsCisrICAgd2UgY2Fubm90IHNheSB0aGlzIGJlY2F1c2UgaXQgd291bGQgdmlvbGF0ZSBBQkksIHRodXMgd2Ugc2F5CisrICAgcjQgaXMgY2xvYmJlcmVkIGFuZCB1c2UgdGhhdCByZWdpc3RlciB0byBzYXZlL3Jlc3RvcmUgcjE5CisrICAgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKworKyNkZWZpbmUgS19DQUxMX0NMT0JfUkVHUyAiJXIxIiwgIiVyMiIsIEtfVVNJTkdfR1I0IFwKKysJCQkgIiVyMjAiLCAiJXIyOSIsICIlcjMxIgorKworKyN1bmRlZiBLX0lOTElORV9TWVNDQUxMCisrI2RlZmluZSBLX0lOTElORV9TWVNDQUxMKG5hbWUsIG5yLCBhcmdzLi4uKQkoewkJCVwKKysJbG9uZyBfX3N5c19yZXM7CQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyBfX2FzbV9fKCJyMjgiKTsJCVwKKysJCUtfTE9BRF9BUkdTXyMjbnIoYXJncykJCQkJCVwKKysJCS8qIEZJWE1FOiBIQUNLIHN0dy9sZHcgcjE5IGFyb3VuZCBzeXNjYWxsICovCQlcCisrCQlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJXAorKwkJCUtfU1RXX0FTTV9QSUMJCQkJCVwKKysJCQkiCWJsZSAgMHgxMDAoJSVzcjIsICUlcjApXG4iCQlcCisrCQkJIglsZGkgJTEsICUlcjIwXG4iCQkJXAorKwkJCUtfTERXX0FTTV9QSUMJCQkJCVwKKysJCQk6ICI9ciIgKF9fcmVzKQkJCQkJXAorKwkJCTogImkiIChTWVNfaWZ5KG5hbWUpKSBLX0FTTV9BUkdTXyMjbnIJCVwKKysJCQk6ICJtZW1vcnkiLCBLX0NBTExfQ0xPQl9SRUdTIEtfQ0xPQl9BUkdTXyMjbnIJXAorKwkJKTsJCQkJCQkJXAorKwkJX19zeXNfcmVzID0gKGxvbmcpX19yZXM7CQkJCVwKKysJfQkJCQkJCQkJXAorKwlfX3N5c19yZXM7CQkJCQkJCVwKKyt9KQorKworKyNkZWZpbmUgS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18xKHIyNikJCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNiBfX2FzbV9fKCJyMjYiKSA9ICh1bnNpZ25lZCBsb25nKShyMjYpOyAgIFwKKysJS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18yKHIyNixyMjUpCQkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjUgX19hc21fXygicjI1IikgPSAodW5zaWduZWQgbG9uZykocjI1KTsgICBcCisrCUtfTE9BRF9BUkdTXzEocjI2KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI0IF9fYXNtX18oInIyNCIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNCk7ICAgXAorKwlLX0xPQURfQVJHU18yKHIyNixyMjUpCisrI2RlZmluZSBLX0xPQURfQVJHU180KHIyNixyMjUscjI0LHIyMykJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIzIF9fYXNtX18oInIyMyIpID0gKHVuc2lnbmVkIGxvbmcpKHIyMyk7ICAgXAorKwlLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMiBfX2FzbV9fKCJyMjIiKSA9ICh1bnNpZ25lZCBsb25nKShyMjIpOyAgIFwKKysJS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCisrI2RlZmluZSBLX0xPQURfQVJHU182KHIyNixyMjUscjI0LHIyMyxyMjIscjIxKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMSBfX2FzbV9fKCJyMjEiKSA9ICh1bnNpZ25lZCBsb25nKShyMjEpOyAgIFwKKysJS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQorKworKy8qIEV2ZW4gd2l0aCB6ZXJvIGFyZ3Mgd2UgdXNlIHIyMCBmb3IgdGhlIHN5c2NhbGwgbnVtYmVyICovCisrI2RlZmluZSBLX0FTTV9BUkdTXzAKKysjZGVmaW5lIEtfQVNNX0FSR1NfMSBLX0FTTV9BUkdTXzAsICJyIiAoX19yMjYpCisrI2RlZmluZSBLX0FTTV9BUkdTXzIgS19BU01fQVJHU18xLCAiciIgKF9fcjI1KQorKyNkZWZpbmUgS19BU01fQVJHU18zIEtfQVNNX0FSR1NfMiwgInIiIChfX3IyNCkKKysjZGVmaW5lIEtfQVNNX0FSR1NfNCBLX0FTTV9BUkdTXzMsICJyIiAoX19yMjMpCisrI2RlZmluZSBLX0FTTV9BUkdTXzUgS19BU01fQVJHU180LCAiciIgKF9fcjIyKQorKyNkZWZpbmUgS19BU01fQVJHU182IEtfQVNNX0FSR1NfNSwgInIiIChfX3IyMSkKKysKKysvKiBUaGUgcmVnaXN0ZXJzIG5vdCBsaXN0ZWQgYXMgaW5wdXRzIGJ1dCBjbG9iYmVyZWQgKi8KKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzYKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzUgS19DTE9CX0FSR1NfNiwgIiVyMjEiCisrI2RlZmluZSBLX0NMT0JfQVJHU180IEtfQ0xPQl9BUkdTXzUsICIlcjIyIgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMyBLX0NMT0JfQVJHU180LCAiJXIyMyIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzIgS19DTE9CX0FSR1NfMywgIiVyMjQiCisrI2RlZmluZSBLX0NMT0JfQVJHU18xIEtfQ0xPQl9BUkdTXzIsICIlcjI1IgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMCBLX0NMT0JfQVJHU18xLCAiJXIyNiIKKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSkJCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxKQkJCQkJCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDEsIGFyZzEpOwkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyKQkJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAyLCBhcmcxLCBhcmcyKTsJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMykJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAzLCBhcmcxLCBhcmcyLCBhcmczKTsJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwlcCisrfQorKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMTAub3JpZy9zcmMvc3lzY2FsbC1hcm0uaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCitAQCAtMTE0LDMgKzExNCwxMTkgQEAgdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMworICAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisgfQorIAorKy8qCisrICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKyAqCisrICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFJ1c3NlbGwgS2luZworKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKyAqCisrICogUGxlYXNlIGZvcndhcmQgX2FsbF8gY2hhbmdlcyB0byB0aGlzIGZpbGUgdG8gcm1rQGFybS5saW51eC5vcmcudWssCisrICogbm8gbWF0dGVyIHdoYXQgdGhlIGNoYW5nZSBpcy4gIFRoYW5rcyEKKysgKi8KKysKKysjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UJMHg5MDAwMDAKKysKKysjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJMAorKyNlbHNlCisrI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQlfX05SX09BQklfU1lTQ0FMTF9CQVNFCisrI2VuZGlmCisrCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX1NZU0NBTExfQkFTRSsyNDQpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NSkKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NykKKysKKysjZGVmaW5lIF9fc3lzMih4KSAjeAorKyNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQorKworKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCisrI2RlZmluZSBfX1NZU19SRUcobmFtZSkgcmVnaXN0ZXIgbG9uZyBfX3N5c3JlZyBfX2FzbV9fKCJyNyIpID0gX19OUl8jI25hbWU7CisrI2RlZmluZSBfX1NZU19SRUdfTElTVChyZWdzLi4uKSAiciIgKF9fc3lzcmVnKSAsICMjcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdDAiCisrI2Vsc2UKKysjZGVmaW5lIF9fU1lTX1JFRyhuYW1lKQorKyNkZWZpbmUgX19TWVNfUkVHX0xJU1QocmVncy4uLikgcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdCIgX19zeXMxKF9fTlJfIyNuYW1lKSAiIgorKyNlbmRpZgorKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxKQkJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEpIHsJCQkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApICkJCQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgewkJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSkgKQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMykgewkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMikgKQkJXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNClcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSB7CQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLCAiciIgKF9fcjMpICkgXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KSB7XAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3I0IF9fYXNtX18oInI0IikgPSAobG9uZylhcmc1OwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMiksCQlcCisrCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpICkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkOTYwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMDYub3JpZy9NYWtlZmlsZQkyMDA0LTAyLTI2IDA3OjI1OjEwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCTIwMDYtMTAtMTQgMDk6MTk6MDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNyArMTUsNyBAQAorIAlAJChNQUtFKSAtQyBzcmMKKyAKKyBpbnN0YWxsOgorLQlAJChNQUtFKSAtQyBzcmMgaW5zdGFsbCBwcmVmaXg9JChwcmVmaXgpIGluY2x1ZGVkaXI9JChpbmNsdWRlZGlyKSBsaWJkaXI9JChsaWJkaXIpCisrCUAkKE1BS0UpIC1DIHNyYyBpbnN0YWxsIHByZWZpeD0kKERFU1RESVIpJChwcmVmaXgpIGluY2x1ZGVkaXI9JChERVNURElSKSQoaW5jbHVkZWRpcikgbGliZGlyPSQoREVTVERJUikkKGxpYmRpcikKKyAKKyAKKyBjbGVhbjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb206IE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CitEYXRlOiBUdWUsIDI3IEphbiAyMDE1IDE0OjU5OjM1ICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEdlbmVyaWMgYXJjaCBkZWN0ZWN0aW9uIGZvciBwYWRkaW5nIGRlZmluZXMKKworV2hlbiBhdmFpbGFibGUgdXNlIHRoZSBHTlUgQyBkZWZpbmVzIGZvciBlbmRpYW4gYW5kIGJpdHdpZHRoIHRvCitkZXRlcm1pbmUgdGhlIHBhZGRpbmcgcmVxdWlyZWQuIFRoaXMgcmVkdWNlcyB0aGUgbmVlZCB0byBkZWZpbmUgdGhlCitwYWRkaW5nIHNlbGVjdGlvbiBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlLgorCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorU2lnbmVkLW9mZi1ieTogSmVmZiBNb3llciA8am1veWVyQHJlZGhhdC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBzcmMvbGliYWlvLmggfCAxNiArKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGliYWlvLmggYi9zcmMvbGliYWlvLmgKK2luZGV4IDEyMjMxNDYuLjRhNGUwZjUgMTAwNjQ0CistLS0gYS9zcmMvbGliYWlvLmgKKysrKyBiL3NyYy9saWJhaW8uaAorQEAgLTUyLDE0ICs1MiwxOCBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworIC8qIGxpdHRsZSBlbmRpYW4sIDMyIGJpdHMgKi8KKyAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19BUk1FQl9fKSkgfHwgXAorICAgICBkZWZpbmVkKF9fc2hfXykgfHwgZGVmaW5lZChfX2JmaW5fXykgfHwgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBcCistICAgIGRlZmluZWQoX19jcmlzX18pCisrICAgIGRlZmluZWQoX19jcmlzX18pIHx8IFwKKysgICAgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIFwKKysgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl4OyB1bnNpZ25lZCB5CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJeDsgdW5zaWduZWQgeQorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4OyB1bnNpZ25lZCB5CisgCisgLyogbGl0dGxlIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fICYmIF9fU0laRU9GX0xPTkdfXyA9PSA4KQorICNkZWZpbmUgUEFEREVEKHgsIHkpCXgsIHkKKyAjZGVmaW5lIFBBRERFRHB0cih4LCB5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC02Nyw3ICs3MSw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgLyogYmlnIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKyAgICAgICAoZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCx5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC03Niw3ICs4Miw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgI2VsaWYgZGVmaW5lZChfX1BQQ19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKSB8fCBcCisgICAgICAgKGRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX0FSTUVCX18pKSB8fCBcCisgICAgICAgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX202OGtfXykgfHwgXAorLSAgICAgIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19mcnZfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pCisrICAgICAgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX2Zydl9fKSB8fCBkZWZpbmVkKF9fYXZyMzJfXykgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgeTsgdW5zaWduZWQgbG9uZyB4CistLSAKKzIuMS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjg1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFBoaWwgU3RhdWIgPFBoaWwuU3RhdWJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLW1pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTA5Lm9yaWcvc3JjL3N5c2NhbGwtbWlwcy5oCisrKysgbGliYWlvLTAuMy4xMDkvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtNzYsNyArNzYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCitAQCAtMTAwLDcgKzEwMCw3IEBAIHR5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYykgXAorQEAgLTEyNSw3ICsxMjUsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCkgXAorQEAgLTE1MCw3ICsxNTAsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKQorQEAgLTE4Niw3ICsxODYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKSAqLworQEAgLTIxNiw3ICsyMTYsNyBAQCB0eXBlIGZuYW1lIChhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYyxkdHlwCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZjVhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUHJvcGVybHkgbG9hZCBhcmd1bWVudHMgNSBhbiA2IGZvciB4ODYtNjQgc3lzY2FsbAorVXNlIGFzbSAoInIxMCIpIGFuZCBhc20gKCJyOCIpIHRvIGxvYWQgYXJndW1lbnRzIDUgYW4gNiBmb3IgeDg2LTY0CitzeXNjYWxsIHNvIHRoYXQgaXQgd29ya3Mgd2l0aCBib3RoIHgzMiBhbmQgeDg2LTY0LgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDIKKworLS0tIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oLngzMgkyMDA5LTEwLTA5IDExOjE3OjAyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oCTIwMTEtMTItMDIgMDk6MDk6MDcuNTM3NjAzMjI0IC0wODAwCitAQCAtMSw4ICsxLDE4IEBACisrI2lmbmRlZiBfX05SX2lvX3NldHVwCisgI2RlZmluZSBfX05SX2lvX3NldHVwCQkyMDYKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZGVzdHJveQorICNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyMDcKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZ2V0ZXZlbnRzCisgI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyMDgKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fc3VibWl0CisgI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjA5CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2NhbmNlbAorICNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTIxMAorKyNlbmRpZgorIAorICNkZWZpbmUgX19zeXNjYWxsX2Nsb2JiZXIgInIxMSIsInJjeCIsIm1lbW9yeSIgCisgI2RlZmluZSBfX3N5c2NhbGwgInN5c2NhbGwiCitAQCAtNDIsMTAgKzUyLDExIEBAIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB0eXBlIGZuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorIHsJCQkJCQkJCQlcCisgbG9uZyBfX3JlczsJCQkJCQkJCVwKKy1fX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IiBfX3N5c2NhbGwJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNCBhc20gKCJyMTAiKSA9IChsb25nKSBhcmc0OwkJCQlcCisrX19hc21fXyB2b2xhdGlsZSAoX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpIDogX19zeXNjYWxsX2Nsb2JiZXIsInIxMCIgKTsgXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpKTsgXAorIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB9IAorIAorQEAgLTU0LDEwICs2NSwxMSBAQCByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgdHlwZSBmbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KQlcCisgewkJCQkJCQkJCVwKKyBsb25nIF9fcmVzOwkJCQkJCQkJXAorLV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU1LCUlcjEwIDsgbW92cSAlNiwlJXI4IDsgIiBfX3N5c2NhbGwJCVwKKytyZWdpc3RlciBsb25nIF9fYTQgYXNtICgicjEwIikgPSAobG9uZykgYXJnNDsJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNSBhc20gKCJyOCIpID0gKGxvbmcpIGFyZzU7CQkJCVwKKytfX2FzbV9fIHZvbGF0aWxlICggX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpLCJnIiAoKGxvbmcpKGFyZzUpKSA6CVwKKy0JX19zeXNjYWxsX2Nsb2JiZXIsInI4IiwicjEwIiApOwkJCQkJXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpLCJyIiAoX19hNSkpOwkJCVwKKyByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMjljZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBc3luY2hyb25vdXMgSS9PIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJBc3luY2hyb25vdXMgaW5wdXQvb3V0cHV0IGxpYnJhcnkgdGhhdCB1c2VzIHRoZSBrZXJuZWxzIG5hdGl2ZSBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9pby9haW8uaHRtbCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kODA0NWYzYjhmOTI5YzFjYjI5YTFlM2ZkNzM3YjQ5OSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGliYS9saWJhaW8vbGliYWlvXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDBfYXJjaGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmEzNTYwMmU0Mzc3ODM4M2UyZjQ5MDdhNGNhMzlhYjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTAxOTAyOGU2MzE3MjU3MjkzNzYyNTBlMzJiNDczMDEyZjdjYjY4ZTFmNzI3NWJmYzFiYmNkZDBmODc0NWY3ZSIKKworRVhUUkFfT0VNQUtFID0rICJwcmVmaXg9JHtwcmVmaXh9IGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSBsaWJkaXI9JHtsaWJkaXJ9IgorIyBOZWVkIGxpYmMgZm9yIHN0YWNrLXByb3RlY3RvcidzIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKSBib3VuY2UgZnVuY3Rpb24KK0xERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWxjIgorCitkb19jb25maWd1cmUgKCkgeworICAgIHNlZCAtaSAncyNMSU5LX0ZMQUdTPS4qI0xJTktfRkxBR1M9JChMREZMQUdTKSMnIHNyYy9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvMDAwMS1BZGQtQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDE1MSBAQAorRnJvbSA1OTM1NzE1NzcwNmQ0N2MzNjViMjIyNzczOWUxN2RhYmEzNjA3NTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxlc3NhbmRybyBHaGVkaW5pIDxhbGVzc2FuZHJvQGdoZWRpbmkubWU+CitEYXRlOiBTdW4sIDEgTWFyIDIwMTUgMTI6MDc6NDUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTIG9wdGlvbgorCitUaGlzIGZpeGVzIGEgZGlyZWN0b3J5IHRyYXZlcnNhbCBpbiB0aGUgY3BpbyB0b29sLgorCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bpby9ic2RjcGlvLjEgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKystCisgY3Bpby9jcGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmUuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgICAgICAgICAgfCAgICAzICsrKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgICAgfCAgIDE0ICsrKysrKysrKysrLS0tCisgbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrKysrKysKKyA2IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGlvL2JzZGNwaW8uMSBiL2NwaW8vYnNkY3Bpby4xCitpbmRleCBmOTY2YWEwLi5lNTI1NDZlIDEwMDY0NAorLS0tIGEvY3Bpby9ic2RjcGlvLjEKKysrKyBiL2NwaW8vYnNkY3Bpby4xCitAQCAtMTU2LDcgKzE1Niw4IEBAIFNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24uCisgLkl0IEZsIEZsIGluc2VjdXJlCisgKGkgYW5kIHAgbW9kZSBvbmx5KQorIERpc2FibGUgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBleHRyYWN0aW9uIG9yIGNvcHlpbmcuCistVGhpcyBhbGxvd3MgZXh0cmFjdGlvbiB2aWEgc3ltYm9saWMgbGlua3MgYW5kIHBhdGggbmFtZXMgY29udGFpbmluZworK1RoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzLCBhYnNvbHV0ZSBwYXRocywKKythbmQgcGF0aCBuYW1lcyBjb250YWluaW5nCisgLlNxIC4uCisgaW4gdGhlIG5hbWUuCisgLkl0IEZsIEogLCBGbCBGbCB4egorZGlmZiAtLWdpdCBhL2NwaW8vY3Bpby5jIGIvY3Bpby9jcGlvLmMKK2luZGV4IDBhY2RlMTEuLmIyNjdlOWIgMTAwNjQ0CistLS0gYS9jcGlvL2NwaW8uYworKysrIGIvY3Bpby9jcGlvLmMKK0BAIC0xNzEsNiArMTcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9OT19PVkVSV1JJVEVfTkVXRVI7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9QRVJNOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9GRkxBR1M7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX0FDTDsKK0BAIC0yNTYsNiArMjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJY2FzZSBPUFRJT05fSU5TRUNVUkU6CisgCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAkJCWJyZWFrOworIAkJY2FzZSAnTCc6IC8qIEdOVSBjcGlvICovCisgCQkJY3Bpby0+b3B0aW9uX2ZvbGxvd19saW5rcyA9IDE7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9saWJhcmNoaXZlL2FyY2hpdmUuaAoraW5kZXggMWYwZmMzOC4uZWY2MzVhYyAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmUuaAorQEAgLTY0OSw2ICs2NDksOCBAQCBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zZXRfcGFzc3BocmFzZV9jYWxsYmFjayhzdHJ1Y3QgYXJjaGl2ZSAqLAorIC8qIERlZmF1bHQ6IERvIG5vdCB1c2UgSEZTKyBjb21wcmVzc2lvbiBpZiBpdCB3YXMgbm90IGNvbXByZXNzZWQuICovCisgLyogVGhpcyBoYXMgbm8gZWZmZWN0IGV4Y2VwdCBvbiBNYWMgT1MgdjEwLjYgb3IgbGF0ZXIuICovCisgI2RlZmluZQlBUkNISVZFX0VYVFJBQ1RfSEZTX0NPTVBSRVNTSU9OX0ZPUkNFRAkoMHg4MDAwKQorKy8qIERlZmF1bHQ6IERvIG5vdCByZWplY3QgZW50cmllcyB3aXRoIGFic29sdXRlIHBhdGhzICovCisrI2RlZmluZSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyAoMHgxMDAwMCkKKyAKKyBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9leHRyYWN0KHN0cnVjdCBhcmNoaXZlICosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosCisgCQkgICAgIGludCBmbGFncyk7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKK2luZGV4IGZhOTI1Y2MuLmEyZTdhZmEgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCitAQCAtMTc3LDYgKzE3Nyw5IEBAIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyBOb3RlIHRoYXQgcGF0aHMgZW5kaW5nIGluCisgLlBhIC4uCisgYWx3YXlzIGNhdXNlIGFuIGVycm9yLCByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZy4KKysuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKKytSZWZ1c2UgdG8gZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorK1RoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyAuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NQQVJTRQorIFNjYW4gZGF0YSBmb3IgYmxvY2tzIG9mIE5VTCBieXRlcyBhbmQgdHJ5IHRvIHJlY3JlYXRlIHRoZW0gd2l0aCBob2xlcy4KKyBUaGlzIHJlc3VsdHMgaW4gc3BhcnNlIGZpbGVzLCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBhcmNoaXZlIGZvcm1hdAorZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCitpbmRleCBhYjNiZGFjLi5jMTI5MGViIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworQEAgLTI1MDksOCArMjUwOSw5IEBAIGNsZWFudXBfcGF0aG5hbWVfd2luKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCisgLyoKKyAgKiBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lLiAgSW4gcGFydGljdWxhciwgdGhpcyBzdHJpcHMgZHVwbGljYXRlCisgICogJy8nIGNoYXJhY3RlcnMsICcuJyBlbGVtZW50cywgYW5kIHRyYWlsaW5nICcvJy4gIEl0IGFsc28gcmFpc2VzIGFuCistICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJyBvciAoaWYgX1NFQ1VSRV9OT0RPVERPVCBpcworLSAqIHNldCkgYW55ICcuLicgaW4gdGhlIHBhdGguCisrICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJywgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKKysgKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoIG9yIChpZiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUworKyAqIGlzIHNldCkgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuCisgICovCisgc3RhdGljIGludAorIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKK0BAIC0yNTI5LDggKzI1MzAsMTUgQEAgY2xlYW51cF9wYXRobmFtZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQorIAljbGVhbnVwX3BhdGhuYW1lX3dpbihhKTsKKyAjZW5kaWYKKyAJLyogU2tpcCBsZWFkaW5nICcvJy4gKi8KKy0JaWYgKCpzcmMgPT0gJy8nKQorKwlpZiAoKnNyYyA9PSAnLycpIHsKKysJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTKSB7CisrCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKysJCQkgICAgICAgICAgICAgICAgICAiUGF0aCBpcyBhYnNvbHV0ZSIpOworKwkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworKwkJfQorKworIAkJc2VwYXJhdG9yID0gKnNyYysrOworKwl9CisgCisgCS8qIFNjYW4gdGhlIHBhdGhuYW1lIG9uZSBlbGVtZW50IGF0IGEgdGltZS4gKi8KKyAJZm9yICg7OykgeworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgYi9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jCitpbmRleCAzMWM1YmZkLi4yYzk0MjA2IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworKysrIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworQEAgLTE3OCw2ICsxNzgsMjkgQEAgREVGSU5FX1RFU1QodGVzdF93cml0ZV9kaXNrX3NlY3VyZSkKKyAJYXNzZXJ0KFNfSVNESVIoc3Quc3RfbW9kZSkpOworIAlhcmNoaXZlX2VudHJ5X2ZyZWUoYWUpOworIAorKwkvKgorKwkgKiBXaXRob3V0IHNlY3VyaXR5IGNoZWNrcywgd2Ugc2hvdWxkIGJlIGFibGUgdG8KKysJICogZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorKwkgKi8KKysJYXNzZXJ0KChhZSA9IGFyY2hpdmVfZW50cnlfbmV3KCkpICE9IE5VTEwpOworKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoYWUsICIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFyY2hpdmVfZW50cnlfc2V0X21vZGUoYWUsIFNfSUZSRUcgfCAwNzc3KTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlRXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFzc2VydCgwID09IHVubGluaygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpKTsKKysKKysJLyogQnV0IHdpdGggc2VjdXJpdHkgY2hlY2tzIGVuYWJsZWQsIHRoaXMgc2hvdWxkIGZhaWwuICovCisrCWFzc2VydChhcmNoaXZlX2VudHJ5X2NsZWFyKGFlKSAhPSBOVUxMKTsKKysJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7CisrCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfb3B0aW9ucyhhLCBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyk7CisrCWZhaWx1cmUoIkV4dHJhY3RpbmcgYW4gYWJzb2x1dGUgcGF0aCBzaG91bGQgZmFpbCBoZXJlLiIpOworKwlhc3NlcnRFcXVhbEludChBUkNISVZFX0ZBSUxFRCwgYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlTm90RXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCisgCWFzc2VydEVxdWFsSW50KEFSQ0hJVkVfT0ssIGFyY2hpdmVfd3JpdGVfZnJlZShhKSk7CisgCisgCS8qIFRlc3QgdGhlIGVudHJpZXMgb24gZGlzay4gKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNmY4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDJmNTVkNmJkMzA4ZWE2MTk3NTU1OGMyNDY5YWUzNDlkYmEyOTdlODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjIgRmViIDIwMTQgMTQ6MzU6NTkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IENWRS0yMDEzLTAyMTEKKworVGhpcyBwYXRjaCBjb21lcyBmcm9tOmh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29tbWl0LzIyNTMxNTQ1NTE0MDQzZTA0NjMzZTFjMDE1Yzc1NDBiOWRlOWRiZTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gc2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgdGhlIHBhdGNoIGJlY2F1c2Ugb2YgdXByZXYgb24gMjAxNDAyMjIKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK2luZGV4IGEzZDFhMzMuLmEzMjM1ODggMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK0BAIC02NzEsOCArNjcxLDEyIEBAIHN0YXRpYyBzc2l6ZV90CisgX2FyY2hpdmVfd3JpdGVfZGF0YShzdHJ1Y3QgYXJjaGl2ZSAqX2EsIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBzKQorIHsKKyAJc3RydWN0IGFyY2hpdmVfd3JpdGUgKmEgPSAoc3RydWN0IGFyY2hpdmVfd3JpdGUgKilfYTsKKysJY29uc3Qgc2l6ZV90IG1heF93cml0ZSA9IElOVF9NQVg7CisgCWFyY2hpdmVfY2hlY2tfbWFnaWMoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfV1JJVEVfTUFHSUMsCisgCSAgICBBUkNISVZFX1NUQVRFX0RBVEEsICJhcmNoaXZlX3dyaXRlX2RhdGEiKTsKKysJLyogSW4gcGFydGljdWxhciwgdGhpcyBjYXRjaGVzIGF0dGVtcHRzIHRvIHBhc3MgbmVnYXRpdmUgdmFsdWVzLiAqLworKwlpZiAocyA+IG1heF93cml0ZSkKKysJCXMgPSBtYXhfd3JpdGU7CisgCWFyY2hpdmVfY2xlYXJfZXJyb3IoJmEtPmFyY2hpdmUpOworIAlyZXR1cm4gKChhLT5mb3JtYXRfd3JpdGVfZGF0YSkoYSwgYnVmZiwgcykpOworIH0KKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDlhMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitBZGQgbWlzc2luZyBta2RpciBjYWxscyBzbyB0aGF0IG91dC1vZi10cmVlIGJ1aWxkcyB3b3JrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzUzNCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzZmEyZDIyLi41ZWNjYTUyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNTA4LDYgKzUwOCw3IEBAIGxpYmFyY2hpdmVfdGVzdF9MREFERD0gJChMVExJQklDT05WKQorICMgQnVpbGRpbmcgaXQgYXV0b21hdGljYWxseSBwcm92aWRlcyBhIHNhbml0eS1jaGVjayBvbiBsaWJhcmNoaXZlX3Rlc3RfU09VUkNFUworICMgYWJvdmUuCisgbGliYXJjaGl2ZS90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBsaWJhcmNoaXZlL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvbGliYXJjaGl2ZS90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGxpYmFyY2hpdmUvdGVzdC9saXN0LmgKKyAKKyBsaWJhcmNoaXZlX1RFU1RTX0VOVklST05NRU5UPSBMSUJBUkNISVZFX1RFU1RfRklMRVM9YGNkICQodG9wX3NyY2Rpcik7L2Jpbi9wd2RgL2xpYmFyY2hpdmUvdGVzdCBMUlpJUD1OT0NPTkZJRworQEAgLTgzNSw2ICs4MzYsNyBAQCBic2R0YXJfdGVzdF9DUFBGTEFHUz1cCisgCSQoUExBVEZPUk1DUFBGTEFHUykKKyAKKyB0YXIvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgdGFyL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvdGFyL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gdGFyL3Rlc3QvbGlzdC5oCisgCisgaWYgQlVJTERfQlNEVEFSCitAQCAtOTc1LDYgKzk3Nyw3IEBAIGJzZGNwaW9fdGVzdF9DUFBGTEFHUz0gXAorIGJzZGNwaW9fdGVzdF9MREFERD1saWJhcmNoaXZlX2ZlLmxhCisgCisgY3Bpby90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBjcGlvL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvY3Bpby90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGNwaW8vdGVzdC9saXN0LmgKKyAKKyBpZiBCVUlMRF9CU0RDUElPCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzOGJkMjk5Li43YmRiMDBjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDIsNiArMTAyLDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyBBQ19DSEVDS19UT09MKFtTVFJJUF0sW3N0cmlwXSkKKytBQ19QUk9HX01LRElSX1AKKyAKKyAjCisgIyBPcHRpb25zIGZvciBidWlsZGluZyBic2R0YXIuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmFmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVc2UgcGtnLWNvbmZpZyBmb3IgdGhlIGxpYnhtbDIgZGVwZW5kZW5jeSwgbm90IHRoZSAtY29uZmlnIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhcmNoaXZlLTMuMS4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTMtMDItMDkgMTc6MjM6MDMuMDAwMDAwMDAwICswMDAwCisrKysgbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAxNToyNjo0NS40NDY0OTkxMDggKzAwMDAKK0BAIC0zMjksMTAgKzMyOSwxMCBAQAorICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1leHBhdF0sIFtEb24ndCBidWlsZCBzdXBwb3J0IGZvciB4YXIgdGhyb3VnaCBleHBhdF0pKQorIAorIGlmIHRlc3QgIngkd2l0aF94bWwyIiAhPSAieG5vIjsgdGhlbgorLSAgQUNfUEFUSF9QUk9HKFtYTUwyX0NPTkZJR10sIFt4bWwyLWNvbmZpZ10sLCBbJHtQQVRIfV0pCistICBpZiB0ZXN0ICJ4JFhNTDJfQ09ORklHIiAhPSAieCI7IHRoZW4KKy0gICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IGAke1hNTDJfQ09ORklHfSAtLWNmbGFnc2AiCistICAgIExJQlM9IiR7TElCU30gYCR7WE1MMl9DT05GSUd9IC0tbGlic2AiCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhQS0dfWE1MMiwgW2xpYnhtbC0yLjBdLCwpCisrICBpZiB0ZXN0ICJ4JFBLR19YTUwyX0NGTEFHUyIgIT0gIngiOyB0aGVuCisrICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke1BLR19YTUwyX0NGTEFHU30iCisrICAgIExJQlM9IiR7TElCU30gJHtQS0dfWE1MMl9MSUJTfSIKKyAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcixbdHJ1ZV0sQUNfTVNHX0ZBSUxVUkUoTWlzc2luZyB4bWwyIGxpYnJhcnkpKQorICAgZWxzZQorICAgICBBQ19DSEVDS19MSUIoeG1sMix4bWxJbml0UGFyc2VyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhMzI1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJTdXBwb3J0IGZvciByZWFkaW5nIHZhcmlvdXMgYXJjaGl2ZSBmb3JtYXRzIgorREVTQ1JJUFRJT04gPSAiQyBsaWJyYXJ5IGFuZCBjb21tYW5kLWxpbmUgdG9vbHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyLCBjcGlvLCB6aXAsIElTTywgYW5kIG90aGVyIGFyY2hpdmUgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGliYXJjaGl2ZS5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRlM2ZmZDYwN2Q2Njg2YzZjYjJmNjMzOTQzNzA4NDEiCisKK0RFUEVORFMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/PSAibGlieG1sMiB6bGliIGJ6MiIKKworUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbGFyZ2VmaWxlIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsLCIKK1BBQ0tBR0VDT05GSUdbeGF0dHJdID0gIi0tZW5hYmxlLXhhdHRyLC0tZGlzYWJsZS14YXR0cixhdHRyLCIKK1BBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbYnoyXSA9ICItLXdpdGgtYnoybGliLC0td2l0aG91dC1iejJsaWIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLWx6bWFkZWMgLS13aXRoLWx6bWEsLS13aXRob3V0LWx6bWFkZWMgLS13aXRob3V0LWx6bWEseHosIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbGlieG1sMl0gPSAiLS13aXRoLXhtbDIsLS13aXRob3V0LXhtbDIsbGlieG1sMiwiCitQQUNLQUdFQ09ORklHW2V4cGF0XSA9ICItLXdpdGgtZXhwYXQsLS13aXRob3V0LWV4cGF0LGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbbHpvXSA9ICItLXdpdGgtbHpvMiwtLXdpdGhvdXQtbHpvMixsem8sIgorUEFDS0FHRUNPTkZJR1tuZXR0bGVdID0gIi0td2l0aC1uZXR0bGUsLS13aXRob3V0LW5ldHRsZSxuZXR0bGUsIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhcmNoaXZlLm9yZy9kb3dubG9hZHMvbGliYXJjaGl2ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmFkNWE1MDNmNjYzMjliYjlkMmY0MzA4YjVkZTk4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlYjg3ZWFjZDhmZTQ5ZThkOTBjOGZkYzE4OTgxMzAyM2NjYzMxOWM1ZTc1MmIwMWZiNmFkMGNjN2IyYzUzZDVlIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworQ1BQRkxBR1MgKz0gIi1JJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKKworZG9fY29uZmlndXJlW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFdlIGp1c3QgbmVlZCB0aGUgaGVhZGVycyBmb3Igc29tZSB0eXBlIGNvbnN0YW50cywgc28gbm8gbmVlZCB0bworCSMgYnVpbGQgYWxsIG9mIGUyZnNwcm9ncyBmb3IgdGhlIHRhcmdldAorCWNwIC1SICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9leHQyZnMgJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcy8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NzZiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIAorCithdXRvbWFrZSAxLjEyLnggaGFzIGRlcHJlY2F0ZWQgQU1fUFJPR19NS0RJUl9QICwgYW5kIHRocm93cyBhIHdhcm5pbmcgZm9yIHRoYXQsCithbmQgdGhlIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycyBiZWNhdXNlIG9mIHRoZSAtV2Vycm9yIHBhcmFtZXRlci4KKworVGhlc2UgQU1fUFJPR19NS0RJUl9QIGFyZSBjb21pbmcgZnJvbSBnZXR0ZXh0LCBhbmQgdGhlIGxhdGVzdCBnZXR0ZXh0IGNvZGUgaGFzIG5vdCAKK2VsaW1pbmF0ZWQgdGhlc2UgZGVwcmVjYXRlZCBtYWNyb3MgeWV0LiBTbyBkaXNhYmxlIHRoZSB0cmVhdG1lbnQgb2Ygd2FybmluZ3MKK2FzIGVycm9ycyB1bnRpbCBnZXR0ZXh0IGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1hY3Jvcy4KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMTAKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT1BZUklHSFQoW0NvcHlyaWdodCAoYykgMjAwMi0yMDExIFNpCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorLUFNX0lOSVRfQVVUT01BS0UoWzEuMTAgLVdhbGwgLVdlcnJvciAtV25vLW92ZXJyaWRlXSkKKytBTV9JTklUX0FVVE9NQUtFKFsxLjEwIC1XYWxsIC1Xbm8tb3ZlcnJpZGVdKQorIEFNX1NJTEVOVF9SVUxFUyhbeWVzXSkKKyAKKyAjIExpYnJhcnkgY29kZSBtb2RpZmllZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZJU0lPTisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmRkIGxpYmlkbi0xLjI2L2RvYy9NYWtlZmlsZS5hbSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0KKy0tLSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wOS0xOCAxMToyNTo0NS4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMi0wOCAwNzo0MToyNC41OTE0MzE0NjIgKzAyMDAKK0BAIC00OSwxNSArNDksOSBAQAorCisgIyBNYW4gcGFnZXMuCisKKy1kaXN0X21hbl9NQU5TID0gaWRuLjEgJChnZG9jX01BTlMpCisrZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKQorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChkaXN0X21hbl9NQU5TKQorCistaWRuLjE6ICQodG9wX3NyY2Rpcikvc3JjL2lkbi5jICQodG9wX3NyY2Rpcikvc3JjL2lkbi5nZ28gXAorLQkJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKy0JJChIRUxQMk1BTikgXAorLQkJLS1uYW1lPSJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgY29tbWFuZCBsaW5lIHRvb2wiIFwKKy0JCS0tb3V0cHV0PSRAICQodG9wX2J1aWxkZGlyKS9zcmMvaWRuJChFWEVFWFQpCistCisgIyBHRE9DCisKKyBHRE9DX0JJTiA9ICQoc3JjZGlyKS9nZG9jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGFmZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgYXV0b21ha2U6IHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycworfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiB3YXJuaW5nOiAnbGliaWRuLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMzQsNiArMzQsMTAgQEAgQUNfU1VCU1QoTFRfQ1VSUkVOVCwgMTcpCisgQUNfU1VCU1QoTFRfUkVWSVNJT04sIDcpCisgQUNfU1VCU1QoTFRfQUdFLCA2KQorIAorKyMgYXV0b21ha2UgMS4xMiBzZWVtcyB0byByZXF1aXJlIHRoaXMsIGJ1dCBhdXRvbWFrZSAxLjExIGRvZXNuJ3QgcmVjb2duaXplIGl0CisrbTRfcGF0dGVybl9hbGxvdyhbQU1fUFJPR19BUl0pCisrQU1fUFJPR19BUgorKworIEFDX1BST0dfQ0MKKyBnbF9FQVJMWQorIGxnbF9FQVJMWQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjFkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0xODttZDU9MTMzNmU4NDhjYTdiOGUyNTc2N2MzYzdlOGZhMzhhODkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTU2Yzg5ZTM1OTY1MmE3MWNkYTEyOGQ3NWYwZmZkYWM0IgorUFIgPSAicjEiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICJodHRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvbGliaWRuLyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNDBmMDEyYTQ1ZmViNTYxNjg4NTM5OThiYjg3YWQ0ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODkxMGMyYWQ2NjRiZGY0ZWVkMmMyZmZmODhlMjRmODg4MjYzNmVjOWQyNjY2OTM2NmZmMDNiNDY5YzA1YWUzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIHRoaXMgdmVyc2lvbiBvZiBsaWJpZG4gY29waWVzIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmcm9tIAorCSMgYXV0b2NvbmYgQ1ZTIGJlY2F1c2UgYXRtIHRoZSBhdXRvY29uZiBpdCB1c2VzIGlzIGEgYml0IG9sZAorCSMgbm93IHdpdGggY3Jvc3MgYXV0b3Rvb2wsIHRoYXQgbWFjcm8gaXMgYWxyZWFkeSB0aGVyZSBhbmQgdGhpcworCSMgbG9jYWwgZGVmaW5pdGlvbiBjYXVzZXMgY2lyY3VsYXIgZGVwZW5kZW5jeS4gQWN0dWFsbHkgQUNfR05VX1NPVVJDRQorCSMgaXMgaWRlbnRpY2FsIHRvIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4gU28gcmVtb3ZlIGFsbCBsb2NhbAorCSMgcmVmZXJlbmNlcyB0byB0aGUgbGF0dGVyIGhlcmUuCisJc2VkIC1pIC1lICIvQUNfUkVRVUlSRShcW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OUy9kIiAke1N9L2xpYi9nbC9tNC9nbnVsaWItY29tcC5tNAorCXJtIC1mICR7U30vbGliL2dsL200L2V4dGVuc2lvbnMubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vTGliaWRuLmRsbAorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNDc0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiKExHUEx2Mi4xKyB8IExHUEx2MykgJiBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZjRiZTQ3OTQwYTkxZWU2OTU1NmY1ZjcxZWVkNGFlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYyO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2lkbmEuaDtlbmRsaW5lPTIxO21kNT03YzBiMzgyOGQxYjE1MzY2M2JlOWEwNGFkNGY3OTc1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaWRuLmM7ZW5kbGluZT0yMDttZDU9ZjQyMzVmMmEyY2IyYjY1Nzg2YjI5NzlmYjNjZjdmYmYiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYmlkbi8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImIxN2VkYzg1NTFjZDMxY2M1ZjE0YzgyYTlkYWJmNThlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM5YjlmYzk0ZDc0MDgxYzE4NTc1N2IxMmUwODkxY2U1YTIyZGI1NTI2OGU3ZDFiYjI0NTMzZmY0NDMyZWIwNTMiCisKKyMgY29tbWFuZCB0b29sIGlzIHVuZGVyIEdQTHYzKywgd2hpbGUgbGliaWRuIGl0c2VsZiBpcyB1bmRlciBMR1BMdjIuMSsgb3IgTEdQTHYzCisjIHNvIHBhY2thZ2UgY29tbWFuZCBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZQorUEFDS0FHRVMgPSsgImlkbiIKK0ZJTEVTX2lkbiA9ICIke2JpbmRpcn0vKiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jc2hhcnAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc4NWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRml4IGEgcG9zc2libGUgb3ZlcmZsb3cgKHJlcG9ydGVkIGJ5IF9GT1JUSUZZX1NPVVJDRT0yKQorCitQb3J0ZWQgZnJvbSBHZW50b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJ0aXJwYy0wLjIuMS9zcmMvZ2V0cnBjcG9ydC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGlycGMtMC4yLjEub3JpZy9zcmMvZ2V0cnBjcG9ydC5jCisrKysgbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYworQEAgLTU0LDExICs1NCwxMSBAQCBnZXRycGNwb3J0KGhvc3QsIHByb2dudW0sIHZlcnNudW0sIHByb3RvCisgCisgCWlmICgoaHAgPSBnZXRob3N0YnluYW1lKGhvc3QpKSA9PSBOVUxMKQorIAkJcmV0dXJuICgwKTsKKysJaWYgKGhwLT5oX2xlbmd0aCAhPSBzaXplb2YoYWRkci5zaW5fYWRkci5zX2FkZHIpKQorKwkJcmV0dXJuICgwKTsKKyAJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworIAlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworIAlhZGRyLnNpbl9wb3J0ID0gIDA7CistCWlmIChocC0+aF9sZW5ndGggPiBzaXplb2YoYWRkcikpCistCSAgaHAtPmhfbGVuZ3RoID0gc2l6ZW9mKGFkZHIpOworIAltZW1jcHkoJmFkZHIuc2luX2FkZHIuc19hZGRyLCBocC0+aF9hZGRyLCAoc2l6ZV90KWhwLT5oX2xlbmd0aCk7CisgCS8qIEluY29uc2lzdGVudCBpbnRlcmZhY2VzIG5lZWQgY2FzdHMhIDotKCAqLworIAlyZXR1cm4gKHBtYXBfZ2V0cG9ydCgmYWRkciwgKHVfbG9uZylwcm9nbnVtLCAodV9sb25nKXZlcnNudW0sIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDMzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAordWNsaWJjIGRvZXMgbm90IHByb3ZpZGUgZGVzIGZ1bmN0aW9uYWxpdHkgdW5saWtlIGVnbGliYyBzbyBsZXRzIGRpc2FibGUgc3NsIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGlidGlycGMtMC4yLjMvc3JjL3JwY19zb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL3JwY19zb2MuYwkyMDEzLTAzLTEwIDE2OjAwOjUxLjM1NTI4MjE1MyAtMDcwMAorKysrIGxpYnRpcnBjLTAuMi4zL3NyYy9ycGNfc29jLmMJMjAxMy0wMy0xMCAxNjowMDo1MS43MDMyODIxNDggLTA3MDAKK0BAIC01MjAsNiArNTIwLDcgQEAKKyAJICAgIChyZXN1bHRwcm9jX3QpIHJwY193cmFwX2JjYXN0LCAidWRwIik7CisgfQorIAorKyNpZiAwCisgLyoKKyAgKiBDcmVhdGUgdGhlIGNsaWVudCBkZXMgYXV0aGVudGljYXRpb24gb2JqZWN0LiBPYnNvbGV0ZWQgYnkKKyAgKiBhdXRoZGVzX3NlY2NyZWF0ZSgpLgorQEAgLTU1MSw2ICs1NTIsNyBAQAorIAlkdW1teSA9IGF1dGhkZXNfc2VjY3JlYXRlKHNlcnZlcm5hbWUsIHdpbmRvdywgTlVMTCwgY2tleSk7CisgCXJldHVybiAoZHVtbXkpOworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIENyZWF0ZSBhIGNsaWVudCBoYW5kbGUgZm9yIGEgdW5peCBjb25uZWN0aW9uLiBPYnNvbGV0ZWQgYnkgY2xudF92Y19jcmVhdGUoKQorSW5kZXg6IGxpYnRpcnBjLTAuMi4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuMzU1MjgyMTUzIC0wNzAwCisrKysgbGlidGlycGMtMC4yLjMvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuNzAzMjgyMTQ4IC0wNzAwCitAQCAtNTAsNyArNTAsNyBAQAorICAgICAgICAgcnBjX2NhbGxtc2cuYyBycGNfZ2VuZXJpYy5jIHJwY19zb2MuYyBycGNiX2NsbnQuYyBycGNiX3Byb3QuYyBcCisgICAgICAgICBycGNiX3N0X3hkci5jIHN2Yy5jIHN2Y19hdXRoLmMgc3ZjX2RnLmMgc3ZjX2F1dGhfdW5peC5jIHN2Y19hdXRoX25vbmUuYyBcCisgICAgICAgICBzdmNfZ2VuZXJpYy5jIHN2Y19yYXcuYyBzdmNfcnVuLmMgc3ZjX3NpbXBsZS5jIHN2Y192Yy5jIGdldHBlZXJlaWQuYyBcCistICAgICAgICBhdXRoX3RpbWUuYyBhdXRoX2Rlcy5jIGF1dGhkZXNfcHJvdC5jCisrICAgICAgICBhdXRoX3RpbWUuYworIAorICMjIFhEUgorIGxpYnRpcnBjX2xhX1NPVVJDRVMgKz0geGRyLmMgeGRyX3JlYy5jIHhkcl9hcnJheS5jIHhkcl9mbG9hdC5jIHhkcl9tZW0uYyB4ZHJfcmVmZXJlbmNlLmMgeGRyX3N0ZGlvLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWRmMDAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiTGlidGlycGMgaXMgYSBwb3J0IG9mIFN1bnMgVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IHRvIExpbnV4IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnRpcnBjLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xODMwNzUmYXRpZD05MDM3ODQiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWY4MzVjY2U4ODUyNDgxZTRiMmJiYmRkMjNiNWU0N2YzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZXRuYW1lLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGlicnBjIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmJ6MjtuYW1lPWxpYnRpcnBjIFwKKyAgICAgICAgICAgJHtHRU5UT09fTUlSUk9SfS8ke0JQTn0tZ2xpYmMtbmZzLnRhci54ejtuYW1lPWdsaWJjLW5mcyBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2giCisKK1NSQ19VUklbbGlidGlycGMubWQ1c3VtXSA9ICI4Y2Q0MWE1ZWY1YTliNTBkMGZiNmFiYjk4YWYxNTM2OCIKK1NSQ19VUklbbGlidGlycGMuc2hhMjU2c3VtXSA9ICI2MmY5ZGU3YzJjODY4NmM1Njg3NTc3MzBlMWZlZjY2NTAyYTBlMDBkNmNhY2YzMzU0NmQwMjY3OTg0ZTAwMmRiIgorU1JDX1VSSVtnbGliYy1uZnMubWQ1c3VtXSA9ICI1YWU1MDBiOWQwYjZiNzJjYjg3NWJjMDQ5NDRiOTQ0NSIKK1NSQ19VUklbZ2xpYmMtbmZzLnNoYTI1NnN1bV0gPSAiMjY3N2NmZWRmNjI2ZjNmNWE4ZjZlNTA3YWVkNWJiOGY3OWE3NDUzYjU4OWQ2ODRkYmJjMDg2ZTc1NTE3MGQ4MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3NzYXBpIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIGNwIC1yICR7U30vLi4vdGlycGMgJHtTfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgY2hvd24gcm9vdDpyb290ICR7RH0ke3N5c2NvbmZkaXJ9L25ldGNvbmZpZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZWQ0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJ1c2VyIGFuZCBncm91cCBhY2NvdW50IGFkbWluaXN0cmF0aW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgbGlidXNlciBsaWJyYXJ5IGltcGxlbWVudHMgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBtYW5pcHVsYXRpbmcgYW5kIGFkbWluaXN0ZXJpbmcgdXNlciBcCithbmQgZ3JvdXAgYWNjb3VudHMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGlidXNlci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saWJ1c2VyL25ld3RpY2tldCIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXNlci5oO2VuZGxpbmU9MTk7bWQ1PTc2YjMwMWY2M2MzOWZhOTkyMDYyMzk1ZWZiZGM5NTU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NhbXBsZXMvdGVzdHVzZXIuYztlbmRsaW5lPTE5O21kNT0zYjg3ZmE2NjBmYTNmNGE2YmIzMWQ2MjRhZmUzMGJhMSIKKworU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGlidXNlci9saWJ1c2VyLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzZTVlNWM1NTFlOTlkYzUzMDJiNDBiODBiZDZkNGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1OGZmNGZhYmIwMWEyNTA0M2IxNDIxODVhMzNlZWVhOTYxMTA5ZGQ2MGQ0YjQwYjZhOWRmNGZhM2NhY2UyMGIiCisKK0RFUEVORFMgPSAicG9wdCBsaWJwYW0gZ2xpYi0yLjAgeHotbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGxpbnV4ZG9jLXRvb2xzLW5hdGl2ZSBweXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIgcGtnY29uZmlnCisKK0VYVFJBX09FTUFLRSA9ICJQWVRIT05fQ1BQRkxBR1M9LUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGYxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIGU2Y2NiYWI1ZDQyYjExMGFjNGY2Y2UxZjcyY2IxZTljY2JlNDQwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBUdWUsIDE2IEp1biAyMDE1IDE5OjAyOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1vZF9jZ2kgYnVmZmVycyBkYXRhIHdpdGhvdXQgYm91bmQgc28gZml4IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvaXNzdWVzLzEyNjRdCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKworVXBkYXRlIGNvbnRleHQgZm9yIDEuNC4zNi4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYgfCAgIDggKysKKyBzcmMvbW9kX2NnaS5jICAgICAgICAgICAgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mIGIvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCitpbmRleCA2MGIwYWUxLi45YzEwMWE3IDEwMDY0NAorLS0tIGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCisrKysgYi9kb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYKK0BAIC0zNzUsNiArMzc1LDE0IEBAIHNlcnZlci51cGxvYWQtZGlycyA9ICggIi92YXIvdG1wIiApCisgIyMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyMKKysjIworKyMjIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmhpZ2gtd2F0ZXJsZXZlbCAgICAgICAgPSAxMDI0MAorKyMjIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmxvdy13YXRlcmxldmVsICAgICAgICAgPSA1MTIwCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMjCitkaWZmIC0tZ2l0IGEvc3JjL21vZF9jZ2kuYyBiL3NyYy9tb2RfY2dpLmMKK2luZGV4IDAxYjE4NzcuLjdjNjdlYjUgMTAwNjQ0CistLS0gYS9zcmMvbW9kX2NnaS5jCisrKysgYi9zcmMvbW9kX2NnaS5jCitAQCAtMzgsNiArMzgsMTAgQEAKKyAKKyAjaW5jbHVkZSAidmVyc2lvbi5oIgorIAorKy8qIGZvciBvdXRwdXQgbG9ncyAqLworK2NoYXIgbXNnYnVmWzIwNDhdOworKworKworIGVudW0ge0VPTF9VTlNFVCwgRU9MX04sIEVPTF9STn07CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworQEAgLTUzLDkgKzU3LDE5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJc2l6ZV90IHNpemU7CisgfSBidWZmZXJfcGlkX3Q7CisgCisrc3RydWN0IGhhbmRsZXJfY3R4OworKworK3R5cGVkZWYgc3RydWN0IHsKKysJc3RydWN0IGhhbmRsZXJfY3R4ICoqaGN0eDsKKysJc2l6ZV90IHVzZWQ7CisrCXNpemVfdCBzaXplOworK30gYnVmZmVyX2N0eF90OworKworIHR5cGVkZWYgc3RydWN0IHsKKyAJYXJyYXkgKmNnaTsKKyAJdW5zaWduZWQgc2hvcnQgZXhlY3V0ZV94X29ubHk7CisrCXVuc2lnbmVkIGludCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCXVuc2lnbmVkIGludCBsb3dfd2F0ZXJsZXZlbDsgIC8qIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmICovCisgfSBwbHVnaW5fY29uZmlnOworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC02OCw5ICs4MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXBsdWdpbl9jb25maWcgKipjb25maWdfc3RvcmFnZTsKKyAKKyAJcGx1Z2luX2NvbmZpZyBjb25mOworKworKwlidWZmZXJfY3R4X3QgY2dpX2N0eDsKKyB9IHBsdWdpbl9kYXRhOworIAorLXR5cGVkZWYgc3RydWN0IHsKKyt0eXBlZGVmIHN0cnVjdCBoYW5kbGVyX2N0eCB7CisgCXBpZF90IHBpZDsKKyAJaW50IGZkOworIAlpbnQgZmRlX25keDsgLyogaW5kZXggaW50byB0aGUgZmQtZXZlbnQgYnVmZmVyICovCitAQCAtNzgsMTEgKzk0LDE2IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJY29ubmVjdGlvbiAqcmVtb3RlX2Nvbm47ICAvKiBkdW1iIHBvaW50ZXIgKi8KKyAJcGx1Z2luX2RhdGEgKnBsdWdpbl9kYXRhOyAvKiBkdW1iIHBvaW50ZXIgKi8KKyAKKysJaW50IHRocm90dGxpbmc7ICAgICAgICAvKiAxPXdhaXRpbmcgZm9yIHNlbmRfcmF3IGJ1ZmZlciB0byBkcmFpbiAqLworKwlvZmZfdCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCW9mZl90IGxvd193YXRlcmxldmVsOyAgLyogbWluaW11bSBieXRlcyBpbiBzZW5kX3JhdyB0byBkaXNhYmxlIGJhY2tvZmYgKi8KKysJb2ZmX3QgYnl0ZXNfaW5fYnVmZmVyOworKworIAlidWZmZXIgKnJlc3BvbnNlOworIAlidWZmZXIgKnJlc3BvbnNlX2hlYWRlcjsKKyB9IGhhbmRsZXJfY3R4OworIAorLXN0YXRpYyBoYW5kbGVyX2N0eCAqIGNnaV9oYW5kbGVyX2N0eF9pbml0KHZvaWQpIHsKKytzdGF0aWMgaGFuZGxlcl9jdHggKiBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwbHVnaW5fZGF0YSAqcCkgeworIAloYW5kbGVyX2N0eCAqaGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmhjdHgpKTsKKyAKKyAJZm9yY2VfYXNzZXJ0KGhjdHgpOworQEAgLTkwLDEzICsxMTEsMjYgQEAgc3RhdGljIGhhbmRsZXJfY3R4ICogY2dpX2hhbmRsZXJfY3R4X2luaXQodm9pZCkgeworIAloY3R4LT5yZXNwb25zZSA9IGJ1ZmZlcl9pbml0KCk7CisgCWhjdHgtPnJlc3BvbnNlX2hlYWRlciA9IGJ1ZmZlcl9pbml0KCk7CisgCisrCWhjdHgtPnRocm90dGxpbmcgPSAwOworKwloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPSAob2ZmX3QpcC0+Y29uZi5oaWdoX3dhdGVybGV2ZWwgKiAxMDI0OworKwloY3R4LT5sb3dfd2F0ZXJsZXZlbCAgPSAob2ZmX3QpcC0+Y29uZi5sb3dfd2F0ZXJsZXZlbCAgKiAxMDI0OworKwlpZiAoaGN0eC0+bG93X3dhdGVybGV2ZWwgPj0gaGN0eC0+aGlnaF93YXRlcmxldmVsKSB7CisrCSAgICBoY3R4LT5sb3dfd2F0ZXJsZXZlbCA9IGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCAqIDMgLyA0OyAvKiA3NSUgKi8KKysJfQorKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSAwOworKworIAlyZXR1cm4gaGN0eDsKKyB9CisgCistc3RhdGljIHZvaWQgY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGFuZGxlcl9jdHggKmhjdHgpIHsKKytzdGF0aWMgdm9pZCBjZ2lfaGFuZGxlcl9jdHhfZnJlZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJYnVmZmVyX2ZyZWUoaGN0eC0+cmVzcG9uc2UpOworIAlidWZmZXJfZnJlZShoY3R4LT5yZXNwb25zZV9oZWFkZXIpOworIAorKwkvKiB0byBhdm9pZCBjb25mdXNpb24gKi8KKysJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJICAgIGxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCAidW50aHJvdHRsZWQiKTsKKysJfQorKworIAlmcmVlKGhjdHgpOworIH0KKyAKK0BAIC0xNTQsNiArMTg4LDggQEAgU0VUREVGQVVMVFNfRlVOQyhtb2RfZmFzdGNnaV9zZXRfZGVmYXVsdHMpIHsKKyAJY29uZmlnX3ZhbHVlc190IGN2W10gPSB7CisgCQl7ICJjZ2kuYXNzaWduIiwgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19BUlJBWSwgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAwICovCisgCQl7ICJjZ2kuZXhlY3V0ZS14LW9ubHkiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19CT09MRUFOLCBUX0NPTkZJR19TQ09QRV9DT05ORUNUSU9OIH0sICAgICAvKiAxICovCisrCQl7ICJjZ2kuaGlnaC13YXRlcmxldmVsIiwgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAyICovCisrCQl7ICJjZ2kubG93LXdhdGVybGV2ZWwiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAzICovCisgCQl7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19VTlNFVCwgVF9DT05GSUdfU0NPUEVfVU5TRVR9CisgCX07CisgCitAQCAtMTY5LDkgKzIwNSwxMyBAQCBTRVRERUZBVUxUU19GVU5DKG1vZF9mYXN0Y2dpX3NldF9kZWZhdWx0cykgeworIAorIAkJcy0+Y2dpICAgID0gYXJyYXlfaW5pdCgpOworIAkJcy0+ZXhlY3V0ZV94X29ubHkgPSAwOworKwkJcy0+aGlnaF93YXRlcmxldmVsID0gMDsgLyogMCA9PSBkaXNhYmxlZCAqLworKwkJcy0+bG93X3dhdGVybGV2ZWwgID0gMDsKKyAKKyAJCWN2WzBdLmRlc3RpbmF0aW9uID0gcy0+Y2dpOworIAkJY3ZbMV0uZGVzdGluYXRpb24gPSAmKHMtPmV4ZWN1dGVfeF9vbmx5KTsKKysJCWN2WzJdLmRlc3RpbmF0aW9uID0gJihzLT5oaWdoX3dhdGVybGV2ZWwpOworKwkJY3ZbM10uZGVzdGluYXRpb24gPSAmKHMtPmxvd193YXRlcmxldmVsKTsKKyAKKyAJCXAtPmNvbmZpZ19zdG9yYWdlW2ldID0gczsKKyAKK0BAIC0xODQsNiArMjI0LDUxIEBAIFNFVERFRkFVTFRTX0ZVTkMobW9kX2Zhc3RjZ2lfc2V0X2RlZmF1bHRzKSB7CisgfQorIAorIAorK3N0YXRpYyB2b2lkIGNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNodW5rcXVldWUgKmNxID0gaGN0eC0+cmVtb3RlX2Nvbm4tPndyaXRlX3F1ZXVlOworKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSBjaHVua3F1ZXVlX2xlbmd0aChjcSkgLSBjaHVua3F1ZXVlX3dyaXR0ZW4oY3EpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBjZ2lfdGhyb3R0bGluZ19jb250cm9sKHNlcnZlciAqc3J2LCBoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoY3R4KTsKKysKKysjaWZkZWYgREVCVUcKKysJc3ByaW50Zihtc2didWYsICJ0aHJvdHRsaW5nPSVkLCBjaGFycz0lbGx1LCBoaWdoPSVsbHUsIGxvdz0lbGx1IiwKKysJCWhjdHgtPnRocm90dGxpbmcsIGhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCWhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCwgaGN0eC0+bG93X3dhdGVybGV2ZWwpOworKwlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJIihkZWJ1ZykgdGhyb3R0bGluZyBjb250cm9sLCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCisrCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCQlzcHJpbnRmKG1zZ2J1ZiwgInRocm90dGxpbmc7IGNoYXJzIGluIHF1ZXVlPSVsbHUsIgorKwkJCSIgbG93LXdhdGVybGV2ZWw9JWxsdSwgaGlnaC13YXRlcmxldmVsPSVsbHUiLAorKwkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQloY3R4LT5sb3dfd2F0ZXJsZXZlbCwgaGN0eC0+aGlnaF93YXRlcmxldmVsKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCBtc2didWYpOworKwkJaWYgKGhjdHgtPmJ5dGVzX2luX2J1ZmZlciA8PSBoY3R4LT5sb3dfd2F0ZXJsZXZlbCkgeworKwkJCWZkZXZlbnRfZXZlbnRfc2V0KHNydi0+ZXYsICYoaGN0eC0+ZmRlX25keCksIGhjdHgtPmZkLCBGREVWRU5UX0lOKTsKKysJCQloY3R4LT50aHJvdHRsaW5nID0gMDsKKysJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgInVudGhyb3R0bGVkIik7CisrCQl9CisrCX0gZWxzZSB7CisrCQlpZiAoaGN0eC0+aGlnaF93YXRlcmxldmVsICE9IDAgJiYKKysJCQloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPD0gaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisrCQkJZmRldmVudF9ldmVudF9kZWwoc3J2LT5ldiwgJihoY3R4LT5mZGVfbmR4KSwgaGN0eC0+ZmQpOworKwkJCWhjdHgtPnRocm90dGxpbmcgPSAxOworKwkJCXNwcmludGYobXNnYnVmLCAidGhyb3R0bGVkOyBjaGFycyBpbiBxdWV1ZT0lbGx1LCIKKysJCQkJIiBsb3ctd2F0ZXJsZXZlbD0lbGx1LCBoaWdoLXdhdGVybGV2ZWw9JWxsdSIsCisrCQkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQkJaGN0eC0+bG93X3dhdGVybGV2ZWwsIGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCk7CisrCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAicyIsIG1zZ2J1Zik7CisrCQl9CisrCX0KKyt9CisrCisrCisgc3RhdGljIGludCBjZ2lfcGlkX2FkZChzZXJ2ZXIgKnNydiwgcGx1Z2luX2RhdGEgKnAsIHBpZF90IHBpZCkgeworIAlpbnQgbSA9IC0xOworIAlzaXplX3QgaTsKK0BAIC0yMzAsNiArMzE1LDM5IEBAIHN0YXRpYyBpbnQgY2dpX3BpZF9kZWwoc2VydmVyICpzcnYsIHBsdWdpbl9kYXRhICpwLCBwaWRfdCBwaWQpIHsKKyAJcmV0dXJuIDA7CisgfQorIAorKworK3N0YXRpYyB2b2lkIGNnaV9jdHhfYWRkKHBsdWdpbl9kYXRhICpwLCBoYW5kbGVyX2N0eCAqaGN0eCkgeworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlpZiAoci0+c2l6ZSA9PSAwKSB7CisrCQlyLT5zaXplID0gMTY7CisrCQlyLT5oY3R4ID0gbWFsbG9jKHNpemVvZigqci0+aGN0eCkgKiByLT5zaXplKTsKKysJfSBlbHNlIGlmIChyLT51c2VkID09IHItPnNpemUpIHsKKysJCXItPnNpemUgKz0gMTY7CisrCQlyLT5oY3R4ID0gcmVhbGxvYyhyLT5oY3R4LCBzaXplb2YoKnItPmhjdHgpICogci0+c2l6ZSk7CisrCX0KKysKKysJci0+aGN0eFtyLT51c2VkKytdID0gaGN0eDsKKyt9CisrCisrc3RhdGljIHZvaWQgY2dpX2N0eF9kZWwocGx1Z2luX2RhdGEgKnAsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisrCXNpemVfdCBpOworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgci0+dXNlZDsgaSsrKSB7CisrCQlpZiAoci0+aGN0eFtpXSA9PSBoY3R4KSBicmVhazsKKysJfQorKworKwlpZiAoaSAhPSByLT51c2VkKSB7CisrCQkvKiBmb3VuZCAqLworKworKwkJaWYgKGkgIT0gci0+dXNlZCAtIDEpIHsKKysJCQlyLT5oY3R4W2ldID0gci0+aGN0eFtyLT51c2VkIC0gMV07CisrCQl9CisrCQlyLT51c2VkLS07CisrCX0KKyt9CisrCisgc3RhdGljIGludCBjZ2lfcmVzcG9uc2VfcGFyc2Uoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqaW4pIHsKKyAJY2hhciAqbnM7CisgCWNvbnN0IGNoYXIgKnM7CitAQCAtMzgwLDYgKzQ5OCwxNCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAKKyAJCWJ1ZmZlcl9jb21taXQoaGN0eC0+cmVzcG9uc2UsIG4pOworIAorKyNpZmRlZiBERUJVRworKwkJc3ByaW50Zihtc2didWYsICJuPSVkLCBieXRlc19vdXQ9JWxsdSwgYnl0ZXNfaW49JWxsdSIsIG4sCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19vdXQsCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbik7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJCSIoZGVidWcpIHJlYWQsIiwgbXNnYnVmKTsKKysjZW5kaWYKKysKKyAJCS8qIHNwbGl0IGhlYWRlciBmcm9tIGJvZHkgKi8KKyAKKyAJCWlmIChjb24tPmZpbGVfc3RhcnRlZCA9PSAwKSB7CitAQCAtNTAzLDcgKzYyOSwyMCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJCQl9CisgCQl9IGVsc2UgeworIAkJCWh0dHBfY2h1bmtfYXBwZW5kX2J1ZmZlcihzcnYsIGNvbiwgaGN0eC0+cmVzcG9uc2UpOworKyNpZmRlZiBERUJVRworKwkJCXNwcmludGYobXNnYnVmLCAibj0lZCwgYnl0ZXNfb3V0PSVsbHUsIGJ5dGVzX2luPSVsbHUsIGxpbWl0PSVsbHUiLCBuLAorKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbi0+d3JpdGVfcXVldWUtPmJ5dGVzX291dCwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbiwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloY3R4LT5oaWdoX3dhdGVybGV2ZWwpOworKwkJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywKKysJCQkJCSJzcyIsICIoZGVidWcpIGFwcGVuZCwiLCBtc2didWYpOworKyNlbmRpZgorIAkJCWpvYmxpc3RfYXBwZW5kKHNydiwgY29uKTsKKysKKysJCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCQkJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJCQkJcmV0dXJuIEZERVZFTlRfSEFORExFRF9OT1RfRklOSVNIRUQ7CisrCQkJfQorIAkJfQorIAorICNpZiAwCitAQCAtNTUzLDggKzY5Miw5IEBAIHN0YXRpYyBoYW5kbGVyX3QgY2dpX2Nvbm5lY3Rpb25fY2xvc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAorIAkvKiBpcyB0aGlzIGEgZ29vZCBpZGVhID8gKi8KKy0JY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CistCisrCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworKwkKKyAJLyogaWYgd2FpdHBpZCBoYXNuJ3QgYmVlbiBjYWxsZWQgYnkgcmVzcG9uc2UuYyB5ZXQsIGRvIGl0IGhlcmUgKi8KKyAJaWYgKHBpZCkgeworIAkJLyogY2hlY2sgaWYgdGhlIENHSS1zY3JpcHQgaXMgYWxyZWFkeSBnb25lICovCitAQCAtMTEwNSw3ICsxMjQ1LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAJCWNvbi0+bW9kZSA9IHAtPmlkOworIAkJYnVmZmVyX3Jlc2V0KGNvbi0+cGh5c2ljYWwucGF0aCk7CisgCistCQloY3R4ID0gY2dpX2hhbmRsZXJfY3R4X2luaXQoKTsKKysJCWhjdHggPSBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwKTsKKysJCWNnaV9jdHhfYWRkKHAsIGhjdHgpOworIAorIAkJaGN0eC0+cmVtb3RlX2Nvbm4gPSBjb247CisgCQloY3R4LT5wbHVnaW5fZGF0YSA9IHA7CitAQCAtMTExNCw2ICsxMjU1LDExIEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCQloY3R4LT5mZGVfbmR4ID0gLTE7CisgCisgCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gaGN0eDsKKysjaWZkZWYgREVCVUcKKysJCXNwcmludGYobXNnYnVmLCAiaGN0eD0lcCwgY29uPSVwIiwgKHZvaWQqKWhjdHgsICh2b2lkKiljb24pOworKwkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCQkiKGRlYnVnKSBoY3R4IGdlbmVyYXRlZCwgIiwgbXNnYnVmKTsKKysjZW5kaWYKKyAKKyAJCWZkZXZlbnRfcmVnaXN0ZXIoc3J2LT5ldiwgaGN0eC0+ZmQsIGNnaV9oYW5kbGVfZmRldmVudCwgaGN0eCk7CisgCQlmZGV2ZW50X2V2ZW50X3NldChzcnYtPmV2LCAmKGhjdHgtPmZkZV9uZHgpLCBoY3R4LT5mZCwgRkRFVkVOVF9JTik7CitAQCAtMTEyOCw3ICsxMjc0LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAKKyAJCQljbG9zZShoY3R4LT5mZCk7CisgCistCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CisrCQkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gTlVMTDsKKyAKK0BAIC0xMTUzLDYgKzEzMDAsOCBAQCBzdGF0aWMgaW50IG1vZF9jZ2lfcGF0Y2hfY29ubmVjdGlvbihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcAorIAorIAlQQVRDSChjZ2kpOworIAlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCVBBVENIKGhpZ2hfd2F0ZXJsZXZlbCk7CisrCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAKKyAJLyogc2tpcCB0aGUgZmlyc3QsIHRoZSBnbG9iYWwgY29udGV4dCAqLworIAlmb3IgKGkgPSAxOyBpIDwgc3J2LT5jb25maWdfY29udGV4dC0+dXNlZDsgaSsrKSB7CitAQCAtMTE3MCw2ICsxMzE5LDEwIEBAIHN0YXRpYyBpbnQgbW9kX2NnaV9wYXRjaF9jb25uZWN0aW9uKHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwCisgCQkJCVBBVENIKGNnaSk7CisgCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5leGVjdXRlLXgtb25seSIpKSkgeworIAkJCQlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5oaWdoLXdhdGVybGV2ZWwiKSkpIHsKKysJCQkJUEFUQ0goaGlnaF93YXRlcmxldmVsKTsKKysJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9pc19lcXVhbF9zdHJpbmcoZHUtPmtleSwgQ09OU1RfU1RSX0xFTigiY2dpLmxvdy13YXRlcmxldmVsIikpKSB7CisrCQkJCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAJCQl9CisgCQl9CisgCX0KK0BAIC0xMjIyLDYgKzEzNzUsMjEgQEAgVVJJSEFORExFUl9GVU5DKGNnaV9pc19oYW5kbGVkKSB7CisgVFJJR0dFUl9GVU5DKGNnaV90cmlnZ2VyKSB7CisgCXBsdWdpbl9kYXRhICpwID0gcF9kOworIAlzaXplX3QgbmR4OworKworKwlmb3IgKG5keCA9IDA7IG5keCA8IHAtPmNnaV9jdHgudXNlZDsgbmR4KyspIHsKKysJCWhhbmRsZXJfY3R4ICpoY3R4ID0gcC0+Y2dpX2N0eC5oY3R4W25keF07CisrI2lmZGVmIERFQlVHCisrCQljb25uZWN0aW9uICpjb24gPSBoY3R4LT5yZW1vdGVfY29ubjsKKysJCisrCQlzcHJpbnRmKG1zZ2J1ZiwgImhjdHg9JXAsIGNvbj0lcCwgYnl0ZXNfaW5fYnVmZmVyPSVsbHUiLAorKwkJCSh2b2lkKiloY3R4LCAodm9pZCopY29uLAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInNzIiwKKysJCQkJIihkZWJ1ZykgZm91bmQgdXNpbmcgY3R4LCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCX0KKysKKyAJLyogdGhlIHRyaWdnZXIgaGFuZGxlIG9ubHkgY2FyZXMgYWJvdXQgbG9uZWx5IFBJRCB3aGljaCB3ZSBoYXZlIHRvIHdhaXQgZm9yICovCisgI2lmbmRlZiBfX1dJTjMyCisgCitAQCAtMTMzMCw3ICsxNDk4LDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCitAQCAtMTM2Miw3ICsxNTMxLDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCQlyZXR1cm4gSEFORExFUl9GSU5JU0hFRDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2luZGV4Lmh0bWwubGlnaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmMWMzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkCkBAIC0wLDAgKzEgQEAKKzxodG1sPjxib2R5PjxoMT5JdCB3b3JrcyE8L2gxPjwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4OWE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9saWdodHRwZAorTkFNRT1saWdodHRwZAorREVTQz0iTGlnaHR0cGQgV2ViIFNlcnZlciIKK09QVFM9Ii1mIC9ldGMvbGlnaHR0cGQuY29uZiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwlzbGVlcCAxCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODQwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgpAQCAtMCwwICsxLDMzMSBAQAorIyBsaWdodHRwZCBjb25maWd1cmF0aW9uIGZpbGUKKyMKKyMgdXNlIGl0IGFzIGEgYmFzZSBmb3IgbGlnaHR0cGQgMS4wLjAgYW5kIGFib3ZlCisjCisjICRJZDogbGlnaHR0cGQuY29uZix2IDEuNyAyMDA0LzExLzAzIDIyOjI2OjA1IHdlaWdvbiBFeHAgJAorCisjIyMjIyMjIyMjIyMgT3B0aW9ucyB5b3UgcmVhbGx5IGhhdmUgdG8gdGFrZSBjYXJlIG9mICMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIG1vZHVsZXMgdG8gbG9hZAorIyBhdCBsZWFzdCBtb2RfYWNjZXNzIGFuZCBtb2RfYWNjZXNzbG9nIHNob3VsZCBiZSBsb2FkZWQKKyMgYWxsIG90aGVyIG1vZHVsZSBzaG91bGQgb25seSBiZSBsb2FkZWQgaWYgcmVhbGx5IG5lY2Nlc2FyeQorIyAtIHNhdmVzIHNvbWUgdGltZQorIyAtIHNhdmVzIG1lbW9yeQorc2VydmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3Jld3JpdGUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3JlZGlyZWN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWNjZXNzIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9jbWwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3RyaWdnZXJfYjRfZGwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2F1dGgiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3N0YXR1cyIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2V0ZW52IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9mYXN0Y2dpIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9wcm94eSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2ltcGxlX3Zob3N0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ldmhvc3QiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3VzZXJkaXIiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NnaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY29tcHJlc3MiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NzaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfdXNlcnRyYWNrIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9leHBpcmUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NlY2Rvd25sb2FkIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ycmR0b29sIiwKKyMJCQkJIm1vZF93ZWJkYXYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2FjY2Vzc2xvZyIgKQorCisjIyBhIHN0YXRpYyBkb2N1bWVudC1yb290LCBmb3IgdmlydHVhbC1ob3N0aW5nIHRha2UgbG9vayBhdCB0aGUKKyMjIHNlcnZlci52aXJ0dWFsLSogb3B0aW9ucworc2VydmVyLmRvY3VtZW50LXJvb3QgICAgICAgID0gIi93d3cvcGFnZXMvIgorCisjIyB3aGVyZSB0byBzZW5kIGVycm9yLW1lc3NhZ2VzIHRvCitzZXJ2ZXIuZXJyb3Jsb2cgICAgICAgICAgICAgPSAiL3d3dy9sb2dzL2xpZ2h0dHBkLmVycm9yLmxvZyIKKworIyBmaWxlcyB0byBjaGVjayBmb3IgaWYgLi4uLyBpcyByZXF1ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImluZGV4LnBocCIsICJpbmRleC5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQorCisjIyBzZXQgdGhlIGV2ZW50LWhhbmRsZXIgKHJlYWQgdGhlIHBlcmZvcm1hbmNlIHNlY3Rpb24gaW4gdGhlIG1hbnVhbCkKKyMgc2VydmVyLmV2ZW50LWhhbmRsZXIgPSAiZnJlZWJzZC1rcXVldWUiICMgbmVlZGVkIG9uIE9TIFgKKworIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5hc3NpZ24gICAgICAgICAgICAgPSAoCisgICIucGRmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZGYiLAorICAiLnNpZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisgICIuc3BsIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giLAorICAiLmNsYXNzIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKyAgIi5wcyIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorICAiLnRvcnJlbnQiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IiwKKyAgIi5kdmkiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZHZpIiwKKyAgIi5neiIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZ3ppcCIsCisgICIucGFjIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorICAiLnN3ZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLAorICAiLnRhci5neiIgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRneiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRhciIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10YXIiLAorICAiLnppcCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vemlwIiwKKyAgIi5tcDMiICAgICAgICAgID0+ICAgICAgImF1ZGlvL21wZWciLAorICAiLm0zdSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgIi53bWEiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd21hIiwKKyAgIi53YXgiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd2F4IiwKKyAgIi5vZ2ciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29nZyIsCisgICIud2F2IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LXdhdiIsCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAorICAiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCisgICIueGJtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhiaXRtYXAiLAorICAiLnhwbSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14cGl4bWFwIiwKKyAgIi54d2QiICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHdpbmRvd2R1bXAiLAorICAiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorICAiLmh0bWwiICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3JpcHQiLAorICAiLmFzYyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuYyIgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jcHAiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1sIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIubXBlZyIgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tcGciICAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1vdiIgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5xdCIgICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIuYXZpIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zdmlkZW8iLAorICAiLmFzZiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLmFzeCIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLndtdiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy13bXYiLAorICAiLmJ6MiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwIiwKKyAgIi50YnoiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIudGFyLmJ6MiIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiCisgKQorCisjIFVzZSB0aGUgIkNvbnRlbnQtVHlwZSIgZXh0ZW5kZWQgYXR0cmlidXRlIHRvIG9idGFpbiBtaW1lIHR5cGUgaWYgcG9zc2libGUKKyNtaW1ldHlwZS51c2UteGF0dHIgICAgICAgID0gImVuYWJsZSIKKworCisjIyBzZW5kIGEgZGlmZmVyZW50IFNlcnZlcjogaGVhZGVyCisjIyBiZSBuaWNlIGFuZCBrZWVwIGl0IGF0IGxpZ2h0dHBkCisjIHNlcnZlci50YWcgICAgICAgICAgICAgICAgID0gImxpZ2h0dHBkIgorCisjIyMjIGFjY2Vzc2xvZyBtb2R1bGUKK2FjY2Vzc2xvZy5maWxlbmFtZSAgICAgICAgICA9ICIvd3d3L2xvZ3MvYWNjZXNzLmxvZyIKK2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKworCisKKworIyMgZGVueSBhY2Nlc3MgdGhlIGZpbGUtZXh0ZW5zaW9ucworIworIyB+ICAgIGlzIGZvciBiYWNrdXBmaWxlcyBmcm9tIHZpLCBlbWFjcywgam9lLCAuLi4KKyMgLmluYyBpcyBvZnRlbiB1c2VkIGZvciBjb2RlIGluY2x1ZGVzIHdoaWNoIHNob3VsZCBpbiBnZW5lcmFsIG5vdCBiZSBwYXJ0CisjICAgICAgb2YgdGhlIGRvY3VtZW50LXJvb3QKK3VybC5hY2Nlc3MtZGVueSAgICAgICAgICAgICA9ICggIn4iLCAiLmluYyIgKQorCiskSFRUUFsidXJsIl0gPX4gIlwucGRmJCIgeworICBzZXJ2ZXIucmFuZ2UtcmVxdWVzdHMgPSAiZGlzYWJsZSIKK30KKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9ucyBzaG91bGQgbm90IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBocCwgLnBsLCAuZmNnaSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1vZF9jZ2kKK3N0YXRpYy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwgIi5mY2dpIiApCisKKyMjIyMjIyMjIyBPcHRpb25zIHRoYXQgYXJlIGdvb2QgdG8gYmUgYnV0IG5vdCBuZWNjZXNhcnkgdG8gYmUgY2hhbmdlZCAjIyMjIyMjCisKKyMjIGJpbmQgdG8gcG9ydCAoZGVmYXVsdDogODApCisjc2VydmVyLnBvcnQgICAgICAgICAgICAgICAgPSA4MQorCisjIyBiaW5kIHRvIGxvY2FsaG9zdCAoZGVmYXVsdDogYWxsIGludGVyZmFjZXMpCisjc2VydmVyLmJpbmQgICAgICAgICAgICAgICAgPSAiZ3Jpc3UuaG9tZS5rbmVzY2hrZS5kZSIKKworIyMgZXJyb3ItaGFuZGxlciBmb3Igc3RhdHVzIDQwNAorI3NlcnZlci5lcnJvci1oYW5kbGVyLTQwNCAgID0gIi9lcnJvci1oYW5kbGVyLmh0bWwiCisjc2VydmVyLmVycm9yLWhhbmRsZXItNDA0ICAgPSAiL2Vycm9yLWhhbmRsZXIucGhwIgorCisjIyB0byBoZWxwIHRoZSByYy5zY3JpcHRzCisjc2VydmVyLnBpZC1maWxlICAgICAgICAgICAgPSAiL3Zhci9ydW4vbGlnaHR0cGQucGlkIgorCisKKyMjIyMjIyB2aXJ0dWFsIGhvc3RzCisjIworIyMgIElmIHlvdSB3YW50IG5hbWUtYmFzZWQgdmlydHVhbCBob3N0aW5nIGFkZCB0aGUgbmV4dCB0aHJlZSBzZXR0aW5ncyBhbmQgbG9hZAorIyMgIG1vZF9zaW1wbGVfdmhvc3QKKyMjCisjIyBkb2N1bWVudC1yb290ID0KKyMjICAgdmlydHVhbC1zZXJ2ZXItcm9vdCArIHZpcnR1YWwtc2VydmVyLWRlZmF1bHQtaG9zdCArIHZpcnR1YWwtc2VydmVyLWRvY3Jvb3QKKyMjIG9yCisjIyAgIHZpcnR1YWwtc2VydmVyLXJvb3QgKyBodHRwLWhvc3QgKyB2aXJ0dWFsLXNlcnZlci1kb2Nyb290CisjIworI3NpbXBsZS12aG9zdC5zZXJ2ZXItcm9vdCAgID0gIi9ob21lL3dlaWdvbi93d3dyb290L3NlcnZlcnMvIgorI3NpbXBsZS12aG9zdC5kZWZhdWx0LWhvc3QgID0gImdyaXN1LmhvbWUua25lc2Noa2UuZGUiCisjc2ltcGxlLXZob3N0LmRvY3VtZW50LXJvb3QgPSAiL3BhZ2VzLyIKKworCisjIworIyMgRm9ybWF0OiA8ZXJyb3JmaWxlLXByZWZpeD48c3RhdHVzLWNvZGU+Lmh0bWwKKyMjIC0+IC4uLi4vc3RhdHVzLTQwNC5odG1sIGZvciAnRmlsZSBub3QgZm91bmQnCisjc2VydmVyLmVycm9yZmlsZS1wcmVmaXggICAgPSAiL2hvbWUvd2VpZ29uL3Byb2plY3RzL2xpZ2h0dHBkL2RvYy9zdGF0dXMtIgorCisjIyB2aXJ0dWFsIGRpcmVjdG9yeSBsaXN0aW5ncworI2Rpci1saXN0aW5nLmFjdGl2YXRlICAgICAgID0gImVuYWJsZSIKKworIyMgZW5hYmxlIGRlYnVnZ2luZworI2RlYnVnLmxvZy1yZXF1ZXN0LWhlYWRlciAgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVzcG9uc2UtaGVhZGVyICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlcXVlc3QtaGFuZGxpbmcgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1maWxlLW5vdC1mb3VuZCAgID0gImVuYWJsZSIKKworIyMjIG9ubHkgcm9vdCBjYW4gdXNlIHRoZXNlIG9wdGlvbnMKKyMKKyMgY2hyb290KCkgdG8gZGlyZWN0b3J5IChkZWZhdWx0OiBubyBjaHJvb3QoKSApCisjc2VydmVyLmNocm9vdCAgICAgICAgICAgICAgPSAiLyIKKworIyMgY2hhbmdlIHVpZCB0byA8dWlkPiAoZGVmYXVsdDogZG9uJ3QgY2FyZSkKKyNzZXJ2ZXIudXNlcm5hbWUgICAgICAgICAgICA9ICJ3d3dydW4iCisKKyMjIGNoYW5nZSB1aWQgdG8gPHVpZD4gKGRlZmF1bHQ6IGRvbid0IGNhcmUpCisjc2VydmVyLmdyb3VwbmFtZSAgICAgICAgICAgPSAid3d3cnVuIgorCisjIyMjIGNvbXByZXNzIG1vZHVsZQorI2NvbXByZXNzLmNhY2hlLWRpciAgICAgICAgID0gIi90bXAvbGlnaHR0cGQvY2FjaGUvY29tcHJlc3MvIgorI2NvbXByZXNzLmZpbGV0eXBlICAgICAgICAgID0gKCJ0ZXh0L3BsYWluIiwgInRleHQvaHRtbCIpCisKKyMjIyMgcHJveHkgbW9kdWxlCisjIyByZWFkIHByb3h5LnR4dCBmb3IgbW9yZSBpbmZvCisjcHJveHkuc2VydmVyICAgICAgICAgICAgICAgPSAoICIucGhwIiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICJsb2NhbGhvc3QiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3QiID0+ICIxOTIuMTY4LjAuMTAxIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3J0IiA9PiA4MAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIyMjIGZhc3RjZ2kgbW9kdWxlCisjIyByZWFkIGZhc3RjZ2kudHh0IGZvciBtb3JlIGluZm8KKyMjIGZvciBQSFAgZG9uJ3QgZm9yZ2V0IHRvIHNldCBjZ2kuZml4X3BhdGhpbmZvID0gMSBpbiB0aGUgcGhwLmluaQorI2Zhc3RjZ2kuc2VydmVyICAgICAgICAgICAgID0gKCAiLnBocCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAibG9jYWxob3N0IiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQiID0+ICIvdG1wL3BocC1mYXN0Y2dpLnNvY2tldCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmluLXBhdGgiID0+ICIvdXNyL2xvY2FsL2Jpbi9waHAiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyMjIyBDR0kgbW9kdWxlCisjY2dpLmFzc2lnbiAgICAgICAgICAgICAgICAgPSAoICIucGwiICA9PiAiL3Vzci9iaW4vcGVybCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuY2dpIiA9PiAiL3Vzci9iaW4vcGVybCIgKQorIworCisjIyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAgICA9ICJlbmFibGUiCisjc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIKKworIyMjIyBzdGF0dXMgbW9kdWxlCisjc3RhdHVzLnN0YXR1cy11cmwgICAgICAgICAgPSAiL3NlcnZlci1zdGF0dXMiCisjc3RhdHVzLmNvbmZpZy11cmwgICAgICAgICAgPSAiL3NlcnZlci1jb25maWciCisKKyMjIyMgYXV0aCBtb2R1bGUKKyMjIHJlYWQgYXV0aGVudGljYXRpb24udHh0IGZvciBtb3JlIGluZm8KKyNhdXRoLmJhY2tlbmQgICAgICAgICAgICAgICA9ICJwbGFpbiIKKyNhdXRoLmJhY2tlbmQucGxhaW4udXNlcmZpbGUgPSAibGlnaHR0cGQudXNlciIKKyNhdXRoLmJhY2tlbmQucGxhaW4uZ3JvdXBmaWxlID0gImxpZ2h0dHBkLmdyb3VwIgorCisjYXV0aC5iYWNrZW5kLmxkYXAuaG9zdG5hbWUgPSAibG9jYWxob3N0IgorI2F1dGguYmFja2VuZC5sZGFwLmJhc2UtZG4gID0gImRjPW15LWRvbWFpbixkYz1jb20iCisjYXV0aC5iYWNrZW5kLmxkYXAuZmlsdGVyICAgPSAiKHVpZD0kKSIKKworI2F1dGgucmVxdWlyZSAgICAgICAgICAgICAgID0gKCAiL3NlcnZlci1zdGF0dXMiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIiAgPT4gImRpZ2VzdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxtIiAgID0+ICJkb3dubG9hZCBhcmNoaXYiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlIiA9PiAidXNlcj1qYW4iCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvc2VydmVyLWNvbmZpZyIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRob2QiICA9PiAiZGlnZXN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhbG0iICAgPT4gImRvd25sb2FkIGFyY2hpdiIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmUiID0+ICJ2YWxpZC11c2VyIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMjIyMgdXJsIGhhbmRsaW5nIG1vZHVsZXMgKHJld3JpdGUsIHJlZGlyZWN0LCBhY2Nlc3MpCisjdXJsLnJld3JpdGUgICAgICAgICAgICAgICAgPSAoICJeLyQiICAgICAgICAgICAgID0+ICIvc2VydmVyLXN0YXR1cyIgKQorI3VybC5yZWRpcmVjdCAgICAgICAgICAgICAgID0gKCAiXi93aXNobGlzdC8oLispIiA9PiAiaHR0cDovL3d3dy4xMjMub3JnLyQxIiApCisKKyMjIyMgYm90aCByZXdyaXRlL3JlZGlyZWN0IHN1cHBvcnQgYmFjayByZWZlcmVuY2UgdG8gcmVnZXggY29uZGl0aW9uYWwgdXNpbmcgJW4KKyMkSFRUUFsiaG9zdCJdID1+ICJed3d3XC4oLiopIiB7CisjICB1cmwucmVkaXJlY3QgICAgICAgICAgICA9ICggIl4vKC4qKSIgPT4gImh0dHA6Ly8lMS8kMSIgKQorI30KKworIworIyBkZWZpbmUgYSBwYXR0ZXJuIGZvciB0aGUgaG9zdCB1cmwgZmluZGluZworIyAlJSA9PiAlIHNpZ24KKyMgJTAgPT4gZG9tYWluIG5hbWUgKyB0bGQKKyMgJTEgPT4gdGxkCisjICUyID0+IGRvbWFpbiBuYW1lIHdpdGhvdXQgdGxkCisjICUzID0+IHN1YmRvbWFpbiAxIG5hbWUKKyMgJTQgPT4gc3ViZG9tYWluIDIgbmFtZQorIworI2V2aG9zdC5wYXRoLXBhdHRlcm4gICAgICAgID0gIi9ob21lL3N0b3JhZ2UvZGV2L3d3dy8lMy9odGRvY3MvIgorCisjIyMjIGV4cGlyZSBtb2R1bGUKKyNleHBpcmUudXJsICAgICAgICAgICAgICAgICA9ICggIi9idWdneS8iID0+ICJhY2Nlc3MgMiBob3VycyIsICIvYXNkaGFzLyIgPT4gImFjY2VzcyBwbHVzIDEgc2Vjb25kcyAyIG1pbnV0ZXMiKQorCisjIyMjIHNzaQorI3NzaS5leHRlbnNpb24gICAgICAgICAgICAgID0gKCAiLnNodG1sIiApCisKKyMjIyMgcnJkdG9vbAorI3JyZHRvb2wuYmluYXJ5ICAgICAgICAgICAgID0gIi91c3IvYmluL3JyZHRvb2wiCisjcnJkdG9vbC5kYi1uYW1lICAgICAgICAgICAgPSAiL3Zhci93d3cvbGlnaHR0cGQucnJkIgorCisjIyMjIHNldGVudgorI3NldGVudi5hZGQtcmVxdWVzdC1oZWFkZXIgID0gKCAiVFJBVl9FTlYiID0+ICJteXNxbDovL3VzZXJAaG9zdC9kYiIgKQorI3NldGVudi5hZGQtcmVzcG9uc2UtaGVhZGVyID0gKCAiWC1TZWNyZXQtTWVzc2FnZSIgPT4gIjQyIiApCisKKyMjIGZvciBtb2RfdHJpZ2dlcl9iNF9kbAorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5nZGJtLWZpbGVuYW1lID0gIi9ob21lL3dlaWdvbi90ZXN0YmFzZS90cmlnZ2VyLmRiIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5tZW1jYWNoZS1ob3N0cyA9ICggIjEyNy4wLjAuMToxMTIxMSIgKQorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC50cmlnZ2VyLXVybCA9ICJeL3RyaWdnZXIvIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5kb3dubG9hZC11cmwgPSAiXi9kb3dubG9hZC8iCisjIHRyaWdnZXItYmVmb3JlLWRvd25sb2FkLmRlbnktdXJsID0gImh0dHA6Ly8xMjcuMC4wLjEvaW5kZXguaHRtbCIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQudHJpZ2dlci10aW1lb3V0ID0gMTAKKworIyMgZm9yIG1vZF9jbWwKKyMjIGRvbid0IGZvcmdldCB0byBhZGQgaW5kZXguY21sIHRvIHNlcnZlci5pbmRleGZpbGVzCisjIGNtbC5leHRlbnNpb24gICAgICAgICAgICAgICA9ICIuY21sIgorIyBjbWwubWVtY2FjaGUtaG9zdHMgICAgICAgICAgPSAoICIxMjcuMC4wLjE6MTEyMTEiICkKKworIyMjIyB2YXJpYWJsZSB1c2FnZToKKyMjIHZhcmlhYmxlIG5hbWUgd2l0aG91dCAiLiIgaXMgYXV0byBwcmVmaXhlZCBieSAidmFyLiIgYW5kIGJlY29tZXMgInZhci5iYXIiCisjYmFyID0gMQorI3Zhci5teXN0cmluZyA9ICJmb28iCisKKyMjIGludGVnZXIgYWRkCisjYmFyICs9IDEKKyMjIHN0cmluZyBjb25jYXQsIHdpdGggaW50ZWdlciBjYXN0IGFzIHN0cmluZywgcmVzdWx0OiAid3d3LmZvbzEuY29tIgorI3NlcnZlci5uYW1lID0gInd3dy4iICsgbXlzdHJpbmcgKyB2YXIuYmFyICsgIi5jb20iCisjIyBhcnJheSBtZXJnZQorI2luZGV4LWZpbGUubmFtZXMgPSAoZm9vICsgIi5waHAiKSArIGluZGV4LWZpbGUubmFtZXMKKyNpbmRleC1maWxlLm5hbWVzICs9IChmb28gKyAiLnBocCIpCisKKyMjIyMgaW5jbHVkZQorI2luY2x1ZGUgL2V0Yy9saWdodHRwZC9saWdodHRwZC1pbmMuY29uZgorIyMgc2FtZSBhcyBhYm92ZSBpZiB5b3UgcnVuOiAibGlnaHR0cGQgLWYgL2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mIgorI2luY2x1ZGUgImxpZ2h0dHBkLWluYy5jb25mIgorCisjIyMjIGluY2x1ZGVfc2hlbGwKKyNpbmNsdWRlX3NoZWxsICJlY2hvIHZhci5hPTEiCisjIyB0aGUgYWJvdmUgaXMgc2FtZSBhczoKKyN2YXIuYT0xCisKKyMgaW5jbHVkZSBvdGhlciBjb25maWcgZmlsZSBmcmFnbWVudHMgZnJvbSBsaWdodHRwZC5kIHN1YmRpcgoraW5jbHVkZV9zaGVsbCAiZmluZCAvZXRjL2xpZ2h0dHBkLmQgLW1heGRlcHRoIDEgLW5hbWUgJyouY29uZicgLWV4ZWMgY2F0IHt9IFw7IiAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhOTA3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TGlnaHRuaW5nIEZhc3QgV2Vic2VydmVyIFdpdGggTGlnaHQgU3lzdGVtIFJlcXVpcmVtZW50cworQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnRQcmU9QFNCSU5ESVJAL2xpZ2h0dHBkIC10IC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2xpZ2h0dHBkIC1EIC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5NWY5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGVwZW5kZW5jeSBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxNC81LzIyCisKKworSW5kZXg6IGxpZ2h0dHBkLTEuNC4zNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWdodHRwZC0xLjQuMzUub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wMy0wNiAxNDowODowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTY6NTg6MzAuNzU4NDcxMTY5ICswMDAwCitAQCAtMzA5LDE2ICszMDksMTQgQEAKKyBBQ19NU0dfUkVTVUxUKFskV0lUSF9QQ1JFXSkKKyAKKyBpZiB0ZXN0ICIkV0lUSF9QQ1JFIiAhPSAibm8iOyB0aGVuCistICBBQ19QQVRIX1BST0coUENSRUNPTkZJRywgcGNyZS1jb25maWcpCistCistICBpZiB0ZXN0IHgiJFBDUkVDT05GSUciICE9IHg7IHRoZW4KKy0gICAgUENSRV9MSUI9YCRQQ1JFQ09ORklHIC0tbGlic2AKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJFBDUkVDT05GSUcgLS1jZmxhZ3NgIgorKyAgUEtHX0NIRUNLX01PRFVMRVMoUENSRVBLRywgW2xpYnBjcmVdLCBbCisrICAgIFBDUkVfTElCPSR7UENSRVBLR19MSUJTfQorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICR7UENSRVBLR19DRkxBR1N9IgorICAgICBBQ19ERUZJTkUoW0hBVkVfTElCUENSRV0sIFsxXSwgW2xpYnBjcmVdKQorICAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV9IXSwgWzFdLCBbcGNyZS5oXSkKKy0gIGVsc2UKKysgIF0sIFsKKyAgICAgIEFDX01TR19FUlJPUihbcGNyZS1jb25maWcgbm90IGZvdW5kLCBpbnN0YWxsIHRoZSBwY3JlLWRldmVsIHBhY2thZ2Ugb3IgYnVpbGQgd2l0aCAtLXdpdGhvdXQtcGNyZV0pCistICBmaQorKyAgXSkKKyBmaQorIAorIEFDX1NVQlNUKFBDUkVfTElCKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiNmUzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBoaWdoLXBlcmZvcm1hbmNlIHdlYiBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpZ2h0dHBkLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTRkYWM1YzZhYjE2OWFhMjEyZmViNTAyODg1M2E1NzkiCisKK1NFQ1RJT04gPSAibmV0IgorREVQRU5EUyA9ICJ6bGliIGxpYnBjcmUiCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3MgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWFjY2Vzc2xvZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtaW5kZXhmaWxlIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1kaXJsaXN0aW5nIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1zdGF0aWNmaWxlIFwKKyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQubGlnaHR0cGQubmV0L2xpZ2h0dHBkL3JlbGVhc2VzLTEuNC54L2xpZ2h0dHBkLSR7UFZ9LnRhci54eiBcCisgICAgICAgIGZpbGU6Ly9pbmRleC5odG1sLmxpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLmNvbmYgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQuc2VydmljZSBcCisgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTg0M2RhZmZjYjAxOGFhNTI4ZjZkMTVkNDM1NDQ2NTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk3YWI2YjFjYzdiZDUxNjcxZjhhZjc1OWU3ODQ2MjQ1ZmJiY2EwNjg1YzMwMDE3ZTkzYTU4ODJhOWFjMWE1MyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLCAtLXdpdGhvdXQtb3BlbnNzbCwgb3BlbnNzbCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWJ6aXAyIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtbGRhcCBcCisgICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCisgICAgICAgICAgICAgLS13aXRob3V0LW1lbWNhY2hlIFwKKyAgICAgICAgICAgICAtLXdpdGgtcGNyZSBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1wcm9wcyBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1sb2NrcyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImxpZ2h0dHBkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNzAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJsaWdodHRwZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCAke0R9JHtzeXNjb25mZGlyfS9saWdodHRwZC5kICR7RH0vd3d3L3BhZ2VzL2RhdgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2xpZ2h0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmRleC5odG1sLmxpZ2h0dHBkICR7RH0vd3d3L3BhZ2VzL2luZGV4Lmh0bWwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbGlnaHR0cGQuc2VydmljZQorCSNGb3IgRkhTIGNvbXBsaWFuY2UsIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byAvdmFyL2xvZyBhbmQgL3Zhci90bXAgZm9yIGxvZ3MgYW5kIHRlbXBvcmFyeSBkYXRhCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vbG9nICR7RH0vd3d3L2xvZ3MKKwlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS90bXAgJHtEfS93d3cvdmFyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9IC93d3ciCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWdodHRwZC1tb2R1bGUtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MzFhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApAQCAtMCwwICsxLDE0NyBAQAorRnJvbSA2OGYyOWFiNDkwY2Y5ODdhYTM0YjVmNGNhZjE3ODRiNThhMDIxMzA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IEZlYiAyMDE1IDIxOjA4OjA3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFjdCBhcyB0aGUgIm12IiBjb21tYW5kIHdoZW4gcm90YXRlIGxvZworCitBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2csIGZpcnN0IHJlbmFtZSwgaWYgZmFpbGVkLCB0aGVuCityZWFkIGFuZCB3cml0ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLmMgfCAgIDcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLmMgYi9sb2dyb3RhdGUuYworaW5kZXggZDNkZWI2YS4uY2Y4YmYyYyAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS5jCisrKysgYi9sb2dyb3RhdGUuYworQEAgLTExNTcsNiArMTE1Nyw1MyBAQCBpbnQgZmluZE5lZWRSb3RhdGluZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBpbnQgZm9yY2UpCisgICAgIHJldHVybiAwOworIH0KKyAKKysvKiBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCwgaWYgcmVuYW1lIGZhaWxlZCwgdGhlbiByZWFkIHRoZSBvbGQgZmlsZSBhbmQKKysgKiB3cml0ZSB0byBuZXcgZmlsZS4gVGhlIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIG12RmlsZSB3aWxsIHVzZQorKyAqIHRoZSBzdHJlcnJvcihlcnJvcm5vKSB0byBoYW5kbGUgdGhlIGVycm9yIG1lc3NhZ2UsIHNvIHdlIGRvbid0IGhhdmUKKysgKiB0byBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBoZXJlICovCisrCisraW50IG12RmlsZSAoY2hhciAqb2xkTmFtZSwgY2hhciAqbmV3TmFtZSwgc3RydWN0IGxvZ0luZm8gKmxvZywgYWNsX3R5cGUgYWNsKQorK3sKKysgICAgc3RydWN0IHN0YXQgc2JwcmV2OworKyAgICBpbnQgZmRfb2xkLCBmZF9uZXcsIG47CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrCisrICAgIC8qIERvIHRoZSByZW5hbWUgZmlyc3QgKi8KKysgICAgaWYgKCFyZW5hbWUob2xkTmFtZSwgbmV3TmFtZSkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgLyogSWYgdGhlIGVycm5vIGlzIEVYREVWLCB0aGVuIHJlYWQgb2xkIGZpbGUsIHdyaXRlIG5ld2ZpbGUgYW5kCisrICAgICAqIHJlbW92ZSB0aGUgb2xkZmlsZSAqLworKyAgICBpZiAoZXJybm8gPT0gRVhERVYpIHsKKysgICAgICAgIC8qIE9wZW4gdGhlIG9sZCBmaWxlIHRvIHJlYWQgKi8KKysgICAgICAgIGlmICgoZmRfb2xkID0gb3BlbihvbGROYW1lLCBPX1JET05MWSkpIDwgMCkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgZmlsZSB0byB3cml0ZSwga2VlcCB0aGUgc2FtZSBhdHRyaWJ1dGUgYXMgdGhlIG9sZCBmaWxlICovCisrICAgICAgICBpZiAoc3RhdChvbGROYW1lLCAmc2JwcmV2KSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGlmICgoZmRfbmV3ID0gY3JlYXRlT3V0cHV0RmlsZShuZXdOYW1lLAorKyAgICAgICAgICAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAmc2JwcmV2LCBhY2wsIDApKSA8IDAgKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIFJlYWQgYW5kIHdyaXRlICovCisrICAgICAgICB3aGlsZSAoKG4gPSByZWFkKGZkX29sZCwgYnVmLCBCVUZTSVopKSA+IDApCisrICAgICAgICAgICAgaWYgKHdyaXRlKGZkX25ldywgYnVmLCBuKSAhPSBuKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIGlmICgoY2xvc2UoZmRfb2xkKSA8IDApIHx8CisrICAgICAgICAgICAgcmVtb3ZlTG9nRmlsZShvbGROYW1lLCBsb2cpIHx8CisrICAgICAgICAgICAgKGNsb3NlKGZkX25ldykgPCAwKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKyBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQkgICAgICAgc3RydWN0IGxvZ05hbWVzICpyb3ROYW1lcykKKyB7CitAQCAtMTUyMywxNSArMTU3MCwxNSBAQCBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQl9CisgCisgCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsCistCQkgICAgInJlbmFtaW5nICVzIHRvICVzIChyb3RhdGVjb3VudCAlZCwgbG9nc3RhcnQgJWQsIGkgJWQpLCBcbiIsCisrCQkgICAgIm1vdmluZyAlcyB0byAlcyAocm90YXRlY291bnQgJWQsIGxvZ3N0YXJ0ICVkLCBpICVkKSwgXG4iLAorIAkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHJvdGF0ZUNvdW50LCBsb2dTdGFydCwgaSk7CisgCistCSAgICBpZiAoIWRlYnVnICYmIHJlbmFtZShvbGROYW1lLCBuZXdOYW1lKSkgeworKwkgICAgaWYgKCFkZWJ1ZyAmJiBtdkZpbGUob2xkTmFtZSwgbmV3TmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAJCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsICJvbGQgbG9nICVzIGRvZXMgbm90IGV4aXN0XG4iLAorIAkJCSAgICBvbGROYW1lKTsKKyAJCX0gZWxzZSB7CistCQkgICAgbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgJXMgdG8gJXM6ICVzXG4iLAorKwkJICAgIG1lc3NhZ2UoTUVTU19FUlJPUiwgImVycm9yIG1vdmluZyAlcyB0byAlczogJXNcbiIsCisgCQkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgCQkgICAgaGFzRXJyb3JzID0gMTsKKyAJCX0KK0BAIC0xNjY5LDIxICsxNzE2LDIxIEBAIGludCByb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgc3RydWN0IGxvZ1N0YXRlICpzdGF0ZSwKKyAJCQkJcmV0dXJuIDE7CisgCQkJfQorIAorLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXRtcEZpbGVuYW1lKTsKKy0JCQlpZiAoIWRlYnVnICYmICFoYXNFcnJvcnMgJiYgcmVuYW1lKGxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUpKSB7CistCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXNcbiIsCisrCQkJaWYgKCFkZWJ1ZyAmJiAhaGFzRXJyb3JzICYmIG12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIG1vdmUgJXMgdG8gJXM6ICVzXG4iLAorIAkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lLAorIAkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQloYXNFcnJvcnMgPSAxOworIAkJCX0KKyAJCX0KKyAJCWVsc2UgeworLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXJvdE5hbWVzLT5maW5hbE5hbWUpOworIAkJCWlmICghZGVidWcgJiYgIWhhc0Vycm9ycyAmJgorLQkJCXJlbmFtZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUpKSB7CistCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAorKwkJCW12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKKyAJCQkJCWxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUsCisgCQkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQkJaGFzRXJyb3JzID0gMTsKK0BAIC0yMDYzLDcgKzIxMTAsNyBAQCBpbnQgcm90YXRlTG9nU2V0KHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBmb3JjZSkKKyAgICAgcmV0dXJuIGhhc0Vycm9yczsKKyB9CisgCistc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisrc3RhdGljIGludCB3cml0ZVN0YXRlKHN0cnVjdCBsb2dJbmZvICpsb2csIGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgeworIAlzdHJ1Y3QgbG9nU3RhdGUgKnA7CisgCUZJTEUgKmY7CitAQCAtMjIyNyw3ICsyMjc0LDcgQEAgc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgCQlmY2xvc2UoZik7CisgCisgCWlmIChlcnJvciA9PSAwKSB7CistCQlpZiAocmVuYW1lKHRtcEZpbGVuYW1lLCBzdGF0ZUZpbGVuYW1lKSkgeworKwkJaWYgKG12RmlsZSh0bXBGaWxlbmFtZSwgc3RhdGVGaWxlbmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCQl1bmxpbmsodG1wRmlsZW5hbWUpOworIAkJCWVycm9yID0gMTsKKyAJCQltZXNzYWdlKE1FU1NfRVJST1IsICJlcnJvciByZW5hbWluZyB0ZW1wIHN0YXRlIGZpbGUgJXNcbiIsCitAQCAtMjUyNSw3ICsyNTcyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorIAkJcmMgfD0gcm90YXRlTG9nU2V0KGxvZywgZm9yY2UpOworIAorIAlpZiAoIWRlYnVnKQorLQkJcmMgfD0gd3JpdGVTdGF0ZShzdGF0ZUZpbGUpOworKwkJcmMgfD0gd3JpdGVTdGF0ZShsb2csIHN0YXRlRmlsZSk7CisgCisgCXJldHVybiAocmMgIT0gMCk7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9kaXNhYmxlLWNoZWNrLWRpZmZlcmVudC1maWxlc3lzdGVtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNkNzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRGlzYWJsZSB0aGUgY2hlY2sgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcworCitUaGUgbG9ncm90YXRlIHN1cHBvcnRzIHJvdGF0ZSBsb2cgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBub3csIHNvCitkaXNhYmxlIHRoZSBjaGVjayBmb3IgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcuYyB8ICAgIDkgLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCitpbmRleCBkYmJmNTYzLi42NGU2NmY2IDEwMDY0NAorLS0tIGEvY29uZmlnLmMKKysrKyBiL2NvbmZpZy5jCitAQCAtMTQ5MywxNSArMTQ5Myw2IEBAIHN0YXRpYyBpbnQgcmVhZENvbmZpZ0ZpbGUoY29uc3QgY2hhciAqY29uZmlnRmlsZSwgc3RydWN0IGxvZ0luZm8gKmRlZkNvbmZpZykKKyAJCQkJCQkJZ290byBlcnJvcjsKKyAJCQkJCQl9CisgCQkJCQl9CistCistCQkJCQlpZiAoc2Iuc3RfZGV2ICE9IHNiMi5zdF9kZXYKKy0JCQkJCQkmJiAhKG5ld2xvZy0+ZmxhZ3MgJiAoTE9HX0ZMQUdfQ09QWVRSVU5DQVRFIHwgTE9HX0ZMQUdfQ09QWSB8IExPR19GTEFHX1RNUEZJTEVOQU1FKSkpIHsKKy0JCQkJCQltZXNzYWdlKE1FU1NfRVJST1IsCistCQkJCQkJCSIlczolZCBvbGRkaXIgJXMgYW5kIGxvZyBmaWxlICVzICIKKy0JCQkJCQkJImFyZSBvbiBkaWZmZXJlbnQgZGV2aWNlc1xuIiwgY29uZmlnRmlsZSwKKy0JCQkJCQkJbGluZU51bSwgbmV3bG9nLT5vbGREaXIsIG5ld2xvZy0+ZmlsZXNbaV0pOworLQkJCQkJCWdvdG8gZXJyb3I7CistCQkJCQl9CisgCQkJCX0KKyAJCQl9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDAzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGUwYjBmZTMwZTljNDkyMzQ5OTRhMjBhODZhYWNmYWY4MGU2OTAwODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgRmViIDIwMTUgMjE6MTQ6MzcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHRoZSBtYW51YWwKKworVXBkYXRlIHRoZSBtYW51YWwgZm9yIHJvdGF0aW5nIG9uIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLjggfCAgIDEwICsrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLjggYi9sb2dyb3RhdGUuOAoraW5kZXggZTRlNWY0OC4uODQ0MDdkMCAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS44CisrKysgYi9sb2dyb3RhdGUuOAorQEAgLTQwNSwxMiArNDA1LDEwIEBAIERvIG5vdCByb3RhdGUgdGhlIGxvZyBpZiBpdCBpcyBlbXB0eSAodGhpcyBvdmVycmlkZXMgdGhlIFxmQmlmZW1wdHlcZlIgb3B0aW9uKS4KKyAKKyAuVFAKKyBcZkJvbGRkaXIgXGZJZGlyZWN0b3J5XGZSCistTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSIG11c3QgYmUKKy1vbiB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgYXMgdGhlIGxvZyBmaWxlIGJlaW5nIHJvdGF0ZWQsIHVubGVzcyBcZkJjb3B5XGZSLAorLVxmQmNvcHl0cnVuY2F0ZVxmUiBvciBcZkJyZW5hbWVjb3B5XGZSIG9wdGlvbiBpcyB1c2VkLiBUaGUgXGZJZGlyZWN0b3J5XGZSCistaXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlCistdW5sZXNzIGFuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwKKy1vbGQgdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiAgVGhpcyBvcHRpb24gbWF5IGJlCisrTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSCisraXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlIHVubGVzcworK2FuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwgb2xkCisrdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiBUaGlzIG9wdGlvbiBtYXkgYmUKKyBvdmVycmlkZGVuIGJ5IHRoZSBcZkJub29sZGRpclxmUiBvcHRpb24uCisgCisgLlRQCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZV8zLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBhMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJSb3RhdGVzLCBjb21wcmVzc2VzLCByZW1vdmVzIGFuZCBtYWlscyBzeXN0ZW0gbG9nIGZpbGVzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xvZ3JvdGF0ZS8iCitMSUNFTlNFID0gIkdQTHYyIgorCisjIFRPRE86IGxvZ3JvdGF0ZSAzLjguOCBhZGRzIGF1dG90b29scy9hdXRvbWFrZSBzdXBwb3J0LCB1cGRhdGUgcmVjaXBlIHRvIHVzZSBpdC4KKyMgVE9ETzogRG9jdW1lbnQgY29yZXV0aWxzIGRlcGVuZGVuY3kuIFdoeSBub3QgUkRFUEVORFM/IFdoeSBub3QgYnVzeWJveD8KKworREVQRU5EUz0iY29yZXV0aWxzIHBvcHQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0OTJiMTQ1YjZkNTQyZTRhMmY0MWU3N2ZhMTk5YWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyMjc2OWUzMjg4YzgwOTgxNTU5YTg0MjE3MDNjODhlODQzOGI0NDcyMzVlMzZkZDNjOGU5N2NkOTRjNTI1NDUiCisKK1BBQ0tBR0VDT05GSUcgPz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLCxhY2wiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiwsbGlic2VsaW51eCIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzIFwKKwkJICAgICR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYiCisKKyMgSWYgUlBNX09QVF9GTEFHUyBpcyB1bnNldCwgaXQgYWRkcyAtZyBpdHNlbGYgcmF0aGVyIHRoYW4gb2JleWluZyBvdXIKKyMgb3B0aW1pemF0aW9uIHZhcmlhYmxlcywgc28gdXNlIGl0IHJhdGhlciB0aGFuIEVYVFJBX0NGTEFHUy4KK0VYVFJBX09FTUFLRSA9ICJcCisgICAgTEZTPSBcCisgICAgT1NfTkFNRT0nJHtPU19OQU1FfScgXAorICAgICdDQz0ke0NDfScgXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdFWFRSQV9MREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhY2wnLCAnV0lUSF9BQ0w9eWVzJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VsaW51eCcsICdXSVRIX1NFTElOVVg9eWVzJywgJycsIGQpfSBcCisiCisKKyMgT1NfTkFNRSBpbiB0aGUgbWFrZWZpbGUgZGVmYXVsdHMgdG8gYHVuYW1lIC1zYC4gVGhlIGJlaGF2aW9yIGZvcgorIyBmcmVlYnNkL25ldGJzZCBpcyBxdWVzdGlvbmFibGUsIHNvIGxlYXZlIGl0IGFzIExpbnV4LCB3aGljaCBvbmx5IHNldHMKKyMgSU5TVEFMTD1pbnN0YWxsIGFuZCBCQVNFRElSPS91c3IuCitPU19OQU1FID0gIkxpbnV4IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitkb19pbnN0YWxsKCl7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtEfSBNQU5ESVI9JHttYW5kaXJ9IEJJTkRJUj0ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuZAorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKyAgICBta2RpciAtcCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIKKyAgICBpbnN0YWxsIC1wIC1tIDY0NCBleGFtcGxlcy9sb2dyb3RhdGUtZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuY29uZgorICAgIGluc3RhbGwgLXAgLW0gNzU1IGV4YW1wbGVzL2xvZ3JvdGF0ZS5jcm9uICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvbG9ncm90YXRlCisgICAgdG91Y2ggJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2xvZ3JvdGF0ZS5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvaW5pdC1mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MxZGNlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCisjIExTQiBpbml0c2NyaXB0IGZ1bmN0aW9ucywgYXMgZGVmaW5lZCBpbiB0aGUgTFNCIFNwZWMgMS4xLjAKKyMKKyMgTGF3cmVuY2UgTGltIDxsbGltQGNvcmUuY29tPiAtIFR1ZSwgMjYgSnVuZSAyMDA3CisjIFVwZGF0ZWQgdG8gdGhlIGxhdGVzdCBMU0IgMy4xIHNwZWMKKyMgaHR0cDovL3JlZnNwZWNzLmZyZWVzdGFuZGFyZHMub3JnL0xTQl8zLjEuMC9MU0ItQ29yZS1nZW5lcmljL0xTQi1Db3JlLWdlbmVyaWNfbGluZXMudHh0CisKK3N0YXJ0X2RhZW1vbiAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2Jfc3RhcnRfZGFlbW9uICIkQCIKK30KKwora2lsbHByb2MgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2tpbGxwcm9jICIkQCIKK30KKworcGlkb2Zwcm9jICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9waWRvZnByb2MgIiRAIgorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHN1Y2Nlc3MgIiRAIgorfQorCitsb2dfZmFpbHVyZV9tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIGZhaWx1cmUgIiRAIgorfQorCitsb2dfd2FybmluZ19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHdhcm5pbmcgIiRAIgorfQorCisjIGludCBsb2dfYmVnaW5fbWVzc2FnZSAoY2hhciAqbWVzc2FnZSkKK2xvZ19iZWdpbl9tc2cgKCkgeworCWlmIFsgLXogIiQxIiBdOyB0aGVuCisJCXJldHVybiAxCisJZmkKKwllY2hvICIgKiAkQCIKK30KKworCitsb2dfZW5kX21zZyAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2JfbG9nX21lc3NhZ2UgZW5kICIkQCIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NjZjMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0xTQj1MU0ItMS4xIGtpbGxwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTAzNDNiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworQUNUSU9OPSQxCitzaGlmdAorCitjYXNlICIkQUNUSU9OIiBpbgorICBzdWNjZXNzKQorICAJZWNobyAtbiAkKgorCXN1Y2Nlc3MgIiQqIgorCWVjaG8KKwk7OworICBmYWlsdXJlKQorICAJZWNobyAtbiAkKgorCWZhaWx1cmUgIiQqIgorCWVjaG8KKwk7OworICB3YXJuaW5nKQorICAJZWNobyAtbiAkKgorCXdhcm5pbmcgIiQqIgorCWVjaG8KKwk7OworICAqKQorICAJOzsKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQxZmQwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworcGlkb2Zwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTYyYzIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbmljZT0KK2ZvcmNlPQorcGlkZmlsZT0KK3VzZXI9CitjaGVjaz0KK1JFVFZBTD0KK3doaWxlIFsgIiQxIiAhPSAiJHsxIyNbLStdfSIgXTsgZG8KKwljYXNlICQxIGluCisJICAgICAtZikKKwkgICAgIAlmb3JjZT0iLS1mb3JjZSIKKwkJc2hpZnQKKwkJOzsKKwkgICAgIC1uKQorCSAgICAgCW5pY2U9JDIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXApCisJCXBpZGZpbGU9Ii0tcGlkZmlsZSAkMiIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXUpCisJICAgICAgICB1c2VyPSItLXVzZXIgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC1jKQorCSAgICAgICAgY2hlY2s9Ii0tY2hlY2sgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgICAqKSAgICAgCisgCQllY2hvICJVbmtub3duIE9wdGlvbiAkMSIKKyAJCWVjaG8gIk9wdGlvbnMgYXJlOiIKKyAJCWVjaG8gIi1mIiAKKwkJZWNobyAiLXAge3BpZGZpbGV9IgorCQllY2hvICItbiBbKy8tbmljZWxldmVsXSIKKwkJZWNobyAiLXUge3VzZXJ9IgorCQllY2hvICItYyB7YmFzZX0iCisJICAgICAgICBleGl0IDE7OwkKKwllc2FjCitkb25lCitMU0I9TFNCLTEuMSBkYWVtb24gJHtmb3JjZTotfSAke25pY2U6LX0gJHtwaWRmaWxlOi19ICR7dXNlcjotfSAke2NoZWNrOi19ICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNWI2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgpAQCAtMCwwICsxLDEyNyBAQAorU1VNTUFSWSA9ICJMU0Igc3VwcG9ydCBmb3IgT3BlbkVtYmVkZGVkIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9sc2IiCitMSUNFTlNFID0gIkdQTHYyKyIKK1BSID0gInIyIgorCitMU0JfQ09SRSA9ICJsc2ItY29yZS0ke1RBUkdFVF9BUkNIfSIKK0xTQl9DT1JFX3g4NiA9ICJsc2ItY29yZS1pYTMyIgorTFNCX0NPUkVfeDg2LTY0ID0gImxzYi1jb3JlLWFtZDY0IgorUlBST1ZJREVTXyR7UE59ICs9ICIke0xTQl9DT1JFfSIKKworIyBsc2JfcmVsZWFzZSBuZWVkcyBnZXRvcHQKK1JERVBFTkRTXyR7UE59ICs9ICIke1ZJUlRVQUwtUlVOVElNRV9nZXRvcHR9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTEyZGE1NDRiMWEzYTVhMTc5NWEyMTE2MGI0OTQ3MWNmIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xzYi9sc2JfcmVsZWFzZS8xLjQvbHNiLXJlbGVhc2UtMS40LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LWZ1bmN0aW9ucyBcCisgICAgICAgICAgIGZpbGU6Ly9sc2Jfa2lsbHByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX2xvZ19tZXNzYWdlIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9waWRvZnByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX3N0YXJ0X2RhZW1vbiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTM3ZWY1YTAxZTBjYTk0YjdiOGViNmEzNmJiMWU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5MzIxMjg4ZjhkNjJlN2ExZDQ4NWI3YzZiZGNjZjA2NzY2ZmI4Y2E2MDNjNjE5NTgwNmU0NDU3ZmRmMTcxNzIiCitTID0gIiR7V09SS0RJUn0vbHNiLXJlbGVhc2UtMS40IgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19pbnN0YWxsKCl7CisJb2VfcnVubWFrZSBpbnN0YWxsIHByZWZpeD0ke0R9ICBtYW5kaXI9JHtEfS8ke2RhdGFkaXJ9L21hbi8gREVTVERJUj0ke0R9CisKKwkjIHRoaXMgMiBkaXJzIGFyZSBuZWVkZWQgYnkgcGFja2FnZSBsc2ItZGlzdC1jaGVja2VyCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vb3B0CisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vb3B0CisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwlta2RpciAtcCAke0R9LyR7YmFzZWxpYn0KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJcHJpbnRmICJMU0JfVkVSU0lPTj1cImNvcmUtNC4xLW5vYXJjaDoiID4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNTg2IiBdIHx8IFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNjg2IiBdO3RoZW4KKwkJcHJpbnRmICJjb3JlLTQuMS1pYTMyIiA+PiAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwllbHNlCisJCXByaW50ZiAiY29yZS00LjEtJHtUQVJHRVRfQVJDSH0iID4+ICAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWZpCisJZWNobyAiXCIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9JRD0ke0RJU1RST30iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9SRUxFQVNFPSR7RElTVFJPX1ZFUlNJT059IiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWlmIFsgLW4gIiR7RElTVFJPX0NPREVOQU1FfSIgXTsgdGhlbgorCQllY2hvICJESVNUUklCX0NPREVOQU1FPSR7RElTVFJPX0NPREVOQU1FfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlmaQorCWVjaG8gIkRJU1RSSUJfREVTQ1JJUFRJT049XCIke0RJU1RST19OQU1FfSAke0RJU1RST19WRVJTSU9OfVwiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1pYTMyCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1pYTMyCisJZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1hbWQ2NAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tYW1kNjQKKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1wcGMzMgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tcHBjMzIKKwllbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LW5vYXJjaAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LXBwYzY0CisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1wcGM2NAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGZvciBpIGluIGxzYl9raWxscHJvYyBsc2JfbG9nX21lc3NhZ2UgbHNiX3BpZG9mcHJvYyBsc2Jfc3RhcnRfZGFlbW9uCisgICAgICAgZG8KKyAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJHtpfSAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGRvbmUKKworICAgICAgIGluc3RhbGwgLWQgJHtEfS9saWIvbHNiCisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1mdW5jdGlvbnMgJHtEfS9saWIvbHNiCisKKyAgICAgICAjIGNyZWF0IGxpbmtzIGZvciBMU0IgdGVzdAorICAgICAgIGluc3RhbGwgLWQgJHtEfS91c3IvbGliL2xzYgorICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9L3Vzci9saWIvbHNiL2luc3RhbGxfaW5pdGQKKyAgICAgICBsbiAtc2YgJHtzYmluZGlyfS9jaGtjb25maWcgJHtEfS91c3IvbGliL2xzYi9yZW1vdmVfaW5pdGQKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCSAgICAgICBjZCAke0R9CisgICAgICAgICAgICAgICBpZiBbICIke2Jhc2VsaWJ9IiAhPSAibGliNjQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtiYXNlbGlifSBsaWI2NAorICAgICAgICAgICAgICAgZmkKKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4zCisgICAgICAgZmkKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LnNvLjIgbGQtbHNiLnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC1saW51eC5zby4yIGxkLWxzYi5zby4zCisgICAgICAgZmkKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorICAgICAgICAgICAgICAgY2QgJHtEfQorICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlbGlifSIgIT0gImxpYjY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7YmFzZWxpYn0gbGliNjQKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBjZCAke0R9LyR7YmFzZWxpYn0KKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjMKKyAgICAgICBmaQorICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQuc28uMSBsZC1sc2ItcHBjMzIuc28uMgorICAgICAgICAgICAgICAgbG4gLXNmIGxkLnNvLjEgbGQtbHNiLXBwYzMyLnNvLjMKKyAgICAgICBmaQorfQorRklMRVNfJHtQTn0gKz0gIi9saWI2NCBcCisgICAgICAgICAgICAgICAgL3Vzci9saWIvbHNiIFwKKyAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9sc2IvKiBcCisgICAgICAgICAgICAgICAgL2xpYi9sc2IvKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDljOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZnVuY3Rpb25zOiBhdm9pZCBleGl0IDEgd2hpY2ggY2F1c2VzIGluaXQgc2NyaXB0cyB0byBmYWlsCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHJjLmQvaW5pdC5kL2Z1bmN0aW9ucyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworaW5kZXggNjg1MDA0Ni4uMTEyMjNmNyAxMDA2NDQKKy0tLSBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGIvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtNTk3LDUgKzU5Nyw1IEBAIGlmIFsgIiRfdXNlX3N5c3RlbWN0bCIgPSAiMSIgXTsgdGhlbgorIAlmaQorIGZpCisgCistc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXgKKytzdHJzdHIgIiQoY2F0IC9wcm9jL2NtZGxpbmUpIiAicmMuZGVidWciICYmIHNldCAteCB8fCB0cnVlCisgCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy9mdW5jdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1NmQwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW5pdHNjcmlwdHMtOS40My5vcmlnL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtMTMsNiArMTMsNyBAQCB1bWFzayAwMjIKKyBQQVRIPSIvc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIKKyBleHBvcnQgUEFUSAorIAorKworIGlmIFsgJFBQSUQgLW5lIDEgLWEgLXogIiRTWVNURU1DVExfU0tJUF9SRURJUkVDVCIgXSAmJiBcCisgCQkoIC9iaW4vbW91bnRwb2ludCAtcSAvY2dyb3VwL3N5c3RlbWQgfHwgL2Jpbi9tb3VudHBvaW50IC1xIC9zeXMvZnMvY2dyb3VwL3N5c3RlbWQgKSA7IHRoZW4KKyAgICAgICAgIGNhc2UgIiQwIiBpbgorQEAgLTU0LDcgKzU1LDcgQEAgc3lzdGVtY3RsX3JlZGlyZWN0ICgpIHsKKyBbIC16ICIke0NPTFVNTlM6LX0iIF0gJiYgQ09MVU1OUz04MAorIAorIGlmIFsgLXogIiR7Q09OU09MRVRZUEU6LX0iIF07IHRoZW4KKy0gIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIF07IHRoZW4KKysgIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIC1hIC1lIC9zYmluL2NvbnNvbGV0eXBlIF07IHRoZW4KKyAgICAgQ09OU09MRVRZUEU9IiQoL3NiaW4vY29uc29sZXR5cGUgPCAvZGV2L3N0ZGVyciAyPi9kZXYvbnVsbCkiCisgICBlbHNlCisgICAgIENPTlNPTEVUWVBFPSJzZXJpYWwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNjY3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIHdoaWNoIGFyZSBvbmx5IHVzZWQgaW4gYW4gTFNCIGltYWdlIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0RFUEVORFMgPSAicG9wdCBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWJmNGU4YjQ5NzgwYWIxODdkNTFiZDI2YWFhMDIyYzYiCisKK1M9IiR7V09SS0RJUn0vaW5pdHNjcmlwdHMtJHtQVn0iCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyLzljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4YjU5Y2U4MTU3Y2ZjNThiYmQ0YjFkZmE1OGFkMTA4NzI0NTc2MWFlMTFjMjAzM2I2NmFlMzg2NGVhN2UxY2YiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmdW5jdGlvbnMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCisKKyMgU2luY2Ugd2UgYXJlIG9ubHkgdGFraW5nIHRoZSBwYXRjaGVkIHZlcnNpb24gb2YgZnVuY3Rpb25zLCBubyBuZWVkIHRvCisjIGNvbmZpZ3VyZSBvciBjb21waWxlIGFueXRoaW5nIHNvIGRvIG5vdCBleGVjdXRlIHRoZXNlCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIiAKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIiAKKworZG9faW5zdGFsbCgpeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zCisJc2VkIC1pICdzLCR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQsJHtiaW5kaXJ9L21vdW50cG9pbnQsZycgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTcxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKQEAgLTAsMCArMSw1MjYgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoQykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworCitXT1JLX0RJUj0iL29wdC9sc2ItdGVzdCIKKworaWYgWyBgaWQgLXVgIC1uZSAwIF0KK3RoZW4KKwljYXQgPDwgRU9GCisJSW4gb3JkZXIgdG8gaW5zdGFsbCBhbmQgcnVuIExTQiB0ZXN0c3VpdGUsIHlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4KKwlZb3UgYXJlIGN1cnJlbnRseSBydW5uaW5nIHRoaXMgc2NyaXB0IGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLgorCitFT0YKKwlleGl0IDEKK2ZpCisKK0FSQ0g9YHVuYW1lIC1tYAoraWYgWyAke0FSQ0h9ICE9ICJpNjg2IiBdICYmIFsgJHtBUkNIfSAhPSAieDg2XzY0IiBdICYmIFsgJHtBUkNIfSAhPSAicHBjIiBdICYmIFsgJHtBUkNIfSAhPSAicHBjNjQiIF0KK3RoZW4KKwllY2hvICJFcnJvcjogVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgorCWV4aXQgMQorZmkKKword2hpY2ggcnBtCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwllY2hvICJObyBycG0gY29tbWFuZCBmb3VuZCIKKwlleGl0IDEKK2ZpCisKK1JFVD0wCisKK2NkICR7V09SS19ESVJ9IHx8IGV4aXQgMQorIyBTdGVwIDE6IERvd25sb2FkIHRoZSBMU0IgUGFja2FnZXMKK2VjaG8gIiIKK2VjaG8gIkRvd25sb2FkIExTQiBwYWNrYWdlcy4uLiIKK2VjaG8gIiIKKworaWYgWyAhIC1lIC4vcGFja2FnZXNfbGlzdCBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHBhY2thZ2VzIGxpc3QiID4mMgorCWV4aXQgMQorZmkKKworLiAuL3BhY2thZ2VzX2xpc3QKKworUEFDS0FHRVNfRElSPSIvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3BhY2thZ2VzL2Z0cC5saW51eGZvdW5kYXRpb24ub3JnL3B1Yi9sc2IiCisKK0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYmFzZS8ke0xTQl9SRUxFQVNFfS9iaW5hcnkiCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vdGVzdF9zdWl0ZXMvcmVsZWFzZWQtYWxsL2JpbmFyeS9ydW50aW1lIgorUlVOVElNRV9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK0FQUF9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK0FQUF9URVNURklMRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYXBwLWJhdHRlcnkvdGVzdHMiCitTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L3NuYXBzaG90cy9hcHBiYXQvdGVzdHMiCisKK2lmIFsgISAtZCAke1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0JBU0VfUEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke1JVTlRJTUVfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke0FQUF9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0FQUF9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtBUFBfVEVTVEZJTEVTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7QVBQX1RFU1RGSUxFU19ESVJ9CitmaQorCisjIE9mZmljaWFsIGRvd25sb2FkIHNlcnZlciBsaXN0LiBZb3UgY2FuIHJlcGxhY2UgdGhlbSB3aXRoIHlvdXIgb3duIHNlcnZlci4KK1NFUlZFUl9JUEFERFI9IjE0MC4yMTEuMTY5LjIzIgorU0VSVkVSX05BTUU9ImZ0cC5saW51eGZvdW5kYXRpb24ub3JnIgorCitpZiAhIGBncmVwIC1GIC1xICIke1NFUlZFUl9OQU1FfSIgL2V0Yy9ob3N0c2A7IHRoZW4KKwllY2hvICIke1NFUlZFUl9JUEFERFJ9CSR7U0VSVkVSX05BTUV9CSR7U0VSVkVSX05BTUV9IiA+PiAvZXRjL2hvc3RzCitmaQorCisjcGluZyAtYyA1ICR7U0VSVkVSX05BTUV9CisjaWYgWyAkPyAtbmUgMCBdCisjdGhlbgorIwllY2hvICJUaGUgc2VydmVyOiAke1NFUlZFUl9OQU1FfSBpcyB1bnJlYWNoYWJsZSIKKyMJZXhpdCAxCisjZmkKKworU0VSVkVSMT0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorU0VSVkVSMj0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjM9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjQ9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK1NFUlZFUjU9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS90ZXN0cyIKKworIyBXZSB1c2luZyAiY3VybCIgYXMgYSBkb3dubG9hZCB0b29sLCAid2dldCIgaXMgYW4gYWx0ZXJuYXRpdmUuCitDVVJMPWB3aGljaCBjdXJsYAorV0dFVD1gd2hpY2ggd2dldGAKK2lmIFsgISAteiAke0NVUkx9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7Q1VSTH0gLVIgLUwgLWYgLS1yZXRyeSAzIC0tcmV0cnktZGVsYXkgNCAtLWNvbm5lY3QtdGltZW91dCAxODAgLS1jb21wcmVzc2VkIC1DIC0gLW8iCitlbGlmIFsgISAteiAke1dHRVR9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7V0dFVH0gLWMgLXQgNSAtTyIKK2Vsc2UKKwllY2hvICJDYW4gbm90IGZpbmQgYSBkb3dubG9hZCB0b29sLCBwbGVhc2UgaW5zdGFsbCBjdXJsIG9yIHdnZXQuIgorCWV4aXQgMQorZmkKKworY2QgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7QVBQX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfVEVTVEZJTEVTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2lmIFsgJHtSRVR9IC1uZSAwIF0KK3RoZW4KKwllY2hvICJEb3dubG9hZCBzb21lIHBhY2thZ2VzIGZhaWxlZC4gUGxlYXNlIGRvd25sb2FkIHRoZW0gYWdhaW4uIgorCWV4aXQgMQorZmkKKworIyBTdGVwIDI6IEluc3RhbGwgdGhlIExTQiBQYWNrYWdlcworZWNobyAiIgorZWNobyAiSW5zdGFsbCBMU0IgcGFja2FnZXMuLi4iCitlY2hvICIiCisKKyMgS2lsbCBsaWdodHRwZAorcHMgYXV4IHwgZ3JlcCAibGlnaHR0cGQiIHwgZ3JlcCAtdiAtcSAiZ3JlcCIKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWtpbGxhbGwgbGlnaHR0cGQgPi9kZXYvbnVsbCAyPiYxCitmaQorCisjIFN0YXJ0IGF2YWhpLWRhZW1vbgorcHMgYXV4IHwgZ3JlcCAiYXZhaGktZGFlbW9uIiB8IGdyZXAgLXYgLXEgImdyZXAiCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwkvZXRjL2luaXQuZC9hdmFoaS1kYWVtb24gc3RhcnQgPi9kZXYvbnVsbCAyPiYxCitmaQorCitMU0JfU1RBUlRfQ01EPSIvb3B0L2xzYi90ZXN0L21hbmFnZXIvYmluL2Rpc3QtY2hlY2tlci1zdGFydC5wbCIKK0xTQl9TVE9QX0NNRD0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL2Jpbi9kaXN0LWNoZWNrZXItc3RvcC5wbCIKKworUExBVEZPUk1fRklMRT0iL2V0Yy9ycG0vcGxhdGZvcm0iCisKK1JQTV9JTlNUQUxMX0NNRD0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2lnbmF0dXJlIC1pIgorUlBNX0lOU1RBTExfQ01EX05PU0NSSVBUUz0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2NyaXB0cyAtLW5vc2lnbmF0dXJlIC1pIgorCisjIElmIHRoZSBsc2IgaGFzIGJlZW4gc3RhcnRlZCwgc3RvcCBpdCBmaXJzdC4KK2lmIFsgLXggJHtMU0JfU1RPUF9DTUR9IF0KK3RoZW4KKwkke0xTQl9TVE9QX0NNRH0KK2ZpCisKK2lmIFsgISAtZCAvZXRjL3JwbSBdCit0aGVuCisJbWtkaXIgLXAgL2V0Yy9ycG0KK2ZpCisKK2lmIFsgISAtZiAke1BMQVRGT1JNX0ZJTEV9IF0KK3RoZW4KKwl0b3VjaCAke1BMQVRGT1JNX0ZJTEV9CitmaQorCitpZiAhIGBncmVwIC1GIC1xICJub2FyY2gtc3VzZSIgJHtQTEFURk9STV9GSUxFfWA7IHRoZW4KKwlpZiBbICR7QVJDSH0gPSBpNjg2IF07dGhlbgorCQllY2hvICJpNDg2LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWVsaWYgWyAke0FSQ0h9ID0geDg2XzY0IF07IHRoZW4KKwkJZWNobyAiaTQ4Ni1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni0uKi1saW51eC4qIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIm5vYXJjaC1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LW5vYXJjaCIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LXBjIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJZWxzZQorCQllY2hvICIke0FSQ0h9LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWZpCitmaQorCitpZiBbIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke0JBU0VfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCWZpCisJZG9uZQorZmkKKworaWYgWyAtZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19MSVNUfQorCWRvCisJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkkUlBNX0lOU1RBTExfQ01EICR7cGtnfQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgLWQgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfUEFDS0FHRVNfTElTVH0KKwlkbworCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJZmkKKwlkb25lCitmaQorCitpZiBbIC1kICR7QVBQX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7QVBQX1BBQ0tBR0VTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJZWNobyAiJHtwa2d9IiB8IGdyZXAgLXEgImFwYWNoZVx8eHBkZiIKKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCSRSUE1fSU5TVEFMTF9DTURfTk9TQ1JJUFRTICR7cGtnfQorCQkJZmkKKwkJZWxzZQorCQkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJCWZpCisJCWZpCisJZG9uZQorZmkKKworaWYgWyAhIC1kICR7U05BUFNIT1RTX1RFU1RGSUxFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorZmkKKworaWYgWyAtZCAke0FQUF9URVNURklMRVNfRElSfSBdCit0aGVuCisJY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1RFU1RGSUxFU19MSVNUfQorCWRvCisJCWNwIC1mICR7cGtnfSAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorCWRvbmUKK2ZpCisKK2NkICR7V09SS19ESVJ9CisKKyMgU3RlcCAzOiBTZXQgZW52aXJvbm1lbnQKK2VjaG8gIiIKK2VjaG8gIlNldCBlbnZpcm9ubWVudC4uLiIKK2VjaG8gIiIKKworY2hlY2sgKCkKK3sKKwlpZiBbICQ/IC1lcSAwIF0KKwl0aGVuCisJCWVjaG8gIlBBU1MiCisJZWxzZSAKKwkJZWNobyAiRkFJTCIKKwkJZXhpdCAxCisJZmkKK30KKworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiQ3JlYXRlIHRoZSBEaXJuYW1lcyBvbiB0YXJnZXQiCisKK2lmIFsgISAtZCAvZXRjL3JwbS9zeXNpbmZvIF0KK3RoZW4KKwlta2RpciAtcCAvZXRjL3JwbS9zeXNpbmZvCitmaQorCitjYXQgPiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIDw8IEVPRgorL2V0Yy9vcHQvbHNiCisvaG9tZS90ZXQvTFNCLnRvb2xzCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL2tzaAorL29wdC9sc2ItdGV0My1saXRlL2xpYi9wZXJsCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3Bvc2l4X3NoCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3RldDMKKy9vcHQvbHNiLXRldDMtbGl0ZS9saWIveHBnM3NoCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsL0RvY3VtZW50VGVtcGxhdGUKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS90ZXN0L2NsYXNzZXMKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdC93ZWIKKy9vcHQvbHNiL3Rlc3QvZG9jCisvb3B0L2xzYi90ZXN0L2xpYgorL29wdC9sc2IvdGVzdC9xbS9kaWFnbm9zdGljcworL29wdC9sc2IvdGVzdC9xbS9kb2MKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jL3Rlc3QvaHRtbAorL29wdC9sc2IvdGVzdC9xbS9kb2MvdGVzdC9wcmludAorL29wdC9sc2IvdGVzdC9xbS9kdG1sCisvb3B0L2xzYi90ZXN0L3FtL2R0bWwvdGVzdAorL29wdC9sc2IvdGVzdC9xbS9tZXNzYWdlcy90ZXN0Cisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiCisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiL1FNVGVzdAorL29wdC9sc2IvdGVzdC9xbS93ZWIKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViL2ltYWdlcworL29wdC9sc2IvdGVzdC9xbS93ZWIvc3R5bGVzaGVldHMKKy9vcHQvbHNiL3Rlc3QvcW0veG1sCisvb3B0L2xzYi90ZXN0L3NoYXJlCisvdXNyL3NoYXJlL2RvYy9sc2ItcnVudGltZS10ZXN0CisvdmFyL29wdC9sc2IKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2ZvbnRjb25maWcKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9mcmVldHlwZQorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2d0a3Z0cworL29wdC9sc2IvdGVzdC9kZXNrdG9wL2xpYnBuZworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3F0MworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hmdAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3htbAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hyZW5kZXIKKworCitFT0YKKworaWYgWyAtZiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIF0KK3RoZW4KKwllY2hvICJTdWNjZXNzIHRvIGNyZWF0IERpcm5hbWVzIGZpbGUiCitlbHNlIAorCWVjaG8gIkZhaWwgdG8gY3JlYXQgRGlybmFtZXMgZmlsZSIKK2ZpCisKK1sgLXggL3NiaW4vbGRjb25maWcgXSAmJiB7CitlY2hvICIiCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJVcGRhdGUgY2FjaGUiCisvc2Jpbi9sZGNvbmZpZworY2hlY2s7Cit9CisKKyMgQ2hlY2sgbG9vcCBkZXZpY2UKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0KK3RoZW4KKwlpbnNtb2QgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAva2VybmVsL2RyaXZlcnMvYmxvY2svbG9vcC5rbworCWlmIFsgJD8gIT0gMCBdO3RoZW4KKwkJZWNobyAiSW5zbW9kIGxvb3Aua28gZmFpbGVkLiIKKwlmaQorZmkKKworIyBSZXNvbHZlIGxvY2FsaG9zdAorTE9DQUxIT1NUPWBob3N0bmFtZWAKK2lmICEgYGdyZXAgLUYgLXEgIiRMT0NBTEhPU1QiIC9ldGMvaG9zdHNgOyB0aGVuCisJZWNobyAiMTI3LjAuMC4xCSRMT0NBTEhPU1QiID4+IC9ldGMvaG9zdHMKK2ZpCisKKyMgV29ya2Fyb3VuZCB0byBhZGQgcGFydCBvZiBsb2NhbGVzIGZvciBMU0IgdGVzdAorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIElTTy04ODU5LTEgZGVfREUKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBJU08tODg1OS0xNSBkZV9ERS5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIFVURi04IGRlX0RFLlVURi04Citsb2NhbGVkZWYgLWkgZGVfREVAZXVybyAtZiBJU08tODg1OS0xNSBkZV9ERUBldXJvCitsb2NhbGVkZWYgLWkgZW5fSEsgLWYgSVNPLTg4NTktMSBlbl9ISworbG9jYWxlZGVmIC1pIGVuX1BIIC1mIElTTy04ODU5LTEgZW5fUEgKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xNSBlbl9VUy5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPLTg4NTktMQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBVVEYtOCBlbl9VUy5VVEYtOAorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPODg1OS0xCitsb2NhbGVkZWYgLWkgZXNfTVggLWYgSVNPLTg4NTktMSBlc19NWAorbG9jYWxlZGVmIC1pIGZyX0ZSIC1mIElTTy04ODU5LTEgZnJfRlIKK2xvY2FsZWRlZiAtaSBpdF9JVCAtZiBJU08tODg1OS0xIGl0X0lUCitsb2NhbGVkZWYgLWkgamFfSlAgLWYgRVVDLUpQIGphX0pQLmV1Y2pwCitsb2NhbGVkZWYgLWkgc2VfTk8gLWYgVVRGLTggc2VfTk8uVVRGLTgKK2xvY2FsZWRlZiAtaSB0YV9JTiAtZiBVVEYtOCB0YV9JTgorbG9jYWxlZGVmIC1pIGVzX0VTIC1mIElTTy04ODU5LTEgZXNfRVMKK2xvY2FsZWRlZiAtaSBmcl9GUkBldXJvIC1mIElTTy04ODU5LTEgZnJfRlJAZXVybworbG9jYWxlZGVmIC1pIGlzX0lTIC1mIFVURi04IGlzX0lTLlVURi04Citsb2NhbGVkZWYgLWkgemhfVFcgLWYgQklHNSB6aF9UVy5CSUc1Citsb2NhbGVkZWYgLWkgZW5fVVMgLWYgSVNPLTg4NTktMTUgZW5fVVMuSVNPLTg4NTktMTUKKworZWNobyAiIgorZWNobyAiSW5zdGFsbGF0aW9uIGRvbmUhIgorZWNobyAiIgorCisjIFN0ZXAgNDogU3RhcnQgTFNCIHRlc3QKK2lmIFsgLXggJHtMU0JfU1RBUlRfQ01EfSBdCit0aGVuCisJJHtMU0JfU1RBUlRfQ01EfQorZmkKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiUnVuIGFsbCB0aGUgY2VydGlmaWNhdGlvbiB2ZXJzaW9uIG9mIExTQiBUZXN0cyIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworTFNCX0RJU1RfQ0hFQ0tFUj0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3V0aWxzL2Rpc3QtY2hlY2tlci5wbCIKK1NFU1NJT049IiR7V09SS19ESVJ9L3Nlc3Npb24iCitpZiBbICEgLWUgJHtTRVNTSU9OfSBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHNlc3Npb24gZmlsZS4iCisJZWNobyAiWW91IG11c3QgcnVuIExTQiB0ZXN0IGZyb20gd2ViYnJvd2VyLiIKKwlleGl0IDEKK2ZpCisKK2lmIFsgLXggJHtMU0JfRElTVF9DSEVDS0VSfSBdCit0aGVuCisJJHtMU0JfRElTVF9DSEVDS0VSfSAtdjIgLWYgJHtTRVNTSU9OfQorCWNoZWNrCitmaQorCitlY2hvICIiCitlY2hvICJMU0IgdGVzdCBjb21wbGV0ZS4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgZmlsZSBpbiAvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3Jlc3VsdHMvIgorZWNobyAiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDgzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdApAQCAtMCwwICsxLDUwIEBACitMU0JfUkVMRUFTRT0icmVsZWFzZWQtNC4xLjAiCitMU0JfQVJDSD0ibHNiYXJjaCIKKworQkFTRV9QQUNLQUdFU19MSVNUPSJsc2Itc2V0dXAtNC4xLjAtMS5ub2FyY2gucnBtIgorCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVD0ibHNiLWRpc3QtY2hlY2tlci01LjAuMC4xLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtZGV2ZWwtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14dmZiLTEuMi4wLTIyLnRhcmdldGFyY2gucnBtIFwKKwkiCisKK1JVTlRJTUVfUEFDS0FHRVNfTElTVD0ibHNiLWNtZGNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItbGliY2hrLTQuMS40LTUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1xbS0yLjItMTIubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRhc2stZGlzdC10ZXN0a2l0LTQuMS45LTEubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS00LjEuMTUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY3BwLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLTQuMS45LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWRlc2t0b3AtdDJjLTQuMS4zLTMudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWxpYnN0ZGNwcC00LjEuMC0xOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1vbHZlci1jb3JlLTQuMS40LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXBlcmwtNC4xLjgtMS5ub2FyY2gucnBtIFwKKwlsc2ItdGVzdC1wcmludGluZy00LjEuMi0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1weXRob24tNC4xLjUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQzLWF6b3YtNC4xLjEtMy50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQ0LWF6b3YtNC4xLjMtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteHRzNS01LjEuNS00NS5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1hbHNhLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1jb3JlLXQyYy00LjEuMi0zLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC14bWwyLWF6b3YtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfUEFDS0FHRVNfTElTVD0ibHNiLXB5dGhvbi0yLjQuNi03LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1hcGFjaGUtMi4yLjE0LTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRjbC04LjUuNy04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1leHBlY3QtNS40My4wLTEzLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1ncm9mZi0xLjIwLjEtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcmFwdG9yLTEuNC4xOS01LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14cGRmLTEuMDEtMTQubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXNhbWJhLTMuNC4zLTkubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJzeW5jLTMuMC42LTYubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfVEVTVEZJTEVTX0xJU1Q9ImV4cGVjdC10ZXN0cy50YXIgXAorCXRjbC10ZXN0cy50YXIgXAorCXJhcHRvci10ZXN0cy50YXIgXAorCXRlc3QxLnBkZiBcCisJdGVzdDIucGRmIFwKKwkiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjYTJlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCkBAIC0wLDAgKzEsMTk0IEBACitbR0VORVJBTF0KK1ZFUkJPU0VfTEVWRUw6ICAgMQorQVJDSElURUNUVVJFOiAgICB0YXJnZXRhcmNoCitVU0VfSU5URVJORVQ6ICAgIDEKK1NURF9WRVJTSU9OOiAgICAgTFNCIDQuMQorU1REX1BST0ZJTEU6ICAgICBubworW2NtZGNoa10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbbGliY2hrXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1thbHNhLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbYWxzYS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Fsc2EtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvYWxzYS10MmMvcmVzdWx0cworCitbY29yZV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZXxsb2NhbHwqXQorQVVUT1JFUExZX1BST1ZJREVTX0JBU0g6IG4KK0FVVE9SRVBMWV9URVNUUlVOX1BBVEg6IC9ob21lL3RldC90ZXN0X3NldHMKK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX0tFUk5FTF9OQU1FOiB2bWxpbnV6CitBVVRPUkVQTFlfSU5TVEFMTF9MU0JQQU1fQ09ORjogeQorQVVUT1JFUExZX1BST1ZJREVTX0NfU0hFTEw6IG4KK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX1NFVF9QQVNTX01JTl9EQVlTOiB5CitBVVRPUkVQTFlfUFJPVklERVNfU1lTVl9JTklUOiAKK0FVVE9SRVBMWV9JU05UQUxMX0RFVlM6IHkKK0FVVE9SRVBMWV9TVVBQT1JUU19GSUxFX0NNRDogeQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS90ZXQvdGVzdF9zZXRzCitBVVRPUkVQTFlfU1VQUE9SVFNfTkxTOiBuCitBVVRPUkVQTFlfU1VQUE9SVFNfUFJPQ0VTU19BQ0NPVU5USU5HOiBuCitBVVRPUkVQTFlfUEFUSF9UT19SQy5EOiAKK0FVVE9SRVBMWV9BTExPV1NfTUFLRURFVjogbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUvdGV0L3Rlc3Rfc2V0cy9yZXN1bHRzCisKK1tjb3JlLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS10MmMvcmVzdWx0cworCitbY3BwLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY3BwLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY3BwLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NwcC10MmMvcmVzdWx0cworCitbZGVza3RvcF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZGVza3RvcHxsb2NhbHwqXQorQVVUT1JFUExZX0RFU0tUT1BfRU5WSVJPTk1FTlQ6IFtkZWZhdWx0XQorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcAorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1NIT1dfU1VNTUFSWV9SRVBPUlQ6IAorQVVUT1JFUExZX09SR0FOSVNBVElPTjogTi9BCitBVVRPUkVQTFlfWFZGQl9ESVNQTEFZOiBbZGVmYXVsdF0KKworW2Rlc2t0b3AtdDJjXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tkZXNrdG9wLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcC10MmMKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9kZXNrdG9wLXQyYy9yZXN1bHRzCisKK1tsaWJzdGRjcHBdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2xpYnN0ZGNwcHxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9saWJzdGRjcHBfNC4xLjAKK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX0dOVV9UUklQTEVUOiAKKworW29sdmVyXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tvbHZlcnxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3Qvb2x2ZXItY29yZQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvdmFyL29wdC9sc2IvdGVzdC9vbHZlci1jb3JlCisKK1twZXJsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1twZXJsfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9wZXJsCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcGVybC9yZXN1bHRzCisKK1twcmludGluZ10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcHJpbnRpbmd8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3ByaW50aW5nCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcHJpbnRpbmcvcmVzdWx0cworCitbcHl0aG9uXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tweXRob258bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbi9yZXN1bHRzCisKK1txdDMtYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcXQzLWF6b3Z8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92CitBVVRPUkVQTFlfWDExX0ZPTlRfUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcXQzLWF6b3YvcmVzdWx0cworCitbcXQ0LWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3F0NC1hem92fGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9xdDQtYXpvdgorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3F0NC1hem92L3Jlc3VsdHMKKworW3htbDItYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNXxsb2NhbHwqXQorQVVUT1JFUExZX1hUX0ZPTlRQQVRIX0dPT0Q6IFtkZWZhdWx0XQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNQorQVVUT1JFUExZX1hWRkJfRElTUExBWTogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNS94dHM1L3Jlc3VsdHMKK0FVVE9SRVBMWV9YVF9GT05UUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorCitbYXBhY2hlXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tleHBlY3RdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2dyb2ZmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tyYXB0b3JdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3JzeW5jXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tzYW1iYV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbdGNsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1t4cGRmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiQXV0b21hdGVzIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdGVzdHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xTQl9UZXN0LnNoO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTcwNjNiYjU0YjA0NzE5ZGYwNzE2YjUxMzQ0N2Y0ZmMwIgorCitTUkNfVVJJID0gImZpbGU6Ly9MU0JfVGVzdC5zaCBcCisJCSAgIGZpbGU6Ly9wYWNrYWdlc19saXN0IFwKKwkJICAgZmlsZTovL3Nlc3Npb24gXAorCQkgICAiCitSREVQRU5EU18ke1BOfSA9ICJycG0iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9MU0JfVGVzdC5zaCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAgJHtEfS9vcHQvbHNiLXRlc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9wYWNrYWdlc19saXN0ICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXNzaW9uICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL2lhMzIvZycgLWUgJ3MvdGFyZ2V0YXJjaC9pNDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gveDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9hbWQ2NC9nJyAtZSAncy90YXJnZXRhcmNoL3g4Nl82NC9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL3g4Ni02NC9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL3BwYzMyL2cnIC1lICdzL3RhcmdldGFyY2gvcHBjL2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gvUFBDMzIvZycgJHtEfS9vcHQvbHNiLXRlc3Qvc2Vzc2lvbgorCWZpCisKKwkjIEZvciBhIHBwYzY0IHRhcmdldC4gdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGlzIDMyYi4KKwkjIFRoZXJlZm9yZSwgb25seSBjaGFuZ2UgdGhlIGxzYmFyY2ggYW5kIHRhcmdldGFyY2gKKwkjIGluIHRoZSBwYWNrYWdlX2xpc3Qgd2hlbiBNTElCPWxpYjY0IGlzIGJlaW5nIHVzZWQuCisJIyBPdGhlcndpc2UsIGJ5IGRlZmF1bHQsIHRoZSBwcGMzMiBMU0IgcGFja2FnZXMKKwkjIHdpbGwgYmUgZG93bmxvYWRlZCBieSBMU0JfVGVzdC5zaAorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQlpZiBbICIke1BOfSIgIT0gIiR7QlBOfSIgXTt0aGVuCisJCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9wcGM2NC9nJyAtZSAncy90YXJnZXRhcmNoL3BwYzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL1BQQzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfSArPSAiL29wdC9sc2ItdGVzdC8qIFwKKyAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdkZTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCkBAIC0wLDAgKzEsNTcgQEAKK1NVTU1BUlkgPSAiTGlTdCBPcGVuIEZpbGVzIHRvb2wiCitERVNDUklQVElPTiA9ICJMc29mIGlzIGEgVW5peC1zcGVjaWZpYyBkaWFnbm9zdGljIHRvb2wuIFwKK0l0cyBuYW1lIHN0YW5kcyBmb3IgTGlTdCBPcGVuIEZpbGVzLCBhbmQgaXQgZG9lcyBqdXN0IHRoYXQuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorCitTUkNfVVJJID0gImZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvbHNvZl8ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI5Y2QzNGYzZmI4Njg1NmExMjVhYmJmMmJlM2EzODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFhYzJmYzVmZGM5NDQ3OTNiYWY0MWExNDAwMmI2ZGViNWEyOTA5NmIzODc3NDRlMjhmOGMzMGEzNjBhMzcxOCIKKworTE9DQUxTUkMgPSAiZmlsZTovLyR7V09SS0RJUn0vbHNvZl8ke1BWfS9sc29mXyR7UFZ9X3NyYy50YXIiCitTID0gIiR7V09SS0RJUn0vbHNvZl8ke1BWfV9zcmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vMDBSRUFETUU7YmVnaW5saW5lPTY0NTtlbmRsaW5lPTY3OTttZDU9OTY0ZGYyNzVkMjY0MjliYTNiMzlkYmI5ZjIwNTE3MmEiCisKK3B5dGhvbiBkb191bnBhY2sgKCkgeworICAgICMgdGVtcG9yYXJpbHkgY2hhbmdlIFMgZm9yIHVucGFjaworICAgICMgb2YgbHNvZl8ke1BWfQorICAgIHMgPSBkLmdldFZhcignUycsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vbHNvZl8ke1BWfScpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgIyB0ZW1wb3JhcmlseSBjaGFuZ2UgU1JDX1VSSSBmb3IgdW5wYWNrCisgICAgIyBvZiBsc29mXyR7UFZ9X3NyYworICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyR7TE9DQUxTUkN9JykKKyAgICBkLnNldFZhcignUycsIHMpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgZC5zZXRWYXIoJ1NSQ19VUkknLCBzcmNfdXJpKQorfQorCitleHBvcnQgTFNPRl9JTkNMVURFID0gIiR7U1RBR0lOR19JTkNESVJ9IgorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBMU09GX0FSPSIke0FSfSBjciIKKwlleHBvcnQgTFNPRl9SQU5MSUI9IiR7UkFOTElCfSIKKyAgICAgICAgaWYgWyAieCR7R0xJQkNWRVJTSU9OfSIgIT0gIngiIF07dGhlbgorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9YGVjaG8gJHtHTElCQ1ZFUlNJT059IHxzZWQgLWUgJ3MsXC4sLGcnYAorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9Ii1ER0xJQkNWPSR7TElOVVhfQ0xJQn0iCisgICAgICAgICAgICAgICAgZXhwb3J0IExJTlVYX0NMSUIKKyAgICAgICAgZmkKKwl5ZXMgfCAuL0NvbmZpZ3VyZSBsaW51eAorfQorCitleHBvcnQgSSA9ICIke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBMID0gIiR7U1RBR0lOR19JTkNESVJ9IgorZXhwb3J0IEVYVFJBX09FTUFLRSA9ICIiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAnQ0ZHTD0ke0xERkxBR1N9IC1MLi9saWIgLWxsc29mJyAnREVCVUc9JyAnSU5DTD0ke0NGTEFHU30nCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSA0NzU1IGxzb2YgJHtEfSR7c2JpbmRpcn0vbHNvZgorCWluc3RhbGwgLW0gMDY0NCBsc29mLjggJHtEfSR7bWFuZGlyfS9tYW44L2xzb2YuOAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLVJlbmFtZS1ydW50ZXN0c19ub2x0cC5zaC1zY3JpcHQtc28taGF2ZS11bmlxdWUtbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjRkMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwyMDIgQEAKK0Zyb20gOTc1MWE2NTI2Y2ZmY2RmNGUzZGMyY2IzMzY0MTI1OWE3YmUwMGUxOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNyBEZWMgMjAxMyAxODoyNDozMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnVudGVzdHNfbm9sdHAuc2ggc2NyaXB0IHNvIGhhdmUgdW5pcXVlIG5hbWUKKworKiB0aGV5IGFyZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgdGFyZ2V0IHBhdGgKKyAgL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaAorICBhbmQgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaW4gbm9uLWRldGVybWluaXN0aWMgd2F5CisgIHdoZW4gbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB1c2VkIGluICJtYWtlIGluc3RhbGwiCisKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoIHwgMzEgKysrKysrKysrKysrKysrKworIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgMzEgLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgNDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODRmMzk4ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVuaXBjdGVzdHNfbm9sdHAuc2gKK0BAIC0wLDAgKzEsMzEgQEAKKysjIS9iaW4vc2gKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCisrIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKysjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworKyMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworKyMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCisrIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKysjIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKysjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworKyMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrZXhpdF9jb2RlPTAKKytlY2hvICJzeXN2aXBjIHRlc3RzIgorK2ZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKysgICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCisrICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKysgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysgICAgICAgICAgICAgIGV4aXRfY29kZT0kPworKyAgICAgIGZpCisrZG9uZQorK2V4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODRmMzk4Zi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDMxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistZXhpdF9jb2RlPTAKKy1lY2hvICJzeXN2aXBjIHRlc3RzIgorLWZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKy0gICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCistICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKy0gICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0gICAgICAgICAgICAgIGV4aXRfY29kZT0kPworLSAgICAgIGZpCistZG9uZQorLWV4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggNDNjYjdlMi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDQxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistb2xkaG9zdG5hbWU9YGhvc3RuYW1lYAorLWV4aXRfY29kZT0wCistZWNobyAidW5zaGFyZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKHVuc2hhcmUpIgorLQkuL3V0c3Rlc3Rfbm9sdHAgdW5zaGFyZSAkaQorLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0JCWV4aXRfY29kZT0kPworLQlmaQorLWRvbmUKKy1lY2hvICJjbG9uZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKGNsb25lKSIKKy0JLi91dHN0ZXN0X25vbHRwIGNsb25lICRpCistCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorLQkJZXhpdF9jb2RlPSQ/CistCWZpCistZG9uZQorLWhvc3RuYW1lICIkb2xkaG9zdG5hbWUiCistZXhpdCAkZXhpdF9jb2RlCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudXRzdGVzdHNfbm9sdHAuc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjQzY2I3ZTIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCitAQCAtMCwwICsxLDQxIEBACisrIyEvYmluL3NoCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCisrIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKysjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKysjIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworKyMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCisrIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCisrIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKysjIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK29sZGhvc3RuYW1lPWBob3N0bmFtZWAKKytleGl0X2NvZGU9MAorK2VjaG8gInVuc2hhcmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpICh1bnNoYXJlKSIKKysJLi91dHN0ZXN0X25vbHRwIHVuc2hhcmUgJGkKKysJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCQlleGl0X2NvZGU9JD8KKysJZmkKKytkb25lCisrZWNobyAiY2xvbmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpIChjbG9uZSkiCisrCS4vdXRzdGVzdF9ub2x0cCBjbG9uZSAkaQorKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJCWV4aXRfY29kZT0kPworKwlmaQorK2RvbmUKKytob3N0bmFtZSAiJG9sZGhvc3RuYW1lIgorK2V4aXQgJGV4aXRfY29kZQorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVlYWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjQzODgxZDcxZDJkNDkwMjdjM2RjMTVmZTI3ZWJlN2Y0ZWU2ODcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAwOTo1MTowOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBsdHA6IHZtYTAzIGZpeCB0aGUgYWxnaW5tZW50IG9mIHBhZ2Ugc2l6ZQorCit0aGUgb2Zmc2V0IHRoZSBwYXJhbSBvZiBtbWFwMigpIGRvZXNuJ3QgYWxpZ24gdGhlIHBhZ2Ugc2l6ZSwgYnV0LAordGhpcyBwYXJhbSBhbGxvdyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSBhcyByZXR1cm5lZAorYnkgc3lzY29uZihfU0NfUEFHRV9TSVpFKS5tZWFud2hpbGUgb2Zmc2V0ICogNDA5NiBtdXN0IGJlIGEKK211bHRpcGxlIG9mIHRoZSBzeXN0ZW0gcGFnZSBzaXplLCBzbyBtb2RpZnkgdGhlIGlucHV0IHBhcmFtIG9mIG9mZnNldAorcGdvZmYgPSAoVUxPTkdfTUFYIC0gMSkmKH4oKHBnc3otMSk+PjEyKSk7CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitpbmRleCA2YWY5OTYwLi5iODZkN2NlIDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitAQCAtODksNyArODksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJaWYgKGZkID09IC0xKQorIAkJCXRzdF9icmttKFRCUk9LIHwgVEVSUk5PLCBOVUxMLCAib3BlbiAlcyIsIFRFU1RGSUxFKTsKKyAKKy0JCXBnb2ZmID0gVUxPTkdfTUFYIC0gMTsKKysJCXBnb2ZmID0gKFVMT05HX01BWCAtIDEpJih+KChwZ3N6LTEpPj4xMikpOworIAkJbWFwID0gbW1hcDIoTlVMTCwgcGdzeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCisgCQkJICAgIGZkLCBwZ29mZik7CisgCQlpZiAobWFwID09IE1BUF9GQUlMRUQpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLW51bWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZjAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1tQQVRDSF0gYWRkIGtub2IgdG8gY29udHJvbCB3aGV0aGVyIG51bWEgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworb3RoZXJ3aXNlIHRoZSByYW5kb20gZGVwZW5kZW5jeSB3aWxsIGJlIGdlbmVyYXRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmMzk3ZTcuLjEzNTcyNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0Miw2ICsxNDIsMTIgQEAgZWxzZQorICAgICBBQ19TVUJTVChbV0lUSF9SRUFMVElNRV9URVNUU1VJVEVdLFsibm8iXSkKKyBmaQorIAorK0FDX0FSR19XSVRIKFtudW1hXSwKKysgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbnVtYV0sCisrICAgIFt3aXRob3V0IHRoZSBudW1hIHN1cHBvcnRdKSwKKysgIFtdLFt3aXRoX251bWE9eWVzXSwKKyspCisrCisgQUNfQ09ORklHX1NVQkRJUlMoW3V0aWxzL2Zmc2ItNi4wLXJjMl0pCisgCisgIyBFTkQgdGVzdHN1aXRlcyBrbm9icworQEAgLTE1OSw3ICsxNjUsOSBAQCBMVFBfQ0hFQ0tfU0lHTkFMCisgTFRQX0NIRUNLX1NZU0NBTExfRVZFTlRGRAorIExUUF9DSEVDS19TWVNDQUxMX0tFWUNUTAorIExUUF9DSEVDS19TWVNDQUxMX01PRElGWV9MRFQKKytpZiB0ZXN0ICJ4JHdpdGhfbnVtYSIgPSB4eWVzOyB0aGVuCisgTFRQX0NIRUNLX1NZU0NBTExfTlVNQQorK2ZpCisgTFRQX0NIRUNLX1NZU0NBTExfUVVPVEFDVEwKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9TSUdOQUxGRAorIExUUF9DSEVDS19TWVNDQUxMX1VOU0hBUkUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZmY0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorW1BBVENIXSBhZGQga25vYiB0byBjb250cm9sIHdoZXRoZXIgdGlycGMgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGlycGMgc3VwcG9ydCBpcyBicm9rZW4gdXBzdHJlYW0uIGluIHRoZSBtZWFudGltZSwgYWxsb3cgdG8gZGlzYWJsZSB0aXJwYy4KKworU2lnbmVkLW9mZi1ieTogRmF0aGkgQm91ZHJhIDxmYXRoaS5ib3VkcmFAbGluYXJvLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTk4LDYgKzk4LDEzIEBAIGlmIHRlc3QgIngkd2l0aF9weXRob24iID0geHllczsgdGhlbgorIGVsc2UKKyAgICAgQUNfU1VCU1QoW1dJVEhfUFlUSE9OXSxbIm5vIl0pCisgZmkKKysKKysjIFRJIFJQQworK0FDX0FSR19XSVRIKFt0aXJwY10sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXRpcnBjXSwKKysgICAgW3dpdGhvdXQgbGlidGlycGMgc3VwcG9ydF0pLAorKyAgW10sW3dpdGhfdGlycGM9eWVzXSwKKyspCisgIyBFTkQgdG9vbHMga25vYnMKKyAKKyAjIFRlc3RzdWl0ZXMga25vYnMKK0BAIC0xODIsNyArMTg5LDkgQEAgTFRQX0NIRUNLX1JFTkFNRUFUCisgTFRQX0NIRUNLX0ZBTExPQ0FURQorIExUUF9DSEVDS19TWVNDQUxMX0ZDTlRMCisgTFRQX0NIRUNLX1NZU0NBTExfUEVSRl9FVkVOVF9PUEVOCisraWYgdGVzdCAieCR3aXRoX3RpcnBjIiA9IHh5ZXM7IHRoZW4KKyBMVFBfQ0hFQ0tfVElSUEMKKytmaQorIExUUF9DSEVDS19URUUKKyBMVFBfQ0hFQ0tfU1BMSUNFCisgTFRQX0NIRUNLX1ZNU1BMSUNFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2x0cC1Eby1ub3QtbGluay1hZ2FpbnN0LWxpYmZsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmQ0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDViZGE5YzBhZjU2ODY5YzZmZjJjMjVkMzhlYTA4NzE3OWM5NDZiYzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTEgTWFyIDIwMTQgMTQ6NDc6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHRwOiBEb24ndCBsaW5rIGFnYWluc3QgbGliZmwKKworV2UgaGF2ZSBhbHJlYWR5IGRlZmluZWQgeXl3cmFwIGZ1bmN0aW9uIGluIHNjYW4ubCBmaWxlLiBBZnRlciB0aGlzLCB3ZSBubyBsb25nZXIgbmVlZCB0bworbGluayBhZ2FpbnN0IGxpYmZsIGFuZCBzbyBubyBsb25nZXIgZ2V0IGVycm9ycyBhYm91dCB1bmRlZmluZWQgcmVmZXJlbmNlcyB0byB5eWxleC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcGFuL01ha2VmaWxlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGFuL01ha2VmaWxlIGIvcGFuL01ha2VmaWxlCitpbmRleCA0Y2M2NDY2Li5hNGI1NzViIDEwMDY0NAorLS0tIGEvcGFuL01ha2VmaWxlCisrKysgYi9wYW4vTWFrZWZpbGUKK0BAIC0zMSw3ICszMSw3IEBAIENQUEZMQUdTCQkrPSAtV25vLWVycm9yCisgCisgQ1BQRkxBR1MJCSs9IC1JJChhYnNfc3JjZGlyKQorIAorLUxETElCUwkJCSs9IC1sbSAkKExFWExJQikKKytMRExJQlMJCQkrPSAtbG0KKyAKKyBMRkxBR1MJCQkrPSAtbAorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbWFrZS1zZXRyZWdpZDAyLXdvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzNjAxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1tQQVRDSF0gbWFrZSBzZXRyZWdpZDAyIHdvcmsKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0aGVyZSBpcyBubyAibm9ib2R5IiBncm91cCBpbiBvZS1jb3JlLCB0aGUgdXNlciAibm9ib2R5IiBiZWxvbmdzIHRvCisibm9ncm91cCIgZ3JvdXAsIHNvIHJlcGxhY2Ugbm9ib2R5IHdpdGggbm9ncm91cCB0byBtYWtlIHRoZSB0ZXN0IHBhc3MKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMgfCAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK2luZGV4IDgwNTg2MjcuLjg2NmJlZTQgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3NldHJlZ2lkL3NldHJlZ2lkMDIuYworKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK0BAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBnaWRfdCBuZWdfb25lID0gLTE7CisgCisgc3RhdGljIHN0cnVjdCBwYXNzd2QgKmx0cHVzZXI7CisgCistc3RhdGljIHN0cnVjdCBncm91cCBub2JvZHksIHJvb3QsIGJpbjsKKytzdGF0aWMgc3RydWN0IGdyb3VwIG5vZ3JvdXAsIHJvb3QsIGJpbjsKKyAKKyAvKgorICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0ZXN0IGRhdGEuICBFYWNoIHN0cnVjdHVyZSBpbiB0aGUgYXJyYXkKK0BAIC01NywxNyArNTcsMTcgQEAgc3RydWN0IHRlc3RfZGF0YV90IHsKKyAJY2hhciAqdGVzdF9tc2c7CisgfSB0ZXN0X2RhdGFbXSA9IHsKKyAJeworLQkmbmVnX29uZSwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJm5lZ19vbmUsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIHJvb3QpLCJ9LCB7CistCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIGJpbikifSwgeworLQkmcm9vdC5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwtMSksIn0sIHsKKy0JJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIC0xKSwifSwgeworLQkmcm9vdC5ncl9naWQsICZiaW4uZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwgYmluKSJ9LCB7CistCSZiaW4uZ3JfZ2lkLCAmcm9vdC5ncl9naWQsIEVQRVJNLCAmbm9ib2R5LCAmbm9ib2R5LAorKwkmYmluLmdyX2dpZCwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIHJvb3QpLCJ9CisgfTsKKyAKK0BAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHZvaWQgc2V0dXAodm9pZCkKKyB9IHdoaWxlICgwKQorIAorIAlHRVRfR0lEKHJvb3QpOworLQlHRVRfR0lEKG5vYm9keSk7CisrCUdFVF9HSUQobm9ncm91cCk7CisgCUdFVF9HSUQoYmluKTsKKyAKKyAJVEVTVF9QQVVTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE1MDQyMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhlYmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIKQEAgLTAsMCArMSw4NiBAQAorU1VNTUFSWSA9ICJMaW51eCBUZXN0IFByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgam9pbnQgcHJvamVjdCB3aXRoIFNHSSwgSUJNLCBPU0RMLCBhbmQgQnVsbCB3aXRoIGEgZ29hbCB0byBkZWxpdmVyIHRlc3Qgc3VpdGVzIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgdGhhdCB2YWxpZGF0ZSB0aGUgcmVsaWFiaWxpdHksIHJvYnVzdG5lc3MsIGFuZCBzdGFiaWxpdHkgb2YgTGludXguIFRoZSBMaW51eCBUZXN0IFByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIGZvciB0ZXN0aW5nIHRoZSBMaW51eCBrZXJuZWwgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0cC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9ydW5fZnJlZXplci5zaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE3O21kNT04NmE2MWQyYzA0MmQ1OTgzNmZmYjM1M2EyMTQ1NjQ5OCBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9tZW1vcnlfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9jcHVfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9DT1BZSU5HO21kNT0yMTZlNDNiNzJlZmJlNGVkOTAxN2NjMTljNGM2OGIwMSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9yZWFsdGltZS9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgZmlsZTovL3Rvb2xzL25ldHBpcGUtMi40L0NPUFlJTkc7bWQ1PTllMzc4MWJiNWZlNzg3YWE4MGUxZjUxZjUwMDZiNmZhIFwKKyAgICBmaWxlOi8vdG9vbHMvbmV0cGlwZS0yLjQtaXB2Ni9DT1BZSU5HO21kNT05ZTM3ODFiYjVmZTc4N2FhODBlMWY1MWY1MDA2YjZmYSBcCisgICAgZmlsZTovL3Rvb2xzL3RvcC1MVFAvcHJvYy9DT1BZSU5HO21kNT1hZWZjODhlYjhhNDE2NzJmYmZjZmU2YjY5YWI4YzQ5YyBcCisgICAgZmlsZTovL3Rvb2xzL3BvdW5kZXIyMS9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2JlbmNobWFyay9rZXJuYmVuY2gtMC40Mi9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2Zmc2ItNi4wLXJjMi9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisiCisKK0RFUEVORFMgPSAiYXR0ciBsaWJhaW8gbGliY2FwIGFjbCBvcGVuc3NsIHppcC1uYXRpdmUiCitTUkNSRVYgPSAiNzdkMGI3ZmQwMTQ4Y2U2NTdjNWEyNTA2MDY2N2U5NzhjMDc2NjJhMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9sdHAuZ2l0IFwKKyAgICBmaWxlOi8vMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggXAorICAgIGZpbGU6Ly9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBcCisgICAgZmlsZTovL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLWtub2ItZm9yLW51bWEucGF0Y2ggXAorICAgIGZpbGU6Ly9hZGQta25vYi1mb3ItdGlycGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWx0cC12bWEwMy1maXgtdGhlLWFsZ2lubWVudC1vZi1wYWdlLXNpemUucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2V4cG9ydCBwcmVmaXggPSAiL29wdC9sdHAiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL29wdC9sdHAiCisKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS13aXRoLW51bWEsIC0td2l0aG91dC1udW1hLCBudW1hY3RsLCIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi1JICR7U30vdGVzdGNhc2VzL3JlYWx0aW1lL200IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcG93ZXItbWFuYWdlbWVudC10ZXN0c3VpdGUgLS13aXRoLXJlYWx0aW1lLXRlc3RzdWl0ZSAiCisjIGx0cCBuZXR3b3JrL3JwYyB0ZXN0IGNhc2VzIGZ0YmZzIHdoZW4gbGlidGlycGMgaXMgZm91bmQKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC10aXJwYyAiCisKKyMgVGhlIG1ha2VmaWxlcyBtYWtlIGV4Y2Vzc2l2ZSB1c2Ugb2YgbWFrZSAtQyBhbmQgc2V2ZXJhbCBpbmNsdWRlIHRlc3RjYXNlcy5taworIyB3aGljaCB0cmlnZ2VycyBhIGJ1aWxkIG9mIHRoZSBzeXNjYWxsIGhlYWRlci4gVG8gcmVwcm9kdWNlLCBidWlsZCBsdHAsCisjIHRoZW4gZGVsZXRlIHRoZSBoZWFkZXIsIHRoZW4gIm1ha2UgLWogWFgiIGFuZCB3YXRjaCByZWdlbi5zaCBydW4gbXVsdGlwbGUKKyMgdGltZXMuIEl0cyBlYXNpZXIgdG8gZ2VuZXJhdGUgdGhpcyBvbmNlIGhlcmUgaW5zdGVhZC4KK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJKCBtYWtlIC1DICR7Qn0vdGVzdGNhc2VzL2tlcm5lbCBpbmNsdWRlL2xpbnV4X3N5c2NhbGxfbnVtYmVycy5oICkKK30KKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfS9vcHQvbHRwLworICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IFNLSVBfSURDSEVDSz0xIGluc3RhbGwKKworICAgICMgQ29weSBQT1NJWCB0ZXN0IHN1aXRlIGludG8gJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcyBieSBtYW51YWwKKyAgICBjcCAtciB0ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUgJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcworfQorCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIGUyZnNwcm9ncy1ta2UyZnMgcHl0aG9uLWNvcmUgbGliYWlvIGJhc2ggZ2F3ayBleHBlY3QiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgIC9vcHQvbHRwL3J1bnRlc3QvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RjYXNlcy8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC9zY2VuYXJpb19ncm91cHMvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0c2NyaXB0cy8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RzY3JpcHRzL29wZW5fcG9zaXhfdGVzdHN1aXRlLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiL29wdC9sdHAvbGliL2xpYm1lbS5hIgorCitGSUxFU18ke1BOfSArPSAiL29wdC9sdHAvKiAvb3B0L2x0cC9ydW50ZXN0LyogL29wdC9sdHAvc2NlbmFyaW9fZ3JvdXBzLyogL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vKi9iaW4vKiAvb3B0L2x0cC90ZXN0c2NyaXB0cy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9jb25mb3JtYW5jZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9Eb2N1bWVudGF0aW9uLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2Z1bmN0aW9uYWwvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvaW5jbHVkZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9zY3JpcHRzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3N0cmVzcy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS90b29scy8qIgorCisjIEF2b2lkIGdlbmVyYXRlZCBiaW5hcmllcyBzdHJpcHBpbmcuIE90aGVyd2lzZSBzb21lIG9mIHRoZSBsdHAgdGVzdHMgc3VjaCBhcyBsZGQwMSAmIG5tMDEgZmFpbHMKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisjIEhvd2V2ZXIsIHRlc3RfYXJjaF9zdHJpcHBlZCBpcyBhbHJlYWR5IHN0cmlwcGVkLCBzby4uLgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImFscmVhZHktc3RyaXBwZWQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2RhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb206IEx1ayBDbGFlcyA8bHVrQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDQgSnVsIDIwMDkgMTA6NTQ6NTMgKzAyMDAKK1N1YmplY3Q6IERvbid0IHJldXNlIHdlYWsgc3ltYm9sIG9wdG9wdCB0byBmaXggRlRCRlMgb24gbWlwcyoKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tIAorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGdldG9wdC5jIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dldG9wdC5jIGIvZ2V0b3B0LmMKK2luZGV4IDgzY2U2MjguLjgyZTk4M2MgMTAwNjQ0CistLS0gYS9nZXRvcHQuYworKysrIGIvZ2V0b3B0LmMKK0BAIC00Myw3ICs0Myw3IEBAIHR5cGVkZWYJaW50CXNzaXplX3Q7CisgY2hhcgkqb3B0YXJnOworIGludAlvcHRpbmQgPSAxOworIGludAlvcHRlcnIgPSAxOworLWludAlvcHRvcHQ7CisraW50CW9wdG9wdGM7CisgCisgc3RhdGljIHZvaWQKKyBlcnJvcihjb25zdCBjaGFyICpzLCBpbnQgYykKK0BAIC02OSw3ICs2OSw3IEBAIGVycm9yKGNvbnN0IGNoYXIgKnMsIGludCBjKQorIAkJKmJwKysgPSAqcysrOworIAl3aGlsZSAoKm1zZykKKyAJCSpicCsrID0gKm1zZysrOworLQkqYnArKyA9IG9wdG9wdDsKKysJKmJwKysgPSBvcHRvcHRjOworIAkqYnArKyA9ICdcbic7CisgCXdyaXRlKDIsIGJ1ZiwgYnAgLSBidWYpOworIAlhY19mcmVlKGJ1Zik7CitAQCAtMTAxLDEzICsxMDEsMTMgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCX0KKyAJCWN1cnAgPSAmYXJndltvcHRpbmRdWzFdOworIAl9CistCW9wdG9wdCA9IGN1cnBbMF0gJiAwMzc3OworKwlvcHRvcHRjID0gY3VycFswXSAmIDAzNzc7CisgCXdoaWxlIChvcHRzdHJpbmdbMF0pIHsKKyAJCWlmIChvcHRzdHJpbmdbMF0gPT0gJzonKSB7CisgCQkJb3B0c3RyaW5nKys7CisgCQkJY29udGludWU7CisgCQl9CistCQlpZiAoKG9wdHN0cmluZ1swXSAmIDAzNzcpID09IG9wdG9wdCkgeworKwkJaWYgKChvcHRzdHJpbmdbMF0gJiAwMzc3KSA9PSBvcHRvcHRjKSB7CisgCQkJaWYgKG9wdHN0cmluZ1sxXSA9PSAnOicpIHsKKyAJCQkJaWYgKGN1cnBbMV0gIT0gJ1wwJykgeworIAkJCQkJb3B0YXJnID0gKGNoYXIgKikmY3VycFsxXTsKK0BAIC0xMjcsNyArMTI3LDcgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCQkJCW9wdGluZCsrOworIAkJCQlvcHRhcmcgPSAwOworIAkJCX0KKy0JCQlyZXR1cm4gb3B0b3B0OworKwkJCXJldHVybiBvcHRvcHRjOworIAkJfQorIAkJb3B0c3RyaW5nKys7CisgCX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYWQ0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI3IEFwciAyMDExIDAwOjE4OjQyICswMjAwCitTdWJqZWN0OiBQYXRjaGVkIG91dCBTU0wyIHN1cHBvcnQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBPcGVuU1NMLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBtYWlseC4xICAgfCAgICAyICstCisgb3BlbnNzbC5jIHwgICAgNCArLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQoraW5kZXggNDE3ZWEwNC4uYTAyZTQzMCAxMDA2NDQKKy0tLSBhL21haWx4LjEKKysrKyBiL21haWx4LjEKK0BAIC0zNTc1LDcgKzM1NzUsNyBAQCBPbmx5IGFwcGxpY2FibGUgaWYgU1NML1RMUyBzdXBwb3J0IGlzIGJ1aWx0IHVzaW5nIE9wZW5TU0wuCisgLlRQCisgLkIgc3NsLW1ldGhvZAorIFNlbGVjdHMgYSBTU0wvVExTIHByb3RvY29sIHZlcnNpb247CistdmFsaWQgdmFsdWVzIGFyZSBgc3NsMicsIGBzc2wzJywgYW5kIGB0bHMxJy4KKyt2YWxpZCB2YWx1ZXMgYXJlIGBzc2wzJywgYW5kIGB0bHMxJy4KKyBJZiB1bnNldCwgdGhlIG1ldGhvZCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LAorIGlmIHBvc3NpYmxlLgorIC5UUAorZGlmZiAtLWdpdCBhL29wZW5zc2wuYyBiL29wZW5zc2wuYworaW5kZXggYjRlMzNmYy4uNDRmZTRlNSAxMDA2NDQKKy0tLSBhL29wZW5zc2wuYworKysrIGIvb3BlbnNzbC5jCitAQCAtMjE2LDkgKzIxNiw3IEBAIHNzbF9zZWxlY3RfbWV0aG9kKGNvbnN0IGNoYXIgKnVocCkKKyAKKyAJY3AgPSBzc2xfbWV0aG9kX3N0cmluZyh1aHApOworIAlpZiAoY3AgIT0gTlVMTCkgeworLQkJaWYgKGVxdWFsKGNwLCAic3NsMiIpKQorLQkJCW1ldGhvZCA9IFNTTHYyX2NsaWVudF9tZXRob2QoKTsKKy0JCWVsc2UgaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorKwkJaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorIAkJCW1ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAJCWVsc2UgaWYgKGVxdWFsKGNwLCAidGxzMSIpKQorIAkJCW1ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjczYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDIwOjIyOjQzICswMjAwCitTdWJqZWN0OiBGaXhlZCBMaW50aWFuIHdhcm5pbmcgKHdhcm5pbmc6IG1hY3JvIGBOJyBub3QgZGVmaW5lZCkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCitpbmRleCBhMDJlNDMwLi5iMDcyM2JkIDEwMDY0NAorLS0tIGEvbWFpbHguMQorKysrIGIvbWFpbHguMQorQEAgLTM3ODEsNyArMzc4MSw3IEBAIHlvdSBjb3VsZCBleGFtaW5lIHRoZSBmaXJzdCBtZXNzYWdlIGJ5IGdpdmluZyB0aGUgY29tbWFuZDoKKyAuc3AKKyAuZmkKKyB3aGljaCBtaWdodCBjYXVzZQorLS5OIG1haWx4CisrLkkgbWFpbHgKKyB0byByZXNwb25kIHdpdGgsIGZvciBleGFtcGxlOgorIC5uZgorIC5zcApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2MTY0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA5OTg0YWU1Y2IwZWEwZDYxZGYxNjEyYjA2OTUyYTYxMzIzYzA4M2Q5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTM6MzggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIG91dG9mOiBJbnRyb2R1Y2UgZXhwYW5kYWRkciBmbGFnCisKK0RvY3VtZW50IHRoYXQgYWRkcmVzcyBleHBhbnNpb24gaXMgZGlzYWJsZWQgdW5sZXNzIHRoZSBleHBhbmRhZGRyCitiaW5hcnkgb3B0aW9uIGlzIHNldC4KKworVGhpcyBoYXMgYmVlbiBhc3NpZ25lZCBDVkUtMjAxNC03ODQ0IGZvciBCU0QgbWFpbHgsIGJ1dCBpdCBpcyBub3QKK2EgdnVsbmVyYWJpbGl0eSBpbiBIZWlybG9vbSBtYWlseCBiZWNhdXNlIHRoaXMgZmVhdHVyZSB3YXMgZG9jdW1lbnRlZC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8IDE0ICsrKysrKysrKysrKysrCisgbmFtZXMuYyB8ICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWFpbHguMSBiL21haWx4LjEKK2luZGV4IDcwYTc4NTkuLjIyYTE3MWIgMTAwNjQ0CistLS0gYS9tYWlseC4xCisrKysgYi9tYWlseC4xCitAQCAtNjU2LDYgKzY1NiwxNCBAQCBidXQgYW55IHJlcGx5IHJldHVybmVkIHRvIHRoZSBtYWNoaW5lCisgd2lsbCBoYXZlIHRoZSBzeXN0ZW0gd2lkZSBhbGlhcyBleHBhbmRlZAorIGFzIGFsbCBtYWlsIGdvZXMgdGhyb3VnaCBzZW5kbWFpbC4KKyAuU1MgIlJlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zIgorK0lmIHRoZQorKy5JIGV4cGFuZGFkZHIKKytvcHRpb24gaXMgbm90IHNldCAodGhlIGRlZmF1bHQpLCByZWNpcGllbnQgYWRkcmVzc2VzIG11c3QgYmUgbmFtZXMgb2YKKytsb2NhbCBtYWlsYm94ZXMgb3IgSW50ZXJuZXQgbWFpbCBhZGRyZXNzZXMuCisrLlBQCisrSWYgdGhlCisrLkkgZXhwYW5kYWRkcgorK29wdGlvbiBpcyBzZXQsIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisgV2hlbiBhbiBhZGRyZXNzIGlzIHVzZWQgdG8gbmFtZSBhIHJlY2lwaWVudAorIChpbiBhbnkgb2YgVG8sIENjLCBvciBCY2MpLAorIG5hbWVzIG9mIGxvY2FsIG1haWwgZm9sZGVycworQEAgLTIzOTEsNiArMjM5OSwxMiBAQCBhbmQgZXhpdHMgaW1tZWRpYXRlbHkuCisgSWYgdGhpcyBvcHRpb24gaXMgc2V0LAorIFxmSW1haWx4XGZSIHN0YXJ0cyBldmVuIHdpdGggYW4gZW1wdHkgbWFpbGJveC4KKyAuVFAKKysuQiBleHBhbmRhZGRyCisrQ2F1c2VzCisrLkkgbWFpbHgKKyt0byBleHBhbmQgbWVzc2FnZSByZWNpcGllbnQgYWRkcmVzc2VzLCBhcyBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24sCisrUmVjaXBpZW50IGFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisrLlRQCisgLkIgZmxpcHIKKyBFeGNoYW5nZXMgdGhlCisgLkkgUmVzcG9uZAorZGlmZiAtLWdpdCBhL25hbWVzLmMgYi9uYW1lcy5jCitpbmRleCA2NmU5NzZiLi5jNjk1NjBmIDEwMDY0NAorLS0tIGEvbmFtZXMuYworKysrIGIvbmFtZXMuYworQEAgLTI2OCw2ICsyNjgsOSBAQCBvdXRvZihzdHJ1Y3QgbmFtZSAqbmFtZXMsIEZJTEUgKmZvLCBzdHJ1Y3QgaGVhZGVyICpocCkKKyAJRklMRSAqZm91dCwgKmZpbjsKKyAJaW50IGlzcGlwZTsKKyAKKysJaWYgKHZhbHVlKCJleHBhbmRhZGRyIikgPT0gTlVMTCkKKysJCXJldHVybiBuYW1lczsKKysKKyAJdG9wID0gbmFtZXM7CisgCW5wID0gbmFtZXM7CisgCXRpbWUoJm5vdyk7CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkYmZkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbSBlMzRlMmFjNjdiODA0OTcwODBlYmVjY2NlYzQwYzNiNjE0NTYxNjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTQ6MDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIHVucGFjazogRGlzYWJsZSBvcHRpb24gcHJvY2Vzc2luZyBmb3IgZW1haWwgYWRkcmVzc2VzCisgd2hlbiBjYWxsaW5nIHNlbmRtYWlsCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGV4dGVybi5oICB8IDIgKy0KKyBuYW1lcy5jICAgfCA4ICsrKysrKy0tCisgc2VuZG91dC5jIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZXJuLmggYi9leHRlcm4uaAoraW5kZXggNmI4NWJhMC4uODg3M2ZlOCAxMDA2NDQKKy0tLSBhL2V4dGVybi5oCisrKysgYi9leHRlcm4uaAorQEAgLTM5Niw3ICszOTYsNyBAQCBzdHJ1Y3QgbmFtZSAqb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApOworIGludCBpc19maWxlYWRkcihjaGFyICpuYW1lKTsKKyBzdHJ1Y3QgbmFtZSAqdXNlcm1hcChzdHJ1Y3QgbmFtZSAqbmFtZXMpOworIHN0cnVjdCBuYW1lICpjYXQoc3RydWN0IG5hbWUgKm4xLCBzdHJ1Y3QgbmFtZSAqbjIpOworLWNoYXIgKip1bnBhY2soc3RydWN0IG5hbWUgKm5wKTsKKytjaGFyICoqdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmVsaWRlKHN0cnVjdCBuYW1lICpuYW1lcyk7CisgaW50IGNvdW50KHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmRlbGV0ZV9hbHRlcm5hdGVzKHN0cnVjdCBuYW1lICpucCk7CitkaWZmIC0tZ2l0IGEvbmFtZXMuYyBiL25hbWVzLmMKK2luZGV4IGM2OTU2MGYuLjQ1YmJhZWQgMTAwNjQ0CistLS0gYS9uYW1lcy5jCisrKysgYi9uYW1lcy5jCitAQCAtNTQ5LDcgKzU0OSw3IEBAIGNhdChzdHJ1Y3QgbmFtZSAqbjEsIHN0cnVjdCBuYW1lICpuMikKKyAgKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIG5hbWUgbGlzdCB3b24ndCBmaXQuCisgICovCisgY2hhciAqKgorLXVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisrdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCkKKyB7CisgCWNoYXIgKiphcCwgKip0b3A7CisgCXN0cnVjdCBuYW1lICpuOworQEAgLTU2NCw3ICs1NjQsNyBAQCB1bnBhY2soc3RydWN0IG5hbWUgKm5wKQorIAkgKiB0aGUgdGVybWluYXRpbmcgMCBwb2ludGVyLiAgQWRkaXRpb25hbCBzcG90cyBtYXkgYmUgbmVlZGVkCisgCSAqIHRvIHBhc3MgYWxvbmcgLWYgdG8gdGhlIGhvc3QgbWFpbGVyLgorIAkgKi8KKy0JZXh0cmEgPSAyOworKwlleHRyYSA9IDMgKyBjb3VudChzbW9wdHMpOworIAlleHRyYSsrOworIAltZXRvbyA9IHZhbHVlKCJtZXRvbyIpICE9IE5VTEw7CisgCWlmIChtZXRvbykKK0BAIC01ODEsNiArNTgxLDEwIEBAIHVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisgCQkqYXArKyA9ICItbSI7CisgCWlmICh2ZXJib3NlKQorIAkJKmFwKysgPSAiLXYiOworKwlmb3IgKDsgc21vcHRzICE9IE5VTEw7IHNtb3B0cyA9IHNtb3B0cy0+bl9mbGluaykKKysJCWlmICgoc21vcHRzLT5uX3R5cGUgJiBHREVMKSA9PSAwKQorKwkJCSphcCsrID0gc21vcHRzLT5uX25hbWU7CisrCSphcCsrID0gIi0tIjsKKyAJZm9yICg7IG4gIT0gTlVMTDsgbiA9IG4tPm5fZmxpbmspCisgCQlpZiAoKG4tPm5fdHlwZSAmIEdERUwpID09IDApCisgCQkJKmFwKysgPSBuLT5uX25hbWU7CitkaWZmIC0tZ2l0IGEvc2VuZG91dC5jIGIvc2VuZG91dC5jCitpbmRleCA3YjdmMmViLi5jNTJmMTVkIDEwMDY0NAorLS0tIGEvc2VuZG91dC5jCisrKysgYi9zZW5kb3V0LmMKK0BAIC04MzUsNyArODM1LDcgQEAgc3RhcnRfbXRhKHN0cnVjdCBuYW1lICp0bywgc3RydWN0IG5hbWUgKm1haWxhcmdzLCBGSUxFICppbnB1dCwKKyAjZW5kaWYJLyogSEFWRV9TT0NLRVRTICovCisgCisgCWlmICgoc210cCA9IHZhbHVlKCJzbXRwIikpID09IE5VTEwpIHsKKy0JCWFyZ3MgPSB1bnBhY2soY2F0KG1haWxhcmdzLCB0bykpOworKwkJYXJncyA9IHVucGFjayhtYWlsYXJncywgdG8pOworIAkJaWYgKGRlYnVnIHx8IHZhbHVlKCJkZWJ1ZyIpKSB7CisgCQkJcHJpbnRmKGNhdGdldHMoY2F0ZCwgQ0FUU0VULCAxODEsCisgCQkJCQkiU2VuZG1haWwgYXJndW1lbnRzOiIpKTsKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1OGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSAyYmFlOGVjZjA0ZWMyYmE2YmI5ZjBhZjViODA0ODVkZDBlZGI0MjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTI6NDg6MjUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIGZpby5jOiBVbmNvbmRpdGlvbmFsbHkgcmVxdWlyZSB3b3JkZXhwIHN1cHBvcnQKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCA2NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCA2NWU4ZjEwLi4xNTI5MjM2IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDMsMTIgKzQzLDE1IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmaW8uYwkyLjc2IChncml0dGVyKSA5LzE2LzA5IjsKKyAjZW5kaWYgLyogbm90IGxpbnQgKi8KKyAKKyAjaW5jbHVkZSAicmN2LmgiCisrCisrI2lmbmRlZiBIQVZFX1dPUkRFWFAKKysjZXJyb3Igd29yZGV4cCBzdXBwb3J0IGlzIHJlcXVpcmVkCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CistI2lmZGVmCUhBVkVfV09SREVYUAorICNpbmNsdWRlIDx3b3JkZXhwLmg+CistI2VuZGlmCS8qIEhBVkVfV09SREVYUCAqLworICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaWYgZGVmaW5lZCAoVVNFX05TUykKK0BAIC00ODEsNyArNDg0LDYgQEAgbmV4dDoKKyBzdGF0aWMgY2hhciAqCisgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyB7CistI2lmZGVmCUhBVkVfV09SREVYUAorIAl3b3JkZXhwX3Qgd2U7CisgCWNoYXIgKmNwOworIAlzaWdzZXRfdCBuc2V0OworQEAgLTUyNyw2NSArNTI5LDYgQEAgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyAJfQorIAl3b3JkZnJlZSgmd2UpOworIAlyZXR1cm4gY3A7CistI2Vsc2UJLyogIUhBVkVfV09SREVYUCAqLworLQljaGFyIHhuYW1lW1BBVEhTSVpFXTsKKy0JY2hhciBjbWRidWZbUEFUSFNJWkVdOwkJLyogYWxzbyB1c2VkIGZvciBmaWxlIG5hbWVzICovCistCWludCBwaWQsIGw7CistCWNoYXIgKmNwLCAqc2hlbGw7CistCWludCBwaXZlY1syXTsKKy0JZXh0ZXJuIGludCB3YWl0X3N0YXR1czsKKy0Jc3RydWN0IHN0YXQgc2J1ZjsKKy0KKy0JaWYgKHBpcGUocGl2ZWMpIDwgMCkgeworLQkJcGVycm9yKCJwaXBlIik7CistCQlyZXR1cm4gbmFtZTsKKy0JfQorLQlzbnByaW50ZihjbWRidWYsIHNpemVvZiBjbWRidWYsICJlY2hvICVzIiwgbmFtZSk7CistCWlmICgoc2hlbGwgPSB2YWx1ZSgiU0hFTEwiKSkgPT0gTlVMTCkKKy0JCXNoZWxsID0gU0hFTEw7CistCXBpZCA9IHN0YXJ0X2NvbW1hbmQoc2hlbGwsIDAsIC0xLCBwaXZlY1sxXSwgIi1jIiwgY21kYnVmLCBOVUxMKTsKKy0JaWYgKHBpZCA8IDApIHsKKy0JCWNsb3NlKHBpdmVjWzBdKTsKKy0JCWNsb3NlKHBpdmVjWzFdKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWNsb3NlKHBpdmVjWzFdKTsKKy1hZ2FpbjoKKy0JbCA9IHJlYWQocGl2ZWNbMF0sIHhuYW1lLCBzaXplb2YgeG5hbWUpOworLQlpZiAobCA8IDApIHsKKy0JCWlmIChlcnJubyA9PSBFSU5UUikKKy0JCQlnb3RvIGFnYWluOworLQkJcGVycm9yKCJyZWFkIik7CistCQljbG9zZShwaXZlY1swXSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQljbG9zZShwaXZlY1swXSk7CistCWlmICh3YWl0X2NoaWxkKHBpZCkgPCAwICYmIFdURVJNU0lHKHdhaXRfc3RhdHVzKSAhPSBTSUdQSVBFKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgxLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gZmFpbGVkLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gMCkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MiwKKy0JCQkJCSJcIiVzXCI6IE5vIG1hdGNoLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gc2l6ZW9mIHhuYW1lKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgzLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gYnVmZmVyIG92ZXJmbG93LlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JeG5hbWVbbF0gPSAwOworLQlmb3IgKGNwID0gJnhuYW1lW2wtMV07ICpjcCA9PSAnXG4nICYmIGNwID4geG5hbWU7IGNwLS0pCistCQk7CistCWNwWzFdID0gJ1wwJzsKKy0JaWYgKHN0cmNocih4bmFtZSwgJyAnKSAmJiBzdGF0KHhuYW1lLCAmc2J1ZikgPCAwKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDg0LAorLQkJCQkiXCIlc1wiOiBBbWJpZ3VvdXMuXG4iKSwgbmFtZSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQlyZXR1cm4gc2F2ZXN0cih4bmFtZSk7CistI2VuZGlmCS8qICFIQVZFX1dPUkRFWFAgKi8KKyB9CisgCisgLyoKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1Y2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDczZmVmYTBjMWFjNzAwNDNlYzg0ZjJkOGI4ZjlmNjgzMjEzZjE2OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lckByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAxMzoxMTozMiArMDEwMAorU3ViamVjdDogW1BBVENIIDQvNF0gZ2xvYm5hbWU6IEludm9rZSB3b3JkZXhwIHdpdGggV1JERV9OT0NNRCAoQ1ZFLTIwMDQtMjc3MSkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCAxNTI5MjM2Li43NzRhMjA0IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDk3LDcgKzQ5Nyw3IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgCXNpZ2VtcHR5c2V0KCZuc2V0KTsKKyAJc2lnYWRkc2V0KCZuc2V0LCBTSUdDSExEKTsKKyAJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbnNldCwgTlVMTCk7CistCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgMCk7CisrCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgV1JERV9OT0NNRCk7CisgCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbnNldCwgTlVMTCk7CisgCXN3aXRjaCAoaSkgeworIAljYXNlIDA6CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU5OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRGVzY3JpcHRpb246IFNlbmRtYWlsIGlzIGF0IC91c3Ivc2Jpbi9zZW5kbWFpbAorIEFzIHBlciBEZWJpYW4gUG9saWN5IMKnMTEuNgorQXV0aG9yOiBSeWFuIEthdmFuYWdoIDxyYWtAZGViaWFuLm9yZz4KK09yaWdpbjogRGViaWFuCitGb3J3YXJkZWQ6IG5vCistLS0KK1RoaXMgcGF0Y2ggaGVhZGVyIGZvbGxvd3MgREVQLTM6IGh0dHA6Ly9kZXAuZGViaWFuLm5ldC9kZXBzL2RlcDMvCitJbmRleDogaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorCistLS0gaGVpcmxvb20tbWFpbHgtMTIuNS5vcmlnL01ha2VmaWxlCTIwMTEtMDQtMjYgMTc6MjM6MjIuMDAwMDAwMDAwIC0wNDAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQkyMDE1LTAxLTI3IDEzOjIwOjA0LjczMzU0MjgwMSAtMDUwMAorQEAgLTEzLDcgKzEzLDcgQEAKKyAKKyBNQUlMUkMJCT0gJChTWVNDT05GRElSKS9uYWlsLnJjCisgTUFJTFNQT09MCT0gL3Zhci9tYWlsCistU0VORE1BSUwJPSAvdXNyL2xpYi9zZW5kbWFpbAorK1NFTkRNQUlMCT0gL3Vzci9zYmluL3NlbmRtYWlsCisgCisgREVTVERJUgkJPQorIAorSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MTg6NDkuMDAwMDAwMDAwIC0wNTAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MjA6MzIuMzgyMzM2ODY3IC0wNTAwCitAQCAtNDkyMiw3ICs0OTIyLDcgQEAKKyB3aGljaCBqdXN0IGFjdHMgYXMgYSBwcm94eS4KKyAuUFAKKyBcZklNYWlseFxmUiBpbW1lZGlhdGVseSBjb250YWN0cyB0aGUgU01UUCBzZXJ2ZXIgKG9yCistLklSIFwlL3Vzci9saWIvc2VuZG1haWwgKQorKy5JUiBcJS91c3Ivc2Jpbi9zZW5kbWFpbCApCisgZXZlbiB3aGVuIG9wZXJhdGluZyBpbgorIC5JIGRpc2Nvbm5lY3RlZAorIG1vZGUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGZkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitrcmI1IHN1cHBvcnQgaXMgYXV0b2RldGVjdGVkIGZyb20gc3lzcm9vdCBtYWtpbmcgYnVpbGRzIHVuZGV0ZXJtaW5pc3RpYworZmVlbCBmcmVlIHRvIGltcHJvdmUgdGhpcyB0byBzdXBwb3J0IGV4cGxpY2l0bHkgZW5hYmxpbmcvZGlzYWJsaW5nIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBhL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNjoxMS4xNzc3OTIzMzQgKzAyMDAKKysrKyBiL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNzoyMC4wMjg3OTM5OTQgKzAyMDAKK0BAIC00MjQsMzYgKzQyNCw2IEBACisgfQorICEKKyAKKy08JHRtcDIuYyBsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3MnIFwKKy0JCScjZGVmaW5lIFVTRV9HU1NBUEknICctbGdzcycgfHwKKy0JPCR0bXAyLmMgbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzYXBpX2tyYjUnIFwKKy0JCQknI2RlZmluZSBVU0VfR1NTQVBJJyAnLWxnc3NhcGlfa3JiNScgfHwKKy0JCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaV9rcmI1LCBvbGQtc3R5bGUnIFwKKy0JCQkJJyNkZWZpbmUgVVNFX0dTU0FQSQorLSNkZWZpbmUgR1NTQVBJX09MRF9TVFlMRScgJy1sZ3NzYXBpX2tyYjUnIDw8XCEgfHwgXAorLQkJCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaScgXAorLQkJCQknI2RlZmluZSBVU0VfR1NTQVBJCistI2RlZmluZQlHU1NBUElfUkVHX0lOQ0xVREUnICctbGdzc2FwaScgPDxcJQorLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CistI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorLQorLWludCBtYWluKHZvaWQpCisteworLQlnc3NfaW1wb3J0X25hbWUoMCwgMCwgZ3NzX250X3NlcnZpY2VfbmFtZSwgMCk7CistCWdzc19pbml0X3NlY19jb250ZXh0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApOworLQlyZXR1cm4gMDsKKy19CistIQorLSNpbmNsdWRlIDxnc3NhcGkuaD4KKy0KKy1pbnQgbWFpbih2b2lkKQorLXsKKy0JZ3NzX2ltcG9ydF9uYW1lKDAsIDAsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAwKTsKKy0JZ3NzX2luaXRfc2VjX2NvbnRleHQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7CistCXJldHVybiAwOworLX0KKy0lCistCisgY2F0ID4kdG1wMi5jIDw8XCEKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2lmZGVmIEhBVkVfTkxfTEFOR0lORk8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTkwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAibWFpbHggaXMgdGhlIHRyYWRpdGlvbmFsIGNvbW1hbmQtbGluZS1tb2RlIG1haWwgdXNlciBhZ2VudCIKKworREVTQ1JJUFRJT04gPSAiTWFpbHggaXMgZGVyaXZlZCBmcm9tIEJlcmtlbGV5IE1haWwgYW5kIGlzIGludGVuZGVkIHByb3ZpZGUgdGhlIFwKK2Z1bmN0aW9uYWxpdHkgb2YgdGhlIFBPU0lYIG1haWx4IGNvbW1hbmQgd2l0aCBhZGRpdGlvbmFsIHN1cHBvcnQgXAorZm9yIE1JTUUsIElNQVAsIFBPUDMsIFNNVFAsIGFuZCBTL01JTUUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vaGVpcmxvb20uc291cmNlZm9yZ2UubmV0L21haWx4Lmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEICYgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjAyYTBhNjI5MTBjZjk0ZjdhZjhhMzQzNmEyYTJkZCIKKworREVQRU5EUyA9ICJvcGVuc3NsIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUub3JpZy50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjlhNjAzM2VmMTQxMjgyNGQwMmViOWQ5MjEzY2IxZjIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwMTViYTQyMDkxMzU4NjdmMzdhMDI0NWQyMjIzNWEzOTJiOGJiZWQ5NTY5MTMyODZiODg3YzJlMmE5YTQyMWFkIgorCitTID0gIiR7V09SS0RJUn0vaGVpcmxvb20tbWFpbHgtMTIuNSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0JTRF9TT1VSQ0UgLURERUJJQU4gLUkke1N9L0VYVCIKKworIyAiU1RSSVA9dHJ1ZSIgbWVhbnMgdGhhdCAndHJ1ZScgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gJ3N0cmlwJyBmaWxlcyB3aGljaCB3aWxsIGFjaGlldmUgdGhlIGVmZmVjdCBvZiBub3Qgc3RyaXBwaW5nIHRoZW0KKyMgbWFpbHgncyBNYWtlZmlsZSBkb2Vzbid0IGFsbG93IGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGF2b2lkIHN0cmlwcGluZworRVhUUkFfT0VNQUtFID0gIlNFTkRNQUlMPSR7c2JpbmRpcn0vc2VuZG1haWwgSVB2Nj0tREhBVkVfSVB2Nl9GVU5DUyBQUkVGSVg9L3VzciBVQ0JJTlNUQUxMPS91c3IvYmluL2luc3RhbGwgU1RSSVA9dHJ1ZSIKKworIyBUaGUgbWFrZWNvbmZpZyBjYW4ndCBydW4gcGFyYWxsZWxseSwgb3RoZXJ3aXNlIHRoZSBjaGVja2luZyByZXN1bHRzCisjIG1pZ2h0IGJlIGluY29ycmVjdCBhbmQgbGVhZCB0byBlcnJvcnM6CisjIGZpby5jOjU2OjE3OiBmYXRhbCBlcnJvcjogc3NsLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyMgI2luY2x1ZGUgPHNzbC5oPgorUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjkwYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkxpbnV4IG1hbi1wYWdlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBtYW4tcGFnZXMgcHJvamVjdCBkb2N1bWVudHMgdGhlIExpbnV4IGtlcm5lbCBhbmQgQyBsaWJyYXJ5IGludGVyZmFjZXMgdGhhdCBhcmUgZW1wbG95ZWQgYnkgdXNlciBwcm9ncmFtcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvZG9jcy9tYW4tcGFnZXMiCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT04ZjJhM2Q0MzA1N2Q0NThlNTA2NjcxNDk4MDU2N2E2MCIKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9kb2NzLyR7QlBOfS9BcmNoaXZlLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGYzMjc5Nzk4YTMzNDViYjJjNzA5NTg0YzgzNjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQyMzI0ZjllZDQ3Yzg5YTQzY2IzN2I2YmIwZDVmYmNhZDQ0ODM4ZWVlNDVjZDM5NGUxODFjOThkMDM4YzQ5ZmYiCisKK1JERVBFTkRTXyR7UE59ID0gIm1hbiIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKKyMgT25seSBkZWxpdmVyZXMgbWFuLXBhZ2VzIHNvIEZJTEVTXyR7UE59IGdldHMgZXZlcnl0aGluZworRklMRVNfJHtQTn0tZG9jID0gIiIKK0ZJTEVTXyR7UE59ID0gIiR7bWFuZGlyfS8qIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWU2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK21hbjogcmVwbGFjZSAnLCcgd2l0aCAnIycKKworU29tZXRpbWVzLCB0aGUgcGFyYW1ldGVycyBvZiBDQy9CVUlMRF9DQyBjb250YWlucyB0aGUgJywnLCB3aGljaAorY2F1c2UgdGhlIHNlZCBjb21tYW5kIGZhaWxlZCwgc28gcmVwbGFjZSB0aGUgJywnIHdpdGggJyMnCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDlmNjJjZjkuLjlhNTY1YWUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTEzMjEsOSArMTMyMSw5IEBAIGRvCisgICBlY2hvICJDcmVhdGluZyAkaW5maWxlIGZyb20gJGluZmlsZS5pbiIKKyAgIHNlZCAtZSAnCisgcyxAdmVyc2lvbkAsJHZlcnNpb24sCistcyxAQ0NALCRDQywKKytzI0BDQ0AjJENDIworIHMsQEVYRUVYVEAsJEVYRUVYVCwKKy1zLEBCVUlMRF9DQ0AsJEJVSUxEX0NDLAorK3MjQEJVSUxEX0NDQCMkQlVJTERfQ0MjCisgcyxASU5TVEFMTEAsJElOU1RBTEwsCisgcyxAREVGU0AsJERFRlMsCisgcyxATElCU0AsJExJQlMsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjgzNGJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdSAtciBtYW4tMS41Zy5vbGQvY29uZmlndXJlIG1hbi0xLjVnL2NvbmZpZ3VyZQorLS0tIG1hbi0xLjVnLm9sZC9jb25maWd1cmUJV2VkIEFwciAgNyAwNDoxNjowNSAxOTk5CisrKysgbWFuLTEuNWcvY29uZmlndXJlCU1vbiBNYXkgMTUgMTU6MjI6NDQgMjAwMAorQEAgLTc5MSw3ICs3OTEsNyBAQAorICAgICByZWFkIG1vZGUKKyAgICAgaWYgdGVzdCAiJG1vZGUiICE9ICIiOyB0aGVuIG1hbl9tb2RlPSRtb2RlOyBmaQorICAgZmkKKy0gIG1hbl9pbnN0YWxsX2ZsYWdzPSItbSAkbWFuX21vZGUgLW8gJG1hbl91c2VyIC1nICRtYW5fZ3JvdXAiCisrICBtYW5faW5zdGFsbF9mbGFncz0iIgorIGZpCisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRiMTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBnZW5jYXQvZ2VubGliLmMJMjAwNi0wOC0wMiAyMDoxMTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZW5jYXQvZ2VubGliLmMub2RlbgkyMDA4LTEyLTIxIDE5OjE4OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ3LDYgKzQ3LDcgQEAgdXAtdG8tZGF0ZS4gIE1hbnkgdGhhbmtzLgorIDAxLzE0LzkxICAgNCBuYXpndWwJT2ZmIGJ5IG9uZSBvbiBudW1iZXIgc3BlY2lmaWVkIGVudHJpZXMKKyAqLworIAorKyN1bmRlZiBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaWZkZWYgU1lTVgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMxZWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluLm1pa2UJRnJpIEFwciAgOSAxMzozNTo1NCAxOTk5CisrKysgbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluCUZyaSBBcHIgIDkgMTM6MzY6NDUgMTk5OQorQEAgLTEsOCArMSw4IEBACisgIyBvbmx5IGV4ZWN1dGVkIGZyb20gYSBzdWJkaXIKKyBNQU4xID0gbWFuIHdoYXRpcyBhcHJvcG9zCistTUFONSA9IG1hbi5jb25mCisrTUFONSA9IG1hbi5jb25maWcKKyBNQU44ID0gbWFrZXdoYXRpcworLUFMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZi41CisrQUxMID0gbWFuLjEgd2hhdGlzLjEgYXByb3Bvcy4xIG1hbi5jb25maWcuNQorIE1BWUJFOCA9IG1ha2V3aGF0aXMKKyAKKyAuU1VGRklYRVM6IC5tYW4gLjEgLjUgLjgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLWluaXRpYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1NmMwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaC5pbml0aWFsCVR1ZSBKdWwgIDMgMTU6Mzg6MzkgMjAwMQorKysrIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaAlUdWUgSnVsICAzIDE1OjM5OjM5IDIwMDEKK0BAIC04MSw4ICs4MSwxMCBAQAorIAljb250aW51ZTs7CisgICAgIC1zKSBzZXRzZWN0aW9ucz0xCisgCWNvbnRpbnVlOzsKKy0gICAgLXUpIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCistCXVwZGF0ZT0xCisrICAgIC11KSBpZiBbIC1lIC92YXIvY2FjaGUvbWFuL3doYXRpcyBdOyB0aGVuCisrCSAgZmluZGFyZz0iLW5ld2VyIC92YXIvY2FjaGUvbWFuL3doYXRpcyIKKysJICB1cGRhdGU9MQorKwlmaQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKKyAJY29udGludWU7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItbmV3bGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTFkZjVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gc3JjL21hbi5jCTIwMDgtMTItMjEgMTk6MTc6MzEuMDAwMDAwMDAwICswMTAwCisrKysgc3JjL21hbi5jLm9kZW4JMjAwOC0xMi0yMSAxOToxNzozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTEsNyArMzkxLDcgQEAgYWdhaW46CisgCSAgYmVnKys7CisgCisgICAgICBlbmQgPSBiZWc7CistICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcpCisrICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcgJiYgKGVuZC1idWYpPEJVRlNJWkUpCisgCSAgZW5kKys7CQkvKiBub3RlIHRoYXQgYnVmIGlzIE5VTC10ZXJtaW5hdGVkICovCisgICAgICAqZW5kID0gJ1wwJzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQyODgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFuLmMub3ZlcmZsb3cJTW9uIEp1biAyNSAwMDowMTo0NSAyMDAxCisrKysgbWFuLTEuNWkyL3NyYy9tYW4uYwlNb24gSnVuIDI1IDAwOjAxOjQ1IDIwMDEKK0BAIC0zODEsNiArMzgxLDkgQEAKKyAJICBzdHJjYXQobmFtZSwgIi8iKTsKKyAJICBzdHJjYXQobmFtZSwgYmVnKTsKKyAgICAgIH0KKysgICAgIC8qIElmIHRoaXMgaXMgdG9vIGxvbmcsIGJhZCB0aGluZ3MgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiAqCisrICAgICAgKiB3ZSBzaG91bGQgcXVpdCBJTU1FRElBVEVMWS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgIGlmKHN0cmxlbihuYW1lKT5zaXplb2YodWx0bmFtZSkpIF9leGl0KDEpOworIAorICAgICAgZ290byBhZ2FpbjsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWUwOWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9tc2dzL2luc3Quc2guaTE4bglXZWQgQXByIDI1IDEwOjQwOjUwIDIwMDEKKysrKyBtYW4tMS41ai9tc2dzL2luc3Quc2gJV2VkIEFwciAyNSAxMDo0MToxNyAyMDAxCitAQCAtMjcsOCArMjcsNyBAQAorIGZvciBqIGluICRNOyBkbworICAgaWYgWyAtZiAkaiBdOyB0aGVuCisgICAgIGk9YGVjaG8gJGogfCBzZWQgLWUgJ3MvbWVzcy4vLzsgcy8uY2F0Ly8nYAorLSAgICBkZXN0PWBlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorLSAgICBkZXN0PSR7UFJFRklYfSRkZXN0CisrICAgIGRlc3Q9JHtQUkVGSVh9L2BlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorICAgICBlY2hvICJta2RpciAtcCBgZGlybmFtZSAkZGVzdGAiCisgICAgIG1rZGlyIC1wIGBkaXJuYW1lICRkZXN0YDsKKyAgICAgZWNobyAiaW5zdGFsbCAtYyAtbSA2NDQgJGogJGRlc3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTFkZGRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4ubm9jYWNoZQlUaHUgTm92IDIyIDE1OjA3OjEyIDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4JVGh1IE5vdiAyMiAxNTowNzoxMiAyMDAxCitAQCAtODEsNiArODEsOSBAQAorICMgCisgI05PQ0FDSEUKKyAjCisrIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzCisrTk9DQUNIRQorKyMKKyAjIFVzZWZ1bCBwYXRocyAtIG5vdGUgdGhhdCBDT0wgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4KKyAjIE5ST0ZGIGlzIGRlZmluZWQgYXMgImdyb2ZmIC1UYXNjaWkiIG9yICJncm9mZiAtVGxhdGluMSI7CisgIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDNlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL2NvbmZpZ3VyZS51dGY4CVRodSBOb3YgMjIgMTU6MDI6MzUgMjAwMQorKysrIG1hbi0xLjVqL2NvbmZpZ3VyZQlUaHUgTm92IDIyIDE1OjAzOjE1IDIwMDEKK0BAIC00MDgsOSArNDA4LDkgQEAKKyAgIEZnYXdrPS9iaW4vZ2F3aworICAgRmF3az0vYmluL2dhd2sKKyAgIEZtYXdrPW1pc3NpbmcKKy0gIHRyb2ZmPSIiCistICBucm9mZj0iIgorLSAgam5yb2ZmPSIiCisrICB0cm9mZj0vdXNyL2Jpbi90cm9mZgorKyAgbnJvZmY9L3Vzci9iaW4vbnJvZmYKKysgIGpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgZXFuPSIiCisgICBuZXFuPSIiCisgICBqbmVxbj0iIgorQEAgLTQ1Myw2ICs0NTMsOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZucm9mZj0vdXNyL2Jpbi9ucm9mZgorKyAgRmpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgRmdlcW49L3Vzci9iaW4vZ2VxbgorICAgRmd0Ymw9L3Vzci9iaW4vZ3RibAorICAgRmNvbD0vdXNyL2Jpbi9jb2wKK0BAIC00ODUsMjUgKzQ4NywyNSBAQAorICAgdGhlbgorICAgICBpZiB0ZXN0ICRGbnJvZmYgPSAibWlzc2luZyIKKyAgICAgdGhlbgorLSAgICAgIG5yb2ZmPSJucm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSJucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZWxzZQorLSAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UbGF0aW4xIC1tYW5kb2MiCisrICAgICAgbnJvZmY9IiRGbnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGZpCisgICAgIHRyb2ZmPSJ0cm9mZiAtbWFuZG9jIgorICAgICBlY2hvICJXYXJuaW5nOiBjb3VsZCBub3QgZmluZCBncm9mZiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAkRm5yb2ZmID0gIm1pc3NpbmciCisgICAgIHRoZW4KKy0gICAgICBucm9mZj0iJEZncm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSIkRmdyb2ZmIC1UdXRmOCAtbWFuZG9jIgorICAgICBlbHNlCistICAgICAgbnJvZmY9IiRGbnJvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0iJEZucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZmkKKyAgICAgdHJvZmY9IiRGZ3JvZmYgLVRwcyAtbWFuZG9jIgorLSAgICBqbnJvZmY9IiRGZ3JvZmYgLVRuaXBwb24gLW1hbmRvY2oiCisrICAgIGpucm9mZj0iJEZqbnJvZmYgLVR1dGY4IC1tYW5kb2NqIgorICAgZmkKKyAgIGVxbj0iJEZnZXFuIC1UcHMiCistICBuZXFuPSIkRmdlcW4gLVRsYXRpbjEiCistICBqbmVxbj0iJEZnZXFuIC1UbmlwcG9uIgorKyAgbmVxbj0iJEZnZXFuIC1UdXRmOCIKKysgIGpuZXFuPSIkRmdlcW4gLVR1dGY4IgorICAgdGJsPSIkRmd0YmwiCisgICBjb2w9IiRGY29sIgorICAgdmdyaW5kPSIkRnZncmluZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstY29uZnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3NDZjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGNvbmZpZ3VyZQkyMDA2LTA1LTAxIDE5OjU2OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIGNvbmZpZ3VyZS5vZGVuCTIwMDgtMTItMjEgMTk6MTY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTk4LDcgKzE5OCw3IEBACisgICAgIGNvbmZkaXI9IiR7Y29uZnByZWZpeH0vc2hhcmUvbWlzYyIKKyAgIGZpCisgZmkKKy1jb25mZmlsZW5hbWU9Im1hbi5jb25mIgorK2NvbmZmaWxlbmFtZT0ibWFuLmNvbmZpZyIKKyAKKyBpZiB0ZXN0ICIkUkFORE9NIiA9ICIkUkFORE9NIjsgdGhlbgorICAgIyBQbGFpbiBvbGQgQm91cm5lIHNoZWxsLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1ub25hc2NpaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYyZDliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gLi9zcmMvYXByb3Bvcy5zaC5ub25hc2NpaQkyMDAxLTExLTIzIDAwOjMwOjQyLjAwMDAwMDAwMCArMDEwMAorKysrIC4vc3JjL2Fwcm9wb3Muc2gJMjAwMi0wOC0xMyAxNTo0NDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw5ICsxOCw5IEBACisgCisgIyBXaGVuIG1hbiBwYWdlcyBpbiB5b3VyIGZhdm9yaXRlIGxvY2FsZSBsb29rIHRvIGdyZXAgbGlrZSBiaW5hcnkgZmlsZXMKKyAjIChhbmQgeW91IHVzZSBHTlUgZ3JlcCkgeW91IG1heSB3YW50IHRvIGFkZCB0aGUgJ2EnIG9wdGlvbiB0byAqZ3JlcG9wdDEuCistYXByb3Bvc2dyZXBvcHQxPSdpJworK2Fwcm9wb3NncmVwb3B0MT0naWEnCisgYXByb3Bvc2dyZXBvcHQyPScnCistd2hhdGlzZ3JlcG9wdDE9J2l3JworK3doYXRpc2dyZXBvcHQxPSdpd2EnCisgd2hhdGlzZ3JlcG9wdDI9J14nCisgZ3JlcG9wdDE9JCVhcHJvcG9zX29yX3doYXRpcyVncmVwb3B0MQorIGdyZXBvcHQyPSQlYXByb3Bvc19vcl93aGF0aXMlZ3JlcG9wdDIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstc29maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiOTI1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL3NyYy9tYW4uYy5zb2ZpeAlUaHUgTm92IDIyIDE0OjUxOjQ0IDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmMJVGh1IE5vdiAyMiAxNDo1Mjo0NCAyMDAxCitAQCAtMzAwLDcgKzMwMCw3IEBACisgCisgICAgICBpZiAoc3RybGVuKG5hbWUwKSA+PSBzaXplb2YodWx0bmFtZSkpCisgCSAgICAgcmV0dXJuIG5hbWUwOworLSAgICAgc3RyY3B5KHVsdG5hbWUsIG5hbWUwKTsKKysgICAgIHN0cm5jcHkodWx0bmFtZSwgbmFtZTAsIEJVRlNJWkUtMzIpOworICAgICAgbmFtZSA9IHVsdG5hbWU7CisgCisgYWdhaW46CitAQCAtMzMyLDcgKzMzMiw3IEBACisgCSAgICogLnNvIGZpbGVzIC0gd2UgY291bGQgZ2xvYiBmb3IgYWxsIHBvc3NpYmxlIGV4dGVuc2lvbnMsCisgCSAgICogZm9yIG5vdzogb25seSB0cnkgLmd6CisgCSAgICovCistCSAgZWxzZSBpZiAoZnAgPT0gTlVMTCAmJiBnZXRfZXhwYW5kZXIoIi5neiIpICYmCisrCSAgaWYgKGZwID09IE5VTEwgJiYgZ2V0X2V4cGFuZGVyKCIuZ3oiKSAmJgorIAkJICAgc3RybGVuKG5hbWUpK3N0cmxlbigiLmd6IikgPCBCVUZTSVpFKSB7CisgCSAgICAgICBzdHJjYXQobmFtZSwgIi5neiIpOworIAkgICAgICAgZnAgPSBmb3BlbiAobmFtZSwgInIiKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEyOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmFkCTIwMDMtMTItMTEgMTk6MTc6MTAuMDAwMDAwMDAwICswMTAwCisrKysgLi9jb25maWd1cmUJMjAwMy0xMi0xMSAxOToxNzoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiw3ICsyNiw3IEBACisgIyAoSW5kZWVkLCAtciBtYXkgY2F1c2UgdGhlIHRlcm1pbmFsIHRvIGdldCBpbnRvIGZ1bm55IHN0YXRlcy4KKyAjIFZlcnkgaW5jb252ZW5pZW50LiBGb3Igdmlld2luZyBwYWdlcyBpbiBzdHJhbmdlIGxvY2FsZXMsIHNldCBMQ18qLikKKyAjCistREVGQVVMVExFU1NPUFQ9Ii1pcyIKKytERUZBVUxUTEVTU09QVD0iLWlzciIKKyAjCisgIyBOb3RlIHRoYXQgbm90IGNyZWF0aW5nIGFueSBjYXQgZGlyZWN0b3JpZXMgKC92YXIvY2FjaGUvbWFuIG9yIHNvKQorICMgYW5kIG5vdCBtYWtpbmcgbWFuIHN1aWQgb3Igc2dpZCBpcyByZWNvbW1lbmRlZC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOTdmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmxlc3MJMjAwMy0xMi0xMSAxOToxODoxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyAuL2NvbmZpZ3VyZQkyMDAzLTEyLTExIDE5OjIwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTQwMSwxOCArNDAxLDEzIEBACisgCisgaWYgdGVzdCAiJGFucyIgPSAiZmFsc2UiCisgdGhlbgorLSAgZm9yIGkgaW4gbW9yZSBsZXNzIGNtcCBjYXQgYXdrIGdhd2sgbWF3aworLSAgZG8KKy0gICAgZXZhbCBGJGk9Im1pc3NpbmciCistICAgIGZvciBqIGluICRERUZQQVRICistICAgIGRvCistICAgICAgaWYgdGVzdCAtZiAkai8kaQorLSAgICAgIHRoZW4KKy0JZXZhbCBGJGk9JGovJGkKKy0JYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICBkb25lCisrICBGbW9yZT0vYmluL21vcmUKKysgIEZsZXNzPS91c3IvYmluL2xlc3MKKysgIEZjbXA9L3Vzci9iaW4vY21wCisrICBGY2F0PS9iaW4vY2F0CisrICBGZ2F3az0vYmluL2dhd2sKKysgIEZhd2s9L2Jpbi9nYXdrCisrICBGbWF3az1taXNzaW5nCisgICB0cm9mZj0iIgorICAgbnJvZmY9IiIKKyAgIGpucm9mZj0iIgorQEAgLTQ1Nyw2ICs0NTIsMTkgQEAKKyAgICAgICBmaQorICAgICBkb25lCisgICBkb25lCisrICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZnZXFuPS91c3IvYmluL2dlcW4KKysgIEZndGJsPS91c3IvYmluL2d0YmwKKysgIEZjb2w9L3Vzci9iaW4vY29sCisrICBGZ3JlZmVyPS91c3IvYmluL2dyZWZlcgorKyAgRmdwaWM9L3Vzci9iaW4vZ3BpYworKyAgRm1vcmU9L2Jpbi9tb3JlCisrICBGbGVzcz0vdXNyL2Jpbi9sZXNzCisrICBGY21wPS91c3IvYmluL2NtcAorKyAgRmNhdD0vYmluL2NhdAorKyAgRmdhd2s9L2Jpbi9nYXdrCisrCisrCisgICBmb3IgaSBpbiBlcW4gdGJsIHJlZmVyIHBpYworICAgZG8KKyAgICAgaWYgdGVzdCBgZXZhbCBlY2hvIFxcJEZnJGlgID0gIm1pc3NpbmciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODVmZjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41bTIvY29uZmlndXJlLmNvbG9yCTIwMDYtMDktMTYgMTg6Mjc6MzcuMDAwMDAwMDAwICswMjAwCisrKysgbWFuLTEuNW0yL2NvbmZpZ3VyZQkyMDA2LTA5LTE2IDE4OjI4OjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTUzOSw2ICs1MzksOCBAQAorICAgICB0cm9mZj0iJHRyb2ZmIC1jIgorICAgICBucm9mZj0iJG5yb2ZmIC1jIgorICAgICBqbnJvZmY9IiRqbnJvZmYgLWMiCisrZWxzZQorKyAgICB0cm9mZj0iJHRyb2ZmIC1jIgorIGZpCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXNpZ3BpcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNzhlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVtMi9zcmMvdXRpbC5jX3NpZ3BpcGUJMjAwNi0xMi0wOSAxMzo0MzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4tMS41bTIvc3JjL3V0aWwuYwkyMDA2LTEyLTA5IDEzOjUzOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiwxMSArMTE2LDE0IEBACisgc3RhdGljIGludAorIHN5c3RlbTEgKGNvbnN0IGNoYXIgKmNvbW1hbmQpIHsKKyAJdm9pZCAoKnByZXZfaGFuZGxlcikoaW50KSA9IHNpZ25hbCAoU0lHSU5ULGNhdGNoX2ludCk7CisrCXNpZ25hbCAoU0lHUElQRSxTSUdfSUdOKTsKKyAJaW50IHJldCA9IHN5c3RlbShjb21tYW5kKTsKKyAKKyAJLyogY2hpbGQgdGVybWluYXRlZCB3aXRoIHNpZ25hbD8gKi8KKyAJaWYgKFdJRlNJR05BTEVEKHJldCkgJiYKKy0JICAgIChXVEVSTVNJRyhyZXQpID09IFNJR0lOVCB8fCBXVEVSTVNJRyhyZXQpID09IFNJR1FVSVQpKQorKwkgICAgKFdURVJNU0lHKHJldCkgPT0gU0lHSU5UIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdQSVBFIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdRVUlUKSkKKyAJCWV4aXQoMSk7CisgCisgCS8qIG9yIHdlIGNhdWdodCBhbiBpbnRlcnJ1cHQ/ICovCitAQCAtMTI4LDYgKzEzMSw3IEBACisgCQlleGl0KDEpOworIAorIAlzaWduYWwoU0lHSU5ULHByZXZfaGFuZGxlcik7CisrCXNpZ25hbChTSUdQSVBFLFNJR19ERkwpOworIAlyZXR1cm4gcmV0OworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItdHZfZmhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjZkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItdHZfZmhzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi9NYWtlZmlsZS5pbgkyMDA4LTEyLTIxIDE5OjE5OjMzLjAwMDAwMDAwMCArMDEwMAorKysrIG1hbi9NYWtlZmlsZS5pbi5vZGVuCTIwMDgtMTItMjEgMTk6MTk6MzkuMDAwMDAwMDAwICswMTAwCitAQCAtMzQsNiArMzQsMTUgQEAKKyAJZm9yIGkgaW4gJChNQU44KTsgXAorIAkJZG8gaWYgdGVzdCAtZiAkJGkuODsgdGhlbiAkKElOU1RBTEwpICQkaS44ICQobWFuZGlyKS9tYW44LyQkaS5AbWFuOGV4dEA7IGZpOyBkb25lCisgCisraW5zdGFsbC1sMTBuOiAkKEFMTCkKKysJbWtkaXIgLXAgJChtYW5kaXIpLyQoU0xBTkcpL21hbjEgJChtYW5kaXIpLyQoU0xBTkcpL21hbjUgJChtYW5kaXIpLyQoU0xBTkcpL21hbjgKKysJZm9yIGkgaW4gJChNQU4xKTsgXAorKwkJZG8gJChJTlNUQUxMKSAkJGkuMSAkKG1hbmRpcikvJChTTEFORykvbWFuMS8kJGkuQG1hbjFleHRAOyBkb25lCisrCWZvciBpIGluICQoTUFONSk7IFwKKysJCWRvICQoSU5TVEFMTCkgJCRpLjUgJChtYW5kaXIpLyQoU0xBTkcpL21hbjUvJCRpLkBtYW41ZXh0QDsgZG9uZQorKwlmb3IgaSBpbiAkKE1BTjgpOyBcCisrCQlkbyBpZiB0ZXN0IC1mICQkaS44OyB0aGVuICQoSU5TVEFMTCkgJCRpLjggJChtYW5kaXIpLyQoU0xBTkcpL21hbjgvJCRpLkBtYW44ZXh0QDsgZmk7IGRvbmUKKysKKyBjbGVhbjoKKyAJcm0gLWYgY29yZSAqLmluICouQG1hbjFleHRAICouQG1hbjVleHRAICouQG1hbjhleHRAICp+CisgCitAQCAtNDksNyArNTgsNyBAQAorIAlAZm9yIGkgaW4gQGxhbmd1YWdlc0A7IGRvIGlmIHRlc3QgLWQgJCRpOyB0aGVuIGVjaG87IFwKKyAJCWVjaG8gIj09PT0gSW5zdGFsbGluZyB0aGUgYGNhdCAkJGkudHh0YCBtYW4gcGFnZXMuID09PT0iOyBcCisgCQljZCAkJGk7IFNMQU5HPS8kJGk7IGlmIHRlc3QgJCRTTEFORyA9IC9lbjsgdGhlbiBTTEFORz0gOyBmaTsgXAorLQkJZXhwb3J0IFNMQU5HOyBtYWtlIC1mIC4uL01ha2VmaWxlIGluc3RhbGw7IGNkIC4uOyBcCisrCQlleHBvcnQgU0xBTkc7IG1ha2UgLWYgLi4vTWFrZWZpbGUgaW5zdGFsbC1sMTBuOyBjZCAuLjsgXAorIAkJZWxzZSBlY2hvICI9PT09IE5vICQkaSBtYW4gcGFnZXMgZm91bmQuID09PT0iOyBmaTsgZG9uZQorIAorIGNsZWFuc3ViZGlyczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLWkxOG5fd2hhdGlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtaTE4bl93aGF0aXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyMTMyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLWkxOG5fd2hhdGlzLnBhdGNoCkBAIC0wLDAgKzEsMTQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvYXByb3Bvcy5zaCBtYW4tMS42ZS9zcmMvYXByb3Bvcy5zaAorLS0tIG1hbi0xLjZlLm9yaWcvc3JjL2Fwcm9wb3Muc2gJMjAwNy0wNS0xOCAxMzo0OTozMS4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvYXByb3Bvcy5zaAkyMDA3LTA1LTE4IDE0OjI0OjMzLjAwMDAwMDAwMCAtMDMwMAorQEAgLTYwLDE2ICs2MCw1NiBAQAorICAgICBlc2FjCisgZG9uZQorIAorKyMgbGlzdCBvZiBsYW5ndWFnZXMgdG8gbG9vayBmb3IKKytMQU5HX0xJU1Q9YGVjaG8gJExBTkdVQUdFOiRMQ19BTEw6JExDX01FU1NBR0VTOiRMQU5HIHwgdHIgJzonICcgJ2AKKytESVJfTElTVD0iIgorK2ZvciBkIGluIC92YXIvY2FjaGUvbWFuICRtYW5wYXRoIC91c3IvbGliCisrZG8KKysgICAgZm9yIGwgaW4gJExBTkdfTElTVAorKyAgICBkbworKyAgICAgICAgaWYgWyAtZCAkZC8kbCBdCisrICAgICAgICB0aGVuCisrICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBwYXRoIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0CisrICAgICAgICAgICAgaWYgISBlY2hvICIkRElSX0xJU1QiIHwgZ3JlcCAiICRkLyRsXGIiID4gL2Rldi9udWxsCisrICAgICAgICAgICAgdGhlbgorKyAgICAgICAgICAgICAgICBESVJfTElTVD0iJERJUl9MSVNUICRkLyRsIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICBkb25lCisrICAgIERJUl9MSVNUPSIkRElSX0xJU1QgJGQiCisrICAgICMgY2hlY2sgdGhhdCB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdAorKyAgICBpZiAhIGVjaG8gIiRESVJfTElTVCIgfCBncmVwICIgJGRcYiIgPiAvZGV2L251bGwKKysgICAgdGhlbgorKyAgICAgICAgRElSX0xJU1Q9IiRESVJfTElTVCAkZC8kbCIKKysgICAgZmkKKytkb25lCisrCisgd2hpbGUgWyAiJDEiICE9ICIiIF0KKyBkbworICAgICBmb3VuZD0wCistICAgIGZvciBkIGluIC92YXIvY2FjaGUvbWFuICRtYW5wYXRoIC91c3IvbGliCisrICAgICMgaW4gb3JkZXIgbm90IHRvIGRpc3BsYXkgbGluZXMgaW4gbW9yZSB0aGFuIG9uZSBsYW5ndWFnZSBmb3IKKysgICAgIyBhIHNhbWUgbWFuIHBhZ2U7IHdlIGNoZWNrIHRoYXQgYSBnaXZlbiBtYW4gcGFnZSBuYW1lCisrICAgICMgaGFzbid0IGFscmVhZHkgYmVlbiBkaXNwbGF5ZWQKKysgICAgQkFaPSIiCisrICAgIGZvciBkIGluICRESVJfTElTVAorICAgICBkbworICAgICAgICAgaWYgWyAtZiAkZC93aGF0aXMgXQorICAgICAgICAgdGhlbgorLSAgICAgICAgICAgIGlmIGdyZXAgLSIkZ3JlcG9wdDEiICIkZ3JlcG9wdDIiIiQxIiAkZC93aGF0aXMKKysgICAgICAgICAgICBpZiBGT089YGdyZXAgLSIkZ3JlcG9wdDEiICIkZ3JlcG9wdDIiIiQxIiAkZC93aGF0aXNgCisgICAgICAgICAgICAgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZD0xCisrICAgICAgICAgICAgICAgICMgdGhlIExDX0FMTD1DIGlzIG5lZWRlZCBpbiBjYXNlIHRoZSB0ZXh0IGlzCisrICAgICAgICAgICAgICAgICMgaW4gYSBkaWZmZXJlbnQgZW5jb2RpbmcgdGhhbiB0aGUgbG9jYWxlCisrICAgICAgICAgICAgICAgIEJBUj1gZWNobyAtZSAiJEZPTyIgfCBMQ19BTEw9QyBzZWQgJ3MvIC0gLiokLy8nIHwgdHIgJyBbXScgJ18nIHwgc29ydCAtdWAKKysgICAgICAgICAgICAgICAgZm9yIGkgaW4gJEJBUgorKyAgICAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICAgICAgaWYgISBlY2hvICIkQkFaIiB8IGdyZXAgIiRpIiA+IC9kZXYvbnVsbAorKyAgICAgICAgICAgICAgICAgICAgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIEJBWj0iJEJBWiAkaSIKKysgICAgICAgICAgICAgICAgICAgICAgICBpPSJeYGVjaG8gJGkgfCBzZWQgJ3M6X1wrOlxcXChcW18gXF1cXFx8XFxcW1xcXHxcXFxdXFxcKVxcXCs6ZydgIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLWUgIiRGT08iIHwgZ3JlcCAiJGkiCisrICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQ9MQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG9uZQorICMgU29tZSBwZW9wbGUgYXJlIHNhdGlzZmllZCB3aXRoIGEgc2luZ2xlIG9jY3VycmVuY2UKKyAjIEJ1dCBpdCBpcyBiZXR0ZXIgdG8gZ2l2ZSBhbGwKKyAjICAgICAgICAgICAgICAgYnJlYWsKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaCBtYW4tMS42ZS9zcmMvbWFrZXdoYXRpcy5zaAorLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2gJMjAwNy0wNS0xOCAxMzo0OTozMS4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFrZXdoYXRpcy5zaAkyMDA3LTA1LTE4IDEzOjUwOjA3LjAwMDAwMDAwMCAtMDMwMAorQEAgLTQxLDEyICs0MSwzMiBAQAorIAorIHByb2dyYW09YGJhc2VuYW1lICQwYAorIAorKyMgdGhpcyBhbGxvd3MgdG8gZGVmaW5lIGxhbmd1YWdlIHNwZWNpZmljIHZhbHVlcyBmcm8gTkFNRSwgREVTQ1JJUFRJT04KKysjIGlmIG5vdCBkZWZpbmVkLCB1c2luZyB0aG9zZSBkZWZhdWx0IHZhbHVlcworK2lmIFsgLXogIiRNQU5fTkFNRSIgXQorK3RoZW4KKysJTUFOX05BTUU9ItCY0JzQlXxOT018Sk3DiU5PfE5BVk58zp/Onc6fzpzOkXxOT01CUkV8TklNRXxJWkVOQXxOSU1JfElNRXxcCisrTsOJVnxOT01FfOWQjeWJjXzsnbTrpoR8TkFBTXxOQVpXQXxOVU1FfNCY0JzQr3xNRU5PfNCd0JDQl9CS0JB85ZCN56ewfOWQjeeosSIKKytmaQorK2lmIFsgLXogIiRNQU5fREVTQ1JJUFRJT04iIF0KKyt0aGVuCisrCU1BTl9ERVNDUklQVElPTj0i0J7Qn9CY0KHQkNCd0JjQlXxERVNDUklQQ0nDk3xQT1BJU3xCRVNLUklWRUxTRXxCRVNDSFJFSUJVTkd8XAorK86gzpXOoc6ZzpPOoc6RzqbOl3xERVNDUklQQ0nDk058S0lSSkVMRFVTfEFaQUxQRU5BfEtVVkFVU3xPUElTfExFw41Sw4FTfERFU0NSSVpJT05FfFwKKyvoqqzmmI587ISk66qFfEJFU0NIUklKVklOR3xERVNDUknDh8ODT3xERVNDUklFUkV80J7Qn9CY0KF85o+P6L+wIgorK2ZpCisrIyBtYWtlIHRoZW0gaW50byBhd2sgcmVnZXhwCisrTUFOX05BTUU9Il4oJHtNQU5fTkFNRX0pIjsKKytNQU5fREVTQ1JJUFRJT049Il4oJHtNQU5fREVTQ1JJUFRJT059KSI7CisrCisgIyBJbiBjYXNlIGJvdGggL3Vzci9tYW4gYW5kIC91c3Ivc2hhcmUvbWFuIGV4aXN0LCB0aGUgZm9ybWVyIGlzIGxvY2FsCisgIyBhbmQgc2hvdWxkIGJlIGZpcnN0LgorICMgSXQgaXMgYSBidWcgdG8gYWRkIC92YXIvY2FjaGUvbWFuIHRvIERFRkNBVFBBVEguCisgZG09CisgZm9yIGQgaW4gL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4gL3Vzci9YMTFSNi9tYW4gL3Vzci9sb2NhbC9tYW4KKyBkbworKyAgICBpZiBbIC1uICIkTEFORyIgLWEgLWQgIiRkLyRMQU5HIiBdOyB0aGVuCisrCWlmIFsgeCRkbSA9IHggXTsgdGhlbiBkbT0iJGQvJExBTkciOyBlbHNlIGRtPSRkbToiJGQvJExBTkciOyBmaQorKyAgICBmaQorICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRtID0geCBdOyB0aGVuIGRtPSRkOyBlbHNlIGRtPSRkbTokZDsgZmkKKyAgICAgZmkKK0BAIC01NSw2ICs3NSw5IEBACisgZGM9CisgZm9yIGQgaW4gL3Zhci9jYWNoZS9tYW4gL3Vzci9zaGFyZS9tYW4vcHJlZm9ybWF0IC91c3IvbWFuL3ByZWZvcm1hdCAvdXNyL3NoYXJlL21hbiAvdXNyL21hbgorIGRvCisrICAgIGlmIFsgLW4gIiRMQU5HIiAtYSAtZCAiJGQvJExBTkciIF07IHRoZW4KKysJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRtPSIkZC8kTEFORyI7IGVsc2UgZG09JGRjOiIkZC8kTEFORyI7IGZpCisrICAgIGZpCisgICAgIGlmIFsgLWQgJGQgXTsgdGhlbgorIAlpZiBbIHgkZGMgPSB4IF07IHRoZW4gZGM9JGQ7IGVsc2UgZGM9JGRjOiRkOyBmaQorICAgICBmaQorQEAgLTE5NCw3ICsyMTcsNyBAQAorIAkgICAgc2VjdGlvbj0kaQorIAkgICAgY3VyZGlyPSRtYW5kaXIvJHtwYWdlc30kaQorIAkgICAgZXhwb3J0IHNlY3Rpb24gdmVyYm9zZSBjdXJkaXIKKy0JICAgIGZpbmQgJG1hbmRpci8ke3BhZ2VzfSRpLy4gLW5hbWUgJyonICRmaW5kYXJnMCAkZmluZGFyZyAtcHJpbnQgfCAkQVdLICcKKysJICAgIGZpbmQgJG1hbmRpci8ke3BhZ2VzfSRpLy4gLW5hbWUgJyonICRmaW5kYXJnMCAkZmluZGFyZyAtcHJpbnQgfCBMQ19BTEw9QyAkQVdLIC12IE1BTl9OQU1FPSIkTUFOX05BTUUiIC12IE1BTl9ERVNDUklQVElPTj0iJE1BTl9ERVNDUklQVElPTiIgJworIAorIAkgICAgZnVuY3Rpb24gcmVhZGxpbmUoKSB7CisgCSAgICAgIGlmICh1c2VfemNhdCB8fCB1c2VfYnpjYXQpIHsKK0BAIC0yNjEsMTMgKzI4NCw3IEBACisgCQlnc3ViKC8uXGIvLCAiIik7CisgCQlpZiAoKCQxIH4gL15cLltTc11bSGhdLyAmJgorIAkJICAoJDIgfiAvW05uXVtBYV1bTW1dW0VlXS8gfHwKKy0JCSAgICQyIH4gL15KTclOTy8gfHwgJDIgfiAvXk5BVk4vIHx8ICQyIH4gL15OVU1FLyB8fAorLQkJICAgJDIgfiAvXkJFWkVJQ0hOVU5HLyB8fCAkMiB+IC9eTk9NQlJFLyB8fAorLQkJICAgJDIgfiAvXk5JTUkvIHx8ICQyIH4gL15OT00vIHx8ICQyIH4gL15JTUUvIHx8CistCQkgICAkMiB+IC9eTlvJRV1WLyB8fCAkMiB+IC9eTkFNQS8gfHwgJDIgfiAvXsy+wbAvIHx8CistCQkgICAkMiB+IC9ezL6+zi8gfHwgJDIgfiAvXsDMuKcvIHx8ICQyIH4gL15OQVpXQS8gfHwKKy0JCSAgICQyIH4gL17u4fr34e7p5S8gfHwgJDIgfiAvXsP7s8YvIHx8ICQyIH4gL16mV7rZLyB8fAorLQkJICAgJDIgfiAvXk5PTUUvIHx8ICQyIH4gL15OQUFNLyB8fCAkMiB+IC9eyMzFLykpIHx8CisrCQkgICAkMiB+IE1BTl9OQU1FICkpIHx8CisgCQkgIChwYWdlcyA9PSAiY2F0IiAmJiAkMSB+IC9eTkFNRS8pKSB7CisgCQkgICAgaWYgKCFpbnNoKSB7CisgCQkgICAgICBpbnNoID0gMTsKK0BAIC0yNzgsNiArMjk1LDcgQEAKKyAJCSAgaWYgKCQxIH4gL15cLltTc11bSGhZU10vIHx8CisgCQkgICAgKHBhZ2VzID09ICJjYXQiICYmCisgCQkgICAgKCQxIH4gL15TW3lZZUVdLyB8fCAkMSB+IC9eREVTQ1JJUFRJT04vIHx8CisrCQkgICAgICQxIH4gTUFOX0RFU0NSSVBUSU9OIHx8CisgCQkgICAgICQxIH4gL15DT01NQU5ELyB8fCAkMSB+IC9eT1ZFUlZJRVcvIHx8CisgCQkgICAgICQxIH4gL15TVFJVQ1RVUkVTLyB8fCAkMSB+IC9eSU5UUk9EVUNUSU9OLyB8fAorIAkJICAgICAkMCB+IC9eW14gXS8pKSkgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbWFuZGlycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0MDA2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFuLmNvbmYuaW4JMjAwNS0wOC0yMCAyMDoyNjowNi4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFuLmNvbmYuaW4JMjAwNy0wNS0xOCAxMDozMDoyOS4wMDAwMDAwMDAgLTAzMDAKK0BAIC0zNiwxMSArMzYsMTIgQEAKKyAjCisgIyBFdmVyeSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBNQU5QQVRIIGluY2x1ZGVzIHRoZXNlIGZpZWxkcworICMKKy1NQU5QQVRICS91c3IvbWFuCisgTUFOUEFUSAkvdXNyL3NoYXJlL21hbgorK01BTlBBVEgJL3Vzci9YMTFSNi9tYW4KKyBNQU5QQVRICS91c3IvbG9jYWwvbWFuCisgTUFOUEFUSAkvdXNyL2xvY2FsL3NoYXJlL21hbgorLU1BTlBBVEgJL3Vzci9YMTFSNi9tYW4KKytNQU5QQVRICS91c3Iva2VyYmVyb3MvbWFuCisrTUFOUEFUSAkvdXNyL21hbgorICMKKyAjIFVuY29tbWVudCBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIG9uZSBvZiB0aGVzZSBieSBkZWZhdWx0CisgIworQEAgLTY3LDYgKzY4LDkgQEAKKyBNQU5QQVRIX01BUAkvdXNyL1gxMVI2L2JpbgkJL3Vzci9YMTFSNi9tYW4KKyBNQU5QQVRIX01BUAkvdXNyL2Jpbi9YMTEJCS91c3IvWDExUjYvbWFuCisgTUFOUEFUSF9NQVAJL3Vzci9iaW4vbWgJCS91c3Ivc2hhcmUvbWFuCisrTUFOUEFUSF9NQVAJL3Vzci9rZXJiZXJvcy9iaW4JCS91c3Iva2VyYmVyb3MvbWFuCisrTUFOUEFUSF9NQVAJL3Vzci9rZXJiZXJvcy9zYmluCQkvdXNyL2tlcmJlcm9zL21hbgorKworICMKKyAjIE5PQVVUT1BBVEgga2VlcHMgbWFuIGZyb20gYXV0b21hdGljYWxseSBhZGRpbmcgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UKKyAjIG1hbnVhbCBwYWdlIGRpcmVjdG9yaWVzIHRvIHRoZSBwYXRoLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTc3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1uZXdfc2VjdGlvbnMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNmUub3JpZy9jb25maWd1cmUJMjAwNi0wNS0wMSAxNDo1NjoxNC4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9jb25maWd1cmUJMjAwNy0wNS0xOCAxNDozNTo0My4wMDAwMDAwMDAgLTAzMDAKK0BAIC05NjAsNyArOTYwLDcgQEAKKyAKKyAjIFdoYXQgc2VjdGlvbnMgZG8gd2UgYW50aWNpcGF0ZT8KKyAKKy10bXBzZWN0aW9ucz0iMSAxcCA4IDIgMyAzcCA0IDUgNiA3IDkgMHAgdGNsIG4gbCBwIG8iCisrdG1wc2VjdGlvbnM9IjEgMXAgOCAyIDMgM3AgM3BtIDQgNSA2IDcgOSAwcCB0Y2wgbiBsIHAgbyIKKyAKKyBpZiBbIHgkZGVmYXVsdCA9IHggXTsgdGhlbgorICAgZWNobyAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1yb191c3IucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogbWFuLTEuNmYvc3JjL21ha2V3aGF0aXMuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYW4tMS42Zi5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NDI6MzQuMDAwMDAwMDAwIC0wODAwCisrKysgbWFuLTEuNmYvc3JjL21ha2V3aGF0aXMuc2gJMjAxMC0xMi0yOSAxMzo0MjozNS42Njc0MjgzNDcgLTA4MDAKK0BAIC0xMjQsNyArMTI0LDcgQEAKKyAJY29udGludWU7OworICAgICAtcykgc2V0c2VjdGlvbnM9MQorIAljb250aW51ZTs7CistICAgIC11KSBmaW5kYXJnPSItY3RpbWUgMCIKKysgICAgLXUpIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCisgCXVwZGF0ZT0xCisgCWNvbnRpbnVlOzsKKyAgICAgLXYpIHZlcmJvc2U9MQorQEAgLTE2NSwxNCArMTY1LDcgQEAKKyAjIGZpcnN0IHRydW5jYXRlIGFsbCB0aGUgd2hhdGlzIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIG5ldywKKyAjIHRoZW4gb25seSB1cGRhdGUgLSB3ZSBtaWdodCB2aXNpdCB0aGUgc2FtZSBkaXJlY3RvcnkgdHdpY2UKKyBpZiBbIHgkdXBkYXRlID0geCBdOyB0aGVuCistICAgZm9yIHBhZ2VzIGluIG1hbiBjYXQKKy0gICBkbworLSAgICAgIGV2YWwgcGF0aD0iXCQkcGFnZXMicGF0aAorLSAgICAgIGZvciBtYW5kaXIgaW4gJHBhdGgKKy0gICAgICBkbworLQkgY3AgL2Rldi9udWxsICRtYW5kaXIvd2hhdGlzCistICAgICAgZG9uZQorLSAgIGRvbmUKKysgICBjcCAvZGV2L251bGwgL3Zhci9jYWNoZS9tYW4vd2hhdGlzCisgZmkKKyAKKyBmb3IgcGFnZXMgaW4gbWFuIGNhdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtc2VjdXJpdHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1zZWN1cml0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJhODgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtc2VjdXJpdHkucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2ggbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMDYtMDctMTkgMDE6NTg6MDguMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gJMjAwNy0wNS0xOCAxMDoxODozMS4wMDAwMDAwMDAgLTAzMDAKK0BAIC00NSw3ICs0NSw3IEBACisgIyBhbmQgc2hvdWxkIGJlIGZpcnN0LgorICMgSXQgaXMgYSBidWcgdG8gYWRkIC92YXIvY2FjaGUvbWFuIHRvIERFRkNBVFBBVEguCisgZG09CistZm9yIGQgaW4gL3Vzci9tYW4gL3Vzci9zaGFyZS9tYW4gL3Vzci9YMTFSNi9tYW4gL3Vzci9sb2NhbC9tYW4KKytmb3IgZCBpbiAvdXNyL3NoYXJlL21hbiAvdXNyL21hbiAvdXNyL1gxMVI2L21hbiAvdXNyL2xvY2FsL21hbgorIGRvCisgICAgIGlmIFsgLWQgJGQgXTsgdGhlbgorIAlpZiBbIHgkZG0gPSB4IF07IHRoZW4gZG09JGQ7IGVsc2UgZG09JGRtOiRkOyBmaQorQEAgLTUzLDcgKzUzLDcgQEAKKyBkb25lCisgREVGTUFOUEFUSD0kZG0KKyBkYz0KKy1mb3IgZCBpbiAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9tYW4gL3Vzci9zaGFyZS9tYW4vcHJlZm9ybWF0IC91c3Ivc2hhcmUvbWFuCisrZm9yIGQgaW4gL3Zhci9jYWNoZS9tYW4gL3Vzci9zaGFyZS9tYW4vcHJlZm9ybWF0IC91c3IvbWFuL3ByZWZvcm1hdCAvdXNyL3NoYXJlL21hbiAvdXNyL21hbgorIGRvCisgICAgIGlmIFsgLWQgJGQgXTsgdGhlbgorIAlpZiBbIHgkZGMgPSB4IF07IHRoZW4gZGM9JGQ7IGVsc2UgZGM9JGRjOiRkOyBmaQorQEAgLTc2LDEyICs3NiwxMiBAQAorICMgV2UgdHJ5IGhlcmUgdG8gYmUgY2FyZWZ1bCAoYW5kIGF2b2lkIHByZWNvbnN0cnVjdGVkIHN5bWxpbmtzKQorICMgaW4gY2FzZSBtYWtld2hhdGlzIGlzIHJ1biBhcyByb290LCBieSBjcmVhdGluZyBhIHN1YmRpcmVjdG9yeSBvZiAvdG1wLgorIAorLVRNUEZJTEVESVI9L3RtcC93aGF0aXMudG1wLmRpci4kJAorLXJtIC1yZiAkVE1QRklMRURJUgorLWlmICEgbWtkaXIgLW0gMDcwMCAkVE1QRklMRURJUjsgdGhlbgorLSAgICBlY2hvIENvdWxkIG5vdCBjcmVhdGUgJFRNUEZJTEVESVIKKy0gICAgZXhpdCAxOworK1RNUEZJTEVESVI9YG1rdGVtcCAtZCAvdG1wL21ha2V3aGF0aXNYWFhYWFhgCisraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrICAgZWNobyAiJDA6IENhbid0IGNyZWF0ZSB0ZW1wIGZpbGUsIGV4aXRpbmcuLi4iCisrICAgZXhpdCAxCisgZmkKKytjaG1vZCAwNzAwICRUTVBGSUxFRElSCisgVE1QRklMRT0kVE1QRklMRURJUi93CisgCisgIyBtYWtlIHN1cmUgVE1QRklMRURJUiBpcyBkZWxldGVkIGlmIHByb2dyYW0gaXMga2lsbGVkIG9yIHRlcm1pbmF0ZXMKK2RpZmYgLU5hdXIgbWFuLTEuNmUub3JpZy9zcmMvbWFuLmMgbWFuLTEuNmUvc3JjL21hbi5jCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFuLmMJMjAwNi0wNS0wMSAxNzozNDoyMi4wMDAwMDAwMDAgLTAzMDAKKysrKyBtYW4tMS42ZS9zcmMvbWFuLmMJMjAwNy0wNS0xOCAxMDoxMTozMy4wMDAwMDAwMDAgLTAzMDAKK0BAIC0xMjM0LDcgKzEyMzQsNiBAQAorICNlbmRpZgorIAorIAorLSNpZiAwCisgICAgICB7CisgCS8qIFRoZXJlIGFyZSBubyBrbm93biBjYXNlcyBvZiBidWZmZXIgb3ZlcmZsb3cgY2F1c2VkIGJ5CisgCSAgIGV4Y2Vzc2l2ZWx5IGxvbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJbiBjYXNlIHlvdSBmaW5kIG9uZSwKK0BAIC0xMjU3LDcgKzEyNTYsNiBAQAorIAkgICBNQU5fSUNPTlZfUEFUSCwgTUFOX0lDT05WX09QVCwgTUFOX0lDT05WX0lOUFVUX0NIQVJTRVQsCisgCSAgIE1BTl9JQ09OVl9PVVRQVVRfQ0hBUlNFVCwgTkxTUEFUSCwgUEFUSCAqLworICAgICAgfQorLSNlbmRpZgorIAorIAorICNpZm5kZWYgX19GcmVlQlNEX18gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS11c2VfaTE4bl92YXJzX2luX2Ffc3RkX3dheS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXVzZV9pMThuX3ZhcnNfaW5fYV9zdGRfd2F5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OGY3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS11c2VfaTE4bl92YXJzX2luX2Ffc3RkX3dheS5wYXRjaApAQCAtMCwwICsxLDE2MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvY2F0b3Blbi9jYXRvcGVuLmMgbWFuLTEuNmUvY2F0b3Blbi9jYXRvcGVuLmMKKy0tLSBtYW4tMS42ZS5vcmlnL2NhdG9wZW4vY2F0b3Blbi5jCTIwMDUtMDgtMjAgMjA6MjY6MDYuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvY2F0b3Blbi9jYXRvcGVuLmMJMjAwNy0wNS0xOCAxMTozMTowNS4wMDAwMDAwMDAgLTAzMDAKK0BAIC05LDIyICs5LDYzIEBACisgZXh0ZXJuIGNoYXIgKmluZGV4IChjb25zdCBjaGFyICosIGludCk7ICAgICAgICAgLyogbm90IGFsd2F5cyBpbiA8c3RyaW5nLmg+ICovCisgZXh0ZXJuIGNoYXIgKm15X21hbGxvYyhpbnQpOwkvKiBpbiB1dGlsLmMgKi8KKyAKKysvKiBpZiB0aGUgcHJvZ3JhbSBoYXMgc2dpZC9zdWlkIHByaXZpbGVnZXMgdGhlbiBnZXRlbnYgZG9lc24ndCByZXR1cm4KKysgKiBOTFNQQVRIOyBzbyB3ZSBzZXQgaGVyZSBhIGdvb2QgZGVmYXVsdCB2YWx1ZS4KKysgKi8KKyAjaWZuZGVmIERFRkFVTFRfTkxTUEFUSAorICMgaWYgX19HTElCQ19fID49IDIKKy0jICBkZWZpbmUgREVGQVVMVF9OTFNQQVRIICIvdXNyL3NoYXJlL2xvY2FsZS8lTC8lTiIKKysjICBkZWZpbmUgREVGQVVMVF9OTFNQQVRIICIvdXNyL3NoYXJlL2xvY2FsZS8lTC8lTjovdXNyL3NoYXJlL2xvY2FsZS8lbF8ldC8lTjovdXNyL3NoYXJlL2xvY2FsZS8lbC8lTiIKKyAjIGVsc2UKKyAjICBkZWZpbmUgREVGQVVMVF9OTFNQQVRIICIvdXNyL2xpYi9sb2NhbGUvJU4vJUwiCisgIyBlbmRpZgorICNlbmRpZgorIAorLXN0YXRpYyBubF9jYXRkIG15X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgpOworK3N0YXRpYyBubF9jYXRkIG15X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIGNoYXIgKmxhbmcpOworIAorIHN0YXRpYwkJCQkvKiB0aGlzIHNvdXJjZSBpbmNsdWRlZCBpbiBncmlwZXMuYyAqLworIG5sX2NhdGQKKyBteV9jYXRvcGVuKGNoYXIgKm5hbWUsIGludCBvZmxhZykgeworLSAgbmxfY2F0ZCBmZDsKKysgIG5sX2NhdGQgZmQgPSAobmxfY2F0ZCkgLTE7CisrCisrICAvKiB1c2luZyBmaXJzdCB0aGUgbXlfY2F0b3BlbnBhdGgsIHdoaWNoIGxvb2tzIHdpdGggTEFOR1VBR0UKKysgICAqIGFuZCBvbmx5IGlmIGl0IGZhaWxzIHJlc3NvcnQgdG8gY2F0b3BlbiwgaXQgZ2l2ZXMgYmV0dGVyIGkxOG4KKysgICAqLworKyAgeworKyAgICBjaGFyICpubHNwYXRoLCAqbGFuZywgKnM7CisgCistICBmZCA9IGNhdG9wZW4obmFtZSwgb2ZsYWcpOworKyAgICAvKgorKyAgICAgKiAiSWYgTkxTUEFUSCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZW52aXJvbm1lbnQsIG9yIGlmIGEKKysgICAgICogbWVzc2FnZSBjYXRhbG9nIGNhbm5vdCBiZSBvcGVuZWQgaW4gYW55IG9mIHRoZSBwYXRocyBzcGVjaWZpZWQKKysgICAgICogYnkgTkxTUEFUSCwgdGhlbiBhbiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGRlZmF1bHQgcGF0aCBpcyB1c2VkIgorKyAgICAgKi8KKysgICAgbmxzcGF0aCA9IGdldGVudigiTkxTUEFUSCIpOworKyAgICBpZiAoIW5sc3BhdGgpCisrICAgICAgbmxzcGF0aCA9IERFRkFVTFRfTkxTUEFUSDsKKysgCisrICAgIGxhbmcgPSBnZXRlbnYoIkxBTkdVQUdFIik7CisrICAgIGlmICghbGFuZykKKysgICAgICBsYW5nID0gZ2V0ZW52KCJMQ19BTEwiKTsKKysgICAgaWYgKCFsYW5nKQorKyAgICAgIGxhbmcgPSBnZXRlbnYoIkxDX01FU1NBR0VTIik7CisrICAgIGlmICghbGFuZykKKysgICAgICBsYW5nID0gZ2V0ZW52KCJMQU5HIik7CisrICAgIGlmICghbGFuZykKKysgICAgICBsYW5nID0gIiI7CisrIAorKyAgICB3aGlsZSgqbGFuZyAmJiAoZmQgPT0gKG5sX2NhdGQpIC0xKSkgeworKyAgICAgIHMgPSBpbmRleChsYW5nLCAnOicpOworKyAgICAgIGlmIChzKSAqcyA9IDA7CisrICAgICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIG5sc3BhdGgsIGxhbmcpOworKyAgICAgIGlmIChzKSBsYW5nPXMrMTsKKysgICAgICBlbHNlIGxhbmcgPSAiIjsKKysgICAgfQorKyAgICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xKQorKyAgICAgIGZkID0gbXlfY2F0b3BlbnBhdGgobmFtZSwgbmxzcGF0aCwgImVuIik7CisrICB9CisrCisrICAvKiBzdGlsbCBub3QgZm91bmQsIHVzZSB0aGUgc3lzdGVtIGNhdG9wZW4gKi8KKysgIGlmIChmZCA9PSAobmxfY2F0ZCkgLTEpCisrICAgIGZkID0gY2F0b3BlbihuYW1lLCBvZmxhZyk7CisgCisgICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xICYmIG9mbGFnKSB7CisgICAgIG9mbGFnID0gMDsKK0BAIC0zMiw4ICs3Myw2IEBACisgICB9CisgCisgICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xKSB7CistICAgIGNoYXIgKm5sc3BhdGg7CistCisgICAgIC8qIFRoZSBsaWJjIGNhdG9wZW4gZmFpbHMgLSBsZXQgdXMgc2VlIGlmIHdlIGNhbiBkbyBiZXR0ZXIgKi8KKyAgICAgLyogVGhlIHF1b3RlcyBiZWxvdyBhcmUgZnJvbSBYL09wZW4sIFhQRyAxOTg3LCBWb2wuIDMuICovCisgCitAQCAtNTgsMTcgKzk3LDYgQEAKKyAjZW5kaWYKKyAgICAgfQorIAorLSAgICAvKgorLSAgICAgKiAiSWYgTkxTUEFUSCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZW52aXJvbm1lbnQsIG9yIGlmIGEKKy0gICAgICogbWVzc2FnZSBjYXRhbG9nIGNhbm5vdCBiZSBvcGVuZWQgaW4gYW55IG9mIHRoZSBwYXRocyBzcGVjaWZpZWQKKy0gICAgICogYnkgTkxTUEFUSCwgdGhlbiBhbiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGRlZmF1bHQgcGF0aCBpcyB1c2VkIgorLSAgICAgKi8KKy0KKy0gICAgbmxzcGF0aCA9IGdldGVudigiTkxTUEFUSCIpOworLSAgICBpZiAobmxzcGF0aCkKKy0gICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIG5sc3BhdGgpOworLSAgICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xKQorLSAgICAgIGZkID0gbXlfY2F0b3BlbnBhdGgobmFtZSwgREVGQVVMVF9OTFNQQVRIKTsKKyAgIH0KKyAgIHJldHVybiBmZDsKKyB9CitAQCAtOTAsMTUgKzExOCwxMyBAQAorICAqCisgICovCisgc3RhdGljIG5sX2NhdGQKKy1teV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpubHNwYXRoKSB7CistICBpbnQgZmQ7CisrbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqbmxzcGF0aCwgY2hhciAqbGFuZykgeworICAgbmxfY2F0ZCBjZmQgPSAobmxfY2F0ZCkgLTE7CistICBjaGFyICpwYXRoMCwgKnBhdGgsICpzLCAqZmlsZSwgKmxhbmcsICpsYW5nX2wsICpsYW5nX3QsICpsYW5nX2M7CisrICBjaGFyICpwYXRoMCwgKnBhdGgsICpzLCAqZmlsZSwgKmxhbmdfbCwgKmxhbmdfdCwgKmxhbmdfYzsKKyAgIGludCBsYW5nc3osIG5hbWVzeiwgc3osIGxhbmdfbF9zeiwgbGFuZ190X3N6LCBsYW5nX2Nfc3o7CisgCisgICBuYW1lc3ogPSBzdHJsZW4obmFtZSk7CisgCistICBsYW5nID0gZ2V0ZW52KCJMQU5HIik7CisgICBpZiAoIWxhbmcpCisgICAgIGxhbmcgPSAiIjsKKyAgIGxhbmdzeiA9IHN0cmxlbihsYW5nKTsKK0BAIC0xOTQsMTQgKzIyMCw5IEBACisgICAgICAgcGF0aCA9IHMrMTsKKyAgICAgfSBlbHNlCisgICAgICAgcGF0aCA9IDA7CistICAgIGZkID0gb3BlbihmaWxlLCBPX1JET05MWSk7CistICAgIGlmIChmZCAhPSAtMSkgeworLSAgICAgIC8qIHdlIGZvdW5kIHRoZSByaWdodCBjYXRhbG9nIC0gYnV0IHdlIGRvbid0IGtub3cgdGhlCistCSB0eXBlIG9mIG5sX2NhdGQsIHNvIGNsb3NlIGl0IGFnYWluIGFuZCBhc2sgbGliYyAqLworLSAgICAgIGNsb3NlKGZkKTsKKy0gICAgICBjZmQgPSBjYXRvcGVuKGZpbGUsIDApOworLSAgICAgIGJyZWFrOworLSAgICB9CisrCWNmZCA9IGNhdG9wZW4oZmlsZSwgMCk7CisrCWlmIChjZmQgIT0gKG5sX2NhdGQpIC0xKQorKwkJCWJyZWFrOworICAgfQorIAorICAgZnJlZShwYXRoMCk7CitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21hbnBhdGguYyBtYW4tMS42ZS9zcmMvbWFucGF0aC5jCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFucGF0aC5jCTIwMDYtMDgtMDMgMTg6MTg6MzMuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbnBhdGguYwkyMDA3LTA1LTE4IDExOjAyOjQ4LjAwMDAwMDAwMCAtMDMwMAorQEAgLTI4MiwxMyArMjgyLDE0IEBACisgCQkvKiBXZSBjYW5ub3QgdXNlICJsYW5nID0gc2V0bG9jYWxlKExDX01FU1NBR0VTLCBOVUxMKSIgb3Igc286CisgCQkgICB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldGxvY2FsZSBpcyBhbiBvcGFxdWUgc3RyaW5nLiAqLworIAkJLyogUE9TSVggcHJlc2NyaWJlcyB0aGUgb3JkZXI6IExDX0FMTCwgTENfTUVTU0FHRVMsIExBTkcgKi8KKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQ19BTEwiKSkgIT0gTlVMTCkKKysJICAgICAgICAvKiBMQU5HVUFHRSBpcyBHTlUvTGludXggYW5kIG92ZXJydWxlcyBhbGwgKi8KKysJCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpKSAhPSBOVUxMKQorKwkJZWxzZSBpZigobGFuZyA9IGdldGVudigiTENfQUxMIikpICE9IE5VTEwpCisgCQkJc3BsaXQyKGRpciwgbGFuZywgYWRkX3RvX21hbmRpcmxpc3RfeCwgcGVycnMpOworLQkJaWYoKGxhbmcgPSBnZXRlbnYoIkxBTkciKSkgIT0gTlVMTCkKKysJCWVsc2UgaWYoKGxhbmcgPSBnZXRlbnYoIkxDX01FU1NBR0VTIikpICE9IE5VTEwpCisgCQkJc3BsaXQyKGRpciwgbGFuZywgYWRkX3RvX21hbmRpcmxpc3RfeCwgcGVycnMpOworLQkJaWYoKGxhbmcgPSBnZXRlbnYoIkxBTkdVQUdFIikpICE9IE5VTEwpCisrCQllbHNlIGlmKChsYW5nID0gZ2V0ZW52KCJMQU5HIikpICE9IE5VTEwpCisgCQkJc3BsaXQyKGRpciwgbGFuZywgYWRkX3RvX21hbmRpcmxpc3RfeCwgcGVycnMpOworIAkJYWRkX3RvX21hbmRpcmxpc3RfeChkaXIsIDAsIHBlcnJzKTsKKyAJfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtd2hhdGlzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0ZWQzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogbWFuLTEuNmYvc3JjL21ha2V3aGF0aXMuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYW4tMS42Zi5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NTE6NDUuMDAwMDAwMDAwIC0wODAwCisrKysgbWFuLTEuNmYvc3JjL21ha2V3aGF0aXMuc2gJMjAxMC0xMi0yOSAxMzo1OTozNS4zOTk3OTk0MTIgLTA4MDAKK0BAIC0xNjQsMTAgKzE2NCwxNSBAQAorIGZpCisgY2F0cGF0aD1gZWNobyAke2NhdHBhdGh9IHwgdHIgOiAnICdgCisgCisrI1dIQVRJU19ESVI9JERFU1RESVIvdmFyL2NhY2hlL21hbi9gZWNobyAkaGVyZXxzZWQgLWUgJ3MhLiovbWFuLyEhZydgCisrV0hBVElTX0RJUj0kREVTVERJUi92YXIvY2FjaGUvbWFuLyRMQU5HCisrW1sgLWQgJFdIQVRJU19ESVIgXV0gfHwgbWtkaXIgLXAgJFdIQVRJU19ESVIvCisrCisgIyBmaXJzdCB0cnVuY2F0ZSBhbGwgdGhlIHdoYXRpcyBmaWxlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBuZXcsCisgIyB0aGVuIG9ubHkgdXBkYXRlIC0gd2UgbWlnaHQgdmlzaXQgdGhlIHNhbWUgZGlyZWN0b3J5IHR3aWNlCisgaWYgWyB4JHVwZGF0ZSA9IHggXTsgdGhlbgorLSAgIGNwIC9kZXYvbnVsbCAvdmFyL2NhY2hlL21hbi93aGF0aXMKKysgICBta2RpciAtcCAkV0hBVElTX0RJUi8KKysgICAvYmluL2VjaG8gLW4gPiAkV0hBVElTX0RJUi93aGF0aXMKKyBmaQorIAorIGZvciBwYWdlcyBpbiBtYW4gY2F0CitAQCAtMTgwLDEzICsxODUsNyBAQAorIAllY2hvICJhYm91dCB0byBlbnRlciAkbWFuZGlyIiA+IC9kZXYvc3RkZXJyCisgICAgICBmaQorIAorLSAgICAgIyBrbHVkZ2UgZm9yIFNsYWNrd2FyZSdzIC91c3IvbWFuL3ByZWZvcm1hdAorLSAgICAgaWYgWyAkbWFuZGlyID0gL3Vzci9tYW4vcHJlZm9ybWF0IF0KKy0gICAgIHRoZW4KKy0JbWFuZGlyMT0vdXNyL21hbgorLSAgICAgZWxzZQorLQltYW5kaXIxPSRtYW5kaXIKKy0gICAgIGZpCisrICAgICBtYW5kaXIxPSRXSEFUSVNfRElSCisgCisgICAgICAjIGlmICRtYW5kaXIgaXMgb24gYSByZWFkb25seSBwYXJ0aXRpb24sIGFuZCB0aGUgd2hhdGlzIGZpbGUKKyAgICAgICMgaXMgbm90IGEgc3ltbGluaywgdGhlbiBsZXQncyBza2lwIHRyeWluZyB0byB1cGRhdGUgaXQKK0BAIC0yMDcsMTEgKzIwNiw2IEBACisgCWZpCisgICAgICBmaQorIAorLSAgICAgaWYgWyAtcyAke21hbmRpcn0vd2hhdGlzIC1hICRwYWdlcyA9IG1hbiAtYSB4JHVwZGF0ZSA9IHggXTsgdGhlbgorLQlpZiBbIHgkdmVyYm9zZSAhPSB4IF07IHRoZW4KKy0JICAgZWNobyBza2lwcGluZyAkbWFuZGlyIC0gd2UgZGlkIGl0IGFscmVhZHkgPiAvZGV2L3N0ZGVycgorLQlmaQorLSAgICAgZWxzZSAgICAgIAorICAgICAgICBoZXJlPWBwd2RgCisgICAgICAgIGNkICRtYW5kaXIKKyAgICAgICAgZm9yIGkgaW4gJHNlY3Rpb25zCitAQCAtNDQ3LDcgKzQ0Nyw2IEBACisKKyAgICAgICAgY2htb2QgNjQ0ICR7bWFuZGlyMX0vd2hhdGlzCisgICAgICAgIHJtICRUTVBGSUxFCistICAgICBmaQorICAgIGRvbmUKKyBkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42Zy13aGF0aXMzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM0NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitEbyBub3QgdXNlIGFic29sdXRlIHBhdGggZm9yIGF3ayB3aGlsZSBnZXR0aW5nIHRoZSBwYXRoIG9mIGF3aword2hlbiBydW5uaW5nIG1ha2V3aGF0aXMuCitUaGlzIGNhbiBhdm9pZCBlcnJvcnMgaWYgcGF0aCBvZiBhd2sgY2hhbmdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW21hbi0xLjZnXQorCitTaWduZWQtb2ZmLWJ5OiBKaWFuIExpdSA8amlhbi5saXVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtTnVyIG1hbi0xLjZnLm9yaWcvc3JjL21ha2V3aGF0aXMuc2ggbWFuLTEuNmcvc3JjL21ha2V3aGF0aXMuc2gKKy0tLSBtYW4tMS42Zy5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMTUtMDItMjUgMTY6MTM6MTIuNjU3NjExNDE5ICswODAwCisrKysgbWFuLTEuNmcvc3JjL21ha2V3aGF0aXMuc2gJMjAxNS0wMi0yNSAxNjoxNDo0OS4zMzQ2OTQ4MTUgKzA4MDAKK0BAIC02Nyw3ICs2Nyw3IEBACisgIyBidXQgdGhhdCBsZWFkcyB0byBwcm9ibGVtcyBhbmQgYnVncy4KKworICMgQVdLPS91c3IvYmluL2dhd2sKKy1BV0s9QGF3a0AKKytBV0s9YHdoaWNoIGF3a2AKKworICMgRmluZCBhIHBsYWNlIGZvciBvdXIgdGVtcG9yYXJ5IGZpbGVzLiBJZiBzZWN1cml0eSBpcyBub3QgYSBjb25jZXJuLCB1c2UKKyAjCVRNUEZJTEU9L3RtcC93aGF0aXMkJDsgVE1QRklMRURJUj1ub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uMS5neiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi4xLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjgwNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uMS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uNy5neiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi43Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWFmODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uNy5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTBiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uY29uZgpAQCAtMCwwICsxLDE0MSBAQAorIworIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIG1hbi5jb25mLmluIGJ5IHRoZQorIyBjb25maWd1cmUgc2NyaXB0LgorIworIyBtYW4uY29uZiBmcm9tIG1hbi0xLjVwCisjCisjIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmlsZSwgc2VlIHRoZSBtYW4gcGFnZXMgbWFuKDEpCisjIGFuZCBtYW4uY29uZig1KS4KKyMKKyMgVGhpcyBmaWxlIGlzIHJlYWQgYnkgbWFuIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBtYW5wYXRoIChhbHNvIHVzZWQKKyMgd2hlbiBNQU5QQVRIIGNvbnRhaW5zIGFuIGVtcHR5IHN1YnN0cmluZyksIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBjYXQKKyMgcGFnZXMgY29ycmVzcG9uZGluZyB0byBnaXZlbiBtYW4gcGFnZXMgc2hvdWxkIGJlIHN0b3JlZCwKKyMgYW5kIHRvIG1hcCBlYWNoIFBBVEggZWxlbWVudCB0byBhIG1hbnBhdGggZWxlbWVudC4KKyMgSXQgbWF5IGFsc28gcmVjb3JkIHRoZSBwYXRobmFtZSBvZiB0aGUgbWFuIGJpbmFyeS4gW1RoaXMgaXMgdW51c2VkLl0KKyMgVGhlIGZvcm1hdCBpczoKKyMKKyMgTUFOQklOCQlwYXRobmFtZQorIyBNQU5QQVRICQltYW5wYXRoX2VsZW1lbnQJW2NvcnJlc3BvbmRpbmdfY2F0ZGlyXQorIyBNQU5QQVRIX01BUAkJcGF0aF9lbGVtZW50CW1hbnBhdGhfZWxlbWVudAorIworIyBJZiBubyBjYXRkaXIgaXMgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgZXF1YWwgdG8gdGhlIG1hbmRpcgorIyAoc28gdGhhdCB0aGlzIGRpciBoYXMgYm90aCBtYW4xIGV0Yy4gYW5kIGNhdDEgZXRjLiBzdWJkaXJzKS4KKyMgVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgVW5peCBzZXR1cC4KKyMgQ2VydGFpbiB2ZXJzaW9ucyBvZiB0aGUgRlNTVE5EIHJlY29tbWVuZCBwdXR0aW5nIGZvcm1hdHRlZCB2ZXJzaW9ucworIyBvZiAvdXNyLy4uLi9tYW4vbWFueC9wYWdlLnggaW50byAvdmFyL2NhdG1hbi8uLi4vY2F0eC9wYWdlLnguCisjIFRoZSBrZXl3b3JkIEZTU1RORCB3aWxsIGNhdXNlIHRoaXMgYmVoYXZpb3VyLgorIyBDZXJ0YWluIHZlcnNpb25zIG9mIHRoZSBGSFMgcmVjb21tZW5kIHB1dHRpbmcgZm9ybWF0dGVkIHZlcnNpb25zIG9mCisjIC91c3IvLi4uL3NoYXJlL21hbi9bbG9jYWxlL11tYW54L3BhZ2UueCBpbnRvCisjIC92YXIvY2FjaGUvbWFuLy4uLi9bbG9jYWxlL11jYXR4L3BhZ2UueC4KKyMgVGhlIGtleXdvcmQgRkhTIHdpbGwgY2F1c2UgdGhpcyBiZWhhdmlvdXIgKGFuZCBvdmVycmlkZXMgRlNTVE5EKS4KKyMgRXhwbGljaXRseSBnaXZlbiBjYXRkaXJzIG92ZXJyaWRlLgorIworIyBGU1NUTkQKK0ZIUworIworIyBUaGlzIGZpbGUgaXMgYWxzbyByZWFkIGJ5IG1hbiBpbiBvcmRlciB0byBmaW5kIGhvdyB0byBjYWxsIG5yb2ZmLCBsZXNzLCBldGMuLAorIyBhbmQgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGV4dGVuc2lvbnMgYW5kIGRlY29tcHJlc3NvcnMuCisjCisjIE1BTkJJTgkJL3Vzci9sb2NhbC9iaW4vbWFuCisjCisjIEV2ZXJ5IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIE1BTlBBVEggaW5jbHVkZXMgdGhlc2UgZmllbGRzCisjCitNQU5QQVRICS91c3IvbWFuCitNQU5QQVRICS91c3Ivc2hhcmUvbWFuCitNQU5QQVRICS91c3IvbG9jYWwvbWFuCitNQU5QQVRICS91c3IvbG9jYWwvc2hhcmUvbWFuCitNQU5QQVRICS91c3IvWDExUjYvbWFuCisjCisjIFVuY29tbWVudCBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIG9uZSBvZiB0aGVzZSBieSBkZWZhdWx0CisjCisjIE1BTlBBVEgJL29wdC8qL21hbgorIyBNQU5QQVRICS91c3IvbGliLyovbWFuCisjIE1BTlBBVEgJL3Vzci9zaGFyZS8qL21hbgorIyBNQU5QQVRICS91c3Iva2VyYmVyb3MvbWFuCisjCisjIFNldCB1cCBQQVRIIHRvIE1BTlBBVEggbWFwcGluZworIworIyBJZiBwZW9wbGUgYXNrIGZvciAibWFuIGZvbyIgYW5kIGhhdmUgIi9kaXIvYmluL2ZvbyIgaW4gdGhlaXIgUEFUSAorIyBhbmQgdGhlIGRvY3MgYXJlIGZvdW5kIGluICIvZGlyL21hbiIsIHRoZW4gbm8gbWFwcGluZyBpcyByZXF1aXJlZC4KKyMKKyMgVGhlIGJlbG93IG1hcHBpbmdzIGFyZSBzdXBlcmZsdW91cyB3aGVuIHRoZSByaWdodCBoYW5kIHNpZGUgaXMKKyMgaW4gdGhlIG1hbmRhdG9yeSBtYW5wYXRoIGFscmVhZHksIGJ1dCB3aWxsIGtlZXAgbWFuIGZyb20gc3RhdHRpbmcKKyMgbG90cyBvZiBvdGhlciBuZWFyYnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorIworTUFOUEFUSF9NQVAJL2JpbgkJCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvc2JpbgkJCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL2JpbgkJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3Ivc2JpbgkJL3Vzci9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvbG9jYWwvYmluCQkvdXNyL2xvY2FsL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9sb2NhbC9zYmluCQkvdXNyL2xvY2FsL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9YMTFSNi9iaW4JCS91c3IvWDExUjYvbWFuCitNQU5QQVRIX01BUAkvdXNyL2Jpbi9YMTEJCS91c3IvWDExUjYvbWFuCitNQU5QQVRIX01BUAkvdXNyL2Jpbi9taAkJL3Vzci9zaGFyZS9tYW4KKyMKKyMgTk9BVVRPUEFUSCBrZWVwcyBtYW4gZnJvbSBhdXRvbWF0aWNhbGx5IGFkZGluZyBkaXJlY3RvcmllcyB0aGF0IGxvb2sgbGlrZQorIyBtYW51YWwgcGFnZSBkaXJlY3RvcmllcyB0byB0aGUgcGF0aC4KKyMKKyNOT0FVVE9QQVRICisjCisjIE5PQ0FDSEUga2VlcHMgbWFuIGZyb20gY3JlYXRpbmcgY2FjaGUgcGFnZXMgKCJjYXQgcGFnZXMiKQorIyAoZ2VuZXJhbGx5IG9uZSBlbmFibGVzL2Rpc2FibGUgY2F0IHBhZ2UgY3JlYXRpb24gYnkgY3JlYXRpbmcvZGVsZXRpbmcKKyMgdGhlIGRpcmVjdG9yeSB0aGV5IHdvdWxkIGxpdmUgaW4gLSBtYW4gbmV2ZXIgZG9lcyBta2RpcikKKyMgCisjTk9DQUNIRQorIworIyBVc2VmdWwgcGF0aHMgLSBub3RlIHRoYXQgQ09MIHNob3VsZCBub3QgYmUgZGVmaW5lZCB3aGVuCisjIE5ST0ZGIGlzIGRlZmluZWQgYXMgImdyb2ZmIC1UYXNjaWkiIG9yICJncm9mZiAtVGxhdGluMSI7CisjIG5vdCBvbmx5IGlzIGl0IHN1cGVyZmx1b3VzLCBidXQgaXQgYWN0dWFsbHkgZGFtYWdlcyB0aGUgb3V0cHV0LgorIyBGb3IgdXNlIHdpdGggdXRmLTgsIE5ST0ZGIHNob3VsZCBiZSAibnJvZmYgLW1hbmRvYyIgd2l0aG91dCAtVCBvcHRpb24uCisjIChNYXliZSAtIGJ1dCB0b2RheSBJIG5lZWQgLVRsYXRpbjEgdG8gcHJldmVudCBkb3VibGUgY29udmVyc2lvbiB0byB1dGY4LikKKyMKKyMgSWYgeW91IGhhdmUgYSBuZXcgdHJvZmYgKHZlcnNpb24gMS4xOC4xPykgYW5kIGl0cyBjb2xvcmVkIG91dHB1dAorIyBjYXVzZXMgcHJvYmxlbXMsIGFkZCB0aGUgLWMgb3B0aW9uIHRvIFRST0ZGLCBOUk9GRiwgSk5ST0ZGLgorIworVFJPRkYJCS91c3IvYmluL2dyb2ZmIC1UcHMgLW1hbmRvYworTlJPRkYJCS91c3IvYmluL25yb2ZmIC1UbGF0aW4xIC1tYW5kb2MKK0pOUk9GRgkJL3Vzci9iaW4vZ3JvZmYgLVRuaXBwb24gLW1hbmRvY2oKK0VRTgkJL3Vzci9iaW4vZXFuIC1UcHMKK05FUU4JCS91c3IvYmluL2VxbiAtVGxhdGluMQorSk5FUU4JCS91c3IvYmluL2VxbiAtVG5pcHBvbgorVEJMCQkvdXNyL2Jpbi90YmwKKyMgQ09MCQkvdXNyL2Jpbi9jb2wKK1JFRkVSCQkvdXNyL2Jpbi9yZWZlcgorUElDCQkvdXNyL2Jpbi9waWMKK1ZHUklORAkJCitHUkFQCQkKK1BBR0VSCQkvdXNyL2Jpbi9sZXNzIC1pc1IKK0NBVAkJL2Jpbi9jYXQKKyMKKyMgVGhlIGNvbW1hbmQgIm1hbiAtYSB4eXp6eSIgd2lsbCBzaG93IGFsbCBtYW4gcGFnZXMgZm9yIHh5enp5LgorIyBXaGVuIENNUCBpcyBkZWZpbmVkIG1hbiB3aWxsIHRyeSB0byBhdm9pZCBzaG93aW5nIHRoZSBzYW1lCisjIHRleHQgdHdpY2UuIChCdXQgY29tcHJlc3NlZCBwYWdlcyBjb21wYXJlIHVuZXF1YWwuKQorIworQ01QCQkvdXNyL2Jpbi9jbXAgLXMKKyMKKyMgQ29tcHJlc3MgY2F0IHBhZ2VzCisjCitDT01QUkVTUwkvYmluL2J6aXAyCitDT01QUkVTU19FWFQJLmJ6MgorIworIyBEZWZhdWx0IG1hbnVhbCBzZWN0aW9ucyAoYW5kIG9yZGVyKSB0byBzZWFyY2ggaWYgLVMgaXMgbm90IHNwZWNpZmllZAorIyBhbmQgdGhlIE1BTlNFQ1QgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC4KKyMKK01BTlNFQ1QJCTE6MXA6ODoyOjM6M3A6NDo1OjY6Nzo5OjBwOnRjbDpuOmw6cDpvCisjCisjIERlZmF1bHQgb3B0aW9ucyB0byB1c2Ugd2hlbiBtYW4gaXMgaW52b2tlZCB3aXRob3V0IG9wdGlvbnMKKyMgVGhpcyBpcyBtYWlubHkgZm9yIHRoZSBiZW5lZml0IG9mIHRob3NlIHRoYXQgdGhpbmsgLWEgc2hvdWxkIGJlIHRoZSBkZWZhdWx0CisjIE5vdGUgdGhhdCBzb21lIHN5c3RlbXMgaGF2ZSAvdXNyL21hbi9hbGxtYW4sIGNhdXNpbmcgcGFnZXMgdG8gYmUgc2hvd24gdHdpY2UuCisjCisjTUFOREVGT1BUSU9OUwktYQorIworIyBEZWNvbXByZXNzIHdpdGggZ2l2ZW4gZGVjb21wcmVzc29yIHdoZW4gaW5wdXQgZmlsZSBoYXMgZ2l2ZW4gZXh0ZW5zaW9uCisjIFRoZSBjb21tYW5kIGdpdmVuIG11c3QgYWN0IGFzIGEgZmlsdGVyLgorIworLmd6CQkvYmluL2d1bnppcCAtYworLmJ6MgkJL3Vzci9iaW4vYnVuemlwMiAtYworLnh6CQkvdXNyL2Jpbi91bnh6IC1jCisuegkJCisuWgkJL2Jpbi96Y2F0CisuRgkJCisuWQkJCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3ogYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxMmZmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbnBhdGguNS5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbl8xLjZnLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ3MzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYgpAQCAtMCwwICsxLDg0IEBACitTVU1NQVJZID0gIk9ubGluZSBkb2N1bWVudGF0aW9uIHRvb2xzIgorREVTQ1JJUFRJT04gPSAiQSBzZXQgb2YgZG9jdW1lbnRhdGlvbiB0b29sczogbWFuLCBhcHJvcG9zIGFuZCB3aGF0aXMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitIT01FUEFHRSA9ICJodHRwOi8vcHJpbWF0ZXMueGltaWFuLmNvbS9+Zmx1Y2lmcmVkaS9tYW4iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIiCisKK1BSID0gInIxIgorCitERVBFTkRTID0gImdyb2ZmIGxlc3MiCisKK2RlZiBjb21wcmVzc19wa2coZCk6CisgICAgaWYgImNvbXByZXNzX2RvYyIgaW4gKGQuZ2V0VmFyKCJJTkhFUklUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICBjb21wcmVzcyA9IGQuZ2V0VmFyKCJET0NfQ09NUFJFU1MiLCBUcnVlKQorICAgICAgICAgaWYgY29tcHJlc3MgPT0gImd6IjoKKyAgICAgICAgICAgICByZXR1cm4gImd6aXAiCisgICAgICAgICBlbGlmIGNvbXByZXNzID09ICJiejIiOgorICAgICAgICAgICAgIHJldHVybiAiYnppcDIiCisgICAgICAgICBlbGlmIGNvbXByZXNzID09ICJ4eiI6CisgICAgICAgICAgICAgcmV0dXJuICJ4eiIKKyAgICByZXR1cm4gIiIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGNvbXByZXNzX3BrZyhkKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvbG9va2FzaWRlL3BrZ3MvbWFuMmh0bWwvJHtCUH0udGFyLmd6L2JhMTU0ZDU3OTY5MjhiODQxYzljNjlmMGFlMzc2NjYwLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ay1jb25mcGF0aC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWgxLW1ha2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtc2VjdXJpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtbWFuZGlycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItYnVnMTE2MjEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWstc29maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLWJ1aWxkcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1yb191c3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVqLXV0ZjgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVqLW5vY2FjaGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWkyLWluaXRpYWwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi10dl9maHMucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVqLWkxOG4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtd2hhdGlzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS11c2VfaTE4bl92YXJzX2luX2Ffc3RkX3dheS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLWkxOG5fd2hhdGlzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4uMS5nejt1bnBhY2s9ZmFsc2UgXAorICAgICAgICAgICBmaWxlOi8vbWFuLjcuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL21hbnBhdGguNS5nejt1bnBhY2s9ZmFsc2UgXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmctd2hhdGlzMy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVfc2VkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImJhMTU0ZDU3OTY5MjhiODQxYzljNjlmMGFlMzc2NjYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNjZGNiOGMzZjRlMDA4MDkyM2Q3ZTgxOGYwZTRhMjAyZGIyNmM0NjQxNWVhZWYzNjEzODdjMjA5OTViODk1OWYiCisKK0NGTEFHUyArPSAiLURTWVNWIgorCitkb19jb25maWd1cmUgKCkgeworICAgICAgICAke1N9L2NvbmZpZ3VyZSAtZGVmYXVsdCAtY29uZmRpciAvZXRjICtzZ2lkICtmaHMgK2xhbmcgYWxsCit9CisKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpeworCW1rZGlyIC1wICAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9tYW4vbWFuNQorICAgICAgICBta2RpciAtcCAke0R9JHtkYXRhZGlyfS9tYW4vbWFuNworCWNwICR7V09SS0RJUn0vbWFuLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vbWFuLmNvbmZpZworICAgICAgICBjcCAke1dPUktESVJ9L21hbi4xLmd6ICR7RH0ke2RhdGFkaXJ9L21hbi9tYW4xLworICAgICAgICBjcCAke1dPUktESVJ9L21hbi43Lmd6ICR7RH0ke2RhdGFkaXJ9L21hbi9tYW43LworICAgICAgICBjcCAke1dPUktESVJ9L21hbnBhdGguNS5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuNS8KK30KKworCitSREVQRU5EU18ke1BOfSA9ICJsZXNzIGdyb2ZmIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbG9jYWxlICR7c3lzY29uZmRpcn0vbWFuLmNvbmZpZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tYy9tYy1DVFJMLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jL21jLUNUUkwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0YmE5ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tYy9tYy1DVFJMLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0ZpeCBidWlsZCB3aXRoIG11c2wgYnkgZW5zdXJpbmcgQ1RSTCBpcyBkZWZpbmVkLgorCittdXNsIGRvZXMgbm90IGRlZmluZSBDVFJMIGluIDx0ZXJtaW9zLmg+LCB3ZSBjb3VsZCBpbmNsdWRlIDxzeXMvdHR5ZGVmYXVsdHMuaD4KK2V4cGxpY2l0bHkgYnV0IGl0J3MgZWFzaWVyIGp1c3QgdG8gZW5zdXJlIENUUkwgaXMgZGVmaW5lZC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tIFNhYm90YWdlIExpbnV4LCB0aGUgbGljZW5zZSBzdGF0ZW1lbnQgZm9yIHBhdGNoZXMgYW5kCitidWlsZCBzY3JpcHRzIGluIFNhYm90YWdlIExpbnV4IHNheXM6CisKKyAgICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgQ2hyaXN0aWFuIE5ldWtpcmNoZW4gaGFzIHdhaXZlZAorICAgIGFsbCBjb3B5cmlnaHQgYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoaXMgd29yay4KKworICAgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKworVGhlcmVmb3JlIHRoaXMgc2hvdWxkIGJlIGdvb2QgdG8gaW5jbHVkZSBpbiBPcGVuRW1iZWRkZWQuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgKHNob3VsZCBiZSBpbmNsdWRlZCBpbiB2NC44LjE0KQorCitkaWZmIC11IG1jLTQuOC4xLjcub3JnL2xpYi90dHkvdHR5LW5jdXJzZXMuYyBtYy00LjguMS43L2xpYi90dHkvdHR5LW5jdXJzZXMuYworLS0tIG1jLTQuOC4xLjcub3JnL2xpYi90dHkvdHR5LW5jdXJzZXMuYworKysrIG1jLTQuOC4xLjcvbGliL3R0eS90dHktbmN1cnNlcy5jCitAQCAtNjUsNyArNjUsNyBAQAorIAorIC8qKiogZmlsZSBzY29wZSBtYWNybyBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLSNpZiBkZWZpbmVkKF9BSVgpICYmICFkZWZpbmVkKENUUkwpCisrI2lmICFkZWZpbmVkKENUUkwpCisgI2RlZmluZSBDVFJMKHgpICgoeCkgJiAweDFmKQorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuNy41LjIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC43LjUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdlYjAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuNy41LjIuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIgorUkRFUEVORFNfJHtQTn0gPSAibmN1cnNlcy10ZXJtaW5mbyIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnL2Rvd25sb2Fkcy8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9tYy1DVFJMLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmRhZTk2NjI0NDQ5NmNkNGY2ZDI4MmQ4MGM5Y2YzYzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTY4MzM4ODYyYmIzMDAxN2ViNjVlZDU2OWE1OGU4MGFiNjZhZThjZWYxMWM4ODY0NDBjOWU5ZjRkMWVmYzZhYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zY3JlZW49bmN1cnNlcyAtLXdpdGhvdXQtZ3BtLW1vdXNlIC0td2l0aG91dC14IC0td2l0aG91dC1zYW1iYSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L21jLy5kZWJ1Zy8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKK30KKworUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKKworU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgorRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWNfNC44LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZjMmZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIk1pZG5pZ2h0IENvbW1hbmRlciBpcyBhbiBuY3Vyc2VzIGJhc2VkIGZpbGUgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcwYmJhZmUzNjBlNzNmOTg0MGJkNzk4MTYyMWY5YzIiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitERVBFTkRTID0gIm5jdXJzZXMgZ2xpYi0yLjAgdXRpbC1saW51eCIKK1JERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnL2Rvd25sb2Fkcy8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZlMWNiNzU2NDNjMmJkNGRmNjRiYmNmMmRhYjc2OTA1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxZmQwZmQyMjgwYzNkMDlkN2UwYWVjOGFiMDAxZmM4OWRhZDhlNGZkOTk0MWYzODY0MTQ2NjdiNTUxNTJlYzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMKKyMgQm90aCBTYW1iYSAoc21iKSBhbmQgc2Z0cCByZXF1aXJlIHBhY2thZ2UgZGVsaXZlcmVkIGZyb20gbWV0YS1vcGVuZW1iZWRkZWQKKyMKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3NtYl0gPSAiLS1lbmFibGUtdmZzLXNtYiwtLWRpc2FibGUtdmZzLXNtYixzYW1iYSwiCitQQUNLQUdFQ09ORklHW3NmdHBdID0gIi0tZW5hYmxlLXZmcy1zZnRwLC0tZGlzYWJsZS12ZnMtc2Z0cCxsaWJzc2gyLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1zY3JlZW49bmN1cnNlcyAtLXdpdGhvdXQtZ3BtLW1vdXNlIC0td2l0aG91dC14IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vbWMvLmRlYnVnLyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEke2JpbmRpcn0vZW52IHBlcmwsJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKKwlzZWQgLWkgLWUgJzFzLCMhLipweXRob24sIyEke2JpbmRpcn0vZW52IHB5dGhvbiwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorfQorCitQQUNLQUdFUyA9KyAiJHtCUE59LWhlbHBlcnMtcGVybCAke0JQTn0taGVscGVycy1weXRob24gJHtCUE59LWhlbHBlcnMgJHtCUE59LWZpc2giCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJNaWRuaWdodCBDb21tYW5kZXIgUGVybC1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2ErICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hcHQrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYiAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViYSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJkICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kcGtnKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9tYWlsZnMgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3BhdGNoZnMgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3JwbXMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91bGliIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91emlwIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICJwZXJsIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJNaWRuaWdodCBDb21tYW5kZXIgUHl0aG9uLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9zMysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VjMTU0MSIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICJweXRob24iCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIHNoZWxsIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMgPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyogJHtsaWJleGVjZGlyfS9tYy9leHQuZC8qIgorCitTVU1NQVJZXyR7QlBOfS1maXNoID0gIk1pZG5pZ2h0IENvbW1hbmRlciBGaXNoIHNjcmlwdHMiCitGSUxFU18ke0JQTn0tZmlzaCA9ICIke2xpYmV4ZWNkaXJ9L21jL2Zpc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtdHlwby1pbi1jb21wYXJpc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy8wMDAxLUZpeC10eXBvLWluLWNvbXBhcmlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzBiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtdHlwby1pbi1jb21wYXJpc2lvbi5wYXRjaApAQCAtMCwwICsxLDg2IEBACitGcm9tIDE4ZDM2MGQ3NDI3MWEwNjZhODQ5YmMxZmJhNGYxMGRiYjIzZWQyNTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCA4IFNlcCAyMDE1IDA4OjE3OjQyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB0eXBvIGluIGNvbXBhcmlzaW9uCisKK2Vycm9yOiBjb21wYXJpc29uIG9mIGFycmF5ICdkZXZubScgZXF1YWwgdG8gYSBudWxsIHBvaW50ZXIgaXMgYWx3YXlzIGZhbHNlCisKK1VzZXIgYml0d2lzZSAnJicgb3BlcmF0b3IgYXMgaXQgaXMgYSBtYXNrCisKK0ZpeGVzCitlcnJvcjogdXNlIG9mIGxvZ2ljYWwgJyYmJyB3aXRoIGNvbnN0YW50IG9wZXJhbmQKKworUmVtb3ZlIGV4dHJhbmVvdXMgcGFyZW5zCisKK2Vycm9yOiBlcXVhbGl0eSBjb21wYXJpc29uIHdpdGggZXh0cmFuZW91cyBwYXJlbnRoZXNlcworCitSZW1vdmUgZGVhZCBjb2RlCisKK3Jlc3RyaXBlLmM6NDY1OjIxOiBlcnJvcjogZXhwbGljaXRseSBhc3NpZ25pbmcgdmFsdWUgb2YgdmFyaWFibGUgb2YgdHlwZSAnaW50JyB0byBpdHNlbGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBtZG1vbi5oICAgICAgIHwgMiArLQorIG1kb3Blbi5jICAgICAgfCAyICstCisgcmVzdHJpcGUuYyAgICB8IDMgLS0tCisgc3VwZXItaW50ZWwuYyB8IDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21kbW9uLmggYi9tZG1vbi5oCitpbmRleCBhYTc1MGM2Li4wYjA4YzNkIDEwMDY0NAorLS0tIGEvbWRtb24uaAorKysrIGIvbWRtb24uaAorQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBpc19yZXN5bmNfY29tcGxldGUoc3RydWN0IG1kaW5mbyAqYXJyYXkpCisgCQlicmVhazsKKyAJY2FzZSAxMDoKKyAJCWwgPSBhcnJheS0+YXJyYXkubGF5b3V0OworLQkJbmNvcGllcyA9IChsICYgMHhmZikgKiAoKGwgPj4gOCkgJiYgMHhmZik7CisrCQluY29waWVzID0gKGwgJiAweGZmKSAqICgobCA+PiA4KSAmIDB4ZmYpOworIAkJc3luY19zaXplID0gYXJyYXktPmNvbXBvbmVudF9zaXplICogYXJyYXktPmFycmF5LnJhaWRfZGlza3M7CisgCQlzeW5jX3NpemUgLz0gbmNvcGllczsKKyAJCWJyZWFrOworZGlmZiAtLWdpdCBhL21kb3Blbi5jIGIvbWRvcGVuLmMKK2luZGV4IDI4NDEwZjQuLmM1ZWUyYTYgMTAwNjQ0CistLS0gYS9tZG9wZW4uYworKysrIGIvbWRvcGVuLmMKK0BAIC0zMTgsNyArMzE4LDcgQEAgaW50IGNyZWF0ZV9tZGRldihjaGFyICpkZXYsIGNoYXIgKm5hbWUsIGludCBhdXRvZiwgaW50IHRydXN0d29ydGh5LAorIAllbHNlIGlmIChudW0gPCAwKSB7CisgCQkvKiBuZWVkIHRvIGNob29zZSBhIGZyZWUgbnVtYmVyLiAqLworIAkJY2hhciAqX2Rldm5tID0gZmluZF9mcmVlX2Rldm5tKHVzZV9tZHApOworLQkJaWYgKGRldm5tID09IE5VTEwpIHsKKysJCWlmIChfZGV2bm0gPT0gTlVMTCkgeworIAkJCXByX2VycigiTm8gYXZhaWwgbWQgZGV2aWNlcyAtIGFib3J0aW5nXG4iKTsKKyAJCQlyZXR1cm4gLTE7CisgCQl9CitkaWZmIC0tZ2l0IGEvcmVzdHJpcGUuYyBiL3Jlc3RyaXBlLmMKK2luZGV4IDRkOTIxOTAuLmNmZTk2NjYgMTAwNjQ0CistLS0gYS9yZXN0cmlwZS5jCisrKysgYi9yZXN0cmlwZS5jCitAQCAtNDYxLDkgKzQ2MSw2IEBAIGludCByYWlkNl9jaGVja19kaXNrcyhpbnQgZGF0YV9kaXNrcywgaW50IHN0YXJ0LCBpbnQgY2h1bmtfc2l6ZSwKKyAJCQljdXJyX2Jyb2tlbl9kaXNrID0gZGlza0Q7CisgCQl9CisgCistCQlpZigoUHggPT0gMCkgJiYgKFF4ID09IDApKQorLQkJCWN1cnJfYnJva2VuX2Rpc2sgPSBjdXJyX2Jyb2tlbl9kaXNrOworLQorIAkJaWYoY3Vycl9icm9rZW5fZGlzayA+PSBkYXRhX2Rpc2tzICsgMikKKyAJCQlicm9rZW5fc3RhdHVzID0gMjsKKyAKK2RpZmYgLS1naXQgYS9zdXBlci1pbnRlbC5jIGIvc3VwZXItaW50ZWwuYworaW5kZXggM2Y4MTJkNi4uMTgzODAxMiAxMDA2NDQKKy0tLSBhL3N1cGVyLWludGVsLmMKKysrKyBiL3N1cGVyLWludGVsLmMKK0BAIC0xMDAyNyw3ICsxMDAyNyw3IEBAIGVudW0gaW1zbV9yZXNoYXBlX3R5cGUgaW1zbV9hbmFseXplX2NoYW5nZShzdHJ1Y3Qgc3VwZXJ0eXBlICpzdCwKKyAJCQkJZ2VvLT5zaXplID0gbWF4X3NpemU7CisgCQl9CisgCistCQlpZiAoKGRpcmVjdGlvbiA9PSBST0xMQkFDS19NRVRBREFUQV9DSEFOR0VTKSkgeworKwkJaWYgKGRpcmVjdGlvbiA9PSBST0xMQkFDS19NRVRBREFUQV9DSEFOR0VTKSB7CisgCQkJLyogYWNjZXB0IHNpemUgZm9yIHJvbGxiYWNrIG9ubHkKKyAJCQkqLworIAkJfSBlbHNlIHsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL2djYy00LjkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvZ2NjLTQuOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGJmMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL2djYy00LjkucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorc3VwZXItaW50ZWwuYzo1MDYzOjI6IGVycm9yOiByaWdodC1oYW5kIG9wZXJhbmQgb2YgY29tbWEgZXhwcmVzc2lvbiBoYXMgbm8gZWZmZWN0IFstV2Vycm9yPXVudXNlZC12YWx1ZV0KKyAgc25wcmludGYoKGNoYXIgKikgc3BhcmUtPnNpZywgTUFYX1NJR05BVFVSRV9MRU5HVEgsCisgIF4KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCittYWtlOiAqKiogW3N1cGVyLWludGVsLm9dIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbWRhZG0tMy4zL3N1cGVyLWludGVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtZGFkbS0zLjMub3JpZy9zdXBlci1pbnRlbC5jCTIwMTQtMDUtMDIgMTU6MDg6MjEuMTU0MzE5NjUxIC0wNzAwCisrKysgbWRhZG0tMy4zL3N1cGVyLWludGVsLmMJMjAxNC0wNS0wMiAxNTowOTozMS40NzA5ODU3OTQgLTA3MDAKK0BAIC01MDYwLDcgKzUwNjAsNyBAQAorIAlzcGFyZS0+Y2FjaGVfc2l6ZSA9IG1wYi0+Y2FjaGVfc2l6ZSwKKyAJc3BhcmUtPnB3cl9jeWNsZV9jb3VudCA9IF9fY3B1X3RvX2xlMzIoMSksCisgCistCXNucHJpbnRmKChjaGFyICopIHNwYXJlLT5zaWcsIE1BWF9TSUdOQVRVUkVfTEVOR1RILAorKwkodm9pZClzbnByaW50ZigoY2hhciAqKSBzcGFyZS0+c2lnLCBNQVhfU0lHTkFUVVJFX0xFTkdUSCwKKyAJCSBNUEJfU0lHTkFUVVJFIE1QQl9WRVJTSU9OX1JBSUQwKTsKKyAKKyAJZm9yIChkID0gc3VwZXItPmRpc2tzOyBkOyBkID0gZC0+bmV4dCkgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2RiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4yLjJfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKK0J5IGhhcmRjb2RpbmcgQ0MncyBkZWZpbml0aW9uIGluIHRoZSBNYWtlZmlsZSwgYWxsIHRoZSBnY2MgcGFyYW1ldGVycyAKK3NldCBieSB0dW5lIHNldHRpbmdzIGFyZSBsb3N0LiBDYXVzaW5nIGNvbXBpbGUgZmFpbHVyZSB3aXRoIHgzMiB0b29sY2hhaW4KKworQXMgdGhlIGJpdGJha2UgZGVmaW5lZCBDQyBpcyBnb29kLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlZGZpbmUgQ0MgaW4gdGhlIAorbWFrZSBmaWxlLCBoZW5jZSBtYWtpbmcgdGhlIENDIGRlZmluaXRpb24gaW4gdGhlIE1ha2VmaWxlIGNvbmRpdGlvbmFsLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA3CisKK0luZGV4OiBtZGFkbS0zLjMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtZGFkbS0zLjMub3JpZy9NYWtlZmlsZQkyMDEzLTA5LTAzIDA3OjQ3OjQ3LjAwMDAwMDAwMCArMDMwMAorKysrIG1kYWRtLTMuMy9NYWtlZmlsZQkyMDEzLTEwLTE2IDE2OjQ0OjIzLjU0MjI5NTQ4NyArMDMwMAorQEAgLTQxLDcgKzQxLDcgQEAKKyAKKyBLTElCQ19HQ0MgPSBnY2MgLW5vc3RkaW5jIC1pd2l0aHByZWZpeCBpbmNsdWRlIC1JJChLTElCQykva2xpYmMvaW5jbHVkZSAtSSQoS0xJQkMpL2xpbnV4L2luY2x1ZGUgLUkkKEtMSUJDKS9rbGliYy9hcmNoL2kzODYvaW5jbHVkZSAtSSQoS0xJQkMpL2tsaWJjL2luY2x1ZGUvYml0czMyCisgCistQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjCisrQ0MgPz0gJChDUk9TU19DT01QSUxFKWdjYworIENYRkxBR1MgPz0gLWdnZGIKKyBDV0ZMQUdTID0gLVdhbGwgLVdlcnJvciAtV3N0cmljdC1wcm90b3R5cGVzIC1XZXh0cmEgLVduby11bnVzZWQtcGFyYW1ldGVyCisgaWZkZWYgV0FSTl9VTlVTRUQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU2ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMy4yX3gzMl9hYmlfdGltZV90LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1doZW4gdHJ5IHRvIHByaW50IHRpbWVfdCB2YWx1ZXMgYXMgYSBsb25nIGludCBpdCBjYXVzZXMgYW4gZXJyb3IgYmVjYXVzZSB0aW1lX3QKK2RhdGEgdHlwZSBpbiB4MzIgQUJJIGlzIGxvbmcgbG9uZyBpbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG1kYWRtLTMuMy40L21vbml0b3IuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1kYWRtLTMuMy40Lm9yaWcvbW9uaXRvci5jCisrKysgbWRhZG0tMy4zLjQvbW9uaXRvci5jCitAQCAtMjU3LDkgKzI1NywxMiBAQCBzdGF0aWMgaW50IHJlYWRfYW5kX2FjdChzdHJ1Y3QgYWN0aXZlX2FyCisgCQkJbWRpLT5jdXJyX3N0YXRlID0gcmVhZF9kZXZfc3RhdGUobWRpLT5zdGF0ZV9mZCk7CisgCQl9CisgCX0KKy0KKyAJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisrI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX0lMUDMyX18pCisrCWRwcmludGYoIiglZCk6ICVsbGQuJTA2bGxkIHN0YXRlOiVzIHByZXY6JXMgYWN0aW9uOiVzIHByZXY6ICVzIHN0YXJ0OiVsbHVcbiIsCisrI2Vsc2UKKyAJZHByaW50ZigiKCVkKTogJWxkLiUwNmxkIHN0YXRlOiVzIHByZXY6JXMgYWN0aW9uOiVzIHByZXY6ICVzIHN0YXJ0OiVsbHVcbiIsCisrI2VuZGlmCisgCQlhLT5pbmZvLmNvbnRhaW5lcl9tZW1iZXIsCisgCQl0di50dl9zZWMsIHR2LnR2X3VzZWMsCisgCQlhcnJheV9zdGF0ZXNbYS0+Y3Vycl9zdGF0ZV0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjI3NjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworLi90ZXN0ICY+Li90ZXN0LmxvZworaWYgWyAkPyAtZXEgMCBdCit0aGVuCisJZWNobyAiUEFTUzogbWRhZG0iCisJcm0gdGVzdC5sb2cKK2Vsc2UKKwllY2hvICJGQUlMOiBtZGFkbSIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5ODE2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9tZGFkbV8zLjMuNC5iYgpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIlRvb2wgZm9yIG1hbmFnaW5nIHNvZnR3YXJlIFJBSUQgdW5kZXIgTGludXgiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL3JhaWQvbWRhZG0vIgorCisjIFNvbWUgZmlsZXMgYXJlIEdQTHYyKyB3aGlsZSBvdGhlcnMgYXJlIEdQTHYyLgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21kbW9uLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xODttZDU9YWY3ZDg0NDRkOWM0ZDNlNWM3Y2FhYzBkOWQzNDAzOWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWRhZG0uaDtiZWdsaW5sbmU9NDtlbmRsaW5lPTIyO21kNT00NjJiYzk5MzZhYzBkM2RhMTEwMTkxYTNmOTk5NDE2MSIKKworCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvcmFpZC9tZGFkbS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2djYy00LjkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtdHlwby1pbi1jb21wYXJpc2lvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorCSAgIgorU1JDX1VSSVttZDVzdW1dID0gIjdjYThiMTE0NzEwZjk4ZjUzZjIwYzU3ODdiNjc0YTA5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhZTVmNDUzMDZiODczMTkwZTkxZjQxMDcwOWIwMGU1MTk5N2I2MzNjMDcyYjMzZjhlZmQ5ZjdkZjAyMmNhNjgiCisKK0NGTEFHUyArPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitFWFRSQV9PRU1BS0UgPSAiQ0hFQ0tfUlVOX0RJUj0wIgorIyBQUEM2NCBhbmQgTUlQUzY0IHVzZXMgbG9uZyBsb25nIGZvciB1NjQgaW4gdGhlIGtlcm5lbCwgYnV0IHBvd2VycGMncyBhc20vdHlwZXMuaAorIyBwcmV2ZW50cyA2NC1iaXQgdXNlcmxhbmQgZnJvbSBzZWVpbmcgdGhpcyBkZWZpbml0aW9uLCBpbnN0ZWFkIGRlZmF1bHRpbmcKKyMgdG8gdTY0ID09IGxvbmcgaW4gdXNlcnNwYWNlLiBEZWZpbmUgX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIHRvIGdldAorIyBpbnQtbGw2NC5oIGluY2x1ZGVkCitFWFRSQV9PRU1BS0VfYXBwZW5kX3Bvd2VycGM2NCA9ICcgQ0ZMQUdTPS1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fJworRVhUUkFfT0VNQUtFX2FwcGVuZF9taXBzNjQgPSAnIENGTEFHUz0tRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXycKK0VYVFJBX09FTUFLRV9hcHBlbmRfbWlwczY0bjMyID0gJyBDRkxBR1M9LURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18nCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsKCkgeworCWV4cG9ydCBTVFJJUD0iIgorCWF1dG90b29sc19kb19pbnN0YWxsCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvKi5ydWxlcyIKKworaW5oZXJpdCBwdGVzdAorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgdGVzdAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1hICR7U30vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKKwljcCAke1N9L3Rlc3QgJHtEfSR7UFRFU1RfUEFUSH0KKwlzZWQgLWUgJ3Mhc2xlZXAgMC4qIXNsZWVwIDEhZzsgcyEvdmFyL3RtcCEvIWcnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlsbiAtcyAvc2Jpbi9tZGFkbSAke0R9JHtQVEVTVF9QQVRIfS9tZGFkbQorCWZvciBwcmcgaW4gdGVzdF9zdHJpcGUgc3dhcF9zdXBlciByYWlkNmNoZWNrCisJZG8KKwkJaW5zdGFsbCAtRCAtbSA3NTUgJHByZyAke0R9JHtQVEVTVF9QQVRIfS8KKwlkb25lCit9CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiYmFzaCIKK1JSRUNPTU1FTkRTXyR7UE59LXB0ZXN0ICs9ICIgXAorICAgIGNvcmV1dGlscyBcCisgICAgdXRpbC1saW51eCBcCisgICAga2VybmVsLW1vZHVsZS1sb29wIFwKKyAgICBrZXJuZWwtbW9kdWxlLWxpbmVhciBcCisgICAga2VybmVsLW1vZHVsZS1yYWlkMCBcCisgICAga2VybmVsLW1vZHVsZS1yYWlkMSBcCisgICAga2VybmVsLW1vZHVsZS1yYWlkMTAgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDQ1NiBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluZ2V0dHkvbWluZ2V0dHlfMS4wOC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5nZXR0eS9taW5nZXR0eV8xLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMTYyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluZ2V0dHkvbWluZ2V0dHlfMS4wOC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkNvbXBhY3QgZ2V0dHkgdGVybWluYWwgaGFuZGxlciBmb3IgdmlydHVhbCBjb25zb2xlcyBvbmx5IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9taW5nZXR0eS8iCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBjNTZkYjAxNDNmNGY4MGMzNjllZTNhZjc0MjVhZjZlIgorU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJhNzVhZDY0ODdmZjI3MTQyNGZmYzAwYTY0NDIwOTkwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBmNTVjOTBiYTRmYWE5MTNkOTFlZjk5Y2JmNWNiMmViNGRiZTI3ODAzMTRjM2JiMTc5NTNmODQ5YzhjZGRkMTciCisKKyMgc3Vic3RpdHV0ZSBvdXIgQ0ZMQUdTIGZvciAiLU8yIC1XYWxsIC1XIC1waXBlIgorIworRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgXAorICAgICAgICAgICAgICAgIENGTEFHUz0nJHtDRkxBR1N9IC1EX0dOVV9TT1VSQ0UnIgorCitkb19pbnN0YWxsKCl7CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJnZXR0eSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2dldHR5IgorQUxURVJOQVRJVkVfVEFSR0VUW2dldHR5XSA9ICIke2Jhc2Vfc2JpbmRpcn0vbWluZ2V0dHkiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYzY3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gZDYyYTU4NjJlMjZlZDNmYzU4ZDc4OWVmZTljNDBjYTZjOTExZDM2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDIyOjM1OjMxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCBpc3N1cyBzdXJmYWNlZCBkdWUgdG8gbXVzbAorCitzcmMvZ2V0c2Rpci5oOjI4OjE0OiBlcnJvcjogJ01BWE5BTUxFTicgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKyAgIGNoYXIgZm5hbWVbTUFYTkFNTEVOICsgMV07ICAvKiBmaWxlbmFtZSArIHRlcm1pbmF0aW5nIG51bGwgKi8KKworc3JjL2RpYWwuYzozNTI6MjI6IGVycm9yOiAnS0lPQ1NPVU5EJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKK3wgICAgICBpb2N0bChjb25zb2xlZmQsIEtJT0NTT1VORCwgayk7CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL2RpYWwuYyAgICB8IDIgKy0KKyBzcmMvZ2V0c2Rpci5jIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kaWFsLmMgYi9zcmMvZGlhbC5jCitpbmRleCBhOTBjMWQyLi5iZjAyNTc0IDEwMDY0NAorLS0tIGEvc3JjL2RpYWwuYworKysrIGIvc3JjL2RpYWwuYworQEAgLTM5LDcgKzM5LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorIAorICNpZmRlZiBWQ19NVVNJQworLSMgIGlmIGRlZmluZWQoX19HTElCQ19fKQorKyMgIGlmIGRlZmluZWQoX19HTElCQ19fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKKyAjICAgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgorICMgICAgaW5jbHVkZSA8c3lzL2tkLmg+CisgIyAgICBpbmNsdWRlIDxzeXMvdGltZS5oPgorZGlmZiAtLWdpdCBhL3NyYy9nZXRzZGlyLmMgYi9zcmMvZ2V0c2Rpci5jCitpbmRleCAyMTk1YjI3Li5iNjFhMzYxIDEwMDY0NAorLS0tIGEvc3JjL2dldHNkaXIuYworKysrIGIvc3JjL2dldHNkaXIuYworQEAgLTMwLDYgKzMwLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAKKyAjaW5jbHVkZSAiZ2V0c2Rpci5oIgorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODI2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBtaW5pY29tIC1oLy12IHJldHVybiB2YWx1ZSBpcyBub3QgMAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CisKKy0tLQorIHNyYy9taW5pY29tLmMgfCAgICA2ICsrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWluaWNvbS5jIGIvc3JjL21pbmljb20uYworaW5kZXggZTFhNTU3Yi4uNzMwZGE3YyAxMDA2NDQKKy0tLSBhL3NyYy9taW5pY29tLmMKKysrKyBiL3NyYy9taW5pY29tLmMKK0BAIC0xMTY2LDE1ICsxMTY2LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgICAgICAgIm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4iCisgICAgICAgICAgICAgICAgICAiYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uXG4iCisgICAgICAgICAgICAgICAgICAiMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuIik7CistICAgICAgICAgIGV4aXQoMSk7CistICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICBleGl0KDApOworICAgICAgICAgY2FzZSAncyc6IC8qIHNldHVwIG1vZGUgKi8KKyAgICAgICAgICAgZG9zZXR1cCA9IDE7CisgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgIGhlbHB0aGVtKCk7CistICAgICAgICAgIGV4aXQoMSk7CistICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICBleGl0KDApOworICAgICAgICAgY2FzZSAncCc6IC8qIFBzZXVkbyB0ZXJtaW5hbCB0byB1c2UuICovCisgICAgICAgICAgIGlmIChzdHJuY21wKG9wdGFyZywgIi9kZXYvIiwgNSkgPT0gMCkKKyAgICAgICAgICAgICBvcHRhcmcgKz0gNTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb20vYWxsb3cudG8uZGlzYWJsZS5sb2NrZGV2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzA4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gYS9jb25maWd1cmUuaW4JMjAxMy0wMi0wNiAxODoxODoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL2NvbmZpZ3VyZS5pbgkyMDEzLTA3LTIxIDE1OjMxOjI3LjYxNDgyODg5NCArMDIwMAorQEAgLTQwLDcgKzQwLDEzIEBACisgZmkKKyAKKyBQS0dfUFJPR19QS0dfQ09ORklHCistaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisrCisrQUNfQVJHX0VOQUJMRShbbG9ja2Rldl0sCisrICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbG9ja2Rldl0sCisrICAgICAgICAgICAgICAgICAgICAgICBbRW5hYmxlIGxvY2tkZXYgc3VwcG9ydCAoZGVmOiBlbmFibGVkKV0pLAorKyAgICAgICAgW10sIFtlbmFibGVfbG9ja2Rldj0ieWVzIl0pCisrCisraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIHRlc3QgIngkZW5hYmxlX2xvY2tkZXYiID0geHllczsgdGhlbgorIAlQS0dfQ0hFQ0tfTU9EVUxFUyhbTE9DS0RFVl0sIFtsb2NrZGV2XSwgQUNfREVGSU5FKFtIQVZFX0xPQ0tERVZdLFsxXSxbRGVmaW5lIGlmIHlvdSBoYXZlIGxvY2tkZXZdKSxbOl0pCisgZmkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbV8yLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiVGV4dC1iYXNlZCBtb2RlbSBjb250cm9sIGFuZCB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSIKK0RFU0NSSVBUSU9OID0gIk1pbmljb20gaXMgYSB0ZXh0LWJhc2VkIG1vZGVtIGNvbnRyb2wgYW5kIHRlcm1pbmFsIGVtdWxhdGlvbiBwcm9ncmFtIGZvciBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAibmN1cnNlcyB2aXJ0dWFsL2xpYmljb252IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjA0NzdhYmM1Njc0MDRkZWJjYTBhMmExY2I2YjY0NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWluaWNvbS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PWE1ODgzOGNiNzA5ZjBkYjUxN2Y0ZTQyNzMwYzQ5ZTgxIgorCitTUkNfVVJJID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvZnJzL2Rvd25sb2FkLnBocC9sYXRlc3RmaWxlLzMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtYnVpbGQtaXNzdXMtc3VyZmFjZWQtZHVlLXRvLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwNDRjYTNlMjkxMjY4YzMzMjk0ZjE3MWQ0MjZkYzJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhYzNhNjYzYjgyZjRmNWRmNjQxMTRiNDc5MmI5OTI2YjUzNmM4NWY1OWRlMGYyZDJiMzIxYzc2MjZhOTA0ZjQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xvY2tkZXZdID0gIi0tZW5hYmxlLWxvY2tkZXYsLS1kaXNhYmxlLWxvY2tkZXYsbG9ja2RldiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworZG9faW5zdGFsbCgpIHsKKwlmb3IgZCBpbiBkb2MgZXh0cmFzIG1hbiBsaWIgc3JjOyBkbyBtYWtlIC1DICRkIERFU1RESVI9JHtEfSBpbnN0YWxsOyBkb25lCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY4NjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9kaXNhYmxlLXN0cmlwLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDM3YjNjYzkuLmYxMDI2ZjMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC05NSw3ICs5NSw3IEBAIGluc3RhbGwtZGlyczoKKyAJICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorIAorIGluc3RhbGwtYmluYXJpZXM6ICQoUFJPRykKKy0JJChJTlNUQUxMKSAtbSAwNTU1IC1zICQoUFJPRykgJChERVNURElSKSQoYmluZGlyKS8kKFBST0cpCisrCSQoSU5TVEFMTCkgLW0gMDU1NSAkKFBST0cpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9HKQorIAorIGluc3RhbGwtbWFuOgorIAkkKElOU1RBTEwpIC1tIDA0NDQgJChzcmNkaXIpL21rdGVtcC4kKG1hbnR5cGUpIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgZml4ZXMgdGhlIHBhcmFsbGVsIG1ha2UgaW5zdGFsbCBmYWlsdXJlCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKK2h0dHA6Ly93d3cuZ3JhdGlzb2Z0LnVzL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01MjgKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbWt0ZW1wLTEuNy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rdGVtcC0xLjcub3JpZy9NYWtlZmlsZS5pbgorKysrIG1rdGVtcC0xLjcvTWFrZWZpbGUuaW4KK0BAIC05NCwxMCArOTQsMTAgQEAgaW5zdGFsbC1kaXJzOgorIAkkKFNIRUxMKSAkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpIFwKKyAJICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorIAorLWluc3RhbGwtYmluYXJpZXM6ICQoUFJPRykKKytpbnN0YWxsLWJpbmFyaWVzOiBpbnN0YWxsLWRpcnMgJChQUk9HKQorIAkkKElOU1RBTEwpIC1tIDA1NTUgJChQUk9HKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPRykKKyAKKy1pbnN0YWxsLW1hbjoKKytpbnN0YWxsLW1hbjogaW5zdGFsbC1kaXJzCisgCSQoSU5TVEFMTCkgLW0gMDQ0NCAkKHNyY2RpcikvbWt0ZW1wLiQobWFudHlwZSkgXAorIAkgICAgJChERVNURElSKSQobWFuZGlyKS9tYW4xL21rdGVtcC4xCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyMzhlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvbWt0ZW1wXzEuNy5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkVuYWJsZXMgc2FmZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGlvbiBmcm9tIHNoZWxsIHNjcmlwdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1rdGVtcC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm1rdGVtcC5vcmcvYnVncyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiSVNDIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NDMwNjgwZjYzMjJhMWViODcxOTliNWUwMWE4MmMwZDQiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5ta3RlbXAub3JnL3B1Yi9ta3RlbXAvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXN0cmlwLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzg3YmJlZDlmYTJlZThlNzY0NTczM2MwZThlNjUxNzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGU5NGI5ZTFlZGY4NjZiMjYwOTU0NWRhNjViNjI3OTk2YWM1ZDE1OGZkYTA3MWU0OTJiZGRiMmY0YTQ4MjY3NSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWxpYmMiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vbWt0ZW1wICR7RH0ke2Jhc2VfYmluZGlyfS9ta3RlbXAKKwlybWRpciAke0R9JHtiaW5kaXJ9Cit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIm1rdGVtcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta3RlbXBdID0gIiR7YmFzZV9iaW5kaXJ9L21rdGVtcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gIm1rdGVtcC4xIgorQUxURVJOQVRJVkVfUFJJT1JJVFlfJHtQTn0tZG9jID0gIjMwMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta3RlbXAuMV0gPSAiJHttYW5kaXJ9L21hbjEvbWt0ZW1wLjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliZjU2MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tc210cC9tc210cF8xLjYuMi5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIm1zbXRwIGlzIGFuIFNNVFAgY2xpZW50IgorREVTQ1JJUFRJT04gPSAiQSBzZW5kbWFpbCByZXBsYWNlbWVudCBmb3IgdXNlIGluIE1UQXMgbGlrZSBtdXR0IgorSE9NRVBBR0UgPSAiaHR0cDovL21zbXRwLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJHUEx2MyIKK0RFUEVORFMgPSAiemxpYiBnbnV0bHMiCisKKyNDT1BZSU5HIG9yIExpY2VuY2UKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbXNtdHAvZmlsZXMvbXNtdHAvJHtQVn0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2JhY2E5M2M3ZTVmMWFhOWQzNmEyZTViMzg3MzlhYjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmY2ZWNkN2NiZmFkZjU0OGZkNTUyMDViZDI0Y2I2M2I4NGJjYmIxMTg1ZWZlZDkxN2RkNzgwMDU5NWE0ODc4OSIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzZWNyZXQgLS13aXRob3V0LWxpYmdzYXNsIC0td2l0aG91dC1saWJpZG4iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlbmRtYWlsIgorQUxURVJOQVRJVkVfVEFSR0VUW3NlbmRtYWlsXSA9ICIke2JpbmRpcn0vbXNtdHAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2VuZG1haWxdID0gIiR7c2JpbmRpcn0vc2VuZG1haWwiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK3BrZ19wb3N0aW5zdF8ke1BOfV9saW51eHN0ZGJhc2UgKCkgeworCSMgL3Vzci9saWIvc2VuZG1pYWwgaXMgcmVxdWlyZWQgYnkgTFNCIGNvcmUgdGVzdAorCVsgISAtTCAkRC91c3IvbGliL3NlbmRtYWlsIF0gJiYgbG4gLXNmICR7c2JpbmRpcn0vc2VuZG1haWwgJEQvdXNyL2xpYi8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL2lmY29uZmlnLWludGVyZmFjZS0wLWRlbC1JUC13aWxsLXJlbW92ZS10aGUtYWxpYXNlZC0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODE4MTRkYzJiMTQ4NDMwMDkxOTNlZmQzMDdkODE0YzI2YmFhNjFmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppcmkgUG9wZWxrYSA8anBvcGVsa2FAcmVkaGF0LmNvbT4KK0RhdGU6IFdlZCwgNyBEZWMgMjAxMSAxOToxNDowOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBpZmNvbmZpZyBpbnRlcmZhY2U6MCBkZWwgPElQPiB3aWxsIHJlbW92ZSB0aGUgYWxpYXNlZCBJUCBvbiBJQTY0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworY29tbWl0IDgxODE0ZGMyYjE0ODQzMDA5MTkzZWZkMzA3ZDgxNGMyNmJhYTYxZjAgZnJvbQorZ2l0Oi8vZ2l0LmNvZGUuc2YubmV0L3AvbmV0LXRvb2xzL2NvZGUKKworLS0tCisgaWZjb25maWcuYyB8ICAgIDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2lmY29uZmlnLmMgYi9pZmNvbmZpZy5jCitpbmRleCBiYzQwNWM2Li5kYWU4OTIyIDEwMDY0NAorLS0tIGEvaWZjb25maWcuYworKysrIGIvaWZjb25maWcuYworQEAgLTg5MCw3ICs4OTAsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgY29udGludWU7CisgCQl9CisgCQkKKy0JCW1lbWNweSgmaXAsICZzaW4uc2luX2FkZHIuc19hZGRyLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworKwkJLyogQ2xlYXIgImlwIiBpbiBjYXNlIHNpemVvZih1bnNpZ25lZCBsb25nKSA+IHNpemVvZihzaW4uc2luX2FkZHIuc19hZGRyKSAqLworKwkJaXAgPSAwOworKwkJbWVtY3B5KCZpcCwgJnNpbi5zaW5fYWRkci5zX2FkZHIsIHNpemVvZihzaW4uc2luX2FkZHIuc19hZGRyKSk7CisgCQkKKyAJCWlmIChnZXRfbm1iY19wYXJlbnQoaWZyLmlmcl9uYW1lLCAmbm0sICZiYykgPCAwKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsIF8oIkludGVyZmFjZSAlcyBub3QgaW5pdGlhbGl6ZWRcbiIpLAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM5YzJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvbmV0LXRvb2xzLWNvbmZpZy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisqIGNvbmZpZy5oCUF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGNvbmZpZ3VyYXRpb24gaW5jbHVkZWZpbGUKKyoKKyogTkVULVRPT0xTCUEgY29sbGVjdGlvbiBvZiBwcm9ncmFtcyB0aGF0IGZvcm0gdGhlIGJhc2Ugc2V0IG9mIHRoZQorKgkJTkVULTMgTmV0d29ya2luZyBEaXN0cmlidXRpb24gZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcKKyoJCXN5c3RlbS4KKyoKKyoJCURPICBOT1QgIEVESVQgIERJUkVDVExZCisqCisqLworCisvKiAKKyAqIAorICogSW50ZXJuYXRpb25hbGl6YXRpb24KKyAqIAorICogVGhlIG5ldC10b29scyBwYWNrYWdlIGhhcyBjdXJyZW50bHkgYmVlbiB0cmFuc2xhdGVkIHRvIEZyZW5jaCwKKyAqIEdlcm1hbiBhbmQgQnJhemlsaWFuIFBvcnR1Z2VzZS4gIE90aGVyIHRyYW5zbGF0aW9ucyBhcmUsIG9mCisgKiBjb3Vyc2UsIHdlbGNvbWUuICBBbnN3ZXIgYG4nIGhlcmUgaWYgeW91IGhhdmUgbm8gc3VwcG9ydCBmb3IKKyAqIGludGVybmF0aW9uYWxpemF0aW9uIG9uIHlvdXIgc3lzdGVtLgorICogCisgKi8KKyNkZWZpbmUgSTE4TiAxCisKKy8qIAorICogCisgKiBQcm90b2NvbCBGYW1pbGllcy4KKyAqIAorICovCisjZGVmaW5lIEhBVkVfQUZVTklYIDEKKyNkZWZpbmUgSEFWRV9BRklORVQgMQorI2RlZmluZSBIQVZFX0FGSU5FVDYgMQorI2RlZmluZSBIQVZFX0FGSVBYIDAKKyNkZWZpbmUgSEFWRV9BRkFUQUxLIDAKKyNkZWZpbmUgSEFWRV9BRkFYMjUgMAorI2RlZmluZSBIQVZFX0FGTkVUUk9NIDEKKyNkZWZpbmUgSEFWRV9BRlJPU0UgMAorI2RlZmluZSBIQVZFX0FGWDI1IDAKKyNkZWZpbmUgSEFWRV9BRkVDT05FVCAwCisjZGVmaW5lIEhBVkVfQUZERUNuZXQgMAorI2RlZmluZSBIQVZFX0FGQVNIIDAKKworLyogCisgKiAKKyAqIERldmljZSBIYXJkd2FyZSB0eXBlcy4KKyAqIAorICovCisjZGVmaW5lIEhBVkVfSFdFVEhFUiAxCisjZGVmaW5lIEhBVkVfSFdBUkMgMQorI2RlZmluZSBIQVZFX0hXU0xJUCAxCisjZGVmaW5lIEhBVkVfSFdQUFAgMQorI2RlZmluZSBIQVZFX0hXVFVOTkVMIDEKKyNkZWZpbmUgSEFWRV9IV1NUUklQIDAKKyNkZWZpbmUgSEFWRV9IV1RSIDAKKyNkZWZpbmUgSEFWRV9IV0FYMjUgMAorI2RlZmluZSBIQVZFX0hXUk9TRSAwCisjZGVmaW5lIEhBVkVfSFdORVRST00gMQorI2RlZmluZSBIQVZFX0hXWDI1IDAKKyNkZWZpbmUgSEFWRV9IV0ZSIDEKKyNkZWZpbmUgSEFWRV9IV1NJVCAwCisjZGVmaW5lIEhBVkVfSFdGRERJIDAKKyNkZWZpbmUgSEFWRV9IV0hJUFBJIDAKKyNkZWZpbmUgSEFWRV9IV0FTSCAwCisjZGVmaW5lIEhBVkVfSFdIRExDTEFQQiAwCisjZGVmaW5lIEhBVkVfSFdJUkRBIDEKKyNkZWZpbmUgSEFWRV9IV0VDIDAKKyNkZWZpbmUgSEFWRV9IV0lCIDAKKworLyogCisgKiAKKyAqIE90aGVyIEZlYXR1cmVzLgorICogCisgKi8KKyNkZWZpbmUgSEFWRV9GV19NQVNRVUVSQURFIDEKKyNkZWZpbmUgSEFWRV9JUF9UT09MUyAxCisjZGVmaW5lIEhBVkVfTUlJIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzUxNmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvbmV0LXRvb2xzLWNvbmZpZy5tYWtlCkBAIC0wLDAgKzEsMzYgQEAKK0kxOE49MQorSEFWRV9BRlVOSVg9MQorSEFWRV9BRklORVQ9MQorSEFWRV9BRklORVQ2PTEKKyMgSEFWRV9BRklQWD0wCisjIEhBVkVfQUZBVEFMSz0wCisjIEhBVkVfQUZBWDI1PTAKK0hBVkVfQUZORVRST009MQorIyBIQVZFX0FGUk9TRT0wCisjIEhBVkVfQUZYMjU9MAorIyBIQVZFX0FGRUNPTkVUPTAKKyMgSEFWRV9BRkRFQ25ldD0wCisjIEhBVkVfQUZBU0g9MAorSEFWRV9IV0VUSEVSPTEKK0hBVkVfSFdBUkM9MQorSEFWRV9IV1NMSVA9MQorSEFWRV9IV1BQUD0xCitIQVZFX0hXVFVOTkVMPTEKK0hBVkVfSFdTVFJJUD0xCitIQVZFX0hXVFI9MQorIyBIQVZFX0hXQVgyNT0wCisjIEhBVkVfSFdST1NFPTAKK0hBVkVfSFdORVRST009MQorIyBIQVZFX0hXWDI1PTAKK0hBVkVfSFdGUj0xCisjIEhBVkVfSFdTSVQ9MAorIyBIQVZFX0hXRkREST0wCisjIEhBVkVfSFdISVBQST0wCisjIEhBVkVfSFdBU0g9MAorIyBIQVZFX0hXSERMQ0xBUEI9MAorSEFWRV9IV0lSREE9MQorIyBIQVZFX0hXRUM9MAorIyBIQVZFX0hXSUI9MAorSEFWRV9GV19NQVNRVUVSQURFPTEKK0hBVkVfSVBfVE9PTFM9MQorSEFWRV9NSUk9MQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHNfMS42MC0yNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYzFlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIKQEAgLTAsMCArMSw4OSBAQAorU1VNTUFSWSA9ICJCYXNpYyBuZXR3b3JraW5nIHRvb2xzIgorREVTQ1JJUFRJT04gPSAiQSBjb2xsZWN0aW9uIG9mIHByb2dyYW1zIHRoYXQgZm9ybSB0aGUgYmFzZSBzZXQgb2YgdGhlIE5FVC0zIG5ldHdvcmtpbmcgZGlzdHJpYnV0aW9uIGZvciB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly9uZXQtdG9vbHMuYmVybGlvcy5kZS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvbmV0LXRvb2xzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pZmNvbmZpZy5jO2JlZ2lubGluZT0xMTtlbmRsaW5lPTE1O21kNT1kMWNhMzcyMDgwYWQ1NDAxZTIzY2EwYWZjMzVjZjliYSIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDA1MDMxMlQwMDAwMDBaL3Bvb2wvbWFpbi9uLyR7QlBOfS8ke0JQTn1fMS42MC5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8vMjAxNTA4MzFUMDkzMzQyWi9wb29sL21haW4vbi8ke0JQTn0vJHtCUE59XyR7UFZ9LmRpZmYuZ3o7YXBwbHk9bm87bmFtZT1wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZXQtdG9vbHMtY29uZmlnLmggXAorICAgICAgICAgICBmaWxlOi8vbmV0LXRvb2xzLWNvbmZpZy5tYWtlIFwKKyAgICAgICAgICAgZmlsZTovL2lmY29uZmlnLWludGVyZmFjZS0wLWRlbC1JUC13aWxsLXJlbW92ZS10aGUtYWxpYXNlZC0ucGF0Y2ggXAorCSAgICIKKworUyA9ICIke1dPUktESVJ9L25ldC10b29scy0xLjYwIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJlY2FmMzdhY2I1YjVkYWZmNGJkZGE3Nzc4NWZkOTE2ZCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gImVjNjc5NjdjZjdiMWEzYTM4MjhhODQ3NjJmYmMwMTNhYzUwZWU1ZGM5YWEzMDk1ZDVjNTkxZjMwMmMyZGUwZjUiCisKK1NSQ19VUklbcGF0Y2gubWQ1c3VtXSA9ICJlYTM1OTJmNDlhYzgzODA5NjJiYzRkOWI2NmM3ZTdlOSIKK1NSQ19VUklbcGF0Y2guc2hhMjU2c3VtXSA9ICJhZWVlYWZhZmY2ODg2NmE0NDZmMDFiYjYzOWQ0ZTAxNDZhNjBhZjM0ZGNkMjBlMzFhM2U0NjU4NTAyMmZjNzZjIgorCitpbmhlcml0IGdldHRleHQKKworIyBUaGUgTWFrZWZpbGUgaXMgbGFtZSwgbm8gcGFyYWxsZWwgYnVpbGQKK1BBUkFMTEVMX01BS0UgPSAiIgorCisjIFVubGlrZSBvdGhlciBEZWJpYW4gcGFja2FnZXMsIG5ldC10b29scyAqLmRpZmYuZ3ogY29udGFpbnMgYW5vdGhlciBzZXJpZXMgb2YKKyMgcGF0Y2hlcyBtYWludGFpbmVkIGJ5IHF1aWx0LiBTbyBtYW51YWxseSBhcHBseSB0aGVtIGJlZm9yZSBhcHBseWluZyBvdGhlciBsb2NhbAorIyBwYXRjaGVzLiBBbHNvIHJlbW92ZSBhbGwgdGVtcCBmaWxlcyBiZWZvcmUgbGVhdmluZywgYmVjYXVzZSBkb19wYXRjaCgpIHdpbGwgcG9wIAorIyB1cCBhbGwgcHJldmlvdXNseSBhcHBsaWVkIHBhdGNoZXMgaW4gdGhlIHN0YXJ0CituZXR0b29sc19kb19wYXRjaCgpIHsKKwljZCAke1N9CisJcXVpbHQgcG9wIC1hIHx8IHRydWUKKwlpZiBbIC1kICR7U30vLnBjLW5ldHRvb2xzIF07IHRoZW4KKwkJcm0gLXJmICR7U30vLnBjCisJCW12ICR7U30vLnBjLW5ldHRvb2xzICR7U30vLnBjCisJCVFVSUxUX1BBVENIRVM9JHtTfS9kZWJpYW4vcGF0Y2hlcyBxdWlsdCBwb3AgLWEKKwkJcm0gLXJmICR7U30vLnBjICR7U30vZGViaWFuCisJZmkKKwlwYXRjaCAtcDEgPCAke1dPUktESVJ9LyR7QlBOfV8ke1BWfS5kaWZmCQorCVFVSUxUX1BBVENIRVM9JHtTfS9kZWJpYW4vcGF0Y2hlcyBxdWlsdCBwdXNoIC1hCisJbXYgJHtTfS8ucGMgJHtTfS8ucGMtbmV0dG9vbHMKK30KKworZG9fdW5wYWNrW2NsZWFuZGlyc10gKz0gIiR7U30iCisKKyMgV2UgaW52b2tlIGJhc2UgZG9fcGF0Y2ggYXQgZW5kLCB0byBpbmNvcnBvcmF0ZSBhbnkgbG9jYWwgcGF0Y2gKK3B5dGhvbiBkb19wYXRjaCgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ25ldHRvb2xzX2RvX3BhdGNoJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ3BhdGNoX2RvX3BhdGNoJywgZCkKK30KKworZG9fY29uZmlndXJlKCkgeworCSMgbmV0LXRvb2xzIGhhcyBpdHMgb3duIGNvbmZpZyBtZWNoYW5pc20gcmVxdWlyaW5nICJtYWtlIGNvbmZpZyIKKwkjIHdlIHByZS1nZW5lcmF0ZSBkZXNpcmVkIG9wdGlvbnMgYW5kIGNvcHkgdG8gc291cmNlIGRpcmVjdG9yeSBpbnN0ZWFkCisJY3AgJHtXT1JLRElSfS9uZXQtdG9vbHMtY29uZmlnLmggICAgJHtTfS9jb25maWcuaAorCWNwICR7V09SS0RJUn0vbmV0LXRvb2xzLWNvbmZpZy5tYWtlICR7U30vY29uZmlnLm1ha2UKK30KKworZG9fY29tcGlsZSgpIHsKKwkjIG5ldC10b29scyB1c2UgQ09QVFMvTE9QVFMgdG8gYWxsb3cgYWRkaW5nIGN1c3RvbSBvcHRpb25zCisJZXhwb3J0IENPUFRTPSIkQ0ZMQUdTIgorCWV4cG9ydCBMT1BUUz0iJExERkxBR1MiCisJdW5zZXQgQ0ZMQUdTCisJdW5zZXQgTERGTEFHUworCisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0JBU0VESVI9JHtEfScgaW5zdGFsbAorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworYmFzZV9zYmluZGlyX3Byb2dzID0gImFycCBpZmNvbmZpZyBpcG1hZGRyIGlwdHVubmVsIG1paS10b29sIG5hbWVpZiBwbGlwY29uZmlnIHJhcnAgcm91dGUgc2xhdHRhY2giCitiYXNlX2JpbmRpcl9wcm9ncyAgPSAiZG5zZG9tYWlubmFtZSBkb21haW5uYW1lIGhvc3RuYW1lIG5ldHN0YXQgbmlzZG9tYWlubmFtZSB5cGRvbWFpbm5hbWUiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIiR7YmFzZV9zYmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSIKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9zYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKwkJZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2VfYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKwkJZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvY3Jvc3NfYXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9jcm9zc19hci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzAwN2FhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvY3Jvc3NfYXIucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRml4IGNyb3NzIGxpbmsgdXNpbmcgYXV0b2NvbmYgZGV0ZWN0ZWQgQVIKKworSWYgYnVpbGRpbmcgb24gMzJiaXQgaG9zdCBhbmQgY3JlYXRpbmcgNjRiaXQgbGlicmFyaWVzLCB0aGUgdGFyZ2V0CitwYWNrYWdlIGJ1aWxkcyBzaG91bGQgbm90IGludm9rZSB0aGUgMzJiaXQgaG9zdHMncyBhci4gIFNwZWNpZmljYWxseQoreW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgbGlrZToKKworeDg2XzY0LWxpbnV4LWdjYyAgICAtbTY0IC0tc3lzcm9vdD0vb3B0L3FlbXV4ODYtNjQvdG1wL3N5c3Jvb3RzL3FlbXV4ODYtNjQgLWcgLW8gdGVzdCB0ZXN0Lm8gbGlibmV3dC5hIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1sc2xhbmcKK2xpYm5ld3QuYTogY291bGQgbm90IHJlYWQgc3ltYm9sczogQXJjaGl2ZSBoYXMgbm8gaW5kZXg7IHJ1biByYW5saWIgdG8gYWRkIG9uZQorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiAgfCAzICsrLQorIGNvbmZpZ3VyZS5hYyB8IDQgKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC03LDYgKzcsNyBAQCBDRkxBR1MgPSBAQ0ZMQUdTQAorIExERkxBR1MgPSBATERGTEFHU0AKKyBDUFBGTEFHUyA9IC1EX0dOVV9TT1VSQ0UgQENQUEZMQUdTQCAKKyBHTlVfTEQgPSBAR05VX0xEQAorK0FSID0gQEFSQAorIAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyBUQUcgPSByJChzdWJzdCAuLC0sJChWRVJTSU9OKSkKK0BAIC0xMDksNyArMTEwLDcgQEAgd2hpcHRjbC4kKFNPRVhUKTogJChXSElQVENMT0JKUykgJChMSUJORVdUU0gpCisgCSQoQ0MpIC1zaGFyZWQgJChTSENGTEFHUykgJChMREZMQUdTKSAtbyB3aGlwdGNsLiQoU09FWFQpICQoV0hJUFRDTE9CSlMpIC1MLiAtbG5ld3QgICQoTElCVENMKSAtbHBvcHQgJChMSUJTKQorIAorICQoTElCTkVXVCk6ICQoTElCT0JKUykKKy0JYXIgcnYgJEAgJF4KKysJJChBUikgcnYgJEAgJF4KKyAKKyBuZXd0Lm8gJChTSEFSRURESVIpL25ld3QubzogbmV3dC5jIE1ha2VmaWxlCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5MmU2ZGE4Li5jZDgzZDU3IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNSw2ICsxNSwxMCBAQCBBQ19QUk9HX0lOU1RBTEwKKyBBQ19QUk9HX0xOX1MKKyBBQ19QUk9HX0dSRVAKKyBBQ19TWVNfTEFSR0VGSUxFCisrQU5fTUFLRVZBUihbQVJdLCBbQUNfUFJPR19BUl0pCisrQU5fUFJPR1JBTShbYXJdLCBbQUNfUFJPR19BUl0pCisrQUNfREVGVU4oW0FDX1BST0dfQVJdLCBbQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIDopXSkKKytBQ19QUk9HX0FSCisgCisgIyBBcmUgd2UgdXNpbmcgR05VIGxkPworIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvZml4X1NIQVJFRERJUi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhMWU4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F1dGhvcjogZGV4dWFuLmN1aUBpbnRlbC5jb20KK0RhdGU6IEZyaSBBcHIgMTUgMTY6MTc6MzkgQ1NUIDIwMTEKKworVGhlIHBhdGNoIGZpeGVzIGEgcGFyYWxsZWwtbWFrZSBpc3N1ZTogd2hlbiBnZW5lcmF0aW5nICQoU0hBUkVERElSKS8lLm8sIHdlIHNob3VsZAorZW5zdXJlIHRoZSBkaXJlY3RvcnkgJHtTSEFSRURESVJ9IGV4aXN0cy4KKworV2UgbmVlZCB0byBwdXNoIHRoZSBwYXRjaCB0byB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0xMjgsMTIgKzEyOCwxMiBAQCAkKFNIQVJFRERJUik6CisgCisgc2hhcmVkbGliOiAkKExJQk5FV1RTSCkKKyAKKy0kKExJQk5FV1RTSCk6ICQoU0hBUkVERElSKSAkKFNIQVJFRE9CSlMpCisrJChMSUJORVdUU0gpOiAkKFNIQVJFRE9CSlMpCisgCSQoQ0MpIC1zaGFyZWQgLW8gJChMSUJORVdUU0gpICQoU0hMSUJGTEFHUykgJChTSEFSRURPQkpTKSAkKExERkxBR1MpICQoTElCUykKKyAJbG4gLWZzICQoTElCTkVXVFNPTkFNRSkgbGlibmV3dC4kKFNPRVhUKQorIAlsbiAtZnMgJChMSUJORVdUU0gpICQoTElCTkVXVFNPTkFNRSkKKyAKKy0kKFNIQVJFRERJUikvJS5vIDogJS5jCisrJChTSEFSRURESVIpLyUubyA6ICUuYyAkKFNIQVJFRERJUikKKyAJJChDQykgJChTSENGTEFHUykgLWMgJChDRkxBR1MpICQoQ1BQRkxBR1MpIC1vICRAICQ8CisgCisgaW5zdGFsbDogJChMSUJORVdUKSBpbnN0YWxsLXNoIHdoaXB0YWlsCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYzNGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmluCisrKysgZ2l0L01ha2VmaWxlLmluCitAQCAtNSw3ICs1LDcgQEAgQ0MgPSBAQ0NACisgQ1BQID0gQENQUEAKKyBDRkxBR1MgPSBAQ0ZMQUdTQAorIExERkxBR1MgPSBATERGTEFHU0AKKy1DUFBGTEFHUyA9IC1EX0dOVV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvc2xhbmcgQENQUEZMQUdTQCAKKytDUFBGTEFHUyA9IC1EX0dOVV9TT1VSQ0UgQENQUEZMQUdTQCAKKyBHTlVfTEQgPSBAR05VX0xEQAorIAorIFZFUlNJT04gPSBAVkVSU0lPTkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3QtcHl0aG9uXzAuNTIuMTguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTQxYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiCkBAIC0wLDAgKzEsMjkgQEAKK3JlcXVpcmUgcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfJHtQVn0uYmIKKworU1VNTUFSWSAuPSAiIC0gcHl0aG9uIgorREVQRU5EUyA9ICJsaWJuZXd0IHB5dGhvbiIKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tY29yZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUgcHl0aG9uLWRpcgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1weXRob24iCitFWFRSQV9PRU1BS0UgKz0gIlBZVEhPTlZFUlM9JHtQWVRIT05fRElSfSIKKworCitkb19jb21waWxlICgpIHsKKwlWRVJTSU9OPSIkKHNlZCAtbiAncy9eVkVSU0lPTiA9IC8vcCcgTWFrZWZpbGUpIgorCW9lX3J1bm1ha2UgX3NuYWNrLnNvCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7UFlUSE9OX0RJUn0vX3NuYWNrLnNvICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KKwlpbnN0YWxsIC1tIDA2NDQgc25hY2sucHkgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LworfQorCitQQUNLQUdFU19yZW1vdmUgPSAid2hpcHRhaWwiCisKK0ZJTEVTXyR7UE59ID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1Zy8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMmU0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XzAuNTIuMTguYmIKQEAgLTAsMCArMSw1NiBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMiCisKK0RFU0NSSVBUSU9OID0gIk5ld3QgaXMgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IGZvciBjb2xvciB0ZXh0IG1vZGUsIHdpZGdldCBiYXNlZCB1c2VyIFwKK2ludGVyZmFjZXMuICBOZXd0IGNhbiBiZSB1c2VkIHRvIGFkZCBzdGFja2VkIHdpbmRvd3MsIGVudHJ5IHdpZGdldHMsIFwKK2NoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGxhYmVscywgcGxhaW4gdGV4dCBmaWVsZHMsIHNjcm9sbGJhcnMsIFwKK2V0Yy4sIHRvIHRleHQgbW9kZSB1c2VyIGludGVyZmFjZXMuICBUaGlzIHBhY2thZ2UgYWxzbyBjb250YWlucyB0aGUgXAorc2hhcmVkIGxpYnJhcnkgbmVlZGVkIGJ5IHByb2dyYW1zIGJ1aWx0IHdpdGggbmV3dCwgYXMgd2VsbCBhcyBhIFwKKy91c3IvYmluL2RpYWxvZyByZXBsYWNlbWVudCBjYWxsZWQgd2hpcHRhaWwuICBOZXd0IGlzIGJhc2VkIG9uIHRoZSBcCitzbGFuZyBsaWJyYXJ5LiIKKworSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL25ld3QvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCisjIHNsYW5nIG5lZWRzIHRvIGJlID49IDIuMgorREVQRU5EUyA9ICJzbGFuZyBwb3B0IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9uL2UvbmV3dC9uZXd0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmVfc2xhbmdfaW5jbHVkZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfU0hBUkVERElSLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb3NzX2FyLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjY4NTcyMWJlZTFhMzE4NTcwNzA0YjE5ZGNmMzFkMjY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc3MWIwZTYzNGVkZTU2YWU2YTZhY2Q5MTA3MjhiYjU4MzJhYzEzZGRiMGQxZDI3OTE5ZDI0OThkYWI3MGM5MWUiCisKK1MgPSAiJHtXT1JLRElSfS9uZXd0LSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXRjbCAtLXdpdGhvdXQtcHl0aG9uIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZXhwb3J0IFNUQUdJTkdfSU5DRElSCitleHBvcnQgU1RBR0lOR19MSUJESVIKKworZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCisKK1BBQ0tBR0VTX3ByZXBlbmQgPSAid2hpcHRhaWwgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBzaCBhdXRvZ2VuLnNoCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCisgICAgcm0gLWYgJHtCfS8uZGVwZW5kCit9CisKK0ZJTEVTX3doaXB0YWlsID0gIiR7YmluZGlyfS93aGlwdGFpbCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3ZTYwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS5iYgpAQCAtMCwwICsxLDE2MiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJTdGFuZGFyZCBmdWxsLWZlYXR1cmVkIExpbnV4IHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2UgZ3JvdXAgYnJpbmdpbmcgaW4gcGFja2FnZXMgbmVlZGVkIGZvciBhIG1vcmUgdHJhZGl0aW9uYWwgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0iCitQUiA9ICJyNiIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQQUNLQUdFUyA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyBcCisgICAgIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgICMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFmdGVyIHJlbmFtZQorICAgIG5hbWVtYXAgPSB7fQorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1saWJzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtbGlicyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtdXRpbHMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYy11dGlscyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYy1leHRlbmRlZCIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtZGV2LXV0aWxzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1tdWx0aXVzZXIiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWluaXRzY3JpcHRzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtaW5pdHNjcmlwdHMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyJdID0gInBhY2thZ2Vncm91cC1jb3JlLXN5cy1zZXJ2aWNlcyIKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgnLWRldicpOgorICAgICAgICAgICAgbWFwcGVkID0gbmFtZW1hcC5nZXQocGtnWzotNF0sIE5vbmUpCisgICAgICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICAgICAgbWFwcGVkICs9ICctZGV2JworICAgICAgICBlbGlmIHBrZy5lbmRzd2l0aCgnLWRiZycpOgorICAgICAgICAgICAgbWFwcGVkID0gbmFtZW1hcC5nZXQocGtnWzotNF0sIE5vbmUpCisgICAgICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICAgICAgbWFwcGVkICs9ICctZGJnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGVkID0gbmFtZW1hcC5nZXQocGtnLCBOb25lKQorCisgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgIG9sZHRhc2tuYW1lID0gbWFwcGVkLnJlcGxhY2UoInBhY2thZ2Vncm91cC1jb3JlIiwgInRhc2stY29yZSIpCisgICAgICAgICAgICBtYXBzdHIgPSAiICVzICVzIiAlIChtYXBwZWQsIG9sZHRhc2tuYW1lKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18lcyIgJSBwa2csIG1hcHN0cikKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfJXMiICUgcGtnLCBtYXBzdHIpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18lcyIgJSBwa2csIG1hcHN0cikKK30KKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1saWJzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWluaXRzY3JpcHRzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtc3lzLXNlcnZpY2VzIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1saWJzID0gIlwKKyAgICBnbGliLTIuMCBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtdXRpbHMgPSAiXAorICAgIGJhc2ggXAorICAgIGFjbCBcCisgICAgYXR0ciBcCisgICAgYmMgXAorICAgIGNvcmV1dGlscyBcCisgICAgY3BpbyBcCisgICAgZTJmc3Byb2dzIFwKKyAgICBlZCBcCisgICAgZmlsZSBcCisgICAgZmluZHV0aWxzIFwKKyAgICBnYXdrIFwKKyAgICBnbXAgXAorICAgIGdyZXAgXAorICAgIG1ha2VkZXZzIFwKKyAgICBtYyBcCisgICAgbWMtZmlzaCBcCisgICAgbWMtaGVscGVycyBcCisgICAgbWMtaGVscGVycy1wZXJsIFwKKyAgICBtYy1oZWxwZXJzLXB5dGhvbiBcCisgICAgbWt0ZW1wIFwKKyAgICBuY3Vyc2VzIFwKKyAgICBuZXQtdG9vbHMgXAorICAgIHBheCBcCisgICAgcG9wdCBcCisgICAgcHJvY3BzIFwKKyAgICBwc21pc2MgXAorICAgIHNlZCBcCisgICAgdGFyIFwKKyAgICB0aW1lIFwKKyAgICB1dGlsLWxpbnV4IFwKKyAgICB6bGliIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1leHRlbmRlZCA9ICJcCisgICAgaXByb3V0ZTIgXAorICAgIGlwdXRpbHMgXAorICAgIGlwdGFibGVzIFwKKyAgICBtb2R1bGUtaW5pdC10b29scyBcCisgICAgb3BlbnNzbCBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzID0gIlwKKyAgICBieWFjYyBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBtNCBcCisgICAgbWFrZSBcCisgICAgcGF0Y2ggXAorICAgICIKKworVklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzID89ICJpbml0c2NyaXB0cyIKK1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgPz0gInN5c3Zpbml0IgorVklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXIgPz0gImJ1c3lib3giCitWSVJUVUFMLVJVTlRJTUVfc3lzbG9nID89ICJzeXNrbG9nZCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfaW5pdHNjcmlwdHN9IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXJ9IFwKKyAgICBldGh0b29sIFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfc3lzbG9nfSBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyID0gIlwKKyAgICBjcmFja2xpYiBcCisgICAgZ3ppcCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlidXNlcicsICcnLCBkKX0gXAorICAgIHNoYWRvdyBcCisgICAgc3VkbyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtc3lzLXNlcnZpY2VzID0gIlwKKyAgICBhdCBcCisgICAgYnppcDIgXAorICAgIGNyb25pZSBcCisgICAgZGJ1cyBcCisgICAgZGJ1cy1nbGliIFwKKyAgICBweXRob24tZGJ1cyBcCisgICAgZWxmdXRpbHMgXAorICAgIGd6aXAgXAorICAgIGxlc3MgXAorICAgIGxpYmNhcCBcCisgICAgbGliZXZlbnQgXAorICAgIGxvZ3JvdGF0ZSBcCisgICAgbmZzLXV0aWxzIFwKKyAgICBwY2l1dGlscyBcCisgICAgbGlicGNyZSBcCisgICAgcnBjYmluZCBcCisgICAgc3lzZnN1dGlscyBcCisgICAgdGNwLXdyYXBwZXJzIFwKKyAgICB0emRhdGEgXAorICAgICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODIzODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1sc2IuYmIKQEAgLTAsMCArMSwyNzggQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSIKK0RFU0NSSVBUSU9OID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHNhdGlzZnkgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgc3BlY2lmaWNhdGlvbiIKK1BSID0gInIxMCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieHQsIGxpYnh0c3QgYW5kIG90aGVycyByZXF1aXJlIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKKyMKKyMgV2Ugd2lsbCBza2lwIHBhcnNpbmcgdGhpcyBwYWNrYWdlZ2VvdXAgZm9yIG5vbi1nbGliYyBzeXN0ZW1zCisjCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGlmIGQuZ2V0VmFyKCdUQ0xJQkMnLCBUcnVlKSAhPSAiZ2xpYmMiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggJXMgQyBsaWJyYXJ5IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdUQ0xJQkMnLCBUcnVlKSkKK30KKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtc3lzLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1kYiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS10Y2wgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1taXNjIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcnVudGltZS1hZGQgXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2IgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZGIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtdGNsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkIFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtc3lzLWV4dGVuZGVkID0gIlwKKyAgICBjdXJsIFwKKyAgICBkaGNwLWNsaWVudCBcCisgICAgaGRwYXJtIFwKKyAgICBsaWdodHRwZCBcCisgICAgbGliYWlvIFwKKyAgICBscnpzeiBcCisgICAgbHpvIFwKKyAgICBtYyBcCisgICAgbWMtZmlzaCBcCisgICAgbWMtaGVscGVycyBcCisgICAgbWMtaGVscGVycy1wZXJsIFwKKyAgICBtYy1oZWxwZXJzLXB5dGhvbiBcCisgICAgbWRhZG0gXAorICAgIG1pbmljb20gXAorICAgIG5lb24gXAorICAgIHBhcnRlZCBcCisgICAgJHtQVEh9IFwKKyAgICBxdW90YSBcCisgICAgc2NyZWVuIFwKKyAgICBzZXRzZXJpYWwgXAorICAgIHN5c3N0YXQgXAorICAgIHVkZXYtZXh0cmFjb25mIFwKKyAgICB1bnppcCBcCisgICAgd2F0Y2hkb2cgXAorICAgIHdnZXQgXAorICAgIHdoaWNoIFwKKyAgICB4aW5ldGQgXAorICAgIHppcCBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1kYiA9ICJcCisgICAgZGIgXAorICAgIHNxbGl0ZTMgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtcGVybCA9ICJcCisgICAgZ2RibSBcCisgICAgcGVybCBcCisgICAgemxpYiBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXB5dGhvbiA9ICJcCisgICAgZXhwYXQgXAorICAgIGdkYm0gXAorICAgIGdtcCBcCisgICAgbmN1cnNlcyBcCisgICAgb3BlbnNzbCBcCisgICAgcHl0aG9uIFwKKyAgICByZWFkbGluZSBcCisgICAgemlwIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXRjbCA9ICJcCisgICAgdGNsIFwKKyAgICAiCisKKyMgTWlzY2VsbGFuZW91cyBwYWNrYWdlcyByZXF1aXJlZCBieSBMU0IgKG9yIExTQiB0ZXN0cykKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1taXNjID0gIlwKKyAgICBjaGtjb25maWcgXAorICAgIGdldHRleHQgXAorICAgIGdldHRleHQtcnVudGltZSBcCisgICAgZ3JvZmYgXAorICAgIGxzYmluaXRzY3JpcHRzIFwKKyAgICBsc2J0ZXN0IFwKKyAgICBsc29mIFwKKyAgICBzdHJhY2UgXAorICAgIGxpYnVzYjEgXAorICAgIHVzYnV0aWxzIFwKKyAgICBycG0gXAorICAgICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSA9ICJMU0IgQ29yZSIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgY29tbWFuZHMvbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBDb3JlIHNwZWNpZmljYXRpb24iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSA9ICJcCisgICAgYXQgXAorICAgIGJhc2ggXAorICAgIGJjIFwKKyAgICBiaW51dGlscyBcCisgICAgYmludXRpbHMtc3ltbGlua3MgXAorICAgIGNvcmV1dGlscyBcCisgICAgY3BpbyBcCisgICAgY3JvbmllIFwKKyAgICBjdXBzIFwKKyAgICBkaWZmdXRpbHMgXAorICAgIGVkIFwKKyAgICBnbGliYy11dGlscyBcCisgICAgZWxmdXRpbHMgXAorICAgIGZpbGUgXAorICAgIGZpbmR1dGlscyBcCisgICAgZm9udGNvbmZpZy11dGlscyBcCisgICAgZm9vbWF0aWMtZmlsdGVycyBcCisgICAgZ2F3ayBcCisgICAgZ2hvc3RzY3JpcHQgXAorICAgIGdyZXAgXAorICAgIGd6aXAgXAorICAgIGxvY2FsZWRlZiBcCisgICAgbHNiIFwKKyAgICBtNCBcCisgICAgbWFpbHggXAorICAgIG1ha2UgXAorICAgIG1hbiBcCisgICAgbWFuLXBhZ2VzIFwKKyAgICBta3RlbXAgXAorICAgIG1zbXRwIFwKKyAgICBwYXRjaCBcCisgICAgcGF4IFwKKyAgICBwcm9jcHMgXAorICAgIHBzbWlzYyBcCisgICAgc2VkIFwKKyAgICBzaGFkb3cgXAorICAgIHRhciBcCisgICAgdGltZSBcCisgICAgdXRpbC1saW51eCBcCisgICAgeGRnLXV0aWxzIFwKKyAgICBcCisgICAgZ2xpYmMgXAorICAgIGxpYmdjYyBcCisgICAgbGlicGFtIFwKKyAgICBsaWJ4bWwyIFwKKyAgICBuY3Vyc2VzIFwKKyAgICB6bGliIFwKKyAgICBuc3ByIFwKKyAgICBsaWJwbmcxMiBcCisgICAgbnNzIFwKKyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCA9ICJMU0IgUnVudGltZSBMYW5ndWFnZXMgKFBlcmwpIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIFJ1bnRpbWUgbGFuZ3VhZ2VzIHNwZWNpZmljYXRpb24gKFBlcmwgcGFydHMpIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgPSAiXAorICAgIHBlcmwgXAorICAgIHBlcmwtbW9kdWxlcyBcCisgICAgcGVybC1taXNjIFwKKyAgICBwZXJsLXBvZCBcCisgICAgcGVybC1kZXYgXAorICAgIHBlcmwtZG9jIFwKKyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uID0gIkxTQiBSdW50aW1lIExhbmd1YWdlcyAoUHl0aG9uKSIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1weXRob24gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIFJ1bnRpbWUgbGFuZ3VhZ2VzIHNwZWNpZmljYXRpb24gKFB5dGhvbiBwYXJ0cykiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uID0gIlwKKyAgICBweXRob24gXAorICAgIHB5dGhvbi1tb2R1bGVzIFwKKyAgICBweXRob24tbWlzYyBcCisiCisKK2RlZiBnZXRfbGlicXQzKGQpOgorICAgIGlmICdsaW51eHN0ZGJhc2UnIGluIGQuZ2V0VmFyKCdESVNUUk9PVkVSUklERVMnLCBGYWxzZSkgb3IgIiI6CisgICAgICAgIGlmICdxdDMnIGluIGQuZ2V0VmFyKCdCQkZJTEVfQ09MTEVDVElPTlMnLCBGYWxzZSkgb3IgIiI6CisgICAgICAgICAgICByZXR1cm4gJ2xpYnF0LW10MycKKworICAgICAgICBiYi53YXJuKCdUaGUgbWV0YS1xdDMgbGF5ZXIgc2hvdWxkIGJlIGFkZGVkLCB0aGlzIGxheWVyIHByb3ZpZGVzIFF0IDMueCcgXAorICAgICAgICAgICAgICAgICdsaWJyYXJpZXMuIEl0cyBpbnRlbmRlZCB1c2UgaXMgZm9yIHBhc3NpbmcgTFNCIHRlc3RzIGFzIFF0MyBpcycgXAorICAgICAgICAgICAgICAgICdhIHJlcXVpcmVtZW50IGZvciBMU0IuJykKKyAgICByZXR1cm4gJycKKworUVQ0UEtHUyA9ICIgXAorICAgIGxpYnF0Y29yZTQgXAorICAgIGxpYnF0Z3VpNCBcCisgICAgbGlicXRzcWw0IFwKKyAgICBsaWJxdHN2ZzQgXAorICAgIGxpYnF0eG1sNCBcCisgICAgbGlicXRuZXR3b3JrNCBcCisgICAgcXQ0LXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm9wZW5nbCIsICJsaWJxdG9wZW5nbDQiLCAiIiwgZCl9IFwKKyAgICAiCitRVDRQS0dTX21pcHM2NCA9ICIiCitRVDRQS0dTX21pcHM2NG4zMiA9ICIiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgPSAiTFNCIERlc2t0b3AiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGxpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgRGVza3RvcCBzcGVjaWZpY2F0aW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgPSAiXAorICAgIGxpYnh0IFwKKyAgICBsaWJ4eGY4NnZtIFwKKyAgICBsaWJkcm0gXAorICAgIGxpYmdsdSBcCisgICAgbGlieGkgXAorICAgIGxpYnh0c3QgXAorICAgIGxpYngxMS1sb2NhbGUgXAorICAgIHhvcmctbWluaW1hbC1mb250cyBcCisgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItaWNvIFwKKyAgICBnZGstcGl4YnVmLWxvYWRlci1ibXAgXAorICAgIGdkay1waXhidWYtbG9hZGVyLWFuaSBcCisgICAgZ2RrLXBpeGJ1Zi14bGliIFwKKyAgICBsaWJlcmF0aW9uLWZvbnRzIFwKKyAgICBndGsrIFwKKyAgICBhdGsgXAorICAgIGxpYmFzb3VuZCBcCisgICAgJHtRVDRQS0dTfSBcCisgICAgJHtAZ2V0X2xpYnF0MyhkKX0gXAorIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcnVudGltZS1hZGQgPSAiXAorICAgIGxkZCBcCisgICAgcGFtLXBsdWdpbi13aGVlbCBcCisgICAgZTJmc3Byb2dzLW1rZTJmcyBcCisgICAgbWtmb250ZGlyIFwKKyAgICBsaWJ1cmktcGVybCBcCisgICAgbGlieG1sLXBhcnNlci1wZXJsIFwKKyAgICBsaWJ4bWwtcGVybCBcCisgICAgbGlieG1sLXNheC1wZXJsIFwKKyAgICBnbGliYy1sb2NhbGVkYXRhcyBcCisgICAgZ2xpYmMtZ2NvbnZzIFwKKyAgICBnbGliYy1jaGFybWFwcyBcCisgICAgZ2xpYmMtYmluYXJpZXMgXAorICAgIGdsaWJjLWxvY2FsZWRhdGEtcG9zaXggXAorICAgIGdsaWJjLWV4dHJhLW5zcyBcCisgICAgZ2xpYmMtcGNwcm9maWxlIFwKKyAgICBsaWJjbGFzcy1pc2EtcGVybCBcCisgICAgbGliZW52LXBlcmwgXAorICAgIGxpYmR1bXB2YWx1ZS1wZXJsIFwKKyAgICBsaWJmaWxlLWNoZWNrdHJlZS1wZXJsIFwKKyAgICBsaWJpMThuLWNvbGxhdGUtcGVybCBcCisgICAgbGlicG9kLXBsYWluZXItcGVybCBcCisiCisKK1BUSCA9ICJwdGgiCitQVEhfbGliYy11Y2xpYmMgPSAiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0gYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlOTkwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtLzk5X3BhbQpAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvcnVuL3NlcGVybWl0IG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM4MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vY3J5cHRfY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1RoaXMgcGF0Y2ggZml4ZXMgYSBjYXNlIHdoZXJlIGl0IGZpbmQgY3J5cHQgZGVmaW5lZCBpbiBsaWJjIChtdXNsKSBidXQKK25vdCBpbiBzcGVjaWZpZWQgbGlicmFyaWVzIHRoZW4gaXQgZW5kcyB1cCBhc3NpZ25pbmcKKworTElCQ1JZUFQ9Ii1sIiB3aGljaCB0aGVuIGdvZXMgaW50byBtYWtlZmlsZSBjYXVzZSBhbGwgc29ydCBvZiBwcm9ibGVtcworZS5nLgorCitsZDogY2Fubm90IGZpbmQgLWwtbTMyCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitUaGUgcmVhc29uIGlzIHRoYXQgLWwgYXBwZWFycyBvbiBjb21tYW5kbGluZSB3aXRoIG91dCBhbnkgbGlicmFyeSBhbmQKK2NvbXBpbGVyIHRyZWF0cyB0aGUgbmV4dCBhcmd1bWVudCBhcyBsaWJyYXJ5IG5hbWUgd2hhdGV2ZXIgaXQgaXMuCisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogTGludXgtUEFNLTEuMS42L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuNi5vcmcvY29uZmlndXJlLmFjCisrKysgTGludXgtUEFNLTEuMS42L2NvbmZpZ3VyZS5hYworQEAgLTQwMCw3ICs0MDAsOSBAQCBBU19JRihbdGVzdCAieCRhY19jdl9oZWFkZXJfeGNyeXB0X2giID0KKyAgIFtjcnlwdF9saWJzPSJjcnlwdCJdKQorIAorIEJBQ0tVUF9MSUJTPSRMSUJTCistQUNfU0VBUkNIX0xJQlMoW2NyeXB0XSxbJGNyeXB0X2xpYnNdLCBMSUJDUllQVD0iLWwkYWNfbGliIiwgTElCQ1JZUFQ9IiIpCisrQUNfU0VBUkNIX0xJQlMoW2NyeXB0XSxbJGNyeXB0X2xpYnNdLAorKwkgICAgICAgW3Rlc3QgIiRhY19jdl9zZWFyY2hfY3J5cHQiID0gIm5vbmUgcmVxdWlyZWQiIHx8CisrCQlMSUJDUllQVD0iJGFjX2N2X3NlYXJjaF9jcnlwdCJdKQorIEFDX0NIRUNLX0ZVTkNTKGNyeXB0X3IgY3J5cHRfZ2Vuc2FsdF9yKQorIExJQlM9JEJBQ0tVUF9MSUJTCisgQUNfU1VCU1QoTElCQ1JZUFQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9maXhzZXBidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2ZpeHNlcGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOWMzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGaXggdGhlIGJ1aWxkIGVycm9yIHdoZW4gYSBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgaXMgdXNlZDoKKworTWFraW5nIGluc3RhbGwgaW4geHRlc3RzbWFrZVsxXTogRW50ZXJpbmcgZGlyZWN0b3J5IGAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9saWJwYW0vMS4xLjYtcjIvYnVpbGQveHRlc3RzJy91c3IvYmluL2luc3RhbGwgLWMgLWQgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbGlicGFtLzEuMS42LXIyL2ltYWdlL3Vzci9zaGFyZS9MaW51eC1QQU0veHRlc3RzZm9yIGZpbGUgaW4gcnVuLXh0ZXN0cy5zaCB0c3QtcGFtX2Rpc3BhdGNoMS5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gyLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDMucGFtZCB0c3QtcGFtX2Rpc3BhdGNoNC5wYW1kIHRzdC1wYW1fZGlzcGF0Y2g1LnBhbWQgdHN0LXBhbV9jcmFja2xpYjEucGFtZCB0c3QtcGFtX2NyYWNrbGliMi5wYW1kIHRzdC1wYW1fdW5peDEucGFtZCB0c3QtcGFtX3VuaXgyLnBhbWQgdHN0LXBhbV91bml4My5wYW1kIHRzdC1wYW1fdW5peDQucGFtZCB0c3QtcGFtX3VuaXgxLnNoIHRzdC1wYW1fdW5peDIuc2ggdHN0LXBhbV91bml4My5zaCB0c3QtcGFtX3VuaXg0LnNoIGFjY2Vzcy5jb25mIHRzdC1wYW1fYWNjZXNzMS5wYW1kIHRzdC1wYW1fYWNjZXNzMS5zaCB0c3QtcGFtX2FjY2VzczIucGFtZCB0c3QtcGFtX2FjY2VzczIuc2ggdHN0LXBhbV9hY2Nlc3MzLnBhbWQgdHN0LXBhbV9hY2Nlc3MzLnNoIHRzdC1wYW1fYWNjZXNzNC5wYW1kIHRzdC1wYW1fYWNjZXNzNC5zaCBsaW1pdHMuY29uZiB0c3QtcGFtX2xpbWl0czEucGFtZCB0c3QtcGFtX2xpbWl0czEuc2ggdHN0LXBhbV9zdWNjZWVkX2lmMS5wYW1kIHRzdC1wYW1fc3VjY2VlZF9pZjEuc2ggZ3JvdXAuY29uZiB0c3QtcGFtX2dyb3VwMS5wYW1kIHRzdC1wYW1fZ3JvdXAxLnNoIHRzdC1wYW1fYXV0aGZhaWwucGFtZCB0c3QtcGFtX2F1dGhzdWNjZWVkLnBhbWQgdHN0LXBhbV9zdWJzdGFjazEucGFtZCB0c3QtcGFtX3N1YnN0YWNrMWEucGFtZCB0c3QtcGFtX3N1YnN0YWNrMS5zaCB0c3QtcGFtX3N1YnN0YWNrMi5wYW1kIHRzdC1wYW1fc3Vic3RhY2syYS5wYW1kIHRzdC1wYW1fc3Vic3RhY2syLnNoIHRzdC1wYW1fc3Vic3RhY2szLnBhbWQgdHN0LXBhbV9zdWJzdGFjazNhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazMuc2ggdHN0LXBhbV9zdWJzdGFjazQucGFtZCB0c3QtcGFtX3N1YnN0YWNrNGEucGFtZCB0c3QtcGFtX3N1YnN0YWNrNC5zaCB0c3QtcGFtX3N1YnN0YWNrNS5wYW1kIHRzdC1wYW1fc3Vic3RhY2s1YS5wYW1kIHRzdC1wYW1fc3Vic3RhY2s1LnNoIHRzdC1wYW1fYXNzZW1ibGVfbGluZTEucGFtZCB0c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoIHRzdC1wYW1fcHdoaXN0b3J5MS5wYW1kIHRzdC1wYW1fcHdoaXN0b3J5MS5zaCB0c3QtcGFtX3RpbWUxLnBhbWQgdGltZS5jb25mIDsgZG8gXC91c3IvYmluL2luc3RhbGwgLWMgJGZpbGUgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbGlicGFtLzEuMS42LXIyL2ltYWdlL3Vzci9zaGFyZS9MaW51eC1QQU0veHRlc3RzIDsgXAlkb25lCisvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgcnVuLXh0ZXN0cy5zaCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB0c3QtcGFtX2Rpc3BhdGNoMS5wYW1kJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHRzdC1wYW1fZGlzcGF0Y2gyLnBhbWQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzAzLzIxCisKK0luZGV4OiBMaW51eC1QQU0tMS4xLjYveHRlc3RzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS42Lm9yaWcveHRlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDggMTI6MjY6MzAuMzYwMjY2MDAwICswMDAwCisrKysgTGludXgtUEFNLTEuMS42L3h0ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTAzLTIxIDExOjM5OjU4LjU1NzE2NjY1MCArMDAwMAorQEAgLTU5LDcgKzU5LDcgQEAKKyBpbnN0YWxsX3h0ZXN0czoKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMKKyAJZm9yIGZpbGUgaW4gJChFWFRSQV9ESVNUKSA7IGRvIFwKKy0JCSQoSU5TVEFMTCkgJCRmaWxlICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cyA7IFwKKysJCSQoSU5TVEFMTCkgJChzcmNkaXIpLyQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCisgCWRvbmUKKyAJZm9yIGZpbGUgaW4gJChYVEVTVFMpOyBkbyBcCisgCQkkKElOU1RBTEwpIC5saWJzLyQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwMDI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMtcmVtb3ZlLWJhc2gtZGVwZW5kZW5jeS5wYXRjaApAQCAtMCwwICsxLDIyNiBAQAorRnJvbSA1NTU0MDdmZjZlMmY3NDJkZjY0YWU5Mzg1OWYxNGEwZmMxMzk3ODI5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDEyIFNlcCAyMDE0IDA1OjM1OjA1IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnBhbS94dGVzdHM6IHJlbW92ZSBiYXNoIGRlcGVuZGVuY3kKKworVGhlcmUncyBub3QgYmFzaCBzcGVjaWZpYyBzeW50YXggaW4gdGhlIHh0ZXN0IHNjcmlwdHM6CisKKyAgIyBhZnRlciBiZWxvdyBwYXRjaGVzIGFwcGxpZWQ6CisgICQgY2QgTGludXgtUEFNLTEuMS42L3h0ZXN0cworICAkIGNoZWNrYmFzaGlzbXMgKi5zaAorICBObyBvdXRwdXQKKworSnVzdCByZW1vdmUgdGhlIHJ1bnRpbWUgZGVwZW5kZW5jeSB0byBiYXNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyB4dGVzdHMvcnVuLXh0ZXN0cy5zaCAgICAgICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaCB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9ncm91cDEuc2ggICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2ggICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2ggICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2ggICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2ggICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2ggICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaCAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV91bml4MS5zaCAgICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV91bml4Mi5zaCAgICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV91bml4My5zaCAgICAgICAgICB8ICAgIDIgKy0KKyB4dGVzdHMvdHN0LXBhbV91bml4NC5zaCAgICAgICAgICB8ICAgIDIgKy0KKyAxOSBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3h0ZXN0cy9ydW4teHRlc3RzLnNoIGIveHRlc3RzL3J1bi14dGVzdHMuc2gKK2luZGV4IDNhODkwNTcuLjFjZjg2ODQgMTAwNzU1CistLS0gYS94dGVzdHMvcnVuLXh0ZXN0cy5zaAorKysrIGIveHRlc3RzL3J1bi14dGVzdHMuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgU1JDRElSPSQxCisgc2hpZnQgMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoCitpbmRleCAxODBkMjU2Li43MDUyMWQyIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vZ3JvdXBhZGQgdHN0cGFtYWNjZXNzCisgL3Vzci9zYmluL3VzZXJhZGQgLUcgdHN0cGFtYWNjZXNzIC1wICchIScgdHN0cGFtYWNjZXNzMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoCitpbmRleCAwYTMwMjc1Li43ZTNlNjBmIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vZ3JvdXBhZGQgdHN0cGFtYWNjZXNzCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1hY2Nlc3MyCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaCBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2gKK2luZGV4IDM0OGUwYzMuLjM2MzBlMmUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtYWNjZXNzMworIC4vdHN0LXBhbV9hY2Nlc3MzCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaCBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2gKK2luZGV4IDYxZTdiNDQuLjQ1MzhkZjQgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtYWNjZXNzNAorIC4vdHN0LXBhbV9hY2Nlc3M0CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2ggYi94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaAoraW5kZXggMjQ4ZDQ3ZS4uZGMyYTY3NSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoZmFpbCB0c3QtcGFtX2Fzc2VtYmxlX2xpbmUxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoIGIveHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoCitpbmRleCBiNzYzNzdmLi40NGZhY2E5IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9ncm91cDEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWdycGcKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWdycAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2ggYi94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoCitpbmRleCA0ZmFhODIyLi4zMmMwMjFkIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWxpbWl0cworIC4vdHN0LXBhbV9saW1pdHMxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaCBiL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2gKK2luZGV4IGRkYjNiOGIuLjBmMjEyZTIgMTAwNjQ0CistLS0gYS94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIHRzdHBhbXB3aGlzdG9yeQorIC4vdHN0LXBhbV9wd2hpc3RvcnkxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoCitpbmRleCA1MjYwMTc1Li5mMWI3MmE3IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazEuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9zdWJzdGFjazEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2gKK2luZGV4IGMwMmY1OTcuLjM4MDRmYTcgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMi5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoc3VjY2VlZCB0c3QtcGFtX3N1YnN0YWNrMgorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaAoraW5kZXggMGU1NzJhYS4uYWE0OGU4ZSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhzdWNjZWVkIHRzdC1wYW1fc3Vic3RhY2szCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoCitpbmRleCBhM2VmMDhhLi45NThhMDdhIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazQuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aHN1Y2NlZWQgdHN0LXBhbV9zdWJzdGFjazQKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2gKK2luZGV4IGUyNzE0ZmQuLjdlMGRhNzQgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNS5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoZmFpbCB0c3QtcGFtX3N1YnN0YWNrNQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoIGIveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2gKK2luZGV4IGE2NDNiMmUuLjU4ZTU3YjQgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW10ZXN0CisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyBwYW10ZXN0CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDEuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4MS5zaAoraW5kZXggZjc1YmQ4NC4uNzJkZWFjMCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4MS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbXVuaXgKKyAuL3RzdC1wYW1fdW5peDEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4Mi5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoCitpbmRleCA3MDkzMTU1Li5jMDRkNmU2IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDIuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAgPSAwYVhLWnp0QS5kMUtZCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWSAgdHN0cGFtdW5peAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDMuc2gKK2luZGV4IGVmNGEwN2MuLmI1MmRiMmIgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4My5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDMuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBwYW11bml4MDEgPSAwYVhLWnp0QS5kMUtZSXVGWEFybWQyalUKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAwYVhLWnp0QS5kMUtZSXVGWEFybWQyalUgdHN0cGFtdW5peAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDQuc2gKK2luZGV4IDc4N2MyZjkuLmU3OTc2ZmQgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4NC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDQuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBwYW11bml4MDEgPSAwYVhLWnp0QS5kMUtZSXVGWEFybWQyalUKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAwYVhLWnp0QS5kMUtZSXVGWEFybWQyalUgdHN0cGFtdW5peAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2xpYnBhbS14dGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjg3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1RoaXMgcGF0Y2ggaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgc3ViIHBhY2thZ2UgbGlicGFtLXh0ZXN0cyB0byBkbyBtb3JlIGNoZWNrcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tIExpbnV4LVBBTS0xLjEuNC94dGVzdHMvTWFrZWZpbGUuYW0ub3JpZwkyMDExLTA3LTE5IDE3OjAwOjA5LjYxOTk4MDAwMSArMDgwMAorKysrIExpbnV4LVBBTS0xLjEuNC94dGVzdHMvTWFrZWZpbGUuYW0JMjAxMS0wNy0xOSAxNjo1NDowMC4yMjk5Nzk5OTggKzA4MDAKK0BAIC03LDcgKzcsNyBAQAorIEFNX0xERkxBR1MgPSAtTCQodG9wX2J1aWxkZGlyKS9saWJwYW0gLWxwYW0gXAorIAktTCQodG9wX2J1aWxkZGlyKS9saWJwYW1fbWlzYyAtbHBhbV9taXNjCisgCistQ0xFQU5GSUxFUyA9ICp+ICQoWFRFU1RTKQorK0NMRUFORklMRVMgPSAqfgorIAorIEVYVFJBX0RJU1QgPSBydW4teHRlc3RzLnNoIHRzdC1wYW1fZGlzcGF0Y2gxLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDIucGFtZCBcCisgCXRzdC1wYW1fZGlzcGF0Y2gzLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDQucGFtZCBcCitAQCAtNTEsMyArNTEsMTggQEAKKyAKKyB4dGVzdHM6ICQoWFRFU1RTKSBydW4teHRlc3RzLnNoCisgCSIkKHNyY2RpcikiL3J1bi14dGVzdHMuc2ggIiQoc3JjZGlyKSIgJHtYVEVTVFN9ICR7Tk9TUkNURVNUU30KKysKKythbGw6ICQoWFRFU1RTKQorKworK2luc3RhbGw6IGluc3RhbGxfeHRlc3RzCisrCisraW5zdGFsbF94dGVzdHM6CisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzCisrCWZvciBmaWxlIGluICQoRVhUUkFfRElTVCkgOyBkbyBcCisrCQkkKElOU1RBTEwpICQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCisrCWRvbmUKKysJZm9yIGZpbGUgaW4gJChYVEVTVFMpOyBkbyBcCisrCQkkKElOU1RBTEwpIC5saWJzLyQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCisrCWRvbmUKKysKKysuUEhPTlk6IGFsbCBpbnN0YWxsX3h0ZXN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLW5vLWlubmV0Z3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tbm8taW5uZXRnci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTU1MWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLW5vLWlubmV0Z3IucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAoraW5uZXRnciBtYXkgbm90IGJlIHRoZXJlIHNvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gaW5uZXRnciBpcyBub3QgcHJlc2VudAordGhlbiB3ZSBpbmZvcm0gYWJvdXQgaXQgYW5kIG5vdCB1c2UgaXQuCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuMy5vcmlnL21vZHVsZXMvcGFtX2dyb3VwL3BhbV9ncm91cC5jCisrKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX2dyb3VwL3BhbV9ncm91cC5jCitAQCAtNjU5LDcgKzY1OSwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2FjY291bnQocGFtX2hhbmRsZV90ICpwCisgCX0KKyAJLyogSWYgYnVmZmVyIHN0YXJ0cyB3aXRoIEAsIHdlIGFyZSB1c2luZyBuZXRncm91cHMgKi8KKyAJaWYgKGJ1ZmZlclswXSA9PSAnQCcpCistCSAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjaWZkZWYgSEFWRV9JTk5FVEdSCisrICAgICAgICAgICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOworKyNlbHNlCisrICAgICAgICAgICBwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX2dyb3VwIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorIAkvKiBvdGhlcndpc2UsIGlmIHRoZSBidWZmZXIgc3RhcnRzIHdpdGggJSwgaXQncyBhIFVOSVggZ3JvdXAgKi8KKyAJZWxzZSBpZiAoYnVmZmVyWzBdID09ICclJykKKyAgICAgICAgICAgZ29vZCAmPSBwYW1fbW9kdXRpbF91c2VyX2luX2dyb3VwX25hbV9uYW0ocGFtaCwgdXNlciwgJmJ1ZmZlclsxXSk7CitJbmRleDogTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3RpbWUvcGFtX3RpbWUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuMy5vcmlnL21vZHVsZXMvcGFtX3RpbWUvcGFtX3RpbWUuYworKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKK0BAIC01NTUsOSArNTU1LDEzIEBAIGNoZWNrX2FjY291bnQocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdAorIAkgIH0KKyAJICAvKiBJZiBidWZmZXIgc3RhcnRzIHdpdGggQCwgd2UgYXJlIHVzaW5nIG5ldGdyb3VwcyAqLworIAkgIGlmIChidWZmZXJbMF0gPT0gJ0AnKQorLQkgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjaWZkZWYgSEFWRV9JTk5FVEdSCisrCSAgICAgICBnb29kICY9IGlubmV0Z3IgKCZidWZmZXJbMV0sIE5VTEwsIHVzZXIsIE5VTEwpOworKyNlbHNlCisrCSAgICAgICBwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3RpbWUgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisgCSAgZWxzZQorLQkgICAgZ29vZCAmPSBsb2dpY19maWVsZChwYW1oLCB1c2VyLCBidWZmZXIsIGNvdW50LCBpc19zYW1lKTsKKysJICAgICAgIGdvb2QgJj0gbG9naWNfZmllbGQocGFtaCwgdXNlciwgYnVmZmVyLCBjb3VudCwgaXNfc2FtZSk7CisgCSAgRCgoIndpdGggdXNlcjogJXMiLCBnb29kID8gInBhc3NlcyI6ImZhaWxzIiApKTsKKyAKKyAJICAvKiBoZXJlIHdlIGdldCB0aGUgdGltZSBmaWVsZCAqLworSW5kZXg6IExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9zdWNjZWVkX2lmL3BhbV9zdWNjZWVkX2lmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV9zdWNjZWVkX2lmL3BhbV9zdWNjZWVkX2lmLmMKKysrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCitAQCAtMjMxLDE4ICsyMzEsMjcgQEAgZXZhbHVhdGVfbm90aW5ncm91cChwYW1faGFuZGxlX3QgKnBhbWgsCisgfQorIC8qIFJldHVybiBQQU1fU1VDQ0VTUyBpZiB0aGUgKGhvc3QsdXNlcikgaXMgaW4gdGhlIG5ldGdyb3VwLiAqLworIHN0YXRpYyBpbnQKKy1ldmFsdWF0ZV9pbm5ldGdyKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorK2V2YWx1YXRlX2lubmV0Z3IoY29uc3QgcGFtX2hhbmRsZV90KiBwYW1oLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKyB7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorIAlpZiAoaW5uZXRncihncm91cCwgaG9zdCwgdXNlciwgTlVMTCkgPT0gMSkKKyAJCXJldHVybiBQQU1fU1VDQ0VTUzsKKysjZWxzZQorKyAgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9zdWNjZWVkX2lmIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorKworIAlyZXR1cm4gUEFNX0FVVEhfRVJSOworIH0KKyAvKiBSZXR1cm4gUEFNX1NVQ0NFU1MgaWYgdGhlIChob3N0LHVzZXIpIGlzIE5PVCBpbiB0aGUgbmV0Z3JvdXAuICovCisgc3RhdGljIGludAorLWV2YWx1YXRlX25vdGlubmV0Z3IoY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisrZXZhbHVhdGVfbm90aW5uZXRncihjb25zdCBwYW1faGFuZGxlX3QqIHBhbWgsIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorIHsKKysjaWZkZWYgSEFWRV9JTk5FVEdSCisgCWlmIChpbm5ldGdyKGdyb3VwLCBob3N0LCB1c2VyLCBOVUxMKSA9PSAwKQorIAkJcmV0dXJuIFBBTV9TVUNDRVNTOworKyNlbHNlCisrCXBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fc3VjY2VlZF9pZiBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKyAJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKyB9CisgCitAQCAtMzYxLDE0ICszNzAsMTQgQEAgZXZhbHVhdGUocGFtX2hhbmRsZV90ICpwYW1oLCBpbnQgZGVidWcsCisgCQljb25zdCB2b2lkICpyaG9zdDsKKyAJCWlmIChwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1JIT1NULCAmcmhvc3QpICE9IFBBTV9TVUNDRVNTKQorIAkJCXJob3N0ID0gTlVMTDsKKy0JCXJldHVybiBldmFsdWF0ZV9pbm5ldGdyKHJob3N0LCB1c2VyLCByaWdodCk7CisrCQlyZXR1cm4gZXZhbHVhdGVfaW5uZXRncihwYW1oLCByaG9zdCwgdXNlciwgcmlnaHQpOworIAl9CisgCS8qIChSaG9zdCwgdXNlcikgaXMgbm90IGluIHRoaXMgZ3JvdXAuICovCisgCWlmIChzdHJjYXNlY21wKHF1YWwsICJub3Rpbm5ldGdyIikgPT0gMCkgeworIAkJY29uc3Qgdm9pZCAqcmhvc3Q7CisgCQlpZiAocGFtX2dldF9pdGVtKHBhbWgsIFBBTV9SSE9TVCwgJnJob3N0KSAhPSBQQU1fU1VDQ0VTUykKKyAJCQlyaG9zdCA9IE5VTEw7CistCQlyZXR1cm4gZXZhbHVhdGVfbm90aW5uZXRncihyaG9zdCwgdXNlciwgcmlnaHQpOworKwkJcmV0dXJuIGV2YWx1YXRlX25vdGlubmV0Z3IocGFtaCwgcmhvc3QsIHVzZXIsIHJpZ2h0KTsKKyAJfQorIAkvKiBGYWlsIGNsb3NlZC4gKi8KKyAJcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODM0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjAwIEBACitEZXNjcmlwdGlvbjogZXh0cmFjdCB0aGUgc2VjdXJldHR5IGxvZ2ljIGZvciB1c2Ugd2l0aCB0aGUgIm51bGxva19zZWN1cmUiIG9wdGlvbgorIGludHJvZHVjZWQgaW4gdGhlICIwNTVfcGFtX3VuaXhfbnVsbG9rX3NlY3VyZSIgcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLXVycE4gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0gYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0KKy0tLSBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbQkyMDEzLTA3LTA1IDExOjA4OjIzLjIyNDQ4MzIzNyArMDgwMAorKysrIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtCTIwMTMtMDctMDUgMTE6MTU6MjEuMzA0NDg2NDU2ICswODAwCitAQCAtMjQsNiArMjQsMTAgQEAgZW5kaWYKKyBzZWN1cmVsaWJfTFRMSUJSQVJJRVMgPSBwYW1fc2VjdXJldHR5LmxhCisgcGFtX3NlY3VyZXR0eV9sYV9MSUJBREQgPSAtTCQodG9wX2J1aWxkZGlyKS9saWJwYW0gLWxwYW0KKyAKKytwYW1fc2VjdXJldHR5X2xhX1NPVVJDRVMgPQlcCisrCXBhbV9zZWN1cmV0dHkuYwkJXAorKwl0dHlfc2VjdXJlLmMKKysKKyBpZiBFTkFCTEVfUkVHRU5FUkFURV9NQU4KKyBub2luc3RfREFUQSA9IFJFQURNRQorIFJFQURNRTogcGFtX3NlY3VyZXR0eS44LnhtbAorZGlmZiAtdXJwTiBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9wYW1fc2VjdXJldHR5LmMgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvcGFtX3NlY3VyZXR0eS5jCistLS0gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvcGFtX3NlY3VyZXR0eS5jCTIwMTMtMDctMDUgMTE6MDc6NTAuMDY0NDgzNTY4ICswODAwCisrKysgYi9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvcGFtX3NlY3VyZXR0eS5jCTIwMTMtMDctMDUgMTE6MTI6MjMuOTk0NDgzMzQ0ICswODAwCitAQCAtMSw3ICsxLDUgQEAKKyAvKiBwYW1fc2VjdXJldHR5IG1vZHVsZSAqLworIAorLSNkZWZpbmUgU0VDVVJFVFRZX0ZJTEUgIi9ldGMvc2VjdXJldHR5IgorLSNkZWZpbmUgVFRZX1BSRUZJWCAgICAgIi9kZXYvIgorICNkZWZpbmUgQ01ETElORV9GSUxFICAgIi9wcm9jL2NtZGxpbmUiCisgI2RlZmluZSBDT05TT0xFQUNUSVZFX0ZJTEUJIi9zeXMvY2xhc3MvdHR5L2NvbnNvbGUvYWN0aXZlIgorIAorQEAgLTQwLDYgKzM4LDkgQEAKKyAjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX21vZHV0aWwuaD4KKyAjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2V4dC5oPgorIAorK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lKTsKKysKKyAjZGVmaW5lIFBBTV9ERUJVR19BUkcgICAgICAgMHgwMDAxCisgI2RlZmluZSBQQU1fTk9DT05TT0xFX0FSRyAgIDB4MDAwMgorIAorQEAgLTczLDExICs3NCw3IEBAIHNlY3VyZXR0eV9wZXJmb3JtX2NoZWNrIChwYW1faGFuZGxlX3QgKnAKKyAgICAgY29uc3QgY2hhciAqdXNlcm5hbWU7CisgICAgIGNvbnN0IGNoYXIgKnV0dHluYW1lOworICAgICBjb25zdCB2b2lkICp2b2lkX3V0dHluYW1lOworLSAgICBjaGFyIHR0eWZpbGVsaW5lWzI1Nl07CistICAgIGNoYXIgcHRuYW1lWzI1Nl07CistICAgIHN0cnVjdCBzdGF0IHR0eWZpbGVpbmZvOworICAgICBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3ZDsKKy0gICAgRklMRSAqdHR5ZmlsZTsKKyAKKyAgICAgLyogbG9nIGEgdHJhaWwgZm9yIGRlYnVnZ2luZyAqLworICAgICBpZiAoY3RybCAmIFBBTV9ERUJVR19BUkcpIHsKK0BAIC0xMDUsNTAgKzEwMiw3IEBAIHNlY3VyZXR0eV9wZXJmb3JtX2NoZWNrIChwYW1faGFuZGxlX3QgKnAKKyAJcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKKyAgICAgfQorIAorLSAgICAvKiBUaGUgUEFNX1RUWSBpdGVtIG1heSBiZSBwcmVmaXhlZCB3aXRoICIvZGV2LyIgLSBza2lwIHRoYXQgKi8KKy0gICAgaWYgKHN0cm5jbXAoVFRZX1BSRUZJWCwgdXR0eW5hbWUsIHNpemVvZihUVFlfUFJFRklYKS0xKSA9PSAwKSB7CistCXV0dHluYW1lICs9IHNpemVvZihUVFlfUFJFRklYKS0xOworLSAgICB9CistCistICAgIGlmIChzdGF0KFNFQ1VSRVRUWV9GSUxFLCAmdHR5ZmlsZWluZm8pKSB7CistCXBhbV9zeXNsb2cocGFtaCwgTE9HX05PVElDRSwgIkNvdWxkbid0IG9wZW4gJXM6ICVtIiwgU0VDVVJFVFRZX0ZJTEUpOworLQlyZXR1cm4gUEFNX1NVQ0NFU1M7IC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHNlY3VyZXR0eSBoYW5kbGluZywKKy0JCQkgICAgICAgdGhpcyBuZWVkcyB0byBzdWNjZWVkLiAgQnV0IHdlIHN0aWxsIGxvZyB0aGUKKy0JCQkgICAgICAgZXJyb3IuICovCistICAgIH0KKy0KKy0gICAgaWYgKCh0dHlmaWxlaW5mby5zdF9tb2RlICYgU19JV09USCkgfHwgIVNfSVNSRUcodHR5ZmlsZWluZm8uc3RfbW9kZSkpIHsKKy0JLyogSWYgdGhlIGZpbGUgaXMgd29ybGQgd3JpdGFibGUgb3IgaXMgbm90IGEKKy0JICAgbm9ybWFsIGZpbGUsIHJldHVybiBlcnJvciAqLworLQlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsCistCQkgICAiJXMgaXMgZWl0aGVyIHdvcmxkIHdyaXRhYmxlIG9yIG5vdCBhIG5vcm1hbCBmaWxlIiwKKy0JCSAgIFNFQ1VSRVRUWV9GSUxFKTsKKy0JcmV0dXJuIFBBTV9BVVRIX0VSUjsKKy0gICAgfQorLQorLSAgICB0dHlmaWxlID0gZm9wZW4oU0VDVVJFVFRZX0ZJTEUsInIiKTsKKy0gICAgaWYgKHR0eWZpbGUgPT0gTlVMTCkgeyAvKiBDaGVjayB0aGF0IHdlIG9wZW5lZCBpdCBzdWNjZXNzZnVsbHkgKi8KKy0JcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLCAiRXJyb3Igb3BlbmluZyAlczogJW0iLCBTRUNVUkVUVFlfRklMRSk7CistCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CistICAgIH0KKy0KKy0gICAgaWYgKGlzZGlnaXQodXR0eW5hbWVbMF0pKSB7CistCXNucHJpbnRmKHB0bmFtZSwgc2l6ZW9mKHB0bmFtZSksICJwdHMvJXMiLCB1dHR5bmFtZSk7CistICAgIH0gZWxzZSB7CistCXB0bmFtZVswXSA9ICdcMCc7CistICAgIH0KKy0KKy0gICAgcmV0dmFsID0gMTsKKy0KKy0gICAgd2hpbGUgKChmZ2V0cyh0dHlmaWxlbGluZSwgc2l6ZW9mKHR0eWZpbGVsaW5lKS0xLCB0dHlmaWxlKSAhPSBOVUxMKQorLQkgICAmJiByZXR2YWwpIHsKKy0JaWYgKHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9PSAnXG4nKQorLQkgICAgdHR5ZmlsZWxpbmVbc3RybGVuKHR0eWZpbGVsaW5lKSAtIDFdID0gJ1wwJzsKKy0KKy0JcmV0dmFsID0gKCBzdHJjbXAodHR5ZmlsZWxpbmUsIHV0dHluYW1lKQorLQkJICAgJiYgKCFwdG5hbWVbMF0gfHwgc3RyY21wKHB0bmFtZSwgdXR0eW5hbWUpKSApOworLSAgICB9CistICAgIGZjbG9zZSh0dHlmaWxlKTsKKysgICAgcmV0dmFsID0gX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShwYW1oLCB1dHR5bmFtZSk7CisgCisgICAgIGlmIChyZXR2YWwgJiYgIShjdHJsICYgUEFNX05PQ09OU09MRV9BUkcpKSB7CisgICAgICAgICBGSUxFICpjbWRsaW5lZmlsZTsKK2RpZmYgLXVycE4gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5jIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUuYworLS0tIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUuYwkxOTcwLTAxLTAxIDA4OjMwOjAwLjAwMDAwMDAwMCArMDgzMAorKysrIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUuYwkyMDEzLTA3LTA1IDExOjE0OjIxLjUzNDQ4MjkwMCArMDgwMAorQEAgLTAsMCArMSw5MCBAQAorKy8qCisrICogQSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIGxpbmUgaXMgaW4gL2V0Yy9zZWN1cmV0dHkKKysgKi8KKysKKysKKysjZGVmaW5lIFNFQ1VSRVRUWV9GSUxFICIvZXRjL3NlY3VyZXR0eSIKKysjZGVmaW5lIFRUWV9QUkVGSVggICAgICIvZGV2LyIKKysKKysvKiBUaGlzIGZ1bmN0aW9uIHRha2VuIG91dCBvZiBwYW1fc2VjdXJldHR5IGJ5IFNhbSBIYXJ0bWFuCisrICogPGhhcnRtYW5zQGRlYmlhbi5vcmc+Ki8KKysvKgorKyAqIGJ5IEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4sIFJlZCBIYXQgU29mdHdhcmUuCisrICogSnVseSAyNSwgMTk5Ni4KKysgKiBTbGlnaHQgbW9kaWZpY2F0aW9ucyBBR00uIDE5OTYvMTIvMworKyAqLworKworKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1bGVzLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxzeXNsb2cuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1dGlsLmg+CisrI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9leHQuaD4KKysKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1dHR5bmFtZSk7CisrCisraW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICp1dHR5bmFtZSkKKyt7CisrICAgIGludCByZXR2YWwgPSBQQU1fQVVUSF9FUlI7CisrICAgIGNoYXIgdHR5ZmlsZWxpbmVbMjU2XTsKKysgICAgY2hhciBwdG5hbWVbMjU2XTsKKysgICAgc3RydWN0IHN0YXQgdHR5ZmlsZWluZm87CisrICAgIEZJTEUgKnR0eWZpbGU7CisrICAgIC8qIFRoZSBQQU1fVFRZIGl0ZW0gbWF5IGJlIHByZWZpeGVkIHdpdGggIi9kZXYvIiAtIHNraXAgdGhhdCAqLworKyAgICBpZiAoc3RybmNtcChUVFlfUFJFRklYLCB1dHR5bmFtZSwgc2l6ZW9mKFRUWV9QUkVGSVgpLTEpID09IDApCisrCXV0dHluYW1lICs9IHNpemVvZihUVFlfUFJFRklYKS0xOworKworKyAgICBpZiAoc3RhdChTRUNVUkVUVFlfRklMRSwgJnR0eWZpbGVpbmZvKSkgeworKwlwYW1fc3lzbG9nKHBhbWgsIExPR19OT1RJQ0UsICJDb3VsZG4ndCBvcGVuICVzOiAlbSIsCisrCSAgICAgICAgICAgU0VDVVJFVFRZX0ZJTEUpOworKwlyZXR1cm4gUEFNX1NVQ0NFU1M7IC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHNlY3VyZXR0eSBoYW5kbGluZywKKysJCQkgICAgICAgdGhpcyBuZWVkcyB0byBzdWNjZWVkLiAgQnV0IHdlIHN0aWxsIGxvZyB0aGUKKysJCQkgICAgICAgZXJyb3IuICovCisrICAgIH0KKysKKysgICAgaWYgKCh0dHlmaWxlaW5mby5zdF9tb2RlICYgU19JV09USCkgfHwgIVNfSVNSRUcodHR5ZmlsZWluZm8uc3RfbW9kZSkpIHsKKysJLyogSWYgdGhlIGZpbGUgaXMgd29ybGQgd3JpdGFibGUgb3IgaXMgbm90IGEKKysJICAgbm9ybWFsIGZpbGUsIHJldHVybiBlcnJvciAqLworKwlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsCisrCSAgICAgICAgICAgIiVzIGlzIGVpdGhlciB3b3JsZCB3cml0YWJsZSBvciBub3QgYSBub3JtYWwgZmlsZSIsCisrCSAgICAgICAgICAgU0VDVVJFVFRZX0ZJTEUpOworKwlyZXR1cm4gUEFNX0FVVEhfRVJSOworKyAgICB9CisrCisrICAgIHR0eWZpbGUgPSBmb3BlbihTRUNVUkVUVFlfRklMRSwiciIpOworKyAgICBpZih0dHlmaWxlID09IE5VTEwpIHsgLyogQ2hlY2sgdGhhdCB3ZSBvcGVuZWQgaXQgc3VjY2Vzc2Z1bGx5ICovCisrCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwgIkVycm9yIG9wZW5pbmcgJXM6ICVtIiwgU0VDVVJFVFRZX0ZJTEUpOworKwlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOworKyAgICB9CisrCisrICAgIGlmIChpc2RpZ2l0KHV0dHluYW1lWzBdKSkgeworKwlzbnByaW50ZihwdG5hbWUsIHNpemVvZihwdG5hbWUpLCAicHRzLyVzIiwgdXR0eW5hbWUpOworKyAgICB9IGVsc2UgeworKwlwdG5hbWVbMF0gPSAnXDAnOworKyAgICB9CisrCisrICAgIHJldHZhbCA9IDE7CisrCisrICAgIHdoaWxlICgoZmdldHModHR5ZmlsZWxpbmUsc2l6ZW9mKHR0eWZpbGVsaW5lKS0xLCB0dHlmaWxlKSAhPSBOVUxMKSAKKysJICAgJiYgcmV0dmFsKSB7CisrCWlmKHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9PSAnXG4nKQorKwkgICAgdHR5ZmlsZWxpbmVbc3RybGVuKHR0eWZpbGVsaW5lKSAtIDFdID0gJ1wwJzsKKysJcmV0dmFsID0gKCBzdHJjbXAodHR5ZmlsZWxpbmUsdXR0eW5hbWUpCisrCSAgICAgICAgICAgJiYgKCFwdG5hbWVbMF0gfHwgc3RyY21wKHB0bmFtZSwgdXR0eW5hbWUpKSApOworKyAgICB9CisrICAgIGZjbG9zZSh0dHlmaWxlKTsKKysKKysgICAgaWYocmV0dmFsKSB7CisrCXJldHZhbCA9IFBBTV9BVVRIX0VSUjsKKysgICAgfQorKworKyAgICByZXR1cm4gcmV0dmFsOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNDFlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoCkBAIC0wLDAgKzEsMjQwIEBACitGcm9tIDliZGMxOTc0NzQ3OTVmMmQwMDBjMmJjMDRmNThmN2NlZjg4OThmMjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTUgSnVsIDIwMTUgMTM6MDc6MjAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGViaWFuIHBhdGNoIHRvIGFkZCBhIG5ldyAnbnVsbG9rX3NlY3VyZScgb3B0aW9uIHRvIHBhbV91bml4LAorIHdoaWNoIGFjY2VwdHMgdXNlcnMgd2l0aCBudWxsIHBhc3N3b3JkcyBvbmx5IHdoZW4gdGhlIGFwcGxpY2FudCBpcyBjb25uZWN0ZWQKKyBmcm9tIGEgdHR5IGxpc3RlZCBpbiAvZXRjL3NlY3VyZXR0eS4KKworQXV0aG9yczogU2FtIEhhcnRtYW4gPGhhcnRtYW5zQGRlYmlhbi5vcmc+LAorICAgICAgICAgU3RldmUgTGFuZ2FzZWsgPHZvcmxvbkBkZWJpYW4ub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CisKK3YyOgorCS0gRm9yd2FyZCBwb3J0ZWQgZnJvbSB2MS4xLjYgdG8gdjEuMi4xCisKK1NpZ25lZC1vZmYtYnk6IEFtYXJuYXRoIFZhbGx1cmkgPGFtYXJuYXRoLnZhbGx1cmlAaW50ZWwuY29tPgorLS0tCisgbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbSAgICB8ICAzICsrLQorIG1vZHVsZXMvcGFtX3VuaXgvUkVBRE1FICAgICAgICAgfCAxMSArKysrKysrKysrLQorIG1vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOCAgICAgfCAgOSArKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sIHwgMTkgKysrKysrKysrKysrKysrKysrLQorIG1vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jICAgICAgfCA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCisgbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmggICAgICB8ICA4ICsrKysrKy0tCisgNiBmaWxlcyBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0gYi9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtCitpbmRleCA1NmVkNTkxLi45YTM3MmFjIDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbQorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbQorQEAgLTMwLDcgKzMwLDggQEAgaWYgSEFWRV9WRVJTSU9OSU5HCisgICBwYW1fdW5peF9sYV9MREZMQUdTICs9IC1XbCwtLXZlcnNpb24tc2NyaXB0PSQoc3JjZGlyKS8uLi9tb2R1bGVzLm1hcAorIGVuZGlmCisgcGFtX3VuaXhfbGFfTElCQUREID0gJCh0b3BfYnVpbGRkaXIpL2xpYnBhbS9saWJwYW0ubGEgXAorLQlATElCQ1JZUFRAIEBMSUJTRUxJTlVYQCAkKE5JU19MSUJTKQorKwlATElCQ1JZUFRAIEBMSUJTRUxJTlVYQCAkKE5JU19MSUJTKSBcCisrCS4uL3BhbV9zZWN1cmV0dHkvdHR5X3NlY3VyZS5sbworIAorIHNlY3VyZWxpYl9MVExJQlJBUklFUyA9IHBhbV91bml4LmxhCisgCitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUgYi9tb2R1bGVzL3BhbV91bml4L1JFQURNRQoraW5kZXggMzkzNWRiYS4uNzg4MGQ5MSAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FCisrKysgYi9tb2R1bGVzL3BhbV91bml4L1JFQURNRQorQEAgLTY3LDcgKzY3LDE2IEBAIG51bGxvaworIAorICAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYQorICAgICBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rLiBUaGUgbnVsbG9rIGFyZ3VtZW50IG92ZXJyaWRlcworLSAgICB0aGlzIGRlZmF1bHQuCisrICAgIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlCisrICAgIHNlcnZpY2UuCisrCisrbnVsbG9rX3NlY3VyZQorKworKyAgICBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYQorKyAgICBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rLiBUaGUgbnVsbG9rX3NlY3VyZSBhcmd1bWVudAorKyAgICBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcworKyAgICB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YgdGhlIHZhbHVlcworKyAgICBmb3VuZCBpbiAvZXRjL3NlY3VyZXR0eS4KKyAKKyB0cnlfZmlyc3RfcGFzcworIAorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOCBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAoraW5kZXggMzM5MTc4Yi4uYTRiZDkwNiAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44CitAQCAtOTIsNyArOTIsMTQgQEAgVHVybnMgb2ZmIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgbmFtZWx5IG1lc3NhZ2VzIGFib3V0IHNlc3Npb24gb3BlbiBhbmQgY2xvc2UgdmkKKyAuUlMgNAorIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmtcJi4gVGhlCisgXGZCbnVsbG9rXGZSCistYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdFwmLgorK2FyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlXCYuCisrLlJFCisrLlBQCisrXGZCbnVsbG9rX3NlY3VyZVxmUgorKy5SUyA0CisrVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFua1wmLiBUaGUKKytcZkJudWxsb2tfc2VjdXJlXGZSCisrYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHlcJi4KKyAuUkUKKyAuUFAKKyBcZkJ0cnlfZmlyc3RfcGFzc1xmUgorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwgYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sCitpbmRleCBhOGI2NGJiLi4xY2VkNmY0IDEwMDY0NAorLS0tIGEvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbAorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbAorQEAgLTE1OSw3ICsxNTksMjQgQEAKKyAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlCisgICAgICAgICAgICAgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rLgorLSAgICAgICAgICAgIFRoZSA8b3B0aW9uPm51bGxvazwvb3B0aW9uPiBhcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0LgorKyAgICAgICAgICAgIFRoZSA8b3B0aW9uPm51bGxvazwvb3B0aW9uPiBhcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0CisrICAgICAgICAgICAgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZQorKyAgICAgICAgICAgIHNlcnZpY2UuCisrICAgICAgICAgIDwvcGFyYT4KKysgICAgICAgIDwvbGlzdGl0ZW0+CisrICAgICAgPC92YXJsaXN0ZW50cnk+CisrICAgICAgPHZhcmxpc3RlbnRyeT4KKysgICAgICAgIDx0ZXJtPgorKyAgICAgICAgICA8b3B0aW9uPm51bGxva19zZWN1cmU8L29wdGlvbj4KKysgICAgICAgIDwvdGVybT4KKysgICAgICAgIDxsaXN0aXRlbT4KKysgICAgICAgICAgPHBhcmE+CisrICAgICAgICAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlCisrICAgICAgICAgICAgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rLgorKyAgICAgICAgICAgIFRoZSA8b3B0aW9uPm51bGxva19zZWN1cmU8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMKKysgICAgICAgICAgICBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcworKyAgICAgICAgICAgIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZgorKyAgICAgICAgICAgIHRoZSB2YWx1ZXMgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHkuCisgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPC92YXJsaXN0ZW50cnk+CitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMgYi9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYworaW5kZXggYWJjY2Q4Mi4uMjM2MTk1NyAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jCisrKysgYi9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYworQEAgLTE4OSwxMyArMTg5LDIyIEBAIGludCBfc2V0X2N0cmwocGFtX2hhbmRsZV90ICpwYW1oLCBpbnQgZmxhZ3MsIGludCAqcmVtZW1iZXIsIGludCAqcm91bmRzLAorIAkvKiBub3cgcGFyc2UgdGhlIGFyZ3VtZW50cyB0byB0aGlzIG1vZHVsZSAqLworIAorIAlmb3IgKDsgYXJnYy0tID4gMDsgKythcmd2KSB7CisrCQlpbnQgc2w7CisgCisgCQlEKCgicGFtX3VuaXggYXJnOiAlcyIsICphcmd2KSk7CisgCisgCQlmb3IgKGogPSAwOyBqIDwgVU5JWF9DVFJMU187ICsraikgeworLQkJCWlmICh1bml4X2FyZ3Nbal0udG9rZW4KKy0JCQkgICAgJiYgIXN0cm5jbXAoKmFyZ3YsIHVuaXhfYXJnc1tqXS50b2tlbiwgc3RybGVuKHVuaXhfYXJnc1tqXS50b2tlbikpKSB7CistCQkJCWJyZWFrOworKwkJCWlmICh1bml4X2FyZ3Nbal0udG9rZW4pIHsKKysJCQkJc2wgPSBzdHJsZW4odW5peF9hcmdzW2pdLnRva2VuKTsKKysJCQkJaWYgKHVuaXhfYXJnc1tqXS50b2tlbltzbC0xXSA9PSAnPScpIHsKKysJCQkJCS8qIGV4Y2x1ZGUgYXJndW1lbnQgZnJvbSBjb21wYXJpc29uICovCisrCQkJCQlpZiAoIXN0cm5jbXAoKmFyZ3YsIHVuaXhfYXJnc1tqXS50b2tlbiwgc2wpKQorKwkJCQkJCWJyZWFrOworKwkJCQl9IGVsc2UgeworKwkJCQkvKiBjb21wYXJlIGZ1bGwgc3RyaW5ncyAqLworKwkJCQkJaWYgKCFzdHJjbXAoKmFyZ3YsIHVuaXhfYXJnc1tqXS50b2tlbikpCisrCQkJCQkJYnJlYWs7CisrCQkJCX0KKyAJCQl9CisgCQl9CisgCitAQCAtNTY2LDYgKzU3NSw3IEBAIHN0YXRpYyBpbnQgX3VuaXhfcnVuX2hlbHBlcl9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICpwYXNzd2QsCisgICAgIGlmIChjaGlsZCA9PSAwKSB7CisgCXN0YXRpYyBjaGFyICplbnZwW10gPSB7IE5VTEwgfTsKKyAJY29uc3QgY2hhciAqYXJnc1tdID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisrCWludCBudWxsb2sgPSBvZmYoVU5JWF9fTk9OVUxMLCBjdHJsKTsKKyAKKyAJLyogWFhYIC0gc2hvdWxkIHJlYWxseSB0aWR5IHVwIFBBTSBoZXJlIHRvbyAqLworIAorQEAgLTU5Myw3ICs2MDMsMTYgQEAgc3RhdGljIGludCBfdW5peF9ydW5faGVscGVyX2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsIGNvbnN0IGNoYXIgKnBhc3N3ZCwKKyAJLyogZXhlYyBiaW5hcnkgaGVscGVyICovCisgCWFyZ3NbMF0gPSBDSEtQV0RfSEVMUEVSOworIAlhcmdzWzFdID0gdXNlcjsKKy0JaWYgKG9mZihVTklYX19OT05VTEwsIGN0cmwpKSB7CS8qIHRoaXMgbWVhbnMgd2UndmUgc3VjY2VlZGVkICovCisrCWlmIChvbihVTklYX05VTExPS19TRUNVUkUsIGN0cmwpKSB7CisrCQljb25zdCB2b2lkICp1dHR5bmFtZTsKKysJCXJldHZhbCA9IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fVFRZLCAmdXR0eW5hbWUpOworKwkJaWYgKHJldHZhbCAhPSBQQU1fU1VDQ0VTUyB8fCB1dHR5bmFtZSA9PSBOVUxMCisrCQkJfHwgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShwYW1oLCAoY29uc3QgY2hhciAqKXV0dHluYW1lKSAhPSBQQU1fU1VDQ0VTUykgeworKwkJCW51bGxvayA9IDA7CisrCQl9CisrCX0KKysKKysJaWYgKG51bGxvaykgeworIAkgIGFyZ3NbMl09Im51bGxvayI7CisgCX0gZWxzZSB7CisgCSAgYXJnc1syXT0ibm9udWxsIjsKK0BAIC02NzgsNiArNjk3LDE3IEBAIF91bml4X2JsYW5rcGFzc3dkIChwYW1faGFuZGxlX3QgKnBhbWgsIHVuc2lnbmVkIGludCBjdHJsLCBjb25zdCBjaGFyICpuYW1lKQorIAlpZiAob24oVU5JWF9fTk9OVUxMLCBjdHJsKSkKKyAJCXJldHVybiAwOwkvKiB3aWxsIGZhaWwgYnV0IGRvbid0IGxldCBvbiB5ZXQgKi8KKyAKKysJaWYgKG9uKFVOSVhfTlVMTE9LX1NFQ1VSRSwgY3RybCkpIHsKKysJCWludCByZXR2YWwyOworKwkJY29uc3Qgdm9pZCAqdXR0eW5hbWU7CisrCQlyZXR2YWwyID0gcGFtX2dldF9pdGVtKHBhbWgsIFBBTV9UVFksICZ1dHR5bmFtZSk7CisrCQlpZiAocmV0dmFsMiAhPSBQQU1fU1VDQ0VTUyB8fCB1dHR5bmFtZSA9PSBOVUxMKQorKwkJCXJldHVybiAwOworKworKwkJaWYgKF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgKGNvbnN0IGNoYXIgKil1dHR5bmFtZSkgIT0gUEFNX1NVQ0NFU1MpCisrCQkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogVU5JWCBwYXNzd29yZHMgYXJlYSAqLworIAorIAlyZXR2YWwgPSBnZXRfcHdkX2hhc2gocGFtaCwgbmFtZSwgJnB3ZCwgJnNhbHQpOworQEAgLTc2NCw3ICs3OTQsNyBAQCBpbnQgX3VuaXhfdmVyaWZ5X3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgsIGNvbnN0IGNoYXIgKm5hbWUKKyAJCQl9CisgCQl9CisgCX0gZWxzZSB7CistCQlyZXR2YWwgPSB2ZXJpZnlfcHdkX2hhc2gocCwgc2FsdCwgb2ZmKFVOSVhfX05PTlVMTCwgY3RybCkpOworKwkJcmV0dmFsID0gdmVyaWZ5X3B3ZF9oYXNoKHAsIHNhbHQsIF91bml4X2JsYW5rcGFzc3dkKHBhbWgsIGN0cmwsIG5hbWUpKTsKKyAJfQorIAorIAlpZiAocmV0dmFsID09IFBBTV9TVUNDRVNTKSB7CitkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmggYi9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaAoraW5kZXggMzcyOWNlMC4uNDNjZGJlYSAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oCisrKysgYi9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaAorQEAgLTk5LDggKzk5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeworICNkZWZpbmUgVU5JWF9NSU5fUEFTU19MRU4gICAgICAgIDI3CS8qIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkICovCisgI2RlZmluZSBVTklYX1FVSUVUCQkgMjgJLyogRG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLworICNkZWZpbmUgVU5JWF9ERVMgICAgICAgICAgICAgICAgIDI5ICAgICAvKiBERVMsIGRlZmF1bHQgKi8KKysjZGVmaW5lIFVOSVhfTlVMTE9LX1NFQ1VSRSAgICAgICAzMCAgICAgLyogTlVMTCBwYXNzd29yZHMgYWxsb3dlZCBvbmx5IG9uIHNlY3VyZSB0dHlzICovCisgLyogLS0tLS0tLS0tLS0tLS0gKi8KKy0jZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMAkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLworKyNkZWZpbmUgVU5JWF9DVFJMU18gICAgICAgICAgICAgIDMxCS8qIG51bWJlciBvZiBjdHJsIGFyZ3VtZW50cyBkZWZpbmVkICovCisgCisgI2RlZmluZSBVTklYX0RFU19DUllQVChjdHJsKQkob2ZmKFVOSVhfTUQ1X1BBU1MsY3RybCkmJm9mZihVTklYX0JJR0NSWVBULGN0cmwpJiZvZmYoVU5JWF9TSEEyNTZfUEFTUyxjdHJsKSYmb2ZmKFVOSVhfU0hBNTEyX1BBU1MsY3RybCkmJm9mZihVTklYX0JMT1dGSVNIX1BBU1MsY3RybCkpCisgCitAQCAtMTE4LDcgKzExOSw3IEBAIHN0YXRpYyBjb25zdCBVTklYX0N0cmxzIHVuaXhfYXJnc1tVTklYX0NUUkxTX10gPQorIC8qIFVOSVhfTk9UX1NFVF9QQVNTICovICAgIHsibm90X3NldF9wYXNzIiwgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgIDAxMDAsIDB9LAorIC8qIFVOSVhfX1BSRUxJTSAqLyAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl9eKDA2MDApLCAgICAgICAgIDAyMDAsIDB9LAorIC8qIFVOSVhfX1VQREFURSAqLyAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl9eKDA2MDApLCAgICAgICAgIDA0MDAsIDB9LAorLS8qIFVOSVhfX05PTlVMTCAqLyAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDEwMDAsIDB9LAorKy8qIFVOSVhfX05PTlVMTCAqLyAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl9eKDAyMDAwMDAwMDAwKSwgICAwMTAwMCwgMH0sCisgLyogVU5JWF9fUVVJRVQgKi8gICAgICAgICAge05VTEwsICAgICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAgICAgICAwMjAwMCwgMH0sCisgLyogVU5JWF9VU0VfQVVUSFRPSyAqLyAgICAgeyJ1c2VfYXV0aHRvayIsICAgICBfQUxMX09OXywgICAgICAgICAgICAgICAwNDAwMCwgMH0sCisgLyogVU5JWF9TSEFET1cgKi8gICAgICAgICAgeyJzaGFkb3ciLCAgICAgICAgICBfQUxMX09OXywgICAgICAgICAgICAgIDAxMDAwMCwgMH0sCitAQCAtMTM5LDYgKzE0MCw3IEBAIHN0YXRpYyBjb25zdCBVTklYX0N0cmxzIHVuaXhfYXJnc1tVTklYX0NUUkxTX10gPQorIC8qIFVOSVhfTUlOX1BBU1NfTEVOICovICAgIHsibWlubGVuPSIsCQlfQUxMX09OXywgICAgICAgICAwNDAwMDAwMDAwLCAwfSwKKyAvKiBVTklYX1FVSUVUICovICAgICAgICAgICB7InF1aWV0IiwgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgIDAxMDAwMDAwMDAwLCAwfSwKKyAvKiBVTklYX0RFUyAqLyAgICAgICAgICAgICB7ImRlcyIsICAgICAgICAgICAgIF9BTExfT05fXigwMjYwNDIwMDAwKSwgICAgICAwLCAxfSwKKysvKiBVTklYX05VTExPS19TRUNVUkUgKi8gICB7Im51bGxva19zZWN1cmUiLCAgIF9BTExfT05fXigwMTAwMCksICAwMjAwMDAwMDAwMCwgMH0sCisgfTsKKyAKKyAjZGVmaW5lIFVOSVhfREVGQVVMVFMgICh1bml4X2FyZ3NbVU5JWF9fTk9OVUxMXS5mbGFnKQorQEAgLTE3MSw2ICsxNzMsOCBAQCBleHRlcm4gaW50IF91bml4X3JlYWRfcGFzc3dvcmQocGFtX2hhbmRsZV90ICogcGFtaAorIAkJCSxjb25zdCBjaGFyICpwcm9tcHQyCisgCQkJLGNvbnN0IGNoYXIgKmRhdGFfbmFtZQorIAkJCSxjb25zdCB2b2lkICoqcGFzcyk7CisrZXh0ZXJuIGludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwKKysgICAgICAgICBjb25zdCBjaGFyICp1dHR5bmFtZSk7CisgCisgZXh0ZXJuIGludCBfdW5peF9ydW5fdmVyaWZ5X2JpbmFyeShwYW1faGFuZGxlX3QgKnBhbWgsCisgCQkJdW5zaWduZWQgaW50IGN0cmwsIGNvbnN0IGNoYXIgKnVzZXIsIGludCAqZGF5c2xlZnQpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYWNjb3VudCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hY2NvdW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNmIxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYWNjb3VudApAQCAtMCwwICsxLDI1IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLWFjY291bnQgLSBhdXRob3JpemF0aW9uIHNldHRpbmdzIGNvbW1vbiB0byBhbGwgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBhdXRob3JpemF0aW9uIG1vZHVsZXMgdGhhdCBkZWZpbmUKKyMgdGhlIGNlbnRyYWwgYWNjZXNzIHBvbGljeSBmb3IgdXNlIG9uIHRoZSBzeXN0ZW0uICBUaGUgZGVmYXVsdCBpcyB0bworIyBvbmx5IGRlbnkgc2VydmljZSB0byB1c2VycyB3aG9zZSBhY2NvdW50cyBhcmUgZXhwaXJlZCBpbiAvZXRjL3NoYWRvdy4KKyMKKyMgQXMgb2YgcGFtIDEuMC4xLTYsIHRoaXMgZmlsZSBpcyBtYW5hZ2VkIGJ5IHBhbS1hdXRoLXVwZGF0ZSBieSBkZWZhdWx0LgorIyBUbyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb25maWd1cmUgYW55CisjIGxvY2FsIG1vZHVsZXMgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgZGVmYXVsdCBibG9jaywgYW5kIHVzZQorIyBwYW0tYXV0aC11cGRhdGUgdG8gbWFuYWdlIHNlbGVjdGlvbiBvZiBvdGhlciBtb2R1bGVzLiAgU2VlCisjIHBhbS1hdXRoLXVwZGF0ZSg4KSBmb3IgZGV0YWlscy4KKyMKKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK2FjY291bnQJW3N1Y2Nlc3M9MSBuZXdfYXV0aHRva19yZXFkPWRvbmUgZGVmYXVsdD1pZ25vcmVdCXBhbV91bml4LnNvIAorIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworYWNjb3VudAlyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK2FjY291bnQJcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCisjIGVuZCBvZiBwYW0tYXV0aC11cGRhdGUgY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYXV0aCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1hdXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MGI2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYXV0aApAQCAtMCwwICsxLDE4IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLWF1dGggLSBhdXRoZW50aWNhdGlvbiBzZXR0aW5ncyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiB0aGUgYXV0aGVudGljYXRpb24gbW9kdWxlcyB0aGF0IGRlZmluZQorIyB0aGUgY2VudHJhbCBhdXRoZW50aWNhdGlvbiBzY2hlbWUgZm9yIHVzZSBvbiB0aGUgc3lzdGVtCisjIChlLmcuLCAvZXRjL3NoYWRvdywgTERBUCwgS2VyYmVyb3MsIGV0Yy4pLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZQorIyB0cmFkaXRpb25hbCBVbml4IGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCithdXRoCVtzdWNjZXNzPTEgZGVmYXVsdD1pZ25vcmVdCXBhbV91bml4LnNvIG51bGxva19zZWN1cmUKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK2F1dGgJcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCithdXRoCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTYwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tcGFzc3dvcmQKQEAgLTAsMCArMSwyNiBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1wYXNzd29yZCAtIHBhc3N3b3JkLXJlbGF0ZWQgbW9kdWxlcyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgZGVmaW5lIHRoZSBzZXJ2aWNlcyB0byBiZQorIyB1c2VkIHRvIGNoYW5nZSB1c2VyIHBhc3N3b3Jkcy4gIFRoZSBkZWZhdWx0IGlzIHBhbV91bml4LgorCisjIEV4cGxhbmF0aW9uIG9mIHBhbV91bml4IG9wdGlvbnM6CisjCisjIFRoZSAic2hhNTEyIiBvcHRpb24gZW5hYmxlcyBzYWx0ZWQgU0hBNTEyIHBhc3N3b3Jkcy4gIFdpdGhvdXQgdGhpcyBvcHRpb24sCisjIHRoZSBkZWZhdWx0IGlzIFVuaXggY3J5cHQuICBQcmlvciByZWxlYXNlcyB1c2VkIHRoZSBvcHRpb24gIm1kNSIuCisjCisjIFRoZSAib2JzY3VyZSIgb3B0aW9uIHJlcGxhY2VzIHRoZSBvbGQgYE9CU0NVUkVfQ0hFQ0tTX0VOQUInIG9wdGlvbiBpbgorIyBsb2dpbi5kZWZzLgorIworIyBTZWUgdGhlIHBhbV91bml4IG1hbnBhZ2UgZm9yIG90aGVyIG9wdGlvbnMuCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCitwYXNzd29yZAlbc3VjY2Vzcz0xIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyBvYnNjdXJlIHNoYTUxMgorIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworcGFzc3dvcmQJcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCitwYXNzd29yZAlyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhNTUxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tc2Vzc2lvbiAtIHNlc3Npb24tcmVsYXRlZCBtb2R1bGVzIGNvbW1vbiB0byBhbGwgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBkZWZpbmUgdGFza3MgdG8gYmUgcGVyZm9ybWVkCisjIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHNlc3Npb25zIG9mICphbnkqIGtpbmQgKGJvdGggaW50ZXJhY3RpdmUgYW5kCisjIG5vbi1pbnRlcmFjdGl2ZSkuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCitzZXNzaW9uCVtkZWZhdWx0PTFdCQkJcGFtX3Blcm1pdC5zbworIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworc2Vzc2lvbglyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK3Nlc3Npb24JcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCitzZXNzaW9uCXJlcXVpcmVkCXBhbV91bml4LnNvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTBiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZQpAQCAtMCwwICsxLDE5IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgLSBzZXNzaW9uLXJlbGF0ZWQgbW9kdWxlcworIyBjb21tb24gdG8gYWxsIG5vbi1pbnRlcmFjdGl2ZSBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGRlZmluZSB0YXNrcyB0byBiZSBwZXJmb3JtZWQKKyMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgYWxsIG5vbi1pbnRlcmFjdGl2ZSBzZXNzaW9ucy4KKyMKKworIyBoZXJlIGFyZSB0aGUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJQcmltYXJ5IiBibG9jaykKK3Nlc3Npb24JW2RlZmF1bHQ9MV0JCQlwYW1fcGVybWl0LnNvCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCitzZXNzaW9uCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorc2Vzc2lvbglyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKK3Nlc3Npb24JcmVxdWlyZWQJcGFtX3VuaXguc28gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9vdGhlciBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL290aGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTcwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9vdGhlcgpAQCAtMCwwICsxLDI0IEBACisjCisjIC9ldGMvcGFtLmQvb3RoZXIgLSBzcGVjaWZ5IHRoZSBQQU0gZmFsbGJhY2sgYmVoYXZpb3VyCisjCisjIE5vdGUgdGhhdCB0aGlzIGZpbGUgaXMgdXNlZCBmb3IgYW55IHVuc3BlY2lmaWVkIHNlcnZpY2U7IGZvciBleGFtcGxlCisjaWYgL2V0Yy9wYW0uZC9jcm9uICBzcGVjaWZpZXMgbm8gc2Vzc2lvbiBtb2R1bGVzIGJ1dCBjcm9uIGNhbGxzCisjcGFtX29wZW5fc2Vzc2lvbiwgdGhlIHNlc3Npb24gbW9kdWxlIG91dCBvZiAvZXRjL3BhbS5kL290aGVyIGlzCisjdXNlZC4gIAorCisjIFdlIHVzZSBwYW1fd2Fybi5zbyB0byBnZW5lcmF0ZSBzeXNsb2cgbm90ZXMgdGhhdCB0aGUgJ290aGVyJworI2ZhbGxiYWNrIHJ1bGVzIGFyZSBiZWluZyB1c2VkIChhcyBhIGhpbnQgdG8gc3VnZ2VzdCB5b3Ugc2hvdWxkIHNldHVwCisjc3BlY2lmaWMgUEFNIHJ1bGVzIGZvciB0aGUgc2VydmljZSBhbmQgYWlkIHRvIGRlYnVnZ2luZykuIFRoZW4gdG8gYmUKKyNzZWN1cmUsIGRlbnkgYWNjZXNzIHRvIGFsbCBzZXJ2aWNlcyBieSBkZWZhdWx0LiAKKworYXV0aCAgICAgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK2F1dGggICAgICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCisKK2FjY291bnQgICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbworCitwYXNzd29yZCAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworcGFzc3dvcmQgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KKworc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzA5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYgpAQCAtMCwwICsxLDE2OSBAQAorU1VNTUFSWSA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzKSIKK0RFU0NSSVBUSU9OID0gIkxpbnV4LVBBTSAoUGx1Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZXMgZm9yIExpbnV4KSwgYSBmbGV4aWJsZSBtZWNoYW5pc20gZm9yIGF1dGhlbnRpY2F0aW5nIHVzZXJzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpbnV4LXBhbS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vbmV3dGlja2V0IgorU0VDVElPTiA9ICJiYXNlIgorIyBQQU0gaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBHUEwgYW5kIEJTRC4KKyMgL2V0Yy9wYW0uZCBjb21lcyBmcm9tIERlYmlhbiBsaWJwYW0tcnVudGltZSBpbiAyMDA5LTExIChhdCB0aGF0IHRpbWUKKyMgbGlicGFtLXJ1bnRpbWUtMS4wLjEgaXMgR1BMdjIrKSwgYnkgb3BlbmVtYmVkZGVkCitMSUNFTlNFID0gIkdQTHYyKyB8IEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdlYjVjMWJmODU0ZTg4ODEwMDVkNjczNTk5ZWU3NGQzIgorCitTUkNfVVJJID0gImh0dHA6Ly9saW51eC1wYW0ub3JnL2xpYnJhcnkvTGludXgtUEFNLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vOTlfcGFtIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1hY2NvdW50IFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1hdXRoIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS5kL2NvbW1vbi1wYXNzd29yZCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tc2Vzc2lvbiBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZSBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9vdGhlciBcCisgICAgICAgICAgIGZpbGU6Ly9saWJwYW0teHRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS1zZWN1cml0eS1hYnN0cmFjdC1zZWN1cmV0dHktaGFuZGxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3J5cHRfY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZGM1MzA2NzU1NmQyZGQ1Njc4MDhmZDUwOTUxOWRkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzNDJiMTIxMWMwZDNiMjAzYTdkZjI1NDBhNWIwM2E0MjhhMDg3YmQ4YTQ4YzE3ZTQ5YWUyNjhmOTkyYjMzNGQ5IgorCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3BhbS1uby1pbm5ldGdyLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vcGFtLW5vLWlubmV0Z3IucGF0Y2giCisKK0RFUEVORFMgPSAiYmlzb24gZmxleCBmbGV4LW5hdGl2ZSBjcmFja2xpYiIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1kYi11bmlxdWVuYW1lPV9wYW0gXAorICAgICAgICAgICAgICAgIC0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9L3NlY3VyaXR5IFwKKyAgICAgICAgICAgICAgICAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5pcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlZ2VuZXJhdGUtZG9jdSBcCisJCS0tZGlzYWJsZS1wcmVsdWRlIgorCitDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCisKK1BSID0gInI1IgorCitTID0gIiR7V09SS0RJUn0vTGludXgtUEFNLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHW2F1ZGl0XSA9ICItLWVuYWJsZS1hdWRpdCwtLWRpc2FibGUtYXVkaXQsYXVkaXQsIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcnVudGltZSAke1BOfS14dGVzdHMiCitGSUxFU18ke1BOfSA9ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fZmlsdGVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vTGludXgtUEFNL3h0ZXN0cy8uZGVidWciCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSAke2Jhc2VfbGliZGlyfS8qLmxhICR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1ydW50aW1lID0gIiR7c3lzY29uZmRpcn0iCitGSUxFU18ke1BOfS14dGVzdHMgPSAiJHtkYXRhZGlyfS9MaW51eC1QQU0veHRlc3RzIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtNTFBSRUZJWH1wYW0tcGx1Z2luLS4qIgorCitkZWYgZ2V0X211bHRpbGliX2JpdChkKToKKyAgICBiYXNlbGliID0gZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKSBvciAnJworICAgIHJldHVybiBiYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKQorCitsaWJwYW1fc3VmZml4ID0gInN1ZmZpeCR7QGdldF9tdWx0aWxpYl9iaXQoZCl9IgorCitSUFJPVklERVNfJHtQTn0gKz0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0iCitSUFJPVklERVNfJHtQTn0tcnVudGltZSArPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgorCitSREVQRU5EU18ke1BOfS1ydW50aW1lID0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZW55LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1wZXJtaXQtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXdhcm4tJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXVuaXgtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgIgorUkRFUEVORFNfJHtQTn0teHRlc3RzID0gIiR7UE59LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1hY2Nlc3MtJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLWRlYnVnLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1jcmFja2xpYi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcHdoaXN0b3J5LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1zdWNjZWVkLWlmLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi10aW1lLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgIGNvcmV1dGlscyIKKworIyBGSVhNRTogTmF0aXZlIHN1ZmZpeCBicmVha3MgaGVyZSwgZGlzYWJsZSBpdCBmb3Igbm93CitSUkVDT01NRU5EU18ke1BOfSA9ICIke1BOfS1ydW50aW1lLSR7bGlicGFtX3N1ZmZpeH0iCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZGVmIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUocG4sIGRpciwgZmlsZSk6CisgICAgICAgIG5mID0gb3MucGF0aC5qb2luKGRpciwgZmlsZSkKKyAgICAgICAgb2YgPSBkLmdldFZhcignRklMRVNfJyArIHBuLCBUcnVlKQorICAgICAgICBpZiBvZjoKKyAgICAgICAgICAgIG5mID0gb2YgKyAiICIgKyBuZgorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBuLCBuZikKKworICAgIGRlZiBwYW1fcGx1Z2luX2hvb2soZmlsZSwgcGtnLCBwYXR0ZXJuLCBmb3JtYXQsIGJhc2VuYW1lKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBsaWJwYW1fc3VmZml4ID0gZC5nZXRWYXIoJ2xpYnBhbV9zdWZmaXgnLCBUcnVlKQorCisgICAgICAgIHJkZXBzID0gZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpCisgICAgICAgIGlmIHJkZXBzOgorICAgICAgICAgICAgcmRlcHMgPSByZGVwcyArICIgIiArIHBuICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmRlcHMgPSBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIHJkZXBzKQorCisgICAgICAgIHByb3ZpZGVzID0gZC5nZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiBwcm92aWRlczoKKyAgICAgICAgICAgIHByb3ZpZGVzID0gcHJvdmlkZXMgKyAiICIgKyBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm92aWRlcyA9IHBrZyArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZC5zZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBwcm92aWRlcykKKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICBkdmFyID0gYmIuZGF0YS5leHBhbmQoJyR7V09SS0RJUn0vcGFja2FnZScsIGQsIFRydWUpCisgICAgcGFtX2xpYmRpciA9IGQuZXhwYW5kKCcke2Jhc2VfbGliZGlyfS9zZWN1cml0eScpCisgICAgcGFtX3NiaW5kaXIgPSBkLmV4cGFuZCgnJHtzYmluZGlyfScpCisgICAgcGFtX2ZpbHRlcmRpciA9IGQuZXhwYW5kKCcke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fZmlsdGVyJykKKyAgICBwYW1fcGtnbmFtZSA9IG1scHJlZml4ICsgJ3BhbS1wbHVnaW4lcycKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9saWJkaXIsICdecGFtKC4qKVwuc28kJywgcGFtX3BrZ25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgJ1BBTSBwbHVnaW4gZm9yICVzJywgaG9vaz1wYW1fcGx1Z2luX2hvb2ssIGV4dHJhX2RlcGVuZHM9JycpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXVuaXgnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAndW5peF9jaGtwd2QnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfdXBkYXRlJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGFsbHknICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RhbGx5JykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGFsbHkyJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseTInKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi10aW1lc3RhbXAnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX3RpbWVzdGFtcF9jaGVjaycpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLW1raG9tZWRpcicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdta2hvbWVkaXJfaGVscGVyJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tY29uc29sZScgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fY29uc29sZV9hcHBseScpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGFtX2ZpbHRlcmRpciwgJ14oLiopJCcsICdwYW0tZmlsdGVyLSVzJywgJ1BBTSBmaWx0ZXIgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykKK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfcGFtICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BhbS5kLyogJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisKKwkjIFRoZSBsc2IgcmVxdWlyZXMgdW5peF9jaGtwd2QgaGFzIHNldHVpZCBwZXJtaXNzaW9uCisJY2htb2QgNDc1NSAke0R9JHtzYmluZGlyfS91bml4X2Noa3B3ZAorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQllY2hvICJzZXNzaW9uIG9wdGlvbmFsIHBhbV9zeXN0ZW1kLnNvIiA+PiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbgorCWZpCit9CisKK3B5dGhvbiBkb19wYW1fc2FuaXR5ICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGJiLndhcm4oIkJ1aWxkaW5nIGxpYnBhbSBidXQgJ3BhbScgaXNuJ3QgaW4gRElTVFJPX0ZFQVRVUkVTLCBQQU0gd29uJ3Qgd29yayBjb3JyZWN0bHkiKQorfQorYWRkdGFzayBwYW1fc2FuaXR5IGJlZm9yZSBkb19jb25maWd1cmUKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsgbmF0aXZlIgorCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tc2Vzc2lvbiIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1hdXRoIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXBhc3N3b3JkIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUiCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYWNjb3VudCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzNzZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gZDc4ZGQwODdjNGVjNDcxNWFhYjVmZTExNTY2OGU3MjYwNDZlY2Q3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE4OjE2OjA1IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgZmNudGwuaCBpbiAvcGxhdGZvcm1fZGVmcy5oCisKK2V4cG9zZWQgd2hlbiBjb21waWxpbmcgdXNpbmcgbXVzbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaCBiL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oCitpbmRleCAyYjU1NzUyLi4zMmJkM2QzIDEwMDY0NAorLS0tIGEvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmgKKysrKyBiL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oCitAQCAtNDIsNiArNDIsNyBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvTWFrZWZpbGUgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTBiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMjg1IEBACithbV9fdHR5X2NvbG9yc19kdW1teSA9IFwKKyAgbWduPSByZWQ9IGdybj0gbGduPSBibHU9IGJyZz0gc3RkPTsgXAorICBhbV9fY29sb3JfdGVzdHM9bm8KKworYW1fX3R0eV9jb2xvcnMgPSBcCiskKGFtX190dHlfY29sb3JzX2R1bW15KTsgXAordGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiAhPSBYbm8gXAorJiYgdGVzdCAiWCQkVEVSTSIgIT0gWGR1bWIgXAorJiYgeyB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWGFsd2F5cyB8fCB0ZXN0IC10IDEgMj4vZGV2L251bGw7IH0gXAorJiYgeyBcCisgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgcmVkPScbWzA7MzFtJzsgXAorICBncm49JxtbMDszMm0nOyBcCisgIGxnbj0nG1sxOzMybSc7IFwKKyAgYmx1PScbWzE7MzRtJzsgXAorICBtZ249JxtbMDszNW0nOyBcCisgIGJyZz0nG1sxbSc7IFwKKyAgc3RkPScbW20nOyBcCit9CisKK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3JzdF90aXRsZSA9IHsgc2VkICdzLy4qLyAgICYgICAvO2g7cy8uLz0vZztwO3g7cy8gKiQkLy87cDtnJyAmJiBlY2hvOyB9CithbV9fcnN0X3NlY3Rpb24gPSB7IHNlZCAncDtzLy4vPS9nOycgJiYgZWNobzsgfQorYW1fX3NoX2Vfc2V0dXAgPSBjYXNlICQkLSBpbiAqZSopIHNldCArZTs7IGVzYWMKKworYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MgPSBcCisgIC0tY29sb3ItdGVzdHMgIiQkYW1fX2NvbG9yX3Rlc3RzIiBcCisgIC0tZW5hYmxlLWhhcmQtZXJyb3JzICIkJGFtX19lbmFibGVfaGFyZF9lcnJvcnMiIFwKKyAgLS1leHBlY3QtZmFpbHVyZSAiJCRhbV9fZXhwZWN0X2ZhaWx1cmUiCithbV9fY2hlY2tfcHJlID0gXAorJChhbV9fc2hfZV9zZXR1cCk7CQkJCQlcCiskKGFtX192cGF0aF9hZGpfc2V0dXApICQoYW1fX3ZwYXRoX2FkaikJCQlcCiskKGFtX190dHlfY29sb3JzKTsJCQkJCVwKK3NyY2Rpcj0kKHNyY2Rpcik7IGV4cG9ydCBzcmNkaXI7CQkJXAorYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDsJCVwKK3Rlc3QgIngkJGFtX19vZGlyIiA9IHguIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OwlcCitpZiB0ZXN0IC1mICIuLyQkZiI7IHRoZW4gZGlyPS4vOwkJCVwKK2VsaWYgdGVzdCAtZiAiJCRmIjsgdGhlbiBkaXI9OwkJCQlcCitlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOwkJCQlcCit0c3Q9JCRkaXIkJGY7IGxvZz0nJEAnOyAJCQkJXAoraWYgdGVzdCAtbiAnJChESVNBQkxFX0hBUkRfRVJST1JTKSc7IHRoZW4JCVwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz1ubzsgCQkJCVwKK2Vsc2UJCQkJCQkJXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPXllczsgCQkJCVwKK2ZpOyAJCQkJCQkJXAorJChBTV9URVNUU19FTlZJUk9OTUVOVCkgJChURVNUU19FTlZJUk9OTUVOVCkKKworYW1fX3NldF9URVNUU19iYXNlcyA9IFwKKyAgYmFzZXM9JyQoVEVTVF9MT0dTKSc7IFwKKyAgYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpOyBkb25lIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgIGJhc2VzPWBlY2hvICQkYmFzZXNgCisKK1JFQ0hFQ0tfTE9HUyA9ICQoVEVTVF9MT0dTKQorVEVTVF9TVUlURV9MT0cgPSB0ZXN0LXN1aXRlLmxvZworYW1fX3Rlc3RfbG9nczEgPSAkKFRFU1RTOj0ubG9nKQorYW1fX3Rlc3RfbG9nczIgPSAkKGFtX190ZXN0X2xvZ3MxOi5sb2c9LmxvZykKK1RFU1RfTE9HUyA9ICQoYW1fX3Rlc3RfbG9nczI6LnNoLmxvZz0ubG9nKQorU0hfTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3Rlc3QtZHJpdmVyCitTSF9MT0dfQ09NUElMRSA9ICQoU0hfTE9HX0NPTVBJTEVSKQorCithbV9fc2V0X2IgPSBcCisgIGNhc2UgJyRAJyBpbiBcCisgICAgKi8qKSBcCisgICAgICBjYXNlICckKicgaW4gXAorICAgICAgICAqLyopIGI9JyQqJzs7IFwKKyAgICAgICAgICAqKSBiPWBlY2hvICckQCcgfCBzZWQgJ3MvXC5sb2ckJC8vJ2A7IFwKKyAgICAgICBlc2FjOzsgXAorICAgICopIFwKKyAgICAgIGI9JyQqJzs7IFwKKyAgZXNhYworCitNS0RJUl9QID0gL2Jpbi9ta2RpciAtcAorU0hFTEwgPSAvYmluL2Jhc2gKK1ZFUlNJT04gPSAzLjEKK1BBQ0tBR0VfU1RSSU5HID0gR05VIHBhcnRlZCAzLjEKK1BBQ0tBR0VfQlVHUkVQT1JUID0gYnVnLXBhcnRlZEBnbnUub3JnCithYnNfc3JjZGlyID0gJChQV0QpCithYnNfdG9wX2J1aWxkZGlyID0gJChQV0QpLy4uCithYnNfdG9wX3NyY2RpciA9ICQoUFdEKS8uLgorc3JjZGlyID0gLgordG9wX3NyY2RpciA9IC4uCitzdWJkaXIgPSB0ZXN0cworU0hfTE9HX0NPTVBJTEVSID0gJChTSEVMTCkKKworVEVTVFMgPSBcCisgIGhlbHAtdmVyc2lvbi5zaCBcCisgIHQwMDAwLWJhc2ljLnNoIFwKKyAgdDAwMDEtdGlueS5zaCBcCisgIHQwMDEwLXNjcmlwdC1uby1jdHJsLWNoYXJzLnNoIFwKKyAgdDAxMDAtcHJpbnQuc2ggXAorICB0MDEwMS1wcmludC1lbXB0eS5zaCBcCisgIHQwMjAwLWdwdC5zaCBcCisgIHQwMjAxLWdwdC5zaCBcCisgIHQwMjAyLWdwdC1wbWJyLnNoIFwKKyAgdDAyMDMtZ3B0LXRpbnktZGV2aWNlLWFib3J0LnNoIFwKKyAgdDAyMDMtZ3B0LXNob3J0ZW5lZC1kZXZpY2UtcHJpbWFyeS12YWxpZC5zaCBcCisgIHQwMjA1LWdwdC1saXN0LWNsb2JiZXJzLXBtYnIuc2ggXAorICB0MDIwNi1ncHQtcHJpbnQtd2l0aC1jb3JydXB0LXByaW1hcnktY2xvYmJlcnMtcG1ici5zaCBcCisgIHQwMjA3LUlFQy1iaW5hcnktbm90YXRpb24uc2ggXAorICB0MDIwOC1ta3BhcnQtZW5kLWluLUlFQy5zaCBcCisgIHQwMjA5LWdwdC1wbWJyX2Jvb3Quc2ggXAorICB0MDIxMC1ncHQtcmVzaXplZC1wYXJ0aXRpb24tZW50cnktYXJyYXkuc2ggXAorICB0MDIxMS1ncHQtcmV3cml0ZS1oZWFkZXIuc2ggXAorICB0MDIxMi1ncHQtbWFueS1wYXJ0aXRpb25zLnNoIFwKKyAgdDAyMjAtZ3B0LW1zZnRyZXMuc2ggXAorICB0MDI1MC1ncHQuc2ggXAorICB0MDI4MC1ncHQtY29ycnVwdC5zaCBcCisgIHQwMzAwLWRvcy1vbi1ncHQuc2ggXAorICB0MDQwMC1sb29wLWNsb2JiZXItaW5mbG9vcC5zaCBcCisgIHQwNTAwLWR1cC1jbG9iYmVyLnNoIFwKKyAgdDA1MDEtZHVwbGljYXRlLnNoIFwKKyAgdDExMDAtYnVzeS1sYWJlbC5zaCBcCisgIHQxMTAxLWJ1c3ktcGFydGl0aW9uLnNoIFwKKyAgdDE3MDAtcHJvYmUtZnMuc2ggXAorICB0MjIwMC1kb3MtbGFiZWwtcmVjb2cuc2ggXAorICB0MjIwMS1wYzk4LWxhYmVsLXJlY29nLnNoIFwKKyAgdDIzMDAtZG9zLWxhYmVsLWV4dGVuZGVkLWJvb3Rjb2RlLnNoIFwKKyAgdDIzMTAtZG9zLWV4dGVuZGVkLTItc2VjdG9yLW1pbi1vZmZzZXQuc2ggXAorICB0MjQwMC1kb3MtaGZzLXBhcnRpdGlvbi10eXBlLnNoIFwKKyAgdDI1MDAtcHJvYmUtY29ycnVwdC1oZnMuc2ggXAorICB0MzAwMC1yZXNpemUtZnMuc2ggXAorICB0MzIwMC10eXBlLWNoYW5nZS5zaCBcCisgIHQzMzAwLXBhbG8tcHJlcC5zaCBcCisgIHQzMzEwLWZsYWdzLnNoIFwKKyAgdDM0MDAtd2hvbGUtZGlzay1GQVQtcGFydGl0aW9uLnNoIFwKKyAgdDQwMDAtc3VuLXJhaWQtdHlwZS5zaCBcCisgIHQ0MDAxLXN1bi12dG9jLnNoIFwKKyAgdDQxMDAtbXNkb3MtcGFydGl0aW9uLWxpbWl0cy5zaCBcCisgIHQ0MTAwLWR2aC1wYXJ0aXRpb24tbGltaXRzLnNoIFwKKyAgdDQxMDAtbXNkb3Mtc3RhcnRpbmctc2VjdG9yLnNoIFwKKyAgdDQyMDAtcGFydHByb2JlLnNoIFwKKyAgdDQzMDAtbmlsZnMyLXRpbnkuc2ggXAorICB0NTAwMC10YWdzLnNoIFwKKyAgdDYwMDAtZG0uc2ggXAorICB0NjAwMS1wc2VwLnNoIFwKKyAgdDYxMDAtbWRyYWlkLXBhcnRpdGlvbnMuc2ggXAorICB0NzAwMC1zY3JpcHRpbmcuc2ggXAorICB0ODAwMC1sb29wLnNoIFwKKyAgdDgwMDEtbG9vcC1ibGtwZy5zaCBcCisgIHQ5MDEwLWJpZy1zZWN0b3Iuc2ggXAorICB0OTAyMC1hbGlnbm1lbnQuc2ggXAorICB0OTAyMS1tYXhpbWEuc2ggXAorICB0OTAyMi1vbmUtdW5pdC1zbmFwLnNoIFwKKyAgdDkwMjMtdmFsdWUtbHQtb25lLnNoIFwKKyAgdDkwMzAtYWxpZ24tY2hlY2suc2ggXAorICB0OTA0MC1tYW55LXBhcnRpdGlvbnMuc2ggXAorICB0OTA0MS11bmRldGVjdGVkLWluLXVzZS0xNnRoLXBhcnRpdGlvbi5zaCBcCisgIHQ5MDQyLWRvcy1wYXJ0aXRpb24tbGltaXQuc2ggXAorICB0OTA1MC1wYXJ0aXRpb24tdGFibGUtdHlwZXMuc2gKKworVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgIGV4cG9ydAkJCQkJXAorICBhYnNfdG9wX2J1aWxkZGlyPSckKGFic190b3BfYnVpbGRkaXIpJwlcCisgIGFic190b3Bfc3JjZGlyPSckKGFic190b3Bfc3JjZGlyKScJCVwKKyAgYWJzX3NyY2Rpcj0nJChhYnNfc3JjZGlyKScJCQlcCisgIGJ1aWx0X3Byb2dyYW1zPXBhcnRlZAkJCQlcCisgIHNyY2Rpcj0nJChzcmNkaXIpJwkJCQlcCisgIHRvcF9zcmNkaXI9JyQodG9wX3NyY2RpciknCQkJXAorICBWRVJTSU9OPSQoVkVSU0lPTikJCQkJXAorICA7IDk+JjIKKworLlNVRkZJWEVTOiAubG9nCisKKyQoVEVTVF9TVUlURV9MT0cpOiAkKFRFU1RfTE9HUykKKwlAJChhbV9fc2hfZV9zZXR1cCk7ICQoYW1fX3R0eV9jb2xvcnMpOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJd3M9J1sgCV0nOyBcCisJcmVzdWx0cz1gZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGIudHJzOyBkb25lYDsgXAorCXRlc3QgLW4gIiQkcmVzdWx0cyIgfHwgcmVzdWx0cz0vZGV2L251bGw7IFwKKwlhbGw9YCAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiIgICAgICAgICAgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXBhc3M9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypQQVNTIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZmFpbD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkZBSUwiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlza2lwPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqU0tJUCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhmYWlsPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYRkFJTCIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeHBhc3M9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhQQVNTIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwllcnJvcj1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRVJST1IiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWlmIHRlc3QgYGV4cHIgJCRmYWlsICsgJCR4cGFzcyArICQkZXJyb3JgIC1lcSAwOyB0aGVuIFwKKwkgIHN1Y2Nlc3M9dHJ1ZTsgXAorCWVsc2UgXAorCSAgc3VjY2Vzcz1mYWxzZTsgXAorCWZpOyBcCisJYnI9Jz09PT09PT09PT09PT09PT09PT0nOyBicj0kJGJyJCRiciQkYnIkJGJyOyBcCisJcmVzdWx0X2NvdW50ICgpIFwKKwl7IFwKKwkgICAgaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbWF5YmUtY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT15ZXM7IFwKKwkgICAgZWxpZiB0ZXN0IHgiJCQxIiA9IHgiLS1uby1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPW5vOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGVjaG8gIiRAOiBpbnZhbGlkICdyZXN1bHRfY291bnQnIHVzYWdlIiA+JjI7IGV4aXQgNDsgXAorCSAgICBmaTsgXAorCSAgICBzaGlmdDsgXAorCSAgICBkZXNjPSQkMSBjb3VudD0kJDI7IFwKKwkgICAgaWYgdGVzdCAkJG1heWJlX2NvbG9yaXplID0geWVzICYmIHRlc3QgJCRjb3VudCAtZ3QgMDsgdGhlbiBcCisJICAgICAgY29sb3Jfc3RhcnQ9JCQzIGNvbG9yX2VuZD0kJHN0ZDsgXAorCSAgICBlbHNlIFwKKwkgICAgICBjb2xvcl9zdGFydD0gY29sb3JfZW5kPTsgXAorCSAgICBmaTsgXAorCSAgICBlY2hvICIkJHtjb2xvcl9zdGFydH0jICQkZGVzYyAkJGNvdW50JCR7Y29sb3JfZW5kfSI7IFwKKwl9OyBcCisJY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgKCkgXAorCXsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiVE9UQUw6IiAkJGFsbCAgICIkJGJyZyI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlBBU1M6ICIgJCRwYXNzICAiJCRncm4iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJTS0lQOiAiICQkc2tpcCAgIiQkYmx1IjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWEZBSUw6IiAkJHhmYWlsICIkJGxnbiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkZBSUw6ICIgJCRmYWlsICAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYUEFTUzoiICQkeHBhc3MgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRVJST1I6IiAkJGVycm9yICIkJG1nbiI7IFwKKwl9OyBcCisJewkJCQkJCQkJXAorCSAgZWNobyAiJChQQUNLQUdFX1NUUklORyk6ICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSIgfAlcCisJICAgICQoYW1fX3JzdF90aXRsZSk7CQkJCQkJXAorCSAgY3JlYXRlX3Rlc3RzdWl0ZV9yZXBvcnQgLS1uby1jb2xvcjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGVjaG8gIi4uIGNvbnRlbnRzOjogOmRlcHRoOiAyIjsJCQkJXAorCSAgZWNobzsJCQkJCQkJCVwKKwkgIGZvciBpIGluICQkYmFzZXM7IGRvCQkJCQkJXAorCSAgICBpZiBncmVwICJeJCR3cyo6Y29weS1pbi1nbG9iYWwtbG9nOiQkd3Mqbm8kJHdzKiQkIiAkJGkudHJzIFwKKwkgICAgICAgICA+L2Rldi9udWxsOyB0aGVuIGNvbnRpbnVlOyBcCisJICAgIGZpOyBcCisJICAgIGdsb2JfcmVzPWBzZWQgLW4gLWUgInMvJCR3cyokJC8vIiBcCisJICAgICAgICAgICAgICAgICAgICAgLWUgInMvXiQkd3MqOmdsb2JhbC10ZXN0LXJlc3VsdDokJHdzKi8vcCIgXAorCQkgICAgICAgICQkaS50cnNgOyBcCisJICAgIHRlc3QgLW4gIiQkZ2xvYl9yZXMiIHx8IGdsb2JfcmVzPVJVTjsgXAorCSAgICBlY2hvICIkJGdsb2JfcmVzOiAkJGkiIHwgJChhbV9fcnN0X3NlY3Rpb24pOyBcCisJICAgIGlmIHRlc3QgISAtciAkJGkubG9nOyB0aGVuIFwKKwkgICAgICBlY2hvICJmYXRhbDogbWFraW5nICRAOiAkJGkubG9nIGlzIHVucmVhZGFibGUiID4mMjsgXAorCSAgICAgIGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjYXQgJCRpLmxvZzsgZWNobzsgXAorCSAgZG9uZTsJXAorCX0gPiQoVEVTVF9TVUlURV9MT0cpLnRtcDsJCQkJCVwKKwltdiAkKFRFU1RfU1VJVEVfTE9HKS50bXAgJChURVNUX1NVSVRFX0xPRyk7CQkJXAorCWlmICQkc3VjY2VzczsgdGhlbgkJCQkJCVwKKwkgIGNvbD0iJCRncm4iOwkJCQkJCQlcCisJIGVsc2UJCQkJCQkJCVwKKwkgIGNvbD0iJCRyZWQiOwkJCQkJCQlcCisJICB0ZXN0IHgiJCRWRVJCT1NFIiA9IHggfHwgY2F0ICQoVEVTVF9TVUlURV9MT0cpOwkJXAorCWZpOwkJCQkJCQkJXAorCWVjaG8gIiQke2NvbH0kJGJyJCR7c3RkfSI7IAkJCQkJXAorCWVjaG8gIiQke2NvbH1UZXN0c3VpdGUgc3VtbWFyeSBmb3IgJChQQUNLQUdFX1NUUklORykkJHtzdGR9IjsJXAorCWVjaG8gIiQke2NvbH0kJGJyJCR7c3RkfSI7IAkJCQkJXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbWF5YmUtY29sb3I7CQkJCVwKKwllY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQkJXAorCWlmICQkc3VjY2VzczsgdGhlbiA6OyBlbHNlCQkJCQlcCisJICBlY2hvICIkJHtjb2x9U2VlICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSQke3N0ZH0iOwkJXAorCSAgaWYgdGVzdCAtbiAiJChQQUNLQUdFX0JVR1JFUE9SVCkiOyB0aGVuCQkJXAorCSAgICBlY2hvICIkJHtjb2x9UGxlYXNlIHJlcG9ydCB0byAkKFBBQ0tBR0VfQlVHUkVQT1JUKSQke3N0ZH0iOwlcCisJICBmaTsJCQkJCQkJCVwKKwkgIGVjaG8gIiQkY29sJCRiciQkc3RkIjsJCQkJCVwKKwlmaTsJCQkJCQkJCVwKKwkkJHN1Y2Nlc3MgfHwgZXhpdCAxCisKK2NoZWNrLVRFU1RTOgorCUBpZiB0ZXN0ICRAICE9IHJlY2hlY2s7IHRoZW4gXAorCSAgIGxpc3Q9JyQoUkVDSEVDS19MT0dTKSc7IFwKKwkgICB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdDsgXAorCSBmaQorCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKKwlAd3M9J1sgCV0nOyBcCisJbG9nX2xpc3Q9JycgdHJzX2xpc3Q9Jyc7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwlmb3IgaSBpbiAkJGJhc2VzOyBkbyBcCisJICBpZiB0ZXN0IC16ICIkJGxvZ19saXN0IjsgdGhlbiBcCisJICAgIGxvZ19saXN0PSIkJGkubG9nIjsgXAorCSAgZWxzZSBcCisJICAgIGxvZ19saXN0PSIkJGxvZ19saXN0ICQkaS5sb2ciOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAteiAiJCR0cnNfbGlzdCI7IHRoZW4gXAorCSAgICB0cnNfbGlzdD0iJCRpLnRycyI7IFwKKwkgIGVsc2UgXAorCSAgICB0cnNfbGlzdD0iJCR0cnNfbGlzdCAkJGkudHJzIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChURVNUX1NVSVRFX0xPRykgVEVTVF9MT0dTPSIkJGxvZ19saXN0IgorCisuc2gubG9nOgorCUBwPSckPCc7IFwKKwkkKGFtX19zZXRfYik7IFwKKwkkKGFtX19jaGVja19wcmUpICQoU0hfTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpIC0tICQoU0hfTE9HX0NPTVBJTEUpICIkJHRzdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWNvbXBpbGUtZmFpbHVyZS13aGlsZS1kaXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWI3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gMDYwZTc0MzU0Nzc0ZDM2ZDJjMTFlZjA4ZTNlN2VhOWI5YjZlMjNmYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMTMgTm92IDIwMTQgMTE6Mjk6MzMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGlicGFydGVkL2FyY2gvbGludXguYzogZml4IGNvbXBpbGUgZmFpbHVyZSB3aGlsZQorIC0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyCisKK1doaWxlIC0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyLCB0aGUgTUFDUk8gRU5BQkxFX0RFVklDRV9NQVBQRVIgaXMKK3VuZGVmLCBidXQgaXQgbWlzc2VkIHRvIHNjb3BlIHNvbWUgZGV2aWNlIG1hcHBlciBmdW5jdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJwYXJ0ZWQvYXJjaC9saW51eC5jIHwgOCArKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJwYXJ0ZWQvYXJjaC9saW51eC5jIGIvbGlicGFydGVkL2FyY2gvbGludXguYworaW5kZXggNmZkNzNjNS4uMmFmYTQ3OSAxMDA2NDQKKy0tLSBhL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKKysrKyBiL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKK0BAIC0yMzIwLDYgKzIzMjAsNyBAQCB6YXNwcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorIHN0YXRpYyBjaGFyICoKKyBkbV9jYW5vbmljYWxfcGF0aCAoUGVkRGV2aWNlIGNvbnN0ICpkZXYpCisgeworKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorICAgICAgICAgTGludXhTcGVjaWZpYyBjb25zdCAqYXJjaF9zcGVjaWZpYyA9IExJTlVYX1NQRUNJRklDIChkZXYpOworIAorICAgICAgICAgLyogR2V0IG1hcCBuYW1lIGZyb20gZGV2aWNlbWFwcGVyICovCitAQCAtMjMzNyw2ICsyMzM4LDcgQEAgZG1fY2Fub25pY2FsX3BhdGggKFBlZERldmljZSBjb25zdCAqZGV2KQorICAgICAgICAgZG1fdGFza19kZXN0cm95ICh0YXNrKTsKKyAgICAgICAgIHJldHVybiBkZXZfbmFtZTsKKyBlcnI6CisrI2VuZGlmCisgICAgICAgICByZXR1cm4gTlVMTDsKKyB9CisgCitAQCAtMjk1NywxMyArMjk1OSwxNSBAQCBfZGlza19zeW5jX3BhcnRfdGFibGUgKFBlZERpc2sqIGRpc2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpsZW5ndGgpOworIAorLQorKyNpZmRlZiBFTkFCTEVfREVWSUNFX01BUFBFUgorICAgICAgICAgaWYgKGRpc2stPmRldi0+dHlwZSA9PSBQRURfREVWSUNFX0RNKSB7CisgICAgICAgICAgICAgICAgIGFkZF9wYXJ0aXRpb24gPSBfZG1fYWRkX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgcmVtb3ZlX3BhcnRpdGlvbiA9IF9kbV9yZW1vdmVfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICByZXNpemVfcGFydGl0aW9uID0gX2RtX3Jlc2l6ZV9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIGdldF9wYXJ0aXRpb25fc3RhcnRfYW5kX2xlbmd0aCA9IF9kbV9nZXRfcGFydGl0aW9uX3N0YXJ0X2FuZF9sZW5ndGg7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfSBlbHNlCisrI2VuZGlmCisrICAgICAgICB7CisgICAgICAgICAgICAgICAgIGFkZF9wYXJ0aXRpb24gPSBfYmxrcGdfYWRkX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgcmVtb3ZlX3BhcnRpdGlvbiA9IF9ibGtwZ19yZW1vdmVfcGFydGl0aW9uOworICNpZmRlZiBCTEtQR19SRVNJWkVfUEFSVElUSU9OCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvZml4LWRvYy1tYW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTFkNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtidWctcGFydGVkQGdudS5vcmddCisKK3wgZm9yIHBvIGluIGBscyAtMSAuLyoucHRfQlIucG8gMj4vZGV2L251bGxgOyBkbyBcCit8IAkJbWFrZSAkKGJhc2VuYW1lICR7cG8lLnB0X0JSLnBvfSk7IFwKK3wgCWRvbmUKK3wgTWFrZWZpbGU6OTA0OiAqKiogUmVjdXJzaXZlIHZhcmlhYmxlIGBtYW5kaXInIHJlZmVyZW5jZXMgaXRzZWxmIChldmVudHVhbGx5KS4gIFN0b3AuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CisKKy0tLSBwYXJ0ZWQtMy4xL2RvYy9wbzRhLm1rLm9yaWcJMjAxMi0wMy0xNSAxNDowOToxMS41NTU4MzE4NzIgKzAxMDAKKysrKyBwYXJ0ZWQtMy4xL2RvYy9wbzRhLm1rCTIwMTItMDMtMTUgMTQ6MTA6NDQuMjQzODMwOTg1ICswMTAwCitAQCAtMjMsNyArMjMsNyBAQAorICMgdGhyZXNob2xkIGlzIDgwJSksIGl0IHdvbid0IGJlIGRpc3RyaWJ1dGVkLCBhbmQgdGhlIGJ1aWxkIHdvbid0IGZhaWwuCisgIworIAorLW1hbmRpciA9ICQobWFuZGlyKS8kKGxhbmcpCisrbWFuZGlyIDo9ICQobWFuZGlyKS8kKGxhbmcpCisgCisgIyBJbmZvcm0gYXV0b21ha2UgdGhhdCB3ZSB3YW50IHRvIGluc3RhbGwgc29tZSBtYW4gcGFnZXMgaW4gc2VjdGlvbiAxLCA1CisgIyBhbmQgOC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvbm9fY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDhkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSWYgY2hlY2sgaXMgZGV0ZWN0ZWQsIGl0IG1ha2VzIHRoZSBidWlsZHMgbm9uLWRldGVybWluc3RpYyBzbyBqdXN0IGZvcmNlCitpdCB0byBiZSBkaXNhYmxlZC4KKworUlAgLSA0LzExLzA4CisKK0luZGV4OiBwYXJ0ZWQtMS45LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGFydGVkLTEuOS4wLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDctMjMgMTg6NTI6MDguMDAwMDAwMDAwICswMTAwCisrKysgcGFydGVkLTEuOS4wL2NvbmZpZ3VyZS5hYwkyMDEwLTAyLTAyIDE0OjEzOjU2LjAxMzkwNTA5MyArMDAwMAorQEAgLTQ3Nyw3ICs0NzcsNyBAQAorIEFNX0NPTkRJVElPTkFMKFtCVUlMRF9MSU5VWF0sIFt0ZXN0ICIkT1MiID0gbGludXhdKQorIAorIGRubCBjaGVjayBmb3IgImNoZWNrIiwgdW5pdCB0ZXN0aW5nIGxpYnJhcnkvaGVhZGVyCistUEtHX0NIRUNLX01PRFVMRVMoW0NIRUNLXSwgW2NoZWNrID49IDAuOS4zXSwgaGF2ZV9jaGVjaz15ZXMsIGhhdmVfY2hlY2s9bm8pCisraGF2ZV9jaGVjaz1ubworIGlmIHRlc3QgIiRoYXZlX2NoZWNrIiAhPSAieWVzIjsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKFtVbmFibGUgdG8gbG9jYXRlIGNoZWNrIHZlcnNpb24gMC45LjMgb3IgaGlnaGVyOiBub3QgYnVpbGRpbmddKQorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWM1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3N5c2NhbGxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJiZTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgbGlicGFydGVkL2FyY2gvbGludXguYyB8ICAgMTMgKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCisKK0luZGV4OiBwYXJ0ZWQtMS45LjAvbGlicGFydGVkL2FyY2gvbGludXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhcnRlZC0xLjkuMC5vcmlnL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMJMjAwOS0wNy0yMyAxODo1MjowOC4wMDAwMDAwMDAgKzAxMDAKKysrKyBwYXJ0ZWQtMS45LjAvbGlicGFydGVkL2FyY2gvbGludXguYwkyMDEwLTAyLTAyIDE0OjE0OjE2LjUyMzkwNDc2OCArMDAwMAorQEAgLTE3LDYgKzE3LDggQEAKKyAKKyAjZGVmaW5lIFBST0NfREVWSUNFU19CVUZTSVogMTYzODQKKyAKKysjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorKworICNpbmNsdWRlIDxjb25maWcuaD4KKyAjaW5jbHVkZSA8YXJjaC9saW51eC5oPgorIAorQEAgLTE0NzcsMTIgKzE0NzksMTQgQEAKKyAKKyAjaWYgU0laRU9GX09GRl9UIDwgOAorIAorKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCisgc3RhdGljIF9zeXNjYWxsNShpbnQsX2xsc2VlaywKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCwgZmQsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBvZmZzZXRfaGlnaCwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIG9mZnNldF9sb3csCisgICAgICAgICAgICAgICAgICBsb2ZmX3QqLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIG9yaWdpbikKKysjZW5kaWYKKyAKKyBsb2ZmX3QKKyBsbHNlZWsgKHVuc2lnbmVkIGludCBmZCwgbG9mZl90IG9mZnNldCwgdW5zaWduZWQgaW50IHdoZW5jZSkKK0BAIC0xNDkwLDExICsxNDk0LDIwIEBACisgICAgICAgICBsb2ZmX3QgcmVzdWx0OworICAgICAgICAgaW50IHJldHZhbDsKKyAKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQorICAgICAgICAgcmV0dmFsID0gX2xsc2VlayhmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KSA+PiAzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KSAmIDB4ZmZmZmZmZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5jZSk7CisrI2Vsc2UKKysgCXJldHZhbCA9IHN5c2NhbGwoX19OUl9fbGxzZWVrLCBmZCwKKysJCQkgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KSA+PiAzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KSAmIDB4ZmZmZmZmZmYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0LAorKwkJCSB3aGVuY2UpOworKyNlbmRpZgorKworICAgICAgICAgcmV0dXJuIChyZXR2YWw9PS0xID8gKGxvZmZfdCkgcmV0dmFsIDogcmVzdWx0KTsKKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4YWUwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvcGFydGVkXzMuMi5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIkRpc2sgcGFydGl0aW9uIGVkaXRpbmcvcmVzaXppbmcgdXRpbGl0eSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wYXJ0ZWQvcGFydGVkLmh0bWwiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJmMzFiMjY2ZDM0NDBkZDdlZTUwZjkyY2Y2N2Q4ZTZjIgorU0VDVElPTiA9ICJjb25zb2xlL3Rvb2xzIgorREVQRU5EUyA9ICJuY3Vyc2VzIHJlYWRsaW5lIHV0aWwtbGludXgiCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3BhcnRlZC9wYXJ0ZWQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL25vX2NoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2NhbGxzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1kb2MtbWFuZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMjQ3YjZhN2IzMTRmOGVkZWI2MTgxNTlmYTk1ZjljYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NThiNTg5YzIyMjk3Y2FjZGY0MzdmM2JhZmY2ZjA0YjMzMzA4NzUyMWFiMjc0ZjdhYjY3N2NiOGM2YmI3OGU0IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRldmljZS1tYXBwZXIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHRleGluZm8gcHRlc3QKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyB0ZXN0cyBwcmludC1hbGlnbiBwcmludC1tYXggZHVwLWNsb2JiZXIgZHVwbGljYXRlIGZzLXJlc2l6ZQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwlta2RpciAkdC9idWlsZC1hdXgKKwljcCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvCisJY3AgLXIgJHtTfS90ZXN0cyAkdAorCWNwICR7V09SS0RJUn0vTWFrZWZpbGUgJHQvdGVzdHMvCisJc2VkIC1pICJzfF5WRVJTSU9OLip8VkVSU0lPTiA9ICR7UFZ9fGciICR0L3Rlc3RzL01ha2VmaWxlCisJZm9yIGkgaW4gcHJpbnQtYWxpZ24gcHJpbnQtbWF4IGR1cC1jbG9iYmVyIGR1cGxpY2F0ZSBmcy1yZXNpemU7IFwKKwkgIGRvIGNwICR7Qn0vdGVzdHMvLmxpYnMvJGkgJHQvdGVzdHMvOyBcCisJZG9uZQorCXNlZCAtZSAnc3wgLi4vcGFydGVkfHwnIC1pICR0L3Rlc3RzLyouc2gKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBjb3JldXRpbHMgcGVybCB1dGlsLWxpbnV4LWxvc2V0dXAgcHl0aG9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4Nzc5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9maXhfZm9yX2NvbXBpbGVfd2l0aF9nY2MtNC42LjAucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhpcyBjb21waWxlciBlcnJvciB3aXRoIGdjYyA0LjYuMAorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA1LzA4CisKK3wgZnRzLmM6IEluIGZ1bmN0aW9uICdwYXhfZnRzX3NldCc6Cit8IGZ0cy5jOjQ2OTo3OiBlcnJvcjogcGFyYW1ldGVyICdzcCcgc2V0IGJ1dCBub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXJdCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW2Z0cy5vXSBFcnJvciAxCisKK0luZGV4OiBwYXgtMy40L2xpYi9mdHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9saWIvZnRzLmMKKysrKyBwYXgtMy40L2xpYi9mdHMuYworQEAgLTQ2Niw3ICs0NjYsNyBAQCBuYW1lOgkJdCA9IHNwLT5mdHNfcGF0aCArIE5BUFBFTkQocC0+ZnRzCisgLyogQVJHU1VTRUQgKi8KKyBpbnQKKyBmdHNfc2V0KHNwLCBwLCBpbnN0cikKKy0JRlRTICpzcDsKKysJRlRTIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSAqc3A7CisgCUZUU0VOVCAqcDsKKyAJaW50IGluc3RyOworIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L3BheC0zLjRfZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODc4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMTg1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQXV0aG9yOiBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorRGF0ZTogICBUdWUgRGVjIDYgMTA6MzQ6NTMgMjAxMSAtMDgwMAorCisgICAgRml4IHBheC0zLjQgYnVpbGQgZm9yIHgzMgorICAgIAorICAgIG9mZl90IGlzIDhieXRlIGZvciB4MzIuICBXZSBuZWVkIHRvIGNoZWNrIGJvdGggX0ZJTEVfT0ZGU0VUX0JJVFMgYW5kCisgICAgc2l6ZSBvZiBvZmZfdCB0byBzZWUgaWYgZmlsZSBvZmZzZXQgaXMgNjRiaXQuICBUaGlzIHBhdGNoIGFkZHMKKyAgICBBQ19DSEVDS19TSVpFT0Yob2ZmX3QpIGFuZCBjaGVja3MgU0laRU9GX09GRl9UID09IDguCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMDYKKworSW5kZXg6IHBheC0zLjQvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIHBheC0zLjQvY29uZmlndXJlLmluCitAQCAtMzMsNCArMzMsNyBAQCBkbmwgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorIAorK0FDX0NIRUNLX1NJWkVPRihvZmZfdCkKKytBQ19DSEVDS19TSVpFT0YobG9uZykKKysKKyBBQ19PVVRQVVQoW01ha2VmaWxlIGxpYi9NYWtlZmlsZSBzcmMvTWFrZWZpbGVdKQorSW5kZXg6IHBheC0zLjQvc3JjL2FyX2lvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL2FyX2lvLmMKKysrKyBwYXgtMy40L3NyYy9hcl9pby5jCitAQCAtMzc4LDcgKzM3OCw4IEBAIGFyX2Nsb3NlKHZvaWQpCisgCSAqIGNvdWxkIGhhdmUgd3JpdHRlbiBhbnl0aGluZyB5ZXQuCisgCSAqLworIAlpZiAoZnJtdCA9PSBOVUxMKSB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsICIlczogdW5rbm93biBmb3JtYXQsICVxdSBieXRlcyBza2lwcGVkLlxuIiwKKyAjZWxzZQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwgIiVzOiB1bmtub3duIGZvcm1hdCwgJWx1IGJ5dGVzIHNraXBwZWQuXG4iLAorQEAgLTM5MSw3ICszOTIsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAorIAlpZiAoc3RyY21wKE5NX0NQSU8sIGFyZ3YwKSA9PSAwKQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJICAgICIlcXUgYmxvY2tzXG4iLAorICNlbHNlCisgCQkgICAgIiVsdSBibG9ja3NcbiIsCitAQCAtMzk5LDcgKzQwMSw4IEBAIGFyX2Nsb3NlKHZvaWQpCisgCQkJKHJkY250ID8gcmRjbnQgOiB3cmNudCkgLyA1MTIwKTsKKyAJZWxzZSBpZiAoc3RyY21wKE5NX1RBUiwgYXJndjApICE9IDApCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQkgICAgIiVzOiAlcyB2b2wgJWQsICVsdSBmaWxlcywgJXF1IGJ5dGVzIHJlYWQsICVxdSBieXRlcyB3cml0dGVuLlxuIiwKKyAjZWxzZQorIAkJICAgICIlczogJXMgdm9sICVkLCAlbHUgZmlsZXMsICVsdSBieXRlcyByZWFkLCAlbHUgYnl0ZXMgd3JpdHRlbi5cbiIsCitJbmRleDogcGF4LTMuNC9zcmMvY3Bpby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9jcGlvLmMKKysrKyBwYXgtMy40L3NyYy9jcGlvLmMKK0BAIC0yMTgsNyArMjE4LDggQEAgcmRfbG5fbm0gKEFSQ0hEICphcmNuKQorIAkgKi8KKyAJaWYgKChhcmNuLT5zYi5zdF9zaXplID09IDApIHx8CisgCSAgICAoYXJjbi0+c2Iuc3Rfc2l6ZSA+PSAob2ZmX3QpIHNpemVvZihhcmNuLT5sbl9uYW1lKSkpIHsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJcGF4d2FybiAoMSwgIkNwaW8gbGluayBuYW1lIGxlbmd0aCBpcyBpbnZhbGlkOiAlcXUiLAorIAkJCSBhcmNuLT5zYi5zdF9zaXplKTsKKyAjZWxzZQorSW5kZXg6IHBheC0zLjQvc3JjL2dlbl9zdWJzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL2dlbl9zdWJzLmMKKysrKyBwYXgtMy40L3NyYy9nZW5fc3Vicy5jCitAQCAtMTMzLDcgKzEzMyw4IEBAIGxzX2xpc3QgKEFSQ0hEICphcmNuLCB0aW1lX3Qgbm93LCBGSUxFICoKKyAgICAqIHByaW50IGRldmljZSBpZCdzIGZvciBkZXZpY2VzLCBvciBzaXplcyBmb3Igb3RoZXIgbm9kZXMKKyAgICAqLworICAgaWYgKChhcmNuLT50eXBlID09IFBBWF9DSFIpIHx8IChhcmNuLT50eXBlID09IFBBWF9CTEspKQorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICh2b2lkKSBmcHJpbnRmIChmcCwgIiU0bHUsJTRsdSAiLCAodW5zaWduZWQgbG9uZykgTUFKT1IgKHNicC0+c3RfcmRldiksCisgCQkgICAgKHVuc2lnbmVkIGxvbmcpIE1JTk9SIChzYnAtPnN0X3JkZXYpKTsKKyAjZWxzZQorQEAgLTE0Miw3ICsxNDMsOCBAQCBsc19saXN0IChBUkNIRCAqYXJjbiwgdGltZV90IG5vdywgRklMRSAqCisgI2VuZGlmCisgICBlbHNlCisgICAgIHsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAgICh2b2lkKSBmcHJpbnRmIChmcCwgIiU5cXUgIiwgc2JwLT5zdF9zaXplKTsKKyAjZWxzZQorICAgICAgICh2b2lkKSBmcHJpbnRmIChmcCwgIiU5bHUgIiwgc2JwLT5zdF9zaXplKTsKK0BAIC0zMzQsNyArMzM2LDggQEAgdWxfYXNjICh1X2xvbmcgdmFsLCBjaGFyICpzdHIsIGludCBsZW4sIAorICAgcmV0dXJuICgwKTsKKyB9CisgCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAvKgorICAqIGFzY191cWQoKQorICAqCWNvbnZlcnQgaGV4L29jdGFsIGNoYXJhY3RlciBzdHJpbmcgaW50byBhIHVfcXVhZF90LiBXZSBkbyBub3QgaGF2ZSB0bworSW5kZXg6IHBheC0zLjQvc3JjL29wdGlvbnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvb3B0aW9ucy5jCisrKysgcGF4LTMuNC9zcmMvb3B0aW9ucy5jCitAQCAtMTU0NSw3ICsxNTQ1LDggQEAgc3RyX29mZnQgKGNoYXIgKnZhbCkKKyAgIGNoYXIgKmV4cHI7CisgICBvZmZfdCBudW0sIHQ7CisgCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgIG51bSA9IHN0cnRvcSAodmFsLCAmZXhwciwgMCk7CisgICBpZiAoKG51bSA9PSBMT05HX0xPTkdfTUFYKSB8fCAobnVtIDw9IDApIHx8IChleHByID09IHZhbCkpCisgI2Vsc2UKK0luZGV4OiBwYXgtMy40L3NyYy90YXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvdGFyLmMKKysrKyBwYXgtMy40L3NyYy90YXIuYworQEAgLTU4LDcgKzU4LDggQEAKKyBzdGF0aWMgdW5zaWduZWQgbG9uZyB0YXJfY2hrc20gKGNoYXIgKiwgaW50KTsKKyBzdGF0aWMgY2hhciAqbmFtZV9zcGxpdCAoY2hhciAqLCBpbnQpOworIHN0YXRpYyBpbnQgdWxfb2N0ICh1X2xvbmcsIGNoYXIgKiwgaW50LCBpbnQpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgc3RhdGljIGludCB1cWRfb2N0ICh1X3F1YWRfdCwgY2hhciAqLCBpbnQsIGludCk7CisgI2VuZGlmCisgCitAQCAtMTk2LDcgKzE5Nyw4IEBAIHVsX29jdCAodV9sb25nIHZhbCwgcmVnaXN0ZXIgY2hhciAqc3RyLCAKKyAgIHJldHVybiAoMCk7CisgfQorIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgLyoKKyAgKiB1cWRfb2N0KCkKKyAgKgljb252ZXJ0IGFuIHVfcXVhZF90IHRvIGFuIG9jdGFsIHN0cmluZy4gb25lIG9mIG1hbnkgb2RkYmFsbCBmaWVsZAorQEAgLTQyNyw3ICs0MjksOCBAQCB0YXJfcmQgKEFSQ0hEICphcmNuLCBjaGFyICpidWYpCisgCQkJICAgICAgIDB4ZmZmKTsKKyAgIGFyY24tPnNiLnN0X3VpZCA9ICh1aWRfdCkgYXNjX3VsIChoZC0+dWlkLCBzaXplb2YgKGhkLT51aWQpLCBPQ1QpOworICAgYXJjbi0+c2Iuc3RfZ2lkID0gKGdpZF90KSBhc2NfdWwgKGhkLT5naWQsIHNpemVvZiAoaGQtPmdpZCksIE9DVCk7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191cWQgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKKyAjZWxzZQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VsIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CitAQCAtNjU5LDcgKzY2Miw4IEBAIHRhcl93ciAocmVnaXN0ZXIgQVJDSEQgKiBhcmNuKQorICAgICAgICAqIGRhdGEgZm9sbG93cyB0aGlzIGZpbGUsIHNvIHNldCB0aGUgcGFkCisgICAgICAgICovCisgICAgICAgaGQtPmxpbmtmbGFnID0gQVJFR1RZUEU7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICBpZiAodXFkX29jdCAoKHVfcXVhZF90KSBhcmNuLT5zYi5zdF9zaXplLCBoZC0+c2l6ZSwKKyAJCSAgIHNpemVvZiAoaGQtPnNpemUpLCAxKSkKKyAjZWxzZQorQEAgLTgzNCw3ICs4MzgsOCBAQCB1c3Rhcl9yZCAoQVJDSEQgKmFyY24sIGNoYXIgKmJ1ZikKKyAgICAqLworICAgYXJjbi0+c2Iuc3RfbW9kZSA9IChtb2RlX3QpIChhc2NfdWwgKGhkLT5tb2RlLCBzaXplb2YgKGhkLT5tb2RlKSwgT0NUKSAmCisgCQkJICAgICAgIDB4ZmZmKTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VxZCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworICNlbHNlCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdWwgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKK0BAIC0xMDgxLDcgKzEwODYsOCBAQCB1c3Rhcl93ciAocmVnaXN0ZXIgQVJDSEQgKiBhcmNuKQorICAgICAgIGVsc2UKKyAJaGQtPnR5cGVmbGFnID0gUkVHVFlQRTsKKyAgICAgICBhcmNuLT5wYWQgPSBUQVJfUEFEIChhcmNuLT5zYi5zdF9zaXplKTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAgIGlmICh1cWRfb2N0ICgodV9xdWFkX3QpIGFyY24tPnNiLnN0X3NpemUsIGhkLT5zaXplLAorIAkJICAgc2l6ZW9mIChoZC0+c2l6ZSksIDMpKQorIAl7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwNDg3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4XzMuNC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlBvcnRhYmxlIEFyY2hpdmUgZVhjaGFuZ2UiCitERVNDUklQVElPTiA9ICJwYXggKFBvcnRhYmxlIEFyY2hpdmUgZVhjaGFuZ2UpIGlzIHRoZSBQT1NJWCBzdGFuZGFyZCBhcmNoaXZlIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vY3Zzd2ViLm9wZW5ic2Qub3JnL2NnaS1iaW4vY3Zzd2ViL3NyYy9iaW4vcGF4LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5vcGVuYnNkLm9yZy9xdWVyeS1wci5odG1sIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRiMGI2NzRkZmRjNTZkYWEzODMyZDQwNjliODIwZWEwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wYXguaDtlbmRsaW5lPTQwO21kNT0zMDlkM2UyNDFjMWQ4MjA2OTIyOGU1YTUxZTliOGQ2MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Bpby5oO2VuZGxpbmU9NDA7bWQ1PWMzYjRiYmZmNjEzM2E4MzM4Nzk2ODYxN2JiYWU4YWM0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi92aXMuaDtlbmRsaW5lPTQwO21kNT1iMjgzZjc1OWFiZDRhNWFkN2UwMTRiODBmNTFmYzA1MyIKKworU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS50YXIuYnoyL2ZiZDkwMjNiNTkwYjQ1YWMzYWRlOTU4NzA3MDJhMGQ2LyR7QlB9LnRhci5iejIgXAorCWZpbGU6Ly9maXhfZm9yX2NvbXBpbGVfd2l0aF9nY2MtNC42LjAucGF0Y2ggXAorCWZpbGU6Ly9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmJkOTAyM2I1OTBiNDVhYzNhZGU5NTg3MDcwMmEwZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWMzYzA2MDQ4ZTAyODI4MDc3Y2Y3NzU3ZDNkMTQyMjQxNDI5MjM4ODkzYjkxZDUyOWFmMjlhMmU4Y2M1NjIzYiIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzMwOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BiemlwMi9wYnppcDJfMS4xLjEyLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiUEJaSVAyIGlzIGEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgYnppcDIiCitERVNDUklQVElPTiA9ICJQQlpJUDIgaXMgYSBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnppcDIgYmxvY2stc29ydGluZyBcCitmaWxlIGNvbXByZXNzb3IgdGhhdCB1c2VzIHB0aHJlYWRzIGFuZCBhY2hpZXZlcyBuZWFyLWxpbmVhciBzcGVlZHVwIG9uIFNNUCBcCittYWNoaW5lcy4gVGhlIG91dHB1dCBvZiB0aGlzIHZlcnNpb24gaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGJ6aXAyIHYxLjAuMiBvciBcCituZXdlciAoaWU6IGFueXRoaW5nIGNvbXByZXNzZWQgd2l0aCBwYnppcDIgY2FuIGJlIGRlY29tcHJlc3NlZCB3aXRoIGJ6aXAyKS4iCitIT01FUEFHRSA9ICJodHRwOi8vY29tcHJlc3Npb24uY2EvcGJ6aXAyLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGM0ZjJlZGVjOTY3OWQ1YWJlZjM1MTRhODE2YjU0YTQiCisKK0RFUEVORFMgPSAiYnppcDIiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvJHtCUE59LzEuMS8ke1BWfS8rZG93bmxvYWQvJHtCUH0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTFhNDkxMWIxMzMwNTg1MDQyMzg0MGViMGZhNmY0ZjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTczYmIzNThhNWE3ZDNiZjVmNDJmODgxYWYzMjRjZWRmOTYwYzc4NmU4ZDY2ZGQwM2Q0NDhkZGQ4YTAxNjZlZSIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKKworRVhUUkFfT0VNQUtFID0gIkNYWD0nJHtDWFh9ICR7Q1hYRkxBR1N9JyBMREZMQUdTPScke0xERkxBR1N9JyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgcGJ6aXAyICR7RH0ke2JpbmRpcn0vCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGliY29udmVydC1hc24xLXBlcmxfMC4yNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwZTdlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJDb252ZXJ0OjpBU04xIC0gUGVybCBBU04uMSBFbmNvZGUvRGVjb2RlIGxpYnJhcnkiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLm1kO2JlZ2lubGluZT05MTtlbmRsaW5lPTk3O21kNT1jZWZmN2ZkMjg2ZWI2ZDhlOGUwZDNkMjNlMDk2YTYzZiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dCL0dCQVJSL0NvbnZlcnQtQVNOMS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODcyM2U5NmJlMGIyNThhOWUyMDQ4MDI3NmU4YTYyYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NGE0YTc4YWUwYzVlOTczMTAwYWMwYThmMjAzYTExMGY3NmZiMDQ3Yjc5ZGFlNGZjMWZkN2Q2ODE0ZDNkNThhIgorCitTID0gIiR7V09SS0RJUn0vQ29udmVydC1BU04xLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworRVhUUkFfUEVSTEZMQUdTID0gIi1JICR7UEVSTEhPU1RMSUJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZjZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlidGltZWRhdGUtcGVybF8yLjMwLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGVzIHVzZWZ1bCBmb3IgbWFuaXB1bGF0aW5nIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24iCitTRUNUSU9OID0gImxpYnMiCisjIFlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yMTttZDU9NTc2YjdjYjQxZTVlODIxNTAxYTAxZWQ2NmYwZjlkOWUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HQi9HQkFSUi9UaW1lRGF0ZS0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS9UaW1lRGF0ZS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLWNhcnAgcGVybC1tb2R1bGUtZXhwb3J0ZXIgcGVybC1tb2R1bGUtc3RyaWN0IHBlcmwtbW9kdWxlLXRpbWUtbG9jYWwiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMWQ5MTE1M2FjOTcxMzQ3YWVlODQyOTJlZDg4NmMxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NWJkMjU0ODcxY2I1ODUzYTZhYTA0MDNhYzBiZTI3MGNkZDc1YzlkMWI2NjM5ZjE4ZWNiYTYzYzE1Mjk4ZTg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOWU3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsXzEuMTEuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3Igc3VwcG9ydGluZyBzaW1wbGUgZ2VuZXJpYyBuYW1lc3BhY2VzIgorREVTQ1JJUFRJT04gPSAiWE1MOjpOYW1lc3BhY2VTdXBwb3J0IG9mZmVycyBhIHNpbXBsZSB3YXkgdG8gcHJvY2VzcyBuYW1lc3BhY2UtYmFzZWQgWE1MIG5hbWVzLiBcCisgICAgICAgICAgICAgICAgSXQgYWxzbyBoZWxwcyBtYWludGFpbiBhIHByZWZpeC10by1uYW1lc3BhY2UgVVJJIG1hcCwgYW5kIHByb3ZpZGVzIGEgbnVtYmVyIG9mIFwKKyAgICAgICAgICAgICAgICBiYXNpYyBjaGVja3MuICIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9NRVRBLnltbDtiZWdpbmxpbmU9MjI7ZW5kbGluZT0yMjttZDU9M2IyYjU2NGRhZThiOWFmOWU4ODk2ZTg1YzA3ZGNiZTUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvUC9QRS9QRVJJR1JJTi9YTUwtTmFtZXNwYWNlU3VwcG9ydC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMjIyY2NhNzYxNjFjZDk1NmQ3MjQyODZkMzZiNjA3ZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmQ4MTUxZjBhM2YxMDIzMTNkNzZiNjRiZmQxYzJkOWVkNDZiZmU2M2ExNmYwMzhlN2Q4NjBmZGEyODdiNzRlYSIKKworCitTID0gIiR7V09SS0RJUn0vWE1MLU5hbWVzcGFjZVN1cHBvcnQtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EPSJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtYmFzZS1wZXJsXzEuMDguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTMzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQmFzZSBjbGFzcyBTQVggRHJpdmVycyBhbmQgRmlsdGVycyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbW9kdWxlIGhhcyBhIHZlcnkgc2ltcGxlIHRhc2sgLSB0byBiZSBhIGJhc2UgY2xhc3MgZm9yIFwKK1BlcmxTQVggZHJpdmVycyBhbmQgZmlsdGVycy4gSXQncyBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byBwYXNzIFwKK3RoZSBpbnB1dCBkaXJlY3RseSB0byB0aGUgb3V0cHV0IHVuY2hhbmdlZC4gSXQgY2FuIGJlIHVzZWZ1bCB0byBcCit1c2UgdGhpcyBtb2R1bGUgYXMgYSBiYXNlIGNsYXNzIHNvIHlvdSBkb24ndCBoYXZlIHRvLCBmb3IgZXhhbXBsZSwgXAoraW1wbGVtZW50IHRoZSBjaGFyYWN0ZXJzKCkgY2FsbGJhY2suIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorUkRFUEVORFNfJHtQTn0gKz0gInBlcmwtbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGlzdC5pbmk7ZW5kbGluZT01O21kNT04ZjljOWE1NTM0MGFlZmFlZTZlOTcwNGM4ODQ2NjQ0NiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dSL0dSQU5UTS9YTUwtU0FYLUJhc2UtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhjOGMzMjQ3ZGZkMDgwNzEyNTk2MTE4ZDcwZGJlMzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjY2MjcwMzE4YjE1Zjg4Yjg0MjdlNTg1MTk4YWJiYzE5YmMyZTZjY2IzNmRjNGMwYTRmMmQ5ODA3MzMwMjE5ZSIKKworUyA9ICIke1dPUktESVJ9L1hNTC1TQVgtQmFzZS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LXBlcmxfMC45OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQzOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3IgdXNpbmcgYW5kIGJ1aWxkaW5nIFBlcmwgU0FYMiBYTUwgcHJvY2Vzc29ycyIKK0RFU0NSSVBUSU9OID0gIlhNTDo6U0FYIGNvbnNpc3RzIG9mIHNldmVyYWwgZnJhbWV3b3JrIGNsYXNzZXMgZm9yIHVzaW5nIGFuZCBcCitidWlsZGluZyBQZXJsIFNBWDIgWE1MIHBhcnNlcnMsIGZpbHRlcnMsIGFuZCBkcml2ZXJzLiAgSXQgaXMgZGVzaWduZWQgXCAKK2Fyb3VuZCB0aGUgbmVlZCB0byBiZSBhYmxlIHRvICJwbHVnIGluIiBkaWZmZXJlbnQgU0FYIHBhcnNlcnMgdG8gYW4gXAorYXBwbGljYXRpb24gd2l0aG91dCByZXF1aXJpbmcgcHJvZ3JhbW1lciBpbnRlcnZlbnRpb24uICBUaG9zZSBvZiB5b3UgXAorZmFtaWxpYXIgd2l0aCB0aGUgREJJIHdpbGwgYmUgcmlnaHQgYXQgaG9tZS4gIFNvbWUgb2YgdGhlIGRlc2lnbnMgXAorY29tZSBmcm9tIHRoZSBKYXZhIEpBWFAgc3BlY2lmaWNhdGlvbiAoU0FYIHBhcnQpLCBvbmx5IHdpdGhvdXQgdGhlIFwKK2phdmFuZXNzLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0RFUEVORFMgKz0gImxpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gKz0gImxpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmwgbGlieG1sLXNheC1iYXNlLXBlcmwgcGVybC1tb2R1bGUtZmlsZS10ZW1wIgorUFIgPSAicjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTY1YzRjZDhmMzljMjRjNzEzNWVkNzBkYWNiY2IwOWUzIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR1IvR1JBTlRNL1hNTC1TQVgtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjkwZjUzNzVhZTg3ZmRlYmZkYjViYzM4NTQwMTlmMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzJiMDRiOGUzNmI2Y2M0Y2ZjNDg2ZGUyZDg1OWQ4N2FmNTM4NmRkOTMwZjIzODNjNDkzNDcwNTBkNmY1YWQ4NCIKKworUyA9ICIke1dPUktESVJ9L1hNTC1TQVgtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ouaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4OTkxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ouaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQSBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiBvZiBnemlwIgorREVTQ1JJUFRJT04gPSAicGlneiwgd2hpY2ggc3RhbmRzIGZvciBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiBvZiBnemlwLCBpcyBhIFwKK2Z1bGx5IGZ1bmN0aW9uYWwgcmVwbGFjZW1lbnQgZm9yIGd6aXAgdGhhdCBleHBsb2l0cyBtdWx0aXBsZSBwcm9jZXNzb3JzIGFuZCBcCittdWx0aXBsZSBjb3JlcyB0byB0aGUgaGlsdCB3aGVuIGNvbXByZXNzaW5nIGRhdGEuIHBpZ3ogd2FzIHdyaXR0ZW4gYnkgTWFyayBcCitBZGxlciwgYW5kIHVzZXMgdGhlIHpsaWIgYW5kIHB0aHJlYWQgbGlicmFyaWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly96bGliLm5ldC9waWd6LyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiWmxpYiAmIEFwYWNoZS0yLjAiCisKK1NSQ19VUkkgPSAiaHR0cDovL3psaWIubmV0LyR7QlBOfS8ke0JQfS50YXIuZ3oiCisKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSArPSAiZ3ppcC1uYXRpdmUiCisKK0RFUEVORFMgPSAiemxpYiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2RvX2luc3RhbGxfY2xhc3MtdGFyZ2V0KCkgeworCSMgSW5zdGFsbCBmaWxlcyBpbnRvIC9iaW4gKEZIUyksIHdoaWNoIGlzIHR5cGljYWwgcGxhY2UgZm9yIGd6aXAKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCWluc3RhbGwgJHtCfS9waWd6ICR7RH0ke2Jhc2VfYmluZGlyfS9waWd6CisJbG4gLW5zZiBwaWd6ICR7RH0ke2Jhc2VfYmluZGlyfS91bnBpZ3oKKwlsbiAtbnNmIHBpZ3ogJHtEfSR7YmFzZV9iaW5kaXJ9L3BpZ3pjYXQKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsICR7Qn0vcGlneiAke0R9JHtiaW5kaXJ9L2d6aXAKKwlsbiAtbnNmIGd6aXAgJHtEfSR7YmluZGlyfS9ndW56aXAKKwlsbiAtbnNmIGd6aXAgJHtEfSR7YmluZGlyfS96Y2F0Cit9CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjgwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3VuemlwIGd6aXAgemNhdCIKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3VuemlwXSA9ICIke2Jhc2VfYmluZGlyfS9ndW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3ppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3ppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt6Y2F0XSA9ICIke2Jhc2VfYmluZGlyfS96Y2F0IgorQUxURVJOQVRJVkVfVEFSR0VUID0gIiR7YmFzZV9iaW5kaXJ9L3BpZ3oiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlY2MwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ovbGluay1vcmRlci5wYXRjaApAQCAtMCwwICsxLDM4IEBACitUaGlzIHBhdGNoIGF2b2lkcyB1bmRlcmxpbmtpbmcgaXNzdWVzIHNpbmNlIHdlIHBhc3MgLWx6IHZpYSBMREZMQUdTIGJ1dCBpdCBhcHBlYXJzCitiZWZvcmUgcGlnei5vIHdoaWNoIG5lZWRzIHN5bWJvbHMgZnJvbSBsaWJ6IGhvd2V2ZXIgZHVlIHRvIG9yZGVyIGxpbmtlciBoYXBwaWx5IGRpc2NhcmRzIGxpYnoKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBwaWd6LTIuMy4zL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGlnei0yLjMuMy5vcmlnL01ha2VmaWxlCTIwMTUtMDEtMTkgMjA6MTI6MzEuMDAwMDAwMDAwIC0wODAwCisrKysgcGlnei0yLjMuMy9NYWtlZmlsZQkyMDE1LTAxLTI4IDA5OjExOjUwLjI2NjY2OTE4NCAtMDgwMAorQEAgLTUsNyArNSw3IEBACisgIyB1c2UgZ2NjIGFuZCBnbWFrZSBvbiBTb2xhcmlzCisgCisgcGlnejogcGlnei5vIHlhcm4ubyB0cnkubyAke1pPUEZMSX1kZWZsYXRlLm8gJHtaT1BGTEl9YmxvY2tzcGxpdHRlci5vICR7Wk9QRkxJfXRyZWUubyAke1pPUEZMSX1sejc3Lm8gJHtaT1BGTEl9Y2FjaGUubyAke1pPUEZMSX1oYXNoLm8gJHtaT1BGTEl9dXRpbC5vICR7Wk9QRkxJfXNxdWVlemUubyAke1pPUEZMSX1rYXRhamFpbmVuLm8KKy0JJChDQykgJChMREZMQUdTKSAtbyBwaWd6ICReIC1scHRocmVhZCAtbG0KKysJJChDQykgLW8gcGlneiAkXiAkKExERkxBR1MpIC1seiAtbHB0aHJlYWQgLWxtCisgCWxuIC1mIHBpZ3ogdW5waWd6CisgCisgcGlnei5vOiBwaWd6LmMgeWFybi5oIHRyeS5oICR7Wk9QRkxJfWRlZmxhdGUuaCAke1pPUEZMSX11dGlsLmgKK0BAIC0zNSw3ICszNSw3IEBACisgZGV2OiBwaWd6IHBpZ3p0IHBpZ3puCisgCisgcGlnenQ6IHBpZ3p0Lm8geWFybnQubyB0cnkubyAke1pPUEZMSX1kZWZsYXRlLm8gJHtaT1BGTEl9YmxvY2tzcGxpdHRlci5vICR7Wk9QRkxJfXRyZWUubyAke1pPUEZMSX1sejc3Lm8gJHtaT1BGTEl9Y2FjaGUubyAke1pPUEZMSX1oYXNoLm8gJHtaT1BGTEl9dXRpbC5vICR7Wk9QRkxJfXNxdWVlemUubyAke1pPUEZMSX1rYXRhamFpbmVuLm8KKy0JJChDQykgJChMREZMQUdTKSAtbyBwaWd6dCAkXiAtbHB0aHJlYWQgLWxtCisrCSQoQ0MpIC1vIHBpZ3p0ICReICQoTERGTEFHUykgLWx6IC1scHRocmVhZCAtbG0KKyAKKyBwaWd6dC5vOiBwaWd6LmMgeWFybi5oIHRyeS5oCisgCSQoQ0MpICQoQ0ZMQUdTKSAtRERFQlVHIC1nIC1jIC1vIHBpZ3p0Lm8gcGlnei5jCitAQCAtNDQsNyArNDQsNyBAQAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtZyAtYyAtbyB5YXJudC5vIHlhcm4uYworIAorIHBpZ3puOiBwaWd6bi5vIHRyeW4ubyAke1pPUEZMSX1kZWZsYXRlLm8gJHtaT1BGTEl9YmxvY2tzcGxpdHRlci5vICR7Wk9QRkxJfXRyZWUubyAke1pPUEZMSX1sejc3Lm8gJHtaT1BGTEl9Y2FjaGUubyAke1pPUEZMSX1oYXNoLm8gJHtaT1BGTEl9dXRpbC5vICR7Wk9QRkxJfXNxdWVlemUubyAke1pPUEZMSX1rYXRhamFpbmVuLm8KKy0JJChDQykgJChMREZMQUdTKSAtbyBwaWd6biAkXiAtbG0KKysJJChDQykgLW8gcGlnem4gJF4gJChMREZMQUdTKSAtbHogLWxtCisgCisgcGlnem4ubzogcGlnei5jIHRyeS5oCisgCSQoQ0MpICQoQ0ZMQUdTKSAtRERFQlVHIC1ETk9USFJFQUQgLWcgLWMgLW8gcGlnem4ubyBwaWd6LmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3pfMi4zLjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MGJlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgcGlnei5pbmMKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BpZ3ouYztiZWdpbmxpbmU9NztlbmRsaW5lPTIxO21kNT1hMjFkNDA3NWNiMDBhYjRjYTE3ZmNlNWU3NTM0Y2E5NSIKKworU1JDX1VSSSArPSAiZmlsZTovL2xpbmstb3JkZXIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMWQ3YTE2Y2NlNzc5MjljYzFhNzhhYTFiZGZiNjhjYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZThiNjdiNDMyY2U3OTA3NTc1YTU0OWYzZTFjYWM0NzA5NzgxYmEwZjZiNDhhZmVhOWY1OTM2OTg0NmI1MDljIgorCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvZml4LWNvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0YWU4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorCitleGVjX3ByZWZpeCBpcyAvdXNyIGRlZmF1bHQgaW4gT0UtQ29yZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogcHJvY3BzLW5nLTMuMy4xMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwcm9jcHMtbmctMy4zLjEwLm9yaWcvY29uZmlndXJlLmFjCisrKysgcHJvY3BzLW5nLTMuMy4xMC9jb25maWd1cmUuYWMKK0BAIC03MCw3ICs3MCw3IEBAIEFDX0ZVTkNfTU1BUAorIEFDX0ZVTkNfUkVBTExPQworIEFDX0ZVTkNfU1RSVE9ECisgCistdXNyYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L3Vzci9iaW4nCisrdXNyYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKKyBBQ19TVUJTVChbdXNyYmluX2V4ZWNkaXJdKQorIAorIEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTQuMV0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9zeXNjdGwuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL3N5c2N0bC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZTc0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9zeXNjdGwuY29uZgpAQCAtMCwwICsxLDY0IEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGlzIHRha2VuIGZyb20gRGViaWFuLgorIworIyAvZXRjL3N5c2N0bC5jb25mIC0gQ29uZmlndXJhdGlvbiBmaWxlIGZvciBzZXR0aW5nIHN5c3RlbSB2YXJpYWJsZXMKKyMgU2VlIHN5c2N0bC5jb25mICg1KSBmb3IgaW5mb3JtYXRpb24uCisjCisKKyNrZXJuZWwuZG9tYWlubmFtZSA9IGV4YW1wbGUuY29tCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgdG8gc3RvcCBsb3ctbGV2ZWwgbWVzc2FnZXMgb24gY29uc29sZQorI2tlcm5lbC5wcmludGsgPSA0IDQgMSA3CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjMworIyBGdW5jdGlvbnMgcHJldmlvdXNseSBmb3VuZCBpbiBuZXRiYXNlCisjCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IHR3byBsaW5lcyB0byBlbmFibGUgU3Bvb2YgcHJvdGVjdGlvbiAocmV2ZXJzZS1wYXRoIGZpbHRlcikKKyMgVHVybiBvbiBTb3VyY2UgQWRkcmVzcyBWZXJpZmljYXRpb24gaW4gYWxsIGludGVyZmFjZXMgdG8KKyMgcHJldmVudCBzb21lIHNwb29maW5nIGF0dGFja3MKK25ldC5pcHY0LmNvbmYuZGVmYXVsdC5ycF9maWx0ZXI9MQorbmV0LmlwdjQuY29uZi5hbGwucnBfZmlsdGVyPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgVENQL0lQIFNZTiBjb29raWVzCisjbmV0LmlwdjQudGNwX3N5bmNvb2tpZXM9MQorCisjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBwYWNrZXQgZm9yd2FyZGluZyBmb3IgSVB2NAorI25ldC5pcHY0LmlwX2ZvcndhcmQ9MQorCisjIFVuY29tbWVudCB0aGUgbmV4dCBsaW5lIHRvIGVuYWJsZSBwYWNrZXQgZm9yd2FyZGluZyBmb3IgSVB2NgorI25ldC5pcHY2LmNvbmYuYWxsLmZvcndhcmRpbmc9MQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkaXRpb25hbCBzZXR0aW5ncyAtIHRoZXNlIHNldHRpbmdzIGNhbiBpbXByb3ZlIHRoZSBuZXR3b3JrCisjIHNlY3VyaXR5IG9mIHRoZSBob3N0IGFuZCBwcmV2ZW50IGFnYWluc3Qgc29tZSBuZXR3b3JrIGF0dGFja3MKKyMgaW5jbHVkaW5nIHNwb29maW5nIGF0dGFja3MgYW5kIG1hbiBpbiB0aGUgbWlkZGxlIGF0dGFja3MgdGhyb3VnaAorIyByZWRpcmVjdGlvbi4gU29tZSBuZXR3b3JrIGVudmlyb25tZW50cywgaG93ZXZlciwgcmVxdWlyZSB0aGF0IHRoZXNlCisjIHNldHRpbmdzIGFyZSBkaXNhYmxlZCBzbyByZXZpZXcgYW5kIGVuYWJsZSB0aGVtIGFzIG5lZWRlZC4KKyMKKyMgSWdub3JlIElDTVAgYnJvYWRjYXN0cworI25ldC5pcHY0LmljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cyA9IDEKKyMKKyMgSWdub3JlIGJvZ3VzIElDTVAgZXJyb3JzCisjbmV0LmlwdjQuaWNtcF9pZ25vcmVfYm9ndXNfZXJyb3JfcmVzcG9uc2VzID0gMQorIworIyBEbyBub3QgYWNjZXB0IElDTVAgcmVkaXJlY3RzIChwcmV2ZW50IE1JVE0gYXR0YWNrcykKKyNuZXQuaXB2NC5jb25mLmFsbC5hY2NlcHRfcmVkaXJlY3RzID0gMAorI25ldC5pcHY2LmNvbmYuYWxsLmFjY2VwdF9yZWRpcmVjdHMgPSAwCisjIF9vcl8KKyMgQWNjZXB0IElDTVAgcmVkaXJlY3RzIG9ubHkgZm9yIGdhdGV3YXlzIGxpc3RlZCBpbiBvdXIgZGVmYXVsdAorIyBnYXRld2F5IGxpc3QgKGVuYWJsZWQgYnkgZGVmYXVsdCkKKyMgbmV0LmlwdjQuY29uZi5hbGwuc2VjdXJlX3JlZGlyZWN0cyA9IDEKKyMKKyMgRG8gbm90IHNlbmQgSUNNUCByZWRpcmVjdHMgKHdlIGFyZSBub3QgYSByb3V0ZXIpCisjbmV0LmlwdjQuY29uZi5hbGwuc2VuZF9yZWRpcmVjdHMgPSAwCisjCisjIERvIG5vdCBhY2NlcHQgSVAgc291cmNlIHJvdXRlIHBhY2tldHMgKHdlIGFyZSBub3QgYSByb3V0ZXIpCisjbmV0LmlwdjQuY29uZi5hbGwuYWNjZXB0X3NvdXJjZV9yb3V0ZSA9IDAKKyNuZXQuaXB2Ni5jb25mLmFsbC5hY2NlcHRfc291cmNlX3JvdXRlID0gMAorIworIyBMb2cgTWFydGlhbiBQYWNrZXRzCisjbmV0LmlwdjQuY29uZi5hbGwubG9nX21hcnRpYW5zID0gMQorIworCisja2VybmVsLnNobW1heCA9IDE0MTc2MjU2MApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZmFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwc18zLjMuMTAuYmIKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gYW5kIHByb2Nlc3MgbW9uaXRvcmluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJQcm9jcHMgY29udGFpbnMgYSBzZXQgb2Ygc3lzdGVtIHV0aWxpdGllcyB0aGF0IHByb3ZpZGUgc3lzdGVtIGluZm9ybWF0aW9uIGFib3V0IHByb2Nlc3NlcyB1c2luZyBcCit0aGUgL3Byb2MgZmlsZXN5c3RlbS4gVGhlIHBhY2thZ2UgaW5jbHVkZXMgdGhlIHByb2dyYW1zIHBzLCB0b3AsIHZtc3RhdCwgdywga2lsbCwgYW5kIHNraWxsLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0b3Jpb3VzLm9yZy9wcm9jcHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNPSJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00Y2Y2NmE0OTg0MTIwMDA3Yzk4ODFjYzg3MWNmNDlkYiBcCisgICAgICAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJuY3Vyc2VzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wcm9jcHMtbmcvUHJvZHVjdGlvbi9wcm9jcHMtbmctJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lzY3RsLmNvbmYgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjFmYjdmM2Y2YmY5MmNlNmM1YzllZDk5NDlhZTg1OGZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEwMmU2Zjk4OTc0ZGZjZWFiNzk4ODRkZjkwMmNhM2RmMzBiMGU5YmFkNmQ3NmFlZTBmYjVkY2UxN2YyNjdmMDQiCisKK1MgPSAiJHtXT1JLRElSfS9wcm9jcHMtbmctJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1za2lsbCAtLWRpc2FibGUtbW9kZXJuLXRvcCIKKworQ1BQRkxBR1MgKz0gIi1JJHtTfSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJWyAiJHtiaW5kaXJ9IiAhPSAiJHtiYXNlX2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7YmFzZV9iaW5kaXJ9LyRpOyBkb25lCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJWyAiJHtzYmluZGlyfSIgIT0gIiR7YmFzZV9zYmluZGlyfSIgXSAmJiBmb3IgaSBpbiAke2Jhc2Vfc2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke3NiaW5kaXJ9LyRpICR7RH0ke2Jhc2Vfc2JpbmRpcn0vJGk7IGRvbmUKKyAgICAgICAgaWYgWyAiJHtiYXNlX3NiaW5kaXJ9IiAhPSAiJHtzYmluZGlyfSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHJtZGlyICR7RH0ke3NiaW5kaXJ9CisgICAgICAgIGZpCisKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zeXNjdGwuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNjdGwuY29uZgorICAgICAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjdGwuZAorICAgICAgICAgICAgICAgIGxuIC1zZiAuLi9zeXNjdGwuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNjdGwuZC85OS1zeXNjdGwuY29uZgorICAgICAgICBmaQorfQorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXNjdGwuY29uZiIKKworYmluZGlyX3Byb2dzID0gImZyZWUgcGtpbGwgcG1hcCBwZ3JlcCBwd2R4IHNraWxsIHNuaWNlIHRvcCB1cHRpbWUiCitiYXNlX2JpbmRpcl9wcm9ncyArPSAia2lsbCBwaWRvZiBwcyB3YXRjaCIKK2Jhc2Vfc2JpbmRpcl9wcm9ncyArPSAic3lzY3RsIgorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIiR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke2Jhc2Vfc2JpbmRpcl9wcm9nc30iCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJraWxsLjEgdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdXB0aW1lLjFdID0gIiR7bWFuZGlyfS9tYW4xL3VwdGltZS4xIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2VfYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX2JpbmRpcicsIFRydWUpLCBwcm9nKSkKKworICAgIGZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDEtVHlwby1pbi1mdXNlci1tYWtlcy1NLW9uLWFsbC10aGUtdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdkNjBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSAzNjM4Y2M1NWI0ZDA4ODUxZmFiYTQ2NjM1ZDczN2IyNGQwMTY2NjViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJhZCBKb3JzY2ggPGFub21pZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiBGcmksIDI4IEZlYiAyMDE0IDIxOjU1OjAyICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFR5cG8gaW4gZnVzZXIgbWFrZXMgLU0gb24gYWxsIHRoZSB0aW1lCisKK0JyYWQgZm91bmQgdGhhdCBmdXNlciBoYWQgdGhlIC1NIG9wdGlvbiBvbiBhbGwgdGhlIHRpbWUuCitBIHNpbXBsZSBidXQgc2lnbmlmaWNhbnQgdHlwbyBjYXVzZWQgdGhpcywgdGhhbmtzIHRoZSB0aGUgcGF0Y2guCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzQwMjc1CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ3JhaWcgU21hbGwgPGNzbWFsbEBlbmMuY29tLmF1PgorLS0tCisgQ2hhbmdlTG9nICAgfCA0ICsrKysKKyBzcmMvZnVzZXIuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCitpbmRleCBmZDFjY2NmLi5lNWY3ODRjIDEwMDY0NAorLS0tIGEvQ2hhbmdlTG9nCisrKysgYi9DaGFuZ2VMb2cKK0BAIC0xLDMgKzEsNyBAQAorK0NoYW5nZXMgaW4gMjIuMjIKKys9PT09PT09PT09PT09PT09CisrCSogRml4ZWQgdHlwbyBpbiBmdXNlciB3aGljaCBoYXMgLU0gb24gRGViaWFuICM3NDAyNzUKKysKKyBDaGFuZ2VzIGluIDIyLjIxCisgPT09PT09PT09PT09PT09PQorIAkqIE1pc3NpbmcgY29tbWEgaW4gZnVzZXIoMSkgYWRkZWQgRGViaWFuICM3MDIzOTEKK2RpZmYgLS1naXQgYS9zcmMvZnVzZXIuYyBiL3NyYy9mdXNlci5jCitpbmRleCBiNDg1ZjY1Li4zODliMzAyIDEwMDY0NAorLS0tIGEvc3JjL2Z1c2VyLmMKKysrKyBiL3NyYy9mdXNlci5jCitAQCAtMTE3NCw3ICsxMTc0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCXVzYWdlKF8oIk5vIHByb2Nlc3Mgc3BlY2lmaWNhdGlvbiBnaXZlbiIpKTsKKyAKKyAJLyogQ2hlY2sgaWYgLU0gZmxhZyB3YXMgdXNlZCBhbmQgaWYgc28gY2hlY2sgbW91bnRzICovCistCWlmIChvcHRzICogT1BUX0lTTU9VTlRQT0lOVCkgeworKwlpZiAob3B0cyAmIE9QVF9JU01PVU5UUE9JTlQpIHsKKyAJICAgIGNoZWNrX21vdW50cG9pbnRzKCZtb3VudHMsICZuYW1lc19oZWFkLCAmbmFtZXNfdGFpbCk7CisgCX0KKyAKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhhZmNhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMi1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGFhNjZhZmVjZDhiYTljYzQxMzlmMjVhYjE1ZWMzMTUxNzM0MTNhN2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorRGF0ZTogV2VkLCAyMCBBdWcgMjAxNCAxMDozMTozNyArMDAwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIDxsaW1pdHMuaD4gZm9yIFBBVEhfTUFYCisKK1doZW4gYnVpbGRpbmcgYWdhaW5zdCBtdXNsIGxpYmMsIFBBVEhfTUFYIGlzIGRlZmluZWQgaW4gPGxpbWl0cy5oPi4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCAoU2hvdWxkIGJlIGluIG5leHQgcmVsZWFzZSBhZnRlciAyMi4yMSkKKy0tLQorIHNyYy9wc3RyZWUuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3BzdHJlZS5jIGIvc3JjL3BzdHJlZS5jCitpbmRleCAwNzFlNmM0Li4wZDI4MjYwIDEwMDY0NAorLS0tIGEvc3JjL3BzdHJlZS5jCisrKysgYi9zcmMvcHN0cmVlLmMKK0BAIC00MSw2ICs0MSw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisgCisgI2luY2x1ZGUgImkxOG4uaCIKKyAjaW5jbHVkZSAiY29tbS5oIgorLS0gCisyLjAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlMDY1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjLmluYwpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgcHJvY2Vzc2VzIG9uIHlvdXIgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIHBzbWlzYyBwYWNrYWdlIGNvbnRhaW5zIHV0aWxpdGllcyBmb3IgbWFuYWdpbmcgcHJvY2Vzc2VzIG9uIHlvdXIgXAorc3lzdGVtOiBwc3RyZWUsIGtpbGxhbGwgYW5kIGZ1c2VyLiAgVGhlIHBzdHJlZSBjb21tYW5kIGRpc3BsYXlzIGEgdHJlZSBcCitzdHJ1Y3R1cmUgb2YgYWxsIG9mIHRoZSBydW5uaW5nIHByb2Nlc3NlcyBvbiB5b3VyIHN5c3RlbS4gIFRoZSBraWxsYWxsIFwKK2NvbW1hbmQgc2VuZHMgYSBzcGVjaWZpZWQgc2lnbmFsIChTSUdURVJNIGlmIG5vdGhpbmcgaXMgc3BlY2lmaWVkKSB0byBcCitwcm9jZXNzZXMgaWRlbnRpZmllZCBieSBuYW1lLiAgVGhlIGZ1c2VyIGNvbW1hbmQgaWRlbnRpZmllcyB0aGUgUElEcyBcCitvZiBwcm9jZXNzZXMgdGhhdCBhcmUgdXNpbmcgc3BlY2lmaWVkIGZpbGVzIG9yIGZpbGVzeXN0ZW1zLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAibmN1cnNlcyB2aXJ0dWFsL2xpYmludGwiCitMSUNFTlNFID0gIkdQTHYyIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wc21pc2MvcHNtaXNjLSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9L3BzbWlzYy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitQQUNLQUdFUyA9KyAiZnVzZXIgZnVzZXItZG9jIGtpbGxhbGwga2lsbGFsbC1kb2MgcHN0cmVlIHBzdHJlZS1kb2MiCitQQUNLQUdFUyArPSAicHNtaXNjLWV4dHJhcyIKKworRklMRVNfJHtQTn0gPSAiIgorUkRFUEVORFNfJHtQTn0gPSAiZnVzZXIga2lsbGFsbCBwc3RyZWUiCisKK0ZJTEVTX2Z1c2VyID0gIiR7YmluZGlyfS9mdXNlci4ke0JQTn0iCitGSUxFU19mdXNlci1kb2MgPSAiJHttYW5kaXJ9L21hbjEvZnVzZXIqIgorCitGSUxFU19raWxsYWxsID0gIiR7YmluZGlyfS9raWxsYWxsLiR7QlBOfSIKK0ZJTEVTX2tpbGxhbGwtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2tpbGxhbGwqIgorCitGSUxFU19wc3RyZWUgPSAiJHtiaW5kaXJ9L3BzdHJlZSIKK0ZJTEVTX3BzdHJlZS1kb2MgPSAiJHttYW5kaXJ9L21hbjEvcHN0cmVlKiIKKworRklMRVNfcHNtaXNjLWV4dHJhcyA9ICIke2JpbmRpcn0iCitGSUxFU19wc21pc2MtZXh0cmFzLWRvYyA9ICIke21hbmRpcn0iCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI5MCIKKworQUxURVJOQVRJVkVfa2lsbGFsbCA9ICJraWxsYWxsIgorCitBTFRFUk5BVElWRV9mdXNlciA9ICJmdXNlciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjXzIyLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2NfMjIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjXzIyLjIxLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgcHNtaXNjLmluYworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTM1YzBmZDZlYjIwODI4ODI2MmIzODVmYTY1NmYxYmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTczMjNjYWQ2MTkyMTA4NDViNjk2ZDdkNzIyYzM4Mzg1MmIyYWNiNWM0OWI1YjA4NTJjNGYyOWM3N2E4MTQ1YSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVHlwby1pbi1mdXNlci1tYWtlcy1NLW9uLWFsbC10aGUtdGltZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaCBcCisgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQ3ZmJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaApAQCAtMCwwICsxLDc1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHF1b3RhLXRvb2xzLm9yaWcvY29uZmlndXJlLmluCisrKysgcXVvdGEtdG9vbHMvY29uZmlndXJlLmluCitAQCAtMTUxLDMzICsxNTEsNDYgQEAgQUNfU1VCU1QoUVVPVEFfTkVUTElOS19QUk9HKQorIEFDX1NVQlNUKE5FVExJTktMSUJTKQorCisgQUNfU0VBUkNIX0xJQlMoZ2V0aG9zdGJ5bmFtZSwgbnNsKQorLUFDX01TR19DSEVDS0lORyhmb3IgaG9zdF9hY2Nlc3MgaW4gLWx3cmFwKQorLUFDX0NBQ0hFX1ZBTChhY19jdl9saWJfd3JhcF9tYWluLAorLQlzYXZlZF9MSUJTPSIkTElCUyIKKy0JTElCUz0iJExJQlMgLWx3cmFwIgorLQlbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLQkjaW5jbHVkZSA8c3RkaW8uaD4KKy0JI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQkjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLQkjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorLQkjaW5jbHVkZSA8dGNwZC5oPgorLQlzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CistCWludCBkZW55X3NldmVyaXR5LCBhbGxvd19zZXZlcml0eTtdXSxbW2hvc3RzX2FjY2VzcygmcmVxdWVzdCk7XV0pXSwKKy0JZG5sIFdlIGFsd2F5cyByZXN0b3JlIExJQlMgYXMgd2UgYWRkIC1sd3JhcCBpbiB0aGUgbmV4dCBjaGVjaworLQlbYWNfY3ZfbGliX3dyYXBfbWFpbj15ZXM7IExJQlM9IiRzYXZlZF9MSUJTIjsgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKy0JW2FjX2N2X2xpYl93cmFwX21haW49bm87IExJQlM9IiRzYXZlZF9MSUJTIjsgQUNfTVNHX1JFU1VMVChubyldKQorLQldKQorCistaWYgdGVzdCAke2FjX2N2X2xpYl93cmFwX21haW59ID0geWVzOyB0aGVuCistCUFDX0NIRUNLX0hFQURFUih0Y3BkLmgsLCBbCistCQllY2hvICdFUlJPUjogY291bGQgbm90IGZpbmQgdGNwZC5oIC0gbWlzc2luZyBUQ1Agd3JhcHBlcnMgcGFja2FnZScKKy0JCWV4aXQgMQorLQldKQorLQlMSUJTPSIkTElCUyAtbHdyYXAiCistCUFDX0RFRklORShbSE9TVFNfQUNDRVNTXSwgMSwgW1VzZSBob3N0cy5hbGxvdyBhbmQgaG9zdHMuZGVueSBmb3IgYWNjZXNzIGNoZWNraW5nIG9mIHJwYy5ycXVvdGFkXSkKKy0JQ09NUElMRV9PUFRTPSIkQ09NUElMRV9PUFRTIEhPU1RTX0FDQ0VTUyIKKytBQ19BUkdfV0lUSCh0Y3B3cmFwcGVycywKKysJWyAgLS13aXRoLXRjcHdyYXBwZXJzPVt5ZXMvbm8vdHJ5XSAgIFVzZSBob3N0cy5hbGxvdyBhbmQgaG9zdHMuZGVueSBmb3IgYWNjZXNzIGNoZWNraW5nIG9mIHJwYy5ycXVvdGEgW2RlZmF1bHQ9eWVzLCBpZiBhdmFpbGFibGUuXV0sCisrCSwKKysJd2l0aF90Y3B3cmFwcGVycz0idHJ5IikKKysKKytpZiB0ZXN0ICJ4JHdpdGhfdGNwd3JhcHBlcnMiICE9IHhubzsgdGhlbgorKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIGhvc3RfYWNjZXNzIGluIC1sd3JhcCkKKysJQUNfQ0FDSEVfVkFMKGFjX2N2X2xpYl93cmFwX21haW4sCisrCQlzYXZlZF9MSUJTPSIkTElCUyIKKysJCUxJQlM9IiRMSUJTIC1sd3JhcCIKKysJCVtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisrCQkjaW5jbHVkZSA8c3RkaW8uaD4KKysJCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrCQkjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKwkJI2luY2x1ZGUgPHRjcGQuaD4KKysJCXN0cnVjdCByZXF1ZXN0X2luZm8gcmVxdWVzdDsKKysJCWludCBkZW55X3NldmVyaXR5LCBhbGxvd19zZXZlcml0eTtdXSxbW2hvc3RzX2FjY2VzcygmcmVxdWVzdCk7XV0pXSwKKysJCWRubCBXZSBhbHdheXMgcmVzdG9yZSBMSUJTIGFzIHdlIGFkZCAtbHdyYXAgaW4gdGhlIG5leHQgdHJ5CisrCQlbYWNfY3ZfbGliX3dyYXBfbWFpbj15ZXM7IExJQlM9IiRzYXZlZF9MSUJTIjsgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKysJCVthY19jdl9saWJfd3JhcF9tYWluPW5vOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQobm8pXSkKKysJCV0pCisrCisrCWlmIHRlc3QgIngkYWNfY3ZfbGliX3dyYXBfbWFpbiIgPSB4eWVzOyB0aGVuCisrCQlBQ19DSEVDS19IRUFERVIodGNwZC5oLCwgWworKwkJCWlmIHRlc3QgIngkd2l0aF90Y3B3cmFwcGVycyIgIT0geHRyeTsgdGhlbgorKwkJCQlBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBmaW5kIHRjcGQuaCAtIG1pc3NpbmcgVENQIHdyYXBwZXJzIHBhY2thZ2VdKQorKwkJCWZpCisrCQldKQorKworKwkJTElCUz0iJExJQlMgLWx3cmFwIgorKwkJQUNfREVGSU5FKFtIT1NUU19BQ0NFU1NdLCAxLCBbVXNlIGhvc3RzLmFsbG93IGFuZCBob3N0cy5kZW55IGZvciBhY2Nlc3MgY2hlY2tpbmcgb2YgcnBjLnJxdW90YWRdKQorKwkJQ09NUElMRV9PUFRTPSIkQ09NUElMRV9PUFRTIEhPU1RTX0FDQ0VTUyIKKysJZWxpZiB0ZXN0ICJ4JHdpdGhfdGNwd3JhcHBlcnMiICE9IHh0cnk7IHRoZW4KKysJCUFDX01TR19FUlJPUihbY291bGQgbm90IGZpbmQgbGlid3JhcCAtIG1pc3NpbmcgVENQIHdyYXBwZXJzIHBhY2thZ2VdKQorKwlmaQorIGZpCisKKysKKyBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyBBQ19DX0NPTlNUCisgQUNfQ19JTkxJTkUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2U2MGZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2ZjbnRsLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitJbmNsdWRlIGZjbnRsLmggdG8gcGFjaWZ5IGNvbXBpbGVyIGVycm9ycyBvbiBtdXNsCitsaWtlCisKK2Vycm9yOiB1bmtub3duIHR5cGUgbmFtZSAnbG9mZl90JworQ292ZXIgcnBjIGhlYWRlcnMgdW5kZXIgcHJvcGVyIGNvbmRpdGlvbmFsCitEb250IHVzZSBfX1AgaXRzIHVuZGVmaW5lZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworbmRleDogcXVvdGEtdG9vbHMvcXVvdGEuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3RhLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhLmgKKysrKyBxdW90YS10b29scy9xdW90YS5oCitAQCAtMTY1LDYgKzE2NSw2IEBAIGVudW0geworIAkjZW5kaWYKKyAjZW5kaWYKKyAKKy1sb25nIHF1b3RhY3RsIF9fUCgoaW50LCBjb25zdCBjaGFyICosIHFpZF90LCBjYWRkcl90KSk7CisrbG9uZyBxdW90YWN0bCAoaW50LCBjb25zdCBjaGFyICosIHFpZF90LCBjYWRkcl90KTsKKyAKKyAjZW5kaWYgLyogX1FVT1RBXyAqLworSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3RhY2hlY2suYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdGFjaGVjay5jCisrKysgcXVvdGEtdG9vbHMvcXVvdGFjaGVjay5jCitAQCAtMTksNiArMTksNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisgCisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3RhaW8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdGFpby5jCisrKysgcXVvdGEtdG9vbHMvcXVvdGFpby5jCitAQCAtMTIsNiArMTIsNyBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KK0luZGV4OiBxdW90YS10b29scy9kcWJsa192Mi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9kcWJsa192Mi5oCisrKysgcXVvdGEtdG9vbHMvZHFibGtfdjIuaAorQEAgLTcsNiArNyw3IEBACisgI2lmbmRlZiBHVUFSRF9EUUJMS19WMl9ICisgI2RlZmluZSBHVUFSRF9EUUJMS19WMl9ICisgCisrI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlICJxdW90YV90cmVlLmgiCisgCitJbmRleDogcXVvdGEtdG9vbHMvcXVvdGFvcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvcXVvdGFvcHMuYworKysrIHF1b3RhLXRvb2xzL3F1b3Rhb3BzLmMKK0BAIC0zNCw3ICszNCw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KK0luZGV4OiBxdW90YS10b29scy9ycXVvdGFfY2xpZW50LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3JxdW90YV9jbGllbnQuYworKysrIHF1b3RhLXRvb2xzL3JxdW90YV9jbGllbnQuYworQEAgLTE5LDcgKzE5LDkgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlIDxycGMvcnBjLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KK0BAIC0zNSw3ICszNyw5IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorICNpbmNsdWRlICJtbnRvcHQuaCIKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgInJxdW90YS5oIgorKyNlbmRpZgorICNpbmNsdWRlICJjb21tb24uaCIKKyAjaW5jbHVkZSAicXVvdGFpby5oIgorICNpbmNsdWRlICJxdW90YXN5cy5oIgorSW5kZXg6IHF1b3RhLXRvb2xzL3NldHF1b3RhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3NldHF1b3RhLmMKKysrKyBxdW90YS10b29scy9zZXRxdW90YS5jCitAQCAtNyw3ICs3LDkgQEAKKyAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlIDxycGMvcnBjLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQyZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwxODUgQEAKK1VzZSBwcm9wZXIgQzk5IGludGVnZXIgdHlwZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBxdW90YS10b29scy9ieWxhYmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL2J5bGFiZWwuYworKysrIHF1b3RhLXRvb2xzL2J5bGFiZWwuYworQEAgLTIwLDYgKzIwLDcgQEAKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorIAorICNpbmNsdWRlICJieWxhYmVsLmgiCisgI2luY2x1ZGUgImNvbW1vbi5oIgorQEAgLTM3LDMyICszOCwzMiBAQCBzdGF0aWMgc3RydWN0IHV1aWRDYWNoZV9zIHsKKyAKKyAjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMJMHhFRjUzCisgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgeworLQl1X2NoYXIgc19kdW1teTFbNTZdOworLQl1X2NoYXIgc19tYWdpY1syXTsKKy0JdV9jaGFyIHNfZHVtbXkyWzQ2XTsKKy0JdV9jaGFyIHNfdXVpZFsxNl07CistCXVfY2hhciBzX3ZvbHVtZV9uYW1lWzE2XTsKKysJdWludDhfdCBzX2R1bW15MVs1Nl07CisrCXVpbnQ4X3Qgc19tYWdpY1syXTsKKysJdWludDhfdCBzX2R1bW15Mls0Nl07CisrCXVpbnQ4X3Qgc191dWlkWzE2XTsKKysJdWludDhfdCBzX3ZvbHVtZV9uYW1lWzE2XTsKKyB9OworIAorLSNkZWZpbmUgZXh0Mm1hZ2ljKHMpCSgodWludCkgcy5zX21hZ2ljWzBdICsgKCgodWludCkgcy5zX21hZ2ljWzFdKSA8PCA4KSkKKysjZGVmaW5lIGV4dDJtYWdpYyhzKQkoKHVpbnQzMl90KSBzLnNfbWFnaWNbMF0gKyAoKCh1aW50MzJfdCkgcy5zX21hZ2ljWzFdKSA8PCA4KSkKKyAKKyAjZGVmaW5lIFhGU19TVVBFUl9NQUdJQyAiWEZTQiIKKyAjZGVmaW5lIFhGU19TVVBFUl9NQUdJQzIgIkJTRlgiCisgc3RydWN0IHhmc19zdXBlcl9ibG9jayB7CistCXVfY2hhciBzX21hZ2ljWzRdOworLQl1X2NoYXIgc19kdW1teVsyOF07CistCXVfY2hhciBzX3V1aWRbMTZdOworLQl1X2NoYXIgc19kdW1teTJbNjBdOworLQl1X2NoYXIgc19mc25hbWVbMTJdOworKwl1aW50OF90IHNfbWFnaWNbNF07CisrCXVpbnQ4X3Qgc19kdW1teVsyOF07CisrCXVpbnQ4X3Qgc191dWlkWzE2XTsKKysJdWludDhfdCBzX2R1bW15Mls2MF07CisrCXVpbnQ4X3Qgc19mc25hbWVbMTJdOworIH07CisgCisgI2RlZmluZSBSRUlTRVJfU1VQRVJfTUFHSUMJIlJlSXNFcjJGcyIKKyBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgeworLQl1X2NoYXIgc19kdW1teTFbNTJdOworLQl1X2NoYXIgc19tYWdpY1sxMF07CistCXVfY2hhciBzX2R1bW15MlsyMl07CistCXVfY2hhciBzX3V1aWRbMTZdOworLQl1X2NoYXIgc192b2x1bWVfbmFtZVsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTFbNTJdOworKwl1aW50OF90IHNfbWFnaWNbMTBdOworKwl1aW50OF90IHNfZHVtbXkyWzIyXTsKKysJdWludDhfdCBzX3V1aWRbMTZdOworKwl1aW50OF90IHNfdm9sdW1lX25hbWVbMTZdOworIH07CisgCisgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBzd2FwcGVkKHVuc2lnbmVkIHNob3J0IGEpCitAQCAtMjIyLDcgKzIyMyw3IEBAIHN0YXRpYyBjaGFyICpnZXRfc3BlY19ieV94KGludCBuLCBjb25zdAorIAlyZXR1cm4gTlVMTDsKKyB9CisgCistc3RhdGljIHVfY2hhciBmcm9taGV4KGNoYXIgYykKKytzdGF0aWMgdWludDhfdCBmcm9taGV4KGNoYXIgYykKKyB7CisgCWlmIChpc2RpZ2l0KGMpKQorIAkJcmV0dXJuIChjIC0gJzAnKTsKK0BAIC0yMzQsNyArMjM1LDcgQEAgc3RhdGljIHVfY2hhciBmcm9taGV4KGNoYXIgYykKKyAKKyBzdGF0aWMgY2hhciAqZ2V0X3NwZWNfYnlfdXVpZChjb25zdCBjaGFyICpzKQorIHsKKy0JdV9jaGFyIHV1aWRbMTZdOworKwl1aW50OF90IHV1aWRbMTZdOworIAlpbnQgaTsKKyAKKyAJaWYgKHN0cmxlbihzKSAhPSAzNiB8fCBzWzhdICE9ICctJyB8fCBzWzEzXSAhPSAnLScgfHwgc1sxOF0gIT0gJy0nIHx8IHNbMjNdICE9ICctJykKK0luZGV4OiBxdW90YS10b29scy9xdW90LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3QuYworKysrIHF1b3RhLXRvb2xzL3F1b3QuYworQEAgLTQ3LDYgKzQ3LDcgQEAKKyAjaW5jbHVkZSA8dXRtcC5oPgorICNpbmNsdWRlIDxwd2QuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPgorIAorICNpbmNsdWRlICJwb3QuaCIKKyAjaW5jbHVkZSAicXVvdC5oIgorQEAgLTU2LDggKzU3LDggQEAKKyAjaW5jbHVkZSAicXVvdGFzeXMuaCIKKyAKKyAjZGVmaW5lCVRTSVpFCTUwMAorLXN0YXRpYyBfX3VpbnQ2NF90IHNpemVzW1RTSVpFXTsKKy1zdGF0aWMgX191aW50NjRfdCBvdmVyZmxvdzsKKytzdGF0aWMgdWludDY0X3Qgc2l6ZXNbVFNJWkVdOworK3N0YXRpYyB1aW50NjRfdCBvdmVyZmxvdzsKKyAKKyBzdGF0aWMgaW50IGFmbGFnOworIHN0YXRpYyBpbnQgY2ZsYWc7CitAQCAtNzIsNyArNzMsNyBAQCBzdGF0aWMgdGltZV90IG5vdzsKKyBjaGFyICpwcm9nbmFtZTsKKyAKKyBzdGF0aWMgdm9pZCBtb3VudHRhYmxlKHZvaWQpOworLXN0YXRpYyBjaGFyICppZG5hbWUoX191aW50MzJfdCwgaW50KTsKKytzdGF0aWMgY2hhciAqaWRuYW1lKHVpbnQzMl90LCBpbnQpOworIHN0YXRpYyB2b2lkIHJlcG9ydChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyBzdGF0aWMgdm9pZCBjcmVwb3J0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyAKK0BAIC0xNzMsNyArMTc0LDcgQEAgc3RhdGljIGludCBxY21wKGR1X3QgKiBwMSwgZHVfdCAqIHAyKQorIHN0YXRpYyB2b2lkIGNyZXBvcnQoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnNkaXIpCisgeworIAlpbnQgaTsKKy0JX191aW50NjRfdCB0ID0gMDsKKysJdWludDY0X3QgdCA9IDA7CisgCisgCXByaW50ZihfKCIlcyAoJXMpOlxuIiksIGZpbGUsIGZzZGlyKTsKKyAJZm9yIChpID0gMDsgaSA8IFRTSVpFIC0gMTsgaSsrKQorQEAgLTIxOSw3ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqZmlsZSwgY29uCisgCX0KKyB9CisgCistc3RhdGljIGlkY2FjaGVfdCAqZ2V0bmV4dGVudChpbnQgdHlwZSwgX191aW50MzJfdCBpZCwgaW50IGJ5aWQpCisrc3RhdGljIGlkY2FjaGVfdCAqZ2V0bmV4dGVudChpbnQgdHlwZSwgdWludDMyX3QgaWQsIGludCBieWlkKQorIHsKKyAJc3RydWN0IHBhc3N3ZCAqcHc7CisgCXN0cnVjdCBncm91cCAgKmdyOworQEAgLTI0MCw3ICsyNDEsNyBAQCBzdGF0aWMgaWRjYWNoZV90ICpnZXRuZXh0ZW50KGludCB0eXBlLCBfCisgCXJldHVybiAmaWRjOworIH0KKyAKKy1zdGF0aWMgY2hhciAqaWRuYW1lKF9fdWludDMyX3QgaWQsIGludCB0eXBlKQorK3N0YXRpYyBjaGFyICppZG5hbWUodWludDMyX3QgaWQsIGludCB0eXBlKQorIHsKKyAJaWRjYWNoZV90ICpuY3AsICppZHA7CisgCXN0YXRpYyBpZGNhY2hlX3QgbmNbMl1bTklEXTsKK0BAIC0yODYsOCArMjg3LDggQEAgc3RhdGljIHZvaWQgYWNjdFhGUyh4ZnNfYnN0YXRfdCAqcCkKKyB7CisgCXJlZ2lzdGVyIGR1X3QgKmRwOworIAlkdV90ICoqaHA7CistCV9fdWludDY0X3Qgc2l6ZTsKKy0JX191aW50MzJfdCBpLCBpZDsKKysJdWludDY0X3Qgc2l6ZTsKKysJdWludDMyX3QgaSwgaWQ7CisgCisgCWlmICgocC0+YnNfbW9kZSAmIFNfSUZNVCkgPT0gMCkKKyAJCXJldHVybjsKK0luZGV4OiBxdW90YS10b29scy9xdW90LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3QuaAorKysrIHF1b3RhLXRvb2xzL3F1b3QuaAorQEAgLTM1LDE4ICszNSwxOCBAQAorICNkZWZpbmUJU0VDMjRIUgkoNjAqNjAqMjQpCS8qIHNlY29uZHMgcGVyIGRheSAqLworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JX191aW50MzJfdCBpZDsKKysJdWludDMyX3QgaWQ7CisgCWNoYXIgbmFtZVtVVF9OQU1FU0laRSArIDFdOworIH0gaWRjYWNoZV90OworIAorIHR5cGVkZWYgc3RydWN0IGR1IHsKKyAJc3RydWN0IGR1ICpuZXh0OworLQlfX3VpbnQ2NF90IGJsb2NrczsKKy0JX191aW50NjRfdCBibG9ja3MzMDsKKy0JX191aW50NjRfdCBibG9ja3M2MDsKKy0JX191aW50NjRfdCBibG9ja3M5MDsKKy0JX191aW50NjRfdCBuZmlsZXM7CistCV9fdWludDMyX3QgaWQ7CisrCXVpbnQ2NF90IGJsb2NrczsKKysJdWludDY0X3QgYmxvY2tzMzA7CisrCXVpbnQ2NF90IGJsb2NrczYwOworKwl1aW50NjRfdCBibG9ja3M5MDsKKysJdWludDY0X3QgbmZpbGVzOworKwl1aW50MzJfdCBpZDsKKyB9IGR1X3Q7CisgCisgI2RlZmluZQlORFUJNjAwMDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZXBsYWNlX2dldHJwY2J5bnVtYmVyX3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTJmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1JlcGxhY2UgZ2V0cnBjYnludW1iZXJfciB3aXRoIGdldHJwY2J5bnVtYmVyCittdXNsIGFuZCB1Y2xpYmMgZG9udCBpbXBsZW1lbnQgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDogcXVvdGEtdG9vbHMvc3ZjX3NvY2tldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9zdmNfc29ja2V0LmMKKysrKyBxdW90YS10b29scy9zdmNfc29ja2V0LmMKK0BAIC01NSw3ICs1NSw4IEBAIHN0YXRpYyBpbnQgc3ZjX3NvY2tldCAodV9sb25nIG51bWJlciwgaW4KKyAJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAKKyAJaWYgKCFwb3J0KSB7CistCQlyZXQgPSBnZXRycGNieW51bWJlcl9yKG51bWJlciwgJnJwY2J1ZiwgcnBjZGF0YSwgc2l6ZW9mKHJwY2RhdGEpLCAmcnBjcCk7CisrCQlycGNwID0gZ2V0cnBjYnludW1iZXIobnVtYmVyKTsKKysJCXJldCA9IDA7CisgCQlpZiAocmV0ID09IDAgJiYgcnBjcCAhPSBOVUxMKSB7CisgCQkJLyogRmlyc3QgdHJ5IG5hbWUgKi8KKyAJCQlyZXQgPSBnZXRzZXJ2YnluYW1lX3IocnBjcC0+cl9uYW1lLCBwcm90bywgJnNlcnZidWYsIHNlcnZkYXRhLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGFfNC4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRiMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDIuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbW9uaXRvcmluZyAmIGxpbWl0aW5nIHVzZXIgZGlzayB1c2FnZSBwZXIgZmlsZXN5c3RlbSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTgxMzYmYXRpZD0xMTgxMzYiCitMSUNFTlNFID0gIkJTRCAmIEdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3F1b3RhLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0zMzttZDU9MzMxYzdkNzc3NDRiZmUwYWQyNDAyN2YwNjUxMDI4ZWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcnF1b3RhX3NlcnZlci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZlN2UwZDdlMTFjNmY4MjBmOGZhNjJhNWFmNzEyMzBmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3N2Y19zb2NrZXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT0yNGQ1YTg3OTJkYTQ1OTEwNzg2ZWVhYzc1MGJlOGNlYiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saW51eHF1b3RhL3F1b3RhLXRvb2xzLyR7UFZ9L3F1b3RhLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWctdGNwd3JhcHBlcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmNudGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX25vbl9wb3NpeF90eXBlcy5wYXRjaCBcCisJICAgIgorU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIiBmaWxlOi8vcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYThhNWRmMjYyMjYxZTY1OTcxNmNjYWQyYTVkNmRmMGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRjMmY0OGFiZjk0YmJkYzM5NmRmMzNkMjc2ZjJlOWQxOWFmNThjMjMyY2I4NWVlZjljMTc0YTc0N2MzMzc5NSIKKworUyA9ICIke1dPUktESVJ9L3F1b3RhLXRvb2xzIgorCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIGUyZnNwcm9ncyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQgcGtnY29uZmlnCisKK0NGTEFHUyArPSAiLUk9JHtpbmNsdWRlZGlyfS90aXJwYyIKK0xERkxBR1MgKz0gIi1sdGlycGMiCitBU05FRURFRCA9ICIiCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSIiJworCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIHJwYyBic2QiCitQQUNLQUdFQ09ORklHX2xpYmMtbXVzbCA9ICJ0Y3Atd3JhcHBlcnMgcnBjIgorCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS13aXRoLXRjcHdyYXBwZXJzLC0td2l0aG91dC10Y3B3cmFwcGVycyx0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3JwY10gPSAiLS1lbmFibGUtcnBjPXllcywtLWVuYWJsZS1ycGM9bm8sbGlidGlycGMiCitQQUNLQUdFQ09ORklHW2JzZF0gPSAiLS1lbmFibGUtYnNkX2JlaGF2aW91cj15ZXMsLS1lbmFibGUtYnNkX2JlaGF2aW91cj1ubywiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBST09URElSPSR7RH0gaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtQXZvaWQtdXNlLW9mLWdsaWJjLXN5cy1jZGVmcy5oLWhlYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWVmOWYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2gKQEAgLTAsMCArMSwyMjEgQEAKK0Zyb20gMmE0NGQ4NjIyMzNmMjEyNjU4MWUyOTBkNTY4ZTFjOGI4ZjJlYjlmNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvIExhbmRtZXRlciA8Y2xhbmRtZXRlckBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IEZlYiAyMDE1IDE1OjI4OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEF2b2lkIHVzZSBvZiBnbGliYyBzeXMvY2RlZnMuaCBoZWFkZXIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvY2hlY2tfYm91bmQuYyAgfCAgICAyICstCisgc3JjL3BtYXBfc3ZjLmMgICAgIHwgICAxMCArKysrKy0tLS0tCisgc3JjL3JwY2Jfc3ZjLmMgICAgIHwgICAxMCArKysrKy0tLS0tCisgc3JjL3JwY2Jfc3ZjXzQuYyAgIHwgICAxNCArKysrKysrLS0tLS0tLQorIHNyYy9ycGNiX3N2Y19jb20uYyB8ICAgNDYgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy9ycGNiaW5kLmMgICAgICB8ICAgMTIgKysrKysrLS0tLS0tCisgc3JjL3V0aWwuYyAgICAgICAgIHwgICAgMiArLQorIHNyYy93YXJtc3RhcnQuYyAgICB8ICAgIDQgKystLQorIDggZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKSwgNTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY2hlY2tfYm91bmQuYyBiL3NyYy9jaGVja19ib3VuZC5jCitpbmRleCBjNzBiODQ1Li41ZDIxNzMwIDEwMDY0NAorLS0tIGEvc3JjL2NoZWNrX2JvdW5kLmMKKysrKyBiL3NyYy9jaGVja19ib3VuZC5jCitAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgc3RydWN0IGZkbGlzdCAqZmRoZWFkOwkvKiBMaW5rIGxpc3Qgb2YgdGhlIGNoZWNrIGZkJ3MgKi8KKyBzdGF0aWMgc3RydWN0IGZkbGlzdCAqZmR0YWlsOworIHN0YXRpYyBjaGFyICpudWxsc3RyaW5nID0gIiI7CisgCistc3RhdGljIGJvb2xfdCBjaGVja19ib3VuZCBfX1AoKHN0cnVjdCBmZGxpc3QgKiwgY2hhciAqdWFkZHIpKTsKKytzdGF0aWMgYm9vbF90IGNoZWNrX2JvdW5kIChzdHJ1Y3QgZmRsaXN0ICosIGNoYXIgKnVhZGRyKTsKKyAKKyAvKgorICAqIFJldHVybnMgMSBpZiB0aGUgZ2l2ZW4gYWRkcmVzcyBpcyBib3VuZCBmb3IgdGhlIGdpdmVuIGFkZHIgJiB0cmFuc3BvcnQKK2RpZmYgLS1naXQgYS9zcmMvcG1hcF9zdmMuYyBiL3NyYy9wbWFwX3N2Yy5jCitpbmRleCBhZDI4YjkzLi45YzdkNDA5IDEwMDY0NAorLS0tIGEvc3JjL3BtYXBfc3ZjLmMKKysrKyBiL3NyYy9wbWFwX3N2Yy5jCitAQCAtNjAsMTEgKzYwLDExIEBAIHN0YXRpYwljaGFyIHNjY3NpZFtdID0gIkAoIylwbWFwX3N2Yy5jIDEuMjMgODkvMDQvMDUgQ29weXIgMTk4NCBTdW4gTWljcm8iOworICNpbmNsdWRlICJycGNiaW5kLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKKyAjaW5jbHVkZSA8cnBjL3N2Y19zb2MuaD4gLyogc3ZjX2dldGNhbGxlciByb3V0aW5lIGRlZmluaXRpb24gKi8KKy1zdGF0aWMgc3RydWN0IHBtYXBsaXN0ICpmaW5kX3NlcnZpY2VfcG1hcCBfX1AoKHJwY3Byb2dfdCwgcnBjdmVyc190LAorLQkJCQkJICAgICAgIHJwY3Byb3RfdCkpOworLXN0YXRpYyBib29sX3QgcG1hcHByb2NfY2hhbmdlIF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCB1X2xvbmcpKTsKKy1zdGF0aWMgYm9vbF90IHBtYXBwcm9jX2dldHBvcnQgX19QKChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopKTsKKy1zdGF0aWMgYm9vbF90IHBtYXBwcm9jX2R1bXAgX19QKChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopKTsKKytzdGF0aWMgc3RydWN0IHBtYXBsaXN0ICpmaW5kX3NlcnZpY2VfcG1hcCAocnBjcHJvZ190LCBycGN2ZXJzX3QsCisrCQkJCQkgICAgICAgcnBjcHJvdF90KTsKKytzdGF0aWMgYm9vbF90IHBtYXBwcm9jX2NoYW5nZSAoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCB1X2xvbmcpOworK3N0YXRpYyBib29sX3QgcG1hcHByb2NfZ2V0cG9ydCAoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKTsKKytzdGF0aWMgYm9vbF90IHBtYXBwcm9jX2R1bXAgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKik7CisgCisgLyoKKyAgKiBDYWxsZWQgZm9yIGFsbCB0aGUgdmVyc2lvbiAyIGlucXVpcmllcy4KK2RpZmYgLS1naXQgYS9zcmMvcnBjYl9zdmMuYyBiL3NyYy9ycGNiX3N2Yy5jCitpbmRleCBiZDkyMjAxLi42YzdmN2ZlIDEwMDY0NAorLS0tIGEvc3JjL3JwY2Jfc3ZjLmMKKysrKyBiL3NyYy9ycGNiX3N2Yy5jCitAQCAtNTMsMTAgKzUzLDEwIEBACisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorIAorLXN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzNfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKy0JCQkJCSAgIHJwY3ZlcnNfdCkpOworLXN0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzNfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKy0JCQkJCXJwY3ZlcnNfdCkpOworK3N0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzNfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorKwkJCQkJICAgcnBjdmVyc190KTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF8zX2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKysJCQkJCXJwY3ZlcnNfdCk7CisgCisgLyoKKyAgKiBDYWxsZWQgYnkgc3ZjX2dldHJlcXNldC4gVGhlcmUgaXMgYSBzZXBhcmF0ZSBzZXJ2ZXIgaGFuZGxlIGZvcgorQEAgLTc1LDcgKzc1LDcgQEAgcnBjYl9zZXJ2aWNlXzMoc3RydWN0IHN2Y19yZXEgKnJxc3RwLCBTVkNYUFJUICp0cmFuc3ApCisgCX0gYXJndW1lbnQ7CisgCWNoYXIgKnJlc3VsdDsKKyAJeGRycHJvY190IHhkcl9hcmd1bWVudCwgeGRyX3Jlc3VsdDsKKy0Jdm9pZCAqKCpsb2NhbCkgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7CisrCXZvaWQgKigqbG9jYWwpICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKyAJcnBjcHJvZ190IHNldHByb2cgPSAwOworIAorIAlycGNic19wcm9jaW5mbyhSUENCVkVSU18zX1NUQVQsIHJxc3RwLT5ycV9wcm9jKTsKK2RpZmYgLS1naXQgYS9zcmMvcnBjYl9zdmNfNC5jIGIvc3JjL3JwY2Jfc3ZjXzQuYworaW5kZXggYjY3MzQ1Mi4uNjc2NGMwYSAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiX3N2Y180LmMKKysrKyBiL3NyYy9ycGNiX3N2Y180LmMKK0BAIC01NCwxMyArNTQsMTMgQEAKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorICNpbmNsdWRlICJ4bG9nLmgiCisgCistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfNF9sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLAorLQkJCQkgICAgICBycGN2ZXJzX3QpKTsKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0dmVyc2FkZHJfNF9sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl80X2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKysJCQkJICAgICAgcnBjdmVyc190KTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0dmVyc2FkZHJfNF9sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7Cisgc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJsaXN0XzRfbG9jYWwKKy0JX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7Cistc3RhdGljIHZvaWQgZnJlZV9ycGNiX2VudHJ5X2xpc3QgX19QKChycGNiX2VudHJ5X2xpc3RfcHRyICopKTsKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF80X2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwkodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgZnJlZV9ycGNiX2VudHJ5X2xpc3QgKHJwY2JfZW50cnlfbGlzdF9wdHIgKik7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfNF9sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCisgLyoKKyAgKiBDYWxsZWQgYnkgc3ZjX2dldHJlcXNldC4gVGhlcmUgaXMgYSBzZXBhcmF0ZSBzZXJ2ZXIgaGFuZGxlIGZvcgorQEAgLTc4LDcgKzc4LDcgQEAgcnBjYl9zZXJ2aWNlXzQoc3RydWN0IHN2Y19yZXEgKnJxc3RwLCBTVkNYUFJUICp0cmFuc3ApCisgCX0gYXJndW1lbnQ7CisgCWNoYXIgKnJlc3VsdDsKKyAJeGRycHJvY190IHhkcl9hcmd1bWVudCwgeGRyX3Jlc3VsdDsKKy0Jdm9pZCAqKCpsb2NhbCkgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7CisrCXZvaWQgKigqbG9jYWwpICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KTsKKyAJcnBjcHJvZ190IHNldHByb2cgPSAwOworIAorIAlycGNic19wcm9jaW5mbyhSUENCVkVSU180X1NUQVQsIHJxc3RwLT5ycV9wcm9jKTsKK2RpZmYgLS1naXQgYS9zcmMvcnBjYl9zdmNfY29tLmMgYi9zcmMvcnBjYl9zdmNfY29tLmMKK2luZGV4IGZmOWNlNmIuLjhhZWY5ZTUgMTAwNjQ0CistLS0gYS9zcmMvcnBjYl9zdmNfY29tLmMKKysrKyBiL3NyYy9ycGNiX3N2Y19jb20uYworQEAgLTEwMCwyOSArMTAwLDI5IEBAIHN0cnVjdCBmaW5mbyB7Cisgc3RhdGljIHN0cnVjdCBmaW5mbyAgICAgRklORk9bTkZPUldBUkRdOworIAorIAorLXN0YXRpYyBib29sX3QgeGRyX2VuY2FwX3Bhcm1zIF9fUCgoWERSICosIHN0cnVjdCBlbmNhcF9wYXJtcyAqKSk7Cistc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9hcmdzIF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9yZXN1bHQgX19QKChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopKTsKKy1zdGF0aWMgYm9vbF90IHhkcl9vcGFxdWVfcGFybXMgX19QKChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopKTsKKy1zdGF0aWMgaW50IGZpbmRfcm10Y2FsbGZkX2J5X25ldGlkIF9fUCgoY2hhciAqKSk7Cistc3RhdGljIFNWQ1hQUlQgKmZpbmRfcm10Y2FsbHhwcnRfYnlfZmQgX19QKChpbnQpKTsKKy1zdGF0aWMgaW50IGZvcndhcmRfcmVnaXN0ZXIgX19QKCh1X2ludDMyX3QsIHN0cnVjdCBuZXRidWYgKiwgaW50LCBjaGFyICosCistICAgIHJwY3Byb2NfdCwgcnBjdmVyc190LCB1X2ludDMyX3QgKikpOworLXN0YXRpYyBzdHJ1Y3QgZmluZm8gKmZvcndhcmRfZmluZCBfX1AoKHVfaW50MzJfdCkpOworLXN0YXRpYyBpbnQgZnJlZV9zbG90X2J5X3hpZCBfX1AoKHVfaW50MzJfdCkpOworLXN0YXRpYyBpbnQgZnJlZV9zbG90X2J5X2luZGV4IF9fUCgoaW50KSk7Cistc3RhdGljIGludCBuZXRidWZjbXAgX19QKChzdHJ1Y3QgbmV0YnVmICosIHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyBzdHJ1Y3QgbmV0YnVmICpuZXRidWZkdXAgX19QKChzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgdm9pZCBuZXRidWZmcmVlIF9fUCgoc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIGludCBjaGVja19ybXRjYWxscyBfX1AoKHN0cnVjdCBwb2xsZmQgKiwgaW50KSk7Cistc3RhdGljIHZvaWQgeHBydF9zZXRfY2FsbGVyIF9fUCgoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKikpOworLXN0YXRpYyB2b2lkIHNlbmRfc3Zjc3lzZXJyIF9fUCgoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKikpOworLXN0YXRpYyB2b2lkIGhhbmRsZV9yZXBseSBfX1AoKGludCwgU1ZDWFBSVCAqKSk7Cistc3RhdGljIHZvaWQgZmluZF92ZXJzaW9ucyBfX1AoKHJwY3Byb2dfdCwgY2hhciAqLCBycGN2ZXJzX3QgKiwgcnBjdmVyc190ICopKTsKKy1zdGF0aWMgcnBjYmxpc3RfcHRyIGZpbmRfc2VydmljZSBfX1AoKHJwY3Byb2dfdCwgcnBjdmVyc190LCBjaGFyICopKTsKKy1zdGF0aWMgY2hhciAqZ2V0b3duZXIgX19QKChTVkNYUFJUICosIGNoYXIgKiwgc2l6ZV90KSk7Cistc3RhdGljIGludCBhZGRfcG1hcGxpc3QgX19QKChSUENCICopKTsKKy1zdGF0aWMgaW50IGRlbF9wbWFwbGlzdCBfX1AoKFJQQ0IgKikpOworK3N0YXRpYyBib29sX3QgeGRyX2VuY2FwX3Bhcm1zIChYRFIgKiwgc3RydWN0IGVuY2FwX3Bhcm1zICopOworK3N0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfYXJncyAoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKTsKKytzdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX3Jlc3VsdCAoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKTsKKytzdGF0aWMgYm9vbF90IHhkcl9vcGFxdWVfcGFybXMgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGludCBmaW5kX3JtdGNhbGxmZF9ieV9uZXRpZCAoY2hhciAqKTsKKytzdGF0aWMgU1ZDWFBSVCAqZmluZF9ybXRjYWxseHBydF9ieV9mZCAoaW50KTsKKytzdGF0aWMgaW50IGZvcndhcmRfcmVnaXN0ZXIgKHVfaW50MzJfdCwgc3RydWN0IG5ldGJ1ZiAqLCBpbnQsIGNoYXIgKiwKKysgICAgcnBjcHJvY190LCBycGN2ZXJzX3QsIHVfaW50MzJfdCAqKTsKKytzdGF0aWMgc3RydWN0IGZpbmZvICpmb3J3YXJkX2ZpbmQgKHVfaW50MzJfdCk7Cisrc3RhdGljIGludCBmcmVlX3Nsb3RfYnlfeGlkICh1X2ludDMyX3QpOworK3N0YXRpYyBpbnQgZnJlZV9zbG90X2J5X2luZGV4IChpbnQpOworK3N0YXRpYyBpbnQgbmV0YnVmY21wIChzdHJ1Y3QgbmV0YnVmICosIHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHN0cnVjdCBuZXRidWYgKm5ldGJ1ZmR1cCAoc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgdm9pZCBuZXRidWZmcmVlIChzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyBpbnQgY2hlY2tfcm10Y2FsbHMgKHN0cnVjdCBwb2xsZmQgKiwgaW50KTsKKytzdGF0aWMgdm9pZCB4cHJ0X3NldF9jYWxsZXIgKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopOworK3N0YXRpYyB2b2lkIHNlbmRfc3Zjc3lzZXJyIChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKTsKKytzdGF0aWMgdm9pZCBoYW5kbGVfcmVwbHkgKGludCwgU1ZDWFBSVCAqKTsKKytzdGF0aWMgdm9pZCBmaW5kX3ZlcnNpb25zIChycGNwcm9nX3QsIGNoYXIgKiwgcnBjdmVyc190ICosIHJwY3ZlcnNfdCAqKTsKKytzdGF0aWMgcnBjYmxpc3RfcHRyIGZpbmRfc2VydmljZSAocnBjcHJvZ190LCBycGN2ZXJzX3QsIGNoYXIgKik7Cisrc3RhdGljIGNoYXIgKmdldG93bmVyIChTVkNYUFJUICosIGNoYXIgKiwgc2l6ZV90KTsKKytzdGF0aWMgaW50IGFkZF9wbWFwbGlzdCAoUlBDQiAqKTsKKytzdGF0aWMgaW50IGRlbF9wbWFwbGlzdCAoUlBDQiAqKTsKKyAKKyAvKgorICAqIFNldCBhIG1hcHBpbmcgb2YgcHJvZ3JhbSwgdmVyc2lvbiwgbmV0aWQKK2RpZmYgLS1naXQgYS9zcmMvcnBjYmluZC5jIGIvc3JjL3JwY2JpbmQuYworaW5kZXggMDQ1ZGFhMS4uMTM3MDExYiAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiaW5kLmMKKysrKyBiL3NyYy9ycGNiaW5kLmMKK0BAIC0xMzUsMTMgKzEzNSwxMyBAQCBjaGFyICp0Y3BfdWFkZHI7CS8qIFVuaXZlcnNhbCBUQ1AgYWRkcmVzcyAqLworIHN0YXRpYyBjaGFyIHNlcnZuYW1lW10gPSAicnBjYmluZCI7Cisgc3RhdGljIGNoYXIgc3VwZXJ1c2VyW10gPSAic3VwZXJ1c2VyIjsKKyAKKy1pbnQgbWFpbiBfX1AoKGludCwgY2hhciAqW10pKTsKKytpbnQgbWFpbiAoaW50LCBjaGFyICpbXSk7CisgCistc3RhdGljIGludCBpbml0X3RyYW5zcG9ydCBfX1AoKHN0cnVjdCBuZXRjb25maWcgKikpOworLXN0YXRpYyB2b2lkIHJibGxpc3RfYWRkIF9fUCgocnBjcHJvZ190LCBycGN2ZXJzX3QsIHN0cnVjdCBuZXRjb25maWcgKiwKKy0JCQkgICAgIHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyB2b2lkIHRlcm1pbmF0ZSBfX1AoKGludCkpOworLXN0YXRpYyB2b2lkIHBhcnNlYXJncyBfX1AoKGludCwgY2hhciAqW10pKTsKKytzdGF0aWMgaW50IGluaXRfdHJhbnNwb3J0IChzdHJ1Y3QgbmV0Y29uZmlnICopOworK3N0YXRpYyB2b2lkIHJibGxpc3RfYWRkIChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgc3RydWN0IG5ldGNvbmZpZyAqLAorKwkJCSAgICAgc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgdm9pZCB0ZXJtaW5hdGUgKGludCk7Cisrc3RhdGljIHZvaWQgcGFyc2VhcmdzIChpbnQsIGNoYXIgKltdKTsKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCitkaWZmIC0tZ2l0IGEvc3JjL3V0aWwuYyBiL3NyYy91dGlsLmMKK2luZGV4IGE2YzgzNWIuLjMzYjllNGYgMTAwNjQ0CistLS0gYS9zcmMvdXRpbC5jCisrKysgYi9zcmMvdXRpbC5jCitAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luICpsb2NhbF9pbjQ7Cisgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmxvY2FsX2luNjsKKyAjZW5kaWYKKyAKKy1zdGF0aWMgaW50IGJpdG1hc2tjbXAgX19QKCh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCBpbnQpKTsKKytzdGF0aWMgaW50IGJpdG1hc2tjbXAgKHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIGludCk7CisgCisgLyoKKyAgKiBGb3IgYWxsIGJpdHMgc2V0IGluICJtYXNrIiwgY29tcGFyZSB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGluCitkaWZmIC0tZ2l0IGEvc3JjL3dhcm1zdGFydC5jIGIvc3JjL3dhcm1zdGFydC5jCitpbmRleCBiNmViNzNlLi40MmRkM2FmIDEwMDY0NAorLS0tIGEvc3JjL3dhcm1zdGFydC5jCisrKysgYi9zcmMvd2FybXN0YXJ0LmMKK0BAIC01OCw4ICs1OCw4IEBACisgI2RlZmluZQlQTUFQRklMRQlSUENCSU5EX1NUQVRFRElSICIvcG9ydG1hcC54ZHIiCisgI2VuZGlmCisgCistc3RhdGljIGJvb2xfdCB3cml0ZV9zdHJ1Y3QgX19QKChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKSk7Cistc3RhdGljIGJvb2xfdCByZWFkX3N0cnVjdCBfX1AoKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopKTsKKytzdGF0aWMgYm9vbF90IHdyaXRlX3N0cnVjdCAoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKik7Cisrc3RhdGljIGJvb2xfdCByZWFkX3N0cnVjdCAoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKik7CisgCisgc3RhdGljIGJvb2xfdAorIHdyaXRlX3N0cnVjdChjaGFyICpmaWxlbmFtZSwgeGRycHJvY190IHN0cnVjdHByb2MsIHZvaWQgKmxpc3QpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtdWNsaWJjLW5zcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS11Y2xpYmMtbnNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTU1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtdWNsaWJjLW5zcy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRnJvbSBiOGYwZDdiNzMxOGJhMzQ0YzI1Nzg1ZDZmNWNmM2Y4ZGU5ODAxMmQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmF0YW5hZWwgQ29wYSA8bmNvcGFAYWxwaW5lbGludXgub3JnPgorRGF0ZTogVHVlLCAyIEZlYiAyMDEwIDA5OjM2OjAzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSB1Y2xpYmMtbnNzCisKKy0tLQorIHNyYy9ycGNiaW5kLmMgfCAgICA0ICsrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ycGNiaW5kLmMgYi9zcmMvcnBjYmluZC5jCitpbmRleCA1MjVmZmJhLi4xZmUxYTYwIDEwMDY0NAorLS0tIGEvc3JjL3JwY2JpbmQuYworKysrIGIvc3JjL3JwY2JpbmQuYworQEAgLTY3LDcgKzY3LDExIEBACisgI2luY2x1ZGUgPHB3ZC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaWYgZGVmaW5lZChfX1VDTElCQ19fKQorKyNkZWZpbmUgX19uc3NfY29uZmlndXJlX2xvb2t1cCh4LHkpCisrI2Vsc2UKKyAjaW5jbHVkZSA8bnNzLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgImNvbmZpZy5oIgorICNpbmNsdWRlICJycGNiaW5kLmgiCisgCistLSAKKzEuNi42LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9pbml0LmQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL2luaXQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ5OWFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9pbml0LmQKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisjCisjIHN0YXJ0L3N0b3AgcnBjYmluZCBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHJwY2JpbmQKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogUlBDIHBvcnRtYXBwZXIgcmVwbGFjZW1lbnQKKyMgRGVzY3JpcHRpb246ICAgICAgIHJwY2JpbmQgaXMgYSBzZXJ2ZXIgdGhhdCBjb252ZXJ0cyBSUEMgKFJlbW90ZQorIyAgICAgICAgICAgICAgICAgICAgUHJvY2VkdXJlIENhbGwpIHByb2dyYW0gbnVtYmVycyBpbnRvIERBUlBBCisjICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCBwb3J0IG51bWJlcnMuIEl0IG11c3QgYmUgcnVubmluZyBpbgorIyAgICAgICAgICAgICAgICAgICAgb3JkZXIgdG8gbWFrZSBSUEMgY2FsbHMuIFNlcnZpY2VzIHRoYXQgdXNlCisjICAgICAgICAgICAgICAgICAgICBSUEMgaW5jbHVkZSBORlMgYW5kIE5JUy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC1mIC9zYmluL3JwY2JpbmQgfHwgZXhpdCAwCisKK09QVElPTlM9IiIKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L3JwY2JpbmQgXQordGhlbgorICAgIC4gL2V0Yy9kZWZhdWx0L3JwY2JpbmQKK2VsaWYgWyAtZiAvZXRjL3JwY2JpbmQuY29uZiBdCit0aGVuCisgICAgLiAvZXRjL3JwY2JpbmQuY29uZgorZmkKKworc3RhcnQgKCkKK3sKKyAgICBlY2hvIC1uICJTdGFydGluZyBycGNiaW5kIGRhZW1vbi4uLiIKKyAgICBpZiBwaWRvZiAvc2Jpbi9ycGNiaW5kID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAiYWxyZWFkeSBydW5uaW5nLiIKKyAgICAgICAgZXhpdCAwCisgICAgZmkKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3JwY2JpbmQgLS0gIiRAIgorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJkb25lLiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gImZhaWxlZC4iCisgICAgZmkKK30KKworc3RvcCAoKQoreworICAgIGVjaG8gIlN0b3BwaW5nIHJwY2JpbmQgZGFlbW9uLi4uIgorICAgIGlmICEgcGlkb2YgL3NiaW4vcnBjYmluZCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gIm5vdCBydW5uaW5nLiIKKyAgICAgICAgcmV0dXJuIDAKKyAgICBmaQorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9ycGNiaW5kCisgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisgICAgICAgIGVjaG8gImRvbmUuIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiZmFpbGVkLiIKKyAgICBmaQorfQorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgc3RhcnQgJE9QVElPTlMKKyAgICAgICAgOzsKKyAgICBzdG9wKQorICAgICAgICBzdG9wCisgICAgICAgIDs7CisgICAgZm9yY2UtcmVsb2FkKQorICAgICAgICBzdG9wCisgICAgICAgIHN0YXJ0ICRPUFRJT05TCisgICAgICAgIDs7CisgICAgcmVzdGFydCkKKyAgICAgICAgc3RvcAorICAgICAgICBzdGFydCAkT1BUSU9OUworICAgICAgICA7OworICAgIHN0YXR1cykKKyAgICAgICAgc3RhdHVzIC9zYmluL3JwY2JpbmQKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvcnBjYmluZCB7c3RhcnR8c3RvcHxmb3JjZS1yZWxvYWR8cmVzdGFydHxzdGF0dXN9IgorICAgICAgICBleGl0IDEKKyAgICAgICAgOzsKK2VzYWMKKworZXhpdCAkPwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9tdXNsLXN1bnJwYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MmExYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVGhlIG11c2wgaW1wbGVtZW50YXRpb24gb2YgZ2V0YWRkcmluZm8gYW5kIGdldHNlcnZieW5hbWUgZG9lcyBub3QKK2FsaWFzZXMuIEFzIGEgd29ya2Fyb3VuZCB3ZSB1c2UgInN1bnByYyIgaW5zdGVhZCBvZiAicG9ydG1hcHBlciIKKworcG9ydGVkIGZyb20gYWxwaW5lIGxpbnV4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycGNiaW5kLTAuMi4yL3NyYy9ycGNiaW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycGNiaW5kLTAuMi4yLm9yaWcvc3JjL3JwY2JpbmQuYworKysrIHJwY2JpbmQtMC4yLjIvc3JjL3JwY2JpbmQuYworQEAgLTQ5MSw3ICs0OTEsNyBAQCBpbml0X3RyYW5zcG9ydChzdHJ1Y3QgbmV0Y29uZmlnICpuY29uZikKKyAJCQlpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKGhvc3RzW25ob3N0c2Jha10sCisgCQkJICAgIHNlcnZuYW1lLCAmaGludHMsICZyZXMpKSAhPSAwKSB7CisgCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKGhvc3RzW25ob3N0c2Jha10sCistCQkJCQkJICAgICJwb3J0bWFwcGVyIiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgeworKwkJCQkJCSAgICAic3VucnBjIiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgeworIAkJCQlzeXNsb2coTE9HX0VSUiwKKyAJCQkJICAgICJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsCisgCQkJCSAgICBuY29uZi0+bmNfbmV0aWQsIGdhaV9zdHJlcnJvcihhaWNvZGUpKTsKK0BAIC01NjQsNyArNTY0LDcgQEAgaW5pdF90cmFuc3BvcnQoc3RydWN0IG5ldGNvbmZpZyAqbmNvbmYpCisgCQlpZiAoKHN0cmNtcChuY29uZi0+bmNfbmV0aWQsICJsb2NhbCIpICE9IDApICYmCisgCQkgICAgKHN0cmNtcChuY29uZi0+bmNfbmV0aWQsICJ1bml4IikgIT0gMCkpIHsKKyAJCQlpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsIHNlcnZuYW1lLCAmaGludHMsICZyZXMpKSE9IDApIHsKKy0JCQkgIGlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oTlVMTCwgInBvcnRtYXBwZXIiLCAmaGludHMsICZyZXMpKSE9IDApIHsKKysJCQkgIGlmICgoYWljb2RlID0gZ2V0YWRkcmluZm8oTlVMTCwgInN1bnJwYyIsICZoaW50cywgJnJlcykpIT0gMCkgeworIAkJCSAgcHJpbnRmKCJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsICBuY29uZi0+bmNfbmV0aWQsIGdhaV9zdHJlcnJvcihhaWNvZGUpKTsKKyAJCQkgIHN5c2xvZyhMT0dfRVJSLAorIAkJCQkgICAgImNhbm5vdCBnZXQgbG9jYWwgYWRkcmVzcyBmb3IgJXM6ICVzIiwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGZjOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9yZW1vdmUtc3lzLXF1ZXVlLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK211c2wgZG9lcyBub3QgcHJvdmlkZSB0aGlzIGhlYWRlciBhbmQgaGVyZSBpcyByZWFzb25pbmcKK2h0dHA6Ly93aWtpLm11c2wtbGliYy5vcmcvd2lraS9GQVEjUTpfd2h5X2lzX3N5cy4yRnF1ZXVlLmhfbm90X2luY2x1ZGVkXy4zRgorCitTbyBpbmNsdWRlIGl0IG9ubHkgd2hlbiBfX0dMSUJDX18gaXMgZGVmaW5lZCB3aGljaCBpcyB0cnVlIGZvciB1Y2xpYmMgYW5kIGdsaWJjCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHJwY2JpbmQtMC4yLjIvc3JjL3V0aWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwY2JpbmQtMC4yLjIub3JpZy9zcmMvdXRpbC5jCisrKysgcnBjYmluZC0wLjIuMi9zcmMvdXRpbC5jCitAQCAtNDEsNyArNDEsOSBAQAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNpZmRlZiBfX0dMSUJDX18KKyAjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldC9pZi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGlmYWRkcnMuaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5jb25mIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0ZGZiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5jb25mCkBAIC0wLDAgKzEsMyBAQAorIyBPcHRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHJwY2JpbmQuCisjCitSUENCSU5EX09QVFM9IiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249UlBDIEJpbmQgU2VydmljZQorUmVxdWlyZXM9cnBjYmluZC5zb2NrZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL3JwY2JpbmQuY29uZgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGNiaW5kIC13ICRSUENCSU5EX09QVFMKK1N1Y2Nlc3NFeGl0U3RhdHVzPTIKKworW0luc3RhbGxdCitBbHNvPXJwY2JpbmQuc29ja2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc29ja2V0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNjMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249UlBDYmluZCBTZXJ2ZXIgQWN0aXZhdGlvbiBTb2NrZXQKKworW1NvY2tldF0KK0xpc3RlblN0cmVhbT0vdmFyL3J1bi9ycGNiaW5kLnNvY2sKKworW0luc3RhbGxdCitXYW50ZWRCeT1zb2NrZXRzLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZF8wLjIuMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNjAyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIKQEAgLTAsMCArMSw3MyBAQAorU1VNTUFSWSA9ICJVbml2ZXJzYWwgQWRkcmVzc2VzIHRvIFJQQyBQcm9ncmFtIE51bWJlciBNYXBwZXIiCitERVNDUklQVElPTiA9ICJUaGUgcnBjYmluZCB1dGlsaXR5IGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIFwKKyAgICAgICAgICAgICAgIHByb2dyYW0gbnVtYmVycyBpbnRvIHVuaXZlcnNhbCBhZGRyZXNzZXMuIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3JwY2JpbmQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTIwMTIzNyZhdGlkPTk3Njc1MSIKK0RFUEVORFMgPSAibGlidGlycGMgcXVvdGEiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjQ2NDg2ZTRjNGE0MTY2MDI2OTNhNzExYmI1YmZhMzkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3JwY2luZm8uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT1mOGE4Y2QyY2IyNWFjNWFhMTY3NjczNjRmYjBlM2MyNCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcnBjYmluZC9ycGNiaW5kLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC5kIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQXZvaWQtdXNlLW9mLWdsaWJjLXN5cy1jZGVmcy5oLWhlYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtc3lzLXF1ZXVlLnBhdGNoIFwKKyAgICAgICAgICAgJHtVQ0xJQkNQQVRDSEVTfSBcCisgICAgICAgICAgICR7TVVTTFBBVENIRVN9IFwKKyAgICAgICAgICAgZmlsZTovL3JwY2JpbmQuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9ycGNiaW5kLnNvY2tldCBcCisgICAgICAgICAgIGZpbGU6Ly9ycGNiaW5kLnNlcnZpY2UgXAorICAgICAgICAgICIKK01VU0xQQVRDSEVTX2xpYmMtbXVzbCA9ICJmaWxlOi8vbXVzbC1zdW5ycGMucGF0Y2giCisKK1VDTElCQ1BBVENIRVNfbGliYy11Y2xpYmMgPSAiZmlsZTovLzAwMDEtdWNsaWJjLW5zcy5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorVUNMSUJDUEFUQ0hFUyA/PSAiIgorTVVTTFBBVENIRVMgPz0gIiIKKworU1JDX1VSSVttZDVzdW1dID0gImM4ODc1MjQ2YjI2ODhhMWFkZmJkNmFkNDM0ODAyNzhkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk4OTc4MjNhOWQ4MjBlYTAxMWQ5ZWEwMjA1NGQ1YWI5OTQ2OWI5Y2E1MzQ2MjY1ZmVlMzgwNzEzYzhmZWQyN2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS1lbmFibGUtbGlid3JhcCwtLWRpc2FibGUtbGlid3JhcCx0Y3Atd3JhcHBlcnMiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJycGNiaW5kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTIgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInJwY2JpbmQuc2VydmljZSIKKworaW5oZXJpdCB1c2VyYWRkCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0tbm8tY3JlYXRlLWhvbWUgLS1ob21lLWRpciAvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnc3lzdGVtZCcsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtZCBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZW5hYmxlLXdhcm1zdGFydHMgLS13aXRoLXJwY3VzZXI9cnBjIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJbXYgJHtEfSR7YmluZGlyfSAke0R9JHtzYmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlzZWQgLWUgJ3MsL2V0Yy8sJHtzeXNjb25mZGlyfS8sZycgXAorCQktZSAncywvc2Jpbi8sJHtzYmluZGlyfS8sZycgXAorCQkke1dPUktESVJ9L2luaXQuZCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9ycGNiaW5kCisJY2htb2QgMDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnBjYmluZAorCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnBjYmluZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JwY2JpbmQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcnBjYmluZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQkke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9ycGNiaW5kLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjZWYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQmFja3BvcnQgcGF0Y2ggdG8gZml4IHBhcmFsbGVsIGJ1aWxkIGZhaWx1cmUgYW5kIHVwZGF0ZSBjb250ZXh0IHRvIG1ha2UgcGF0Y2gKK2NvdWxkZSBiZSBhcHBsaWVkLgorCitodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9zY3JlZW4uZ2l0L2NvbW1pdD9pZD1jMGRlNmRkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIGMwZGU2ZGQ3OTcwYjJjN2I0MjZhNWMzOWRjYmMzMWMyYmVmODcyMzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW1hZGV1c3o9MjBTPUM1PTgyYXdpPUM1PTg0c2tpPz0gPGFtYWRlQGFzbWJsci5uZXQ+CitEYXRlOiBUaHUsIDIgSmFuIDIwMTQgMTg6MTg6MDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGZvciBtdWx0aWpvYiBidWlsZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCittYWtlIHN1cmUgdGhhdCBjb21tLnNoIHNjcmlwdCBnZW5lcmF0ZXMgY29tbS5oIGhlYWRlciBiZWZvcmUgZG9pbmcKK2FueXRoaW5nIGVsc2UKKworU2lnbmVkLW9mZi1ieTogQW1hZGV1c3ogU8WCYXdpxYRza2kgPGFtYWRlQGFzbWJsci5uZXQ+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggY2U4NmNiYy4uZGVhMTZkOCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI5OCw3ICsyOTgsNyBAQCBzZWFyY2gubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBzZWFyY2guYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYQorICBjb21tLmggbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggbWFyay5oIGV4dGVybi5oCisgdHR5Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdHR5LmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggY29tbS5oIFwKKyAgbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmgKKy10ZXJtLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdGVybS5jIHRlcm0uaAorK3Rlcm0ubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB0ZXJtLmMgdGVybS5oIGNvbW0uaAorIHdpbmRvdy5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHdpbmRvdy5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oIGxvZ2ZpbGUuaAorIHV0bXAubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB1dG1wLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorQEAgLTMyNCw3ICszMjQsNyBAQCBjYW52YXMubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBjYW52YXMuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYQorICBjb21tLmggbGF5ZXIuaCB0ZXJtLmggaW1hZ2UuaCBkaXNwbGF5Lmggd2luZG93LmggZXh0ZXJuLmggXAorICBicmFpbGxlLmgKKyBjb21tLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggY29tbS5jIGNvbmZpZy5oIGFjbHMuaCBjb21tLmgKKy1rbWFwZGVmLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmgga21hcGRlZi5jIGNvbmZpZy5oCisra21hcGRlZi5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGttYXBkZWYuYyBjb25maWcuaCBjb21tLmgKKyBhY2xzLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggYWNscy5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIGNvbW0uaCBcCisgIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oCisgYnJhaWxsZS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGJyYWlsbGUuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCitAQCAtMzUwLDcgKzM1MCw3IEBAIGxheW91dC5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGxheW91dC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhCisgdmlld3BvcnQubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB2aWV3cG9ydC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oIFwKKyAgYnJhaWxsZS5oCistbGlzdF9nZW5lcmljLm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZ2VuZXJpYy5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaAorLWxpc3RfZGlzcGxheS5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2Rpc3BsYXkuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKy1saXN0X3dpbmRvdy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X3dpbmRvdy5jIHdpbmRvdy5oIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaAorK2xpc3RfZ2VuZXJpYy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2dlbmVyaWMuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisrbGlzdF9kaXNwbGF5Lm86IGxpc3RfZ2VuZXJpYy5oIGxpc3RfZGlzcGxheS5jIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaCBjb21tLmgKKytsaXN0X3dpbmRvdy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X3dpbmRvdy5jIHdpbmRvdy5oIGxheWVyLmggc2NyZWVuLmggb3NkZWYuaCBjb21tLmgKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ3MWNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vMDAwMi1jb21tLmgtbm93LWRlcGVuZHMtb24tdGVybS5oLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQmFja3BvcnQgZnJvbToKKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvc2NyZWVuLmdpdC9jb21taXQvP2lkPTM5YzVmMWMKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gMzljNWYxYzc2ZjFmY2VmNGI1OTU4YmY4MjhhNjNmNTM0MjZiNjk4NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pa2UgR2Vyd2l0eiA8bWlrZUBtaWtlZ2Vyd2l0ei5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDIyOjE2OjMxIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbW0uaCBub3cgZGVwZW5kcyBvbiB0ZXJtLmgKKworLS0tCisgc3JjL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmluIGIvc3JjL01ha2VmaWxlLmluCitpbmRleCBlNzkxZTc5Li5kNGY3YzBiIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTEzLDcgKzExMyw3IEBAIHRlcm0uaDogdGVybS5jIHRlcm0uc2gKKyAKKyBrbWFwZGVmLmM6IHRlcm0uaAorIAorLWNvbW0uaDogY29tbS5jIGNvbW0uc2ggY29uZmlnLmgKKytjb21tLmg6IGNvbW0uYyBjb21tLnNoIGNvbmZpZy5oIHRlcm0uaAorIAlBV0s9JChBV0spIENDPSIkKENDKSAkKENGTEFHUykiIHNyY2Rpcj0ke3NyY2Rpcn0gc2ggJChzcmNkaXIpL2NvbW0uc2gKKyAKKyBkb2NzOgorLS0gCisyLjQuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg0YWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDc5YWZiNjc2OTA0NjUzNDAzMTQ1ZmRhOWUxYTZhOWQzZWExY2IyMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDE1IDExOjEwOjMyICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC80XSBBdm9pZCBtaXMtaWRlbnRpZnlpbmcgc3lzdGVtcyBhcyBTVlI0CisKK0xpbnV4IGNhbiBiZSBtaXNkZXRlY3RlZCBhcyBTVlI0IGJlY2F1c2UgaXQgaGFzCitsaWJlbGYgaW5zdGFsbGVkLiBUaGlzIGxlYWRzIHRvIGxpbmtpbmcgd2l0aCBsaWJlbGYsIGV2ZW4gdGhvdWdoIG5vCitzeW1ib2xzIGZyb20gdGhhdCBsaWJyYXJ5IHdlcmUgYWN0dWFsbHkgdXNlZCwgYW5kIHRvIGEgd29ya2Fyb3VuZCBmb3IKK2EgYnVnZ3kgZ2V0bG9naW4oKSBiZWluZyBlbmFibGVkLgorCitJdCBpcyBub3QgZG9jdW1lbnRlZCB3aGljaCBleGFjdCBTVlI0IHN5c3RlbSBoYWQgdGhlIGJ1ZyB0aGF0IHRoZQord29ya2Fyb3VuZCB3YXMgYWRkZWQgZm9yLCBzbyBhbGwgSSBjb3VsZCBkbyBpcyBtYWtlIGFuIGVkdWNhdGVkIGd1ZXNzCithdCB0aGUgI2RlZmluZXMgaXRzIGNvbXBpbGVyIHdvdWxkIGJlIGxpa2VseSB0byBzZXQuCisKK01vZGlmaWVkIGZyb20gcGF0Y2ggYnkgTWFhcnRlbiB0ZXIgSHV1cm5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/NDMyMjNdCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxNCArKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkYzkyOGFlLi42NTQzOWNlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNzksMTQgKzE3OSwyNCBAQCBBQ19FR1JFUF9DUFAoeWVzLAorICNlbmRpZgorIF0sIExJQlM9IiRMSUJTIC1sc29ja2V0IC1saW5ldCI7c2VxcHR4PTEpCisgCisrQUNfQ0hFQ0tJTkcoU1ZSNCkKKytBQ19FR1JFUF9DUFAoeWVzLAorK1ttYWluICgpIHsKKysjaWYgZGVmaW5lZChTVlI0KSB8fCBkZWZpbmVkKF9fU1ZSNCkKKysgIHllczsKKysjZW5kaWYKKytdLCBBQ19OT1RFKC0geW91IGhhdmUgYSBTVlI0IHN5c3RlbSkgQUNfREVGSU5FKFNWUjQpIHN2cjQ9MSkKKytpZiB0ZXN0IC1uICIkc3ZyNCIgOyB0aGVuCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxlbGYiCisgQUNfQ0hFQ0tJTkcoU1ZSNCkKKyBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHV0bXB4Lmg+CisgXSwsCistW0FDX0NIRUNLX0hFQURFUihkd2FyZi5oLCBBQ19ERUZJTkUoU1ZSNCkgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pLAorLVtBQ19DSEVDS19IRUFERVIoZWxmLmgsIEFDX0RFRklORShTVlI0KSBBQ19ERUZJTkUoQlVHR1lHRVRMT0dJTikpXSldCisrW0FDX0NIRUNLX0hFQURFUihkd2FyZi5oLCBBQ19ERUZJTkUoQlVHR1lHRVRMT0dJTiksCisrW0FDX0NIRUNLX0hFQURFUihlbGYuaCwgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pKV0pXQorICxMSUJTPSIkb2xkbGlicyIpCisrZmkKKysKKyBBQ19DSEVDS19IRUFERVJTKFtzdHJvcHRzLmggc3RyaW5nLmggc3RyaW5ncy5oXSkKKyAKKyBBQ19DSEVDS0lORyhmb3IgU29sYXJpcyAyLngpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OGJmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGcm9tIGNkMGY3ZjEwYTNmZmZiYzYwZmU1NWViMjAwNDc0ZDEzZmUxZGE2NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDE1IDEwOjM0OjI5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBQcm92aWRlIGNyb3NzIGNvbXBpbGUgYWx0ZXJuYXRpdmVzIGZvciBBQ19UUllfUlVOCisKK01vZGlmaWVkIGZyb20gcGF0Y2ggYnkgTWFhcnRlbiB0ZXIgSHV1cm5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/NDMyMjNdCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAzMiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjc2OTBhNi4uY2U4OWY1NiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzQ4LDcgKzM0OCw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSwgQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIHVzYWJsZSkgZmlmbz0xLAorLUFDX05PVEUoLSB5b3VyIGZpZm9zIGFyZSBub3QgdXNhYmxlKSkKKytBQ19OT1RFKC0geW91ciBmaWZvcyBhcmUgbm90IHVzYWJsZSksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgZmlmb3MgYXJlIHVzYWJsZSkgZmlmbz0xKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgCisgaWYgdGVzdCAtbiAiJGZpZm8iOyB0aGVuCitAQCAtMzk2LDcgKzM5Nyw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSwgQUNfTk9URSgtIHlvdXIgaW1wbGVtZW50YXRpb24gaXMgb2spLCAKKy1BQ19OT1RFKC0geW91IGhhdmUgYSBicm9rZW4gaW1wbGVtZW50YXRpb24pIEFDX0RFRklORShCUk9LRU5fUElQRSkgZmlmb2JyPTEpCisrQUNfTk9URSgtIHlvdSBoYXZlIGEgYnJva2VuIGltcGxlbWVudGF0aW9uKSBBQ19ERUZJTkUoQlJPS0VOX1BJUEUpIGZpZm9icj0xLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIGZpZm8gaW1wbGVtZW50YXRpb24gaXMgb2spKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgZmkKKyAKK0BAIC00NTgsNyArNDYwLDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLCBBQ19OT1RFKC0geW91ciBzb2NrZXRzIGFyZSB1c2FibGUpIHNvY2s9MSwKKy1BQ19OT1RFKC0geW91ciBzb2NrZXRzIGFyZSBub3QgdXNhYmxlKSkKKytBQ19OT1RFKC0geW91ciBzb2NrZXRzIGFyZSBub3QgdXNhYmxlKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBzb2NrZXRzIGFyZSB1c2FibGUpIHNvY2s9MSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIAorIGlmIHRlc3QgLW4gIiRzb2NrIjsgdGhlbgorQEAgLTQ5Nyw3ICs1MDAsOCBAQCBtYWluKCkKKyB9CisgXSxBQ19OT1RFKC0geW91IGFyZSBub3JtYWwpLAorIEFDX05PVEUoLSB1bml4IGRvbWFpbiBzb2NrZXRzIGFyZSBub3Qga2VwdCBpbiB0aGUgZmlsZXN5c3RlbSkKKy1BQ19ERUZJTkUoU09DS19OT1RfSU5fRlMpIHNvY2tub2ZzPTEpCisrQUNfREVGSU5FKFNPQ0tfTk9UX0lOX0ZTKSBzb2Nrbm9mcz0xLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHNvY2tldHMgYXJlIG5vcm1hbCkpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyBmaQorIAorQEAgLTYyNCw3ICs2MjgsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sQUNfTk9URSgtIHNlbGVjdCBpcyBvayksCistQUNfTk9URSgtIHNlbGVjdCBjYW4ndCBjb3VudCkgQUNfREVGSU5FKFNFTEVDVF9CUk9LRU4pKQorK0FDX05PVEUoLSBzZWxlY3QgY2FuJ3QgY291bnQpIEFDX0RFRklORShTRUxFQ1RfQlJPS0VOKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBzZWxlY3QgaXMgb2spKQorIAorIGRubAorIGRubCAgICAqKioqICB0ZXJtY2FwIG9yIHRlcm1pbmZvICAqKioqCitAQCAtNjY2LDcgKzY3MSw4IEBAIG1haW4oKQorIHsKKyAgZXhpdChzdHJjbXAodGdvdG8oIiVwMSVkIiwgMCwgMSksICIxIikgPyAwIDogMSk7CisgfV0sIEFDX05PVEUoLSB5b3UgdXNlIHRoZSB0ZXJtY2FwIGRhdGFiYXNlKSwKKy1BQ19OT1RFKC0geW91IHVzZSB0aGUgdGVybWluZm8gZGF0YWJhc2UpIEFDX0RFRklORShURVJNSU5GTykpCisrQUNfTk9URSgtIHlvdSB1c2UgdGhlIHRlcm1pbmZvIGRhdGFiYXNlKSBBQ19ERUZJTkUoVEVSTUlORk8pLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHRlcm1pbmZvIGRhdGFiYXNlIGlzIHVzZWQpIEFDX0RFRklORShURVJNSU5GTykpCisgQUNfQ0hFQ0tJTkcob3NwZWVkKQorIEFDX1RSWV9MSU5LKGV4dGVybiBzaG9ydCBvc3BlZWQ7LG9zcGVlZD01OywsQUNfREVGSU5FKE5FRURfT1NQRUVEKSkKKyAKK0BAIC04MDEsNyArODA3LDggQEAgbWFpbigpCisgICAgIGVsc2UKKyAgICAgICBBQ19OT1RFKC0gY2FuJ3QgZGV0ZXJtaW5lIC0gYXNzdW1lIHB0eXMgYXJlIHdvcmxkIGFjY2Vzc2FibGUpCisgICAgIGZpCistICBdCisrICBdLAorKyAgQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgcHR5cyBhcmUgd29ybGQgYWNjZXNzYWJsZSkKKyApCisgcm0gLWYgY29uZnRlc3RfZ3JwCisgZmkKK0BAIC04ODUsNyArODkyLDcgQEAgQUNfRUdSRVBfQ1BQKHllcywKKyAjZW5kaWYKKyBdLCBsb2FkPTEpCisgZmkKKy1pZiB0ZXN0IC16ICIkbG9hZCIgOyB0aGVuCisraWYgdGVzdCAteiAiJGxvYWQiICYmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIGtlcm5lbGZpbGUpCisgZm9yIGNvcmUgaW4gL3VuaXggL3ZtdW5peCAvZHluaXggL2hwLXV4IC94ZWxvcyAvZGV2L2tzeW1zIC9rZXJuZWwvdW5peCAva2VybmVsL2dlbnVuaXggL3VuaWNvcyAvbWFjaCAvbmV0YnNkIC8zODZic2QgL2RndXggL2JzZCAvc3RhbmQvdm11bml4OyBkbworICAgaWYgdGVzdCAtZiAkY29yZSB8fCB0ZXN0IC1jICRjb3JlOyB0aGVuCitAQCAtMTA3OCw3ICsxMDg1LDcgQEAgbWFpbigpCisgI2VuZGlmCisgICBleGl0KDApOworIH0KKy1dLCxBQ19ERUZJTkUoU1lTVlNJR1MpKQorK10sLEFDX0RFRklORShTWVNWU0lHUyksOikKKyAKKyBmaQorIAorQEAgLTExNTgsNyArMTE2NSw3IEBAIG1haW4oKSB7CisgICBpZiAoc3RybmNtcChidWYsICJjZGVkZWYiLCA2KSkKKyAgICAgZXhpdCgxKTsKKyAgIGV4aXQoMCk7IC8qIGxpYmMgdmVyc2lvbiB3b3JrcyBwcm9wZXJseS4gICovCistfV0sIEFDX0RFRklORShVU0VCQ09QWSkpCisrfV0sIEFDX0RFRklORShVU0VCQ09QWSksLDopCisgCisgQUNfVFJZX1JVTihbCisgI2RlZmluZSBiY29weShzLGQsbCkgbWVtbW92ZShkLHMsbCkKK0BAIC0xMTczLDcgKzExODAsOCBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFTUVNTU9WRSkpCisrfV0sIEFDX0RFRklORShVU0VNRU1NT1ZFKSwsCisrICBBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyB1c2UgbWVtbW92ZSkgQUNfREVGSU5FKFVTRU1FTU1PVkUpKQorIAorIAorIEFDX1RSWV9SVU4oWworQEAgLTExODksNyArMTE5Nyw3IEBAIG1haW4oKSB7CisgICBpZiAoc3RybmNtcChidWYsICJjZGVkZWYiLCA2KSkKKyAgICAgZXhpdCgxKTsKKyAgIGV4aXQoMCk7IC8qIGxpYmMgdmVyc2lvbiB3b3JrcyBwcm9wZXJseS4gICovCistfV0sIEFDX0RFRklORShVU0VNRU1DUFkpKQorK31dLCBBQ19ERUZJTkUoVVNFTUVNQ1BZKSwsOikKKyAKKyBBQ19TWVNfTE9OR19GSUxFX05BTUVTCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzYyYzEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb20gNzNiNzI2YzI1Zjk0YzFiMTU1MTRlZDkyNDliOTI3YWZkZmJiZmI5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBGcmksIDcgQXVnIDIwMTUgMTA6MzA6NDAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIFJlbW92ZSByZWR1bmRhbnQgY29tcGlsZXIgc2FuaXR5IGNoZWNrcworCitBQ19QUk9HX0NDIGFscmVhZHkgcGVyZm9ybXMgc2FuaXR5IGNoZWNrcy4gQW5kIHVubGlrZSB0aGUgcmVtb3ZlZAorY2hlY2tzLCBpdCBkb2VzIHNvIGluIGEgd2F5IHRoYXQgc3VwcG9ydHMgY3Jvc3MgY29tcGlsYXRpb24uCisKK01vZGlmaWVkIGZyb20gcGF0Y2ggYnkgTWFhcnRlbiB0ZXIgSHV1cm5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/NDMyMjNdCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyNyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGZmZTJlMzcuLjI3NjkwYTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQ4LDMxICs0OCw2IEBAIEFDX1BST0dfR0NDX1RSQURJVElPTkFMCisgQUNfSVNDX1BPU0lYCisgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgCistQUNfVFJZX1JVTihtYWluKCl7ZXhpdCgwKTt9LCxbCistaWYgdGVzdCAkQ0MgIT0gY2MgOyB0aGVuCistQUNfTk9URShZb3VyICRDQyBmYWlsZWQgLSByZXN0YXJ0aW5nIHdpdGggQ0M9Y2MpCistQUNfTk9URSgpCistQ0M9Y2MKKy1leHBvcnQgQ0MKKy1leGVjICQwICRjb25maWd1cmVfYXJncworLWZpCistXSkKKy0KKy1BQ19UUllfUlVOKG1haW4oKXtleGl0KDApO30sLAorLWV4ZWMgNT4mMgorLWV2YWwgJGFjX2xpbmsKKy1BQ19OT1RFKENDPSRDQzsgQ0ZMQUdTPSRDRkxBR1M7IExJQlM9JExJQlM7KQorLUFDX05PVEUoJGFjX2NvbXBpbGUpCistQUNfTVNHX0VSUk9SKENhbid0IHJ1biB0aGUgY29tcGlsZXIgLSBzb3JyeSkpCistCistQUNfVFJZX1JVTihbCistbWFpbigpCisteworLSAgaW50IF9fc29tZXRoaW5nX3N0cmFuZ2VfKCk7CistICBfX3NvbWV0aGluZ19zdHJhbmdlXygwKTsKKy19CistXSxBQ19NU0dfRVJST1IoWW91ciBjb21waWxlciBkb2VzIG5vdCBzZXQgdGhlIGV4aXQgc3RhdHVzIC0gc29ycnkpKQorLQorIEFDX1BST0dfQVdLCisgCisgQUNfUFJPR19JTlNUQUxMCitAQCAtMTMwMCw4ICsxMjc1LDYgQEAgZmkKKyBkbmwgUHR4IGJ1ZyB3b3JrYXJvdW5kIC0tIGluc2VydCAtbGMgYWZ0ZXIgLWx0ZXJtY2FwCisgdGVzdCAtbiAiJHNlcXB0eCIgJiYgTElCUz0iLWx0ZXJtY2FwIC1sYyAtbHNvY2tldCAtbGluZXQgLWxuc2wgLWxzZWMgLWxzZXEiCisgCistQUNfVFJZX1JVTihtYWluKCl7ZXhpdCgwKTt9LCxBQ19NU0dfRVJST1IoQ2FuJ3QgcnVuIHRoZSBjb21waWxlciAtIGludGVybmFsIGVycm9yLiBTb3JyeS4pKQorLQorIEVUQ1NDUkVFTlJDPQorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIGdsb2JhbCBzY3JlZW5yYyBmaWxlKQorIEFDX0FSR19XSVRIKHN5cy1zY3JlZW5yYywgWyAgLS13aXRoLXN5cy1zY3JlZW5yYz1wYXRoIHRvIHRoZSBnbG9iYWwgc2NyZWVucmMgZmlsZV0sIFsgRVRDU0NSRUVOUkM9IiR7d2l0aHZhbH0iIF0pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1NraXAtaG9zdC1maWxlLXN5c3RlbS1jaGVja3Mtd2hlbi1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTU1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitGcm9tIGQwYjIwZTRjYWNjNjBhZDYyYTIxNTBjZTA3Mzg4Y2I1YTI1YzIwNDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDE1IDExOjA5OjAxICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBTa2lwIGhvc3QgZmlsZSBzeXN0ZW0gY2hlY2tzIHdoZW4gY3Jvc3MtY29tcGlsaW5nCisKK01vZGlmaWVkIGZyb20gcGF0Y2ggYnkgTWFhcnRlbiB0ZXIgSHV1cm5lLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cDovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/NDMyMjNdCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyMyArKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZTg5ZjU2Li5kYzkyOGFlIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC04NSw3ICs4NSw3IEBAIEFDX0FSR19FTkFCTEUoc29ja2V0LWRpciwKKyBkbmwKKyBkbmwgICAgKioqKiAgc3BlY2lhbCB1bml4IHZhcmlhbnRzICAqKioqCisgZG5sCistaWYgdGVzdCAtbiAiJElTQyI7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLW4gIiRJU0MiIDsgdGhlbgorICAgQUNfREVGSU5FKElTQykgTElCUz0iJExJQlMgLWxpbmV0IgorIGZpCisgCitAQCAtOTYsMTAgKzk2LDExIEBAIGRubCBBQ19ERUZJTkUoT1NGMSkJIyB0aGlzIGRpc2FibGVzIE1JUFMgYWdhaW4uLi4uCisgZG5sIGZpCisgZG5sIGZpCisgCistaWYgdGVzdCAtZiAvc3lzVjY4IDsgdGhlbgorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gJiYgdGVzdCAtZiAvc3lzVjY4IDsgdGhlbgorIEFDX0RFRklORShzeXNWNjgpCisgZmkKKyAKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBNSVBTKQorIGlmIHRlc3QgLWYgL2xpYi9saWJtbGQuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2xpYm1sZC5hIHx8IHRlc3QgLWYgL3Vzci9saWIvY21wbHJzL2NjL2xpYm1sZC5hOyB0aGVuCisgb2xkbGlicz0iJExJQlMiCitAQCAtMTIzLDYgKzEyNCw3IEBAIEFDX0RFRklORShVU0VfV0FJVDIpIExJQlM9IiRMSUJTIC1sYnNkIiA7IENDPSIkQ0MgLUkvdXNyL2luY2x1ZGUvYnNkIgorICkpCisgZmkKKyBmaQorK2ZpCisgCisgCisgQUNfQ0hFQ0tJTkcoZm9yIFVsdHJpeCkKK0BAIC0xMzIsNyArMTM0LDcgQEAgQUNfRUdSRVBfQ1BQKHllcywKKyAjZW5kaWYKKyBdLCBVTFRSSVg9MSkKKyAKKy1pZiB0ZXN0IC1mIC91c3IvbGliL2xpYnB5ci5hIDsgdGhlbgorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gJiYgdGVzdCAtZiAvdXNyL2xpYi9saWJweXIuYSA7IHRoZW4KKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbHB5ciIKKyBBQ19DSEVDS0lORyhQeXJhbWlkIE9TWCkKK0BAIC02NzksMTcgKzY4MSwyMSBAQCBBQ19UUllfTElOSyhleHRlcm4gc2hvcnQgb3NwZWVkOyxvc3BlZWQ9NTssLEFDX0RFRklORShORUVEX09TUEVFRCkpCisgZG5sCisgZG5sICAgICoqKiogIFBUWSBzcGVjaWZpYyB0aGluZ3MgICoqKioKKyBkbmwKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciAvZGV2L3B0YykKKyBpZiB0ZXN0IC1yIC9kZXYvcHRjOyB0aGVuCisgQUNfREVGSU5FKEhBVkVfREVWX1BUQykKKyBmaQorK2ZpCisgCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgU1ZSNCBwdHlzKQorIHN5c3ZyNHB0eXM9CisgaWYgdGVzdCAtYyAvZGV2L3B0bXggOyB0aGVuCisgQUNfVFJZX0xJTksoW10sW3B0c25hbWUoMCk7Z3JhbnRwdCgwKTt1bmxvY2twdCgwKTtdLFtBQ19ERUZJTkUoSEFWRV9TVlI0X1BUWVMpCisgc3lzdnI0cHR5cz0xXSkKKyBmaQorK2ZpCisgCisgQUNfQ0hFQ0tfRlVOQ1MoZ2V0cHQpCisgCitAQCAtNjk5LDYgKzcwNSw3IEBAIEFDX0NIRUNLX0ZVTkNTKG9wZW5wdHksLAorIFtBQ19DSEVDS19MSUIodXRpbCxvcGVucHR5LCBbQUNfREVGSU5FKEhBVkVfT1BFTlBUWSldIFtMSUJTPSIkTElCUyAtbHV0aWwiXSldKQorIGZpCisgCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgcHR5cmFuZ2VzKQorIGlmIHRlc3QgLWQgL2Rldi9wdHltIDsgdGhlbgorIHBkaXI9Jy9kZXYvcHR5bScKK0BAIC03MjIsNiArNzI5LDcgQEAgcDE9YGVjaG8gJHB0eXMgfCB0ciAnICcgJ1wwMTInIHwgc2VkIC1lICdzL14uKlwoLlwpJC9cMS9nJyAgfCBzb3J0IC11IHwgdHIgLWQgJ1wKKyBBQ19ERUZJTkVfVU5RVU9URUQoUFRZUkFOR0UwLCIkcDAiKQorIEFDX0RFRklORV9VTlFVT1RFRChQVFlSQU5HRTEsIiRwMSIpCisgZmkKKytmaQorIAorIGRubCAgICAqKioqICBwdHkgbW9kZS9ncm91cCBoYW5kbGluZyAqKioqCisgZG5sCitAQCAtODY5LDE0ICs4NzcsMTYgQEAgZmkKKyBkbmwKKyBkbmwgICAgKioqKiAgbG9hZGF2ICAqKioqCisgZG5sCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgbGlidXRpbChzKSkKKyB0ZXN0IC1mIC91c3IvbGliL2xpYnV0aWxzLmEgJiYgTElCUz0iJExJQlMgLWx1dGlscyIKKyB0ZXN0IC1mIC91c3IvbGliL2xpYnV0aWwuYSAmJiBMSUJTPSIkTElCUyAtbHV0aWwiCisrZmkKKyAKKyBBQ19DSEVDS0lORyhnZXRsb2FkYXZnKQorIEFDX1RSWV9MSU5LKCxbZ2V0bG9hZGF2ZygoZG91YmxlICopMCwgMCk7XSwKKyBBQ19ERUZJTkUoTE9BREFWX0dFVExPQURBVkcpIGxvYWQ9MSwKKy1pZiB0ZXN0IC1mIC91c3IvbGliL2xpYmt2bS5hIDsgdGhlbgorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gJiYgdGVzdCAtZiAvdXNyL2xpYi9saWJrdm0uYSA7IHRoZW4KKyBvbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxrdm0iCisgQUNfQ0hFQ0tJTkcoZ2V0bG9hZGF2ZyB3aXRoIC1sa3ZtKQorQEAgLTEwOTQsMTMgKzExMDQsMTggQEAgZG5sICAgICoqKiogIGxpYnJhcmllcyAgKioqKgorIGRubAorIAorIEFDX0NIRUNLSU5HKGZvciBjcnlwdCBhbmQgc2VjIGxpYnJhcmllcykKKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIHRlc3QgLWYgL2xpYi9saWJjcnlwdF9kLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJjcnlwdF9kLmEgJiYgTElCUz0iJExJQlMgLWxjcnlwdF9kIgorK2ZpCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxjcnlwdCIKKyBBQ19DSEVDS0lORyhjcnlwdCkKKyBBQ19UUllfTElOSygsLCxMSUJTPSIkb2xkbGlicyIpCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyB0ZXN0IC1mIC9saWIvbGlic2VjLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJzZWMuYSAmJiBMSUJTPSIkTElCUyAtbHNlYyIKKyB0ZXN0IC1mIC9saWIvbGlic2hhZG93LmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJzaGFkb3cuYSAmJiBMSUJTPSIkTElCUyAtbHNoYWRvdyIKKytmaQorKworIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sc3VuIgorIEFDX0NIRUNLSU5HKElSSVggc3VuIGxpYnJhcnkpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjYWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgZml4ZXMgdGhlIHBhcmFsbGVsIG1ha2UgaW5zdGFsbCBmYWlsdXJlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBzY3JlZW4tNC4wLjMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzY3JlZW4tNC4wLjMub3JpZy9NYWtlZmlsZS5pbgorKysrIHNjcmVlbi00LjAuMy9NYWtlZmlsZS5pbgorQEAgLTcwLDcgKzcwLDcgQEAgc2NyZWVuOiAkKE9GSUxFUykKKyAuYy5vOgorIAkkKENDKSAtYyAtSS4gLUkkKHNyY2RpcikgJChNX0NGTEFHUykgJChERUZTKSAkKE9QVElPTlMpICQoQ0ZMQUdTKSAkPAorIAorLWluc3RhbGxfYmluOiAudmVyc2lvbiBzY3JlZW4KKytpbnN0YWxsX2JpbjogLnZlcnNpb24gc2NyZWVuIGluc3RhbGxkaXJzCisgCS1pZiBbIC1mICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pIF0gJiYgWyAhIC1mICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pLm9sZCBdOyBcCisgCQl0aGVuIG12ICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pICQoREVTVERJUikkKGJpbmRpcikvJChTQ1JFRU4pLm9sZDsgZmkKKyAJJChJTlNUQUxMX1BST0dSQU0pIHNjcmVlbiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vc2NyZWVuLnBhbSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2NTdmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0KQEAgLTAsMCArMSwyIEBACisjJVBBTS0xLjAKK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuXzQuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDU3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIk11bHRpcGxleGluZyB0ZXJtaW5hbCBtYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiU2NyZWVuIGlzIGEgZnVsbC1zY3JlZW4gd2luZG93IG1hbmFnZXIgXAordGhhdCBtdWx0aXBsZXhlcyBhIHBoeXNpY2FsIHRlcm1pbmFsIGJldHdlZW4gc2V2ZXJhbCBcCitwcm9jZXNzZXMsIHR5cGljYWxseSBpbnRlcmFjdGl2ZSBzaGVsbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NjcmVlbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9mdW5jPWFkZGl0ZW0mZ3JvdXA9c2NyZWVuIgorCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2NyZWVuLmg7ZW5kbGluZT0yNjttZDU9Mzk3MTE0Mjk4OTI4OWE4MTk4YTU0NDIyMDcwM2MyYmYiCisKK0RFUEVORFMgPSAibmN1cnNlcyBcCisgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59ID0gImJhc2UtZmlsZXMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zY3JlZW4vc2NyZWVuLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2ZpbGU6Ly9zY3JlZW4ucGFtJywgJycsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtZm9yLW11bHRpam9iLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWJiM2IwZmYyNjc0ZTI5Mzc4YzMxYWQzNDExMTcwYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmE0MDQ5ZjhhZWUyODNkZTYyZTI4M2Q0MjdmMmNmZDM1ZDZjMzY5YjQwZjdmNDVmOTQ3ZGJmZDkxNTY5OWQ2MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t1dGVtcHRlcl0gPSAiYWNfY3ZfaGVhZGVyX3V0ZW1wdGVyX2g9eWVzLGFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPW5vLGxpYnV0ZW1wdGVyLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wdHktbW9kZT0wNjIwIC0td2l0aC1wdHktZ3JvdXA9NSBcCisgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0nLCAnLS1kaXNhYmxlLXBhbScsIGQpfSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDY0NCAke1dPUktESVJ9L3NjcmVlbi5wYW0gJHtEfS8ke3N5c2NvbmZkaXJ9L3BhbS5kL3NjcmVlbgorCWZpCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJZ3JlcCAtcSAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzIHx8IGVjaG8gJHtiaW5kaXJ9L3NjcmVlbiA+PiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzCit9CisKK3BrZ19wb3N0cm1fJHtQTn0gKCkgeworCXByaW50ZiAiJChncmVwIC12ICJeJHtiaW5kaXJ9L3NjcmVlbiQiICREJHtzeXNjb25mZGlyfS9zaGVsbHMpXG4iID4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvTWFrZXZhcnMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9NYWtldmFycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA5ZjUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvTWFrZXZhcnMKQEAgLTAsMCArMSwyNSBAQAorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKworIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisjIHRoZWlyIGNvcHlyaWdodC4KK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KK0VYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY1NTFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvZml4X3JldHVybl90eXBlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDaGFuZ2UgdGhlIGdldGxpbmUgcmV0dXJuIHR5cGUgdG8gbWF0Y2ggaXRzIGRlY2xhcmF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitkaWZmIC11ck4gc2VkLTQuMS4yLW9yaWcvbGliL2dldGxpbmUuYyBzZWQtNC4xLjIvbGliL2dldGxpbmUuYworLS0tIHNlZC00LjEuMi1vcmlnL2xpYi9nZXRsaW5lLmMJMjAxMC0wOC0zMSAwODo0Nzo1MC4wNzAwOTQwMjQgKzA4MDAKKysrKyBzZWQtNC4xLjIvbGliL2dldGxpbmUuYwkyMDEwLTA4LTMxIDA4OjQ4OjUwLjk4MjE3ODE3MiArMDgwMAorQEAgLTMwLDcgKzMwLDcgQEAKKyAgICBuZWNlc3NhcnkuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIChub3QgaW5jbHVkaW5nIHRoZQorICAgIG51bGwgdGVybWluYXRvciksIG9yIC0xIG9uIGVycm9yIG9yIEVPRi4gICovCisgCistc2l6ZV90Cisrc3NpemVfdAorIGdldGxpbmUgKGxpbmVwdHIsIG4sIHN0cmVhbSkKKyAgICAgIGNoYXIgKipsaW5lcHRyOworICAgICAgc2l6ZV90ICpuOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1OTQwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlLTEuMTIueCBoYXMgZGVwcmVjYXRlZCB1c2Ugb2YgQG1rZGlyX3BALCBmaXggdGhlIGlzc3VlIGJ5IHVzaW5nIEBNS0RJUl9QQCBpbnN0ZWFkLgorCitBdm9pZCB0aGlzIGJ1aWxkIGlzc3VlOgorfCBtYWtlWzFdOiBta2Rpcl9wQDogQ29tbWFuZCBub3QgZm91bmQKK3wgbWFrZVsxXTogKioqIFtpbnN0YWxsLWRhdGEteWVzXSBFcnJvciAxMjcKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMTMKKworSW5kZXg6IHNlZC00LjEuMi9pbnRsL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2VkLTQuMS4yLm9yaWcvaW50bC9NYWtlZmlsZS5pbgorKysrIHNlZC00LjEuMi9pbnRsL01ha2VmaWxlLmluCitAQCAtNDAsNyArNDAsNyBAQCBzdWJkaXIgPSBpbnRsCisgSU5TVEFMTCA9IEBJTlNUQUxMQAorIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisgbWtpbnN0YWxsZGlycyA9ICQobWtkaXJfcCkKKy1ta2Rpcl9wID0gQG1rZGlyX3BACisrbWtkaXJfcCA9IEBNS0RJUl9QQAorIAorIGwgPSBASU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhACisgCitJbmRleDogc2VkLTQuMS4yL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2VkLTQuMS4yLm9yaWcvcG8vTWFrZWZpbGUuaW4uaW4KKysrKyBzZWQtNC4xLjIvcG8vTWFrZWZpbGUuaW4uaW4KK0BAIC0yOSw3ICsyOSw3IEBAIGdldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKyBJTlNUQUxMID0gL3Nydi9ob21lL25pdGluL2J1aWxkczIvYnVpbGQwL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9pbnN0YWxsIC1jCisgSU5TVEFMTF9EQVRBID0gJHtJTlNUQUxMfSAtbSA2NDQKKyBta2luc3RhbGxkaXJzID0gJChta2Rpcl9wKQorLW1rZGlyX3AgPSBAbWtkaXJfcEAKKytta2Rpcl9wID0gQE1LRElSX1BACisgCisgQ0MgPSBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9zcnYvaG9tZS9uaXRpbi9idWlsZHMyL2J1aWxkMC90bXAvc3lzcm9vdHMvcWVtdXg4NgorIEdNU0dGTVQgPSAvc3J2L2hvbWUvbml0aW4vYnVpbGRzMi9idWlsZDAvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL21zZ2ZtdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMGY2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0c3VpdGUgLWsgcnVudGVzdC1URVNUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvc2VkLWFkZC1wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1ZThiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorc2VkOiBhZGQgcHRlc3QKKworcHRlc3QgbmVlZHMgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMuCitzZXJpYWwtdGVzdHMgaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhvc2UgdGFyZ2V0cy4KKworQW5kIGZpeCBmb2xsb3dpbmcgZXJyb3IgYWZ0ZXIgYWRkIHNlcmlhbC10ZXN0cy4KKworW3NuaXBdCitoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSAuLi9zZWQvc2VkCittYWtlWzJdOiAqKiogW3NlZC4xXSBFcnJvciAyCitbc25pcF0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgICAgMiArLQorIGRvYy9NYWtlZmlsZS5hbSAgICAgICB8ICAgIDIgKy0KKyB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gfCAgICA2ICsrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZDMzZWM5Li40ZjBjNTMyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00LDcgKzQsNyBAQCBBQ19DT05GSUdfQVVYX0RJUihidWlsZC1hdXgpCisgQUNfQ09ORklHX1NSQ0RJUihbc2VkL3NlZC5jXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oOmNvbmZpZ19oLmluKQorIEFDX1BSRVJFUSgyLjYwKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtzZXJpYWwtdGVzdHNdKQorIAorIFNFRF9GRUFUVVJFX1ZFUlNJT049NC4yLjIKKyBBQ19ERUZJTkVfVU5RVU9URUQoU0VEX0ZFQVRVUkVfVkVSU0lPTiwgIiRTRURfRkVBVFVSRV9WRVJTSU9OIiwKK2RpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KK2luZGV4IGFmNjk3NWMuLjZmZDhjOWEgMTAwNjQ0CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTI1LDcgKzI1LDcgQEAgJChzcmNkaXIpL3MtdGV4aTogc2VkLWluLnRleGkgJChzcmNkaXIpL2dyb3VwaWZ5LnNlZAorIAlmaQorIAllY2hvIHN0YW1wID4gJChzcmNkaXIpL3MtdGV4aQorIAorLXNlZC4xOiAkKHRvcF9zcmNkaXIpL3NlZC9zZWQuYyAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYyAkKHNyY2Rpcikvc2VkLngKKytfc2VkLjE6ICQodG9wX3NyY2Rpcikvc2VkL3NlZC5jICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjICQoc3JjZGlyKS9zZWQueAorIAkkKEhFTFAyTUFOKSAtLW5hbWUgInN0cmVhbSBlZGl0b3IgZm9yIGZpbHRlcmluZyBhbmQgdHJhbnNmb3JtaW5nIHRleHQiIFwKKyAJICAtcCBzZWQgLS1pbmNsdWRlICQoc3JjZGlyKS9zZWQueCAtbyAkKHNyY2Rpcikvc2VkLjEgJChTRUQpIAorIAorZGlmZiAtLWdpdCBhL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQoraW5kZXggZDgwZTcyYy4uYjA1ZjAxZSAxMDA2NDQKKy0tLSBhL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHN1aXRlL01ha2VmaWxlLmFtCitAQCAtOTksNSArOTksMTEgQEAgRVhUUkFfRElTVCA9IFwKKyAjIGF1dG9tYWtlIG1ha2VzIGBjaGVjaycgZGVwZW5kIG9uICQoVEVTVFMpLiAgRGVjbGFyZQorICMgZHVtbXkgdGFyZ2V0cyBmb3IgJChURVNUUykgc28gdGhhdCBtYWtlIGRvZXMgbm90IGNvbXBsYWluLgorIAorK2luc3RhbGwtcHRlc3Q6CisrCWNkICQoQlVJTERESVIpOyB0YXIgLWNmIC0gJChURVNURElSKSAtLWV4Y2x1ZGUgKi5vIHwgKCBjZCAkKERFU1RESVIpICYmIHRhciAteGYgLSApCisrCWZvciBpIGluICQoRVhUUkFfRElTVCkgdHN0LXJlZ2V4Mi5jOyBkbyBpbnN0YWxsICQoc3JjZGlyKS8kJGkgJChERVNURElSKS8kKFRFU1RESVIpOyBkb25lCisrCXNlZCAtZSAncy9eTWFrZWZpbGU6L19NYWtlZmlsZTovJyAtZSAncy9ec3JjZGlyID0gXCguKlwpL3NyY2RpciA9IC4vJyAtZSAncy9iYXNoL3NoLycgLWkgJChERVNURElSKS8kKFRFU1RESVIpL01ha2VmaWxlCisrCWZvciBpIGluIGBncmVwIC1ybCAiLi4vc2VkL3NlZCIgJChERVNURElSKS8kKFRFU1RESVIpYDsgZG8gc2VkIC1lICdzLy4uXC9zZWRcL3NlZC9zZWQvJyAtaSAkJGk7IGRvbmUKKysKKyAuUEhPTlk6ICQoU0VEVEVTVFMpCisgJChTRURURVNUUyk6CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4xLjIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGUzYTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4xLjIuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJTdHJlYW0gRURpdG9yICh0ZXh0IGZpbHRlcmluZyB1dGlsaXR5KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zZWQvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZWQvc2VkLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9ZTAwZmZkMTgzN2YyOTg0MzlhMjE0ZmQxOTdmNmE0MDciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3NlZC9zZWQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2V2YXJzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTI4ZjBlMDY0MjJmNDE0MDkxOTE3NDAxZjFhODM0ZDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjM4ZTgzN2JhNzY1ZDVkYTBhMzBjOThiNTdjMjk1M2NlY2VhOTY4Mjc4ODJmNTk0NjEyYWNhY2U5M2NlZWVhYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGdldHRleHQKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWNwICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCWlmIFsgISAke0R9JHtiaW5kaXJ9IC1lZiAke0R9JHtiYXNlX2JpbmRpcn0gXTsgdGhlbgorCSAgICBtdiAke0R9JHtiaW5kaXJ9L3NlZCAke0R9JHtiYXNlX2JpbmRpcn0vc2VkCisJICAgIHJtZGlyICR7RH0ke2JpbmRpcn0vCisJZmkKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2VkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NlZF0gPSAiJHtiYXNlX2JpbmRpcn0vc2VkIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjIuMi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTdkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjIuMi5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIlN0cmVhbSBFRGl0b3IgKHRleHQgZmlsdGVyaW5nIHV0aWxpdHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NlZC8iCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYyN2RlZmUxZTk2YzJlMWVjZDRlMGM5YmU4OTY3OTQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlZC9zZWQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT03NjdhYjNhMDZkNzU4NGY2ZmQwNDY5YWJhZWM0NDEyZiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3NlZC9zZWQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3NlZC1hZGQtcHRlc3QucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MTExZGU0ZmFhM2I5ODQ4YTA2ODZiMmYyNjBjNTA1NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZWEwYTk0ZDRiNjA1ODk0ZjNlMmQ1NTcyZTNmOTZlNDQxM2JjYWQzYTA4NWFhZTczNjdjMmNmMDc5MDhiMmZmIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ2V0dGV4dCBwdGVzdAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfS1wdGVzdF9hcHBlbmRfbGliYy1nbGliYyA9ICIgbG9jYWxlLWJhc2UtcnUtcnUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtYWNsIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUFRFU1RfRU5BQkxFRCcsICcxJywgJy0tZW5hYmxlLXJlZ2V4LXRlc3RzJywgJycsIGQpfSIKKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCWlmIFsgISAke0R9JHtiaW5kaXJ9IC1lZiAke0R9JHtiYXNlX2JpbmRpcn0gXTsgdGhlbgorCSAgICBtdiAke0R9JHtiaW5kaXJ9L3NlZCAke0R9JHtiYXNlX2JpbmRpcn0vc2VkCisJICAgIHJtZGlyICR7RH0ke2JpbmRpcn0vCisJZmkKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2VkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NlZF0gPSAiJHtiYXNlX2JpbmRpcn0vc2VkIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitURVNURElSID0gInRlc3RzdWl0ZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gYnVpbGR0ZXN0LVRFU1RTCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGluc3RhbGwtcHRlc3QgQlVJTERESVI9JHtCfSBERVNURElSPSR7RH0ke1BURVNUX1BBVEh9IFRFU1RESVI9JHtURVNURElSfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtRG8tbm90LXJlYWQtbG9naW4uZGVmcy1iZWZvcmUtZG9pbmctY2hyb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhiOTVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDE3MGMyNWM4ZTBiNWMzZGMyNjE1ZDFkYjk0YzhkMjRhMTNmZjk5YmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KK0RhdGU6IFRodSwgMTEgU2VwIDIwMTQgMTU6MTE6MjMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRG8gbm90IHJlYWQgbG9naW4uZGVmcyBiZWZvcmUgZG9pbmcgY2hyb290KCkKKworSWYgInVzZXJhZGQgLS1yb290IDxyb290PiAuLi4iIHdhcyB1c2VkLCB0aGUgbG9naW4uZGVmcyBmaWxlIHdvdWxkIHN0aWxsCitiZSByZWFkIGZyb20gL2V0Yy9sb2dpbi5kZWZzIGluc3RlYWQgb2YgPHJvb3Q+L2V0Yy9sb2dpbi5kZWZzLiBUaGlzIHdhcworZHVlIHRvIGdldGRlZl91bG9uZygpIGJlaW5nIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc19yb290X2ZsYWcoKS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9saXN0cy5hbGlvdGguZGViaWFuLm9yZy9waXBlcm1haWwvcGtnLXNoYWRvdy1kZXZlbC8yMDE0LVNlcHRlbWJlci8wMTA0NDYuaHRtbF0KKworU2lnbmVkLW9mZi1ieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwZXRlci5ramVsbGVyc3RlZHRAYXhpcy5jb20+CistLS0KKyBzcmMvdXNlcmFkZC5jIHwgOCArKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvdXNlcmFkZC5jIGIvc3JjL3VzZXJhZGQuYworaW5kZXggYThhMWY3Ni4uZTFlYmY1MCAxMDA2NDQKKy0tLSBhL3NyYy91c2VyYWRkLmMKKysrKyBiL3NyYy91c2VyYWRkLmMKK0BAIC0xOTkzLDkgKzE5OTMsMTEgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjZW5kaWYJCQkJLyogVVNFX1BBTSAqLworICNlbmRpZgkJCQkvKiBBQ0NUX1RPT0xTX1NFVFVJRCAqLworIAorKyNpZmRlZiBFTkFCTEVfU1VCSURTCisgCS8qIE5lZWRlZCBmb3IgdXNlcm5zIGNoZWNrICovCistCXVpZF90IHVpZF9taW4gPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NSU4iLCAxMDAwVUwpOworLQl1aWRfdCB1aWRfbWF4ID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUFYIiwgNjAwMDBVTCk7CisrCXVpZF90IHVpZF9taW47CisrCXVpZF90IHVpZF9tYXg7CisrI2VuZGlmCisgCisgCS8qCisgCSAqIEdldCBteSBuYW1lIHNvIHRoYXQgSSBjYW4gdXNlIGl0IHRvIHJlcG9ydCBlcnJvcnMuCitAQCAtMjAyNiw2ICsyMDI4LDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJaXNfc2hhZG93X2dycCA9IHNncl9maWxlX3ByZXNlbnQgKCk7CisgI2VuZGlmCisgI2lmZGVmIEVOQUJMRV9TVUJJRFMKKysJdWlkX21pbiA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01JTiIsIDEwMDBVTCk7CisrCXVpZF9tYXggPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NQVgiLCA2MDAwMFVMKTsKKyAJaXNfc3ViX3VpZCA9IHN1Yl91aWRfZmlsZV9wcmVzZW50ICgpICYmICFyZmxnICYmCisgCSAgICAoIXVzZXJfaWQgfHwgKHVzZXJfaWQgPD0gdWlkX21heCAmJiB1c2VyX2lkID49IHVpZF9taW4pKTsKKyAJaXNfc3ViX2dpZCA9IHN1Yl9naWRfZmlsZV9wcmVzZW50ICgpICYmICFyZmxnICYmCistLSAKKzEuOS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRkZThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLXVzZXJhZGQuYy1jcmVhdGUtcGFyZW50LWRpcmVjdG9yaWVzLXdoZW4tbmVjZXNzYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTA5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTdWJqZWN0OiB1c2VyYWRkLmM6IGNyZWF0ZSBwYXJlbnQgZGlyZWN0b3JpZXMgd2hlbiBuZWNlc3NhcnkKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3VzZXJhZGQuYyB8ICAgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IDRiZDk2OWQuLmNiNWRkNmMgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtMTg5Myw2ICsxODkzLDM1IEBAIHN0YXRpYyB2b2lkIHVzcl91cGRhdGUgKHZvaWQpCisgfQorIAorIC8qCisrICogbWtkaXJfcCAtIGNyZWF0ZSBkaXJlY3RvcmllcywgaW5jbHVkaW5nIHBhcmVudCBkaXJlY3RvcmllcyB3aGVuIG5lZWRlZAorKyAqCisrICogc2ltaWxhciB0byBgbWtkaXIgLXAnCisrICovCisrdm9pZCBta2Rpcl9wKGNvbnN0IGNoYXIgKnBhdGgpIHsKKysJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKysJY2hhciBuZXdkaXJbbGVuICsgMV07CisrCW1vZGVfdCBtb2RlID0gMDc1NTsKKysJaW50IGkgPSAwOworKworKwlpZiAocGF0aFtpXSA9PSAnXDAnKSB7CisrCQlyZXR1cm47CisrCX0KKysKKysJLyogc2tpcCB0aGUgbGVhZGluZyAnLycgKi8KKysJaSsrOworKworKwl3aGlsZShwYXRoW2ldICE9ICdcMCcpIHsKKysJCWlmIChwYXRoW2ldID09ICcvJykgeworKwkJCXN0cm5jcHkobmV3ZGlyLCBwYXRoLCBpKTsKKysJCQluZXdkaXJbaV0gPSAnXDAnOworKwkJCW1rZGlyKG5ld2RpciwgbW9kZSk7CisrCQl9CisrCQlpKys7CisrCX0KKysJbWtkaXIocGF0aCwgbW9kZSk7CisrfQorKworKy8qCisgICogY3JlYXRlX2hvbWUgLSBjcmVhdGUgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeQorICAqCisgICoJY3JlYXRlX2hvbWUoKSBjcmVhdGVzIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QKK0BAIC0xOTA3LDM2ICsxOTM2LDMzIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9ob21lICh2b2lkKQorIAkJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKyAJCX0KKyAjZW5kaWYKKy0JCS8qIFhYWCAtIGNyZWF0ZSBtaXNzaW5nIHBhcmVudCBkaXJlY3Rvcmllcy4gIC0tbWFyZWttICovCistCQlpZiAobWtkaXIgKHVzZXJfaG9tZSwgMCkgIT0gMCkgeworLQkJCWZwcmludGYgKHN0ZGVyciwKKy0JCQkgICAgICAgICBfKCIlczogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJXNcbiIpLAorLQkJCSAgICAgICAgIFByb2csIHVzZXJfaG9tZSk7CistI2lmZGVmIFdJVEhfQVVESVQKKy0JCQlhdWRpdF9sb2dnZXIgKEFVRElUX0FERF9VU0VSLCBQcm9nLAorLQkJCSAgICAgICAgICAgICAgImFkZGluZyBob21lIGRpcmVjdG9yeSIsCistCQkJICAgICAgICAgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCistCQkJICAgICAgICAgICAgICBTSEFET1dfQVVESVRfRkFJTFVSRSk7CistI2VuZGlmCistCQkJZmFpbF9leGl0IChFX0hPTUVESVIpOworLQkJfQorLQkJY2hvd24gKHVzZXJfaG9tZSwgdXNlcl9pZCwgdXNlcl9naWQpOworLQkJY2htb2QgKHVzZXJfaG9tZSwKKy0JCSAgICAgICAwNzc3ICYgfmdldGRlZl9udW0gKCJVTUFTSyIsIEdFVERFRl9ERUZBVUxUX1VNQVNLKSk7CistCQlob21lX2FkZGVkID0gdHJ1ZTsKKysJCW1rZGlyX3AodXNlcl9ob21lKTsKKysJfQorKwlpZiAoYWNjZXNzICh1c2VyX2hvbWUsIEZfT0spICE9IDApIHsKKyAjaWZkZWYgV0lUSF9BVURJVAorIAkJYXVkaXRfbG9nZ2VyIChBVURJVF9BRERfVVNFUiwgUHJvZywKKyAJCSAgICAgICAgICAgICAgImFkZGluZyBob21lIGRpcmVjdG9yeSIsCisgCQkgICAgICAgICAgICAgIHVzZXJfbmFtZSwgKHVuc2lnbmVkIGludCkgdXNlcl9pZCwKKy0JCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX1NVQ0NFU1MpOworKwkJICAgICAgICAgICAgICBTSEFET1dfQVVESVRfRkFJTFVSRSk7CisgI2VuZGlmCistI2lmZGVmIFdJVEhfU0VMSU5VWAorLQkJLyogUmVzZXQgU0VMaW51eCB0byBjcmVhdGUgZmlsZXMgd2l0aCBkZWZhdWx0IGNvbnRleHRzICovCistCQlpZiAocmVzZXRfc2VsaW51eF9maWxlX2NvbnRleHQgKCkgIT0gMCkgeworLQkJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKy0JCX0KKysJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKysJfQorKwljaG93biAodXNlcl9ob21lLCB1c2VyX2lkLCB1c2VyX2dpZCk7CisrCWNobW9kICh1c2VyX2hvbWUsCisrCSAgICAgICAwNzc3ICYgfmdldGRlZl9udW0gKCJVTUFTSyIsIEdFVERFRl9ERUZBVUxUX1VNQVNLKSk7CisrCWhvbWVfYWRkZWQgPSB0cnVlOworKyNpZmRlZiBXSVRIX0FVRElUCisrCWF1ZGl0X2xvZ2dlciAoQVVESVRfQUREX1VTRVIsIFByb2csCisrCQkgICAgICAiYWRkaW5nIGhvbWUgZGlyZWN0b3J5IiwKKysJCSAgICAgIHVzZXJfbmFtZSwgKHVuc2lnbmVkIGludCkgdXNlcl9pZCwKKysJCSAgICAgIFNIQURPV19BVURJVF9TVUNDRVNTKTsKKyAjZW5kaWYKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCS8qIFJlc2V0IFNFTGludXggdG8gY3JlYXRlIGZpbGVzIHdpdGggZGVmYXVsdCBjb250ZXh0cyAqLworKwlpZiAocmVzZXRfc2VsaW51eF9maWxlX2NvbnRleHQgKCkgIT0gMCkgeworKwkJZmFpbF9leGl0IChFX0hPTUVESVIpOworIAl9CisrI2VuZGlmCisgfQorIAorIC8qCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGEyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2FsbG93LWZvci1zZXR0aW5nLXBhc3N3b3JkLWluLWNsZWFyLXRleHQucGF0Y2gKQEAgLTAsMCArMSwyMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK0FsbG93IGZvciBzZXR0aW5nIHBhc3N3b3JkIGluIGNsZWFyIHRleHQuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9NYWtlZmlsZS5hbSB8ICAgIDggKysrKy0tLS0KKyBzcmMvZ3JvdXBhZGQuYyAgfCAgICA4ICsrKysrKystCisgc3JjL2dyb3VwbW9kLmMgIHwgICAgOCArKysrKysrLQorIHNyYy91c2VyYWRkLmMgICB8ICAgIDkgKysrKysrKy0tCisgc3JjL3VzZXJtb2QuYyAgIHwgICAgOCArKysrKysrLQorIDUgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMjVlMjg4ZC4uODU2YjA4NyAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtODgsMTAgKzg4LDEwIEBAIGNoZ3Bhc3N3ZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKyBjaHNoX0xEQUREICAgICA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFRfTk9QQU0pICQoTElCU0tFWSkgJChMSUJNRCkKKyBjaHBhc3N3ZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgZ3Bhc3N3ZF9MREFERCAgPSAkKExEQUREKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCistZ3JvdXBhZGRfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpCisrZ3JvdXBhZGRfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgZ3JvdXBkZWxfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpCisgZ3JvdXBtZW1zX0xEQUREID0gJChMREFERCkgJChMSUJQQU0pICQoTElCU0VMSU5VWCkKKy1ncm91cG1vZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkKKytncm91cG1vZF9MREFERCA9ICQoTERBREQpICQoTElCUEFNX1NVSUQpICQoTElCQVVESVQpICQoTElCU0VMSU5VWCkgJChMSUJDUllQVCkKKyBncnBja19MREFERCAgICA9ICQoTERBREQpICQoTElCU0VMSU5VWCkKKyBncnBjb252X0xEQUREICA9ICQoTERBREQpICQoTElCU0VMSU5VWCkKKyBncnB1bmNvbnZfTERBREQgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCitAQCAtMTExLDkgKzExMSw5IEBAIHN1X1NPVVJDRVMgICAgID0gXAorIAlzdWF1dGguYworIHN1X0xEQUREICAgICAgID0gJChMREFERCkgJChMSUJQQU0pICQoTElCQ1JZUFRfTk9QQU0pICQoTElCU0tFWSkgJChMSUJNRCkKKyBzdWxvZ2luX0xEQUREICA9ICQoTERBREQpICQoTElCQ1JZUFQpCistdXNlcmFkZF9MREFERCAgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCU0VNQU5BR0UpICQoTElCQUNMKSAkKExJQkFUVFIpCisrdXNlcmFkZF9MREFERCAgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCU0VNQU5BR0UpICQoTElCQUNMKSAkKExJQkFUVFIpICQoTElCQ1JZUFQpCisgdXNlcmRlbF9MREFERCAgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCU0VNQU5BR0UpCistdXNlcm1vZF9MREFERCAgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCU0VNQU5BR0UpICQoTElCQUNMKSAkKExJQkFUVFIpCisrdXNlcm1vZF9MREFERCAgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCU0VNQU5BR0UpICQoTElCQUNMKSAkKExJQkFUVFIpICQoTElCQ1JZUFQpCisgdmlwd19MREFERCAgICAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgCisgaW5zdGFsbC1hbTogYWxsLWFtCitkaWZmIC0tZ2l0IGEvc3JjL2dyb3VwYWRkLmMgYi9zcmMvZ3JvdXBhZGQuYworaW5kZXggZjcxNmY1Ny4uNGUyOGMyNiAxMDA2NDQKKy0tLSBhL3NyYy9ncm91cGFkZC5jCisrKysgYi9zcmMvZ3JvdXBhZGQuYworQEAgLTEyNCw2ICsxMjQsNyBAQCBzdGF0aWMgLypAbm9yZXR1cm5AKi92b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gY3JlYXRlIGdyb3VwcyB3aXRoIGR1cGxpY2F0ZVxuIgorIAkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vbi11bmlxdWUpIEdJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIHVzZSB0aGlzIGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIHVzZSB0aGlzIGNsZWFyIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXIsIC0tc3lzdGVtICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc3lzdGVtIGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtUiwgLS1yb290IENIUk9PVF9ESVIgICAgICAgICBkaXJlY3RvcnkgdG8gY2hyb290IGludG9cbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoIlxuIiwgdXNhZ2VvdXQpOworQEAgLTM4NywxMiArMzg4LDEzIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCXsia2V5IiwgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnSyd9LAorIAkJeyJub24tdW5pcXVlIiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdvJ30sCisgCQl7InBhc3N3b3JkIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysJCXsiY2xlYXItcGFzc3dvcmQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKKyAJCXsic3lzdGVtIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAncid9LAorIAkJeyJyb290IiwgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQl7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KKyAJfTsKKyAKKy0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJmZzpoSzpvcDpyUjoiLAorKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImZnOmhLOm9wOlA6clI6IiwKKyAJCSAgICAgICAgICAgICAgICAgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKKyAJCXN3aXRjaCAoYykgeworIAkJY2FzZSAnZic6CitAQCAtNDQ0LDYgKzQ0NiwxMCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJcGZsZyA9IHRydWU7CisgCQkJZ3JvdXBfcGFzc3dkID0gb3B0YXJnOworIAkJCWJyZWFrOworKwkJY2FzZSAnUCc6CisrCQkJcGZsZyA9IHRydWU7CisrCQkJZ3JvdXBfcGFzc3dkID0gcHdfZW5jcnlwdCAob3B0YXJnLCBjcnlwdF9tYWtlX3NhbHQgKE5VTEwsIE5VTEwpKTsKKysJCQlicmVhazsKKyAJCWNhc2UgJ3InOgorIAkJCXJmbGcgPSB0cnVlOworIAkJCWJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy9ncm91cG1vZC5jIGIvc3JjL2dyb3VwbW9kLmMKK2luZGV4IGQ5ZDM4MDcuLjY4ZjQ5ZDEgMTAwNjQ0CistLS0gYS9zcmMvZ3JvdXBtb2QuYworKysrIGIvc3JjL2dyb3VwbW9kLmMKK0BAIC0xMjcsNiArMTI3LDcgQEAgc3RhdGljIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpCisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB0byB1c2UgYSBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIEdJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIGNoYW5nZSB0aGUgcGFzc3dvcmQgdG8gdGhpcyAoZW5jcnlwdGVkKVxuIgorIAkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFTU1dPUkRcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCBjaGFuZ2UgdGhlIHBhc3N3b3JkIHRvIHRoaXMgY2xlYXIgUEFTU1dPUkRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtUiwgLS1yb290IENIUk9PVF9ESVIgICAgICAgICBkaXJlY3RvcnkgdG8gY2hyb290IGludG9cbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoIlxuIiwgdXNhZ2VvdXQpOworIAlleGl0IChzdGF0dXMpOworQEAgLTM3NSwxMCArMzc2LDExIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCXsibmV3LW5hbWUiLCAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbid9LAorIAkJeyJub24tdW5pcXVlIiwgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdvJ30sCisgCQl7InBhc3N3b3JkIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysJCXsiY2xlYXItcGFzc3dvcmQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKKyAJCXsicm9vdCIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJe05VTEwsIDAsIE5VTEwsICdcMCd9CisgCX07CistCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZzpobjpvcDpSOiIsCisrCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZzpobjpvcDpQOlI6IiwKKyAJCSAgICAgICAgICAgICAgICAgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKKyAJCXN3aXRjaCAoYykgeworIAkJY2FzZSAnZyc6CitAQCAtNDA1LDYgKzQwNywxMCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJZ3JvdXBfcGFzc3dkID0gb3B0YXJnOworIAkJCXBmbGcgPSB0cnVlOworIAkJCWJyZWFrOworKwkJY2FzZSAnUCc6CisrCQkJZ3JvdXBfcGFzc3dkID0gcHdfZW5jcnlwdCAob3B0YXJnLCBjcnlwdF9tYWtlX3NhbHQgKE5VTEwsIE5VTEwpKTsKKysJCQlwZmxnID0gdHJ1ZTsKKysJCQlicmVhazsKKyAJCWNhc2UgJ1InOiAvKiBuby1vcCwgaGFuZGxlZCBpbiBwcm9jZXNzX3Jvb3RfZmxhZyAoKSAqLworIAkJCWJyZWFrOworIAkJZGVmYXVsdDoKK2RpZmYgLS1naXQgYS9zcmMvdXNlcmFkZC5jIGIvc3JjL3VzZXJhZGQuYworaW5kZXggYjNiZDQ1MS4uNDQxNmY5MCAxMDA2NDQKKy0tLSBhL3NyYy91c2VyYWRkLmMKKysrKyBiL3NyYy91c2VyYWRkLmMKK0BAIC03NzMsNiArNzczLDcgQEAgc3RhdGljIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpCisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB0byBjcmVhdGUgdXNlcnMgd2l0aCBkdXBsaWNhdGVcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub24tdW5pcXVlKSBVSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICBlbmNyeXB0ZWQgcGFzc3dvcmQgb2YgdGhlIG5ldyBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgY2xlYXIgcGFzc3dvcmQgb2YgdGhlIG5ldyBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXIsIC0tc3lzdGVtICAgICAgICAgICAgICAgICAgY3JlYXRlIGEgc3lzdGVtIGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtUiwgLS1yb290IENIUk9PVF9ESVIgICAgICAgICBkaXJlY3RvcnkgdG8gY2hyb290IGludG9cbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcywgLS1zaGVsbCBTSEVMTCAgICAgICAgICAgICBsb2dpbiBzaGVsbCBvZiB0aGUgbmV3IGFjY291bnRcbiIpLCB1c2FnZW91dCk7CitAQCAtMTA0Nyw2ICsxMDQ4LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXsibm8tdXNlci1ncm91cCIsICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ04nfSwKKyAJCQl7Im5vbi11bmlxdWUiLCAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdvJ30sCisgCQkJeyJwYXNzd29yZCIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKwkJCXsiY2xlYXItcGFzc3dvcmQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwKKyAJCQl7InN5c3RlbSIsICAgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdyJ30sCisgCQkJeyJyb290IiwgICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJCXsic2hlbGwiLCAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKK0BAIC0xMDU5LDkgKzEwNjEsOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl9OworIAkJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsCisgI2lmZGVmIFdJVEhfU0VMSU5VWAorLQkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpyUjpzOnU6VVo6IiwKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6UDpyUjpzOnU6VVo6IiwKKyAjZWxzZQkJCQkvKiAhV0lUSF9TRUxJTlVYICovCistCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOnJSOnM6dTpVIiwKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6UDpyUjpzOnU6VSIsCisgI2VuZGlmCQkJCS8qICFXSVRIX1NFTElOVVggKi8KKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkgeworIAkJCXN3aXRjaCAoYykgeworQEAgLTEyMjcsNiArMTIyOSw5IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQkJfQorIAkJCQl1c2VyX3Bhc3MgPSBvcHRhcmc7CisgCQkJCWJyZWFrOworKwkJCWNhc2UgJ1AnOiAvKiBzZXQgY2xlYXIgdGV4dCBwYXNzd29yZCAqLworKwkJCQl1c2VyX3Bhc3MgPSBwd19lbmNyeXB0IChvcHRhcmcsIGNyeXB0X21ha2Vfc2FsdCAoTlVMTCwgTlVMTCkpOworKwkJCQlicmVhazsKKyAJCQljYXNlICdyJzoKKyAJCQkJcmZsZyA9IHRydWU7CisgCQkJCWJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy91c2VybW9kLmMgYi9zcmMvdXNlcm1vZC5jCitpbmRleCBlN2Q0MzUxLi5iNzlmN2EzIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJtb2QuYworKysrIGIvc3JjL3VzZXJtb2QuYworQEAgLTQxOSw2ICs0MTksNyBAQCBzdGF0aWMgLypAbm9yZXR1cm5AKi92b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGxvY2F0aW9uICh1c2Ugb25seSB3aXRoIC1kKVxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHVzaW5nIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSkgVUlEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgdXNlIGVuY3J5cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5ldyBwYXNzd29yZFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIHVzZSBjbGVhciBwYXNzd29yZCBmb3IgdGhlIG5ldyBwYXNzd29yZFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1SLCAtLXJvb3QgQ0hST09UX0RJUiAgICAgICAgIGRpcmVjdG9yeSB0byBjaHJvb3QgaW50b1xuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1zLCAtLXNoZWxsIFNIRUxMICAgICAgICAgICAgIG5ldyBsb2dpbiBzaGVsbCBmb3IgdGhlIHVzZXIgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC11LCAtLXVpZCBVSUQgICAgICAgICAgICAgICAgIG5ldyBVSUQgZm9yIHRoZSB1c2VyIGFjY291bnRcbiIpLCB1c2FnZW91dCk7CitAQCAtOTk2LDYgKzk5Nyw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7Im1vdmUtaG9tZSIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbSd9LAorIAkJCXsibm9uLXVuaXF1ZSIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdvJ30sCisgCQkJeyJwYXNzd29yZCIsICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysJCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQkJeyJyb290IiwgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCQl7InNoZWxsIiwgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorIAkJCXsidWlkIiwgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd1J30sCitAQCAtMTAxMiw3ICsxMDE0LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXtOVUxMLCAwLCBOVUxMLCAnXDAnfQorIAkJfTsKKyAJCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LAorLQkJICAgICAgICAgICAgICAgICAgICAgICAgICJhYzpkOmU6ZjpnOkc6aGw6TG1vcDpSOnM6dTpVIgorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJhYzpkOmU6ZjpnOkc6aGw6TG1vcDpQOlI6czp1OlUiCisgI2lmZGVmIEVOQUJMRV9TVUJJRFMKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAidjp3OlY6VzoiCisgI2VuZGlmCQkJCS8qIEVOQUJMRV9TVUJJRFMgKi8KK0BAIC0xMTEyLDYgKzExMTQsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCQl1c2VyX3Bhc3MgPSBvcHRhcmc7CisgCQkJCXBmbGcgPSB0cnVlOworIAkJCQlicmVhazsKKysJCQljYXNlICdQJzoKKysJCQkJdXNlcl9wYXNzID0gcHdfZW5jcnlwdCAob3B0YXJnLCBjcnlwdF9tYWtlX3NhbHQgKE5VTEwsIE5VTEwpKTsKKysJCQkJcGZsZyA9IHRydWU7CisrCQkJCWJyZWFrOworIAkJCWNhc2UgJ1InOiAvKiBuby1vcCwgaGFuZGxlZCBpbiBwcm9jZXNzX3Jvb3RfZmxhZyAoKSAqLworIAkJCQlicmVhazsKKyAJCQljYXNlICdzJzoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NoZWNrX3NpemVfb2ZfdWlkX3RfYW5kX2dpZF90X3VzaW5nX0FDX0NIRUNLX1NJWkVPRi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY2hlY2tfc2l6ZV9vZl91aWRfdF9hbmRfZ2lkX3RfdXNpbmdfQUNfQ0hFQ0tfU0laRU9GLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NoZWNrX3NpemVfb2ZfdWlkX3RfYW5kX2dpZF90X3VzaW5nX0FDX0NIRUNLX1NJWkVPRi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDJjYjU0MTU4YjgwY2RiZDk3Y2EzYjM2ZGY4M2Y5MjU1ZTkyM2FlM2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYW1lcyBMZSBDdWlyb3QgPGNoZXdpQGF1cmEtb25saW5lLmNvLnVrPgorRGF0ZTogU2F0LCAyMyBBdWcgMjAxNCAwOTo0NjozOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBDaGVjayBzaXplIG9mIHVpZF90IGFuZCBnaWRfdCB1c2luZyBBQ19DSEVDS19TSVpFT0YKKworVGhpcyBidWlsdC1pbiBjaGVjayBpcyBzaW1wbGVyIHRoYW4gdGhlIHByZXZpb3VzIG1ldGhvZCBhbmQsIG1vc3QKK2ltcG9ydGFudGx5LCB3b3JrcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorW2h0dHBzOi8vZ2l0aHViLmNvbS9zaGFkb3ctbWFpbnQvc2hhZG93L2NvbW1pdC8yY2I1NDE1OGI4MGNkYmQ5N2NhM2IzNmRmODNmOTI1NWU5MjNhZTNmXQorCitTaWduZWQtb2ZmLWJ5OiBTZXJnZSBIYWxseW4gPHNlcmdlLmhhbGx5bkB1YnVudHUuY29tPgorLS0tCisgY29uZmlndXJlLmluIHwgMTQgKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggMWEzZjg0MS4uNGE0ZDZkMCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMzM1LDE2ICszMzUsMTAgQEAgaWYgdGVzdCAiJGVuYWJsZV9zdWJpZHMiICE9ICJubyI7IHRoZW4KKyAJZG5sCisgCWRubCBGSVhNRTogY2hlY2sgaWYgMzIgYml0IFVJRHMvR0lEcyBhcmUgc3VwcG9ydGVkIGJ5IGxpYmMKKyAJZG5sCistCUFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFsKKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistaW50IG1haW4odm9pZCkgeworLQl1aWRfdCB1OworLQlnaWRfdCBnOworLQlyZXR1cm4gKHNpemVvZiB1IDwgNCkgfHwgKHNpemVvZiBnIDwgNCk7CistfQorLQldKV0sIFtpZDMyYml0PSJ5ZXMiXSwgW2lkMzJiaXQ9Im5vIl0pCistCistCWlmIHRlc3QgIngkaWQzMmJpdCIgPSAieHllcyI7IHRoZW4KKysJQUNfQ0hFQ0tfU0laRU9GKFt1aWRfdF0sLCBbI2luY2x1ZGUgInN5cy90eXBlcy5oIl0pCisrCUFDX0NIRUNLX1NJWkVPRihbZ2lkX3RdLCwgWyNpbmNsdWRlICJzeXMvdHlwZXMuaCJdKQorKworKwlpZiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX3VpZF90IiAtZ2UgNCAmJiB0ZXN0ICIkYWNfY3Zfc2l6ZW9mX2dpZF90IiAtZ2UgNDsgdGhlbgorIAkJQUNfREVGSU5FKEVOQUJMRV9TVUJJRFMsIDEsIFtEZWZpbmUgdG8gc3VwcG9ydCB0aGUgc3Vib3JkaW5hdGUgSURzLl0pCisgCQllbmFibGVfc3ViaWRzPSJ5ZXMiCisgCWVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmEzZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jb21tb25pby5jLWZpeC11bmV4cGVjdGVkLW9wZW4tZmFpbHVyZS1pbi1jaHJvb3QtZW52LnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK2NvbW1vbmlvLmM6IGZpeCB1bmV4cGVjdGVkIG9wZW4gZmFpbHVyZSBpbiBjaHJvb3QgZW52aXJvbm1lbnQKKworV2hlbiB1c2luZyBjb21tYW5kcyB3aXRoICctUiA8bmV3cm9vdD4nIG9wdGlvbiBpbiBvdXIgcHNldWRvIGVudmlyb25tZW50LAord2Ugd291bGQgdXN1YWxseSBnZXQgdGhlICdQZW1pc3Npb24gRGVuaWVkJyBlcnJvci4gVGhpcyBwYXRjaCBzZXJ2ZXMgYXMKK2Egd29ya2Fyb3VuZCB0byB0aGlzIHByb2JsZW0uCisKK05vdGUgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIHRoZSBsb2dpYyBpbiB0aGUgY29kZSwgaXQganVzdCBleHBhbmRzCit0aGUgY29kZXMuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9jb21tb25pby5jIHwgICAxNiArKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvY29tbW9uaW8uYyBiL2xpYi9jb21tb25pby5jCitpbmRleCBjYzUzNmJmLi41MWNhZmQ5IDEwMDY0NAorLS0tIGEvbGliL2NvbW1vbmlvLmMKKysrKyBiL2xpYi9jb21tb25pby5jCitAQCAtNjEzLDEwICs2MTMsMTggQEAgaW50IGNvbW1vbmlvX29wZW4gKHN0cnVjdCBjb21tb25pb19kYiAqZGIsIGludCBtb2RlKQorIAlkYi0+Y3Vyc29yID0gTlVMTDsKKyAJZGItPmNoYW5nZWQgPSBmYWxzZTsKKyAKKy0JZmQgPSBvcGVuIChkYi0+ZmlsZW5hbWUsCistCSAgICAgICAgICAgICAoZGItPnJlYWRvbmx5ID8gT19SRE9OTFkgOiBPX1JEV1IpCistCSAgICAgICAgICAgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0sgfCBPX05PRk9MTE9XKTsKKy0Jc2F2ZWRfZXJybm8gPSBlcnJubzsKKysJaWYgKGRiLT5yZWFkb25seSkgeworKwkJZmQgPSBvcGVuIChkYi0+ZmlsZW5hbWUsCisrCQkJICAgKHRydWUgPyBPX1JET05MWSA6IE9fUkRXUikKKysJCQkgICB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyB8IE9fTk9GT0xMT1cpOworKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKysJfSBlbHNlIHsKKysJCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorKwkJCSAgIChmYWxzZSA/IE9fUkRPTkxZIDogT19SRFdSKQorKwkJCSAgIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19OT0ZPTExPVyk7CisrCQlzYXZlZF9lcnJubyA9IGVycm5vOworKwl9CisrCisgCWRiLT5mcCA9IE5VTEw7CisgCWlmIChmZCA+PSAwKSB7CisgI2lmZGVmIFdJVEhfVENCCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9kaXNhYmxlLXN5c2xvZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0M2ZkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRGlzYWJsZSB1c2Ugb2Ygc3lzbG9nIHRvIHByZXZlbnQgc3lzcm9vdCB1c2VyIGFuZCBncm91cCBhZGRpdGlvbnMgZnJvbQord3JpdGluZyBlbnRyaWVzIHRvIHRoZSBob3N0J3Mgc3lzbG9nLiBUaGlzIHBhdGNoIHNob3VsZCBvbmx5IGJlIHVzZWQKK3dpdGggdGhlIHNoYWRvdy1uYXRpdmUgcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBzaGFkb3ctNC4xLjQuMy5vcmlnLy9zcmMvZ3JvdXBhZGQuYyBzaGFkb3ctNC4xLjQuMy9zcmMvZ3JvdXBhZGQuYworLS0tIHNoYWRvdy00LjEuNC4zLm9yaWcvL3NyYy9ncm91cGFkZC5jCTIwMTEtMDItMTMgMDk6NTg6MTYuMDAwMDAwMDAwIC0wODAwCisrKysgc2hhZG93LTQuMS40LjMvc3JjL2dyb3VwYWRkLmMJMjAxMi0wNC0wNSAxMDowNTo1OS40NDAwMDE3NTggLTA3MDAKK0BAIC0zNCw2ICszNCw5IEBACisgCisgI2lkZW50ICIkSWQ6IGdyb3VwYWRkLmMgMzAxNSAyMDA5LTA2LTA1IDIyOjE2OjU2WiBuZWtyYWwtZ3Vlc3QgJCIKKyAKKysvKiBEaXNhYmxlIHVzZSBvZiBzeXNsb2cgc2luY2Ugd2UncmUgcnVubmluZyB0aGlzIGNvbW1hbmQgYWdhaW5zdCBhIHN5c3Jvb3QgKi8KKysjdW5kZWYgVVNFX1NZU0xPRworKworICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KK2RpZmYgLXVyTiBzaGFkb3ctNC4xLjQuMy5vcmlnLy9zcmMvdXNlcmFkZC5jIHNoYWRvdy00LjEuNC4zL3NyYy91c2VyYWRkLmMKKy0tLSBzaGFkb3ctNC4xLjQuMy5vcmlnLy9zcmMvdXNlcmFkZC5jCTIwMTEtMDItMTMgMDk6NTg6MTYuMDAwMDAwMDAwIC0wODAwCisrKysgc2hhZG93LTQuMS40LjMvc3JjL3VzZXJhZGQuYwkyMDEyLTA0LTA1IDEwOjA2OjI1LjA3NjAwMTMxNSAtMDcwMAorQEAgLTM0LDYgKzM0LDkgQEAKKyAKKyAjaWRlbnQgIiRJZDogdXNlcmFkZC5jIDMwMTUgMjAwOS0wNi0wNSAyMjoxNjo1NlogbmVrcmFsLWd1ZXN0ICQiCisgCisrLyogRGlzYWJsZSB1c2Ugb2Ygc3lzbG9nIHNpbmNlIHdlJ3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kIGFnYWluc3QgYSBzeXNyb290ICovCisrI3VuZGVmIFVTRV9TWVNMT0cKKysKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZml4LWluc3RhbGxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2I5MWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZml4IGluc3RhbGxhdGlvbiBmYWlsdXJlIHdpdGggc3ViaWRzIGRpc2FibGVkCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9NYWtlZmlsZS5hbSB8ICAgIDUgKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDI1ZTI4OGQuLjA3NmY4ZWYgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTUyLDcgKzUyLDEwIEBAIHVzYmluX1BST0dSQU1TID0gXAorIG5vaW5zdF9QUk9HUkFNUyA9IGlkIHN1bG9naW4KKyAKKyBzdWlkYmlucyAgICAgICA9IHN1Cistc3VpZHViaW5zICAgICAgPSBjaGFnZSBjaGZuIGNoc2ggZXhwaXJ5IGdwYXNzd2QgbmV3Z3JwIHBhc3N3ZCBuZXd1aWRtYXAgbmV3Z2lkbWFwCisrc3VpZHViaW5zICAgICAgPSBjaGFnZSBjaGZuIGNoc2ggZXhwaXJ5IGdwYXNzd2QgbmV3Z3JwIHBhc3N3ZAorK2lmIEVOQUJMRV9TVUJJRFMKKytzdWlkdWJpbnMgKz0gbmV3Z2lkbWFwIG5ld3VpZG1hcAorK2VuZGlmCisgaWYgQUNDVF9UT09MU19TRVRVSUQKKyAJc3VpZHViaW5zICs9IGNoYWdlIGNoZ3Bhc3N3ZCBjaHBhc3N3ZCBncm91cGFkZCBncm91cGRlbCBncm91cG1vZCBuZXd1c2VycyB1c2VyYWRkIHVzZXJkZWwgdXNlcm1vZAorIGVuZGlmCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjhkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3QKQEAgLTAsMCArMSwzODYgQEAKKyMKKyMgL2V0Yy9sb2dpbi5kZWZzIC0gQ29uZmlndXJhdGlvbiBjb250cm9sIGRlZmluaXRpb25zIGZvciB0aGUgc2hhZG93IHBhY2thZ2UuCisjCisjCSRJZDogbG9naW4uZGVmcyAzMDM4IDIwMDktMDctMjMgMjA6NDE6MzVaIG5la3JhbC1ndWVzdCAkCisjCisKKyMKKyMgRGVsYXkgaW4gc2Vjb25kcyBiZWZvcmUgYmVpbmcgYWxsb3dlZCBhbm90aGVyIGF0dGVtcHQgYWZ0ZXIgYSBsb2dpbiBmYWlsdXJlCisjIE5vdGU6IFdoZW4gUEFNIGlzIHVzZWQsIHNvbWUgbW9kdWxlcyBtYXkgZW5mb3JlIGEgbWluaW1hbCBkZWxheSAoZS5nLgorIyAgICAgICBwYW1fdW5peCBlbmZvcmNlcyBhIDJzIGRlbGF5KQorIworRkFJTF9ERUxBWQkJMworCisjCisjIEVuYWJsZSBsb2dnaW5nIGFuZCBkaXNwbGF5IG9mIC92YXIvbG9nL2ZhaWxsb2cgbG9naW4gZmFpbHVyZSBpbmZvLgorIworI0ZBSUxMT0dfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlIGRpc3BsYXkgb2YgdW5rbm93biB1c2VybmFtZXMgd2hlbiBsb2dpbiBmYWlsdXJlcyBhcmUgcmVjb3JkZWQuCisjCitMT0dfVU5LRkFJTF9FTkFCCW5vCisKKyMKKyMgRW5hYmxlIGxvZ2dpbmcgb2Ygc3VjY2Vzc2Z1bCBsb2dpbnMKKyMKK0xPR19PS19MT0dJTlMJCW5vCisKKyMKKyMgRW5hYmxlIGxvZ2dpbmcgYW5kIGRpc3BsYXkgb2YgL3Zhci9sb2cvbGFzdGxvZyBsb2dpbiB0aW1lIGluZm8uCisjCisjTEFTVExPR19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgY2hlY2tpbmcgYW5kIGRpc3BsYXkgb2YgbWFpbGJveCBzdGF0dXMgdXBvbiBsb2dpbi4KKyMKKyMgRGlzYWJsZSBpZiB0aGUgc2hlbGwgc3RhcnR1cCBmaWxlcyBhbHJlYWR5IGNoZWNrIGZvciBtYWlsCisjICgibWFpbHggLWUiIG9yIGVxdWl2YWxlbnQpLgorIworIyNNQUlMX0NIRUNLX0VOQUIJCXllcworCisjCisjIEVuYWJsZSBhZGRpdGlvbmFsIGNoZWNrcyB1cG9uIHBhc3N3b3JkIGNoYW5nZXMuCisjCisjT0JTQ1VSRV9DSEVDS1NfRU5BQgl5ZXMKKworIworIyBFbmFibGUgY2hlY2tpbmcgb2YgdGltZSByZXN0cmljdGlvbnMgc3BlY2lmaWVkIGluIC9ldGMvcG9ydHRpbWUuCisjCisjUE9SVFRJTUVfQ0hFQ0tTX0VOQUIJeWVzCisKKyMKKyMgRW5hYmxlIHNldHRpbmcgb2YgdWxpbWl0LCB1bWFzaywgYW5kIG5pY2VuZXNzIGZyb20gcGFzc3dkIGdlY29zIGZpZWxkLgorIworI1FVT1RBU19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgInN5c2xvZyIgbG9nZ2luZyBvZiBzdSBhY3Rpdml0eSAtIGluIGFkZGl0aW9uIHRvIHN1bG9nIGZpbGUgbG9nZ2luZy4KKyMgU1lTTE9HX1NHX0VOQUIgZG9lcyB0aGUgc2FtZSBmb3IgbmV3Z3JwIGFuZCBzZy4KKyMKK1NZU0xPR19TVV9FTkFCCQl5ZXMKK1NZU0xPR19TR19FTkFCCQl5ZXMKKworIworIyBJZiBkZWZpbmVkLCBlaXRoZXIgZnVsbCBwYXRobmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBkZXZpY2UgbmFtZXMgb3IKKyMgYSAiOiIgZGVsaW1pdGVkIGxpc3Qgb2YgZGV2aWNlIG5hbWVzLiAgUm9vdCBsb2dpbnMgd2lsbCBiZSBhbGxvd2VkIG9ubHkKKyMgdXBvbiB0aGVzZSBkZXZpY2VzLgorIworQ09OU09MRQkJL2V0Yy9zZWN1cmV0dHkKKyNDT05TT0xFCWNvbnNvbGU6dHR5MDE6dHR5MDI6dHR5MDM6dHR5MDQKKworIworIyBJZiBkZWZpbmVkLCBhbGwgc3UgYWN0aXZpdHkgaXMgbG9nZ2VkIHRvIHRoaXMgZmlsZS4KKyMKKyNTVUxPR19GSUxFCS92YXIvbG9nL3N1bG9nCisKKyMKKyMgSWYgZGVmaW5lZCwgIjoiIGRlbGltaXRlZCBsaXN0IG9mICJtZXNzYWdlIG9mIHRoZSBkYXkiIGZpbGVzIHRvCisjIGJlIGRpc3BsYXllZCB1cG9uIGxvZ2luLgorIworI01PVERfRklMRQkvZXRjL21vdGQKKyNNT1REX0ZJTEUJL2V0Yy9tb3RkOi91c3IvbGliL25ld3MvbmV3cy1tb3RkCisKKyMKKyMgSWYgZGVmaW5lZCwgdGhpcyBmaWxlIHdpbGwgYmUgb3V0cHV0IGJlZm9yZSBlYWNoIGxvZ2luIHByb21wdC4KKyMKKyNJU1NVRV9GSUxFCS9ldGMvaXNzdWUKKworIworIyBJZiBkZWZpbmVkLCBmaWxlIHdoaWNoIG1hcHMgdHR5IGxpbmUgdG8gVEVSTSBlbnZpcm9ubWVudCBwYXJhbWV0ZXIuCisjIEVhY2ggbGluZSBvZiB0aGUgZmlsZSBpcyBpbiBhIGZvcm1hdCBzb21ldGhpbmcgbGlrZSAidnQxMDAgIHR0eTAxIi4KKyMKKyNUVFlUWVBFX0ZJTEUJL2V0Yy90dHl0eXBlCisKKyMKKyMgSWYgZGVmaW5lZCwgbG9naW4gZmFpbHVyZXMgd2lsbCBiZSBsb2dnZWQgaGVyZSBpbiBhIHV0bXAgZm9ybWF0LgorIyBsYXN0LCB3aGVuIGludm9rZWQgYXMgbGFzdGIsIHdpbGwgcmVhZCAvdmFyL2xvZy9idG1wLCBzby4uLgorIworI0ZUTVBfRklMRQkvdmFyL2xvZy9idG1wCisKKyMKKyMgSWYgZGVmaW5lZCwgbmFtZSBvZiBmaWxlIHdob3NlIHByZXNlbmNlIHdoaWNoIHdpbGwgaW5oaWJpdCBub24tcm9vdAorIyBsb2dpbnMuICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIHNob3VsZCBiZSBhIG1lc3NhZ2UgaW5kaWNhdGluZworIyB3aHkgbG9naW5zIGFyZSBpbmhpYml0ZWQuCisjCisjTk9MT0dJTlNfRklMRQkvZXRjL25vbG9naW4KKworIworIyBJZiBkZWZpbmVkLCB0aGUgY29tbWFuZCBuYW1lIHRvIGRpc3BsYXkgd2hlbiBydW5uaW5nICJzdSAtIi4gIEZvcgorIyBleGFtcGxlLCBpZiB0aGlzIGlzIGRlZmluZWQgYXMgInN1IiB0aGVuIGEgInBzIiB3aWxsIGRpc3BsYXkgdGhlCisjIGNvbW1hbmQgaXMgIi1zdSIuICBJZiBub3QgZGVmaW5lZCwgdGhlbiAicHMiIHdvdWxkIGRpc3BsYXkgdGhlCisjIG5hbWUgb2YgdGhlIHNoZWxsIGFjdHVhbGx5IGJlaW5nIHJ1biwgZS5nLiBzb21ldGhpbmcgbGlrZSAiLXNoIi4KKyMKK1NVX05BTUUJCXN1CisKKyMKKyMgKlJFUVVJUkVEKgorIyAgIERpcmVjdG9yeSB3aGVyZSBtYWlsYm94ZXMgcmVzaWRlLCBfb3JfIG5hbWUgb2YgZmlsZSwgcmVsYXRpdmUgdG8gdGhlCisjICAgaG9tZSBkaXJlY3RvcnkuICBJZiB5b3UgX2RvXyBkZWZpbmUgYm90aCwgI01BSUxfRElSIHRha2VzIHByZWNlZGVuY2UuCisjCisjTUFJTF9ESVIJL3Zhci9zcG9vbC9tYWlsCitNQUlMX0ZJTEUJLm1haWwKKworIworIyBJZiBkZWZpbmVkLCBmaWxlIHdoaWNoIGluaGliaXRzIGFsbCB0aGUgdXN1YWwgY2hhdHRlciBkdXJpbmcgdGhlIGxvZ2luCisjIHNlcXVlbmNlLiAgSWYgYSBmdWxsIHBhdGhuYW1lLCB0aGVuIGh1c2hlZCBtb2RlIHdpbGwgYmUgZW5hYmxlZCBpZiB0aGUKKyMgdXNlcidzIG5hbWUgb3Igc2hlbGwgYXJlIGZvdW5kIGluIHRoZSBmaWxlLiAgSWYgbm90IGEgZnVsbCBwYXRobmFtZSwgdGhlbgorIyBodXNoZWQgbW9kZSB3aWxsIGJlIGVuYWJsZWQgaWYgdGhlIGZpbGUgZXhpc3RzIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCisjCitIVVNITE9HSU5fRklMRQkuaHVzaGxvZ2luCisjSFVTSExPR0lOX0ZJTEUJL2V0Yy9odXNobG9naW5zCisKKyMKKyMgSWYgZGVmaW5lZCwgZWl0aGVyIGEgVFogZW52aXJvbm1lbnQgcGFyYW1ldGVyIHNwZWMgb3IgdGhlCisjIGZ1bGx5LXJvb3RlZCBwYXRobmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBzdWNoIGEgc3BlYy4KKyMKKyNFTlZfVFoJCVRaPUNTVDZDRFQKKyNFTlZfVFoJCS9ldGMvdHpuYW1lCisKKyMKKyMgSWYgZGVmaW5lZCwgYW4gSFogZW52aXJvbm1lbnQgcGFyYW1ldGVyIHNwZWMuCisjCisjIGZvciBMaW51eC94ODYKKyNFTlZfSFoJCUhaPTEwMAorIyBGb3IgTGludXgvQWxwaGEuLi4KKyNFTlZfSFoJCUhaPTEwMjQKKworIworIyAqUkVRVUlSRUQqICBUaGUgZGVmYXVsdCBQQVRIIHNldHRpbmdzLCBmb3Igc3VwZXJ1c2VyIGFuZCBub3JtYWwgdXNlcnMuCisjCisjICh0aGV5IGFyZSBtaW5pbWFsLCBhZGQgdGhlIHJlc3QgaW4gdGhlIHNoZWxsIHN0YXJ0dXAgZmlsZXMpCitFTlZfU1VQQVRICVBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0VOVl9QQVRICVBBVEg9L2JpbjovdXNyL2JpbgorCisjCisjIFRlcm1pbmFsIHBlcm1pc3Npb25zCisjCisjCVRUWUdST1VQCUxvZ2luIHR0eSB3aWxsIGJlIGFzc2lnbmVkIHRoaXMgZ3JvdXAgb3duZXJzaGlwLgorIwlUVFlQRVJNCQlMb2dpbiB0dHkgd2lsbCBiZSBzZXQgdG8gdGhpcyBwZXJtaXNzaW9uLgorIworIyBJZiB5b3UgaGF2ZSBhICJ3cml0ZSIgcHJvZ3JhbSB3aGljaCBpcyAic2V0Z2lkIiB0byBhIHNwZWNpYWwgZ3JvdXAKKyMgd2hpY2ggb3ducyB0aGUgdGVybWluYWxzLCBkZWZpbmUgVFRZR1JPVVAgdG8gdGhlIGdyb3VwIG51bWJlciBhbmQKKyMgVFRZUEVSTSB0byAwNjIwLiAgT3RoZXJ3aXNlIGxlYXZlIFRUWUdST1VQIGNvbW1lbnRlZCBvdXQgYW5kIGFzc2lnbgorIyBUVFlQRVJNIHRvIGVpdGhlciA2MjIgb3IgNjAwLgorIworVFRZR1JPVVAJdHR5CitUVFlQRVJNCQkwNjAwCisKKyMKKyMgTG9naW4gY29uZmlndXJhdGlvbiBpbml0aWFsaXphdGlvbnM6CisjCisjCUVSQVNFQ0hBUglUZXJtaW5hbCBFUkFTRSBjaGFyYWN0ZXIgKCdcMDEwJyA9IGJhY2tzcGFjZSkuCisjCUtJTExDSEFSCVRlcm1pbmFsIEtJTEwgY2hhcmFjdGVyICgnXDAyNScgPSBDVFJML1UpLgorIwlVTElNSVQJCURlZmF1bHQgInVsaW1pdCIgdmFsdWUuCisjCisjIFRoZSBFUkFTRUNIQVIgYW5kIEtJTExDSEFSIGFyZSB1c2VkIG9ubHkgb24gU3lzdGVtIFYgbWFjaGluZXMuCisjIFRoZSBVTElNSVQgaXMgdXNlZCBvbmx5IGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgaXQuCisjIChub3cgaXQgd29ya3Mgd2l0aCBzZXRybGltaXQgdG9vOyB1bGltaXQgaXMgaW4gNTEyLWJ5dGUgdW5pdHMpCisjCisjIFByZWZpeCB0aGVzZSB2YWx1ZXMgd2l0aCAiMCIgdG8gZ2V0IG9jdGFsLCAiMHgiIHRvIGdldCBoZXhhZGVjaW1hbC4KKyMKK0VSQVNFQ0hBUgkwMTc3CitLSUxMQ0hBUgkwMjUKKyNVTElNSVQJCTIwOTcxNTIKKworIyBEZWZhdWx0IGluaXRpYWwgInVtYXNrIiB2YWx1ZSBmb3Igbm9uLVBBTSBlbmFibGVkIHN5c3RlbXMuCisjIFVNQVNLIGlzIGFsc28gdXNlZCBieSB1c2VyYWRkIGFuZCBuZXd1c2VycyB0byBzZXQgdGhlIG1vZGUgb2YgbmV3IGhvbWUKKyMgZGlyZWN0b3JpZXMuCisjIDAyMiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IDAyNywgb3IgZXZlbiAwNzcsIGNvdWxkIGJlIGNvbnNpZGVyZWQKKyMgYmV0dGVyIGZvciBwcml2YWN5LiBUaGVyZSBpcyBubyBPbmUgVHJ1ZSBBbnN3ZXIgaGVyZTogZWFjaCBzeXNhZG1pbgorIyBtdXN0IG1ha2UgdXAgaGVyIG1pbmQuCitVTUFTSwkJMDIyCisKKyMKKyMgUGFzc3dvcmQgYWdpbmcgY29udHJvbHM6CisjCisjCVBBU1NfTUFYX0RBWVMJTWF4aW11bSBudW1iZXIgb2YgZGF5cyBhIHBhc3N3b3JkIG1heSBiZSB1c2VkLgorIwlQQVNTX01JTl9EQVlTCU1pbmltdW0gbnVtYmVyIG9mIGRheXMgYWxsb3dlZCBiZXR3ZWVuIHBhc3N3b3JkIGNoYW5nZXMuCisjCVBBU1NfTUlOX0xFTglNaW5pbXVtIGFjY2VwdGFibGUgcGFzc3dvcmQgbGVuZ3RoLgorIwlQQVNTX1dBUk5fQUdFCU51bWJlciBvZiBkYXlzIHdhcm5pbmcgZ2l2ZW4gYmVmb3JlIGEgcGFzc3dvcmQgZXhwaXJlcy4KKyMKK1BBU1NfTUFYX0RBWVMJOTk5OTkKK1BBU1NfTUlOX0RBWVMJMAorI1BBU1NfTUlOX0xFTgk1CitQQVNTX1dBUk5fQUdFCTcKKworIworIyBJZiAieWVzIiwgdGhlIHVzZXIgbXVzdCBiZSBsaXN0ZWQgYXMgYSBtZW1iZXIgb2YgdGhlIGZpcnN0IGdpZCAwIGdyb3VwCisjIGluIC9ldGMvZ3JvdXAgKGNhbGxlZCAicm9vdCIgb24gbW9zdCBMaW51eCBzeXN0ZW1zKSB0byBiZSBhYmxlIHRvICJzdSIKKyMgdG8gdWlkIDAgYWNjb3VudHMuICBJZiB0aGUgZ3JvdXAgZG9lc24ndCBleGlzdCBvciBpcyBlbXB0eSwgbm8gb25lCisjIHdpbGwgYmUgYWJsZSB0byAic3UiIHRvIHVpZCAwLgorIworI1NVX1dIRUVMX09OTFkJbm8KKworIworIyBJZiBjb21waWxlZCB3aXRoIGNyYWNrbGliIHN1cHBvcnQsIHdoZXJlIGFyZSB0aGUgZGljdGlvbmFyaWVzCisjCisjQ1JBQ0tMSUJfRElDVFBBVEgJL3Zhci9jYWNoZS9jcmFja2xpYi9jcmFja2xpYl9kaWN0CisKKyMKKyMgTWluL21heCB2YWx1ZXMgZm9yIGF1dG9tYXRpYyB1aWQgc2VsZWN0aW9uIGluIHVzZXJhZGQKKyMKK1VJRF9NSU4JCQkgMTAwMAorVUlEX01BWAkJCTYwMDAwCisjIFN5c3RlbSBhY2NvdW50cworU1lTX1VJRF9NSU4JCSAgMTAxCitTWVNfVUlEX01BWAkJICA5OTkKKworIworIyBNaW4vbWF4IHZhbHVlcyBmb3IgYXV0b21hdGljIGdpZCBzZWxlY3Rpb24gaW4gZ3JvdXBhZGQKKyMKK0dJRF9NSU4JCQkgMTAwMAorR0lEX01BWAkJCTYwMDAwCisjIFN5c3RlbSBhY2NvdW50cworU1lTX0dJRF9NSU4JCSAgMTAxCitTWVNfR0lEX01BWAkJICA5OTkKKworIworIyBNYXggbnVtYmVyIG9mIGxvZ2luIHJldHJpZXMgaWYgcGFzc3dvcmQgaXMgYmFkCisjCitMT0dJTl9SRVRSSUVTCQk1CisKKyMKKyMgTWF4IHRpbWUgaW4gc2Vjb25kcyBmb3IgbG9naW4KKyMKK0xPR0lOX1RJTUVPVVQJCTYwCisKKyMKKyMgTWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gY2hhbmdlIHBhc3N3b3JkIGlmIHJlamVjdGVkICh0b28gZWFzeSkKKyMKKyNQQVNTX0NIQU5HRV9UUklFUwk1CisKKyMKKyMgV2FybiBhYm91dCB3ZWFrIHBhc3N3b3JkcyAoYnV0IHN0aWxsIGFsbG93IHRoZW0pIGlmIHlvdSBhcmUgcm9vdC4KKyMKKyNQQVNTX0FMV0FZU19XQVJOCXllcworCisjCisjIE51bWJlciBvZiBzaWduaWZpY2FudCBjaGFyYWN0ZXJzIGluIHRoZSBwYXNzd29yZCBmb3IgY3J5cHQoKS4KKyMgRGVmYXVsdCBpcyA4LCBkb24ndCBjaGFuZ2UgdW5sZXNzIHlvdXIgY3J5cHQoKSBpcyBiZXR0ZXIuCisjIElnbm9yZWQgaWYgTUQ1X0NSWVBUX0VOQUIgc2V0IHRvICJ5ZXMiLgorIworI1BBU1NfTUFYX0xFTgkJOAorCisjCisjIFJlcXVpcmUgcGFzc3dvcmQgYmVmb3JlIGNoZm4vY2hzaCBjYW4gbWFrZSBhbnkgY2hhbmdlcy4KKyMKKyNDSEZOX0FVVEgJCXllcworCisjCisjIFdoaWNoIGZpZWxkcyBtYXkgYmUgY2hhbmdlZCBieSByZWd1bGFyIHVzZXJzIHVzaW5nIGNoZm4gLSB1c2UKKyMgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMgImZyd2giIChmdWxsIG5hbWUsIHJvb20gbnVtYmVyLCB3b3JrCisjIHBob25lLCBob21lIHBob25lKS4gIElmIG5vdCBkZWZpbmVkLCBubyBjaGFuZ2VzIGFyZSBhbGxvd2VkLgorIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgInllcyIgPSAicndoIiBhbmQgIm5vIiA9ICJmcndoIi4KKyMgCitDSEZOX1JFU1RSSUNUCQlyd2gKKworIworIyBQYXNzd29yZCBwcm9tcHQgKCVzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdXNlciBuYW1lKS4KKyMKKyMgWFhYIC0gaXQgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB5ZXQsIGZvciBub3cgbGVhdmUgaXQgY29tbWVudGVkIG91dAorIyB0byB1c2UgdGhlIGRlZmF1bHQgd2hpY2ggaXMganVzdCAiUGFzc3dvcmQ6ICIuCisjTE9HSU5fU1RSSU5HCQkiJXMncyBQYXNzd29yZDogIgorCisjCisjIE9ubHkgd29ya3MgaWYgY29tcGlsZWQgd2l0aCBNRDVfQ1JZUFQgZGVmaW5lZDoKKyMgSWYgc2V0IHRvICJ5ZXMiLCBuZXcgcGFzc3dvcmRzIHdpbGwgYmUgZW5jcnlwdGVkIHVzaW5nIHRoZSBNRDUtYmFzZWQKKyMgYWxnb3JpdGhtIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIHVzZWQgYnkgcmVjZW50IHJlbGVhc2VzIG9mIEZyZWVCU0QuCisjIEl0IHN1cHBvcnRzIHBhc3N3b3JkcyBvZiB1bmxpbWl0ZWQgbGVuZ3RoIGFuZCBsb25nZXIgc2FsdCBzdHJpbmdzLgorIyBTZXQgdG8gIm5vIiBpZiB5b3UgbmVlZCB0byBjb3B5IGVuY3J5cHRlZCBwYXNzd29yZHMgdG8gb3RoZXIgc3lzdGVtcworIyB3aGljaCBkb24ndCB1bmRlcnN0YW5kIHRoZSBuZXcgYWxnb3JpdGhtLiAgRGVmYXVsdCBpcyAibm8iLgorIworIyBOb3RlOiBJZiB5b3UgdXNlIFBBTSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgdmFsdWUgY29uc2lzdGVudCB3aXRoCisjIHRoZSBQQU0gbW9kdWxlcyBjb25maWd1cmF0aW9uLgorIworIyBUaGlzIHZhcmlhYmxlIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIEVOQ1JZUFRfTUVUSE9ELgorIworI01ENV9DUllQVF9FTkFCCW5vCisKKyMKKyMgT25seSB3b3JrcyBpZiBjb21waWxlZCB3aXRoIEVOQ1JZUFRNRVRIT0RfU0VMRUNUIGRlZmluZWQ6CisjIElmIHNldCB0byBNRDUgLCBNRDUtYmFzZWQgYWxnb3JpdGhtIHdpbGwgYmUgdXNlZCBmb3IgZW5jcnlwdGluZyBwYXNzd29yZAorIyBJZiBzZXQgdG8gU0hBMjU2LCBTSEEyNTYtYmFzZWQgYWxnb3JpdGhtIHdpbGwgYmUgdXNlZCBmb3IgZW5jcnlwdGluZyBwYXNzd29yZAorIyBJZiBzZXQgdG8gU0hBNTEyLCBTSEE1MTItYmFzZWQgYWxnb3JpdGhtIHdpbGwgYmUgdXNlZCBmb3IgZW5jcnlwdGluZyBwYXNzd29yZAorIyBJZiBzZXQgdG8gREVTLCBERVMtYmFzZWQgYWxnb3JpdGhtIHdpbGwgYmUgdXNlZCBmb3IgZW5jcnlwdGluZyBwYXNzd29yZCAoZGVmYXVsdCkKKyMgT3ZlcnJpZGVzIHRoZSBNRDVfQ1JZUFRfRU5BQiBvcHRpb24KKyMKKyMgTm90ZTogSWYgeW91IHVzZSBQQU0sIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIHZhbHVlIGNvbnNpc3RlbnQgd2l0aAorIyB0aGUgUEFNIG1vZHVsZXMgY29uZmlndXJhdGlvbi4KKyMKKyNFTkNSWVBUX01FVEhPRCBERVMKKworIworIyBPbmx5IHdvcmtzIGlmIEVOQ1JZUFRfTUVUSE9EIGlzIHNldCB0byBTSEEyNTYgb3IgU0hBNTEyLgorIworIyBEZWZpbmUgdGhlIG51bWJlciBvZiBTSEEgcm91bmRzLgorIyBXaXRoIGEgbG90IG9mIHJvdW5kcywgaXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYnJ1dGUgZm9yY2luZyB0aGUgcGFzc3dvcmQuCisjIEJ1dCBub3RlIGFsc28gdGhhdCBpdCBtb3JlIENQVSByZXNvdXJjZXMgd2lsbCBiZSBuZWVkZWQgdG8gYXV0aGVudGljYXRlCisjIHVzZXJzLgorIworIyBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgbGliYyB3aWxsIGNob29zZSB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygcm91bmRzICg1MDAwKS4KKyMgVGhlIHZhbHVlcyBtdXN0IGJlIGluc2lkZSB0aGUgMTAwMC05OTk5OTk5OTkgcmFuZ2UuCisjIElmIG9ubHkgb25lIG9mIHRoZSBNSU4gb3IgTUFYIHZhbHVlcyBpcyBzZXQsIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQuCisjIElmIE1JTiA+IE1BWCwgdGhlIGhpZ2hlc3QgdmFsdWUgd2lsbCBiZSB1c2VkLgorIworIyBTSEFfQ1JZUFRfTUlOX1JPVU5EUyA1MDAwCisjIFNIQV9DUllQVF9NQVhfUk9VTkRTIDUwMDAKKworIworIyBMaXN0IG9mIGdyb3VwcyB0byBhZGQgdG8gdGhlIHVzZXIncyBzdXBwbGVtZW50YXJ5IGdyb3VwIHNldAorIyB3aGVuIGxvZ2dpbmcgaW4gb24gdGhlIGNvbnNvbGUgKGFzIGRldGVybWluZWQgYnkgdGhlIENPTlNPTEUKKyMgc2V0dGluZykuICBEZWZhdWx0IGlzIG5vbmUuCisjCisjIFVzZSB3aXRoIGNhdXRpb24gLSBpdCBpcyBwb3NzaWJsZSBmb3IgdXNlcnMgdG8gZ2FpbiBwZXJtYW5lbnQKKyMgYWNjZXNzIHRvIHRoZXNlIGdyb3VwcywgZXZlbiB3aGVuIG5vdCBsb2dnZWQgaW4gb24gdGhlIGNvbnNvbGUuCisjIEhvdyB0byBkbyBpdCBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLi4uCisjCisjQ09OU09MRV9HUk9VUFMJCWZsb3BweTphdWRpbzpjZHJvbQorCisjCisjIFNob3VsZCBsb2dpbiBiZSBhbGxvd2VkIGlmIHdlIGNhbid0IGNkIHRvIHRoZSBob21lIGRpcmVjdG9yeT8KKyMgRGVmYXVsdCBpbiBuby4KKyMKK0RFRkFVTFRfSE9NRQl5ZXMKKworIworIyBJZiB0aGlzIGZpbGUgZXhpc3RzIGFuZCBpcyByZWFkYWJsZSwgbG9naW4gZW52aXJvbm1lbnQgd2lsbCBiZQorIyByZWFkIGZyb20gaXQuICBFdmVyeSBsaW5lIHNob3VsZCBiZSBpbiB0aGUgZm9ybSBuYW1lPXZhbHVlLgorIworI0VOVklST05fRklMRQkvZXRjL2Vudmlyb25tZW50CisKKyMKKyMgSWYgZGVmaW5lZCwgdGhpcyBjb21tYW5kIGlzIHJ1biB3aGVuIHJlbW92aW5nIGEgdXNlci4KKyMgSXQgc2hvdWxkIHJlbW92ZSBhbnkgYXQvY3Jvbi9wcmludCBqb2JzIGV0Yy4gb3duZWQgYnkKKyMgdGhlIHVzZXIgdG8gYmUgcmVtb3ZlZCAocGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCkuCisjCisjVVNFUkRFTF9DTUQJL3Vzci9zYmluL3VzZXJkZWxfbG9jYWwKKworIworIyBFbmFibGUgc2V0dGluZyBvZiB0aGUgdW1hc2sgZ3JvdXAgYml0cyB0byBiZSB0aGUgc2FtZSBhcyBvd25lciBiaXRzCisjIChleGFtcGxlczogMDIyIC0+IDAwMiwgMDc3IC0+IDAwNykgZm9yIG5vbi1yb290IHVzZXJzLCBpZiB0aGUgdWlkIGlzCisjIHRoZSBzYW1lIGFzIGdpZCwgYW5kIHVzZXJuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmltYXJ5IGdyb3VwIG5hbWUuCisjCisjIFRoaXMgYWxzbyBlbmFibGVzIHVzZXJkZWwgdG8gcmVtb3ZlIHVzZXIgZ3JvdXBzIGlmIG5vIG1lbWJlcnMgZXhpc3QuCisjCitVU0VSR1JPVVBTX0VOQUIgeWVzCisKKyMKKyMgSWYgc2V0IHRvIGEgbm9uLW51bCBudW1iZXIsIHRoZSBzaGFkb3cgdXRpbGl0aWVzIHdpbGwgbWFrZSBzdXJlIHRoYXQKKyMgZ3JvdXBzIG5ldmVyIGhhdmUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHVzZXJzIG9uIG9uZSBsaW5lLgorIyBUaGlzIHBlcm1pdCB0byBzdXBwb3J0IHNwbGl0IGdyb3VwcyAoZ3JvdXBzIHNwbGl0IGludG8gbXVsdGlwbGUgbGluZXMsCisjIHdpdGggdGhlIHNhbWUgZ3JvdXAgSUQsIHRvIGF2b2lkIGxpbWl0YXRpb24gb2YgdGhlIGxpbmUgbGVuZ3RoIGluIHRoZQorIyBncm91cCBmaWxlKS4KKyMKKyMgMCBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgZGlzYWJsZXMgdGhpcyBmZWF0dXJlLgorIworI01BWF9NRU1CRVJTX1BFUl9HUk9VUAkwCisKKyMKKyMgSWYgdXNlcmFkZCBzaG91bGQgY3JlYXRlIGhvbWUgZGlyZWN0b3JpZXMgZm9yIHVzZXJzIGJ5IGRlZmF1bHQgKG5vbgorIyBzeXN0ZW0gdXNlcnMgb25seSkKKyMgVGhpcyBvcHRpb24gaXMgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtTSBvciAtbSBmbGFncyBvbiB0aGUgdXNlcmFkZCBjb21tYW5kCisjIGxpbmUuCisjCitDUkVBVEVfSE9NRSAgICAgeWVzCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW5fZGVmc19wYW0uc2VkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbl9kZWZzX3BhbS5zZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExZjNiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW5fZGVmc19wYW0uc2VkCkBAIC0wLDAgKzEsMzIgQEAKKy9eRkFJTExPR19FTkFCL2IgY29tbWVudAorL15MQVNUTE9HX0VOQUIvYiBjb21tZW50CisvXk1BSUxfQ0hFQ0tfRU5BQi9iIGNvbW1lbnQKKy9eT0JTQ1VSRV9DSEVDS1NfRU5BQi9iIGNvbW1lbnQKKy9eUE9SVFRJTUVfQ0hFQ0tTX0VOQUIvYiBjb21tZW50CisvXlFVT1RBU19FTkFCL2IgY29tbWVudAorL15NT1REX0ZJTEUvYiBjb21tZW50CisvXkZUTVBfRklMRS9iIGNvbW1lbnQKKy9eTk9MT0dJTlNfRklMRS9iIGNvbW1lbnQKKy9eRU5WX0haL2IgY29tbWVudAorL15FTlZfVFovYiBjb21tZW50CisvXlBBU1NfTUlOX0xFTi9iIGNvbW1lbnQKKy9eU1VfV0hFRUxfT05MWS9iIGNvbW1lbnQKKy9eQ1JBQ0tMSUJfRElDVFBBVEgvYiBjb21tZW50CisvXlBBU1NfQ0hBTkdFX1RSSUVTL2IgY29tbWVudAorL15QQVNTX0FMV0FZU19XQVJOL2IgY29tbWVudAorL15QQVNTX01BWF9MRU4vYiBjb21tZW50CisvXlBBU1NfTUlOX0xFTi9iIGNvbW1lbnQKKy9eQ0hGTl9BVVRIL2IgY29tbWVudAorL15DSFNIX0FVVEgvYiBjb21tZW50CisvXklTU1VFX0ZJTEUvYiBjb21tZW50CisvXkxPR0lOX1NUUklORy9iIGNvbW1lbnQKKy9eVUxJTUlUL2IgY29tbWVudAorL15FTlZJUk9OX0ZJTEUvYiBjb21tZW50CisKK2IgZXhpdAorCis6IGNvbW1lbnQKKyAgczpeOiM6CisKKzogZXhpdAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4gYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmNzY5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hmbgpAQCAtMCwwICsxLDE0IEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBjaGZuJyBzZXJ2aWNlCisjCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBjaGFuZ2UgdXNlciBpbmZvbWF0aW9uIHdpdGhvdXQgYmVpbmcKKyMgcHJvbXB0ZWQgZm9yIGEgcGFzc3dvcmQKK2F1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworCisjIFRoZSBzdGFuZGFyZCBVbml4IGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMsIHVzZWQgd2l0aAorIyBOSVMgKG1hbiBuc3N3aXRjaCkgYXMgd2VsbCBhcyBub3JtYWwgL2V0Yy9wYXNzd2QgYW5kCisjIC9ldGMvc2hhZG93IGVudHJpZXMuCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NocGFzc3dkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNlZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZApAQCAtMCwwICsxLDQgQEAKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgJ2NocGFzc3dkJyBzZXJ2aWNlCisjCisKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjE2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2Noc2gKQEAgLTAsMCArMSwxOSBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgY2hzaCcgc2VydmljZQorIworCisjIFRoaXMgd2lsbCBub3QgYWxsb3cgYSB1c2VyIHRvIGNoYW5nZSB0aGVpciBzaGVsbCB1bmxlc3MKKyMgdGhlaXIgY3VycmVudCBvbmUgaXMgbGlzdGVkIGluIC9ldGMvc2hlbGxzLiBUaGlzIGtlZXBzCisjIGFjY291bnRzIHdpdGggc3BlY2lhbCBzaGVsbHMgZnJvbSBjaGFuZ2luZyB0aGVtLgorYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV9zaGVsbHMuc28KKworIyBUaGlzIGFsbG93cyByb290IHRvIGNoYW5nZSB1c2VyIHNoZWxsIHdpdGhvdXQgYmVpbmcKKyMgcHJvbXB0ZWQgZm9yIGEgcGFzc3dvcmQKK2F1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworCisjIFRoZSBzdGFuZGFyZCBVbml4IGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMsIHVzZWQgd2l0aAorIyBOSVMgKG1hbiBuc3N3aXRjaCkgYXMgd2VsbCBhcyBub3JtYWwgL2V0Yy9wYXNzd2QgYW5kCisjIC9ldGMvc2hhZG93IGVudHJpZXMuCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2xvZ2luIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQwMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbgpAQCAtMCwwICsxLDgxIEBACisjCisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93IGBsb2dpbicgc2VydmljZQorIworCisjIEVuZm9yY2UgYSBtaW5pbWFsIGRlbGF5IGluIGNhc2Ugb2YgZmFpbHVyZSAoaW4gbWljcm9zZWNvbmRzKS4KKyMgKFJlcGxhY2VzIHRoZSBgRkFJTF9ERUxBWScgc2V0dGluZyBmcm9tIGxvZ2luLmRlZnMpCisjIE5vdGUgdGhhdCBvdGhlciBtb2R1bGVzIG1heSByZXF1aXJlIGFub3RoZXIgbWluaW1hbCBkZWxheS4gKGZvciBleGFtcGxlLAorIyB0byBkaXNhYmxlIGFueSBkZWxheSwgeW91IHNob3VsZCBhZGQgdGhlIG5vZGVsYXkgb3B0aW9uIHRvIHBhbV91bml4KQorYXV0aCAgICAgICBvcHRpb25hbCAgIHBhbV9mYWlsZGVsYXkuc28gIGRlbGF5PTMwMDAwMDAKKworIyBPdXRwdXRzIGFuIGlzc3VlIGZpbGUgcHJpb3IgdG8gZWFjaCBsb2dpbiBwcm9tcHQgKFJlcGxhY2VzIHRoZQorIyBJU1NVRV9GSUxFIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMpLiBVbmNvbW1lbnQgZm9yIHVzZQorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX2lzc3VlLnNvIGlzc3VlPS9ldGMvaXNzdWUKKworIyBEaXNhbGxvd3Mgcm9vdCBsb2dpbnMgZXhjZXB0IG9uIHR0eSdzIGxpc3RlZCBpbiAvZXRjL3NlY3VyZXR0eQorIyAoUmVwbGFjZXMgdGhlIGBDT05TT0xFJyBzZXR0aW5nIGZyb20gbG9naW4uZGVmcykKKyMgTm90ZSB0aGF0IGl0IGlzIGluY2x1ZGVkIGFzIGEgInJlcXVpc2l0ZSIgbW9kdWxlLiBObyBwYXNzd29yZCBwcm9tcHRzIHdpbGwKKyMgYmUgZGlzcGxheWVkIGlmIHRoaXMgbW9kdWxlIGZhaWxzIHRvIGF2b2lkIGhhdmluZyB0aGUgcm9vdCBwYXNzd29yZAorIyB0cmFuc21pdHRlZCBvbiB1bnNlY3VyZSB0dHlzLgorIyBZb3UgY2FuIGNoYW5nZSBpdCB0byBhICJyZXF1aXJlZCIgbW9kdWxlIGlmIHlvdSB0aGluayBpdCBwZXJtaXRzIHRvCisjIGd1ZXNzIHZhbGlkIHVzZXIgbmFtZXMgb2YgeW91ciBzeXN0ZW0gKGludmFsaWQgdXNlciBuYW1lcyBhcmUgY29uc2lkZXJlZAorIyBhcyBwb3NzaWJseSBiZWluZyByb290KS4KK2F1dGggICAgICAgW3N1Y2Nlc3M9b2sgaWdub3JlPWlnbm9yZSB1c2VyX3Vua25vd249aWdub3JlIGRlZmF1bHQ9ZGllXSAgcGFtX3NlY3VyZXR0eS5zbworCisjIERpc2FsbG93cyBvdGhlciB0aGFuIHJvb3QgbG9naW5zIHdoZW4gL2V0Yy9ub2xvZ2luIGV4aXN0cworIyAoUmVwbGFjZXMgdGhlIGBOT0xPR0lOU19GSUxFJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorYXV0aCAgICAgICByZXF1aXNpdGUgIHBhbV9ub2xvZ2luLnNvCisKKyMgVGhpcyBtb2R1bGUgcGFyc2VzIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gZmlsZShzKQorIyBhbmQgYWxzbyBhbGxvd3MgeW91IHRvIHVzZSBhbiBleHRlbmRlZCBjb25maWcKKyMgZmlsZSAvZXRjL3NlY3VyaXR5L3BhbV9lbnYuY29uZi4KKyMgCisjIHBhcnNpbmcgL2V0Yy9lbnZpcm9ubWVudCBuZWVkcyAicmVhZGVudj0xIgorc2Vzc2lvbiAgICAgICByZXF1aXJlZCAgIHBhbV9lbnYuc28gcmVhZGVudj0xCisKKyMgU3RhbmRhcmQgVW4qeCBhdXRoZW50aWNhdGlvbi4KK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCisKKyMgVGhpcyBhbGxvd3MgY2VydGFpbiBleHRyYSBncm91cHMgdG8gYmUgZ3JhbnRlZCB0byBhIHVzZXIKKyMgYmFzZWQgb24gdGhpbmdzIGxpa2UgdGltZSBvZiBkYXksIHR0eSwgc2VydmljZSwgYW5kIHVzZXIuCisjIFBsZWFzZSBlZGl0IC9ldGMvc2VjdXJpdHkvZ3JvdXAuY29uZiB0byBmaXQgeW91ciBuZWVkcworIyAoUmVwbGFjZXMgdGhlIGBDT05TT0xFX0dST1VQUycgb3B0aW9uIGluIGxvZ2luLmRlZnMpCithdXRoICAgICAgIG9wdGlvbmFsICAgcGFtX2dyb3VwLnNvCisKKyMgVW5jb21tZW50IGFuZCBlZGl0IC9ldGMvc2VjdXJpdHkvdGltZS5jb25mIGlmIHlvdSBuZWVkIHRvIHNldAorIyB0aW1lIHJlc3RyYWluc3Qgb24gbG9naW5zLgorIyAoUmVwbGFjZXMgdGhlIGBQT1JUVElNRV9DSEVDS1NfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcworIyBhcyB3ZWxsIGFzIC9ldGMvcG9ydHRpbWUpCisjIGFjY291bnQgICAgcmVxdWlzaXRlICBwYW1fdGltZS5zbworCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L2FjY2Vzcy5jb25mIGlmIHlvdSBuZWVkIHRvCisjIHNldCBhY2Nlc3MgbGltaXRzLgorIyAoUmVwbGFjZXMgL2V0Yy9sb2dpbi5hY2Nlc3MgZmlsZSkKKyMgYWNjb3VudCAgcmVxdWlyZWQgICAgICAgcGFtX2FjY2Vzcy5zbworCisjIFNldHMgdXAgdXNlciBsaW1pdHMgYWNjb3JkaW5nIHRvIC9ldGMvc2VjdXJpdHkvbGltaXRzLmNvbmYKKyMgKFJlcGxhY2VzIHRoZSB1c2Ugb2YgL2V0Yy9saW1pdHMgaW4gb2xkIGxvZ2luKQorc2Vzc2lvbiAgICByZXF1aXJlZCAgIHBhbV9saW1pdHMuc28KKworIyBQcmludHMgdGhlIGxhc3QgbG9naW4gaW5mbyB1cG9uIHN1Y2Nlc2Z1bCBsb2dpbgorIyAoUmVwbGFjZXMgdGhlIGBMQVNUTE9HX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMpCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX2xhc3Rsb2cuc28KKworIyBQcmludHMgdGhlIG1vdGQgdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTU9URF9GSUxFJyBvcHRpb24gaW4gbG9naW4uZGVmcykKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbW90ZC5zbworCisjIFByaW50cyB0aGUgc3RhdHVzIG9mIHRoZSB1c2VyJ3MgbWFpbGJveCB1cG9uIHN1Y2Nlc2Z1bCBsb2dpbgorIyAoUmVwbGFjZXMgdGhlIGBNQUlMX0NIRUNLX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMpLiAKKyMKKyMgVGhpcyBhbHNvIGRlZmluZXMgdGhlIE1BSUwgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgSG93ZXZlciwgdXNlcmRlbCBhbHNvIG5lZWRzIE1BSUxfRElSIGFuZCBNQUlMX0ZJTEUgdmFyaWFibGVzCisjIGluIC9ldGMvbG9naW4uZGVmcyB0byBtYWtlIHN1cmUgdGhhdCByZW1vdmluZyBhIHVzZXIgCisjIGFsc28gcmVtb3ZlcyB0aGUgdXNlcidzIG1haWwgc3Bvb2wgZmlsZS4KKyMgU2VlIGNvbW1lbnRzIGluIC9ldGMvbG9naW4uZGVmcworc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9tYWlsLnNvIHN0YW5kYXJkCisKKyMgU3RhbmRhcmQgVW4qeCBhY2NvdW50IGFuZCBzZXNzaW9uCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9uZXd1c2VycyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhM2RkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMKQEAgLTAsMCArMSw0IEBACisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93ICduZXd1c2Vycycgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvcGFzc3dkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9wYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzNDk5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvcGFzc3dkCkBAIC0wLDAgKzEsNSBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgcGFzc3dkJyBzZXJ2aWNlCisjCisKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9zdSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1OTBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UKQEAgLTAsMCArMSw1NyBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgc3UnIHNlcnZpY2UKKyMKKworIyBUaGlzIGFsbG93cyByb290IHRvIHN1IHdpdGhvdXQgcGFzc3dvcmRzIChub3JtYWwgb3BlcmF0aW9uKQorYXV0aCAgICAgICBzdWZmaWNpZW50IHBhbV9yb290b2suc28KKworIyBVbmNvbW1lbnQgdGhpcyB0byBmb3JjZSB1c2VycyB0byBiZSBhIG1lbWJlciBvZiBncm91cCByb290CisjIGJlZm9yZSB0aGV5IGNhbiB1c2UgYHN1Jy4gWW91IGNhbiBhbHNvIGFkZCAiZ3JvdXA9Zm9vIgorIyB0byB0aGUgZW5kIG9mIHRoaXMgbGluZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBncm91cCBvdGhlcgorIyB0aGFuIHRoZSBkZWZhdWx0ICJyb290IiAoYnV0IHRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3Qgb2YKKyMgZGVueWluZyAicm9vdCIgdXNlciwgdW5sZXNzIHNoZSdzIGEgbWVtYmVyIG9mICJmb28iIG9yIGV4cGxpY2l0bHkKKyMgcGVybWl0dGVkIGVhcmxpZXIgYnkgZS5nLiAic3VmZmljaWVudCBwYW1fcm9vdG9rLnNvIikuCisjIChSZXBsYWNlcyB0aGUgYFNVX1dIRUVMX09OTFknIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMpCisjIGF1dGggICAgICAgcmVxdWlyZWQgICBwYW1fd2hlZWwuc28KKworIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB3aGVlbCBtZW1iZXJzIHRvIGJlIGFibGUgdG8KKyMgc3Ugd2l0aG91dCBhIHBhc3N3b3JkLgorIyBhdXRoICAgICAgIHN1ZmZpY2llbnQgcGFtX3doZWVsLnNvIHRydXN0CisKKyMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgbWVtYmVycyBvZiBhIHNwZWNpZmljIGdyb3VwIHRvIG5vdAorIyBiZSBhbGxvd2VkIHRvIHVzZSBzdSBhdCBhbGwuCisjIGF1dGggICAgICAgcmVxdWlyZWQgICBwYW1fd2hlZWwuc28gZGVueSBncm91cD1ub3N1CisKKyMgVW5jb21tZW50IGFuZCBlZGl0IC9ldGMvc2VjdXJpdHkvdGltZS5jb25mIGlmIHlvdSBuZWVkIHRvIHNldAorIyB0aW1lIHJlc3RyYWluc3Qgb24gc3UgdXNhZ2UuCisjIChSZXBsYWNlcyB0aGUgYFBPUlRUSU1FX0NIRUNLU19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzCisjIGFzIHdlbGwgYXMgL2V0Yy9wb3J0dGltZSkKKyMgYWNjb3VudCAgICByZXF1aXNpdGUgIHBhbV90aW1lLnNvCisKKyMgVGhpcyBtb2R1bGUgcGFyc2VzIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gZmlsZShzKQorIyBhbmQgYWxzbyBhbGxvd3MgeW91IHRvIHVzZSBhbiBleHRlbmRlZCBjb25maWcKKyMgZmlsZSAvZXRjL3NlY3VyaXR5L3BhbV9lbnYuY29uZi4KKyMgCisjIHBhcnNpbmcgL2V0Yy9lbnZpcm9ubWVudCBuZWVkcyAicmVhZGVudj0xIgorc2Vzc2lvbiAgICAgICByZXF1aXJlZCAgIHBhbV9lbnYuc28gcmVhZGVudj0xCisKKyMgRGVmaW5lcyB0aGUgTUFJTCBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBIb3dldmVyLCB1c2VyZGVsIGFsc28gbmVlZHMgTUFJTF9ESVIgYW5kIE1BSUxfRklMRSB2YXJpYWJsZXMKKyMgaW4gL2V0Yy9sb2dpbi5kZWZzIHRvIG1ha2Ugc3VyZSB0aGF0IHJlbW92aW5nIGEgdXNlciAKKyMgYWxzbyByZW1vdmVzIHRoZSB1c2VyJ3MgbWFpbCBzcG9vbCBmaWxlLgorIyBTZWUgY29tbWVudHMgaW4gL2V0Yy9sb2dpbi5kZWZzCisjCisjICJub3BlbiIgc3RhbmRzIHRvIGF2b2lkIHJlcG9ydGluZyBuZXcgbWFpbCB3aGVuIHN1J2luZyB0byBhbm90aGVyIHVzZXIKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbWFpbC5zbyBub3BlbgorCisjIFNldHMgdXAgdXNlciBsaW1pdHMsIHBsZWFzZSB1bmNvbW1lbnQgYW5kIHJlYWQgL2V0Yy9zZWN1cml0eS9saW1pdHMuY29uZgorIyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LgorIyAoUmVwbGFjZXMgdGhlIHVzZSBvZiAvZXRjL2xpbWl0cyBpbiBvbGQgbG9naW4pCisjIHNlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbGltaXRzLnNvCisKKyMgVGhlIHN0YW5kYXJkIFVuaXggYXV0aGVudGljYXRpb24gbW9kdWxlcywgdXNlZCB3aXRoCisjIE5JUyAobWFuIG5zc3dpdGNoKSBhcyB3ZWxsIGFzIG5vcm1hbCAvZXRjL3Bhc3N3ZCBhbmQKKyMgL2V0Yy9zaGFkb3cgZW50cmllcy4KK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2VjdXJldHR5IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zZWN1cmV0dHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2VjdXJldHR5CkBAIC0wLDAgKzEsMjM4IEBACisjIC9ldGMvc2VjdXJldHR5OiBsaXN0IG9mIHRlcm1pbmFscyBvbiB3aGljaCByb290IGlzIGFsbG93ZWQgdG8gbG9naW4uCisjIFNlZSBzZWN1cmV0dHkoNSkgYW5kIGxvZ2luKDEpLgorY29uc29sZQorCisjIFN0YW5kYXJkIHNlcmlhbCBwb3J0cwordHR5UzAKK3R0eVMxCit0dHlTMgordHR5UzMKKworIyBBUk0gQU1CQSBTb0NzCit0dHlBTTAKK3R0eUFNMQordHR5QU0yCit0dHlBTTMKK3R0eUFNQTAKK3R0eUFNQTEKK3R0eUFNQTIKK3R0eUFNQTMKKworIyBRQ09NIFNvY3MKK3R0eUhTTDAKK3R0eUhTTDEKK3R0eUhTTDIKK3R0eUhTTDMKK3R0eU1TTTAKK3R0eU1TTTEKK3R0eU1TTTIKKworIyBTYW1zdW5nIEFSTSBTb0NzCit0dHlTQUMwCit0dHlTQUMxCit0dHlTQUMyCit0dHlTQUMzCisKKyMgU1RNIFNvQ3MKK3R0eUFTMAordHR5QVMxCit0dHlBUzIKK3R0eUFTMworCisjIFRJIE9NQVAgU29DcwordHR5TzAKK3R0eU8xCit0dHlPMgordHR5TzMKKworIyBYaWxpbnggWnlucSBTb0MKK3R0eVBTMAordHR5UFMxCisKKyMgVVNCIGRvbmdsZXMKK3R0eVVTQjAKK3R0eVVTQjEKK3R0eVVTQjIKKworIyBVU0Igc2VyaWFsIGdhZGdldAordHR5R1MwCisKKyMgUG93ZXJNYWMKK3R0eVBaMAordHR5UFoxCit0dHlQWjIKK3R0eVBaMworCisjIEVtYmVkZGVkIE1QQyBwbGF0Zm9ybXMKK3R0eVBTQzAKK3R0eVBTQzEKK3R0eVBTQzIKK3R0eVBTQzMKK3R0eVBTQzQKK3R0eVBTQzUKKworIyBQQS1SSVNDIG11eCBwb3J0cwordHR5QjAKK3R0eUIxCisKKyMgU3RhbmRhcmQgaHlwZXJ2aXNvciB2aXJ0dWFsIGNvbnNvbGUKK2h2YzAKKworIyBPbGRzdHlsZSBYZW4gY29uc29sZQoreHZjMAorCisjIFN0YW5kYXJkIGNvbnNvbGVzCit0dHkxCit0dHkyCit0dHkzCit0dHk0Cit0dHk1Cit0dHk2Cit0dHk3Cit0dHk4Cit0dHk5Cit0dHkxMAordHR5MTEKK3R0eTEyCit0dHkxMwordHR5MTQKK3R0eTE1Cit0dHkxNgordHR5MTcKK3R0eTE4Cit0dHkxOQordHR5MjAKK3R0eTIxCit0dHkyMgordHR5MjMKK3R0eTI0Cit0dHkyNQordHR5MjYKK3R0eTI3Cit0dHkyOAordHR5MjkKK3R0eTMwCit0dHkzMQordHR5MzIKK3R0eTMzCit0dHkzNAordHR5MzUKK3R0eTM2Cit0dHkzNwordHR5MzgKK3R0eTM5Cit0dHk0MAordHR5NDEKK3R0eTQyCit0dHk0MwordHR5NDQKK3R0eTQ1Cit0dHk0NgordHR5NDcKK3R0eTQ4Cit0dHk0OQordHR5NTAKK3R0eTUxCit0dHk1MgordHR5NTMKK3R0eTU0Cit0dHk1NQordHR5NTYKK3R0eTU3Cit0dHk1OAordHR5NTkKK3R0eTYwCit0dHk2MQordHR5NjIKK3R0eTYzCisKKyMgTG9jYWwgWCBkaXNwbGF5cyAoYWxsb3dzIGVtcHR5IHBhc3N3b3JkcyB3aXRoIHBhbV91bml4J3MgbnVsbG9rX3NlY3VyZSkKK3B0cy8wCitwdHMvMQorcHRzLzIKK3B0cy8zCisKKyMgRW1iZWRkZWQgRnJlZXNjYWxlIGkuTVggcG9ydHMKK3R0eW14YzAKK3R0eW14YzEKK3R0eW14YzIKK3R0eW14YzMKK3R0eW14YzQKK3R0eW14YzUKKworIyBGcmVlc2NhbGUgbHB1YXJ0IHBvcnRzCit0dHlMUDAKK3R0eUxQMQordHR5TFAyCit0dHlMUDMKK3R0eUxQNAordHR5TFA1CisKKyMgU3RhbmRhcmQgc2VyaWFsIHBvcnRzLCB3aXRoIGRldmZzCit0dHMvMAordHRzLzEKKworIyBTdGFuZGFyZCBjb25zb2xlcywgd2l0aCBkZXZmcwordmMvMQordmMvMgordmMvMwordmMvNAordmMvNQordmMvNgordmMvNwordmMvOAordmMvOQordmMvMTAKK3ZjLzExCit2Yy8xMgordmMvMTMKK3ZjLzE0Cit2Yy8xNQordmMvMTYKK3ZjLzE3Cit2Yy8xOAordmMvMTkKK3ZjLzIwCit2Yy8yMQordmMvMjIKK3ZjLzIzCit2Yy8yNAordmMvMjUKK3ZjLzI2Cit2Yy8yNwordmMvMjgKK3ZjLzI5Cit2Yy8zMAordmMvMzEKK3ZjLzMyCit2Yy8zMwordmMvMzQKK3ZjLzM1Cit2Yy8zNgordmMvMzcKK3ZjLzM4Cit2Yy8zOQordmMvNDAKK3ZjLzQxCit2Yy80MgordmMvNDMKK3ZjLzQ0Cit2Yy80NQordmMvNDYKK3ZjLzQ3Cit2Yy80OAordmMvNDkKK3ZjLzUwCit2Yy81MQordmMvNTIKK3ZjLzUzCit2Yy81NAordmMvNTUKK3ZjLzU2Cit2Yy81NwordmMvNTgKK3ZjLzU5Cit2Yy82MAordmMvNjEKK3ZjLzYyCit2Yy82MwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JiMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorIyBjb21taXQgbWVzc2FnZSBjb3BpZWQgZnJvbSBvcGVuZW1iZWRkZWQ6CisjICAgIGNvbW1pdCAyNDZjODA2MzdiMTM1ZjNhMTEzZDMxOWIxNjM0MjJmOTgxNzRlZTZjCisjICAgIEF1dGhvcjogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgICAgRGF0ZTogICBXZWQgSnVuIDkgMTM6Mzc6MDMgMjAxMCAtMDcwMAorIworIyAgICBzaGFkb3ctNC4xLjQuMjogQWRkIHBhdGNoZXMgdG8gc3VwcG9ydCBkb3RzIGluIGxvZ2luIGlkLgorIyAgICAKKyMgICAgU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMKKyMgY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogc2hhZG93LTQuMS40LjIvbGlibWlzYy9jaGtuYW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzaGFkb3ctNC4xLjQuMi5vcmlnL2xpYm1pc2MvY2hrbmFtZS5jCTIwMDktMDQtMjggMTI6MTQ6MDQuMDAwMDAwMDAwIC0wNzAwCisrKysgc2hhZG93LTQuMS40LjIvbGlibWlzYy9jaGtuYW1lLmMJMjAxMC0wNi0wMyAxNzo0MzoyMC42Mzg5NzM4NTcgLTA3MDAKK0BAIC02MSw2ICs2MSw3IEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX25hbWUgKGNvbnN0IGNoYXIgKm4KKyAJCSAgICAgICggKCcwJyA8PSAqbmFtZSkgJiYgKCc5JyA+PSAqbmFtZSkgKSB8fAorIAkJICAgICAgKCdfJyA9PSAqbmFtZSkgfHwKKyAJCSAgICAgICgnLScgPT0gKm5hbWUpIHx8CisrCQkgICAgICAoJy4nID09ICpuYW1lKSB8fAorIAkJICAgICAgKCAoJyQnID09ICpuYW1lKSAmJiAoJ1wwJyA9PSAqKG5hbWUgKyAxKSkgKQorIAkJICAgICApKSB7CisgCQkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjgwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NoYWRvdy11cGRhdGUtcGFtLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorVGhlIHN5c3RlbS1hdXRoIGluIHRoZSBjb25maWd1cmUgZmlsZXMgaXMgZnJvbSBGZWRvcmEgd2hpY2ggcHV0IGFsbCB0aGUgNCBwYW0gdHlwZSBydWxlcworaW4gb25lIGZpbGUuCitJbiB5b2N0byBpdCBvYmV5IHRoZSB3YXkgd2l0aCBEZWJpYW4vVWJ1bnR1LCBhbmQgdGhlIG5hbWVzIGFyZSBjb21tb24tYXV0aCwgY29tbW9uLWFjY291bnQsCitjb21tb24tcGFzc3dvcmQgYW5kIGNvbW1vbi1zZXNzaW9uLgorU28gdXBkYXRlIHRoZW0gd2l0aCBvZSB3YXkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2NoYWdlIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGFnZQorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2NoYWdlCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2NoYWdlCTIwMTEtMDctMjAgMTk6MDM6MDguOTY0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGdwYXNzd2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2NoZ3Bhc3N3ZAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2NoZ3Bhc3N3ZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGdwYXNzd2QJMjAxMS0wNy0yMCAxOTowMzoyNi41NDQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwYWRkIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGFkZAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwYWRkCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwYWRkCTIwMTEtMDctMjAgMTk6MDQ6MDguMTI0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGRlbCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBkZWwKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGRlbAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGRlbAkyMDExLTA3LTIwIDE5OjA0OjI2LjExNDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtZW1zIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cG1lbXMKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cG1lbXMJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtZW1zCTIwMTEtMDctMjAgMTk6MDQ6MzUuMDc0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cG1vZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtb2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cG1vZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cG1vZAkyMDExLTA3LTIwIDE5OjA0OjQ0Ljg2NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcmFkZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvdXNlcmFkZAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJhZGQJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvdXNlcmFkZAkyMDExLTA3LTIwIDE5OjA3OjI2LjI0NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcmRlbCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvdXNlcmRlbAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJkZWwJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvdXNlcmRlbAkyMDExLTA3LTIwIDE5OjA3OjM1LjczNDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvdXNlcm1vZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvdXNlcm1vZAorLS0tIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJtb2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvdXNlcm1vZAkyMDExLTA3LTIwIDE5OjA3OjQyLjAyNDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkYzE1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvdXNlcm1vZC1maXgtY29tcGlsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordXNlcm1vZDogZml4IGNvbXBpbGF0aW9uIGZhaWx1cmUgd2l0aCBzdWJpZHMgZGlzYWJsZWQKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3VzZXJtb2QuYyB8ICAgIDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJtb2QuYyBiL3NyYy91c2VybW9kLmMKK2luZGV4IGU3ZDQzNTEuLjY4NWI1MGEgMTAwNjQ0CistLS0gYS9zcmMvdXNlcm1vZC5jCisrKysgYi9zcmMvdXNlcm1vZC5jCitAQCAtMTM2MCw3ICsxMzYwLDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgICAgICAgUHJvZywgKHVuc2lnbmVkIGxvbmcpIHVzZXJfbmV3aWQpOworIAkJZXhpdCAoRV9VSURfSU5fVVNFKTsKKyAJfQorLQorKyNpZmRlZiBFTkFCTEVfU1VCSURTCisgCWlmICggICAodmZsZyB8fCBWZmxnKQorIAkgICAgJiYgIWlzX3N1Yl91aWQpIHsKKyAJCWZwcmludGYgKHN0ZGVyciwKK0BAIC0xMzc2LDYgKzEzNzYsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgICAgICBQcm9nLCBzdWJfZ2lkX2RibmFtZSAoKSwgIi13IiwgIi1XIik7CisgCQlleGl0IChFX1VTQUdFKTsKKyAJfQorKyNlbmRpZgorIH0KKyAKKyAvKgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhmODg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc2VjdXJldHR5XzQuMi4xLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXIgb2YgdGhlIG1hY2hpbmUgc3BlY2lmaWMgc2VjdXJldHR5IGZpbGUiCitTRUNUSU9OID0gImJhc2UgdXRpbHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmaWxlOi8vc2VjdXJldHR5IgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgU2luY2UgU0VSSUFMX0NPTlNPTEVTIGlzIGxpa2VseSB0byBiZSBzZXQgZnJvbSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitkb19pbnN0YWxsICgpIHsKKwkjIEVuc3VyZSB3ZSBhZGQgYSBzdWl0YWJsZSBzZWN1cmV0dHkgZmlsZSB0byB0aGUgcGFja2FnZSB0aGF0IGhhcworCSMgbW9zdCBjb21tb24gZW1iZWRkZWQgVFRZcyBkZWZpbmVkLgorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA0MDAgJHtXT1JLRElSfS9zZWN1cmV0dHkgJHtEfSR7c3lzY29uZmRpcn0vc2VjdXJldHR5CisJaWYgWyAhIC16ICIke1NFUklBTF9DT05TT0xFU30iIF07IHRoZW4KKwkJIyBPdXIgU0VSSUFMX0NPTlNPTEVTIGNvbnRhaW5zIGEgYmF1ZCByYXRlIGFuZCBzb21ldGltZXMgZXh0cmEKKwkJIyBvcHRpb25zIGFzIHdlbGwuIFRoZSBmb2xsb3dpbmcgcGVhcmwgOikgdGFrZXMgdGhhdCBhbmQgY29udmVydHMKKwkJIyBpdCBpbnRvIG5ld2xpbmUtc2VwYXJhdGVkIHR0eSdzIGFuZCBhcHBlbmRzIHRoZW0gaW50bworCQkjIHNlY3VyZXR0eS4gU28gaWYgYSBtYWNoaW5lIGhhcyBhIHdlaXJkIGxvb2tpbmcgY29uc29sZSBkZXZpY2UKKwkJIyBub2RlIChlLmcuIHR0eUFNQTApIHRoYXQgc2VjdXJldHR5IGRvZXMgbm90IGtub3csIGl0IHdpbGwgZ2V0CisJCSMgYXBwZW5kZWQgdG8gc2VjdXJldHR5IGFuZCByb290IGxvZ2lucyB3aWxsIGJlIGFsbG93ZWQgb24gdGhhdAorCQkjIGNvbnNvbGUuCisJCXRtcD0iJHtTRVJJQUxfQ09OU09MRVN9IgorCQlmb3IgZW50cnkgaW4gJHRtcCA7IGRvCisJCQl0dHlkZXY9YGVjaG8gIiRlbnRyeSIgfCBzZWQgLWUgJ3MvXlswLTldKlw7Ly8nIC1lICdzL1w7LiovLydgCisJCQlpZiAhIGdyZXAgLXEgJHR0eWRldiAke0R9JHtzeXNjb25mZGlyfS9zZWN1cmV0dHk7IHRoZW4KKwkJCQllY2hvICR0dHlkZXYgPj4gJHtEfSR7c3lzY29uZmRpcn0vc2VjdXJldHR5CisJCQlmaQorCQlkb25lCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXN5c3Jvb3RfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzU2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiU2hhZG93IHV0aWxzIHJlcXVpcmVtZW50cyBmb3IgdXNlcmFkZC5iYmNsYXNzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BrZy1zaGFkb3cuYWxpb3RoLmRlYmlhbi5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvdHJhY2tlci8/Z3JvdXBfaWQ9MzA1ODAiCitTRUNUSU9OID0gImJhc2UgdXRpbHMiCitMSUNFTlNFID0gIkJTRCB8IEFydGlzdGljLTEuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3Q7bWQ1PTI1ZTJmMmRlNGRmYzhmOTY2YWM1Y2RmY2U0NWNkN2Q1IgorCitERVBFTkRTID0gImJhc2UtcGFzc3dkIgorCitQUiA9ICJyMyIKKworIyBUaGUgc29sZSBwdXJwb3NlIG9mIHRoaXMgcmVjaXBlIGlzIHRvIHByb3ZpZGUgdGhlIC9ldGMvbG9naW4uZGVmcworIyBmaWxlIGZvciB0aGUgdGFyZ2V0IHN5c3Jvb3QgLSBuZWVkZWQgc28gdGhlIHNoYWRvdy1uYXRpdmUgdXRpbGl0aWVzCisjIGNhbiBhZGQgY3VzdG9tIHVzZXJzL2dyb3VwcyBmb3IgcmVjaXBlcyB0aGF0IHVzZSBpbmhlcml0IHVzZXJhZGQuCitTUkNfVVJJID0gImZpbGU6Ly9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjg2MDhkODI5NGFjODg5NzRmMjdiMjBmOTkxYzBlNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMzZjViYjRlYTBjODhjNTVmMzY0MmM5N2Y5ZDI1Y2JlZjc0ZjgyZTBiNGNmOGQ1NGU3YWQ2ZjlmOWNhYTc3OCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1wIC1tIDc1NSAke1N9L2xvZ2luLmRlZnNfc2hhZG93LXN5c3Jvb3QgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworfQorCitzeXNyb290X3N0YWdlX2FsbCgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9ICR7U1lTUk9PVF9ERVNURElSfQorfQorCisjIGRvbid0IGNyZWF0ZSBhbnkgcGFja2FnZXMKKyMgb3RoZXJ3aXNlOiBkYnVzLWRldiBkZXBlbmRzIG9uIHNoYWRvdy1zeXNyb290LWRldiB3aGljaCBkZXBlbmRzIG9uIHNoYWRvdy1zeXNyb290IAorIyBhbmQgdGhpcyBoYXMgYW5vdGhlciBjb3B5IG9mIC9ldGMvbG9naW4uZGVmcyBhbHJlYWR5IHByb3ZpZGVkIGJ5IHNoYWRvdworUEFDS0FHRVMgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTNmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy5pbmMKQEAgLTAsMCArMSwxOTYgQEAKK1NVTU1BUlkgPSAiVG9vbHMgdG8gY2hhbmdlIGFuZCBhZG1pbmlzdGVyIHBhc3N3b3JkIGFuZCBncm91cCBkYXRhIgorSE9NRVBBR0UgPSAiaHR0cDovL3BrZy1zaGFkb3cuYWxpb3RoLmRlYmlhbi5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYWxpb3RoLmRlYmlhbi5vcmcvdHJhY2tlci8/Z3JvdXBfaWQ9MzA1ODAiCitTRUNUSU9OID0gImJhc2UvdXRpbHMiCitMSUNFTlNFID0gIkJTRCB8IEFydGlzdGljLTEuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVkODBmZjFjMmI0MDg0M2NmNTc2OGU1MjI5Y2YxNmU1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wYXNzd2QuYztiZWdpbmxpbmU9ODtlbmRsaW5lPTMwO21kNT1kODM4ODhlYTE0YWU2MTk1MTk4MmQ3NzEyNTk0NzY2MSIKKworREVQRU5EUyA9ICJzaGFkb3ctbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWluc3RhbGxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG8tbm90LXJlYWQtbG9naW4uZGVmcy1iZWZvcmUtZG9pbmctY2hyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrX3NpemVfb2ZfdWlkX3RfYW5kX2dpZF90X3VzaW5nX0FDX0NIRUNLX1NJWkVPRi5wYXRjaCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAorICAgICAgICAgICBmaWxlOi8vbG9naW5fZGVmc19wYW0uc2VkIFwKKyAgICAgICAgICAgZmlsZTovL3NoYWRvdy11cGRhdGUtcGFtLWNvbmYucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1zeXNsb2cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb21tb25pby5jLWZpeC11bmV4cGVjdGVkLW9wZW4tZmFpbHVyZS1pbi1jaHJvb3QtZW52LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtc3lzbG9nLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmJmYWZlN2Q0OTYyNjgyZDMxYjVlYmE2NWRiYTRmYzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2IwODkzZDE0NzY3NjY4NjhjZDg4OTIwZjRmMTIzMWM0Nzk1NjUyYWE0MDc1NjlmYWZmODAyYmNkYTBmM2Q0MSIKKworIyBBZGRpdGlvbmFsIFBvbGljeSBmaWxlcyBmb3IgUEFNCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vcGFtLmQvY2hmbiBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvY2hwYXNzd2QgXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL2Noc2ggXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL2xvZ2luIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9uZXd1c2VycyBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvcGFzc3dkIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9zdSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1hdWRpdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJjcmFjayBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1zZWxpbnV4IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWdyb3VwLW5hbWUtbWF4LWxlbmd0aD0yNCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXN1Ym9yZGluYXRlLWlkcz15ZXMgXAorICAgICAgICAgICAgICAgICAke05TQ0RPUFR9IgorCitOU0NET1BUID0gIiIKK05TQ0RPUFRfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1uc2NkIgorTlNDRE9QVF9jbGFzcy1uYXRpdmVzZGsgPSAiLS13aXRob3V0LW5zY2QiCitOU0NET1BUX2xpYmMtdWNsaWJjID0gIiAtLXdpdGhvdXQtbnNjZCIKK05TQ0RPUFRfbGliYy1nbGliYyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3Bhd24nLCAnLS13aXRoLW5zY2QnLCAnLS13aXRob3V0LW5zY2QnLCBkKX0iCisgICAgICAgICAgCitQQU1fUExVR0lOUyA9ICJsaWJwYW0tcnVudGltZSBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWZhaWxkZWxheSBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLXNlY3VyZXR0eSBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLW5vbG9naW4gXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1lbnYgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1ncm91cCBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWxpbWl0cyBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLWxhc3Rsb2cgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1tb3RkIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbWFpbCBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLXNoZWxscyBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLXJvb3RvayIKKworUEFDS0FHRUNPTkZJRyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0td2l0aC1saWJwYW0sLS13aXRob3V0LWxpYnBhbSxsaWJwYW0sJHtQQU1fUExVR0lOU30iCitQQUNLQUdFQ09ORklHW2F0dHJdID0gIi0td2l0aC1hdHRyLC0td2l0aG91dC1hdHRyLGF0dHIiCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS13aXRoLWFjbCwtLXdpdGhvdXQtYWNsLGFjbCIKKworUkRFUEVORFNfJHtQTn0gPSAic2hhZG93LXNlY3VyZXR0eSBcCisgICAgICAgICAgICAgICAgICBiYXNlLXBhc3N3ZCBcCisgICAgICAgICAgICAgICAgICB1dGlsLWxpbnV4LXN1bG9naW4iCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIHNiaW5kaXI9IiR7YmFzZV9zYmluZGlyfSIgdXNiaW5kaXI9IiR7c2JpbmRpcn0iIGluc3RhbGwKKworCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCisKKwkjIEVuYWJsZSBDUkVBVEVfSE9NRSBieSBkZWZhdWx0LgorCXNlZCAtaSAncy8jQ1JFQVRFX0hPTUUvQ1JFQVRFX0hPTUUvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBBcyB3ZSBhcmUgb24gYW4gZW1iZWRkZWQgc3lzdGVtLCBlbnN1cmUgdGhlIHVzZXJzIG1haWxib3ggaXMgaW4KKwkjIH4vIG5vdCAvdmFyL3Nwb29sL21haWwgYnkgZGVmYXVsdCwgYXMgd2hvIGtub3dzIHdoZXJlIG9yIGhvdyBiaWcKKwkjIC92YXIgaXMuIFRoZSBzeXN0ZW0gTURBIHdpbGwgc2V0IHRoaXMgbGF0ZXIgYW55d2F5LgorCXNlZCAtaSAncy9NQUlMX0RJUi8jTUFJTF9ESVIvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCXNlZCAtaSAncy8jTUFJTF9GSUxFL01BSUxfRklMRS9nJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIERpc2FibGUgY2hlY2tpbmcgZW1haWxzLgorCXNlZCAtaSAncy9NQUlMX0NIRUNLX0VOQUIvI01BSUxfQ0hFQ0tfRU5BQi9nJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIENvbW1lbnQgb3V0IFNVX05BTUUgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBidXN5Ym94CisJIyBTZWUgQnVnIzUzNTkgYW5kIEJ1ZyM3MTczCisJc2VkIC1pICdzOl5TVV9OQU1FOiNTVV9OQU1FOmcnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgVXNlIHByb3BlciBlbmNyeXB0aW9uIGZvciBwYXNzd29yZHMKKwlzZWQgLWkgJ3MvXiNFTkNSWVBUX01FVEhPRC4qJC9FTkNSWVBUX01FVEhPRCBTSEE1MTIvJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIE5vdyB3ZSBkb24ndCBoYXZlIGEgbWFpbCBzeXN0ZW0uIERpc2FibGUgbWFpbCBjcmVhdGlvbiBmb3Igbm93LgorCXNlZCAtaSAnczovYmluL2Jhc2g6L2Jpbi9zaDpnJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VzZXJhZGQKKwlzZWQgLWkgJy9eQ1JFQVRFX01BSUxfU1BPT0wvIHM6XjojOicgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCisKKwkjIFVzZSB1c2VycyBncm91cCBieSBkZWZhdWx0CisJc2VkIC1pICdzLF5HUk9VUD0xMDAwLEdST1VQPTEwMCxnJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3VzZXJhZGQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBFbnN1cmUgdGhhdCB0aGUgaW1hZ2UgaGFzIGFzIGEgL3Zhci9zcG9vbC9tYWlsIGRpciBzbyBzaGFkb3cgY2FuCisJIyBwdXQgbWFpbGJveGVzIHRoZXJlIGlmIHRoZSB1c2VyIHJlY29uZmlndXJlcyBzaGFkb3cgdG8gaXRzCisJIyBkZWZhdWx0cyAoc2VlIHNlZCBiZWxvdykuCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9tYWlsCisKKwlpZiBbIC1lICR7V09SS0RJUn0vcGFtLmQgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wYW0uZC8qICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCQkjIFJlbW92ZSBkZWZhdWx0cyB0aGF0IGFyZSBub3QgdXNlZCB3aGVuIHN1cHBvcnRpbmcgUEFNLgorCQlzZWQgLWkgLWYgJHtXT1JLRElSfS9sb2dpbl9kZWZzX3BhbS5zZWQgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0gJHtEfSR7YmFzZV9iaW5kaXJ9IAorCisJIyBNb3ZlIGJpbmFyaWVzIHRvIHRoZSBsb2NhdGlvbnMgd2Ugd2FudAorCXJtICR7RH0ke3NiaW5kaXJ9L3ZpZ3IKKwlsbiAtc2Ygdmlwdy4ke0JQTn0gJHtEfSR7YmFzZV9zYmluZGlyfS92aWdyCisJaWYgWyAiJHtzYmluZGlyfSIgIT0gIiR7YmFzZV9zYmluZGlyfSIgXTsgdGhlbgorCQltdiAke0R9JHtzYmluZGlyfS92aXB3ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vdmlwdworCWZpCisJaWYgWyAiJHtiaW5kaXJ9IiAhPSAiJHtiYXNlX2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7YmluZGlyfS9sb2dpbiAke0R9JHtiYXNlX2JpbmRpcn0vbG9naW4KKwkJbXYgJHtEfSR7YmluZGlyfS9zdSAke0R9JHtiYXNlX2JpbmRpcn0vc3UKKwlmaQorCisJIyBIYW5kbGUgbGluayBwcm9wZXJseSBhZnRlciByZW5hbWUsIG90aGVyd2lzZSBtaXNzaW5nIGZpbGVzIHdvdWxkCisJIyBsZWFkIHJwbSBmYWlsZWQgZGVwZW5kZW5jaWVzLgorCWxuIC1zZiBuZXdncnAuJHtCUE59ICR7RH0ke2JpbmRpcn0vc2cKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWJhc2UiCitGSUxFU18ke1BOfS1iYXNlID0gIlwKKyAgICAke2Jhc2VfYmluZGlyfS9sb2dpbi5zaGFkb3cgXAorICAgICR7YmFzZV9iaW5kaXJ9L3N1LnNoYWRvdyBcCisgICAgJHtiaW5kaXJ9L3NnIFwKKyAgICAke2JpbmRpcn0vbmV3Z3JwLnNoYWRvdyBcCisgICAgJHtiaW5kaXJ9L2dyb3Vwcy5zaGFkb3cgXAorICAgICR7c3lzY29uZmRpcn0vcGFtLmQvbG9naW4gXAorICAgICR7c3lzY29uZmRpcn0vcGFtLmQvc3UgXAorICAgICR7c3lzY29uZmRpcn0vbG9naW4uZGVmcyBcCisiCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tYmFzZSIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjIwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkIGNoZm4gY2hzaCBjaHBhc3N3ZCB2aXB3IHZpZ3IiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY2hwYXNzd2RdID0gIiR7c2JpbmRpcn0vY2hwYXNzd2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdmlwd10gPSAiJHtiYXNlX3NiaW5kaXJ9L3ZpcHciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdmlncl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3ZpZ3IiCisKK0FMVEVSTkFUSVZFXyR7UE59LWJhc2UgPSAibmV3Z3JwIGdyb3VwcyBsb2dpbiBzdSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsb2dpbl0gPSAiJHtiYXNlX2JpbmRpcn0vbG9naW4iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3VdID0gIiR7YmFzZV9iaW5kaXJ9L3N1IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyBncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtncm91cHMuMV0gPSAiJHttYW5kaXJ9L21hbjEvZ3JvdXBzLjEiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSAgcm9vdGFyZz0iLS1yb290ICREIgorCWVsc2UKKwkgIHJvb3Rhcmc9IiIKKwlmaQorCisJcHdjb252ICRyb290YXJnIHx8IGV4aXQgMQorCWdycGNvbnYgJHJvb3RhcmcgfHwgZXhpdCAxCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvd180LjIuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93XzQuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NzVjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvd180LjIuMS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHNoYWRvdy5pbmMKKworIyBCdWlsZCBmYWxzZWx5IGFzc3VtZXMgdGhhdCBpZiAtLWVuYWJsZS1saWJwYW0gaXMgc2V0LCB3ZSBkb24ndCBuZWVkIHRvIGxpbmsgYWdhaW5zdAorIyBsaWJjcnlwdC4gVGhpcyBicmVha3MgY2hzaC4KK0JVSUxEX0xERkxBR1NfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3J5cHQnLCAgJy1sY3J5cHQnLCAnJywgZCksICcnLCBkKX0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy8wMDAxLUZpeC1lcnJvci1jb25mbGljdGluZy10eXBlcy1mb3ItcG9zaXhfY2xvc2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gOTZlYjdlMjk4MjIxNTE4MjNhNjZhMWViNTlmMWZhNGFlYWQ1YWUwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDA2OjMzOjIxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCAgZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAncG9zaXhfY2xvc2UnCisKK0V4cG9zZWQgd2hpbGUgY29tcGlsaW5nIG9uIG11c2wKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvc2xwb3Npby5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zbHBvc2lvLmMgYi9zcmMvc2xwb3Npby5jCitpbmRleCA5Y2U5Njk3Li45ZmY5YmZlIDEwMDY0NAorLS0tIGEvc3JjL3NscG9zaW8uYworKysrIGIvc3JjL3NscG9zaW8uYworQEAgLTM2Myw3ICszNjMsNyBAQCBzdGF0aWMgaW50IHBvc2l4X2Nsb3NlX2ZkIChpbnQgKmZkKQorICAgIHJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgaW50IHBvc2l4X2Nsb3NlIChTTEZpbGVfRkRfVHlwZSAqZikKKytzdGF0aWMgaW50IHBvc2l4X2Nsb3NleCAoU0xGaWxlX0ZEX1R5cGUgKmYpCisgeworICAgIGludCBzdGF0dXMgPSBkb19jbG9zZSAoZik7CisgCitAQCAtMTAwMSw3ICsxMDAxLDcgQEAgc3RhdGljIFNMYW5nX0ludHJpbl9GdW5fVHlwZSBGZF9OYW1lX1RhYmxlIFtdID0KKyAgICBNQUtFX0lOVFJJTlNJQ18yKCJ3cml0ZSIsIHBvc2l4X3dyaXRlLCBWLCBGLCBCKSwKKyAgICBNQUtFX0lOVFJJTlNJQ18xKCJkdXBfZmQiLCBwb3NpeF9kdXAsIFYsIEYpLAorICAgIE1BS0VfSU5UUklOU0lDXzIoImR1cDJfZmQiLCBwb3NpeF9kdXAyLCBJLCBGLCBJKSwKKy0gICBNQUtFX0lOVFJJTlNJQ18xKCJjbG9zZSIsIHBvc2l4X2Nsb3NlLCBJLCBGKSwKKysgICBNQUtFX0lOVFJJTlNJQ18xKCJjbG9zZSIsIHBvc2l4X2Nsb3NleCwgSSwgRiksCisgICAgTUFLRV9JTlRSSU5TSUNfMSgiX2Nsb3NlIiwgcG9zaXhfY2xvc2VfZmQsIEksIEkpLAorICNpZiBkZWZpbmVkKFRUWU5BTUVfUikKKyAgICBNQUtFX0lOVFJJTlNJQ18wKCJ0dHluYW1lIiwgcG9zaXhfdHR5bmFtZSwgViksCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWExZmZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2NoYW5nZS1jaGFyLXR5cGUtdG8tc2lnbmVkLWNoYXItaW4tbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMjE4IEBACitzbGFuZzogY2hhbmdlIGNoYXIgdHlwZSB0byBzaWduZWQgY2hhciBpbiBtYWNyb3MKKworQyBsYW5ndWFnZSBoYXMgMyBkaXN0aW5jdCBjaGFyIHR5cGVzOgorICAgICAgICAgY2hhcgorICAgICAgICAgdW5zaWduZWQgY2hhcgorICAgICAgICAgc2lnbmVkIGNoYXIKK0EgY2hhciBoYXMgdGhlIHNhbWUgcmFuZ2Ugb2YgdmFsdWVzIGFzIHNpZ25lZCBjaGFyIG9uIFg4NiwKK2J1dCBzYW1lIGFzIHVuc2lnbmVkIGNoYXIgb24gQVJNIHdoaWNoIG1hZGUgU2xhbmcncyB0eXBlY2FzdCgpCithbmQgYXJyYXlfc29ydCgpIHVuYWJsZSB0byB3b3JrIGZvciBjaGFyIHZhbHVlIG9uIEFSTSwgc2luY2UKK1NsYW5nIGlzIGFzc3VtaW5nICJjaGFyIiBhcyAic2lnbmVkIGNoYXIiLgorCitOb3cgd2UgY2hhbmdlICJjaGFyIiBhcyAic2lnbmVkIGNoYXIiIGV4cGxpY2l0bHkgaW4KK3V0aWwvbWtzbGFyaXRoMi5zbCwgYW5kIHVzZSBpdCB0byByZWdlbmVyYXRlIHNyYy9zbGFyaXRoMi5pbmMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9zbGFyaXRoMi5pbmMgICAgICAgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvdXRpbC9ta3NsYXJpdGgyLnNsIHwgICAgMiAtCisgMiBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlvbnMoLSkKKworLS0tIGEvc3JjL3V0aWwvbWtzbGFyaXRoMi5zbAorKysrIGIvc3JjL3V0aWwvbWtzbGFyaXRoMi5zbAorQEAgLTEsNyArMSw3IEBACisgIyEvdXNyL2Jpbi9lbnYgc2xzaAorIAorIHByaXZhdGUgdmFyaWFibGUgQ1R5cGVzID0KKy0gIFsiY2hhciIsICJ1bnNpZ25lZCBjaGFyIiwgInNob3J0IiwgInVuc2lnbmVkIHNob3J0IiwgImludCIsICJ1bnNpZ25lZCBpbnQiLAorKyAgWyJzaWduZWQgY2hhciIsICJ1bnNpZ25lZCBjaGFyIiwgInNob3J0IiwgInVuc2lnbmVkIHNob3J0IiwgImludCIsICJ1bnNpZ25lZCBpbnQiLAorICAgICJsb25nIiwgInVuc2lnbmVkIGxvbmciLCAibG9uZyBsb25nIiwgInVuc2lnbmVkIGxvbmcgbG9uZyIsCisgICAgImZsb2F0IiwgImRvdWJsZSIsICJsb25nIGRvdWJsZSJdOworIHByaXZhdGUgdmFyaWFibGUgSXNfSW50X1R5cGUgPQorLS0tIGEvc3JjL3NsYXJpdGgyLmluYworKysrIGIvc3JjL3NsYXJpdGgyLmluYworQEAgLTEsNDMgKzEsNDMgQEAKKyAvKiBETyBOT1QgRURJVCAtLSB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBzcmMvdXRpbC9ta3NsYXJpdGgyLnNsICovCistLyogLS0tLS0tLS0tLS0tIGNoYXIgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9jaGFyX3RvX2NoYXIsY2hhcixjaGFyKQorKy8qIC0tLS0tLS0tLS0tLSBzaWduZWQgY2hhciAtLS0tLS0tLS0tICovCisrREVGVU5fMShjb3B5X2NoYXJfdG9fY2hhcixzaWduZWQgY2hhcixzaWduZWQgY2hhcikKKyAjZGVmaW5lIGNoYXJfdG9fY2hhcglOVUxMCisgI2RlZmluZSBjb3B5X2NoYXJfdG9fdWNoYXIJY29weV9jaGFyX3RvX2NoYXIKKyAjZGVmaW5lIGNoYXJfdG9fdWNoYXIJTlVMTAorLURFRlVOXzEoY29weV9jaGFyX3RvX3Nob3J0LGNoYXIsc2hvcnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fc2hvcnQsc2lnbmVkIGNoYXIsc2hvcnQpCisgI2RlZmluZSBjaGFyX3RvX3Nob3J0CU5VTEwKKy1ERUZVTl8xKGNvcHlfY2hhcl90b191c2hvcnQsY2hhcix1bnNpZ25lZCBzaG9ydCkKKytERUZVTl8xKGNvcHlfY2hhcl90b191c2hvcnQsc2lnbmVkIGNoYXIsdW5zaWduZWQgc2hvcnQpCisgI2RlZmluZSBjaGFyX3RvX3VzaG9ydAlOVUxMCistREVGVU5fMShjb3B5X2NoYXJfdG9faW50LGNoYXIsaW50KQorLURFRlVOXzIoY2hhcl90b19pbnQsY2hhcixpbnQsY29weV9jaGFyX3RvX2ludCkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b191aW50LGNoYXIsdW5zaWduZWQgaW50KQorLURFRlVOXzIoY2hhcl90b191aW50LGNoYXIsdW5zaWduZWQgaW50LGNvcHlfY2hhcl90b191aW50KQorLURFRlVOXzEoY29weV9jaGFyX3RvX2xvbmcsY2hhcixsb25nKQorLURFRlVOXzIoY2hhcl90b19sb25nLGNoYXIsbG9uZyxjb3B5X2NoYXJfdG9fbG9uZykKKy1ERUZVTl8xKGNvcHlfY2hhcl90b191bG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcpCistREVGVU5fMihjaGFyX3RvX3Vsb25nLGNoYXIsdW5zaWduZWQgbG9uZyxjb3B5X2NoYXJfdG9fdWxvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9faW50LHNpZ25lZCBjaGFyLGludCkKKytERUZVTl8yKGNoYXJfdG9faW50LHNpZ25lZCBjaGFyLGludCxjb3B5X2NoYXJfdG9faW50KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3VpbnQsc2lnbmVkIGNoYXIsdW5zaWduZWQgaW50KQorK0RFRlVOXzIoY2hhcl90b191aW50LHNpZ25lZCBjaGFyLHVuc2lnbmVkIGludCxjb3B5X2NoYXJfdG9fdWludCkKKytERUZVTl8xKGNvcHlfY2hhcl90b19sb25nLHNpZ25lZCBjaGFyLGxvbmcpCisrREVGVU5fMihjaGFyX3RvX2xvbmcsc2lnbmVkIGNoYXIsbG9uZyxjb3B5X2NoYXJfdG9fbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b191bG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nKQorK0RFRlVOXzIoY2hhcl90b191bG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nLGNvcHlfY2hhcl90b191bG9uZykKKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sbG9uZyxjaGFyLGxvbmcgbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fbGxvbmcsY2hhcixsb25nIGxvbmcsY29weV9jaGFyX3RvX2xsb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2xsb25nLHNpZ25lZCBjaGFyLGxvbmcgbG9uZykKKytERUZVTl8yKGNoYXJfdG9fbGxvbmcsc2lnbmVkIGNoYXIsbG9uZyBsb25nLGNvcHlfY2hhcl90b19sbG9uZykKKyAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKKy1ERUZVTl8xKGNvcHlfY2hhcl90b191bGxvbmcsY2hhcix1bnNpZ25lZCBsb25nIGxvbmcpCistREVGVU5fMihjaGFyX3RvX3VsbG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fdWxsb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3VsbG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nIGxvbmcpCisrREVGVU5fMihjaGFyX3RvX3VsbG9uZyxzaWduZWQgY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY29weV9jaGFyX3RvX3VsbG9uZykKKyAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2NoYXJfdG9fZmxvYXQsY2hhcixmbG9hdCkKKy1ERUZVTl8yKGNoYXJfdG9fZmxvYXQsY2hhcixmbG9hdCxjb3B5X2NoYXJfdG9fZmxvYXQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fZmxvYXQsc2lnbmVkIGNoYXIsZmxvYXQpCisrREVGVU5fMihjaGFyX3RvX2Zsb2F0LHNpZ25lZCBjaGFyLGZsb2F0LGNvcHlfY2hhcl90b19mbG9hdCkKKyAjZW5kaWYgLyogU0xBTkdfSEFTX0ZMT0FUICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9jaGFyX3RvX2RvdWJsZSxjaGFyLGRvdWJsZSkKKy1ERUZVTl8yKGNoYXJfdG9fZG91YmxlLGNoYXIsZG91YmxlLGNvcHlfY2hhcl90b19kb3VibGUpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fZG91YmxlLHNpZ25lZCBjaGFyLGRvdWJsZSkKKytERUZVTl8yKGNoYXJfdG9fZG91YmxlLHNpZ25lZCBjaGFyLGRvdWJsZSxjb3B5X2NoYXJfdG9fZG91YmxlKQorICNlbmRpZiAvKiBTTEFOR19IQVNfRkxPQVQgKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKQorLURFRlVOXzEoY29weV9jaGFyX3RvX2xkb3VibGUsY2hhcixsb25nIGRvdWJsZSkKKy1ERUZVTl8yKGNoYXJfdG9fbGRvdWJsZSxjaGFyLGxvbmcgZG91YmxlLGNvcHlfY2hhcl90b19sZG91YmxlKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2xkb3VibGUsc2lnbmVkIGNoYXIsbG9uZyBkb3VibGUpCisrREVGVU5fMihjaGFyX3RvX2xkb3VibGUsc2lnbmVkIGNoYXIsbG9uZyBkb3VibGUsY29weV9jaGFyX3RvX2xkb3VibGUpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkgKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistVE9fRE9VQkxFX0ZVTihjaGFyX3RvX29uZV9kb3VibGUsY2hhcikKKytUT19ET1VCTEVfRlVOKGNoYXJfdG9fb25lX2RvdWJsZSxzaWduZWQgY2hhcikKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgY2hhciAtLS0tLS0tLS0tICovCitAQCAtODIsNyArODIsNyBAQCBUT19ET1VCTEVfRlVOKHVjaGFyX3RvX29uZV9kb3VibGUsdW5zaWduCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHNob3J0IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfc2hvcnRfdG9fY2hhcixzaG9ydCxjaGFyKQorK0RFRlVOXzEoY29weV9zaG9ydF90b19jaGFyLHNob3J0LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgc2hvcnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3Nob3J0X3RvX3VjaGFyLHNob3J0LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBzaG9ydF90b191Y2hhcglOVUxMCitAQCAtMTIzLDcgKzEyMyw3IEBAIFRPX0RPVUJMRV9GVU4oc2hvcnRfdG9fb25lX2RvdWJsZSxzaG9ydCkKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgc2hvcnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV91c2hvcnRfdG9fY2hhcix1bnNpZ25lZCBzaG9ydCxjaGFyKQorK0RFRlVOXzEoY29weV91c2hvcnRfdG9fY2hhcix1bnNpZ25lZCBzaG9ydCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHVzaG9ydF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdXNob3J0X3RvX3VjaGFyLHVuc2lnbmVkIHNob3J0LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1c2hvcnRfdG9fdWNoYXIJTlVMTAorQEAgLTE2NCw3ICsxNjQsNyBAQCBUT19ET1VCTEVfRlVOKHVzaG9ydF90b19vbmVfZG91YmxlLHVuc2lnCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIGludCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X2ludF90b19jaGFyLGludCxjaGFyKQorK0RFRlVOXzEoY29weV9pbnRfdG9fY2hhcixpbnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBpbnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2ludF90b191Y2hhcixpbnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGludF90b191Y2hhcglOVUxMCitAQCAtMjA1LDcgKzIwNSw3IEBAIFRPX0RPVUJMRV9GVU4oaW50X3RvX29uZV9kb3VibGUsaW50KQorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBpbnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV91aW50X3RvX2NoYXIsdW5zaWduZWQgaW50LGNoYXIpCisrREVGVU5fMShjb3B5X3VpbnRfdG9fY2hhcix1bnNpZ25lZCBpbnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1aW50X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91aW50X3RvX3VjaGFyLHVuc2lnbmVkIGludCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWludF90b191Y2hhcglOVUxMCitAQCAtMjQ2LDcgKzI0Niw3IEBAIFRPX0RPVUJMRV9GVU4odWludF90b19vbmVfZG91YmxlLHVuc2lnbmUKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gbG9uZyAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X2xvbmdfdG9fY2hhcixsb25nLGNoYXIpCisrREVGVU5fMShjb3B5X2xvbmdfdG9fY2hhcixsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgbG9uZ190b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfbG9uZ190b191Y2hhcixsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0yODcsNyArMjg3LDcgQEAgVE9fRE9VQkxFX0ZVTihsb25nX3RvX29uZV9kb3VibGUsbG9uZykKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgbG9uZyAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3Vsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV91bG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcsc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bG9uZ190b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdWxvbmdfdG9fdWNoYXIsdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTMyOSw3ICszMjksNyBAQCBUT19ET1VCTEVfRlVOKHVsb25nX3RvX29uZV9kb3VibGUsdW5zaWduCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgbG9uZyAtLS0tLS0tLS0tICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2xsb25nX3RvX2NoYXIsbG9uZyBsb25nLGNoYXIpCisrREVGVU5fMShjb3B5X2xsb25nX3RvX2NoYXIsbG9uZyBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2xsb25nX3RvX3VjaGFyLGxvbmcgbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTM3Miw3ICszNzIsNyBAQCBUT19ET1VCTEVfRlVOKGxsb25nX3RvX29uZV9kb3VibGUsbG9uZyBsCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGxvbmcgbG9uZyAtLS0tLS0tLS0tICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X3VsbG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcgbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV91bGxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bGxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3VsbG9uZ190b191Y2hhcix1bnNpZ25lZCBsb25nIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsbG9uZ190b191Y2hhcglOVUxMCitAQCAtNDE1LDcgKzQxNSw3IEBAIFRPX0RPVUJMRV9GVU4odWxsb25nX3RvX29uZV9kb3VibGUsdW5zaWcKKyAKKyAvKiAtLS0tLS0tLS0tLS0gZmxvYXQgLS0tLS0tLS0tLSAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfZmxvYXRfdG9fY2hhcixmbG9hdCxjaGFyKQorK0RFRlVOXzEoY29weV9mbG9hdF90b19jaGFyLGZsb2F0LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgZmxvYXRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2Zsb2F0X3RvX3VjaGFyLGZsb2F0LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBmbG9hdF90b191Y2hhcglOVUxMCitAQCAtNDU4LDcgKzQ1OCw3IEBAIFRPX0RPVUJMRV9GVU4oZmxvYXRfdG9fb25lX2RvdWJsZSxmbG9hdCkKKyAKKyAvKiAtLS0tLS0tLS0tLS0gZG91YmxlIC0tLS0tLS0tLS0gKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2RvdWJsZV90b19jaGFyLGRvdWJsZSxjaGFyKQorK0RFRlVOXzEoY29weV9kb3VibGVfdG9fY2hhcixkb3VibGUsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBkb3VibGVfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2RvdWJsZV90b191Y2hhcixkb3VibGUsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGRvdWJsZV90b191Y2hhcglOVUxMCitAQCAtNTAxLDcgKzUwMSw3IEBAIFRPX0RPVUJMRV9GVU4oZG91YmxlX3RvX29uZV9kb3VibGUsZG91YmwKKyAKKyAvKiAtLS0tLS0tLS0tLS0gbG9uZyBkb3VibGUgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpCistREVGVU5fMShjb3B5X2xkb3VibGVfdG9fY2hhcixsb25nIGRvdWJsZSxjaGFyKQorK0RFRlVOXzEoY29weV9sZG91YmxlX3RvX2NoYXIsbG9uZyBkb3VibGUsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsZG91YmxlX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9sZG91YmxlX3RvX3VjaGFyLGxvbmcgZG91YmxlLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBsZG91YmxlX3RvX3VjaGFyCU5VTEwKK0BAIC01NDUsNyArNTQ1LDcgQEAgVE9fRE9VQkxFX0ZVTihsZG91YmxlX3RvX29uZV9kb3VibGUsbG9uZworICNpZiBTTEFOR19IQVNfRkxPQVQKKyBzdGF0aWMgVG9fRG91YmxlX0Z1bl9UYWJsZV9UeXBlIFRvX0RvdWJsZV9GdW5fVGFibGUgW01BWF9BUklUSE1FVElDX1RZUEVTXSA9CisgeworLSAgIHtzaXplb2YoY2hhciksIGNoYXJfdG9fb25lX2RvdWJsZX0sCisrICAge3NpemVvZihzaWduZWQgY2hhciksIGNoYXJfdG9fb25lX2RvdWJsZX0sCisgICAge3NpemVvZih1bnNpZ25lZCBjaGFyKSwgdWNoYXJfdG9fb25lX2RvdWJsZX0sCisgICAge3NpemVvZihzaG9ydCksIHNob3J0X3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2YodW5zaWduZWQgc2hvcnQpLCB1c2hvcnRfdG9fb25lX2RvdWJsZX0sCitAQCAtNTgzLDcgKzU4Myw3IEBAIHN0YXRpYyBUb19Eb3VibGVfRnVuX1RhYmxlX1R5cGUgVG9fRG91YmwKKyAKKyBzdGF0aWMgQmluYXJ5X01hdHJpeF9UeXBlIEJpbmFyeV9NYXRyaXggW01BWF9BUklUSE1FVElDX1RZUEVTXVtNQVhfQVJJVEhNRVRJQ19UWVBFU10gPQorIHsKKy0gICAvKiBjaGFyICovCisrICAgLyogc2lnbmVkIGNoYXIgKi8KKyAgICB7CisgICAgICB7KEZWT0lEX1NUQVIpY29weV9jaGFyX3RvX2NoYXIsIGNoYXJfdG9fY2hhcn0sCisgICAgICB7KEZWT0lEX1NUQVIpY29weV9jaGFyX3RvX3VjaGFyLCBjaGFyX3RvX3VjaGFyfSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE1NTNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL2ZpeC1jaGVjay1wY3JlLnBhdGNoCkBAIC0wLDAgKzEsMTA4IEBACitmaXggdGhlIHBjcmUgZXhpc3RlbmNlIGNoZWNraW5nCisKK3doZW4gY2hlY2sgaWYgdGhlcmUgaXMgcGNyZSwgdGhlIGNvbmZpZ3VyZSBmaWxlIGFsd2F5cyBjaGVjawordGhlIGhvc3QgZGlyLiBub3cgd2UgbWFrZSBpdCB3b3JrIGJ5IGFkZGluZyBjb3JyZWN0IHByZWZpeCBmb3IKK2Nyb3NzLWNvbXBpbGUgZW52aXJvbm1lbnQuCisKK1doZW4gZW5hYmxlIHBjcmUtbW9kdWxlLCB3ZSBzZWUgYSBRQSB3YXJuaW5nIGJlY2F1c2UgcnBhdGhzCitoYXJkY29kZWQgaW50byB0aGUgYnVpbGQsIHJwYXRocyBhcmUgbm90IG5lZWRlZCwgc28gbGV0cyB0dXJuCit0aGlzIG9mZi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUgfCAgIDYwICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZjE1ODZjMy4uZDIyODE0ZiAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNjk5MSw2ICs2OTkxLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwY3JlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAJIC91c3IvaW5jbHVkZS9wY3JlLC91c3IvbGliIFwKKyAJIC91c3IvcGNyZS9pbmNsdWRlLC91c3IvcGNyZS9saWIgXAorIAkgL3Vzci9pbmNsdWRlLC91c3IvbGliIFwKKysJIC91c3IvaW5jbHVkZSwvdXNyL2xpYjY0IFwKKyAJIC9vcHQvaW5jbHVkZS9wY3JlLC9vcHQvbGliIFwKKyAJIC9vcHQvcGNyZS9pbmNsdWRlLC9vcHQvcGNyZS9saWIgXAorIAkgL29wdC9pbmNsdWRlLC9vcHQvbGliIgorQEAgLTcwMjEsMTQgKzcwMjIsMTQgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwY3JlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAgICAgICAgIHhpbmNkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMX0nYAorIAl4bGliZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAJZm91bmQ9MAorLQlpZiB0ZXN0IC1yICR4aW5jZGlyLyR4aW5jZmlsZQorKwlpZiB0ZXN0IC1yICRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyLyR4aW5jZmlsZQorIAl0aGVuCisgCSAgZm9yIEUgaW4gJGV4dHMKKyAJICBkbworLQkgICAgaWYgdGVzdCAtciAiJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorKwkgICAgaWYgdGVzdCAtciAiJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorIAkgICAgdGhlbgorLQkgICAgICBqZF9wY3JlX2luY2x1ZGVfZGlyPSIkeGluY2RpciIKKy0JICAgICAgamRfcGNyZV9saWJyYXJ5X2Rpcj0iJHhsaWJkaXIiCisrCSAgICAgIGpkX3BjcmVfaW5jbHVkZV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyIgorKwkgICAgICBqZF9wY3JlX2xpYnJhcnlfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGxpYmRpciIKKyAJICAgICAgamRfd2l0aF9wY3JlX2xpYnJhcnk9InllcyIKKyAJICAgICAgZm91bmQ9MQorIAkgICAgICBicmVhaworQEAgLTcwNTQsNTYgKzcwNTUsNyBAQCAkYXNfZWNobyAieWVzOiAkamRfcGNyZV9saWJyYXJ5X2RpciBhbmQgJGpkX3BjcmVfaW5jbHVkZV9kaXIiID4mNjsgfQorICAgICB0aGVuCisgICAgICAgUENSRV9MSUI9IiIKKyAgICAgZWxzZQorLQorLWlmIHRlc3QgIlgkamRfcGNyZV9saWJyYXJ5X2RpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRqZF9wY3JlX2xpYnJhcnlfZGlyIgorLSAgICBmaQorLSAgZWxzZQorLSAgICBSUEFUSD0iJFJQQVRIOiRqZF9wY3JlX2xpYnJhcnlfZGlyIgorLSAgZmkKKy1maQorLQorKyAgICAgIFJQQVRIPSIiCisgICAgIGZpCisgCisgICAgIFBDUkVfSU5DPS1JJGpkX3BjcmVfaW5jbHVkZV9kaXIKKy0tIAorMS43LjQuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjYWM5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9ycGF0aGZpeC5wYXRjaApAQCAtMCwwICsxLDcwIEBACitXaXRob3V0IHRoaXMgcGF0Y2ggd2Ugc2VlIHJwYXRocyBoYXJkY29kZWQgaW50byB0aGUgYnVpbGQgd2hpY2ggcmVzdWx0cyBpbiBRQQord2FybmluZ3MuIFRoZXNlIHJwYXRocyBhcmUgbm90IG5lZWRlZCBzbyBsZXRzIHR1cm4gdGhpcyBvZmYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorKGJ1dCBjb3VsZCBiZSB0dXJuZWQgaW50byBhIHByb3BlciBjb25maWd1cmUgb3B0aW9uKQorCitSUCAyMDEyLzAzLzE0CisKK0luZGV4OiBzbGFuZy0yLjIuNC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzbGFuZy0yLjIuNC5vcmlnL2NvbmZpZ3VyZQkyMDEyLTAzLTE0IDIzOjQwOjAxLjI4MzU2MDY3OSArMDAwMAorKysrIHNsYW5nLTIuMi40L2NvbmZpZ3VyZQkyMDEyLTAzLTE0IDIzOjQxOjE4LjAyMzU1ODkwMCArMDAwMAorQEAgLTYwODEsNTYgKzYwODEsNyBAQAorIEVMRl9DRkxBR1M9IiRFTEZfQ0ZMQUdTICRJRUVFX0NGTEFHUyIKKyBDRkxBR1M9IiRDRkxBR1MgJElFRUVfQ0ZMQUdTIgorIAorLQorLWlmIHRlc3QgIlgkbGliZGlyIiAhPSAiWCIKKy10aGVuCistICBpZiB0ZXN0ICJYJFJQQVRIIiA9ICJYIgorLSAgdGhlbgorLQorLWNhc2UgIiRob3N0X29zIiBpbgorLSAgKmxpbnV4Knwqc29sYXJpcyogKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItV2wsLVIsIgorLSAgICAgIGVsc2UKKy0gICAgICAgIFJQQVRIPSItV2wsLVIiCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1SICIKKy0gICAgICBlbHNlCistCVJQQVRIPSItUiIKKy0gICAgICBmaQorLSAgICBmaQorLSAgOzsKKy0gICpvc2YqfCpvcGVuYnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtcnBhdGgsIgorLSAgICBlbHNlCistICAgICAgUlBBVEg9Ii1ycGF0aCAiCistICAgIGZpCistICA7OworLSAgKm5ldGJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLVIiCistICAgIGZpCistICA7OworLWVzYWMKKy0KKy0gICAgaWYgdGVzdCAiWCRSUEFUSCIgIT0gIlgiCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iJFJQQVRIJGxpYmRpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokbGliZGlyIgorLSAgZmkKKy1maQorLQorK1JQQVRIPSIiCisgCisgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4ZmU5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zbGFuZy1maXgtdGhlLWljb252LWV4aXN0ZW5jZS1jaGVja2luZy5wYXRjaApAQCAtMCwwICsxLDExNiBAQAorRnJvbSA0NTg4ZjRhMDI4Nzc4Nzc4OGViODZmYjE2ZjMyNmNiYWE3NDU0ZTFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWmhlbmcgSnVubGluZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBNb24sIDE2IEp1biAyMDE0IDEyOjUxOjI1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNsYW5nOiBmaXggdGhlIGljb252IGV4aXN0ZW5jZSBjaGVja2luZworCitXaGVuIGNoZWNraW5nIHdoZXRoZXIgdGhlcmUgaXMgaWNvbnYsIHRoZSBjb25maWd1cmUgZmlsZSBhbHdheXMgY2hlY2sgCit0aGUgaG9zdCBlbnYuCisKK05vdyB3ZSBtYWtlIGl0IHdvcmtpbmcgcHJvcGVybHkgYnkgYWRkaW5nIGNvcnJlY3QgcHJlZml4IGZvciBjcm9zcy0KK2NvbXBpbGluZyBlbnZpcm9ubWVudC4KKworV2hlbiBlbmFibGluZyBpY29udi1tb2R1bGUsIHdlIHNlZSBhIFFBIHdhcm5pbmcgYmVjYXVzZSBycGF0aHMgaGFyZGNvZGVkCitpbnRvIHRoZSBidWlsZC4gQW5kIHJwYXRocyBhcmUgbm90IG5lZWRlZCwgc28gbGV0J3MgdHVybiB0aGlzIG9mZi4KKworVGhpcyBwYXRjaCBpcyBnZW5lcmF0ZWQgYnkgcmVmZXJlbmNpbmcgdGhlIGV4aXN0aW5nICJmaXgtY2hlY2stcGNyZSIKK3BhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogWmhlbmcgSnVubGluZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CistLS0KKyBjb25maWd1cmUgfCA2MCArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggN2E5NjI1Ni4uOTE2MzJmMyAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzkwOSw2ICs3OTA5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBpY29udiBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgCSAvdXNyL2luY2x1ZGUvaWNvbnYsL3Vzci9saWIgXAorIAkgL3Vzci9pY29udi9pbmNsdWRlLC91c3IvaWNvbnYvbGliIFwKKyAJIC91c3IvaW5jbHVkZSwvdXNyL2xpYiBcCisrCSAvdXNyL2luY2x1ZGUsL3Vzci9saWI2NCBcCisgCSAvb3B0L2luY2x1ZGUvaWNvbnYsL29wdC9saWIgXAorIAkgL29wdC9pY29udi9pbmNsdWRlLC9vcHQvaWNvbnYvbGliIFwKKyAJIC9vcHQvaW5jbHVkZSwvb3B0L2xpYiIKK0BAIC03OTM5LDE0ICs3OTQwLDE0IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorICAgICAgICAgeGluY2Rpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQxfSdgCisgCXhsaWJkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMn0nYAorIAlmb3VuZD0wCistCWlmIHRlc3QgLXIgJHhpbmNkaXIvJHhpbmNmaWxlCisrCWlmIHRlc3QgLXIgJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhpbmNkaXIvJHhpbmNmaWxlCisgCXRoZW4KKyAJICBmb3IgRSBpbiAkZXh0cworIAkgIGRvCistCSAgICBpZiB0ZXN0IC1yICIkeGxpYmRpci8keGxpYmZpbGUuJEUiCisrCSAgICBpZiB0ZXN0IC1yICIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGxpYmRpci8keGxpYmZpbGUuJEUiCisgCSAgICB0aGVuCistCSAgICAgIGpkX2ljb252X2luY2x1ZGVfZGlyPSIkeGluY2RpciIKKy0JICAgICAgamRfaWNvbnZfbGlicmFyeV9kaXI9IiR4bGliZGlyIgorKwkgICAgICBqZF9pY29udl9pbmNsdWRlX2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhpbmNkaXIiCisrCSAgICAgIGpkX2ljb252X2xpYnJhcnlfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGxpYmRpciIKKyAJICAgICAgamRfd2l0aF9pY29udl9saWJyYXJ5PSJ5ZXMiCisgCSAgICAgIGZvdW5kPTEKKyAJICAgICAgYnJlYWsKK0BAIC03OTcyLDU2ICs3OTczLDcgQEAgJGFzX2VjaG8gInllczogJGpkX2ljb252X2xpYnJhcnlfZGlyIGFuZCAkamRfaWNvbnZfaW5jbHVkZV9kaXIiID4mNjsgfQorICAgICB0aGVuCisgICAgICAgSUNPTlZfTElCPSIiCisgICAgIGVsc2UKKy0KKy1pZiB0ZXN0ICJYJGpkX2ljb252X2xpYnJhcnlfZGlyIiAhPSAiWCIKKy10aGVuCistICBpZiB0ZXN0ICJYJFJQQVRIIiA9ICJYIgorLSAgdGhlbgorLQorLWNhc2UgIiRob3N0X29zIiBpbgorLSAgKmxpbnV4Knwqc29sYXJpcyogKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItV2wsLVIsIgorLSAgICAgIGVsc2UKKy0gICAgICAgIFJQQVRIPSItV2wsLVIiCistICAgICAgZmkKKy0gICAgZWxzZQorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1SICIKKy0gICAgICBlbHNlCistCVJQQVRIPSItUiIKKy0gICAgICBmaQorLSAgICBmaQorLSAgOzsKKy0gICpvc2YqfCpvcGVuYnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtcnBhdGgsIgorLSAgICBlbHNlCistICAgICAgUlBBVEg9Ii1ycGF0aCAiCistICAgIGZpCistICA7OworLSAgKm5ldGJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLVIiCistICAgIGZpCistICA7OworLWVzYWMKKy0KKy0gICAgaWYgdGVzdCAiWCRSUEFUSCIgIT0gIlgiCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iJFJQQVRIJGpkX2ljb252X2xpYnJhcnlfZGlyIgorLSAgICBmaQorLSAgZWxzZQorLSAgICBSUEFUSD0iJFJQQVRIOiRqZF9pY29udl9saWJyYXJ5X2RpciIKKy0gIGZpCistZmkKKy0KKysgICAgICBSUEFUSD0iIgorICAgICBmaQorIAorICAgICBJQ09OVl9JTkM9LUkkamRfaWNvbnZfaW5jbHVkZV9kaXIKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjAwMDFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb20gM2EwNWQxYTkyMDE0MGU5ZjJjNzI3OTFjMTJmNjY0MjEzZmViNDZkZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hbmZyZWQgSGFua2UgPE1hbmZyZWQuSGFua2VAdG5ndGVjaC5jb20+CitEYXRlOiBUaHUsIDIwIEp1biAyMDEzIDEwOjI0OjEyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHNwcmludGYgYnVnIChjb25jZXJuaW5nICVjIGZvciA4LWJpdCBjaGFyYWN0ZXIgaW4gbm9uLVVURjgKKyBtb2RlKSBmaXhlZAorCitjaGFyICpzdHIgcG9pbnRzIHRvIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltdLCB3aGljaCBoYWQgdG9vIHNtYWxsIHNjb3BlCisKK3NyYy90ZXN0L3N0cm9wcy5zbCBmYWlsZWQgaW4gdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudDoKKyAtIGNvbXBpbGVyOiAgZ2NjIChEZWJpYW4gNC43LjItNSkgNC43LjIKKyAtIENGTEFHUzogICAgLWcgLU8yCisgLSBsaWJjOiAgICAgIEdOVSBDIExpYnJhcnkgKERlYmlhbiBFR0xJQkMgMi4xMy0zOCkgc3RhYmxlIHJlbGVhc2UgdmVyc2lvbiAyLjEzCisgLSBrZXJuZWw6ICAgIDMuMi4wLTQtNjg2LXBhZSAjMSBTTVAgRGViaWFuIDMuMi4zOS0yIGk2ODYgR05VL0xpbnV4CistLS0KKyBzcmMvc2xzdHJvcHMuYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zbHN0cm9wcy5jIGIvc3JjL3Nsc3Ryb3BzLmMKK2luZGV4IGNlNmFjYjAuLmNiYmJiMDEgMTAwNjQ0CistLS0gYS9zcmMvc2xzdHJvcHMuYworKysrIGIvc3JjL3Nsc3Ryb3BzLmMKK0BAIC0xODg0LDYgKzE4ODQsNyBAQCBzdGF0aWMgY2hhciAqU0xkb19zcHJpbnRmIChjaGFyICpmbXQpIC8qe3t7Ki8KKyAjZW5kaWYKKyAgICB1bnNpZ25lZCBjaGFyIHVjaDsKKyAgICBpbnQgdXNlX2xvbmcgPSAwLCB1c2VfYWx0X2Zvcm1hdCA9IDA7CisrICAgU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW1NMVVRGOF9NQVhfTUJMRU4rMV07CisgCisgICAgd2hpbGUgKDEpCisgICAgICB7CitAQCAtMjA3MSw3ICsyMDcyLDYgQEAgc3RhdGljIGNoYXIgKlNMZG9fc3ByaW50ZiAoY2hhciAqZm10KSAvKnt7eyovCisgI2VuZGlmCisgCSAgICAgICB7CisgCQkgIFNMd2NoYXJfVHlwZSB3YzsKKy0JCSAgU0x1Y2hhcl9UeXBlIHV0ZjhfYnVmW1NMVVRGOF9NQVhfTUJMRU4rMV07CisgCisgCQkgIGlmICgtMSA9PSBTTGFuZ19wb3Bfd2NoYXIgKCZ3YykpCisgCQkgICAgcmV0dXJuIG91dDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMmY1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZ18yLjIuNC5iYgpAQCAtMCwwICsxLDU0IEBACitTVU1NQVJZID0gIlRoZSBzaGFyZWQgbGlicmFyeSBmb3IgdGhlIFMtTGFuZyBleHRlbnNpb24gbGFuZ3VhZ2UiCisKK0RFU0NSSVBUSU9OID0gIlMtTGFuZyBpcyBhbiBpbnRlcnByZXRlZCBsYW5ndWFnZSBhbmQgYSBwcm9ncmFtbWluZyBsaWJyYXJ5LiAgVGhlIFwKK1MtTGFuZyBsYW5ndWFnZSB3YXMgZGVzaWduZWQgc28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5IGVtYmVkZGVkIGludG8gXAorYSBwcm9ncmFtIHRvIHByb3ZpZGUgdGhlIHByb2dyYW0gd2l0aCBhIHBvd2VyZnVsIGV4dGVuc2lvbiBsYW5ndWFnZS4gXAorVGhlIFMtTGFuZyBsaWJyYXJ5LCBwcm92aWRlZCBpbiB0aGlzIHBhY2thZ2UsIHByb3ZpZGVzIHRoZSBTLUxhbmcgXAorZXh0ZW5zaW9uIGxhbmd1YWdlLiAgUy1MYW5nJ3Mgc3ludGF4IHJlc2VtYmxlcyBDLCB3aGljaCBtYWtlcyBpdCBlYXN5IFwKK3RvIHJlY29kZSBTLUxhbmcgcHJvY2VkdXJlcyBpbiBDIGlmIHlvdSBuZWVkIHRvLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5qZWRzb2Z0Lm9yZy9zbGFuZy8iCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gInBjcmUiCitQUiA9ICJyMTIiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNTJhMThhNDcyZDRmN2U0NTQ3OWIwNjU2MzcxN2MwMiIKKworCitTUkNfVVJJID0gImZ0cDovL3NwYWNlLm1pdC5lZHUvcHViL2RhdmlzL3NsYW5nL3YyLjIvc2xhbmctJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9ycGF0aGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY2hlY2stcGNyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitDTEVBTkJST0tFTiA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2ZjZmQ0NDdlMzc4ZjA3ZGQwYzBiYWU2NzFmZTY0ODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWE4MjU3YTlhMmE1NTA5OWFmODU4YjEzMzM4ZGM4ZjNhMDZkZDIwNjlmNDZmMGRmMmM5YzNiYjg0YTAxZDVkYiIKKworRVhUUkFfT0VDT05GICs9ICIgLS13aXRob3V0LXogLS13aXRob3V0LXBuZyAtLXdpdGhvdXQtb25pZyAtLXgtaW5jbHVkZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvaW5jbHVkZS9YMTEgLS14LWxpYnJhcmllcz0ke1NUQUdJTkdfRElSX0hPU1R9L3Vzci9saWIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgc2xhbmcga2VlcHMgY29uZmlndXJlLmFjIGFuZCByZXN0IG9mIGF1dG9jb25mIGZpbGVzIGluIGF1dG9jb25mLyBkaXJlY3RvcnkKKyAgICAjIHdlIGhhdmUgdG8gZ28gdGhlcmUgdG8gYmUgYWJsZSB0byBydW4gZ251LWNvbmZpZ2l6ZSBjYXVzZSBpdCBleHBlY3RzIGNvbmZpZ3VyZS57aW4sYWN9CisgICAgIyB0byBiZSBwcmVzZW50LiBSZXN1bHRpbmcgZmlsZXMgbGFuZCBpbiBhdXRvY29uZi9hdXRvY29uZi8gc28gd2UgbmVlZCB0byBtb3ZlIHRoZW0uCisgICAgY2QgJHtTfS9hdXRvY29uZiAmJiBnbnUtY29uZmlnaXplIC0tZm9yY2UgJiYgbXYgYXV0b2NvbmYvY29uZmlnLiogLgorICAgIGNkICR7Qn0KK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IC1lICdJTlNUX0xJQl9ESVI9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliJworfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLyAke2RhdGFkaXJ9L3Nsc2gvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L3YyL21vZHVsZXMvLmRlYnVnIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0LTMuMy9maXgtZXJyb3ItcmV0dXJuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzI5OTVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaApAQCAtMCwwICsxLDE2IEBACitUaGlzIHBhdGNoIGZpeGllcyB0aGUgd3JvbmcgcmV0dXJuIGNvZGUgb2Ygc3RhdCAtaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBaaGFuZ2xlIFlhbmcgPHpoYW5nbGUueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gc3RhdC0zLjMvc3RhdC5jLm9yaWcJMjAxMy0wOC0yMiAxMDo0OTo0NS4wMDAwMDAwMDAgKzA4MDAKKysrKyBzdGF0LTMuMy9zdGF0LmMJMjAxMy0wOC0yMiAxMDo1MDozMS4wMDAwMDAwMDAgKzA4MDAKK0BAIC04NDUsNyArODQ1LDcgQEAKKyAgICAgZnByaW50ZihzdGRlcnIsICJcdFx0JSVTIC0gU2VjdXJpdHkgSUQgaW4gU0UtTGludXhcbiIpOworICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0XHQlJUMgLSBTZWN1cml0eSBjb250ZXh0IGluIFNFLUxpbnV4XG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsICJcdFx0JSVkIC0gRnJlZSBmaWxlIG5vZGVzIGluIGZpbGUgc3lzdGVtXG4iKTsKKy0gICAgZXhpdCgxKTsKKysgICAgZXhpdCgwKTsKKyB9CisgICAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdF8zLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxODMxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIGZpbGUgc3RhdHVzIGRpc3BsYXkgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIkRpc3BsYXlzIGFsbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZpbGUgdGhhdCB0aGUgc3RhdCgpIGNhbGwgcHJvdmlkZXMgYW5kIGFsbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZpbGVzeXN0ZW0gdGhhdCBzdGF0ZnMoKSBwcm92aWRlcy4iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT0zOTg4NmIwNzdmZDA3MmU4NzZlNWM0YzE2MzEwYjYzMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaWJpYmxpby5vcmcvcHViL0xpbnV4L3V0aWxzL2ZpbGUvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzN2UyNDdlOGU0MDBhZDkyMDVmMWIwNTAwYjcyOGZkMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MDcxZjAzODRhNDIzYTkzOGRkNTQyYzFmMDg1NDdhMDI4MjRmNjM1OWFjZDNlZjNmOTQ0YjJjNGMyZDFlZTA5IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9ICR7RH0ke21hbmRpcn0vbWFuMQorCWluc3RhbGwgLW0gNzU1IHN0YXQgJHtEfSR7YmFzZV9iaW5kaXJ9L3N0YXQuc3RhdAorCWluc3RhbGwgLW0gNjQ0IHN0YXQuMSAke0R9JHttYW5kaXJ9L21hbjEKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInN0YXQiCitBTFRFUk5BVElWRV9QUklPUklUWVtzdGF0XSA9ICIyMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdF0gPSAiJHtiYXNlX2JpbmRpcn0vc3RhdCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzdGF0XSA9ICIke2Jhc2VfYmluZGlyfS9zdGF0LnN0YXQiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJzdGF0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdC4xXSA9ICIke21hbmRpcn0vbWFuMS9zdGF0LjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjNTk1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3MvZmlsZXMvdGV4aW5mby5wYXRjaApAQCAtMCwwICsxLDc5IEBACistLS0gYS9kb2Mvc3RyZXNzLnRleGkKKysrKyBiL2RvYy9zdHJlc3MudGV4aQorQEAgLTYyLDQ3ICs2Miw0NyBAQAorIAorIEB0YWJsZSBAc2FtcAorIEBpdGVtIC0/CistQGl0ZW14IC0taGVscAorK0BpdGVtIC0taGVscAorIFNob3cgaGVscCBpbmZvcm1hdGlvbi4KKyAKKy1AaXRlbXggLS12ZXJzaW9uCisrQGl0ZW0gLS12ZXJzaW9uCisgU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorIAorIEBpdGVtIC12CistQGl0ZW14IC0tdmVyYm9zZQorK0BpdGVtIC0tdmVyYm9zZQorIFR1cm4gdXAgdmVyYm9zaXR5LgorIAorIEBpdGVtIC1xCistQGl0ZW14IC0tcXVpZXQKKytAaXRlbSAtLXF1aWV0CisgVHVybiBkb3duIHZlcmJvc2l0eS4KKyAKKyBAaXRlbSAtbgorLUBpdGVteCAtLWRyeS1ydW4KKytAaXRlbSAtLWRyeS1ydW4KKyBTaG93IHdoYXQgd291bGQgaGF2ZSBiZWVuIGRvbmUuCisgCisgQGl0ZW0gLXQgQHZhcntzZWNzfQorLUBpdGVteCAtLXRpbWVvdXQgQHZhcntzZWNzfQorK0BpdGVtIC0tdGltZW91dCBAdmFye3NlY3N9CisgVGltZSBvdXQgYWZ0ZXIgQHZhcntzZWNzfSBzZWNvbmRzLgorIAorLUBpdGVteCAtLWJhY2tvZmYgQHZhcnt1c2Vjc30KKytAaXRlbSAtLWJhY2tvZmYgQHZhcnt1c2Vjc30KKyBXYWl0IGZvciBmYWN0b3Igb2YgQHZhcnt1c2Vjc30gbWljcm9zZWNvbmRzIGJlZm9yZSBzdGFydGluZyB3b3JrLgorIAorIEBpdGVtIC1jIEB2YXJ7Zm9ya3N9CistQGl0ZW14IC0tY3B1IEB2YXJ7Zm9ya3N9CisrQGl0ZW0gLS1jcHUgQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHtzcXJ0KCl9LgorIAorIEBpdGVtIC1pIEB2YXJ7Zm9ya3N9CistQGl0ZW14IC0taW8gQHZhcntmb3Jrc30KKytAaXRlbSAtLWlvIEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7c3luYygpfS4KKyAKKyBAaXRlbSAtbSBAdmFye2ZvcmtzfQorLUBpdGVteCAtLXZtIEB2YXJ7Zm9ya3N9CisrQGl0ZW0gLS12bSBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we21hbGxvYygpfS4KKyAKKy1AaXRlbXggLS12bS1ieXRlcyBAdmFye2J5dGVzfQorK0BpdGVtIC0tdm0tYnl0ZXMgQHZhcntieXRlc30KKyBBbGxvY2F0ZSBAdmFye2J5dGVzfSBudW1iZXIgb2YgYnl0ZXMuICBUaGUgZGVmYXVsdCBpcyAxLgorIAorLUBpdGVteCAtLXZtLWhhbmcKKytAaXRlbSAtLXZtLWhhbmcKKyBJbnN0cnVjdCBlYWNoIHZtIGhvZyBwcm9jZXNzIHRvIGdvIHRvIHNsZWVwIGFmdGVyIGFsbG9jYXRpbmcgbWVtb3J5LiAgVGhpcworIGNvbnRyYXN0cyB3aXRoIHRoZWlyIG5vcm1hbCBiZWhhdmlvciwgd2hpY2ggaXMgdG8gZnJlZSB0aGUgbWVtb3J5IGFuZAorIHJlYWxsb2NhdGUgQGVtcGh7YWQgaW5maW5pdHVtfS4gIFRoaXMgaXMgdXNlZnVsIGZvciBzaW11bGF0aW5nIGxvdyBtZW1vcnkKK0BAIC0xMTQsMTMgKzExNCwxMyBAQAorIEBlbmQgZXhhbXBsZQorIAorIEBpdGVtIC1kIEB2YXJ7Zm9ya3N9CistQGl0ZW14IC0taGRkIEB2YXJ7Zm9ya3N9CisrQGl0ZW0gLS1oZGQgQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHt3cml0ZSgpfS4KKyAKKy1AaXRlbXggLS1oZGQtYnl0ZXMgQHZhcntieXRlc30KKytAaXRlbSAtLWhkZC1ieXRlcyBAdmFye2J5dGVzfQorIFdyaXRlIEB2YXJ7Ynl0ZXN9IG51bWJlciBvZiBieXRlcy4gIFRoZSBkZWZhdWx0IGlzIDFHQi4KKyAKKy1AaXRlbXggLS1oZGQtbm9jbGVhbgorK0BpdGVtIC0taGRkLW5vY2xlYW4KKyBEbyBub3QgdW5saW5rIGZpbGUocykgdG8gd2hpY2ggcmFuZG9tIEFTQ0lJIGRhdGEgaXMgd3JpdHRlbi4KKyAKKyBAZW5kIHRhYmxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL3N0cmVzc18xLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdHJlc3Mvc3RyZXNzXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiN2U0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL3N0cmVzc18xLjAuNC5iYgpAQCAtMCwwICsxLDE0IEBACitERVNDUklQVElPTiA9ICJEZWxpYmVyYXRlbHkgc2ltcGxlIHdvcmtsb2FkIGdlbmVyYXRvciBmb3IgUE9TSVggc3lzdGVtcy4gSXQgXAoraW1wb3NlcyBhIGNvbmZpZ3VyYWJsZSBhbW91bnQgb2YgQ1BVLCBtZW1vcnksIEkvTywgYW5kIGRpc2sgc3RyZXNzIG9uIHRoZSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3Blb3BsZS5zZWFzLmhhcnZhcmQuZWR1L35hcHcvc3RyZXNzLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworU1JDX1VSSSA9ICJodHRwOi8vcGVvcGxlLnNlYXMuaGFydmFyZC5lZHUvfmFwdy8ke0JQTn0vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RleGluZm8ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4OTBhNDIzNmRkMTY1Njc5MmYzZWY5YTE5MGNmOTllZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNTdlNGZjMmE3NzA2NDExZTEwMTRiZjE3MmU0Zjk0YjYzYTEyZjE4NDEyMzc4ZmNhODY4NGNhOTI0MDg4MjViIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vZmlsZXMvc3Vkby5wYW0gYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9maWxlcy9zdWRvLnBhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMyNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vZmlsZXMvc3Vkby5wYW0KQEAgLTAsMCArMSw2IEBACisjJVBBTS0xLjAKK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIGluY2x1ZGUgICAgICBjb21tb24tYWNjb3VudAorcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fa2V5aW5pdC5zbyByZXZva2UKK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV9saW1pdHMuc28KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8uaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ODc2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8uaW5jCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiUHJvdmlkZSBsaW1pdGVkIHN1cGVyIHVzZXIgcHJpdmlsZWdlcyB0byBzcGVjaWZpYyB1c2VycyIKK0RFU0NSSVBUSU9OID0gIlN1ZG8gKHN1cGVydXNlciBkbykgYWxsb3dzIGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gZ2l2ZSBjZXJ0YWluIHVzZXJzIChvciBncm91cHMgb2YgdXNlcnMpIHRoZSBhYmlsaXR5IHRvIHJ1biBzb21lIChvciBhbGwpIGNvbW1hbmRzIGFzIHJvb3Qgd2hpbGUgbG9nZ2luZyBhbGwgY29tbWFuZHMgYW5kIGFyZ3VtZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnN1ZG8ud3MiCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cuc3Vkby53cy9idWdzLyIKK1NFQ1RJT04gPSAiYWRtaW4iCitMSUNFTlNFID0gIklTQyAmIEJTRCAmIFpsaWIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2MvTElDRU5TRTttZDU9YzE2ZTU0MjQwOGFiZGEwMTNkNjcyYmU4ZWI4OGQxNzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGx1Z2lucy9zdWRvZXJzL3JlZGJsYWNrLmM7YmVnaW5saW5lPTE7ZW5kbGluZT00MTttZDU9Y2ZlNDExMTJmOTZjMTlhMDc0OTM0ZDEyOGY0NWM2OTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvcmVhbGxvY2FycmF5LmM7YmVnaW5saW5lPTM7ZW5kbGluZT0xNjttZDU9ODViMDkwNWI3OTVkNGQ1OGJmMmUwMDYzNTY0OWVlYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvZm5tYXRjaC5jO2JlZ2lubGluZT0zO2VuZGxpbmU9Mjc7bWQ1PTY3ZjgzZWU5YmQ0NTY1NTczOTcwODJmOGYxYmUwZWZkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL2dldGN3ZC5jO2JlZ2lubGluZT01O2VuZGxpbmU9Mjc7bWQ1PTQ0OWFmNGNjNTdmYzdkNDZmNDIwOTA2MDhiYTNlNjgxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL2dsb2IuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTMxO21kNT01ODcyNzMzMTQ2YjllYjBkZWI3OWUxZjY2NDgxNWI4NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9zbnByaW50Zi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MzQ7bWQ1PWM4MmMxYjNhNWMzMmUwODU0NWM5ZWM1ZDcxZTQxZTUwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvc3Vkb19xdWV1ZS5oO2JlZ2lubGluZT01O2VuZGxpbmU9Mjc7bWQ1PTQ0OWFmNGNjNTdmYzdkNDZmNDIwOTA2MDhiYTNlNjgxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL2luZXRfcHRvbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MTc7bWQ1PTM5NzBhYjA1MThhYjc5Y2JkMGJhZmI2OTdmMTBiMzNhIgorCitpbmhlcml0IGF1dG90b29scworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLWVuYWJsZS16bGliLC0tZGlzYWJsZS16bGliLHpsaWIiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N1ZG9lcnMiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZWRpdG9yPS9iaW4vdmkgLS13aXRoLWVudi1lZGl0b3IiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy1tdXNsID0gIiAtLWRpc2FibGUtaGFyZGVuaW5nICIKKworIyBta3NpZ25hbWUvbWtzaWdsaXN0IGFyZSB1c2VkIG9uIGJ1aWxkIGhvc3QgdG8gZ2VuZXJhdGUgc291cmNlIGZpbGVzCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCW9lX3J1bm1ha2UgU1NQX0NGTEFHUz0iIiBTU1BfTERGTEFHUz0iIiBDQz0iJEJVSUxEX0NDIiBDRkxBR1M9IiRCVUlMRF9DRkxBR1MiIENQUEZMQUdTPSIkQlVJTERfQ1BQRkxBR1MgLUkke1N9L2luY2x1ZGUgLUkke1N9IC1JJHtCfSIgIC1DIGxpYi91dGlsIG1rc2lnbmFtZSBta3NpZ2xpc3QKK30KKworIyBFeHBsaWNpdGx5IGNyZWF0ZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYiBiZWZvcmUgZG9faW5zdGFsbCB0byBlbnN1cmUKKyMgdGhlIGRpcmVjdG9yeSBpcyBhY2Nlc3NpYmxlIGJ5IGFsbCB1c2Vycy4gT3RoZXJ3aXNlIHRoZSBta2luc3RhbGxkaXJzCisjIHNjcmlwdCAoZnJvbSBzdWRvKSB3aWxsIHJlY3Vyc2l2ZWx5IGNyZWF0ZSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9zdWRvCisjIGFuZCB0aGVuIGNobW9kIGVhY2ggZGlyZWN0b3J5IHdpdGggMDcwMCBwZXJtaXNzaW9ucywgd2hpY2ggaXNuJ3Qgd2hhdAorIyB3ZSB3YW50IChpLmUsIHVzZXJzIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyAvdmFyL2xpYikuCitkb19pbnN0YWxsX3ByZXBlbmQgKCl7CisJbWtkaXIgLXAgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xpYgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLUluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWlkX3QtZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzNmNkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAzODZlMmMyZmEyYWIyZTAyZWY3MWMyNjhhNTcyMDUxMzliZTMyOWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMDc6MDc6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgaWRfdCBkZWZpbml0aW9uCisKKy9zdWRvX3V0aWwuaDoyMTk6MTQ6IGVycm9yOiB1bmtub3duIHR5cGUgbmFtZSAnaWRfdCcKKyBfX2Rzb19wdWJsaWMgaWRfdCBzdWRvX3N0cnRvaWRfdjEoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpzZXAsCisgY2hhciAqKmVuZHAsIGNvbnN0IGNoYXIgKiplcnJzdHIpOworICAgICAgICAgICAgICAgXgorCSAgICAgICBtYWtlWzFdOiAqKiogW3ByZXNlcnZlX2Zkcy5vXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgaW5jbHVkZS9zdWRvX3V0aWwuaCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9pbmNsdWRlL3N1ZG9fdXRpbC5oIGIvaW5jbHVkZS9zdWRvX3V0aWwuaAoraW5kZXggODljOWY4OS4uYWMwODU1YSAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvc3Vkb191dGlsLmgKKysrKyBiL2luY2x1ZGUvc3Vkb191dGlsLmgKK0BAIC0xNyw2ICsxNyw4IEBACisgI2lmbmRlZiBTVURPX1VUSUxfSAorICNkZWZpbmUgU1VET19VVElMX0gKKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisgI2lmZGVmIEhBVkVfU1REQk9PTF9ICisgIyBpbmNsdWRlIDxzdGRib29sLmg+CisgI2Vsc2UKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MTg2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtVXNlLWNvcnJlY3QtcGF0aC10by1pbml0LmQtYW5kLXRtcGZpbGVzLmQtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVGhlIG1ha2VmaWxlIHVzZXMgdG9wX3NyY2RpciB0byBmaW5kIGZpbGVzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IGNvbmZpZ3VyZSwgd2hlbgoraXQgc2hvdWxkIHVzZSB0b3BfYnVpbGRkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwOi8vYnVnemlsbGEuc3Vkby53cy9zaG93X2J1Zy5jZ2k/aWQ9NzA4KQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tCisgc3JjL01ha2VmaWxlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgoraW5kZXggZjAwOWUxMC4uN2FjZmIyZCAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5pbgorKysrIGIvc3JjL01ha2VmaWxlLmluCitAQCAtMTY1LDExICsxNjUsMTEgQEAgaW5zdGFsbC1kaXJzOgorIAorIGluc3RhbGwtcmM6IGluc3RhbGwtZGlycworIAlpZiBbIC1uICIkKElOSVRfU0NSSVBUKSIgXTsgdGhlbiBcCistCSAgICAkKElOU1RBTEwpICQoSU5TVEFMTF9PV05FUikgLW0gMDc1NSAkKHRvcF9zcmNkaXIpL2luaXQuZC8kKElOSVRfU0NSSVBUKSAkKERFU1RESVIpJChJTklUX0RJUikvc3VkbzsgXAorKwkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA3NTUgJCh0b3BfYnVpbGRkaXIpL2luaXQuZC8kKElOSVRfU0NSSVBUKSAkKERFU1RESVIpJChJTklUX0RJUikvc3VkbzsgXAorIAkgICAgcm0gLWYgJChERVNURElSKSQoUkNfTElOSyk7IFwKKyAJICAgIGxuIC1zICQoSU5JVF9ESVIpL3N1ZG8gJChERVNURElSKSQoUkNfTElOSyk7IFwKKyAJZWxpZiB0ZXN0IC1uICIkKHRtcGZpbGVzX2QpIjsgdGhlbiBcCistCSAgICAkKElOU1RBTEwpICQoSU5TVEFMTF9PV05FUikgLW0gMDY0NCAkKHRvcF9zcmNkaXIpL2luaXQuZC9zdWRvLmNvbmYgJChERVNURElSKSQodG1wZmlsZXNfZCkvc3Vkby5jb25mOyBcCisrCSAgICAkKElOU1RBTEwpICQoSU5TVEFMTF9PV05FUikgLW0gMDY0NCAkKHRvcF9idWlsZGRpcikvaW5pdC5kL3N1ZG8uY29uZiAkKERFU1RESVIpJCh0bXBmaWxlc19kKS9zdWRvLmNvbmY7IFwKKyAJZmkKKyAKKyBpbnN0YWxsLWJpbmFyaWVzOiBpbnN0YWxsLWRpcnMgJChQUk9HUykKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkb18xLjguMTRwMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzY2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIKQEAgLTAsMCArMSwzNiBAQAorcmVxdWlyZSBzdWRvLmluYworCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuc3Vkby53cy9zdWRvL2Rpc3Qvc3Vkby0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtc3lzLXR5cGVzLmgtZm9yLWlkX3QtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgICIKKworUEFNX1NSQ19VUkkgPSAiZmlsZTovL3N1ZG8ucGFtIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTNkYmQxZTQ3YzEzNjE3OWZmMWIwMTQ5NGMxYzBlNzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYThhNjk3Y2JiMTEzODU5MDU4OTQ0ODUwZDA5ODQ2NDYxODI1NDgwNGNmOTc5NjFkZWU5MjY0MjlmMDBhMTIzNyIKKworREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfSArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4tbGltaXRzIHBhbS1wbHVnaW4ta2V5aW5pdCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAgICAgICAgICBhY19jdl90eXBlX3JzaXplX3Q9bm8gXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0td2l0aC1wYW0nLCAnLS13aXRob3V0LXBhbScsIGQpfSBcCisgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJy0tZW5hYmxlLXRtcGZpbGVzLmQ9JHtsaWJkaXJ9L3RtcGZpbGVzLmQnLCAnLS1kaXNhYmxlLXRtcGZpbGVzLmQnLCBkKX0gXAorICAgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDY2NCAke1dPUktESVJ9L3N1ZG8ucGFtICR7RH0vJHtzeXNjb25mZGlyfS9wYW0uZC9zdWRvCisJZmkKKworCWNobW9kIDQxMTEgJHtEfSR7YmluZGlyfS9zdWRvCisJY2htb2QgMDQ0MCAke0R9JHtzeXNjb25mZGlyfS9zdWRvZXJzCisKKwkjIEV4cGxpY2l0bHkgcmVtb3ZlIHRoZSAke2xvY2Fsc3RhdGVkaXJ9L3J1biBkaXJlY3RvcnkgdG8gYXZvaWQgUUEgZXJyb3IKKwlybWRpciAtcCAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4vc3VkbworfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3RtcGZpbGVzLmQiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vJHtCUE59LyoubGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tc3RyaXAtaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby1zdHJpcC1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZmJhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tc3RyaXAtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBzeXNrbG9nZC0xLjUvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNrbG9nZC0xLjUub3JpZy9NYWtlZmlsZQkyMDA5LTA2LTA5IDEzOjAyOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIHN5c2tsb2dkLTEuNS9NYWtlZmlsZQkyMDA5LTA2LTA5IDEzOjAzOjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyNyw4ICsxMjcsOCBAQAorIAlybSAtZiBzeXNsb2dkIGtsb2dkIGtzeW0gc3lzbG9nX3RzdCBvb3BzX3Rlc3QgVEFHUyB0c3lzbG9nZCB0a2xvZ2QKKyAKKyBpbnN0YWxsX2V4ZWM6IHN5c2xvZ2Qga2xvZ2QKKy0JJHtJTlNUQUxMfSAtbSA1MDAgLXMgc3lzbG9nZCAke0JJTkRJUn0vc3lzbG9nZAorLQkke0lOU1RBTEx9IC1tIDUwMCAtcyBrbG9nZCAke0JJTkRJUn0va2xvZ2QKKysJJHtJTlNUQUxMfSAtbSA1MDAgc3lzbG9nZCAke0JJTkRJUn0vc3lzbG9nZAorKwkke0lOU1RBTEx9IC1tIDUwMCBrbG9nZCAke0JJTkRJUn0va2xvZ2QKKyAKKyBpbnN0YWxsX21hbjoKKyAJJHtJTlNUQUxMfSAtbSAke01BTl9QRVJNU30gc3lza2xvZ2QuOCAke01BTkRJUn0vbWFuOC9zeXNrbG9nZC44CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tdmVjdG9yaXphdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9uby12ZWN0b3JpemF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2MwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tdmVjdG9yaXphdGlvbi5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworVGhlIGNvbXBpbGVyIHNob3VsZCBub3QgYmUgZ2VuZXJhdGluZyB2ZWN0b3JpemVkIGluc3RydWN0aW9ucyBvbiB0aGlzIHRhcmdldC4KK1RoaXMgaXMgYSB3b3JrIGFyb3VuZCB1bnRpbCBJIGNhbiBkZXRlcm1pbmUgd2h5IHRoaXMgaXMgb2NjdXJpbmcgb24gdGhpcworcGFydGljdWxhciByZWNpcGUKKworSW5kZXg6IHN5c2tsb2dkLTEuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2tsb2dkLTEuNS5vcmlnL01ha2VmaWxlCisrKysgc3lza2xvZ2QtMS41L01ha2VmaWxlCitAQCAtMjAsNyArMjAsOCBAQAorIENDPSBnY2MKKyAjU0tGTEFHUz0gLWcgLURTWVNWIC1XYWxsCisgI0xERkxBR1M9IC1nCistU0tGTEFHUz0gJChSUE1fT1BUX0ZMQUdTKSAtTzMgLURTWVNWIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1mbm8tc3RyZW5ndGgtcmVkdWNlCisrU0tGTEFHUz0gJChSUE1fT1BUX0ZMQUdTKSAtTzMgLURTWVNWIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1mbm8tc3RyZW5ndGgtcmVkdWNlIFwKKysJLWZuby10cmVlLXZlY3Rvcml6ZQorICMgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEVfU09VUkNFCisgIyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1EX0xBUkdFRklMRTY0X1NPVVJDRQorICMgJChzaGVsbCBnZXRjb25mIExGU19TS0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1OGY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lza2xvZ2QKQEAgLTAsMCArMSwxNTEgQEAKKyMhIC9iaW4vc2gKKyMgL2V0Yy9pbml0LmQvc3lza2xvZ2Q6IHN0YXJ0IHRoZSBzeXN0ZW0gbG9nIGRhZW1vbi4KKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgc3lza2xvZ2QKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICRyZW1vdGVfZnMgJHRpbWUKKyMgUmVxdWlyZWQtU3RvcDogICAgICAgICRyZW1vdGVfZnMgJHRpbWUKKyMgU2hvdWxkLVN0YXJ0OiAgICAgICAgICRuZXR3b3JrCisjIFNob3VsZC1TdG9wOiAgICAgICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246ICAgIFN5c3RlbSBsb2dnZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluCisKK3BpZGZpbGVfc3lzbG9nZD0vdmFyL3J1bi9zeXNsb2dkLnBpZAorcGlkZmlsZV9rbG9nZD0vdmFyL3J1bi9rbG9nZC5waWQKK2JpbnBhdGhfc3lzbG9nZD0vc2Jpbi9zeXNsb2dkCitiaW5wYXRoX2tsb2dkPS9zYmluL2tsb2dkCisKK3Rlc3QgLXggJGJpbnBhdGggfHwgZXhpdCAwCisKK3Rlc3QgISAtciAvZXRjL2RlZmF1bHQvc3lzbG9nZCB8fCAuIC9ldGMvZGVmYXVsdC9zeXNsb2dkCisKK2NyZWF0ZV94Y29uc29sZSgpCit7CisgICAgIyBPbmx5IHByb2NlZWQgaWYgL2Rldi94Y29uc29sZSBpcyB1c2VkIGF0IGFsbAorICAgIGlmICEgZ3JlcCAtcSAnXlteI10uKi9kZXYveGNvbnNvbGUnIC9ldGMvc3lzbG9nLmNvbmYKKyAgICB0aGVuCisJcmV0dXJuCisgICAgZmkKKworICAgIGlmIFsgISAtZSAvZGV2L3hjb25zb2xlIF07IHRoZW4KKwlta25vZCAtbSA2NDAgL2Rldi94Y29uc29sZSBwCisgICAgZWxzZQorCWNobW9kIDA2NDAgL2Rldi94Y29uc29sZQorICAgIGZpCisgICAgY2hvd24gcm9vdDphZG0gL2Rldi94Y29uc29sZQorICAgIHRlc3QgISAteCAvc2Jpbi9yZXN0b3JlY29uIHx8IC9zYmluL3Jlc3RvcmVjb24gL2Rldi94Y29uc29sZQorfQorCitsb2dfYmVnaW5fbXNnICgpIHsKKyAgICBlY2hvIC1uICQxCit9CisKK2xvZ19lbmRfbXNnICgpIHsKKyAgICBlY2hvICQxCit9CisKK2xvZ19zdWNjZXNzX21zZyAoKSB7CisgICAgZWNobyAkMQorfQorCitydW5uaW5nKCkKK3sKKyAgICAjIE5vIHBpZGZpbGUsIHByb2JhYmx5IG5vIGRhZW1vbiBwcmVzZW50CisgICAgIworICAgIGlmIFsgISAtZiAkcGlkZmlsZSBdCisgICAgdGhlbgorCXJldHVybiAxCisgICAgZmkKKworICAgIHBpZD1gY2F0ICRwaWRmaWxlX3N5c2xvZ2RgCisKKyAgICAjIE5vIHBpZCwgcHJvYmFibHkgbm8gZGFlbW9uIHByZXNlbnQKKyAgICAjCisgICAgaWYgWyAteiAiJHBpZCIgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBpZiBbICEgLWQgL3Byb2MvJHBpZCBdCisgICAgdGhlbgorCXJldHVybiAxCisgICAgZmkKKworICAgIGNtZD1gY2F0IC9wcm9jLyRwaWQvY21kbGluZSB8IHRyICJcMDAwIiAiXG4ifGhlYWQgLW4gMWAKKworICAgICMgTm8gc3lzbG9nZD8KKyAgICAjCisgICAgaWYgWyAiJGNtZCIgIT0gIiRiaW5wYXRoIiBdCisgICAgdGhlbgorCXJldHVybiAxCisgICAgZmkKKworICAgIHJldHVybiAwCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICBsb2dfYmVnaW5fbXNnICJTdGFydGluZyBzeXN0ZW0gbG9nIGRhZW1vbi4uLiIKKyAgICBjcmVhdGVfeGNvbnNvbGUKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX3N5c2xvZ2QgLS0gJFNZU0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIGxvZ19iZWdpbl9tc2cgIlN0YXJ0aW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QgLS1uYW1lIGtsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9rbG9nZCAtLSAkS0xPR0QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIDs7CisgIHN0b3ApCisgICAgbG9nX2JlZ2luX21zZyAiU3RvcHBpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX3N5c2xvZ2QgLS1uYW1lIHN5c2xvZ2QKKyAgICBsb2dfZW5kX21zZyAkPworICAgIGxvZ19iZWdpbl9tc2cgIlN0b3BwaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICByZWxvYWR8Zm9yY2UtcmVsb2FkKQorICAgIGxvZ19iZWdpbl9tc2cgIlJlbG9hZGluZyBzeXN0ZW0gbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXNpZ25hbCAxIC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkCisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJSZWxvYWRpbmcga2VybmVsIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1yZXRyeSAzIC0tZXhlYyAkYmlucGF0aF9rbG9nZCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkIC0tbmFtZSBrbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfa2xvZ2QgLS0gJEtMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICByZXN0YXJ0KQorICAgIGxvZ19iZWdpbl9tc2cgIlJlc3RhcnRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcmV0cnkgNSAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9zeXNsb2dkIC0tICRTWVNMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJSZWxvYWRpbmcga2VybmVsIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1yZXRyeSAzIC0tZXhlYyAkYmlucGF0aF9rbG9nZCAtLXBpZGZpbGUgJHBpZGZpbGVfa2xvZ2QKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkIC0tbmFtZSBrbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfa2xvZ2QgLS0gJEtMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICByZWxvYWQtb3ItcmVzdGFydCkKKyAgICBpZiBydW5uaW5nCisgICAgdGhlbgorCSQwIHJlbG9hZAorICAgIGVsc2UKKwkkMCBzdGFydAorICAgIGZpCisgICAgOzsKKyAgc3RhdHVzKQorICAgIHN0YXR1cyBzeXNsb2dkCisgICAgUkVUVkFMPSQ/CisgICAgc3RhdHVzIGtsb2dkCisgICAgcnZhbD0kPworICAgIFsgJFJFVFZBTCAtZXEgMCBdICYmIGV4aXQgJHJ2YWwKKyAgICBleGl0ICRSRVRWQUwKKyAgICA7OworICAqKQorICAgIGxvZ19zdWNjZXNzX21zZyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3N5c2tsb2dkIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxyZWxvYWQtb3ItcmVzdGFydHxzdGF0dXN9IgorICAgIGV4aXQgMQorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQ5ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2xvZy5jb25mCkBAIC0wLDAgKzEsNzEgQEAKKyMgIC9ldGMvc3lzbG9nLmNvbmYJQ29uZmlndXJhdGlvbiBmaWxlIGZvciBzeXNsb2dkLgorIworIyAgUG9ydGVkIGZyb20gZGViaWFuIGJ5IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisjCisKKyMKKyMgRmlyc3Qgc29tZSBzdGFuZGFyZCBsb2dmaWxlcy4gIExvZyBieSBmYWNpbGl0eS4KKyMKKworYXV0aCxhdXRocHJpdi4qCQkJL3Zhci9sb2cvYXV0aC5sb2cKKyouKjthdXRoLGF1dGhwcml2Lm5vbmUJCS0vdmFyL2xvZy9zeXNsb2cKKyNjcm9uLioJCQkJL3Zhci9sb2cvY3Jvbi5sb2cKK2RhZW1vbi4qCQkJLS92YXIvbG9nL2RhZW1vbi5sb2cKK2tlcm4uKgkJCQktL3Zhci9sb2cva2Vybi5sb2cKK2xwci4qCQkJCS0vdmFyL2xvZy9scHIubG9nCittYWlsLioJCQkJLS92YXIvbG9nL21haWwubG9nCit1c2VyLioJCQkJLS92YXIvbG9nL3VzZXIubG9nCisKKyMKKyMgTG9nZ2luZyBmb3IgdGhlIG1haWwgc3lzdGVtLiAgU3BsaXQgaXQgdXAgc28gdGhhdAorIyBpdCBpcyBlYXN5IHRvIHdyaXRlIHNjcmlwdHMgdG8gcGFyc2UgdGhlc2UgZmlsZXMuCisjCittYWlsLmluZm8JCQktL3Zhci9sb2cvbWFpbC5pbmZvCittYWlsLndhcm4JCQktL3Zhci9sb2cvbWFpbC53YXJuCittYWlsLmVycgkJCS92YXIvbG9nL21haWwuZXJyCisKKyMgTG9nZ2luZyBmb3IgSU5OIG5ld3Mgc3lzdGVtCisjCituZXdzLmNyaXQJCQkvdmFyL2xvZy9uZXdzLmNyaXQKK25ld3MuZXJyCQkJL3Zhci9sb2cvbmV3cy5lcnIKK25ld3Mubm90aWNlCQkJLS92YXIvbG9nL25ld3Mubm90aWNlCisKKyMKKyMgU29tZSBgY2F0Y2gtYWxsJyBsb2dmaWxlcy4KKyMKKyouPWRlYnVnO1wKK2F1dGgsYXV0aHByaXYubm9uZTtcCituZXdzLm5vbmU7bWFpbC5ub25lCS0vdmFyL2xvZy9kZWJ1ZworCisqLj1pbmZvOyouPW5vdGljZTsqLj13YXJuO1wKK2F1dGgsYXV0aHByaXYubm9uZTtcCitjcm9uLGRhZW1vbi5ub25lO1wKK21haWwsbmV3cy5ub25lCQktL3Zhci9sb2cvbWVzc2FnZXMKKworIworIyBFbWVyZ2VuY2llcyBhcmUgc2VudCB0byBldmVyeWJvZHkgbG9nZ2VkIGluLgorIworKi5lbWVyZwkJCQkqCisKKyMKKyMgSSBsaWtlIHRvIGhhdmUgbWVzc2FnZXMgZGlzcGxheWVkIG9uIHRoZSBjb25zb2xlLCBidXQgb25seSBvbiBhIHZpcnR1YWwKKyMgY29uc29sZSBJIHVzdWFsbHkgbGVhdmUgaWRsZS4KKyMKKyNkYWVtb24sbWFpbC4qO1wKKyNuZXdzLj1jcml0O25ld3MuPWVycjtuZXdzLj1ub3RpY2U7XAorIyouPWRlYnVnOyouPWluZm87XAorIyouPW5vdGljZTsqLj13YXJuCS9kZXYvdHR5OAorCisjIFRoZSBuYW1lZCBwaXBlIC9kZXYveGNvbnNvbGUgaXMgZm9yIHRoZSBgeGNvbnNvbGUnIHV0aWxpdHkuICBUbyB1c2UgaXQsCisjIHlvdSBtdXN0IGludm9rZSBgeGNvbnNvbGUnIHdpdGggdGhlIGAtZmlsZScgb3B0aW9uOgorIworIyAgICAkIHhjb25zb2xlIC1maWxlIC9kZXYveGNvbnNvbGUgWy4uLl0KKyMKKyMgTk9URTogYWRqdXN0IHRoZSBsaXN0IGJlbG93LCBvciB5b3UnbGwgZ28gY3JhenkgaWYgeW91IGhhdmUgYSByZWFzb25hYmx5CisjICAgICAgYnVzeSBzaXRlLi4KKyMKK2RhZW1vbi4qO21haWwuKjtcCituZXdzLmVycjtcCisqLj1kZWJ1ZzsqLj1pbmZvO1wKKyouPW5vdGljZTsqLj13YXJuCXwvZGV2L3hjb25zb2xlCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjhhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiU3lzdGVtIExvZyBEYWVtb25zIgorREVTQ1JJUFRJT04gPSAiVGhlIHN5c2tsb2dkIHBhY2thZ2UgaW1wbGVtZW50cyB0d28gc3lzdGVtIGxvZyBkYWVtb25zOiBzeXNsb2dkLCBrbG9nZCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mb2Ryb20ub3JnL3Byb2plY3RzL3N5c2tsb2dkLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisgJiBCU0QiCitMSUNFTlNFX3N5c2xvZ2QgPSAiQlNEIgorTElDRU5TRV9rbG9nZCA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zeXNsb2dkLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xNTttZDU9NzdmZmIyZmVjNDhjNDZkN2NhMGFiYjJkNTgxM2U3ZmQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8va2xvZ2QuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTE5O21kNT03ZTg3ZWQwYWU2MTQyZGUwNzliY2U3MzhjMTBjODk5ZCBcCisgICAgICAgICAgICAgICAgICAgIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmluZm9kcm9tLm9yZy9wcm9qZWN0cy9zeXNrbG9nZC9kb3dubG9hZC9zeXNrbG9nZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tc3RyaXAtaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNrbG9nZCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNsb2cuY29uZiBcCisgICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfZTUwMHYyID0gIiBmaWxlOi8vbm8tdmVjdG9yaXphdGlvbi5wYXRjaCIKKworSU5JVFNDUklQVF9OQU1FID0gInN5c2xvZyIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mLiR7QlBOfSIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLURTWVNWIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCBcCisJCQkke0R9JHttYW5kaXJ9L21hbjUgXAorCQkJJHtEfSR7YmFzZV9zYmluZGlyfQorCW9lX3J1bm1ha2UgJ0JJTkRJUj0ke0R9JHtiYXNlX3NiaW5kaXJ9JyBcCisJCQknTUFORElSPSR7RH0ke21hbmRpcn0nIGluc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9zeXNsb2cuY29uZiAke0R9JHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZgorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS9zeXNrbG9nZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nCit9CisKKyMgc3lza2xvZ2QgcGFja2FnZSBoYXMgbm8gaW50ZXJuYWwgc3lzdGVtZCBzdXBwb3J0LCBzbyB3ZSB3ZWlnaCBidXN5Ym94J3MKKyMgc3lza2xvZ2QgdXRpbGl0eSBvdmVyIGl0IGluIGNhc2Ugb2Ygc3lzdGVtZAorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCcxMCcsJzEwMCcsZCl9IgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzeXNsb2dkIGtsb2dkIHN5c2xvZy1pbml0IHN5c2xvZy1jb25mIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N5c2xvZ2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2xvZ2RdID0gIiR7YmFzZV9zYmluZGlyfS9rbG9nZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctaW5pdF0gPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZy1jb25mXSA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mIgorCitwa2dfcHJlcm1fJHtQTn0gKCkgeworCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KKwlpZiB0ZXN0ICIkMSIgPSAidXBncmFkZSIgLW8gIiQxIiA9ICJyZW1vdmUiOyB0aGVuCisJCS9ldGMvaW5pdC5kL3N5c2xvZyBzdG9wCisJZmkKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWVjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2RfMS41LjEuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHN5c2tsb2dkLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYzcwNTk5YWIwZDAzN2ZkZTcyNGY3MjEwYzJjOGQ3ZjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE2NmMxODVhZTIzYzkyZThiOWZlZWU2NmE2ZTNkMGJjOTQ0YmY2NzMxMTJmNTNlM2VjZjYyZTA4Y2U3YzIwMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NjFmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIHBlcmZvcm1hbmNlIHRvb2xzIgorREVTQ1JJUFRJT04gPSAiVGhlIHN5c3N0YXQgdXRpbGl0aWVzIGFyZSBhIGNvbGxlY3Rpb24gb2YgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB0b29scyBmb3IgTGludXguIgorSE9NRVBBR0UgPSAiaHR0cDovL3NlYmFzdGllbi5nb2RhcmQucGFnZXNwZXJzby1vcmFuZ2UuZnIvIgorTElDRU5TRSA9ICJHUEx2MisiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BhZ2VzcGVyc28tb3JhbmdlLmZyL3NlYmFzdGllbi5nb2RhcmQvc3lzc3RhdC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vOTlfc3lzc3RhdCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNzdGF0LnNlcnZpY2UgXAorICAgICAgICAgICIKKworREVQRU5EUyArPSAiYmFzZS1wYXNzd2QiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHN5c3RlbWQKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2Vuc29ycyIKK0VYVFJBX09FTUFLRSArPSAnTEZMQUdTPSIiJworCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInN5c3N0YXQuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEUgPSAiZW5hYmxlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgc2FfbGliX2Rpcj0ke2xpYmRpcn0vc2EKK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvbG9nL3NhIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKworCXJtIC1yZiAke0R9L3ZhcgorCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9zeXNzdGF0ICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3lzc3RhdC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzI0BMSUJESVJAIyR7bGliZGlyfSNnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNzdGF0LnNlcnZpY2UKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICAgICAgaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAtZSAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdOyB0aGVuCisgICAgICAgICAgICAgICAgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggdXBkYXRlCisgICAgICAgIGZpCit9CisKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9zYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3NhLy5kZWJ1Zy8iCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjBlYzMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC85OV9zeXNzdGF0CkBAIC0wLDAgKzEgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9sb2cvc2Egbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC9zeXNzdGF0LnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0L3N5c3N0YXQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYwNzEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC9zeXNzdGF0LnNlcnZpY2UKQEAgLTAsMCArMSwxMiBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1SZXNldHMgU3lzdGVtIEFjdGl2aXR5IExvZ3MKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK1JlbWFpbkFmdGVyRXhpdD15ZXMKK1VzZXI9cm9vdAorRXhlY1N0YXJ0PUBMSUJESVJAL3NhL3NhMSAtLWJvb3QKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjEuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXRfMTEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDJlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjEuNS5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgc3lzc3RhdC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZDhlNmU3MmQwNTcxODlhMTY2MDQ2MmE2NzhkOWFkYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZWIzYTkwZDg2ZmZkNjljZjViODgxNDRhODg3NmFlMDViZDQyMzg0ZjU1OTY3NmYwODEwMDY3MTU4OWZhMmJiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyYWUzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2J1Z2ZpeDogaHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNF0KKworVGhpcyBwYXRjaCBhdm9pZHMgaGVhcCBvdmVyZmxvdyByZXBvcnRlZCBieSA6CitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMC0wNjI0CisKK1RoaXMgaXMgYSBjbGVhbiBwYXRjaCBmb3IgdGhlIEdQTHYyIHRhciByZWNpcGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjUKKworSW5kZXg6IHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGFyLTEuMTcub3JpZy9saWIvcnRhcGVsaWIuYworKysrIHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCitAQCAtNTcwLDcgKzU3MCw3IEBAIHJtdF9yZWFkX18gKGludCBoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2kKKyAKKyAgIHNwcmludGYgKGNvbW1hbmRfYnVmZmVyLCAiUiVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCk7CisgICBpZiAoZG9fY29tbWFuZCAoaGFuZGxlLCBjb21tYW5kX2J1ZmZlcikgPT0gLTEKKy0gICAgICB8fCAoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKQorKyAgICAgIHx8ICgoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKSB8fCAoc3RhdHVzID4gbGVuZ3RoKSkKKyAgICAgcmV0dXJuIFNBRkVfUkVBRF9FUlJPUjsKKyAKKyAgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBzdGF0dXM7IGNvdW50ZXIgKz0gcmxlbiwgYnVmZmVyICs9IHJsZW4pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNTlhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvZ2NjNDNidWlsZC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBGaXggZXJyb3JzIHdoZW4gYnVpbHQgd2l0aCBnY2MgNC4zCisjIFBhdGNoIHRha2VuIGZyb20gRGViaWFuIGJ1ZyAjNDUyMDk2CisKK2RpZmYgLXVyTiB0YXItMS4xNy5vcmlnL2xpYi9hcmdwLWZtdHN0cmVhbS5oIHRhci0xLjE3L2xpYi9hcmdwLWZtdHN0cmVhbS5oCistLS0gdGFyLTEuMTcub3JpZy9saWIvYXJncC1mbXRzdHJlYW0uaAkyMDA2LTAxLTExIDEyOjI0OjA1LjAwMDAwMDAwMCAtMDgwMAorKysrIHRhci0xLjE3L2xpYi9hcmdwLWZtdHN0cmVhbS5oCTIwMTAtMDctMjIgMjI6MzY6MTIuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTk4LDcgKzE5OCwxMSBAQAorICNlbmRpZgorIAorICNpZm5kZWYgQVJHUF9GU19FSQorLSNkZWZpbmUgQVJHUF9GU19FSSBleHRlcm4gaW5saW5lCisrICNpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fCisrICAgI2RlZmluZSBBUkdQX0ZTX0VJIGV4dGVybiBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18pKQorKyAjZWxzZQorKyAgICNkZWZpbmUgQVJHUF9GU19FSSBleHRlcm4gaW5saW5lCisrICNlbmRpZgorICNlbmRpZgorIAorIEFSR1BfRlNfRUkgc2l6ZV90CitkaWZmIC11ck4gdGFyLTEuMTcub3JpZy9saWIvYXJncC5oIHRhci0xLjE3L2xpYi9hcmdwLmgKKy0tLSB0YXItMS4xNy5vcmlnL2xpYi9hcmdwLmgJMjAwNy0wMy0zMCAwMDowOToxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyB0YXItMS4xNy9saWIvYXJncC5oCTIwMTAtMDctMjIgMjI6Mzg6NDQuMDAwMDAwMDAwIC0wNzAwCitAQCAtNTgwLDcgKzU4MCwxMSBAQAorICMgZW5kaWYKKyAKKyAjIGlmbmRlZiBBUkdQX0VJCistIyAgZGVmaW5lIEFSR1BfRUkgZXh0ZXJuIF9faW5saW5lX18KKysjICBpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fCisrIyAgICBkZWZpbmUgQVJHUF9FSSBleHRlcm4gX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXykpCisrIyAgZWxzZQorKyMgICAgZGVmaW5lIEFSR1BfRUkgZXh0ZXJuIF9faW5saW5lX18KKysjICBlbmRpZgorICMgZW5kaWYKKyAKKyBBUkdQX0VJIHZvaWQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvbTRleHRlbnNpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9tNGV4dGVuc2lvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1MzRjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvbTRleHRlbnNpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIERlZmluZSBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgb25seSBpZiBpdCB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQuCisjIFRoaXMgaXMgbmVlZGVkIHRvIGNvbmZpZ3VyZSBjb3JyZWN0bHkgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBhdXRvY29uZi4KKworLS0tIHRhci0xLjE3L200L2V4dGVuc2lvbnMubTQub3JpZwkyMDEwLTA3LTIyIDIyOjIxOjM1LjAwMDAwMDAwMCAtMDcwMAorKysrIHRhci0xLjE3L200L2V4dGVuc2lvbnMubTQJMjAxMC0wNy0yMiAyMjoyMzo0MS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDQgIC0qLSBBdXRvY29uZiAtKi0KKysjIHNlcmlhbCA1ICAtKi0gQXV0b2NvbmYgLSotCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLgorIAorICMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQEAgLTE2LDYgKzE2LDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKyttNF9pZmRlZihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwgW10sIFsKKyBBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKyBbCisgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKK0BAIC00OCw3ICs0OSw3IEBACisgICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorICAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorICAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKytdKV0pCisgCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzljNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci5pbmMKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJHTlUgZmlsZSBhcmNoaXZpbmcgcHJvZ3JhbSIKK0RFU0NSSVBUSU9OID0gIkdOVSB0YXIgc2F2ZXMgbWFueSBmaWxlcyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIHRhcGUgXAorb3IgZGlzayBhcmNoaXZlLCBhbmQgY2FuIHJlc3RvcmUgaW5kaXZpZHVhbCBmaWxlcyBmcm9tIHRoZSBhcmNoaXZlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90YXIvIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vdGFyL3Rhci0ke1BWfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworRVhUUkFfT0VDT05GICs9ICJERUZBVUxUX1JNVF9ESVI9JHtiYXNlX3NiaW5kaXJ9IgorCisjIExldCBhY2xvY2FsIHVzZSB0aGUgcmVsYXRpdmUgcGF0aCBmb3IgdGhlIG00IGZpbGUgcmF0aGVyIHRoYW4gdGhlCisjIGFic29sdXRlIHNpbmNlIHRhciBoYXMgYSBsb3Qgb2YgbTQgZmlsZXMsIG90aGVyd2lzZSB0aGVyZSBtaWdodAorIyBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiBpdCBpcyBidWlsdCBpbiBhIGxvbmcvZGVlcAorIyBkaXJlY3RvcnkuCithY3BhdGhzID0gIi1JIC4vbTQiCisKK2RvX2luc3RhbGwgKCkgeworICAgIGF1dG90b29sc19kb19pbnN0YWxsCisgICAgbG4gLXMgdGFyICR7RH0ke2JpbmRpcn0vZ3RhcgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKyAgICBtdiAke0R9JHtiaW5kaXJ9L3RhciAke0R9JHtiYXNlX2JpbmRpcn0vdGFyCisgICAgbXYgJHtEfSR7YmluZGlyfS9ndGFyICR7RH0ke2Jhc2VfYmluZGlyfS9ndGFyCisgICAgcm1kaXIgJHtEfSR7YmluZGlyfS8KK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXJtdCIKKworRklMRVNfJHtQTn0tcm10ID0gIiR7YmFzZV9zYmluZGlyfS9ybXQqIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ0YXIiCitBTFRFUk5BVElWRV8ke1BOfS1ybXQgPSAicm10IgorQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK0FMVEVSTkFUSVZFXyR7UE59LXJtdF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdGFyXSA9ICIke2Jhc2VfYmluZGlyfS90YXIiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcm10XSA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiB0YXItcmVwbGFjZW1lbnQtbmF0aXZlIgorTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyL3JlbW92ZS1nZXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGJlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IHRhci0xLjI3L2dudS9zdGRpby5pbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGFyLTEuMjcub3JpZy9nbnUvc3RkaW8uaW4uaAkyMDEzLTA2LTI5IDA4OjU0OjI2LjAwMDAwMDAwMCArMDMwMAorKysrIHRhci0xLjI3L2dudS9zdGRpby5pbi5oCTIwMTMtMTAtMTYgMTU6MjI6NDYuOTc3MjA0NzM3ICswMzAwCitAQCAtNzEwLDEwICs3MTAsMTIgQEAKKyAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nOyBiZXNpZGVzLCBDMTEKKyAgICByZW1vdmVkIGl0LiAgKi8KKysjaWYgZGVmaW5lZCBnZXRzCisgI3VuZGVmIGdldHMKKyAjaWYgSEFWRV9SQVdfREVDTF9HRVRTCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworICNlbmRpZgorKyNlbmRpZgorIAorIAorICNpZiBAR05VTElCX09CU1RBQ0tfUFJJTlRGQCB8fCBAR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4xNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljYTIwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB0YXIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9tNGV4dGVuc2lvbnMucGF0Y2ggXAorICAgIGZpbGU6Ly9nY2M0M2J1aWxkLnBhdGNoIFwKKyAgICBmaWxlOi8vYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaCBcCisgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzZjNGYxYzA3NWRiZjBmNzVjMjk3MzdmYWE1OGYyOTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTlmOTAyMWRkYTUxYTE2Mjk1ZTQ3MDZlODA4NzBlNzFmODcxMDc2NzVlNTFjMTc2YTQ5MWViYTBmYzRjYTQ5MiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMjguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTYwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgdGFyLmluYworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0td2l0aC1wb3NpeC1hY2xzLCAtLXdpdGhvdXQtcG9zaXgtYWNscywgYWNsLCIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiOGYzMmIyYmMxZWQ3ZGRmNGNmNGU0YTM5NzExMzQxYjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjBlNGJmZTA2MDJmZWYzNGNkOTA4ZDkxY2Y2MzhlMTdlZWIwOTM5NGQ3Yjk4YzI0ODcyMTdkYzRkMzE0NzU2MiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMF9tYW5fcXVvdGluZy5kaWZmIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAwX21hbl9xdW90aW5nLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNjcxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMF9tYW5fcXVvdGluZy5kaWZmCkBAIC0wLDAgKzEsNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTE5OTUtMDEtMzAgMTk6NTE6NDcuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTA5IDE2OjU5OjQ1LjAwMDAwMDAwMCArMDIwMAorQEAgLTE3Myw3ICsxNzMsNyBAQAorIFBhdHRlcm5zIGxpa2UgdGhlc2UgY2FuIGJlIHVzZWQgd2hlbiB0aGUgbWFjaGluZSBoYXMgZGlmZmVyZW50IGludGVybmV0CisgYWRkcmVzc2VzIHdpdGggZGlmZmVyZW50IGludGVybmV0IGhvc3RuYW1lcy4gIFNlcnZpY2UgcHJvdmlkZXJzIGNhbiB1c2UKKyB0aGlzIGZhY2lsaXR5IHRvIG9mZmVyIEZUUCwgR09QSEVSIG9yIFdXVyBhcmNoaXZlcyB3aXRoIGludGVybmV0IG5hbWVzCistdGhhdCBtYXkgZXZlbiBiZWxvbmcgdG8gZGlmZmVyZW50IG9yZ2FuaXphdGlvbnMuIFNlZSBhbHNvIHRoZSBgdHdpc3QnCisrdGhhdCBtYXkgZXZlbiBiZWxvbmcgdG8gZGlmZmVyZW50IG9yZ2FuaXphdGlvbnMuIFNlZSBhbHNvIHRoZSBgdHdpc3RcJworIG9wdGlvbiBpbiB0aGUgaG9zdHNfb3B0aW9ucyg1KSBkb2N1bWVudC4gU29tZSBzeXN0ZW1zIChTb2xhcmlzLAorIEZyZWVCU0QpIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgaW50ZXJuZXQgYWRkcmVzcyBvbiBvbmUgcGh5c2ljYWwKKyBpbnRlcmZhY2U7IHdpdGggb3RoZXIgc3lzdGVtcyB5b3UgbWF5IGhhdmUgdG8gcmVzb3J0IHRvIFNMSVAgb3IgUFBQCitAQCAtMjM2LDEwICsyMzYsMTAgQEAKKyBCZWZvcmUgYWNjZXB0aW5nIGEgY2xpZW50IHJlcXVlc3QsIHRoZSB3cmFwcGVycyBjYW4gdXNlIHRoZSBJREVOVAorIHNlcnZpY2UgdG8gZmluZCBvdXQgdGhhdCB0aGUgY2xpZW50IGRpZCBub3Qgc2VuZCB0aGUgcmVxdWVzdCBhdCBhbGwuCisgV2hlbiB0aGUgY2xpZW50IGhvc3QgcHJvdmlkZXMgSURFTlQgc2VydmljZSwgYSBuZWdhdGl2ZSBJREVOVCBsb29rdXAKKy1yZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgVU5LTk9XTkBob3N0JykgaXMgc3Ryb25nIGV2aWRlbmNlIG9mIGEgaG9zdAorK3Jlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBVTktOT1dOQGhvc3RcJykgaXMgc3Ryb25nIGV2aWRlbmNlIG9mIGEgaG9zdAorIHNwb29maW5nIGF0dGFjay4KKyAuUFAKKy1BIHBvc2l0aXZlIElERU5UIGxvb2t1cCByZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgS05PV05AaG9zdCcpIGlzCisrQSBwb3NpdGl2ZSBJREVOVCBsb29rdXAgcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYEtOT1dOQGhvc3RcJykgaXMKKyBsZXNzIHRydXN0d29ydGh5LiBJdCBpcyBwb3NzaWJsZSBmb3IgYW4gaW50cnVkZXIgdG8gc3Bvb2YgYm90aCB0aGUKKyBjbGllbnQgY29ubmVjdGlvbiBhbmQgdGhlIElERU5UIGxvb2t1cCwgYWx0aG91Z2ggZG9pbmcgc28gaXMgbXVjaAorIGhhcmRlciB0aGFuIHNwb29maW5nIGp1c3QgYSBjbGllbnQgY29ubmVjdGlvbi4gSXQgbWF5IGFsc28gYmUgdGhhdAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19vcHRpb25zLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41CTE5OTQtMTItMjggMTc6NDI6MjkuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19vcHRpb25zLjUJMjAwNC0wNC0wOSAxNjo1OTo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjQsNyArMTI0LDcgQEAKKyB2YWx1ZSBpcyB0YWtlbi4KKyAuU0ggTUlTQ0VMTEFORU9VUworIC5JUCAiYmFubmVycyAvc29tZS9kaXJlY3RvcnkiCistTG9vayBmb3IgYSBmaWxlIGluIGAvc29tZS9kaXJlY3RvcnknIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZGFlbW9uCisrTG9vayBmb3IgYSBmaWxlIGluIGAvc29tZS9kaXJlY3RvcnlcJyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRhZW1vbgorIHByb2Nlc3MgKGZvciBleGFtcGxlIGluLnRlbG5ldGQgZm9yIHRoZSB0ZWxuZXQgc2VydmljZSksIGFuZCBjb3B5IGl0cworIGNvbnRlbnRzIHRvIHRoZSBjbGllbnQuIE5ld2xpbmUgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkKKyBjYXJyaWFnZS1yZXR1cm4gbmV3bGluZSwgYW5kICU8bGV0dGVyPiBzZXF1ZW5jZXMgYXJlIGV4cGFuZGVkIChzZWUKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjggdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOAkxOTk2LTAyLTExIDE3OjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgJMjAwNC0wNC0wOSAxNzowMDo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNiw3ICsyNiw3IEBACisgQSBkYWVtb24gcHJvY2VzcyBuYW1lLiBUeXBpY2FsbHksIHRoZSBsYXN0IGNvbXBvbmVudCBvZiBhIGRhZW1vbgorIGV4ZWN1dGFibGUgcGF0aG5hbWUuCisgLklQIGNsaWVudAorLUEgaG9zdCBuYW1lIG9yIG5ldHdvcmsgYWRkcmVzcywgb3Igb25lIG9mIHRoZSBgdW5rbm93bicgb3IgYHBhcmFub2lkJworK0EgaG9zdCBuYW1lIG9yIG5ldHdvcmsgYWRkcmVzcywgb3Igb25lIG9mIHRoZSBgdW5rbm93blwnIG9yIGBwYXJhbm9pZFwnCisgd2lsZGNhcmQgcGF0dGVybnMuCisgLnNwCisgV2hlbiBhIGNsaWVudCBob3N0IG5hbWUgaXMgc3BlY2lmaWVkLCBcZkl0Y3BkbWF0Y2hcZlIgZ2l2ZXMgYQorQEAgLTM3LDEzICszNywxMyBAQAorIC5QUAorIE9wdGlvbmFsIGluZm9ybWF0aW9uIHNwZWNpZmllZCB3aXRoIHRoZSBcZklkYWVtb25Ac2VydmVyXGZSIGZvcm06CisgLklQIHNlcnZlcgorLUEgaG9zdCBuYW1lIG9yIG5ldHdvcmsgYWRkcmVzcywgb3Igb25lIG9mIHRoZSBgdW5rbm93bicgb3IgYHBhcmFub2lkJworLXdpbGRjYXJkIHBhdHRlcm5zLiBUaGUgZGVmYXVsdCBzZXJ2ZXIgbmFtZSBpcyBgdW5rbm93bicuCisrQSBob3N0IG5hbWUgb3IgbmV0d29yayBhZGRyZXNzLCBvciBvbmUgb2YgdGhlIGB1bmtub3duXCcgb3IgYHBhcmFub2lkXCcKKyt3aWxkY2FyZCBwYXR0ZXJucy4gVGhlIGRlZmF1bHQgc2VydmVyIG5hbWUgaXMgYHVua25vd25cJy4KKyAuUFAKKyBPcHRpb25hbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgd2l0aCB0aGUgXGZJdXNlckBjbGllbnRcZlIgZm9ybToKKyAuSVAgdXNlcgorIEEgY2xpZW50IHVzZXIgaWRlbnRpZmllci4gVHlwaWNhbGx5LCBhIGxvZ2luIG5hbWUgb3IgYSBudW1lcmljIHVzZXJpZC4KKy1UaGUgZGVmYXVsdCB1c2VyIG5hbWUgaXMgYHVua25vd24nLgorK1RoZSBkZWZhdWx0IHVzZXIgbmFtZSBpcyBgdW5rbm93blwnLgorIC5TSCBPUFRJT05TCisgLklQIC1kCisgRXhhbWluZSBcZklob3N0cy5hbGxvd1xmUiBhbmQgXGZJaG9zdHMuZGVueVxmUiBmaWxlcyBpbiB0aGUgY3VycmVudAorQEAgLTcwLDcgKzcwLDcgQEAKKyAudGkgKzUKKyB0Y3BkbWF0Y2ggaW4udGVsbmV0ZCBwYXJhbm9pZAorIC5QUAorLU9uIHNvbWUgc3lzdGVtcywgZGFlbW9uIG5hbWVzIGhhdmUgbm8gYGluLicgcHJlZml4LCBvciBcZkl0Y3BkbWF0Y2hcZlIKKytPbiBzb21lIHN5c3RlbXMsIGRhZW1vbiBuYW1lcyBoYXZlIG5vIGBpbi5cJyBwcmVmaXgsIG9yIFxmSXRjcGRtYXRjaFxmUgorIG1heSBuZWVkIHNvbWUgaGVscCB0byBsb2NhdGUgdGhlIGluZXRkIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAuU0ggRklMRVMKKyAuUFAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzM1YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMjUwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMJMjAwNS0wMy0wOSAxODozMDoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMyw3ICszLDcgQEAKKyBob3N0c19hY2Nlc3MsIGhvc3RzX2N0bCwgcmVxdWVzdF9pbml0LCByZXF1ZXN0X3NldCBcLSBhY2Nlc3MgY29udHJvbCBsaWJyYXJ5CisgLlNIIFNZTk9QU0lTCisgLm5mCistI2luY2x1ZGUgInRjcGQuaCIKKysjaW5jbHVkZSA8dGNwZC5oPgorIAorIGV4dGVybiBpbnQgYWxsb3dfc2V2ZXJpdHk7CisgZXh0ZXJuIGludCBkZW55X3NldmVyaXR5OworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA1LTAzLTA5IDE4OjMwOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNS0wMy0wOSAxODozMDoxOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04LDkgKzgsOSBAQCBuYW1lLCBob3N0IG5hbWUvYWRkcmVzcykgcGF0dGVybnMuICBFeGFtCisgaW1wYXRpZW50IHJlYWRlciBpcyBlbmNvdXJhZ2VkIHRvIHNraXAgdG8gdGhlIEVYQU1QTEVTIHNlY3Rpb24gZm9yIGEKKyBxdWljayBpbnRyb2R1Y3Rpb24uCisgLlBQCistQW4gZXh0ZW5kZWQgdmVyc2lvbiBvZiB0aGUgYWNjZXNzIGNvbnRyb2wgbGFuZ3VhZ2UgaXMgZGVzY3JpYmVkIGluIHRoZQorLVxmSWhvc3RzX29wdGlvbnNcZlIoNSkgZG9jdW1lbnQuIFRoZSBleHRlbnNpb25zIGFyZSB0dXJuZWQgb24gYXQKKy1wcm9ncmFtIGJ1aWxkIHRpbWUgYnkgYnVpbGRpbmcgd2l0aCAtRFBST0NFU1NfT1BUSU9OUy4KKytUaGUgZXh0ZW5kZWQgdmVyc2lvbiBvZiB0aGUgYWNjZXNzIGNvbnRyb2wgbGFuZ3VhZ2UgaXMgZGVzY3JpYmVkIGluIHRoZQorK1xmSWhvc3RzX29wdGlvbnNcZlIoNSkgZG9jdW1lbnQuIFxmQk5vdGUgdGhhdCB0aGlzIGxhbmd1YWdlIHN1cGVyc2VkZXMKKyt0aGUgbWVhbmluZyBvZiBcZklzaGVsbF9jb21tYW5kXGZCIGFzIGRvY3VtZW50ZWQgYmVsb3cuXGZSCisgLlBQCisgSW4gdGhlIGZvbGxvd2luZyB0ZXh0LCBcZklkYWVtb25cZlIgaXMgdGhlIHRoZSBwcm9jZXNzIG5hbWUgb2YgYQorIG5ldHdvcmsgZGFlbW9uIHByb2Nlc3MsIGFuZCBcZkljbGllbnRcZlIgaXMgdGhlIG5hbWUgYW5kL29yIGFkZHJlc3Mgb2YKK0BAIC0zNDYsOCArMzQ2LDggQEAgaW4udGZ0cGQ6IExPQ0FMLCAubXkuZG9tYWluCisgL2V0Yy9ob3N0cy5kZW55OgorIC5pbiArMworIC5uZgorLWluLnRmdHBkOiBBTEw6ICgvc29tZS93aGVyZS9zYWZlX2ZpbmdlciAtbCBAJWggfCBcXAorLQkvdXNyL3VjYi9tYWlsIC1zICVkLSVoIHJvb3QpICYKKytpbi50ZnRwZDogQUxMOiAoL3Vzci9zYmluL3NhZmVfZmluZ2VyIC1sIEAlaCB8IFxcCisrCS91c3IvYmluL21haWwgLXMgJWQtJWggcm9vdCkgJgorIC5maQorIC5QUAorIFRoZSBzYWZlX2ZpbmdlciBjb21tYW5kIGNvbWVzIHdpdGggdGhlIHRjcGQgd3JhcHBlciBhbmQgc2hvdWxkIGJlCitAQCAtMzgzLDYgKzM4Myw3IEBAIHRoYXQgc2hvdWxkblwndC4gIEFsbCBwcm9ibGVtcyBhcmUgcmVwb3IKKyAuZmkKKyAuU0ggU0VFIEFMU08KKyAubmYKKytob3N0c19vcHRpb25zKDUpIGV4dGVuZGVkIHN5bnRheC4KKyB0Y3BkKDgpIHRjcC9pcCBkYWVtb24gd3JhcHBlciBwcm9ncmFtLgorIHRjcGRjaGsoOCksIHRjcGRtYXRjaCg4KSwgdGVzdCBwcm9ncmFtcy4KKyAuU0ggQlVHUworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNQkyMDA1LTAzLTA5IDE4OjMwOjI0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMiwxMCArMiw4IEBACisgLlNIIE5BTUUKKyBob3N0c19vcHRpb25zIFwtIGhvc3QgYWNjZXNzIGNvbnRyb2wgbGFuZ3VhZ2UgZXh0ZW5zaW9ucworIC5TSCBERVNDUklQVElPTgorLVRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIG9wdGlvbmFsIGV4dGVuc2lvbnMgdG8gdGhlIGxhbmd1YWdlIGRlc2NyaWJlZAorLWluIHRoZSBob3N0c19hY2Nlc3MoNSkgZG9jdW1lbnQuIFRoZSBleHRlbnNpb25zIGFyZSBlbmFibGVkIGF0IHByb2dyYW0KKy1idWlsZCB0aW1lLiBGb3IgZXhhbXBsZSwgYnkgZWRpdGluZyB0aGUgTWFrZWZpbGUgYW5kIHR1cm5pbmcgb24gdGhlIAorLVBST0NFU1NfT1BUSU9OUyBjb21waWxlLXRpbWUgb3B0aW9uLgorK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGV4dGVuc2lvbnMgdG8gdGhlIGxhbmd1YWdlIGRlc2NyaWJlZAorK2luIHRoZSBob3N0c19hY2Nlc3MoNSkgZG9jdW1lbnQuCisgLlBQCisgVGhlIGV4dGVuc2libGUgbGFuZ3VhZ2UgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAuc3AKK0BAIC01OCwxMiArNTYsMTIgQEAgTm90aWNlIHRoZSBsZWFkaW5nIGRvdCBvbiB0aGUgZG9tYWluIG5hbQorIEV4ZWN1dGUsIGluIGEgY2hpbGQgcHJvY2VzcywgdGhlIHNwZWNpZmllZCBzaGVsbCBjb21tYW5kLCBhZnRlcgorIHBlcmZvcm1pbmcgdGhlICU8bGV0dGVyPiBleHBhbnNpb25zIGRlc2NyaWJlZCBpbiB0aGUgaG9zdHNfYWNjZXNzKDUpCisgbWFudWFsIHBhZ2UuICBUaGUgY29tbWFuZCBpcyBleGVjdXRlZCB3aXRoIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVycgorLWNvbm5lY3RlZCB0byB0aGUgbnVsbCBkZXZpY2UsIHNvIHRoYXQgaXQgd29uXCd0IG1lc3MgdXAgdGhlCisrY29ubmVjdGVkIHRvIHRoZSBudWxsIGRldmljZSwgc28gdGhhdCBpdCB3b24ndCBtZXNzIHVwIHRoZQorIGNvbnZlcnNhdGlvbiB3aXRoIHRoZSBjbGllbnQgaG9zdC4gRXhhbXBsZToKKyAuc3AKKyAubmYKKyAudGkgKzMKKy1zcGF3biAoL3NvbWUvd2hlcmUvc2FmZV9maW5nZXIgLWwgQCVoIHwgL3Vzci91Y2IvbWFpbCByb290KSAmCisrc3Bhd24gKC91c3Ivc2Jpbi9zYWZlX2ZpbmdlciAtbCBAJWggfCAvdXNyL2Jpbi9tYWlsIHJvb3QpICYKKyAuZmkKKyAuc3AKKyBleGVjdXRlcywgaW4gYSBiYWNrZ3JvdW5kIGNoaWxkIHByb2Nlc3MsIHRoZSBzaGVsbCBjb21tYW5kICJzYWZlX2ZpbmdlcgorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaW5ldGNmLmMgdGNwX3dyYXBwZXJzXzcuNi9pbmV0Y2YuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9pbmV0Y2YuYwkxOTk3LTAyLTEyIDAyOjEzOjI0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaW5ldGNmLmMJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiwxMyArMjYsMTcgQEAgZXh0ZXJuIHZvaWQgZXhpdCgpOworICAgKiBndWVzc2VzLiBTaG9ydGVyIG5hbWVzIGZvbGxvdyBsb25nZXIgb25lcy4KKyAgICovCisgY2hhciAgICppbmV0X2ZpbGVzW10gPSB7CisrI2lmIDAKKyAgICAgIi9wcml2YXRlL2V0Yy9pbmV0ZC5jb25mIiwJCS8qIE5FWFQgKi8KKyAgICAgIi9ldGMvaW5ldC9pbmV0ZC5jb25mIiwJCS8qIFNZU1Y0ICovCisgICAgICIvdXNyL2V0Yy9pbmV0ZC5jb25mIiwJCS8qIElSSVg/PyAqLworKyNlbmRpZgorICAgICAiL2V0Yy9pbmV0ZC5jb25mIiwJCQkvKiBCU0QgKi8KKysjaWYgMAorICAgICAiL2V0Yy9uZXQvdGxpZC5jb25mIiwJCS8qIFNZU1Y0Pz8gKi8KKyAgICAgIi9ldGMvc2FmL3RsaWQuY29uZiIsCQkvKiBTWVNWND8/ICovCisgICAgICIvZXRjL3RsaWQuY29uZiIsCQkJLyogU1lTVjQ/PyAqLworKyNlbmRpZgorICAgICAwLAorIH07CisgCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLjggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLjgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC44CTE5OTYtMDItMjEgMTY6Mzk6MTYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLjgJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMiw3ICsxMiwxMSBAQCBUaGUgcHJvZ3JhbSBzdXBwb3J0cyBib3RoIDQuM0JTRC1zdHlsZSBzCisgVExJLiAgRnVuY3Rpb25hbGl0eSBtYXkgYmUgbGltaXRlZCB3aGVuIHRoZSBwcm90b2NvbCB1bmRlcm5lYXRoIFRMSSBpcworIG5vdCBhbiBpbnRlcm5ldCBwcm90b2NvbC4KKyAuUFAKKy1PcGVyYXRpb24gaXMgYXMgZm9sbG93czogd2hlbmV2ZXIgYSByZXF1ZXN0IGZvciBzZXJ2aWNlIGFycml2ZXMsIHRoZQorK1RoZXJlIGFyZSB0d28gcG9zc2libGUgbW9kZXMgb2Ygb3BlcmF0aW9uOiBleGVjdXRpb24gb2YgXGZJdGNwZFxmUAorK2JlZm9yZSBhIHNlcnZpY2Ugc3RhcnRlZCBieSBcZklpbmV0ZFxmUCwgb3IgbGlua2luZyBhIGRhZW1vbiB3aXRoCisrdGhlIFxmSWxpYndyYXBcZlAgc2hhcmVkIGxpYnJhcnkgYXMgZG9jdW1lbnRlZCBpbiB0aGUgXGZJaG9zdHNfYWNjZXNzXGZSKDMpCisrbWFudWFsIHBhZ2UuIE9wZXJhdGlvbiB3aGVuIHN0YXJ0ZWQgYnkgXGZJaW5ldGRcZlAKKytpcyBhcyBmb2xsb3dzOiB3aGVuZXZlciBhIHJlcXVlc3QgZm9yIHNlcnZpY2UgYXJyaXZlcywgdGhlCisgXGZJaW5ldGRcZlAgZGFlbW9uIGlzIHRyaWNrZWQgaW50byBydW5uaW5nIHRoZSBcZkl0Y3BkXGZQIHByb2dyYW0KKyBpbnN0ZWFkIG9mIHRoZSBkZXNpcmVkIHNlcnZlci4gXGZJdGNwZFxmUCBsb2dzIHRoZSByZXF1ZXN0IGFuZCBkb2VzCisgc29tZSBhZGRpdGlvbmFsIGNoZWNrcy4gV2hlbiBhbGwgaXMgd2VsbCwgXGZJdGNwZFxmUCBydW5zIHRoZQorQEAgLTg4LDExICs5MiwxMSBAQCBjb25maWd1cmF0aW9uIGZpbGVzLgorIC5zcAorIC5pbiArNQorICMgbWtkaXIgL290aGVyL3BsYWNlCistIyBtdiAvdXNyL2V0Yy9pbi5maW5nZXJkIC9vdGhlci9wbGFjZQorLSMgY3AgdGNwZCAvdXNyL2V0Yy9pbi5maW5nZXJkCisrIyBtdiAvdXNyL3NiaW4vaW4uZmluZ2VyZCAvb3RoZXIvcGxhY2UKKysjIGNwIHRjcGQgL3Vzci9zYmluL2luLmZpbmdlcmQKKyAuZmkKKyAuUFAKKy1UaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3IvZXRjLiBPbiBzb21lCisrVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4uIE9uIHNvbWUKKyBzeXN0ZW1zLCBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4gb3IgaW4gL3Vzci9saWJleGVjLCBvciBoYXZlCisgbm8gYGluLlwnIHByZWZpeCB0byB0aGVpciBuYW1lLgorIC5TSCBFWEFNUExFIDIKK0BAIC0xMDEsMzUgKzEwNSwzNCBAQCBhcmUgbGVmdCBpbiB0aGVpciBvcmlnaW5hbCBwbGFjZS4KKyAuUFAKKyBJbiBvcmRlciB0byBtb25pdG9yIGFjY2VzcyB0byB0aGUgXGZJZmluZ2VyXGZSIHNlcnZpY2UsIHBlcmZvcm0gdGhlCisgZm9sbG93aW5nIGVkaXRzIG9uIHRoZSBcZklpbmV0ZFxmUiBjb25maWd1cmF0aW9uIGZpbGUgKHVzdWFsbHkgCistXGZJL2V0Yy9pbmV0ZC5jb25mXGZSIG9yIFxmSS9ldGMvaW5ldC9pbmV0ZC5jb25mXGZSKToKKytcZkkvZXRjL2luZXRkLmNvbmZcZlIpOgorIC5uZgorIC5zcAorIC50aSArNQorLWZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvdXNyL2V0Yy9pbi5maW5nZXJkICBpbi5maW5nZXJkCisrZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC91c3Ivc2Jpbi9pbi5maW5nZXJkICBpbi5maW5nZXJkCisgLnNwCisgYmVjb21lczoKKyAuc3AKKyAudGkgKzUKKy1maW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3NvbWUvd2hlcmUvdGNwZCAgICAgaW4uZmluZ2VyZAorK2ZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvdXNyL3NiaW4vdGNwZCAgICAgaW4uZmluZ2VyZAorIC5zcAorIC5maQorIC5QUAorLVRoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9ldGMuIE9uIHNvbWUKKytUaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3Ivc2Jpbi4gT24gc29tZQorIHN5c3RlbXMsIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3Ivc2JpbiBvciBpbiAvdXNyL2xpYmV4ZWMsIHRoZQorIGRhZW1vbnMgaGF2ZSBubyBgaW4uXCcgcHJlZml4IHRvIHRoZWlyIG5hbWUsIG9yIHRoZXJlIGlzIG5vIHVzZXJpZAorIGZpZWxkIGluIHRoZSBpbmV0ZCBjb25maWd1cmF0aW9uIGZpbGUuCisgLlBQCisgU2ltaWxhciBjaGFuZ2VzIHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgb3RoZXIgc2VydmljZXMgdGhhdCBhcmUgdG8gYmUKKyBjb3ZlcmVkIGJ5IFxmSXRjcGRcZlIuICBTZW5kIGEgYGtpbGwgLUhVUFwnIHRvIHRoZSBcZklpbmV0ZFxmUig4KQorLXByb2Nlc3MgdG8gbWFrZSB0aGUgY2hhbmdlcyBlZmZlY3RpdmUuIEFJWCB1c2VycyBtYXkgYWxzbyBoYXZlIHRvCistZXhlY3V0ZSB0aGUgYGluZXRpbXBcJyBjb21tYW5kLgorK3Byb2Nlc3MgdG8gbWFrZSB0aGUgY2hhbmdlcyBlZmZlY3RpdmUuCisgLlNIIEVYQU1QTEUgMworIEluIHRoZSBjYXNlIG9mIGRhZW1vbnMgdGhhdCBkbyBub3QgbGl2ZSBpbiBhIGNvbW1vbiBkaXJlY3RvcnkgKCJzZWNyZXQiCisgb3Igb3RoZXJ3aXNlKSwgZWRpdCB0aGUgXGZJaW5ldGRcZlIgY29uZmlndXJhdGlvbiBmaWxlIHNvIHRoYXQgaXQKKyBzcGVjaWZpZXMgYW4gYWJzb2x1dGUgcGF0aCBuYW1lIGZvciB0aGUgcHJvY2VzcyBuYW1lIGZpZWxkLiBGb3IgZXhhbXBsZToKKyAubmYKKyAuc3AKKy0gICAgbnRhbGsgIGRncmFtICB1ZHAgIHdhaXQgIHJvb3QgIC9zb21lL3doZXJlL3RjcGQgIC91c3IvbG9jYWwvbGliL250YWxrZAorKyAgICBudGFsayAgZGdyYW0gIHVkcCAgd2FpdCAgcm9vdCAgL3Vzci9zYmluL3RjcGQgIC91c3IvbG9jYWwvbGliL250YWxrZAorIC5zcAorIC5maQorIC5QUAorQEAgLTE2NCw2ICsxNjcsNyBAQCBUaGUgZGVmYXVsdCBsb2NhdGlvbnMgb2YgdGhlIGhvc3QgYWNjZXNzCisgLlNIIFNFRSBBTFNPCisgLm5hCisgLm5mCisraG9zdHNfYWNjZXNzKDMpLCBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIGxpYndyYXAgbGlicmFyeS4KKyBob3N0c19hY2Nlc3MoNSksIGZvcm1hdCBvZiB0aGUgdGNwZCBhY2Nlc3MgY29udHJvbCB0YWJsZXMuCisgc3lzbG9nLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgc3lzbG9nZCBjb250cm9sIGZpbGUuCisgaW5ldGQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBpbmV0ZCBjb250cm9sIGZpbGUuCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLjggdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLjgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay44CTE5OTUtMDEtMDggMTc6MDA6MzEuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLjgJMjAwNS0wMy0wOSAxODoyNzowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC05LDggKzksOCBAQCB0Y3BkY2hrIFstYV0gWy1kXSBbLWkgaW5ldF9jb25mXSBbLXZdCisgcG90ZW50aWFsIGFuZCByZWFsIHByb2JsZW1zIGl0IGNhbiBmaW5kLiBUaGUgcHJvZ3JhbSBleGFtaW5lcyB0aGUKKyBcZkl0Y3BkXGZSIGFjY2VzcyBjb250cm9sIGZpbGVzIChieSBkZWZhdWx0LCB0aGVzZSBhcmUKKyBcZkkvZXRjL2hvc3RzLmFsbG93XGZSIGFuZCBcZkkvZXRjL2hvc3RzLmRlbnlcZlIpLCBhbmQgY29tcGFyZXMgdGhlCistZW50cmllcyBpbiB0aGVzZSBmaWxlcyBhZ2FpbnN0IGVudHJpZXMgaW4gdGhlIFxmSWluZXRkXGZSIG9yIFxmSXRsaWRcZlIKKy1uZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisrZW50cmllcyBpbiB0aGVzZSBmaWxlcyBhZ2FpbnN0IGVudHJpZXMgaW4gdGhlIFxmSWluZXRkXGZSCisrbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUuCisgLlBQCisgXGZJdGNwZGNoa1xmUiByZXBvcnRzIHByb2JsZW1zIHN1Y2ggYXMgbm9uLWV4aXN0ZW50IHBhdGhuYW1lczsgc2VydmljZXMKKyB0aGF0IGFwcGVhciBpbiBcZkl0Y3BkXGZSIGFjY2VzcyBjb250cm9sIHJ1bGVzLCBidXQgYXJlIG5vdCBjb250cm9sbGVkCitAQCAtMjYsMTQgKzI2LDEzIEBAIHByb2JsZW0uCisgLlNIIE9QVElPTlMKKyAuSVAgLWEKKyBSZXBvcnQgYWNjZXNzIGNvbnRyb2wgcnVsZXMgdGhhdCBwZXJtaXQgYWNjZXNzIHdpdGhvdXQgYW4gZXhwbGljaXQKKy1BTExPVyBrZXl3b3JkLiBUaGlzIGFwcGxpZXMgb25seSB3aGVuIHRoZSBleHRlbmRlZCBhY2Nlc3MgY29udHJvbAorLWxhbmd1YWdlIGlzIGVuYWJsZWQgKGJ1aWxkIHdpdGggLURQUk9DRVNTX09QVElPTlMpLgorK0FMTE9XIGtleXdvcmQuCisgLklQIC1kCisgRXhhbWluZSBcZklob3N0cy5hbGxvd1xmUiBhbmQgXGZJaG9zdHMuZGVueVxmUiBmaWxlcyBpbiB0aGUgY3VycmVudAorIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZXMuCisgLklQICItaSBpbmV0X2NvbmYiCisgU3BlY2lmeSB0aGlzIG9wdGlvbiB3aGVuIFxmSXRjcGRjaGtcZlIgaXMgdW5hYmxlIHRvIGZpbmQgeW91cgorLVxmSWluZXRkLmNvbmZcZlIgb3IgXGZJdGxpZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisrXGZJaW5ldGQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorIHlvdSBzdXNwZWN0IHRoYXQgdGhlIHByb2dyYW0gdXNlcyB0aGUgd3Jvbmcgb25lLgorIC5JUCAtdgorIERpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIGVhY2ggYWNjZXNzIGNvbnRyb2wgcnVsZS4gIERhZW1vbiBsaXN0cywgY2xpZW50CitAQCAtNTQsNyArNTMsNiBAQCB0Y3BkbWF0Y2goOCksIGV4cGxhaW4gd2hhdCB0Y3BkIHdvdWxkIGRvCisgaG9zdHNfYWNjZXNzKDUpLCBmb3JtYXQgb2YgdGhlIHRjcGQgYWNjZXNzIGNvbnRyb2wgdGFibGVzLgorIGhvc3RzX29wdGlvbnMoNSksIGZvcm1hdCBvZiB0aGUgbGFuZ3VhZ2UgZXh0ZW5zaW9ucy4KKyBpbmV0ZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIGluZXRkIGNvbnRyb2wgZmlsZS4KKy10bGlkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgdGxpZCBjb250cm9sIGZpbGUuCisgLlNIIEFVVEhPUlMKKyAubmEKKyAubmYKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44IHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjgJMjAwNS0wMy0wOSAxODozMDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMTMsNyArMTMsNyBAQCByZXF1ZXN0IGZvciBzZXJ2aWNlLiAgRXhhbXBsZXMgYXJlIGdpdmVuCisgVGhlIHByb2dyYW0gZXhhbWluZXMgdGhlIFxmSXRjcGRcZlIgYWNjZXNzIGNvbnRyb2wgdGFibGVzIChkZWZhdWx0CisgXGZJL2V0Yy9ob3N0cy5hbGxvd1xmUiBhbmQgXGZJL2V0Yy9ob3N0cy5kZW55XGZSKSBhbmQgcHJpbnRzIGl0cworIGNvbmNsdXNpb24uICBGb3IgbWF4aW1hbCBhY2N1cmFjeSwgaXQgZXh0cmFjdHMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorLWZyb20geW91ciBcZklpbmV0ZFxmUiBvciBcZkl0bGlkXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLgorK2Zyb20geW91ciBcZklpbmV0ZFxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAuUFAKKyBXaGVuIFxmSXRjcGRtYXRjaFxmUiBmaW5kcyBhIG1hdGNoIGluIHRoZSBhY2Nlc3MgY29udHJvbCB0YWJsZXMsIGl0CisgaWRlbnRpZmllcyB0aGUgbWF0Y2hlZCBydWxlLiBJbiBhZGRpdGlvbiwgaXQgZGlzcGxheXMgdGhlIG9wdGlvbmFsCitAQCAtNTAsNyArNTAsNyBAQCBFeGFtaW5lIFxmSWhvc3RzLmFsbG93XGZSIGFuZCBcZklob3N0cy5kCisgZGlyZWN0b3J5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lcy4KKyAuSVAgIi1pIGluZXRfY29uZiIKKyBTcGVjaWZ5IHRoaXMgb3B0aW9uIHdoZW4gXGZJdGNwZG1hdGNoXGZSIGlzIHVuYWJsZSB0byBmaW5kIHlvdXIKKy1cZklpbmV0ZC5jb25mXGZSIG9yIFxmSXRsaWQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorK1xmSWluZXRkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKyB5b3Ugc3VzcGVjdCB0aGF0IHRoZSBwcm9ncmFtIHVzZXMgdGhlIHdyb25nIG9uZS4KKyAuU0ggRVhBTVBMRVMKKyBUbyBwcmVkaWN0IGhvdyBcZkl0Y3BkXGZSIHdvdWxkIGhhbmRsZSBhIHRlbG5ldCByZXF1ZXN0IGZyb20gdGhlIGxvY2FsCitAQCAtODYsNyArODYsNiBAQCB0Y3BkY2hrKDgpLCB0Y3BkIGNvbmZpZ3VyYXRpb24gY2hlY2tlcgorIGhvc3RzX2FjY2Vzcyg1KSwgZm9ybWF0IG9mIHRoZSB0Y3BkIGFjY2VzcyBjb250cm9sIHRhYmxlcy4KKyBob3N0c19vcHRpb25zKDUpLCBmb3JtYXQgb2YgdGhlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisgaW5ldGQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBpbmV0ZCBjb250cm9sIGZpbGUuCistdGxpZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHRsaWQgY29udHJvbCBmaWxlLgorIC5TSCBBVVRIT1JTCisgLm5hCisgLm5mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxODgwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNV93aWxkY2FyZF9tYXRjaGluZy5wYXRjaApAQCAtMCwwICsxLDEwNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTZWUgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNzg0NworCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxODo1NDozMy4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTg6NTQ6MjcuMDAwMDAwMDAwICswMjAwCitAQCAtODksNiArODksMTAgQEAKKyBiaXR3aXNlIEFORCBvZiB0aGUgYWRkcmVzcyBhbmQgdGhlIGBtYXNrXCcuIEZvciBleGFtcGxlLCB0aGUgbmV0L21hc2sKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKysuSVAgXChidQorK1dpbGRjYXJkcyBgKlwnIGFuZCBgP1wnIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGhvc3RuYW1lcyBvciBJUCBhZGRyZXNzZXMuICBUaGlzCisrbWV0aG9kIG9mIG1hdGNoaW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYG5ldC9tYXNrXCcgbWF0Y2hpbmcsCisraG9zdG5hbWUgbWF0Y2hpbmcgYmVnaW5uaW5nIHdpdGggYC5cJyBvciBJUCBhZGRyZXNzIG1hdGNoaW5nIGVuZGluZyB3aXRoIGAuXCcuCisgLlNIIFdJTERDQVJEUworIFRoZSBhY2Nlc3MgY29udHJvbCBsYW5ndWFnZSBzdXBwb3J0cyBleHBsaWNpdCB3aWxkY2FyZHM6CisgLklQIEFMTAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jCTE5OTctMDItMTIgMDI6MTM6MjMuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE4OjUyOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTI4OSw2ICsyODksMTEgQEAKKyB7CisgICAgIGludCAgICAgbjsKKyAKKysjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKysgICAgaWYgKHN0cmNocih0b2ssICcqJykgfHwgc3RyY2hyKHRvaywnPycpKSB7ICAvKiBjb250YWlucyAnKicgb3IgJz8nICovCisrICAgICAgICByZXR1cm4gKG1hdGNoX3BhdHRlcm5feWxvKHN0cmluZyx0b2spKTsgCSAgICAgICAKKysgICAgfSBlbHNlIAorKyNlbmRpZiAgICAKKyAgICAgaWYgKHRva1swXSA9PSAnLicpIHsJCQkvKiBzdWZmaXggKi8KKyAJbiA9IHN0cmxlbihzdHJpbmcpIC0gc3RybGVuKHRvayk7CisgCXJldHVybiAobiA+IDAgJiYgU1RSX0VRKHRvaywgc3RyaW5nICsgbikpOworQEAgLTMyOSwzICszMzQsNzEgQEAKKyAgICAgfQorICAgICByZXR1cm4gKChhZGRyICYgbWFzaykgPT0gbmV0KTsKKyB9CisrCisrI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisrLyogTm90ZTogdGhpcyBmZWF0dXJlIGhhcyBiZWVuIGFkYXB0ZWQgaW4gYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdheQorKyAgIGZyb20gVGF0dSBZbG9uZW4ncyBsYXN0IFNTSCB2ZXJzaW9uIHVuZGVyIGZyZWUgbGljZW5zZSBieSAKKysgICBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPi4KKysKKysgICBDb3B5cmlnaHQgKGMpIDE5OTUgVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+LCBFc3BvbywgRmlubGFuZAorKyovCisrCisrLyogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybiAod2hpY2ggbWF5IGNvbnRhaW4KKysgICA/IGFuZCAqIGFzIHdpbGRjYXJkcyksIGFuZCB6ZXJvIGlmIGl0IGRvZXMgbm90IG1hdGNoLiAqLworKwkgIAorK2ludCBtYXRjaF9wYXR0ZXJuX3lsbyhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpwYXR0ZXJuKQorK3sKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgLyogSWYgYXQgZW5kIG9mIHBhdHRlcm4sIGFjY2VwdCBpZiBhbHNvIGF0IGVuZCBvZiBzdHJpbmcuICovCisrICAgICAgaWYgKCEqcGF0dGVybikKKysgICAgICAgIHJldHVybiAhKnM7CisrCisrICAgICAgLyogUHJvY2VzcyAnKicuICovCisrICAgICAgaWYgKCpwYXR0ZXJuID09ICcqJykKKysgICAgICAgIHsKKysJICAvKiBTa2lwIHRoZSBhc3Rlcmlzay4gKi8KKysJICBwYXR0ZXJuKys7CisrCisrCSAgLyogSWYgYXQgZW5kIG9mIHBhdHRlcm4sIGFjY2VwdCBpbW1lZGlhdGVseS4gKi8KKysgICAgICAgICAgaWYgKCEqcGF0dGVybikKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysJICAvKiBJZiBuZXh0IGNoYXJhY3RlciBpbiBwYXR0ZXJuIGlzIGtub3duLCBvcHRpbWl6ZS4gKi8KKysgICAgICAgICAgaWYgKCpwYXR0ZXJuICE9ICc/JyAmJiAqcGF0dGVybiAhPSAnKicpCisrICAgICAgICAgICAgeworKwkgICAgICAvKiBMb29rIGluc3RhbmNlcyBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gcGF0dGVybiwgYW5kIHRyeQorKwkJIHRvIG1hdGNoIHN0YXJ0aW5nIGZyb20gdGhvc2UuICovCisrICAgICAgICAgICAgICBmb3IgKDsgKnM7IHMrKykKKysgICAgICAgICAgICAgICAgaWYgKCpzID09ICpwYXR0ZXJuICYmCisrICAgICAgICAgICAgICAgICAgICBtYXRjaF9wYXR0ZXJuX3lsbyhzICsgMSwgcGF0dGVybiArIDEpKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiAxOworKwkgICAgICAvKiBGYWlsZWQuICovCisrICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICB9CisrCisrCSAgLyogTW92ZSBhaGVhZCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSBhbmQgdHJ5IHRvIG1hdGNoIGF0IGVhY2gKKysJICAgICBwb3NpdGlvbi4gKi8KKysgICAgICAgICAgZm9yICg7ICpzOyBzKyspCisrICAgICAgICAgICAgaWYgKG1hdGNoX3BhdHRlcm5feWxvKHMsIHBhdHRlcm4pKQorKyAgICAgICAgICAgICAgcmV0dXJuIDE7CisrCSAgLyogRmFpbGVkLiAqLworKyAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysKKysgICAgICAvKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBtb3JlIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiAgSWYgd2UgYXJlCisrCSBhdCB0aGUgZW5kLCBmYWlsLiAqLworKyAgICAgIGlmICghKnMpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgICAvKiBDaGVjayBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyBpcyBhY2NlcHRhYmxlLiAqLworKyAgICAgIGlmICgqcGF0dGVybiAhPSAnPycgJiYgKnBhdHRlcm4gIT0gKnMpCisrCXJldHVybiAwOworKyAgICAgIAorKyAgICAgIC8qIE1vdmUgdG8gdGhlIG5leHQgY2hhcmFjdGVyLCBib3RoIGluIHN0cmluZyBhbmQgaW4gcGF0dGVybi4gKi8KKysgICAgICBzKys7CisrICAgICAgcGF0dGVybisrOworKyAgICB9CisrICAvKk5PVFJFQUNIRUQqLworK30KKysjZW5kaWYgLyogRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWY0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDZfZml4X2dldGhvc3RieW5hbWUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisqIE1vbiBGZWIgIDUgMjAwMSBQcmVzdG9uIEJyb3duIDxwYnJvd25AcmVkaGF0LmNvbT4KKy0gZml4IGdldGhvc3RieW5hbWUgdG8gd29yayBiZXR0ZXIgd2l0aCBkb3QgIi4iIG5vdGF0aW9uICgjMTY5NDkpCisKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jLmZpeGdldGhvc3RieW5hbWUJRnJpIE1hciAyMSAxMzoyNzoyNSAxOTk3CisrKysgdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYwlNb24gRmViICA1IDE0OjA5OjQwIDIwMDEKK0BAIC01Miw3ICs1Miw4IEBACisgY2hhciAgICpuYW1lOworIHsKKyAgICAgY2hhciAgICBkb3RfbmFtZVtNQVhIT1NUTkFNRUxFTiArIDFdOworLQorKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrICAgIAorICAgICAvKgorICAgICAgKiBEb24ndCBhcHBlbmQgZG90cyB0byB1bnF1YWxpZmllZCBuYW1lcy4gU3VjaCBuYW1lcyBhcmUgbGlrZWx5IHRvIGNvbWUKKyAgICAgICogZnJvbSBsb2NhbCBob3N0cyBmaWxlcyBvciBmcm9tIE5JUy4KK0BAIC02MSw4ICs2MiwxMiBAQAorICAgICBpZiAoc3RyY2hyKG5hbWUsICcuJykgPT0gMCB8fCBzdHJsZW4obmFtZSkgPj0gTUFYSE9TVE5BTUVMRU4gLSAxKSB7CisgCXJldHVybiAoZ2V0aG9zdGJ5bmFtZShuYW1lKSk7CisgICAgIH0gZWxzZSB7CistCXNwcmludGYoZG90X25hbWUsICIlcy4iLCBuYW1lKTsKKy0JcmV0dXJuIChnZXRob3N0YnluYW1lKGRvdF9uYW1lKSk7CisrICAgICAgICBzcHJpbnRmKGRvdF9uYW1lLCAiJXMuIiwgbmFtZSk7CisrICAgICAgICBocCA9IGdldGhvc3RieW5hbWUoZG90X25hbWUpOworKwlpZiAoaHApCisrCSAgICByZXR1cm4gaHA7CisrCWVsc2UKKysJICAgIHJldHVybiAoZ2V0aG9zdGJ5bmFtZShuYW1lKSk7CisgICAgIH0KKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTBfdXNhZ2ktaXB2Ni5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMF91c2FnaS1pcHY2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDQ3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTBfdXNhZ2ktaXB2Ni5wYXRjaApAQCAtMCwwICsxLDEyNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9maXhfb3B0aW9ucy5jIHRjcF93cmFwcGVyc183LjYvZml4X29wdGlvbnMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9maXhfb3B0aW9ucy5jCTE5OTctMDQtMDggMDI6Mjk6MTkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9maXhfb3B0aW9ucy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTEsNiArMTEsOSBAQAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrI2lmZGVmIElORVQ2CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KK0BAIC00MSw2ICs0NCwyMiBAQAorICAgICB1bnNpZ25lZCBpbnQgb3B0OworICAgICBpbnQgICAgIG9wdGxlbjsKKyAgICAgc3RydWN0IGluX2FkZHIgZHVtbXk7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOworKyAgICBpbnQgc3NsZW47CisrCisrICAgIC8qCisrICAgICAqIGNoZWNrIGlmIHRoaXMgaXMgQUZfSU5FVCBzb2NrZXQKKysgICAgICogWFhYIElQdjYgc3VwcG9ydD8KKysgICAgICovCisrICAgIHNzbGVuID0gc2l6ZW9mKHNzKTsKKysgICAgaWYgKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNzLCAmc3NsZW4pIDwgMCkgeworKwlzeXNsb2coTE9HX0VSUiwgImdldHBlZXJuYW1lOiAlbSIpOworKwljbGVhbl9leGl0KHJlcXVlc3QpOworKyAgICB9CisrICAgIGlmIChzcy5zc19mYW1pbHkgIT0gQUZfSU5FVCkKKysJcmV0dXJuOworKyNlbmRpZgorIAorICAgICBpZiAoKGlwID0gZ2V0cHJvdG9ieW5hbWUoImlwIikpICE9IDApCisgCWlwcHJvdG8gPSBpcC0+cF9wcm90bzsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC04NSwxMSArODUsMTggQEAKKyBmb3IgZGFlbW9uIHByb2Nlc3MgbmFtZXMgb3IgZm9yIGNsaWVudCB1c2VyIG5hbWVzLgorIC5JUCBcKGJ1CisgQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgbi5uLm4ubi9tLm0ubS5tXCcgaXMgaW50ZXJwcmV0ZWQgYXMgYQorLWBuZXQvbWFza1wnIHBhaXIuIEEgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYgYG5ldFwnIGlzIGVxdWFsIHRvIHRoZQorK2BuZXQvbWFza1wnIHBhaXIuIEFuIElQdjQgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYgYG5ldFwnIGlzIGVxdWFsIHRvIHRoZQorIGJpdHdpc2UgQU5EIG9mIHRoZSBhZGRyZXNzIGFuZCB0aGUgYG1hc2tcJy4gRm9yIGV4YW1wbGUsIHRoZSBuZXQvbWFzaworIHBhdHRlcm4gYDEzMS4xNTUuNzIuMC8yNTUuMjU1LjI1NC4wXCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZQorIHJhbmdlIGAxMzEuMTU1LjcyLjBcJyB0aHJvdWdoIGAxMzEuMTU1LjczLjI1NVwnLgorIC5JUCBcKGJ1CisrQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgW246bjpuOm46bjpuOm46bl0vbVwnIGlzIGludGVycHJldGVkIGFzIGEKKytgW25ldF0vcHJlZml4bGVuXCcgcGFpci4gQW4gSVB2NiBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZgorK2BwcmVmaXhsZW5cJyBiaXRzIG9mIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUgYHByZWZpeGxlblwnIGJpdHMgb2YgdGhlCisrYWRkcmVzcy4gRm9yIGV4YW1wbGUsIHRoZSBbbmV0XS9wcmVmaXhsZW4gcGF0dGVybgorK2BbM2ZmZTo1MDU6MjoxOjpdLzY0XCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZSByYW5nZQorK2AzZmZlOjUwNToyOjE6OlwnIHRocm91Z2ggYDNmZmU6NTA1OjI6MTpmZmZmOmZmZmY6ZmZmZjpmZmZmXCcuCisrLklQIFwoYnUKKyBXaWxkY2FyZHMgYCpcJyBhbmQgYD9cJyBjYW4gYmUgdXNlZCB0byBtYXRjaCBob3N0bmFtZXMgb3IgSVAgYWRkcmVzc2VzLiAgVGhpcworIG1ldGhvZCBvZiBtYXRjaGluZyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBuZXQvbWFza1wnIG1hdGNoaW5nLAorIGhvc3RuYW1lIG1hdGNoaW5nIGJlZ2lubmluZyB3aXRoIGAuXCcgb3IgSVAgYWRkcmVzcyBtYXRjaGluZyBlbmRpbmcgd2l0aCBgLlwnLgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6MjI6NTguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI0LDcgKzI0LDEzIEBACisgLyogU3lzdGVtIGxpYnJhcmllcy4gKi8KKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2lmZGVmIElOVDMyX1QKKysgICAgdHlwZWRlZiB1aW50MzJfdCB1X2ludDMyX3Q7CisrI2VuZGlmCisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitAQCAtMzMsNiArMzksOSBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzZXRqbXAuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmZGVmIElORVQ2CisrI2luY2x1ZGUgPG5ldGRiLmg+CisrI2VuZGlmCisgCisgZXh0ZXJuIGNoYXIgKmZnZXRzKCk7CisgZXh0ZXJuIGludCBlcnJubzsKK0BAIC04Miw2ICs5MSwxMCBAQAorIHN0YXRpYyBpbnQgaG9zdF9tYXRjaCgpOworIHN0YXRpYyBpbnQgc3RyaW5nX21hdGNoKCk7Cisgc3RhdGljIGludCBtYXNrZWRfbWF0Y2goKTsKKysjaWZkZWYgSU5FVDYKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaDQoKTsKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaDYoKTsKKysjZW5kaWYKKyAKKyAvKiBTaXplIG9mIGxvZ2ljYWwgbGluZSBidWZmZXIuICovCisgCitAQCAtMjg5LDYgKzMwMiwxMyBAQAorIHsKKyAgICAgaW50ICAgICBuOworIAorKyNpZmRlZiBJTkVUNgorKyAgICAvKiBjb252ZXJ0IElQdjQgbWFwcGVkIElQdjYgYWRkcmVzcyB0byBJUHY0IGFkZHJlc3MgKi8KKysgICAgaWYgKFNUUk5fRVEoc3RyaW5nLCAiOjpmZmZmOiIsIDcpCisrICAgICAgJiYgZG90X3F1YWRfYWRkcihzdHJpbmcgKyA3KSAhPSBJTkFERFJfTk9ORSkgeworKyAgICAgIHN0cmluZyArPSA3OworKyAgICB9CisrI2VuZGlmICAgIAorICNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworICAgICBpZiAoc3RyY2hyKHRvaywgJyonKSB8fCBzdHJjaHIodG9rLCc/JykpIHsgIC8qIGNvbnRhaW5zICcqJyBvciAnPycgKi8KKyAgICAgICAgIHJldHVybiAobWF0Y2hfcGF0dGVybl95bG8oc3RyaW5nLHRvaykpOyAJICAgICAgIAorQEAgLTMwNCwyMCArMzI0LDcyIEBACisgICAgIH0gZWxzZSBpZiAodG9rWyhuID0gc3RybGVuKHRvaykpIC0gMV0gPT0gJy4nKSB7CS8qIHByZWZpeCAqLworIAlyZXR1cm4gKFNUUk5fRVEodG9rLCBzdHJpbmcsIG4pKTsKKyAgICAgfSBlbHNlIHsJCQkJCS8qIGV4YWN0IG1hdGNoICovCisrI2lmZGVmIElORVQ2CisrCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKKysJc3RydWN0IHNvY2thZGRyX2luNiBwYXQsIGFkZHI7CisrCWludCBsZW4sIHJldDsKKysJY2hhciBjaDsKKysKKysJbGVuID0gc3RybGVuKHRvayk7CisrCWlmICgqdG9rID09ICdbJyAmJiB0b2tbbGVuIC0gMV0gPT0gJ10nKSB7CisrCSAgICBjaCA9IHRva1tsZW4gLSAxXTsKKysJICAgIHRva1tsZW4gLSAxXSA9ICdcMCc7CisrCSAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKwkgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKwkgICAgaWYgKChyZXQgPSBnZXRhZGRyaW5mbyh0b2sgKyAxLCBOVUxMLCAmaGludHMsICZyZXMpKSA9PSAwKSB7CisrCQltZW1jcHkoJnBhdCwgcmVzLT5haV9hZGRyLCBzaXplb2YocGF0KSk7CisrCQlmcmVlYWRkcmluZm8ocmVzKTsKKysJICAgIH0KKysJICAgIHRva1tsZW4gLSAxXSA9IGNoOworKwkgICAgaWYgKHJldCAhPSAwIHx8IGdldGFkZHJpbmZvKHN0cmluZywgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKQorKwkJcmV0dXJuIE5POworKwkgICAgbWVtY3B5KCZhZGRyLCByZXMtPmFpX2FkZHIsIHNpemVvZihhZGRyKSk7CisrCSAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysjaWZkZWYgTklfV0lUSFNDT1BFSUQKKysJICAgIGlmIChwYXQuc2luNl9zY29wZV9pZCAhPSAwICYmCisrCQlhZGRyLnNpbjZfc2NvcGVfaWQgIT0gcGF0LnNpbjZfc2NvcGVfaWQpCisrCQlyZXR1cm4gTk87CisrI2VuZGlmCisrCSAgICByZXR1cm4gKCFtZW1jbXAoJnBhdC5zaW42X2FkZHIsICZhZGRyLnNpbjZfYWRkciwKKysJCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKTsKKysJICAgIHJldHVybiAocmV0KTsKKysJfQorKyNlbmRpZgorIAlyZXR1cm4gKFNUUl9FUSh0b2ssIHN0cmluZykpOworICAgICB9CisgfQorIAorIC8qIG1hc2tlZF9tYXRjaCAtIG1hdGNoIGFkZHJlc3MgYWdhaW5zdCBuZXRudW1iZXIvbmV0bWFzayAqLworIAorKyNpZmRlZiBJTkVUNgorIHN0YXRpYyBpbnQgbWFza2VkX21hdGNoKG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpCisgY2hhciAgICpuZXRfdG9rOworIGNoYXIgICAqbWFza190b2s7CisgY2hhciAgICpzdHJpbmc7CisgeworKyAgICByZXR1cm4gKG1hc2tlZF9tYXRjaDQobmV0X3RvaywgbWFza190b2ssIHN0cmluZykgfHwKKysJICAgIG1hc2tlZF9tYXRjaDYobmV0X3RvaywgbWFza190b2ssIHN0cmluZykpOworK30KKysKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaDQobmV0X3RvaywgbWFza190b2ssIHN0cmluZykKKysjZWxzZQorK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoKG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpCisrI2VuZGlmCisrY2hhciAgICpuZXRfdG9rOworK2NoYXIgICAqbWFza190b2s7CisrY2hhciAgICpzdHJpbmc7CisreworKyNpZmRlZiBJTkVUNgorKyAgICB1X2ludDMyX3QgbmV0OworKyAgICB1X2ludDMyX3QgbWFzazsKKysgICAgdV9pbnQzMl90IGFkZHI7CisrI2Vsc2UKKyAgICAgdW5zaWduZWQgbG9uZyBuZXQ7CisgICAgIHVuc2lnbmVkIGxvbmcgbWFzazsKKyAgICAgdW5zaWduZWQgbG9uZyBhZGRyOworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBEaXNhbGxvdyBmb3JtcyBvdGhlciB0aGFuIGRvdHRlZCBxdWFkOiB0aGUgdHJlYXRtZW50IHRoYXQgaW5ldF9hZGRyKCkKK0BAIC0zMjksMTIgKzQwMSw3OCBAQAorIAlyZXR1cm4gKE5PKTsKKyAgICAgaWYgKChuZXQgPSBkb3RfcXVhZF9hZGRyKG5ldF90b2spKSA9PSBJTkFERFJfTk9ORQorIAl8fCAobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORSkgeworKyNpZm5kZWYgSU5FVDYKKyAJdGNwZF93YXJuKCJiYWQgbmV0L21hc2sgZXhwcmVzc2lvbjogJXMvJXMiLCBuZXRfdG9rLCBtYXNrX3Rvayk7CisrI2VuZGlmCisgCXJldHVybiAoTk8pOwkJCQkvKiBub3QgdGNwZF9qdW1wKCkgKi8KKyAgICAgfQorICAgICByZXR1cm4gKChhZGRyICYgbWFzaykgPT0gbmV0KTsKKyB9CisgCisrI2lmZGVmIElORVQ2Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g2KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpCisrY2hhciAgICpuZXRfdG9rOworK2NoYXIgICAqbWFza190b2s7CisrY2hhciAgICpzdHJpbmc7CisreworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbmV0LCBhZGRyOworKyAgICB1X2ludDMyX3QgbWFzazsKKysgICAgaW50IGxlbiwgbWFza19sZW4sIGkgPSAwOworKyAgICBjaGFyIGNoOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoZ2V0YWRkcmluZm8oc3RyaW5nLCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApCisrCXJldHVybiBOTzsKKysgICAgbWVtY3B5KCZhZGRyLCByZXMtPmFpX2FkZHIsIHNpemVvZihhZGRyKSk7CisrICAgIGZyZWVhZGRyaW5mbyhyZXMpOworKworKyAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHIuc2luNl9hZGRyKSkgeworKwlpZiAoKCoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkclsxMl0gPSBkb3RfcXVhZF9hZGRyKG5ldF90b2spKSA9PSBJTkFERFJfTk9ORQorKwkgfHwgKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUpCisrCSAgICByZXR1cm4gKE5PKTsKKysJcmV0dXJuICgoKih1X2ludDMyX3QgKikmYWRkci5zaW42X2FkZHIuczZfYWRkclsxMl0gJiBtYXNrKSA9PSAqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdKTsKKysgICAgfQorKworKyAgICAvKiBtYXRjaCBJUHY2IGFkZHJlc3MgYWdhaW5zdCBuZXRudW1iZXIvcHJlZml4bGVuICovCisrICAgIGxlbiA9IHN0cmxlbihuZXRfdG9rKTsKKysgICAgaWYgKCpuZXRfdG9rICE9ICdbJyB8fCBuZXRfdG9rW2xlbiAtIDFdICE9ICddJykKKysJcmV0dXJuIE5POworKyAgICBjaCA9IG5ldF90b2tbbGVuIC0gMV07CisrICAgIG5ldF90b2tbbGVuIC0gMV0gPSAnXDAnOworKyAgICBpZiAoZ2V0YWRkcmluZm8obmV0X3RvayArIDEsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkgeworKwluZXRfdG9rW2xlbiAtIDFdID0gY2g7CisrCXJldHVybiBOTzsKKysgICAgfQorKyAgICBtZW1jcHkoJm5ldCwgcmVzLT5haV9hZGRyLCBzaXplb2YobmV0KSk7CisrICAgIGZyZWVhZGRyaW5mbyhyZXMpOworKyAgICBuZXRfdG9rW2xlbiAtIDFdID0gY2g7CisrICAgIGlmICgobWFza19sZW4gPSBhdG9pKG1hc2tfdG9rKSkgPCAwIHx8IG1hc2tfbGVuID4gMTI4KQorKwlyZXR1cm4gTk87CisrCisrI2lmZGVmIE5JX1dJVEhTQ09QRUlECisrICAgIGlmIChuZXQuc2luNl9zY29wZV9pZCAhPSAwICYmIGFkZHIuc2luNl9zY29wZV9pZCAhPSBuZXQuc2luNl9zY29wZV9pZCkKKysJcmV0dXJuIE5POworKyNlbmRpZgorKyAgICB3aGlsZSAobWFza19sZW4gPiAwKSB7CisrCWlmIChtYXNrX2xlbiA8IDMyKSB7CisrCSAgICBtYXNrID0gaHRvbmwofigweGZmZmZmZmZmID4+IG1hc2tfbGVuKSk7CisrCSAgICBpZiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gJiBtYXNrKSAhPSAoKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyW2ldICYgbWFzaykpCisrCQlyZXR1cm4gTk87CisrCSAgICBicmVhazsKKysJfQorKwlpZiAoKih1X2ludDMyX3QgKikmYWRkci5zaW42X2FkZHIuczZfYWRkcltpXSAhPSAqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbaV0pCisrCSAgICByZXR1cm4gTk87CisrCWkgKz0gNDsKKysJbWFza19sZW4gLT0gMzI7CisrICAgIH0KKysgICAgcmV0dXJuIFlFUzsKKyt9CisrI2VuZGlmIC8qIElORVQ2ICovCisrCisgI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisgLyogTm90ZTogdGhpcyBmZWF0dXJlIGhhcyBiZWVuIGFkYXB0ZWQgaW4gYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdheQorICAgIGZyb20gVGF0dSBZbG9uZW4ncyBsYXN0IFNTSCB2ZXJzaW9uIHVuZGVyIGZyZWUgbGljZW5zZSBieSAKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkxOTk3LTAzLTIxIDE5OjI3OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAwNC0wNC0xMCAxOToyMjo0NC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw3ICsyMSw3IEBACisgCUBlY2hvICIJZHluaXggZXBpeCBlc2l4IGZyZWVic2QgaHB1eCBpcml4NCBpcml4NSBpcml4NiBpc2MgaXVuaXgiCisgCUBlY2hvICIJbGludXggbWFjaHRlbiBtaXBzKHVudGVzdGVkKSBuY3JzdnI0IG5ldGJzZCBuZXh0IG9zZiBwb3dlcl91bml4XzIxMSIKKyAJQGVjaG8gIglwdHgtMi54IHB0eC1nZW5lcmljIHB5cmFtaWQgc2NvIHNjby1uaXMgc2NvLW9kMiBzY28tb3M1IHNpbml4IHN1bm9zNCIKKy0JQGVjaG8gIglzdW5vczQwIHN1bm9zNSBzeXN2NCB0YW5kZW0gdWx0cml4IHVuaWNvczcgdW5pY29zOCB1bml4d2FyZTEgdW5peHdhcmUyIgorKwlAZWNobyAiCXN1bm9zNDAgc3Vub3M1IHNvbGFyaXM4IHN5c3Y0IHRhbmRlbSB1bHRyaXggdW5pY29zNyB1bmljb3M4IHVuaXh3YXJlMSB1bml4d2FyZTIiCisgCUBlY2hvICIJdXRzMjE1IHV4cCIKKyAJQGVjaG8KKyAJQGVjaG8gIklmIG5vbmUgb2YgdGhlc2UgbWF0Y2ggeW91ciBlbnZpcm9ubWVudCwgZWRpdCB0aGUgc3lzdGVtIgorQEAgLTEzMSwyMCArMTMxLDM0IEBACisgCU5FVEdST1VQPS1ETkVUR1JPVVAgVExJPSBTWVNUWVBFPSItc3lzdHlwZSBic2Q0MyIgYWxsCisgCisgIyBGcmVlYnNkIGFuZCBsaW51eCBieSBkZWZhdWx0IGhhdmUgbm8gTklTLgorLTM4NmJzZCBuZXRic2QgYnNkb3M6CisrMzg2YnNkIGJzZG9zOgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKyAJTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IE5FVEdST1VQPSBUTEk9IFwKKyAJRVhUUkFfQ0ZMQUdTPS1EU1lTX0VSUkxJU1RfREVGSU5FRCBWU1lTTE9HPSBhbGwKKyAKKyBmcmVlYnNkOgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKysJTElCUz0iLUwvdXNyL2xvY2FsL3Y2L2xpYiAtbGluZXQ2IiBcCisgCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCistCUVYVFJBX0NGTEFHUz0tRFNZU19FUlJMSVNUX0RFRklORUQgVlNZU0xPRz0gYWxsCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESU5FVDYgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIFwKKysJVlNZU0xPRz0gYWxsCisrCisrbmV0YnNkOgorKwlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKysJTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IE5FVEdST1VQPSBUTEk9IFwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURJTkVUNiAtRHNzX2ZhbWlseT1fX3NzX2ZhbWlseSAtRHNzX2xlbj1fX3NzX2xlbiIgVlNZU0xPRz0gYWxsCisgCisgbGludXg6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorLQlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj1zZXRlbnYubyBcCistCU5FVEdST1VQPSBUTEk9IEVYVFJBX0NGTEFHUz0iLURCUk9LRU5fU09fTElOR0VSIiBhbGwKKysJTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlORVRHUk9VUD0iLURORVRHUk9VUCIgVExJPSBWU1lTTE9HPSBCVUdTPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtRElORVQ2PTEgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIGFsbAorKworK2dudToKKysJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTkVUR1JPVVA9LURORVRHUk9VUCBUTEk9IFZTWVNMT0c9IEJVR1M9IFwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIiBhbGwKKyAKKyAjIFRoaXMgaXMgZ29vZCBmb3IgbWFueSBTWVNWK0JTRCBoeWJyaWRzIHdpdGggTklTLCBwcm9iYWJseSBhbHNvIGZvciBIUC1VWCA3LnguCisgaHB1eCBocHV4OCBocHV4OSBocHV4MTA6CitAQCAtMTk2LDYgKzIxMCwxMyBAQAorIAlORVRHUk9VUD0tRE5FVEdST1VQIEFVWF9PQko9c2V0ZW52Lm8gVExJPS1EVExJIFwKKyAJQlVHUz0iJChCVUdTKSAtRFNPTEFSSVNfMjRfR0VUSE9TVEJZTkFNRV9CVUciIGFsbAorIAorKyMgU3VuT1MgNS44IGlzIGFub3RoZXIgU1lTVjQgdmFyaWFudCwgYnV0IGhhcyBJUHY2IHN1cHBvcnQKKytzb2xhcmlzODoKKysJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9Ii1sc29ja2V0IC1sbnNsIiBSQU5MSUI9ZWNobyBBUkZMQUdTPXJ2IFZTWVNMT0c9IFwKKysJTkVUR1JPVVA9LURORVRHUk9VUCBBVVhfT0JKPXNldGVudi5vIFRMST0tRFRMSSBcCisrCUVYVFJBX0NGTEFHUz0iLURJTkVUNiAtRE5PX0NMT05FX0RFVklDRSAtRElOVDMyX1QiIGFsbAorKworICMgR2VuZXJpYyBTWVNWNDAKKyBlc2l4IHN5c3Y0OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYwkxOTk2LTAyLTExIDE3OjAxOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNTgsOSArNTgsMzEgQEAKKyB7CisgICAgIGNoYXIgICAqY3A7CisgCisrI2lmZGVmIElORVQ2CisrICAgIGludCBicmFja2V0ID0gMDsKKysKKysgICAgZm9yIChjcCA9IHN0cmluZzsgY3AgJiYgKmNwOyBjcCsrKSB7CisrCXN3aXRjaCAoKmNwKSB7CisrCWNhc2UgJ1snOgorKwkgICAgYnJhY2tldCsrOworKwkgICAgYnJlYWs7CisrCWNhc2UgJ10nOgorKwkgICAgYnJhY2tldC0tOworKwkgICAgYnJlYWs7CisrCWRlZmF1bHQ6CisrCSAgICBpZiAoYnJhY2tldCA9PSAwICYmICpjcCA9PSBkZWxpbWl0ZXIpIHsKKysJCSpjcCsrID0gMDsKKysJCXJldHVybiBjcDsKKysJICAgIH0KKysJICAgIGJyZWFrOworKwl9CisrICAgIH0KKysgICAgcmV0dXJuIChOVUxMKTsKKysjZWxzZQorICAgICBpZiAoKGNwID0gc3RyY2hyKHN0cmluZywgZGVsaW1pdGVyKSkgIT0gMCkKKyAJKmNwKysgPSAwOworICAgICByZXR1cm4gKGNwKTsKKysjZW5kaWYKKyB9CisgCisgLyogZG90X3F1YWRfYWRkciAtIGNvbnZlcnQgZG90dGVkIHF1YWQgdG8gaW50ZXJuYWwgZm9ybSAqLworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9yZWZ1c2UuYyB0Y3Bfd3JhcHBlcnNfNy42L3JlZnVzZS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JlZnVzZS5jCTE5OTQtMTItMjggMTc6NDI6NDAuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZWZ1c2UuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDcgKzI1LDEyIEBACisgdm9pZCAgICByZWZ1c2UocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3lzbG9nKGRlbnlfc2V2ZXJpdHksICJyZWZ1c2VkIGNvbm5lY3QgZnJvbSAlcyAoJXMpIiwKKysJICAgZXZhbF9jbGllbnQocmVxdWVzdCksIGV2YWxfaG9zdGFkZHIocmVxdWVzdC0+Y2xpZW50KSk7CisrI2Vsc2UKKyAgICAgc3lzbG9nKGRlbnlfc2V2ZXJpdHksICJyZWZ1c2VkIGNvbm5lY3QgZnJvbSAlcyIsIGV2YWxfY2xpZW50KHJlcXVlc3QpKTsKKysjZW5kaWYKKyAgICAgY2xlYW5fZXhpdChyZXF1ZXN0KTsKKyAgICAgLyogTk9UUkVBQ0hFRCAqLworIH0KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYwkxOTk1LTAxLTAyIDE2OjExOjM0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OCwyMCArNjgsNTAgQEAKKyAvKiByZmM5MzEgLSByZXR1cm4gcmVtb3RlIHVzZXIgbmFtZSwgZ2l2ZW4gc29ja2V0IHN0cnVjdHVyZXMgKi8KKyAKKyB2b2lkICAgIHJmYzkzMShybXRfc2luLCBvdXJfc2luLCBkZXN0KQorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBzb2NrYWRkciAqcm10X3NpbjsKKytzdHJ1Y3Qgc29ja2FkZHIgKm91cl9zaW47CisrI2Vsc2UKKyBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnJtdF9zaW47Cisgc3RydWN0IHNvY2thZGRyX2luICpvdXJfc2luOworKyNlbmRpZgorIGNoYXIgICAqZGVzdDsKKyB7CisgICAgIHVuc2lnbmVkIHJtdF9wb3J0OworICAgICB1bnNpZ25lZCBvdXJfcG9ydDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugcm10X3F1ZXJ5X3NpbjsKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugb3VyX3F1ZXJ5X3NpbjsKKysgICAgaW50IGFsZW47CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHJtdF9xdWVyeV9zaW47CisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBvdXJfcXVlcnlfc2luOworKyNlbmRpZgorICAgICBjaGFyICAgIHVzZXJbMjU2XTsJCQkvKiBYWFggKi8KKyAgICAgY2hhciAgICBidWZmZXJbNTEyXTsJCS8qIFhYWCAqLworICAgICBjaGFyICAgKmNwOworICAgICBjaGFyICAgKnJlc3VsdCA9IHVua25vd247CisgICAgIEZJTEUgICAqZnA7CisgCisrI2lmZGVmIElORVQ2CisrICAgIC8qIGFkZHJlc3MgZmFtaWx5IG11c3QgYmUgdGhlIHNhbWUgKi8KKysgICAgaWYgKHJtdF9zaW4tPnNhX2ZhbWlseSAhPSBvdXJfc2luLT5zYV9mYW1pbHkpIHsKKysJU1RSTl9DUFkoZGVzdCwgcmVzdWx0LCBTVFJJTkdfTEVOR1RIKTsKKysJcmV0dXJuOworKyAgICB9CisrICAgIHN3aXRjaCAob3VyX3Npbi0+c2FfZmFtaWx5KSB7CisrICAgIGNhc2UgQUZfSU5FVDoKKysJYWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworKwlicmVhazsKKysgICAgY2FzZSBBRl9JTkVUNjoKKysJYWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKysJYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrCVNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CisrCXJldHVybjsKKysgICAgfQorKyNlbmRpZgorKworICAgICAvKgorICAgICAgKiBVc2Ugb25lIHVuYnVmZmVyZWQgc3RkaW8gc3RyZWFtIGZvciB3cml0aW5nIHRvIGFuZCBmb3IgcmVhZGluZyBmcm9tCisgICAgICAqIHRoZSBSRkM5MzEgZXRjLiBzZXJ2ZXIuIFRoaXMgaXMgZG9uZSBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZSBTdW5PUworQEAgLTkyLDcgKzEyMiwxMSBAQAorICAgICAgKiBzb2NrZXRzLgorICAgICAgKi8KKyAKKysjaWZkZWYgSU5FVDYKKysgICAgaWYgKChmcCA9IGZzb2NrZXQob3VyX3Npbi0+c2FfZmFtaWx5LCBTT0NLX1NUUkVBTSwgMCkpICE9IDApIHsKKysjZWxzZQorICAgICBpZiAoKGZwID0gZnNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpICE9IDApIHsKKysjZW5kaWYKKyAJc2V0YnVmKGZwLCAoY2hhciAqKSAwKTsKKyAKKyAJLyoKK0BAIC0xMTIsNiArMTQ2LDI1IEBACisgCSAgICAgKiBhZGRyZXNzZXMgZnJvbSB0aGUgcXVlcnkgc29ja2V0LgorIAkgICAgICovCisgCisrI2lmZGVmIElORVQ2CisrCSAgICBtZW1jcHkoJm91cl9xdWVyeV9zaW4sIG91cl9zaW4sIGFsZW4pOworKwkgICAgbWVtY3B5KCZybXRfcXVlcnlfc2luLCBybXRfc2luLCBhbGVuKTsKKysJICAgIHN3aXRjaCAob3VyX3Npbi0+c2FfZmFtaWx5KSB7CisrCSAgICBjYXNlIEFGX0lORVQ6CisrCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZvdXJfcXVlcnlfc2luKS0+c2luX3BvcnQgPSBodG9ucyhBTllfUE9SVCk7CisrCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZybXRfcXVlcnlfc2luKS0+c2luX3BvcnQgPSBodG9ucyhSRkM5MzFfUE9SVCk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQUZfSU5FVDY6CisrCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmb3VyX3F1ZXJ5X3NpbiktPnNpbjZfcG9ydCA9IGh0b25zKEFOWV9QT1JUKTsKKysJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSZybXRfcXVlcnlfc2luKS0+c2luNl9wb3J0ID0gaHRvbnMoUkZDOTMxX1BPUlQpOworKwkJYnJlYWs7CisrCSAgICB9CisrCisrCSAgICBpZiAoYmluZChmaWxlbm8oZnApLCAoc3RydWN0IHNvY2thZGRyICopICYgb3VyX3F1ZXJ5X3NpbiwKKysJCSAgICAgYWxlbikgPj0gMCAmJgorKwkJY29ubmVjdChmaWxlbm8oZnApLCAoc3RydWN0IHNvY2thZGRyICopICYgcm10X3F1ZXJ5X3NpbiwKKysJCQlhbGVuKSA+PSAwKSB7CisrI2Vsc2UKKyAJICAgIG91cl9xdWVyeV9zaW4gPSAqb3VyX3NpbjsKKyAJICAgIG91cl9xdWVyeV9zaW4uc2luX3BvcnQgPSBodG9ucyhBTllfUE9SVCk7CisgCSAgICBybXRfcXVlcnlfc2luID0gKnJtdF9zaW47CitAQCAtMTIxLDYgKzE3NCw3IEBACisgCQkgICAgIHNpemVvZihvdXJfcXVlcnlfc2luKSkgPj0gMCAmJgorIAkJY29ubmVjdChmaWxlbm8oZnApLCAoc3RydWN0IHNvY2thZGRyICopICYgcm10X3F1ZXJ5X3NpbiwKKyAJCQlzaXplb2Yocm10X3F1ZXJ5X3NpbikpID49IDApIHsKKysjZW5kaWYKKyAKKyAJCS8qCisgCQkgKiBTZW5kIHF1ZXJ5IHRvIHNlcnZlci4gTmVnbGVjdCB0aGUgcmlzayB0aGF0IGEgMTMtYnl0ZQorQEAgLTEyOSw4ICsxODMsMTMgQEAKKyAJCSAqLworIAorIAkJZnByaW50ZihmcCwgIiV1LCV1XHJcbiIsCisrI2lmZGVmIElORVQ2CisrCQkJbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilybXRfc2luKS0+c2luX3BvcnQpLAorKwkJCW50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopb3VyX3NpbiktPnNpbl9wb3J0KSk7CisrI2Vsc2UKKyAJCQludG9ocyhybXRfc2luLT5zaW5fcG9ydCksCisgCQkJbnRvaHMob3VyX3Npbi0+c2luX3BvcnQpKTsKKysjZW5kaWYKKyAJCWZmbHVzaChmcCk7CisgCisgCQkvKgorQEAgLTE0NCw4ICsyMDMsMTMgQEAKKyAJCSAgICAmJiBmZXJyb3IoZnApID09IDAgJiYgZmVvZihmcCkgPT0gMAorIAkJICAgICYmIHNzY2FuZihidWZmZXIsICIldSAsICV1IDogVVNFUklEIDolKlteOl06JTI1NXMiLAorIAkJCSAgICAgICZybXRfcG9ydCwgJm91cl9wb3J0LCB1c2VyKSA9PSAzCisrI2lmZGVmIElORVQ2CisrCQkgICAgJiYgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilybXRfc2luKS0+c2luX3BvcnQpID09IHJtdF9wb3J0CisrCQkgICAgJiYgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilvdXJfc2luKS0+c2luX3BvcnQpID09IG91cl9wb3J0KSB7CisrI2Vsc2UKKyAJCSAgICAmJiBudG9ocyhybXRfc2luLT5zaW5fcG9ydCkgPT0gcm10X3BvcnQKKyAJCSAgICAmJiBudG9ocyhvdXJfc2luLT5zaW5fcG9ydCkgPT0gb3VyX3BvcnQpIHsKKysjZW5kaWYKKyAKKyAJCSAgICAvKgorIAkJICAgICAqIFN0cmlwIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybi4gSXQgaXMgcGFydCBvZiB0aGUKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc2NhZmZvbGQuYyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc2NhZmZvbGQuYwkxOTk3LTAzLTIxIDE5OjI3OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDcgKzI1LDkgQEAKKyAjZGVmaW5lCUlOQUREUl9OT05FCSgtMSkJCS8qIFhYWCBzaG91bGQgYmUgMHhmZmZmZmZmZiAqLworICNlbmRpZgorIAorKyNpZm5kZWYgSU5FVDYKKyBleHRlcm4gY2hhciAqbWFsbG9jKCk7CisrI2VuZGlmCisgCisgLyogQXBwbGljYXRpb24tc3BlY2lmaWMuICovCisgCitAQCAtMzksNiArNDEsNyBAQAorIGludCAgICAgZGVueV9zZXZlcml0eSA9IExPR19XQVJOSU5HOworIGludCAgICAgcmZjOTMxX3RpbWVvdXQgPSBSRkM5MzFfVElNRU9VVDsKKyAKKysjaWZuZGVmIElORVQ2CisgLyogZHVwX2hvc3RlbnQgLSBjcmVhdGUgaG9zdGVudCBpbiBvbmUgbWVtb3J5IGJsb2NrICovCisgCisgc3RhdGljIHN0cnVjdCBob3N0ZW50ICpkdXBfaG9zdGVudChocCkKK0BAIC03Myw5ICs3Niw0NiBAQAorICAgICB9CisgICAgIHJldHVybiAoJmhiLT5ob3N0KTsKKyB9CisrI2VuZGlmCisgCisgLyogZmluZF9pbmV0X2FkZHIgLSBmaW5kIGFsbCBhZGRyZXNzZXMgZm9yIHRoaXMgaG9zdCwgcmVzdWx0IHRvIGZyZWUoKSAqLworIAorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBhZGRyaW5mbyAqZmluZF9pbmV0X2FkZHIoaG9zdCkKKytjaGFyICAgKmhvc3Q7CisreworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrCisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoZ2V0YWRkcmluZm8oaG9zdCwgTlVMTCwgJmhpbnRzLCAmcmVzKSA9PSAwKQorKwlyZXR1cm4gKHJlcyk7CisrCisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRTsKKysgICAgaWYgKGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkgeworKwl0Y3BkX3dhcm4oIiVzOiBob3N0IG5vdCBmb3VuZCIsIGhvc3QpOworKwlyZXR1cm4gKDApOworKyAgICB9CisrICAgIGlmIChyZXMtPmFpX2ZhbWlseSAhPSBBRl9JTkVUNiAmJiByZXMtPmFpX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisrCXRjcGRfd2FybigiJWQ6IG5vdCBhbiBpbnRlcm5ldCBob3N0IiwgcmVzLT5haV9mYW1pbHkpOworKwlmcmVlYWRkcmluZm8ocmVzKTsKKysJcmV0dXJuICgwKTsKKysgICAgfQorKyAgICBpZiAoIXJlcy0+YWlfY2Fub25uYW1lKSB7CisrCXRjcGRfd2FybigiJXM6IGhvc3RuYW1lIGFsaWFzIiwgaG9zdCk7CisrCXRjcGRfd2FybigiKGNhbm5vdCBvYnRhaW4gb2ZmaWNpYWwgbmFtZSkiLCByZXMtPmFpX2Nhbm9ubmFtZSk7CisrICAgIH0gZWxzZSBpZiAoU1RSX05FKGhvc3QsIHJlcy0+YWlfY2Fub25uYW1lKSkgeworKwl0Y3BkX3dhcm4oIiVzOiBob3N0bmFtZSBhbGlhcyIsIGhvc3QpOworKwl0Y3BkX3dhcm4oIihvZmZpY2lhbCBuYW1lOiAlLipzKSIsIFNUUklOR19MRU5HVEgsIHJlcy0+YWlfY2Fub25uYW1lKTsKKysgICAgfQorKyAgICByZXR1cm4gKHJlcyk7CisrfQorKyNlbHNlCisgc3RydWN0IGhvc3RlbnQgKmZpbmRfaW5ldF9hZGRyKGhvc3QpCisgY2hhciAgICpob3N0OworIHsKK0BAIC0xMTgsNiArMTU4LDcgQEAKKyAgICAgfQorICAgICByZXR1cm4gKGR1cF9ob3N0ZW50KGhwKSk7CisgfQorKyNlbmRpZgorIAorIC8qIGNoZWNrX2RucyAtIGdpdmUgZWFjaCBhZGRyZXNzIHRob3JvdWdoIHdvcmtvdXQsIHJldHVybiBhZGRyZXNzIGNvdW50ICovCisgCitAQCAtMTI1LDggKzE2NiwxMyBAQAorIGNoYXIgICAqaG9zdDsKKyB7CisgICAgIHN0cnVjdCByZXF1ZXN0X2luZm8gcmVxdWVzdDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2luOworKyAgICBzdHJ1Y3QgYWRkcmluZm8gKmhwLCAqcmVzOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisgICAgIHN0cnVjdCBob3N0ZW50ICpocDsKKysjZW5kaWYKKyAgICAgaW50ICAgICBjb3VudDsKKyAgICAgY2hhciAgICphZGRyOworIAorQEAgLTEzNCwxMSArMTgwLDE4IEBACisgCXJldHVybiAoMCk7CisgICAgIHJlcXVlc3RfaW5pdCgmcmVxdWVzdCwgUlFfQ0xJRU5UX1NJTiwgJnNpbiwgMCk7CisgICAgIHNvY2tfbWV0aG9kcygmcmVxdWVzdCk7CisrI2lmbmRlZiBJTkVUNgorICAgICBtZW1zZXQoKGNoYXIgKikgJnNpbiwgMCwgc2l6ZW9mKHNpbikpOworICAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisrI2VuZGlmCisgCisrI2lmZGVmIElORVQ2CisrICAgIGZvciAocmVzID0gaHAsIGNvdW50ID0gMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQsIGNvdW50KyspIHsKKysJbWVtY3B5KCZzaW4sIHJlcy0+YWlfYWRkciwgcmVzLT5haV9hZGRybGVuKTsKKysjZWxzZQorICAgICBmb3IgKGNvdW50ID0gMDsgKGFkZHIgPSBocC0+aF9hZGRyX2xpc3RbY291bnRdKSAhPSAwOyBjb3VudCsrKSB7CisgCW1lbWNweSgoY2hhciAqKSAmc2luLnNpbl9hZGRyLCBhZGRyLCBzaXplb2Yoc2luLnNpbl9hZGRyKSk7CisrI2VuZGlmCisgCisgCS8qCisgCSAqIEZvcmNlIGhvc3QgbmFtZSBhbmQgYWRkcmVzcyBjb252ZXJzaW9ucy4gVXNlIHRoZSByZXF1ZXN0IHN0cnVjdHVyZQorQEAgLTE1MSw3ICsyMDQsMTEgQEAKKyAJICAgIHRjcGRfd2FybigiaG9zdCBhZGRyZXNzICVzLT5uYW1lIGxvb2t1cCBmYWlsZWQiLAorIAkJICAgICAgZXZhbF9ob3N0YWRkcihyZXF1ZXN0LmNsaWVudCkpOworICAgICB9CisrI2lmZGVmIElORVQ2CisrICAgIGZyZWVhZGRyaW5mbyhocCk7CisrI2Vsc2UKKyAgICAgZnJlZSgoY2hhciAqKSBocCk7CisrI2VuZGlmCisgICAgIHJldHVybiAoY291bnQpOworIH0KKyAKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc2NhZmZvbGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc2NhZmZvbGQuaAkxOTk0LTEyLTMxIDE4OjE5OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuaAkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQsNiArNCwxMCBAQAorICAgKiBBdXRob3I6IFdpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKyAgICovCisgCisrI2lmZGVmIElORVQ2CisrZXh0ZXJuIHN0cnVjdCBhZGRyaW5mbyAqZmluZF9pbmV0X2FkZHIoKTsKKysjZWxzZQorIGV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZmluZF9pbmV0X2FkZHIoKTsKKysjZW5kaWYKKyBleHRlcm4gaW50IGNoZWNrX2RucygpOworIGV4dGVybiBpbnQgY2hlY2tfcGF0aCgpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9zb2NrZXQuYyB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NvY2tldC5jCTIwMDQtMDQtMTAgMTk6MjI6NTguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI0LDEzICsyNCwyMiBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaWZkZWYgSU5UMzJfVAorK3R5cGVkZWYgdWludDMyX3QgdV9pbnQzMl90OworKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPG5ldGRiLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5c2xvZy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKysjaWZkZWYgSU5FVDYKKysjaWZuZGVmIE5JX1dJVEhTQ09QRUlECisrI2RlZmluZSBOSV9XSVRIU0NPUEVJRAkwCisrI2VuZGlmCisrI2Vsc2UKKyBleHRlcm4gY2hhciAqaW5ldF9udG9hKCk7CisrI2VuZGlmCisgCisgLyogTG9jYWwgc3R1ZmYuICovCisgCitAQCAtNzksOCArODgsMTMgQEAKKyB2b2lkICAgIHNvY2tfaG9zdChyZXF1ZXN0KQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgY2xpZW50OworKyAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2VydmVyOworKyNlbHNlCisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKysjZW5kaWYKKyAgICAgaW50ICAgICBsZW47CisgICAgIGNoYXIgICAgYnVmW0JVRlNJWl07CisgICAgIGludCAgICAgZmQgPSByZXF1ZXN0LT5mZDsKK0BAIC0xMDksNyArMTIzLDExIEBACisgCW1lbXNldChidWYsIDAgc2l6ZW9mKGJ1ZikpOworICNlbmRpZgorICAgICB9CisrI2lmZGVmIElORVQ2CisrICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSZjbGllbnQ7CisrI2Vsc2UKKyAgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAmY2xpZW50OworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBEZXRlcm1pbmUgdGhlIHNlcnZlciBiaW5kaW5nLiBUaGlzIGlzIHVzZWQgZm9yIGNsaWVudCB1c2VybmFtZQorQEAgLTEyMiw3ICsxNDAsMTEgQEAKKyAJdGNwZF93YXJuKCJnZXRzb2NrbmFtZTogJW0iKTsKKyAJcmV0dXJuOworICAgICB9CisrI2lmZGVmIElORVQ2CisrICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXI7CisrI2Vsc2UKKyAgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAmc2VydmVyOworKyNlbmRpZgorIH0KKyAKKyAvKiBzb2NrX2hvc3RhZGRyIC0gbWFwIGVuZHBvaW50IGFkZHJlc3MgdG8gcHJpbnRhYmxlIGZvcm0gKi8KK0BAIC0xMzAsMTAgKzE1MiwyNiBAQAorIHZvaWQgICAgc29ja19ob3N0YWRkcihob3N0KQorIHN0cnVjdCBob3N0X2luZm8gKmhvc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IGhvc3QtPnNpbjsKKysgICAgaW50IHNhbGVuOworKworKyAgICBpZiAoIXNpbikKKysJcmV0dXJuOworKyNpZmRlZiBTSU42X0xFTgorKyAgICBzYWxlbiA9IHNpbi0+c2FfbGVuOworKyNlbHNlCisrICAgIHNhbGVuID0gKHNpbi0+c2FfZmFtaWx5ID09IEFGX0lORVQpID8gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikKKysJCQkJCTogc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworKyNlbmRpZgorKyAgICBnZXRuYW1laW5mbyhzaW4sIHNhbGVuLCBob3N0LT5hZGRyLCBzaXplb2YoaG9zdC0+YWRkciksCisrCQlOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCB8IE5JX1dJVEhTQ09QRUlEKTsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IGhvc3QtPnNpbjsKKyAKKyAgICAgaWYgKHNpbiAhPSAwKQorIAlTVFJOX0NQWShob3N0LT5hZGRyLCBpbmV0X250b2Eoc2luLT5zaW5fYWRkciksIHNpemVvZihob3N0LT5hZGRyKSk7CisrI2VuZGlmCisgfQorIAorIC8qIHNvY2tfaG9zdG5hbWUgLSBtYXAgZW5kcG9pbnQgYWRkcmVzcyB0byBob3N0IG5hbWUgKi8KK0BAIC0xNDEsNiArMTc5LDE2MCBAQAorIHZvaWQgICAgc29ja19ob3N0bmFtZShob3N0KQorIHN0cnVjdCBob3N0X2luZm8gKmhvc3Q7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IGhvc3QtPnNpbjsKKysgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjQ7CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlcywgKnJlczAgPSBOVUxMOworKyAgICBpbnQgc2FsZW4sIGFsZW4sIGVyciA9IDE7CisrICAgIGNoYXIgKmFwID0gTlVMTCwgKnJhcCwgaG5hbWVbTklfTUFYSE9TVF07CisrCisrICAgIGlmIChzaW4gIT0gTlVMTCkgeworKwlpZiAoc2luLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKysJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbjsKKysKKysJICAgIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworKwkJbWVtc2V0KCZzaW40LCAwLCBzaXplb2Yoc2luNCkpOworKyNpZmRlZiBTSU42X0xFTgorKwkJc2luNC5zaW5fbGVuID0gc2l6ZW9mKHNpbjQpOworKyNlbmRpZgorKwkJc2luNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysJCXNpbjQuc2luX3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisrCQlzaW40LnNpbl9hZGRyLnNfYWRkciA9ICoodV9pbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkci5zNl9hZGRyWzEyXTsKKysJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNDsKKysJICAgIH0KKysJfQorKwlzd2l0Y2ggKHNpbi0+c2FfZmFtaWx5KSB7CisrCWNhc2UgQUZfSU5FVDoKKysJICAgIGFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzaW4pLT5zaW5fYWRkcjsKKysJICAgIGFsZW4gPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworKwkgICAgc2FsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKysJICAgIGJyZWFrOworKwljYXNlIEFGX0lORVQ2OgorKwkgICAgYXAgPSAoY2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzaW4pLT5zaW42X2FkZHI7CisrCSAgICBhbGVuID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisrCSAgICBzYWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKysJICAgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgICAgYnJlYWs7CisrCX0KKysJaWYgKGFwKQorKwkgICAgZXJyID0gZ2V0bmFtZWluZm8oc2luLCBzYWxlbiwgaG5hbWUsIHNpemVvZihobmFtZSksCisrCQkJICAgICAgTlVMTCwgMCwgTklfV0lUSFNDT1BFSUQgfCBOSV9OQU1FUkVRRCk7CisrICAgIH0KKysgICAgaWYgKCFlcnIpIHsKKysKKysJU1RSTl9DUFkoaG9zdC0+bmFtZSwgaG5hbWUsIHNpemVvZihob3N0LT5uYW1lKSk7CisrCisrCS8qIHJlamVjdCBudW1lcmljIGFkZHJlc3NlcyAqLworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfZmFtaWx5ID0gc2luLT5zYV9mYW1pbHk7CisrCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRSB8IEFJX05VTUVSSUNIT1NUOworKwlpZiAoKGVyciA9IGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApID09IDApKSB7CisrCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisrCSAgICByZXMwID0gTlVMTDsKKysJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL25hbWUgbWlzbWF0Y2g6ICIKKysJCSAgICAgICJyZXZlcnNlIGxvb2t1cCByZXN1bHRzIGluIG5vbi1GUUROICVzIiwKKysJCSAgICAgIGhvc3QtPm5hbWUpOworKwkgICAgc3RyY3B5KGhvc3QtPm5hbWUsIHBhcmFub2lkKTsJLyogbmFtZSBpcyBiYWQsIGNsb2JiZXIgaXQgKi8KKysJfQorKwllcnIgPSAhZXJyOworKyAgICB9CisrICAgIGlmICghZXJyKSB7CisrCS8qIHdlIGFyZSBub3cgc3VyZSB0aGF0IHRoaXMgaXMgbm9uLW51bWVyaWMgKi8KKysKKysJLyoKKysJICogVmVyaWZ5IHRoYXQgdGhlIGFkZHJlc3MgaXMgYSBtZW1iZXIgb2YgdGhlIGFkZHJlc3MgbGlzdCByZXR1cm5lZAorKwkgKiBieSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKS4KKysJICogCisrCSAqIFZlcmlmeSBhbHNvIHRoYXQgZ2V0aG9zdGJ5YWRkcigpIGFuZCBnZXRob3N0YnluYW1lKCkgcmV0dXJuIHRoZSBzYW1lCisrCSAqIGhvc3RuYW1lLCBvciByc2hkIGFuZCBybG9naW5kIG1heSBzdGlsbCBlbmQgdXAgYmVpbmcgc3Bvb2ZlZC4KKysJICogCisrCSAqIE9uIHNvbWUgc2l0ZXMsIGdldGhvc3RieW5hbWUoImxvY2FsaG9zdCIpIHJldHVybnMgImxvY2FsaG9zdC5kb21haW4iLgorKwkgKiBUaGlzIGlzIGEgRE5TIGFydGVmYWN0LiBXZSB0cmVhdCBpdCBhcyBhIHNwZWNpYWwgY2FzZS4gV2hlbiB3ZQorKwkgKiBjYW4ndCBiZWxpZXZlIHRoZSBhZGRyZXNzIGxpc3QgZnJvbSBnZXRob3N0YnluYW1lKCJsb2NhbGhvc3QiKQorKwkgKiB3ZSdyZSBpbiBiaWcgdHJvdWJsZSBhbnl3YXkuCisrCSAqLworKworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfZmFtaWx5ID0gc2luLT5zYV9mYW1pbHk7CisrCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRTsKKysJaWYgKGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApICE9IDApIHsKKysKKysJICAgIC8qCisrCSAgICAgKiBVbmFibGUgdG8gdmVyaWZ5IHRoYXQgdGhlIGhvc3QgbmFtZSBtYXRjaGVzIHRoZSBhZGRyZXNzLiBUaGlzCisrCSAgICAgKiBtYXkgYmUgYSB0cmFuc2llbnQgcHJvYmxlbSBvciBhIGJvdGNoZWQgbmFtZSBzZXJ2ZXIgc2V0dXAuCisrCSAgICAgKi8KKysKKysJICAgIHRjcGRfd2FybigiY2FuJ3QgdmVyaWZ5IGhvc3RuYW1lOiBnZXRhZGRyaW5mbyglcywgJXMpIGZhaWxlZCIsCisrCQkgICAgICBob3N0LT5uYW1lLAorKwkJICAgICAgKHNpbi0+c2FfZmFtaWx5ID09IEFGX0lORVQpID8gIkFGX0lORVQiIDogIkFGX0lORVQ2Iik7CisrCisrCX0gZWxzZSBpZiAoKHJlczAtPmFpX2Nhbm9ubmFtZSA9PSBOVUxMCisrCQkgICAgfHwgU1RSX05FKGhvc3QtPm5hbWUsIHJlczAtPmFpX2Nhbm9ubmFtZSkpCisrCQkgICAmJiBTVFJfTkUoaG9zdC0+bmFtZSwgImxvY2FsaG9zdCIpKSB7CisrCisrCSAgICAvKgorKwkgICAgICogVGhlIGdldGhvc3RieWFkZHIoKSBhbmQgZ2V0aG9zdGJ5bmFtZSgpIGNhbGxzIGRpZCBub3QgcmV0dXJuCisrCSAgICAgKiB0aGUgc2FtZSBob3N0bmFtZS4gVGhpcyBjb3VsZCBiZSBhIG5hbWVzZXJ2ZXIgY29uZmlndXJhdGlvbgorKwkgICAgICogcHJvYmxlbS4gSXQgY291bGQgYWxzbyBiZSB0aGF0IHNvbWVvbmUgaXMgdHJ5aW5nIHRvIHNwb29mIHVzLgorKwkgICAgICovCisrCisrCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9uYW1lIG1pc21hdGNoOiAlcyAhPSAlLipzIiwKKysJCSAgICAgIGhvc3QtPm5hbWUsIFNUUklOR19MRU5HVEgsCisrCQkgICAgICAocmVzMC0+YWlfY2Fub25uYW1lID09IE5VTEwpID8gIiIgOiByZXMwLT5haV9jYW5vbm5hbWUpOworKworKwl9IGVsc2UgeworKworKwkgICAgLyoKKysJICAgICAqIFRoZSBhZGRyZXNzIHNob3VsZCBiZSBhIG1lbWJlciBvZiB0aGUgYWRkcmVzcyBsaXN0IHJldHVybmVkIGJ5CisrCSAgICAgKiBnZXRob3N0YnluYW1lKCkuIFdlIHNob3VsZCBmaXJzdCB2ZXJpZnkgdGhhdCB0aGUgaF9hZGRydHlwZQorKwkgICAgICogZmllbGQgaXMgQUZfSU5FVCwgYnV0IHRoaXMgcHJvZ3JhbSBoYXMgYWxyZWFkeSBjYXVzZWQgdG9vIG11Y2gKKysJICAgICAqIGdyaWVmIG9uIHN5c3RlbXMgd2l0aCBicm9rZW4gbGlicmFyeSBjb2RlLgorKwkgICAgICovCisrCisrCSAgICBmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7CisrCQlpZiAocmVzLT5haV9mYW1pbHkgIT0gc2luLT5zYV9mYW1pbHkpCisrCQkgICAgY29udGludWU7CisrCQlzd2l0Y2ggKHJlcy0+YWlfZmFtaWx5KSB7CisrCQljYXNlIEFGX0lORVQ6CisrCQkgICAgcmFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilyZXMtPmFpX2FkZHIpLT5zaW5fYWRkcjsKKysJCSAgICBicmVhazsKKysJCWNhc2UgQUZfSU5FVDY6CisrCQkgICAgLyogbmVlZCB0byBjaGVjayBzY29wZV9pZCAqLworKwkJICAgIGlmICgoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzaW4pLT5zaW42X3Njb3BlX2lkICE9CisrCQkgICAgICAgICgoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfc2NvcGVfaWQpIHsKKysJCQljb250aW51ZTsKKysJCSAgICB9CisrCQkgICAgcmFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyKS0+c2luNl9hZGRyOworKwkJICAgIGJyZWFrOworKwkJZGVmYXVsdDoKKysJCSAgICBjb250aW51ZTsKKysJCX0KKysJCWlmIChtZW1jbXAocmFwLCBhcCwgYWxlbikgPT0gMCkgeworKwkJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKysJCSAgICByZXR1cm47CQkJLyogbmFtZSBpcyBnb29kLCBrZWVwIGl0ICovCisrCQl9CisrCSAgICB9CisrCisrCSAgICAvKgorKwkgICAgICogVGhlIGhvc3QgbmFtZSBkb2VzIG5vdCBtYXAgdG8gdGhlIGluaXRpYWwgYWRkcmVzcy4gUGVyaGFwcworKwkgICAgICogc29tZW9uZSBoYXMgbWVzc2VkIHVwLiBQZXJoYXBzIHNvbWVvbmUgY29tcHJvbWlzZWQgYSBuYW1lCisrCSAgICAgKiBzZXJ2ZXIuCisrCSAgICAgKi8KKysKKysJICAgIGdldG5hbWVpbmZvKHNpbiwgc2FsZW4sIGhuYW1lLCBzaXplb2YoaG5hbWUpLAorKwkJCU5VTEwsIDAsIE5JX05VTUVSSUNIT1NUIHwgTklfV0lUSFNDT1BFSUQpOworKwkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvYWRkcmVzcyBtaXNtYXRjaDogJXMgIT0gJS4qcyIsCisrCQkgICAgICBobmFtZSwgU1RSSU5HX0xFTkdUSCwKKysJCSAgICAgIChyZXMwLT5haV9jYW5vbm5hbWUgPT0gTlVMTCkgPyAiIiA6IHJlczAtPmFpX2Nhbm9ubmFtZSk7CisrCX0KKysJc3RyY3B5KGhvc3QtPm5hbWUsIHBhcmFub2lkKTsJCS8qIG5hbWUgaXMgYmFkLCBjbG9iYmVyIGl0ICovCisrCWlmIChyZXMwKQorKwkgICAgZnJlZWFkZHJpbmZvKHJlczApOworKyAgICB9CisrI2Vsc2UgLyogSU5FVDYgKi8KKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBob3N0LT5zaW47CisgICAgIHN0cnVjdCBob3N0ZW50ICpocDsKKyAgICAgaW50ICAgICBpOworQEAgLTIyMCw2ICs0MTIsNyBAQAorIAl9CisgCXN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CQkvKiBuYW1lIGlzIGJhZCwgY2xvYmJlciBpdCAqLworICAgICB9CisrI2VuZGlmIC8qIElORVQ2ICovCisgfQorIAorIC8qIHNvY2tfc2luayAtIGFic29yYiB1bnJlY2VpdmVkIElQIGRhdGFncmFtICovCitAQCAtMjI4LDcgKzQyMSwxMSBAQAorIGludCAgICAgZmQ7CisgeworICAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzaW47CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKysjZW5kaWYKKyAgICAgaW50ICAgICBzaXplID0gc2l6ZW9mKHNpbik7CisgCisgICAgIC8qCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmMJMTk5Ni0wMi0xMSAxNzowMTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTEyMCw3ICsxMjAsMTIgQEAKKyAKKyAgICAgLyogUmVwb3J0IHJlcXVlc3QgYW5kIGludm9rZSB0aGUgcmVhbCBkYWVtb24gcHJvZ3JhbS4gKi8KKyAKKysjaWZkZWYgSU5FVDYKKysgICAgc3lzbG9nKGFsbG93X3NldmVyaXR5LCAiY29ubmVjdCBmcm9tICVzICglcykiLAorKwkgICBldmFsX2NsaWVudCgmcmVxdWVzdCksIGV2YWxfaG9zdGFkZHIocmVxdWVzdC5jbGllbnQpKTsKKysjZWxzZQorICAgICBzeXNsb2coYWxsb3dfc2V2ZXJpdHksICJjb25uZWN0IGZyb20gJXMiLCBldmFsX2NsaWVudCgmcmVxdWVzdCkpOworKyNlbmRpZgorICAgICBjbG9zZWxvZygpOworICAgICAodm9pZCkgZXhlY3YocGF0aCwgYXJndik7CisgICAgIHN5c2xvZyhMT0dfRVJSLCAiZXJyb3I6IGNhbm5vdCBleGVjdXRlICVzOiAlbSIsIHBhdGgpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTE5OTctMDItMTIgMDI6MTM6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMiw2ICsyMiw5IEBACisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitAQCAtMzk3LDYgKzQwMCwzMSBAQAorICAgICB9CisgfQorIAorKyNpZmRlZiBJTkVUNgorK3N0YXRpYyBpbnQgaXNfaW5ldDZfYWRkcihwYXQpCisrICAgIGNoYXIgKnBhdDsKKyt7CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKKysgICAgaW50IGxlbiwgcmV0OworKyAgICBjaGFyIGNoOworKworKyAgICBpZiAoKnBhdCAhPSAnWycpCisrCXJldHVybiAoMCk7CisrICAgIGxlbiA9IHN0cmxlbihwYXQpOworKyAgICBpZiAoKGNoID0gcGF0W2xlbiAtIDFdKSAhPSAnXScpCisrCXJldHVybiAoMCk7CisrICAgIHBhdFtsZW4gLSAxXSA9ICdcMCc7CisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmICgocmV0ID0gZ2V0YWRkcmluZm8ocGF0ICsgMSwgTlVMTCwgJmhpbnRzLCAmcmVzKSkgPT0gMCkKKysJZnJlZWFkZHJpbmZvKHJlcyk7CisrICAgIHBhdFtsZW4gLSAxXSA9IGNoOworKyAgICByZXR1cm4gKHJldCA9PSAwKTsKKyt9CisrI2VuZGlmCisrCisgLyogY2hlY2tfaG9zdCAtIGNyaXRpY2l6ZSBob3N0IHBhdHRlcm4gKi8KKyAKKyBzdGF0aWMgaW50IGNoZWNrX2hvc3QocGF0KQorQEAgLTQyMywxNCArNDUxLDI3IEBACisgI2VuZGlmCisgI2VuZGlmCisgICAgIH0gZWxzZSBpZiAobWFzayA9IHNwbGl0X2F0KHBhdCwgJy8nKSkgewkvKiBuZXR3b3JrL25ldG1hc2sgKi8KKysjaWZkZWYgSU5FVDYKKysJaW50IG1hc2tfbGVuOworKworKwlpZiAoKGRvdF9xdWFkX2FkZHIocGF0KSA9PSBJTkFERFJfTk9ORQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSkKKysJICAgICYmICghaXNfaW5ldDZfYWRkcihwYXQpCisrCQl8fCAoKG1hc2tfbGVuID0gYXRvaShtYXNrKSkgPCAwIHx8IG1hc2tfbGVuID4gMTI4KSkpCisrI2Vsc2UKKyAJaWYgKGRvdF9xdWFkX2FkZHIocGF0KSA9PSBJTkFERFJfTk9ORQorIAkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSkKKysjZW5kaWYKKyAJICAgIHRjcGRfd2FybigiJXMvJXM6IGJhZCBuZXQvbWFzayBwYXR0ZXJuIiwgcGF0LCBtYXNrKTsKKyAgICAgfSBlbHNlIGlmIChTVFJfRVEocGF0LCAiRkFJTCIpKSB7CQkvKiBvYnNvbGV0ZSAqLworIAl0Y3BkX3dhcm4oIkZBSUwgaXMgbm8gbG9uZ2VyIHJlY29nbml6ZWQiKTsKKyAJdGNwZF93YXJuKCIodXNlIEVYQ0VQVCBvciBERU5ZIGluc3RlYWQpIik7CisgICAgIH0gZWxzZSBpZiAocmVzZXJ2ZWRfbmFtZShwYXQpKSB7CQkvKiBvdGhlciByZXNlcnZlZCAqLworIAkgLyogdm9pZCAqLyA7CisrI2lmZGVmIElORVQ2CisrICAgIH0gZWxzZSBpZiAoaXNfaW5ldDZfYWRkcihwYXQpKSB7IC8qIElQdjYgYWRkcmVzcyAqLworKwlhZGRyX2NvdW50ID0gMTsKKysjZW5kaWYKKyAgICAgfSBlbHNlIGlmIChOT1RfSU5BRERSKHBhdCkpIHsJCS8qIGludGVybmV0IG5hbWUgKi8KKyAJaWYgKHBhdFtzdHJsZW4ocGF0KSAtIDFdID09ICcuJykgeworIAkgICAgdGNwZF93YXJuKCIlczogZG9tYWluIG9yIGhvc3QgbmFtZSBlbmRzIGluIGRvdCIsIHBhdCk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMTk5Ni0wMy0xOSAxNjoyMjoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTExLDcgKzExLDExIEBACisgc3RydWN0IGhvc3RfaW5mbyB7CisgICAgIGNoYXIgICAgbmFtZVtTVFJJTkdfTEVOR1RIXTsJLyogYWNjZXNzIHZpYSBldmFsX2hvc3RuYW1lKGhvc3QpICovCisgICAgIGNoYXIgICAgYWRkcltTVFJJTkdfTEVOR1RIXTsJLyogYWNjZXNzIHZpYSBldmFsX2hvc3RhZGRyKGhvc3QpICovCisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkciAqc2luOwkJLyogc29ja2V0IGFkZHJlc3Mgb3IgMCAqLworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwkJLyogc29ja2V0IGFkZHJlc3Mgb3IgMCAqLworKyNlbmRpZgorICAgICBzdHJ1Y3QgdF91bml0ZGF0YSAqdW5pdDsJCS8qIFRMSSB0cmFuc3BvcnQgYWRkcmVzcyBvciAwICovCisgICAgIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CS8qIGZvciBzaGFyZWQgaW5mb3JtYXRpb24gKi8KKyB9OworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC5jCTE5OTYtMDItMTEgMTc6MDE6MzYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU3LDcgKzU3LDExIEBACisgaW50ICAgICBhcmdjOworIGNoYXIgICoqYXJndjsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmhwLCAqcmVzOworKyNlbHNlCisgICAgIHN0cnVjdCBob3N0ZW50ICpocDsKKysjZW5kaWYKKyAgICAgY2hhciAgICpteW5hbWUgPSBhcmd2WzBdOworICAgICBjaGFyICAgKmNsaWVudDsKKyAgICAgY2hhciAgICpzZXJ2ZXI7CitAQCAtNjgsOCArNzIsMTMgQEAKKyAgICAgaW50ICAgICBjaDsKKyAgICAgY2hhciAgICppbmV0Y2YgPSAwOworICAgICBpbnQgICAgIGNvdW50OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzZXJ2ZXJfc2luOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnRfc2luOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXJfc2luOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50X3NpbjsKKysjZW5kaWYKKyAgICAgc3RydWN0IHN0YXQgc3Q7CisgCisgICAgIC8qCitAQCAtMTcyLDEzICsxODEsMjAgQEAKKyAgICAgaWYgKE5PVF9JTkFERFIoc2VydmVyKSA9PSAwIHx8IEhPU1ROQU1FX0tOT1dOKHNlcnZlcikpIHsKKyAJaWYgKChocCA9IGZpbmRfaW5ldF9hZGRyKHNlcnZlcikpID09IDApCisgCSAgICBleGl0KDEpOworKyNpZm5kZWYgSU5FVDYKKyAJbWVtc2V0KChjaGFyICopICZzZXJ2ZXJfc2luLCAwLCBzaXplb2Yoc2VydmVyX3NpbikpOworIAlzZXJ2ZXJfc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKyNlbmRpZgorIAlyZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfU0VSVkVSX1NJTiwgJnNlcnZlcl9zaW4sIDApOworIAorKyNpZmRlZiBJTkVUNgorKwlmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCSAgICBtZW1jcHkoJnNlcnZlcl9zaW4sIHJlcy0+YWlfYWRkciwgcmVzLT5haV9hZGRybGVuKTsKKysjZWxzZQorIAlmb3IgKGNvdW50ID0gMDsgKGFkZHIgPSBocC0+aF9hZGRyX2xpc3RbY291bnRdKSAhPSAwOyBjb3VudCsrKSB7CisgCSAgICBtZW1jcHkoKGNoYXIgKikgJnNlcnZlcl9zaW4uc2luX2FkZHIsIGFkZHIsCisgCQkgICBzaXplb2Yoc2VydmVyX3Npbi5zaW5fYWRkcikpOworKyNlbmRpZgorIAorIAkgICAgLyoKKyAJICAgICAqIEZvcmNlIGV2YWx1YXRpb24gb2Ygc2VydmVyIGhvc3QgbmFtZSBhbmQgYWRkcmVzcy4gSG9zdCBuYW1lCitAQCAtMTk0LDcgKzIxMCwxMSBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsICJQbGVhc2Ugc3BlY2lmeSBhbiBhZGRyZXNzIGluc3RlYWRcbiIpOworIAkgICAgZXhpdCgxKTsKKyAJfQorKyNpZmRlZiBJTkVUNgorKwlmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgCWZyZWUoKGNoYXIgKikgaHApOworKyNlbmRpZgorICAgICB9IGVsc2UgeworIAlyZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfU0VSVkVSX05BTUUsIHNlcnZlciwgMCk7CisgICAgIH0KK0BAIC0yMDgsNiArMjI4LDE4IEBACisgCXRjcGRtYXRjaCgmcmVxdWVzdCk7CisgCWV4aXQoMCk7CisgICAgIH0KKysjaWZkZWYgSU5FVDYKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKGNsaWVudCwgTlVMTCwgJmhpbnRzLCAmcmVzKSA9PSAwKSB7CisrCWZyZWVhZGRyaW5mbyhyZXMpOworKwlyZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfQ0xJRU5UX0FERFIsIGNsaWVudCwgMCk7CisrCXRjcGRtYXRjaCgmcmVxdWVzdCk7CisrCWV4aXQoMCk7CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogUGVyaGFwcyB0aGV5IGFyZSB0ZXN0aW5nIHNwZWNpYWwgY2xpZW50IGhvc3RuYW1lIHBhdHRlcm5zIHRoYXQgYXJlbid0CitAQCAtMjI5LDYgKzI2MSwzNCBAQAorICAgICAgKi8KKyAgICAgaWYgKChocCA9IGZpbmRfaW5ldF9hZGRyKGNsaWVudCkpID09IDApCisgCWV4aXQoMSk7CisrI2lmZGVmIElORVQ2CisrICAgIHJlcXVlc3Rfc2V0KCZyZXF1ZXN0LCBSUV9DTElFTlRfU0lOLCAmY2xpZW50X3NpbiwgMCk7CisrCisrICAgIGZvciAocmVzID0gaHAsIGNvdW50ID0gMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQsIGNvdW50KyspIHsKKysJbWVtY3B5KCZjbGllbnRfc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrCisrCS8qCisrCSAqIGdldG5hbWVpbmZvKCkgZG9lc24ndCBkbyByZXZlcnNlIGxvb2t1cCBhZ2FpbnN0IGxpbmstbG9jYWwKKysJICogYWRkcmVzcy4gIFNvLCB3ZSBwYXNzIHRocm91Z2ggaG9zdCBuYW1lIGV2YWx1YXRpb24gYWdhaW5zdAorKwkgKiBzdWNoIGFkZHJlc3Nlcy4KKysJICovCisrCWlmIChyZXMtPmFpX2ZhbWlseSAhPSBBRl9JTkVUNiB8fAorKwkgICAgIUlONl9JU19BRERSX0xJTktMT0NBTCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyKS0+c2luNl9hZGRyKSkgeworKwkgICAgLyoKKysJICAgICAqIEZvcmNlIGV2YWx1YXRpb24gb2YgY2xpZW50IGhvc3QgbmFtZSBhbmQgYWRkcmVzcy4gSG9zdCBuYW1lCisrCSAgICAgKiBjb25mbGljdHMgd2lsbCBiZSByZXBvcnRlZCB3aGlsZSBldmFsX2hvc3RuYW1lKCkgZG9lcyBpdHMgam9iLgorKwkgICAgICovCisrCSAgICByZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfQ0xJRU5UX05BTUUsICIiLCBSUV9DTElFTlRfQUREUiwgIiIsIDApOworKwkgICAgaWYgKFNUUl9FUShldmFsX2hvc3RuYW1lKHJlcXVlc3QuY2xpZW50KSwgdW5rbm93bikpCisrCQl0Y3BkX3dhcm4oImhvc3QgYWRkcmVzcyAlcy0+bmFtZSBsb29rdXAgZmFpbGVkIiwKKysJCQkgIGV2YWxfaG9zdGFkZHIocmVxdWVzdC5jbGllbnQpKTsKKysJfQorKwl0Y3BkbWF0Y2goJnJlcXVlc3QpOworKwlpZiAocmVzLT5haV9uZXh0KQorKwkgICAgcHJpbnRmKCJcbiIpOworKyAgICB9CisrICAgIGZyZWVhZGRyaW5mbyhocCk7CisrI2Vsc2UKKyAgICAgbWVtc2V0KChjaGFyICopICZjbGllbnRfc2luLCAwLCBzaXplb2YoY2xpZW50X3NpbikpOworICAgICBjbGllbnRfc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICByZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfQ0xJRU5UX1NJTiwgJmNsaWVudF9zaW4sIDApOworQEAgLTI1MCw2ICszMTAsNyBAQAorIAkgICAgcHJpbnRmKCJcbiIpOworICAgICB9CisgICAgIGZyZWUoKGNoYXIgKikgaHApOworKyNlbmRpZgorICAgICBleGl0KDApOworIH0KKyAKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGxpLmMgdGNwX3dyYXBwZXJzXzcuNi90bGkuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90bGkuYwkxOTk3LTAzLTIxIDE5OjI3OjI2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGxpLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC02NSw4ICs2NSwxMyBAQAorIHZvaWQgICAgdGxpX2hvc3QocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudDsKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNlcnZlcjsKKysjZWxzZQorICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIElmIHdlIGRpc2NvdmVyIHRoYXQgd2UgYXJlIHVzaW5nIGFuIElQIHRyYW5zcG9ydCwgcHJldGVuZCB3ZSBuZXZlcgorQEAgLTc2LDE0ICs4MSwyOSBAQAorIAorICAgICB0bGlfZW5kcG9pbnRzKHJlcXVlc3QpOworICAgICBpZiAoKHJlcXVlc3QtPmNvbmZpZyA9IHRsaV90cmFuc3BvcnQocmVxdWVzdC0+ZmQpKSAhPSAwCisrI2lmZGVmIElORVQ2CisrCSYmIChTVFJfRVEocmVxdWVzdC0+Y29uZmlnLT5uY19wcm90b2ZtbHksICJpbmV0IikgfHwKKysJICAgIFNUUl9FUShyZXF1ZXN0LT5jb25maWctPm5jX3Byb3RvZm1seSwgImluZXQ2IikpKSB7CisrI2Vsc2UKKyAJJiYgU1RSX0VRKHJlcXVlc3QtPmNvbmZpZy0+bmNfcHJvdG9mbWx5LCAiaW5ldCIpKSB7CisrI2VuZGlmCisgCWlmIChyZXF1ZXN0LT5jbGllbnQtPnVuaXQgIT0gMCkgeworKyNpZmRlZiBJTkVUNgorKwkgICAgY2xpZW50ID0gKihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSByZXF1ZXN0LT5jbGllbnQtPnVuaXQtPmFkZHIuYnVmOworKwkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZjbGllbnQ7CisrI2Vsc2UKKyAJICAgIGNsaWVudCA9ICooc3RydWN0IHNvY2thZGRyX2luICopIHJlcXVlc3QtPmNsaWVudC0+dW5pdC0+YWRkci5idWY7CisgCSAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9ICZjbGllbnQ7CisrI2VuZGlmCisgCX0KKyAJaWYgKHJlcXVlc3QtPnNlcnZlci0+dW5pdCAhPSAwKSB7CisrI2lmZGVmIElORVQ2CisrCSAgICBzZXJ2ZXIgPSAqKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopIHJlcXVlc3QtPnNlcnZlci0+dW5pdC0+YWRkci5idWY7CisrCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlcjsKKysjZWxzZQorIAkgICAgc2VydmVyID0gKihzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgcmVxdWVzdC0+c2VydmVyLT51bml0LT5hZGRyLmJ1ZjsKKyAJICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gJnNlcnZlcjsKKysjZW5kaWYKKyAJfQorIAl0bGlfY2xlYW51cChyZXF1ZXN0KTsKKyAJc29ja19tZXRob2RzKHJlcXVlc3QpOworQEAgLTE4Nyw3ICsyMDcsMTUgQEAKKyAgICAgfQorICAgICB3aGlsZSAoY29uZmlnID0gZ2V0bmV0Y29uZmlnKGhhbmRsZXApKSB7CisgCWlmIChzdGF0KGNvbmZpZy0+bmNfZGV2aWNlLCAmZnJvbV9jb25maWcpID09IDApIHsKKysjaWZkZWYgTk9fQ0xPTkVfREVWSUNFCisrCS8qCisrCSAqIElmIHRoZSBuZXR3b3JrIGRldmljZXMgYXJlIG5vdCBjbG9uZWQgKGFzIGlzIHRoZSBjYXNlIGZvcgorKwkgKiBTb2xhcmlzIDggQmV0YSksIHdlIG11c3QgY29tcGFyZSB0aGUgbWFqb3IgZGV2aWNlIG51bWJlcnMuCisrCSAqLworKwkgICAgaWYgKG1ham9yKGZyb21fY29uZmlnLnN0X3JkZXYpID09IG1ham9yKGZyb21fY2xpZW50LnN0X3JkZXYpKQorKyNlbHNlCisgCSAgICBpZiAobWlub3IoZnJvbV9jb25maWcuc3RfcmRldikgPT0gbWFqb3IoZnJvbV9jbGllbnQuc3RfcmRldikpCisrI2VuZGlmCisgCQlicmVhazsKKyAJfQorICAgICB9CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3VwZGF0ZS5jIHRjcF93cmFwcGVyc183LjYvdXBkYXRlLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdXBkYXRlLmMJMTk5NC0xMi0yOCAxNzo0Mjo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3VwZGF0ZS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNDYsMTAgKzQ2LDE4IEBACisgCSAgICByZXF1ZXN0LT5mZCA9IHZhX2FyZyhhcCwgaW50KTsKKyAJICAgIGNvbnRpbnVlOworIAljYXNlIFJRX0NMSUVOVF9TSU46CisrI2lmZGVmIElORVQ2CisrCSAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisgCSAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyX2luICopOworKyNlbmRpZgorIAkgICAgY29udGludWU7CisgCWNhc2UgUlFfU0VSVkVSX1NJTjoKKysjaWZkZWYgSU5FVDYKKysJICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisrI2Vsc2UKKyAJICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gdmFfYXJnKGFwLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisrI2VuZGlmCisgCSAgICBjb250aW51ZTsKKyAKKyAJICAgIC8qCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3dvcmthcm91bmRzLmMgdGNwX3dyYXBwZXJzXzcuNi93b3JrYXJvdW5kcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3dvcmthcm91bmRzLmMJMTk5Ni0wMy0xOSAxNjoyMjoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3dvcmthcm91bmRzLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjYsMTEgKzE2NiwyMiBAQAorIGludCAgICAqbGVuOworIHsKKyAgICAgaW50ICAgICByZXQ7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkciAqc2luID0gc2E7CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIHNhOworKyNlbmRpZgorIAorICAgICBpZiAoKHJldCA9IGdldHBlZXJuYW1lKHNvY2ssIHNhLCBsZW4pKSA+PSAwCisrI2lmZGVmIElORVQ2CisrCSYmICgoc2luLT5zdV9zaS5zaV9mYW1pbHkgPT0gQUZfSU5FVDYKKysJICAgICAmJiBJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luLT5zdV9zaW42LnNpbjZfYWRkcikpCisrCSAgICB8fCAoc2luLT5zdV9zaS5zaV9mYW1pbHkgPT0gQUZfSU5FVAorKwkJJiYgc2luLT5zdV9zaW4uc2luX2FkZHIuc19hZGRyID09IDApKSkgeworKyNlbHNlCisgCSYmIHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVAorIAkmJiBzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisrI2VuZGlmCisgCWVycm5vID0gRU5PVENPTk47CisgCXJldHVybiAoLTEpOworICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdGNwZF9ibGFja2xpc3QucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworUGF0aDogbmV3cy5wb3JjdXBpbmUub3JnIW5ld3MucG9yY3VwaW5lLm9yZyFub3QtZm9yLW1haWwKK0Zyb206IFdpZXRzZSBWZW5lbWEgPHdpZXRzZUAoKG5vKShzcGFtKShwbGVhc2UpKXd6di53aW4udHVlLm5sPgorTmV3c2dyb3VwczogY29tcC5tYWlsLnNlbmRtYWlsLGNvbXAuc2VjdXJpdHkudW5peAorU3ViamVjdDogVENQIFdyYXBwZXIgQmxhY2tsaXN0IEV4dGVuc2lvbgorRm9sbG93dXAtVG86IHBvc3RlcgorRGF0ZTogOCBTZXAgMTk5NyAxODo1MzoxMyAtMDQwMAorT3JnYW5pemF0aW9uOiBXaWV0c2UncyBoYW5nb3V0IHdoaWxlIG9uIHNhYmF0dGljYWwgaW4gdGhlIFVTQQorTGluZXM6IDE0NworU2VuZGVyOiB3aWV0c2VAc3Bpa2UucG9yY3VwaW5lLm9yZworTWVzc2FnZS1JRDogPDV2MXZrcCRoNGYkMUBzcGlrZS5wb3JjdXBpbmUub3JnPgorTk5UUC1Qb3N0aW5nLUhvc3Q6IHNwaWtlLnBvcmN1cGluZS5vcmcKK1hyZWY6IG5ld3MucG9yY3VwaW5lLm9yZyBjb21wLm1haWwuc2VuZG1haWw6MzU0MSBjb21wLnNlY3VyaXR5LnVuaXg6NzE1OAorCitUaGUgcGF0Y2ggYmVsb3cgYWRkcyBhIG5ldyBob3N0IHBhdHRlcm4gdG8gdGhlIFRDUCBXcmFwcGVyIGFjY2VzcworY29udHJvbCBsYW5ndWFnZS4gSW5zdGVhZCBvZiBhIGhvc3QgbmFtZSBvciBhZGRyZXNzIHBhdHRlcm4sIHlvdQorY2FuIHNwZWNpZnkgYW4gZXh0ZXJuYWwgL2ZpbGUvbmFtZSB3aXRoIGhvc3QgbmFtZSBvciBhZGRyZXNzCitwYXR0ZXJucy4gICBUaGUgZmVhdHVyZSBjYW4gYmUgdXNlZCByZWN1cnNpdmVseS4KKworVGhlIC9maWxlL25hbWUgZXh0ZW5zaW9uIG1ha2VzIGl0IGVhc3kgdG8gYmxhY2tsaXN0IGJhZCBzaXRlcywgZm9yCitleGFtcGxlLCB0byBibG9jayB1bndhbnRlZCBlbGVjdHJvbmljIG1haWwgd2hlbiBsaWJ3cmFwIGlzIGxpbmtlZAoraW50byBzZW5kbWFpbC4gIEFkZGluZyBob3N0cyB0byBhIHNpbXBsZSB0ZXh0IGZpbGUgaXMgbXVjaCBlYXNpZXIKK3RoYW4gaGF2aW5nIHRvIGVkaXQgYSBtb3JlIGNvbXBsZXggaG9zdHMuYWxsb3cvZGVueSBmaWxlLgorCitJIGRldmVsb3BlZCB0aGlzIGEgeWVhciBvciBzbyBhZ28gYXMgYSBzdWJzdGl0dXRlIGZvciBOSVMgbmV0Z3JvdXBzLgorQXQgdGhhdCB0aW1lLCBJIGRpZCBub3QgY29uc2lkZXIgaXQgb2Ygc3VmZmljaWVudCBpbnRlcmVzdCBmb3IKK2luY2x1c2lvbiBpbiB0aGUgVENQIFdyYXBwZXIgZGlzdHJpYnV0aW9uLiBIb3cgdGltZXMgaGF2ZSBjaGFuZ2VkLgorCitUaGUgcGF0Y2ggaXMgcmVsYXRpdmUgdG8gVENQIFdyYXBwZXJzIHZlcnNpb24gNy42LiBUaGUgbWFpbiBhcmNoaXZlCitzaXRlIGlzIGZ0cDovL2Z0cC53aW4udHVlLm5sL3B1Yi9zZWN1cml0eS90Y3Bfd3JhcHBlcnNfNy42LnRhci5negorCitUaGFua3MgdG8gdGhlIERlYmlhbiBMSU5VWCBmb2xrcyBmb3IgZXhwcmVzc2luZyB0aGVpciBpbnRlcmVzdCBpbgordGhpcyBwYXRjaC4KKworCVdpZXRzZQorCisKK1tkaWZmIHVwZGF0ZWQgYnkgTWRdCisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE5OjI4OjA5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyODowMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Nyw2ICs5NywxMyBAQAorIGBbM2ZmZTo1MDU6MjoxOjpdLzY0XCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZSByYW5nZQorIGAzZmZlOjUwNToyOjE6OlwnIHRocm91Z2ggYDNmZmU6NTA1OjI6MTpmZmZmOmZmZmY6ZmZmZjpmZmZmXCcuCisgLklQIFwoYnUKKytBIHN0cmluZyB0aGF0IGJlZ2lucyB3aXRoIGEgYC9cJyBjaGFyYWN0ZXIgaXMgdHJlYXRlZCBhcyBhIGZpbGUKKytuYW1lLiBBIGhvc3QgbmFtZSBvciBhZGRyZXNzIGlzIG1hdGNoZWQgaWYgaXQgbWF0Y2hlcyBhbnkgaG9zdCBuYW1lCisrb3IgYWRkcmVzcyBwYXR0ZXJuIGxpc3RlZCBpbiB0aGUgbmFtZWQgZmlsZS4gVGhlIGZpbGUgZm9ybWF0IGlzCisremVybyBvciBtb3JlIGxpbmVzIHdpdGggemVybyBvciBtb3JlIGhvc3QgbmFtZSBvciBhZGRyZXNzIHBhdHRlcm5zCisrc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIGZpbGUgbmFtZSBwYXR0ZXJuIGNhbiBiZSB1c2VkIGFueXdoZXJlCisrYSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJuIGNhbiBiZSB1c2VkLgorKy5JUCBcKGJ1CisgV2lsZGNhcmRzIGAqXCcgYW5kIGA/XCcgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggaG9zdG5hbWVzIG9yIElQIGFkZHJlc3Nlcy4gIFRoaXMKKyBtZXRob2Qgb2YgbWF0Y2hpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbmV0L21hc2tcJyBtYXRjaGluZywKKyBob3N0bmFtZSBtYXRjaGluZyBiZWdpbm5pbmcgd2l0aCBgLlwnIG9yIElQIGFkZHJlc3MgbWF0Y2hpbmcgZW5kaW5nIHdpdGggYC5cJy4KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjI4OjA5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOToyNzowNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNTMsNiArMjUzLDI2IEBACisgICAgIH0KKyB9CisgCisrLyogaG9zdGZpbGVfbWF0Y2ggLSBsb29rIHVwIGhvc3QgcGF0dGVybnMgZnJvbSBmaWxlICovCisrCisrc3RhdGljIGludCBob3N0ZmlsZV9tYXRjaChwYXRoLCBob3N0KQorK2NoYXIgICAqcGF0aDsKKytzdHJ1Y3QgaG9zdHNfaW5mbyAqaG9zdDsKKyt7CisrICAgIGNoYXIgICAgdG9rW0JVRlNJWl07CisrICAgIGludCAgICAgbWF0Y2ggPSBOTzsKKysgICAgRklMRSAgICpmcDsKKysKKysgICAgaWYgKChmcCA9IGZvcGVuKHBhdGgsICJyIikpICE9IDApIHsKKysJd2hpbGUgKGZzY2FuZihmcCwgIiVzIiwgdG9rKSA9PSAxICYmICEobWF0Y2ggPSBob3N0X21hdGNoKHRvaywgaG9zdCkpKQorKwkgICAgIC8qIHZvaWQgKi8gOworKwlmY2xvc2UoZnApOworKyAgICB9IGVsc2UgaWYgKGVycm5vICE9IEVOT0VOVCkgeworKwl0Y3BkX3dhcm4oIm9wZW4gJXM6ICVtIiwgcGF0aCk7CisrICAgIH0KKysgICAgcmV0dXJuIChtYXRjaCk7CisrfQorKworIC8qIGhvc3RfbWF0Y2ggLSBtYXRjaCBob3N0IG5hbWUgYW5kL29yIGFkZHJlc3MgYWdhaW5zdCBwYXR0ZXJuICovCisgCisgc3RhdGljIGludCBob3N0X21hdGNoKHRvaywgaG9zdCkKK0BAIC0yODAsNiArMzAwLDggQEAKKyAJdGNwZF93YXJuKCJuZXRncm91cCBzdXBwb3J0IGlzIGRpc2FibGVkIik7CS8qIG5vdCB0Y3BkX2p1bXAoKSAqLworIAlyZXR1cm4gKE5PKTsKKyAjZW5kaWYKKysgICAgfSBlbHNlIGlmICh0b2tbMF0gPT0gJy8nKSB7CQkJLyogL2ZpbGUgaGFjayAqLworKwlyZXR1cm4gKGhvc3RmaWxlX21hdGNoKHRvaywgaG9zdCkpOworICAgICB9IGVsc2UgaWYgKFNUUl9FUSh0b2ssICJLTk9XTiIpKSB7CQkvKiBjaGVjayBhZGRyZXNzIGFuZCBuYW1lICovCisgCWNoYXIgICAqbmFtZSA9IGV2YWxfaG9zdG5hbWUoaG9zdCk7CisgCXJldHVybiAoU1RSX05FKGV2YWxfaG9zdGFkZHIoaG9zdCksIHVua25vd24pICYmIEhPU1ROQU1FX0tOT1dOKG5hbWUpKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkyMDA0LTA0LTEwIDE5OjI4OjA5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDQtMDQtMTAgMTk6Mjc6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtMzUzLDYgKzM1Myw4IEBACisgeworICAgICBpZiAocGF0WzBdID09ICdAJykgeworIAl0Y3BkX3dhcm4oIiVzOiBkYWVtb24gbmFtZSBiZWdpbnMgd2l0aCBcIkBcIiIsIHBhdCk7CisrICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcvJykgeworKwl0Y3BkX3dhcm4oIiVzOiBkYWVtb24gbmFtZSBiZWdpbnMgd2l0aCBcIi9cIiIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcuJykgeworIAl0Y3BkX3dhcm4oIiVzOiBkYWVtb24gbmFtZSBiZWdpbnMgd2l0aCBkb3QiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFtzdHJsZW4ocGF0KSAtIDFdID09ICcuJykgeworQEAgLTM4NSw2ICszODcsOCBAQAorIHsKKyAgICAgaWYgKHBhdFswXSA9PSAnQCcpIHsJCQkvKiBAbmV0Z3JvdXAgKi8KKyAJdGNwZF93YXJuKCIlczogdXNlciBuYW1lIGJlZ2lucyB3aXRoIFwiQFwiIiwgcGF0KTsKKysgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy8nKSB7CisrCXRjcGRfd2FybigiJXM6IHVzZXIgbmFtZSBiZWdpbnMgd2l0aCBcIi9cIiIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcuJykgeworIAl0Y3BkX3dhcm4oIiVzOiB1c2VyIG5hbWUgYmVnaW5zIHdpdGggZG90IiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKK0BAIC00MzAsOCArNDM0LDEzIEBACisgc3RhdGljIGludCBjaGVja19ob3N0KHBhdCkKKyBjaGFyICAgKnBhdDsKKyB7CisrICAgIGNoYXIgICAgYnVmW0JVRlNJWl07CisgICAgIGNoYXIgICAqbWFzazsKKyAgICAgaW50ICAgICBhZGRyX2NvdW50ID0gMTsKKysgICAgRklMRSAgICpmcDsKKysgICAgc3RydWN0IHRjcGRfY29udGV4dCBzYXZlZF9jb250ZXh0OworKyAgICBjaGFyICAgKmNwOworKyAgICBjaGFyICAgKndzcCA9ICIgXHRcclxuIjsKKyAKKyAgICAgaWYgKHBhdFswXSA9PSAnQCcpIHsJCQkvKiBAbmV0Z3JvdXAgKi8KKyAjaWZkZWYgTk9fTkVUR1JFTlQKK0BAIC00NTAsNiArNDU5LDIxIEBACisgCXRjcGRfd2FybigibmV0Z3JvdXAgc3VwcG9ydCBkaXNhYmxlZCIpOworICNlbmRpZgorICNlbmRpZgorKyAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLycpIHsJCQkvKiAvcGF0aC9uYW1lICovCisrCWlmICgoZnAgPSBmb3BlbihwYXQsICJyIikpICE9IDApIHsKKysJICAgIHNhdmVkX2NvbnRleHQgPSB0Y3BkX2NvbnRleHQ7CisrCSAgICB0Y3BkX2NvbnRleHQuZmlsZSA9IHBhdDsKKysJICAgIHRjcGRfY29udGV4dC5saW5lID0gMDsKKysJICAgIHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkpIHsKKysJCXRjcGRfY29udGV4dC5saW5lKys7CisrCQlmb3IgKGNwID0gc3RydG9rKGJ1Ziwgd3NwKTsgY3A7IGNwID0gc3RydG9rKChjaGFyICopIDAsIHdzcCkpCisrCQkgICAgY2hlY2tfaG9zdChjcCk7CisrCSAgICB9CisrCSAgICB0Y3BkX2NvbnRleHQgPSBzYXZlZF9jb250ZXh0OworKwkgICAgZmNsb3NlKGZwKTsKKysJfSBlbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKysJICAgIHRjcGRfd2Fybigib3BlbiAlczogJW0iLCBwYXQpOworKwl9CisgICAgIH0gZWxzZSBpZiAobWFzayA9IHNwbGl0X2F0KHBhdCwgJy8nKSkgewkvKiBuZXR3b3JrL25ldG1hc2sgKi8KKyAjaWZkZWYgSU5FVDYKKyAJaW50IG1hc2tfbGVuOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3VzYWdpX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZThkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC11TiB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYubmV3L2hvc3RzX2FjY2Vzcy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwlNb24gTWF5IDIwIDE0OjAwOjU2IDIwMDIKKysrKyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9ob3N0c19hY2Nlc3MuYwlNb24gTWF5IDIwIDE0OjI1OjA1IDIwMDIKK0BAIC00NDgsNiArNDQ4LDE1IEBACisgICAgIGludCBsZW4sIG1hc2tfbGVuLCBpID0gMDsKKyAgICAgY2hhciBjaDsKKyAKKysgICAgLyoKKysgICAgICogQmVoYXZpb3Igb2YgZ2V0YWRkcmluZm8oKSBhZ2FpbnN0IElQdjQtbWFwcGVkIElQdjYgYWRkcmVzcyBpcworKyAgICAgKiBkaWZmZXJlbnQgYmV0d2VlbiBLQU1FIGFuZCBTb2xhcmlzOC4gIFdoaWxlIEtBTUUgcmV0dXJucworKyAgICAgKiBBRl9JTkVUNiwgU29sYXJpczggcmV0dXJucyBBRl9JTkVULiAgU28sIHdlIGF2b2lkIHRoaXMgaGVyZS4KKysgICAgICovCisrICAgIGlmIChTVFJOX0VRKHN0cmluZywgIjo6ZmZmZjoiLCA3KQorKwkmJiBkb3RfcXVhZF9hZGRyKHN0cmluZyArIDcpICE9IElOQUREUl9OT05FKQorKwlyZXR1cm4gKG1hc2tlZF9tYXRjaDQobmV0X3RvaywgbWFza190b2ssIHN0cmluZyArIDcpKTsKKysKKyAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworQEAgLTQ1NywxMyArNDY2LDYgQEAKKyAgICAgbWVtY3B5KCZhZGRyLCByZXMtPmFpX2FkZHIsIHNpemVvZihhZGRyKSk7CisgICAgIGZyZWVhZGRyaW5mbyhyZXMpOworIAorLSAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHIuc2luNl9hZGRyKSkgeworLQlpZiAoKCoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkclsxMl0gPSBkb3RfcXVhZF9hZGRyKG5ldF90b2spKSA9PSBJTkFERFJfTk9ORQorLQkgfHwgKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUpCistCSAgICByZXR1cm4gKE5PKTsKKy0JcmV0dXJuICgoKih1X2ludDMyX3QgKikmYWRkci5zaW42X2FkZHIuczZfYWRkclsxMl0gJiBtYXNrKSA9PSAqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdKTsKKy0gICAgfQorLQorICAgICAvKiBtYXRjaCBJUHY2IGFkZHJlc3MgYWdhaW5zdCBuZXRudW1iZXIvcHJlZml4bGVuICovCisgICAgIGxlbiA9IHN0cmxlbihuZXRfdG9rKTsKKyAgICAgaWYgKCpuZXRfdG9rICE9ICdbJyB8fCBuZXRfdG9rW2xlbiAtIDFdICE9ICddJykKK2RpZmYgLXVOIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMgdGNwX3dyYXBwZXJzXzcuNi5uZXcvc29ja2V0LmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jCU1vbiBNYXkgMjAgMTM6NDg6MzUgMjAwMgorKysrIHRjcF93cmFwcGVyc183LjYubmV3L3NvY2tldC5jCU1vbiBNYXkgMjAgMTQ6MjI6MjcgMjAwMgorQEAgLTIyOCw3ICsyMjgsNyBAQAorIAloaW50cy5haV9mYW1pbHkgPSBzaW4tPnNhX2ZhbWlseTsKKyAJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FIHwgQUlfTlVNRVJJQ0hPU1Q7CistCWlmICgoZXJyID0gZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkgPT0gMCkpIHsKKysJaWYgKChlcnIgPSBnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSkgPT0gMCkgeworIAkgICAgZnJlZWFkZHJpbmZvKHJlczApOworIAkgICAgcmVzMCA9IE5VTEw7CisgCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9uYW1lIG1pc21hdGNoOiAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDgzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDAzLTA4LTIxIDAxOjQzOjM5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAwMy0wOC0yMSAwMTo0MzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NSw3ICs0NSw3IEBACisgIworICMgU3lzVi40IFNvbGFyaXMgMi54IE9TRiBBSVgKKyAjUkVBTF9EQUVNT05fRElSPS91c3Ivc2JpbgorLSMKKytSRUFMX0RBRU1PTl9ESVI9L3Vzci9zYmluCisgIyBCU0QgNC40CisgI1JFQUxfREFFTU9OX0RJUj0vdXNyL2xpYmV4ZWMKKyAjCitAQCAtNTEyLDYgKzUxOSw3IEBACisgIyAoZXhhbXBsZXM6IGFsbG93LCBkZW55LCBiYW5uZXJzLCB0d2lzdCBhbmQgc3Bhd24pLgorICMgCisgI1NUWUxFCT0gLURQUk9DRVNTX09QVElPTlMJIyBFbmFibGUgbGFuZ3VhZ2UgZXh0ZW5zaW9ucy4KKytTVFlMRSA9IC1EUFJPQ0VTU19PUFRJT05TCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IENoYW5naW5nIHRoZSBkZWZhdWx0IGRpc3Bvc2l0aW9uIG9mIGxvZ2ZpbGUgcmVjb3JkcworQEAgLTUzNSw2ICs1NDMsNyBAQAorICMgVGhlIExPR19YWFggbmFtZXMgYmVsb3cgYXJlIHRha2VuIGZyb20gdGhlIC91c3IvaW5jbHVkZS9zeXNsb2cuaCBmaWxlLgorIAorIEZBQ0lMSVRZPSBMT0dfTUFJTAkjIExPR19NQUlMIGlzIHdoYXQgbW9zdCBzZW5kbWFpbCBkYWVtb25zIHVzZQorK0ZBQ0lMSVRZPSBMT0dfREFFTU9OCisgCisgIyBUaGUgc3lzbG9nIHByaW9yaXR5IGF0IHdoaWNoIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbnMgYXJlIGxvZ2dlZC4KKyAKK0BAIC02MzEsNiArNjQwLDcgQEAKKyAjIGxvb2t1cHMgYWx0b2dldGhlciwgc2VlIHRoZSBuZXh0IHNlY3Rpb24uCisgCisgUEFSQU5PSUQ9IC1EUEFSQU5PSUQKKytQQVJBTk9JRD0KKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBPcHRpb25hbDogdHVybmluZyBvZmYgaG9zdG5hbWUgbG9va3VwcworQEAgLTY0NCw2ICs2NTQsNyBAQAorICMgbW9kZSAoc2VlIHByZXZpb3VzIHNlY3Rpb24pIGFuZCBjb21tZW50IG91dCB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24uCisgCisgSE9TVE5BTUU9IC1EQUxXQVlTX0hPU1ROQU1FCisrSE9TVE5BTUU9CisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBPcHRpb25hbDogVHVybmluZyBvbiBob3N0IEFERFJFU1MgY2hlY2tpbmcKK0BAIC02NzAsNiArNjgxLDcgQEAKKyAjIFNvbGFyaXMgMi54LCBhbmQgTGludXguIFNlZSB5b3VyIHN5c3RlbSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorICMKKyAjIEtJTExfT1BUPSAtREtJTExfSVBfT1BUSU9OUworK0tJTExfT1BUPSAtREtJTExfSVBfT1BUSU9OUworIAorICMjIEVuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAQCAtNjc3LDkgKzY4OSwxMCBAQAorICMgUHJvdGVjdGlvbiBhZ2FpbnN0IHdlaXJkIHNoZWxscyBvciB3ZWlyZCBtYWtlIHByb2dyYW1zLgorIAorIFNIRUxMCT0gL2Jpbi9zaAorLS5jLm86OwkkKENDKSAkKENGTEFHUykgLWMgJCouYworKy5jLm86OwkkKENDKSAkKENGTEFHUykgLW8gJCoubyAtYyAkKi5jCisgCistQ0ZMQUdTCT0gLU8gLURGQUNJTElUWT0kKEZBQ0lMSVRZKSAkKEFDQ0VTUykgJChQQVJBTk9JRCkgJChORVRHUk9VUCkgXAorK0NPUFRTCT0gLU8yIC1nCisrQ0ZMQUdTCT0gJChDT1BUUykgLURGQUNJTElUWT0kKEZBQ0lMSVRZKSAkKEFDQ0VTUykgJChQQVJBTk9JRCkgJChORVRHUk9VUCkgXAorIAkkKEJVR1MpICQoU1lTVFlQRSkgJChBVVRIKSAkKFVNQVNLKSBcCisgCS1EUkVBTF9EQUVNT05fRElSPVwiJChSRUFMX0RBRU1PTl9ESVIpXCIgJChTVFlMRSkgJChLSUxMX09QVCkgXAorIAktRFNFVkVSSVRZPSQoU0VWRVJJVFkpIC1EUkZDOTMxX1RJTUVPVVQ9JChSRkM5MzFfVElNRU9VVCkgXAorQEAgLTcxMiwxMCArNzI1LDExIEBACisgCisgY29uZmlnLWNoZWNrOgorIAlAc2V0ICtlOyB0ZXN0IC1uICIkKFJFQUxfREFFTU9OX0RJUikiIHx8IHsgbWFrZTsgZXhpdCAxOyB9CistCUBzZXQgK2U7IGVjaG8gJChDRkxBR1MpID4vdG1wL2NmbGFncy4kJCQkIDsgXAorLQlpZiBjbXAgY2ZsYWdzIC90bXAvY2ZsYWdzLiQkJCQgOyBcCistCXRoZW4gcm0gL3RtcC9jZmxhZ3MuJCQkJCA7IFwKKy0JZWxzZSBtdiAvdG1wL2NmbGFncy4kJCQkIGNmbGFncyA7IFwKKysJQHNldCArZTsgZWNobyAkKENGTEFHUykgPmNmbGFncy5uZXcgOyBcCisrCWlmIGNtcCBjZmxhZ3MgY2ZsYWdzLm5ldyA7IFwKKysJdGhlbiBybSBjZmxhZ3MubmV3IDsgXAorKwllbHNlIG12IGNmbGFncy5uZXcgY2ZsYWdzIDsgXAorIAlmaSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisrCUBpZiBbICEgLWQgc2hhcmVkIF07IHRoZW4gbWtkaXIgc2hhcmVkOyBmaQorIAorICQoTElCKToJJChMSUJfT0JKKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEzX3NobGliX3dlYWtzeW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTNfc2hsaWJfd2Vha3N5bS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEzOTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEzX3NobGliX3dlYWtzeW0ucGF0Y2gKQEAgLTAsMCArMSwyNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZSB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCTIwMDQtMDUtMDIgMTU6Mzc6NTkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDA0LTA1LTAyIDE1OjMxOjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1MCwxNSArMTUwLDE1IEBACisgCisgbGludXg6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorLQlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9d2Vha19zeW1ib2xzLm8gXAorIAlORVRHUk9VUD0iLURORVRHUk9VUCIgVExJPSBWU1lTTE9HPSBCVUdTPSBcCistCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtRElORVQ2PTEgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURIQVZFX1dFQUtTWU1TIC1EX1JFRU5UUkFOVCAtRElORVQ2PTEgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIGFsbAorIAorIGdudToKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCistCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj13ZWFrX3N5bWJvbHMubyBcCisgCU5FVEdST1VQPS1ETkVUR1JPVVAgVExJPSBWU1lTTE9HPSBCVUdTPSBcCistCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiIgYWxsCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiAtREhBVkVfV0VBS1NZTVMgLURfUkVFTlRSQU5UIiBhbGwKKyAKKyAjIFRoaXMgaXMgZ29vZCBmb3IgbWFueSBTWVNWK0JTRCBoeWJyaWRzIHdpdGggTklTLCBwcm9iYWJseSBhbHNvIGZvciBIUC1VWCA3LnguCisgaHB1eCBocHV4OCBocHV4OSBocHV4MTA6CitAQCAtNzEzLDcgKzcxMywyMiBAQAorIAorIExJQgk9IGxpYndyYXAuYQorIAorLWFsbCBvdGhlcjogY29uZmlnLWNoZWNrIHRjcGQgdGNwZG1hdGNoIHRyeS1mcm9tIHNhZmVfZmluZ2VyIHRjcGRjaGsKKytzaGFyZWQvJS5vOiAlLmMKKysJJChDQykgJChDRkxBR1MpICQoU0hDRkxBR1MpIC1jICQ8IC1vICRACisrCisrU09NQUpPUiA9IDAKKytTT01JTk9SID0gNy42CisrCisrU0hMSUIJCT0gc2hhcmVkL2xpYndyYXAuc28uJChTT01BSk9SKS4kKFNPTUlOT1IpCisrU0hMSUJTT01BSgk9IHNoYXJlZC9saWJ3cmFwLnNvLiQoU09NQUpPUikKKytTSExJQlNPCQk9IHNoYXJlZC9saWJ3cmFwLnNvCisrU0hMSUJGTEFHUwk9IC1Mc2hhcmVkIC1sd3JhcAorKworK1NITElOS0ZMQUdTID0gLXNoYXJlZCAtWGxpbmtlciAtc29uYW1lIC1YbGlua2VyIGxpYndyYXAuc28uJChTT01BSk9SKSAtbGMgJChMSUJTKQorK1NIQ0ZMQUdTID0gLWZQSUMgLXNoYXJlZCAtRF9SRUVOVFJBTlQKKytTSExJQl9PQko9ICQoYWRkcHJlZml4IHNoYXJlZC8sICQoTElCX09CSikpOworKworK2FsbCBvdGhlcjogY29uZmlnLWNoZWNrIHRjcGQgdGNwZG1hdGNoIHRyeS1mcm9tIHNhZmVfZmluZ2VyIHRjcGRjaGsgJChMSUIpCisgCisgIyBJbnZhbGlkYXRlIGFsbCBvYmplY3QgZmlsZXMgd2hlbiB0aGUgY29tcGlsZXIgb3B0aW9ucyAoQ0ZMQUdTKSBoYXZlIGNoYW5nZWQuCisgCitAQCAtNzMxLDI3ICs3NDYsMzMgQEAKKyAJJChBUikgJChBUkZMQUdTKSAkKExJQikgJChMSUJfT0JKKQorIAktJChSQU5MSUIpICQoTElCKQorIAorLXRjcGQ6CXRjcGQubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRjcGQubyAkKExJQikgJChMSUJTKQorKyQoU0hMSUIpOiAkKFNITElCX09CSikKKysJcm0gLWYgJChTSExJQikKKysJJChDQykgLW8gJChTSExJQikgJChTSExJTktGTEFHUykgJChTSExJQl9PQkopCisrCWxuIC1zZiAkKG5vdGRpciAkKFNITElCKSkgJChTSExJQlNPTUFKKQorKwlsbiAtc2YgJChub3RkaXIgJChTSExJQlNPTUFKKSkgJChTSExJQlNPKQorKworK3RjcGQ6CXRjcGQubyAkKFNITElCKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgdGNwZC5vICQoU0hMSUJGTEFHUykKKyAKKyBtaXNjZDoJbWlzY2QubyAkKExJQikKKyAJJChDQykgJChDRkxBR1MpIC1vICRAIG1pc2NkLm8gJChMSUIpICQoTElCUykKKyAKKy1zYWZlX2Zpbmdlcjogc2FmZV9maW5nZXIubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChMSUIpICQoTElCUykKKytzYWZlX2Zpbmdlcjogc2FmZV9maW5nZXIubyAkKFNITElCKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgc2FmZV9maW5nZXIubyAkKFNITElCRkxBR1MpCisgCisgVENQRE1BVENIX09CSiA9IHRjcGRtYXRjaC5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCistdGNwZG1hdGNoOiAkKFRDUERNQVRDSF9PQkopICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChUQ1BETUFUQ0hfT0JKKSAkKExJQikgJChMSUJTKQorK3RjcGRtYXRjaDogJChUQ1BETUFUQ0hfT0JKKSAkKFNITElCKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChUQ1BETUFUQ0hfT0JKKSAkKFNITElCRkxBR1MpCisgCistdHJ5LWZyb206IHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChMSUIpICQoTElCUykKKyt0cnktZnJvbTogdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BEQ0hLX09CSiA9IHRjcGRjaGsubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorLXRjcGRjaGs6ICQoVENQRENIS19PQkopICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChUQ1BEQ0hLX09CSikgJChMSUIpICQoTElCUykKKyt0Y3BkY2hrOiAkKFRDUERDSEtfT0JKKSAkKFNITElCKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChUQ1BEQ0hLX09CSikgJChTSExJQkZMQUdTKQorIAorIHNoYXI6CSQoS0lUKQorIAlAc2hhciAkKEtJVCkKK0BAIC03NjcsNyArNzg4LDkgQEAKKyAKKyBjbGVhbjoKKyAJcm0gLWYgdGNwZCBtaXNjZCBzYWZlX2ZpbmdlciB0Y3BkbWF0Y2ggdGNwZGNoayB0cnktZnJvbSAqLltvYV0gY29yZSBcCisrCWxpYndyYXAqLnNvKiBcCisgCWNmbGFncworKwlybSAtcmYgc2hhcmVkLworIAorIHRpZHk6CWNsZWFuCisgCWNobW9kIC1SIGErciAuCitAQCAtOTEzLDUgKzkzNiw2IEBACisgdXBkYXRlLm86IG15c3RkYXJnLmgKKyB1cGRhdGUubzogdGNwZC5oCisgdmZwcmludGYubzogY2ZsYWdzCisrd2Vha19zeW1ib2xzLm86IHRjcGQuaAorIHdvcmthcm91bmRzLm86IGNmbGFncworIHdvcmthcm91bmRzLm86IHRjcGQuaAorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTIwMDQtMDUtMDIgMTU6Mzc6NTkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNC0wNS0wMiAxNTozNzo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC00LDYgKzQsMTUgQEAKKyAgICogQXV0aG9yOiBXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisgICAqLworIAorKyNpZm5kZWYgX1RDUFdSQVBQRVJTX1RDUERfSAorKyNkZWZpbmUgX1RDUFdSQVBQRVJTX1RDUERfSAorKworKy8qIE5lZWQgZGVmaW5pdGlvbnMgb2Ygc3RydWN0IHNvY2thZGRyX2luIGFuZCBGSUxFLiAqLworKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrX19CRUdJTl9ERUNMUworKworIC8qIFN0cnVjdHVyZSB0byBkZXNjcmliZSBvbmUgY29tbXVuaWNhdGlvbnMgZW5kcG9pbnQuICovCisgCisgI2RlZmluZSBTVFJJTkdfTEVOR1RICTEyOAkJLyogaG9zdHMsIHVzZXJzLCBwcm9jZXNzZXMgKi8KK0BAIC0yOSwxMCArMzgsMTAgQEAKKyAgICAgY2hhciAgICBwaWRbMTBdOwkJCS8qIGFjY2VzcyB2aWEgZXZhbF9waWQocmVxdWVzdCkgKi8KKyAgICAgc3RydWN0IGhvc3RfaW5mbyBjbGllbnRbMV07CQkvKiBjbGllbnQgZW5kcG9pbnQgaW5mbyAqLworICAgICBzdHJ1Y3QgaG9zdF9pbmZvIHNlcnZlclsxXTsJCS8qIHNlcnZlciBlbmRwb2ludCBpbmZvICovCistICAgIHZvaWQgICgqc2luaykgKCk7CQkJLyogZGF0YWdyYW0gc2luayBmdW5jdGlvbiBvciAwICovCistICAgIHZvaWQgICgqaG9zdG5hbWUpICgpOwkJLyogYWRkcmVzcyB0byBwcmludGFibGUgaG9zdG5hbWUgKi8KKy0gICAgdm9pZCAgKCpob3N0YWRkcikgKCk7CQkvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCistICAgIHZvaWQgICgqY2xlYW51cCkgKCk7CQkvKiBjbGVhbnVwIGZ1bmN0aW9uIG9yIDAgKi8KKysgICAgdm9pZCAgKCpzaW5rKSAoaW50KTsJCS8qIGRhdGFncmFtIHNpbmsgZnVuY3Rpb24gb3IgMCAqLworKyAgICB2b2lkICAoKmhvc3RuYW1lKSAoc3RydWN0IGhvc3RfaW5mbyAqKTsgLyogYWRkcmVzcyB0byBwcmludGFibGUgaG9zdG5hbWUgKi8KKysgICAgdm9pZCAgKCpob3N0YWRkcikgKHN0cnVjdCBob3N0X2luZm8gKik7IC8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKysgICAgdm9pZCAgKCpjbGVhbnVwKSAoc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsgLyogY2xlYW51cCBmdW5jdGlvbiBvciAwICovCisgICAgIHN0cnVjdCBuZXRjb25maWcgKmNvbmZpZzsJCS8qIG5ldGRpciBoYW5kbGUgKi8KKyB9OworIAorQEAgLTcwLDIwICs3OSwyNyBAQAorICNkZWZpbmUgZnJvbWhvc3Qgc29ja19ob3N0CQkvKiBubyBUTEkgc3VwcG9ydCBuZWVkZWQgKi8KKyAjZW5kaWYKKyAKKy1leHRlcm4gaW50IGhvc3RzX2FjY2VzcygpOwkJLyogYWNjZXNzIGNvbnRyb2wgKi8KKy1leHRlcm4gdm9pZCBzaGVsbF9jbWQoKTsJCS8qIGV4ZWN1dGUgc2hlbGwgY29tbWFuZCAqLworLWV4dGVybiBjaGFyICpwZXJjZW50X3goKTsJCS8qIGRvICU8Y2hhcj4gZXhwYW5zaW9uICovCistZXh0ZXJuIHZvaWQgcmZjOTMxKCk7CQkJLyogY2xpZW50IG5hbWUgZnJvbSBSRkMgOTMxIGRhZW1vbiAqLworLWV4dGVybiB2b2lkIGNsZWFuX2V4aXQoKTsJCS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCistZXh0ZXJuIHZvaWQgcmVmdXNlKCk7CQkJLyogY2xlYW4gdXAgYW5kIGV4aXQgKi8KKy1leHRlcm4gY2hhciAqeGdldHMoKTsJCQkvKiBmZ2V0cygpIG9uIHN0ZXJvaWRzICovCistZXh0ZXJuIGNoYXIgKnNwbGl0X2F0KCk7CQkvKiBzdHJjaHIoKSBhbmQgc3BsaXQgKi8KKy1leHRlcm4gdW5zaWduZWQgbG9uZyBkb3RfcXVhZF9hZGRyKCk7CS8qIHJlc3RyaWN0ZWQgaW5ldF9hZGRyKCkgKi8KKytleHRlcm4gaW50IGhvc3RzX2FjY2VzcyhzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0KTsJLyogYWNjZXNzIGNvbnRyb2wgKi8KKytleHRlcm4gdm9pZCBzaGVsbF9jbWQoY2hhciAqKTsJCS8qIGV4ZWN1dGUgc2hlbGwgY29tbWFuZCAqLworK2V4dGVybiBjaGFyICpwZXJjZW50X3goY2hhciAqLCBpbnQsIGNoYXIgKiwgc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsKKysJCQkJCS8qIGRvICU8Y2hhcj4gZXhwYW5zaW9uICovCisrZXh0ZXJuIHZvaWQgcmZjOTMxKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY2hhciAqKTsKKysJCQkJCS8qIGNsaWVudCBuYW1lIGZyb20gUkZDIDkzMSBkYWVtb24gKi8KKytleHRlcm4gdm9pZCBjbGVhbl9leGl0KHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCisrZXh0ZXJuIHZvaWQgcmVmdXNlKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCisrZXh0ZXJuIGNoYXIgKnhnZXRzKGNoYXIgKiwgaW50LCBGSUxFICopOwkvKiBmZ2V0cygpIG9uIHN0ZXJvaWRzICovCisrZXh0ZXJuIGNoYXIgKnNwbGl0X2F0KGNoYXIgKiwgaW50KTsJCS8qIHN0cmNocigpIGFuZCBzcGxpdCAqLworK2V4dGVybiB1bnNpZ25lZCBsb25nIGRvdF9xdWFkX2FkZHIoY2hhciAqKTsJLyogcmVzdHJpY3RlZCBpbmV0X2FkZHIoKSAqLworIAorIC8qIEdsb2JhbCB2YXJpYWJsZXMuICovCisgCisrI2lmZGVmIEhBVkVfV0VBS1NZTVMKKytleHRlcm4gaW50IGFsbG93X3NldmVyaXR5IF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7IC8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKytleHRlcm4gaW50IGRlbnlfc2V2ZXJpdHkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsgLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworKyNlbHNlCisgZXh0ZXJuIGludCBhbGxvd19zZXZlcml0eTsJCS8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKyBleHRlcm4gaW50IGRlbnlfc2V2ZXJpdHk7CQkvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisrI2VuZGlmCisgZXh0ZXJuIGNoYXIgKmhvc3RzX2FsbG93X3RhYmxlOwkJLyogZm9yIHZlcmlmaWNhdGlvbiBtb2RlIHJlZGlyZWN0aW9uICovCisgZXh0ZXJuIGNoYXIgKmhvc3RzX2RlbnlfdGFibGU7CQkvKiBmb3IgdmVyaWZpY2F0aW9uIG1vZGUgcmVkaXJlY3Rpb24gKi8KKyBleHRlcm4gaW50IGhvc3RzX2FjY2Vzc192ZXJib3NlOwkvKiBmb3IgdmVyYm9zZSBtYXRjaGluZyBtb2RlICovCitAQCAtOTgsNiArMTE0LDggQEAKKyAjaWZkZWYgX19TVERDX18KKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9pbml0KHN0cnVjdCByZXF1ZXN0X2luZm8gKiwuLi4pOworIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X3NldChzdHJ1Y3QgcmVxdWVzdF9pbmZvICosLi4uKTsKKytleHRlcm4gaW50IGhvc3RzX2N0bChjaGFyICpkYWVtb24sIGNoYXIgKmNsaWVudF9uYW1lLCBjaGFyICpjbGllbnRfYWRkciwKKysJCWNoYXIgKmNsaWVudF91c2VyKTsKKyAjZWxzZQorIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X2luaXQoKTsJLyogaW5pdGlhbGl6ZSByZXF1ZXN0ICovCisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Rfc2V0KCk7CS8qIHVwZGF0ZSByZXF1ZXN0IHN0cnVjdHVyZSAqLworQEAgLTEyMSwyMCArMTM5LDIzIEBACisgICAqIGhvc3RfaW5mbyBzdHJ1Y3R1cmVzIHNlcnZlIGFzIGNhY2hlcyBmb3IgdGhlIGxvb2t1cCByZXN1bHRzLgorICAgKi8KKyAKKy1leHRlcm4gY2hhciAqZXZhbF91c2VyKCk7CQkvKiBjbGllbnQgdXNlciAqLworLWV4dGVybiBjaGFyICpldmFsX2hvc3RuYW1lKCk7CQkvKiBwcmludGFibGUgaG9zdG5hbWUgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0YWRkcigpOwkJLyogcHJpbnRhYmxlIGhvc3QgYWRkcmVzcyAqLworLWV4dGVybiBjaGFyICpldmFsX2hvc3RpbmZvKCk7CQkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworLWV4dGVybiBjaGFyICpldmFsX2NsaWVudCgpOwkJLyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCistZXh0ZXJuIGNoYXIgKmV2YWxfc2VydmVyKCk7CQkvKiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgKi8KKytleHRlcm4gY2hhciAqZXZhbF91c2VyKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CS8qIGNsaWVudCB1c2VyICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdG5hbWUoc3RydWN0IGhvc3RfaW5mbyAqKTsJLyogcHJpbnRhYmxlIGhvc3RuYW1lICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGFkZHIoc3RydWN0IGhvc3RfaW5mbyAqKTsJLyogcHJpbnRhYmxlIGhvc3QgYWRkcmVzcyAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RpbmZvKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfY2xpZW50KHN0cnVjdCByZXF1ZXN0X2luZm8gKik7Lyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfc2VydmVyKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7Lyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisgI2RlZmluZSBldmFsX2RhZW1vbihyKQkoKHIpLT5kYWVtb24pCS8qIGRhZW1vbiBwcm9jZXNzIG5hbWUgKi8KKyAjZGVmaW5lIGV2YWxfcGlkKHIpCSgociktPnBpZCkJLyogcHJvY2VzcyBpZCAqLworIAorIC8qIFNvY2tldC1zcGVjaWZpYyBtZXRob2RzLCBpbmNsdWRpbmcgRE5TIGhvc3RuYW1lIGxvb2t1cHMuICovCisgCistZXh0ZXJuIHZvaWQgc29ja19ob3N0KCk7CQkvKiBsb29rIHVwIGVuZHBvaW50IGFkZHJlc3NlcyAqLworLWV4dGVybiB2b2lkIHNvY2tfaG9zdG5hbWUoKTsJCS8qIHRyYW5zbGF0ZSBhZGRyZXNzIHRvIGhvc3RuYW1lICovCistZXh0ZXJuIHZvaWQgc29ja19ob3N0YWRkcigpOwkJLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworKy8qIGxvb2sgdXAgZW5kcG9pbnQgYWRkcmVzc2VzICovCisrZXh0ZXJuIHZvaWQgc29ja19ob3N0KHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CisrLyogdHJhbnNsYXRlIGFkZHJlc3MgdG8gaG9zdG5hbWUgKi8KKytleHRlcm4gdm9pZCBzb2NrX2hvc3RuYW1lKHN0cnVjdCBob3N0X2luZm8gKik7CisrLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworK2V4dGVybiB2b2lkIHNvY2tfaG9zdGFkZHIoc3RydWN0IGhvc3RfaW5mbyAqKTsKKyAjZGVmaW5lIHNvY2tfbWV0aG9kcyhyKSBcCisgCXsgKHIpLT5ob3N0bmFtZSA9IHNvY2tfaG9zdG5hbWU7IChyKS0+aG9zdGFkZHIgPSBzb2NrX2hvc3RhZGRyOyB9CisgCitAQCAtMTgyLDcgKzIwMyw3IEBACisgICAqIGJlaGF2aW9yLgorICAgKi8KKyAKKy1leHRlcm4gdm9pZCBwcm9jZXNzX29wdGlvbnMoKTsJCS8qIGV4ZWN1dGUgb3B0aW9ucyAqLworK2V4dGVybiB2b2lkIHByb2Nlc3Nfb3B0aW9ucyhjaGFyICosIHN0cnVjdCByZXF1ZXN0X2luZm8gKik7LyogZXhlY3V0ZSBvcHRpb25zICovCisgZXh0ZXJuIGludCBkcnlfcnVuOwkJCS8qIHZlcmlmaWNhdGlvbiBmbGFnICovCisgCisgLyogQnVnIHdvcmthcm91bmRzLiAqLworQEAgLTIyMSwzICsyNDIsNyBAQAorICNkZWZpbmUgc3RydG9rCW15X3N0cnRvaworIGV4dGVybiBjaGFyICpteV9zdHJ0b2soKTsKKyAjZW5kaWYKKysKKytfX0VORF9ERUNMUworKworKyNlbmRpZgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy93ZWFrX3N5bWJvbHMuYyB0Y3Bfd3JhcHBlcnNfNy42L3dlYWtfc3ltYm9scy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3dlYWtfc3ltYm9scy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi93ZWFrX3N5bWJvbHMuYwkyMDA0LTA1LTAyIDE1OjMxOjA5LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMSBAQAorKyAvKgorKyAgKiBAKCMpIHdlYWtfc3ltYm9scy5oIDEuNSA5OS8xMi8yOSAyMzo1MAorKyAgKiAKKysgICogQXV0aG9yOiBBbnRob255IFRvd25zIDxhanRAZGViaWFuLm9yZz4KKysgICovCisrCisrI2lmZGVmIEhBVkVfV0VBS1NZTVMKKysjaW5jbHVkZSA8c3lzbG9nLmg+CisraW50IGRlbnlfc2V2ZXJpdHkgPSBMT0dfV0FSTklORzsKKytpbnQgYWxsb3dfc2V2ZXJpdHkgPSBTRVZFUklUWTsgCisrI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTRfY2lkcl9zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjU2ODVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDY4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwMy0wOC0yMSAwMzoxNTozMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC05MCw2ICs5MCwxMCBAQAorIHBhdHRlcm4gYDEzMS4xNTUuNzIuMC8yNTUuMjU1LjI1NC4wXCcgbWF0Y2hlcyBldmVyeSBhZGRyZXNzIGluIHRoZQorIHJhbmdlIGAxMzEuMTU1LjcyLjBcJyB0aHJvdWdoIGAxMzEuMTU1LjczLjI1NVwnLgorIC5JUCBcKGJ1CisrQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgbi5uLm4ubi9tbScgaXMgaW50ZXJwcmV0ZWQgYXMgYQorK2BuZXQvbWFza2xlbmd0aCcgcGFpciwgd2hlcmUgYG1tJyBpcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGAxJworK2JpdHMgaW4gdGhlIG5ldG1hc2sgYXBwbGllZCB0byB0aGUgYG4ubi5uLm4nIGFkZHJlc3MuCisrLklQIFwoYnUKKyBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBbbjpuOm46bjpuOm46bjpuXS9tXCcgaXMgaW50ZXJwcmV0ZWQgYXMgYQorIGBbbmV0XS9wcmVmaXhsZW5cJyBwYWlyLiBBbiBJUHY2IGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmCisgYHByZWZpeGxlblwnIGJpdHMgb2YgYG5ldFwnIGlzIGVxdWFsIHRvIHRoZSBgcHJlZml4bGVuXCcgYml0cyBvZiB0aGUKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwMy0wOC0yMSAwMzowOTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00MTcsNyArNDE3LDggQEAKKyAgICAgaWYgKChhZGRyID0gZG90X3F1YWRfYWRkcihzdHJpbmcpKSA9PSBJTkFERFJfTk9ORSkKKyAJcmV0dXJuIChOTyk7CisgICAgIGlmICgobmV0ID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKy0JfHwgKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUpIHsKKysJfHwgKChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FCisrCSAgICAmJiAobWFzayA9IGNpZHJfbWFza19hZGRyKG1hc2tfdG9rKSkgPT0gMCkpIHsKKyAjaWZuZGVmIElORVQ2CisgCXRjcGRfd2FybigiYmFkIG5ldC9tYXNrIGV4cHJlc3Npb246ICVzLyVzIiwgbmV0X3RvaywgbWFza190b2spOworICNlbmRpZgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMgdGNwX3dyYXBwZXJzXzcuNi9taXNjLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jCTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9taXNjLmMJMjAwMy0wOC0yMSAwMzowOTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDcsMyArMTA3LDE3IEBACisgICAgIH0KKyAgICAgcmV0dXJuIChydW5zID09IDQgPyBpbmV0X2FkZHIoc3RyKSA6IElOQUREUl9OT05FKTsKKyB9CisrCisrLyogY2lkcl9tYXNrX2FkZHIgLSBjb252ZXJ0IGNpZHIgbmV0bWFzayBsZW5ndGggdG8gaW50ZXJuYWwgZm9ybSAqLworKworK3Vuc2lnbmVkIGxvbmcgY2lkcl9tYXNrX2FkZHIoc3RyKQorK2NoYXIgICAqc3RyOworK3sKKysgICAgaW50ICAgICBtYXNrYml0czsKKysKKysgICAgbWFza2JpdHMgPSBhdG9pKHN0cik7CisrICAgIGlmIChtYXNrYml0cyA8IDEgfHwgbWFza2JpdHMgPiAzMikKKysJcmV0dXJuICgwKTsKKysgICAgcmV0dXJuIGh0b25sKDB4RkZGRkZGRkYgPDwgKDMyIC0gbWFza2JpdHMpKTsKKyt9CisrCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAzOjA5OjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ5NywxMiArNDk3LDEyIEBACisgCWludCBtYXNrX2xlbjsKKyAKKyAJaWYgKChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKy0JICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FICYmIGNpZHJfbWFza19hZGRyKG1hc2spID09IDApCisgCSAgICAmJiAoIWlzX2luZXQ2X2FkZHIocGF0KQorIAkJfHwgKChtYXNrX2xlbiA9IGF0b2kobWFzaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkpKQorICNlbHNlCisgCWlmIChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKy0JICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FICYmIGNpZHJfbWFza19hZGRyKG1hc2spID09IDApCisgI2VuZGlmCisgCSAgICB0Y3BkX3dhcm4oIiVzLyVzOiBiYWQgbmV0L21hc2sgcGF0dGVybiIsIHBhdCwgbWFzayk7CisgICAgIH0gZWxzZSBpZiAoU1RSX0VRKHBhdCwgIkZBSUwiKSkgewkJLyogb2Jzb2xldGUgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE1X21hdGNoX2NsYXJpZnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhNjg3NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMjUgMTI6MTc6NTkuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTI1IDEyOjE3OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTg5LDYgKzg5LDggQEAKKyBiaXR3aXNlIEFORCBvZiB0aGUgYWRkcmVzcyBhbmQgdGhlIGBtYXNrXCcuIEZvciBleGFtcGxlLCB0aGUgbmV0L21hc2sKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKytgMjU1LjI1NS4yNTUuMjU1XCcgaXMgbm90IGEgdmFsaWQgbWFzayB2YWx1ZSwgc28gYSBzaW5nbGUgaG9zdCBjYW4gYmUKKyttYXRjaGVkIGp1c3QgYnkgaXRzIElQLgorIC5JUCBcKGJ1CisgQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgbi5uLm4ubi9tbScgaXMgaW50ZXJwcmV0ZWQgYXMgYQorIGBuZXQvbWFza2xlbmd0aCcgcGFpciwgd2hlcmUgYG1tJyBpcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGAxJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2V4cGFuZF9yZW1vdGVfcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4NzM3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2V2YWwuYyB0Y3Bfd3JhcHBlcnNfNy42L2V2YWwuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ldmFsLmMJMTk5NS0wMS0zMCAxOTo1MTo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2V2YWwuYwkyMDA0LTExLTA0IDEzOjU5OjAxLjAwMDAwMDAwMCArMDEwMAorQEAgLTk4LDYgKzk4LDI4IEBACisgICAgIH0KKyB9CisgCisrLyogZXZhbF9wb3J0IC0gcmV0dXJuIHN0cmluZyB3aXRoIHRoZSBwb3J0ICovCisrY2hhciAgICpldmFsX3BvcnQoc2FkZHIpCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IHNvY2thZGRyICpzYWRkcjsKKysjZWxzZQorK3N0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHI7CisrI2VuZGlmCisreworKyAgICBzdGF0aWMgY2hhciBwb3J0WzE2XTsKKysgICAgaWYgKHNhZGRyICE9IDApIHsKKysgICAgICAgIHNwcmludGYocG9ydCwgIiV1IiwKKysjaWZkZWYgSU5FVDYKKysgICAgICAgICAgICBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhZGRyKS0+c2luX3BvcnQpKTsKKysjZWxzZQorKyAgICAgICAgICAgIG50b2hzKHNhZGRyLT5zaW5fcG9ydCkpOworKyNlbmRpZgorKyAgICB9IGVsc2UgeworKwlzdHJjcHkocG9ydCwgIjAiKTsKKysgICAgfQorKyAgICByZXR1cm4gKHBvcnQpOworK30KKysKKyAvKiBldmFsX2NsaWVudCAtIHJldHVybiBzdHJpbmcgd2l0aCBhcyBtdWNoIGFib3V0IHRoZSBjbGllbnQgYXMgd2Uga25vdyAqLworIAorIGNoYXIgICAqZXZhbF9jbGllbnQocmVxdWVzdCkKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTExLTA0IDEzOjE3OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0xMS0wNCAxMzo1NTozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzUsNiArMTc1LDggQEAKKyB1bmF2YWlsYWJsZS4KKyAuSVAgIiVuICglTikiCisgVGhlIGNsaWVudCAoc2VydmVyKSBob3N0IG5hbWUgKG9yICJ1bmtub3duIiBvciAicGFyYW5vaWQiKS4KKysuSVAgIiVyICglUikiCisrVGhlIGNsaWVudHMgKHNlcnZlcnMpIHBvcnQgbnVtYmVyIChvciAiMCIpLgorIC5JUCAlcAorIFRoZSBkYWVtb24gcHJvY2VzcyBpZC4KKyAuSVAgJXMKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF94LmMgdGNwX3dyYXBwZXJzXzcuNi9wZXJjZW50X3guYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9wZXJjZW50X3guYwkxOTk0LTEyLTI4IDE3OjQyOjM4LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF94LmMJMjAwNC0xMS0wNCAxMzoxOToyOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw2ICs2Myw4IEBACisgCQljaCA9PSAnbicgPyBldmFsX2hvc3RuYW1lKHJlcXVlc3QtPmNsaWVudCkgOgorIAkJY2ggPT0gJ04nID8gZXZhbF9ob3N0bmFtZShyZXF1ZXN0LT5zZXJ2ZXIpIDoKKyAJCWNoID09ICdwJyA/IGV2YWxfcGlkKHJlcXVlc3QpIDoKKysJCWNoID09ICdyJyA/IGV2YWxfcG9ydChyZXF1ZXN0LT5jbGllbnQtPnNpbikgOgorKwkJY2ggPT0gJ1InID8gZXZhbF9wb3J0KHJlcXVlc3QtPnNlcnZlci0+c2luKSA6CisgCQljaCA9PSAncycgPyBldmFsX3NlcnZlcihyZXF1ZXN0KSA6CisgCQljaCA9PSAndScgPyBldmFsX3VzZXIocmVxdWVzdCkgOgorIAkJY2ggPT0gJyUnID8gIiUiIDogKHRjcGRfd2FybigidW5yZWNvZ25pemVkICUlJWMiLCBjaCksICIiKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkyMDA0LTExLTA0IDEzOjE3OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDQtMTEtMDQgMTM6MTk6MTMuMDAwMDAwMDAwICswMTAwCitAQCAtMTQ1LDYgKzE0NSwxMSBAQAorIGV4dGVybiBjaGFyICpldmFsX2hvc3RpbmZvKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCisgZXh0ZXJuIGNoYXIgKmV2YWxfY2xpZW50KHN0cnVjdCByZXF1ZXN0X2luZm8gKik7Lyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisgZXh0ZXJuIGNoYXIgKmV2YWxfc2VydmVyKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7Lyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisrI2lmZGVmIElORVQ2CisrZXh0ZXJuIGNoYXIgKmV2YWxfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKik7CisrI2Vsc2UKKytleHRlcm4gY2hhciAqZXZhbF9wb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKKysjZW5kaWYKKyAjZGVmaW5lIGV2YWxfZGFlbW9uKHIpCSgociktPmRhZW1vbikJLyogZGFlbW9uIHByb2Nlc3MgbmFtZSAqLworICNkZWZpbmUgZXZhbF9waWQocikJKChyKS0+cGlkKQkvKiBwcm9jZXNzIGlkICovCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvaGF2ZV9zdHJlcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9oYXZlX3N0cmVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzU1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvaGF2ZV9zdHJlcnJvci5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF9tLmMgdGNwX3dyYXBwZXJzXzcuNi9wZXJjZW50X20uYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9wZXJjZW50X20uYwkxOTk0LTEyLTI4IDE3OjQyOjM3LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF9tLmMJMjAwMy0wOC0yMSAwMjo0NTozMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yOSwxMSArMjksMTUgQEAKKyAKKyAgICAgd2hpbGUgKCpicCA9ICpjcCkKKyAJaWYgKCpjcCA9PSAnJScgJiYgY3BbMV0gPT0gJ20nKSB7CisrI2lmZGVmIEhBVkVfU1RSRVJST1IKKysJICAgIHN0cmNweShicCwgc3RyZXJyb3IoZXJybm8pKTsKKysjZWxzZQorIAkgICAgaWYgKGVycm5vIDwgc3lzX25lcnIgJiYgZXJybm8gPiAwKSB7CisgCQlzdHJjcHkoYnAsIHN5c19lcnJsaXN0W2Vycm5vXSk7CisgCSAgICB9IGVsc2UgeworIAkJc3ByaW50ZihicCwgIlVua25vd24gZXJyb3IgJWQiLCBlcnJubyk7CisgCSAgICB9CisrI2VuZGlmCisgCSAgICBicCArPSBzdHJsZW4oYnApOworIAkgICAgY3AgKz0gMjsKKyAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhMjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy5vcmlnL01ha2VmaWxlCTIwMDktMDQtMDYgMTA6NTU6NDcuMDAwMDAwMDAwICswMDAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlCTIwMDktMDQtMDYgMTA6NTc6MDQuMDAwMDAwMDAwICswMDAwCitAQCAtNzQ4LDMxICs3NDgsMzEgQEAKKyAKKyAkKFNITElCKTogJChTSExJQl9PQkopCisgCXJtIC1mICQoU0hMSUIpCistCSQoQ0MpIC1vICQoU0hMSUIpICQoU0hMSU5LRkxBR1MpICQoU0hMSUJfT0JKKQorKwkkKENDKSAkKExERkxBR1MpIC1vICQoU0hMSUIpICQoU0hMSU5LRkxBR1MpICQoU0hMSUJfT0JKKQorIAlsbiAtc2YgJChub3RkaXIgJChTSExJQikpICQoU0hMSUJTT01BSikKKyAJbG4gLXNmICQobm90ZGlyICQoU0hMSUJTT01BSikpICQoU0hMSUJTTykKKyAKKyB0Y3BkOgl0Y3BkLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRjcGQubyAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIHRjcGQubyAkKFNITElCRkxBR1MpCisgCisgbWlzY2Q6CW1pc2NkLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIG1pc2NkLm8gJChMSUIpICQoTElCUykKKyAKKyBzYWZlX2Zpbmdlcjogc2FmZV9maW5nZXIubyAkKFNITElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgc2FmZV9maW5nZXIubyAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERNQVRDSF9PQkogPSB0Y3BkbWF0Y2gubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorIHRjcGRtYXRjaDogJChUQ1BETUFUQ0hfT0JKKSAkKFNITElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChUQ1BETUFUQ0hfT0JKKSAkKFNITElCRkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorIAorIHRyeS1mcm9tOiB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCRkxBR1MpCisgCisgVENQRENIS19PQkogPSB0Y3BkY2hrLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKyB0Y3BkY2hrOiAkKFRDUERDSEtfT0JKKSAkKFNITElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChUQ1BEQ0hLX09CSikgJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFRDUERDSEtfT0JKKSAkKFNITElCRkxBR1MpCisgCisgc2hhcjoJJChLSVQpCisgCUBzaGFyICQoS0lUKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3MzUyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBkYWY4OWQyNzJlNTFiMjE1MzAxNWNlN2Y1NGFiMGI4NjE4MmU2NGMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI4IEphbiAyMDE1IDE4OjUwOjIzIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgorbWFrZTogKioqIE5vIHJ1bGUgdG8gbWFrZSB0YXJnZXQgYGNmbGFncycsIG5lZWRlZCBieSBgdGNwZC5vJy4gIFN0b3AuCisKK0xldCAiY2ZsYWdzIiBkZXBlbmQgb24gY29uZmlnLWNoZWNrIHdoaWNoIGdlbmVyYXRlcyBjZmxnYXMgd2lsbCBmaXggdGhlCitwcm9ibGVtLgorCitBbHNvIGZpeGVkOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBzaGFyZWQvaG9zdHNfYWNjZXNzLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZmU1ZTczMi4uZjQ2ODc1MSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTcxNCw2ICs3MTQsNyBAQCBLSVQJPSBSRUFETUUgbWlzY2QuYyB0Y3BkLmMgZnJvbWhvc3QuYyBob3N0c19hY2Nlc3MuYyBzaGVsbF9jbWQuYyBcCisgTElCCT0gbGlid3JhcC5hCisgCisgc2hhcmVkLyUubzogJS5jCisrCVsgLWQgc2hhcmVkIF0gfHwgbWtkaXIgLXAgc2hhcmVkCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKFNIQ0ZMQUdTKSAtYyAkPCAtbyAkQAorIAorIFNPTUFKT1IgPSAwCitAQCAtNzMwLDYgKzczMSw4IEBAIFNITElCX09CSj0gJChhZGRwcmVmaXggc2hhcmVkLywgJChMSUJfT0JKKSk7CisgCisgYWxsIG90aGVyOiBjb25maWctY2hlY2sgdGNwZCB0Y3BkbWF0Y2ggdHJ5LWZyb20gc2FmZV9maW5nZXIgdGNwZGNoayAkKExJQikKKyAKKytjZmxhZ3M6IGNvbmZpZy1jaGVjaworKworICMgSW52YWxpZGF0ZSBhbGwgb2JqZWN0IGZpbGVzIHdoZW4gdGhlIGNvbXBpbGVyIG9wdGlvbnMgKENGTEFHUykgaGF2ZSBjaGFuZ2VkLgorIAorIGNvbmZpZy1jaGVjazoKK0BAIC03MzksNyArNzQyLDcgQEAgY29uZmlnLWNoZWNrOgorIAl0aGVuIHJtIGNmbGFncy5uZXcgOyBcCisgCWVsc2UgbXYgY2ZsYWdzLm5ldyBjZmxhZ3MgOyBcCisgCWZpID4vZGV2L251bGwgMj4vZGV2L251bGwKKy0JQGlmIFsgISAtZCBzaGFyZWQgXTsgdGhlbiBta2RpciBzaGFyZWQ7IGZpCisrCUBbIC1kIHNoYXJlZCBdIHx8IG1rZGlyIC1wIHNoYXJlZAorIAorICQoTElCKToJJChMSUJfT0JKKQorIAlybSAtZiAkKExJQikKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFuX2Zyb21ob3N0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWJkN2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMwkyMDA0LTA0LTI1IDAwOjEwOjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMJMjAwNC0wNC0yNSAwMDowOTozNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNCw2ICsxNCw5IEBACisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9zZXQocmVxdWVzdCwga2V5LCB2YWx1ZSwgLi4uLCAwKQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgCisrdm9pZCBmcm9taG9zdChyZXF1ZXN0KQorK3N0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisrCisgaW50IGhvc3RzX2FjY2VzcyhyZXF1ZXN0KQorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgCitAQCAtNjAsNiArNjMsNyBAQAorIGlzIGF2YWlsYWJsZSwgaG9zdCBuYW1lcyBhbmQgY2xpZW50IHVzZXIgbmFtZXMgYXJlIGxvb2tlZCB1cCBvbiBkZW1hbmQsCisgdXNpbmcgdGhlIHJlcXVlc3Qgc3RydWN0dXJlIGFzIGEgY2FjaGUuICBob3N0c19hY2Nlc3MoKSByZXR1cm5zIHplcm8gaWYKKyBhY2Nlc3Mgc2hvdWxkIGJlIGRlbmllZC4KKytmcm9taG9zdCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBob3N0c19hY2Nlc3MoKS4KKyAuUFAKKyBob3N0c19jdGwoKSBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSByZXF1ZXN0X2luaXQoKSBhbmQgaG9zdHNfYWNjZXNzKCkKKyByb3V0aW5lcyB3aXRoIGEgcGVyaGFwcyBtb3JlIGNvbnZlbmllbnQgaW50ZXJmYWNlICh0aG91Z2ggaXQgZG9lcyBub3QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjUwNjAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3JlbmFtZV9zdHJpbmdzX3ZhcmlhYmxlLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1NUUklOR1MgbmFtZSBjb25mbGljdHMgd2l0aCB2YXJpYWJsZSBmb3Igc3RyaW5ncyB0b29scyAoZS5nLiBpNTg2LW9lLWxpbnV4LXN0cmluZ3MpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlLm9yaWcJMjAxMy0wNC0xOCAyMzo0MTo1OC4yNzc5ODE3NDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMTMtMDQtMTggMjM6NDI6NDIuNTEzOTc4OTY2ICswMjAwCitAQCAtMzA5LDcgKzMwOSw3IEBACisgcHlyYW1pZDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisgCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSJlbnZpcm9uLm8gdmZwcmludGYubyIgXAorLQlTVFJJTkdTPSItRHN0cmNocj1pbmRleCAtRHN0cnJjaHI9cmluZGV4IC1EbWVtY21wPWJjbXAgLURub19tZW1jcHkiIFwKKysJU1RSSU5HU19GTEFHUz0iLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5IiBcCisgCU5FVEdST1VQPSItRE5FVEdST1VQIC1EVVNFX0dFVERPTUFJTiIgVExJPSBhbGwKKyAKKyAjIFVudGVzdGVkLgorQEAgLTQxOSw3ICs0MTksNyBAQAorICMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgaWYgeW91ciBDIGxpYnJhcnkgZG9lcyBub3QgcHJvdmlkZSB0aGUKKyAjIHN0cmNoci9zdHJyY2hyL21lbWNtcCByb3V0aW5lcywgYnV0IGNvbWVzIHdpdGggaW5kZXgvcmluZGV4L2JjbXAuCisgIworLSNTVFJJTkdTPSAtRHN0cmNocj1pbmRleCAtRHN0cnJjaHI9cmluZGV4IC1EbWVtY21wPWJjbXAgLURub19tZW1jcHkKKysjU1RSSU5HU19GTEFHUz0gLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5CisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIFN5c3RlbSBkZXBlbmRlbmNpZXM6IHNlbGVjdGlvbiBvZiBub24tZGVmYXVsdCBvYmplY3QgbGlicmFyaWVzLgorQEAgLTY5MCw3ICs2OTAsNyBAQAorIAkkKEJVR1MpICQoU1lTVFlQRSkgJChBVVRIKSAkKFVNQVNLKSBcCisgCS1EUkVBTF9EQUVNT05fRElSPVwiJChSRUFMX0RBRU1PTl9ESVIpXCIgJChTVFlMRSkgJChLSUxMX09QVCkgXAorIAktRFNFVkVSSVRZPSQoU0VWRVJJVFkpIC1EUkZDOTMxX1RJTUVPVVQ9JChSRkM5MzFfVElNRU9VVCkgXAorLQkkKFVDSEFSKSAkKFRBQkxFUykgJChTVFJJTkdTKSAkKFRMSSkgJChFWFRSQV9DRkxBR1MpICQoRE9UKSBcCisrCSQoVUNIQVIpICQoVEFCTEVTKSAkKFNUUklOR1NfRkxBR1MpICQoVExJKSAkKEVYVFJBX0NGTEFHUykgJChET1QpIFwKKyAJJChWU1lTTE9HKSAkKEhPU1ROQU1FKQorIAorIExJQl9PQko9IGhvc3RzX2FjY2Vzcy5vIG9wdGlvbnMubyBzaGVsbF9jbWQubyByZmM5MzEubyBldmFsLm8gXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVzdG9yZV9zaWdhbGFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODc1YjgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MDowOC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDA6MDIuMDAwMDAwMDAwICswMjAwCitAQCAtOTIsNiArOTIsOCBAQAorICAgICBjaGFyICAgKmNwOworICAgICBjaGFyICAgKnJlc3VsdCA9IHVua25vd247CisgICAgIEZJTEUgICAqZnA7CisrICAgIHVuc2lnbmVkIHNhdmVkX3RpbWVvdXQ7CisrICAgIHN0cnVjdCBzaWdhY3Rpb24gbmFjdCwgb2FjdDsKKyAKKyAjaWZkZWYgSU5FVDYKKyAgICAgLyogYWRkcmVzcyBmYW1pbHkgbXVzdCBiZSB0aGUgc2FtZSAqLworQEAgLTEzNCw3ICsxMzYsMTIgQEAKKyAJICovCisgCisgCWlmIChzZXRqbXAodGltZWJ1ZikgPT0gMCkgeworLQkgICAgc2lnbmFsKFNJR0FMUk0sIHRpbWVvdXQpOworKwkgICAgLyogU2F2ZSBTSUdBTFJNIHRpbWVyIGFuZCBoYW5kbGVyLiBTdWRoZWVyIEFiZHVsLVNhbGFtLCBTVU4uICovCisrCSAgICBzYXZlZF90aW1lb3V0ID0gYWxhcm0oMCk7CisrCSAgICBuYWN0LnNhX2hhbmRsZXIgPSB0aW1lb3V0OworKwkgICAgbmFjdC5zYV9mbGFncyA9IDA7CisrCSAgICAodm9pZCkgc2lnZW1wdHlzZXQoJm5hY3Quc2FfbWFzayk7CisrCSAgICAodm9pZCkgc2lnYWN0aW9uKFNJR0FMUk0sICZuYWN0LCAmb2FjdCk7CisgCSAgICBhbGFybShyZmM5MzFfdGltZW91dCk7CisgCisgCSAgICAvKgorQEAgLTIyMyw2ICsyMzAsMTAgQEAKKyAJICAgIH0KKyAJICAgIGFsYXJtKDApOworIAl9CisrCS8qIFJlc3RvcmUgU0lHQUxSTSB0aW1lciBhbmQgaGFuZGxlci4gU3VkaGVlciBBYmR1bC1TYWxhbSwgU1VOLiAqLworKwkodm9pZCkgc2lnYWN0aW9uKFNJR0FMUk0sICZvYWN0LCBOVUxMKTsKKysJaWYgKHNhdmVkX3RpbWVvdXQgPiAwKQorKwkgICAgYWxhcm0oc2F2ZWRfdGltZW91dCk7CisgCWZjbG9zZShmcCk7CisgICAgIH0KKyAgICAgU1RSTl9DUFkoZGVzdCwgcmVzdWx0LCBTVFJJTkdfTEVOR1RIKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjNmNGYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3JmYzkzMS5kaWZmCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc2NhZmZvbGQuYyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc2NhZmZvbGQuYwkyMDA1LTAzLTA5IDE4OjIyOjA0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvc2NhZmZvbGQuYwkyMDA1LTAzLTA5IDE4OjIwOjQ3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIzNywxMCArMjM3LDE3IEBAIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgCisgLyogQVJHU1VTRUQgKi8KKyAKKy12b2lkICAgIHJmYzkzMShyZXF1ZXN0KQorLXN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7Cisrdm9pZCAgICByZmM5MzEocm10X3Npbiwgb3VyX3NpbiwgZGVzdCkKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3Qgc29ja2FkZHIgKnJtdF9zaW47Cisrc3RydWN0IHNvY2thZGRyICpvdXJfc2luOworKyNlbHNlCisrc3RydWN0IHNvY2thZGRyX2luICpybXRfc2luOworK3N0cnVjdCBzb2NrYWRkcl9pbiAqb3VyX3NpbjsKKysjZW5kaWYKKytjaGFyICAgKmRlc3Q7CisgeworLSAgICBzdHJjcHkocmVxdWVzdC0+dXNlciwgdW5rbm93bik7CisrICAgIHN0cmNweShkZXN0LCB1bmtub3duKTsKKyB9CisgCisgLyogY2hlY2tfcGF0aCAtIGV4YW1pbmUgYWNjZXNzaWJpbGl0eSAqLworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkyMDA1LTAzLTA5IDE4OjIyOjA0LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDUtMDMtMDkgMTg6MjE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtODMsNyArODMsMTEgQEAgZXh0ZXJuIGludCBob3N0c19hY2Nlc3Moc3RydWN0IHJlcXVlc3RfaQorIGV4dGVybiB2b2lkIHNoZWxsX2NtZChjaGFyICopOwkJLyogZXhlY3V0ZSBzaGVsbCBjb21tYW5kICovCisgZXh0ZXJuIGNoYXIgKnBlcmNlbnRfeChjaGFyICosIGludCwgY2hhciAqLCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOworIAkJCQkJLyogZG8gJTxjaGFyPiBleHBhbnNpb24gKi8KKysjaWZkZWYgSU5FVDYKKyBleHRlcm4gdm9pZCByZmM5MzEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLCBjaGFyICopOworKyNlbHNlCisrZXh0ZXJuIHZvaWQgcmZjOTMxKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgY2hhciAqKTsKKysjZW5kaWYKKyAJCQkJCS8qIGNsaWVudCBuYW1lIGZyb20gUkZDIDkzMSBkYWVtb24gKi8KKyBleHRlcm4gdm9pZCBjbGVhbl9leGl0KHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCisgZXh0ZXJuIHZvaWQgcmVmdXNlKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIuOCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTYxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIuOApAQCAtMCwwICsxLDM0IEBACisuVEggU0FGRV9GSU5HRVIgOCAiMjF0aCBKdW5lIDE5OTciIExpbnV4ICJMaW51eCBQcm9ncmFtbWVyJ3MgTWFudWFsIgorLlNIIE5BTUUKK3NhZmVfZmluZ2VyIFwtIGZpbmdlciBjbGllbnQgd3JhcHBlciB0aGF0IHByb3RlY3RzIGFnYWluc3QgbmFzdHkgc3R1ZmYKK2Zyb20gZmluZ2VyIHNlcnZlcnMKKy5TSCBTWU5PUFNJUworLkIgc2FmZV9maW5nZXIgW2Zpbmdlcl9vcHRpb25zXQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHNhZmVfZmluZ2VyCitjb21tYW5kIHByb3RlY3RzIGFnYWluc3QgbmFzdHkgc3R1ZmYgZnJvbSBmaW5nZXIgc2VydmVycy4gVXNlIHRoaXMKK3Byb2dyYW0gZm9yIGF1dG9tYXRpYyByZXZlcnNlIGZpbmdlciBwcm9iZXMgZnJvbSB0aGUKKy5CIHRjcF93cmFwcGVyCisuQiAodGNwZCkKKywgbm90IHRoZSByYXcgZmluZ2VyIGNvbW1hbmQuIFRoZQorLkIgc2FmZV9maW5nZXIKK2NvbW1hbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBmaW5nZXIgY2xpZW50IGlzIG5vdCBydW4gd2l0aCByb290Citwcml2aWxlZ2VzLiBJdCBhbHNvIHJ1bnMgdGhlIGZpbmdlciBjbGllbnQgd2l0aCBhIGRlZmluZWQgUEFUSAorZW52aXJvbm1lbnQuCisuQiBzYWZlX2Zpbmdlcgord2lsbCBhbHNvIHByb3RlY3QgeW91IGZyb20gcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBvdXRwdXQgb2Ygc29tZQorZmluZ2VyIHNlcnZlcnMuIFRoZSBwcm9ibGVtOiBzb21lIHByb2dyYW1zIG1heSByZWFjdCB0byBzdHVmZiBpbgordGhlIGZpcnN0IGNvbHVtbi4gT3RoZXIgcHJvZ3JhbXMgbWF5IGdldCB1cHNldCBieSB0aHJhc2ggYW55d2hlcmUKK29uIGEgbGluZS4gRmlsZSBzeXN0ZW1zIG1heSBmaWxsIHVwIGFzIHRoZSBmaW5nZXIgc2VydmVyIGtlZXBzCitzZW5kaW5nIGRhdGEuIFRleHQgZWRpdG9ycyBtYXkgYm9tYiBvdXQgb24gZXh0cmVtZWx5IGxvbmcgbGluZXMuCitUaGUgZmluZ2VyIHNlcnZlciBtYXkgdGFrZSBmb3JldmVyIGJlY2F1c2UgaXQgaXMgc29tZWhvdyB3ZWRnZWQuCisuQiBzYWZlX2ZpbmdlcgordGFrZXMgY2FyZSBvZiBhbGwgdGhpcyBiYWRuZXNzLgorLlNIIFNFRSBBTFNPCisuQlIgaG9zdHNfYWNjZXNzICg1KSwKKy5CUiBob3N0c19vcHRpb25zICg1KSwKKy5CUiB0Y3BkICg4KQorLlNIIEFVVEhPUgorV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYWZlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zYWZlX2Zpbmdlci5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKy0tLSB0Y3Atd3JhcHBlcnMtNy42LWlwdjYuMS5vcmlnL3NhZmVfZmluZ2VyLmMKKysrKyB0Y3Atd3JhcHBlcnMtNy42LWlwdjYuMS9zYWZlX2Zpbmdlci5jCitAQCAtMjYsMjEgKzI2LDI0IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHB3ZC5oPgorKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyAKKyBleHRlcm4gdm9pZCBleGl0KCk7CisgCisgLyogTG9jYWwgc3R1ZmYgKi8KKyAKKy1jaGFyICAgIHBhdGhbXSA9ICJQQVRIPS9iaW46L3Vzci9iaW46L3Vzci91Y2I6L3Vzci9ic2Q6L2V0YzovdXNyL2V0YzovdXNyL3NiaW4iOworK2NoYXIgICAgcGF0aFtdID0gIlBBVEg9L2JpbjovdXNyL2Jpbjovc2JpbjovdXNyL3NiaW4iOworIAorICNkZWZpbmUJVElNRV9MSU1JVAk2MAkJLyogRG8gbm90IGtlZXAgbGlzdGluZ2luZyBmb3JldmVyICovCisgI2RlZmluZQlJTlBVVF9MRU5HVEgJMTAwMDAwCQkvKiBEbyBub3Qga2VlcCBsaXN0aW5naW5nIGZvcmV2ZXIgKi8KKyAjZGVmaW5lCUxJTkVfTEVOR1RICTEyOAkJLyogRWRpdG9ycyBjYW4gY2hva2Ugb24gbG9uZyBsaW5lcyAqLworICNkZWZpbmUJRklOR0VSX1BST0dSQU0JImZpbmdlciIJLyogTW9zdCwgaWYgbm90IGFsbCwgVU5JWCBzeXN0ZW1zICovCisgI2RlZmluZQlVTlBSSVZfTkFNRQkibm9ib2R5IgkvKiBQcmVmZXJyZWQgcHJpdmlsZWdlIGxldmVsICovCistI2RlZmluZQlVTlBSSVZfVUdJRAkzMjc2NwkJLyogRGVmYXVsdCB1aWQgYW5kIGdpZCAqLworKyNkZWZpbmUJVU5QUklWX1VHSUQJNjU1MzQJCS8qIERlZmF1bHQgdWlkIGFuZCBnaWQgKi8KKyAKKyBpbnQgICAgIGZpbmdlcl9waWQ7CisraW50CWFsbG93X3NldmVyaXR5ID0gU0VWRVJJVFk7CisraW50CWRlbnlfc2V2ZXJpdHkgPSBMT0dfV0FSTklORzsKKyAKKyB2b2lkICAgIGNsZWFudXAoc2lnKQorIGludCAgICAgc2lnOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdlYTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ19maXgucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisqIE1vbiBGZWIgMTAgMjAwMyBIYXJhbGQgSG95ZXIgPGhhcmFsZEByZWRoYXQuZGU+IDcuNi0yOQorLSBhZGRlZCBzZWN1cml0eSBwYXRjaCB0Y3Bfd3JhcHBlcnMtNy42LXNpZy5wYXRjaAorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYy5zaWcJMjAwMy0wMi0xMCAxNjoxODozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDMtMDItMTAgMTY6NTA6MzguMDAwMDAwMDAwICswMTAwCitAQCAtNjYsNiArNjYsNyBAQAorIAorICNkZWZpbmUJWUVTCQkxCisgI2RlZmluZQlOTwkJMAorKyNkZWZpbmUgRVJSICAgICAgICAgICAgIC0xCisgCisgIC8qCisgICAqIFRoZXNlIHZhcmlhYmxlcyBhcmUgZ2xvYmFsbHkgdmlzaWJsZSBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlZGlyZWN0ZWQgaW4KK0BAIC0xMjksOSArMTI5LDkgQEAKKyAJcmV0dXJuICh2ZXJkaWN0ID09IEFDX1BFUk1JVCk7CisgICAgIGlmICh0YWJsZV9tYXRjaChob3N0c19hbGxvd190YWJsZSwgcmVxdWVzdCkpCisgCXJldHVybiAoWUVTKTsKKy0gICAgaWYgKHRhYmxlX21hdGNoKGhvc3RzX2RlbnlfdGFibGUsIHJlcXVlc3QpKQorLQlyZXR1cm4gKE5PKTsKKy0gICAgcmV0dXJuIChZRVMpOworKyAgICBpZiAodGFibGVfbWF0Y2goaG9zdHNfZGVueV90YWJsZSwgcmVxdWVzdCkgPT0gTk8pCisrCXJldHVybiAoWUVTKTsKKysgICAgcmV0dXJuIChOTyk7CisgfQorIAorIC8qIHRhYmxlX21hdGNoIC0gbWF0Y2ggdGFibGUgZW50cmllcyB3aXRoIChkYWVtb24sIGNsaWVudCkgcGFpciAqLworQEAgLTE3NSw2ICsxNzUsNyBAQAorIAkodm9pZCkgZmNsb3NlKGZwKTsKKyAgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKyAJdGNwZF93YXJuKCJjYW5ub3Qgb3BlbiAlczogJW0iLCB0YWJsZSk7CisrCW1hdGNoID0gRVJSOworICAgICB9CisgICAgIGlmIChtYXRjaCkgeworIAlpZiAoaG9zdHNfYWNjZXNzX3ZlcmJvc2UgPiAxKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ2xvbmdqbXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2lnbG9uZ2ptcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRkNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ2xvbmdqbXAucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDI6MjUuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQxOjA0LjAwMDAwMDAwMCArMDIwMAorQEAgLTMzLDcgKzMzLDcgQEAgc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKSByZmM5MzEuYyAxLgorIAorIGludCAgICAgcmZjOTMxX3RpbWVvdXQgPSBSRkM5MzFfVElNRU9VVDsvKiBHbG9iYWwgc28gaXQgY2FuIGJlIGNoYW5nZWQgKi8KKyAKKy1zdGF0aWMgam1wX2J1ZiB0aW1lYnVmOworK3N0YXRpYyBzaWdqbXBfYnVmIHRpbWVidWY7CisgCisgLyogZnNvY2tldCAtIG9wZW4gc3RkaW8gc3RyZWFtIG9uIHRvcCBvZiBzb2NrZXQgKi8KKyAKK0BAIC02Miw3ICs2Miw3IEBAIGludCAgICAgcHJvdG9jb2w7Cisgc3RhdGljIHZvaWQgdGltZW91dChzaWcpCisgaW50ICAgICBzaWc7CisgeworLSAgICBsb25nam1wKHRpbWVidWYsIHNpZyk7CisrICAgIHNpZ2xvbmdqbXAodGltZWJ1Ziwgc2lnKTsKKyB9CisgCisgLyogcmZjOTMxIC0gcmV0dXJuIHJlbW90ZSB1c2VyIG5hbWUsIGdpdmVuIHNvY2tldCBzdHJ1Y3R1cmVzICovCitAQCAtMTM1LDcgKzEzNSw3IEBAIGNoYXIgICAqZGVzdDsKKyAJICogU2V0IHVwIGEgdGltZXIgc28gd2Ugd29uJ3QgZ2V0IHN0dWNrIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBzZXJ2ZXIuCisgCSAqLworIAorLQlpZiAoc2V0am1wKHRpbWVidWYpID09IDApIHsKKysJaWYgKHNpZ3NldGptcCh0aW1lYnVmLCAwKSA9PSAwKSB7CisgCSAgICAvKiBTYXZlIFNJR0FMUk0gdGltZXIgYW5kIGhhbmRsZXIuIFN1ZGhlZXIgQWJkdWwtU2FsYW0sIFNVTi4gKi8KKyAJICAgIHNhdmVkX3RpbWVvdXQgPSBhbGFybSgwKTsKKyAJICAgIG5hY3Quc2FfaGFuZGxlciA9IHRpbWVvdXQ7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc29ja2xlbl90LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ2ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitjb21taXQgODhiNjk4NGVmMGJmM2I3MDNjMWM4NTEwOTI2NjJiOTVlOTFkYjFmZgorQXV0aG9yOiBmYXJyYWggcmFzaGlkIDxmYXJyYWgucmFzaGlkQHdpbmRyaXZlci5jb20+CitEYXRlOiAgIFR1ZSBGZWIgMTIgMDk6NTM6NTAgMjAxMyAtMDUwMAorCisgICAgdGNwLXdyYXBwZXJzIFN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpdGggZ2xpYmMKKyAgICAKKyAgICBBZGRlZCBzdXBwb3J0IGZvciBzb2NrbGVuX3QgdHlwZSB0byBsZW4gYXJndW1lbnQgcGFzc2VkIHRvIHNvY2tldCByZWxhdGVkCisgICAgY2FsbHMuIFRoaXMgZml4ZXMgYSBidWcgdGhhdCBjYXVzZXMgdGNwIHdyYXBwZXJzIHRvIGZhaWwgd2hlbiB1c2luZyBzc2hkLgorICAgIAorICAgIFVwc3RyZWFtLVN0YXR1czogUGVuZGluZworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IGZhcnJhaCByYXNoaWQgPGZhcnJhaC5yYXNoaWRAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2ZpeF9vcHRpb25zLmMgYi9maXhfb3B0aW9ucy5jCitpbmRleCA3NDczYWRmLi5mZTJiNDQyIDEwMDY0NAorLS0tIGEvZml4X29wdGlvbnMuYworKysrIGIvZml4X29wdGlvbnMuYworQEAgLTM4LDcgKzM4LDEyIEBAIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgI2lmZGVmIElQX09QVElPTlMKKyAgICAgdW5zaWduZWQgY2hhciBvcHRidWZbQlVGRkVSX1NJWkUgLyAzXSwgKmNwOworICAgICBjaGFyICAgIGxidWZbQlVGRkVSX1NJWkVdLCAqbHA7CistICAgIGludCAgICAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpLCBpcHByb3RvOworKyNpZmRlZiBfX0dMSUJDX18KKysgICAgc29ja2xlbl90ICBvcHRzaXplID0gc2l6ZW9mKG9wdGJ1Zik7CisrI2Vsc2UKKysgICAgaW50ICAgICBvcHRzaXplID0gc2l6ZW9mKG9wdGJ1Zik7CisrI2VuZGlmCisrICAgIGludCBpcHByb3RvOworICAgICBzdHJ1Y3QgcHJvdG9lbnQgKmlwOworICAgICBpbnQgICAgIGZkID0gcmVxdWVzdC0+ZmQ7CisgICAgIHVuc2lnbmVkIGludCBvcHQ7CitkaWZmIC0tZ2l0IGEvc29ja2V0LmMgYi9zb2NrZXQuYworaW5kZXggNGIyYzU3NS4uYTBkMjk4NyAxMDA2NDQKKy0tLSBhL3NvY2tldC5jCisrKysgYi9zb2NrZXQuYworQEAgLTk1LDcgKzk1LDExIEBAIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKyAjZW5kaWYKKysjaWZkZWYgX19HTElCQ19fCisrICAgIHNvY2tsZW5fdCAgbGVuOworKyNlbHNlCisgICAgIGludCAgICAgbGVuOworKyNlbmRpZgorICAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBpbnQgICAgIGZkID0gcmVxdWVzdC0+ZmQ7CisgCitAQCAtNDI2LDcgKzQzMCwxMSBAQCBpbnQgICAgIGZkOworICNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisgI2VuZGlmCisrI2lmZGVmIF9fR0xJQkNfXworKyAgICBzb2NrbGVuX3QgIHNpemUgPSBzaXplb2Yoc2luKTsKKysjZWxzZQorICAgICBpbnQgICAgIHNpemUgPSBzaXplb2Yoc2luKTsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRWF0IHVwIHRoZSBub3QteWV0IHJlY2VpdmVkIGRhdGFncmFtLiBTb21lIHN5c3RlbXMgaW5zaXN0IG9uIGEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjliZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDI6NTA6MzcuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMjo1MDozMy4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Myw2ICs1MywyNCBAQAorICNpbmNsdWRlICJpbmV0Y2YuaCIKKyAjaW5jbHVkZSAic2NhZmZvbGQuaCIKKyAKKysvKiBsaXN0IG9mIHByb2dyYW1zIHdoaWNoIGFyZSBrbm93biB0byBiZSBsaW5rZWQgd2l0aCBsaWJ3cmFwIGluIGRlYmlhbiAqLworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBsaWJ3cmFwX3Byb2dyYW1zW10gPSB7CisrICAgICJwb3J0bWFwIiwgIm1vdW50ZCIsICJzdGF0ZCIsICJ1Z2lkZCIsCisrICAgICJyZWRpciIsICJybGluZXRkIiwKKysgICAgInNzaGQiLAorKyAgICAiYXRmdHBkIiwKKysgICAgImRpYWxkIiwKKysgICAgImVzb3VuZCIsCisrICAgICJnZG0iLCAiZ25vbWUtc2Vzc2lvbiIsCisrICAgICJpY2VjYXN0IiwgImljZWNhc3RfYWRtaW4iLCAiaWNlY2FzdF9jbGllbnQiLCAiaWNlY2FzdF9zb3VyY2UiLAorKyAgICAibXlzcWxkIiwKKysgICAgIm50b3AiLAorKyAgICAicHB0cGQiLAorKyAgICAicnF1b3RhZCIsCisrICAgICJzZW5kbWFpbCIsICJzbWFpbCIsCisrICAgIE5VTEwKKyt9OworKworICAvKgorICAgKiBTdG9sZW4gZnJvbSBob3N0c19hY2Nlc3MuYy4uLgorICAgKi8KK0BAIC0xNDcsOCArMTY1LDggQEAKKyAgICAgLyoKKyAgICAgICogVGhlc2UgYXJlIG5vdCBydW4gZnJvbSBpbmV0ZCBidXQgbWF5IGhhdmUgYnVpbHQtaW4gYWNjZXNzIGNvbnRyb2wuCisgICAgICAqLworLSAgICBpbmV0X3NldCgicG9ydG1hcCIsIFdSX05PVCk7CistICAgIGluZXRfc2V0KCJycGNiaW5kIiwgV1JfTk9UKTsKKysgICAgZm9yIChjID0gMDsgbGlid3JhcF9wcm9ncmFtc1tjXTsgYysrKQorKwlpbmV0X3NldChsaWJ3cmFwX3Byb2dyYW1zW2NdLCBXUl9ZRVMpOworIAorICAgICAvKgorICAgICAgKiBDaGVjayBhY2Nlc3NpYmlsaXR5IG9mIGFjY2VzcyBjb250cm9sIGZpbGVzLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RyeS1mcm9tLjggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdHJ5LWZyb20uOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzhmMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RyeS1mcm9tLjgKQEAgLTAsMCArMSwyOCBAQAorLlRIIFRSWS1GUk9NIDggIjIxdGggSnVuZSAxOTk3IiBMaW51eCAiTGludXggUHJvZ3JhbW1lcidzIE1hbnVhbCIKKy5TSCBOQU1FCit0cnktZnJvbSBcLSB0ZXN0IHByb2dyYW0gZm9yIHRoZSB0Y3Bfd3JhcHBlcgorLlNIIFNZTk9QU0lTCisuQiB0cnktZnJvbQorLlNIIERFU0NSSVBUSU9OCitUaGUKKy5CIHRyeS1mcm9tCitjb21tYW5kIGNhbiBiZSBjYWxsZWQgdmlhIGEgcmVtb3RlIHNoZWxsIGNvbW1hbmQgdG8gZmluZCBvdXQKK2lmIHRoZSBob3N0bmFtZSBhbmQgYWRkcmVzcyBhcmUgcHJvcGVybHkgcmVjb2duaXplZAorYnkgdGhlCisuQiB0Y3Bfd3JhcHBlcgorbGlicmFyeSwgaWYgdXNlcm5hbWUgbG9va3VwIHdvcmtzLCBhbmQgKFN5c1Ygb25seSkgaWYgdGhlIFRMSQorb24gdG9wIG9mIElQIGhldXJpc3RpY3Mgd29yay4gRGlhZ25vc3RpY3MgYXJlIHJlcG9ydGVkIHRocm91Z2gKKy5CUiBzeXNsb2cgKDMpCithbmQgcmVkaXJlY3RlZCB0byBzdGRlcnIuCisKK0V4YW1wbGU6CisKK3JzaCBob3N0IC9zb21lL3doZXJlL3RyeS1mcm9tCisKKy5TSCBTRUUgQUxTTworLkJSIGhvc3RzX2FjY2VzcyAoNSksCisuQlIgaG9zdHNfb3B0aW9ucyAoNSksCisuQlIgdGNwZCAoOCkKKy5TSCBBVVRIT1IKK1dpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzA0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVyc183LjYuYmIKQEAgLTAsMCArMSwxMjggQEAKK1NVTU1BUlkgPSAiU2VjdXJpdHkgdG9vbCB0aGF0IGlzIGEgd3JhcHBlciBmb3IgVENQIGRhZW1vbnMiCitERVNDUklQVElPTiA9ICJUb29scyBmb3IgbW9uaXRvcmluZyBhbmQgZmlsdGVyaW5nIGluY29taW5nIHJlcXVlc3RzIGZvciB0Y3AgXAorICAgICAgICAgICAgICAgc2VydmljZXMuIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vRElTQ0xBSU1FUjttZDU9MDcxYmQ2OWNiNzhiMTg4ODhlYTVlM2RhNWMzMTI3ZmEiCitQUiA9InIxMCIKKworCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgbGlid3JhcCBsaWJ3cmFwLWRvYyBsaWJ3cmFwLWRldiBsaWJ3cmFwLXN0YXRpY2RldiAke1BOfSAke1BOfS1kb2MiCitGSUxFU19saWJ3cmFwID0gIiR7YmFzZV9saWJkaXJ9L2xpYioke1NPTElCU30iCitGSUxFU19saWJ3cmFwLWRvYyA9ICIke21hbmRpcn0vbWFuMyAke21hbmRpcn0vbWFuNSIKK0ZJTEVTX2xpYndyYXAtZGV2ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJ3cmFwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliKi5hIgorRklMRVNfJHtQTn0gPSAiJHtzYmluZGlyfSIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0vbWFuOCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAucG9yY3VwaW5lLm9yZy9wdWIvc2VjdXJpdHkvdGNwX3dyYXBwZXJzXyR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMF9tYW5fcXVvdGluZy5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovLzAxX21hbl9wb3J0YWJpbGl0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wNV93aWxkY2FyZF9tYXRjaGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMF91c2FnaS1pcHY2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzExX3VzYWdpX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMl9tYWtlZmlsZV9jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTNfc2hsaWJfd2Vha3N5bS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xNF9jaWRyX3N1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaGF2ZV9zdHJlcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW5fZnJvbWhvc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVzdG9yZV9zaWdhbGFybS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZmM5MzEuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9zYWZlX2Zpbmdlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NpZ2xvbmdqbXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc29ja2xlbl90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RjcGRjaGtfbGlid3JhcHBlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGZsYWdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbmFtZV9zdHJpbmdzX3ZhcmlhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RyeS1mcm9tLjggXAorICAgICAgICAgICBmaWxlOi8vc2FmZV9maW5nZXIuOCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNmZhMjVmNzEyMjZkMDkwZjM0ZGUzZjZiMTIyZmI1YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NTQzZDdhZGVkZjc4YTZkZTBiMjIxY2NiYmQxOTUyZTA4YjUxMzg3MTdmNGFkZTgxNDAzOWJiNDg5YTQzMTVkIgorCitTID0gIiR7V09SS0RJUn0vdGNwX3dyYXBwZXJzXyR7UFZ9IgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyBcCisgICAgICAgICAgICAgICAgJ0FSPSR7QVJ9JyBcCisgICAgICAgICAgICAgICAgJ1JBTkxJQj0ke1JBTkxJQn0nIFwKKyAgICAgICAgICAgICAgICAnUkVBTF9EQUVNT05fRElSPSR7c2JpbmRpcn0nIFwKKyAgICAgICAgICAgICAgICAnU1RZTEU9LURQUk9DRVNTX09QVElPTlMnIFwKKyAgICAgICAgICAgICAgICAnRkFDSUxJVFk9TE9HX0RBRU1PTicgXAorICAgICAgICAgICAgICAgICdTRVZFUklUWT1MT0dfSU5GTycgXAorICAgICAgICAgICAgICAgICdCVUdTPScgXAorICAgICAgICAgICAgICAgICdWU1lTTE9HPScgXAorICAgICAgICAgICAgICAgICdSRkM5MzFfVElNRU9VVD0xMCcgXAorICAgICAgICAgICAgICAgICdBQ0NFU1M9LURIT1NUU19BQ0NFU1MnIFwKKyAgICAgICAgICAgICAgICAnS0lMTF9PUFQ9LURLSUxMX0lQX09QVElPTlMnIFwKKyAgICAgICAgICAgICAgICAnVU1BU0s9LUREQUVNT05fVU1BU0s9MDIyJyBcCisgICAgICAgICAgICAgICAgJ05FVEdST1VQPSR7RVhUUkFfT0VNQUtFX05FVEdST1VQfScgXAorICAgICAgICAgICAgICAgICdMSUJTPS1sbnNsJyBcCisgICAgICAgICAgICAgICAgJ0FSRkxBR1M9cnYnIFwKKyAgICAgICAgICAgICAgICAnQVVYX09CSj13ZWFrX3N5bWJvbHMubycgXAorICAgICAgICAgICAgICAgICdUTEk9JyBcCisgICAgICAgICAgICAgICAgJ0NPUFRTPScgXAorICAgICAgICAgICAgICAgICdFWFRSQV9DRkxBR1M9JHtDRkxBR1N9IC1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURIQVZFX1dFQUtTWU1TIC1EX1JFRU5UUkFOVCAtRElORVQ2PTEgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4nIgorCitFWFRSQV9PRU1BS0VfTkVUR1JPVVAgPSAiLURORVRHUk9VUCAtRFVTRV9HRVRET01BSU4iCitFWFRSQV9PRU1BS0VfTkVUR1JPVVBfbGliYy11Y2xpYmMgPSAiLURVU0VfR0VURE9NQUlOIgorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlICdUQUJMRVM9LURIT1NUU19ERU5ZPVwiJHtzeXNjb25mZGlyfS9ob3N0cy5kZW55XCIgLURIT1NUU19BTExPVz1cIiR7c3lzY29uZmRpcn0vaG9zdHMuYWxsb3dcIicgXAorCQkgICBhbGwKK30KKworQklOUyA9ICJzYWZlX2ZpbmdlciB0Y3BkIHRjcGRjaGsgdHJ5LWZyb20gdGNwZG1hdGNoIgorTUFOUzMgPSAiaG9zdHNfYWNjZXNzIgorTUFOUzUgPSAiaG9zdHNfb3B0aW9ucyIKK01BTlM4ID0gInRjcGQgdGNwZGNoayB0Y3BkbWF0Y2giCitkb19pbnN0YWxsICgpIHsKKwlvZV9saWJpbnN0YWxsIC1hIGxpYndyYXAgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLUMgc2hhcmVkIC1zbyBsaWJ3cmFwICR7RH0ke2Jhc2VfbGliZGlyfQorCisJaWYgWyAiJHtsaWJkaXJ9IiAhPSAiJHtiYXNlX2xpYmRpcn0iIF0gOyB0aGVuCisJCXJlbF9saWJfcHJlZml4PWBlY2hvICR7bGliZGlyfSB8IHNlZCAncyxcKF4vXHxcKVteL11bXi9dKiwuLixnJ2AKKwkJbGlibmFtZT1gcmVhZGxpbmsgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYndyYXAuc28gfCB4YXJncyBiYXNlbmFtZWAKKwkJbG4gLXMgJHtyZWxfbGliX3ByZWZpeH0ke2Jhc2VfbGliZGlyfS8ke2xpYm5hbWV9ICR7RH0ke2xpYmRpcn0vbGlid3JhcC5zbworCQlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vbGlid3JhcC5zbworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJZm9yIGIgaW4gJHtCSU5TfTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRiICR7RH0ke3NiaW5kaXJ9LyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuMworCWZvciBtIGluICR7TUFOUzN9OyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJG0uMyAke0R9JHttYW5kaXJ9L21hbjMvIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW41CisJZm9yIG0gaW4gJHtNQU5TNX07IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkbS41ICR7RH0ke21hbmRpcn0vbWFuNS8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKwlmb3IgbSBpbiAke01BTlM4fTsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRtLjggJHtEfSR7bWFuZGlyfS9tYW44LyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90cnktZnJvbS44ICR7RH0ke21hbmRpcn0vbWFuOC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zYWZlX2Zpbmdlci44ICR7RH0ke21hbmRpcn0vbWFuOC8KKworCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgdGNwZC5oICR7RH0ke2luY2x1ZGVkaXJ9LworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RzLmFsbG93CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vaG9zdHMuZGVueQorfQorCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9ob3N0cy5hbGxvdyAke3N5c2NvbmZkaXJ9L2hvc3RzLmRlbnkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjMjg5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpMmh0bWwvdGV4aTJodG1sXzUuMC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlBlcmwgc2NyaXB0IHRoYXQgY29udmVydHMgVGV4aW5mbyB0byBIVE1MIgorSE9NRVBBR0UgICAgPSAiaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iCitTRUNUSU9OICAgICA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSAgICAgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgICAgID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vdGV4aTJodG1sLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImYxNWFjODc2ZmNkYzhiZTg2NWIxNjUzNWY0ODBhYTU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4YTk4YjBlZTIwYzQ5NWE2YWI4OTQzOThhMDY1ZWY1ODAyNzJkYmQ1YTE1YjFiMTllOGJkMWJjODlkOWY5ZmEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIGF1dG90b29sc19kb19jb25maWd1cmUgdXBkYXRlcyBwby9NYWtlZmlsZS5pbi5pbiwgd2UgYWxzbyBuZWVkCisJIyB1cGRhdGUgcG9fZG9jdW1lbnQuCisJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG9fZG9jdW1lbnQvCisJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG9fbWVzc2FnZXMvCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L3RleGkyaHRtbAorfQorCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZGF0YWRpcn0vdGV4aW5mbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQyMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXktbmF0aXZlLmJiCkBAIC0wLDAgKzEsMzAgQEAKK0RFU0NSSVBUSU9OID0gIkZha2UgdmVyc2lvbiBvZiB0aGUgdGV4aW5mbyB1dGlsaXR5IHN1aXRlIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNmJiNjJlNzNjYThiOTAxZDNmMmU5ZDcxNTQyZjRiYiIKK0RFUEVORFMgPSAiIgorUFYgPSAiMS4wIgorCitTUkNfVVJJID0gImZpbGU6Ly90ZW1wbGF0ZS5weSBmaWxlOi8vQ09QWUlORyIKKworUyA9ICIke1dPUktESVJ9IgorCitOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWCA9ICIvJHtQTn0iCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGxfbmFtZSgpIHsKKyAgICBGSUxFTkFNRT0iJHtEfSR7YmluZGlyfS8kMSIKKyAgICAjIFVzaW5nIGxuIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHJtX3dvcmsKKyAgICBjcCAtVCAiJHtTfS90ZW1wbGF0ZS5weSIgIiRGSUxFTkFNRSIKKyAgICBjaG1vZCAreCAkRklMRU5BTUUKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBta2RpciAtcCAiJHtEfSR7YmluZGlyfSIKKyAgICBmb3IgaSBpbiBtYWtlaW5mbyBwb2QydGV4aSB0ZXhpMmR2aSBwZGZ0ZXhpMmR2aSB0ZXhpbmRleCB0ZXhpMnBkZiBcCisgICAgICAgICAgICAgdHhpeG1sMnRleGkgdGV4aTJhbnkgaW5zdGFsbC1pbmZvIGdpbnN0YWxsLWluZm8gXAorICAgICAgICAgICAgIHVwZGF0ZS1pbmZvLWRpcjsgZG8KKyAgICAgICAgZG9faW5zdGFsbF9uYW1lICRpCisgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvQ09QWUlORyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxY2JlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnAuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvdGVtcGxhdGUucHkgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS90ZW1wbGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjcwMzNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvdGVtcGxhdGUucHkKQEAgLTAsMCArMSwxMjIgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24yLjcKKworIyB0ZW1wbGF0ZS5weSAoYW5kIG90aGVyIGZpbGVuYW1lcykKKyMgQnkgTWF4IEVsaWFzZXIgKG1heC5lbGlhc2VyQGludGVsLmNvbSkKKworIyBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycC4KKworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCisKKyMgVGhpcyBwcm9ncmFtIGFjdHMgbGlrZSBhIGR1bW15IHZlcnNpb24gb2YgdGhlIHRleGluZm8gdXRpbGl0aWVzLCBjcmVhdGluZworIyB0aGUgcmlnaHQgb3V0cHV0IGZpbGVzIGJ1dCBsZWF2aW5nIHRoZW0gYmxhbmsuIEl0IHdpbGwgcGFyc2Ugb3V0IHRoZSBuYW1lCisjIG9mIHRoZSBleGVjdXRhYmxlIGZyb20gYXJndlswXSBhbmQgZW11bGF0ZSB0aGUgY29ycmVzcG9uZGluZyBwcm9ncmFtLCBzbworIyBtdWx0aXBsZSBjb3BpZXMgb2YgdGhpcyBzY3JpcHQgd2lsbCBleGlzdCB1bmRlciBkaWZmZXJlbnQgbmFtZXMuCisKK2ltcG9ydCBzeXMsIG9zCisKK29sb25nID0gIi0tb3V0cHV0PSIKK0Vsb25nID0gIi0tbWFjcm8tZXhwYW5kPSIKKworCit0aGlzX2JpbmFyeSA9IHN5cy5hcmd2WzBdLnNwbGl0ICgiLyIpWy0xXQorCisjIFRvIGJlIG91dHB1dHRlZCBpZiBmdW5jdGlvbmFsaXR5IHRoYXQgaGFzbid0IGJlZW4gc3R1YmJlZCB5ZXQgaXMgaW52b2tlZC4KK3N0dWJfbXNnID0gIiIiCitUaGlzIHN0YW5kLWluIHZlcnNpb24gb2YgJXMgaXMgbm90IHlldCBmdWxseSBjYXBhYmxlIG9mIGVtdWxhdGluZyB0aGUgcmVhbAordmVyc2lvbiBmcm9tIHRoZSBHTlUgdGV4aW5mbyBzdWl0ZS4gSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIGZpbGUgYSBidWcgcmVwb3J0Cit3aXRoIGRldGFpbHMgb24gdGhlIHJlY2lwZSB0aGF0IGZhaWxlZC4KKyIiIiAlIHRoaXNfYmluYXJ5CisKKyMgQXV0b3Rvb2xzIHNldHVwcyBxdWVyeSB0aGUgdmVyc2lvbiwgc28gdGhpcyBpcyBhY3R1YWxseSBuZWNlc3NhcnkuIFNvbWUgb2YKKyMgdGhlbSAobG9va2luJyBhdCB5b3UsIGdsaWJjKSBhY3R1YWxseSBsb29rIGZvciB0aGUgc3Vic3RyaW5nICJHTlUgdGV4aW5mbywiCisjIHNvIHdlIHB1dCB0aGF0IHN1YnN0cmluZyBpbiB0aGVyZSB3aXRob3V0IGFjdHVhbGx5IHRlbGxpbmcgYSBsaWUuCit2ZXJzaW9uX3N0ciA9ICIiIiAlcyAoZmFrZSB0ZXhpbmZvLCBlbXVsYXRpbmcgR05VIHRleGluZm8pIDUuMgorIAorU3VwZXIgYW1hemluZyB2ZXJzaW9uIHdoaWNoIGlzIHRvdGFsbHkgbm90IGZha2UgaW4gYW55IHdheSB3aGF0c29ldmVyLgorQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUCitsaWNlbnNlLgorIiIiICUgdGhpc19iaW5hcnkKKworc2ltcGxlX2JpbmFyaWVzID0gInBvZDJ0ZXhpIHRleGkyZHZpIHBkZnRleGkyZHZpIHRleGluZGV4IHRleGkycGRmIFwKKyAgICAgICAgICAgICAgICAgICB0eGl4bWwydGV4aSBpbnN0YWxsLWluZm8gZ2luc3RhbGwtaW5mbyBcCisgICAgICAgICAgICAgICAgICAgdXBkYXRlLWluZm8tZGlyIi5zcGxpdCAoKQorCisjIFRoZXNlIHV0aWxpdGllcyB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2V0IG9mIG9wdGlvbnMgYW5kIGZsYWdzLgorY29tcGxleF9iaW5hcmllcyA9ICJtYWtlaW5mbyB0ZXhpMmFueSIuc3BsaXQgKCkKKwordmFsaWRfYmluYXJpZXMgPSBzaW1wbGVfYmluYXJpZXMgKyBjb21wbGV4X2JpbmFyaWVzCisKKyMgRm9yIGdlbmVyYXRpbmcgYmxhbmsgb3V0cHV0IGZpbGVzLgorZGVmIHRvdWNoX2ZpbGUgKHBhdGgpOgorICAgIGYgPSBvcGVuIChwYXRoLCAidyIpCisgICAgZi5jbG9zZSAoKQorCithc3NlcnQgdGhpc19iaW5hcnkgaW4gdmFsaWRfYmluYXJpZXMsIFwKKyAgICAgICB0aGlzX2JpbmFyeSArICIgaXMgbm90IG9uZSBvZiAiICsgJywgJy5qb2luICh2YWxpZF9iaW5hcmllcykKKworaWYgIi0tdmVyc2lvbiIgaW4gc3lzLmFyZ3Y6CisgICAgcHJpbnQgdmVyc2lvbl9zdHIKKyAgICBzeXMuZXhpdCAoMCkKKworIyBGb3IgZGVidWdnaW5nCitsb2dfaW50ZXJjZXB0aW9ucyA9IEZhbHNlCitpZiBsb2dfaW50ZXJjZXB0aW9uczoKKyAgICBmID0gb3BlbiAoIi90bXAvaW50ZXJjZXB0ZWRfIiArIHRoaXNfYmluYXJ5LCAiYSIpCisgICAgZi53cml0ZSAoJyAnLmpvaW4gKFt0aGlzX2JpbmFyeV0gKyBzeXMuYXJndlsxOl0pICsgJ1xuJykKKyAgICBmLmNsb3NlICgpCisKKyMgTG9vayB0aHJvdWdoIHRoZSBvcHRpb25zIGFuZCBmbGFncywgYW5kIGlmIG5lY2Vzc2FyeSwgdG91Y2ggYW55IG91dHB1dAorIyBmaWxlcy4KK2FyZ19pZHggPSAxCit3aGlsZSBhcmdfaWR4IDwgbGVuIChzeXMuYXJndik6CisgICAgYXJnID0gc3lzLmFyZ3YgW2FyZ19pZHhdCisgICAgCisgICAgaWYgYXJnID09ICItLSI6CisgICAgICAgIGJyZWFrCisgICAgCisgICAgIyBTb21ldGhpbmcgbGlrZSAtSSAuIGNhbiByZXN1bHQgaW4gYSBuZWVkIGZvciB0aGlzIChzcGVjaWZpY2FsbHkgdGhlIC4pCisgICAgZWxpZiBsZW4gKGFyZykgPCAyOgorICAgICAgICBwYXNzCisgICAgCisgICAgIyBDaGVjayBpZiAtbyBvciAtLW91dHB1dCBpcyBzcGVjaWZpZWQuIFRoZXNlIGNhbiBiZSB1c2VkIGF0IG1vc3Qgb25jZS4KKyAgICBlbGlmIGFyZ1swXSA9PSAnLScgYW5kIGFyZ1sxXSAhPSAnLScgYW5kIGFyZ1tsZW4gKGFyZykgLSAxXSA9PSAnbyc6CisgICAgICAgIHRvdWNoX2ZpbGUgKHN5cy5hcmd2W2FyZ19pZHggKyAxXSkKKyAgICAgICAgc3lzLmV4aXQgKDApCisgICAgZWxpZiBhcmcuc3RhcnRzd2l0aCAob2xvbmcpOgorICAgICAgICB0b3VjaF9maWxlIChhcmcuc3BsaXQgKCI9IilbMV0pCisgICAgICAgIHN5cy5leGl0ICgwKQorICAgIAorICAgICMgQ2hlY2sgZm9yIGZ1bmN0aW9uYWxpdHkgdGhhdCBpc24ndCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgZWxzZToKKyAgICAgICAgYXNzZXJ0IGFyZ1swXSAhPSAnLScgb3IgYXJnWzFdID09ICctJyBvciAnRScgbm90IGluIGFyZyBvciBcCisgICAgICAgICAgICAgICB0aGlzX2JpbmFyeSBpbiBzaW1wbGVfYmluYXJpZXMsIFwKKyAgICAgICAgICAgICAgICItRSBvcHRpb24gbm90IHlldCBzdXBwb3J0ZWQiICsgc3R1Yl9tc2cKKyAgICAgICAgCisgICAgICAgIGFzc2VydCBub3QgYXJnLnN0YXJ0c3dpdGggKEVsb25nKSwgXAorICAgICAgICAgICAgICAgRWxvbmdbOi0xXSArICIgb3B0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkIiArIHN0dWJfbXNnCisgICAgCisgICAgYXJnX2lkeCArPSAxCisKKyMgVGhlIC1vLy0tb3V0cHV0IG9wdGlvbiBvdmVycmlkZXMgdGhlIGRlZmF1bHQuIEZvciBtYWtlaW5mbyBhbmQgdGV4aTJhbnksCisjIHRoYXQgZGVmYXVsdCBpcyB0byBsb29rIGZvciBhIEBzZXRmaWxlbmFtZSBjb21tYW5kIGluIHRoZSBpbnB1dCBmaWxlLgorIyBPdGhlcndpc2UsIHByaW50aW5nIG5vdGhpbmcgdG8gc3Rkb3V0IGFuZCB0aGVuIGV4aXRpbmcgc2hvdWxkIHN1ZmZpY2UuCithc3NlcnQgdGhpc19iaW5hcnkgaW4gc2ltcGxlX2JpbmFyaWVzLCBcCisgICAgICAgIkRvbid0IGtub3cgaG93IHRvIGdldCBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUgZnJvbSBpbnB1dCBmaWxlISIgKyBcCisgICAgICAgc3R1Yl9tc2cKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvY2hlY2stbG9jYWxlLWgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9jaGVjay1sb2NhbGUtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ2NjYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvY2hlY2stbG9jYWxlLWgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZml4IHRoZSBtYWNybyBjaGVjaworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworY29uZmlndXJlIGRvZXMgbm90IGNoZWNrIGlmIGxvY2FsZS5oIGV4aXN0cywgYnV0IGNoZWNrIHNldGxvY2FsZSwKK2lmIHNldGxvY2FsZSBleGlzdCwgdGhlIGxvY2FsZS5oIHNob3VsZCBleGlzdC4KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL3N5c3RlbS5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL3N5c3RlbS5oIGIvbGliL3N5c3RlbS5oCitpbmRleCA5NDZlYjNjLi5jNzAwMzdiIDEwMDY0NAorLS0tIGEvbGliL3N5c3RlbS5oCisrKysgYi9saWIvc3lzdGVtLmgKK0BAIC00Miw3ICs0Miw3IEBAIGV4dGVybiBjaGFyICpzdWJzdHJpbmcgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAKKyAvKiBBbGwgc3lzdGVtcyBub3dhZGF5cyBwcm9iYWJseSBoYXZlIHRoZXNlIGZ1bmN0aW9ucywgYnV0IC4uLiAqLworLSNpZmRlZiBIQVZFX0xPQ0FMRV9ICisrI2lmZGVmIEhBVkVfU0VUTE9DQUxFCisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNlbmRpZgorICNpZm5kZWYgSEFWRV9TRVRMT0NBTEUKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvZG8tY29tcGlsZS1uYXRpdmUtdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC9kby1jb21waWxlLW5hdGl2ZS10b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWViZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvZG8tY29tcGlsZS1uYXRpdmUtdG9vbHMucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA0NThlOTQ1MGNlY2Y3MDNmNTU1MzZlNjA5MzY1MTYyNzE5NTg1OTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlJveS5MaSIgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDEwIFNlcCAyMDE0IDE3OjAzOjI5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvIG5vdCBjb21waWxlIGhvc3QgdG9vbHMsIHNpbmNlIHdlIGhhdmUgbmF0aXZlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyMyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMjIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGI0NjEzMGQuLmNmNTg2NTQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTkwLDI4ICs5MCw3IEBAIEFDX0NBTk9OSUNBTF9CVUlMRAorICMgJG5hdGl2ZV90b29scyBpcyBhbHNvIGFkZGVkIHRvIFNVQkRJUlMgaW4gdGhlIG1haW4gTWFrZWZpbGUuYW0sCisgIyBzbyB0aGF0IG1ha2UgY29tcGlsZXMgdGhlIG5hdGl2ZSB0b29scyBmaXJzdC4KKyAjCistaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubzsgdGhlbgorLSAgbmF0aXZlX3Rvb2xzPQorLWVsc2UKKy0gIG5hdGl2ZV90b29scz10b29scworLSAgdGVzdCAtZCAiJG5hdGl2ZV90b29scyIgfHwgbWtkaXIgIiRuYXRpdmVfdG9vbHMiCistICBjb25mZGlyPWAoY2QgIiRzcmNkaXIiO3B3ZClgCistICAjIE1ha2Ugc3VyZSB0aGUgc2Vjb25kYXJ5IGNvbmZpZ3VyZSB3b24ndCBmYWlsIHdpdGgKKy0gICMgImVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZCIuCistICBybSAtZiBjb25maWcuc3RhdHVzCistICBBQ19NU0dfTk9USUNFKFtbRG9pbmcgY29uZmlndXJlIG9mIG5hdGl2ZSB0b29scyAoJHtidWlsZH0pLl1dKQorLSAgY2QgIiRuYXRpdmVfdG9vbHMiIHx8IGV4aXQgMQorLSAgIyBSdW4gc2Vjb25kYXJ5IGNvbmZpZ3VyZSBpbiBhbHRlcm5hdGUgZW52aXJvbm1lbnQgb3IKKy0gICMgaXQgZ2V0cyB0aGUgd3JvbmcgQ0MgZXRjLiAgZW52IC1pIGdpdmVzIHRoaXMgYnVpbGQgaG9zdCBjb25maWd1cmUKKy0gICMgYSBjbGVhbiBlbnZpcm9ubWVudC4KKy0gIGVudiAtaSBDQz0iJHtCVUlMRF9DQ30iIEFSPSIke0JVSUxEX0FSfSIgUkFOTElCPSIke0JVSUxEX1JBTkxJQn0iIFwKKy0gICAgICBQQVRIPSIke1BBVEh9IiBcCistICAgICAgdG9vbHNfb25seT0xIFwKKy0gICAgJHtjb25mZGlyfS9jb25maWd1cmUgLS1idWlsZD0ke2J1aWxkfSAtLWhvc3Q9JHtidWlsZH0gXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLW5scworLSAgY2QgLi4gfHwgZXhpdCAxCistICBBQ19NU0dfTk9USUNFKFtbQ29udGludWluZyB3aXRoIG1haW4gY29uZmlndXJlICgke2hvc3R9KS5dXSkKKy1maQorK25hdGl2ZV90b29scz0KKyBBQ19TVUJTVChuYXRpdmVfdG9vbHMpCisgQU1fQ09ORElUSU9OQUwoVE9PTFNfT05MWSwgW1t0ZXN0ICJ4JHRvb2xzX29ubHkiID0geDFdXSkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTcwNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLTQuOC91c2luZy1uYXRpdmUtbWFrZWluZm8ucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRnJvbSA5YjBkZjdkNmQzYzE4Y2ZhYzgyYzI5MWQ2MGE1MzU3ZDFiYzhkOWQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlJveS5MaSIgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDEwIFNlcCAyMDE0IDE3OjEwOjAzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzaW5nIG5hdGl2ZSBtYWtlaW5mbworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQorCitkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCitpbmRleCA2M2RmODE4Li5iNmNlYjM0IDEwMDY0NAorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC0xOSw3ICsxOSw3IEBAIG1hbl9NQU5TID0gaW5mby4xIGluZm9rZXkuMSBpbnN0YWxsLWluZm8uMSBtYWtlaW5mby4xIHRleGluZGV4LjEgdGV4aTJkdmkuMSBcCisgCisgIyBVc2UgdGhlIHByb2dyYW1zIGJ1aWx0IGluIG91ciBkaXN0cmlidXRpb24sIHRha2luZyBhY2NvdW50IG9mIHBvc3NpYmxlCisgIyBjcm9zcy1jb21waWxpbmcuCistTUFLRUlORk8gPSAkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL21ha2VpbmZvL21ha2VpbmZvCisrTUFLRUlORk8gPSBtYWtlaW5mbworIElOU1RBTExfSU5GTyA9ICQodG9wX2J1aWxkZGlyKS8kKG5hdGl2ZV90b29scykvdXRpbC9pbnN0YWxsLWluZm8KKyAKKyBUWElfWExBVEUgPSB0eGktY3MudGV4IHR4aS1kZS50ZXggdHhpLWVuLnRleCB0eGktZXMudGV4IHR4aS1mci50ZXggXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MzM4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogdGV4aW5mby01LjIvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRleGluZm8tNS4yLm9yaWcvZ251bGliL2xpYi9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4yL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC0zNzgsNyArMzc4LDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZGlzYWJsZS1uYXRpdmUtdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmYxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK1dlIGFscmVhZHkgREVQRU5EIG9uIHRoZSBuYXRpdmUgdGV4aW5mbyBiZWluZyBwcmVzZW50IGJlZm9yZSBidWlsZGluZyBzbwordGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gdHJ5IGFuZCBidWlsZCB0aGUgcmVxdWlyZWQgbmF0aXZlIHRleGluZm8gYmluYXJpZXMKK2JlZm9yZSBjcm9zcy1jb21waWxpbmcuIFRoaXMgc2ltcGxpZmllcyB0aGUgcmVjaXBlIHNvbWV3aGF0IQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgb2Ugc3BlY2lmaWMKKworU2lnbmVkLW9mZi1ieTogSm9zaHVhIExvY2sgPGpvc2hAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdGV4aW5mby00LjEzL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRleGluZm8tNC4xMy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHRleGluZm8tNC4xMy9jb25maWd1cmUuYWMKK0BAIC0xMDAsMjkgKzEwMCw3IEBAIEFDX0NBTk9OSUNBTF9CVUlMRAorICMgJG5hdGl2ZV90b29scyBpcyBhbHNvIGFkZGVkIHRvIFNVQkRJUlMgaW4gdGhlIG1haW4gTWFrZWZpbGUuYW0sCisgIyBzbyB0aGF0IG1ha2UgY29tcGlsZXMgdGhlIG5hdGl2ZSB0b29scyBmaXJzdC4KKyAjCistaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubzsgdGhlbgorLSAgbmF0aXZlX3Rvb2xzPQorLWVsc2UKKy0gIG5hdGl2ZV90b29scz10b29scworLSAgdGVzdCAtZCAiJG5hdGl2ZV90b29scyIgfHwgbWtkaXIgIiRuYXRpdmVfdG9vbHMiCistICBjb25mZGlyPWAoY2QgIiRzcmNkaXIiO3B3ZClgCistICAjIE1ha2Ugc3VyZSB0aGUgc2Vjb25kYXJ5IGNvbmZpZ3VyZSB3b24ndCBmYWlsIHdpdGgKKy0gICMgImVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZCIuCistICBybSAtZiBjb25maWcuc3RhdHVzCistICBBQ19NU0dfTk9USUNFKFtbRG9pbmcgY29uZmlndXJlIG9mIG5hdGl2ZSB0b29scyAoJHtidWlsZH0pLl1dKQorLSAgY2QgIiRuYXRpdmVfdG9vbHMiIHx8IGV4aXQgMQorLSAgIyBSdW4gc2Vjb25kYXJ5IGNvbmZpZ3VyZSBpbiBhbHRlcm5hdGUgZW52aXJvbm1lbnQgb3IKKy0gICMgaXQgZ2V0cyB0aGUgd3JvbmcgQ0MgZXRjLgorLSAgIyBlbnYgLWkgZ2l2ZXMgdGhpcyBidWlsZCBob3N0IGNvbmZpZ3VyZSBhIGNsZWFuIGVudmlyb25tZW50OworLSAgIyBjb25zZXF1ZW50bHksIHdlIGhhdmUgdG8gcmUtaW5pdGlhbGl6ZSAkUEFUSC4KKy0gIGVudiAtaSBDQz0iJEJVSUxEX0NDIiBBUj0iJEJVSUxEX0FSIiBSQU5MSUI9IiRCVUlMRF9SQU5MSUIiIFwKKy0gICAgICBQQVRIPSIkUEFUSCIgXAorLSAgICAgIHRvb2xzX29ubHk9MSBcCistICAgICR7Y29uZmRpcn0vY29uZmlndXJlIC0tYnVpbGQ9JHtidWlsZH0gLS1ob3N0PSR7YnVpbGR9IFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1ubHMKKy0gIGNkIC4uIHx8IGV4aXQgMQorLSAgQUNfTVNHX05PVElDRShbW0NvbnRpbnVpbmcgd2l0aCBtYWluIGNvbmZpZ3VyZSAoJHtob3N0fSkuXV0pCistZmkKKytuYXRpdmVfdG9vbHM9CisgQUNfU1VCU1QobmF0aXZlX3Rvb2xzKQorIEFNX0NPTkRJVElPTkFMKFRPT0xTX09OTFksIFtbdGVzdCAieCR0b29sc19vbmx5IiA9IHgxXV0pCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U0N2VjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDZmMWYzOTEyZmNiOTAwYjNhM2U2Y2JlMzM2MDMwNmZhZGUzMzM0OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCA2IEF1ZyAyMDE1IDE0OjU1OjA4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvbnQtZGVwZW5kLW9uLWhlbHAybWFuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorLS0tCisgZG9jL01ha2VmaWxlLmFtIHwgIDIgKy0KKyBtYW4vTWFrZWZpbGUuYW0gfCAxMiArKysrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQoraW5kZXggNzE5OGE2Yi4uNGJiYTU1MCAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtNDAsNyArNDAsNyBAQCByZWZjYXJkX2ZpbGVzID0gcmVmY2FyZC9NYWtlZmlsZSByZWZjYXJkL3R4aWNtZGNoZWNrIFwKKyAjIEluY2x1ZGUgb3VyIHRleGluZm8udGV4LCBub3QgQXV0b21ha2Uncy4KKyBFWFRSQV9ESVNUID0gZXBzZi50ZXggdGV4aW5mby50ZXggXAorICAgICAgICAgICAgICBmZGwudGV4aSBcCistCSAgICAgJChtYW5fTUFOUykgJChUWElfWExBVEUpIFwKKysJICAgICAkKFRYSV9YTEFURSkgXAorIAkgICAgICQocmVmY2FyZF9maWxlcykKKyAKKyBpZiBJTlNUQUxMX1dBUk5JTkdTCitkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmFtIGIvbWFuL01ha2VmaWxlLmFtCitpbmRleCBhMDhkNjAzLi5iZGZjOWE0IDEwMDY0NAorLS0tIGEvbWFuL01ha2VmaWxlLmFtCisrKysgYi9tYW4vTWFrZWZpbGUuYW0KK0BAIC0xMywyNCArMTMsMjQgQEAKKyAjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorICMgVGhlc2UgYXJlIGdlbmVyYXRlZCB1c2luZyBoZWxwMm1hbi4KKy1tYW5fTUFOUyA9IGluc3RhbGwtaW5mby4xIG1ha2VpbmZvLjEgdGV4aW5kZXguMSB0ZXhpMmR2aS4xCisrI21hbl9NQU5TID0gaW5zdGFsbC1pbmZvLjEgbWFrZWluZm8uMSB0ZXhpbmRleC4xIHRleGkyZHZpLjEKKyAKKyAjIFRoZXNlIHJlcXVpcmUgdGhlIGJ1aWxkIGluIGluZm8vLCB0aHVzIGNhbid0IGRvIGlmIHdlIGZhaWxlZCB0byBmaW5kIGEKKyAjIHRlcm1pbmFsIGxpYnJhcnkuCisgaWYgSEFWRV9URVJNTElCUworLW1hbl9NQU5TICs9IGluZm8uMQorKyNtYW5fTUFOUyArPSBpbmZvLjEKKyBlbmRpZgorIAorICMgVGhlc2UgYXJlIGhhbmQtd3JpdHRlbi4KKy1tYW5fTUFOUyArPSBpbmZvLjUgdGV4aW5mby41CisrI21hbl9NQU5TICs9IGluZm8uNSB0ZXhpbmZvLjUKKyAKKyAjIFRoaXMgaXMgZ2VuZXJhdGVkIGJ5IHBvZDJtYW4sIGJ1dCBsZXQncyBqdXN0IHJ1biBpdCBieSBoYW5kLgorLW1hbl9NQU5TICs9IHBvZDJ0ZXhpLjEKKysjbWFuX01BTlMgKz0gcG9kMnRleGkuMQorIAorICMgVGhlc2UgYXJlIGp1c3QgLnNvJ3MgdG8gdGhlIGNvbW1vbiBwcm9ncmFtLgorLW1hbl9NQU5TICs9IHRleGkyYW55LjEgdGV4aTJwZGYuMSBwZGZ0ZXhpMmR2aS4xCisrI21hbl9NQU5TICs9IHRleGkyYW55LjEgdGV4aTJwZGYuMSBwZGZ0ZXhpMmR2aS4xCisgCistRVhUUkFfRElTVCA9ICQobWFuX01BTlMpIGdpbmZvLmgybQorK0VYVFJBX0RJU1QgPSBnaW5mby5oMm0KKyAKKyAjIE1haW50YWluZXJzIHNob3VsZCBiZSBhYmxlIHRvIHJlZ2VuZXJhdGUuCisgTUFJTlRBSU5FUkNMRUFORklMRVMgPSAkKG1hbl9NQU5TKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2xpbmstemlwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjZlOWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitpbnN0YWxsLWluZm8gdXNlcyBzeW1ib2xzIGZyb20gemxpYiBzbyBtdXN0IGxpbmsgYWdhaW5zdCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHRleGluZm8tNS4xL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRleGluZm8tNS4xLm9yaWcvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmFtCisrKysgdGV4aW5mby01LjEvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmFtCitAQCAtMzQsNCArMzQsNCBAQCBBTV9DUFBGTEFHUyA9IAkJCQkJXAorICAgLUkkKHRvcF9zcmNkaXIpL2dudWxpYi9saWIJCQlcCisgICAtSSQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliCQkJXAorICAgLURMT0NBTEVESVI9XCIkKGxvY2FsZWRpcilcIgorLUxEQUREID0gJCh0b3BfYnVpbGRkaXIpL2dudWxpYi9saWIvbGliZ251LmEgJChMSUJJTlRMKQorK0xEQUREID0gJCh0b3BfYnVpbGRkaXIpL2dudWxpYi9saWIvbGliZ251LmEgJChMSUJJTlRMKSAtbHoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdGV4aW5mby00LjEyLXpsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYmQyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoCkBAIC0wLDAgKzEsMjMzIEBACitGcm9tIDIwZTFkOGE5NDgxZGMxM2RkMWQ0ZDE2OGI5MGUwZWQyZmYwOTdiOTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCA2IEF1ZyAyMDE1IDE0OjI5OjU3ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRleGluZm8tNC4xMi16bGliCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluICAgIHwgIDIgKy0KKyBpbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMgfCA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluIGIvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluCitpbmRleCBhZDczYWJiLi5lYWEyMTUzIDEwMDY0NAorLS0tIGEvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluCisrKysgYi9pbnN0YWxsLWluZm8vTWFrZWZpbGUuaW4KK0BAIC0yNDEsNyArMjQxLDcgQEAgYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChiaW5kaXIpIgorIFBST0dSQU1TID0gJChiaW5fUFJPR1JBTVMpCisgYW1fZ2luc3RhbGxfaW5mb19PQkpFQ1RTID0gaW5zdGFsbC1pbmZvLiQoT0JKRVhUKQorIGdpbnN0YWxsX2luZm9fT0JKRUNUUyA9ICQoYW1fZ2luc3RhbGxfaW5mb19PQkpFQ1RTKQorLWdpbnN0YWxsX2luZm9fTERBREQgPSAkKExEQUREKQorK2dpbnN0YWxsX2luZm9fTERBREQgPSAkKExEQUREKSAtbHoKKyBhbV9fREVQRU5ERU5DSUVTXzEgPQorIGdpbnN0YWxsX2luZm9fREVQRU5ERU5DSUVTID0gJCh0b3BfYnVpbGRkaXIpL2dudWxpYi9saWIvbGliZ251LmEgXAorIAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKK2RpZmYgLS1naXQgYS9pbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMgYi9pbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMKK2luZGV4IGI0NTRjMTUuLjRlMzkxMjIgMTAwNjQ0CistLS0gYS9pbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMKKysrKyBiL2luc3RhbGwtaW5mby9pbnN0YWxsLWluZm8uYworQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHJlZ2V4Lmg+CisgI2luY2x1ZGUgPGFyZ3ouaD4KKysjaW5jbHVkZSA8emxpYi5oPgorIAorICNkZWZpbmUgVEFCX1dJRFRIIDgKKyAKK0BAIC02ODQsMTUgKzY4NSwxNSBAQCBUaGUgZmlyc3QgdGltZSB5b3UgaW52b2tlIEluZm8geW91IHN0YXJ0IG9mZiBsb29raW5nIGF0IHRoaXMgbm9kZS5cblwKKyAgICAKKyAgICBSZXR1cm4gZWl0aGVyIHN0ZGluIHJlYWRpbmcgdGhlIGZpbGUsIG9yIGEgbm9uLXN0ZGluIHBpcGUgcmVhZGluZworICAgIHRoZSBvdXRwdXQgb2YgdGhlIGNvbXByZXNzaW9uIHByb2dyYW0uICAqLworLUZJTEUgKgorK3ZvaWQgKgorIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgdm9pZCAoKmNyZWF0ZV9jYWxsYmFjaykgKGNoYXIgKiksCistICAgIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtKSAKKysgICAgY2hhciAqKm9wZW5lZF9maWxlbmFtZSwgY2hhciAqKmNvbXByZXNzaW9uX3Byb2dyYW0sIGludCAqaXNfcGlwZSkgCisgeworICAgY2hhciAqbG9jYWxfb3BlbmVkX2ZpbGVuYW1lLCAqbG9jYWxfY29tcHJlc3Npb25fcHJvZ3JhbTsKKyAgIGludCBucmVhZDsKKyAgIGNoYXIgZGF0YVsxM107CistICBGSUxFICpmOworKyAgZ3pGaWxlICpmOworIAorICAgLyogV2UgbGV0IHRoZW0gcGFzcyBOVUxMIGlmIHRoZXkgZG9uJ3Qgd2FudCB0aGlzIGluZm8sIGJ1dCBpdCdzIGVhc2llcgorICAgICAgdG8gYWx3YXlzIGRldGVybWluZSBpdC4gICovCitAQCAtNzAwLDQ4ICs3MDEsNDggQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICBvcGVuZWRfZmlsZW5hbWUgPSAmbG9jYWxfb3BlbmVkX2ZpbGVuYW1lOworIAorICAgKm9wZW5lZF9maWxlbmFtZSA9IGZpbGVuYW1lOworLSAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgaWYgKCFmKQorICAgICB7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIuZ3oiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIueHoiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIuYnoyIiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmx6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5sem1hIiwgIiIpOworLSAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgI2lmZGVmIF9fTVNET1NfXworICAgaWYgKCFmKQorICAgICB7CisgICAgICAgZnJlZSAoKm9wZW5lZF9maWxlbmFtZSk7CisgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIuaWd6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmlueiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgI2VuZGlmIC8qIF9fTVNET1NfXyAqLworICAgaWYgKCFmKQorQEAgLTc1Nyw3ICs3NTgsNyBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgICAgICAgICgqY3JlYXRlX2NhbGxiYWNrKSAoZmlsZW5hbWUpOworIAorICAgICAgICAgICAvKiBBbmQgdHJ5IG9wZW5pbmcgaXQgYWdhaW4uICAqLworLSAgICAgICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgICAgICAgaWYgKCFmKQorICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorQEAgLTc2NywxMiArNzY4LDEyIEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAKKyAgIC8qIFJlYWQgZmlyc3QgZmV3IGJ5dGVzIG9mIGZpbGUgcmF0aGVyIHRoYW4gcmVseWluZyBvbiB0aGUgZmlsZW5hbWUuCisgICAgICBJZiB0aGUgZmlsZSBpcyBzaG9ydGVyIHRoYW4gdGhpcyBpdCBjYW4ndCBiZSB1c2FibGUgYW55d2F5LiAgKi8KKy0gIG5yZWFkID0gZnJlYWQgKGRhdGEsIHNpemVvZiAoZGF0YSksIDEsIGYpOworLSAgaWYgKG5yZWFkICE9IDEpCisrICBucmVhZCA9IGd6cmVhZCAoZiwgZGF0YSwgc2l6ZW9mIChkYXRhKSk7CisrICBpZiAobnJlYWQgIT0gc2l6ZW9mIChkYXRhKSkKKyAgICAgeworICAgICAgIC8qIEVtcHR5IGZpbGVzIGRvbid0IHNldCBlcnJuby4gIENhbGxpbmcgY29kZSBjYW4gY2hlY2sgZm9yCisgICAgICAgICAgdGhpcywgc28gbWFrZSBzdXJlIGVycm5vID09IDAganVzdCBpbiBjYXNlIGl0IGlzbid0IGFscmVhZHkuICovCistICAgICAgaWYgKG5yZWFkID09IDApCisrICAgICAgaWYgKG5yZWFkID49IDApCisgICAgICAgICBlcnJubyA9IDA7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KK0BAIC04MzgsMzUgKzgzOSw0MCBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgICpjb21wcmVzc2lvbl9wcm9ncmFtID0gTlVMTDsKKyAKKyAgIC8qIFNlZWsgYmFjayBvdmVyIHRoZSBtYWdpYyBieXRlcy4gICovCistICBpZiAoZnNlZWsgKGYsIDAsIDApIDwgMCkKKysgIGlmIChnenNlZWsgKGYsIDAsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICAgcmV0dXJuIDA7CisgCisgICBpZiAoKmNvbXByZXNzaW9uX3Byb2dyYW0pCisgICAgIHsgLyogSXQncyBjb21wcmVzc2VkLCBzbyBvcGVuIGEgcGlwZS4gICovCisrICAgICAgRklMRSAqcDsKKyAgICAgICBjaGFyICpjb21tYW5kID0gY29uY2F0ICgqY29tcHJlc3Npb25fcHJvZ3JhbSwgIiAtZCIsICIiKTsKKyAKKy0gICAgICBpZiAoZmNsb3NlIChmKSA8IDApCisrICAgICAgaWYgKGd6Y2xvc2UgKGYpIDwgMCkKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGYgPSBmcmVvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOLCBzdGRpbik7CistICAgICAgaWYgKCFmKQorKyAgICAgIHAgPSBmcmVvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOLCBzdGRpbik7CisrICAgICAgaWYgKCFwKQorICAgICAgICAgcmV0dXJuIDA7CistICAgICAgZiA9IHBvcGVuIChjb21tYW5kLCAiciIpOworLSAgICAgIGlmICghZikKKysgICAgICBwID0gcG9wZW4gKGNvbW1hbmQsICJyIik7CisrICAgICAgaWYgKCFwKQorICAgICAgICAgeworICAgICAgICAgICAvKiBVc2VkIGZvciBlcnJvciBtZXNzYWdlIGluIGNhbGxpbmcgY29kZS4gKi8KKyAgICAgICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbW1hbmQ7CisgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgICppc19waXBlID0gMTsKKysgICAgICByZXR1cm4gcDsKKyAgICAgfQorICAgZWxzZQorICAgICB7CistI2lmIE9fQklOQVJZCisrI2lmIDAgJiYgT19CSU5BUlkKKyAgICAgICAvKiBTaW5jZSB0aGlzIGlzIGEgdGV4dCBmaWxlLCBhbmQgd2Ugb3BlbmVkIGl0IGluIGJpbmFyeSBtb2RlLAorICAgICAgICAgIHN3aXRjaCBiYWNrIHRvIHRleHQgbW9kZS4gICovCisgICAgICAgZiA9IGZyZW9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsICJyIiwgZik7CisgICAgICAgaWYgKCEgZikKKyAJcmV0dXJuIDA7CisgI2VuZGlmCisrICAgICAgKmlzX3BpcGUgPSAwOworICAgICB9CisgCisgICByZXR1cm4gZjsKK0BAIC04ODUsNyArODkxLDggQEAgcmVhZGZpbGUgKGNoYXIgKmZpbGVuYW1lLCBpbnQgKnNpemVwLAorICAgICB2b2lkICgqY3JlYXRlX2NhbGxiYWNrKSAoY2hhciAqKSwgY2hhciAqKm9wZW5lZF9maWxlbmFtZSwKKyAgICAgY2hhciAqKmNvbXByZXNzaW9uX3Byb2dyYW0pCisgeworLSAgRklMRSAqZjsKKysgIHZvaWQgKmY7CisrICBpbnQgcGlwZV9wOworICAgaW50IGZpbGxlZCA9IDA7CisgICBpbnQgZGF0YV9zaXplID0gODE5MjsKKyAgIGNoYXIgKmRhdGEgPSB4bWFsbG9jIChkYXRhX3NpemUpOworQEAgLTg5MywxNCArOTAwLDIwIEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgIC8qIElmIHRoZXkgcGFzc2VkIHRoZSBzcGFjZSBmb3IgdGhlIGZpbGUgbmFtZSB0byByZXR1cm4sIHVzZSBpdC4gICovCisgICBmID0gb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGZpbGVuYW1lLCBjcmVhdGVfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZF9maWxlbmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb25fcHJvZ3JhbSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3Byb2dyYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaXBlX3ApOworIAorICAgaWYgKCFmKQorICAgICByZXR1cm4gMDsKKyAKKyAgIGZvciAoOzspCisgICAgIHsKKy0gICAgICBpbnQgbnJlYWQgPSBmcmVhZCAoZGF0YSArIGZpbGxlZCwgMSwgZGF0YV9zaXplIC0gZmlsbGVkLCBmKTsKKysgICAgICBpbnQgbnJlYWQ7CisrCisrICAgICAgaWYgKHBpcGVfcCkKKysgICAgICAgIG5yZWFkID0gZnJlYWQgKGRhdGEgKyBmaWxsZWQsIDEsIGRhdGFfc2l6ZSAtIGZpbGxlZCwgZik7CisrICAgICAgZWxzZQorKyAgICAgICAgbnJlYWQgPSBnenJlYWQgKGYsIGRhdGEgKyBmaWxsZWQsIGRhdGFfc2l6ZSAtIGZpbGxlZCk7CisgICAgICAgaWYgKG5yZWFkIDwgMCkKKyAgICAgICAgIHJldHVybiAwOworICAgICAgIGlmIChucmVhZCA9PSAwKQorQEAgLTkxOSw4ICs5MzIsMTAgQEAgcmVhZGZpbGUgKGNoYXIgKmZpbGVuYW1lLCBpbnQgKnNpemVwLAorICAgLyogV2UgbmVlZCB0byBjbG9zZSB0aGUgc3RyZWFtLCBzaW5jZSBvbiBzb21lIHN5c3RlbXMgdGhlIHBpcGUgY3JlYXRlZAorICAgICAgYnkgcG9wZW4gaXMgc2ltdWxhdGVkIGJ5IGEgdGVtcG9yYXJ5IGZpbGUgd2hpY2ggb25seSBnZXRzIHJlbW92ZWQKKyAgICAgIGluc2lkZSBwY2xvc2UuICAqLworLSAgaWYgKGYgIT0gc3RkaW4pCisrICBpZiAocGlwZV9wKQorICAgICBwY2xvc2UgKGYpOworKyAgZWxzZQorKyAgICBnemNsb3NlIChmKTsKKyAKKyAgICpzaXplcCA9IGZpbGxlZDsKKyAgIHJldHVybiBkYXRhOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3ZjMyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vdXNlX2hvc3RfbWFrZWRvYy5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Nyb3NzIGJ1aWxkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB0ZXhpbmZvLTUuMS9pbmZvL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGV4aW5mby01LjEub3JpZy9pbmZvL01ha2VmaWxlLmFtCisrKysgdGV4aW5mby01LjEvaW5mby9NYWtlZmlsZS5hbQorQEAgLTc2LDcgKzc2LDcgQEAgY21kX3NvdXJjZXMgPSAkKHNyY2Rpcikvc2Vzc2lvbi5jICQoc3JjZAorICMgbW9yZSB0aGFuIG9uY2UuCisgZnVucy5oOiBtYWtlZG9jJChFWEVFWFQpICQoY21kX3NvdXJjZXMpCisgCXJtIC1mICQoZ2VuZXJhdGVkX3NvdXJjZXMpCistCSQodG9wX2J1aWxkZGlyKS8kKG5hdGl2ZV90b29scykvaW5mby9tYWtlZG9jICQoY21kX3NvdXJjZXMpCisrCW1ha2Vkb2MgJChjbWRfc291cmNlcykKKyAKKyAjIFRoZSBmb2xsb3dpbmcgaGFjayBpcyBuZWNlc3NhcnkgdG8gaGludCBtYWtlIGJlZm9yZSB0aGUgYXV0b21hdGljCisgIyBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0LgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb180LjguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzY3OGUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb180LjguYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJEb2N1bWVudGF0aW9uIHN5c3RlbSBmb3Igb24tbGluZSBpbmZvcm1hdGlvbiBhbmQgcHJpbnRlZCBvdXRwdXQiCitERVNDUklQVElPTiA9ICJUZXhpbmZvIGlzIGEgZG9jdW1lbnRhdGlvbiBzeXN0ZW0gdGhhdCBjYW4gcHJvZHVjZSBib3RoIFwKK29ubGluZSBpbmZvcm1hdGlvbiBhbmQgcHJpbnRlZCBvdXRwdXQgZnJvbSBhIHNpbmdsZSBzb3VyY2UgZmlsZS4gVGhlIFwKK0dOVSBQcm9qZWN0IHVzZXMgdGhlIFRleGluZm8gZmlsZSBmb3JtYXQgZm9yIG1vc3Qgb2YgaXRzIGRvY3VtZW50YXRpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiB0ZXhpbmZvLTQuOC1yZXBsYWNlbWVudC1uYXRpdmUiCisKK0RFUEVORFMgPSAiemxpYiBuY3Vyc2VzIHRleGluZm8tNC44LXJlcGxhY2VtZW50LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIG5jdXJzZXMtbmF0aXZlIgorCitUQVJHRVRfUEFUQ0ggPSAiZmlsZTovL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoIFwKKyIKK1RBUkdFVF9QQVRDSF9jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vdGV4aW5mby8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY2hlY2stbG9jYWxlLWgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG8tY29tcGlsZS1uYXRpdmUtdG9vbHMucGF0Y2ggXAorICAgICAgICAgICAke1RBUkdFVF9QQVRDSH0gXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOWExYTU5MWVkMjM2MDAzZDBkNGIwMDhiZjA3ZWVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmM2NkZWViZTY1ZmRmNTEwZjU1ZDc2NWFiMTAzMWI1NDQxNmFhNWJjMjYzNWI2YTU0ZWY5YmNiMjM2N2M5MTciCisKK3RleF90ZXhpbmZvID0gInRleG1mL3RleC90ZXhpbmZvIgorCitpbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99CisJaW5zdGFsbCAtcCAtbTY0NCAke1N9L2RvYy90ZXhpbmZvLnRleCAke1N9L2RvYy90eGktPz8udGV4ICR7RH0ke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlpbnN0YWxsIC1tIDc1NSBpbmZvL21ha2Vkb2MgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gNzU1IG1ha2VpbmZvL21ha2VpbmZvICR7RH0ke2JpbmRpcn0KK30KKworUEFDS0FHRVMgKz0gImluZm8gaW5mby1kb2MiCisKK0ZJTEVTX2luZm8gPSAiJHtiaW5kaXJ9L2luZm8gJHtiaW5kaXJ9L2luZm9rZXkgJHtiaW5kaXJ9L2luc3RhbGwtaW5mbyIKK0ZJTEVTX2luZm8tZG9jID0gIiR7aW5mb2Rpcn0vaW5mby5pbmZvICR7aW5mb2Rpcn0vZGlyICR7aW5mb2Rpcn0vaW5mby0qLmluZm8gXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mby4xKiAke21hbmRpcn0vbWFuNS9pbmZvLjUqIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm9rZXkuMSogJHttYW5kaXJ9L21hbjEvaW5zdGFsbC1pbmZvLjEqIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vbWFrZWluZm8gJHtiaW5kaXJ9L3RleGkqICR7YmluZGlyfS9wZGZ0ZXhpMmR2aSAke2JpbmRpcn0vcG9kMnRleGkgJHtkYXRhZGlyfS90ZXhpbmZvIgorRklMRVNfJHtQTn0tZG9jID0gIiR7aW5mb2Rpcn0vdGV4aW5mbyogXAorICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30gXAorICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xICR7bWFuZGlyfS9tYW41IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb182LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiNzE1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNi4wLmJiCkBAIC0wLDAgKzEsODIgQEAKK1NVTU1BUlkgPSAiRG9jdW1lbnRhdGlvbiBzeXN0ZW0gZm9yIG9uLWxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IgorREVTQ1JJUFRJT04gPSAiVGV4aW5mbyBpcyBhIGRvY3VtZW50YXRpb24gc3lzdGVtIHRoYXQgY2FuIHByb2R1Y2UgYm90aCBcCitvbmxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IGZyb20gYSBzaW5nbGUgc291cmNlIGZpbGUuIFRoZSBcCitHTlUgUHJvamVjdCB1c2VzIHRoZSBUZXhpbmZvIGZpbGUgZm9ybWF0IGZvciBtb3N0IG9mIGl0cyBkb2N1bWVudGF0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHRleGluZm8tcmVwbGFjZW1lbnQtbmF0aXZlIgorCitkZWYgY29tcHJlc3NfcGtnKGQpOgorICAgIGlmICJjb21wcmVzc19kb2MiIGluIChkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgY29tcHJlc3MgPSBkLmdldFZhcigiRE9DX0NPTVBSRVNTIiwgVHJ1ZSkKKyAgICAgICAgIGlmIGNvbXByZXNzID09ICJneiI6CisgICAgICAgICAgICAgcmV0dXJuICJnemlwIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAiYnoyIjoKKyAgICAgICAgICAgICByZXR1cm4gImJ6aXAyIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAieHoiOgorICAgICAgICAgICAgIHJldHVybiAieHoiCisgICAgcmV0dXJuICIiCisKK1JERVBFTkRTX2luZm8gKz0gIiR7QGNvbXByZXNzX3BrZyhkKX0iCisKK0RFUEVORFMgPSAiemxpYiBuY3Vyc2VzIHRleGluZm8tcmVwbGFjZW1lbnQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUgbmN1cnNlcy1uYXRpdmUiCisKK1RBUkdFVF9QQVRDSCA9ICJmaWxlOi8vdXNlX2hvc3RfbWFrZWRvYy5wYXRjaCIKK1RBUkdFVF9QQVRDSF9jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vdGV4aW5mby8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdGV4aW5mby00LjEyLXpsaWIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1uYXRpdmUtdG9vbHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGluay16aXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgICR7VEFSR0VUX1BBVENIfSBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTFhMmVmNWRjZTUwMThiNTNmMGY2ZWVkNDViMjQ3YTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODNkMzE4MzI5MGYzNGU3Zjk1OGQyMDlkMGIyMDAyMmM2ZmU5ZTkyMWViNmZlOTRjMjdkOTg4ODI3ZDQ4NzhkMiIKKwordGV4X3RleGluZm8gPSAidGV4bWYvdGV4L3RleGluZm8iCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZSB1cGRhdGVzIHBvL01ha2VmaWxlLmluLmluLCB3ZSBhbHNvIG5lZWQKKwkjIHVwZGF0ZSBwb19kb2N1bWVudC4KKwljcCAtZiAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gJHtTfS9wb19kb2N1bWVudC8KK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCWlmIFsgLWQgdG9vbHMgXTt0aGVuCisJCW9lX3J1bm1ha2UgLUMgdG9vbHMvZ251bGliL2xpYgorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99CisJaW5zdGFsbCAtcCAtbTY0NCAke1N9L2RvYy90ZXhpbmZvLnRleCAke1N9L2RvYy90eGktPz8udGV4ICR7RH0ke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS90ZXhpMmFueSAke0R9JHtiaW5kaXJ9L3BvZDJ0ZXhpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlpbnN0YWxsIC1tIDc1NSBpbmZvL21ha2Vkb2MgJHtEfSR7YmluZGlyfQorfQorCitQQUNLQUdFUyArPSAiaW5mbyBpbmZvLWRvYyIKKworRklMRVNfaW5mbyA9ICIke2JpbmRpcn0vaW5mbyAke2JpbmRpcn0vaW5mb2tleSAke2JpbmRpcn0vaW5zdGFsbC1pbmZvIgorRklMRVNfaW5mby1kb2MgPSAiJHtpbmZvZGlyfS9pbmZvLmluZm8qICR7aW5mb2Rpcn0vZGlyICR7aW5mb2Rpcn0vaW5mby0qLmluZm8qIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm8uMSogJHttYW5kaXJ9L21hbjUvaW5mby41KiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZva2V5LjEqICR7bWFuZGlyfS9tYW4xL2luc3RhbGwtaW5mby4xKiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L21ha2VpbmZvICR7YmluZGlyfS90ZXhpKiAke2JpbmRpcn0vcGRmdGV4aTJkdmkgJHtiaW5kaXJ9L3BvZDJ0ZXhpICR7ZGF0YWRpcn0vdGV4aW5mbyIKK1JERVBFTkRTXyR7UE59ID0gInBlcmwiCitGSUxFU18ke1BOfS1kb2MgPSAiJHtpbmZvZGlyfS90ZXhpbmZvKiBcCisgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfSBcCisgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEgJHttYW5kaXJ9L21hbjUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWEwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLTEuNy9kZWJpYW4ucGF0Y2gKQEAgLTAsMCArMSwxMzAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKy0tLSB0aW1lLTEuNy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIHRpbWUtMS43L2NvbmZpZ3VyZS5pbgorQEAgLTEsMTEgKzEsOCBAQAorIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIEFDX0lOSVQodGltZS5jKQorLVZFUlNJT049MS43CistQUNfU1VCU1QoVkVSU0lPTikKKy1QQUNLQUdFPXRpbWUKKy1BQ19TVUJTVChQQUNLQUdFKQorK0FNX0lOSVRfQVVUT01BS0UodGltZSwgMS43KQorIAorLUFDX0FSR19QUk9HUkFNCisrQU1fTUFJTlRBSU5FUl9NT0RFCisgCisgZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQworQEAgLTE1LDcgKzEyLDcgQEAKKyBkbmwgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisgQUNfSEVBREVSX1NUREMKKyBBQ19IRUFERVJfU1lTX1dBSVQKKy1BQ19DSEVDS19IRUFERVJTKHVuaXN0ZC5oIHN0cmluZy5oIHN5cy9ydXNhZ2UuaCkKKytBQ19DSEVDS19IRUFERVJTKHVuaXN0ZC5oIHN0cmluZy5oIHN5cy9ydXNhZ2UuaCBzeXMvcmVzb3VyY2UuaCkKKyAKKyBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyBBQ19DX0NPTlNUCistLS0gdGltZS0xLjcub3JpZy92ZXJzaW9uLnRleGkKKysrKyB0aW1lLTEuNy92ZXJzaW9uLnRleGkKK0BAIC0xLDMgKzEsMyBAQAorLUBzZXQgVVBEQVRFRCAxMiBKdW5lIDE5OTYKKytAc2V0IFVQREFURUQgOSBNYXkgMjAwMgorIEBzZXQgRURJVElPTiAxLjcKKyBAc2V0IFZFUlNJT04gMS43CistLS0gdGltZS0xLjcub3JpZy90aW1lLmMKKysrKyB0aW1lLTEuNy90aW1lLmMKK0BAIC0xNDcsNiArMTQ3LDEwIEBACisgICBOVUxMCisgfTsKKyAMCisrCisrLyogSWYgdHJ1ZSwgZG8gbm90IHNob3cgdGhlIGV4aXQgbWVzc2FnZSAqLworK3N0YXRpYyBib29sZWFuIHF1aWV0OworKworIC8qIElmIHRydWUsIHNob3cgYW4gRW5nbGlzaCBkZXNjcmlwdGlvbiBuZXh0IHRvIGVhY2ggc3RhdGlzdGljLiAgKi8KKyBzdGF0aWMgYm9vbGVhbiB2ZXJib3NlOworIAorQEAgLTE3Miw2ICsxNzYsNyBAQAorICAgeyJoZWxwIiwgbm9fYXJndW1lbnQsIE5VTEwsICdoJ30sCisgICB7Im91dHB1dC1maWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdvJ30sCisgICB7InBvcnRhYmlsaXR5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdwJ30sCisrICB7InF1aWV0Iiwgbm9fYXJndW1lbnQsTlVMTCwgJ3EnfSwKKyAgIHsidmVyYm9zZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAndid9LAorICAgeyJ2ZXJzaW9uIiwgbm9fYXJndW1lbnQsIE5VTEwsICdWJ30sCisgICB7TlVMTCwgbm9fYXJndW1lbnQsIE5VTEwsIDB9CitAQCAtMzMzLDcgKzMzOCw4IEBACisgICBlbHNlIGlmIChXSUZTSUdOQUxFRCAocmVzcC0+d2FpdHN0YXR1cykpCisgICAgIGZwcmludGYgKGZwLCAiQ29tbWFuZCB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCAlZFxuIiwKKyAJICAgICBXVEVSTVNJRyAocmVzcC0+d2FpdHN0YXR1cykpOworLSAgZWxzZSBpZiAoV0lGRVhJVEVEIChyZXNwLT53YWl0c3RhdHVzKSAmJiBXRVhJVFNUQVRVUyAocmVzcC0+d2FpdHN0YXR1cykpCisrICBlbHNlIGlmIChXSUZFWElURUQgKHJlc3AtPndhaXRzdGF0dXMpICYmIFdFWElUU1RBVFVTIChyZXNwLT53YWl0c3RhdHVzKQorKwkgICAmJiAhcXVpZXQpCisgICAgIGZwcmludGYgKGZwLCAiQ29tbWFuZCBleGl0ZWQgd2l0aCBub24temVybyBzdGF0dXMgJWRcbiIsCisgCSAgICAgV0VYSVRTVEFUVVMgKHJlc3AtPndhaXRzdGF0dXMpKTsKKyAKK0BAIC01MjMsNiArNTI5LDcgQEAKKyAgIGNoYXIgKmZvcm1hdDsJCQkvKiBGb3JtYXQgZm91bmQgaW4gZW52aXJvbm1lbnQuICAqLworIAorICAgLyogSW5pdGlhbGl6ZSB0aGUgb3B0aW9uIGZsYWdzLiAgKi8KKysgIHF1aWV0ID0gZmFsc2U7CisgICB2ZXJib3NlID0gZmFsc2U7CisgICBvdXRmaWxlID0gTlVMTDsKKyAgIG91dGZwID0gc3RkZXJyOworQEAgLTUzNiw3ICs1NDMsNyBAQAorICAgaWYgKGZvcm1hdCkKKyAgICAgb3V0cHV0X2Zvcm1hdCA9IGZvcm1hdDsKKyAKKy0gIHdoaWxlICgob3B0YyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiK2FmOm86cHZWIiwgbG9uZ29wdHMsIChpbnQgKikgMCkpCisrICB3aGlsZSAoKG9wdGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIithZjpvOnBxdlYiLCBsb25nb3B0cywgKGludCAqKSAwKSkKKyAJICE9IEVPRikKKyAgICAgeworICAgICAgIHN3aXRjaCAob3B0YykKK0BAIC01NTUsNiArNTYyLDkgQEAKKyAJY2FzZSAncCc6CisgCSAgb3V0cHV0X2Zvcm1hdCA9IHBvc2l4X2Zvcm1hdDsKKyAJICBicmVhazsKKysJY2FzZSAncSc6CisrCSAgcXVpZXQgPSB0cnVlOworKwkgIGJyZWFrOworIAljYXNlICd2JzoKKyAJICB2ZXJib3NlID0gdHJ1ZTsKKyAJICBicmVhazsKK0BAIC02NDIsOSArNjUyLDkgQEAKKyAgIGZmbHVzaCAob3V0ZnApOworIAorICAgaWYgKFdJRlNUT1BQRUQgKHJlcy53YWl0c3RhdHVzKSkKKy0gICAgZXhpdCAoV1NUT1BTSUcgKHJlcy53YWl0c3RhdHVzKSk7CisrICAgIGV4aXQgKFdTVE9QU0lHIChyZXMud2FpdHN0YXR1cykgKyAxMjgpOworICAgZWxzZSBpZiAoV0lGU0lHTkFMRUQgKHJlcy53YWl0c3RhdHVzKSkKKy0gICAgZXhpdCAoV1RFUk1TSUcgKHJlcy53YWl0c3RhdHVzKSk7CisrICAgIGV4aXQgKFdURVJNU0lHIChyZXMud2FpdHN0YXR1cykgKyAxMjgpOworICAgZWxzZSBpZiAoV0lGRVhJVEVEIChyZXMud2FpdHN0YXR1cykpCisgICAgIGV4aXQgKFdFWElUU1RBVFVTIChyZXMud2FpdHN0YXR1cykpOworIH0KK0BAIC02NTcsNyArNjY3LDcgQEAKKyAgIGZwcmludGYgKHN0cmVhbSwgIlwKKyBVc2FnZTogJXMgWy1hcHZWXSBbLWYgZm9ybWF0XSBbLW8gZmlsZV0gWy0tYXBwZW5kXSBbLS12ZXJib3NlXVxuXAorICAgICAgICBbLS1wb3J0YWJpbGl0eV0gWy0tZm9ybWF0PWZvcm1hdF0gWy0tb3V0cHV0PWZpbGVdIFstLXZlcnNpb25dXG5cCistICAgICAgIFstLWhlbHBdIGNvbW1hbmQgW2FyZy4uLl1cbiIsCisrICAgICAgIFstLXF1aWV0XSBbLS1oZWxwXSBjb21tYW5kIFthcmcuLi5dXG4iLAorIAkgICBwcm9ncmFtX25hbWUpOworICAgZXhpdCAoc3RhdHVzKTsKKyB9CistLS0gdGltZS0xLjcub3JpZy9yZXN1c2UuaAorKysrIHRpbWUtMS43L3Jlc3VzZS5oCitAQCAtMzYsMTkgKzM2LDggQEAKKyAjIGluY2x1ZGUgPHN5cy9ydXNhZ2UuaD4KKyAjZWxzZQorICMgZGVmaW5lIFRWX01TRUMgdHZfdXNlYyAvIDEwMDAKKy0jIGlmIEhBVkVfV0FJVDMKKysjIGlmIEhBVkVfU1lTX1JFU09VUkNFX0gKKyAjICBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKy0jIGVsc2UKKy0vKiBQcm9jZXNzIHJlc291cmNlIHVzYWdlIHN0cnVjdHVyZS4gICovCistc3RydWN0IHJ1c2FnZQorLXsKKy0gIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwkvKiBVc2VyIHRpbWUgdXNlZC4gICovCistICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsJLyogU3lzdGVtIHRpbWUgdXNlZC4gICovCistICBpbnQgcnVfbWF4cnNzLCBydV9peHJzcywgcnVfaWRyc3MsIHJ1X2lzcnNzLAorLSAgcnVfbWluZmx0LCBydV9tYWpmbHQsIHJ1X25zd2FwLCBydV9pbmJsb2NrLCAKKy0gIHJ1X291YmxvY2ssIHJ1X21zZ3NuZCwgcnVfbXNncmN2LCBydV9uc2lnbmFscywKKy0gIHJ1X252Y3N3LCBydV9uaXZjc3c7CistfTsKKyAjIGVuZGlmCisgI2VuZGlmCisgCistLS0gdGltZS0xLjcub3JpZy90aW1lLnRleGkKKysrKyB0aW1lLTEuNy90aW1lLnRleGkKK0BAIC0xMSw2ICsxMSwxMiBAQAorIEBmaW5hbG91dAorIEBlbmQgaWZ0ZXgKKyAKKytAZGlyY2F0ZWdvcnkgSW5kaXZpZHVhbCB1dGlsaXRpZXMKKytAZGlyZW50cnkKKysqIHRpbWU6ICh0aW1lKS4gICAgICAgICAgICAgICAgICAgICBSdW4gcHJvZ3JhbXMgYW5kIHN1bW1hcml6ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSByZXNvdXJjZSB1c2FnZS4KKytAZW5kIGRpcmVudHJ5CisrCisgQGlmaW5mbworIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHRoZSBHTlUgQGNvZGV7dGltZX0gY29tbWFuZCBmb3IgcnVubmluZyBwcm9ncmFtcworIGFuZCBzdW1tYXJpemluZyB0aGUgc3lzdGVtIHJlc291cmNlcyB0aGV5IHVzZS4KK0BAIC0xODUsNiArMTkxLDEwIEBACisgc3lzICVTCisgQGVuZCBleGFtcGxlCisgCisrQGl0ZW0gLXEKKytAaXRlbXggLS1xdWlldAorK1N1cHByZXNzIG5vbi16ZXJvIGVycm9yIGNvZGUgZnJvbSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbS4KKysKKyBAaXRlbSAtdgorIEBpdGVteCAtLXZlcmJvc2UKKyBAY2luZGV4IGZvcm1hdAorLS0tIHRpbWUtMS43Lm9yaWcvdGltZS5pbmZvCisrKysgdGltZS0xLjcvdGltZS5pbmZvCitAQCAtMSw1ICsxLDEwIEBACistVGhpcyBpcyBJbmZvIGZpbGUgLi90aW1lLmluZm8sIHByb2R1Y2VkIGJ5IE1ha2VpbmZvLTEuNTUgZnJvbSB0aGUgaW5wdXQKKy1maWxlIHRpbWUudGV4aS4KKytUaGlzIGlzIHRpbWUuaW5mbywgcHJvZHVjZWQgYnkgbWFrZWluZm8gdmVyc2lvbiA0LjEgZnJvbSB0aW1lLnRleGkuCisrCisrSU5GTy1ESVItU0VDVElPTiBJbmRpdmlkdWFsIHV0aWxpdGllcworK1NUQVJULUlORk8tRElSLUVOVFJZCisrKiB0aW1lOiAodGltZSkuICAgICAgICAgICAgICAgICAgICAgUnVuIHByb2dyYW1zIGFuZCBzdW1tYXJpemUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gcmVzb3VyY2UgdXNhZ2UuCisrRU5ELUlORk8tRElSLUVOVFJZCisgCisgICAgVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdGhlIEdOVSBgdGltZScgY29tbWFuZCBmb3IgcnVubmluZyBwcm9ncmFtcworIGFuZCBzdW1tYXJpemluZyB0aGUgc3lzdGVtIHJlc291cmNlcyB0aGV5IHVzZS4KK0BAIC0zMSw3ICszNiw3IEBACisgCisgKiBSZXNvdXJjZSBNZWFzdXJlbWVudDo6ICBNZWFzdXJpbmcgcHJvZ3JhbSByZXNvdXJjZSB1c2UuCisgCistIC0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0KKysgLS0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0tCisgCisgTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlCisgCitAQCAtNTgsMTQgKzYzLDE0IEBACisgICAgVGhlIGB0aW1lJyBjb21tYW5kIHJ1bnMgYW5vdGhlciBwcm9ncmFtLCB0aGVuIGRpc3BsYXlzIGluZm9ybWF0aW9uCisgYWJvdXQgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoYXQgcHJvZ3JhbSwgY29sbGVjdGVkIGJ5IHRoZSBzeXN0ZW0gd2hpbGUKKyB0aGUgcHJvZ3JhbSB3YXMgcnVubmluZy4gIFlvdSBjYW4gc2VsZWN0IHdoaWNoIGluZm9ybWF0aW9uIGlzIHJlcG9ydGVkCistYW5kIHRoZSBmb3JtYXQgaW4gd2hpY2ggaXQgaXMgc2hvd24gKCpub3RlIFNldHRpbmcgRm9ybWF0OjouKSwgb3IgaGF2ZQorK2FuZCB0aGUgZm9ybWF0IGluIHdoaWNoIGl0IGlzIHNob3duICgqbm90ZSBTZXR0aW5nIEZvcm1hdDo6KSwgb3IgaGF2ZQorIGB0aW1lJyBzYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGZpbGUgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIGl0IG9uIHRoZQorLXNjcmVlbiAoKm5vdGUgUmVkaXJlY3Rpbmc6Oi4pLgorK3NjcmVlbiAoKm5vdGUgUmVkaXJlY3Rpbmc6OikuCisgCisgICAgVGhlIHJlc291cmNlcyB0aGF0IGB0aW1lJyBjYW4gcmVwb3J0IG9uIGZhbGwgaW50byB0aGUgZ2VuZXJhbAorIGNhdGVnb3JpZXMgb2YgdGltZSwgbWVtb3J5LCBhbmQgSS9PIGFuZCBJUEMgY2FsbHMuICBTb21lIHN5c3RlbXMgZG8gbm90CisgcHJvdmlkZSBtdWNoIGluZm9ybWF0aW9uIGFib3V0IHByb2dyYW0gcmVzb3VyY2UgdXNlOyBgdGltZScgcmVwb3J0cworLXVuYXZhaWxhYmxlIGluZm9ybWF0aW9uIGFzIHplcm8gdmFsdWVzICgqbm90ZSBBY2N1cmFjeTo6LikuCisrdW5hdmFpbGFibGUgaW5mb3JtYXRpb24gYXMgemVybyB2YWx1ZXMgKCpub3RlIEFjY3VyYWN5OjopLgorIAorICAgIFRoZSBmb3JtYXQgb2YgdGhlIGB0aW1lJyBjb21tYW5kIGlzOgorIAorQEAgLTEzMiw2ICsxMzcsMTAgQEAKKyAgICAgICAgICAgdXNlciAlVQorICAgICAgICAgICBzeXMgJVMKKyAKKytgLXEnCisrYC0tcXVpZXQnCisrICAgICBTdXBwcmVzcyBub24temVybyBlcnJvciBjb2RlIGZyb20gdGhlIGV4ZWN1dGVkIHByb2dyYW0uCisrCisgYC12JworIGAtLXZlcmJvc2UnCisgICAgICBVc2UgdGhlIGJ1aWx0LWluIHZlcmJvc2UgZm9ybWF0LCB3aGljaCBkaXNwbGF5cyBlYWNoIGF2YWlsYWJsZQorQEAgLTE3NCw3ICsxODMsNyBAQAorICAgIFRoZSByZXNvdXJjZSBzcGVjaWZpZXJzLCB3aGljaCBhcmUgYSBzdXBlcnNldCBvZiB0aG9zZSByZWNvZ25pemVkIGJ5CisgdGhlIGB0Y3NoJyBidWlsdGluIGB0aW1lJyBjb21tYW5kLCBhcmUgbGlzdGVkIGJlbG93LiAgTm90IGFsbCByZXNvdXJjZXMKKyBhcmUgbWVhc3VyZWQgYnkgYWxsIHZlcnNpb25zIG9mIFVuaXgsIHNvIHNvbWUgb2YgdGhlIHZhbHVlcyBtaWdodCBiZQorLXJlcG9ydGVkIGFzIHplcm8gKCpub3RlIEFjY3VyYWN5OjouKS4KKytyZXBvcnRlZCBhcyB6ZXJvICgqbm90ZSBBY2N1cmFjeTo6KS4KKyAKKyAqIE1lbnU6CisgCitAQCAtMzA4LDExICszMTcsMTEgQEAKKyBgLW8gRklMRScKKyBgLS1vdXRwdXQ9RklMRScKKyAgICAgIFdyaXRlIHRoZSByZXNvdXJjZSB1c2Ugc3RhdGlzdGljcyB0byBGSUxFLiAgQnkgZGVmYXVsdCwgdGhpcworLSAgICAgKm92ZXJ3cml0ZXMqIHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisrICAgICBfb3ZlcndyaXRlc18gdGhlIGZpbGUsIGRlc3Ryb3lpbmcgdGhlIGZpbGUncyBwcmV2aW91cyBjb250ZW50cy4KKyAKKyBgLWEnCisgYC0tYXBwZW5kJworLSAgICAgKkFwcGVuZCogdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorKyAgICAgX0FwcGVuZF8gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorICAgICAgb2Ygb3ZlcndyaXRpbmcgaXQuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCB3aXRoIHRoZSBgLW8nIG9yCisgICAgICBgLS1vdXRwdXQnIG9wdGlvbi4KKyAKK0BAIC00MzcsNyArNDQ2LDcgQEAKKyAKKyBgLWEnCisgYC0tYXBwZW5kJworLSAgICAgKkFwcGVuZCogdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorKyAgICAgX0FwcGVuZF8gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorICAgICAgb2Ygb3ZlcndyaXRpbmcgaXQuCisgCisgYC1mIEZPUk1BVCcKK0BAIC00NjIsMTcgKzQ3MSwxNyBAQAorIAorIB8KKyBUYWcgVGFibGU6CistTm9kZTogVG9wfzkzNAorLU5vZGU6IFJlc291cmNlIE1lYXN1cmVtZW50fzE3MjUKKy1Ob2RlOiBTZXR0aW5nIEZvcm1hdH8zNjc4CistTm9kZTogRm9ybWF0IFN0cmluZ380OTA3CistTm9kZTogVGltZSBSZXNvdXJjZXN/NjIxNAorLU5vZGU6IE1lbW9yeSBSZXNvdXJjZXN/Njg0NAorLU5vZGU6IEkvTyBSZXNvdXJjZXN/NzU0OQorLU5vZGU6IENvbW1hbmQgSW5mb384NzQ3CistTm9kZTogUmVkaXJlY3Rpbmd/ODk2NAorLU5vZGU6IEV4YW1wbGVzfzk3NTQKKy1Ob2RlOiBBY2N1cmFjeX8xMjA2NAorLU5vZGU6IEludm9raW5nIHRpbWV/MTM1ODYKKytOb2RlOiBUb3B/MTExNQorK05vZGU6IFJlc291cmNlIE1lYXN1cmVtZW50fzE5MDgKKytOb2RlOiBTZXR0aW5nIEZvcm1hdH8zODU4CisrTm9kZTogRm9ybWF0IFN0cmluZ381MTY0CisrTm9kZTogVGltZSBSZXNvdXJjZXN/NjQ3MAorK05vZGU6IE1lbW9yeSBSZXNvdXJjZXN/NzEwMAorK05vZGU6IEkvTyBSZXNvdXJjZXN/NzgwNQorK05vZGU6IENvbW1hbmQgSW5mb385MDAzCisrTm9kZTogUmVkaXJlY3Rpbmd/OTIyMAorK05vZGU6IEV4YW1wbGVzfzEwMDEwCisrTm9kZTogQWNjdXJhY3l/MTIzMjAKKytOb2RlOiBJbnZva2luZyB0aW1lfzEzODQyCisgHworIEVuZCBUYWcgVGFibGUKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUuaHRtbAorKysrIHRpbWUtMS43L3RpbWUuaHRtbAorQEAgLTAsMCArMSwxMDIxIEBACisrPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKysgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MC9sb29zZS5kdGQiPgorKzxIVE1MPgorKzwhLS0gQ3JlYXRlZCBvbiBTZXB0ZW1iZXIsIDEgMjAwMyBieSB0ZXhpMmh0bWwgMS42NiAtLT4KKys8IS0tCisrV3JpdHRlbiBieTogTGlvbmVsIENvbnMgPExpb25lbC5Db25zQGNlcm4uY2g+IChvcmlnaW5hbCBhdXRob3IpCisrICAgICAgICAgICAgS2FybCBCZXJyeSAgPGthcmxAZnJlZWZyaWVuZHMub3JnPgorKyAgICAgICAgICAgIE9sYWYgQmFjaG1hbm4gPG9iYWNobWFuQG1hdGhlbWF0aWsudW5pLWtsLmRlPgorKyAgICAgICAgICAgIGFuZCBtYW55IG90aGVycy4KKytNYWludGFpbmVkIGJ5OiBNYW55IGNyZWF0aXZlIHBlb3BsZSA8ZGV2QHRleGkyaHRtbC5jdnNob21lLm9yZz4KKytTZW5kIGJ1Z3MgYW5kIHN1Z2dlc3Rpb25zIHRvIDx1c2Vyc0B0ZXhpMmh0bWwuY3ZzaG9tZS5vcmc+CisrCisrLS0+CisrPEhFQUQ+CisrPFRJVExFPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvVElUTEU+CisrCisrPE1FVEEgTkFNRT0iZGVzY3JpcHRpb24iIENPTlRFTlQ9Ik1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZSI+CisrPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Ik1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZSI+CisrPE1FVEEgTkFNRT0icmVzb3VyY2UtdHlwZSIgQ09OVEVOVD0iZG9jdW1lbnQiPgorKzxNRVRBIE5BTUU9ImRpc3RyaWJ1dGlvbiIgQ09OVEVOVD0iZ2xvYmFsIj4KKys8TUVUQSBOQU1FPSJHZW5lcmF0b3IiIENPTlRFTlQ9InRleGkyaHRtbCAxLjY2Ij4KKysKKys8L0hFQUQ+CisrCisrPEJPRFkgTEFORz0iZW4iIEJHQ09MT1I9IiNGRkZGRkYiIFRFWFQ9IiMwMDAwMDAiIExJTks9IiMwMDAwRkYiIFZMSU5LPSIjODAwMDgwIiBBTElOSz0iI0ZGMDAwMCI+CisrCisrPEEgTkFNRT0iU0VDX1RvcCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDE+TWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlPC9IMT4KKysKKys8UD4KKysKKytUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB0aGUgR05VIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKythbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCisrVGhpcyBpcyBlZGl0aW9uIDEuNywgZm9yIHZlcnNpb24gMS43LgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+MS4gTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+TWVhc3VyaW5nIHByb2dyYW0gcmVzb3VyY2UgdXNlLjwvVEQ+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4gLS0gVGhlIERldGFpbGVkIE5vZGUgTGlzdGluZyAtLS0KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+TWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlCisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlNlbGVjdGluZyB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgYnkgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIGluZm9ybWF0aW9uIDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPldyaXRpbmcgdGhlIGluZm9ybWF0aW9uIHRvIGEgZmlsZS48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4xLjQgRXhhbXBsZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5FeGFtcGxlcyBvZiB1c2luZyA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+TGltaXRhdGlvbnMgb24gdGhlIGFjY3VyYWN5IG9mIDxDT0RFPnRpbWU8L0NPREU+IG91dHB1dC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+MS42IFJ1bm5pbmcgdGhlIDxDT0RFPnRpbWU8L0NPREU+IENvbW1hbmQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLjwvVEQ+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5UaGUgRm9ybWF0IFN0cmluZworKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+MS4yLjEgVGltZSBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4xLjIuMiBNZW1vcnkgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+MS4yLjMgSS9PIFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzciPjEuMi40IENvbW1hbmQgSW5mbzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8L1RBQkxFPgorKzxQPgorKworKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDMSI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmbHQ7Jmx0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8QSBOQU1FPSJSZXNvdXJjZSBNZWFzdXJlbWVudCI+PC9BPgorKzxIMT4gMS4gTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlIDwvSDE+CisrPCEtLWRvY2lkOjpTRUMxOjotLT4KKys8UD4KKysKKytUaGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBydW5zIGFub3RoZXIgcHJvZ3JhbSwgdGhlbiBkaXNwbGF5cyBpbmZvcm1hdGlvbgorK2Fib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGF0IHByb2dyYW0sIGNvbGxlY3RlZCBieSB0aGUgc3lzdGVtIHdoaWxlCisrdGhlIHByb2dyYW0gd2FzIHJ1bm5pbmcuICBZb3UgY2FuIHNlbGVjdCB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZAorK2FuZCB0aGUgZm9ybWF0IGluIHdoaWNoIGl0IGlzIHNob3duIChzZWUgc2VjdGlvbiA8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+KSwgb3IgaGF2ZQorKzxDT0RFPnRpbWU8L0NPREU+IHNhdmUgdGhlIGluZm9ybWF0aW9uIGluIGEgZmlsZSBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgaXQgb24gdGhlCisrc2NyZWVuIChzZWUgc2VjdGlvbiA8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT4pLgorKzwvUD4KKys8UD4KKysKKytUaGUgcmVzb3VyY2VzIHRoYXQgPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydCBvbiBmYWxsIGludG8gdGhlIGdlbmVyYWwKKytjYXRlZ29yaWVzIG9mIHRpbWUsIG1lbW9yeSwgYW5kIEkvTyBhbmQgSVBDIGNhbGxzLiAgU29tZSBzeXN0ZW1zIGRvIG5vdAorK3Byb3ZpZGUgbXVjaCBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtIHJlc291cmNlIHVzZTsgPENPREU+dGltZTwvQ09ERT4KKytyZXBvcnRzIHVuYXZhaWxhYmxlIGluZm9ybWF0aW9uIGFzIHplcm8gdmFsdWVzIChzZWUgc2VjdGlvbiA8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT4pLgorKzwvUD4KKys8UD4KKysKKytUaGUgZm9ybWF0IG9mIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIGlzOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+dGltZSBbb3B0aW9uPHNtYWxsPi4uLjwvc21hbGw+XSA8VkFSPmNvbW1hbmQ8L1ZBUj4gWzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+XQorKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworKzxBIE5BTUU9IklEWDEiPjwvQT4KKys8Q09ERT50aW1lPC9DT0RFPiBydW5zIHRoZSBwcm9ncmFtIDxWQVI+Y29tbWFuZDwvVkFSPiwgd2l0aCBhbnkgZ2l2ZW4gYXJndW1lbnRzCisrPFZBUj5hcmc8L1ZBUj48c21hbGw+Li4uPC9zbWFsbD4uICBXaGVuIDxWQVI+Y29tbWFuZDwvVkFSPiBmaW5pc2hlcywgPENPREU+dGltZTwvQ09ERT4gZGlzcGxheXMKKytpbmZvcm1hdGlvbiBhYm91dCByZXNvdXJjZXMgdXNlZCBieSA8VkFSPmNvbW1hbmQ8L1ZBUj4uCisrPC9QPgorKzxQPgorKworK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiB1c2luZyA8Q09ERT50aW1lPC9DT0RFPiB0byBtZWFzdXJlIHRoZSB0aW1lIGFuZCBvdGhlcgorK3Jlc291cmNlcyB1c2VkIGJ5IHJ1bm5pbmcgdGhlIHByb2dyYW0gPENPREU+Z3JlcDwvQ09ERT46CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgdGltZSBncmVwIG5vYm9keSAvZXRjL2FsaWFzZXMKKytub2JvZHk6L2Rldi9udWxsCisrZXRjLWZpbGVzOm5vYm9keQorK21pc2MtZ3JvdXA6bm9ib2R5CisrMC4wN3VzZXIgMC41MHN5c3RlbSAwOjA2LjY5ZWxhcHNlZCA4JUNQVSAoMGF2Z3RleHQrNDg5YXZnZGF0YSAzMjRtYXhyZXNpZGVudClrCisrNDZpbnB1dHMrN291dHB1dHMgKDQzbWFqb3IrMjUxbWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytNYWlsIHN1Z2dlc3Rpb25zIGFuZCBidWcgcmVwb3J0cyBmb3IgR05VIDxDT0RFPnRpbWU8L0NPREU+IHRvCisrPENPREU+YnVnLWdudS11dGlsc0BwcmVwLmFpLm1pdC5lZHU8L0NPREU+LiAgUGxlYXNlIGluY2x1ZGUgdGhlIHZlcnNpb24gb2YKKys8Q09ERT50aW1lPC9DT0RFPiwgd2hpY2ggeW91IGNhbiBnZXQgYnkgcnVubmluZyBgPFNBTVA+dGltZSAtLXZlcnNpb248L1NBTVA+JywgYW5kIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gYW5kIEMgY29tcGlsZXIgeW91IHVzZWQuCisrPC9QPgorKzxQPgorKworKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U2VsZWN0aW5nIHRoZSBpbmZvcm1hdGlvbiByZXBvcnRlZCBieSA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4xLjIgVGhlIEZvcm1hdCBTdHJpbmc8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5UaGUgaW5mb3JtYXRpb24gPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+V3JpdGluZyB0aGUgaW5mb3JtYXRpb24gdG8gYSBmaWxlLjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzkiPjEuNCBFeGFtcGxlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkV4YW1wbGVzIG9mIHVzaW5nIDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5MaW1pdGF0aW9ucyBvbiB0aGUgYWNjdXJhY3kgb2YgPENPREU+dGltZTwvQ09ERT4gb3V0cHV0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzExIj4xLjYgUnVubmluZyB0aGUgPENPREU+dGltZTwvQ09ERT4gQ29tbWFuZDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gdGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQuPC9URD48L1RSPgorKzwvVEFCTEU+CisrPFA+CisrCisrPEEgTkFNRT0iU2V0dGluZyBGb3JtYXQiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMiI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzI6Oi0tPgorKzxQPgorKworKzxDT0RFPnRpbWU8L0NPREU+IHVzZXMgYSA8RU0+Zm9ybWF0IHN0cmluZzwvRU0+IHRvIGRldGVybWluZSB3aGljaCBpbmZvcm1hdGlvbiB0bworK2Rpc3BsYXkgYWJvdXQgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBjb21tYW5kIGl0IHJ1bnMuICBTZWUgc2VjdGlvbiA8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPiwgZm9yIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZm9ybWF0IHN0cmluZyBjb250ZW50cy4KKys8L1A+CisrPFA+CisrCisrWW91IGNhbiBzcGVjaWZ5IGEgZm9ybWF0IHN0cmluZyB3aXRoIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBsaXN0ZWQKKytiZWxvdy4gIElmIG5vIGZvcm1hdCBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYnV0IHRoZQorKzxDT0RFPlRJTUU8L0NPREU+IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXRzIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGZvcm1hdAorK3N0cmluZy4gIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgZm9ybWF0IGJ1aWx0IGludG8gPENPREU+dGltZTwvQ09ERT4gaXMgdXNlZDoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPiVVdXNlciAlU3N5c3RlbSAlRWVsYXBzZWQgJVBDUFUgKCVYdGV4dCslRGRhdGEgJU1tYXgpaworKyVJaW5wdXRzKyVPb3V0cHV0cyAoJUZtYWpvcislUm1pbm9yKXBhZ2VmYXVsdHMgJVdzd2FwcworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK1RoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byBzZXQgdGhlIGZvcm1hdCBhcmU6CisrPC9QPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+LWYgPFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPjxEVD48Q09ERT4tLWZvcm1hdD08VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+VXNlIDxWQVI+Zm9ybWF0PC9WQVI+IGFzIHRoZSBmb3JtYXQgc3RyaW5nLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXA8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXBvcnRhYmlsaXR5PC9DT0RFPgorKzxERD5Vc2UgdGhlIGZvbGxvd2luZyBmb3JtYXQgc3RyaW5nLCBmb3IgY29uZm9ybWFuY2Ugd2l0aCBQT1NJWCBzdGFuZGFyZAorKzEwMDMuMjoKKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+cmVhbCAlZQorK3VzZXIgJVUKKytzeXMgJVMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1xPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1xdWlldDwvQ09ERT4KKys8REQ+U3VwcHJlc3Mgbm9uLXplcm8gZXJyb3IgY29kZSBmcm9tIHRoZSBleGVjdXRlZCBwcm9ncmFtLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcmJvc2U8L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDIiPjwvQT4KKytVc2UgdGhlIGJ1aWx0LWluIHZlcmJvc2UgZm9ybWF0LCB3aGljaCBkaXNwbGF5cyBlYWNoIGF2YWlsYWJsZSBwaWVjZSBvZgorK2luZm9ybWF0aW9uIG9uIHRoZSBwcm9ncmFtJ3MgcmVzb3VyY2UgdXNlIG9uIGl0cyBvd24gbGluZSwgd2l0aCBhbgorK0VuZ2xpc2ggZGVzY3JpcHRpb24gb2YgaXRzIG1lYW5pbmcuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJGb3JtYXQgU3RyaW5nIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzMiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzQiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuMiBUaGUgRm9ybWF0IFN0cmluZyA8L0gyPgorKzwhLS1kb2NpZDo6U0VDMzo6LS0+CisrPFA+CisrCisrPEEgTkFNRT0iSURYMyI+PC9BPgorKzxBIE5BTUU9IklEWDQiPjwvQT4KKytUaGUgPEVNPmZvcm1hdCBzdHJpbmc8L0VNPiBjb250cm9scyB0aGUgY29udGVudHMgb2YgdGhlIDxDT0RFPnRpbWU8L0NPREU+IG91dHB1dC4KKytJdCBjb25zaXN0cyBvZiA8RU0+cmVzb3VyY2Ugc3BlY2lmaWVyczwvRU0+IGFuZCA8RU0+ZXNjYXBlczwvRU0+LCBpbnRlcnNwZXJzZWQKKyt3aXRoIHBsYWluIHRleHQuCisrPC9QPgorKzxQPgorKworK0EgYmFja3NsYXNoIGludHJvZHVjZXMgYW4gPEVNPmVzY2FwZTwvRU0+LCB3aGljaCBpcyB0cmFuc2xhdGVkCisraW50byBhIHNpbmdsZSBwcmludGluZyBjaGFyYWN0ZXIgdXBvbiBvdXRwdXQuICBUaGUgdmFsaWQgZXNjYXBlcyBhcmUKKytsaXN0ZWQgYmVsb3cuICBBbiBpbnZhbGlkIGVzY2FwZSBpcyBvdXRwdXQgYXMgYSBxdWVzdGlvbiBtYXJrIGZvbGxvd2VkCisrYnkgYSBiYWNrc2xhc2guCisrPC9QPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+XHQ8L0NPREU+CisrPEREPmEgdGFiIGNoYXJhY3RlcgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+XG48L0NPREU+CisrPEREPmEgbmV3bGluZQorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+XFw8L0NPREU+CisrPEREPmEgbGl0ZXJhbCBiYWNrc2xhc2gKKys8L0RMPgorKzxQPgorKworKzxDT0RFPnRpbWU8L0NPREU+IGFsd2F5cyBwcmludHMgYSBuZXdsaW5lIGFmdGVyIHByaW50aW5nIHRoZSByZXNvdXJjZSB1c2UKKytpbmZvcm1hdGlvbiwgc28gbm9ybWFsbHkgZm9ybWF0IHN0cmluZ3MgZG8gbm90IGVuZCB3aXRoIGEgbmV3bGluZQorK2NoYXJhY3RlciAob3IgYDxTQU1QPlxuPC9TQU1QPicpLgorKzwvUD4KKys8UD4KKysKKytBIHJlc291cmNlIHNwZWNpZmllciBjb25zaXN0cyBvZiBhIHBlcmNlbnQgc2lnbiBmb2xsb3dlZCBieSBhbm90aGVyCisrY2hhcmFjdGVyLiAgQW4gaW52YWxpZCByZXNvdXJjZSBzcGVjaWZpZXIgaXMgb3V0cHV0IGFzIGEgcXVlc3Rpb24gbWFyaworK2ZvbGxvd2VkIGJ5IHRoZSBpbnZhbGlkIGNoYXJhY3Rlci4gIFVzZSBgPFNBTVA+JSU8L1NBTVA+JyB0byBvdXRwdXQgYSBsaXRlcmFsCisrcGVyY2VudCBzaWduLgorKzwvUD4KKys8UD4KKysKKytUaGUgcmVzb3VyY2Ugc3BlY2lmaWVycywgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhvc2UgcmVjb2duaXplZCBieSB0aGUKKys8Q09ERT50Y3NoPC9DT0RFPiBidWlsdGluIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQsIGFyZSBsaXN0ZWQgYmVsb3cuICBOb3QgYWxsCisrcmVzb3VyY2VzIGFyZSBtZWFzdXJlZCBieSBhbGwgdmVyc2lvbnMgb2YgVW5peCwgc28gc29tZSBvZiB0aGUgdmFsdWVzCisrbWlnaHQgYmUgcmVwb3J0ZWQgYXMgemVybyAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+KS4KKys8L1A+CisrPFA+CisrCisrPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFNQQUNJTkc9IjAiPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+MS4yLjEgVGltZSBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4xLjIuMiBNZW1vcnkgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+MS4yLjMgSS9PIFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzciPjEuMi40IENvbW1hbmQgSW5mbzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8L1RBQkxFPgorKzxQPgorKworKzxBIE5BTUU9IlRpbWUgUmVzb3VyY2VzIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzQiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzUiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi4xIFRpbWUgUmVzb3VyY2VzIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM0OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPkU8L0NPREU+CisrPEREPkVsYXBzZWQgcmVhbCAod2FsbCBjbG9jaykgdGltZSB1c2VkIGJ5IHRoZSBwcm9jZXNzLCBpbgorK1tob3VyczpdbWludXRlczpzZWNvbmRzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+ZTwvQ09ERT4KKys8REQ+RWxhcHNlZCByZWFsICh3YWxsIGNsb2NrKSB0aW1lIHVzZWQgYnkgdGhlIHByb2Nlc3MsIGluCisrc2Vjb25kcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlM8L0NPREU+CisrPEREPlRvdGFsIG51bWJlciBvZiBDUFUtc2Vjb25kcyB1c2VkIGJ5IHRoZSBzeXN0ZW0gb24gYmVoYWxmIG9mIHRoZSBwcm9jZXNzCisrKGluIGtlcm5lbCBtb2RlKSwgaW4gc2Vjb25kcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlU8L0NPREU+CisrPEREPlRvdGFsIG51bWJlciBvZiBDUFUtc2Vjb25kcyB0aGF0IHRoZSBwcm9jZXNzIHVzZWQgZGlyZWN0bHkgKGluIHVzZXIKKyttb2RlKSwgaW4gc2Vjb25kcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlA8L0NPREU+CisrPEREPlBlcmNlbnRhZ2Ugb2YgdGhlIENQVSB0aGF0IHRoaXMgam9iIGdvdC4gIFRoaXMgaXMganVzdCB1c2VyICsgc3lzdGVtCisrdGltZXMgZGl2aWVkIGJ5IHRoZSB0b3RhbCBydW5uaW5nIHRpbWUuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJNZW1vcnkgUmVzb3VyY2VzIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzUiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzQiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzYiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi4yIE1lbW9yeSBSZXNvdXJjZXMgPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzU6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+TTwvQ09ERT4KKys8REQ+TWF4aW11bSByZXNpZGVudCBzZXQgc2l6ZSBvZiB0aGUgcHJvY2VzcyBkdXJpbmcgaXRzIGxpZmV0aW1lLCBpbgorK0tpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnQ8L0NPREU+CisrPEREPkF2ZXJhZ2UgcmVzaWRlbnQgc2V0IHNpemUgb2YgdGhlIHByb2Nlc3MsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPks8L0NPREU+CisrPEREPkF2ZXJhZ2UgdG90YWwgKGRhdGErc3RhY2srdGV4dCkgbWVtb3J5IHVzZSBvZiB0aGUgcHJvY2VzcywgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+RDwvQ09ERT4KKys8REQ+QXZlcmFnZSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgdW5zaGFyZWQgZGF0YSBhcmVhLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5wPC9DT0RFPgorKzxERD5BdmVyYWdlIHNpemUgb2YgdGhlIHByb2Nlc3MncyB1bnNoYXJlZCBzdGFjaywgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+WDwvQ09ERT4KKys8REQ+QXZlcmFnZSBzaXplIG9mIHRoZSBwcm9jZXNzJ3Mgc2hhcmVkIHRleHQsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlo8L0NPREU+CisrPEREPlN5c3RlbSdzIHBhZ2Ugc2l6ZSwgaW4gYnl0ZXMuICBUaGlzIGlzIGEgcGVyLXN5c3RlbSBjb25zdGFudCwgYnV0CisrdmFyaWVzIGJldHdlZW4gc3lzdGVtcy4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IkkvTyBSZXNvdXJjZXMiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDNiI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMz4gMS4yLjMgSS9PIFJlc291cmNlcyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNjo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5GPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgbWFqb3IsIG9yIEkvTy1yZXF1aXJpbmcsIHBhZ2UgZmF1bHRzIHRoYXQgb2NjdXJyZWQgd2hpbGUgdGhlCisrcHJvY2VzcyB3YXMgcnVubmluZy4gIFRoZXNlIGFyZSBmYXVsdHMgd2hlcmUgdGhlIHBhZ2UgaGFzIGFjdHVhbGx5CisrbWlncmF0ZWQgb3V0IG9mIHByaW1hcnkgbWVtb3J5LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+UjwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIG1pbm9yLCBvciByZWNvdmVyYWJsZSwgcGFnZSBmYXVsdHMuICBUaGVzZSBhcmUgcGFnZXMgdGhhdCBhcmUKKytub3QgdmFsaWQgKHNvIHRoZXkgZmF1bHQpIGJ1dCB3aGljaCBoYXZlIG5vdCB5ZXQgYmVlbiBjbGFpbWVkIGJ5IG90aGVyCisrdmlydHVhbCBwYWdlcy4gIFRodXMgdGhlIGRhdGEgaW4gdGhlIHBhZ2UgaXMgc3RpbGwgdmFsaWQgYnV0IHRoZSBzeXN0ZW0KKyt0YWJsZXMgbXVzdCBiZSB1cGRhdGVkLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+VzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9jZXNzIHdhcyBzd2FwcGVkIG91dCBvZiBtYWluIG1lbW9yeS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPmM8L0NPREU+CisrPEREPk51bWJlciBvZiB0aW1lcyB0aGUgcHJvY2VzcyB3YXMgY29udGV4dC1zd2l0Y2hlZCBpbnZvbHVudGFyaWx5IChiZWNhdXNlCisrdGhlIHRpbWUgc2xpY2UgZXhwaXJlZCkuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT53PC9DT0RFPgorKzxERD5OdW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgcHJvZ3JhbSB3YXMgY29udGV4dC1zd2l0Y2hlZCB2b2x1bnRhcmlseSwgZm9yCisraW5zdGFuY2Ugd2hpbGUgd2FpdGluZyBmb3IgYW4gSS9PIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPkk8L0NPREU+CisrPEREPk51bWJlciBvZiBmaWxlIHN5c3RlbSBpbnB1dHMgYnkgdGhlIHByb2Nlc3MuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5PPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgZmlsZSBzeXN0ZW0gb3V0cHV0cyBieSB0aGUgcHJvY2Vzcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPnI8L0NPREU+CisrPEREPk51bWJlciBvZiBzb2NrZXQgbWVzc2FnZXMgcmVjZWl2ZWQgYnkgdGhlIHByb2Nlc3MuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5zPC9DT0RFPgorKzxERD5OdW1iZXIgb2Ygc29ja2V0IG1lc3NhZ2VzIHNlbnQgYnkgdGhlIHByb2Nlc3MuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5rPC9DT0RFPgorKzxERD5OdW1iZXIgb2Ygc2lnbmFscyBkZWxpdmVyZWQgdG8gdGhlIHByb2Nlc3MuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJDb21tYW5kIEluZm8iPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDNyI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMz4gMS4yLjQgQ29tbWFuZCBJbmZvIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM3OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPkM8L0NPREU+CisrPEREPk5hbWUgYW5kIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgb2YgdGhlIGNvbW1hbmQgYmVpbmcgdGltZWQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT54PC9DT0RFPgorKzxERD5FeGl0IHN0YXR1cyBvZiB0aGUgY29tbWFuZC4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IlJlZGlyZWN0aW5nIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzgiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzciPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzkiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuMyBSZWRpcmVjdGluZyBPdXRwdXQgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzg6Oi0tPgorKzxQPgorKworK0J5IGRlZmF1bHQsIDxDT0RFPnRpbWU8L0NPREU+IHdyaXRlcyB0aGUgcmVzb3VyY2UgdXNlIHN0YXRpc3RpY3MgdG8gdGhlCisrc3RhbmRhcmQgZXJyb3Igc3RyZWFtLiAgVGhlIG9wdGlvbnMgYmVsb3cgbWFrZSBpdCB3cml0ZSB0aGUgc3RhdGlzdGljcworK3RvIGEgZmlsZSBpbnN0ZWFkLiAgRG9pbmcgdGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBwcm9ncmFtIHlvdSdyZQorK3J1bm5pbmcgd3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvciB5b3UncmUgcnVubmluZyA8Q09ERT50aW1lPC9DT0RFPgorK25vbmludGVyYWN0aXZlbHkgb3IgaW4gdGhlIGJhY2tncm91bmQuCisrPC9QPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+LW8gPFZBUj5maWxlPC9WQVI+PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1vdXRwdXQ9PFZBUj5maWxlPC9WQVI+PC9DT0RFPgorKzxERD5Xcml0ZSB0aGUgcmVzb3VyY2UgdXNlIHN0YXRpc3RpY3MgdG8gPFZBUj5maWxlPC9WQVI+LiAgQnkgZGVmYXVsdCwgdGhpcworKzxFTT5vdmVyd3JpdGVzPC9FTT4gdGhlIGZpbGUsIGRlc3Ryb3lpbmcgdGhlIGZpbGUncyBwcmV2aW91cyBjb250ZW50cy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1hPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1hcHBlbmQ8L0NPREU+CisrPEREPjxFTT5BcHBlbmQ8L0VNPiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrb2Ygb3ZlcndyaXRpbmcgaXQuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCB3aXRoIHRoZSBgPFNBTVA+LW88L1NBTVA+JyBvcgorK2A8U0FNUD4tLW91dHB1dDwvU0FNUD4nIG9wdGlvbi4KKys8L0RMPgorKzxQPgorKworKzxBIE5BTUU9IkV4YW1wbGVzIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzkiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjQgRXhhbXBsZXMgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzk6Oi0tPgorKzxQPgorKworK1J1biB0aGUgY29tbWFuZCBgPFNBTVA+d2MgL2V0Yy9ob3N0czwvU0FNUD4nIGFuZCBzaG93IHRoZSBkZWZhdWx0IGluZm9ybWF0aW9uOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgd2MgL2V0Yy9ob3N0cworKyAgICAgIDM1ICAgICAxMTEgICAgMTEzNCAvZXRjL2hvc3RzCisrMC4wMHVzZXIgMC4wMXN5c3RlbSAwOjAwLjA0ZWxhcHNlZCAyNSVDUFUgKDBhdmd0ZXh0KzBhdmdkYXRhIDBtYXhyZXNpZGVudClrCisrMWlucHV0cysxb3V0cHV0cyAoMG1ham9yKzBtaW5vcilwYWdlZmF1bHRzIDBzd2FwcworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK1J1biB0aGUgY29tbWFuZCBgPFNBTVA+bHMgLUZzPC9TQU1QPicgYW5kIHNob3cganVzdCB0aGUgdXNlciwgc3lzdGVtLCBhbmQKKyt3YWxsLWNsb2NrIHRpbWU6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgdGltZSAtZiAmcXVvdDtcdCVFIHJlYWwsXHQlVSB1c2VyLFx0JVMgc3lzJnF1b3Q7IGxzIC1GcworK3RvdGFsIDE2CisrMSBhY2NvdW50LyAgICAgIDEgZGIvICAgICAgICAgICAxIG1haWwvICAgICAgICAgMSBydW4vCisrMSBiYWNrdXBzLyAgICAgIDEgZW1hY3MvICAgICAgICAxIG1zZ3MvICAgICAgICAgMSByd2hvLworKzEgY3Jhc2gvICAgICAgICAxIGdhbWVzLyAgICAgICAgMSBwcmVzZXJ2ZS8gICAgIDEgc3Bvb2wvCisrMSBjcm9uLyAgICAgICAgIDEgbG9nLyAgICAgICAgICAxIHF1b3Rhcy8gICAgICAgMSB0bXAvCisrICAgICAgICAwOjAwLjAzIHJlYWwsICAgMC4wMCB1c2VyLCAgICAgIDAuMDEgc3lzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrRWRpdCB0aGUgZmlsZSBgPFRUPi5iYXNocmM8L1RUPicgYW5kIGhhdmUgPENPREU+dGltZTwvQ09ERT4gYXBwZW5kIHRoZSBlbGFwc2VkIHRpbWUKKythbmQgbnVtYmVyIG9mIHNpZ25hbHMgdG8gdGhlIGZpbGUgYDxUVD5sb2c8L1RUPicsIHJlYWRpbmcgdGhlIGZvcm1hdCBzdHJpbmcKKytmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8Q09ERT5USU1FPC9DT0RFPjoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCBleHBvcnQgVElNRT0mcXVvdDtcdCVFLFx0JWsmcXVvdDsgIyBJZiB1c2luZyBiYXNoIG9yIGtzaAorK2VnJCBzZXRlbnYgVElNRSAmcXVvdDtcdCVFLFx0JWsmcXVvdDsgIyBJZiB1c2luZyBjc2ggb3IgdGNzaAorK2VnJCB0aW1lIC1hIC1vIGxvZyBlbWFjcyAuYmFzaHJjCisrZWckIGNhdCBsb2cKKysgICAgICAgIDA6MTYuNTUsICAgICAgICA3MjYKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPnNsZWVwIDQ8L1NBTVA+JyBhbmQgc2hvdyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGl0CisrdmVyYm9zZWx5OgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgLXYgc2xlZXAgNAorKyAgICAgICAgQ29tbWFuZCBiZWluZyB0aW1lZDogJnF1b3Q7c2xlZXAgNCZxdW90OworKyAgICAgICAgVXNlciB0aW1lIChzZWNvbmRzKTogMC4wMAorKyAgICAgICAgU3lzdGVtIHRpbWUgKHNlY29uZHMpOiAwLjA1CisrICAgICAgICBQZXJjZW50IG9mIENQVSB0aGlzIGpvYiBnb3Q6IDElCisrICAgICAgICBFbGFwc2VkICh3YWxsIGNsb2NrKSB0aW1lIChoOm1tOnNzIG9yIG06c3MpOiAwOjA0LjI2CisrICAgICAgICBBdmVyYWdlIHNoYXJlZCB0ZXh0IHNpemUgKGtieXRlcyk6IDM2CisrICAgICAgICBBdmVyYWdlIHVuc2hhcmVkIGRhdGEgc2l6ZSAoa2J5dGVzKTogMjQKKysgICAgICAgIEF2ZXJhZ2Ugc3RhY2sgc2l6ZSAoa2J5dGVzKTogMAorKyAgICAgICAgQXZlcmFnZSB0b3RhbCBzaXplIChrYnl0ZXMpOiA2MAorKyAgICAgICAgTWF4aW11bSByZXNpZGVudCBzZXQgc2l6ZSAoa2J5dGVzKTogMzIKKysgICAgICAgIEF2ZXJhZ2UgcmVzaWRlbnQgc2V0IHNpemUgKGtieXRlcyk6IDI0CisrICAgICAgICBNYWpvciAocmVxdWlyaW5nIEkvTykgcGFnZSBmYXVsdHM6IDMKKysgICAgICAgIE1pbm9yIChyZWNsYWltaW5nIGEgZnJhbWUpIHBhZ2UgZmF1bHRzOiAwCisrICAgICAgICBWb2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlczogMTEKKysgICAgICAgIEludm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXM6IDAKKysgICAgICAgIFN3YXBzOiAwCisrICAgICAgICBGaWxlIHN5c3RlbSBpbnB1dHM6IDMKKysgICAgICAgIEZpbGUgc3lzdGVtIG91dHB1dHM6IDEKKysgICAgICAgIFNvY2tldCBtZXNzYWdlcyBzZW50OiAwCisrICAgICAgICBTb2NrZXQgbWVzc2FnZXMgcmVjZWl2ZWQ6IDAKKysgICAgICAgIFNpZ25hbHMgZGVsaXZlcmVkOiAxCisrICAgICAgICBQYWdlIHNpemUgKGJ5dGVzKTogNDA5NgorKyAgICAgICAgRXhpdCBzdGF0dXM6IDAKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJBY2N1cmFjeSI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMxMCI+PC9BPgorKzxUQUJMRSBDRUxMUEFERElORz0xIENFTExTUEFDSU5HPTEgQk9SREVSPTA+CisrPFRSPjxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuNSBBY2N1cmFjeSA8L0gyPgorKzwhLS1kb2NpZDo6U0VDMTA6Oi0tPgorKzxQPgorKworK1RoZSBlbGFwc2VkIHRpbWUgaXMgbm90IGNvbGxlY3RlZCBhdG9taWNhbGx5IHdpdGggdGhlIGV4ZWN1dGlvbiBvZiB0aGUKKytwcm9ncmFtOyBhcyBhIHJlc3VsdCwgaW4gYml6YXJyZSBjaXJjdW1zdGFuY2VzIChpZiB0aGUgPENPREU+dGltZTwvQ09ERT4KKytjb21tYW5kIGdldHMgc3RvcHBlZCBvciBzd2FwcGVkIG91dCBpbiBiZXR3ZWVuIHdoZW4gdGhlIHByb2dyYW0gYmVpbmcKKyt0aW1lZCBleGl0cyBhbmQgd2hlbiA8Q09ERT50aW1lPC9DT0RFPiBjYWxjdWxhdGVzIGhvdyBsb25nIGl0IHRvb2sgdG8gcnVuKSwgaXQKKytjb3VsZCBiZSBtdWNoIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgZXhlY3V0aW9uIHRpbWUuCisrPC9QPgorKzxQPgorKworK1doZW4gdGhlIHJ1bm5pbmcgdGltZSBvZiBhIGNvbW1hbmQgaXMgdmVyeSBuZWFybHkgemVybywgc29tZSB2YWx1ZXMKKysoZS5nLiwgdGhlIHBlcmNlbnRhZ2Ugb2YgQ1BVIHVzZWQpIG1heSBiZSByZXBvcnRlZCBhcyBlaXRoZXIgemVybyAod2hpY2gKKytpcyB3cm9uZykgb3IgYSBxdWVzdGlvbiBtYXJrLgorKzwvUD4KKys8UD4KKysKKytNb3N0IGluZm9ybWF0aW9uIHNob3duIGJ5IDxDT0RFPnRpbWU8L0NPREU+IGlzIGRlcml2ZWQgZnJvbSB0aGUgPENPREU+d2FpdDM8L0NPREU+Cisrc3lzdGVtIGNhbGwuICBUaGUgbnVtYmVycyBhcmUgb25seSBhcyBnb29kIGFzIHRob3NlIHJldHVybmVkIGJ5CisrPENPREU+d2FpdDM8L0NPREU+LiAgTWFueSBzeXN0ZW1zIGRvIG5vdCBtZWFzdXJlIGFsbCBvZiB0aGUgcmVzb3VyY2VzIHRoYXQKKys8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0IG9uOyB0aG9zZSByZXNvdXJjZXMgYXJlIHJlcG9ydGVkIGFzIHplcm8uICBUaGUKKytzeXN0ZW1zIHRoYXQgbWVhc3VyZSBtb3N0IG9yIGFsbCBvZiB0aGUgcmVzb3VyY2VzIGFyZSBiYXNlZCBvbiA0LjIgb3IKKys0LjNCU0QuICBMYXRlciBCU0QgcmVsZWFzZXMgdXNlIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHRoYXQKKyttZWFzdXJlcyBmZXdlciByZXNvdXJjZXMuCisrPC9QPgorKzxQPgorKworK09uIHN5c3RlbXMgdGhhdCBkbyBub3QgaGF2ZSBhIDxDT0RFPndhaXQzPC9DT0RFPiBjYWxsIHRoYXQgcmV0dXJucyBzdGF0dXMKKytpbmZvcm1hdGlvbiwgdGhlIDxDT0RFPnRpbWVzPC9DT0RFPiBzeXN0ZW0gY2FsbCBpcyB1c2VkIGluc3RlYWQuICBJdCBwcm92aWRlcworK211Y2ggbGVzcyBpbmZvcm1hdGlvbiB0aGFuIDxDT0RFPndhaXQzPC9DT0RFPiwgc28gb24gdGhvc2Ugc3lzdGVtcyA8Q09ERT50aW1lPC9DT0RFPgorK3JlcG9ydHMgbW9zdCBvZiB0aGUgcmVzb3VyY2VzIGFzIHplcm8uCisrPC9QPgorKzxQPgorKworK1RoZSBgPFNBTVA+JUk8L1NBTVA+JyBhbmQgYDxTQU1QPiVPPC9TQU1QPicgdmFsdWVzIGFyZSBhbGxlZ2VkbHkgb25seSAmcXVvdDtyZWFsJnF1b3Q7IGlucHV0CisrYW5kIG91dHB1dCBhbmQgZG8gbm90IGluY2x1ZGUgdGhvc2Ugc3VwcGxpZWQgYnkgY2FjaGluZyBkZXZpY2VzLiAgVGhlCisrbWVhbmluZyBvZiAmcXVvdDtyZWFsJnF1b3Q7IEkvTyByZXBvcnRlZCBieSBgPFNBTVA+JUk8L1NBTVA+JyBhbmQgYDxTQU1QPiVPPC9TQU1QPicgbWF5IGJlCisrbXVkZGxlZCBmb3Igd29ya3N0YXRpb25zLCBlc3BlY2lhbGx5IGRpc2tsZXNzIG9uZXMuCisrPC9QPgorKzxQPgorKworKzxBIE5BTUU9Ikludm9raW5nIHRpbWUiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMTEiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS42IFJ1bm5pbmcgdGhlIDxDT0RFPnRpbWU8L0NPREU+IENvbW1hbmQgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzExOjotLT4KKys8UD4KKysKKytUaGUgZm9ybWF0IG9mIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIGlzOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+dGltZSBbb3B0aW9uPHNtYWxsPi4uLjwvc21hbGw+XSA8VkFSPmNvbW1hbmQ8L1ZBUj4gWzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+XQorKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworKzxBIE5BTUU9IklEWDUiPjwvQT4KKys8Q09ERT50aW1lPC9DT0RFPiBydW5zIHRoZSBwcm9ncmFtIDxWQVI+Y29tbWFuZDwvVkFSPiwgd2l0aCBhbnkgZ2l2ZW4gYXJndW1lbnRzCisrPFZBUj5hcmc8L1ZBUj48c21hbGw+Li4uPC9zbWFsbD4uICBXaGVuIDxWQVI+Y29tbWFuZDwvVkFSPiBmaW5pc2hlcywgPENPREU+dGltZTwvQ09ERT4gZGlzcGxheXMKKytpbmZvcm1hdGlvbiBhYm91dCByZXNvdXJjZXMgdXNlZCBieSA8VkFSPmNvbW1hbmQ8L1ZBUj4gKG9uIHRoZSBzdGFuZGFyZCBlcnJvcgorK291dHB1dCwgYnkgZGVmYXVsdCkuICBJZiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZXhpdHMgd2l0aCBub24temVybyBzdGF0dXMgb3IgaXMKKyt0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsLCA8Q09ERT50aW1lPC9DT0RFPiBkaXNwbGF5cyBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgdGhlCisrZXhpdCBzdGF0dXMgb3Igc2lnbmFsIG51bWJlci4KKys8L1A+CisrPFA+CisrCisrT3B0aW9ucyB0byA8Q09ERT50aW1lPC9DT0RFPiBtdXN0IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lIGJlZm9yZQorKzxWQVI+Y29tbWFuZDwvVkFSPi4gIEFueXRoaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYWZ0ZXIgPFZBUj5jb21tYW5kPC9WQVI+IGlzCisrcGFzc2VkIGFzIGFyZ3VtZW50cyB0byA8VkFSPmNvbW1hbmQ8L1ZBUj4uCisrPC9QPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+LW8gPFZBUj5maWxlPC9WQVI+PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1vdXRwdXQ9PFZBUj5maWxlPC9WQVI+PC9DT0RFPgorKzxERD5Xcml0ZSB0aGUgcmVzb3VyY2UgdXNlIHN0YXRpc3RpY3MgdG8gPFZBUj5maWxlPC9WQVI+LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LWE8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLWFwcGVuZDwvQ09ERT4KKys8REQ+PEVNPkFwcGVuZDwvRU0+IHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKytvZiBvdmVyd3JpdGluZyBpdC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1mIDxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1mb3JtYXQ9PFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPlVzZSA8VkFSPmZvcm1hdDwvVkFSPiBhcyB0aGUgZm9ybWF0IHN0cmluZy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi0taGVscDwvQ09ERT4KKys8REQ+UHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byA8Q09ERT50aW1lPC9DT0RFPiBhbmQgZXhpdC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1wPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1wb3J0YWJpbGl0eTwvQ09ERT4KKys8REQ+VXNlIHRoZSBQT1NJWCBmb3JtYXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tdjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tdmVyYm9zZTwvQ09ERT4KKys8REQ+PEEgTkFNRT0iSURYNiI+PC9BPgorK1VzZSB0aGUgYnVpbHQtaW4gdmVyYm9zZSBmb3JtYXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tVjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tdmVyc2lvbjwvQ09ERT4KKys8REQ+PEEgTkFNRT0iSURYNyI+PC9BPgorK1ByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiA8Q09ERT50aW1lPC9DT0RFPiBhbmQgZXhpdC4KKys8L0RMPgorKzxQPgorKworKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUNfQ29udGVudHMiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgxPlRhYmxlIG9mIENvbnRlbnRzPC9IMT4KKys8QkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0MxIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+MS4gTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlPC9BPgorKzxCUj4KKys8QkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0MyIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzMiIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4xLjIgVGhlIEZvcm1hdCBTdHJpbmc8L0E+CisrPEJSPgorKzxCTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzQiIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4xLjIuMSBUaW1lIFJlc291cmNlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DNSIgSFJFRj0idGltZS5odG1sI1NFQzUiPjEuMi4yIE1lbW9yeSBSZXNvdXJjZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzYiIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4xLjIuMyBJL08gUmVzb3VyY2VzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M3IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNyI+MS4yLjQgQ29tbWFuZCBJbmZvPC9BPgorKzxCUj4KKys8L0JMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DOCIgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzkiIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4xLjQgRXhhbXBsZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzEwIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DMTEiIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+MS42IFJ1bm5pbmcgdGhlIDxDT0RFPnRpbWU8L0NPREU+IENvbW1hbmQ8L0E+CisrPEJSPgorKzwvQkxPQ0tRVU9URT4KKys8L0JMT0NLUVVPVEU+CisrPEhSIFNJWkU9MT4KKys8QSBOQU1FPSJTRUNfT1ZFUlZJRVciPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgxPlNob3J0IFRhYmxlIG9mIENvbnRlbnRzPC9IMT4KKys8QkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0MxIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+MS4gTWVhc3VyaW5nIFByb2dyYW0gUmVzb3VyY2UgVXNlPC9BPgorKzxCUj4KKysKKys8L0JMT0NLUVVPVEU+CisrPEhSIFNJWkU9MT4KKys8QSBOQU1FPSJTRUNfQWJvdXQiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgxPkFib3V0IHRoaXMgZG9jdW1lbnQ8L0gxPgorK1RoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZAorK2J5IAorK3VzaW5nIDxBIEhSRUY9Imh0dHA6Ly90ZXhpMmh0bWwuY3ZzaG9tZS5vcmciPjxJPnRleGkyaHRtbDwvST48L0E+CisrPFA+PC9QPgorK1RoZSBidXR0b25zIGluIHRoZSBuYXZpZ2F0aW9uIHBhbmVscyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKys8UD48L1A+CisrPHRhYmxlIGJvcmRlciA9ICIxIj4KKys8VFI+CisrPFRIPiBCdXR0b24gPC9USD4KKys8VEg+IE5hbWUgPC9USD4KKys8VEg+IEdvIHRvIDwvVEg+CisrPFRIPiBGcm9tIDEuMi4zIGdvIHRvPC9USD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmx0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0JhY2sKKys8L1REPgorKzxURD4KKytwcmV2aW91cyBzZWN0aW9uIGluIHJlYWRpbmcgb3JkZXIKKys8L1REPgorKzxURD4KKysxLjIuMgorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZndDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytGb3J3YXJkCisrPC9URD4KKys8VEQ+CisrbmV4dCBzZWN0aW9uIGluIHJlYWRpbmcgb3JkZXIKKys8L1REPgorKzxURD4KKysxLjIuNAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZsdDsmbHQ7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrRmFzdEJhY2sKKys8L1REPgorKzxURD4KKytiZWdpbm5pbmcgb2YgdGhpcyBjaGFwdGVyIG9yIHByZXZpb3VzIGNoYXB0ZXIKKys8L1REPgorKzxURD4KKysxCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgVXAgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytVcAorKzwvVEQ+CisrPFREPgorK3VwIHNlY3Rpb24KKys8L1REPgorKzxURD4KKysxLjIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmZ3Q7Jmd0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Zhc3RGb3J3YXJkCisrPC9URD4KKys8VEQ+CisrbmV4dCBjaGFwdGVyCisrPC9URD4KKys8VEQ+CisrMgorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbVG9wXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytUb3AKKys8L1REPgorKzxURD4KKytjb3ZlciAodG9wKSBvZiBkb2N1bWVudAorKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFtDb250ZW50c10gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrQ29udGVudHMKKys8L1REPgorKzxURD4KKyt0YWJsZSBvZiBjb250ZW50cworKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFtJbmRleF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrSW5kZXgKKys8L1REPgorKzxURD4KKytjb25jZXB0IGluZGV4CisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyA/IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrQWJvdXQKKys8L1REPgorKzxURD4KKyt0aGlzIHBhZ2UKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8L1RBQkxFPgorKyAgICA8UD4KKysgICAgICB3aGVyZSB0aGUgPFNUUk9ORz4gRXhhbXBsZSA8L1NUUk9ORz4gYXNzdW1lcyB0aGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uCisrICAgICAgaXMgYXQgPFNUUk9ORz4gU3Vic3Vic2VjdGlvbiBPbmUtVHdvLVRocmVlIDwvU1RST05HPiBvZiBhIGRvY3VtZW50IG9mCisrICAgICAgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6PC9QPgorKyAgICA8VUw+CisrICAgICAgPExJPiAxLiBTZWN0aW9uIE9uZQorKyAgICAgICAgPFVMPgorKyAgICAgICAgICA8TEk+MS4xIFN1YnNlY3Rpb24gT25lLU9uZQorKyAgICAgICAgICAgIDxVTD4KKysgICAgICAgICAgICAgIDxMST4uLi48L0xJPgorKyAgICAgICAgICAgIDwvVUw+CisrICAgICAgICAgIDxMST4xLjIgU3Vic2VjdGlvbiBPbmUtVHdvCisrICAgICAgICAgICAgPFVMPgorKyAgICAgICAgICAgICAgPExJPjEuMi4xIFN1YnN1YnNlY3Rpb24gT25lLVR3by1PbmU8L0xJPgorKyAgICAgICAgICAgICAgPExJPjEuMi4yIFN1YnN1YnNlY3Rpb24gT25lLVR3by1Ud288L0xJPgorKyAgICAgICAgICAgICAgPExJPjEuMi4zIFN1YnN1YnNlY3Rpb24gT25lLVR3by1UaHJlZSAmbmJzcDsgJm5ic3A7CisrICAgICAgICAgICAgICAgIDxTVFJPTkc+Jmx0Oz09IEN1cnJlbnQgUG9zaXRpb24gPC9TVFJPTkc+PC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuNCBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tRm91cjwvTEk+CisrICAgICAgICAgICAgPC9VTD4KKysgICAgICAgICAgPC9MST4KKysgICAgICAgICAgPExJPjEuMyBTdWJzZWN0aW9uIE9uZS1UaHJlZQorKyAgICAgICAgICAgIDxVTD4KKysgICAgICAgICAgICAgIDxMST4uLi48L0xJPgorKyAgICAgICAgICAgIDwvVUw+CisrICAgICAgICAgIDwvTEk+CisrICAgICAgICAgIDxMST4xLjQgU3Vic2VjdGlvbiBPbmUtRm91cjwvTEk+CisrICAgICAgICA8L1VMPgorKyAgICAgIDwvTEk+CisrICAgIDwvVUw+CisrCisrPEhSIFNJWkU9MT4KKys8QlI+CisrPEZPTlQgU0laRT0iLTEiPgorK1RoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZAorK2J5IDxJPnJvb3Q8L0k+IG9uIDxJPlNlcHRlbWJlciwgMSAyMDAzPC9JPgorK3VzaW5nIDxBIEhSRUY9Imh0dHA6Ly90ZXhpMmh0bWwuY3ZzaG9tZS5vcmciPjxJPnRleGkyaHRtbDwvST48L0E+CisrPC9GT05UPgorKworKzwvQk9EWT4KKys8L0hUTUw+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODYyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLmluYwpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gIlRvb2wgdGhhdCBtZWFzdXJlcyBDUFUgcmVzb3VyY2VzIgorREVTQ1JJUFRJT04gPSAidGltZSBtZWFzdXJlcyBtYW55IG9mIHRoZSBDUFUgcmVzb3VyY2VzLCBzdWNoIGFzIHRpbWUgYW5kIFwKK21lbW9yeSwgdGhhdCBvdGhlciBwcm9ncmFtcyB1c2UuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RpbWUvIgorU0VDVElPTiA9ICJ1dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIiCisKK2luaGVyaXQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInRpbWUiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lXzEuNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWVfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzUzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lXzEuNy5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIHRpbWUuaW5jCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vdGltZS90aW1lLSR7UFZ9LnRhci5neiBcCisJICAgZmlsZTovL2RlYmlhbi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImUzOGQyYjhiMzRiMWNhMjU5Y2Y3YjA1M2NhYWMzMmIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImUzN2VhNzlhMjUzYmY4NWE4NWFkYTJmN2M2MzJjMTRlNDgxYTVmZDI2MmEzNjJmNmY0ZmQ1OGU2ODYwMTQ5NmQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4NjVhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90emNvZGUvdHpjb2RlLW5hdGl2ZV8yMDE1Zi5iYgpAQCAtMCwwICsxLDI1IEBACisjIG5vdGUgdGhhdCB3ZSBhbGxvdyBmb3IgdXMgdG8gdXNlIGRhdGEgbGF0ZXIgdGhhbiBvdXIgY29kZSB2ZXJzaW9uCisjCitERVNDUklQVElPTiA9ICJ0emNvZGUsIHRpbWV6b25lIHpvbmVpbmZvIHV0aWxzIC0tIHppYywgemR1bXAsIHR6c2VsZWN0IgorTElDRU5TRSA9ICJQRCAmIEJTRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9SRUFETUU7bWQ1PWQwZmY5M2E3M2RkNWJjM2M2ZTcyNGJiNDM0Mzc2MGY2IgorCitTUkNfVVJJID0iIGZ0cDovL2Z0cC5pYW5hLm9yZy90ei9yZWxlYXNlcy90emNvZGUke1BWfS50YXIuZ3o7bmFtZT10emNvZGUgXAorICAgICAgICAgICBmdHA6Ly9mdHAuaWFuYS5vcmcvdHovcmVsZWFzZXMvdHpkYXRhMjAxNWYudGFyLmd6O25hbWU9dHpkYXRhIgorCitTUkNfVVJJW3R6Y29kZS5tZDVzdW1dID0gIjE5NTc4ZDQzMmJhOGI5MmY3MzQwNmExN2E5YmMyNjhkIgorU1JDX1VSSVt0emNvZGUuc2hhMjU2c3VtXSA9ICIwYzk1ZTBhNDJiYjYxMTQxZjc5MGY0ZjVmMjA0Yjk1NGQ3NjU0Yzg5NGFhNTRhNTk0YTIxNWQ2ZjM4ZGU4NGFlIgorU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICJlM2I4MjczMmQyMGU5NzNlNDhhZjFjNmYxM2RmOWExZCIKK1NSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiOTU5ZjgxYjU0MWUwNDJlY2IxM2M1MDA5N2QyNjRhZTkyZmYwM2E1Nzk3OWM0NzhkYmNmMjRkNWRhMjQyNTMxZCIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDc1NSB6aWMgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemR1bXAgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgdHpzZWxlY3QgJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTVmLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6ZGF0YS90emRhdGFfMjAxNWYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkYTQwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTVmLmJiCkBAIC0wLDAgKzEsMjA3IEBACitERVNDUklQVElPTiA9ICJUaW1lem9uZSBkYXRhIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJQRCAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2FzaWE7YmVnaW5saW5lPTI7ZW5kbGluZT0zO21kNT05OTZhOTgxMTc0N2FhNDhkYjkxZWQyMzllNWIzNTVhMSIKK0RFUEVORFMgPSAidHpjb2RlLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaWFuYS5vcmcvdHovcmVsZWFzZXMvdHpkYXRhJHtQVn0udGFyLmd6O25hbWU9dHpkYXRhIgorCitTUkNfVVJJW3R6ZGF0YS5tZDVzdW1dID0gImUzYjgyNzMyZDIwZTk3M2U0OGFmMWM2ZjEzZGY5YTFkIgorU1JDX1VSSVt0emRhdGEuc2hhMjU2c3VtXSA9ICI5NTlmODFiNTQxZTA0MmVjYjEzYzUwMDk3ZDI2NGFlOTJmZjAzYTU3OTc5YzQ3OGRiY2YyNGQ1ZGEyNDI1MzFkIgorCitpbmhlcml0IGFsbGFyY2gKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ0aW1lem9uZXMgdGltZXpvbmUtYWZyaWNhIHRpbWV6b25lLWFtZXJpY2EgdGltZXpvbmUtYW50YXJjdGljYSBcCisgICAgICAgICAgICAgdGltZXpvbmUtYXJjdGljIHRpbWV6b25lLWFzaWEgdGltZXpvbmUtYXRsYW50aWMgXAorICAgICAgICAgICAgIHRpbWV6b25lLWF1c3RyYWxpYSB0aW1lem9uZS1ldXJvcGUgdGltZXpvbmUtaW5kaWFuIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1pc28zMTY2LnRhYiB0aW1lem9uZS1wYWNpZmljIHRpbWV6b25lLXpvbmUudGFiIgorCitTID0gIiR7V09SS0RJUn0iCisKK0RFRkFVTFRfVElNRVpPTkUgPz0gIlVuaXZlcnNhbCIKKworVFpPTkVTPSAiYWZyaWNhIGFudGFyY3RpY2EgYXNpYSBhdXN0cmFsYXNpYSBldXJvcGUgbm9ydGhhbWVyaWNhIHNvdXRoYW1lcmljYSAgXAorICAgICAgICAgZmFjdG9yeSBldGNldGVyYSBiYWNrd2FyZCBzeXN0ZW12IFwKKyAgICAgICAgIgorIyBwYWNpZmljbmV3IAorCitkb19jb21waWxlICgpIHsKKyAgICAgICAgZm9yIHpvbmUgaW4gJHtUWk9ORVN9OyBkbyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvIC1MIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXggLUwgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mby9yaWdodCAtTCAke1N9L2xlYXBzZWNvbmRzIFwKKyAgICAgICAgICAgICAgICAteSAke1N9L3llYXJpc3R5cGUuc2ggJHtTfS8ke3pvbmV9IDsgXAorICAgICAgICBkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0vJGV4ZWNfcHJlZml4ICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisgICAgICAgIGNwIC1wUFIgJHtTfS8kZXhlY19wcmVmaXggJHtEfS8KKyAgICAgICAgIyBsaWJjIGlzIHJlbW92aW5nIHpvbmVpbmZvIGZpbGVzIGZyb20gcGFja2FnZQorICAgICAgICBjcCAtcFAgIiR7U30vem9uZS50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisgICAgICAgIGNwIC1wUCAiJHtTfS9pc28zMTY2LnRhYiIgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKworICAgICAgICAjIEluc3RhbGwgZGVmYXVsdCB0aW1lem9uZQorICAgICAgICBpZiBbIC1lICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gXTsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICAgICAgZWNobyAke0RFRkFVTFRfVElNRVpPTkV9ID4gJHtEfSR7c3lzY29uZmRpcn0vdGltZXpvbmUKKyAgICAgICAgICAgIGxuIC1zICR7ZGF0YWRpcn0vem9uZWluZm8vJHtERUZBVUxUX1RJTUVaT05FfSAke0R9JHtzeXNjb25mZGlyfS9sb2NhbHRpbWUKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmJlcnJvciAiREVGQVVMVF9USU1FWk9ORSBpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZS4iCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKworICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWV0Y19sdD0iJEQke3N5c2NvbmZkaXJ9L2xvY2FsdGltZSIKKwlzcmM9IiREJHtzeXNjb25mZGlyfS90aW1lem9uZSIKKworCWlmIFsgLWUgJHtzcmN9IF0gOyB0aGVuCisJCXR6PSQoc2VkIC1lICdzOiMuKjo6JyAtZSAnczpbWzpzcGFjZTpdXSo6OmcnIC1lICcvXiQvZCcgIiR7c3JjfSIpCisJZmkKKwkKKwlpZiBbIC16ICIke3R6fSIgXSA7IHRoZW4KKwkJZXhpdCAwCisJZmkKKwkKKwlpZiBbICEgLWUgIiREJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgXSA7IHRoZW4KKwkJZWNobyAiWW91IGhhdmUgYW4gaW52YWxpZCBUSU1FWk9ORSBzZXR0aW5nIGluICR7c3JjfSIKKwkJZWNobyAiWW91ciAke2V0Y19sdH0gaGFzIGJlZW4gcmVzZXQgdG8gVW5pdmVyc2FsOyBlbmpveSEiCisJCXR6PSJVbml2ZXJzYWwiCisJCWVjaG8gIlVwZGF0aW5nICR7ZXRjX2x0fSB3aXRoICREJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIKKwkJaWYgWyAtTCAke2V0Y19sdH0gXSA7IHRoZW4KKwkJCXJtIC1mICIke2V0Y19sdH0iCisJCWZpCisJCWxuIC1zICIke2RhdGFkaXJ9L3pvbmVpbmZvLyR7dHp9IiAiJHtldGNfbHR9IgorCWZpCit9CisKKyMgUGFja2FnZXMgcHJpbWFyaWx5IG9yZ2FuaXplZCBieSBkaXJlY3Rvcnkgd2l0aCBhIG1ham9yIGNpdHkKKyMgaW4gbW9zdCB0aW1lIHpvbmVzIGluIHRoZSBiYXNlIHBhY2thZ2UKKworUEFDS0FHRVMgPSAidHpkYXRhIHR6ZGF0YS1taXNjIHR6ZGF0YS1wb3NpeCB0emRhdGEtcmlnaHQgdHpkYXRhLWFmcmljYSBcCisgICAgdHpkYXRhLWFtZXJpY2FzIHR6ZGF0YS1hbnRhcmN0aWNhIHR6ZGF0YS1hcmN0aWMgdHpkYXRhLWFzaWEgXAorICAgIHR6ZGF0YS1hdGxhbnRpYyB0emRhdGEtYXVzdHJhbGlhIHR6ZGF0YS1ldXJvcGUgdHpkYXRhLXBhY2lmaWMiCisKK0ZJTEVTX3R6ZGF0YS1hZnJpY2EgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQWZyaWNhLyoiCitSUFJPVklERVNfdHpkYXRhLWFmcmljYSA9ICJ0emRhdGEtYWZyaWNhIgorCitGSUxFU190emRhdGEtYW1lcmljYXMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQW1lcmljYS8qICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VUy8qICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0JyYXppbC8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vQ2FuYWRhLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NZXhpY28vKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NoaWxlLyoiCitSUFJPVklERVNfdHpkYXRhLWFtZXJpY2FzID0gInR6ZGF0YS1hbWVyaWNhcyIKKworRklMRVNfdHpkYXRhLWFudGFyY3RpY2EgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQW50YXJjdGljYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hbnRhcmN0aWNhID0gInR6ZGF0YS1hbnRhcmN0aWNhIgorCitGSUxFU190emRhdGEtYXJjdGljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FyY3RpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1hcmN0aWMgPSAidHpkYXRhLWFyY3RpYyIKKworRklMRVNfdHpkYXRhLWFzaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXNpYS8qICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9JbmRpYW4vKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01pZGVhc3QvKiIKK1JQUk9WSURFU190emRhdGEtYXNpYSA9ICJ0emRhdGEtYXNpYSIKKworRklMRVNfdHpkYXRhLWF0bGFudGljICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0F0bGFudGljLyoiCitSUFJPVklERVNfdHpkYXRhLWF0bGFudGljID0gInR6ZGF0YS1hdGxhbnRpYyIKKworRklMRVNfdHpkYXRhLWF1c3RyYWxpYSArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvKiIKK1JQUk9WSURFU190emRhdGEtYXVzdHJhbGlhID0gInR6ZGF0YS1hdXN0cmFsaWEiCisKK0ZJTEVTX3R6ZGF0YS1ldXJvcGUgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vRXVyb3BlLyoiCitSUFJPVklERVNfdHpkYXRhLWV1cm9wZSA9ICJ0emRhdGEtZXVyb3BlIgorCitGSUxFU190emRhdGEtcGFjaWZpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljLyoiCitSUFJPVklERVNfdHpkYXRhLXBhY2lmaWMgPSAidHpkYXRhLXBhY2lmaWMiCisKK0ZJTEVTX3R6ZGF0YS1wb3NpeCArPSAiJHtkYXRhZGlyfS96b25laW5mby9wb3NpeC8qIgorUlBST1ZJREVTX3R6ZGF0YS1wb3NpeCA9ICJ0emRhdGEtcG9zaXgiCisKK0ZJTEVTX3R6ZGF0YS1yaWdodCArPSAiJHtkYXRhZGlyfS96b25laW5mby9yaWdodC8qIgorUlBST1ZJREVTX3R6ZGF0YS1yaWdodCA9ICJ0emRhdGEtcmlnaHQiCisKKworRklMRVNfdHpkYXRhLW1pc2MgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQ3ViYSAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRWd5cHQgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRWlyZSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vRmFjdG9yeSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vR0ItRWlyZSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSG9uZ2tvbmcgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSWNlbGFuZCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSXJhbiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSXNyYWVsICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSmFtYWljYSAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSmFwYW4gICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vS3dhamFsZWluICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTGlieWEgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTmF2YWpvICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUG9sYW5kICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vUG9ydHVnYWwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vU2luZ2Fwb3JlICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVHVya2V5IgorUlBST1ZJREVTX3R6ZGF0YS1taXNjID0gInR6ZGF0YS1taXNjIgorCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvSG9ub2x1bHUgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQW5jaG9yYWdlICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvTG9zX0FuZ2VsZXMgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvRGVudmVyICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQ2hpY2FnbyAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvTmV3X1lvcmsgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvQ2FyYWNhcyAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvU2FvX1BhdWxvICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9Mb25kb24gICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9QYXJpcyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS9DYWlybyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS9Nb3Njb3cgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvRHViYWkgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvS2FyYWNoaSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvRGhha2EgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvQmFua29rICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvSG9uZ19Lb25nICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvVG9reW8gICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9EYXJ3aW4gICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9BZGVsYWlkZSAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9CcmlzYmFuZSAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0F1c3RyYWxpYS9TeWRuZXkgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BhY2lmaWMvTm91bWVhICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NFVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NTVDZDRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VFVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VTVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VTVDVFRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVCswICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVC0wICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dNVDAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dyZWVud2ljaCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hTVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01FVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01TVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL01TVDdNRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05aICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05aLUNIQVQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BSQyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BTVDhQRFQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1JPQyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1JPSyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VDVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VUQyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1VuaXZlcnNhbCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1ctU1UgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1dFVCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1p1bHUgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL3pvbmUudGFiICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL2lzbzMxNjYudGFiICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0V0Yy8qIgorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vdGltZXpvbmUgJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDYtdW56aXA2MC1hbHQtaWNvbnYtdXRmOF9DVkUtMjAxNS0xMzE1LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmEzYzFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaApAQCAtMCwwICsxLDQwMiBAQAorRnJvbTogR2lvdmFubmkgU2NhZm9yYSA8Z2lvdmFubmkuYXJjaGxpbnV4Lm9yZz4KK1N1YmplY3Q6IHVuemlwIGZpbGVzIGVuY29kZWQgd2l0aCBub24tbGF0aW4sIG5vbi11bmljb2RlIGZpbGUgbmFtZXMKK0xhc3QtVXBkYXRlOiAyMDE1LTAyLTExCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVXBkYXRlZCAyMDE1LTAyLTExIGJ5IE1hcmMgRGVzbGF1cmllcnMgPG1hcmMuZGVzbGF1cmllcnNAY2Fub25pY2FsLmNvbT4KK3RvIGZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gY2hhcnNldF90b19pbnRlcm4oKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJjIERlc2xhdXJpZXJzIDxtYXJjLmRlc2xhdXJpZXJzQGNhbm9uaWNhbC5jb20+CisKK0luZGV4OiB1bnppcC02LjAvdW5peC91bml4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bnppcC02LjAub3JpZy91bml4L3VuaXguYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bml4L3VuaXguYwkyMDE1LTAyLTExIDA5OjE4OjA0LjkwMjA4MTMxOSAtMDUwMAorQEAgLTMwLDYgKzMwLDkgQEAKKyAjZGVmaW5lIFVOWklQX0lOVEVSTkFMCisgI2luY2x1ZGUgInVuemlwLmgiCisgCisrI2luY2x1ZGUgPGljb252Lmg+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrCisgI2lmZGVmIFNDT19YRU5JWAorICMgIGRlZmluZSBTWVNORElSCisgI2Vsc2UgIC8qIFNDTyBVbml4LCBBSVgsIEROSVgsIFRJIFN5c1YsIENvaGVyZW50IDQueCwgLi4uICovCitAQCAtMTg3NCwzICsxODc3LDEwMiBAQAorICAgICB9CisgfQorICNlbmRpZiAvKiBRTFpJUCAqLworKworKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgY2hhciAqbG9jYWxfY2hhcnNldDsKKysgICAgY2hhciAqYXJjaGl2ZV9jaGFyc2V0OworK30gQ0hBUlNFVF9NQVA7CisrCisrLyogQSBtYXBwaW5nIG9mIGxvY2FsIDwtPiBhcmNoaXZlIGNoYXJzZXRzIHVzZWQgYnkgZGVmYXVsdCB0byBjb252ZXJ0IGZpbGVuYW1lcworKyAqIG9mIERPUy9XaW5kb3dzIFppcCBhcmNoaXZlcy4gQ3VycmVudGx5IHZlcnkgYmFzaWMuICovCisrc3RhdGljIENIQVJTRVRfTUFQIGRvc19jaGFyc2V0X21hcFtdID0geworKyAgICB7ICJBTlNJX1gzLjQtMTk2OCIsICJDUDg1MCIgfSwKKysgICAgeyAiSVNPLTg4NTktMSIsICJDUDg1MCIgfSwKKysgICAgeyAiQ1AxMjUyIiwgIkNQODUwIiB9LAorKyAgICB7ICJVVEYtOCIsICJDUDg2NiIgfSwKKysgICAgeyAiS09JOC1SIiwgIkNQODY2IiB9LAorKyAgICB7ICJLT0k4LVUiLCAiQ1A4NjYiIH0sCisrICAgIHsgIklTTy04ODU5LTUiLCAiQ1A4NjYiIH0KKyt9OworKworK2NoYXIgT0VNX0NQW01BWF9DUF9OQU1FXSA9ICIiOworK2NoYXIgSVNPX0NQW01BWF9DUF9OQU1FXSA9ICIiOworKworKy8qIFRyeSB0byBndWVzcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBPRU1fQ1AgYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlLgorKyAqIElTT19DUCBpcyBsZWZ0IGFsb25lIGZvciBub3cuICovCisrdm9pZCBpbml0X2NvbnZlcnNpb25fY2hhcnNldHMoKQorK3sKKysgICAgY29uc3QgY2hhciAqbG9jYWxfY2hhcnNldDsKKysgICAgaW50IGk7CisrCisrICAgIC8qIE1ha2UgYSBndWVzcyBvbmx5IGlmIE9FTV9DUCBub3QgYWxyZWFkeSBzZXQuICovIAorKyAgICBpZigqT0VNX0NQID09ICdcMCcpIHsKKysgICAgCWxvY2FsX2NoYXJzZXQgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKysgICAgCWZvcihpID0gMDsgaSA8IHNpemVvZihkb3NfY2hhcnNldF9tYXApL3NpemVvZihDSEFSU0VUX01BUCk7IGkrKykKKysgICAgCQlpZighc3RyY2FzZWNtcChsb2NhbF9jaGFyc2V0LCBkb3NfY2hhcnNldF9tYXBbaV0ubG9jYWxfY2hhcnNldCkpIHsKKysgICAgCQkJc3RybmNweShPRU1fQ1AsIGRvc19jaGFyc2V0X21hcFtpXS5hcmNoaXZlX2NoYXJzZXQsCisrICAgIAkJCQkJc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQlicmVhazsKKysgICAgCQl9CisrICAgIH0KKyt9CisrCisrLyogQ29udmVydCBhIHN0cmluZyBmcm9tIG9uZSBlbmNvZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUgdXNpbmcgaWNvbnYoKS4KKysgKiBCZSBhcyBub24taW50cnVzaXZlIGFzIHBvc3NpYmxlLiBJZiBlcnJvciBpcyBlbmNvdW50ZXJlZCBkdXJpbmcgY292ZXJ0aW9uCisrICoganVzdCBsZWF2ZSB0aGUgc3RyaW5nIGludGFjdC4gKi8KKytzdGF0aWMgdm9pZCBjaGFyc2V0X3RvX2ludGVybihjaGFyICpzdHJpbmcsIGNoYXIgKmZyb21fY2hhcnNldCkKKyt7CisrICAgIGljb252X3QgY2Q7CisrICAgIGNoYXIgKnMsKmQsICpidWY7CisrICAgIHNpemVfdCBzbGVuLCBkbGVuLCBidWZsZW47CisrICAgIGNvbnN0IGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrCisrICAgIGlmKCpmcm9tX2NoYXJzZXQgPT0gJ1wwJykKKysgICAgCXJldHVybjsKKysKKysgICAgYnVmID0gTlVMTDsKKysgICAgbG9jYWxfY2hhcnNldCA9IG5sX2xhbmdpbmZvKENPREVTRVQpOworKworKyAgICBpZigoY2QgPSBpY29udl9vcGVuKGxvY2FsX2NoYXJzZXQsIGZyb21fY2hhcnNldCkpID09IChpY29udl90KS0xKQorKyAgICAgICAgcmV0dXJuOworKworKyAgICBzbGVuID0gc3RybGVuKHN0cmluZyk7CisrICAgIHMgPSBzdHJpbmc7CisrCisrICAgIC8qICBNYWtlIHN1cmUgT1VUQlVGU0laICsgMSBuZXZlciBlbmRzIHVwIHNtYWxsZXIgdGhhbiBGSUxOQU1TSVoKKysgICAgICogIGFzIHRoaXMgZnVuY3Rpb24gYWxzbyBnZXRzIGNhbGxlZCB3aXRoIEcub3V0YnVmIGluIGZpbGVpby5jCisrICAgICAqLworKyAgICBidWZsZW4gPSBGSUxOQU1TSVo7CisrICAgIGlmIChPVVRCVUZTSVogKyAxIDwgRklMTkFNU0laKQorKyAgICB7CisrICAgICAgICBidWZsZW4gPSBPVVRCVUZTSVogKyAxOworKyAgICB9CisrCisrICAgIGQgPSBidWYgPSBtYWxsb2MoYnVmbGVuKTsKKysgICAgaWYoIWQpCisrICAgIAlnb3RvIGNsZWFudXA7CisrCisrICAgIGJ6ZXJvKGJ1ZixidWZsZW4pOworKyAgICBkbGVuID0gYnVmbGVuIC0gMTsKKysKKysgICAgaWYoaWNvbnYoY2QsICZzLCAmc2xlbiwgJmQsICZkbGVuKSA9PSAoc2l6ZV90KS0xKQorKyAgICAJZ290byBjbGVhbnVwOworKyAgICBzdHJuY3B5KHN0cmluZywgYnVmLCBidWZsZW4pOworKworKyAgICBjbGVhbnVwOgorKyAgICBmcmVlKGJ1Zik7CisrICAgIGljb252X2Nsb3NlKGNkKTsKKyt9CisrCisrLyogQ29udmVydCBhIHN0cmluZyBmcm9tIE9FTV9DUCB0byB0aGUgY3VycmVudCBsb2NhbGUgY2hhcnNldC4gKi8KKytpbmxpbmUgdm9pZCBvZW1faW50ZXJuKGNoYXIgKnN0cmluZykKKyt7CisrICAgIGNoYXJzZXRfdG9faW50ZXJuKHN0cmluZywgT0VNX0NQKTsKKyt9CisrCisrLyogQ29udmVydCBhIHN0cmluZyBmcm9tIElTT19DUCB0byB0aGUgY3VycmVudCBsb2NhbGUgY2hhcnNldC4gKi8KKytpbmxpbmUgdm9pZCBpc29faW50ZXJuKGNoYXIgKnN0cmluZykKKyt7CisrICAgIGNoYXJzZXRfdG9faW50ZXJuKHN0cmluZywgSVNPX0NQKTsKKyt9CitJbmRleDogdW56aXAtNi4wL3VuaXgvdW54Y2ZnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bnppcC02LjAub3JpZy91bml4L3VueGNmZy5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3VuaXgvdW54Y2ZnLmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzEzMjQyNjAgLTA1MDAKK0BAIC0yMjgsNCArMjI4LDMwIEBACisgLyogd2lsZF9kaXIsIGRpcm5hbWUsIHdpbGRuYW1lLCBtYXRjaG5hbWVbXSwgZGlybmFtZWxlbiwgaGF2ZV9kaXJuYW1lLCAqLworIC8qICAgIGFuZCBub3RmaXJzdGNhbGwgYXJlIHVzZWQgYnkgZG9fd2lsZCgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAKKysKKysjZGVmaW5lIE1BWF9DUF9OQU1FIDI1IAorKyAgIAorKyNpZmRlZiBTRVRMT0NBTEUKKysjICB1bmRlZiBTRVRMT0NBTEUKKysjZW5kaWYKKysjZGVmaW5lIFNFVExPQ0FMRShjYXRlZ29yeSwgbG9jYWxlKSBzZXRsb2NhbGUoY2F0ZWdvcnksIGxvY2FsZSkKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrICAgCisrI2lmZGVmIF9JU09fSU5URVJOCisrIyAgdW5kZWYgX0lTT19JTlRFUk4KKysjZW5kaWYKKysjZGVmaW5lIF9JU09fSU5URVJOKHN0cjEpIGlzb19pbnRlcm4oc3RyMSkKKysKKysjaWZkZWYgX09FTV9JTlRFUk4KKysjICB1bmRlZiBfT0VNX0lOVEVSTgorKyNlbmRpZgorKyNpZm5kZWYgSVpfT0VNMklTT19BUlJBWQorKyMgIGRlZmluZSBJWl9PRU0ySVNPX0FSUkFZCisrI2VuZGlmCisrI2RlZmluZSBfT0VNX0lOVEVSTihzdHIxKSBvZW1faW50ZXJuKHN0cjEpCisrCisrdm9pZCBpc29faW50ZXJuKGNoYXIgKik7Cisrdm9pZCBvZW1faW50ZXJuKGNoYXIgKik7Cisrdm9pZCBpbml0X2NvbnZlcnNpb25fY2hhcnNldHModm9pZCk7CisrICAgCisgI2VuZGlmIC8qICFfX3VueGNmZ19oICovCitJbmRleDogdW56aXAtNi4wL3VuemlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bnppcC02LjAub3JpZy91bnppcC5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3VuemlwLmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKK0BAIC0zMjcsMTEgKzMyNywyMSBAQAorICAgLTIgIGp1c3QgZmlsZW5hbWVzIGJ1dCBhbGxvdyAtaC8tdC8teiAgLWwgIGxvbmcgVW5peCBcImxzIC1sXCIgZm9ybWF0XG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtdiAgdmVyYm9zZSwgbXVsdGktcGFnZSBmb3JtYXRcbiI7CisgCisrI2lmbmRlZiBVTklYCisgc3RhdGljIFpDT05TVCBjaGFyIEZhciBaaXBJbmZvVXNhZ2VMaW5lM1tdID0gIm1pc2NlbGxhbmVvdXMgb3B0aW9uczpcblwKKyAgIC1oICBwcmludCBoZWFkZXIgbGluZSAgICAgICAtdCAgcHJpbnQgdG90YWxzIGZvciBsaXN0ZWQgZmlsZXMgb3IgZm9yIGFsbFxuXAorICAgLXogIHByaW50IHppcGZpbGUgY29tbWVudCAgIC1UICBwcmludCBmaWxlIHRpbWVzIGluIHNvcnRhYmxlIGRlY2ltYWwgZm9ybWF0XAorIFxuICAtQyAgYmUgY2FzZS1pbnNlbnNpdGl2ZSAgICVzXAorICAgLXggIGV4Y2x1ZGUgZmlsZW5hbWVzIHRoYXQgZm9sbG93IGZyb20gbGlzdGluZ1xuIjsKKysjZWxzZSAvKiBVTklYICovCisrc3RhdGljIFpDT05TVCBjaGFyIEZhciBaaXBJbmZvVXNhZ2VMaW5lM1tdID0gIm1pc2NlbGxhbmVvdXMgb3B0aW9uczpcblwKKysgIC1oICBwcmludCBoZWFkZXIgbGluZSAgICAgICAtdCAgcHJpbnQgdG90YWxzIGZvciBsaXN0ZWQgZmlsZXMgb3IgZm9yIGFsbFxuXAorKyAgLXogIHByaW50IHppcGZpbGUgY29tbWVudCAgJWMtVCVjIHByaW50IGZpbGUgdGltZXMgaW4gc29ydGFibGUgZGVjaW1hbCBmb3JtYXRcCisrXG4gJWMtQyVjIGJlIGNhc2UtaW5zZW5zaXRpdmUgICAlc1wKKysgIC14ICBleGNsdWRlIGZpbGVuYW1lcyB0aGF0IGZvbGxvdyBmcm9tIGxpc3RpbmdcblwKKysgIC1PIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIERPUywgV2luZG93cyBhbmQgT1MvMiBhcmNoaXZlc1xuXAorKyAgLUkgQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgVU5JWCBhbmQgb3RoZXIgYXJjaGl2ZXNcbiI7CisrI2VuZGlmIC8qICFVTklYICovCisgI2lmZGVmIE1PUkUKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFppcEluZm9Vc2FnZUxpbmU0W10gPQorICAgICAgIiAgLU0gIHBhZ2Ugb3V0cHV0IHRocm91Z2ggYnVpbHQtaW4gXCJtb3JlXCJcbiI7CitAQCAtNjY0LDYgKzY3NCwxNyBAQAorICAgLVUgIHVzZSBlc2NhcGVzIGZvciBhbGwgbm9uLUFTQ0lJIFVuaWNvZGUgIC1VVSBpZ25vcmUgYW55IFVuaWNvZGUgZmllbGRzXG5cCisgICAtQyAgbWF0Y2ggZmlsZW5hbWVzIGNhc2UtaW5zZW5zaXRpdmVseSAgICAgLUwgIG1ha2UgKHNvbWUpIG5hbWVzIFwKKyBsb3dlcmNhc2VcbiAlLTQycyAgLVYgIHJldGFpbiBWTVMgdmVyc2lvbiBudW1iZXJzXG4lcyI7CisrI2VsaWYgKGRlZmluZWQgVU5JWCkKKytzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFVuemlwVXNhZ2VMaW5lNFtdID0gIlwKKyttb2RpZmllcnM6XG5cCisrICAtbiAgbmV2ZXIgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzICAgICAgICAgLXEgIHF1aWV0IG1vZGUgKC1xcSA9PiBxdWlldGVyKVxuXAorKyAgLW8gIG92ZXJ3cml0ZSBmaWxlcyBXSVRIT1VUIHByb21wdGluZyAgICAgIC1hICBhdXRvLWNvbnZlcnQgYW55IHRleHQgZmlsZXNcblwKKysgIC1qICBqdW5rIHBhdGhzIChkbyBub3QgbWFrZSBkaXJlY3RvcmllcykgICAtYWEgdHJlYXQgQUxMIGZpbGVzIGFzIHRleHRcblwKKysgIC1VICB1c2UgZXNjYXBlcyBmb3IgYWxsIG5vbi1BU0NJSSBVbmljb2RlICAtVVUgaWdub3JlIGFueSBVbmljb2RlIGZpZWxkc1xuXAorKyAgLUMgIG1hdGNoIGZpbGVuYW1lcyBjYXNlLWluc2Vuc2l0aXZlbHkgICAgIC1MICBtYWtlIChzb21lKSBuYW1lcyBcCisrbG93ZXJjYXNlXG4gJS00MnMgIC1WICByZXRhaW4gVk1TIHZlcnNpb24gbnVtYmVyc1xuJXNcCisrICAtTyBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBET1MsIFdpbmRvd3MgYW5kIE9TLzIgYXJjaGl2ZXNcblwKKysgIC1JIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIFVOSVggYW5kIG90aGVyIGFyY2hpdmVzXG5cbiI7CisgI2Vsc2UgLyogIVZNUyAqLworIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgVW56aXBVc2FnZUxpbmU0W10gPSAiXAorIG1vZGlmaWVyczpcblwKK0BAIC04MDIsNiArODIzLDEwIEBACisgI2VuZGlmIC8qIFVOSUNPREVfU1VQUE9SVCAqLworIAorIAorKyNpZmRlZiBVTklYCisrICAgIGluaXRfY29udmVyc2lvbl9jaGFyc2V0cygpOworKyNlbmRpZgorKworICNpZiAoZGVmaW5lZChfX0lCTUNfXykgJiYgZGVmaW5lZChfX0RFQlVHX0FMTE9DX18pKQorICAgICBleHRlcm4gdm9pZCBEZWJ1Z01hbGxvYyh2b2lkKTsKKyAKK0BAIC0xMzM1LDYgKzEzNjAsMTEgQEAKKyAgICAgYXJnYyA9ICpwYXJnYzsKKyAgICAgYXJndiA9ICpwYXJndjsKKyAKKysjaWZkZWYgVU5JWAorKyAgICBleHRlcm4gY2hhciBPRU1fQ1BbTUFYX0NQX05BTUVdOworKyAgICBleHRlcm4gY2hhciBJU09fQ1BbTUFYX0NQX05BTUVdOworKyNlbmRpZgorKyAgICAKKyAgICAgd2hpbGUgKCsrYXJndiwgKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgPT0gJy0nKSkgeworICAgICAgICAgcyA9ICphcmd2ICsgMTsKKyAgICAgICAgIHdoaWxlICgoYyA9ICpzKyspICE9IDApIHsgICAgLyogIiE9IDAiOiAgcHJldmVudCBUdXJibyBDIHdhcm5pbmcgKi8KK0BAIC0xNTE2LDYgKzE1NDYsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICNlbmRpZiAgLyogTUFDT1MgKi8KKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnSScpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtSWNoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoSVNPX0NQLCBzLCBzaXplb2YoSVNPX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLUkgY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAoJ2onKTogICAgLyoganVuayBwYXRobmFtZXMvZGlyZWN0b3J5IHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmpmbGFnID0gRkFMU0UsIG5lZ2F0aXZlID0gMDsKK0BAIC0xNTkxLDYgKzE2NTAsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICsrdU8ub3ZlcndyaXRlX2FsbDsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBVTklYCisrICAgIAkJCWNhc2UgKCdPJyk6CisrICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBlbmNvZGluZ3MgY2FuJ3QgYmUgbmVnYXRlZCIpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOworKyAgICAJCQkJfSBlbHNlIHsKKysgICAgCQkJCQlpZigqcykgeyAvKiBIYW5kbGUgdGhlIC1PY2hhcnNldCBjYXNlICovCisrICAgIAkJCQkJCS8qIEFzc3VtZSB0aGF0IGNoYXJzZXRzIGNhbid0IHN0YXJ0IHdpdGggYSBkYXNoIHRvIHNwb3QgYXJndW1lbnRzIG1pc3VzZSAqLworKyAgICAJCQkJCQlpZigqcyA9PSAnLScpIHsgCisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJc3RybmNweShPRU1fQ1AsIHMsIHNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJCQl9IGVsc2UgeyAvKiAtTyBjaGFyc2V0ICovCisrICAgIAkJCQkJCSsrYXJndjsKKysgICAgCQkJCQkJaWYoISgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ICE9ICctJykpIHsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLU8gYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzID0gKmFyZ3Y7CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfQorKyAgICAJCQkJCXdoaWxlKCooKytzKSk7IC8qIE5vIHBhcmFtcyBzdHJhaWdodCBhZnRlciBjaGFyc2V0IG5hbWUgKi8KKysgICAgCQkJCX0KKysgICAgCQkJCWJyZWFrOworKyNlbmRpZiAvKiA/VU5JWCAqLworICAgICAgICAgICAgICAgICBjYXNlICgncCcpOiAgICAvKiBwaXBlczogIGV4dHJhY3QgdG8gc3Rkb3V0LCBubyBtZXNzYWdlcyAqLworICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgdU8uY2ZsYWcgPSBGQUxTRTsKK0luZGV4OiB1bnppcC02LjAvdW56cHJpdi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW56cHJpdi5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3VuenByaXYuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorQEAgLTMwMDgsNyArMzAwOCw3IEBACisgICAgICAgICAgISgoKGlzbG9jaGRyKSB8fCAoaXN1eGF0dCkpICYmIFwKKyAgICAgICAgICAgICgoaG9zdHZlcikgPT0gMjUgfHwgKGhvc3R2ZXIpID09IDI2IHx8IChob3N0dmVyKSA9PSA0MCkpKSB8fCBcCisgICAgICAgICAoaG9zdG51bSkgPT0gRlNfSFBGU18gfHwgXAorLSAgICAgICAgKChob3N0bnVtKSA9PSBGU19OVEZTXyAmJiAoaG9zdHZlcikgPT0gNTApKSB7IFwKKysgICAgICAgICgoaG9zdG51bSkgPT0gRlNfTlRGU18gLyogJiYgKGhvc3R2ZXIpID09IDUwICovICkpIHsgXAorICAgICAgICAgX09FTV9JTlRFUk4oKHN0cmluZykpOyBcCisgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgIF9JU09fSU5URVJOKChzdHJpbmcpKTsgXAorSW5kZXg6IHVuemlwLTYuMC96aXBpbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bnppcC02LjAub3JpZy96aXBpbmZvLmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvemlwaW5mby5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCitAQCAtNDU3LDYgKzQ1NywxMCBAQAorICAgICBpbnQgICAgdGZsYWdfc2xtPVRSVUUsIHRmbGFnXzJ2PUZBTFNFOworICAgICBpbnQgICAgZXhwbGljaXRfaD1GQUxTRSwgZXhwbGljaXRfdD1GQUxTRTsKKyAKKysjaWZkZWYgVU5JWAorKyAgICBleHRlcm4gY2hhciBPRU1fQ1BbTUFYX0NQX05BTUVdOworKyAgICBleHRlcm4gY2hhciBJU09fQ1BbTUFYX0NQX05BTUVdOworKyNlbmRpZgorIAorICNpZmRlZiBNQUNPUworICAgICB1Ty5sZmxhZyA9IExGTEFHOyAgICAgICAgIC8qIHJlc2V0IGRlZmF1bHQgb24gZWFjaCBjYWxsICovCitAQCAtNTAxLDYgKzUwNSwzNSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5sZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnSScpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtSWNoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoSVNPX0NQLCBzLCBzaXplb2YoSVNPX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLUkgY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAnbCc6ICAgICAgLyogbG9uZ2VyIGZvcm0gb2YgImxzIC1sIiB0eXBlIGxpc3RpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5sZmxhZyA9IC0yLCBuZWdhdGl2ZSA9IDA7CitAQCAtNTIxLDYgKzU1NCwzNSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIEcuTV9mbGFnID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICNlbmRpZgorKyNpZmRlZiBVTklYCisrICAgIAkJCWNhc2UgKCdPJyk6CisrICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBlbmNvZGluZ3MgY2FuJ3QgYmUgbmVnYXRlZCIpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOworKyAgICAJCQkJfSBlbHNlIHsKKysgICAgCQkJCQlpZigqcykgeyAvKiBIYW5kbGUgdGhlIC1PY2hhcnNldCBjYXNlICovCisrICAgIAkJCQkJCS8qIEFzc3VtZSB0aGF0IGNoYXJzZXRzIGNhbid0IHN0YXJ0IHdpdGggYSBkYXNoIHRvIHNwb3QgYXJndW1lbnRzIG1pc3VzZSAqLworKyAgICAJCQkJCQlpZigqcyA9PSAnLScpIHsgCisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1JIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJc3RybmNweShPRU1fQ1AsIHMsIHNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJCQl9IGVsc2UgeyAvKiAtTyBjaGFyc2V0ICovCisrICAgIAkJCQkJCSsrYXJndjsKKysgICAgCQkJCQkJaWYoISgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ICE9ICctJykpIHsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLU8gYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzID0gKmFyZ3Y7CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfQorKyAgICAJCQkJCXdoaWxlKCooKytzKSk7IC8qIE5vIHBhcmFtcyBzdHJhaWdodCBhZnRlciBjaGFyc2V0IG5hbWUgKi8KKysgICAgCQkJCX0KKysgICAgCQkJCWJyZWFrOworKyNlbmRpZiAvKiA/VU5JWCAqLworICAgICAgICAgICAgICAgICBjYXNlICdzJzogICAgICAvKiBkZWZhdWx0OiAgc2hvcnRlciAibHMgLWwiIHR5cGUgbGlzdGluZyAqLworICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmxmbGFnID0gLTIsIG5lZ2F0aXZlID0gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM3ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA5LWN2ZS0yMDE0LTgxMzktY3JjLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb206IHNtcworU3ViamVjdDogRml4IENWRS0yMDE0LTgxMzk6IENSQzMyIHZlcmlmaWNhdGlvbiBoZWFwLWJhc2VkIG92ZXJmbG93CitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc3MzcyMgorCitUaGUgcGF0Y2ggY29tZXMgZnJvbSB1bnppcF82LjAtOCtkZWI3dTIuZGViaWFuLnRhci5negorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZXh0cmFjdC5jCisrKysgYi9leHRyYWN0LmMKK0BAIC0yOTgsNiArMjk4LDggQEAKKyAjaWZuZGVmIFNGWAorICAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgSW5jb25zaXN0RUZsZW5ndGhbXSA9ICJiYWQgZXh0cmEtZmllbGQgZW50cnk6XG4gXAorICAgICAgRUYgYmxvY2sgbGVuZ3RoICgldSBieXRlcykgZXhjZWVkcyByZW1haW5pbmcgRUYgZGF0YSAoJXUgYnl0ZXMpXG4iOworKyAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgVG9vU21hbGxFQmxlbmd0aFtdID0gImJhZCBleHRyYS1maWVsZCBlbnRyeTpcbiBcCisrICAgICBFRiBibG9jayBsZW5ndGggKCV1IGJ5dGVzKSBpbnZhbGlkICg8ICVkKVxuIjsKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEludmFsaWRDb21wckRhdGFFQXNbXSA9CisgICAgICAiIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIGZvciBFQXNcbiI7CisgIyAgaWYgKGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoTlRTRF9FQVMpKQorQEAgLTIwMjMsNyArMjAyNSw4IEBACisgICAgICAgICBlYklEID0gbWFrZXdvcmQoZWYpOworICAgICAgICAgZWJMZW4gPSAodW5zaWduZWQpbWFrZXdvcmQoZWYrRUJfTEVOKTsKKyAKKy0gICAgICAgIGlmIChlYkxlbiA+IChlZl9sZW4gLSBFQl9IRUFEU0laRSkpIHsKKysgICAgICAgIGlmIChlYkxlbiA+IChlZl9sZW4gLSBFQl9IRUFEU0laRSkpCisrICAgICAgICB7CisgICAgICAgICAgICAvKiBEaXNjb3ZlcmVkIHNvbWUgZXh0cmEgZmllbGQgaW5jb25zaXN0ZW5jeSEgKi8KKyAgICAgICAgICAgICBpZiAodU8ucWZsYWcpCisgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDEsICgoY2hhciAqKXNsaWRlLCAiJS0yMnMgIiwKK0BAIC0yMTU4LDExICsyMTYxLDE5IEBACisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBFRl9QS1ZNUzoKKy0gICAgICAgICAgICAgICAgaWYgKG1ha2Vsb25nKGVmK0VCX0hFQURTSVpFKSAhPQorKyAgICAgICAgICAgICAgICBpZiAoZWJMZW4gPCA0KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKXNsaWRlLCBMb2FkRmFyU3RyaW5nKFRvb1NtYWxsRUJsZW5ndGgpLAorKyAgICAgICAgICAgICAgICAgICAgIGViTGVuLCA0KSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAobWFrZWxvbmcoZWYrRUJfSEVBRFNJWkUpICE9CisgICAgICAgICAgICAgICAgICAgICBjcmMzMihDUkNWQUxfSU5JVElBTCwgZWYrKEVCX0hFQURTSVpFKzQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4dGVudCkoZWJMZW4tNCkpKQorKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAxLCAoKGNoYXIgKilzbGlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZhclN0cmluZyhCYWRDUkNfRUFzKSkpOworKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgRUZfUEtXMzI6CisgICAgICAgICAgICAgY2FzZSBFRl9QS1VOSVg6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM3ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tOiBzbXMKK1N1YmplY3Q6IEZpeCBDVkUtMjAxNC04MTQwOiBvdXQtb2YtYm91bmRzIHdyaXRlIGlzc3VlIGluIHRlc3RfY29tcHJfZWIoKQorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjIzMiwxMCArMjIzMiwxNyBAQAorICAgICBpZiAoY29tcHJfb2Zmc2V0IDwgNCkgICAgICAgICAgICAgICAgLyogZmllbGQgaXMgbm90IGNvbXByZXNzZWQ6ICovCisgICAgICAgICByZXR1cm4gUEtfT0s7ICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nIGFuZCBzaWduYWwgT0sgKi8KKyAKKysgICAgLyogUmV0dXJuIG5vL2JhZC1kYXRhIGVycm9yIHN0YXR1cyBpZiBhbnkgcHJvYmxlbSBpcyBmb3VuZDoKKysgICAgICogICAgMS4gZWJfc2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgdW5jb21wcmVzc2VkIHNpemUKKysgICAgICogICAgICAgKGViX3Vjc2l6ZSkuICAoRWxzZSBleHRyYWN0IGViX3Vjc2l6ZS4pCisrICAgICAqICAgIDIuIGViX3Vjc2l6ZSBpcyB6ZXJvIChpbnZhbGlkKS4gIDIwMTQtMTItMDQgU01TLgorKyAgICAgKiAgICAzLiBlYl91Y3NpemUgaXMgcG9zaXRpdmUsIGJ1dCBlYl9zaXplIGlzIHRvbyBzbWFsbCB0byBob2xkCisrICAgICAqICAgICAgIHRoZSBjb21wcmVzc2VkIGRhdGEgaGVhZGVyLgorKyAgICAgKi8KKyAgICAgaWYgKChlYl9zaXplIDwgKEVCX1VDU0laRV9QICsgNCkpIHx8CistICAgICAgICAoKGViX3Vjc2l6ZSA9IG1ha2Vsb25nKGViKyhFQl9IRUFEU0laRStFQl9VQ1NJWkVfUCkpKSA+IDBMICYmCistICAgICAgICAgZWJfc2l6ZSA8PSAoY29tcHJfb2Zmc2V0ICsgRUJfQ01QUkhFQURMRU4pKSkKKy0gICAgICAgIHJldHVybiBJWl9FRl9UUlVOQzsgICAgICAgICAgICAgICAvKiBubyBjb21wcmVzc2VkIGRhdGEhICovCisrICAgICAoKGViX3Vjc2l6ZSA9IG1ha2Vsb25nKCBlYisgKEVCX0hFQURTSVpFKyBFQl9VQ1NJWkVfUCkpKSA9PSAwTCkgfHwKKysgICAgICgoZWJfdWNzaXplID4gMEwpICYmIChlYl9zaXplIDw9IChjb21wcl9vZmZzZXQgKyBFQl9DTVBSSEVBRExFTikpKSkKKysgICAgICAgIHJldHVybiBJWl9FRl9UUlVOQzsgICAgICAgICAgICAgLyogbm8vYmFkIGNvbXByZXNzZWQgZGF0YSEgKi8KKyAKKyAgICAgaWYgKAorICNpZmRlZiBJTlRfMTZCSVQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMxZGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzExLWN2ZS0yMDE0LTgxNDEtZ2V0emlwNjRkYXRhLnBhdGNoCkBAIC0wLDAgKzEsMTQ0IEBACitGcm9tOiBzbXMKK1N1YmplY3Q6IEZpeCBDVkUtMjAxNC04MTQxOiBvdXQtb2YtYm91bmRzIHJlYWQgaXNzdWVzIGluIGdldFppcDY0RGF0YSgpCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc3MzcyMgorCitUaGUgcGF0Y2ggY29tZXMgZnJvbSB1bnppcF82LjAtOCtkZWI3dTIuZGViaWFuLnRhci5negorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKworCistLS0gYS9maWxlaW8uYworKysrIGIvZmlsZWlvLmMKK0BAIC0xNzYsNiArMTc2LDggQEAKKyAjZW5kaWYKKyBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEV4dHJhRmllbGRUb29Mb25nW10gPQorICAgIndhcm5pbmc6ICBleHRyYSBmaWVsZCB0b28gbG9uZyAoJWQpLiAgSWdub3JpbmcuLi5cbiI7Cisrc3RhdGljIFpDT05TVCBjaGFyIEZhciBFeHRyYUZpZWxkQ29ycnVwdFtdID0KKysgICJ3YXJuaW5nOiAgZXh0cmEgZmllbGQgKHR5cGU6IDB4JTA0eCkgY29ycnVwdC4gIENvbnRpbnVpbmcuLi5cbiI7CisgCisgI2lmZGVmIFdJTkRMTAorICAgIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgRGlza0Z1bGxRdWVyeVtdID0KK0BAIC0yMjk1LDcgKzIyOTcsMTIgQEAKKyAgICAgICAgICAgICBpZiAocmVhZGJ1ZihfX0dfXyAoY2hhciAqKUcuZXh0cmFfZmllbGQsIGxlbmd0aCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIFBLX0VPRjsKKyAgICAgICAgICAgICAvKiBMb29rcyBsaWtlIGhlcmUgaXMgd2hlcmUgZXh0cmEgZmllbGRzIGFyZSByZWFkICovCistICAgICAgICAgICAgZ2V0WmlwNjREYXRhKF9fR19fIEcuZXh0cmFfZmllbGQsIGxlbmd0aCk7CisrICAgICAgICAgICAgaWYgKGdldFppcDY0RGF0YShfX0dfXyBHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpICE9IFBLX0NPT0wpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAgICAgICAgICBMb2FkRmFyU3RyaW5nKCBFeHRyYUZpZWxkQ29ycnVwdCksIEVGX1BLU1o2NCkpOworKyAgICAgICAgICAgICAgICBlcnJvciA9IFBLX1dBUk47CisrICAgICAgICAgICAgfQorICNpZmRlZiBVTklDT0RFX1NVUFBPUlQKKyAgICAgICAgICAgICBHLnVuaXBhdGhfZmlsZW5hbWUgPSBOVUxMOworICAgICAgICAgICAgIGlmIChHLlV6Ty5VX2ZsYWcgPCAyKSB7CistLS0gYS9wcm9jZXNzLmMKKysrKyBiL3Byb2Nlc3MuYworQEAgLTEsNSArMSw1IEBACisgLyoKKy0gIENvcHlyaWdodCAoYykgMTk5MC0yMDA5IEluZm8tWklQLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgIENvcHlyaWdodCAoYykgMTk5MC0yMDE0IEluZm8tWklQLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgIFNlZSB0aGUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRSwgdmVyc2lvbiAyMDA5LUphbi0wMiBvciBsYXRlcgorICAgKHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmUgYWxzbyBpbmNsdWRlZCBpbiB1bnppcC5oKSBmb3IgdGVybXMgb2YgdXNlLgorQEAgLTE5MDEsNDggKzE5MDEsODIgQEAKKyAgICAgYW5kIGEgNC1ieXRlIHZlcnNpb24gb2YgZGlzayBzdGFydCBudW1iZXIuCisgICAgIFNldHMgYm90aCBsb2NhbCBoZWFkZXIgYW5kIGNlbnRyYWwgaGVhZGVyIGZpZWxkcy4gIE5vdCB0ZXJyaWJseSBjbGV2ZXIsCisgICAgIGJ1dCBpdCBtZWFucyB0aGF0IHRoaXMgcHJvY2VkdXJlIGlzIG9ubHkgY2FsbGVkIGluIG9uZSBwbGFjZS4KKysKKysgICAgMjAxNC0xMi0wNSBTTVMuCisrICAgIEFkZGVkIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBlbm91Z2ggZGF0YSBhcmUgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nCisrICAgIG1ha2VpbnQ2NCgpIG9yIG1ha2Vsb25nKCkuICBSZXBsYWNlZCB2YXJpb3VzIHNpemVvZigpIHZhbHVlcyB3aXRoCisrICAgIHNpbXBsZSAoIjQiIG9yICI4IikgY29uc3RhbnRzLiAgKFRoZSBaaXA2NCBzdHJ1Y3R1cmVzIGRvIG5vdCBkZXBlbmQKKysgICAgb24gb3VyIHZhcmlhYmxlIHNpemVzLikgIEVycm9yIGhhbmRsaW5nIGlzIGNydWRlLCBidXQgd2Ugc2hvdWxkIG5vdworKyAgICBzdGF5IHdpdGhpbiB0aGUgYnVmZmVyLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKysjZGVmaW5lIFo2NEZMR1MgMHhmZmZmCisrI2RlZmluZSBaNjRGTEdMIDB4ZmZmZmZmZmYKKysKKyAgICAgaWYgKGVmX2xlbiA9PSAwIHx8IGVmX2J1ZiA9PSBOVUxMKQorICAgICAgICAgcmV0dXJuIFBLX0NPT0w7CisgCisgICAgIFRyYWNlKChzdGRlcnIsIlxuZ2V0WmlwNjREYXRhOiBzY2FubmluZyBleHRyYSBmaWVsZCBvZiBsZW5ndGggJXVcbiIsCisgICAgICAgZWZfbGVuKSk7CisgCistICAgIHdoaWxlIChlZl9sZW4gPj0gRUJfSEVBRFNJWkUpIHsKKysgICAgd2hpbGUgKGVmX2xlbiA+PSBFQl9IRUFEU0laRSkKKysgICAgeworICAgICAgICAgZWJfaWQgPSBtYWtld29yZChFQl9JRCArIGVmX2J1Zik7CisgICAgICAgICBlYl9sZW4gPSBtYWtld29yZChFQl9MRU4gKyBlZl9idWYpOworIAorLSAgICAgICAgaWYgKGViX2xlbiA+IChlZl9sZW4gLSBFQl9IRUFEU0laRSkpIHsKKy0gICAgICAgICAgICAvKiBkaXNjb3ZlcmVkIHNvbWUgZXh0cmEgZmllbGQgaW5jb25zaXN0ZW5jeSEgKi8KKysgICAgICAgIGlmIChlYl9sZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8qIEV4dHJhIGJsb2NrIGxlbmd0aCBleGNlZWRzIHJlbWFpbmluZyBleHRyYSBmaWVsZCBsZW5ndGguICovCisgICAgICAgICAgICAgVHJhY2UoKHN0ZGVyciwKKyAgICAgICAgICAgICAgICJnZXRaaXA2NERhdGE6IGJsb2NrIGxlbmd0aCAldSA+IHJlc3QgZWZfc2l6ZSAldVxuIiwgZWJfbGVuLAorICAgICAgICAgICAgICAgZWZfbGVuIC0gRUJfSEVBRFNJWkUpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0gICAgICAgIGlmIChlYl9pZCA9PSBFRl9QS1NaNjQpIHsKKy0KKysgICAgICAgIGlmIChlYl9pZCA9PSBFRl9QS1NaNjQpCisrICAgICAgICB7CisgICAgICAgICAgIGludCBvZmZzZXQgPSBFQl9IRUFEU0laRTsKKyAKKy0gICAgICAgICAgaWYgKEcuY3JlYy51Y3NpemUgPT0gMHhmZmZmZmZmZiB8fCBHLmxyZWMudWNzaXplID09IDB4ZmZmZmZmZmYpeworLSAgICAgICAgICAgIEcubHJlYy51Y3NpemUgPSBHLmNyZWMudWNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CistICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihHLmNyZWMudWNzaXplKTsKKysgICAgICAgICAgaWYgKChHLmNyZWMudWNzaXplID09IFo2NEZMR0wpIHx8IChHLmxyZWMudWNzaXplID09IFo2NEZMR0wpKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgOCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisrICAgICAgICAgICAgRy5jcmVjLnVjc2l6ZSA9IEcubHJlYy51Y3NpemUgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gODsKKyAgICAgICAgICAgfQorLSAgICAgICAgICBpZiAoRy5jcmVjLmNzaXplID09IDB4ZmZmZmZmZmYgfHwgRy5scmVjLmNzaXplID09IDB4ZmZmZmZmZmYpeworLSAgICAgICAgICAgIEcuY3NpemUgPSBHLmxyZWMuY3NpemUgPSBHLmNyZWMuY3NpemUgPSBtYWtlaW50NjQob2Zmc2V0ICsgZWZfYnVmKTsKKy0gICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKEcuY3JlYy5jc2l6ZSk7CisrCisrICAgICAgICAgIGlmICgoRy5jcmVjLmNzaXplID09IFo2NEZMR0wpIHx8IChHLmxyZWMuY3NpemUgPT0gWjY0RkxHTCkpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA4ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKysgICAgICAgICAgICBHLmNzaXplID0gRy5jcmVjLmNzaXplID0gRy5scmVjLmNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDg7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgaWYgKEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyID09IDB4ZmZmZmZmZmYpeworKworKyAgICAgICAgICBpZiAoRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIgPT0gWjY0RkxHTCkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDggPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworICAgICAgICAgICAgIEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CistICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlcik7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDg7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgaWYgKEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCA9PSAweGZmZmYpeworKworKyAgICAgICAgICBpZiAoRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0ID09IFo2NEZMR1MpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA0ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKyAgICAgICAgICAgICBHLmNyZWMuZGlza19udW1iZXJfc3RhcnQgPSAoenV2bF90KW1ha2Vsb25nKG9mZnNldCArIGVmX2J1Zik7CistICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihHLmNyZWMuZGlza19udW1iZXJfc3RhcnQpOworKyAgICAgICAgICAgIG9mZnNldCArPSA0OworICAgICAgICAgICB9CisrI2lmIDAKKysgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIC8qIEV4cGVjdCBvbmx5IG9uZSBFRl9QS1NaNjQgYmxvY2suICovCisrI2VuZGlmIC8qIDAgKi8KKyAgICAgICAgIH0KKyAKKy0gICAgICAgIC8qIFNraXAgdGhpcyBleHRyYSBmaWVsZCBibG9jayAqLworKyAgICAgICAgLyogU2tpcCB0aGlzIGV4dHJhIGZpZWxkIGJsb2NrLiAqLworICAgICAgICAgZWZfYnVmICs9IChlYl9sZW4gKyBFQl9IRUFEU0laRSk7CisgICAgICAgICBlZl9sZW4gLT0gKGViX2xlbiArIEVCX0hFQURTSVpFKTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvYXZvaWQtc3RyaXAucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VuaXgvTWFrZWZpbGU6IHJlbW92ZSBoYXJkIGNvZGVkIHN0cmlwIGNvbW1hbmRzCisKK1JlbW92ZSB0aGUgaGFyZCBjb2RlZCBzdHJpcCBjb21tYW5kcywgYm90aCBMRjIgKHVzZWQgaW4gbGlua2luZykgYW5kCitTVFJJUCB1c2VkIGFsb25lLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVyIHVuemlwNjAub3JpZy91bml4L2NvbmZpZ3VyZSB1bnppcDYwL3VuaXgvY29uZmlndXJlCistLS0gdW56aXA2MC5vcmlnL3VuaXgvY29uZmlndXJlCTIwMDktMDQtMTYgMTQ6MjU6MTIuMDAwMDAwMDAwIC0wNTAwCisrKysgdW56aXA2MC91bml4L2NvbmZpZ3VyZQkyMDExLTA2LTIxIDExOjIzOjM2LjgyMjg0OTk2MCAtMDUwMAorQEAgLTE3LDcgKzE3LDcgQEAKKyBJWl9CWklQMj0kezN9CisgQ0ZMQUdTPSIke0NGTEFHU30gLUkuIC1EVU5JWCIKKyBMRkxBR1MxPSIiCistTEZMQUdTMj0iLXMiCisrTEZMQUdTMj0iIgorIExOPSJsbiAtcyIKKyAKKyBDRkxBR1NfT1BUPScnCitkaWZmIC11ciB1bnppcDYwLm9yaWcvdW5peC9NYWtlZmlsZSB1bnppcDYwL3VuaXgvTWFrZWZpbGUKKy0tLSB1bnppcDYwLm9yaWcvdW5peC9NYWtlZmlsZQkyMDA5LTAxLTE4IDE2OjQxOjE4LjAwMDAwMDAwMCAtMDYwMAorKysrIHVuemlwNjAvdW5peC9NYWtlZmlsZQkyMDExLTA2LTIxIDExOjEyOjIyLjkwMDAwMzM4OCAtMDUwMAorQEAgLTUyLDcgKzUyLDcgQEAKKyBDRiA9ICQoQ0ZMQUdTKSAkKENGX05PT1BUKQorIExGTEFHUzEgPQorIExGID0gLW8gdW56aXAkRSAkKExGTEFHUzEpCistTEYyID0gLXMKKytMRjIgPSAKKyAKKyAjIFVuWmlwU0ZYIGZsYWdzCisgU0wgPSAtbyB1bnppcHNmeCRFICQoTEZMQUdTMSkKK0BAIC03MCw3ICs3MCw3IEBACisgQ0hNT0QgPSBjaG1vZAorIEJJTlBFUk1TID0gNzU1CisgTUFOUEVSTVMgPSA2NDQKKy1TVFJJUCA9IHN0cmlwCisrU1RSSVAgPQorIEUgPQorIE8gPSAubworIE0gPSB1bml4CitAQCAtNzc2LDcgKzc3Niw2IEBACisgIworIGdjYzoJCXVuaXhfbWFrZQorIAkkKE1BS0UpIHVuemlwcyBDQz1nY2MgTEQ9Z2NjIENGTEFHUz0iLU8zIiBMRjI9IiIKKy0JJChTVFJJUCkgJChVTlpJUFMpCisgCisgIyBIZXVyaWtvbiBISzY4ICg2ODAxMCksIFVuaVBsdXMrIFN5c3RlbSBWIDUuMCwgR3JlZW4gSGlsbHMgQy02ODAwMAorIGhrNjg6CQl1bml4X21ha2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTljNmUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2RlZmluZS1sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Bhc3MgTERGTEFHUyB0byB0aGUgbGlua2VyIAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlraGFpbCBEdXJuZXYgPE1pa2hhaWxfRHVybmV2QG1lbnRvci5jb20+CisKK2RpZmYgLU5hdXIgb2xkL3VuaXgvY29uZmlndXJlIG5ldy91bml4L2NvbmZpZ3VyZQorLS0tIG9sZC91bml4L2NvbmZpZ3VyZQkyMDE0LTAxLTEzIDIxOjU5OjI3LjAwMDAwMDAwMCArMTEwMAorKysrIG5ldy91bml4L2NvbmZpZ3VyZQkyMDE0LTAxLTE0IDE2OjM2OjAyLjAwMDAwMDAwMCArMTEwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBDRkxBR1NSPSR7Q0ZMQUdTfQorIElaX0JaSVAyPSR7M30KKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtSS4gLURVTklYIgorLUxGTEFHUzE9IiIKKytMRkxBR1MxPSR7TERGTEFHU30KKyBMRkxBR1MyPSIiCisgTE49ImxuIC1zIgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwYmZiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAxOTAwNDBlYmZjZjUzOTVhNmNjZWRlZGUyY2M5MzQzZDM0ZjBhMTA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogbWFuY2hhIDxtYW5jaGExIEFUIHpvaG8gRE9UIGNvbT4KK0RhdGU6IFdlZCwgMTEgRmViIDIwMTUKK1N1YmplY3Q6IEluZm8tWklQIFVuWmlwIGJ1ZmZlciBvdmVyZmxvdworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0J5IGNhcmVmdWxseSBjcmFmdGluZyBhIGNvcnJ1cHQgWklQIGFyY2hpdmUgd2l0aCAiZXh0cmEgZmllbGRzIiB0aGF0CitwdXJwb3J0IHRvIGhhdmUgY29tcHJlc3NlZCBibG9ja3MgbGFyZ2VyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcKK3VuY29tcHJlc3NlZCBibG9ja3MgaW4gU1RPUkVEIG5vLWNvbXByZXNzaW9uIG1vZGUsIGFuIGF0dGFja2VyIGNhbgordHJpZ2dlciBhIGhlYXAgb3ZlcmZsb3cgdGhhdCBjYW4gcmVzdWx0IGluIGFwcGxpY2F0aW9uIGNyYXNoIG9yCitwb3NzaWJseSBoYXZlIG90aGVyIHVuc3BlY2lmaWVkIGltcGFjdC4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgd2hlbiBleHRyYSBmaWVsZHMgdXNlIFNUT1JFRCBtb2RlLCB0aGUKKyJjb21wcmVzc2VkIiBhbmQgdW5jb21wcmVzc2VkIGJsb2NrIHNpemVzIG1hdGNoLgorCitTaWduZWQtb2ZmLWJ5OiBtYW5jaGEgPG1hbmNoYTEgQVQgem9obyBET1QgY29tPgorLS0tCisgZXh0cmFjdC5jIHwgICAgOCArKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworLS0tIGEvZXh0cmFjdC5jCisrKysgYi9leHRyYWN0LmMKK0BAIC0yMjE3LDYgKzIyMTcsNyBAQCBzdGF0aWMgaW50IHRlc3RfY29tcHJfZWIoX19HX18gZWIsIGViX3NpCisgICAgIHVsZyBlYl91Y3NpemU7CisgICAgIHVjaCAqZWJfdWNwdHI7CisgICAgIGludCByOworKyAgICB1c2ggbWV0aG9kOworIAorICAgICBpZiAoY29tcHJfb2Zmc2V0IDwgNCkgICAgICAgICAgICAgICAgLyogZmllbGQgaXMgbm90IGNvbXByZXNzZWQ6ICovCisgICAgICAgICByZXR1cm4gUEtfT0s7ICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nIGFuZCBzaWduYWwgT0sgKi8KK0BAIC0yMjI2LDYgKzIyMjcsMTMgQEAgc3RhdGljIGludCB0ZXN0X2NvbXByX2ViKF9fR19fIGViLCBlYl9zaQorICAgICAgICAgIGViX3NpemUgPD0gKGNvbXByX29mZnNldCArIEVCX0NNUFJIRUFETEVOKSkpCisgICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgICAgLyogbm8gY29tcHJlc3NlZCBkYXRhISAqLworIAorKyAgICBtZXRob2QgPSBtYWtld29yZChlYiArIChFQl9IRUFEU0laRSArIGNvbXByX29mZnNldCkpOworKyAgICBpZiAoKG1ldGhvZCA9PSBTVE9SRUQpICYmCisrICAgICAgICAoZWJfc2l6ZSAtIGNvbXByX29mZnNldCAtIEVCX0NNUFJIRUFETEVOICE9IGViX3Vjc2l6ZSkpCisrCXJldHVybiBQS19FUlI7CQkJICAvKiBjb21wcmVzc2VkICYgdW5jb21wcmVzc2VkCisrCQkJCQkgICAqIHNob3VsZCBtYXRjaCBpbiBTVE9SRUQKKysJCQkJCSAgICogbWV0aG9kICovCisrCisgICAgIGlmICgKKyAjaWZkZWYgSU5UXzE2QklUCisgICAgICAgICAoKCh1bGcpKGV4dGVudCllYl91Y3NpemUpICE9IGViX3Vjc2l6ZSkgfHwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcF82LjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMGE3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBleHRyYWN0aW5nIGFuZCB2aWV3aW5nIGZpbGVzIGluIC56aXAgYXJjaGl2ZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm8temlwLm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OTRjYWVjNWE1MWVmNTVlZjcxMWVlNGU4YjFjNjllMjkiCitQRSA9ICIxIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvdW56aXA2MC50Z3ogXAorCWZpbGU6Ly9hdm9pZC1zdHJpcC5wYXRjaCBcCisJZmlsZTovL2RlZmluZS1sZGZsYWdzLnBhdGNoIFwKKwlmaWxlOi8vMDYtdW56aXA2MC1hbHQtaWNvbnYtdXRmOF9DVkUtMjAxNS0xMzE1LnBhdGNoIFwKKwlmaWxlOi8vdW56aXAtNi4wX292ZXJmbG93My5kaWZmIFwKKwlmaWxlOi8vMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2ggXAorCWZpbGU6Ly8xMC1jdmUtMjAxNC04MTQwLXRlc3QtY29tcHItZWIucGF0Y2ggXAorCWZpbGU6Ly8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MmI0OTA0MDc0ODk1MjFkYjg2M2I1MjNhN2Y4NjM3NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMzZkOTY5OTE2NDZkMDQ0OWVkMGFhOTUyZTRmYmUyMWI0NzZjZTk5NGFiYzI3NmU0OWQzMGU2ODY3MDhiZDM3IgorUyA9ICIke1dPUktESVJ9L3VuemlwNjAiCisKKyMgTWFrZWZpbGUgdXNlcyBDRl9OT09QVCBpbnN0ZWFkIG9mIENGTEFHUy4gIFdlIGxpZnRlZCB0aGUgdmFsdWVzIGZyb20KKyMgTWFrZWZpbGUgYW5kIGFkZCBDRkxBR1MuICBPcHRpbWl6YXRpb24gd2lsbCBiZSBvdmVycmlkZW4gYnkgdW56aXAKKyMgY29uZmlndXJlIHRvIGJlIC1PMy4KKyMKK0VYVFJBX09FTUFLRSArPSAiU1RSSVA9dHJ1ZSBMRjI9JycgXAorICAgICAgICAgICAgICAgICdDRl9OT09QVD0tSS4gLUliemlwMiAtRFVOSVggJHtDRkxBR1N9JyIKKworZXhwb3J0IExEID0gIiR7Q0N9IgorTERfY2xhc3MtbmF0aXZlID0gIiR7Q0N9IgorCitkb19jb21waWxlKCkgeworICAgICAgICBvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZ2VuZXJpYworfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgaW5zdGFsbCBwcmVmaXg9JHtEfSR7cHJlZml4fQorCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfQorCW12ICR7RH0ke3ByZWZpeH0vbWFuLyogJHtEfSR7bWFuZGlyfQorCXJtZGlyICR7RH0ke3ByZWZpeH0vbWFuLworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ1bnppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1bnppcF0gPSAiJHtiaW5kaXJ9L3VuemlwIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeC1waW5nLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYjljNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0ZpeCBwaW5nIG1vZGUgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgIAorCitXaGVuIHdhdGNoZG9nIHdvcmtzIG9uIHBpbmcgbW9kZSwgdGhlIHN5c3RlbSB3aWxsIGJlIHJlYm9vdGVkIHNpbmNlCit3YXRjaGRvZyBjYW4gbm90IHJlY2VpdmUgdGhlIGV4cGVjdGVkIEVDT1JFUExZIG9uIGEgc2V0dGluZyBpbnRlcnZhbC4KKworUGluZyBtb2RlIHVzZXMgYSByYXcgc29ja2V0IHRvIHNlbmQgYSBFQ08gcGFja2V0LCB0aGVuIHVzZXMgc2VsZWN0KCkKK3RvIHdhaXQgYW5kIHJlY3Zmcm9tKCkgdG8gcmVjZWl2ZSB0aGUgRUNPUkVQTFkgcGFja2V0LCBpZiBzZWxlY3QoKQorc2hvd3MgdGhlIGRhdGEgaXMgcmVhZHksIGFuZCB0aGUgZGF0YSBpcyBub3QgdGhlIGV4cGVjdGVkIEVDT1JFUExZLAorYW5kIHdhaXRpbmcgdGltZSBpcyBub3Qgb3ZlcmR1ZSwgaXQgd2lsbCBjb250aW51ZSB1c2Ugc2VsZWN0KCkgYW5kCityZWN2ZnJvbSgpLgorCitQcm9ibGVtIGlzIHRoYXQgdGhlIHJhdyBzb2NrZXQgY2FuIHJlY2VpdmUgYW55IGljbXAgcGFja2V0cywgaWYgd2UgZG8KK25vdCBzZXQgZmlsdGVycywgYW5kIHRoZXJlIGFyZSBtYW55IGljbXAgcGFja2V0cyBvbiBzb2NrZXQsIHRoaXMKK3Byb2dyYW0gd2lsbCBub3QgZmluZCBpdHMgaW50ZXJlc3RlZCBFQ09SRVBMWSBwYWNrZXQgaW4gYSBzcGVjaWFsCitpbnRlcnZhbCwgd2hpY2ggbWFrZXMgdGhlIHBpbmcgbW9kZSBmYWlsLgorCisKK090aGVyIHByb2dyYW0gaXMgdGhhdCB3YXRjaGRvZyBzb21ldGltZSBjYW4gbm90IHJlYWNoIHRoZSBjYWxsIG9mCityZWN2ZnJvbSB0byB0cnkgdG8gcmVjZWl2ZSBwYWNrZXRzIHNpbmNlIHR2X3NlYyBvZiBzdHJ1Y3QgdGltZXZhbAorb2Ygc2VsZWN0IHBhcmFtZXRlciBpcyAwLgorCitUaGUgdGltZW91dCBvZiBzZWxlY3QoKSBpcyB0aGUgcmVzdWx0IG9mIHBpbmcgaW50ZXJ2YWwgbWludXNpbmcgdGhlCit0aW1lIG9mIGNhbGxpbmcgZ2V0dGltZW9mZGF5IHNwZW5kaW5nLCB3aGVuIHBpbmcgaW50ZXJ2YWwgaXMgMSBzZWNvbmQsCithbmQgdGhlIGNhbGwgb2YgZ2V0dGltZW9mZGF5KCkgc3BlbmRzIHNldmVyYWwgdXNlY29uZHMsIHRoZSB0dl9zZWMgb2YKK3N0cnVjdCB0aW1ldmFsIG9mIHNlbGVjdCBwYXJhbWV0ZXIgbXVzdCBiZSAwLCBhdCB0aGF0IGNvbmRpdGlvbiwgd2UKK3Nob3VsZCBpdCBpcyB2YWxpZCBvZiB0dl9zZWMgb2Ygc3RydWN0IHRpbWV2YWwgb2Ygc2VsZWN0IHBhcmFtZXRlciBiZSAwIAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvbmV0LmMgICAgICB8ICAgIDIgKy0KKyBzcmMvd2F0Y2hkb2cuYyB8ICAgIDUgKysrKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IHdhdGNoZG9nLTUuMTQvc3JjL3dhdGNoZG9nLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3YXRjaGRvZy01LjE0Lm9yaWcvc3JjL3dhdGNoZG9nLmMKKysrKyB3YXRjaGRvZy01LjE0L3NyYy93YXRjaGRvZy5jCitAQCAtMjQsNiArMjQsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisgI2luY2x1ZGUgPGxpbnV4L29vbS5oPgorKyNpbmNsdWRlIDxsaW51eC9pY21wLmg+CisgI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorSW5kZXg6IHdhdGNoZG9nLTUuMTQvc3JjL25ldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xNC5vcmlnL3NyYy9uZXQuYworKysrIHdhdGNoZG9nLTUuMTQvc3JjL25ldC5jCitAQCAtMTEsNyArMTEsOCBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CistI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorKyNpbmNsdWRlIDxsaW51eC9pY21wLmg+CisrLy8jaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4JCS8qIGZvciBnZXRob3N0bmFtZSgpIGV0YyAqLworQEAgLTE3OSw2ICsxODAsOSBAQCBpbnQgb3Blbl9uZXRjaGVjayhzdHJ1Y3QgbGlzdCAqdGxpc3QpCisgeworIAlzdHJ1Y3QgbGlzdCAqYWN0OworIAlpbnQgaG9sZCA9IDA7CisrCXN0cnVjdCBpY21wX2ZpbHRlciBmaWx0OworKwlmaWx0LmRhdGEgPSB+KDE8PElDTVBfRUNIT1JFUExZKTsKKysKKyAKKyAJaWYgKHRsaXN0ICE9IE5VTEwpIHsKKyAJCWZvciAoYWN0ID0gdGxpc3Q7IGFjdCAhPSBOVUxMOyBhY3QgPSBhY3QtPm5leHQpIHsKK0BAIC0yMDIsNiArMjA2LDcgQEAgaW50IG9wZW5fbmV0Y2hlY2soc3RydWN0IGxpc3QgKnRsaXN0KQorIAkJCSAgICBmYXRhbF9lcnJvcihFWF9TWVNFUlIsICJlcnJvciBvcGVuaW5nIHNvY2tldCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCQl9CisgCisrCQkJc2V0c29ja29wdChuZXQtPnNvY2tfZnAsIFNPTF9SQVcsIElDTVBfRklMVEVSLCAoY2hhciopJmZpbHQsIHNpemVvZihmaWx0KSk7CisgCQkJLyogdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGJyb2FkY2FzdCBwaW5ncyB0byB3b3JrICovCisgCQkJKHZvaWQpc2V0c29ja29wdChuZXQtPnNvY2tfZnAsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgKGNoYXIgKikmaG9sZCwgc2l6ZW9mKGhvbGQpKTsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkM2ExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL2ZpeHNlcGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZpeCBvdXQgb2YgdHJlZSBidWlsZCBzdXBwb3J0OgorCit8IGluc3RhbGxpbmcgL2V0Yy93YXRjaGRvZy5jb25mCit8ICAvYmluL21rZGlyIC1wICcvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvaW1hZ2UvdXNyL3NoYXJlL21hbi9tYW41JworfCAgL2Jpbi9ta2RpciAtcCAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuOCcKK3wgIC91c3IvYmluL2luc3RhbGwgLWMgLW0gNjQ0IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dhdGNoZG9nLmNvbmYuNSAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNScKK3wgIC91c3IvYmluL2luc3RhbGwgLWMgLW0gNjQ0IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dhdGNoZG9nLjggL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2Rfa2VlcGFsaXZlLjggL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL3dhdGNoZG9nLTUuMTMvd2RfaWRlbnRpZnkuOCAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuOCcKK3wgL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHdhdGNoZG9nLmNvbmYnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8IG1ha2VbMl06ICoqKiBbaW5zdGFsbC1ldGMtbG9jYWxdIEVycm9yIDEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTMvMDMvMjEKKworSW5kZXg6IHdhdGNoZG9nLTUuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3YXRjaGRvZy01LjEzLm9yaWcvTWFrZWZpbGUuYW0JMjAxMy0wMi0wMSAxMToxNTo0NC4wMDAwMDAwMDAgKzAwMDAKKysrKyB3YXRjaGRvZy01LjEzL01ha2VmaWxlLmFtCTIwMTMtMDMtMjEgMTE6NTk6MzUuNjM3MTM5MDMxICswMDAwCitAQCAtMTYsNyArMTYsNyBAQAorIAllbHNlIFwKKyAJICAgICAgICBlY2hvICJpbnN0YWxsaW5nICQoQ09ORklHX0ZJTEVOQU1FKSI7IFwKKyAJCSQobWtpbnN0YWxsZGlycykgYGRpcm5hbWUgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKWA7IFwKKy0JICAgICAgICAkKElOU1RBTExfREFUQSkgd2F0Y2hkb2cuY29uZiAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpOyBcCisrCSAgICAgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS93YXRjaGRvZy5jb25mICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSk7IFwKKyAJZmkKKyAKKyBpbnN0YWxsLWRhdGEtbG9jYWw6IGluc3RhbGwtZXRjLWxvY2FsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjI5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZi5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL3dhdGNoZG9nLmNvbmYJMjAxMy0wMi0wMSAxMjoxNTo0NC4wMDAwMDAwMDAgKzAxMDAKKysrKyB3YXRjaGRvZy01LjEzL3dhdGNoZG9nLmNvbmYJMjAxNC0xMS0xMyAxMDo1OTo0My4yMzM5NDMwMDAgKzAxMDAKK0BAIC0yMCw3ICsyMCw3IEBACisgI3Rlc3QtYmluYXJ5CQk9IAorICN0ZXN0LXRpbWVvdXQJCT0gCisgCistI3dhdGNoZG9nLWRldmljZQk9IC9kZXYvd2F0Y2hkb2cKKyt3YXRjaGRvZy1kZXZpY2UJPSAvZGV2L3dhdGNoZG9nCisgCisgIyBEZWZhdWx0cyBjb21waWxlZCBpbnRvIHRoZSBiaW5hcnkKKyAjdGVtcGVyYXR1cmUtZGV2aWNlCT0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1pbml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWluaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhOGVlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1pbml0LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKKy0tLSB3YXRjaGRvZy01LjEzLm9yaWcvcmVkaGF0L3dhdGNoZG9nLmluaXQJMjAxNC0xMS0xMiAxNzoxODozOS4xMjU5NDMwMDAgKzAxMDAKKysrKyB3YXRjaGRvZy01LjEzL3JlZGhhdC93YXRjaGRvZy5pbml0CTIwMTQtMTEtMTIgMTg6Mjc6MzYuMTg5OTQzMDAwICswMTAwCitAQCAtNyw3ICs3LDcgQEAKKyAjICAgICAgICAgICAgICAgICBIZW5uaW5nIFAuIFNjaG1pZWRlaGF1c2VuIDxocHNAdGFuc3RhYWZsLmRlPgorIAorICMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCistLiAvZXRjL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisgCisgWyAteCAvdXNyL3NiaW4vd2F0Y2hkb2cgLWEgLWUgL2V0Yy93YXRjaGRvZy5jb25mIF0gfHwgZXhpdCAwCisgCitAQCAtMjMsMjIgKzIzLDIyIEBACisgCisgc3RhcnQoKSB7CisgCistCWVjaG8gLW4gJCJTdGFydGluZyAkcHJvZzogIgorKwllY2hvIC1uICJTdGFydGluZyAkcHJvZzogIgorIAlpZiBbIC1uICIkKHBpZG9mcHJvYyAkcHJvZykiIF07IHRoZW4KKy0JCWVjaG8gLW4gJCIkcHJvZzogYWxyZWFkeSBydW5uaW5nIgorLQkJZWNob19mYWlsdXJlCisrCQllY2hvIC1uICIkcHJvZzogYWxyZWFkeSBydW5uaW5nICIKKysJCWZhaWx1cmUKKyAJCWVjaG8KKyAJCXJldHVybiAxCisgCWZpCisgCWlmIFsgIiRWRVJCT1NFIiA9ICJ5ZXMiIF07IHRoZW4KKy0JICAgIGRhZW1vbiAvdXNyL3NiaW4vJHtwcm9nfSAtdgorKwkgICAgL3Vzci9zYmluLyR7cHJvZ30gLXYKKyAJZWxzZQorLQkgICAgZGFlbW9uIC91c3Ivc2Jpbi8ke3Byb2d9CisrCSAgICAvdXNyL3NiaW4vJHtwcm9nfQorICAgICAgICAgZmkKKyAJUkVUVkFMPSQ/CisgCVsgJFJFVFZBTCAtZXEgMCBdICYmIHRvdWNoICRsb2NrZmlsZQorLQlbICRSRVRWQUwgLWVxIDAgXSAmJiBlY2hvX3N1Y2Nlc3MKKy0JWyAkUkVUVkFMIC1uZSAwIF0gJiYgZWNob19mYWlsdXJlCisrCVsgJFJFVFZBTCAtZXEgMCBdICYmIHN1Y2Nlc3MKKysJWyAkUkVUVkFMIC1uZSAwIF0gJiYgZmFpbHVyZQorIAllY2hvCisgCXJldHVybiAkUkVUVkFMCisgfQorQEAgLTUwLDggKzUwLDEwIEBACisgCSMgYW5kIHJlYm9vdCB0aGUgYm94LgorIAlraWxscHJvYyAkcHJvZyAtVEVSTQorIAlSRVRWQUw9JD8KKy0JZWNobworIAlbICRSRVRWQUwgLWVxIDAgXSAmJiBybSAtZiAkbG9ja2ZpbGUgJHBpZGZpbGUKKysJWyAkUkVUVkFMIC1lcSAwIF0gJiYgc3VjY2VzcworKwlbICRSRVRWQUwgLW5lIDAgXSAmJiBmYWlsdXJlCisrCWVjaG8KKyAJcmV0dXJuICRSRVRWQUwKKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZ181LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzBhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlNvZnR3YXJlIHdhdGNoZG9nIgorREVTQ1JJUFRJT04gPSAiV2F0Y2hkb2cgaXMgYSBkYWVtb24gdGhhdCBjaGVja3MgaWYgeW91ciBzeXN0ZW0gaXMgc3RpbGwgXAord29ya2luZy4gSWYgcHJvZ3JhbXMgaW4gdXNlciBzcGFjZSBhcmUgbm90IGxvbmdlciBleGVjdXRlZCBcCitpdCB3aWxsIHJlYm9vdCB0aGUgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXRjaGRvZy5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE3MjAzMCZhdGlkPTg2MDE5NCIKKworTElDRU5TRSA9ICJHUEwtMi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVjYzA1NTFiZjU0YWQ5N2Y2YjU0MTcyMGY4NGQ2NTY5IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS93YXRjaGRvZy93YXRjaGRvZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4c2VwYnVpbGQucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXgtcGluZy1mYWlsdXJlLnBhdGNoIFwKKwkgICBmaWxlOi8vd2F0Y2hkb2ctaW5pdC5wYXRjaCBcCisJICAgZmlsZTovL3dhdGNoZG9nLWNvbmYucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YjJkYmEwYzU5Mzk0MmY0YWNjMTAwYmNhMGQ1NjBjNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MjBiMmY0OWU5ODc5ZjJlODVjNzNkNGMxZjQyMmY5MTAxZTZiMzhlODI0ZmVhMjQxNGJlZmQ4YmI2ODY2YWQxIgorCitpbmhlcml0IGF1dG90b29scworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAid2F0Y2hkb2cuc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAxNSAxIDIgMyA0IDUgLiBzdG9wIDg1IDAgNiAuIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtbW9kdWxlLXNvZnRkb2ciCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLUQgJHtTfS9yZWRoYXQvd2F0Y2hkb2cuaW5pdCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kL3dhdGNoZG9nLnNoCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWI4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYwpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkNvbnNvbGUgVVJMIGRvd25sb2FkIHV0aWxpdHkgc3VwcG9ydGluZyBIVFRQLCBGVFAsIGV0YyIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvd2dldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAiZ251dGxzIHpsaWIgbGlicGNyZSIKKworSU5DX1BSID0gInIxNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1pcHY2IC0td2l0aC1zc2w9Z251dGxzIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtaXJpIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliZ251dGxzLXByZWZpeCBhY19jdl9oZWFkZXJfdXVpZF91dWlkX2g9bm8iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIndnZXQiCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAiY2EtY2VydGlmaWNhdGVzIgorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYnV1aWRdID0gIi0td2l0aC1saWJ1dWlkLCAtLXdpdGhvdXQtbGlidXVpZCx1dGlsLWxpbnV4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiM2M2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogd2dldC0xLjE2LjMvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2dldC0xLjE2LjMub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyB3Z2V0LTEuMTYuMy9saWIvTWFrZWZpbGUuYW0KK0BAIC04NDYsNyArODQ2LDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvZml4X21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC9maXhfbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhMmU3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvZml4X21ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHdnZXQtMS4xMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3Z2V0LTEuMTIub3JpZy9jb25maWd1cmUuYWMJMjAwOS0wOS0yMiAwOTozOTo0OS4wMDAwMDAwMDAgLTA3MDAKKysrKyB3Z2V0LTEuMTIvY29uZmlndXJlLmFjCTIwMTEtMTAtMTkgMjA6MzI6NTMuNzE0ODEyMTYwIC0wNzAwCitAQCAtMTc3LDcgKzE3Nyw3IEBACisgZG5sIEdldHRleHQKKyBkbmwKKyBBTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdLFtuZWVkLW5nZXR0ZXh0XSkKKy1BTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE3XSkKKytBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE4XSkKKyAKKyBBQ19QUk9HX1JBTkxJQgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE2LjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0XzEuMTYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM0YTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE2LjMuYmIKQEAgLTAsMCArMSw5IEBACitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vd2dldC93Z2V0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjYxZDkwMTFiOTlmODI0MTA2YTVkNWEwNWRkMGY2M2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWYxYzZkMDlkNzE0OGMxYzJkOWZkMGVhNjU1ZGNmNGRjYzQwN2RlYjJkYjMyZDQxMjYyNTFjYTAyNDVjYjY3MCIKKworcmVxdWlyZSB3Z2V0LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1Y2RjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorU3ViamVjdDogW1BBVENIXSBhdXRvbWFrZSBmb3JlaWduIHN0cmljdG5lc3MKKworVXNlIGZvcmVpZ24gc3RyaWN0bmVzcyB0byBhdm9pZCBhdXRvbWFrZSBlcnJvcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gbm8gbG9uZ2VyIGFjdGl2ZV0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDUgKysrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjMwYjZmNS4uYmQzMjIyYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMSw2ICsxLDcgQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKy1BQ19JTklUKHdoaWNoLmMpCistQU1fSU5JVF9BVVRPTUFLRSh3aGljaCwgMi4xOCkKKytBQ19JTklUKFt3aGljaF0sWzIuMThdKQorK0FDX0NPTkZJR19TUkNESVIod2hpY2guYykKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKyBBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorLS0gCisxLjcuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5YjFhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2ZpeF9uYW1lX2NvbmZsaWN0X2dyb3VwX21lbWJlci5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3RoaXMgaXMgMi4xOChHUEx2Mikgc3BlY2lmaWNdCisKKyMgZ2xpYmMgYWxzbyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBncm91cF9tZW1iZXIuIFRvIGF2b2lkIG5hbWUgY29uZmxpY3QsCisjIGhlcmUgbGV0IHVzIGFwcGVuZCBhICJfIiB0byB3aGljaCdzIHZlcnNpb24uCisjCisjIFNpZ25lZC1vZmYtYnkgRGV4dWFuIEN1aSA8ZGV4dWFuLmN1aUBpbnRlbC5jb20+LCAyMDEwLTA4LTIwCisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCistLS0gd2hpY2gtMi4xOC9iYXNoLmMKKysrKyB3aGljaC0yLjE4L2Jhc2guYworQEAgLTQ1LDcgKzQ1LDEyIEBACisgICogLSBjaGFuZ2VkIGFsbCBvY2N1cmVuY2VzIG9mICdnaWRfdCcgaW50byAnR0lEX1QnLgorICAqIC0gZXhwb3J0ZWQgZnVuY3Rpb25zIG5lZWRlZCBpbiB3aGljaC5jCisgICovCistc3RhdGljIGludCBncm91cF9tZW1iZXIgKEdJRF9UIGdpZCk7CisrCisrLyoKKysgKiBnbGliYyBhbHNvIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uIGdyb3VwX21lbWJlci4gVG8gYXZvaWQgbmFtZSBjb25mbGljdCwKKysgKiBoZXJlIGxldCB1cyBhcHBlbmQgYSAiXyIgdG8gd2hpY2gncyB2ZXJzaW9uLgorKyAqLworK3N0YXRpYyBpbnQgX2dyb3VwX21lbWJlciAoR0lEX1QgZ2lkKTsKKyBzdGF0aWMgY2hhciogZXh0cmFjdF9jb2xvbl91bml0IChjaGFyIGNvbnN0KiBzdHJpbmcsIGludCAqcF9pbmRleCk7CisgCisgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0BAIC0yMDAsOCArMjA1LDggQEAKKyAKKyAvKiBGcm9tIGJhc2gtMi4wNWIgLyBnZW5lcmFsLmMgLyBsaW5lIDgwNSAqLworIC8qIFJldHVybiBub24temVybyBpZiBHSUQgaXMgb25lIHRoYXQgd2UgaGF2ZSBpbiBvdXIgZ3JvdXBzIGxpc3QuICovCistaW50CistZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpCisrc3RhdGljIGludAorK19ncm91cF9tZW1iZXIgKEdJRF9UIGdpZCkKKyB7CisgI2lmIGRlZmluZWQgKEhBVkVfR0VUR1JPVVBTKQorICAgcmVnaXN0ZXIgaW50IGk7CitAQCAtMjkwLDcgKzI5NSw3IEBACisgICAgIHJldHVybiAoWF9CSVQgKHVfbW9kZV9iaXRzIChmaW5mby5zdF9tb2RlKSkpID8gKEZTX0VYSVNUUyB8IEZTX0VYRUNBQkxFKSA6IEZTX0VYSVNUUzsKKyAKKyAgIC8qIE90aGVyd2lzZSwgaWYgd2UgYXJlIGluIHRoZSBvd25pbmcgZ3JvdXAsIHRoZSBncm91cCBwZXJtaXNzaW9ucyBhcHBseS4gKi8KKy0gIGlmIChncm91cF9tZW1iZXIgKGZpbmZvLnN0X2dpZCkpCisrICBpZiAoX2dyb3VwX21lbWJlciAoZmluZm8uc3RfZ2lkKSkKKyAgICAgcmV0dXJuIChYX0JJVCAoZ19tb2RlX2JpdHMgKGZpbmZvLnN0X21vZGUpKSkgPyAoRlNfRVhJU1RTIHwgRlNfRVhFQ0FCTEUpIDogRlNfRVhJU1RTOworIAorICAgLyogT3RoZXJ3aXNlLCBpZiB3ZSBhcmUgaW4gdGhlIG90aGVyIGdyb3VwLCB0aGUgb3RoZXIgcGVybWlzc2lvbnMgYXBwbHkuICovCitAQCAtMzMxLDcgKzMzNiw3IEBACisgLyogR2l2ZW4gYSBzdHJpbmcgY29udGFpbmluZyB1bml0cyBvZiBpbmZvcm1hdGlvbiBzZXBhcmF0ZWQgYnkgY29sb25zLAorICAgIHJldHVybiB0aGUgbmV4dCBvbmUgcG9pbnRlZCB0byBieSAoUF9JTkRFWCksIG9yIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUuCisgICAgQWR2YW5jZSAoUF9JTkRFWCkgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgY29sb24uICovCistY2hhcioKKytzdGF0aWMgY2hhcioKKyBleHRyYWN0X2NvbG9uX3VuaXQgKGNoYXIgY29uc3QqIHN0cmluZywgaW50KiBwX2luZGV4KQorIHsKKyAgIGludCBpLCBzdGFydCwgbGVuOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMjEvYXV0b21ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4yMS9hdXRvbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDBmMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMjEvYXV0b21ha2UucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBkYXRlIGF1dG9jb25mIHByb2xvZ3VlIHRvIHVzZSAiZm9yZWlnbiIgc3RyaWN0bmVzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBkOTc0NDYxLi5hMjBkZmE4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xLDcgKzEsNyBAQAorIGRubCBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIEFDX0lOSVQoW3doaWNoXSwgWzIuMjFdKQorIEFDX0NPTkZJR19TUkNESVIod2hpY2guYykKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMTguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjZjYzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMTguYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJEaXNwbGF5cyB0aGUgZnVsbCBwYXRoIG9mIHNoZWxsIGNvbW1hbmRzIgorREVTQ1JJUFRJT04gPSAiV2hpY2ggaXMgYSB1dGlsaXR5IHRoYXQgcHJpbnRzIG91dCB0aGUgZnVsbCBwYXRoIG9mIHRoZSBcCitleGVjdXRhYmxlcyB0aGF0IGJhc2goMSkgd291bGQgZXhlY3V0ZSB3aGVuIHRoZSBwYXNzZWQgXAorcHJvZ3JhbSBuYW1lcyB3b3VsZCBoYXZlIGJlZW4gZW50ZXJlZCBvbiB0aGUgc2hlbGwgcHJvbXB0LiBcCitJdCBkb2VzIHRoaXMgYnkgdXNpbmcgdGhlIGV4YWN0IHNhbWUgYWxnb3JpdGhtIGFzIGJhc2guIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2NhcmxvMTcuaG9tZS54czRhbGwubmwvd2hpY2gvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3Mvd2hpY2gvd2hpY2gtMi4xOC50YXIuZ3ovNDJkNTE5MzhlNDhiOTFmNmUxOWZhYmYyMTZmNWMzZTkvd2hpY2gtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9uYW1lX2NvbmZsaWN0X2dyb3VwX21lbWJlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQyZDUxOTM4ZTQ4YjkxZjZlMTlmYWJmMjE2ZjVjM2U5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0NDVjZDdlMDJlYzBjMjZhNDRmZDU2MDk4NDY0ZGVkMDY0YmE1ZDkzZGQyZTE1ZWMxMjQxMGJhNTZiMmU1NDQiCisKK0RFUEVORFMgPSAiY3dhdXRvbWFjcm9zLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCU9MRD0iQEFDTE9DQUxfQ1dGTEFHU0AiCisJTkVXPSItSSAke1NUQUdJTkdfRElSX05BVElWRX0vJHtkYXRhZGlyfS9jd2F1dG9tYWNyb3MvbTQiCisJc2VkIC1pICJzIyR7T0xEfSMke05FV30jZyIgYGdyZXAgLXJsICR7T0xEfSAke1N9YAorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3aGljaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2hfMi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY4N2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMjEuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJEaXNwbGF5cyB0aGUgZnVsbCBwYXRoIG9mIHNoZWxsIGNvbW1hbmRzIgorREVTQ1JJUFRJT04gPSAiV2hpY2ggaXMgYSB1dGlsaXR5IHRoYXQgcHJpbnRzIG91dCB0aGUgZnVsbCBwYXRoIG9mIHRoZSBcCitleGVjdXRhYmxlcyB0aGF0IGJhc2goMSkgd291bGQgZXhlY3V0ZSB3aGVuIHRoZSBwYXNzZWQgXAorcHJvZ3JhbSBuYW1lcyB3b3VsZCBoYXZlIGJlZW4gZW50ZXJlZCBvbiB0aGUgc2hlbGwgcHJvbXB0LiBcCitJdCBkb2VzIHRoaXMgYnkgdXNpbmcgdGhlIGV4YWN0IHNhbWUgYWxnb3JpdGhtIGFzIGJhc2guIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL2NhcmxvMTcuaG9tZS54czRhbGwubmwvd2hpY2gvIgorCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2hpY2guYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE3O21kNT1hOTk2MzY5M2FmMjI3MmU3YThkZjZmMjMxMTY0ZTdhMiIKK0RFUEVORFMgICAgID0gImN3YXV0b21hY3Jvcy1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitQUiA9ICJyMyIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pYmVydHkiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS93aGljaC93aGljaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOTdmZjFhMzI0YWUwMmUwYTNiMDM2OWYwN2E3NTQ0YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNGEyNDViOTQxMjRiMzc3ZDhiNDk2NDZiZjQyMWY5MTU1ZDM2YWE3NjE0YjZlYmY4MzcwNWQzZmZjNzZlYWFkIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MlQEFDTE9DQUxfQ1dGTEFHU0AlLUkgJHtTVEFHSU5HX0RJUl9OQVRJVkV9L3Vzci9zaGFyZS9jd2F1dG9tYWNyb3MvbTQlZycgJHtTfS9NYWtlZmlsZS5hbSAke1N9L3RpbGRlL01ha2VmaWxlLmFtCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIndoaWNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlscy8wMDAxLVJlaW5zdGF0ZS14ZGctdGVybWluYWwucGF0Y2gKQEAgLTAsMCArMSw2NzIgQEAKK0Zyb20gMTc0YWE3MjA2ZjRiMzA4ZDRkMjI5MmJiODA2N2EwN2Q4Y2M3MTVjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUdWUsIDI5IEFwciAyMDE0IDA3OjI5OjMyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlaW5zdGF0ZSB4ZGctdGVybWluYWwKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtSZXZlcnRdCistLS0KKyBzY3JpcHRzL01ha2VmaWxlLmluICB8ICAgNiArLQorIHNjcmlwdHMveGRnLXRlcm1pbmFsIHwgNjIyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNjI1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNzU1IHNjcmlwdHMveGRnLXRlcm1pbmFsCisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmluIGIvc2NyaXB0cy9NYWtlZmlsZS5pbgoraW5kZXggMmM3ZDJhYy4uYmVmMTBkMSAxMDA2NDQKKy0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuaW4KKysrKyBiL3NjcmlwdHMvTWFrZWZpbGUuaW4KK0BAIC0yMCwxMSArMjAsMTEgQEAgU0NSSVBUUwkJPSBcCisgICAgIHhkZy1vcGVuIFwKKyAgICAgeGRnLWVtYWlsIFwKKyAgICAgeGRnLXNjcmVlbnNhdmVyIFwKKy0gICAgeGRnLXNldHRpbmdzCisrICAgIHhkZy1zZXR0aW5ncyBcCisrICAgIHhkZy10ZXJtaW5hbAorICMgICAgeGRnLXN1CisgIyAgICB4ZGctY29weSBcCisgIyAgICB4ZGctZmlsZS1kaWFsb2cKKy0jICAgIHhkZy10ZXJtaW5hbAorIAorIE1BTlBBR0VTPQkkKFNDUklQVFM6JT1tYW4vJS4xKQorIFdFQlBBR0VTPQkkKFNDUklQVFM6JT0lLmh0bWwpCitAQCAtNDIsNyArNDIsNyBAQCByZWxlYXNlOglzY3JpcHRzIGh0bWwgbWFuCisgCXJtIC1mIHhkZy0qLmluICp+IEhBQ0tJTkcgZ2VuZXJhdGUtaGVscC1zY3JpcHQuYXdrCisgCXJtIC1yZiBkZXNjLworIAlybSAtcmYgeHNsLworLQlybSAtZiB4ZGctZmlsZS1kaWFsb2cgeGRnLXN1IHhkZy1jb3B5IHhkZy10ZXJtaW5hbAorKwlybSAtZiB4ZGctZmlsZS1kaWFsb2cgeGRnLXN1IHhkZy1jb3B5CisgCisgZGlzdGNsZWFuOiBjbGVhbgorIAlybSAtZiBNYWtlZmlsZQorZGlmZiAtLWdpdCBhL3NjcmlwdHMveGRnLXRlcm1pbmFsIGIvc2NyaXB0cy94ZGctdGVybWluYWwKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi40YmQ5MjA1CistLS0gL2Rldi9udWxsCisrKysgYi9zY3JpcHRzL3hkZy10ZXJtaW5hbAorQEAgLTAsMCArMSw2MjIgQEAKKysjIS9iaW4vc2gKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyAgIHhkZy10ZXJtaW5hbAorKyMKKysjICAgVXRpbGl0eSBzY3JpcHQgdG8gb3BlbiB0aGUgcmVnaXN0ZXJlZCB0ZXJtaW5hbCBlbXVsYXRvcgorKyMKKysjICAgUmVmZXIgdG8gdGhlIHVzYWdlKCkgZnVuY3Rpb24gYmVsb3cgZm9yIHVzYWdlLgorKyMKKysjICAgQ29weXJpZ2h0IDIwMDktMjAxMCwgRmF0aGkgQm91ZHJhIDxmYWJvQGZyZWVkZXNrdG9wLm9yZz4KKysjICAgQ29weXJpZ2h0IDIwMDktMjAxMCwgUmV4IERpZXRlciA8cmRpZXRlckBmZWRvcmFwcm9qZWN0Lm9yZz4KKysjICAgQ29weXJpZ2h0IDIwMDYsIEtldmluIEtyYW1tZXIgPGtldmluLmtyYW1tZXJAZ214LmF0PgorKyMKKysjICAgTElDRU5TRToKKysjCisrIyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisrIyAgIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisrIyAgIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKysjICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisrIyAgIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorKyMgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKyMKKysjICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKysjICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrIworKyMgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworKyMgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKysjICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKysjICAgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKysjICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisrIyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorKyMgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisrIworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKyttYW51YWxwYWdlKCkKKyt7CisrY2F0IDw8IF9NQU5VQUxQQUdFCisrTmFtZQorKworKyAgIHhkZy10ZXJtaW5hbCAtIG9wZW5zIHRoZSB1c2VyJ3MgcHJlZmVycmVkIHRlcm1pbmFsIGVtdWxhdG9yIGFwcGxpY2F0aW9uCisrCisrU3lub3BzaXMKKysKKysgICB4ZGctdGVybWluYWwgW2NvbW1hbmRdCisrCisrICAgeGRnLXRlcm1pbmFsIHsgLS1oZWxwIHwgLS1tYW51YWwgfCAtLXZlcnNpb24gfQorKworK0Rlc2NyaXB0aW9uCisrCisrICAgeGRnLXRlcm1pbmFsIG9wZW5zIHRoZSB1c2VyJ3MgcHJlZmVycmVkIHRlcm1pbmFsIGVtdWxhdG9yIGFwcGxpY2F0aW9uLiBJZgorKyAgIGEgY29tbWFuZCBpcyBwcm92aWRlZCB0aGUgY29tbWFuZCB3aWxsIGJlIGV4ZWN1dGVkIGJ5IHRoZSBzaGVsbCB3aXRoaW4gdGhlCisrICAgbmV3bHkgb3BlbmVkIHRlcm1pbmFsIHdpbmRvdy4KKysKKysgICB4ZGctdGVybWluYWwgaXMgZm9yIHVzZSBpbnNpZGUgYSBkZXNrdG9wIHNlc3Npb24gb25seS4gSXQgaXMgbm90CisrICAgcmVjb21tZW5kZWQgdG8gdXNlIHhkZy10ZXJtaW5hbCBhcyByb290LgorKworK09wdGlvbnMKKysKKysgICAtLWhlbHAKKysgICAgICAgICAgIFNob3cgY29tbWFuZCBzeW5vcHNpcy4KKysKKysgICAtLW1hbnVhbAorKyAgICAgICAgICAgU2hvdyB0aGlzIG1hbnVhbCBwYWdlLgorKworKyAgIC0tdmVyc2lvbgorKyAgICAgICAgICAgU2hvdyB0aGUgeGRnLXV0aWxzIHZlcnNpb24gaW5mb3JtYXRpb24uCisrCisrRXhpdCBDb2RlcworKworKyAgIEFuIGV4aXQgY29kZSBvZiAwIGluZGljYXRlcyBzdWNjZXNzIHdoaWxlIGEgbm9uLXplcm8gZXhpdCBjb2RlIGluZGljYXRlcworKyAgIGZhaWx1cmUuIFRoZSBmb2xsb3dpbmcgZmFpbHVyZSBjb2RlcyBjYW4gYmUgcmV0dXJuZWQ6CisrCisrICAgMQorKyAgICAgICAgICAgRXJyb3IgaW4gY29tbWFuZCBsaW5lIHN5bnRheC4KKysKKysgICAzCisrICAgICAgICAgICBBIHJlcXVpcmVkIHRvb2wgY291bGQgbm90IGJlIGZvdW5kLgorKworKyAgIDQKKysgICAgICAgICAgIFRoZSBhY3Rpb24gZmFpbGVkLgorKworK0V4YW1wbGVzCisrCisrIHhkZy10ZXJtaW5hbAorKworKyAgIE9wZW5zIHRoZSB1c2VyJ3MgZGVmYXVsdCB0ZXJtaW5hbCBlbXVsYXRvciwganVzdCBzdGFydGluZyBhbiBpbnRlcmFjdGl2ZQorKyAgIHNoZWxsLgorKworKyB4ZGctdGVybWluYWwgdG9wCisrCisrICAgT3BlbnMgdGhlIHVzZXIncyBkZWZhdWx0IHRlcm1pbmFsIGVtdWxhdG9yIGFuZCBsZXRzIGl0IHJ1biB0aGUgdG9wCisrICAgZXhlY3V0YWJsZS4KKytfTUFOVUFMUEFHRQorK30KKysKKyt1c2FnZSgpCisreworK2NhdCA8PCBfVVNBR0UKKysgICB4ZGctdGVybWluYWwgLSBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbgorKworK1N5bm9wc2lzCisrCisrICAgeGRnLXRlcm1pbmFsIFtjb21tYW5kXQorKworKyAgIHhkZy10ZXJtaW5hbCB7IC0taGVscCB8IC0tbWFudWFsIHwgLS12ZXJzaW9uIH0KKysKKytfVVNBR0UKKyt9CisrCisrI0B4ZGctdXRpbHMtY29tbW9uQAorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyAgIENvbW1vbiB1dGlsaXR5IGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiBhbGwgWERHIHdyYXBwZXIgc2NyaXB0cworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrREVCVUcoKQorK3sKKysgIFsgLXogIiR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSIgXSAmJiByZXR1cm4gMDsKKysgIFsgJHtYREdfVVRJTFNfREVCVUdfTEVWRUx9IC1sdCAkMSBdICYmIHJldHVybiAwOworKyAgc2hpZnQKKysgIGVjaG8gIiRAIiA+JjIKKyt9CisrCisrIyBUaGlzIGhhbmRsZXMgYmFja3NsYXNoZXMgYnV0IG5vdCBxdW90ZSBtYXJrcy4KKytmaXJzdF93b3JkKCkKKyt7CisrICAgIHJlYWQgZmlyc3QgcmVzdAorKyAgICBlY2hvICIkZmlyc3QiCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBtYXAgYSBiaW5hcnkgdG8gYSAuZGVza3RvcCBmaWxlCisrYmluYXJ5X3RvX2Rlc2t0b3BfZmlsZSgpCisreworKyAgICBzZWFyY2g9IiR7WERHX0RBVEFfSE9NRTotJEhPTUUvLmxvY2FsL3NoYXJlfToke1hER19EQVRBX0RJUlM6LS91c3IvbG9jYWwvc2hhcmU6L3Vzci9zaGFyZX0iCisrICAgIGJpbmFyeT0iYHdoaWNoICIkMSJgIgorKyAgICBiaW5hcnk9ImByZWFkbGluayAtZiAiJGJpbmFyeSJgIgorKyAgICBiYXNlPSJgYmFzZW5hbWUgIiRiaW5hcnkiYCIKKysgICAgSUZTPToKKysgICAgZm9yIGRpciBpbiAkc2VhcmNoOyBkbworKyAgICAgICAgdW5zZXQgSUZTCisrICAgICAgICBbICIkZGlyIiBdIHx8IGNvbnRpbnVlCisrICAgICAgICBbIC1kICIkZGlyL2FwcGxpY2F0aW9ucyIgXSB8fCBbIC1kICIkZGlyL2FwcGxuayIgXSB8fCBjb250aW51ZQorKyAgICAgICAgZm9yIGZpbGUgaW4gIiRkaXIiL2FwcGxpY2F0aW9ucy8qLmRlc2t0b3AgIiRkaXIiL2FwcGxpY2F0aW9ucy8qLyouZGVza3RvcCAiJGRpciIvYXBwbG5rLyouZGVza3RvcCAiJGRpciIvYXBwbG5rLyovKi5kZXNrdG9wOyBkbworKyAgICAgICAgICAgIFsgLXIgIiRmaWxlIiBdIHx8IGNvbnRpbnVlCisrICAgICAgICAgICAgIyBDaGVjayB0byBtYWtlIHN1cmUgaXQncyB3b3J0aCB0aGUgcHJvY2Vzc2luZy4KKysgICAgICAgICAgICBncmVwIC1xICJeRXhlYy4qJGJhc2UiICIkZmlsZSIgfHwgY29udGludWUKKysgICAgICAgICAgICAjIE1ha2Ugc3VyZSBpdCdzIGEgdmlzaWJsZSBkZXNrdG9wIGZpbGUgKGUuZy4gbm90ICJwcmVmZXJyZWQtd2ViLWJyb3dzZXIuZGVza3RvcCIpLgorKyAgICAgICAgICAgIGdyZXAgLUVxICJeKE5vRGlzcGxheXxIaWRkZW4pPXRydWUiICIkZmlsZSIgJiYgY29udGludWUKKysgICAgICAgICAgICBjb21tYW5kPSJgZ3JlcCAtRSAiXkV4ZWMoXFtbXl09XSpdKT89IiAiJGZpbGUiIHwgY3V0IC1kPSAtZiAyLSB8IGZpcnN0X3dvcmRgIgorKyAgICAgICAgICAgIGNvbW1hbmQ9ImB3aGljaCAiJGNvbW1hbmQiYCIKKysgICAgICAgICAgICBpZiBbIHgiYHJlYWRsaW5rIC1mICIkY29tbWFuZCJgIiA9IHgiJGJpbmFyeSIgXTsgdGhlbgorKyAgICAgICAgICAgICAgICAjIEZpeCBhbnkgZG91YmxlIHNsYXNoZXMgdGhhdCBnb3QgYWRkZWQgcGF0aCBjb21wb3NpdGlvbgorKyAgICAgICAgICAgICAgICBlY2hvICIkZmlsZSIgfCBzZWQgLWUgJ3MsLy8qLC8sZycKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGRvbmUKKysgICAgZG9uZQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgbWFwIGEgLmRlc2t0b3AgZmlsZSB0byBhIGJpbmFyeQorKyMjIEZJWE1FOiBoYW5kbGUgdmVuZG9yIGRpciBjYXNlCisrZGVza3RvcF9maWxlX3RvX2JpbmFyeSgpCisreworKyAgICBzZWFyY2g9IiR7WERHX0RBVEFfSE9NRTotJEhPTUUvLmxvY2FsL3NoYXJlfToke1hER19EQVRBX0RJUlM6LS91c3IvbG9jYWwvc2hhcmU6L3Vzci9zaGFyZX0iCisrICAgIGRlc2t0b3A9ImBiYXNlbmFtZSAiJDEiYCIKKysgICAgSUZTPToKKysgICAgZm9yIGRpciBpbiAkc2VhcmNoOyBkbworKyAgICAgICAgdW5zZXQgSUZTCisrICAgICAgICBbICIkZGlyIiBdICYmIFsgLWQgIiRkaXIvYXBwbGljYXRpb25zIiBdIHx8IGNvbnRpbnVlCisrICAgICAgICBmaWxlPSIkZGlyL2FwcGxpY2F0aW9ucy8kZGVza3RvcCIKKysgICAgICAgIFsgLXIgIiRmaWxlIiBdIHx8IGNvbnRpbnVlCisrICAgICAgICAjIFJlbW92ZSBhbnkgYXJndW1lbnRzICglRiwgJWYsICVVLCAldSwgZXRjLikuCisrICAgICAgICBjb21tYW5kPSJgZ3JlcCAtRSAiXkV4ZWMoXFtbXl09XSpdKT89IiAiJGZpbGUiIHwgY3V0IC1kPSAtZiAyLSB8IGZpcnN0X3dvcmRgIgorKyAgICAgICAgY29tbWFuZD0iYHdoaWNoICIkY29tbWFuZCJgIgorKyAgICAgICAgcmVhZGxpbmsgLWYgIiRjb21tYW5kIgorKyAgICAgICAgcmV0dXJuCisrICAgIGRvbmUKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nIHRoZSBkZXNpcmVkIG9wZXJhdGlvbgorKworK2V4aXRfc3VjY2VzcygpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gIiRAIgorKyAgICAgICAgZWNobworKyAgICBmaQorKworKyAgICBleGl0IDAKKyt9CisrCisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBtYWxmb3JtZWQgYXJndW1lbnRzLCBub3QgZW5vdWdoIGFyZ3VtZW50cworKyMgb3IgbWlzc2luZyByZXF1aXJlZCBvcHRpb24uCisrIyBwcmludHMgdXNhZ2UgaW5mb3JtYXRpb24KKysKKytleGl0X2ZhaWx1cmVfc3ludGF4KCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgICAgICBlY2hvICJUcnkgJ3hkZy10ZXJtaW5hbCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCisrICAgIGVsc2UKKysgICAgICAgIHVzYWdlCisrICAgICAgICBlY2hvICJVc2UgJ21hbiB4ZGctdGVybWluYWwnIG9yICd4ZGctdGVybWluYWwgLS1tYW51YWwnIGZvciBhZGRpdGlvbmFsIGluZm8uIgorKyAgICBmaQorKworKyAgICBleGl0IDEKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIG1pc3NpbmcgZmlsZSBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lCisrCisrZXhpdF9mYWlsdXJlX2ZpbGVfbWlzc2luZygpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDIKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIGZhaWx1cmUgdG8gbG9jYXRlIG5lY2Vzc2FyeSB0b29sIGFwcGxpY2F0aW9ucworKworK2V4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDMKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIGZhaWx1cmUgcmV0dXJuZWQgYnkgYSB0b29sIGFwcGxpY2F0aW9uCisrCisrZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9mYWlsZWQoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCA0CisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIGluc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIHJlYWQgYSBzcGVjaWZpZWQgZmlsZQorKworK2V4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fcmVhZCgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICBmaQorKworKyAgICBleGl0IDUKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gdG8gd3JpdGUgYSBzcGVjaWZpZWQgZmlsZQorKworK2V4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fd3JpdGUoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCA2CisrfQorKworK2NoZWNrX2lucHV0X2ZpbGUoKQorK3sKKysgICAgaWYgWyAhIC1lICIkMSIgXTsgdGhlbgorKyAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfbWlzc2luZyAiZmlsZSAnJDEnIGRvZXMgbm90IGV4aXN0IgorKyAgICBmaQorKyAgICBpZiBbICEgLXIgIiQxIiBdOyB0aGVuCisrICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3JlYWQgIm5vIHBlcm1pc3Npb24gdG8gcmVhZCBmaWxlICckMSciCisrICAgIGZpCisrfQorKworK2NoZWNrX3ZlbmRvcl9wcmVmaXgoKQorK3sKKysgICAgZmlsZV9sYWJlbD0iJDIiCisrICAgIFsgLW4gIiRmaWxlX2xhYmVsIiBdIHx8IGZpbGVfbGFiZWw9ImZpbGVuYW1lIgorKyAgICBmaWxlPWBiYXNlbmFtZSAiJDEiYAorKyAgICBjYXNlICIkZmlsZSIgaW4KKysgICAgICAgW1s6YWxwaGE6XV0qLSopCisrICAgICAgICAgcmV0dXJuCisrICAgICAgICAgOzsKKysgICAgZXNhYworKworKyAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRmaWxlX2xhYmVsICckZmlsZScgZG9lcyBub3QgaGF2ZSBhIHByb3BlciB2ZW5kb3IgcHJlZml4IiA+JjIKKysgICAgZWNobyAnQSB2ZW5kb3IgcHJlZml4IGNvbnNpc3RzIG9mIGFscGhhIGNoYXJhY3RlcnMgKFthLXpBLVpdKSBhbmQgaXMgdGVybWluYXRlZCcgPiYyCisrICAgIGVjaG8gJ3dpdGggYSBkYXNoICgiLSIpLiBBbiBleGFtcGxlICciJGZpbGVfbGFiZWwiJyBpcyAnIidleGFtcGxlLSRmaWxlJyIgPiYyCisrICAgIGVjaG8gIlVzZSAtLW5vdmVuZG9yIHRvIG92ZXJyaWRlIG9yICd4ZGctdGVybWluYWwgLS1tYW51YWwnIGZvciBhZGRpdGlvbmFsIGluZm8uIiA+JjIKKysgICAgZXhpdCAxCisrfQorKworK2NoZWNrX291dHB1dF9maWxlKCkKKyt7CisrICAgICMgaWYgdGhlIGZpbGUgZXhpc3RzLCBjaGVjayBpZiBpdCBpcyB3cml0ZWFibGUKKysgICAgIyBpZiBpdCBkb2VzIG5vdCBleGlzdHMsIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHdyaXRlIG9uIHRoZSBkaXJlY3RvcnkKKysgICAgaWYgWyAtZSAiJDEiIF07IHRoZW4KKysgICAgICAgIGlmIFsgISAtdyAiJDEiIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlICJubyBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIGZpbGUgJyQxJyIKKysgICAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICAgIERJUj1gZGlybmFtZSAiJDEiYAorKyAgICAgICAgaWYgWyAhIC13ICIkRElSIiBdIHx8IFsgISAteCAiJERJUiIgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX3Blcm1pc3Npb25fd3JpdGUgIm5vIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGUgJyQxJyIKKysgICAgICAgIGZpCisrICAgIGZpCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBDaGVja3MgZm9yIHNoYXJlZCBjb21tYW5kcywgZS5nLiAtLWhlbHAKKysKKytjaGVja19jb21tb25fY29tbWFuZHMoKQorK3sKKysgICAgd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKysgICAgICAgIHBhcm09IiQxIgorKyAgICAgICAgc2hpZnQKKysKKysgICAgICAgIGNhc2UgIiRwYXJtIiBpbgorKyAgICAgICAgICAgIC0taGVscCkKKysgICAgICAgICAgICB1c2FnZQorKyAgICAgICAgICAgIGVjaG8gIlVzZSAnbWFuIHhkZy10ZXJtaW5hbCcgb3IgJ3hkZy10ZXJtaW5hbCAtLW1hbnVhbCcgZm9yIGFkZGl0aW9uYWwgaW5mby4iCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICAgICAgOzsKKysKKysgICAgICAgICAgICAtLW1hbnVhbCkKKysgICAgICAgICAgICBtYW51YWxwYWdlCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICAgICAgOzsKKysKKysgICAgICAgICAgICAtLXZlcnNpb24pCisrICAgICAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsIDEuMS4wIHJjMSIKKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICBkb25lCisrfQorKworK2NoZWNrX2NvbW1vbl9jb21tYW5kcyAiJEAiCisrCisrWyAteiAiJHtYREdfVVRJTFNfREVCVUdfTEVWRUx9IiBdICYmIHVuc2V0IFhER19VVElMU19ERUJVR19MRVZFTDsKKytpZiBbICR7WERHX1VUSUxTX0RFQlVHX0xFVkVMLTB9IC1sdCAxIF07IHRoZW4KKysgICAgIyBCZSBzaWxlbnQKKysgICAgeGRnX3JlZGlyZWN0X291dHB1dD0iID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCIKKytlbHNlCisrICAgICMgQWxsIG91dHB1dCB0byBzdGRlcnIKKysgICAgeGRnX3JlZGlyZWN0X291dHB1dD0iID4mMiIKKytmaQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2tzIGZvciBrbm93biBkZXNrdG9wIGVudmlyb25tZW50cworKyMgc2V0IHZhcmlhYmxlIERFIHRvIHRoZSBkZXNrdG9wIGVudmlyb25tZW50cyBuYW1lLCBsb3dlcmNhc2UKKysKKytkZXRlY3RERSgpCisreworKyAgICAjIHNlZSBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDE2NAorKyAgICB1bnNldCBHUkVQX09QVElPTlMKKysKKysgICAgaWYgWyAtbiAiJHtYREdfQ1VSUkVOVF9ERVNLVE9QfSIgXTsgdGhlbgorKyAgICAgIGNhc2UgIiR7WERHX0NVUlJFTlRfREVTS1RPUH0iIGluCisrICAgICAgICAgRU5MSUdIVEVOTUVOVCkKKysgICAgICAgICAgIERFPWVubGlnaHRlbm1lbnQ7CisrICAgICAgICAgICA7OworKyAgICAgICAgIEdOT01FKQorKyAgICAgICAgICAgREU9Z25vbWU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIEtERSkKKysgICAgICAgICAgIERFPWtkZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTFhERSkKKysgICAgICAgICAgIERFPWx4ZGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIE1BVEUpCisrICAgICAgICAgICBERT1tYXRlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBYRkNFKQorKyAgICAgICAgICAgREU9eGZjZQorKyAgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrCisrICAgIGlmIFsgeCIkREUiID0geCIiIF07IHRoZW4KKysgICAgICAjIGNsYXNzaWMgZmFsbGJhY2tzCisrICAgICAgaWYgWyB4IiRLREVfRlVMTF9TRVNTSU9OIiAhPSB4IiIgXTsgdGhlbiBERT1rZGU7CisrICAgICAgZWxpZiBbIHgiJEdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgIT0geCIiIF07IHRoZW4gREU9Z25vbWU7CisrICAgICAgZWxpZiBbIHgiJE1BVEVfREVTS1RPUF9TRVNTSU9OX0lEIiAhPSB4IiIgXTsgdGhlbiBERT1tYXRlOworKyAgICAgIGVsaWYgYGRidXMtc2VuZCAtLXByaW50LXJlcGx5IC0tZGVzdD1vcmcuZnJlZWRlc2t0b3AuREJ1cyAvb3JnL2ZyZWVkZXNrdG9wL0RCdXMgb3JnLmZyZWVkZXNrdG9wLkRCdXMuR2V0TmFtZU93bmVyIHN0cmluZzpvcmcuZ25vbWUuU2Vzc2lvbk1hbmFnZXIgPiAvZGV2L251bGwgMj4mMWAgOyB0aGVuIERFPWdub21lOworKyAgICAgIGVsaWYgeHByb3AgLXJvb3QgX0RUX1NBVkVfTU9ERSAyPiAvZGV2L251bGwgfCBncmVwICcgPSBcInhmY2U0XCIkJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gREU9eGZjZTsKKysgICAgICBlbGlmIHhwcm9wIC1yb290IDI+IC9kZXYvbnVsbCB8IGdyZXAgLWkgJ154ZmNlX2Rlc2t0b3Bfd2luZG93JyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gREU9eGZjZQorKyAgICAgIGVsaWYgZWNobyAkREVTS1RPUCB8IGdyZXAgLXEgJ15FbmxpZ2h0ZW5tZW50JzsgdGhlbiBERT1lbmxpZ2h0ZW5tZW50OworKyAgICAgIGZpCisrICAgIGZpCisrCisrICAgIGlmIFsgeCIkREUiID0geCIiIF07IHRoZW4KKysgICAgICAjIGZhbGxiYWNrIHRvIGNoZWNraW5nICRERVNLVE9QX1NFU1NJT04KKysgICAgICBjYXNlICIkREVTS1RPUF9TRVNTSU9OIiBpbgorKyAgICAgICAgIGdub21lKQorKyAgICAgICAgICAgREU9Z25vbWU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIExYREV8THVidW50dSkKKysgICAgICAgICAgIERFPWx4ZGU7IAorKyAgICAgICAgICAgOzsKKysgICAgICAgICBNQVRFKQorKyAgICAgICAgICAgREU9bWF0ZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgeGZjZXx4ZmNlNHwnWGZjZSBTZXNzaW9uJykKKysgICAgICAgICAgIERFPXhmY2U7CisrICAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZmkKKysKKysgICAgaWYgWyB4IiRERSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICMgZmFsbGJhY2sgdG8gdW5hbWUgb3V0cHV0IGZvciBvdGhlciBwbGF0Zm9ybXMKKysgICAgICBjYXNlICIkKHVuYW1lIDI+L2Rldi9udWxsKSIgaW4gCisrICAgICAgICBEYXJ3aW4pCisrICAgICAgICAgIERFPWRhcndpbjsKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrCisrICAgIGlmIFsgeCIkREUiID0geCJnbm9tZSIgXTsgdGhlbgorKyAgICAgICMgZ25vbWUtZGVmYXVsdC1hcHBsaWNhdGlvbnMtcHJvcGVydGllcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBHTk9NRSAyLngKKysgICAgICAjIGJ1dCBub3QgaW4gR05PTUUgMy54CisrICAgICAgd2hpY2ggZ25vbWUtZGVmYXVsdC1hcHBsaWNhdGlvbnMtcHJvcGVydGllcyA+IC9kZXYvbnVsbCAyPiYxICB8fCBERT0iZ25vbWUzIgorKyAgICBmaQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMga2ZtY2xpZW50IGV4ZWMvb3BlblVSTCBjYW4gZ2l2ZSBib2d1cyBleGl0IHZhbHVlIGluIEtERSA8PSAzLjUuNAorKyMgSXQgYWxzbyBhbHdheXMgcmV0dXJucyAxIGluIEtERSAzLjQgYW5kIGVhcmxpZXIKKysjIFNpbXBseSByZXR1cm4gMCBpbiBzdWNoIGNhc2UKKysKKytrZm1jbGllbnRfZml4X2V4aXRfY29kZSgpCisreworKyAgICB2ZXJzaW9uPWBMQ19BTEw9Qy5VVEYtOCBrZGUtY29uZmlnIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IGdyZXAgJ15LREUnYAorKyAgICBtYWpvcj1gZWNobyAkdmVyc2lvbiB8IHNlZCAncy9LREUuKjogXChbMC05XVwpLiovXDEvJ2AKKysgICAgbWlub3I9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFswLTldKlwuXChbMC05XVwpLiovXDEvJ2AKKysgICAgcmVsZWFzZT1gZWNobyAkdmVyc2lvbiB8IHNlZCAncy9LREUuKjogWzAtOV0qXC5bMC05XSpcLlwoWzAtOV1cKS4qL1wxLydgCisrICAgIHRlc3QgIiRtYWpvciIgLWd0IDMgJiYgcmV0dXJuICQxCisrICAgIHRlc3QgIiRtaW5vciIgLWd0IDUgJiYgcmV0dXJuICQxCisrICAgIHRlc3QgIiRyZWxlYXNlIiAtZ3QgNCAmJiByZXR1cm4gJDEKKysgICAgcmV0dXJuIDAKKyt9CisrCisrdGVybWluYWxfa2RlKCkKKyt7CisrICAgIHRlcm1pbmFsPWBrcmVhZGNvbmZpZyAtLWZpbGUga2RlZ2xvYmFscyAtLWdyb3VwIEdlbmVyYWwgLS1rZXkgVGVybWluYWxBcHBsaWNhdGlvbiAtLWRlZmF1bHQga29uc29sZWAKKysKKysgICAgdGVybWluYWxfZXhlYz1gd2hpY2ggJHRlcm1pbmFsIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAkdGVybWluYWxfZXhlYyAtZSAiJDEiCisrICAgICAgICBmaQorKworKyAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9mYWlsZWQKKysgICAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSAiY29uZmlndXJlZCB0ZXJtaW5hbCBwcm9ncmFtICckdGVybWluYWwnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfZ25vbWUoKQorK3sKKysgICAgdGVybV9leGVjX2tleT0iL2Rlc2t0b3AvZ25vbWUvYXBwbGljYXRpb25zL3Rlcm1pbmFsL2V4ZWMiCisrICAgIHRlcm1fZXhlY19hcmdfa2V5PSIvZGVza3RvcC9nbm9tZS9hcHBsaWNhdGlvbnMvdGVybWluYWwvZXhlY19hcmciCisrCisrICAgIHRlcm1fZXhlYz1gZ2NvbmZ0b29sLTIgLS1nZXQgJHt0ZXJtX2V4ZWNfa2V5fWAKKysgICAgdGVybV9leGVjX2FyZz1gZ2NvbmZ0b29sLTIgLS1nZXQgJHt0ZXJtX2V4ZWNfYXJnX2tleX1gCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICR0ZXJtX2V4ZWMgMj4vZGV2L251bGxgCisrCisrICAgIGlmIFsgLXggIiR0ZXJtaW5hbF9leGVjIiBdOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAkdGVybWluYWxfZXhlYworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGlmIFsgeCIkdGVybV9leGVjX2FyZyIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICAgICAkdGVybWluYWxfZXhlYyAiJDEiCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAkdGVybWluYWxfZXhlYyAiJHRlcm1fZXhlY19hcmciICIkMSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJHRlcm1fZXhlYycgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlIgorKyAgICBmaQorK30KKysKKyt0ZXJtaW5hbF94ZmNlKCkKKyt7CisrICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgZXhvLW9wZW4gLS1sYXVuY2ggVGVybWluYWxFbXVsYXRvcgorKyAgICBlbHNlCisrICAgICAgICBleG8tb3BlbiAtLWxhdW5jaCBUZXJtaW5hbEVtdWxhdG9yICIkMSIKKysgICAgZmkKKysKKysgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisrICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9mYWlsZWQKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfZ2VuZXJpYygpCisreworKyAgICAjIGlmICRURVJNIGlzIGEga25vd24gbm9uLWNvbW1hbmQsIHVzZSBoYXJkLWNvZGVkIGZhbGxiYWNrcworKyAgICBpZiBbIHgiJFRFUk0iID0geCIiIF0gfHwgWyB4IiRURVJNIiA9IHgibGludXgiIF0gfHwgWyB4IiRURVJNIiA9IHgidnQxMDAiIF07IHRoZW4KKysgICAgICAgIFRFUk09eHRlcm0KKysgICAgZmkKKysKKysgICAgdGVybWluYWxfZXhlYz1gd2hpY2ggJFRFUk0gMj4vZGV2L251bGxgCisrCisrICAgIGlmIFsgLXggIiR0ZXJtaW5hbF9leGVjIiBdOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAkdGVybWluYWxfZXhlYworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICMgc2NyZWVuIGFuZCB1cnh2dCB3b24ndCBkbyB0aGVpciBvd24gcGFyc2luZyBvZiBxdW90ZWQgYXJndW1lbnRzCisrICAgICAgICAgICAgaWYgWyB4IiRURVJNIiA9IHgic2NyZWVuIiBdOyB0aGVuCisrICAgICAgICAgICAgICAgICMgc2NyZWVuIGhhcyBhbiBpbmNvbXBhdGlibGUgbWVhbmluZyBmb3IgLWUKKysgICAgICAgICAgICAgICAgc2ggLWMgImV4ZWMgJHRlcm1pbmFsX2V4ZWMgJDEiCisrICAgICAgICAgICAgZWxpZiBbIHgiJFRFUk0iID0geCJ1cnh2dCIgXSB8fCBbIHgiJFRFUk0iID0geCJyeHZ0LXVuaWNvZGUiIF0gfHwgWyB4IiRURVJNIiA9IHgicnh2dCIgXTsgdGhlbgorKyAgICAgICAgICAgICAgICAjVE9ETzogVXNlIHdoYXRldmVyIG1lY2hhbmlzbSBkYXNoIHN1cHBvcnRzIHRvIHRlc3QgZm9yCisrICAgICAgICAgICAgICAgICMgICAgICByeHZ0LSogdG8gbWF0Y2ggdGhpbmdzIGxpa2Ugcnh2dC11bmljb2RlLTI1NmNvbG9yCisrICAgICAgICAgICAgICAgIHNoIC1jICJleGVjICR0ZXJtaW5hbF9leGVjIC1lICQxIgorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgLWUgIiQxIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBmaQorKworKyAgICAgICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9mYWlsZWQKKysgICAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25faW1wb3NzaWJsZSAiY29uZmlndXJlZCB0ZXJtaW5hbCBwcm9ncmFtICckVEVSTScgbm90IGZvdW5kIG9yIG5vdCBleGVjdXRhYmxlIgorKyAgICBmaQorK30KKysKKyt0ZXJtaW5hbF9seGRlKCkKKyt7CisrICAgIGlmIHdoaWNoIGx4dGVybWluYWwgJj4vZGV2L251bGw7IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgIGx4dGVybWluYWwKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBseHRlcm1pbmFsIC1lICIkMSIKKysgICAgICAgIGZpCisrICAgIGVsc2UKKysgICAgICAgIHRlcm1pbmFsX2dlbmVyaWMgIiQxIgorKyAgICBmaQorK30KKysKKysjWyB4IiQxIiAhPSB4IiIgXSB8fCBleGl0X2ZhaWx1cmVfc3ludGF4CisrCisrY29tbWFuZD0KKyt3aGlsZSBbICQjIC1ndCAwIF0gOyBkbworKyAgICBwYXJtPSIkMSIKKysgICAgc2hpZnQKKysKKysgICAgY2FzZSAiJHBhcm0iIGluCisrICAgICAgLSopCisrICAgICAgICBleGl0X2ZhaWx1cmVfc3ludGF4ICJ1bmV4cGVjdGVkIG9wdGlvbiAnJHBhcm0nIgorKyAgICAgICAgOzsKKysKKysgICAgICAqKQorKyAgICAgICAgaWYgWyAtbiAiJGNvbW1hbmQiIF0gOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX3N5bnRheCAidW5leHBlY3RlZCBhcmd1bWVudCAnJHBhcm0nIgorKyAgICAgICAgZmkKKysgICAgICAgIGNvbW1hbmQ9IiRwYXJtIgorKyAgICAgICAgOzsKKysgICAgZXNhYworK2RvbmUKKysKKytkZXRlY3RERQorKworK2lmIFsgeCIkREUiID0geCIiIF07IHRoZW4KKysgICAgREU9Z2VuZXJpYworK2ZpCisrCisrY2FzZSAiJERFIiBpbgorKyAgICBrZGUpCisrICAgIHRlcm1pbmFsX2tkZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIGdub21lKikKKysgICAgdGVybWluYWxfZ25vbWUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICB4ZmNlKQorKyAgICB0ZXJtaW5hbF94ZmNlICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgbHhkZSkKKysgICAgdGVybWluYWxfbHhkZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIGdlbmVyaWMpCisrICAgIHRlcm1pbmFsX2dlbmVyaWMgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICAqKQorKyAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgIm5vIHRlcm1pbmFsIGVtdWxhdG9yIGF2YWlsYWJsZSIKKysgICAgOzsKKytlc2FjCistLSAKKzEuOS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmYxZTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHNfMS4xLjAtcmMxLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiQmFzaWMgZGVza3RvcCBpbnRlZ3JhdGlvbiBmdW5jdGlvbnMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4ZGctdXRpbHMgcGFja2FnZSBpcyBhIHNldCBvZiBzaW1wbGUgc2NyaXB0cyB0aGF0IHByb3ZpZGUgYmFzaWMgXAorZGVza3RvcCBpbnRlZ3JhdGlvbiBmdW5jdGlvbnMgZm9yIGFueSBGcmVlIERlc2t0b3AsIHN1Y2ggYXMgTGludXguIFwKK1RoZXkgYXJlIGludGVuZGVkIHRvIHByb3ZpZGUgYSBzZXQgb2YgZGVmYWN0byBzdGFuZGFyZHMuIFwKK1RoZSBmb2xsb3dpbmcgc2NyaXB0cyBhcmUgcHJvdmlkZWQgYXQgdGhpcyB0aW1lOiBcCit4ZGctZGVza3RvcC1pY29uIFwgICAgIAoreGRnLWRlc2t0b3AtbWVudSBcICAKK3hkZy1lbWFpbCBcIAoreGRnLWljb24tcmVzb3VyY2UgXAoreGRnLW1pbWUgXCAgICAgICAKK3hkZy1vcGVuIFwgICAgIAoreGRnLXNjcmVlbnNhdmVyIFwgCit4ZGctdGVybWluYWwgXAorIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWE1MzY3YTkwOTM0MDk4ZDZiMDVhZjNiNzQ2NDA1MDE0IgorCitTUkNfVVJJID0gImh0dHA6Ly9wb3J0bGFuZC5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlaW5zdGF0ZS14ZGctdGVybWluYWwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZhZGY1ZTdhMDhlMDUyNmZjNjBkYmUzZTViN2VmOGQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiMDU1NThhZTRiYjhlZGUzNTY4NjNjYWU4YzQyZTNlMDEyYWE0MjFiZjlkNDUxMzBhNTcwZmQyMDlkNzkxMDIiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgeHByb3AgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUkRFUEVORFNfJHtQTn0gKz0gInhwcm9wIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvRGlzYWJsZS1zZXJ2aWNlcy1mcm9tLWluZXRkLmNvbmYtaWYtYS1zZXJ2aWNlLXdpdGgtdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2ZTZjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtmcm9tIG90aGVyIGRpc3RybyBEZWJpYW5dCisKK0Zyb20gZDU4OGI2NTMwZTEzODJhNjI0ODk4YjNmNDMwN2Y2MzZjNzJjODBhOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBpZXJyZSBIYWJvdXppdCA8bWFkY29kZXJAZGViaWFuLm9yZz4KK0RhdGU6IFdlZCwgMjggTm92IDIwMDcgMTA6MTM6MDggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBzZXJ2aWNlcyBmcm9tIGluZXRkLmNvbmYgaWYgYSBzZXJ2aWNlIHdpdGggdGhlIHNhbWUgaWQgZXhpc3RzLgorCisgIFRoaXMgd2F5LCBpZiBhIHNlcnZpY2UgaXMgZW5hYmxlZCBpbiAvZXRjL3hpbmV0ZCogX2FuZF8gaW4KKy9ldGMvaW5ldGQuY29uZiwgdGhlIG9uZSAoZXZlbiBpZiBkaXNhYmxlZCkgZnJvbSAvZXRjL3hpbmV0ZCogdGFrZXMKK3ByZWNlZGVuY2UuCisKK1NpZ25lZC1vZmYtYnk6IFBpZXJyZSBIYWJvdXppdCA8bWFkY29kZXJAZGViaWFuLm9yZz4KKy0tLQorIHhpbmV0ZC9pbmV0LmMgfCAgIDIyICsrKysrKysrKysrKysrKysrKystLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvaW5ldC5jIGIveGluZXRkL2luZXQuYworaW5kZXggMWNiMmJhMi4uOGNhYWI0NSAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9pbmV0LmMKKysrKyBiL3hpbmV0ZC9pbmV0LmMKK0BAIC0yMyw2ICsyMyw4IEBACisgI2luY2x1ZGUgInBhcnNlc3VwLmgiCisgI2luY2x1ZGUgIm52bGlzdHMuaCIKKyAKKytzdGF0aWMgcHNpX2ggaXRlciA7CisrCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0cyk7CisgCitAQCAtMzIsMTIgKzM0LDE1IEBAIHZvaWQgcGFyc2VfaW5ldF9jb25mX2ZpbGUoIGludCBmZCwgc3RydWN0IGNvbmZpZ3VyYXRpb24gKmNvbmZwICkKKyAgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKmRlZmF1bHRfY29uZmlnID0gQ05GX0RFRkFVTFRTKCBjb25mcCApOworICAgIAorICAgIGxpbmVfY291bnQgPSAwOworKyAgIGl0ZXIgPSBwc2lfY3JlYXRlIChzY29uZnMpOworIAorICAgIGZvciggOzsgKQorICAgIHsgICAKKyAgICAgICBpZiAoZ2V0X25leHRfaW5ldF9lbnRyeShmZCwgc2NvbmZzLCBkZWZhdWx0X2NvbmZpZykgPT0gLTIpCisgICAgICAgICAgYnJlYWs7CisgICAgfQorKworKyAgIHBzaV9kZXN0cm95KGl0ZXIpOworIH0KKyAKKyBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywgCitAQCAtNDYsNyArNTEsNyBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICBjaGFyICpwOworICAgIHN0cl9oIHN0cnA7CisgICAgY2hhciAqbGluZSA9IG5leHRfbGluZShmZCk7CistICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpzY3A7CisrICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpzY3AsICp0bXA7CisgICAgdW5zaWduZWQgdSwgaTsKKyAgICBjb25zdCBjaGFyICpmdW5jID0gImdldF9uZXh0X2luZXRfZW50cnkiOworICAgIGNoYXIgKm5hbWUgPSBOVUxMLCAqcnBjdmVycyA9IE5VTEwsICpycGNwcm90byA9IE5VTEw7CitAQCAtNDA1LDcgKzQxMCwxNiBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICBTQ19TUEVDSUZZKCBzY3AsIEFfU09DS0VUX1RZUEUgKTsKKyAgICBTQ19TUEVDSUZZKCBzY3AsIEFfV0FJVCApOworIAorLSAgIGlmKCAhIHBzZXRfYWRkKHNjb25mcywgc2NwKSApCisrICAgZm9yICggdG1wID0gU0NQKCBwc2lfc3RhcnQoIGl0ZXIgKSApIDsgdG1wIDsgdG1wID0gU0NQKCBwc2lfbmV4dChpdGVyKSkgKXsKKysgICAgICBpZiAoRVEoU0NfSUQoc2NwKSwgU0NfSUQodG1wKSkpIHsKKysgICAgICAgICBwYXJzZW1zZyhMT0dfREVCVUcsIGZ1bmMsICJyZW1vdmluZyBkdXBsaWNhdGUgc2VydmljZSAlcyIsIFNDX05BTUUoc2NwKSk7CisrICAgICAgICAgc2NfZnJlZShzY3ApOworKyAgICAgICAgIHNjcCA9IE5VTEw7CisrICAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgIH0KKysKKysgICBpZiggc2NwICYmICEgcHNldF9hZGQoc2NvbmZzLCBzY3ApICkKKyAgICB7CisgICAgICAgb3V0X29mX21lbW9yeSggZnVuYyApOworICAgICAgIHBzZXRfZGVzdHJveShhcmdzKTsKK0BAIC00MTQsNyArNDI4LDkgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgfQorIAorICAgIHBzZXRfZGVzdHJveShhcmdzKTsKKy0gICBwYXJzZW1zZyggTE9HX0RFQlVHLCBmdW5jLCAiYWRkZWQgc2VydmljZSAlcyIsIFNDX05BTUUoc2NwKSk7CisrICAgaWYgKHNjcCkgeworKyAgICAgIHBhcnNlbXNnKCBMT0dfREVCVUcsIGZ1bmMsICJhZGRlZCBzZXJ2aWNlICVzIiwgU0NfTkFNRShzY3ApKTsKKysgICB9CisgICAgcmV0dXJuIDA7CisgfQorIAorLS0gCisxLjUuMy42LjIwNDAuZzE1ZTYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTljZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9WYXJpb3VzLWZpeGVzLWZyb20tdGhlLXByZXZpb3VzLW1haW50YWluZXIucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtmcm9tIG90aGVyIGRpc3RybyBEZWJpYW5dCisKK0Zyb20gYTM0MTBiMGJjODFhYjAzYTg4OWQ5ZmZjMTRlMzUxYmFkZjgzNzJmMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBpZXJyZSBIYWJvdXppdCA8bWFkY29kZXJAZGViaWFuLm9yZz4KK0RhdGU6IE1vbiwgMjYgTm92IDIwMDcgMTY6MDI6MDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gVmFyaW91cyBmaXhlcyBmcm9tIHRoZSBwcmV2aW91cyBtYWludGFpbmVyLgorCistLS0KKyB4aW5ldGQvY2hpbGQuYyAgIHwgICAyMCArKysrKysrKysrKysrKysrKy0tLQorIHhpbmV0ZC9zZXJ2aWNlLmMgfCAgICA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2NoaWxkLmMgYi94aW5ldGQvY2hpbGQuYworaW5kZXggODllZTU0Yy4uNDhlOTYxNSAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9jaGlsZC5jCisrKysgYi94aW5ldGQvY2hpbGQuYworQEAgLTI4NCw2ICsyODQsNyBAQCB2b2lkIGNoaWxkX3Byb2Nlc3MoIHN0cnVjdCBzZXJ2ZXIgKnNlcnAgKQorICAgIGNvbm5lY3Rpb25fcyAgICAgICAgICAgICpjcCAgPSBTRVJWRVJfQ09OTkVDVElPTiggc2VycCApIDsKKyAgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgICAqc2NwID0gU1ZDX0NPTkYoIHNwICkgOworICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICpmdW5jID0gImNoaWxkX3Byb2Nlc3MiIDsKKysgICBpbnQgICAgICAgICAgICAgICAgICAgICBmZCwgbnVsbF9mZDsKKyAKKyAgICBzaWduYWxfZGVmYXVsdF9zdGF0ZSgpOworIAorQEAgLTI5Niw5ICsyOTcsMjIgQEAgdm9pZCBjaGlsZF9wcm9jZXNzKCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBzaWduYWxzX3BlbmRpbmdbMF0gPSAtMTsKKyAgICBzaWduYWxzX3BlbmRpbmdbMV0gPSAtMTsKKyAKKy0gICBTY2xvc2UoMCk7CistICAgU2Nsb3NlKDEpOworLSAgIFNjbG9zZSgyKTsKKysgICBpZiAoICggbnVsbF9mZCA9IG9wZW4oICIvZGV2L251bGwiLCBPX1JET05MWSApICkgPT0gLTEgKQorKyAgIHsKKysgICAgICBtc2coIExPR19FUlIsIGZ1bmMsICJvcGVuKCcvZGV2L251bGwnKSBmYWlsZWQ6ICVtIikgOworKyAgICAgIF9leGl0KCAxICkgOworKyAgIH0KKysKKysgICBmb3IgKCBmZCA9IDAgOyBmZCA8PSBNQVhfUEFTU19GRCA7IGZkKysgKQorKyAgIHsKKysgICAgICBpZiAoIGZkICE9IG51bGxfZmQgJiYgZHVwMiggbnVsbF9mZCwgZmQgKSA9PSAtMSApCisrICAgICAgeworKyAgICAgICAgIG1zZyggTE9HX0VSUiwgZnVuYywgImR1cDIoJWQsICVkKSBmYWlsZWQ6ICVtIikgOworKyAgICAgICAgIF9leGl0KCAxICkgOworKyAgICAgIH0KKysgICB9CisrICAgaWYgKCBudWxsX2ZkID4gTUFYX1BBU1NfRkQgKQorKyAgICAgICh2b2lkKSBTY2xvc2UoIG51bGxfZmQgKSA7CisgCisgCisgI2lmZGVmIERFQlVHX1NFUlZFUgorZGlmZiAtLWdpdCBhL3hpbmV0ZC9zZXJ2aWNlLmMgYi94aW5ldGQvc2VydmljZS5jCitpbmRleCAzZDY4ZDc4Li4wMTMyZDZjIDEwMDY0NAorLS0tIGEveGluZXRkL3NlcnZpY2UuYworKysrIGIveGluZXRkL3NlcnZpY2UuYworQEAgLTc0NSw4ICs3NDUsOCBAQCBzdGF0aWMgc3RhdHVzX2UgZmFpbGVkX3NlcnZpY2Uoc3RydWN0IHNlcnZpY2UgKnNwLAorICAgICAgICAgICAgICAgIHJldHVybiBGQUlMRUQ7CisgCisgICAgICAgICAgICAgaWYgKCBsYXN0ID09IE5VTEwgKSB7CistICAgICAgICAgICAgICAgbGFzdCA9IFNBSU4oIGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworLQkgICAgICAgU1ZDX0xBU1RfREdSQU1fQUREUihzcCkgPSAodW5pb24geHNvY2thZGRyICopbGFzdDsKKysJICAgIFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApID0gIFNBSU4oIGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworKwkgICAgbGFzdCA9IFNBSU4oIFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApICk7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICh2b2lkKSB0aW1lKCAmY3VycmVudF90aW1lICkgOworQEAgLTc3Miw4ICs3NzIsOCBAQCBzdGF0aWMgc3RhdHVzX2UgZmFpbGVkX3NlcnZpY2Uoc3RydWN0IHNlcnZpY2UgKnNwLAorICAgICAgICAgICAgICAgIHJldHVybiBGQUlMRUQ7CisgCisgCSAgICBpZiggbGFzdCA9PSBOVUxMICkgeworLSAgICAgICAgICAgICAgIGxhc3QgPSBTQUlONihjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKy0JICAgICAgIFNWQ19MQVNUX0RHUkFNX0FERFIoIHNwICkgPSAodW5pb24geHNvY2thZGRyICopbGFzdDsKKysJICAgIFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApID0gU0FJTjYoY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CisrICAgICAgICAgICAgbGFzdCA9IFNBSU42KFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApKTsKKyAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgKHZvaWQpIHRpbWUoICZjdXJyZW50X3RpbWUgKSA7CistLSAKKzEuNS4zLjYuMjA0MC5nMTVlNgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDJkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaApAQCAtMCwwICsxLDMyIEBACit4aW5ldGQ6IENWRS0yMDEzLTQzNDIKKworeGluZXRkIGRvZXMgbm90IGVuZm9yY2UgdGhlIHVzZXIgYW5kIGdyb3VwIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcworZm9yIFRDUE1VWCBzZXJ2aWNlcywgd2hpY2ggY2F1c2VzIHRoZXNlIHNlcnZpY2VzIHRvIGJlIHJ1biBhcyByb290CithbmQgbWFrZXMgaXQgZWFzaWVyIGZvciByZW1vdGUgYXR0YWNrZXJzIHRvIGdhaW4gcHJpdmlsZWdlcyBieQorbGV2ZXJhZ2luZyBhbm90aGVyIHZ1bG5lcmFiaWxpdHkgaW4gYSBzZXJ2aWNlLgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTMtNDM0MgorCit0aGUgcGF0Y2ggY29tZSBmcm9tOgoraHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2F0dGFjaG1lbnQuY2dpP2lkPTc5OTczMiZhY3Rpb249ZGlmZgorCitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB4aW5ldGQvYnVpbHRpbnMuYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9idWlsdGlucy5jIGIveGluZXRkL2J1aWx0aW5zLmMKK2luZGV4IDNiODU1NzkuLjM0YTViYWMgMTAwNjQ0CistLS0gYS94aW5ldGQvYnVpbHRpbnMuYworKysrIGIveGluZXRkL2J1aWx0aW5zLmMKK0BAIC02MTcsNyArNjE3LDcgQEAgc3RhdGljIHZvaWQgdGNwbXV4X2hhbmRsZXIoIGNvbnN0IHN0cnVjdCBzZXJ2ZXIgKnNlcnAgKQorICAgIGlmKCBTQ19JU19JTlRFUk5BTCggc2NwICkgKSB7CisgICAgICAgU0NfSU5URVJOQUwoc2NwLCBuc2VycCk7CisgICAgfSBlbHNlIHsKKy0gICAgICBleGVjX3NlcnZlcihuc2VycCk7CisrICAgICAgY2hpbGRfcHJvY2Vzcyhuc2VycCk7CisgICAgfQorIH0KKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NWNhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC1zaG91bGQtYmUtYWJsZS10by1saXN0ZW4tb24tSVB2Ni1ldmVuLWluLWluZS5wYXRjaApAQCAtMCwwICsxLDExMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtmcm9tIG90aGVyIGRpc3RybyBEZWJpYW5dCisKK0Zyb20gZjQ0YjIxOGNjYzc3OWFiM2Y0YWVkMDcyMzkwY2NmMTI5ZDk0YjU4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhdmlkIE1hZG9yZSA8ZGF2aWRAcGxlaWFkZXMuc3RhcnM+CitEYXRlOiBNb24sIDI0IE1hciAyMDA4IDEyOjQ1OjM2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHhpbmV0ZCBzaG91bGQgYmUgYWJsZSB0byBsaXN0ZW4gb24gSVB2NiBldmVuIGluIC1pbmV0ZF9jb21wYXQgbW9kZQorCit4aW5ldGQgZG9lcyBub3QgYmluZCB0byBJUHY2IGFkZHJlc3NlcyAoYW5kIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhbgorb3B0aW9uIHRvIGRvIHNvKSB3aGVuIHVzZWQgaW4gLWluZXRkX2NvbXBhdCBtb2RlLiAgQXMgY3VycmVudCBpbmV0ZCdzCithcmUgSVB2Ni1hd2FyZSwgdGhpcyBpcyBhIHByb2JsZW06IHRoaXMgbWVhbnMgeGluZXRkIGNhbm5vdCBiZSB1c2VkIGFzCithIGRyb3AtaW4gaW5ldGQgcmVwbGFjZW1lbnQuCisKK1RoZSBhdHRhY2hlZCBwYXRjaCBpcyBhIHN1Z2dlc3Rpb246IGl0IGFkZHMgYSAtaW5ldGRfaXB2NiBnbG9iYWwKK29wdGlvbiB0aGF0LCBpZiB1c2VkLCBjYXVzZXMgaW5ldGQtY29tcGF0aWJpbGl0eSBsaW5lcyB0byBoYXZlIGFuCitpbXBsaWNpdCAiSVB2NiIgb3B0aW9uLiAgUGVyaGFwcyB0aGlzIGlzIG5vdCB0aGUgYmVzdCBzb2x1dGlvbiwgYnV0Cit0aGVyZSBzaG91bGQgZGVmaW5pdGVseSBiZSBhIHdheSB0byBnZXQgaW5ldGQuY29uZiB0byBiZSByZWFkIGluCitJUHY2LWF3YXJlIG1vZGUuCistLS0KKyB4aW5ldGQvY29uZnBhcnNlLmMgfCAgICAxICsKKyB4aW5ldGQvaW5ldC5jICAgICAgfCAgIDE3ICsrKysrKysrKysrKysrKysrCisgeGluZXRkL29wdGlvbnMuYyAgIHwgICAgMyArKysKKyB4aW5ldGQveGluZXRkLm1hbiAgfCAgICA2ICsrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9jb25mcGFyc2UuYyBiL3hpbmV0ZC9jb25mcGFyc2UuYworaW5kZXggZGI5ZjQzMS4uZDdiMGJjYyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9jb25mcGFyc2UuYworKysrIGIveGluZXRkL2NvbmZwYXJzZS5jCitAQCAtNDAsNiArNDAsNyBAQAorICNpbmNsdWRlICJpbmV0LmgiCisgI2luY2x1ZGUgIm1haW4uaCIKKyAKKytleHRlcm4gaW50IGluZXRkX2lwdjY7CisgZXh0ZXJuIGludCBpbmV0ZF9jb21wYXQ7CisgCisgLyoKK2RpZmYgLS1naXQgYS94aW5ldGQvaW5ldC5jIGIveGluZXRkL2luZXQuYworaW5kZXggOGNhYWI0NS4uMmU2MTdhZSAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9pbmV0LmMKKysrKyBiL3hpbmV0ZC9pbmV0LmMKK0BAIC0yNSw2ICsyNSw4IEBACisgCisgc3RhdGljIHBzaV9oIGl0ZXIgOworIAorK2V4dGVybiBpbnQgaW5ldGRfaXB2NjsKKysKKyBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmljZV9jb25maWcgKmRlZmF1bHRzKTsKKyAKK0BAIC0zNjAsNiArMzYyLDIxIEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgICAgICAgIH0KKyAgICAgICAgICBTQ19TRVJWRVJfQVJHVihzY3ApW3VdID0gcDsKKyAgICAgICB9CisrCisrICAgICAgLyogU2V0IHRoZSBJUHY2IGZsYWcgaWYgd2Ugd2VyZSBwYXNzZWQgdGhlIC1pbmV0ZF9pcHY2IG9wdGlvbiAqLworKyAgICAgIGlmICggaW5ldGRfaXB2NiApCisrICAgICAgeworKyAgICAgICAgIG52cCA9IG52X2ZpbmRfdmFsdWUoIHNlcnZpY2VfZmxhZ3MsICJJUHY2IiApOworKyAgICAgICAgIGlmICggbnZwID09IE5VTEwgKQorKyAgICAgICAgIHsKKysgICAgICAgICAgICBwYXJzZW1zZyggTE9HX1dBUk5JTkcsIGZ1bmMsICJpbmV0ZC5jb25mIC0gQmFkIGZvbyAlcyIsIG5hbWUgKSA7CisrICAgICAgICAgICAgcHNldF9kZXN0cm95KGFyZ3MpOworKyAgICAgICAgICAgIHNjX2ZyZWUoc2NwKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICAgfQorKyAgICAgICAgIE1fU0VUKFNDX1hGTEFHUyhzY3ApLCBudnAtPnZhbHVlKTsKKysgICAgICB9CisrCisgICAgICAgLyogU2V0IHRoZSByZXVzZSBmbGFnLCBhcyB0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBpbmV0ZCAqLworICAgICAgIG52cCA9IG52X2ZpbmRfdmFsdWUoIHNlcnZpY2VfZmxhZ3MsICJSRVVTRSIgKTsKKyAgICAgICBpZiAoIG52cCA9PSBOVUxMICkKK2RpZmYgLS1naXQgYS94aW5ldGQvb3B0aW9ucy5jIGIveGluZXRkL29wdGlvbnMuYworaW5kZXggYjA1OGI2YS4uZGMyZjNhMCAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9vcHRpb25zLmMKKysrKyBiL3hpbmV0ZC9vcHRpb25zLmMKK0BAIC0zMCw2ICszMCw3IEBAIGludCBsb2dwcm9jc19vcHRpb24gOworIHVuc2lnbmVkIGxvZ3Byb2NzX29wdGlvbl9hcmcgOworIGludCBzdGF5YWxpdmVfb3B0aW9uPTA7CisgY2hhciAqcHJvZ3JhbV9uYW1lIDsKKytpbnQgaW5ldGRfaXB2NiA9IDAgOworIGludCBpbmV0ZF9jb21wYXQgPSAwIDsKKyBpbnQgZG9udF9mb3JrID0gMDsKKyAKK0BAIC0xMjgsNiArMTI5LDggQEAgaW50IG9wdF9yZWNvZ25pemUoIGludCBhcmdjLCBjaGFyICphcmd2W10gKQorICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgICBleGl0KDApOworICAgICAgICAgIH0KKysgICAgICAgICBlbHNlIGlmICggc3RyY21wICggJmFyZ3ZbIGFyZyBdWyAxIF0sICJpbmV0ZF9pcHY2IiApID09IDAgKQorKyAgICAgICAgICAgIGluZXRkX2lwdjYgPSAxOworICAgICAgICAgIGVsc2UgaWYgKCBzdHJjbXAgKCAmYXJndlsgYXJnIF1bIDEgXSwgImluZXRkX2NvbXBhdCIgKSA9PSAwICkKKyAgICAgICAgICAgICBpbmV0ZF9jb21wYXQgPSAxOworICAgICAgIH0KK2RpZmYgLS1naXQgYS94aW5ldGQveGluZXRkLm1hbiBiL3hpbmV0ZC94aW5ldGQubWFuCitpbmRleCBjNzZjM2M2Li5jOWRkODAzIDEwMDY0NAorLS0tIGEveGluZXRkL3hpbmV0ZC5tYW4KKysrKyBiL3hpbmV0ZC94aW5ldGQubWFuCitAQCAtMTA2LDYgKzEwNiwxMiBAQCBUaGlzIG9wdGlvbiBjYXVzZXMgeGluZXRkIHRvIHJlYWQgL2V0Yy9pbmV0ZC5jb25mIGluIGFkZGl0aW9uIHRvIHRoZQorIHN0YW5kYXJkIHhpbmV0ZCBjb25maWcgZmlsZXMuICAvZXRjL2luZXRkLmNvbmYgaXMgcmVhZCBhZnRlciB0aGUKKyBzdGFuZGFyZCB4aW5ldGQgY29uZmlnIGZpbGVzLgorIC5UUAorKy5CSSBcLWluZXRkX2lwdjYKKytUaGlzIG9wdGlvbiBjYXVzZXMgeGluZXRkIHRvIGJpbmQgdG8gSVB2NiAoQUZfSU5FVDYpIGFkZHJlc3NlcyBmb3IKKytpbmV0ZCBjb21wYXRpYmlsaXR5IGxpbmVzIChzZWUgcHJldmlvdXMgb3B0aW9uKS4gIFRoaXMgb25seSBhZmZlY3RzCisraG93IC9ldGMvaW5ldGQuY29uZiBpcyBpbnRlcnByZXRlZCBhbmQgdGh1cyBvbmx5IGhhcyBhbnkgZWZmZWN0IGlmCisrdGhlIFwtaW5ldGRfY29tcGF0IG9wdGlvbiBpcyBhbHNvIHVzZWQuCisrLlRQCisgLkJJIFwtY2MgIiBpbnRlcnZhbCIKKyBUaGlzIG9wdGlvbiBpbnN0cnVjdHMKKyAuQiB4aW5ldGQKKy0tIAorMS41LjUucmMwLjEyNy5nYjQzMzcKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZlYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmNvbmYKQEAgLTAsMCArMSwxMSBAQAorIyBTaW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB4aW5ldGQKKyMKKyMgU29tZSBkZWZhdWx0cywgYW5kIGluY2x1ZGUgL2V0Yy94aW5ldGQuZC8KKworZGVmYXVsdHMKK3sKKworCit9CisKK2luY2x1ZGVkaXIgL2V0Yy94aW5ldGQuZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmRlZmF1bHQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGEzOGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmRlZmF1bHQKQEAgLTAsMCArMSwxMiBAQAorIyBEZWZhdWx0IHNldHRpbmdzIGZvciB4aW5ldGQuIFRoaXMgZmlsZSBpcyBzb3VyY2VkIGJ5IC9iaW4vc2ggZnJvbQorIyAvZXRjL2luaXQuZC94aW5ldGQKKworIyBlbmFibGUgeGluZXRkIEluZXRkIGNvbXBhdCBtb2RlCitJTkVURF9DT01QQVQ9WWVzCisKKyMgT3B0aW9ucyB0byBwYXNzIHRvIHhpbmV0ZAorIworIyAtc3RheWFsaXZlIGNvbWVzIGJ5IGRlZmF1bHQgOiBpdCBjYW4gYmUgcmVtb3ZlZCBpZiB4aW5ldGQgaXMgZXhwZWN0ZWQKKyMgbm90IHRvIHN0YXJ0IHdoZW4gbm8gc2VydmljZSBpcyBjb25maWd1cmVkCisjCitYSU5FVERfT1BUUz0iLXN0YXlhbGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5pbml0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3YzJjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5pbml0CkBAIC0wLDAgKzEsNjQgQEAKKyMhL2Jpbi9zaAorIworIyAvZXRjL2luaXQuZC94aW5ldGQgIC0tICBzY3JpcHQgdG8gc3RhcnQgYW5kIHN0b3AgeGluZXRkLgorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworaWYgdGVzdCAtZiAvZXRjL2RlZmF1bHQveGluZXRkOyB0aGVuCisJLiAvZXRjL2RlZmF1bHQveGluZXRkCitmaQorCisKK3Rlc3QgLXggL3Vzci9zYmluL3hpbmV0ZCB8fCBleGl0IDAKKworY2hlY2twb3J0bWFwICgpIHsKKyAgaWYgZ3JlcCAiXlteICojXSIgL2V0Yy94aW5ldGQuY29uZiB8IGdyZXAgLXEgJ3JwYy8nOyB0aGVuCisgICAgaWYgISBycGNpbmZvIC11IGxvY2FsaG9zdCBwb3J0bWFwcGVyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgZWNobworICAgICAgZWNobyAiV0FSTklORzogcG9ydG1hcHBlciBpbmFjdGl2ZSAtIFJQQyBzZXJ2aWNlcyB1bmF2YWlsYWJsZSEiCisgICAgICBlY2hvICIgICAgQ29tbWVudGluZyBvdXQgb3IgcmVtb3ZpbmcgdGhlIFJQQyBzZXJ2aWNlcyBmcm9tIgorICAgICAgZWNobyAiICAgIHRoZSAvZXRjL3hpbmV0ZC5jb25mIGZpbGUgd2lsbCByZW1vdmUgdGhpcyBtZXNzYWdlLiIKKyAgICAgIGVjaG8KKyAgICBmaQorICBmaQorfSAKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGNoZWNrcG9ydG1hcAorCWVjaG8gLW4gIlN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiB4aW5ldGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tYmFja2dyb3VuZCAtLWV4ZWMgL3Vzci9zYmluL3hpbmV0ZCAtLSAtcGlkZmlsZSAvdmFyL3J1bi94aW5ldGQucGlkICRYSU5FVERfT1BUUworCWVjaG8gIi4iCisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIGludGVybmV0IHN1cGVyc2VydmVyOiB4aW5ldGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tc2lnbmFsIDMgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL3hpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi94aW5ldGQ7CisJZXhpdCAkPworCTs7CisgICAgcmVsb2FkKQorCWVjaG8gLW4gIlJlbG9hZGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlciBjb25maWd1cmF0aW9uOiB4aW5ldGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tc2lnbmFsIDEgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL3hpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICBmb3JjZS1yZWxvYWQpCisJZWNobyAiJDAgZm9yY2UtcmVsb2FkOiBGb3JjZSBSZWxvYWQgaXMgZGVwcmVjYXRlZCIKKwllY2hvIC1uICJGb3JjZWZ1bGx5IHJlbG9hZGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlciBjb25maWd1cmF0aW9uOiB4aW5ldGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tc2lnbmFsIDEgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL3hpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQveGluZXRkIHtzdGFydHxzdG9wfHN0YXR1c3xyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWZkYzViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLnNlcnZpY2UKQEAgLTAsMCArMSwxMyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1YaW5ldGQgQSBQb3dlcmZ1bCBSZXBsYWNlbWVudCBGb3IgSW5ldGQKK0FmdGVyPXN5c2xvZy50YXJnZXQgbmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK1BJREZpbGU9L3Zhci9ydW4veGluZXRkLnBpZAorRW52aXJvbm1lbnRGaWxlPS0vZXRjL3N5c2NvbmZpZy94aW5ldGQKK0V4ZWNTdGFydD1AU0JJTkRJUkAveGluZXRkIC1zdGF5YWxpdmUgLXBpZGZpbGUgL3Zhci9ydW4veGluZXRkLnBpZCAiJEVYVFJBT1BUSU9OUyIKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzAzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZF8yLjMuMTUuYmIKQEAgLTAsMCArMSw2OCBAQAorU1VNTUFSWSA9ICJTb2NrZXQtYmFzZWQgc2VydmljZSBhY3RpdmF0aW9uIGRhZW1vbiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS94aW5ldGQtb3JnL3hpbmV0ZCIKKworIyB4aW5ldGQgaXMgYSBCU0QtbGlrZSBsaWNlbnNlCisjIEFwcGxlIGFuZCBHZW50b28gc2F5IEJTRCBoZXJlLgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PThhZDg2MTUxOTg1NDI0NDRmODRkMjhhNmNmMjI2ZGQ4IgorCitERVBFTkRTID0gIiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20veGluZXRkLW9yZy94aW5ldGQuZ2l0O3Byb3RvY29sPWh0dHBzIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuaW5pdCBcCisgICAgICBmaWxlOi8veGluZXRkLmNvbmYgXAorICAgICAgZmlsZTovL3hpbmV0ZC5kZWZhdWx0IFwKKyAgICAgIGZpbGU6Ly9WYXJpb3VzLWZpeGVzLWZyb20tdGhlLXByZXZpb3VzLW1haW50YWluZXIucGF0Y2ggXAorICAgICAgZmlsZTovL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2ggXAorICAgICAgZmlsZTovL3hpbmV0ZC1zaG91bGQtYmUtYWJsZS10by1saXN0ZW4tb24tSVB2Ni1ldmVuLWluLWluZS5wYXRjaCBcCisgICAgICBmaWxlOi8veGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2ggXAorICAgICAgZmlsZTovL3hpbmV0ZC5zZXJ2aWNlIFwKKyAgICAgICIKKworU1JDUkVWID0gIjY4YmI5YWI5ZTlmMjE0YWQ4YTIzMjJmMjhhYzFkNjczM2U3MGJjMjQiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInhpbmV0ZC5zZXJ2aWNlIgorCitJTklUU0NSSVBUX05BTUUgPSAieGluZXRkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK0VYVFJBX09FQ09ORj0iLS1kaXNhYmxlLW5scyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtbGlid3JhcCwsdGNwLXdyYXBwZXJzIgorCitkb19jb25maWd1cmUoKSB7CisJIyBMb29rcyBsaWtlIGNvbmZpZ3VyZS5pbiBpcyBicm9rZW4sIHNvIHdlIGFyZSBza2lwcGluZworCSMgcmVidWlsZGluZyBjb25maWd1cmUgYW5kIGFyZSBqdXN0IHVzaW5nIHRoZSBzaGlwcGVkIG9uZQorCSggY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICkKKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBTYW1lIGhlcmUsIHRoZSBNYWtlZmlsZSBkb2VzIHNvbWUgcmVhbGx5IHN0dXBpZCB0aGluZ3MsCisJIyBidXQgc2luY2Ugd2Ugb25seSB3YW50IHR3byBmaWxlcyB3aHkgbm90IG92ZXJyaWRlCisJIyBkb19pbnN0YWxsIGZyb20gYXV0b3Rvb2xzIGFuZCBkb2luZyBpdCBvdXJzZWxmcz8KKwlpbnN0YWxsIC1kICIke0R9JHtzYmluZGlyfSIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9pbml0LmQiCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0veGluZXRkLmQiCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCIKKwlpbnN0YWxsIC1tIDY0NCAiJHtXT1JLRElSfS94aW5ldGQuY29uZiIgIiR7RH0ke3N5c2NvbmZkaXJ9IgorCWluc3RhbGwgLW0gNzU1ICIke1dPUktESVJ9L3hpbmV0ZC5pbml0IiAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3hpbmV0ZCIKKwlpbnN0YWxsIC1tIDY0NCAiJHtXT1JLRElSfS94aW5ldGQuZGVmYXVsdCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveGluZXRkIgorCWluc3RhbGwgLW0gNzU1ICIke0J9L3hpbmV0ZC94aW5ldGQiICIke0R9JHtzYmluZGlyfSIKKwlpbnN0YWxsIC1tIDc1NSAiJHtCfS94aW5ldGQvaXRveCIgIiR7RH0ke3NiaW5kaXJ9IgorCisJIyBJbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94aW5ldGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkgICAgICAgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCSAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94aW5ldGQuc2VydmljZQorfQorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS94aW5ldGQuY29uZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFlNDhmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3h6L3h6XzUuMi4xLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBMWk1BIGNvbXByZXNzZWQgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vdHVrYWFuaS5vcmcveHovIgorU0VDVElPTiA9ICJiYXNlIgorCisjIFRoZSBzb3VyY2UgaW5jbHVkZXMgYml0cyBvZiBQRCwgR1BMdjIsIEdQTHYzLCBMR1BMdjIuMSssIGJ1dCB0aGUgb25seSBmaWxlCisjIHdoaWNoIGlzIEdQTHYzIGlzIGFuIG00IG1hY3JvIHdoaWNoIGlzbid0IHNoaXBwZWQgaW4gYW55IG9mIG91ciBwYWNrYWdlcywKKyMgYW5kIHRoZSBMR1BMIGJpdHMgYXJlIHVuZGVyIGxpYi8sIHdoaWNoIGFwcGVhcnMgdG8gYmUgdXNlZCBmb3IgbGliZ251LCB3aGljaAorIyBhcHBlYXJzIHRvIGJlIHVzZWQgZm9yIERPUyBidWlsZHMuIFNvIHdlJ3JlIGxlZnQgd2l0aCBHUEx2MisgYW5kIFBELgorTElDRU5TRSA9ICJHUEx2MisgJiBHUEx2MysgJiBMR1BMdjIuMSsgJiBQRCIKK0xJQ0VOU0VfJHtQTn0gPSAiR1BMdjIrIgorTElDRU5TRV8ke1BOfS1kZXYgPSAiR1BMdjIrIgorTElDRU5TRV8ke1BOfS1zdGF0aWNkZXYgPSAiR1BMdjIrIgorTElDRU5TRV8ke1BOfS1kb2MgPSAiR1BMdjIrIgorTElDRU5TRV8ke1BOfS1kYmcgPSAiR1BMdjIrIgorTElDRU5TRV8ke1BOfS1sb2NhbGUgPSAiR1BMdjIrIgorTElDRU5TRV9saWJsem1hID0gIlBEIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNDc1YjZjN2RjYTIzNjc0MGFjZTRiYmE1NTNlOGUxYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2Mi4xO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvZ2V0b3B0LmM7ZW5kbGluZT0yMzttZDU9MjA2OWIwZWU3MTA1NzJjMDNiYjMxMTRlNDUzMmNkODQgIgorCitTUkNfVVJJID0gImh0dHA6Ly90dWthYW5pLm9yZy94ei94ei0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiM2U0NGM3NjZjM2ZiNGYxOWUzNDhlNjQ2ZmNkNTc3OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjkxOGI2NjQ4MDc2ZTc0ZjhkN2FlMTlkYjVlZTY2M2RmODAwMDQ5ZTE4NzI1OWZhZjVlYjk5N2E3Yjk3NDY4MSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitQQUNLQUdFUyA9KyAibGlibHptYSIKKworRklMRVNfbGlibHptYSA9ICIke2xpYmRpcn0vbGlibHptYSoke1NPTElCU30iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjIxYzVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXAuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQ29tcHJlc3Nvci9hcmNoaXZlciBmb3IgY3JlYXRpbmcgYW5kIG1vZGlmeWluZyAuemlwIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvLXppcC5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDRkNDNjNWQ3MGI0OTZjMDMyMzA4MTA2ZTI2YWUxN2QiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvemlwJHtAZC5nZXRWYXIoJ1BWJywxKS5yZXBsYWNlKCcuJywgJycpfS50Z3oiCisKK0VYVFJBX09FTUFLRSA9ICInQ0M9JHtDQ30nICdCSU5EPSR7Q0N9JyAnQVM9JHtDQ30gLWMnICdDUFA9JHtDUFB9JyBcCisJCSdDRkxBR1M9LUkuIC1EVU5JWCAke0NGTEFHU30nICdJTlNUQUxMPWluc3RhbGwnIFwKKwkJJ0JJTkZMQUdTPTA3NTUnICdJTlNUQUxMX0Q9aW5zdGFsbCAtZCciCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGZsYWdzIElaX0JaSVAyPW5vX3N1Y2hfZGlyZWN0b3J5CisJc2VkIC1pICdzI0xGTEFHUzE9IiIjTEZMQUdTMT0iJHtMREZMQUdTfSIjJyBmbGFncworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBnZW5lcmljIElaX0JaSVAyPW5vX3N1Y2hfZGlyZWN0b3J5Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIHByZWZpeD0ke0R9JHtwcmVmaXh9IFwKKwkJICAgQklORElSPSR7RH0ke2JpbmRpcn0gTUFORElSPSR7RH0ke21hbmRpcn0vbWFuMSBcCisJCSAgIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5NjExMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwXzMuMC5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHppcC5pbmMKKworUFI9InIyIgorCisjIHppcC0yLjMyIHN0aWxsIHVzZXMgZGlyZWN0b3J5IG5hbWUgb2YgemlwLTIuMzAKK1MgPSAiJHtXT1JLRElSfS96aXAzMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjdiNzQ1NTFlNjNmOGVlNmFhYjZmYmM4NjY3NmMwZDM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYwZThiYjFmOWI3ZWIwYjAxMjg1NDk1YTI2OTlkZjNhNGI3NjY3ODRjMTc2NWE4ZjFhZWVkZjYzYzA4MDYzNjkiCisKKyMgemlwLmluYyBzZXRzIENGTEFHUywgYnV0IHdoYXQgTWFrZWZpbGUgYWN0dWFsbHkgdXNlcyBpcworIyBDRkxBR1NfTk9PUFQuICBJdCB3aWxsIGFsc28gZm9yY2UgLU8zIG9wdGltaXphdGlvbiwgb3ZlcnJpZGluZworIyB3aGF0ZXZlciB3ZSBzZXQuCisjCitFWFRSQV9PRU1BS0VfYXBwZW5kID0gIiAnQ0ZMQUdTX05PT1BUPS1JLiAtRFVOSVggJHtDRkxBR1N9JyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9lcGlwaGFueV8zLjE2LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmZiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiV2ViS2l0IGJhc2VkIHdlYiBicm93c2VyIGZvciBHTk9NRSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK0RFUEVORFMgPSAibGlic291cC0yLjQgd2Via2l0Z3RrIGd0ayszIGlzby1jb2RlcyBjYS1jZXJ0aWZpY2F0ZXMgYXZhaGkgbGlibm90aWZ5IGdjciBsaWJ3bmNrMyBcCisJICAgZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBnbm9tZS1kZXNrdG9wMyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMzI5NmFmNDUzMmI4MDE5Nzc1ZjRiNDBkMjFhMzQxYWUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJkNTI3ZjE3NzA3NzllYzIyZDk1NWFlYjEzYjE0OGE4NDZhMjYxNDRlNDMzZmYwNDgwYzk4MWFmODBlMjM5MGIxIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWRpc2FibGUtbnNzIC0td2l0aC1kaXN0cmlidXRvci1uYW1lPSR7RElTVFJPfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgdG91Y2ggJHtTfS9nbm9tZS1kb2MtdXRpbHMubWFrZQorICAgIHNlZCAtaSAtZSBzOmhlbHA6OmcgJHtTfS9NYWtlZmlsZS5hbQorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBkYXRhICR7ZGF0YWRpcn0vZGJ1cy0xICR7ZGF0YWRpcn0vZ25vbWUtc2hlbGwvc2VhcmNoLXByb3ZpZGVycyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2VwaXBoYW55Lyovd2ViLWV4dGVuc2lvbnMvLmRlYnVnL2xpYmVwaHl3ZWJleHRlbnNpb24uc28iCitSREVQRU5EU18ke1BOfSA9ICJpc28tY29kZXMgYWR3YWl0YS1pY29uLXRoZW1lIgorUlJFQ09NTUVORFNfJHtQTn0gPSAiY2EtY2VydGlmaWNhdGVzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZmlsZXMvMDAwMS15ZWxwLm00LWRyb3AtdGhlLWNoZWNrLWZvci1pdHN0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg1ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDMwZjAzYTI1NmVmZTM3NWE0ZDVjM2EyNGJmNDE2OGViZjM4MGUzYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMzAgSnVsIDIwMTUgMTU6MTM6MjMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0geWVscC5tNDogZHJvcCB0aGUgY2hlY2sgZm9yIGl0c3Rvb2wKKworSXQgaXNuJ3QgdXNlZCBmb3IgYW55dGhpbmcgZHVyaW5nIGJ1aWxkLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcHJvdmlkZQoraXQgYXMgYSByZWNpcGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGFyYmFsbC1zcGVjaWZpYyBpc3N1ZV0KKy0tLQorIG00L3llbHAubTQgfCA2IC0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbTQveWVscC5tNCBiL200L3llbHAubTQKK2luZGV4IDVkYjg0N2YuLjFiNmVkZTQgMTAwNjQ0CistLS0gYS9tNC95ZWxwLm00CisrKysgYi9tNC95ZWxwLm00CitAQCAtMjcsMTIgKzI3LDYgQEAgQUNfQVJHX1dJVEgoW2hlbHAtZGlyXSwKKyBIRUxQX0RJUj0iJHdpdGhfaGVscF9kaXIiCisgQUNfU1VCU1QoSEVMUF9ESVIpCisgCistQUNfQVJHX1ZBUihbSVRTVE9PTF0sIFtQYXRoIHRvIHRoZSBgaXRzdG9vbGAgY29tbWFuZF0pCistQUNfQ0hFQ0tfUFJPRyhbSVRTVE9PTF0sIFtpdHN0b29sXSwgW2l0c3Rvb2xdKQorLWlmIHRlc3QgeCIkSVRTVE9PTCIgPSB4OyB0aGVuCistICBBQ19NU0dfRVJST1IoW2l0c3Rvb2wgbm90IGZvdW5kXSkKKy1maQorLQorIEFDX0FSR19WQVIoW1hNTExJTlRdLCBbUGF0aCB0byB0aGUgYHhtbGxpbnRgIGNvbW1hbmRdKQorIEFDX0NIRUNLX1BST0coW1hNTExJTlRdLCBbeG1sbGludF0sIFt4bWxsaW50XSkKKyBpZiB0ZXN0IHgiJFhNTExJTlQiID0geDsgdGhlbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YjZlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nY3IvZ2NyXzMuMTYuMC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYml0cyBvZiBjcnlwdG8gVUkgYW5kIHBhcnNpbmcgZXRjIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSIKKworREVQRU5EUyA9ICJndGsrMyBwMTEta2l0IGdsaWItMi4wIGxpYmdjcnlwdCB2YWxhIgorCitpbmhlcml0IGF1dG90b29scyBnbm9tZWJhc2UgZ3RrLWljb24tY2FjaGUgZ3RrLWRvYworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJkNTgzNTY4MGJlMGI2YTgzOGUwMmE1MjhkNTM3OGQ5YyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImVjZmU4ZGY0MWNjODgxNTgzNjRiYjE1YWRkYzY3MGIxMWU1MzlmZTg0NDc0Mjk4MzYyOWJhMjMyMzg4OGQwNzUiCisKK0ZJTEVTXyR7UE59ICs9ICIgXAorICAgICR7ZGF0YWRpcn0vZGJ1cy0xIFwKKyAgICAke2RhdGFkaXJ9L2djci0zIFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvMDAwMS1waXhvcHMtQmUtbW9yZS1jYXJlZnVsLWFib3V0LWludGVnZXItb3ZlcmZsb3cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2MxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsODkgQEAKK0Zyb20gZmZlYzg2ZWQ1MDEwYzVhMmJlMTRmNDdiMzNiY2Y0ZWQzMTY5YTE5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxMyBKdWwgMjAxNSAwMDozMzo0MCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBwaXhvcHM6IEJlIG1vcmUgY2FyZWZ1bCBhYm91dCBpbnRlZ2VyIG92ZXJmbG93CisKK091ciBsb2FkZXIgY29kZSBpcyBzdXBwb3NlZCB0byBoYW5kbGUgb3V0LW9mLW1lbW9yeSBhbmQgb3ZlcmZsb3cKK3NpdHVhdGlvbnMgZ3JhY2VmdWxseSwgcmVwb3J0aW5nIGVycm9ycyBpbnN0ZWFkIG9mIGFib3J0aW5nLiBCdXQKK2lmIHlvdSBsb2FkIGFuIGltYWdlIGF0IGEgc3BlY2lmaWMgc2l6ZSwgd2UgYWxzbyBleGVjdXRlIG91cgorc2NhbGluZyBjb2RlLCB3aGljaCB3YXMgbm90IGNhcmVmdWwgZW5vdWdoIGFib3V0IG92ZXJmbG93IGluIHNvbWUKK3BsYWNlcy4KKworVGhpcyBjb21taXQgbWFrZXMgdGhlIHNjYWxpbmcgY29kZSBzaWxlbnRseSByZXR1cm4gaWYgaXQgZmFpbHMgdG8KK2FsbG9jYXRlIGZpbHRlciB0YWJsZXMuIFRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLCBzaW5jZQorZ2RrX3BpeGJ1Zl9zY2FsZSgpIGlzIG5vdCB0YWtpbmcgYSBHRXJyb3IuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTIyOTcKKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CistLS0KKyBnZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYyB8ICAgMjIgKysrKysrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMgYi9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYworaW5kZXggMjlhMWMxNC4uY2U1MTc0NSAxMDA2NDQKKy0tLSBhL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jCisrKysgYi9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYworQEAgLTEyNzIsNyArMTI3MiwxNiBAQCBtYWtlX2ZpbHRlcl90YWJsZSAoUGl4b3BzRmlsdGVyICpmaWx0ZXIpCisgICBpbnQgaV9vZmZzZXQsIGpfb2Zmc2V0OworICAgaW50IG5feCA9IGZpbHRlci0+eC5uOworICAgaW50IG5feSA9IGZpbHRlci0+eS5uOworLSAgaW50ICp3ZWlnaHRzID0gZ19uZXcgKGludCwgU1VCU0FNUExFICogU1VCU0FNUExFICogbl94ICogbl95KTsKKysgIGdzaXplIG5fd2VpZ2h0czsKKysgIGludCAqd2VpZ2h0czsKKysKKysgIG5fd2VpZ2h0cyA9IFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCAqIG5feTsKKysgIGlmIChuX3dlaWdodHMgLyAoU1VCU0FNUExFICogU1VCU0FNUExFICogbl94KSAhPSBuX3kpCisrICAgIHJldHVybiBOVUxMOyAvKiBvdmVyZmxvdywgYmFpbCAqLworKworKyAgd2VpZ2h0cyA9IGdfdHJ5X25ldyAoaW50LCBuX3dlaWdodHMpOworKyAgaWYgKCF3ZWlnaHRzKQorKyAgICByZXR1cm4gTlVMTDsgLyogb3ZlcmZsb3csIGJhaWwgKi8KKyAKKyAgIGZvciAoaV9vZmZzZXQ9MDsgaV9vZmZzZXQgPCBTVUJTQU1QTEU7IGlfb2Zmc2V0KyspCisgICAgIGZvciAoal9vZmZzZXQ9MDsgal9vZmZzZXQgPCBTVUJTQU1QTEU7IGpfb2Zmc2V0KyspCitAQCAtMTM0Nyw4ICsxMzU2LDExIEBAIHBpeG9wc19wcm9jZXNzIChndWNoYXIgICAgICAgICAqZGVzdF9idWYsCisgICBpZiAoeF9zdGVwID09IDAgfHwgeV9zdGVwID09IDApCisgICAgIHJldHVybjsgLyogb3ZlcmZsb3csIGJhaWwgb3V0ICovCisgCistICBsaW5lX2J1ZnMgPSBnX25ldyAoZ3VjaGFyICosIGZpbHRlci0+eS5uKTsKKyAgIGZpbHRlcl93ZWlnaHRzID0gbWFrZV9maWx0ZXJfdGFibGUgKGZpbHRlcik7CisrICBpZiAoIWZpbHRlcl93ZWlnaHRzKQorKyAgICByZXR1cm47IC8qIG92ZXJmbG93LCBiYWlsIG91dCAqLworKworKyAgbGluZV9idWZzID0gZ19uZXcgKGd1Y2hhciAqLCBmaWx0ZXItPnkubik7CisgCisgICBjaGVja19zaGlmdCA9IGNoZWNrX3NpemUgPyBnZXRfY2hlY2tfc2hpZnQgKGNoZWNrX3NpemUpIDogMDsKKyAKK0BAIC0xNDY4LDcgKzE0ODAsNyBAQCB0aWxlX21ha2Vfd2VpZ2h0cyAoUGl4b3BzRmlsdGVyRGltZW5zaW9uICpkaW0sCisgCQkgICBkb3VibGUgICAgICAgICAgICAgICAgIHNjYWxlKQorIHsKKyAgIGludCBuID0gY2VpbCAoMSAvIHNjYWxlICsgMSk7CistICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX25ldyAoZG91YmxlLCBTVUJTQU1QTEUgKiBuKTsKKysgIGRvdWJsZSAqcGl4ZWxfd2VpZ2h0cyA9IGdfbWFsbG9jX24gKHNpemVvZiAoZG91YmxlKSAqIFNVQlNBTVBMRSwgbik7CisgICBpbnQgb2Zmc2V0OworICAgaW50IGk7CisgCitAQCAtMTUyNiw3ICsxNTM4LDcgQEAgYmlsaW5lYXJfbWFnbmlmeV9tYWtlX3dlaWdodHMgKFBpeG9wc0ZpbHRlckRpbWVuc2lvbiAqZGltLAorICAgICB9CisgCisgICBkaW0tPm4gPSBuOworLSAgZGltLT53ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkaW0tPndlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworIAorICAgcGl4ZWxfd2VpZ2h0cyA9IGRpbS0+d2VpZ2h0czsKKyAKK0BAIC0xNjE3LDcgKzE2MjksNyBAQCBiaWxpbmVhcl9ib3hfbWFrZV93ZWlnaHRzIChQaXhvcHNGaWx0ZXJEaW1lbnNpb24gKmRpbSwKKyAJCQkgICBkb3VibGUgICAgICAgICAgICAgICAgIHNjYWxlKQorIHsKKyAgIGludCBuID0gY2VpbCAoMS9zY2FsZSArIDMuMCk7CistICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX25ldyAoZG91YmxlLCBTVUJTQU1QTEUgKiBuKTsKKysgIGRvdWJsZSAqcGl4ZWxfd2VpZ2h0cyA9IGdfbWFsbG9jX24gKHNpemVvZiAoZG91YmxlKSAqIFNVQlNBTVBMRSwgbik7CisgICBkb3VibGUgdzsKKyAgIGludCBvZmZzZXQsIGk7CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGJkY2VkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgcGFyYWxsZWwgaW5zdGFsbCBpc3N1ZSB0aGF0IGxpYiBsaWJwaXhidWZsb2FkZXItcG5nLmxhCitkZXBlbmRzIG9uIGxpYmdka19waXhidWYtMi4wLmxhIHdoaWNoIHdpbGwgYmUgcmVnZW5lcmF0ZWQgZHVyaW5nIGluc3RhLQorbGxhdGlvbiwgaWYgbGliZ2RrX3BpeGJ1Zi0yLjAubGEgaXMgcmVnZW5lcmF0aW5nIGFuZCBhdCB0aGUgc2FtZSB0aW1lCitsaWJwaXhidWZsb2FkZXItcG5nLmxhIGxpbmtzIGl0LCB0aGUgZXJyb3Igd2lsbCBoYXBwZW4uCisKK0Vycm9yIG1lc3NhZ2UgaXM6CisqIHVzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sZ2RrX3BpeGJ1Zi0yLjAKKyogY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworTWFrZSBhbiBleHBsaWNpdCBkZXBlbmRlbmN5IHRvIHRoZSBsaWJzIGluc3RhbGwgdGFyZ2V0cyB3b3VsZCBmaXggdGhpcworaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbSB8ICAgIDEgKworIGxpYmRlcHMubWsgICAgICAgICAgICAgfCAgICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJkZXBzLm1rCisKK2RpZmYgLS1naXQgYS9nZGstcGl4YnVmL01ha2VmaWxlLmFtIGIvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbQoraW5kZXggOTVhOTNhOC4uZGI0NGNhZSAxMDA2NDQKKy0tLSBhL2dkay1waXhidWYvTWFrZWZpbGUuYW0KKysrKyBiL2dkay1waXhidWYvTWFrZWZpbGUuYW0KK0BAIC03ODMsMyArNzgzLDQgQEAgbG9hZGVycy5jYWNoZToKKyBlbmRpZgorIAorIC1pbmNsdWRlICQodG9wX3NyY2RpcikvZ2l0Lm1rCisrLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9saWJkZXBzLm1rCitkaWZmIC0tZ2l0IGEvbGliZGVwcy5tayBiL2xpYmRlcHMubWsKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kN2ExMGE4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJkZXBzLm1rCitAQCAtMCwwICsxLDMgQEAKKysjIEV4dGVuZGluZyBkZXBlbmRlbmNpZXMgb2YgaW5zdGFsbC1sb2FkZXJMVExJQlJBUklFUzoKKysjIFRoZSAkKGxpYi1MVExJQlJBUklFUykgaXMgbmVlZGVkIGJ5IHJlbGlua2luZyAkKGxvYWRlcl9MVExJQlJBUklFUykKKytpbnN0YWxsLWxvYWRlckxUTElCUkFSSUVTOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCistLSAKKzEuNy42LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9mYXRhbC1sb2FkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2ZhdGFsLWxvYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDE0NmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9mYXRhbC1sb2FkZXIucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorSWYgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc3BlY2lmaWVkIHNldCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gbWFpbigpIHRvCitub24temVybyBpZiB0aGUgbG9hZGVyIGhhZCBlcnJvcnMgKG1pc3NpbmcgbGlicmFyaWVzLCBnZW5lcmFsbHkpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jIGIvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYworaW5kZXggYTljYTAxNS4uMzk1Njc0YSAxMDA2NDQKKy0tLSBhL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMKKysrKyBiL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMKK0BAIC0xNDYsNyArMTQ2LDcgQEAgd3JpdGVfbG9hZGVyX2luZm8gKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpwYXRoLCBHZGtQaXhidWZGb3JtYXQgKmluZm8pCisgICAgICAgICBnX3N0cmluZ19hcHBlbmRfYyAoY29udGVudHMsICdcbicpOworIH0KKyAKKy1zdGF0aWMgdm9pZAorK3N0YXRpYyBnYm9vbGVhbgorIHF1ZXJ5X21vZHVsZSAoR1N0cmluZyAqY29udGVudHMsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZSkKKyB7CisgICAgICAgICBjaGFyICpwYXRoOworQEAgLTE1NSw2ICsxNTUsNyBAQCBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAoKmZpbGxfdnRhYmxlKSAgIChHZGtQaXhidWZNb2R1bGUgKm1vZHVsZSk7CisgICAgICAgICBncG9pbnRlciBmaWxsX2luZm9fcHRyOworICAgICAgICAgZ3BvaW50ZXIgZmlsbF92dGFibGVfcHRyOworKyAgICAgICAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKKyAKKyAgICAgICAgIGlmIChnX3BhdGhfaXNfYWJzb2x1dGUgKGZpbGUpKQorICAgICAgICAgICAgICAgICBwYXRoID0gZ19zdHJkdXAgKGZpbGUpOworQEAgLTIwNCwxMCArMjA1LDEzIEBAIHF1ZXJ5X21vZHVsZSAoR1N0cmluZyAqY29udGVudHMsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfbW9kdWxlX2Vycm9yKCkpOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgZ19mcHJpbnRmIChzdGRlcnIsICJDYW5ub3QgbG9hZCBsb2FkZXIgJXNcbiIsIHBhdGgpOworKyAgICAgICAgICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmIChtb2R1bGUpCisgICAgICAgICAgICAgICAgIGdfbW9kdWxlX2Nsb3NlIChtb2R1bGUpOworICAgICAgICAgZ19mcmVlIChwYXRoKTsKKysKKysgICAgICAgIHJldHVybiByZXQ7CisgfQorIAorICNpZmRlZiBHX09TX1dJTjMyCitAQCAtMjU3LDYgKzI2MSw3IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBHU3RyaW5nICpjb250ZW50czsKKyAgICAgICAgIGdjaGFyICpjYWNoZV9maWxlID0gTlVMTDsKKyAgICAgICAgIGdpbnQgZmlyc3RfZmlsZSA9IDE7CisrICAgICAgICBnYm9vbGVhbiBzdWNjZXNzID0gVFJVRTsKKyAKKyAjaWZkZWYgR19PU19XSU4zMgorICAgICAgICAgZ2NoYXIgKmxpYmRpcjsKK0BAIC0zNjAsNyArMzY1LDggQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbGVuID0gc3RybGVuIChkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiBTT0VYVF9MRU4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAgKGRlbnQgKyBsZW4gLSBTT0VYVF9MRU4sIFNPRVhUKSA9PSAwKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X21vZHVsZSAoY29udGVudHMsIHBhdGgsIGRlbnQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5X21vZHVsZSAoY29udGVudHMsIHBhdGgsIGRlbnQpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgZ19kaXJfY2xvc2UgKGRpcik7CitAQCAtMzc4LDcgKzM4NCw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5maWxlbmFtZSA9IGdfbG9jYWxlX3RvX3V0ZjggKGluZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAjZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBjd2QsIGluZmlsZW5hbWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnlfbW9kdWxlIChjb250ZW50cywgY3dkLCBpbmZpbGVuYW1lKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBnX2ZyZWUgKGN3ZCk7CisgICAgICAgICB9CitAQCAtMzk0LDUgKzQwMSw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIGdfcHJpbnQgKCIlc1xuIiwgY29udGVudHMtPnN0cik7CisgCistICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmIChnX2dldGVudiAoIkdES19QSVhCVUZfRkFUQUxfTE9BREVSIikpCisrICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzID8gMCA6IDE7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2E2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdkay1waXhidWYtMi4yMi4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdkay1waXhidWYtMi4yMi4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMDk6MDY6MzQuMDAwMDAwMDAwICswODAwCisrKysgZ2RrLXBpeGJ1Zi0yLjIyLjEvY29uZmlndXJlLmFjCTIwMTAtMTEtMjYgMDk6MDc6MzMuMDAwMDAwMDAwICswODAwCitAQCAtMjg3LDcgKzI4Nyw3IEBACisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJyE9JyB4cGFzc19hbGwgfHwgdGVzdCAieCRlbmFibGVfc3RhdGljIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgZW5hYmxlX2V4cGxpY2l0X2RlcHM9eWVzCisgICAgIGVsc2UKK0BAIC00ODQsNyArNDg0LDcgQEAKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBwaXhidWZfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIHBpeGJ1Zl9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgorICAgICAgICAgcGl4YnVmX2RlcGxpYnNfY2hlY2s9YCRwaXhidWZfbGlidG9vbF9jb25maWcgfCBcCisgICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAorICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKK0BAIC05NTcsNyArOTU3LDcgQEAKKyAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCisgIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgorIGV4cG9ydCBTRUQKKy1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorK2V4cG9ydF9keW5hbWljPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgaWYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgorICAgR0RLX1BJWEJVRl9ERVBfTElCUz1gZWNobyAkR0RLX1BJWEJVRl9ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MDcyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zaAorCitnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIGdkay1waXhidWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zMC44LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zl8yLjMwLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjMmRjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zMC44LmJiCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiSW1hZ2UgbG9hZGluZyBsaWJyYXJ5IGZvciBHVEsrIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi5oO2VuZGxpbmU9MjY7bWQ1PTcyYjM5ZGE3Y2JkZGUyZTY2NTMyOWZlZjYxOGUxZDZiIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCitERVBFTkRTX2FwcGVuZF9saW51eHN0ZGJhc2UgPSAiIHZpcnR1YWwvbGlieDExIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9mYXRhbC1sb2FkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1waXhvcHMtQmUtbW9yZS1jYXJlZnVsLWFib3V0LWludGVnZXItb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZmVkMGQ1NDQzMmYxYjY5ZmM2ZTY2ZTYwOGJkNTU0MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ODUzODMwNjE2MTEzZGI0NDM1ODM3OTkyYzBhZWJkOTRjYmI5OTNjNDRkYzU1MDYzY2VlN2Y3MmE3YmVmOGJlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBwaXhidWZjYWNoZSBwdGVzdC1nbm9tZQorCitMSUJWID0gIjIuMTAuMCIKKworR0RLX1BJWEJVRl9MT0FERVJTID89ICJwbmcganBlZyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKK1BBQ0tBR0VDT05GSUdfbGludXhzdGRiYXNlID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gJHtHREtfUElYQlVGX0xPQURFUlN9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPSAiJHtHREtfUElYQlVGX0xPQURFUlN9IgorCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS13aXRoLWxpYnBuZywtLXdpdGhvdXQtbGlicG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS13aXRoLWxpYmpwZWcsLS13aXRob3V0LWxpYmpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbdGlmZl0gPSAiLS13aXRoLWxpYnRpZmYsLS13aXRob3V0LWxpYnRpZmYsdGlmZiIKK1BBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0td2l0aC1saWJqYXNwZXIsLS13aXRob3V0LWxpYmphc3BlcixqYXNwZXIiCisKKyMgVXNlIEdJTyB0byBzbmlmZiBpbWFnZSBmb3JtYXQgaW5zdGVhZCBvZiB0cnlpbmcgYWxsIGxvYWRlcnMKK1BBQ0tBR0VDT05GSUdbZ2lvLXNuaWZmXSA9ICItLWVuYWJsZS1naW8tc25pZmZpbmcsLS1kaXNhYmxlLWdpby1zbmlmZmluZywsc2hhcmVkLW1pbWUtaW5mbyIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteDExLC0td2l0aG91dC14MTEsdmlydHVhbC9saWJ4MTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworUEFDS0FHRVMgPSsgIiR7UE59LXhsaWIiCisKK0ZJTEVTXyR7UE59LXhsaWIgPSAiJHtsaWJkaXJ9LypwaXhidWZfeGxpYioke1NPTElCU30iCitBTExPV19FTVBUWV8ke1BOfS14bGliID0gIjEiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgXAorCSR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCSR7bGliZGlyfS9saWIqLnNvLioiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKwkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkke2luY2x1ZGVkaXJ9LyogXAorCSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMvKi5sYSBcCisiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKyAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1Zy8qIFwKKwkke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLy5kZWJ1Zy8qIFwKKyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmdkay1waXhidWYtbG9hZGVyLS4qIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgcG9zdGluc3RfcGl4YnVmbG9hZGVyID0gZC5nZXRWYXIoInBvc3RpbnN0X3BpeGJ1ZmxvYWRlciIsIFRydWUpCisKKyAgICBsb2FkZXJzX3Jvb3QgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycycpCisKKyAgICBwYWNrYWdlcyA9ICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxvYWRlcnNfcm9vdCwgJ15saWJwaXhidWZsb2FkZXItKC4qKVwuc28kJywgJ2dkay1waXhidWYtbG9hZGVyLSVzJywgJ0dESyBwaXhidWYgbG9hZGVyIGZvciAlcycpKQorICAgIGQuc2V0VmFyKCdQSVhCVUZfUEFDS0FHRVMnLCBwYWNrYWdlcykKKworICAgICMgVGhlIHRlc3Qgc3VpdGUgZXhlcmNpc2VzIGFsbCB0aGUgbG9hZGVycywgc28gZW5zdXJlIHRoZXkgYXJlIGFsbAorICAgICMgZGVwZW5kZW5jaWVzIG9mIHRoZSBwdGVzdCBwYWNrYWdlLgorICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU19nZGstcGl4YnVmLXB0ZXN0IiwgIiAiICsgcGFja2FnZXMpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlmaW5kICR7RH0ke2xpYmRpcn0gLW5hbWUgImxpYnBpeGJ1ZmxvYWRlci0qLmxhIiAtZXhlYyBybSBce1x9IFw7CisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLWNzb3VyY2UgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcGl4ZGF0YSBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycworfQorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyZjA2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS1kZXNrdG9wL2dub21lLWRlc2t0b3AzXzMuMTYuMi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkdOT01FIGxpYnJhcnkgZm9yIHJlYWRpbmcgLmRlc2t0b3AgZmlsZXMiCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK0JQTiA9ICJnbm9tZS1kZXNrdG9wIgorCitpbmhlcml0IGdub21lIHBrZ2NvbmZpZworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYWI1YmY0Y2M5NGFkNjM2MzlmNDJhZGNjMTU0MmIxZjAiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIzYThmMTk2YjQ2ZWI5ZGJkM2JhMmFmYjhmYjVmZWY2YTg4MjU1MzlkNDQ5YTAyMTgxMzExMjQyZTIyMjI3YmQwIgorCitERVBFTkRTICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIGdjb25mIGxpYnhyYW5kciB2aXJ0dWFsL2xpYngxMSBndGsrMyBnbGliLTIuMCBnbm9tZS1kb2MtdXRpbHMgZ25vbWUtY29tbW9uIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGlzby1jb2RlcyIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXNrdG9wLWRvY3MiCisKK1BBQ0tBR0VTID0rICJsaWJnbm9tZS1kZXNrdG9wMyIKK0ZJTEVTX2xpYmdub21lLWRlc2t0b3AzID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7ZGF0YWRpcn0vbGliZ25vbWUtZGVza3RvcCovcG5wLmlkcyAke2RhdGFkaXJ9L2dub21lLyp4bWwiCisKK1JSRUNPTU1FTkRTX2xpYmdub21lLWRlc2t0b3AzICs9ICJnc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWUvQ3JlYXRlLXN5bWxpbmtzLXdoZW4taW5zdGFsbGluZy1jdXJzb3JzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmY5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaApAQCAtMCwwICsxLDE3OCBAQAorQ3JlYXRlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBjdXJzb3JzCisKK1RoaXMgY3V0cyBkb3duIHRoZSBpbnN0YWxsZWQgc2l6ZSBieSB+MTFNQi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCitGcm9tIDFlOGMwZGQwYTJkZTVlMWQ1ZmY2MGZmMTFmMTMxZTg4NTEwYzdmNTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/PUQwPUEwPUQxPTgzPUQxPTgxPUQwPUJCPUQwPUIwPUQwPUJEPTIwPUQwPTk4PUQwPUI2PUQwPUIxPz0KKyA9P1VURi04P3E/PUQxPTgzPUQwPUJCPUQwPUIwPUQxPTgyPUQwPUJFPUQwPUIyPz0gPGxybjE5ODZAZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNiBNYXkgMjAxNSAwNzo0OToxOSArMDAwMAorU3ViamVjdDogW1BBVENIXSBDcmVhdGUgc3ltbGlua3Mgd2hlbiBpbnN0YWxsaW5nIGN1cnNvcnMKKworQWxzbyBzdXBwb3J0IGNyZWF0aW5nIHN5bWxpbmtzIGZvciBXMzIgY3Vyc29ycyAoaW5jbHVkaW5nIEwgYW5kIFhMIHZhcmlhbnRzKS4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTIyMworLS0tCisgTWFrZWZpbGUuYW0gIHwgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgY29uZmlndXJlLmFjIHwgMjQgKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGZlZDM5NzIuLjRkMDAyNjggMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC02LDYgKzYsMTcgQEAgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgJHtBQ0xPQ0FMX0ZMQUdTfQorIAorIGN1cnNvcmRpciA9ICQoZGF0YWRpcikvaWNvbnMvQWR3YWl0YS9jdXJzb3JzCisgY3Vyc29yX0RBVEEgPSAkKHdpbGRjYXJkICQoc3JjZGlyKS9BZHdhaXRhL2N1cnNvcnMvKikKKytpZiBFTkFCTEVfTF9YTF9WQVJJQU5UUworK2N1cnNvcmxkaXIgPSAkKGRhdGFkaXIpL2ljb25zL0Fkd2FpdGEtTGFyZ2UvY3Vyc29ycworK2N1cnNvcmxfREFUQSA9ICQod2lsZGNhcmQgJChzcmNkaXIpL0Fkd2FpdGEtTGFyZ2UvY3Vyc29ycy8qKQorK2N1cnNvcnhsZGlyID0gJChkYXRhZGlyKS9pY29ucy9BZHdhaXRhLUV4dHJhTGFyZ2UvY3Vyc29ycworK2N1cnNvcnhsX0RBVEEgPSAkKHdpbGRjYXJkICQoc3JjZGlyKS9BZHdhaXRhLUV4dHJhTGFyZ2UvY3Vyc29ycy8qKQorK2Vsc2UKKytjdXJzb3JsZGlyID0KKytjdXJzb3JsX0RBVEEgPQorK2N1cnNvcnhsZGlyID0KKytjdXJzb3J4bF9EQVRBID0KKytlbmRpZgorIAorIHRoZW1lX2luX2ZpbGVzID0gaW5kZXgudGhlbWUuaW4uaW4KKyB0aGVtZV9EQVRBID0gJCh0aGVtZV9pbl9maWxlczoudGhlbWUuaW4uaW49LnRoZW1lKQorQEAgLTk5LDYgKzExMCw4OCBAQCBpbnN0YWxsLWRhdGEtbG9jYWw6CisgCWZpCisgCisgaW5zdGFsbC1kYXRhLWhvb2s6CisrCWNkICQoREVTVERJUikkKGN1cnNvcmRpcikgJiYgXAorKwlpZiB0ZXN0ICJ4JChlbmFibGVfdzMyX2N1cnNvcnMpIiA9ICJ4eWVzIjsgXAorKwl0aGVuIFwKKysJCWN1cj0uY3VyICYmIFwKKysJCWFuaT0uYW5pOyBcCisrCWVsc2UgXAorKwkJY3VyPSAmJiBcCisrCQlhbmk9IDsgXAorKwlmaTsgXAorKwlpZiB0ZXN0ICJ4JChlbmFibGVfbF94bF92YXJpYW50cykiID0gInh5ZXMiOyBcCisrCXRoZW4gXAorKwkJdGhlbWVkaXJzPSIkKGN1cnNvcmRpcikgJChjdXJzb3JsZGlyKSAkKGN1cnNvcnhsZGlyKSI7IFwKKysJZWxzZSBcCisrCQl0aGVtZWRpcnM9IiQoY3Vyc29yZGlyKSI7IFwKKysJZmk7IFwKKysJZm9yIGQgaW4gJCR0aGVtZWRpcnM7IFwKKysJZG8gXAorKwkJY2QgJChERVNURElSKSQkZCAmJiBcCisrCQllY2hvIENyZWF0aW5nIHN5bWxpbmtzIGluICQoREVTVERJUikkJGQgJiYgXAorKwkJJChMTl9TKSAtZiAgZG90Ym94JCRjdXIJCQlkcmFwZWRfYm94JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG90Ym94JCRjdXIJCQlpY29uJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG90Ym94JCRjdXIJCQl0YXJnZXQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkb3Rib3gkJGN1cgkJCWRvdF9ib3hfbWFzayQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIFhfY3Vyc29yJCRjdXIJCXBpcmF0ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyX3dhdGNoJCRhbmkJCTA4ZThlMWM5NWZlMmZjMDFmOTc2ZjFlMDYzYTI0Y2NkJCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHJfd2F0Y2gkJGFuaQkJM2VjYjYxMGMxYmYyNDEwZjQ0MjAwZjQ4YzQwZDM1OTkkJGFuaSAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0ciQkY3VyCQlhcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyJCRjdXIJCXRvcF9sZWZ0X2Fycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcmlnaHRfcHRyJCRjdXIJCWRyYWZ0X2xhcmdlJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcmlnaHRfcHRyJCRjdXIJCWRyYWZ0X3NtYWxsJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbW92ZSQkY3VyCQkJNDQ5OGYwZTBjMTkzN2ZmZTAxZmQwNmY5NzM2NjU4MzAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBtb3ZlJCRjdXIJCQk5MDgxMjM3MzgzZDkwZTUwOWFhMDBmMDAxNzBlOTY4ZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNvcHkkJGN1cgkJCTEwODFlMzcyODNkOTAwMDA4MDAwMDNjMDdmM2VmNmJmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY29weSQkY3VyCQkJNjQwN2IwZTk0MTgxNzkwNTAxZmQxZTE2N2I0NzQ4NzIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zcyQkY3VyCQkJY3Jvc3NfcmV2ZXJzZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzJCRjdXIJCQlkaWFtb25kX2Nyb3NzJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDEkJGN1cgkJCWdyYWIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kMiQkY3VyCQkJOWQ4MDA3ODhmMWIwODgwMGFlODEwMjAyMzgwYTA4MjIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kMiQkY3VyCQkJZTI5Mjg1ZTYzNDA4NjM1Mjk0NmEwZTcwOTBkNzMxMDYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoYW5kMiQkY3VyCQkJaGFuZCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGdyYWJiaW5nJCRjdXIJCWZsZXVyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJZDljZTBhYjYwNTY5OGYzMjA0Mjc2NzdiNDU4YWQ2MGIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQk1YzZjZDk4YjNmM2ViY2IxZjljN2YxYzIwNDYzMDQwOCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCWhlbHAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQlsZWZ0X3B0cl9oZWxwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGluayQkY3VyCQkJMzA4NWEwZTI4NTQzMDg5NDk0MDUyNzAzMmY4YjI2ZGYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsaW5rJCRjdXIJCQk2NDBmYjBlNzQxOTU3OTE1MDFmZDFlZDU3YjQxNDg3ZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzZWRfY2lyY2xlJCRjdXIJCTAzYjZlMGZjYjM0OTkzNzRhODY3YzA0MWY1MjI5OGYwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZmRfZG91YmxlX2Fycm93JCRjdXIJZmNmMWMzYzdjZDQ0OTFkODAxZjFlMWM3OGYxMDAwMDAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBiZF9kb3VibGVfYXJyb3ckJGN1cgljNzA4OGYwZjNlNmM4MDg4MjM2ZWY4ZTFlM2U3MDAwMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIgCWhfZG91YmxlX2Fycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1cgkxNGZlZjc4MmQwMjQ0MDg4NDM5Mjk0MmMxMTIwNTIzMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhfZG91YmxlX2Fycm93JCRjdXIJCTAyODAwNjAzMGUwZTdlYmZmYzdmNzA3MGMwNjAwMTQwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1ciAJZG91YmxlX2Fycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1ciAJdl9kb3VibGVfYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyCTI4NzBhMDkwODJjMTAzMDUwODEwZmZkZmZmZmUwMjA0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdl9kb3VibGVfYXJyb3ckJGN1cgkJMDAwMDgxNjAwMDAwMDY4MTAwMDA0MDgwODAwMTAxMDIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0ciQkY3VyCQlkZWZhdWx0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZCQkY3VyCQkJcG9pbnRlciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyX3dhdGNoJCRhbmkJCXByb2dyZXNzJCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgd2F0Y2gkJGFuaQkJCXdhaXQkJGFuaSAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zcyQkY3VyCQkJY3Jvc3NoYWlyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgeHRlcm0kJGN1cgkJCXRleHQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkbmQtbGluayQkY3VyCQlhbGlhcyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRuZC1jb3B5JCRjdXIJCWNvcHkkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkbmQtbm9uZSQkY3VyCQluby1kcm9wJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3NlZF9jaXJjbGUkJGN1cgkJbm90LWFsbG93ZWQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyCWNvbC1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyCXJvdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB0b3Bfc2lkZSQkY3VyCQluLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3NpZGUkJGN1cgkJZS1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBib3R0b21fc2lkZSQkY3VyCQlzLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfc2lkZSQkY3VyCQl3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHRvcF9yaWdodF9jb3JuZXIkJGN1cgluZS1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB0b3BfbGVmdF9jb3JuZXIkJGN1cgludy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBib3R0b21fcmlnaHRfY29ybmVyJCRjdXIJc2UtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX2xlZnRfY29ybmVyJCRjdXIJc3ctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1cglldy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl92X2RvdWJsZV9hcnJvdyQkY3VyCW5zLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGZkX2RvdWJsZV9hcnJvdyQkY3VyCW5lc3ctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYmRfZG91YmxlX2Fycm93JCRjdXIJbndzZS1yZXNpemUkJGN1cjsgXAorKwlkb25lCisgCWlmIHRlc3QgLXogIiQoREVTVERJUikiICYmIHRlc3QgLW4gIiQoR1RLX1VQREFURV9JQ09OX0NBQ0hFKSIgOyB0aGVuIFwKKyAJCSQoR1RLX1VQREFURV9JQ09OX0NBQ0hFKSAtcSAkKERFU1RESVIpJCh0aGVtZWRpcik7IFwKKyAJZmkKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDllNGQ4YTAuLjMxMmIyNGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxLDYgKzMxLDcgQEAgQUNfU1VCU1QoW3JlbmRlcl9zaXplc10sIFsiOHg4IDE2eDE2IDIyeDIyIDI0eDI0IDMyeDMyIDQ4eDQ4IDI1NngyNTYiXSkKKyBBQ19TVUJTVChbc3ltYm9saWNfcmVuZGVyX3NpemVzXSwgWyIiXSkKKyBBQ19TVUJTVChbaW5zdGFsbF9zaXplc10sIFsiOHg4IDE2eDE2IDIyeDIyIDI0eDI0IDMyeDMyIDQ4eDQ4IDY0eDY0IDk2eDk2IDI1NngyNTYiXSkKKyAKKytBQ19QUk9HX0xOX1MKKyBBQ19QQVRIX1BST0coR1RLX1VQREFURV9JQ09OX0NBQ0hFLCBndGstdXBkYXRlLWljb24tY2FjaGUpCisgCisgIyBuZWVkIGdpdCwgaWNvbnRvb2wsIGFuZCBpbmtzY2FwZSBmb3IgcmVuZGVyaW5nCitAQCAtNTYsNiArNTcsMjkgQEAgaWYgdGVzdCAieCRHVEtfRU5DT0RFX1NZTUJPTElDX1NWRyIgPSAieGZhbHNlIjsgdGhlbgorIGZpCisgQUNfU1VCU1Qoc3ltYm9saWNfZW5jb2RlX3NpemVzKQorIAorK0FDX0FSR19FTkFCTEUoW3czMi1jdXJzb3JzXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdzMyLWN1cnNvcnNdLAorKyAgICBbTWFrZSBhbmQgaW5zdGFsbCBXaW5kb3dzIGN1cnNvcnMgKC5jdXIgYW5kIC5hbmkpIGluc3RlYWQgb2YgWCBjdXJzb3JzXSldLAorKyAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgICAgeWVzKSBlbmFibGVfdzMyX2N1cnNvcnM9eWVzIDs7CisrICAgIG5vKSAgZW5hYmxlX3czMl9jdXJzb3JzPW5vIDs7CisrICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdzMyLWN1cnNvcnNdKSA7OworKyAgIGVzYWNdLAorKyAgW2VuYWJsZV93MzJfY3Vyc29ycz1ub10pCisrQUNfU1VCU1QoZW5hYmxlX3czMl9jdXJzb3JzKQorKworK0FDX0FSR19FTkFCTEUoW2wteGwtdmFyaWFudHNdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sLXhsLXZhcmlhbnRzXSwKKysgICAgW0Fsc28gbWFrZSBhbmQgaW5zdGFsbCBMYXJnZSBhbmQgRXh0cmEgTGFyZ2UgV2luZG93cyBjdXJzb3IgdmVyc2lvbnNdKV0sCisrICBbY2FzZSAiJHtlbmFibGV2YWx9IiBpbgorKyAgICB5ZXMpIGVuYWJsZV9sX3hsX3ZhcmlhbnRzPXllcyA7OworKyAgICBubykgIGVuYWJsZV9sX3hsX3ZhcmlhbnRzPW5vIDs7CisrICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbC14bC12YXJpYW50c10pIDs7CisrICAgZXNhY10sCisrICBbZW5hYmxlX2xfeGxfdmFyaWFudHM9bm9dKQorK0FDX1NVQlNUKGVuYWJsZV9sX3hsX3ZhcmlhbnRzKQorK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfTF9YTF9WQVJJQU5UU10sIFt0ZXN0IHgkZW5hYmxlX2xfeGxfdmFyaWFudHMgPSB4eWVzXSkKKysKKyBBQ19DT05GSUdfRklMRVMoWworIE1ha2VmaWxlCisgYWR3YWl0YS1pY29uLXRoZW1lLnBjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9hZHdhaXRhLWljb24tdGhlbWVfMy4xNi4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNmU2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiR1RLKyBpY29uIHRoZW1lIgorSE9NRVBBR0UgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvYWR3YWl0YS1pY29uLXRoZW1lLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCisKK0xJQ0VOU0UgPSAiTEdQTC0zLjAgfCBDQy1CWS1TQS0zLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jODRjYWM4OGU0NmZjMDc2NDdlYTA3ZTZjMjRlZWI3YyIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaWNvbi1jYWNoZQorCitERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vQ3JlYXRlLXN5bWxpbmtzLXdoZW4taW5zdGFsbGluZy1jdXJzb3JzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZWY4Njk1MmM5NDdhYTI3YTFhODg4Yjc3MzVkNjBiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDU1NmRmYmY1NTVkNGZhYzEyZDRkNWMxMmY3NTE5ZGUwZDQzZWM0MmExYjY0OTYxMTQzOWE1MGJmN2FjYjk2IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIEJ1aWxkIHVzZXMgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgdG8gY3JlYXRlIHBuZyB2ZXJzaW9uczoKKyAgICAgICAgIyBubyBuZWVkIHRvIHN0b3JlIHRoZSBzdmdzIGFueW1vcmUuCisJcm0gLWYgJHtEfSR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL3NjYWxhYmxlLyovKi1zeW1ib2xpYy5zdmcgXAorCSAgICAgICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMtcnRsLnN2ZworfQorCitQQUNLQUdFUyA9ICIke1BOfS1jdXJzb3JzICR7UE59LXN5bWJvbGljICR7UE59LWhpcmVzICR7UE59IgorCitGSUxFU18ke1BOfS1jdXJzb3JzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhL2N1cnNvcnMvIgorRklMRVNfJHtQTn0tc3ltYm9saWMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvKi8qLyouc3ltYm9saWMucG5nIgorRklMRVNfJHtQTn0taGlyZXMgPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvMjU2eDI1Ni8iCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS8gXAorICAgICAgICAgICAgICAgJHtwcmVmaXh9L3NoYXJlL3BrZ2NvbmZpZy9hZHdhaXRhLWljb24tdGhlbWUucGMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvcmVtb3ZlX3BsdXNfZnJvbV9pbnZhbGlkX2NoYXJhY3RlcnNfbGlzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi9yZW1vdmVfcGx1c19mcm9tX2ludmFsaWRfY2hhcmFjdGVyc19saXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTdjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvcmVtb3ZlX3BsdXNfZnJvbV9pbnZhbGlkX2NoYXJhY3RlcnNfbGlzdC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmVtb3ZlICcrJyBmcm9tIGludmFsaWQgY2hhcmFjdGVycyBsaXN0CisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IEdDb25mLTMuMi41L2djb25mL2djb25mLWJhY2tlbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIEdDb25mLTMuMi41Lm9yaWcvZ2NvbmYvZ2NvbmYtYmFja2VuZC5jCisrKysgR0NvbmYtMy4yLjUvZ2NvbmYvZ2NvbmYtYmFja2VuZC5jCitAQCAtMzcsNyArMzcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBpbnZhbGlkX2NoYXJzW10gPQorICAgLyogU3BhY2UgaXMgY29tbW9uIGluIHVzZXIgbmFtZXMgKGFuZCB0aHVzIGhvbWUgZGlyZWN0b3JpZXMpIG9uIFdpbmRvd3MgKi8KKyAgICIgIgorICNlbmRpZgorLSAgIlx0XHJcblwiJCY8PiwrPSMhKCknfHt9W10/fmA7JVxcIjsKKysgICJcdFxyXG5cIiQmPD4sPSMhKCknfHt9W10/fmA7JVxcIjsKKyAKKyBzdGF0aWMgZ2Jvb2xlYW4KKyBnY29uZl9hZGRyZXNzX3ZhbGlkIChjb25zdCBjaGFyICAqYWRkcmVzcywKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi91bmFibGUtY29ubmVjdC1kYnVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3VuYWJsZS1jb25uZWN0LWRidXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1OGE0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi91bmFibGUtY29ubmVjdC1kYnVzLnBhdGNoCkBAIC0wLDAgKzEsOTUgQEAKK0ZpeGVzIGVycm9ycyBzdWNoIGFzIHRoaXMgaW4gdGhlIHJvb3RmcyBnZW5lcmF0aW9uOgorCisoZ2NvbmZ0b29sLTIucmVhbDoxMDA5NSk6IEdDb25mLVdBUk5JTkcgKio6IENsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgRC1CVVMgZGFlbW9uOgorVXNpbmcgWDExIGZvciBkYnVzLWRhZW1vbiBhdXRvbGF1bmNoIHdhcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUsIHNldCB5b3VyIERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyBpbnN0ZWFkCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gYjA4OTVlMTk5OGViYzgzYWIwMzBlYzBmMTdjMDY4NTQzOWY1YjQwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJheSBTdHJvZGUgPHJzdHJvZGVAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTUgQXByIDIwMTMgMDk6NTc6MzQgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZGJ1czogRG9uJ3Qgc3BldyB0byBjb25zb2xlIHdoZW4gdW5hYmxlIHRvIGNvbm5lY3QgdG8gZGJ1cworIGRhZW1vbgorCitJbnN0ZWFkIHBhc3MgdGhlIGVycm9yIHVwIGZvciB0aGUgY2FsbGVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvLgorCitUaGlzIHByZXZlbnQgdW50cmFwcGFibGUgd2FybmluZyBtZXNzYWdlcyBmcm9tIHNob3dpbmcgdXAgYXQgdGhlCitjb25zb2xlIGlmIGdjb25mdG9vbCAtLW1ha2VmaWxlLWluc3RhbGwtcnVsZSBpcyBjYWxsZWQuCistLS0KKyBnY29uZi9nY29uZi1kYnVzLmMgfCAgIDI0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djb25mL2djb25mLWRidXMuYyBiL2djb25mL2djb25mLWRidXMuYworaW5kZXggNTYxMGZjZi4uMDQ4ZTNlYSAxMDA2NDQKKy0tLSBhL2djb25mL2djb25mLWRidXMuYworKysrIGIvZ2NvbmYvZ2NvbmYtZGJ1cy5jCitAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBHSGFzaFRhYmxlICAgICAqZW5naW5lc19ieV9kYiA9IE5VTEw7Cisgc3RhdGljIEdIYXNoVGFibGUgICAgICplbmdpbmVzX2J5X2FkZHJlc3MgPSBOVUxMOworIHN0YXRpYyBnYm9vbGVhbiAgICAgICAgZGJ1c19kaXNjb25uZWN0ZWQgPSBGQUxTRTsKKyAKKy1zdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gICAgICAodm9pZCk7Cisrc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICAgICAgKEdFcnJvciAqKmVycm9yKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9zZXJ2aWNlICAgICAgICAgICAgICAoZ2Jvb2xlYW4gICAgICAgICAgc3RhcnRfaWZfbm90X2ZvdW5kLAorIAkJCQkJCSBHRXJyb3IgICAgICAgICAgKiplcnIpOworIHN0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX2RhdGFiYXNlICAgICAgICAgICAgIChHQ29uZkVuZ2luZSAgICAgICpjb25mLAorQEAgLTM4Myw3ICszODMsNyBAQCBnY29uZl9lbmdpbmVfZGV0YWNoIChHQ29uZkVuZ2luZSAqY29uZikKKyB9CisgCisgc3RhdGljIGdib29sZWFuCistZW5zdXJlX2RidXNfY29ubmVjdGlvbiAodm9pZCkKKytlbnN1cmVfZGJ1c19jb25uZWN0aW9uIChHRXJyb3IgKiplcnIpCisgeworICAgREJ1c0Vycm9yIGVycm9yOworIAorQEAgLTM5Miw3ICszOTIsOSBAQCBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICh2b2lkKQorIAorICAgaWYgKGRidXNfZGlzY29ubmVjdGVkKQorICAgICB7CistICAgICAgZ193YXJuaW5nICgiVGhlIGNvbm5lY3Rpb24gdG8gREJ1cyB3YXMgYnJva2VuLiBDYW4ndCByZWluaXRpYWxpemUgaXQuIik7CisrICAgICAgZ19zZXRfZXJyb3IgKGVyciwgR0NPTkZfRVJST1IsCisrICAgICAgICAgICAgICAgICAgIEdDT05GX0VSUk9SX05PX1NFUlZFUiwKKysgICAgICAgICAgICAgICAgICAgIlRoZSBjb25uZWN0aW9uIHRvIERCdXMgd2FzIGJyb2tlbi4gQ2FuJ3QgcmVpbml0aWFsaXplIGl0LiIpOworICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgfQorIAorQEAgLTQwMiw3ICs0MDQsMTAgQEAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAodm9pZCkKKyAgIAorICAgaWYgKCFnbG9iYWxfY29ubikgCisgICAgIHsKKy0gICAgICBnX3dhcm5pbmcgKCJDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjpcbiVzIiwgZXJyb3IubWVzc2FnZSk7CisrICAgICAgZ19zZXRfZXJyb3IgKGVyciwgR0NPTkZfRVJST1IsCisrICAgICAgICAgICAgICAgICAgIEdDT05GX0VSUk9SX05PX1NFUlZFUiwKKysgICAgICAgICAgICAgICAgICAgIkNsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byB0aGUgRC1CVVMgZGFlbW9uOlxuJXMiLAorKyAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAKKyAgICAgICBkYnVzX2Vycm9yX2ZyZWUgKCZlcnJvcik7CisgICAgICAgcmV0dXJuIEZBTFNFOworQEAgLTQzMSwxMyArNDM2LDggQEAgZW5zdXJlX3NlcnZpY2UgKGdib29sZWFuICBzdGFydF9pZl9ub3RfZm91bmQsCisgCisgICBpZiAoZ2xvYmFsX2Nvbm4gPT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoKSkKKy0JeworLQkgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorLQkJICAgICAgIEdDT05GX0VSUk9SX05PX1NFUlZFUiwKKy0JCSAgICAgICBfKCJObyBELUJVUyBkYWVtb24gcnVubmluZ1xuIikpOworLQkgIHJldHVybiBGQUxTRTsKKy0JfQorKyAgICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoZXJyKSkKKysgICAgICAgIHJldHVybiBGQUxTRTsKKyAKKyAgICAgICBnX2Fzc2VydCAoZ2xvYmFsX2Nvbm4gIT0gTlVMTCk7CisgICAgIH0KK0BAIC0yNTEyLDcgKzI1MTIsNyBAQCBnY29uZl9waW5nX2RhZW1vbiAodm9pZCkKKyB7CisgICBpZiAoZ2xvYmFsX2Nvbm4gPT0gTlVMTCkKKyAgIHsKKy0gICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uICgpKQorKyAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKE5VTEwpKQorICAgICB7CisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZkYWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mXzMuMi42LmJiCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiR05PTUUgY29uZmlndXJhdGlvbiBzeXN0ZW0iCitTRUNUSU9OID0gIngxMS9nbm9tZSIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IgorCitERVBFTkRTID0gImdsaWItMi4wIGRidXMgZGJ1cy1nbGliIGxpYnhtbDIgaW50bHRvb2wtbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGRidXMtbmF0aXZlIGRidXMtZ2xpYi1uYXRpdmUgbGlieG1sMi1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdub21lLWNvbW1vbi1uYXRpdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWItbmF0aXZlIgorCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MgZ2V0dGV4dAorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9HQ29uZi8ke0Bnbm9tZV92ZXJkaXIoIiR7UFZ9Iil9L0dDb25mLSR7UFZ9LnRhci54ejtuYW1lPWFyY2hpdmUgXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX3BsdXNfZnJvbV9pbnZhbGlkX2NoYXJhY3RlcnNfbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bmFibGUtY29ubmVjdC1kYnVzLnBhdGNoIFwKKyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMmIxNjk5NmQwZTRiMTEyODU2ZWU1YzU5MTMwZTgyMmMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxOTEyYjkxODAzYWIwOWE1ZWVkMzRkMzY0YmYwOWZlM2EyYTljOTY3NTFmZGUwM2E0ZTBjZmE1MWEwNGQ3ODRjIgorCitTID0gIiR7V09SS0RJUn0vR0NvbmYtJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1kZWJ1Zz15ZXMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS1vcmJpdCAtLXdpdGgtb3BlbmxkYXA9bm8gLS1kaXNhYmxlLWd0ayIKKworIyBEaXNhYmxlIFBvbGljeUtpdCBieSBkZWZhdWx0CitQQUNLQUdFQ09ORklHID8/PSAiIgorIyBXZSByZWFsbHkgZG9uJ3Qgd2FudCBQb2xpY3lLaXQgZm9yIG5hdGl2ZSBvciB1Y2xpYmMKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfbGliYy11Y2xpYmMgPSAiIgorCitQQUNLQUdFQ09ORklHW3BvbGljeWtpdF0gPSAiLS1lbmFibGUtZGVmYXVsdHMtc2VydmljZSwtLWRpc2FibGUtZGVmYXVsdHMtc2VydmljZSxwb2xraXQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgdGhpcyBkaXJlY3RvcnkgbmVlZCB0byBiZSBjcmVhdGVkIHRvIGF2b2lkIGFuIEVycm9yIDI1NiBhdCBnZG0gbGF1bmNoCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuc3lzdGVtCisKKwkjIHRoaXMgc3R1ZmYgaXMgdW51c2FibGUKKwlybSAtZiAke0R9JHtsaWJkaXJ9L0dDb25mLyovKi4qYQorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ2lvLyovKi4qYQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2NvbmZ0b29sLTIgXAorCQlHQ09ORl9CQUNLRU5EX0RJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vR0NvbmYvMgorfQorCisjIGRpc2FibGUgZGJ1cy14MTEgd2hlbiB4MTEgaXNuJ3QgaW4gRElTVFJPX0ZFQVRVUkVTCitSREVQRU5EU18ke1BOfSArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZGJ1cy14MTEnLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9HQ29uZi8qIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvLyovKi5zbyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9wb2xraXQqIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8qLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vKi8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9zZ21sL2djb25mL2djb25mLTEuMC5kdGQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE0LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtY29tbW9uXzMuMTQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGI3MDMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE0LjAuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJDb21tb24gbWFjcm9zIGZvciBidWlsZGluZyBHTk9NRSBhcHBsaWNhdGlvbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitpbmhlcml0IGdub21lYmFzZSBhbGxhcmNoCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImJhNThjNjFkMGQ4MWI3YzNmZjg0NTJjNjIwNTEzYTlkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNGMwMDI0MmY3ODFiYjQ0MTI4OWY0OWRkODBlZDFkODk1ZDg0ZGUwYzk0YmZjMmM2ODE4YTEwNGM5ZTM5MjYyYyIKKworRVhUUkFfQVVUT1JFQ09ORiA9ICIiCitERVBFTkRTID0gIiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKK0ZJTEVTXyR7UE59LWRldiA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg3NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy5pbmMKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJBIGNvbGxlY3Rpb24gb2YgZG9jdW1lbnRhdGlvbiB1dGlsaXRpZXMgZm9yIHRoZSBHbm9tZSBwcm9qZWN0IgorREVTQ1JJUFRJT04gPSAiVGhlIEdOT01FIERvY3VtZW50YXRpb24gQnVpbGQgVXRpbGl0aWVzIChnbm9tZS1kb2MtIFwKK3V0aWxzKSB3ZXJlIGNyZWF0ZWQgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgdG8gXAoraW5jbHVkZSBhbmQgY3JlYXRlIGRvY3VtZW50YXRpb24gaW4gdGhlaXIgcmVsZWFzZXMuIFRoZXkgaW5jbHVkZSB0aGUgXAoreG1sMnBvIHRvb2wgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHRyYW5zbGF0ZSBhbmQga2VlcCB1cCB0byBkYXRlIFwKK3RyYW5zbGF0aW9ucyBvZiBkb2N1bWVudGF0aW9uLiIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0RFUEVORFMgPSAibGlieG1sMiBsaWJ4c2x0IGxpYnhzbHQtbmF0aXZlIGdub21lLWRvYy11dGlscy1uYXRpdmUgZ2xpYi0yLjAiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwyLW5hdGl2ZSBsaWJ4c2x0LW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ2xpYi0yLjAtbmF0aXZlIgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0IHB5dGhvbi1kaXIgcHl0aG9ubmF0aXZlIGF1dG90b29scy1icm9rZW5zZXAKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2Nyb2xsa2VlcGVyIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAgJHtEfSR7ZGF0YWRpcn0veG1sL2dub21lL3hzbHQvCisJY3AgLXBQciAke1N9L3hzbHQvKiAke0R9JHtkYXRhZGlyfS94bWwvZ25vbWUveHNsdC8KKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJc2VkIC1pIC1lICdzfF4jIS4qL3Vzci9iaW4vZW52IHB5dGhvbnwjISAvdXNyL2Jpbi9lbnYgbmF0aXZlcHl0aG9ufCcgJHtEfSR7YmluZGlyfS94bWwycG8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0veG1sKiAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3N5c3Jvb3RlZC1wa2ctY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZkNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitJbiBjcm9zcyBlbnZpcm9ubWVudCB3ZSBoYXZlIHRvIHByZXBlbmQgdGhlIHN5c3Jvb3QgdG8gdGhlIHBhdGggZm91bmQgYnkKK3BrZ2NvbmZpZyBzaW5jZSB0aGUgcGF0aCByZXR1cm5lZCBmcm9tIHBrZ2NvbmZpZyBkb2VzIG5vdCBoYXZlIHN5c3Jvb3QgcHJlZml4ZWQKK2l0IGVuZHMgdXAgdXNpbmcgdGhlIGZpbGVzIGZyb20gaG9zdCBzeXN0ZW0uIE5vdyB1c3VhbGx5IHBlb3BsZSBoYXZlIGdub21lIGluc3RhbGxlZAorc28gdGhlIGJ1aWxkIHN1Y2NlZWRzIGJ1dCBpZiB5b3UgZG9udCBoYXZlIGdub21lIGluc3RhbGxlZCBvbiBidWlsZCBob3N0IHRoZW4KK2l0IHdvbnQgZmluZCB0aGUgZmlsZXMgb24gaG9zdCBzeXN0ZW0gYW5kIHBhY2thZ2VzIHVzaW5nIGdub21lLWRvYy11dGlscyB3b250Citjb21waWxlLgorCitUaGlzIHNob3VsZCB3b3JrIG9rIHdpdGggbm9uIHN5c3Jvb3RlZCBidWlsZHMgdG9vIHNpbmNlIGluIHRob3NlIGNhc2VzIFBLR19DT05GSUdfU1lTUk9PVF9ESVIKK3dpbGwgYmUgZW1wdHkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKK0BAIC0xMzMsMTEgKzEzMywxMSBAQCBfRE9DX0FCU19TUkNESVIgPSBAYWJzX3NyY2RpckAKKyBfeG1sMnBvID89IGB3aGljaCB4bWwycG9gCisgX3htbDJwb19tb2RlID0gJChpZiAkKERPQ19JRCksbWFsbGFyZCxkb2Nib29rKQorIAorLV9kYjJodG1sID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyaHRtbCBnbm9tZS1kb2MtdXRpbHNgCistX2RiMm9tZiAgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJvbWYgZ25vbWUtZG9jLXV0aWxzYAorLV9jaHVua3MgID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NodW5rcy54c2wKKy1fY3JlZGl0cyA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jcmVkaXRzLnhzbAorLV9pZHMgPz0gJChzaGVsbCAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlscykvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2lkcy54c2wKKytfZGIyaHRtbCA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJodG1sIGdub21lLWRvYy11dGlsc2AKKytfZGIyb21mICA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSBkYjJvbWYgZ25vbWUtZG9jLXV0aWxzYAorK19jaHVua3MgID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jaHVua3MueHNsCisrX2NyZWRpdHMgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlsc2AvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2NyZWRpdHMueHNsCisrX2lkcyA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9JChzaGVsbCAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgeG1sZGlyIGdub21lLWRvYy11dGlscykvZ25vbWUveHNsdC9kb2Nib29rL3V0aWxzL2lkcy54c2wKKyAKKyBpZiBFTkFCTEVfU0sKKyBfRU5BQkxFX1NLID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE5NmMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorV2UgY2FuJ3QgdXNlICMhL2Z1bGwvcGF0aC90by9weXRob24gLXUgYXMgdGhpcyBjYW4gYmUgbG9uZ2VyIHRoYW4gc2hlYmFuZworYWxsb3dzIGZvci4gIEluIG9yZGVyIHRvIGJlIGFwcHJvcHJhaXRlIGZvciB1cHN0cmVhbSBtb3JlIHdvcmsgd291bGQgYmUKK25lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWFpbiB4bWwycG8gY29kZSBkb2Vzbid0IHJlbHkgb24gcHl0aG9uCitiZWluZyBpbnZva2VkIHdpdGggLXUgKGZvcmNlIHN0ZGluL291dC9lcnIgdG8gYmUgdXNlZCByYXcpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1dvdWxkIGJyZWFrIGJlaGF2aW9yIG9uIFdpbmRvd3NdCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy94bWwycG8veG1sMnBvL01ha2VmaWxlLmFtCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorQEAgLTcsNyArNyw2IEBAIENMRUFORklMRVMgPSB4bWwycG8KKyAKKyB4bWwycG86IHhtbDJwby5weS5pbgorIAkkKEFNX1ZfR0VOKXNlZCAtZSAicy9eVkVSU0lPTiA9LiovVkVSU0lPTiA9IFwiQFZFUlNJT05AXCIvIiBcCistCSAgICAtZSAicyteIyEuKnB5dGhvbi4qKyMhJChQWVRIT04pKyIgXAorIAkgIDwgJChzcmNkaXIpL3htbDJwby5weS5pbiA+IHhtbDJwbworIAkkKEFNX1ZfYXQpY2htb2QgK3ggeG1sMnBvCisgCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby94bWwycG8ucHkuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC11CisrIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyAtKi0gZW5jb2Rpbmc6IHV0Zi04IC0qLQorICMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1LCAyMDA2IERhbmlsbyDFoGVnYW4gPGRhbmlsb0Bnbm9tZS5vcmc+LgorICMgQ29weXJpZ2h0IChjKSAyMDA5IENsYXVkZSBQYXJveiA8Y2xhdWRlQDJ4bGlicmUubmV0Pi4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMveHNsdHByb2Nfbm9uZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoCkBAIC0wLDAgKzEsOTUgQEAKK1RoaXMgYWRkcyB0aGUgLW5vbmV0IG9wdGlvbiB0byB4c2x0cHJvYyBpbnZvY2F0aW9ucywgd2hpY2ggZml4ZXMKK2NvbXBpbGUgZXJyb3JzIHdoZW4gYnVpbGRpbmcgdGhlIGdub21lLWRvYy11dGlscyBkb2NzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL2RvYy94c2x0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy9kb2MveHNsdC9NYWtlZmlsZS5hbQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL2RvYy94c2x0L01ha2VmaWxlLmFtCitAQCAtMjEsMTQgKzIxLDE0IEBAIGFsbDogJCh4c2xkb2NfZG9jcykgJCh4c2xkb2NfeG1scykKKyAKKyAkKHhzbGRvY19kb2NzKTogJCh4c2xkb2NfeHNscykgeHNsZG9jLmF3ayB4c2xkb2MtZmlsbC54c2wKKyAJJChBTV9WX0dFTikkKEdEVV9BV0spIC1mICIkKHNyY2RpcikveHNsZG9jLmF3ayIgIiQoZmlsdGVyICUvJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLnhzbCwkKHhzbGRvY194c2xzKSkiIFwKKy0JfCB4c2x0cHJvYyAtbyAiJEAiIFwKKysJfCB4c2x0cHJvYyAtbm9uZXQgLW8gIiRAIiBcCisgCS0tc3RyaW5ncGFyYW0gYmFzZW5hbWUgIiQoYmFzZW5hbWUgJChub3RkaXIgJEApKSIgXAorIAktLXN0cmluZ3BhcmFtIHhzbF9maWxlICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCisgCSIkKHNyY2RpcikveHNsZG9jLWZpbGwueHNsIiAtCisgCisgJCh4c2xkb2NfeG1scyk6IHhzbGRvYy1kb2Nib29rLnhzbAorICQoeHNsZG9jX3htbHMpOiBDLyUueG1sIDogQy8lLnhzbGRvYworLQkkKEFNX1ZfR0VOKXhzbHRwcm9jIC1vICIkQCIgXAorKwkkKEFNX1ZfR0VOKXhzbHRwcm9jIC1ub25ldCAtbyAiJEAiIFwKKyAJLS1zdHJpbmdwYXJhbSBiYXNlbmFtZSAiJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpIiBcCisgCS0tc3RyaW5ncGFyYW0geHNsX2ZpbGUgIiQoZmlsdGVyICUvJChiYXNlbmFtZSAkKG5vdGRpciAkQCkpLnhzbCwkKHhzbGRvY194c2xzKSkiIFwKKyAJIiQoc3JjZGlyKS94c2xkb2MtZG9jYm9vay54c2wiICIkPCIKK0BAIC02Miw3ICs2Miw3IEBAIGdub21lLWRvYy14c2x0LWNoZWNrLWluY2x1ZGVzOgorIGdub21lLWRvYy14c2x0LWNoZWNrLXhzbGRvYzogJCh4c2xkb2NfZG9jcykKKyAJQGVjaG8gIlJ1bm5pbmcgeHNsZG9jIGNoZWNrcyI7CisgCUAoZWNobyAiPHhzbGRvYz4iOyBjYXQgJCh4c2xkb2NfZG9jcyk7IGVjaG8gIjwveHNsZG9jPiIpIFwKKy0JfCB4c2x0cHJvYyAiJChzcmNkaXIpL3hzbGRvYy1jaGVjay54c2wiIC0gMT4gL2Rldi9udWxsCisrCXwgeHNsdHByb2MgLW5vbmV0ICIkKHNyY2RpcikveHNsZG9jLWNoZWNrLnhzbCIgLSAxPiAvZGV2L251bGwKKyAKKyAuUEhPTlk6IGNsZWFuLXhzbGRvYworIGNsZWFuLWxvY2FsOiBjbGVhbl94c2xkb2MKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorQEAgLTM3LDcgKzM3LDcgQEAgJChET0NfSF9GSUxFKTogJChET0NfSF9ET0NTKTsKKyAJbGlzdD0nJChET0NfSF9ET0NTKSc7IGZvciBkb2MgaW4gJCRsaXN0OyBkbyBcCisgCSAgeG1scGF0aD0iYGVjaG8gJCRkb2MgfCBzZWQgLWUgJ3MvXlwoLipcL1wpLiovXDEvJyAtZSAnL1wvLyFzLy4qLy8nYDokKHNyY2RpcikvYGVjaG8gJCRkb2MgfCBzZWQgLWUgJ3MvXlwoLipcL1wpLiovXDEvJyAtZSAnL1wvLyFzLy4qLy8nYCI7IFwKKyAJICBpZiAhIHRlc3QgLWYgIiQkZG9jIjsgdGhlbiBkb2M9IiQoc3JjZGlyKS8kJGRvYyI7IGZpOyBcCistCSAgeHNsdHByb2MgLS1wYXRoICIkJHhtbHBhdGgiICQoX2NyZWRpdHMpICQkZG9jOyBcCisrCSAgeHNsdHByb2MgLW5vbmV0IC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9jcmVkaXRzKSAkJGRvYzsgXAorIAlkb25lIHwgc29ydCB8IHVuaXEgXAorIAkgIHwgYXdrICdCRUdJTntzPSIifXtuPXNwbGl0KCQkMCx3LCI8Iik7aWYocyE9IiImJnMhPXN1YnN0cih3WzFdLDEsbGVuZ3RoKHdbMV0pLTEpKXtwcmludCBzfTtpZihuPjEpe3ByaW50ICQkMDtzPSIifWVsc2V7cz0kJDB9fTtFTkR7aWYocyE9IiIpe3ByaW50IHN9fScgXAorIAkgIHwgc2VkIC1lICdzL1xcL1xcXFwvJyAtZSAncy8iL1xcIi8nIC1lICdzL1woLipcKS9cdCJcMSIsLycgPj4gJEAudG1wCitAQCAtNTAsNyArNTAsNyBAQCAkKERPQ19IX0ZJTEUpOiAkKERPQ19IX0RPQ1MpOworIAkgIGRvY2lkPWBlY2hvICIkJGRvYyIgfCBzZWQgLWUgJ3MvLipcL1woW14vXSpcKVwueG1sL1wxLycgXAorIAkgICAgfCBzZWQgLWUgJ3MvW15hLXpBLVpfXS9fL2cnIHwgdHIgJ2EteicgJ0EtWidgOyBcCisgCSAgZWNobyAkJHhtbHBhdGg7IFwKKy0JICBpZHM9YHhzbHRwcm9jIC0teGluY2x1ZGUgLS1wYXRoICIkJHhtbHBhdGgiICQoX2lkcykgJCRkb2NgOyBcCisrCSAgaWRzPWB4c2x0cHJvYyAtbm9uZXQgLS14aW5jbHVkZSAtLXBhdGggIiQkeG1scGF0aCIgJChfaWRzKSAkJGRvY2A7IFwKKyAJICBmb3IgaWQgaW4gJCRpZHM7IGRvIFwKKyAJICAgIGVjaG8gJyNkZWZpbmUgSEVMUF8nYGVjaG8gJCRkb2NpZGAnXydgZWNobyAkJGlkIFwKKyAJICAgICAgfCBzZWQgLWUgJ3MvW15hLXpBLVpfXS9fL2cnIHwgdHIgJ2EteicgJ0EtWidgJyAiJyQkaWQnIicgPj4gJEAudG1wOyBcCitAQCAtMTk3LDcgKzE5Nyw3IEBAICQoX0RPQ19PTUZfREIpIDogJChET0NfTU9EVUxFKS0lLm9tZiA6ICUKKyAJICBlY2hvICJUaGUgZmlsZSAnJChfc2tjb250ZW50c2xpc3QpJyBkb2VzIG5vdCBleGlzdC4iID4mMjsJCVwKKyAJICBlY2hvICJQbGVhc2UgY2hlY2sgeW91ciBTY3JvbGxLZWVwZXIgaW5zdGFsbGF0aW9uLiIgPiYyOwkJXAorIAkgIGV4aXQgMTsgfQorLQkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ2RvY2Jvb2snKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorKwkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbm9uZXQgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCdkb2Nib29rJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKyAKKyAjIyBAIF9ET0NfT01GX0hUTUwKKyAjIyBUaGUgT01GIGZpbGVzIGZvciBIVE1MIG91dHB1dAorQEAgLTIxMiw3ICsyMTIsNyBAQCBpZiBFTkFCTEVfU0sKKyAJICBlY2hvICJQbGVhc2UgY2hlY2sgeW91ciBTY3JvbGxLZWVwZXIgaW5zdGFsbGF0aW9uLiIgPiYyOwkJXAorIAkgIGV4aXQgMTsgfQorIGVuZGlmCistCSQoR0RVX1ZfREIyT01GKXhzbHRwcm9jIC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwneGh0bWwnKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorKwkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbm9uZXQgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCd4aHRtbCcpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisgCisgIyMgQCBfRE9DX09NRl9BTEwKKyAjIyBBbGwgT01GIG91dHB1dCBmaWxlcyB0byBiZSBidWlsdAorQEAgLTI2Nyw3ICsyNjcsNyBAQCBfRE9DX0NfRklHVVJFUyA9ICQoaWYgJChET0NfRklHVVJFUyksCisgIyMgQWxsIEhUTUwgZG9jdW1lbnRhdGlvbiBpbiB0aGUgQyBsb2NhbGUKKyAjIEZJWE1FOiBwcm9iYWJseSBoYXZlIHRvIHNoZWxsIGVzY2FwZSB0byBkZXRlcm1pbmUgdGhlIGZpbGUgbmFtZXMKKyBfRE9DX0NfSFRNTCA9ICQoZm9yZWFjaCBmLAkJCQkJCVwKKy0JJChzaGVsbCB4c2x0cHJvYyAtLXhpbmNsdWRlIAkJCQkJXAorKwkkKHNoZWxsIHhzbHRwcm9jIC1ub25ldCAtLXhpbmNsdWRlIAkJCQkJXAorIAkgIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuYmFzZW5hbWUgIiQoRE9DX01PRFVMRSkiCQlcCisgCSAgJChfY2h1bmtzKSAiQy8kKERPQ19NT0RVTEUpLnhtbCIpLAkJCQlcCisgCUMvJChmKS54aHRtbCkKK0BAIC0zOTMsNyArMzkzLDcgQEAgX0RPQ19IVE1MX0FMTCA9ICQoaWYgJChmaWx0ZXIgaHRtbCBIVE1MLAorIF9ET0NfSFRNTF9UT1BTID0gJChmb3JlYWNoIGxjLEMgJChfRE9DX1JFQUxfTElOR1VBUyksJChsYykvJChET0NfTU9EVUxFKS54aHRtbCkKKyAKKyAkKF9ET0NfSFRNTF9UT1BTKTogJChfRE9DX0NfRE9DUykgJChfRE9DX0xDX0RPQ1MpCistCSQoR0RVX1ZfREIySFRNKXhzbHRwcm9jIC1vICRAIC0teGluY2x1ZGUgLS1wYXJhbSBkYi5jaHVuay5jaHVua190b3AgImZhbHNlKCkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuYmFzZW5hbWUgIiQoRE9DX01PRFVMRSkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuZXh0ZW5zaW9uICIueGh0bWwiICQoX2RiMmh0bWwpICQocGF0c3Vic3QgJS54aHRtbCwlLnhtbCwkQCkKKysJJChHRFVfVl9EQjJIVE0peHNsdHByb2MgLW5vbmV0IC1vICRAIC0teGluY2x1ZGUgLS1wYXJhbSBkYi5jaHVuay5jaHVua190b3AgImZhbHNlKCkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuYmFzZW5hbWUgIiQoRE9DX01PRFVMRSkiIC0tc3RyaW5ncGFyYW0gZGIuY2h1bmsuZXh0ZW5zaW9uICIueGh0bWwiICQoX2RiMmh0bWwpICQocGF0c3Vic3QgJS54aHRtbCwlLnhtbCwkQCkKKyAKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2MwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzXzAuMjAuMTAuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBnbm9tZS1kb2MtdXRpbHMuaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTEdQTDttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly94c2x0cHJvY19ub25ldC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiM2M2NGFkN2JhY2Q2MTdiMDQ5OTllNGExNjhhZmFhYzUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJjYjA2MzlmZmE5NTUwYjZkZGYzYjYyZjNiMWFkZDkyZmI5MmFiNDY5MGQzNTFmMjM1M2NmZmU2NjhiZThjNGE2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YS9wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAzNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ25vbWUtbWltZS1kYXRhLTIuMTguMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLW1pbWUtZGF0YS0yLjE4LjAub3JpZy9NYWtlZmlsZS5hbQkyMDA5LTA2LTExIDE3OjI3OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdub21lLW1pbWUtZGF0YS0yLjE4LjAvTWFrZWZpbGUuYW0JMjAwOS0wNi0xMSAxNzoyNzo1OS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDYgKzEsNiBAQAorIFNVQkRJUlMgPSBtYW4gcG8KKyAKKy1wa2djb25maWdkaXIgPSAkKGRhdGFkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKyBwa2djb25maWdfREFUQSA9IGdub21lLW1pbWUtZGF0YS0yLjAucGMKKyAKKyBOVUxMPQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YV8yLjE4LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtbWltZS1kYXRhXzIuMTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzFlYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YV8yLjE4LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJCYXNlIE1JTUUgYW5kIEFwcGxpY2F0aW9uIGRhdGFiYXNlIGZvciBHTk9NRSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY2hlY2stbWltZS5wbDtlbmRsaW5lPTI2O21kNT1hOTViNjNjOTJjMzNkNGNhMWFmNjFhMzE1ODg4ZjQ1MCIKKworaW5oZXJpdCBnbm9tZWJhc2UgbWltZQorUFIgPSAicjQiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9wa2djb25maWcucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjU0MTg1ODE4OGY4MDA5MGQxMmEzM2I1YTdjMzRkNDJjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMzcxOTZiNWIzNzA4NWJiY2Q0NWMzMzhjMzZlMjY4OThmZTM1ZGQ1OTc1Mjk1ZjY5ZjQ4MDI4YjFlODQzNmZkNyIKK0dOT01FX0NPTVBSRVNTX1RZUEU9ImJ6MiIKKworREVQRU5EUyArPSAic2hhcmVkLW1pbWUtaW5mbyBpbnRsdG9vbC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJzaGFyZWQtbWltZS1pbmZvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsL2xpYmFydF9sZ3BsLTIuMy4yMS1jcm9zc2NvbXBpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGwvbGliYXJ0X2xncGwtMi4zLjIxLWNyb3NzY29tcGlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYxZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsL2xpYmFydF9sZ3BsLTIuMy4yMS1jcm9zc2NvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorVGFrZW4gZnJvbSBwb3J0YWdlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRnJvbSBlMTQ0M2M5NDVhNGNmNjcwOTZkOGMyNzcyMWFhZGQ3MzY4MzgyYjNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogR2lsbGVzIERhcnRpZ3VlbG9uZ3VlIDxldmFAZ2VudG9vLm9yZz4KK0RhdGU6IFR1ZSwgNiBBcHIgMjAxMCAxNToyMjoyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDIvMl0gZ2VudG9vOiB1c2UgSVNPIHR5cGVzIGZvciBmaXhlZCB0eXBlIHNpemUKKworLS0tCisgTWFrZWZpbGUuYW0gIHwgICAxMSArKy0tLS0tLS0tLQorIGFydF9jb25maWcuaCB8ICAgIDUgKysrKysKKyBjb25maWd1cmUuaW4gfCAgIDEwIC0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFydF9jb25maWcuaAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggOTU5NTJkYS4uNmFhMmZlMyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIsMTMgKzIsNiBAQCBjaGVja19QUk9HUkFNUyA9IHRlc3RhcnQgdGVzdHV0YQorIAorIGJpbl9TQ1JJUFRTID0gXAorIAlsaWJhcnQyLWNvbmZpZworLQkKKy1ub2luc3RfU0NSSVBUUyA9IGdlbl9hcnRfY29uZmlnLnNoCistCistQlVJTFRfU09VUkNFUyA9IGFydF9jb25maWcuaAorLQorLWFydF9jb25maWcuaDoKKy0JLi9nZW5fYXJ0X2NvbmZpZy5zaCA+IGFydF9jb25maWcuaAorIAorIEVYVFJBX0RJU1QgPSAJCQlcCisgCWxpYmFydC5kZWYJCVwKK0BAIC0xNzMsNSArMTY2LDUgQEAgaW5zdGFsbC1kYXRhLWxvY2FsOiBpbnN0YWxsLW1zLWxpYiBpbnN0YWxsLWxpYnRvb2wtaW1wb3J0LWxpYgorIAorIHVuaW5zdGFsbC1sb2NhbDogdW5pbnN0YWxsLW1zLWxpYiB1bmluc3RhbGwtbGlidG9vbC1pbXBvcnQtbGliCisgCistQ0xFQU5GSUxFUyA9ICQoQlVJTFRfU09VUkNFUykgJChiaW5fU0NSSVBUUykKKy1ESVNUQ0xFQU5GSUxFUyA9ICQoQlVJTFRfU09VUkNFUykgJChiaW5fU0NSSVBUUykKKytDTEVBTkZJTEVTID0gJChiaW5fU0NSSVBUUykKKytESVNUQ0xFQU5GSUxFUyA9ICQoYmluX1NDUklQVFMpCitkaWZmIC0tZ2l0IGEvYXJ0X2NvbmZpZy5oIGIvYXJ0X2NvbmZpZy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTk4NWYxZgorLS0tIGEvYXJ0X2NvbmZpZy5oCisrKysgYi9hcnRfY29uZmlnLmgKK0BAIC0wLDAgKzEsNSBAQAorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKyt0eXBlZGVmIHVpbnQ4X3QgYXJ0X3U4OworK3R5cGVkZWYgdWludDE2X3QgYXJ0X3UxNjsKKyt0eXBlZGVmIHVpbnQzMl90IGFydF91MzI7CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBlNDgwNGY3Li5kZGNhYzRmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC05MiwxNSArOTIsNiBAQCBBQ19GVU5DX0FMTE9DQQorIAorIEFDX0NfQklHRU5ESUFOCisgCistQUNfQ0hFQ0tfU0laRU9GKGNoYXIpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9DSEFSLCAkYWNfY3Zfc2l6ZW9mX2NoYXIpCistQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfU0hPUlQsICRhY19jdl9zaXplb2Zfc2hvcnQpCistQUNfQ0hFQ0tfU0laRU9GKGludCkKKy1BQ19TVUJTVChBUlRfU0laRU9GX0lOVCwgJGFjX2N2X3NpemVvZl9pbnQpCistQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9MT05HLCAkYWNfY3Zfc2l6ZW9mX2xvbmcpCistCisgQUNfQ09ORklHX0ZJTEVTKFsKKyBsaWJhcnQtZmVhdHVyZXMuaAorIE1ha2VmaWxlCitAQCAtMTA5LDYgKzEwMCw1IEBAIGxpYmFydC0yLjAtdW5pbnN0YWxsZWQucGMKKyBsaWJhcnQtemlwXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoW2xpYmFydC1jb25maWddLFtjaG1vZCAreCBsaWJhcnQtY29uZmlnXSkKKy1BQ19DT05GSUdfRklMRVMoW2dlbl9hcnRfY29uZmlnLnNoXSxbY2htb2QgK3ggZ2VuX2FydF9jb25maWcuc2hdKQorIAorIEFDX09VVFBVVAorLS0gCisxLjcuMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbF8yLjMuMjEuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NTgxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBvZiBmdW5jdGlvbnMgZm9yIDJEIGdyYXBoaWNzIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IgorUFIgPSAicjIiCisKKyMgY2FuJ3QgdXNlIGdub21lLm9lY2xhc3MgZHVlIHRvIF8gaW4gZmlsZW5hbWUKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L2xpYmFydF9sZ3BsLzIuMy9saWJhcnRfbGdwbC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFydF9sZ3BsLTIuMy4yMS1jcm9zc2NvbXBpbGUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjA4NTU5ZmYzYzY3ZmQ5NWQ1N2IwYzVlOTFhNmI0MzAyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkYzExZTc0YzEwZmM5ZmZlNDE4ODUzN2UyYjM3MGMwYWJhY2NhN2Q4OTAyMWQ0ZDMwM2FmZGY3ZmQ3NDc2ZmEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gIiIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2xpYmFydDItY29uZmlnIgorCitTID0gIiR7V09SS0RJUn0vbGliYXJ0X2xncGwtJHtQVn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTYuMS5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXNfMy4xNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjJjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTYuMS5iYgpAQCAtMCwwICsxLDEzIEBACitTVU1NQVJZID0gIkdOT01FIGRlc2t0b3Atd2lkZSBHU2V0dGluZ3Mgc2NoZW1hcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUgZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWItbmF0aXZlIgorCitpbmhlcml0IGdub21lYmFzZSBnc2V0dGluZ3MgZ2V0dGV4dAorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJiYWViYmNmM2MyMDU5MWY5ODg3NmU0MmZiMGEzZmQzNSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjc0ZmU5ZmRhZDUxMGM4YTY2NjZmZWJlY2ViN2ViYWZjNTgxZWY5OTBiM2FmY2M4YzFlOGI1ZDkwYjI0YjM0NjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTI3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYwpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIk11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIEdVSXMiCitERVNDUklQVElPTiA9ICJHVEsrIGlzIGEgbXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy4gT2ZmZXJpbmcgYSBjb21wbGV0ZSBcCitzZXQgb2Ygd2lkZ2V0cywgR1RLKyBpcyBzdWl0YWJsZSBmb3IgcHJvamVjdHMgcmFuZ2luZyBmcm9tIHNtYWxsIG9uZS1vZmYgcHJvamVjdHMgdG8gY29tcGxldGUgYXBwbGljYXRpb24gc3VpdGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisgJiBMR1BMdjIuMSsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IgorCitTRUNUSU9OID0gImxpYnMiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCitBTllfT0ZfRElTVFJPX0ZFQVRVUkVTID0gImRpcmVjdGZiIHgxMSIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhjdXJzb3IgbGlieHJhbmRyIGxpYnhkYW1hZ2UgbGlieHJlbmRlciBsaWJ4Y29tcG9zaXRlIgorREVQRU5EUyA9ICJnbGliLTIuMCBwYW5nbyBhdGsganBlZyBsaWJwbmcgZ2RrLXBpeGJ1Zi1uYXRpdmUgZG9jYm9vay11dGlscy1uYXRpdmUgXAorIGNhaXJvIGdkay1waXhidWYiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXg9eWVzIC0td2l0aC1nZGt0YXJnZXQ9eDExLC0td2l0aC14PW5vLCR7WDExREVQRU5EU30iCisjIHdpdGhvdXQgLS13aXRoLWdka3RhcmdldD1kaXJlY3RmYiBpdCB3aWxsIGNoZWNrIGZvciBjYWlyby14bGliIHdoaWNoIGlzbid0IGF2YWlsYWJsZSB3aXRob3V0IFgxMSBESVNUUk9fRkVBVFVSRQorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gPSAiLS13aXRoLWdka3RhcmdldD1kaXJlY3RmYiwsZGlyZWN0ZmIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgcGtnY29uZmlnIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ3RrLWltbW9kdWxlcy1jYWNoZQorCitQQUNLQUdFUyArPSAibGliZ2FpbCBndGstZGVtbyIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0yLjAgXAorCSR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTIuMCBcCisJJHtsaWJkaXJ9L2xpYioke1NPTElCU30gXAorCSR7ZGF0YWRpcn0vdGhlbWVzICR7c3lzY29uZmRpcn0gXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vZW5naW5lcy9saWJwaXhtYXAuc28iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAgICAgJHtkYXRhZGlyfS9ndGstMi4wL2luY2x1ZGUgXAorCSR7bGliZGlyfS9ndGstMi4wL2luY2x1ZGUgXAorCSR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vaW1tb2R1bGVzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vcHJpbnRiYWNrZW5kcy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2VuZ2luZXMvKi5sYSBcCisJJHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzLy5kZWJ1Zy8qIFwKKyAgICAgICAgJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9sb2FkZXJzLy5kZWJ1Zy8qIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2ltbW9kdWxlcy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9lbmdpbmVzLy5kZWJ1Zy8qIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L3ByaW50YmFja2VuZHMvLmRlYnVnLyoiCisKK0ZJTEVTX2d0ay1kZW1vID0gIiBcCisgJHtkYXRhZGlyfS9ndGstMi4wL2RlbW8vKiBcCisgJHtiaW5kaXJ9L2d0ay1kZW1vIFwKKyAiCisKK0ZJTEVTX2xpYmdhaWwgPSAiIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmdhaWwuc28gXAorCSR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliZmVycmV0LnNvIFwKKwkiCisKK0dUS0JBU0VfUlJFQ09NTUVORFMgPz0gImxpYmVyYXRpb24tZm9udHMgZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIGdkay1waXhidWYtbG9hZGVyLWpwZWcgZ2RrLXBpeGJ1Zi1sb2FkZXItZ2lmIGdkay1waXhidWYtbG9hZGVyLXhwbSBzaGFyZWQtbWltZS1pbmZvIgorR1RLR0xJQkNfUlJFQ09NTUVORFMgPz0gIiR7R1RLQkFTRV9SUkVDT01NRU5EU30gZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IgorUlJFQ09NTUVORFNfJHtQTn1fbGliYy1nbGliYyA9ICIke0dUS0dMSUJDX1JSRUNPTU1FTkRTfSIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIgorQUxURVJOQVRJVkVfVEFSR0VUW2d0ay11cGRhdGUtaWNvbi1jYWNoZV0gPSAiJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0yLjAiCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2d0ay0yLjAKKworCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vZ3RrLTIuMC9pbmNsdWRlCisJaW5zdGFsbCAtbSAwNjQ0IGdkay9nZGtjb25maWcuaCAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvaW5jbHVkZS9nZGtjb25maWcuaAorCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZ3RrL2d0a2ZpbGVjaG9vc2VycHJpdmF0ZS5oICR7RH0ke2luY2x1ZGVkaXJ9L2d0ay0yLjAvZ3RrLworCWluc3RhbGwgLW0gMDY0NCAke1N9L2d0ay9ndGtmaWxlY2hvb3NlcnV0aWxzLmggICAke0R9JHtpbmNsdWRlZGlyfS9ndGstMi4wL2d0ay8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ndGsvZ3RrZmlsZXN5c3RlbW1vZGVsLmggICAgJHtEfSR7aW5jbHVkZWRpcn0vZ3RrLTIuMC9ndGsvCisKKwltdiAke0R9JHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0yLjAKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJndGtfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitndGtfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlpZiBbIC1lICR7RH0ke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwkJaW5zdGFsbCAtbSA3NTUgJHtEfSR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9kb2MtZml4ZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2RvYy1maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU0NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9kb2MtZml4ZXMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVGhlcmUgYXJlIGlzc3VlcyBidWlsZGluZyB0aGUgZ3RrKyB0dXRvcmlhbCBhbmQgZmFxIGRvY3VtZW50YXRpb24uCitTaW5jZSB0aGV5IHdlcmUgcmVtb3ZlZCBpbiBndGsrIHVwc3RyZWFtIGFuZCBhcmUgc3VwZXJmbHVvdXMgaW4KK2VtYmVkZGVkIGFwcGxpY2F0aW9ucywganVzdCBkb24ndCBidWlsZCB0aGVtLgorCitUaGFua3MgdG8gSm9zaHVhIExvY2sgZm9yIHN1Z2dlc3RpbmcgdGhpcyBhcHByb2FjaC4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2RpZmYgLXVyTiBndGsrLTIuMjIuMS5vcmlnL2RvY3MvTWFrZWZpbGUuYW0gZ3RrKy0yLjIyLjEvZG9jcy9NYWtlZmlsZS5hbQorLS0tIGd0aystMi4yMi4xLm9yaWcvZG9jcy9NYWtlZmlsZS5hbQkyMDEwLTExLTE1IDA0OjEzOjA5LjAwMDAwMDAwMCAtMDgwMAorKysrIGd0aystMi4yMi4xL2RvY3MvTWFrZWZpbGUuYW0JMjAxMS0wMi0yMyAxOToyNToxNi45MTQ4MTUwOTcgLTA4MDAKK0BAIC0xLDcgKzEsNyBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9NYWtlZmlsZS5kZWNsCisgCistU1VCRElSUyA9IHR1dG9yaWFsIGZhcSByZWZlcmVuY2UgdG9vbHMKKytTVUJESVJTID0gcmVmZXJlbmNlIHRvb2xzCisgCisgRVhUUkFfRElTVCArPSBcCisgCWRlZnNmb3JtYXQudHh0CQkJXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlNzI4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVXBkYXRlZCB0byBhcHBseSB0byBndGsrLTIuMjQuMTUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYyBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjCistLS0gZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTEyIDIwOjUyOjU0LjAwMDAwMDAwMCArMDIwMAorKysrIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMJMjAxMy0wMi0xMiAyMTozMzozMC42ODk5MjU5NjcgKzAyMDAKK0BAIC00MTUsNyArNDE1LDcgQEAKKyBjYXNlICRlbmFibGVfZXhwbGljaXRfZGVwcyBpbgorICAgYXV0bykKKyAgICAgZXhwb3J0IFNFRAorLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorICAgICBpZiB0ZXN0ICJ4JGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAnIT0nIHhwYXNzX2FsbCB8fCB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0geHllcyA7IHRoZW4KKyAgICAgICBlbmFibGVfZXhwbGljaXRfZGVwcz15ZXMKKyAgICAgZWxzZQorQEAgLTc3NCw3ICs3NzQsNyBAQAorICAgICBkbmwgTm93IHdlIGNoZWNrIHRvIHNlZSBpZiBvdXIgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGliIGRlcHMKKyAgICAgZG5sIChpbiBhIHJhdGhlciB1Z2x5IHdheSBldmVuKQorICAgICBpZiAkZHlud29ya3M7IHRoZW4KKy0gICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi9saWJ0b29sIC0tY29uZmlnIgorKyAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAkaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgorICAgICAgICAgbW9kdWxlX2RlcGxpYnNfY2hlY2s9YCRtb2R1bGVfbGlidG9vbF9jb25maWcgfCBcCisgICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAorICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKK0BAIC0xNTc0LDcgKzE1NzQsNyBAQAorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCgkaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgaWYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljIjsgdGhlbgorICAgR0RLX0RFUF9MSUJTPWBlY2hvICRHREtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAorICAgR1RLX0RFUF9MSUJTPWBlY2hvICRHVEtfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlMWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRml4ZXMKKworaW5jbHVkZS9ndGstMi4wL2d0ay9ndGtpdGVtZmFjdG9yeS5oOjQ3OjE6IHdhcm5pbmc6IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzbid0IGEgcHJvdG90eXBlIFstV3N0cmljdC1wcm90b3R5cGVzXQorIHR5cGVkZWYgdm9pZCAoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2spICAoKTsKKworZ2NjNSBoYXMgLVdzdHJpY3QtcHJvdG90eXBlcyBvbiBieSBkZWZhdWx0IGZvciAtV2Vycm9yIHNvIHRoaXMgYmVjb21lcyBhIGJ1aWxkIGZhaWx1cmUgZm9yIGNvbnN1bWVycworb2YgdGhpcyBoZWFkZXIgZS5nLiBtYXRjaGJveC1wYW5lbC0yCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IGd0aystMi4yNC4yNy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMi4yNC4yNy5vcmlnL2d0ay9ndGtpdGVtZmFjdG9yeS5oCisrKysgZ3RrKy0yLjI0LjI3L2d0ay9ndGtpdGVtZmFjdG9yeS5oCitAQCAtNDQsNyArNDQsNyBAQCB0eXBlZGVmIHZvaWQJKCpHdGtQcmludEZ1bmMpCQkgICAoZ3BvaW50CisgICogKE5vdGUgdGhhdCBpZiB3ZSBhcmUgaW5jbHVkZWQgZnJvbSBhIEMrKyBwcm9ncmFtICgpIHdpbGwgbWVhbgorICAqICh2b2lkKSBzbyBhbiBleHBsaWNpdCBjYXN0IHdpbGwgYmUgbmVlZGVkLikKKyAgKi8KKy10eXBlZGVmCXZvaWQJKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrKSAgKCk7CisrdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjaykgICh2b2lkKTsKKyB0eXBlZGVmCXZvaWQJKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrMSkgKGdwb2ludGVyCQkgY2FsbGJhY2tfZGF0YSwKKyAJCQkJCSAgICBndWludAkJIGNhbGxiYWNrX2FjdGlvbiwKKyAJCQkJCSAgICBHdGtXaWRnZXQJCSp3aWRnZXQpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGQxMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3RvZ2dsZS1mb250LmRpZmYKQEAgLTAsMCArMSwxMDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3RrL2d0a2NlbGxyZW5kZXJlcnRvZ2dsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3RrL2d0a2NlbGxyZW5kZXJlcnRvZ2dsZS5jLm9yaWcJMjAxMC0wNi0yMiAxODoxMTozMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBndGsvZ3RrY2VsbHJlbmRlcmVydG9nZ2xlLmMJMjAxMC0wNi0yMiAxODoxMTo0My4wMDAwMDAwMDAgKzA4MDAKK0BAIC03MSw2ICs3MSw4IEBACisgICBQUk9QX0lORElDQVRPUl9TSVpFCisgfTsKKyAKKysvKiBUaGlzIGlzIGEgaGFyZC1jb2RlZCBkZWZhdWx0IHdoaWNoIHByb21wdGx5IGdldHMgb3ZlcnJpZGRlbiBieSBhIHNpemUKKysgICBjYWxjdWxhdGVkIGZyb20gdGhlIGZvbnQgc2l6ZS4gKi8KKyAjZGVmaW5lIFRPR0dMRV9XSURUSCAxMworIAorIHN0YXRpYyBndWludCB0b2dnbGVfY2VsbF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworQEAgLTgwLDggKzgyLDkgQEAKKyB0eXBlZGVmIHN0cnVjdCBfR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZSBHdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlOworIHN0cnVjdCBfR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZQorIHsKKy0gIGdpbnQgaW5kaWNhdG9yX3NpemU7CistCisrICBnaW50IGluZGljYXRvcl9zaXplOyAvKiBUaGlzIGlzIHRoZSByZWFsIHNpemUgKi8KKysgIGdpbnQgb3ZlcnJpZGVfc2l6ZTsgLyogVGhpcyBpcyB0aGUgc2l6ZSBzZXQgZnJvbSB0aGUgaW5kaWNhdG9yLXNpemUgcHJvcGVydHkgKi8KKysgIEd0a1dpZGdldCAqY2FjaGVkX3dpZGdldDsKKyAgIGd1aW50IGluY29uc2lzdGVudCA6IDE7CisgfTsKKyAKK0BAIC0xMDQsNiArMTA3LDcgQEAKKyAgIEdUS19DRUxMX1JFTkRFUkVSIChjZWxsdG9nZ2xlKS0+eXBhZCA9IDI7CisgCisgICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IFRPR0dMRV9XSURUSDsKKysgIHByaXYtPm92ZXJyaWRlX3NpemUgPSAwOworICAgcHJpdi0+aW5jb25zaXN0ZW50ID0gRkFMU0U7CisgfQorIAorQEAgLTIxMCw3ICsyMTQsNyBAQAorICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBjZWxsdG9nZ2xlLT5yYWRpbyk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgUFJPUF9JTkRJQ0FUT1JfU0laRToKKy0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwcml2LT5pbmRpY2F0b3Jfc2l6ZSk7CisrICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+b3ZlcnJpZGVfc2l6ZSA/IHByaXYtPm92ZXJyaWRlX3NpemUgOiBwcml2LT5pbmRpY2F0b3Jfc2l6ZSk7CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHBhcmFtX2lkLCBwc3BlYyk7CitAQCAtMjQ1LDcgKzI0OSw3IEBACisgICAgICAgY2VsbHRvZ2dsZS0+cmFkaW8gPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7CisgICAgICAgYnJlYWs7CisgICAgIGNhc2UgUFJPUF9JTkRJQ0FUT1JfU0laRToKKy0gICAgICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworKyAgICAgIHByaXYtPm92ZXJyaWRlX3NpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgICBicmVhazsKKyAgICAgZGVmYXVsdDoKKyAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcGFyYW1faWQsIHBzcGVjKTsKK0BAIC0yNzMsNiArMjc3LDI3IEBACisgfQorIAorIHN0YXRpYyB2b2lkCisrb25fd2lkZ2V0X3N0eWxlX3NldCAoR3RrV2lkZ2V0ICp3aWRnZXQsIEd0a1N0eWxlICpwcmV2aW91cywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorK3sKKysgIEd0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUgKnByaXYgPSB1c2VyX2RhdGE7CisrICBQYW5nb0NvbnRleHQgKmNvbnRleHQ7CisrICBQYW5nb0ZvbnRNZXRyaWNzICptZXRyaWNzOworKyAgaW50IGhlaWdodDsKKysgIAorKyAgY29udGV4dCA9IGd0a193aWRnZXRfZ2V0X3BhbmdvX2NvbnRleHQgKHdpZGdldCk7CisrICBtZXRyaWNzID0gcGFuZ29fY29udGV4dF9nZXRfbWV0cmljcyAoY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQtPnN0eWxlLT5mb250X2Rlc2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZ29fY29udGV4dF9nZXRfbGFuZ3VhZ2UgKGNvbnRleHQpKTsKKysKKysgIGhlaWdodCA9IHBhbmdvX2ZvbnRfbWV0cmljc19nZXRfYXNjZW50IChtZXRyaWNzKSArCisrICAgIHBhbmdvX2ZvbnRfbWV0cmljc19nZXRfZGVzY2VudCAobWV0cmljcyk7CisrICAKKysgIHBhbmdvX2ZvbnRfbWV0cmljc191bnJlZiAobWV0cmljcyk7CisrICAKKysgIHByaXYtPmluZGljYXRvcl9zaXplID0gUEFOR09fUElYRUxTIChoZWlnaHQgKiAwLjg1KTsKKyt9CisrCisrc3RhdGljIHZvaWQKKyBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfZ2V0X3NpemUgKEd0a0NlbGxSZW5kZXJlciAqY2VsbCwKKyAJCQkJICAgR3RrV2lkZ2V0ICAgICAgICp3aWRnZXQsCisgCQkJCSAgIEdka1JlY3RhbmdsZSAgICAqY2VsbF9hcmVhLAorQEAgLTI4Nyw2ICszMTIsMjAgQEAKKyAKKyAgIHByaXYgPSBHVEtfQ0VMTF9SRU5ERVJFUl9UT0dHTEVfR0VUX1BSSVZBVEUgKGNlbGwpOworIAorKyAgaWYgKHByaXYtPm92ZXJyaWRlX3NpemUpIHsKKysgICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBwcml2LT5vdmVycmlkZV9zaXplOworKyAgfSBlbHNlIGlmIChwcml2LT5jYWNoZWRfd2lkZ2V0ICE9IHdpZGdldCkgeworKyAgICBpZiAocHJpdi0+Y2FjaGVkX3dpZGdldCkgeworKyAgICAgIGdfb2JqZWN0X3JlbW92ZV93ZWFrX3BvaW50ZXIgKHdpZGdldCwgJnByaXYtPmNhY2hlZF93aWRnZXQpOworKyAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+Y2FjaGVkX3dpZGdldCwgb25fd2lkZ2V0X3N0eWxlX3NldCwgcHJpdik7CisrICAgIH0KKysgICAgcHJpdi0+Y2FjaGVkX3dpZGdldCA9IHdpZGdldDsKKysgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAod2lkZ2V0LCAmcHJpdi0+Y2FjaGVkX3dpZGdldCk7CisrICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpZGdldCwgInN0eWxlLXNldCIsIG9uX3dpZGdldF9zdHlsZV9zZXQsIHByaXYpOworKyAgICAKKysgICAgb25fd2lkZ2V0X3N0eWxlX3NldCAod2lkZ2V0LCBOVUxMLCBwcml2KTsKKysgIH0KKysKKyAgIGNhbGNfd2lkdGggPSAoZ2ludCkgY2VsbC0+eHBhZCAqIDIgKyBwcml2LT5pbmRpY2F0b3Jfc2l6ZTsKKyAgIGNhbGNfaGVpZ2h0ID0gKGdpbnQpIGNlbGwtPnlwYWQgKiAyICsgcHJpdi0+aW5kaWNhdG9yX3NpemU7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3hzZXR0aW5ncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysveHNldHRpbmdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYTk3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3hzZXR0aW5ncy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd0aystMi4yMS4yL2dkay94MTEvZ2RrZXZlbnRzLXgxMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3RrKy0yLjIxLjIub3JpZy9nZGsveDExL2dka2V2ZW50cy14MTEuYwkyMDEwLTA2LTIyIDE3OjI4OjA0LjAwMDAwMDAwMCArMDgwMAorKysrIGd0aystMi4yMS4yL2dkay94MTEvZ2RrZXZlbnRzLXgxMS5jCTIwMTAtMDYtMjIgMTc6Mjg6MDYuMDAwMDAwMDAwICswODAwCitAQCAtMzA2MiwxMCArMzA2Miw5IEBACisgeworICAgR2RrU2NyZWVuWDExICpzY3JlZW4gPSBkYXRhOworICAgCistICBpZiAoeHNldHRpbmdzX2NsaWVudF9wcm9jZXNzX2V2ZW50IChzY3JlZW4tPnhzZXR0aW5nc19jbGllbnQsIChYRXZlbnQgKil4ZXZlbnQpKQorLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9SRU1PVkU7CistICBlbHNlCistICAgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworKyAgeHNldHRpbmdzX2NsaWVudF9wcm9jZXNzX2V2ZW50IChzY3JlZW4tPnhzZXR0aW5nc19jbGllbnQsIChYRXZlbnQgKil4ZXZlbnQpOworKworKyAgcmV0dXJuIEdES19GSUxURVJfQ09OVElOVUU7CisgfQorIAorIHN0YXRpYyBCb29sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5ZjBkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszLmluYwpAQCAtMCwwICsxLDExMSBAQAorU1VNTUFSWSA9ICJNdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBHVUlzIgorREVTQ1JJUFRJT04gPSAiR1RLKyBpcyBhIG11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMuIE9mZmVyaW5nIGEgY29tcGxldGUgXAorc2V0IG9mIHdpZGdldHMsIEdUSysgaXMgc3VpdGFibGUgZm9yIHByb2plY3RzIHJhbmdpbmcgZnJvbSBzbWFsbCBvbmUtb2ZmIHByb2plY3RzIHRvIGNvbXBsZXRlIGFwcGxpY2F0aW9uIHN1aXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMCBjYWlybyBwYW5nbyBhdGsganBlZyBsaWJwbmcgZ2RrLXBpeGJ1ZiBcCisgICAgICAgICAgIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGdkay1waXhidWYtbmF0aXZlIGxpYmVwb3h5IgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisgJiBMR1BMdjIuMSsiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBndGstZG9jIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgZ3RrLWltbW9kdWxlcy1jYWNoZSBnc2V0dGluZ3MKKworIyBUaGlzIHNob3VsZCBiZSBpbiBhdXRvdG9vbHMuYmJjbGFzcywgYnV0IHVudGlsIHNvbWV0aGluZyBlbHNlcyB1c2VzIGl0IHB1dHRpbmcKKyMgaXQgaGVyZSBhdm9pZHMgcmVidWlsZGluZyBldmVyeXRoaW5nLgorZXhwb3J0IFBLR19DT05GSUdfRk9SX0JVSUxEID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBEbyB0aGlzIGJlY2F1c2UgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgcnVubmluZyAuL2xpYnRvb2wgZGlyZWN0bHkKKyAgICBybSAtZiBsaWJ0b29sCisgICAgbG4gLXMgJHtUQVJHRVRfUFJFRklYfWxpYnRvb2wgbGlidG9vbAorfQorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1nbGlidGVzdCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14aW5lcmFtYSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsZXMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtY3VwcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIFwKKyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAieDExIiwgIngxMSIsICIiLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAid2F5bGFuZCIsICJ3YXlsYW5kIiwgIiIsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMS1iYWNrZW5kLC0tZGlzYWJsZS14MTEtYmFja2VuZCxhdC1zcGkyLWF0ayBmb250Y29uZmlnIGxpYngxMSBsaWJ4ZXh0IGxpYnhjdXJzb3IgbGlieGkgbGlieGRhbWFnZSBsaWJ4cmFuZHIgbGlieHJlbmRlciBsaWJ4Y29tcG9zaXRlIGxpYnhmaXhlcyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1iYWNrZW5kLC0tZGlzYWJsZS13YXlsYW5kLWJhY2tlbmQsd2F5bGFuZCBsaWJ4a2Jjb21tb24gdmlydHVhbC9tZXNhIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwltdiAke0R9JHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSAke0R9JHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0zLjAKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWRlbW8iCitMSUJWID0gIjMuMC4wIgorCitGSUxFU18ke1BOfS1kZW1vID0gIiR7YmluZGlyfS9ndGszLWRlbW8gXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrMy1kZW1vLWFwcGxpY2F0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0azMtaWNvbi1icm93c2VyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0azMtd2lkZ2V0LWZhY3RvcnkgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2d0ay0zLjAvZGVtbyBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2d0azMtZGVtby5kZXNrdG9wIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvZ3RrMy1pY29uLWJyb3dzZXIuZGVza3RvcCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2d0azMtd2lkZ2V0LWZhY3RvcnkuZGVza3RvcCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8qL2FwcHMvZ3RrMy1kZW1vKi5wbmcgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvKi9hcHBzL2d0azMtd2lkZ2V0LWZhY3RvcnkqLnBuZyIKKworIyBUaGUgZGVtbyB1c2VzIFBORyBmaWxlcyBhbmQgbWltZSB0eXBlIHNuaWZmaW5nLCBzbyBlbnN1cmUgdGhhdCB0aGVzZQorIyBkZXBlbmRlbmNpZXMgYXJlIHByZXNlbnQuCitSREVQRU5EU18ke1BOfS1kZW1vICs9ICJnZGstcGl4YnVmLWxvYWRlci1wbmcgc2hhcmVkLW1pbWUtaW5mbyIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0zLjAgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtMy4wIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstbGF1bmNoIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzICR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzLyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2VuZ2luZXMvbGlicGl4bWFwLnNvIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wL21vZHVsZXMvKi5zbyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2d0ay0zLjAvZ3RrYnVpbGRlci5ybmcgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2d0ay0zLjAvaW5jbHVkZSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2xvYWRlcnMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vaW1tb2R1bGVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8zLjAuMC9wcmludGJhY2tlbmRzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2VuZ2luZXMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wL21vZHVsZXMvKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2ltbW9kdWxlcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2VuZ2luZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9wcmludGJhY2tlbmRzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wL21vZHVsZXMvLmRlYnVnIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJhZHdhaXRhLWljb24tdGhlbWUtc3ltYm9saWMiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGszLWltbW9kdWxlLS4qIF5ndGszLXByaW50YmFja2VuZC0uKiIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIgorQUxURVJOQVRJVkVfVEFSR0VUW2d0ay11cGRhdGUtaWNvbi1jYWNoZV0gPSAiJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZS0zLjAiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBpbXBvcnQgb3MucGF0aAorCisgICAgZ3RrX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9JykKKyAgICBpbW1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAnaW1tb2R1bGVzJykKKyAgICBwcmludG1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAncHJpbnRiYWNrZW5kcycpOworCisgICAgaW1tb2R1bGVzID0gZG9fc3BsaXRfcGFja2FnZXMoZCwgaW1tb2R1bGVzX3Jvb3QsICdeaW0tKC4qKVwuc28kJywgJ2d0azMtaW1tb2R1bGUtJXMnLCAnR1RLIGlucHV0IG1vZHVsZSBmb3IgJXMnKQorICAgIGlmIGltbW9kdWxlczoKKyAgICAgICAgZC5zZXRWYXIoIkdUS0lNTU9EVUxFU19QQUNLQUdFUyIsICIgIi5qb2luKGltbW9kdWxlcykpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwcmludG1vZHVsZXNfcm9vdCwgJ15saWJwcmludGJhY2tlbmQtKC4qKVwuc28kJywgJ2d0azMtcHJpbnRiYWNrZW5kLSVzJywgJ0dUSyBwcmludGJhY2tlbmQgbW9kdWxlIGZvciAlcycpCisKKyAgICBpZiAoZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIDEpKToKKyAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYmd0ay0zLjAnKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL0RvbnQtZm9yY2UtY3NkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZDhhODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaApAQCAtMCwwICsxLDExOCBAQAord2luZG93OiBDaGVjayBpZiB3ZSBjYW4gdXNlIENTRCBiZWZvcmUgZW5hYmxpbmcgdGhlbQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKK0Zyb20gYzVlNWVlNjc0OTBlN2U3YWY1NjA1MmQ4ZjhiZWI3NWRiMDAyYzJmMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEVtbWFudWVsZSBCYXNzaSA8ZWJhc3NpQGdub21lLm9yZz4KK0RhdGU6IFdlZCwgMyBKdW4gMjAxNSAxNDowNzoyOSArMDEwMAorU3ViamVjdDogd2luZG93OiBDaGVjayBpZiB3ZSBjYW4gdXNlIENTRCBiZWZvcmUgZW5hYmxpbmcgdGhlbQorCitUaGUgY2hhbmdlIGluIDAzMjEzYjk1MDlmYzFkZjE2YzY2MTk0ZWExNjhhZWQ2YzE1MTEwZTkgY2hhbmdlZCB0aGUgcnVsZXMKK2FzIHRvIHdoZW4gQ1NEIGNhbiBiZSBlbmFibGVkLCBidXQgaXQgYWxzbyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlcyBDU0QKK3dpdGggdGhlIGltcGxpY2l0IGFzc3VtcHRpb24gdGhhdCBjbGllbnQtc2lkZSBzaGFkb3dzIHdlcmUgdGhlIHJlYWwKK2lzc3VlLCBhbmQgdGhhdCB3ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGF0IGJ5IGRyYXdpbmcgb3VyIG93biBib3JkZXJzLgorVGhpcyBhbHNvIG1lYW5zIHRoYXQgc2V0dGluZyBhIHRpdGxlYmFyIGZvciBhIEd0a1dpbmRvdyB3aWxsIGVuYWJsZSBDU0QKK3VuY29uZGl0aW9uYWxseS4KKworSW4gcmVhbGl0eSwgc29tZSB3aW5kb3cgbWFuYWdlcnMgKGxpa2UgTWF0Y2hib3gpICpvbmx5KiBzdXBwb3J0CitzZXJ2ZXItc2lkZSBkZWNvcmF0aW9ucywgYW5kIHdpbGwgaWdub3JlIGFsbCBoaW50cyB0byB0aGUgY29udHJhcnksIHRvCit0aGUgcG9pbnQgb2YgZHJhd2luZyBkZWNvcmF0aW9ucyBhdCByYW5kb20gbG9jYXRpb25zIG9uIHRvcCBvZiB0aGUKK3dpbmRvdy4KKworU2luY2UgQ1NEIGFyZSBlbmFibGVkIHVuY29uZGl0aW9uYWxseSwgdGhlIEdUS19DU0QgZW52aXJvbm1lbnQgdmFyaWFibGUKK2lzIGFsc28gbm90IGEgc3VpdGFibGUgZXNjYXBlIGhhdGNoLgorCitJbiB0aGUgZ3JhbmQgdHJhZGl0aW9uIG9mIGFza2luZyBvdXJzZWx2ZXMgaWYgd2Ugc2hvdWxkIGRvIHNvbWV0aGluZworanVzdCBiZWNhdXNlIHdlIGNhbiwgd2Ugc2hvdWxkIHNwbGl0IHRoZSBlbnZpcm9ubWVudCBjaGVja3MgZnJvbSB0aGUKK2NoZWNrcyBvbiB3aGF0IHRoZSB1c2VyIHJlcXVlc3RlZDsgYnkgZG9pbmcgdGhhdCwgd2UgY2FuIGFsc28gY2hlY2sKK3doZW4gZW5hYmxpbmcgY2xpZW50LXNpZGUgZGVjb3JhdGlvbnMsIGFuZCBpZGVhbGx5IGJhaWwgb3V0IGlmIG5lZWRlZC4KKworaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDM0MworCitkaWZmIC0tZ2l0IGEvZ3RrL2d0a3dpbmRvdy5jIGIvZ3RrL2d0a3dpbmRvdy5jCitpbmRleCA0MjNjNmJkLi45ZmU4ODJmIDEwMDY0NAorLS0tIGEvZ3RrL2d0a3dpbmRvdy5jCisrKysgYi9ndGsvZ3Rrd2luZG93LmMKK0BAIC00MDU2LDYgKzQwNTYsMzIgQEAgZ3RrX3dpbmRvd19zdXBwb3J0c19jbGllbnRfc2hhZG93IChHdGtXaW5kb3cgKndpbmRvdykKKyAgIHJldHVybiBUUlVFOworIH0KKyAKKytzdGF0aWMgZ2Jvb2xlYW4KKytndGtfd2luZG93X2Nhbl91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyt7CisrICBjb25zdCBnY2hhciAqY3NkX2VudjsKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19CUk9BRFdBWQorKyAgaWYgKEdES19JU19CUk9BRFdBWV9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCisrICAgIHJldHVybiBUUlVFOworKyNlbmRpZgorKworKyNpZmRlZiBHREtfV0lORE9XSU5HX1dBWUxBTkQKKysgIGlmIChHREtfSVNfV0FZTEFORF9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCisrICAgIHJldHVybiBUUlVFOworKyNlbmRpZgorKworKyNpZmRlZiBHREtfV0lORE9XSU5HX01JUgorKyAgaWYgKEdES19JU19NSVJfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysgIGNzZF9lbnYgPSBnX2dldGVudiAoIkdUS19DU0QiKTsKKysKKysgIC8qIElmIEdUS19DU0QgaXMgdW5zZXQgd2UgZGVmYXVsdCB0byBDU0Qgc3VwcG9ydCAqLworKyAgcmV0dXJuIGNzZF9lbnYgPT0gTlVMTCB8fCAoc3RyY21wIChjc2RfZW52LCAiMSIpID09IDApOworK30KKysKKyBzdGF0aWMgdm9pZAorIGd0a193aW5kb3dfZW5hYmxlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisgeworQEAgLTQwNjMsNiArNDA4OSwxMCBAQCBndGtfd2luZG93X2VuYWJsZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorICAgR3RrV2lkZ2V0ICp3aWRnZXQgPSBHVEtfV0lER0VUICh3aW5kb3cpOworICAgR2RrVmlzdWFsICp2aXN1YWw7CisgCisrICAvKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBDU0QsIHRoZW4gdGhlcmUncyBubyBwb2ludCBpbiBlbmFibGluZyB0aGVtICovCisrICBpZiAoIWd0a193aW5kb3dfY2FuX3VzZV9jc2QgKHdpbmRvdykpCisrICAgIHJldHVybjsKKysKKyAgIC8qIFdlIG5lZWQgYSB2aXN1YWwgd2l0aCBhbHBoYSBmb3IgY2xpZW50IHNoYWRvd3MgKi8KKyAgIGlmIChwcml2LT51c2VfY2xpZW50X3NoYWRvdykKKyAgICAgeworQEAgLTU4MzksNyArNTg2OSw2IEBAIHN0YXRpYyBnYm9vbGVhbgorIGd0a193aW5kb3dfc2hvdWxkX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorIHsKKyAgIEd0a1dpbmRvd1ByaXZhdGUgKnByaXYgPSB3aW5kb3ctPnByaXY7CistICBjb25zdCBnY2hhciAqY3NkX2VudjsKKyAKKyAgIGlmIChwcml2LT5jc2RfcmVxdWVzdGVkKQorICAgICByZXR1cm4gVFJVRTsKK0BAIC01ODUwLDI0ICs1ODc5LDcgQEAgZ3RrX3dpbmRvd19zaG91bGRfdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisgICBpZiAocHJpdi0+dHlwZSA9PSBHVEtfV0lORE9XX1BPUFVQKQorICAgICByZXR1cm4gRkFMU0U7CisgCistI2lmZGVmIEdES19XSU5ET1dJTkdfQlJPQURXQVkKKy0gIGlmIChHREtfSVNfQlJPQURXQVlfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorLSAgICByZXR1cm4gVFJVRTsKKy0jZW5kaWYKKy0KKy0jaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECistICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorLSAgICByZXR1cm4gVFJVRTsKKy0jZW5kaWYKKy0KKy0jaWZkZWYgR0RLX1dJTkRPV0lOR19NSVIKKy0gIGlmIChHREtfSVNfTUlSX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistICBjc2RfZW52ID0gZ19nZXRlbnYgKCJHVEtfQ1NEIik7CistCistICByZXR1cm4gKGdfc3RyY21wMCAoY3NkX2VudiwgIjEiKSA9PSAwKTsKKysgIHJldHVybiBndGtfd2luZG93X2Nhbl91c2VfY3NkICh3aW5kb3cpOworIH0KKyAKKyBzdGF0aWMgdm9pZAorLS0gCitjZ2l0IHYwLjEwLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjRiZWViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworSW5kZXg6IGd0aystMy44LjIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3RrKy0zLjguMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGd0aystMy44LjIvY29uZmlndXJlLmFjCitAQCAtNTMxLDcgKzUzMSw3IEBAIEFDX01TR19DSEVDS0lORyhbV2hldGhlciB0byB3cml0ZSBkZXBlbmQKKyBjYXNlICRlbmFibGVfZXhwbGljaXRfZGVwcyBpbgorICAgYXV0bykKKyAgICAgZXhwb3J0IFNFRAorLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZD1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyAnZXZhbCBlY2hvIFwiJGRlcGxpYnNfY2hlY2tfbWV0aG9kXCInKSB8IHNoYAorICAgICBpZiB0ZXN0ICJ4JGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSB4cGFzc19hbGwgfHwgdGVzdCAieCRlbmFibGVfc3RhdGljIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgZW5hYmxlX2V4cGxpY2l0X2RlcHM9eWVzCisgICAgIGVsc2UKK0BAIC03OTMsNyArNzkzLDcgQEAgZWxzZQorICAgICBkbmwgTm93IHdlIGNoZWNrIHRvIHNlZSBpZiBvdXIgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGliIGRlcHMKKyAgICAgZG5sIChpbiBhIHJhdGhlciB1Z2x5IHdheSBldmVuKQorICAgICBpZiAkZHlud29ya3M7IHRoZW4KKy0gICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi9saWJ0b29sIC0tY29uZmlnIgorKyAgICAgICAgbW9kdWxlX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWciCisgICAgICAgICBtb2R1bGVfZGVwbGlic19jaGVjaz1gJG1vZHVsZV9saWJ0b29sX2NvbmZpZyB8IFwKKyAgICAgICAgICAgICBncmVwICdeW1thLXpfXV0qY2hlY2tbW2Etel9dXSpfbWV0aG9kPVtbJ1wnJyJdXScgfCBcCisgICAgICAgICAgICAgc2VkICdzLy4qW1snXCcnIl1dXCguKlwpW1snXCcnIl1dJC9cMS8nYAorQEAgLTE1MjgsNyArMTUyOCw3IEBAIGZpCisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19ERVBfTElCUz1gZWNobyAkR0RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyAgIEdUS19ERVBfTElCUz1gZWNobyAkR1RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDczNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzNfMy4xNi42LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgZ3RrKzMuaW5jCisKK01BSl9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLyR7TUFKX1ZFUn0vZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRG9udC1mb3JjZS1jc2QucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZjNTllNWM4YjVhNDU4NWI2MDYyM2RkNzA4ZGY0MDBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRkMTI3MjZkMDg1NmE5NjhiNDE4MDJhZTVjNTk3MWQ3ZTliYWM1MzI3MTdlMzA5ZDNmODFiOTk4OWRhNWZmYmUiCisKK1MgPSAiJHtXT1JLRElSfS9ndGsrLSR7UFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ndGsvZ3RrLmg7ZW5kbGluZT0yNTttZDU9MWQ4ZGMwZmNjZGJmYTI2Mjg3YTI3MWRjZTg4YWY3MzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2RrL2dkay5oO2VuZGxpbmU9MjU7bWQ1PWM5MjBjZTM5ZGM4OGM2ZjA2ZDNlN2M1MGUwODA4NmYyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL3Rlc3RndGsuYztlbmRsaW5lPTI1O21kNT1jYjczMmRhZWUxZDgyYWY3YTJiZjk1M2NmM2NmMjZmMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQzNzczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrK18yLjI0LjI4LmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgZ3RrKy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9Mjc7bWQ1PWM1OWUwYjQ0OTBkZDEzNWE1NzI2ZWJmODUxZjliMTdmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI3O21kNT0wN2RiMjg1ZWMyMDhmYjNlMGJmN2Q4NjFiMDYxNDIwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNzttZDU9MjYyZGI1ZGI1Zjc3NmY5ODYzZTU2ZGYzMTQyM2UyNGMiCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvMi4yNC9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG9nZ2xlLWZvbnQuZGlmZjtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vZG9jLWZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoIFwKKwkgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJmYWNmODdiMmVhNjdlNGU1Yzc4NjZhOTAwM2U2NTI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyYzY0NDFlOThiYzUyMzJlNWY5YmJhNjk2NTA3NWRjZjU4MGE4NzI2Mzk4ZjczNzRkMzlmOTBiODhlZDQ2NTYiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS14a2IgLS1kaXNhYmxlLWdsaWJ0ZXN0IC0tZGlzYWJsZS1jdXBzIC0tZGlzYWJsZS14aW5lcmFtYSIKKworTElCViA9ICIyLjEwLjAiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5ndGstaW1tb2R1bGUtLiogXmd0ay1wcmludGJhY2tlbmQtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBndGtfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0nKQorICAgIGltbW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdpbW1vZHVsZXMnKQorICAgIHByaW50bW9kdWxlc19yb290ID0gb3MucGF0aC5qb2luKGd0a19saWJkaXIsICdwcmludGJhY2tlbmRzJyk7CisKKyAgICBkLnNldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgJyAnLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgaW1tb2R1bGVzX3Jvb3QsICdeaW0tKC4qKVwuc28kJywgJ2d0ay1pbW1vZHVsZS0lcycsICdHVEsgaW5wdXQgbW9kdWxlIGZvciAlcycpKSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwcmludG1vZHVsZXNfcm9vdCwgJ15saWJwcmludGJhY2tlbmQtKC4qKVwuc28kJywgJ2d0ay1wcmludGJhY2tlbmQtJXMnLCAnR1RLIHByaW50YmFja2VuZCBtb2R1bGUgZm9yICVzJykKKworICAgIGlmIChkLmdldFZhcignREVCSUFOX05BTUVTJywgVHJ1ZSkpOgorICAgICAgICBkLnNldFZhcignUEtHXyR7UE59JywgJyR7TUxQUkVGSVh9bGliZ3RrLTIuMCcpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy1uYXRpdmVfMy4xNi42LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEzODE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIk5hdGl2ZSBpY29uIHV0aWxzIGZvciBHVEsrIgorREVTQ1JJUFRJT04gPSAiZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIGFuZCBndGstZW5jb2RlLXN5bWJvbGljLXN2ZyBidWlsdCBmcm9tIEdUSysgbmF0aXZlbHksIGZvciBidWlsZCB0aW1lIGFuZCBvbi1ob3N0IHBvc3RpbnN0IHNjcmlwdCBleGVjdXRpb24uIgorU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSBsaWJyc3ZnLW5hdGl2ZSIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICBmaWxlOi8vUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiZmM1OWU1YzhiNWE0NTg1YjYwNjIzZGQ3MDhkZjQwMGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGQxMjcyNmQwODU2YTk2OGI0MTgwMmFlNWM1OTcxZDdlOWJhYzUzMjcxN2UzMDlkM2Y4MWI5OTg5ZGE1ZmZiZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCisKK1MgPSAiJHtXT1JLRElSfS9ndGsrLSR7UFZ9IgorCitpbmhlcml0IHBrZ2NvbmZpZyBuYXRpdmUKKworUEtHX0NPTkZJR19GT1JfQlVJTEQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BrZy1jb25maWctbmF0aXZlIgorCitkb19jb25maWd1cmUoKSB7CisJIyBRdWl0ZSB1Z2x5IGJ1dCBkZWZpbmVzIGVub3VnaCB0byBjb21waWxlIHRoZSB0b29scy4KKwlpZiAhIHRlc3QgLWYgZ3RrL2NvbmZpZy5oOyB0aGVuCisJCWVjaG8gIiNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFIFwiZ3RrMzBcIiIgPj4gZ3RrL2NvbmZpZy5oCisJCWVjaG8gIiNkZWZpbmUgSEFWRV9VTklTVERfSCAxIiA+PiBndGsvY29uZmlnLmgKKwkJZWNobyAiI2RlZmluZSBIQVZFX0ZUV19IIDEiID4+IGd0ay9jb25maWcuaAorCWZpCisJaWYgISB0ZXN0IC1mIGdkay9jb25maWcuaDsgdGhlbgorCQl0b3VjaCBnZGsvY29uZmlnLmgKKwlmaQorfQorCitkb19jb21waWxlKCkgeworCSR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IFwKKwkJJHtTfS9ndGsvdXBkYXRlaWNvbmNhY2hlLmMgXAorCQkkKCR7UEtHX0NPTkZJR19GT1JfQlVJTER9IC0tY2ZsYWdzIC0tbGlicyBnZGstcGl4YnVmLTIuMCkgXAorCQktbyBndGstdXBkYXRlLWljb24tY2FjaGUKKworCSR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IFwKKwkJJHtTfS9ndGsvZW5jb2Rlc3ltYm9saWMuYyBcCisJCSQoJHtQS0dfQ09ORklHX0ZPUl9CVUlMRH0gLS1jZmxhZ3MgLS1saWJzIGdpby0yLjAgZ2RrLXBpeGJ1Zi0yLjApIFwKKwkJLW8gZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnICR7RH0ke2JpbmRpcn0KKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d0ay11cGRhdGUtaWNvbi1jYWNoZSBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzLmNhY2hlCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycy5jYWNoZQorfQorCisjIFByZXZlbnQgYml0YmFrZSBmcm9tIG9wdGltaXppbmcgYXdheSB0aGUgbmF0aXZlIGxpYnJzdmcgc3lzcm9vdCBwb3B1bGF0aW9uCitkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lW2RlcGVuZHNdICs9ICJsaWJyc3ZnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMvUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGstaWNvbi11dGlscy9SZW1vdmUtR2RrLWRlcGVuZGVuY3ktZnJvbS1ndGstZW5jb2RlLXN5bWJvbGljLXN2Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdmODAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMvUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gNGQwOWZmMzI0NDE5ZmU0ZTY3MTIzMzA0NGU0MjQzNzhkYTUzOTY5YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDkgSnVuIDIwMTUgMTQ6MjA6MzAgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmVtb3ZlIEdkay1kZXBlbmRlbmN5IGZyb20gZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcKKworQnVpbGRpbmcgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgd2l0aG91dCBidWlsZGluZyBHZGsgaXMgdXNlZnVsCithcyBvbmx5IHRoZSBpY29uIHRvb2xzIGFyZSBuZWVkZWQgb24gdGhlIG5hdGl2ZSBidWlsZDogdGhpcyBtYWtlcworbmF0aXZlIGJ1aWxkIG11Y2ggZmFzdGVyIGFuZCByZXF1aXJlcyBtdWNoIGxlc3MgZGVwZW5kZW5jaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGd0ay9lbmNvZGVzeW1ib2xpYy5jIHwgMzYgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2VuY29kZXN5bWJvbGljLmMgYi9ndGsvZW5jb2Rlc3ltYm9saWMuYworaW5kZXggOWY3ZDAxNS4uMWYwNzU2MyAxMDA2NDQKKy0tLSBhL2d0ay9lbmNvZGVzeW1ib2xpYy5jCisrKysgYi9ndGsvZW5jb2Rlc3ltYm9saWMuYworQEAgLTE5LDcgKzE5LDYgQEAKKyAKKyAjaW5jbHVkZSA8Z2xpYi5oPgorICNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhkYXRhLmg+CistI2luY2x1ZGUgPGdkay9nZGsuaD4KKyAjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorIAorICNpZmRlZiBIQVZFX1VOSVNURF9ICitAQCAtNDMsMzAgKzQyLDE4IEBAIHN0YXRpYyBHZGtQaXhidWYgKgorIGxvYWRfc3ltYm9saWNfc3ZnIChjaGFyICpmaWxlX2RhdGEsIGdzaXplIGZpbGVfbGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICpmZywKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKnN1Y2Nlc3NfY29sb3IsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICp3YXJuaW5nX2NvbG9yLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqZXJyb3JfY29sb3IsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc19mZywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX3N1Y2Nlc3MsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc193YXJuaW5nLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3NfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgKiplcnJvcikKKyB7CisgICBHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKyAgIEdka1BpeGJ1ZiAqcGl4YnVmOworLSAgZ2NoYXIgKmNzc19mZzsKKy0gIGdjaGFyICpjc3Nfc3VjY2VzczsKKy0gIGdjaGFyICpjc3Nfd2FybmluZzsKKy0gIGdjaGFyICpjc3NfZXJyb3I7CisgICBnY2hhciAqZGF0YTsKKyAgIGdjaGFyICpzdmdfd2lkdGgsICpzdmdfaGVpZ2h0OworICAgZ2NoYXIgKmVzY2FwZWRfZmlsZV9kYXRhOworIAorLSAgY3NzX2ZnID0gZ2RrX3JnYmFfdG9fc3RyaW5nIChmZyk7CistCistICBjc3Nfc3VjY2VzcyA9IGNzc193YXJuaW5nID0gY3NzX2Vycm9yID0gTlVMTDsKKy0KKy0gIGNzc193YXJuaW5nID0gZ2RrX3JnYmFfdG9fc3RyaW5nICh3YXJuaW5nX2NvbG9yKTsKKy0gIGNzc19lcnJvciA9IGdka19yZ2JhX3RvX3N0cmluZyAoZXJyb3JfY29sb3IpOworLSAgY3NzX3N1Y2Nlc3MgPSBnZGtfcmdiYV90b19zdHJpbmcgKHN1Y2Nlc3NfY29sb3IpOworLQorICAgLyogRmV0Y2ggc2l6ZSBmcm9tIHRoZSBvcmlnaW5hbCBpY29uICovCisgICBzdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21fZGF0YSAoZmlsZV9kYXRhLCBmaWxlX2xlbiwgTlVMTCk7CisgICBwaXhidWYgPSBnZGtfcGl4YnVmX25ld19mcm9tX3N0cmVhbSAoc3RyZWFtLCBOVUxMLCBlcnJvcik7CitAQCAtMTA1LDEwICs5Miw2IEBAIGxvYWRfc3ltYm9saWNfc3ZnIChjaGFyICpmaWxlX2RhdGEsIGdzaXplIGZpbGVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAiPC9zdmc+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICBnX2ZyZWUgKGVzY2FwZWRfZmlsZV9kYXRhKTsKKy0gIGdfZnJlZSAoY3NzX2ZnKTsKKy0gIGdfZnJlZSAoY3NzX3dhcm5pbmcpOworLSAgZ19mcmVlIChjc3NfZXJyb3IpOworLSAgZ19mcmVlIChjc3Nfc3VjY2Vzcyk7CisgICBnX2ZyZWUgKHN2Z193aWR0aCk7CisgICBnX2ZyZWUgKHN2Z19oZWlnaHQpOworIAorQEAgLTE2Nyw3ICsxNTAsOCBAQCBtYWtlX3N5bWJvbGljX3BpeGJ1ZiAoY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAqKmVycm9yKQorIAorIHsKKy0gIEdka1JHQkEgciA9IHsgMSwwLDAsMX0sIGcgPSB7MCwxLDAsMX07CisrICBjb25zdCBjaGFyIHJbXSA9ICJyZ2JhKDI1NSwwLDAsMSkiOworKyAgY29uc3QgY2hhciBnW10gPSAicmdiYSgwLDI1NSwwLDEpIjsKKyAgIEdka1BpeGJ1ZiAqbG9hZGVkOworICAgR2RrUGl4YnVmICpwaXhidWY7CisgICBpbnQgcGxhbmU7CitAQCAtMTk2LDEwICsxODAsMTAgQEAgbWFrZV9zeW1ib2xpY19waXhidWYgKGNoYXIgKmZpbGUsCisgICAgICAgICogdGhlICJyZXN0IiwgYXMgYWxsIGNvbG9yIGZyYWN0aW9ucyBzaG91bGQgYWRkIHVwIHRvIDEuCisgICAgICAgICovCisgICAgICAgbG9hZGVkID0gbG9hZF9zeW1ib2xpY19zdmcgKGZpbGVfZGF0YSwgZmlsZV9sZW4sIHdpZHRoLCBoZWlnaHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAwID8gJnIgOiAmZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMSA/ICZyIDogJmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDIgPyAmciA6ICZnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAwID8gciA6IGcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDEgPyByIDogZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMiA/IHIgOiBnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgICAgaWYgKGxvYWRlZCA9PSBOVUxMKQorICAgICAgICAgcmV0dXJuIE5VTEw7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYzMjQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1kb2Mtc3R1Yi9ndGstZG9jLXN0dWJfZ2l0LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBndGstZG9jIgorREVTQ1JJUFRJT04gPSAiU3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBndGstZG9jLCBhcyB3ZSBkb24ndCB3YW50IHRvIGJ1aWxkIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1BST1ZJREVTID0gImd0ay1kb2MgZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIiCisKK1NSQ1JFViA9ICIxZGVhMjY2NTkzZWRiNzY2ZDZkODk4Yzc5NDUxZWYxOTNlYjE3Y2ZhIgorUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvZ2xpYi0yLjMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjg3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGcm9tIDhkNDlhMzg2ZjQ2N2NiZjhlMDg0MmQyMjE4MTI2ZjY0M2U1MGY4MzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmlxdWUgTGV1ZW5iZXJnZXIgPGRpbXN0YXJAb3BlbnN1c2Uub3JnPgorRGF0ZTogU3VuLCAyNyBOb3YgMjAxMSAxNDoyNDo1NyArMDAwMAorU3ViamVjdDogRml4IGJ1aWxkIHdpdGggZ2xpYiAyLjMxOiBPbmx5IGdsaWIuaCBjYW4gYmUgI2luY2x1ZGUnZC4gRml4ZXMgYnVnICM2NjQ5MTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0KK2RpZmYgLS1naXQgYS9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jIGIvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYworaW5kZXggMWY3YTQxZi4uNTZhOTI4NiAxMDA2NDQKKy0tLSBhL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKKysrKyBiL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKK0BAIC0yOCw3ICsyOCw3IEBACisgI2luY2x1ZGUgImFuaW1hdGlvbi5oIgorIAorICNpZmRlZiBIQVZFX1dPUktJTkdfQU5JTUFUSU9OCistI2luY2x1ZGUgPGdsaWIvZ3RpbWVyLmg+CisrI2luY2x1ZGUgPGdsaWIuaD4KKyAKKyBzdHJ1Y3QgX0FuaW1hdGlvbkluZm8geworIAlHVGltZXIgKnRpbWVyOworLS0KK2NnaXQgdjAuOS4wLjIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzU1N2JhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9zdWJzdGl0dXRlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMKKy0tLSBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCTIwMTAtMTAtMDEgMTU6NDI6MzcuMDAwMDAwMDAwICswMzAwCisrKysgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYwkyMDEzLTA4LTIwIDAyOjUwOjI3LjkzMDUxMDU2NSArMDMwMAorQEAgLTE2Niw2ICsxNjYsOSBAQAorCisgQUNfU1VCU1QoREVWRUxPUE1FTlRfQ0ZMQUdTKQorCisrQUNfU1VCU1QoW2V4cG9ydGVkX3N5bWJvbHNfdGVzdHNdLCBbWyQoRVhQT1JURURfU1lNQk9MU19URVNUUyldXSkKKytBQ19TVUJTVChbdG9ydHVyZV90ZXN0X3Rlc3RzXSwgW1skKFRPUlRVUkVfVEVTVF9URVNUUyldXSkKKysKKyBBTV9DT05GSUdfSEVBREVSKFtlbmdpbmVzL3N1cHBvcnQvY29uZmlnLmhdKQorCisgQUNfQ09ORklHX0ZJTEVTKFsKK2RpZmYgLU51cmQgZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0gZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0KKy0tLSBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQkyMDEwLTA5LTE5IDE4OjE4OjIxLjAwMDAwMDAwMCArMDMwMAorKysrIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCTIwMTMtMDgtMjAgMDI6NTA6MzYuODQyNTEwODY1ICswMzAwCitAQCAtNjYsNyArNjYsNyBAQAorICMgUHJlZml4IHdpdGggZXhwb3J0ZWRfCisgRVhQT1JURURfU1lNQk9MU19URVNUUyA9ICQocGF0c3Vic3QgJSxleHBvcnRlZF8lLCQoQlVJTERfRU5HSU5FUykpCisKKy1URVNUUyArPSAkKEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMpCisrVEVTVFMgKz0gQGV4cG9ydGVkX3N5bWJvbHNfdGVzdHNACisKKworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BAIC04OCw3ICs4OCw3IEBACisgVE9SVFVSRV9URVNUX1RFU1RTID0gdG9ydHVyZV9idWlsZGluICQocGF0c3Vic3QgJSx0b3J0dXJlXyUsJChUT1JUVVJFX1RFU1RfRU5HSU5FUykpCisKKyAjIEFkZCBUT1JUVVJFX1RFU1RfRU5HSU5FUyB0byBsaXN0IG9mIHRlc3RzCistVEVTVFMgKz0gJChUT1JUVVJFX1RFU1RfVEVTVFMpCisrVEVTVFMgKz0gQHRvcnR1cmVfdGVzdF90ZXN0c0AKKworICMgUG9zc2libGUgb3RoZXIgdGVzdHM6CisgIyAgLSBBbiBleHRlbnNpdmUgdGhlbWUgc3dpdGNoIHRlc3RzIHRoYXQgbG9hZHMvdW5sb2FkcyB0aGUgZW5naW5lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXNfMi4yMC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzA0NTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdUSysgdGhlbWUgZW5naW5lcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSBndGsrIgorCitQUiA9ICJyMyIKKworUEFDS0FHRVMgKz0gIiR7UE59LXNjaGVtYXMiCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrLWVuZ2luZS0uKiBeZ3RrLXRoZW1lLS4qIgorCitSREVQRU5EU19ndGstdGhlbWUtcmVkbW9uZCA9ICJndGstZW5naW5lLXJlZG1vbmQ5NSIKK1JERVBFTkRTX2d0ay10aGVtZS1tZXRhbCA9ICJndGstZW5naW5lLW1ldGFsIgorUkRFUEVORFNfZ3RrLXRoZW1lLW1pc3QgPSAiZ3RrLWVuZ2luZS1taXN0IgorUkRFUEVORFNfZ3RrLXRoZW1lLWNydXggPSAiZ3RrLWVuZ2luZS1jcnV4LWVuZ2luZSIKK1JERVBFTkRTX2d0ay10aGVtZS1saWdodGhvdXNlYmx1ZSA9ICJndGstZW5naW5lLWxpZ2h0aG91c2VibHVlIgorUkRFUEVORFNfZ3RrLXRoZW1lLXRoaW5pY2UgPSAiZ3RrLWVuZ2luZS10aGluaWNlIgorUkRFUEVORFNfZ3RrLXRoZW1lLWluZHVzdHJpYWwgPSAiZ3RrLWVuZ2luZS1pbmR1c3RyaWFsIgorUkRFUEVORFNfZ3RrLXRoZW1lLWNsZWFybG9va3MgPSAiZ3RrLWVuZ2luZS1jbGVhcmxvb2tzIgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tc2NoZW1hcyA9ICIke2RhdGFkaXJ9L2d0ay1lbmdpbmVzLyoueG1sIgorCitDRkxBR1NfcHJlcGVuZCA9ICItREhBVkVfQU5JTUFUSU9OICIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworaW5oZXJpdCBnbm9tZWJhc2UKK0dOT01FX0NPTVBSRVNTX1RZUEU9ImJ6MiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgZW5naW5lc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImd0ay0yLjAvMi4xMC4wL2VuZ2luZXMiKQorICAgIHRoZW1lc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksICJ0aGVtZXMiKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZW5naW5lc19yb290LCAnXmxpYiguKilcLnNvJCcsICdndGstZW5naW5lLSVzJywgJ0dUSyAlcyB0aGVtZSBlbmdpbmUnLCBleHRyYV9kZXBlbmRzPScnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHRoZW1lc19yb290LCAnKC4qKScsICdndGstdGhlbWUtJXMnLCAnR1RLIHRoZW1lICVzJywgYWxsb3dfZGlycz1UcnVlLCBleHRyYV9kZXBlbmRzPScnKQorICAgICMgVE9ETzogbWFyayB0aGVtZSBwYWNrYWdlcyBhcyBhcmNoIGFsbAorfQorCitTUkNfVVJJICs9ICJmaWxlOi8vZ2xpYi0yLjMyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zdWJzdGl0dXRlLXRlc3RzLnBhdGNoIgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNWRlYjI4N2JjNjA3NWRjMjE4MTIxMzA2MDRjN2RjNGYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxNWI2ODBhYmNhNmM3NzNlY2I4NTI1MzUyMWZhMTAwZGQzYjg1NDliZWZlZWNjNzU5NWIxMDIwOWQ2MmQ2NmI1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OWZkODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLXRoZW1lLXRvcnR1cmVyL2d0ay10aGVtZS10b3J0dXJlcl9naXQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJHVEsrIFRoZW1lIGJlbmNobWFyayBwcm9ncmFtIgorREVQRU5EUyA9ICJndGsrIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpa2kubGFwdG9wLm9yZy9nby9HVEtfZm9yX09MUEMiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2FwcHdpbmRvdy5jO2VuZGxpbmU9MTM7bWQ1PThjMDk5MjBkZTQ2MGM3ZWExZjY0ZWU1Njk4NmFhYmQ5IgorCitTUkNSRVYgPSAiOTk5NjJhZTM5YmI1YWFkYjMxOTI5YjI1YzU4ZTFhMDUzZjljOTU0NSIKK1BWID0gIjAuMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Rldi5sYXB0b3Aub3JnL3Byb2plY3RzL3NvYy1ndGsvIgorUyA9ICIke1dPUktESVJ9L2dpdC9ndGstdGhlbWUtdG9ydHVyZXIiCisKK0NGTEFHUyArPSAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSB0b3J0dXJlciAke0R9JHtiaW5kaXJ9Cit9CisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2hpY29sb3ItaWNvbi10aGVtZS9oaWNvbG9yLWljb24tdGhlbWVfMC4xNS5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwNDYzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJEZWZhdWx0IGljb24gdGhlbWUgdGhhdCBhbGwgaWNvbiB0aGVtZXMgYXV0b21hdGljYWxseSBpbmhlcml0IGZyb20iCitIT01FUEFHRSA9ICJodHRwOi8vaWNvbi10aGVtZS5mcmVlZGVza3RvcC5vcmcvd2lraS9IaWNvbG9yVGhlbWUiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjA4YTQ0NjgwOTkxM2ZjOWIzYzcxOGYwZWFlYTA0MjYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ljb24tdGhlbWUuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiNmFhMmIzOTkzYTg4M2Q4NTAxN2M3Y2MwY2ZjMGZiNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWNjNDVhYzMzMThjMzEyMTJlYTJkOGNiOTllNjQwMjA3MzIzOTNlZTc2MzBmYTZjMTgxMGFmNWY5ODcwMzNjYyIKKworaW5oZXJpdCBhbGxhcmNoIGF1dG90b29scworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9pY29ucyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2pzb24tZ2xpYi9qc29uLWdsaWJfMS4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwOGFjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiSlNPTi1HTGliIGltcGxlbWVudHMgYSBmdWxsIEpTT04gcGFyc2VyIHVzaW5nIEdMaWIgYW5kIEdPYmplY3QiCitERVNDUklQVElPTiA9ICJVc2UgSlNPTi1HTGliIGl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIGFuZCBnZW5lcmF0ZSB2YWxpZCBKU09OXAorIGRhdGEgc3RydWN0dXJlcywgdXNpbmcgYSBET00tbGlrZSBBUEkuIEpTT04tR0xpYiBhbHNvIG9mZmVycyBHT2JqZWN0IFwKK2ludGVncmF0aW9uLCBwcm92aWRpbmcgdGhlIGFiaWxpdHkgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBHT2JqZWN0IFwKK2luc3RhbmNlcyB0byBhbmQgZnJvbSBKU09OIGRhdGEgdHlwZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpdmUuZ25vbWUub3JnL0pzb25HbGliIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMxMzFiMDQxN2VjZGUzZGExYWU3MmFjY2VhYTM3NWNmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiODBmMzU5M2NiNmJkMTNmMTQ2NTgyOGU0NmE5Zjc0MGUyZTliZDNjZDIyNTc4ODk0NDJiM2U2MmJkNmRlMDVjZCIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBsaWJfcGFja2FnZQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk2ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvMDAwMS1taXBzLVVzZS1jb21waWxlci1pbnRlcm5hbC1kZWZpbmUtZm9yLWxpbnV4LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gYTVlZmFhOTZmZDkzNGViMjQ1YzIzNGE1Mjc1ZmNmNjI2OThlZjk4NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDIgQXByIDIwMTUgMjE6Mzg6MDMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWlwczogVXNlIGNvbXBpbGVyIGludGVybmFsIGRlZmluZSBmb3IgbGludXgKKworX19saW51eF9fIGlzIGRlZmluZWQgYnkgY29tcGlsZXIgd2hlbiBidWlsZGluZyBmb3IKK2xpbnV4IHBsYXRmb3JtcywgbGV0cyB1c2UgaXQKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9taXBzL2ZmaXRhcmdldC5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pcHMvZmZpdGFyZ2V0LmggYi9zcmMvbWlwcy9mZml0YXJnZXQuaAoraW5kZXggNzE3ZDY1OS4uNmZhYTM1OCAxMDA2NDQKKy0tLSBhL3NyYy9taXBzL2ZmaXRhcmdldC5oCisrKysgYi9zcmMvbWlwcy9mZml0YXJnZXQuaAorQEAgLTMyLDcgKzMyLDcgQEAKKyAjZXJyb3IgIlBsZWFzZSBkbyBub3QgaW5jbHVkZSBmZml0YXJnZXQuaCBkaXJlY3RseSBpbnRvIHlvdXIgc291cmNlLiAgVXNlIGZmaS5oIGluc3RlYWQuIgorICNlbmRpZgorIAorLSNpZmRlZiBsaW51eAorKyNpZmRlZiBfX2xpbnV4X18KKyAjIGluY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisgI2VsaWYgZGVmaW5lZChfX3J0ZW1zX18pCisgLyoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmkvZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1YmZmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogbGliZmZpLTMuMC4xMy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmZmaS0zLjAuMTMub3JpZy9NYWtlZmlsZS5hbQorKysrIGxpYmZmaS0zLjAuMTMvTWFrZWZpbGUuYW0KK0BAIC05OCw3ICs5OCw3IEBAIEZMQUdTX1RPX1BBU1MgPSAkKEFNX01BS0VGTEFHUykKKyAKKyBNQUtFT1ZFUlJJREVTPQorIAorLXRvb2xleGVjbGliX0xUTElCUkFSSUVTID0gbGliZmZpLmxhCisrbGliX0xUTElCUkFSSUVTID0gbGliZmZpLmxhCisgbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZmZpX2NvbnZlbmllbmNlLmxhCisgCisgbGliZmZpX2xhX1NPVVJDRVMgPSBzcmMvcHJlcF9jaWYuYyBzcmMvdHlwZXMuYyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaV8zLjIuMS5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpXzMuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTE2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkEgcG9ydGFibGUgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBgbGliZmZpJyBsaWJyYXJ5IHByb3ZpZGVzIGEgcG9ydGFibGUsIGhpZ2ggbGV2ZWwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIHRvIHZhcmlvdXMgY2FsbGluZyBcCitjb252ZW50aW9ucy4gIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1lciB0byBjYWxsIGFueSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgYSBjYWxsIGludGVyZmFjZSBkZXNjcmlwdGlvbiBhdCBydW4gXAordGltZS4gRkZJIHN0YW5kcyBmb3IgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UuICBBIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlIGlzIHRoZSBwb3B1bGFyIG5hbWUgZm9yIHRoZSBcCitpbnRlcmZhY2UgdGhhdCBhbGxvd3MgY29kZSB3cml0dGVuIGluIG9uZSBsYW5ndWFnZSB0byBjYWxsIGNvZGUgd3JpdHRlbiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgVGhlIGBsaWJmZmknIFwKK2xpYnJhcnkgcmVhbGx5IG9ubHkgcHJvdmlkZXMgdGhlIGxvd2VzdCwgbWFjaGluZSBkZXBlbmRlbnQgbGF5ZXIgb2YgYSBmdWxseSBmZWF0dXJlZCBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZS4gIFwKK0EgbGF5ZXIgbXVzdCBleGlzdCBhYm92ZSBgbGliZmZpJyB0aGF0IGhhbmRsZXMgdHlwZSBjb252ZXJzaW9ucyBmb3IgdmFsdWVzIHBhc3NlZCBiZXR3ZWVuIHRoZSB0d28gbGFuZ3VhZ2VzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zNjEwYmIxNzY4M2EwMDg5ZWQ2NDA1NTQxNmIyYWUxYiIKKworU1JDX1VSSSA9ICJmdHA6Ly9zb3VyY2V3YXJlLm9yZy9wdWIvbGliZmZpLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtbGliZmZpLmxhLWxvY2F0aW9uLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1taXBzLVVzZS1jb21waWxlci1pbnRlcm5hbC1kZWZpbmUtZm9yLWxpbnV4LnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4M2I4OTU4NzYwN2UzZWI2NWM3MGQzNjFmMTNiYWI0MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMDZlYmI4ZTFkOWEyMmQxOWUzOGQ2M2ZkYjgzOTU0MjUzZjM5YmVkYzVkNDYyMzJhMDU2NDU2ODU3MjJjYTM3IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1idWlsZGRpciIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJmZmktJHtQVn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ1ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L2dsYWRlLWNydWZ0LnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdXIgbGliZ2xhZGUtMi40LjB+L2NvbmZpZ3VyZS5pbiBsaWJnbGFkZS0yLjQuMC9jb25maWd1cmUuaW4KKy0tLSBsaWJnbGFkZS0yLjQuMH4vY29uZmlndXJlLmluCTIwMDQtMDUtMTcgMTI6Mzg6MzEuMDAwMDAwMDAwICswMTAwCisrKysgbGliZ2xhZGUtMi40LjAvY29uZmlndXJlLmluCTIwMDQtMDctMjggMTY6NTM6MDkuMDAwMDAwMDAwICswMTAwCitAQCAtMTQ3LDYgKzE0NywxOCBAQAorIEFNX0NPTkRJVElPTkFMKEhBVkVfUFlUSE9OLCAkaGF2ZV9weXRob24pCisgQUNfU1VCU1QoUFlUSE9OKQorIAorK0FDX01TR19DSEVDS0lORyhbZm9yIGNydWZ0IGluIGxpYmd0a10pCisrQUNfVFJZX0xJTksoWworKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrXSwgICAgICBbIGd0a190cmVlX2dldF90eXBlICgpOyByZXR1cm4gMDsgXSwKKysgICAgICAgIFsgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICAgIGhhdmVfY3J1ZnQ9eWVzIF0sCisrICAgICAgICBbIEFDX01TR19SRVNVTFQobm8pCisrCSAgQUNfREVGSU5FKERJU0FCTEVfQ1JVRlQsLFtsZWF2ZSBvdXQgc3VwcG9ydCBmb3Igb2xkLCBicm9rZW4gd2lkZ2V0c10pCisrICAgICAgICAgIGhhdmVfY3J1ZnQ9bm8gXSkKKytBQ19TVUJTVChESVNBQkxFX0NSVUZUKQorKworIGRubCBhZGQgZGVidWdnaW5nIG9wdGlvbnMgLi4uCisgY2hhbmdlcXVvdGUoLClkbmwKKyBpZiB0ZXN0ICJ4JEdDQyIgPSB4eWVzOyB0aGVuCitPbmx5IGluIGxpYmdsYWRlLTIuNC4wOiBjb25maWd1cmUuaW4ub3JpZworZGlmZiAtdXIgbGliZ2xhZGUtMi40LjB+L2dsYWRlL2dsYWRlLWd0ay5jIGxpYmdsYWRlLTIuNC4wL2dsYWRlL2dsYWRlLWd0ay5jCistLS0gbGliZ2xhZGUtMi40LjB+L2dsYWRlL2dsYWRlLWd0ay5jCTIwMDQtMDMtMTMgMTM6NDc6MzUuMDAwMDAwMDAwICswMDAwCisrKysgbGliZ2xhZGUtMi40LjAvZ2xhZGUvZ2xhZGUtZ3RrLmMJMjAwNC0wNy0yOCAxNjo1Mzo1Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMTMsNiArMjEzLDggQEAKKyAJZ3RrX2NsaXN0X2NvbHVtbl90aXRsZXNfaGlkZSAoR1RLX0NMSVNUICh3KSk7CisgfQorIAorKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorKworIHN0YXRpYyB2b2lkCisgdHJlZV9zZXRfc2VsZWN0aW9uX21vZGUgKEdsYWRlWE1MICp4bWwsIEd0a1dpZGdldCAqdywKKyAJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCitAQCAtMjM4LDYgKzI0MCw4IEBACisgICAgIGd0a190cmVlX3NldF92aWV3X2xpbmVzIChHVEtfVFJFRSAodyksIEJPT0wgKHZhbHVlKSk7CisgfQorIAorKyNlbmRpZgorKworIHN0YXRpYyB2b2lkCisgbGlzdF9zZXRfc2VsZWN0aW9uX21vZGUgKEdsYWRlWE1MICp4bWwsIEd0a1dpZGdldCAqdywKKyAJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCitAQCAtMjU0LDYgKzI1OCw3IEBACisgICAgIGd0a19jaGVja19tZW51X2l0ZW1fc2V0X3Nob3dfdG9nZ2xlIChHVEtfQ0hFQ0tfTUVOVV9JVEVNICh3KSwgQk9PTCAodmFsdWUpKTsKKyB9CisgCisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgc3RhdGljIHZvaWQKKyB0ZXh0X3NldF90ZXh0IChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK0BAIC0yNjIsNiArMjY3LDcgQEAKKyAKKyAgICAgZ3RrX2VkaXRhYmxlX2luc2VydF90ZXh0IChHVEtfRURJVEFCTEUgKHcpLCB2YWx1ZSwgLTEsICZwb3MpOworIH0KKysjZW5kaWYKKyAKKyBzdGF0aWMgdm9pZAorIHJhZGlvX21lbnVfaXRlbV9zZXRfZ3JvdXAgKEdsYWRlWE1MICp4bWwsIEd0a1dpZGdldCAqdywKK0BAIC0xMTI1LDEzICsxMTMxLDE3IEBACisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNlbGVjdGlvbl9tb2RlIiwgY2xpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2hhZG93X3R5cGUiLCBjbGlzdF9zZXRfc2hhZG93X3R5cGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzaG93X3RpdGxlcyIsIGNsaXN0X3NldF9zaG93X3RpdGxlcyk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UUkVFLCAic2VsZWN0aW9uX21vZGUiLCB0cmVlX3NldF9zZWxlY3Rpb25fbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UUkVFLCAidmlld19tb2RlIiwgdHJlZV9zZXRfdmlld19tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RSRUUsICJ2aWV3X2xpbmUiLCB0cmVlX3NldF92aWV3X2xpbmUpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfTElTVCwgInNlbGVjdGlvbl9tb2RlIiwgbGlzdF9zZXRfc2VsZWN0aW9uX21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0hFQ0tfTUVOVV9JVEVNLCAiYWx3YXlzX3Nob3dfdG9nZ2xlIiwKKyAJCQkJY2hlY2tfbWVudV9pdGVtX3NldF9hbHdheXNfc2hvd190b2dnbGUpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVEVYVCwgInRleHQiLCB0ZXh0X3NldF90ZXh0KTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1JBRElPX01FTlVfSVRFTSwgImdyb3VwIiwKKyAJCQkJcmFkaW9fbWVudV9pdGVtX3NldF9ncm91cCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UT09MQkFSLCAidG9vbHRpcHMiLCB0b29sYmFyX3NldF90b29sdGlwcyk7CitAQCAtMTI4OCw4ICsxMjk4LDEwIEBACisgCQkJICAgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfY2hpbGRyZW4sIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RFQVJPRkZfTUVOVV9JVEVNLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVEVYVCwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RFWFRfVklFVywgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RJUFNfUVVFUlksIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKK0BAIC0xMzA0LDggKzEzMTYsMTAgQEAKKyAJCQkgICBnbGFkZV9zdGFuZGFyZF9idWlsZF9jaGlsZHJlbiwgTlVMTCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVE9PTF9CVVRUT04sIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9UUkVFLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVFJFRV9WSUVXLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVkJVVFRPTl9CT1gsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L25vLXhtbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0YzA5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoCkBAIC0wLDAgKzEsNTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXVyTiBsaWJnbGFkZS0yLjQuMi5vcmlnL2NvbmZpZ3VyZS5pbiBsaWJnbGFkZS0yLjQuMi9jb25maWd1cmUuaW4KKy0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA1LTAyLTExIDEyOjQyOjU4LjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmdsYWRlLTIuNC4yL2NvbmZpZ3VyZS5pbgkyMDA1LTAzLTIyIDAxOjIyOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTUyLDExICs1MiwzMyBAQAorIEFDX1BBVEhfUFJPRyhQS0dfQ09ORklHLCBwa2ctY29uZmlnLCBubykKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHTEFERSwgW2RubAorLSAgbGlieG1sLTIuMCA+PSByZXF1aXJlZF9saWJ4bWxfdmVyc2lvbiBkbmwKKyAgIGF0ayA+PSByZXF1aXJlZF9hdGtfdmVyc2lvbiBkbmwKKyAgIGd0aystMi4wID49IHJlcXVpcmVkX2d0a192ZXJzaW9uIGRubAorICAgZ2xpYi0yLjAgPj0gcmVxdWlyZWRfZ2xpYl92ZXJzaW9uXSkKKyAKKytkaXNhYmxlX3htbDI9bm8KKytBQ19BUkdfV0lUSChbbGlieG1sMl0sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYnhtbDJdLCBbRG9uJ3QgdXNlIGxpYnhtbDIsIHVzZSBHbGliJ3MgR01hcmt1cFBhcnNlciBpbnN0ZWFkXSksCisrICBbZGlzYWJsZV94bWwyPXllc10sCisrICBbZGlzYWJsZV94bWwyPW5vXSkKKysKKytBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGFyZSB1c2luZyBsaWJ4bWwyXSkKKytpZiB0ZXN0ICJ4JGRpc2FibGVfeG1sMiIgPT0gInhubyI7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoeWVzKQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWE1MMiwgbGlieG1sLTIuMCA+PSAyLjQuMTApCisrICBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyPSJsaWJ4bWwtMi4wIgorKyAgTElCR0xBREVfQ0ZMQUdTPSIkTElCR0xBREVfQ0ZMQUdTICRYTUwyX0NGTEFHUyIKKysgIExJQkdMQURFX0xJQlM9IiRMSUJHTEFERV9MSUJTICRYTUwyX0xJQlMiCisrZWxzZQorKyAgTElCR0xBREVfQ0ZMQUdTPSIkTElCR0xBREVfQ0ZMQUdTIC1EVVNFX0dNQVJLVVBfUEFSU0VSIgorKyAgUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMj0iIgorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorKworK0FDX1NVQlNUKFhNTDJfTElCUykKKytBQ19TVUJTVChYTUwyX0NGTEFHUykKKytBQ19TVUJTVChQS0dDRkdfUkVRVUlSRV9MSUJYTUwyKQorKworIEFDX01TR19DSEVDS0lORyhbZm9yIG5hdGl2ZSBXaW4zMl0pCisgY2FzZSAiJGhvc3QiIGluCisgICAqLSotbWluZ3cqKQorQEAgLTExNiw2ICsxMzgsMjEgQEAKKyAgIGZpCisgZmkKKyAKKytpZiB0ZXN0ICJ4JGRpc2FibGVfeG1sMiIgPT0gInh5ZXMiOyB0aGVuCisrICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKysgIGVjaG8gIiAgWW91IGNob3NlIHRvIGRpc2FibGUgbGlieG1sMiBhbmQgdXNlIEdsaWIncyIKKysgIGVjaG8gIiAgR01hcmt1cFBhcnNlciBpbnN0ZWFkLiIgCisrICBlY2hvICAKKysgIGVjaG8gIiAgUGxlYXNlIGJlYXIgaW4gbWluZCB0aGF0IHVzaW5nIGxpYmdsYWRlIHdpdGgiCisrICBlY2hvICIgIEdNYXJrdXBQYXJzZXIgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgb25seS4iCisrICBlY2hvCisrICBlY2hvICIgIFBsZWFzZSBwb3N0IHByb2JsZW1zIG9yIHN1Y2Nlc3Mgc3RvcmllcyB0byIKKysgIGVjaG8gIiAgdGhlIGdsYWRlLWRldmVsIG1haWxpbmcgbGlzdC4gVGhhbmsgeW91LiIKKysgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgorK2ZpCisrCisrCisrCisgR1RLX0RPQ19DSEVDSygxLjApCisgCisgZG5sIGdldHRleHQgc3R1ZmYgLi4uIHRoZXJlIGlzIG5vIG1lc3NhZ2UgY2F0YWxvZyBmb3IgbGliZ2xhZGUgLS0gbGliZ2xhZGUKK2RpZmYgLXVyTiBsaWJnbGFkZS0yLjQuMi5vcmlnL2dsYWRlL2dsYWRlLXBhcnNlci5jIGxpYmdsYWRlLTIuNC4yL2dsYWRlL2dsYWRlLXBhcnNlci5jCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9nbGFkZS9nbGFkZS1wYXJzZXIuYwkyMDA0LTExLTExIDExOjU2OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmdsYWRlLTIuNC4yL2dsYWRlL2dsYWRlLXBhcnNlci5jCTIwMDUtMDMtMjIgMDE6MjA6MDAuMDAwMDAwMDAwICswMTAwCitAQCAtMzQsNyArMzQsMTUgQEAKKyAjICBkZWZpbmUgZGdldHRleHQoRG9tYWluLCBTdHJpbmcpIChTdHJpbmcpCisgI2VuZGlmCisgCistI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKysjaWZkZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrIyAgaW5jbHVkZSA8emxpYi5oPgorKyNlbHNlCisrIyAgaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgorKyNlbmRpZgorKworKyNpZmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysjICBkZWZpbmUgeG1sQ2hhciBnY2hhcgorKyNlbmRpZgorIAorICNpbmNsdWRlICJnbGFkZS1wYXJzZXIuaCIKKyAjaW5jbHVkZSAiZ2xhZGUtcHJpdmF0ZS5oIgorQEAgLTUwOCw3ICs1MTYsOSBAQAorICAgICBjYXNlIFBBUlNFUl9TVEFSVDoKKyAJaWYgKCFzdHJjbXAobmFtZSwgImdsYWRlLWludGVyZmFjZSIpKSB7CisgCSAgICBzdGF0ZS0+c3RhdGUgPSBQQVJTRVJfR0xBREVfSU5URVJGQUNFOworLSNpZiAwCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysgI2lmIDAKKyAJICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IFhNTCBuYW1lc3BhY2UgKi8KKyAJICAgIGZvciAoaSA9IDA7IGF0dHJzICYmIGF0dHJzW2ldICE9IE5VTEw7IGkgKz0gMikgeworIAkJaWYgKCFzdHJjbXAoYXR0cnNbaV0sICJ4bWxucyIpICYmCitAQCAtNTE4LDcgKzUyOCw5IEBACisgCQkgICAgZ193YXJuaW5nKCJ1bmtub3duIGF0dHJpYnV0ZSBgJXMnIGZvciA8Z2xhZGUtaW50ZXJmYWNlPiIsCisgCQkJICAgICAgYXR0cnNbaV0pOworIAkgICAgfQorKyAjZW5kaWYKKyAjZW5kaWYKKysKKyAJfSBlbHNlIHsKKyAJICAgIGdfd2FybmluZygiRXhwZWN0ZWQgPGdsYWRlLWludGVyZmFjZT4uICBHb3QgPCVzPi4iLCBuYW1lKTsKKyAJICAgIHN0YXRlLT5wcmV2X3N0YXRlID0gc3RhdGUtPnN0YXRlOworQEAgLTEwNjMsMTIgKzEwNzUsMTggQEAKKyAgICAgfQorIH0KKyAKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB4bWxFbnRpdHlQdHIKKyBnbGFkZV9wYXJzZXJfZ2V0X2VudGl0eShHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCB4bWxDaGFyICpuYW1lKQorIHsKKyAgICAgcmV0dXJuIHhtbEdldFByZWRlZmluZWRFbnRpdHkobmFtZSk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGdsYWRlX3BhcnNlcl93YXJuaW5nKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQorIHsKK0BAIC0xMDc5LDYgKzEwOTcsMTAgQEAKKyAgICAgdmFfZW5kKGFyZ3MpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfZXJyb3IoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCisgeworQEAgLTEwODksNiArMTExMSwxMCBAQAorICAgICB2YV9lbmQoYXJncyk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGdsYWRlX3BhcnNlcl9mYXRhbF9lcnJvcihHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyB7CitAQCAtMTA5OSw2ICsxMTI1LDEwIEBACisgICAgIHZhX2VuZChhcmdzKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB4bWxTQVhIYW5kbGVyIGdsYWRlX3BhcnNlciA9IHsKKyAgICAgKGludGVybmFsU3Vic2V0U0FYRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJuYWxTdWJzZXQgKi8KKyAgICAgKGlzU3RhbmRhbG9uZVNBWEZ1bmMpTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXNTdGFuZGFsb25lICovCitAQCAtMTEyNiw2ICsxMTU2LDgyIEBACisgICAgIChmYXRhbEVycm9yU0FYRnVuYylnbGFkZV9wYXJzZXJfZmF0YWxfZXJyb3IsICAgICAgIC8qIGZhdGFsRXJyb3IgKi8KKyB9OworIAorKyNlbHNlIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnRfd3JhcHBlcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqbmFtZSwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKiphdHRyX25hbWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICoqYXR0cl92YWx1ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycm9yKQorK3sKKysgICAgZ3VpbnQgaSA9IDA7CisrCisrICAgIC8qIFBhY2sgYXR0cmlidXRlIG5hbWVzL3ZhbHVlcyBmcm9tIHR3byBzZXBhcmF0ZQorKyAgICAgKiAgYXJyYXlzIChHTWFya3VwUGFyc2VyIHN0eWxlKSBpbnRvIG9uZSBzaW5nbGUKKysgICAgICogIGFycmF5IChsaWJ4bWwgU0FYUGFyc2VyIHN0eWxlKS4gVGhpcyBpcyBub3QKKysgICAgICogIHZlcnkgZWZmaWNpZW50LCBidXQgd2UgZG8gaXQgdG8gbWFrZSB0aGUKKysgICAgICogIEdNYXJrdXBQYXJzZXIgY29kZSBhcyBsaXR0bGUgaW52YXNpdmUgYXMKKysgICAgICogIHBvc3NpYmxlLiAqLworKworKyAgICB3aGlsZSAoYXR0cl9uYW1lc1tpXSAhPSBOVUxMKSB7CisrICAgICAgKytpOworKyAgICB9CisrCisrICAgIGlmICgxKQorKyAgICB7CisrICAgICAgICBjb25zdCBnY2hhciAqYXR0clsoaSoyKSsxXTsKKysgICAgICAgIGd1aW50IGosIGs7CisrICAgICAgIAorKyAgICAgICAgZm9yIChqPTAsIGs9MDsgIGsgPCBpOyAgaiArPSAyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF0dHJbal0gPSBhdHRyX25hbWVzW2tdOworKyAgICAgICAgICAgIGF0dHJbaisxXSA9IGF0dHJfdmFsdWVzW2tdOworKyAgICAgICAgICAgICsrazsKKysgICAgICAgIH0KKysgICAgICAgIGF0dHJbaSoyXSA9IE5VTEw7CisrCisrICAgICAgICBnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudCgoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgbmFtZSwgYXR0cik7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnRfd3JhcHBlcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycikKKyt7CisrICAgIGdsYWRlX3BhcnNlcl9lbmRfZWxlbWVudCgoR2xhZGVQYXJzZVN0YXRlKilzdGF0ZSwgbmFtZSk7CisrfQorKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX2NoYXJhY3RlcnNfd3JhcHBlcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKmNoYXJzLCAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICAgICAgICAgICAgICAgIGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgIHN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICoqZXJyKQorK3sKKysgICAgZ2xhZGVfcGFyc2VyX2NoYXJhY3RlcnMoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIGNoYXJzLCAoaW50KSBsZW4pOworK30KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9lcnJvcihHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LCBHRXJyb3IgKmVyciwgZ3BvaW50ZXIgZGF0YSkKKyt7CisrICAgIGdfbG9nKCJHbGFkZS1QYXJzZXIiLCBHX0xPR19MRVZFTF9DUklUSUNBTCwgIiVzIiwgZXJyLT5tZXNzYWdlKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IEdNYXJrdXBQYXJzZXIgICBnbGFkZV9wYXJzZXIgPSB7CisrICAgIGdsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50X3dyYXBwZXIsICAvKiBlbGVtZW50IG9wZW4gICAqLworKyAgICBnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnRfd3JhcHBlciwgICAgLyogZWxlbWVudCBjbG9zZSAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2NoYXJhY3RlcnNfd3JhcHBlciwgICAgIC8qIHRleHQgY29udGVudCAgICovCisrICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYXNzdGhyb3VnaCAgICAqLworKyAgICBnbGFkZV9wYXJzZXJfZXJyb3IsICAgICAgICAgICAgICAgICAgLyogcGFyc2UgZXJyb3IgICAgKi8KKyt9OworKworKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKysKKyBzdGF0aWMgdm9pZAorIHdpZGdldF9pbmZvX2ZyZWUoR2xhZGVXaWRnZXRJbmZvICppbmZvKQorIHsKK0BAIC0xMTkxLDYgKzEyOTcsOSBAQAorICAqCisgICogUmV0dXJuczogdGhlIEdsYWRlSW50ZXJmYWNlIHN0cnVjdHVyZSBmb3IgdGhlIFhNTCBmaWxlLgorICAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgR2xhZGVJbnRlcmZhY2UgKgorIGdsYWRlX3BhcnNlcl9wYXJzZV9maWxlKGNvbnN0IGdjaGFyICpmaWxlLCBjb25zdCBnY2hhciAqZG9tYWluKQorIHsKK0BAIC0xMjIyLDYgKzEzMzEsMzEgQEAKKyAgICAgcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKKyB9CisgCisrI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9maWxlKGNvbnN0IGdjaGFyICpmaWxlLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysgICAgR2xhZGVJbnRlcmZhY2UgICppbnRlcmZhY2U7CisrICAgIEdFcnJvciAgICAgICAgICAqZXJyICAgICA9IE5VTEw7CisrICAgIGdjaGFyICAgICAgICAgICAqY29udGVudCA9IE5VTEw7CisrICAgIGdzaXplICAgICAgICAgICAgY2xlbjsKKysKKysgICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGUsICZjb250ZW50LCAmY2xlbiwgJmVycikpIHsKKysgICAgICAgIGdfd2FybmluZygiY291bGQgbm90IGxvYWQgZ2xhZGUgZmlsZTogJXMiLCBlcnItPm1lc3NhZ2UpOworKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycik7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgICBpbnRlcmZhY2UgPSBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnRlbnQsIChnaW50KSBjbGVuLCBkb21haW4pOworKworKyAgICBnX2ZyZWUoY29udGVudCk7CisrCisrICAgIHJldHVybiBpbnRlcmZhY2U7CisrfQorKworKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKyAvKioKKyAgKiBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyCisgICogQGJ1ZmZlcjogYSBidWZmZXIgaW4gbWVtb3J5IGNvbnRhaW5pbmcgWE1MIGRhdGEuCitAQCAtMTIzNyw2ICsxMzcxLDkgQEAKKyAgKgorICAqIFJldHVybnM6IHRoZSBHbGFkZUludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBYTUwgYnVmZmVyLgorICAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgR2xhZGVJbnRlcmZhY2UgKgorIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisgeworQEAgLTEyNjMsNiArMTQwMCwxNjEgQEAKKyAgICAgcmV0dXJuIHN0YXRlLmludGVyZmFjZTsKKyB9CisgCisrI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrCisrc3RhdGljIEdsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysJR01hcmt1cFBhcnNlQ29udGV4dCAgKmNvbnRleHQ7CisrCUdsYWRlUGFyc2VTdGF0ZSAgICAgICBzdGF0ZSA9IHsgMCB9OworKwlHRXJyb3IgICAgICAgICAgICAgICAqZXJyICAgPSBOVUxMOworKworKwlzdGF0ZS5pbnRlcmZhY2UgPSBOVUxMOworKwlpZiAoZG9tYWluKQorKwkJc3RhdGUuZG9tYWluID0gZG9tYWluOworKwllbHNlCisrCQlzdGF0ZS5kb21haW4gPSB0ZXh0ZG9tYWluKE5VTEwpOworKworKwkvKiBGSVhNRTogVGhpcyBzdHJzdHIoKSBpcyBub3Qgc2FmZSwgYXMgaXQgaWdub3JlcyB0aGUgbGVuCisrCSAqICAgICAgICBhcmd1bWVudCBhbmQgYXNzdW1lcyB0aGUgYnVmZmVyIGlzIE5VTC10ZXJtaW5hdGVkICovCisrCWlmIChzdHJzdHIoYnVmZmVyLCAiPD94bWwiKSA9PSBOVUxMKSB7CisrCQlnX3dhcm5pbmcoIk5vIFhNTCBoZWFkZXIgZm91bmQgaW4gZG9jdW1lbnQhIik7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwljb250ZXh0ID0gZ19tYXJrdXBfcGFyc2VfY29udGV4dF9uZXcoJmdsYWRlX3BhcnNlciwgKEdNYXJrdXBQYXJzZUZsYWdzKSAwLCAmc3RhdGUsIE5VTEwpOworKworKwlnbGFkZV9wYXJzZXJfc3RhcnRfZG9jdW1lbnQoJnN0YXRlKTsKKysKKysJaWYgKCFnX21hcmt1cF9wYXJzZV9jb250ZXh0X3BhcnNlKGNvbnRleHQsIGJ1ZmZlciwgKGdzc2l6ZSkgbGVuLCAmZXJyKSkgeworKwkJZ193YXJuaW5nKCJkb2N1bWVudCBub3Qgd2VsbCBmb3JtZWQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKysJCWdfZXJyb3JfZnJlZShlcnIpOworKwkJaWYgKHN0YXRlLmludGVyZmFjZSkKKysJCQlnbGFkZV9pbnRlcmZhY2VfZGVzdHJveSAoc3RhdGUuaW50ZXJmYWNlKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWdsYWRlX3BhcnNlcl9lbmRfZG9jdW1lbnQoJnN0YXRlKTsKKysKKysJaWYgKHN0YXRlLnN0YXRlICE9IFBBUlNFUl9GSU5JU0gpIHsKKysJCWdfd2FybmluZygiZGlkIG5vdCBmaW5pc2ggaW4gUEFSU0VSX0ZJTklTSCBzdGF0ZSEiKTsKKysKKysJCWlmIChzdGF0ZS5pbnRlcmZhY2UpCisrCQkJZ2xhZGVfaW50ZXJmYWNlX2Rlc3Ryb3koc3RhdGUuaW50ZXJmYWNlKTsKKysKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCXJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisrfQorKworK3N0cnVjdCBfZ3ppcF9yZmMxOTUyX2hkcgorK3sKKysJZ3VpbnQ4CWlkMSwgaWQyLCBjbSwgZmxhZ3M7CisrCWd1aW50MzIgbXRpbWU7CisrCWd1aW50OCAgeGZsYWdzOworKwlndWludDggIG9zOworK307CisrCisrc3RhdGljIEdsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfZ3ppcHBlZF9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKwlzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIgKmhkciA9IChzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIqKWJ1ZmZlcjsKKysJc3RydWN0IHpfc3RyZWFtX3MgICAgICAgICB6c3RyZWFtOworKwlHbGFkZUludGVyZmFjZSAgICAgICAgICAgKmludGVyZmFjZTsKKysJY29uc3QgZ3VpbnQ4ICAgICAgICAgICAgICpjYnVmOyAgICAgICAgICAgICAgLyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhICovCisrCWd1aW50OCAgICAgICAgICAgICAgICAgICAqZGVjb21wcmVzc19idWY7CisrCWd1bG9uZyAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc19sZW4gPSAwOworKwlnaW50ICAgICAgICAgICAgICAgICAgICAgIHJldDsKKysKKysJZ19hc3NlcnQoaGRyICE9IE5VTEwgJiYgaGRyLT5pZDEgPT0gMHgxZiAmJiBoZHItPmlkMiA9PSAweDhiKTsKKysKKysJaWYgKGhkci0+Y20gIT0gWl9ERUZMQVRFRCkgeworKwkJZ193YXJuaW5nKCJVbmtub3duIGRlY29tcHJlc3Npb24gbWV0aG9kICV1IiwgKGd1aW50KSBoZHItPmNtKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCS8qIFVuY29tcHJlc3NlZCBzaXplIChtb2R1bG8gMl4zMikgaXMgbGFzdAorKwkgKiAgNCBieXRlcyBvZiBnemlwcGVkIGZpbGUsIGFuZCBsaXR0bGUgZW5kaWFuLgorKwkgKiAgU2VlIFJGQyAxOTUyICovCisrCWRlY29tcHJlc3NfbGVuID0gR1VJTlQzMl9GUk9NX0xFKCooKGd1aW50MzIqKSgoKGd1aW50OCopYnVmZmVyKSArIGxlbiAtIDQpKSk7CisrCisrCS8qIHBhcmFub2lkIG1vZGU6IGdsYWRlIGZpbGVzID4gNU1CIGFyZSB1bmxpa2VseSAqLworKwlnX3JldHVybl92YWxfaWZfZmFpbChkZWNvbXByZXNzX2xlbiA8IDUqMTAyNCoxMDI0LCBOVUxMKTsKKysKKysJZGVjb21wcmVzc19idWYgPSBnX21hbGxvYzAoZGVjb21wcmVzc19sZW4gKyAxKTsgLyogKzEgZm9yIE5VTC10ZXJtaW5hdG9yICovCisrCisrCS8qIGZpbmQgc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhLCBza2lwcGluZyBoZWFkZXIgc3R1ZmYgKi8KKysJY2J1ZiA9IChndWludDgqKWJ1ZmZlciArIDEwOworKwlpZiAoaGRyLT5mbGFncyAmIDB4MDQpIHsKKysJCWd1aW50MTYgeGxlbiA9IEdVSU5UMTZfRlJPTV9MRSgqKChndWludDE2KiljYnVmKSk7CisrCQljYnVmICs9IHhsZW4gKyAyOworKwl9CisrCWlmIChoZHItPmZsYWdzICYgMHgwOCkgeworKwkJZ3VpbnQxNiBvbmFtZWxlbiA9IHN0cmxlbihjYnVmKTsKKysJCWNidWYgKz0gb25hbWVsZW4gKyAxOworKwl9CisrCWlmIChoZHItPmZsYWdzICYgMHgxMCkgeworKwkJZ3VpbnQxNiBjb21tZW50bGVuID0gc3RybGVuKGNidWYpOworKwkJY2J1ZiArPSBjb21tZW50bGVuICsgMTsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MDIpCisrCXsKKysJCWNidWYgKz0gMjsgLyogc2tpcCBoZWFkZXIgQ1JDMTYgKi8KKysJfQorKworKwl6c3RyZWFtLm5leHRfaW4gID0gKHZvaWQqKWNidWY7CisrCXpzdHJlYW0uYXZhaWxfaW4gPSAodUxvbmdmKSBsZW4gLSAoKHZvaWQqKWNidWYtKHZvaWQqKWJ1ZmZlcikgLSA0IC0gNCArMTsgCisrCXpzdHJlYW0ubmV4dF9vdXQgPSBkZWNvbXByZXNzX2J1ZjsKKysJenN0cmVhbS5hdmFpbF9vdXQ9IGRlY29tcHJlc3NfbGVuOworKwl6c3RyZWFtLnphbGxvYyAgID0gWl9OVUxMOworKwl6c3RyZWFtLnpmcmVlICAgID0gWl9OVUxMOworKwl6c3RyZWFtLm9wYXF1ZSAgID0gWl9OVUxMOworKworKwlyZXQgPSBpbmZsYXRlSW5pdDIoJnpzdHJlYW0sIC1NQVhfV0JJVFMpOworKworKwlpZiAocmV0ICE9IFpfT0spIHsKKysJCWdfd2FybmluZygiaW5mbGF0ZUluaXQyKCkgZmFpbGVkLiB6bGliIGVycm9yIGNvZGU6ICVkIiwgcmV0KTsKKysJCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlyZXQgPSBpbmZsYXRlKCZ6c3RyZWFtLCBaX0ZJTklTSCk7CisrCisrCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisrCQlnX3dhcm5pbmcoInpsaWIgZGVjb21wcmVzc2lvbiBmYWlsZWQuIHpsaWIgZXJyb3IgY29kZTogJWQiLCByZXQpOworKwkJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWludGVyZmFjZSA9IGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoZGVjb21wcmVzc19idWYsIGRlY29tcHJlc3NfbGVuLCBkb21haW4pOworKworKwlnX2ZyZWUoZGVjb21wcmVzc19idWYpOworKworKwlyZXR1cm4gaW50ZXJmYWNlOworK30KKysKKytHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGJ1ZmZlciAhPSBOVUxMLCBOVUxMKTsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuID4gMCwgTlVMTCk7CisrCisrCS8qIENoZWNrIGlmIGJ1ZmZlciBpcyBnemlwcGVkICovCisrCWlmIChidWZmZXJbMF0gPT0gMHgxZiAmJiBidWZmZXJbMV0gPT0gKGdjaGFyKTB4OGIpIHsKKysJCXJldHVybiBnbGFkZV9wYXJzZXJfcGFyc2VfZ3ppcHBlZF9idWZmZXIoYnVmZmVyLCBsZW4sIGRvbWFpbik7CisrCX0KKysKKysJLyogQnVmZmVyIGlzIGNsZWFydGV4dC4gKi8KKysJcmV0dXJuIGdsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXJfaW50ZXJuYWwoYnVmZmVyLCBsZW4sIGRvbWFpbik7CisrfQorKworKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZHVtcF93aWRnZXQoeG1sTm9kZSAqcGFyZW50LCBHbGFkZVdpZGdldEluZm8gKmluZm8sIGdpbnQgaW5kZW50KQorIHsKK0BAIC0xMzgyLDYgKzE2NzQsOCBAQAorIAl4bWxOb2RlQWRkQ29udGVudCh3aWRnZXQsICIgICIpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworIC8qKgorICAqIGdsYWRlX2ludGVyZmFjZV9kdW1wCisgICogQGludGVyZmFjZTogdGhlIEdsYWRlSW50ZXJmYWNlCitAQCAtMTM5MCw2ICsxNjg0LDkgQEAKKyAgKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRoZSBjb250ZW50cyBvZiBhIEdsYWRlSW50ZXJmYWNlIGludG8gYSBmaWxlIGFzCisgICogWE1MLiAgSXQgaXMgaW50ZW5kZWQgbWFpbmx5IGFzIGEgZGVidWdnaW5nIHRvb2wuCisgICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyB2b2lkCisgZ2xhZGVfaW50ZXJmYWNlX2R1bXAoR2xhZGVJbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKQorIHsKK0BAIC0xNDI4LDYgKzE3MjUsMTcgQEAKKyAgICAgeG1sRnJlZURvYyhkb2MpOworIH0KKyAKKysjZWxzZSAvKiBkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKyt2b2lkCisrZ2xhZGVfaW50ZXJmYWNlX2R1bXAoR2xhZGVJbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3QgZ2NoYXIgKmZpbGVuYW1lKQorK3sKKysgICAgZ193YXJuaW5nKCJnbGFkZV9pbnRlcmZhY2VfZHVtcCgpIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggbGlieG1sMi4iKTsKKyt9CisrCisrI2VuZGlmIC8qIFVTRV9HTUFSS1VQX1BBUlNFUiAqLworKworKworICNpZiAwCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKK2RpZmYgLXVyTiBsaWJnbGFkZS0yLjQuMi5vcmlnL2xpYmdsYWRlLTIuMC5wYy5pbiBsaWJnbGFkZS0yLjQuMi9saWJnbGFkZS0yLjAucGMuaW4KKy0tLSBsaWJnbGFkZS0yLjQuMi5vcmlnL2xpYmdsYWRlLTIuMC5wYy5pbgkyMDAxLTEyLTEyIDE1OjI4OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmdsYWRlLTIuNC4yL2xpYmdsYWRlLTIuMC5wYy5pbgkyMDA1LTAzLTIyIDAxOjIwOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTExLDcgKzExLDcgQEAKKyBOYW1lOiBMaWJnbGFkZQorIERlc2NyaXB0aW9uOiBhIGxpYnJhcnkgZm9yIGR5bmFtaWNhbGx5IGxvYWRpbmcgR0xBREUgaW50ZXJmYWNlIGZpbGVzCisgVmVyc2lvbjogQFZFUlNJT05ACistUmVxdWlyZXM6IGd0aystMi4wIGxpYnhtbC0yLjAKKytSZXF1aXJlczogZ3RrKy0yLjAgQFBLR0NGR19SRVFVSVJFX0xJQlhNTDJACisgTGliczogLUwke2xpYmRpcn0gLWxnbGFkZS0yLjAKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9saWJnbGFkZS0yLjAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9weXRob25fZW52aXJvbm1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjJlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1VzaW5nIEBQWVRIT05AIGZvciB0aGlzIHBhdGggd291bGQgcmVzdWx0IGluIHRoZSBidWlsZCBzeXN0ZW0gcHl0aG9uIGJlaW5nIAorcmVmZXJyZWQgdG8uIEluc3RlYWQgd2Ugd2FudCB0byBsb2NhdGUgcHl0aG9uIGZyb20gdGhlIGVudmlyb25tZW50LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBsaWJnbGFkZS0yLjYuNC1vcmlnLy9saWJnbGFkZS1jb252ZXJ0LmluIGxpYmdsYWRlLTIuNi40L2xpYmdsYWRlLWNvbnZlcnQuaW4KKy0tLSBsaWJnbGFkZS0yLjYuNC1vcmlnLy9saWJnbGFkZS1jb252ZXJ0LmluCTIwMTEtMDktMjIgMTA6MTg6MjguOTkxMTY0MDAzICswODAwCisrKysgbGliZ2xhZGUtMi42LjQvbGliZ2xhZGUtY29udmVydC5pbgkyMDExLTA5LTIyIDEwOjE4OjU1LjQzMTE2NDAwMyArMDgwMAorQEAgLTEsNCArMSw0IEBACistIyFAUFlUSE9OQAorKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorICMgLSotIG1vZGU6IHB5dGhvbiAtKi0KKyAKKyAjIHllcywgdGhpcyByZXF1aXJlcyBweXRob24gMi54IGFuZCBhbiBYTUwgcGFyc2VyIG1vZHVsZSAoZWcuIFB5RXhwYXQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyNjdjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZV8yLjYuNC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlJ1bnRpbWUgc3VwcG9ydCBmb3IgdGhlIEdUSysgaW50ZXJmYWNlIGJ1aWxkZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvbGliZ2xhZGUvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU1Y2E4MTdjY2I3ZDViNWI2NjM1NTY5MGU5YWJjNjA1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsYWRlL2dsYWRlLmg7ZW5kbGluZT0yMjttZDU9YTA0ZjQ2MWM5NjRiYTRiNTdhMTcyZDFmYmNkOGY4ZmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xhZGUvZ2xhZGUtZ3RrLmM7ZW5kbGluZT0yMjttZDU9NzY2Zjk5MzQzM2UyNjQyZmVjODc5MzZkMzE5OTkwZmYiCisKK1NFQ1RJT04gPSAibGlicyIKK1BSID0gInI1IgorREVQRU5EUyA9ICJ6bGliIGdkay1waXhidWYgZ3RrKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9nbGFkZS1jcnVmdC5wYXRjaCBmaWxlOi8vbm8teG1sMi5wYXRjaCBmaWxlOi8vcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJkMTc3NmI0MGY0ZTE2NmI1ZTljMTA3ZjFjOGZlNDEzOSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjY0MzYxZTc2NDc4MzlkMzZlZDgzMzZkOTkyZmQyMTBkM2U4MTM5ODgyMjY5YmVkNDdkYzQ2NzQ5ODAxNjVkZWMiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnhtbDIiCisKK0NGTEFHUyArPSAiLWx6IgorCitQQUNLQUdFUyArPSAiICR7UE59LWRhdGEiCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorRklMRVNfJHtQTn0tZGF0YSA9ICIke2RhdGFkaXJ9L3htbC9saWJnbGFkZS9nbGFkZS0yLjAuZHRkIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vbGliZ2xhZGUtY29udmVydCIKKyNSREVQRU5EU18ke1BOfSA9ICIke1BOfS1kYXRhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYm5vdGlmeS9saWJub3RpZnlfMC43LjYuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlibm90aWZ5L2xpYm5vdGlmeV8wLjcuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWQxODhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYm5vdGlmeS9saWJub3RpZnlfMC43LjYuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBzZW5kaW5nIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhIG5vdGlmaWNhdGlvbiBkYWVtb24iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK0RFUEVORFMgPSAiZGJ1cyBndGsrMyBkYnVzLWdsaWIiCisKK2luaGVyaXQgZ25vbWViYXNlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYTQ5OTcwMTlkMDhmNDZmM2JmNTdiNzhlNmY3OTVhNTkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwZWY2MWNhNDAwZDMwZTI4MjE3OTc5YmZhMGU3M2E3NDA2YjE5YzMyZGQ3NjE1MDY1NGVjNWIyYmRmNDdkODM3IgorCisjIHRoZXJlIHdlcmUgdGltZXMsIHdlIGhhZCB0d28gdmVyc2lvbnMgb2YgbGlibm90aWZ5IChvZS1jb3JlIGxpYm5vdGlmeTowLjYueCAvCisjIG1ldGEtZ25vbWUgbGlibm90aWZ5MzogMC43LngpCitQUk9WSURFUyArPSAibGlibm90aWZ5MyIKK1JQUk9WSURFU18ke1BOfSArPSAibGlibm90aWZ5MyIKK1JDT05GTElDVFNfJHtQTn0gKz0gImxpYm5vdGlmeTMiCitSUkVQTEFDRVNfJHtQTn0gKz0gImxpYm5vdGlmeTMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhZjQ4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmcvZ3RrLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIDFjMzhkNTcwYjMzZjJiMDM2ZDRmYTQ3ZTkyOWJiMmIzMjY0ZTM4YmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxMSBBdWcgMjAxNSAxNjoyNTozOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IGFkZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgdXNlIG9mIEdUSysKKworRGlzdHJvIHBhY2thZ2VycyBsaWtlIHByZWRpY3RhYmlsaXR5IGFuZCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIG9wdGlvbmFsCitkZXBlbmRlbmNpZXMgYXJlIG5vdCBwcmVkaWNhYmxlLiAgQWRkIGEgLS13aXRoLWd0azMgb3B0aW9uIChkZWZhdWx0IHRvICJhdXRvIikKK2ZvciBmb3JjaWJseSBjb250cm9sbGluZyB3aGV0aGVyIEdUSysgd2lsbCBiZSB1c2VkIG9yIG5vdC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI2OTNdCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0ZvcndhcmQtcG9ydGVkIHRvIDIuNDAuMTAKKworU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE3ICsrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJmNzdmM2EuLmNhNzdkZTggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEyOCwxNyArMTI4LDIyIEBAIEFDX0NIRUNLX0ZVTkNTKHN0cnRva19yKQorICMgR1RLCisgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbR1RLM10sW2d0aystMy4wID49ICRHVEszX1JFUVVJUkVEXSxbaGF2ZV9ndGtfMz15ZXNdLFtoYXZlX2d0a18zPW5vXSkKKy0KKyBHVEszX0JJTkFSWV9WRVJTSU9OPQorIAorLWlmIHRlc3QgIiRoYXZlX2d0a18zIiA9ICJ5ZXMiOyB0aGVuCistICAgIEdUSzNfQklOQVJZX1ZFUlNJT049ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWd0a19iaW5hcnlfdmVyc2lvbiBndGsrLTMuMGAiCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBHVEsrIDNdKQorK0FDX0FSR19XSVRIKFtndGszXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWd0azNdLFtEb24ndCBidWlsZCBHVEsrMyB0b29scyAoZGVmYXVsdD1hdXRvKV0pXSwKKysgIFtdLFtQS0dfQ0hFQ0tfRVhJU1RTKFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0sW3dpdGhfZ3RrMz15ZXNdLFt3aXRoX2d0azM9bm9dKV0pCisrQUNfTVNHX1JFU1VMVChbJHdpdGhfZ3RrM10pCisrCisraWYgdGVzdCAiJHdpdGhfZ3RrMyIgPSAieWVzIjsgdGhlbgorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1RLMywgW2d0aystMy4wID49ICRHVEszX1JFUVVJUkVEXSkKKysgIEdUSzNfQklOQVJZX1ZFUlNJT049ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWd0a19iaW5hcnlfdmVyc2lvbiBndGsrLTMuMGAiCisgZmkKKyAKKyBBQ19TVUJTVChbR1RLM19CSU5BUllfVkVSU0lPTl0pCisgCistQU1fQ09ORElUSU9OQUwoW0hBVkVfR1RLXzNdLFt0ZXN0ICIkaGF2ZV9ndGtfMyIgPSAieWVzIl0pCisrQU1fQ09ORElUSU9OQUwoW0hBVkVfR1RLXzNdLFt0ZXN0ICIkd2l0aF9ndGszIiA9ICJ5ZXMiXSkKKyAKKyBkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgZG5sIEdESy1QaXhidWYgU1ZHIGxvYWRlcgorQEAgLTI4OSw2ICsyOTQsNiBAQCBsaWJyc3ZnLSRWRVJTSU9OCisgCUJ1aWxkIGludHJvc3BlY3RhYmxlIGJpbmRpbmdzOiAgJHtmb3VuZF9pbnRyb3NwZWN0aW9ufQorIAlCdWlsZCBWYWxhIGJpbmRpbmdzOiAgICAgICAgICAgICR7ZW5hYmxlX3ZhbGF9CisgCUJ1aWxkIEdka1BpeGJ1ZiBsb2FkZXI6ICAgICAgICAgJHtlbmFibGVfcGl4YnVmX2xvYWRlcn0KKy0gICAgICAgIEdUSysgJEdUSzNfUkVRVUlSRUQgb3IgbGF0ZXI6ICAgICAgICAgICAke2hhdmVfZ3RrXzN9CisrICAgICAgICBHVEsrICRHVEszX1JFUVVJUkVEIG9yIGxhdGVyOiAgICAgICAgICAgJHt3aXRoX2d0a18zfQorIAlCdWlsZCBtaXNjZWxsYWVub3VzIHRvb2xzOiAgICAgICR7YnVpbGRfbWlzY190b29sc30KKyAiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIwZTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Z18yLjQwLjEwLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgcmVuZGVyaW5nIFNWRyBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2xpYnJzdmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JzdmcuaDtiZWdpbmxpbmU9MztlbmRsaW5lPTI0O21kNT0yMGI0MTEzYzQ5MDliYmYwZDY3ZTAwNjc3ODMwMmJjNiIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitERVBFTkRTID0gImNhaXJvIGdkay1waXhidWYgZ2xpYi0yLjAgbGliY3JvY28gbGlieG1sMiBwYW5nbyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ25vbWViYXNlIGd0ay1kb2MgcGl4YnVmY2FjaGUKKworU1JDX1VSSSArPSAiZmlsZTovL2d0ay1vcHRpb24ucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImZhZGViZTJlNzk5YWIxNTkxNjllZTMxOTg0MTVmZjg1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiOTY1YzgwNzQzOGNlOTBiMjA0ZTkzMGZmODBjOTJlYmExNjA2YTJmNmZkNWNjZmQwOTMzNWM5OTg5NmRkMzQ3OSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS12YWxhIgorCisjIFRoZSBvbGRlciBsZCAoMi4yMikgb24gdGhlIGhvc3QgKENlbnRvcyA2LjUpIGRvZXNuJ3QgaGF2ZSB0aGUKKyMgLUJzeW1ib2xpYy1mdW5jdGlvbnMgb3B0aW9uLCB3ZSBjYW4gZGlzYWJsZSBpdCBmb3IgbmF0aXZlLgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLUJzeW1ib2xpYz1hdXRvIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ2RrcGl4YnVmIgorIyBUaGUgZ2RrLXBpeGJ1ZiBsb2FkZXIKK1BBQ0tBR0VDT05GSUdbZ2RrcGl4YnVmXSA9ICItLWVuYWJsZS1waXhidWYtbG9hZGVyLC0tZGlzYWJsZS1waXhidWYtbG9hZGVyLGdkay1waXhidWYtbmF0aXZlIgorIyBHVEsrIHRlc3QgYXBwbGljYXRpb24gKHJzdmctdmlldykKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrMywtLXdpdGhvdXQtZ3RrMyxndGsrMyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBMb2FkYWJsZSBtb2R1bGVzIGRvbid0IG5lZWQgLmEgb3IgLmxhIG9uIExpbnV4CisJcm0gLWYgJHtEfSR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qL2xvYWRlcnMvKi5hICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyoubGEKK30KKworUEFDS0FHRVMgPSsgImxpYnJzdmctZ3RrIHJzdmciCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zby4qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLy5kZWJ1ZyIKK0ZJTEVTX3JzdmcgPSAiJHtiaW5kaXJ9L3JzdmcqIFwKKwkgICAgICAke2RhdGFkaXJ9L3BpeG1hcHMvc3ZnLXZpZXdlci5zdmcgXAorCSAgICAgICR7ZGF0YWRpcn0vdGhlbWVzIgorRklMRVNfbGlicnN2Zy1ndGsgPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovKi8qLnNvIgorCitQSVhCVUZfUEFDS0FHRVMgPSAibGlicnN2Zy1ndGsiCisKK1BJWEJVRkNBQ0hFX1NZU1JPT1RfREVQU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBoYXJmYnV6ei1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBwYW5nby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBpY3UtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViYzgzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJzZWNyZXQvbGlic2VjcmV0XzAuMTguMi5iYgpAQCAtMCwwICsxLDEyIEBACitTVU1NQVJZID0gImxpYnNlY3JldCBpcyBhIGxpYnJhcnkgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgcGFzc3dvcmRzIGFuZCBvdGhlciBzZWNyZXRzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIzYzJhNWUwMTA2Yjk5ZDc1MjM4OTg2NTU5YmI1ZmM2IgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGliZ2NyeXB0IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1tYW5wYWdlcyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjNjZGY4MjY3ZDExYTI2Zjg4ZjBkYmVjMWUyMDIyYWQiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxMmZkMjg4YjAxMmUxYjJiMWI1NGQ1ODZjZDRjNjUwNzg4NTcxNTUzNDY0NGI0NTM0YjdlZjdkNzA3OWJhNDQzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjUxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlid25jay9saWJ3bmNrM18zLjE0LjAuYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJXaW5kb3cgbmF2aWdhdGlvbiBjb25zdHJ1Y3Rpb24gdG9vbGtpdCIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIiCisKK0JQTiA9ICJsaWJ3bmNrIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiBndGsrMyBnZGstcGl4YnVmLW5hdGl2ZSBsaWJ4cmVzIgorCitQQUNLQUdFQ09ORklHID8/PSAic3RhcnR1cC1ub3RpZmljYXRpb24iCitQQUNLQUdFQ09ORklHW3N0YXJ0dXAtbm90aWZpY2F0aW9uXSA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiwtLWRpc2FibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sc3RhcnR1cC1ub3RpZmljYXRpb24iCisKK2luaGVyaXQgZ25vbWViYXNlCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI0NTM4NjcyZTBkNzc1ZmFkZWRmMTBhYmViODAyMDA0NyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImY1MDgwMDc2MzQ2NjA5YjRjMzYzOTRiODc5ZjNhODZiOTJjZWQzYjkwYTM3Y2I1NGM4ZTlhMTRmMDBlNzkyMWMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9idWlsZGVyXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2J1aWxkZXJfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzI5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9idWlsZGVyXzAuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIk5ldyB1c2VyIHRvIGRvIHNwZWNpZmljIGpvYiIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcmVjaXBlIGNyZWF0ZSBhIG5ldyB1c2VyIG5hbWVkICR7UE59LCB3aG8gaXMgdXNlZCBmb3Igc3BlY2lmaWMgam9icyBsaWtlIGJ1aWxkaW5nLiBUaGUgdGFzayBjYW4gYmUgYXV0byBzdGFydGVkIHZpYSBtaW5pIFgiCitTRUNUSU9OID0gIngxMSIKK1BSID0gInI2IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9idWlsZGVyX2hvYl9zdGFydC5zaDtlbmRsaW5lPTU7bWQ1PTg0Nzk2YzNjNDE3ODVkODYxMDBmZGFiY2JkYWRlMDBlIgorCitTUkNfVVJJID0gImZpbGU6Ly9idWlsZGVyX2hvYl9zdGFydC5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9wbGVhc2Vfd2FpdF9kaWFsb2cucHkgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJtaW5pLXgtc2Vzc2lvbiIKKworaW5oZXJpdCB1c2VyYWRkCisKKyMgYnVpbGRlciB1c2VyIHBhc3N3b3JkIGlzICJidWlsZGVyIgorQlVJTERFUl9QQVNTV09SRCA/PSAiLmdMaWJpTlhuMFAxMiIKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWdyb3VwcyB2aWRlbyx0dHksYXVkaW8gXAorICAgICAgICAgICAgICAgICAgICAgICAtLXBhc3N3b3JkICR7QlVJTERFUl9QQVNTV09SRH0gXAorICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgYnVpbGRlciIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAtbSA3NTUgJHtEfSR7c3lzY29uZmRpcn0vbWluaV94L3Nlc3Npb24uZAorCWluc3RhbGwgLXAgLW0gNzU1IGJ1aWxkZXJfaG9iX3N0YXJ0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L21pbmlfeC9zZXNzaW9uLmQvCisKKwljaG93biAgYnVpbGRlci5idWlsZGVyICR7RH0ke3N5c2NvbmZkaXJ9L21pbmlfeC9zZXNzaW9uLmQvYnVpbGRlcl9ob2Jfc3RhcnQuc2gKKyAgICAgICAgaW5zdGFsbCAtcCAtbSA3NTUgcGxlYXNlX3dhaXRfZGlhbG9nLnB5ICR7RH0ke3N5c2NvbmZkaXJ9L21pbmlfeAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX2hvYl9zdGFydC5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTRiMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX2hvYl9zdGFydC5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKyNUaGlzIHNjcmlwdCB3aWxsIGJlIGNhbGxlZCB2aWEgbWluaSBYIHNlc3Npb24gb24gYmVoYWxmIG9mIGZpbGUgb3duZXIsIGFmdGVyCisjaW5zdGFsbGVkIGluIC9ldGMvbWluaV94L3Nlc3Npb24uZC8uIEFueSBhdXRvIHN0YXJ0IGpvYnMgaW5jbHVkaW5nIFggYXBwcyBjYW4KKyNiZSBwdXQgaGVyZQorCisjIHN0YXJ0IGhvYiBoZXJlCitleHBvcnQgUFNFVURPX1BSRUZJWD0vdXNyCitleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVI9L2hvbWUvYnVpbGRlci9wc2V1ZG8KK2V4cG9ydCBQU0VVRE9fTElCRElSPS91c3IvbGliL3BzZXVkby9saWI2NAorZXhwb3J0IEdJVF9QUk9YWV9DT01NQU5EPS9ob21lL2J1aWxkZXIvcG9reS9zY3JpcHRzL29lLWdpdC1wcm94eQorCisjc3RhcnQgcGNtYW5mbSBpbiBkYWVtb24gbW9kZSB0byBhbGxvdyBhc3luY2hyb25vdXMgbGF1bmNoCitwY21hbmZtIC1kJgorCisjcmVnaXN0ZXIgaGFuZGxlcnMgZm9yIHNvbWUgZmlsZSB0eXBlcworaWYgWyAhIC1kIC9ob21lL2J1aWxkZXIvLmxvY2FsL3NoYXJlL2FwcGxpY2F0aW9ucyBdOyB0aGVuCisgICAgbWtkaXIgLXAgL2hvbWUvYnVpbGRlci8ubG9jYWwvc2hhcmUvYXBwbGljYXRpb25zLworICAgICNyZWdpc3RlciBmb2xkZXJzIHRvIG9wZW4gd2l0aCBQQ01hbkZNIGZpbGVtYW5hZ2VyCisgICAgeGRnLW1pbWUgZGVmYXVsdCBwY21hbmZtLmRlc2t0b3AgaW5vZGUvZGlyZWN0b3J5CisKKyAgICAjcmVnaXN0ZXIgaHRtbCBsaW5rcyBhbmQgZmlsZXMgd2l0aCBlcGlwaGFueQorICAgIHhkZy1taW1lIGRlZmF1bHQgZXBpcGhhbnkuZGVza3RvcCB4LXNjaGVtZS1oYW5kbGVyL2h0dHAKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgeC1zY2hlbWUtaGFuZGxlci9odHRwcworICAgIHhkZy1taW1lIGRlZmF1bHQgZXBpcGhhbnkuZGVza3RvcCB0ZXh0L2h0bWwKKworICAgICNyZWdpc3RlciB0ZXh0IGZpbGVzIHdpdGggbGVhZnBhZCB0ZXh0IGVkaXRvcgorICAgIHhkZy1taW1lIGRlZmF1bHQgbGVhZnBhZC5kZXNrdG9wIHRleHQvcGxhaW4KK2ZpCisKK2NkIC9ob21lL2J1aWxkZXIvcG9reQorLiAuL29lLWluaXQtYnVpbGQtZW52CisKK2hvYiAmCisKK21hdGNoYm94LXRlcm1pbmFsJgorCisvZXRjL21pbmlfeC9wbGVhc2Vfd2FpdF9kaWFsb2cucHkgJgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjM4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9wbGVhc2Vfd2FpdF9kaWFsb2cucHkKQEAgLTAsMCArMSwyOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgZ2xpYgoraW1wb3J0IGd0aworIAorZGVmIGRlc3Ryb3lfd2luZG93X2NiKHdpZGdldCwgZXZlbnQpOgorICAgIGd0ay5tYWluX3F1aXQoKQorIAorZGVmIGFsbF9kb25lX2NiKCk6CisgICAgZ3RrLm1haW5fcXVpdCgpCisgCitkZWYgZGlhbG9ndWVfdWkoKToKKyAgICB3aW5kb3cgPSBndGsuV2luZG93KCkKKyAgICB3aW5kb3cuc2V0X3RpdGxlKCJQbGVhc2Ugd2FpdC4uLiIpCisgICAgd2luZG93LmNvbm5lY3QoImRlbGV0ZS1ldmVudCIsIGRlc3Ryb3lfd2luZG93X2NiKQorICAgIHdpbmRvdy5zaG93KCkKKyAgICB3aW5kb3cuc2V0X2JvcmRlcl93aWR0aCgxMikKKyAKKyAgICBtc2cgPSAiUGxlYXNlIHdhaXQgd2hpbGUgQml0QmFrZSBpbml0aWFsaXplcyBIb2IiCisgICAgbGFiZWwgPSBndGsuTGFiZWwobXNnKQorICAgIGxhYmVsLnNob3coKQorICAgIHdpbmRvdy5hZGQobGFiZWwpCisgCisgICAgZ2xpYi50aW1lb3V0X2FkZF9zZWNvbmRzKDEwLCBhbGxfZG9uZV9jYikKKyAKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZGlhbG9ndWVfdWkoKQorICAgIGd0ay5tYWluKCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLWZwdS5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8tZnB1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjcyZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLWZwdS5pbmMKQEAgLTAsMCArMSw2IEBACisKK2RlZiBnZXRfY2Fpcm9fZnB1X3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcgXToKKyAgICAgICAgcmV0dXJuICItLWRpc2FibGUtc29tZS1mbG9hdGluZy1wb2ludCIKKyAgICByZXR1cm4gIiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0NTMxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJUaGUgQ2Fpcm8gMkQgdmVjdG9yIGdyYXBoaWNzIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJDYWlybyBpcyBhIG11bHRpLXBsYXRmb3JtIGxpYnJhcnkgcHJvdmlkaW5nIGFudGktYWxpYXNlZCBcCit2ZWN0b3ItYmFzZWQgcmVuZGVyaW5nIGZvciBtdWx0aXBsZSB0YXJnZXQgYmFja2VuZHMuIFBhdGhzIGNvbnNpc3QgXAorb2YgbGluZSBzZWdtZW50cyBhbmQgY3ViaWMgc3BsaW5lcyBhbmQgY2FuIGJlIHJlbmRlcmVkIGF0IGFueSB3aWR0aCBcCit3aXRoIHZhcmlvdXMgam9pbiBhbmQgY2FwIHN0eWxlcy4gQWxsIGNvbG9ycyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggXAorb3B0aW9uYWwgdHJhbnNsdWNlbmNlIChvcGFjaXR5L2FscGhhKSBhbmQgY29tYmluZWQgdXNpbmcgdGhlIFwKK2V4dGVuZGVkIFBvcnRlci9EdWZmIGNvbXBvc2l0aW5nIGFsZ2VicmEgYXMgZm91bmQgaW4gdGhlIFggUmVuZGVyIFwKK0V4dGVuc2lvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTVBMLTEgJiBMR1BMdjIuMSAmIEdQTHYzKyIKK0xJQ0VOU0VfJHtQTn0gPSAiTVBMLTEgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LWdvYmplY3QgPSAiTVBMLTEgJiBMR1BMdjIuMSIKK0xJQ0VOU0VfJHtQTn0tcGVyZi11dGlscyA9ICJHUEx2MysiCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnNtIGxpYnhyZW5kZXIgbGlieGV4dCIKK0RFUEVORFMgPSAibGlicG5nIGZvbnRjb25maWcgcGl4bWFuIGdsaWItMi4wIHpsaWIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEgeGNiJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXg9eWVzIC1lbmFibGUteGxpYiwtLXdpdGgteD1ubyAtLWRpc2FibGUteGxpYiwke1gxMURFUEVORFN9IgorUEFDS0FHRUNPTkZJR1t4Y2JdID0gIi0tZW5hYmxlLXhjYiwtLWRpc2FibGUteGNiLGxpYnhjYiIKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdID0gIi0tZW5hYmxlLWRpcmVjdGZiPXllcywsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW3ZhbGdyaW5kXSA9ICItLWVuYWJsZS12YWxncmluZD15ZXMsLS1kaXNhYmxlLXZhbGdyaW5kLHZhbGdyaW5kIgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbD15ZXMsLS1kaXNhYmxlLWVnbCx2aXJ0dWFsL2VnbCIKK1BBQ0tBR0VDT05GSUdbZ2xlc3YyXSA9ICItLWVuYWJsZS1nbGVzdjIsLS1kaXNhYmxlLWdsZXN2Mix2aXJ0dWFsL2xpYmdsZXMyIgorCisjY2hlY2sgZm9yIFRBUkdFVF9GUFU9c29mdCBhbmQgaW5mb3JtIGNvbmZpZ3VyZSBvZiB0aGUgcmVzdWx0IHNvIGl0IGNhbiBkaXNhYmxlIHNvbWUgZmxvYXRpbmcgcG9pbnRzIAorcmVxdWlyZSBjYWlyby1mcHUuaW5jCitFWFRSQV9PRUNPTkYgKz0gIiR7QGdldF9jYWlyb19mcHVfc2V0dGluZyhiYiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtdGVlIFwKKyAgICAgICAgICAgICAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIFdlIGRvbid0IGRlcGVuZCBvbiBiaW51dGlscyBzbyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhpcworZXhwb3J0IGFjX2N2X2xpYl9iZmRfYmZkX29wZW5yPSJubyIKKyMgRW5zdXJlIHdlIGRvbid0IGRlcGVuZCBvbiBMWk8KK2V4cG9ydCBhY19jdl9saWJfbHpvMl9sem8yYV9kZWNvbXByZXNzPSJubyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0NGTEFHUyArPSAiLWZmYXQtbHRvLW9iamVjdHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm9fMS4xNC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE3ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYgpAQCAtMCwwICsxLDQzIEBACityZXF1aXJlIGNhaXJvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lNzNlOTk5ZTBjNzJiNWFjOTAxMjQyNGZhMTU3YWQ3NyIKKworU1JDX1VSSSA9ICJodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvcmVsZWFzZXMvY2Fpcm8tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTFjZGZhZjFjNmM5OTVjNGQ0YzU0ZTA3MjE1YjAxMTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzkxOWQ5OTlkZGIxYmJiZWNkNGJiZTY1Mjk5Y2EyYWJkMjA3OWM3ZTEzZDIyNDU3Nzg5NWFmYTcwMDVlY2NlYiIKKworUEFDS0FHRVMgPSsgImNhaXJvLWdvYmplY3QgY2Fpcm8tc2NyaXB0LWludGVycHJldGVyIGNhaXJvLXBlcmYtdXRpbHMiCisKK1NVTU1BUllfJHtQTn0gPSAiVGhlIENhaXJvIDJEIHZlY3RvciBncmFwaGljcyBsaWJyYXJ5IgorREVTQ1JJUFRJT05fJHtQTn0gPSAiQ2Fpcm8gaXMgYSBtdWx0aS1wbGF0Zm9ybSBsaWJyYXJ5IHByb3ZpZGluZyBhbnRpLWFsaWFzZWQgXAordmVjdG9yLWJhc2VkIHJlbmRlcmluZyBmb3IgbXVsdGlwbGUgdGFyZ2V0IGJhY2tlbmRzLiBQYXRocyBjb25zaXN0IFwKK29mIGxpbmUgc2VnbWVudHMgYW5kIGN1YmljIHNwbGluZXMgYW5kIGNhbiBiZSByZW5kZXJlZCBhdCBhbnkgd2lkdGggXAord2l0aCB2YXJpb3VzIGpvaW4gYW5kIGNhcCBzdHlsZXMuIEFsbCBjb2xvcnMgbWF5IGJlIHNwZWNpZmllZCB3aXRoIFwKK29wdGlvbmFsIHRyYW5zbHVjZW5jZSAob3BhY2l0eS9hbHBoYSkgYW5kIGNvbWJpbmVkIHVzaW5nIHRoZSBcCitleHRlbmRlZCBQb3J0ZXIvRHVmZiBjb21wb3NpdGluZyBhbGdlYnJhIGFzIGZvdW5kIGluIHRoZSBYIFJlbmRlciBcCitFeHRlbnNpb24uIgorCitTVU1NQVJZX2NhaXJvLWdvYmplY3QgPSAiVGhlIENhaXJvIGxpYnJhcnkgR09iamVjdCB3cmFwcGVyIGxpYnJhcnkiCitERVNDUklQVElPTl9jYWlyby1nb2JqZWN0ID0gIkEgR09iamVjdCB3cmFwcGVyIGxpYnJhcnkgZm9yIHRoZSBDYWlybyBBUEkuIgorCitTVU1NQVJZX2NhaXJvLXNjcmlwdC1pbnRlcnByZXRlciA9ICJUaGUgQ2Fpcm8gbGlicmFyeSBzY3JpcHQgaW50ZXJwcmV0ZXIiCitERVNDUklQVElPTl9jYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiVGhlIENhaXJvIHNjcmlwdCBpbnRlcnByZXRlciBpbXBsZW1lbnRzIFwKK0NhaXJvU2NyaXB0LiAgQ2Fpcm9TY3JpcHQgaXMgdXNlZCBieSB0cmFjaW5nIHV0aWxpdGllcyB0byBlbmFibGUgdGhlIGFiaWxpdHkgXAordG8gcmVwbGF5IHJlbmRlcmluZy4iCisKK0RFU0NSSVBUSU9OX2NhaXJvLXBlcmYtdXRpbHMgPSAiVGhlIENhaXJvIGxpYnJhcnkgcGVyZm9ybWFuY2UgdXRpbGl0aWVzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliY2Fpcm8uc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2NhaXJvLyouc28iCitGSUxFU18ke1BOfS1nb2JqZWN0ID0gIiR7bGliZGlyfS9saWJjYWlyby1nb2JqZWN0LnNvLioiCitGSUxFU18ke1BOfS1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLXNjcmlwdC1pbnRlcnByZXRlci5zby4qIgorRklMRVNfJHtQTn0tcGVyZi11dGlscyA9ICIke2JpbmRpcn0vY2Fpcm8tdHJhY2UgJHtsaWJkaXJ9L2NhaXJvLyoubGEgJHtsaWJkaXJ9L2NhaXJvL2xpYmNhaXJvLXRyYWNlLnNvLioiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAtcmYgJHtEfSR7YmluZGlyfS9jYWlyby1zcGhpbngKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby9jYWlyby1mZHIqCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vY2Fpcm8tc3BoaW54KgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvLy5kZWJ1Zy9jYWlyby1mZHIqCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vLmRlYnVnL2NhaXJvLXNwaGlueCoKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIxY2VlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAuaW5jCkBAIC0wLDAgKzEsNDggQEAKK1NVTU1BUlkgPSAiR3JhcGhpY3MgbGlicmFyeSBmb3IgY3JlYXRpbmcgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdXNlciBpbnRlcmZhY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbHV0dGVyLXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorCitpbmhlcml0IGNsdXR0ZXIgcHRlc3QtZ25vbWUKKworREVQRU5EUyA9ICJwYW5nbyBnbGliLTIuMCBqc29uLWdsaWIgYXRrIHVkZXYgY29nbC0xLjAiCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtQTn0tZXhhbXBsZXMiCitBVVRPVE9PTFNfQVVYRElSID0gIiR7U30vYnVpbGQiCisKK0VERVBFTkRTX1gxMSA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4aSBsaWJ4Zml4ZXMiCitFREVQRU5EU19HTFggPSAidmlydHVhbC9saWJnbCIKK0VERVBFTkRTX0VHTCA9ICJ2aXJ0dWFsL2VnbCIKK0VERVBFTkRTX1dBWUxBTkQgPSAid2F5bGFuZCBsaWJ4a2Jjb21tb24gZ2RrLXBpeGJ1ZiIKKworRURFUEVORFNfRVZERVYgPSAibGlieGtiY29tbW9uIgorRVJERVBFTkRTX0VWREVWID0gInhrZXlib2FyZC1jb25maWciCisKKyMgRGlzYWJsZSBwcmV0dHkgbXVjaCBldmVyeXRoaW5nLCBvdmVycmlkZSBpbiBwbGF0Zm9ybSBzcGVjaWZpYyBzZXQgdXAKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24JXAorCSAgICAgCSAtLWRpc2FibGUtcXVhcnR6LWJhY2tlbmQJXAorCSAgICAgCSAtLWRpc2FibGUtd2luMzItYmFja2VuZAlcCisJICAgICAJIC0tZGlzYWJsZS1nZGstYmFja2VuZAkJXAorCSAgICAgCSAtLWRpc2FibGUtY2V4MTAwLWJhY2tlbmQJXAorCSAgICAgCSAtLWRpc2FibGUtdHNsaWItaW5wdXQJCVwKKwkgICAgCSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMS1iYWNrZW5kLC0tZGlzYWJsZS14MTEtYmFja2VuZCwke0VERVBFTkRTX1gxMX0iCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLCwke0VERVBFTkRTX1gxMX0gJHtFREVQRU5EU19HTFh9IgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbC1iYWNrZW5kLC0tZGlzYWJsZS1lZ2wtYmFja2VuZCwke0VERVBFTkRTX0VHTH0iCitQQUNLQUdFQ09ORklHW2V2ZGV2XSA9ICItLWVuYWJsZS1ldmRldi1pbnB1dCwtLWRpc2FibGUtZXZkZXYtaW5wdXQsJHtFREVQRU5EU19FVkRFVn0sJHtFUkRFUEVORFNfRVZERVZ9IgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWJhY2tlbmQsLS1kaXNhYmxlLXdheWxhbmQtYmFja2VuZCwke0VERVBFTkRTX1dBWUxBTkR9IgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kLWNvbXBvc2l0b3JdID0gIi0tZW5hYmxlLXdheWxhbmQtY29tcG9zaXRvciwtLWRpc2FibGUtd2F5bGFuZC1jb21wb3NpdG9yLHdheWxhbmQiCisKKyMgRGVmYXVsdCBjb25maWd1cmF0aW9uLCBkaXN0cm9zIG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUKK1BBQ0tBR0VDT05GSUcgPz89ICJlZ2wgXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ2x4IHgxMScsICcnLCBkKX0iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2NsdXR0ZXIvZXhhbXBsZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtsaWJkaXJ9L2NsdXR0ZXIvZXhhbXBsZXMiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9pbnN0YWxsZWQtdGVzdHMvLmRlYnVnIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIHNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxMTI4IGZvciB0aGlzCisJdG91Y2ggLXQgMjAwMDAxMDEwMDAwICR7U30vcG8vY2x1dHRlci0xLjAucG90Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZhNzBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitJbnN0YWxsIHRoZSBleGFtcGxlcyB0byAkbGliZGlyL2NsdXR0ZXIvLgorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitpbmRleCA0YjliNDQ5Li4yMzJjZDE5IDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitAQCAtMzgsNiArMzgsNyBAQCBBTV9DUFBGTEFHUyA9IFwKKyAJLUkkKHRvcF9zcmNkaXIpL2NsdXR0ZXIgXAorIAktSSQodG9wX2J1aWxkZGlyKS9jbHV0dGVyCisgCistbm9pbnN0X1BST0dSQU1TID0gJChhbGxfZXhhbXBsZXMpCisrZXhhbXBsZWRpciA9ICQocGtnbGliZGlyKS9leGFtcGxlcworK2V4YW1wbGVfUFJPR1JBTVMgPSAkKGFsbF9leGFtcGxlcykKKyAKKyBFWFRSQV9ESVNUID0gcmVkaGFuZC5wbmcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjMThjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNjY4ZTFkMTRhZjEzMjQ5Mzg0YWIzMjRjN2Q3OWVjNDE0N2YwN2U0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CitEYXRlOiBNb24sIDI3IEFwciAyMDE1IDIwOjEyOjMzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJ1biBpbnN0YWxsZWQgdGVzdHMgd2l0aCB0YXAgb3V0cHV0CisKK0NvbmZpZ3VyZSBvdXRwdXQgZnJvbSBpbnN0YWxsZWQtdGVzdHMgdG8gYmUgVEFQIGNvbXBsaWFudCBzdWNoIHRoYXQKK2dub21lLWRlc2t0b3AtdGVzdGluZy1ydW5uZXIgcHJvcGVybHkgaW50ZXJwcmV0cyB0aGUgcmVzdWx0cy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFRpbSBPcmxpbmcgPFRpY29UaW1vQGdtYWlsLmNvbT4KKy0tLQorIGJ1aWxkL2F1dG90b29scy9nbGliLXRhcC5tayB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rIGIvYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rCitpbmRleCA3YzVmODJiLi44NDRlMTdlIDEwMDY0NAorLS0tIGEvYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rCisrKysgYi9idWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsKK0BAIC0xMjcsNyArMTI3LDggQEAgaW5zdGFsbGVkX3Rlc3RfbWV0YV9EQVRBID0gJChpbnN0YWxsZWRfdGVzdGNhc2VzOj0udGVzdCkKKyAlLnRlc3Q6ICUkKEVYRUVYVCkgTWFrZWZpbGUKKyAJJChBTV9WX0dFTikgKGVjaG8gJ1tUZXN0XScgPiAkQC50bXA7IFwKKyAJZWNobyAnVHlwZT1zZXNzaW9uJyA+PiAkQC50bXA7IFwKKy0JZWNobyAnRXhlYz1lbnYgR19FTkFCTEVfRElBR05PU1RJQz0wIENMVVRURVJfRU5BQkxFX0RJQUdOT1NUSUM9MCAkKGluc3RhbGxlZF90ZXN0ZGlyKS8kPCcgPj4gJEAudG1wOyBcCisrCWVjaG8gJ0V4ZWM9ZW52IEdfRU5BQkxFX0RJQUdOT1NUSUM9MCBDTFVUVEVSX0VOQUJMRV9ESUFHTk9TVElDPTAgJChpbnN0YWxsZWRfdGVzdGRpcikvJDwgLS10YXAnID4+ICRALnRtcDsgXAorKwllY2hvICdPdXRwdXQ9VEFQJyA+PiAkQC50bXA7IFwKKyAJbXYgJEAudG1wICRAKQorIAorIENMRUFORklMRVMgKz0gJChpbnN0YWxsZWRfdGVzdF9tZXRhX0RBVEEpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg3N2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zaAorCitnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIGNsdXR0ZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MThjZGZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjBfMS4yMi40LmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgY2x1dHRlci0xLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIyNjQ5NDI1NmM5ODBkNDk3MDNhNTUzOTE2ZTMwODNjZCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjFkNzdjZTE2MDI1Zjg3NjY3YTFkMDBkYzRmYTYxN2ExOTM1MTU2ZjYzZmQxNzYzNWZkYWRmMTM4ODY2YzllMWUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9pbnN0YWxsLWV4YW1wbGVzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmZWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJHU3RyZWFtZXIgaW50ZWdyYXRpb24gbGlicmFyeSBmb3IgQ2x1dHRlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2x1dHRlci1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2MisiCisKK2luaGVyaXQgY2x1dHRlcgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1JbnN0YWxsLWV4YW1wbGUtYmluYXJ5LW5lZWRlZC1mb3ItY29yZS1pbWFnZS1jbHV0dGVyLnBhdGNoIgorCitERVBFTkRTID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIGNsdXR0ZXItMS4wIgorUkRFUEVORFNfJHtQTn0gKz0gImdzdHJlYW1lcjEuMC1tZXRhLWJhc2UiCitQQUNLQUdFUyAgPSsgIiR7UE59LWV4YW1wbGVzIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCitGSUxFU18ke1BOfSAgICAgICAgICArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvbGliKi5zbyIKK0ZJTEVTXyR7UE59LWRldiAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmxhIgorRklMRVNfJHtQTn0tZGJnICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1Zy9saWIqLnNvIgorRklMRVNfJHtQTn0tZXhhbXBsZXMgID0gIiR7YmluZGlyfS92aWRlby1wbGF5ZXIgJHtiaW5kaXJ9L3ZpZGVvLXNpbmsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvMDAwMS1JbnN0YWxsLWV4YW1wbGUtYmluYXJ5LW5lZWRlZC1mb3ItY29yZS1pbWFnZS1jbHV0dGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjI2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGQ3N2M3MTEyNzdiZjA3NWNlMDU0NWMxOWIzMjJmMDQwYzQ5Yzc3OGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMzAgQXByIDIwMTUgMTI6MTk6MTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5zdGFsbCBleGFtcGxlIGJpbmFyeSBuZWVkZWQgZm9yIGNvcmUtaW1hZ2UtY2x1dHRlcgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbXBvcnRlZCBmcm9tIGNsdXR0ZXItZ3N0LTEuOCBwYWNrYWdlLCBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQsCitjb21taXQgYWUyOGVlM2Y3YTA2MGI5ZTBkMTMxNTRhODRmMjQ0NGE5ODQ5MGI1YiwgdXBkYXRlZCBmb3IgY2x1dHRlci1nc3QgMy4wCisKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CistLS0KKyBleGFtcGxlcy9NYWtlZmlsZS5hbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KK2luZGV4IGJmYmMxYjUuLjA5NjU1ZTMgMTAwNjQ0CistLS0gYS9leGFtcGxlcy9NYWtlZmlsZS5hbQorKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorIE5VTEwgPSAjCisgCistbm9pbnN0X1BST0dSQU1TID0gY2FtZXJhLXBsYXllciB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24gdmlkZW8tY29udGVudAorK2Jpbl9QUk9HUkFNUyA9IGNhbWVyYS1wbGF5ZXIgdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uIHZpZGVvLWNvbnRlbnQKKyAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSBcCisgCQkkKE1BSU5UQUlORVJfQ0ZMQUdTKSBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC9lbmFibGUtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWVjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0luc3RhbGwgZXhhbXBsZSBiaW5hcnkgbmVlZGVkIGZvciBjb3JlLWltYWdlLWNsdXR0ZXIKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW1wb3J0ZWQgZnJvbSBjbHV0dGVyLWdzdC0xLjggcGFja2FnZSwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLAorY29tbWl0IGFlMjhlZTNmN2EwNjBiOWUwZDEzMTU0YTg0ZjI0NDRhOTg0OTBiNWIsIHVwZGF0ZWQgZm9yIGNsdXR0ZXItZ3N0IDEuNgorCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KKworSW5kZXg6IGdpdC9leGFtcGxlcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2V4YW1wbGVzL01ha2VmaWxlLmFtCTIwMTEtMDEtMzEgMTA6MTQ6MjMuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2V4YW1wbGVzL01ha2VmaWxlLmFtCTIwMTEtMDEtMzEgMTA6MTQ6MzQuMDAwMDAwMDAwICswODAwCitAQCAtMSw2ICsxLDYgQEAKKyBOVUxMID0gIworIAorLW5vaW5zdF9QUk9HUkFNUyA9IHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbgorK2Jpbl9QUk9HUkFNUyA9IHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbgorIAorIElOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpIFwKKyAJICAgJChNQUlOVEFJTkVSX0NGTEFHUykgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWE5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjBfMy4wLjguYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNsdXR0ZXItZ3N0LTMuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY2x1dHRlci1nc3QvY2x1dHRlci1nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT05NWJhYWNiYTE5NGU4MTRjMTEwZWEzYmRmMjVkZGJmNCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZjdkOTdmOTZlN2NjYTgyZjM4MzE3ZDE3MzRkNWRhZGIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI1ODJlODViODg0ODJlMTZmN2VjNzE5MzYzZTM4ZmFkZjg0ZmFiNGQ0YmFhYTIxZTUyMjdhNDU0YjgyNGYxMzVjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4OThiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBlbWJlZGRpbmcgYSBDbHV0dGVyIGNhbnZhcyBpbiBhIEdUSysgYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNsdXR0ZXItcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitpbmhlcml0IGNsdXR0ZXIKKworREVQRU5EUyA9ICJjbHV0dGVyLTEuMCBndGsrMyIKK1BBQ0tBR0VTICA9KyAiJHtQTn0tZXhhbXBsZXMiCitBVVRPVE9PTFNfQVVYRElSID0gIiR7U30vYnVpbGQiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzBlYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1ndGstMS4wXzEuNi4yLmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjbHV0dGVyLWd0ay0xLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1NTdkODE0YzNlNzBjYzNhMmQxY2YzODE2OTE5YjE0ZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gImJiZDAzZGZhOWEyMDEwMmQ1Y2RiNDQwNTEzYjBhMDM1OTMzZGE1NTdhZDdlOWRhMzE1NDYwMzRkZTJkYWYwNjkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhMzFjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wLmluYwpAQCAtMCwwICsxLDcwIEBACitTVU1NQVJZID0gIk1vZGVybiAzRCBncmFwaGljcyBBUEkgd2l0aCBhc3NvY2lhdGVkIHV0aWxpdHkgQVBJcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmNsdXR0ZXItcHJvamVjdC5vcmcvd2lraS9Db2dsIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY2x1dHRlcgorCitERVBFTkRTID0gImdsaWItMi4wIGdkay1waXhidWYiCitQQUNLQUdFUyA9KyAiJHtQTn0tZXhhbXBsZXMgXAorICAgICAgICAgICAgIGxpYmNvZ2wgbGliY29nbC1nbGVzMiBsaWJjb2dsLXBhbmdvIGxpYmNvZ2wtcGF0aCBcCisgICAgICAgICAgICAiCitBVVRPVE9PTFNfQVVYRElSID0gIiR7U30vYnVpbGQiCisKKyMgRXh0cmEgREVQRU5EUyBmb3IgUEFDS0FHRUNPTkZJRworRURFUEVORFNfR0wgPSAidmlydHVhbC9saWJnbCBsaWJkcm0iCitFREVQRU5EU19HTEVTMiA9ICJ2aXJ0dWFsL2xpYmdsZXMyIgorRURFUEVORFNfS01TID0gImxpYmRybSB2aXJ0dWFsL2VnbCIKK0VERVBFTkRTX0VHTCA9ICJ2aXJ0dWFsL2VnbCIKK0VERVBFTkRTX1gxMSA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4Y29tcG9zaXRlIGxpYnhmaXhlcyBsaWJ4aSBsaWJ4cmFuZHIiCitFREVQRU5EU19XQVlMQU5EID0gInZpcnR1YWwvbWVzYSB3YXlsYW5kIgorCisjIEV4dHJhIFJERVBFTkRTIGZvciBQQUNLQUdFQ09ORklHCisjIFRoaXMgaGFzIHRvIGJlIGV4cGxpY3RseSBsaXN0ZWQsIGJlY2F1c2UgY29nbCBkbG9wZW5zIHRoZSBiYWNrZW5kcworRVJERVBFTkRTX0dMICAgID0gImxpYmdsIgorRVJERVBFTkRTX0dMRVMyID0gImxpYmdsZXMyIgorCisjIEdMRVN2MSBpcyByYXJlbHkgdGVzdGVkLCBzbyBkaXNhYmxlIGl0CitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uCVwKKwkgICAgICAgCSAtLWVuYWJsZS1leGFtcGxlcy1pbnN0YWxsCVwKKwkgICAgICAgCSAtLWVuYWJsZS1kZWJ1ZwkJIAlcCisJICAgICAgIAkgLS1kaXNhYmxlLWdsZXMxCQlcCisJICAgICAgICAgLS1kaXNhYmxlLWNhaXJvICAgICAgICAgICAgICAgIFwKKwkgICAgCSIKKworIyBPcGVuR0wvR0xYCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtZ2wgLS1lbmFibGUtZ2x4LC0tZGlzYWJsZS1nbCAtLWRpc2FibGUtZ2x4LCR7RURFUEVORFNfR0x9ICR7RURFUEVORFNfWDExfSwke0VSREVQRU5EU19HTH0iCisKKyMgR0xFU3YyCitQQUNLQUdFQ09ORklHW2dsZXMyXSA9ICItLWVuYWJsZS1nbGVzMiwtLWRpc2FibGUtZ2xlczIsJHtFREVQRU5EU19HTEVTMn0sICR7RVJERVBFTkRTX0dMRVMyfSIKKworIyBFR0wgYmFja2VuZHMKK1BBQ0tBR0VDT05GSUdbZWdsLWttc10gPSAiLS1lbmFibGUta21zLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUta21zLWVnbC1wbGF0Zm9ybSwke0VERVBFTkRTX0tNU30iCitQQUNLQUdFQ09ORklHW2VnbC1udWxsXSA9ICItLWVuYWJsZS1udWxsLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUtbnVsbC1lZ2wtcGxhdGZvcm0iCitQQUNLQUdFQ09ORklHW2VnbC14MTFdID0gIi0tZW5hYmxlLXhsaWItZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS14bGliLWVnbC1wbGF0Zm9ybSwke0VERVBFTkRTX1gxMX0gJHtFREVQRU5EU19FR0x9IgorUEFDS0FHRUNPTkZJR1tlZ2wtd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLXdheWxhbmQtZWdsLXBsYXRmb3JtLCR7RURFUEVORFNfV0FZTEFORH0iCisKKyMgV2F5bGFuZCAoc2VydmVyLXNpZGUpCitQQUNLQUdFQ09ORklHW3dheWxhbmQtc2VydmVyXSA9ICItLWVuYWJsZS13YXlsYW5kLWVnbC1zZXJ2ZXIsLS1kaXNhYmxlLXdheWxhbmQtZWdsLXNlcnZlciwke0VERVBFTkRTX1dBWUxBTkR9IgorCisjIFN1cHBvcnQgcmVuZGVyaW5nIHRleHQgZGlyZWN0bHkgd2l0aCBQYW5nbworUEFDS0FHRUNPTkZJR1tjb2dsLXBhbmdvXSA9ICItLWVuYWJsZS1jb2dsLXBhbmdvLC0tZGlzYWJsZS1jb2dsLXBhbmdvLHBhbmdvIgorCisjIFJlc3BlY3QgdGhlIERJU1RST19GRUFUVVJFUyB0byBwdWxsIGluIEdMWCBvciBXYXlsYW5kIGFzIGFwcHJvcHJpYXRlIGJ5CisjIGRlZmF1bHQuCitQQUNLQUdFQ09ORklHID8/PSAiY29nbC1wYW5nbyBnbGVzMiBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ2VnbC13YXlsYW5kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ2x4IGVnbC14MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAiCisKKworRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9LyogJHtkYXRhZGlyfS9jb2dsL2V4YW1wbGVzLWRhdGEvKiIKK0ZJTEVTX2xpYmNvZ2wgPSAiJHtsaWJkaXJ9L2xpYmNvZ2wke1NPTElCU30iCitGSUxFU19saWJjb2dsLWdsZXMyID0gIiR7bGliZGlyfS9saWJjb2dsLWdsZXMyJHtTT0xJQlN9IgorRklMRVNfbGliY29nbC1wYW5nbyA9ICIke2xpYmRpcn0vbGliY29nbC1wYW5nbyR7U09MSUJTfSIKKworRklMRVNfbGliY29nbC1wYXRoID0gIiR7bGliZGlyfS9saWJjb2dsLXBhdGgke1NPTElCU30iCisKKyMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFmdGVyIERlYmlhbi1yZW5hbWluZworUlBST1ZJREVTX2xpYmNvZ2wgPSAiY29nbC0xLjAiCitSQ09ORkxJQ1RTX2xpYmNvZ2wgPSAiY29nbC0xLjAiCitSUkVQTEFDRVNfbGliY29nbCA9ICJjb2dsLTEuMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wL2NvZ2wtZnJhbWVidWZmZXItZ2wtV29yay1hZ2Fpbi1vbi1HTEVTdjIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODM5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworCitGcm9tIGY4Y2NlNWY2Y2IyOTU4YTQwNzRmODdjZDM0NWJmZTQ2ZTBkZGE2ZTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzcGVyIFN0LiBQaWVycmUiIDxqc3RwaWVycmVAbWVjaGV5ZS5uZXQ+CitEYXRlOiBNb24sIDIwIEFwciAyMDE1IDEyOjA4OjI5IC0wNzAwCitTdWJqZWN0OiBjb2dsLWZyYW1lYnVmZmVyLWdsOiBXb3JrIGFnYWluIG9uIEdMRVN2MgorCisKK2RpZmYgLS1naXQgYS9jb2dsL2RyaXZlci9nbC9jb2dsLWZyYW1lYnVmZmVyLWdsLmMgYi9jb2dsL2RyaXZlci9nbC9jb2dsLWZyYW1lYnVmZmVyLWdsLmMKK2luZGV4IDc5M2IxMGIuLjYwOWNmYjMgMTAwNjQ0CistLS0gYS9jb2dsL2RyaXZlci9nbC9jb2dsLWZyYW1lYnVmZmVyLWdsLmMKKysrKyBiL2NvZ2wvZHJpdmVyL2dsL2NvZ2wtZnJhbWVidWZmZXItZ2wuYworQEAgLTEwNyw2ICsxMDcsMTIgQEAKKyAjaWZuZGVmIEdMX1BBQ0tfSU5WRVJUX01FU0EKKyAjZGVmaW5lIEdMX1BBQ0tfSU5WRVJUX01FU0EgMHg4NzU4CisgI2VuZGlmCisrI2lmbmRlZiBHTF9CQUNLX0xFRlQKKysjZGVmaW5lIEdMX0JBQ0tfTEVGVAkJCQkweDA0MDIKKysjZW5kaWYKKysjaWZuZGVmIEdMX0JBQ0tfUklHSFQKKysjZGVmaW5lIEdMX0JBQ0tfUklHSFQJCQkJMHgwNDAzCisrI2VuZGlmCisgCisgI2lmbmRlZiBHTF9DT0xPUgorICNkZWZpbmUgR0xfQ09MT1IgMHgxODAwCitAQCAtMjQ1LDYgKzI1MSw5IEBAIF9jb2dsX2ZyYW1lYnVmZmVyX2dsX2ZsdXNoX3N0ZXJlb19tb2RlX3N0YXRlIChDb2dsRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKQorICAgaWYgKGZyYW1lYnVmZmVyLT50eXBlID09IENPR0xfRlJBTUVCVUZGRVJfVFlQRV9PRkZTQ1JFRU4pCisgICAgIHJldHVybjsKKyAKKysgIGlmICghY3R4LT5nbERyYXdCdWZmZXIpCisrICAgIHJldHVybjsKKysKKyAgIC8qIFRoZSBvbmUtc2hvdCBkZWZhdWx0IGRyYXcgYnVmZmVyIHNldHRpbmcgaW4gX2NvZ2xfZnJhbWVidWZmZXJfZ2xfYmluZAorICAgICogbXVzdCBoYXZlIGFscmVhZHkgaGFwcGVuZWQuIElmIG5vdCBpdCB3b3VsZCBvdmVycmlkZSB3aGF0IHdlIHNldCBoZXJlLiAqLworICAgZ19hc3NlcnQgKGN0eC0+d2FzX2JvdW5kX3RvX29uc2NyZWVuKTsKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjBiODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjBfMS4yMC4wLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBjb2dsLTEuMC5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2NvZ2wtZnJhbWVidWZmZXItZ2wtV29yay1hZ2Fpbi1vbi1HTEVTdjIucGF0Y2giCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTFiMWE1MDhkOTFkMjVjYTYwN2M4M2Y5MmYzZTMxYzg0IgorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNWIyODg5NzE5NGQ5ZmY3NmE1NzRhOTQ5M2QxZjdlZTAiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI3MjllMzU0OTU4MjllN2QzMWZhZmEzMzU4ZTQ3Yjc0M2JhMjFhMmIwOGZmOWI2Y2QyOGZiNzRjMGRlOTExOTJiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXMvY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE3ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDg4MDc3ZWQxNTZhNzE0ZjMyYmI0MDhmNDIyMjc4ZDYxNjExZmZkNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorRGF0ZTogU2F0LCAyNiBKdWwgMjAxNCAxNjo1Nzo0NiAtMDMwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmUuaW46IEZpeCBzdHJpbmcgYXJndW1lbnQgc3ludGF4CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CistLS0KKyBjb25maWd1cmUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGJmZTFiODIuLmU5MzliYmQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTY1LDcgKzY1LDcgQEAgZmkpCisgCisgRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTj0xLjQuMTQKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhESVJFQ1RGQiwgZGlyZWN0ZmIgPj0gJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04sWyBXQVRFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT13YXRlciBkaXJlY3RmYmAgXSwKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbRElSRUNURkJdLCBkaXJlY3RmYiA+PSAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTixbIFdBVEVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdhdGVyIGRpcmVjdGZiYCBdLAorIAlBQ19NU0dfRVJST1IoWyRESVJFQ1RGQl9QS0dfRVJST1JTCisgKioqIERpcmVjdEZCICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OIG9yIG5ld2VyIGlzIHJlcXVpcmVkLiBUaGUgbGF0ZXN0IHZlcnNpb24KKyAqKiogb2YgRGlyZWN0RkIgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5kaXJlY3RmYi5vcmcvLl0pKQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzZThiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlc18xLjcuMC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkV4YW1wbGUgRGlyZWN0RkIgYXBwbGljYXRpb25zIgorREVTQ1JJUFRJT04gPSAiVGhlIERpcmVjdEZCLWV4YW1wbGVzIHBhY2thZ2UgY29udGFpbnMgYSBzZXQgb2Ygc2ltcGxlIERpcmVjdEZCIFwKKyAgICAgIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QgYW5kIGRlbW9uc3RyYXRlIHZhcmlvdXMgRGlyZWN0RkIgXAorICAgICAgZmVhdHVyZXMiCitERVBFTkRTID0gImRpcmVjdGZiIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJNSVQiCisKK1NSQ19VUkkgPSAiIFwKKyAgICAgICAgICAgaHR0cDovL3d3dy5kaXJlY3RmYi5vcmcvZG93bmxvYWRzL0V4dHJhcy9EaXJlY3RGQi1leGFtcGxlcy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmluLUZpeC1zdHJpbmctYXJndW1lbnQtc3ludGF4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVjZjZmZDJiMTk5MTVhZmM0ZGE1NjA0MzkyNmNhMThmIgorCitTID0gIiR7V09SS0RJUn0vRGlyZWN0RkItZXhhbXBsZXMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitTUkNfVVJJW21kNXN1bV0gPSAiOGI2MGM4NjdhZjI5NTQ4MWMzMmE4YzdmYzU4MDIzMDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWEyMTA0Y2M0ZGE4MTIzYzgzNzE4MTM1NTFiNjZiOTQzMTk4OTc5Zjc0NWNiZWJjMDM0YmI1ZTEwODQ0MTIyYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmFhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jCkBAIC0wLDAgKzEsODAgQEAKK1NVTU1BUlkgPSAiR3JhcGhpY3MgYWJzdHJhY3Rpb24gbGlicmFyeSBmb3IgdGhlIExpbnV4IEZyYW1lYnVmZmVyIERldmljZSIKK0RFU0NSSVBUSU9OID0gIkRpcmVjdEZCIGlzIGEgdGhpbiBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgZGV2ZWxvcGVycyBcCit3aXRoIGhhcmR3YXJlIGdyYXBoaWNzIGFjY2VsZXJhdGlvbiwgaW5wdXQgZGV2aWNlIGhhbmRsaW5nIGFuZCBcCithYnN0cmFjdGlvbiwgYW4gaW50ZWdyYXRlZCB3aW5kb3dpbmcgc3lzdGVtIHdpdGggc3VwcG9ydCBmb3IgXAordHJhbnNsdWNlbnQgd2luZG93cyBhbmQgbXVsdGlwbGUgZGlzcGxheSBsYXllcnMgb24gdG9wIG9mIHRoZSBcCitMaW51eCBmcmFtZWJ1ZmZlciBkZXZpY2UuIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRjZjNjODI1NjU5ZTgyNTM5NjQ1ZGE0MWE3OTA4NTg5IgorCitIT01FUEFHRSA9ICJodHRwOi8vZGlyZWN0ZmIub3JnIgorREVQRU5EUyA9ICJqcGVnIGxpYnBuZyBmcmVldHlwZSB6bGliIHRzbGliIHN5c2ZzdXRpbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kaXJlY3RmYi5vcmcvZG93bmxvYWRzL0NvcmUvRGlyZWN0RkItMS43L0RpcmVjdEZCLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZnVzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Jhc2hpc20ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLSR7UFZ9IgorCitMREZMQUdTX2FwcGVuZCA9IiAtbHRzIC1sbSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9kaXJlY3RmYi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbanBlZzIwMDBdID0gIi0tZW5hYmxlLWpwZWcyMDAwLC0tZGlzYWJsZS1qcGVnMjAwMCxqYXNwZXIiCitQQUNLQUdFQ09ORklHW2RybWttc10gPSAiLS1lbmFibGUtZHJta21zLC0tZGlzYWJsZS1kcm1rbXMsbGliZHJtIgorUEFDS0FHRUNPTkZJR1t0aWZmXSA9ICItLWVuYWJsZS10aWZmLC0tZGlzYWJsZS10aWZmLHRpZmYiCitQQUNLQUdFQ09ORklHW3dlYnBdID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKKworRVhUUkFfT0VDT05GID0gIlwKKyAgLS13aXRoLWdmeGRyaXZlcnM9bm9uZSBcCisgIC0tZW5hYmxlLWZyZWV0eXBlPXllcyBcCisgIC0tZW5hYmxlLXpsaWIgXAorICAtLWRpc2FibGUtaW1saWIyIFwKKyAgLS1kaXNhYmxlLW1lc2EgXAorICAtLWRpc2FibGUtc2RsIFwKKyAgLS1kaXNhYmxlLXZuYyBcCisgIC0tZGlzYWJsZS14MTEgXAorIgorCisjT25jZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBvcHRpb24gb2YgZ2NjIGlzIGFkZGVkIGludG8gVEFSR0VUX0NMRkFHUyBhcyBkZWZhdWx0CisjdGhpcyB3aWxsIGNhdXNlIGRpcmVjdGZiIGJ1aWxkIGZhaWx1cmUgb24geDg2IGFyY2gsIHNvIGZpbHRlciBvdXQgaXQuCitUQVJHRVRfQ0ZMQUdTX3JlbW92ZV94ODYgPSAiLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCisKKyNQQUNLQUdFU19EWU5BTUlDICs9ICJeZGlyZWN0ZmItaW5wdXRkcml2ZXJzLS4qIgorIworI3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyMgICAgaW5wdXRkcml2ZXJzX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzJykKKyMgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgaW5wdXRkcml2ZXJzX2xpYmRpciwgJyouc28kJywgJ2RpcmVjdGZiLWlucHV0ZHJpdmVycy0lcycsICdEaXJlY3RmYiBwbHVnaW4gZm9yICVzJykKKyN9CisKKyMgTk9URTogbW9ub2xpdGhpYyBwYWNrYWdpbmcgZm9yIG5vdywgc2hvdWxkIGltcHJvdmUgdGhhdCBldmVudHVhbGx5CisKKworCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9LyovKi8uZGVidWcvKi5zbyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS8qLy5kZWJ1Zy8qLnNvIFwKKyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7YmluZGlyfS9kaXJlY3RmYi1jb25maWcgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vc3lzdGVtcy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2ludGVyZmFjZXMvKi8qLmxhIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3dtLyoubGEgXAorIgorCitGSUxFU18ke1BOfSArPSAiXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vc3lzdGVtcy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2lucHV0ZHJpdmVycy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L2ludGVyZmFjZXMvKi8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9L3dtLyouc28gXAorICAke2RhdGFkaXJ9L2RpcmVjdGZiLSR7UFZ9IFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmUwZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb20gZjQzZWY0NDgwNmZmYjhlM2IzNWQ5OTA3MGRkZTliNmNjMTcxNGQzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDggU2VwIDIwMTUgMjE6MzI6MjAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2Z4LGRpcmVjdDogQWJvaWQgdXNuZyBWTEFzIGFuZCBwcmludGYgZm9ybWF0cworCitWTEFzIGFyZSBmbGFnZ2VkIGJ5IGNsYW5nIHdoZW4gdXNpbmcgbm9uLVBPRCB0eXBlcywgdGhlcmVmb3JlIHJlcGxhY2UKK3RoZSB1c2FnZSB3aXRoIGFsbG9jYSB3aGljaCBpcyBleGFjdCBzYW1lIGFsbG9jYXRpb24gb24gc3RhY2sKKworIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18pKSkgaXMgbm90IHBvcnRhYmxlIGFzIHVzZWQgaGVyZQorIHRoZXJlZm9yZSBkaXNhYmxlIHRoZSBjaGVjayBmb3IgY2xhbmcgaGVyZSwgd2UgbG9zZSBubyBmdW5jdGlvbmFsaXR5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGliL2RpcmVjdC91dGlsLmggfCAyICstCisgc3JjL2dmeC91dGlsLmNwcCAgfCA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZGlyZWN0L3V0aWwuaCBiL2xpYi9kaXJlY3QvdXRpbC5oCitpbmRleCA3Mjk0MWU5Li44ZTdmYTRhIDEwMDY0NAorLS0tIGEvbGliL2RpcmVjdC91dGlsLmgKKysrKyBiL2xpYi9kaXJlY3QvdXRpbC5oCitAQCAtOTgsNyArOTgsNyBAQAorICNkZWZpbmUgRF9DT05TVF9GVU5DCisgI2VuZGlmCisgCistI2lmIF9fR05VQ19fID49IDMKKysjaWYgX19HTlVDX18gPj0gMyAmJiAhZGVmaW5lZCBfX2NsYW5nX18KKyAjZGVmaW5lIERfRk9STUFUX1BSSU5URihuKSAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIG4sIG4rMSkpKQorICNkZWZpbmUgRF9GT1JNQVRfVlBSSU5URihuKSAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgbiwgMCkpKQorICNlbHNlCitkaWZmIC0tZ2l0IGEvc3JjL2dmeC91dGlsLmNwcCBiL3NyYy9nZngvdXRpbC5jcHAKK2luZGV4IDQwMDMyYmMuLmQxMDE1ZDQgMTAwNjQ0CistLS0gYS9zcmMvZ2Z4L3V0aWwuY3BwCisrKysgYi9zcmMvZ2Z4L3V0aWwuY3BwCitAQCAtMjk0LDggKzI5NCw4IEBAIGRmYl9nZnhfY29weV9yZWdpb25zX3N0ZXJlbyggQ29yZVN1cmZhY2UgICAgICAgICAgICpzb3VyY2UsCisgeworICAgICAgdW5zaWduZWQgaW50IGksIG4gPSAwOworICAgICAgREZCUmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIHNvdXJjZS0+Y29uZmlnLnNpemUudywgc291cmNlLT5jb25maWcuc2l6ZS5oIH07CistICAgICBERkJSZWN0YW5nbGUgcmVjdHNbbnVtXTsKKy0gICAgIERGQlBvaW50ICAgICBwb2ludHNbbnVtXTsKKysgICAgIERGQlJlY3RhbmdsZSAqcmVjdHMgPSAgKERGQlJlY3RhbmdsZSopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlJlY3RhbmdsZSkgKiBudW0pOworKyAgICAgREZCUG9pbnQgKnBvaW50cyA9ICAoREZCUG9pbnQqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJQb2ludCkgKiBudW0pOworIAorICAgICAgZm9yIChpPTA7IGk8bnVtOyBpKyspIHsKKyAgICAgICAgICAgREZCX1JFR0lPTl9BU1NFUlQoICZyZWdpb25zW2ldICk7CitAQCAtMzUxLDggKzM1MSw4IEBAIGRmYl9nZnhfY29weV9yZWdpb25zX2NsaWVudCggQ29yZVN1cmZhY2UgICAgICAgICAgICAgKnNvdXJjZSwKKyB7CisgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgaSwgbiA9IDA7CisgICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAgcmVjdCA9IHsgMCwgMCwgc291cmNlLT5jb25maWcuc2l6ZS53LCBzb3VyY2UtPmNvbmZpZy5zaXplLmggfTsKKy0gICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICByZWN0c1tudW1dOworLSAgICAgREZCUG9pbnQgICAgICAgICAgICAgICAgIHBvaW50c1tudW1dOworKyAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgKnJlY3RzID0gIChERkJSZWN0YW5nbGUqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJSZWN0YW5nbGUpICogbnVtKTsKKysgICAgIERGQlBvaW50ICAgICAgICAgICAgICAgICpwb2ludHMgPSAgKERGQlBvaW50KilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUG9pbnQpICogbnVtKTsKKyAgICAgIENvcmVHcmFwaGljc1N0YXRlQ2xpZW50ICpjbGllbnQgPSBfY2xpZW50ID8gX2NsaWVudCA6ICZTdGF0ZUNsaWVudDo6R2V0KCktPmNsaWVudDsKKyAgICAgIENhcmRTdGF0ZSAgICAgICAgICAgICAgICpzdGF0ZSAgPSBjbGllbnQtPnN0YXRlOworICAgICAgQ2FyZFN0YXRlICAgICAgICAgICAgICAgIGJhY2t1cDsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Jhc2hpc20ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorJHt4Ly95L30gaXMgYSBiYXNoIHN5bnRheC4gUmVwbGFjZSB3aXRoIHNvbWV0aGluZyBkYXNoIGNvbXBhdGlibGUKKworUlAgMjAxNS81LzMKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogRGlyZWN0RkItMS43LjcvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gRGlyZWN0RkItMS43Ljcub3JpZy9jb25maWd1cmUuaW4KKysrKyBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KK0BAIC0yNjk2LDcgKzI2OTYsNyBAQCBBTV9DT05ESVRJT05BTChCVUlMRF9UT09MUywgdGVzdCAiJHdpdGhfCisgQU1fQ09ORElUSU9OQUwoQ1JPU1NfQ09NUElMSU5HLCB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9ICJ5ZXMiKQorIAorIENGTEFHUz0iJENGTEFHUyAkREZCX0lOVEVSTkFMX0NGTEFHUyIKKy1DWFhGTEFHUz0iJENYWEZMQUdTICR7Q0ZMQUdTLy8tV2Vycm9yLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uL30iCisrQ1hYRkxBR1M9IiRDWFhGTEFHUyAkKHByaW50ZiAnJXNcbicgIiRDRkxBR1MiIHwgc2VkICdzLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vL2cnKSIKKyBERkJfTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKKyAKKyBDRkxBR1M9IiRDRkxBR1MgJENGTEFHU19TVEQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29uZmlndXJlZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhjMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2NvbmZpZ3VyZWZpeC5wYXRjaApAQCAtMCwwICsxLDYwIEBACitMaWJ0b29sIG5lZWRzIHRoZXNlIHNldCBjb3JyZWN0bHkgZWxzZSB3ZSBlbmQgdXAgd2l0aCBwb2ludGxlc3MgcnBhdGhzCitzdWNoIGFzIHRoZSBRQSB3YXJuaW5nczoKKworV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZibGF5ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZibWFzdGVyIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGdpZmZ0IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmR1bXAgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5wdXQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZnggY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZic2NyZWVuIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYldBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL21rZGdpZmYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5zcGVjdG9yIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZmlmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmluZm8gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJwZW5tb3VudCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYmcgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJmdXNpb24tMS40LnNvLjYgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJkaXJlY3RmYi0xLjQuc28uNi4wLjkgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9saWJkaXJlY3RmYi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNi4wLjkgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2ZiZGV2LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvc3lzdGVtcy9saWJkaXJlY3RmYl9kZXZtZW0uc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2R1bW15LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJWaWRlb1Byb3ZpZGVyL2xpYmlkaXJlY3RmYnZpZGVvcHJvdmlkZXJfdjRsLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJWaWRlb1Byb3ZpZGVyL2xpYmlkaXJlY3RmYnZpZGVvcHJvdmlkZXJfZ2lmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JQ29yZVJlc291cmNlTWFuYWdlci9saWJpY29yZXJlc291cmNlbWFuYWdlcl90ZXN0LnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfanBlZy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX3BuZy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2ludGVyZmFjZXMvSURpcmVjdEZCSW1hZ2VQcm92aWRlci9saWJpZGlyZWN0ZmJpbWFnZXByb3ZpZGVyX2RmaWZmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZ2lmLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJGb250L2xpYmlkaXJlY3RmYmZvbnRfZnQyLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJGb250L2xpYmlkaXJlY3RmYmZvbnRfZGdpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi93bS9saWJkaXJlY3RmYndtX2RlZmF1bHQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfenl0cm9uaWMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfcGVubW91bnQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbGludXhfaW5wdXQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfc2VyaWFsbW91c2Uuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbXV0b3VjaC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl90c2xpYi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9qb3lzdGljay5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zb255cGkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfbGlyYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl93bTk3eHhfdHMuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfcHMybW91c2Uuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnB1dGRyaXZlcnMvbGliZGlyZWN0ZmJfa2V5Ym9hcmQuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEyLzAzLzE2CisKK0luZGV4OiBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gRGlyZWN0RkItMS40LjE1Lm9yaWcvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzI6MjMuNjkyNDAyODc5ICswMDAwCisrKysgRGlyZWN0RkItMS40LjE1L2NvbmZpZ3VyZS5pbgkyMDEyLTAzLTE2IDEzOjMzOjIyLjMxMjQwMDk2MCArMDAwMAorQEAgLTk3LDEzICs5Nyw2IEBACisgQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKKyBBQ19DSEVDS19GVU5DUyhmb3JrKQorIAorLQorLSMjIFdvcmsgYXJvdW5kIGxpYnN0dWhsIGR1cmluZyBjcm9zcyBidWlsZC4uLgorLWlmIHRlc3QgIiRob3N0IiAhPSAiJGJ1aWxkIjsgdGhlbgorLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiIKKy0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iIgorLWZpCistCisgQUNfUEFUSF9QUk9HUyhQRVJMLCBwZXJsNSBwZXJsKQorIAorIEFDX1BBVEhfUFJPRyhNQU4ySFRNTCwgbWFuMmh0bWwsIG5vKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4MWE2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9mdXNpb24ucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorZGlyZWN0ZmI6IEZpeCBmb3IgaGFuZ3MgaW4gZGlyZWN0X3Rlc3QsIGZ1c2lvbl9za2lybWlzaCBvbiBleGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTGF1cmVuIFBvc3QgPGxhdXJlbi5wb3N0QGZyZWVzY2FsZS5jb20+CisKKy0tLSBhL2xpYi9mdXNpb24vZnVzaW9uLmMJMjAxMy0wMS0xOCAyMjo1NzoxMS4wMDAwMDAwMDAgKzA4MDAKKysrKyBiL2xpYi9mdXNpb24vZnVzaW9uLmMJMjAxMy0wNy0wNCAxMDo0Mjo1Ni41MDI2OTkxMTkgKzA4MDAKK0BAIC0yODUzLDkgKzI4NTMsMTQgQEAKKyAgICAgICAgICAgZGlyZWN0X211dGV4X2xvY2soICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9tdXRleCApOworIAorICAgICAgICAgICB3aGlsZSAoMSkgeworLSAgICAgICAgICAgICAgIGlmICghd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVycykKKysgICAgICAgICAgICAgICBpZiAoIXdvcmxkLT5ldmVudF9kaXNwYXRjaGVyX2J1ZmZlcnMpeworICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X3dhaXRxdWV1ZV93YWl0KCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfY29uZCwgJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CistCisrICAgICAgICAgICAgICAgICAgICBpZiAod29ybGQtPmRpc3BhdGNoX3N0b3ApIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRF9ERUJVR19BVCggRnVzaW9uX01haW5fRGlzcGF0Y2gsICIgIC0+IElHTk9SSU5HIChkaXNwYXRjaF9zdG9wISlcbiIgKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBidWYgPSAoRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICopd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVyczsKKyAgICAgICAgICAgICAgICBEX01BR0lDX0FTU0VSVCggYnVmLCBGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKTsKKyAKK0BAIC0yODcyLDYgKzI4NzcsMTEgQEAKKyAvL0RfSU5GTygid2FpdGluZy4uLlxuIik7CisgICAgICAgICAgICAgICAgICAgICBEX0FTU0VSVCggYnVmLT5yZWFkX3BvcyA9PSBidWYtPndyaXRlX3BvcyApOworICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X3dhaXRxdWV1ZV93YWl0KCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfY29uZCwgJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisrCQkgICAgICBpZiAod29ybGQtPmRpc3BhdGNoX3N0b3ApIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRF9ERUJVR19BVCggRnVzaW9uX01haW5fRGlzcGF0Y2gsICIgIC0+IElHTk9SSU5HIChkaXNwYXRjaF9zdG9wISlcbiIgKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0X211dGV4X3VubG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICBidWYgPSAoRnVzaW9uRXZlbnREaXNwYXRjaGVyQnVmZmVyICopd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYl8xLjcuNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYl8xLjcuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmMwNzBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBkaXJlY3RmYi5pbmMKKworUlYgPSAiMS43LTciCisKK0xFQURfU09OQU1FID0gImxpYmRpcmVjdGZiLTEuNy5zby4wIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTUyY2YxODYzYjFhM2EyOGFhMTM3MGU5MDUzNDQwYmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjc4NWM2MzhkYzMxYjhmZTNhN2M4MWJlMTQ3NWM4OWIyMjU1YWIzZDY3Yjc3N2M3NDdkM2ZiYzUyZjgwMjdhMyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2luc3RhbGx0ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtL2luc3RhbGx0ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc1ZGFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vaW5zdGFsbHRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3Rlc3RzOiBhbHNvIGluc3RhbGwgdGVzdHMgYXBwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IGJmMTk4N2YuLmQ5MDllMTkgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0yNywxMCArMjcsMTEgQEAgQU1fQ1BQRkxBR1MgPSBcCisgCisgTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliZHJtLmxhCisgCistY2hlY2tfUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TID0gXAorIAlkcmlzdGF0IFwKKyAJZHJtc3RhdAorIAorK2NoZWNrX1BST0dSQU1TID0KKyBpZiBIQVZFX05PVVZFQVUKKyBTVUJESVJTICs9IG5vdXZlYXUKKyBlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjYyLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm1fMi40LjYyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjMwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjIuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJVc2Vyc3BhY2UgaW50ZXJmYWNlIHRvIHRoZSBrZXJuZWwgRFJNIHNlcnZpY2VzIgorREVTQ1JJUFRJT04gPSAiVGhlIHJ1bnRpbWUgbGlicmFyeSBmb3IgYWNjZXNzaW5nIHRoZSBrZXJuZWwgRFJNIHNlcnZpY2VzLiAgRFJNIFwKK3N0YW5kcyBmb3IgXCJEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXJcIiwgd2hpY2ggaXMgdGhlIGtlcm5lbCBwb3J0aW9uIG9mIHRoZSBcCitcIkRpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmVcIiAoRFJJKS4gIERSSSBpcyByZXF1aXJlZCBmb3IgbWFueSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCitIT01FUEFHRSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hmODZkcm0uYztiZWdpbmxpbmU9OTtlbmRsaW5lPTMyO21kNT1jOGEzYjk2MWFmNzY2N2M1MzA4MTY3NjFlOTQ5ZGM3MSIKK1BST1ZJREVTID0gImRybSIKK0RFUEVORFMgPSAibGlicHRocmVhZC1zdHVicyB1ZGV2IGxpYnBjaWFjY2VzcyIKKworU1JDX1VSSSA9ICJodHRwOi8vZHJpLmZyZWVkZXNrdG9wLm9yZy9saWJkcm0vJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9pbnN0YWxsdGVzdHMucGF0Y2ggIgorU1JDX1VSSVttZDVzdW1dID0gImM5MjkxYmFlMGU1Y2E2NWQxNDgzODIxZDM2OThkM2FiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkwNmMyOTRiZGJlMWM5NGMzY2EwODQzMDVkNjFhNmU1YTgzNjdmM2I0OTg2ZTZjYzEzYjFlOWIzZjc1OTMxZGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1jYWlyby10ZXN0cyBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLW9tYXAtZXhwZXJpbWVudGFsLWFwaSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtdGVzdC1wcm9ncmFtcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1tYW5wYWdlcyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12YWxncmluZCBcCisgICAgICAgICAgICAgICAgIgorCitBTExPV19FTVBUWV8ke1BOfS1kcml2ZXJzID0gIjEiCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMgJHtQTn0tZHJpdmVycyAke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwIFwKKyAgICAgICAgICAgICAke1BOfS1pbnRlbCAke1BOfS1leHlub3MgJHtQTn0ta21zICR7UE59LWZyZWVkcmVubyIKKworUlJFQ09NTUVORFNfJHtQTn0tZHJpdmVycyA9ICIke1BOfS1yYWRlb24gJHtQTn0tbm91dmVhdSAke1BOfS1vbWFwICR7UE59LWludGVsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh5bm9zICR7UE59LWZyZWVkcmVubyIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9L2RyKiAke2JpbmRpcn0vbW9kZSogJHtiaW5kaXJ9Lyp0ZXN0IgorRklMRVNfJHtQTn0tcmFkZW9uID0gIiR7bGliZGlyfS9saWJkcm1fcmFkZW9uLnNvLioiCitGSUxFU18ke1BOfS1ub3V2ZWF1ID0gIiR7bGliZGlyfS9saWJkcm1fbm91dmVhdS5zby4qIgorRklMRVNfJHtQTn0tb21hcCA9ICIke2xpYmRpcn0vbGliZHJtX29tYXAuc28uKiIKK0ZJTEVTXyR7UE59LWludGVsID0gIiR7bGliZGlyfS9saWJkcm1faW50ZWwuc28uKiIKK0ZJTEVTXyR7UE59LWV4eW5vcyA9ICIke2xpYmRpcn0vbGliZHJtX2V4eW5vcy5zby4qIgorRklMRVNfJHtQTn0ta21zID0gIiR7bGliZGlyfS9saWJrbXMqLnNvLioiCitGSUxFU18ke1BOfS1mcmVlZHJlbm8gPSAiJHtsaWJkaXJ9L2xpYmRybV9mcmVlZHJlbm8uc28uKiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby1mYl8xLjAuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZDMxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8tZmJfMS4wLjAuYmIKQEAgLTAsMCArMSw2IEBACitFR0xJTkZPX1BMQVRGT1JNID89ICJmYiIKK0VHTElORk9fQklOQVJZX05BTUUgPz0gImVnbGluZm8tZmIiCisKK2luY2x1ZGUgZWdsaW5mby5pbmMKKworU1VNTUFSWSArPSAiKEZyYW1lYnVmZmVyIHZlcnNpb24pIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby14MTFfMS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI3ZmRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby14MTFfMS4wLjAuYmIKQEAgLTAsMCArMSwxMiBAQAorRUdMSU5GT19QTEFURk9STSA/PSAieDExIgorRUdMSU5GT19CSU5BUllfTkFNRSA/PSAiZWdsaW5mby14MTEiCisKK2luY2x1ZGUgZWdsaW5mby5pbmMKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NVTU1BUlkgKz0gIihYMTEgdmVyc2lvbikiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLmluYwpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIHByaW50aW5nIGluZm9ybWF0aW9uIEVHTCBhbmQgaXRzIGNsaWVudCBBUElzIChPcGVuR0wsIE9wZW5HTCBFUywgT3BlblZHKSIKK1NFQ1RJT04gPSAiZ3JhcGhpY3MiCitMSUNFTlNFID0gIlpsaWIiCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vZHYxL2VnbGluZm8iCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04ZDRmMzNiYzNhZGQ5NzZmN2RmYWU4NWRhYjY2ZjAzYyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2VnbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2R2MS9lZ2xpbmZvLmdpdDticmFuY2g9bWFzdGVyIgorU1JDUkVWID0gIjRiMzE3NjQ4ZWM2Y2YzOTU1NmE5ZTVkODA3OGY2MDViYzBlZGQ1ZGUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgd2FmCisKKyMgQlNQIGxheWVycyBzaG91bGQgYWRkIC5iYmFwcGVuZCBmaWxlcyBmb3IgdGhlIC14MTEgYW5kIC1mYiAuYmIgcmVjaXBlcywgd2hpY2gKKyMgYXBwZW5kIHRoZSByZXNwZWN0aXZlIEVHTC9PcGVuR0xFUy9PcGVuVkcgbGlicmFyaWVzIHRvIERFUEVORFMgYW5kIHNldAorIyBFR0xfREVWSUNFIGFzIGFwcHJvcHJpYXRlLgorRUdMSU5GT19ERVZJQ0UgPz0gImdlbmVyaWMiCisKK0VYVFJBX09FQ09ORiA9ICItLXBsYXRmb3JtPSR7RUdMSU5GT19QTEFURk9STX0gXAorICAgICAgICAgICAgICAgIC0tZGV2aWNlPSR7RUdMSU5GT19ERVZJQ0V9IFwKKyAgICAgICAgICAgICAgICAtLXN5c3Jvb3QgJHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwltdiAke0R9LyR7YmluZGlyfS9lZ2xpbmZvICR7RH0vJHtiaW5kaXJ9LyR7RUdMSU5GT19CSU5BUllfTkFNRX0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTFlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnL3JldmVydC1zdGF0aWMtcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1JldmVydCBwYXJ0IG9mIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9mb250Y29uZmlnL2NvbW1pdC9mb250Y29uZmlnLnBjLmluP2lkPTMzOGZmZTZiODg2YWQ0YmE4NmZmNDcxY2I1OWM0YTVlNWZmYmU0MDgKK1dlIHJlYWxseSBkb250IGRvIHN0YXRpYyBsaW5raW5nIHNvIGl0cyBub3QgZ29pbmcgdG8gY2F1c2UgaXNzdWVzIGZvciB1cyBidXQgYXMgc3VjaCB0aGlzIGlzIGhhcm1pbmcgdXMgYnkgYWRkaW5nIGFic29sdXRlCitwYXRocyBpbnRvIC1JIG9wdGlvbnMgaW50byBmb250Y29uZmlnLnBjIHdoaWNoIGlzIHRoZW0gcHJlcGVuZGVkIHdpdGggc3lzcm9vdCB3aGVuIHJlYWQgYmFjayBieSBjcm9zcyBwa2ctY29uZmlnIGFuZAord2UgZW5kIHVwIHdpdGggLUkgPHN5c3Jvb3Q+LzxzeXNyb290Pi91c3IvaW5jbHVkZS9mb250Y29uZmlnIGluIENGTEFHUyBvZiBjbGllbnRzIHdoaWNoIGRlcGVuZCBvbiBpdC4gb25lIHN1Y2ggZXhhbXBsZQoraXMgbWF0Y2hib3gtcGFuZWwtMiBhbmQgaXQgd2FzIHdvcmtpbmcgZmluZSB3aXRoIGdjYyA8IDUgYmVjYXVzZSBpdCB0b2xlcmF0ZWQgbm9uLWV4aXN0aW5nIHBhdGhzIGluIC1JIGZsYWdzIGJ1dCBnY2MtNQorZ2VudGx5IHJlZnVzZXMgYW5kIHJpZ2h0bHkgc28uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZm9udGNvbmZpZy0yLjExLjkzL2ZvbnRjb25maWcucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBmb250Y29uZmlnLTIuMTEuOTMub3JpZy9mb250Y29uZmlnLnBjLmluCisrKysgZm9udGNvbmZpZy0yLjExLjkzL2ZvbnRjb25maWcucGMuaW4KK0BAIC0xNSw0ICsxNSw0IEBAIFJlcXVpcmVzOiBAUEtHQ09ORklHX1JFUVVJUkVTQAorIFJlcXVpcmVzLnByaXZhdGU6IEBQS0dDT05GSUdfUkVRVUlSRVNfUFJJVkFURUxZQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sZm9udGNvbmZpZworIExpYnMucHJpdmF0ZTogQEVYUEFUX0xJQlNAIEBGUkVFVFlQRV9MSUJTQCBASUNPTlZfTElCU0AgQExJQlhNTDJfTElCU0AKKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBARVhQQVRfQ0ZMQUdTQCBARlJFRVRZUEVfQ0ZMQUdTQCBASUNPTlZfQ0ZMQUdTQCBATElCWE1MMl9DRkxBR1NACisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWdfMi4xMS45NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJmZjIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjExLjk0LmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBmb250IGNvbmZpZ3VyYXRpb24gbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkZvbnRjb25maWcgaXMgYSBmb250IGNvbmZpZ3VyYXRpb24gYW5kIGN1c3RvbWl6YXRpb24gbGlicmFyeSwgd2hpY2ggXAorZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBYIFdpbmRvdyBTeXN0ZW0uIEl0IGlzIGRlc2lnbmVkIHRvIGxvY2F0ZSBcCitmb250cyB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgc2VsZWN0IHRoZW0gYWNjb3JkaW5nIHRvIHJlcXVpcmVtZW50cyBcCitzcGVjaWZpZWQgYnkgYXBwbGljYXRpb25zLiBcCitGb250Y29uZmlnIGlzIG5vdCBhIHJhc3Rlcml6YXRpb24gbGlicmFyeSwgbm9yIGRvZXMgaXQgaW1wb3NlIGEgXAorcGFydGljdWxhciByYXN0ZXJpemF0aW9uIGxpYnJhcnkgb24gdGhlIGFwcGxpY2F0aW9uLiBUaGUgWC1zcGVjaWZpYyBcCitsaWJyYXJ5ICdYZnQnIHVzZXMgZm9udGNvbmZpZyBhbG9uZyB3aXRoIGZyZWV0eXBlIHRvIHNwZWNpZnkgYW5kIFwKK3Jhc3Rlcml6ZSBmb250cy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZm9udGNvbmZpZy5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PWZvbnRjb25maWciCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlICYgTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YTA0NDllOWJjNTM3MDQwMmE5NGMwMDIwNGJlY2EzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmNmcmVldHlwZS5jO2VuZGxpbmU9NDU7bWQ1PTVkOTUxM2UzMTk2YTFmYmZkZmE5NDA1MWMwOWRmYzg0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2NhY2hlLmM7YmVnaW5saW5lPTExOTk7ZW5kbGluZT0xMjE0O21kNT0wMzI2Y2ZlYjRhNzMzM2RkNGRkMjVmYmJjNGI5ZjI3ZiIKKworU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImV4cGF0IGZyZWV0eXBlIHpsaWIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2ZvbnRjb25maWcub3JnL3JlbGVhc2UvZm9udGNvbmZpZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDc5YmU4NzBjN2Y4M2YxNWY4N2JhYzA4NWI2MWQ2NDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzNmNmQzMjNjN2JjZmJkZTI1ZDc4Mzk3Njc1MTkxZDU1YjhmNDEzOTEzMmM2YTk0NDQ0MTBmM2EyZDhhOWE5NSIKKworUEFDS0FHRVMgPSsgImZvbnRjb25maWctdXRpbHMiCitGSUxFU18ke1BOfSA9KyAiJHtkYXRhZGlyfS94bWwvKiIKK0ZJTEVTX2ZvbnRjb25maWctdXRpbHMgPSAiJHtiaW5kaXJ9LyoiCisKKyMgV29yayBhcm91bmQgcGFzdCBicmVha2FnZSBpbiBkZWJpYW4uYmJjbGFzcworUlBST1ZJREVTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JSRVBMQUNFU19mb250Y29uZmlnLXV0aWxzID0gImxpYmZvbnRjb25maWctdXRpbHMiCitSQ09ORkxJQ1RTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK0RFQklBTl9OT0FVVE9OQU1FX2ZvbnRjb25maWctdXRpbHMgPSAiMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZPTlRDT05GSUdfQ0FDSEVfRElSID89ICIke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2ZvbnRjb25maWciCisKK0VYVFJBX09FQ09ORiA9ICIgLS1kaXNhYmxlLWRvY3MgLS13aXRoLWRlZmF1bHQtZm9udHM9JHtkYXRhZGlyfS9mb250cyAtLXdpdGgtY2FjaGUtZGlyPSR7Rk9OVENPTkZJR19DQUNIRV9ESVJ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTk5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnJlZXR5cGUvZnJlZXR5cGVfMi42LmJiCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiRnJlZXR5cGUgZm9udCByZW5kZXJpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkZyZWVUeXBlIGlzIGEgc29mdHdhcmUgZm9udCBlbmdpbmUgdGhhdCBpcyBkZXNpZ25lZCB0byBiZSBzbWFsbCwgZWZmaWNpZW50LCBcCitoaWdobHkgY3VzdG9taXphYmxlLCBhbmQgcG9ydGFibGUgd2hpbGUgY2FwYWJsZSBvZiBwcm9kdWNpbmcgaGlnaC1xdWFsaXR5IG91dHB1dCAoZ2x5cGggXAoraW1hZ2VzKS4gSXQgY2FuIGJlIHVzZWQgaW4gZ3JhcGhpY3MgbGlicmFyaWVzLCBkaXNwbGF5IHNlcnZlcnMsIGZvbnQgY29udmVyc2lvbiB0b29scywgdGV4dCBcCitpbWFnZSBnZW5lcmF0aW9uIHRvb2xzLCBhbmQgbWFueSBvdGhlciBwcm9kdWN0cyBhcyB3ZWxsLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZXR5cGUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9zYXZhbm5haC5ub25nbnUub3JnL2J1Z3MvP2dyb3VwPWZyZWV0eXBlIgorCitMSUNFTlNFID0gIkZyZWVUeXBlIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jcy9MSUNFTlNFLlRYVDttZDU9YzAxN2ZmMTdmYzZmMDc5NGFkZjkzZGI1NTU5Y2NkNTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9GVEwuVFhUO21kNT1kNDc5ZTgzNzk3ZjY5OWZlODczYjM4ZGFkZDBmY2Q0YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0dQTHYyLlRYVDttZDU9OGVmMzgwNDc2ZjY0MmMyMGViZjQwZmVjYjBhZGQyZWMiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZnJlZXR5cGUvZnJlZXR5cGUtJHtQVn0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NjgyODkwY2IwMjY3ZjY2NzFkZDNkZTZlYWJkM2U2OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4NDY5ZmI4MTI0NzY0Zjg1MDI5Y2M4MjQ3YzMxZTEzMmEyYzVlNTEwODRkZGNlMmE0NGVhMzJlZTRhZTgzNDdlIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2ZyZWV0eXBlLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbXVsdGlsaWJfaGVhZGVyCisKK0xJQlRPT0wgPSAiJHtTfS9idWlsZHMvdW5peC8ke0hPU1RfU1lTfS1saWJ0b29sIgorRVhUUkFfT0VNQUtFID0gIidMSUJUT09MPSR7TElCVE9PTH0nIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXpsaWIgLS13aXRob3V0LWJ6aXAyIENDX0JVSUxEPScke0JVSUxEX0NDfSciCitUQVJHRVRfQ1BQRkxBR1MgKz0gIi1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcGl4bWFwXSA9ICItLXdpdGgtcG5nLC0td2l0aG91dC1wbmcsbGlicG5nIgorIyBUaGlzIHJlc3VsdHMgaW4gYSBjaXJjdWxhciBkZXBlbmRlbmN5IHNvIGVuYWJsaW5nIGlzIG5vbi10cml2aWFsCitQQUNLQUdFQ09ORklHW2hhcmZidXp6XSA9ICItLXdpdGgtaGFyZmJ1enosLS13aXRob3V0LWhhcmZidXp6LGhhcmZidXp6IgorCitkb19jb25maWd1cmUoKSB7CisJY2QgYnVpbGRzL3VuaXgKKwlsaWJ0b29saXplIC0tZm9yY2UgLS1jb3B5CisJYWNsb2NhbCAtSSAuCisJZ251LWNvbmZpZ2l6ZSAtLWZvcmNlCisJYXV0b2NvbmYKKwljZCAke1N9CisJb2VfcnVuY29uZgorfQorCitkb19jb25maWd1cmVfY2xhc3MtbmF0aXZlKCkgeworCShjZCBidWlsZHMvdW5peCAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgcnVubmluZyBnbnUtY29uZmlnaXplIgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCSR7QlVJTERfQ0N9IC1vIG9ianMvYXBpbmFtZXMgc3JjL3Rvb2xzL2FwaW5hbWVzLmMKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGZyZWV0eXBlMi9jb25maWcvZnRjb25maWcuaAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWMzM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZzdGVzdHMvZnN0ZXN0c19naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJWYXJpb3VzIGJlbmNobWFybmluZyB0ZXN0cyBmb3IgWCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIlpsaWIiCitERVBFTkRTID0gInBhbmdvIGxpYnhleHQgbGlieGZ0IHZpcnR1YWwvbGlieDExIGd0aysiCisKK1NSQ1JFViA9ICJlNTkzOWZmNjA4Yjk1Y2RkNGQwYWIwZTE5MzU3ODFhYjlhMjc2YWMwIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdGVzdC1wYW5nby1nZGsuYztlbmRsaW5lPTI0O21kNT0xZWU3NGVjODUxZWNkYTU3ZWI3YWM2Y2MxODBmNzY1NSIKKworUyA9ICIke1dPUktESVJ9L2dpdC90ZXN0cyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9hdXRvdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZlMDg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwxNDkgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2xldy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvTWFrZWZpbGUuYW0JMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsNSBAQAorKworK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC0taW5zdGFsbAorKworK1NVQkRJUlMgPSBpbmNsdWRlIHNyYworKworSW5kZXg6IGdsZXcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9jb25maWd1cmUuYWMJMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsNjcgQEAKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisrIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorKworK0FDX1BSRVJFUShbMi42Ml0pCisrQUNfSU5JVChbZ2xld10sIFsxLjkuMF0sIFtCVUctUkVQT1JULUFERFJFU1NdKQorK0FDX0NPTkZJR19TUkNESVIoW3NyYy9nbGV3LmNdKQorK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCisrQU1fSU5JVF9BVVRPTUFLRShbLVdhbGwgLVdlcnJvciBmb3JlaWduXSkKKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisrCisrTFRfSU5JVAorKworKyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKytBQ19QUk9HX0NDCisrQUNfUFJPR19JTlNUQUxMCisrQUNfUFJPR19MTl9TCisrCisrIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKysKKysjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorK0FDX0NIRUNLX0hFQURFUlMoW2ludHR5cGVzLmggc3RkZGVmLmggc3RkaW50Lmggc3RkbGliLmggc3RyaW5nLmhdKQorKworKyMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKytBQ19UWVBFX0lOVDMyX1QKKytBQ19UWVBFX0lOVDY0X1QKKytBQ19UWVBFX1VJTlQ2NF9UCisrQUNfQ0hFQ0tfVFlQRVMoW3B0cmRpZmZfdF0pCisrCisrIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorK0FDX0ZVTkNfTUFMTE9DCisrQUNfQ0hFQ0tfRlVOQ1MoW3N0cnRvbF0pCisrCisrIyBDaGVjayBmb3IgcGtnY29uZmlnIGxpYnMKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWDExXSwgW3gxMV0pCisrQUNfU1VCU1QoW1gxMV9MSUJTXSkKKytBQ19TVUJTVChbWDExX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hNVV0sIFt4bXVdKQorK0FDX1NVQlNUKFtYTVVfTElCU10pCisrQUNfU1VCU1QoW1hNVV9DRkxBR1NdKQorKworK1BLR19DSEVDS19NT0RVTEVTKFtYSV0sIFt4aV0pCisrQUNfU1VCU1QoW1hJX0xJQlNdKQorK0FDX1NVQlNUKFtYSV9DRkxBR1NdKQorKworK1BLR19DSEVDS19NT0RVTEVTKFtYRVhUXSwgW3hleHRdKQorK0FDX1NVQlNUKFtYRVhUX0xJQlNdKQorK0FDX1NVQlNUKFtYRVhUX0NGTEFHU10pCisrCisrIyBDaGVjayBmb3IgR0xVIGlzIGVub3VnaCBhbmQgaW1wbGVzIGdsIHNvIG5vIGRvdWJsZWQgLWxHTCBpbiBMREZMQUdTCisrUEtHX0NIRUNLX01PRFVMRVMoW0dMVV0sIFtnbHVdKQorK0FDX1NVQlNUKFtHTFVfTElCU10pCisrQUNfU1VCU1QoW0dMVV9DRkxBR1NdKQorKworKyMgRU5BQkxFIG9wdGlvbiBmb3IgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIHN1cHBvcnQKKytBQ19DSEVDS19FTkFCTEVfR0xFV01YCisrCisrIyBmb3Igbm93IHdlIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIGFzIHRoZSBwYWNrYWdlLCBidXQgdGhhdCBzaG91bGQgYmUgYXZvaWRlZAorKyMgaW4gdGhlIGZ1dHVyZQorKworK0FDX1NVQlNUKFtMSUJHTEVXX1NPX1ZFUlNJT05dLCBbMTo5OjBdKQorKworK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZV0pCisrQUNfT1VUUFVUCitJbmRleDogZ2xldy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L3NyYy9NYWtlZmlsZS5hbQkyMDA5LTEyLTAyIDAwOjMzOjQ4LjY5MDc4NjExMCArMDEwMAorQEAgLTAsMCArMSwzNSBAQAorKworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKysKKytpZiBFTkFCTEVfR0xFV01YCisrQU1fQ1BQRkxBR1MgKz0gLURHTEVXX01YCisrZW5kaWYKKysKKytBTV9DRkxBR1MgPSBAWDExX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBYTVVfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhJX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBYRVhUX0NGTEFHU0AgXAorKyAgICAgICAgICAgIEBHTFVfQ0ZMQUdTQAorKworK2xpYl9MVExJQlJBUklFUyA9IGxpYkdMRVcubGEKKysKKytsaWJHTEVXX2xhX1NPVVJDRVMgPSBnbGV3LmMKKysKKytsaWJHTEVXX2xhX0xJQkFERCA9IEBYMTFfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQFhNVV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWElfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQFhFWFRfTElCU0AgXAorKyAgICAgICAgICAgICAgICAgICAgQEdMVV9MSUJTQAorKworK2xpYkdMRVdfbGFfTERGTEFHUyA9IC12ZXJzaW9uLW51bWJlciBATElCR0xFV19TT19WRVJTSU9OQAorKworK2Jpbl9QUk9HUkFNUyA9IGdsZXdpbmZvIHZpc3VhbGluZm8KKysKKytnbGV3aW5mb19TT1VSQ0VTID0gZ2xld2luZm8uYworKworK2dsZXdpbmZvX0xEQUREID0gbGliR0xFVy5sYQorKworK3Zpc3VhbGluZm9fU09VUkNFUyA9ICB2aXN1YWxpbmZvLmMKKysKKyt2aXN1YWxpbmZvX0xEQUREID0gbGliR0xFVy5sYQorKworSW5kZXg6IGdsZXcvbTQvZ2xld214Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9tNC9nbGV3bXgubTQJMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsMTEgQEAKKysKKytBQ19ERUZVTihbQUNfQ0hFQ0tfRU5BQkxFX0dMRVdNWF0sWworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIE11bHRpcGxlIFJlbmRlcmluZyBDb250ZXh0cyBzdXBwb3J0XSkKKytBQ19BUkdfRU5BQkxFKFtnbGV3bXhdLAorKyAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2xld214XSwgW2VuYWJsZSBHTEVXIE11bHRpcGxlIFJlbmRlcmluZyBDb250ZXh0cyAoZGVmYXVsdCBpcyBubyldKV0sCisrICAgW0VOQUJMRV9HTEVXTVg9IiRlbmFibGV2YWwiXSwKKysgICBbRU5BQkxFX0dMRVdNWD0ibm8iXSkKKytBQ19NU0dfUkVTVUxUKFske0VOQUJMRV9HTEVXTVh9XSkKKytBTV9DT05ESVRJT05BTChbRU5BQkxFX0dMRVdNWF0sIFt0ZXN0IHgiJHtFTkFCTEVfR0xFV01YfSIgPSAieHllcyJdKQorK10pCisrCitJbmRleDogZ2xldy9pbmNsdWRlL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9pbmNsdWRlL01ha2VmaWxlLmFtCTIwMDktMTItMDIgMDA6MzA6MjMuMjk2NjQxNjYzICswMTAwCitAQCAtMCwwICsxLDMgQEAKKysKKytub2Jhc2VfaW5jbHVkZV9IRUFERVJTID0gR0wvZ2xldy5oICBHTC9nbHhldy5oICBHTC93Z2xldy5oCisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhOTlhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZml4LWdsZXcucGMtaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACisKK1dlIG1haW50YWluIHRoZSBhdXRvdG9vbHMgY29uZmlndXJlLmFjIGFuZCBNYWtlZmlsZS5hbSwgdG8gY29ycmVjdGx5Citwcm92aWRlIHRoZSBnbGV3LnBjLCB0aGUgZm9sbG93aW5nIHBhdGNoIGlzIG5lZWRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdsZXctMS4xMS4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9NYWtlZmlsZS5hbQorKysrIGdsZXctMS4xMS4wL01ha2VmaWxlLmFtCitAQCAtMywzICszLDUgQEAgQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLS1pbnN0YWxsCisgCisgU1VCRElSUyA9IGluY2x1ZGUgc3JjCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gZ2xldy5wYworSW5kZXg6IGdsZXctMS4xMS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsZXctMS4xMS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2xldy0xLjExLjAvY29uZmlndXJlLmFjCitAQCAtNjYsNSArNjYsNiBAQCBBQ19TVUJTVChbTElCR0xFV19TT19WRVJTSU9OXSwgWzE6OTowXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlCisgICAgICAgICAgICAgICAgICBpbmNsdWRlL01ha2VmaWxlCistICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGVdKQorKyAgICAgICAgICAgICAgICAgc3JjL01ha2VmaWxlCisrICAgICAgICAgICAgICAgICBnbGV3LnBjXSkKKyBBQ19PVVRQVVQKK0luZGV4OiBnbGV3LTEuMTEuMC9nbGV3LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9nbGV3LnBjLmluCisrKysgZ2xldy0xLjExLjAvZ2xldy5wYy5pbgorQEAgLTUsNyArNSw3IEBAIGluY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUvR0wKKyAKKyBOYW1lOiBnbGV3CisgRGVzY3JpcHRpb246IFRoZSBPcGVuR0wgRXh0ZW5zaW9uIFdyYW5nbGVyIGxpYnJhcnkKKy1WZXJzaW9uOiBAdmVyc2lvbkAKKy1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAY2ZsYWdzQAorLUxpYnM6IC1MJHtsaWJkaXJ9IC1sQGxpYm5hbWVACistUmVxdWlyZXM6IEByZXF1aXJlc2xpYkAKKytWZXJzaW9uOiBAVkVSU0lPTkAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQ0ZMQUdTQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sR0xFVworK1JlcXVpcmVzOiBnbHUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZ2xld19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDdlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIGZvbGxvd2luZyBpc3N1ZSB3aXRoIGF1dG9tYWtlIDEuMTIKKworfCBhdXRvbWFrZTogd2FybmluZ3MgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IHdhcm5pbmc6ICdsaWJHTEVXLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGdsZXctMS43LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjcuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdsZXctMS43LjAvY29uZmlndXJlLmFjCitAQCAtMTQsNiArMTQsOSBAQCBMVF9JTklUCisgQUNfUFJPR19DQworIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfTE5fUworKyMgYXV0b21ha2UgMS4xMiBzZWVtcyB0byByZXF1aXJlIHRoaXMsIGJ1dCBhdXRvbWFrZSAxLjExIGRvZXNuJ3QgcmVjb2duaXplIGl0CisrbTRfcGF0dGVybl9hbGxvdyhbQU1fUFJPR19BUl0pCisrQU1fUFJPR19BUgorIAorICMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTIuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjhjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3XzEuMTIuMC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIk9wZW5HTCBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgTGlicmFyeSAoR0xFVykgaXMgYSBjcm9zcy1wbGF0Zm9ybSBvcGVuLXNvdXJjZSBDL0MrKyBleHRlbnNpb24gbG9hZGluZyBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9nbGV3LnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9Njc1ODYiCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTJhYzI1MTU1OGRlNjg1YzZiOTQ3OGQ4OWJlMzE0OWMyIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHZpcnR1YWwvbGliZ2wgbGliZ2x1IGxpYnhleHQgbGlieGkgbGlieG11IgorCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvZ2xldy9nbGV3LyR7UFZ9L2dsZXctJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMTI0NmM3ZWNkMTM1ZDk5YmUwMzFhYTYzZjg2ZGNhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZjU4MTAzZjQ4MjRiNDQzZTdmYTRlZDNhZjU5M2I4ZWRhYzZmM2E3YmUzYjMwOTExZWRiYzczNDRmNDhlNGJmIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4wLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaGFyZmJ1enovaGFyZmJ1enpfMS4wLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwYmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjAuMi5iYgpAQCAtMCwwICsxLDM1IEBACitTVU1NQVJZID0gIlRleHQgc2hhcGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiSGFyZkJ1enogaXMgYW4gT3BlblR5cGUgdGV4dCBzaGFwaW5nIGVuZ2luZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0hhcmZCdXp6IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1IYXJmQnV6eiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDIxZGQ2ZGRhNmZmMWU2YjEwNDQwMDJmYzY2MmI5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaGItdWNkbi9DT1BZSU5HO21kNT05OTRiYTBmMTI5NWYxNWI0YmRhNDk5OWE1YmJlZGRlZiBcCisiCisKK1NFQ1RJT04gPSAibGlicyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9oYXJmYnV6ei9yZWxlYXNlLyR7QlB9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiZTc0ZjY0NDA0NWZlNDJjMzhhMjY0MWZjMWU4MmE4MDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmViM2NhZjg2NTQwMTBmY2RjYTYxYzgxMGEzYTc1MzIyMzdmYzU2N2VlNDI3MWRlYjY3NGI1ZWZiYmUzYjQ2NiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gZnJlZXR5cGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWdsaWIgLS13aXRoLWZyZWV0eXBlIC0td2l0aC1jYWlybyAtLXdpdGhvdXQtZ3JhcGhpdGUyIgorCitQQUNLQUdFQ09ORklHID8/PSAiaWN1IgorUEFDS0FHRUNPTkZJR1tpY3VdID0gIi0td2l0aC1pY3UsLS13aXRob3V0LWljdSxpY3UiCisKK1BBQ0tBR0VTID0rICIke1BOfS1pY3UgJHtQTn0taWN1LWRiZyAke1BOfS1pY3UtZGV2IgorCitGSUxFU18ke1BOfS1pY3UgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5zby4qIgorRklMRVNfJHtQTn0taWN1LWRiZyA9ICIke2xpYmRpcn0vLmRlYnVnL2xpYmhhcmZidXp6LWljdS5zbyoiCitGSUxFU18ke1BOfS1pY3UtZGV2ID0gIiR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3UubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9oYXJmYnV6ei1pY3UucGMgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWNsdXR0ZXIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGYyNWNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWNsdXR0ZXIuYmIKQEAgLTAsMCArMSwxMyBAQAorREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2Ugd2l0aCBzdXBwb3J0IGZvciB0aGUgT3BlbiBHTC1iYXNlZCB0b29sa2l0IENsdXR0ZXIsIFwKK3doaWNoIGVuYWJsZXMgZGV2ZWxvcG1lbnQgb2YgcmljaCBhbmQgYW5pbWF0ZWQgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIHgxMS1zYXRvIHNzaC1zZXJ2ZXItZHJvcGJlYXIiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitJTUFHRV9JTlNUQUxMID0gIlwKKyAgICAke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci1jb3JlIFwKKyAgICAiCisKK2luaGVyaXQgY29yZS1pbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLWRpcmVjdGZiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDExOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJBbiBpbWFnZSB0aGF0IHVzZXMgRGlyZWN0RkIgaW5zdGVhZCBvZiBYMTEiCitMSUNFTlNFID0gIk1JVCIKKworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiZGlyZWN0ZmIiCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitJTUFHRV9JTlNUQUxMICs9ICJcCisJJHtDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTH0gXAorCXBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisJcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlMjcxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS13ZXN0b24uYmIKQEAgLTAsMCArMSwxMSBAQAorU1VNTUFSWSA9ICJBIHZlcnkgYmFzaWMgV2F5bGFuZCBpbWFnZSB3aXRoIGEgdGVybWluYWwiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHNzaC1zZXJ2ZXItZHJvcGJlYXIgaHdjb2RlY3MiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ3YXlsYW5kIgorCitDT1JFX0lNQUdFX0JBU0VfSU5TVEFMTCArPSAid2VzdG9uIHdlc3Rvbi1pbml0IHdlc3Rvbi1leGFtcGxlcyBndGsrMy1kZW1vIGNsdXR0ZXItMS4wLWV4YW1wbGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXgxMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1NWJiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS14MTEuYmIKQEAgLTAsMCArMSw5IEBACitTVU1NQVJZID0gIkEgdmVyeSBiYXNpYyBYMTEgaW1hZ2Ugd2l0aCBhIHRlcm1pbmFsIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHBhY2thZ2UtbWFuYWdlbWVudCB4MTEtYmFzZSIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0YzhlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoCkBAIC0wLDAgKzEsMTI4IEBACitGcm9tIDNhOTMxNTBiYzBhZWM4NmFmZGI3ZDA1MzI0N2RjMjQ0ODkyNWUwOWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW5kcmVhcz0yME09QzM9QkNsbGVyPz0gPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CitEYXRlOiBXZWQsIDYgTWF5IDIwMTUgMTA6NDU6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHNlbGVjdCBwbGF0Zm9ybXMgYmFzZWQgb24gY29uZmlndXJhdGlvbiByZXN1bHRzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS9wdWxsLzUyCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8IDEzICsrKysrLS0tLS0tLS0KKyBzcmMvZGlzcGF0Y2hfY29tbW9uLmMgfCAgOSArKysrKystLS0KKyBzcmMvZGlzcGF0Y2hfY29tbW9uLmggfCAgOSArKysrKy0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNTJmYzU4Li5iZGQ3MGRhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01OCw2ICs1OCwxMCBAQCBBQ19DSEVDS19IRUFERVIoW0tIUi9raHJwbGF0Zm9ybS5oXSwKKyAjIHVpbnRwdHJfdCB0byBhIHZvaWQgKiIpIGJ5IGRlZmF1bHQuICBLaWxsIHRoYXQuCisgWE9SR19URVNUU0VUX0NGTEFHKENXQVJORkxBR1MsIFstV25vLWludC1jb252ZXJzaW9uXSkKKyAKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPXllc10sIFt4MTE9bm9dKQorKworK0FNX0NPTkRJVElPTkFMKEhBVkVfWDExLCB0ZXN0IHgkeDExID0geHllcykKKysKKyBoYXNfem5vdz15ZXMKKyAKKyBjYXNlICRob3N0X29zIGluCitAQCAtODYsNyArOTAsNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgICAgICA7OworICAgICAqKQorICAgICAgICAgYnVpbGRfZWdsPXllcworLSAgICAgICAgYnVpbGRfZ2x4PXllcworKyAgICAgICAgYnVpbGRfZ2x4PSR4MTEKKyAgICAgICAgIGJ1aWxkX3dnbD1ubworICAgICAgICAgIyBPbiBwbGF0Zm9ybXMgd2l0aCBkbG9wZW4sIHdlIGxvYWQgZXZlcnl0aGluZyBkeW5hbWljYWxseSBhbmQKKyAgICAgICAgICMgZG9uJ3QgbGluayBhZ2FpbnN0IGEgc3BlY2lmaWMgd2luZG93IHN5c3RlbSBvciBHTCBpbXBsZW1lbnRhdGlvbi4KK0BAIC0xNDQsMTMgKzE0OCw2IEBAIGVzYWMKKyAKKyBBQ19TVUJTVChbVklTSUJJTElUWV9DRkxBR1NdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9eWVzXSwgW3gxMT1ub10pCistaWYgdGVzdCB4JHgxMSA9IHhubyAtYSB4JGJ1aWxkX2dseCA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX0VSUk9SKFtsaWJYMTEgaGVhZGVycyAobGlieDExLWRldikgcmVxdWlyZWQgdG8gYnVpbGQgd2l0aCBHTFggc3VwcG9ydF0pCistZmkKKy0KKy1BTV9DT05ESVRJT05BTChIQVZFX1gxMSwgdGVzdCB4JHgxMSA9IHh5ZXMpCistCisgUEtHX0NIRUNLX01PRFVMRVMoR0wsIFtnbF0sIFtnbD15ZXNdLCBbZ2w9bm9dKQorIAorIEFDX0NPTkZJR19GSUxFUyhbCitkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jIGIvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jCitpbmRleCA0ZTM0ZDZlLi4yYWI4NGVkIDEwMDY0NAorLS0tIGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5jCisrKysgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKK0BAIC02MTUsMTAgKzYxNSwxMyBAQCBlcG94eV9nZXRfcHJvY19hZGRyZXNzKGNvbnN0IGNoYXIgKm5hbWUpCisgI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgIHJldHVybiBlcG94eV9nbF9kbHN5bShuYW1lKTsKKyAjZWxzZQorKyNpZiBQTEFURk9STV9IQVNfR0xYCisgICAgIGlmIChlcG94eV9jdXJyZW50X2NvbnRleHRfaXNfZ2x4KCkpIHsKKyAgICAgICAgIHJldHVybiBnbFhHZXRQcm9jQWRkcmVzc0FSQigoY29uc3QgR0x1Ynl0ZSAqKW5hbWUpOworLSAgICB9IGVsc2UgeworKyAgICB9IGVsc2UKKysjZW5kaWYgLyogUExBVEZPUk1fSEFTX0dMWCAqLworICNpZiBQTEFURk9STV9IQVNfRUdMCisrICAgIHsKKyAgICAgICAgIEdMZW51bSBlZ2xfYXBpID0gZXBveHlfZWdsX2dldF9jdXJyZW50X2dsX2NvbnRleHRfYXBpKCk7CisgCisgICAgICAgICBzd2l0Y2ggKGVnbF9hcGkpIHsKK0BAIC02MjgsMTAgKzYzMSwxMCBAQCBlcG94eV9nZXRfcHJvY19hZGRyZXNzKGNvbnN0IGNoYXIgKm5hbWUpCisgICAgICAgICBjYXNlIEVHTF9OT05FOgorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLSNlbmRpZgorICAgICB9CisrI2VuZGlmIC8qIFBMQVRGT1JNX0hBU19FR0wgKi8KKyAgICAgZXJyeCgxLCAiQ291bGRuJ3QgZmluZCBjdXJyZW50IEdMWCBvciBFR0wgY29udGV4dC5cbiIpOworLSNlbmRpZgorKyNlbmRpZiAvKiBfV0lOMzIgfCBfX0FQUExFX18qLworIH0KKyAKKyB2b2lkCitkaWZmIC0tZ2l0IGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oIGIvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oCitpbmRleCA2Yjg1MDNhLi44MjY4MWU0IDEwMDY0NAorLS0tIGEvc3JjL2Rpc3BhdGNoX2NvbW1vbi5oCisrKysgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKK0BAIC0yMSwxMiArMjEsMTMgQEAKKyAgKiBJTiBUSEUgU09GVFdBUkUuCisgICovCisgCisrI2luY2x1ZGUgPGNvbmZpZy5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgCisgI2lmZGVmIF9XSU4zMgorICNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAwCisgI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDAKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMQorKyNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCBCVUlMRF9XR0wKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMAorQEAgLTM0LDEzICszNSwxMyBAQAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZWxpZiBkZWZpbmVkKEFORFJPSUQpCistI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDEKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgQlVJTERfRUdMCisgI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDAKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUCisgI2Vsc2UKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMQorLSNkZWZpbmUgUExBVEZPUk1fSEFTX0dMWCAxCisrI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIEJVSUxEX0VHTAorKyNkZWZpbmUgUExBVEZPUk1fSEFTX0dMWCBCVUlMRF9HTFgKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19XR0wgMAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUCisgI2VuZGlmCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjJkNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDItYWRkLWFuLW9wdGlvbi10by1kaXNhYmxlLWdseC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMjQ4NjhjYmZiOWRkYTVmNjkyOWRkMjc3YzQ3ZDM1ZGYwMTZlODc1NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAxNSAxMTowNTo0OCArMDIwMAorU3ViamVjdDogW1BBVENIIDIvMl0gYWRkIGFuIG9wdGlvbiB0byBkaXNhYmxlIGdseCBzdXBwb3J0CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK3RoaXMgb3B0aW9uIHdvdWxkIGhlbHAgdXMgaW4geW9jdG8gdG8gZ2V0IGRldGVybWluaXN0aWMgYnVpbGQgcmVzdWx0cworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbMV0KKworWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkvcHVsbC81MgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmRkNzBkYS4uNmM3MTUzZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTgsNyArNTgsMTQgQEAgQUNfQ0hFQ0tfSEVBREVSKFtLSFIva2hycGxhdGZvcm0uaF0sCisgIyB1aW50cHRyX3QgdG8gYSB2b2lkICoiKSBieSBkZWZhdWx0LiAgS2lsbCB0aGF0LgorIFhPUkdfVEVTVFNFVF9DRkxBRyhDV0FSTkZMQUdTLCBbLVduby1pbnQtY29udmVyc2lvbl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT15ZXNdLCBbeDExPW5vXSkKKytBQ19BUkdfRU5BQkxFKFtnbHhdLAorKyAgICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1nbHhdLAorKwkJCQlbZGlzYWJsZSBpZiB5b3UgZG9uJ3Qgd2FudCB4MTEvZ2x4IHN1cHBvcnRdKV0sCisrICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICBbZW5hYmxlX2dseD15ZXNdCisrICAgICAgICAgICAgICkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPSRlbmFibGVfZ2x4XSwgW3gxMT1ub10pCisgCisgQU1fQ09ORElUSU9OQUwoSEFWRV9YMTEsIHRlc3QgeCR4MTEgPSB4eWVzKQorIAorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvbm8tbmVlZC1mb3ItcHl0aG9uMy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOGZlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvbm8tbmVlZC1mb3ItcHl0aG9uMy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitUaGVyZSBpcyBubyBuZWVkIHRvIHVzZSBweXRob24zIGJ5IHRoaXMgcGFja2FnZSAodGhlIHB5dGhvbiBzY3JpcHRzCit0aGF0IGFyZSB1c2luZyBkdXJpbmcgY29uZmlndXJhdGlvbiBvbmx5IG5lZWQgcHl0aG9uMi43KykKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBHYXJ5IFRob21hcyA8Z2FyeUBtbGJhc3NvYy5jb20+CistLQorSW5kZXg6IGdpdC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9jb25maWd1cmUuYWMKKysrKyBnaXQvY29uZmlndXJlLmFjCitAQCAtNDAsNyArNDAsNyBAQCBtNF9pZm5kZWYoW1hPUkdfTUFDUk9TX1ZFUlNJT05dLAorIFhPUkdfTUFDUk9TX1ZFUlNJT04oMS44KQorIFhPUkdfREVGQVVMVF9PUFRJT05TCisgCistQUNfQ0hFQ0tfUFJPR1MoW1BZVEhPTl0sIFtweXRob24zIHB5dGhvbjIgcHl0aG9uXSkKKytBQ19DSEVDS19QUk9HUyhbUFlUSE9OXSwgW3B5dGhvbjIgcHl0aG9uXSkKKyAKKyAjIEluaXRpYWxpemUgbGlidG9vbAorIEFDX0RJU0FCTEVfU1RBVElDCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE3MjkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5X2dpdC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIk9wZW5HTCBmdW5jdGlvbiBwb2ludGVyIG1hbmFnZW1lbnQgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9hbmhvbHQvbGliZXBveHkvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU4ZWY0YzgwZDQwMWUwN2JkOWVlOGI2YjU4Y2Y0NjRiIgorCisKK1NSQ19VUkkgPSAiIFwKKyAgICBnaXQ6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS5naXQgXAorICAgIGZpbGU6Ly8wMDAxLXNlbGVjdC1wbGF0Zm9ybXMtYmFzZWQtb24tY29uZmlndXJhdGlvbi1yZXN1bHRzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly9uby1uZWVkLWZvci1weXRob24zLnBhdGNoIFwKKyIKK1NSQ1JFVj0iZTJjMzNhZjViZmNmYzlkMTY4ZjllNzc2MTU2ZGQ0N2MzM2Y0MjhiMyIKK1BWID0gIjEuMy4xIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyB2aXJ0dWFsL2VnbCIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLWdseCwgLS1kaXNhYmxlLWdseCwgdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZGRlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJmYWtla2V5L2xpYmZha2VrZXlfZ2l0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgY29udmVydGluZyBjaGFyYWN0ZXJzIHRvIFgga2V5LXByZXNzZXMiCitERVNDUklQVElPTiA9ICJsaWJmYWtla2V5IGlzIGEgc2ltcGxlIGxpYnJhcnkgZm9yIGNvbnZlcnRpbmcgVVRGLTggY2hhcmFjdGVycyBpbnRvICdmYWtlJyBYIFwKK2tleS1wcmVzc2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL2xpYmZha2VrZXkuYztlbmRsaW5lPTMwO21kNT02MDJiNWNjZDQ4ZjY0NDA3NTEwODY3ZjMzNzNiNDQ4YyIKKworREVQRU5EUyA9ICJsaWJ4dHN0IgorU0VDVElPTiA9ICJ4MTEvd20iCisKK1NSQ1JFViA9ICJlMzI3ZmYwNDliODUwM2FmMmRhZGZmYTg0MzcwYTA4NjBiOWZiNjgyIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh0c3QgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZDUwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3gvbGlicG5nLnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gMTljM2QyNDIwMzQ3NDhiM2M2MDc2NTY4M2UxZmY0ZTJkZjk3MDIwNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUdWUsIDEwIERlYyAyMDEzIDExOjM3OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogaW1wcm92ZSBsaWJwbmcgZGV0ZWN0aW9uCisKK0luc3RlYWQgb2YgbG9va2luZyBmb3IgImxpYnBuZzEyIiBleHBsaWNpdGx5IHRob3VnaCBwa2ctY29uZmlnIGFuZCB0aGVuIGZhbGxpbmcKK2JhY2sgdG8gbGlicmFyeSBodW50aW5nLCBqdXN0IHVzZSBwa2ctY29uZmlnIHRvIGZpbmQgImxpYnBuZyIgd2hpY2ggaXMgcHJvdmlkZWQKK2J5IGJvdGggbGlicG5nMTIgYW5kIGxpYnBuZzE2LgorCitUaGlzIGFsc28gbWFrZXMgdGhlIGxpYnBuZyBkZXRlY3Rpb24gZGV0ZXJtaW5pc3RpYy4KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI5ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhhMjgwNzYuLjY1ZDdjNzkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM0LDcgKzM0LDcgQEAgQUNfQVJHX0VOQUJMRShqcGVnLAorICAgZW5hYmxlX2pwZWc9JGVuYWJsZXZhbCwgZW5hYmxlX2pwZWc9bm8pCisgCisgQUNfQVJHX0VOQUJMRShwbmcsCistICBbICAtLWRpc2FibGUtcG5nICAgICAgICAgICBkaXNhYmxlIHBuZyBzdXBwb3J0IFtkZWZhdWx0PW5vXV0sCisrICBbICAtLWRpc2FibGUtcG5nICAgICAgICAgICBkaXNhYmxlIFBORyBzdXBwb3J0IFtkZWZhdWx0PWVuYWJsZWRdXSwKKyAgICAgIGVuYWJsZV9wbmc9JGVuYWJsZXZhbCwgZW5hYmxlX3BuZz15ZXMgKQorIAorIEFDX0FSR19FTkFCTEUoZG94eWdlbi1kb2NzLCAgICAgCitAQCAtMTU2LDI5ICsxNTYsMTAgQEAgZmkKKyBkbmwgLS0tLS0tIENoZWNrIGZvciBQTkcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisgaWYgdGVzdCB4JGVuYWJsZV9wbmcgIT0geG5vOyB0aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpYnBuZzEyKQorLSAgaWYgdGVzdCB4JFBLR19DT05GSUcgIT0geG5vICYmICRQS0dfQ09ORklHIC0tZXhpc3RzIGxpYnBuZzEyOyB0aGVuIAorLSAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCistICAgICAgICBQTkdfTElCUz1gJFBLR19DT05GSUcgLS1saWJzIGxpYnBuZzEyYAorLQlQTkdfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyBsaWJwbmcxMmAKKy0gICAgICAgIEFDX0RFRklORShVU0VfUE5HLCBbMV0sIFtVc2UgUG5nXSkKKy0JU1VQUE9SVFNfUE5HPTEKKy0JUE5HX1JFUVVJUkVEPSJsaWJwbmcxMiIKKy0gIGVsc2UKKy0JQUNfTVNHX1JFU1VMVChubykKKy0gICAgICAgICMgQUNfQ0hFQ0tfSEVBREVSUyhwbmcuaCwgWyBoYXZlX3BuZ19oPSJ5ZXMiIF0sIFsgaGF2ZV9wbmdfaD0ibm8iIF0gKQorLSAgICAgICAgQUNfQ0hFQ0tfTElCKFtwbmddLCBbcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdF0sIFtoYXZlX3BuZz0ieWVzIl0sIFtoYXZlX3BuZz0ibm8iXSkKKy0KKy0gICAgICAgIGlmIHRlc3QgeCRoYXZlX3BuZz14eWVzICYmIHRlc3QgeCRoYXZlX3BuZ19oPXh5ZXM7IHRoZW4gCistICAgICAgICAgICAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQbmddKQorLQkgICAgU1VQUE9SVFNfUE5HPTEKKy0gICAgICAgICAgICBQTkdfTElCUz0iLWxwbmcgLWx6IgorLSAgICAgICAgICAgIE1CX0VYVFJBX0xJQlM9IiRNQl9FWFRSQV9MSUJTICRQTkdfTElCUyIKKy0gICAgICAgIGVsc2UKKy0JICAgIEFDX01TR19XQVJOKFsqKiogQ2Fubm90IGZpbmQgUE5HLCBkaXNhYmxpbmcgc3VwcG9ydF0pCistICAgICAgICAgICAgZW5hYmxlX3BuZz1ubworLQlmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFBORywgbGlicG5nKQorKyAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQTkddKQorKyAgU1VQUE9SVFNfUE5HPTEKKysgIFBOR19SRVFVSVJFRD0ibGlicG5nIgorIGZpCisgCisgCistLSAKKzEuOC41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlYjY3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveF8xLjExLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgY29yZSBsaWJyYXJ5IgorU0VDVElPTiA9ICJ4MTEvbGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3QuY29tLyIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlibWIvbWJleHAuYztlbmRsaW5lPTIwO21kNT0yOGMwYWVmM2IyM2UzMDg0NjRmNWRhZTZhMTFiMGQyZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmRvdGRlc2t0b3AuYztlbmRsaW5lPTIxO21kNT01YTI4NzE1NmIzMjA3ZTg1MWMxZDY4ZDA5YzQzOWI1MSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC8ke0JQTn0vJHtQVn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGlicG5nLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmM2Y2M4MDdmNTVhM2U3Yzc1MmQ4MDEzMTc2ODc1ZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU0Y2FiNTJlMzA0YTM1MTJjOGRmNGJlNTlkNjkwY2YzOTIxYmJiNjhhMjhlZGU3ZmUyNmI5MzUzNDIxN2I1MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAianBlZyBwbmcgeGZ0IHhzZXR0aW5ncyIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1twYW5nb10gPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgorUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLGxpYnBuZyIKK1BBQ0tBR0VDT05GSUdbeGZ0XSA9ICItLWVuYWJsZS14ZnQsLS1kaXNhYmxlLXhmdCxsaWJ4ZnQiCitQQUNLQUdFQ09ORklHW3hzZXR0aW5nc10gPSAiLS1lbmFibGUteHNldHRpbmdzLC0tZGlzYWJsZS14c2V0dGluZ3MsbGlieHNldHRpbmdzLWNsaWVudCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9jb25maWd1cmVfdHdlYWsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvY29uZmlndXJlX3R3ZWFrLnBhdGNoCkBAIC0wLDAgKzEsMTExMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogU0RMLTEuMi4xNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBTREwtMS4yLjE1Lm9yaWcvY29uZmlndXJlLmluCisrKysgU0RMLTEuMi4xNS9jb25maWd1cmUuaW4KK0BAIC00OCw5ICs0OCw5IEBAIEFDX0NPTkZJR19BVVhfRElSKFtidWlsZC1zY3JpcHRzXSkKKyBkbmwgQUNfQ0FOT05JQ0FMX0hPU1QKKyBBQ19DX0JJR0VORElBTgorIGlmIHRlc3QgeCRhY19jdl9jX2JpZ2VuZGlhbiA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDQzMjEpCisrICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCA0MzIxLCAiQnl0ZSBPcmRlciIpCisgZWxzZQorLSAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgMTIzNCkKKysgICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDEyMzQsICJCeXRlIE9yZGVyIikKKyBmaQorIAorIGRubCBDaGVjayBmb3IgdG9vbHMKK0BAIC0xMzQsNyArMTM0LDcgQEAgQUNfQVJHX0VOQUJMRShsaWJjLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1saWJjXSwgW1VzZSB0aGUgc3lzdGVtIEMgbGlicmFyeSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2xpYmM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKEhBVkVfTElCQykKKysgICAgQUNfREVGSU5FKEhBVkVfTElCQywxLCIiKQorIAorICAgICBkbmwgQ2hlY2sgZm9yIEMgbGlicmFyeSBoZWFkZXJzCisgICAgIEFDX0hFQURFUl9TVERDCitAQCAtMTQ1LDcgKzE0NSw3IEBAIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geHllcyAtbyB4JGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIEFDX0NIRUNLX1RZUEUoaW50NjRfdCkKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl90eXBlX2ludDY0X3QgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFLDEsIiIpCisgICAgICAgICBmaQorICAgICAgICAgaGF2ZV9pbnR0eXBlcz15ZXMKKyAgICAgZmkKK0BAIC0xNjEsMTEgKzE2MSwxMSBAQCBpZiB0ZXN0IHgkZW5hYmxlX2xpYmMgPSB4eWVzOyB0aGVuCisgCisgICAgIEFDX0ZVTkNfTUVNQ01QCisgICAgIGlmIHRlc3QgeCRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfTUVNQ01QKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfTUVNQ01QLDEsIiIpCisgICAgIGZpCisgICAgIEFDX0ZVTkNfU1RSVE9ECisgICAgIGlmIHRlc3QgeCRhY19jdl9mdW5jX3N0cnRvZCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShIQVZFX1NUUlRPRCkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1NUUlRPRCwxLCIiKQorICAgICBmaQorICAgICBBQ19DSEVDS19GVU5DKG1wcm90ZWN0LAorICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworQEAgLTE5MSw0MCArMTkxLDQwIEBAIGlmIHRlc3QgeCRoYXZlX2ludHR5cGVzICE9IHh5ZXM7IHRoZW4KKyAgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcsIDQpCisgICAgIEFDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcsIDgpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfY2hhciA9IHgxOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50OF90LCBzaWduZWQgY2hhcikKKy0gICAgICAgIEFDX0RFRklORSh1aW50OF90LCB1bnNpZ25lZCBjaGFyKQorKyAgICAgICAgQUNfREVGSU5FKGludDhfdCwgc2lnbmVkIGNoYXIsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDhfdCwgdW5zaWduZWQgY2hhciwiIikKKyAgICAgZmkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9zaG9ydCA9IHgyOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIHNob3J0KQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBzaG9ydCkKKysgICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgc2hvcnQsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIHNob3J0LCIiKQorICAgICBlbHNlCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2ludCA9IHgyOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBpbnQpCistICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBpbnQpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBpbnQsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQxNl90LCB1bnNpZ25lZCBpbnQsIiIpCisgICAgICAgICBmaQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2ludCA9IHg0OyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGludCkKKy0gICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgaW50KQorKyAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBpbnQsIiIpCisrICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGludCwiIikKKyAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9sb25nID0geDQ7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGxvbmcpCistICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBsb25nKQorKyAgICAgICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgbG9uZywiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGxvbmcsIiIpCisgICAgICAgICBmaQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2xvbmcgPSB4ODsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nKQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nKQorLSAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSkKKysgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZywiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZywiIikKKysgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsIiIpCisgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfbG9uZ19sb25nID0geDg7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZyBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZyBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsIiIpCisgICAgICAgICBmaQorICAgICBmaQorLSAgICBBQ19ERUZJTkUoc2l6ZV90LCB1bnNpZ25lZCBpbnQpCistICAgIEFDX0RFRklORSh1aW50cHRyX3QsIHVuc2lnbmVkIGxvbmcpCisrICAgIEFDX0RFRklORShzaXplX3QsIHVuc2lnbmVkIGludCwiIikKKysgICAgQUNfREVGSU5FKHVpbnRwdHJfdCwgdW5zaWduZWQgbG9uZywiIikKKyBmaQorIAorICMgU3RhbmRhcmQgQyBzb3VyY2VzCitAQCAtMjQ1LDI1ICsyNDUsMjUgQEAgQUNfQVJHX0VOQUJMRShhdWRpbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXVkaW9dLCBbRW5hYmxlIHRoZSBhdWRpbyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9hdWRpbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQVVESU9fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfQVVESU9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUodmlkZW8sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvXSwgW0VuYWJsZSB0aGUgdmlkZW8gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW89eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGV2ZW50cywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXZlbnRzXSwgW0VuYWJsZSB0aGUgZXZlbnRzIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2V2ZW50cz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9ldmVudHMgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0VWRU5UU19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9FVkVOVFNfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoam95c3RpY2ssCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWpveXN0aWNrXSwgW0VuYWJsZSB0aGUgam95c3RpY2sgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfam95c3RpY2s9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RJU0FCTEVELDEsIiIpCisgZWxzZQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay8qLmMiCisgZmkKK0BAIC0yNzEsNDMgKzI3MSw0MyBAQCBBQ19BUkdfRU5BQkxFKGNkcm9tLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jZHJvbV0sIFtFbmFibGUgdGhlIGNkcm9tIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2Nkcm9tPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRSh0aHJlYWRzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aHJlYWRzXSwgW0VuYWJsZSB0aGUgdGhyZWFkaW5nIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX3RocmVhZHM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVEhSRUFEU19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKHRpbWVycywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGltZXJzXSwgW0VuYWJsZSB0aGUgdGltZXIgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdGltZXJzPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShmaWxlLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1maWxlXSwgW0VuYWJsZSB0aGUgZmlsZSBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9maWxlPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2ZpbGUgIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0ZJTEVfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfRklMRV9ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShsb2Fkc28sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxvYWRzb10sIFtFbmFibGUgdGhlIHNoYXJlZCBvYmplY3QgbG9hZGluZyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9sb2Fkc289eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGNwdWluZm8sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNwdWluZm9dLCBbRW5hYmxlIHRoZSBjcHVpbmZvIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2NwdWluZm89eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfY3B1aW5mbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfQ1BVSU5GT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9DUFVJTkZPX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGFzc2VtYmx5LAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hc3NlbWJseV0sIFtFbmFibGUgYXNzZW1ibHkgcm91dGluZXMgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9hc3NlbWJseT15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9hc3NlbWJseSA9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9BU1NFTUJMWV9ST1VUSU5FUykKKysgICAgQUNfREVGSU5FKFNETF9BU1NFTUJMWV9ST1VUSU5FUywxLCIiKQorIGZpCisgCisgZG5sIFNlZSBpZiB0aGUgT1NTIGF1ZGlvIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQKK0BAIC0zMzUsMTIgKzMzNSwxMiBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtb3NzXSwgW3N1cHBvcnQKKyAgICAgICAgICAgICAgIGludCBhcmcgPSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOworICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgIGhhdmVfb3NzPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TU19TT1VORENBUkRfSCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9PU1NfU09VTkRDQVJEX0gsMSwiIikKKyAgICAgICAgICAgICBdKQorICAgICAgICAgZmkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfb3NzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfb3NzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9PU1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kc3AvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2RtYS8qLmMiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC00MDcsNyArNDA3LDcgQEAgQ2hlY2tETUVESUEoKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9kbWVkaWEpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2RtZWRpYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ETUVESUEpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRE1FRElBLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZG1lZGlhLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGF1ZGlvIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNDQ0LDcgKzQ0NCw3IEBAIENoZWNrTU1FKCkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfbW1lKQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9tbWUgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTU1FQVVESU8pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTU1FQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9tbWUvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkTU1FX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkTU1FX0xJQlMiCitAQCAtNDY3LDcgKzQ2Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1lc2Qtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX2VzZF9zaGFyZWQ9eWVzKQorICAgICAgICAgICAgIGVzZF9saWI9W2BmaW5kX2xpYiAibGliZXNkLnNvLioiICIkRVNEX0xJQlMiIHwgc2VkICdzLy4qXC9cKC4qXCkvXDEvOyBxJ2BdCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRVNEKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0VTRCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2VzZC8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRFU0RfQ0ZMQUdTIgorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyAhPSB4eWVzICYmIFwKK0BAIC00NzcsNyArNDc3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVzZC1zaGFyZWRdLCBbZAorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyA9IHh5ZXMgJiYgXAorICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfZXNkX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JGVzZF9saWIgIT0geDsgdGhlbgorICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYmVzZCAtPiAkZXNkX2xpYiIKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfRVNEX0RZTkFNSUMsICIkZXNkX2xpYiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0VTRF9EWU5BTUlDLCAiJGVzZF9saWIiLCAiIikKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRFU0RfTElCUyIKKyAgICAgICAgICAgICBmaQorQEAgLTU2NCw3ICs1NjQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXJ0cy1zaGFyZWRdLCBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfYXJ0c19zaGFyZWQ9eWVzKQorICAgICAgICAgICAgICAgICBhcnRzX2xpYj1bYGZpbmRfbGliICJsaWJhcnRzYy5zby4qIiAiJEFSVFNfTElCUyIgfCBzZWQgJ3MvLipcL1woLipcKS9cMS87IHEnYF0KKyAKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQVJUUykKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQVJUUywsICIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9hcnRzLyouYyIKKyAgICAgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRBUlRTX0NGTEFHUyIKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvICE9IHh5ZXMgJiYgXAorQEAgLTU3NCw3ICs1NzQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXJ0cy1zaGFyZWRdLCBbCisgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyA9IHh5ZXMgJiYgXAorICAgICAgICAgICAgICAgICAgICB0ZXN0IHgkZW5hYmxlX2FydHNfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkYXJ0c19saWIgIT0geDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJhcnRzYyAtPiAkYXJ0c19saWIiCistICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9BUlRTX0RZTkFNSUMsICIkYXJ0c19saWIiKQorKyAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfQVJUU19EWU5BTUlDLCAiJGFydHNfbGliIiwxLCIiKQorICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkQVJUU19MSUJTIgorICAgICAgICAgICAgICAgICBmaQorQEAgLTYzNCw3ICs2MzQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmFzLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICROQVNfTElCUyIKKyAgICAgICAgICAgICBmaQorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX05BUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9OQVMsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9uYXMvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkTkFTX0NGTEFHUyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTY0OSw3ICs2NDksNyBAQCBDaGVja0Rpc2tBdWRpbygpCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRpc2thdWRpb10sIFtzdXBwb3J0IHRoZSBkaXNrIHdyaXRlciBhdWRpbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZGlza2F1ZGlvPXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXMgLWEgeCRlbmFibGVfZGlza2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRElTSykKKysgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RJU0ssMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2Rpc2svKi5jIgorICAgICBmaQorIH0KK0BAIC02NjEsNyArNjYxLDcgQEAgQ2hlY2tEdW1teUF1ZGlvKCkKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZHVtbXlhdWRpb10sIFtzdXBwb3J0IHRoZSBkdW1teSBhdWRpbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZHVtbXlhdWRpbz15ZXMpCisgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzIC1hIHgkZW5hYmxlX2R1bW15YXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9EVU1NWSkKKysgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RVTU1ZLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kdW1teS8qLmMiCisgICAgIGZpCisgfQorQEAgLTY3Nyw3ICs2NzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbWludGF1ZGlvXSwgW3N1CisgICAgICAgICBBQ19DSEVDS19IRUFERVIobWludC9mYWxjb24uaCwgaGF2ZV9taW50X2ZhbGNvbl9oZHI9eWVzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbWludF9mYWxjb25faGRyID0geHllczsgdGhlbgorICAgICAgICAgICAgIG1pbnRhdWRpbz15ZXMKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NSU5UKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9taW50LyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9taW50LyouUyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTc0Niw3ICs3NDYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmFzbV0sIFt1c2UgbmFzCisgICAgICAgICBDb21waWxlTkFTTSB1bnF1b3RlZC1zZWN0aW9ucyB8fCBOQVNNPSIiCisgCisgICAgICAgICBpZiB0ZXN0ICJ4JE5BU00iICE9IHggLWEgIngkTkFTTSIgIT0geCciJE5BU00iJzsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSEVSTUVTX0JMSVRURVJTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEVSTUVTX0JMSVRURVJTLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvaGVybWVzLyouYXNtIgorICAgICAgICAgICAgIE5BU01GTEFHUz0iJE5BU01GTEFHUyAtSSAkc3JjZGlyL3NyYy9oZXJtZXMvIgorIAorQEAgLTg0MCw5ICs4NDAsOSBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYWx0aXZlY10sIFt1c2UKKyAgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIAorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZ2NjX2FsdGl2ZWMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BTFRJVkVDX0JMSVRURVJTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQUxUSVZFQ19CTElUVEVSUywxLCIiKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2FsdGl2ZWNfaF9oZHIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9BTFRJVkVDX0gpCisrICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9BTFRJVkVDX0gsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkYWx0aXZlY19DRkxBR1MiCisgICAgICAgICBmaQorQEAgLTkyMCw3ICs5MjAsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtaXBvZF0sIFtjb25maWd1CisgCisgICAgIGlmIHRlc3QgeCRlbmFibGVfaXBvZCA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtRElQT0QiCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9JUE9EKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfSVBPRCwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vaXBvZC8qLmMiCisgICAgIGZpCisgfQorQEAgLTk1NCw3ICs5NTQsNyBAQCBDaGVja05BTk9YKCkKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgLURFTkFCTEVfTkFOT1hfRElSRUNUX0ZCIgorICAgICAgICAgZmkKKyAKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX05BTk9YKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfTkFOT1gsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL25hbm94LyouYyIKKyAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sbmFuby1YIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xMDIwLDcgKzEwMjAsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUteDExLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRYX0NGTEFHUyIKKyAgICAgICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAkWF9MSUJTIgorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTEsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby94MTEvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkWF9DRkxBR1MiCisgCitAQCAtMTA0Miw4ICsxMDQyLDggQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXgxMS1zaGFyZWRdLCBbZAorICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfeDExX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JHgxMV9saWIgIT0geCAmJiB0ZXN0IHgkeDExZXh0X2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWDExIC0+ICR4MTFfbGliIgorICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlgxMWV4dCAtPiAkeDExZXh0X2xpYiIKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUMsICIkeDExX2xpYiIpCistICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hFWFQsICIkeDExZXh0X2xpYiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDLCAiJHgxMV9saWIiLCIiKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YRVhULCAiJHgxMWV4dF9saWIiLCIiKQorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgZW5hYmxlX3gxMV9zaGFyZWQ9bm8KKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJFhfTElCUyAtbFgxMSAtbFhleHQiCitAQCAtMTA2MCwyMCArMTA2MCwyMCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGdhXSwgW2FsbG93IHVzCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWRnYV0sIFt1c2UgREdBIDIuMCB2aWRlbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9fZGdhPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2RnYSA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fZGdhID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ER0EpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RHQSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9kZ2EvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEtZGdhbW91c2UsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS1kZ2Ftb3VzZV0sIFt1c2UgWDExIERHQSBmb3IgbW91c2UgZXZlbnRzIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX2RnYW1vdXNlPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2RnYSA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9feDExX2RnYW1vdXNlID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfREdBTU9VU0UpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9ER0FNT1VTRSwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEtdm0sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS12bV0sIFt1c2UgWDExIFZNIGV4dGVuc2lvbiBmb3IgZnVsbHNjcmVlbiBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX3gxMV92bT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb194MTFfdm0gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9WSURNT0RFKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfVklETU9ERSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9YZXh0L1h4Zjg2dm0vKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEteHYsCitAQCAtMTA4NywxNCArMTA4NywxNCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXh2XSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhpbmVyYW1hXSwgW2VuYWJsZSBYMTEgWGluZXJhbWEgc3VwcG9ydCBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3hpbmVyYW1hPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV94aW5lcmFtYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hJTkVSQU1BKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWElORVJBTUEsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vWGV4dC9YaW5lcmFtYS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS14bWUsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14bWVdLCBbZW5hYmxlIFhpIEdyYXBoaWNzIFhNRSBmb3IgZnVsbHNjcmVlbiBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3htZT15ZXMpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb194MTFfeG1lID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWE1FKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWE1FLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL1hleHQvWE1FLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXhyYW5kciwKK0BAIC0xMTExLDggKzExMTEsOCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhyYW5kCisgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3gxMV9zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCR4cmFuZHJfbGliICE9IHggOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYcmVuZGVyIC0+ICR4cmVuZGVyX2xpYiIKKyAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlhyYW5kciAtPiAkeHJhbmRyX2xpYiIKKy0gICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkVOREVSLCAiJHhyZW5kZXJfbGliIikKKy0gICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkFORFIsICIkeHJhbmRyX2xpYiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWFJFTkRFUiwgIiR4cmVuZGVyX2xpYiIsIiIpCisrICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWFJBTkRSLCAiJHhyYW5kcl9saWIiLCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRlbHlfZW5hYmxlX3ZpZGVvX3gxMV94cmFuZHI9eWVzCisgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKFhyZW5kZXIsIFhSZW5kZXJRdWVyeUV4dGVuc2lvbiwgaGF2ZV94cmVuZGVyX2xpYj15ZXMpCitAQCAtMTEyNSw3ICsxMTI1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXgxMS14cmFuZAorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGRlZmluaXRlbHlfZW5hYmxlX3ZpZGVvX3gxMV94cmFuZHIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YUkFORFIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YUkFORFIsMSwiIikKKyAgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0xMTUyLDcgKzExNTIsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcGhvdG9uXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19waG90b24pCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcGhvdG9uID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BIT1RPTikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QSE9UT04sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9waG90b24vKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1scGgiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xMTY2LDcgKzExNjYsNyBAQCBkbmwgU2V0IHVwIHRoZSBCV2luZG93IHZpZGVvIGRyaXZlciBpZiBlCisgQ2hlY2tCV0lORE9XKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9CV0lORE9XKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQldJTkRPVywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vYndpbmRvdy8qLmNjIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xMTg5LDcgKzExODksNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tY2FyYm9uXSwKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2NhcmJvbikKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2NhcmJvbiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9UT09MQk9YKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1RPT0xCT1gsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9tYWNjb21tb24vKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL21hY3JvbS8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xMjE4LDcgKzEyMTgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tY29jb2FdLCBbCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2NvY29hKQorICAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jb2NvYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVUFSVFopCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVVBUlRaLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcXVhcnR6LyoubSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMjQ1LDcgKzEyNDUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZmJjb25dLCBbCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19mYmNvbikKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19mYmNvbiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBBQ19DSEVDS19GVU5DUyhnZXRwYWdlc2l6ZSkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9GQkNPTikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9GQkNPTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2ZiY29uLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMjk2LDcgKzEyOTYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZGlyZWN0ZmJdCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19kaXJlY3RmYikKKyAKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19kaXJlY3RmYiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ESVJFQ1RGQikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9ESVJFQ1RGQiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2RpcmVjdGZiLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJERJUkVDVEZCX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkRElSRUNURkJfTElCUyIKK0BAIC0xMzIzLDcgKzEzMjMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcHMyZ3NdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcHMyZ3MpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcHMyZ3MgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUFMyR1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUFMyR1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9wczJncy8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMTM3Niw3ICsxMzc2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWdnaV0sIFt1cworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2dnaSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19nZ2kgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0dJKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dHSSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2dnaS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxnZ2kgLWxnaWkgLWxnZyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0MDYsNyArMTQwNiw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1zdmdhXSwgW3UKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19zdmdhKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3N2Z2EgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfU1ZHQUxJQikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9TVkdBTElCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vc3ZnYS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWx2Z2EiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNDM4LDcgKzE0MzgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tdmdsXSwgW3VzCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fdmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3ZnbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9WR0wpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVkdMLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vdmdsLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHZnbCIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0NjYsNyArMTQ2Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby13c2NvbnNdLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3dzY29ucykKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb193c2NvbnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV1NDT05TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1dTQ09OUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dzY29ucy8qLmMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWFhbGliXSwgWworICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2FhbGliKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2FhbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0FBTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0FBTElCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vYWFsaWIvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYWEiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNTUzLDcgKzE1NTMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcXRvcGlhXSwKKyAgICAgICAgIENYWEZMQUdTPSIkT0xEX0NYWCIKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3F0b3BpYSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19xdG9waWEgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVRPUElBKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FUT1BJQSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3F0b3BpYS8qLmNjIgorICAgICAgICAgICAgIFNETE1BSU5fU09VUkNFUz0iJHNyY2Rpci9zcmMvbWFpbi9xdG9waWEvKi5jYyIKKyAgICAgICAgICAgICBTRExNQUlOX0xERkxBR1M9Ii1zdGF0aWMiCitAQCAtMTU4Myw3ICsxNTgzLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXBpY29ndWldLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3BpY29ndWkpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fcGljb2d1aSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QSUNPR1VJKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BJQ09HVUksMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9waWNvZ3VpLyouYyIKKyAgICAgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTIC1scGd1aSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE2MDcsNyArMTYwNyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14Ymlvc10sIFsKKyAgICAgdmlkZW9feGJpb3M9bm8KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9feGJpb3MgPSB4eWVzOyB0aGVuCisgICAgICAgICB2aWRlb194Ymlvcz15ZXMKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1hCSU9TKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWEJJT1MsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3hiaW9zLyouYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgIGZpCitAQCAtMTYyNSw3ICsxNjI1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWdlbV0sIFt1cworICAgICAgICAgQUNfQ0hFQ0tfTElCKGdlbSwgYXBwbF9pbml0LCBoYXZlX2dlbV9saWI9eWVzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZ2VtX2hkciA9IHh5ZXMgLWEgeCRoYXZlX2dlbV9saWIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgdmlkZW9fZ2VtPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dFTSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HRU0sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9nZW0vKi5jIgorICAgICAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgLWxnZW0iCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0xNjQwLDcgKzE2NDAsNyBAQCBDaGVja0R1bW15VmlkZW8oKQorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1kdW1teV0sIFt1c2UgZHVtbXkgdmlkZW8gZHJpdmVyIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICwgZW5hYmxlX3ZpZGVvX2R1bW15PXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb19kdW1teSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RVTU1ZKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRFVNTVksMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2R1bW15LyouYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgIGZpCitAQCAtMTY2Nyw4ICsxNjY3LDggQEAgQ2hlY2tPcGVuR0xYMTEoKQorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX29wZW5nbCkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfR0xYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfR0xYLDEsIiIpCisgICAgICAgICBmaQorICAgICBmaQorIH0KK0BAIC0xNjg3LDcgKzE2ODcsNyBAQCBDaGVja09wZW5HTFFOWCgpCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fb3BlbmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sR0wiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE2OTcsOCArMTY5Nyw4IEBAIGRubCBDaGVjayBmb3IgV2luMzIgT3BlbkdMCisgQ2hlY2tXSU4zMkdMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfV0dMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX1dHTCwxLCIiKQorICAgICBmaQorIH0KKyAKK0BAIC0xNzA2LDcgKzE3MDYsNyBAQCBkbmwgQ2hlY2sgZm9yIEJlT1MgT3BlbkdMCisgQ2hlY2tCZUdMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKyAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sR0wiCisgICAgIGZpCisgfQorQEAgLTE3MTUsNyArMTcxNSw3IEBAIGRubCBDaGVjayBmb3IgTWFjT1MgT3BlbkdMCisgQ2hlY2tNYWNHTCgpCisgeworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19vcGVuZ2wgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisgICAgICAgICBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgICAqLSotZGFyd2luKikKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlb19jb2NvYSA9IHh5ZXM7IHRoZW4KK0BAIC0xNzQ3LDggKzE3NDcsOCBAQCBDaGVja0F0YXJpT1NNZXNhKCkKKyAgICAgICAgICAgICBPU01FU0FfQ0ZMQUdTPWAkT1NNRVNBX0NPTkZJRyAtLWNmbGFnc2AKKyAgICAgICAgICAgICBPU01FU0FfTElCUz1gJE9TTUVTQV9DT05GSUcgLS1saWJzYAorICAgICAgICAgZmkKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQSwxLCIiKQorICAgICAgICAgU0RMX0NGTEFHUz0iJFNETF9DRkxBR1MgJE9TTUVTQV9DRkxBR1MiCisgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTICRPU01FU0FfTElCUyIKKyAKK0BAIC0xNzU4LDcgKzE3NTgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtb3NtZXNhLXNoYXJlZF0sCisgICAgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9vc21lc2Ffc2hhcmVkIiA9ICJ4eWVzIiAtYSAieCRlbmFibGVfYXRhcmlfbGRnIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgICMgRHluYW1pYyBsaW5raW5nCisgICAgICAgICAgICAgaWYgdGVzdCAieCRoYXZlX29zbWVzYV9oZHIiID0gInh5ZXMiOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQV9EWU5BTUlDKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0FfRFlOQU1JQywxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE3OTIsNyArMTc5Miw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnB1dC1ldmVudHNdLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHVzZV9pbnB1dF9ldmVudHMpCisgICAgICAgICBpZiB0ZXN0IHgkdXNlX2lucHV0X2V2ZW50cyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX0xJTlVYRVYpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9MSU5VWEVWLDEsIiIpCisgICAgICAgICBmaQorICAgICBmaQorIH0KK0BAIC0xODE0LDcgKzE4MTQsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtaW5wdXQtdHNsaWJdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkZW5hYmxlX2lucHV0X3RzbGliKQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9pbnB1dF90c2xpYiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX1RTTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfVFNMSUIsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHRzIgorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0xODM3LDcgKzE4MzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRoXSwgW3VzZSBHTlUKKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhwdGgpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR1c2VfcHRoKQorICAgICAgICAgaWYgdGVzdCAieCR1c2VfcHRoIiA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRILDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3B0aC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c3NlbS5jIgorICAgICAgICAgICAgIFNETF9DRkxBR1M9IiRTRExfQ0ZMQUdTIGAkUFRIX0NPTkZJRyAtLWNmbGFnc2AiCitAQCAtMTk0Myw3ICsxOTQzLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWQtc2VtXSwgWworIAorICAgICAgICAgIyBEbyBmdXRoZXIgdGVzdGluZyBpZiB3ZSBoYXZlIHB0aHJlYWQgc3VwcG9ydC4uLgorICAgICAgICAgaWYgdGVzdCB4JHVzZV9wdGhyZWFkcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQUQsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJHB0aHJlYWRfY2ZsYWdzIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRwdGhyZWFkX2xpYiIKKyAgICAgICAgICAgICBTRExfQ0ZMQUdTPSIkU0RMX0NGTEFHUyAkcHRocmVhZF9jZmxhZ3MiCitAQCAtMTk2NSw3ICsxOTY1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWQtc2VtXSwgWworICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKKyAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgIGhhc19yZWN1cnNpdmVfbXV0ZXhlcz15ZXMKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYLDEsIiIpCisgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGFzX3JlY3Vyc2l2ZV9tdXRleGVzID0geG5vOyB0aGVuCitAQCAtMTk3Niw3ICsxOTc2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXB0aHJlYWQtc2VtXSwgWworICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QKTsKKyAgICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgIGhhc19yZWN1cnNpdmVfbXV0ZXhlcz15ZXMKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfTlApCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX05QLDEsIiIpCisgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXNfcmVjdXJzaXZlX211dGV4ZXMpCitAQCAtMjA2NSw3ICsyMDY1LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0ZGlvLXJlZGlyZWN0XQorICAgICBmaQorIAorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV0lORElCKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV0lORElCLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5jb21tb24vKi5jIgorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd2luZGliLyouYyIKKyAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMjA4Nyw3ICsyMDg3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRpcmVjdHhdLCBbdXNlCisgICAgICAgICAgICAgaGF2ZV9kaXJlY3R4PXllcworICAgICAgICAgZmkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkaGF2ZV9kaXJlY3R4ID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0REUkFXKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0REUkFXLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd2luZHg1LyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0yMTE4LDcgKzIxMTgsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc2RsLWRsb3Blbl0sIFt1CisgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGMsIGRsb3BlbiwgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MiLAorICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihkbCwgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGRsIiwKKyAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIobHRkbCwgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGx0ZGwiKSkpCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9kbG9wZW4vKi5jIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworICAgICAgICAgZmkKK0BAIC0yMTM1LDcgKzIxMzUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtYXRhcmktbGRnXSwgW3VzCisgICAgICAgICBBQ19DSEVDS19IRUFERVIobGRnLmgsIGhhdmVfbGRnX2hkcj15ZXMpCisgICAgICAgICBBQ19DSEVDS19MSUIobGRnLCBsZGdfb3BlbiwgaGF2ZV9sZGdfbGliPXllcywgaGF2ZV9sZGdfbGliPW5vLCAtbGdlbSkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2xkZ19oZHIgPSB4eWVzIC1hIHgkaGF2ZV9sZGdfbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0xERykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19MREcsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vbWludC8qLmMiCisgICAgICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAtbGxkZyAtbGdlbSIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKK0BAIC0yMjY2LDExICsyMjY2LDExIEBAIENoZWNrVVNCSElEKCkKKyAgICAgICAgICAgICBoYXZlX21hY2hpbmVfam95c3RpY2s9eWVzCisgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9tYWNoaW5lX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1VTQkhJRF9NQUNISU5FX0pPWVNUSUNLX0gpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEX01BQ0hJTkVfSk9ZU1RJQ0tfSCwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9tYWNoaW5lX2pveXN0aWNrKQorIAorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElELDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svYnNkLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJFVTQl9DRkxBR1MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJFVTQl9MSUJTIgorQEAgLTIyODksNyArMjI4OSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jbG9ja19nZXR0aW1lXSwKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9jbG9ja19nZXR0aW1lID0geHllczsgdGhlbgorICAgICAgICAgQUNfQ0hFQ0tfTElCKHJ0LCBjbG9ja19nZXR0aW1lLCBoYXZlX2Nsb2NrX2dldHRpbWU9eWVzKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfY2xvY2tfZ2V0dGltZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9DTE9DS19HRVRUSU1FKQorKyAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUsMSwiIikKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHJ0IgorICAgICAgICAgZmkKKyAgICAgZmkKK0BAIC0yMzIwLDcgKzIzMjAsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrSVBvZAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTIzODYsMTcgKzIzODYsMTcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorICAgICAgICAgICBjYXNlICRBUkNIIGluCisgICAgICAgICAgICAgc3lzdjV8c29sYXJpc3xocHV4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTykKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8sMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vc3VuLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIG5ldGJzZHxvcGVuYnNkKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9ic2QvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgYWl4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9QQVVEKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9QQVVELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3BhdWRpby8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDA2LDcgKzI0MDYsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCisgICAgICAgICAgIGNhc2UgJEFSQ0ggaW4KKyAgICAgICAgICAgICBsaW51eCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19MSU5VWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19MSU5VWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9saW51eC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDE2LDMyICsyNDE2LDMyIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgY2FzZSAkQVJDSCBpbgorICAgICAgICAgICAgIGxpbnV4fHNvbGFyaXMpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTElOVVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTElOVVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vbGludXgvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKmZyZWVic2QqKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0ZSRUVCU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRlJFRUJTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9mcmVlYnNkLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgICpvcGVuYnNkKnwqbmV0YnNkKikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PUEVOQlNEKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09QRU5CU0QsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vb3BlbmJzZC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBic2RpKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JTREkpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQlNESSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9ic2RpLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGFpeCkKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9BSVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQUlYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2FpeC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBvc2YpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1NGKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09TRiwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9vc2YvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CitAQCAtMjQ0OSw3ICsyNDQ5LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JHVzZV9wdGhyZWFkcyAhPSB4eWVzIC1hIHgkdXNlX3B0aCAhPSB4eWVzIC1hIHgkQVJDSCA9IHhpcml4OyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfU1BST0MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfU1BST0MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvaXJpeC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c211dGV4LmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvU0RMX3N5c2NvbmQuYyIKK0BAIC0yNDU3LDcgKzI0NTcsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjQ3NiwyMCArMjQ3NiwyMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrUFRIUkVBRAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1FOWE5UTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9RTlhOVE8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9udG8vKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYXNvdW5kIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fUU5YKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fUU5YLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vcW54LyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNTE0LDI5ICsyNTE0LDI5IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tOQVNNCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfV0FWRU9VVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9XQVZFT1VULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vd2luZGliLyouYyIKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9kaXJlY3R4ID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9EU09VTkQpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RTT1VORCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby93aW5keDUvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19XSU5NTSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1dJTk1NLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fV0lOMzIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGhyZWFkIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvd2luMzIvU0RMX3N5c3NlbS5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzdGhyZWFkLmMiCitAQCAtMjU0NSwxMyArMjU0NSwxMyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfV0lOMzIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHNoYXJlZCBvYmplY3QgbG9hZGluZyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19XSU4zMiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTI2MjIsMjUgKzI2MjIsMjUgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja0JlR0wKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CQVVESU8pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQkFVRElPLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vYmF1ZGlvLyouY2MiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19CRU9TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2Jlb3MvKi5jYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vYmVvcy8qLmNjIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9iZW9zLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzY29uZC5jIgorQEAgLTI2NDgsNyArMjY0OCw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9CRU9TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfQkVPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL2Jlb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNjU2LDExICsyNjU2LDExIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAgICAgICAgICotKi1iZW9zKikKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0JFT1MpCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19CRU9TLDEsIiIpCisgICAgICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vYmVvcy8qLmMiCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICotKi1oYWlrdSopCistICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4pCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4sMSwiIikKKyAgICAgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9kbG9wZW4vKi5jIgorICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGVzYWMgICAgCitAQCAtMjY5Niw3ICsyNjk2LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHNoYXJlZCBvYmplY3QgbG9hZGluZyBsaWJyYXJ5CisgICAgICAgICAjICh0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSBkeW5hbWljIFgxMSBjaGVjaykKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllcyAtYSB4JGhhdmVfZGxvcGVuICE9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETENPTVBBVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETENPTVBBVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9tYWNvc3gvKi5jIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworICAgICAgICAgZmkKK0BAIC0yNzE0LDI2ICsyNzE0LDI2IEBAIGNhc2UgIiRob3N0IiBpbgorIAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0NPUkVBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9DT1JFQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9tYWNvc3gvKi5jIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfSU9LSVQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19JT0tJVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2Rhcndpbi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICBuZWVkX2lva2l0X2ZyYW1ld29yaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NQUNPU1gpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NQUNPU1gsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9tYWNvc3gvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI3NzUsMzAgKzI3NzUsMzAgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgLWEgeCRlbmFibGVfcHRoID0geHllczsgdGhlbgorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTywxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9zdW4vKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTUlOVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9taW50LyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01JTlQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9NSU5ULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vbWludC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGhyZWFkcyA9IHh5ZXMgLWEgeCRlbmFibGVfcHRoID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfTUlOVCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9NSU4sMSwiIlQpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL21pbnQvKi5jIgorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9taW50LyouUyIKKyAgICAgICAgICAgICBmaQorQEAgLTI4MTEsMjAgKzI4MTEsMjAgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja1BUSFJFQUQKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdmlkZW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUklTQ09TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcmlzY29zLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9yaXNjb3MvKi5TIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBqb3lzdGljayBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2pveXN0aWNrID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfUklTQ09TKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfUklTQ09TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svcmlzY29zLyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yODQ2LDMxICsyODQ2LDMxIEBAIENoZWNrV2FybkFsbAorIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCisgICBpZiB0ZXN0IHgkaGF2ZV9qb3lzdGljayAhPSB4eWVzOyB0aGVuCisgICAgICMgV2FudHMgam95c3RpY2sgc3Vic3lzdGVtLCBidXQgZG9lc24ndCBoYXZlIGEgcGxhdGZvcm0tc3BlY2lmaWMgYmFja2VuZC4uLgorLSAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RVTU1ZKQorKyAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0RVTU1ZLDEsIiIpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2R1bW15LyouYyIKKyAgIGZpCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV9jZHJvbSAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9kdW1teS8qLmMiCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV90aHJlYWRzICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljLyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX3RpbWVycyAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci9kdW1teS8qLmMiCisgZmkKKyBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RJU0FCTEVEKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2R1bW15LyouYyIKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4YjkyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorbGliWDExLTEuNS45OS45MDEgaGFzIGNoYW5nZWQgcHJvdG90eXBlIG9mIF9YRGF0YTMyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKzxodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2OT4KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitkaWZmIC1yIGI2YjI4MjljZDdlZiBzcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAorLS0tIGEvc3JjL3ZpZGVvL3gxMS9TRExfeDExc3ltLmgJV2VkIEZlYiAyNyAxNToyMDozMSAyMDEzIC0wODAwCisrKysgYi9zcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAlXZWQgTWFyIDI3IDE2OjA3OjIzIDIwMTMgKzAxMDAKK0BAIC0xNjUsNyArMTY1LDcgQEAKKyAgKi8KKyAjaWZkZWYgTE9ORzY0CisgU0RMX1gxMV9NT0RVTEUoSU9fMzJCSVQpCistU0RMX1gxMV9TWU0oaW50LF9YRGF0YTMyLChEaXNwbGF5ICpkcHkscmVnaXN0ZXIgbG9uZyAqZGF0YSx1bnNpZ25lZCBsZW4pLChkcHksZGF0YSxsZW4pLHJldHVybikKKytTRExfWDExX1NZTShpbnQsX1hEYXRhMzIsKERpc3BsYXkgKmRweSxyZWdpc3RlciBfWGNvbnN0IGxvbmcgKmRhdGEsdW5zaWduZWQgbGVuKSwoZHB5LGRhdGEsbGVuKSxyZXR1cm4pCisgU0RMX1gxMV9TWU0odm9pZCxfWFJlYWQzMiwoRGlzcGxheSAqZHB5LHJlZ2lzdGVyIGxvbmcgKmRhdGEsbG9uZyBsZW4pLChkcHksZGF0YSxsZW4pLCkKKyAjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzYmFhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK1JhdGhlciB0aGFuIGNvZGUgd2hpY2ggZG9lc24ndCBldmVuIHdvcmsgcHJvcGVybHkgd2hlbiBjcm9zcyBjb21waWxpbmcsCitsZXRzIGp1c3QgdXNlIHBrZy1jb25maWcgaW5zdGVhZC4gSXRzIGEgbGl0dGxlIHNpbXBsZXIuCisKK1JQIDIwMTQvNi8yMAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFNETC0xLjIuMTUvc2RsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gU0RMLTEuMi4xNS5vcmlnL3NkbC5tNAorKysrIFNETC0xLjIuMTUvc2RsLm00CitAQCAtMTIsMTc0ICsxMiw4IEBAIGRubCBUZXN0IGZvciBTREwsIGFuZCBkZWZpbmUgU0RMX0NGTEFHUworIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX1NETF0sCisgW2RubCAKKy1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBzZGwtY29uZmlnIHNjcmlwdAorLWRubAorLUFDX0FSR19XSVRIKHNkbC1wcmVmaXgsWyAgLS13aXRoLXNkbC1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIFNETCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgc2RsX3ByZWZpeD0iJHdpdGh2YWwiLCBzZGxfcHJlZml4PSIiKQorLUFDX0FSR19XSVRIKHNkbC1leGVjLXByZWZpeCxbICAtLXdpdGgtc2RsLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBTREwgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorLSAgICAgICAgICAgIHNkbF9leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBzZGxfZXhlY19wcmVmaXg9IiIpCistQUNfQVJHX0VOQUJMRShzZGx0ZXN0LCBbICAtLWRpc2FibGUtc2RsdGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgU0RMIHByb2dyYW1dLAorLQkJICAgICwgZW5hYmxlX3NkbHRlc3Q9eWVzKQorLQorLSAgaWYgdGVzdCB4JHNkbF9leGVjX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICBzZGxfY29uZmlnX2FyZ3M9IiRzZGxfY29uZmlnX2FyZ3MgLS1leGVjLXByZWZpeD0kc2RsX2V4ZWNfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke1NETF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIFNETF9DT05GSUc9JHNkbF9leGVjX3ByZWZpeC9iaW4vc2RsLWNvbmZpZworLSAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgeCRzZGxfcHJlZml4ICE9IHggOyB0aGVuCistICAgIHNkbF9jb25maWdfYXJncz0iJHNkbF9jb25maWdfYXJncyAtLXByZWZpeD0kc2RsX3ByZWZpeCIKKy0gICAgaWYgdGVzdCB4JHtTRExfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKy0gICAgICBTRExfQ09ORklHPSRzZGxfcHJlZml4L2Jpbi9zZGwtY29uZmlnCistICAgIGZpCistICBmaQorLQorLSAgYXNfc2F2ZV9QQVRIPSIkUEFUSCIKKy0gIGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorLSAgICBQQVRIPSIkcHJlZml4L2JpbjokcHJlZml4L3Vzci9iaW46JFBBVEgiCistICBmaQorLSAgQUNfUEFUSF9QUk9HKFNETF9DT05GSUcsIHNkbC1jb25maWcsIG5vLCBbJFBBVEhdKQorLSAgUEFUSD0iJGFzX3NhdmVfUEFUSCIKKyAgIG1pbl9zZGxfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMTEuMCwkMSkKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgU0RMIC0gdmVyc2lvbiA+PSAkbWluX3NkbF92ZXJzaW9uKQorLSAgbm9fc2RsPSIiCistICBpZiB0ZXN0ICIkU0RMX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICBub19zZGw9eWVzCistICBlbHNlCistICAgIFNETF9DRkxBR1M9YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIFNETF9MSUJTPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tbGlic2AKKy0KKy0gICAgc2RsX21ham9yX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHNkbF9taW5vcl92ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICBzZGxfbWljcm9fdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAieCRlbmFibGVfc2RsdGVzdCIgPSAieHllcyIgOyB0aGVuCistICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCistICAgICAgYWNfc2F2ZV9DWFhGTEFHUz0iJENYWEZMQUdTIgorLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCistICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRTRExfQ0ZMQUdTIgorLSAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgTElCUz0iJExJQlMgJFNETF9MSUJTIgorLWRubAorLWRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBTREwgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5CistZG5sIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiBzZGwtY29uZmlnIHRvIHNvbWUgZXh0ZW50CistZG5sCistICAgICAgcm0gLWYgY29uZi5zZGx0ZXN0CistICAgICAgQUNfVFJZX1JVTihbCistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSAiU0RMLmgiCistCistY2hhcioKKy1teV9zdHJkdXAgKGNoYXIgKnN0cikKKy17CistICBjaGFyICpuZXdfc3RyOworLSAgCistICBpZiAoc3RyKQorLSAgICB7CistICAgICAgbmV3X3N0ciA9IChjaGFyICopbWFsbG9jICgoc3RybGVuIChzdHIpICsgMSkgKiBzaXplb2YoY2hhcikpOworLSAgICAgIHN0cmNweSAobmV3X3N0ciwgc3RyKTsKKy0gICAgfQorLSAgZWxzZQorLSAgICBuZXdfc3RyID0gTlVMTDsKKy0gIAorLSAgcmV0dXJuIG5ld19zdHI7CistfQorLQorLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorLXsKKy0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOworLSAgY2hhciAqdG1wX3ZlcnNpb247CistCistICAvKiBUaGlzIGhhbmdzIG9uIHNvbWUgc3lzdGVtcyAoPykKKy0gIHN5c3RlbSAoInRvdWNoIGNvbmYuc2RsdGVzdCIpOworLSAgKi8KKy0gIHsgRklMRSAqZnAgPSBmb3BlbigiY29uZi5zZGx0ZXN0IiwgImEiKTsgaWYgKCBmcCApIGZjbG9zZShmcCk7IH0KKy0KKy0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLworLSAgdG1wX3ZlcnNpb24gPSBteV9zdHJkdXAoIiRtaW5fc2RsX3ZlcnNpb24iKTsKKy0gIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fc2RsX3ZlcnNpb24iKTsKKy0gICAgIGV4aXQoMSk7CistICAgfQorLQorLSAgIGlmICgoJHNkbF9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CistICAgICAgKCgkc2RsX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkc2RsX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CistICAgICAgKCgkc2RsX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkc2RsX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmICgkc2RsX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKKy0gICAgeworLSAgICAgIHJldHVybiAwOworLSAgICB9CistICBlbHNlCistICAgIHsKKy0gICAgICBwcmludGYoIlxuKioqICdzZGwtY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCB0aGUgbWluaW11bSB2ZXJzaW9uXG4iLCAkc2RsX21ham9yX3ZlcnNpb24sICRzZGxfbWlub3JfdmVyc2lvbiwgJHNkbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICBwcmludGYoIioqKiBvZiBTREwgcmVxdWlyZWQgaXMgJWQuJWQuJWQuIElmIHNkbC1jb25maWcgaXMgY29ycmVjdCwgdGhlbiBpdCBpc1xuIiwgbWFqb3IsIG1pbm9yLCBtaWNybyk7CistICAgICAgcHJpbnRmKCIqKiogYmVzdCB0byB1cGdyYWRlIHRvIHRoZSByZXF1aXJlZCB2ZXJzaW9uLlxuIik7CistICAgICAgcHJpbnRmKCIqKiogSWYgc2RsLWNvbmZpZyB3YXMgd3JvbmcsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU0RMX0NPTkZJR1xuIik7CistICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBzZGwtY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlXG4iKTsKKy0gICAgICBwcmludGYoIioqKiBjb25maWcuY2FjaGUgYmVmb3JlIHJlLXJ1bm5pbmcgY29uZmlndXJlXG4iKTsKKy0gICAgICByZXR1cm4gMTsKKy0gICAgfQorLX0KKy0KKy1dLCwgbm9fc2RsPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCistICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLSAgICAgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgIngkbm9fc2RsIiA9IHggOyB0aGVuCistICAgICBBQ19NU0dfUkVTVUxUKHllcykKKy0gICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKy0gIGVsc2UKKy0gICAgIEFDX01TR19SRVNVTFQobm8pCistICAgICBpZiB0ZXN0ICIkU0RMX0NPTkZJRyIgPSAibm8iIDsgdGhlbgorLSAgICAgICBlY2hvICIqKiogVGhlIHNkbC1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBTREwgY291bGQgbm90IGJlIGZvdW5kIgorLSAgICAgICBlY2hvICIqKiogSWYgU0RMIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKKy0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBTRExfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKKy0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBzZGwtY29uZmlnLiIKKy0gICAgIGVsc2UKKy0gICAgICAgaWYgdGVzdCAtZiBjb25mLnNkbHRlc3QgOyB0aGVuCistICAgICAgICA6CistICAgICAgIGVsc2UKKy0gICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gU0RMIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorLSAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgICAgIExJQlM9IiRMSUJTICRTRExfTElCUyIKKy0gICAgICAgICAgQUNfVFJZX0xJTksoWworLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlICJTREwuaCIKKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorLXsgcmV0dXJuIDA7IH0KKy0jdW5kZWYgIG1haW4KKy0jZGVmaW5lIG1haW4gS19hbmRfUl9DX21haW4KKy1dLCAgICAgIFsgcmV0dXJuIDA7IF0sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKy0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBTREwgb3IgZmluZGluZyB0aGUgd3JvbmciCistICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIFNETC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgU0RMLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKy0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCistICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCistICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKy0JICBlY2hvICIqKioiCistICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKy0gICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCistICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCistICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBTREwgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKKy0gICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgU0RMIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgorLSAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgc2RsLWNvbmZpZyBzY3JpcHQ6ICRTRExfQ09ORklHIiBdKQorLSAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKKy0gICAgICAgICAgQ1hYRkxBR1M9IiRhY19zYXZlX0NYWEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorLSAgICAgICBmaQorLSAgICAgZmkKKy0gICAgIFNETF9DRkxBR1M9IiIKKy0gICAgIFNETF9MSUJTPSIiCistICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKFtTRExdLCBbc2RsID49ICRtaW5fc2RsX3ZlcnNpb25dKQorICAgQUNfU1VCU1QoU0RMX0NGTEFHUykKKyAgIEFDX1NVQlNUKFNETF9MSUJTKQorLSAgcm0gLWYgY29uZi5zZGx0ZXN0CisgXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsXzEuMi4xNS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsXzEuMi4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjZiZDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGxfMS4yLjE1LmJiCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUlkgPSAiU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIgorREVTQ1JJUFRJT04gPSAiU2ltcGxlIERpcmVjdE1lZGlhIExheWVyIGlzIGEgY3Jvc3MtcGxhdGZvcm0gbXVsdGltZWRpYSBcCitsaWJyYXJ5IGRlc2lnbmVkIHRvIHByb3ZpZGUgbG93IGxldmVsIGFjY2VzcyB0byBhdWRpbywga2V5Ym9hcmQsIG1vdXNlLCBcCitqb3lzdGljaywgM0QgaGFyZHdhcmUgdmlhIE9wZW5HTCwgYW5kIDJEIHZpZGVvIGZyYW1lYnVmZmVyLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlic2RsLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmxpYnNkbC5vcmcvIgorCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzgxOGNkN2ZkODM4NzdhOGUzZWY4MmI4Mjc5OGVmNCIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJzZGwiCisKK0RFUEVORFMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd2aXJ0dWFsL2xpYmdsIGxpYmdsdScsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyYW5kciBsaWJ4cmVuZGVyJywgJycsIGQpfSBcCisgICAgICAgICAgIHRzbGliIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9uYXRpdmVzZGstbGlieDExIG5hdGl2ZXNkay1saWJ4cmFuZHIgbmF0aXZlc2RrLWxpYnhyZW5kZXIgbmF0aXZlc2RrLWxpYnhleHQnLCAnJywgZCl9IgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmcvcmVsZWFzZS9TREwtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZV90d2Vhay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJzZGwtMS4yLjE1LXhkYXRhMzIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9TREwtJHtQVn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZDk2ZGY4NDE3NTcyYTJhZmI3ODFhN2M0YzgxMWE4NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkNmQzMTZhNzkzZTVlMzQ4MTU1ZjBkZDkzYjk3OTc5ODkzM2ZiOThhYTFlZGViY2MxMDg4MjlkNjQ3NGFhZDAwIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3NkbC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zdGF0aWMgLS1lbmFibGUtY2Ryb20gLS1lbmFibGUtdGhyZWFkcyAtLWVuYWJsZS10aW1lcnMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWZpbGUgLS1kaXNhYmxlLW9zcyAtLWRpc2FibGUtZXNkIC0tZGlzYWJsZS1hcnRzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGlza2F1ZGlvIC0tZGlzYWJsZS1uYXMgLS1kaXNhYmxlLWVzZC1zaGFyZWQgLS1kaXNhYmxlLWVzZHRlc3QgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1taW50YXVkaW8gLS1kaXNhYmxlLW5hc20gLS1kaXNhYmxlLXZpZGVvLWRnYSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLWZiY29uIC0tZGlzYWJsZS12aWRlby1wczJncyAtLWRpc2FibGUtdmlkZW8tcHMzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteGJpb3MgLS1kaXNhYmxlLWdlbSAtLWRpc2FibGUtdmlkZW8tZHVtbXkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWlucHV0LWV2ZW50cyAtLWVuYWJsZS1pbnB1dC10c2xpYiAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICctLWVuYWJsZS12aWRlby1kaXJlY3RmYicsICctLWRpc2FibGUtdmlkZW8tZGlyZWN0ZmInLCBkKX0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJy0tZW5hYmxlLXZpZGVvLW9wZW5nbCcsICctLWRpc2FibGUtdmlkZW8tb3BlbmdsJywgZCl9IFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICctLWVuYWJsZS12aWRlby14MTEnLCAnLS1kaXNhYmxlLXZpZGVvLXgxMScsIGQpfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLXN2Z2EgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS12aWRlby1waWNvZ3VpIC0tZGlzYWJsZS12aWRlby1xdG9waWEgLS1lbmFibGUtc2RsLWRsb3BlbiBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcHVsc2VhdWRpbyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLS1lbmFibGUtYWxzYSAtLWRpc2FibGUtYWxzYXRlc3QsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIsIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluY2x1ZGU9YWNpbmNsdWRlIC0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxpYnRvb2wgbWFjcm9zLgorICAgICAgICBNQUNST1M9ImxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00IgorICAgICAgICBmb3IgaSBpbiAke01BQ1JPU307IGRvCisgICAgICAgICAgICAgICBybSAtZiAke1N9L2FjaW5jbHVkZS8kaQorICAgICAgICBkb25lCisgICAgICAgIGV4cG9ydCBTWVNST09UPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMl8yLjAuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNjRmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwyL2xpYnNkbDJfMi4wLjMuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgaXMgYSBjcm9zcy1wbGF0Zm9ybSBtdWx0aW1lZGlhIFwKK2xpYnJhcnkgZGVzaWduZWQgdG8gcHJvdmlkZSBsb3cgbGV2ZWwgYWNjZXNzIHRvIGF1ZGlvLCBrZXlib2FyZCwgbW91c2UsIFwKK2pveXN0aWNrLCAzRCBoYXJkd2FyZSB2aWEgT3BlbkdMLCBhbmQgMkQgdmlkZW8gZnJhbWVidWZmZXIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy8iCisKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy50eHQ7bWQ1PTY3ZGNiN2ZhZTE2OTUyNTU3YmM1Zjk2ZTllYjVkMTg4IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnNkbDIiCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbmF0aXZlc2RrLWxpYngxMSBuYXRpdmVzZGstbGlieHJhbmRyIG5hdGl2ZXNkay1saWJ4cmVuZGVyIG5hdGl2ZXNkay1saWJ4ZXh0JywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmcvcmVsZWFzZS9TREwyLSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9L1NETDItJHtQVn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTZjNjFkMmU5ZGY5ZWY1NzBlN2U4MGM2ZTgyMjUzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNWE2OWE2YWJmODBiY2NlNzEzZmE4NzM2MDc3MzVmZTcxMmY0NDI3NmE3ZjA0OGQ2MGE2MWJiMmY2YjNjOTBjIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBiaW5jb25maWcgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtb3NzIC0tZGlzYWJsZS1lc2QgLS1kaXNhYmxlLWFydHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kaXNrYXVkaW8gLS1kaXNhYmxlLW5hcyAtLWRpc2FibGUtZXNkLXNoYXJlZCAtLWRpc2FibGUtZXNkdGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLWR1bW15IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2RsLWRsb3BlbiBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIgorCisjIG9wZW5nbCBwYWNrYWdlY29uZmlnIGZhY3RvcmVkIG91dCB0byBtYWtlIGl0IGVhc3kgZm9yIGRpc3Ryb3MKKyMgYW5kIEJTUCBsYXllcnMgdG8gcGljayBlaXRoZXIgKGRlc2t0b3ApIG9wZW5nbCwgZ2xlczIsIG9yIG5vIEdMCitQQUNLQUdFQ09ORklHX0dMID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdvcGVuZ2wnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke1BBQ0tBR0VDT05GSUdfR0x9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnYWxzYScsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW2Fsc2FdICAgICAgID0gIi0tZW5hYmxlLWFsc2EgLS1kaXNhYmxlLWFsc2F0ZXN0LC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliLCIKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdICAgPSAiLS1lbmFibGUtdmlkZW8tZGlyZWN0ZmIgLS1kaXNhYmxlLXZpZGVvLWRpcmVjdGZiLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gICAgICA9ICItLWVuYWJsZS12aWRlby1vcGVuZ2xlcywtLWRpc2FibGUtdmlkZW8tb3BlbmdsZXMsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSAgICAgPSAiLS1lbmFibGUtdmlkZW8tb3BlbmdsLC0tZGlzYWJsZS12aWRlby1vcGVuZ2wsdmlydHVhbC9saWJnbCIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1t0c2xpYl0gICAgICA9ICItLWVuYWJsZS1pbnB1dC10c2xpYiwtLWRpc2FibGUtaW5wdXQtdHNsaWIsdHNsaWIiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdICAgID0gIi0tZW5hYmxlLXZpZGVvLXdheWxhbmQsLS1kaXNhYmxlLXZpZGVvLXdheWxhbmQsd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSAgICAgICAgPSAiLS1lbmFibGUtdmlkZW8teDExLC0tZGlzYWJsZS12aWRlby14MTEsdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4cmFuZHIgbGlieHJlbmRlciIKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1pbmNsdWRlPWFjaW5jbHVkZSAtLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgICMgUmVtb3ZlIG9sZCBsaWJ0b29sIG1hY3Jvcy4KKyAgICAgICAgTUFDUk9TPSJsaWJ0b29sLm00IGx0fm9ic29sZXRlLm00IGx0b3B0aW9ucy5tNCBsdHN1Z2FyLm00IGx0dmVyc2lvbi5tNCIKKyAgICAgICAgZm9yIGkgaW4gJHtNQUNST1N9OyBkbworICAgICAgICAgICAgICAgcm0gLWYgJHtTfS9hY2luY2x1ZGUvJGkKKyAgICAgICAgZG9uZQorICAgICAgICBleHBvcnQgU1lTUk9PVD0kUEtHX0NPTkZJR19TWVNST09UX0RJUgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZSBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4ZGU5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvTUlULXN0eWxlLWxpY2Vuc2UKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDAxIFJlZCBIYXQsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFJlZCBIYXQgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFJlZCBIYXQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBSRUQgSEFUIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBSRUQgSEFUCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogIE93ZW4gVGF5bG9yLCBSZWQgSGF0LCBJbmMuCisgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjdlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRG8gbm90IHNldCBPcyBvcHRpbWl6YXRpb24gaW4gdGFyZ2V0IEFQUCBDRkxBR1MsIHNpbmNlIGl0IG1heSBoYXZlIHBvdGVudGlhbAorZXJyb3IgaWYgIi0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSIgaXMgbm90IHNldCB3aGVuIGNvbmZpZ3VyaW5nIEdDQy4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtcnVOIFhzZXR0aW5ncy1jbGllbnQtMC4xMC1vcmlnL2NvbmZpZ3VyZS5hYyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCistLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwLW9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDktMjEgMTQ6MDE6NDcuMDAwMDAwMDAwICswODAwCisrKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDEwLTA5LTIxIDE0OjAyOjAxLjAwMDAwMDAwMCArMDgwMAorQEAgLTMsNyArMyw3IEBACisgQU1fSU5JVF9BVVRPTUFLRShYc2V0dGluZ3MtY2xpZW50LCAwLjEwKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgCistQ0ZMQUdTPSItT3MgLVdhbGwiCisrQ0ZMQUdTPSItTzIgLVdhbGwiCisgCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvbGluay14MTEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOGQwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L2xpbmsteDExLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IFhzZXR0aW5ncy1jbGllbnQtMC4xMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC5vcmlnL01ha2VmaWxlLmFtCTIwMDgtMDItMDcgMTQ6NDk6NTQuMDAwMDAwMDAwICswMDAwCisrKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCTIwMDgtMDItMDcgMTQ6NTA6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtOSw0ICs5LDQgQEAKKyAKKyBsaWJYc2V0dGluZ3NfY2xpZW50X2xhX1NPVVJDRVM9ICQoc291cmNlX2MpICQoc291cmNlX2gpCisgCistbGliWHNldHRpbmdzX2NsaWVudF9sYV9MSUJBREQgICAgICA9IEBYX0xJQlNACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytsaWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AgLWxYMTEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMKKy0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMDMtMDMtMjggMTI6Mzk6NTEuMDAwMDAwMDAwICswMjAwCisrKysgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTExIDA3OjM3OjIxLjQ5MTU5Nzc0MyArMDIwMAorQEAgLTEsNyArMSw3IEBACisgIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorIEFDX0lOSVQoeHNldHRpbmdzLWNsaWVudC5jKQorIEFNX0lOSVRfQVVUT01BS0UoWHNldHRpbmdzLWNsaWVudCwgMC4xMCkKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorCisgQ0ZMQUdTPSItT3MgLVdhbGwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50XzAuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50XzAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwZDlmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gInV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgWHNldHRpbmdzIHByb3RvY29sIgorREVTQ1JJUFRJT04gPSAiTGlicmFyaWVzIHVzZWQgZm9yIGFwcGxpY2F0aW9ucyBtYWtpbmcgdXNlIG9mIHRoZSBYc2V0dGluZ3MgY29uZmlndXJhdGlvbiBcCitzZXR0aW5nIHByb3BhZ2F0aW9uIHByb3RvY29sLiBDb250cm9scyBzZXR0aW5nIG9mIGRvdWJsZSBjbGljayB0aW1lb3V0LCBkcmFnLWFuZC1kcm9wIFwKK3RocmVzaG9sZCwgYW5kIGRlZmF1bHQgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgZm9yIGFsbCBhcHBsaWNhdGlvbnMgcnVubmluZyB3aXRoaW4gYSBcCitkZXNrdG9wLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZy9zb3VyY2VzL29wdGlvbmFsLWRlcGVuZGVuY2llcy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKK1NFQ1RJT04gPSAieC9saWJzIgorTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY2xpZW50Lmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLWNvbW1vbi5oO2VuZGxpbmU9MjI7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSIKKworUFIgPSAicjUiCisKK2hlYWRlcnMgPSAieHNldHRpbmdzLWNvbW1vbi5oIHhzZXR0aW5ncy1jbGllbnQuaCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvbWF0Y2hib3gvb3B0aW9uYWwtZGVwZW5kZW5jaWVzL1hzZXR0aW5ncy1jbGllbnQtMC4xMC50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vTUlULXN0eWxlLWxpY2Vuc2UgXAorICAgICAgICBmaWxlOi8vbGluay14MTEucGF0Y2g7YXBwbHk9eWVzIFwKKyAgICAgICAgZmlsZTovL2Rpc2FibGVfT3Nfb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMTRhYTlkYjZjMDk3ZTAzMDZkYWM5N2ZiN2RhMWFkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMjc0YTRiYzk2OWFlMTkyOTk0YTg1NmI3Zjc4NmM2ZmNlOTZiYWU3N2Y5NmMxYzJiNzFkZDk3NTk5ZTA2ZTQzIgorCitTID0gIiR7V09SS0RJUn0vWHNldHRpbmdzLWNsaWVudC0wLjEwIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIFRoaXMgcGFja2FnZSBkb2Vzbid0IHNoaXAgd2l0aCBpdHMgb3duIENPUFlJTkcgZmlsZSBhbmQKKyAgICAjIGF1dG90b29scyB3aWxsIGluc3RhbGwgYSBHUEx2MiBvbmUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIE1JVC1zdHlsZSBsaWNlbnNlIGhlcmUuCisgICAgIyBBZGQgdGhlIGNvcnJlY3QgbGljZW5zZSBoZXJlIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAgICBjcCAtZiAke1dPUktESVJ9L01JVC1zdHlsZS1saWNlbnNlICR7U30vQ09QWUlORworfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24gYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2Y2FhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbgpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgVmVyeSBzaW1wbGUgc2Vzc2lvbiBtYW5hZ2VyIGZvciBtYXRjaGJveCB0b29scworIworCisjIFVuY29tbWVudCBiZWxvdyB0byBlbmFibGUgcGFyc2luZyBvZiBkZWJpYW4gbWVudSBlbnRyeXMKKyMgZXhwb3J0IE1CX1VTRV9ERUJfTUVOVVM9MSAKKworaWYgWyAtZSAkSE9NRS8ubWF0Y2hib3gvc2Vzc2lvbiBdCit0aGVuCitleGVjICRIT01FLy5tYXRjaGJveC9zZXNzaW9uCitmaQorCitpZiBbIC1lIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbiBdCit0aGVuCitleGVjIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbgorZmkKKworIyBEZWZhdWx0IGZpbGVzIHRvIHJ1biBpZiAkSE9NRS8ubWF0Y2hib3gvc2Vzc2lvbiBvciAvZXRjL21hdGNoYm94L3Nlc3Npb24KKyMgZG9udCBleGlzdC4gCisKK21hdGNoYm94LWRlc2t0b3AgJgorbWF0Y2hib3gtcGFuZWwgJgorZXhlYyBtYXRjaGJveC13aW5kb3ctbWFuYWdlciAkQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbl8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFmMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbl8wLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJDdXN0b20gTWF0Y2hib3ggc2Vzc2lvbiBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9tYXRjaGJveC1zZXNzaW9uO2VuZGxpbmU9MjA7bWQ1PTE4MGYxYzE2OWExNWQwNTlhNTZjMzAwOTRmNmZiNWVhIgorCitTRUNUSU9OID0gIngxMSIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtY29tbW9uIgorCitTUkNfVVJJID0gImZpbGU6Ly9tYXRjaGJveC1zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitQUiA9ICJyNCIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gIngtc2Vzc2lvbi1tYW5hZ2VyIgorQUxURVJOQVRJVkVfVEFSR0VUW3gtc2Vzc2lvbi1tYW5hZ2VyXSA9ICIke2JpbmRpcn0vbWF0Y2hib3gtc2Vzc2lvbiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbWF0Y2hib3gtc2Vzc2lvbiAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtL2tiZGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ZGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bS9rYmRjb25maWcKQEAgLTAsMCArMSw0MiBAQAorIworIyBUaGlzIGlzIGFuIGV4YW1wbGUga2V5Ym9hcmQgY29uZmlnIGZpbGUgZm9yIG1hdGNoYm94CisjCisjIFlvdSBjYW4gZWRpdCB0aGlzIGZpbGUgb3IgY2hhbmdlIHBlciB1c2VyIGJ5IGNvcHlpbmcgdG8gCisjICB+Ly5tYXRjaGJveC9rYmRjb25maWcKKyMKKyMgU2UgdGhlIG1hdGNoYm94IG1hbnVhbCBmb3IgbW9yZSBpbmZvICggaHR0cDovL3Byb2plY3RzLm8taGFuZC5jb20vbWF0Y2hib3ggKQorCisjIyMgV2luZG93IG9wZXJhdGlvbiBzaG9ydCBjdXRzIAorCis8QWx0Pm49bmV4dAorPEFsdD5wPXByZXYKKzxBbHQ+Yz1jbG9zZQorPEFsdD5kPWRlc2t0b3AKKzxBbHQ+bT0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKworIyMjIEFwcCBsYXVuY2hpbmcuCisKKzxjdHJsPjxhbHQ+eD0heHRlcm0KKzxjdHJsPjxhbHQ+cj0hcnh2dAorCisjIyMgcG9reSBhZGRpdGlvbnMKKworWEY4NkNhbGVuZGFyPSEkY29udGFjdHMKK3RlbGVwaG9uZT0hJGRhdGVzCitYRjg2U3RhcnQ9IW1hdGNoYm94LXJlbW90ZSAtZGVza3RvcAorRjI9IW1hdGNoYm94LXJlbW90ZSAtbWJtZW51CisKKyNYRjg2TWFpbD0hJHRhc2tzCisjRXNjYXBlPWNsb3NlCisKKyMjIyB3aW5kb3dzIHN0eWxlIGtleSBzaG9ydGN1dHMKKworPGFsdD5UYWI9bmV4dAorPGFsdD48c2hpZnQ+VGFiPXByZXYKKworPGFsdD5zcGFjZT10YXNrbWVudQorPGFsdD5lc2NhcGU9IW1hdGNoYm94LXJlbW90ZSAtbWJtZW51Cis8YWx0PmY0PWNsb3NlCisKK2YxMT1mdWxsc2NyZWVuCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmQyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd21fZ2l0LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggbGlnaHR3ZWlnaHQgd2luZG93IG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvd20uaDtlbmRsaW5lPTIxO21kNT1hN2U4NDQ0NjVlZGJjZjc5YzI4MjM2OWY5M2NhYTgzNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTNlNWQ5ZjgzMmI1MjdiMGQ3MmRiZThlM2M0YzYwYjk1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy93bS5jO2VuZGxpbmU9MjE7bWQ1PThkYzlkMjQ0NzdkODdlZjVkZmJjMmU0OTI3MTQ2YWFiIgorCitTRUNUSU9OID0gIngxMS93bSIKK0RFUEVORFMgPSAibGlibWF0Y2hib3ggdmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4cmVuZGVyIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGV4cGF0IGdjb25mIGxpYnhjdXJzb3IgbGlieGZpeGVzIgorCitTUkNSRVYgPSAiMjk1NDRmMGU2MWNjMjgxZmM2MDA2MTQ0M2E1MzcyNzFlMTA4MWI3OCIKK1BWID0gIjEuMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tYXRjaGJveC13aW5kb3ctbWFuYWdlciBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRjb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL2Jsb25kaWUvbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvRGVmYXVsdC9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9NQk9wdXMvbWF0Y2hib3giCisKK0VYVFJBX09FQ09ORiA9ICIgLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24gXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteHJtIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtZXhwYXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtbGliPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4cGF0LWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAke1dPUktESVJ9L2tiZGNvbmZpZyAke1N9L2RhdGEva2JkY29uZmlnCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVudS1jYWNoZS9tZW51LWNhY2hlXzEuMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkwOWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lbnUtY2FjaGUvbWVudS1jYWNoZV8xLjAuMC5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGNhY2hpbmcgYXBwbGljYXRpb24gbWVudXMiCitERVNDUklQVElPTiA9ICJBIGxpYnJhcnkgY3JlYXRpbmcgYW5kIHV0aWxpemluZyBjYWNoZXMgdG8gc3BlZWQgdXAgZnJlZWRlc2t0b3Aub3JnIGFwcGxpY2F0aW9uIG1lbnVzIgorSE9NRVBBR0UgPSAiaHR0cDovL2x4ZGUuc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOTY0YzY4OWZjZjRjMjFjNjc5N2VhODc0MDg0MTZiNiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIGxpYmZtLWV4dHJhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9seGRlL21lbnUtY2FjaGUtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGE4ZTZjMWE4NmQ1ZTY0ZWM3MjVkODUwYTRhYmZiYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmY3ZGY0MzdiYmZkMzExOWM1ZjY2MmM2ZDIwOWI5OGYxNWRlMDNhNzIwMzMwOGM2YjU2YTRjMWUxZDQxOWFhZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgZ3RrLWRvYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbGliZ2x1XzkuMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbGliZ2x1XzkuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDk5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJUaGUgT3BlbkdMIHV0aWxpdHkgdG9vbGtpdCIKK0RFU0NSSVBUSU9OID0gIkdMVSBpcyBhIHV0aWxpdHkgdG9vbGtpdCB1c2VkIHdpdGggT3BlbkdMIGltcGxlbWVudGF0aW9ucyIKKworSE9NRVBBR0UgPSAiaHR0cDovL21lc2EzZC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaW5jbHVkZS9HTC9nbHUuaDtlbmRsaW5lPTI5O21kNT02Yjc5YzU3MGY2NDQzNjNiMzU2NDU2ZTdkNDQ0NzFkOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbGlidGVzcy90ZXNzLmM7ZW5kbGluZT0yOTttZDU9NmI3OWM1NzBmNjQ0MzYzYjM1NjQ1NmU3ZDQ0NDcxZDkiCisKKyMgRXBvY2ggYXMgdGhpcyB1c2VkIHRvIGJlIHBhcnQgb2YgbWVzYQorUEUgPSAiMiIKK1BSID0gIjAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9nbHUvZ2x1LSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZTkyNDkxMzJmZjQ5Mjc1NDYxY2Y5MjAzOTA4MzAzMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjdhZDBkMzc5YTcyMmZjYmQzMDNhYTU2NTBjNmQ3ZDU1NDRmZGU4MzE5NmI0MmE3M2QxMTkzNTY4YTRkZjEyIgorCitTID0gIiR7V09SS0RJUn0vZ2x1LSR7UFZ9IgorCitERVBFTkRTID0gInZpcnR1YWwvbGliZ2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBSZXF1aXJlcyBsaWJHTC5zbyB3aGljaCBpcyBwcm92aWRlZCBieSBtZXNhIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIyBSZW1vdmUgdGhlIG1lc2EtZ2x1IGRlcGVuZGVuY3kgaW4gbWVzYS1nbHUtZGV2LCBhcyBtZXNhLWdsdSBpcyBlbXB0eQorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWU5YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsNjI0IEBACitGcm9tIGI2OTVjM2EzZmEzZjRjZDQ4YzEzYWEyNjU0MjExMGRlMjcwNzU1MTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogTW9uLCAxMiBNYXkgMjAxNCAxNToyMjozMiAtMDQwMAorU3ViamVjdDogW1BBVENIIDEvOV0gbWVzYS1kZW1vczogQWRkIG1pc3NpbmcgZGF0YSBmaWxlcy4KKworQWRkIHNvbWUgZGF0YSBmaWxlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBnaXQgcmVwb3NpdG9yeToKKyAgIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9tZXNhL2RlbW9zL3RyZWUvP2lkPW1lc2EtZGVtb3MtOC4xLjAKK2J1dCBub3QgaW4gdGhlIHJlbGVhc2UgdGFyYmFsbAorICAgZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9kZW1vcy84LjEuMC9tZXNhLWRlbW9zLTguMS4wLnRhci5iejIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsICAgICAgfCAgIDQgKworIHNyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsICAgfCAgIDcgKworIHNyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnICAgfCAgNDcgKysrKysrKworIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnICAgfCAgMzEgKysrKysKKyBzcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydCAgIHwgIDE2ICsrKworIHNyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcgICAgICAgfCAgMjEgKysrCisgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsICAgICB8IDI3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2dsc2wvc2tpbm5pbmcudmVydCAgICAgICAgICB8ICAyNCArKysrCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyB8ICAxOSArKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IHwgIDE0ICsrCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyB8ICAxNyArKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IHwgIDE0ICsrCisgc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgICB8ICAgOCArKworIDEzIGZpbGVzIGNoYW5nZWQsIDUwMSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9nbHNsL3NraW5uaW5nLnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wgYi9zcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg2ZDI5OGUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCitAQCAtMCwwICsxLDQgQEAKKyt2b2lkIG1haW4oKQorK3sKKysgICBnbF9GcmFnQ29sb3IgPSBnbF9GcmFnQ29vcmQuenp6ejsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgYi9zcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM2ZGM2ZWUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCitAQCAtMCwwICsxLDcgQEAKKyt2b2lkIG1haW4oKSB7CisrICAgdmVjNCBzdW0gPSB2ZWM0KDApOworKyAgIGZvciAoaW50IGkgPSAxOyBpICE9IDI7IGkgKz0gMikgeworKyAgICAgIHN1bSArPSB2ZWM0KDAuMSwgMC4xLCAwLjEsIDAuMSk7CisrICAgfQorKyAgIGdsX0ZyYWdDb2xvciA9IHN1bTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcgYi9zcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI1ZGFiYjQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCitAQCAtMCwwICsxLDQ3IEBACisrLy8KKysvLyBGcmFnbWVudCBzaGFkZXIgZm9yIHByb2NlZHVyYWwgYnVtcHMKKysvLworKy8vIEF1dGhvcnM6IEpvaG4gS2Vzc2VuaWNoLCBSYW5kaSBSb3N0CisrLy8KKysvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiAzRGxhYnMgSW5jLiBMdGQuIAorKy8vCisrLy8gU2VlIDNEbGFicy1MaWNlbnNlLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbgorKy8vCisrLy8gVGV4dHVyZSBtYXBwaW5nL21vZHVsYXRpb24gYWRkZWQgYnkgQnJpYW4gUGF1bAorKy8vCisrCisrdmFyeWluZyB2ZWMzIExpZ2h0RGlyOworK3ZhcnlpbmcgdmVjMyBFeWVEaXI7CisrCisrdW5pZm9ybSBmbG9hdCBCdW1wRGVuc2l0eTsgICAgIC8vID0gMTYuMAorK3VuaWZvcm0gZmxvYXQgQnVtcFNpemU7ICAgICAgICAvLyA9IDAuMTUKKyt1bmlmb3JtIGZsb2F0IFNwZWN1bGFyRmFjdG9yOyAgLy8gPSAwLjUKKysKKyt1bmlmb3JtIHNhbXBsZXIyRCBUZXg7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgIHZlYzMgYW1iaWVudCA9IHZlYzMoMC4yNSk7CisrICAgIHZlYzMgbGl0Q29sb3I7CisrICAgIHZlYzIgYyA9IEJ1bXBEZW5zaXR5ICogZ2xfVGV4Q29vcmRbMF0uc3Q7CisrICAgIHZlYzIgcCA9IGZyYWN0KGMpIC0gdmVjMigwLjUpOworKworKyAgICBmbG9hdCBkLCBmOworKyAgICBkID0gcC54ICogcC54ICsgcC55ICogcC55OworKyAgICBmID0gaW52ZXJzZXNxcnQoZCArIDEuMCk7CisrCisrICAgIGlmIChkID49IEJ1bXBTaXplKQorKyAgICAgICAgeyBwID0gdmVjMigwLjApOyBmID0gMS4wOyB9CisrCisrICAgIHZlYzMgU3VyZmFjZUNvbG9yID0gdGV4dHVyZTJEKFRleCwgZ2xfVGV4Q29vcmRbMF0uc3QpLnh5ejsKKysKKysgICAgdmVjMyBub3JtRGVsdGEgPSB2ZWMzKHAueCwgcC55LCAxLjApICogZjsKKysgICAgbGl0Q29sb3IgPSBTdXJmYWNlQ29sb3IgKiAoYW1iaWVudCArIG1heChkb3Qobm9ybURlbHRhLCBMaWdodERpciksIDAuMCkpOworKyAgICB2ZWMzIHJlZmxlY3REaXIgPSByZWZsZWN0KExpZ2h0RGlyLCBub3JtRGVsdGEpOworKyAgICAKKysgICAgZmxvYXQgc3BlYyA9IG1heChkb3QoRXllRGlyLCByZWZsZWN0RGlyKSwgMC4wKTsKKysgICAgc3BlYyAqPSBTcGVjdWxhckZhY3RvcjsKKysgICAgbGl0Q29sb3IgPSBtaW4obGl0Q29sb3IgKyBzcGVjLCB2ZWMzKDEuMCkpOworKworKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpdENvbG9yLCAxLjApOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGRiMDYwYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKK0BAIC0wLDAgKzEsMzEgQEAKKysjZXh0ZW5zaW9uIEdMX0FSQl91bmlmb3JtX2J1ZmZlcl9vYmplY3QgOiBlbmFibGUKKysKKytsYXlvdXQoc3RkMTQwKSB1bmlmb3JtIGNvbG9yczAKKyt7CisrICAgIGZsb2F0IERpZmZ1c2VDb29sOworKyAgICBmbG9hdCBEaWZmdXNlV2FybTsKKysgICAgdmVjMyAgU3VyZmFjZUNvbG9yOworKyAgICB2ZWMzICBXYXJtQ29sb3I7CisrICAgIHZlYzMgIENvb2xDb2xvcjsKKysgICAgdmVjNCAgc29tZVs4XTsKKyt9OworKworK3ZhcnlpbmcgZmxvYXQgTmRvdEw7CisrdmFyeWluZyB2ZWMzICBSZWZsZWN0VmVjOworK3ZhcnlpbmcgdmVjMyAgVmlld1ZlYzsKKysKKyt2b2lkIG1haW4gKHZvaWQpCisreworKworKyAgICB2ZWMzIGtjb29sICAgID0gbWluKENvb2xDb2xvciArIERpZmZ1c2VDb29sICogU3VyZmFjZUNvbG9yLCAxLjApOworKyAgICB2ZWMzIGt3YXJtICAgID0gbWluKFdhcm1Db2xvciArIERpZmZ1c2VXYXJtICogU3VyZmFjZUNvbG9yLCAxLjApOworKyAgICB2ZWMzIGtmaW5hbCAgID0gbWl4KGtjb29sLCBrd2FybSwgTmRvdEwpOworKworKyAgICB2ZWMzIG5yZWZsZWN0ID0gbm9ybWFsaXplKFJlZmxlY3RWZWMpOworKyAgICB2ZWMzIG52aWV3ICAgID0gbm9ybWFsaXplKFZpZXdWZWMpOworKworKyAgICBmbG9hdCBzcGVjICAgID0gbWF4KGRvdChucmVmbGVjdCwgbnZpZXcpLCAwLjApOworKyAgICBzcGVjICAgICAgICAgID0gcG93KHNwZWMsIDMyLjApOworKworKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0IChtaW4oa2ZpbmFsICsgc3BlYywgMS4wKSwgMS4wKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM5N2Q3MzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CitAQCAtMCwwICsxLDE2IEBACisrdmVjMyBMaWdodFBvc2l0aW9uID0gdmVjMygwLjAsIDEwLjAsIDQuMCk7IAorKyAKKyt2YXJ5aW5nIGZsb2F0IE5kb3RMOworK3ZhcnlpbmcgdmVjMyAgUmVmbGVjdFZlYzsKKyt2YXJ5aW5nIHZlYzMgIFZpZXdWZWM7CisrIAorK3ZvaWQgbWFpbih2b2lkKQorK3sKKysgICAgdmVjMyBlY1BvcyAgICAgID0gdmVjMyAoZ2xfTW9kZWxWaWV3TWF0cml4ICogZ2xfVmVydGV4KTsKKysgICAgdmVjMyB0bm9ybSAgICAgID0gbm9ybWFsaXplKGdsX05vcm1hbE1hdHJpeCAqIGdsX05vcm1hbCk7CisrICAgIHZlYzMgbGlnaHRWZWMgICA9IG5vcm1hbGl6ZShMaWdodFBvc2l0aW9uIC0gZWNQb3MpOworKyAgICBSZWZsZWN0VmVjICAgICAgPSBub3JtYWxpemUocmVmbGVjdCgtbGlnaHRWZWMsIHRub3JtKSk7CisrICAgIFZpZXdWZWMgICAgICAgICA9IG5vcm1hbGl6ZSgtZWNQb3MpOworKyAgICBOZG90TCAgICAgICAgICAgPSAoZG90KGxpZ2h0VmVjLCB0bm9ybSkgKyAxLjApICogMC41OworKyAgICBnbF9Qb3NpdGlvbiAgICAgPSBmdHJhbnNmb3JtKCk7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcgYi9zcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTQ5YjhhYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZworQEAgLTAsMCArMSwyMSBAQAorKworK2NvbnN0IGludCBLZXJuZWxTaXplID0gOTsKKysKKysvL3RleHR1cmUgb2Zmc2V0cworK3VuaWZvcm0gdmVjMiBPZmZzZXRbS2VybmVsU2l6ZV07CisrLy9jb252b2x1dGlvbiBrZXJuZWwKKyt1bmlmb3JtIHZlYzQgS2VybmVsVmFsdWVbS2VybmVsU2l6ZV07CisrdW5pZm9ybSBzYW1wbGVyMkQgc3JjVGV4OworK3VuaWZvcm0gdmVjNCBTY2FsZUZhY3RvcjsKKyt1bmlmb3JtIHZlYzQgQmFzZUNvbG9yOworKworK3ZvaWQgbWFpbih2b2lkKQorK3sKKysgICAgaW50IGk7CisrICAgIHZlYzQgc3VtID0gdmVjNCgwLjApOworKyAgICBmb3IgKGkgPSAwOyBpIDwgS2VybmVsU2l6ZTsgKytpKSB7CisrICAgICAgICB2ZWM0IHRtcCA9IHRleHR1cmUyRChzcmNUZXgsIGdsX1RleENvb3JkWzBdLnN0ICsgT2Zmc2V0W2ldKTsKKysgICAgICAgIHN1bSArPSB0bXAgKiBLZXJuZWxWYWx1ZVtpXTsKKysgICAgfQorKyAgICBnbF9GcmFnQ29sb3IgPSBzdW0gKiBTY2FsZUZhY3RvciArIEJhc2VDb2xvcjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY4MzNjYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5nbHNsCitAQCAtMCwwICsxLDI3OSBAQAorKy8vCisrLy8gRGVzY3JpcHRpb24gOiBBcnJheSBhbmQgdGV4dHVyZWxlc3MgR0xTTCAyRC8zRC80RCBzaW1wbGV4CisrLy8gbm9pc2UgZnVuY3Rpb25zLgorKy8vIEF1dGhvciA6IElhbiBNY0V3YW4sIEFzaGltYSBBcnRzLgorKy8vIE1haW50YWluZXIgOiBpam0KKysvLyBMYXN0bW9kIDogMjAxMTAyMjMKKysvLyBMaWNlbnNlIDogQ29weXJpZ2h0IChDKSAyMDExIEFzaGltYSBBcnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBBcnRpc3RpYyBMaWNlbnNlIDIuMDsgU2VlIExJQ0VOQ0UgZmlsZS4KKysvLworKworKyNkZWZpbmUgTk9STUFMSVpFX0dSQURJRU5UUworKyN1bmRlZiBVU0VfQ0lSQ0xFCisrI2RlZmluZSBDT0xMQVBTRV9TT1JUTkVUCisrCisrZmxvYXQgcGVybXV0ZShmbG9hdCB4MCx2ZWMzIHApIHsKKysgIGZsb2F0IHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrdmVjMiBwZXJtdXRlKHZlYzIgeDAsdmVjMyBwKSB7CisrICB2ZWMyIHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrdmVjMyBwZXJtdXRlKHZlYzMgeDAsdmVjMyBwKSB7CisrICB2ZWMzIHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrdmVjNCBwZXJtdXRlKHZlYzQgeDAsdmVjMyBwKSB7CisrICB2ZWM0IHgxID0gbW9kKHgwICogcC55LCBwLngpOworKyAgcmV0dXJuIGZsb29yKCBtb2QoICh4MSArIHAueikgKngwLCBwLnggKSk7CisrICB9CisrCisrdW5pZm9ybSB2ZWM0IHBQYXJhbTsKKysvLyBFeGFtcGxlCisrLy8gY29uc3QgdmVjNCBwUGFyYW0gPSB2ZWM0KCAxNy4qIDE3LiwgMzQuLCAxLiwgNy4pOworKworK2Zsb2F0IHRheWxvckludlNxcnQoZmxvYXQgcikKKysgIHsKKysgIHJldHVybiAoIDAuODM2NjYwMDI2NTM0MDggKyAwLjcqMC44NTM3MzQ3MjA5NTMxNCAtIDAuODUzNzM0NzIwOTUzMTQgKiByICk7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlMih2ZWMyIHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKDAuMjExMzI0ODY1NDA1MTg3MTM0LCAvLyAoMy4wLXNxcnQoMy4wKSkvNi47CisrICAgICAgICAgICAgICAgICAgICAgIDAuMzY2MDI1NDAzNzg0NDM4NTk3KTsgLy8gMC41KihzcXJ0KDMuMCktMS4pOworKyAgY29uc3QgdmVjMyBEID0gdmVjMyggMC4sIDAuNSwgMi4wKSAqIDMuMTQxNTkyNjUzNTg5NzkzMTI7CisrLy8gRmlyc3QgY29ybmVyCisrICB2ZWMyIGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXkpICk7CisrICB2ZWMyIHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eCk7CisrCisrLy8gT3RoZXIgY29ybmVycworKyAgdmVjMiBpMSA9ICh4MC54ID4geDAueSkgPyB2ZWMyKDEuLDAuKSA6IHZlYzIoMC4sMS4pIDsKKysKKysgICAvLyB4MCA9IHgwIC0gMC4gKyAwLiAqIEMKKysgIHZlYzIgeDEgPSB4MCAtIGkxICsgMS4gKiBDLnh4IDsKKysgIHZlYzIgeDIgPSB4MCAtIDEuICsgMi4gKiBDLnh4IDsKKysKKysvLyBQZXJtdXRhdGlvbnMKKysgIGkgPSBtb2QoaSwgcFBhcmFtLngpOworKyAgdmVjMyBwID0gcGVybXV0ZSggcGVybXV0ZSgKKysgICAgICAgICAgICAgaS55ICsgdmVjMygwLiwgaTEueSwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS54ICsgdmVjMygwLiwgaTEueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrCisrI2lmbmRlZiBVU0VfQ0lSQ0xFCisrLy8gKCBOIHBvaW50cyB1bmlmb3JtbHkgb3ZlciBhIGxpbmUsIG1hcHBlZCBvbnRvIGEgZGlhbW9uZC4pCisrICB2ZWMzIHggPSBmcmFjdChwIC8gcFBhcmFtLncpIDsKKysgIHZlYzMgaCA9IDAuNSAtIGFicyh4KSA7CisrCisrICB2ZWMzIHN4ID0gdmVjMyhsZXNzVGhhbih4LEQueHh4KSkgKjIuIC0xLjsKKysgIHZlYzMgc2ggPSB2ZWMzKGxlc3NUaGFuKGgsRC54eHgpKTsKKysKKysgIHZlYzMgYTAgPSB4ICsgc3gqc2g7CisrICB2ZWMyIHAwID0gdmVjMihhMC54LGgueCk7CisrICB2ZWMyIHAxID0gdmVjMihhMC55LGgueSk7CisrICB2ZWMyIHAyID0gdmVjMihhMC56LGgueik7CisrCisrI2lmZGVmIE5PUk1BTElTRV9HUkFESUVOVFMKKysgIHAwICo9IHRheWxvckludlNxcnQoZG90KHAwLHAwKSk7CisrICBwMSAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMSxwMSkpOworKyAgcDIgKj0gdGF5bG9ySW52U3FydChkb3QocDIscDIpKTsKKysjZW5kaWYKKysKKysgIHZlYzMgZyA9IDIuMCAqIHZlYzMoIGRvdChwMCwgeDApLCBkb3QocDEsIHgxKSwgZG90KHAyLCB4MikgKTsKKysjZWxzZQorKy8vIE4gcG9pbnRzIGFyb3VuZCBhIHVuaXQgY2lyY2xlLgorKyAgdmVjMyBwaGkgPSBELnogKiBtb2QocCxwUGFyYW0udykgL3BQYXJhbS53IDsKKysgIHZlYzQgYTAgPSBzaW4ocGhpLnh4eXkrRC54eXh5KTsKKysgIHZlYzIgYTEgPSBzaW4ocGhpLnp6ICtELnh5KTsKKysgIHZlYzMgZyA9IHZlYzMoIGRvdChhMC54eSwgeDApLCBkb3QoYTAuencsIHgxKSwgZG90KGExLnh5LCB4MikgKTsKKysjZW5kaWYKKysvLyBtaXgKKysgIHZlYzMgbSA9IG1heCgwLjUgLSB2ZWMzKGRvdCh4MCx4MCksIGRvdCh4MSx4MSksIGRvdCh4Mix4MikpLCAwLik7CisrICBtID0gbSptIDsKKysgIHJldHVybiAxLjY2NjY2KiA3MC4qZG90KG0qbSwgZyk7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlMyh2ZWMzIHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKDEuLzYuICwgMS4vMy4gKSA7CisrICBjb25zdCB2ZWM0IEQgPSB2ZWM0KDAuLCAwLjUsIDEuMCwgMi4wKTsKKysKKysvLyBGaXJzdCBjb3JuZXIKKysgIHZlYzMgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eXkpICk7CisrICB2ZWMzIHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eHgpIDsKKysgIAorKy8vIE90aGVyIGNvcm5lcnMKKysjaWZkZWYgQ09MTEFQU0VfU09SVE5FVAorKyAgdmVjMyBnID0gdmVjMyggZ3JlYXRlclRoYW4oIHgwLnh5eiwgeDAueXp4KSApOworKyAgdmVjMyBsID0gdmVjMyggbGVzc1RoYW5FcXVhbCggeDAueHl6LCB4MC55engpICk7CisrCisrICB2ZWMzIGkxID0gZy54eXogKiBsLnp4eTsKKysgIHZlYzMgaTIgPSBtYXgoIGcueHl6LCBsLnp4eSk7CisrI2Vsc2UKKysvLyBLZWVwaW5nIHRoaXMgY2xlYW4gLSBsZXQgdGhlIGNvbXBpbGVyIG9wdGltaXplLgorKyAgdmVjMyBxMTsKKysgIHExLnggPSBtYXgoeDAueCwgeDAueSk7CisrICBxMS55ID0gbWluKHgwLngsIHgwLnkpOworKyAgcTEueiA9IHgwLno7CisrCisrICB2ZWMzIHEyOworKyAgcTIueCA9IG1heChxMS54LHExLnopOworKyAgcTIueiA9IG1pbihxMS54LHExLnopOworKyAgcTIueSA9IHExLnk7CisrCisrICB2ZWMzIHEzOworKyAgcTMueSA9IG1heChxMi55LCBxMi56KTsKKysgIHEzLnogPSBtaW4ocTIueSwgcTIueik7CisrICBxMy54ID0gcTIueDsKKysKKysgIHZlYzMgaTEgPSB2ZWMzKGVxdWFsKHEzLnh4eCwgeDApKTsKKysgIHZlYzMgaTIgPSBpMSArIHZlYzMoZXF1YWwocTMueXl5LCB4MCkpOworKyNlbmRpZgorKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjMyB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHh4OworKyAgdmVjMyB4MiA9IHgwIC0gaTIgKyAyLiAqIEMueHh4OworKyAgdmVjMyB4MyA9IHgwIC0gMS4gKyAzLiAqIEMueHh4OworKworKy8vIFBlcm11dGF0aW9ucworKyAgaSA9IG1vZChpLCBwUGFyYW0ueCApOworKyAgdmVjNCBwID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSgKKysgICAgICAgICAgICAgaS56ICsgdmVjNCgwLiwgaTEueiwgaTIueiwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS55ICsgdmVjNCgwLiwgaTEueSwgaTIueSwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS54ICsgdmVjNCgwLiwgaTEueCwgaTIueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrCisrLy8gR3JhZGllbnRzCisrLy8gKCBOKk4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgc3F1YXJlLCBtYXBwZWQgb250byBhIG9jdG9oZWRyb24uKQorKyAgZmxvYXQgbl8gPSAxLjAvcFBhcmFtLncgOworKyAgdmVjMyBucyA9IG5fICogRC53eXogLSBELnh6eCA7CisrCisrICB2ZWM0IGogPSBwIC0gcFBhcmFtLncqcFBhcmFtLncqZmxvb3IocCAqIG5zLnogKm5zLnopOyAvLyBtb2QocCxOKk4pCisrCisrICB2ZWM0IHhfID0gZmxvb3IoaiAqIG5zLnopIDsKKysgIHZlYzQgeV8gPSBmbG9vcihqIC0gcFBhcmFtLncgKiB4XyApIDsgLy8gbW9kKGosTikKKysKKysgIHZlYzQgeCA9IHhfICpucy54ICsgbnMueXl5eTsKKysgIHZlYzQgeSA9IHlfICpucy54ICsgbnMueXl5eTsKKysgIHZlYzQgaCA9IDEuIC0gYWJzKHgpIC0gYWJzKHkpOworKworKyAgdmVjNCBiMCA9IHZlYzQoIHgueHksIHkueHkgKTsKKysgIHZlYzQgYjEgPSB2ZWM0KCB4Lnp3LCB5Lnp3ICk7CisrCisrICB2ZWM0IHMwID0gdmVjNChsZXNzVGhhbihiMCxELnh4eHgpKSAqMi4gLTEuOworKyAgdmVjNCBzMSA9IHZlYzQobGVzc1RoYW4oYjEsRC54eHh4KSkgKjIuIC0xLjsKKysgIHZlYzQgc2ggPSB2ZWM0KGxlc3NUaGFuKGgsIEQueHh4eCkpOworKworKyAgdmVjNCBhMCA9IGIwLnh6eXcgKyBzMC54enl3KnNoLnh4eXkgOworKyAgdmVjNCBhMSA9IGIxLnh6eXcgKyBzMS54enl3KnNoLnp6d3cgOworKworKyAgdmVjMyBwMCA9IHZlYzMoYTAueHksaC54KTsKKysgIHZlYzMgcDEgPSB2ZWMzKGEwLnp3LGgueSk7CisrICB2ZWMzIHAyID0gdmVjMyhhMS54eSxoLnopOworKyAgdmVjMyBwMyA9IHZlYzMoYTEuencsaC53KTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyAgcDMgKj0gdGF5bG9ySW52U3FydChkb3QocDMscDMpKTsKKysjZW5kaWYKKysKKysvLyBNaXgKKysgIHZlYzQgbSA9IG1heCgwLjYgLSB2ZWM0KGRvdCh4MCx4MCksIGRvdCh4MSx4MSksIGRvdCh4Mix4MiksIGRvdCh4Myx4MykpLCAwLik7CisrICBtID0gbSAqIG07CisrLy91c2VkIHRvIGJlIDY0LgorKyAgcmV0dXJuIDQ4LjAgKiBkb3QoIG0qbSwgdmVjNCggZG90KHAwLHgwKSwgZG90KHAxLHgxKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdChwMix4MiksIGRvdChwMyx4MykgKSApOworKyAgfQorKworK3ZlYzQgZ3JhZDQoZmxvYXQgaiwgdmVjNCBpcCkKKysgIHsKKysgIGNvbnN0IHZlYzQgb25lcyA9IHZlYzQoMS4sMS4sMS4sLTEuKTsKKysgIHZlYzQgcCxzOworKworKyAgcC54eXogPSBmbG9vciggZnJhY3QgKHZlYzMoaikgKiBpcC54eXopICpwUGFyYW0udykgKiBpcC56IC0xLjA7CisrICBwLncgPSAxLjUgLSBkb3QoYWJzKHAueHl6KSwgb25lcy54eXopOworKyAgcyA9IHZlYzQobGVzc1RoYW4ocCx2ZWM0KDAuKSkpOworKyAgcC54eXogPSBwLnh5eiArIChzLnh5eioyLi0xLikgKiBzLnd3dzsKKysKKysgIHJldHVybiBwOworKyAgfQorKworK2Zsb2F0IHNpbXBsZXhOb2lzZTQodmVjNCB2KQorKyAgeworKyAgY29uc3QgdmVjMiBDID0gdmVjMiggMC4xMzgxOTY2MDExMjUwMTA1MDQsIC8vICg1IC0gc3FydCg1KSkvMjAgRzQKKysgICAgICAgICAgICAgICAgICAgICAgICAwLjMwOTAxNjk5NDM3NDk0NzQ1MSk7IC8vIChzcXJ0KDUpIC0gMSkvNCBGNAorKy8vIEZpcnN0IGNvcm5lcgorKyAgdmVjNCBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5eXkpICk7CisrICB2ZWM0IHgwID0gdiAtIGkgKyBkb3QoaSwgQy54eHh4KTsKKysKKysvLyBPdGhlciBjb3JuZXJzCisrCisrLy8gRm9yY2UgZXhpc3RhbmNlIG9mIHN0cmljdCB0b3RhbCBvcmRlcmluZyBpbiBzb3J0LgorKyAgdmVjNCBxMCA9IGZsb29yKHgwICogMTAyNC4wKSArIHZlYzQoIDAuLCAxLi80LiwgMi4vNC4gLCAzLi80Lik7CisrICB2ZWM0IHExOworKyAgcTEueHkgPSBtYXgocTAueHkscTAuencpOyAvLyB4OnogeTp3CisrICBxMS56dyA9IG1pbihxMC54eSxxMC56dyk7CisrCisrICB2ZWM0IHEyOworKyAgcTIueHogPSBtYXgocTEueHoscTEueXcpOyAvLyB4Onkgejp3CisrICBxMi55dyA9IG1pbihxMS54eixxMS55dyk7CisrICAKKysgIHZlYzQgcTM7CisrICBxMy55ID0gbWF4KHEyLnkscTIueik7IC8vIHk6egorKyAgcTMueiA9IG1pbihxMi55LHEyLnopOworKyAgcTMueHcgPSBxMi54dzsKKysKKysgIHZlYzQgaTEgPSB2ZWM0KGxlc3NUaGFuRXF1YWwocTMueHh4eCwgcTApKTsKKysgIHZlYzQgaTIgPSB2ZWM0KGxlc3NUaGFuRXF1YWwocTMueXl5eSwgcTApKTsKKysgIHZlYzQgaTMgPSB2ZWM0KGxlc3NUaGFuRXF1YWwocTMuenp6eiwgcTApKTsKKysKKysgICAvLyB4MCA9IHgwIC0gMC4gKyAwLiAqIEMKKysgIHZlYzQgeDEgPSB4MCAtIGkxICsgMS4gKiBDLnh4eHg7CisrICB2ZWM0IHgyID0geDAgLSBpMiArIDIuICogQy54eHh4OworKyAgdmVjNCB4MyA9IHgwIC0gaTMgKyAzLiAqIEMueHh4eDsKKysgIHZlYzQgeDQgPSB4MCAtIDEuICsgNC4gKiBDLnh4eHg7CisrCisrLy8gUGVybXV0YXRpb25zCisrICBpID0gbW9kKGksIHBQYXJhbS54ICk7CisrICBmbG9hdCBqMCA9IHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUgKAorKyAgICAgICAgICAgICAgaS53LCBwUGFyYW0ueHl6KSArIGkueiwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICArIGkueSwgcFBhcmFtLnh5eikgKyBpLngsIHBQYXJhbS54eXopOworKyAgdmVjNCBqMSA9IHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUoIHBlcm11dGUgKAorKyAgICAgICAgICAgICBpLncgKyB2ZWM0KGkxLncsIGkyLncsIGkzLncsIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueiArIHZlYzQoaTEueiwgaTIueiwgaTMueiwgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS55ICsgdmVjNChpMS55LCBpMi55LCBpMy55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWM0KGkxLngsIGkyLngsIGkzLngsIDEuICksIHBQYXJhbS54eXopOworKy8vIEdyYWRpZW50cworKy8vICggTipOKk4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgY3ViZSwgbWFwcGVkIG9udG8gYSA0LW9jdG9oZWRyb24uKQorKyAgdmVjNCBpcCA9IHBQYXJhbSA7CisrICBpcC54eSAqPSBwUGFyYW0udyA7CisrICBpcC54ICo9IHBQYXJhbS53IDsKKysgIGlwID0gdmVjNCgxLiwxLiwxLiwyLikgLyBpcCA7CisrCisrICB2ZWM0IHAwID0gZ3JhZDQoajAsIGlwKTsKKysgIHZlYzQgcDEgPSBncmFkNChqMS54LCBpcCk7CisrICB2ZWM0IHAyID0gZ3JhZDQoajEueSwgaXApOworKyAgdmVjNCBwMyA9IGdyYWQ0KGoxLnosIGlwKTsKKysgIHZlYzQgcDQgPSBncmFkNChqMS53LCBpcCk7CisrCisrI2lmZGVmIE5PUk1BTElTRV9HUkFESUVOVFMKKysgIHAwICo9IHRheWxvckludlNxcnQoZG90KHAwLHAwKSk7CisrICBwMSAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMSxwMSkpOworKyAgcDIgKj0gdGF5bG9ySW52U3FydChkb3QocDIscDIpKTsKKysgIHAzICo9IHRheWxvckludlNxcnQoZG90KHAzLHAzKSk7CisrICBwNCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwNCxwNCkpOworKyNlbmRpZgorKworKy8vIE1peAorKyAgdmVjMyBtMCA9IG1heCgwLjYgLSB2ZWMzKGRvdCh4MCx4MCksIGRvdCh4MSx4MSksIGRvdCh4Mix4MikpLCAwLik7CisrICB2ZWMyIG0xID0gbWF4KDAuNiAtIHZlYzIoZG90KHgzLHgzKSwgZG90KHg0LHg0KSApLCAwLik7CisrICBtMCA9IG0wICogbTA7CisrICBtMSA9IG0xICogbTE7CisrICByZXR1cm4gMzIuICogKCBkb3QobTAqbTAsIHZlYzMoIGRvdCggcDAsIHgwICksIGRvdCggcDEsIHgxICksIGRvdCggcDIsIHgyICkpKQorKyAgICAgICAgICAgICAgICsgZG90KG0xKm0xLCB2ZWMyKCBkb3QoIHAzLCB4MyApLCBkb3QoIHA0LCB4NCApICkgKSApIDsKKysKKysgIH0KKysKKysKKysKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9za2lubmluZy52ZXJ0IGIvc3JjL2dsc2wvc2tpbm5pbmcudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI4OTcwZWUKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9nbHNsL3NraW5uaW5nLnZlcnQKK0BAIC0wLDAgKzEsMjQgQEAKKysvLyBWZXJ0ZXggd2VpZ2h0aW5nL2JsZW5kaW4gc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKy8vIDQgTm92IDIwMDgKKysKKyt1bmlmb3JtIG1hdDQgbWF0MCwgbWF0MTsKKythdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0OworKworK3ZvaWQgbWFpbigpIAorK3sKKysgICAvLyBzaW1wbGUgZGlmZnVzZSBzaGFkaW5nCisrICAgLy8gTm90ZSB0aGF0IHdlIHNob3VsZCByZWFsbHkgdHJhbnNmb3JtIHRoZSBub3JtYWwgdmVjdG9yIGFsb25nIHdpdGgKKysgICAvLyB0aGUgcG9zdGlvbiBiZWxvdy4uLiBzb21lZGF5LgorKyAgIHZlYzMgbGlnaHRWZWMgPSB2ZWMzKDAsIDAsIDEpOworKyAgIHZlYzMgbm9ybSA9IGdsX05vcm1hbE1hdHJpeCAqIGdsX05vcm1hbDsKKysgICBmbG9hdCBkb3QgPSAwLjIgKyBtYXgoMC4wLCBkb3Qobm9ybSwgbGlnaHRWZWMpKTsKKysgICBnbF9Gcm9udENvbG9yID0gdmVjNChkb3QpOworKworKyAgIC8vIGNvbXB1dGUgc3VtIG9mIHdlaWdodGVkIHRyYW5zZm9ybWF0aW9ucworKyAgIHZlYzQgcG9zMCA9IG1hdDAgKiBnbF9WZXJ0ZXg7CisrICAgdmVjNCBwb3MxID0gbWF0MSAqIGdsX1ZlcnRleDsKKysgICB2ZWM0IHBvcyA9IG1peChwb3MwLCBwb3MxLCB3ZWlnaHQpOworKworKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIHBvczsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wODM5NDM2CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnCitAQCAtMCwwICsxLDE5IEBACisrLy8gTXVsdGktdGV4dHVyZSBmcmFnbWVudCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrLy8gQ29tcG9zaXRlIHNlY29uZCB0ZXh0dXJlIG92ZXIgZmlyc3QuCisrLy8gV2UncmUgYXNzdW1pbmcgdGhlIDJuZCB0ZXh0dXJlIGhhcyBhIG1lYW5pbmdmdWwgYWxwaGEgY2hhbm5lbC4KKysKKyt1bmlmb3JtIHNhbXBsZXIyRCB0ZXgxOworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDI7CisrdW5pZm9ybSB2ZWM0IFVuaVYxOworK3VuaWZvcm0gdmVjNCBVbmlWMjsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICB2ZWM0IHQzOworKyAgIHZlYzQgdDEgPSB0ZXh0dXJlMkQodGV4MSwgZ2xfVGV4Q29vcmRbMF0ueHkpOworKyAgIHZlYzQgdDIgPSB0ZXh0dXJlMkQodGV4MiwgZ2xfVGV4Q29vcmRbMV0ueHkpOworKyAgIHQzID0gbWl4KHQxLCB0MiwgdDIudyk7CisrICAgZ2xfRnJhZ0NvbG9yID0gdDMgKyBVbmlWMSArIFVuaVYyOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNlZjUwZGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQKK0BAIC0wLDAgKzEsMTQgQEAKKysvLyBNdWx0aS10ZXh0dXJlIHZlcnRleCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrCisrYXR0cmlidXRlIHZlYzQgVGV4Q29vcmQwLCBUZXhDb29yZDE7CisrYXR0cmlidXRlIHZlYzQgVmVydENvb3JkOworKworK3ZvaWQgbWFpbigpCisreworKyAgIGdsX1RleENvb3JkWzBdID0gVGV4Q29vcmQwOworKyAgIGdsX1RleENvb3JkWzFdID0gVGV4Q29vcmQxOworKyAgIC8vIG5vdGU6IG1heSB1c2UgZ2xfVmVydGV4IG9yIFZlcnRDb29yZCBoZXJlIGZvciB0ZXN0aW5nOgorKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIGdsX1ZlcnRleDsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZGYwMzE5CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnCitAQCAtMCwwICsxLDE3IEBACisrLy8gTXVsdGktdGV4dHVyZSBmcmFnbWVudCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrLy8gQ29tcG9zaXRlIHNlY29uZCB0ZXh0dXJlIG92ZXIgZmlyc3QuCisrLy8gV2UncmUgYXNzdW1pbmcgdGhlIDJuZCB0ZXh0dXJlIGhhcyBhIG1lYW5pbmdmdWwgYWxwaGEgY2hhbm5lbC4KKysKKyt1bmlmb3JtIHNhbXBsZXIyRCB0ZXgxOworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDI7CisrdW5pZm9ybSB2ZWM0IFVuaVYxOworK3VuaWZvcm0gdmVjNCBVbmlWMjsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICB2ZWM0IHQxID0gdGV4dHVyZTJEKHRleDEsIGdsX1RleENvb3JkWzBdLnh5KTsKKysgICB2ZWM0IHQyID0gdGV4dHVyZTJEKHRleDIsIGdsX1RleENvb3JkWzFdLnh5KTsKKysgICBnbF9GcmFnQ29sb3IgPSB0MSArIHQyICsgVW5pVjEgKyBVbmlWMjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydCBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZWY1MGRiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CitAQCAtMCwwICsxLDE0IEBACisrLy8gTXVsdGktdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyCisrLy8gQnJpYW4gUGF1bAorKworKworK2F0dHJpYnV0ZSB2ZWM0IFRleENvb3JkMCwgVGV4Q29vcmQxOworK2F0dHJpYnV0ZSB2ZWM0IFZlcnRDb29yZDsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICBnbF9UZXhDb29yZFswXSA9IFRleENvb3JkMDsKKysgICBnbF9UZXhDb29yZFsxXSA9IFRleENvb3JkMTsKKysgICAvLyBub3RlOiBtYXkgdXNlIGdsX1ZlcnRleCBvciBWZXJ0Q29vcmQgaGVyZSBmb3IgdGVzdGluZzoKKysgICBnbF9Qb3NpdGlvbiA9IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKiBnbF9WZXJ0ZXg7CisrfQorZGlmZiAtLWdpdCBhL3NyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsIGIvc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYzdhZTRiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorQEAgLTAsMCArMSw4IEBACisrdm9pZCBtYWluKCkgeworKyAgIGdsX1Bvc2l0aW9uID0gZ2xfVmVydGV4OworKyAgIHZlYzQgc3VtID0gdmVjNCgwKTsKKysgICBmb3IgKGludCBpID0gMTsgaSAhPSAyOyBpICs9IDIpIHsKKysgICAgICBzdW0gKz0gdmVjNCgwLjEsIDAuMSwgMC4xLCAwLjEpOworKyAgIH0KKysgICBnbF9Gcm9udENvbG9yID0gc3VtOworK30KKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZhZjEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAzNjgyOWE4ZDdhZDI4ODg1MTVmYmVlOTVjMmE3MGIzZDYzNmQ3NTM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgOSBKdWwgMjAxNCAxNDozMDozMyArMDIwMAorU3ViamVjdDogW1BBVENIIDIvOV0gQ29ycmVjdGx5IGltcGxlbWVudCB3aXRoIEFDX1dJVEgoZ2x1dCkgc28gdGhhdAorIC0td2l0aG91dC1nbHV0IHdvcmtzLgorCistLS0KKyBjb25maWd1cmUuYWMgfCAyNiArKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYzRlZTEyYi4uOTQ0NTQyNCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjcsMjEgKzY3LDI1IEBAIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMX0NGTEFHUyIKKyBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMX0xJQlMiCisgCisgZG5sIENoZWNrIGZvciBHTFVUCistR0xVVF9DRkxBR1M9IiIKKy1HTFVUX0xJQlM9LWxnbHV0CistZ2x1dF9lbmFibGVkPXllcworK2dsdXRfZW5hYmxlZD1ubworIEFDX0FSR19XSVRIKFtnbHV0XSwKKyAJW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZ2x1dD1ESVJdLAorIAkJCVtnbHV0IGluc3RhbGwgZGlyZWN0b3J5XSldLAorIAlbR0xVVF9DRkxBR1M9Ii1JJHdpdGh2YWwvaW5jbHVkZSIKKy0JIEdMVVRfTElCUz0iLUwkd2l0aHZhbC9saWIgLWxnbHV0Il0pCistQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHV0LmhdLAorLQkJW10sCistCQlbZ2x1dF9lbmFibGVkPW5vXSkKKy1BQ19DSEVDS19MSUIoW2dsdXRdLAorLQkJW2dsdXRJbml0XSwKKy0JCVtdLAorLQkJW2dsdXRfZW5hYmxlZD1ub10pCisrCSBHTFVUX0xJQlM9Ii1MJHdpdGh2YWwvbGliIC1sZ2x1dCJdLAorKwlbR0xVVF9DRkxBR1M9IiIKKysJIEdMVVRfTElCUz0iLWxnbHV0Il0KKysgICAgICAgICkKKytBU19JRihbdGVzdCAieCR3aXRoX2dsdXQiICE9IHhub10sCisrICAgICAgW0FDX0NIRUNLX0hFQURFUihbR0wvZ2x1dC5oXSwKKysgICAgICAgICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW2dsdXRfZW5hYmxlZD1ub10pCisrICAgICAgIEFDX0NIRUNLX0xJQihbZ2x1dF0sCisrICAgICAgICAgICAgICAgICAgICBbZ2x1dEluaXRdLAorKyAgICAgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgICAgICBbZ2x1dF9lbmFibGVkPW5vXSkKKysgICAgICAgZ2x1dF9lbmFibGVkPXllcworK10pCisgCisgZG5sIENoZWNrIGZvciBGcmVlR0xVVCAyLjYgb3IgbGF0ZXIKKyBBQ19FR1JFUF9IRUFERVIoW2dsdXRJbml0Q29udGV4dFByb2ZpbGVdLAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNThjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDMtY29uZmlndXJlLUFsbG93LXRvLWRpc2FibGUtZGVtb3Mtd2hpY2gtcmVxdWlyZS1HTEVXLS5wYXRjaApAQCAtMCwwICsxLDQyNCBAQAorRnJvbSBiMjVlOWM2NzVjZjU2MGI4YjAzN2RjODU1YzZiM2IxZDA5OTU3ODY3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjIzOjQxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy85XSBjb25maWd1cmU6IEFsbG93IHRvIGRpc2FibGUgZGVtb3Mgd2hpY2ggcmVxdWlyZSBHTEVXIG9yCisgR0xVCisKKyogaW4gc29tZSBzeXN0ZW1zIHdpdGhvdXQgWDExIHN1cHBvcnQgd2UgZG9uJ3QgaGF2ZSBHTEVXLCBidXQKKyAgbWVzYS1kZW1vcyBhcmUgc3RpbGwgdXNlZnVsCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICB8IDQ5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgfCAxNCArKysrKystLS0KKyBzcmMvZGVtb3MvTWFrZWZpbGUuYW0gICAgICAgICB8IDczICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvZWdsL01ha2VmaWxlLmFtICAgICAgICAgICB8ICA4ICsrKy0tCisgc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gfCA0NCArKysrKysrKysrKysrKystLS0tLS0tLS0tLQorIHNyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtIHwgMzMgKysrKysrKysrKy0tLS0tLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTM1IGluc2VydGlvbnMoKyksIDg2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5NDQ1NDI0Li5iYzRjOGQxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05MywyNSArOTMsNDQgQEAgQUNfRUdSRVBfSEVBREVSKFtnbHV0SW5pdENvbnRleHRQcm9maWxlXSwKKyAJCVtBQ19ERUZJTkUoSEFWRV9GUkVFR0xVVCldLAorIAkJW10pCisgCistZG5sIENoZWNrIGZvciBHTEVXCistUEtHX0NIRUNLX01PRFVMRVMoR0xFVywgW2dsZXcgPj0gMS41LjRdKQorLURFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMRVdfQ0ZMQUdTIgorLURFTU9fTElCUz0iJERFTU9fTElCUyAkR0xFV19MSUJTIgorK0FDX0FSR19FTkFCTEUoW2dsZXddLAorKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdsZXddLAorKyAgICAgICAgW2J1aWxkIGRlbW9zIHdoaWNoIHJlcXVpcmUgZ2xldyBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorKyAgICBbZW5hYmxlX2dsZXc9IiRlbmFibGV2YWwiXSwKKysgICAgW2VuYWJsZV9nbGV3PXllc10KKyspCisrCisraWYgdGVzdCAieCRlbmFibGVfZ2xldyIgPSB4eWVzOyB0aGVuCisrICAgIGRubCBDaGVjayBmb3IgR0xFVworKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHTEVXLCBbZ2xldyA+PSAxLjUuNF0sIFtnbGV3X2VuYWJsZWQ9eWVzXSwgW2dsZXdfZW5hYmxlZD1ub10pCisrICAgIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMRVdfQ0ZMQUdTIgorKyAgICBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMRVdfTElCUyIKKytmaQorIAorICMgTElCUyB3YXMgc2V0IGJ5IEFDX0NIRUNLX0xJQiBhYm92ZQorIExJQlM9IiIKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHTFUsIFtnbHVdLCBbXSwKKy0JCSAgW0FDX0NIRUNLX0hFQURFUihbR0wvZ2x1LmhdLAorLQkJCQkgICBbXSwKKy0JCSAgCQkgICBBQ19NU0dfRVJST1IoW0dMVSBub3QgZm91bmRdKSkKKy0JCSAgIEFDX0NIRUNLX0xJQihbR0xVXSwKKy0JCQkJW2dsdUJlZ2luQ3VydmVdLAorLQkJCQlbR0xVX0xJQlM9LWxHTFVdLAorLQkJCQlBQ19NU0dfRVJST1IoW0dMVSByZXF1aXJlZF0pKSBdKQorK0FDX0FSR19FTkFCTEUoW2dsdV0sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2x1XSwKKysgICAgICAgIFtidWlsZCBkZW1vcyB3aGljaCByZXF1aXJlIGdsdSBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorKyAgICBbZW5hYmxlX2dsdT0iJGVuYWJsZXZhbCJdLAorKyAgICBbZW5hYmxlX2dsdT15ZXNdCisrKQorIAorLURFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMVV9DRkxBR1MiCistREVNT19MSUJTPSIkREVNT19MSUJTICRHTFVfTElCUyIKKytpZiB0ZXN0ICJ4JGVuYWJsZV9nbHUiID0geHllczsgdGhlbgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHTFUsIFtnbHVdLCBbZ2x1X2VuYWJsZWQ9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHUuaF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbR0xVIG5vdCBmb3VuZF0pKQorKyAgICAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoW0dMVV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2x1QmVnaW5DdXJ2ZV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbR0xVX0xJQlM9LWxHTFUKKysJCQkJICAgIGdsdV9lbmFibGVkPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0dMVSByZXF1aXJlZF0pKSBdKQorKworKyAgICBERU1PX0NGTEFHUz0iJERFTU9fQ0ZMQUdTICRHTFVfQ0ZMQUdTIgorKyAgICBERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMVV9MSUJTIgorK2ZpCisgCisgQUNfQVJHX0VOQUJMRShbZWdsXSwKKyAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1lZ2xdLAorQEAgLTMwNCw2ICszMjMsOCBAQCBBQ19TVUJTVChbV0FZTEFORF9DRkxBR1NdKQorIEFDX1NVQlNUKFtXQVlMQU5EX0xJQlNdKQorIAorIAorK0FNX0NPTkRJVElPTkFMKEhBVkVfR0xVLCB0ZXN0ICJ4JGdsdV9lbmFibGVkIiA9ICJ4eWVzIikKKytBTV9DT05ESVRJT05BTChIQVZFX0dMRVcsIHRlc3QgIngkZ2xld19lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0VHTCwgdGVzdCAieCRlZ2xfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjEsIHRlc3QgIngkZ2xlc3YxX2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xFU1YyLCB0ZXN0ICJ4JGdsZXN2Ml9lbmFibGVkIiA9ICJ4eWVzIikKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDE2NDdkNjQuLjc1NGM0N2MgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTIzLDE0ICsyMywxOCBAQAorICMgICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAKKytpZiBIQVZFX0dMRVcKKytVVElMID0gdXRpbAorK2VuZGlmCisrCisgU1VCRElSUyA9IFwKKy0JdXRpbCBcCisrCSQoVVRJTCkgXAorIAlkYXRhIFwKKyAJZGVtb3MgXAorIAllZ2wgXAorIAlmcCBcCisgCWZwZ2xzbCBcCisgCWdsc2wgXAorLSAgICAgICAgZ3MgXAorKwlncyBcCisgCW9ianZpZXdlciBcCisgCW9zZGVtb3MgXAorIAlwZXJmIFwKK0BAIC00MCw4ICszOSwxMiBAQCBTVUJESVJTID0gXAorIAlzbGFuZyBcCisgCXRlc3RzIFwKKyAJdG9vbHMgXAorLQl0cml2aWFsIFwKKy0JdnAgXAorLQl2cGdsc2wgXAorIAl3Z2wgXAorIAl4ZGVtb3MKKysKKytpZiBIQVZFX0dMRVcKKytTVUJESVJTICs9IFwKKysJdnAgXAorKwl2cGdsc2wgXAorKwl0cml2aWFsCisrZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvZGVtb3MvTWFrZWZpbGUuYW0gYi9zcmMvZGVtb3MvTWFrZWZpbGUuYW0KK2luZGV4IDQxNjAzZmEuLmFiMWUzYWIgMTAwNjQ0CistLS0gYS9zcmMvZGVtb3MvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQorQEAgLTMwLDkxICszMCwxMDAgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChERU1PX0xJQlMpIFwKKyAJJChHTFVUX0xJQlMpCisgCisrYmluX1BST0dSQU1TID0KKysKKyBpZiBIQVZFX0dMVVQKKy1iaW5fUFJPR1JBTVMgPSBcCisraWYgSEFWRV9HTEVXCisrYmluX1BST0dSQU1TICs9IFwKKyAJYXJiZnBsaWdodCBcCisgCWFyYmZzbGlnaHQgXAorIAlhcmJvY2NsdWRlIFwKKyAJYXJib2NjbHVkZTIgXAorLQlib3VuY2UgXAorLQljbGVhcnNwZCBcCisgCWNvcHlwaXggXAorIAljdWJlbWFwIFwKKyAJY3ViZXJlbmRlciBcCisgCWRpbm9zaGFkZSBcCistCWRpc3NvbHZlIFwKKy0JZHJhd3BpeCBcCisgCWVuZ2luZSBcCisgCWZib19maXJlY3ViZSBcCisgCWZib3RleHR1cmUgXAorLQlmaXJlIFwKKyAJZm9nY29vcmQgXAorIAlmcGxpZ2h0IFwKKyAJZnNsaWdodCBcCisrCWdsb3NzIFwKKysJaXNvc3VyZiBcCisrCW11bHRpYXJiIFwKKysJcGFsdGV4IFwKKysJcG9pbnRibGFzdCBcCisrCXByb2p0ZXggXAorKwlzaGFkb3d0ZXggXAorKwlzcHJpdGVibGFzdCBcCisrCXN0ZXgzZCBcCisrCXRleHR1cmVzIFwKKysJdmFvX2RlbW8gXAorKwl3aW5wb3MKKysKKytjb3B5cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrY3ViZW1hcF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2N1YmVyZW5kZXJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytlbmdpbmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytmYm9fZmlyZWN1YmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytnbG9zc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2lzb3N1cmZfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyttdWx0aWFyYl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3Byb2p0ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyt0ZXh0dXJlc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3dpbnBvc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZGlmCisrCisraWYgSEFWRV9HTFUKKytiaW5fUFJPR1JBTVMgKz0gXAorKwlib3VuY2UgXAorKwljbGVhcnNwZCBcCisrCWRpc3NvbHZlIFwKKysJZHJhd3BpeCBcCisrCWZpcmUgXAorIAlnYW1tYSBcCisgCWdlYXJib3ggXAorIAlnZWFycyBcCisgCWdlYXJ0cmFpbiBcCisgCWdsaW5mbyBcCistCWdsb3NzIFwKKyAJZ2x0ZXN0cGVyZiBcCisgCWlwZXJzIFwKKy0JaXNvc3VyZiBcCisgCWxvZGJpYXMgXAorIAltb3JwaDNkIFwKKy0JbXVsdGlhcmIgXAorLQlwYWx0ZXggXAorIAlwaXhlbHRlc3QgXAorLQlwb2ludGJsYXN0IFwKKy0JcHJvanRleCBcCisgCXJheSBcCisgCXJlYWRwaXggXAorIAlyZWZsZWN0IFwKKyAJcmVub3JtYWwgXAorLQlzaGFkb3d0ZXggXAorIAlzaW5nbGVidWZmZXIgXAorIAlzcGVjdGV4IFwKKy0Jc3ByaXRlYmxhc3QgXAorLQlzdGV4M2QgXAorIAl0ZWFwb3QgXAorIAl0ZXJyYWluIFwKKyAJdGVzc2RlbW8gXAorIAl0ZXhjeWwgXAorIAl0ZXhlbnYgXAorLQl0ZXh0dXJlcyBcCisgCXRyaXNwZCBcCisgCXR1bm5lbDIgXAorLQl0dW5uZWwgXAorLQl2YW9fZGVtbyBcCistCXdpbnBvcworLWVuZGlmCisrCXR1bm5lbAorIAorIHR1bm5lbF9TT1VSQ0VTID0gXAorIAl0dW5uZWwuYyBcCisgCXR1bm5lbGRhdC5oCisgCistY29weXBpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWN1YmVtYXBfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1jdWJlcmVuZGVyX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZHJhd3BpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGRpc3NvbHZlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZW5naW5lX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistZmJvX2ZpcmVjdWJlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZHJhd3BpeF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGZpcmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1nbG9zc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGlwZXJzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistaXNvc3VyZl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIGxvZGJpYXNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1tdWx0aWFyYl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLXByb2p0ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyByZWFkcGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgcmVmbGVjdF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHRlYXBvdF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHRleGN5bF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLXRleHR1cmVzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdHVubmVsX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdHVubmVsMl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLXdpbnBvc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZGlmCisrZW5kaWYKKyAKKyBFWFRSQV9ESVNUID0gXAorIAlSRUFETUUKK2RpZmYgLS1naXQgYS9zcmMvZWdsL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9NYWtlZmlsZS5hbQoraW5kZXggZDY0YTQ5ZS4uNGZlMWNhOCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvTWFrZWZpbGUuYW0KK0BAIC0yNCw4ICsyNCwxMiBAQAorIAorIFNVQkRJUlMgPSBcCisgCWVnbHV0IFwKKy0Jb3BlbmdsIFwKKy0Jb3BlbnZnIFwKKyAJb3BlbmdsZXMxIFwKKyAJb3BlbmdsZXMyIFwKKyAJb2VzX3ZnCisrCisraWYgSEFWRV9HTFUKKytTVUJESVJTICs9IFwKKysJb3BlbmdsIFwKKysJb3BlbnZnCisrZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitpbmRleCA3YTk4MjhkLi4zNDU1ZTc1IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitAQCAtMzYsMjggKzM2LDQzIEBAIEFNX0xERkxBR1MgPSBcCisgCSQoRUdMX0xJQlMpIFwKKyAJLWxtCisgCisrbm9pbnN0X1BST0dSQU1TID0KKysKKyBpZiBIQVZFX0VHTAorIGlmIEhBVkVfR0xFU1YxCistbm9pbnN0X1BST0dSQU1TID0gXAorLQliaW5kdGV4IFwKKy0JY2xlYXIgXAorK25vaW5zdF9QUk9HUkFNUyArPSBcCisgCWRyYXd0ZXhfc2NyZWVuIFwKKysJZ2VhcnNfc2NyZWVuIFwKKysJdG9ydXNfc2NyZWVuIFwKKysJdHJpX3NjcmVlbgorKworK2RyYXd0ZXhfc2NyZWVuX1NPVVJDRVMgPSBkcmF3dGV4LmMKKytnZWFyc19zY3JlZW5fU09VUkNFUyA9IGdlYXJzLmMKKyt0b3J1c19zY3JlZW5fU09VUkNFUyA9IHRvcnVzLmMKKyt0cmlfc2NyZWVuX1NPVVJDRVMgPSB0cmkuYworKworK2RyYXd0ZXhfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorKworK2lmIEhBVkVfWDExCisrbm9pbnN0X1BST0dSQU1TICs9IFwKKysJY2xlYXIKKysKKytiaW5fUFJPR1JBTVMgPSBcCisrCWJpbmR0ZXggXAorIAlkcmF3dGV4X3gxMSBcCisgCWVnbGZiZGV2IFwKKyAJZXMxX2luZm8gXAorLQlnZWFyc19zY3JlZW4gXAorIAlnZWFyc194MTEgXAorIAltc2FhIFwKKyAJcGJ1ZmZlclwKKyAJcmVuZGVyX3RleCBcCisgCXRleHR1cmVfZnJvbV9waXhtYXAgXAorLQl0b3J1c19zY3JlZW4gXAorIAl0b3J1c194MTEgXAorLQl0cmlfc2NyZWVuIFwKKyAJdHJpX3gxMSBcCisgCXR3b193aW4KKy1lbmRpZgorLWVuZGlmCisgCisgYmluZHRleF9MREFERCA9ICQoWDExX0xJQlMpCisgZXMxX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorQEAgLTcxLDIyICs4NiwxNSBAQCB0d29fd2luX0xEQUREID0gJChYMTFfTElCUykKKyBjbGVhcl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYSAkKEVHTF9MSUJTKSAkKFgxMV9MSUJTKQorIGNsZWFyX0xERkxBR1MgPQorIAorLWRyYXd0ZXhfc2NyZWVuX1NPVVJDRVMgPSBkcmF3dGV4LmMKKy1nZWFyc19zY3JlZW5fU09VUkNFUyA9IGdlYXJzLmMKKy10b3J1c19zY3JlZW5fU09VUkNFUyA9IHRvcnVzLmMKKy10cmlfc2NyZWVuX1NPVVJDRVMgPSB0cmkuYworLQorIGRyYXd0ZXhfeDExX1NPVVJDRVMgPSBkcmF3dGV4LmMKKyBnZWFyc194MTFfU09VUkNFUyA9IGdlYXJzLmMKKyB0b3J1c194MTFfU09VUkNFUyA9IHRvcnVzLmMKKyB0cmlfeDExX1NPVVJDRVMgPSB0cmkuYworIAorLWRyYXd0ZXhfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistZ2VhcnNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistdG9ydXNfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistdHJpX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLQorIGRyYXd0ZXhfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisgZ2VhcnNfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisgdG9ydXNfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisgdHJpX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorK2VuZGlmCisrZW5kaWYKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KK2luZGV4IDQxYzFiODAuLjc0YWY0NjAgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0KK0BAIC0zNiwyNiArMzYsMjkgQEAgQU1fTERGTEFHUyA9IFwKKyBpZiBIQVZFX0VHTAorIGlmIEhBVkVfR0xFU1YyCisgYmluX1BST0dSQU1TID0gXAorLQllczJfaW5mbyBcCistCWVzMmdlYXJzX3NjcmVlbiBcCistCWVzMmdlYXJzX3gxMSBcCistCWVzMnRyaQorKwllczJnZWFyc19zY3JlZW4KKysKKytlczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKKytlczJnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKysKKyBpZiBIQVZFX1dBWUxBTkQKKyBiaW5fUFJPR1JBTVMgKz0gZXMyZ2VhcnNfd2F5bGFuZAorLWVuZGlmCistZW5kaWYKKy1lbmRpZgorIAorLWVzMl9pbmZvX0xEQUREID0gJChYMTFfTElCUykKKy1lczJ0cmlfTERBREQgPSAkKFgxMV9MSUJTKQorK2VzMmdlYXJzX3dheWxhbmRfU09VUkNFUyA9IGVzMmdlYXJzLmMKKytlczJnZWFyc193YXlsYW5kX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfd2F5bGFuZC5sYQorK2VuZGlmCisgCistZXMyZ2VhcnNfc2NyZWVuX1NPVVJDRVMgPSBlczJnZWFycy5jCisraWYgSEFWRV9YMTEKKytiaW5fUFJPR1JBTVMgKz0gXAorKwllczJ0cmkgXAorKwllczJfaW5mbyBcCisrCWVzMmdlYXJzX3gxMQorIAorK2VzMl9pbmZvX0xEQUREID0gJChYMTFfTElCUykKKyBlczJnZWFyc194MTFfU09VUkNFUyA9IGVzMmdlYXJzLmMKKy0KKy1lczJnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy0KKyBlczJnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKytlczJ0cmlfTERBREQgPSAkKFgxMV9MSUJTKQorK2VuZGlmCisrZW5kaWYKKytlbmRpZgorIAorLWVzMmdlYXJzX3dheWxhbmRfU09VUkNFUyA9IGVzMmdlYXJzLmMKKy1lczJnZWFyc193YXlsYW5kX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfd2F5bGFuZC5sYQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzdiOTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaApAQCAtMCwwICsxLDIzNCBAQAorRnJvbSA1ZTEwMTA4ZDc2YTU5YWJhYzIxYzdlNTQwYmNmZDJkZGFjY2NhMmNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK0RhdGU6IEZyaSwgOSBNYXkgMjAxNCAxMTo1MDoyNCAtMDQwMAorU3ViamVjdDogW1BBVENIIDQvOV0gVXNlIERFTU9TX0RBVEFfRElSIHRvIGxvY2F0ZSBkYXRhIGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD03ODQ5Nl0KK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CistLS0KKyBzcmMvZ2xzbC9iZXppZXIuYyAgICAgICAgICAgfCAgMiArLQorIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9icmljay5jICAgICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvYnVtcC5jICAgICAgICAgICAgIHwgIDYgKysrLS0tCisgc3JjL2dsc2wvY29udm9sdXRpb25zLmMgICAgIHwgIDIgKy0KKyBzcmMvZ2xzbC9tYW5kZWxicm90LmMgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvbXVsdGl0ZXguYyAgICAgICAgIHwgIDQgKystLQorIHNyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYyAgICB8ICAyICstCisgc3JjL2dsc2wvc2tpbm5pbmcuYyAgICAgICAgIHwgIDQgKystLQorIHNyYy9nbHNsL3RleGRlbW8xLmMgICAgICAgICB8ICA4ICsrKystLS0tCisgc3JjL2dsc2wvdG95YmFsbC5jICAgICAgICAgIHwgIDQgKystLQorIHNyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jICAgICB8IDEyICsrKysrKy0tLS0tLQorIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYyB8ICA4ICsrKystLS0tCisgMTMgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9iZXppZXIuYyBiL3NyYy9nbHNsL2Jlemllci5jCitpbmRleCAwYjU2YmMxLi5lMDE2MDNkIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvYmV6aWVyLmMKKysrKyBiL3NyYy9nbHNsL2Jlemllci5jCitAQCAtMTMsNyArMTMsNyBAQAorICNpbmNsdWRlICJnbHV0X3dyYXAuaCIKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorLXN0YXRpYyBjb25zdCBjaGFyICpmaWxlbmFtZSA9ICJiZXppZXIuZ2VvbSI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gREVNT1NfREFUQV9ESVIgImJlemllci5nZW9tIjsKKyAKKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7Cisgc3RhdGljIEdMdWludCB2ZXJ0U2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMKK2luZGV4IGUzYmYyNGQuLjc2NjJiMWYgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMKK0BAIC02Myw4ICs2Myw4IEBAIGluaXRfb3BlbmdsICh2b2lkKQorICAgICAgZXhpdCgxKTsKKyAgIH0gICAgIAorIAorLSAgdnNoYWRfaWQgPSBDb21waWxlU2hhZGVyRmlsZSAoR0xfVkVSVEVYX1NIQURFUiwgImJsaW5raW5nLXRlYXBvdC52ZXJ0Iik7CistICBmc2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9GUkFHTUVOVF9TSEFERVIsICJibGlua2luZy10ZWFwb3QuZnJhZyIpOworKyAgdnNoYWRfaWQgPSBDb21waWxlU2hhZGVyRmlsZSAoR0xfVkVSVEVYX1NIQURFUiwgREVNT1NfREFUQV9ESVIgImJsaW5raW5nLXRlYXBvdC52ZXJ0Iik7CisrICBmc2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9GUkFHTUVOVF9TSEFERVIsIERFTU9TX0RBVEFfRElSICJibGlua2luZy10ZWFwb3QuZnJhZyIpOworICAgcHJvZ19pZCA9IExpbmtTaGFkZXJzICh2c2hhZF9pZCwgZnNoYWRfaWQpOworIAorICAgVXNlUHJvZ3JhbSAocHJvZ19pZCk7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYnJpY2suYyBiL3NyYy9nbHNsL2JyaWNrLmMKK2luZGV4IDMwMjE4NTYuLmZlNWYxOTAgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9icmljay5jCisrKysgYi9zcmMvZ2xzbC9icmljay5jCitAQCAtMTQsOCArMTQsOCBAQAorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDA2LWJyaWNrLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gwNi1icmljay52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMDYtYnJpY2suZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDA2LWJyaWNrLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYnVtcC5jIGIvc3JjL2dsc2wvYnVtcC5jCitpbmRleCA1OWY2MmNkLi4zYTFiMjBhIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvYnVtcC5jCisrKysgYi9zcmMvZ2xzbC9idW1wLmMKK0BAIC0xNSw5ICsxNSw5IEBACisgI2luY2x1ZGUgInJlYWR0ZXguaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMTEtYnVtcG1hcC5mcmFnIjsKKy1zdGF0aWMgY2hhciAqRnJhZ1RleFByb2dGaWxlID0gIkNIMTEtYnVtcG1hcHRleC5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gIkNIMTEtYnVtcG1hcC52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtYnVtcG1hcC5mcmFnIjsKKytzdGF0aWMgY2hhciAqRnJhZ1RleFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtYnVtcG1hcHRleC5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTEtYnVtcG1hcC52ZXJ0IjsKKyBzdGF0aWMgY2hhciAqVGV4dHVyZUZpbGUgPSBERU1PU19EQVRBX0RJUiAidGlsZS5yZ2IiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jCitpbmRleCBhMTIwY2ZlLi45MzEyZjAwIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKKysrKyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jCitAQCAtMzQwLDcgKzM0MCw3IEBAIHN0YXRpYyB2b2lkIGluaXQodm9pZCkKKyAKKyAgICBtZW51SW5pdCgpOworICAgIHJlYWRUZXh0dXJlKHRleHR1cmVMb2NhdGlvbik7CistICAgY3JlYXRlUHJvZ3JhbSgiY29udm9sdXRpb24udmVydCIsICJjb252b2x1dGlvbi5mcmFnIik7CisrICAgY3JlYXRlUHJvZ3JhbShERU1PU19EQVRBX0RJUiAiY29udm9sdXRpb24udmVydCIsIERFTU9TX0RBVEFfRElSICJjb252b2x1dGlvbi5mcmFnIik7CisgCisgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7CisgICAgZ2xDbGVhckNvbG9yKDEuMCwgMS4wLCAxLjAsIDEuMCk7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvbWFuZGVsYnJvdC5jIGIvc3JjL2dsc2wvbWFuZGVsYnJvdC5jCitpbmRleCAzMWVkZTFkLi5hYjM0YTBmIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvbWFuZGVsYnJvdC5jCisrKysgYi9zcmMvZ2xzbC9tYW5kZWxicm90LmMKK0BAIC0xNCw4ICsxNCw4IEBACisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMTgtbWFuZGVsLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxOC1tYW5kZWwudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDE4LW1hbmRlbC5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTgtbWFuZGVsLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvbXVsdGl0ZXguYyBiL3NyYy9nbHNsL211bHRpdGV4LmMKK2luZGV4IDI2MmVhNTAuLjU0NmJkMjcgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9tdWx0aXRleC5jCisrKysgYi9zcmMvZ2xzbC9tdWx0aXRleC5jCitAQCAtMzUsOCArMzUsOCBAQAorIAorIHN0YXRpYyBjb25zdCBjaGFyICpEZW1vID0gIm11bHRpdGV4IjsKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUgPSAibXVsdGl0ZXgudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlID0gIm11bHRpdGV4LmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZSA9IERFTU9TX0RBVEFfRElSICJtdWx0aXRleC52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAibXVsdGl0ZXguZnJhZyI7CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKlRleEZpbGVzWzJdID0gCisgICAgeworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYyBiL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYworaW5kZXggMTNmZGQ1ZC4uODg1ZjAxZSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3NpbXBsZXgtbm9pc2UuYworKysrIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCitAQCAtMTY5LDcgKzE2OSw3IEBAIFNwZWNpYWxLZXkoaW50IGtleSwgaW50IHgsIGludCB5KQorIHN0YXRpYyB2b2lkCisgSW5pdCh2b2lkKQorIHsKKy0gICBjb25zdCBjaGFyICpmaWxlbmFtZSA9ICJzaW1wbGV4LW5vaXNlLmdsc2wiOworKyAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gREVNT1NfREFUQV9ESVIgInNpbXBsZXgtbm9pc2UuZ2xzbCI7CisgICAgY2hhciBub2lzZVRleHRbMTAwMDBdOworICAgIEZJTEUgKmY7CisgICAgaW50IGxlbjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9za2lubmluZy5jIGIvc3JjL2dsc2wvc2tpbm5pbmcuYworaW5kZXggYmYzOGQ3Ny4uNTM2ZDQ3NSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3NraW5uaW5nLmMKKysrKyBiL3NyYy9nbHNsL3NraW5uaW5nLmMKK0BAIC0yMCw4ICsyMCw4IEBACisgI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNQorICNlbmRpZgorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAic2tpbm5pbmcuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJza2lubmluZy52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgInNraW5uaW5nLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAic2tpbm5pbmcudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC90ZXhkZW1vMS5jIGIvc3JjL2dsc2wvdGV4ZGVtbzEuYworaW5kZXggNmNkZTIzOS4uYTA4MjM0MiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3RleGRlbW8xLmMKKysrKyBiL3NyYy9nbHNsL3RleGRlbW8xLmMKK0BAIC0zNSwxMSArMzUsMTEgQEAKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqRGVtbyA9ICJ0ZXhkZW1vMSI7CisgCistc3RhdGljIGNvbnN0IGNoYXIgKlJlZmxlY3RWZXJ0RmlsZSA9ICJyZWZsZWN0LnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpDdWJlRnJhZ0ZpbGUgPSAiY3ViZW1hcC5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqUmVmbGVjdFZlcnRGaWxlID0gREVNT1NfREFUQV9ESVIgInJlZmxlY3QudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkN1YmVGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJjdWJlbWFwLmZyYWciOworIAorLXN0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVWZXJ0RmlsZSA9ICJzaW1wbGUudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVRleEZyYWdGaWxlID0gInNoYWRvd3RleC5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVmVydEZpbGUgPSBERU1PU19EQVRBX0RJUiAic2ltcGxlLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVUZXhGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJzaGFkb3d0ZXguZnJhZyI7CisgCisgc3RhdGljIGNvbnN0IGNoYXIgKkdyb3VuZEltYWdlID0gREVNT1NfREFUQV9ESVIgInRpbGUucmdiIjsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC90b3liYWxsLmMgYi9zcmMvZ2xzbC90b3liYWxsLmMKK2luZGV4IDVmMjc5NTEuLjRlN2U4MzIgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC90b3liYWxsLmMKKysrKyBiL3NyYy9nbHNsL3RveWJhbGwuYworQEAgLTE0LDggKzE0LDggQEAKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxMS10b3liYWxsLmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxMS10b3liYWxsLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS10b3liYWxsLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS10b3liYWxsLnZlcnQiOworIAorIC8qIHByb2dyYW0vc2hhZGVyIG9iamVjdHMgKi8KKyBzdGF0aWMgR0x1aW50IGZyYWdTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL29ianZpZXdlci9vYmp2aWV3LmMgYi9zcmMvb2Jqdmlld2VyL29ianZpZXcuYworaW5kZXggNmRlZjcyNi4uNzhhNmFjZiAxMDA2NDQKKy0tLSBhL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCisrKysgYi9zcmMvb2Jqdmlld2VyL29ianZpZXcuYworQEAgLTE2MiwxMiArMTYyLDEyIEBAIGluaXRfbW9kZWwodm9pZCkKKyBzdGF0aWMgdm9pZAorIGluaXRfc2t5Ym94KHZvaWQpCisgeworLSAgIFNreWJveFRleCA9IExvYWRTa3lCb3hDdWJlVGV4dHVyZSgiYWxwaW5lX2Vhc3QucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV93ZXN0LnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfdXAucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9kb3duLnJnYiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBpbmVfc291dGgucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9ub3J0aC5yZ2IiKTsKKysgICBTa3lib3hUZXggPSBMb2FkU2t5Qm94Q3ViZVRleHR1cmUoREVNT1NfREFUQV9ESVIgImFscGluZV9lYXN0LnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfd2VzdC5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX3VwLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfZG93bi5yZ2IiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERU1PU19EQVRBX0RJUiAiYWxwaW5lX3NvdXRoLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfbm9ydGgucmdiIik7CisgICAgZ2xtU3BlY3VsYXJUZXh0dXJlKE1vZGVsLCBTa3lib3hUZXgpOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMKK2luZGV4IDc0MjJiNzguLmRiZjgzMzIgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlLmMKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworQEAgLTMzLDEwICszMywxMCBAQAorICNpbmNsdWRlICJnbG1haW4uaCIKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMSA9ICJnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUxID0gImdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWciOworLXN0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTIgPSAiZ2xzbHN0YXRlc2NoYW5nZTIudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMiA9ICJnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUxID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTEgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMiA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUyID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWciOworIHN0YXRpYyBzdHJ1Y3QgdW5pZm9ybV9pbmZvIFVuaWZvcm1zMVtdID0geworICAgIHsgInRleDEiLCAgMSwgR0xfU0FNUExFUl8yRCwgeyAwLCAwLCAwLCAwIH0sIC0xIH0sCisgICAgeyAidGV4MiIsICAxLCBHTF9TQU1QTEVSXzJELCB7IDEsIDAsIDAsIDAgfSwgLTEgfSwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWMyYTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2gKQEAgLTAsMCArMSwyNjcgQEAKK0Zyb20gNDUzMzUzYTIyMWRlOWM2NDQ3OWY0MzcyNTY1ZDJjZDg1OTFiMzZjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorRGF0ZTogRnJpLCAyOSBKdW4gMjAxMiAxMToyNjowNCArMDEwMAorU3ViamVjdDogW1BBVENIIDUvOV0gRml4IGJ1aWxkIHdoZW4gRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uIGlzbid0CisgcHJlc2VudAorCitUaGUgRUdMIGRlbW9zIHdvbid0IGJ1aWxkIGFnYWluc3QgRUdMIGltcGxlbWVudGF0aW9ucyB0aGF0IGRvbid0IHN1cHBvcnQKK3RoZSBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24uIEZpeCB0aGlzLCBpbiBtb3N0IGNhc2VzLCBieQord3JhcHBpbmcgcmVsZXZhbnQgYml0cyBvZiBjb2RlIGluICNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS4KKworU2lnbmVkLW9mZi1ieTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CisKK0FwcGxpZWQgYW5kIGZpeGVkIHVwIGluIFlvY3RvIGJ5Li4uCisKK0ludGVncmF0ZWQtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBsaW51eC5pbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jICAgICAgICB8ICA5ICsrKysrKystLQorIHNyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMgfCAxNCArKysrKysrKysrKysrKworIHNyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgICAgICAgfCAgMiArKworIHNyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgICAgICAgfCAgNyArKysrKystCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYyAgICAgICB8ICA3ICsrKysrKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0LmMgYi9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKK2luZGV4IDJlZTZmMTUuLmY2YTJhZDQgMTAwNjQ0CistLS0gYS9zcmMvZWdsL2VnbHV0L2VnbHV0LmMKKysrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworQEAgLTc2LDggKzc2LDkgQEAgX2VnbHV0Tm93KHZvaWQpCisgc3RhdGljIHZvaWQKKyBfZWdsdXREZXN0cm95V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbikKKyB7CistICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9QQlVGRkVSX0JJVCAmJgorLSAgICAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfU0NSRUVOX0JJVF9NRVNBKQorKworKyAgIGlmIChfZWdsdXQtPnN1cmZhY2VfdHlwZSA9PSBFR0xfV0lORE9XX0JJVCB8fAorKyAgICAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9PSBFR0xfUElYTUFQX0JJVCkKKyAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShfZWdsdXQtPmRweSwgd2luLT5zdXJmYWNlKTsKKyAKKyAgICBfZWdsdXROYXRpdmVGaW5pV2luZG93KHdpbik7CitAQCAtMTc1LDcgKzE3Niw5IEBAIF9lZ2x1dENyZWF0ZVdpbmRvdyhjb25zdCBjaGFyICp0aXRsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCisgICAgICAgICAgICAgd2luLT5jb25maWcsIHdpbi0+bmF0aXZlLnUucGl4bWFwLCBOVUxMKTsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIEVHTF9QQlVGRkVSX0JJVDoKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBjYXNlIEVHTF9TQ1JFRU5fQklUX01FU0E6CisrI2VuZGlmCisgICAgICAgd2luLT5zdXJmYWNlID0gd2luLT5uYXRpdmUudS5zdXJmYWNlOworICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CitAQCAtMjg5LDggKzI5MiwxMCBAQCBlZ2x1dERlc3Ryb3lXaW5kb3coaW50IHdpbikKKyAgICBpZiAod2luZG93LT5pbmRleCAhPSB3aW4pCisgICAgICAgcmV0dXJuOworIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIC8qIFhYWCBpdCBjYXVzZXMgc29tZSBidWcgaW4gc3QvZWdsIEtNUyBiYWNrZW5kICovCisgICAgaWYgKCBfZWdsdXQtPnN1cmZhY2VfdHlwZSAhPSBFR0xfU0NSRUVOX0JJVF9NRVNBKQorKyNlbmRpZgorICAgICAgIGVnbE1ha2VDdXJyZW50KF9lZ2x1dC0+ZHB5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAKKyAgICBfZWdsdXREZXN0cm95V2luZG93KF9lZ2x1dC0+Y3VycmVudCk7CitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKK2luZGV4IDAyMWE4ZjEuLjA5NGE0ZTIgMTAwNjQ0CistLS0gYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCisrKysgYi9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jCitAQCAtMzUsMjYgKzM1LDMzIEBACisgCisgI2RlZmluZSBNQVhfTU9ERVMgMTAwCisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIEVHTFNjcmVlbk1FU0Ega21zX3NjcmVlbjsKKyBzdGF0aWMgRUdMTW9kZU1FU0Ega21zX21vZGU7Cisgc3RhdGljIEVHTGludCBrbXNfd2lkdGgsIGttc19oZWlnaHQ7CisrI2VuZGlmCisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUluaXREaXNwbGF5KHZvaWQpCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIF9lZ2x1dC0+bmF0aXZlX2RweSA9IEVHTF9ERUZBVUxUX0RJU1BMQVk7CisgICAgX2VnbHV0LT5zdXJmYWNlX3R5cGUgPSBFR0xfU0NSRUVOX0JJVF9NRVNBOworKyNlbmRpZgorIH0KKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlRmluaURpc3BsYXkodm9pZCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAga21zX3NjcmVlbiA9IDA7CisgICAga21zX21vZGUgPSAwOworICAgIGttc193aWR0aCA9IDA7CisgICAga21zX2hlaWdodCA9IDA7CisrI2VuZGlmCisgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkCisgaW5pdF9rbXModm9pZCkKKyB7CitAQCAtOTQsMTkgKzEwMSwyMyBAQCBpbml0X2ttcyh2b2lkKQorICAgIGttc193aWR0aCA9IHdpZHRoOworICAgIGttc19oZWlnaHQgPSBoZWlnaHQ7CisgfQorKyNlbmRpZgorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVJbml0V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbiwgY29uc3QgY2hhciAqdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgRUdMaW50IHN1cmZfYXR0cmlic1sxNl07CisgICAgRUdMaW50IGk7CisrI2VuZGlmCisgICAgY29uc3QgY2hhciAqZXh0czsKKyAKKyAgICBleHRzID0gZWdsUXVlcnlTdHJpbmcoX2VnbHV0LT5kcHksIEVHTF9FWFRFTlNJT05TKTsKKyAgICBpZiAoIWV4dHMgfHwgIXN0cnN0cihleHRzLCAiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UiKSkKKyAgICAgICBfZWdsdXRGYXRhbCgiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgaW5pdF9rbXMoKTsKKyAKKyAgICBpID0gMDsKK0BAIC0xMjgsMTQgKzEzOSwxNyBAQCBfZWdsdXROYXRpdmVJbml0V2luZG93KHN0cnVjdCBlZ2x1dF93aW5kb3cgKndpbiwgY29uc3QgY2hhciAqdGl0bGUsCisgCisgICAgd2luLT5uYXRpdmUud2lkdGggPSBrbXNfd2lkdGg7CisgICAgd2luLT5uYXRpdmUuaGVpZ2h0ID0ga21zX2hlaWdodDsKKysjZW5kaWYKKyB9CisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBlZ2xTaG93U2NyZWVuU3VyZmFjZU1FU0EoX2VnbHV0LT5kcHksCisgICAgICAgICAga21zX3NjcmVlbiwgRUdMX05PX1NVUkZBQ0UsIDApOworICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPm5hdGl2ZS51LnN1cmZhY2UpOworKyNlbmRpZgorIH0KKyAKKyB2b2lkCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK2luZGV4IGQ4OTI3MzQuLjNhMzU2NGMgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCisrKysgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitAQCAtMTgsNiArMTgsNyBAQAorIHN0YXRpYyB2b2lkCisgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICNkZWZpbmUgTUFYIDgKKyAgICBFR0xTY3JlZW5NRVNBIHNjcmVlbnNbTUFYXTsKKyAgICBFR0xpbnQgbnVtU2NyZWVuczsKK0BAIC0yOCw2ICsyOSw3IEBAIFRlc3RTY3JlZW5zKEVHTERpc3BsYXkgZHB5KQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1TY3JlZW5zOyBpKyspIHsKKyAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7CisgICAgfQorKyNlbmRpZgorIH0KKyAKKyAvKioKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMi5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworaW5kZXggNTA1YjQ3NC4uYmZlZjU5ZSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMKK0BAIC0xNiw2ICsxNiw3IEBACisgCisgLyojZGVmaW5lIEZST05UQlVGRkVSKi8KKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgdm9pZCBfc3Vic2V0X1JlY3RmKEdMZmxvYXQgeDEsIEdMZmxvYXQgeTEsIEdMZmxvYXQgeDIsIEdMZmxvYXQgeTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGZsb2F0IHIsIEdMZmxvYXQgZywgR0xmbG9hdCBiKQorIHsKK0BAIC05NSwxMiArOTYsMTMgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgICAgICAgcHJpbnRmKCIgU2NyZWVuICVkIGhhbmRsZTogJWRcbiIsIGksIChpbnQpIHNjcmVlbnNbaV0pOworICAgIH0KKyB9CistCisrI2VuZGlmCisgCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICBpbnQgbWFqLCBtaW47CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgRUdMQ29udGV4dCBjdHg7CisgICAgRUdMU3VyZmFjZSBwYnVmZmVyLCBzY3JlZW5fc3VyZjsKKyAgICBFR0xDb25maWcgY29uZmlnc1sxMF07CitAQCAtMTE1LDYgKzExNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBFR0xNb2RlTUVTQSBtb2RlOworICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuOworICAgIEVHTGludCBjb3VudDsKKysjZW5kaWYKKyAKKyAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGFzc2VydChkKTsKK0BAIC0xMzIsNiArMTM1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIGV4aXQoMSk7CisgICAgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKKyAgICBwcmludGYoIkdvdCAlZCBFR0wgY29uZmlnczpcbiIsIG51bUNvbmZpZ3MpOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db25maWdzOyBpKyspIHsKK0BAIC0yMTEsNiArMjE1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIGVnbERlc3Ryb3lTdXJmYWNlKGQsIHBidWZmZXIpOworICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7CisgICAgZWdsVGVybWluYXRlKGQpOworKyNlbmRpZgorIAorICAgIHJldHVybiAwOworIH0KK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMy5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworaW5kZXggZjg0Y2EyMy4uMzFiNWQ4YiAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMKK0BAIC00Niw3ICs0Niw3IEBAIEdMdWJ5dGUgT3BlbkdMX2JpdHNbXSA9IHsKKyAgICAweDNlLCAweDAwLCAweDAwLCAweGY4LCAweDBjLCAweDAwLCAKKyB9OworIAorLQorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkIEluaXQodm9pZCkKKyB7CisgCitAQCAtNTUxLDExICs1NTEsMTMgQEAgd3JpdGVfcHBtKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBHTHVieXRlICpidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgICBmY2xvc2UoZik7CisgICAgfQorIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgIGludCBtYWosIG1pbjsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xDb250ZXh0IGN0eDsKKyAgICBFR0xTdXJmYWNlIHNjcmVlbl9zdXJmOworICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKK0BAIC01NjYsNiArNTY4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIGNvbnN0IEdMdWJ5dGUgKmJpdG1hcDsKKyAgICBFR0xpbnQgc2NyZWVuQXR0cmlic1szMl07CisgICAgRUdMaW50IGk7CisrI2VuZGlmCisgCisgICAgRUdMRGlzcGxheSBkID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBhc3NlcnQoZCk7CitAQCAtNTgzLDYgKzU4Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICBleGl0KDEpOworICAgIH0KKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIDEwLCAmbnVtQ29uZmlncyk7CisgICAgZWdsR2V0U2NyZWVuc01FU0EoZCwgJnNjcmVlbiwgMSwgJmNvdW50KTsKKyAgICBlZ2xHZXRNb2Rlc01FU0EoZCwgc2NyZWVuLCAmbW9kZSwgMSwgJmNvdW50KTsKK0BAIC02NDIsNiArNjQ2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIGVnbERlc3Ryb3lTdXJmYWNlKGQsIHNjcmVlbl9zdXJmKTsKKyAgICBlZ2xEZXN0cm95Q29udGV4dChkLCBjdHgpOworICAgIGVnbFRlcm1pbmF0ZShkKTsKKysjZW5kaWYKKyAKKyAgICByZXR1cm4gMDsKKyB9CistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlMDgwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNi1RdWVyeS1kaXNwbGF5LWZvci1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24tLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gNmExOWRiYTFkMjc1NTc5YzczZTc3NjNiMDU1NDQxMGZmNGUxZTY1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorRGF0ZTogRnJpLCAyOSBKdW4gMjAxMiAxMjowMDoyNiArMDEwMAorU3ViamVjdDogW1BBVENIIDYvOV0gUXVlcnkgZGlzcGxheSBmb3IgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uCisgYmVmb3JlIHVzaW5nIGl0CisKK1RoaXMgY29kZSBtYWtlcyBoZWF2eSB1c2Ugb2YgdGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbiBzbworY2hlY2sgdGhlIGRpc3BsYXkgdG8gZGV0ZXJtaW5lIGlmIGl0J3Mgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIEVHTAoraW1wbGVtZW50YXRpb24uIElmIGl0IGRvZXNuJ3QgdGhlbiBiYWlsLgorCitTaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KKworQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KKworSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvZWdsL29wZW5nbC9kZW1vMS5jIHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworaW5kZXggM2EzNTY0Yy4uMDZlMjEzOCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK0BAIC0xMTAsNiArMTEwLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICBwcmludGYoIkVHTCB2ZXJzaW9uID0gJWQuJWRcbiIsIG1haiwgbWluKTsKKyAgICBwcmludGYoIkVHTF9WRU5ET1IgPSAlc1xuIiwgZWdsUXVlcnlTdHJpbmcoZCwgRUdMX1ZFTkRPUikpOworIAorKyAgIGlmICghc3Ryc3RyKGVnbFF1ZXJ5U3RyaW5nKGQsIEVHTF9FWFRFTlNJT05TKSwKKysgICAgICAgICAgICAgICAiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UiKSkgeworKyAgICAgIHByaW50ZigiRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgaXMgbm90IHN1cHBvcnRlZFxuIik7CisrICAgICAgZXhpdCgxKTsKKysgICB9CisrCisgICAgZWdsR2V0Q29uZmlncyhkLCBOVUxMLCAwLCAmbnVtQ29uZmlncyk7CisgICAgY29uZmlncyA9IG1hbGxvYyhzaXplb2YoKmNvbmZpZ3MpICpudW1Db25maWdzKTsKKyAgICBlZ2xHZXRDb25maWdzKGQsIGNvbmZpZ3MsIG51bUNvbmZpZ3MsICZudW1Db25maWdzKTsKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkMmZhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNy1JbnN0YWxsLWZldy1tb3JlLXRlc3QtcHJvZ3JhbXMucGF0Y2gKQEAgLTAsMCArMSw3NCBAQAorRnJvbSBkOTMwYjJkYTU3ZjdjOWVmYjgwYzhjZWY4ZjhhZGFkMTViYmJjMGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDozMDo1MiArMDIwMAorU3ViamVjdDogW1BBVENIIDcvOV0gSW5zdGFsbCBmZXcgbW9yZSB0ZXN0IHByb2dyYW1zCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbSAgICB8ICAyICstCisgc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0gfCAxMCArKysrLS0tLS0tCisgc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0gICAgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQoraW5kZXggMGM3MjI4Zi4uODdiMmYxYSAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbQorQEAgLTUwLDcgKzUwLDcgQEAgZW5kaWYKKyBlbmRpZgorIAorIGlmIEhBVkVfRUdMCistbm9pbnN0X1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyA9IFwKKyAJZGVtbzEgXAorIAlkZW1vMiBcCisgCWRlbW8zIFwKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitpbmRleCAzNDU1ZTc1Li41MTZlNTE2IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtCitAQCAtMzYsMTEgKzM2LDExIEBAIEFNX0xERkxBR1MgPSBcCisgCSQoRUdMX0xJQlMpIFwKKyAJLWxtCisgCistbm9pbnN0X1BST0dSQU1TID0KKytiaW5fUFJPR1JBTVMgPQorIAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjEKKy1ub2luc3RfUFJPR1JBTVMgKz0gXAorK2Jpbl9QUk9HUkFNUyArPSBcCisgCWRyYXd0ZXhfc2NyZWVuIFwKKyAJZ2VhcnNfc2NyZWVuIFwKKyAJdG9ydXNfc2NyZWVuIFwKK0BAIC01NywxMCArNTcsOCBAQCB0b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyB0cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisgCisgaWYgSEFWRV9YMTEKKy1ub2luc3RfUFJPR1JBTVMgKz0gXAorLQljbGVhcgorLQorLWJpbl9QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgKz0gXAorKwljbGVhciBcCisgCWJpbmR0ZXggXAorIAlkcmF3dGV4X3gxMSBcCisgCWVnbGZiZGV2IFwKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCitpbmRleCA3MzE4YTQzLi5iNTQ1MjI1IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtCitAQCAtNDksNyArNDksNyBAQCBlbmRpZgorIAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9WRworLW5vaW5zdF9QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgPSBcCisgCWxpb25fc2NyZWVuIFwKKyAJc3Bfc2NyZWVuIFwKKyAJJChFR0xfWDExX0RFTU9TKQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MDg1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorRnJvbSAwYjZmOTVmOWI4ZWNlMjJlOTg1NmMxNTBlNGJlMjlmZDg2ZWFmNTQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDoyOToyNyArMDIwMAorU3ViamVjdDogW1BBVENIIDgvOV0gZ2xzbCwgcGVyZjogQWRkIGZldyBtaXNzaW5nIC5nbHNsLCAudmVydCwgLmZyYWcgZmlsZXMgdG8KKyBFWFRSQV9EQVRBCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvZnBnbHNsL01ha2VmaWxlLmFtIHwgIDIgKysKKyBzcmMvZ2xzbC9NYWtlZmlsZS5hbSAgIHwgMTAgKysrKysrKystLQorIHNyYy9wZXJmL01ha2VmaWxlLmFtICAgfCAgNiArKysrKysKKyBzcmMvdnBnbHNsL01ha2VmaWxlLmFtIHwgIDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0gYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitpbmRleCA0N2MxMDM5Li5mZDQzYzkxIDEwMDY0NAorLS0tIGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTM5LDEwICszOSwxMiBAQCBub2luc3RfUFJPR1JBTVMgPSBcCisgZW5kaWYKKyAKKyBFWFRSQV9ESVNUID0gXAorKwlkZXB0aC1yZWFkLmdsc2wgXAorIAlkb3doaWxlMi5nbHNsIFwKKyAJZG93aGlsZS5nbHNsIFwKKyAJZm9yYnJlYWsuZ2xzbCBcCisgCWZvci5nbHNsIFwKKysJaW5maW5pdGUtbG9vcC5nbHNsIFwKKyAJbW92Lmdsc2wgXAorIAltb3YtaW1tLmdsc2wgXAorIAlzaW1wbGVpZi5nbHNsIFwKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitpbmRleCA0ZmFhOGRiLi4wNzlhMjlkIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitAQCAtMzcsNyArMzcsNyBAQCBBTV9MREZMQUdTID0gXAorIGlmIEhBVkVfR0xVVAorIGJpbl9QUk9HUkFNUyA9IFwKKyAJYXJyYXkgXAorLSAgICAgICAgYmV6aWVyIFwKKysJYmV6aWVyIFwKKyAJYml0bWFwIFwKKyAJYnJpY2sgXAorIAlidW1wIFwKK0BAIC0xMjMsMTIgKzEyMywxNiBAQCBFWFRSQV9ESVNUID0gXAorIAlDSDA2LWJyaWNrLnZlcnQgXAorIAlDSDExLWJ1bXBtYXAuZnJhZyBcCisgCUNIMTEtYnVtcG1hcC52ZXJ0IFwKKysJQ0gxMS1idW1wbWFwdGV4LmZyYWcgXAorIAlDSDExLXRveWJhbGwuZnJhZyBcCisgCUNIMTEtdG95YmFsbC52ZXJ0IFwKKyAJQ0gxOC1tYW5kZWwuZnJhZyBcCisgCUNIMTgtbWFuZGVsLnZlcnQgXAorLSAgICAgICAgYmV6aWVyLmdlb20gXAorKwliZXppZXIuZ2VvbSBcCisgCWJyaWNrLnNodGVzdCBcCisrCWJsaW5raW5nLXRlYXBvdC5mcmFnIFwKKysJYmxpbmtpbmctdGVhcG90LnZlcnQgXAorKwljb252b2x1dGlvbi5mcmFnIFwKKyAJY29udm9sdXRpb24udmVydCBcCisgCWN1YmVtYXAuZnJhZyBcCisgCW1hbmRlbGJyb3Quc2h0ZXN0IFwKK0BAIC0xMzgsNSArMTQyLDcgQEAgRVhUUkFfRElTVCA9IFwKKyAJcmVmbGVjdC52ZXJ0IFwKKyAJc2hhZG93dGV4LmZyYWcgXAorIAlzaW1wbGUudmVydCBcCisrCXNpbXBsZXgtbm9pc2UuZ2xzbCBcCisgCXNraW5uaW5nLmZyYWcgXAorKwlza2lubmluZy52ZXJ0IFwKKyAJdG95YmFsbC5zaHRlc3QKK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9NYWtlZmlsZS5hbSBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitpbmRleCA1MzYzYzU4Li5jNWNjYThkIDEwMDY0NAorLS0tIGEvc3JjL3BlcmYvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitAQCAtNTcsMyArNTcsOSBAQCBiaW5fUFJPR1JBTVMgPSBcCisgZW5kaWYKKyAKKyBnbHNsc3RhdGVzY2hhbmdlX0xEQUREID0gbGlicGVyZi5sYSAuLi91dGlsL2xpYnV0aWwubGEKKysKKytFWFRSQV9ESVNUID0gXAorKwlnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIFwKKysJZ2xzbHN0YXRlc2NoYW5nZTEudmVydCBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcgXAorKwlnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDRhODVlZDQuLjQ4YjA4ZjQgMTAwNjQ0CistLS0gYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCitAQCAtNDQsNiArNDQsNyBAQCBFWFRSQV9ESVNUID0gXAorIAlmdW5jMi5nbHNsIFwKKyAJaWZlbHNlLmdsc2wgXAorIAlpZi5nbHNsIFwKKysJaW5maW5pdGUtbG9vcC5nbHNsIFwKKyAJbW92Lmdsc2wgXAorIAluZXN0ZWRpZnMuZ2xzbCBcCisgCW5lc3RlZHN3aXp6bGUuZ2xzbCBcCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjYyZGVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gYzhjM2RlNTQxN2Q2YjZjN2Q3NTc5YzUyOGMwY2FiNzE4ZjRiZmRiNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgSnVsIDIwMTQgMTQ6NDg6MTIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA5LzldIGdsc2wsIHBlcmY6IEluc3RhbGwgLmdsc2wsIC52ZXJ0LCAuZnJhZyBmaWxlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvTWFrZWZpbGUuYW0gfCAzICsrLQorIHNyYy9nbHNsL01ha2VmaWxlLmFtICAgfCAzICsrLQorIHNyYy9wZXJmL01ha2VmaWxlLmFtICAgfCAzICsrLQorIHNyYy92cGdsc2wvTWFrZWZpbGUuYW0gfCAzICsrLQorIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IGZkNDNjOTEuLjJiZjUxZGUgMTAwNjQ0CistLS0gYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzgsNyArMzgsOCBAQCBub2luc3RfUFJPR1JBTVMgPSBcCisgCWZwLXRyaQorIGVuZGlmCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZGVwdGgtcmVhZC5nbHNsIFwKKyAJZG93aGlsZTIuZ2xzbCBcCisgCWRvd2hpbGUuZ2xzbCBcCitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0gYi9zcmMvZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggMDc5YTI5ZC4uZjY2ZWMyOSAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorQEAgLTExOCw3ICsxMTgsOCBAQCB2ZXJ0X29yX2ZyYWdfb25seV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHZlcnRfdGV4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdnNyYXl0cmFjZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCUNIMDYtYnJpY2suZnJhZyBcCisgCUNIMDYtYnJpY2sudmVydCBcCisgCUNIMTEtYnVtcG1hcC5mcmFnIFwKK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9NYWtlZmlsZS5hbSBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitpbmRleCBjNWNjYThkLi4xNDAyNTZkIDEwMDY0NAorLS0tIGEvc3JjL3BlcmYvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9wZXJmL01ha2VmaWxlLmFtCitAQCAtNTgsNyArNTgsOCBAQCBlbmRpZgorIAorIGdsc2xzdGF0ZXNjaGFuZ2VfTERBREQgPSBsaWJwZXJmLmxhIC4uL3V0aWwvbGlidXRpbC5sYQorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCWdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgXAorIAlnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IFwKKyAJZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBcCitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDQ4YjA4ZjQuLjU1MjY4NjcgMTAwNjQ0CistLS0gYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvdnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzgsNyArMzgsOCBAQCBub2luc3RfUFJPR1JBTVMgPSBcCisgCXZwLXRyaXMKKyBlbmRpZgorIAorLUVYVFJBX0RJU1QgPSBcCisrZGVtb3NkYXRhZGlyPSQoZGF0YWRpcikvJChQQUNLQUdFKS8KKytkaXN0X2RlbW9zZGF0YV9EQVRBPSBcCisgCWZvci5nbHNsIFwKKyAJZnVuYy5nbHNsIFwKKyAJZnVuYzIuZ2xzbCBcCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTE2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zXzguMi4wLmJiCkBAIC0wLDAgKzEsNTcgQEAKK1NVTU1BUlkgPSAiTWVzYSBkZW1vIGFwcGxpY2F0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpbmNsdWRlcyB0aGUgZGVtb25zdHJhdGlvbiBhcHBsaWNhdGlvbiwgc3VjaCBhcyBnbHhnZWFycy4gXAorVGhlc2UgYXBwbGljYXRpb25zIGNhbiBiZSB1c2VkIGZvciBNZXNhIHZhbGlkYXRpb24gYW5kIGJlbmNobWFya2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIk1JVCAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3hkZW1vcy9nbHhnZWFycy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTkxNDIyNTc4NTQ1MGVmZjY0NGE4NmM4NzFkM2FlMDBlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94ZGVtb3MvZ2x4ZGVtby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9ODttZDU9YjAxZDVhYjFhZWU5NGQzNWI3ZWZhYTJlZjQ4ZTFhMDYiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS9kZW1vcy8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDEtbWVzYS1kZW1vcy1BZGQtbWlzc2luZy1kYXRhLWZpbGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LUZpeC1idWlsZC13aGVuLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi1pc24ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDgtZ2xzbC1wZXJmLUFkZC1mZXctbWlzc2luZy0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy10by5wYXRjaCBcCisgICAgZmlsZTovLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjcyNjEzYTJjOGMwMTM3MTZkYjAyZTNmZjU5ZDI5MDYxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU0YmZlY2I1ODE2ZGRkNGI3YjM3YzFiYzg3NmI2M2YxZjdmMDZmZGE1ODc5MjIxYTk3NzRkMDk1MmY5MGJhOTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICJkcm0gb3NtZXNhIGZyZWV0eXBlMiBnYm0gZWdsIGdsZXMxIGdsZXMyIFwKKyAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMSBnbGV3IGdsdScsICcnLCBkKX0iCisKKyMgVGhlIFdheWxhbmQgY29kZSBkb2Vzbid0IHdvcmsgd2l0aCBXYXlsYW5kIDEuMCwgc28gZGlzYWJsZSBpdCBmb3Igbm93CisjJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXN5c3RlbS1kYXRhLWZpbGVzIgorCitQQUNLQUdFQ09ORklHW2RybV0gPSAiLS1lbmFibGUtbGliZHJtLC0tZGlzYWJsZS1saWJkcm0sbGliZHJtIgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCwtLWRpc2FibGUtZWdsLHZpcnR1YWwvZWdsIgorUEFDS0FHRUNPTkZJR1tmcmVldHlwZTJdID0gIi0tZW5hYmxlLWZyZWV0eXBlMiwtLWRpc2FibGUtZnJlZXR5cGUyLGZyZWV0eXBlIgorUEFDS0FHRUNPTkZJR1tnYm1dID0gIi0tZW5hYmxlLWdibSwtLWRpc2FibGUtZ2JtLHZpcnR1YWwvbGliZ2wiCitQQUNLQUdFQ09ORklHW2dsZXMxXSA9ICItLWVuYWJsZS1nbGVzMSwtLWRpc2FibGUtZ2xlczEsdmlydHVhbC9saWJnbGVzMSIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdID0gIi0tZW5hYmxlLWdsZXMyLC0tZGlzYWJsZS1nbGVzMix2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tnbHV0XSA9ICItLXdpdGgtZ2x1dD0ke1NUQUdJTkdfRVhFQ1BSRUZJWERJUn0sLS13aXRob3V0LWdsdXQsIgorUEFDS0FHRUNPTkZJR1tvc21lc2FdID0gIi0tZW5hYmxlLW9zbWVzYSwtLWRpc2FibGUtb3NtZXNhLCIKK1BBQ0tBR0VDT05GSUdbdmddID0gIi0tZW5hYmxlLXZnLC0tZGlzYWJsZS12Zyx2aXJ0dWFsL2xpYm9wZW52ZyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZCwtLWRpc2FibGUtd2F5bGFuZCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLC0tZGlzYWJsZS14MTEsdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW2dsZXddID0gIi0tZW5hYmxlLWdsZXcsLS1kaXNhYmxlLWdsZXcsZ2xldyIKK1BBQ0tBR0VDT05GSUdbZ2x1XSA9ICItLWVuYWJsZS1nbHUsLS1kaXNhYmxlLWdsdSx2aXJ0dWFsL2xpYmdsIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIGl0IGNhbiBiZSBjb21wbGV0ZWx5IGVtcHR5IHdoZW4gYWxsIFBBQ0tBR0VDT05GSUcgb3B0aW9ucyBhcmUgZGlzYWJsZWQKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtiaW5kaXJ9CisKKwlpZiBbIC1mICR7RH0ke2JpbmRpcn0vY2xlYXIgXTsgdGhlbgorICAgICAgICAJbXYgJHtEfSR7YmluZGlyfS9jbGVhciAke0R9JHtiaW5kaXJ9L2NsZWFyLm1lc2EtZGVtb3MKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJiY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1nbF8xMC42LjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtZXNhXyR7UFZ9LmJiCisKK1NVTU1BUlkgKz0gIiAoT3BlbkdMIG9ubHksIG5vIEVHTC9HTEVTKSIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vbWVzYToiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9tZXNhIgorCitTID0gIiR7V09SS0RJUn0vbWVzYS0ke1BWfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImRyaSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3YTJjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EuaW5jCkBAIC0wLDAgKzEsMTg1IEBACitTVU1NQVJZID0gIkEgZnJlZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbkdMIEFQSSIKK0RFU0NSSVBUSU9OID0gIk1lc2EgaXMgYW4gb3Blbi1zb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9wZW5HTCBzcGVjaWZpY2F0aW9uIC0gXAorYSBzeXN0ZW0gZm9yIHJlbmRlcmluZyBpbnRlcmFjdGl2ZSAzRCBncmFwaGljcy4gIFwKK0EgdmFyaWV0eSBvZiBkZXZpY2UgZHJpdmVycyBhbGxvd3MgTWVzYSB0byBiZSB1c2VkIGluIG1hbnkgZGlmZmVyZW50IGVudmlyb25tZW50cyBcCityYW5naW5nIGZyb20gc29mdHdhcmUgZW11bGF0aW9uIHRvIGNvbXBsZXRlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3IgbW9kZXJuIEdQVXMuIFwKK01lc2EgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBvdmVyYWxsIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgYW5kIFgub3JnIFwKK2Vudmlyb25tZW50LiIKKworSE9NRVBBR0UgPSAiaHR0cDovL21lc2EzZC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jcy9saWNlbnNlLmh0bWw7bWQ1PTZhMjM0NDU5ODJhN2E5NzJhYzE5OGU5M2NjMWNiM2RlIgorCitQRSA9ICIyIgorCitERVBFTkRTID0gImV4cGF0IG1ha2VkZXBlbmQtbmF0aXZlIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSBsaWJ4bWwyLW5hdGl2ZSB1ZGV2IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmdsIHZpcnR1YWwvbGliZ2xlczEgdmlydHVhbC9saWJnbGVzMiB2aXJ0dWFsL2VnbCB2aXJ0dWFsL21lc2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIm9wZW5nbCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZC1nbGFwaSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImVnbCBnbGVzIGRyaSBcCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX1cCisJCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICd3YXlsYW5kJywgJycsIGQpfVwKKwkJIgorCitYMTFfREVQUyA9ICJ4Zjg2ZHJpcHJvdG8gZ2xwcm90byB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh4Zjg2dm0gbGlieGRhbWFnZSBsaWJ4Zml4ZXMiCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LXRscywtLWRpc2FibGUtZ2x4LCR7WDExX0RFUFN9IgorUEFDS0FHRUNPTkZJR1t4dm1jXSA9ICItLWVuYWJsZS14dm1jLC0tZGlzYWJsZS14dm1jLGxpYnh2bWMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIiwsd2F5bGFuZCIKKworRFJJRFJJVkVSUyA9ICJzd3Jhc3QiCitEUklEUklWRVJTX2FwcGVuZF94ODYgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgorRFJJRFJJVkVSU19hcHBlbmRfeDg2LTY0ID0gIixyYWRlb24scjIwMCxub3V2ZWF1LGk5NjUsaTkxNSIKK1BBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmkgLS13aXRoLWRyaS1kcml2ZXJzPSR7RFJJRFJJVkVSU30sIC0tZGlzYWJsZS1kcmksIGRyaTJwcm90byBsaWJkcm0iCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsIC0tZGlzYWJsZS1kcmkzLCBkcmkzcHJvdG8gcHJlc2VudHByb3RvIGxpYnhzaG1mZW5jZSIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1nYm0iCisKK1BBQ0tBR0VDT05GSUdbZ2xlc10gPSAiLS1lbmFibGUtZ2xlczEgLS1lbmFibGUtZ2xlczIsIC0tZGlzYWJsZS1nbGVzMSAtLWRpc2FibGUtZ2xlczIiCisKK0VHTF9QTEFURk9STVMgID0gImRybSIKK0VHTF9QTEFURk9STVMgLj0iJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJyx4MTEnLCAnJywgZCl9IgorRUdMX1BMQVRGT1JNUyAuPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd3YXlsYW5kJywgJyx3YXlsYW5kJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wgLS13aXRoLWVnbC1wbGF0Zm9ybXM9JHtFR0xfUExBVEZPUk1TfSwgLS1kaXNhYmxlLWVnbCIKKworR0FMTElVTURSSVZFUlMgPSAic3dyYXN0IgorR0FMTElVTURSSVZFUlNfTExWTTMzID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3I2MDAnLCAncmFkZW9uc2kscjYwMCcsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3I2MDBdID0gIiIKK0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEID0gIiR7QGJhc2VfdmVyc2lvbl9sZXNzX29yX2VxdWFsKCdNRVNBX0xMVk1fUkVMRUFTRScsICczLjInLCBGYWxzZSwgbGVuKCcke0dBTExJVU1EUklWRVJTX0xMVk0zM30nKSA+IDAsIGQpfSIKK0dBTExJVU1EUklWRVJTX0xMVk0gPSAicjMwMCxzdmdhLG5vdXZlYXUke0AnLCR7R0FMTElVTURSSVZFUlNfTExWTTMzfScgaWYgJHtHQUxMSVVNRFJJVkVSU19MTFZNMzNfRU5BQkxFRH0gZWxzZSAnJ30iCitHQUxMSVVNRFJJVkVSU19hcHBlbmRfeDg2ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dhbGxpdW0tbGx2bScsICcsJHtHQUxMSVVNRFJJVkVSU19MTFZNfScsICcnLCBkKX0iCitHQUxMSVVNRFJJVkVSU19hcHBlbmRfeDg2LTY0ID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dhbGxpdW0tbGx2bScsICcsJHtHQUxMSVVNRFJJVkVSU19MTFZNfScsICcnLCBkKX0iCisjIGtlZXAgLS13aXRoLWdhbGxpdW0tZHJpdmVycyBzZXBhcmF0ZSwgYmVjYXVzZSB3aGVuIG9ubHkgb25lIG9mIGdhbGxpdW0gdmVyc2lvbnMgaXMgZW5hYmxlZCwgb3RoZXIgMiB3ZXJlIGFkZGluZyAtLXdpdGhvdXQtZ2FsbGl1bS1kcml2ZXJzCitQQUNLQUdFQ09ORklHW2dhbGxpdW1dICAgICAgPSAiLS13aXRoLWdhbGxpdW0tZHJpdmVycz0ke0dBTExJVU1EUklWRVJTfSwgLS13aXRob3V0LWdhbGxpdW0tZHJpdmVycyIKK01FU0FfTExWTV9SRUxFQVNFID89ICIzLjMiCitQQUNLQUdFQ09ORklHW2dhbGxpdW0tbGx2bV0gPSAiLS1lbmFibGUtZ2FsbGl1bS1sbHZtIC0tZW5hYmxlLWxsdm0tc2hhcmVkLWxpYnMsIC0tZGlzYWJsZS1nYWxsaXVtLWxsdm0sIGxsdm0ke01FU0FfTExWTV9SRUxFQVNFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtAJ2VsZnV0aWxzJyBpZiAke0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEfSBlbHNlICcnfSIKK2V4cG9ydCBXQU5UX0xMVk1fUkVMRUFTRSA9ICIke01FU0FfTExWTV9SRUxFQVNFfSIKK1BBQ0tBR0VDT05GSUdbeGFdICA9ICItLWVuYWJsZS14YSwgLS1kaXNhYmxlLXhhIgorCisjIGxsdm1waXBlIGlzIHNsb3cgaWYgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlciAoZS5nLiAtTzIpCitGVUxMX09QVElNSVpBVElPTl9hcHBlbmQgPSAiIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIgorCisjIE11bHRpcGxlIHZpcnR1YWwvZ2wgcHJvdmlkZXJzIGJlaW5nIGJ1aWx0IGJyZWFrcyBzdGFnaW5nCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworIyBSZW1vdmUgdGhlIG1lc2EgZGVwZW5kZW5jeSBvbiBtZXNhLWRldiwgYXMgbWVzYSBpcyBlbXB0eQorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworUEFDS0FHRVMgPSsgImxpYmVnbC1tZXNhIGxpYmVnbC1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGlib3NtZXNhIGxpYm9zbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsLW1lc2EgbGliZ2wtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsYXBpIGxpYmdsYXBpLWRldiBcCisgICAgICAgICAgICAgbGliZ2JtIGxpYmdibS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsZXMxLW1lc2EgbGliZ2xlczEtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsZXMyLW1lc2EgbGliZ2xlczItbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYmdsZXMzLW1lc2EgbGliZ2xlczMtbWVzYS1kZXYgXAorICAgICAgICAgICAgIGxpYndheWxhbmQtZWdsIGxpYndheWxhbmQtZWdsLWRldiBcCisgICAgICAgICAgICAgbGlieHZtY3NvZnRwaXBlIGxpYnh2bWNzb2Z0cGlwZS1kZXYgXAorICAgICAgICAgICAgIGxpYnhhdHJhY2tlciBsaWJ4YXRyYWNrZXItZGV2IFwKKyAgICAgICAgICAgICBtZXNhLW1lZ2Fkcml2ZXIgXAorICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyBEcml2ZXJzIG5ldmVyIG5lZWQgbGlidG9vbCAubGEgZmlsZXMKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2RyaS8qLmxhCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9lZ2wvKi5sYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZ2FsbGl1bS1waXBlLyoubGEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2dibS8qLmxhCisgICAgCisgICAgIyBpdCB3YXMgcGFja2FnZWQgaW4gbGliZHJpY29yZTkuMS4zLTEgYW5kIHByZXZlbnRpbmcgdXBncmFkZXMgd2hlbiBkZWJpYW4uYmJjbGFzcyB3YXMgdXNlZCAKKyAgICBybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kcmlyYworfQorCisjIEZvciB0aGUgcGFja2FnZXMgdGhhdCBtYWtlIHVwIHRoZSBPcGVuR0wgaW50ZXJmYWNlcywgaW5qZWN0IHZhcmlhYmxlcyBzbyB0aGF0CisjIHRoZXkgZG9uJ3QgZ2V0IERlYmlhbi1yZW5hbWVkICh3aGljaCB3b3VsZCByZW1vdmUgdGhlIC1tZXNhIHN1ZmZpeCksIGFuZAorIyBSUFJPVklERXMvUkNPTkZMSUNUcyBvbiB0aGUgZ2VuZXJpYyBsaWJnbCBuYW1lLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIHBrZ2NvbmZpZyA9IChkLmdldFZhcignUEFDS0FHRUNPTkZJRycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIHAgaW4gKCgiZWdsIiwgImxpYmVnbCIsICJsaWJlZ2wxIiksCisgICAgICAgICAgICAgICgiZHJpIiwgImxpYmdsIiwgImxpYmdsMSIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczEiLCAibGliZ2xlc3YxLWNtMSIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczIiLCAibGliZ2xlc3YyLTIiKSwKKyAgICAgICAgICAgICAgKCJnbGVzIiwgImxpYmdsZXMzIiwpKToKKyAgICAgICAgaWYgbm90IHBbMF0gaW4gcGtnY29uZmlnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZnVsbHAgPSBwWzFdICsgIi1tZXNhIgorICAgICAgICBwa2dzID0gIiAiLmpvaW4ocFsxOl0pCisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5fTk9BVVRPTkFNRV8iICsgZnVsbHAsICIxIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIAorICAgICAgICAjIEZvciAtZGV2LCB0aGUgZmlyc3QgZWxlbWVudCBpcyBib3RoIHRoZSBEZWJpYW4gYW5kIG9yaWdpbmFsIG5hbWUKKyAgICAgICAgZnVsbHAgKz0gIi1kZXYiCisgICAgICAgIHBrZ3MgPSBwWzFdICsgIi1kZXYiCisgICAgICAgIGQuc2V0VmFyKCJERUJJQU5fTk9BVVRPTkFNRV8iICsgZnVsbHAsICIxIikKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJSRVBMQUNFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIGZ1bGxwLCBwa2dzKQorICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18iICsgZnVsbHAsIHBrZ3MpCit9CisKK3B5dGhvbiBtZXNhX3BvcHVsYXRlX3BhY2thZ2VzKCkgeworICAgIHBrZ3MgPSBbJ21lc2EnLCAnbWVzYS1kZXYnLCAnbWVzYS1kYmcnXQorICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgZC5zZXRWYXIoIlJQUk9WSURFU18lcyIgJSBwa2csIHBrZy5yZXBsYWNlKCJtZXNhIiwgIm1lc2EtZHJpIiwgMSkpCisgICAgICAgIGQuc2V0VmFyKCJSQ09ORkxJQ1RTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRVBMQUNFU18lcyIgJSBwa2csIHBrZy5yZXBsYWNlKCJtZXNhIiwgIm1lc2EtZHJpIiwgMSkpCisKKyAgICBpbXBvcnQgcmUKKyAgICBkcmlfZHJpdmVyc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImRyaSIpCisgICAgZHJpX3BrZ3MgPSBvcy5saXN0ZGlyKGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkgKyBkcmlfZHJpdmVyc19yb290KQorICAgIGxpYl9uYW1lID0gZC5leHBhbmQoIiR7TUxQUkVGSVh9bWVzYS1tZWdhZHJpdmVyIikKKyAgICBmb3IgcCBpbiBkcmlfcGtnczoKKyAgICAgICAgbSA9IHJlLm1hdGNoKCdeKC4qKV9kcmlcLnNvJCcsIHApCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwa2dfbmFtZSA9ICIgJHtNTFBSRUZJWH1tZXNhLWRyaXZlci0lcyIgJSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUkNPTkZMSUNUU18lcyIgJSBsaWJfbmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKworICAgIHBpcGVfZHJpdmVyc19yb290ID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgImdhbGxpdW0tcGlwZSIpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGlwZV9kcml2ZXJzX3Jvb3QsICdecGlwZV8oLiopXC5zbyQnLCAnbWVzYS1kcml2ZXItcGlwZS0lcycsICdNZXNhICVzIHBpcGUgZHJpdmVyJywgZXh0cmFfZGVwZW5kcz0nJykKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJtZXNhX3BvcHVsYXRlX3BhY2thZ2VzICIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXm1lc2EtZHJpdmVyLS4qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9kcmkvLmRlYnVnLyoiCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9kcmlyYyIKK0ZJTEVTX21lc2EtbWVnYWRyaXZlciA9ICIke2xpYmRpcn0vZHJpLyoiCitGSUxFU19saWJlZ2wtbWVzYSA9ICIke2xpYmRpcn0vbGliRUdMLnNvLioiCitGSUxFU19saWJnYm0gPSAiJHtsaWJkaXJ9L2xpYmdibS5zby4qIgorRklMRVNfbGliZ2xlczEtbWVzYSA9ICIke2xpYmRpcn0vbGliR0xFU3YxKi5zby4qIgorRklMRVNfbGliZ2xlczItbWVzYSA9ICIke2xpYmRpcn0vbGliR0xFU3YyLnNvLioiCitGSUxFU19saWJnbC1tZXNhID0gIiR7bGliZGlyfS9saWJHTC5zby4qIgorRklMRVNfbGliZ2xhcGkgPSAiJHtsaWJkaXJ9L2xpYmdsYXBpLnNvLioiCitGSUxFU19saWJvc21lc2EgPSAiJHtsaWJkaXJ9L2xpYk9TTWVzYS5zby4qIgorRklMRVNfbGlid2F5bGFuZC1lZ2wgPSAiJHtsaWJkaXJ9L2xpYndheWxhbmQtZWdsLnNvLioiCitGSUxFU19saWJ4dm1jc29mdHBpcGUgPSAiJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5zby4qIgorRklMRVNfbGlieGF0cmFja2VyID0gIiR7bGliZGlyfS9saWJ4YXRyYWNrZXIuc28uKiIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9wa2djb25maWcvZHJpLnBjIgorRklMRVNfbGliZWdsLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJFR0wuKiAke2luY2x1ZGVkaXJ9L0VHTCAke2luY2x1ZGVkaXJ9L0tIUiAke2xpYmRpcn0vcGtnY29uZmlnL2VnbC5wYyIKK0ZJTEVTX2xpYmdibS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmdibS4qICR7bGliZGlyfS9wa2djb25maWcvZ2JtLnBjICR7aW5jbHVkZWRpcn0vZ2JtLmgiCitGSUxFU19saWJnbC1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliR0wuKiAke2luY2x1ZGVkaXJ9L0dMICR7bGliZGlyfS9wa2djb25maWcvZ2wucGMiCitGSUxFU19saWJnbGFwaS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmdsYXBpLioiCitGSUxFU19saWJnbGVzMS1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliR0xFU3YxKi4qICR7aW5jbHVkZWRpcn0vR0xFUyAke2xpYmRpcn0vcGtnY29uZmlnL2dsZXN2MSoucGMiCitGSUxFU19saWJnbGVzMi1tZXNhLWRldiA9ICIke2xpYmRpcn0vbGliR0xFU3YyLiogJHtpbmNsdWRlZGlyfS9HTEVTMiAke2xpYmRpcn0vcGtnY29uZmlnL2dsZXN2Mi5wYyIKK0ZJTEVTX2xpYmdsZXMzLW1lc2EtZGV2ID0gIiR7aW5jbHVkZWRpcn0vR0xFUzMiCitGSUxFU19saWJvc21lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJPU01lc2EuKiAke2luY2x1ZGVkaXJ9L29zbWVzYS5oICR7bGliZGlyfS9wa2djb25maWcvb3NtZXNhLnBjIgorRklMRVNfbGlid2F5bGFuZC1lZ2wtZGV2ID0gIiR7bGliZGlyfS9wa2djb25maWcvd2F5bGFuZC1lZ2wucGMgJHtsaWJkaXJ9L2xpYndheWxhbmQtZWdsLioiCitGSUxFU19saWJ4dm1jc29mdHBpcGUtZGV2ID0gIiR7bGliZGlyfS9saWJYdk1Dc29mdHBpcGUuc28gJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5sYSIKK0ZJTEVTX2xpYnhhdHJhY2tlci1kZXYgPSAiJHtsaWJkaXJ9L2xpYnhhdHJhY2tlci5zbyAke2xpYmRpcn0vbGlieGF0cmFja2VyLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS94YV90cmFja2VyLmggJHtpbmNsdWRlZGlyfS94YV9jb21wb3NpdGUuaCAke2luY2x1ZGVkaXJ9L3hhX2NvbnRleHQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcveGF0cmFja2VyLnBjIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9kcmkvLmRlYnVnLyogJHtsaWJkaXJ9L2VnbC8uZGVidWcvKiAke2xpYmRpcn0vZ2JtLy5kZWJ1Zy8qICR7bGliZGlyfS9nYWxsaXVtLXBpcGUvLmRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzU1MDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV8xMC42LjMuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSAke0JQTn0uaW5jCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmZyZWVkZXNrdG9wLm9yZy9wdWIvbWVzYS8ke1BWfS9tZXNhLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU1M2U1MjVkMmYyMGVkNDhmY2E4ZjFlYzMxNzZmZDgzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU4NTkyZTA3YzM1MGNkMmU4OTY5YjczZmE4MzA0OGM2NTdhMzlmZTJmMTNmM2I4OGY1ZTU4MThmZTJlNDY3NmQiCisKKyNiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFwcHMgd2lsbCB1c2UgcGtnY29uZmlnLAorI21ha2UgZWdscGxhdGZvcm0uaCBpbmRlcGVuZGVudCBvZiBNRVNBX0VHTF9OT19YMTFfSEVBREVSCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdlZ2wnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MvXiNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSQvI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpIHx8ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcwJywgJzEnLCBkKX0vJyAke0R9JHtpbmNsdWRlZGlyfS9FR0wvZWdscGxhdGZvcm0uaAorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzQ1MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlICR7QlBOfS5pbmMKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitTUkNSRVYgPSAiZWEwZDFmNTc1YzIxNGMwOWJhM2RmMTI2NDRhOTYwZTg2ZTAzMTc2NiIKK1BWID0gIjEwLjUuNCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvbWVzYS9tZXNhO2JyYW5jaD0xMC41IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTICs9ICJweXRob24tbWFrby1uYXRpdmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlCisKKyNiZWNhdXNlIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFwcHMgd2lsbCB1c2UgcGtnY29uZmlnLAorI21ha2UgZWdscGxhdGZvcm0uaCBpbmRlcGVuZGVudCBvZiBNRVNBX0VHTF9OT19YMTFfSEVBREVSCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdlZ2wnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MvXiNpZiBkZWZpbmVkKE1FU0FfRUdMX05PX1gxMV9IRUFERVJTKSQvI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpIHx8ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICcwJywgJzEnLCBkKX0vJyAke0R9JHtpbmNsdWRlZGlyfS9FR0wvZWdscGxhdGZvcm0uaAorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vZmlsZXMvbWluaS14LXNlc3Npb24gYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vZmlsZXMvbWluaS14LXNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNjU1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9maWxlcy9taW5pLXgtc2Vzc2lvbgpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMKKyMgVmVyeSBzaW1wbGUgc2Vzc2lvbiBtYW5hZ2VyIGZvciBNaW5pIFgKKyMKKworIyBVbmNvbW1lbnQgYmVsb3cgdG8gZW5hYmxlIHBhcnNpbmcgb2YgZGViaWFuIG1lbnUgZW50cnlzCisjIGV4cG9ydCBNQl9VU0VfREVCX01FTlVTPTEgCisKK2lmIFsgLWUgJEhPTUUvLm1pbmlfeC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgJEhPTUUvLm1pbmlfeC9zZXNzaW9uCitmaQorCitpZiBbIC1lIC9ldGMvbWluaV94L3Nlc3Npb24gXQordGhlbgorZXhlYyAvZXRjL21pbmlfeC9zZXNzaW9uCitmaQorCitNSU5JX1hfU0VTU0lPTl9ESVI9L2V0Yy9taW5pX3gvc2Vzc2lvbi5kCitpZiBbIC1kICIkTUlOSV9YX1NFU1NJT05fRElSIiBdOyB0aGVuCisJIyBFeGVjdXRlIHNlc3Npb24gZmlsZSBvbiBiZWhhbGYgb2YgZmlsZSBvd25lcgorCWZpbmQgJE1JTklfWF9TRVNTSU9OX0RJUiAtdHlwZSBmIHwgd2hpbGUgcmVhZCBTRVNTSU9ORklMRTsgZG8KKwkJc2V0ICtlCisJCVVTRVJOQU1FPWBzdGF0IC1jICVVICRTRVNTSU9ORklMRWAKKwkJIyBVc2luZyBzdSByYXRoZXIgdGhhbiBzdWRvIGFzIGxhdGVzdCAxLjguMSBjYXVzZSBmYWlsdXJlIFtZT0NUTyAjMTIxMV0KKyMJCXN1IC1sIC1jICckU0VTU0lPTkZJTEUmJyAkVVNFUk5BTUUKKwkJc3VkbyAtYiAtaSAtdSAkVVNFUk5BTUUgJFNFU1NJT05GSUxFJgorCQlzZXQgLWUKKwlkb25lCitmaQorCisjIFRoaXMgcmVzb2x1dGlvbiBpcyBiaWcgZW5vdWdoIGZvciBob2IyJ3MgbWF4IHdpbmRvdyBzaXplLgoreHJhbmRyIC1zIDEwMjR4NzY4CisKKyMgRGVmYXVsdCBmaWxlcyB0byBydW4gaWYgJEhPTUUvLm1pbmlfeC9zZXNzaW9uIG9yIC9ldGMvbWluaV94L3Nlc3Npb24KKyMgZG9udCBleGlzdC4gCisKK21hdGNoYm94LXRlcm1pbmFsJgorZXhlYyBtYXRjaGJveC13aW5kb3ctbWFuYWdlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL21pbmkteC1zZXNzaW9uXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4OWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9taW5pLXgtc2Vzc2lvbl8wLjEuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIFgiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5wb2t5bGludXgub3JnIgorCitQUiA9ICJyNCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21pbmkteC1zZXNzaW9uO2VuZGxpbmU9NTttZDU9YjY0MzBiZmZiY2YwNWY5NzYwZTcyOTM4ODI2Yjc0ODciCisKK1NFQ1RJT04gPSAieDExIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCisKK1NSQ19VUkkgPSAiZmlsZTovL21pbmkteC1zZXNzaW9uIgorUyA9ICIke1dPUktESVJ9IgorCitSREVQRU5EU18ke1BOfSA9ICJzdWRvIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAieC1zZXNzaW9uLW1hbmFnZXIiCitBTFRFUk5BVElWRV9UQVJHRVRbeC1zZXNzaW9uLW1hbmFnZXJdID0gIiR7YmluZGlyfS9taW5pLXgtc2Vzc2lvbiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjUwIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9taW5pLXgtc2Vzc2lvbiAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtYnVpbGQtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGE4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRml4IGJ1aWxkIGZvciBTICE9IEIKKworVGhpcyBwYXRjaCBpcyBzcGVjaWZpYyB0byB2ZXJzaW9uIDEuNC54CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXgvaXNzdWVzLzgxCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KKy0tCitJbmRleDogZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjA3OjAyLjAyNzE1NDc4OCArMDEwMAorKysrIGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC1ndGsvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToxNDozMy42ODQzMTg2NTAgKzAxMDAKK0BAIC0xLDMgKzEsNiBAQAorK0VYVFJBX0RJU1Q9CisrQ0xFQU5GSUxFUz0KKysKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyAjIFdlIHJlcXVpcmUgYXV0b21ha2UgMS42IGF0IGxlYXN0LgorQEAgLTc3LDcgKzgwLDcgQEAKKyBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC1ndGsvbGlibXgtZ3RrLSQoTVhfQVBJX1ZFUlNJT04pLmxhCisgCisgIyBUaGlzIGluY2x1ZGVzIHRoZSBzdGFuZGFyZCBndGstZG9jIG1ha2UgcnVsZXMsIGNvcGllZCBieSBndGtkb2NpemUuCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2d0ay1kb2MubWFrZQorK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL2d0ay1kb2MubWFrZQorIAorICMgT3RoZXIgZmlsZXMgdG8gZGlzdHJpYnV0ZQorIEVYVFJBX0RJU1QgKz0gdmVyc2lvbi54bWwuaW4KK0luZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjA3OjAyLjAyNzE1NDc4OCArMDEwMAorKysrIGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjI0LjQ1NjM3ODEzNSArMDEwMAorQEAgLTEsMyArMSw2IEBACisrRVhUUkFfRElTVD0KKytDTEVBTkZJTEVTPQorKworICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCitAQCAtMTA2LDcgKzEwOSw3IEBACisgR1RLRE9DX0xJQlM9JChNWF9MSUJTKSAkKHRvcF9idWlsZGRpcikvbXgvbGlibXgtJChNWF9BUElfVkVSU0lPTikubGEKKyAKKyAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KKy1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCisgCisgIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCisgRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjOTNkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LXRlc3QtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRml4IG1pc3NpbmcgaW5jbHVkZSBkaXJlY3Rvcnkgd2hlbiBidWlsZGluZyB0ZXN0cworCitUaGlzIHBhdGNoIGlzIGN1cnJlbnRseSByZXF1aXJlZCBmb3IgYWxsIHZlcnNpb25zIG9mIG14CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vZ2l0aHViLmNvbS9jbHV0dGVyLXByb2plY3QvbXgvaXNzdWVzLzgyCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KKy0tCitJbmRleDogZ2l0L3Rlc3RzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToxODo1Ni45MTg1OTY0MjUgKzAxMDAKKysrKyBnaXQvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wNS0wOCAxNToyMzoyNi44NjQ3ODE0MDEgKzAxMDAKK0BAIC0xMCw3ICsxMCw4IEBACisgCisgSU5DTFVERVMgPSBcCisgCS1JJCh0b3Bfc3JjZGlyKSBcCistCS1JJCh0b3BfYnVpbGRkaXIpCisrCS1JJCh0b3BfYnVpbGRkaXIpXAorKwktSSQodG9wX2J1aWxkZGlyKS9teAorIAorIG5vaW5zdF9QUk9HUkFNUyA9IAkJCVwKKyAJdGVzdC1kZWZvcm0tdGV4dHVyZQkJXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzNWI2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjBfMS40LjcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBteC5pbmMKKworIyBUaGUgMS40LjcgdGFnIGRvZXMgbm90IGJ1aWxkIGFnYWluc3QgY29nbCAxLjE0LCBwdWxsIGluIGEgcmV2aXNpb24gd2l0aCBhIGZpeAorU1JDUkVWID0gIjliMWRiNmI4MDYwYmQwMGIxMjFhNjkyZjk0MjQwNGEyNGFlMjk2MGYiCitQViA9ICIxLjQuNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC5naXQ7YnJhbmNoPW14LTEuNCBcCisJICAgZmlsZTovL2ZpeC1idWlsZC1kaXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaCBcCisJICAiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbXgvbXgtd2lkZ2V0LmM7YmVnaW5saW5lPTg7ZW5kbGluZT0yMDttZDU9MTNiYmEzYzk3M2E3MjQxNGE3MDFlMWU4N2I1ZWU4NzkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXguaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkNsdXR0ZXIgYmFzZWQgVUkgd2lkZ2V0IGxpYnJhcnkiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorCitpbmhlcml0IGNsdXR0ZXIgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitERVBFTkRTID0gImNsdXR0ZXItMS4wIGRidXMtZ2xpYiBnZGstcGl4YnVmIgorCitTUkNfVVJJID0gImh0dHA6Ly9zb3VyY2UuY2x1dHRlci1wcm9qZWN0Lm9yZy9zb3VyY2VzL214LyR7QGdldF92ZXJkaXIoIiR7UFZ9Iil9L214LSR7UFZ9LnRhci54eiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uCQlcCisJICAgICAgICAtLWRpc2FibGUtZ3RrLWRvYwkJXAorCSAgICAgICAgLS1kaXNhYmxlLWd0ay13aWRnZXRzCQlcCisJCS0td2l0aC1kYnVzCQkJXAorCQktLXdpdGgtd2luc3lzPW5vbmUJCVwKKwkJLS13aXRob3V0LWNsdXR0ZXItaW1jb250ZXh0CVwKKwkJLS13aXRob3V0LWNsdXR0ZXItZ2VzdHVyZQlcCisJCS0td2l0aG91dC1zdGFydHVwLW5vdGlmaWNhdGlvbglcCisJCS0td2l0aG91dC1nbGFkZQkJCVwKKwkgICAgICAgIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjdlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIkNsdXR0ZXIgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKKworUFIgPSAicjYiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfS1jb3JlIFwKKyAgICAiCisKK1NVTU1BUllfJHtQTn0tY29yZSA9ICJDbHV0dGVyIGdyYXBoaWNzIGxpYnJhcnkiCitSREVQRU5EU18ke1BOfS1jb3JlID0gIlwKKyAgICBjbHV0dGVyLTEuMCBcCisgICAgY2x1dHRlci1nc3QtMy4wIFwKKyAgICBjbHV0dGVyLWd0ay0xLjAgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYzBhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWRpcmVjdGZiLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiRGlyZWN0RkIgd2l0aG91dCBYMTEiCitMSUNFTlNFID0gIk1JVCIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworVE9VQ0ggPSAnICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInRvdWNoc2NyZWVuIiwgInRzbGliIHRzbGliLWNhbGlicmF0ZSB0c2xpYi10ZXN0cyIsICIiLGQpfScKKworUkRFUEVORFNfJHtQTn0gPSAiIFwKKwkJZGlyZWN0ZmIgXAorCQlkaXJlY3RmYi1leGFtcGxlcyBcCisJCXBhbmdvIFwKKwkJcGFuZ28tbW9kdWxlcyBcCisJCWZvbnRjb25maWcgXAorCQkke1RPVUNIfSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkJhc2ljIFgxMSBzZXNzaW9uIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc2V0IHVwIGEgYmFzaWMgd29ya2luZyBYMTEgc2Vzc2lvbiIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjEiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiBtYXRjaGJveC13bQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS14MTEtdXRpbHMgXAorICAgIGRidXMgXAorICAgIHBvaW50ZXJjYWwgXAorICAgIG1hdGNoYm94LXRlcm1pbmFsIFwKKyAgICBtYXRjaGJveC13bSBcCisgICAgbWluaS14LXNlc3Npb24gXAorICAgIGxpYmVyYXRpb24tZm9udHMgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzZjFiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS14c2VydmVyLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiWDExIGRpc3BsYXkgc2VydmVyIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNDAiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiBYU0VSVkVSCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgeGY4Ni12aWRlby1mYmRldiB4Zjg2LWlucHV0LWV2ZGV2IgorWFNFUlZFUkNPREVDUyA/PSAiIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtYU0VSVkVSfSBcCisgICAgJHtYU0VSVkVSQ09ERUNTfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzdkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIKQEAgLTAsMCArMSwzNCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyNDAiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiB4MTEtY29tbW9uCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICIke1BOfSAke1BOfS11dGlscyIKKworIyB4c2VydmVyLWNvbW1vbiwgeDExLWNvbW1vbgorVklSVFVBTC1SVU5USU1FX3hzZXJ2ZXJfY29tbW9uID89ICJ4MTEtY29tbW9uIgorCisjIGVsc2EsIHhzZXJ2ZXItbm9kbS1pbml0CitWSVJUVUFMLVJVTlRJTUVfZ3JhcGhpY2FsX2luaXRfbWFuYWdlciA/PSAieHNlcnZlci1ub2RtLWluaXQiCisKK1NVTU1BUlkgPSAiWDExIGRpc3BsYXkgc2VydmVyIGFuZCBiYXNpYyB1dGlsaXRpZXMiCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgJHtQTn0teHNlcnZlciBcCisgICAgJHtQTn0tdXRpbHMgXAorICAgICIKKworU1VNTUFSWV8ke1BOfS11dGlscyA9ICJYMTEgYmFzaWMgdXRpbGl0aWVzIGFuZCBpbml0IgorUkRFUEVORFNfJHtQTn0tdXRpbHMgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX3hzZXJ2ZXJfY29tbW9ufSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfZ3JhcGhpY2FsX2luaXRfbWFuYWdlcn0gXAorICAgIHhhdXRoIFwKKyAgICB4aG9zdCBcCisgICAgeHNldCBcCisgICAgeHJhbmRyIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjBmZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvLmluYwpAQCAtMCwwICsxLDk5IEBACitTVU1NQVJZID0gIkZyYW1ld29yayBmb3IgbGF5b3V0IGFuZCByZW5kZXJpbmcgb2YgaW50ZXJuYXRpb25hbGl6ZWQgdGV4dCIKK0RFU0NSSVBUSU9OID0gIlBhbmdvIGlzIGEgbGlicmFyeSBmb3IgbGF5aW5nIG91dCBhbmQgcmVuZGVyaW5nIG9mIHRleHQsIFwKK3dpdGggYW4gZW1waGFzaXMgb24gaW50ZXJuYXRpb25hbGl6YXRpb24uIFBhbmdvIGNhbiBiZSB1c2VkIGFueXdoZXJlIFwKK3RoYXQgdGV4dCBsYXlvdXQgaXMgbmVlZGVkLCB0aG91Z2ggbW9zdCBvZiB0aGUgd29yayBvbiBQYW5nbyBzbyBmYXIgaGFzIFwKK2JlZW4gZG9uZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgR1RLKyB3aWRnZXQgdG9vbGtpdC4gUGFuZ28gZm9ybXMgdGhlIFwKK2NvcmUgb2YgdGV4dCBhbmQgZm9udCBoYW5kbGluZyBmb3IgR1RLKy0yLnguIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5wYW5nby5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMCsiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGZ0IgorREVQRU5EUyA9ICJnbGliLTIuMCBmb250Y29uZmlnIGZyZWV0eXBlIHpsaWIgdmlydHVhbC9saWJpY29udiBjYWlybyBoYXJmYnV6eiBxZW11LW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAncHRlc3QnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXhmdCwtLXdpdGhvdXQteGZ0LCR7WDExREVQRU5EU30iCitQQUNLQUdFQ09ORklHW3B0ZXN0XSA9ICItLWVuYWJsZS1pbnN0YWxsZWQtdGVzdHMsLS1kaXNhYmxlLWluc3RhbGxlZC10ZXN0cyxnbGliLTIuMC1uYXRpdmUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGNhaXJvLW5hdGl2ZSBoYXJmYnV6ei1uYXRpdmUiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wYW5nby1tb2R1bGUtLioiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBhbmdvLW1vZHVsZS1iYXNpYy1mYyIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYyBxZW11IHB0ZXN0CisKKyMgQ3JlYXRlIGEgcGFuZ28tbW9kdWxlcyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tbW9kdWxlcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1tb2R1bGVzIgorUlJFQ09NTUVORFNfJHtCUE59LW1vZHVsZXMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJwYW5nby1tb2R1bGUiKSAhPSAtMV0pfSIKKworCitFWFRSQV9BVVRPUkVDT05GID0gIiIKKworIyBzZWVtcyB0byBnbyB3cm9uZyB3aXRoIGRlZmF1bHQgY2ZsYWdzCitGVUxMX09QVElNSVpBVElPTl9hcm0gPSAiLU8yIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gXAorCQktLWVuYWJsZS1leHBsaWNpdC1kZXBzPW5vIFwKKwkgICAgICAgIC0tZGlzYWJsZS1kZWJ1ZyBcCisJICAgICAgICAtLXdpdGgtbWxwcmVmaXg9JHtNTFBSRUZJWH0iCisKK0xFQURfU09OQU1FID0gImxpYnBhbmdvLTEuMCoiCitMSUJWID0gIjEuOC4wIgorCitwYW5nb19wb3N0aW5zdCgpIHsKK2lmICEgWyAtZSAkRCR7c3lzY29uZmRpcn0vcGFuZ28gXSA7IHRoZW4KKwlta2RpciAtcCAkRCR7c3lzY29uZmRpcn0vcGFuZ28KK2ZpCisKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisJJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsJyR7YmluZGlyfS8ke01MUFJFRklYfXBhbmdvLXF1ZXJ5bW9kdWxlcycpfSBcCisJCSREJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8qLnNvIFwKKwkJPiAkRCR7c3lzY29uZmRpcn0vcGFuZ28vJHtNTFBSRUZJWH1wYW5nby5tb2R1bGVzIDI+L2Rldi9udWxsCisKKwlbICQ/IC1uZSAwIF0gJiYgZXhpdCAxCisKKwlzZWQgLWkgLWUgInM6JEQ6OiIgJEQke3N5c2NvbmZkaXJ9L3BhbmdvLyR7TUxQUkVGSVh9cGFuZ28ubW9kdWxlcworCisJZXhpdCAwCitlbHNlCisJJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzID4gL2V0Yy9wYW5nby8ke01MUFJFRklYfXBhbmdvLm1vZHVsZXMKK2ZpCit9CisKKyMgVGhpcyBiaW5hcnkgbmVlZHMgdG8gYmUgY29tcGlsZWQgZm9yIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gIFRoaXMgaXNuJ3QgcHJldHR5IQorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlpZiAke0BiYXNlX2NvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQltYWtlIENDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIiIEFNX0NQUEZMQUdTPSIkKHBrZy1jb25maWctbmF0aXZlIC0tY2ZsYWdzIGdsaWItMi4wKSIgZ2VuX2FsbF91bmljb2RlX0xEQUREPSIkKHBrZy1jb25maWctbmF0aXZlIC0tbGlicyBnbGliLTIuMCkiIC1DICR7Qn0vdGVzdHMgZ2VuLWFsbC11bmljb2RlCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7TUxQUkVGSVh9IiAhPSAiIiBdOyB0aGVuCisJCW12ICR7RH0vJHtiaW5kaXJ9L3BhbmdvLXF1ZXJ5bW9kdWxlcyAke0R9LyR7YmluZGlyfS8ke01MUFJFRklYfXBhbmdvLXF1ZXJ5bW9kdWxlcyAKKwlmaQorfQorCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBwYW5nb19wb3N0aW5zdCA9IGQuZ2V0VmFyKCJwYW5nb19wb3N0aW5zdCIsIFRydWUpCisKKyAgICBtb2R1bGVzX3Jvb3QgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcycpCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBtb2R1bGVzX3Jvb3QsICdecGFuZ28tKC4qKVwuc28kJywgJ3BhbmdvLW1vZHVsZS0lcycsICdQYW5nbyBtb2R1bGUgJXMnLCBwYW5nb19wb3N0aW5zdCkKK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wYW5nby8qICR7YmluZGlyfS8qICR7bGliZGlyfS9saWJwYW5nbyoke1NPTElCU30iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLyoubGEiCisKK0ZJTEVTXyR7UE59LXB0ZXN0ICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8qIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2luc3RhbGxlZC10ZXN0cy9wYW5nbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9pbnN0YWxsZWQtdGVzdHMvLmRlYnVnIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZ25vbWUtZGVza3RvcC10ZXN0aW5nIGxpYmVyYXRpb24tZm9udHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQxNGRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaApAQCAtMCwwICsxLDc1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCB0byBhcHBseSB0byBwYW5nby0xLjMyLjUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYyBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjCistLS0gcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYwkyMDEyLTEyLTA3IDA0OjQzOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMJMjAxMy0wMS0wOSAwODoyNzo0MC4zMjg1MTY3OTIgKzAyMDAKK0BAIC0yMTMsNiArMjEzLDExIEBACisKKyBBQ19TVUJTVChQQU5HT19ERUJVR19GTEFHUykKKworK0FDX0FSR19XSVRIKG1scHJlZml4LAorKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbWxwcmVmaXg9PEFSRz5dLCBbbXVsdGlsaWIgcHJlZml4XSksCisrICAgICAgICAgICAgbWxwcmVmaXhfc3RyPSR3aXRodmFsLCBtbHByZWZpeF9zdHI9IiIpCisrQUNfREVGSU5FX1VOUVVPVEVEKFtNTFBSRUZJWF0sIFsiJG1scHJlZml4X3N0ciJdLCBbbXVsdGlsaWIgcHJlZml4Ll0pCisrCisgQUNfQVJHX0VOQUJMRShyZWJ1aWxkcywKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXJlYnVpbGRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZSBhbGwgc291cmNlIGF1dG9nZW5lcmF0aW9uIHJ1bGVzXSldLCwKK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYyBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYwkyMDEyLTEyLTE3IDIwOjI3OjU2LjAwMDAwMDAwMCArMDIwMAorKysrIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMJMjAxMy0wMS0wOSAwODozMToxNi4zMzY1MTIwNTIgKzAyMDAKK0BAIC01NTUsMTEgKzU1NSwxMSBAQAorICAgICAgIGZpbGVzID0gZ19uZXcgKGNoYXIgKiwgMyk7CisKKyAgICAgICBmaWxlc1swXSA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9zeXNjb25mX3N1YmRpcmVjdG9yeSAoKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYW5nby5tb2R1bGVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJwYW5nby5tb2R1bGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgIGZpbGVzWzFdID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X2xpYl9zdWJkaXJlY3RvcnkgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfVkVSU0lPTiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGVzLmNhY2hlIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJtb2R1bGVzLmNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgIGZpbGVzWzJdID0gTlVMTDsKKyAgICAgfQorQEAgLTY3NCw3ICs2NzQsOCBAQAorICAgICAgIGlmICghbm9fbW9kdWxlX3dhcm5pbmcpCisJeworCSAgZ2NoYXIgKmZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X3N5c2NvbmZfc3ViZGlyZWN0b3J5ICgpLAorLQkJCQkJICAgICAgInBhbmdvLm1vZHVsZXMiLAorKy8qIEZvciBtdWx0aWxpYiBjYXNlLCBrZWVwIG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvciBkaWZmZXJlbnQgbGlicyAqLworKwkJCQkJICAgICAgTUxQUkVGSVggInBhbmdvLm1vZHVsZXMiLAorCQkJCQkgICAgICBOVUxMKTsKKwkgIGdfY3JpdGljYWwgKCJObyBtb2R1bGVzIGZvdW5kOlxuIgorCQkgICAgICAiTm8gYnVpbHRpbiBvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyB3ZXJlIGZvdW5kLlxuIgorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlaiBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlagorLS0tIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWoJMjAxMy0wMS0wOSAwODoyNzo0MC4zMjg1MTY3OTIgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKystLS0gcGFuZ28vbW9kdWxlcy5jCTIwMTAtMDktMjIgMDM6Mzc6MDEuMDAwMDAwMDAwICswODAwCisrKysrIHBhbmdvL21vZHVsZXMuYwkyMDEyLTA1LTA4IDIxOjIxOjAyLjAwMDAwMDAwMCArMDgwMAorK0BAIC01MjksNyArNTI5LDggQEAKKysKKysgICBpZiAoIWZpbGVfc3RyKQorKyAgICAgZmlsZV9zdHIgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfc3lzY29uZl9zdWJkaXJlY3RvcnkgKCksCisrLQkJCQkgInBhbmdvLm1vZHVsZXMiLAorKysvKiBGb3IgbXVsdGlsaWIgY2FzZSwga2VlcCBtdWx0aXBsZSBjb25maWcgZmlsZSBmb3IgZGlmZmVyZW50IGxpYnMgKi8KKysrCQkJCSBNTFBSRUZJWCAicGFuZ28ubW9kdWxlcyIsCisrIAkJCQkgTlVMTCk7CisrCisrICAgZmlsZXMgPSBwYW5nb19zcGxpdF9maWxlX2xpc3QgKGZpbGVfc3RyKTsKK2RpZmYgLU51cmQgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYworLS0tIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYwkyMDEyLTA4LTI4IDE1OjI3OjE4LjAwMDAwMDAwMCArMDMwMAorKysrIHBhbmdvLTEuMzIuNS9wYW5nby9xdWVyeW1vZHVsZXMuYwkyMDEzLTAxLTA5IDA4OjMxOjQ3LjgyODUxMTM1OSArMDIwMAorQEAgLTMwNCw3ICszMDQsNyBAQAorCisgICAgICAgY2FjaGVfZmlsZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9saWJfc3ViZGlyZWN0b3J5ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfVkVSU0lPTiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZXMuY2FjaGUiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTFBSRUZJWCAibW9kdWxlcy5jYWNoZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgIGVyciA9IE5VTEw7CisgICAgICAgaWYgKCFnX2ZpbGVfc2V0X2NvbnRlbnRzIChjYWNoZV9maWxlLCBjb250ZW50cy0+c3RyLCAtMSwgJmVycikpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTg3YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBwYW5nbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzYuOC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNDI1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nb18xLjM2LjguYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBwYW5nby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTciCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL211bHRpbGliLWZpeC1jbGVhbi5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjIxN2E5YTc1MzAwNjI3NTIxNWZhOWZhMTI3NzYwZWNlIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMThkYmI1MWI4YWUxMmJhZTBhYjdhOTU4ZTdjZjMzMTdjOWFjZmM4YTFlMTEwM2VjMmYxNDcxNjRhMGZjMmQwNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3Y2MwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0LzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK0Zyb20gZTQwZTBhMjVmOTk2ZDJlMjA1YzRiZGVjMmM4YTVjYzdmNzRlNTA2NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CitEYXRlOiBNb24sIDE1IEp1biAyMDE1IDE2OjI1OjMwIC0wMzAwCitTdWJqZWN0OiB0ZXN0czogRml4IG1pc3NpbmcgaW5jbHVkZSBvZiBYdXRpbC5oCisKK1RoZSBFR0wgdGVzdHMgcmVseSBvbiBYdXRpbC5oIGJlaW5nIGluY2x1ZGVkLiBTb21lIEVHTCBpbXBsZW1lbnRhdGlvbgorZG9lcyBub3QgZXhwbGl0bHkgaW5jbHVkZSBpdCBieSBkZWZhdWx0IGFuZCB0aGVuIHRoZSBidWlsZCBmYWlscy4KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK1Jldmlld2VkLWJ5OiBOZWlsIFJvYmVydHMgPG5laWxAbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYyBiL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKK2luZGV4IDA1MDRhMjYuLjE1NGI1NWMgMTAwNjQ0CistLS0gYS90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jCisrKysgYi90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jCitAQCAtMzIsNiArMzIsNyBAQAorIC8qIENodW5rcyBvZiBjb2RlIGluIHRoaXMgZmlsZSBhcmUgdGFrZW4gZnJvbSBlZ2wtdXRpbC5jICovCisgCisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CisrI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorIAorICNpbmNsdWRlICJwaWdsaXQtdXRpbC1nbC5oIgorICNpbmNsdWRlICJwaWdsaXQtdXRpbC1lZ2wuaCIKKy0tIAorY2dpdCB2MC4xMC4yCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4MjVjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIk9wZW5HTCBkcml2ZXIgdGVzdGluZyBmcmFtZXdvcmsiCitMSUNFTlNFID0gIk1JVCAmIExHUEx2MisgJiBHUEx2MyAmIEdQTHYyKyAmIEJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyYmVkZWQ3MTAzYTNkOGE0NDJhMmEwMzkxZDYwN2IwIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BpZ2xpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaCIKKworIyBGcm9tIDIwMTQvMTIvMDQKK1NSQ1JFViA9ICIxMjZjN2QwNDliOGYzMmU1NDE2MjVkNWEzNWZiYzVmNWU0ZTdmYmY4IgorIyAod2hlbiBQViBnb2VzIGFib3ZlIDEuMCByZW1vdmUgdGhlIHRyYWlsaW5nIHIpCitQViA9ICIxLjArZ2l0ciR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhyZW5kZXIgd2FmZmxlIHZpcnR1YWwvbGliZ2wgbGliZ2x1IHB5dGhvbi1tYWtvLW5hdGl2ZSBweXRob24tbnVtcHktbmF0aXZlIgorCitpbmhlcml0IGNtYWtlIHB5dGhvbm5hdGl2ZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbZnJlZWdsdXRdID0gIi1EUElHTElUX1VTRV9HTFVUPTEsLURQSUdMSVRfVVNFX0dMVVQ9MCxmcmVlZ2x1dCwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZnJlZWdsdXQnLCAneWVzJywgJ25vJywgZCl9IiA9ICJubyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgIi9eIy4qaW5jbHVkZSA8R0xcL2ZyZWVnbHV0X2V4dC5oPiQvZCIgJHtTfS9zcmMvcGlnbGl0L2dsdXRfd3JhcC5oCisgICAgICAgIHNlZCAtaSAtZSAiL14jLippbmNsdWRlLio8R0xcL2dsdXQuaD4kL2QiICR7U30vc3JjL3BpZ2xpdC9nbHV0X3dyYXAuaAorICAgZmkKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGlnbGl0LyovLmRlYnVnLyIKKworUkRFUEVORFNfJHtQTn0gPSAid2FmZmxlIHB5dGhvbiBweXRob24tbWFrbyBweXRob24tanNvbiBweXRob24tc3VicHJvY2VzcyBcCisJcHl0aG9uLWFyZ3BhcnNlIHB5dGhvbi1pbXBvcnRsaWIgcHl0aG9uLXVuaXhhZG1pbiBcCisJcHl0aG9uLW11bHRpcHJvY2Vzc2luZyBweXRob24tdGV4dHV0aWxzIHB5dGhvbi1uZXRzZXJ2ZXIgcHl0aG9uLXNoZWxsIFwKKwltZXNhLWRlbW9zIGJhc2ggXAorCSIKKworSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2svcG9uZy1jbG9jay1uby1mbGlja2VyLmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2ViYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrL3BvbmctY2xvY2stbm8tZmxpY2tlci5jCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogUG9uZyBDbG9jayAtIEEgY2xvY2sgdGhhdCBwbGF5cyBwb25nLiAKKyAqICAgICAgICAgICAgIFNlZSBodHRwOi8vbW9jb2xvY28uY29tL2FyY2hpdmVzLzAwMTc2Ni5waHAgZm9yIHRoZSBpbnNwaXJhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWF0dGhldyBBbGx1bQorICoKKyAqIEF1dGhvcjogTWF0dGhldyBBbGx1bSBtYWxsdW1Ab3BlbmVkaGFuZC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hhdG9tLmg+CisKKy8qIFR3ZWFrIHZhbHVlcyBmb3IgZGlmZmVyZW50IGh3IHNldHVwcyAqLworCisjZGVmaW5lIEZQUyAgICAgICAgICA1MAorI2RlZmluZSBSRVNYICAgICAgICAgNDAKKyNkZWZpbmUgUkVTWSAgICAgICAgIDQwCisjZGVmaW5lIFRPX01JU1NfU0VDUyA1NQorI2RlZmluZSBCQUxMRFggICAgICAgMTYKKyNkZWZpbmUgQkFMTERZICAgICAgIDQKKworCit0eXBlZGVmIHN0cnVjdCBQb25nQ2xvY2sKK3sKKyAgRGlzcGxheSAqeGRweTsKKyAgaW50ICAgICAgeHNjcmVlbjsKKyAgV2luZG93ICAgeHdpbiwgeHdpbl9yb290OworICBQaXhtYXAgICBiYWNrYnVmZmVyOworICBHQyAgICAgICB4Z2M7CisgIGludCAgICAgIHh3aW5fd2lkdGgsIHh3aW5faGVpZ2h0OworICBpbnQgICAgICBwaXhlbHcsIHBpeGVsaDsKKworICBpbnQgICAgICBiYWxsX3gsIGJhbGxfeSwgYmFsbF9keCwgYmFsbF9keTsKKyAgaW50ICAgICAgYmF0YV95LCBiYXRiX3k7CisgIEJvb2wgICAgIGJhdGFfdG9fbWlzcywgYmF0Yl90b19taXNzOworCit9IAorUG9uZ0Nsb2NrOworCit2b2lkCitnZXRfdGltZShpbnQgKmhvdXIsIGludCAqbWluLCBpbnQgKnNlYykKK3sKKyAgc3RydWN0IHRpbWV2YWwgICB0djsKKyAgc3RydWN0IHRtICAgICAgICpsb2NhbFRpbWUgPSBOVUxMOyAKKyAgdGltZV90ICAgICAgICAgICBhY3R1YWxUaW1lOworCisgIGdldHRpbWVvZmRheSgmdHYsIDApOworICBhY3R1YWxUaW1lID0gdHYudHZfc2VjOworICBsb2NhbFRpbWUgPSBsb2NhbHRpbWUoJmFjdHVhbFRpbWUpOworCisgIGlmIChob3VyKQorICAgICpob3VyID0gbG9jYWxUaW1lLT50bV9ob3VyOworICAKKyAgaWYgKG1pbikKKyAgICAqbWluICA9IGxvY2FsVGltZS0+dG1fbWluOworCisgIGlmIChzZWMpCisgICAgKnNlYyAgPSBsb2NhbFRpbWUtPnRtX3NlYzsKK30KKwordm9pZAorZHJhd19yZWN0IChQb25nQ2xvY2sgKnBvbmdfY2xvY2ssIAorCSAgIGludCAgICAgICAgeCwKKwkgICBpbnQgICAgICAgIHksCisJICAgaW50ICAgICAgICB3aWR0aCwKKwkgICBpbnQgICAgICAgIGhlaWdodCkKK3sKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgeCAqIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICB5ICogcG9uZ19jbG9jay0+cGl4ZWxoLAorCQkgIHdpZHRoICogcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIGhlaWdodCAqIHBvbmdfY2xvY2stPnBpeGVsaCk7Cit9CisKK3ZvaWQKK2RyYXdfZmllbGQgKFBvbmdDbG9jayAqcG9uZ19jbG9jaykKK3sKKyAgaW50IGk7CisKKyAgZHJhd19yZWN0IChwb25nX2Nsb2NrLCAwLCAwLCBSRVNYKzEsIDEpOyAgCisgIGRyYXdfcmVjdCAocG9uZ19jbG9jaywgMCwgUkVTWS0xLCBSRVNYKzEsIDEpOyAgCisKKyAgZm9yIChpPTA7IGkgPCBSRVNZLzI7IGkrKykKKyAgICBkcmF3X3JlY3QgKHBvbmdfY2xvY2ssIChSRVNYLzIpLTEsIGkqMiwgMiwgMSk7ICAKK30KKwordm9pZAorZHJhd19kaWdpdCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrLCAKKwkgICAgaW50ICAgICAgICB4LAorCSAgICBpbnQgICAgICAgIHksCisJICAgIGludCAgICAgICAgZGlnaXQpCit7CisgIGludCBkaWdpdHNbXSA9IHsgMHgxZjhjNjNmLCAweDFmMjEwODYsIDB4MWYwZmUxZiwgMHgxZjg3ZTFmLCAweDEwODdlMzEsCisJCSAgIDB4MWY4N2MzZiwgMHgxZjhmYzNmLCAweDg0NDIxZiwgIDB4MWY4ZmUzZiwgMHgxMDg3ZTNmIH07CisKKyAgWFJlY3RhbmdsZSByZWN0c1s1KjVdOworICBpbnQgaSxqLGs7CisKKyAgaSA9IDA7CisKKyAgZm9yIChrPTA7IGs8NTsgaysrKSAKKyAgICBmb3IgKGo9MDsgajw1OyBqKyspCQorICAgICAgaWYgKGRpZ2l0c1tkaWdpdF0gJiAoMSA8PCAoKGsqNSkraikpKQorCXsKKwkgIHJlY3RzW2ldLnggICAgICA9ICh4ICsgaikgKiBwb25nX2Nsb2NrLT5waXhlbHc7IAorCSAgcmVjdHNbaV0ueSAgICAgID0gKHkgKyBrKSAqIHBvbmdfY2xvY2stPnBpeGVsaDsgCisJICByZWN0c1tpXS53aWR0aCAgPSBwb25nX2Nsb2NrLT5waXhlbHc7CisJICByZWN0c1tpXS5oZWlnaHQgPSBwb25nX2Nsb2NrLT5waXhlbGg7ICAKKwkgIGkrKzsKKwl9CisKKyAgWEZpbGxSZWN0YW5nbGVzIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgIHJlY3RzLCBpKTsKK30gCisKK3ZvaWQKK2RyYXdfdGltZSAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgaG91ciwgbWluOworCisgIGdldF90aW1lKCZob3VyLCAmbWluLCBOVUxMKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSAtIDE0LAorCSAgICAgIDUsCisJICAgICAgaG91ciAvIDEwICk7CisKKyAgZHJhd19kaWdpdCAocG9uZ19jbG9jaywgCisJICAgICAgKFJFU1gvMikgLSA4LAorCSAgICAgIDUsCisJICAgICAgaG91ciAlIDEwICk7CisKKyAgZHJhd19kaWdpdCAocG9uZ19jbG9jaywgCisJICAgICAgKFJFU1gvMikgKyAzLAorCSAgICAgIDUsCisJICAgICAgbWluIC8gMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSArIDksCisJICAgICAgNSwKKwkgICAgICBtaW4gJSAxMCApOworfQorCit2b2lkCitkcmF3X2JhdF9hbmRfYmFsbCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICAvKiBiYWxsICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgcG9uZ19jbG9jay0+YmFsbF94LAorCQkgIHBvbmdfY2xvY2stPmJhbGxfeSwKKwkJICBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgcG9uZ19jbG9jay0+cGl4ZWxoKTsKKworICAvKiBiYXQgYSAqLworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIDAsCisJCSAgcG9uZ19jbG9jay0+YmF0YV95IC0gKDIgKiBwb25nX2Nsb2NrLT5waXhlbGgpLAorCQkgIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBwb25nX2Nsb2NrLT5waXhlbGggKiA1KTsKKworICAvKiBiYXQgYiAqLworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIChwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3KSwKKwkJICBwb25nX2Nsb2NrLT5iYXRiX3kgLSAoMiAqIHBvbmdfY2xvY2stPnBpeGVsaCksCisJCSAgcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsaCAqIDUpOworCit9CisKK3ZvaWQKK3VwZGF0ZV9zdGF0ZSAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgc2VjLCBtaW4sIGhvdXI7CisKKyAgZ2V0X3RpbWUoJmhvdXIsICZtaW4sICZzZWMpOworCisgIC8qIENoZWNrIGJhbGwgaXMgb24gZmllbGQgYW5kIG5vIG9uZXMgZHVlcyB0byBtaXNzIGEgc2hvdC4KKyAgKi8KKyAgaWYgKCAocG9uZ19jbG9jay0+YmFsbF94IDwgMCAmJiAhcG9uZ19jbG9jay0+YmF0YV90b19taXNzKSAKKyAgICAgIHx8IChwb25nX2Nsb2NrLT5iYWxsX3ggPiAocG9uZ19jbG9jay0+eHdpbl93aWR0aCAtIHBvbmdfY2xvY2stPnBpeGVsdykKKwkgICYmICFwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MpICkKKyAgICBwb25nX2Nsb2NrLT5iYWxsX2R4ICo9IC0xOworCisgIGlmICgocG9uZ19jbG9jay0+YmFsbF95IDwgcG9uZ19jbG9jay0+cGl4ZWxoKQorICAgICAgfHwgcG9uZ19jbG9jay0+YmFsbF95ID4gKHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC0gKDIqcG9uZ19jbG9jay0+cGl4ZWxoKSkpCisgICAgcG9uZ19jbG9jay0+YmFsbF9keSAqPSAtMTsgCisKKyAgcG9uZ19jbG9jay0+YmFsbF94ICs9IHBvbmdfY2xvY2stPmJhbGxfZHg7CisgIHBvbmdfY2xvY2stPmJhbGxfeSArPSBwb25nX2Nsb2NrLT5iYWxsX2R5OworCisgIC8qIFNldCB1cCBzb21lb25lIHRvIG1pc3MgaWYgd2UgZ2V0dGluZyBjbG9zZSB0byBhbiBob3VyIG9yIG1pbi4gCisgICAqLworICBpZiAoc2VjID4gVE9fTUlTU19TRUNTKQorICAgIHsKKyAgICAgIGlmIChtaW4gPT0gNTkpCisJcG9uZ19jbG9jay0+YmF0Yl90b19taXNzID0gVHJ1ZTsJCisgICAgICBlbHNlCisJcG9uZ19jbG9jay0+YmF0YV90b19taXNzID0gVHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBSZXNldCB0aGUgZ2FtZSAqLworICAgICAgaWYgKHBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcykKKwl7CisJICBwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MgPSBGYWxzZTsKKwkgIHBvbmdfY2xvY2stPmJhbGxfeSA9IHBvbmdfY2xvY2stPmJhdGFfeTsgCisJICBwb25nX2Nsb2NrLT5iYWxsX3ggPSBwb25nX2Nsb2NrLT5waXhlbHc7IAorCSAgcG9uZ19jbG9jay0+YmFsbF9keCAqPSAtMTsKKwl9CisKKyAgICAgIGlmIChwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MpCisJeworCSAgcG9uZ19jbG9jay0+YmF0Yl90b19taXNzID0gRmFsc2U7CisJICBwb25nX2Nsb2NrLT5iYWxsX3kgPSBwb25nX2Nsb2NrLT5iYXRiX3k7IAorCSAgcG9uZ19jbG9jay0+YmFsbF94ID0gcG9uZ19jbG9jay0+eHdpbl93aWR0aCAtIHBvbmdfY2xvY2stPnBpeGVsdzsKKwkgIHBvbmdfY2xvY2stPmJhbGxfZHggKj0gLTE7IAorCX0KKyAgICB9CisKKyAgLyogS2VlcCBiYXRzIG9uIGZpZWxkIGFuZCBvbmx5IG1vdmUgaW4gbm90IHNldHVwIHRvIG1pc3MgKi8KKyAgaWYgKHBvbmdfY2xvY2stPmJhbGxfeSA+PSAoMypwb25nX2Nsb2NrLT5waXhlbGgpCisgICAgICAmJiBwb25nX2Nsb2NrLT5iYWxsX3kgPD0gIChwb25nX2Nsb2NrLT54d2luX2hlaWdodCAtICg1KnBvbmdfY2xvY2stPnBpeGVsaCkpKQorICB7CisgICAgaWYgKCFwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MpIAorICAgICAgcG9uZ19jbG9jay0+YmF0Yl95ID0gcG9uZ19jbG9jay0+YmFsbF95OworCisgICAgaWYgKCFwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MpCisgICAgICBwb25nX2Nsb2NrLT5iYXRhX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisgIH0KK30KKwordm9pZAorZHJhd19mcmFtZSAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICB1cGRhdGVfc3RhdGUgKHBvbmdfY2xvY2spOworCisgIC8qIENsZWFyIHBsYXlmaWVsZCAqLworICBYU2V0Rm9yZWdyb3VuZCAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgQmxhY2tQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIFhGaWxsUmVjdGFuZ2xlIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIDAsIDAsCisJCSAgcG9uZ19jbG9jay0+eHdpbl93aWR0aCwgCisJCSAgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQpOworCisgIFhTZXRGb3JlZ3JvdW5kIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBXaGl0ZVBpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgZHJhd19maWVsZCAocG9uZ19jbG9jayk7CisKKyAgZHJhd190aW1lIChwb25nX2Nsb2NrKTsKKworICBkcmF3X2JhdF9hbmRfYmFsbCAocG9uZ19jbG9jayk7CisKKyAgLyogZmxpcCAnYmFja2J1ZmZlcicgKi8KKyAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAgKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgcG9uZ19jbG9jay0+eHdpbiwKKwkJCSAgICAgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIpOworICBYQ2xlYXJXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbik7CisKKyAgWFN5bmMocG9uZ19jbG9jay0+eGRweSwgRmFsc2UpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgWEdDVmFsdWVzICBnY3Y7CisgIEF0b20gICAgICAgYXRvbXNfV0lORE9XX1NUQVRFLCBhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTjsKKyAgUG9uZ0Nsb2NrICpwb25nX2Nsb2NrOworCisgIHBvbmdfY2xvY2sgPSBtYWxsb2Moc2l6ZW9mKFBvbmdDbG9jaykpOworICBtZW1zZXQocG9uZ19jbG9jaywgMCwgc2l6ZW9mKFBvbmdDbG9jaykpOworCisgIGlmICgocG9uZ19jbG9jay0+eGRweSA9IFhPcGVuRGlzcGxheShnZXRlbnYoIkRJU1BMQVkiKSkpID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjb25uZWN0IHRvIFggc2VydmVyIG9uIGRpc3BsYXkgJXMuIiwKKwkgICAgZ2V0ZW52KCJESVNQTEFZIikpOworICAgIGV4aXQoLTEpOworICB9CisKKyAgcG9uZ19jbG9jay0+eHNjcmVlbiAgICAgPSBEZWZhdWx0U2NyZWVuKHBvbmdfY2xvY2stPnhkcHkpOworICBwb25nX2Nsb2NrLT54d2luX3Jvb3QgICA9IERlZmF1bHRSb290V2luZG93KHBvbmdfY2xvY2stPnhkcHkpOworICBwb25nX2Nsb2NrLT54d2luX3dpZHRoICA9IERpc3BsYXlXaWR0aChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBwb25nX2Nsb2NrLT54d2luX2hlaWdodCA9IERpc3BsYXlIZWlnaHQocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSAgcG9uZ19jbG9jay0+eHNjcmVlbik7CisKKyAgcG9uZ19jbG9jay0+cGl4ZWx3ICA9IHBvbmdfY2xvY2stPnh3aW5fd2lkdGggIC8gUkVTWDsKKyAgcG9uZ19jbG9jay0+cGl4ZWxoICA9IHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC8gUkVTWTsKKworICBwb25nX2Nsb2NrLT5iYWxsX3ggPSAwOyAKKyAgcG9uZ19jbG9jay0+YmFsbF95ID0gcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLyAyOyAKKworICBwb25nX2Nsb2NrLT5iYWxsX2R4ID0gQkFMTERYOyAKKyAgcG9uZ19jbG9jay0+YmFsbF9keSA9IEJBTExEWTsgCisKKyAgcG9uZ19jbG9jay0+YmF0Yl95ID0gcG9uZ19jbG9jay0+YmF0YV95ID0gcG9uZ19jbG9jay0+YmFsbF95OworCisgIGdjdi5iYWNrZ3JvdW5kID0gQmxhY2tQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBnY3YuZm9yZWdyb3VuZCA9IFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKyAgZ2N2LmdyYXBoaWNzX2V4cG9zdXJlcyA9IEZhbHNlOworCisgIHBvbmdfY2xvY2stPnhnYyA9IFhDcmVhdGVHQyAocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbl9yb290LCAKKwkJCSAgICAgICBHQ0ZvcmVncm91bmR8R0NCYWNrZ3JvdW5kfEdDR3JhcGhpY3NFeHBvc3VyZXMsCisJCQkgICAgICAgJmdjdik7CisKKyAgYXRvbXNfV0lORE9XX1NUQVRFCisgICAgPSBYSW50ZXJuQXRvbShwb25nX2Nsb2NrLT54ZHB5LCAiX05FVF9XTV9TVEFURSIsRmFsc2UpOworICBhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTgorICAgID0gWEludGVybkF0b20ocG9uZ19jbG9jay0+eGRweSwgIl9ORVRfV01fU1RBVEVfRlVMTFNDUkVFTiIsRmFsc2UpOworCisgIHBvbmdfY2xvY2stPnh3aW4gPSBYQ3JlYXRlU2ltcGxlV2luZG93KHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9yb290LCAKKwkJCQkJIDAsIDAsCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0LCAKKwkJCQkJIDAsCisJCQkJCSBXaGl0ZVBpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pLAorCQkJCQkgQmxhY2tQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJCSAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciA9IFhDcmVhdGVQaXhtYXAocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3Jvb3QsCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0LCAKKwkJCQkJIERlZmF1bHREZXB0aChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBYU2VsZWN0SW5wdXQocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbiwgS2V5UHJlc3NNYXNrKTsKKyAgCisKKyAgLyogU2V0IHRoZSBoaW50cyBmb3IgZnVsbHNjcmVlbiAqLworICBYQ2hhbmdlUHJvcGVydHkocG9uZ19jbG9jay0+eGRweSwgCisJCSAgcG9uZ19jbG9jay0+eHdpbiwgCisJCSAgYXRvbXNfV0lORE9XX1NUQVRFLCAKKwkJICBYQV9BVE9NLCAKKwkJICAzMiwgCisJCSAgUHJvcE1vZGVSZXBsYWNlLCAKKwkJICAodW5zaWduZWQgY2hhciAqKSAmYXRvbXNfV0lORE9XX1NUQVRFX0ZVTExTQ1JFRU4sIDEpOworCisgIFhNYXBXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgcG9uZ19jbG9jay0+eHdpbik7CisgIAorICB3aGlsZSAoVHJ1ZSkgCisgICAgeworICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICAgIFhFdmVudCAgICAgICAgIHhldjsKKworICAgICAgdGltZW91dC50dl9zZWMgID0gMDsKKyAgICAgIHRpbWVvdXQudHZfdXNlYyA9IDEwMDAwMDAgLyBGUFM7IAorICAgICAgc2VsZWN0ICgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdGltZW91dCk7CisKKyAgICAgIGRyYXdfZnJhbWUgKHBvbmdfY2xvY2spOworCisgICAgICBYRmx1c2gocG9uZ19jbG9jay0+eGRweSk7CisKKyAgICAgIGlmIChYUGVuZGluZyhwb25nX2Nsb2NrLT54ZHB5KSkKKwl7CisJICBpZiAoWENoZWNrTWFza0V2ZW50KHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgS2V5UHJlc3NNYXNrLAorCQkJICAgICAgJnhldikpCisJICAgIGV4aXQoLTEpOworCX0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMWE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcG9uZy1jbG9jay9wb25nLWNsb2NrXzEuMC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkEgY2xvY2sgY29tYmluZWQgd2l0aCBhIGdhbWUgb2YgcG9uZyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSB4ZG1jcCB4YXUiCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL3BvbmctY2xvY2stbm8tZmxpY2tlci5jIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1kZDI0OGQ1MGY3M2Y3NDZkMWVlNzg1ODZiMGIyZWJkMyIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlICgpIHsKKwkke0NDfSAtbyBwb25nLWNsb2NrIHBvbmctY2xvY2stbm8tZmxpY2tlci5jIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyB4MTEgeGF1IHhkbWNwYAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgcG9uZy1jbG9jayAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NmYyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkwOTddCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluCistLS0gc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4JMjAxMS0wNS0xNiAxNzoyOToyMC4wMDAwMDAwMDAgKzAzMDAKKysrKyBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTA3IDA2OjAwOjQ4LjkyMTkwNTQwOSArMDIwMAorQEAgLTMsNyArMyw3IEBACisgQUNfQ09ORklHX1NSQ0RJUihsaWJzbi9zbi1sYXVuY2hlZS5jKQorCisgQU1fSU5JVF9BVVRPTUFLRQorLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisKKyAjIEhvbm9yIGFjbG9jYWwgZmxhZ3MKKyBBQ19TVUJTVChBQ0xPQ0FMX0FNRkxBR1MsICJcJHtBQ0xPQ0FMX0ZMQUdTfSIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb25fMC4xMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWI5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvc3RhcnR1cC1ub3RpZmljYXRpb24vc3RhcnR1cC1ub3RpZmljYXRpb25fMC4xMi5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkVuYWJsZXMgbW9uaXRvcmluZyBhbmQgZGlzcGxheSBvZiBhcHBsaWNhdGlvbiBzdGFydHVwIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zdGFydHVwLW5vdGlmaWNhdGlvbi8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVNwZWNpZmljYXRpb25zIgorCisjIG1vc3QgZmlsZXMgYXJlIHVuZGVyIE1JVCwgYnV0IGxpYnNuL3NuLXV0aWwuYyBpcyB1bmRlciBMR1BMLCB0aGUKKyMgZWZmZWN0aXZlIGxpY2Vuc2UgaXMgTEdQTAorTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTJhZTJjZDQ3ZDZkMmYyMzg0MTBmNTM2NGRmYmMwZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlic24vc24tdXRpbC5jO2VuZGxpbmU9MTg7bWQ1PTE4YTE0ZGMxODI1ZDM4ZTc0MWQ3NzIzMTFmZWE5ZWUxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYnNuL3NuLWNvbW1vbi5oO2VuZGxpbmU9MjM7bWQ1PTZkMDViYzBlYmRjZjU1MTNhNmU3N2NiMjZlOGNkN2UyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3QvdGVzdC1ib2lsZXJwbGF0ZS5oO2VuZGxpbmU9MjM7bWQ1PTkyM2U3MDZiMmE3MDU4NjE3NmVlYWQyNjFjYzViYjk4IgorCitQUiA9ICJyMiIKKworU0VDVElPTiA9ICJsaWJzIgorCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlic20geGNiLXV0aWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zdGFydHVwLW5vdGlmaWNhdGlvbi9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyY2Q3NzMyNmQ0ZGNhZWQ5YTVhMjNhMTIzMmZiMzhlOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzYzM5MWY3ZTkzMGM1ODMwOTUwNDVjZDJkMTBlYjczYTY0ZjA4NWM3ZmRlOWQyNjBmMjY1MmM3Y2IzY2ZiZTRhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBkYTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzLmNvbmYKQEAgLTAsMCArMSwyNSBAQAorIyBVbmNvbW1lbnQgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBsaW51eCBpbnB1dCBsYXllciBldmVudCBpbnRlcmZhY2UKK21vZHVsZV9yYXcgaW5wdXQKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgU2hhcnAgWmF1cnVzIFNMLTU1MDAvU0wtNTAwMGQKKyMgbW9kdWxlX3JhdyBjb2xsaWUKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgU2hhcnAgWmF1cnVzIFNMLUM3MDAvQzc1MC9DNzYwL0M4NjAKKyMgbW9kdWxlX3JhdyBjb3JnaQorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBkZXZpY2Ugd2l0aCBhIFVDQjEyMDAvMTMwMC8xNDAwIFRTIGludGVyZmFjZQorIyBtb2R1bGVfcmF3IHVjYjF4MDAKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGFuIEhQIGlQYXEgaDM2MDAgb3Igc2ltaWxhcgorIyBtb2R1bGVfcmF3IGgzNjAwCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIEhpdGFjaGkgV2VicGFkCisjIG1vZHVsZV9yYXcgbWs3MTIKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGFuIElCTSBBcmN0aWMgSUkKKyMgbW9kdWxlX3JhdyBhcmN0aWMyCisKK21vZHVsZSBwdGhyZXMgcG1pbj0xCittb2R1bGUgdmFyaWFuY2UgZGVsdGE9MzAKK21vZHVsZSBkZWppdHRlciBkZWx0YT0xMDAKK21vZHVsZSBsaW5lYXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90c2xpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY4ZThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzbGliLnNoCkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK2lmIFsgLWUgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAgXTsgdGhlbgorICAgIFRTTElCX1RTREVWSUNFPS9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wCisKKyAgICBleHBvcnQgVFNMSUJfVFNERVZJQ0UKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGM3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWJfMS4xLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiQW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRvdWNoc2NyZWVuIHBhbmVsIGV2ZW50cyIKK0RFU0NSSVBUSU9OID0gIlRzbGliIGlzIGFuIGFic3RyYWN0aW9uIGxheWVyIGZvciB0b3VjaHNjcmVlbiBwYW5lbCBcCitldmVudHMsIGFzIHdlbGwgYXMgYSBmaWx0ZXIgc3RhY2sgZm9yIHRoZSBtYW5pcHVsYXRpb24gb2YgdGhvc2UgZXZlbnRzLiBcCitUc2xpYiBpcyBnZW5lcmFsbHkgdXNlZCBvbiBlbWJlZGRlZCBkZXZpY2VzIHRvIHByb3ZpZGUgYSBjb21tb24gdXNlciBcCitzcGFjZSBpbnRlcmZhY2UgdG8gdG91Y2hzY3JlZW4gZnVuY3Rpb25hbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8vdHNsaWIuYmVybGlvcy5kZS8iCisKK0FVVEhPUiA9ICJSdXNzZWxsIEtpbmcgdy8gcGx1Z2lucyBieSBDaHJpcyBMYXJzb24gZXQuIGFsLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjMwYTk3MTZlZjM3NjJlMzQ2N2EyZjYyYmY3OTBmMGEiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tL2tlcmdvdGgvdHNsaWIvcmVsZWFzZXMvZG93bmxvYWQvJHtQVn0vdHNsaWItJHtQVn0udGFyLnh6O2Rvd25sb2FkZmlsZW5hbWU9dHNsaWItJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3RzLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vdHNsaWIuc2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTQ3NzFmODYwN2IzNDFiYjRiMjk3ODE5ZDM3ZTgzN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmUzNWU1ZjcxMGVhOTMzYjExOGY3MTBlMmNlNDQwM2FjMDc2ZmU2OTkyNmI1NzAzMzM4NjdkNGRlMDgyYTUxYyIKKworCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXNoYXJlZCAtLWRpc2FibGUtaDM2MDAgLS1lbmFibGUtaW5wdXQgLS1kaXNhYmxlLWNvcmdpIC0tZGlzYWJsZS1jb2xsaWUgLS1kaXNhYmxlLW1rNzEyIC0tZGlzYWJsZS1hcmN0aWMyIC0tZGlzYWJsZS11Y2IxeDAwIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdHMuY29uZiAke1N9L2V0Yy90cy5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3RzbGliLnNoICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KK30KKworIyBQZW9wbGUgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHVkZXYncyAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBzeW1saW5rCisjIGluc3RlYWQgb2YgZGV0ZWN0LXN0eWx1cworI1JERVBFTkRTX3RzbGliLWNvbmZfd2VpcmQtbWFjaGluZSA9ICJkZXRlY3Qtc3R5bHVzIgorUlBST1ZJREVTX3RzbGliLWNvbmYgPSAibGlidHMtMC4wLWNvbmYiCisKK1BBQ0tBR0VTID0rICJ0c2xpYi1jb25mIHRzbGliLXRlc3RzIHRzbGliLWNhbGlicmF0ZSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLWNvbmYgPSAiMSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLXRlc3RzID0gIjEiCitERUJJQU5fTk9BVVRPTkFNRV90c2xpYi1jYWxpYnJhdGUgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAidHNsaWItY29uZiIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBvaW50ZXJjYWwiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RzLy5kZWJ1ZyoiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90cy8qLmxhIgorRklMRVNfdHNsaWItY29uZiA9ICIke3N5c2NvbmZkaXJ9L3RzLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvdHNsaWIuc2ggJHtkYXRhZGlyfS90c2xpYiIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLiogJHtsaWJkaXJ9L3RzLyouc28qIgorRklMRVNfdHNsaWItY2FsaWJyYXRlICs9ICIke2JpbmRpcn0vdHNfY2FsaWJyYXRlIgorRklMRVNfdHNsaWItdGVzdHMgPSAiJHtiaW5kaXJ9L3RzX2hhcnZlc3QgJHtiaW5kaXJ9L3RzX3ByaW50ICR7YmluZGlyfS90c19wcmludF9yYXcgJHtiaW5kaXJ9L3RzX3Rlc3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHMvMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHMvMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwOTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250cy8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZgpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPgorPGZvbnRjb25maWc+CisJPGFsaWFzPgorCQk8ZmFtaWx5PnNhbnMtc2VyaWY8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gU2FuczwvZmFtaWx5PjwvYWNjZXB0PgorCTwvYWxpYXM+CisJPGFsaWFzPgorCQk8ZmFtaWx5PnNlcmlmPC9mYW1pbHk+CisJCTxhY2NlcHQ+PGZhbWlseT5MaWJlcmF0aW9uIFNlcmlmPC9mYW1pbHk+PC9hY2NlcHQ+CisJPC9hbGlhcz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+CisJCTxhY2NlcHQ+PGZhbWlseT5MaWJlcmF0aW9uIE1vbm88L2ZhbWlseT48L2FjY2VwdD4KKwk8L2FsaWFzPgorPC9mb250Y29uZmlnPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE4MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzXzEuMDQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJMaWJlcmF0aW9uKHRtKSBGb250cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaWJlcmF0aW9uKHRtKSBGb250cyBpcyBhIGZvbnQgZmFtaWx5IG9yaWdpbmFsbHkgXAorY3JlYXRlZCBieSBBc2NlbmRlcihjKSB3aGljaCBhaW1zIGF0IG1ldHJpYyBjb21wYXRpYmlsaXR5IHdpdGggXAorQXJpYWwsIFRpbWVzIE5ldyBSb21hbiwgQ291cmllciBOZXcuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xpYmVyYXRpb24tZm9udHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICIyLnggZGVwZW5kcyBvbiBmb250Zm9yZ2UgcGFja2FnZSwgd2hpY2ggaXMgbm90IHlldCBwcm92aWRlZCBpbiBvZS1jb3JlIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK1BSID0gInI0IgorUEUgPSAiMSIKKworaW5oZXJpdCBhbGxhcmNoIGZvbnRjYWNoZQorCitGT05UX1BBQ0tBR0VTID0gIiR7UE59IgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGliZXJhdGlvbi1mb250cy9saWJlcmF0aW9uLWZvbnRzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ4NDY3OTdlZjBmYzcwYjBjYmFlZGUyNTE0Njc3YzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlMGQwOTU3Yzg1Yjc1ODU2MWEzZDRhZWY0ZWJjZDJjMzk5NTllNTMyODQyOWQ5NmFlMTA2MjQ5ZDgzNTMxYTEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvdHRmLworCWZvciBpIGluICoudHRmOyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9mb250cy90dGYvJHtpfQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9LzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzL2NvbmYuZC8KKworCWluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LworCWluc3RhbGwgLW0gMDY0NCBMaWNlbnNlLnR4dCAke0R9JHtkYXRhZGlyfS9kb2MvJHtCUE59LworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL3R0Zi1iaXRzdHJlYW0tdmVyYV8xLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU0Y2VmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy90dGYtYml0c3RyZWFtLXZlcmFfMS4xMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRoZSBCaXRzdHJlYW0gVmVyYSBmb250cyAtIFRURiBFZGl0aW9uIgorREVTQ1JJUFRJT04gPSAiVGhlIEJpdHN0cmVhbSBWZXJhIGZvbnRzIGluY2x1ZGUgZm91ciBtb25vc3BhY2UgYW5kIHNhbnMgXAorZmFjZXMgKG5vcm1hbCwgb2JsaXF1ZSwgYm9sZCwgYm9sZCBvYmxpcXVlKSBhbmQgdHdvIHNlcmlmIGZhY2VzIChub3JtYWwgXAorYW5kIGJvbGQpLiAgSW4gYWRkaXRpb24gRm9udGNvbmZpZy9YZnQyIGNhbiBhcnRpZmljaWFsbHkgb2JsaXF1ZSB0aGUgXAorc2VyaWYgZmFjZXMgZm9yIHlvdTogdGhpcyBsb3NlcyBoaW50aW5nIGFuZCBkaXN0b3J0cyB0aGUgZmFjZXMgc2xpZ2h0bHksIFwKK2J1dCBpcyB2aXNpYmx5IGRpZmZlcmVudCB0aGFuIG5vcm1hbCBhbmQgYm9sZCwgYW5kIHJlYXNvbmFibHkgcGxlYXNpbmcuIgorU0VDVElPTiA9ICJ4MTEvZm9udHMiCitMSUNFTlNFID0gIkJpdHN0cmVhbVZlcmEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQuVFhUO21kNT0yN2Q3NDg0YjFlMThkMGVlNGNlNTM4NjQ0YTNmMDRiZSIKK1BSID0gInI3IgorCitpbmhlcml0IGZvbnRjYWNoZQorCitGT05UX1BBQ0tBR0VTID0gIiR7UE59IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS90dGYtYml0c3RyZWFtLXZlcmEvMS4xMC90dGYtYml0c3RyZWFtLXZlcmEtJHtQVn0udGFyLmJ6MiIgCisKK2RvX2luc3RhbGwgKCkgeyAKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8gCisgICAgICAgIGZvciBpIGluICoudHRmOyBkbyAKKyAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8ke2l9IAorICAgICAgICBkb25lIAorCisJIyBmb250Y29uZmlnIHNoaXBzIHRoaXMgdG9vLiAgbm90IHN1cmUgd2hhdCB0byBkbyBhYm91dCBpdC4KKyAgICAgICAgI2luc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMgCisgICAgICAgICNpbnN0YWxsIC1tIDY0NCBsb2NhbC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2ZvbnRzL2xvY2FsLmNvbmYgCisKKworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vc2hhcmUvZG9jLyR7QlBOfS8KKyAgICAgICAgZm9yIGkgaW4gKi5UWFQ7IGRvIAorICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICRpICR7RH0ke3ByZWZpeH0vc2hhcmUvZG9jLyR7QlBOfS8kaQorICAgICAgICBkb25lIAorfSAKKworRklMRVNfJHtQTn0gPSAiL2V0YyAke2RhdGFkaXJ9L2ZvbnRzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmIyMmJkNWI0Njc1ZjVkYmUxN2M2OTYzZDhjMDBlZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGI1YjI3ZGY3YmJiMzE4MDM2ZWJkYjc1YWNkM2U5OGYxYmQ2ZWI2NjA4ZmI3MGE2N2Q0NzhjZDI0M2QxNzhkYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YWZmbGUvd2FmZmxlXzEuNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhYTA1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YWZmbGUvd2FmZmxlXzEuNS4xLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiY3Jvc3MtcGxhdGZvcm0gQyBsaWJyYXJ5IHRvIGRlZmVyIHNlbGVjdGlvbiBvZiBHTCBBUEkgYW5kIG9mIHdpbmRvdyBzeXN0ZW0iCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT00YzUxNTQ0MDdjMjQ5MDc1MGRkNDYxYzUwYWQ5NDc5NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3dhZmZsZS93YWZmbGUuaDtlbmRsaW5lPTI0O21kNT02MWRiZjg2OTdmNjFjNzg2NDVlNzVhOTNjNTg1YjFiZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd2FmZmxlLWdsLm9yZy9maWxlcy9yZWxlYXNlLyR7QlBOfS0ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gImMwZDgwMmJjM2QwYWJhODdjNTFlNDIzYTNhOGJkZDY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNiYWIwZTkyNjUxNTA2NGU4MThiZjA4OWE1YWYwNGJlMzMzMDdlNWY0MGQwNzY1OWZiNDBkNTliMmJmZTIwYWEiCisKK2luaGVyaXQgY21ha2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIGxpYl9wYWNrYWdlCisKKyMgVGhpcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBwZXItbWFjaGluZSB0byByZWZsZWN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEdMCisjIHN0YWNrLgorUEFDS0FHRUNPTkZJRyA/Pz0gImdseCIKKworIyBsaWJ4MTEgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUy4KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdnbHgnLCAneDExJywgJycsIGQpfSIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyBnbC5wYworUEFDS0FHRUNPTkZJR1tnbHhdID0gIi1Ed2FmZmxlX2hhc19nbHg9MSwtRHdhZmZsZV9oYXNfZ2x4PTAsdmlydHVhbC9saWJnbCBsaWJ4MTEiCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgd2F5bGFuZC1lZ2wucGMsIGVnbC5wYywgYW5kIHRoZSB3YXlsYW5kCisjIERJU1RST19GRUFUVVJFLgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItRHdhZmZsZV9oYXNfd2F5bGFuZD0xLC1Ed2FmZmxlX2hhc193YXlsYW5kPTAsdmlydHVhbC9saWJnbCB3YXlsYW5kIgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGdibS5wYyBlZ2wucGMKK1BBQ0tBR0VDT05GSUdbZ2JtXSA9ICItRHdhZmZsZV9oYXNfZ2JtPTEsLUR3YWZmbGVfaGFzX2dibT0wLHZpcnR1YWwvbGliZ2wgdWRldiIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyBlZ2wucGMKK1BBQ0tBR0VDT05GSUdbeDExLWVnbF0gPSAiLUR3YWZmbGVfaGFzX3gxMV9lZ2w9MSwtRHdhZmZsZV9oYXNfeDExX2VnbD0wLHZpcnR1YWwvbGliZ2wgbGlieGNiIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vY21ha2UvTW9kdWxlcy9GaW5kV2FmZmxlLmNtYWtlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2NtYWtlL1dhZmZsZS8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNWViY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIGNjNmZjZTU4N2YyNjI4YzhiMzQyNzY0ZTA2ZmIwZmMyN2MxZTgyNzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIEF1ZyAyMDE1IDIwOjMzOjQ0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogYWRkIGFyZyAtLXdpdGgtbGlidW53aW5kCisKK0FkZCBhcmcgLS13aXRoLWxpYnVud2luZCBmb3IgY29uZmlndXJlIHNvIGl0J3Mgb3B0aW9uYWwgdG8gY2hlY2sKK2xpYnVud2luZCwgd2hpY2ggaXMgaGVscGZ1bGwgdG8gbWFrZSBkZXRlcm1pbmlzdGljIGJ1aWxkcy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3dheWxhbmQtZGV2ZWxdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxOSArKysrKysrKysrKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMxNGIwZDQuLjI0MmQyNTEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTYwLDEzICs2MCwyMiBAQCBQS0dfUFJPR19QS0dfQ09ORklHKCkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhNVERFViwgW210ZGV2ID49IDEuMS4wXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJVREVWLCBbbGlidWRldl0pCisgUEtHX0NIRUNLX01PRFVMRVMoTElCRVZERVYsIFtsaWJldmRldiA+PSAwLjRdKQorLVBLR19DSEVDS19NT0RVTEVTKExJQlVOV0lORCwKKysKKytBQ19BUkdfV0lUSChsaWJ1bndpbmQsCisrICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1saWJ1bndpbmRdLFtEbyBub3QgdXNlIGxpYnVud2luZF0pKQorKworK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfbGlidW53aW5kIiAhPSAieG5vIl0sCisrCVtQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJVTldJTkQsCisgCQkgIFtsaWJ1bndpbmRdLAorIAkJICBbSEFWRV9MSUJVTldJTkQ9eWVzXSwKKy0JCSAgW0hBVkVfTElCVU5XSU5EPW5vXSkKKy1pZiB0ZXN0ICJ4JEhBVkVfTElCVU5XSU5EIiA9ICJ4eWVzIjsgdGhlbgorLQlBQ19ERUZJTkUoSEFWRV9MSUJVTldJTkQsIDEsIFtIYXZlIGxpYnVud2luZCBzdXBwb3J0XSkKKy1maQorKwkJICBbSEFWRV9MSUJVTldJTkQ9bm9dKV0sCisrCVtIQVZFX0xJQlVOV0lORD1ub10pCisrCisrQVNfSUYoW3Rlc3QgIngkSEFWRV9MSUJVTldJTkQiID0gInh5ZXMiXSwKKysJW0FDX0RFRklORShIQVZFX0xJQlVOV0lORCwgMSwgW0hhdmUgbGlidW53aW5kIHN1cHBvcnRdKV0sCisrCVtBU19JRihbdGVzdCAieCR3aXRoX2xpYnVud2luZCIgPSAieHllcyJdLAorKwkJW0FDX01TR19FUlJPUihbbGlidW53aW5kIHJlcXVlc3RlZCBidXQgbm90IGZvdW5kXSldKV0pCisrCisgQU1fQ09ORElUSU9OQUwoSEFWRV9MSUJVTldJTkQsIFt0ZXN0ICJ4JEhBVkVfTElCVU5XSU5EIiA9IHh5ZXNdKQorIEFDX1BBVEhfUFJPRyhBRERSMkxJTkUsIFthZGRyMmxpbmVdKQorIGlmIHRlc3QgIngkQUREUjJMSU5FIiAhPSAieCI7IHRoZW4KKy0tIAorMi4zLjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzYzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorVGhpcyBpcyBhIHdvcmthcm91bmQgdXBzdHJlYW0gc3VnZ2VzdHMgZm9yIHVzZSB3aXRoIGtlcm5lbCA0LjEuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdGVtcG9yYXJ5IHdvcmstYXJvdW5kXQorU2lnbmVkLU9mZi1CeTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCisKK0Zyb206IFBldGVyIEh1dHRlcmVyIDxwZXRlci5odXR0ZXJlckB3aG8tdC5uZXQ+CitEYXRlOiBNb24gQXVnIDMgMTg6MjM6MTIgUERUIDIwMTUKK1N1YmplY3Q6IFtQQVRDSCB2MyBsaWJpbnB1dF0gdG91Y2hwYWQ6IHNlcmlhbCBzeW5hcHRpY3MgbmVlZCB0byBmYWtlIG5ldyB0b3VjaGVzIG9uIFRSSVBMRVRBUAorCitPbiB0aGUgNC4xIGtlcm5lbHMgc3luYXB0aWNzIHByZXRlbmRzIHRvIGhhdmUgMyBzbG90cyAodGhlIHNlcmlhbCBmdyBvbmx5IGRvZXMKKzIpLiBUaGlzIHdhcyBhZGRlZCB0byBhdm9pZCBjdXJzb3IganVtcHMgYnV0IGhhcyBzaW5jZSBiZWVuIHJldmVydGVkIGZvciA0LjIKKyhrZXJuZWwgY29tbWl0IGRiZjNjMzcwODYsIDQuMS4zIGlzIHN0aWxsIGJ1Z2d5KS4gSW4gc29tZSBjYXNlcyBhIFRSSVBMRVRBUAorbWF5IGJlIHRyaWdnZXJlZCB3aXRob3V0IHNsb3QgMiBldmVyIGFjdGl2YXRpbmcuCisKK1doaWxlIHRoZXJlIGFyZSBzdGlsbCB0aG9zZSBrZXJuZWxzIG91dCB0aGVyZSwgd29yayBhcm91bmQgdGhpcyBidWcgYnkgb3BlbmluZworYSBuZXcgdG91Y2ggcG9pbnQgd2hlcmUgbm9uZSBleGlzdHMgaWYgdGhlIGZha2UgZmluZ2VyIGNvdW50IGV4Y2VlZHMgdGhlIHNsb3QKK2NvdW50LgorCitSZXBvcnRlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyA8amFuLnN0ZWZmZW5zIGF0IGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBldGVyIEh1dHRlcmVyIDxwZXRlci5odXR0ZXJlciBhdCB3aG8tdC5uZXQ+CitUZXN0ZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgPGphbi5zdGVmZmVucyBhdCBnbWFpbC5jb20+CitSZXZpZXdlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGUgYXQgcmVkaGF0LmNvbT4KKy0tLQorQ2hhbmdlcyB0byB2MjoKKy0gc3BsaXQgb3V0IHRoZSBoYW5kbGluZyBpbnN0ZWFkIG9mIGhhdmluZyBhIHRtcCBzdGF0ZSB2YXJpYWJsZSwgc2VlIEhhbnMnCisgIGNvbW1lbnRzIGZyb20gdjIKKworTWFpbmx5IHNlbmRpbmcgdGhpcyB0byB0aGUgbGlzdCBhZ2FpbiBzbyBJIGhhdmUgYSBsaW5rIHRvIHBvaW50IHBlb3BsZSB0by4KK0lmIHlvdSdyZSBvbiA0LjEueCBhZGQgdGhpcyBwYXRjaCB0byB5b3VyIGRpc3RyaWJ1dGlvbiBwYWNrYWdlLgorCisgc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMgfCAyMiArKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYyBiL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCitpbmRleCBhNjgzZDlhLi41ZWYwM2Q1IDEwMDY0NAorLS0tIGEvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKKysrKyBiL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jCitAQCAtMzY5LDEzICszNjksMjMgQEAgdHBfcmVzdG9yZV9zeW5hcHRpY3NfdG91Y2hlcyhzdHJ1Y3QgdHBfZGlzcGF0Y2ggKnRwLAorIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm51bV9zbG90czsgaSsrKSB7CisgCQlzdHJ1Y3QgdHBfdG91Y2ggKnQgPSB0cF9nZXRfdG91Y2godHAsIGkpOworIAorLQkJaWYgKHQtPnN0YXRlICE9IFRPVUNIX0VORCkKKysJCXN3aXRjaCh0LT5zdGF0ZSkgeworKwkJY2FzZSBUT1VDSF9IT1ZFUklORzoKKysJCWNhc2UgVE9VQ0hfQkVHSU46CisrCQljYXNlIFRPVUNIX1VQREFURToKKyAJCQljb250aW51ZTsKKy0KKy0JCS8qIG5ldyB0b3VjaCwgbW92ZSBpdCB0aHJvdWdoIGJlZ2luIHRvIHVwZGF0ZSBpbW1lZGlhdGVseSAqLworLQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKKy0JCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKy0JCXQtPnN0YXRlID0gVE9VQ0hfVVBEQVRFOworKwkJY2FzZSBUT1VDSF9OT05FOgorKwkJCS8qIG5ldyB0b3VjaCwgbW92ZSBpdCB0aHJvdWdoIHRvIGJlZ2luIGltbWVkaWF0ZWx5ICovCisrCQkJdHBfbmV3X3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQl0cF9iZWdpbl90b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJYnJlYWs7CisrCQljYXNlIFRPVUNIX0VORDoKKysJCQkvKiB0b3VjaCBqdXN0IGVuZGVkICx3ZSBuZWVkIG5lZWQgdG8gcmVzdG9yZSBpdCB0byB1cGRhdGUgKi8KKysJCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQl0LT5zdGF0ZSA9IFRPVUNIX1VQREFURTsKKysJCQlicmVhazsKKysJCX0KKyAJfQorIH0KKyAKKy0tIAorMi40LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMC4yMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXRfMC4yMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWEyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8wLjIxLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHRvIGhhbmRsZSBpbnB1dCBkZXZpY2VzIGluIFdheWxhbmQgY29tcG9zaXRvcnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL2xpYmlucHV0LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMTg0YWVmMzhmZjEzN2VkMzNjZTlhNjNiOWQxZWI4ZiIKKworREVQRU5EUyA9ICJsaWJldmRldiB1ZGV2IG10ZGV2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlLyR7QlBOfS8ke0JQfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdG91Y2hwYWQtc2VyaWFsLXN5bmFwdGljcy1uZWVkLXRvLWZha2UtbmV3LXRvdWNoZXMtb24tVFJJUExFVEFQLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmOTFkOGY0Y2VkOTg2ZjFhZTE2ZDUyZWEwMmJjNzgzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Y2NlN2E5ZTUxMGRmZTVjNGExOWFkMDBlOTM1MDgwOGQ0ZjU5Zjg2MTFmZDJiNWU4NzIxM2M1MDcyODNmNTUwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLXdpdGgtbGlidW53aW5kLC0td2l0aG91dC1saWJ1bndpbmQsbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1tndWldID0gIi0tZW5hYmxlLWV2ZW50LWd1aSwtLWRpc2FibGUtZXZlbnQtZ3VpLGNhaXJvIGd0ayszIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3VkZXYvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdWRldi8uZGVidWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9tdGRldl8xLjEuNS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDBlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9tdGRldl8xLjEuNS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIk11bHRpdG91Y2ggUHJvdG9jb2wgVHJhbnNsYXRpb24gTGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibXRkZXYgaXMgYSBsaWJyYXJ5IHdoaWNoIHRyYW5zZm9ybXMgYWxsIHZhcmlhbnRzIG9mIGtlcm5lbCBcCittdWx0aXRvdWNoIGV2ZW50cyB0byB0aGUgc2xvdHRlZCB0eXBlIEIgcHJvdG9jb2wuIFRoZSBldmVudHMgcHV0IGludG8gbXRkZXYgbWF5IFwKK2JlIGZyb20gYW55IE1UIGRldmljZSwgc3BlY2lmaWNhbGx5IHR5cGUgQSB3aXRob3V0IGNvbnRhY3QgdHJhY2tpbmcsIHR5cGUgQSB3aXRoIFwKK2NvbnRhY3QgdHJhY2tpbmcsIG9yIHR5cGUgQiB3aXRoIGNvbnRhY3QgdHJhY2tpbmciCisKK0hPTUVQQUdFID0gImh0dHA6Ly9iaXRtYXRoLm9yZy9jb2RlL210ZGV2LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYTZiZDAyNjhiYjBmY2Q2YjI3Njk4NjE2Y2VlZTVkNiIKKworU1JDX1VSSSA9ICJodHRwOi8vYml0bWF0aC5vcmcvY29kZS8ke0JQTn0vJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmM5NjEwYjYwMDJmNzFkMTY0MmRjMWExY2NhNWVjMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2Njc3ZDU3MDhhNzk0ODg0MGRlNzM0ZDhiNDY3NWQ1OTgwZDQ1NjExNzFjNWE4ZTg5ZTU0YWRmN2ExM2ViYTdmIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMGU2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Fsd2F5cy1idWlsZC1zY2FubmVyLnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitidWlsZDogYWx3YXlzIGJ1aWxkIHdheWxhbmQtc2Nhbm5lcgorCitUaGUgcHJldmlvdXMgaWRpb20gZm9yIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZWQgV2F5bGFuZCBpcyB0byBidWlsZCBvbmNlIGZvcgordGhlIGJ1aWxkIGhvc3QgKHdpdGggLS1lbmFibGUtc2Nhbm5lciAtLWRpc2FibGUtbGlicmFyaWVzKSB0byBnZXQgYQord2F5bGFuZC1zY2FubmVyIGJpbmFyeSB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgaW4gYSBjcm9zcy1jb21waWxlICh3aXRoCistLWRpc2FibGUtc2Nhbm5lcikuICBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCB0aGUgY3Jvc3Mgd2F5bGFuZCBpcyBtaXNzaW5nCithIHdheWxhbmQtc2Nhbm5lciBiaW5hcnksIHdoaWNoIG1lYW5zIHlvdSB0aGVuIGNhbid0IGRvIGFueSBXYXlsYW5kIGRldmVsb3BtZW50CitvbiB0aGUgdGFyZ2V0LgorCitJbnN0ZWFkLCBhbHdheXMgYnVpbGQgd2F5bGFuZC1zY2FubmVyIGZvciB0aGUgdGFyZ2V0IGFuZCBjaGFuZ2UKKy0tZW5hYmxlL2Rpc2FibGUtc2Nhbm5lciB0byAtLXdpdGgvd2l0aG91dC1ob3N0LXNjYW5uZXIuICBOb3JtYWwgYnVpbGRzIHVzZSB0aGUKK2RlZmF1bHQgb2YgLS13aXRob3V0LWhvc3Qtc2Nhbm5lciBhbmQgcnVuIHRoZSB3YXlsYW5kLXNjYW5uZXIgaXQganVzdCBidWlsdCwgYW5kCitjcm9zcy1jb21waWxlZCBidWlsZHMgcGFzcyAtLXdpdGgtaG9zdC1zY2FubmVyIHRvIHVzZSBhIHByZXZpb3VzbHkgYnVpbHQgaG9zdAorc2Nhbm5lciBidXQgc3RpbGwgZ2V0IGEgd2F5bGFuZC1zY2FubmVyIHRvIGluc3RhbGwuCisKKyhhIHRoZW9yZXRpY2FsbHkgbmVhdGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGJ1aWxkIHR3byBzY2FubmVycyBpZiByZXF1aXJlZCAob25lCit0byBydW4gYW5kIG9uZSB0byBpbnN0YWxsKSwgYnV0IGF1dG9tYWtlIG1ha2VzIHRoaXMgb3Zlcmx5IGNvbXBsaWNhdGVkKQorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IGMxOTQ5NGYuLmMyZDkyOWIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC02NCwxNiArNjQsMTcgQEAgbm9kaXN0X2xpYndheWxhbmRfY2xpZW50X2xhX1NPVVJDRVMgPQkJXAorIAorIHBrZ2NvbmZpZ19EQVRBICs9IHNyYy93YXlsYW5kLWNsaWVudC5wYyBzcmMvd2F5bGFuZC1zZXJ2ZXIucGMKKyAKKy1pZiBFTkFCTEVfU0NBTk5FUgorLXdheWxhbmRfc2Nhbm5lciA9ICQodG9wX2J1aWxkZGlyKS93YXlsYW5kLXNjYW5uZXIKKyBiaW5fUFJPR1JBTVMgPSB3YXlsYW5kLXNjYW5uZXIKKyB3YXlsYW5kX3NjYW5uZXJfU09VUkNFUyA9IHNyYy9zY2FubmVyLmMKKyB3YXlsYW5kX3NjYW5uZXJfQ0ZMQUdTID0gJChFWFBBVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQorIHdheWxhbmRfc2Nhbm5lcl9MREFERCA9ICQoRVhQQVRfTElCUykgbGlid2F5bGFuZC11dGlsLmxhCistJChCVUlMVF9TT1VSQ0VTKSA6IHdheWxhbmQtc2Nhbm5lcgorIHBrZ2NvbmZpZ19EQVRBICs9IHNyYy93YXlsYW5kLXNjYW5uZXIucGMKKy1lbHNlCisrCisraWYgSE9TVF9TQ0FOTkVSCisgd2F5bGFuZF9zY2FubmVyID0gd2F5bGFuZC1zY2FubmVyCisrZWxzZQorKyQoQlVJTFRfU09VUkNFUykgOiB3YXlsYW5kLXNjYW5uZXIKKyt3YXlsYW5kX3NjYW5uZXIgPSAkKHRvcF9idWlsZGRpcikvd2F5bGFuZC1zY2FubmVyCisgZW5kaWYKKyAKKyBwcm90b2NvbC8lLXByb3RvY29sLmMgOiAkKHRvcF9zcmNkaXIpL3Byb3RvY29sLyUueG1sCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjMmE4MDRlLi5kZTBiMDJmIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NSwxMSArNjUsMTEgQEAgQUNfQ0hFQ0tfREVDTChDTE9DS19NT05PVE9OSUMsW10sCisgCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKyBBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKyAKKy1BQ19BUkdfRU5BQkxFKFtzY2FubmVyXSwKKy0gICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXNjYW5uZXJdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGNvbXBpbGF0aW9uIG9mIHdheWxhbmQtc2Nhbm5lcl0pXSwKKy0gICAgICAgICAgICAgIFtdLAorLSAgICAgICAgICAgICAgW2VuYWJsZV9zY2FubmVyPXllc10pCisrQUNfQVJHX1dJVEgoW2hvc3Qtc2Nhbm5lcl0sCisrICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtaG9zdC1zY2FubmVyXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VzZSBhIGhvc3Qgd2F5bGFuZC1zY2FubmVyXSldLAorKyAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgIFt3aXRoX2hvc3Rfc2Nhbm5lcj1ub10pCisgCisgQUNfQVJHX0VOQUJMRShbZG9jdW1lbnRhdGlvbl0sCisgCSAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWRvY3VtZW50YXRpb25dLAorQEAgLTc3LDI1ICs3NywyMyBAQCBBQ19BUkdfRU5BQkxFKFtkb2N1bWVudGF0aW9uXSwKKyAJICAgICAgW10sCisgCSAgICAgIFtlbmFibGVfZG9jdW1lbnRhdGlvbj15ZXNdKQorIAorLUFNX0NPTkRJVElPTkFMKEVOQUJMRV9TQ0FOTkVSLCB0ZXN0ICJ4JGVuYWJsZV9zY2FubmVyIiA9IHh5ZXMpCisrQU1fQ09ORElUSU9OQUwoSE9TVF9TQ0FOTkVSLCB0ZXN0ICJ4JHdpdGhfaG9zdF9zY2FubmVyIiA9IHh5ZXMpCisgCisgQUNfQVJHX1dJVEgoaWNvbmRpciwgWyAgLS13aXRoLWljb25kaXI9PGRpcj4gICAgTG9vayBmb3IgY3Vyc29yIGljb25zIGhlcmVdLAorIAkJICAgICBbICBJQ09ORElSPSR3aXRodmFsXSwKKyAJCSAgICAgWyAgSUNPTkRJUj0ke2RhdGFkaXJ9L2ljb25zXSkKKyBBQ19TVUJTVChbSUNPTkRJUl0pCisgCistaWYgdGVzdCAieCRlbmFibGVfc2Nhbm5lciIgPSAieHllcyI7IHRoZW4KKy0JUEtHX0NIRUNLX01PRFVMRVMoRVhQQVQsIFtleHBhdF0sIFtdLAorLQkJW0FDX0NIRUNLX0hFQURFUlMoZXhwYXQuaCwgW10sCistCQkJW0FDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBleHBhdC5oLiBQbGVhc2UgaW5zdGFsbCBleHBhdC5dKV0pCistCQkgU0FWRV9MSUJTPSIkTElCUyIKKy0JCSBBQ19TRUFSQ0hfTElCUyhYTUxfUGFyc2VyQ3JlYXRlLCBleHBhdCwgW10sCistCQkJW0FDX01TR19FUlJPUihbQ2FuJ3QgZmluZCBleHBhdCBsaWJyYXJ5LiBQbGVhc2UgaW5zdGFsbCBleHBhdC5dKV0pCistCQkgRVhQQVRfTElCUz0iJExJQlMiCistCQkgTElCUz0iJFNBVkVfTElCUyIKKy0JCSBBQ19TVUJTVChFWFBBVF9MSUJTKQorLQkJXSkKKy1maQorK1BLR19DSEVDS19NT0RVTEVTKEVYUEFULCBbZXhwYXRdLCBbXSwKKysJW0FDX0NIRUNLX0hFQURFUlMoZXhwYXQuaCwgW10sCisrCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0LmguIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKysJIFNBVkVfTElCUz0iJExJQlMiCisrCSBBQ19TRUFSQ0hfTElCUyhYTUxfUGFyc2VyQ3JlYXRlLCBleHBhdCwgW10sCisrCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0IGxpYnJhcnkuIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKysJIEVYUEFUX0xJQlM9IiRMSUJTIgorKwkgTElCUz0iJFNBVkVfTElCUyIKKysJIEFDX1NVQlNUKEVYUEFUX0xJQlMpCisrCV0pCisgCisgQUNfUEFUSF9QUk9HKFhTTFRQUk9DLCB4c2x0cHJvYykKKyBBTV9DT05ESVRJT05BTChbSEFWRV9YU0xUUFJPQ10sIFt0ZXN0ICJ4JFhTTFRQUk9DIiAhPSAieCJdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9kaXNhYmxlLW1hY3JvLWNoZWNrcy1ub3QtdXNlZC1mb3Itc2Nhbm5lci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YmM1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZGlzYWJsZSBtYWNybyBjaGVja3Mgbm90IHVzZWQgZm9yIHNjYW5uZXIKKworV2Ugb25seSBidWlsZCB3YXlsYW5kLW5hdGl2ZSBmb3IgdGhlIHNjYW5uZXIsIHNvIGRpc2FibGUgdGhlIGJpdHMgd2UgZG9uJ3QKK2FjdHVhbGx5IG5lZWQuIFRoaXMgYXZvaWQgYnVpbGQgaXNzdWUgb24gb2xkZXIgZGlzdHJvIHN1Y2ggYXMgQ2VudG9zIDUueDoKK3wgZXJyb3I6ICdPX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCBlcnJvcjogc3lzL3RpbWVyZmQuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBlcnJvcjogJ0NMT0NLX01PTk9UT05JQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiAnVEZEX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorfCBlcnJvcjogJ1NGRF9DTE9FWEVDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIwICsrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTQxLDE2ICs0MSwxNiBAQCBBQ19TVUJTVChHQ0NfQ0ZMQUdTKQorIAorIEFDX0NIRUNLX0ZVTkNTKFthY2NlcHQ0IG1rb3N0ZW1wIHBvc2l4X2ZhbGxvY2F0ZV0pCisgCistQUNfQ0hFQ0tfREVDTChTRkRfQ0xPRVhFQyxbXSwKKy0JICAgICAgW0FDX01TR19FUlJPUigiU0ZEX0NMT0VYRUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8c3lzL3NpZ25hbGZkLmg+XV0pCistQUNfQ0hFQ0tfREVDTChURkRfQ0xPRVhFQyxbXSwKKy0JICAgICAgW0FDX01TR19FUlJPUigiVEZEX0NMT0VYRUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD5dXSkKKy1BQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKy0JICAgICAgW0FDX01TR19FUlJPUigiQ0xPQ0tfTU9OT1RPTklDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCistCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKy1BQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKysjI0FDX0NIRUNLX0RFQ0woU0ZEX0NMT0VYRUMsW10sCisrIwkgICAgICBbQUNfTVNHX0VSUk9SKCJTRkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8c3lzL3NpZ25hbGZkLmg+XV0pCisrI0FDX0NIRUNLX0RFQ0woVEZEX0NMT0VYRUMsW10sCisrIwkgICAgICBbQUNfTVNHX0VSUk9SKCJURkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8c3lzL3RpbWVyZmQuaD5dXSkKKysjQUNfQ0hFQ0tfREVDTChDTE9DS19NT05PVE9OSUMsW10sCisrIwkgICAgICBbQUNfTVNHX0VSUk9SKCJDTE9DS19NT05PVE9OSUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKysjCSAgICAgIFtbI2luY2x1ZGUgPHRpbWUuaD5dXSkKKysjQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisgCisgQUNfQVJHX0VOQUJMRShbc2Nhbm5lcl0sCisgICAgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zY2FubmVyXSwKKy0tIAorMS44LjMuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlhMGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZF8xLjguMS5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIldheWxhbmQsIGEgcHJvdG9jb2wgYmV0d2VlbiBhIGNvbXBvc2l0b3IgYW5kIGNsaWVudHMiCitERVNDUklQVElPTiA9ICJXYXlsYW5kIGlzIGEgcHJvdG9jb2wgZm9yIGEgY29tcG9zaXRvciB0byB0YWxrIHRvIGl0cyBjbGllbnRzIFwKK2FzIHdlbGwgYXMgYSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBwcm90b2NvbC4gVGhlIGNvbXBvc2l0b3IgY2FuIGJlIFwKK2Egc3RhbmRhbG9uZSBkaXNwbGF5IHNlcnZlciBydW5uaW5nIG9uIExpbnV4IGtlcm5lbCBtb2Rlc2V0dGluZyBhbmQgZXZkZXYgXAoraW5wdXQgZGV2aWNlcywgYW4gWCBhcHBsaWNhdGlvbiwgb3IgYSB3YXlsYW5kIGNsaWVudCBpdHNlbGYuIFRoZSBjbGllbnRzIGNhbiBcCitiZSB0cmFkaXRpb25hbCBhcHBsaWNhdGlvbnMsIFggc2VydmVycyAocm9vdGxlc3Mgb3IgZnVsbHNjcmVlbikgb3Igb3RoZXIgXAorZGlzcGxheSBzZXJ2ZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWQ0NDc2YTdkOThkZDU2OTFjNTNkNGQ0M2E1MTBjNzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dheWxhbmQtc2VydmVyLmM7ZW5kbGluZT0yMTttZDU9MDc5YWUyMWRiZjk4YWRhNTJlYzIzNzQ0ODUxYjBhNWMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiNmU4Nzc4NzdjM2UwNGNmYjg2NWNmY2QwNzMzYzlhYjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjE3YzkzOGQxYzI0ZmQwYTEwZjY1MGE2MjNhMjc3NWQzMjlkYjMxNjhiNTczMmU0OThiMDgzODhlYzc3NmZjOCIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBcCisgICAgZmlsZTovL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoIFwKKyAgICAiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitERVBFTkRTID0gImV4cGF0IGxpYmZmaSB3YXlsYW5kLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIC0td2l0aC1ob3N0LXNjYW5uZXIiCisKKyMgV2F5bGFuZCBpbnN0YWxscyBhIE00IG1hY3JvIGZvciBvdGhlciBwcm9qZWN0cyB0byB1c2UsIHdoaWNoIHVzZXMgdGhlIHRhcmdldAorIyBwa2ctY29uZmlnIHRvIGZpbmQgZmlsZXMuICBSZXBsYWNlIHBrZy1jb25maWcgd2l0aCBwa2ctY29uZmlnLW5hdGl2ZS4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKyAgc2VkIC1lICdzLFBLR19DSEVDS19NT0RVTEVTKC4qKSwsZycgXAorICAgICAgLWUgJ3MsJFBLR19DT05GSUcscGtnLWNvbmZpZy1uYXRpdmUsZycgXAorICAgICAgLWkgJHtEfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00Cit9CisKK3N5c3Jvb3Rfc3RhZ2VfYWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCXJtICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00CisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hY2xvY2FsL3dheWxhbmQtc2Nhbm5lci5tNCAke1NZU1JPT1RfREVTVERJUn0vJHtkYXRhZGlyfS9hY2xvY2FsLworfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0vd2F5bGFuZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiNzhiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiU3RhcnR1cCBzY3JpcHQgZm9yIHRoZSBXZXN0b24gV2F5bGFuZCBjb21wb3NpdG9yIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCIKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW03NTUgJHtXT1JLRElSfS9pbml0ICR7RH0vJHtzeXNjb25mZGlyfS9pbml0LmQvd2VzdG9uCit9CisKK2luaGVyaXQgYWxsYXJjaCB1cGRhdGUtcmMuZAorCitSREVQRU5EU18ke1BOfSA9ICJ3ZXN0b24ga2JkIgorCitJTklUU0NSSVBUX05BTUUgPSAid2VzdG9uIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTkzOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQvaW5pdApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IHdlc3RvbgorIyBSZXF1aXJlZC1TdGFydDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgUmVxdWlyZWQtU3RvcDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIyMgRU5EIElOSVQgSU5GTworCitpZiB0ZXN0IC1lIC9ldGMvZGVmYXVsdC93ZXN0b24gOyB0aGVuCisgICAgICAgIC4gL2V0Yy9kZWZhdWx0L3dlc3RvbgorZmkKKwora2lsbHByb2MoKSB7CisgICAgICAgIHBpZD1gL2Jpbi9waWRvZiAkMWAKKyAgICAgICAgWyAiJHBpZCIgIT0gIiIgXSAmJiBraWxsICRwaWQKK30KKworcmVhZCBDTURMSU5FIDwgL3Byb2MvY21kbGluZQorZm9yIHggaW4gJENNRExJTkU7IGRvCisgICAgICAgIGNhc2UgJHggaW4KKyAgICAgICAgd2VzdG9uPWZhbHNlKQorCQllY2hvICJXZXN0b24gZGlzYWJsZWQiCisJCWV4aXQgMDsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCitkb25lCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgICAgLiAvZXRjL3Byb2ZpbGUKKworICAgICAgICAjIFRoaXMgaXMgYWxsIGEgbmFzdHkgaGFjaworICAgICAgICBpZiB0ZXN0IC16ICIkWERHX1JVTlRJTUVfRElSIjsgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVI9L3J1bi91c2VyL3Jvb3QKKyAgICAgICAgICAgICAgICBta2RpciAtLXBhcmVudHMgJFhER19SVU5USU1FX0RJUgorICAgICAgICAgICAgICAgIGNobW9kIDA3MDAgJFhER19SVU5USU1FX0RJUgorICAgICAgICBmaQorCisgICAgICAgIG9wZW52dCAtcyB3ZXN0b24gLS0gJE9QVEFSR1MKKyAgOzsKKworICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBXZXN0b24iCisgICAgICAgIGtpbGxwcm9jIHdlc3RvbgorICA7OworCisgIHJlc3RhcnQpCisJJDAgc3RvcAorICAgICAgICBzbGVlcCAxCisgICAgICAgICQwIHN0YXJ0CisgIDs7CisKKyAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IgorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODg0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoCkBAIC0wLDAgKzEsODAgQEAKK0Zyb20gYzIyZTkwMzY1ZDg5MzQ2MjU4Mzk0ODMzY2JjYWQwM2ZmMzJiMmUyNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1heSAyMDE1IDIwOjU2OjAwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggd2VzdG9uXSBtYWtlIGVycm9yKCkgcG9ydGFibGUKKworZXJyb3IoKSBpcyBub3QgcG9zaXggYnV0IGdudSBleHRlbnNpb24gc28gbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYWxsCitraW5kIG9mIHN5c3RlbXNpIGUuZy4gbXVzbC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIGNvbmZpZ3VyZS5hYyAgICAgICAgfCAgMiArKworIHNyYy93ZXN0b24tZXJyb3IuaCAgfCAyMCArKysrKysrKysrKysrKysrKysrKworIHNyYy93ZXN0b24tbGF1bmNoLmMgfCAgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvd2VzdG9uLWVycm9yLmgKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjYzZmMyMi4uZjUyY2Q2MiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTcsNiArNTcsOCBAQCBBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKyAJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorIEFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIAorK0FDX0NIRUNLX0hFQURFUlMoW2Vycm9yLmhdKQorKworIEFDX0NIRUNLX0ZVTkNTKFtta29zdGVtcCBzdHJjaHJudWwgaW5pdGdyb3VwcyBwb3NpeF9mYWxsb2NhdGVdKQorIAorIENPTVBPU0lUT1JfTU9EVUxFUz0id2F5bGFuZC1zZXJ2ZXIgPj0gMS43LjkzIHBpeG1hbi0xID49IDAuMjUuMiIKK2RpZmYgLS1naXQgYS9zcmMvd2VzdG9uLWVycm9yLmggYi9zcmMvd2VzdG9uLWVycm9yLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yMDg5ZDAyCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvd2VzdG9uLWVycm9yLmgKK0BAIC0wLDAgKzEsMjAgQEAKKysjaWZuZGVmIF9XRVNUT05fRVJST1JfSAorKyNkZWZpbmUgX1dFU1RPTl9FUlJPUl9ICisrCisrI2lmIGRlZmluZWQoSEFWRV9FUlJPUl9IKQorKyNpbmNsdWRlIDxlcnJvci5oPgorKyNlbHNlCisrI2luY2x1ZGUgPGVyci5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjZGVmaW5lIF93ZXN0b25fZXJyb3IoUywgRSwgRiwgLi4uKSBkbyB7IFwKKysJaWYgKEUpIFwKKysJCWVycihTLCBGICI6ICVzIiwgIyNfX1ZBX0FSR1NfXywgc3RyZXJyb3IoRSkpOyBcCisrCWVsc2UgXAorKwkJZXJyKFMsIEYsICMjX19WQV9BUkdTX18pOyBcCisrfSB3aGlsZSgwKQorKworKyNkZWZpbmUgZXJyb3IgX3dlc3Rvbl9lcnJvcgorKyNlbmRpZgorKworKyNlbmRpZgorKworZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tbGF1bmNoLmMgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitpbmRleCAxMGM2NmRlLi4zZTZkMzBhIDEwMDY0NAorLS0tIGEvc3JjL3dlc3Rvbi1sYXVuY2guYworKysrIGIvc3JjL3dlc3Rvbi1sYXVuY2guYworQEAgLTMwLDcgKzMwLDYgQEAKKyAjaW5jbHVkZSA8cG9sbC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorLSNpbmNsdWRlIDxlcnJvci5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitAQCAtNTYsNiArNTUsNyBAQAorICNlbmRpZgorIAorICNpbmNsdWRlICJ3ZXN0b24tbGF1bmNoLmgiCisrI2luY2x1ZGUgIndlc3Rvbi1lcnJvci5oIgorIAorICNkZWZpbmUgRFJNX01BSk9SIDIyNgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vZGlzYWJsZS13YXlsYW5kLXNjYW5uZXItcGtnLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJhMzhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL2Rpc2FibGUtd2F5bGFuZC1zY2FubmVyLXBrZy1jaGVjay5wYXRjaApAQCAtMCwwICsxLDE3IEBACitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC01MDEsMTIgKzUwMSw2IEBAIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXM7IHRoZW4KKyBmaQorIEFNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXNdKQorIAorLUFDX1BBVEhfUFJPRyhbd2F5bGFuZF9zY2FubmVyXSwgW3dheWxhbmQtc2Nhbm5lcl0pCistaWYgdGVzdCB4JHdheWxhbmRfc2Nhbm5lciA9IHg7IHRoZW4KKy0JUEtHX0NIRUNLX01PRFVMRVMoV0FZTEFORF9TQ0FOTkVSLCBbd2F5bGFuZC1zY2FubmVyXSkKKy0Jd2F5bGFuZF9zY2FubmVyPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXdheWxhbmRfc2Nhbm5lciB3YXlsYW5kLXNjYW5uZXJgCistZmkKKy0KKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIHNyYy92ZXJzaW9uLmggc3JjL3dlc3Rvbi5wY10pCisgCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfR0lUX1JFUE9dLCBbdGVzdCAtZiAkc3JjZGlyLy5naXQvbG9ncy9IRUFEXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTZkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1sY21zLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK3dlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWM6IG1ha2UgbGNtcyBleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZQorCitUaGUgbGNtcyBwYWNrYWdlIGlzIG91dHNpZGUgb2Ygb3BlbmVtYmVkZGVkLWNvcmUsIHNvIG1ha2UgaXQKK2V4cGxpY2l0bHkgY29uZmlndXJhYmxlLiBNYWtlIGl0IGRldGVybWluaXN0aWMsIHNvIHRoYXQgaWYgbGNtcworZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLCBhdXRvY29uZiB0aHJvd3MgYSBmYXRhbCBlcnJvci4gRm9sbG93Cit1cHN0cmVhbSBzdHlsZSB0byBtYWtlIGl0IG1vcmUgbGlrZWx5IHRvIGJlIG1lcmdlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2VzdG9uLTEuNS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYworQEAgLTQ5MSwxMiArNDkxLDI0IEBAIEFDX0FSR19FTkFCTEUoZGVtby1jbGllbnRzLWluc3RhbGwsCisgCQkJICAgICBlbmFibGVfZGVtb19jbGllbnRzX2luc3RhbGw9bm8pCisgQU1fQ09ORElUSU9OQUwoSU5TVEFMTF9ERU1PX0NMSUVOVFMsIFt0ZXN0ICJ4JGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbCIgPSAieHllcyJdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKExDTVMsIGxjbXMyLAorLSAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9eWVzXSwgW2hhdmVfbGNtcz1ub10pCistaWYgdGVzdCAieCRoYXZlX2xjbXMiID0geHllczsgdGhlbgorLSAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQorK0FDX0FSR19FTkFCTEUobGNtcywKKysgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGNtc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBsY21zIHN1cHBvcnRdKSwsCisrICAgICAgICAgICAgICBlbmFibGVfbGNtcz1hdXRvKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkZW5hYmxlX2xjbXMiID0geHllc10pCisraWYgdGVzdCAieCRlbmFibGVfbGNtcyIgIT0gInhubyI7IHRoZW4KKysgICAgICAgIFBLR19DSEVDS19NT0RVTEVTKExDTVMsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICBsY21zMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPW5vXSkKKysgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9ICJ4bm8iIC1hICJ4JGVuYWJsZV9sY21zIiA9ICJ4eWVzIjsgdGhlbgorKyAgICAgICAgICBBQ19NU0dfRVJST1IoW2xjbXMgc3VwcG9ydCBleHBsaWNpdGx5IHJlcXVlc3RlZCwgYnV0IGxjbXMgY291bGRuJ3QgYmUgZm91bmRdKQorKyAgICAgICAgZmkKKysgICAgICAgIGlmIHRlc3QgIngkaGF2ZV9sY21zIiA9ICJ4eWVzIjsgdGhlbgorKyAgICAgICAgICAgICAgICBlbmFibGVfbGNtcz15ZXMKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTENNUywgMSwgW0hhdmUgbGNtcyBzdXBwb3J0XSkKKysgICAgICAgIGZpCisgZmkKKy1BTV9DT05ESVRJT05BTChIQVZFX0xDTVMsIFt0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzXSkKKyAKKyBBQ19QQVRIX1BST0coW3dheWxhbmRfc2Nhbm5lcl0sIFt3YXlsYW5kLXNjYW5uZXJdKQorIGlmIHRlc3QgeCR3YXlsYW5kX3NjYW5uZXIgPSB4OyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA3ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGlid2VicC1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACisKK1RoZSBsaWJ3ZWJwIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAorZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsaWJ3ZWJwIAorZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nLCBhdXRvY29uZiB0aHJvd3MgYSBmYXRhbCBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2VzdG9uLTEuNS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgd2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYworQEAgLTI2OCw5ICsyNjgsMjIgQEAgZmkKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhQSVhNQU4sIFtwaXhtYW4tMV0pCisgUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBbbGlicG5nXSkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhXRUJQLCBbbGlid2VicF0sIFtoYXZlX3dlYnA9eWVzXSwgW2hhdmVfd2VicD1ub10pCistQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4eWVzIl0sCistICAgICAgW0FDX0RFRklORShbSEFWRV9XRUJQXSwgWzFdLCBbSGF2ZSB3ZWJwXSldKQorK0FDX0FSR19FTkFCTEUod2VicCwKKysgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtd2VicF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSBsaWJ3ZWJwIHN1cHBvcnRdKSwsCisrICAgICAgICAgICAgICBlbmFibGVfd2VicD1hdXRvKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfV0VCUCwgW3Rlc3QgIngkZW5hYmxlX3dlYnAiID0geHllc10pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX3dlYnAiICE9ICJ4bm8iXSwKKysgICAgUEtHX0NIRUNLX01PRFVMRVMoV0VCUCwKKysgICAgICAgICAgICAgICAgICAgICBbbGlid2VicF0sCisrICAgICAgICAgICAgICAgICAgICAgW2hhdmVfd2VicD15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgIFtoYXZlX3dlYnA9bm9dKQorKyAgICBBU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInhubyIgLWEgIngkZW5hYmxlX3dlYnAiID0gInh5ZXMiXSwKKysgICAgICAgIEFDX01TR19FUlJPUihbbGlid2VicCBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdCwgYnV0IGxpcHdlYnAgY291bGQgbm90IGJlIGZvdW5kXSkpCisrICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieHllcyJdLAorKyAgICAgICAgW2VuYWJsZV93ZWJwPXllc10KKysgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfV0VCUF0sIFsxXSwgW0hhdmUgd2VicF0pXSkKKyspCisgCisgQUNfQVJHX0VOQUJMRSh2YWFwaS1yZWNvcmRlciwgWyAgLS1lbmFibGUtdmFhcGktcmVjb3JkZXJdLCwKKyAJICAgICAgZW5hYmxlX3ZhYXBpX3JlY29yZGVyPWF1dG8pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vcGFyYWxsZWxtYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmI1ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3BhcmFsbGVsbWFrZS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitCYWNrcG9ydCB0d28gcGF0Y2hlcyBmcm9tIHVwc3RyZWFtIHRvIGZpeCBwYXJhbGxlbCBidWlsZHMKKworLSBta2RpciByYWNlcyAoMmVmZjIyYjhlNmY2ZTUyNTVhMTkxNWMzM2RmZDkxY2VjZjAyY2JiYykKKy0gd2VzdG9uLmRlc2t0b3AgcmFjZSAoMzE1NDc2ZmE3YjFmMWM0NGMxYjM1MTE2MDM2ZGY1NGFjNWNiOWEwMykKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDU4MTliMTkuLmZmMTNiMTkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yMCw3ICsyMCw3IEBAIHdlc3Rvbi5pbmkgOiAkKHNyY2Rpcikvd2VzdG9uLmluaS5pbgorIAkJJDwgPiAkQAorIAorIGl2aS1zaGVsbC93ZXN0b24uaW5pIDogJChzcmNkaXIpL2l2aS1zaGVsbC93ZXN0b24uaW5pLmluCistCSQoQU1fVl9HRU4pJChTRUQpIFwKKysJJChBTV9WX0dFTikkKE1LRElSX1ApICQoZGlyICRAKSAmJiAkKFNFRCkgXAorIAkJLWUgJ3N8QGJpbmRpcltAXXwkKGJpbmRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3BfYnVpbGRkaXJbQF18JChhYnNfdG9wX2J1aWxkZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9zcmNkaXJbQF18JChhYnNfdG9wX3NyY2Rpcil8ZycgXAorQEAgLTI5LDcgKzI5LDcgQEAgaXZpLXNoZWxsL3dlc3Rvbi5pbmkgOiAkKHNyY2RpcikvaXZpLXNoZWxsL3dlc3Rvbi5pbmkuaW4KKyAJCSQ8ID4gJEAKKyAKKyB0ZXN0cy93ZXN0b24taXZpLmluaSA6ICQoc3JjZGlyKS9pdmktc2hlbGwvd2VzdG9uLmluaS5pbgorLQkkKEFNX1ZfR0VOKSQoU0VEKSBcCisrCSQoQU1fVl9HRU4pJChNS0RJUl9QKSAkKGRpciAkQCkgJiYgJChTRUQpIFwKKyAJCS1lICdzfEBiaW5kaXJbQF18JChiaW5kaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX2J1aWxkZGlyW0BdfCQoYWJzX3RvcF9idWlsZGRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3Bfc3JjZGlyW0BdfCQoYWJzX3RvcF9zcmNkaXIpfGcnIFwKK0BAIC0xNzksOCArMTc5LDcgQEAgcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gc3JjL3dlc3Rvbi5wYworIAorIHdheWxhbmRfc2Vzc2lvbmRpciA9ICQoZGF0YWRpcikvd2F5bGFuZC1zZXNzaW9ucworLXdheWxhbmRfc2Vzc2lvbl9EQVRBID0gc3JjL3dlc3Rvbi5kZXNrdG9wCistZGlzdF93YXlsYW5kX3Nlc3Npb25fREFUQSA9ICQod2F5bGFuZF9zZXNzaW9uX0RBVEEpCisrZGlzdF93YXlsYW5kX3Nlc3Npb25fREFUQSA9IHNyYy93ZXN0b24uZGVza3RvcAorIAorIHdlc3RvbmluY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL3dlc3RvbgorIHdlc3RvbmluY2x1ZGVfSEVBREVSUyA9CQkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24uZGVza3RvcCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24uZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg2YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5kZXNrdG9wCkBAIC0wLDAgKzEsOSBAQAorW0Rlc2t0b3AgRW50cnldCitFbmNvZGluZz1VVEYtOAorVHlwZT1BcHBsaWNhdGlvbgorTmFtZT1XZXN0b24KK0NvbW1lbnQ9V2F5bGFuZCBDb21wb3N0aXRvcgorRXhlYz13ZXN0b24KK0ljb249d2VzdG9uCitUZXJtaW5hbD1mYWxzZQorQ2F0ZWdvcmllcz1VdGlsaXR5OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5wbmcgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYThiN2UwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uXzEuOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MmM2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS44LjAuYmIKQEAgLTAsMCArMSw5NCBAQAorU1VNTUFSWSA9ICJXZXN0b24sIGEgV2F5bGFuZCBjb21wb3NpdG9yIgorREVTQ1JJUFRJT04gPSAiV2VzdG9uIGlzIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCitIT01FUEFHRSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3NWVmYWMyNTU5YTIyNDUyN2JkNGZkNTkzZDM4NDY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jb21wb3NpdG9yLmM7ZW5kbGluZT0yMzttZDU9YTk3OTNmMWVkYzhkMWE0YzM0NGNhOGFlMjUyMzUyZmIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vd2VzdG9uLnBuZyBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24uZGVza3RvcCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbG1ha2UucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjI0Y2I4YTdlZDA1MzViNGZjMzY0MjY0Mzk4OGRhYjM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5NjNlNjlmMzI4ZTgxNWNlYzQyYzU4MDQ2YzRhZjcyMTQ3NmM3NTQxYmI3ZDllZGM3MTc0MGZhZGE1YWQzMTIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1c2VyYWRkCisKK0RFUEVORFMgPSAibGlieGtiY29tbW9uIGdkay1waXhidWYgcGl4bWFuIGNhaXJvIGdsaWItMi4wIGpwZWciCitERVBFTkRTICs9ICJ3YXlsYW5kIGxpYmlucHV0IHZpcnR1YWwvZWdsIHBhbmdvIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2V0dWlkLWluc3RhbGwgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14d2F5bGFuZCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtc2ltcGxlLWNsaWVudHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNsaWVudHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWRlbW8tY2xpZW50cy1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBpLWNvbXBvc2l0b3IgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZHAtY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3FlbXV4ODYgPSAiXAorCQlXRVNUT05fTkFUSVZFX0JBQ0tFTkQ9ZmJkZXYtYmFja2VuZC5zbyBcCisJCSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4Ni02NCA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdrbXMgZmJkZXYgd2F5bGFuZCBlZ2wnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsYXVuY2gnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICIKKyMKKyMgQ29tcG9zaXRvciBjaG9pY2VzCisjCisjIFdlc3RvbiBvbiBLTVMKK1BBQ0tBR0VDT05GSUdba21zXSA9ICItLWVuYWJsZS1kcm0tY29tcG9zaXRvciwtLWRpc2FibGUtZHJtLWNvbXBvc2l0b3IsZHJtIHVkZXYgdmlydHVhbC9tZXNhIG10ZGV2IgorIyBXZXN0b24gb24gV2F5bGFuZCAobmVzdGVkIFdlc3RvbikKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1jb21wb3NpdG9yLC0tZGlzYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsdmlydHVhbC9tZXNhIgorIyBXZXN0b24gb24gWDExCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUteDExLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXgxMS1jb21wb3NpdG9yLHZpcnR1YWwvbGlieDExIGxpYnhjYiBsaWJ4Y2IgbGlieGN1cnNvciBjYWlybyIKKyMgSGVhZGxlc3MgV2VzdG9uCitQQUNLQUdFQ09ORklHW2hlYWRsZXNzXSA9ICItLWVuYWJsZS1oZWFkbGVzcy1jb21wb3NpdG9yLC0tZGlzYWJsZS1oZWFkbGVzcy1jb21wb3NpdG9yIgorIyBXZXN0b24gb24gZnJhbWVidWZmZXIKK1BBQ0tBR0VDT05GSUdbZmJkZXZdID0gIi0tZW5hYmxlLWZiZGV2LWNvbXBvc2l0b3IsLS1kaXNhYmxlLWZiZGV2LWNvbXBvc2l0b3IsdWRldiBtdGRldiIKKyMgd2VzdG9uLWxhdW5jaAorUEFDS0FHRUNPTkZJR1tsYXVuY2hdID0gIi0tZW5hYmxlLXdlc3Rvbi1sYXVuY2gsLS1kaXNhYmxlLXdlc3Rvbi1sYXVuY2gsbGlicGFtIGRybSIKKyMgVkEtQVBJIGRlc2t0b3AgcmVjb3JkZXIKK1BBQ0tBR0VDT05GSUdbdmFhcGldID0gIi0tZW5hYmxlLXZhYXBpLXJlY29yZGVyLC0tZGlzYWJsZS12YWFwaS1yZWNvcmRlcixsaWJ2YSIKKyMgV2VzdG9uIHdpdGggRUdMIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wgLS1lbmFibGUtc2ltcGxlLWVnbC1jbGllbnRzLC0tZGlzYWJsZS1lZ2wgLS1kaXNhYmxlLXNpbXBsZS1lZ2wtY2xpZW50cyx2aXJ0dWFsL2VnbCIKKyMgV2VzdG9uIHdpdGggY2Fpcm8gZ2xlc3YyIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbY2Fpcm8tZ2xlc3YyXSA9ICItLXdpdGgtY2Fpcm8tZ2xlc3YyLC0td2l0aC1jYWlybz1pbWFnZSxjYWlybyIKKyMgV2VzdG9uIHdpdGggbGNtcyBzdXBwb3J0CitQQUNLQUdFQ09ORklHW2xjbXNdID0gIi0tZW5hYmxlLWxjbXMsLS1kaXNhYmxlLWxjbXMsbGNtcyIKKyMgV2VzdG9uIHdpdGggd2VicCBzdXBwb3J0CitQQUNLQUdFQ09ORklHW3dlYnBdID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKKyMgV2VzdG9uIHdpdGggdW53aW5kaW5nIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGlidW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2VzdG9uIGRvZXNuJ3QgbmVlZCB0aGUgLmxhIGZpbGVzIHRvIGxvYWQgbW9kdWxlcywgc28gd2lwZSB0aGVtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vd2VzdG9uLyoubGEKKworCSMgSWYgWDExLCBzaGlwIGEgZGVza3RvcCBmaWxlIHRvIGxhdW5jaCBpdAorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iID0gIngxMSIgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisKKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKKwkJaW5zdGFsbCAke1dPUktESVJ9L3dlc3Rvbi5wbmcgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci80OHg0OC9hcHBzCisgICAgICAgIGZpCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1leGFtcGxlcyIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3dlc3RvbiAke2JpbmRpcn0vd2VzdG9uLXRlcm1pbmFsICR7YmluZGlyfS93ZXN0b24taW5mbyAke2JpbmRpcn0vd2VzdG9uLWxhdW5jaCAke2JpbmRpcn0vd2NhcC1kZWNvZGUgJHtsaWJleGVjZGlyfSAke2xpYmRpcn0vJHtCUE59Lyouc28gJHtkYXRhZGlyfSIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7YmluZGlyfS8qIgorCitSREVQRU5EU18ke1BOfSArPSAieGtleWJvYXJkLWNvbmZpZyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImxpYmVyYXRpb24tZm9udHMiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitHUk9VUEFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSB3ZXN0b24tbGF1bmNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hkZWZhdWx0cyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViNjlkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9YZGVmYXVsdHMKQEAgLTAsMCArMSwzIEBACitSeHZ0KnNjcm9sbEJhcl9yaWdodDogdHJ1ZQorUnh2dCpmb250OiB4ZnQ6TW9ubzpwaXhlbHNpemU9OQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlcnZlciBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTcwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlcnZlcgpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKyMKKworWFNFUlZFUj0vdXNyL2Jpbi9Yb3JnCisKKy4gL2V0Yy9wcm9maWxlCisKK0FSR1M9IiAtYnIgLXBuIgorCitESVNQTEFZPSc6MCcKKworZXhlYyB4aW5pdCAvZXRjL1gxMS9Yc2Vzc2lvbiAtLSAkWFNFUlZFUiAkRElTUExBWSAkQVJHUyAkKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzMxMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24KQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK2lmIFsgLXggL3Vzci9iaW4vZGJ1cy1sYXVuY2ggXTsgdGhlbgorICAgICMgQXMgdGhpcyBpcyB0aGUgWCBzZXNzaW9uIHNjcmlwdCwgYWx3YXlzIHN0YXJ0IGEgbmV3IERCdXMgc2Vzc2lvbi4KKyAgICBldmFsIGBkYnVzLWxhdW5jaCAtLXNoLXN5bnRheCAtLWV4aXQtd2l0aC1zZXNzaW9uIDwvZGV2L251bGxgCisgICAgZWNobyAiRC1CVVMgcGVyLXNlc3Npb24gZGFlbW9uIGFkZHJlc3MgaXM6ICREQlVTX1NFU1NJT05fQlVTX0FERFJFU1MiCitmaQorCisuIC9ldGMvcHJvZmlsZQorCitpZiBbIC1mICRIT01FLy5wcm9maWxlIF07IHRoZW4KKyAgICAuICRIT01FLy5wcm9maWxlCitmaQorCitTWVNTRVNTSU9ORElSPS9ldGMvWDExL1hzZXNzaW9uLmQKKworZXhwb3J0IENMVVRURVJfRElTQUJMRV9NSVBNQVBQRURfVEVYVD0xCisKK2ZvciBTRVNTSU9ORklMRSBpbiAkU1lTU0VTU0lPTkRJUi8qOyBkbworICAgIHNldCArZQorICAgIGNhc2UgIiRTRVNTSU9ORklMRSIgaW4KKyAgICAgICAgKi5zaCkKKyAgICAgICAgICAgIC4gIiRTRVNTSU9ORklMRSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICouc2hiZykKKyAgICAgICAgICAgICIkU0VTU0lPTkZJTEUiICYKKyAgICAgICAgICAgIDs7CisgICAgICAgICp+KQorICAgICAgICAgICAgIyBJZ25vcmUgYmFja3VwIGZpbGVzCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgIiRTRVNTSU9ORklMRSIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIHNldCAtZQorZG9uZQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEya2V5bWFwLnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkMTAyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEya2V5bWFwLnNoCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKKyMga2RyaXZlIDEuNCBkb2VzIG5vdCBoYXZlIGRlZmF1bHQga2V5bWFwIGluIHNlcnZlcgorI3htb2RtYXAgLSA8L2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU5NGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTN4ZGdiYXNlZGlycy5zaApAQCAtMCwwICsxLDEzIEBACisjIE1pbmltYWwvc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgWERHIEJhc2UgRGlyZWN0b3J5IHNwZWNpZmljYXRpb24uCisjIGh0dHA6Ly9zdGFuZGFyZHMuZnJlZWRlc2t0b3Aub3JnL2Jhc2VkaXItc3BlYy9iYXNlZGlyLXNwZWMtbGF0ZXN0Lmh0bWwKKyMKKyMgV2F5bGFuZCBuZWVkcyBYREdfUlVOVElNRV9ESVIsIHNvIHNldCBpdCB0byAvdG1wLiAgVGhpcyBpc24ndCBjb21wbGlhbnQgd2l0aAorIyB0aGUgc3BlY2lmaWNhdGlvbiAod3JvbmcgbW9kZSwgd3Jvbmcgb3duZXIpIGJ1dCBpdCdzIG1vc3RseSBzdWZmaWNpZW50LgorIworIyBJbiB0aGUgaWRlYWwgY2FzZSB3aGVyZSBTeXN0ZW1EIGlzIGJvb3RpbmcgYW5kIHVzZXJzcGFjZSBpcyBpbml0aWF0ZWQgYnkgYQorIyBTeXN0ZW1EIHVzZXIgc2Vzc2lvbiB0aGlzIHdpbGwgaGF2ZSBiZWVuIHNldCBhbHJlYWR5LCBzbyBkb24ndCBvdmVyd3JpdGUgaXQuCisKK2lmIFsgLXogIiRYR0RfUlVOVElNRV9ESVIiIF07IHRoZW4KKwlYREdfUlVOVElNRV9ESVI9Ii90bXAiCisgICAgICAgIGV4cG9ydCBYREdfUlVOVElNRV9ESVIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC84OXhkZ2F1dG9zdGFydC5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzAwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC84OXhkZ2F1dG9zdGFydC5zaApAQCAtMCwwICsxLDcgQEAKK1hER0FVVE9TVEFSVD0vZXRjL3hkZy9hdXRvc3RhcnQKK2lmIFsgLWQgJFhER0FVVE9TVEFSVCBdOyB0aGVuCisgICAgZm9yIFNDUklQVCBpbiAkWERHQVVUT1NUQVJULyo7IGRvCisgICAgICAgIENNRD1gZ3JlcCBeRXhlYz0gJFNDUklQVCB8IGN1dCAtZCAnPScgLWYgMmAKKyAgICAgICAgJENNRCAmCisgICAgZG9uZQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzkwWFdpbmRvd01hbmFnZXIuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzZkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC85MFhXaW5kb3dNYW5hZ2VyLnNoCkBAIC0wLDAgKzEsNyBAQAoraWYgWyAteCAkSE9NRS8uWHNlc3Npb24gXTsgdGhlbgorICAgIGV4ZWMgJEhPTUUvLlhzZXNzaW9uCitlbGlmIFsgLXggL3Vzci9iaW4veC1zZXNzaW9uLW1hbmFnZXIgXTsgdGhlbgorICAgIGV4ZWMgL3Vzci9iaW4veC1zZXNzaW9uLW1hbmFnZXIKK2Vsc2UKKyAgICBleGVjIC91c3IvYmluL3gtd2luZG93LW1hbmFnZXIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWExM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL2RlZmF1bHQueG1vZG1hcApAQCAtMCwwICsxLDI2MCBAQAora2V5Y29kZSAgIDggPQora2V5Y29kZSAgIDkgPSBFc2NhcGUKK2tleWNvZGUgIDEwID0gMSBleGNsYW0KK2tleWNvZGUgIDExID0gMiBhdAora2V5Y29kZSAgMTIgPSAzIG51bWJlcnNpZ24KK2tleWNvZGUgIDEzID0gNCBkb2xsYXIKK2tleWNvZGUgIDE0ID0gNSBwZXJjZW50CitrZXljb2RlICAxNSA9IDYgYXNjaWljaXJjdW0KK2tleWNvZGUgIDE2ID0gNyBhbXBlcnNhbmQgYnJhY2VsZWZ0CitrZXljb2RlICAxNyA9IDggYXN0ZXJpc2sgYnJhY2tldGxlZnQKK2tleWNvZGUgIDE4ID0gOSBwYXJlbmxlZnQgYnJhY2tldHJpZ2h0CitrZXljb2RlICAxOSA9IDAgcGFyZW5yaWdodCBicmFjZXJpZ2h0CitrZXljb2RlICAyMCA9IG1pbnVzIHVuZGVyc2NvcmUgYmFja3NsYXNoCitrZXljb2RlICAyMSA9IGVxdWFsIHBsdXMKK2tleWNvZGUgIDIyID0gQmFja1NwYWNlCitrZXljb2RlICAyMyA9IFRhYgora2V5Y29kZSAgMjQgPSBxIFEgcQora2V5Y29kZSAgMjUgPSB3IFcgdwora2V5Y29kZSAgMjYgPSBlIEUKK2tleWNvZGUgIDI3ID0gciBSIHIKK2tleWNvZGUgIDI4ID0gdCBUIHQKK2tleWNvZGUgIDI5ID0geSBZIHkKK2tleWNvZGUgIDMwID0gdSBVIHUKK2tleWNvZGUgIDMxID0gaSBJIGkKK2tleWNvZGUgIDMyID0gbyBPIG8KK2tleWNvZGUgIDMzID0gcCBQIHAKK2tleWNvZGUgIDM0ID0gYnJhY2tldGxlZnQgYnJhY2VsZWZ0CitrZXljb2RlICAzNSA9IGJyYWNrZXRyaWdodCBicmFjZXJpZ2h0IGFzY2lpdGlsZGUKK2tleWNvZGUgIDM2ID0gUmV0dXJuCitrZXljb2RlICAzNyA9IENvbnRyb2xfTAora2V5Y29kZSAgMzggPSBhIEEKK2tleWNvZGUgIDM5ID0gcyBTIHMKK2tleWNvZGUgIDQwID0gZCBECitrZXljb2RlICA0MSA9IGYgRgora2V5Y29kZSAgNDIgPSBnIEcgZwora2V5Y29kZSAgNDMgPSBoIEggaAora2V5Y29kZSAgNDQgPSBqIEogagora2V5Y29kZSAgNDUgPSBrIEsgawora2V5Y29kZSAgNDYgPSBsIEwgbAora2V5Y29kZSAgNDcgPSBzZW1pY29sb24gY29sb24KK2tleWNvZGUgIDQ4ID0gYXBvc3Ryb3BoZSBxdW90ZWRibAora2V5Y29kZSAgNDkgPSBncmF2ZSBhc2NpaXRpbGRlCitrZXljb2RlICA1MCA9IFNoaWZ0X0wKK2tleWNvZGUgIDUxID0gYmFja3NsYXNoIGJhcgora2V5Y29kZSAgNTIgPSB6IFogegora2V5Y29kZSAgNTMgPSB4IFggeAora2V5Y29kZSAgNTQgPSBjIEMKK2tleWNvZGUgIDU1ID0gdiBWIHYKK2tleWNvZGUgIDU2ID0gYiBCCitrZXljb2RlICA1NyA9IG4gTiBuCitrZXljb2RlICA1OCA9IG0gTSBtCitrZXljb2RlICA1OSA9IGNvbW1hIGxlc3MKK2tleWNvZGUgIDYwID0gcGVyaW9kIGdyZWF0ZXIKK2tleWNvZGUgIDYxID0gc2xhc2ggcXVlc3Rpb24KK2tleWNvZGUgIDYyID0gU2hpZnRfUgora2V5Y29kZSAgNjMgPSBLUF9NdWx0aXBseQora2V5Y29kZSAgNjQgPSBBbHRfTAora2V5Y29kZSAgNjUgPSBzcGFjZQora2V5Y29kZSAgNjYgPSBDYXBzX0xvY2sKK2tleWNvZGUgIDY3ID0gRjEgRjExCitrZXljb2RlICA2OCA9IEYyIEYxMgora2V5Y29kZSAgNjkgPSBGMyBGMTMKK2tleWNvZGUgIDcwID0gRjQgRjE0CitrZXljb2RlICA3MSA9IEY1IEYxNQora2V5Y29kZSAgNzIgPSBGNiBGMTYKK2tleWNvZGUgIDczID0gRjcgRjE3CitrZXljb2RlICA3NCA9IEY4IEYxOAora2V5Y29kZSAgNzUgPSBGOSBGMTkKK2tleWNvZGUgIDc2ID0gRjEwIEYyMAora2V5Y29kZSAgNzcgPSBOdW1fTG9jawora2V5Y29kZSAgNzggPSBTY3JvbGxfTG9jawora2V5Y29kZSAgNzkgPSBLUF83CitrZXljb2RlICA4MCA9IEtQXzgKK2tleWNvZGUgIDgxID0gS1BfOQora2V5Y29kZSAgODIgPSBLUF9TdWJ0cmFjdAora2V5Y29kZSAgODMgPSBLUF80CitrZXljb2RlICA4NCA9IEtQXzUKK2tleWNvZGUgIDg1ID0gS1BfNgora2V5Y29kZSAgODYgPSBLUF9BZGQKK2tleWNvZGUgIDg3ID0gS1BfMQora2V5Y29kZSAgODggPSBLUF8yCitrZXljb2RlICA4OSA9IEtQXzMKK2tleWNvZGUgIDkwID0gS1BfMAora2V5Y29kZSAgOTEgPSBLUF9EZWNpbWFsCitrZXljb2RlICA5MiA9CitrZXljb2RlICA5MyA9CitrZXljb2RlICA5NCA9IGxlc3MgZ3JlYXRlciBiYXIKK2tleWNvZGUgIDk1ID0gRjExCitrZXljb2RlICA5NiA9IEYxMgora2V5Y29kZSAgOTcgPQora2V5Y29kZSAgOTggPQora2V5Y29kZSAgOTkgPQora2V5Y29kZSAxMDAgPQora2V5Y29kZSAxMDEgPQora2V5Y29kZSAxMDIgPQora2V5Y29kZSAxMDMgPQora2V5Y29kZSAxMDQgPSBLUF9FbnRlcgora2V5Y29kZSAxMDUgPSBDb250cm9sX1IKK2tleWNvZGUgMTA2ID0gS1BfRGl2aWRlCitrZXljb2RlIDEwNyA9CitrZXljb2RlIDEwOCA9IE1vZGVfc3dpdGNoCitrZXljb2RlIDEwOSA9IEJyZWFrCitrZXljb2RlIDExMCA9IEhvbWUKK2tleWNvZGUgMTExID0gVXAKK2tleWNvZGUgMTEyID0gUHJpb3IKK2tleWNvZGUgMTEzID0gTGVmdAora2V5Y29kZSAxMTQgPSBSaWdodAora2V5Y29kZSAxMTUgPSBFbmQKK2tleWNvZGUgMTE2ID0gRG93bgora2V5Y29kZSAxMTcgPSBOZXh0CitrZXljb2RlIDExOCA9IEluc2VydAora2V5Y29kZSAxMTkgPSBEZWxldGUKK2tleWNvZGUgMTIwID0gTWVudQora2V5Y29kZSAxMjEgPSBGMTMKK2tleWNvZGUgMTIyID0gRjE0CitrZXljb2RlIDEyMyA9IEhlbHAKK2tleWNvZGUgMTI0ID0gRXhlY3V0ZQora2V5Y29kZSAxMjUgPSBGMTcKK2tleWNvZGUgMTI2ID0gS1BfU3VidHJhY3QKK2tleWNvZGUgMTI3ID0gUGF1c2UKK2tleWNvZGUgMTI4ID0KK2tleWNvZGUgMTI5ID0KK2tleWNvZGUgMTMwID0KK2tleWNvZGUgMTMxID0KK2tleWNvZGUgMTMyID0KK2tleWNvZGUgMTMzID0KK2tleWNvZGUgMTM0ID0KK2tleWNvZGUgMTM1ID0KK2tleWNvZGUgMTM2ID0KK2tleWNvZGUgMTM3ID0KK2tleWNvZGUgMTM4ID0KK2tleWNvZGUgMTM5ID0KK2tleWNvZGUgMTQwID0KK2tleWNvZGUgMTQxID0KK2tleWNvZGUgMTQyID0KK2tleWNvZGUgMTQzID0KK2tleWNvZGUgMTQ0ID0KK2tleWNvZGUgMTQ1ID0KK2tleWNvZGUgMTQ2ID0KK2tleWNvZGUgMTQ3ID0KK2tleWNvZGUgMTQ4ID0KK2tleWNvZGUgMTQ5ID0KK2tleWNvZGUgMTUwID0KK2tleWNvZGUgMTUxID0KK2tleWNvZGUgMTUyID0KK2tleWNvZGUgMTUzID0KK2tleWNvZGUgMTU0ID0KK2tleWNvZGUgMTU1ID0KK2tleWNvZGUgMTU2ID0KK2tleWNvZGUgMTU3ID0KK2tleWNvZGUgMTU4ID0KK2tleWNvZGUgMTU5ID0KK2tleWNvZGUgMTYwID0KK2tleWNvZGUgMTYxID0KK2tleWNvZGUgMTYyID0KK2tleWNvZGUgMTYzID0KK2tleWNvZGUgMTY0ID0KK2tleWNvZGUgMTY1ID0KK2tleWNvZGUgMTY2ID0KK2tleWNvZGUgMTY3ID0KK2tleWNvZGUgMTY4ID0KK2tleWNvZGUgMTY5ID0KK2tleWNvZGUgMTcwID0KK2tleWNvZGUgMTcxID0KK2tleWNvZGUgMTcyID0KK2tleWNvZGUgMTczID0KK2tleWNvZGUgMTc0ID0KK2tleWNvZGUgMTc1ID0KK2tleWNvZGUgMTc2ID0KK2tleWNvZGUgMTc3ID0KK2tleWNvZGUgMTc4ID0KK2tleWNvZGUgMTc5ID0KK2tleWNvZGUgMTgwID0KK2tleWNvZGUgMTgxID0KK2tleWNvZGUgMTgyID0KK2tleWNvZGUgMTgzID0KK2tleWNvZGUgMTg0ID0KK2tleWNvZGUgMTg1ID0KK2tleWNvZGUgMTg2ID0KK2tleWNvZGUgMTg3ID0KK2tleWNvZGUgMTg4ID0KK2tleWNvZGUgMTg5ID0KK2tleWNvZGUgMTkwID0KK2tleWNvZGUgMTkxID0KK2tleWNvZGUgMTkyID0KK2tleWNvZGUgMTkzID0KK2tleWNvZGUgMTk0ID0KK2tleWNvZGUgMTk1ID0KK2tleWNvZGUgMTk2ID0KK2tleWNvZGUgMTk3ID0KK2tleWNvZGUgMTk4ID0KK2tleWNvZGUgMTk5ID0KK2tleWNvZGUgMjAwID0KK2tleWNvZGUgMjAxID0KK2tleWNvZGUgMjAyID0KK2tleWNvZGUgMjAzID0KK2tleWNvZGUgMjA0ID0KK2tleWNvZGUgMjA1ID0KK2tleWNvZGUgMjA2ID0KK2tleWNvZGUgMjA3ID0KK2tleWNvZGUgMjA4ID0KK2tleWNvZGUgMjA5ID0KK2tleWNvZGUgMjEwID0KK2tleWNvZGUgMjExID0KK2tleWNvZGUgMjEyID0KK2tleWNvZGUgMjEzID0KK2tleWNvZGUgMjE0ID0KK2tleWNvZGUgMjE1ID0KK2tleWNvZGUgMjE2ID0KK2tleWNvZGUgMjE3ID0KK2tleWNvZGUgMjE4ID0KK2tleWNvZGUgMjE5ID0KK2tleWNvZGUgMjIwID0KK2tleWNvZGUgMjIxID0KK2tleWNvZGUgMjIyID0KK2tleWNvZGUgMjIzID0KK2tleWNvZGUgMjI0ID0KK2tleWNvZGUgMjI1ID0KK2tleWNvZGUgMjI2ID0KK2tleWNvZGUgMjI3ID0KK2tleWNvZGUgMjI4ID0KK2tleWNvZGUgMjI5ID0KK2tleWNvZGUgMjMwID0KK2tleWNvZGUgMjMxID0KK2tleWNvZGUgMjMyID0KK2tleWNvZGUgMjMzID0KK2tleWNvZGUgMjM0ID0KK2tleWNvZGUgMjM1ID0KK2tleWNvZGUgMjM2ID0KK2tleWNvZGUgMjM3ID0KK2tleWNvZGUgMjM4ID0KK2tleWNvZGUgMjM5ID0KK2tleWNvZGUgMjQwID0KK2tleWNvZGUgMjQxID0KK2tleWNvZGUgMjQyID0KK2tleWNvZGUgMjQzID0KK2tleWNvZGUgMjQ0ID0KK2tleWNvZGUgMjQ1ID0KK2tleWNvZGUgMjQ2ID0KK2tleWNvZGUgMjQ3ID0KK2tleWNvZGUgMjQ4ID0KK2tleWNvZGUgMjQ5ID0KK2tleWNvZGUgMjUwID0KK2tleWNvZGUgMjUxID0KK2tleWNvZGUgMjUyID0KK2tleWNvZGUgMjUzID0KK2tleWNvZGUgMjU0ID0KKworYWRkIHNoaWZ0ID0gU2hpZnRfTAorYWRkIHNoaWZ0ID0gU2hpZnRfUgorYWRkIHNoaWZ0ID0gTWVudQorYWRkIGxvY2sgPSBDYXBzX0xvY2sKK2FkZCBjb250cm9sID0gQ29udHJvbF9MCithZGQgY29udHJvbCA9IENvbnRyb2xfUgorYWRkIG1vZDEgPSBBbHRfTAorYWRkIG1vZDIgPSBOdW1fTG9jaworIW1vZDMgICAgICAKK2FkZCBtb2Q0ID0gTW9kZV9zd2l0Y2gKKyFtb2Q1ICAgICAgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZ3BsdjItbGljZW5zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZ3BsdjItbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmY5NzVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ncGx2Mi1saWNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzU1IEBACitDT1BZSU5HOiBhZGQgR1BMdjIgbGljZW5zZSBmaWxlCisKK3RoaXMgaXMgYSBsb2NhbCBmaWxlIHJlY2lwZSBhbmQgdGhlIGxpY2Vuc2UgZmlsZSBpcyBtaXNzaW5nLkluIG9yZGVyCit0byBwYXNzIHRoZSBsaWNlbnNlIGNoZWNrc3VtIGNoZWNraW5nLCB0aGUgbGljZW5zZSBmaWxlIGlzIG5lZWRlZC4gU28KK3RoaXMgcGF0Y2ggYWRkIHRoZSBHUEx2MiBsaWNlbnNlIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmIzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uXzAuMS5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkNvbW1vbiBYMTEgc2NyaXB0cyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKK1NFQ1RJT04gPSAieDExIgorUFIgPSAicjQ3IgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiB4ZHlwaW5mbyB4bW9kbWFwIHhpbml0CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImZpbGU6Ly9ldGMgXAorICAgICAgICAgICBmaWxlOi8vZ3BsdjItbGljZW5zZS5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWNwIC1SICR7U30vZXRjICR7RH0ke3N5c2NvbmZkaXJ9CisJY2htb2QgLVIgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9CisJZmluZCAke0R9JHtzeXNjb25mZGlyfSAtdHlwZSBmIC1uYW1lIFwqfiAtZXhlYyBybSAtcmYge30gXDsKK30KKworUkRFUEVORFNfJHtQTn0gPSAiZGJ1cy14MTEgeG1vZG1hcCB4ZHB5aW5mbyB4dHNjYWwgeGluaXQgZm9ybWZhY3RvciIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhkNDBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTaW1wbGUgWHNlcnZlciBJbml0IFNjcmlwdCAobm8gZG0pIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyMzEiCisKK1NSQ19VUkkgPSAiZmlsZTovL3hzZXJ2ZXItbm9kbSBcCisgICAgICAgICAgIGZpbGU6Ly9YdXNlcm5hbWUgXAorICAgICAgICAgICBmaWxlOi8vZ3BsdjItbGljZW5zZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly94c2VydmVyLW5vZG0uY29uZiBcCisiCisKK1MgPSAiJHtXT1JLRElSfSIKKworIyBTaW5jZSB3ZSByZWZlciB0byBST09UTEVTU19YIHdoaWNoIGlzIG5vcm1hbGx5IGVuYWJsZWQgcGVyLW1hY2hpbmUKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCB4c2VydmVyLW5vZG0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorICAgICAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQveHNlcnZlci1ub2RtCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veHNlcnZlci1ub2RtLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKyAgICAgICAgaWYgWyAiJHtST09UTEVTU19YfSIgPSAiMSIgXSA7IHRoZW4KKyAgICAgICAgICAgIHNlZCAtaSAncyFeSE9NRT0uKiFIT01FPS9ob21lL3h1c2VyIScgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgICAgIHNlZCAtaSAncyFeVXNlcj0uKiFVc2VyPXh1c2VyIScgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veHNlcnZlci1ub2RtLnNlcnZpY2UKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9JHtST09UX0hPTUV9IScgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgICAgIHNlZCAtaSAnL15Vc2VyPS9kJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdmluaXQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEKKyAgICAgICAgICAgIGluc3RhbGwgWHVzZXJuYW1lICR7RH0ke3N5c2NvbmZkaXJ9L1gxMQorICAgICAgICBmaQorICAgIGZpCit9CisKK1JERVBFTkRTXyR7UE59ID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1JPT1RMRVNTX1gnLCAnMScsICd4dXNlci1hY2NvdW50JywgJycsIGQpfSIKKworSU5JVFNDUklQVF9OQU1FID0gInhzZXJ2ZXItbm9kbSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDkgNSAuIHN0b3AgMjAgMCAxIDIgMyA2IC4iCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAieHNlcnZlci1ub2RtLnNlcnZpY2UiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZSBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L1h1c2VybmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYwZTVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lCkBAIC0wLDAgKzEgQEAKK3h1c2VyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9ncGx2Mi1saWNlbnNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmY5NzVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvZ3BsdjItbGljZW5zZS5wYXRjaApAQCAtMCwwICsxLDM1NSBAQAorQ09QWUlORzogYWRkIEdQTHYyIGxpY2Vuc2UgZmlsZQorCit0aGlzIGlzIGEgbG9jYWwgZmlsZSByZWNpcGUgYW5kIHRoZSBsaWNlbnNlIGZpbGUgaXMgbWlzc2luZy5JbiBvcmRlcgordG8gcGFzcyB0aGUgbGljZW5zZSBjaGVja3N1bSBjaGVja2luZywgdGhlIGxpY2Vuc2UgZmlsZSBpcyBuZWVkZWQuIFNvCit0aGlzIHBhdGNoIGFkZCB0aGUgR1BMdjIgbGljZW5zZSBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmYTBhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0KQEAgLTAsMCArMSw2NSBAQAorIyEvYmluL3NoCisjCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiB4c2VydmVyCisjIFJlcXVpcmVkLVN0YXJ0OiAkbG9jYWxfZnMgJHJlbW90ZV9mcyBkYnVzCisjIFJlcXVpcmVkLVN0b3A6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgMiAzIDYKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2tpbGxwcm9jKCkgeyAgICAgICAgICAgICMga2lsbCB0aGUgbmFtZWQgcHJvY2VzcyhlcykKKyAgICAgICAgcGlkPWAvYmluL3BpZG9mICQxYAorICAgICAgICBbICIkcGlkIiAhPSAiIiBdICYmIGtpbGwgJHBpZAorfQorCityZWFkIENNRExJTkUgPCAvcHJvYy9jbWRsaW5lCitmb3IgeCBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgY2FzZSAkeCBpbgorICAgICAgICB4MTE9ZmFsc2UpCisJCWVjaG8gIlggU2VydmVyIGRpc2FibGVkIiAKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgIC4gL2V0Yy9wcm9maWxlCisgICAgICAgdXNlcm5hbWU9cm9vdAorICAgICAgIGVjaG8gIlN0YXJ0aW5nIFhzZXJ2ZXIiCisgICAgICAgaWYgWyAtZiAvZXRjL1gxMS9YdXNlcm5hbWUgXTsgdGhlbgorICAgICAgICAgICB1c2VybmFtZT1gY2F0IC9ldGMvWDExL1h1c2VybmFtZWAKKyAgICAgICAgICAgIyBzZXR0aW5nIGZvciByb290bGVzcyBYCisgICAgICAgICAgIGNobW9kIG8rdyAvdmFyL2xvZworICAgICAgICAgICBjaG1vZCBnK3IgL2Rldi90dHlbMC0zXQorICAgICAgICAgICAjIGhpZHJhdyBkZXZpY2UgaXMgcHJvYmFibHkgbmVlZGVkCisgICAgICAgICAgIGlmIFsgLWUgL2Rldi9oaWRyYXcwIF07IHRoZW4KKyAgICAgICAgICAgICAgIGNobW9kIG8rcncgL2Rldi9oaWRyYXcqCisgICAgICAgICAgIGZpCisgICAgICAgZmkKKyAgICAgICAjIFVzaW5nIHN1IHJhdGhlciB0aGFuIHN1ZG8gYXMgbGF0ZXN0IDEuOC4xIGNhdXNlIGZhaWx1cmUgW1lPQ1RPICMxMjExXQorICAgICAgIHN1IC1sIC1jICcvZXRjL1gxMS9Yc2VydmVyJicgJHVzZXJuYW1lIAorICAgICAgICMgV2FpdCBmb3IgdGhlIGRlc2t0b3AgdG8gc2F5IGl0cyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgIyBiZWZvcmUgbG9hZGluZyB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtCisgICAgICAgIyBkYnVzLXdhaXQgb3JnLm1hdGNoYm94X3Byb2plY3QuZGVza3RvcCBMb2FkZWQKKyAgOzsKKworICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBYU2VydmVyIgorICAgICAgICBraWxscHJvYyB4aW5pdAorICAgICAgICBzbGVlcCAxCisgICAgICAgIGNodnQgMSAmCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgICQwIHN0YXJ0CisgIDs7CisKKyAgKikKKyAgICAgICAgZWNobyAidXNhZ2U6ICQwIHsgc3RhcnQgfCBzdG9wIHwgcmVzdGFydCB9IgorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwNTgyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5jb25mCkBAIC0wLDAgKzEgQEAKK0hPTUU9L2hvbWUvcm9vdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQ5NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1Yc2VydmVyIHN0YXJ0dXAgd2l0aG91dCBhIGRpc3BsYXkgbWFuYWdlcgorCitbU2VydmljZV0KK1VzZXI9cm9vdAorRW52aXJvbm1lbnRGaWxlPS9ldGMvZGVmYXVsdC94c2VydmVyLW5vZG0KK0V4ZWNTdGFydD0vZXRjL1gxMS9Yc2VydmVyCisKK1tJbnN0YWxsXQorQWxpYXM9ZGlzcGxheS1tYW5hZ2VyLnNlcnZpY2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvZW5kaWFuLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvZW5kaWFuLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1MzhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9lbmRpYW4tZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2xpYnZuY3NlcnZlcjogcmVwbGFjZSBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOIHdpdGggV09SRFNfQklHRU5ESUFOCisKK3NpbmNlIG1hY3JvIEFDX0NfQklHRU5ESUFOIGlzIHVzZWQgaW4gYXV0b2NvbmYgYW5kIFdPUkRTX0JJR0VORElBTiBpcworYXV0b21hdGljYWxseSBzZXQgZm9yIGRpZmZlcmVudCBhcmNoLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIFdPUkRTX0JJR0VORElBTgoraW5zdGVhZCBvZiBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOLCB3aGljaCBjdWFzZSBpc3N1ZSBpbiBtaXBzLgorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2xpYnZuY3NlcnZlci9tYWluLmMgYi9saWJ2bmNzZXJ2ZXIvbWFpbi5jCitpbmRleCBiNmJkOTMwLi44YmJiN2JmIDEwMDY0NAorLS0tIGEvbGlidm5jc2VydmVyL21haW4uYworKysrIGIvbGlidm5jc2VydmVyL21haW4uYworQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIE1VVEVYKGV4dE11dGV4KTsKKyAKKyBzdGF0aWMgaW50IHJmYkVuYWJsZUxvZ2dpbmc9MTsKKyAKKy0jaWZkZWYgTElCVk5DU0VSVkVSX1dPUkRTX0JJR0VORElBTgorKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyBjaGFyIHJmYkVuZGlhblRlc3QgPSAoMT09MCk7CisgI2Vsc2UKKyBjaGFyIHJmYkVuZGlhblRlc3QgPSAoMT09MSk7CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvc3RhcnRpbmctZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZTQwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMvZmlsZXMvc3RhcnRpbmctZml4LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKKyItZ3VpIiAmICItcmZicG9ydCIgcmVxdWlyZSAid2lzaCIgaW5zdGFsbGVkLCBvciBlbHNlIHgxMXZuYyBmYWlscyB0byBzdGFydC4KK1JlbW92aW5nIHRoZXNlIDIgcGFyYW1ldGVycyBtYWtlcyB4MTF2bmMgd29ya3Mgd2VsbCBvbiBwb2t5IHNhdG8gaW1hZ2UuCisKK0FkZCBhbHNvIC1za2lwX2xvY2trZXlzIG9wdGlvbiB0byBpZ25vcmUgYWxsIENhcHNfTG9jaywgU2hpZnRfTG9jaywgTnVtX0xvY2ssCitTY3JvbGxfTG9jayBrZXlzeW1zIHJlY2VpdmVkIGZyb20gdmlld2VycywgaW4gb3JkZXIgdG8gbGVhdmUgdGhlIGxvY2sgc3RhdGUgb24KK3RoZSBzZXJ2ZXIgc2lkZSB1bmNoYW5nZWQuIFlldCwgdGhlIGtleXMgd2lsbCBhcHBlYXIgY29ycmVjdGx5LgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogeDExdm5jLTAuOS4xMi94MTF2bmMveDExdm5jLmRlc2t0b3AKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4MTF2bmMtMC45LjEyLm9yaWcveDExdm5jL3gxMXZuYy5kZXNrdG9wCTIwMTEtMDMtMDMgMTA6MzM6MTguMDAwMDAwMDAwICswODAwCisrKysgeDExdm5jLTAuOS4xMi94MTF2bmMveDExdm5jLmRlc2t0b3AJMjAxMS0wMy0wMyAxMDozNToyMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDcgKzEsNyBAQAorIFtEZXNrdG9wIEVudHJ5XQorIE5hbWU9WDExVk5DIFNlcnZlcgorIENvbW1lbnQ9U2hhcmUgdGhpcyBkZXNrdG9wIGJ5IFZOQworLUV4ZWM9eDExdm5jIC1ndWkgdHJheT1zZXRwYXNzIC1yZmJwb3J0IFBST01QVCAtYmcgLW8gJSVIT01FLy54MTF2bmMubG9nLiUlVk5DRElTUExBWQorK0V4ZWM9eDExdm5jIC1iZyAtcmZicG9ydCA1OTAwIC1za2lwX2xvY2trZXlzIC1vICUlSE9NRS8ueDExdm5jLmxvZy4lJVZOQ0RJU1BMQVkKKyBJY29uPWNvbXB1dGVyCisgVGVybWluYWw9ZmFsc2UKKyBUeXBlPUFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL3gxMXZuY18wLjkuMTMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL3gxMXZuY18wLjkuMTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwMjQxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMveDExdm5jXzAuOS4xMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkV4cG9ydHMgeW91ciBYIHNlc3Npb24gb24tdGhlLWZseSB2aWEgVk5DIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rYXJscnVuZ2UuY29tL3gxMXZuYy8iCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorQVVUSE9SID0gIkthcmwgUnVuZ2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM2MWI2YjgzN2NhZDI2YzY5MDBhOTI2YjYyYWFkYTVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3gxMXZuYy94MTF2bmMuaDtlbmRsaW5lPTMzO21kNT02Zjk1ZGM2NTM1NDY3ZDdlZTE1NjNmZDQzNGZiMzcyZSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGlidm5jc2VydmVyL3gxMXZuYy8ke1BWfS94MTF2bmMtJHtQVn0udGFyLmd6XAorICAgICAgICAgICBmaWxlOi8vc3RhcnRpbmctZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2VuZGlhbi1maXgucGF0Y2ggIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTM3MmVjNGZlODIxMTIyMTU0N2IxYzEwOGNmNTZlNGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjY4MjlmMmU2Mjk2NjdhNTI4NGRlNjJiMDgwYjEzMTI2YTA3MzY0OTlmZTQ3Y2RiNDQ3YWVkYjA3YTU5ZjEzYiIKKworREVQRU5EUyA9ICJvcGVuc3NsIHZpcnR1YWwvbGlieDExIGxpYnhleHQganBlZyB6bGliIGxpYnhmaXhlcyBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4dHN0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0td2l0aC1hdmFoaSwtLXdpdGhvdXQtYXZhaGksYXZhaGkiCitQQUNLQUdFQ09ORklHW3hpbmVyYW1hXSA9ICItLXdpdGgteGluZXJhbWEsLS13aXRob3V0LXhpbmVyYW1hLGxpYnhpbmVyYW1hIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYWM1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2ZpeF93YXRjaF9jdXJzb3IucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorRml4IHR5cG8gaW4gTWFrZWZpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xLm9yaWcvY3Vyc29ycy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA3IDIyOjI1OjA0LjAwMTQzNTMwNSArMDAwMAorKysrIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA3IDIyOjI1OjA0LjA2MTQzNTMwMiArMDAwMAorQEAgLTc5LDcgKzc5LDcgQEAKKyAJdWxfYW5nbGUgXAorIAl1cl9hbmdsZSBcCisgCXZfZG91YmxlX2Fycm93IFwKKy0Jd2F0Y2hhIFwKKysJd2F0Y2ggXAorIAl4dGVybSAgCisgCisgQ1VSU09SX0RJUiA9ICQoZGF0YWRpcikvaWNvbnMveGN1cnNvci10cmFuc3BhcmVudC9jdXJzb3JzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL3VzZS1yZWxhdGl2ZS1zeW1saW5rcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjhmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL3VzZS1yZWxhdGl2ZS1zeW1saW5rcy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVc2UgcmVsYXRpdmUgc3ltbGluayBmb3IgbGluayByYXRoZXIgdGhhbiBhYnNvbHV0ZSBwYXRoIHdoaWNoIAorZG9lc24ndCB3b3JrIHdlbGwgaW4gREVTVERJUiBzZXR0aW5nLgorCitBbHNvIGZpeCBvdXQgb2YgdHJlZSBidWlsZHMgdG8gdXNlIGNvcnJlY3Qgc3JjZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8zLzgKKworSW5kZXg6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEub3JpZy9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDMuOTMzNDM1MzA3ICswMDAwCisrKysgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MjcuMjkzNDM0NzU1ICswMDAwCitAQCAtODgsOSArODgsOSBAQAorIAorIGluc3RhbGwtZGF0YS1sb2NhbDoKKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChDVVJTT1JfRElSKTsgCistCSQoSU5TVEFMTF9EQVRBKSAkKENVUlNPUl9SRUFMKSAkKERFU1RESVIpJChDVVJTT1JfRElSKS8gCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJChDVVJTT1JfUkVBTCkgJChERVNURElSKSQoQ1VSU09SX0RJUikvCisgCWZvciBDVVJTT1IgaW4gJChDVVJTT1JfTkFNRVMpOyBkbyBcCisgCQllY2hvICctLSBJbnN0YWxsaW5nIGN1cnNvciAnJCRDVVJTT1I7IFwKKy0JCWxuIC1zICQoREVTVERJUikkKENVUlNPUl9ESVIpL3RyYW5zcCAkKERFU1RESVIpJChDVVJTT1JfRElSKS8kJENVUlNPUjsgXAorKwkJbG4gLXMgdHJhbnNwICQoREVTVERJUikkKENVUlNPUl9ESVIpLyQkQ1VSU09SOyBcCisgCWRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjY4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiVHJhbnNwYXJlbnQgWDExIGN1cnNvciB0aGVtZSBmb3IgdG91Y2hzY3JlZW5zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94L3V0aWxzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4X3dhdGNoX2N1cnNvci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjdiMGM2MjMwNDlkNGFhYjIwNjAwZDY0NzNmOGFhYjIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIyNmFkZjJkNTAzZDAxMjk5NzE4MzkwYWUzOWRhYjQ2OTFhNjcyMjBkZTA5NDIzYmUwMzY0ZTlhMDYwYmY3ZTQiCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L2ljb25zL3hjdXJzb3ItdHJhbnNwYXJlbnQvY3Vyc29ycy8qIgorCitpbmhlcml0IGF1dG90b29scyBhbGxhcmNoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcG9pbnRlcmNhbC54aW5wdXQgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXQvcG9pbnRlcmNhbC54aW5wdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzM2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dC9wb2ludGVyY2FsLnhpbnB1dApAQCAtMCwwICsxIEBACisjIHJlcGxhY2Ugd2l0aCB2YWxpZCBtYWNoaW5lIHNwZWNpZmljIHBvaW50ZXJjYWwueGlucHV0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXRfMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM0OGMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0XzAuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGRhdGEgZnJvbSB4aW5wdXQtY2FsaWJyYXRvciIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInI3IgorCitTUkNfVVJJID0gImZpbGU6Ly9wb2ludGVyY2FsLnhpbnB1dCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAjIE9ubHkgaW5zdGFsbCBmaWxlIGlmIGl0IGhhcyBhIGNvbnRlbnRzCisgICAgaWYgWyAtcyAke1N9L3BvaW50ZXJjYWwueGlucHV0IF0gJiZcCisgICAgICAgWyAhIC1uICIkKGhlYWQgLW4xICR7U30vcG9pbnRlcmNhbC54aW5wdXR8Z3JlcCAicmVwbGFjZS4qcG9pbnRlcmNhbFwueGlucHV0IikiIF07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vcG9pbnRlcmNhbC54aW5wdXQgJHtEfSR7c3lzY29uZmRpcn0vCisgICAgZmkKK30KKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3BvaW50ZXJjYWwueGlucHV0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yLzMweGlucHV0X2NhbGlicmF0ZS5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5MDcyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci8zMHhpbnB1dF9jYWxpYnJhdGUuc2gKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK2lmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCisJL3Vzci9iaW4veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaAorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5ODI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvci9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDE0NzM0YTkzYmQzZmMzMjMzMjU0NTllMjRiMDQ3OTU0MjJlMzk1ZTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDEgSnVsIDIwMTMgMTU6Mzg6MDIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWxsb3cgeGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCB0byBiZSBydW4gYXMgbm9ybWFsCisgdXNlcgorCitBbGxvdyBub3JtYWwgdXNlciB0byBjcmVhdGUgdGhlaXIgb3duIHBvaW50ZXJjYWwueGlucHV0IGZpbGVzIHRoYXQKK292ZXJyaWRlIHRoZSBzeXN0ZW0gcG9pbnRlcmNhbCBmaWxlIGluIC9ldGMuCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKy0tLQorIHNjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCB8ICAgMzMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCBiL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAoraW5kZXggZmNjYjE5Ny4uMGFkYTdkYSAxMDA3NTUKKy0tLSBhL3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaAorKysrIGIvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCitAQCAtMTEsMTkgKzExLDMyIEBACisgUEFUSD0iL3Vzci9iaW46JFBBVEgiCisgCisgQklOQVJZPSJ4aW5wdXRfY2FsaWJyYXRvciIKKy1DQUxGSUxFPSIvZXRjL3BvaW50ZXJjYWwueGlucHV0IgorLUxPR0ZJTEU9Ii92YXIvbG9nL3hpbnB1dF9jYWxpYnJhdG9yLnBvaW50ZXJjYWwubG9nIgorK1NZU19DQUxGSUxFPSIvZXRjL3BvaW50ZXJjYWwueGlucHV0IgorK1VTRVJfQ0FMRklMRT0iJEhPTUUvLnBvaW50ZXJjYWwvcG9pbnRlcmNhbC54aW5wdXQiCisgCistaWYgWyAtZSAkQ0FMRklMRSBdIDsgdGhlbgorLSAgaWYgZ3JlcCByZXBsYWNlICRDQUxGSUxFIDsgdGhlbgorLSAgICBlY2hvICJFbXB0eSBjYWxpYnJhdGlvbiBmaWxlIGZvdW5kLCByZW1vdmluZyBpdCIKKy0gICAgcm0gJENBTEZJTEUKKy0gIGVsc2UKKy0gICAgZWNobyAiVXNpbmcgY2FsaWJyYXRpb24gZGF0YSBzdG9yZWQgaW4gJENBTEZJTEUiCistICAgIC4gJENBTEZJTEUgJiYgZXhpdCAwCistICBmaQorK2lmIFsgIiRVU0VSIiA9ICJyb290IiBdOyB0aGVuCisrICBMT0dGSUxFPSIvdmFyL2xvZy94aW5wdXRfY2FsaWJyYXRvci5wb2ludGVyY2FsLmxvZyIKKysgIENBTEZJTEVTPSIkU1lTX0NBTEZJTEUiCisrZWxzZQorKyAgTE9HRklMRT0iJEhPTUUvLnBvaW50ZXJjYWwveGlucHV0X2NhbGlicmF0b3IucG9pbnRlcmNhbC5sb2ciCisrICBDQUxGSUxFUz0iJFVTRVJfQ0FMRklMRSAkU1lTX0NBTEZJTEUiCisrICBta2RpciAtcCAiJEhPTUUvLnBvaW50ZXJjYWwiCisgZmkKKyAKKytmb3IgQ0FMRklMRSBpbiAkQ0FMRklMRVM7IGRvCisrICBpZiBbIC1lICRDQUxGSUxFIF07IHRoZW4KKysgICAgaWYgZ3JlcCByZXBsYWNlICRDQUxGSUxFIDsgdGhlbgorKyAgICAgIGVjaG8gIkVtcHR5IGNhbGlicmF0aW9uIGZpbGUgZm91bmQsIHJlbW92aW5nIGl0IgorKyAgICAgIHJtICRDQUxGSUxFIDI+L2Rldi9udWxsIHx8IHRydWUKKysgICAgZWxzZQorKyAgICAgIGVjaG8gIlVzaW5nIGNhbGlicmF0aW9uIGRhdGEgc3RvcmVkIGluICRDQUxGSUxFIgorKyAgICAgIC4gJENBTEZJTEUgJiYgZXhpdCAwCisrICAgIGZpCisrICBmaQorK2RvbmUKKysKKytbICIkVVNFUiIgIT0gInJvb3QiIF0gJiYgQ0FMRklMRT0kVVNFUl9DQUxGSUxFCisrCisgQ0FMREFUQT1gJEJJTkFSWSAtLW91dHB1dC10eXBlIHhpbnB1dCAtdiB8IHRlZSAkTE9HRklMRSB8IGdyZXAgJyAgICB4aW5wdXQgc2V0JyB8IHNlZCAncy9eICAgIC8vZzsgcy8kLzsvZydgCisgaWYgWyAhIC16ICIkQ0FMREFUQSIgXSA7IHRoZW4KKyAgIGVjaG8gJENBTERBVEEgPiAkQ0FMRklMRQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGUzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3JfZ2l0LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gcHJvZ3JhbSBmb3IgWDExIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS94aW5wdXRfY2FsaWJyYXRvciIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvY2FsaWJyYXRvci5jcHA7ZW5kbGluZT0yMjttZDU9MWJjYmEwOGY2N2NkYjU2ZjM0MDIxNTU3ODk4ZTRiNWEiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhpIgorCitQViA9ICIwLjcuNStnaXQke1NSQ1BWfSIKK1BSID0gInI2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ1JFViA9ICJjMDFjNWFmODA3Y2I0YjAxNTdiODgyYWIwN2E4OTNkZjlhODEwMTExIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3RpYXMveGlucHV0X2NhbGlicmF0b3IuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovLzMweGlucHV0X2NhbGlicmF0ZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9BbGxvdy14aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoLXRvLWJlLXJ1bi1hcy1uLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCisjIGZvcmNlIG5hdGl2ZSBYMTEgdWkgYXMgd2UgZG9uJ3QgaGF2ZSBndGsrIGluIERFUEVORFMKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWd1aT14MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaCAke0R9JHtiaW5kaXJ9L3hpbnB1dF9jYWxpYnJhdG9yX29uY2Uuc2gKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vMzB4aW5wdXRfY2FsaWJyYXRlLnNoICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS94ZGcvYXV0b3N0YXJ0CisgICAgc2VkIC1lICdzLF5FeGVjPS4qLEV4ZWM9JHtiaW5kaXJ9L3hpbnB1dF9jYWxpYnJhdG9yX29uY2Uuc2gsJyAke1N9L3NjcmlwdHMveGlucHV0X2NhbGlicmF0b3IuZGVza3RvcCA+ICR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQveGlucHV0X2NhbGlicmF0b3IuZGVza3RvcAorfQorCitGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS94ZGcvYXV0b3N0YXJ0IgorUkRFUEVORFNfJHtQTn0gPSAieGlucHV0IGZvcm1mYWN0b3IiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwb2ludGVyY2FsLXhpbnB1dCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRkaXJfMS4wLjcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTNlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250ZGlyXzEuMC43LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjcmVhdGUgYW4gaW5kZXggb2YgWCBmb250IGZpbGVzIGluIGEgZGlyZWN0b3J5IgorCitERVNDUklQVElPTiA9ICJGb3IgZWFjaCBkaXJlY3RvcnkgYXJndW1lbnQsIG1rZm9udGRpciByZWFkcyBhbGwgb2YgdGhlIFwKK2ZvbnQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4gVGhlIGZvbnQgbmFtZXMgYW5kIHJlbGF0ZWQgZGF0YSBhcmUgd3JpdHRlbiBcCitvdXQgdG8gdGhlIGZpbGVzIFwiZm9udHMuZGlyXCIsIFwiZm9udHMuc2NhbGVcIiwgYW5kIFwiZm9udHMuYWxpYXNcIi4gIFwKK1RoZSBYIHNlcnZlciBhbmQgZm9udCBzZXJ2ZXIgdXNlIHRoZXNlIGZpbGVzIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBmb250IFwKK2ZpbGVzLiIKKworUEUgPSAiMSIKK1BSID0gIiR7SU5DX1BSfS4wIgorCitSREVQRU5EU18ke1BOfSArPSAibWtmb250c2NhbGUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgKz0gIm1rZm9udHNjYWxlLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0ZmNmMmI5MGNhZGJmYzE1MDA5YjllMTI0ZGMzYTNmIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMThjNDI5MTQ4Yzk2YzIwNzllZGRhOTIyYTJiNjc2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTZkNTJhNDgyZGYxMzA0ODRlNTFmZDA2NmQxYjZlZGE3YzJjMDJkZGJjOTFmZTZlMmJlMWI5YzRlNzMwNjUzMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRzY2FsZV8xLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRzY2FsZV8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udHNjYWxlXzEuMS4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjcmVhdGUgYW4gaW5kZXggb2Ygc2NhbGFibGUgZm9udCBmaWxlcyBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiRm9yIGVhY2ggZGlyZWN0b3J5IGFyZ3VtZW50LCBta2ZvbnRzY2FsZSByZWFkcyBhbGwgb2YgdGhlIFwKK3NjYWxhYmxlIGZvbnQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4gRm9yIGV2ZXJ5IGZvbnQgZmlsZSBmb3VuZCwgYW4gWDExIFwKK2ZvbnQgbmFtZSAoWExGRCkgaXMgZ2VuZXJhdGVkLCBhbmQgaXMgd3JpdHRlbiB0b2dldGhlciB3aXRoIHRoZSBmaWxlIFwKK25hbWUgdG8gYSBmaWxlIGZvbnRzLnNjYWxlIGluIHRoZSBkaXJlY3RvcnkuICBUaGUgcmVzdWx0aW5nIGZvbnRzLnNjYWxlIFwKK2lzIHVzZWQgYnkgdGhlIG1rZm9udGRpciBwcm9ncmFtLiIKKworREVQRU5EUyA9ICJ1dGlsLW1hY3Jvcy1uYXRpdmUgemxpYiBsaWJmb250ZW5jIGZyZWV0eXBlIHhwcm90byIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJlMGQxMjlkMDUzMDUxNzZkMWE3OTBlMGFjMWFjYjdmIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWJkZDZlYmZhNjJiMWJiZDQ3NDkwNmFjODZhNDBmZDgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGM2ZDUyMjhhZjg4NTQ3N2I5YWVjNjBjYTZmMTcyNTc4ZTdkMmRlNDIyMzQzNTdhZjYyZmIwMDQzOTQ1M2YyMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9yZ2JfMS4wLjYuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjY4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvcmdiXzEuMC42LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlgxMSBjb2xvciBuYW1lIGRhdGFiYXNlIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIGJvdGggdGhlIGxpc3QgbWFwcGluZyBYIGNvbG9yIG5hbWVzIFwKK3RvIFJHQiB2YWx1ZXMgKHJnYi50eHQpIGFuZCwgaWYgY29uZmlndXJlZCB0byB1c2UgYSBkYXRhYmFzZSBmb3IgY29sb3IgXAorbG9va3VwLCB0aGUgcmdiIHByb2dyYW0gdG8gY29udmVydCB0aGUgdGV4dCBmaWxlIGludG8gdGhlIGJpbmFyeSBkYXRhYmFzZSBcCitmb3JtYXQuIgorCitERVBFTkRTICs9ICIgeHByb3RvIHV0aWwtbWFjcm9zIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWY1OThhZGJlMjQxYmQwYjBiOTExMzgzMWY2ZTI0OWEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWFiNWJiZDc2NDJlNWM3ODQ0MjkzMDdlYzIxMGQxOTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmJjYTdjNmFhNTk5MzliOWY2YTBmYjlmZmYxNWRmZDYyMTc2NDIwZmZkNGFlMzBjOGQ5MmE2YTEyNWZiZTZiMCIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vWDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3gxMXBlcmZfMS42LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkzNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3gxMXBlcmZfMS42LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIHNlcnZlciBwZXJmb3JtYW5jZSB0ZXN0IHByb2dyYW0iCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4MTFwZXJmIHByb2dyYW0gcnVucyBvbmUgb3IgbW9yZSBwZXJmb3JtYW5jZSB0ZXN0cyBcCithbmQgcmVwb3J0cyBob3cgZmFzdCBhbiBYIHNlcnZlciBjYW4gZXhlY3V0ZSB0aGUgdGVzdHMuIgorCisKK0RFUEVORFMgKz0gImxpYnhtdSBsaWJ4cmVuZGVyIGxpYnhmdCBsaWJ4ZXh0IGZvbnRjb25maWciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQyOGNhNGQ2N2E0MWZjZDRmYzMyODNkY2U5YmJkYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3gxMXBlcmYuaDtlbmRsaW5lPTI0O21kNT0yOTU1NTA2NmJhZjQwNmExMDVmZjkxN2FjMjViMmQwMSIKKworUEUgPSAiMSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9YMTEveDExcGVyZmNvbXAvKiIKKworU1JDX1VSSVttZDVzdW1dID0gImYwYjI0ZTRkOGJlYjYyMmE0MTllODQzMWUxYzAzY2Q3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4NzA5OGRlYzE5NDc1NzJkNzBjNjI2OTdhN2I3MGJkZTFhYjU2NjgyMzdkNDY2MDA4MGVhZGU2YmMwOTY3NTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGF1dGhfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3M2Y0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKK1NVTU1BUlkgPSAiWCBhdXRob3JpdHkgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiWCBhcHBsaWNhdGlvbiB0byBlZGl0IGFuZCBkaXNwbGF5IHRoZSBhdXRob3JpemF0aW9uIFwKK2luZm9ybWF0aW9uIHVzZWQgaW4gY29ubmVjdGluZyB0byB0aGUgWCBzZXJ2ZXIuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZWM3NGRkN2VhNGQxMGM0NzE1YTdjNDRmMTU5YTQwYiIKKworREVQRU5EUyArPSAibGlieGF1IGxpYnhleHQgbGlieG11IgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkNjAwM2YzMjgzOGQ1YjY4OGUyYzhhMTMxMDgzMjcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2Y2UxNTIzZWI0OGIxZjhhNGY0MjQ0ZmUxYzNkOGU2YWYxYTNiN2Q0YjBlNjA2MzU4MjQyMWIwYjY4ZGMyOGYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm8vZGlzYWJsZS14a2IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm8vZGlzYWJsZS14a2IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MTk5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mby9kaXNhYmxlLXhrYi5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhkcHlpbmZvLTEuMy4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhkcHlpbmZvLTEuMy4wLm9yaWcvY29uZmlndXJlLmFjCTIwMTEtMTAtMjEgMjE6MzQ6MjEuMDAwMDAwMDAwIC0wNzAwCisrKysgeGRweWluZm8tMS4zLjAvY29uZmlndXJlLmFjCTIwMTEtMTEtMjggMjA6MDY6NTYuNTU0MDU2OTM1IC0wODAwCitAQCAtNDcsMTEgKzQ3LDE1IEBACisgCUFDX0NIRUNLX0hFQURFUlMoW1gxMS9leHRlbnNpb25zL211bHRpYnVmLmggWDExL2V4dGVuc2lvbnMvWFNobS5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisgCisrQUNfQVJHX0VOQUJMRSh4a2IsIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteGtiXSwgW0Rpc2FibGUgWEtCIHN1cHBvcnRdKSwKKysJWEtCPSIkZW5hYmxldmFsIiwgWEtCPSJ5ZXMiKQorK2lmIHRlc3QgIngkWEtCIiA9ICJ4eWVzIiA7IHRoZW4KKyBQS0dfQ0hFQ0tfTU9EVUxFUyhEUFlfWEtCLCB4MTEsCisgCVtTQVZFX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJERQWV9YS0JfQ0ZMQUdTICREUFlfWDExX0NGTEFHUyIKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvWEtCLmggWDExL1hLQmxpYi5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisrZmkKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhEUFlfWEY4NlZJRE1PREUsIHh4Zjg2dm0sCisgCVtTQVZFX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm9fMS4zLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGRweWluZm9fMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNGJiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mb18xLjMuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEaXNwbGF5IGluZm9ybWF0aW9uIHV0aWxpdHkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlhkcHlpbmZvIGlzIGEgdXRpbGl0eSBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCBhbiBcCitYIHNlcnZlci4gSXQgaXMgdXNlZCB0byBleGFtaW5lIHRoZSBjYXBhYmlsaXRpZXMgb2YgYSBzZXJ2ZXIsIHRoZSBcCitwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdmFyaW91cyBwYXJhbWV0ZXJzIHVzZWQgaW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIFwKK2NsaWVudHMgYW5kIHRoZSBzZXJ2ZXIsIGFuZCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHNjcmVlbnMgYW5kIHZpc3VhbHMgXAordGhhdCBhcmUgYXZhaWxhYmxlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjNkMDllNmI5ZTIwM2ExYWY0ODllMTZjNzA4ZjRmYjMiCitERVBFTkRTICs9ICJsaWJ4dHN0IGxpYnhleHQgbGlieHhmODZ2bSBsaWJ4eGY4NmRnYSBsaWJ4eGY4Nm1pc2MgbGlieGkgbGlieHJlbmRlciBsaWJ4aW5lcmFtYSBsaWJkbXggbGlieGF1IGxpYnhjb21wb3NpdGUiCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14a2IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ODA5MDM3YmQ0ODU5OWFmNTVkYWQ4MWM1MDhiNmIzOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMDIzOGVkOTE1NjE5ZTA2Y2ViNDE3MjFlNWY3NDdkNjczMjA1NTVjYzM4ZDQ1OWU5NTQ4MzljMTg5Y2NhZjUxIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhrYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXYvZGlldC14MTEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzA5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2L2RpZXQteDExLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCistLS0KKyB4ZXYuYyB8ICAgMTYgKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK0luZGV4OiB4ZXYtMS4yLjAveGV2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4ZXYtMS4yLjAub3JpZy94ZXYuYworKysrIHhldi0xLjIuMC94ZXYuYworQEAgLTExNiw3ICsxMTYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgIG5ieXRlcyA9IFhMb29rdXBTdHJpbmcgKGUsIHN0ciwgMjU2LCAma3MsIE5VTEwpOworIAorICAgICAvKiBub3Qgc3VwcG9zZWQgdG8gY2FsbCBYbWJMb29rdXBTdHJpbmcgb24gYSBrZXkgcmVsZWFzZSBldmVudCAqLworLSAgICBpZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKysgICAgLyppZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKyAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICBubWJieXRlcyA9IFhtYkxvb2t1cFN0cmluZyAoeGljLCBlLCBidWYsIGJzaXplIC0gMSwgJmtzLCAmc3RhdHVzKTsKKyAgICAgICAgICAgICBidWZbbm1iYnl0ZXNdID0gJ1wwJzsKK0BAIC0xMjYsNyArMTI2LDcgQEAgZG9fS2V5UHJlc3MgKFhFdmVudCAqZXZlbnRwKQorICAgICAgICAgICAgICAgICBidWYgPSByZWFsbG9jIChidWYsIGJzaXplKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9IHdoaWxlIChzdGF0dXMgPT0gWEJ1ZmZlck92ZXJmbG93KTsKKy0gICAgfQorKyAgICB9Ki8KKyAKKyAgICAgaWYgKGtzID09IE5vU3ltYm9sKQorIAlrc25hbWUgPSAiTm9TeW1ib2wiOworQEAgLTE1Niw3ICsxNTYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgIH0KKyAKKyAgICAgLyogbm90IHN1cHBvc2VkIHRvIGNhbGwgWG1iTG9va3VwU3RyaW5nIG9uIGEga2V5IHJlbGVhc2UgZXZlbnQgKi8KKy0gICAgaWYgKGUtPnR5cGUgPT0gS2V5UHJlc3MgJiYgeGljKSB7CisrICAgIC8qaWYgKGUtPnR5cGUgPT0gS2V5UHJlc3MgJiYgeGljKSB7CisgICAgICAgICBwcmludGYgKCIgICAgWG1iTG9va3VwU3RyaW5nIGdpdmVzICVkIGJ5dGVzOiAiLCBubWJieXRlcyk7CisgICAgICAgICBpZiAobm1iYnl0ZXMgPiAwKSB7CisgICAgICAgICAgICBkdW1wIChidWYsIG5tYmJ5dGVzKTsKK0BAIC0xNjQsNyArMTY0LDcgQEAgZG9fS2V5UHJlc3MgKFhFdmVudCAqZXZlbnRwKQorICAgICAgICAgfSBlbHNlIHsKKyAgICAgCSAgIHByaW50ZiAoIlxuIik7CisgICAgICAgICB9CistICAgIH0KKysgICAgfSAqLworIAorICAgICBwcmludGYgKCIgICAgWEZpbHRlckV2ZW50IHJldHVybnM6ICVzXG4iLAorIAkgICAgWEZpbHRlckV2ZW50IChldmVudHAsIGUtPndpbmRvdykgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKK0BAIC0xMDE1LDcgKzEwMTUsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogIFhTZXRMb2NhbGVNb2RpZmllcnMgZmFpbGVkXG4iLCBQcm9ncmFtTmFtZSk7CisgICAgIH0KKyAKKy0gICAgeGltID0gWE9wZW5JTSAoZHB5LCBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgLyp4aW0gPSBYT3BlbklNIChkcHksIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICBpZiAoeGltID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAgWE9wZW5JTSBmYWlsZWRcbiIsIFByb2dyYW1OYW1lKTsKKyAgICAgfQorQEAgLTEwNDIsNyArMTA0Miw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgWEZyZWUgKHhpbV9zdHlsZXMpOworICAgICAgICAgfQorLSAgICB9CisrCX0qLworIAorICAgICBzY3JlZW4gPSBEZWZhdWx0U2NyZWVuIChkcHkpOworIAorQEAgLTExMDksNyArMTEwOSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJcHJpbnRmICgiT3V0ZXIgd2luZG93IGlzIDB4JWx4LCBpbm5lciB3aW5kb3cgaXMgMHglbHhcbiIsIHcsIHN1YncpOworICAgICB9CisgCistICAgIGlmICh4aW0gJiYgeGltX3N0eWxlKSB7CisrICAgIC8qaWYgKHhpbSAmJiB4aW1fc3R5bGUpIHsKKyAgICAgICAgIHhpYyA9IFhDcmVhdGVJQyAoeGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTklucHV0U3R5bGUsIHhpbV9zdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWE5DbGllbnRXaW5kb3csIHcsCitAQCAtMTExOSw3ICsxMTE5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgaWYgKHhpYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiWENyZWF0ZUlDIGZhaWxlZFxuIik7CisgICAgICAgICB9CistICAgIH0KKysgICAgfSovCisgCisgICAgIGhhdmVfcnIgPSBYUlJRdWVyeUV4dGVuc2lvbiAoZHB5LCAmcnJfZXZlbnRfYmFzZSwgJnJyX2Vycm9yX2Jhc2UpOworICAgICBpZiAoaGF2ZV9ycikgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldl8xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE1MWI1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXZfMS4yLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWCBFdmVudCBWaWV3ZXIiCitERVNDUklQVElPTiA9ICJYZXYgY3JlYXRlcyBhIHdpbmRvdyBhbmQgdGhlbiBhc2tzIHRoZSBYIHNlcnZlciB0byBzZW5kIGl0IGV2ZW50cyBcCit3aGVuZXZlciBhbnl0aGluZyBoYXBwZW5zIHRvIHRoZSB3aW5kb3cgKHN1Y2ggYXMgaXQgYmVpbmcgbW92ZWQsIHJlc2l6ZWQsIFwKK3R5cGVkIGluLCBjbGlja2VkIGluLCBldGMuKS4gWW91IGNhbiBhbHNvIGF0dGFjaCBpdCB0byBhbiBleGlzdGluZyB3aW5kb3cuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94ZXYuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTMzO21kNT01NzdjOTk0MjFmMTgwM2I4OTFkMmM3OTA5N2FlNDY4MiIKK0xJQ0VOU0UgPSAiTUlUIgorCitQRSA9ICIxIgorCitERVBFTkRTICs9ICJsaWJ4cmFuZHIgeHByb3RvIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlldC14MTEucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNDliZGRlOTBmMDFjMGQ4NjFhZjUyZGM4ZmVjMzc5ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOTRhZTYyYTZjMWFmNTZjMjk2MWQ3MWY1NzgyMDc2YWM0MTE2ZjBmYTRlNDAxNDIwYWM3ZTBkYjMzZGMzMTRmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hleWVzXzEuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hleWVzXzEuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDBjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV5ZXNfMS4xLjEuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIGV5ZXMgdGhhdCBmb2xsb3cgdGhlIG1vdXNlIGN1cnNvciBkZW1vIgorREVTQ1JJUFRJT04gPSAiWGV5ZXMgaXMgYSBzbWFsbCBYMTEgYXBwbGljYXRpb24gdGhhdCBzaG93cyBhIHBhaXIgb2YgZXllcyB0aGF0IG1vdmUgdG8gXAorZm9sbG93IHRoZSBsb2NhdGlvbiBvZiB0aGUgbW91c2UgY3Vyc29yIGFyb3VuZCB0aGUgc2NyZWVuLiIKKworUEUgPSAiMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2VhNTFiMzY1MDUxYWMzMmQxODEzYTdkYmFhNGJmYzYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMzAzNWRjZWNkYmRiODllODY0MTc3YzA4MDkyNDk4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NzVlOTg2ODBjZDU5ZTFmOTQzOTAxNjM4NjYwOTU0NmVkMDhjMjg0ZDBmMDVhOTUyNzZmOTZhY2E2ZThhNTIxIgorCitERVBFTkRTICs9ICJsaWJ4YXUgbGlieHQgbGlieGV4dCBsaWJ4bXUgbGlieHJlbmRlciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aG9zdF8xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU3MzdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlNlcnZlciBhY2Nlc3MgY29udHJvbCBwcm9ncmFtIGZvciBYIgorCitERVNDUklQVElPTiA9ICJUaGUgeGhvc3QgcHJvZ3JhbSBpcyB1c2VkIHRvIGFkZCBhbmQgZGVsZXRlIGhvc3QgbmFtZXMgb3IgXAordXNlciBuYW1lcyB0byB0aGUgbGlzdCBhbGxvd2VkIHRvIG1ha2UgY29ubmVjdGlvbnMgdG8gdGhlIFggc2VydmVyLiBJbiBcCit0aGUgY2FzZSBvZiBob3N0cywgdGhpcyBwcm92aWRlcyBhIHJ1ZGltZW50YXJ5IGZvcm0gb2YgcHJpdmFjeSBjb250cm9sIFwKK2FuZCBzZWN1cml0eS4gRW52aXJvbm1lbnRzIHdoaWNoIHJlcXVpcmUgbW9yZSBzb3BoaXN0aWNhdGVkIG1lYXN1cmVzIFwKK3Nob3VsZCBpbXBsZW1lbnQgdGhlIHVzZXItYmFzZWQgbWVjaGFuaXNtIG9yIHVzZSB0aGUgaG9va3MgaW4gdGhlIFwKK3Byb3RvY29sIGZvciBwYXNzaW5nIG90aGVyIGF1dGhlbnRpY2F0aW9uIGRhdGEgdG8gdGhlIHNlcnZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThmYmVkNzFkZGRmNDg1NDE4MThjZWY4MDc5MTI0MTk5IgorREVQRU5EUyArPSAibGlieG11IGxpYnhhdSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNWQ0OTA3MzhiMTQ4Y2I3ZjJmZTc2MGY0MGY5MjUxNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5M2U2MTllZTE1NDcxZjU3NmNmYjMwYzY2M2UxOGY1YmM3MGFjYTU3N2E2M2QyYzJjMDNmMDA2YTc4MzdjMjlhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbml0XzEuMy40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbml0XzEuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTg1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGluaXRfMS4zLjQuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWCBXaW5kb3cgU3lzdGVtIGluaXRpYWxpemVyIgorCitERVNDUklQVElPTiA9ICJUaGUgeGluaXQgcHJvZ3JhbSBpcyB1c2VkIHRvIHN0YXJ0IHRoZSBYIFdpbmRvdyBTeXN0ZW0gXAorc2VydmVyIGFuZCBhIGZpcnN0IGNsaWVudCBwcm9ncmFtIG9uIHN5c3RlbXMgdGhhdCBjYW5ub3Qgc3RhcnQgWCBcCitkaXJlY3RseSBmcm9tIC9ldGMvaW5pdCBvciBpbiBlbnZpcm9ubWVudHMgdGhhdCB1c2UgbXVsdGlwbGUgd2luZG93IFwKK3N5c3RlbXMuIFdoZW4gdGhpcyBmaXJzdCBjbGllbnQgZXhpdHMsIHhpbml0IHdpbGwga2lsbCB0aGUgWCBzZXJ2ZXIgYW5kIFwKK3RoZW4gdGVybWluYXRlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MThmMDFlN2IzOTgwN2JlYmUyYjhkZjEwMWEwMzliNjgiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTkyODQ1MmRmYWY3Mzg1MTQxM2EyZDhiOGM3NjM4OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NWQ4OGQ3Mzk3YTA3ZTAxZGIyNTMxNjNiN2M3YTAwYjI0OWIzZDMwZTk5NDg5ZjI3MzRjYWM5YTBjNzkwMmIzIgorCitFWFRSQV9PRUNPTkYgPSAiYWNfY3ZfcGF0aF9NQ09PS0lFPSR7YmluZGlyfS9tY29va2llIgorCitSREVQRU5EU18ke1BOfSArPSAidXRpbC1saW51eC1tY29va2llIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbnB1dF8xLjYuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlZmNjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5wdXRfMS42LjEuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiUnVudGltZSBjb25maWd1cmF0aW9uIGFuZCB0ZXN0IG9mIFhJbnB1dCBkZXZpY2VzIgorCitERVNDUklQVElPTiA9ICJYaW5wdXQgaXMgYW4gdXRpbGl0eSBmb3IgY29uZmlndXJpbmcgYW5kIHRlc3RpbmcgWElucHV0IGRldmljZXMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg4MTUyNWY4OWY5OWNhZDM5Yzk4MzJiY2I3MmU2ZmE1IgorCitERVBFTkRTICs9ICIgbGlieGkgbGlieHJhbmRyIGxpYnhpbmVyYW1hIgorCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDU5ODBhYzc4YTY5NTRlMzA2YTE0ZDgwYTU0YzQ0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzYzMmQwZjIyOGE4YTZiZTkzYjA5ODU3ZWE0MTM5NDBmY2Y0NDA5MWU2MGY0YTBmZTlmNWZkODJlZmQ4NzFmIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGtiY29tcF8xLjMuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWMwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGtiY29tcF8xLjMuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJBIHByb2dyYW0gdG8gY29tcGlsZSBYS0Iga2V5Ym9hcmQgZGVzY3JpcHRpb24iCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4a2Jjb21wIGtleW1hcCBjb21waWxlciBjb252ZXJ0cyBhIGRlc2NyaXB0aW9uIG9mIGFuIFwKK1hLQiBrZXltYXAgaW50byBvbmUgb2Ygc2V2ZXJhbCBvdXRwdXQgZm9ybWF0cy4gVGhlIG1vc3QgY29tbW9uIHVzZSBmb3IgXAoreGtiY29tcCBpcyB0byBjcmVhdGUgYSBjb21waWxlZCBrZXltYXAgZmlsZSAoLnhrbSBleHRlbnNpb24pIHdoaWNoIGNhbiBcCitiZSByZWFkIGRpcmVjdGx5IGJ5IFhLQi1jYXBhYmxlIFggc2VydmVycyBvciB1dGlsaXRpZXMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wODQzNmU0ZjQ0NzY5NjRlMmUyZGQ3ZTdlNDFlMDc2YSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKK0RFUEVORFMgKz0gImxpYnhrYmZpbGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDAxMmE4ZTMwOTJjZGRmN2Y4N2IyNTBmOTZiYjM4YzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZhYzk3Mzc3OGZhYmY1MjE2MTIxYWQ2MGI3YWY4YWI3NGNlNzUxM2FmMGY5MjYwY2Y4YzUzMDllMTYyMmIyYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94bW9kbWFwXzEuMC45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlYWM2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94bW9kbWFwXzEuMC45LmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIG1vZGlmeWluZyBrZXltYXBzIGFuZCBwb2ludGVyIGJ1dHRvbiBtYXBwaW5ncyBpbiBYIgorCitERVNDUklQVElPTiA9ICJUaGUgeG1vZG1hcCBwcm9ncmFtIGlzIHVzZWQgdG8gZWRpdCBhbmQgZGlzcGxheSB0aGUgXAora2V5Ym9hcmQgbW9kaWZpZXIgbWFwIGFuZCBrZXltYXAgdGFibGUgdGhhdCBhcmUgdXNlZCBieSBjbGllbnQgXAorYXBwbGljYXRpb25zIHRvIGNvbnZlcnQgZXZlbnQga2V5Y29kZXMgaW50byBrZXlzeW1zLiBJdCBpcyB1c3VhbGx5IHJ1biBcCitmcm9tIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBzdGFydHVwIHNjcmlwdCB0byBjb25maWd1cmUgdGhlIGtleWJvYXJkIFwKK2FjY29yZGluZyB0byBwZXJzb25hbCB0YXN0ZXMuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MmMxN2U5NjM3MGUxZTc0NzczZmEyMmQ5OTg5NjIxIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzIzZjAyZDNhNWY5ODQ1MDU1NDU1NjIwNWYwYTk0OTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjdiMGU1Y2M1ZjEwZDBmYjZkMmQ2ZWE0ZjAwYzc3ZThhYzBlODQ3Y2M1YTczYmU5NGNkODYxMzlhYzRhYzQ3OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94b3JnLWFwcC1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyOWNiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94b3JnLWFwcC1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiWCBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKK0xJQ0VOU0UgPSAiTUlULVgiCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSB2aXJ0dWFsL2xpYngxMSIKKworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitJTkNfUFIgPSAicjgiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9hcHAvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vWDExLyR7QlBOfSAke2RhdGFkaXJ9L1gxMS9hcHAtZGVmYXVsdHMvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OGJmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHByb3BfMS4yLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSB0byBkaXNwbGF5IHdpbmRvdyBhbmQgZm9udCBwcm9wZXJ0aWVzIG9mIGFuIFggc2VydmVyIgorCitERVNDUklQVElPTiA9ICJUaGUgeHByb3AgdXRpbGl0eSBpcyBmb3IgZGlzcGxheWluZyB3aW5kb3cgYW5kIGZvbnQgXAorcHJvcGVydGllcyBpbiBhbiBYIHNlcnZlci4gT25lIHdpbmRvdyBvciBmb250IGlzIHNlbGVjdGVkIHVzaW5nIHRoZSBcCitjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9yIHBvc3NpYmx5IGluIHRoZSBjYXNlIG9mIGEgd2luZG93LCBieSBjbGlja2luZyBcCitvbiB0aGUgZGVzaXJlZCB3aW5kb3cuIEEgbGlzdCBvZiBwcm9wZXJ0aWVzIGlzIHRoZW4gZ2l2ZW4sIHBvc3NpYmx5IHdpdGggXAorZm9ybWF0dGluZyBpbmZvcm1hdGlvbi4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUyMjZhYjhkYjg4YWMwYmMwMzkxNjczYmU0MGM5ZjkxIgorCitERVBFTkRTICs9ICJsaWJ4bXUiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYWUzZDJmZGEwNzY4NDAyN2E2NDNjYTc4M2Q1OTVjYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YmVlODhiMTAyNTg2NWFkMTIxZjcyZDMyNTc2ZGQzMDI3YWYxNDQ2Nzc0YWE4MzAwY2NlM2MyNjFkODY5YmM2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hyYW5kcl8xLjQuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiZDQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJhbmRSOiBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbiBjb21tYW5kIgorCitERVNDUklQVElPTiA9ICJYcmFuZHIgaXMgdXNlZCB0byBzZXQgdGhlIHNpemUsIG9yaWVudGF0aW9uIGFuZC9vciBcCityZWZsZWN0aW9uIG9mIHRoZSBvdXRwdXRzIGZvciBhIHNjcmVlbi4gSXQgY2FuIGFsc28gc2V0IHRoZSBzY3JlZW4gXAorc2l6ZS4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmUxNjA4YmRiMzNjZjhjNjJhNDQzOGY3ZDM0Njc5YjMiCitERVBFTkRTICs9ICJsaWJ4cmFuZHIgbGlieHJlbmRlciIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NDFmZGI5OGQyYWJjNjA1MTEwOGI3MDc1ZDk0OGZjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MTU0YWMzNDg2Yjg2OTIzNjkyZjJkNmNkYjI5OTFhMmVlNzJiYzMyYWYyYzQzNzlhNmYxYzA2OGYyMDRiZTFiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldC9kaXNhYmxlLXhrYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QxM2EzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorYWRkICItZGlzYWJsZS14a2IiIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUmViYXNlIGZvciAxLjIuMSBieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggODFjM2FlNC4uMjY2MDFiZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTIsMTEgKzUyLDE1IEBAIFBLR19DSEVDS19NT0RVTEVTKFNFVF9YRVhULCB4ZXh0LAorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9kcG1zLmggWDExL2V4dGVuc2lvbnMvTUlUTWlzYy5oXSwsLFsjaW5jbHVkZSA8WDExL1hsaWIuaD5dKQorIAlDUFBGTEFHUz0iJFNBVkVfQ1BQRkxBR1MiXSxbZWNobyAibm90IGZvdW5kIl0pCisgCisrQUNfQVJHX0VOQUJMRSh4a2IsIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteGtiXSwgW0Rpc2FibGUgWEtCIHN1cHBvcnRdKSwKKysJCVhLQj0iJGVuYWJsZXZhbCIsIFhLQj0ieWVzIikKKytpZiB0ZXN0ICJ4JFhLQiIgPSAieHllcyIgOyB0aGVuCisgUEtHX0NIRUNLX01PRFVMRVMoU0VUX1hLQiwgeDExLAorIAlbU0FWRV9DUFBGTEFHUz0iJENQUEZMQUdTIgorIAlDUFBGTEFHUz0iJENQUEZMQUdTICRTRVRfWEtCX0NGTEFHUyAkU0VUX1gxMV9DRkxBR1MiCisgCUFDX0NIRUNLX0hFQURFUlMoW1gxMS9YS0JsaWIuaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorK2ZpCisgCisgQUNfQVJHX1dJVEgoeGY4Nm1pc2MsIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQteGY4Nm1pc2NdLFtEaXNhYmxlIHhmODZtaXNjIHN1cHBvcnQuXSksCisgICAgICAgICAgICAgICAgIFtVU0VfWEY4Nk1JU0M9IiR3aXRodmFsIl0sIFtVU0VfWEY4Nk1JU0M9InllcyJdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHNldF8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjgzYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3Igc2V0dGluZyB2YXJpb3VzIHVzZXIgcHJlZmVyZW5jZSBvcHRpb25zIG9mIHRoZSBkaXNwbGF5IgorCitERVNDUklQVElPTiA9ICJ4c2V0IGlzIGEgdXRpbGl0eSB0aGF0IGlzIHVzZWQgdG8gc2V0IHZhcmlvdXMgdXNlciBcCitwcmVmZXJlbmNlIG9wdGlvbnMgb2YgdGhlIGRpc3BsYXkuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJlYTgxY2M5ODI3Y2RmMWFmMGUxMmMyYjgyMjhjZjhkIgorREVQRU5EUyArPSAibGlieGV4dCBsaWJ4eGY4Nm1pc2MgbGlieG11IGxpYnhhdSIKK1BFID0gIjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXhrYi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImRjZDIyNzM4OGI1NzQ4N2Q1NDNjYWIyZmQ3YTYwMmQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQzODJmNGZiMjliODg2NDdlMTNmM2I0YmMyOTI2MzEzNDI3MDc0N2ZjMTU5Y2ZjNWY3ZTNhZjIzNTg4YzgwNjMiCisKK0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUteGtiIC0td2l0aG91dC1mb250Y2FjaGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHZpbmZvXzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY1ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJQcmludCBvdXQgWC1WaWRlbyBleHRlbnNpb24gYWRhcHRvciBpbmZvcm1hdGlvbiIKKworREVTQ1JJUFRJT04gPSAieHZpbmZvIHByaW50cyBvdXQgdGhlIGNhcGFiaWxpdGllcyBvZiBhbnkgdmlkZW8gYWRhcHRvcnMgXAorYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5IHRoYXQgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgWC1WaWRlbyBcCitleHRlbnNpb24uIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNjY0MTAxYWQ3YTFkYzc1OGE0YzQxMDliZjk3OGU2OCIKK0RFUEVORFMgKz0gIiBsaWJ4diIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NTgzNjAxNzZiNzE4ZGVlM2MzOWJjMDY0OGMwZDEwYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZmJhOGI2OGRhZjUzODYzZTY2ZDUwMDRmYTljNzAzZmNlY2Y2OWRiNGQxNTFlYTJkM2Q4ODVkNjIxZTZlNWViIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDUyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHdpbmluZm9fMS4xLjMuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiV2luZG93IGluZm9ybWF0aW9uIHV0aWxpdHkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlh3aW5pbmZvIGlzIGEgdXRpbGl0eSBmb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCBcCit3aW5kb3dzLiAgSW5mb3JtYXRpb24gbWF5IGluY2x1ZGUgd2luZG93IHBvc2l0aW9uLCBzaXplLCBjb2xvciBkZXB0aCwgXAorYW5kIGEgbnVtYmVyIG9mIG90aGVyIGl0ZW1zLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Nzg5NzZjZDMxMTVmNmZhZjYxNWFjY2M0ZTA5NGQ5MGUiCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnhtdSIKKworUEUgPSAiMCIKKworU1JDX1VSSVttZDVzdW1dID0gImI3NzdiYWZiNjc0NTU1ZTQ4ZmQ4NDM3NjE4MjcwOTMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIxOGViMGVhOTViZDhkZTc5MDNkZmFhMjY0MjM4MjBjNTIzYWQxNTk4YmUwNzUxZDJkOGI2YTJjMjNiMjNmZjgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWV2ZGV2XzIuOS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NDI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGV2ZW50IGRldmljZXMgKGV2ZGV2KSBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImV2ZGV2IGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBMaW51eCdzIGdlbmVyaWMgZXZlbnQgXAorZGV2aWNlcy4gSXQgdGhlcmVmb3JlIHN1cHBvcnRzIGFsbCBpbnB1dCBkZXZpY2VzIHRoYXQgdGhlIGtlcm5lbCBrbm93cyBcCithYm91dCwgaW5jbHVkaW5nIG1vc3QgbWljZSBhbmQga2V5Ym9hcmRzLiBcCitcCitUaGUgZXZkZXYgZHJpdmVyIGNhbiBzZXJ2ZSBhcyBib3RoIGEgcG9pbnRlciBhbmQgYSBrZXlib2FyZCBpbnB1dCBcCitkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyBib3RoIHRoZSBjb3JlIGtleWJvYXJkIGFuZCB0aGUgY29yZSBwb2ludGVyLiBcCitNdWx0aXBsZSBpbnB1dCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLCB3aXRoIG9uZSBMb2FkIGRpcmVjdGl2ZSBmb3IgZXZkZXYgaW4gdGhlIE1vZHVsZSBzZWN0aW9uIG9mIHlvdXIgXAoreG9yZy5jb25mIGZvciBlYWNoIGlucHV0IGRldmljZSB0aGF0IHdpbGwgdXNlIHRoaXMgZHJpdmVyLiAiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlZmUzM2IxY2YwY2FjYmEwZTcyZTNiMGZhMGYwZTE2IgorCitERVBFTkRTICs9ICJtdGRldiBsaWJldmRldiIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5ZWViZjE3MWU2YzdiZmZjNDJkNGZjNDMwZDQ3NDU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5MjMyOWI1MzFhZmM2OTI4Y2NkYTk0ZTRiNTFhNTUyMGQ0ZGRmOGVmOWEwMDg5MGE1ZDBkMzE4OThhY2VmZWMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkXzEuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTUxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGtleWJvYXJkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAia2V5Ym9hcmQgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIGtleWJvYXJkcy4gVGhlIFwKK2RyaXZlciBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgT1MtcHJvdmlkZWQga2V5Ym9hcmQgaW50ZXJmYWNlLiAgVGhlIGRyaXZlciBcCitmdW5jdGlvbnMgYXMgYSBrZXlib2FyZCBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIGtleWJvYXJkLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWEyMDk5ZDI0YWM5ZTMxNmE2ZDRiOWYyMGIzZDRlMTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmNjYzQzZDM4OWI5NzBhZmJkMzg5Mzg3NWRmZDY3OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYWM4ZmYzOWJmOWRhN2QyZmM3ZmQ2YzI0NTE1NzI2ZTgxMzgzNDBjMDUxOGFiOGM2MDZlMDA4Y2Y5M2NhMjExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjA4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF9naXQuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBrZXlib2FyZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImtleWJvYXJkIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBrZXlib2FyZHMuIFRoZSBcCitkcml2ZXIgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE9TLXByb3ZpZGVkIGtleWJvYXJkIGludGVyZmFjZS4gIFRoZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEga2V5Ym9hcmQgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBrZXlib2FyZC4iCisKK1NSQ1JFViA9ICIzZTI4ZDY4YjUwZDI5MTkzODczNGU5Njg0YjgyOTZjYTg2NGYzODkyIgorUFYgPSAiMS4zLjIrZ2l0JHtTUkNQVn0iCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZCIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlL3VuYnJlYWsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzA4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1VuYnJlYWsgdGhlIGxpbnV4IG1vdXNlIGRyaXZlciBieSB1c2luZyBjb25maWcuaAorCitSUCAtIDQvMTEvMDcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvc3JjL2xueF9tb3VzZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2xueF9tb3VzZS5jCTIwMDgtMTEtMDQgMjM6NDY6MDUuMDAwMDAwMDAwICswMDAwCisrKysgZ2l0L3NyYy9sbnhfbW91c2UuYwkyMDA4LTExLTA0IDIzOjQ2OjE1LjAwMDAwMDAwMCArMDAwMAorQEAgLTMsOCArMyw4IEBACisgICogQ29weXJpZ2h0IDE5OTkgYnkgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgorICAqLworIAorLSNpZmRlZiBIQVZFX1hPUkdfQ09ORklHX0gKKy0jaW5jbHVkZSA8eG9yZy1jb25maWcuaD4KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8WDExL1guaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfMS45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwYjc4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW91c2UgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJtb3VzZSBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgbWljZS4gVGhlIGRyaXZlciBcCitzdXBwb3J0cyBtb3N0IGF2YWlsYWJsZSBtb3VzZSB0eXBlcyBhbmQgaW50ZXJmYWNlcy4gIFRoZSBtb3VzZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEgcG9pbnRlciBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIHBvaW50ZXIuIE11bHRpcGxlIG1pY2UgYXJlIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBcCitkcml2ZXIuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MGVhOWY5MGQ3MmI2ZDkzMjdkZWRlNWZmZGIyYTUxMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjc3MDg1YjY0OWM1YzBiMzMzNTY1YmE1NjJmNTczOTUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM0ODVkMzc1Nzc5YzA4NDA2ZjA3ODlmZWVkZGUxNTkzM2RjNzAzMTU4YTA4NmRkYWM2Mzg1OThmNDc5ZmM1Y2UiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzlhMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2VfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW91c2UgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJtb3VzZSBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgbWljZS4gVGhlIGRyaXZlciBcCitzdXBwb3J0cyBtb3N0IGF2YWlsYWJsZSBtb3VzZSB0eXBlcyBhbmQgaW50ZXJmYWNlcy4gIFRoZSBtb3VzZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEgcG9pbnRlciBpbnB1dCBkZXZpY2UsIGFuZCBtYXkgYmUgdXNlZCBhcyB0aGUgWCBzZXJ2ZXIncyBcCitjb3JlIHBvaW50ZXIuIE11bHRpcGxlIG1pY2UgYXJlIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhpcyBcCitkcml2ZXIuIgorCitTUkNSRVYgPSAiZWE1Y2ZlODA0ZTExMmYzMjBmMTRhZDg5NmM3ODAyZDUzNTUxZDNlNiIKK1BWID0gIjEuMy4wK2dpdCR7U1JDUFZ9IgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvZHJpdmVyL3hmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICBmaWxlOi8vdW5icmVhay5wYXRjaCIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMxMjJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzXzEuOC4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gc3luYXB0aWNzIHRvdWNocGFkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAic3luYXB0aWNzIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciB0aGUgdG91Y2hwYWRzIGZyb20gXAorU3luYXB0aWNzIEluY29ycG9yYXRlZC4gRXZlbiB0aG91Z2ggdGhlc2UgdG91Y2hwYWRzIChieSBkZWZhdWx0LCBcCitvcGVyYXRpbmcgaW4gYSBjb21wYXRpYmlsaXR5IG1vZGUgZW11bGF0aW5nIGEgc3RhbmRhcmQgbW91c2UpIGNhbiBiZSBcCitoYW5kbGVkIGJ5IHRoZSBub3JtYWwgZXZkZXYgb3IgbW91c2UgZHJpdmVycywgdGhpcyBkcml2ZXIgYWxsb3dzIG1vcmUgXAorYWR2YW5jZWQgZmVhdHVyZXMgb2YgdGhlIHRvdWNocGFkIHRvIGJlY29tZSBhdmFpbGFibGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWFhY2QzNTM1YTc0MTgyNDk1NWM1ZWI4ZjA2MTM5OCIKKworU1JDX1VSSVttZDVzdW1dID0gIjhlZDY4ZThjYzY3NGRkNjFhZGIyODA3MDQ3NjRhYWZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiMGUxNjRlYmQwMmE2ODBlMGM2OTU5NTVlNzgzMDU5ZjM3ZWRiMGMyNjU2Mzk4ZTBhOTcyYWRjOGU2OThjODAiCisKK0RFUEVORFMgKz0gImxpYnhpIG10ZGV2IGxpYnh0c3QgbGliZXZkZXYiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGY2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gc3luYXB0aWNzIHRvdWNocGFkIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAic3luYXB0aWNzIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciB0aGUgdG91Y2hwYWRzIGZyb20gXAorU3luYXB0aWNzIEluY29ycG9yYXRlZC4gRXZlbiB0aG91Z2ggdGhlc2UgdG91Y2hwYWRzIChieSBkZWZhdWx0LCBcCitvcGVyYXRpbmcgaW4gYSBjb21wYXRpYmlsaXR5IG1vZGUgZW11bGF0aW5nIGEgc3RhbmRhcmQgbW91c2UpIGNhbiBiZSBcCitoYW5kbGVkIGJ5IHRoZSBub3JtYWwgZXZkZXYgb3IgbW91c2UgZHJpdmVycywgdGhpcyBkcml2ZXIgYWxsb3dzIG1vcmUgXAorYWR2YW5jZWQgZmVhdHVyZXMgb2YgdGhlIHRvdWNocGFkIHRvIGJlY29tZSBhdmFpbGFibGUuIgorCitTUkNSRVYgPSAiOTM0YmMwMDEyZjk0OGM1MmFhZGM4ZWRhOTEyZjc3MjhmYjczOTRhMiIKK1BWID0gIjAuMTUuMitnaXQke1NSQ1BWfSIKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2RyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljcyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gImxpYnhpIG10ZGV2IGxpYnh0c3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXZtbW91c2VfMTMuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTViNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFZNV2FyZSBtb3VzZSBpbnB1dCBkcml2ZXIiCitERVNDUklQVElPTiA9ICJUaGUgdm1tb3VzZSBkcml2ZXIgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgc3BlY2lhbCBWTU1vdXNlIFwKK3Byb3RvY29sIHRoYXQgaXMgcHJvdmlkZWQgYnkgVk13YXJlIHZpcnR1YWwgbWFjaGluZXMgdG8gZ2l2ZSBhYnNvbHV0ZSBcCitwb2ludGVyIHBvc2l0aW9uaW5nLiBUaGUgdm1tb3VzZSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBmYWxsaW5nIGJhY2sgdG8gdGhlIFwKK3N0YW5kYXJkICdtb3VzZScgZHJpdmVyIGlmIGEgVk13YXJlIHZpcnR1YWwgbWFjaGluZSBpcyBub3QgZGV0ZWN0ZWQuIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODVlMmU0NjRiNzIxOWM0OTVhZDNhMTY0NjVjMjI2ZWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGFmNTU4OTU3YWMxYmUxYjI4NjM3MTJjMjQ3NWRlOGY0ZDdmMTQ5MjFmZDAxZGVkMmUyZmRlNDkyMWIxOTMxOSIKKworUkRFUEVORFNfJHtQTn0gKz0gInhmODYtaW5wdXQtbW91c2UiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTYyMjg0MWMwNjhhOWQ3NjI1ZmJmZTdhY2ZmYjFhOGZjIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBXZSBkb24ndCBjYXJlIGFib3V0IGhhbAorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9oYWwvCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vaGFsLworfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kIgorCitGSUxFU18ke1BOfSArPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvICR7ZGF0YWRpcn0vWDExL3hvcmcuY29uZi5kIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTg0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1jaXJydXNfMS41LjMuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBjaXJydXMgZGlzcGxheSBkcml2ZXIiCitERVNDUklQVElPTiA9ICJjaXJydXMgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIENpcnJ1cyBMb2dpYyBWR0EgYWRhcHRlcnMuIFRoZXNlIFwKK2RldmljZXMgYXJlIG5vdCBzbyBjb21tb24gaW4gdGhlIHdpbGQgYW55bW9yZSwgYnV0IFFFTVUgY2FuIGVtdWxhdGUgb25lLCBzbyBcCit0aGUgZHJpdmVyIGlzIHN0aWxsIHVzZWZ1bC4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZkZGM3Y2E4NjBkYzVmZDAxNGU3ZjE2MGVhNjk5Mjk1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2Q3ZGZkNGNkYzQyYWE4YjZlOTIzNTEwZmEwMGFkMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRjODdiMjBhNTUyNTkxMjZiNTIzOWI1YzFlZjkxMzQxOWVhYjdkZWQwZWQxMmFlOWFlOTg5NDYwZDczNTFhYiIKKworREVQRU5EUyArPSAibGlicGNpYWNjZXNzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1mYmRldl8wLjQuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmU5YmQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIGZiZGV2IGRpc3BsYXkgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiZmJkZXYgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIGZyYW1lYnVmZmVyIGRldmljZXMuIFRoaXMgaXMgYSBub24tYWNjZWxlcmF0ZWQgZHJpdmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhjYmQ5OWZmZjc3M2Y5MmU4NDQ5NDhmNzRlZjBkZjgiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOTMxYzBlMTlkNDQxY2M1NzZkYzA4OGY5ZWI5ZmQ3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGQ0YjMyNjQ5ODIyM2FiYmZkZjc4NjA4OWE0NmVhM2RiNGZhNmJiZDM0MTMwOGViNDhhOWUwMGJjM2ZkNTFiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1ZGQzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorSW5jbHVkZSB4b3JnLXNlcnZlci5oIHRvIGZpeCBidWlsZCBlcnJvcnMgc2VlbiB3aXRoIGdsaWJjIDIuMjAKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3N0cmluZy5oOjYzNDowLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1pbnRlbC8yXzIuOTkuOTEyLXIwL3hmODYtdmlkZW8taW50ZWwtMi45OS45MTIvc3JjL2JhY2tsaWdodC5jOjM5OgorL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjU3OToxOiBlcnJvcjogZXhwZWN0ZWQgaWRlbnRpZmllciBvciAnKCcgYmVmb3JlICdfX2V4dGVuc2lvbl9fJworIHN0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgbik7CisgXgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIvc3JjL2JhY2tsaWdodC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGY4Ni12aWRlby1pbnRlbC0yLjk5LjkxMi5vcmlnL3NyYy9iYWNrbGlnaHQuYwkyMDE0LTA0LTA5IDEwOjQxOjE4LjAwMDAwMDAwMCAtMDcwMAorKysrIHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIvc3JjL2JhY2tsaWdodC5jCTIwMTQtMDgtMjggMTg6NTI6MjUuNTI0MDcwNTg3IC0wNzAwCitAQCAtMjksNiArMjksNyBAQAorICNpbmNsdWRlICJjb25maWcuaCIKKyAjZW5kaWYKKyAKKysjaW5jbHVkZSA8eG9yZy1zZXJ2ZXIuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE1MDhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaApAQCAtMCwwICsxLDE3IEBACitUaGVzZSBtb2R1bGVzIGFyZSBvbmx5IHVzZWQgZm9yIHRlc3RzIHRoYXQgZG9uJ3QgZ2V0IGluc3RhbGxlZCwgYW5kIHRoZQorYXV0b21hdGljIGRldGVjdGlvbiB3aXRob3V0IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBtZWFucyB0aGF0IGEgYnVpbGQgY2FuIGZpbmQKK2UuZy4geHNobWZlbmNlIGF0IGNvbmZpZ3VyZSB0aW1lIGJ1dCB0aGVuIGl0J3MgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3Jvb3QgYnkKK3RoZSB0aW1lIGNvbXBpbGUgaGFwcGVucy4KKworQXMgdGhlIHRlc3RzIGRvbid0IGdldCBpbnN0YWxsZWQsIGp1c3QgZGlzYWJsZSB0aGUgY2hlY2tzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLXNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmQ2NTRmMy4uNzhhMGUwZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjUxICsyNTEgQEAgZmkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTFfRFJJMywgW3hjYi1kcmkzIHhjYi1zeW5jIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4cmVuZGVyIHhleHQgbGliZHJtXSwgW3gxMV9kcmkzPSJ5ZXMiXSwgW3gxMV9kcmkzPSJubyJdKQorKyNQS0dfQ0hFQ0tfTU9EVUxFUyhYMTFfRFJJMywgW3hjYi1kcmkzIHhjYi1zeW5jIHhjYi1wcmVzZW50IHgxMS14Y2IgeHNobWZlbmNlIHgxMSB4cmVuZGVyIHhleHQgbGliZHJtXSwgW3gxMV9kcmkzPSJ5ZXMiXSwgW3gxMV9kcmkzPSJubyJdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5ZDUyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA3ZmUyYjI5NDg2NTI0NDNmZjQzZDkwNzg1NWJkN2EwNTFkNTRkMzA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDIzOjE0OjE3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNuYTogUHJvdGVjdCBhZ2FpbnN0IEFCSSBicmVha2FnZSBpbiByZWNlbnQgdmVyc2lvbnMgb2YKKyBsaWJkcm0KKworY29tbWl0IDdmZTJiMjk0ODY1MjQ0M2ZmNDNkOTA3ODU1YmQ3YTA1MWQ1NGQzMDkgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9zcmMvc25hL2tnZW0uYyBiL3NyYy9zbmEva2dlbS5jCitpbmRleCAxMWYwODI4ZjJiYmMuLjZmMTZjYmFjODdmMiAxMDA2NDQKKy0tLSBhL3NyYy9zbmEva2dlbS5jCisrKysgYi9zcmMvc25hL2tnZW0uYworQEAgLTE4Miw2ICsxODIsMTUgQEAgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NhY2hpbmcgeworICNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fU0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fU0VUX0NBQ0hJTkcsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nKQorICNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fR0VUX0NBQ0hJTkcgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fR0VUX0NBQ0hJTkcsIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nKQorIAorK3N0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwIHsKKysJdWludDMyX3QgaGFuZGxlOworKwl1aW50MzJfdCBwYWQ7CisrCXVpbnQ2NF90IG9mZnNldDsKKysJdWludDY0X3Qgc2l6ZTsKKysJdWludDY0X3QgYWRkcl9wdHI7CisrfTsKKysjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9NTUFQLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCkKKysKKyBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcDIgeworIAl1aW50MzJfdCBoYW5kbGU7CisgCXVpbnQzMl90IHBhZDsKK0BAIC01MTQsMTUgKzUyMywxNSBAQCByZXRyeV93YzoKKyAKKyBzdGF0aWMgdm9pZCAqX19rZ2VtX2JvX21hcF9fY3B1KHN0cnVjdCBrZ2VtICprZ2VtLCBzdHJ1Y3Qga2dlbV9ibyAqYm8pCisgeworLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgbW1hcF9hcmc7CisrCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwIGFyZzsKKyAJaW50IGVycjsKKyAKKyByZXRyeToKKy0JVkdfQ0xFQVIobW1hcF9hcmcpOworLQltbWFwX2FyZy5oYW5kbGUgPSBiby0+aGFuZGxlOworLQltbWFwX2FyZy5vZmZzZXQgPSAwOworLQltbWFwX2FyZy5zaXplID0gYnl0ZXMoYm8pOworLQlpZiAoKGVyciA9IGRvX2lvY3RsKGtnZW0tPmZkLCBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJm1tYXBfYXJnKSkpIHsKKysJVkdfQ0xFQVIoYXJnKTsKKysJYXJnLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisrCWFyZy5vZmZzZXQgPSAwOworKwlhcmcuc2l6ZSA9IGJ5dGVzKGJvKTsKKysJaWYgKChlcnIgPSBkb19pb2N0bChrZ2VtLT5mZCwgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1BUCwgJmFyZykpKSB7CisgCQlhc3NlcnQoZXJyICE9IEVJTlZBTCk7CisgCisgCQlpZiAoX19rZ2VtX3Rocm90dGxlX3JldGlyZShrZ2VtLCAwKSkKK0BAIC01MzYsMTAgKzU0NSwxMCBAQCByZXRyeToKKyAJCXJldHVybiBOVUxMOworIAl9CisgCistCVZHKFZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQobW1hcF9hcmcuYWRkcl9wdHIsIGJ5dGVzKGJvKSkpOworKwlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKGFyZy5hZGRyX3B0ciwgYnl0ZXMoYm8pKSk7CisgCisgCURCRygoIiVzOiBjYWNoaW5nIENQVSB2bWEgZm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIGJvLT5oYW5kbGUpKTsKKy0JcmV0dXJuIGJvLT5tYXBfX2NwdSA9ICh2b2lkICopKHVpbnRwdHJfdCltbWFwX2FyZy5hZGRyX3B0cjsKKysJcmV0dXJuIGJvLT5tYXBfX2NwdSA9ICh2b2lkICopKHVpbnRwdHJfdClhcmcuYWRkcl9wdHI7CisgfQorIAorIHN0YXRpYyBpbnQgZ2VtX3dyaXRlKGludCBmZCwgdWludDMyX3QgaGFuZGxlLAorLS0gCisyLjQuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC91ZGV2LWZzdGF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTY3NWVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaApAQCAtMCwwICsxLDU5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDEyYWY4YTU3NWQxNTE4ZDQwNDE2ZjgzMTk1MDQ5MTU3YzNhMDYyYTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KK0RhdGU6IFR1ZSwgMjQgRmViIDIwMTUgMTU6MjU6NDAgKzAwMDAKK1N1YmplY3Q6IHNuYTogdWRldiBpbnRlZ3JhdGlvbiBkZXBlbmRzIG9uIGZzdGF0IGFuZCBzeXMvc3RhdC5oCisKK3NyYy9zbmEvc25hX2RyaXZlci5jOiBJbiBmdW5jdGlvbiAnc25hX2hhbmRsZV91ZXZlbnRzJzoKK3NyYy9zbmEvc25hX2RyaXZlci5jOjc1OToyOiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ2ZzdGF0JyBbLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KKworQWxzbyB0YWtlIHRoZSBvcHBvcnR1bml0eSB0byBpbmNsdWRlIHVkZXYgc3VwcG9ydCBpbiB0aGUgY29uZmlndXJlCitzdW1tYXJ5LgorCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNzQ3NmUyYi4uZGUzYTRiMyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTk3LDExICsxOTcsMTUgQEAgQUNfQVJHX0VOQUJMRSh1ZGV2LAorIAorIGlmIHRlc3QgIngkVURFViIgIT0gInhubyI7IHRoZW4KKyAJUEtHX0NIRUNLX01PRFVMRVMoVURFViwgW2xpYnVkZXZdLCBbdWRldj0ieWVzIl0sIFt1ZGV2PSJubyJdKQorKwlBQ19DSEVDS19IRUFERVJTKFtzeXMvc3RhdC5oXSwgW10sIFt1ZGV2PSJubyJdKQorIAlpZiB0ZXN0ICJ4JFVERVYiID0gInh5ZXMiIC1hICJ4JHVkZXYiICE9ICJ4eWVzIjsgdGhlbgorIAkJQUNfTVNHX0VSUk9SKFt1ZGV2IHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmQgKGxpYnVkZXYpXSkKKyAJZmkKKyAJaWYgdGVzdCAieCR1ZGV2IiA9ICJ4eWVzIjsgdGhlbgorIAkJQUNfREVGSU5FKEhBVkVfVURFViwxLFtFbmFibGUgdWRldi1iYXNlZCBtb25pdG9yIGhvdHBsdWcgZGV0ZWN0aW9uXSkKKysJCXVkZXZfbXNnPSIgeWVzIgorKwllbHNlCisrCQl1ZGV2X21zZz0iIG5vIgorIAlmaQorIGZpCisgCitAQCAtOTExLDYgKzkxNSw3IEBAIGVjaG8gIiAgU3VwcG9ydCBmb3IgS2VybmVsIE1vZGUgU2V0dGluZz8gJEtNUyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIGxlZ2FjeSBVc2VyIE1vZGUgU2V0dGluZyAoZm9yIGk4MTApPyAkVU1TIgorIGVjaG8gIiAgU3VwcG9ydCBmb3IgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZTokZHJpX21zZyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIFh2IG1vdGlvbiBjb21wZW5zYXRpb24gKFh2TUMgYW5kIGxpYlh2TUMpOiR4dm1jX21zZyIKKytlY2hvICIgIFN1cHBvcnQgZm9yIGRpc3BsYXkgaG90cGx1ZyBub3RpZmljYXRpb25zICh1ZGV2KTokdWRldl9tc2ciCisgZWNobyAiICBCdWlsZCBhZGRpdGlvbmFsIHRvb2xzIGFuZCB1dGlsaXRpZXM/JHRvb2xzX21zZyIKKyBpZiB0ZXN0IC1uICIkeHBfbXNnIjsgdGhlbgorIGVjaG8gIiAgRXhwZXJpbWVudGFsIHN1cHBvcnQ6JHhwX21zZyIKK2RpZmYgLS1naXQgYS9zcmMvc25hL3NuYV9kcml2ZXIuYyBiL3NyYy9zbmEvc25hX2RyaXZlci5jCitpbmRleCA4YzBkMGI1Li5iYzIwZWYwIDEwMDY0NAorLS0tIGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMKKysrKyBiL3NyYy9zbmEvc25hX2RyaXZlci5jCitAQCAtNzQwLDYgKzc0MCw4IEBAIHNuYV93YWtldXBfaGFuZGxlcihXQUtFVVBIQU5ETEVSX0FSR1NfREVDTCkKKyB9CisgCisgI2lmIEhBVkVfVURFVgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKworIHN0YXRpYyB2b2lkCisgc25hX2hhbmRsZV91ZXZlbnRzKGludCBmZCwgdm9pZCAqY2xvc3VyZSkKKyB7CistLSAKK2NnaXQgdjAuMTAuMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbF8yLjk5LjkxNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmYxNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIKQEAgLTAsMCArMSw0MCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNoaXBzZXRzIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAiaW50ZWwgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIEludGVsIGludGVncmF0ZWQgZ3JhcGhpY3MgXAorY2hpcHNldHMuIFRoZSBkcml2ZXIgc3VwcG9ydHMgZGVwdGhzIDgsIDE1LCAxNiBhbmQgMjQuIE9uIHNvbWUgY2hpcHNldHMsIFwKK3RoZSBkcml2ZXIgc3VwcG9ydHMgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgM0QgdmlhIHRoZSBEaXJlY3QgUmVuZGVyaW5nIFwKK0luZnJhc3RydWN0dXJlIChEUkkpLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODczMGFkNThkMTFjN2JiYWQ5YTcwNjZkNjlmNzgwOGUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXgxMS1kcmkzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91ZGV2LWZzdGF0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmExOTZhNjZlNTJjMGM2MjRmZTVkMzUwYWY3YTVlN2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDBiNzgxZWVhMDU1NTgyODIwYTEyM2M0N2I2MjQxMWJkZjZhYWJmNGYwM2RjMDU2OGZhZWM1NWZhZjk2NjdjOSIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZHJtIGxpYnBjaWFjY2VzcyBwaXhtYW4iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4dm1jIHNuYSB1ZGV2ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2RyaSBkcmkxIGRyaTInLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW2RyaV0gPSAiLS1lbmFibGUtZHJpLC0tZGlzYWJsZS1kcmkiCitQQUNLQUdFQ09ORklHW2RyaTFdID0gIi0tZW5hYmxlLWRyaTEsLS1kaXNhYmxlLWRyaTEseGY4NmRyaXByb3RvIgorUEFDS0FHRUNPTkZJR1tkcmkyXSA9ICItLWVuYWJsZS1kcmkyLC0tZGlzYWJsZS1kcmkyLGRyaTJwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywtLWRpc2FibGUtZHJpMyxkcmkzcHJvdG8iCitQQUNLQUdFQ09ORklHW3NuYV0gPSAiLS1lbmFibGUtc25hLC0tZGlzYWJsZS1zbmEiCitQQUNLQUdFQ09ORklHW3V4YV0gPSAiLS1lbmFibGUtdXhhLC0tZGlzYWJsZS11eGEiCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0tZW5hYmxlLXVkZXYsLS1kaXNhYmxlLXVkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbeHZtY10gPSAiLS1lbmFibGUteHZtYywtLWRpc2FibGUteHZtYyxsaWJ4dm1jIHhjYi11dGlsIgorUEFDS0FHRUNPTkZJR1t0b29sc10gPSAiLS1lbmFibGUtdG9vbHMsLS1kaXNhYmxlLXRvb2xzLGxpYnhpbmVyYW1hIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnhmaXhlcyBsaWJ4Y3Vyc29yIGxpYnh0c3QgbGlieGV4dCBsaWJ4cmVuZGVyIgorCisjIC0tZW5hYmxlLWttcy1vbmx5IG9wdGlvbiBpcyByZXF1aXJlZCBieSBST09UTEVTU19YCitFWFRSQV9PRUNPTkYgKz0gJyR7QGJhc2VfY29uZGl0aW9uYWwoICJST09UTEVTU19YIiwgIjEiLCAiIC0tZW5hYmxlLWttcy1vbmx5IiwgIiIsIGQgKX0nCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Nnx4ODZfNjQpLiotbGludXgnCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3BvbGtpdC0xIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU3N2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBmYzY1M2NhM2IzNjQzNWFlYTI4MWFlNDA5ZmI5MGY4NWUxYmMwZDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwODo0NDoxMyArMDAwMAorU3ViamVjdDogW2ZyZWVkcmVub11bUEFUQ0hdIGRybW1vZGVfb3V0cHV0X2RwbXM6IFJlcGxhY2UgbG9naWNhbCAmJiB3aXRoIGJpdHdpc2UgJgorIG9wZXJhdGlvbgorCitUaGlzIGlzIGEgbWFzayBjYWxjdWxhdGlvbiBzbyBiaXRid2lzZSAmIHNob3VsZCBoYXZlIGJlZW4gdXNlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgc3JjL2RybW1vZGVfZGlzcGxheS5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2RybW1vZGVfZGlzcGxheS5jIGIvc3JjL2RybW1vZGVfZGlzcGxheS5jCitpbmRleCBjM2NmNGY4Li5lYjU0YjU5IDEwMDY0NAorLS0tIGEvc3JjL2RybW1vZGVfZGlzcGxheS5jCisrKysgYi9zcmMvZHJtbW9kZV9kaXNwbGF5LmMKK0BAIC03NzcsNyArNzc3LDcgQEAgZHJtbW9kZV9vdXRwdXRfZHBtcyh4Zjg2T3V0cHV0UHRyIG91dHB1dCwgaW50IG1vZGUpCisgCisgCWZvciAoaSA9IDA7IGkgPCBrb3V0cHV0LT5jb3VudF9wcm9wczsgaSsrKSB7CisgCQlwcm9wcyA9IGRybU1vZGVHZXRQcm9wZXJ0eShkcm1tb2RlLT5mZCwga291dHB1dC0+cHJvcHNbaV0pOworLQkJaWYgKHByb3BzICYmIChwcm9wcy0+ZmxhZ3MgJiYgRFJNX01PREVfUFJPUF9FTlVNKSkgeworKwkJaWYgKHByb3BzICYmIChwcm9wcy0+ZmxhZ3MgJiBEUk1fTU9ERV9QUk9QX0VOVU0pKSB7CisgCQkJaWYgKCFzdHJjbXAocHJvcHMtPm5hbWUsICJEUE1TIikpIHsKKyAJCQkJbW9kZV9pZCA9IGtvdXRwdXQtPnByb3BzW2ldOworIAkJCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3BzKTsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcF8wLjQuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2ODJlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIGZyYW1lYnVmZmVyIGRyaXZlciIKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBUSSBPTUFQIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJPcGVuLXNvdXJjZSBYLm9yZyBncmFwaGljcyBkcml2ZXIgZm9yIFRJIE9NQVAgZ3JhcGhpY3MgXAorQ3VycmVudGx5IHJlbGllcyBvbiBhIGNsb3NlZC1zb3VyY2Ugc3VibW9kdWxlIGZvciBFWEEgYWNjZWxlcmF0aW9uIG9uIFwKK3RoZSBmb2xsb3dpbmcgY2hpcHNldHM6IFwKKyAgKyBPTUFQMzQzMCBcCisgICsgT01BUDM2MzAgXAorICArIE9NQVA0NDMwIFwKKyAgKyBPTUFQNDQ2MCBcCisgICsgT01BUDU0MzAgXAorICArIE9NQVA1NDMyIFwKK1wKK05PVEU6IHRoaXMgZHJpdmVyIGlzIHdvcmsgaW4gcHJvZ3Jlc3MuLiAgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdHJ5IFwKK2FuZCB1c2UgaXQgeWV0LiAgVGhlIEFQSS9BQkkgYmV0d2VlbiBkcml2ZXIgYW5kIGtlcm5lbCwgYW5kIGRyaXZlciBhbmQgXAorYWNjZWxlcmF0aW9uIHN1Ym1vZHVsZXMgaXMgbm90IHN0YWJsZSB5ZXQuICBUaGlzIGRyaXZlciByZXF1aXJlcyB0aGUgXAorb21hcGRybSBrZXJuZWwgZHJpdmVyIHcvIEdFTSBzdXBwb3J0LiBcCisiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBjZTVkZTNiMTExMzE1ZWE2NTJhNWY3NGVjMGM2MDIiCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBsaWJkcm0geGY4NmRyaXByb3RvIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmUzNWRhZjZmYTRiNzUwOTJjYzRhODk3OGM0MzdiYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGIxZTBlNjlmZDRjNGM4ZmRjYTVlZjJjYjA0NDdiY2NkNzUxOGE3MTg0OTU4NzZhNjkwNGJlZjU3YjM5OTg2ZCIKKworQ0ZMQUdTICs9ICIgLUkke1NUQUdJTkdfSU5DRElSfS94b3JnICIKKworIyBVc2Ugb3ZlcmxheSAyIG9uIG9tYXAzIHRvIGVuYWJsZSBvdGhlciBhcHBzIHRvIHVzZSBvdmVybGF5IDEgKGUuZy4gZG1haSBvciBvbWFwZmJwbGF5KQorZG9fY29tcGlsZV9wcmVwZW5kX2FybXY3YSAoKSB7CisgICAgICAgIHNlZCAtaSAtZSBzOmZiMTpmYjI6ZyAke1N9L3NyYy9vbWFwX3h2LmMKK30KKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMgKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ29wZW5nbCcgbm90IGluIERJU1RST19GRUFUVVJFUyIpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Y2YxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMjhjMDA2Yzk0ZTU3ZWE3MWRmMTFlYzRmZmY3OWQ3ZmZjZmM0ODYwZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZhciBNY0tvbiA8RmFyTWNLb25AYnVnbGFicy5uZXQ+CitEYXRlOiBUdWUsIDMgTWF5IDIwMTEgMjA6NTk6MDQgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUHJldmVudHMgb21hcGZiIGZyb20gZnJvbSBjcmFzaGluZyB3aGVuIHBpeGVsY2xvY2sgb2YgMCBpcworIHNlbnQgdG8gaXQuCisKK0R1ZSB0byBhIExpbnV4IGRlc2lnbiBidWcgaXQgaXMgZWFzeSB0byBnZXQgYSBwaXhlbGNsb2NrIHNldCB0byB6ZXJvCit3aGVuIGNoYW5naW5nIGRpc3BsYXlzIGF0IHJ1bnRpbWUuCistLS0KKyBzcmMvb21hcGZiLW91dHB1dC5jIHwgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1vdXRwdXQuYyBiL3NyYy9vbWFwZmItb3V0cHV0LmMKK2luZGV4IGY4YjRkYjMuLjRkNTkyNjUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLW91dHB1dC5jCisrKysgYi9zcmMvb21hcGZiLW91dHB1dC5jCitAQCAtMTI1LDggKzEyNSwxMyBAQCBPTUFQRkJPdXRwdXRHZXRNb2Rlcyh4Zjg2T3V0cHV0UHRyIG91dHB1dCkKKyAJLyogT25seSBwb3B1bGF0ZSB0aGUgbmF0aXZlIChjdXJyZW50KSBtb2RlICovCisgCW1vZGUgPSBjYWxsb2MoMSwgc2l6ZW9mKERpc3BsYXlNb2RlUmVjKSk7CisgCW1vZGUtPnR5cGUgICAgICB8PSBNX1RfUFJFRkVSUkVEOworLQltb2RlLT5DbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworLQltb2RlLT5TeW50aENsb2NrID0gUElDT1MyS0haKG9mYi0+c3RhdGVfaW5mby5waXhjbG9jayk7CisrCWlmIChvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2sgPT0gMCkgeworKwkJbW9kZS0+Q2xvY2sgPSAwOworKwkJbW9kZS0+U3ludGhDbG9jayA9IDA7CisrCX0gZWxzZSB7CisrCQltb2RlLT5DbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwkJbW9kZS0+U3ludGhDbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwl9CisgCW1vZGUtPkhEaXNwbGF5ICAgPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKyAJbW9kZS0+SFN5bmNTdGFydCA9IG1vZGUtPkhEaXNwbGF5CisgCSAgICAgICAgICAgICAgICAgICsgb2ZiLT5zdGF0ZV9pbmZvLnJpZ2h0X21hcmdpbjsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiMDFkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA4ZmI3ZDBmOTlkNGFmYmI1NzRiMzBjYjRmMWU2NmE4Zjg5ZDk0YWQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTI6MDQ6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzZdIFJldmVydCAiU2V0IGEgbGFyZ2UgQ1JUQyB1cHBlciBsaW1pdCB0byBub3QgcHJ1bmUgbGFyZ2VyCisgcmVzb2x1dGlvbnMiCisKK1BpY3R1cmUgaXMgZ2FyYmxlZCBhZnRlciBzd2l0Y2hpbmcgcmVzb2x1dGlvbnMsIHNvIHJldmVydCBpdC4KK1ZpcnR1YWwgc2l6ZSB0b28gYmlnLCByZXZlcnQgdGhlIGNvbW1pdCA5YzRkNzU5MmRjYjdkYzIwYTQ4YTZmOTQxZDlkOTRiZDczZDM0MTUzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1jcnRjLmMgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItY3J0Yy5jIGIvc3JjL29tYXBmYi1jcnRjLmMKK2luZGV4IDlhYWE1MmYuLmNiZWZmMzUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWNydGMuYworKysrIGIvc3JjL29tYXBmYi1jcnRjLmMKK0BAIC0xOTAsMTMgKzE5MCwxMyBAQCBPTUFQRkJDUlRDSW5pdChTY3JuSW5mb1B0ciBwU2NybikKKyAJICogSW4gcHJhY3Rpc2UsIHRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIHN1cHBvcnRlZC4KKyAJICogKG5vIHdheSB0byBzZXR1cCB0aGUgb3ZlcmxheSBvZmZzZXQvYmFzZSBhZGRyZXNzKQorIAkgKi8KKy0JIC8qIEZJWE1FOiBmaWd1cmUgb3V0IHdoYXQgbWFrZXMgc2Vuc2UgaGVyZS4gQSBrbm93biBtYXggcmVzb2x1dGlvbj8KKy0JICAqIGZyYW1lYnVmZmVyIHNpemU/CistCSAgKi8KKyAJeGY4NkNydGNTZXRTaXplUmFuZ2UocFNjcm4sCistCSAgICAgICAgICAgICAgICAgICAgIDgsIDgsIDIwNDgsIDIwNDgpOworKwkgICAgICAgICAgICAgICAgICAgICA4LCA4LAorKwkgICAgICAgICAgICAgICAgICAgICBvZmItPnN0YXRlX2luZm8ueHJlc192aXJ0dWFsLAorKwkgICAgICAgICAgICAgICAgICAgICBvZmItPnN0YXRlX2luZm8ueXJlc192aXJ0dWFsKTsKKyAKKyAJb2ZiLT5jcnRjID0geGY4NkNydGNDcmVhdGUocFNjcm4sICZPTUFQRkJDcnRjRnVuY3MpOworKworIH0KKyAKKyAKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYTk4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4NTVjMzMzYWMwZDE2MzUwZjg5NWYxZDFiOTM5MWU5Y2JiMGI2ZGI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6Mjc6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzZdIFJldmVydCAiU2V0IHZpcnR1YWwgc2l6ZSB3aGVuIGNvbmZpZ3VyaW5nIGZyYW1lYnVmZmVyIgorCitWaXJ0dWFsIHNpemUgdG9vIGJpZywgc28gcmV2ZXJ0IGl0LgorCitUaGlzIHJldmVydHMgY29tbWl0IDI2NTNlZjA3ODgzZmJkMWE1ZTcwMjVmOTMwMGNmODliNzliYTQyOWEuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvb21hcGZiLWNydGMuYyB8IDIgLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItY3J0Yy5jIGIvc3JjL29tYXBmYi1jcnRjLmMKK2luZGV4IGNiZWZmMzUuLjk2NTVkYjIgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWNydGMuYworKysrIGIvc3JjL29tYXBmYi1jcnRjLmMKK0BAIC05OCw4ICs5OCw2IEBAIE9NQVBGQkNydGNDb21taXRDaGFuZ2VNb2RlICh4Zjg2Q3J0Y1B0ciBjcnRjKQorIAl2ID0gb2ZiLT5zdGF0ZV9pbmZvOworIAl2LnhyZXMgPSBtb2RlLT5IRGlzcGxheTsKKyAJdi55cmVzID0gbW9kZS0+VkRpc3BsYXk7CistCXYueHJlc192aXJ0dWFsID0gY3J0Yy0+c2Nybi0+dmlydHVhbFg7CistCXYueXJlc192aXJ0dWFsID0gY3J0Yy0+c2Nybi0+dmlydHVhbFk7CisgCXYuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisgCXYucGl4Y2xvY2sgPSBLSFoyUElDT1MobW9kZS0+Q2xvY2sgPyBtb2RlLT5DbG9jayA6IDU2MDAwKTsKKyAJdi5sZWZ0X21hcmdpbiA9IG1vZGUtPkhUb3RhbCAtIG1vZGUtPkhTeW5jRW5kOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2VhN2MxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDI1MmY0NGMwNzJkMzQ0N2EzMjEyN2ZjOWFmZTVkMGQ0MGYzYzUxMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogV2VkLCAyNiBKYW4gMjAxMSAxMzoyMDoyMCArMDEwMAorU3ViamVjdDogW1BBVENIIDMvNl0gZm9yY2UgJ3BsYWluJyBtb2RlCisKK1RoZSBuZXcgRFNTIG1vZGUgYnJlYWtzIFhWLCBzbyBmb3JjZSBwbGFpbiBtb2RlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1kcml2ZXIuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItZHJpdmVyLmMgYi9zcmMvb21hcGZiLWRyaXZlci5jCitpbmRleCAwMThlMDQwLi40OGFhMDljIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1kcml2ZXIuYworKysrIGIvc3JjL29tYXBmYi1kcml2ZXIuYworQEAgLTMyNiw3ICszMjYsNyBAQCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpCisgCU9NQVBGQlByb2JlQ29udHJvbGxlcihvZmItPmN0cmxfbmFtZSk7CisgCisgCS8qIERvIHdlIGhhdmUgdGhlIERTUyBrZXJuZWwgQVBJPyAqLworLQlpZiAoc3RhdChTWVNGU19EU1NfRElSLCAmc3QpID09IDApIHsKKysJaWYgKDApIHsgLy9zdGF0KFNZU0ZTX0RTU19ESVIsICZzdCkgPT0gMCkgeworIAkJb2ZiLT5kc3MgPSBUUlVFOworIAl9IGVsc2UgeworIAkJb2ZiLT5kc3MgPSBGQUxTRTsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYzlhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBjZmE0NmI2N2Y1OTExNWY2ZDhlZjk0MTRhZjYwMzgwNzQ5ZmYzZWIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6MjE6MTIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzZdIGJsYWNrbGlzdCB0diBvdXQKKworVGhlIHR2LW91dCBnZXRzIGFkZGVkIGxhc3QgYW5kIHRoZSBkcml2ZXIgdHJpZXMgdG8gcmVjb25maWd1cmUgZHZpIHRvIFRWIHJlc29sdXRpb25zLCB3aGljaCBmYWlscy4gc28gYmxhY2tsaXN0IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLW91dHB1dC1kc3MuYyBiL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCitpbmRleCA2Y2M1MmRlLi44M2NiNzExIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMKKysrKyBiL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCitAQCAtMjA1LDYgKzIwNSwxMCBAQCBPTUFQRkJEU1NPdXRwdXREZXRlY3QgKHhmODZPdXRwdXRQdHIgb3V0cHV0KQorIAlpZihvZmItPnRpbWluZ3NbaWR4XVswXSA9PSAnXDAnKQorIAkJcmV0dXJuIFhGODZPdXRwdXRTdGF0dXNEaXNjb25uZWN0ZWQ7CisgCisrCS8vIEhhY2sgdG8gZGlzYWJsZSB0aGUgdHYgb3V0CisrCWlmIChzdHJuY21wKG91dHB1dC0+bmFtZSwgInR2IiwgMikgPT0gMCkKKysJCXJldHVybiBYRjg2T3V0cHV0U3RhdHVzRGlzY29ubmVjdGVkOworKworIAlyZXR1cm4gWEY4Nk91dHB1dFN0YXR1c0Nvbm5lY3RlZDsKKyB9CisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjI4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoCkBAIC0wLDAgKzEsMzI1IEBACitGcm9tIDhiMWY2OTdhNjBlMzVhYjgyZmZmZGFiZmFlZmRiNDVlOWE5ZGYzNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFaW5vLVZpbGxlIFRhbHZhbGEgPHRhbHZhbGFAc3RhbmZvcmQuZWR1PgorRGF0ZTogVHVlLCAyMyBBdWcgMjAxMSAxODozNzowMSArMDIwMAorU3ViamVjdDogW1BBVENIIDUvNl0gQXR0ZW1wdCB0byBmaXggVlJGQgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworaHR0cDovL2RvbWluaW9uLnRocnVoZXJlLm5ldC9naXQvY2dpdC5jZ2kveGY4Ni12aWRlby1vbWFwZmIvY29tbWl0Lz9oPWtvZW4vZml4dXBzJmlkPTY4MzNmYzlmNzk1MjY1ZTQ5NDNkMjQ4MTAzZmJhZjM0NjNiNTE1ZDYKKworU2lnbmVkLW9mZi1ieTogU2ViYXN0aWFuIEtyenlzemtvd2lhayA8ZG9zQGRvc293aXNrby5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMgfCAgNCArLS0KKyBzcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmggfCAgMiArLQorIHNyYy9vbWFwZmItZHJpdmVyLmMgICAgICAgICAgICB8IDI4ICsrKysrKysrKysrKystLS0KKyBzcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMgICAgICAgfCAgMSArCisgc3JjL29tYXBmYi14di1nZW5lcmljLmMgICAgICAgIHwgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgc3JjL29tYXBmYi14di5jICAgICAgICAgICAgICAgIHwgIDMgKysKKyA2IGZpbGVzIGNoYW5nZWQsIDg4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCitpbmRleCBkY2VmYTliLi5kNDM0MjdkIDEwMDY0NAorLS0tIGEvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCisrKysgYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmMKK0BAIC0zOCwxMyArMzgsMTMgQEAKKyAjaW5jbHVkZSAiaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgiCisgCisgLyogQmFzaWMgbGluZS1iYXNlZCBjb3B5IGZvciBwYWNrZWQgZm9ybWF0cyAqLworLXZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCkKKyt2b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3JjX3N0cmlkZSwgaW50IGRzdF9zdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCkKKyB7CisgCWludCBpOworIAlpbnQgbGVuID0gdyAqIDI7CisgCWZvciAoaSA9IDA7IGkgPCBoOyBpKyspCisgCXsKKy0JCW1lbWNweShkZXN0ICsgaSAqIGxlbiwgc3JjICsgaSAqIHN0cmlkZSwgbGVuKTsKKysJCW1lbWNweShkZXN0ICsgaSAqIGRzdF9zdHJpZGUsIHNyYyArIGkgKiBzcmNfc3RyaWRlLCBsZW4pOworIAl9CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaCBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAoraW5kZXggNTg0ODk2YS4uYmE3Y2FmMiAxMDA2NDQKKy0tLSBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAorKysrIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oCitAQCAtMjcsNyArMjcsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAvKiBCYXNpYyBsaW5lLWJhc2VkIGNvcHkgZm9yIHBhY2tlZCBmb3JtYXRzICovCistdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHN0cmlkZSwgdWludDhfdCAqc3JjLCB1aW50OF90ICpkZXN0KTsKKyt2b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3JjX3N0cmlkZSwgaW50IGRzdF9zdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCk7CisgCisgLyogQmFzaWMgQyBpbXBsZW1lbnRhdGlvbiBvZiBZVjEyL0k0MjAgdG8gVVlWWSBjb252ZXJzaW9uICovCisgdm9pZCB1djEyX3RvX3V5dnkoaW50IHcsIGludCBoLCBpbnQgeV9waXRjaCwgaW50IHV2X3BpdGNoLCB1aW50OF90ICp5X3AsIHVpbnQ4X3QgKnVfcCwgdWludDhfdCAqdl9wLCB1aW50OF90ICpkZXN0KTsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggNDhhYTA5Yy4uMDc5ODlmNSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC02Niw2ICs2Niw3IEBACisgI2RlZmluZSBPTUFQRkJfVkVSU0lPTiAxMDAwCisgI2RlZmluZSBPTUFQRkJfRFJJVkVSX05BTUUgIk9NQVBGQiIKKyAjZGVmaW5lIE9NQVBGQl9OQU1FICJvbWFwZmIiCisrI2RlZmluZSBFTkZPUkNFX01PREVTCisgCisgc3RhdGljIEJvb2wgT01BUEZCUHJvYmUoRHJpdmVyUHRyIGRydiwgaW50IGZsYWdzKTsKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpOworQEAgLTEwNSwxMSArMTA2LDEzIEBAIHN0YXRpYyBTeW1UYWJSZWMgT01BUEZCQ2hpcHNldHNbXSA9IHsKKyB0eXBlZGVmIGVudW0geworIAlPUFRJT05fQUNDRUxNRVRIT0QsCisgCU9QVElPTl9GQiwKKysJT1BUSU9OX1JPVEFURSwKKyB9IEZCRGV2T3B0czsKKyAKKyBzdGF0aWMgY29uc3QgT3B0aW9uSW5mb1JlYyBPTUFQRkJPcHRpb25zW10gPSB7CisgCXsgT1BUSU9OX0FDQ0VMTUVUSE9ELAkiQWNjZWxNZXRob2QiLAlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorIAl7IE9QVElPTl9GQiwJCSJmYiIsCQlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorKwl7IE9QVElPTl9ST1RBVEUsCSJyb3RhdGlvbiIsCU9QVFZfU1RSSU5HLAl7MH0sCUZBTFNFIH0sCisgCXsgLTEsCQkJTlVMTCwJCU9QVFZfTk9ORSwJezB9LAlGQUxTRSB9CisgfTsKKyAKK0BAIC0yODYsNiArMjg5LDcgQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIHsKKyAJT01BUEZCUHRyIG9mYjsKKyAJRW50aXR5SW5mb1B0ciBwRW50OworKwljaGFyICpyb3RhdGU7CisgCXJnYiB6ZXJvcyA9IHsgMCwgMCwgMCB9OworIAlzdHJ1Y3Qgc3RhdCBzdDsKKyAKK0BAIC0zNzksNiArMzgzLDggQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIAlwU2Nybi0+cHJvZ0Nsb2NrID0gVFJVRTsKKyAJcFNjcm4tPmNoaXBzZXQgICA9ICJvbWFwZmIiOworIAkKKysJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0lORk8sICJSb3RhdGUgdGVzdCB2ZXJzaW9uIDAuMDJcbiIpOworKwkKKyAJLyogU3RhcnQgd2l0aCBjb25maWd1cmVkIHZpcnR1YWwgc2l6ZSAqLworIAlwU2Nybi0+dmlydHVhbFggPSBwU2Nybi0+ZGlzcGxheS0+dmlydHVhbFg7CisgCXBTY3JuLT52aXJ0dWFsWSA9IHBTY3JuLT5kaXNwbGF5LT52aXJ0dWFsWTsKK0BAIC00OTYsMTIgKzUwMiwyMSBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCW9mYi0+Q2xvc2VTY3JlZW4gPSBwU2NyZWVuLT5DbG9zZVNjcmVlbjsKKyAJcFNjcmVlbi0+Q2xvc2VTY3JlZW4gPSBPTUFQRkJDbG9zZVNjcmVlbjsKKyAKKysJLyogRW5mb3JjZSB0aGUgZGVmYXVsdCBtb2RlICh0aGlzIGlzIHNpbGx5IEkgZ3Vlc3MpICovCisrI2lmZGVmIEVORk9SQ0VfTU9ERVMKKysJLy94Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfSU5GTywgIkVuZm9yY2luZyBtb2Rlc1xuIik7CisrCS8vc2V0X21vZGUob2ZiLCAmb2ZiLT5kZWZhdWx0X21vZGUpOworKwkvL3BTY3JuLT5kaXNwbGF5V2lkdGggPSBvZmItPmZpeGVkX2luZm8ubGluZV9sZW5ndGggLworKwkvLyAgKG9mYi0+c3RhdGVfaW5mby5iaXRzX3Blcl9waXhlbD4+Myk7IC8vb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrI2VuZGlmCisrCisgCS8qIE1hcCBvdXIgZnJhbWVidWZmZXIgbWVtb3J5ICovCisrCW9mYi0+bWVtX2luZm8uc2l6ZSA9IG9mYi0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCAqIG9mYi0+c3RhdGVfaW5mby55cmVzOworIAlvZmItPmZiID0gbW1hcCAoTlVMTCwgb2ZiLT5tZW1faW5mby5zaXplLAorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+ZmQsIDApOworLQlpZiAob2ZiLT5mYiA9PSBOVUxMKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZFxuIik7CisrCWlmIChvZmItPmZiID09IE1BUF9GQUlMRUQpIHsKKysJCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkLCB3YW50ZWQgJWQgYnl0ZXMuXG4iLCBvZmItPm1lbV9pbmZvLnNpemUpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTc4LDggKzU5MywxMyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCX0gZWxzZSBpZiAoIW9mYi0+ZHNzKSB7CisgCisgCQlvZmItPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CistCQlvZmItPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CistCQlvZmItPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby55cmVzOworKwkJaWYgKG9mYi0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMCB8fCBvZmItPnN0YXRlX2luZm8ucm90YXRlID09IDIpIHsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCX0gZWxzZSB7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby55cmVzOworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisrCQl9CisgCisgCQlpZiAoaW9jdGwgKG9mYi0+ZmQsIE9NQVBGQl9TRVRVUF9QTEFORSwgJm9mYi0+cGxhbmVfaW5mbykpIHsKKyAJCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMgYi9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKK2luZGV4IDQwNmZmYzYuLmI3MWQyYWEgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKKysrKyBiL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYworQEAgLTIyMCw2ICsyMjAsNyBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUJsaXp6YXJkIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCQlwYWNrZWRfbGluZV9jb3B5KHNyY193ICYgfjMsCisgCQkJICAgICAgICAgICAgICAgICBzcmNfaCAmIH4zLAorIAkJCSAgICAgICAgICAgICAgICAgKChzcmNfdyArIDEpICYgfjEpICogMiwKKysJCQkJCSBvZmItPnBvcnQtPmZpeGVkX2luZm8ubGluZV9sZW5ndGgsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopYnVmLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKW9mYi0+cG9ydC0+ZmIpOworIAkJCWJyZWFrOworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jIGIvc3JjL29tYXBmYi14di1nZW5lcmljLmMKK2luZGV4IGU2Zjg5ZmUuLmIzM2YzNDQgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYworKysrIGIvc3JjL29tYXBmYi14di1nZW5lcmljLmMKK0BAIC02Miw3ICs2Miw3IEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIHsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CisgCistCS8qIFRoZSBtZW1vcnkgc2l6ZSBpcyBhbHJlYWR5IHNldCBpbiBPTUFQRkJYVlF1ZXJ5SW1hZ2VBdHRyaWJ1dGVzICovCisrCS8qIFRoZSBtZW1vcnkgc2l6ZSBpcyBhbHJlYWR5IHNldCBiZWZvcmUgd2UgZ2V0IGhlcmUgKi8KKyAJaWYgKGlvY3RsKG9mYi0+cG9ydC0+ZmQsIE9NQVBGQl9TRVRVUF9NRU0sICZvZmItPnBvcnQtPm1lbV9pbmZvKSAhPSAwKSB7CisgCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkgICAgICAgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gcGxhbmUgbWVtb3J5XG4iKTsKK0BAIC03MywxOSArNzMsMjAgQEAgaW50IE9NQVBYVkFsbG9jUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgCW9mYi0+cG9ydC0+ZmIgPSBtbWFwIChOVUxMLCBvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUsCisgCSAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorIAkgICAgICAgICAgICAgICAgb2ZiLT5wb3J0LT5mZCwgMCk7CistCWlmIChvZmItPnBvcnQtPmZiID09IE5VTEwpIHsKKysJaWYgKG9mYi0+cG9ydC0+ZmIgPT0gTUFQX0ZBSUxFRCkgeworIAkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJICAgICAgICAgICAiTWFwcGluZyB2aWRlbyBtZW1vcnkgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CisgCisgCS8qIFVwZGF0ZSB0aGUgc3RhdGUgaW5mbyAqLworKwkvKiBMZXQncyBub3QgLSBpdCdzIGJhZAorIAlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorIAl7CisgCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CistCisrCSovCisgCXJldHVybiBTdWNjZXNzOworIH0KKyAKK0BAIC05Myw2ICs5NCw3IEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIGludCBPTUFQWFZTZXR1cFZpZGVvUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgeworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKKysJaW50IHJldDsKKyAKKyAJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPUFVUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKyAJeworQEAgLTEwNCw2ICsxMDYsMzEgQEAgaW50IE9NQVBYVlNldHVwVmlkZW9QbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyAJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworIAkJcmV0dXJuIFh2QmFkQWxsb2M7CisgCX0KKysJLyogQ2hhbmdpbmcgcm90YXRpb24vbm9uc3RkIGZsYWdzIGNhbiBjaGFuZ2UgdGhlIGZpeGVkIGluZm8hICovCisrCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT0dFVF9GU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+Zml4ZWRfaW5mbykpCisrCXsKKysJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworKwkJcmV0dXJuIFh2QmFkQWxsb2M7CisrCX0KKysJLyogQ29ycmVjdCBmaXhlZCBpbmZvIHJlcXVpcmVzIHJlY2FsY3VsYXRpb24gb2YgbmVlZGVkIG1lbW9yeSAqLworKwlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgPSBvZmItPnBvcnQtPmZpeGVkX2luZm8ubGluZV9sZW5ndGggKiBvZmItPnBvcnQtPnN0YXRlX2luZm8ueXJlczsKKysKKysJLyogQWxsb2NhdGUgYnVmZmVyIG1lbW9yeSAqLworKwlyZXQgPSBPTUFQWFZBbGxvY1BsYW5lKHBTY3JuKTsKKysJaWYgKHJldCAhPSBTdWNjZXNzKQorKwkJcmV0dXJuIHJldDsKKysKKysJLyogV29ya2Fyb3VuZCBmb3IgcmVzZXQgb2YgbW9kZSBhZnRlciBtZW1vcnkgYWxsbyAqLworKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9QVVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogc2V0dGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisrCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT0dFVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisrCXsKKysJCXhmODZNc2coWF9FUlJPUiwgIiVzOiBSZWFkaW5nIHN0YXRlIGluZm8gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworKwkJcmV0dXJuIFh2QmFkQWxsb2M7CisrCX0KKyAKKyAJaWYoaW9jdGwob2ZiLT5wb3J0LT5mZCwgT01BUEZCX1NFVFVQX1BMQU5FLAorIAkgICAmb2ZiLT5wb3J0LT5wbGFuZV9pbmZvKSAhPSAwKSB7CitAQCAtMTI0LDYgKzE1MSw4IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZVB0ciBwRHJhdykKKyB7CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworKwlzaG9ydCBkcndfdGVtcDsKKysJc2hvcnQgcm90X3hyZXMsIHJvdF95cmVzOworIAorIAlpZiAoIW9mYi0+cG9ydC0+cGxhbmVfaW5mby5lbmFibGVkCisgCSB8fCBvZmItPnBvcnQtPnVwZGF0ZV93aW5kb3cueCAhPSBzcmNfeAorQEAgLTE2MywxMyArMTkyLDYgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCQlyZXR1cm4gU3VjY2VzczsKKyAJCX0KKyAKKy0JCS8qIElmIHdlIGRvbid0IGhhdmUgdGhlIHBsYW5lIHJ1bm5pbmcsIGVuYWJsZSBpdCAqLworLQkJaWYgKCFvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZCkgeworLQkJCXJldCA9IE9NQVBYVkFsbG9jUGxhbmUocFNjcm4pOworLQkJCWlmIChyZXQgIT0gU3VjY2VzcykKKy0JCQkJcmV0dXJuIHJldDsKKy0JCX0KKy0KKyAJCS8qIFNldCB1cCB0aGUgc3RhdGUgaW5mbywgeHJlcyBhbmQgeXJlcyB3aWxsIGJlIHVzZWQgZm9yCisgCQkgKiBzY2FsaW5nIHRvIHRoZSB2YWx1ZXMgaW4gdGhlIHBsYW5lIGluZm8gc3RydWN0CisgCQkgKi8KK0BAIC0xNzksMTIgKzIwMSwzMSBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXNfdmlydHVhbCA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ueG9mZnNldCA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ueW9mZnNldCA9IDA7CistCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ucm90YXRlID0gMDsKKysJCS8vb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uZ3JheXNjYWxlID0gMDsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby5iaXRzX3Blcl9waXhlbCA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8ubm9uc3RkID0geHZfdG9fb21hcGZiX2Zvcm1hdChpbWFnZSk7CisgCisrCQkvKiBQbGFuZSBpbmZvIGRvZXMgbm90IHJvdGF0ZSB3aXRoIHN0YXRlX2luZm8gKi8KKysJCWlmIChvZmItPnBvcnQtPnN0YXRlX2luZm8ucm90YXRlID09IDEgfHwKKysJCSAgb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAzKSB7CisrCQkJZHJ3X3RlbXAgPSBkcndfeDsKKysJCQlkcndfeCA9IGRyd195OworKwkJCWRyd195ID0gZHJ3X3RlbXA7CisrCisrCQkJZHJ3X3RlbXAgPSBkcndfdzsKKysJCQlkcndfdyA9IGRyd19oOworKwkJCWRyd19oID0gZHJ3X3RlbXA7CisrCisrCQkJcm90X3hyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueXJlczsKKysJCQlyb3RfeXJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby54cmVzOworKwkJfSBlbHNlIHsKKysJCQlyb3RfeHJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby54cmVzOworKwkJCXJvdF95cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCQl9CisrCisrCisgCQkvKiBTZXQgdXAgdGhlIHZpZGVvIHBsYW5lIGluZm8gKi8KKyAJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5lbmFibGVkID0gMTsKKyAJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5wb3NfeCA9IGRyd194OworQEAgLTE5MywxMyArMjM0LDEzIEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IGRyd19oICYgfjE1OworIAorIAkJLyogQ2FwIG91dHB1dCB0byBzY3JlZW4gc2l6ZSAqLworLQkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPiBvZmItPnN0YXRlX2luZm8ueHJlcykgeworKwkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPiByb3RfeHJlcykgeworIAkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5wb3NfeCA9IDA7CistCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSByb3RfeHJlczsKKyAJCX0KKy0JCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA+IG9mYi0+c3RhdGVfaW5mby55cmVzKSB7CisrCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPiByb3RfeXJlcykgeworIAkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5wb3NfeSA9IDA7CistCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IHJvdF95cmVzOworIAkJfQorIAorIAkJcmV0ID0gT01BUFhWU2V0dXBWaWRlb1BsYW5lKHBTY3JuKTsKK0BAIC0yMjMsNiArMjY0LDcgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCQlwYWNrZWRfbGluZV9jb3B5KHNyY193ICYgfjE1LAorIAkJCSAgICAgICAgICAgICAgICAgc3JjX2ggJiB+MTUsCisgCQkJICAgICAgICAgICAgICAgICAoKHNyY193ICsgMSkgJiB+MSkgKiAyLAorKwkJCSAgICAgICAgICAgICAgICAgb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKWJ1ZiwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilvZmItPnBvcnQtPmZiKTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LmMgYi9zcmMvb21hcGZiLXh2LmMKK2luZGV4IDFkZjY1MWUuLjBmZWUyYzYgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLXh2LmMKKysrKyBiL3NyYy9vbWFwZmIteHYuYworQEAgLTE2OSw4ICsxNjksMTEgQEAgc3RhdGljIGludCBPTUFQRkJYVlF1ZXJ5SW1hZ2VBdHRyaWJ1dGVzIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJaCA9ICpoZWlnaHQ7CisgCisgCXcgPSAodyArIDEpICYgfjE7CisrCisrCS8qIENhbid0IGNhbGN1bGF0ZSB0aGVzZSBoZXJlIC0gZG9uJ3Qga25vdyBsaW5lIGxlbmd0aAorIAlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgPSB3IDw8IDE7CisgCW9mYi0+cG9ydC0+bWVtX2luZm8uc2l6ZSAqPSBoOworKwkqLworIAorIAlyZXR1cm4gc2l6ZTsKKyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTY3Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDYtb21hcGZiLXBvcnQtdG8tbmV3LXhzZXJ2ZXItdmlkZW8tQVBJLnBhdGNoCkBAIC0wLDAgKzEsMjcyIEBACitGcm9tIDgwM2VjZjI5MDk5NDllNjE1MmY0YTgxYjZjYmI5MmE0NDMwNjc5YWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIzIE5vdiAyMDEyIDAwOjMxOjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNi82XSBvbWFwZmI6IHBvcnQgdG8gbmV3IHhzZXJ2ZXIgdmlkZW8gQVBJCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvY29tcGF0LWFwaS5oICAgIHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvb21hcGZiLWRyaXZlci5jIHwgNDEgKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvbXBhdC1hcGkuaAorCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBhdC1hcGkuaCBiL3NyYy9jb21wYXQtYXBpLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMTU5MWIxCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGF0LWFwaS5oCitAQCAtMCwwICsxLDk2IEBACisrLyoKKysgKiBDb3B5cmlnaHQgMjAxMiBSZWQgSGF0LCBJbmMuCisrICoKKysgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisrICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrICoKKysgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisrICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorKyAqIFNvZnR3YXJlLgorKyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKysgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKysgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKysgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisrICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKysgKgorKyAqIEF1dGhvcjogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KKysgKi8KKysKKysvKiB0aGlzIGZpbGUgcHJvdmlkZXMgQVBJIGNvbXBhdCBiZXR3ZWVuIHNlcnZlciBwb3N0IDEuMTMgYW5kIHByZSBpdCwKKysgICBpdCBzaG91bGQgYmUgcmV1c2VkIGluc2lkZSBhcyBtYW55IGRyaXZlcnMgYXMgcG9zc2libGUgKi8KKysjaWZuZGVmIENPTVBBVF9BUElfSAorKyNkZWZpbmUgQ09NUEFUX0FQSV9ICisrCisrI2lmbmRlZiBHTFlQSF9IQVNfR0xZUEhfUElDVFVSRV9BQ0NFU1NPUgorKyNkZWZpbmUgR2V0R2x5cGhQaWN0dXJlKGcsIHMpIEdseXBoUGljdHVyZSgoZykpWyhzKS0+bXlOdW1dCisrI2RlZmluZSBTZXRHbHlwaFBpY3R1cmUoZywgcywgcCkgR2x5cGhQaWN0dXJlKChnKSlbKHMpLT5teU51bV0gPSBwCisrI2VuZGlmCisrCisrI2lmbmRlZiBYRjg2X0hBU19TQ1JOX0NPTlYKKysjZGVmaW5lIHhmODZTY3JlZW5Ub1Njcm4ocykgeGY4NlNjcmVlbnNbKHMpLT5teU51bV0KKysjZGVmaW5lIHhmODZTY3JuVG9TY3JlZW4ocykgc2NyZWVuSW5mby5zY3JlZW5zWyhzKS0+c2NybkluZGV4XQorKyNlbmRpZgorKworKyNpZm5kZWYgWEY4Nl9TQ1JOX0lOVEVSRkFDRQorKworKyNkZWZpbmUgU0NSTl9BUkdfVFlQRSBpbnQKKysjZGVmaW5lIFNDUk5fSU5GT19QVFIoYXJnMSkgU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuc1soYXJnMSldCisrCisrI2RlZmluZSBTQ1JFRU5fQVJHX1RZUEUgaW50CisrI2RlZmluZSBTQ1JFRU5fUFRSKGFyZzEpIFNjcmVlblB0ciBwU2NyZWVuID0gc2NyZWVuSW5mby5zY3JlZW5zWyhhcmcxKV0KKysKKysjZGVmaW5lIFNDUkVFTl9JTklUX0FSR1NfREVDTCBpbnQgaW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YKKysKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTX0RFQ0wgaW50IGFyZywgcG9pbnRlciBibG9ja0RhdGEsIHBvaW50ZXIgcFRpbWVvdXQsIHBvaW50ZXIgcFJlYWRtYXNrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHUyBhcmcsIGJsb2NrRGF0YSwgcFRpbWVvdXQsIHBSZWFkbWFzaworKworKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1NfREVDTCBpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbgorKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1Mgc2NybkluZGV4LCBwU2NyZWVuCisrCisrI2RlZmluZSBBREpVU1RfRlJBTUVfQVJHU19ERUNMIGludCBhcmcsIGludCB4LCBpbnQgeSwgaW50IGZsYWdzCisrCisrI2RlZmluZSBTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wgaW50IGFyZywgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzCisrCisrI2RlZmluZSBGUkVFX1NDUkVFTl9BUkdTX0RFQ0wgaW50IGFyZywgaW50IGZsYWdzCisrI2RlZmluZSBGUkVFX1NDUkVFTl9BUkdTKHgpICh4KS0+c2NybkluZGV4LCAwCisrCisrI2RlZmluZSBWVF9GVU5DX0FSR1NfREVDTCBpbnQgYXJnLCBpbnQgZmxhZ3MKKysjZGVmaW5lIFZUX0ZVTkNfQVJHUyhmbGFncykgcFNjcm4tPnNjcm5JbmRleCwgKGZsYWdzKQorKworKyNkZWZpbmUgWEY4Nl9FTkFCTEVESVNBQkxFRkJfQVJHKHgpICgoeCktPnNjcm5JbmRleCkKKysjZWxzZQorKyNkZWZpbmUgU0NSTl9BUkdfVFlQRSBTY3JuSW5mb1B0cgorKyNkZWZpbmUgU0NSTl9JTkZPX1BUUihhcmcxKSBTY3JuSW5mb1B0ciBwU2NybiA9IChhcmcxKQorKworKyNkZWZpbmUgU0NSRUVOX0FSR19UWVBFIFNjcmVlblB0cgorKyNkZWZpbmUgU0NSRUVOX1BUUihhcmcxKSBTY3JlZW5QdHIgcFNjcmVlbiA9IChhcmcxKQorKworKyNkZWZpbmUgU0NSRUVOX0lOSVRfQVJHU19ERUNMIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YKKysKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTX0RFQ0wgU2NyZWVuUHRyIGFyZywgcG9pbnRlciBwVGltZW91dCwgcG9pbnRlciBwUmVhZG1hc2sKKysjZGVmaW5lIEJMT0NLSEFORExFUl9BUkdTIGFyZywgcFRpbWVvdXQsIHBSZWFkbWFzaworKworKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1NfREVDTCBTY3JlZW5QdHIgcFNjcmVlbgorKyNkZWZpbmUgQ0xPU0VfU0NSRUVOX0FSR1MgcFNjcmVlbgorKworKyNkZWZpbmUgQURKVVNUX0ZSQU1FX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcsIGludCB4LCBpbnQgeQorKyNkZWZpbmUgU1dJVENIX01PREVfQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZywgRGlzcGxheU1vZGVQdHIgbW9kZQorKworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHUyh4KSAoeCkKKysKKysjZGVmaW5lIFZUX0ZVTkNfQVJHU19ERUNMIFNjcm5JbmZvUHRyIGFyZworKyNkZWZpbmUgVlRfRlVOQ19BUkdTKGZsYWdzKSBwU2NybgorKworKyNkZWZpbmUgWEY4Nl9FTkFCTEVESVNBQkxFRkJfQVJHKHgpICh4KQorKworKyNlbmRpZgorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItZHJpdmVyLmMgYi9zcmMvb21hcGZiLWRyaXZlci5jCitpbmRleCAwNzk4OWY1Li40ODZmZmE0IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1kcml2ZXIuYworKysrIGIvc3JjL29tYXBmYi1kcml2ZXIuYworQEAgLTQ0LDYgKzQ0LDggQEAKKyAKKyAjaW5jbHVkZSAiZXhhLmgiCisgCisrI2luY2x1ZGUgImNvbXBhdC1hcGkuaCIKKysKKyAjaWZkZWYgSEFWRV9YRVhUUFJPVE9fNzEKKyAjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvZHBtc2NvbnN0Lmg+CisgI2Vsc2UKK0BAIC03MCwxMCArNzIsMTAgQEAKKyAKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcm9iZShEcml2ZXJQdHIgZHJ2LCBpbnQgZmxhZ3MpOworIHN0YXRpYyBCb29sIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncyk7Cistc3RhdGljIEJvb2wgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKy1zdGF0aWMgQm9vbCBPTUFQRkJFbnRlclZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncyk7Cistc3RhdGljIHZvaWQgT01BUEZCTGVhdmVWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpOworLXN0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoaW50IHNjcm5JbmRleCwgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzKTsKKytzdGF0aWMgQm9vbCBPTUFQRkJTY3JlZW5Jbml0KFNDUkVFTl9JTklUX0FSR1NfREVDTCk7Cisrc3RhdGljIEJvb2wgT01BUEZCRW50ZXJWVChWVF9GVU5DX0FSR1NfREVDTCk7Cisrc3RhdGljIHZvaWQgT01BUEZCTGVhdmVWVChWVF9GVU5DX0FSR1NfREVDTCk7Cisrc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wpOworIAorIHN0YXRpYyBCb29sCisgT01BUEZCRW5zdXJlUmVjKFNjcm5JbmZvUHRyIHBTY3JuKQorQEAgLTQ4MSw3ICs0ODMsNyBAQCBPTUFQRkJYdlNjcmVlbkluaXQoU2NyZWVuUHRyIHBTY3JlZW4pCisgfQorIAorIHN0YXRpYyBCb29sCistT01BUEZCQ2xvc2VTY3JlZW4oaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4pCisrT01BUEZCQ2xvc2VTY3JlZW4oQ0xPU0VfU0NSRUVOX0FSR1NfREVDTCkKKyB7CisgCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbcFNjcmVlbi0+bXlOdW1dOworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKK0BAIC00OTAsMTEgKzQ5MiwxMSBAQCBPTUFQRkJDbG9zZVNjcmVlbihpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbikKKyAKKyAJcFNjcmVlbi0+Q2xvc2VTY3JlZW4gPSBvZmItPkNsb3NlU2NyZWVuOworIAkKKy0JcmV0dXJuICgqcFNjcmVlbi0+Q2xvc2VTY3JlZW4pKHNjcm5JbmRleCwgcFNjcmVlbik7CisrCXJldHVybiAoKnBTY3JlZW4tPkNsb3NlU2NyZWVuKShDTE9TRV9TQ1JFRU5fQVJHUyk7CisgfQorIAorIHN0YXRpYyBCb29sCistT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK09NQVBGQlNjcmVlbkluaXQoU0NSRUVOX0lOSVRfQVJHU19ERUNMKQorIHsKKyAJU2NybkluZm9QdHIgcFNjcm4gPSB4Zjg2U2NyZWVuc1twU2NyZWVuLT5teU51bV07CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworQEAgLTUxNiw3ICs1MTgsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorIAkgICAgICAgICAgICAgICAgb2ZiLT5mZCwgMCk7CisgCWlmIChvZmItPmZiID09IE1BUF9GQUlMRUQpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkLCB3YW50ZWQgJWQgYnl0ZXMuXG4iLCBvZmItPm1lbV9pbmZvLnNpemUpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiTWFwcGluZyBmcmFtZWJ1ZmZlciBtZW1vcnkgZmFpbGVkLCB3YW50ZWQgJWQgYnl0ZXMuXG4iLCBvZmItPm1lbV9pbmZvLnNpemUpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTI2LDcgKzUyOCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJLyogT25seSBzdXBwb3J0IFRydWVDb2xvciBmb3Igbm93ICovCisgCWlmICghbWlTZXRWaXN1YWxUeXBlcyhwU2Nybi0+ZGVwdGgsIFRydWVDb2xvck1hc2ssCisgCQlwU2Nybi0+cmdiQml0cywgcFNjcm4tPmRlZmF1bHRWaXN1YWwpKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgInZpc3VhbCB0eXBlIHNldHVwIGZhaWxlZCIKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgInZpc3VhbCB0eXBlIHNldHVwIGZhaWxlZCIKKyAJCSAgICAgICAgICAgIiBmb3IgJWQgYml0cyBwZXIgcGl4ZWwgWzFdXG4iLAorIAkJICAgICAgICAgICBwU2Nybi0+Yml0c1BlclBpeGVsKTsKKyAJCXJldHVybiBGQUxTRTsKK0BAIC01MzQsNyArNTM2LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBTZXQgdXAgcGl4bWFwIGRlcHRoIGluZm9ybWF0aW9uICovCisgCWlmICghbWlTZXRQaXhtYXBEZXB0aHMoKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsWF9FUlJPUiwicGl4bWFwIGRlcHRoIHNldHVwIGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsWF9FUlJPUiwicGl4bWFwIGRlcHRoIHNldHVwIGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01NDYsNyArNTQ4LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAgICAgICAgICBwU2Nybi0+dmlydHVhbFksIHBTY3JuLT54RHBpLAorIAkgICAgICAgICAgICAgICAgICBwU2Nybi0+eURwaSwgcFNjcm4tPmRpc3BsYXlXaWR0aCwKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPmJpdHNQZXJQaXhlbCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiZmJTY3JlZW5Jbml0IGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJmYlNjcmVlbkluaXQgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTU2Nyw3ICs1NjksNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgCS8qIEluaXRpYWxpemUgWFJlbmRlciBmYWxsYmFja3MgKi8KKyAJaWYgKCFmYlBpY3R1cmVJbml0KHBTY3JlZW4sIE5VTEwsIDApKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgImZiUGljdHVyZUluaXQgZmFpbGVkXG4iKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgImZiUGljdHVyZUluaXQgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAkKK0BAIC01NzksNyArNTgxLDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBJbml0aWFsaXplIGRlZmF1bHQgY29sb3JtYXAgKi8KKyAJaWYgKCFtaUNyZWF0ZURlZkNvbG9ybWFwKHBTY3JlZW4pKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCSAgICAgICAgICAgImNyZWF0aW5nIGRlZmF1bHQgY29sb3JtYXAgZmFpbGVkXG4iKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorQEAgLTU4OSw3ICs1OTEsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkvKiBUaGlzIGlzIG5vbi1mYXRhbCBzaW5jZSB3ZSBtaWdodCBiZSBydW5uaW5nIGFnYWluc3Qgb2xkZXIKKyAJCSAqIGtlcm5lbCBkcml2ZXIgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5IGRvIGJhc2ljIDJEIHN0dWZmLi4uCisgCQkgKi8KKy0JCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLCAiUmVhZGluZyBwbGFuZSBpbmZvIGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJSZWFkaW5nIHBsYW5lIGluZm8gZmFpbGVkXG4iKTsKKyAJfSBlbHNlIGlmICghb2ZiLT5kc3MpIHsKKyAKKyAJCW9mYi0+cGxhbmVfaW5mby5lbmFibGVkID0gMTsKK0BAIC02MDIsNyArNjA0LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJfQorIAorIAkJaWYgKGlvY3RsIChvZmItPmZkLCBPTUFQRkJfU0VUVVBfUExBTkUsICZvZmItPnBsYW5lX2luZm8pKSB7CistCQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCisrCQkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJCSAgICAgICAgICAgICIlczogUGxhbmUgc2V0dXAgZmFpbGVkOiAlc1xuIiwKKyAJCQkgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHN0cmVycm9yKGVycm5vKSk7CisgCQkJcmV0dXJuIEZBTFNFOworQEAgLTY0NSw5ICs2NDcsMTAgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlyZXR1cm4gVFJVRTsKKyB9CisgCistc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShpbnQgc2NybkluZGV4LCBEaXNwbGF5TW9kZVB0ciBtb2RlLCBpbnQgZmxhZ3MpCisrc3RhdGljIEJvb2wgT01BUEZCU3dpdGNoTW9kZShTV0lUQ0hfTU9ERV9BUkdTX0RFQ0wpCisgeworLQlyZXR1cm4geGY4NlNldFNpbmdsZU1vZGUgKHhmODZTY3JlZW5zW3Njcm5JbmRleF0sIG1vZGUsIFJSX1JvdGF0ZV8wKTsKKysJU0NSTl9JTkZPX1BUUihhcmcpOworKwlyZXR1cm4geGY4NlNldFNpbmdsZU1vZGUgKHBTY3JuLCBtb2RlLCBSUl9Sb3RhdGVfMCk7CisgfQorIAorIHZvaWQKK0BAIC02OTksMTQgKzcwMiwxNCBAQCBPTUFQRkJQcmludENhcGFiaWxpdGllcyhTY3JuSW5mb1B0ciBwU2NybiwKKyAvKioqIFVuaW1wbGVtZW50ZWQ6ICovCisgCisgc3RhdGljIEJvb2wKKy1PTUFQRkJFbnRlclZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncykKKytPTUFQRkJFbnRlclZUKFZUX0ZVTkNfQVJHU19ERUNMKQorIHsKKyAJeGY4Nk1zZyhYX05PVF9JTVBMRU1FTlRFRCwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworIAlyZXR1cm4gVFJVRTsKKyB9CisgCisgc3RhdGljIHZvaWQKKy1PTUFQRkJMZWF2ZVZUKGludCBzY3JuSW5kZXgsIGludCBmbGFncykKKytPTUFQRkJMZWF2ZVZUKFZUX0ZVTkNfQVJHU19ERUNMKQorIHsKKyAJeGY4Nk1zZyhYX05PVF9JTVBMRU1FTlRFRCwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworIH0KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDctYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwYjliMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRml4IGVycm9ycyB3aXRoIGdsaWJjIDIuMjAKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3N0cmluZy5oOjYzNDowLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1MywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL21pc2MuaDoxMTUsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy94Zjg2c3RyLmg6MzcsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy94Zjg2Lmg6NDQsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3dvcmsvaTU4Ni1vZS1saW51eC94Zjg2LXZpZGVvLW9tYXBmYi8yXzAuMS4xK2dpdHJBVVRPSU5DKzI4YzAwNmM5NGUtcjIxLjcvZ2l0L3NyYy9vbWFwZmIteHYtYmxpenphcmQuYzozMzoKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTMsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9taXNjLmg6MTE1LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4NnN0ci5oOjM3LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4Ni5oOjQ0LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1vbWFwZmIvMl8wLjEuMStnaXRyQVVUT0lOQysyOGMwMDZjOTRlLXIyMS43L2dpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYzoyODoKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KKworU2luZ2VkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZ2l0L3NyYy9vbWFwZmIteHYtYmxpenphcmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9vbWFwZmIteHYtYmxpenphcmQuYwkyMDE0LTA4LTI4IDA1OjE2OjI1LjY4NDA3MDU4NyAtMDcwMAorKysrIGdpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMJMjAxNC0wOC0yOCAxOTowNTozOS40NDAwNzA1ODcgLTA3MDAKK0BAIC0zMCw2ICszMCw3IEBACisgICogIC0KKyAgKi8KKyAKKysjaW5jbHVkZSA8eG9yZy1zZXJ2ZXIuaD4KKyAjaW5jbHVkZSAieGY4Ni5oIgorICNpbmNsdWRlICJ4Zjg2X09TbGliLmgiCisgI2luY2x1ZGUgInhmODZ4di5oIgorSW5kZXg6IGdpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCTIwMTQtMDgtMjggMDU6MTY6MjUuNjg0MDcwNTg3IC0wNzAwCisrKysgZ2l0L3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCTIwMTQtMDgtMjggMTk6MDU6NTEuNzgwMDcwNTg3IC0wNzAwCitAQCAtMjUsNiArMjUsNyBAQAorICAqIEdlbmVyaWMgZnVuY3Rpb25zIGZvciB0aGUgWFYgZHJpdmVyCisgICovCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgInhmODYuaCIKKyAjaW5jbHVkZSAieGY4Nl9PU2xpYi5oIgorICNpbmNsdWRlICJ4Zjg2eHYuaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZWI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiCkBAIC0wLDAgKzEsMzUgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBmcmFtZWJ1ZmZlciBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gIm9tYXBmYiBkcml2ZXIgc3VwcG9ydHMgdGhlIGJhc2ljIFRleGFzIEluc3RydW1lbnRzIE9NQVAgXAorZnJhbWVidWZmZXIuIgorCitMSUNFTlNFID0gIk1JVC1YICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjNlMmNiYWM1Mzg2M2Y2MGUyZjQzMzQzZmIzNDM2N2YiCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworU1JDUkVWID0gIjMzZTM2YzEyZGRlMzM2ZWRiZGQzNDYyNmRkOGFkZmNhZWJjOGZiYjgiCitQUiA9ICIke0lOQ19QUn0uNyIKK1BWID0gIjAuMS4xK2dpdHIke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvY29sbGFiLW1haW50L3hmODYtdmlkZW8tb21hcGZiLmdpdCBcCisgIGZpbGU6Ly8wMDAxLVByZXZlbnRzLW9tYXBmYi1mcm9tLWZyb20tY3Jhc2hpbmctd2hlbi1waXhlbGNsb2NrLW8ucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1SZXZlcnQtU2V0LWEtbGFyZ2UtQ1JUQy11cHBlci1saW1pdC10by1ub3QtcHJ1bmUtbGFyLnBhdGNoIFwKKyAgZmlsZTovLzAwMDItUmV2ZXJ0LVNldC12aXJ0dWFsLXNpemUtd2hlbi1jb25maWd1cmluZy1mcmFtZWJ1ZmZlci5wYXRjaCBcCisgIGZpbGU6Ly8wMDAzLWZvcmNlLXBsYWluLW1vZGUucGF0Y2ggXAorICBmaWxlOi8vMDAwNC1ibGFja2xpc3QtdHYtb3V0LnBhdGNoIFwKKyAgZmlsZTovLzAwMDUtQXR0ZW1wdC10by1maXgtVlJGQi5wYXRjaCBcCisgIGZpbGU6Ly8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaCBcCisgIGZpbGU6Ly8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkZfYXJtdjdhID0gIiAtLWVuYWJsZS1uZW9uICIKK0NGTEFHUyArPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0veG9yZyAiCisKKyMgVXNlIG92ZXJsYXkgMiBvbiBvbWFwMyB0byBlbmFibGUgb3RoZXIgYXBwcyB0byB1c2Ugb3ZlcmxheSAxIChlLmcuIGRtYWkgb3Igb21hcGZicGxheSkKK2RvX2NvbXBpbGVfcHJlcGVuZF9hcm12N2EgKCkgeworICAgICAgICBzZWQgLWkgLWUgczpmYjE6ZmIyOmcgJHtTfS9zcmMvb21hcGZiLXh2LmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZlc2FfMi4zLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjUxYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWExZjA2MTBlYmRjNmYzMTRhOWZhNTEwMmE4YzVjMWIwIgorCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIEdlbmVyaWMgVmVzYSB2aWRlbyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInZlc2EgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIGdlbmVyaWMgVkVTQSB2aWRlbyBjYXJkcy4gSXQgXAorY2FuIGRyaXZlIG1vc3QgVkVTQS1jb21wYXRpYmxlIHZpZGVvIGNhcmRzLCBidXQgb25seSBtYWtlcyB1c2Ugb2YgdGhlIFwKK2Jhc2ljIHN0YW5kYXJkIFZFU0EgY29yZSB0aGF0IGlzIGNvbW1vbiB0byB0aGVzZSBjYXJkcy4gVGhlIGRyaXZlciBcCitzdXBwb3J0cyBkZXB0aHMgOCwgMTUgMTYgYW5kIDI0LiIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJhbmRycHJvdG8gbGlicGNpYWNjZXNzIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitSUkVDT01NRU5EU18ke1BOfSArPSAieHNlcnZlci14b3JnLW1vZHVsZS1saWJpbnQxMCIKKworU1JDX1VSSVttZDVzdW1dID0gImE4OTNjMzdjNTg5ZjdhMzFjZWE5MjlhNWQ4OTZhMGUyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdiZGRmNGQ4NzlkZDZmNjcwODhlY2IyMDNhMzFlMTIzMzRhYWI5ODAxNzRiZDA5MDk5MzBhMjFmMzJlMjUxYzEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzOWQwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZS8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitVcHN0cmVhbS1TdGF0dXM6U3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGYxMDNkNmY1NzA2NzFjNjQ5Y2NkN2IyMjVlNmQ2YzlmMTQzNzE4ODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNSBKdW4gMjAxNCAxNjoxNjo0NCArMDEwMAorU3ViamVjdDogW1BBVENIIDIvMl0gYWRkIG9wdGlvbiBmb3Igdm13Z2Z4CisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgNDkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmU0MGVkNy4uOGUxNTMwNyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjQsNiArNjQsMTMgQEAgQUNfQVJHX0VOQUJMRSh2bXdhcmVjdHJsLWNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtWTVdBUkVDVFJMPSRlbmFibGV2YWxdLCBbVk1XQVJFQ1RSTD1ub10pCisgQU1fQ09ORElUSU9OQUwoQlVJTERfVk1XQVJFQ1RSTCwgW3Rlc3QgIngkVk1XQVJFQ1RSTCIgPSB4eWVzXSkKKyAKKysjIERlZmluZSBhIGNvbmZpZ3VyZSBvcHRpb24gdG8gYnVpbGQgdGhlIHZtd2dmeCBkcml2ZXIKKytBQ19BUkdfRU5BQkxFKHZtd2dmeCwKKysgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtdm13Z2Z4XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIHZtd2dmeCBkcml2ZXIgKEtNUy8zRCkgKGRlZmF1bHQ6IGVuYWJsZWQpXSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVk1XR0ZYPSIkZW5hYmxldmFsIl0sIFtWTVdHRlg9InllcyJdKQorK0FNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0dGWCwgdGVzdCAieCRWTVdHRlgiID0geHllcykKKysKKyAjIFN0b3JlIHRoZSBsaXN0IG9mIHNlcnZlciBkZWZpbmVkIG9wdGlvbmFsIGV4dGVuc2lvbnMgaW4gUkVRVUlSRURfTU9EVUxFUworIFhPUkdfRFJJVkVSX0NIRUNLX0VYVChSQU5EUiwgcmFuZHJwcm90bykKKyBYT1JHX0RSSVZFUl9DSEVDS19FWFQoUkVOREVSLCByZW5kZXJwcm90bykKK0BAIC04NSwxMSArOTIsNiBAQCBQS0dfQ0hFQ0tfRVhJU1RTKFt4b3JnLXNlcnZlciA+PSAxLjQuOTldLAorICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzVfMF0sIDEsCisgICAgICAgICAgICAgICAgICBbSGFzIHZlcnNpb24gMS41LjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pXSkKKyAKKy1QS0dfQ0hFQ0tfRVhJU1RTKFt4b3JnLXNlcnZlciA+PSAxLjcuMF0sCistICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hPUkdfU0VSVkVSXzFfN18wXSwgMSwKKy0gICAgICAgICAgICAgICAgIFtIYXMgdmVyc2lvbiAxLjcuMCBvciBncmVhdGVyIG9mIHRoZSBYc2VydmVyXSkKKy0JCSBCVUlMRF9WTVdHRlg9eWVzXSxbQlVJTERfVk1XR0ZYPW5vXSkKKy0KKyBQS0dfQ0hFQ0tfRVhJU1RTKFt4b3JnLXNlcnZlciA+PSAxLjEyLjBdLAorICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzEyXzBdLCAxLAorICAgICAgICAgICAgICAgICAgW0hhcyB2ZXJzaW9uIDEuMTIuMCBvciBncmVhdGVyIG9mIHRoZSBYc2VydmVyXSldKQorQEAgLTExNCwzOSArMTE2LDI4IEBAIEFNX0NPTkRJVElPTkFMKFhTRVJWRVJfTElCUENJQUNDRVNTLCB0ZXN0ICJ4JFhTRVJWRVJfTElCUENJQUNDRVNTIiA9IHh5ZXMpCisgCisgQUNfU1VCU1QoW21vZHVsZWRpcl0pCisgCistaWYgdGVzdCB4JEJVSUxEX1ZNV0dGWCA9IHh5ZXM7IHRoZW4KKy0JUEtHX0NIRUNLX01PRFVMRVMoW0xJQkRSTV0sIFtsaWJkcm1dLFtdLFtCVUlMRF9WTVdHRlg9bm9dKQorLWZpCistaWYgdGVzdCB4JEJVSUxEX1ZNV0dGWCA9IHh5ZXM7IHRoZW4KKy0jCistIyBFYXJseSB2ZXJzaW9ucyBvZiBtZXNhIDEwIGZvcmdvdCB0byBidW1wIHRoZSBYQSBtYWpvciB2ZXJzaW9uIG51bWJlciBpbgorLSMgdGhlIHhhX3RyYWNrZXIuaCBoZWFkZXIKKy0jCistCVBLR19DSEVDS19NT0RVTEVTKFtYQVRSQUNLRVJdLCBbeGF0cmFja2VyID49IDAuNC4wXSwKKy0JCQkgIFtQS0dfQ0hFQ0tfRVhJU1RTKFt4YXRyYWNrZXIgPSAyLjAuMF0sCistCSAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWEFfMl0sIDEsCistICAgICAgICAgICAgICAgCQkgIFtIYXMgdmVyc2lvbiAyIG9mIFhBXSldKV0sCistCQkJICBbQlVJTERfVk1XR0ZYPW5vXSkKKy0jCistIyBDaGVjayBmb3IgcHJpbWUuCistIworK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBLZXJuZWwgTW9kZSBTZXR0aW5nIGFuZCAzRF0pCisraWYgdGVzdCB4JFZNV0dGWCA9IHh5ZXM7IHRoZW4KKysJUEtHX0NIRUNLX01PRFVMRVMoW0xJQkRSTV0sIFtsaWJkcm1dKQorKwkjIENoZWNrIGZvciBwcmltZS4KKyAJUEtHX0NIRUNLX0VYSVNUUyhbbGliZHJtID49IDIuNC4zOF0sCisgCQkJIFtBQ19ERUZJTkUoW0hBVkVfTElCRFJNXzJfNF8zOF0sIDEsCisgCQkJIFtIYXMgdmVyc2lvbiAyLjQuMzggb3IgZ3JlYXRlciBvZiBsaWJkcm1dKV0pCistZmkKKyAKKy1EUklWRVJfTkFNRT12bXdhcmUKKy1BQ19TVUJTVChbRFJJVkVSX05BTUVdKQorLQorLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBLZXJuZWwgTW9kZSBTZXR0aW5nIGFuZCAzRF0pCistaWYgdGVzdCB4JEJVSUxEX1ZNV0dGWCA9IHh5ZXM7IHRoZW4KKy0JQUNfTVNHX1JFU1VMVChbeWVzXSkKKysJIyBFYXJseSB2ZXJzaW9ucyBvZiBtZXNhIDEwIGZvcmdvdCB0byBidW1wIHRoZSBYQSBtYWpvciB2ZXJzaW9uIG51bWJlcgorKwkjIGluIHRoZSB4YV90cmFja2VyLmggaGVhZGVyCisrCVBLR19DSEVDS19NT0RVTEVTKFtYQVRSQUNLRVJdLCBbeGF0cmFja2VyID49IDAuNC4wXSwKKysJCQkgIFtQS0dfQ0hFQ0tfRVhJU1RTKFt4YXRyYWNrZXIgPSAyLjAuMF0sCisrCSAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWEFfMl0sIDEsCisrICAgICAgICAgICAgICAgCQkgIFtIYXMgdmVyc2lvbiAyIG9mIFhBXSldKV0pCisgICAgICAgICBBQ19ERUZJTkUoW0JVSUxEX1ZNV0dGWF0sIDEsIFtCdWlsZGluZyB0aGUgdm13Z2Z4IGRyaXZlciBwYXRoXSkKKysJQUNfTVNHX1JFU1VMVChbeWVzXSkKKyBlbHNlCisgCUFDX01TR19SRVNVTFQoW25vXSkKKyBmaQorIAorLUFNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0dGWCwgdGVzdCAieCRCVUlMRF9WTVdHRlgiID0geHllcykKKytEUklWRVJfTkFNRT12bXdhcmUKKytBQ19TVUJTVChbRFJJVkVSX05BTUVdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbCisgICAgICAgICAgICAgICAgIE1ha2VmaWxlCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLXZtd2FyZV8xMy4xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Yjk4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVk13YXJlIFNWR0EgZGlzcGxheSBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInZtd2FyZSBpcyBhbiBYb3JnIGRyaXZlciBmb3IgVk13YXJlIHZpcnR1YWwgdmlkZW8gY2FyZHMuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZmNkN2Q0MzdhOTU5YTE1ZmJlZTg3MDc3NDdjNmI1MyIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeGluZXJhbWFwcm90byB2aWRlb3Byb3RvIGxpYnBjaWFjY2VzcyIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDItYWRkLW9wdGlvbi1mb3Itdm13Z2Z4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNiYTIyZmVkNGNiNjM5ZDVjNDI3NmY3ODkyYzU0M2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2MxZDI0NGU0YjFiNzdlOTIxMjY5NTc5NjVjZGM5ZmI4MmRlNGMyMTVjMDcwNmEzYThhYWZmNjkzOWU0YTBjYyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2LiotbGludXh8eDg2XzY0LiotbGludXgpJworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS12bXdnZngiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGQxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYwpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlggZHJpdmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExL2RyaXZlcnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitQRSA9ICIyIgorSU5DX1BSID0gInIyMSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL3hzZXJ2ZXIgeHByb3RvIHJhbmRycHJvdG8gdXRpbC1tYWNyb3MiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kcml2ZXIvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiAke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvLmRlYnVnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC94c2VydmVyCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIEZJWE1FOiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIGxpYnRvb2wgYXJjaGl2ZXMgKCoubGEpIGZyb20gbW9kdWxlcworIyBkaXJlY3RvcnksIGFzIHRoZXkgc2VydmUgbm8gdXNlZnVsIHB1cnBvc2UuIFVwc3RyZWFtIHNob3VsZCBmaXggTWFrZWZpbGUuYW0KK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfS94b3JnL21vZHVsZXMgLXJlZ2V4ICIuKlwubGEkIiB8IHhhcmdzIHJtIC1mIC0tCit9CisKKyMgRnVuY3Rpb24gdG8gYWRkIHRoZSByZWxldmFudCBBQkkgZGVwZW5kZW5jeSB0byBkcml2ZXJzLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkCisjIGZyb20gYSBQQUNLQUdFRlVOQy4KK2RlZiBfYWRkX3hvcmdfYWJpX2RlcGVuZHMoZCwgbmFtZSk6CisgICAgIyBNYXAgb2YgQUJJIG5hbWVzIGV4cG9zZWQgaW4gdGhlIGRlcGVuZGVuY2llcyB0byBwa2ctY29uZmlnIHZhcmlhYmxlcworICAgIGFiaXMgPSB7CisgICAgICAidmlkZW8iOiAiYWJpX3ZpZGVvZHJ2IiwKKyAgICAgICJpbnB1dCI6ICJhYmlfeGlucHV0IgorICAgIH0KKworICAgIG91dHB1dCA9IG9zLnBvcGVuKCJwa2ctY29uZmlnIHhvcmctc2VydmVyIC0tdmFyaWFibGU9JXMiICUgYWJpc1tuYW1lXSkucmVhZCgpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgIGFiaSA9ICIlc3hvcmctYWJpLSVzLSVzIiAlIChtbHByZWZpeCwgbmFtZSwgb3V0cHV0LnNwbGl0KCIuIilbMF0pCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwbiwgJyAnICsgYWJpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWlucHV0LmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYzA2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMKQEAgLTAsMCArMSwxMSBAQAoraW5jbHVkZSB4b3JnLWRyaXZlci1jb21tb24uaW5jCisKK0RFUEVORFMgKz0gImlucHV0cHJvdG8ga2Jwcm90byAiCisKK3B5dGhvbiBhZGRfeG9yZ19hYmlfZGVwZW5kcygpIHsKKyAgICBfYWRkX3hvcmdfYWJpX2RlcGVuZHMoZCwgImlucHV0IikKK30KK1BBQ0tBR0VGVU5DUyA9KyAiYWRkX3hvcmdfYWJpX2RlcGVuZHMiCisKK0ZJTEVTXyR7UE59ICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9pbnB1dC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9pbnB1dC8uZGVidWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItdmlkZW8uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODI4MWUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYwpAQCAtMCwwICsxLDggQEAKK2luY2x1ZGUgeG9yZy1kcml2ZXItY29tbW9uLmluYworCitERVBFTkRTID0rICJyZW5kZXJwcm90byB2aWRlb3Byb3RvIHhleHRwcm90byBmb250c3Byb3RvIgorCitweXRob24gYWRkX3hvcmdfYWJpX2RlcGVuZHMoKSB7CisgICAgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsICJ2aWRlbyIpCit9CitQQUNLQUdFRlVOQ1MgPSsgImFkZF94b3JnX2FiaV9kZXBlbmRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3Mvbm9jb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMGMxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitYT1JHX0RFRkFVTFRfT1BUSU9OUyBwdWxscyBpbiB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY3kgY2hhaW5zOgorCitYT1JHX0NXQVJORkxBR1MgLT4gQUNfUFJPR19DQ19DOTkKK1hPUkdfU1RSSUNUX09QVElPTiAtPiBBQ19QUk9HX0NDX0M5OSwgWE9SR19DV0FSTkZMQUdTCitYT1JHX01BTlBBR0VfU0VDVElPTlMgLT4gQUNfQ0FOT05JQ0FMX0hPU1QgLT4gQ2hlY2tzIGhvc3QgCisKK2VhY2ggb2Ygd2hpY2ggdHJpZ2dlcnMgdGhlIHVzZSBvZiB0aGUgaG9zdCBjb21waWxlci4gQXMgYW4gImFsbCIKK2FyY2hpdGVjdHVyZSBwYWNrYWdlLCBpdCBzaG91bGRuJ3QgbmVlZCBhIGNvbXBpbGVyIChhbmQgZG9lc24ndCkuCisKK1JQIDE3LzUvMjAxMQorCitJbmRleDogZW5jb2RpbmdzLTEuMC40L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVuY29kaW5ncy0xLjAuNC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDExLTA1LTE3IDIzOjM2OjE5LjUwNTA5NTg3NiArMDEwMAorKysrIGVuY29kaW5ncy0xLjAuNC9jb25maWd1cmUuYWMJMjAxMS0wNS0xNyAyMzo1NDoxNC45MzUwOTYxMjggKzAxMDAKK0BAIC00LDEyICs0LDEyIEBACisgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKy0jIFJlcXVpcmUgeG9yZy1tYWNyb3M6IFhPUkdfREVGQVVMVF9PUFRJT05TCisgbTRfaWZuZGVmKFtYT1JHX01BQ1JPU19WRVJTSU9OXSwKKyAJICBbbTRfZmF0YWwoW211c3QgaW5zdGFsbCB4b3JnLW1hY3JvcyAxLjMgb3IgbGF0ZXIgYmVmb3JlIHJ1bm5pbmcgYXV0b2NvbmYvYXV0b2dlbl0pXSkKKyBYT1JHX01BQ1JPU19WRVJTSU9OKDEuMykKKy1YT1JHX0RFRkFVTFRfT1BUSU9OUworLQorK1hPUkdfUkVMRUFTRV9WRVJTSU9OCisrWE9SR19DSEFOR0VMT0cKKytYT1JHX0lOU1RBTEwKKyBBQ19QUk9HX0lOU1RBTEwKKyAKKyAjIFJlcXVpcmUgWC5PcmcncyBmb250IHV0aWwgbWFjcm9zIDEuMiBvciBsYXRlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5nc18xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDg0NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJUaGUgWG9yZyBmb250IGVuY29kaW5nIGZpbGVzIgorCitERVNDUklQVElPTiA9ICJUaGUgZW5jb2RpbmdzIHRoYXQgbWFwIHRvIHNwZWNpZmljIGNoYXJhY3RlcnMgZm9yIGEgXAorbnVtYmVyIG9mIFhvcmcgYW5kIGNvbW1vbiBmb250cy4iCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ZGE5M2YyZGFmMmQ1NTcyZmFhMmJmYWYwZGJkOWU3NiIKK1BFID0gIjEiCitQUiA9ICIke0lOQ19QUn0uMSIKKworREVQRU5EUyA9ICJta2ZvbnRzY2FsZS1uYXRpdmUgZm9udC11dGlsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gIiIKKworU1JDX1VSSSArPSAiZmlsZTovL25vY29tcGlsZXIucGF0Y2giCisKK2luaGVyaXQgYWxsYXJjaAorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1lbmNvZGluZ3NkaXI9JHtkYXRhZGlyfS9mb250cy9YMTEvZW5jb2RpbmdzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGYyZDY1NDZkNTE0YzVjYzRlY2Y3OGE2MDY1N2E1YzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2VkNjMxMjk4OGE0NWQyMzgxMmMyYWM3MDhiNDU5NWY2M2ZkN2E0OWM0ZGNkOWY2NmJkY2Q1MGQxMDU3ZDUzOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzLTEuMC4zL25vY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5ZmI4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworWE9SR19ERUZBVUxUX09QVElPTlMgcHVsbHMgaW4gdGhlIGZvbGxvd2luZyBkZXBlbmRlbmN5IGNoYWluczoKKworWE9SR19DV0FSTkZMQUdTIC0+IEFDX1BST0dfQ0NfQzk5CitYT1JHX1NUUklDVF9PUFRJT04gLT4gQUNfUFJPR19DQ19DOTksIFhPUkdfQ1dBUk5GTEFHUworWE9SR19NQU5QQUdFX1NFQ1RJT05TIC0+IEFDX0NBTk9OSUNBTF9IT1NUIC0+IENoZWNrcyBob3N0IAorCitlYWNoIG9mIHdoaWNoIHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIGhvc3QgY29tcGlsZXIuIEFzIGFuICJhbGwiCithcmNoaXRlY3R1cmUgcGFja2FnZSwgaXQgc2hvdWxkbid0IG5lZWQgYSBjb21waWxlciAoYW5kIGRvZXNuJ3QpLgorCitSUCAxNy81LzIwMTEKKworZGlmZiAtdU5yIGZvbnQtYWxpYXMtMS4wLjMub3JpZy8vY29uZmlndXJlLmFjIGZvbnQtYWxpYXMtMS4wLjMvY29uZmlndXJlLmFjCistLS0gZm9udC1hbGlhcy0xLjAuMy5vcmlnLy9jb25maWd1cmUuYWMJMjAxMS0wNS0xOCAyMToyOToxOC4zNzgyNTg2NDMgKzAyMDAKKysrKyBmb250LWFsaWFzLTEuMC4zL2NvbmZpZ3VyZS5hYwkyMDExLTA1LTE4IDIxOjMyOjA2Ljg2NTI1ODU5MyArMDIwMAorQEAgLTI4LDEyICsyOCwxMiBAQAorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistIyBSZXF1aXJlIHhvcmctbWFjcm9zOiBYT1JHX0RFRkFVTFRfT1BUSU9OUworIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgCSAgW200X2ZhdGFsKFttdXN0IGluc3RhbGwgeG9yZy1tYWNyb3MgMS4zIG9yIGxhdGVyIGJlZm9yZSBydW5uaW5nIGF1dG9jb25mL2F1dG9nZW5dKV0pCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjMpCistWE9SR19ERUZBVUxUX09QVElPTlMKKy0KKytYT1JHX1JFTEVBU0VfVkVSU0lPTgorK1hPUkdfQ0hBTkdFTE9HCisrWE9SR19JTlNUQUxMCisgQUNfUFJPR19JTlNUQUxMCisgCisgWE9SR19GT05UUk9PVERJUgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTEwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXNfMS4wLjMuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYIGZvbnQgYWxpYXNlcyIKKworcmVxdWlyZSB4b3JnLWZvbnQtY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJmMDE1OGI4OWJlNDkzZDUyM2Q2OWQ5ZjI5MjY1MDM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2N5cmlsbGljL2ZvbnRzLmFsaWFzO21kNT1mNDA3OTViMDY0MGQ2Nzg1ODI2YWVjZDNiMTZmNjEyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly83NWRwaS9mb250cy5hbGlhczttZDU9NmJjNDgwMjNmMmFlN2YzYmZjMTA1ZGI3YjBlZTZiNDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWlzYy9mb250cy5hbGlhczttZDU9YThlYzA1ZDUyODQzMWQ0Yzk3MDNiNTVhN2VmZDY3YTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vMTAwZHBpL2ZvbnRzLmFsaWFzO21kNT04NWJlYmQ2Y2EyMTNhYTY1NmMzMDFhNzJlYjQzOTdjYiIKKworU1JDX1VSSSArPSAiZmlsZTovL25vY29tcGlsZXIucGF0Y2giCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MtbmF0aXZlIGZvbnQtdXRpbC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJlbmNvZGluZ3MgZm9udC11dGlsIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImZvbnQtdXRpbC1uYXRpdmUiCisKK2luaGVyaXQgYWxsYXJjaAorCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZDI1ZjY0Nzk2ZmVmMzRiNTNiNDM5YzJlOWVmYTU2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YjQ1M2IyYWFlMWNmYTgwOTAwMDljYTAzNzAzN2I4YzVlMzMzNTUwNjUxZDVhMTU4YjcyNjRjZTFkNDcyYzlhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtdXRpbF8xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg1MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJYLk9yZyBmb250IHBhY2thZ2UgY3JlYXRpb24vaW5zdGFsbGF0aW9uIHV0aWxpdGllcyIKKworcmVxdWlyZSB4b3JnLWZvbnQtY29tbW9uLmluYworCisjVW5pY29kZSBpcyBNSVQKK0xJQ0VOU0UgPSAiQlNEICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWRmMjA4ZWM2NWViODRjZTViYjhkODJkOGYzYjk2NzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdWNzMmFueS5jO2VuZGxpbmU9Mjg7bWQ1PTgzNTdkYzU2N2ZjNjI4YmQxMjY5NmYxNWIyYTMzYmNiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2JkZnRydW5jYXRlLmM7ZW5kbGluZT0yNjttZDU9NGY4MmZmYzEwMWExYjE2NWVhZTljNjk5OGFiZmY5MzcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFwLUlTTzg4NTktMTtiZWdpbmxpbmU9OTtlbmRsaW5lPTIzO21kNT0xY2VjYjk4NDA2MzI0OGYyOWZmZTVjNDZmNWMwNGYzNCIKKworREVQRU5EUyA9ICJlbmNvZGluZ3MgdXRpbC1tYWNyb3MiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ1dGlsLW1hY3Jvcy1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJta2ZvbnRkaXIgbWtmb250c2NhbGUgZW5jb2RpbmdzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIm1rZm9udGRpci1uYXRpdmUgbWtmb250c2NhbGUtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjIzNzU2ZGFiODA5ZjllYzUwMTFiYjI3ZmIyYzNjN2Q2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFhN2ViZGIwNzE1MTA2ZGQyNTUwODJmMjMxMGRiYWEyY2Q3ZTIyNTk1N2MyYTc3ZDcxOTcyMGM3Y2M5MmI5MjEiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZm9udHV0aWxfc3lzcm9vdF9wcmVwcm9jZXNzIgorZm9udHV0aWxfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtkYXRhZGlyfS9mb250cy8gJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9mb250cy8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1mb250LWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjY3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jCkBAIC0wLDAgKzEsNDIgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorTElDRU5TRSA9ICJNSVQtWCIKKworREVQRU5EUyA9ICIgZW5jb2RpbmdzIGZvbnQtYWxpYXMgZm9udC11dGlsLW5hdGl2ZSBta2ZvbnRkaXItbmF0aXZlIG1rZm9udHNjYWxlLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImVuY29kaW5ncyBmb250LXV0aWwgZm9udC1hbGlhcyIKKworWE9SR19QTiA9ICIke0JQTn0iCitJTkNfUFIgPSAicjIiCisKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2ZvbnQvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbWtmb250c2NhbGUtbmF0aXZlIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0VYVFJBX09FTUFLRSArPSAiRkNDQUNIRT0vYmluL3RydWUgVVRJTF9ESVI9JHtTVEFHSU5HX0RJUl9UQVJHRVR9XCRcKE1BUEZJTEVTX1BBVEhcKSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9L1gxMS9mb250cyAtdHlwZSBmIC1uYW1lIGZvbnRzLmRpciB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtsaWJkaXJ9L1gxMS9mb250cyAtdHlwZSBmIC1uYW1lIGZvbnRzLnNjYWxlIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ZvbnRzL1gxMSAtdHlwZSBmIC1uYW1lIGZvbnRzLmRpciB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtkYXRhZGlyfS9mb250cy9YMTEgLXR5cGUgZiAtbmFtZSBmb250cy5zY2FsZSB8IHhhcmdzIHJtIC1mCQorfQorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9YMTEvZm9udHMgJHtkYXRhZGlyfSIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICAgICAgZm9yIGZvbnRkaXIgaW4gYGZpbmQgJEQvdXNyL2xpYi9YMTEvZm9udHMgLXR5cGUgZGA7IGRvCisgICAgICAgICAgICAgICAgbWtmb250ZGlyICRmb250ZGlyCisgICAgICAgICAgICAgICAgbWtmb250c2NhbGUgJGZvbnRkaXIKKyAgICAgICAgZG9uZQorICAgICAgICBmb3IgZm9udGRpciBpbiBgZmluZCAkRC91c3Ivc2hhcmUvZm9udHMvWDExIC10eXBlIGRgOyBkbworICAgICAgICAgICAgICAgIG1rZm9udGRpciAkZm9udGRpcgorICAgICAgICAgICAgICAgIG1rZm9udHNjYWxlICRmb250ZGlyCisgICAgICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjZDFiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiWG9yZyBtaW5pbWFsIGZvbnRzIGRhdGEiCitERVNDUklQVElPTiA9ICJNaW5pbWFsIGZvbnRzIHJlcXVpcmVkIGJ5IFgub3JnLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbWlzYy9mb250cy5kaXI7bWQ1PTgyYTE0M2Q5NGQ2YTk3NGFhZmU5NzEzMmQyZDUxOWFiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLy4uL21pc2MvY3Vyc29yLnBjZi5nejttZDU9NDBiYzgxMDAxZmVmNGMyMWNhMDhkZjQzMDUwMTRhMmEiCisKK1NSQ19VUkkgPSAiZmlsZTovL21pc2MiCisKK1BFID0gIjEiCitQUiA9ICJyMiIKKworaW5oZXJpdCBhbGxhcmNoIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBmb250LWFsaWFzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1MgPSAiJHtXT1JLRElSfS9taXNjIgorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9YMTEvICR7ZGF0YWRpcn0vZm9udHMvWDExLyIKK1JERVBFTkRTXyR7UE59ICs9ICJmb250LWFsaWFzIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2ZvbnRzL1gxMS9taXNjCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vKiAke0R9LyR7ZGF0YWRpcn0vZm9udHMvWDExL21pc2MvCisJaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9YMTEKKwlsbiAtc2YgJHtkYXRhZGlyfS9mb250cy9YMTEvICR7RH0vJHtsaWJkaXJ9L1gxMS9mb250cyAtcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmM4NTcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTgyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMWM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MmZhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTE5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmU4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjJjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS0zLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZhZjFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS00LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmRkZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS01LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDFhMmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS03LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk4NmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS04LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg5YWJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtSVNPODg1OS05LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJiNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMtS09JOC1SLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ZjYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmNjM1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjNjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEwLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhN2QzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEzLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE0LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5MWI4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE1LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNDUwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTE2LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4YjFmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMWU2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MmI3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGE0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWU3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktNy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTgucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYmJkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTkucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMzMTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGI1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEwLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiMWE5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEzLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjODU4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE0LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5MGYzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE1LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMjczZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE2LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwMGI0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xNi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTIucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTIucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNWJiZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzgzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ODU0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNC5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTkzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTcucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTcucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWNmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTkucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTkucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTQyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktOS5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU0NmRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9jdXJzb3IucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9jdXJzb3IucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2N1cnNvci5wY2YuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9mb250cy5kaXIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTI3MThmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy9mb250cy5kaXIKQEAgLTAsMCArMSw0MTAgQEAKKzQwOQorMTB4MjAtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTEKKzEweDIwLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTAKKzEweDIwLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTEKKzEweDIwLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTMKKzEweDIwLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTQKKzEweDIwLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTUKKzEweDIwLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMTYKKzEweDIwLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0yCisxMHgyMC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMworMTB4MjAtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTQKKzEweDIwLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS01CisxMHgyMC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktNworMTB4MjAtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTgKKzEweDIwLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS05CisxMHgyMC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWtvaTgtcgorMTB4MjAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzEwNjQ2LTEKKzEyeDEzamEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC1qYS0xMy0xMjAtNzUtNzUtYy0xMjAtaXNvMTA2NDYtMQorMTJ4MjQucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0xMjAtaXNvODg1OS0xCisxMngyNHJrLnBjZi5neiAtc29ueS1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTI0LTE3MC0xMDAtMTAwLWMtMTIwLWppc3gwMjAxLjE5NzYtMAorMTh4MThqYS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWphLTE4LTEyMC0xMDAtMTAwLWMtMTgwLWlzbzEwNjQ2LTEKKzE4eDE4a28ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC1rby0xOC0xMjAtMTAwLTEwMC1jLTE4MC1pc28xMDY0Ni0xCis0eDYtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEKKzR4Ni1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEwCis0eDYtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xMworNHg2LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTQKKzR4Ni1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTE1Cis0eDYtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xNgorNHg2LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0yCis0eDYtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTMKKzR4Ni1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktNAorNHg2LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS01Cis0eDYtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTcKKzR4Ni1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktOAorNHg2LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS05Cis0eDYtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1rb2k4LXIKKzR4Ni5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvMTA2NDYtMQorNXg3LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xCis1eDctSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xMAorNXg3LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTMKKzV4Ny1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTE0Cis1eDctSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xNQorNXg3LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTYKKzV4Ny1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMgorNXg3LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0zCis1eDctSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTQKKzV4Ny1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktNQorNXg3LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS03Cis1eDctSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTgKKzV4Ny1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktOQorNXg3LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAta29pOC1yCis1eDcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzEwNjQ2LTEKKzV4OC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMQorNXg4LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTAKKzV4OC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTEzCis1eDgtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xNAorNXg4LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTUKKzV4OC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTE2Cis1eDgtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTIKKzV4OC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMworNXg4LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS00Cis1eDgtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTUKKzV4OC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktNworNXg4LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS04Cis1eDgtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTkKKzV4OC1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWtvaTgtcgorNXg4LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc28xMDY0Ni0xCis2eDEwLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTAtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEwLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTAtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEwLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEwLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTAtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEwLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTAtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDEwLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4MTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxMi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEyLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEyLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTItS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4MTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4MTMtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxMy1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTExCis2eDEzLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDEzLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTMtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4MTMtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTMtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4MTMtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTMtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4MTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxM0ItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTNCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxM0ItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTNCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTNCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxM0ItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTNCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxM0ItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTNCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxM08tSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDEzTy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxM08tSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDEzTy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxM08tSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDktSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEKKzZ4OS1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDktSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNng5LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTQKKzZ4OS1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTE1Cis2eDktSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNng5LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0yCis2eDktSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTMKKzZ4OS1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktNAorNng5LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS01Cis2eDktSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTcKKzZ4OS1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktOAorNng5LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS05Cis2eDktS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1rb2k4LXIKKzZ4OS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorN3gxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxMy1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTMtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxMy1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTMtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTMtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxMy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTMtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxMy1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDEzLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTMtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWtvaTgtcgorN3gxMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDEzQi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxM0ItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxM0ItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxM0ItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxM0ItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxM0ItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxM0ItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxM0ItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTNCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzQi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxM0ItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTNCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzQi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxM0ItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTNCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDEzTy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzTy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTNPLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzTy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTNPLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzTy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDEzTy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzTy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDEzTy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDEzTy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDE0LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTQtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDE0LUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxNC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTQtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDE0LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxNC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTQtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxNC1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDE0LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTQtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxNC1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDE0LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTQtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxNC1KSVNYMDIwMS4xOTc2LTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtamlzeDAyMDEuMTk3Ni0wCis3eDE0LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1rb2k4LXIKKzd4MTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorN3gxNEItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTRCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTRCLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTEKKzd4MTRCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTRCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTRCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTUKKzd4MTRCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTRCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDE0Qi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMworN3gxNEItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTRCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDE0Qi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNworN3gxNEItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTRCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDE0Qi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvMTA2NDYtMQorOHgxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xCis4eDEzLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMAorOHgxMy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE0Cis4eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNQorOHgxMy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMgorOHgxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0zCis4eDEzLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNQorOHgxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS03Cis4eDEzLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTgKKzh4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOQorOHgxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAta29pOC1yCis4eDEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xCis4eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzQi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEzCis4eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE0Cis4eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzQi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE2Cis4eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMgorOHgxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTNCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS00Cis4eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNQorOHgxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTNCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS04Cis4eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOQorOHgxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTNPLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMAorOHgxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEzCis4eDEzTy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTNPLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNQorOHgxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE2Cis4eDEzTy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzTy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0zCis4eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS00Cis4eDEzTy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzTy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS03Cis4eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzTy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc28xMDY0Ni0xCis4eDE2LnBjZi5neiAtc29ueS1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtODAtaXNvODg1OS0xCis4eDE2cmsucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy04MC1qaXN4MDIwMS4xOTc2LTAKKzl4MTUtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMQorOXgxNS1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTAKKzl4MTUtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTExCis5eDE1LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMworOXgxNS1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTQKKzl4MTUtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE1Cis5eDE1LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNgorOXgxNS1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0yCis5eDE1LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTMKKzl4MTUtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNAorOXgxNS1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS01Cis5eDE1LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTcKKzl4MTUtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOAorOXgxNS1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS05Cis5eDE1LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1rb2k4LXIKKzl4MTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvMTA2NDYtMQorOXgxNUItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEKKzl4MTVCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTAKKzl4MTVCLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTEKKzl4MTVCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTMKKzl4MTVCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTQKKzl4MTVCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTUKKzl4MTVCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTYKKzl4MTVCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0yCis5eDE1Qi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMworOXgxNUItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTQKKzl4MTVCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS01Cis5eDE1Qi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNworOXgxNUItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTgKKzl4MTVCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS05Cis5eDE1Qi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvMTA2NDYtMQorOXgxOC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEKKzl4MTgtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTAKKzl4MTgtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTEKKzl4MTgtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTMKKzl4MTgtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTQKKzl4MTgtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTUKKzl4MTgtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTYKKzl4MTgtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0yCis5eDE4LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMworOXgxOC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTQKKzl4MTgtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS01Cis5eDE4LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNworOXgxOC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTgKKzl4MTgtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS05Cis5eDE4LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWtvaTgtcgorOXgxOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKKzl4MThCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEKKzl4MThCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMAorOXgxOEItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEzCis5eDE4Qi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTQKKzl4MThCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNQorOXgxOEItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE2Cis5eDE4Qi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0yCis5eDE4Qi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0zCis5eDE4Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS00Cis5eDE4Qi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS01Cis5eDE4Qi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS03Cis5eDE4Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS04Cis5eDE4Qi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS05Cis5eDE4Qi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc28xMDY0Ni0xCithcmFiaWMyNC5wY2YuZ3ogLWFyYWJpYy1uZXdzcGFwZXItbWVkaXVtLXItbm9ybWFsLS0zMi0yNDYtMTAwLTEwMC1wLTEzNy1pc28xMDY0Ni0xCitjbEI2eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsQjZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEzLTEzMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTQtMTQwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNi0xNjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tOC04MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOXgxNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTUtMTUwLTc1LTc1LWMtOTAtaXNvNjQ2LjE5OTEtaXJ2CitjbEk2eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0taS1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xJOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0taS1ub3JtYWwtLTgtODAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjR4Ni5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI1eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTUwLWlzbzY0Ni4xOTkxLWlydgorY2xSNXg2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy01MC1pc282NDYuMTk5MS1pcnYKK2NsUjV4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSNngxMi1JU084ODU5LTEucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCitjbFI2eDEyLUlTTzg4NTktMTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorY2xSNngxMi1JU084ODU5LTEzLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKK2NsUjZ4MTItSVNPODg1OS0xNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0CitjbFI2eDEyLUlTTzg4NTktMTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorY2xSNngxMi1JU084ODU5LTE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKK2NsUjZ4MTItSVNPODg1OS0yLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorY2xSNngxMi1JU084ODU5LTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCitjbFI2eDEyLUlTTzg4NTktNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKK2NsUjZ4MTItSVNPODg1OS01LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorY2xSNngxMi1JU084ODU5LTcucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03CitjbFI2eDEyLUlTTzg4NTktOC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKK2NsUjZ4MTItSVNPODg1OS05LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorY2xSNngxMi1LT0k4LVIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAta29pOC1yCitjbFI2eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKK2NsUjZ4MTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSNng4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3gxNC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xNC0xNDAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE0LTE0MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxNi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4OC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI5eDE1LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE1LTE1MC03NS03NS1jLTkwLWlzbzY0Ni4xOTkxLWlydgorY3UtYWx0MTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGFsdGVybmF0ZSBnbHlwaHMtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEyMi1pc28xMDY0Ni0xCitjdS1hcmFiaWMxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYXJhYmljIGV4dHJhLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMDEtZm9udHNwZWNpZmljLTAKK2N1LWRldm5hZzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBkZXZhbmdhcmkgZXh0cmEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEwNS1mb250c3BlY2lmaWMtMAorY3UtbGlnMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGxpZ2F0dXJlLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xNDEtZm9udHNwZWNpZmljLTAKK2N1LXB1YTEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBwdWEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTExMC1pc28xMDY0Ni0xCitjdTEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTIzLWlzbzEwNjQ2LTEKK2N1YXJhYmljMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGFyYWJpYy1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtOTMtaXNvMTA2NDYtMQorY3VkZXZuYWcxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgZGV2YW5hZ2FyaS1tZWRpdW0tci1ub3JtYWwtLTE1LTEyMC05MC05MC1wLTEwNC1mb250c3BlY2lmaWMtMAorY3Vyc29yLnBjZi5neiBjdXJzb3IKK2RlY2N1cnMucGNmLmd6IGRlY3ckY3Vyc29yCitkZWNzZXNzLnBjZi5neiBkZWN3JHNlc3Npb24KK2diMTZmcy5wY2YuZ3ogLWlzYXMtZmFuZ3NvbmcgdGktbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzItNzItYy0xNjAtZ2IyMzEyLjE5ODAtMAorZ2IxNnN0LnBjZi5neiAtaXNhcy1zb25nIHRpLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTYwLTcyLTcyLWMtMTYwLWdiMjMxMi4xOTgwLTAKK2diMjRzdC5wY2YuZ3ogLWlzYXMtc29uZyB0aS1tZWRpdW0tci1ub3JtYWwtLTI0LTI0MC03Mi03Mi1jLTI0MC1nYjIzMTIuMTk4MC0wCitoYW5nbGcxNi5wY2YuZ3ogLWRhZXdvby1nb3RoaWMtbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTE2MC1rc2M1NjAxLjE5ODctMAoraGFuZ2xtMTYucGNmLmd6IC1kYWV3b28tbWluY2hvLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy0xNjAta3NjNTYwMS4xOTg3LTAKK2hhbmdsbTI0LnBjZi5neiAtZGFld29vLW1pbmNoby1tZWRpdW0tci1ub3JtYWwtLTI0LTE3MC0xMDAtMTAwLWMtMjQwLWtzYzU2MDEuMTk4Ny0wCitqaXNrYW4xNi5wY2YuZ3ogLWppcy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE2LTE1MC03NS03NS1jLTE2MC1qaXN4MDIwOC4xOTgzLTAKK2ppc2thbjI0LnBjZi5neiAtamlzLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMjMwLTc1LTc1LWMtMjQwLWppc3gwMjA4LjE5ODMtMAorazE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTE0MC1qaXN4MDIwOC4xOTgzLTAKK21pY3JvLnBjZi5neiBtaWNybworbmlsMi5wY2YuZ3ogLW1pc2MtbmlsLW1lZGl1bS1yLW5vcm1hbC0tMi0yMC03NS03NS1jLTEwLW1pc2MtZm9udHNwZWNpZmljCitvbGN1cnNvci5wY2YuZ3ogLXN1bi1vcGVuIGxvb2sgY3Vyc29yLS0tLS0xMi0xMjAtNzUtNzUtcC0xNjAtc3Vub2xjdXJzb3ItMQorb2xnbDEwLnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTAtMTAwLTc1LTc1LXAtMTAxLXN1bm9sZ2x5cGgtMQorb2xnbDEyLnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTItMTIwLTc1LTc1LXAtMTEzLXN1bm9sZ2x5cGgtMQorb2xnbDE0LnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTQtMTQwLTc1LTc1LXAtMTI4LXN1bm9sZ2x5cGgtMQorb2xnbDE5LnBjZi5neiAtc3VuLW9wZW4gbG9vayBnbHlwaC0tLS0tMTktMTkwLTc1LTc1LXAtMTU0LXN1bm9sZ2x5cGgtMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmRteF8xLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyM2NlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJkbXhfMS4xLjMuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRE1YOiBEaXN0cmlidXRlZCBNdWx0aWhlYWQgWCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIERNWCBleHRlbnNpb24gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFwKK2FuZCBjb250cm9sIG9mIFhkbXgoMSkgc2VydmVyLiBBdHRyaWJ1dGVzIG9mIHRoZSBYZG14KDEpIHNlcnZlciBhbmQgb2YgXAordGhlIGJhY2stZW5kIHNjcmVlbnMgYXR0YWNoZWQgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVlcmllZCBhbmQgbW9kaWZpZWQgXAordmlhIHRoaXMgcHJvdG9jb2wuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWEzYzM0OTkyMzFhODAzNWVmZDBlMDA0Y2ZiZDNiNzJhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kbXguYztlbmRsaW5lPTMzO21kNT1jNDNmMTlhZjAzYzdjODYxOWNhZGM5NzI0ZWQ5YWZlMSIKKworREVQRU5EUyArPSAibGlieGV4dCBkbXhwcm90byIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImJhOTgzZWJhNWE5ZjA1ZDE1MmEwNzI1YjhlODYzMTUxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5N2RhMzZkMmU1NmEyZDdiNmU0Zjg5NjI0MTc4NWFjYzk1ZTk3ZWI5NTU3NDY1ZmQ2NmJhMmExNTVhN2IyMDEiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJmb250ZW5jXzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4MWYwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJmb250ZW5jXzEuMS4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiWCBmb250IGVuY29kaW5nIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYmZvbnRlbmMgaXMgYSBsaWJyYXJ5IHdoaWNoIGhlbHBzIGZvbnQgbGlicmFyaWVzIFwKK3BvcnRhYmx5IGRldGVybWluZSBhbmQgZGVhbCB3aXRoIGRpZmZlcmVudCBlbmNvZGluZ3Mgb2YgZm9udHMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NjI1NGMyMGFiODFjNjNlNjViMjZmMGRiY2Q0YTFjMSIKKworREVQRU5EUyArPSAiemxpYiB4cHJvdG8gZm9udC11dGlsIgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOTIwOTI0YzNhOWViYzEyNjU1MTdiZGQyZjlmZGU1MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MDU4ODkzMGU2ZmM5NTQyZmYzOGUwODg0Nzc4ZmJjNmU2ZmViZjIxYWRiYWI5MmZkOGY1MjRmZTYwYWVmZDIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmljZV8xLjAuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0OWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJpY2VfMS4wLjkuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJJQ0U6IEludGVyLUNsaWVudCBFeGNoYW5nZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgSW50ZXItQ2xpZW50IEV4Y2hhbmdlIChJQ0UpIHByb3RvY29sIHByb3ZpZGVzIGEgXAorZ2VuZXJpYyBmcmFtZXdvcmsgZm9yIGJ1aWxkaW5nIHByb3RvY29scyBvbiB0b3Agb2YgcmVsaWFibGUsIGJ5dGUtc3RyZWFtIFwKK3RyYW5zcG9ydCBjb25uZWN0aW9ucy4gSXQgcHJvdmlkZXMgYmFzaWMgbWVjaGFuaXNtcyBmb3Igc2V0dGluZyB1cCBhbmQgXAorc2h1dHRpbmcgZG93biBjb25uZWN0aW9ucywgZm9yIHBlcmZvcm1pbmcgYXV0aGVudGljYXRpb24sIGZvciBcCituZWdvdGlhdGluZyB2ZXJzaW9ucywgYW5kIGZvciByZXBvcnRpbmcgZXJyb3JzLiAiCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQxNjJiMWIzYzZmYTgxMmRhOWQ4MDRkY2Y4NTg0YTkzIgorCitERVBFTkRTICs9ICJ4cHJvdG8geHRyYW5zIgorUFJPVklERVMgPSAiaWNlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYklDRSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZGRmYjFlODk3Y2E4MDc5NTMxNjY5YzdjNzcxMTcyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZjcwMzJmMmMxYzY0MzUyYjU0MjNmNmI0OGE4ZWJkYzMzOWNjNjMwNjRhZjM0ZDY2YTZjOWFhNzk3NTllMjAyIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1thcmM0XSA9ICJhY19jdl9saWJfYnNkX2FyYzRyYW5kb21fYnVmPXllcyxhY19jdl9saWJfYnNkX2FyYzRyYW5kb21fYnVmPW5vLGxpYmJzZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyZmMwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoCkBAIC0wLDAgKzEsMTg3IEBACitGcm9tIGIxNDY5NmE1NTc5NmU3Mzk2MjRiYmRhNGY3NzI0MjcwMzJlZmZmMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdWxpZW4gQ3Jpc3RhdSA8amNyaXN0YXVAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMjYgQXByIDIwMTUgMTU6MjA6NTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIEluY2x1ZGUgY29uZmlnLmggYmVmb3JlIGFueXRoaW5nIGVsc2UgaW4gKi5jCisKK0RlYmlhbiBidWcjNzQ5MDA4IDxodHRwczovL2J1Z3MuZGViaWFuLm9yZy83NDkwMDg+CisKK1JlcG9ydGVkLWJ5OiBNaWNoYWVsIFRhdXRzY2huaWcgPG10QGRlYmlhbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gQ3Jpc3RhdSA8amNyaXN0YXVAZGViaWFuLm9yZz4KK1Jldmlld2VkLWJ5OiBBbGFuIENvb3BlcnNtaXRoIDxhbGFuLmNvb3BlcnNtaXRoQG9yYWNsZS5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIHNyYy9jb21tb25fY2FwYWJpbGl0eS5jICB8IDMgKysrCisgc3JjL2NvbW1vbl9pbml0LmMgICAgICAgIHwgMyArKysKKyBzcmMvY29tbW9uX2ludGVyZmFjZS5jICAgfCAzICsrKworIHNyYy9jb21tb25faW8uYyAgICAgICAgICB8IDMgKysrCisgc3JjL2NvbW1vbl9pdGVyYXRvci5jICAgIHwgMyArKysKKyBzcmMvY29tbW9uX21hcC5jICAgICAgICAgfCAzICsrKworIHNyYy9jb21tb25fdmdhYXJiX3N0dWIuYyB8IDMgKysrCisgc3JjL2xpbnV4X2Rldm1lbS5jICAgICAgIHwgNSArKystLQorIHNyYy9vcGVuYnNkX3BjaS5jICAgICAgICB8IDMgKysrCisgc3JjL3NvbHhfZGV2ZnMuYyAgICAgICAgIHwgMyArKysKKyBzcmMveDg2X3BjaS5jICAgICAgICAgICAgfCA0ICsrKy0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMgYi9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYworaW5kZXggNDg4NzQzZC4uMTVkMzk1ZCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCisrKysgYi9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYworQEAgLTMxLDYgKzMxLDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pbml0LmMgYi9zcmMvY29tbW9uX2luaXQuYworaW5kZXggYjFjMGMzZS4uZjdiNTliZCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faW5pdC5jCisrKysgYi9zcmMvY29tbW9uX2luaXQuYworQEAgLTI4LDYgKzI4LDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYyBiL3NyYy9jb21tb25faW50ZXJmYWNlLmMKK2luZGV4IDU5Nzc4Y2YuLmNiOTVlOTAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2ludGVyZmFjZS5jCisrKysgYi9zcmMvY29tbW9uX2ludGVyZmFjZS5jCitAQCAtMjgsNiArMjgsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pby5jIGIvc3JjL2NvbW1vbl9pby5jCitpbmRleCBmNWM5ZTQ1Li5lOTU4NmFkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pby5jCisrKysgYi9zcmMvY29tbW9uX2lvLmMKK0BAIC0yMiw2ICsyMiw5IEBACisgICogQXV0aG9yOgorICAqCUFkYW0gSmFja3NvbiA8YWpheEByZWRoYXQuY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl9pdGVyYXRvci5jIGIvc3JjL2NvbW1vbl9pdGVyYXRvci5jCitpbmRleCBjY2Y2NTZkLi4yYmViMTgwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pdGVyYXRvci5jCisrKysgYi9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKK0BAIC0yOCw2ICsyOCw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX21hcC5jIGIvc3JjL2NvbW1vbl9tYXAuYworaW5kZXggODc1NzE1MS4uZjE4NTRiYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25fbWFwLmMKKysrKyBiL3NyYy9jb21tb25fbWFwLmMKK0BAIC0yMSw2ICsyMSw5IEBACisgICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jIGIvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jCitpbmRleCA5Mzk0MjczLi5jMTcwOGY2IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jCisrKysgYi9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKK0BAIC0yMyw2ICsyMyw5IEBACisgICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAqCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgInBjaWFjY2Vzcy5oIgorZGlmZiAtLWdpdCBhL3NyYy9saW51eF9kZXZtZW0uYyBiL3NyYy9saW51eF9kZXZtZW0uYworaW5kZXggMTBlM2JkZS4uMGQwNTY3YyAxMDA2NDQKKy0tLSBhL3NyYy9saW51eF9kZXZtZW0uYworKysrIGIvc3JjL2xpbnV4X2Rldm1lbS5jCitAQCAtMzIsOCArMzIsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworLQorLSNkZWZpbmUgX0dOVV9TT1VSQ0UKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9vcGVuYnNkX3BjaS5jIGIvc3JjL29wZW5ic2RfcGNpLmMKK2luZGV4IDRkMWI1Y2QuLmI4Y2UzMTggMTAwNjQ0CistLS0gYS9zcmMvb3BlbmJzZF9wY2kuYworKysrIGIvc3JjL29wZW5ic2RfcGNpLmMKK0BAIC0xMyw2ICsxMyw5IEBACisgICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3NvbHhfZGV2ZnMuYyBiL3NyYy9zb2x4X2RldmZzLmMKK2luZGV4IGY1NzIzOTMuLmNmOTY0NjcgMTAwNjQ0CistLS0gYS9zcmMvc29seF9kZXZmcy5jCisrKysgYi9zcmMvc29seF9kZXZmcy5jCitAQCAtMjUsNiArMjUsOSBAQAorIC8qCisgICogU29sYXJpcyBkZXZmcyBpbnRlcmZhY2VzCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmdzLmg+CitkaWZmIC0tZ2l0IGEvc3JjL3g4Nl9wY2kuYyBiL3NyYy94ODZfcGNpLmMKK2luZGV4IDQ5YzFjYWIuLjMyZGFhMDQgMTAwNjQ0CistLS0gYS9zcmMveDg2X3BjaS5jCisrKysgYi9zcmMveDg2X3BjaS5jCitAQCAtMTgsOCArMTgsMTAgQEAKKyAgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCistI2RlZmluZSBfR05VX1NPVVJDRQorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gNzY1ZTBhMzhjYjhjNDBmODg2NWFmNWNiMzU2ZmZlNjAzOWZmYjA4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitEYXRlOiBTdW4sIDIyIE1hciAyMDE1IDIxOjM4OjIzICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBGaXggcXVvdGluZyBpc3N1ZS4KKworbTQgaGFzICdbXScgYXMgcXVvdGluZyBjaGFyYWN0ZXJzLCBzbyBpZiB3ZSB3YW50ICdbXScgdG8KK2VuZCB1cCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCwgd2UgbmVlZCB0byBxdW90ZSB0aGVtIGFnYWluLgorCitSZXBvcnRlZCBieSBHcmVnIFRyb3hlbCA8Z2R0QGlyLmJibi5jb20+LgorCitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgS2xhdXNuZXIgPHdpekBOZXRCU0Qub3JnPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNjdlOWUxLi44ODgzMzBiIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC03Niw3ICs3Niw3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAJCTs7CisgCSpuZXRic2QqKQorIAkJY2FzZSAkaG9zdCBpbgorLQkJKmlbMy05XTg2KikKKysJCSppW1szLTldXTg2KikKKyAJCQlQQ0lBQ0NFU1NfTElCUz0iJFBDSUFDQ0VTU19MSUJTIC1saTM4NiIKKyAJCQk7OworIAkJKng4Nl82NCp8KmFtZDY0KikKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTEzYzhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA2YmQyZjdmOTJlYWU3MTM2NjNmNGUxM2Y2ZTJjYjIzNTI2NjA3YjhjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjozNjo1MCArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNF0gbGludXhfc3lzZnMuYzogSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWAorCitGaXhlcyBjb21waWxhdGlvbiB3aXRoIG11c2wgbGliYy4KKworVGVzdGVkLWJ5OiBCZXJuZCBLdWhscyA8YmVybmQua3VobHNAdC1vbmxpbmUuZGU+CitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgc3JjL2xpbnV4X3N5c2ZzLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9saW51eF9zeXNmcy5jIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK2luZGV4IDUwZDk0Y2YuLjNmOTVlNTMgMTAwNjQ0CistLS0gYS9zcmMvbGludXhfc3lzZnMuYworKysrIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK0BAIC00NSw2ICs0NSw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwNC1Eb24tdC1pbmNsdWRlLXN5cy1pby5oLW9uLWFybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwNC1Eb24tdC1pbmNsdWRlLXN5cy1pby5oLW9uLWFybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMyODU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYjZkZjUyMDIzMDZiZDcxMTU4YjQ4MmYyNWNhMmU2OTE5NjQ1ZDRkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDQgSnVuIDIwMTUgMjA6NTU6MDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIERvbid0IGluY2x1ZGUgc3lzL2lvLmggb24gYXJtCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL2xpbnV4X3N5c2ZzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGludXhfc3lzZnMuYyBiL3NyYy9saW51eF9zeXNmcy5jCitpbmRleCAzZjk1ZTUzLi4xZTNhYWQzIDEwMDY0NAorLS0tIGEvc3JjL2xpbnV4X3N5c2ZzLmMKKysrKyBiL3NyYy9saW51eF9zeXNmcy5jCitAQCAtNTAsNyArNTAsNyBAQAorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAKKy0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYXJtX18pCisrI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyAjaW5jbHVkZSA8c3lzL2lvLmg+CisgI2Vsc2UKKyAjZGVmaW5lIGluYih4KSAtMQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzXzAuMTMuNC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkdlbmVyaWMgUENJIGFjY2VzcyBsaWJyYXJ5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJsaWJwY2lhY2Nlc3MgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IgWCB0byBhY2Nlc3MgdGhlIFwKK1BDSSBidXMgYW5kIGRldmljZXMgaW4gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB3YXkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1GaXgtcXVvdGluZy1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImFjZTc4YWVjNzk5YjFjZjZkZmFlYTU1ZDM4NzllZDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3Zjg2NDY1NDU2MWU0YWM4NjI5YTBlZjljOGYwN2ZiYzFmODU5MmQxYjZjNDE4NDMxNTkzZTliYTJjZjJmY2YiCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc3YWFkYTUyMjJiOWEyMmZiZjM0NzFmZjM2ODcwNjgiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicHRocmVhZC1zdHVic18wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwdGhyZWFkLXN0dWJzXzAuMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkxpYnJhcnkgdGhhdCBwcm92aWRlcyB3ZWFrIGFsaWFzZXMgZm9yIHB0aHJlYWQgZnVuY3Rpb25zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMgXAorbm90IHByb3ZpZGVkIGluIGxpYmMgb3Igb3RoZXJ3aXNlIGF2YWlsYWJsZSBieSBkZWZhdWx0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1YQ0IiCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZWRjMWZlYTAzZDk1OWYwYzJkNzQzZmU1Y2E3NDZhZCIKKworI0RFUEVORFMgPSAieGNiLXByb3RvIHhwcm90byBsaWJ4YXUgbGlieHNsdC1uYXRpdmUiCisjIERFUEVORFMgKz0gInhzbHRwcm9jLW5hdGl2ZSBncGVyZi1uYXRpdmUiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC9saWJwdGhyZWFkLXN0dWJzLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOGZhMzFiNDJlMTNmODdlOGY1YTdhMmI3MzFkYjdlZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzNWI2ZDU0ZTNjYzZmM2JhMjgwNjFkYTgxYWY2NGI5YTkyYjdiNzU3MzE5MDk4MTcyNDg4YTY2MGUzZDg3Mjk5IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJzbV8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI1MTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiU006IFNlc3Npb24gTWFuYWdlbWVudCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgU2Vzc2lvbiBNYW5hZ2VtZW50IExpYnJhcnkgKFNNbGliKSBpcyBhIGxvdy1sZXZlbCBcIkNcIiBcCitsYW5ndWFnZSBpbnRlcmZhY2UgdG8gWFNNUC4gIFRoZSBwdXJwb3NlIG9mIHRoZSBYIFNlc3Npb24gTWFuYWdlbWVudCBcCitQcm90b2NvbCAoWFNNUCkgaXMgdG8gcHJvdmlkZSBhIHVuaWZvcm0gbWVjaGFuaXNtIGZvciB1c2VycyB0byBzYXZlIGFuZCBcCityZXN0b3JlIHRoZWlyIHNlc3Npb25zLiAgQSBzZXNzaW9uIGlzIGEgZ3JvdXAgb2YgY2xpZW50cywgZWFjaCBvZiB3aGljaCBcCitoYXMgYSBwYXJ0aWN1bGFyIHN0YXRlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzBmYjM3ZjQ0ZTAyYmRiZGU4MDU0NjAyNDQwMDcyOGQiCisKK0RFUEVORFMgKz0gImxpYmljZSB4cHJvdG8geHRyYW5zIgorCisjIGxpYlNNIGNhbiB3b3JrIHdpdGhvdXQgbGlidXVpZCwgd2UgZXhwbGljaXRseSBkaXNhYmxlIGl0IHRvIGJyZWFrIHRoZSBmb2xsb3dpbmcgY2lyY3VsYXIgZGVwZW5kZW5jeQorIyB3aGVuIERJU1RST19GRUFUVVJFUyBjb250YWlucyAnc3lzdGVtZCcgYW5kICd4MTEnLgorIyBzeXN0ZW1kIC0+IGRidXMgLT4gbGlic20gLT4gdXRpbC1saW51eCAtPiBzeXN0ZW1kCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJ1dWlkIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlNNIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ5OWE3NzczYzY1YWJhNTEzNjA5ZmU2NTE4NTNjNWYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiYWNhOGM5ZjVkOTM0NDUwYTcwODk2YzRhZDM4ZDA2NDc1NTIxMjU1Y2E2M2I3MTdhNjUxMGZkYjZlMjg3YmQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLWRpZXRfMS42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkMDE0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuMy5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIGxpYngxMS5pbmMKKworREVTQ1JJUFRJT04gKz0gIiBTdXBwb3J0IGZvciBYQ01TIGFuZCBYTE9DQUxFIGlzIGRpc2FibGVkIGluIFwKK3RoaXMgdmVyc2lvbi4iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9YMThOQ01Tc3R1YnMuZGlmZiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWRpc2FibGUteGxvY2FsZS5kaWZmIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1JQUk9WSURFU18ke1BOfS1kZXYgPSAibGlieDExLWRldiIKK1JQUk9WSURFU18ke1BOfS1sb2NhbGUgPSAibGlieDExLWxvY2FsZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlMzZiNzNmOGE0MjE0MzE0MmRkYTgxMjlmMDJlNGUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmMzFhN2MzOWYyZjUyZThlYmQwZGI5NTY0MDM4NGU2MzQ1MWY5YjAxNGVlZDJiYjdmNWRlMDNlOGFkYzgxMTEiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXhsb2NhbGUiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGVhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExLmluYwpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlhsaWI6IEMgTGFuZ3VhZ2UgWCBJbnRlcmZhY2UgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgY2xpZW50IGludGVyZmFjZSB0byB0aGUgWCBXaW5kb3cgXAorU3lzdGVtLCBvdGhlcndpc2Uga25vd24gYXMgJ1hsaWInLiAgSXQgcHJvdmlkZXMgYSBjb21wbGV0ZSBBUEkgZm9yIHRoZSBcCitiYXNpYyBmdW5jdGlvbnMgb2YgdGhlIHdpbmRvdyBzeXN0ZW0uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworaW5oZXJpdCBzaXRlaW5mbworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9saWJ4MTE6IgorCitQRSA9ICIxIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYngxMSIKKworWE9SR19QTiA9ICJsaWJYMTEiCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE3MjI1NWRlZTY2YmIwMTUxNDM1YjJkNWQ3MDlmY2Y3IgorCitERVBFTkRTICs9ICJ4cHJvdG8geGV4dHByb3RvIHh0cmFucyBsaWJ4Y2Iga2Jwcm90byBpbnB1dHByb3RvIgorREVQRU5EUyArPSAieHByb3RvLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgta2V5c3ltZGVmZGlyPSR7U1RBR0lOR19JTkNESVJ9L1gxMS8gLS1kaXNhYmxlLXhmODZiaWdmb250IgorRVhUUkFfT0VNQUtFICs9ICdDV0FSTkZMQUdTPSIiJworCitQQUNLQUdFQ09ORklHID8/PSAieGNtcyIKK1BBQ0tBR0VDT05GSUdbeGNtc10gPSAiLS1lbmFibGUteGNtcywtLWRpc2FibGUteGNtcyIKKworIyBzcmMvdXRpbC9tYWtla2V5cyBpcyBidWlsdCBuYXRpdmVseSBidXQgbmVlZHMgLURfR05VX1NPVVJDRSBkZWZpbmVkLgorQ1BQRkxBR1NfRk9SX0JVSUxEICs9ICItRF9HTlVfU09VUkNFIgorCitQQUNLQUdFUyA9KyAiJHtQTn0teGNiIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEvWEtleXN5bURCICR7ZGF0YWRpcn0vWDExL1hFcnJvckRCICR7ZGF0YWRpcn0vWDExL1hjbXMudHh0IgorRklMRVNfJHtQTn0teGNiICs9ICIke2xpYmRpcn0vbGliWDExLXhjYi5zby4qIgorRklMRVNfJHtQTn0tbG9jYWxlICs9ICIke2RhdGFkaXJ9L1gxMS9sb2NhbGUgJHtsaWJkaXJ9L1gxMS9sb2NhbGUiCisKKyMgTXVsdGlwbGUgbGlieDExIGRlcml2YXRpdmVzIGZyb20gZnJvbSB0aGlzIGZpbGUgYW5kIGFyZSBzZWxlY3RlZCBieSB2aXJ0dWFsL2xpYngxMQorIyBBIHdvcmxkIGJ1aWxkIHNob3VsZCBvbmx5IGJ1aWxkIHRoZSBjb3JyZWN0IHZlcnNpb24sIG5vdCBhbGwgb2YgdGhlbS4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9YMThOQ01Tc3R1YnMuZGlmZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0Y2VkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYKQEAgLTAsMCArMSw1MjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitJbmRleDogbGliWDExLTEuMy9zcmMvaW1Db252LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL2ltQ29udi5jCisrKysgbGliWDExLTEuMy9zcmMvaW1Db252LmMKK0BAIC04Myw2ICs4Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgU3Vic3RSZWMgU3Vic3RUYWJsZVsKKyAgKiBmcm9tIFVDUyBjaGFyIHRvIHNwZWNpZmllZCBjaGFyc2V0IGNoYXIuCisgICogVGhpcyBjb252ZXJ0ZXIgaXMgbmVlZGVkIGZvciBfWGltR2V0Q2hhckNvZGUgc3Vicm91dGluZS4KKyAgKi8KKysjaWZkZWYgWExPQ0FMRQorIFhQb2ludGVyCisgX1hpbUdldExvY2FsZUNvZGUgKAorICAgICBfWGNvbnN0IGNoYXIqCWVuY29kaW5nX25hbWUpCitAQCAtOTYsNiArOTcsNyBAQCBfWGltR2V0TG9jYWxlQ29kZSAoCisgICAgIH0KKyAgICAgcmV0dXJuIGN2dDsKKyB9CisrI2VuZGlmCisgCisgLyoKKyAgKiBSZXR1cm5zIHRoZSBsb2NhbGUgZGVwZW5kZW50IHJlcHJlc2VudGF0aW9uIG9mIGEga2V5c3ltLgorQEAgLTEwNiw2ICsxMDgsNyBAQCBfWGltR2V0TG9jYWxlQ29kZSAoCisgICogdGVybWluYXRpbmcgTlVMIGJ5dGUuIFJldHVybiAwIGlmIHRoZSBrZXlzeW0gaXMgbm90IHJlcHJlc2VudGFibGUgaW4gdGhlCisgICogbG9jYWxlCisgICovCisrI2lmZGVmIFhMT0NBTEUKKyAvKkFSR1NVU0VEKi8KKyBpbnQKKyBfWGltR2V0Q2hhckNvZGUgKAorQEAgLTEzNSw2ICsxMzgsNyBAQCBfWGltR2V0Q2hhckNvZGUgKAorICAgICAgICAgYnVmW2NvdW50XT0gJ1wwJzsKKyAgICAgcmV0dXJuIGNvdW50OworIH0KKysjZW5kaWYKKyAKKyAjaWZkZWYgWEtCCisgc3RhdGljIGludCBsb29rdXBfc3RyaW5nKAorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL1gxOE5DTVNzdHVicy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliWDExLTEuMy9zcmMvWDE4TkNNU3N0dWJzLmMKK0BAIC0wLDAgKzEsNDI4IEBACisrLyoKKysgKiBYMThOQ01Tc3R1YnMuYworKyAqIC0gUHJvdmlkZXMgc3R1YnMgYW5kIGR1bW15IGZ1bmNzIG5lZWRlZCB3aGVuIFhjbXMgYW5kIFhMb2NhbGUgc3R1ZmYgcmVtb3ZlZAorKyAqCisrICogQ29weXJpZ2h0IKkgMjAwMyBNYXR0aGV3IEFsbHVtCisrICoKKysgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKysgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKysgKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNYXR0aGV3IEFsbHVtIG5vdCBiZSB1c2VkIGluCisrICogYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0CisrICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIEtlaXRoIFBhY2thcmQgYW5kIENvbXBhcSBtYWtlcyBubworKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdAorKyAqIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisrICoKKysgKiBNQVRUSEVXIEFMTFVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIAorKyAqIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIAorKyAqIElOIE5PIEVWRU5UIFNIQUxMIEtFSVRIIFBBQ0tBUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKysgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKysgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCisrICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJYbGliaW50LmgiCisrI2luY2x1ZGUgIlhsY2ludC5oIgorKyNpbmNsdWRlIDxYMTEvWGxvY2FsZS5oPgorKyNpbmNsdWRlIDxYMTEvWG9zLmg+CisrI2lmZGVmIFdJTjMyCisrI3VuZGVmIGNsb3NlCisrI2VuZGlmCisrI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorKyNpbmNsdWRlICJYbGNQdWJJLmgiCisrCisrI2luY2x1ZGUgIlhjbXNpbnQuaCIgCQkvKiBmb3IgWGNtc0NDQyB0eXBlICAqLworKyNpbmNsdWRlICJYbGNQdWJJLmgiICAgICAgICAgICAgLyogZm9yIFhMQ2QgdHlwZSAqLworKyNpbmNsdWRlICJjb25maWcuaCIKKysKKysjaWYgISBYTE9DQUxFCisrCisrQm9vbAorK1hTdXBwb3J0c0xvY2FsZSgpCisreworKyAgcmV0dXJuIEZhbHNlOyAJCQorK30KKysKKytjaGFyICoKKytYU2V0TG9jYWxlTW9kaWZpZXJzKAorKyAgICBjb25zdCBjaGFyICptb2RpZmllcnMpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK1hMQ2QKKytfWE9wZW5MQygKKysgICAgY2hhciAqbmFtZSkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrWExDZAorK19YbGNDdXJyZW50TEMoKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKyt2b2lkCisrX1hsY1ZhVG9BcmdMaXN0KAorKyAgICB2YV9saXN0IHZhciwKKysgICAgaW50IGNvdW50LAorKyAgICBYbGNBcmdMaXN0ICphcmdzX3JldCkKKyt7CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKytfWGxjQ291bnRWYUxpc3QoCisrICAgIHZhX2xpc3QgdmFyLAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKytfWENsb3NlTEMoCisrICAgIFhMQ2QgbGNkKQorK3sKKysgIHJldHVybjsKKyt9CisrCisraW50CisrX1hsY0NvbnZlcnQoCisrICAgIFhsY0NvbnYgY29udiwKKysgICAgWFBvaW50ZXIgKmZyb20sCisrICAgIGludCAqZnJvbV9sZWZ0LAorKyAgICBYUG9pbnRlciAqdG8sCisrICAgIGludCAqdG9fbGVmdCwKKysgICAgWFBvaW50ZXIgKmFyZ3MsCisrICAgIGludCBudW1fYXJncykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogWElNIFN0dWJzICovCisrCisrWFBvaW50ZXIKKytfWGltR2V0TG9jYWxlQ29kZSAoIF9YY29uc3QgY2hhciogZW5jb2RpbmdfbmFtZSApCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK2ludAorK19YaW1HZXRDaGFyQ29kZSAoCisrICAgIFhQb2ludGVyICAgICAgICAgICAgdWNzX2NvbnYsCisrICAgIEtleVN5bSAgICAgICAgICAgICAga2V5c3ltLAorKyAgICB1bnNpZ25lZCBjaGFyKiAgICAgIGJ1ZiwKKysgICAgaW50ICAgICAgICAgICAgICAgICBuYnl0ZXMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFhybSBTdHVicyAqLworKworK1hybU1ldGhvZHMKKytfWHJtSW5pdFBhcnNlSW5mbygKKysgICAgWFBvaW50ZXIgKnN0YXRlKQorK3sKKysgICAgcmV0dXJuIChYcm1NZXRob2RzKSBOVUxMOworK30KKysKKysvKiBYd2MgU3R1YnMgKi8KKysKKytpbnQKKytYd2NUZXh0RXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm92ZXJhbGxfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqb3ZlcmFsbF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQgCisrWHdjRHJhd1N0cmluZyhEaXNwbGF5ICpkaXNwbGF5LAorKwkgICAgICBEcmF3YWJsZSBkLAorKwkgICAgICBYRm9udFNldCBmb250X3NldCwKKysJICAgICAgR0MgZ2MsCisrCSAgICAgIGludCB4LCBpbnQgeSwKKysJICAgICAgX1hjb25zdCB3Y2hhcl90ICpzdHJpbmcsCisrCSAgICAgIGludCBudW1fd2NoYXJzKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1h3Y0RyYXdUZXh0KAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgWHdjVGV4dEl0ZW0gICAgICAgICp0ZXh0X2l0ZW1zLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5pdGVtcykKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYd2NEcmF3SW1hZ2VTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKytpbnQKKytYd2NUZXh0RXNjYXBlbWVudCgKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIHJldHVybiAwOworK30KKysKKytTdGF0dXMKKytYd2NUZXh0UGVyQ2hhckV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbG9naWNhbF9leHRlbnRzX2J1ZmZlciwKKysgICAgaW50ICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZSwKKysgICAgaW50ICAgICAgICAgICAgICAgICpudW1fY2hhcnMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbWF4X2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm1heF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuKFhjbXNGYWlsdXJlKTsKKyt9CisrCisraW50CisrWHdjVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjb25zdCBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3AsCisrICAgIHdjaGFyX3QgKioqbGlzdF9yZXQsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybiAwOworK30KKysKKytpbnQKKytYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIHdjaGFyX3QgKipsaXN0LAorKyAgICBpbnQgY291bnQsCisrICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAorKyAgICBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3ApCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQKKytYd2NGcmVlU3RyaW5nTGlzdCh3Y2hhcl90ICoqbGlzdCkKKyt7CisrICByZXR1cm47CisrfQorKworKworK3ZvaWQgWG1iU2V0V01Qcm9wZXJ0aWVzICggICAgICAgIC8qIEFjdHVhbGx5IGZyb20gbWJXTVByb3BzLmMgKi8KKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBXaW5kb3cgdywKKysgICAgX1hjb25zdCBjaGFyICp3aW5kb3dOYW1lLAorKyAgICBfWGNvbnN0IGNoYXIgKmljb25OYW1lLAorKyAgICBjaGFyICoqYXJndiwKKysgICAgaW50IGFyZ2MsCisrICAgIFhTaXplSGludHMgKnNpemVIaW50cywKKysgICAgWFdNSGludHMgKndtSGludHMsCisrICAgIFhDbGFzc0hpbnQgKmNsYXNzSGludHMpCisreworKyAgcmV0dXJuOworK30KKysKKytpbnQKKytYbWJUZXh0UHJvcGVydHlUb1RleHRMaXN0KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNvbnN0IFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCwKKysgICAgY2hhciAqKipsaXN0X3JldCwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuIFhMb2NhbGVOb3RTdXBwb3J0ZWQ7CisrfQorKworK2ludAorK1htYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY2hhciAqKmxpc3QsCisrICAgIGludCBjb3VudCwKKysgICAgWElDQ0VuY29kaW5nU3R5bGUgc3R5bGUsCisrICAgIFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCkKKyt7CisrICByZXR1cm4gWExvY2FsZU5vdFN1cHBvcnRlZDsKKyt9CisrCisraW50CisrWG1iVGV4dEV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICpvdmVyYWxsX2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdUZXh0KAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgWG1iVGV4dEl0ZW0gICAgICAgICp0ZXh0X2l0ZW1zLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5pdGVtcykKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYbWJEcmF3U3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCBjaGFyICAgICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdJbWFnZVN0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3QgY2hhciAgICAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK2ludAorK1htYlRleHRFc2NhcGVtZW50KAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgcmV0dXJuIDA7CisrfQorKworK1N0YXR1cworK1htYlRleHRQZXJDaGFyRXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAqaW5rX2V4dGVudHNfYnVmZmVyLAorKyAgICBYUmVjdGFuZ2xlICAgICAqbG9naWNhbF9leHRlbnRzX2J1ZmZlciwKKysgICAgaW50ICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorKyAgICBpbnQgICAgICAgICAgICAqbnVtX2NoYXJzLAorKyAgICBYUmVjdGFuZ2xlICAgICAqbWF4X2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAqbWF4X2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdW5zaWduZWQgaW50CisrS2V5U3ltVG9VY3M0KEtleVN5bSBrZXlzeW0pCisreworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbmRpZiAKKysKKysjaWYgISBYQ01TCisrCisrWGNtc0NDQyAKKytYY21zQ0NDT2ZDb2xvcm1hcChkcHksIGNtYXApCisrICAgIERpc3BsYXkgKmRweTsKKysgICAgQ29sb3JtYXAgY21hcDsKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrU3RhdHVzCisrX1hjbXNSZXNvbHZlQ29sb3JTdHJpbmcgKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgY29uc3QgY2hhciAqKmNvbG9yX3N0cmluZywKKysgICAgWGNtc0NvbG9yICpwQ29sb3JfZXhhY3RfcmV0dXJuLAorKyAgICBYY21zQ29sb3JGb3JtYXQgcmVzdWx0X2Zvcm1hdCkKKyt7CisrICByZXR1cm4oWGNtc0ZhaWx1cmUpOworK30KKysKKyt2b2lkCisrX1hjbXNVbnJlc29sdmVDb2xvcigKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIFhjbXNDb2xvciAqcENvbG9yKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YVW5yZXNvbHZlQ29sb3IoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBYQ29sb3IgKnBYQ29sb3IpCisreworKyAgcmV0dXJuOworK30KKysKKytYY21zQ21hcFJlYyAqCisrX1hjbXNBZGRDbWFwUmVjKGRweSwgY21hcCwgd2luZG93SUQsIHZpc3VhbCkKKysgICAgRGlzcGxheSAqZHB5OworKyAgICBDb2xvcm1hcCBjbWFwOworKyAgICBXaW5kb3cgd2luZG93SUQ7CisrICAgIFZpc3VhbCAqdmlzdWFsOworK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKyt2b2lkCisrX1hjbXNSR0JfdG9fWENvbG9yKAorKyAgICBYY21zQ29sb3IgKnBDb2xvcnMsCisrICAgIFhDb2xvciAqcFhDb2xvcnMsCisrICAgIHVuc2lnbmVkIGludCBuQ29sb3JzKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrWGNtc0NtYXBSZWMgKgorK19YY21zQ29weUNtYXBSZWNBbmRGcmVlKAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIENvbG9ybWFwIHNyY19jbWFwLAorKyAgICBDb2xvcm1hcCBjb3B5X2NtYXApCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGNtc0RlbGV0ZUNtYXBSZWMoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgQ29sb3JtYXAgY21hcCkKKyt7CisrICByZXR1cm47CisrfQorKworKyNlbmRpZgorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWDExLTEuMy5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGxpYlgxMS0xLjMvc3JjL01ha2VmaWxlLmFtCitAQCAtMzM1LDYgKzMzNSw4IEBAIGlmIFRIUlNUVUJTCisgbGliWDExX2xhX1NPVVJDRVMrPVVJVGhyU3R1YnMuYworIGVuZGlmCisgCisrbGliWDExX2xhX1NPVVJDRVMrPVgxOE5DTVNzdHVicy5jCisrCisgeDExZGF0YWRpciA9IEBYMTFfREFUQURJUkAKKyB4MTFkYXRhX0RBVEEgPSBYS2V5c3ltREIgWEVycm9yREIKKyAKK0BAIC0zNDIsNiArMzQ0LDcgQEAgRVhUUkFfRElTVCA9IFwKKyAJJCh4MTFkYXRhX0RBVEEpIFwKKyAJb3MyU3R1YnMuYyBcCistCVVJVGhyU3R1YnMuYyAKKysJVUlUaHJTdHVicy5jIFwKKysJWDE4TkNNU3N0dWJzLmMKKyAKKyBpZiBYQ0IKKyBsaWJYMTFfbGFfU09VUkNFUyArPSBcCitJbmRleDogbGliWDExLTEuMy9zcmMvbG9ja2luZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWDExLTEuMy5vcmlnL3NyYy9sb2NraW5nLmMKKysrKyBsaWJYMTEtMS4zL3NyYy9sb2NraW5nLmMKK0BAIC02Niw3ICs2Niw5IEBAIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGEKKyAjZGVmaW5lIE5VTV9GUkVFX0NWTFMgNAorIAorIC8qIGluIGxjV3JhcC5jICovCisrI2lmZGVmIFhMT0NBTEUKKyBleHRlcm4gTG9ja0luZm9QdHIgX1hpMThuX2xvY2s7CisrI2VuZGlmCisgCisgI2lmZGVmIFdJTjMyCisgc3RhdGljIERXT1JEIF9YX1Rsc0luZGV4ID0gKERXT1JEKS0xOworQEAgLTU5NCw5ICs1OTYsMTEgQEAgU3RhdHVzIFhJbml0VGhyZWFkcyh2b2lkKQorICAgICBfWGdsb2JhbF9sb2NrID0gJmdsb2JhbF9sb2NrOworICAgICB4bXV0ZXhfaW5pdChfWGdsb2JhbF9sb2NrLT5sb2NrKTsKKyAgICAgeG11dGV4X3NldF9uYW1lKF9YZ2xvYmFsX2xvY2stPmxvY2ssICJYbGliIGdsb2JhbCIpOworKyNpZmRlZiBYTE9DQUxFCisgICAgIF9YaTE4bl9sb2NrID0gJmkxOG5fbG9jazsKKyAgICAgeG11dGV4X2luaXQoX1hpMThuX2xvY2stPmxvY2spOworICAgICB4bXV0ZXhfc2V0X25hbWUoX1hpMThuX2xvY2stPmxvY2ssICJYbGliIGkxOG4iKTsKKysjZW5kaWYKKyAgICAgX1hMb2NrTXV0ZXhfZm4gPSBfWExvY2tNdXRleDsKKyAgICAgX1hVbmxvY2tNdXRleF9mbiA9IF9YVW5sb2NrTXV0ZXg7CisgICAgIF9YQ3JlYXRlTXV0ZXhfZm4gPSBfWENyZWF0ZU11dGV4OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9kaXNhYmxlX3Rlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9kaXNhYmxlX3Rlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjZjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2Rpc2FibGVfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK1VwZGF0ZSBmb3IgMS42LjEKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51cmQgbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbSBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCistLS0gbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQkyMDEyLTA2LTAyIDA5OjM3OjE4LjAwMDAwMDAwMCArMDMwMAorKysrIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0JMjAxMy0wMS0wMiAxNjoxMDoyNC45NjAxNTYxMzEgKzAyMDAKK0BAIC0zNiwxMSArMzYsNiBAQAorICAgICAgICAgPCBsb2NhbGUuZGlyLmwxID4gbG9jYWxlLmRpci5sMgorCWNhdCBsb2NhbGUuZGlyLmwyIGxvY2FsZS5kaXIubDEgPiBsb2NhbGUuZGlyCisKKy1pZiBIQVZFX1BFUkwKKy1MT0dfQ09NUElMRVIgPSAkKFBFUkwpCistVEVTVFMgPSBjb21wb3NlLWNoZWNrLnBsCistZW5kaWYgSEFWRV9QRVJMCistCisKKyAjIFBlci1sb2NhbGUgZGF0YSBmaWxlcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MzOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CistLS0gbGliWDExLVgxMVI3LjAtMS4wLjAvc3JjL0ZvbnQuYy5vcmlnCTIwMDYtMDMtMTIgMTg6MzU6NDIuMDAwMDAwMDAwICswMTAwCisrKysgbGliWDExLVgxMVI3LjAtMS4wLjAvc3JjL0ZvbnQuYwkyMDA2LTAzLTEyIDE4OjQwOjI3LjAwMDAwMDAwMCArMDEwMAorQEAgLTcwMSw3ICs3MDEsMTEgQEAKKyAgICAgfQorICAgICBpZiAobCAtIDIgLSAocCAtIGNoYXJzZXQpIDwgMCkKKyAJcmV0dXJuIDA7CisrI2lmZGVmIFhMT0NBTEUKKyAgICAgaWYgKF9YbGNOQ29tcGFyZUlTT0xhdGluMShuYW1lICsgbCAtIDIgLSAocCAtIGNoYXJzZXQpLCBjaGFyc2V0LCBwIC0gY2hhcnNldCkpCisrI2Vsc2UKKysgICAgaWYgKHN0cm5jYXNlY21wKG5hbWUgKyBsIC0gMiAtIChwIC0gY2hhcnNldCksIGNoYXJzZXQsIHAgLSBjaGFyc2V0KSkKKysjZW5kaWYKKyAJcmV0dXJuIDA7CisgICAgIGlmIChzdHJsZW4ocCArIDEpICsgbCAtIDEgPj0gc2l6ZW9mKGJ1ZikgLSAxKQorIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzNDdmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCistLS0gbGliWDExLVgxMVI3LjAtMS4wLjAvaW5jbHVkZS9YMTEvWGxpYi5ofmZpeC11dGY4LXdyb25nLWRlZmluZQorKysrIGxpYlgxMS1YMTFSNy4wLTEuMC4wL2luY2x1ZGUvWDExL1hsaWIuaAorQEAgLTEwMyw3ICsxMDMsNyBAQAorIAorIC8qIEFQSSBtZW50aW9uaW5nICJVVEY4IiBvciAidXRmOCIgaXMgYW4gWEZyZWU4NiBleHRlbnNpb24sIGludHJvZHVjZWQgaW4KKyAgICBOb3ZlbWJlciAyMDAwLiBJdHMgcHJlc2VuY2UgaXMgaW5kaWNhdGVkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBtYWNyby4gKi8KKy0jZGVmaW5lIFhfSEFWRV9VVEY4X1NUUklORyAxCisrI3VuZGVmIFhfSEFWRV9VVEY4X1NUUklORworIAorIHR5cGVkZWYgY2hhciAqWFBvaW50ZXI7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFiZjdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaApAQCAtMCwwICsxLDcyIEBACitGcm9tIDRkODVkNWYzYmQ4YWZhYzg5MzczOGZkODhlMTlkOGNiNWNmOTk4ZmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogU3VuLCAyNyBKdWwgMjAxNCAxMzoxMDowNyAtMDQwMAorU3ViamVjdDogW1BBVENIXSBsaWJYMTE6IEFkZCBtaXNzaW5nIE5VTEwgY2hlY2sgb24gaW0gYW5kIGltLT5tZXRob2RzCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgKGM4MjdlZGNkMWM0YTdmOTIwYWEyNTIwODA4M2I1YjU4ZDYwZDJiNDQpCitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorCistLS0KKyBzcmMveGxpYmkxOG4vSUNXcmFwLmMgfCA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtcnUgbGliWDExLTEuNi4yLW9yaWcvc3JjL3hsaWJpMThuL0lDV3JhcC5jIGxpYlgxMS0xLjYuMi9zcmMveGxpYmkxOG4vSUNXcmFwLmMKKy0tLSBsaWJYMTEtMS42LjItb3JpZy9zcmMveGxpYmkxOG4vSUNXcmFwLmMJMjAxNC0wNy0yNyAxMzozODoyOS41ODY2NjY0NDkgLTA0MDAKKysrKyBsaWJYMTEtMS42LjIvc3JjL3hsaWJpMThuL0lDV3JhcC5jCTIwMTQtMDctMjcgMTM6NDE6MzkuNjcxNjA5MDMwIC0wNDAwCitAQCAtMTY5LDcgKzE2OSw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIGNoYXIgICAqcmV0OworKyAgICBjaGFyICAgKnJldCA9IE5VTEw7CisgCisgICAgIC8qCisgICAgICAqIHNvIGNvdW50IHRoZSBzdHVmZiBkYW5nbGluZyBoZXJlCitAQCAtMTg1LDcgKzE4NSw4IEBACisgICAgIF9YSU1WYVRvTmVzdGVkTGlzdCh2YXIsIHRvdGFsX2NvdW50LCAmYXJncyk7CisgICAgIHZhX2VuZCh2YXIpOworIAorLSAgICByZXQgPSAoKmltLT5tZXRob2RzLT5zZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworKyAgICBpZiAoaW0gJiYgaW0tPm1ldGhvZHMpCisrCXJldCA9ICgqaW0tPm1ldGhvZHMtPnNldF92YWx1ZXMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0xOTYsNyArMTk3LDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgY2hhciAgICpyZXQ7CisrICAgIGNoYXIgICAqcmV0ID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0yMTIsNyArMjEzLDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIHJldCA9ICgqaW0tPm1ldGhvZHMtPmdldF92YWx1ZXMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJcmV0ID0gKCppbS0+bWV0aG9kcy0+Z2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTIyOCw3ICsyMzAsNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBYSUMgICAgIGljOworKyAgICBYSUMgICAgIGljID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0yNDQsNyArMjQ2LDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIGljID0gKFhJQykgKCppbS0+bWV0aG9kcy0+Y3JlYXRlX2ljKSAoaW0sIGFyZ3MpOworKyAgICBpZiAoaW0gJiYgaW0tPm1ldGhvZHMpCisrCWljID0gKFhJQykgKCppbS0+bWV0aG9kcy0+Y3JlYXRlX2ljKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgaWYgKGljKSB7CisgCWljLT5jb3JlLm5leHQgPSBpbS0+Y29yZS5pY19jaGFpbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTMxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExXzEuNi4zLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgbGlieDExLmluYworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGVfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUzNmI3M2Y4YTQyMTQzMTQyZGRhODEyOWYwMmU0ZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2YzMWE3YzM5ZjJmNTJlOGViZDBkYjk1NjQwMzg0ZTYzNDUxZjliMDE0ZWVkMmJiN2Y1ZGUwM2U4YWRjODExMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4YXVfMS4wLjguYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjhiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGF1XzEuMC44LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWGF1OiBYIEF1dGhvcml0eSBEYXRhYmFzZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJ4YXUgcHJvdmlkZXMgdGhlIG1haW4gaW50ZXJmYWNlcyB0byB0aGUgWDExIFwKK2F1dGhvcmlzYXRpb24gaGFuZGxpbmcsIHdoaWNoIGNvbnRyb2xzIGF1dGhvcmlzYXRpb24gZm9yIFggY29ubmVjdGlvbnMsIFwKK2JvdGggY2xpZW50LXNpZGUgYW5kIHNlcnZlci1zaWRlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc5MDhlMzQyNDkxMTk4NDAxMzIxY2VjMTk1NjgwN2VjIgorCitERVBFTkRTICs9ICIgeHByb3RvIgorUFJPVklERVMgPSAieGF1IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhhdSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg1ZjhhYmJmZmE2ZDE0NWMwZjkzMGYwMDcwM2IyMWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmRkNDc3MzIwYWViNWNkZDY3MjcyODM4NzIyZDZiN2Q1NDQ4ODdkZmU3ZGU0NmUxZTdjYzBjMjdjMmJlYTRmMiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlL2ZpeC14Y2IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTQ4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZS9maXgteGNiLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGVyZSBpcyBubyBleHRyYSByZXBseSBkYXRhIGFuZCBpZiB3ZSBzYXkgbm90IHRvIGRpc2dhcmQgaXQsIHhjYgordGhyb3dzIGZhdGFsIGFzc2VydHMuCisKK1JQIC0gMjYvMTEvMDkKKworSW5kZXg6IGdpdC94Y2FsaWJyYXRlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy94Y2FsaWJyYXRlLmMJMjAwOS0xMS0yNiAwODoxMTo0OC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQveGNhbGlicmF0ZS5jCTIwMDktMTEtMjYgMDg6MDk6NTUuMDAwMDAwMDAwICswMDAwCitAQCAtMjE2LDcgKzIxNiw3IEBACisgICByZXEtPnJlcVR5cGUgPSBpbmZvLT5jb2Rlcy0+bWFqb3Jfb3Bjb2RlOworICAgcmVxLT54Q2FsaWJyYXRlUmVxVHlwZSA9IFhfWENhbGlicmF0ZVJhd01vZGU7CisgICByZXEtPm9uID0gZW5hYmxlOworLSAgaWYgKCFfWFJlcGx5IChkcHksICh4UmVwbHkgKikgJnJlcCwgMCwgeEZhbHNlKSkgCisrICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4VHJ1ZSkpIAorICAgICB7CisgICAgICAgVW5sb2NrRGlzcGxheSAoZHB5KTsKKyAgICAgICBTeW5jSGFuZGxlICgpOworQEAgLTI0MCw3ICsyNDAsNyBAQAorICAgcmVxLT54Q2FsaWJyYXRlUmVxVHlwZSA9IFhfWENhbGlicmF0ZVNjcmVlblRvQ29vcmQ7CisgICByZXEtPnggPSAqeDsKKyAgIHJlcS0+eSA9ICp5OworLSAgaWYgKCFfWFJlcGx5IChkcHksICh4UmVwbHkgKikgJnJlcCwgMCwgeEZhbHNlKSkgCisrICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4VHJ1ZSkpIAorICAgICB7CisgICAgICAgVW5sb2NrRGlzcGxheSAoZHB5KTsKKyAgICAgICBTeW5jSGFuZGxlICgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWU4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZV9naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYQ2FsaWJyYXRlOiBUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYQ2FsaWJyYXRlIGlzIGEgbGlicmFyeSBmb3IgcGVyZm9ybWluZyB0b3VjaHNjcmVlbiBcCitjYWxpYnJhdGlvbiB3aXRoIHRoZSBrZHJpdmUgdHNsaWIgdG91Y2hzY3JlZW4gZHJpdmVyLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGNhbGlicmF0ZS5oO2VuZGxpbmU9MjE7bWQ1PWZhNTcyZGY2NDM5ZjBmMjM1ZjI2MTJmMzcwZjE1M2Q3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hjYWxpYnJhdGUuYztlbmRsaW5lPTIxO21kNT1mYTU3MmRmNjQzOWYwZjIzNWYyNjEyZjM3MGYxNTNkNyIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBjYWxpYnJhdGVwcm90byBsaWJ4ZXh0IgorCitTUkNSRVYgPSAiMjA5ZDgzYWY2MWVkMzhhMDAyYzgwOTYzNzdkZWFjMjkyYjNlMzk2YyIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvbGliWENhbGlicmF0ZSBcCisgICAgICAgICAgIGZpbGU6Ly9maXgteGNiLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitGSUxFU18ke1BOfS1sb2NhbGUgKz0gIiR7ZGF0YWRpcn0vWDExL2xvY2FsZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzMWYyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIlRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyAoWENCKSBpcyBhIHJlcGxhY2VtZW50IFwKK2ZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gXAordGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSB4Y2ItcHJvdG8tbmF0aXZlIGxpYnB0aHJlYWQtc3R1YnMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC9saWJ4Y2ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly94Y2JpbmNsdWRlZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2sucGF0Y2giCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYnhjYi0uKiIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYnhjYi5zby4qIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4YXUgYW5kIG90aGVycyByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgJyR7bGliZGlyfScsICdebGlieGNiLSguKilcLnNvXC4uKiQnLCAnbGlieGNiLSVzJywgJ1hDQiBsaWJyYXJ5IG1vZHVsZSBmb3IgJXMnLCBhbGxvd19saW5rcz1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9kaXNhYmxlLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi9kaXNhYmxlLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDFjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL2Rpc2FibGUtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVGhlICJjaGVjayIgcGFja2FnZSBpcyBjaGVja2VkIGZvciB3aXRob3V0IGFuIGV4cGxpY2l0IGVuYWJsZS9kaXNhYmxlIG9wdGlvbiwKK3doaWNoIGNhbiBsZWFkIHRvIG5vbi1kZXRlcm1pbmlzdGljIGJ1aWxkIGlzc3VlcyB3aXRoIGJvdGggY2hlY2sgYW5kIGxpYnhzbHQuCisKK0FzIHRoZSB1bml0IHRlc3Qgc3VpdGUgaXMgbWluaW1hbCBhdCBwcmVzZW50LCBzaW1wbHkgZGlzYWJsZSB0aGUgdGVzdCBzdWl0ZS4gIEluCit0aGUgZnV0dXJlIGlmIHRoZSB0ZXN0IHN1aXRlIGlzIGV4cGFuZGVkIHRoaXMgY2FuIGJlIG1hZGUgY29uZGl0aW9uYWwgb24gdGhlCitwdGVzdCBESVNUUk9fRkVBVFVSRS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDZkN2M5YTUuLjIyY2NlYjkgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTIxLDcgKzIxLDggQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgCisgQU1fUEFUSF9QWVRIT04oWzIuNl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoQ0hFQ0ssIFtjaGVjayA+PSAwLjkuNF0sIFtIQVZFX0NIRUNLPXllc10sIFtIQVZFX0NIRUNLPW5vXSkKKytkbmwgUEtHX0NIRUNLX01PRFVMRVMoQ0hFQ0ssIFtjaGVjayA+PSAwLjkuNF0sIFtIQVZFX0NIRUNLPXllc10sIFtIQVZFX0NIRUNLPW5vXSkKKytIQVZFX0NIRUNLPW5vCisgQU1fQ09ORElUSU9OQUwoSEFWRV9DSEVDSywgdGVzdCB4JEhBVkVfQ0hFQ0sgPSB4eWVzKQorIAorIEFDX0NPTkZJR19IRUFERVJTKFtzcmMvY29uZmlnLmhdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi94Y2JpbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi94Y2JpbmNsdWRlZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Mjk3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL3hjYmluY2x1ZGVkaXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorQXMgcGtnLWNvbmZpZyAtLXZhcmlhYmxlIGRvZXNuJ3QgcmVzcGVjdCB0aGUgc3lzcm9vdCwgYWRkIHRoZSBwa2ctY29uZmlnIHN5c3Jvb3QKK3RvIHRoZSBiZWdpbm5pbmcgb2YgdmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgbGF0ZXIgb24gdGhlIGhvc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTRkYTRmNy4uZDI5Y2Q2YSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjQsNyArNjQsNyBAQCBBQ19TVUJTVChORUVERUQpCisgCisgIyBGaW5kIHRoZSB4Y2ItcHJvdG8gcHJvdG9jb2wgZGVzY3JpcHRpb25zCisgQUNfTVNHX0NIRUNLSU5HKFhDQlBST1RPX1hDQklOQ0xVREVESVIpCistWENCUFJPVE9fWENCSU5DTFVERURJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT14Y2JpbmNsdWRlZGlyIHhjYi1wcm90b2AKKytYQ0JQUk9UT19YQ0JJTkNMVURFRElSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSL2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXhjYmluY2x1ZGVkaXIgeGNiLXByb3RvYAorIEFDX01TR19SRVNVTFQoJFhDQlBST1RPX1hDQklOQ0xVREVESVIpCisgQUNfU1VCU1QoWENCUFJPVE9fWENCSU5DTFVERURJUikKKyAKK0BAIC03NCw3ICs3NCw3IEBAIEFDX1NVQlNUKFhDQlBST1RPX1ZFUlNJT04pCisgCisgIyBGaW5kIHRoZSB4Y2JnZW4gUHl0aG9uIHBhY2thZ2UKKyBBQ19NU0dfQ0hFQ0tJTkcoWENCUFJPVE9fWENCUFlUSE9ORElSKQorLVhDQlBST1RPX1hDQlBZVEhPTkRJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1weXRob25kaXIgeGNiLXByb3RvYAorK1hDQlBST1RPX1hDQlBZVEhPTkRJUj0kUEtHX0NPTkZJR19TWVNST09UX0RJUi9gJFBLR19DT05GSUcgLS12YXJpYWJsZT1weXRob25kaXIgeGNiLXByb3RvYAorIEFDX01TR19SRVNVTFQoJFhDQlBST1RPX1hDQlBZVEhPTkRJUikKKyBBQ19TVUJTVChYQ0JQUk9UT19YQ0JQWVRIT05ESVIpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2MjcwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMS5iYgpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlIGxpYnhjYi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzYzYjA4MWNiMTBjMjIzNDM1YjAxZTAwZGMwYWJhNyIKKworCitERVBFTkRTICs9ICJsaWJ4ZG1jcCIKKworU1JDX1VSSVttZDVzdW1dID0gIjVhODczZWJkMzgzZDFhNjA2MTJkZDZlYzZiNDJjNzgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAzNjM1ZDcwMDQ1YjllZGU5MDc3OGU2NzUxNjEzNTgyOGE1N2RlODdhYzUwOGY5ODcwMjRmNDNjMDM2MjBmZjciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiX2dpdC5iYgpAQCAtMCwwICsxLDEwIEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgbGlieGNiLmluYworCitTUkNSRVYgPSAiNjI1ZWQ1OTZjYWU2ZGQ4MTc1YWViNmNiNmYyNjc4NDkyODA0MmYyMiIKK1BWID0gIjEuMS45MC4xK2dpdHIke1NSQ1BWfSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94Y2IvbGlieGNiIgorUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzMzFmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworVGhpcyBwYXRjaCBtYWtlcyB0aGUgYnVpbGQgdXNlIGl0cyBvd24gWGNvbXBvc2l0ZS5oIG92ZXIgcmF0aGVyIHRoYW4gYW4KK29sZGVyIFhjb21wb3NpdGUuaCB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW5zdGFsbGVkIGluIHRoZSBzdGFnaW5nIGRpci4KKworSW5kZXg6IGxpYlhjb21wb3NpdGUtMC40LjMvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWGNvbXBvc2l0ZS0wLjQuMy5vcmlnL3NyYy9NYWtlZmlsZS5hbQkyMDEwLTA2LTMwIDIyOjQyOjUzLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYlhjb21wb3NpdGUtMC40LjMvc3JjL01ha2VmaWxlLmFtCTIwMTAtMTEtMjMgMjM6MDk6MzQuNTQ0MzIyOTMwIC0wODAwCitAQCAtMTksNyArMTksNyBAQAorICMgIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAjICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorIAorLUFNX0NGTEFHUyA9ICQoQ1dBUk5GTEFHUykgJChYQ09NUE9TSVRFX0NGTEFHUykgJChYRklYRVNfQ0ZMQUdTKQorK0FNX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlICQoQ1dBUk5GTEFHUykgJChYQ09NUE9TSVRFX0NGTEFHUykgJChYRklYRVNfQ0ZMQUdTKQorIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKKyAKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJYY29tcG9zaXRlLmxhCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZV8wLjQuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMjU3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZV8wLjQuNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlhjb21wb3NpdGU6IFggQ29tcG9zaXRlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgY29tcG9zaXRlIGV4dGVuc2lvbiBwcm92aWRlcyB0aHJlZSByZWxhdGVkIFwKK21lY2hhbmlzbXM6IHBlci1oaWVyYXJjaHkgc3RvcmFnZSwgYXV0b21hdGljIHNoYWRvdyB1cGRhdGUsIGFuZCBleHRlcm5hbCBcCitwYXJlbnQuICBJbiBwZXItaGllcmFyY2h5IHN0b3JhZ2UsIHRoZSByZW5kZXJpbmcgb2YgYW4gZW50aXJlIGhpZXJhcmNoeSBcCitvZiB3aW5kb3dzIGlzIHJlZGlyZWN0ZWQgdG8gb2ZmLXNjcmVlbiBzdG9yYWdlLiAgSW4gYXV0b21hdGljIHNoYWRvdyBcCit1cGRhdGUsIHdoZW4gYSBoaWVyYXJjaHkgaXMgcmVuZGVyZWQgb2ZmLXNjcmVlbiwgdGhlIFggc2VydmVyIHByb3ZpZGVzIFwKK2FuIGF1dG9tYXRpYyBtZWNoYW5pc20gZm9yIHByZXNlbnRpbmcgdGhvc2UgY29udGVudHMgd2l0aGluIHRoZSBwYXJlbnQgXAord2luZG93LiAgSW4gZXh0ZXJuYWwgcGFyZW50LCBhIG1lY2hhbmlzbSBmb3IgcHJvdmlkaW5nIHJlZGlyZWN0aW9uIG9mIFwKK2NvbXBvc2l0aW5nIHRyYW5zZm9ybWF0aW9ucyB0aHJvdWdoIGEgY2xpZW50LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2YyOTA3YWFkNTQxZjZmMjI2ZmJjNThjYzFiM2NkZjEiCisKK0RFUEVORFMgKz0gIiBjb21wb3NpdGVwcm90byB2aXJ0dWFsL2xpYngxMSBsaWJ4Zml4ZXMgbGlieGV4dCIKK1BST1ZJREVTID0gInhjb21wb3NpdGUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYY29tcG9zaXRlIgorCitTUkNfVVJJICs9ICIgZmlsZTovL2NoYW5nZS1pbmNsdWRlLW9yZGVyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjdhMjE4ZGNiZjZmMDg0ODU5OWM2YzM2ZmM2NWM1MWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRlMjUwY2QyMDdkOGJlZTRhMzM4MjY1YzMwMDdkN2E2OGQ1YWNhNzkxYjZhYzQxYWYxOGU5YTJhZWIzNDE3OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y3Vyc29yXzEuMS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGU0ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWGN1cnNvcjogWCBDdXJzb3IgbWFuYWdlbWVudCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYY3Vyc29yIGlzIGEgc2ltcGxlIGxpYnJhcnkgZGVzaWduZWQgdG8gaGVscCBsb2NhdGUgYW5kIFwKK2xvYWQgY3Vyc29ycy4gQ3Vyc29ycyBjYW4gYmUgbG9hZGVkIGZyb20gZmlsZXMgb3IgbWVtb3J5LiBBIGxpYnJhcnkgb2YgXAorY29tbW9uIGN1cnNvcnMgZXhpc3RzIHdoaWNoIG1hcCB0byB0aGUgc3RhbmRhcmQgWCBjdXJzb3IgbmFtZXMuIEN1cnNvcnMgXAorY2FuIGV4aXN0IGluIHNldmVyYWwgc2l6ZXMgYW5kIHRoZSBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgcGlja3MgdGhlIGJlc3QgXAorc2l6ZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg5MDJlNjY0M2Y3YmNkNzc5M2IyM2RjZDVkODAzMWE0IgorCitERVBFTkRTICs9ICJsaWJ4cmVuZGVyIGxpYnhmaXhlcyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhjdXJzb3IiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZTdjMTdhZmJiY2U4M2UyMjE1OTE3MDQ3YzU3ZDFiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YmM2YWNiMjFjYTE0ZGE1MWJkYTViYzkxMmM4OTU1YmM2ZTVlNDMzZjBhYjAwYzVlOGJlZjg0MjU5NmMzM2RmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkYW1hZ2VfMS4xLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q3MDA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkYW1hZ2VfMS4xLjQuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJYZGFtYWdlOiBYIERhbWFnZSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiJ0RhbWFnZScgaXMgYSB0ZXJtIHRoYXQgZGVzY3JpYmVzIGNoYW5nZXMgbWFrZSB0byBwaXhlbCBcCitjb250ZW50cyBvZiB3aW5kb3dzIGFuZCBwaXhtYXBzLiAgRGFtYWdlIGFjY3VtdWxhdGVzIGFzIGRyYXdpbmcgb2NjdXJzIFwKK2luIHRoZSBkcmF3YWJsZS4gIEVhY2ggZHJhd2luZyBvcGVyYXRpb24gJ2RhbWFnZXMnIG9uZSBvciBtb3JlIFwKK3JlY3Rhbmd1bGFyIGFyZWFzIHdpdGhpbiB0aGUgZHJhd2FibGUuICBUaGUgcmVjdGFuZ2xlcyBhcmUgZ3VhcmFudGVlZCB0byBcCitpbmNsdWRlIHRoZSBzZXQgb2YgcGl4ZWxzIG1vZGlmaWVkIGJ5IGVhY2ggb3BlcmF0aW9uLCBidXQgbWF5IGluY2x1ZGUgXAorc2lnbmlmaWNhbnRseSBtb3JlIHRoYW4ganVzdCB0aG9zZSBwaXhlbHMuICBUaGUgREFNQUdFIGV4dGVuc2lvbiBhbGxvd3MgXAorYXBwbGljYXRpb25zIHRvIGVpdGhlciByZWNlaXZlIHRoZSByYXcgcmVjdGFuZ2xlcyBhcyBhIHN0cmVhbSBvZiBldmVudHMsIFwKK29yIHRvIGhhdmUgdGhlbSBwYXJ0aWFsbHkgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgWCBzZXJ2ZXIgdG8gcmVkdWNlIHRoZSBcCithbW91bnQgb2YgZGF0YSB0cmFuc21pdHRlZCBhcyB3ZWxsIGFzIHJlZHVjZSB0aGUgcHJvY2Vzc2luZyBsYXRlbmN5IG9uY2UgXAordGhlIHJlcGFpbnQgb3BlcmF0aW9uIGhhcyBzdGFydGVkLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWZlMTAxZjMwZGQyNDEzNGNmNDMxNDY4NjMyNDE4NjgiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRhbWFnZXByb3RvIGxpYnhmaXhlcyIKK1BST1ZJREVTID0gInhkYW1hZ2UiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZGFtYWdlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGNmMjkyZGUyYTlmYTJlOWE5MzlhZWZkZTY4ZmQzNGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2MzZmU3YzY1N2U4MzU0N2Y0ODIyYmZkZTMwYTkwZDg0NTI0ZWZiNTYzNjU0NDg3Njg0MDliNzdmMDUzNTVhZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZG1jcF8xLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZG1jcF8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGUzMGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkbWNwXzEuMS4yLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiWERNQ1A6IFggRGlzcGxheSBNYW5hZ2VyIENvbnRyb2wgUHJvdG9jb2wgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIHB1cnBvc2Ugb2YgdGhlIFggRGlzcGxheSBNYW5hZ2VyIENvbnRyb2wgUHJvdG9jb2wgXAorKFhETUNQKSBpcyB0byBwcm92aWRlIGEgdW5pZm9ybSBtZWNoYW5pc20gZm9yIGFuIGF1dG9ub21vdXMgZGlzcGxheSB0byBcCityZXF1ZXN0IGxvZ2luIHNlcnZpY2UgZnJvbSBhIHJlbW90ZSBob3N0LiBBbiBYIHRlcm1pbmFsIChzY3JlZW4sIFwKK2tleWJvYXJkLCBtb3VzZSwgcHJvY2Vzc29yLCBuZXR3b3JrIGludGVyZmFjZSkgaXMgYSBwcmltZSBleGFtcGxlIG9mIGFuIFwKK2F1dG9ub21vdXMgZGlzcGxheS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitpbmhlcml0IGdldHRleHQKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNTU5ZmIyNmUxMjk2MjYwMjJlMDUyYTVlNmUwZTEyMyIKKworREVQRU5EUyArPSAieHByb3RvIgorUFJPVklERVMgPSAieGRtY3AiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGRtY3AiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjE4YWE1YzEyNzliMDFmOWQxOGUzMjk5OTY5NjY1YjJlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgxZmUwOTg2NzkxOGZmZjI1ODI5NmUxZTFlMTU5ZjBkYzYzOWNiMzBkMjAxYzUzNTE5ZjI1YWI3M2FmNGU0ZTIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FyYzRdID0gImFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9eWVzLGFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9bm8sbGliYnNkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE4YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfMS4zLjMuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJYRXh0OiBYIEV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYZXh0IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKK3NldmVyYWwgZXh0ZW5zaW9ucyB0byB0aGUgWCBwcm90b2NvbC4gIFRoZSBzdXBwb3J0ZWQgcHJvdG9jb2wgZXh0ZW5zaW9ucyBcCithcmUgRE9VQkxFLUJVRkZFUiwgRFBNUywgRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIFwKK01JVF9TVU5EUlktTk9OU1RBTkRBUkQsIE11bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBcCitYQy1BUFBHUk9VUCwgWEMtTUlTQywgWFRFU1QuICBsaWJYZXh0IGFsc28gcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2YgXAordXRpbGl0eSBmdW5jdGlvbnMgdG8gYWlkIGF1dGhvcnMgb2YgY2xpZW50IEFQSXMgZm9yIFggcHJvdG9jb2wgXAorZXh0ZW5zaW9ucy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3OWNlMjY2Nzg1NDE0YmQxY2JjM2JjMmY0ZDlkN2M4IgorCitERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIGxpYnhhdSBsaWJ4ZG1jcCIKK1BST1ZJREVTID0gInhleHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGV4dCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTJkZjdjNGMxZjBiYWRkOWY4MmFiMTI0ZmIzMmViOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjUxOGQ0ZDMzMjIzMWYzMTMzNzFmZGVmYWM1OWUzNzc2ZjRmMDgyM2JjYjIzY2Y3YzczMDViZmI1N2IxNmUzNSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzk5MTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhleHQgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gXAorc2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIHN1cHBvcnRlZCBwcm90b2NvbCBleHRlbnNpb25zIFwKK2FyZSBET1VCTEUtQlVGRkVSLCBEUE1TLCBFeHRlbmRlZC1WaXN1YWwtSW5mb3JtYXRpb24sIExCWCwgTUlUX1NITSwgXAorTUlUX1NVTkRSWS1OT05TVEFOREFSRCwgTXVsdGktQnVmZmVyaW5nLCBTRUNVUklUWSwgU0hBUEUsIFNZTkMsIFRPRy1DVVAsIFwKK1hDLUFQUEdST1VQLCBYQy1NSVNDLCBYVEVTVC4gIGxpYlhleHQgYWxzbyBwcm92aWRlcyBhIHNtYWxsIHNldCBvZiBcCit1dGlsaXR5IGZ1bmN0aW9ucyB0byBhaWQgYXV0aG9ycyBvZiBjbGllbnQgQVBJcyBmb3IgWCBwcm90b2NvbCBcCitleHRlbnNpb25zLiIKKworREVQRU5EUyArPSAieHByb3RvIHZpcnR1YWwvbGlieDExIHhleHRwcm90byBsaWJ4YXUgbGlieGRtY3AiCitQUk9WSURFUyA9ICJ4ZXh0IgorU1JDUkVWID0gImQxZjNiYzc3YTQ4YzhlNDI3NzE1NzllM2ZkZjMzNzBiMzVkMzIwOWQiCitQRSA9ICIxIgorUFYgPSAiMS4wLjk5LjErZ2l0ciR7U1JDUFZ9IgorCitYT1JHX1BOID0gImxpYlhleHQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvbGliLyR7WE9SR19QTn0iCitTID0gIiR7V09SS0RJUn0vZ2l0LyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI3NDBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmaXhlc181LjAuMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWCBhcHBsaWNhdGlvbnMgaGF2ZSBvZnRlbiBuZWVkZWQgdG8gd29yayBhcm91bmQgdmFyaW91cyBcCitzaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgc3lzdGVtLiAgVGhpcyBleHRlbnNpb24gaXMgZGVzaWduZWQgdG8gXAorcHJvdmlkZSB0aGUgbWluaW1hbCBzZXJ2ZXItc2lkZSBzdXBwb3J0IG5lY2Vzc2FyeSB0byBlbGltaW5hdGUgcHJvYmxlbXMgXAorY2F1c2VkIGJ5IHRoZXNlIHdvcmthcm91bmRzLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2MxY2U0MmMzMzRhNmY1Y2NjYjAyNzc1NTZhMDUzZTAiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhwcm90byBmaXhlc3Byb3RvIHhleHRwcm90byIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZml4ZXMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImI5ODViODVmOGI5Mzg2Yzg1ZGRjZmUxMDczOTA2YjRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzYmVjMDg1MDg0ZmEzY2FhZWU1MTgwNDkwZGQ4NzFmMWViMjAyMGJhOWU5YjM5YTMwZjkzNjkzZmZjMzQ3NjciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZvbnRfMS41LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2ZTMzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhGb250OiBYIEZvbnQgcmFzdGVyaXNhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYZm9udCBwcm92aWRlcyB2YXJpb3VzIHNlcnZpY2VzIGZvciBYIHNlcnZlcnMsIG1vc3QgXAorbm90YWJseSBmb250IHNlbGVjdGlvbiBhbmQgcmFzdGVyaXNhdGlvbiAodGhyb3VnaCBleHRlcm5hbCBsaWJyYXJpZXMgXAorc3VjaCBhcyBmcmVldHlwZSkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNDZjODA0MGYyZjczN2JjZDBjNDM1ZmViMmFiMWMyYyIKKworREVQRU5EUyArPSAiZnJlZXR5cGUgeHRyYW5zIGZvbnRzcHJvdG8gbGliZm9udGVuYyB6bGliIgorUFJPVklERVMgPSAieGZvbnQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGZvbnQiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTZmNzZiYTk0YjRjOTA5MjMwYmFjMWUyZGNkNTUxYzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjcwODk4NTI3YzczZjk3NThmNTUxYmJhYjYxMmFmNjExYjhhMDk2MjIwMjgyOTU2OGQ5NGYzZWRmNGQ4NjA5OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZnRfMi4zLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZ0XzIuMy4yLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiWEZ0OiBYIEZyZWVUeXBlIGxpYmFyeSIKKworREVTQ1JJUFRJT04gPSAiWGZ0IHdhcyBkZXNpZ25lZCB0byBwcm92aWRlIGdvb2Qgc3VwcG9ydCBmb3Igc2NhbGFibGUgXAorZm9udHMsIGFuZCB0byBkbyBzbyBlZmZpY2llbnRseS4gIFVubGlrZSB0aGUgY29yZSBmb250cyBzeXN0ZW0sIGl0IFwKK3N1cHBvcnRzIGZlYXR1cmVzIHN1Y2ggYXMgYW50aS1hbGlhc2luZyBhbmQgc3ViLXBpeGVsIHJhc3RlcmlzYXRpb24uIFwKK1BlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgaXQgZ2l2ZXMgYXBwbGljYXRpb25zIGZ1bGwgY29udHJvbCBvdmVyIHRoZSBcCit3YXkgZ2x5cGhzIGFyZSByZW5kZXJlZCwgbWFraW5nIGZpbmUgdHlwZXNldHRpbmcgYW5kIFdZU0lXSUcgZGlzcGxheSBcCitwb3NzaWJsZS4gRmluYWxseSwgaXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byB1c2UgZm9udHMgdGhhdCBhcmUgbm90IFwKK2luc3RhbGxlZCBzeXN0ZW0td2lkZSBmb3IgZGlzcGxheWluZyBkb2N1bWVudHMgd2l0aCBlbWJlZGRlZCBmb250cy4gIFhmdCBcCitpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjb3JlIGZvbnRzIHN5c3RlbTogdXNhZ2Ugb2YgWGZ0IHJlcXVpcmVzIFwKK2ZhaXJseSBleHRlbnNpdmUgY2hhbmdlcyB0byB0b29sa2l0cyAodXNlci1pbnRlcmZhY2UgbGlicmFyaWVzKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTkwYjkwYjYwZWIzMGY2NWZjOWMyNjczZDdjZjU5ZTI0IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4cmVuZGVyIGZyZWV0eXBlIGZvbnRjb25maWciCitQUk9WSURFUyA9ICJ4ZnQiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMzFiM2EyYTNhMWE3OGI1YjQ0Y2ZiZDQzZjg2ZmNmZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNWEzYzgyNDc2MWRmMzUxY2E5MTgyN2FjMjIxMDkwOTQzZWYyOGIyNDg1NzM0ODYwNTBkZTg5ZjRiZmNkYzRjIgorCitYT1JHX1BOID0gImxpYlhmdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK3B5dGhvbiAoKSB7CisgICAgICAgIGlmIGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJ4ZnQyJykKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aV8xLjcuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aV8xLjcuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzAzM2EzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpXzEuNy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJ4aSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFgxMSBwcm90b2NvbCB0byBzdXBwb3J0IFwKK2lucHV0IGRldmljZXMgb3RoZXIgdGhhbiB0aGUgY29yZSBYIGtleWJvYXJkIGFuZCBwb2ludGVyLiAgSXQgYWxsb3dzIFwKK2NsaWVudCBwcm9ncmFtcyB0byBzZWxlY3QgaW5wdXQgZnJvbSB0aGVzZSBkZXZpY2VzIGluZGVwZW5kZW50bHkgZnJvbSBcCitlYWNoIG90aGVyIGFuZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIGNvcmUgZGV2aWNlcy4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTdiMDY0Nzg5ZmFiOTM2YTFjNThjNGUxM2Q5NjViMGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL1hJR2V0RGV2Rm9jdXMuYztlbmRsaW5lPTIzO21kNT1jZGZiMGQ0MzVhMzNlYzU3ZWEwZDFlOGUzOTViNzI5ZiIKKworREVQRU5EUyArPSAibGlieGV4dCBpbnB1dHByb3RvIGxpYnhmaXhlcyIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYaSIKKworU1JDX1VSSVttZDVzdW1dID0gIjljNGE2OWMzNGIxOWVjMWU0MjEyZTg0OTU0OTU0NGNiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJjZmZjMjY4NjYxOGRjMTgwMzcyNTYzNmNkOTJiMzYzNDJjNTEyZGM2MGE3YTM1Y2JhMzRiZjcxOTJhNDIyNDQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGluZXJhbWFfMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YzgwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYaW5lcmFtYTogWGluZXJhbWEgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlhpbmVyYW1hIGlzIGEgc2ltcGxlIGxpYnJhcnkgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHRoZSBcCitYaW5lcmFtYSBFeHRlbnNpb24gZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgb3V0cHV0IFwKK2RldmljZXMgd2hpY2ggbWF5IGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbG9naWNhbCBYIHNjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmY0ZjYzNGQxNjQzYTJlNjM4YmJhM2ZjZDE5YzI1MzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL1hpbmVyYW1hLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0yNTttZDU9ZmNlZjI3M2JmYjY2MzM5MjU2NDExZGQwNmVhNzljMDIiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGluZXJhbWFwcm90byIKK1BST1ZJREVTID0gInhpbmVyYW1hIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYaW5lcmFtYSIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzMzZkYzQ2YWUzYmY1ZjgxYzI0N2Y3MTMxNDYxZWZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdhNDU2OTlmMTc3MzA5NWEzZjgyMWU0OTFjYmQ1ZTEwYzg4N2M1YTVmY2U1ZDhkM2ZjZWQxNWMyZmY3Njk4ZTIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTY2YjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmNvbW1vbl8wLjUuMC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkdlbmVyaWMgWEtCIGtleW1hcCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAibGlieGtiY29tbW9uIGlzIGEga2V5bWFwIGNvbXBpbGVyIGFuZCBzdXBwb3J0IGxpYnJhcnkgd2hpY2ggXAorcHJvY2Vzc2VzIGEgcmVkdWNlZCBzdWJzZXQgb2Yga2V5bWFwcyBhcyBkZWZpbmVkIGJ5IHRoZSBYS0Igc3BlY2lmaWNhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnhrYmNvbW1vbi5vcmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wOTQ1N2IxNTZlMzE1NTk3MmFiZWJjYWFhYTBjYjQzNCIKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zIGZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8veGtiY29tbW9uLm9yZy9kb3dubG9hZC8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUxZmFlYWZjYzYwOWMzMGFmM2E1NjFhOTFlODQxNTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTBiZDc4MjQ3NDJiOWE2ZjUyYTZjZjgwZTJjYWRkNmY1MzQ5Y2Y2MDBhMzU4ZDA4MjYwNzcyNjE1Yjg5ZDE5YyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZG9jcyIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSxsaWJ4Y2IgeGtleWJvYXJkLWNvbmZpZywiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiZmlsZV8xLjAuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTM0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiZmlsZV8xLjAuOS5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlhLQjogWCBLZXlib2FyZCBGaWxlIG1hbmlwdWxhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJ4a2JmaWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byByZWFkIGFuZCBtYW5pcHVsYXRlIFwKK2Rlc2NyaXB0aW9uIGZpbGVzIGZvciBYS0IsIHRoZSBYMTEga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBleHRlbnNpb24uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04YmU3MzY3ZjdlNWQ2MDVhNDI2Zjc2YmIzN2Q0ZDYxZiIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEga2Jwcm90byIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YTRjZmVhZjI0ZGFiMWI5OTE5MDM0NTVkNmQ3ZDQwNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTgxN2UwNTMwOTYxOTc1ZDk1MTNiNzczOTYwYjRlZGQyNzVmN2Q1YzcyMjkzZDVhMTUxZWQ0ZjQyYWViMTZhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzYmFlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4bXVfMS4xLjIuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJYbXUgYW5kIFhtdXU6IFggTWlzY2VsbGFuZW91cyBVdGlsaXR5IGxpYnJhcmllcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIFhtdSBMaWJyYXJ5IGlzIGEgY29sbGVjdGlvbiBvZiBtaXNjZWxsYW5lb3VzIChzb21lIFwKK21pZ2h0IHNheSByYW5kb20pIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHVzZWZ1bCBpbiBidWlsZGluZyBcCit2YXJpb3VzIGFwcGxpY2F0aW9ucyBhbmQgd2lkZ2V0cy4gVGhpcyBsaWJyYXJ5IGlzIHJlcXVpcmVkIGJ5IHRoZSBBdGhlbmEgXAorV2lkZ2V0cy4gQSBzdWJzZXQgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCByZWx5IG9uIHRoZSBBdGhlbmEgXAorV2lkZ2V0cyAobGliWGF3KSBvciBYIFRvb2xraXQgSW5zdHJpbnNpY3MgKGxpYlh0KSBhcmUgcHJvdmlkZWQgaW4gYSBcCitzZWNvbmQgbGlicmFyeSwgbGliWG11dS4iCisKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGVmM2Q4ZTRlOWM0MjAwNGYxOTQxZmEyMmYwMWRjMTgiCisKK0RFUEVORFMgKz0gImxpYnh0IGxpYnhleHQiCitQUk9WSURFUyA9ICJ4bXUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWG11IgorCitMRUFEX1NPTkFNRSA9ICJsaWJYbXUiCisKK1BBQ0tBR0VTID0rICJsaWJ4bXV1IgorCitGSUxFU19saWJ4bXV1ID0gIiR7bGliZGlyfS9saWJYbXV1LnNvLioiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDFkOTJhYjYyN2RmYTA2NTY4MDc2MDQzZjNlMDg5ZTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzU2ZWRjN2MzODMyNTRlZWY4YjRlMWI3MzNjM2JmMWRjMDYxYjUyM2M5Zjk4MzNhYzcwNTgzNzhiODM0OWQwYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cG1fMy41LjExLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1ODc0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cG1fMy41LjExLmJiCkBAIC0wLDAgKzEsMjcgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCisjIGxpYnhwbSByZXF1aXJlcyB4Z2V0dGV4dCB0byBidWlsZAoraW5oZXJpdCBnZXR0ZXh0CisKK1NVTU1BUlkgPSAiWHBtOiBYIFBpeG1hcCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWHBtIHByb3ZpZGVzIHN1cHBvcnQgYW5kIGNvbW1vbiBvcGVyYXRpb24gZm9yIHRoZSBYUE0gXAorcGl4bWFwIGZvcm1hdCwgd2hpY2ggaXMgY29tbW9ubHkgdXNlZCBpbiBsZWdhY3kgWCBhcHBsaWNhdGlvbnMuICBYUE0gaXMgXAorYW4gZXh0ZW5zaW9uIG9mIHRoZSBtb25vY2hyb21lIFhCTSBiaXRtYXAgc3BlY2lmaWNpZWQgaW4gdGhlIFggXAorcHJvdG9jb2wuIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTUxZjQyNzBiMDEyZWNkNGFiMWExNjRmNWY0ZWQ2Y2Y3IgorREVQRU5EUyArPSAibGlieGV4dCBsaWJzbSBsaWJ4dCIKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHBtIgorCitQQUNLQUdFUyA9KyAic3hwbSBjeHBtIgorRklMRVNfY3hwbSA9ICIke2JpbmRpcn0vY3hwbSIKK0ZJTEVTX3N4cG0gPSAiJHtiaW5kaXJ9L3N4cG0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NjllZTEyYTQzNjExY2RlYmQzODA5NGVhZjgzZjNmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNWJkYWZhNTFkMWFlMzAwODZmYWMwMWFiODNiZThkNDdmZTExN2IyMzhkMzQzN2Y4ZTk2NTQzNDA5MGUwNDFjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmFuZHJfMS41LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmJhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJhbmRyXzEuNS4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiWFJhbmRSOiBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBFeHRlbnNpb24sIGNhbGxlZCBSYW5kUiBcCitmb3Igc2hvcnQsIGJyaW5ncyB0aGUgYWJpbGl0eSB0byByZXNpemUsIHJvdGF0ZSBhbmQgcmVmbGVjdCB0aGUgcm9vdCBcCit3aW5kb3cgb2YgYSBzY3JlZW4uIEl0IGlzIGJhc2VkIG9uIHRoZSBYIFJlc2l6ZSBhbmQgUm90YXRlIEV4dGVuc2lvbiBhcyBcCitzcGVjaWZpZWQgaW4gdGhlIFByb2NlZWRpbmdzIG9mIHRoZSAyMDAxIFVzZW5peCBUZWNobmljYWwgQ29uZmVyZW5jZSBcCitbUkFORFJdLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzlkMWEyMTE4YTZjZDU3Mjc1MjFkYjhlN2EyZmVlNjkiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJhbmRycHJvdG8gbGlieHJlbmRlciBsaWJ4ZXh0IgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhyYW5kciIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzA5NzYyODY3ZTQxYzZmZDgxM2RhODgwZDhhMWJjOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmY4NjQ5NTliN2ZjMzVkYjExNzU0YjI3MGQ3MTEwNmVmNWI1Y2YzNjM0MjZhYTU4NTg5Y2I4YWM4MjY2ZGU1OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkZTA0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVuZGVyXzAuOS45LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiWFJlbmRlcjogWCBSZW5kZXJpbmcgRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFJlbmRlcmluZyBFeHRlbnNpb24gKFJlbmRlcikgaW50cm9kdWNlcyBkaWdpdGFsIFwKK2ltYWdlIGNvbXBvc2l0aW9uIGFzIHRoZSBmb3VuZGF0aW9uIG9mIGEgbmV3IHJlbmRlcmluZyBtb2RlbCB3aXRoaW4gdGhlIFwKK1ggV2luZG93IFN5c3RlbS4gUmVuZGVyaW5nIGdlb21ldHJpYyBmaWd1cmVzIGlzIGFjY29tcGxpc2hlZCBieSBcCitjbGllbnQtc2lkZSB0ZXNzZWxsYXRpb24gaW50byBlaXRoZXIgdHJpYW5nbGVzIG9yIHRyYXBlem9pZHMuICBUZXh0IGlzIFwKK2RyYXduIGJ5IGxvYWRpbmcgZ2x5cGhzIGludG8gdGhlIHNlcnZlciBhbmQgcmVuZGVyaW5nIHNldHMgb2YgdGhlbS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4YmM3MTk4NmQzYjliMzYzOWY2ZGZkNmZhYzhmMTk2IgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByZW5kZXJwcm90byB4cHJvdG8geGRtY3AiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJlbmRlciIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWRiOTI5NjJiMTI0Y2EzYTgxNDdkYWFlNGFkYmQ2MjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmMyZmU1Nzk4MGExNDA5MjQyNmRmZmNkMWYyZDlkZTA5ODdiOWQ0MGFkZWE2NjNiZDcwZDYzNDJjMGU5YmUxYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVzXzEuMC43LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNGM0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmVzXzEuMC43LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWFJlczogWCBSZXNvdXJjZSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWFJlcyBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCit0aGUgUmVzb3VyY2UgZXh0ZW5zaW9uIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIFJlc291cmNlIGV4dGVuc2lvbiBhbGxvd3MgXAorZm9yIFggY2xpZW50cyB0byBzZWUgYW5kIG1vbml0b3IgdGhlIFggcmVzb3VyY2UgdXNhZ2Ugb2YgdmFyaW91cyBjbGllbnRzIFwKKyhwaXhtYXBzLCBldCBhbCkuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Yzg5NDQxYThkZjI2MWJkYzU2NTg3NDY1ZTEzYzdmYSIKKworREVQRU5EUyArPSAibGlieGV4dCByZXNvdXJjZXByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhyZXMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NWVmMjkyMDZhNmI1ODI1NGM4MWJlYTI4ZWM2Yzk1ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNjg5OTA1NGFhODdmODFiMTdiZWNjNjhlODY0NWIyNDBmMTQwNDY0Y2Y5MGM0MjYxNmViYjI2M2VjNWZhMGU1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzY3Juc2F2ZXJfMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRlNWRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzY3Juc2F2ZXJfMS4yLjIuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHNjcm5zYXZlcjogWCBTY3JlZW4gU2F2ZXIgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFdpbmRvdyBTeXN0ZW0gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY2hhbmdpbmcgdGhlIFwKK2ltYWdlIG9uIGEgZGlzcGxheSBzY3JlZW4gYWZ0ZXIgYSB1c2VyLXNldHRhYmxlIHBlcmlvZCBvZiBpbmFjdGl2aXR5IHRvIFwKK2F2b2lkIGJ1cm5pbmcgdGhlIGNhdGhvZGUgcmF5IHR1YmUgcGhvc3Bob3JzLiBIb3dldmVyLCBubyBpbnRlcmZhY2VzIGFyZSBcCitwcm92aWRlZCBmb3IgdGhlIHVzZXIgdG8gY29udHJvbCB0aGUgaW1hZ2UgdGhhdCBpcyBkcmF3bi4gVGhpcyBleHRlbnNpb24gXAorYWxsb3dzIGFuIGV4dGVybmFsIFwic2NyZWVuIHNhdmVyXCIgY2xpZW50IHRvIGRldGVjdCB3aGVuIHRoZSBhbHRlcm5hdGUgXAoraW1hZ2UgaXMgdG8gYmUgZGlzcGxheWVkIGFuZCB0byBwcm92aWRlIHRoZSBncmFwaGljcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjFmZDE1NGVlNzU3ODEzNjMyYWRhODcxYTM0MTEzZmIiCisKK0RFUEVORFMgKz0gImxpYnhleHQgc2NybnNhdmVycHJvdG8iCitQUk9WSURFUyA9ICJsaWJ4c3MiCitSUkVQTEFDRVNfJHtQTn0gPSAibGlieHNzIgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYU2NyblNhdmVyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2E3NzNiMTYxNjVlMzllOTM4NjUwYmNjOTAyN2MxZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGZmMWVmYTczNDFjN2YzNGJjZjliMTdjODk2NDhkNjMyNWRkYWFlMjJlMzkwNGUwOTE3OTRlMGI0NDI2Y2UxZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2htZmVuY2VfMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzNGIxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2htZmVuY2VfMS4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiU2hhcmVkIG1lbW9yeSAnU3luY0ZlbmNlJyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIgorCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgb2ZmZXJzIGEgQ1BVLWJhc2VkIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgY29tcGF0aWJsZSBcCit3aXRoIHRoZSBYIFN5bmNGZW5jZSBvYmplY3RzIHRoYXQgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyBcCit1c2luZyBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ3ZTUwOGNhMjgwZmRlOTc5MDZlYWNiNzc4OTJjM2FjIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjY2NjJlNzY4OTkxMTJjMGY5OWUyMmYyZmM3NzVhN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDIxYjJkMWZkNzhjMWVmYmUxZjJjMTZkYWUxY2IyM2Y4ZmQyMzFkY2Y4OTE0NjViOGRlYmU2MzZhOTA1NGIwYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dC9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTZjNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIHdpdGggeDMyIHRvb2xjaGFpbi4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKKworCistLS0gbGliWHQtMS4xLjEvaW5jbHVkZS9YMTEvWHRvcy5oLngzMgkyMDExLTAyLTA4IDA3OjU2OjQwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYlh0LTEuMS4xL2luY2x1ZGUvWDExL1h0b3MuaAkyMDExLTExLTMwIDE3OjE5OjI3LjQ3MzM0OTc3MCAtMDgwMAorQEAgLTYyLDcgKzYyLDcgQEAgU09GVFdBUkUuCisgICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKyAgICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKyAgICAgKGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19MUDY0X18pKSB8fCBcCistICAgIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKGFtZDY0KSB8fCBcCisrICAgICgoZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpKSAmJiBkZWZpbmVkKF9fTFA2NF9fKSkgfHwgXAorICAgICBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICAgKGRlZmluZWQoc2dpKSAmJiAoX01JUFNfU1pMT05HID09IDY0KSkKKyAjZGVmaW5lIExPTkc2NApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0XzEuMS41LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0XzEuMS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWQwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRfMS4xLjUuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJYdDogWCBUb29sa2l0IEludHJpbnNpY3MgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIEludHJpbnNpY3MgYXJlIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSB0YWlsb3JlZCB0byB0aGUgXAorc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdXNlciBpbnRlcmZhY2UgY29uc3RydWN0aW9uIHdpdGhpbiBhIG5ldHdvcmsgXAord2luZG93IHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBYIFdpbmRvdyBTeXN0ZW0uIFRoZSBJbnRyaW5zaWNzIGFuZCBhIFwKK3dpZGdldCBzZXQgbWFrZSB1cCBhbiBYIFRvb2xraXQuIFRoZSBJbnRyaW5zaWNzIHByb3ZpZGUgdGhlIGJhc2UgXAorbWVjaGFuaXNtIG5lY2Vzc2FyeSB0byBidWlsZCBhIHdpZGUgdmFyaWV0eSBvZiBpbnRlcm9wZXJhdGluZyB3aWRnZXQgXAorc2V0cyBhbmQgYXBwbGljYXRpb24gZW52aXJvbm1lbnRzLiBUaGUgSW50cmluc2ljcyBhcmUgYSBsYXllciBvbiB0b3Agb2YgXAorWGxpYiwgdGhlIEMgTGlicmFyeSBYIEludGVyZmFjZS4gVGhleSBleHRlbmQgdGhlIGZ1bmRhbWVudGFsIFwKK2Fic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUgWCBXaW5kb3cgU3lzdGVtIHdoaWxlIHN0aWxsIHJlbWFpbmluZyBcCitpbmRlcGVuZGVudCBvZiBhbnkgcGFydGljdWxhciB1c2VyIGludGVyZmFjZSBwb2xpY3kgb3Igc3R5bGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NTY1YjFlMDA5NGVhMWNhYWUwOTcxY2M0MDM1ZjM0MyIKKworCitERVBFTkRTICs9ICJ1dGlsLWxpbnV4IGxpYnhjYiBsaWJzbSB2aXJ0dWFsL2xpYngxMSBrYnByb3RvIGxpYnhkbWNwIgorUFJPVklERVMgPSAieHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHQiCisKK1NSQ19VUkkgKz0gICJmaWxlOi8vbGlieHRfZml4X2Zvcl94MzIucGF0Y2giCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS14a2IiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZjViNTU3NmZiYWJiYTI5YTA1ZjNjYTIyMjZmNzRkMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NmVlYjZiZTc4MDIxMWZkZDk4YzUxMDkyODY2MThmNjcwNzcxMjIzNWZkZDE5ZGY0Y2UxZTY5NTRmMzQ5ZjFhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0c3RfMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjBiY2YzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0c3RfMS4yLjIuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFRlc3Q6IFggVGVzdCBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBleHRlbnNpb24gaXMgYSBtaW5pbWFsIHNldCBvZiBjbGllbnQgYW5kIHNlcnZlciBcCitleHRlbnNpb25zIHJlcXVpcmVkIHRvIGNvbXBsZXRlbHkgdGVzdCB0aGUgWDExIHNlcnZlciB3aXRoIG5vIHVzZXIgXAoraW50ZXJ2ZW50aW9uLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iYjRmODk5NzJjMzg2OWY2MTdmNjFjMWE3OWFkMTk1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWFRlc3QuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTMyO21kNT1iMWM4YzlkZmY4NDJiNGQ1Yjg5Y2E1ZmEzMmM0MGU5OSIKKworREVQRU5EUyArPSAibGlieGV4dCByZWNvcmRwcm90byBpbnB1dHByb3RvIGxpYnhpIgorUFJPVklERVMgPSAieHRzdCIKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHRzdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI1YzZiMzY2YWMzZGM3YTEyYzVkNzk4MTZjZTk2YTU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmMGE3ZmZkNTc3ZTVmMWEyNWIxNjYzYjM3NTY3OTUyOTY2M2ExODgwMTUxYmVhYTczZTkxODZjODMwOWY2ZDkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZfMS4wLjEwLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDJiOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2XzEuMC4xMC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlh2OiBYIFZpZGVvIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYdiBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byB0aGUgXAorWCBWaWRlbyBleHRlbnNpb24gdG8gdGhlIFggcHJvdG9jb2wuIFRoZSBYIFZpZGVvIGV4dGVuc2lvbiBhbGxvd3MgZm9yIFwKK2FjY2VsZXJhdGVkIGRyYXdpbmcgb2YgdmlkZW9zLiAgSGFyZHdhcmUgYWRhcHRvcnMgYXJlIGV4cG9zZWQgdG8gXAorY2xpZW50cywgd2hpY2ggbWF5IGRyYXcgaW4gYSBudW1iZXIgb2YgY29sb3Vyc3BhY2VzLCBpbmNsdWRpbmcgWVVWLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODI3ZGE5YWZhYjFmNzI3ZjJhNjY1NzQ2MjllMGYzOWMiCisKK0RFUEVORFMgKz0gImxpYnhleHQgdmlkZW9wcm90byIKKworWE9SR19QTiA9ICJsaWJYdiIKKworU1JDX1VSSVttZDVzdW1dID0gImUwYWY0OWQ3ZDc1OGI5OTBlNmZlZjYyOTcyMmQ0YWNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU1ZmU5MmY4Njg2Y2U4NjEyZTJjMWJmYWY1OGMwNTc3MTU1MzQ0MTlkYTcwMGJkYThkNTE3YjFkOTc5MTQ1MjUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZtY18xLjAuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTg0OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZtY18xLjAuOS5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlh2TUM6IFggVmlkZW8gTW90aW9uIENvbXBlbnNhdGlvbiBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWHZNQyBleHRlbmRzIHRoZSBYIFZpZGVvIGV4dGVuc2lvbiAoWHYpIGFuZCBlbmFibGVzIFwKK2hhcmR3YXJlIHJlbmRlcmVkIG1vdGlvbiBjb21wZW5zYXRpb24gc3VwcG9ydC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBhMjA3ZjA4ZDQ5NjE0ODljNTUwNDZjOWE1ZTUwMGRhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dyYXBwZXIvWHZNQ1dyYXBwZXIuYztlbmRsaW5lPTI2O21kNT01MTUxZGFhODE3MmEzZjFiYjBjYjBlMGZmMTU3ZDlkZSIKKworREVQRU5EUyArPSAibGlieGV4dCBsaWJ4diB2aWRlb3Byb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh2TUMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYmE2YjczOGVkNWZkY2Q4ZjQyMDNkN2M4YTQ3MGM3OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzAzZDdkZmY2ZmZjMTg0ZjE3MzVjYTVkNGViOWRiYjQwMmI1MjJlMDhlMDA4ZjJmOTZhZWUxNmM0MGE1NzU2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2ZGdhXzEuMS40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2ZGdhXzEuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWEzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZkZ2FfMS4xLjQuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1ER0E6IFhGcmVlODYgRGlyZWN0IEdyYXBoaWNzIEFjY2VzcyBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWHhmODZkZ2EgcHJvdmlkZXMgdGhlIFhGcmVlODYtREdBIGV4dGVuc2lvbiwgd2hpY2ggXAorYWxsb3dzIGRpcmVjdCBncmFwaGljcyBhY2Nlc3MgdG8gYSBmcmFtZWJ1ZmZlci1saWtlIHJlZ2lvbiwgYW5kIGFsc28gXAorYWxsb3dzIHJlbGF0aXZlIG1vdXNlIHJlcG9ydGluZywgZXQgYWwuICBJdCBpcyBtYWlubHkgdXNlZCBieSBnYW1lcyBhbmQgXAorZW11bGF0b3JzIGZvciBnYW1lcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFiYjk5YWMxMjVmODRmNDI0YTQyNzgxNTM5ODhlMzJmIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZkZ2Fwcm90byIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImQ3ZGQ5YjlkZjMzNmI3ZGQ0MDI4YjZiNTY1NDJmZjJjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlZWNkNGI2YzFkZjlhMzcwNGMwNDczM2MyZjRmYTkzZWY0NjliNTUwMjhhZjU1MTBiMjU4MThlMjQ1NmM3N2UiCisKK1hPUkdfUE4gPSAibGliWHhmODZkZ2EiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZtaXNjXzEuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZmMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2bWlzY18xLjAuMy5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlhGcmVlODYtTWlzYzogWEZyZWU4NiBtaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWEZyZWU4Ni1NaXNjIGV4dGVuc2lvbiwgcHJvdmlkZXMgYSBtZWFucyB0byBhY2Nlc3MgXAoraW5wdXQgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgc3BlY2lmaWMgdG8gdGhlIFhGcmVlODYvWG9yZyBERFguIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yN2M5MWVjYzQzNWJkM2QyYmZhZDg2ODkxNGM5NGI0NSIKKworREVQRU5EUyArPSAibGlieGV4dCB4Zjg2bWlzY3Byb3RvIgorUFJPVklERVMgPSAieHhmODZtaXNjIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh4Zjg2bWlzYyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiYzBiZjc4OTA5ZmQ3MTAyMWM0NjZjNzkzZDQzODVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU2M2Y0MjAwODYyZWZkMzMzNGMzM2E2NjllMGEwYWFlNWJhYjMxZjM5OThkYjc1Yjg3YTk5YTY5N2NjMjZiNWIiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NnZtXzEuMS40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmODdkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NnZtXzEuMS40LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWEZyZWU4Ni1WTTogWEZyZWU4NiB2aWRlbyBtb2RlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYeGY4NnZtIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgXAorWEZyZWU4Ni1WaWRNb2RlRXh0ZW5zaW9uIGV4dGVuc2lvbiwgd2hpY2ggYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gXAorZ2V0IGFuZCBzZXQgdmlkZW8gbW9kZSB0aW1pbmdzIGluIGV4dGVuc2l2ZSBkZXRhaWwuICBJdCBpcyB1c2VkIGJ5IHRoZSBcCit4dmlkdHVuZSBwcm9ncmFtIGluIHBhcnRpY3VsYXIuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mYTBiOWM0NjJkOGYyZjEzZWJhMjY0OTJkNDJlYTYzZCIKKworREVQRU5EUyArPSAibGlieGV4dCB4Zjg2dmlkbW9kZXByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlh4Zjg2dm0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOThiOGZmZjgyZGYxNzMwNGRmZGI1ZmU0MDY2ZmUzYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZmVlMjdmOTNjNWYzMWMwYWQ1ODI4NTJjMGZiMzZkNTBlNGRlN2NkNTg1ZmNmNjU1ZTI3OGE2MzNkODVjZDU3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY5ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2gKQEAgLTAsMCArMSwxNDQgQEAKK0Zyb20gYTBmNTNlMWRiYjM4NTFiYjBmMGVmY2ZkYmQ1NjViMDVlNGJlOWNhYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjMgQXVnIDIwMTIgMTg6MTA6NTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEFSTTogcWVtdSByZWxhdGVkIHdvcmthcm91bmRzIGluIGNwdSBmZWF0dXJlcyBkZXRlY3Rpb24KKyBjb2RlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoaXMgd2FzIHBvcnRlZCBmcm9tIG1ldGEtb2UncyBwYXRjaCBbMV0uIFRoZSBvcmlnaW5hbCBwaXhtYW4gcGF0Y2ggaXMgZm91bmQKK2F0IFsyXS4KKworWzFdIGh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvbWV0YS1vcGVuZW1iZWRkZWQvdHJlZS9tZXRhLW9lL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLTAuMjYuMi8wMDAxLUFSTS1xZW11LXJlbGF0ZWQtd29ya2Fyb3VuZHMtaW4tY3B1LWZlYXR1cmVzLWRldGVjdGkucGF0Y2gKK1syXSBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL3BpeG1hbi8yMDExLUphbnVhcnkvMDAwOTA2Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0gcWVtdSBmaXgKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgcGl4bWFuL3BpeG1hbi1hcm0uYyB8ICAgODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcGl4bWFuL3BpeG1hbi1hcm0uYyBiL3BpeG1hbi9waXhtYW4tYXJtLmMKK2luZGV4IDIzMzc0ZTQuLmQ5OGJkYTYgMTAwNjQ0CistLS0gYS9waXhtYW4vcGl4bWFuLWFybS5jCisrKysgYi9waXhtYW4vcGl4bWFuLWFybS5jCitAQCAtMTI5LDE2ICsxMjksMzUgQEAgZGV0ZWN0X2NwdV9mZWF0dXJlcyAodm9pZCkKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisrI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxlbGYuaD4KKyAKKysvKgorKyAqIFRoZSB3aG9sZSBDUFUgY2FwYWJpbGl0aWVzIGRldGVjdGlvbiBpcyBhIGJpdCB1Z2x5OiB3aGVuIHJ1bm5pbmcgaW4KKysgKiB1c2Vyc3BhY2UgcWVtdSwgd2Ugc2VlIC9wcm9jL3NlbGYvYXV4diBmcm9tIHRoZSBob3N0IHN5c3RlbS4gVG8gbWFrZQorKyAqIGV2ZXJ5dGhpbmcgZXZlbiB3b3JzZSwgdGhlIHNpemUgb2YgZWFjaCB2YWx1ZSBpcyA2NC1iaXQgd2hlbiBydW5uaW5nCisrICogb24gYSA2NC1iaXQgaG9zdCBzeXN0ZW0uIFNvIHRoZSBkYXRhIGlzIHRvdGFsbHkgYm9ndXMgYmVjYXVzZSB3ZSBleHBlY3QKKysgKiAzMi1iaXQgdmFsdWVzLiBBcyBBVF9QTEFURk9STSB2YWx1ZSBpcyB1c2VkIGFzIGEgcG9pbnRlciwgaXQgbWF5IGNhdXNlCisrICogc2VnZmF1bHQgKG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiB4ODYtNjQgaG9zdCkuIFNvIGluIG9yZGVyIHRvIGJlCisrICogb24gYSBzYWZlIHNpZGUsIHdlIHJlcXVpcmUgdGhhdCBBVF9QTEFURk9STSB2YWx1ZSBpcyBmb3VuZCBvbmx5IG9uY2UsCisrICogYW5kIGl0IGhhcyBub24temVybyB2YWx1ZSAodGhpcyBpcyBzdGlsbCBub3QgdG90YWxseSByZWxpYWJsZSBmb3IgYSBiaWcKKysgKiBlbmRpYW4gNjQtYml0IGhvc3Qgc3lzdGVtIHJ1bm5pbmcgcWVtdSBhbmQgbWF5IHRoZW9yZXRpY2FsbHkgZmFpbCkuCisrICovCisrI2RlZmluZSBBUk1fSFdDQVBfVkZQIDY0CisrI2RlZmluZSBBUk1fSFdDQVBfSVdNTVhUIDUxMgorKyNkZWZpbmUgQVJNX0hXQ0FQX05FT04gNDA5NgorKworIHN0YXRpYyBhcm1fY3B1X2ZlYXR1cmVzX3QKKyBkZXRlY3RfY3B1X2ZlYXR1cmVzICh2b2lkKQorIHsKKyAgICAgYXJtX2NwdV9mZWF0dXJlc190IGZlYXR1cmVzID0gMDsKKyAgICAgRWxmMzJfYXV4dl90IGF1eDsKKyAgICAgaW50IGZkOworKyAgICB1aW50MzJfdCBod2NhcCA9IDA7CisrICAgIGNvbnN0IGNoYXIgKnBsYXQgPSBOVUxMOworKyAgICBpbnQgcGxhdF9jbnQgPSAwOworIAorICAgICBmZCA9IG9wZW4gKCIvcHJvYy9zZWxmL2F1eHYiLCBPX1JET05MWSk7CisgICAgIGlmIChmZCA+PSAwKQorQEAgLTE0NywzMiArMTY2LDYxIEBAIGRldGVjdF9jcHVfZmVhdHVyZXMgKHZvaWQpCisgCXsKKyAJICAgIGlmIChhdXguYV90eXBlID09IEFUX0hXQ0FQKQorIAkgICAgeworLQkJdWludDMyX3QgaHdjYXAgPSBhdXguYV91bi5hX3ZhbDsKKy0KKy0JCS8qIGhhcmRjb2RlIHRoZXNlIHZhbHVlcyB0byBhdm9pZCBkZXBlbmRpbmcgb24gc3BlY2lmaWMKKy0JCSAqIHZlcnNpb25zIG9mIHRoZSBod2NhcCBoZWFkZXIsIGUuZy4gSFdDQVBfTkVPTgorLQkJICovCistCQlpZiAoKGh3Y2FwICYgNjQpICE9IDApCistCQkgICAgZmVhdHVyZXMgfD0gQVJNX1ZGUDsKKy0JCWlmICgoaHdjYXAgJiA1MTIpICE9IDApCistCQkgICAgZmVhdHVyZXMgfD0gQVJNX0lXTU1YVDsKKy0JCS8qIHRoaXMgZmxhZyBpcyBvbmx5IHByZXNlbnQgb24ga2VybmVsIDIuNi4yOSAqLworLQkJaWYgKChod2NhcCAmIDQwOTYpICE9IDApCistCQkgICAgZmVhdHVyZXMgfD0gQVJNX05FT047CisrCQlod2NhcCA9IGF1eC5hX3VuLmFfdmFsOworIAkgICAgfQorIAkgICAgZWxzZSBpZiAoYXV4LmFfdHlwZSA9PSBBVF9QTEFURk9STSkKKyAJICAgIHsKKy0JCWNvbnN0IGNoYXIgKnBsYXQgPSAoY29uc3QgY2hhciopIGF1eC5hX3VuLmFfdmFsOworLQorLQkJaWYgKHN0cm5jbXAgKHBsYXQsICJ2N2wiLCAzKSA9PSAwKQorKwkJcGxhdCA9IChjb25zdCBjaGFyKikgYXV4LmFfdW4uYV92YWw7CisrCQlwbGF0X2NudCsrOworKwkgICAgfQorKwl9CisrCWNsb3NlIChmZCk7CisrCWlmIChwbGF0ID09IE5VTEwgfHwgcGxhdF9jbnQgIT0gMSB8fCAqcGxhdCAhPSAndicpCisrCXsKKysJICAgIC8qCisrCSAgICAgKiBTb21ldGhpbmcgc2VlbXMgdG8gYmUgcmVhbGx5IHdyb25nLCBtb3N0IGxpa2VseSB3ZSBhcmUKKysJICAgICAqIHJ1bm5pbmcgdW5kZXIgcWVtdS4gTGV0J3MgdXNlIG1hY2hpbmUgdHlwZSBmcm9tICJ1bmFtZSIgZm9yCisrCSAgICAgKiBDUFUgY2FwYWJpbGl0aWVzIGRldGVjdGlvbjoKKysJICAgICAqIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9xZW11LWRldmVsIGF0IG5vbmdudS5vcmcvbXNnMjIyMTIuaHRtbAorKwkgICAgICovCisrCSAgICBzdHJ1Y3QgdXRzbmFtZSB1OworKwkgICAgaHdjYXAgPSAwOyAvKiBjbGVhciBod2NhcCwgYmVjYXVzZSBpdCBpcyBib2d1cyAqLworKwkgICAgaWYgKHVuYW1lICgmdSkgPT0gMCkKKysJICAgIHsKKysJCWlmIChzdHJjbXAgKHUubWFjaGluZSwgImFybXY3bCIpID09IDApCisrCQl7CisgCQkgICAgZmVhdHVyZXMgfD0gKEFSTV9WNyB8IEFSTV9WNik7CistCQllbHNlIGlmIChzdHJuY21wIChwbGF0LCAidjZsIiwgMykgPT0gMCkKKysJCSAgICBod2NhcCB8PSBBUk1fSFdDQVBfVkZQOyAgLyogcWVtdSBpcyBzdXBwb3NlZCB0byBlbXVsYXRlIHZmcCAqLworKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9ORU9OOyAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgbmVvbiAqLworKwkJfQorKwkJZWxzZSBpZiAoc3RyY21wICh1Lm1hY2hpbmUsICJhcm12NmwiKSA9PSAwKQorKwkJeworIAkJICAgIGZlYXR1cmVzIHw9IEFSTV9WNjsKKysJCSAgICBod2NhcCB8PSBBUk1fSFdDQVBfVkZQOyAgLyogcWVtdSBpcyBzdXBwb3NlZCB0byBlbXVsYXRlIHZmcCAqLworKwkJfQorIAkgICAgfQorIAl9CistCWNsb3NlIChmZCk7CisrCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2N2wiLCAzKSA9PSAwKQorKwl7CisrCSAgICBmZWF0dXJlcyB8PSAoQVJNX1Y3IHwgQVJNX1Y2KTsKKysJfQorKwllbHNlIGlmIChzdHJuY21wIChwbGF0LCAidjZsIiwgMykgPT0gMCkKKysJeworKwkgICAgZmVhdHVyZXMgfD0gQVJNX1Y2OworKwl9CisgICAgIH0KKyAKKysgICAgLyogaGFyZGNvZGUgdGhlc2UgdmFsdWVzIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBzcGVjaWZpYworKyAgICAgKiB2ZXJzaW9ucyBvZiB0aGUgaHdjYXAgaGVhZGVyLCBlLmcuIEhXQ0FQX05FT04KKysgICAgICovCisrICAgIGlmICgoaHdjYXAgJiBBUk1fSFdDQVBfVkZQKSAhPSAwKQorKyAgICAgICAgZmVhdHVyZXMgfD0gQVJNX1ZGUDsKKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9JV01NWFQpICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fSVdNTVhUOworKyAgICAvKiB0aGlzIGZsYWcgaXMgb25seSBwcmVzZW50IG9uIGtlcm5lbCAyLjYuMjkgKi8KKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9ORU9OKSAhPSAwKQorKyAgICAgICAgZmVhdHVyZXMgfD0gQVJNX05FT047CisrCisgICAgIHJldHVybiBmZWF0dXJlczsKKyB9CisgCistLSAKKzEuNy42LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9hc21faW5jbHVkZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyYTU3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vYXNtX2luY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRml4ZXMgZXJyb3JzIGxpa2UKKworQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSAubGlicy9waXhtYW4tbWlwcy1kc3ByMi1hc20ubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitpdCB3b3JrcyB3aXRoIGdsaWJjIGJlY2F1c2UgaXQgdXNlcyBnY2MgZml4ZWQtaGVhZGVycyBidXQgdGhhdHMgbm90IHJpZ2h0LgorCitXZSBtb3ZlIHRoZSBpbmNsdWRlIHVuZGVyIEMgYmxvY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IHBpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwaXhtYW4tMC4zMi42Lm9yaWcvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKKysrKyBwaXhtYW4tMC4zMi42L3BpeG1hbi9waXhtYW4tcHJpdmF0ZS5oCitAQCAtMSw0ICsxLDMgQEAKKy0jaW5jbHVkZSA8ZmxvYXQuaD4KKyAKKyAjaWZuZGVmIFBJWE1BTl9QUklWQVRFX0gKKyAjZGVmaW5lIFBJWE1BTl9QUklWQVRFX0gKK0BAIC0xNyw2ICsxNiw4IEBACisgCisgI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisgCisrI2luY2x1ZGUgPGZsb2F0Lmg+CisrCisgI2lmbmRlZiBQQUNLQUdFCisgIyAgZXJyb3IgY29uZmlnLmggbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgcGl4bWFuLXByaXZhdGUuaAorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE1ZmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorUmV2ZXJ0IGEgY29tbWl0IGluIHBpeG1hbiAwLjMyLjYgd2hpY2ggYnJlYWtzIGNvbXBsaWF0aW9uIG9uIE1JUFMgbWFjaGluZXMgd2l0aAorZXJyb3JzIHN1Y2ggYXM6CisKK3BpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5TOjQyNjc6CitFcnJvcjogaW52YWxpZCBvcGVyYW5kcyBgbWZsbyAkMTQsJGFjMycKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0gYi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLmgKKysrKyBhL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAorQEAgLTcyLDEwICs3Miw3IEBACisgI2RlZmluZSBMRUFGX01JUFMzMlIyKHN5bWJvbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC5nbG9ibCAgc3ltYm9sOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIC5hbGlnbiAgMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistI2lmZGVmIF9fRUxGX18KKy0gICAgICAgICAgICAgICAgLmhpZGRlbiBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLnR5cGUgICBzeW1ib2wsIEBmdW5jdGlvbjsgICAgICAgICAgICAgIFwKKy0jZW5kaWYKKyAgICAgICAgICAgICAgICAgLmVudCAgICBzeW1ib2wsIDA7ICAgICAgICAgICAgICAgICAgICAgIFwKKyBzeW1ib2w6ICAgICAgICAgLmZyYW1lICBzcCwgMCwgcmE7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLnNldCAgICBwdXNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi42LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlNTliNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW5fMC4zMi42LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiUGl4bWFuOiBQaXhlbCBNYW5pcHVsYXRpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiUGl4bWFuIHByb3ZpZGVzIGEgbGlicmFyeSBmb3IgbWFuaXB1bGF0aW5nIHBpeGVsIHJlZ2lvbnMgXAorLS0gYSBzZXQgb2YgWS1YIGJhbmRlZCByZWN0YW5nbGVzLCBpbWFnZSBjb21wb3NpdGluZyB1c2luZyB0aGUgXAorUG9ydGVyL0R1ZmYgbW9kZWwgYW5kIGltcGxpY2l0IG1hc2sgZ2VuZXJhdGlvbiBmb3IgZ2VvbWV0cmljIHByaW1pdGl2ZXMgXAoraW5jbHVkaW5nIHRyYXBlem9pZHMsIHRyaWFuZ2xlcywgYW5kIHJlY3RhbmdsZXMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE0MDk2Yzc2OWFlMGNiYjVmY2I5NGVjNDY4YmUxMWIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BpeG1hbi9waXhtYW4tbWF0cml4LmM7ZW5kbGluZT0yNTttZDU9YmE2ZTg3NjliZmFhZWUyYzQxNjk4NzU1YWYwNGM0YmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1hcm0tbmVvbi1hc20uaDtlbmRsaW5lPTI0O21kNT05YTljYzFlNTFhYmJmMWRhNThmNGQ5NTI4ZWM5ZDQ5YiBcCisgICAgICAgICAgICAgICAgICAgIgorREVQRU5EUyArPSAiemxpYiBsaWJwbmciCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BFID0gIjEiCisKK0lXTU1YVCA9ICItLWRpc2FibGUtYXJtLWl3bW14dCIKK0xPT05HU09OX01NSSA9ICItLWRpc2FibGUtbG9vbmdzb24tbW1pIgorTkVPTiA9ICIgLS1kaXNhYmxlLWFybS1uZW9uICIKK05FT05fY2xhc3MtbmF0aXZlc2RrID0gIiAtLWRpc2FibGUtYXJtLW5lb24gIgorTkVPTl9hcm12N2EgPSAiICIKK05FT05fYXJtdjdhLXZmcC1uZW9uID0gIiAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3RrICR7SVdNTVhUfSAke0xPT05HU09OX01NSX0gJHtORU9OfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWd0ayIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoIFwKKwkgICAgZmlsZTovL2FzbV9pbmNsdWRlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjhhOWU4ZjE0NzQzYTM5Y2YzMDM4MDNmMzY5YzFmMzQ0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMWZjMGQ3ZDZiYzAwMTc0OTZmMmJkMjdiM2NhMTQyMjRhZWEwZGY2YjYyNGM1ZWUyZGMwMzA3YTRmZjE0YTQiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtaW1hZ2VfMC40LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtaW1hZ2VfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0NjRiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1pbWFnZV8wLjQuMC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitERVBFTkRTICs9ICJ4Y2ItdXRpbCIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pbWFnZS94Y2JfaW1hZ2UuYztlbmRsaW5lPTI0O21kNT1lYWZkZjk2NWNmYjg5OTU1ZmRlZGY3NTA1NDIyM2ZiNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbWFnZS94Y2JfaW1hZ2UuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTI3O21kNT00OGNkMjVhZTU1ZTdkZTUyNWZlMWUxYTNhNzY3MmUxYyIKKworU1JDX1VSSVttZDVzdW1dID0gIjA4ZmU4ZmZlY2M4ZDRlMzdjMGFkZTc5MDZiM2Y0Yzg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJkYjk2YTM3ZDc4ODMxZDY0MzUzOGRkMWI1OTVkN2Q3MTJlMDRiZGNjZjg4OTZhNWUxOGNlMGYzOThlYTJmZmMiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWtleXN5bXNfMC40LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2E2NGVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWtleXN5bXNfMC40LjAuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2tleXN5bXMva2V5c3ltcy5jO2VuZGxpbmU9MzA7bWQ1PTJmOGRlMDIzZWQ4MjNiYjkyZjBiNDc5MDA1NzRlYTllIFwKKwkJCQkJIgorU1JDX1VSSVttZDVzdW1dID0gIjEwMjIyOTMwODNlZWM5ZTYyZDU2NTkyNjFjMjllMzY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlZjg0OTBmZjFkZWRlNTJiN2RlNTMzMTU4NTQ3ZjhiNDU0YjI0MWFhM2U0ZGNjYTM2OTUwN2Y2NmYyMTZkZDkiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXJlbmRlcnV0aWxfMC4zLjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMyMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXJlbmRlcnV0aWxfMC4zLjkuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9yZW5kZXJ1dGlsL2dseXBoLmM7ZW5kbGluZT0yNDttZDU9YzUxN2M0ODNiOGQ3MjYyMzRlYzk0ZjkxNjkyMzY2NjEgXAorCQkJCQlmaWxlOi8vcmVuZGVydXRpbC91dGlsLmM7ZW5kbGluZT0yMDttZDU9NmUwYmZjNDRmYjEzMjk4YzBmNDY5NGViNzBkYzgwZDQgXAorCQkJCQlmaWxlOi8vcmVuZGVydXRpbC94Y2JfcmVuZGVydXRpbC5oO2VuZGxpbmU9MjQ7bWQ1PWQwZGRhYjMwNTJkZDQ5NDljOTNjZmNiMDg5MWM5NmRmIFwKKwkJCQkJIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDY4YjExOWM5NGRhOTEwZTEyOTFmM2ZmYWI5MTAxOWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZlOTdlNDhmYjEyODZkNjM5NGRkZGIxYzE3MzJmMDAyMjdjNzBiZDFiZWRiN2QxYWNhYmVmZGQzNDBiZWE1YiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC13bV8wLjQuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC13bV8wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYxMzgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXdtXzAuNC4xLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZXdtaC9ld21oLmMubTQ7ZW5kbGluZT0yNzttZDU9NjNmZDgwNTUyZDdkYzg4NmY0ZWIyNjc2MTBkNWJiOWQgXAorCQkJCQlmaWxlOi8vZXdtaC94Y2JfZXdtaC5oLm00O2JlZ2lubGluZT00O2VuZGxpbmU9MzA7bWQ1PTczYjU4OWY5MGVmOTBiNGE0Mzk5ODk1NWRhYWQ1Y2Q4IFwKKwkJCQkJZmlsZTovL2ljY2NtL2ljY2NtLmM7ZW5kbGluZT0yODttZDU9ZTJiMzI0MGEwYzE5N2U4OTc3YWRkZTJhNWNmMThkNTAgXAorCQkJCQlmaWxlOi8vaWNjY20veGNiX2ljY2NtLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMTttZDU9MzkzNzcyYjdiMDdiOTg2OGQ0NzlkNTM4MjM4YzFkOGEgXAorCQkJCQkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4N2IxOWExY2Q3YmZjYjY1YTI0ZTM2YzMwMGUwMzEyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyOGJmODE3OTY0MGVhYTg5Mjc2ZDJiMGYxY2U0Mjg1MTAzZDEzNmJlNmM5ODI2MmI2MTUxYWFlZTFkM2MyYTNmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMDRmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC5pbmMKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgeGNiLXV0aWwgbW9kdWxlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGxpYnJhcmllcyB3aGljaCBcCitzaXQgb24gdG9wIG9mIGxpYnhjYiwgdGhlIGNvcmUgWCBwcm90b2NvbCBsaWJyYXJ5LCBhbmQgc29tZSBvZiB0aGUgXAorZXh0ZW5zaW9uIGxpYnJhcmllcy4gVGhlc2UgZXhwZXJpbWVudGFsIGxpYnJhcmllcyBwcm92aWRlIGNvbnZlbmllbmNlIFwKK2Z1bmN0aW9ucyBhbmQgaW50ZXJmYWNlcyB3aGljaCBtYWtlIHRoZSByYXcgWCBwcm90b2NvbCBtb3JlIHVzYWJsZS4gU29tZSBcCitvZiB0aGUgbGlicmFyaWVzIGFsc28gcHJvdmlkZSBjbGllbnQtc2lkZSBjb2RlIHdoaWNoIGlzIG5vdCBzdHJpY3RseSBcCitwYXJ0IG9mIHRoZSBYIHByb3RvY29sIGJ1dCB3aGljaCBoYXZlIHRyYWRpdGlvbmFsbHkgYmVlbiBwcm92aWRlZCBieSBcCitYbGliLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL1hjYlV0aWwvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCisKK0xJQ0VOU0UgPSAiTUlUIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorCitERVBFTkRTID0gImxpYnhjYiIKK0RFUEVORFMgKz0gImdwZXJmLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWxfMC40LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWxfMC40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2ZjA3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbF8wLjQuMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3JjL3hjYl9hdXguYztlbmRsaW5lPTMwO21kNT1hZTMwNWI5YzJhMzhmOWJhMjcwNjAxOTEwNDZhNjQ2MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMveGNiX2V2ZW50Lmg7ZW5kbGluZT0yNzttZDU9NjI3YmUzNTVhZWU1OWUxYjhhZGU4MGQ1YmQ5MGZhZDkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTk3ZmVlZDgxOTE5NDY1YTA0Y2NjNzFlNDA3MzMxMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NmU0OTQ2OWNiM2I1OTRhZjFkMzMxNzZjZDc1NjVkZWYyYmUzZmE4YmU0MzcxZDYyMjcxZmFiYjVlYWU1MGU5IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQxNjk5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94a2V5Ym9hcmQtY29uZmlnXzIuMTUuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJLZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGFiYXNlIGZvciBYIFdpbmRvdyIKKworREVTQ1JJUFRJT04gPSAiVGhlIG5vbi1hcmNoIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggXAorV2luZG93LiAgVGhlIGdvYWwgaXMgdG8gcHJvdmlkZSB0aGUgY29uc2lzdGVudCwgd2VsbC1zdHJ1Y3R1cmVkLCBcCitmcmVxdWVudGx5IHJlbGVhc2VkIG9wZW4gc291cmNlIG9mIFgga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhIGZvciBYIFwKK1dpbmRvdyBTeXN0ZW0gaW1wbGVtZW50YXRpb25zLiAgVGhlIHByb2plY3QgaXMgdGFyZ2V0ZWQgdG8gWEtCLWJhc2VkIFwKK3N5c3RlbXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvWEtleWJvYXJkQ29uZmlnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14a2V5Ym9hcmQtY29uZmlnIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTBlN2YyMWNhN2RiOTc1YzYzNDY3ZDJlNzYyNGExMmY5IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZGF0YS94a2V5Ym9hcmQtY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjRhZjFkZWViN2M1ZjRjYWQ2MmU2NTk1N2Q5OGQ2NzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBlNDQzY2Y3Y2EyZjBiNDA4NDY0NzJjMDI5NjQ3YTA1OTMzZmM3MDVkNjExZTE0NzhjNGRiOGE0OGE2ZjM4YmYiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImludGx0b29sLW5hdGl2ZSB2aXJ0dWFsL2dldHRleHQgdXRpbC1tYWNyb3MgbGlieHNsdC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgteGtiLXJ1bGVzLXN5bWxpbms9eG9yZyAtLWRpc2FibGUtcnVudGltZS1kZXBzIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveGtiIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL2NvbXBpbGVkCisgICAgY2QgJHtEfSR7ZGF0YWRpcn0vWDExL3hrYi9ydWxlcyAmJiBsbiAtc2YgYmFzZSB4b3JnCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveG9yZy1saWItY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGYwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveG9yZy1saWItY29tbW9uLmluYwpAQCAtMCwwICsxLDI2IEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvbGliLyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjayBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1zcGVjcyAtLXdpdGhvdXQtZ3JvZmYgLS13aXRob3V0LXBzMnBkZiAtLXdpdGhvdXQtZm9wIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1lbmFibGUtbWFsbG9jMHJldHVybnNudWxsIC0tZGlzYWJsZS1tYWxsb2MwcmV0dXJuc251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3BlY3MgLS13aXRob3V0LWdyb2ZmIC0td2l0aG91dC1wczJwZGYgLS13aXRob3V0LWZvcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC14bWx0byAtLXdpdGgteG1sdG8gXAorIgorCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPz0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94dHJhbnNfMS4zLjUuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveHRyYW5zXzEuMy41LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWFRyYW5zOiBYIFRyYW5zcG9ydCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgWCBUcmFuc3BvcnQgSW50ZXJmYWNlIGlzIGludGVuZGVkIHRvIGNvbWJpbmUgYWxsIFwKK3N5c3RlbSBhbmQgdHJhbnNwb3J0IHNwZWNpZmljIGNvZGUgaW50byBhIHNpbmdsZSBwbGFjZS4gIFRoaXMgQVBJIHNob3VsZCBcCitiZSB1c2VkIGJ5IGFsbCBsaWJyYXJpZXMsIGNsaWVudHMgYW5kIHNlcnZlcnMgb2YgdGhlIFggV2luZG93IFN5c3RlbS4gXAorVXNlIG9mIHRoaXMgQVBJIHNob3VsZCBhbGxvdyB0aGUgYWRkaXRpb24gb2YgbmV3IHR5cGVzIG9mIHRyYW5zcG9ydHMgYW5kIFwKK3N1cHBvcnQgZm9yIG5ldyBwbGF0Zm9ybXMgd2l0aG91dCBtYWtpbmcgYW55IGNoYW5nZXMgdG8gdGhlIHNvdXJjZSBcCitleGNlcHQgaW4gdGhlIFggVHJhbnNwb3J0IEludGVyZmFjZSBjb2RlLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDkzNDc5MjFkNGQ1MjY4MDIxYTk5OWYyNTBlZGM5Y2EiCisKK1BFID0gIjEiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjNWJhNDMyZGQxNTE0ZDg1ODA1M2ZmZTlmNDczN2RkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZGJkM2IzNjkzMmNlNGMwNjJjZDEwZjU3ZDc4YTE1NmJhOThkNjE4YmRiNmY1MDY2NGRhMzI3NTAyYmM4MzAxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vYmlncmVxc3Byb3RvXzEuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vYmlncmVxc3Byb3RvXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OThhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9iaWdyZXFzcHJvdG9fMS4xLjIuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworUEUgPSAiMSIKKworU1VNTUFSWSA9ICJCaWdSZXFzOiBYIEJpZyBSZXF1ZXN0cyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorQklHLVJFUVVFU1RTIGV4dGVuc2lvbiwgdXNlZCB0byBzZW5kIGxhcmdlciByZXF1ZXN0cyB0aGF0IHVzdWFsIGluIG9yZGVyIFwKK3RvIGF2b2lkIGZyYWdtZW50YXRpb24uIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIxMjcxNTYzMGRhNmYyNjhkMGQzNzEyZWUxYTUwNGY0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWEwNWZiMDFmYTFkNTE5ODg5NGM5MzFjZjkyNWMwMjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYyMTE2YWI0NGU0MWQ4MTIxYmZkZTk0NzMyMTk1MDM3MGIyODVhNTMxNjYxMmI4ZmNlODMzNGQ1MDc1MWIxZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvL2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvL2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhjYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG8vZml4LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgbWlzc2luZyBsZW5ndGggZmllbGRzIHRvIHRoZSByZXBsaWVzLiBXaXRob3V0IHRoZXNlLCBzYW5pdHkgY2hlY2tpbmcgaW4gcmVjZW50IFgKK2JyZWFrcyB0aGluZ3MuCisKK1JQIDExLzIvMTAKKworCitJbmRleDogZ2l0L3hjYWxpYnJhdGVwcm90by5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcveGNhbGlicmF0ZXByb3RvLmgJMjAxMC0wMi0xMSAxMTo0Nzo0NS43MTE5ODU5MzIgKzAwMDAKKysrKyBnaXQveGNhbGlicmF0ZXByb3RvLmgJMjAxMC0wMi0xMSAxMTo0MDoyMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC02NywxMyArNjcsMTMgQEAKKyAgICAgQllURSAgICB0eXBlOyAgIC8qIFhfUmVwbHkgKi8KKyAgICAgQllURSAgICBwYWQxOworICAgICBDQVJEMTYgIHNlcXVlbmNlTnVtYmVyIEIxNjsKKysgICAgQ0FSRDMyICBsZW5ndGg7CisgICAgIENBUkQzMiAgc3RhdHVzOworICAgICBDQVJEMzIgIHBhZDIgQjMyOworICAgICBDQVJEMzIgIHBhZDMgQjMyOworICAgICBDQVJEMzIgIHBhZDQgQjMyOworICAgICBDQVJEMzIgIHBhZDUgQjMyOworICAgICBDQVJEMzIgIHBhZDYgQjMyOworLSAgICBDQVJEMzIgIHBhZDcgQjMyOworIH0geFhDYWxpYnJhdGVSYXdNb2RlUmVwbHk7CisgCisgI2RlZmluZSBzel94WENhbGlicmF0ZVJhd01vZGVSZXBseQkzMgorQEAgLTkyLDEzICs5MiwxMyBAQAorICAgICBCWVRFICAgIHR5cGU7ICAgLyogWF9SZXBseSAqLworICAgICBCWVRFICAgIHBhZDE7CisgICAgIENBUkQxNiAgc2VxdWVuY2VOdW1iZXIgQjE2OworKyAgICBDQVJEMzIgIGxlbmd0aDsKKyAgICAgQ0FSRDMyICB4OworICAgICBDQVJEMzIgIHk7CisgICAgIENBUkQzMiAgcGFkMiBCMzI7CisgICAgIENBUkQzMiAgcGFkMyBCMzI7CisgICAgIENBUkQzMiAgcGFkNCBCMzI7CisgICAgIENBUkQzMiAgcGFkNSBCMzI7CistICAgIENBUkQzMiAgcGFkNiBCMzI7CisgfSB4WENhbGlicmF0ZVNjcmVlblRvQ29vcmRSZXBseTsKKyAKKyAjZGVmaW5lIHN6X3hYQ2FsaWJyYXRlU2NyZWVuVG9Db29yZFJlcGx5CTMyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90b19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4ZDE1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhDYWxpYnJhdGU6IFRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFwKK1RvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGV4dGVuc2lvbi4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGNhbGlicmF0ZXdpcmUuaDtlbmRsaW5lPTIzO21kNT03Zjg2ZWY3YjAzY2NlNmM0YzllYmQ1OWQyMGNhNDg1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Y2FsaWJyYXRlcHJvdG8uaDtlbmRsaW5lPTIzO21kNT1lNDQ5MDQ5MWVkY2MxNzFjYTI0Zjk4NTY5ZWU1ODBkYiIKKworU1JDUkVWID0gIjFkYTZmZDFlMmM3YTQ5NjQ4MjQ1Yzk4NDgxZmFiZWE4Yjk2OTBhOGMiCisKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL2NhbGlicmF0ZXByb3RvIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC5wYXRjaDthcHBseT15ZXMiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY29tcG9zaXRlcHJvdG9fMC40LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZlZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY29tcG9zaXRlcHJvdG9fMC40LjIuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYY29tcG9zaXRlOiBYIGNvbXBvc2l0ZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitjb21wb3NpdGUgZXh0ZW5zaW9uLiAgVGhlIFggY29tcG9zaXRlIGV4dGVuc2lvbiBwcm92aWRlcyB0aHJlZSByZWxhdGVkIFwKK21lY2hhbmlzbXMgZm9yIGNvbXBvc2l0aW5nIGFuZCBvZmYtc2NyZWVuIHN0b3JhZ2UuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJjNGJmZTEzNmY0YTQ0MThlYTJmMmE5NmI3YzhmM2M1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbXBvc2l0ZS5oO2VuZGxpbmU9NDM7bWQ1PWNiZDQ0ZDQwNzkwNTNhYTc1OTMwZWQyZjAyYjkyOTI2IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImNvbXBvc2l0ZWV4dCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ODQ4MmY2NWJhMWU3NGEwOGJmNWIwNTZhNDAzMWVmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNDkzNTlmMGJlMGIyYjk4NGE4MTQ5Yzk2NmRkMDRlOGM1OGU2ZWFkZTJhNGEzMDljZjExMjY2MzVjY2QwY2ZjIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kYW1hZ2Vwcm90b18xLjIuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDAyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kYW1hZ2Vwcm90b18xLjIuMS5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhkYW1hZ2U6IFggRGFtYWdlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBEQU1BR0UgXAorZXh0ZW5zaW9uLiAgVGhlIERBTUFHRSBleHRlbnNpb24gYWxsb3dzIGFwcGxpY2F0aW9ucyB0byByZWNlaXZlIFwKK2luZm9ybWF0aW9uIGFib3V0IGNoYW5nZXMgbWFkZSB0byBwaXhlbCBjb250ZW50cyBvZiB3aW5kb3dzIGFuZCBcCitwaXhtYXBzLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNWY1YTJkZTY1YzNhODRjYmRlNzY5ZjA3YTc2OTYwOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kYW1hZ2V3aXJlLmg7ZW5kbGluZT0yMzttZDU9NGE0NTAxYTU5MmRiYzdkZTVjZTg5MjU1ZTUwZDAyOTYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiZGFtYWdlZXh0IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OThlNTkwNDc2NGI4MjY0MmNjNjNkOTdiNGJhOWU5NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YzdjMTEyZTliOWVhOGE5ZDViMDE5ZTVmMTdkNDgxYWUyMGY3NjZjYjdhNDY0ODM2MGU3YzFiNDZmYzlmYzViIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZG14cHJvdG9fMi4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTYwZTVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZG14cHJvdG9fMi4zLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJETVg6IERpc3RyaWJ1dGVkIE11bHRpaGVhZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgRE1YIFwKK2V4dGVuc2lvbi4gIFRoZSBETVggZXh0ZW5zaW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGNvbW11bmljYXRpb24gd2l0aCBcCithbmQgY29udHJvbCBvZiBYZG14IHNlcnZlci4gIEF0dHJpYnV0ZXMgb2YgdGhlIFhkbXggc2VydmVyIGFuZCBvZiB0aGUgXAorYmFjay1lbmQgc2NyZWVucyBhdHRhY2hlZCB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWVyaWVkIGFuZCBtb2RpZmllZCB2aWEgXAordGhpcyBwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTNjMzQ5OTIzMWE4MDM1ZWZkMGUwMDRjZmJkM2I3MmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG14cHJvdG8uaDtlbmRsaW5lPTMyO21kNT1hYjg1MDk5NTVjM2RkNGM2NWZhYzcyOGUxYjM2N2JjNCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlZTE3NWJiZDQ0ZDA1YzM0ZDQzYmIxMjliZTUwOThhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3MjA1MWU2YTNlMDZiMjM2ZDE5ZWVkNTYzNjgxMTdiNzQ1Y2ExZTFhMjdiZGM1MGZkNTFhYTM3NWJlYTY1MDkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fMi44LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM0MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvXzIuOC5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRSSTI6IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgMiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBEaXJlY3QgXAorUmVuZGVyaW5nIElmbnJhc3RydWN0dXJlIDIuICBESVIgaXMgcmVxdWlyZWQgZm9yIG1heSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmUzOTZmYTkxODM0Zjg3ODYwMzJjYWQyZGE1NjM4ZjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZHJpMnByb3RvLmg7ZW5kbGluZT0zMTttZDU9MjJmMjhiZjY4ZDAxYjUzM2YyNjE5NWU5NGIzZWQ4Y2EiCisKKworU1JDX1VSSVttZDVzdW1dID0gImIyNzIxZDVkMjRjMDRkOTk4MGEwYzY1NDBjYjUzOTZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY5YjU1NDc2ZGVmNDRmYzdjNDU5YjI1MzdkMTdkYmM3MzFlMzZlZDVkNDE2YWY3Y2EwYjFlMmU2NzZmOGFhMDQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc0ZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpMnByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRSSTI6IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgMiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBEaXJlY3QgXAorUmVuZGVyaW5nIElmbnJhc3RydWN0dXJlIDIuICBESVIgaXMgcmVxdWlyZWQgZm9yIG1heSBoYXJkd2FyZSBcCithY2NlbGVyYXRlZCBPcGVuR0wgZHJpdmVycy4iCisKK1NSQ1JFViA9ICI2NmM1NmFiMTBkOTE3ZTNmNDdmOTMxNzhkN2VhYzY0MzA5NzBkM2M0IgorUFYgPSAiMS45OS4zK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vZHJpMnByb3RvIgorCitMSUNfRklMRVNfQ0hLU1VNPSJmaWxlOi8vQ09QWUlORzttZDU9MmUzOTZmYTkxODM0Zjg3ODYwMzJjYWQyZGE1NjM4ZjMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTNwcm90b18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDk3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkzcHJvdG9fMS4wLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAzIEV4dGVuc2lvbiIKKworREVTQ1JJUFRJT04gPSAiVGhlIERSSTMgZXh0ZW5zaW9uIHByb3ZpZGVzIG1lY2hhbmlzbXMgdG8gdHJhbnNsYXRlIGJldHdlZW4gZGlyZWN0IFwKK3JlbmRlcmVkIGJ1ZmZlcnMgYW5kIFggcGl4bWFwcy4gV2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcmVzZW50IGV4dGVuc2lvbiwgXAorYSBjb21wbGV0ZSBkaXJlY3QgcmVuZGVyaW5nIHNvbHV0aW9uIGZvciBPcGVuR0wgaXMgcHJvdmlkZWQuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RyaTNwcm90by5oO2VuZGxpbmU9MjE7bWQ1PWFjOTBkMWQ0MTZiZTNjYjEzZTFkM2M4OGNkNTE2NmJmIgorCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhM2QyY2JlNjBhOWNhMWJmM2FlYTZjOTNjODE3ZmVlMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwMWJlNDlkNzAyMDA1MThiOWE2YjI5NzEzMWY2Y2M3MWY0ZWEyZGUxNzQzNjg5NmFmMTUzMjI2YTc3NGZjMDc0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZml4ZXNwcm90b181LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWZiODhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZml4ZXNwcm90b181LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRml4ZXM6IFggRml4ZXMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggRml4ZXMgXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBzZXJ2ZXItc2lkZSBzdXBwb3J0IFwKK2ZvciBhcHBsaWNhdGlvbiB3b3JrIGFyb3VuZHMgdG8gc2hvcnRjb21pbmdzIGluIHRoZSBjb3JlIFggd2luZG93IFwKK3N5c3RlbS4iCisKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNjJhN2E4N2RhNTZlNjZkZDYzOWJmNzMzNGExMTBjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Zml4ZXNwcm90by5oO2VuZGxpbmU9NDM7bWQ1PWMzYTllZTZkYjM1MzJlZDBkNDRkZWEyNjZjZmM5N2Y0IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImZpeGVzZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzQzMWFiODRkMzdiMjY3OGFmNzFlMjkzNTVlMTAxZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYTJmM2YzMTI0NmJkZDNmMmEwYWNmOGJkM2IwOWJhOTljYWI5NjVjN2ZiMmMyYzkyYjdkYzcyODcwZTQyNGNlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZm9udHNwcm90b18yLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmYzI4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZvbnRzcHJvdG9fMi4xLjMuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRm9udDogWCBGb250IHJhc3RlcmlzYXRpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBGb250IFwKK3Jhc3RlcmlzYXRpb24gZXh0ZW5zaW9ucy4gIFRoZXNlIGV4dGVuc2lvbnMgYXJlIHVzZWQgdG8gY29udHJvbCBcCitzZXJ2ZXItc2lkZSBmb250IGNvbmZpZ3VyYXRpb25zLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jM2U0OGFhOWNlODY4YzhlOTBmMDQwMWRiNDFjMTFhMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9GU3Byb3RvLmg7ZW5kbGluZT00NDttZDU9ZDJlNThlMjcwOTVlNWVhN2Q0YWQ0NTZjY2I5MTk4NmMiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzY5MzRkMDBiMDA1NTVlYWFjZGU5ZjA5MWYzOTJmOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU5MDQ2YjBkZDkxMzA4MjVjNGE0YzQ3OWJhMzU5MWQ2ZDBmMTdhMzNmNTRlMjk0YjU2NDc4NzI5YTZlNWFiOCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2dscHJvdG9fMS40LjE3LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwM2QzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2dscHJvdG9fMS40LjE3LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiT3BlbkdMOiBYIE9wZW5HTCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorT3BlbkdMLXJlbGF0ZWQgZXh0ZW5zaW9ucywgdXNlZCB0byBlbmFibGUgdGhlIHJlbmRlcmluZyBvZiBhcHBsaWNhdGlvbnMgXAordXNpbmcgT3BlbkdMLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNDRlZDAxNDY5OTc4NTYzMDRkZmJiNTEyYTU5YThkZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbHhwcm90by5oO2JlZ2lubGluZT00O2VuZGxpbmU9MzI7bWQ1PTZiNzljNTcwZjY0NDM2M2IzNTY0NTZlN2Q0NDQ3MWQ5IgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjU1NjVmMWIwZmFjZjRhNTljMjc3ODIyOWMxZjcwZDEwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkYWE5NGJkZWQzMTBhMmJmY2JiOWRlYjRkNzUxZDk2NWZjZmU2ZmIzYTJmNmQyNDJlMmRmMmQ2NTg5ZGJlNDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThlMGMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKK2V4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAora2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU1NjJjYzBmNjU4N2I5NjFmMDMyMjExZDgxNjBmMzFlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1hJMnByb3RvLmg7ZW5kbGluZT00ODttZDU9MWFjMTU4MWU2MTE4OGRhMjg4NWNjMTRmZjQ5YjIwYmUiCisKK1BFID0gIjEiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2Y2FlYmVhZDRiNzc5YmEwMzE3MjdmNjZhN2ZmYTM1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YTQ3ZWU2MjA1M2E2YWNlZjNhODNmNTA2MzEyNDk0YmUxNDYxMDY4ZDBiOTI2OWQ4MTg4Mzk3MDNiOTVjMWQxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIwZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vaW5wdXRwcm90b19naXQuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYSTogWCBJbnB1dCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBJbnB1dCBcCitleHRlbnNpb24uICBUaGUgZXh0ZW5zaW9uIHN1cHBvcnRzIGlucHV0IGRldmljZXMgb3RoZXIgdGhlbiB0aGUgY29yZSBYIFwKK2tleWJvYXJkIGFuZCBwb2ludGVyLiIKKworUFIgPSAicjEiCitQRSA9ICIxIgorU1JDUkVWID0gIjcyMDMwMzY1MjJiYTlkNGIyMjRkMjgyZDZhZmMyZDBiOTQ3NzExZWUiCitQViA9ICIxLjkuOTkuMTIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vaW5wdXRwcm90byIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9rYnByb3RvXzEuMC43LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY1YzkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8va2Jwcm90b18xLjAuNy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhLQjogWCBLZXlib2FyZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitLZXlib2FyZCBleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyB1c2VkIHRvIGNvbnRyb2wgb3B0aW9ucyByZWxhdGVkIFwKK3RvIGtleWJvYXJkIGhhbmRsaW5nIGFuZCBsYXlvdXQuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdkZDZlYTk5ZTJhODNhNTUyYzAyYzgwOTYzNjIzYzM4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1hLQnByb3RvLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNTttZDU9NTc0NGVlZmY0MDdhZWI2ZTdhMTM0NmVlYmFiNDg2YTIiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjk0YWZjOTBjMWY3YmVmNGEyN2ZkZDU5ZWNlMzljODc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY4ODIyMTBiNzYzNzZlM2ZhMDA2YjExZGJkODkwZTU2ZWMwOTQyYmM1NmU2NWQxMjQ5ZmY0YWY4NmY5MGI4NTciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9wcmVzZW50cHJvdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI2ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcHJlc2VudHByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgYmFzaWMgaGVhZGVycyBmb3IgdGhlIFggV2luZG93IFN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBQcmVzZW50IGV4dGVuc2lvbiBwcm92aWRlcyBhIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHVwZGF0ZSB0aGVpciBcCisgICAgICAgICAgICAgICB3aW5kb3cgY29udGVudHMgZnJvbSBhIHBpeG1hcCBpbiBhIHdlbGwgZGVmaW5lZCBmYXNoaW9uLCBzeW5jaHJvbml6aW5nIFwKKyAgICAgICAgICAgICAgIHdpdGggdGhlIGRpc3BsYXkgcmVmcmVzaCBhbmQgcG90ZW50aWFsbHkgdXNpbmcgYSBtb3JlIGVmZmljaWVudCBcCisgICAgICAgICAgICAgICBtZWNoYW5pc20gdGhhbiBjb3B5aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgc291cmNlIHBpeG1hcC5cCisgICAgICAgICAgICAgICIKKworTElDRU5TRSA9ICJHUEx2MiIKKworU1JDUkVWID0gIjI0ZjNhNTZlNTQxYjBhOWU2YzZlZTc2MDgxZjQ0MTIyMWExMjBlZjkiCitQViA9ICIxLjArZ2l0JHtTUkNQVn0iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ3ZTUwOGNhMjgwZmRlOTc5MDZlYWNiNzc4OTJjM2FjIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL3Byb3RvL3ByZXNlbnRwcm90byIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JhbmRycHJvdG9fMS41LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OWU1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yYW5kcnByb3RvXzEuNS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJhbmRSOiBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFJlc2l6ZSwgXAorUm90YXRlIGFuZCBSZWZsZWN0IGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIFwKK3Jlc2l6ZSwgcm90YXRlIGFuZCByZWZsZWN0IHRoZSByb290IHdpbmRvdyBvZiBhIHNjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDA0MjZkNDFiZDNkOTI2N2NmOWJiYjJkZjkzMjNhNWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcmFuZHJwcm90by5oO2VuZGxpbmU9MzA7bWQ1PTM4ODU5NTdjNjA0OGZkZjMzMTBhYzhiYTU0Y2EyYzNmIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInJhbmRyZXh0IgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTQ2NzY1YzhkY2FjYjcxMTRjODIxYmFmMGRmMWU3OTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGM2NzU1MzNlNzljZDczMDk5N2QyMzJjODg5NGI2NjkyMTc0ZGNlNThkM2UyMDcwMjFiOGY4NjBiZTQ5ODQ2OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlY29yZHByb3RvXzEuMTQuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlY29yZHByb3RvXzEuMTQuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIzMTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVjb3JkcHJvdG9fMS4xNC4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlY29yZDogWCBSZWNvcmQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggUmVjb3JkIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgdG8gcmVjb3JkIGFuZCBwbGF5IGJhY2sgZXZlbnQgXAorc2VxdWVuY2VzLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NzU4MjdhMGY1NTRiYmVkMzMyNTQyOTc2ZDVmM2Q0MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZWNvcmRwcm90by5oO2VuZGxpbmU9MTk7bWQ1PTFjYmIwZGQ0NWEwYjA2MGZmODMzOTAxNjIwYTNlNzM4IgorCitSQ09ORkxJQ1RTXyR7UE59ID0gInJlY29yZGV4dCIKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiNGU1ZGVkZTVlYTUxOTA2ZjE1MzBjYTFlMjFkMjE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE3Nzc1NDhkMmU5MmFhMjU5ZjE1MjhkZTNjNGEzNmQxNWUwN2E0NjUwZDA5NzY1NzNhOGUyZmY1NDM3ZTczNzAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZW5kZXJwcm90b18wLjExLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZW5kZXJwcm90b18wLjExLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4MDBlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlbmRlcnByb3RvXzAuMTEuMS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSZW5kZXI6IFggcmVuZGVyaW5nIEV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK1JlbmRlcmluZyBleHRlbnNpb24uICBUaGlzIGlzIHRoZSBiYXNpcyB0aGUgaW1hZ2UgY29tcG9zaXRpb24gd2l0aGluIHRoZSBcCitYIHdpbmRvdyBzeXN0ZW0uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWY4MjZkOTk3NjUxOTYzNTJlNjEyMmE0MDZjZjBkMDI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JlbmRlcnByb3RvLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yNDttZDU9M2U1ZTI4NTFkYWQyNDBiMGEzYTI3YzQ3NzZiNGZkMWYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVuZGVyZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOTE0Y2NjMWRlNjZkZGViNGI2MTFjNmIwNjg2ZTI3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNjczNWE1YjkyYjIwNzU5MjA0ZTQ3NTFlY2Q2MDY0YTJhZDhhNjI0NmJiNjViMzA3OGI4NjJhMDBkZWYyNTM3IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZXNvdXJjZXByb3RvXzEuMi4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI2MTBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVzb3VyY2Vwcm90b18xLjIuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSZXM6IFggUmVzb3VyY2UgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorUmVzb3VyY2UgZXh0ZW5zaW9uLiAgWFJlcyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgWCBjbGllbnRzIHRvIFwKK3NlZSBhbmQgbW9uaXRvciBYIHJlc291cmNlIHVzYWdlIG9mIHZhcmlvdXMgY2xpZW50cy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NjA0ODU5MzA1ZTY2MjUwMzA3NzI0MGZlZThjNzdkOTciCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVzb3VyY2VleHQiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImNmZGI1N2RhZTIyMWI3MWIyNzAzZjhlMjk4MGVhYWY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjNjYwMDNhNmJkZWIwZjcwOTMyYTllZDNjZjU3Y2M1NTQyMzQxNTQzNzhkMzAxZTBjNWNmYTE4OWQ4ZjY4MTgiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Njcm5zYXZlcnByb3RvXzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwN2Y1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Njcm5zYXZlcnByb3RvXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHNjcm5zYXZlcjogWCBTY3JlZW4gU2F2ZXIgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggU2NyZWVuIFwKK1NhdmVyIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBhbiBleHRlcm5hbCBcInNjcmVlbiBzYXZlclwiIFwKK2NsaWVudCB0byBkZXRlY3Qgd2hlbiB0aGUgYWx0ZXJuYXRpdmUgaW1hZ2UgaXMgdG8gYmUgZGlzcGxheWVkIGFuZCB0byBcCitwcm92aWRlIHRoZSBncmFwaGljcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWVkNDliNzhiMTViNDM2YzkzM2I2YjhiMDU0ZTM5MDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2F2ZXJwcm90by5oO2VuZGxpbmU9MjY7bWQ1PWE4NGMwNjM3MzA1MTU5ZjNjMGFiMTczYWFlZWRlNDhkIgorCitQRSA9ICIxIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKKworU1JDX1VSSVttZDVzdW1dID0gImVkZDhhNzM3NzVlOGVjZTFkNjk1MTVkZDE3NzY3YmZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiYjcwYThkYTE2NDkzMGNjZWFlYjRjNzQxODAyOTE2NjA1MzNhZDNjYzQ1Mzc3YjMwYTc5NWQxYjg1YmNkNjUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FhNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vdmlkZW9wcm90b18yLjMuMi5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlh2OiBYIFZpZGVvIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFZpZGVvIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsb3dzIGZvciBhY2NlcmxhdGVkIGRyYXdpbmcgb2YgdmlkZW9zLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jZTM0NzJhMTE5YTg2NDA4NWZhNDE1NWNiMDk3OWE3YiIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImU2NTg2NDE1OTUzMjdkMzk5MGVhYjcwZmRiNTVjYThiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkYWUxNjhjYjgyMGZjZDMyZjU2NDg3OWFmYjNmMjRkMjdjMTc2MzAwZDlhZjY2ODE5YTE4MjY1NTM5YmQ0YjYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFiNTdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvLmluYwpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIGhlYWRlcnMiCitERVNDUklQVElPTiA9ICJGdW5jdGlvbiBwcm90b3R5cGVzIGZvciB0aGUgWCBwcm90b2NvbCBDLWxhbmd1YWdlIEJpbmRpbmcgXAorKFhDQikuICBYQ0IgaXMgYSByZXBsYWNlbWVudCBmb3IgWGxpYiBmZWF0dXJpbmcgYSBzbWFsbCBmb290cHJpbnQsIFwKK2xhdGVuY3kgaGlkaW5nLCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBwcm90b2NvbCwgaW1wcm92ZWQgdGhyZWFkaW5nIFwKK3N1cHBvcnQsIGFuZCBleHRlbnNpYmlsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1YQ0IiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QveGNiLXByb3RvLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUKKworUEFDS0FHRVMgKz0gInB5dGhvbi14Y2JnZW4iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS94Y2IvKi54bWwgJHtkYXRhZGlyfS94Y2IvKi54c2QiCitGSUxFU19weXRob24teGNiZ2VuID0gIiR7bGliZGlyfS9weXRob24qIgorCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBweXRob24tbmF0aXZlIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmM1YTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvXzEuMTEuYmIKQEAgLTAsMCArMSw5IEBACitpbmNsdWRlIHhjYi1wcm90by5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzYzYjA4MWNiMTBjMjIzNDM1YjAxZTAwZGMwYWJhNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZHJpMi54bWw7YmVnaW5saW5lPTI7ZW5kbGluZT0yODttZDU9Zjg3NjNiMTNmZjQzMmU4NTk3ZTBkNjEwY2Y1OThlNjUiCisKKworU1JDX1VSSVttZDVzdW1dID0gIjZiZjI3OTc0NDVkYzZkNDNlOWU0NzA3YzA4MmVmZjljIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0YWNlZWU2NTAyYTBjZTQ1ZmMzOWIzM2M1NDFhMmRmNDcxNWQwMGI3MmU2NjBlYmU4YzViYjQ0NDc3MWUzMmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWE0ZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNiLXByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDkgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSB4Y2ItcHJvdG8uaW5jCitTUkNSRVYgPSAiZDgxY2EyMzNlOThiZThmYTU5ZThjOTBkMjYyYzA1MTY5NDRjNWE2NiIKK1BWID0gIjEuMitnaXRyJHtTUkNQVn0iCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveGNiL3Byb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjbWlzY3Byb3RvXzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1MWI5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjbWlzY3Byb3RvXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEMtTUlTQzogWCBYQy1NaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYQy1NSVNDIFwKK2V4dGVuc2lvbiwgd2hpY2ggaXMgdXNlZCB0byBnZXQgZGV0YWlscyBvZiBYSUQgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBcCitzZXJ2ZXIuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5ZDgzMDQ3YzE1OTk0ZTA1ZGIyOWI0MjNlZDY2NjJlIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZjQ4NDdjNzhlNDFiODAxOTgyYzhhNWUwNjM2NWIyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMTMyMzY4NjkzNzIyNTZjMzZkYjc5YWUzOWQ1NDIxNDE3MjY3N2ZiNzllOWNkYzU1NWRjZWVjODBiZDlkMmRmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGV4dHByb3RvXzcuMy4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGV4dHByb3RvXzcuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMGJkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94ZXh0cHJvdG9fNy4zLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRXh0OiBYIEV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHNldmVyYWwgWCBcCitleHRlbnNpb25zLiAgVGhlc2UgcHJvdG9jb2wgZXh0ZW5zaW9ucyBpbmNsdWRlIERPVUJMRS1CVUZGRVIsIERQTVMsIFwKK0V4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBNSVRfU1VORFJZLU5PTlNUQU5EQVJELCBcCitNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFwKK1hURVNULiAgSW4gYWRkaXRpb24gYSBzbWFsbCBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIGFsc28gXAorYXZhaWxhYmxlLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04NmYyNzMyOTE3NTlkMGJhMmEyMjU4NWNkMWMwNmM1MyIKKworUEUgPSAiMSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLXNwZWNzPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGM5MGYzMTNiNGIwODUxNzU4ZWY3N2I5NTAxOTU4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmM2Y0YjIzYWM4ZGI5YzNhOWUwZDhlZGI1OTE3MTNmM2Q3MGVmOWMzYjE3NTk3MGRkODgyM2RmYzkyYWE1YmIwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRnYXByb3RvXzIuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmM2NlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkZ2Fwcm90b18yLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURHQTogWEZyZWU4NiBEaXJlY3QgR3JhcGhpY3MgQWNjZXNzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK0RpcmVjdCBHcmFwaGljcyBBY2Nlc3MgZXh0ZW5zaW9uLiBUaGlzIGV4dGVuc2lvbiBhbGxvd3MgZGlyZWN0IGdyYXBoaWNzIFwKK2FjY2VzcyB0byBhIGZyYW1lYnVmZmVyLWxpa2UgcmVnaW9uLCBhcyB3ZWxsIGFzIHJlbGF0aXZlIG1vdXNlIFwKK3JlcG9ydGluZy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAxZTY2ZTRiMzE3MDg4Y2Y4NjliYzk4ZTZhZjRmYjYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAieHhmODZkZ2FleHQiCitQUiA9ICJyMiIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMDM2ZGMyZmNiZjA1MmVjMTA2MjFmZDQ4YjY4ZGJiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYzVlZjY1MTA4ZTFmMjE0NjI4NmU1MzA4MDk3NTY4M2RhZTQ5ZmM5NDY4MDA0MmUwNGJkMWUyMDEwZTk5MDUwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRyaXByb3RvXzIuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRyaXByb3RvXzIuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjkyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZHJpcHJvdG9fMi4xLjEuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURSSTogWEZyZWU4NiBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK0RpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgZXh0ZW5zaW9uLiAgVGhlIFhGcmVlODYtRFJJIGV4dGVuc2lvbiBpcyBcCit1c2VkIHRvIG9yZ2FuaXplIGRpcmVjdCByZW5kZXJpbmcgc3VwcG9ydCBvciAzRCBjbGllbnRzIGFuZCBoZWxwIFwKK2FyYml0cmF0ZSByZXF1ZXN0cy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWYxMDNiOWQ5NTFlMzlmZjdlMjNkMzg2ZTIwMTFmYTMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGY4NmRyaXByb3RvLmg7ZW5kbGluZT0zNTttZDU9NDJiZTNkOGU2ZDQyOWFiNzkxNzI1NzJiYjBjZmY1NDQiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDcxNmQwZGFjM2I2NjRlNWVlMjBjNjlkMzRiYzEwZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YzRiOGQ3MjIxY2I2ZGM0MzA5MjY5Y2NjMDA4YTIyNzUzNjk4YWU5MjQ1YTM5OGE1OWRmMzVmMTQwNGQ2NjFmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4Nm1pc2Nwcm90b18wLjkuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2NjNlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZtaXNjcHJvdG9fMC45LjMuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LU1pc2M6IFhGcmVlODYgbWlzY2VsbGFuZW91cyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEZyZWUgXAorbWlzY2VsbGFuZW91cyBleHRlbnNpb24uICBUaGUgWEZyZWU4Ni1NaXNjIGV4dGVuc2lvbiBwcm92aWRlcyBhIG1lYW5zIHRvIFwKK2FjY2VzcyBpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzcGVjaWZpYyB0byB0aGUgWEZyZWU4Ni9Yb3JnIFwKK0REWC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTAxZTY2ZTRiMzE3MDg4Y2Y4NjliYzk4ZTZhZjRmYjYiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImNhNjNiYmIzMWNmNWI3ZjM3YjIyMzdlOTIzZmYyNTdhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1YjhlYzZhNGE4Y2EyMTA2NmRjZTExN2UwOWRjYzg4NTM5ODYyZTYxNmU2MGZiMzkxZGUwNWIzNmY2M2IwOTUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2dmlkbW9kZXByb3RvXzIuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjMxOTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NnZpZG1vZGVwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtVk06IFhGcmVlODYgdmlkZW8gbW9kZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWEZyZWU4NiBcCit2aWRlbyBtb2RlIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBjbGllbnQgYXBwbGljYXRpb25zIHRvIGdldCBcCithbmQgc2V0IHZpZGVvIG1vZGUgdGltaW5ncy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDk5YmUyZmYzODdhNDJmODQ2MjhjMzVmMzExZjE1MDIiCisKK1JDT05GTElDVFNfJHtQTn0gPSAieHhmODZ2bWV4dCIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTc5M2VjZWZlYWVjZmVhYmQxYWVkNmEwMTA5NTE3NGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDVkOTQ5OWFhN2I3MzIwM2ZkNmIzNTA1YjAyNTk2MjRhZmVkNWMxNmI5NDFiZDA0ZmNmMTIzZTVkZTY5ODc3MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hpbmVyYW1hcHJvdG9fMS4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDc3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94aW5lcmFtYXByb3RvXzEuMi4xLmJiCkBAIC0wLDAgKzEsMTcgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGluZXJhbWE6IFhpbmVyYW1hIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYaW5lcmFtYSBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyB1c2VkIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IFwKK3BoeXNpY2FsIG91dHB1dCBkZXZpY2VzIHdoaWNoIG1heSBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGxvZ2ljYWwgWCBcCitzY3JlZW4uIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNlMzk3YTUzMjZjODNkNWQwZWJmNWIzZjg3MTYzYWM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Bhbm9yYW1pWHByb3RvLmg7ZW5kbGluZT0yNDttZDU9MDk4ZTBiYzA4OTM2OGE5ODgwOTJiM2NiZGE2MTdhNTciCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OTU5ZmUwYmZiMjJhMGU3MjYwNDMzYjhkMTk5NTkwYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Nzc1NzRiYjNkYzE5MmVjZDljNTVmNTlmOTkxZWMxZGZmMzQwYmUzZTMxMzkyYzk1ZGVmZjQyM2RhNTI0ODViIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veG9yZy1wcm90by1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veG9yZy1wcm90by1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDE3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94b3JnLXByb3RvLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJYIHByb3RvY29sIGhlYWRlcnM6ICR7WE9SR19QTn0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9saWJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworWE9SR19QTiA9ICIke0JQTn0iCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9wcm90by8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtZm9wIgorCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgKz0gIi0td2l0aG91dC1mb3AgLS13aXRob3V0LXhtbHRvIC0td2l0aC14bWx0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0td2l0aC14bWx0bywgLS13aXRob3V0LXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorCisjICR7UE59IGlzIGVtcHR5IHNvIHdlIG5lZWQgdG8gdHdlYWsgLWRldiBhbmQgLWRiZyBwYWNrYWdlIGRlcGVuZGVuY2llcworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIke1BOfS1kZXYgKD0gJHtFWFRFTkRQS0dWfSkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBhZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRG9uJ3QgYWx3YXlzIGRlZmluZSBMT05HNjQgZm9yIEFNRDY0CisgICAgCitYMzIgZGVmaW5lcyBfX2FtZDY0X18vYW1kNjQgd2l0aCAzMmJpdCBsb25nLiAgV2Ugc2hvdWxkIHNpbXBseSBjaGVjaworX19MUDY0X18gYmVmb3JlIGRlZmluaW5nIExPTkc2NCB3aXRob3V0IGNoZWNraW5nIF9fYW1kNjRfXy9hbWQ2NC4KKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiB3aXRoIHgzMiB0b29sY2hhaW4uCisKK1JlY2VpdmVkIHRoaXMgcGF0Y2ggZnJvbSBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8xCisKKy0tLSB4cHJvdG8tNy4wLjIyL1htZC5oLngzMgkyMDA5LTA3LTExIDA0OjE5OjUwLjAwMDAwMDAwMCAtMDcwMAorKysrIHhwcm90by03LjAuMjIvWG1kLmgJMjAxMS0xMS0zMCAxNzoxNDoxOS4yOTAzOTU4OTMgLTA4MDAKK0BAIC02Miw3ICs2Miw2IEBAIFNPRlRXQVJFLgorICAgICAgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChpYTY0KSB8fCBcCisgICAgICBkZWZpbmVkKF9fc3BhcmM2NF9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fczM5MHhfXykgfHwgXAorLSAgICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpIHx8IFwKKyAgICAgIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKyAjICBkZWZpbmUgTE9ORzY0CQkJCS8qIDMyLzY0LWJpdCBhcmNoaXRlY3R1cmUgKi8KKyAjIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI4LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDI3YTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veHByb3RvXzcuMC4yOC5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhsaWI6IEMgTGFuZ3VhZ2UgWCBpbnRlcmZhY2UgaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgXAorU3lzdGVtLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iOWUwNTExMDdkNTYyODk2NjczOWEwYjJlOWIzMjY3NiIKKworUEUgPSAiMSIKKworU1JDX1VSSSArPSAiZmlsZTovL3hwcm90b19maXhfZm9yX3gzMi5wYXRjaCIKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2UyZjIzMGM1ZDhmYTkyOWYzMjZhZDFmMGZhNDBhOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyOWU4NTU2OGQxZjY4Y2VlZjhhMmMwODFkYWQ5YmMwZTU1MDBhNTNjZmZmZGUyNGI1NjRkYzQzZDQ2ZGRmNmNhIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL2djY21ha2VkZXBfMS4wLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL2djY21ha2VkZXBfMS4wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmMmY0YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvZ2NjbWFrZWRlcF8xLjAuMy5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlByb2dyYW0gdG8gY3JlYXRlIGRlcGVuZGVuY2llcyBpbiBtYWtlZmlsZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBnY2NtYWtlZGVwIHByb2dyYW0gY2FsbHMgJ2djYyAtTScgdG8gb3V0cHV0IG1ha2VmaWxlIFwKK3J1bGVzIGRlc2NyaWJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBlYWNoIHNvdXJjZWZpbGUsIHNvIHRoYXQgbWFrZSBrbm93cyBcCit3aGljaCBvYmplY3QgZmlsZXMgbXVzdCBiZSByZWNvbXBpbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGhhcyBjaGFuZ2VkLiIKKworcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTWFrZWZpbGUuYW07ZW5kbGluZT0yMDttZDU9MjNjMjc3Mzk2ZDY5MDQxMzI0NWViYjg5YjE4YzVkNGQiCitERVNDUklQVElPTiA9ICJjcmVhdGUgZGVwZW5kZW5jaWVzIGluIG1ha2VmaWxlcyB1c2luZyAnZ2NjIC1NJyIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCitSREVQRU5EU18ke1BOfSA9ICJnY2MiCisKK1BSID0gInIzIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjEyN2RkYjYxMzFlYjRhNTZmZGY2NjQ0YTYzYWRlNzg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY5ZTJlN2E1OTBlMjdmODRiNjcwOGFiN2E4MWU1NDYzOTliOTQ5YmY2NTJmYjliOTUxOTNlMGU1NDNlNmE1NDgiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9tYWtlZGVwZW5kXzEuMC41LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9tYWtlZGVwZW5kXzEuMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTk2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL21ha2VkZXBlbmRfMS4wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworCitTVU1NQVJZID0gImNyZWF0ZSBkZXBlbmRlbmNpZXMgaW4gbWFrZWZpbGVzIgorCitERVNDUklQVElPTiA9ICJUaGUgbWFrZWRlcGVuZCBwcm9ncmFtIHJlYWRzIGVhY2ggc291cmNlZmlsZSBpbiBzZXF1ZW5jZSBcCithbmQgcGFyc2VzIGl0IGxpa2UgYSBDLXByZXByb2Nlc3NvciwgcHJvY2Vzc2luZyBcCithbGwgI2luY2x1ZGUsICNkZWZpbmUsICAjdW5kZWYsICNpZmRlZiwgI2lmbmRlZiwgI2VuZGlmLCAjaWYsICNlbGlmIFwKK2FuZCAjZWxzZSBkaXJlY3RpdmVzIHNvIHRoYXQgaXQgY2FuIGNvcnJlY3RseSB0ZWxsIHdoaWNoICNpbmNsdWRlLCBcCitkaXJlY3RpdmVzIHdvdWxkIGJlIHVzZWQgaW4gYSBjb21waWxhdGlvbi4gQW55ICNpbmNsdWRlLCBkaXJlY3RpdmVzIFwKK2NhbiByZWZlcmVuY2UgZmlsZXMgaGF2aW5nIG90aGVyICNpbmNsdWRlIGRpcmVjdGl2ZXMsIGFuZCBwYXJzaW5nIHdpbGwgXAorb2NjdXIgaW4gdGhlc2UgZmlsZXMgYXMgd2VsbC4iCisKK0RFUEVORFMgPSAieHByb3RvIHV0aWwtbWFjcm9zIgorUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzYTZlZGEzNGI0OGVlODIxYjNiNjZmNGY3NTNjZTRmIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWZiMmQ3YzdlMjI4NDA5NDc4NjNlZmFlZGMxNzU3NDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTAzOTAzZDQxZmI1YmFkYjczY2I3MGQ3YjM3NDBjOGIzMGZlMWNjNjhjNTA0ZDNiNmE4NWU2NjQ0YzRlNTAwNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvdXRpbC1tYWNyb3NfMS4xOS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZjUwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvdXRpbC1tYWNyb3NfMS4xOS4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiWCBhdXRvdG9vbHMgbWFjcm9zIgorCitERVNDUklQVElPTiA9ICJNNCBhdXRvdG9vbHMgbWFjcm9zIHVzZWQgYnkgdmFyaW91cyBYLm9yZyBwcm9ncmFtcy4iCisKK3JlcXVpcmUgeG9yZy11dGlsLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xOTcwNTExZmRkZDQzOWIwN2E2YmE3ODlkMjhmZjY2MiIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjQwZTFjYWE0OWE3MWEyNmUwYWE2OGRkZDAwMjAzNzE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkNGRmNTFiMjkwMjNkYWYyZjYzYWViZjNlYmM2MzhlYTg4ZWZlZGZkNTYwYWI1ODY2NzQxYWIzZjkyYWNhYTEiCisKKyMgJHtQTn0gaXMgZW1wdHkgc28gd2UgbmVlZCB0byB0d2VhayAtZGV2IGFuZCAtZGJnIHBhY2thZ2UgZGVwZW5kZW5jaWVzCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC94b3JnLXV0aWwtY29tbW9uLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwveG9yZy11dGlsLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxMyBAQAorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9eG9yZyIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitMSUNFTlNFID0gIk1JVC1YIgorCitYT1JHX1BOID0gIiR7QlBOfSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3V0aWwvJHtYT1JHX1BOfS0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ViNmZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCkBAIC0wLDAgKzEsOSBAQAorU2VjdGlvbiAiTW9kdWxlIgorICAgIExvYWQgImZiZGV2aHciCisgICAgTG9hZCAiZmIiCisgICAgTG9hZCAic2hhZG93IgorICAgIExvYWQgInNoYWRvd2ZiIgorICAgIExvYWQgInZiZSIKKyAgICBMb2FkICJ2Z2FodyIKK0VuZFNlY3Rpb24KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVhcm0veG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVhcm0veG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdWFybS94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwcy94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzhiNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHMveG9yZy5jb25mCkBAIC0wLDAgKzEsNzAgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIERlZmF1bHREZXB0aCAgMTYKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzNjQveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzNjQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHM2NC94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11cHBjL3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11cHBjL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVwcGMveG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXNoNC94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXNoNC94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11c2g0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYtNjQveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYtNjQveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZGE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni02NC94b3JnLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAidm1tb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYTllYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2L3hvcmcuY29uZgpAQCAtMCwwICsxLDY0IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJ2bW1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcveG9yZy5jb25mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDdjMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFIgPSAicjMzIgorCitTUkNfVVJJID0gImZpbGU6Ly94b3JnLmNvbmYiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICJcCisgICAgICAgICAgZmlsZTovLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9YMTEveG9yZy5jb25mIgorQ09ORkZJTEVTXyR7UE59X2FwcGVuZF9saWJjLW11c2wgPSAiICR7c3lzY29uZmRpcn0vWDExL3hvcmcuY29uZi5kLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworZG9faW5zdGFsbCAoKSB7CisJaWYgdGVzdCAtcyAke1dPUktESVJ9L3hvcmcuY29uZjsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9YMTEKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veG9yZy5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9YMTEvCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1tdXNsICgpIHsKKwlpbnN0YWxsIC1EbSAwNjQ0ICR7V09SS0RJUn0vMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS94b3JnLmNvbmYuZC8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMWMwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMKQEAgLTAsMCArMSwxNzAgQEAKK1NVTU1BUlkgPSAiVGhlIFguT3JnIFggc2VydmVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWRmODc5NTBhZjUxYWMyYzU4MjIwOTQ1NTNlYTE4ODAiCisKKyMgeGY4Ni0qLSogcGFja2FnZXMgZGVwZW5kIG9uIGFuIFggc2VydmVyIGJ1aWx0IHdpdGggdGhlIHhmcmVlODYgRERYCisjIHNvIHdlIGhhdmUgYSB2aXJ0dWFsIHRvIHJlcHJlc2VudCB0aGF0OgorIyBkZXByZWNhdGVkLCB3ZSBzaG91bGQgdXNlIHZpcnR1YWwveHNlcnZlciBpbnN0ZWFkCitQUk9WSURFUyA9ICJ2aXJ0dWFsL3hzZXJ2ZXIteGY4NiIKKworIyBPdGhlciBwYWNrYWdlcyB0ZW5kIHRvIGp1c3QgY2FyZSB0aGF0IHRoZXJlIGlzICphbiogWCBzZXJ2ZXI6CitQUk9WSURFUyArPSAidmlydHVhbC94c2VydmVyIgorCitQRSA9ICIyIgorSU5DX1BSID0gInI4IgorCitYT1JHX1BOID0gInhvcmctc2VydmVyIgorU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3hzZXJ2ZXIvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSSArPSAiZmlsZTovL21hY3JvX3R3ZWFrLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BST1RPX0RFUFMgPSAicmFuZHJwcm90byByZW5kZXJwcm90byBmaXhlc3Byb3RvIGRhbWFnZXByb3RvIHhleHRwcm90byB4cHJvdG8geGY4NmRnYXByb3RvIHhmODZtaXNjcHJvdG8geGY4NnZpZG1vZGVwcm90byBjb21wb3NpdGVwcm90byByZWNvcmRwcm90byByZXNvdXJjZXByb3RvIHZpZGVvcHJvdG8gc2NybnNhdmVycHJvdG8gIHhpbmVyYW1hcHJvdG8gZm9udHNwcm90byBrYnByb3RvIGlucHV0cHJvdG8gYmlncmVxc3Byb3RvIHhjbWlzY3Byb3RvIHByZXNlbnRwcm90byIKK0xJQl9ERVBTID0gInBpeG1hbiBsaWJ4Zm9udCB4dHJhbnMgbGlieGF1IGxpYnhleHQgbGlieGRtY3AgbGliZHJtIGxpYnhrYmZpbGUgbGlicGNpYWNjZXNzIG9wZW5zc2wgbGliZ2NyeXB0IgorREVQRU5EUyA9ICIke1BST1RPX0RFUFN9ICR7TElCX0RFUFN9IGZvbnQtdXRpbCIKKworIyBTcGxpdCBvdXQgc29tZSBtb2R1bGVzIGFuZCBleHRlbnNpb25zIGZyb20gdGhlIG1haW4gcGFja2FnZQorIyBUaGVzZSBhcmVuJ3QgbmVlZGVkIGZvciBiYXNpYyBvcGVyYXRpb25zIGFuZCBvbmx5IHRha2UgdXAgc3BhY2U6CisjICAzMi4wayAgIGxpYmRyaS5zbworIyAgOTEuMGsgICBsaWJleGEuc28KKyMgIDMzNi4wayAgbGliZ2x4LnNvCisjICAxMzYwayAgIGxpYmludDEwLnNvCisjICAxODAuMGsgIGxpYndmYi5zbworIyAgMzIwLjBrICBsaWJ4YWEuc28KKyMgIDEyNC4wayAgbGlieGYxYnBwLnNvCisjICA4NC4wayAgIGxpYnhmNGJwcC5zbworIyAgICAgICAgICBsaWJyZWNvcmQuc28KKyMgICAgICAgICAgbGliZXh0bW9kLnNvCisjICAgICAgICAgIGxpYmRiZS5zbworCitQQUNLQUdFUyA9KyAiJHtQTn0tc2VjdXJpdHktcG9saWN5IFwKKyAgICAgICAgICAgICAke1BOfS1zZGwgXAorICAgICAgICAgICAgICR7UE59LWZiZGV2IFwKKyAgICAgICAgICAgICAke1BOfS14dmZiIFwKKyAgICAgICAgICAgICAke1BOfS11dGlscyBcCisgICAgICAgICAgICAgJHtQTn0teGVwaHlyIFwKKyAgICAgICAgICAgICAke1BOfS14d2F5bGFuZCBcCisgICAgICAgICAgICAgJHtQTn0tbXVsdGltZWRpYS1tb2R1bGVzIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWdseCBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYmludDEwIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliYWZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlid2ZiICBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYm1mYiBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYmNmYiBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWV4YSBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLXhhYSBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYnhmMWJwcCBcCisgICAgICAgICAgICAgJHtQTn0tbW9kdWxlLWxpYnhmNGJwcCBcCisgICAgICAgICAgICAgeGY4Ni12aWRlby1tb2Rlc2V0dGluZyIKKworU1VNTUFSWV94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIlguT3JnIFggc2VydmVyIC0tIG1vZGVzZXR0aW5nIGRpc3BsYXkgZHJpdmVyIgorSU5TQU5FX1NLSVBfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJ4b3JnLWRyaXZlci1hYmkiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1BOfS1zZWN1cml0eS1wb2xpY3kgeGtleWJvYXJkLWNvbmZpZyByZ2IgeHNlcnZlci14Zjg2LWNvbmZpZyB4a2Jjb21wIgorUkRFUEVORFNfJHtQTn0teHZmYiArPSAieGtleWJvYXJkLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leGEgPSAiJHtQTn0gKD0gJHtFWFRFTkRQS0dWfSkiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2xpYmRpcn0vWDExL09wdGlvbnMgJHtsaWJkaXJ9L1gxMS9DYXJkcyAke2xpYmRpcn0vWDExL2dldGNvbmZpZyAke2xpYmRpcn0vWDExL2V0YyAke2xpYmRpcn0vbW9kdWxlcy8qLnNvICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi5zbyAvZXRjL1gxMSAke2xpYmRpcn0veG9yZy9wcm90b2NvbC50eHQgJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvKi5sYSAke2xpYmRpcn0veG9yZy9tb2R1bGVzLyovKi5sYSIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtsaWJkaXJ9L1gxMS9kb2MgJHtkYXRhZGlyfS9YMTEveGtiL2NvbXBpbGVkL1JFQURNRS5jb21waWxlZCAke2xvY2Fsc3RhdGVkaXJ9L2xpYi94a2IvUkVBRE1FLmNvbXBpbGVkIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0veG9yZy9tb2R1bGVzLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfS1zZWN1cml0eS1wb2xpY3kgKz0gIiR7bGliZGlyfS94c2VydmVyL1NlY3VyaXR5UG9saWN5IgorRklMRVNfJHtQTn0tc2RsID0gIiR7YmluZGlyfS9Yc2RsIgorRklMRVNfJHtQTn0tZmJkZXYgPSAiJHtiaW5kaXJ9L1hmYmRldiIKK0ZJTEVTXyR7UE59LXh2ZmIgPSAiJHtiaW5kaXJ9L1h2ZmIiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vc2NhbnBjaSAke2JpbmRpcn0vcGNpdHdlYWsgJHtiaW5kaXJ9L2lvcG9ydCAke2JpbmRpcn0vaW5bYndsXSAke2JpbmRpcn0vb3V0W2J3bF0gJHtiaW5kaXJ9L21tYXBbcnddICR7YmluZGlyfS9ndGYgJHtiaW5kaXJ9L2dldGNvbmZpZyAke2JpbmRpcn0vZ2V0Y29uZmlnLnBsIgorRklMRVNfJHtQTn0teGVwaHlyID0gIiR7YmluZGlyfS9YZXBoeXIiCitGSUxFU18ke1BOfS14d2F5bGFuZCA9ICIke2JpbmRpcn0vWHdheWxhbmQiCitGSUxFU18ke1BOfS1tdWx0aW1lZGlhLW1vZHVsZXMgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9tdWx0aW1lZGlhLypkcnYqIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWRyaSA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZHJpLnNvIgorRklMRVNfJHtQTn0tZXh0ZW5zaW9uLWRyaTIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRyaTIuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZ2x4ID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJnbHguc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tcmVjb3JkID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJyZWNvcmQuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZXh0bW9kID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJleHRtb2Quc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZGJlID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkYmUuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGliaW50MTAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJpbnQxMC5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJhZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJhZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlid2ZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlid2ZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYm1mYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYm1mYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJjZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJjZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtZXhhID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGliZXhhLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLXhhYSA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYnhhYS5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ4ZjFicHAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ4ZjFicHAuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlieGY0YnBwID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlieGY0YnBwLnNvIgorRklMRVNfeGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvbW9kZXNldHRpbmdfZHJ2LnNvIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1mb3A9bm8gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcGljIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZG14IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXhuZXN0IFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUteHZmYiBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNvbXBvc2l0ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1kdHJhY2UgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW50MTA9eDg2ZW11IFwKKyAgICAgICAgICAgICAgICAgLS1zeXNjb25mZGlyPS9ldGMvWDExIFwKKyAgICAgICAgICAgICAgICAgLS1sb2NhbHN0YXRlZGlyPS92YXIgXAorICAgICAgICAgICAgICAgICAtLXdpdGgteGtiLW91dHB1dD0vdmFyL2xpYi94a2IgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtc2hhMT1saWJjcnlwdG8gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiZHJpMiB1ZGV2ICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2RyaSBnbHgnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndheWxhbmQiLCAieHdheWxhbmQiLCAiIiwgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS1jb25maWctdWRldiwtLWRpc2FibGUtY29uZmlnLXVkZXYsdWRldiIKK1BBQ0tBR0VDT05GSUdbZHJpXSA9ICItLWVuYWJsZS1kcmksLS1kaXNhYmxlLWRyaSxnbHByb3RvIHZpcnR1YWwvbWVzYSB4Zjg2ZHJpcHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTJdID0gIi0tZW5hYmxlLWRyaTIsLS1kaXNhYmxlLWRyaTIsZHJpMnByb3RvIgorIyBEUkkzIHJlcXVpcmVzIHhzaG1mZW5jZSB0byBhbHNvIGJlIGVuYWJsZWQKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywtLWRpc2FibGUtZHJpMyxkcmkzcHJvdG8iCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLS1lbmFibGUtZ2x4IC0tZW5hYmxlLWdseC10bHMsLS1kaXNhYmxlLWdseCxnbHByb3RvIHZpcnR1YWwvbGliZ2wgdmlydHVhbC9saWJ4MTEiCitQQUNLQUdFQ09ORklHW3Vud2luZF0gPSAiLS1lbmFibGUtbGlidW53aW5kLC0tZGlzYWJsZS1saWJ1bndpbmQsbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1t4c2htZmVuY2VdID0gIi0tZW5hYmxlLXhzaG1mZW5jZSwtLWRpc2FibGUteHNobWZlbmNlLGxpYnhzaG1mZW5jZSIKK1BBQ0tBR0VDT05GSUdbeG1sdG9dID0gIi0td2l0aC14bWx0bywgLS13aXRob3V0LXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kLWxvZ2luZF0gPSAiLS1lbmFibGUtc3lzdGVtZC1sb2dpbmQ9eWVzLC0tZW5hYmxlLXN5c3RlbWQtbG9naW5kPW5vLGRidXMsIgorUEFDS0FHRUNPTkZJR1t4aW5lcmFtYV0gPSAiLS1lbmFibGUteGluZXJhbWEsLS1kaXNhYmxlLXhpbmVyYW1hLHhpbmVyYW1hcHJvdG8iCitQQUNLQUdFQ09ORklHW3h3YXlsYW5kXSA9ICItLWVuYWJsZS14d2F5bGFuZCwtLWRpc2FibGUteHdheWxhbmQsd2F5bGFuZCBsaWJlcG94eSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgSXRzIGFzc3VtZWQgYmFzZS1maWxlcyBjcmVhdGVzIHRoaXMgZm9yIHVzCisJcm1kaXIgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9nLworfQorCisjIEFkZCBydW50aW1lIHByb3ZpZGVzIGZvciB0aGUgQUJJIHZlcnNpb25zIG9mIHRoZSB2aWRlbyBhbmQgaW5wdXQgc3Vic3lzdGVtcywKKyMgc28gdGhhdCBkcml2ZXJzIGNhbiBkZXBlbmQgb24gdGhlIHJlbGV2YW50IHZlcnNpb24uCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgIyBTZXQgUEtHX0NPTkZJR19QQVRIIHNvIHBrZy1jb25maWcgbG9va3MgYXQgdGhlIC5wYyBmaWxlcyB0aGF0IGFyZSBnb2luZworICAgICMgaW50byB0aGUgbmV3IHBhY2thZ2UsIG5vdCB0aGUgc3RhZ2VkIG9uZXMuCisgICAgbmV3ZW52ID0gZGljdChvcy5lbnZpcm9uKQorICAgIG5ld2VudlsiUEtHX0NPTkZJR19QQVRIIl0gPSBkLmV4cGFuZCgiJHtQS0dEfSR7bGliZGlyfS9wa2djb25maWcvIikKKworICAgIGRlZiBnZXRfYWJpKG5hbWUpOgorICAgICAgICBhYmlzID0geworICAgICAgICAgICJ2aWRlbyI6ICJhYmlfdmlkZW9kcnYiLAorICAgICAgICAgICJpbnB1dCI6ICJhYmlfeGlucHV0IgorICAgICAgICB9CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3M9InBrZy1jb25maWcgLS12YXJpYWJsZT0lcyB4b3JnLXNlcnZlciIgJSBhYmlzW25hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLCBlbnY9bmV3ZW52LCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXRwdXQgPSBwLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAnJworICAgICAgICByZXR1cm4gIiVzeG9yZy1hYmktJXMtJXMiICUgKG1scHJlZml4LCBuYW1lLCBvdXRwdXQuc3BsaXQoIi4iKVswXSkKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyIgKyBwbiwgIiAiICsgZ2V0X2FiaSgiaW5wdXQiKSkKKyAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyIgKyBwbiwgIiAiICsgZ2V0X2FiaSgidmlkZW8iKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLzAwMDEtdXNlLV9fR0xJQkNfXy1ndWFyZC1mb3ItZ2xpYmMtc3BlY2lmaWMtY29kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLzAwMDEtdXNlLV9fR0xJQkNfXy1ndWFyZC1mb3ItZ2xpYmMtc3BlY2lmaWMtY29kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWU0ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZjI0Mjc0MGY2NDg4YTI1ZTZjYTg0OTY4YjBlMjMxOWE5YTM5NzViNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMjA6NTI6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIF9fR0xJQkNfXyBndWFyZCBmb3IgZ2xpYmMgc3BlY2lmaWMgY29kZQorCitVc2luZyBfX2xpbnV4X18gaXMgYSB0YWQgYml0IHdyb25nIGFzc3VtcHRpb24gc2luY2UKK2xpbnV4ICE9IGdsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmggYi9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCitpbmRleCBlYjBhMzM4Li5jMzY2ZmZjIDEwMDY0NAorLS0tIGEvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaAorKysrIGIvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaAorQEAgLTE3OCw3ICsxNzgsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgCistI2lmZGVmIF9fbGludXhfXworKyNpZmRlZiBfX0dMSUJDX18KKyAjaW5jbHVkZSA8dGVybWlvLmg+CisgI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX0dMSUJDX18gKi8KKyAjaW5jbHVkZSA8dGVybWlvcy5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9tYWNyb190d2Vhay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGVlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy9tYWNyb190d2Vhay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGlzIGlzIHRoZSByZXZpc2VkIHZlcnNpb24gb2YgZmlsZXMvbWFjcm9fdHdlYWsucGF0Y2ggZm9yCit4b3JnLXNlcnZlciAxLjguOTkuOTA0IGFuZCBuZXdlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS94b3JnLXNlcnZlci5tNCBiL3hvcmctc2VydmVyLm00CitpbmRleCBiZGVjZjYyLi4wNDBmZGI4IDEwMDY0NAorLS0tIGEveG9yZy1zZXJ2ZXIubTQKKysrKyBiL3hvcmctc2VydmVyLm00CitAQCAtMjgsMTAgKzI4LDEyIEBAIGRubAorICMgQ2hlY2tzIGZvciB0aGUgJDEgZGVmaW5lIGluIHhvcmctc2VydmVyLmggKGZyb20gdGhlIHNkaykuICBJZiBpdAorICMgaXMgZGVmaW5lZCwgdGhlbiBhZGQgJDEgdG8gJFJFUVVJUkVEX01PRFVMRVMuCisgCisrbTRfcGF0dGVybl9hbGxvdyhQS0dfQ09ORklHX1NZU1JPT1RfRElSKQorKworIEFDX0RFRlVOKFtYT1JHX0RSSVZFUl9DSEVDS19FWFRdLFsKKyAJQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCisgCVNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorLQlDRkxBR1M9IiRDRkxBR1MgLUlgJFBLR19DT05GSUcgLS12YXJpYWJsZT1zZGtkaXIgeG9yZy1zZXJ2ZXJgIgorKwlDRkxBR1M9IiRDRkxBR1MgLUkkUEtHX0NPTkZJR19TWVNST09UX0RJUmAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXNka2RpciB4b3JnLXNlcnZlcmAiCisgCUFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyAjaW5jbHVkZSAieG9yZy1zZXJ2ZXIuaCIKKyAjaWYgIWRlZmluZWQgJDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTcuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnXzEuMTcuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDM5ZDMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xNy4yLmJiCkBAIC0wLDAgKzEsMjggQEAKK3JlcXVpcmUgeHNlcnZlci14b3JnLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjM5N2U0MDU1NjY2NTExNTA0OTBmZjQ5M2U0NjNmMWFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2MTEyMDYxMjcyOGYyYzUwMzQ2NzFkMGNhM2UyMjczNDM4YzYwYWJhOTNiM2RkYTRhOGFhNDBlNmEyNTc5OTMiCisKKyMgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgbm93IGludGVncmF0ZWQgaW50byB0aGUgc2VydmVyLCBzbyBkZWNsYXJlIHRoZSBtaWdyYXRpb24KKyMgcGF0aCBmb3IgaW4tcGxhY2UgdXBncmFkZXMuCisKK1JSRVBMQUNFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSUFJPVklERVNfJHtQTn0gPSAgIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgorUkNPTkZMSUNUU18ke1BOfSA9ICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94cmVzdG9wL3hyZXN0b3BfMC40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZGYwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94cmVzdG9wL3hyZXN0b3BfMC40LmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWFJlczogQSB0b3AtbGlrZSByZXNvdXJjZSB1c2FnZSB0b29sIGZvciBYIgorCitERVNDUklQVElPTiA9ICJ0b3AtbGlrZSBzdGF0aXN0aWNzIG9mIFgxMSBzZXJ2ZXIgcmVzb3VyY2UgdXNhZ2UgYnkgY2xpZW50cyIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS94cmVzdG9wIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94cmVzdG9wLmM7ZW5kbGluZT0xODttZDU9NzMwODc2YzMwZjBkOGE5Mjg2NzZiY2QxMjQyYTNiMzUiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorUFIgPSAicjMiCisKK0RFUEVORFMgPSAibGlieHJlcyBsaWJ4ZXh0IHZpcnR1YWwvbGlieDExIG5jdXJzZXMiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3hyZXN0b3AveHJlc3RvcC0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOGE1NDU5NmNiYWYwMzdlNjJiODBjNDU4NWEzY2E5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2N2MyZmM5NGE3ZWNlZGJhYWUwZDE4MzdlODJlOTNkMWQ5OGY0YTZkNzU5ODI4ODYwZTU1MjExOWFmM2NlMjU3IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC8zMHhUc19DYWxpYnJhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0MzYxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsLzMweFRzX0NhbGlicmF0ZS5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK2lmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCisJbj0xCisJd2hpbGUgWyAhIC16ICRUU0xJQl9UU0RFVklDRSBdICYmIFsgISAtZiAvZXRjL3BvaW50ZXJjYWwgXSAmJiBbICRuIC1sZSA1IF0KKwlkbworCSAgIC91c3IvYmluL3h0c2NhbAorCSAgIHNsZWVwIDEKKwkgICBuPSQoKCRuKzEpKQorCWRvbmUKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jaGFuZ2UtY3Jvc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jaGFuZ2UtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhNzcxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHRtcC9tYWluLmMub3JpZwkyMDA3LTAxLTAyIDE1OjM5OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIHRtcC9tYWluLmMJMjAwNy0wMS0wMiAxNTozOTo1NC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzEsOSArMTMxLDEwIEBACisgeworICAgWFJlbmRlckZpbGxSZWN0YW5nbGVzIChkcHksIFBpY3RPcFNyYywgcGljdCwgJnJlY3RfY29sb3IsIHJlY3RhbmdsZXMsIDIpOworIAorLSAgWEZpbGxBcmMgKGRweSwgY3Jvc3NoYWlyX3csIGNyb3NzaGFpcl9nYywgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSAtIDEsIAorLQkgICAgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSAtIDEsCistCSAgICBXSURUSCArIDEsIFdJRFRIICsgMSwgMCwgMzYwICogNjQpOworKyAgWEZpbGxSZWN0YW5nbGUgKGRweSwgY3Jvc3NoYWlyX3csIGNyb3NzaGFpcl9nYywKKysJCSAgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSwKKysJCSAgKENST1NTSEFJUl9TSVpFIC8gMikgLSAoV0lEVEggLyAyKSwKKysJCSAgV0lEVEgsIFdJRFRIKTsKKyB9CisgCisgdm9pZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2xlYW51cC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiMDg1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NsZWFudXAucGF0Y2gKQEAgLTAsMCArMSw2MjEgQEAKKy0tLQorIE1ha2VmaWxlLmFtICB8ICAgIDkgLS0KKyBjb25maWd1cmUuYWMgfCAgICAzIAorIGdwZS1kaXN0LmFtICB8ICAgMTIgLS0tCisgaDM2MDBfdHMuaCAgIHwgIDIxNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIG1haW4uYyAgICAgICB8ICAyMTAgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeHRzY2FsLmluICAgIHwgICAxOSAtLS0tLQorIDYgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNDU1IGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHh0c2NhbC0wLjYuMy94dHNjYWwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy94dHNjYWwuaW4JMjAwNC0wOS0xMCAyMDoxMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDE5ICswLDAgQEAKKy0jIS9iaW4vc2gKKy0KKy1tb2R1bGVfaWQoKSB7CistICAgICMgR2V0IG1vZGVsIG5hbWUKKy0gICAgZWNobyBgZ3JlcCAiXkhhcmR3YXJlIiAvcHJvYy9jcHVpbmZvIHwgc2VkIC1lICJzLy4qOiAqLy8iIHwgdHIgYS16IEEtWmAKKy19CistCistY2FzZSBgbW9kdWxlX2lkYCBpbgorLQkiSFAgSVBBUSBIMzEwMCIgfCAiSFAgSVBBUSBIMzgwMCIgKQorLQkJQVJHUz0iLXJvdGF0ZSA5MCIgOzsKKy0JIkhQIElQQVEgSDM2MDAiIHwgIkhQIElQQVEgSDM3MDAiIHwgIkhQIElQQVEgSDM5MDAiIHwgKkNPTExJRSB8ICpQT09ETEUpCistCQlBUkdTPSItcm90YXRlIDI3MCIgOzsKKy0JIyBIMjIwMDogd29ya3Mgd2l0aG91dCByb3RhdGlvbgorLWVzYWMKKy0KKy0jIHRoZSB0aGluZ3Mgd2UgZG8gZm9yIGF1dG9jb25mCistcHJlZml4PUBwcmVmaXhACistZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorLWV4ZWMgQGxpYmV4ZWNkaXJAL3h0c2NhbC5iaW4gJEFSR1MgJCoKK0luZGV4OiB4dHNjYWwtMC42LjMvbWFpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTIuMDAwMDAwMDAwICswMTAwCisrKysgeHRzY2FsLTAuNi4zL21haW4uYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTIyLDEyICsyMiwxMCBAQAorICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorIAorICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CistI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyYW5kci5oPgorICNpbmNsdWRlIDxYMTEvWGZ0L1hmdC5oPgorICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy94Y2FsaWJyYXRlLmg+CisgI2luY2x1ZGUgPFgxMS9rZXlzeW0uaD4KKyAKKy0jaW5jbHVkZSAiaDM2MDBfdHMuaCIKKyAjaW5jbHVkZSAiY2FsaWJyYXRlLmgiCisgCisgRGlzcGxheSAqZHB5OworQEAgLTQ1LDE1ICs0MywxMSBAQCBYZnRDb2xvciB4ZnRjb2w7CisgWGZ0RHJhdyAqeGZ0ZHJhdzsKKyBYZnRGb250ICp4ZnRmb250OworIGludCBzY3JlZW5feCwgc2NyZWVuX3k7CistaW50IHRzX2ZkOworIGludCBzYW1wbGVzOworIFBpeG1hcCBiZ19waXhtYXA7CisgaW50IGZsYWdfZGVidWc7CistaW50IHJvdGF0aW9uID0gMDsKKyBpbnQgZXJyb3JfYmFzZSwgZXZlbnRfYmFzZTsKKyAKKy1pbnQgdXNpbmdfeGNhbGlicmF0ZTsKKy0KKyBpbnQgbW92aW5nOworIAorICNkZWZpbmUgQ1JPU1NIQUlSX1NJWkUJMjUKK0BAIC02Myw3ICs1Nyw2IEBAIGludCBtb3Zpbmc7CisgI2RlZmluZSBFTk9VR0ggNQorICNkZWZpbmUgTUFYX1NBTVBMRVMgNDAKKyAKKy0jZGVmaW5lIFJBV19ERVZJQ0UgIi9kZXYvaDM2MDBfdHNyYXciCisgI2RlZmluZSBGT05UTkFNRSAic2Fucy0xMCIKKyAKKyBzdHJ1Y3QgcG9pbnQgCitAQCAtMjg3LDEyICsyODAsOCBAQCBzb3J0X2J5X3kgKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQgKmIpCisgdm9pZAorIHNldF9jYWxpYnJhdGlvbiAoY2FsaWJyYXRpb24gKmNhbCkKKyB7CistICBUU19DQUwgdGM7CistICBpbnQgeHRyYW5zLCB5dHJhbnMsIHhzY2FsZSwgeXNjYWxlLCB4eXNjYWxlLCB5eHNjYWxlOworICAgY2FsaWJyYXRpb24gb2NhbCA9ICpjYWw7CisgCistICBpZiAodXNpbmdfeGNhbGlicmF0ZSkKKy0gICAgeworICAgICAgIEZJTEUgKmZwOworICAgICAgIGlmIChmbGFnX2RlYnVnKQorIAlwcmludGYgKCJjb25zdGFudHMgYXJlOiAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKK0BAIC0zMDQsMjkgKzI5Myw2IEBAIHNldF9jYWxpYnJhdGlvbiAoY2FsaWJyYXRpb24gKmNhbCkKKyAJfQorICAgICAgIGZwcmludGYgKGZwLCAiJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIGNhbC0+YVsxXSwgY2FsLT5hWzJdLCBjYWwtPmFbMF0sIGNhbC0+YVs0XSwgY2FsLT5hWzVdLCBjYWwtPmFbM10sIGNhbC0+YVs2XSk7CisgICAgICAgZmNsb3NlIChmcCk7IAorLSAgICAgIHJldHVybjsKKy0gICAgfQorLQorLSAgeHRyYW5zID0gY2FsLT5hWzBdIC8gY2FsLT5hWzZdOworLSAgeXRyYW5zID0gY2FsLT5hWzNdIC8gY2FsLT5hWzZdOworLSAgeHNjYWxlID0gY2FsLT5hWzFdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeXNjYWxlID0gY2FsLT5hWzVdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeHlzY2FsZSA9IGNhbC0+YVsyXSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIHl4c2NhbGUgPSBjYWwtPmFbNF0gKiAyNTYgLyBjYWwtPmFbNl07CistICAKKy0gIHRjLnh0cmFucyA9IHh0cmFuczsKKy0gIHRjLnl0cmFucyA9IHl0cmFuczsKKy0gIHRjLnhzY2FsZSA9IHhzY2FsZTsKKy0gIHRjLnlzY2FsZSA9IHlzY2FsZTsKKy0gIHRjLnh5c3dhcCA9IDA7CistCistICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZFxuIiwgdGMueHNjYWxlLCB0Yy54dHJhbnMsIHRjLnlzY2FsZSwgdGMueXRyYW5zLCB0Yy54eXN3YXApOworLQorLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfU0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCistICAgIHsKKy0gICAgICBwZXJyb3IgKCJUU19TRVRfQ0FMIik7CistICAgICAgZXhpdCAoMSk7CistICAgIH0KKyB9CisgCisgdm9pZAorQEAgLTM5OCw4MCArMzY0LDEzIEBAIGhhbmRsZV90c19ldmVudCAoaW50IHgsIGludCB5LCBpbnQgcHJlc3MKKyB9CisgCisgdm9pZAorLXJlYWRfdHMgKHZvaWQpCisteworLSAgVFNfRVZFTlQgdHNfZXY7CistICBpbnQgcjsKKy0KKy0gIHIgPSByZWFkICh0c19mZCwgJnRzX2V2LCBzaXplb2YgKHRzX2V2KSk7CistICBpZiAociA9PSBzaXplb2YgKHRzX2V2KSkKKy0gICAgaGFuZGxlX3RzX2V2ZW50ICh0c19ldi54LCB0c19ldi55LCB0c19ldi5wcmVzc3VyZSk7CistfQorLQorLXZvaWQKKy1kb19jYWwgKGNoYXIgKiphcmdzKQorLXsKKy0gIFRTX0NBTCB0YzsKKy0KKy0gIHRjLnhzY2FsZSA9IGF0b2kgKGFyZ3NbMF0pOworLSAgdGMueHRyYW5zID0gYXRvaSAoYXJnc1sxXSk7CistICB0Yy55c2NhbGUgPSBhdG9pIChhcmdzWzJdKTsKKy0gIHRjLnl0cmFucyA9IGF0b2kgKGFyZ3NbM10pOworLSAgdGMueHlzd2FwID0gYXRvaSAoYXJnc1s0XSk7CistCistICBpZiAoZmxhZ19kZWJ1ZykKKy0gICAgZnByaW50ZiAoc3RkZXJyLCAic2V0dGluZzogJWQgJWQgJWQgJWQgJWRcbiIsIAorLQkgICAgIHRjLnh0cmFucywgdGMueXRyYW5zLCB0Yy54c2NhbGUsIHRjLnlzY2FsZSwgdGMueHlzd2FwKTsKKy0gICAgCistICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKKy0gICAgeworLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKKy0gICAgICBleGl0ICgxKTsKKy0gICAgfQorLSAgCistICBleGl0ICgwKTsKKy19CistCistdm9pZAorLXNob3dfY2FsICh2b2lkKQorLXsKKy0gIFRTX0NBTCB0YzsKKy0KKy0gIGlmIChpb2N0bCAodHNfZmQsIFRTX0dFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQorLSAgICB7CistICAgICAgcGVycm9yICgiVFNfR0VUX0NBTCIpOworLSAgICAgIGV4aXQgKDEpOworLSAgICB9CistCistICBwcmludGYgKCIlZCAlZCAlZCAlZCAlZFxuIiwgdGMueHNjYWxlLCB0Yy54dHJhbnMsIHRjLnlzY2FsZSwgdGMueXRyYW5zLCB0Yy54eXN3YXApOworLX0KKy0KKy12b2lkCisgdXNhZ2UgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLSAgZnByaW50ZiAoc3RkZXJyLCAidXNhZ2U6ICVzIC12aWV3XG4iLCBuYW1lKTsKKy0gIGZwcmludGYgKHN0ZGVyciwgIiAgICAgICAlcyBbLXJvdGF0ZSA8MCB8IDkwIHwgMTgwIHwgMjcwPl1cbiIsIG5hbWUpOworLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIC1jYWwgPHhzPiA8eHQ+IDx5cz4gPHl0PiA8eHlzd2FwPlxuIiwgbmFtZSk7CistCisrICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgWy1kZWJ1Z11cbiIsIG5hbWUpOworICAgZXhpdCAoMSk7CisgfQorIAorIGludAorLXhycl9zdXBwb3J0ZWQgKHZvaWQpCisteworLSAgaW50IHhycl9ldmVudF9iYXNlLCB4cnJfZXJyb3JfYmFzZTsKKy0gIGludCB4cnJfbWFqb3IsIHhycl9taW5vcjsKKy0KKy0gIGlmIChYUlJRdWVyeUV4dGVuc2lvbiAoZHB5LCAmeHJyX2V2ZW50X2Jhc2UsICZ4cnJfZXJyb3JfYmFzZSkgPT0gRmFsc2UKKy0gICAgICB8fCBYUlJRdWVyeVZlcnNpb24gKGRweSwgJnhycl9tYWpvciwgJnhycl9taW5vcikgPT0gMAorLSAgICAgIHx8IHhycl9tYWpvciAhPSAxCistICAgICAgfHwgeHJyX21pbm9yIDwgMSkKKy0gICAgcmV0dXJuIDA7CistCistICByZXR1cm4gMTsKKy19CistCistaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworQEAgLTQ4MCwzMSArMzc5LDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICBpbnQgbWF4X2ZkOworICAgR0MgYmdfZ2M7CisgICBpbnQgaTsKKy0gIGludCBoYXZlX3hyYW5kcjsKKyAKKyAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgIHsKKy0gICAgICBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi12aWV3IikpCistCXsKKy0JICBzaG93X2NhbCAoKTsKKy0JICBleGl0ICgwKTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItZGVidWciKSkKKysgICAgICBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQorIAlmbGFnX2RlYnVnID0gMTsKKy0gICAgICBlbHNlIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWNhbCIpKQorLQl7CistCSAgaWYgKGFyZ2MgPiAoaSArIDUpKQorLQkgICAgZG9fY2FsIChhcmd2ICsgaSArIDEpOworLQkgIGVsc2UKKy0JICAgIHVzYWdlIChhcmd2WzBdKTsKKy0JfQorLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItcm90YXRlIikpCistCXsKKy0JICBpZiAoYXJnYyA+IChpICsgMSkpCistCSAgICByb3RhdGlvbiA9IGF0b2kgKGFyZ3ZbKytpXSk7CistCSAgZWxzZQorLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOworLQl9CisgICAgICAgZWxzZQorIAl1c2FnZSAoYXJndlswXSk7CisgICAgIH0KK0BAIC01MzEsNDggKzQxMCwxMSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkgIGZwcmludGYgKHN0ZGVyciwgImZhaWxlZCB0byBzZXQgcmF3IG1vZGU6IGVycm9yICVkXG4iLCByKTsKKyAJICBleGl0ICgxKTsKKyAJfQorLQorLSAgICAgIHVzaW5nX3hjYWxpYnJhdGUgPSAxOworLSAgICB9CistCistICBoYXZlX3hyYW5kciA9IHhycl9zdXBwb3J0ZWQgKCk7CistICBpZiAoaGF2ZV94cmFuZHIpCistICAgIHsKKy0gICAgICBYUlJTY3JlZW5Db25maWd1cmF0aW9uICpycl9zY3JlZW47CistICAgICAgUm90YXRpb24gY3VycmVudF9yb3RhdGlvbjsKKy0KKy0gICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JZnByaW50ZiAoc3RkZXJyLCAiWFJBTkRSIGlzIHN1cHBvcnRlZFxuIik7CistCistICAgICAgcnJfc2NyZWVuID0gWFJSR2V0U2NyZWVuSW5mbyAoZHB5LCBSb290V2luZG93IChkcHksIHNjcmVlbikpOworLQorLSAgICAgIFhSUlJvdGF0aW9ucyAoZHB5LCBzY3JlZW4sICZjdXJyZW50X3JvdGF0aW9uKTsKKy0KKy0gICAgICBYUlJGcmVlU2NyZWVuQ29uZmlnSW5mbyAocnJfc2NyZWVuKTsKKy0KKy0gICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JZnByaW50ZiAoc3RkZXJyLCAiQ3VycmVudCBSQU5EUiByb3RhdGlvbiBpcyAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7CistCistICAgICAgc3dpdGNoIChjdXJyZW50X3JvdGF0aW9uKQorLQl7CistCWNhc2UgUlJfUm90YXRlXzI3MDoKKy0JICByb3RhdGlvbiArPSA5MDsKKy0JY2FzZSBSUl9Sb3RhdGVfMTgwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQljYXNlIFJSX1JvdGF0ZV85MDoKKy0JICByb3RhdGlvbiArPSA5MDsKKy0JICByb3RhdGlvbiAlPSAzNjA7CistCWNhc2UgUlJfUm90YXRlXzA6CistCSAgYnJlYWs7CistCWRlZmF1bHQ6CistCSAgZnByaW50ZiAoc3RkZXJyLCAiVW5rbm93biBSQU5EUiByb3RhdGlvbjogJWRcbiIsIGN1cnJlbnRfcm90YXRpb24pOworLQkgIGJyZWFrOworLQl9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgbm90IHN1cHBvcnRlZFxuIik7CisrICAgICAgcGVycm9yICgiWENBTElCUkFURSBleHRlbnNpb24gbWlzc2luZyIpOworKyAgICAgIGV4aXQgKDEpOworICAgICB9CisgCisgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gZmxhZ19kZWJ1ZyA/IEZhbHNlIDogVHJ1ZTsKK0BAIC02NjYsNDUgKzUwOCwxNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorICAgZm9yIChpID0gMDsgaSA8IE5SX1BPSU5UUzsgaSsrKQorICAgICB7CistICAgICAgc3dpdGNoIChyb3RhdGlvbikKKy0JeworLQljYXNlIDA6CistCSAgY2FsLnhmYltpXSA9IGNhbC54c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBjYWwueXNjcltpXTsKKy0JICBicmVhazsKKy0JY2FzZSA5MDoKKy0JICBjYWwueGZiW2ldID0gY2FsLnlzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07CistCSAgYnJlYWs7CistCWNhc2UgMTgwOgorLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feCAtIGNhbC54c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOworLQkgIGJyZWFrOworLQljYXNlIDI3MDoKKy0JICBjYWwueGZiW2ldID0gc2NyZWVuX3kgLSBjYWwueXNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gY2FsLnhzY3JbaV07CistCSAgYnJlYWs7CistCX0KKysgICAgICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07CisrICAgICAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOworKyAgICAgIFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkIChkcHksICZjYWwueGZiW2ldLCAmY2FsLnlmYltpXSk7CisgCisgICAgICAgaWYgKGZsYWdfZGVidWcpCistCXByaW50ZiAoInJvdGF0aW9uICVkOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsIHJvdGF0aW9uLCAKKysJcHJpbnRmICgicm90YXRpb24gY29udmVyc2lvbjogKCVkLCVkKSAtPiAoJWQsJWQpXG4iLAorIAkJY2FsLnhzY3JbaV0sIGNhbC55c2NyW2ldLCBjYWwueGZiW2ldLCBjYWwueWZiW2ldKTsKKyAgICAgfQorIAorICAgbmV4dF9ldmVudCAoKTsKKyAKKy0gIGlmICghdXNpbmdfeGNhbGlicmF0ZSkKKy0gICAgeworLSAgICAgIHRzX2ZkID0gb3BlbiAoUkFXX0RFVklDRSwgT19SRE9OTFkpOworLSAgICAgIGlmICh0c19mZCA8IDApCistCXsKKy0JICBwZXJyb3IgKFJBV19ERVZJQ0UpOworLQkgIGV4aXQgKDEpOworLQl9CistICAgIH0KKy0KKy0gIG1heF9mZCA9ICh4ZmQgPiB0c19mZCkgPyB4ZmQgOiB0c19mZDsKKy0KKyAgIGZvciAoOzspCisgICAgIHsKKyAgICAgICBmZF9zZXQgZmRzOworQEAgLTcxMywxMiArNTI3LDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyAgICAgICBGRF9aRVJPICgmZmRzKTsKKyAgICAgICBGRF9TRVQgKHhmZCwgJmZkcyk7CistICAgICAgaWYgKHRzX2ZkICE9IC0xKQorLQlGRF9TRVQgKHRzX2ZkLCAmZmRzKTsKKyAKKy0gICAgICBzZWxlY3QgKG1heF9mZCArIDEsICZmZHMsIE5VTEwsIE5VTEwsIE5VTEwpOworLSAgICAgIAorLSAgICAgIGlmICh0c19mZCAhPSAtMSAmJiBGRF9JU1NFVCAodHNfZmQsICZmZHMpKQorLQlyZWFkX3RzICgpOworKyAgICAgIHNlbGVjdCAoeGZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgIH0KKyB9CisrCitJbmRleDogeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA0LTA5LTEwIDIwOjExOjEyLjAwMDAwMDAwMCArMDEwMAorKysrIHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMJMjAwNy0wNy0wMSAwMToxMjo1NS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05LDggKzksNyBAQCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyBBQ19QUk9HX0NDCisgCistUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeHJhbmRyIHhjYWxpYnJhdGUpCisrUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSkKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKKy1BQ19DT05GSUdfRklMRVMoW3h0c2NhbF0pCisgQUNfT1VUUFVUCitJbmRleDogeHRzY2FsLTAuNi4zL2dwZS1kaXN0LmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvZ3BlLWRpc3QuYW0JMjAwNC0wNi0wMiAyMzowNzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDEyICswLDAgQEAKKy1DVlNUQUcgOj0gJChzaGVsbCBlY2hvICQoUEFDS0FHRSktJChWRVJTSU9OKSB8IHRyIFthLXouXSBbQS1aX10pCistCistZGlzdC11cGxvYWQ6IGRpc3QKKy0Jc2NwICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIuYnoyICQoVVNFUilAaGFuZGhlbGRzLm9yZzovaG9tZS9mdHAvcHViL3Byb2plY3RzL2dwZS9zb3VyY2UvCistCistdGFnOgorLQljdnMgdGFnICQoQ1ZTVEFHKQorLQorLXJldGFnOgorLQljdnMgdGFnIC1GICQoQ1ZTVEFHKQorLQorLXNvdXJjZTogdGFnIGRpc3QtdXBsb2FkCitJbmRleDogeHRzY2FsLTAuNi4zL2gzNjAwX3RzLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9oMzYwMF90cy5oCTIwMDMtMDctMDUgMTc6Mjc6MTAuMDAwMDAwMDAwICswMTAwCisrKysgL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCitAQCAtMSwyMTYgKzAsMCBAQAorLS8qCistKgorLSogRHJpdmVyIGZvciB0aGUgSDM2MDAgVG91Y2ggU2NyZWVuIGFuZCBvdGhlciBBdG1lbCBjb250cm9sbGVkIGRldmljZXMuCistKgorLSogQ29weXJpZ2h0IDIwMDAgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uLgorLSoKKy0qIFVzZSBjb25zaXN0ZW50IHdpdGggdGhlIEdOVSBHUEwgaXMgcGVybWl0dGVkLAorLSogcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKy0qIHByZXNlcnZlZCBpbiBpdHMgZW50aXJldHkgaW4gYWxsIGNvcGllcyBhbmQgZGVyaXZlZCB3b3Jrcy4KKy0qCistKiBDT01QQVEgQ09NUFVURVIgQ09SUE9SQVRJT04gTUFLRVMgTk8gV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SIElNUExJRUQsCistKiBBUyBUTyBUSEUgVVNFRlVMTkVTUyBPUiBDT1JSRUNUTkVTUyBPRiBUSElTIENPREUgT1IgSVRTCistKiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorLSoKKy0qIEF1dGhvcjogQ2hhcmxlcyBGbHlubi4KKy0qCistKi8KKy0KKy0KKy0jaWZuZGVmIF9fSDM2MDBfVFNfSF9fCistI2RlZmluZSBfX0gzNjAwX1RTX0hfXworLQorLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorLQorLWVudW0gaDM2MDBfdHNfbWlub3JfZGV2aWNlcyB7CistCVRTX01JTk9SICAgID0gMCwKKy0JVFNSQVdfTUlOT1IgPSAxLAorLQlLRVlfTUlOT1IgICA9IDIKKy19OworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uIHsKKy0gICAgICAgIGludCB4c2NhbGU7CistICAgICAgICBpbnQgeHRyYW5zOworLSAgICAgICAgaW50IHlzY2FsZTsKKy0gICAgICAgIGludCB5dHJhbnM7CistICAgICAgICBpbnQgeHlzd2FwOworLX0gVFNfQ0FMOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2V2ZW50IHsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CistfSBUU19FVkVOVDsKKy0KKy0vKiBEZXByZWNhdGVkIC0gZG8gbm90IHVzZSAqLworLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3JldHVybiB7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcmVzc3VyZTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHg7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB5OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFkOworLX0gVFNfUkVUOworLQorLWVudW0gcG93ZXJfYnV0dG9uX21vZGUgeworLSAgIFBCTV9TVVNQRU5EICAgICAgICAgICA9IDAsCistICAgUEJNX0dFTkVSQVRFX0tFWVBSRVNTID0gMQorLX07CistCistCistLyogKysrKysrKysrKysrKysgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAqLworLQorLXR5cGVkZWYgc3RydWN0IHRoZXJtX2RldiB7CistCXNob3J0IGRhdGE7CistfSBUSEVSTV9ERVY7CistCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fQUxLQUxJTkUgICAgICAgIDB4MDEKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9OSUNEICAgICAgICAgICAgMHgwMgorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JTUggICAgICAgICAgICAweDAzCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTElPTiAgICAgICAgICAgIDB4MDQKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSVBPTFkgICAgICAgICAgMHgwNQorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05PVF9JTlNUQUxMRUQgICAweDA2CistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fVU5LTk9XTiAgICAgICAgIDB4ZmYKKy0KKy0vKiBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIGFwbV9iaW9zLmggZGVmaW5pdGlvbnMgKi8KKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19PRkZMSU5FCTB4MDAKKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19PTkxJTkUJMHgwMQorLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX0JBQ0tVUAkweDAyICAgLyogV2hhdCBkb2VzIHRoaXMgbWVhbj8gKi8KKy0jZGVmaW5lIEgzNjAwX0FDX1NUQVRVU19BQ19VTktOT1dOCTB4ZmYKKy0KKy0vKiBUaGVzZSBiaXRmaWVsZHMgYXJlIHJhcmVseSAib3InZCIgdG9nZXRoZXIgKi8KKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0hJR0gJCTB4MDEKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0xPVwkJMHgwMgorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ1JJVElDQUwJMHgwNAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ0hBUkdJTkcJMHgwOAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfQ0hBUkdFX01BSU4gICAweDEwCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19ERUFEICAgICAgICAgIDB4MjAgICAvKiBCYXR0ZXJ5IHdpbGwgbm90IGNoYXJnZSAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9OT1RfSU5TVEFMTEVEICAgICAgICAweDIwICAgLyogRm9yIGV4cGFuc2lvbiBwYWNrIGJhdHRlcmllcyAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfRlVMTCAgICAgICAgICAweDQwICAgLyogQmF0dGVyeSBmdWxseSBjaGFyZ2VkIChhbmQgY29ubmVjdGVkIHRvIEFDKSAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTk9CQVRUCTB4ODAKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX1VOS05PV04JMHhmZgorLQorLXN0cnVjdCBiYXR0ZXJ5X2RhdGEgeworLQl1bnNpZ25lZCBjaGFyICBjaGVtaXN0cnk7CistCXVuc2lnbmVkIGNoYXIgIHN0YXR1czsKKy0JdW5zaWduZWQgc2hvcnQgdm9sdGFnZTsgICAgLyogVm9sdGFnZSBmb3IgYmF0dGVyeSAjMDsgdW5rbm93biBmb3IgYmF0dGVyeSAjMSAqLworLQl1bnNpZ25lZCBzaG9ydCBwZXJjZW50YWdlOyAvKiBQZXJjZW50YWdlIG9mIGZ1bGwgY2hhcmdlICovCistCXVuc2lnbmVkIHNob3J0IGxpZmU7ICAgICAgIC8qIExpZmUgcmVtYWluaW5nIGluIG1pbnV0ZXMgKi8KKy19OworLQorLXN0cnVjdCBoMzYwMF9iYXR0ZXJ5IHsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgYWNfc3RhdHVzOworLQl1bnNpZ25lZCBjaGFyICAgICAgIGJhdHRlcnlfY291bnQ7ICAvKiBIb3cgbWFueSBiYXR0ZXJpZXMgd2UgaGF2ZSAqLworLQlzdHJ1Y3QgYmF0dGVyeV9kYXRhIGJhdHRlcnlbMl07CistfTsKKy0KKy0vKiAtLS0tLS0tLSBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCistCistI2RlZmluZSBFRVBST01fUkRfQlVGU0laIDYJLyogRUVQUk9NIHJlYWRzIGFyZSAxNiBiaXRzICovCistI2RlZmluZSBFRVBST01fV1JfQlVGU0laIDUJLyogQWxsb3cgcm9vbSBmb3IgOGJpdCAnYWRkcicgZmllbGQgaW4gYnVmZmVyKi8gCistI2RlZmluZSBTUElfUkRfQlVGU0laCSAxNgkvKiBTUEkgcmVhZHMgYXJlIDggYml0cyAqLworLSNkZWZpbmUgU1BJX1dSX0JVRlNJWgkgNworLQorLS8qIFRoZSBFRVBST00gaXMgd2hlcmUgaW50ZXJuYWwgcHJvZ3JhbXMgYXJlIHN0b3JlZCBvbiB0aGUgQW10ZWwuCistICAgWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gcmVhZCBvciB3cml0ZSB0aGVzZSB2YWx1ZXMgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgY2hhciBhZGRyOyAgICAvKiA4Yml0IEFkZHJlc3MgT2Zmc2V0IDAtMjU1ICovCistCXVuc2lnbmVkIGNoYXIgbGVuOyAgICAgLyogTnVtYmVyIG9mIDE2Yml0IHdvcmRzIHRvIHJlYWQgMC0xMjggICovCistCXVuc2lnbmVkIHNob3J0IGJ1ZmZbRUVQUk9NX1JEX0JVRlNJWl07CistfSBFRVBST01fUkVBRDsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCB7CistCXVuc2lnbmVkIGNoYXIgbGVuOwkvKiB1c2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKi8KKy0JdW5zaWduZWQgY2hhciBhZGRyOyAgICAvKiAwLTEyOCAgKi8KKy0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fV1JfQlVGU0laXTsKKy19IEVFUFJPTV9XUklURTsKKy0KKy0vKiBUaGUgU1BJIGJ1cyBjb25uZWN0cyB0byBFRVBST01zIGxvY2F0ZWQgb24gc2xlZXZlcyBwbHVnZ2VkIGludG8KKy0gICB0aGUgaVBBUS4gIFlvdSBtYXkgd2FudCB0byByZWFkIHRoZXNlIHZhbHVlcyAgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgc2hvcnQgYWRkcjsgICAgLyogMTZiaXQgQWRkcmVzcyBPZmZzZXQgMC0xMjggKi8KKy0JdW5zaWduZWQgY2hhciBsZW47ICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgKi8KKy0JdW5zaWduZWQgY2hhciBidWZmW1NQSV9SRF9CVUZTSVpdOworLX0gU1BJX1JFQUQ7CistCistI2RlZmluZSBTUElfUkVBRF9TVEFUVVNfQllURSAgMHhmZmZmICAgLyogVXNlIHRoaXMgYWRkcmVzcyB0byByZWFkIHRoZSBzdGF0dXMgYnl0ZSAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV93cml0ZV9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgc2hvcnQgbGVuOwkvKiB1c2VkIG9ubHkgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgKi8KKy0JdW5zaWduZWQgc2hvcnQgYWRkcjsJLyogdGhpcyAxNmJpdCBhZGRyZXNzIGFjY2Vzc2VzIGEgc2luZ2xlIGJ5dGUgKi8KKy0JdW5zaWduZWQgY2hhciAgYnVmZltTUElfV1JfQlVGU0laXTsKKy19IFNQSV9XUklURTsKKy0KKy0KKy0vKiAtLS0tLS0tLSBlbmQgb2YgRUVQUk9NIGFuZCBTUEkgSW50ZXJmYWNlcyAtLS0tLS0tLS0tLS0tLS0qLworLQorLS8qIFVzZXIgc3BhY2Ugc3RydWN0dXJlcyBmb3IgSU9DVEwgY2FsbHMgKi8KKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uIHsKKy0JdW5zaWduZWQgY2hhciBob3N0X3ZlcnNpb25bOF07CS8qIGFzY2lpICJ4Lnl5IiAqLworLQl1bnNpZ25lZCBjaGFyIHBhY2tfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCistCXVuc2lnbmVkIGNoYXIgYm9vdF90eXBlOwkJLyogVE9ETyA/PyAqLworLX0gVkVSX1JFVDsKKy0KKy10eXBlZGVmIHN0cnVjdCBoMzYwMF90c19sZWQgeworLSAgICAgICAgdW5zaWduZWQgY2hhciBPZmZPbkJsaW5rOyAgICAgICAvKiAwPW9mZiAxPW9uIDI9QmxpbmsgKi8KKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgVG90YWxUaW1lOyAgICAgICAgLyogVW5pdHMgb2YgNSBzZWNvbmRzICovCistICAgICAgICB1bnNpZ25lZCBjaGFyIE9uVGltZTsgICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLworLSAgICAgICAgdW5zaWduZWQgY2hhciBPZmZUaW1lOyAgICAgICAgICAvKiB1bml0cyBvZiAxMDBtL3MgKi8KKy19IExFRF9JTjsKKy0KKy1lbnVtIGZsaXRlX21vZGUgeworLSAgICAgICAgRkxJVEVfTU9ERTEgPSAxLAorLQlGTElURV9BVVRPX01PREUgICA9IDEsICAgICAvKiBmb3IgcmVmZXJlbmNlIG9ubHkgKi8KKy0JRkxJVEVfTUFOVUFMX01PREUgPSAyLCAgICAgLyogVXNlIHRoaXMgbm9ybWFsbHk/ICovCistCUZMSVRFX0dFVF9MSUdIVF9TRU5TT1IgPSAzIC8qIFJldHVybnMgbGlnaHQgcmVhZGluZyBpbiAiYnJpZ2h0bmVzcyIgZmllbGQgKi8KKy19OworLWVudW0gZmxpdGVfcHdyIHsKKy0gICAgICAgIEZMSVRFX1BXUl9PRkYgPSAwLAorLSAgICAgICAgRkxJVEVfUFdSX09OICA9IDEKKy19OworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2ZsaXRlIHsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZTsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgcHdyOworLSAgICAgICAgdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOworLX0gRkxJVEVfSU47CistCistLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBVcGRhdGVkICJ1bml2ZXJzYWwiIHN0cnVjdHVyZXMgKioqKioqKioqKioqKioqKioqKi8KKy0KKy0vKiBTZXRzIGJhY2tsaWdodCBmb3IgYm90aCBIMzEwMCBhbmQgSDM2MDAgbW9kZWxzIC0gdGVjaG5pY2FsbHkgImZyb250bGlnaHQiIGZvciBIMzYwMCAqLworLXN0cnVjdCBoMzYwMF90c19iYWNrbGlnaHQgeworLQllbnVtIGZsaXRlX3B3ciBwb3dlcjsgICAgICAgICAgLyogMCA9IG9mZiwgMSA9IG9uICovCistCXVuc2lnbmVkIGNoYXIgIGJyaWdodG5lc3M7ICAgICAvKiAwIC0gMjU1ICAgICAgICAgKi8KKy19OworLQorLXN0cnVjdCBoMzYwMF90c19jb250cmFzdCB7ICAgICAgICAgICAgLyogT25seSB1c2VmdWwgb24gSDMxMDAgbW9kZWwgKi8KKy0JdW5zaWduZWQgY2hhciBjb250cmFzdDsgICAgICAgLyogMCAtIDI1NSAqLworLX07CistCistLyogSU9DVEwgY21kcyAgdXNlciBvciBrZXJuZWwgc3BhY2UgKi8KKy0KKy0vKiBVc2UgJ2YnIGFzIG1hZ2ljIG51bWJlciAqLworLSNkZWZpbmUgSU9DX0gzNjAwX1RTX01BR0lDICAnZicKKy0KKy0vKiBUT0RPOiBTb21lIG9mIHRoZXNlIElPV1IgdmFsdWVzIGFyZSBqdXN0IHBsYWluIHdyb25nICovCistI2RlZmluZSBHRVRfVkVSU0lPTgkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICAxLCBzdHJ1Y3QgaDM2MDBfdHNfdmVyc2lvbiApCistI2RlZmluZSBSRUFEX0VFUFJPTQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyLCBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3JlYWRfcmVxdWVzdCkKKy0jZGVmaW5lIFdSSVRFX0VFUFJPTQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCAzLCBzdHJ1Y3QgaDM2MDBfZWVwcm9tX3dyaXRlX3JlcXVlc3QpCistI2RlZmluZSBHRVRfVEhFUk1BTAkJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA0LCBzdHJ1Y3QgdGhlcm1fZGV2KQorLSNkZWZpbmUgTEVEX09OCQkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsICA1LCBzdHJ1Y3QgaDM2MDBfdHNfbGVkKQorLSNkZWZpbmUgR0VUX0JBVFRFUllfU1RBVFVTCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAgNiwgc3RydWN0IGgzNjAwX2JhdHRlcnkpCistI2RlZmluZSBGTElURV9PTgkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsICA3LCBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUpCistI2RlZmluZSBSRUFEX1NQSQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCA4LCBzdHJ1Y3QgaDM2MDBfc3BpX3JlYWRfcmVxdWVzdCkKKy0jZGVmaW5lIFdSSVRFX1NQSQkJX0lPV1IoSU9DX0gzNjAwX1RTX01BR0lDLCA5LCBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QpCistI2RlZmluZSBUU19HRVRfQ0FMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgMTAsIHN0cnVjdCBoMzYwMF90c19jYWxpYnJhdGlvbikKKy0jZGVmaW5lIFRTX1NFVF9DQUwJCV9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAxMSwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQorLQorLS8qIE5ldyBJT0NUTCBpbnRlcmZhY2VzIC0gZGVmaW5lZCB0byBiZSBtb3JlIHVzZXIgZnJpZW5kbHkgKi8KKy0jZGVmaW5lIFRTX0dFVF9CQUNLTElHSFQgICAgICAgIF9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyMCwgc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCkKKy0jZGVmaW5lIFRTX1NFVF9CQUNLTElHSFQgICAgICAgIF9JT1coSU9DX0gzNjAwX1RTX01BR0lDLCAyMCwgc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCkKKy0jZGVmaW5lIFRTX0dFVF9DT05UUkFTVCAgICAgICAgIF9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAyMSwgc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0KQorLSNkZWZpbmUgVFNfU0VUX0NPTlRSQVNUICAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCistCistI2VuZGlmCitJbmRleDogeHRzY2FsLTAuNi4zL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvTWFrZWZpbGUuYW0JMjAwNC0wNi0wMiAyMzowNzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0JMjAwNy0wNy0wMiAxMjo1MTowMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDExICsxLDggQEAKKy1saWJleGVjX1BST0dSQU1TID0geHRzY2FsLmJpbgorLWJpbl9TQ1JJUFRTID0geHRzY2FsCisrYmluX1BST0dSQU1TID0geHRzY2FsCisgCisteHRzY2FsX2Jpbl9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oIGgzNjAwX3RzLmgKKyt4dHNjYWxfU09VUkNFUyA9IG1haW4uYyBjYWxpYnJhdGUuYyBjYWxpYnJhdGUuaAorIAorLXh0c2NhbF9iaW5fTERBREQgPSBAWFRTQ0FMX0xJQlNACisreHRzY2FsX0xEQUREID0gQFhUU0NBTF9MSUJTQAorIAorIElOQ0xVREVTID0gQFhUU0NBTF9DRkxBR1NAIC1ETlJfUE9JTlRTPTUKKyAKKy1pbmNsdWRlIGdwZS1kaXN0LmFtCistCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ1MzNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApAQCAtMCwwICsxLDI3IEBACithZnRlciBnY2MgbGlua2luZyBoYXMgY2hhbmdlZCwgYWxsIHRoZSBsaWJyYXJpZXMgbXVzdCBiZSBleHBsaWNpdGVseSBzcGVjaWZpZWQgCitUaGlzIHBhdGNoIGF2b2lkcyB0aGlzIGxpbmtpbmcgZXJyb3I6CisKK3wgY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgLW1hcmNoPWk1ODYgLS1zeXNyb290PS9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1vIHh0c2NhbCBtYWluLm8gY2FsaWJyYXRlLm8gLWxYMTEgLWxYZnQgLWxYZXh0IC1sWGNhbGlicmF0ZV5NCit8IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2xpYmV4ZWMvaTU4Ni1wb2t5LWxpbnV4L2djYy9pNTg2LXBva3ktbGludXgvNC41LjEvbGQ6IF4/OiBpbnZhbGlkIERTTyBmb3Igc3ltYm9sIGBYUmVuZGVyQ2hhbmdlUGljdHVyZScgZGVmaW5pdGlvbl5NCit8IC9kaXNrMC9wb2t5YnVpbGQvYnVpbGQxL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXgvdXNyL2xpYi9saWJYcmVuZGVyLnNvLjE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEJhZCB2YWx1ZV5NCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzXk0KK3wgbWFrZTogKioqIFt4dHNjYWxdIEVycm9yIDEKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCisrKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYworQEAgLTksNyArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQorK1BLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUgeHJlbmRlcikKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKKyBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsXzAuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZGRmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsXzAuNi4zLmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gdXRpbGl0eSIKKworREVTQ1JJUFRJT04gPSAiQmFzaWMgdG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gdXRpbGl0eSIKKworSE9NRVBBR0UgPSAiaHR0cDovL2dwZS5saW51eHRvZ28ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5saW51eHRvZ28ub3JnIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTEwO21kNT04NzIxYmNiMDhhZTlmMjRlNWZlNGM4Mjk0MTg3M2M4NyIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQgbGlieGNhbGlicmF0ZSIKKworUFIgPSAicjEzIgorCitTUkNfVVJJID0gIiR7R1BFX01JUlJPUn0veHRzY2FsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vY2hhbmdlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFudXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8zMHhUc19DYWxpYnJhdGUuc2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YmNhYjgwYjQ3NGQ1NDU0NDc3ZDFjYTE2NmE2OGMzNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyN2I5ZGMyMjAzZGU5YjE3MDZjYTM5ZmE2Y2E4MGVjYWI4ODA3OTA5ZWM5MDFjNGEzNDViOGU0MTE3ODgwMGExIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vMzB4VHNfQ2FsaWJyYXRlLnNoICR7RH0ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h2aWRlby10ZXN0cy94dmlkZW8tdGVzdHNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h2aWRlby10ZXN0cy94dmlkZW8tdGVzdHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliM2M5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHZpZGVvLXRlc3RzL3h2aWRlby10ZXN0c19naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgWFZpZGVvIHRlc3QgYXBwbGljYXRpb24iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy90ZXN0LXh2aWRlby5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTZhZTNiNGMzYzJmZjllNTFkYmJjMzViYjIzN2FmYTAwIgorREVQRU5EUyA9ICJsaWJ4diIKKworU1JDUkVWID0gImY4ZjMyMGQwMjU0YzA5Y2U0ODNmYzFkOGVlOTllY2Y1YmM5NDA5NjUiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvdGVzdC14dmlkZW8iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4diByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZS9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZS9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzN2QxNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorYmxrdHJhY2U6IG9iZXkgTERGTEFHUworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKwordGhlIHBhdGNoIHdhcyBpbXBvcnRlZCBmcm9tIG1ldGEtbWVudG9yIGxheWVyIG9uIHlvY3RvcHJvamVjdCBnaXQgc2VydmVyCitodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9tZXRhLW1lbnRvciBhcyBvZiBjb21taXQgaWQKK2FlZDQ2MzQxNGUyZTJiZjhjYTQ0YmE1NGVlNTk3M2U3ZWQ1OTllNTcKKworU2lnbmVkLW9mZi1ieTogRmFoYWQgVXNtYW4gPGZhaGFkX3VzbWFuQG1lbnRvci5jb20+CistLS0KKyBNYWtlZmlsZSAgICAgICAgICB8ICAgMTEgKysrKysrLS0tLS0KKyBidHJlcGxheS9NYWtlZmlsZSB8ICAgIDMgKystCisgYnR0L01ha2VmaWxlICAgICAgfCAgICAzICsrLQorIDMgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworLS0tIGdpdC5vcmlnL01ha2VmaWxlCisrKysgZ2l0L01ha2VmaWxlCitAQCAtMSw1ICsxLDYgQEAKKyBDQwk9IGdjYworIENGTEFHUwk9IC1XYWxsIC1PMiAtZyAtVworK0xERkxBR1MgPQorIEFMTF9DRkxBR1MgPSAkKENGTEFHUykgLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKKyBQUk9HUwk9IGJsa3BhcnNlIGJsa3RyYWNlIHZlcmlmeV9ibGtwYXJzZSBibGtyYXd2ZXJpZnkgYmxraW9tb24KKyBMSUJTCT0gLWxwdGhyZWFkCitAQCAtMjMsMTkgKzI0LDE5IEBAIGJ0cmVwbGF5L2J0cmVwbGF5OgorIAkkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgJDwKKyAKKyBibGtwYXJzZTogYmxrcGFyc2UubyBibGtwYXJzZV9mbXQubyByYnRyZWUubyBhY3RfbWFzay5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJsa3RyYWNlOiBibGt0cmFjZS5vIGFjdF9tYXNrLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgJChMREZMQUdTKQorIAorIHZlcmlmeV9ibGtwYXJzZTogdmVyaWZ5X2Jsa3BhcnNlLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYmxrcmF3dmVyaWZ5OiBibGtyYXd2ZXJpZnkubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBibGtpb21vbjogYmxraW9tb24ubyByYnRyZWUubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAtbHJ0CisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpIC1scnQgJChMREZMQUdTKQorIAorICQoUFJPR1MpOiB8IGRlcGVuZAorIAorLS0tIGdpdC5vcmlnL2J0cmVwbGF5L01ha2VmaWxlCisrKysgZ2l0L2J0cmVwbGF5L01ha2VmaWxlCitAQCAtNyw2ICs3LDcgQEAKKyAKKyBDQwk9IGdjYworIENGTEFHUwk9IC1XYWxsIC1XIC1PMiAtZworK0xERkxBR1MgPQorIElOQ1MJPSAtSS4gLUkuLiAtSS4uL2J0dAorIE9DRkxBR1MJPSAtVUNPVU5UX0lPUyAtVURFQlVHIC1ETkRFQlVHCisgWENGTEFHUwk9IC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0CitAQCAtMzIsMTAgKzMzLDEwIEBAIGNsZWFuOiBkb2NzY2xlYW4KKwkkKENDKSAkKENGTEFHUykgLWMgLW8gJCoubyAkPAorCisgYnRyZWNvcmQ6IGJ0cmVjb3JkLm8KKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJ0cmVwbGF5OiBidHJlcGxheS5vCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgZGVwZW5kOgorIAlAJChDQykgLU1NICQoQ0ZMQUdTKSAqLmMgMT4gLmRlcGVuZAorLS0tIGdpdC5vcmlnL2J0dC9NYWtlZmlsZQorKysrIGdpdC9idHQvTWFrZWZpbGUKK0BAIC03LDYgKzcsNyBAQAorIAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLVcgLU8yIC1nCisrTERGTEFHUyA9CisgSU5DUwk9IC1JLiAtSS4uCisgWENGTEFHUwk9IC1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Cisgb3ZlcnJpZGUgQ0ZMQUdTICs9ICQoSU5DUykgJChYQ0ZMQUdTKQorQEAgLTM4LDcgKzM5LDcgQEAgY2xlYW46IGRvY3NjbGVhbgorIAkkKENDKSAkKENGTEFHUykgLWMgLW8gJCoubyAkPAorIAorIGJ0dDogJChPQkpTKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgJChMREZMQUdTKQorIAorIGlmbmVxICgkKHdpbGRjYXJkIC5kZXBlbmQpLCkKKyBpbmNsdWRlIC5kZXBlbmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2VfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwYmU0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2VfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiR2VuZXJhdGVzIHRyYWNlcyBvZiBJL08gdHJhZmZpYyBvbiBibG9jayBkZXZpY2VzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitERVBFTkRTID0gImxpYmFpbyIKKworU1JDUkVWID0gIjQzZmM4NzBjZTA0ZTk2M2RlZjQ1ZGZjMGQxZWQ0ZWEyMWVmMTBkNGIiCisKK1BWID0gIjEuMS4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwuZGsvYmxrdHJhY2UuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ0NDPSR7Q0N9JyBcCisgICAgJ0NGTEFHUz0ke0NGTEFHU30nIFwKKyAgICAnTERGTEFHUz0ke0xERkxBR1N9JyBcCisiCisKKyMgVGhlcmUgYXJlIGEgZmV3IHBhcmFsbGVsIGlzc3VlczoKKyMgMSkgLi4vcmJ0cmVlLm86IGVycm9yIGFkZGluZyBzeW1ib2xzOiBJbnZhbGlkIG9wZXJhdGlvbgorIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgTWFrZWZpbGU6NDI6IHJlY2lwZSBmb3IgdGFyZ2V0ICdidHQnIGZhaWxlZAorIyAyKSBnaXQvYmxraW9tb24uYzoyMTY6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJiX2luc2VydF9jb2xvcicKKyMgY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisjIE1ha2VmaWxlOjI3OiByZWNpcGUgZm9yIHRhcmdldCAnYmxrcGFyc2UnIGZhaWxlZAorIyAzKSBsZDogcmJ0cmVlLm86IGludmFsaWQgc3RyaW5nIG9mZnNldCAxMjggPj0gMTI1IGZvciBzZWN0aW9uIGAuc3RydGFiJworIyA0KSBidHJlcGxheS5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgYnRyZXBsYXkvYnRyZXBsYXkuYzo0NzoxODogZmF0YWwgZXJyb3I6IGxpc3QuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBBUkNIPSIke0FSQ0h9IiBwcmVmaXg9JHtwcmVmaXh9IFwKKwkJbWFuZGlyPSR7bWFuZGlyfSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbGludXhfMS43LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM4NDFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LWxpbnV4XzEuNy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGNyeXB0b2Rldl8ke1BWfS5pbmMKKworU1VNTUFSWSA9ICJBIC9kZXYvY3J5cHRvIGRldmljZSBkcml2ZXIgaGVhZGVyIGZpbGUiCisKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCisjIEp1c3QgaW5zdGFsbCBjcnlwdG9kZXYuaCB3aGljaCBpcyB0aGUgb25seSBoZWFkZXIgZmlsZSBuZWVkZWQgdG8gYmUgZXhwb3J0ZWQKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtRCAke1N9L2NyeXB0by9jcnlwdG9kZXYuaCAke0R9JHtpbmNsdWRlZGlyfS9jcnlwdG8vY3J5cHRvZGV2LmgKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1tb2R1bGVfMS43LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkNTJlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1tb2R1bGVfMS43LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciBrZXJuZWwgbW9kdWxlIgorCitpbmhlcml0IG1vZHVsZQorCisjIEhlYWRlciBmaWxlIHByb3ZpZGVkIGJ5IGEgc2VwYXJhdGUgcGFja2FnZQorREVQRU5EUyArPSAiY3J5cHRvZGV2LWxpbnV4IgorCitTUkNfVVJJICs9ICIgXAorZmlsZTovLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaCBcCitmaWxlOi8vMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoIFwKKyIKKworRVhUUkFfT0VNQUtFPSdLRVJORUxfRElSPSIke1NUQUdJTkdfS0VSTkVMX0RJUn0iIFBSRUZJWD0iJHtEfSInCisKK1JDT05GTElDVFNfJHtQTn0gPSAib2NmLWxpbnV4IgorUlJFUExBQ0VTXyR7UE59ID0gIm9jZi1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi10ZXN0c18xLjcuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzQxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtdGVzdHNfMS43LmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgdGVzdCBzdWl0ZSBmb3IgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciIKKworREVQRU5EUyArPSAib3BlbnNzbCIKKworU1JDX1VSSSArPSAiIFwKK2ZpbGU6Ly8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2ggXAorZmlsZTovLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaCBcCisiCisKK0VYVFJBX09FTUFLRT0nS0VSTkVMX0RJUj0iJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IiBQUkVGSVg9IiR7RH0iJworCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgdGVzdHByb2dzCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsX3Rlc3RzCit9CisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiaW5kaXJ9L3Rlc3RzX2NyeXB0b2Rldi8uZGVidWciCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vdGVzdHNfY3J5cHRvZGV2LyoiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXZfMS43LmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYTY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXZfMS43LmluYwpAQCAtMCwwICsxLDEzIEBACitIT01FUEFHRSA9ICJodHRwOi8vY3J5cHRvZGV2LWxpbnV4Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuZ25hLm9yZy9jcnlwdG9kZXYtbGludXgvY3J5cHRvZGV2LWxpbnV4LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBiNjNiMzQ4MWNmMmM5MDM4NmIzNWYwNTc0ODFkMzZiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQxODgwNTMzYjUzZGU0ZDdiM2YwNTRlMjMwZjU3Njk4OGRhZmI4ZWVkN2JlZjVlYmNmNjQyMmJiMmUzYTNiMjUiCisKK1MgPSAiJHtXT1JLRElSfS9jcnlwdG9kZXYtbGludXgtJHtQVn0iCisKK0NMRUFOQlJPS0VOID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLUFkZC10aGUtY29tcGlsZS1hbmQtaW5zdGFsbC1ydWxlcy1mb3ItY3J5cHRvZGV2LXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwMjk4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaApAQCAtMCwwICsxLDY2IEBACitGcm9tIDE5ODBhOGY0Nzc5YTk1NWU3MzI4NWU3YTBkODY1NDliNjliZWE1YzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdSBab25nY2h1biA8YjQwNTI3QGZyZWVzY2FsZS5jb20+CitEYXRlOiBTdW4sIDI4IEFwciAyMDEzIDE0OjM5OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCB0aGUgY29tcGlsZSBhbmQgaW5zdGFsbCBydWxlcyBmb3IgY3J5cHRvZGV2IHRlc3RzIGZvbGRlcgorCitUaGlzIGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGNyeXB0b2RldiB0ZXN0cyBmb2xkZXIgdG8gcm9vdGZzCisKK1NpZ25lZC1vZmYtYnk6IFl1IFpvbmdjaHVuIDxiNDA1MjdAZnJlZXNjYWxlLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIE1ha2VmaWxlICAgICAgIHwgICAgNiArKysrKysKKyB0ZXN0cy9NYWtlZmlsZSB8ICAgIDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAzMWM0YjNmLi4yZWNmMmE5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMzQsNiArMzQsOSBAQCBtb2R1bGVzX2luc3RhbGw6CisgCUBlY2hvICJJbnN0YWxsaW5nIGNyeXB0b2Rldi5oIGluICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8gLi4uIgorIAlAaW5zdGFsbCAtRCBjcnlwdG8vY3J5cHRvZGV2LmggJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0by9jcnlwdG9kZXYuaAorIAorK2luc3RhbGxfdGVzdHM6CisrCW1ha2UgLUMgdGVzdHMgaW5zdGFsbCBERVNURElSPSQoUFJFRklYKQorKworIGNsZWFuOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBjbGVhbgorIAlybSAtZiAkKGhvc3Rwcm9ncykgKn4KK0BAIC00Miw2ICs0NSw5IEBAIGNsZWFuOgorIGNoZWNrOgorIAlDRkxBR1M9JChDUllQVE9ERVZfQ0ZMQUdTKSBLRVJORUxfRElSPSQoS0VSTkVMX0RJUikgbWFrZSAtQyB0ZXN0cyBjaGVjaworIAorK3Rlc3Rwcm9nczoKKysJS0VSTkVMX0RJUj0kKEtFUk5FTF9ESVIpIG1ha2UgLUMgdGVzdHMgdGVzdHByb2dzCisrCisgQ1BPUFRTID0KKyBpZm5lcSAoJHtTSE9XX1RZUEVTfSwpCisgQ1BPUFRTICs9IC0tc2hvdy10eXBlcworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlIGIvdGVzdHMvTWFrZWZpbGUKK2luZGV4IGM5ZjA0ZTguLmNkMjAyYWYgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZQorKysrIGIvdGVzdHMvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSwxMiBAQCBleGFtcGxlLWFzeW5jLWhtYWMtb2JqcyA6PSBhc3luY19obWFjLm8KKyBleGFtcGxlLWFzeW5jLXNwZWVkLW9ianMgOj0gYXN5bmNfc3BlZWQubworIGV4YW1wbGUtaGFzaGNyeXB0LXNwZWVkLW9ianMgOj0gaGFzaGNyeXB0X3NwZWVkLmMKKyAKKytpbnN0YWxsOgorKwlpbnN0YWxsIC1kICAkKERFU1RESVIpL3Vzci9iaW4vdGVzdHNfY3J5cHRvZGV2CisrCWZvciBiaW4gaW4gJChob3N0cHJvZ3MpOyBkbyBcCisrCQlpbnN0YWxsIC1tIDc1NSAkJHtiaW59ICQoREVTVERJUikvdXNyL2Jpbi90ZXN0c19jcnlwdG9kZXYvOyBcCisrCWRvbmUKKysKKyBjaGVjazogJChob3N0cHJvZ3MpCisgCS4vY2lwaGVyCisgCS4vaG1hYworQEAgLTI4LDYgKzM0LDggQEAgY2hlY2s6ICQoaG9zdHByb2dzKQorIAkuL2NpcGhlci1nY20KKyAJLi9jaXBoZXItYWVhZAorIAorK3Rlc3Rwcm9nczogJChob3N0cHJvZ3MpCisrCisgY2xlYW46CisgCXJtIC1mICoubyAqfiAkKGhvc3Rwcm9ncykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtRGlzYWJsZS1pbnN0YWxsaW5nLWhlYWRlci1maWxlLXByb3ZpZGVkLWJ5LWFub3RoZXItcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTgwZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gOGE4ODRmNTViZDE1MjdiYWE4MmZhYjY4YzE4NmJhNTQ2MjczODYwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CitEYXRlOiBTdW4sIDYgQXByIDIwMTQgMTk6NTE6MzkgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSBpbnN0YWxsaW5nIGhlYWRlciBmaWxlIHByb3ZpZGVkIGJ5IGFub3RoZXIgcGFja2FnZQorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgWyBPRSBzcGVjaWZpYyBdCistLS0KKyBNYWtlZmlsZSB8IDIgLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGQ2NmVmMjYuLjhlOTdjNmEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMyw4ICsyMyw2IEBAIGluc3RhbGw6IG1vZHVsZXNfaW5zdGFsbAorIAorIG1vZHVsZXNfaW5zdGFsbDoKKyAJbWFrZSAtQyAkKEtFUk5FTF9ESVIpIFNVQkRJUlM9YHB3ZGAgbW9kdWxlc19pbnN0YWxsCistCUBlY2hvICJJbnN0YWxsaW5nIGNyeXB0b2Rldi5oIGluICQoUFJFRklYKS91c3IvaW5jbHVkZS9jcnlwdG8gLi4uIgorLQlAaW5zdGFsbCAtRCBjcnlwdG8vY3J5cHRvZGV2LmggJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0by9jcnlwdG9kZXYuaAorIAorIGNsZWFuOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBjbGVhbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjODk3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtaW9jdGwuYy1GaXgtYnVpbGQtb24tMy4xOS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDdkNzExMjQ5OTEwMzBmOTk5NjVlNmU2YWFlZDQyMTExNWYxODVhZGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSaWNhcmRvIFJpYmFsZGEgRGVsZ2FkbyA8cmljYXJkby5yaWJhbGRhQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgOSBGZWIgMjAxNSAxMzo1MTo1NiArMDEwMAorU3ViamVjdDogW1BBVENIXSBpb2N0bC5jOiBGaXggYnVpbGQgb24gMy4xOQorCitnZXRfdW51c2VkX2ZkKCkgTUFDUk8gaGFzIGJlZW4gcmVtb3ZlZCBvbiBrZXJuZWwgMy4xOS4gUmVwbGFjZSBieSB0aGUKK2FjdHVhbCBvdXRwdXQgb2YgdGhlIG1hY3JvLgorCitTaWduZWQtb2ZmLWJ5OiBSaWNhcmRvIFJpYmFsZGEgRGVsZ2FkbyA8cmljYXJkby5yaWJhbGRhQGdtYWlsLmNvbT4KKy0tLQorIGlvY3RsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pb2N0bC5jIGIvaW9jdGwuYworaW5kZXggZjI2Y2Y5My4uY2Y4Y2MxNyAxMDA2NDQKKy0tLSBhL2lvY3RsLmMKKysrKyBiL2lvY3RsLmMKK0BAIC01MjksNyArNTI5LDcgQEAgc3RhdGljIGludAorIGNsb25lZmQoc3RydWN0IGZpbGUgKmZpbHApCisgeworIAlpbnQgcmV0OworLQlyZXQgPSBnZXRfdW51c2VkX2ZkKCk7CisrCXJldCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoMCk7CisgCWlmIChyZXQgPj0gMCkgeworIAkJCWdldF9maWxlKGZpbHApOworIAkJCWZkX2luc3RhbGwocmV0LCBmaWxwKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YWI4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAyLUZpeC10ZXN0cy1NYWtlZmlsZS11c2FnZS1vZi1MRExJQlMtdnMuLUxERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA0N2ZmMWViOWJiNGY4NzJjMWQ3MzFiOTNkMzM0ZWU1ODY1YmYzNDM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KK0RhdGU6IFN1biwgNiBBcHIgMjAxNCAyMjoxNjozMCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBGaXggdGVzdHMgTWFrZWZpbGUgdXNhZ2Ugb2YgTERMSUJTIHZzLiBMREZMQUdTCisKK0xpYnJhcmllcyBtdXN0IGNvbWUgYWZ0ZXIgb2JqZWN0cywgYXMgbGluayBvcmRlciBtYXR0ZXJzLCBlc3BlY2lhbGx5Cit3aGVuIHVzaW5nIGxpbmtlciBmbGFncyBsaWtlIC1XbCwtLWFzLW5lZWRlZC4KKworU2lnbmVkLW9mZi1ieTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyB0ZXN0cy9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlIGIvdGVzdHMvTWFrZWZpbGUKK2luZGV4IGNkMjAyYWYuLjY3YzNjODMgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZQorKysrIGIvdGVzdHMvTWFrZWZpbGUKK0BAIC0zOSw1ICszOSw1IEBAIHRlc3Rwcm9nczogJChob3N0cHJvZ3MpCisgY2xlYW46CisgCXJtIC1mICoubyAqfiAkKGhvc3Rwcm9ncykKKyAKKy0ke2NvbXBfcHJvZ3N9OiBMREZMQUdTICs9IC1sc3NsIC1sY3J5cHRvCisrJHtjb21wX3Byb2dzfTogTERMSUJTICs9IC1sc3NsIC1sY3J5cHRvCisgJHtjb21wX3Byb2dzfTogJTogJS5vIG9wZW5zc2xfd3JhcHBlci5vCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDA5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiRGV2aWNlIFRyZWUgQ29tcGlsZXIiCitERVNDUklQVElPTiA9ICJUaGUgRGV2aWNlIFRyZWUgQ29tcGlsZXIgaXMgYSB0b29sIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgT3Blbi1GaXJtd2FyZS1saWtlIGRldmljZSB0cmVlIHVzZWQgYnkgUG93ZXJQQyBrZXJuZWxzLiIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKK0xJQ0VOU0UgPSAiR1BMdjIgfCBCU0QiCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2R0Yy9kdGMuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL21ha2VfaW5zdGFsbC5wYXRjaCBcCisJICAiCisKK0VYVFJBX09FTUFLRT0nUFJFRklYPSIke3ByZWZpeH0iIExJQkRJUj0iJHtsaWJkaXJ9IiBERVNURElSPSIke0R9IicKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vY29udmVydC1kdHN2MCAke2JpbmRpcn0vZnRkdW1wICR7YmluZGlyfS9kdGRpZmYiCisKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gImJhc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMvbWFrZV9pbnN0YWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTIwNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjL21ha2VfaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnaXQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZQkyMDExLTExLTAyIDE0OjUyOjE3LjI0MzEwNDc3OSAtMDcwMAorKysrIGdpdC9NYWtlZmlsZQkyMDExLTExLTAyIDE1OjA2OjAxLjU1NTEwNDk4MiAtMDcwMAorQEAgLTE2MSw4ICsxNjEsOCBAQAorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAkKEJJTikgJChTQ1JJUFRTKSAkKERFU1RESVIpJChCSU5ESVIpCisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoTElCRElSKQorLQkkKElOU1RBTEwpICQoTElCRkRUX2xpYikgJChERVNURElSKSQoTElCRElSKQorLQlsbiAtc2YgJChub3RkaXIgJChMSUJGRFRfbGliKSkgJChERVNURElSKSQoTElCRElSKS8kKExJQkZEVF9zb25hbWUpCisrCSQoSU5TVEFMTCkgJChMSUJGRFRfbGliKSAkKERFU1RESVIpJChMSUJESVIpLyQoTElCRkRUX3NvbmFtZSkKKysJbG4gLXNmICQoTElCRkRUX3NvbmFtZSkgJChERVNURElSKSQoTElCRElSKS8kKG5vdGRpciAkKExJQkZEVF9saWIpKQorIAlsbiAtc2YgJChMSUJGRFRfc29uYW1lKSAkKERFU1RESVIpJChMSUJESVIpL2xpYmZkdC4kKFNIQVJFRExJQl9FWFQpCisgCSQoSU5TVEFMTCkgLW0gNjQ0ICQoTElCRkRUX2FyY2hpdmUpICQoREVTVERJUikkKExJQkRJUikKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChJTkNMVURFRElSKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0NjE0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Y19naXQuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBkdGMuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkgICAgZmlsZTovL2xpYmZkdC9saWJmZHQuaDtiZWdpbmxpbmU9MztlbmRsaW5lPTUyO21kNT1mYjM2MDk2MzE1MWY4ZWMyZDZjMDZiMDU1YmNiYjY4YyIKKworU1JDUkVWID0gIjMwMmZjYTlmNGMyODNlMTk5NGNmMGE1YTljZTFjZjQzY2ExNWU2ZDIiCitQViA9ICIxLjQuMStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1MzA5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2Vybi10b29scy9rZXJuLXRvb2xzLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgWW9jdG8gUHJvamVjdCBzdHlsZSBicmFuY2hlZCBrZXJuZWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2dpdC90b29scy9rZ2l0O2JlZ2lubGluZT01O2VuZGxpbmU9OTttZDU9ZDhkMWQ3MjlhNzBjZDVmNTI5NzJmODg4NGI4MDc0M2QiCisKK0RFUEVORFMgPSAiZ2l0LW5hdGl2ZSIKKworU1JDUkVWID0gImJkMTQ0ZDQzY2E1YjFlYWY5ZTcyN2JjZWQ0Y2UzYjYxYjY0MjI5N2MiCitQUiA9ICJyMTIiCitQViA9ICIwLjIrZ2l0JHtTUkNQVn0iCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLXRvb2xzLmdpdCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsgCisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWNkICR7U30vZ2l0CisJbWFrZSBERVNURElSPSR7RH0ke2JpbmRpcn0gaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk3YTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJLZXhlYyBmYXN0IHJlYm9vdCB0b29scyIKK0RFU0NSSVBUSU9OID0gIktleGVjIGlzIGEgZmFzdCByZWJvb3QgZmVhdHVyZSB0aGF0IGxldHMgeW91IHJlYm9vdCB0byBhIG5ldyBMaW51eCBrZXJuZWwiCitBVVRIT1IgPSAiRXJpYyBCaWVkZXJtYW4iCitIT01FUEFHRSA9ICJodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2tleGVjLyIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhNWJlZDJmNjBkMzU3NjE4Y2ExNjFhZDUzOWY3YzBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tleGVjL2tleGVjLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9YWYxMGY2YWU0YTg3MTU5NjVlNjQ4YWE2ODdhZDNlMDkiCitERVBFTkRTID0gInpsaWIgeHoiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMtJHtQVn0udGFyLmd6IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjQuKnxpLjg2Lip8YXJtLip8YWFyY2g2NC4qfHBvd2VycGMuKnxtaXBzLiopLShsaW51eHxmcmVlYnNkLiopJworCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBSZW1vdmUgdGhlICcqLmQnIGZpbGUgdG8gbWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBmb3IgZGVwIGluIGBmaW5kICR7Qn0gLXR5cGUgZiAtbmFtZSAnKi5kJ2A7IGRvCisgICAgICAgIGRlcF9ub19kPSJgZWNobyAkZGVwIHwgc2VkICdzIy5kJCMjJ2AiCisgICAgICAgICMgUmVtb3ZlIGZpbGUuZCB3aGVuIHRoZXJlIGlzIGEgZmlsZS5vCisgICAgICAgIGlmIFsgLWYgIiRkZXBfbm9fZC5vIiBdOyB0aGVuCisgICAgICAgICAgICBybSAtZiAkZGVwCisgICAgICAgIGZpCisgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDA3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBhMTEzNWIzMTcwOTYzYmE5NTZmMjM2NGMxMjgzODY0YzM1NTQxMjk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwNzo1OTo0NSArMDAwMAorU3ViamVjdDogW1BBVENIXSBwdXJnYXRvcnk6IFBhc3MgLXIgZGlyZWN0bHkgdG8gbGlua2VyCisKK1RoaXMgaGVscHMgY29tcGlsaW5nIHdpdGggY2xhbmcgc2luY2UgLXIgaXMgbm90IGEga25vd24gb3B0aW9uIGZvciBjbGFuZword2hlcmUgYXMgZ2NjIGtub3dzIGhvdyB0byBkZWFsIHdpdGggaXQgYW5kIHBhc3NlcyBpdCBkb3duIHRvIGxpbmtlcgordW5maWx0ZXJlZAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHB1cmdhdG9yeS9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3B1cmdhdG9yeS9NYWtlZmlsZSBiL3B1cmdhdG9yeS9NYWtlZmlsZQoraW5kZXggMmI1YzA2MS4uYjI1MTM1MyAxMDA2NDQKKy0tLSBhL3B1cmdhdG9yeS9NYWtlZmlsZQorKysrIGIvcHVyZ2F0b3J5L01ha2VmaWxlCitAQCAtNjEsNyArNjEsNyBAQCAkKFBVUkdBVE9SWSk6IENQUEZMQUdTPSQoJChBUkNIKV9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTKSBcCisgCQkJLUkkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZSkKKyAkKFBVUkdBVE9SWSk6IExERkxBR1M9JCgkKEFSQ0gpX1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MpXAorIAkJCS1XbCwtLW5vLXVuZGVmaW5lZCAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiBcCistCQkJLW5vZGVmYXVsdGxpYnMgLWUgcHVyZ2F0b3J5X3N0YXJ0IC1yIFwKKysJCQktbm9kZWZhdWx0bGlicyAtZSBwdXJnYXRvcnlfc3RhcnQgLVdsLC1yIFwKKyAJCQktV2wsLU1hcD0kKFBVUkdBVE9SWV9NQVApCisgCisgJChQVVJHQVRPUlkpOiAkKFBVUkdBVE9SWV9PQkpTKQorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk3ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy8wMDAyLXBvd2VycGMtY2hhbmdlLXRoZS1tZW1vcnktc2l6ZS1saW1pdC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGIxOWI2OGVhYjU2N2FhNTM0Y2Y4ZGVjNzlmZTE4ZTNkYzBlMTQwNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBRdWFueWFuZyBXYW5nIDxxdWFueWFuZy53YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE2IEp1biAyMDE1IDEyOjU5OjU3ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGM6IGNoYW5nZSB0aGUgbWVtb3J5IHNpemUgbGltaXQKKworV2hlbiBydW4gImtleGVjIiBpbiBwb3dlcnBjIGJvYXJkLCB0aGUga2V4ZWMgaGFzIGEgbGltaXQgdGhhdAordGhlIGtlcm5lbCB0ZXh0IGFuZCBic3Mgc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiAyNE0uIEJ1dCBub3cKK3NvbWUga2VybmVsIHNpemUgZXhjZWVkIHRoZSBsaW1pdC4gU28gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGxpbWl0LAorZWxzZSB3aWxsIGdldCB0aGUgZXJyb3IgbG9nIGFzIGJlbG93OgorCitteV9sb2FkOjY2OTogZG8KK0NvdWxkIG5vdCBmaW5kIGEgZnJlZSBhcmVhIG9mIG1lbW9yeSBvZiAweDEyNDAwIGJ5dGVzLi4uCitDb3VsZCBub3QgZmluZCBhIGZyZWUgYXJlYSBvZiBtZW1vcnkgb2YgMHgxMzAwMCBieXRlcy4uLgorbG9jYXRlX2hvbGUgZmFpbGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBRdWFueWFuZyBXYW5nIDxxdWFueWFuZy53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBrZXhlYy9hcmNoL3BwYy9rZXhlYy1wcGMuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9rZXhlYy1wcGMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCitAQCAtNDIsNyArNDIsNyBAQCB2b2lkIGRvbF9wcGNfdXNhZ2Uodm9pZCk7CisgICogRHVyaW5nIGluaXRhbCBzZXR1cCB0aGUga2VybmVsIGRvZXMgbm90IG1hcCB0aGUgd2hvbGUgbWVtb3J5IGJ1dCBhIHBhcnQgb2YKKyAgKiBpdC4gT24gQm9vay1FIHRoYXQgaXMgNjRNaUIsIDYwMSAyNE1pQiBvciAyNTZNaUIgKGlmIHBvc3NpYmxlKS4KKyAgKi8KKy0jZGVmaW5lIEtFUk5FTF9BQ0NFU1NfVE9QICgyNCAqIDEwMjQgKiAxMDI0KQorKyNkZWZpbmUgS0VSTkVMX0FDQ0VTU19UT1AgKDM2ICogMTAyNCAqIDEwMjQpCisgCisgLyogYm9vdCBibG9jayB2ZXJzaW9uIDE3IGFzIGRlZmluZWQgYnkgdGhlIGxpbnV4IGtlcm5lbCAqLworIHN0cnVjdCBib290YmxvY2sgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy1hYXJjaDY0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy1hYXJjaDY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwM2Y1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLWFhcmNoNjQucGF0Y2gKQEAgLTAsMCArMSw4MDEgQEAKK0Zyb206IEdlb2ZmIExldmFuZCA8Z2VvZmZAaW5mcmFkZWFkLm9yZz4KK0RhdGU6IE1vbiwgMTUgSnVsIDIwMTMgMjM6MzI6MzYgKzAwMDAgKC0wNzAwKQorU3ViamVjdDogQWRkIGFybTY0IHN1cHBvcnQKK1gtR2l0LVVybDogaHR0cHM6Ly9naXQubGluYXJvLm9yZy9naXR3ZWI/cD1wZW9wbGUlMkZnZW9mZiUyRmtleGVjLXRvb2xzLmdpdDthPWNvbW1pdGRpZmZfcGxhaW47aD1mYmY1YWM2YzJjNzBlYzBmNmRhMmI5ZmY1NjNlNTczOTk5NzUyYzAxCisKK0FkZCBhcm02NCBzdXBwb3J0CisKK1NpZ25lZC1vZmYtYnk6IEdlb2ZmIExldmFuZCA8Z2VvZmZAaW5mcmFkZWFkLm9yZz4KKworR2V0IHBhdGNoIGZyb206CitodHRwczovL2ZlZG9yYXBlb3BsZS5vcmcvfmhydy9hYXJjaDY0L2Zvci1mZWRvcmEva2V4ZWMtYWFyY2g2NC5wYXRjaAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKworLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyAKKyBrZXhlYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIGtleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMTMgKworIGtleGVjL2FyY2gvYXJtNjQvY3Jhc2hkdW1wLWFybTY0LmMgICAgICB8ICAzMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBrZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmggfCAgIDI2ICsrCisga2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jICAgICAgICAgIHwgIDE3NyArKysrKysrKysrKysrKysrKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmggICAgICAgICAgfCAgIDIwICsrCisga2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1lbGYtYXJtNjQuYyAgICAgIHwgIDExNCArKysrKysrKysrKworIGtleGVjL2tleGVjLXN5c2NhbGwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDkgCisga2V4ZWMva2V4ZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiAKKyBwdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZSAgICAgICAgICAgfCAgICA3IAorIDExIGZpbGVzIGNoYW5nZWQsIDY3NSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKK0BAIC0zNiw2ICszNiw5IEBAIGNhc2UgJHRhcmdldF9jcHUgaW4KKyAJCUFSQ0g9InBwYzY0IgorIAkJU1VCQVJDSD0iTEUiCisgCQk7OworKwlhYXJjaDY0KiApCisrCQlBUkNIPSJhcm02NCIKKysJCTs7CisgCWFybSogKQorIAkJQVJDSD0iYXJtIgorIAkJOzsKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9NYWtlZmlsZQorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9NYWtlZmlsZQorQEAgLTcxLDYgKzcxLDcgQEAgS0VYRUNfU1JDUwkJCSs9ICQoJChBUkNIKV9GUzJEVCkKKyAKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FscGhhL01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9hcm0vTWFrZWZpbGUKKytpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9pMzg2L01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9pYTY0L01ha2VmaWxlCisgaW5jbHVkZSAkKHNyY2Rpcikva2V4ZWMvYXJjaC9tNjhrL01ha2VmaWxlCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZQorQEAgLTAsMCArMSwxMyBAQAorKworK2FybTY0X0tFWEVDX1NSQ1MgKz0gXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMgXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jIFwKKysJa2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworKworK2FybTY0X0FSQ0hfUkVVU0VfSU5JVFJEID0KKythcm02NF9BRERfU0VHTUVOVCA9CisrYXJtNjRfVklSVF9UT19QSFlTID0KKysKKytkaXN0ICs9ICQoYXJtNjRfS0VYRUNfU1JDUykgXAorKwlrZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlIFwKKysJa2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5oCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvY3Jhc2hkdW1wLWFybTY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworQEAgLTAsMCArMSwzMDUgQEAKKysvKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uICh2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UpLgorKyAqLworKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy5oIgorKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1lbGYuaCIKKysjaW5jbHVkZSAiLi4vLi4vY3Jhc2hkdW1wLmgiCisrCisraW50IGlzX2NyYXNoa2VybmVsX21lbV9yZXNlcnZlZCh2b2lkKQorK3sKKysJcmV0dXJuIDA7CisrfQorKworKyNpZiAwCisrLyoKKysgKiBVc2VkIHRvIHNhdmUgdmFyaW91cyBtZW1vcnkgcmFuZ2VzL3JlZ2lvbnMgbmVlZGVkIGZvciB0aGUgY2FwdHVyZWQKKysgKiBrZXJuZWwgdG8gYm9vdC4gKGxpbWUgbWVtbWFwPSBvcHRpb24gaW4gb3RoZXIgYXJjaHMpCisrICovCisrc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgY3Jhc2hfbWVtb3J5X3Jhbmdlc1tDUkFTSF9NQVhfTUVNT1JZX1JBTkdFU107Cisrc3RydWN0IG1lbW9yeV9yYW5nZXMgdXNhYmxlbWVtX3JnbnMgPSB7CisrICAgIC5zaXplID0gMCwKKysgICAgLnJhbmdlcyA9IGNyYXNoX21lbW9yeV9yYW5nZXMsCisrfTsKKysKKysvKiBtZW1vcnkgcmFuZ2UgcmVzZXJ2ZWQgZm9yIGNyYXNoa2VybmVsICovCisrc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgY3Jhc2hfcmVzZXJ2ZWRfbWVtOworKworK3N0YXRpYyBzdHJ1Y3QgY3Jhc2hfZWxmX2luZm8gZWxmX2luZm8gPSB7CisrCS5jbGFzcwkJPSBFTEZDTEFTUzMyLAorKwkuZGF0YQkJPSBFTEZEQVRBMkxTQiwKKysJLm1hY2hpbmUJPSBFTV9BUk0sCisrCS5wYWdlX29mZnNldAk9IFBBR0VfT0ZGU0VULAorK307CisrCisrdW5zaWduZWQgbG9uZyBwaHlzX29mZnNldDsKKysKKysvKioKKysgKiBjcmFzaF9yYW5nZV9jYWxsYmFjaygpIC0gY2FsbGJhY2sgY2FsbGVkIGZvciBlYWNoIGlvbWVtIHJlZ2lvbgorKyAqIEBkYXRhOiBub3QgdXNlZAorKyAqIEBucjogbm90IHVzZWQKKysgKiBAc3RyOiBuYW1lIG9mIHRoZSBtZW1vcnkgcmVnaW9uCisrICogQGJhc2U6IHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKiBAbGVuZ3RoOiBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIG1lbW9yeSByZWdpb24gZm91bmQgaW4gL3Byb2MvaW9tZW0uIEl0CisrICogbG9jYXRlcyBzeXN0ZW0gUkFNIGFuZCBjcmFzaGtlcm5lbCByZXNlcnZlZCBtZW1vcnkgYW5kIHBsYWNlcyB0aGVzZSB0bworKyAqIHZhcmlhYmxlczogQGNyYXNoX21lbW9yeV9yYW5nZXMgYW5kIEBjcmFzaF9yZXNlcnZlZF9tZW0uIE51bWJlciBvZiBtZW1vcnkKKysgKiByZWdpb25zIGlzIHBsYWNlZCBpbiBAY3Jhc2hfbWVtb3J5X25yX3Jhbmdlcy4KKysgKi8KKytzdGF0aWMgaW50IGNyYXNoX3JhbmdlX2NhbGxiYWNrKHZvaWQgKlVOVVNFRChkYXRhKSwgaW50IFVOVVNFRChuciksCisrCQkJCWNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBiYXNlLAorKwkJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCkKKyt7CisrCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKnJhbmdlOworKworKwlpZiAodXNhYmxlbWVtX3JnbnMuc2l6ZSA+PSBDUkFTSF9NQVhfTUVNT1JZX1JBTkdFUykKKysJCXJldHVybiAxOworKworKwlyYW5nZSA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIHVzYWJsZW1lbV9yZ25zLnNpemU7CisrCisrCWlmIChzdHJuY21wKHN0ciwgIlN5c3RlbSBSQU1cbiIsIDExKSA9PSAwKSB7CisrCQlyYW5nZS0+c3RhcnQgPSBiYXNlOworKwkJcmFuZ2UtPmVuZCA9IGJhc2UgKyBsZW5ndGggLSAxOworKwkJcmFuZ2UtPnR5cGUgPSBSQU5HRV9SQU07CisrCQl1c2FibGVtZW1fcmducy5zaXplKys7CisrCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJDcmFzaCBrZXJuZWxcbiIsIDEzKSA9PSAwKSB7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQgPSBiYXNlOworKwkJY3Jhc2hfcmVzZXJ2ZWRfbWVtLmVuZCA9IGJhc2UgKyBsZW5ndGggLSAxOworKwkJY3Jhc2hfcmVzZXJ2ZWRfbWVtLnR5cGUgPSBSQU5HRV9SQU07CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworKy8qKgorKyAqIGNyYXNoX2V4Y2x1ZGVfcmFuZ2UoKSAtIGV4Y2x1ZGVzIG1lbW9yeSByZWdpb24gcmVzZXJ2ZWQgZm9yIGNyYXNoa2VybmVsCisrICoKKysgKiBGdW5jdGlvbiBsb2NhdGVzIHdoZXJlIGNyYXNoa2VybmVsIHJlc2VydmVkIG1lbW9yeSBpcyBhbmQgcmVtb3ZlcyB0aGF0IHJlZ2lvbgorKyAqIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9ucy4KKysgKi8KKytzdGF0aWMgdm9pZCBjcmFzaF9leGNsdWRlX3JhbmdlKHZvaWQpCisreworKwljb25zdCBzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyYW5nZSA9ICZjcmFzaF9yZXNlcnZlZF9tZW07CisrCWludCBpOworKworKwlmb3IgKGkgPSAwOyBpIDwgdXNhYmxlbWVtX3JnbnMuc2l6ZTsgaSsrKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgaTsKKysKKysJCS8qCisrCQkgKiBXZSBhc3N1bWUgdGhhdCBjcmFzaCBhcmVhIGlzIGZ1bGx5IGNvbnRhaW5lZCBpbgorKwkJICogc29tZSBsYXJnZXIgbWVtb3J5IGFyZWEuCisrCQkgKi8KKysJCWlmIChyLT5zdGFydCA8PSByYW5nZS0+c3RhcnQgJiYgci0+ZW5kID49IHJhbmdlLT5lbmQpIHsKKysJCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpuZXc7CisrCQkJLyoKKysJCQkgKiBMZXQncyBzcGxpdCB0aGlzIGFyZWEgaW50byAyIHNtYWxsZXIgb25lcyBhbmQKKysJCQkgKiByZW1vdmUgZXhjbHVkZWQgcmFuZ2UgZnJvbSBiZXR3ZWVuLiBGaXJzdCBjcmVhdGUKKysJCQkgKiBuZXcgZW50cnkgZm9yIHRoZSByZW1haW5pbmcgYXJlYS4KKysJCQkgKi8KKysJCQluZXcgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyB1c2FibGVtZW1fcmducy5zaXplOworKwkJCW5ldy0+c3RhcnQgPSByYW5nZS0+ZW5kICsgMTsKKysJCQluZXctPmVuZCA9IHItPmVuZDsKKysJCQl1c2FibGVtZW1fcmducy5zaXplKys7CisrCQkJLyoKKysJCQkgKiBOZXh0IHVwZGF0ZSB0aGlzIGFyZWEgdG8gZW5kIGJlZm9yZSBleGNsdWRlZCByYW5nZS4KKysJCQkgKi8KKysJCQlyLT5lbmQgPSByYW5nZS0+c3RhcnQgLSAxOworKwkJCWJyZWFrOworKwkJfQorKwl9CisrfQorKworK3N0YXRpYyBpbnQgcmFuZ2VfY21wKGNvbnN0IHZvaWQgKmExLCBjb25zdCB2b2lkICphMikKKyt7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIxID0gYTE7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIyID0gYTI7CisrCisrCWlmIChyMS0+c3RhcnQgPiByMi0+c3RhcnQpCisrCQlyZXR1cm4gMTsKKysJaWYgKHIxLT5zdGFydCA8IHIyLT5zdGFydCkKKysJCXJldHVybiAtMTsKKysKKysJcmV0dXJuIDA7CisrfQorKworKy8qKgorKyAqIGNyYXNoX2dldF9tZW1vcnlfcmFuZ2VzKCkgLSByZWFkIHN5c3RlbSBwaHlzaWNhbCBtZW1vcnkKKysgKgorKyAqIEZ1bmN0aW9uIHJlYWRzIHRocm91Z2ggc3lzdGVtIHBoeXNpY2FsIG1lbW9yeSBhbmQgc3RvcmVzIGZvdW5kIG1lbW9yeSByZWdpb25zCisrICogaW4gQGNyYXNoX21lbW9yeV9yYW5nZXMuIE51bWJlciBvZiBtZW1vcnkgcmVnaW9ucyBmb3VuZCBpcyBwbGFjZWQgaW4KKysgKiBAY3Jhc2hfbWVtb3J5X25yX3Jhbmdlcy4gUmVnaW9ucyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4KKysgKgorKyAqIFJldHVybnMgJTAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAlLTEgb3RoZXJ3aXNlIChlcnJubyBpcyBzZXQpLgorKyAqLworK3N0YXRpYyBpbnQgY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXModm9pZCkKKyt7CisrCS8qCisrCSAqIEZpcnN0IHJlYWQgYWxsIG1lbW9yeSByZWdpb25zIHRoYXQgY2FuIGJlIGNvbnNpZGVyZWQgYXMKKysJICogc3lzdGVtIG1lbW9yeSBpbmNsdWRpbmcgdGhlIGNyYXNoIGFyZWEuCisrCSAqLworKwlrZXhlY19pb21lbV9mb3JfZWFjaF9saW5lKE5VTEwsIGNyYXNoX3JhbmdlX2NhbGxiYWNrLCBOVUxMKTsKKysKKysJaWYgKHVzYWJsZW1lbV9yZ25zLnNpemUgPCAxKSB7CisrCQllcnJubyA9IEVJTlZBTDsKKysJCXJldHVybiAtMTsKKysJfQorKworKwkvKgorKwkgKiBFeGNsdWRlIG1lbW9yeSByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwgKHRoaXMgbWF5IHJlc3VsdCBhIHNwbGl0IG1lbW9yeQorKwkgKiByZWdpb24pLgorKwkgKi8KKysJY3Jhc2hfZXhjbHVkZV9yYW5nZSgpOworKworKwkvKgorKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHJlZ2lvbnMgYXJlIHNvcnRlZC4KKysJICovCisrCXFzb3J0KHVzYWJsZW1lbV9yZ25zLnJhbmdlcywgdXNhYmxlbWVtX3JnbnMuc2l6ZSwKKysJICAgICAgc2l6ZW9mKCp1c2FibGVtZW1fcmducy5yYW5nZXMpLCByYW5nZV9jbXApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY21kbGluZV9hZGRfZWxmY29yZWhkcigpIC0gYWRkcyBlbGZjb3JlaGRyPSB0byBAY21kbGluZQorKyAqIEBjbWRsaW5lOiBidWZmZXIgd2hlcmUgcGFyYW1ldGVyIGlzIHBsYWNlZAorKyAqIEBlbGZjb3JlaGRyOiBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZmNvcmVoZHIKKysgKgorKyAqIEZ1bmN0aW9uIGFwcGVuZHMgJ2VsZmNvcmVoZHI9c3RhcnQnIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgbGluZSBnaXZlbiBpbgorKyAqIEBjbWRsaW5lLiBOb3RlIHRoYXQgQGNtZGxpbmUgbXVzdCBiZSBhdCBsZWFzdCAlQ09NTUFORF9MSU5FX1NJWkUgYnl0ZXMgbG9uZworKyAqIChpbmNsdW5kaW5nICVOVUwpLgorKyAqLworK3N0YXRpYyB2b2lkIGNtZGxpbmVfYWRkX2VsZmNvcmVoZHIoY2hhciAqY21kbGluZSwgdW5zaWduZWQgbG9uZyBlbGZjb3JlaGRyKQorK3sKKysJY2hhciBidWZbQ09NTUFORF9MSU5FX1NJWkVdOworKwlpbnQgYnVmbGVuOworKworKwlidWZsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgZWxmY29yZWhkcj0lI2x4IiwKKysJCQkgIGNtZGxpbmUsIGVsZmNvcmVoZHIpOworKwlpZiAoYnVmbGVuIDwgMCkKKysJCWRpZSgiRmFpbGVkIHRvIGNvbnN0cnVjdCBlbGZjb3JlaGRyPSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyXG4iKTsKKysJaWYgKGJ1ZmxlbiA+PSBzaXplb2YoYnVmKSkKKysJCWRpZSgiQ29tbWFuZCBsaW5lIG92ZXJmbG93XG4iKTsKKysKKysJKHZvaWQpIHN0cm5jcHkoY21kbGluZSwgYnVmLCBDT01NQU5EX0xJTkVfU0laRSk7CisrCWNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9ICdcMCc7CisrfQorKworKy8qKgorKyAqIGNtZGxpbmVfYWRkX21lbSgpIC0gYWRkcyBtZW09IHBhcmFtZXRlciB0byBrZXJuZWwgY29tbWFuZCBsaW5lCisrICogQGNtZGxpbmU6IGJ1ZmZlciB3aGVyZSBwYXJhbWV0ZXIgaXMgcGxhY2VkCisrICogQHNpemU6IHNpemUgb2YgdGhlIGtlcm5lbCByZXNlcnZlZCBtZW1vcnkgKGluIGJ5dGVzKQorKyAqCisrICogVGhpcyBmdW5jdGlvbiBhcHBlbmRzICdtZW09c2l6ZScgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGluCisrICogQGNtZGxpbmUuIE5vdGUgdGhhdCBAY21kbGluZSBtdXN0IGJlIGF0IGxlYXN0ICVDT01NQU5EX0xJTkVfU0laRSBieXRlcyBsb25nCisrICogKGluY2x1ZGluZyAlTlVMKS4KKysgKi8KKytzdGF0aWMgdm9pZCBjbWRsaW5lX2FkZF9tZW0oY2hhciAqY21kbGluZSwgdW5zaWduZWQgbG9uZyBzaXplKQorK3sKKysJY2hhciBidWZbQ09NTUFORF9MSU5FX1NJWkVdOworKwlpbnQgYnVmbGVuOworKworKwlidWZsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgbWVtPSVsZEsiLCBjbWRsaW5lLCBzaXplID4+IDEwKTsKKysJaWYgKGJ1ZmxlbiA8IDApCisrCQlkaWUoIkZhaWxlZCB0byBjb25zdHJ1Y3QgbWVtPSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyXG4iKTsKKysJaWYgKGJ1ZmxlbiA+PSBzaXplb2YoYnVmKSkKKysJCWRpZSgiQ29tbWFuZCBsaW5lIG92ZXJmbG93XG4iKTsKKysKKysJKHZvaWQpIHN0cm5jcHkoY21kbGluZSwgYnVmLCBDT01NQU5EX0xJTkVfU0laRSk7CisrCWNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9ICdcMCc7CisrfQorKworK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcmFuZ2Vfc2l6ZShjb25zdCBzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyKQorK3sKKysJcmV0dXJuIHItPmVuZCAtIHItPnN0YXJ0ICsgMTsKKyt9CisrCisrc3RhdGljIHZvaWQgZHVtcF9tZW1vcnlfcmFuZ2VzKHZvaWQpCisreworKwlpbnQgaTsKKysKKysJaWYgKCFrZXhlY19kZWJ1ZykKKysJCXJldHVybjsKKysKKysJZGJncHJpbnRmKCJjcmFzaGtlcm5lbDogWyUjbGx4IC0gJSNsbHhdICglbGRNKVxuIiwKKysJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0LCBjcmFzaF9yZXNlcnZlZF9tZW0uZW5kLAorKwkJICAodW5zaWduZWQgbG9uZylyYW5nZV9zaXplKCZjcmFzaF9yZXNlcnZlZF9tZW0pID4+IDIwKTsKKysKKysJZm9yIChpID0gMDsgaSA8IHVzYWJsZW1lbV9yZ25zLnNpemU7IGkrKykgeworKwkJc3RydWN0IG1lbW9yeV9yYW5nZSAqciA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIGk7CisrCQlkYmdwcmludGYoIm1lbW9yeSByYW5nZTogWyUjbGx4IC0gJSNsbHhdICglbGRNKVxuIiwKKysJCQkgIHItPnN0YXJ0LCByLT5lbmQsICh1bnNpZ25lZCBsb25nKXJhbmdlX3NpemUocikgPj4gMjApOworKwl9CisrfQorKworKy8qKgorKyAqIGxvYWRfY3Jhc2hkdW1wX3NlZ21lbnRzKCkgLSBsb2FkcyBhZGRpdGlvbmFsIHNlZ21lbnRzIG5lZWRlZCBmb3Iga2R1bXAKKysgKiBAaW5mbzoga2V4ZWMgaW5mbyBzdHJ1Y3R1cmUKKysgKiBAbW9kX2NtZGxpbmU6IGtlcm5lbCBjb21tYW5kIGxpbmUKKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gbG9hZHMgYWRkaXRpb25hbCBzZWdtZW50cyB3aGljaCBhcmUgbmVlZGVkIGZvciB0aGUgZHVtcCBjYXB0dXJlCisrICoga2VybmVsLiBJdCBhbHNvIHVwZGF0ZXMga2VybmVsIGNvbW1hbmQgbGluZSBwYXNzZWQgaW4gQG1vZF9jbWRsaW5lIHRvIGhhdmUKKysgKiByaWdodCBwYXJhbWV0ZXJzIGZvciB0aGUgZHVtcCBjYXB0dXJlIGtlcm5lbC4KKysgKgorKyAqIFJldHVybiAlMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kICUtMSBpbiBjYXNlIG9mIGVycm9yLgorKyAqLworK2ludCBsb2FkX2NyYXNoZHVtcF9zZWdtZW50cyhzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgY2hhciAqbW9kX2NtZGxpbmUpCisreworKwl1bnNpZ25lZCBsb25nIGVsZmNvcmVoZHI7CisrCXVuc2lnbmVkIGxvbmcgYnVmc3o7CisrCXZvaWQgKmJ1ZjsKKysJaW50IGVycjsKKysKKysJLyoKKysJICogRmlyc3QgZmV0Y2ggYWxsIHRoZSBtZW1vcnkgKFJBTSkgcmFuZ2VzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHBhc3MgdG8KKysJICogdGhlIGNyYXNoZHVtcCBrZXJuZWwgZHVyaW5nIHBhbmljLgorKwkgKi8KKysJZXJyID0gY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXMoKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCS8qCisrCSAqIE5vdyB0aGF0IHdlIGhhdmUgbWVtb3J5IHJlZ2lvbnMgc29ydGVkLCB3ZSBjYW4gdXNlIGZpcnN0IG1lbW9yeQorKwkgKiByZWdpb24gYXMgUEhZU19PRkZTRVQuCisrCSAqLworKwlwaHlzX29mZnNldCA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcy0+c3RhcnQ7CisrCWRiZ3ByaW50ZigicGh5c19vZmZzZXQ6ICUjbHhcbiIsIHBoeXNfb2Zmc2V0KTsKKysKKysJZXJyID0gY3Jhc2hfY3JlYXRlX2VsZjMyX2hlYWRlcnMoaW5mbywgJmVsZl9pbmZvLAorKwkJCQkJIHVzYWJsZW1lbV9yZ25zLnJhbmdlcywKKysJCQkJCSB1c2FibGVtZW1fcmducy5zaXplLCAmYnVmLCAmYnVmc3osCisrCQkJCQkgRUxGX0NPUkVfSEVBREVSX0FMSUdOKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCS8qCisrCSAqIFdlIGFsbG9jYXRlIEVMRiBjb3JlIGhlYWRlciBmcm9tIHRoZSBlbmQgb2YgdGhlIG1lbW9yeSBhcmVhIHJlc2VydmVkCisrCSAqIGZvciB0aGUgY3Jhc2hrZXJuZWwuIFdlIGFsaWduIHRoZSBoZWFkZXIgdG8gU0VDVElPTl9TSVpFICh3aGljaCBpcworKwkgKiAxTUIpIHNvIHRoYXQgYXZhaWxhYmxlIG1lbW9yeSBwYXNzZWQgaW4ga2VybmVsIGNvbW1hbmQgbGluZSB3aWxsIGJlCisrCSAqIGFsaWduZWQgdG8gMU1CLiBUaGlzIGlzIGJlY2F1c2Uga2VybmVsIGNyZWF0ZV9tYXBwaW5nKCkgd2FudHMgbWVtb3J5CisrCSAqIHJlZ2lvbnMgdG8gYmUgYWxpZ25lZCB0byBTRUNUSU9OX1NJWkUuCisrCSAqLworKwllbGZjb3JlaGRyID0gYWRkX2J1ZmZlcl9waHlzX3ZpcnQoaW5mbywgYnVmLCBidWZzeiwgYnVmc3osIDEgPDwgMjAsCisrCQkJCQkgIGNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCwKKysJCQkJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLmVuZCwgLTEsIDApOworKworKwlkYmdwcmludGYoImVsZmNvcmVoZHI6ICUjbHhcbiIsIGVsZmNvcmVoZHIpOworKwljbWRsaW5lX2FkZF9lbGZjb3JlaGRyKG1vZF9jbWRsaW5lLCBlbGZjb3JlaGRyKTsKKysKKysJLyoKKysJICogQWRkICdtZW09c2l6ZScgcGFyYW1ldGVyIHRvIGR1bXAgY2FwdHVyZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBUaGlzCisrCSAqIHByZXZlbnRzIHRoZSBkdW1wIGNhcHR1cmUga2VybmVsIGZyb20gdXNpbmcgYW55IG90aGVyIG1lbW9yeSByZWdpb25zCisrCSAqIHdoaWNoIGJlbG9uZyB0byB0aGUgcHJpbWFyeSBrZXJuZWwuCisrCSAqLworKwljbWRsaW5lX2FkZF9tZW0obW9kX2NtZGxpbmUsIGVsZmNvcmVoZHIgLSBjcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQpOworKworKwlkdW1wX21lbW9yeV9yYW5nZXMoKTsKKysJZGJncHJpbnRmKCJrZXJuZWwgY29tbWFuZCBsaW5lOiBcIiVzXCJcbiIsIG1vZF9jbWRsaW5lKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworKyNlbmRpZgorKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9pbmNsdWRlL2FyY2gvb3B0aW9ucy5oCitAQCAtMCwwICsxLDI2IEBACisrI2lmbmRlZiBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSAorKyNkZWZpbmUgS0VYRUNfQVJDSF9BUk02NF9PUFRJT05TX0gKKysKKysvLyNkZWZpbmUgT1BUX0FSQ0hfTUFYCSgoT1BUX01BWCkrMCkKKysKKysjZGVmaW5lIE9QVF9BUFBFTkQJKChPUFRfTUFYKSswKQorKyNkZWZpbmUgT1BUX1JBTURJU0sJKChPUFRfTUFYKSsxKQorKyNkZWZpbmUgT1BUX0RUQgkJKChPUFRfTUFYKSsyKQorKworKyNkZWZpbmUgT1BUX0FSQ0hfTUFYCSgoT1BUX01BWCkrMykKKysKKysKKysjZGVmaW5lIEtFWEVDX0FSQ0hfT1BUSU9OUyBcCisrCUtFWEVDX09QVElPTlMgXAorKwl7ICJhcHBlbmQiLCAgICAgICAxLCBOVUxMLCBPUFRfQVBQRU5EIH0sIFwKKysJeyAiY29tbWFuZC1saW5lIiwgMSwgTlVMTCwgT1BUX0FQUEVORCB9LCBcCisrCXsgImR0YiIsICAgICAgICAgIDEsIE5VTEwsIE9QVF9EVEIgfSwgXAorKwl7ICJpbml0cmQiLCAgICAgICAxLCBOVUxMLCBPUFRfUkFNRElTSyB9LCBcCisrCXsgInJhbWRpc2siLCAgICAgIDEsIE5VTEwsIE9QVF9SQU1ESVNLIH0sIFwKKysKKysjZGVmaW5lIEtFWEVDX0FSQ0hfT1BUX1NUUiBLRVhFQ19PUFRfU1RSIC8qIE9ubHkgYWNjZXB0IGxvbmcgYXJjaCBvcHRpb25zLiAqLworKworKyNkZWZpbmUgS0VYRUNfQUxMX09QVElPTlMgS0VYRUNfQVJDSF9PUFRJT05TCisrI2RlZmluZSBLRVhFQ19BTExfT1BUX1NUUiBLRVhFQ19BUkNIX09QVF9TVFIKKysKKysjZW5kaWYgLyogS0VYRUNfQVJDSF9BUk02NF9PUFRJT05TX0ggKi8KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYworQEAgLTAsMCArMSwxNzcgQEAKKysvKgorKyAqIEFSTTY0IGtleGVjIHN1cHBvcnQuCisrICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvLyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy5oIgorKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1zeXNjYWxsLmgiCisrI2luY2x1ZGUgImtleGVjLWFybTY0LmgiCisrCisrCisrdm9pZCBhcmNoX3VzYWdlKHZvaWQpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKysJcHJpbnRmKAorKyIgICAgIC0tYXBwZW5kPVNUUklORyAgICAgICBTZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gU1RSSU5HLlxuIgorKyIgICAgIC0tY29tbWFuZC1saW5lPVNUUklORyBTZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gU1RSSU5HLlxuIgorKyIgICAgIC0tZHRiPUZJTEUgICAgICAgICAgICBVc2UgRklMRSBhcyB0aGUgZGV2aWNlIHRyZWUgYmxvYi5cbiIKKysiICAgICAtLWluaXRyZD1GSUxFICAgICAgICAgVXNlIEZJTEUgYXMgdGhlIGtlcm5lbCBpbml0aWFsIHJhbWRpc2suXG4iCisrIiAgICAgLS1yYW1kaXNrPUZJTEUgICAgICAgIFVzZSBGSUxFIGFzIHRoZSBrZXJuZWwgaW5pdGlhbCByYW1kaXNrLlxuIik7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKytpbnQgYXJjaF9wcm9jZXNzX29wdGlvbnMoaW50IFVOVVNFRChhcmdjKSwgY2hhciAqKlVOVVNFRChhcmd2KSkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrY29uc3Qgc3RydWN0IGFyY2hfbWFwX2VudHJ5IGFyY2hlc1tdID0geworKwl7ICJhYXJjaDY0IiwgS0VYRUNfQVJDSF9BUk02NCB9LAorKwl7IE5VTEwsIDAgfSwKKyt9OworKworK3ZvaWQgYXJjaF91cGRhdGVfcHVyZ2F0b3J5KHN0cnVjdCBrZXhlY19pbmZvICpVTlVTRUQoaW5mbykpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CisrCisrdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModW5zaWduZWQgbG9uZyBhZGRyKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogJTAxNmx4IC0+ICUwMTZseFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBhZGRyLAorKwkJYWRkciArIDB4MDgwMDAwMDAwVUwpOworKwlyZXR1cm4gYWRkciArIDB4MDgwMDAwMDAwVUw7CisrfQorKworK3ZvaWQgYWRkX3NlZ21lbnQoc3RydWN0IGtleGVjX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnN6LAorKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemVfdCBtZW1zeikKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlhZGRfc2VnbWVudF9waHlzX3ZpcnQoaW5mbywgYnVmLCBidWZzeiwgYmFzZSwgbWVtc3osIDEpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CisrCisrc3RhdGljIGludCBnZXRfbWVtb3J5X3Jhbmdlc18xKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKipyYW5nZSwgaW50ICpyYW5nZXMsCisrCQkJdW5zaWduZWQgbG9uZyBrZXhlY19mbGFncykKKyt7CisrCXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIG1lbW9yeV9yYW5nZVtLRVhFQ19TRUdNRU5UX01BWF07CisrCWNvbnN0IGNoYXIgKmlvbWVtOworKwlpbnQgcmFuZ2VfY291bnQgPSAwOworKwljaGFyIGxpbmVbTUFYX0xJTkVdOworKwlGSUxFICpmcDsKKysKKysJaW9tZW0gPSBwcm9jX2lvbWVtKCk7CisrCWZwID0gZm9wZW4oaW9tZW0sICJyIik7CisrCisrCWlmICghZnApIHsKKysJCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IG9wZW4gJXM6ICVzXG4iLAorKwkJCWlvbWVtLCBzdHJlcnJvcihlcnJubykpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCWRiZ3ByaW50ZigibWVtb3J5IHJhbmdlczpcbiIpOworKworKwl3aGlsZShmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSAhPSAwKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlIHI7CisrCQljaGFyICpzdHI7CisrCQlpbnQgY29uc3VtZWQ7CisrCisrCQlpZiAocmFuZ2VfY291bnQgPj0gS0VYRUNfU0VHTUVOVF9NQVgpCisrCQkJYnJlYWs7CisrCisrCQlpZiAoc3NjYW5mKGxpbmUsICIlTHgtJUx4IDogJW4iLCAmci5zdGFydCwgJnIuZW5kLCAmY29uc3VtZWQpCisrCQkJIT0gMikKKysJCQljb250aW51ZTsKKysKKysJCXN0ciA9IGxpbmUgKyBjb25zdW1lZDsKKysJCXIuZW5kKys7CisrCisrCQlpZiAobWVtY21wKHN0ciwgIlN5c3RlbSBSQU1cbiIsIDExKSkgeworKwkJCWRiZ3ByaW50ZigiIFNraXA6ICUwMTZMeCAtICUwMTZMeCA6ICVzIiwgci5zdGFydCwgci5lbmQsCisrCQkJCXN0cik7CisrCQkJY29udGludWU7CisrCQl9CisrCisrCQlyLnR5cGUgPSBSQU5HRV9SQU07CisrCQltZW1vcnlfcmFuZ2VbcmFuZ2VfY291bnRdID0gcjsKKysJCXJhbmdlX2NvdW50Kys7CisrCisrCQlkYmdwcmludGYoIiBBZGQ6ICAlMDE2THggLSAlMDE2THggOiAlcyIsIHIuc3RhcnQsIHIuZW5kLCBzdHIpOworKwl9CisrCisrCWZjbG9zZShmcCk7CisrCSpyYW5nZSA9IG1lbW9yeV9yYW5nZTsKKysJKnJhbmdlcyA9IHJhbmdlX2NvdW50OworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBnZXRfbWVtb3J5X3Jhbmdlc18yKHN0cnVjdCBtZW1vcnlfcmFuZ2UgKipyYW5nZSwgaW50ICpyYW5nZXMsCisrCQkgICAgICB1bnNpZ25lZCBsb25nIFVOVVNFRChrZXhlY19mbGFncykpCisreworKwlzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBtZW1vcnlfcmFuZ2VbMl07CisrCisrCW1lbW9yeV9yYW5nZVswXS5zdGFydCA9IDB4MDgwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMF0uZW5kICAgPSAweDEwMDAwMDAwMDsKKysJbWVtb3J5X3JhbmdlWzBdLnR5cGUgPSBSQU5HRV9SQU07CisrCisrCW1lbW9yeV9yYW5nZVsxXS5zdGFydCA9IDB4OTAwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMV0uZW5kICAgPSAweDg4MDAwMDAwMDsKKysJbWVtb3J5X3JhbmdlWzFdLnR5cGUgPSBSQU5HRV9SQU07CisrCisrCSpyYW5nZSA9IG1lbW9yeV9yYW5nZTsKKysJKnJhbmdlcyA9IHNpemVvZihtZW1vcnlfcmFuZ2UpIC8gc2l6ZW9mKG1lbW9yeV9yYW5nZVswXSk7CisrCisrCXJldHVybiAwOworK30KKysKKytpbnQgZ2V0X21lbW9yeV9yYW5nZXMoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCQl1bnNpZ25lZCBsb25nIGtleGVjX2ZsYWdzKQorK3sKKysJLyogRklYTUU6IFNob3VsZCBnZXQgdGhpcyBpbmZvIGZyb20gZGV2aWNlIHRyZWUuICovCisrCQorKwlyZXR1cm4gZ2V0X21lbW9yeV9yYW5nZXNfMShyYW5nZSwgcmFuZ2VzLCBrZXhlY19mbGFncyk7CisrfQorKworK3N0cnVjdCBmaWxlX3R5cGUgZmlsZV90eXBlW10gPSB7CisrCXsgImVsZi1hcm02NCIsIGVsZl9hcm02NF9wcm9iZSwgZWxmX2FybTY0X2xvYWQsIGVsZl9hcm02NF91c2FnZSB9LAorK307CisrCisraW50IGZpbGVfdHlwZXMgPSBzaXplb2YoZmlsZV90eXBlKSAvIHNpemVvZihmaWxlX3R5cGVbMF0pOworKworK2ludCBhcmNoX2NvbXBhdF90cmFtcG9saW5lKHN0cnVjdCBrZXhlY19pbmZvICppbmZvKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKyt2b2lkIGFyY2hfcmV1c2VfaW5pdHJkKHZvaWQpCisreworK30KKysKKytpbnQgbWFjaGluZV92ZXJpZnlfZWxmX3JlbChzdHJ1Y3QgbWVtX2VoZHIgKmVoZHIpCisreworKwkodm9pZCllaGRyOworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgbWFjaGluZV9hcHBseV9lbGZfcmVsKHN0cnVjdCBtZW1fZWhkciAqZWhkciwgdW5zaWduZWQgbG9uZyByX3R5cGUsCisrCXZvaWQgKmxvY2F0aW9uLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCisreworKwkodm9pZCllaGRyOworKwkodm9pZClyX3R5cGU7CisrCSh2b2lkKWxvY2F0aW9uOworKwkodm9pZClhZGRyZXNzOworKwkodm9pZCl2YWx1ZTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5oCitAQCAtMCwwICsxLDIwIEBACisrLyoKKysgKiBBUk02NCBrZXhlYyBzdXBwb3J0LgorKyAqLworKworKyNpZiAhZGVmaW5lZChLRVhFQ19BUk02NF9IKQorKyNkZWZpbmUgS0VYRUNfQVJNNjRfSAorKworKy8qICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPiBGSVhNRTogdGhpcyBpcyBicm9rZW4gKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrCisrI2RlZmluZSBLRVhFQ19TRUdNRU5UX01BWCAxNiAvKiBGSVhNRTogdGhpcyBzaG91bGQgY29tZSBmcm9tIDxsaW51eC9rZXhlYy5oPiAqLworKworK2ludCBlbGZfYXJtNjRfcHJvYmUoY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4pOworK2ludCBlbGZfYXJtNjRfbG9hZChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmJ1Ziwgb2ZmX3QgbGVuLAorKwlzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbyk7Cisrdm9pZCBlbGZfYXJtNjRfdXNhZ2Uodm9pZCk7CisrCisrI2VuZGlmCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1lbGYtYXJtNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jCitAQCAtMCwwICsxLDExNCBAQAorKy8qCisrICogQVJNNjQga2V4ZWMgc3VwcG9ydC4KKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPGVsZi5oPgorKyNpbmNsdWRlIDxnZXRvcHQuaD4KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMtc3lzY2FsbC5oIgorKworKyNpbmNsdWRlICJrZXhlYy1hcm02NC5oIgorKyNpbmNsdWRlICJhcmNoL29wdGlvbnMuaCIKKysKKysjaWYgIWRlZmluZWQoRU1fQUFSQ0g2NCkKKysjIGRlZmluZSBFTV9BQVJDSDY0IDE4MworKyNlbmRpZgorKworK2ludCBlbGZfYXJtNjRfcHJvYmUoY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4pCisreworKwlpbnQgcmVzdWx0OworKwlzdHJ1Y3QgbWVtX2VoZHIgZWhkcjsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCQorKwlyZXN1bHQgPSBidWlsZF9lbGZfZXhlY19pbmZvKGJ1ZiwgbGVuLCAmZWhkciwgMCk7CisrCisrCWlmIChyZXN1bHQgPCAwKSB7CisrCQlkYmdwcmludGYoIk5vdCBhbiBFTEYgZXhlY3V0YWJsZVxuIik7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlpZiAoZWhkci5lX21hY2hpbmUgIT0gRU1fQUFSQ0g2NCkgeworKwkJZGJncHJpbnRmKCJOb3QgYW4gQUFSQ0g2NCBleGVjdXRhYmxlXG4iKTsKKysJCXJlc3VsdCA9IC0xOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJcmVzdWx0ID0gMDsKKysKKytvdXQ6CisrCWZyZWVfZWxmX2luZm8oJmVoZHIpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisraW50IGVsZl9hcm02NF9sb2FkKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4sCisrCQkJc3RydWN0IGtleGVjX2luZm8gKmluZm8pCisreworKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisrCQlLRVhFQ19BUkNIX09QVElPTlMKKysJCXsgMCB9CisrCX07CisrCXN0YXRpYyBjb25zdCBjaGFyIHNob3J0X29wdGlvbnNbXSA9IEtFWEVDX09QVF9TVFIgIiI7CisrCWNvbnN0IGNoYXIgKmNvbW1hbmRfbGluZSA9IE5VTEw7CisrCXVuc2lnbmVkIGludCBjb21tYW5kX2xpbmVfbGVuID0gMDsKKysJY29uc3QgY2hhciAqcmFtZGlzayA9IE5VTEw7CisrCWNvbnN0IGNoYXIgKmR0YiA9IE5VTEw7CisrCWludCBvcHQ7CisrCXN0cnVjdCBtZW1fZWhkciBlaGRyOworKwlpbnQgcmVzdWx0OworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKysJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBzaG9ydF9vcHRpb25zLCBvcHRpb25zLCAwKSkKKysJCSE9IC0xKSB7CisrCQlzd2l0Y2ggKG9wdCkgeworKwkJZGVmYXVsdDoKKysJCQlpZiAob3B0IDwgT1BUX01BWCkgLyogSWdub3JlIGNvcmUgb3B0aW9ucyAqLworKwkJCQlicmVhazsKKysJCWNhc2UgT1BUX0FQUEVORDoKKysJCQljb21tYW5kX2xpbmUgPSBvcHRhcmc7CisrCQkJY29tbWFuZF9saW5lX2xlbiA9IHN0cmxlbihjb21tYW5kX2xpbmUpICsgMTsKKysJCQlicmVhazsKKysJCWNhc2UgT1BUX1JBTURJU0s6CisrCQkJcmFtZGlzayA9IG9wdGFyZzsKKysJCQlicmVhazsKKysJCWNhc2UgT1BUX0RUQjoKKysJCQlkdGIgPSBvcHRhcmc7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogY29tbWFuZF9saW5lOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBjb21tYW5kX2xpbmUpOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiByYW1kaXNrOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCByYW1kaXNrKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZHRiOiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBkdGIpOworKworKwlpZiAoaW5mby0+a2V4ZWNfZmxhZ3MgJiBLRVhFQ19PTl9DUkFTSCkgeworKwkJZnByaW50ZihzdGRlcnIsICJrZXhlYzoga2R1bXAgbm90IHlldCBzdXBwb3J0ZWQgb24gYXJtNjRcbiIpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCXJlc3VsdCA9IGJ1aWxkX2VsZl9leGVjX2luZm8oYnVmLCBsZW4sICZlaGRyLCAwKTsKKysKKysJaWYgKHJlc3VsdCA8IDApIHsKKysJCWZyZWVfZWxmX2luZm8oJmVoZHIpOworKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogZnJlZV9lbGZfaW5mbyBmYWlsZWRcbiIsIF9fZnVuY19fLAorKwkJCV9fTElORV9fKTsKKysJCXJldHVybiByZXN1bHQ7CisrCX0KKysKKysJZWxmX2V4ZWNfYnVpbGRfbG9hZChpbmZvLCAmZWhkciwgYnVmLCBsZW4sIDApOworKworKwlpbmZvLT5lbnRyeSA9ICh2b2lkKikweDgwMDgwMDAwVUw7ICAvLyBGSVhNRQorKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgZWxmX2FybTY0X3VzYWdlKHZvaWQpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCitAQCAtMzksOCArMzksOCBAQAorICNpZmRlZiBfX3MzOTBfXworICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNzcKKyAjZW5kaWYKKy0jaWZkZWYgX19hcm1fXworLSNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQlfX05SX1NZU0NBTExfQkFTRSArIDM0NyAgCisrI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybTY0X18pCisrI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCV9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ3CisgI2VuZGlmCisgI2lmIGRlZmluZWQoX19taXBzX18pCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQgICAgICAgICAgICAgICAgNDMxMQorQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgaW5saW5lIGxvbmcga2V4ZWNfZmlsZV9sb2FkKGludCBrCisgI2RlZmluZSBLRVhFQ19BUkNIX1BQQzY0ICAgKDIxIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9JQV82NCAgICg1MCA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNICAgICAoNDAgPDwgMTYpCisrI2RlZmluZSBLRVhFQ19BUkNIX0FSTTY0ICAgKDE4MyA8PCAxNikKKysvKiAjZGVmaW5lIEtFWEVDX0FSQ0hfQUFSQ0g2NCAoMTgzIDw8IDE2KSAqLworICNkZWZpbmUgS0VYRUNfQVJDSF9TMzkwICAgICgyMiA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfU0ggICAgICAoNDIgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX01JUFNfTEUgKDEwIDw8IDE2KQorQEAgLTE1Myw1ICsxNTUsOCBAQCBzdGF0aWMgaW5saW5lIGxvbmcga2V4ZWNfZmlsZV9sb2FkKGludCBrCisgI2lmZGVmIF9fbTY4a19fCisgI2RlZmluZSBLRVhFQ19BUkNIX05BVElWRQlLRVhFQ19BUkNIXzY4SworICNlbmRpZgorKyNpZiBkZWZpbmVkKF9fYXJtNjRfXykKKysjZGVmaW5lIEtFWEVDX0FSQ0hfTkFUSVZFCUtFWEVDX0FSQ0hfQVJNNjQKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogS0VYRUNfU1lTQ0FMTF9IICovCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9rZXhlYy5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLmMKK0BAIC02NjQsNiArNjY0LDggQEAgc3RhdGljIGludCBteV9sb2FkKGNvbnN0IGNoYXIgKnR5cGUsIGludAorIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisgCWluZm8ua2V4ZWNfZmxhZ3MgPSBrZXhlY19mbGFnczsKKyAKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCisgCXJlc3VsdCA9IDA7CisgCWlmIChhcmdjIC0gZmlsZWluZCA8PSAwKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGtlcm5lbCBzcGVjaWZpZWRcbiIpOworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC9hcm02NC9NYWtlZmlsZQorQEAgLTAsMCArMSw3IEBACisrIworKyMgUHVyZ2F0b3J5IGFybTY0CisrIworKworK2FybTY0X1BVUkdBVE9SWV9TUkNTID0KKysKKytkaXN0ICs9IHB1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlICQoYXJtNjRfUFVSR0FUT1JZX1NSQ1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk4ZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy10b29scy1SZWZpbmUta2R1bXAtZGV2aWNlX3RyZWUtc29ydC5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitrZXhlYy10b29sczogUmVmaW5lIGtkdW1wIGRldmljZV90cmVlIHNvcnQKKworVGhlIGNvbW1pdCBiMDJkNzM1YmYgd2FzIHRvIHJlYXJyYW5nZSB0aGUgZGV2aWNlLXRyZWUgZW50cmllcywgYW5kCithc3N1bWVkIHRoYXQgdGhlc2UgZW50cmllcyBhcmUgc29ydGVkIGluIHRoZSBhc2NlbmRpbmcgb3JkZXIuIGJ1dAorYWNjdHVhbGx5IHdoZW4gSSB3YXMgdmFsaWRhdGluZyBrZXhlYyBhbmQga2R1bXAsIHRoZSBvcmRlciBvZgorc2VyaWFsIG5vZGUgc3RpbGwgaXMgY2hhbmdlZC4gU28gdGhlIHBhdGNoIGlzIHRvIHNvcnQgdGhlc2UgZW50cmllcworYnkgdGhlIGRpcmVjdG9yeSBuYW1lIGluIGFzY2VuZGluZyBvcmRlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFlhbmcgV2VpIDxXZWkuWWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBrZXhlYy9hcmNoL3BwYy9mczJkdC5jIHwgICAxMyArKysrKysrKysrLS0tCisga2V4ZWMvZnMyZHQuYyAgICAgICAgICB8ICAgMTMgKysrKysrKysrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC9wcGMvZnMyZHQuYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCitAQCAtMjk2LDYgKzI5Niw5IEBAIHN0YXRpYyBpbnQgY29tcGFyZWZ1bmMoY29uc3Qgdm9pZCAqZGVudHIKKyB7CisgCWNoYXIgKnN0cjEgPSAoKihzdHJ1Y3QgZGlyZW50ICoqKWRlbnRyeTEpLT5kX25hbWU7CisgCWNoYXIgKnN0cjIgPSAoKihzdHJ1Y3QgZGlyZW50ICoqKWRlbnRyeTIpLT5kX25hbWU7CisrCWNoYXIqIHB0cjEgPSBzdHJjaHIoc3RyMSwgJ0AnKTsKKysJY2hhciogcHRyMiA9IHN0cmNocihzdHIyLCAnQCcpOworKwlpbnQgbGVuMSwgbGVuMjsKKyAKKyAJLyoKKyAJICogc3RyY21wIHNjYW5zIGZyb20gbGVmdCB0byByaWdodCBhbmQgZmFpbHMgdG8gaWRldGlmeSBmb3Igc29tZQorQEAgLTMwMyw5ICszMDYsMTMgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgorIAkgKiBUaGVyZWZvcmUsIHdlIGdldCB0aGUgd3Jvbmcgc29ydGVkIG9yZGVyIGxpa2UgbWVtb3J5QDEwMDAwMDAwIGFuZAorIAkgKiBtZW1vcnlAZjAwMDAwMC4KKyAJICovCistCWlmIChzdHJjaHIoc3RyMSwgJ0AnKSAmJiBzdHJjaHIoc3RyMiwgJ0AnKSAmJgorLQkJKHN0cmxlbihzdHIxKSA+IHN0cmxlbihzdHIyKSkpCistCQlyZXR1cm4gMTsKKysJaWYgKHB0cjEgJiYgcHRyMikgeworKwkJbGVuMSA9IHB0cjEgLSBzdHIxOworKwkJbGVuMiA9IHB0cjIgLSBzdHIyOworKwkJaWYgKCFzdHJuY21wKHN0cjEsIHN0cjIsIGxlbjEgPmxlbjIgPyBsZW4xOiBsZW4yKSAmJgorKwkJCQkJKHN0cmxlbihzdHIxKSA+IHN0cmxlbihzdHIyKSkpCisrCQkJCXJldHVybiAxOworKwl9CisgCisgCXJldHVybiBzdHJjbXAoc3RyMSwgc3RyMik7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy14MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmQxOGViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29scy9rZXhlYy14MzIucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAoreDg2XzY0OiBBZGQgc3VwcG9ydCB0byBidWlsZCBrZXhlYy10b29scyB3aXRoIHgzMiBBQkkKKworU3VtbWFyeSBvZiBjaGFuZ2VzLAorCitjb25maWd1cmUuYWM6IEFkZCB0ZXN0IGZvciBkZXRlY3QgeDMyIEFCSS4KK3B1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZTogTm90IHVzZSBtY21vZGVsIGxhcmdlIHdoZW4KKwl4MzIgQUJJIGlzIHNldC4KK2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmM6IFdoZW4geDMyIEFCSSBpcyBzZXQKKwl1c2UgRUxGQ0xBU1MzMiBpbnN0ZWFkIG9mIEVMRkNMQVNTNjQuCitrZXhlYy9rZXhlYy1zeXNjYWxsLmg6IEFkZCBjb3JyZWN0IHN5c2NhbGwgbnVtYmVyIGZvciB4MzIgQUJJLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmlhbm8gTG9wZXogPG1hcmlhbm8ubG9wZXpAbGludXguaW50ZWwuY29tPgorCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSArKysrKysrKysKKyBrZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jIHwgNCArKysrCisga2V4ZWMva2V4ZWMtc3lzY2FsbC5oICAgICAgICAgICAgICAgICAgICB8IDQgKysrKworIHB1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZSAgICAgICAgICAgfCA0ICsrKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9jb25maWd1cmUuYWMKKysrKyBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCitAQCAtNTYsNiArNTYsMTUgQEAgY2FzZSAkdGFyZ2V0X2NwdSBpbgorIAkJOzsKKyAJaWE2NHx4ODZfNjR8YWxwaGF8bTY4ayApCisgCQlBUkNIPSIkdGFyZ2V0X2NwdSIKKysKKysJCWRubCAtLS1UZXN0IGZvciB4MzIgQUJJIGluIHg4Nl82NAorKwkJaWYgdGVzdCAieCRBUkNIIiA9ICJ4eDg2XzY0IiA7IHRoZW4KKysJCQlBQ19FR1JFUF9DUFAoeDMyX3Rlc3QsCisrCQkJWyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysJCQkJeDMyX3Rlc3QKKysJCQkjZW5kaWYKKysJCQldLCBTVUJBUkNIPSd4MzInLCBTVUJBUkNIPSc2NCcpCisrCQlmaQorIAkJOzsKKyAJKiApCisgCQlBQ19NU0dfRVJST1IoW3Vuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSAkdGFyZ2V0X2NwdV0pCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3g4Nl82NC9rZXhlYy1lbGYtcmVsLXg4Nl82NC5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKK0BAIC04LDcgKzgsMTEgQEAgaW50IG1hY2hpbmVfdmVyaWZ5X2VsZl9yZWwoc3RydWN0IG1lbV9laAorIAlpZiAoZWhkci0+ZWlfZGF0YSAhPSBFTEZEQVRBMkxTQikgeworIAkJcmV0dXJuIDA7CisgCX0KKysjaWZkZWYgX19JTFAzMl9fCisrCWlmIChlaGRyLT5laV9jbGFzcyAhPSBFTEZDTEFTUzMyKSB7CisrI2Vsc2UKKyAJaWYgKGVoZHItPmVpX2NsYXNzICE9IEVMRkNMQVNTNjQpIHsKKysjZW5kaWYKKyAJCXJldHVybiAwOworIAl9CisgCWlmIChlaGRyLT5lX21hY2hpbmUgIT0gRU1fWDg2XzY0KSB7CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLXN5c2NhbGwuaAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKK0BAIC0zMSw4ICszMSwxMiBAQAorICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNjgKKyAjZW5kaWYKKyAjaWZkZWYgX194ODZfNjRfXworKyNpZmRlZiBfX0lMUDMyX18KKysjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJNTI4CisrI2Vsc2UKKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjQ2CisgI2VuZGlmCisrI2VuZGlmCisgI2lmZGVmIF9fczM5MHhfXworICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNzcKKyAjZW5kaWYKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL3g4Nl82NC9NYWtlZmlsZQorQEAgLTIzLDQgKzIzLDYgQEAgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoLworIHg4Nl82NF9QVVJHQVRPUllfU1JDUyArPSBwdXJnYXRvcnkvYXJjaC9pMzg2L3ZnYS5jCisgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoL2kzODYvcGljLmMKKyAKKy14ODZfNjRfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUyA9IC1tY21vZGVsPWxhcmdlCisraWZlcSAoJChTVUJBUkNIKSw2NCkKKysgICAgICAgIHg4Nl82NF9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTID0gLW1jbW9kZWw9bGFyZ2UKKytlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTAuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmRiOTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXhlYy9rZXhlYy10b29sc18yLjAuMTAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBrZXhlYy10b29scy5pbmMKK2V4cG9ydCBMREZMQUdTID0gIi1MJHtTVEFHSU5HX0xJQkRJUn0iCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC16bGliPXllcyIKKworU1JDX1VSSSArPSAiZmlsZTovL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy1hYXJjaDY0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9rZXhlYy14MzIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXB1cmdhdG9yeS1QYXNzLXItZGlyZWN0bHktdG8tbGlua2VyLnBhdGNoIFwKKyAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjZjYjRkMjJiY2VjNzFiNmUwNzBhYThlOWQ5OTBhNWU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMzMWJiODNkZWVmOTU0N2EyOGU4Y2ZjMWYwOTE2ZTcwZjhlNmI5MmE2YmQyZWY3MDc3ZTEyZTMzMzgyMzlhZjMiCisKK1BBQ0tBR0VTID0rICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXhlYyBrZHVtcCB2bWNvcmUtZG1lc2ciCisKK0ZJTEVTX2tleGVjID0gIiR7c2JpbmRpcn0va2V4ZWMiCitGSUxFU19rZHVtcCA9ICIke3NiaW5kaXJ9L2tkdW1wIgorRklMRVNfdm1jb3JlLWRtZXNnID0gIiR7c2JpbmRpcn0vdm1jb3JlLWRtZXNnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2RlcG1vZHdyYXBwZXItY3Jvc3NfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhY2IzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIKQEAgLTAsMCArMSw0OCBAQAorU1VNTUFSWSA9ICJXcmFwcGVyIHNjcmlwdCBmb3IgdGhlIExpbnV4IGtlcm5lbCBtb2R1bGUgZGVwZW5kZW5jeSBpbmRleGVyIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUyA9ICIke1dPUktESVJ9IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorIyBUaGUga2VybmVsIGFuZCB0aGUgc3RhZ2luZyBkaXIgZm9yIGl0IGlzIG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIGZvciB0aGUgc3N0YXRlIGNvZGUgdG8gcHJvY2VzcyB0aGUgd3JhcHBlcgorU1NUQVRFX1NDQU5fRklMRVMgKz0gImRlcG1vZHdyYXBwZXIiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKworCWNhdCA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2RlcG1vZHdyYXBwZXIgPDwgRU9GCisjIS9iaW4vc2gKKyMgRXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGFzOiBkZXBtb2R3cmFwcGVyIC1hIEtFUk5FTF9WRVJTSU9OCitpZiBbICJcJDEiICE9ICItYSIgLW8gIlwkMiIgIT0gIi1iIiBdOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6IGRlcG1vZHdyYXBwZXIgLWEgLWIgcm9vdGZzIEtFUk5FTF9WRVJTSU9OIiA+JjIKKyAgICBleGl0IDEKK2ZpCitpZiBbICEgLXIgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbiBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIHJlYWQ6ICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2Qva2VybmVsLWFiaXZlcnNpb24iID4mMgorZWxzZQorICAgIGtlcm5lbGFiaT1cJChjYXQgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbikKKyAgICBpZiBbICJcJGtlcm5lbGFiaSIgIT0gIlwkNCIgXTsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogS2VybmVsIHZlcnNpb24gXCQ0IGRvZXMgbm90IG1hdGNoIGtlcm5lbC1hYml2ZXJzaW9uIChcJGtlcm5lbGFiaSkiID4mMgorICAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKworaWYgWyAhIC1yICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQgXTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byByZWFkOiAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL1N5c3RlbS5tYXAtXCQ0IiA+JjIKKyAgICBleGVjIGVudiBkZXBtb2QgIlwkMSIgIlwkMiIgIlwkMyIgIlwkNCIKK2Vsc2UKKyAgICBleGVjIGVudiBkZXBtb2QgIlwkMSIgIlwkMiIgIlwkMyIgLUYgIiR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQiICJcJDQiCitmaQorRU9GCisJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vZGVwbW9kd3JhcHBlcgorfQorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImRlcG1vZHdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkZXBtb2R3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QtbmF0aXZlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlMjc0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworcmVxdWlyZSBrbW9kLmluYworCitERVBFTkRTICs9ICJ6bGliLW5hdGl2ZSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSArPSAiZmlsZTovL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2ggXAorICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpeworCWZvciB0b29sIGluIGRlcG1vZCBpbnNtb2QgbHNtb2QgbW9kaW5mbyBtb2Rwcm9iZSBybW1vZAorCWRvCisJCWxuIC1zIGttb2QgJHtEfSR7YmluZGlyfS8kdG9vbAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFhNjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1hbmFnaW5nIExpbnV4IGtlcm5lbCBtb2R1bGVzIgorREVTQ1JJUFRJT04gPSAia21vZCBpcyBhIHNldCBvZiB0b29scyB0byBoYW5kbGUgY29tbW9uIHRhc2tzIHdpdGggTGludXgga2VybmVsIG1vZHVsZXMgbGlrZSBcCisgICAgICAgICAgICAgICBpbnNlcnQsIHJlbW92ZSwgbGlzdCwgY2hlY2sgcHJvcGVydGllcywgcmVzb2x2ZSBkZXBlbmRlbmNpZXMgYW5kIGFsaWFzZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLnByb2Z1c2lvbi5tb2JpL2ttb2QvIgorTElDRU5TRSA9ICJHUEwtMi4wKyAmIExHUEwtMi4xKyIKK0xJQ0VOU0VfbGlia21vZCA9ICJMR1BMLTIuMSsiCitTRUNUSU9OID0gImJhc2UiCisKK0RFUEVORFMgKz0gInBrZ2NvbmZpZy1uYXRpdmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmttb2QvQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICIKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MKKworU1JDUkVWID0gIjBkODMzNzE1ZWFhNjU2MzZkZGEyNzA1Yjg5MzU5YTFlMDE1NGRjNTgiCisjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKK1BWID0gIjIxK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMva2VybmVsL2ttb2Qva21vZC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZGVwbW9kLXNlYXJjaC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1PX0NMT0VYRUMucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1pbnN0YWxsIC0tc3ltbGluayIKK0VYVFJBX09FQ09ORiArPSIgLS1lbmFibGUtdG9vbHMgLS1kaXNhYmxlLW1hbnBhZ2VzIC0td2l0aC16bGliIgorCitQQUNLQUdFQ09ORklHW2RlYnVnXSA9ICItLWVuYWJsZS1kZWJ1ZywtLWRpc2FibGUtZGVidWciCitQQUNLQUdFQ09ORklHW2xvZ2dpbmddID0gIiAtLWVuYWJsZS1sb2dnaW5nLC0tZGlzYWJsZS1sb2dnaW5nIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIGd0a2RvY2l6ZSAtLWRvY2RpciAke1N9L2xpYmttb2QvZG9jcyB8fCB0b3VjaCAke1N9L2xpYmttb2QvZG9jcy9ndGstZG9jLm1ha2UKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisJc2VkIC1pICdzI31saWJ0b29sI30ke1RBUkdFVF9TWVN9LWxpYnRvb2wjJyAke0J9L2RvbHRsaWJ0b29sCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9DaGFuZ2UtdG8tY2FsbGluZy1ic3dhcF8taW5zdGVhZC1vZi1odG9iZS1hbmQtYmUtdG9oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzIyMTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitTdWJqZWN0OiBDaGFuZ2UgdG8gY2FsbGluZyBic3dhcF8qIGluc3RlYWQgb2YgaHRvYmUqIGFuZCBiZSp0b2gKKworV2UgY2FuJ3QgdXNlIGh0b2JlKiBhbmQgYmUqdG9oIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgYXJlIG5vdAorYXZhaWxhYmxlIG9uIG9sZGVyIHZlcnNpb25zIG9mIGdsaWJjLCBGb3IgZXhhbXBsZSwgc2hpcHBlZCBvbiBDZW50b3MgNS41LgorCitDaGFuZ2UgdG8gZGlyZWN0bHkgY2FsbGluZyBic3dhcF8qIGFzIGRlZmluZWQgaW4rYnl0ZXN3YXAuaC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jIGIvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jCitpbmRleCA2ZmMwNmZjLi45MTIxODVhIDEwMDY0NAorLS0tIGEvbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jCisrKysgYi9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgICovCisgCisgI2luY2x1ZGUgPGVuZGlhbi5oPgorKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC0xMjcsNyArMTI4LDcgQEAgYm9vbCBrbW9kX21vZHVsZV9zaWduYXR1cmVfaW5mbyhjb25zdCBzdHJ1Y3Qga21vZF9maWxlICpmaWxlLCBzdHJ1Y3Qga21vZF9zaWduYXQKKyAJCQltb2RzaWctPmhhc2ggPj0gUEtFWV9IQVNIX19MQVNUIHx8CisgCQkJbW9kc2lnLT5pZF90eXBlID49IFBLRVlfSURfVFlQRV9fTEFTVCkKKyAJCXJldHVybiBmYWxzZTsKKy0Jc2lnX2xlbiA9IGJlMzJ0b2goZ2V0X3VuYWxpZ25lZCgmbW9kc2lnLT5zaWdfbGVuKSk7CisrCXNpZ19sZW4gPSBic3dhcF8zMihnZXRfdW5hbGlnbmVkKCZtb2RzaWctPnNpZ19sZW4pKTsKKyAJaWYgKHNpZ19sZW4gPT0gMCB8fAorIAkgICAgc2l6ZSA8IChpbnQ2NF90KShtb2RzaWctPnNpZ25lcl9sZW4gKyBtb2RzaWctPmtleV9pZF9sZW4gKyBzaWdfbGVuKSkKKyAJCXJldHVybiBmYWxzZTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWFmY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorQXZvaWQgcGFyYWxsZWwtdGVzdHMgYXMgaXQgcmVtb3ZlCitidWlsZHRlc3QtVEVTVFMgYW5kIHJ1bnRlc3QtVEVTVFMgdGFyZ2V0cyByZXF1aXJlZCBieSBwdGVzdC4KK0luIGF1dG9tYWtlIDEuMTMuNCBwYXJhbGxlbC10ZXN0cyBpcyBhc3N1bWVkIGJ5IGRlZmF1bHMuCitJbiBvcmRlciB0byBoYXZlIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzCitzZXJpYWwtdGVzdHMgaXMgbm93IHJlcXVpcmVkCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChkaXNhYmxlIGZlYXR1cmUgaW5jb21wYXRpYmxlIHdpdGggcHRlc3QpIAorCistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGViMGY5ZDEuLmE1Mzk5NjggMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0LDcgKzE0LDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfU1lTX0xBUkdFRklMRQorIEFDX1BSRUZJWF9ERUZBVUxUKFsvdXNyXSkKKyBBTV9NQUlOVEFJTkVSX01PREUoW2VuYWJsZV0pCistQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgY29sb3ItdGVzdHMgcGFyYWxsZWwtdGVzdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2NoZWNrLW5ld3MgZm9yZWlnbiAxLjExIHNpbGVudC1ydWxlcyB0YXItcGF4IG5vLWRpc3QtZ3ppcCBkaXN0LXh6IHN1YmRpci1vYmplY3RzIGNvbG9yLXRlc3RzIHNlcmlhbC10ZXN0c10pCisgQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKQorIExUX0lOSVQoW2Rpc2FibGUtc3RhdGljIHBpYy1vbmx5XSkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZGVwbW9kLXNlYXJjaC5jb25mIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZGVwbW9kLXNlYXJjaC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2MwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9kZXBtb2Qtc2VhcmNoLmNvbmYKQEAgLTAsMCArMSw2IEBACisjCisjIC9ldGMvZGVwbW9kLmQvZGVwbW9kLmNvbmYKKyMKKworc2VhcmNoIHVwZGF0ZXMgZXh0cmFtb2R1bGVzIGJ1aWx0LWluCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2ZpeC1PX0NMT0VYRUMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjFkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9maXgtT19DTE9FWEVDLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYmQ0MzM2N2VlZTg2ODA1OTc3MDE4OGZkOWU5ZGIzODUyMGRjNmZmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyMiBKYW4gMjAxNCAwMTowNjo0MCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaDogY2hlY2sgd2hldGhlciBPX0NMT0VYRUMgaXMKKyBkZWZpbmVkIG9yIG5vdAorCitPX0NMT0VYRUMgaXMgaW50cm9kdWNlZCBmcm9tIExpbnV4IDIuNi4yMywgc28gb2xkIGtlcm5lbCBkb2Vzbid0IGhhdmUKK2l0LCB3ZSBuZWVkIGNoZWNrIGJlZm9yZSB1c2UuCisKK1RoaXMgcGF0Y2ggaXMgbXVjaCBtb3JlIGxpa2UgYSB3b3JrYXJvdW5kLCBzaW5jZSBpdCBtYXkgbmVlZCBmY250bCgpIHVzZQorRkRfQ0xPRVhFQyB0byByZXBsYWNlLgorCitUaGlzIHByb2JsZW0gd2FzIHJlcG9ydGVkIGJ5ICJUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+IgorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlia21vZC9saWJrbW9kLWludGVybmFsLmggfCAgICA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaCBiL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oCitpbmRleCAwMTgwMTI0Li4xMDBiNDBmIDEwMDY0NAorLS0tIGEvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKKysrKyBiL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oCitAQCAtOSw2ICs5LDEwIEBACisgI2luY2x1ZGUgIm1hY3JvLmgiCisgI2luY2x1ZGUgImxpYmttb2QuaCIKKyAKKysjaWZuZGVmIE9fQ0xPRVhFQworKyNkZWZpbmUgT19DTE9FWEVDIDAKKysjZW5kaWYKKysKKyBzdGF0aWMgX2Fsd2F5c19pbmxpbmVfIF9wcmludGZfZm9ybWF0XygyLCAzKSB2b2lkCisgCWttb2RfbG9nX251bGwoc3RydWN0IGttb2RfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7fQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWRiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9wdGVzdC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitBZGQgJ2luc3RhbGwtcHRlc3QnIHJ1bGUuCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXJ1TiBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KKy0tLSBhL01ha2VmaWxlLmFtCTIwMTMtMDctMTIgMTc6MTE6MDUuMjc4MzMxNTU3ICswMjAwCisrKysgYi9NYWtlZmlsZS5hbQkyMDEzLTA3LTEyIDE3OjE0OjI3LjAzMzc4ODAxNiArMDIwMAorQEAgLTIwNCw2ICsyMDQsMTYgQEAKKyAKKyBkaXN0Y2xlYW4tbG9jYWw6ICQoRElTVENMRUFOX0xPQ0FMX0hPT0tTKQorIAorK2luc3RhbGwtcHRlc3Q6CisrCUAkKE1LRElSX1ApICQoREVTVERJUikvdGVzdHN1aXRlCisrCUBmb3IgZmlsZSBpbiAkKFRFU1RTVUlURSk7IGRvIFwKKysJCWluc3RhbGwgJCRmaWxlICQoREVTVERJUikvdGVzdHN1aXRlOyBcCisrCWRvbmU7CisrCUBzZWQgLWUgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nIDwgTWFrZWZpbGUgPiAkKERFU1RESVIpL01ha2VmaWxlCisrCUAkKE1LRElSX1ApICQoREVTVERJUikvdG9vbHMKKysJQGNwICQobm9pbnN0X1NDUklQVFMpICQobm9pbnN0X1BST0dSQU1TKSAkKERFU1RESVIpL3Rvb2xzCisrCUBjcCAtciB0ZXN0c3VpdGUvcm9vdGZzIHRlc3RzdWl0ZS8ubGlicyAkKERFU1RESVIpL3Rlc3RzdWl0ZQorKworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBjdXN0b20gcmVsZWFzZSBoZWxwZXJzCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OThkZDJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCit0b3VjaCB0ZXN0c3VpdGUvc3RhbXAtcm9vdGZzCit0YXIgeGYgdGVzdG1vZHVsZS50YXIKK21ha2UgLWsgcnVudGVzdC1URVNUUyAyPi9kZXYvbnVsbHwgZ3JlcCAtZSBeUEFTUyAtZSBeRkFJTAorZmluZCB0ZXN0c3VpdGUgLW5hbWUgKi5rbyAtZXhlYyBybSAtZiB7fSBcOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2RfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGQ4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZF9naXQuYmIKQEAgLTAsMCArMSw2MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworcmVxdWlyZSBrbW9kLmluYworCitERVBFTkRTICs9ICJ6bGliIgorUFJPVklERVMgKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUlBST1ZJREVTXyR7UE59ICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKK1JDT05GTElDVFNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUlJFUExBQ0VTXyR7UE59ICs9ICJtb2R1bGUtaW5pdC10b29scy1pbnNtb2Qtc3RhdGljIG1vZHVsZS1pbml0LXRvb2xzLWRlcG1vZCBtb2R1bGUtaW5pdC10b29scyIKKworIyB0byBmb3JjZSB1c2VyIHRvIHJlbW92ZSBvbGQgbW9kdWxlLWluaXQtdG9vbHMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGttb2QgdmFyaWFudHMKK1JDT05GTElDVFNfbGlia21vZDIgKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorCisjIGF1dG90b29scyBzZXQgcHJlZml4IHRvIC91c3IsIGhvd2V2ZXIgd2Ugd2FudCB0aGVtIGluIC9iaW4gYW5kIC9zYmluCitiaW5kaXIgPSAiJHtiYXNlX2JpbmRpcn0iCitzYmluZGlyID0gIiR7YmFzZV9zYmluZGlyfSIKKyMgbGliZGlyID0gIiR7YmFzZV9saWJkaXJ9IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2VfYmluZGlyfQorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX3NiaW5kaXJ9CisgICAgICAgICMgYWRkIHN5bWxpbmtzIHRvIGttb2QKKyAgICAgICAgbG4gLXMgLi4ke2Jhc2VfYmluZGlyfS9rbW9kICR7RH0ke2Jhc2VfYmluZGlyfS9sc21vZAorICAgICAgICBmb3IgdG9vbCBpbiBpbnNtb2Qgcm1tb2QgZGVwbW9kIG1vZGluZm8gbW9kcHJvYmU7IGRvCisgICAgICAgICAgICAgICAgbG4gLXMgLi4ke2Jhc2VfYmluZGlyfS9rbW9kICR7RH0ke2Jhc2Vfc2JpbmRpcn0vJHt0b29sfQorICAgICAgICBkb25lCisgICAgICAgICMgY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcworICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX2xpYmRpcn0vZGVwbW9kLmQKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9saWJkaXJ9L21vZHByb2JlLmQKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7c3lzY29uZmRpcn0vZGVwbW9kLmQKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7c3lzY29uZmRpcn0vbW9kcHJvYmUuZAorCisgICAgICAgICMgaW5zdGFsbCBkZXBtb2QuZCBmaWxlIGZvciBzZWFyY2gvIGRpcgorICAgICAgICBpbnN0YWxsIC1EbTY0NCAiJHtXT1JLRElSfS9kZXBtb2Qtc2VhcmNoLmNvbmYiICIke0R9JHtiYXNlX2xpYmRpcn0vZGVwbW9kLmQvc2VhcmNoLmNvbmYiCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAgICAgICAgIHNlZCAtaSAncy9hY19wd2Q9LyNhY19wd2Q9LycgY29uZmlnLnN0YXR1cyA7IHNlZCAtaSAiLyNhY19wd2Q9L2FcYWNfcHdkPScuJyIgY29uZmlnLnN0YXR1cworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNjAiCisKK0FMVEVSTkFUSVZFX2ttb2QgPSAiaW5zbW9kIG1vZHByb2JlIHJtbW9kIG1vZGluZm8gYmluLWxzbW9kIGxzbW9kIGRlcG1vZCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2luc21vZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2luc21vZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb2Rwcm9iZV0gPSAiJHtiYXNlX3NiaW5kaXJ9L21vZHByb2JlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JtbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcm1tb2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbW9kaW5mb10gPSAiJHtiYXNlX3NiaW5kaXJ9L21vZGluZm8iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYmluLWxzbW9kXSA9ICIke2Jhc2VfYmluZGlyfS9sc21vZCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xzbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbHNtb2QiCitBTFRFUk5BVElWRV9UQVJHRVRbbHNtb2RdID0gIiR7YmFzZV9iaW5kaXJ9L2xzbW9kLiR7QlBOfSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2RlcG1vZF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2RlcG1vZCIKKworUEFDS0FHRVMgPSsgImxpYmttb2QgJHtQTn0tYmFzaC1jb21wbGV0aW9uIgorCitGSUxFU19saWJrbW9kID0gIiR7YmFzZV9saWJkaXJ9L2xpYmttb2QqJHtTT0xJQlN9ICR7bGliZGlyfS9saWJrbW9kKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9kZXBtb2QuZCAke2Jhc2VfbGliZGlyfS9tb2Rwcm9iZS5kIgorRklMRVNfJHtQTn0tYmFzaC1jb21wbGV0aW9uID0gIiR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41LzAwMDEtUmVjdGlmeS10aGUtZnVuY3Rpb24tc2lnbmF0dXJlcy10by1maXgtcHJvdG90eXBlLW1pcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0ODEzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBkYjExMjczOWRjNGY2MDhhOTY4YjgxMDRiMzgyOTU1ZGMzZDk2Y2EzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwNzo0MDoxMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBSZWN0aWZ5IHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIHRvIGZpeCBwcm90b3R5cGUgbWlzbWF0Y2hlcworCitjbGFuZyBpcyBsZXNzIGZvcmdpdmluZyB3aGVuIGl0IGNvbWVzIHRvIGNvZGluZyBzdGFuZGFyZHMsIGNvcnJlY3QgdGhlCitmdW5jdGlvbiBzaWduYXR1cmVzIHRvIHJlZmxlY3QgdGhlIGZ1bmN0aW9uIGxvZ2ljCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgZnN5bmMuYyAgICAgIHwgNyArKysrLS0tCisgbGF0ZW5jeXRvcC5oIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZnN5bmMuYyBiL2ZzeW5jLmMKK2luZGV4IDgyZGZmMGUuLjVjZWZiYTkgMTAwNjQ0CistLS0gYS9mc3luYy5jCisrKysgYi9mc3luYy5jCitAQCAtNTEsNyArNTEsNyBAQCBzdHJ1Y3QgZnN5bmNfZmlsZXMgeworIHN0YXRpYyBHTGlzdCAqZnN5bmNfZGF0YTsKKyAKKyAKKy1zdGF0aWMgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisrc3RhdGljIHZvaWQgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisgeworIAlzdHJ1Y3QgZnN5bmNfZmlsZXMgKmZpbGU7CisgCUdMaXN0ICppdGVtOworQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIGNoYWluX2ZpbGUoc3RydWN0IGZzeW5jX3Byb2Nlc3MgKnByb2MsIGNoYXIgKmZpbGVuYW1lKQorIAlwcm9jLT5maWxlcyA9IGdfbGlzdF9hcHBlbmQocHJvYy0+ZmlsZXMsIGZpbGUpOworIH0KKyAKKy1zdGF0aWMgcmVwb3J0X2ZpbGUoY2hhciAqcHJvY2VzcywgY2hhciAqZmlsZSkKKytzdGF0aWMgdm9pZCByZXBvcnRfZmlsZShjaGFyICpwcm9jZXNzLCBjaGFyICpmaWxlKQorIHsKKyAJc3RydWN0IGZzeW5jX3Byb2Nlc3MgKnByb2M7CisgCUdMaXN0ICppdGVtOworQEAgLTE1Nyw5ICsxNTcsMTAgQEAgaW50IGVuYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlciIsICJmc3luYyIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9pdGVyX2N0cmwiLCAiZnRyYWNlX3ByaW50ayIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKysJcmV0dXJuIHJldDsKKyB9CisgCistaW50IGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisrdm9pZCBkaXNhYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorIHsKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKyB9CitkaWZmIC0tZ2l0IGEvbGF0ZW5jeXRvcC5oIGIvbGF0ZW5jeXRvcC5oCitpbmRleCA1Mzk0ZDczLi45ZDEwN2E4IDEwMDY0NAorLS0tIGEvbGF0ZW5jeXRvcC5oCisrKysgYi9sYXRlbmN5dG9wLmgKK0BAIC01NCw1ICs1NCw1IEBAIGV4dGVybiBjaGFyICp0cmFuc2xhdGUoY2hhciAqbGluZSk7CisgZXh0ZXJuIHZvaWQgaW5pdF90cmFuc2xhdGlvbnMoY2hhciAqZmlsZW5hbWUpOworIGV4dGVybiBpbnQgZnN5bmNfZGlzcGxheShpbnQgZHVyYXRpb24pOworIGV4dGVybiBpbnQgZW5hYmxlX2ZzeW5jX3RyYWNlcih2b2lkKTsKKy1leHRlcm4gaW50IGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworK2V4dGVybiB2b2lkIGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworIGV4dGVybiB2b2lkIHVwZGF0ZV9saXN0KHZvaWQpOworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1mc3luYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NDhjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1mc3luYy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitsaW51eDogc3lzZnM6IHVzZSB0cmFjaW5nX29uIGFzIHRyYWNpbmdfZW5hYmxlZCBpcyBkZXByZWNhdGVkCisKK3RyYWNpbmdfZW5hYmxlZCB1c2UgaW4gdGhlIGtlcm5lbCBpcyBiZWluZyBkZXByZWNhdGVkIGFzIHBlciBjb21taXQKKzY3NTJhYjRhOWMzMCBbdHJhY2luZzogRGVwcmVjYXRlIHRyYWNpbmdfZW5hYmxlZCBmb3IgdHJhY2luZ19vbl0gaW4KK3RoZSBsaW51eCBtYWlubGluZSBrZXJuZWwuIHRyYWNpbmdfZW5hYmxlZCB1c2Ugd2lsbCBnZW5lcmF0ZSBhIHdhcm5pbmcKK2FuZCBtYXkgbm8gbG9uZ2VyIGZ1bmN0aW9uIGFzIGV4cGVjdGVkLCB0aGVyZWZvcmUgbW92ZSB0byB1c2UgdHJhY2luZ19vbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERlbm5pcyBIYWxsIDxkZW5uaXMuaGFsbEB3aW5kcml2ZXIuY29tPgorCitJbmRleDogbGF0ZW5jeXRvcC0wLjUvZnN5bmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhdGVuY3l0b3AtMC41Lm9yaWcvZnN5bmMuYwkyMDEyLTA4LTAzIDEwOjQ1OjQ5LjAwMDAwMDAwMCAtMDQwMAorKysrIGxhdGVuY3l0b3AtMC41L2ZzeW5jLmMJMjAxMi0wOC0wMyAxMDo0ODozOS4wMDAwMDAwMDAgLTA0MDAKK0BAIC0xNDksMTkgKzE0OSwxOSBAQAorICAqIGNkIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcKKyAgKiBlY2hvIGZzeW5jID4gY3VycmVudF90cmFjZXIKKyAgKiBlY2hvIGZ0cmFjZV9wcmludGsgPiBpdGVyX2N0cmwgCistICogZWNobyAxID4gdHJhY2luZ19lbmFibGVkCisrICogZWNobyAxID4gdHJhY2luZ19vbgorICAqLworIAlyZXQgPSBzeXN0ZW0oIi9iaW4vbW91bnQgLXQgZGVidWdmcyBub25lIC9zeXMva2VybmVsL2RlYnVnLyIpOworIAlpZiAoIXJldCkgCisgCQlyZXR1cm4gLTE7CisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIiLCAiZnN5bmMiKTsJCisgCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvaXRlcl9jdHJsIiwgImZ0cmFjZV9wcmludGsiKTsJCistCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjEiKTsKKysJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKyB9CisgCisgaW50IGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisgeworLQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIwIik7CisrCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIwIik7CisgfQorIAorIAorQEAgLTMzOSw4ICszMzksOCBAQAorIAkJaWYgKGN1cmR1cmF0aW9uID4gNSkKKyAJCQljdXJkdXJhdGlvbiA9IDU7CisgCQkvKiBjbGVhciB0aGUgZnRyYWNlIGJ1ZmZlciAqLworLQkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMCIpOworLQkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMSIpOworKwkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKysJCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19vbiIsICIxIik7CisgCQlrZXkgPSBzZWxlY3QoMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZlbmQpOworIAkJcGFyc2VfZnRyYWNlKCk7CisgCQlwcmludF9nbG9iYWxfbGlzdCgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YyMTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLm9yaWcgYi9NYWtlZmlsZQoraW5kZXggMTZhMjM2OS4uZmE3OTdhMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLm9yaWcKKysrKyBiL01ha2VmaWxlCitAQCAtMSwxMCArMSwxMSBAQAorLSMgRklYTUU6IFVzZSBhdXRvY29uZiA/CistSEFTX0dUS19HVUkgPSAxCisrIyBVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisrIyBTaWduZWQtb2ZmLWJ5OiBKYWNrIE1pdGNoZWxsIDxqYWNrLm1pdGNoZWxsQGRiYnJvYWRjYXN0LmNvLnVrPgorIAorIERFU1RESVIgPQorIFNCSU5ESVIgPSAvdXNyL3NiaW4KKyBYQ0ZMQUdTID0gLVcgIC1nIGBwa2ctY29uZmlnIC0tY2ZsYWdzIGdsaWItMi4wYCAtRF9GT1JUSUZZX1NPVVJDRT0yIC1Xbm8tc2lnbi1jb21wYXJlCistTERGID0gLVdsLC0tYXMtbmVlZGVkIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgICAtbG5jdXJzZXN3IAorK0xERiA9IC1XbCwtLWFzLW5lZWRlZCBgcGtnLWNvbmZpZyAtLWxpYnMgZ2xpYi0yLjBgICAgLWxuY3Vyc2VzCisrQ0MgPz0gZ2NjCisgCisgT0JKUz0gbGF0ZW5jeXRvcC5vIHRleHRfZGlzcGxheS5vIHRyYW5zbGF0ZS5vIGZzeW5jLm8KKyAKK0BAIC0yNiwxNiArMjcsMTcgQEAgZW5kaWYKKyAKKyAjIFdlIHdyaXRlIGV4cGxpY2l0eSB0aGlzICJpbXBsaWNpdCBydWxlIgorICUubyA6ICUuYworLQlnY2MgLWMgJChDRkxBR1MpICQoWENGTEFHUykgJDwgLW8gJEAKKysJJChDQykgLWMgJChDRkxBR1MpICQoWENGTEFHUykgJDwgLW8gJEAKKyAKKyBsYXRlbmN5dG9wOiAgJChPQkpTKSBsYXRlbmN5dG9wLmggTWFrZWZpbGUKKy0JZ2NjICQoQ0ZMQUdTKSAkKE9CSlMpICQoTERGKSAtbyBsYXRlbmN5dG9wIAorKwkkKENDKSAkKENGTEFHUykgJChPQkpTKSAkKExERikgLW8gbGF0ZW5jeXRvcAorIAorIGNsZWFuOgorIAlybSAtZiAqfiBsYXRlbmN5dG9wIERFQURKT0UgKi5vCisgCisgaW5zdGFsbDogbGF0ZW5jeXRvcAorIAlta2RpciAtcCAkKERFU1RESVIpL3Vzci9zaGFyZS9sYXRlbmN5dG9wCisrCW1rZGlyIC1wICQoREVTVERJUikvJChTQklORElSKQorIAlpbnN0YWxsIC1tIDA2NDQgbGF0ZW5jeXRvcC50cmFucyAkKERFU1RESVIpL3Vzci9zaGFyZS9sYXRlbmN5dG9wL2xhdGVuY3l0b3AudHJhbnMKKyAJaW5zdGFsbCAtbSAwNjQ0ICoucG5nICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AvCisgCWluc3RhbGwgLW0gMDc1NSBsYXRlbmN5dG9wICQoREVTVERJUikkKFNCSU5ESVIpLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3BfMC41LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3BfMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMWYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcF8wLjUuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJMaW51eCB0b29sIGZvciBtZWFzdXJpbmcgYW5kIGZpeGluZyBsYXRlbmN5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5sYXRlbmN5dG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sYXRlbmN5dG9wLmM7ZW5kbGluZT0yMzttZDU9ZWU5ZWE5YjE0MTUzNTZlNTczNGFkYWQ0YTg3ZGM3ZmEiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJpbnRsIG5jdXJzZXMgZ2xpYi0yLjAiCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy8ke0JQTn0vJHtCUH0udGFyLmd6LzczYmIzMzcxYzZlZTBiMGU2OGUyNTI4OTAyN2U4NjVjLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgICBmaWxlOi8vbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGF0ZW5jeXRvcC1mc3luYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjczYmIzMzcxYzZlZTBiMGU2OGUyNTI4OTAyN2U4NjVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllN2Y3MmZiZWE3YmQ5MThlNzEyMTJhMWVhYmFhZDg0ODhkMmM2MDIyMDVkMmUzYzk1ZDYyY2Q1N2U5MjAzZWYiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLCxndGsrIgorCitFWFRSQV9PRU1BS0VfWCA9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnSEFTX0dUS19HVUk9MScsICcnLCBkKX0iCisKKyNDRkxBR1MgKz0gIiR7TERGTEFHU30iCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSAke0VYVFJBX09FTUFLRV9YfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5YTdmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2ZpbGVzLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAyNzJhOGEwNjlhOGY1ZjA2YTFlNWRmYTBlZjEyZjVmOTI5ODQ3MjhiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTm9vciA8bm9vcl9haHNhbkBtZW50b3IuY29tPgorRGF0ZTogV2VkLCAxMiBBdWcgMjAxNSAyMDo1NDowMCArMDUwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogQWRkIExERkxBR1MgdmFyaWFibGUgdG8gU0xERkxBR1MuCisKKyogQWRkIExERkxBR1MgdmFyaWFibGUgdG8gU0xERkxBR1Mgc28gdGhhdCBleHRyYSBsaW5rZXIKKyAgZmxhZ3MgY2FuIGJlIHNlbnQgdmlhIHRoaXMgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtwZXJmbW9uMi1saWJwZm00LWNvbW1pdHNAbGlzdHMuc291cmNlZm9yZ2UubmV0XQorCitTaWduZWQtb2ZmLWJ5OiBOb29yIEFoc2FuIDxub29yX2Foc2FuQG1lbnRvci5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKK2luZGV4IDFjYzg3NjUuLjRiZDkyZWYgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUKKysrKyBiL2xpYi9NYWtlZmlsZQorQEAgLTE4Nyw3ICsxODcsNyBAQCBDRkxBR1MgKz0gLURDT05GSUdfUEZNTElCX0NFTEwKKyBlbmRpZgorIAorIGlmZXEgKCQoU1lTKSxMaW51eCkKKy1TTERGTEFHUz0tc2hhcmVkIC1XbCwtc29uYW1lIC1XbCwkKFZMSUJQRk0pCisrU0xERkxBR1M9JChMREZMQUdTKSAtc2hhcmVkIC1XbCwtc29uYW1lIC1XbCwkKFZMSUJQRk0pCisgU0xJQlBGTT1saWJwZm0uc28uJChWRVJTSU9OKS4kKFJFVklTSU9OKS4kKEFHRSkKKyBWTElCUEZNPWxpYnBmbS5zby4kKFZFUlNJT04pCisgU09MSUJFWFQ9c28KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00XzQuNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZkYTkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vbGlicGZtNF80LjYuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIk1vbml0b3JpbmcgdG9vbHMgZXhwbG9pdGluZyB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBldmVudHMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBsaWJyYXJ5LCBjYWxsZWQgbGlicGZtNCB3aGljaCBpcyB1c2VkIHRvIGRldmVsb3AgXAorbW9uaXRvcmluZyB0b29scyBleHBsb2l0aW5nIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50cyBzdWNoIGFzIHRob3NlIFwKK3Byb3ZpZGVkIGJ5IHRoZSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQgKFBNVSkgb2YgbW9kZXJuIHByb2Nlc3NvcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BlcmZtb24yLnNvdXJjZWZvcmdlLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTQ0ODIyJmF0aWQ9NzU5OTUzJnNvdXJjZT1uYXZiYXIiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGRlNDg4ZjNiZDQ0MjRlMzA4ZTJlMzk5Y2I5OWM3ODgiCisKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0NPTVBBVElCTEVfSE9TVCA9ICJwb3dlcnBjNjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wZXJmbW9uMi8ke0JQTn0vbGlicGZtLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MDc3YjkwMjI0NDBlNDk1MWQ5NmYyZDBlNzNiZDQ4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YWIxZTViMDQ3MjU1MGY5MDM3YTg4MDA4MzRmNmJjM2I5Mjc2OTAwNzBmNjlmYWMwYjY3Mjg0YjRiMDVmZDVmIgorCitFWFRSQV9PRU1BS0UgPSAiREVTVERJUj1cIiR7RH1cIiBQUkVGSVg9XCIke3ByZWZpeH1cIiBMSUJESVI9XCIke2xpYmRpcn1cIiBMRENPTkZJRz1cInRydWVcIiIKK0VYVFJBX09FTUFLRV9hcHBlbmRfcG93ZXJwYyA9ICIgQVJDSD1cInBvd2VycGNcIiIKK0VYVFJBX09FTUFLRV9hcHBlbmRfcG93ZXJwYzY0ID0gIiBBUkNIPVwicG93ZXJwY1wiIEJJVE1PREU9XCI2NFwiIgorCitTID0gIiR7V09SS0RJUn0vbGlicGZtLSR7UFZ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4MTE3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtZmlybXdhcmUvbGludXgtZmlybXdhcmVfZ2l0LmJiCkBAIC0wLDAgKzEsNDMzIEBACitTVU1NQVJZID0gIkZpcm13YXJlIGZpbGVzIGZvciB1c2Ugd2l0aCBMaW51eCBrZXJuZWwiCitTRUNUSU9OID0gImtlcm5lbCIKKworTElDRU5TRSA9ICJcCisgICAgRmlybXdhcmUtQWJpbGlzIFwKKyAgICAmIEZpcm13YXJlLWFnZXJlIFwKKyAgICAmIEZpcm13YXJlLWFtZC11Y29kZSBcCisgICAgJiBGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHggXAorICAgICYgRmlybXdhcmUtY2EwMTMyIFwKKyAgICAmIEZpcm13YXJlLWNoZWxzaW9fZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtY3cxMjAwIFwKKyAgICAmIEZpcm13YXJlLWRpYjA3MDAgXAorICAgICYgRmlybXdhcmUtZW5lX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWZ3X3NzdF8wZjI4IFwKKyAgICAmIEZpcm13YXJlLWdvNzAwNyBcCisgICAgJiBGaXJtd2FyZS1pMjQwMG0gXAorICAgICYgRmlybXdhcmUtaWJ0X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWl0OTEzeCBcCisgICAgJiBGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLUludGNTU1QyIFwKKyAgICAmIEZpcm13YXJlLU1hcnZlbGwgXAorICAgICYgRmlybXdhcmUtbXdsODMzNSBcCisgICAgJiBGaXJtd2FyZS1teXJpMTBnZV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1PTFBDIFwKKyAgICAmIEZpcm13YXJlLXBoYW5mdyBcCisgICAgJiBGaXJtd2FyZS1xYXRfZGg4OTV4Y2NfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcWxhMnh4eCBcCisgICAgJiBGaXJtd2FyZS1yOGE3Nzl4X3VzYjMgXAorICAgICYgRmlybXdhcmUtcmFkZW9uIFwKKyAgICAmIEZpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkgXAorICAgICYgRmlybXdhcmUtdWVhZ2xlLWF0bTQtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdmlhX3Z0NjY1NiBcCisgICAgJiBGaXJtd2FyZS13bDEyNTEgXAorICAgICYgRmlybXdhcmUteGM0MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyAgICAmIEZpcm13YXJlLXNpYW5vIFwKKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0xJQ0VOQ0UuQWJpbGlzO21kNT1iNWVlM2Y0MTA3ODBlNTY3MTFhZDQ4ZWFkYzIyYjhiYyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuYWdlcmU7bWQ1PWFmMDEzM2RlNmI0YTliMjUyMmRlZmQ1ZjE4OGFmZDMxIFwKKyAgICBmaWxlOi8vTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlO21kNT0zMGExNGM3ODIzYmVlZGFjOWZhMzljNjRmZGQwMWExMyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eDttZDU9MzE2MGMxNGRmNzIyODg5MWI4NjgwNjBlMTk1MWRmYmMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmNhMDEzMjttZDU9MjA5YjMzZTY2ZWU1YmUwNDYxZjEzZDMxZGEzOTIxOTggXAorICAgIGZpbGU6Ly9MSUNFTkNFLmNoZWxzaW9fZmlybXdhcmU7bWQ1PTgxOWFhOGMzZmE0NTNmMWIyNThlZDhkMTY4YTlkOTAzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5jdzEyMDA7bWQ1PWYwZjc3MDg2NGU3YTg0NDRhNWM1YWE5ZDEyYTNhN2VkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5lbmVfZmlybXdhcmU7bWQ1PWVkNjdmMGY2MmY4Zjc5ODEzMGMyOTY3MjBiN2QzOTIxIFwKKyAgICBmaWxlOi8vTElDRU5DRS5md19zc3RfMGYyODttZDU9NjM1MzkzMWM5ODhhZDUyODE4YWU3MzNhYzYxY2QyOTMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmdvNzAwNzttZDU9YzBiYjlmNmFhYWJhNTViMDUyOWVlOWIzMGFhNjZiZWIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmkyNDAwbTttZDU9MTRiOTAxOTY5ZTIzYzQxODgxMzI3YzBkOWU0YjdkMzYgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmlidF9maXJtd2FyZTttZDU9ZmRiZWUxZGRmZTBmYjdhYjBiMmZjZDZiNDU0YTM2NmIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLml0OTEzeDttZDU9MWZiZjcyN2JmYjZhOTQ5ODEwYzRkYmZhN2U2Y2U0ZjggXAorICAgIGZpbGU6Ly9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmU7bWQ1PTNmZDg0MjkxMWVhOTNjMjljZDMyNjc5YWEyM2UxYzg4IFwKKyAgICBmaWxlOi8vTElDRU5DRS5JbnRjU1NUMjttZDU9OWU3ZDhiZWE3NzYxMmQ3Y2M3ZDllOWI1NGI2MjMwNjIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLk1hcnZlbGw7bWQ1PTlkZGVhMTczNGE0YmFmM2M3OGQ4NDUxNTFmNDJhMzdhIFwKKyAgICBmaWxlOi8vTElDRU5DRS5td2w4MzM1O21kNT05YTYyNzFlZTBlNjQ0NDA0YjJmZjNjNjFmZDA3MDk4MyBcCisgICAgZmlsZTovL0xJQ0VOQ0UubXlyaTEwZ2VfZmlybXdhcmU7bWQ1PTQyZTMyZmI4OWY2Yjk1OWNhMjIyZTI1YWM4ZGY4ZmVkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5PTFBDO21kNT01YjkxN2Y5ZDhjMDYxOTkxYmU0ZjZmNWYxMDg3MTljZCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucGhhbmZ3O21kNT05NTRkY2VjMGUwNTFmOTQwOTgxMmI1NjFlYTc0M2JmYSBcCisgICAgZmlsZTovL0xJQ0VOQ0UucWF0X2RoODk1eGNjX2Zpcm13YXJlO21kNT05ZTdkOGJlYTc3NjEyZDdjYzdkOWU5YjU0YjYyMzA2MiBcCisgICAgZmlsZTovL0xJQ0VOQ0UucWxhMnh4eDttZDU9ZjVjZTg1MjllYzVjMTdjYjdmOTExZDI3MjFkOTBlOTEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnI4YTc3OXhfdXNiMzttZDU9NGMxNjcxNjU2MTUzMDI1ZDcwNzYxMDVhNWRhN2U0OTggXAorICAgIGZpbGU6Ly9MSUNFTkNFLnJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmU7bWQ1PTcyOGYxYTg1ZmQ1M2ZkNjdmYThkN2FmYjA4MGJjNDM1IFwKKyAgICBmaWxlOi8vTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0O21kNT1hYjJjMjY5Mjc3YzQ1NDc2ZmI0NDk2NzM5MTFhMmRmZCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucnRsd2lmaV9maXJtd2FyZS50eHQ7bWQ1PTAwZDA2Y2ZkM2VkZGQ1YTI2OTg5NDhlYWQyYWQ1NGE1IFwKKyAgICBmaWxlOi8vTElDRU5DRS50ZGE3NzA2LWZpcm13YXJlLnR4dDttZDU9ODM1OTk3Y2Y1ZTNjMTMxZDBkZGRkNjk1YzdkOTEwM2UgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnRpLWNvbm5lY3Rpdml0eTttZDU9MTg2ZTdhNDNjZjZjMjc0MjgzYWQ4MTI3MmNhMjE4ZWEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnVlYWdsZS1hdG00LWZpcm13YXJlO21kNT00ZWQ3ZWE2YjUwN2NjYzU4M2I5ZDU5NDQxNzcxNDExOCBcCisgICAgZmlsZTovL0xJQ0VOQ0UudmlhX3Z0NjY1NjttZDU9ZTQxNTk2OTRjYmE0MmQ0Mzc3YTkxMmU3OGE2ZTg1MGYgXAorICAgIGZpbGU6Ly9MSUNFTkNFLndsMTI1MTttZDU9YWQzZjgxOTIyYmI5ZTE5NzAxNGJiMTg3Mjg5ZDNiNWIgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnhjNDAwMDttZDU9MGZmNTFkMmRjNDlmY2UwNDgxNGM5MTU1MDgxMDkyZjAgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnhjNTAwMDttZDU9MWUxNzBjMTMxNzUzMjNjMzJjN2Y0ZDA5OThkNTNmNjYgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnhjNTAwMGM7bWQ1PTEyYjAyZWZhMzA0OWRiNjVkNTI0YWViNDE4ZGQ4N2NhIFwKKyAgICBmaWxlOi8vTElDRU5TRS5hbWQtdWNvZGU7bWQ1PTNhMGRlNDUxMjUzY2MxZWRiZjMwYTNjNjIxZWZmZWUzIFwKKyAgICBmaWxlOi8vTElDRU5TRS5kaWIwNzAwO21kNT1mNzQxMTgyNWM4YTU1NWExYTNlNWVhYjljYTc3MzQzMSBcCisgICAgZmlsZTovL0xJQ0VOU0UucmFkZW9uO21kNT02YzdmOTdjNmM2MmJkZDk1OTZkMDIzOGJiMjA1MTE4YyBcCisgICAgZmlsZTovL0xJQ0VOQ0Uuc2lhbm87bWQ1PTYwMmM3OWFlM2Y5OGYxZTczZDg4MGZkOWY5NDBhNDE4IFwKKyIKKworIyBUaGVzZSBhcmUgbm90IGNvbW1vbiBsaWNlbnNlcywgc2V0IE5PX0dFTkVSSUNfTElDRU5TRSBmb3IgdGhlbQorIyBzbyB0aGF0IHRoZSBsaWNlbnNlIGZpbGVzIHdpbGwgYmUgY29waWVkIGZyb20gZmV0Y2hlZCBzb3VyY2UKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1BYmlsaXNdID0gIkxJQ0VOQ0UuQWJpbGlzIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWFnZXJlXSA9ICJMSUNFTkNFLmFnZXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWF0aGVyb3NfZmlybXdhcmVdID0gIkxJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4XSA9ICJMSUNFTkNFLmJyb2FkY29tX2JjbTQzeHgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtY2EwMTMyXSA9ICJMSUNFTkNFLmNhMDEzMiIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jaGVsc2lvX2Zpcm13YXJlXSA9ICJMSUNFTkNFLmNoZWxzaW9fZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtY3cxMjAwXSA9ICJMSUNFTkNFLmN3MTIwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1lbmVfZmlybXdhcmVdID0gIkxJQ0VOQ0UuZW5lX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWZ3X3NzdF8wZjI4XSA9ICJMSUNFTkNFLmZ3X3NzdF8wZjI4IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWdvNzAwN10gPSAiTElDRU5DRS5nbzcwMDciCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaTI0MDBtXSA9ICJMSUNFTkNFLmkyNDAwbSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pYnRfZmlybXdhcmVdID0gIkxJQ0VOQ0UuaWJ0X2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWl0OTEzeF0gPSAiTElDRU5DRS5pdDkxM3giCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZV0gPSAiTElDRU5DRS5pd2x3aWZpX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLUludGNTU1QyXSA9ICJMSUNFTkNFLkludGNTU1QyIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLU1hcnZlbGxdID0gIkxJQ0VOQ0UuTWFydmVsbCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1td2w4MzM1XSA9ICJMSUNFTkNFLm13bDgzMzUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtbXlyaTEwZ2VfZmlybXdhcmVdID0gIkxJQ0VOQ0UubXlyaTEwZ2VfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtT0xQQ10gPSAiTElDRU5DRS5PTFBDIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXBoYW5md10gPSAiTElDRU5DRS5waGFuZnciCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcWF0X2RoODk1eGNjX2Zpcm13YXJlXSA9ICJMSUNFTkNFLnFhdF9kaDg5NXhjY19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1xbGEyeHh4XSA9ICJMSUNFTkNFLnFsYTJ4eHgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcjhhNzc5eF91c2IzXSA9ICJMSUNFTkNFLnI4YTc3OXhfdXNiMyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlXSA9ICJMSUNFTkNFLnJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcmFsaW5rLWZpcm13YXJlXSA9ICJMSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZV0gPSAiTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlXSA9ICJMSUNFTkNFLnRkYTc3MDYtZmlybXdhcmUudHh0IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXRpLWNvbm5lY3Rpdml0eV0gPSAiTElDRU5DRS50aS1jb25uZWN0aXZpdHkiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdWVhZ2xlLWF0bTQtZmlybXdhcmVdID0gIkxJQ0VOQ0UudWVhZ2xlLWF0bTQtZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdmlhX3Z0NjY1Nl0gPSAiTElDRU5DRS52aWFfdnQ2NjU2IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXdsMTI1MV0gPSAiTElDRU5DRS53bDEyNTEiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM0MDAwXSA9ICJMSUNFTkNFLnhjNDAwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzUwMDBdID0gIkxJQ0VOQ0UueGM1MDAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNTAwMGNdID0gIkxJQ0VOQ0UueGM1MDAwYyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1hbWQtdWNvZGVdID0gIkxJQ0VOU0UuYW1kLXVjb2RlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWRpYjA3MDBdID0gIkxJQ0VOU0UuZGliMDcwMCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWRlb25dID0gIkxJQ0VOU0UucmFkZW9uIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXNpYW5vXSA9ICJMSUNFTkNFLnNpYW5vIgorCitTUkNSRVYgPSAiNzVjYzNlZjhiYTY3MTJmZDcyYzA3M2IxN2E3OTAyODIxMzZjYzc0MyIKK1BFID0gIjEiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2Zpcm13YXJlL2xpbnV4LWZpcm13YXJlLmdpdCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAgJHtEfS9saWIvZmlybXdhcmUvCisJY3AgLXIgKiAke0R9L2xpYi9maXJtd2FyZS8KKworCSMgQXZvaWQgTWFrZWZpbGUgdG8gYmUgZGVwbG95ZWQKKwlybSAke0R9L2xpYi9maXJtd2FyZS9NYWtlZmlsZQorCisJIyBSZW1vdmUgdW5idWlsZCBmaXJtd2FyZSB3aGljaCBuZWVkcyBjbWFrZSBhbmQgYmFzaAorCXJtICR7RH0vbGliL2Zpcm13YXJlL2Nhcmw5MTcwZncgLXJmCisKKwkjIFJlbW92ZSBwb2ludGxlc3MgYmFzaCBzY3JpcHQKKwlybSAke0R9L2xpYi9maXJtd2FyZS9jb25maWd1cmUKKworCSMgTGliZXJ0YXMgc2Q4Njg2CisJbG4gLXNmIGxpYmVydGFzL3NkODY4Nl92OS5iaW4gJHtEfS9saWIvZmlybXdhcmUvc2Q4Njg2LmJpbgorCWxuIC1zZiBsaWJlcnRhcy9zZDg2ODZfdjlfaGVscGVyLmJpbiAke0R9L2xpYi9maXJtd2FyZS9zZDg2ODZfaGVscGVyLmJpbgorCisJIyBmaXh1cCB3bDEyeHggbG9jYXRpb24sIGFmdGVyIDIuNi4zNyB0aGUga2VybmVsIHNlYXJjaGVzIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvciBpdAorCSggY2QgJHtEfS9saWIvZmlybXdhcmUgOyBsbiAtc2YgdGktY29ubmVjdGl2aXR5LyogLiApCit9CisKKworUEFDS0FHRVMgPSsgIiR7UE59LXJhbGluay1saWNlbnNlICR7UE59LXJhbGluayBcCisgICAgICAgICAgICAgJHtQTn0tcmFkZW9uLWxpY2Vuc2UgJHtQTn0tcmFkZW9uIFwKKyAgICAgICAgICAgICAke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UgJHtQTn0tc2Q4Njg2ICR7UE59LXNkODc4NyAke1BOfS1zZDg3OTcgXAorICAgICAgICAgICAgICR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlICR7UE59LXdsMTJ4eCAke1BOfS13bDE4eHggXAorICAgICAgICAgICAgICR7UE59LXZ0NjY1Ni1saWNlbnNlICR7UE59LXZ0NjY1NiBcCisgICAgICAgICAgICAgJHtQTn0tcnRsLWxpY2Vuc2UgJHtQTn0tcnRsODE5MmN1ICR7UE59LXJ0bDgxOTJjZSAke1BOfS1ydGw4MTkyc3UgXAorICAgICAgICAgICAgICR7UE59LWJyb2FkY29tLWxpY2Vuc2UgJHtQTn0tYmNtNDMyOSAke1BOfS1iY200MzMwICR7UE59LWJjbTQzMzQgXAorICAgICAgICAgICAgICR7UE59LWF0aGVyb3MtbGljZW5zZSAke1BOfS1hcjkxNzAgJHtQTn0tYXIzayAke1BOfS1hdGg2ayAke1BOfS1hdGg5ayBcCisgICAgICAgICAgICAgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktbGljZW5zZSAke1BOfS1pd2x3aWZpLTEzNS02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTMxNjAtNyAke1BOfS1pd2x3aWZpLTMxNjAtOCAke1BOfS1pd2x3aWZpLTMxNjAtOSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDAwLTQgJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjAwMGcyYi01ICR7UE59LWl3bHdpZmktNjAwMGcyYi02IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwNTAtNCAke1BOfS1pd2x3aWZpLTYwNTAtNSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjYwLTcgJHtQTn0taXdsd2lmaS03MjYwLTggJHtQTn0taXdsd2lmaS03MjYwLTkgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNzI2NS04ICR7UE59LWl3bHdpZmktNzI2NS05IFwKKyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgJHtQTn0tbGljZW5zZSBcCisgICAgICAgICAgICAgIgorCisjIEZvciBhdGhlcm9zCitMSUNFTlNFXyR7UE59LWFyOTE3MCA9ICJGaXJtd2FyZS1hdGhlcm9zX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1hcjNrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWF0aDZrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWF0aDlrID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LWF0aGVyb3MtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuYXRoZXJvc19maXJtd2FyZSIKK0ZJTEVTXyR7UE59LWFyOTE3MCA9ICIgXAorICAvbGliL2Zpcm13YXJlL2FyOTE3MCouZncgXAorIgorRklMRVNfJHtQTn0tYXIzayA9ICIgXAorICAvbGliL2Zpcm13YXJlL2FyM2sgXAorIgorRklMRVNfJHtQTn0tYXRoNmsgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9hdGg2ayBcCisiCitGSUxFU18ke1BOfS1hdGg5ayA9ICIgXAorICAvbGliL2Zpcm13YXJlL2FyOTI3MS5mdyBcCisgIC9saWIvZmlybXdhcmUvYXI3MDEwKi5mdyBcCisgIC9saWIvZmlybXdhcmUvaHRjXzkyNzEuZncgXAorICAvbGliL2Zpcm13YXJlL2h0Y183MDEwLmZ3IFwKKyIKKworUkRFUEVORFNfJHtQTn0tYXI5MTcwICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1hcjNrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1hdGg2ayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYXRoOWsgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKKworIyBGb3IgcmFsaW5rCitMSUNFTlNFXyR7UE59LXJhbGluayA9ICJGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LXJhbGluay1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5yYWxpbmstZmlybXdhcmUudHh0IgorRklMRVNfJHtQTn0tcmFsaW5rID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnQqLmJpbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXJhbGluayArPSAiJHtQTn0tcmFsaW5rLWxpY2Vuc2UiCisKKyMgRm9yIHJhZGVvbgorTElDRU5TRV8ke1BOfS1yYWRlb24gPSAiRmlybXdhcmUtcmFkZW9uIgorCitGSUxFU18ke1BOfS1yYWRlb24tbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOU0UucmFkZW9uIgorRklMRVNfJHtQTn0tcmFkZW9uID0gIiBcCisgIC9saWIvZmlybXdhcmUvcmFkZW9uIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcmFkZW9uICs9ICIke1BOfS1yYWRlb24tbGljZW5zZSIKKworIyBGb3IgbWFydmVsbAorTElDRU5TRV8ke1BOfS1zZDg2ODYgPSAiRmlybXdhcmUtTWFydmVsbCIKK0xJQ0VOU0VfJHtQTn0tc2Q4Nzg3ID0gIkZpcm13YXJlLU1hcnZlbGwiCitMSUNFTlNFXyR7UE59LXNkODc5NyA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorCitGSUxFU18ke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLk1hcnZlbGwiCitGSUxFU18ke1BOfS1zZDg2ODYgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9saWJlcnRhcy9zZDg2ODZfdjkqIFwKKyAgL2xpYi9maXJtd2FyZS9zZDg2ODYqIFwKKyIKK0ZJTEVTXyR7UE59LXNkODc4NyA9ICIgXAorICAvbGliL2Zpcm13YXJlL21ydmwvc2Q4Nzg3X3VhcHN0YS5iaW4gXAorIgorRklMRVNfJHtQTn0tc2Q4Nzk3ID0gIiBcCisgIC9saWIvZmlybXdhcmUvbXJ2bC9zZDg3OTdfdWFwc3RhLmJpbiBcCisiCisKK1JERVBFTkRTXyR7UE59LXNkODY4NiArPSAiJHtQTn0tbWFydmVsbC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tc2Q4Nzg3ICs9ICIke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1zZDg3OTcgKz0gIiR7UE59LW1hcnZlbGwtbGljZW5zZSIKKworIyBGb3IgcnRsCitMSUNFTlNFXyR7UE59LXJ0bDgxOTJjdSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1ydGw4MTkyY2UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tcnRsODE5MnN1ID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCisKK0ZJTEVTXyR7UE59LXJ0bC1saWNlbnNlID0gIiBcCisgIC9saWIvZmlybXdhcmUvTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dCBcCisiCitGSUxFU18ke1BOfS1ydGw4MTkyY3UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydGx3aWZpL3J0bDgxOTJjdWZ3LmJpbiBcCisiCitGSUxFU18ke1BOfS1ydGw4MTkyY2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydGx3aWZpL3J0bDgxOTJjZncuYmluIFwKKyIKK0ZJTEVTXyR7UE59LXJ0bDgxOTJzdSA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0bHdpZmkvcnRsODcxMnUuYmluIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcnRsODE5MmNlICs9ICIke1BOfS1ydGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXJ0bDgxOTJjdSArPSAiJHtQTn0tcnRsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1ydGw4MTkyc3UgPSAiJHtQTn0tcnRsLWxpY2Vuc2UiCisKKyMgRm9yIHRpLWNvbm5lY3Rpdml0eQorTElDRU5TRV8ke1BOfS13bDEyeHggPSAiRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IgorTElDRU5TRV8ke1BOfS13bDE4eHggPSAiRmlybXdhcmUtdGktY29ubmVjdGl2aXR5IgorCitGSUxFU18ke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UudGktY29ubmVjdGl2aXR5IgorRklMRVNfJHtQTn0td2wxMnh4ID0gIiBcCisgIC9saWIvZmlybXdhcmUvd2wxMiogXAorICAvbGliL2Zpcm13YXJlL1RJKiBcCisgIC9saWIvZmlybXdhcmUvdGktY29ubmVjdGl2aXR5IFwKKyIKK0ZJTEVTXyR7UE59LXdsMTh4eCA9ICIgXAorICAvbGliL2Zpcm13YXJlL3dsMTgqIFwKKyAgL2xpYi9maXJtd2FyZS9USSogXAorICAvbGliL2Zpcm13YXJlL3RpLWNvbm5lY3Rpdml0eSBcCisiCisKK1JERVBFTkRTXyR7UE59LXdsMTJ4eCA9ICIke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXdsMTh4eCA9ICIke1BOfS10aS1jb25uZWN0aXZpdHktbGljZW5zZSIKKworIyBGb3IgdnQ2NjU2CitMSUNFTlNFXyR7UE59LXZ0NjY1NiA9ICJGaXJtd2FyZS12aWFfdnQ2NjU2IgorCitGSUxFU18ke1BOfS12dDY2NTYtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UudmlhX3Z0NjY1NiIKK0ZJTEVTXyR7UE59LXZ0NjY1NiA9ICIgXAorICAvbGliL2Zpcm13YXJlL3ZudHd1c2IuZncgXAorIgorCitSREVQRU5EU18ke1BOfS12dDY2NTYgPSAiJHtQTn0tdnQ2NjU2LWxpY2Vuc2UiCisKKyMgRm9yIGJyb2FkY29tCisjCisjIFdBUk5JTkc6IFRoZSBBTFRFUk5BVElWRV8qIHZhcmlhYmxlcyBhcmUgbm90IHVzaW5nICR7UE59IGJlY2F1c2Ugb2YKKyMgYSBidWcgaW4gYml0YmFrZTsgd2hlbiB0aGlzIGlzIGZpeGVkIGFuZCBiaXRiYWtlIGxlYXJucyBob3cgdG8gcHJvcGVyCisjIHBhc3MgdmFyaWFibGUgZmxhZ3Mgd2l0aCBleHBhbnNpb24gd2UgY2FuIHJld29yayB0aGlzIHBhdGNoLgorCitMSUNFTlNFXyR7UE59LWJjbTQzMjkgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKK0xJQ0VOU0VfJHtQTn0tYmNtNDMzMCA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorTElDRU5TRV8ke1BOfS1iY200MzM0ID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCisKK0ZJTEVTXyR7UE59LWJyb2FkY29tLWxpY2Vuc2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLmJyb2FkY29tX2JjbTQzeHggXAorIgorRklMRVNfJHtQTn0tYmNtNDMyOSA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzI5LXNkaW8uYmluIFwKKyIKK0ZJTEVTXyR7UE59LWJjbTQzMzAgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzMC1zZGlvLmJpbiBcCisiCitGSUxFU18ke1BOfS1iY200MzM0ID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4gXAorIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYy1zZGlvLmJpbiIKKworQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDMzNCA9ICJicmNtZm1hYy1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1RBUkdFVF9saW51eC1maXJtd2FyZS1iY200MzM0W2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzM0LXNkaW8uYmluIgorQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDMyOSA9ICJicmNtZm1hYy1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1RBUkdFVF9saW51eC1maXJtd2FyZS1iY200MzI5W2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzI5LXNkaW8uYmluIgorQUxURVJOQVRJVkVfbGludXgtZmlybXdhcmUtYmNtNDMzMCA9ICJicmNtZm1hYy1zZGlvLmJpbiIKK0FMVEVSTkFUSVZFX1RBUkdFVF9saW51eC1maXJtd2FyZS1iY200MzMwW2JyY21mbWFjLXNkaW8uYmluXSA9ICIvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzMwLXNkaW8uYmluIgorCitSREVQRU5EU18ke1BOfS1iY200MzI5ICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYmNtNDMzMCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWJjbTQzMzQgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCisKKyMgRm9yIGl3bHdpZmkKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0xMzUtNiAgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0zMTYwLTcgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0zMTYwLTggICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS0zMTYwLTkgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwLTQgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDUwLTQgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS02MDUwLTUgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjYwLTcgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjYwLTggICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjYwLTkgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjY1LTggICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0taXdsd2lmaS03MjY1LTkgICAgPSAiRmlybXdhcmUtaXdsd2lmaV9maXJtd2FyZSIKKworRklMRVNfJHtQTn0taXdsd2lmaS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5pd2x3aWZpX2Zpcm13YXJlIgorRklMRVNfJHtQTn0taXdsd2lmaS0xMzUtNiA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMTM1LTYudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTMxNjAtNyA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMzE2MC03LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS0zMTYwLTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTMxNjAtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMzE2MC05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0zMTYwLTkudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDAtNCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMC00LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmEtNS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJhLTYudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYi01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmItNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjA1MC00ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDUwLTQudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwNTAtNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjA1MC01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjYwLTcgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjAtNy51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2MC04ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjYwLTgudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjAtOSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2MC05LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjY1LTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjUtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2NS05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjY1LTkudWNvZGUiCisKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMTM1LTYgICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMzE2MC03ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMzE2MC04ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktMzE2MC05ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMC00ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS02ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYS01ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjAwMGcyYi02ID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjA1MC00ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNjA1MC01ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2MC03ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2MC04ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2MC05ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2NS04ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWl3bHdpZmktNzI2NS05ICAgID0gIiR7UE59LWl3bHdpZmktbGljZW5zZSIKKworIyBGb3Igb3RoZXIgZmlybXdhcmVzCisjIE1heWJlIHNwbGl0IG91dCB0byBzZXBhcmF0ZSBwYWNrYWdlcyB3aGVuIG5lZWRlZC4KK0xJQ0VOU0VfJHtQTn0gPSAiXAorICAgIEZpcm13YXJlLUFiaWxpcyBcCisgICAgJiBGaXJtd2FyZS1hZ2VyZSBcCisgICAgJiBGaXJtd2FyZS1hbWQtdWNvZGUgXAorICAgICYgRmlybXdhcmUtY2EwMTMyIFwKKyAgICAmIEZpcm13YXJlLWNoZWxzaW9fZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtY3cxMjAwIFwKKyAgICAmIEZpcm13YXJlLWRpYjA3MDAgXAorICAgICYgRmlybXdhcmUtZW5lX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWZ3X3NzdF8wZjI4IFwKKyAgICAmIEZpcm13YXJlLWdvNzAwNyBcCisgICAgJiBGaXJtd2FyZS1pMjQwMG0gXAorICAgICYgRmlybXdhcmUtaWJ0X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLWl0OTEzeCBcCisgICAgJiBGaXJtd2FyZS1td2w4MzM1IFwKKyAgICAmIEZpcm13YXJlLW15cmkxMGdlX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLU9MUEMgXAorICAgICYgRmlybXdhcmUtcGhhbmZ3IFwKKyAgICAmIEZpcm13YXJlLXFhdF9kaDg5NXhjY19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1xbGEyeHh4IFwKKyAgICAmIEZpcm13YXJlLXI4YTc3OXhfdXNiMyBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmtfYV9tZWRpYXRla19jb21wYW55X2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXRkYTc3MDYtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdWVhZ2xlLWF0bTQtZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtd2wxMjUxIFwKKyAgICAmIEZpcm13YXJlLXhjNDAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwYyBcCisiCitGSUxFU18ke1BOfS1saWNlbnNlICs9ICIvbGliL2Zpcm13YXJlL0xJQ0VOKiIKK0ZJTEVTXyR7UE59ICs9ICIvbGliL2Zpcm13YXJlLyoiCitSREVQRU5EU18ke1BOfSArPSAiJHtQTn0tbGljZW5zZSIKKworIyBNYWtlIGxpbnV4LWZpcm13YXJlIGRlcGVuZCBvbiBhbGwgb2YgdGhlIHNwbGl0LW91dCBwYWNrYWdlcy4KK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBmaXJtd2FyZV9wa2dzID0gb2UudXRpbHMucGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfbGludXgtZmlybXdhcmUnLCAnICcgKyAnICcuam9pbihmaXJtd2FyZV9wa2dzKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NmJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnMuaW5jCkBAIC0wLDAgKzEsNzUgQEAKK1NVTU1BUlkgPSAiU2FuaXRpemVkIHNldCBvZiBrZXJuZWwgaGVhZGVycyBmb3IgdGhlIEMgbGlicmFyeSdzIHVzZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjICAgICAgICAgICAgICAgICAgICAgICAgUExFQVNFIFJFQUQgCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFlvdSdyZSBwcm9iYWJseSBsb29raW5nIGhlcmUgdGhpbmtpbmcgeW91IG5lZWQgdG8gY3JlYXRlIHNvbWUgbmV3IGNvcHkKKyMgb2YgbGludXgtbGliYy1oZWFkZXJzIHNpbmNlIHlvdSBoYXZlIHlvdXIgb3duIGN1c3RvbSBrZXJuZWwuIFRvIHB1dCAKKyMgdGhpcyBzaW1wbHksIHlvdSBETyBOT1QuCisjCisjIFdoeT8gVGhlc2UgaGVhZGVycyBhcmUgdXNlZCB0byBidWlsZCB0aGUgbGliYy4gSWYgeW91IGN1c3RvbWlzZSB0aGUgCisjIGhlYWRlcnMgeW91IGFyZSBjdXN0b21pc2luZyB0aGUgbGliYyBhbmQgdGhlIGxpYmMgYmVjb21lcyBtYWNoaW5lCisjIHNwZWNpZmljLiBNb3N0IHBlb3BsZSBkbyBub3QgYWRkIGN1c3RvbSBsaWJjIGV4dGVuc2lvbnMgdG8gdGhlIGtlcm5lbAorIyBhbmQgaGF2ZSBhIG1hY2hpbmUgc3BlY2lmaWMgbGliYy4KKyMKKyMgQnV0IHlvdSBoYXZlIHNvbWUga2VybmVsIGhlYWRlcnMgeW91IG5lZWQgZm9yIHNvbWUgZHJpdmVyPyBUaGF0IGlzIGZpbmUKKyMgYnV0IGdldCB0aGVtIGZyb20gU1RBR0lOR19LRVJORUxfRElSIHdoZXJlIHRoZSBrZXJuZWwgaW5zdGFsbHMgaXRzZWxmLgorIyBUaGlzIHdpbGwgbWFrZSB0aGUgcGFja2FnZSB1c2luZyB0aGVtIG1hY2hpbmUgc3BlY2lmaWMgYnV0IHRoaXMgaXMgbXVjaAorIyBiZXR0ZXIgdGhhbiBoYXZpbmcgYSBtYWNoaW5lIHNwZWNpZmljIEMgbGlicmFyeS4gVGhpcyBkb2VzIG1lYW4geW91ciAKKyMgcmVjaXBlIG5lZWRzIGEgREVQRU5EUyArPSAidmlydHVhbC9rZXJuZWwiIGJ1dCBhZ2FpbiwgdGhhdCBpcyBmaW5lIGFuZAorIyBtYWtlcyB0b3RhbCBzZW5zZS4KKyMKKyMgVGhlcmUgY2FuIGFsc28gYmUgYSBjYXNlIHdoZXJlIHlvdXIga2VybmVsIGV4dHJlbWVseSBvbGQgYW5kIHlvdSB3YW50CisjIGFuIG9sZGVyIGxpYmMgQUJJIGZvciB0aGF0IG9sZCBrZXJuZWwuIFRoZSBoZWFkZXJzIGluc3RhbGxlZCBieSB0aGlzCisjIHJlY2lwZSBzaG91bGQgc3RpbGwgYmUgYSBzdGFuZGFyZCBtYWlubGluZSBrZXJuZWwsIG5vdCB5b3VyIG93biBjdXN0b20gCisjIG9uZS4KKyMKKyMgLS0gUlAKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDciCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgbWFqb3IgPSBkLmdldFZhcigiUFYiLFRydWUpLnNwbGl0KCcuJylbMF0KKyAgICBpZiBtYWpvciA9PSAiMyI6CisgICAgICAgIGQuc2V0VmFyKCJIRUFERVJfRkVUQ0hfVkVSIiwgIjMuMCIpCisgICAgZWxpZiBtYWpvciA9PSAiNCI6CisgICAgICAgIGQuc2V0VmFyKCJIRUFERVJfRkVUQ0hfVkVSIiwgIjQueCIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiMi42IikKK30KKworaW5oZXJpdCBrZXJuZWwtYXJjaAorCitLT1JHX0FSQ0hJVkVfQ09NUFJFU1NJT04gPz0gImJ6MiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2tlcm5lbC92JHtIRUFERVJfRkVUQ0hfVkVSfS9saW51eC0ke1BWfS50YXIuJHtLT1JHX0FSQ0hJVkVfQ09NUFJFU1NJT059IgorCitTID0gIiR7V09SS0RJUn0vbGludXgtJHtQVn0iCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwlvZV9ydW5tYWtlIGFsbG5vY29uZmlnCit9CisKK2RvX2NvbXBpbGUgKCkgeworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaGVhZGVyc19pbnN0YWxsIElOU1RBTExfSERSX1BBVEg9JHtEfSR7ZXhlY19wcmVmaXh9CisJIyBLZXJuZWwgc2hvdWxkIG5vdCBiZSBleHBvcnRpbmcgdGhpcyBoZWFkZXIKKwlybSAtZiAke0R9JHtleGVjX3ByZWZpeH0vaW5jbHVkZS9zY3NpL3Njc2kuaAorCisJIyBUaGUgLi5pbnN0YWxsLmNtZCBjb25mbGljdHMgYmV0d2VlbiB2YXJpb3VzIGNvbmZpZ3VyZSBydW5zCisJZmluZCAke0R9JHtpbmNsdWRlZGlyfSAtbmFtZSAuLmluc3RhbGwuY21kIHwgeGFyZ3Mgcm0gLWYKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCisKKyNERVBFTkRTID0gImNyb3NzLWxpbmthZ2UiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0RFUEVORFMgKz0gInVuaWZkZWYtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180LjEuYmIKQEAgLTAsMCArMSw3IEBACitLT1JHX0FSQ0hJVkVfQ09NUFJFU1NJT04gPSAieHoiCisKK3JlcXVpcmUgbGludXgtbGliYy1oZWFkZXJzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiZmU5ZGMwZjY3MjlmMzY0MDBlYTgxYWE0MWQ2MTRjMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2FmNTFmMDg1YWFjMWUxY2VhNGQwMGRiYmYzMDkzZWFkMDdiNTUxZmMwN2IzMWIyYTk4OWMwNWY4ZWE3MmQ5ZiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtZGV2c3JjLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmM4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIKQEAgLTAsMCArMSw3NiBAQAorU1VNTUFSWSA9ICJMaW51eCBrZXJuZWwgRGV2ZWxvcG1lbnQgU291cmNlIgorREVTQ1JJUFRJT04gPSAiRGV2ZWxvcG1lbnQgc291cmNlIGxpbnV4IGtlcm5lbC4gV2hlbiBidWlsdCwgdGhpcyByZWNpcGUgcGFja2FnZXMgdGhlIFwKK3NvdXJjZSBvZiB0aGUgcHJlZmVycmVkIHZpcnR1YWwva2VybmVsIHByb3ZpZGVyIGFuZCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIGZ1bGwga2VybmVsIFwKK2RldmVsb3BtZW50IG9yIGV4dGVybmFsIG1vZHVsZSBidWlsZHMiCisKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlCisKKyMgV2hpbHN0IG5vdCBhIG1vZHVsZSwgdGhpcyBlbnN1cmVzIHdlIGRvbid0IGdldCBtdWx0aWxpYiBleHRlbmRlZCAod2hpY2ggd291bGQgbWFrZSBubyBzZW5zZSkKK2luaGVyaXQgbW9kdWxlLWJhc2UKKworIyBXZSBuZWVkIHRoZSBrZXJuZWwgdG8gYmUgc3RhZ2VkICh1bnBhY2tlZCwgcGF0Y2hlZCBhbmQgY29uZmlndXJlZCkgYmVmb3JlCisjIHdlIGNhbiBncmFiIHRoZSBzb3VyY2UgYW5kIG1ha2UgdGhlIHNvdXJjZSBwYWNrYWdlLiBXZSBhbHNvIG5lZWQgdGhlIGJpdHMgZnJvbQorIyAke0J9IG5vdCB0byBjaGFuZ2Ugd2hpbGUgd2UgaW5zdGFsbCwgc28gdmlydHVhbC9rZXJuZWwgbXVzdCBmaW5pc2ggZG9fY29tcGlsZS4KK2RvX2luc3RhbGxbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorIyBOZWVkIHRoZSBzb3VyY2UsIG5vdCBqdXN0IHRoZSBvdXRwdXQgb2YgcG9wdWxhdGVfc3lzcm9vdAorZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9faW5zdGFsbCIKKworIyBUaGVyZSdzIG5vdGhpbmcgdG8gZG8gaGVyZSwgZXhjZXB0IGluc3RhbGwgdGhlIHNvdXJjZSB3aGVyZSB3ZSBjYW4gcGFja2FnZSBpdAorZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCisjIERlZmluZSB3aGVyZSB0aGUga2VybmVsIGhlYWRlcnMgYXJlIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0IGFzIHdlbGwgYXMgd2hlcmUKKyMgdGhleSBhcmUgc3RhZ2VkLgorS0VSTkVMX1NSQ19QQVRIID0gIi91c3Ivc3JjL2tlcm5lbCIKK1MgPSAiJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorQiA9ICIke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSIKKworS0VSTkVMX1ZFUlNJT04gPSAiJHtAZ2V0X2tlcm5lbHZlcnNpb25faGVhZGVycygnJHtTfScpfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAga2VybmVsZGlyPSR7RH0ke0tFUk5FTF9TUkNfUEFUSH0KKyAgICAgICAgaW5zdGFsbCAtZCAka2VybmVsZGlyCisKKyAgICAgICAgIworICAgICAgICAjIENvcHkgdGhlIHN0YWdpbmcgZGlyIHNvdXJjZSAoYW5kIG1vZHVsZSBidWlsZCBzdXBwb3J0KSBpbnRvIHRoZSBkZXZzcmMgc3RydWN0dXJlLgorICAgICAgICAjIFdlIGNhbiBrZWVwIHRoaXMgY29weSBzaW1wbGUgYW5kIHRha2UgZXZlcnl0aGluZywgc2luY2UgYSB3ZSdsbCBjbGVhbiB1cCBhbnkgYnVpbGQKKyAgICAgICAgIyBhcnRpZmFjdHMgYWZ0ZXJ3YXJkcywgYW5kIHRoZSBleHRyYSBpL28gaXMgbm90IHNpZ25pZmljYW50CisgICAgICAgICMKKyAgICAgICAgY2QgJHtCfQorICAgICAgICBmaW5kIC4gLXR5cGUgZCAtbmFtZSAnLmdpdConIC1wcnVuZSAtbyAtcGF0aCAnLmRlYnVnJyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGtlcm5lbGRpcgorICAgICAgICBjZCAke1N9CisgICAgICAgIGZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC10eXBlIGYgLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICRrZXJuZWxkaXIKKworICAgICAgICAjIEV4cGxpY2l0bHkgc2V0IEtCVUlMRF9PVVRQVVQgdG8gZW5zdXJlIHRoYXQgdGhlIGltYWdlIGRpcmVjdG9yeSBpcyBjbGVhbmVkIGFuZCBub3QKKyAgICAgICAgIyBUaGUgbWFpbiBidWlsZCBhcnRpZmFjdHMuIFdlIGNsZWFuIHRoZSBkaXJlY3RvcnkgdG8gYXZvaWQgUUEgZXJyb3JzIG9uIG1pc21hdGNoZWQKKyAgICAgICAgIyBhcmNoaXRlY3R1cmUgKHNpbmNlIHNjcmlwdHMgYW5kIGhlbHBlcnMgYXJlIG5hdGl2ZSBmb3JtYXQpLgorICAgICAgICBLQlVJTERfT1VUUFVUPSIka2VybmVsZGlyIgorICAgICAgICBvZV9ydW5tYWtlIC1DICRrZXJuZWxkaXIgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgY2xlYW4gX21ycHJvcGVyX3NjcmlwdHMKKworICAgICAgICAjIEFzIG9mIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDMuMC4xLCB0aGUgY2xlYW4gdGFyZ2V0IHJlbW92ZXMKKyAgICAgICAgIyBhcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vIHdoaWNoIGlzIHByZXNlbnQgaW4KKyAgICAgICAgIyBLQlVJTERfTERGTEFHU19NT0RVTEUsIG1ha2luZyBpdCByZXF1aXJlZCB0byBidWlsZCBleHRlcm5hbCBtb2R1bGVzLgorICAgICAgICBpZiBbICR7QVJDSH0gPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIG1rZGlyIC1wICRrZXJuZWxkaXIvYXJjaC9wb3dlcnBjL2xpYi8KKyAgICAgICAgICAgICAgICBjcCAke0J9L2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vCisgICAgICAgIGZpCisKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKyMgRW5zdXJlIHdlIGRvbid0IHJhY2UgYWdhaW5zdCAibWFrZSBzY3JpcHRzIiBkdXJpbmcgY3BpbworZG9faW5zdGFsbFtsb2NrZmlsZXNdID0gIiR7VE1QRElSfS9rZXJuZWwtc2NyaXB0cy5sb2NrIgorCitQQUNLQUdFUyA9ICJrZXJuZWwtZGV2c3JjIgorRklMRVNfJHtQTn0gPSAiJHtLRVJORUxfU1JDX1BBVEh9IgorUkRFUEVORFNfJHtQTn0gPSAiYmMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR0Yi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzYTVlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYwpAQCAtMCwwICsxLDc5IEBACisjIFN1cHBvcnQgZm9yIGRldmljZSB0cmVlIGdlbmVyYXRpb24KK0ZJTEVTX2tlcm5lbC1kZXZpY2V0cmVlID0gIi8ke0tFUk5FTF9JTUFHRURFU1R9L2RldmljZXRyZWUqIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGQuYXBwZW5kVmFyKCJQQUNLQUdFUyIsICIga2VybmVsLWRldmljZXRyZWUiKQorfQorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJZmkKKwkJCW9lX3J1bm1ha2UgJHtEVEJ9CisJCWRvbmUKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJZmkKKwkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuZHRiYAorCQkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290L2R0cy8ke0RUQn0iCisJCQlpZiBbICEgLWUgIiR7RFRCX1BBVEh9IiBdOyB0aGVuCisJCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvJHtEVEJ9IgorCQkJZmkKKwkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQlkb25lCisJZmkKK30KKworZG9fZGVwbG95X2FwcGVuZCgpIHsKKwlpZiB0ZXN0IC1uICIke0tFUk5FTF9ERVZJQ0VUUkVFfSI7IHRoZW4KKwkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCWlmIGVjaG8gJHtEVEJ9IHwgZ3JlcCAtcSAnL2R0cy8nOyB0aGVuCisJCQkJYmJ3YXJuICIke0RUQn0gY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdGhlIGR0cyBmaWxlLCBidXQgb25seSB0aGUgZHRiIG5hbWUgc2hvdWxkIGJlIHVzZWQuIgorCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJZmkKKwkJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCfSAuZHRiYAorCQkJRFRCX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfQkFTRV9OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCisJCQlmaQorCQkJaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke0RUQl9QQVRIfSAke0RFUExPWURJUn0vJHtEVEJfTkFNRX0uZHRiCisJCQljZCAke0RFUExPWURJUn0KKwkJCWxuIC1zZiAke0RUQl9OQU1FfS5kdGIgJHtEVEJfU1lNTElOS19OQU1FfS5kdGIKKwkJCWNkIC0KKwkJZG9uZQorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtZGV2aWNldHJlZSAoKSB7CisJY2QgLyR7S0VSTkVMX0lNQUdFREVTVH0KKwlmb3IgRFRCX0ZJTEUgaW4gJHtLRVJORUxfREVWSUNFVFJFRX0KKwlkbworCQlEVEJfQkFTRV9OQU1FPWBiYXNlbmFtZSAke0RUQl9GSUxFfSB8IGF3ayAtRiAiLiIgJ3twcmludCAkMX0nYAorCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQl1cGRhdGUtYWx0ZXJuYXRpdmVzIC0taW5zdGFsbCAvJHtLRVJORUxfSU1BR0VERVNUfS8ke0RUQl9CQVNFX05BTUV9LmR0YiAke0RUQl9CQVNFX05BTUV9LmR0YiBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJZG9uZQorfQorCitwa2dfcG9zdHJtX2tlcm5lbC1kZXZpY2V0cmVlICgpIHsKKwljZCAvJHtLRVJORUxfSU1BR0VERVNUfQorCWZvciBEVEJfRklMRSBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfQorCWRvCisJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCX0ZJTEV9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCisJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgJHtEVEJfQkFTRV9OQU1FfS5kdGIgZGV2aWNldHJlZS0ke0RUQl9TWU1MSU5LX05BTUV9LmR0YiAke0tFUk5FTF9QUklPUklUWX0gfHwgdHJ1ZQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGU0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15LmJiCkBAIC0wLDAgKzEsNTQgQEAKK1NVTU1BUlkgPSAiRHVtbXkgTGludXgga2VybmVsIgorREVTQ1JJUFRJT04gPSAiRHVtbXkgTGludXgga2VybmVsLCB0byBiZSBzZWxlY3RlZCBhcyB0aGUgcHJlZmVycmVkIFwKK3Byb3ZpZGVyIGZvciB2aXJ0dWFsL2tlcm5lbCB0byBzYXRpc2Z5IGRlcGVuZGVuY2llcyBmb3Igc2l0dWF0aW9ucyBcCit3aGVyZSB5b3Ugd2lzaCB0byBidWlsZCB0aGUga2VybmVsIGV4dGVybmFsbHkgZnJvbSB0aGUgYnVpbGQgc3lzdGVtLiIKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS9DT1BZSU5HLkdQTDttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1tb2R1bGUtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWltYWdlLS4qIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1maXJtd2FyZS0uKiIKKworUEFDS0FHRVMgKz0gImtlcm5lbC1tb2R1bGVzIgorRklMRVNfa2VybmVsLW1vZHVsZXMgPSAiIgorQUxMT1dfRU1QVFlfa2VybmVsLW1vZHVsZXMgPSAiMSIKK0RFU0NSSVBUSU9OX2tlcm5lbC1tb2R1bGVzID0gIktlcm5lbCBtb2R1bGVzIG1ldGEgcGFja2FnZSIKKworI0NPTVBBVElCTEVfTUFDSElORSA9ICJ5b3VyX21hY2hpbmUiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZpbGU6Ly9DT1BZSU5HLkdQTCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29uZmlndXJlKCkgeworCToKK30KKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19zaGFyZWRfd29ya2RpciAoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCToKK30KKworZG9fYnVuZGxlX2luaXRyYW1mcygpIHsKKwk6Cit9CisKK2RvX2RlcGxveSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgYnVuZGxlX2luaXRyYW1mcyBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19kZXBsb3kKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwKK2FkZHRhc2sgc2hhcmVkX3dvcmtkaXIgYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS9DT1BZSU5HLkdQTCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkvQ09QWUlORy5HUEwKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmU0ODJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmIKQEAgLTAsMCArMSw1MSBAQAorIyBUaGlzIHJlY2lwZSB0cmFja3MgdGhlIGxpbnV4LXlvY3RvLWRldiByZXBvc2l0b3J5IGFzIGl0cyB1cHN0cmVhbSBzb3VyY2UuCisjIFNpbmNlIHRoaXMgdHJlZSBpcyBmcmVxdWVudGx5IHVwZGF0ZWQsIGFuZCBwZXJpb2RpY2FsbHkgcmVidWlsdCwgQVVUT1JFViBpcworIyB1c2VkIHRvIHRyYWNrIGl0cyBjb250ZW50cy4KKyMKKyMgVGhpcyByZWNpcGUgaXMganVzdCBsaWtlIG90aGVyIGxpbnV4LXlvY3RvIHZhcmlhbnRzLCB3aXRoIHRoZSBvbmx5IGRpZmZlcmVuY2UKKyMgYmVpbmcgdGhhdCB0byBhdm9pZCBuZXR3b3JrIGFjY2VzcyBkdXJpbmcgaW5pdGlhbCBwYXJzaW5nLCBzdGF0aWMgU1JDUkVWcyBhcmUKKyMgcHJvdmlkZWQgYW5kIG92ZXJyaWRkZW4gaWYgdGhlIHByZWZlcnJlZCBrZXJuZWwgcHJvdmlkZXIgaXMgbGludXgteW9jdG8tZGV2LgorIworIyBUbyBlbmFibGUgdGhpcyByZWNpcGUsIHNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IgorCitpbmhlcml0IGtlcm5lbAorcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBwcm92aWRlIHRoaXMgLmluYyB0byBzZXQgc3BlY2lmaWMgcmV2aXNpb25zCitpbmNsdWRlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi1yZXZpc2lvbnMuaW5jCisKKyMgU2tpcCBwcm9jZXNzaW5nIG9mIHRoaXMgcmVjaXBlIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyB0aGUKKyMgUFJFRkVSUkVEX1BST1ZJREVSIGZvciB2aXJ0dWFsL2tlcm5lbC4gVGhpcyBhdm9pZHMgbmV0d29yayBhY2Nlc3MgcmVxdWlyZWQKKyMgYnkgdGhlIHVzZSBvZiBBVVRPUkVWIFNSQ1JFVnMsIHdoaWNoIGFyZSB0aGUgZGVmYXVsdCBmb3IgdGhpcyByZWNpcGUuCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCBUcnVlKSAhPSAibGludXgteW9jdG8tZGV2IjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIlNldCBQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgdG8gbGludXgteW9jdG8tZGV2IHRvIGVuYWJsZSBpdCIpCit9CisKK0tCUkFOQ0ggPSAic3RhbmRhcmQvYmFzZSIKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLWRldi5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD1tYXN0ZXI7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworIyBTZXQgZGVmYXVsdCBTUkNSRVZzLiBCb3RoIHRoZSBtYWNoaW5lIGFuZCBtZXRhIFNSQ1JFVnMgYXJlIHN0YXRpY2FsbHkgc2V0CisjIHRvIHRoZSBrb3JnIHYzLjcgdGFnLCBhbmQgaGVuY2UgcHJldmVudCBuZXR3b3JrIGFjY2VzcyBkdXJpbmcgcGFyc2luZy4gSWYKKyMgbGludXgteW9jdG8tZGV2IGlzIHRoZSBwcmVmZXJyZWQgcHJvdmlkZXIsIHRoZXkgd2lsbCBiZSBvdmVycmlkZGVuIHRvCisjIEFVVE9SRVYgaW4gZm9sbG93aW5nIGFub255bW91cyBweXRob24gcm91dGluZSBhbmQgcmVzb2x2ZWQgd2hlbiB0aGUKKyMgdmFyaWFibGVzIGFyZSBmaW5hbGl6ZWQuCitTUkNSRVZfbWFjaGluZSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JworU1JDUkVWX21ldGEgPz0gJyR7QG9lLnV0aWxzLmNvbmRpdGlvbmFsKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwiLCAibGludXgteW9jdG8tZGV2IiwgIiR7QVVUT1JFVn0iLCAiMjk1OTQ0MDRkN2ZlNzNjZDgwZWFhNGVlOGM0M2RjYzUzOTcwYzYwZSIsIGQpfScKKworTElOVVhfVkVSU0lPTiA/PSAiNC4yLXJjKyIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG9kZXYtJHtMSU5VWF9LRVJORUxfVFlQRX0iCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXVhcm18cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCkiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzZDVjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYgpAQCAtMCwwICsxLDI4IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiCitLQlJBTkNIX3FlbXVwcGMgPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvcWVtdXBwYyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworU1JDUkVWX21hY2hpbmUgPz0gIjgyODE5MTU1MjdiYThkNzllNTk5MDZjMDJmMjhlN2FhMTE0MjQ3MjMiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICI1ZTdkMzcyZWJjMzI3ZjI4NjU2ZmM5NzJmYWI1NTYwNWVlYThhZWMzIgorU1JDUkVWX21ldGEgPz0gIjNhMDliMzhhOWY1MDE1YzU2ZDk5ZDE3YWE3YzJmMjAwYzU2NjI0OWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE0O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjMuMTQuMzYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0xJTlVYX0tFUk5FTF9UWVBFID0gInByZWVtcHQtcnQiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NnxxZW11eDg2LTY0fHFlbXVhcm18cWVtdXBwY3xxZW11bWlwcykiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ4M2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF80LjEuYmIKQEAgLTAsMCArMSwyNiBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydCIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworU1JDUkVWX21hY2hpbmUgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWV0YSA/PSAiNDI5ZjllMmZmMDY0OWI4YzkzNDEzNDU2MjI1NDVkODc0ZDVlMzAzYSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tNC4xO2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMS42IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitMSU5VWF9LRVJORUxfVFlQRSA9ICJwcmVlbXB0LXJ0IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODZ8cWVtdXg4Ni02NHxxZW11YXJtfHFlbXVwcGN8cWVtdW1pcHMpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MgZmVhdHVyZXMvdGFza3N0YXRzL3Rhc2tzdGF0cy5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyYzgxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworU1JDUkVWX21hY2hpbmUgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWV0YSA/PSAiM2EwOWIzOGE5ZjUwMTVjNTZkOTlkMTdhYTdjMmYyMDBjNTY2MjQ5YiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE0LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmU7IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE0O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NikiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNThhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xOS41IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tZXRhID89ICIxMDE2NzE0ODY4MjQ5ZDY0ZmMxNjY5MmZkNzY3OTY3MmIxZWZhMTdiIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZSBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xOTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjEyMDVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzQuMS5iYgpAQCAtMCwwICsxLDIzIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC90aW55L2Jhc2UiCitMSU5VWF9LRVJORUxfVFlQRSA9ICJ0aW55IgorS0NPTkZJR19NT0RFID0gIi0tYWxsbm9jb25maWciCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKK0xJTlVYX1ZFUlNJT04gPz0gIjQuMS42IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tZXRhID89ICI0MjlmOWUyZmYwNjQ5YjhjOTM0MTM0NTYyMjU0NWQ4NzRkNWUzMDNhIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQxYTYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKQEAgLTAsMCArMSw1MSBAQAorREVTQ1JJUFRJT04gPSAiWW9jdG8gS2VybmVsIgorU0VDVElPTiA9ICJrZXJuZWwiCitMSUNFTlNFID0gIkdQTHYyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworSU5DX1BSID0gInI0IgorCitERVBFTkRTICs9ICJ4ei1uYXRpdmUgYmMtbmF0aXZlIgorREVQRU5EU19hcHBlbmRfYWFyY2g2NCA9ICIgbGliZ2NjIgorS0VSTkVMX0NDX2FwcGVuZF9hYXJjaDY0ID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKK0tFUk5FTF9MRF9hcHBlbmRfYWFyY2g2NCA9ICIgJHtUT09MQ0hBSU5fT1BUSU9OU30iCisKKyMgQSBLTUFDSElORSBpcyB0aGUgbWFwcGluZyBvZiBhIHlvY3RvICRNQUNISU5FIHRvIHdoYXQgaXMgYnVpbHQKKyMgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGJyYW5jaCB0aGF0IHNob3VsZCBiZSBidWlsdCwKKyMgYW5kIGl0IGNhbiBiZSBzcGVjaWZpYyB0byB0aGUgbWFjaGluZSBvciBzaGFyZWQKKyMgS01BQ0hJTkUgPSAiVU5ERUZJTkVEIgorCitMSU5VWF9LRVJORUxfVFlQRSA/PSAic3RhbmRhcmQiCisKKyMgS01FVEEgPz0gIiIKK0tCUkFOQ0ggPz0gIm1hc3RlciIKK0tNQUNISU5FID89ICIke01BQ0hJTkV9IgorU1JDUkVWX0ZPUk1BVCA/PSAibWV0YV9tYWNoaW5lIiAKKworIyBMRVZFTFM6CisjICAgMDogbm8gcmVwb3J0aW5nCisjICAgMTogcmVwb3J0IG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWVkLCBidXQgbm90IGluIHRoZSBmaW5hbCBjb25maWcKKyMgICAyOiByZXBvcnQgb3B0aW9ucyB0aGF0IGFyZSBub3QgaGFyZHdhcmUgcmVsYXRlZCwgYnV0IHNldCBieSBhIEJTUAorS0NPTkZfQVVESVRfTEVWRUwgPz0gIjEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPz0gIjAiCisKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICIteW9jdG8tJHtMSU5VWF9LRVJORUxfVFlQRX0iCisKKyMgUGljayB1cCBzaGFyZWQgZnVuY3Rpb25zCitpbmhlcml0IGtlcm5lbAoraW5oZXJpdCBrZXJuZWwteW9jdG8KK3JlcXVpcmUgbGludXgtZHRiLmluYworCitCID0gIiR7V09SS0RJUn0vbGludXgtJHtQQUNLQUdFX0FSQ0h9LSR7TElOVVhfS0VSTkVMX1RZUEV9LWJ1aWxkIgorCitkb19pbnN0YWxsX2FwcGVuZCgpeworCWlmIFsgLW4gIiR7S01FVEF9IiBdOyB0aGVuCisJCXJtIC1yZiAke1NUQUdJTkdfS0VSTkVMX0RJUn0vJHtLTUVUQX0KKwlmaQorfQorCisjIGV4dHJhIHRhc2tzCithZGR0YXNrIGtlcm5lbF9saW5rX3ZtbGludXggYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9faW5zdGFsbAorYWRkdGFzayB2YWxpZGF0ZV9icmFuY2hlcyBiZWZvcmUgZG9fcGF0Y2ggYWZ0ZXIgZG9fa2VybmVsX2NoZWNrb3V0CithZGR0YXNrIGtlcm5lbF9jb25maWdjaGVjayBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmIyZTVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiCkBAIC0wLDAgKzEsNDEgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy9iYXNlIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKK0tCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCisKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjQ4MTc3NDc5MTJiNWM1MGNlNWMzMWVmMjU2NTgzNDBjYTYxNWUxYjQiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gIjU3ODYwMmE3MjJkYmZiMjYwODAxZjNiMzdjNmVhZmQyYWJiMjM0MGQiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiNmVkNzZlYzI2YjEyMGY2NWY4NTQ3Yzg2MTJiNzMzNGJkMjc0NWVjOSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gImE4NmFkZTg0YjJlMTQyYzBmZDc1MzZkOTY0NzcxMDdiNmQwN2RiNWMiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICJhZjFmN2Y1ODZiZDMyZDM5YzA1N2YxNzYwNjk5MWI4ODdlYWRiMzg5IgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gImE2M2Q0MGI4NjBhNmQyNTUwMDVhNTQxODk0ZDUzNzI5MDkwYjQwZWEiCitTUkNSRVZfbWFjaGluZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tZXRhID89ICIzYTA5YjM4YTlmNTAxNWM1NmQ5OWQxN2FhN2MyZjIwMGM1NjYyNDliIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YzE2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmIKQEAgLTAsMCArMSw0MSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcworS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCitLQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgorS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCitLQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgorS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvY29tbW9uLXBjIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIKK0tCUkFOQ0hfcWVtdW1pcHM2NCA/PSAic3RhbmRhcmQvbXRpLW1hbHRhNjQiCisKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm0gPz0gIjk2M2I0ZGY2NjNkYmEyNTg0YWM4NjRlMGMwMTY4MjVkZTAwNDY1NTgiCitTUkNSRVZfbWFjaGluZV9xZW11YXJtNjQgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwcyA/PSAiY2VkYmJjN2I1ZTcyZGYyZTgyMGJiOWU3ODg1ZjEyMTMyYzVlMmZmZiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjIzYTgzMzg2ZTEwOTg2YTYzZTZjZWY3MTJhMDQ1NDQ1NDk5ZDAwMmIiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4Ni02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzNjQgPz0gIjNlYjcwY2VhMzUzMmUyMmFiMWI2ZGE5ODY0NDQ2NjIxMjI5ZTY2MTYiCitTUkNSRVZfbWFjaGluZSA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tZXRhID89ICIxMDE2NzE0ODY4MjQ5ZDY0ZmMxNjY5MmZkNzY3OTY3MmIxZWZhMTdiIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTkuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTk7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xOS41IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDQ2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzQuMS5iYgpAQCAtMCwwICsxLDQxIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9xZW11eDg2LTY0ID89ICJzdGFuZGFyZC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiM2MxMjQ1ZDE2MmNjYjU1ZGUxYWY0MmJjZjNkYmY2OTA0NTdiZjllNCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI0MTMyYTY5MWQwOTA4ZDEwYjhmMDdjZTdlY2UwMmU2ZGM5NGUxN2JjIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiMDMzZTFhYTYzMzQ2NTQ0OWVkZjU0NGViODFhZGRhMGNhZjE2ZWM2MCIKK1NSQ1JFVl9tYWNoaW5lID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21ldGEgPz0gIjQyOWY5ZTJmZjA2NDliOGM5MzQxMzQ1NjIyNTQ1ZDg3NGQ1ZTMwM2EiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDtuYW1lPW1hY2hpbmU7YnJhbmNoPSR7S0JSQU5DSH07IFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11YXJtfHFlbXVhcm02NHxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0IgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2UvMDAwMS1GaXgtaW52YWxpZC1wb2ludGVyLWZyZWUtd2l0aC10cmFjZS1jb2xsZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gZTRjYWQ5MDA5OTRjZjI4NmQ5NzE3OTZhOTQ3ZmVhNzgyZGZjNjY1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5jaXMgR2lyYWxkZWF1IDxmcmFuY2lzLmdpcmFsZGVhdUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDE1IEp1biAyMDE1IDExOjQzOjAyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBpbnZhbGlkIHBvaW50ZXIgZnJlZSB3aXRoIHRyYWNlIGNvbGxlY3Rpb24KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworUGF0Y2ggcHJvcG9zZWQgYnkgTGkgUm9uZ1FpbmcgcmVsYXRlZCB0byBidWcjIDc5MAorCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEZyYW5jaXMgR2lyYWxkZWF1IDxmcmFuY2lzLmdpcmFsZGVhdUBnbWFpbC5jb20+CistLS0KKyBsaWIvY29udGV4dC5jIHwgOCArKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvY29udGV4dC5jIGIvbGliL2NvbnRleHQuYworaW5kZXggNDVhYWIzNC4uOGQzNzcwZiAxMDA2NDQKKy0tLSBhL2xpYi9jb250ZXh0LmMKKysrKyBiL2xpYi9jb250ZXh0LmMKK0BAIC03OSw3ICs3OSw3IEBAIGludCBidF9jb250ZXh0X2FkZF90cmFjZShzdHJ1Y3QgYnRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoLAorIAlzdHJ1Y3QgYnRfdHJhY2VfZGVzY3JpcHRvciAqdGQ7CisgCXN0cnVjdCBidF9mb3JtYXQgKmZtdDsKKyAJc3RydWN0IGJ0X3RyYWNlX2hhbmRsZSAqaGFuZGxlOworLQlpbnQgcmV0LCBjbG9zZXJldDsKKysJaW50IHJldDsKKyAKKyAJaWYgKCFjdHggfHwgIWZvcm1hdF9uYW1lIHx8ICghcGF0aCAmJiAhc3RyZWFtX2xpc3QpKQorIAkJcmV0dXJuIC1FSU5WQUw7CitAQCAtMTU5LDEwICsxNTksOCBAQCBpbnQgYnRfY29udGV4dF9hZGRfdHJhY2Uoc3RydWN0IGJ0X2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCwKKyAJcmV0dXJuIGhhbmRsZS0+aWQ7CisgCisgZXJyb3I6CistCWNsb3NlcmV0ID0gZm10LT5jbG9zZV90cmFjZSh0ZCk7CistCWlmIChjbG9zZXJldCkgeworLQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbiBjbG9zZV90cmFjZSBjYWxsYmFja1xuIik7CistCX0KKysJaWYgKGhhbmRsZSkKKysJCWJ0X2NvbnRleHRfcmVtb3ZlX3RyYWNlKGN0eCwgaGFuZGxlLT5pZCk7CisgZW5kOgorIAlyZXR1cm4gcmV0OworIH0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMi40LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlXzEuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmJlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4yLjQuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJCYWJlbHRyYWNlIC0gVHJhY2UgRm9ybWF0IEJhYmVsIFRvd2VyIgorREVTQ1JJUFRJT04gPSAiQmFiZWx0cmFjZSBwcm92aWRlcyB0cmFjZSByZWFkIGFuZCB3cml0ZSBsaWJyYXJpZXMgaW4gaG9zdCBzaWRlLCBhcyB3ZWxsIGFzIGEgdHJhY2UgY29udmVydGVyLCB3aGljaCB1c2VkIHRvIGNvbnZlcnQgTFRUbmcgMi4wIHRyYWNlcyBpbnRvIGh1bWFuLXJlYWRhYmxlIGxvZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9iYWJlbHRyYWNlIgorCitMSUNFTlNFID0gIk1JVCAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NzZiYTE1ZGQ3NmEyNDhlMWRkNTI2YmNhMGUyMTI1ZmEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gImdsaWItMi4wIHV0aWwtbGludXggcG9wdCBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK1NSQ1JFViA9ICI5MDM5NTgyNGVmYzAwN2RlODg3ODdhNmI4ZTQwMGEwN2M5ODBiZTFjIgorUFYgPSAiMS4yLjQrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmVmZmljaW9zLmNvbS9iYWJlbHRyYWNlLmdpdDticmFuY2g9c3RhYmxlLTEuMiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJKCBjZCAke1N9OyAke1N9L2Jvb3RzdHJhcCApCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU0NGZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy1tb2R1bGVzX2dpdC5iYgpAQCAtMCwwICsxLDMzIEBACitTRUNUSU9OID0gImRldmVsIgorU1VNTUFSWSA9ICJMaW51eCBUcmFjZSBUb29sa2l0IEtFUk5FTCBNT0RVTEUiCitERVNDUklQVElPTiA9ICJUaGUgbHR0bmctbW9kdWxlcyAyLjAgcGFja2FnZSBjb250YWlucyB0aGUga2VybmVsIHRyYWNlciBtb2R1bGVzIgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MTQxMmNhZjVhMWFhOTBkNmE0ODU4OGE0Nzk0YzBlYWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCisKK2luaGVyaXQgbW9kdWxlCisKK1NSQ1JFViA9ICI3YTg4ZjhiNTA2OTZkZDcxZTgwYzA4NjYxMTU5Y2FmOGUxMTliZjUxIgorUFYgPSAiMi42LjIrZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhYXJjaDY0fG1pcHN8YXJtKS4qLWxpbnV4JworCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctbW9kdWxlcy5naXQ7YnJhbmNoPXN0YWJsZS0yLjYiCisKK2V4cG9ydCBJTlNUQUxMX01PRF9ESVI9Imtlcm5lbC9sdHRuZy1tb2R1bGVzIgorCitFWFRSQV9PRU1BS0UgKz0gIktFUk5FTERJUj0nJHtTVEFHSU5HX0tFUk5FTF9ESVJ9JyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBEZWxldGUgZW1wdHkgZGlyZWN0b3JpZXMgdG8gYXZvaWQgUUEgZmFpbHVyZXMgaWYgbm8gbW9kdWxlcyB3ZXJlIGJ1aWx0CisJZmluZCAke0R9L2xpYiAtZGVwdGggLXR5cGUgZCAtZW1wdHkgLWV4ZWMgcm1kaXIge30gXDsKK30KKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCgpIHsKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGQuZ2V0VmFyKCdEJywgVHJ1ZSksICdsaWIvbW9kdWxlcycpKToKKyAgICAgICAgYmIud2FybigiJXM6IG5vIG1vZHVsZXMgd2VyZSBjcmVhdGVkOyB0aGlzIG1heSBiZSBkdWUgdG8gQ09ORklHX1RSQUNFUE9JTlRTIG5vdCBiZWluZyBlbmFibGVkIGluIHlvdXIga2VybmVsLiIgJSBkLmdldFZhcignUE4nLCBUcnVlKSkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9leHRlcm4tZGVjbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTllZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9leHRlcm4tZGVjbHMucGF0Y2gKQEAgLTAsMCArMSw0NDIgQEAKK1RoaXMgbWFrZSB0aGUgZGVjbGFyYXRpb25zIHRvIGJlIGV4dGVybiBzbyB0aGV5IGRvbnQgZW5kIHVwCitpbiBkdXBsaWNhdGVzIGluIGRhdGEucmVsLnJvIHNlY3Rpb25zCisKK2F2b2lkIGVycm9ycyBsaWtlCisKK3wgLi4vLi4vLi4vc3JjL2NvbW1vbi8ubGlicy9saWJjb21tb24uYShtaS1sdHRuZy5vKTooLmRhdGEucmVsLnJvLmxvY2FsKzB4MCk6IG11bHRpcGxlIGRlZmluaXRpb24gb2YgYG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RzJworfCBjb21tYW5kcy9lbmFibGVfZXZlbnRzLm86KC5ic3MrMHg0OCk6IGZpcnN0IGRlZmluZWQgaGVyZQorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK3wgTWFrZWZpbGU6NTAyOiByZWNpcGUgZm9yIHRhcmdldCAnbHR0bmcnIGZhaWxlZAorfCBtYWtlWzNdOiAqKiogW2x0dG5nXSBFcnJvciAxCisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2l0L3NyYy9jb21tb24vY29uZmlnL2NvbmZpZy1zZXNzaW9uLWFiaS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKKysrKyBnaXQvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKK0BAIC0xOCw5NSArMTgsOTUgQEAKKyAjaWZuZGVmIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0gKKyAjZGVmaW5lIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0gKKyAKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50czsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2F0dHJpYnV0ZXM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZnVuY3Rpb25fYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcHJvYmVfYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ltYm9sX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2FkZHJlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X29mZnNldDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZW5hYmxlZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3ZlcndyaXRlX21vZGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N1YmJ1Zl9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9udW1fc3ViYnVmOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zd2l0Y2hfdGltZXJfaW50ZXJ2YWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3JlYWRfdGltZXJfaW50ZXJ2YWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0X3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfY291bnQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xpdmVfdGltZXJfaW50ZXJ2YWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2J1ZmZlcl90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGVyZjsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uZmlnOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdGFydGVkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9tb2RlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbG9nbGV2ZWxfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZmlsdGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9vdXRwdXRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25zdW1lcl9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2Rlc3RpbmF0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wYXRoOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uZXRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250cm9sX3VyaTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGF0YV91cmk7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X21heF9zaXplOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfa2VybmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfdXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfanVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfbG9nNGo7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfcGVyX3VpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX2dsb2JhbDsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX2Rpc2NhcmQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdmVyd3JpdGVfbW9kZV9vdmVyd3JpdGU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9zcGxpY2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9tbWFwOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3JhbmdlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfdHJhY2Vwb2ludDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfcHJvYmU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbl9lbnRyeTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfbm9vcDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfc3lzY2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3Byb2JlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcmV0cHJvYmU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJvY25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ByaW87CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X25pY2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3RpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnRpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBwaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3B0aHJlYWRfaWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2hvc3RuYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9pcDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGVyZl90aHJlYWRfY291bnRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RvbWFpbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2F0dHJpYnV0ZXM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb25zOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZnVuY3Rpb25fYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Byb2JlX2F0dHJpYnV0ZXM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zeW1ib2xfbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2FkZHJlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vZmZzZXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZW5hYmxlZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X292ZXJ3cml0ZV9tb2RlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ViYnVmX3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9udW1fc3ViYnVmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3dpdGNoX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcmVhZF90aW1lcl9pbnRlcnZhbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X291dHB1dF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfY291bnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9saXZlX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHlwZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2J1ZmZlcl90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb25zOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGVyZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbmZpZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N0YXJ0ZWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9tb2RlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbG9nbGV2ZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZmlsdGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc25hcHNob3Rfb3V0cHV0czsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnN1bWVyX291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2Rlc3RpbmF0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcGF0aDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25ldF9vdXRwdXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250cm9sX3VyaTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2RhdGFfdXJpOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbWF4X3NpemU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfa2VybmVsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX3VzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9qdWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfbG9nNGo7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfcGVyX3BpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfdWlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX2dsb2JhbDsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdmVyd3JpdGVfbW9kZV9kaXNjYXJkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX292ZXJ3cml0ZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9zcGxpY2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3V0cHV0X3R5cGVfbW1hcDsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3JhbmdlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfdHJhY2Vwb2ludDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3Byb2JlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbl9lbnRyeTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX25vb3A7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9zeXNjYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3Byb2JlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfa3JldHByb2JlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJvY25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcmlvOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfbmljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF90aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92dGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHBpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ZwcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHRocmVhZF9pZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2hvc3RuYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaXA7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wZXJmX3RocmVhZF9jb3VudGVyOworIAorICNlbmRpZiAvKiBDT05GSUdfU0VTU0lPTl9JTlRFUk5BTF9IICovCitJbmRleDogZ2l0L3NyYy9jb21tb24vbWktbHR0bmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9jb21tb24vbWktbHR0bmcuaAorKysrIGdpdC9zcmMvY29tbW9uL21pLWx0dG5nLmgKK0BAIC00OSwxMzMgKzQ5LDEzMyBAQCBzdHJ1Y3QgbWlfbHR0bmdfdmVyc2lvbiB7CisgfTsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gY29tbWFuZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hZGRfY29udGV4dDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NhbGlicmF0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NyZWF0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rlc3Ryb3k7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2NoYW5uZWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2V2ZW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2NoYW5uZWxzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2V2ZW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbGlzdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2xvYWQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2F2ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NldF9zZXNzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9hZGQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9kZWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9saXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfcmVjb3JkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RhcnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdG9wOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3VjY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3ZlcnNpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWN0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FkZF9jb250ZXh0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NhbGlicmF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9jcmVhdGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGVzdHJveTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2NoYW5uZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGlzYWJsZV9ldmVudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfY2hhbm5lbHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZW5hYmxlX2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2xpc3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbG9hZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zYXZlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NldF9zZXNzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2FkZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9kZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfbGlzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9yZWNvcmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RhcnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc3RvcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdWNjZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3ZlcnNpb247CisgCisgLyogU3RyaW5ncyByZWxhdGVkIHRvIHZlcnNpb24gY29tbWFuZCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9jb21taXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9kZXNjcmlwdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2xpY2Vuc2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9tYWpvcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21pbm9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fcGF0Y2hfbGV2ZWw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9zdHI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl93ZWI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fY29tbWl0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2Rlc2NyaXB0aW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2xpY2Vuc2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWFqb3I7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWlub3I7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fcGF0Y2hfbGV2ZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fc3RyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3dlYjsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBhIGx0dG5nX2V2ZW50X2ZpZWxkICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZXZlbnRfZmllbGRzOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGx0dG5nX2V2ZW50X2NvbnRleHQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY291bnRlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY3B1X2NvdW50ZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX3RocmVhZF9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY291bnRlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2NvbnRleHRfdHlwZV9wZXJmX2NwdV9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfdGhyZWFkX2NvdW50ZXI7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbHR0bmdfZXZlbnRfcGVyZl9jb3VudGVyX2N0eCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BlcmZfY291bnRlcl9jb250ZXh0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9wZXJmX2NvdW50ZXJfY29udGV4dDsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gcGlkICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkX2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZF9pZDsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gc2F2ZSBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc2F2ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc2F2ZTsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gbG9hZCBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbG9hZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbG9hZDsKKyAKKyAvKiBHZW5lcmFsIGVsZW1lbnQgb2YgbWlfbHR0bmcgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9lbXB0eTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9pZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ub3dyaXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3N1Y2Nlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9lbnVtOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZmxvYXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9pbnRlZ2VyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfb3RoZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9zdHJpbmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2VtcHR5OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9pZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfbm93cml0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc3VjY2VzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9lbnVtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2Zsb2F0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2ludGVnZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfb3RoZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfc3RyaW5nOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9hbGVydDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2NyaXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1ZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX2Z1bmN0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbGluZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX21vZHVsZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2Nlc3M7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9ncmFtOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfc3lzdGVtOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfdW5pdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VtZXJnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZXJyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfaW5mbzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX25vdGljZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3Vua25vd247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl93YXJuaW5nOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2FsZXJ0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2NyaXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfZnVuY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbGluZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19tb2R1bGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvY2VzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9ncmFtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3N5c3RlbTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z191bml0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VtZXJnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2VycjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9pbmZvOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX25vdGljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl91bmtub3duOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3dhcm5pbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgSlVMICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2NvbmZpZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVzdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9pbmZvOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX29mZjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9zZXZlcmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfd2FybmluZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9jb25maWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9maW5lc3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX29mZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfc2V2ZXJlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF93YXJuaW5nOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsIExvZzRqICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9vZmY7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9mYXRhbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2Vycm9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfd2FybjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2luZm87CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9kZWJ1ZzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3RyYWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX29mZjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9mYXRhbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9lcnJvcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al93YXJuOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZGVidWc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfdHJhY2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfYWxsOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGxvZ2xldmVsIHR5cGUgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3Vua25vd247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX2FsbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfdW5rbm93bjsKKyAKKyAvKiBTdGluZyByZWxhdGVkIHRvIGx0dG5nX2NhbGlicmF0ZSAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGVfZnVuY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlX2Z1bmN0aW9uOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGEgbHR0bmdfc25hcHNob3QgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9jdHJsX3VybDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9kYXRhX3VybDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9tYXhfc2l6ZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9uX3B0cjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9zZXNzaW9uX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9jdHJsX3VybDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfZGF0YV91cmw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X21heF9zaXplOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9uX3B0cjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3Rfc2Vzc2lvbl9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHM7CisgCisgLyogVXRpbGl0eSBzdHJpbmcgZnVuY3Rpb24gICovCisgY29uc3QgY2hhciAqbWlfbHR0bmdfbG9nbGV2ZWxfc3RyaW5nKGludCB2YWx1ZSwgZW51bSBsdHRuZ19kb21haW5fdHlwZSBkb21haW4pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAxNjE0OTZmYmUxNDY1ODE3YTc3YTUwYTExNzI3MzRkYWU4MWExM2VmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDEyIE1heSAyMDE1IDExOjExOjQ4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0dG5nLXRvb2xzOiBGaXggbGl2ZSB0aW1lciBjYWxjdWxhdGlvbiBlcnJvcgorCitUaGVyZSBpcyBhbiBjYWxjdWxhdGlvbiBlcnJvciBmb3IgbGl2ZSB0aW1lci4gVmFyaWFibGUgc3dpdGNoX3RpbWVyX2ludGVydmFsIGlzCitiYXNlZCBvbiBtaWNyb3NlY29uZCwgYW5kIGl0IGlzIG5vdCByaWdodCB0byBhc3NpZ24gc3dpdGNoX3RpbWVyX2ludGVydmFsIG1vZAorMTAwMDAwMCB0byB2YXIgdHZfbnNlYyB3aGljaCBpcyBiYXNlZCBvbiBuYW5vc2Vjb25kLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKaWFuY2h1YW4gV2FuZyA8amlhbmNodWFuLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9jb21tb24vY29uc3VtZXItdGltZXIuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMgYi9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMKK2luZGV4IDE0MDgwNTIuLmM2MjAyYmEgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL2NvbnN1bWVyLXRpbWVyLmMKKysrKyBiL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lkIGNvbnN1bWVyX3RpbWVyX3N3aXRjaF9zdGFydChzdHJ1Y3QgbHR0bmdfY29uc3VtZXJfY2hhbm5lbCAqY2hhbm5lbCwKKyAJY2hhbm5lbC0+c3dpdGNoX3RpbWVyX2VuYWJsZWQgPSAxOworIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gc3dpdGNoX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIGNvbnN1bWVyX3RpbWVyX2xpdmVfc3RhcnQoc3RydWN0IGx0dG5nX2NvbnN1bWVyX2NoYW5uZWwgKmNoYW5uZWwsCisgCWNoYW5uZWwtPmxpdmVfdGltZXJfZW5hYmxlZCA9IDE7CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBsaXZlX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBsaXZlX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMDsKKysJaXRzLml0X3ZhbHVlLnR2X25zZWMgPSAobGl2ZV90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTc1ODgxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHMgaW5zdGFsbGNoZWNrCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC0yLjQuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThiY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA1ODRmNTliLi5jMmJjYWJkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTIsMyArMTIsOSBAQCBkaXN0X2RvY19EQVRBID0gTElDRU5TRSBcCisgZGlzdF9ub2luc3RfREFUQSA9IENvZGluZ1N0eWxlCisgCisgRVhUUkFfRElTVCA9IGV4dHJhcy9sdHRuZy1iYXNoX2NvbXBsZXRpb24gZ3BsLTIuMC50eHQgbGdwbC0yLjEudHh0CisrCisraW5zdGFsbC1wdGVzdDoKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3RzICQoREVTVERJUikKKysJZm9yIG0gaW4gJCQoZmluZCAkKERFU1RESVIpL3Rlc3RzIC1uYW1lIE1ha2VmaWxlKTsgZG8gXAorKyAgICAgICAgICBzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJCRtOyBcCisrICAgICAgICBkb25lCitkaWZmIC0tZ2l0IGEvdGVzdHMvcnVuLnNoIGIvdGVzdHMvcnVuLnNoCitpbmRleCBjNmM1MGZkLi42NDU1MzU5IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLnNoCisrKysgYi90ZXN0cy9ydW4uc2gKK0BAIC0xOSw0ICsxOSw3IEBACisgCisgWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IE5vIHRlc3RsaXN0LiBQbGVhc2Ugc3BlY2lmeSBhIHRlc3RsaXN0IHRvIHJ1bi4iICYmIGV4aXQgMQorIAorLXByb3ZlIC0tbWVyZ2UgLS1leGVjICcnIC0gPCAkMQorK3Byb3ZlIC0tbWVyZ2UgLXYgLS1leGVjICcnIC0gPCAkMSB8IHNlZCBcCisrICAtZSAnc3xeb2sgXCguKlwpfFBBU1M6IFwxfCcgXAorKyAgLWUgJ3N8Xm5vdCBvayBcKC4qXCl8RkFJTDogXDF8JyBcCisrICB8IGVncmVwIC1oICdQQVNTfEZBSUwnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ1YTVkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTg0ZjU5Yi4uYzJiY2FiZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEyLDMgKzEyLDkgQEAgZGlzdF9kb2NfREFUQSA9IExJQ0VOU0UgXAorIGRpc3Rfbm9pbnN0X0RBVEEgPSBDb2RpbmdTdHlsZQorIAorIEVYVFJBX0RJU1QgPSBleHRyYXMvbHR0bmctYmFzaF9jb21wbGV0aW9uIGdwbC0yLjAudHh0IGxncGwtMi4xLnR4dAorKworK2luc3RhbGwtcHRlc3Q6CisrCWNwIC1yICQoc3JjZGlyKS90ZXN0cyAkKERFU1RESVIpCisrCWZvciBtIGluICQkKGZpbmQgJChERVNURElSKS90ZXN0cyAtbmFtZSBNYWtlZmlsZSk7IGRvIFwKKysgICAgICAgICAgc2VkIC1pIC1lICdzfF5NYWtlZmlsZTp8X01ha2VmaWxlOnwnICQkbTsgXAorKyAgICAgICAgZG9uZQorZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDZkNWIwMGQuLjM3NzRmOWQgMTAwNjQ0CistLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xLDE0ICsxLDE3IEBACisgU1VCRElSUyA9IHV0aWxzIHJlZ3Jlc3Npb24gdW5pdCBzdHJlc3MKKyAKKy1pZiBVU0VfUFlUSE9OCistY2hlY2stYW06CisraW5zdGFsbGNoZWNrLWFtOgorIAkuL3J1bi5zaCB1bml0X3Rlc3RzCisgCS4vcnVuLnNoIGZhc3RfcmVncmVzc2lvbgorK2lmIFVTRV9QWVRIT04KKyAJLi9ydW4uc2ggd2l0aF9iaW5kaW5nc19yZWdyZXNzaW9uCistZWxzZQorK2VuZGlmCisrCisgY2hlY2stYW06CisgCS4vcnVuLnNoIHVuaXRfdGVzdHMKKyAJLi9ydW4uc2ggZmFzdF9yZWdyZXNzaW9uCisraWYgVVNFX1BZVEhPTgorKwkuL3J1bi5zaCB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KKyBlbmRpZgorIAorIGRpc3Rfbm9pbnN0X1NDUklQVFMgPSBydW4uc2ggdW5pdF90ZXN0cyBmYXN0X3JlZ3Jlc3Npb24gbG9uZ19yZWdyZXNzaW9uIHJvb3RfcmVncmVzc2lvbiB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4uc2ggYi90ZXN0cy9ydW4uc2gKK2luZGV4IGM2YzUwZmQuLjY0NTUzNTkgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4uc2gKKysrKyBiL3Rlc3RzL3J1bi5zaAorQEAgLTE5LDQgKzE5LDcgQEAKKyAKKyBbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogTm8gdGVzdGxpc3QuIFBsZWFzZSBzcGVjaWZ5IGEgdGVzdGxpc3QgdG8gcnVuLiIgJiYgZXhpdCAxCisgCistcHJvdmUgLS1tZXJnZSAtLWV4ZWMgJycgLSA8ICQxCisrcHJvdmUgLS1tZXJnZSAtdiAtLWV4ZWMgJycgLSA8ICQxIHwgc2VkIFwKKysgIC1lICdzfF5vayBcKC4qXCl8UEFTUzogXDF8JyBcCisrICAtZSAnc3xebm90IG9rIFwoLipcKXxGQUlMOiBcMXwnIFwKKysgIHwgZWdyZXAgLWggJ1BBU1N8RkFJTCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi42LjAuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTdhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzXzIuNi4wLmJiCkBAIC0wLDAgKzEsODIgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgQ29udHJvbCIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCB0cmFjZSB0b29sa2l0IGlzIGEgc3VpdGUgb2YgdG9vbHMgZGVzaWduZWQgXAordG8gZXh0cmFjdCBwcm9ncmFtIGV4ZWN1dGlvbiBkZXRhaWxzIGZyb20gdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0gXAorYW5kIGludGVycHJldCB0aGVtLiIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MDFkN2ZjNDQ5NmFhY2YzN2Q5MGRmOTBiOTBiMGNhYzEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3BsLTIuMC50eHQ7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xncGwtMi4xLnR4dDttZDU9MGYwZDcxNTAwZTZhNTdmZDI0ZDgyNWYzMzI0MmI5Y2EiCisKK0RFUEVORFMgPSAibGlidXJjdSBwb3B0IGx0dG5nLXVzdCBsaWJ4bWwyIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgcGVybCBiYXNoIgorCitTUkNSRVYgPSAiZDUyMmMxZjE0Mjg1ZTJlOGIxMGI3YzBjZDAxMTg0NzY5NmZmZTc3OSIKKworUFlUSE9OX09QVElPTiA9ICJhbV9jdl9weXRob25fcHlleGVjZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKKyAgICAgICAgICAgICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0nJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzJyBcCisgICAgICAgICAgICAgICAgIFBZVEhPTl9JTkNMVURFPSctSSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfScgXAorIgorUEFDS0FHRUNPTkZJRyA/Pz0gImx0dG5nLXVzdCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLWVuYWJsZS1weXRob24tYmluZGluZ3MgJHtQWVRIT05fT1BUSU9OfSwscHl0aG9uIHN3aWctbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tsdHRuZy11c3RdID0gIi0tZW5hYmxlLWx0dG5nLXVzdCwgLS1kaXNhYmxlLWx0dG5nLXVzdCwgbHR0bmctdXN0IgorUEFDS0FHRUNPTkZJR1trbW9kXSA9ICItLWVuYWJsZS1rbW9kLCAtLWRpc2FibGUta21vZCwga21vZCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXRvb2xzLmdpdDticmFuY2g9c3RhYmxlLTIuNiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW50ZXN0LTIuNC4wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVybi1kZWNscy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vbHR0bmctdG9vbHMtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggXAorCSAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcHRlc3QgcGtnY29uZmlnIHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gInRyYWNpbmciCisKK2V4cG9ydCBLRVJORUxESVI9IiR7U1RBR0lOR19LRVJORUxfRElSfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLyogJHtkYXRhZGlyfS94bWwvbHR0bmcgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbHR0bmcvbGliZXhlYy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMvKi5sYSIKKworIyBTaW5jZSBmaWxlcyBhcmUgaW5zdGFsbGVkIGludG8gJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMgd2UgbWF0Y2ggCisjIHRoZSBsaWJleGVjIGluc2FuZSB0ZXN0IHNvIHNraXAgaXQuCisjIFB5dGhvbiBtb2R1bGUgbmVlZHMgdG8ga2VlcCBfbHR0bmcuc28KK0lOU0FORV9TS0lQXyR7UE59ID0gImxpYmV4ZWMgZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImxpYmV4ZWMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIERlbGV0ZSBhIHNoaXBwZWQgbTQgZmlsZSB0aGF0IG92ZXJyaWRlcyBvdXIgcGF0Y2hlZCBvbmUKKwlybSAtZiAke1N9L2NvbmZpZy9saWJ4bWwubTQKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY2htb2QgK3ggJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdXRpbHMvdXRpbHMuc2gKKwlmb3IgaSBpbiBgZmluZCAke0R9JHtQVEVTVF9QQVRIfSAtcGVybSAvdSt4IC10eXBlIGZgOyBkbworCQlzZWQgLWUgInM6XCRURVNURElSLiovc3JjL2Jpbi9sdHRuZy9cJExUVE5HX0JJTjpcJExUVE5HX0JJTjpnIiBcCisJCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvXCRTRVNTSU9ORF9CSU46XCRTRVNTSU9ORF9CSU46ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctc2Vzc2lvbmQvXCRTRVNTSU9ORF9CSU46XCRTRVNTSU9ORF9CSU46ZyIgXAorCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLWNvbnN1bWVyZC86JHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLWNvbnN1bWVyZC86JHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvOmciIFwKKwkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9sdHRuZy1zZXNzaW9uZDpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1yZWxheWQvXCRSRUxBWURfQklOOlwkUkVMQVlEX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtaSAkaQorCWRvbmUKKworCXNlZCAtZSAiczpzcmMvYmluL2x0dG5nLXNlc3Npb25kOiRiaW5kaXI6ZyIgXAorCSAgICAtZSAiczpzcmMvYmluL2x0dG5nLWNvbnN1bWVyZDoke2xpYmV4ZWNkaXJ9L2xpYmV4ZWMvOmciIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy9yZWdyZXNzaW9uL3J1bi1yZXBvcnQucHkKKwlzZWQgLWUgInM6c3JjL2JpbjpiaW46ZyIgLWUgInM6bHQtOjpnIiBcCisJLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdXRpbHMvdXRpbHMuc2gKKwlzZWQgLWUgInM6aW5pX2NvbmZpZzpcLmxpYnNcL2luaV9jb25maWc6IiBcCisJLWkgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMvdW5pdC9pbmlfY29uZmlnL3Rlc3RfaW5pX2NvbmZpZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMTIwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2ZDAyYTZjMWFlYjFkMDUwZmZlN2M2NjI0YmFiOWFjZmE3NmZjMDVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDEyIE1heSAyMDE1IDExOjA0OjM0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGx0dG5nLXVzdDpGaXggbGl2ZSB0aW1lciBjYWxjdWxhdGlvbiBlcnJvcgorCitUaGVyZSBpcyBhbiBjYWxjdWxhdGlvbiBlcnJvciBmb3IgbGl2ZSB0aW1lci4gVmFyaWFibGUgY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsIGlzCitiYXNlZCBvbiBtaWNyb3NlY29uZCwgYW5kIGl0IGlzIG5vdCByaWdodCB0byBhc3NpZ24gY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsIG1vZAorMTAwMDAwMCB0byB2YXIgdHZfbnNlYyB3aGljaCBpcyBiYXNlZCBvbiBuYW5vc2Vjb25kLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlrYWVsIEJlY2tpdXMgPG1pa2FlbC5iZWNraXVzQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKaWFuY2h1YW4gV2FuZyA8amlhbmNodWFuLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMgYi9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMKK2luZGV4IGViNGU0ODYuLmUwMzc3YTMgMTAwNjQ0CistLS0gYS9saWJyaW5nYnVmZmVyL3JpbmdfYnVmZmVyX2Zyb250ZW5kLmMKKysrKyBiL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworQEAgLTUyOCw3ICs1MjgsNyBAQCB2b2lkIGxpYl9yaW5nX2J1ZmZlcl9jaGFubmVsX3N3aXRjaF90aW1lcl9zdGFydChzdHJ1Y3QgY2hhbm5lbCAqY2hhbikKKyAJfQorIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gY2hhbi0+c3dpdGNoX3RpbWVyX2ludGVydmFsIC8gMTAwMDAwMDsKKy0JaXRzLml0X3ZhbHVlLnR2X25zZWMgPSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lkIGxpYl9yaW5nX2J1ZmZlcl9jaGFubmVsX3JlYWRfdGltZXJfc3RhcnQoc3RydWN0IGNoYW5uZWwgKmNoYW4pCisgCX0KKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChjaGFuLT5yZWFkX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3QvbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRG9uJ3QgYnVpbGQgdGhlIGRvYyBleGFtcGxlcyAtIHdlIGRvbid0IG5lZWQgdGhlbSBhbmQgaW4gZmFjdCB0aGV5CituZXZlciBzdWNjZXNzZnVsbHkgYnVpbHQgaW4gcHJldmlvdXMgaXRlcmF0aW9ucyBvZiB0aGUgbHR0bmctdXN0CityZWNpcGUgYW55d2F5LgorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogZG9jL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistU1VCRElSUyA9IC4gZXhhbXBsZXMKKytTVUJESVJTID0gLgorIAorIGRpc3RfbWFuX01BTlMgPSBtYW4vbHR0bmctZ2VuLXRwLjEgXAorIAltYW4vbHR0bmctdXN0LjMgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy11c3RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNGFmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJMaW51eCBUcmFjZSBUb29sa2l0IFVzZXJzcGFjZSBUcmFjZXIgMi54IgorREVTQ1JJUFRJT04gPSAiVGhlIExUVG5nIFVTVCAyLnggcGFja2FnZSBjb250YWlucyB0aGUgdXNlcnNwYWNlIHRyYWNlciBsaWJyYXJ5IHRvIHRyYWNlIHVzZXJzcGFjZSBjb2Rlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vbHR0bmcub3JnL3VzdCIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmx0dG5nLm9yZy9wcm9qZWN0cy9sdHRuZy11c3QiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgTUlUICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOTYzZWIzNjZiNzgxMjUyYjBiZjBmZGYxNjI0ZDllOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zbnByaW50Zi9zbnByaW50Zi5jO2VuZGxpbmU9MzI7bWQ1PWQzZDU0NDk1OWQ4YTM3ODJiMmUwNzQ1MWJlMGE5MDNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NucHJpbnRmL3ZhcmlvdXMuaDtlbmRsaW5lPTMxO21kNT04OWYyNTA5YjZiNDY4MmM0ZmM5NTI1NWVlYzRhYmU0NCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UKKworREVQRU5EUyA9ICJsaWJ1cmN1IHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfS1iaW4gPSAicHl0aG9uLWNvcmUiCisKKyMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFmdGVyIHJlbmFtZQorUlBST1ZJREVTXyR7UE59ID0gImx0dG5nMi11c3QiCitSUkVQTEFDRVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKK1JDT05GTElDVFNfJHtQTn0gPSAibHR0bmcyLXVzdCIKKworU1JDUkVWID0gImM0OWVlOTA0MGFkYTY5ODRjODgwNzU2NjE0ZThhNmY3ZmQ2NDViZDYiCitQRSA9ICIyIgorUFYgPSAiMi42LjIrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy11c3QuZ2l0O2JyYW5jaD1zdGFibGUtMi42IFwKKyAgICAgICAgICAgZmlsZTovL2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggXAorICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307ICR7U30vYm9vdHN0cmFwICkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvUEQucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWM0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL1BELnBhdGNoCkBAIC0wLDAgKzEsOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBtb2R1dGlscy1pbml0c2NyaXB0cy0xLjAvTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG1vZHV0aWxzLWluaXRzY3JpcHRzLTEuMC9MSUNFTlNFCTIwMTAtMTItMDYgMTQ6MjY6MDMuNTcwMzM5MDAyIC0wODAwCitAQCAtMCwwICsxIEBACisrUHVibGljIERvbWFpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9tb2R1dGlscy5zaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc4YWRmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvbW9kdXRpbHMuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb2R1bGUtaW5pdC10b29scworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgU2hvdWxkLVN0YXJ0OiAgICAgIGNoZWNrcm9vdAorIyBTaG91bGQtc3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogUHJvY2VzcyAvZXRjL21vZHVsZXMuCisjIERlc2NyaXB0aW9uOiAgICAgICBMb2FkIHRoZSBtb2R1bGVzIGxpc3RlZCBpbiAvZXRjL21vZHVsZXMuCisjIyMgRU5EIElOSVQgSU5GTworCitMT0FEX01PRFVMRT1tb2Rwcm9iZQorWyAtZiAvcHJvYy9tb2R1bGVzIF0gfHwgZXhpdCAwCitbIC1mIC9ldGMvbW9kdWxlcyBdIHx8IFsgLWQgL2V0Yy9tb2R1bGVzLWxvYWQuZCBdIHx8IGV4aXQgMAorWyAtZSAvc2Jpbi9tb2Rwcm9iZSBdIHx8IExPQURfTU9EVUxFPWluc21vZAorCitpZiBbICEgLWYgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvbW9kdWxlcy5kZXAgXTsgdGhlbgorCVsgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gIkNhbGN1bGF0aW5nIG1vZHVsZSBkZXBlbmRlbmNpZXMgLi4uIgorCWRlcG1vZCAtQWUKK2ZpCisKK2xvYWRlZF9tb2R1bGVzPSIgIgorCitwcm9jZXNzX2ZpbGUoKSB7CisJZmlsZT0kMQorCisJKGNhdCAkZmlsZTsgZWNobzsgKSB8CisJd2hpbGUgcmVhZCBtb2R1bGUgYXJncworCWRvCisJCWNhc2UgIiRtb2R1bGUiIGluCisJCQlcIyp8IiIpIGNvbnRpbnVlIDs7CisJCWVzYWMKKwkJWyAtbiAiJChlY2hvICRsb2FkZWRfbW9kdWxlcyB8IGdyZXAgIiAkbW9kdWxlICIpIiBdICYmIGNvbnRpbnVlCisJCVsgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gLW4gIiRtb2R1bGUgIgorCQlldmFsICIkTE9BRF9NT0RVTEUgJG1vZHVsZSAkYXJncyA+L2Rldi9udWxsIDI+JjEiCisJCWxvYWRlZF9tb2R1bGVzPSIke2xvYWRlZF9tb2R1bGVzfSR7bW9kdWxlfSAiCisJZG9uZQorfQorCitbICIkVkVSQk9TRSIgIT0gbm8gXSAmJiBlY2hvIC1uICJMb2FkaW5nIG1vZHVsZXM6ICIKK1sgLWYgL2V0Yy9tb2R1bGVzIF0gJiYgcHJvY2Vzc19maWxlIC9ldGMvbW9kdWxlcworCitbIC1kIC9ldGMvbW9kdWxlcy1sb2FkLmQgXSB8fCBleGl0IDAKKworZm9yIGYgaW4gL2V0Yy9tb2R1bGVzLWxvYWQuZC8qLmNvbmY7IGRvCisJcHJvY2Vzc19maWxlICRmCitkb25lCitbICIkVkVSQk9TRSIgIT0gbm8gXSAmJiBlY2hvCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9tb2R1dGlscy1pbml0c2NyaXB0cy5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NzBjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvbW9kdXRpbHMtaW5pdHNjcmlwdHMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJJbml0c2NyaXB0IGZvciBhdXRvLWxvYWRpbmcga2VybmVsIG1vZHVsZXMgb24gYm9vdCIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03YmY4N2ZjMzc5NzZlOTNlYzY2YWQ4NGZhYzU4YzA5OCIKK1NSQ19VUkkgPSAiZmlsZTovL21vZHV0aWxzLnNoIFwKKwkgICBmaWxlOi8vUEQucGF0Y2giCisKK1BSID0gInI3IgorCitTID0gIiR7V09SS0RJUn0iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJtb2R1dGlscy5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDA1IFMgLiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitkb19jb21waWxlICgpIHsKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbW9kdXRpbHMuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworfQorCitERVBFTkRTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCdzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUnLCcnLGQpfSIKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCQlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQkJT1BUUz0iLS1yb290PSREIgorCQlmaQorCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayBtb2R1dGlscy5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVjNTZlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1NVTU1BUlkgPSAiU3lzdGVtLVdpZGUgUHJvZmlsZXIiCitERVNDUklQVElPTiA9ICJPUHJvZmlsZSBpcyBhIHN5c3RlbS13aWRlIHByb2ZpbGVyIGZvciBMaW51eCBzeXN0ZW1zLCBjYXBhYmxlIFwKK29mIHByb2ZpbGluZyBhbGwgcnVubmluZyBjb2RlIGF0IGxvdyBvdmVyaGVhZC4iCitIT01FUEFHRSA9ICJodHRwOi8vb3Byb2ZpbGUuc291cmNlZm9yZ2UubmV0L25ld3MvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE2MTkxJmF0aWQ9MTE2MTkxIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyAmIEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib3BhZ2VudC9vcGFnZW50Lmg7YmVnaW5saW5lPTU7ZW5kbGluZT0yNjttZDU9NGYxNmY3MmM3YTQ5M2Q4YTQ3MDRhYTE4ZDAzZDE1YzYgXAorICAgICAgICAgICAgICAgICAgICIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0RFUEVORFMgPSAicG9wdCBiaW51dGlscyIKK1JERVBFTkRTXyR7UE59ID0gImJpbnV0aWxzLXN5bWxpbmtzIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLXZtbGludXgiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2xpYmRpcn0vJHtCUE59L2xpYioke1NPTElCU30gJHtkYXRhZGlyfS8ke0JQTn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vJHtCUE59L2xpYioubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vbGliKi5hIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9yb290LWhvbWUtZGlyLnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1rZXJuZWw9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSAtLXdpdGhvdXQteCBhY19jdl9wcm9nX1hTTFRQUk9DPSIKK2RvX2NvbmZpZ3VyZSAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKwlhdXRvdG9vbHNfZG9fY29uZmlndXJlCit9CisKK0VYVFJBX09FTUFLRSA9ICJTUkNESVI9JHtQVEVTVF9QQVRIfS9saWJ1dGlsKysvdGVzdHMiCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgY2hlY2sKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlzdWJkaXJzPSJsaWJkYi90ZXN0cyBsaWJ1dGlsKysvdGVzdHMgbGlicmVnZXgvdGVzdHMgbGlidXRpbC90ZXN0cyBsaWJvcC90ZXN0cyBsaWJkYi90ZXN0cyAiCisJZm9yIHRvb2x0ZXN0IGluICR7c3ViZGlyc30KKwlkbworCQlmaW5kICR7dG9vbHRlc3R9IC1wZXJtIC91PXggLXR5cGUgZnwgY3BpbyAtcHZkdSAke0R9JHtQVEVTVF9QQVRIfQorCWRvbmUKKworCSMgbmVlZGVkIGJ5IHNvbWUgbGlib3AgdGVzdHMKKwljcCAtciBldmVudHMgJHtEfSR7UFRFU1RfUEFUSH0KKworCSMgbmVlZGVkIGJ5IGxpYnJlZ2V4IHJlZ2V4X3Rlc3QKKwljcCBsaWJyZWdleC9zdGwucGF0ICR7RH0ke1BURVNUX1BBVEh9L2xpYnJlZ2V4CisJY3AgbGlicmVnZXgvdGVzdHMvbWFuZ2xlZC1uYW1lICR7RH0ke1BURVNUX1BBVEh9L2xpYnJlZ2V4L3Rlc3RzCisKKwkjIG5lZWRlZCBieSBsaXR1dGlsKysgZmlsZV9tYW5pcF90ZXN0cworCWNwICR7U30vbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMuY3BwIFwKKwkJbGlidXRpbCsrL3Rlc3RzL2ZpbGVfbWFuaXBfdGVzdHMubyAke0R9JHtQVEVTVF9QQVRIfS9saWJ1dGlsKysvdGVzdHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlY2Q5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsNTgxIEBACitkbmwgQVhfS0VSTkVMX09QVElPTihvcHRpb24sIGFjdGlvbi1pZi1mb3VuZCwgYWN0aW9uLWlmLW5vdC1mb3VuZCkKK2RubCBzZWUgaWYgYXV0b2NvbmYuaCBkZWZpbmVzIHRoZSBvcHRpb24KK0FDX0RFRlVOKFtBWF9LRVJORUxfT1BUSU9OXSwgWworU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItSSRLSU5DIC1PMiAtRF9fS0VSTkVMX18iCitBQ19UUllfQ09NUElMRSggWyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD5dLAorWworI2lmbmRlZiAkMQorYnJlYWtfbWVfaGFyZChcXFwpOworI2VuZGlmCitdLFskMl0sWyQzXSwpCitDRkxBR1M9JFNBVkVfQ0ZMQUdTCitdKQorCitkbmwgSGFuZGxlIHRoZSAyLjQgbW9kdWxlIGluc2lkZSBtb2R1bGUvCitBQ19ERUZVTihbQVhfQ09ORklHX01PRFVMRV0sCitbCitpZiB0ZXN0ICEgLWYgJEtJTkMvbGludXgvYXV0b2NvbmYuaDsgdGhlbgorCUFDX01TR19FUlJPUihbbm8gc3VpdGFibHkgY29uZmlndXJlZCBrZXJuZWwgaW5jbHVkZSB0cmVlIGZvdW5kXSkKK2ZpCisKK2RubCAgLS0tIEdldCBMaW51eCBrZXJuZWwgdmVyc2lvbiBhbmQgY29tcGlsZSBwYXJhbWV0ZXJzIC0tLQorCitBQ19TVUJTVChLVkVSUykKK0FDX01TR19DSEVDS0lORyhbZm9yIGtlcm5lbCB2ZXJzaW9uXSkKK2RubCBpdCdzIGxpa2UgdGhpcyB0byBoYW5kbGUgbWFuZHJha2UncyBmdWJhciB2ZXJzaW9uLmggLSBidWcgIzQ3MTQ0OAorZXZhbCBLVkVSUz1gZ2NjIC1JJEtJTkMgLUUgLWRNICRLSU5DL2xpbnV4L3ZlcnNpb24uaCB8IGdyZXAgLXcgVVRTX1JFTEVBU0UgfCBhd2sgJ3twcmludCAkW10zfSdgCitBQ19NU0dfUkVTVUxUKFskS1ZFUlNdKQorY2FzZSAiJEtWRVJTIiBpbgorMi4yLip8Mi40LiopIDs7CisqKSBBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIGtlcm5lbCB2ZXJzaW9uXSkKK2VzYWMKKworZG5sIENoZWNrIGZvciB0aGUgbWluaW1hbCBrZXJuZWwgdmVyc2lvbiBzdXBwb3J0ZWQKK0FDX01TR19DSEVDS0lORyhba2VybmVsIHZlcnNpb25dKQorQVhfS0VSTkVMX1ZFUlNJT04oMiwgMiwgMTAsIDw9LCBBQ19NU0dfUkVTVUxUKFtva10pLCBBQ19NU0dfRVJST1IoW2NoZWNrIGh0bWwgZG9jdW1lbnRhdGlvbiBpbnN0YWxsIHNlY3Rpb25dKSkKKworZG5sIGxpbnV4L3NwaW5sb2NrLmggYWRkZWQgYXQgc29tZSBwb2ludCBpbiBwYXN0CitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkS0lOQy9saW51eC9zcGlubG9jay5oXSkKK2lmIHRlc3QgLWYgJEtJTkMvbGludXgvc3BpbmxvY2suaDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ESEFWRV9MSU5VWF9TUElOTE9DS19IRUFERVIiCisJQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBydGNfbG9ja10pCitnY2MgLUkkS0lOQyAtRSAkS0lOQy9saW51eC9tYzE0NjgxOHJ0Yy5oIHwgZ3JlcCBydGNfbG9jayA+L2Rldi9udWxsCitpZiB0ZXN0ICIkPyIgLWVxIDA7IHRoZW4KKwlFWFRSQV9DRkxBR1NfTU9EVUxFPSIkRVhUUkFfQ0ZMQUdTX01PRFVMRSAtRFJUQ19MT0NLIgorCUFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisJQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKwkgCithcmNoPSJ1bmtub3duIgorQUNfTVNHX0NIRUNLSU5HKGZvciB4ODYtNjQgYXJjaGl0ZWN0dXJlKQorQVhfS0VSTkVMX09QVElPTihDT05GSUdfWDg2XzY0LCB4ODY2ND0xLCB4ODY2ND0wKQorQVhfTVNHX1JFU1VMVF9ZTigkeDg2NjQpCitCVUlMRF9IQU1NRVI9bm8KK2lmIHRlc3QgIiR4ODY2NCIgLWVxIDE7IHRoZW4KKwlhcmNoPSJ4ODYiCisJQlVJTERfSEFNTUVSPXllcworZWxzZQorCUFDX01TR19DSEVDS0lORyhmb3IgeDg2IGFyY2hpdGVjdHVyZSkKKwlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODYsIHg4Nj0xLCB4ODY9MCkKKwlBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODZfV1BfV09SS1NfT0ssIHg4Nj0xLCB4ODY9JHg4NikKKwlBWF9NU0dfUkVTVUxUX1lOKCR4ODYpCisJdGVzdCAiJHg4NiIgPSAxICYmIGFyY2g9Ing4NiIKKwkKKwlpZiB0ZXN0ICIkYXJjaCIgPSAidW5rbm93biI7IHRoZW4KKyAgCQlBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlhNjQgYXJjaGl0ZWN0dXJlKQorICAJCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX0lBNjQsIGlhNjQ9MSwgaWE2ND0wKQorICAJCUFYX01TR19SRVNVTFRfWU4oJGlhNjQpCisgIAkJdGVzdCAiJGlhNjQiID0gMSAmJiBhcmNoPSJpYTY0IgorCWZpCisKK2ZpCitBQ19TVUJTVChCVUlMRF9IQU1NRVIpCisKK3Rlc3QgIiRhcmNoIiA9ICJ1bmtub3duIiAmJiBBQ19NU0dfRVJST1IoVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlKQorCitkbmwgY2hlY2sgdG8gc2VlIGlmIGtlcm5lbCB2ZXJpb24gYXBwcm9wcmlhdGUgZm9yIGFyY2gKK0FDX01TR19DSEVDS0lORyhhcmNoL2tlcm5lbCB2ZXJzaW9uIGNvbWJpbmF0aW9uKQorY2FzZSAiJGFyY2giIGluCitpYTY0KQorCUFYX0tFUk5FTF9WRVJTSU9OKDIsIDQsIDE4LCA8LCBBQ19NU0dfUkVTVUxUKFtva10pLAorCQlBQ19NU0dfRVJST1IoW3Vuc3VwcG9ydGVkIGFyY2gva2VybmVsXSkpIDs7CisqKSBBQ19NU0dfUkVTVUxUKFtva10pCitlc2FjCisKK2RubCBmb3Igbm93IHdlIGRvIG5vdCBzdXBwb3J0IFBSRUVNUFQgcGF0Y2gKK0FDX01TR19DSEVDS0lORyhbZm9yIHByZWVtcHQgcGF0Y2hdKQorQVhfS0VSTkVMX09QVElPTihDT05GSUdfUFJFRU1QVCxwcmVlbXB0PTEscHJlZW1wdD0wKQorQVhfTVNHX1JFU1VMVF9ZTihbJHByZWVtcHRdKQordGVzdCAiJHByZWVtcHQiID0gMCB8fCBBQ19NU0dfRVJST1IoW3Vuc3VwcG9ydGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIDogQ09ORklHX1BSRUVNUFRdKQorCitBQ19TVUJTVChLSU5DKQorCitNT0RJTlNUQUxMRElSPS9saWIvbW9kdWxlcy8kS1ZFUlMKKyAKK09QUk9GSUxFX01PRFVMRV9BUkNIPSRhcmNoCitBQ19TVUJTVChPUFJPRklMRV9NT0RVTEVfQVJDSCkKK10KKykKKworZG5sIEFYX01TR19SRVNVTFRfWU4oYSkKK2RubCByZXN1bHRzICJ5ZXMiIGlmZiBhPT0xLCAibm8iIGVsc2UKK0FDX0RFRlVOKFtBWF9NU0dfUkVTVUxUX1lOXSwgW3g9bm8KK3Rlc3QgIngkMSIgPSAieDEiICYmIHg9eWVzCitBQ19NU0dfUkVTVUxUKCR4KV0pCisKK2RubCBBWF9NQUxMT0NfQVRUUklCVVRFIC0gc2VlIGlmIGdjYyB3aWxsIHRha2UgX19hdHRyaWJ1dGVfXygobWFsbG9jKSkKK0FDX0RFRlVOKFtBWF9NQUxMT0NfQVRUUklCVVRFXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBtYWxsb2MgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2RdKQorU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiCitBQ19UUllfQ09NUElMRSgsWwordm9pZCBtb25rZXkoKSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKTsKK10sQUNfTVNHX1JFU1VMVChbeWVzXSk7IEFDX0RFRklORShNQUxMT0NfQVRUUklCVVRFX09LLCAxLCBbd2hldGhlciBtYWxsb2MgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2RdKSwgQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NGTEFHUz0kU0FWRV9DRkxBR1MgCitdCispCisKK2RubCBidWlsdGluX2V4cGVjdCBpcyB1c2VkIGluIG1vZHVsZSB3ZSBjYW4ndCBhZGQgdGhhdCBpbiBjb25maWcuaAorQUNfREVGVU4oW0FYX0JVSUxUSU5fRVhQRUNUXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBfX2J1aWx0aW5fZXhwZWN0IGlzIHVuZGVyc3Rvb2RdKQorU0FWRV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItV2Vycm9yICRDRkxBR1MiCitBQ19UUllfTElOSygsWworaW50IGk7CitpZiAoX19idWlsdGluX2V4cGVjdChpLCAwKSkgeyB9CitdLAorQUNfTVNHX1JFU1VMVChbeWVzXSk7IEVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1ERVhQRUNUX09LIiwKK0FDX01TR19SRVNVTFQoW25vXSk7KQorQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKK10KKykgCisKK2RubCBBWF9FWFRSQV9ESVJTIC0gTGV0IHVzZXIgc3BlY2lmeSBleHRyYSBkaXJzIGZvciBpbmNsdWRlL2xpYnMKK0FDX0RFRlVOKFtBWF9FWFRSQV9ESVJTXSwKK1sKK0FDX0FSR19XSVRIKGV4dHJhLWluY2x1ZGVzLAorWyAgLS13aXRoLWV4dHJhLWluY2x1ZGVzPURJUiAgICBhZGQgZXh0cmEgaW5jbHVkZSBwYXRoc10sCisgIHVzZV9leHRyYV9pbmNsdWRlcz0iJHdpdGh2YWwiLAorICB1c2VfZXh0cmFfaW5jbHVkZXM9Tk8KKykKK2lmIHRlc3QgLW4gIiR1c2VfZXh0cmFfaW5jbHVkZXMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9pbmNsdWRlcyIgIT0gIk5PIjsgdGhlbgorICBhY19zYXZlX2lmcz0kSUZTCisgIElGUz0nOicKKyAgZm9yIGRpciBpbiAkdXNlX2V4dHJhX2luY2x1ZGVzOyBkbworICAgIGV4dHJhX2luY2x1ZGVzPSIkZXh0cmFfaW5jbHVkZXMgLUkkZGlyIgorICBkb25lCisgIElGUz0kYWNfc2F2ZV9pZnMKKyAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkZXh0cmFfaW5jbHVkZXMiCitmaQorCitBQ19BUkdfV0lUSChleHRyYS1saWJzLAorWyAgLS13aXRoLWV4dHJhLWxpYnM9RElSICAgICAgICBhZGQgZXh0cmEgbGlicmFyeSBwYXRoc10sCisgIHVzZV9leHRyYV9saWJzPSR3aXRodmFsLAorICB1c2VfZXh0cmFfbGlicz1OTworKQoraWYgdGVzdCAtbiAiJHVzZV9leHRyYV9saWJzIiAmJiBcCisgICAgICAgIHRlc3QgIiR1c2VfZXh0cmFfbGlicyIgIT0gIk5PIjsgdGhlbgorICAgYWNfc2F2ZV9pZnM9JElGUworICAgSUZTPSc6JworICAgZm9yIGRpciBpbiAkdXNlX2V4dHJhX2xpYnM7IGRvCisgICAgIGV4dHJhX2xpYnJhcmllcz0iJGV4dHJhX2xpYnJhcmllcyAtTCRkaXIiCisgICBkb25lCisgICBJRlM9JGFjX3NhdmVfaWZzCisgICBMREZMQUdTPSIkTERGTEFHUyAkZXh0cmFfbGlicmFyaWVzIgorZmkKK10KKykKKworZG5sIEFYX1BPUFRfQ09OU1QgLSBjaGVjayBwb3B0IHByb3RvdHlwZQorQUNfREVGVU4oW0FYX1BPUFRfQ09OU1RdLAorWworQUNfTVNHX0NIRUNLSU5HKFtwb3B0IHByb3RvdHlwZV0pCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9Ii1XZXJyb3IgJENYWEZMQUdTIgorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxwb3B0Lmg+XSwKK1sKK2ludCBjOyBjaGFyICoqdjsKK3BvcHRHZXRDb250ZXh0KDAsIGMsIHYsIDAsIDApOworXSwKK0FDX01TR19SRVNVTFQoW3Rha2VzIGNoYXIgKipdKTssCitBQ19NU0dfUkVTVUxUKFt0YWtlcyBjb25zdCBjaGFyICoqXSk7IEFDX0RFRklORShDT05TVF9QT1BULCAxLCBbd2hldGhlciBwb3B0IHByb3RvdHlwZSB0YWtlcyBhIGNvbnN0IGNoYXIgKipdKSkKK0NYWEZMQUdTPSIkU0FWRV9DWFhGTEFHUyIKK10KKykKKworZG5sIEFYX0NIRUNLX1NTVFJFQU0gLSBjaGVjayBpZiBsb2NhbCBzc3RyZWFtIGlzIG5lZWRlZCB0byBjb21waWxlIE9LCitBQ19ERUZVTihbQVhfQ0hFQ0tfU1NUUkVBTV0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdXNlIGluY2x1ZGVkIHNzdHJlYW1dKQorQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzc3RyZWFtPl0sIFtdLCAKK0FDX01TR19SRVNVTFQoW25vXSk7LAorQUNfTVNHX1JFU1VMVChbeWVzXSk7IE9QX0NYWEZMQUdTPSIkT1BfQ1hYRkxBR1MgLUlcJHt0b3Bfc3JjZGlyfS9pbmNsdWRlIikKK10KKykKKworZG5sIEFYX0NIRUNLX1RZUEVERUYodHlwZWRlZl9uYW1lLCB0eXBlLCBhY3Rpb24taWYtdHJ1ZSwgYWN0aW9uLWlmLWZhbHNlKQorZG5sIGV4ZWMgYWN0aW9uLWlmLXRydWUgaWYgdHlwZWRlZl9uYW1lIGlzIGEgdHlwZWRlZiB0byB0eXBlIGVsc2UgZXhlYyAKK2RubCBhY3Rpb24taWYtZmFsc2UKK2RubCBjdXJyZW50bHkgd29yayBvbmx5IHdpdGggdHlwZSB0eXBlZGVmJ2VkIGluIHN0ZGRlZi5oCitBQ19ERUZVTihbQVhfQ0hFQ0tfVFlQRURFRl0sIFsKK2RubCBBQ19MQU5HX1BVU0goQykgbm90IGluIGF1dG9jb25mIDIuMTMKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKKworQUNfVFJZX0NPTVBJTEUoCisgIFsKKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICBdLAorICBbCisgIHR5cGVkZWYgdm9pZCAoKmZjdDEpKCQxKTsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MikoJDIpOworICBmY3QxIGYxID0gMDsKKyAgZmN0MiBmMiA9IDA7CisgIGlmIChmMSA9PSBmMikge30KKyAgXSwKK1skM10sWyQ0XSkKKworQ0ZMQUdTPSRTQVZFX0NGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCisKK2RubCBBWF9UWVBFREVGRURfTkFNRSh0eXBlZGVmX25hbWUsIGNhbmRpZGF0ZV9saXN0LCB2YXJfbmFtZSkKK2RubCBzZXQgdmFyX25hbWUgdG8gdGhlIHR5cGVkZWYgbmFtZSBvZiAkMSB3aGljaCBtdXN0IGJlIGluIGNhbmRpdGF0ZV9saXN0CitkbmwgZWxzZSBwcm9kdWNlIGEgZmF0YWwgZXJyb3IKK0FDX0RFRlVOKFtBWF9UWVBFREVGRURfTkFNRV0sIFsKKwlBQ19NU0dfQ0hFQ0tJTkcoW3R5cGUgb2YgJDFdKQorCWZvciBmIGluICQyOyBkbworCQlBWF9DSEVDS19UWVBFREVGKCQxLCAkZiwgJDM9IiRmIiwgJDM9IiIpCisJCWlmIHRlc3QgLW4gIiR7JDN9IjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAtbiAiJHskM30iOyB0aGVuCisJCUFDX01TR19SRVNVTFQoWyR7JDN9XSkKKwllbHNlCisJCUFDX01TR19FUlJPUihbbm90IGZvdW5kXSkKKwlmaQorXSkKKworZG5sIGZpbmQgYSBiaW5hcnkgaW4gdGhlIHBhdGgKK0FDX0RFRlVOKFtRVF9GSU5EX1BBVEhdLAorWworCUFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKKwlBQ19DQUNIRV9WQUwocXRfY3ZfcGF0aF8kMSwKKwlbCisJCXF0X2N2X3BhdGhfJDE9Ik5PTkUiCisJCWlmIHRlc3QgLW4gIiQkMiI7IHRoZW4KKwkJCXF0X2N2X3BhdGhfJDE9IiQkMiI7CisJCWVsc2UKKwkJCWRpcnM9IiQzIgorCQkJcXRfc2F2ZV9JRlM9JElGUworCQkJSUZTPSc6JworCQkJZm9yIGRpciBpbiAkUEFUSDsgZG8KKwkJCQlkaXJzPSIkZGlycyAkZGlyIgorCQkJZG9uZQorCQkJSUZTPSRxdF9zYXZlX0lGUworIAorCQkJZm9yIGRpciBpbiAkZGlyczsgZG8KKwkJCQlpZiB0ZXN0IC14ICIkZGlyLyQxIjsgdGhlbgorCQkJCQlpZiB0ZXN0IC1uICIkNSI7IHRoZW4KKwkJCQkJCWV2YWxzdHI9IiRkaXIvJDEgJDUgMj4mMSAiCisJCQkJCQlpZiBldmFsICRldmFsc3RyOyB0aGVuCisJCQkJCQkJcXRfY3ZfcGF0aF8kMT0iJGRpci8kMSIKKwkJCQkJCQlicmVhaworCQkJCQkJZmkKKwkJCQkJZWxzZQorCQkJCQkJcXRfY3ZfcGF0aF8kMT0iJGRpci8kMSIKKwkJCQkJCWJyZWFrCisJCQkJCWZpCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwldKQorIAorCWlmIHRlc3QgLXogIiRxdF9jdl9wYXRoXyQxIiB8fCB0ZXN0ICIkcXRfY3ZfcGF0aF8kMSIgPSAiTk9ORSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChub3QgZm91bmQpCisJCSQ0CisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKCRxdF9jdl9wYXRoXyQxKQorCQkkMj0kcXRfY3ZfcGF0aF8kMQorCWZpCitdKQorCitkbmwgRmluZCB0aGUgdWljIGNvbXBpbGVyIG9uIHRoZSBwYXRoIG9yIGluIHF0X2N2X2RpcgorQUNfREVGVU4oW1FUX0ZJTkRfVUlDXSwKK1sKKwlRVF9GSU5EX1BBVEgodWljLCBhY191aWMsICRxdF9jdl9kaXIvYmluKQorCWlmIHRlc3QgLXogIiRhY191aWMiIC1hICIkRkFUQUwiID0gMTsgdGhlbgorCQlBQ19NU0dfRVJST1IoW3VpYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhXSkKKwlmaQorXSkKKyAKK2RubCBGaW5kIHRoZSByaWdodCBtb2MgaW4gcGF0aC9xdF9jdl9kaXIKK0FDX0RFRlVOKFtRVF9GSU5EX01PQ10sCitbCisJUVRfRklORF9QQVRIKG1vYzIsIGFjX21vYzIsICRxdF9jdl9kaXIvYmluKQorCVFUX0ZJTkRfUEFUSChtb2MsIGFjX21vYzEsICRxdF9jdl9kaXIvYmluKQorCisJaWYgdGVzdCAtbiAiJGFjX21vYzEiIC1hIC1uICIkYWNfbW9jMiI7IHRoZW4KKwkJZG5sIGZvdW5kIGJvdGguIFByZWZlciBRdDMncyBpZiBpdCBleGlzdHMgZWxzZSBtb2MyCisJCSRhY19tb2MxIC12IDI+JjEgfCBncmVwICJRdCAzIiA+L2Rldi9udWxsCisJCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWVsc2UKKwkJaWYgdGVzdCAtbiAiJGFjX21vYzEiOyB0aGVuCisJCQlhY19tb2M9JGFjX21vYzE7CisJCWVsc2UKKwkJCWFjX21vYz0kYWNfbW9jMjsKKwkJZmkKKwlmaQorCisJaWYgdGVzdCAteiAiJGFjX21vYyIgIC1hICIkRkFUQUwiID0gMTsgdGhlbgorCQlBQ19NU0dfRVJST1IoW21vYyBiaW5hcnkgbm90IGZvdW5kIGluIFwkUEFUSCBvciAkcXRfY3ZfZGlyL2JpbiAhXSkKKwlmaQorXSkKKworZG5sIGNoZWNrIGEgcGFydGljdWxhciBsaWJuYW1lCitBQ19ERUZVTihbUVRfVFJZX0xJTktdLAorWworCVNBVkVfTElCUz0iJExJQlMiCisJTElCUz0iJExJQlMgJDEiCisJQUNfVFJZX0xJTksoWworCSNpbmNsdWRlIDxxZ2xvYmFsLmg+CisJI2luY2x1ZGUgPHFzdHJpbmcuaD4KKwkJXSwKKwlbCisJUVN0cmluZyBzKCJtYW5nbGVfZmFpbHVyZSIpOworCSNpZiAoUVRfVkVSU0lPTiA8IDIyMSkKKwlicmVha19tZV8oXFxcKTsKKwkjZW5kaWYKKwldLAorCXF0X2N2X2xpYm5hbWU9JDEsCisJKQorCUxJQlM9IiRTQVZFX0xJQlMiCitdKQorIAorZG5sIGNoZWNrIHdlIGNhbiBkbyBhIGNvbXBpbGUKK0FDX0RFRlVOKFtRVF9DSEVDS19DT01QSUxFXSwKK1sKKwlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBRdCBsaWJyYXJ5IG5hbWVdKQorIAorCUFDX0NBQ0hFX1ZBTChxdF9jdl9saWJuYW1lLAorCVsKKwkJQUNfTEFOR19DUExVU1BMVVMKKwkJU0FWRV9DWFhGTEFHUz0kQ1hYRkxBR1MKKwkJQ1hYRkxBR1M9IiRDWFhGTEFHUyAkUVRfSU5DTFVERVMgJFFUX0xERkxBR1MiIAorCisJCWZvciBsaWJuYW1lIGluIC1scXQtbXQgLWxxdDMgLWxxdDIgLWxxdDsKKwkJZG8KKwkJCVFUX1RSWV9MSU5LKCRsaWJuYW1lKQorCQkJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCQkJYnJlYWs7CisJCQlmaQorCQlkb25lCisKKwkJQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKKwldKQorCisJaWYgdGVzdCAteiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCUFDX01TR19SRVNVTFQoW2ZhaWxlZF0pIAorCQlpZiB0ZXN0ICIkRkFUQUwiID0gMSA7IHRoZW4KKwkJCUFDX01TR19FUlJPUihbQ2Fubm90IGNvbXBpbGUgYSBzaW1wbGUgUXQgZXhlY3V0YWJsZS4gQ2hlY2sgeW91IGhhdmUgdGhlIHJpZ2h0IFwkUVRESVIgIV0pCisJCWZpCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFskcXRfY3ZfbGlibmFtZV0pCisJZmkKK10pCisKK2RubCBnZXQgUXQgdmVyc2lvbiB3ZSdyZSB1c2luZworQUNfREVGVU4oW1FUX0dFVF9WRVJTSU9OXSwKK1sKKwlBQ19DQUNIRV9DSEVDSyhbUXQgdmVyc2lvbl0sbHl4X2N2X3F0dmVyc2lvbiwKKwlbCisJCUFDX0xBTkdfQ1BMVVNQTFVTCisJCVNBVkVfQ1BQRkxBR1M9JENQUEZMQUdTCisJCUNQUEZMQUdTPSIkQ1BQRkxBR1MgJFFUX0lOQ0xVREVTIgorCisJCWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorIiUlJSJRVF9WRVJTSU9OX1NUUiIlJSUiCitFT0YKKwkJbHl4X2N2X3F0dmVyc2lvbj1gKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfCBcCisJCQlncmVwICdeIiUlJSInICAyPi9kZXYvbnVsbCB8IFwKKwkJCXNlZCAtZSAncy8iJSUlIi8vZycgLWUgJ3MvIi8vZydgCisJCXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKwkJQ1BQRkxBR1M9JFNBVkVfQ1BQRkxBR1MKKwldKQorIAorCVFUX1ZFUlNJT049JGx5eF9jdl9xdHZlcnNpb24KKwlBQ19TVUJTVChRVF9WRVJTSU9OKQorXSkKKyAKK2RubCBzdGFydCBoZXJlIAorQUNfREVGVU4oW1FUX0RPX0lUX0FMTF0sCitbCisJZG5sIFBsZWFzZSBsZWF2ZSB0aGlzIGFsb25lLiBJIHVzZSB0aGlzIGZpbGUgaW4KKwlkbmwgb3Byb2ZpbGUuCisJRkFUQUw9MAorCisJQUNfQVJHX1dJVEgocXQtZGlyLCBbICAtLXdpdGgtcXQtZGlyICAgICAgICAgICB3aGVyZSB0aGUgcm9vdCBvZiBRdCBpcyBpbnN0YWxsZWQgXSwKKwkJWyBxdF9jdl9kaXI9YGV2YWwgZWNobyAiJHdpdGh2YWwiL2AgXSkKKwkgCisJQUNfQVJHX1dJVEgocXQtaW5jbHVkZXMsIFsgIC0td2l0aC1xdC1pbmNsdWRlcyAgICAgIHdoZXJlIHRoZSBRdCBpbmNsdWRlcyBhcmUuIF0sCisJCVsgcXRfY3ZfaW5jbHVkZXM9YGV2YWwgZWNobyAiJHdpdGh2YWwiYCBdKQorIAorCUFDX0FSR19XSVRIKHF0LWxpYnJhcmllcywgWyAgLS13aXRoLXF0LWxpYnJhcmllcyAgICAgd2hlcmUgdGhlIFF0IGxpYnJhcnkgaXMgaW5zdGFsbGVkLl0sCisJCVsgIHF0X2N2X2xpYnJhcmllcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCisKKwlkbmwgcGF5IGF0dGVudGlvbiB0byAkUVRESVIgdW5sZXNzIG92ZXJyaWRkZW4KKwlpZiB0ZXN0IC16ICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlxdF9jdl9kaXI9JFFURElSCisJZmkKKyAKKwlkbmwgZGVyaXZlIGluYy9saWIgaWYgbmVlZGVkCisJaWYgdGVzdCAtbiAiJHF0X2N2X2RpciI7IHRoZW4KKwkJaWYgdGVzdCAteiAiJHF0X2N2X2luY2x1ZGVzIjsgdGhlbgorCQkJcXRfY3ZfaW5jbHVkZXM9JHF0X2N2X2Rpci9pbmNsdWRlCisJCWZpCisJCWlmIHRlc3QgLXogIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCisJCQlxdF9jdl9saWJyYXJpZXM9JHF0X2N2X2Rpci9saWIKKwkJZmkKKwlmaQorCisJZG5sIGZsYWdzIGZvciBjb21waWxhdGlvbgorCVFUX0lOQ0xVREVTPQorCVFUX0xERkxBR1M9CisJaWYgdGVzdCAtbiAiJHF0X2N2X2luY2x1ZGVzIjsgdGhlbgorCQlRVF9JTkNMVURFUz0iLUkkcXRfY3ZfaW5jbHVkZXMiCisJZmkKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlicmFyaWVzIjsgdGhlbgorCQlRVF9MREZMQUdTPSItTCRxdF9jdl9saWJyYXJpZXMiCisJZmkKKwlBQ19TVUJTVChRVF9JTkNMVURFUykKKwlBQ19TVUJTVChRVF9MREZMQUdTKQorIAorCVFUX0ZJTkRfTU9DCisJTU9DPSRhY19tb2MKKwlBQ19TVUJTVChNT0MpCisJUVRfRklORF9VSUMKKwlVSUM9JGFjX3VpYworCUFDX1NVQlNUKFVJQykKKworCVFUX0NIRUNLX0NPTVBJTEUKKyAKKwlRVF9MSUI9JHF0X2N2X2xpYm5hbWU7CisJQUNfU1VCU1QoUVRfTElCKQorCisJaWYgdGVzdCAtbiAiJHF0X2N2X2xpYm5hbWUiOyB0aGVuCisJCVFUX0dFVF9WRVJTSU9OCisJZmkKK10pCisKK2RubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ0hFQ0tfUFJFQ09NUElMRURfSEVBREVSXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSBzdXBwb3J0IHByZWNvbXBpbGVkIGhlYWRlcl0pCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQ1BMVVNQTFVTCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworZG5sIHdlIGNvbnNpZGVyIHRoYW4gaWYgLVdpbnZhbGlkLXBjaCBpcyBhY2NlcHRlZCBwY2ggd2lsbCB3b3JrcyAuLi4KK0NYWEZMQUdTPS1XaW52YWxpZC1wY2gKK2RubCBidXQgd2UgZG9uJ3Qgd2FudCAtV2ludmFsaWQtcGNoIGVsc2UgY29tcGlsYXRpb24gd2lsbCBmYWlsIGR1ZSAtV2Vycm9yIGFuZAorZG5sIHRoZSBmYWN0IHRoYW4gc29tZSBwY2ggd2lsbCBiZSBpbnZhbGlkIGZvciB0aGUgZ2l2ZW4gY29tcGlsYXRpb24gb3B0aW9uCitBQ19UUllfQ09NUElMRSgsWztdLEFDX01TR19SRVNVTFQoW3llc10pOyAkMT0iJHskMX0gLWluY2x1ZGUgYml0cy9zdGRjKysuaCIsIEFDX01TR19SRVNVTFQoW25vXSkpCitDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCitkbmwgQVhfQ0hFQ0tfRE9DQk9PSworQUNfREVGVU4oW0FYX0NIRUNLX0RPQ0JPT0tdLCBbCisjIEl0J3MganVzdCBydWRlIHRvIGdvIG92ZXIgdGhlIG5ldCB0byBidWlsZAorWFNMVFBST0NfRkxBR1M9LS1ub25ldAorRE9DQk9PS19ST09UPQoraWYgdGVzdCAhIC1mIC9ldGMveG1sL2NhdGFsb2c7IHRoZW4KKwlmb3IgaSBpbiAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay9zdHlsZXNoZWV0L3hzbC9ud2Fsc2ggL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLzsKKwlkbworCQlpZiB0ZXN0IC1kICIkaSI7IHRoZW4KKwkJCURPQ0JPT0tfUk9PVD0kaQorCQlmaQorCWRvbmUKKworCSMgTGFzdCByZXNvcnQgLSB0cnkgbmV0CisJaWYgdGVzdCAteiAiJERPQ0JPT0tfUk9PVCI7IHRoZW4KKwkJWFNMVFBST0NfRkxBR1M9CisJZmkKK2Vsc2UKKwlYTUxfQ0FUQUxPRz0vZXRjL3htbC9jYXRhbG9nCisJQ0FUX0VOVFJZX1NUQVJUPSc8IS0tJworCUNBVF9FTlRSWV9FTkQ9Jy0tPicKK2ZpCisKK0FDX0NIRUNLX1BST0coWFNMVFBST0MseHNsdHByb2MseHNsdHByb2MsKQorWFNMVFBST0NfV09SS1M9bm8KK2lmIHRlc3QgLW4gIiRYU0xUUFJPQyI7IHRoZW4KKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgeHNsdHByb2Mgd29ya3NdKQorCisJaWYgdGVzdCAtbiAiJFhNTF9DQVRBTE9HIjsgdGhlbgorCQlEQl9GSUxFPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIKKwllbHNlCisJCURCX0ZJTEU9IiRET0NCT09LX1JPT1QvZG9jYm9vay54c2wiCisJZmkKKworCSRYU0xUUFJPQyAkWFNMVFBST0NfRkxBR1MgJERCX0ZJTEUgPi9kZXYvbnVsbCAyPiYxIDw8IEVORAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0nSVNPLTg4NTktMSc/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCI+Cis8Ym9vayBpZD0idGVzdCI+Cis8L2Jvb2s+CitFTkQKKwlpZiB0ZXN0ICIkPyIgPSAwOyB0aGVuCisJCVhTTFRQUk9DX1dPUktTPXllcworCWZpCisJQUNfTVNHX1JFU1VMVCgkWFNMVFBST0NfV09SS1MpCitmaQorQU1fQ09ORElUSU9OQUwoaGF2ZV94c2x0cHJvYywgdGVzdCAiJFhTTFRQUk9DX1dPUktTIiA9ICJ5ZXMiKQorCitBQ19TVUJTVChYTUxfQ0FUQUxPRykKK0FDX1NVQlNUKFhTTFRQUk9DX0ZMQUdTKQorQUNfU1VCU1QoRE9DQk9PS19ST09UKQorQUNfU1VCU1QoQ0FUX0VOVFJZX1NUQVJUKQorQUNfU1VCU1QoQ0FUX0VOVFJZX0VORCkKK10pCisKK2RubCBBWF9DRkxBR1NfT1BUSU9OUyh2YXItbmFtZSwgb3B0aW9uKQorZG5sIGFkZCBvcHRpb24gdG8gdmFyLW5hbWUgaWYgJENDIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ0ZMQUdTX09QVElPTl0sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NDfSAkMiBpcyB1bmRlcnN0b29kXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9JDIKK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAkMiIsQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworCitkbmwgQVhfQ1hYRkxBR1NfT1BUSU9OUyh2YXItbmFtZSwgb3B0aW9uKQorZG5sIGFkZCBvcHRpb24gdG8gdmFyLW5hbWUgaWYgJENYWCBzdXBwb3J0IGl0LgorQUNfREVGVU4oW0FYX0NYWEZMQUdTX09QVElPTl0sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciAke0NYWH0gJDIgaXMgdW5kZXJzdG9vZF0pCitBQ19MQU5HX1NBVkUKK0FDX0xBTkdfQ1BMVVNQTFVTCitTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9JDIKK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAkMiIsQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKK2RubCBBWF9DT1BZX0lGX0NIQU5HRShzb3VyY2UsIGRlc3QpCitkbmwgY29weSBzb3VyY2UgdG8gZGVzdCBpZiB0aGV5IGRvbid0IGNvbXBhcmUgZXF1YWxseSBvciBpZiBkZXN0IGRvZXNuJ3QgZXhpc3QKK0FDX0RFRlVOKFtBWF9DT1BZX0lGX0NIQU5HRV0sIFsKK2lmIHRlc3QgLXIgJDI7IHRoZW4KKwlpZiBjbXAgJDEgJDIgPiAvZGV2L251bGw7IHRoZW4KKwkJZWNobyAkMiBpcyB1bmNoYW5nZWQKKwllbHNlCisJCWNwIC1mICQxICQyCisJZmkKK2Vsc2UKKwljcCAtZiAkMSAkMgorZmkKK10pCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvYXV0b21ha2UtZm9yZWlnbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJiNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK29wcm9maWxlIGRvZXNuJ3Qgd2FudCBHTlUtbGV2ZWxzIG9mIGF1dG9tYWtlIHN0cmljdG5lc3Mgc28gdGVsbCBpdCB0byBiZSAiZm9yZWlnbiIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNTc0MDU4NS4uY2Y2YzMxNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTYgKzE2IEBAIEFDX0NPTkZJR19TUkNESVIoW2xpYm9wL29wX2NvbmZpZy5oXSkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmYTk1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvb3Byb2ZpbGUtY3Jvc3MtY29tcGlsZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitQcmV2ZW50IHJ1bm5pbmcgY2hlY2sgdGVzdHMgb24gaG9zdCBpZiBjcm9zcyBjb21waWxpbmcKKworVGhpcyBwYXRjaCBlbmFibGVzIHJ1bm5pbmcgdGhlICdtYWtlIGNoZWNrJyB0ZXN0cyBvbiB0aGUgdGFyZ2V0CitpbiBhIGNyb3NzLWNvbXBpbGVkIGVudmlyb25tZW50LiBJZiBub3QgY3Jvc3MtY29tcGlsaW5nLCB0aGVuICdtYWtlCisgY2hlY2snIGJ1aWxkcyBhbmQgZXhlY3V0ZXMgdGhlIHRlc3RzOyBubyBjaGFuZ2UgZnJvbSB0aGlzIHBhdGNoLgorSW4gYSBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnQsIHRoZSBtYWtlIHZhcmlhYmxlIENST1NTX0NPTVBJTEUgaXMKK3NldCB3aGljaCBieXBhc3NlcyBhc3NpZ2luZyB0ZXN0cyB0byB0aGUgbWFrZWtmaWxlIHZhcmlhYmxlIFRFU1RTLgorU2luY2UgVEVTVFMgaXMgZW1wdHksIHRoZSAnbWFrZSBjaGVjaycgcHJvY2VzcyBuZXZlciB0cmllcyB0byBydW4gdGhlCit0ZXN0cyBvbiB0aGUgaG9zdHMuICBPbiB0aGUgdGFyZ2V0LCB0aGUgdGVzdHMgbXVzdCBiZSBydW4gbWFudWFsbHkuCisKK0Fsc28sIGluIHRoZSBsaWJ1dGlsKysgdGVzdHMsIGEgbWFrZWZpbGUgdmFyaWFibGUgU1JDRElSIGlzIHBhc3NlZCBpbnRvCit0aGUgY29tcGlsYXRpb24gcGhhc2UsIHBvaW50aW5nIHRvIHRoZSBydW50aW1lIGxvY2F0aW9uIG9mIHRoZSB0ZXN0CisnZmlsZS1tYW5pcC10ZXN0cycuICBUaGUgbWVjaGFuaXNtIHVzZWQgZm9yIGEgaG9zdCB0ZXN0LCBiYXNlZCBvbgorJ3RvcGRpcicgZG9lc24ndCB3b3JrLiAgSW5zdGVhZCwgaWYgQ1JPU1NfQ09NUElMRSBpcyBzZXQsIHRoZQorbWFrZWZpbGUgdGFrZXMgdGhlIHBhdGggb2YgU1JDRElSIGZyb20gdGhlIGJ1aWxkIGVudmlyb25tZW50IGFuZCBub3QKK2Zyb20gYW4gZXhwcmVzc2lvbiBiYXNlZCBvbiB0aGUgaG9zdCBwYXRoICd0b3BkaXInLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQxZWNlNjQuLmNlNWExNmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM5Miw2ICszOTIsNyBAQCBBQ19BUkdfRU5BQkxFKGFjY291bnQtY2hlY2ssCisgCWVuYWJsZV9hY2NvdW50X2NoZWNrPSRlbmFibGV2YWwsIGVuYWJsZV9hY2NvdW50X2NoZWNrPXllcykKKyAKKyBBTV9DT05ESVRJT05BTChDSEVDS19BQ0NPVU5ULCB0ZXN0ICJ4JGVuYWJsZV9hY2NvdW50X2NoZWNrIiA9ICJ4eWVzIikKKytBTV9DT05ESVRJT05BTChDUk9TU19DT01QSUxFLCB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgPSAieHllcyIpCisgCisgQUNfU1VCU1QoT1BfQ0ZMQUdTKQorIEFDX1NVQlNUKE9QX0NYWEZMQUdTKQorZGlmZiAtLWdpdCBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDhhNjkwMDMuLmQ4MjAwOTAgMTAwNjQ0CistLS0gYS9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMyw0ICsxMyw2IEBAIGNoZWNrX1BST0dSQU1TID0gZGJfdGVzdAorIGRiX3Rlc3RfU09VUkNFUyA9IGRiX3Rlc3QuYworIGRiX3Rlc3RfTERBREQgPSAuLi9saWJvZGIuYSAuLi8uLi9saWJ1dGlsL2xpYnV0aWwuYQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDhhNzllYjUuLjZkNDE3YzQgMTAwNjQ0CistLS0gYS9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0zMyw0ICszMyw2IEBAIGxvYWRfZXZlbnRzX2ZpbGVzX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyBtYW5nbGVfdGVzdHNfU09VUkNFUyA9IG1hbmdsZV90ZXN0cy5jCisgbWFuZ2xlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9IHV0ZjhfY2hlY2tlci5zaAorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNmYxOTgzOC4uMWQxNzZmOSAxMDA2NDQKKy0tLSBhL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTE4LDQgKzE4LDYgQEAgamF2YV90ZXN0X0xEQUREID0gXAorIAorIEVYVFJBX0RJU1QgPSBtYW5nbGVkLW5hbWUuaW4KKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0KK2luZGV4IDUxYWYwMzEuLmEwMWVhMmQgMTAwNjQ0CistLS0gYS9saWJ1dGlsKysvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsNyArMSw5IEBACisgCisgUkVBTFBBVEg9IHJlYWRsaW5rIC1mCisgCisraWYgISBDUk9TU19DT01QSUxFCisgU1JDRElSIDo9ICQoc2hlbGwgJChSRUFMUEFUSCkgJCh0b3BkaXIpL2xpYnV0aWwrKy90ZXN0cy8gKQorK2VuZGlmCisgCisgQU1fQ1BQRkxBR1MgPSBcCisgCS1JICR7dG9wX3NyY2Rpcn0vbGlidXRpbCsrIC1EIFNSQ0RJUj0iXCIkKFNSQ0RJUikvXCIiIEBPUF9DUFBGTEFHU0AKK0BAIC00Niw0ICs0OCw2IEBAIGNhY2hlZF92YWx1ZV90ZXN0c19MREFERCA9ICR7Q09NTU9OX0xJQlN9CisgdXRpbGl0eV90ZXN0c19TT1VSQ0VTID0gdXRpbGl0eV90ZXN0cy5jcHAKKyB1dGlsaXR5X3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtIGIvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggZGZjZDZlYy4uZTg4MzFiNSAxMDA2NDQKKy0tLSBhL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xMiw0ICsxMiw2IEBAIGZpbGVfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKKyBzdHJpbmdfdGVzdHNfU09VUkNFUyA9IHN0cmluZ190ZXN0cy5jCisgc3RyaW5nX3Rlc3RzX0xEQUREID0gLi4vbGlidXRpbC5hCisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3Jvb3QtaG9tZS1kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3Jvb3QtaG9tZS1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYzVlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcm9vdC1ob21lLWRpci5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitvcHJvZmlsZTogRGV0ZXJtaW5lIHRoZSByb290IGhvbWUgZGlyZWN0b3J5IGR5bmFtaWNhbGx5CisKK1RoaXMgY29tbWl0IGRldGVjdHMgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkgZHluYW1pY2FsbHkgd2l0aCBjaGFuZ2VzIHRvCit0aGUgb3Byb2ZpbGUgZ3VpIGFwcCBzb3VyY2UuCisKK1RoZSBjb21taXQgcmVwbGFjZXMgYW4gZWFybGllciBmaXggdGhhdCBkZXRlY3RlZCBhbmQgYWRqdXN0ZWQgYQorJ25vbi1zdGFuZGFyZCcgcm9vdCBob21lIGRpcmVjdG9yeSBhdCBidWlsZCB0aW1lLiAgVGhlIGFkdmFudGFnZSBvZiB0aGlzCitwYXRjaCBpcyB0aGF0IHRoZSBvcHJvZmlsZSB0b29scyBhcmUgYWRqdXN0ZWQgdG8gdGhlIGN1cnJlbnQgcnVuLXRpbWUKK3BhdGggdG8gfnJvb3QsIG5vdCB0aGUgYnVpbGQgdGltZSBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS5odG1sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3Byb2ZpbGUtMS4wLjAub3JpZy9kb2Mvb3Byb2ZpbGUuaHRtbAkyMDE0LTExLTAzIDE3OjU1OjMxLjUxMTAzNDg1NyArMDAwMAorKysrIG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS5odG1sCTIwMTQtMTEtMDMgMTc6NTc6MjYuNDE1MDM3OTg4ICswMDAwCitAQCAtMTU2Myw4ICsxNTYzLDggQEAKKyAJCTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm11c3Q8L2VtPjwvc3Bhbj4gc3RvcCBpdCBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGluIG9yZGVyIHRvIHByb2Nlc3MKKyAJCXRoZSBwcm9maWxlIGRhdGEgaXQgaGFzIGNvbGxlY3RlZC4gIFVzZSA8Y29kZSBjbGFzcz0iY29kZSI+a2lsbCAtU0lHSU5UICZsdDtvcGVyZi1QSUQmZ3Q7PC9jb2RlPgorIAkJZm9yIHRoaXMgcHVycG9zZS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB3aGVuIHJ1bm5pbmcgPHNwYW4gY2xhc3M9ImNvbW1hbmQiPjxzdHJvbmc+b3BlcmY8L3N0cm9uZz48L3NwYW4+CistCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3Q8L2NvZGU+IG9yIGEgc3ViZGlyZWN0b3J5CistCQlvZiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPi9yb290PC9jb2RlPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisrCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fnJvb3Q8L2NvZGU+IG9yIGEgc3ViZGlyZWN0b3J5CisrCQlvZiA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPn5yb290PC9jb2RlPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisgCQk8L3A+CisgICAgICAgICAgICAgICA8L2RkPgorICAgICAgICAgICAgICAgPGR0PgorSW5kZXg6IG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS54bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcHJvZmlsZS0xLjAuMC5vcmlnL2RvYy9vcHJvZmlsZS54bWwJMjAxNC0xMS0wMyAxNzo1NTozMS41MTUwMzQ4NTcgKzAwMDAKKysrKyBvcHJvZmlsZS0xLjAuMC9kb2Mvb3Byb2ZpbGUueG1sCTIwMTQtMTEtMDMgMTc6NTg6MDMuNzE5MDM5MDA1ICswMDAwCitAQCAtNjU0LDggKzY1NCw4IEBACisgCQk8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IHN0b3AgaXQgaW4gYSBjb250cm9sbGVkIG1hbm5lciBpbiBvcmRlciB0byBwcm9jZXNzCisgCQl0aGUgcHJvZmlsZSBkYXRhIGl0IGhhcyBjb2xsZWN0ZWQuICBVc2UgPGNvZGU+a2lsbCAtU0lHSU5UICZsdDtvcGVyZi1QSUQmZ3Q7PC9jb2RlPgorIAkJZm9yIHRoaXMgcHVycG9zZS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB3aGVuIHJ1bm5pbmcgPGNvbW1hbmQ+b3BlcmY8L2NvbW1hbmQ+CistCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+IG9yIGEgc3ViZGlyZWN0b3J5CistCQlvZiA8ZmlsZW5hbWU+L3Jvb3Q8L2ZpbGVuYW1lPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisrCQl3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgc2hvdWxkIGJlIDxmaWxlbmFtZT5+cm9vdDwvZmlsZW5hbWU+IG9yIGEgc3ViZGlyZWN0b3J5CisrCQlvZiA8ZmlsZW5hbWU+fnJvb3Q8L2ZpbGVuYW1lPiB0byBhdm9pZCBzdG9yaW5nIHNhbXBsZSBkYXRhIGZpbGVzIGluIGxvY2F0aW9ucyBhY2Nlc3NpYmxlIGJ5IHJlZ3VsYXIgdXNlcnMuCisgCQk8L3BhcmE+PC9saXN0aXRlbT4KKyAJPC92YXJsaXN0ZW50cnk+CisgCTx2YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTRiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL3J1bi1wdGVzdApAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworc2F2ZWRfZGlyPSRQV0QKK2ZvciBkaXIgaW4gKi90ZXN0cyA7IGRvCisJY2QgJGRpcgorCWZvciBhdGVzdCBpbiAqIDsgZG8KKwkJaWYgWyBcKCAteCAkYXRlc3QgXCkgLWEgXCggLWYgJGF0ZXN0IFwpIF0gOyB0aGVuCisJCQkuLyRhdGVzdCA+ICR7YXRlc3R9LnN0ZG91dCAyPiAke2F0ZXN0fS5zdGRlcnIKKwkJCWlmIFsgJD8gPSAwIF0gOyB0aGVuCisJCQkJZWNobyAiUEFTUzogJGRpciAkYXRlc3QiCisJCQkJcm0gJHthdGVzdH0uc3Rkb3V0ICR7YXRlc3R9LnN0ZGVycgorCQkJZWxzZQorCQkJCWVjaG8gIkZBSUw6ICR7ZGlyfS8ke2F0ZXN0fSIKKwkJCWZpCisJCWZpCisJZG9uZQorCWNkICRzYXZlZF9kaXIKK2RvbmUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZV8xLjEuMC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGVfMS4xLjAuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBvcHJvZmlsZS5pbmMKKworREVQRU5EUyArPSAidmlydHVhbC9rZXJuZWwiCitERVBFTkRTX2FwcGVuZF9wb3dlcnBjNjQgPSAiIGxpYnBmbTQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNDhjNGMwNjlmOTQ3NmY0MjdmYTcxOTU1NjNmOTg2NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjc1OWE2ZGUxYTYwMzNkNWRmYzkzYmRhMTI5YTlmMmUxMjhhZWNjNDIzOGNjNjU3ZmViMDgwMWQxYjAzNjZjIgorCitTID0gIiR7V09SS0RJUn0vb3Byb2ZpbGUtJHtQVn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTQ0ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0CkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgb3Byb2ZpbGUtc2VydmVyCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBPUHJvZmlsZVVJIHNlcnZlcgorIyBEZXNjcmlwdGlvbjogICAgICAgCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICAgIGVjaG8gIlN0YXJ0aW5nIE9Qcm9maWxlVUkgc2VydmVyIgorCS4gL2V0Yy9wcm9maWxlCisJL3Vzci9iaW4vb3Byb2ZpbGUtc2VydmVyICYKKyAgOzsKKworICBzdG9wKQorICAgICAgICBlY2hvICJTdG9wcGluZyBPUHJvZmlsZVVJIHNlcnZlciIKKyAgICAgICAga2lsbHByb2Mgb3Byb2ZpbGUtc2VydmVyCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmNiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKQEAgLTAsMCArMSw2IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU9Qcm9maWxlVUkgU2VydmVyCitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK0V4ZWNTdGFydD0vYmluL3NoIC1jICIuIEBTWVNDT05GRElSQC9wcm9maWxlOyBAQklORElSQC9vcHJvZmlsZS1zZXJ2ZXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2I3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyX2dpdC5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIG9wcm9maWxldWkuaW5jCisKK1NSQ1JFViA9ICIzODllMTg3NWFmNDcyMWQ1MmM3ZTY1Y2Y5Y2ZmZmI2OWIwZWQ2YTU5IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlICIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1jbGllbnQgLS1lbmFibGUtc2VydmVyIgorCitSREVQRU5EU18ke1BOfSA9ICJvcHJvZmlsZSBhdmFoaS1kYWVtb24iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvb3Byb2ZpbGV1aS1zZXJ2ZXIKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9vcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAib3Byb2ZpbGV1aS1zZXJ2ZXIiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDIwIDAgMSA2IC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvcHJvZmlsZXVpLXNlcnZlci5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjZjAxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS5pbmMKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJVc2VyIEludGVyZmFjZSBmb3IgdGhlIFN5c3RlbS1XaWRlIFByb2ZpbGVyIgorREVTQ1JJUFRJT04gPSAiVXNlciBpbnRlcmZhY2UgZm9yIHRoZSBPUHJvZmlsZSB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL2xhYnMuby1oYW5kLmNvbS9vcHJvZmlsZXVpLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitTRUNUSU9OID0gIngxMSIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImdsaWItMi4wIGF2YWhpIGludGx0b29sLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hdmFoaSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2OWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aV9naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBvcHJvZmlsZXVpLmluYworCitERVBFTkRTICs9ICJndGsrIGxpYmdsYWRlIGxpYnhtbDIgYXZhaGktdWkgZ2NvbmYiCisKK1NSQ1JFViA9ICIzODllMTg3NWFmNDcyMWQ1MmM3ZTY1Y2Y5Y2ZmZmI2OWIwZWQ2YTU5IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wcm9maWxldWkiCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtY2xpZW50IC0tZGlzYWJsZS1zZXJ2ZXIiCisKK1BBQ0tBR0VTID0rICJvcHJvZmlsZXVpLXZpZXdlciIKKworRklMRVNfb3Byb2ZpbGV1aS12aWV3ZXIgPSAiJHtiaW5kaXJ9L29wYXJjaGNvbnYgJHtiaW5kaXJ9L29wcm9maWxlLXZpZXdlciAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8gJHtkYXRhZGlyfS9vcHJvZmlsZXVpLyAke2RhdGFkaXJ9L2ljb25zIgorUkRFUEVORFNfb3Byb2ZpbGV1aS12aWV3ZXIgPSAib3Byb2ZpbGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi1mZWF0dXJlcy5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi1mZWF0dXJlcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NTlhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLWZlYXR1cmVzLmluYwpAQCAtMCwwICsxLDIyIEBACitQRVJGX0ZFQVRVUkVTX0VOQUJMRSA/PSAicGVyZi1zY3JpcHRpbmcgcGVyZi10dWkiCisKK2RlZiBwZXJmX2ZlYXR1cmVfZW5hYmxlZChmZWF0dXJlLCB0cnVldmFsLCBmYWxzZXZhbCwgZCk6CisgICAgIiIiCisgICAgQ2hlY2sgd2hpY2ggcGVyZiBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KKworICAgIFRoZSBQRVJGX0ZFQVRVUkVTX0VOQUJMRSB2YXJpYWJsZSBsaXN0cyB0aGUgcGVyZiBmZWF0dXJlcyB0bworICAgIGVuYWJsZS4gIE92ZXJyaWRlIGl0IGlmIHlvdSB3YW50IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0J3MKKyAgICBsaXN0ZWQgYWJvdmUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgSWYgZW1wdHksIHRoZSBidWlsZCB3b24ndAorICAgIGVuYWJsZSBhbnkgZmVhdHVyZXMgKHdoaWNoIG1heSBiZSBleGFjdGx5IHdoYXQgeW91IHdhbnQsIGp1c3QgYQorICAgIGJhcmVib25lcyBwZXJmIHdpdGhvdXQgYW55IGV4dHJhIGJhZ2dhZ2UsIHdoYXQgeW91IGdldCBpZiB5b3UKKyAgICBzcGVjaWZ5IGFuIGVtcHR5IGZlYXR1cmUgbGlzdCkuCisKKyAgICBBdmFpbGFibGUgcGVyZiBmZWF0dXJlczoKKyAgICAgIHBlcmYtc2NyaXB0aW5nOiBlbmFibGUgc3VwcG9ydCBmb3IgUGVybCBhbmQgUHl0aG9uIGJpbmRpbmdzCisgICAgICBwZXJmLXR1aTogZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBwZXJmIFRVSSAodmlhIGxpYm5ld3QpCisKKyAgICAiIiIKKyAgICBlbmFibGVkX2ZlYXR1cmVzID0gZC5nZXRWYXIoIlBFUkZfRkVBVFVSRVNfRU5BQkxFIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBmZWF0dXJlIGluIGVuYWJsZWRfZmVhdHVyZXM6CisgICAgICAgIHJldHVybiB0cnVldmFsCisgICAgcmV0dXJuIGZhbHNldmFsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjNhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3BlcmYvcGVyZi5iYgpAQCAtMCwwICsxLDIxMCBAQAorU1VNTUFSWSA9ICJQZXJmb3JtYW5jZSBhbmFseXNpcyB0b29scyBmb3IgTGludXgiCitERVNDUklQVElPTiA9ICJQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGEgbmV3IGtlcm5lbC1iYXNlZCBcCitzdWJzeXN0ZW0gdGhhdCBwcm92aWRlIGEgZnJhbWV3b3JrIGZvciBhbGwgdGhpbmdzIFwKK3BlcmZvcm1hbmNlIGFuYWx5c2lzLiBJdCBjb3ZlcnMgaGFyZHdhcmUgbGV2ZWwgXAorKENQVS9QTVUsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgZmVhdHVyZXMgXAorYW5kIHNvZnR3YXJlIGZlYXR1cmVzIChzb2Z0d2FyZSBjb3VudGVycywgdHJhY2Vwb2ludHMpIFwKK2FzIHdlbGwuIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDc4MTBmYWI3NDg3ZmIwYWFkMzI3Yjc2ZjFiZTdjZDciCisKK1BSID0gInI5IgorCityZXF1aXJlIHBlcmYtZmVhdHVyZXMuaW5jCisKK0JVSUxEUEVSRl9saWJjLXVjbGliYyA9ICJubyIKKworIyBndWkgc3VwcG9ydCB3YXMgYWRkZWQgd2l0aCBrZXJuZWwgMy42LjM1CisjIHNpbmNlIDMuMTAgbGlibmV3dCB3YXMgcmVwbGFjZWQgYnkgc2xhbmcKKyMgdG8gY292ZXIgYSB3aWRlIHJhbmdlIG9mIGtlcm5lbCB3ZSBhZGQgYm90aCBkZXBlbmRlbmNpZXMKK1RVSV9ERVBFTkRTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXR1aScsICdsaWJuZXd0IHNsYW5nJywgJycsZCl9IgorU0NSSVBUSU5HX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJ3BlcmwgcHl0aG9uJywgJycsZCl9IgorTElCVU5XSU5EX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlidW53aW5kJywgJ2xpYnVud2luZCcsICcnLGQpfSIKKworREVQRU5EUyA9ICIgXAorICAgIHZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIFwKKyAgICAke01MUFJFRklYfWVsZnV0aWxzIFwKKyAgICAke01MUFJFRklYfWJpbnV0aWxzIFwKKyAgICAke1RVSV9ERVBFTkRTfSBcCisgICAgJHtTQ1JJUFRJTkdfREVQRU5EU30gXAorICAgICR7TElCVU5XSU5EX0RFUEVORFN9IFwKKyAgICBiaXNvbiBmbGV4IHh6IFwKKyIKKworZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19zaGFyZWRfd29ya2RpciIKKworUFJPVklERVMgPSAidmlydHVhbC9wZXJmIgorCitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlIGtlcm5lbC1hcmNoIHB5dGhvbm5hdGl2ZQorCisjIG5lZWRlZCBmb3IgYnVpbGRpbmcgdGhlIHRvb2xzL3BlcmYgUHl0aG9uIGJpbmRpbmdzCitpbmhlcml0IHB5dGhvbi1kaXIKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBQWVRIT05fU0lURVBBQ0tBR0VTX0RJUgorCisja2VybmVsIDMuMSsgc3VwcG9ydHMgV0VSUk9SIHRvIGRpc2FibGUgd2FybmluZ3MgYXMgZXJyb3JzCitleHBvcnQgV0VSUk9SID0gIjAiCisKK2RvX3BvcHVsYXRlX2xpY1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fcGF0Y2giCisKKyMgbmVlZGVkIGZvciBidWlsZGluZyB0aGUgdG9vbHMvcGVyZiBQZXJsIGJpbmRpbmcKK2luaGVyaXQgcGVybG5hdGl2ZSBjcGFuLWJhc2UKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKK2V4cG9ydCBQRVJMX0lOQyA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9L0NPUkUiCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKKworaW5oZXJpdCBrZXJuZWxzcmMKKworQiA9ICIke1dPUktESVJ9LyR7QlBOfS0ke1BWfSIKK1NQRFhfUyA9ICIke1N9L3Rvb2xzL3BlcmYiCisKK1NDUklQVElOR19ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICcnLCAnTk9fTElCUEVSTD0xIE5PX0xJQlBZVEhPTj0xJyxkKX0iCitUVUlfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi10dWknLCAnJywgJ05PX05FV1Q9MScsZCl9IgorTElCVU5XSU5EX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlidW53aW5kJywgJycsICdOT19MSUJVTldJTkQ9MSBOT19MSUJEV19EV0FSRl9VTldJTkQ9MScsZCl9IgorTElCTlVNQV9ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLWxpYm51bWEnLCAnJywgJ05PX0xJQk5VTUE9MScsZCl9IgorCisjIFRoZSBMREZMQUdTIGlzIHJlcXVpcmVkIG9yIHNvbWUgb2xkIGtlcm5lbHMgZmFpbHMgZHVlIG1pc3NpbmcKKyMgc3ltYm9scyBhbmQgdGhpcyBpcyBwcmVmZXJyZWQgdGhhbiByZXF1aXJpbmcgcGF0Y2hlcyB0byBldmVyeSBvbGQKKyMgc3VwcG9ydGVkIGtlcm5lbC4KK0xERkxBR1M9Ii1sZGwgLWx1dGlsIgorCitFWFRSQV9PRU1BS0UgPSAnXAorICAgIC1DICR7U30vdG9vbHMvcGVyZiBcCisgICAgTz0ke0J9IFwKKyAgICBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIEFSQ0g9JHtBUkNIfSBcCisgICAgQ0M9IiR7Q0N9IiBcCisgICAgQVI9IiR7QVJ9IiBcCisgICAgRVhUUkFfQ0ZMQUdTPSItbGR3IiBcCisgICAgcGVyZmV4ZWNkaXI9JHtsaWJleGVjZGlyfSBcCisgICAgTk9fR1RLMj0xICR7VFVJX0RFRklORVN9IE5PX0RXQVJGPTEgJHtMSUJVTldJTkRfREVGSU5FU30gXAorICAgICR7U0NSSVBUSU5HX0RFRklORVN9ICR7TElCTlVNQV9ERUZJTkVTfSBcCisnCisKK0VYVFJBX09FTUFLRSArPSAiXAorICAgICdwcmVmaXg9JHtwcmVmaXh9JyBcCisgICAgJ2JpbmRpcj0ke2JpbmRpcn0nIFwKKyAgICAnc2hhcmVkaXI9JHtkYXRhZGlyfScgXAorICAgICdzeXNjb25mZGlyPSR7c3lzY29uZmRpcn0nIFwKKyAgICAncGVyZmV4ZWNkaXI9JHtsaWJleGVjZGlyfS9wZXJmLWNvcmUnIFwKKyAgICBcCisgICAgJ0VUQ19QRVJGQ09ORklHPSR7QG9zLnBhdGgucmVscGF0aChzeXNjb25mZGlyLCBwcmVmaXgpfScgXAorICAgICdzaGFyZWRpcj0ke0Bvcy5wYXRoLnJlbHBhdGgoZGF0YWRpciwgcHJlZml4KX0nIFwKKyAgICAnbWFuZGlyPSR7QG9zLnBhdGgucmVscGF0aChtYW5kaXIsIHByZWZpeCl9JyBcCisgICAgJ2luZm9kaXI9JHtAb3MucGF0aC5yZWxwYXRoKGluZm9kaXIsIHByZWZpeCl9JyBcCisiCisKKworZG9fY29tcGlsZSgpIHsKKwkjIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgZXhwZWN0ZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nCisJdW5zZXQgQ0ZMQUdTCisJb2VfcnVubWFrZSBhbGwKK30KKworZG9faW5zdGFsbCgpIHsKKwkjIExpbnV4IGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgZXhwZWN0ZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nCisJdW5zZXQgQ0ZMQUdTCisJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbAorCSMgd2UgYXJlIGNoZWNraW5nIGZvciB0aGlzIG1ha2UgdGFyZ2V0IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlciBwZXJmIHZlcnNpb25zCisJaWYgWyAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgMSwgMCwgZCl9IiA9ICIxIiBdICYmIGdyZXAgLXEgaW5zdGFsbC1weXRob25fZXh0ICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZSo7IHRoZW4KKwkJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbC1weXRob25fZXh0CisJZmkKK30KKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworICAgICMgRml4IGZvciByZWJ1aWxkaW5nCisgICAgcm0gLXJmICR7Qn0vCisgICAgbWtkaXIgJHtCfS8KKworICAgICMgSWYgYnVpbGRpbmcgYSBtdWx0bGliIGJhc2VkIHBlcmYsIHRoZSBpbmNvcnJlY3QgbGlicmFyeSBwYXRoIHdpbGwgYmUKKyAgICAjIGRldGVjdGVkIGJ5IHBlcmYsIHNpbmNlIGl0IHRyaWdnZXJzIHZpYTogaWZlcSAoJChBUkNIKSx4ODZfNjQpLiBJbiBhIDMyIGJpdAorICAgICMgYnVpbGQsIHdpdGggYSA2NCBiaXQgbXVsdGlsaWIsIHRoZSBhcmNoIHdvbid0IG1hdGNoIGFuZCB0aGUgZGV0ZWN0aW9uIG9mIGEgCisgICAgIyA2NCBiaXQgYnVpbGQgKGFuZCBsaWJyYXJ5KSBhcmUgbm90IGV4ZWN0ZWQuIFRvIGVuc3VyZSB0aGF0IGxpYnJhcmllcyBhcmUKKyAgICAjIGluc3RhbGxlZCB0byB0aGUgY29ycmVjdCBsb2NhdGlvbiwgd2UgY2FuIHVzZSB0aGUgd2VhayBhc3NpZ25tZW50IGluIHRoZQorICAgICMgY29uZmlnL01ha2VmaWxlLgorICAgICMKKyAgICAjIEFsc28gbmVlZCB0byByZWxvY2F0ZSAuY29uZmlnLWRldGVjdGVkIHRvICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQKKyAgICAjIGZvciBrZXJuZWwgc291cmNlcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGRvIHRoaXMKKyAgICAjIGFzIHR3byBidWlsZHMgKGUuZy4gcGVyZiBhbmQgbGliMzItcGVyZiBmcm9tIG11dGxpbGliIGNhbiBjb25mbGljdAorICAgICMgd2l0aCBlYWNoIG90aGVyIGlmIGl0cyBpbiB0aGUgc2hhcmVkIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAjCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICAjIE1hdGNoICQocHJlZml4KS8kKGxpYikgYW5kICQocHJlZml4KS9saWIKKyAgICAgICAgc2VkIC1pIC1lICdzLF5saWJkaXIgPSBcKCQocHJlZml4KS8uKmxpYlwpLGxpYmRpciA/PSBcMSwnIFwKKyAgICAgICAgICAgICAgIC1lICdzLF5wZXJmZXhlY2RpciA9IFwoLipcKSxwZXJmZXhlY2RpciA/PSBcMSwnIFwKKyAgICAgICAgICAgICAgIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgLWUgJ3MsXCAuY29uZmlnLWRldGVjdGVkLCAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkLGcnIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgICAgIHNlZCAtaSAtZSAicyxwcmVmaXg9J1wkKERFU1RESVJfU1EpL3VzcickLHByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyAtLWluc3RhbGwtbGliPSdcJChERVNURElSKVwkKFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSKScsZyIgXAorICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICBmaQorICAgIHNlZCAtaSAtZSAicywtLXJvb3Q9Jy9cJChERVNURElSX1NRKScsLS1wcmVmaXg9J1wkKERFU1RESVJfU1EpL3VzcicgLS1pbnN0YWxsLWxpYj0nXCQoREVTVERJUilcJChQWVRIT05fU0lURVBBQ0tBR0VTX0RJUiknLGciIFwKKyAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlCisKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5idWlsZAorICAgIGZpCisKKyAgICAjIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSAtLXN5c3Jvb3Qgb3B0aW9uIGluIENDIGlzIHByZXNlcnZlZAorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MsI0NDLCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENDID0gJChDUk9TU19DT01QSUxFKWdjYywjQ0MsJyAke1N9L3Rvb2xzL2xpYi9hcGkvTWFrZWZpbGUKKyAgICAgICAgc2VkIC1pICdzLEFSID0gJChDUk9TU19DT01QSUxFKWFyLCNBUiwnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0MgOj0gJChDUk9TU19DT01QSUxFKWdjYyAtTUQsQ0MgKz0gLU1ELCcgJHtTfS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQorICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9idWlsZC9NYWtlZmlsZS5mZWF0dXJlIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDRkxBR1M9LENDPSJcJChDQykiIENGTEFHUz0sJyAke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUKKyAgICBmaQorCisgICAgIyAzLjE3LXJjMSsgaGFzIGEgaW5jbHVkZSBpc3N1ZSBmb3IgYXJtL3Bvd2VycGMuIFRlbXBvcmFyaWx5IHNlZCBpbiB0aGUgYXBwcm9wcmlhdGUgaW5jbHVkZQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoLyRBUkNIL3V0aWwvc2tpcC1jYWxsY2hhaW4taWR4LmMiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJ1dGlsL2NhbGxjaGFpbi5oIiwjaW5jbHVkZSAidXRpbC9jYWxsY2hhaW4uaCJcbiNpbmNsdWRlICJ1dGlsL2RlYnVnLmgiLCcgJHtTfS90b29scy9wZXJmL2FyY2gvJEFSQ0gvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYworICAgIGZpCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3V0aWwvdW53aW5kLWxpYnVud2luZC5jIiBdICYmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9kd2FyZi11bndpbmQuYyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInRlc3RzL3Rlc3RzLmgiLCNpbmNsdWRlICJ0ZXN0cy90ZXN0cy5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdGVzdHMvZHdhcmYtdW53aW5kLmMKKyAgICAgICAgc2VkIC1pICdzLCNpbmNsdWRlICJwZXJmX3JlZ3MuaCIsI2luY2x1ZGUgInBlcmZfcmVncy5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGlidW53aW5kLmMKKyAgICBmaQorfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIGQuc2V0VmFyKCdQS0dWJywgZC5nZXRWYXIoIktFUk5FTF9WRVJTSU9OIiwgVHJ1ZSkuc3BsaXQoIi0iKVswXSkKK30KKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworCitQQUNLQUdFUyA9KyAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1BOfS1wZXJsICR7UE59LXB5dGhvbiIKKworUkRFUEVORFNfJHtQTn0gKz0gImVsZnV0aWxzIGJhc2giCitSREVQRU5EU18ke1BOfS1hcmNoaXZlID0rICJiYXNoIgorUkRFUEVORFNfJHtQTn0tcHl0aG9uID0rICJiYXNoIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59LXBlcmwgPSsgImJhc2ggcGVybCBwZXJsLW1vZHVsZXMiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9KyAicHl0aG9uIgorCitSU1VHR0VTVFNfU0NSSVBUSU5HID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXNjcmlwdGluZycsICcke1BOfS1wZXJsICR7UE59LXB5dGhvbicsICcnLGQpfSIKK1JTVUdHRVNUU18ke1BOfSArPSAiJHtQTn0tYXJjaGl2ZSAke1BOfS10ZXN0cyAke1JTVUdHRVNUU19TQ1JJUFRJTkd9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJleGVjZGlyfS9wZXJmLWNvcmUgJHtleGVjX3ByZWZpeH0vbGliZXhlYy9wZXJmLWNvcmUgJHtsaWJkaXJ9L3RyYWNlZXZlbnQiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvLmRlYnVnIgorRklMRVNfJHtQTn0tYXJjaGl2ZSA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvcGVyZi1hcmNoaXZlIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3Rlc3RzIgorRklMRVNfJHtQTn0tcHl0aG9uID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMgJHtsaWJkaXJ9L3BlcmYvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uIgorRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvc2NyaXB0cy9wZXJsIgorCisKK0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVD0iMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJhMDdlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvcG93ZXJ0b3AvcG93ZXJ0b3BfMi43LmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiUG93ZXIgdXNhZ2UgdG9vbCIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IHRvb2wgdG8gZGlhZ25vc2UgaXNzdWVzIHdpdGggcG93ZXIgY29uc3VtcHRpb24gYW5kIHBvd2VyIG1hbmFnZW1lbnQuIgorSE9NRVBBR0UgPSAiaHR0cDovLzAxLm9yZy9wb3dlcnRvcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5sZXNzd2F0dHMub3JnLyIKK0RFUEVORFMgPSAibmN1cnNlcyBsaWJubCBwY2l1dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vMDEub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvZG93bmxvYWRzL3Bvd2VydG9wL3Bvd2VydG9wLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImUwZDY4NmU0N2RhYWY3ZTlkODkwMzFmNzc2MzQzMmVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhkNGIxNDkwZTJiYWFkNDQ2N2MwZGVkM2M0MjNkYjQ0NzJkY2JmN2IyZGQ4ZjhmMmE5MjhmNTQwNDdjNjc4Y2EiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMgd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgd2l0aCBsaWJpbnRsIGluIHVDbGliYyBzeXN0ZW1zCitFWFRSQV9MREZMQUdTID89ICIiCitFWFRSQV9MREZMQUdTX2xpYmMtdWNsaWJjID0gIi1saW50bCIKK0xERkxBR1MgKz0gIiR7RVhUUkFfTERGTEFHU30iCisKKyMgd2UgZG8gbm90IHdhbnQgbGlibmN1cnNlc3cgaWYgd2UgY2FuCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIGNvbmZpZ3VyZS5hYyBjaGVja3MgZm9yIGRlbHdpbigpIGluICJuY3Vyc2VzdyBuY3Vyc2VzIiBzbyBsZXQncyBkcm9wIGZpcnN0IG9uZQorICAgIHNlZCAtaSAtZSAicy9uY3Vyc2Vzdy8vZyIgJHtTfS9jb25maWd1cmUuYWMKKyAgICBta2RpciAtcCAke0J9L3NyYy90dW5pbmcvCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworQUxURVJOQVRJVkVfJHtQTn0gPSAicG93ZXJ0b3AiCitBTFRFUk5BVElWRV9UQVJHRVRbcG93ZXJ0b3BdID0gIiR7c2JpbmRpcn0vcG93ZXJ0b3AiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJ0b3BdID0gIiR7c2JpbmRpcn0vcG93ZXJ0b3AiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzJjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitPbiB1Y2xpYmMgZWxmLmggZG9lcyBub3QgaGF2ZSBHTlUgZXh0ZW50aW9ucyBidXQgd2UgbmVlZCB0aGlzIGRlZmluZQorc28gd2UgZGVmaW5lIGl0IGxvY2FsbHkgaWYgaXRzIG5vdCBnZXR0aW5nIGl0IGZyb20gZWxmLmgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvZWxmcGFyc2VyLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDE4OjU3OjQxLjAwMDAwMDAwMCAtMDcwMAorKysrIGdpdC9lbGZwYXJzZXIuaAkyMDExLTA3LTE2IDIwOjI4OjU0LjczMzgyOTg5NSAtMDcwMAorQEAgLTE3LDYgKzE3LDEwIEBACisgICovCisgI2luY2x1ZGUgPGdsaWIuaD4KKyAKKysjaWZuZGVmIE5UX0dOVV9CVUlMRF9JRAorKyNkZWZpbmUgTlRfR05VX0JVSUxEX0lEIDMKKysjZW5kaWYKKysKKyB0eXBlZGVmIHN0cnVjdCBFbGZTeW0gRWxmU3ltOworIHR5cGVkZWYgc3RydWN0IEVsZlBhcnNlciBFbGZQYXJzZXI7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1M2FjNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLWFybS5wYXRjaApAQCAtMCwwICsxLDIxIEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3V0aWwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQxOjU3LjE1NjI0MzAwMSAtMDYwMAorKysrIGdpdC91dGlsLmgJMjAxMC0xMi0wNyAyMjo0Mzo0Ny42MTYyNDMwMDIgLTA2MDAKK0BAIC0zNyw0ICszNywxMyBAQAorICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgIGFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpOworICNlbmRpZgorIAorKyNpZmRlZiBfX2FybV9fCisrLyoKKysgKiBVc2UgdGhlIF9fa3VzZXJfbWVtb3J5X2JhcnJpZXIgaGVscGVyIGluIHRoZSBDUFUgaGVscGVyIHBhZ2UuIFNlZQorKyAqIGFyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGRldGFpbHMuCisrICovCisrI2RlZmluZSBybWIoKQkJKCh2b2lkKCopKHZvaWQpKTB4ZmZmZjBmYTApKCkKKysjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorKyNlbmRpZgorKworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1taXBzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1taXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNTViOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvdXRpbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDggMDE6MjI6NDQuNDg2MjQzMDAxIC0wNjAwCisrKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA4IDAxOjIzOjI3LjgzNjI0MzAwMSAtMDYwMAorQEAgLTM3LDQgKzM3LDE1IEBACisgI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7CisgI2VuZGlmCisgCisrI2lmZGVmIF9fbWlwc19fCisrI2RlZmluZSBybWIoKQkJYXNtIHZvbGF0aWxlKAkJCQkJXAorKwkJCQkiLnNldAltaXBzMlxuXHQiCQkJXAorKwkJCQkic3luY1xuXHQiCQkJCVwKKysJCQkJIi5zZXQJbWlwczAiCQkJCVwKKysJCQkJOiAvKiBubyBvdXRwdXQgKi8JCQlcCisrCQkJCTogLyogbm8gaW5wdXQgKi8JCQlcCisrCQkJCTogIm1lbW9yeSIpCisrI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKQorKyNlbmRpZgorKworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL3N5c3Byb2ZfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YzNlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJTeXN0ZW0td2lkZSBQZXJmb3JtYW5jZSBQcm9maWxlciBmb3IgTGludXgiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiZ3RrKyBsaWJnbGFkZSIKKworU1JDUkVWID0gImNkNDRlZTY2NDRjMzY0MTUwN2ZiNTNiOGEyYTY5MTM3ZjI5NzEyMTkiCitQViA9ICIxLjIuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnL3N5c3Byb2YgXAorICAgICAgICAgICBmaWxlOi8vZGVmaW5lLU5UX0dOVV9CVUlMRF9JRC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9hcm0gID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX2FybWViICA9ICIgZmlsZTovL3JtYi1hcm0ucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCitTUkNfVVJJX2FwcGVuZF9taXBzNjQgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHM2NG4zMiA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBXZSBkbyBub3QgeWV0IHdvcmsgZm9yIGFhcmNoNjQuCisjCitDT01QQVRJQkxFX0hPU1QgPSAiXig/IWFhcmNoNjQpLioiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC11cHJvYmVzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg5MDhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiVVByb2JlcyBrZXJuZWwgbW9kdWxlIGZvciBTeXN0ZW1UYXAiCisKK3JlcXVpcmUgc3lzdGVtdGFwX2dpdC5pbmMKKworREVQRU5EUyA9ICJzeXN0ZW10YXAgdmlydHVhbC9rZXJuZWwiCisKK1BSID0gInIxIgorCisjIE9uIHN5c3RlbXMgd2l0aG91dCBDT05GSUdfVVRSQUNFLCB0aGlzIHBhY2thZ2UgaXMgZW1wdHkuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitpbmhlcml0IG1vZHVsZS1iYXNlIGdldHRleHQKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vc3lzdGVtdGFwOiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vc3lzdGVtdGFwL3J1bnRpbWUvdXByb2JlcyIKKworRVhUUkFfT0VNQUtFID0gIiIKKworIyBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSB1cHJvYmVzIGtlcm5lbCBtb2R1bGUgb24gbWFjaGluZXMgd2l0aCB1dHJhY2UKKyMgc3VwcG9ydC4gIE5vdGUgdGhhdCBzdGFwcnVuIGV4cGVjdHMgaXQgaW4gdGhlIHN5c3RlbXRhcC9ydW50aW1lIGRpcmVjdG9yeSwKKyMgbm90IGluIC9saWIvbW9kdWxlcy4KK2RvX2NvbXBpbGUoKSB7CisJaWYgZ3JlcCAtcSAiQ09ORklHX1VUUkFDRT15IiAke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfS8uY29uZmlnCisJdGhlbgorCQl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBDQyBMRCBDUFAKKwkJb2VfcnVubWFrZSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJCQkgICAtQyAke1NUQUdJTkdfS0VSTkVMX0RJUn0gc2NyaXB0cworCQlvZV9ydW5tYWtlIEtESVI9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICAgXAorCQkJICAgTT0iJHtTfS9ydW50aW1lL3Vwcm9iZXMvIiBcCisJCQkgICBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBcCisJCQkgICBBUj0iJHtLRVJORUxfQVJ9IiBcCisJCQkgICAtQyAiJHtTfS9ydW50aW1lL3Vwcm9iZXMvIgorCWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaWYgWyAtZSAiJHtTfS9ydW50aW1lL3Vwcm9iZXMvdXByb2Jlcy5rbyIgXQorCXRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzLworCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ydW50aW1lL3Vwcm9iZXMvdXByb2Jlcy5rbyAke0R9JHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzLworCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZjJmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDVlYjEwZDkwYWY5MTc4ZWRiNjVlNjA5MWFlOTM5ZDFiNWIxOWJiNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMjMgU2VwIDIwMTQgMDQ6NDc6MTAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzdGVtdGFwOiBhbGxvdyB0byBkaXNhYmxlIGxpYnZpcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAxMyArKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTYzMWFlNy4uY2I0ODg1YiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTI1LDEwICs1MjUsMTUgQEAgZG5sIENoZWNrIGZvciB0aGUgbGlidmlydCBhbmQgbGlieG1sMiBkZXZlbCBwYWNrYWdlcworIAorIGRubCBXZSByZXF1aXJlIGxpYnZpcnQgPj0gMS4wLjIgYmVjYXVzZSBzdGFwdmlydCByZWxpZXMgb24gdGhlCisgZG5sIHZpckRvbWFpbk9wZW5DaGFubmVsIGZ1bmN0aW9uLCB3aGljaCB3YXMgaW1wbGVtZW50ZWQgaW4gMS4wLjIuCistUEtHX0NIRUNLX01PRFVMRVMoW2xpYnZpcnRdLCBbbGlidmlydCA+PSAxLjAuMl0sIFsKKy0gICBoYXZlX2xpYnZpcnQ9eWVzCistICAgQUNfREVGSU5FKFtIQVZFX0xJQlZJUlRdLFsxXSxbRGVmaW5lIHRvIDEgaWYgbGlidmlydCBkZXZlbG9wbWVudCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZF0pCistICAgXSwgW2hhdmVfbGlidmlydD1ub10pCisrQUNfQVJHX0VOQUJMRShbbGlidmlydF0sCisrICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnZpcnRdLCBbRG8gbm90IHVzZSBsaWJ2aXJ0IGV2ZW4gaWYgcHJlc2VudF0pKQorKworK2lmIHRlc3QgIiRlbmFibGVfbGlidmlydCIgIT0gbm87IHRoZW4KKysgIFBLR19DSEVDS19NT0RVTEVTKFtsaWJ2aXJ0XSwgW2xpYnZpcnQgPj0gMS4wLjJdLCBbCisrICAgICBoYXZlX2xpYnZpcnQ9eWVzCisrICAgICBBQ19ERUZJTkUoW0hBVkVfTElCVklSVF0sWzFdLFtEZWZpbmUgdG8gMSBpZiBsaWJ2aXJ0IGRldmVsb3BtZW50IGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkXSkKKysgICAgIF0sIFtoYXZlX2xpYnZpcnQ9bm9dKQorK2ZpCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCVklSVF0sIFt0ZXN0ICIke2hhdmVfbGlidmlydH0iID0gInllcyJdKQorIFBLR19DSEVDS19NT0RVTEVTKFtsaWJ4bWwyXSwgW2xpYnhtbC0yLjBdLCBbCisgICAgaGF2ZV9saWJ4bWwyPXllcworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9kb2Nwcm9jLWJ1aWxkLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E4OTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwODo0Mzo0Ni4yNjMzMzkwMDMgLTA1MDAKKysrKyBnaXQvZG9jL1N5c3RlbVRhcF9UYXBzZXRfUmVmZXJlbmNlL01ha2VmaWxlLmFtCTIwMTItMDQtMTMgMDk6MzE6MjIuNDcwMDgzOTE1IC0wNTAwCitAQCAtMjcsNiArMjcsMTAgQEAKKyBub2luc3RfUFJPR1JBTVMgPSBkb2Nwcm9jCisgU1JDVFJFRT0kKGFic190b3Bfc3JjZGlyKS8KKyBET0NQUk9DPSQoYWJzX2J1aWxkZGlyKS9kb2Nwcm9jCisrZG9jcHJvY19MSU5LID0gJChDQ19GT1JfQlVJTEQpICQoTERGTEFHU19GT1JfQlVJTEQpIC1vICRACisrCisrZG9jcHJvYy5vOiAkKHNyY2RpcikvZG9jcHJvYy5jCisrCSQoQ0NfRk9SX0JVSUxEKSAtYyAkKENGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoc3JjZGlyKS9kb2Nwcm9jLmMKKyAKKyBhbGw6ICQoUERGRE9DUykgc3RhbXAtaHRtbGRvY3Mgc3RhbXAtbWFuZG9jcworIHRhcHNldHMueG1sOiBkb2Nwcm9jICQoc2hlbGwgZmluZCAkKFNSQ1RSRUUpL3RhcHNldCAtbmFtZSAnKi5zdHAnKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4Y2RhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xOSw3ICsxOSw2IEBAIEFDX1BST0dfTE5fUworIEFDX1BST0dfQ0MKKyBBQ19QUk9HX0NYWAorIEFDX1BST0dfQ1BQCistQU1fUFJPR19DQ19TVERDCisgQU1fUFJPR19DQ19DX08KKyBBQ19QUk9HX1JBTkxJQgorIEFDX09CSkVYVApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTNhZjVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorc3lzdGVtdGFwOiBDcm9zcyBjb21waWxhdGlvbiBmaXgKKworVGhpcyBpcyBhIGNyb3NzIGNvbXBpbGF0aW9uIGZpeC4gSXQgYWxsb3dzIHN5c3RlbXRhcCB0byBmaW5kCit0aGUga2VybmVsIG1hcCBmaWxlIGluIHRoZSByaWdodCBwbGFjZSwgaS5lLiBpbiB0aGUga2VybmVsIGJ1aWxkIHRyZWUuCitXaXRob3V0IHRoaXMgZml4IGl0IHRha2VzIGEgbWFwIGZpbGUgZnJvbSB0aGUgYnVpbGQgaG9zdCwgaWYgYXZhaWxhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWlraGFpbCBEdXJuZXYgPG1pa2hhaWxfZHVybmV2QG1lbnRvci5jb20+CisKK0luZGV4OiBnaXQvc2Vzc2lvbi5jeHgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zZXNzaW9uLmN4eAorKysrIGdpdC9zZXNzaW9uLmN4eAorQEAgLTE2MzQsNyArMTYzNCw3IEBAIHN5c3RlbXRhcF9zZXNzaW9uOjpwYXJzZV9rZXJuZWxfZnVuY3Rpb24KKyAJY2xvZyA8PCBfRigiS2VybmVsIHN5bWJvbCB0YWJsZSAlcyB1bmF2YWlsYWJsZSwgKCVzKSIsCisgCQkgICBzeXN0ZW1fbWFwX3BhdGguY19zdHIoKSwgc3RyZXJyb3IoZXJybm8pKSA8PCBlbmRsOworIAorLSAgICAgIHN5c3RlbV9tYXBfcGF0aCA9ICIvYm9vdC9TeXN0ZW0ubWFwLSIgKyBrZXJuZWxfcmVsZWFzZTsKKysgICAgICBzeXN0ZW1fbWFwX3BhdGggPSBrZXJuZWxfYnVpbGRfdHJlZSArICIvU3lzdGVtLm1hcC0iICsga2VybmVsX3JlbGVhc2U7CisgICAgICAgc3lzdGVtX21hcC5jbGVhcigpOworICAgICAgIHN5c3RlbV9tYXAub3BlbihzeXN0ZW1fbWFwX3BhdGguY19zdHIoKSwgaWZzdHJlYW06OmluKTsKKyAgICAgICBpZiAoISBzeXN0ZW1fbWFwLmlzX29wZW4oKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC94MzJfYWJpX3RpbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTdlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAveDMyX2FiaV90aW1lLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0ZpeCB0aW1lX3QgcHJpbnQgYmVjYXVzZSBpbiB4MzIgQUJJIGlzIGxvbmcgbG9uZyBpbnQgaW5zdGVhZCBvZiBsb25nIGludC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY2FjaGUuY3h4IGIvY2FjaGUuY3h4CitpbmRleCAzNTQ2YjMwLi4xOWM3N2NhIDEwMDY0NAorLS0tIGEvY2FjaGUuY3h4CisrKysgYi9jYWNoZS5jeHgKK0BAIC0yOTQsNyArMjk0LDExIEBAIGNsZWFuX2NhY2hlKHN5c3RlbXRhcF9zZXNzaW9uJiBzKQorICAgICAgICAgeworICAgICAgICAgICAvL2ludGVydmFsIG5vdCBwYXNzZWQsIGRvbid0IGNvbnRpbnVlCisgICAgICAgICAgIGlmIChzLnZlcmJvc2UgPiAxKQorKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysgICAgICAgICAgICBjbG9nIDw8IF9GKCJDYWNoZSBjbGVhbmluZyBza2lwcGVkLCBpbnRlcnZhbCBub3QgcmVhY2hlZCAlbGxkIHMgLyAlbHUgcy4iLAorKyNlbHNlCisgICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2FjaGUgY2xlYW5pbmcgc2tpcHBlZCwgaW50ZXJ2YWwgbm90IHJlYWNoZWQgJWx1IHMgLyAlbHUgcy4iLAorKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGltZS50dl9zZWMtc2Iuc3RfbXRpbWUpLCBjYWNoZV9jbGVhbl9pbnRlcnZhbCkgIDw8IGVuZGw7CisgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KK0BAIC0zMDIsNyArMzA2LDExIEBAIGNsZWFuX2NhY2hlKHN5c3RlbXRhcF9zZXNzaW9uJiBzKQorICAgICAgICAgeworICAgICAgICAgICAvL2ludGVydmFsIHJlYWNoZWQsIGNvbnRpbnVlCisgICAgICAgICAgIGlmIChzLnZlcmJvc2UgPiAxKQorKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQgKF9fSUxQMzJfXykKKysgICAgICAgICAgICBjbG9nIDw8IF9GKCJDbGVhbmluZyBjYWNoZSwgaW50ZXJ2YWwgcmVhY2hlZCAlbGxkIHMgPiAlbHUgcy4iLAorKyNlbHNlCisgICAgICAgICAgICAgY2xvZyA8PCBfRigiQ2xlYW5pbmcgY2FjaGUsIGludGVydmFsIHJlYWNoZWQgJWx1IHMgPiAlbHUgcy4iLAorKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGltZS50dl9zZWMtc2Iuc3RfbXRpbWUpLCBjYWNoZV9jbGVhbl9pbnRlcnZhbCkgIDw8IGVuZGw7CisgICAgICAgICB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGRkNDJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlNjcmlwdC1kaXJlY3RlZCBkeW5hbWljIHRyYWNpbmcgYW5kIHBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2wgZm9yIExpbnV4IgorCityZXF1aXJlIHN5c3RlbXRhcF9naXQuaW5jCisKK0RFUEVORFMgPSAiZWxmdXRpbHMgc3FsaXRlMyBzeXN0ZW10YXAtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZWxmdXRpbHMtbmF0aXZlIHNxbGl0ZTMtbmF0aXZlIGdldHRleHQtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAibmF0aXZlc2RrLWVsZnV0aWxzIG5hdGl2ZXNkay1zcWxpdGUzIG5hdGl2ZXNkay1nZXR0ZXh0IgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uIGJhc2giCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgKz0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgKz0gInB5dGhvbi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWxpYmVsZj0ke1NUQUdJTkdfRElSX1RBUkdFVH0gLS13aXRob3V0LXJwbSBcCisgICAgICAgICAgICAtLXdpdGhvdXQtbnNzIC0td2l0aG91dC1hdmFoaSAtLXdpdGhvdXQtZHluaW5zdCBcCisgICAgICAgICAgICAtLWRpc2FibGUtc2VydmVyIC0tZGlzYWJsZS1ncmFwaGVyIC0tZW5hYmxlLXByb2xvZ3VlcyBcCisgICAgICAgICAgICBhY19jdl9wcm9nX2hhdmVfamF2YWM9bm8gXAorICAgICAgICAgICAgYWNfY3ZfcHJvZ19oYXZlX2phcj1ubyAiCisKK1NUQVBfRE9DUyA/PSAiLS1kaXNhYmxlLWRvY3MgLS1kaXNhYmxlLXB1YmxpY2FuIC0tZGlzYWJsZS1yZWZkb2NzIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7U1RBUF9ET0NTfSAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYnZpcnRdID0gIi0tZW5hYmxlLWxpYnZpcnQsLS1kaXNhYmxlLWxpYnZpcnQsbGlidmlydCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vc3lzdGVtdGFwLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhNTc4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuaW5jCkBAIC0wLDAgKzEsMjggQEAKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKK1NSQ1JFViA9ICJiZjE2MjY2NzgyZTFmMjU4OGI1MTlhNTBkOTY4NDI3OWQ0ZTIxMDM2IgorUFYgPSAiMi43K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9zeXN0ZW10YXAuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8veDMyX2FiaV90aW1lLnBhdGNoIFwKKyAgICAgICAgICAiCisKKyMgc3lzdGVtdGFwIGRvZXNuJ3Qgc3VwcG9ydCBtaXBzCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NHxpLjg2fHBvd2VycGN8YXJtfGFhcmNoNjQpLiotbGludXgnCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgc3lzdGVtdGFwIGNhbid0IGJlIGJ1aWx0IHdpdGhvdXQgb3B0aW1pemF0aW9uLCBpZiBzb21lb25lIHRyaWVzIHRvIGNvbXBpbGUgYW4KKyMgZW50aXJlIGltYWdlIGFzIC1PMCwgd2Ugb3ZlcnJpZGUgaXQgd2l0aCAtTzIgaGVyZSBhbmQgZ2l2ZSBhIG5vdGUgYWJvdXQgaXQuCitkZWYgZ2V0X29wdGltaXphdGlvbihkKToKKyAgICBzZWxlY3RlZF9vcHRpbWl6YXRpb24gPSBkLmdldFZhcigiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgVHJ1ZSkKKyAgICBpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PMCIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgic3lzdGVtdGFwIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8wLCAtTzIgd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzAiLCAiLU8yIikKKyAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uCisKK1NFTEVDVEVEX09QVElNSVpBVElPTiA6PSAiJHtAZ2V0X29wdGltaXphdGlvbihkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC9rZXJuZWxzaGFya19naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC9rZXJuZWxzaGFya19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlY2NhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkdyYXBoaWNhbCB0cmFjZSB2aWV3ZXIgZm9yIEZ0cmFjZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK3JlcXVpcmUgdHJhY2UtY21kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9rZXJuZWwtc2hhcmsuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTg7bWQ1PTJjMjJjOTY1YTY0OWRkZDc5NzNkNzkxM2M1NjM0YTVlIgorCitERVBFTkRTID0gImd0aysgbGlieG1sMiIKK1JERVBFTkRTXyR7UE59ID0gInRyYWNlLWNtZCIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXJfcmVsYXRpdmU9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGJpbmRpcil9JyBcCisgICAgJ2xpYmRpcj0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgbGliZGlyKX0nIFwKKyAgICBOT19QWVRIT049MSBcCisgICAgZ3VpIFwKKyIKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgTWFrZSBzdXJlIHRoZSByZWNvbXBpbGUgaXMgT0sKKyAgICBybSAtZiAke0J9Ly4qLmQKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGxfZ3VpCisgICAgcm0gJHtEfSR7YmluZGlyfS90cmFjZS1jbWQKKyAgICBybSAtcmYgJHtEfSR7bGliZGlyfS90cmFjZS1jbWQKKyAgICBybWRpciAke0R9JHtsaWJkaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2U0YTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kLmluYwpAQCAtMCwwICsxLDEyIEBACitTUkNSRVYgPSAiMDgxMzMzNWQyZTQ5MjkxZTdhYjZhNDM2NWNlYzJiYWEwNTgxM2VkYSIKK1BWID0gIjIuNS4zK2dpdCR7U1JDUFZ9IgorCitpbmhlcml0IHBrZ2NvbmZpZworCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS90cmFjZS1jbWQ6IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9yb3N0ZWR0L3RyYWNlLWNtZC5naXQ7YnJhbmNoPXRyYWNlLWNtZC1zdGFibGUtdjIuNSBcCisgICAgICAgICAgIGZpbGU6Ly9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQvYmxrdHJhY2UtYXBpLWNvbXBhdGliaWxpdHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQvYmxrdHJhY2UtYXBpLWNvbXBhdGliaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIwZGI2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI5IEBACit0cmFjZS1jbWQ6IEFkZCBibGt0cmFjZV9hcGkgY29tcGF0aWJpbGl0eSBmb3IgVENfQkFSUklFUgorCitOZXdlciBrZXJuZWxzIHJlcGxhY2UgVENfQkFSUklFUiB3aXRoIFRDX0ZMVVNILiBFbnN1cmUgdHJhY2UtY21kCitjYW4gYnVpbGQgcmVnYXJkbGVzcyBvZiB0aGUgbGludXgta2VybmVsLWhlYWRlcnMgdmVyc2lvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTdG9wIGdhcF0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9wbHVnaW5fYmxrLmMgYi9wbHVnaW5fYmxrLmMKK2luZGV4IDkzMjdiMTcuLmM4ZTVlMWMgMTAwNjQ0CistLS0gYS9wbHVnaW5fYmxrLmMKKysrKyBiL3BsdWdpbl9ibGsuYworQEAgLTQ0LDYgKzQ0LDE1IEBAIHN0cnVjdCBibGtfZGF0YSB7CisgCXVuc2lnbmVkIHNob3J0CQlwZHVfbGVuOworIH07CisgCisrLyoKKysgKiBOZXdlciBrZXJuZWxzIGRvbid0IGRlZmluZSBCTEtfVENfQkFSUklFUiBhbmQgaGF2ZSByZXBsYWNlZCBpdCB3aXRoCisrICogQkxLX1RDX0ZMVVNILiBJbiB0aGlzIGNhc2UsIGRlZmluZSBpdCBoZXJlIGFuZCByZXBvcnQgRkxVU0hFUyBhcyBCQVJSSUVSUyBhcworKyAqIGEgd29ya2Fyb3VuZCwgYXMgZGVzY3JpYmVkIGluOgorKyAqIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdDthPWNvbW1pdDtoPWMwOWM0N2NhZWRjOTg1NGQ1OTM3OGQ2ZTM0Yzk4OWU1MWNmZGQyYjQKKysgKi8KKysjaWZuZGVmIEJMS19UQ19CQVJSSUVSCisrI2RlZmluZSBCTEtfVENfQkFSUklFUiAxPDwyCisrI2VuZGlmCisgc3RhdGljIHZvaWQgZmlsbF9yd2JzKGNoYXIgKnJ3YnMsIGludCBhY3Rpb24sIHVuc2lnbmVkIGludCBieXRlcykKKyB7CisgCWludCBpID0gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYWM3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWRfZ2l0LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVXNlciBpbnRlcmZhY2UgdG8gRnRyYWNlIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorCityZXF1aXJlIHRyYWNlLWNtZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2UtY21kLmM7YmVnaW5saW5lPTY7ZW5kbGluZT04O21kNT0yYzIyYzk2NWE2NDlkZGQ3OTczZDc5MTNjNTYzNGE1ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJhY2UtaW5wdXQuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTg7bWQ1PTNlYzgyZjQzYmJlMGNmYjU5NTFmZjQxNGVmNGQ0NGQwIFwKKyIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAncHJlZml4PSR7cHJlZml4fScgXAorICAgICdiaW5kaXI9JHtiaW5kaXJ9JyBcCisgICAgJ21hbl9kaXI9JHttYW5kaXJ9JyBcCisgICAgJ2h0bWxfaW5zdGFsbD0ke2RhdGFkaXJ9L2tlcm5lbHNoYXJrL2h0bWwnIFwKKyAgICAnaW1nX2luc3RhbGw9JHtkYXRhZGlyfS9rZXJuZWxzaGFyay9odG1sL2ltYWdlcycgXAorICAgIFwKKyAgICAnYmluZGlyX3JlbGF0aXZlPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBiaW5kaXIpfScgXAorICAgICdsaWJkaXI9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGxpYmRpcil9JyBcCisgICAgXAorICAgIE5PX1BZVEhPTj0xIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdHJhY2UtY21kL3BsdWdpbnMvLmRlYnVnIgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLiouZAorfQorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIERFU1RESVI9IiR7RH0iIGluc3RhbGwKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvbGlicG5nL2xpYnBuZzEyXzEuMi41My5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4NjFhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L2xpYnBuZy9saWJwbmcxMl8xLjIuNTMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJQTkcgaW1hZ2UgZm9ybWF0IGRlY29kaW5nIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnBuZy5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMaWJwbmciCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iZDJhN2ExMzM1NWZjY2E5MmFkODNiZGY3ZTI5NjAxMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wbmcuaDtiZWdpbmxpbmU9MzIyO2VuZGxpbmU9NDM2O21kNT1jYWY5ZWU1NDEyMzRjNjYzYWVlY2RjZmVmMmY3OWFlMSIKK0RFUEVORFMgPSAiemxpYiIKKworUE4gPSAibGlicG5nMTIiCitTID0gIiR7V09SS0RJUn0vbGlicG5nLSR7UFZ9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpYnBuZy9saWJwbmcxMi8ke1BWfS9saWJwbmctJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2QxOGE3NGU2ZmQyMDI5YWVlNzZjY2QwMGUwMGE5ZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQ1ZTQ5ZjY4OWU3NDUxYmQ1NzY1NjllNmEzNDRmN2UwZDExYzAyZWNiYjc5N2Y0ZGEwZTQzMTUyNjc2NWMwYSIKKworQklOQ09ORklHX0dMT0IgPSAiJHtQTn0tY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWcgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgVGhlIGZvbGxvdyBsaW5rIGZpbGVzIGxpbmsgdG8gY29ycmVzcG9uZGluZyBwbmcxMiouaCBhbmQgbGlicG5nMTIqIGZpbGVzCisJIyBUaGV5IGNvbmZsaWN0IHdpdGggaGlnaGVyIHZlcmlzb24sIHNvIGRyb3AgdGhlbQorCXVubGluayAke0R9LyR7aW5jbHVkZWRpcn0vcG5nLmgKKwl1bmxpbmsgJHtEfS8ke2luY2x1ZGVkaXJ9L3BuZ2NvbmYuaAorCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L2xpYnBuZy5sYQorCXVubGluayAke0R9LyR7bGliZGlyfS9saWJwbmcuc28KKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vbGlicG5nLmEKKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBuZy5wYworCisJdW5saW5rICR7RH0vJHtiaW5kaXJ9L2xpYnBuZy1jb25maWcKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliY2xhc3MtaXNhLXBlcmxfMC4zNi5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliY2xhc3MtaXNhLXBlcmxfMC4zNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTM4NDFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHJlcG9ydGluZyB0aGUgc2VhcmNoIHBhdGggZm9yIGEgY2xhc3MncyBJU0EgdHJlZSIKK0RFU0NSSVBUSU9OID0gIlN1cHBvc2UgeW91IGhhdmUgYSBjbGFzcyAobGlrZSBGb29kOjpGaXNoOjpGaXNoc3RpY2spIHRoYXQgaXMgZGVyaXZlZCwgXAordmlhIGl0cyBASVNBLCBmcm9tIG9uZSBvciBtb3JlIHN1cGVyY2xhc3NlcyAoYXMgRm9vZDo6RmlzaDo6RmlzaHN0aWNrIGlzIGZyb20gRm9vZDo6RmlzaCxcCitMaWZlOjpGdW5ndXMsIGFuZCBDaGVtaWNhbHMpLCBhbmQgc29tZSBvZiB0aG9zZSBzdXBlcmNsYXNzZXMgbWF5IHRoZW1zZWx2ZXMgZWFjaCBiZVwKK2Rlcml2ZWQsIHZpYSBpdHMgQElTQSwgZnJvbSBvbmUgb3IgbW9yZSBzdXBlcmNsYXNzZXMgKGFzIGFib3ZlKS5cCitcCitXaGVuLCB0aGVuLCB5b3UgY2FsbCBhIG1ldGhvZCBpbiB0aGF0IGNsYXNzICgkZmlzaHN0aWNrLT5jYWxvcmllcyksIFBlcmwgZmlyc3Qgc2VhcmNoZXNcCit0aGVyZSBmb3IgdGhhdCBtZXRob2QsIGJ1dCBpZiBpdCdzIG5vdCB0aGVyZSwgaXQgZ29lcyBzZWFyY2hpbmcgaW4gaXRzIHN1cGVyY2xhc3NlcywgYW5kXAorc28gb24sIGluIGEgZGVwdGgtZmlyc3QgKG9yIG1heWJlICJoZWlnaHQtZmlyc3QiIGlzIHRoZSB3b3JkKSBzZWFyY2guIEluIHRoZSBhYm92ZSBleGFtcGxlLFwKK2l0J2QgZmlyc3QgbG9vayBpbiBGb29kOjpGaXNoLCB0aGVuIEZvb2QsIHRoZW4gTWF0dGVyLCB0aGVuIExpZmU6OkZ1bmd1cywgdGhlbiBMaWZlLCB0aGVuXAorQ2hlbWljYWxzLlwKK1wKK1RoaXMgbGlicmFyeSwgQ2xhc3M6OklTQSwgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoYXQgbGlzdCAtLSB0aGUgbGlzdFwKKyhpbiBvcmRlcikgb2YgbmFtZXMgb2YgY2xhc3NlcyBQZXJsIHdvdWxkIHNlYXJjaCB0byBmaW5kIGEgbWV0aG9kLCB3aXRoIG5vIGR1cGxpY2F0ZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvQ2xhc3MtSVNBLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MTA3O2VuZGxpbmU9MTExO21kNT02YTVjNjg0MmE2M2NmZTRkYWIxZjY2ZTIzNTBlNGQyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9TL1NNL1NNVUVMTEVSL0NsYXNzLUlTQS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzYTJhZDIwM2M4ZGM4N2Q2YzlkZTE2MjE1ZDAwYWY0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ODE2ZjM0ZTlhMzhlODQ5YTEwZGY3NTYwMzBkY2NmOWZlMDYxYTE5NmMxMWFjM2ZhYWZkNzExM2M5MjliOTY0IgorCitTID0gIiR7V09SS0RJUn0vQ2xhc3MtSVNBLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmR1bXB2YWx1ZS1wZXJsXzEuMTcuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmR1bXB2YWx1ZS1wZXJsXzEuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3NDYxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciBwcm92aWRlcyBzY3JlZW4gZHVtcCBvZiBQZXJsIGRhdGEiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0R1bXB2YWx1ZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mNzM2YmVjNWFkYTFmYzVlMzliMmE4ZTdlMDZiYmNiYiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0R1bXB2YWx1ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZWRlOWY2OTNkNGE5YzQ1NTU1NDFjYjFhMWNjMjAwNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZWE3NDYwNmI1NDVmNzY5YTc4N2VjMmFlMjI5NTQ5YTJhZDBhOGUzY2Q0YjE0ZWZmMmNlMzg0MTgzNmIzYmRiIgorCitTID0gIiR7V09SS0RJUn0vRHVtcHZhbHVlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmVudi1wZXJsXzEuMDQuYmIgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmVudi1wZXJsXzEuMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4ZTExNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgaW1wb3J0cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgc2NhbGFycyBvciBhcnJheXMiCitERVNDUklQVElPTiA9ICJQZXJsIG1haW50YWlucyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gYSBzcGVjaWFsIGhhc2ggbmFtZWQgJUVOVi4gXAorRm9yIHdoZW4gdGhpcyBhY2Nlc3MgbWV0aG9kIGlzIGluY29udmVuaWVudCwgdGhlIFBlcmwgbW9kdWxlIEVudiBhbGxvd3MgZW52aXJvbm1lbnQgXAordmFyaWFibGVzIHRvIGJlIHRyZWF0ZWQgYXMgc2NhbGFyIG9yIGFycmF5IHZhcmlhYmxlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0Vudi8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmMxY2JmMThkYjU2YjMzNDBkOTFjYjk0Nzk0M2JkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0Vudi0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZGJhNWMwNjkwZTY2OTcyYzk2ZmVlMTEyY2Y1ZjI1YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkOTRhM2Q0MTJkZjI0NmFmZGMzMWEyMTk5Y2JkOGFlOTE1MTY3YTNmNDY4NGY3YjcwMTRjZTEyMDAyNTFlYmIwIgorCitTID0gIiR7V09SS0RJUn0vRW52LSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzdjNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmZpbGUtY2hlY2t0cmVlLXBlcmxfNC40MS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIHRoYXQgcnVuIG1hbnkgZmlsZXRlc3QgY2hlY2tzIG9uIGEgdHJlZSIKK0RFU0NSSVBUSU9OID0gIlRoZSB2YWxpZGF0ZSgpIHJvdXRpbmUgdGFrZXMgYSBzaW5nbGUgbXVsdGlsaW5lIHN0cmluZyBjb25zaXN0aW5nIFwKK29mIGRpcmVjdGl2ZXMsIGVhY2ggY29udGFpbmluZyBhIGZpbGVuYW1lIHBsdXMgYSBmaWxlIHRlc3QgdG8gdHJ5IG9uIGl0LiAoVGhlIGZpbGUgXAordGVzdCBtYXkgYWxzbyBiZSBhICJjZCIsIGNhdXNpbmcgc3Vic2VxdWVudCByZWxhdGl2ZSBmaWxlbmFtZXMgdG8gYmUgaW50ZXJwcmV0ZWQgXAorcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuKSBBZnRlciB0aGUgZmlsZSB0ZXN0IHlvdSBtYXkgcHV0IHx8IGRpZSB0byBtYWtlIGl0IGEgXAorZmF0YWwgZXJyb3IgaWYgdGhlIGZpbGUgdGVzdCBmYWlscy4gVGhlIGRlZmF1bHQgaXMgfHwgd2Fybi4gVGhlIGZpbGUgdGVzdCBtYXkgXAorb3B0aW9uYWxseSBoYXZlIGEgIiEnIHByZXBlbmRlZCB0byB0ZXN0IGZvciB0aGUgb3Bwb3NpdGUgY29uZGl0aW9uLiBJZiB5b3UgZG8gYSBcCitjZCBhbmQgdGhlbiBsaXN0IHNvbWUgcmVsYXRpdmUgZmlsZW5hbWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5kZW50IHRoZW0gc2xpZ2h0bHkgZm9yIFwKK3JlYWRhYmlsaXR5LiBJZiB5b3Ugc3VwcGx5IHlvdXIgb3duIGRpZSgpIG9yIHdhcm4oKSBtZXNzYWdlLCB5b3UgY2FuIHVzZSAkZmlsZSB0byBcCitpbnRlcnBvbGF0ZSB0aGUgZmlsZW5hbWUuIFwKK1wKK0ZpbGV0ZXN0cyBtYXkgYmUgYnVuY2hlZDogIi1yd3giIHRlc3RzIGZvciBhbGwgb2YgLXIsIC13LCBhbmQgLXguIE9ubHkgdGhlIGZpcnN0IGZhaWxlZCBcCit0ZXN0IG9mIHRoZSBidW5jaCB3aWxsIHByb2R1Y2UgYSB3YXJuaW5nLiBcCitcCitUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgaXNzdWVkLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRmlsZS1DaGVja1RyZWUvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YzZmY2FjYzVkZjgwZTAzNzA2MDMwMGE3ZjRiOTNiZjkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRi9GTC9GTE9SQS9GaWxlLUNoZWNrVHJlZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MTljODJhYTdlNWI3Zjc1MmI0ZGExNGE2YzhhZDc0MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzk5YWI2YmI1YWY0NjY0ODMyNzE1OTc0YjVhMTllMzI4MDcxZGM5MjAyYWI3MmU1ZDVhNTk0ZWJkNDZhNzI5IgorCitTID0gIiR7V09SS0RJUn0vRmlsZS1DaGVja1RyZWUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliaTE4bi1jb2xsYXRlLXBlcmxfMS4wMi5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliaTE4bi1jb2xsYXRlLXBlcmxfMS4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgzOWUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBjb21wYXJlIDgtYml0IHNjYWxhciBkYXRhIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUiCitERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBwcm92aWRlcyB5b3Ugd2l0aCBvYmplY3RzIHRoYXQgd2lsbCBjb2xsYXRlIGFjY29yZGluZyB0byBcCit5b3VyIG5hdGlvbmFsIGNoYXJhY3RlciBzZXQsIHByb3ZpZGVkIHRoYXQgdGhlIFBPU0lYIHNldGxvY2FsZSgpIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBcCitvbiB5b3VyIHN5c3RlbS4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfmZsb3JhL0kxOE4tQ29sbGF0ZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZjZkNjI5MTQ0YTZlYzFlYThjMzAwZjc1NzYwMTg0ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0kxOE4tQ29sbGF0ZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MmRkYjZkMWM1OWNmZGYzMWFhM2IwNDc5OWI4NmFmMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MTc0NTA2YmM5MDNlZGE4OTY5MDM5NGUzZjQ1NTU4YWI3ZTAxMzExNDIyNzg5NmQ4NTY5ZDYxNjQ2NDhmZTM3IgorCitTID0gIiR7V09SS0RJUn0vSTE4Ti1Db2xsYXRlLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTU4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYnBvZC1wbGFpbmVyLXBlcmxfMS4wNC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlBlcmwgZXh0ZW5zaW9uIGZvciBjb252ZXJ0aW5nIFBvZCB0byBvbGQtc3R5bGUgUG9kIgorREVTQ1JJUFRJT04gPSAiUG9kOjpQbGFpbmVyIHVzZXMgUG9kOjpQYXJzZXIgd2hpY2ggdGFrZXMgUG9kIHdpdGggdGhlIChuZXcpICdDPDwgLi4gPj4nIFwKK2NvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIG9sZChlcikgc3R5bGUgd2l0aCBqdXN0ICdDPD4nOyAnPCcgYW5kICc+JyBhcmUgcmVwbGFjZWQgYnkgXAorJ0U8bHQ+JyBhbmQgJ0U8Z3Q+Jy4gXAorXAorVGhpcyBjYW4gYmUgdXNlZCB0byBwcmUtcHJvY2VzcyBQb2QgYmVmb3JlIHVzaW5nIHRvb2xzIHdoaWNoIGRvIG5vdCByZWNvZ25pc2UgdGhlIG5ldyBzdHlsZSBQb2RzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0L1BvZC1QbGFpbmVyLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9Mjc7bWQ1PTIyN2NmODM5NzBmYzYxMjY0ODQ1ODI1ZDlkMmJmNmY4IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1IvUk0vUk1CQVJLRVIvUG9kLVBsYWluZXItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjUwMmVhY2QxYTQwODk0YjlkZmVhNTVmYzJjZDVlN2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWJiZmJmN2QxZDQ4NzFlNWE4M2JhYjIxMzdlMjJkMDg5MDc4MjA2ODE1MTkwZWIxZDVjMTI2MGEzNDk5NDU2ZiIKKworUyA9ICIke1dPUktESVJ9L1BvZC1QbGFpbmVyLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDAyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtZnB1LmluYwpAQCAtMCwwICsxLDYgQEAKKworZGVmIGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKToKKwlpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisJCXJldHVybiAiLS13aXRoLXNvZnRmbG9hdCIKKwlyZXR1cm4gIiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLWJ1aWxkLURvLW5vdC10cnktdG8tZGV0ZWN0LWNyb3NzLWNvbXBpbGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi8wMDAxLWJ1aWxkLURvLW5vdC10cnktdG8tZGV0ZWN0LWNyb3NzLWNvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4M2JjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbSAxN2FlYjM1NjVmNDExZTc3OTZjYWJlNDAzZjkyZDE1OTQ4YThjYTk1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjEgQXVnIDIwMTUgMTQ6NDI6NDUgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQ6IERvIG5vdCB0cnkgdG8gZGV0ZWN0IGNyb3NzLWNvbXBpbGVyCisKK2Nyb3NzIGNvbXBpbGVycyBhcmUgcGFzc2VkIHZpYSBwYXRoIG1heSBub3QgYmUgYSBnY2MgYmFzZWQgY3Jvc3MKK2NvbXBpbGVyIGluIHN1Y2ggY2FzZXMgdGhpcyBjaGVjayBmYWlscyBhbmQgdHJ5J3MgdG8gZm9yY2UgZ2NjIGJhc2VkCitjcm9zcyBjb21waWxlciBkZXRlY3Rpb24sIFRoaXMgY29kZSBpcyBhIGNvbnZlbmllbmNlIHRoYXQgbGltaXRzIHRoZQorYnVpbGQgc3lzdGVtCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgY29uZmlndXJlLmFjIHwgMTQgLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDMwMjJjZjguLjlkNzc0NDAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3LDIwICsyNyw2IEBAIEFDX1BSRUZJWF9ERUZBVUxUKC91c3IpCisgCisgZG5sIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgCistZG5sIHRyeSB0byBndWVzIGNyb3NzLWNvbXBpbGVyIGlmIG5vdCBzZXQKKy1pZiB0ZXN0ICJ4JGhvc3QiICE9ICJ4JGJ1aWxkIiAtYSAteiAiYGVjaG8gJENDIHwgZ3JlcCAtZSAnLWdjYydgIjsKKy10aGVuCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNyb3NzLWNvbXBpbGVyKQorLQorLSAgd2hpY2ggJHtwcm9ncmFtX3ByZWZpeH1nY2MgPi9kZXYvbnVsbCAyPiYxICYmIENDPSR7cHJvZ3JhbV9wcmVmaXh9Z2NjCistICB3aGljaCAke2hvc3RfY3B1fS0ke2hvc3Rfb3N9LWdjYyA+L2Rldi9udWxsIDI+JjEgXAorLSAgJiYgQ0M9JHtob3N0X2NwdX0tJHtob3N0X29zfS1nY2MKKy0gIHdoaWNoICR7aG9zdF9jcHV9LSR7aG9zdF92ZW5kb3J9LSR7aG9zdF9vc30tZ2NjID4vZGV2L251bGwgMj4mMSBcCistICAmJiBDQz0ke2hvc3RfY3B1fS0ke2hvc3RfdmVuZG9yfS0ke2hvc3Rfb3N9LWdjYworLQorLSAgQUNfTVNHX1JFU1VMVCgkQ0MpCistZmkKKy0JICAgIAorIENGTEFHUz0iJENGTEFHUyAtRF9HTlVfU09VUkNFIgorIAorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE2ZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYi9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIGUzMzM1N2I1OWExMGQ0NGU5YmVjNWQyNDEwMGNlMjNjYTMwMGNjNzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSG9uZyBILiBQaGFtIiA8aG9uZy5waGFtQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI5IEF1ZyAyMDE0IDE3OjEzOjU1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIENoZWNrIGlmIHdvcmRleHAgZnVuY3Rpb24gaXMgc3VwcG9ydGVkCisKK2VnbGliYyBjb3VsZCBiZSBjb25maWd1cmVkIHRvIGJ1aWxkIHdpdGhvdXQgd29yZGV4cCwgc28gaXQgaXMgbm90IGVub3VnaAordG8gY2hlY2sgaWYgd29yZGV4cC5oIGV4aXN0cyAodGhlIGhlYWRlciBmaWxlIGNvdWxkIGJlIGluc3RhbGxlZCwgYnV0IGl0J3MKK3Bvc3NpYmxlIHRoYXQgdGhlIHdvcmRleHAoKSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkKS4gIEFuIGFkZGl0aW9uYWwKK2NoZWNrIGlmIHdvcmRleHAoKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSBDIGxpYnJhcnkgaXMgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEhvbmcgSC4gUGhhbSA8aG9uZy5waGFtQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgfCA1ICsrKystCisgc3JjL3VzZXJmaWxlLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGI4MzUzYTAuLjc3M2I3MmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxMSw3ICszMTEsMTAgQEAgZmkKKyBBQ19TVUJTVChBTFNBX0RFUExJQlMpCisgCisgZG5sIENoZWNrIGZvciBoZWFkZXJzCistQUNfQ0hFQ0tfSEVBREVSUyhbd29yZGV4cC5oIGVuZGlhbi5oIHN5cy9lbmRpYW4uaF0pCisrQUNfQ0hFQ0tfSEVBREVSUyhbd29yZGV4cC5oIGVuZGlhbi5oIHN5cy9lbmRpYW4uaF0sCisrICBkbmwgTWFrZSBzdXJlIHdvcmRleHAgaXMgc3VwcG9ydGVkIGJ5IHRoZSBDIGxpYnJhcnkKKysgIEFDX0NIRUNLX0ZVTkNTKFt3b3JkZXhwXSkKKyspCisgCisgZG5sIENoZWNrIGZvciByZXNtZ3Igc3VwcG9ydC4uLgorIEFDX01TR19DSEVDS0lORyhmb3IgcmVzbWdyIHN1cHBvcnQpCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJmaWxlLmMgYi9zcmMvdXNlcmZpbGUuYworaW5kZXggM2E3MzgzNi4uYjhjZTgwOSAxMDA2NDQKKy0tLSBhL3NyYy91c2VyZmlsZS5jCisrKysgYi9zcmMvdXNlcmZpbGUuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAgKiBzdG9yZXMgdGhlIGZpcnN0IG1hdGNoaW5lIG9uZS4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgc3RyZHVwJ2VkLgorICAqLworIAorLSNpZmRlZiBIQVZFX1dPUkRFWFBfSAorKyNpZiAoZGVmaW5lZChIQVZFX1dPUkRFWFBfSCkgJiYgZGVmaW5lZChIQVZFX1dPUkRFWFApKQorICNpbmNsdWRlIDx3b3JkZXhwLmg+CisgI2luY2x1ZGUgPGFzc2VydC5oPgorIGludCBzbmRfdXNlcl9maWxlKGNvbnN0IGNoYXIgKmZpbGUsIGNoYXIgKipyZXN1bHQpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZjQyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWJfMS4wLjI5LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MTFmZjg5YThhN2E0YTY5MGE1Yzc4ZWZmZTgxNTk1NDUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBjb25maWd1cmUuaW4gc2V0cyAtRF9fYXJtX18gb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgYW55IGFybSBzeXN0ZW0KKyMgKG5vdCBqdXN0IHRob3NlIHdpdGggdGhlIEFSTSBpbnN0cnVjdGlvbiBzZXQpLCB0aGlzIHNob3VsZCBiZSByZW1vdmVkLAorIyAob3IgcmVwbGFjZWQgYnkgYSBwZXJtaXR0ZWQgI2RlZmluZSkuCisjRklYTUU6IHJlbW92ZSB0aGUgZm9sbG93aW5nCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvbGliLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZGU2N2UwZWNhNzI0NzRkNmIxMTIxMDM3ZGFmZTEwMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzMwNDNjMzVlYjk2MzZiZTBmNGFmNmEyNDAyMzVjMjEzZjEyYTI1ZmViMWYwNGFlZWFjOGNiN2UzMGZjYmRkMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK3JlcXVpcmUgYWxzYS1mcHUuaW5jCitFWFRSQV9PRUNPTkYgKz0gIiR7QGdldF9hbHNhX2ZwdV9zZXR0aW5nKGJiLCBkKX0gIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXB5dGhvbiIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS13aXRoLXZlcnNpb25lZD1ubyAiCisKK1BBQ0tBR0VTID0rICJhbHNhLXNlcnZlciBsaWJhc291bmQgYWxzYS1jb25mLWJhc2UgYWxzYS1jb25mIGFsc2EtZG9jIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vc21peGVyLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5sYSIKK0ZJTEVTX2xpYmFzb3VuZCA9ICIke2xpYmRpcn0vbGliYXNvdW5kLnNvLioiCitGSUxFU19hbHNhLXNlcnZlciA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2Fsc2EtY29uZiA9ICIke2RhdGFkaXJ9L2Fsc2EvIgorRklMRVNfYWxzYS1jb25mLWJhc2UgPSAiXAorJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZiBcCiske2RhdGFkaXJ9L2Fsc2EvY2FyZHMvYWxpYXNlcy5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZGVmYXVsdC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZG1peC5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9wY20vZHNub29wLmNvbmYiCisKK1JERVBFTkRTX2xpYmFzb3VuZCA9ICJhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYiCisjIHVwZ3JhZGUgcGF0aAorUlBST1ZJREVTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JSRVBMQUNFU18ke1BOfS1kZXYgPSAiYWxzYS1kZXYiCitSQ09ORkxJQ1RTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwYzcyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZDI4YzY1NWJlM2FjNGZjYjgwMjQ1NTU5ODM4ODRmODMyZWUxODc4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1heSAyMDE1IDE1OjE3OjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFyY2FtLWF2OiBJbmNsdWRlIHN5cy9zZWxlY3QuaCBmb3IgZmRfc2V0IGRlZmluaXRpb24KKworZml4ZXMgYnVpbGQgZXJyb3JzIG9uIG5vbi1nbGliYyBiYXNlZCBzeXN0ZW1zCisKK2FyY2FtLWF2L2FyY2FtX2F2LmM6Mzg5OjI6IGVycm9yOiB1bmtub3duIHR5cGUgbmFtZSAnZmRfc2V0JworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgYXJjYW0tYXYvYXJjYW1fYXYuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYXJjYW0tYXYvYXJjYW1fYXYuYyBiL2FyY2FtLWF2L2FyY2FtX2F2LmMKK2luZGV4IDA0OTFmYzYuLmZmZjk2ZjkgMTAwNjQ0CistLS0gYS9hcmNhbS1hdi9hcmNhbV9hdi5jCisrKysgYi9hcmNhbS1hdi9hcmNhbV9hdi5jCitAQCAtMzEsNiArMzEsNyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaW5jbHVkZSA8c3lzL2lwYy5oPgorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zaG0uaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE5OWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1pbmNsdWRlLXNwZWV4ZHNwX3R5cGVzLmgtbm90LXNwZWV4X3R5cGVzLmgucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSBjYTQxZTk2YTQ5YTU2ODEyODM1NGY2NWY5MGE3NjlkZWJmNTQzNWYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDkgSnVsIDIwMTUgMTE6NTg6MTIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gaW5jbHVkZSBzcGVleGRzcF90eXBlcy5oLCBub3Qgc3BlZXhfdHlwZXMuaAorCitTcGVleGRzcCB3YXMgc2VwYXJhdGVkIGZyb20gc3BlZXggaW4gMS4ycmMyLiBzcGVleF90eXBlcy5oIGlzIG5vdAorc2hpcHBlZCBieSBzcGVleGRzcCwgc28gYWxzYS1wbHVnaW5zIHNob3VsZG4ndCB1c2UgdGhhdCBmaWxlLiBzcGVleGRzcAoraGFzIHNwZWV4ZHNwX3R5cGVzLmgsIHdoaWNoIGhhcyB0aGUgc2FtZSBjb250ZW50cyBhcyBzcGVleF90eXBlcy5oLgorCitzcGVleGRzcF90eXBlcy5oIGlzIGEgbmV3IGZpbGUgaW50cm9kdWNlZCBpbiAxLjJyYzIsIHNvIHRoaXMgY2hhbmdlCitidW1wcyB0aGUgbWluaW11bSBzdXBwb3J0ZWQgc3BlZXhkc3AgdmVyc2lvbi4gVGhlIHZlcnNpb24gY2hlY2sgaW4KK2NvbmZpZ3VyZS5hYyB3aWxsIGFjdHVhbGx5IGJyZWFrIGlmIHNwZWV4ZHNwIDEuMiBldmVyIGdldHMgcmVsZWFzZWQsCitiZWNhdXNlIHBrZy1jb25maWcgdGhpbmtzIHRoYXQgIjEuMiIgPCAiMS4ycmMyIiwgYnV0IEkgdGhpbmsgaXQncwordXNlZnVsIHRvIGZhaWwgaWYgdGhlIGluc3RhbGxlZCBzcGVleGRzcCB2ZXJzaW9uIGlzIDEuMnJjMSAod2hpY2ggSQorYmVsaWV2ZSBpcyB2ZXJ5IGNvbW1vbiBvbiBjdXJyZW50IGRpc3RyaWJ1dGlvbnMpLiBJZiBhIG5vbi1yYyB2ZXJzaW9uCitvZiBzcGVleGRzcCB3aWxsIGV2ZXIgZ2V0IHJlbGVhc2VkLCBJIGhvcGUgdmVyc2lvbiBudW1iZXIgMS4yIHdpbGwgYmUKK3NraXBwZWQgZm9yIHRoaXMgcmVhc29uLiAoQSBub24tcmMgdmVyc2lvbiBzZWVtcyB1bmxpa2VseSwgc2luY2UKKzEuMnJjMSB3YXMgcmVsZWFzZWQgeWVhcnMgYWdvLCBzbyBpdCdzIHByZXR0eSBsaWtlbHkgdGhhdCB0aGUgcHJvamVjdAoraXMgc3R1Y2sgb24gc28gY2FsbGVkICJyZWxlYXNlIGNhbmRpZGF0ZXMiIGZvcmV2ZXIuLi4pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIChodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5hbHNhLmRldmVsLzE0MTE0OSkKKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgfCAyICstCisgcHBoL2FyY2guaCAgICAgICAgICAgIHwgMiArLQorIHBwaC9zcGVleF9yZXNhbXBsZXIuaCB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTAyYTZkNy4uYzU1NGQyMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX1NVQlNUKEFWQ09ERUNfQ0ZMQUdTKQorIEFDX1NVQlNUKEFWQ09ERUNfTElCUykKKyBBQ19TVUJTVChBVkNPREVDX0hFQURFUikKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhzcGVleGRzcCwgW3NwZWV4ZHNwID49IDEuMl0sIFtIQVZFX1NQRUVYRFNQPSJ5ZXMiXSwgW0hBVkVfU1BFRVhEU1A9IiJdKQorK1BLR19DSEVDS19NT0RVTEVTKHNwZWV4ZHNwLCBbc3BlZXhkc3AgPj0gMS4ycmMyXSwgW0hBVkVfU1BFRVhEU1A9InllcyJdLCBbSEFWRV9TUEVFWERTUD0iIl0pCisgQU1fQ09ORElUSU9OQUwoSEFWRV9TUEVFWERTUCwgdGVzdCAiJEhBVkVfU1BFRVhEU1AiID0gInllcyIpCisgCisgQUNfQVJHX1dJVEgoW3NwZWV4XSwKK2RpZmYgLS1naXQgYS9wcGgvYXJjaC5oIGIvcHBoL2FyY2guaAoraW5kZXggZTJkNzMxYS4uYTA3ZDBkOSAxMDA2NDQKKy0tLSBhL3BwaC9hcmNoLmgKKysrKyBiL3BwaC9hcmNoLmgKK0BAIC0zNiw3ICszNiw3IEBACisgI2RlZmluZSBBUkNIX0gKKyAKKyAjaWZuZGVmIE9VVFNJREVfU1BFRVgKKy0jaW5jbHVkZSAic3BlZXgvc3BlZXhfdHlwZXMuaCIKKysjaW5jbHVkZSAic3BlZXgvc3BlZXhkc3BfdHlwZXMuaCIKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/ICgtKHgpKSA6ICh4KSkgICAgICAvKio8IEFic29sdXRlIGludGVnZXIgdmFsdWUuICovCitkaWZmIC0tZ2l0IGEvcHBoL3NwZWV4X3Jlc2FtcGxlci5oIGIvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCitpbmRleCBjNDRmYmNkLi5hYTg1YWJiIDEwMDY0NAorLS0tIGEvcHBoL3NwZWV4X3Jlc2FtcGxlci5oCisrKysgYi9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKK0BAIC04Miw3ICs4Miw3IEBACisgICAgICAgCisgI2Vsc2UgLyogT1VUU0lERV9TUEVFWCAqLworIAorLSNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorKyNpbmNsdWRlICJzcGVleC9zcGVleGRzcF90eXBlcy5oIgorIAorICNlbmRpZiAvKiBPVVRTSURFX1NQRUVYICovCisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMC4yOS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTI4NjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsMTA1IEBACitERVNDUklQVElPTiA9ICJBTFNBIFBsdWdpbnMiCitIT01FUEFHRSA9ICJodHRwOi8vYWxzYS1wcm9qZWN0Lm9yZyIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKKworIyBUaGUgcHJpbWFyeSBsaWNlbnNlIG9mIGFsc2EtcGx1Z2lucyBpcyBMR1BMdjIuMS4KKyMKKyMgbTQvYXR0cmlidXRlcy5tNCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisuIG00L2F0dHJpYnV0ZXMubTQgaXMgcGFydCBvZiB0aGUKKyMgYnVpbGQgc3lzdGVtLCBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGxpY2Vuc2luZyBvZiB0aGUgYnVpbGQgcmVzdWx0LgorIworIyBUaGUgc2FtcGxlcmF0ZSBwbHVnaW4gc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIrIHRvIGJlIGNvbnNpc3RlbnQKKyMgd2l0aCB0aGUgbGlic2FtcGxlcmF0ZSBsaWNlbnNlLgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgICAgICBmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQgXAorICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgZmlsZTovL200L2F0dHJpYnV0ZXMubTQ7ZW5kbGluZT0zMzttZDU9YjI1OTU4ZGE0NGMwMjIzMWUzNjQxZjFiY2NlZjUzZWIgXAorICAgICAgICBmaWxlOi8vcmF0ZS9yYXRlX3NhbXBsZXJhdGUuYztlbmRsaW5lPTE5O21kNT1mM2QzY2UwYjE4OTg0NmE0ODY1MTdkOTdhODU0YjI3NiBcCisiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3BsdWdpbnMvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiYTY2Nzk3YjQ0NzFlM2NiZTk2NTc1MjA3YmZiZTI1MmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzI1ZDg1Y2FjMjg1ZjYzMmI4M2UwMTkxYWUzZjM0OGJhZDAzYzFmMDA3YjkzNzA0MmYxNjRhYmI4MWVhNjUzMiIKKworREVQRU5EUyArPSAiYWxzYS1saWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiXAorICAgICAgICBzYW1wbGVyYXRlIFwKKyAgICAgICAgc3BlZXhkc3AgXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorIgorUEFDS0FHRUNPTkZJR1thdmNvZGVjXSA9ICItLWVuYWJsZS1hdmNvZGVjLC0tZGlzYWJsZS1hdmNvZGVjLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW21hZW1vLXBsdWdpbl0gPSAiLS1lbmFibGUtbWFlbW8tcGx1Z2luLC0tZGlzYWJsZS1tYWVtby1wbHVnaW4iCitQQUNLQUdFQ09ORklHW21hZW1vLXJlc291cmNlLW1hbmFnZXJdID0gIi0tZW5hYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsLS1kaXNhYmxlLW1hZW1vLXJlc291cmNlLW1hbmFnZXIsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbcHVsc2VhdWRpb10gPSAiLS1lbmFibGUtcHVsc2VhdWRpbywtLWRpc2FibGUtcHVsc2VhdWRpbyxwdWxzZWF1ZGlvIgorUEFDS0FHRUNPTkZJR1tzYW1wbGVyYXRlXSA9ICItLWVuYWJsZS1zYW1wbGVyYXRlLC0tZGlzYWJsZS1zYW1wbGVyYXRlLGxpYnNhbXBsZXJhdGUwIgorUEFDS0FHRUNPTkZJR1tzcGVleGRzcF0gPSAiLS13aXRoLXNwZWV4PWxpYiwtLXdpdGgtc3BlZXg9bm8sc3BlZXhkc3AiCisKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ2Fsc2EtcGx1Z2lucy1wdWxzZWF1ZGlvLWNvbmYnLCAnJywgZCl9IgorCitQQUNLQUdFU19EWU5BTUlDID0gIl5saWJhc291bmQtbW9kdWxlLS4qIgorCisjIFRoZSBhbHNhLXBsdWdpbnMgcGFja2FnZSBkb2Vzbid0IGl0c2VsZiBjb250YWluIGFueXRoaW5nLCBpdCBqdXN0IGRlcGVuZHMgb24KKyMgYWxsIGJ1aWx0IHBsdWdpbnMuCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAke0R9JHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEKKworCSMgV2UgdXNlIHRoZSBleGFtcGxlIGFzIGlzLCBzbyBqdXN0IGRyb3AgdGhlIC5leGFtcGxlIHN1ZmZpeC4KKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwdWxzZWF1ZGlvJywgJ3llcycsICdubycsIGQpfSIgPSAieWVzIiBdOyB0aGVuCisJCW12ICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYuZXhhbXBsZSAke0R9JHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mCisJZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgcGx1Z2luZGlyID0gYmIuZGF0YS5leHBhbmQoJyR7bGliZGlyfS9hbHNhLWxpYi8nLCBkKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXmxpYmFzb3VuZF9tb2R1bGVfKC4qKVwuc28kJywgJ2xpYmFzb3VuZC1tb2R1bGUtJXMnLCAnQWxzYSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJykpCisgICAgZC5zZXRWYXIoIlJERVBFTkRTX2Fsc2EtcGx1Z2lucyIsIHBhY2thZ2VzKQorfQorCisjIFRoZSByYXRlIHBsdWdpbnMgY3JlYXRlIHNvbWUgc3ltbGlua3MuIEZvciBleGFtcGxlLCB0aGUgc2FtcGxlcmF0ZSBwbHVnaW4KKyMgY3JlYXRlcyB0aGVzZSBsaW5rcyB0byB0aGUgbWFpbiBwbHVnaW4gZmlsZToKKyMKKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9iZXN0LnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbGluZWFyLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfbWVkaXVtLnNvCisjICAgbGliYXNvdW5kX21vZHVsZV9yYXRlX3NhbXBsZXJhdGVfb3JkZXIuc28KKyMKKyMgVGhlIG90aGVyIHJhdGUgcGx1Z2lucyBjcmVhdGUgc2ltaWxhciBsaW5rcy4gV2UgaGF2ZSB0byBhZGQgdGhlIGxpbmtzIHRvCisjIEZJTEVTIG1hbnVhbGx5LCBiZWNhdXNlIGRvX3NwbGl0X3BhY2thZ2VzKCkgc2tpcHMgdGhlIGxpbmtzICh3aGljaCBpcyBnb29kLAorIyBiZWNhdXNlIHdlIHdvdWxkbid0IHdhbnQgZG9fc3BsaXRfcGFja2FnZXMoKSB0byBjcmVhdGUgc2VwYXJhdGUgcGFja2FnZXMgZm9yCisjIHRoZSBzeW1saW5rcykuCisjCisjIFRoZSBzeW1saW5rcyBjYXVzZSBRQSBlcnJvcnMsIGJlY2F1c2UgdXN1YWxseSBpdCdzIGEgYnVnIGlmIGEgbm9uCisjIC1kZXYvLWRiZy8tbmF0aXZlc2RrIHBhY2thZ2UgY29udGFpbnMgbGlua3MgdG8gLnNvIGZpbGVzLCBidXQgaW4gdGhpcyBjYXNlCisjIHRoZSBlcnJvcnMgYXJlIGZhbHNlIHBvc2l0aXZlcywgc28gd2UgZGlzYWJsZSB0aGUgUUEgY2hlY2tzLgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8qcmF0ZV9sYXZjcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NhbXBsZXJhdGVfKi5zbyIKK0ZJTEVTXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX3NwZWV4cmF0ZV8qLnNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtbGF2Y3JhdGUgPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc2FtcGxlcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zcGVleHJhdGUgPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hbHNhLWxpYi8uZGVidWciCisKKyMgNTAtcHVsc2VhdWRpby5jb25mIGRlZmluZXMgYSBkZXZpY2UgbmFtZWQgInB1bHNlIiB0aGF0IGFwcGxpY2F0aW9ucyBjYW4gdXNlCisjIGlmIHRoZXkgZXhwbGljaXRseSB3YW50IHRvIHVzZSB0aGUgUHVsc2VBdWRpbyBwbHVnaW4uCisjIDk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIGNvbmZpZ3VyZXMgdGhlICJkZWZhdWx0IiBkZXZpY2UgdG8gdXNlIHRoZQorIyBQdWxzZUF1ZGlvIHBsdWdpbi4KK0ZJTEVTXyR7UE59LXB1bHNlYXVkaW8tY29uZiArPSAiXAorICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvNTAtcHVsc2VhdWRpby5jb25mIFwKKyAgICAgICAgJHtkYXRhZGlyfS9hbHNhL2Fsc2EuY29uZi5kLzk5LXB1bHNlYXVkaW8tZGVmYXVsdC5jb25mIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY29uZi1wdWxzZSBcCisgICAgICAgIGxpYmFzb3VuZC1tb2R1bGUtY3RsLXB1bHNlIFwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1wY20tcHVsc2UgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDlhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAxZTU5MjZkZjc0YTM1ZmUyY2Q5MGJjNTlmNTI2NGE4NzE1Yzk0MDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwODoxNjo1OSArMDAwMAorU3ViamVjdDogW1BBVENIXSBhczEwazE6IE1ha2Ugb3V0cHV0X3RyYW1fbGluZSgpIHN0YXRpYyBpbmxpbmUKKworVGhlIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGluIGFueSBvdGhlciBmaWxlLCBpdHMgYmV0dGVyIHRvIG1ha2UgaXQgc3RhdGljCitpbmxpbmUgc28gY29tcGlsZXIgaGFzIGEgYmV0dGVyIGNoYW5jZSBvZiBvcHRpbWl6aW5nIGhlcmUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBhczEwazEvYXMxMGsxLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9hczEwazEvYXMxMGsxLmMgYi9hczEwazEvYXMxMGsxLmMKK2luZGV4IDk2YWYwYzMuLmQwNzY2ZmQgMTAwNjQ0CistLS0gYS9hczEwazEvYXMxMGsxLmMKKysrKyBiL2FzMTBrMS9hczEwazEuYworQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIGFzX2V4aXQoY29uc3QgY2hhciAqbWVzc2FnZSkKKyAJZXhpdCgxKTsKKyB9CisgCistaW5saW5lIHZvaWQgb3V0cHV0X3RyYW1fbGluZSggc3RydWN0IGxpc3RfaGVhZCAqbGluZV9oZWFkLCBpbnQgdHlwZSl7Cisrc3RhdGljIGlubGluZSB2b2lkIG91dHB1dF90cmFtX2xpbmUoIHN0cnVjdCBsaXN0X2hlYWQgKmxpbmVfaGVhZCwgaW50IHR5cGUpeworICAgICAgICAgCisgICAgICAgICBzdHJ1Y3QgdHJhbSAqdHJhbV9zeW07CisgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2F1dG90b29scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzOTFkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9hdXRvdG9vbHMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorQWRkIHBhcmFtZXRlcnMgdG8gYXV0b3JlY29uZiB0byBzdXBwb3J0IGNyb3NzIGNvbXBpbGUuCitSZW1vdmUgc29tZSBzdWItY29tcG9uZW50cyB3aGljaCBuZWVkcyBmdXJ0aGVyIHJlY2lwZSBzdXBwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLXJ1TiBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL2xkMTBrMS9naXRjb21waWxlIGFsc2EtdG9vbHMtMS4wLjI0LjEvbGQxMGsxL2dpdGNvbXBpbGUKKy0tLSBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL2xkMTBrMS9naXRjb21waWxlCTIwMTEtMDctMDYgMTE6Mjc6NDAuMjI3NjY1MDAyICswODAwCisrKysgYWxzYS10b29scy0xLjAuMjQuMS9sZDEwazEvZ2l0Y29tcGlsZQkyMDExLTA3LTE0IDEzOjI2OjE4LjAxNzY2NTAwNCArMDgwMAorQEAgLTEsNiArMSw2IEBACisgIyEvYmluL2Jhc2gKKyAKKy1hdXRvcmVjb25mIC1maSB8fCBleGl0IDEKKythdXRvcmVjb25mICRBQ0xPQ0FMX0ZMQUdTIC1maSB8fCBleGl0IDEKKyBleHBvcnQgQ0ZMQUdTPSctTzIgLVdhbGwgLXBpcGUgLWcnCisgZWNobyAiQ0ZMQUdTPSRDRkxBR1MiCisgZWNobyAiLi9jb25maWd1cmUgJEAiCitkaWZmIC1ydU4gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9NYWtlZmlsZSBhbHNhLXRvb2xzLTEuMC4yNC4xL01ha2VmaWxlCistLS0gYWxzYS10b29scy0xLjAuMjQuMS1vcmlnLy9NYWtlZmlsZQkyMDExLTA3LTA2IDExOjI3OjQwLjIwNzY2NTAwMCArMDgwMAorKysrIGFsc2EtdG9vbHMtMS4wLjI0LjEvTWFrZWZpbGUJMjAxMS0wNy0xNCAxNTowODowOC44Nzc2NjUwMDkgKzA4MDAKK0BAIC0xLDggKzEsOCBAQAorIFZFUlNJT04gPSAxLjAuMjkKKyBUT1AgPSAuCistU1VCRElSUyA9IGFzMTBrMSBlbnZ5MjRjb250cm9sIGhkc3Bsb2FkZXIgaGRzcGNvbmYgaGRzcG1peGVyIFwKKytTVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgXAorIAkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBybWVkaWdpY29udHJvbCBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCistCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBsZDEwazEgcWxvMTBrMSBcCisrCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBcCisgCSAgaHdtaXh2b2x1bWUgaGRhamFja3JldGFzayBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisgCisgYWxsOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2dpdGNvbXBpbGVfaGRhamFja3NlbnNldGVzdCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTgzMjhiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL2Jhc2gKKworYWNsb2NhbCAkQUNMT0NBTF9GTEFHUyB8fCBleGl0IDEKK2F1dG9tYWtlIC0tZm9yZWlnbiAtLWFkZC1taXNzaW5nIHx8IGV4aXQgMQorYXV0b2NvbmYgfHwgZXhpdCAxCitleHBvcnQgQ0ZMQUdTPSctTzIgLVdhbGwgLXBpcGUgLWcnCitlY2hvICJDRkxBR1M9JENGTEFHUyIKK2VjaG8gIi4vY29uZmlndXJlICRAIgorLi9jb25maWd1cmUgJEAgfHwgZXhpdCAxCit1bnNldCBDRkxBR1MKK2lmIFsgLXogIiRHSVRDT01QSUxFX05PX01BS0UiIF07IHRoZW4KKyAgbWFrZSB8fCBleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvbWFrZWZpbGVfbm9fZ3RrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTU3NjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL21ha2VmaWxlX25vX2d0ay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitSZW1vdmUgc29tZSBzdWItY29tcG9uZW50cyB3aGljaCBuZWVkIGd0aysuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9nZXJpbyBOdW5lcyA8cm9udW5lc0BnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorCitVcGRhdGUgcGF0Y2ggZm9yIGFsc2EtdG9vbHMgMS4wLjI5CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggMjQ1N2ExYy4uNzIzNDZkOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsOSArMSw5IEBACisgVkVSU0lPTiA9IDEuMC4yOQorIFRPUCA9IC4KKy1TVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgXAorLQkgIG1peGFydGxvYWRlciBwY3hocmxvYWRlciBybWVkaWdpY29udHJvbCBzYjE2X2NzcCBzZXEgc3NjYXBlX2N0bCBcCistCSAgdXM0Mjhjb250cm9sIHVzeDJ5bG9hZGVyIHZ4bG9hZGVyIGVjaG9taXhlciBcCistCSAgaHdtaXh2b2x1bWUgaGRhamFja3JldGFzayBoZGEtdmVyYiBoZGFqYWNrc2Vuc2V0ZXN0CisrU1VCRElSUyA9IGFzMTBrMSBcCisrCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKysJICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgXAorKwkgIGh3bWl4dm9sdW1lIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKyAKKyBhbGw6CisgCUBmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4wLjI5LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGYzOTZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzXzEuMC4yOS5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIkFkdmFuY2VkIHRvb2xzIGZvciBjZXJ0YWluIEFMU0Egc291bmQgY2FyZCBkcml2ZXJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5hbHNhLXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvbG9naW5fcGFnZS5waHAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyKyIKK0RFUEVORFMgPSAiYWxzYS1saWIgbmN1cnNlcyBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaGRzcGxvYWRlci9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sZDEwazEvQ09QWUlORy5MSUI7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi90b29scy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJycsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9tYWtlZmlsZV9ub19ndGsucGF0Y2gnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXMxMGsxLU1ha2Utb3V0cHV0X3RyYW1fbGluZS1zdGF0aWMtaW5saW5lLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMzM5YTNjZDI0Zjc0OGM5ZDAwN2JkZmYwZTk4Nzc1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NGFiZjBhYjVhNzNmMDcxMGM3MGQ0ZmIzZGMxMDAzYWY1YmFlMmQyZWQ3MjFkNTlkMjQ1YjQxYWQwZjJmYmQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK0VYVFJBX09FTUFLRSArPSAiR0lUQ09NUElMRV9BUkdTPSctLWhvc3Q9JHtIT1NUX1NZU30gLS1idWlsZD0ke0JVSUxEX1NZU30gLS10YXJnZXQ9JHtUQVJHRVRfU1lTfSAtLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLS1wcmVmaXg9JHtwcmVmaXh9JyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2d0aysnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tndGsrXSA9ICIsLGd0aysgZ3RrKzMsIgorCisjIGNvbmZpZ3VyZS5hYy8uaW4gZG9lc24ndCBleGlzdCBzbyBmb3JjZSBjb3B5CitBVVRPVE9PTFNfQ09QWUFDTE9DQUwgPSAiMSIKKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgICAjQXV0b21ha2UgZGlyIGlzIG5vdCBjb3JyZWN0bHkgZGV0ZWN0ZWQgaW4gY3Jvc3MgY29tcGlsYXRpb24gY2FzZQorICAgIGV4cG9ydCBBVVRPTUFLRV9ESVI9IiQoYXV0b21ha2UgLS1wcmludC1saWJkaXIpIgorICAgIGV4cG9ydCBBQ0xPQ0FMX0ZMQUdTPSItLXN5c3RlbS1hY2Rpcj0ke0FDTE9DQUxESVJ9LyIKKworICAgIGNwICR7V09SS0RJUn0vZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0ICR7U30vaGRhamFja3NlbnNldGVzdC9naXRjb21waWxlCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xkMTBrMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMC4yOS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy1zY3JpcHRzXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThmOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgYWxzYS11dGlsc18ke1BWfS5iYgorCitTVU1NQVJZID0gIlNoZWxsIHNjcmlwdHMgdGhhdCBzaG93IGhlbHAgaW5mbyBhbmQgY3JlYXRlIEFMU0EgY29uZmlndXJhdGlvbiBmaWxlcyIKK1BST1ZJREVTID0gImFsc2EtdXRpbHMtYWxzYWNvbmYiCisKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2Fsc2EtdXRpbHM6IgorCitQQUNLQUdFUyA9ICIke1BOfSIKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgorCitGSUxFU18ke1BOfSA9ICIke3NiaW5kaXJ9L2Fsc2Fjb25mIFwKKyAgICAgICAgICAgICAgICR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoIFwKKyAgICAgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vYWxzYS11dGlscy0ke1BWfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYWxzYWNvbmYvYWxzYWNvbmYgJHtEfSR7c2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vYWxzYS1pbmZvL2Fsc2EtaW5mby5zaCAke0R9JHtzYmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OWRkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gNDNhNTZmYTM2YTEyZjA5Y2NkNzhiM2NmNWU2YWUxOTdmY2FiNTAxZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBGcmksIDI5IEF1ZyAyMDE0IDE4OjU4OjU2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFsc2FjdGw6IGRvbid0IGxldCBzeXN0ZW1kIHVuaXQgcmVzdG9yZSB0aGUgdm9sdW1lIHdoZW4KKyBhc291bmQuc3RhdGUgaXMgbWlzc2luZworCitUaGlzIGF2b2lkcyBhbiBlcnJvciBvbiBib290dXAKKworRmlsZWQgYXMgaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL3ZpZXcucGhwP2lkPTU0NTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorLS0tCisgYWxzYWN0bC9NYWtlZmlsZS5hbSAgICAgICAgICAgICB8IDcgKysrKy0tLQorIGFsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4gfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Fsc2FjdGwvTWFrZWZpbGUuYW0gYi9hbHNhY3RsL01ha2VmaWxlLmFtCitpbmRleCA0N2YwNmU5Li5iNzI4YzA2IDEwMDY0NAorLS0tIGEvYWxzYWN0bC9NYWtlZmlsZS5hbQorKysrIGIvYWxzYWN0bC9NYWtlZmlsZS5hbQorQEAgLTQzLDkgKzQzLDEwIEBAIGluc3RhbGwtZGF0YS1ob29rOgorIGVuZGlmCisgCisgZWRpdCA9IFwKKy0JJChTRUQpIC1yIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCistCQkgIC1lICdzLEBteWRhdGFkaXJcQCwkKG15ZGF0YWRpciksZycgXAorLQkJICAtZSAncyxAZGFlbW9uc3dpdGNoXEAsJChBTFNBQ1RMX0RBRU1PTlNXSVRDSCksZycgXAorKwkkKFNFRCkgLWUgJ3MsQGxvY2Fsc3RhdGVkaXJcQCwkKGxvY2Fsc3RhdGVkaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBzYmluZGlyXEAsJChzYmluZGlyKSxnJyBcCisrCSAgICAgICAtZSAncyxAbXlkYXRhZGlyXEAsJChteWRhdGFkaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBkYWVtb25zd2l0Y2hcQCwkKEFMU0FDVExfREFFTU9OU1dJVENIKSxnJyBcCisgCQkJCQkJCTwgJDwgPiAkQCB8fCBybSAkQAorIAorIGFsc2Etc3RhdGUuc2VydmljZTogYWxzYS1zdGF0ZS5zZXJ2aWNlLmluCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbiBiL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KK2luZGV4IDI0NWE0MzkuLmIwMTc4NTQgMTAwNjQ0CistLS0gYS9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCisrKysgYi9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluCitAQCAtMTAsNiArMTAsNyBAQCBEZWZhdWx0RGVwZW5kZW5jaWVzPW5vCisgQWZ0ZXI9YWxzYS1zdGF0ZS5zZXJ2aWNlCisgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIENvbmZsaWN0cz1zaHV0ZG93bi50YXJnZXQKKytDb25kaXRpb25QYXRoRXhpc3RzPUBsb2NhbHN0YXRlZGlyQC9saWIvYWxzYS9hc291bmQuc3RhdGUKKyAKKyBbU2VydmljZV0KKyBUeXBlPW9uZXNob3QKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fsc2EtdXRpbHMtYXBsYXktaW50ZXJydXB0LXNpZ25hbC1oYW5kbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmMDA0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2FwbGF5L2FyZWNvcmQgKGFsc2EtdXRpbHMgdjEuMC4yOCkgY2Fubm90IGludGVycnVwdCBzdHJlYW1pbmcKK3ZpYSBDVFJMLUMuIEZpeGVkIHRoZSBpc3N1ZSBieSByZXZlcnRpbmcgYnVnZ3kgcGF0Y2hlcyBhbmQKK3Byb3Blcmx5IGhhbmRsaW5nICdpbl9hYm9ydGluZycgZmxhZyBpbiBhcHByb3ByaWF0ZSBmdW5jdGlvbnMuCisKK1NpZ25lZC1vZmYtYnk6IEFuYW50IEFncmF3YWwgPEFuYW50X0FncmF3YWxAbWVudG9yLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxtaWtoYWlsX2R1cm5ldkBtZW50b3IuY29tPgorCistLS0gYS9hcGxheS9hcGxheS5jCTIwMTQtMDUtMTkgMTY6MjU6MTQuMDAwMDAwMDAwICswNTMwCisrKysgYi9hcGxheS9hcGxheS5jCTIwMTQtMDUtMjAgMTU6MTc6MTQuMzY0ODIzMDA3ICswNTMwCitAQCAtMzkyLDE0ICszOTIsMjIgQEAKKyAJCXB1dGNoYXIoJ1xuJyk7CisgCWlmICghcXVpZXRfbW9kZSkKKyAJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGVkIGJ5IHNpZ25hbCAlcy4uLlxuIiksIHN0cnNpZ25hbChzaWcpKTsKKy0JaWYgKGhhbmRsZSkKKysJaWYgKHN0cmVhbSA9PSBTTkRfUENNX1NUUkVBTV9DQVBUVVJFKSB7CisrCQlpZiAoZm10X3JlY190YWJsZVtmaWxlX3R5cGVdLmVuZCkgeworKwkJCWZtdF9yZWNfdGFibGVbZmlsZV90eXBlXS5lbmQoZmQpOworKwkJCWZkID0gLTE7CisrCQl9CisrCQlzdHJlYW0gPSAtMTsKKysJfQorKwlpZiAoZmQgPiAxKSB7CisrCQljbG9zZShmZCk7CisrCQlmZCA9IC0xOworKwl9CisrCWlmIChoYW5kbGUgJiYgc2lnICE9IFNJR0FCUlQpIHsKKyAJCXNuZF9wY21fYWJvcnQoaGFuZGxlKTsKKy0JaWYgKHNpZyA9PSBTSUdBQlJUKSB7CistCQkvKiBkbyBub3QgY2FsbCBzbmRfcGNtX2Nsb3NlKCkgYW5kIGFib3J0IGltbWVkaWF0ZWx5ICovCisgCQloYW5kbGUgPSBOVUxMOworLQkJcHJnX2V4aXQoRVhJVF9GQUlMVVJFKTsKKyAJfQorLQlzaWduYWwoc2lnLCBzaWduYWxfaGFuZGxlcik7CisrCXByZ19leGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorIC8qIGNhbGwgb24gU0lHVVNSMSBzaWduYWwuICovCitAQCAtMjA5Niw3ICsyMTA0LDcgQEAKKyAJc3NpemVfdCByZXN1bHQgPSBjb3VudCwgcjsKKyAJc2l6ZV90IHNpemU7CisgCistCXdoaWxlIChjb3VudCA+IDApIHsKKysJd2hpbGUgKGNvdW50ID4gMCAmJiAhaW5fYWJvcnRpbmcpIHsKKyAJCXNpemUgPSBjb3VudDsKKyAJCWlmIChzaXplID4gY2h1bmtfYnl0ZXMgLSBidWZmZXJfcG9zKQorIAkJCXNpemUgPSBjaHVua19ieXRlcyAtIGJ1ZmZlcl9wb3M7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3MjgzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitbUEFUQ0hdIGFzc3VtZSBzdG9yaW5nIGlzIHN1Y2Nlc3MgaWYgbm90IHNvdW5kIGNhcmQgZGV2aWNlCisKK1Vwc3RyZWFtLVN0YXR1ZTogUGVuZGluZworCitTeXN0ZW1kIHdpbGwgcmVwb3J0IGZhaWx1cmUgd2hlbiBydW4gYWxzYS0qLCBpZiB0aGUgbWFjaGluZSBoYXMgbm90IHRoZQorc291bmQgY2FyZC4gVG8gdm9pZCB0aGlzIGFubm95ZWQgbWVzc2FnZSwgYWxzYS1yZXN0b3JlL2Fsc2Etc3RhdGUgaWdub3JlCithbGwgdGhlIGV4aXQgY29kZXMgYnkgcHJlZml4aW5nICItIiBpbiBFeGVjU3RhcnQsIGxpa2U6CisKKyAgIGFsc2EtdXRpbHMtMS4wLjI5JCBncmVwICI9LSIgLi8gLXJ8Z3JlcCBzZXJ2aWNlLmluCisgICAuL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW46RXhlY1N0YXJ0PS1Ac2JpbmRpckAvYWxzYWN0bCByZXN0b3JlCisgICAuL2Fsc2FjdGwvYWxzYS1zdGF0ZS5zZXJ2aWNlLmluOkV4ZWNTdGFydD0tQHNiaW5kaXJAL2Fsc2FjdGwgLXMgLW4gMTkgLWMgcmRhZW1vbgorICAgLi9hbHNhY3RsL2Fsc2Etc3RhdGUuc2VydmljZS5pbjpFeGVjU3RvcD0tQHNiaW5kaXJAL2Fsc2FjdGwgLXMga2lsbCBzYXZlX2FuZF9xdWl0CisgICBsc2EtdXRpbHMtMS4wLjI5JAorCitCdXQgYWxzYS1zdG9yZS5zZXJ2aWNlLmluIGlzIG1pc3NpbmcsIGFuZCBiZXR0ZXIgc29sdXRpb24gaXMgdG8gaWdub3JlCit0aGUgZXhpdCBjb2RlIDE5IHdoaWNoIG1lYW5zIG5vdCBzb3VuZCBjYXJkIGRldmljZSwgbm90IGFsbCBleGl0IGNvZGUKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluIGIvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KK2luZGV4IGYxYTU2YmIuLjY4Y2E1MjkgMTAwNjQ0CistLS0gYS9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgorKysrIGIvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4KK0BAIC0xMywzICsxMyw0IEBAIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKKyBUeXBlPW9uZXNob3QKKyBFeGVjU3RhcnQ9QHNiaW5kaXJAL2Fsc2FjdGwgc3RvcmUKKyBTdGFuZGFyZE91dHB1dD1zeXNsb2cKKytTdWNjZXNzRXhpdFN0YXR1cz0wIDE5CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjAuMjkuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmU0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsOTcgQEAKK1NVTU1BUlkgPSAiQUxTQSBzb3VuZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYWxzYWN0bC91dGlscy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PWZlOTUyNmIwNTVlMjQ2YjU1NTg4MDlhNWFlMjVjMGI5IgorREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGxpYnNhbXBsZXJhdGUwIgorCitQQUNLQUdFQ09ORklHID8/PSAidWRldiIKK1BBQ0tBR0VDT05GSUdbdWRldl0gPSAiLS13aXRoLXVkZXYtcnVsZXMtZGlyPWBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YC9ydWxlcy5kLCx1ZGV2IgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS1lbmFibGUteG1sdG8sIC0tZGlzYWJsZS14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvdXRpbHMvYWxzYS11dGlscy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbHNhLXV0aWxzLWFwbGF5LWludGVycnVwdC1zaWduYWwtaGFuZGxpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXNzdW1lLXN0b3JpbmctaXMtc3VjY2Vzcy1pZi1ub3Qtc291bmQtY2FyZC1kZXZpY2UucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiMjg5YmY4NzRjNGM5YTYzZjRiMzk3MzA5M2RkNDA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjAwNThmM2UxNDQ4M2NlZDVkZTkxOWRkNDczZjkzOTMyMDU5NDU0NTMwYTliN2VmOTdkY2FiZDY4MzNlOWIiCisKKyMgbGF6eSBoYWNrLiBuZWVkcyBwcm9wZXIgZml4aW5nIGluIGdldHRleHQubTQsIHNlZQorIyBodHRwOi8vYnVncy5vcGVuZW1iZWRkZWQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ4CisjIHBsZWFzZSBjbG9zZSBidWcgYW5kIHJlbW92ZSB0aGlzIGNvbW1lbnQgd2hlbiBwcm9wZXJseSBmaXhlZAorIworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLW5scyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyBUaGlzIGFyZSBhbGwgcGFja2FnZXMgdGhhdCB3ZSBuZWVkIHRvIG1ha2UuIEFsc28sIHRoZSBub3cgZW1wdHkgYWxzYS11dGlscworIyBpcGsgZGVwZW5kcyBvbiB0aGVtLgorCitBTFNBX1VUSUxTX1BLR1MgPSAiXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLW1pZGkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXBsYXkgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFjb25uZWN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWllY3NldCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1zcGVha2VydGVzdCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hc2VxbmV0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFkdW1wIFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWxvb3AgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYXVjbSBcCisgICAgICAgICAgICAiCisKK1BBQ0tBR0VTICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCitSREVQRU5EU18ke1BOfSArPSAiJHtBTFNBX1VUSUxTX1BLR1N9IgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19hbHNhLXV0aWxzLWFwbGF5ICAgICAgID0gIiR7YmluZGlyfS9hcGxheSAke2JpbmRpcn0vYXJlY29yZCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgPSAiJHtiaW5kaXJ9L2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYW1peGVyICAgPSAiJHtiaW5kaXJ9L2Fsc2FtaXhlciIKK0ZJTEVTX2Fsc2EtdXRpbHMtc3BlYWtlcnRlc3QgPSAiJHtiaW5kaXJ9L3NwZWFrZXItdGVzdCAke2RhdGFkaXJ9L3NvdW5kcy9hbHNhLyAke2RhdGFkaXJ9L2Fsc2Evc3BlYWtlci10ZXN0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtbWlkaSAgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5bWlkaSAke2JpbmRpcn0vYXJlY29yZG1pZGkgJHtiaW5kaXJ9L2FtaWRpIgorRklMRVNfYWxzYS11dGlscy1hY29ubmVjdCAgICA9ICIke2JpbmRpcn0vYWNvbm5lY3QiCitGSUxFU19hbHNhLXV0aWxzLWFzZXFuZXQgICAgID0gIiR7YmluZGlyfS9hc2VxbmV0IgorRklMRVNfYWxzYS11dGlscy1pZWNzZXQgICAgICA9ICIke2JpbmRpcn0vaWVjc2V0IgorRklMRVNfYWxzYS11dGlscy1hbHNhY3RsICAgICA9ICIke3NiaW5kaXJ9L2Fsc2FjdGwgKi91ZGV2L3J1bGVzLmQgKi8qL3VkZXYvcnVsZXMuZCAke3N5c3RlbWRfdW5pdGRpcn0gJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYSAke2RhdGFkaXJ9L2Fsc2EvaW5pdC8iCitGSUxFU19hbHNhLXV0aWxzLWFzZXFkdW1wICAgID0gIiR7YmluZGlyfS9hc2VxZHVtcCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYWxzYWxvb3AgICAgPSAiJHtiaW5kaXJ9L2Fsc2Fsb29wIgorRklMRVNfYWxzYS11dGlscy1hbHNhdWNtICAgICA9ICIke2JpbmRpcn0vYWxzYXVjbSIKKworCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgID0gIlBsYXkgKGFuZCByZWNvcmQpIHNvdW5kIGZpbGVzIHVzaW5nIEFMU0EiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYW1peGVyICAgICAgID0gIkNvbW1hbmQtbGluZSBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhbWl4ZXIgICAgPSAibmN1cnNlcy1iYXNlZCBjb250cm9sIGZvciBBTFNBIG1peGVyIGFuZCBzZXR0aW5ncyIKK1NVTU1BUllfYWxzYS11dGlscy1zcGVha2VydGVzdCAgPSAiQUxTQSBzdXJyb3VuZCBzcGVha2VyIHRlc3QgdXRpbGl0eSIKK1NVTU1BUllfYWxzYS11dGlscy1taWRpICAgICAgICAgPSAiTWlzY2VsbGFuZW91cyBNSURJIHV0aWxpdGllcyBmb3IgQUxTQSIKK1NVTU1BUllfYWxzYS11dGlscy1hY29ubmVjdCAgICAgPSAiQUxTQSBzZXF1ZW5jZXIgY29ubmVjdGlvbiBtYW5hZ2VyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFzZXFuZXQgICAgICA9ICJOZXR3b3JrIGNsaWVudC9zZXJ2ZXIgZm9yIEFMU0Egc2VxdWVuY2VyIgorU1VNTUFSWV9hbHNhLXV0aWxzLWllY3NldCAgICAgICA9ICJBTFNBIHV0aWxpdHkgZm9yIHNldHRpbmcvc2hvd2luZyBJRUM5NTggKFMvUERJRikgc3RhdHVzIGJpdHMiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYWxzYWN0bCAgICAgID0gIlNhdmVzL3Jlc3RvcmVzIEFMU0Etc2V0dGluZ3MgaW4gL2V0Yy9hc291bmQuc3RhdGUiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgID0gIlNob3dzIHRoZSBldmVudHMgcmVjZWl2ZWQgYXQgYW4gQUxTQSBzZXF1ZW5jZXIgcG9ydCIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhbG9vcCAgICAgPSAiQUxTQSBQQ00gbG9vcGJhY2sgdXRpbGl0eSIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhdWNtICAgICAgPSAiQUxTQSBVc2UgQ2FzZSBNYW5hZ2VyIgorCitSUkVDT01NRU5EU19hbHNhLXV0aWxzLWFsc2FjdGwgPSAiYWxzYS1zdGF0ZXMiCisKK0FMTE9XX0VNUFRZX2Fsc2EtdXRpbHMgPSAiMSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBXZSBkb24ndCBzaGlwIHRoaXMgaGVyZSBiZWNhdXNlIGl0IHJlcXVpcmVzIGEgZGVwZW5kZW5jeSBvbiBiYXNoLgorCSMgU2VlIGFsc2EtdXRpbHMtc2NyaXB0c18ke1BWfS5iYgorCXJtICR7RH0ke3NiaW5kaXJ9L2Fsc2Fjb25mCisJcm0gJHtEfSR7c2JpbmRpcn0vYWxzYS1pbmZvLnNoCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd1ZGV2JywgJ2ZhbHNlJywgJ3RydWUnLCBkKX07IHRoZW4KKwkgICAjIFRoaXMgaXMgd2hlcmUgYWxzYS11dGlscyB3aWxsIGluc3RhbGwgaXRzIHJ1bGVzIGlmIHdlIGRvbid0IHRlbGwgaXQgYW55dGhpbmcgZWxzZS4KKwkgICBybSAtcmYgJHtEfS9saWIvdWRldgorCSAgIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0vbGliCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZsYWMvZmxhY18xLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2ZsYWMvZmxhY18xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjUyNzFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiRnJlZSBMb3NzbGVzcyBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIkZMQUMgc3RhbmRzIGZvciBGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjLCBhIGxvc3NsZXNzIGF1ZGlvIGNvbXByZXNzaW9uIGZvcm1hdC4iCitIT01FUEFHRSA9ICJodHRwczovL3hpcGgub3JnL2ZsYWMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvZmxhYy9idWdzLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR0ZETC0xLjIgJiBHUEx2MisgJiBMR1BMdjIuMSsgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkZETDttZDU9YWQxNDE5ZWNjNTZlMDYwZWNjZjgxODRhODdjNDI4NWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL01ha2VmaWxlLmFtO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTBhODUzYjgxZDlkNDNkOGFhZDNiNTNiMDVjZmNjMzdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZmxhYy9tYWluLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9ZDAzYTc2NjU1OGQyMzNmOWNjM2FjNWRmYWZkNDlkZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGx1Z2luX2NvbW1vbi9hbGwuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT03YzhhM2I5ZTFlNjZlZDBhYmE3NjViYzZmMzVkYTg1ZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLlhpcGg7bWQ1PWEyYzRiNzFjMDE5ODY4MjM3NmQ0ODNlYjViY2M5MTk3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvRkxBQy9hbGwuaDtiZWdpbmxpbmU9NjU7ZW5kbGluZT03MDttZDU9NjQ0NzRmMmIyMmU5ZTc3YjI4ZDhiOGIyNWM5ODNhNDgiCitERVBFTkRTID0gImxpYm9nZyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnhpcGgub3JnL3JlbGVhc2VzL2ZsYWMvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk5MjJjOWEwMzc4Yzg4ZDNlOTAxYjIzNGY4NTI2OTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDc3M2MwMDk5ZGJhNzY3ZDk2M2ZkOTIxNDMyNjNiZTMzOGM0ODcwMjE3MmU4NzU0YjliYzUxMDNlZmUxYzU2YyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW9nZ3Rlc3QgXAorICAgICAgICAgICAgICAgIC0td2l0aC1vZ2ctbGlicmFyaWVzPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtb2dnLWluY2x1ZGVzPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1tcy1wbHVnaW4gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggXAorICAgICAgICAgICAgICAgIGFjX2N2X3Byb2dfTkFTTT0iIiBcCisgICAgICAgICAgICAgICAgIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFsdGl2ZWMiLCAiIC0tZW5hYmxlLWFsdGl2ZWMiLCAiIC0tZGlzYWJsZS1hbHRpdmVjIiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlMiIsICIgLS1lbmFibGUtc3NlIiwgIiIsIGQpfSIKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29yZWk3IiwgIiAtLWVuYWJsZS1zc2UiLCAiIiwgZCl9IgorCitQQUNLQUdFUyArPSAibGliZmxhYyBsaWJmbGFjKysgbGlib2dnZmxhYyBsaWJvZ2dmbGFjKysiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTX2xpYmZsYWMgPSAiJHtsaWJkaXJ9L2xpYkZMQUMuc28uKiIKK0ZJTEVTX2xpYmZsYWMrKyA9ICIke2xpYmRpcn0vbGliRkxBQysrLnNvLioiCitGSUxFU19saWJvZ2dmbGFjID0gIiR7bGliZGlyfS9saWJPZ2dGTEFDLnNvLioiCitGSUxFU19saWJvZ2dmbGFjKysgPSAiJHtsaWJkaXJ9L2xpYk9nZ0ZMQUMrKy5zby4qIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyZDQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaApAQCAtMCwwICsxLDI1MiBAQAorRnJvbSBkNjRjN2VkYjY2ZjRhNjRmZjQ5YzQzMDZjZjc3ZmQyNjliNzA3OWFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMTYgTWFyIDIwMTUgMTM6NDU6MzAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIGVycm9yIHNpZ25hbCBlbWlzc2lvbiBmb3IgbWlzc2luZyBwbHVnaW5zCisKK0FkZCBhIG1pc3NpbmcgcGx1Z2lucyBlcnJvciBzaWduYWwgdG8gZ3N0LXBsYXllci4gTm90ZSB0aGF0IHRoaXMgZXJyb3IKK2RvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIHBsYXliYWNrIGhhcyBjb21wbGV0ZWx5IGZhaWxlZCwgYnV0IGluCitwcmFjdGljZSB0aGUgdXNlciBleHBlcmllbmNlIHdpbGwgYmUgYmFkICh0aGluaywgZS5nLiBvZiBhIG1wNCBmaWxlCit3aGVyZSBILjI2NCBjb2RlYyBpcyBtaXNzaW5nOiBBQUMgcGxheWJhY2sgc3RpbGwgd29ya3MuLi4pLgorCitVc2UgdGhlIHNpZ25hbCBpbiBndGstcGxheSB0byBzaG93IGEgaW5mb2JhciBpZiBwbHVnaW5zIGFyZSBtaXNzaW5nLgorCitTdWJtaXR0ZWQgdXBzdHJlYW0gYXQgaHR0cHM6Ly9naXRodWIuY29tL3Nkcm9lZ2UvZ3N0LXBsYXllci9wdWxsLzExCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgfCAgMiArLQorIGd0ay9ndGstcGxheS5jICAgICAgICAgICAgIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIHwgMjIgKysrKysrKysrKysrKysrKysrKworIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oIHwgIDMgKystCisgNCBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5MGFiNzRjLi42Y2RiNGViIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01Myw3ICs1Myw3IEBAIEFDX1NVQlNUKExUX0FHRSkKKyBQS0dfUFJPR19QS0dfQ09ORklHCisgCisgUEtHX0NIRUNLX01PRFVMRVMoR0xJQiwgW2dsaWItMi4wIGdvYmplY3QtMi4wXSkKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHU1RSRUFNRVIsIFtnc3RyZWFtZXItMS4wID49IDEuNCBnc3RyZWFtZXItdmlkZW8tMS4wID49IDEuNF0pCisrUEtHX0NIRUNLX01PRFVMRVMoR1NUUkVBTUVSLCBbZ3N0cmVhbWVyLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXZpZGVvLTEuMCA+PSAxLjQgZ3N0cmVhbWVyLXBidXRpbHMtMS4wXSkKKyAKKyBHTElCX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdsaWItMi4wYCIKKyBBQ19TVUJTVChHTElCX1BSRUZJWCkKK2RpZmYgLS1naXQgYS9ndGsvZ3RrLXBsYXkuYyBiL2d0ay9ndGstcGxheS5jCitpbmRleCBiOTI3NzNiLi5lMmI2MDVhIDEwMDY0NAorLS0tIGEvZ3RrL2d0ay1wbGF5LmMKKysrKyBiL2d0ay9ndGstcGxheS5jCitAQCAtMzAsNiArMzAsOCBAQCB0eXBlZGVmIHN0cnVjdAorICAgR3RrV2lkZ2V0ICpwcmV2X2J1dHRvbiwgKm5leHRfYnV0dG9uOworICAgR3RrV2lkZ2V0ICpzZWVrYmFyOworICAgR3RrV2lkZ2V0ICp2aWRlb19hcmVhOworKyAgR3RrV2lkZ2V0ICppbmZvX2xhYmVsOworKyAgR3RrV2lkZ2V0ICppbmZvX2JhcjsKKyAgIEd0a1dpZGdldCAqdm9sdW1lX2J1dHRvbjsKKyAgIGd1bG9uZyBzZWVrYmFyX3ZhbHVlX2NoYW5nZWRfc2lnbmFsX2lkOworICAgZ2Jvb2xlYW4gcGxheWluZzsKK0BAIC0xNDEsNiArMTQzLDEzIEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB9CisgCisgc3RhdGljIHZvaWQKKytjbGVhcl9taXNzaW5nX3BsdWdpbnMgKEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGd0a19sYWJlbF9zZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSwgIiIpOworKyAgZ3RrX3dpZGdldF9oaWRlIChwbGF5LT5pbmZvX2Jhcik7CisrfQorKworK3N0YXRpYyB2b2lkCisgc2tpcF9wcmV2X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgeworICAgR0xpc3QgKnByZXY7CitAQCAtMTU1LDYgKzE2NCw3IEBAIHNraXBfcHJldl9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIAorICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgVFJVRSk7CisgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgcHJldi0+ZGF0YSk7CisrICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgc2V0X3RpdGxlIChwbGF5LCBwcmV2LT5kYXRhKTsKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+cHJldl9idXR0b24sIGdfbGlzdF9wcmV2aW91cyAocHJldikgIT0gTlVMTCk7CitAQCAtMTc1LDYgKzE4NSw3IEBAIHNraXBfbmV4dF9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIAorICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5wcmV2X2J1dHRvbiwgVFJVRSk7CisgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgbmV4dC0+ZGF0YSk7CisrICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgZ3N0X3BsYXllcl9wbGF5IChwbGF5LT5wbGF5ZXIpOworICAgc2V0X3RpdGxlIChwbGF5LCBuZXh0LT5kYXRhKTsKKyAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIGdfbGlzdF9uZXh0IChuZXh0KSAhPSBOVUxMKTsKK0BAIC0xOTMsMTAgKzIwNCwxNiBAQCB2b2x1bWVfY2hhbmdlZF9jYiAoR3RrU2NhbGVCdXR0b24gKiBidXR0b24sIGdkb3VibGUgdmFsdWUsIEd0a1BsYXkgKiBwbGF5KQorICAgZ3N0X3BsYXllcl9zZXRfdm9sdW1lIChwbGF5LT5wbGF5ZXIsIHZhbHVlKTsKKyB9CisgCisrdm9pZAorK2luZm9fYmFyX3Jlc3BvbnNlX2NiIChHdGtJbmZvQmFyICogYmFyLCBnaW50IHJlc3BvbnNlLCBHdGtQbGF5ICogcGxheSkKKyt7CisrICBndGtfd2lkZ2V0X2hpZGUgKEdUS19XSURHRVQgKGJhcikpOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgeworLSAgR3RrV2lkZ2V0ICpjb250cm9scywgKm1haW5faGJveCwgKm1haW5fdmJveDsKKysgIEd0a1dpZGdldCAqY29udHJvbHMsICptYWluX2hib3gsICptYWluX3Zib3gsICppbmZvX2JhciwgKmNvbnRlbnRfYXJlYTsKKyAKKyAgIHBsYXktPndpbmRvdyA9IGd0a193aW5kb3dfbmV3IChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChwbGF5LT53aW5kb3cpLCAiZGVsZXRlLWV2ZW50IiwKK0BAIC0yMDgsNiArMjI1LDIwIEBAIGNyZWF0ZV91aSAoR3RrUGxheSAqIHBsYXkpCisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LT52aWRlb19hcmVhLCAicmVhbGl6ZSIsCisgICAgICAgR19DQUxMQkFDSyAodmlkZW9fYXJlYV9yZWFsaXplX2NiKSwgcGxheSk7CisgCisrICBwbGF5LT5pbmZvX2JhciA9IGd0a19pbmZvX2Jhcl9uZXcgKCk7CisrICBndGtfaW5mb19iYXJfc2V0X21lc3NhZ2VfdHlwZSAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhciksCisrICAgICAgR1RLX01FU1NBR0VfV0FSTklORyk7CisrICAvL2d0a19pbmZvX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0b24gKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpLAorKyAgLy8gICAgVFJVRSk7CisrICBndGtfd2lkZ2V0X3NldF9ub19zaG93X2FsbCAocGxheS0+aW5mb19iYXIsIFRSVUUpOworKyAgZ19zaWduYWxfY29ubmVjdCAocGxheS0+aW5mb19iYXIsICJyZXNwb25zZSIsCisrICAgICAgR19DQUxMQkFDSyAoaW5mb19iYXJfcmVzcG9uc2VfY2IpLCBwbGF5KTsKKysKKysgIGNvbnRlbnRfYXJlYSA9IGd0a19pbmZvX2Jhcl9nZXRfY29udGVudF9hcmVhIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSk7CisrICBwbGF5LT5pbmZvX2xhYmVsID0gZ3RrX2xhYmVsX25ldyAoIiIpOworKyAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGNvbnRlbnRfYXJlYSksIHBsYXktPmluZm9fbGFiZWwpOworKyAgZ3RrX3dpZGdldF9zaG93IChwbGF5LT5pbmZvX2xhYmVsKTsKKysKKyAgIC8qIFVuaWZpZWQgcGxheS9wYXVzZSBidXR0b24gKi8KKyAgIHBsYXktPnBsYXlfcGF1c2VfYnV0dG9uID0KKyAgICAgICBndGtfYnV0dG9uX25ld19mcm9tX2ljb25fbmFtZSAoIm1lZGlhLXBsYXliYWNrLXBhdXNlIiwKK0BAIC0yNTgsNiArMjg5LDcgQEAgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyAKKyAgIG1haW5fdmJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDApOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBtYWluX2hib3gsIFRSVUUsIFRSVUUsIDApOworKyAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBwbGF5LT5pbmZvX2JhciwgRkFMU0UsIEZBTFNFLCAwKTsKKyAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAobWFpbl92Ym94KSwgY29udHJvbHMsIEZBTFNFLCBGQUxTRSwgMCk7CisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAocGxheS0+d2luZG93KSwgbWFpbl92Ym94KTsKKyAKK0BAIC0zMjIsNiArMzU0LDcgQEAgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorICAgICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSAocGxheS0+bmV4dF9idXR0b24sIGdfbGlzdF9uZXh0IChuZXh0KSAhPSBOVUxMKTsKKyAKKyAgICAgICBnc3RfcGxheWVyX3NldF91cmkgKHBsYXktPnBsYXllciwgbmV4dC0+ZGF0YSk7CisrICAgICAgY2xlYXJfbWlzc2luZ19wbHVnaW5zIChwbGF5KTsKKyAgICAgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICAgICAgc2V0X3RpdGxlIChwbGF5LCBuZXh0LT5kYXRhKTsKKyAgICAgfSBlbHNlIHsKK0BAIC0zMzAsNiArMzYzLDI0IEBAIGVvc19jYiAoR3N0UGxheWVyICogdW51c2VkLCBHdGtQbGF5ICogcGxheSkKKyAgIH0KKyB9CisgCisrc3RhdGljIHZvaWQKKytlcnJvcl9jYiAoR3N0UGxheWVyICogcGxheWVyLCBHRXJyb3IgKiBlcnIsIEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGNoYXIgKm1lc3NhZ2U7CisrCisrICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIGdzdF9wbGF5ZXJfZXJyb3JfcXVhcmsgKCksCisrICAgICAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTikpIHsKKysgICAgLy8gYWRkIG1lc3NhZ2UgdG8gZW5kIG9mIGFueSBleGlzdGluZyBtZXNzYWdlOiB0aGVyZSBtYXkgYmUKKysgICAgLy8gbXVsdGlwbGUgbWlzc2luZyBwbHVnaW5zLgorKyAgICBtZXNzYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJXMlcy4gIiwKKysgICAgICAgIGd0a19sYWJlbF9nZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSksIGVyci0+bWVzc2FnZSk7CisrICAgIGd0a19sYWJlbF9zZXRfdGV4dCAoR1RLX0xBQkVMIChwbGF5LT5pbmZvX2xhYmVsKSwgbWVzc2FnZSk7CisrICAgIGdfZnJlZSAobWVzc2FnZSk7CisrCisrICAgIGd0a193aWRnZXRfc2hvdyAocGxheS0+aW5mb19iYXIpOworKyAgfQorK30KKysKKyBpbnQKKyBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgeworQEAgLTQyMiw2ICs0NzMsNyBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgInZpZGVvLWRpbWVuc2lvbnMtY2hhbmdlZCIsCisgICAgICAgR19DQUxMQkFDSyAodmlkZW9fZGltZW5zaW9uc19jaGFuZ2VkX2NiKSwgJnBsYXkpOworICAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJlbmQtb2Ytc3RyZWFtIiwgR19DQUxMQkFDSyAoZW9zX2NiKSwgJnBsYXkpOworKyAgZ19zaWduYWxfY29ubmVjdCAocGxheS5wbGF5ZXIsICJlcnJvciIsIEdfQ0FMTEJBQ0sgKGVycm9yX2NiKSwgJnBsYXkpOworIAorICAgLyogV2UgaGF2ZSBmaWxlKHMpIHRoYXQgbmVlZCBwbGF5aW5nLiAqLworICAgc2V0X3RpdGxlICgmcGxheSwgZ19saXN0X2ZpcnN0IChwbGF5LnVyaXMpLT5kYXRhKTsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitpbmRleCBiZDY4MmQ5Li43OGU3YmExIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitAQCAtNDcsNiArNDcsNyBAQAorIAorICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisgI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMuaD4KKyAKKyBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcGxheWVyX2RlYnVnKTsKKyAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcGxheWVyX2RlYnVnCitAQCAtMjM4LDYgKzIzOSw3IEBAIGdzdF9wbGF5ZXJfY2xhc3NfaW5pdCAoR3N0UGxheWVyQ2xhc3MgKiBrbGFzcykKKyAgICAgICBnX3NpZ25hbF9uZXcgKCJ2aWRlby1kaW1lbnNpb25zLWNoYW5nZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAorICAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfTk9fUkVDVVJTRSB8IEdfU0lHTkFMX05PX0hPT0tTLCAwLCBOVUxMLAorICAgICAgIE5VTEwsIE5VTEwsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfSU5ULCBHX1RZUEVfSU5UKTsKKysKKyB9CisgCisgc3RhdGljIHZvaWQKK0BAIC02MTksNiArNjIxLDIxIEBAIGVycm9yX2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKKyAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+cHJpdi0+bG9jayk7CisgfQorIAorK3N0YXRpYyB2b2lkCisrZWxlbWVudF9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCisreworKyAgR3N0UGxheWVyICpzZWxmID0gR1NUX1BMQVlFUiAodXNlcl9kYXRhKTsKKysKKysgIGlmIChnc3RfaXNfbWlzc2luZ19wbHVnaW5fbWVzc2FnZSAobXNnKSkgeworKyAgICBnY2hhciAqZGVzYzsKKysKKysgICAgZGVzYyA9IGdzdF9taXNzaW5nX3BsdWdpbl9tZXNzYWdlX2dldF9kZXNjcmlwdGlvbiAobXNnKTsKKysgICAgZW1pdF9lcnJvciAoc2VsZiwgZ19lcnJvcl9uZXcgKEdTVF9QTEFZRVJfRVJST1IsCisrICAgICAgICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOLCAiTWlzc2luZyBwbHVnaW4gJyVzJyIsIGRlc2MpKTsKKysgICAgZ19mcmVlIChkZXNjKTsKKysgIH0KKyt9CisrCisgc3RhdGljIGdib29sZWFuCisgZW9zX2Rpc3BhdGNoIChncG9pbnRlciB1c2VyX2RhdGEpCisgeworQEAgLTEwNTksNiArMTA3Niw4IEBAIGdzdF9wbGF5ZXJfbWFpbiAoZ3BvaW50ZXIgZGF0YSkKKyAgICAgICBOVUxMLCBOVUxMKTsKKyAgIGdfc291cmNlX2F0dGFjaCAoYnVzX3NvdXJjZSwgc2VsZi0+cHJpdi0+Y29udGV4dCk7CisgCisrICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVsZW1lbnQiLAorKyAgICAgIEdfQ0FMTEJBQ0sgKGVsZW1lbnRfY2IpLCBzZWxmKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZXJyb3IiLCBHX0NBTExCQUNLIChlcnJvcl9jYiksCisgICAgICAgc2VsZik7CisgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2U6OmVvcyIsIEdfQ0FMTEJBQ0sgKGVvc19jYiksIHNlbGYpOworQEAgLTE1NjAsNiArMTU3OSw3IEBAIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgKHZvaWQpCisgICBzdGF0aWMgZ3NpemUgaWQgPSAwOworICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7CisgICAgIHtDX0VOVU0gKEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEKSwgIkdTVF9QTEFZRVJfRVJST1JfRkFJTEVEIiwgImZhaWxlZCJ9LAorKyAgICB7Q19FTlVNIChHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOKSwgIkdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4iLCAibWlzc2luZy1wbHVnaW4ifSwKKyAgICAgezAsIE5VTEwsIE5VTEx9CisgICB9OworIAorQEAgLTE1NzcsNiArMTU5Nyw4IEBAIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X25hbWUgKEdzdFBsYXllckVycm9yIGVycm9yKQorICAgc3dpdGNoIChlcnJvcikgeworICAgICBjYXNlIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEOgorICAgICAgIHJldHVybiAiZmFpbGVkIjsKKysgICAgY2FzZSBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOOgorKyAgICAgIHJldHVybiAibWlzc2luZy1wbHVnaW4iOworICAgfQorIAorICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAoraW5kZXggYzQzODUxMy4uMzVmYjViYiAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorQEAgLTQ0LDcgKzQ0LDggQEAgR1R5cGUgICAgICAgIGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOworICNkZWZpbmUgICAgICBHU1RfVFlQRV9QTEFZRVJfRVJST1IgICAgICAgICAgICAgICAgICAgIChnc3RfcGxheWVyX2Vycm9yX2dldF90eXBlICgpKQorIAorIHR5cGVkZWYgZW51bSB7CistICBHU1RfUExBWUVSX0VSUk9SX0ZBSUxFRCA9IDAKKysgIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEID0gMCwKKysgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4KKyB9IEdzdFBsYXllckVycm9yOworIAorIGNvbnN0IGdjaGFyICpnc3RfcGxheWVyX2Vycm9yX2dldF9uYW1lICAgICAgICAgICAgICAgIChHc3RQbGF5ZXJFcnJvciBlcnJvcik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzYzQyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0ZpeC1wYXVzZS1wbGF5LnBhdGNoCkBAIC0wLDAgKzEsMTA3IEBACitGaXggcGF1c2UvcGxheQorCitUaGUgY3VycmVudCBwbGF5ZXIgc3RhdGUgaXMgbm93IG5vdGlmaWVkIHZpYSB0aGUgc3RhdGUtY2hhbmdlZCBzaWduYWwsCithbmQgaW4gdGhlIEdUSyBVSSBpdCB3YXMgb25seSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRlc2lyZWQgc3RhdGUuCisKK1RoaXMgaXMgYSBiYWNrcG9ydCBvZiB1cHN0cmVhbSBjb21taXQgNzM4NDc5YzdhMC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworLS0tCisgZ3RrL2d0ay1wbGF5LmMgICAgICAgICAgICAgfCAgOCArKysrKystLQorIGxpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIHwgMTIgLS0tLS0tLS0tLS0tCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggfCAgMiAtLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IDZlN2EwOTguLmUyYjYwNWEgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zNCw2ICszNCw3IEBAIHR5cGVkZWYgc3RydWN0CisgICBHdGtXaWRnZXQgKmluZm9fYmFyOworICAgR3RrV2lkZ2V0ICp2b2x1bWVfYnV0dG9uOworICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisrICBnYm9vbGVhbiBwbGF5aW5nOworIH0gR3RrUGxheTsKKyAKKyAvKiBDb21wYXQgc3R1YnMgKi8KK0BAIC0xMTgsMTIgKzExOSwxMyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgeworICAgR3RrV2lkZ2V0ICppbWFnZTsKKyAKKy0gIGlmIChnc3RfcGxheWVyX2lzX3BsYXlpbmcgKHBsYXktPnBsYXllcikpIHsKKysgIGlmIChwbGF5LT5wbGF5aW5nKSB7CisgICAgIGdzdF9wbGF5ZXJfcGF1c2UgKHBsYXktPnBsYXllcik7CisgICAgIGltYWdlID0KKyAgICAgICAgIGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKCJtZWRpYS1wbGF5YmFjay1zdGFydCIsCisgICAgICAgICBHVEtfSUNPTl9TSVpFX0JVVFRPTik7CisgICAgIGd0a19idXR0b25fc2V0X2ltYWdlIChHVEtfQlVUVE9OIChwbGF5LT5wbGF5X3BhdXNlX2J1dHRvbiksIGltYWdlKTsKKysgICAgcGxheS0+cGxheWluZyA9IEZBTFNFOworICAgfSBlbHNlIHsKKyAgICAgZ2NoYXIgKnRpdGxlOworIAorQEAgLTEzNiw2ICsxMzgsNyBAQCBwbGF5X3BhdXNlX2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgICAgIHRpdGxlID0gZ3N0X3BsYXllcl9nZXRfdXJpIChwbGF5LT5wbGF5ZXIpOworICAgICBzZXRfdGl0bGUgKHBsYXksIHRpdGxlKTsKKyAgICAgZ19mcmVlICh0aXRsZSk7CisrICAgIHBsYXktPnBsYXlpbmcgPSBUUlVFOworICAgfQorIH0KKyAKK0BAIC0zMzUsNyArMzM4LDcgQEAgdmlkZW9fZGltZW5zaW9uc19jaGFuZ2VkX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0LAorIHN0YXRpYyB2b2lkCisgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorIHsKKy0gIGlmIChnc3RfcGxheWVyX2lzX3BsYXlpbmcgKHBsYXktPnBsYXllcikpIHsKKysgIGlmIChwbGF5LT5wbGF5aW5nKSB7CisgICAgIEdMaXN0ICpuZXh0ID0gTlVMTDsKKyAgICAgZ2NoYXIgKnVyaTsKKyAKK0BAIC00NTIsNiArNDU1LDcgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorICAgfQorIAorICAgcGxheS5wbGF5ZXIgPSBnc3RfcGxheWVyX25ldyAoKTsKKysgIHBsYXkucGxheWluZyA9IFRSVUU7CisgCisgICBnX29iamVjdF9zZXQgKHBsYXkucGxheWVyLCAiZGlzcGF0Y2gtdG8tbWFpbi1jb250ZXh0IiwgVFJVRSwgTlVMTCk7CisgCitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworaW5kZXggMDY5YjI4NC4uNzhlN2JhMSAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworQEAgLTE0MjIsMTggKzE0MjIsNiBAQCBnc3RfcGxheWVyX3NldF91cmkgKEdzdFBsYXllciAqIHNlbGYsIGNvbnN0IGdjaGFyICogdmFsKQorICAgZ19vYmplY3Rfc2V0IChzZWxmLCAidXJpIiwgdmFsLCBOVUxMKTsKKyB9CisgCistZ2Jvb2xlYW4KKy1nc3RfcGxheWVyX2lzX3BsYXlpbmcgKEdzdFBsYXllciAqIHNlbGYpCisteworLSAgZ2Jvb2xlYW4gdmFsOworLQorLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTEFZRVIgKHNlbGYpLCBGQUxTRSk7CistCistICBnX29iamVjdF9nZXQgKHNlbGYsICJpcy1wbGF5aW5nIiwgJnZhbCwgTlVMTCk7CistCistICByZXR1cm4gdmFsOworLX0KKy0KKyBHc3RDbG9ja1RpbWUKKyBnc3RfcGxheWVyX2dldF9wb3NpdGlvbiAoR3N0UGxheWVyICogc2VsZikKKyB7CitkaWZmIC0tZ2l0IGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAoraW5kZXggNjkzM2RkNy4uMzVmYjViYiAxMDA2NDQKKy0tLSBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCisrKysgYi9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaAorQEAgLTkzLDggKzkzLDYgQEAgZ2NoYXIgKiAgICAgIGdzdF9wbGF5ZXJfZ2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllcik7Cisgdm9pZCAgICAgICAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAgICAgICAgICAgICAgICAgICAgICAgKEdzdFBsYXllciAgICAqIHBsYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICogdXJpKTsKKyAKKy1nYm9vbGVhbiAgICAgZ3N0X3BsYXllcl9pc19wbGF5aW5nICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKy0KKyBHc3RDbG9ja1RpbWUgZ3N0X3BsYXllcl9nZXRfcG9zaXRpb24gICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyBHc3RDbG9ja1RpbWUgZ3N0X3BsYXllcl9nZXRfZHVyYXRpb24gICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmYxYjAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZmlsZWNob29zZXIucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Zyb20gNDNkNGIxOWFiNjExZDg0NDE1NmUyNmM0ODQwY2M1NGRkYjczYWUwMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEZlYiAyMDE1IDE3OjE3OjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGd0ay1wbGF5OiBzaG93IGEgZmlsZSBjaG9vc2VyIGlmIG5vIFVSSXMgd2VyZSBwYXNzZWQKKworLS0tCisgZ3RrL2d0ay1wbGF5LmMgfCAgIDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGYwMTUwNzcuLjk3NjZhNzIgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zMTksOCArMzE5LDMyIEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGxheWxpc3RzIGFuZCBzdHVmZgorICAgLyogUGFyc2UgdGhlIGxpc3Qgb2YgdGhlIGZpbGUgbmFtZXMgd2UgaGF2ZSB0byBwbGF5LiAqLworICAgaWYgKCFmaWxlX25hbWVzKSB7CistICAgIGdfcHJpbnQgKCJVc2FnZTogJXMgRklMRShzKXxVUkkocylcbiIsIEFQUF9OQU1FKTsKKy0gICAgcmV0dXJuIDE7CisrICAgIEd0a1dpZGdldCAqY2hvb3NlcjsKKysgICAgaW50IHJlczsKKysKKysgICAgY2hvb3NlciA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyAoIlNlbGVjdCBmaWxlcyB0byBwbGF5IiwgTlVMTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9PUEVOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfQ2FuY2VsIiwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09wZW4iLCBHVEtfUkVTUE9OU0VfQUNDRVBULAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgICBnX29iamVjdF9zZXQgKGNob29zZXIsCisrICAgICAgICAgICAgICAgICAgImxvY2FsLW9ubHkiLCBGQUxTRSwKKysgICAgICAgICAgICAgICAgICAic2VsZWN0LW11bHRpcGxlIiwgVFJVRSwKKysgICAgICAgICAgICAgICAgICBOVUxMKTsKKysKKysgICAgcmVzID0gZ3RrX2RpYWxvZ19ydW4gKEdUS19ESUFMT0cgKGNob29zZXIpKTsKKysgICAgaWYgKHJlcyA9PSBHVEtfUkVTUE9OU0VfQUNDRVBUKSB7CisrICAgICAgR1NMaXN0ICpsOworKworKyAgICAgIGwgPSBndGtfZmlsZV9jaG9vc2VyX2dldF91cmlzIChHVEtfRklMRV9DSE9PU0VSIChjaG9vc2VyKSk7CisrICAgICAgd2hpbGUgKGwpIHsKKysgICAgICAgIHBsYXkudXJpcyA9IGdfbGlzdF9hcHBlbmQgKHBsYXkudXJpcywgbC0+ZGF0YSk7CisrICAgICAgICBsID0gZ19zbGlzdF9kZWxldGVfbGluayAobCwgbCk7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGd0a193aWRnZXRfZGVzdHJveSAoY2hvb3Nlcik7CisgICB9IGVsc2UgeworICAgICBndWludCBpOworIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9nc3QtcGxheWVyLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMjA3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcApAQCAtMCwwICsxLDEwIEBACitbRGVza3RvcCBFbnRyeV0KK05hbWU9TWVkaWEgUGxheWVyCitDb21tZW50PUJhc2ljIG1lZGlhIHBsYXllcgorSWNvbj1hdWRpby1wbGF5ZXIKK1RyeUV4ZWM9Z3RrLXBsYXkKK0V4ZWM9Z3RrLXBsYXkKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R1RLO0F1ZGlvVmlkZW87CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2QxOGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3RrMi5wYXRjaApAQCAtMCwwICsxLDcxIEBACitBcyB0aGUgcmVzdCBvZiBTYXRvIGlzIEdUSysgMiwgcGF0Y2ggZ3RrLXBsYXkgdG8gdXNlIEdUSysgMi4gIFdoZW4gdGhlIHJlc3Qgb2YKK1NhdG8gaGFzIGJlZW4gcG9ydGVkIHRvIEdUSysgMyB0aGlzIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjhhZjEzYi4uOTBhYjc0YyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjAsNyArNjAsNyBAQCBBQ19TVUJTVChHTElCX1BSRUZJWCkKKyBHU1RfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ3N0cmVhbWVyLTEuMGAiCisgQUNfU1VCU1QoR1NUX1BSRUZJWCkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTMuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhHVEssIFtndGsrLTIuMF0sIFtoYXZlX2d0az0ieWVzIl0sIFtoYXZlX2d0az0ibm8iXSkKKyBBTV9DT05ESVRJT05BTChIQVZFX0dUSywgdGVzdCAieCRoYXZlX2d0ayIgIT0gInhubyIpCisgCisgR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLKFsxLjMxLjFdKQorZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGYwMTUwNzcuLjk1NGQ2ZmIgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zNCw2ICszNCw0NiBAQCB0eXBlZGVmIHN0cnVjdAorICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisgfSBHdGtQbGF5OworIAorKy8qIENvbXBhdCBzdHVicyAqLworK0d0a1dpZGdldCAqCisrZ3RrX2JveF9uZXcgKEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorKyAgICAgICAgICAgICBnaW50IHNwYWNpbmcpCisreworKyAgc3dpdGNoIChvcmllbnRhdGlvbikgeworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKKysgICAgcmV0dXJuIGd0a19oYm94X25ldyAoRkFMU0UsIHNwYWNpbmcpOworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6CisrICAgIHJldHVybiBndGtfdmJveF9uZXcgKEZBTFNFLCBzcGFjaW5nKTsKKysgIH0KKyt9CisrCisrR3RrV2lkZ2V0KgorK2d0a19idXR0b25fbmV3X2Zyb21faWNvbl9uYW1lIChjb25zdCBnY2hhciAqaWNvbl9uYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtJY29uU2l6ZSAgc2l6ZSkKKyt7CisrICBHdGtXaWRnZXQgKmJ1dHRvbjsKKysgIEd0a1dpZGdldCAqaW1hZ2U7CisrCisrICBpbWFnZSA9IGd0a19pbWFnZV9uZXdfZnJvbV9pY29uX25hbWUgKGljb25fbmFtZSwgc2l6ZSk7CisrICBidXR0b24gPSAgZ19vYmplY3RfbmV3IChHVEtfVFlQRV9CVVRUT04sCisrICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFnZSIsIGltYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKysgIHJldHVybiBidXR0b247CisrfQorKworK0d0a1dpZGdldCAqCisrZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgbWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtYXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHN0ZXApCisreworKyAgc3dpdGNoIChvcmllbnRhdGlvbikgeworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKKysgICAgcmV0dXJuIGd0a19oc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKG1pbiwgbWF4LCBzdGVwKTsKKysgIGNhc2UgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMOgorKyAgICByZXR1cm4gZ3RrX3ZzY2FsZV9uZXdfd2l0aF9yYW5nZSAobWluLCBtYXgsIHN0ZXApOworKyAgfQorK30KKyAKKyBzdGF0aWMgdm9pZAorIHNldF90aXRsZSAoR3RrUGxheSAqIHBsYXksIGNvbnN0IGdjaGFyICogdGl0bGUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllcl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjZmJiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZPSJHU3RyZWFtZXIgcGxheWJhY2sgaGVscGVyIGxpYnJhcnkgYW5kIGV4YW1wbGVzIgorCitMSUNFTlNFID0gIkxHUEwtMi4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTk7bWQ1PTAzYWVjYTlkODI5NWY4MTE4MTc5MDkwNzVhMTVmZjY1IgorCitERVBFTkRTID0gImdsaWItMi4wIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGd0aysiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9zZHJvZWdlL2dzdC1wbGF5ZXIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVjaG9vc2VyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d0azIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vRml4LXBhdXNlLXBsYXkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dzdC1wbGF5ZXIuZGVza3RvcCIKKworU1JDUkVWID0gIjUzODZjNWI5ODRkNDBlZjU0MzQ2NzNlZDYyMjA0ZTY5YWFmNTI2NDUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGd0ay1kb2MgbGliX3BhY2thZ2UgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXRvdWNoICR7U30vQ2hhbmdlTG9nCit9CisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9WQUxHUklORD1ubyBhY19jdl9wYXRoX0dEQj1ubyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0IC1EICR7V09SS0RJUn0vZ3N0LXBsYXllci5kZXNrdG9wICR7RH0ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9nc3QtcGxheWVyLmRlc2t0b3AKK30KKworRklMRVNfJHtQTn0tYmluICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8qLmRlc2t0b3AiCisKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIgorUlJFQ09NTUVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQtbWV0YSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLWxpYmF2IiwgIiIsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkxJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIiwgImNvbW1lcmNpYWwiLCAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS1tZXRhIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1wYWNrYWdlLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjFiZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jCkBAIC0wLDAgKzEsNTggQEAKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAiIHNwbGl0X2dzdHJlYW1lcjEwX3BhY2thZ2VzICIKK1BBQ0tBR0VTUExJVEZVTkNTX2FwcGVuZCA9ICIgc2V0X21ldGFwa2dfcmRlcGVuZHMgIgorCitweXRob24gc3BsaXRfZ3N0cmVhbWVyMTBfcGFja2FnZXMgKCkgeworICAgIGdzdF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2dzdHJlYW1lci0ke0xJQlZ9JykKKyAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwbHVnaW5fcG9zdGluc3QnLCBUcnVlKQorICAgIGdsaWJkaXIgPSBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdsaWJkaXIsICdebGliKC4qKVwuc29cLionLCAnbGliJXMnLCAnZ3N0cmVhbWVyICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdzdF9saWJkaXIsICdsaWJnc3QoLiopXC5zbyQnLCBkLmV4cGFuZCgnJHtQTn0tJXMnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzJywgcG9zdGluc3Q9cG9zdGluc3QsIGV4dHJhX2RlcGVuZHM9JycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ3N0X2xpYmRpciwgJ2xpYmdzdCguKilcLmxhJCcsIGQuZXhwYW5kKCcke1BOfS0lcy1kZXYnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzIChkZXZlbG9wbWVudCBmaWxlcyknLCBleHRyYV9kZXBlbmRzPWQuZXhwYW5kKCcke1BOfS1kZXYnKSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnc3RfbGliZGlyLCAnbGliZ3N0KC4qKVwuYSQnLCBkLmV4cGFuZCgnJHtQTn0tJXMtc3RhdGljZGV2JyksICdHU3RyZWFtZXIgcGx1Z2luIGZvciAlcyAoc3RhdGljIGRldmVsb3BtZW50IGZpbGVzKScsIGV4dHJhX2RlcGVuZHM9ZC5leHBhbmQoJyR7UE59LXN0YXRpY2RldicpKQorfQorCitweXRob24gc2V0X21ldGFwa2dfcmRlcGVuZHMgKCkgeworICAgIGltcG9ydCBvcworCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIG1ldGFwa2cgPSAgcG4gKyAnLW1ldGEnCisgICAgZC5zZXRWYXIoJ0FMTE9XX0VNUFRZXycgKyBtZXRhcGtnLCAiMSIpCisgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBtZXRhcGtnLCAiIikKKyAgICBibGFja2xpc3QgPSBbIHBuLCBwbiArICctbG9jYWxlJywgcG4gKyAnLWRldicsIHBuICsgJy1kYmcnLCBwbiArICctZG9jJywgcG4gKyAnLW1ldGEnIF0KKyAgICBtZXRhcGtnX3JkZXBlbmRzID0gW10KKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZXNbMTpdOgorICAgICAgICBpZiBub3QgcGtnIGluIGJsYWNrbGlzdCBhbmQgbm90IHBrZyBpbiBtZXRhcGtnX3JkZXBlbmRzIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGV2JykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kYmcnKSBhbmQgbm90IHBrZy5jb3VudCgnbG9jYWxlJykgYW5kIG5vdCBwa2cuY291bnQoJy1zdGF0aWNkZXYnKToKKyAgICAgICAgICAgICMgU2VlIGlmIHRoZSBwYWNrYWdlIGlzIGVtcHR5IGJ5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnRzIG9mIGl0cyBQS0dERVNUIHN1YmRpcmVjdG9yeS4gCisgICAgICAgICAgICAjIElmIHRoaXMgc3ViZGlyZWN0b3J5IGlzIGVtcHR5LCB0aGVuIHRoZSBwYWNrYWdlIGlzLgorICAgICAgICAgICAgIyBFbXB0eSBwYWNrYWdlcyBkbyBub3QgZ2V0IGFkZGVkIHRvIHRoZSBtZXRhIHBhY2thZ2UncyBSREVQRU5EUworICAgICAgICAgICAgcGtnZGlyID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2Rpcik6CisgICAgICAgICAgICAgICAgZGlyX2NvbnRlbnRzID0gb3MubGlzdGRpcihwa2dkaXIpIG9yIFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpcl9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBpc19lbXB0eSA9IGxlbihkaXJfY29udGVudHMpID09IDAKKyAgICAgICAgICAgIGlmIG5vdCBpc19lbXB0eToKKyAgICAgICAgICAgICAgICBtZXRhcGtnX3JkZXBlbmRzLmFwcGVuZChwa2cpCisgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBtZXRhcGtnLCAnICcuam9pbihtZXRhcGtnX3JkZXBlbmRzKSkKKyAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIG1ldGFwa2csIHBuICsgJyBtZXRhIHBhY2thZ2UnKQorfQorCisjIGVhY2ggcGx1Z2luLWRldiBkZXBlbmRzIG9uIFBOLWRldiwgcGx1Z2luLXN0YXRpY2RldiBvbiBQTi1zdGF0aWNkZXYKKyMgc28gd2UgbmVlZCB0aGVtIGV2ZW4gd2hlbiBlbXB0eSAobGlrZSBpbiBnc3QtcGx1Z2lucy1nb29kIGNhc2UpCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0tZGV2ID0gIjEiCitBTExPV19FTVBUWV8ke1BOfS1zdGF0aWNkZXYgPSAiMSIKKworUEFDS0FHRVMgKz0gIiR7UE59LWFwcHMgJHtQTn0tbWV0YSAke1BOfS1nbGliIgorRklMRVNfJHtQTn0tYXBwcyA9ICIke2JpbmRpcn0iCisKK1JERVBFTkRTXyR7UE59LWFwcHMgKz0gInBlcmwiCitSUkVDT01NRU5EU18ke1BOfSArPSAiJHtQTn0tbWV0YSIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLSR7TElCVn0vLmRlYnVnIgorRklMRVNfJHtQTn0tZ2xpYiA9ICIke2RhdGFkaXJ9L2dsaWItMi4wIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZTZlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpYmF2LWJhc2VkIEdTdHJlYW1lciAxLnggcGx1Z2luIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrICYgKCAoR1BMdjIrICYgTEdQTHYyLjErKSB8IChHUEx2MysgJiBMR1BMdjMrKSApIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nc3RyZWFtZXIubmV0LyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgemxpYiBiemlwMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgQ0FVVElPTjogVXNpbmcgdGhlIHN5c3RlbSBsaWJhdiBpcyBub3QgcmVjb21tZW5kZWQuIFNpbmNlIHRoZSBsaWJhdiBBUEkgaXMgY2hhbmdpbmcgYWxsIHRoZSB0aW1lLAorIyBjb21waWxhdGlvbiBlcnJvcnMgKGFuZCBvdGhlciwgbW9yZSBzdWJ0bGUgYnVncykgY2FuIGhhcHBlbi4gSXQgaXMgdXN1YWxseSBiZXR0ZXIgdG8gcmVseSBvbiB0aGUKKyMgbGliYXYgY29weSBpbmNsdWRlZCBpbiB0aGUgZ3N0LWxpYmF2IHBhY2thZ2UuCitQQUNLQUdFQ09ORklHID8/PSAiIG9yYyB5YXNtICIKK1BBQ0tBR0VDT05GSUdbbGliYXZdID0gIi0td2l0aC1zeXN0ZW0tbGliYXYsLGxpYmF2IgorUEFDS0FHRUNPTkZJR1tsZ3BsXSAgPSAiLS1lbmFibGUtbGdwbCwsIgorUEFDS0FHRUNPTkZJR1t5YXNtXSAgPSAiLS1lbmFibGUteWFzbSwtLWRpc2FibGUteWFzbSx5YXNtLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbb3JjXSAgPSAiLS1lbmFibGUtb3JjLC0tZGlzYWJsZS1vcmMsb3JjIgorCisKK0dTVFJFQU1FUl8xXzBfREVCVUcgPz0gIi0tZGlzYWJsZS1kZWJ1ZyIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFID0gIi0td2l0aC1saWJhdi1leHRyYS1jb25maWd1cmUiCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OID0gXAorJyR7TElCQVZfRVhUUkFfQ09ORklHVVJFfT0iJHtMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSR30iJworCitFWFRSQV9PRUNPTkYgPSAiJHtMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5hIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTlhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2LzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDU0YmJhMjI4ZWE1MmQwMWZkODQ5NDFkOTdiZTIzYzAzZjk4NjJiNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDYgQXByIDIwMTMgMDE6MjI6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRGlzYWJsZSB5YXNtIGZvciBsaWJhdiB3aGVuIC0tZGlzYWJsZS15YXNtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDIyZWRlODguLmVmM2MwNTAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMwNSw2ICszMDUsMTIgQEAgZWxzZQorICAgICBlbWJsaWJhdl9jb25maWd1cmVfYXJncz0iJGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWdwbCIKKyAgIGZpCisKKysgIEFDX0FSR19FTkFCTEUoeWFzbSwKKysgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXlhc21dLCBbZGlzYWJsZSB1c2Ugb2YgeWFzbSBhc3NlbWJsZXJdKV0pCisrICBpZiB0ZXN0ICJ4JGVuYWJsZV95YXNtIiA9ICJ4bm8iOyB0aGVuCisrICAgIGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzPSIkZW1ibGliYXZfY29uZmlndXJlX2FyZ3MgLS1kaXNhYmxlLXlhc20iCisrICBmaQorKworICAgIyBpZiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLCB0ZWxsIGxpYmF2IHNvCisgICBjYXNlICRob3N0IGluCisgICAgICAgKmFuZHJvaWQqKQorLS0gCisxLjguMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2L3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2FkZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEZXNjcmlwdGlvbjogV29ya2Fyb3VuZCB0byBidWlsZCBsaWJhdiBmb3IgaTU4NiB3aXRoIGdjYyA0LjkuMiBieSBhdm9pZGluZyBtZW1zZXQKK0F1dGhvcjogQmVybmhhcmQg3GJlbGFja2VyIDxiZXJuaGFyZHVAdnItd2ViLmRlPgorCistLS0KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MzA4MgorTGFzdC1VcGRhdGU6IDIwMTUtMDQtMjgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIGdzdC1saWJhdi0xLjQuNS5vcmlnL2dzdC1saWJzL2V4dC9saWJhdi9saWJhdmNvZGVjL2gyNjRfY2FiYWMuYworKysrIGdzdC1saWJhdi0xLjQuNS9nc3QtbGlicy9leHQvbGliYXYvbGliYXZjb2RlYy9oMjY0X2NhYmFjLmMKK0BAIC0yMDIwLDcgKzIwMjAsMTEgQEAgZGVjb2RlX2ludHJhX21iOgorICAgICAgICAgLy8gSW4gZGVibG9ja2luZywgdGhlIHF1YW50aXplciBpcyAwCisgICAgICAgICBoLT5jdXJfcGljLnFzY2FsZV90YWJsZVttYl94eV0gPSAwOworICAgICAgICAgLy8gQWxsIGNvZWZmcyBhcmUgcHJlc2VudAorLSAgICAgICAgbWVtc2V0KGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSwgMTYsIDQ4KTsKKysgICAgICAgIC8qbWVtc2V0KGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSwgMTYsIDQ4KTsqLworKyAgICAgICAgICAgIC8qIGF2b2lkaW5nIHRoaXMgbWVtc2V0IGJlY2F1c2UgaXQgbGVhZHMgYXQgbGVhc3Qgd2l0aCBnY2M0LjkuMiB0byBlcnJvcjogJ2FzbScgb3BlcmFuZCBoYXMgaW1wb3NzaWJsZSBjb25zdHJhaW50cyAqLworKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0ODsgaSsrKSB7CisrICAgICAgICAgICAgKCAodW5zaWduZWQgY2hhciopKGgtPm5vbl96ZXJvX2NvdW50W21iX3h5XSkgKSBbaV0gPSAxNjsKKysgICAgICAgIH0KKyAgICAgICAgIGgtPmN1cl9waWMubWJfdHlwZVttYl94eV0gPSBtYl90eXBlOworICAgICAgICAgaC0+bGFzdF9xc2NhbGVfZGlmZiA9IDA7CisgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmM3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2XzEuNC41LmJiCkBAIC0wLDAgKzEsMjcgQEAKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0xJQ0VOU0U7bWQ1PWVhNjZlOTdhN2FjMWRiOTc4Y2YzNTI5MDY4YThjOTQ4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LWxpYmF2L2dzdC1saWJhdi0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2ggXAorICAgIGZpbGU6Ly93b3JrYXJvdW5kLXRvLWJ1aWxkLWdzdC1saWJhdi1mb3ItaTU4Ni13aXRoLWdjYy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiZjQ5MjJhNDZhZGJjYmU3YmQwMTMzMWZmNWRjNzk3OWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjA1YzYyNjI0NjA0ZjNiYjVjODcwODQ0Y2MxZjI3MTE3NzljYzUzM2IwMDRjMmFhMWQ4YzBkNTg1NTdhZmJiYyIKKworTElCQVZfRVhUUkFfQ09ORklHVVJFX0NPTU1PTl9BUkcgPSAiLS10YXJnZXQtb3M9bGludXggXAorICAtLWNjPScke0NDfScgLS1hcz0nJHtDQ30nIC0tbGQ9JyR7Q0N9JyAtLW5tPScke05NfScgLS1hcj0nJHtBUn0nIFwKKyAgLS1yYW5saWI9JyR7UkFOTElCfScgXAorICAke0dTVFJFQU1FUl8xXzBfREVCVUd9IFwKKyAgLS1jcm9zcy1wcmVmaXg9JyR7SE9TVF9QUkVGSVh9JyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1saWJhdi0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjFiODdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl9naXQuYmIKQEAgLTAsMCArMSwyOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1saWJhdi5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2V4dC9saWJhdi9nc3Rhdi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PWE3NTJjMzUyNjdkODI3NmZkOWNhM2RiNjk5NGZjYTljIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9MSUNFTlNFO21kNT0yM2E1NGY1OWI4MjU3MmMyMDNhNTU5MzQ2ZTg5ZWQ1NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjM7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtbGliYXY7YnJhbmNoPW1hc3RlciIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIxMjcyMDJkNmY2NTU4NDg5MWRhYmY5MmJlMDMxZjBkMTcwYjBlN2YxIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSRyA9ICItLXRhcmdldC1vcz1saW51eCBcCisgIC0tY2M9JyR7Q0N9JyAtLWFzPScke0NDfScgLS1sZD0nJHtDQ30nIC0tbm09JyR7Tk19JyAtLWFyPScke0FSfScgXAorICAke0dTVFJFQU1FUl8xXzBfREVCVUd9IFwKKyAgLS1jcm9zcy1wcmVmaXg9JyR7SE9TVF9QUkVGSVh9JyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjEwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZS5iYgpAQCAtMCwwICsxLDY1IEBACitERVNDUklQVElPTiA9ICJHc3RyZWFtZXIxLjAgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworQ09NTUVSQ0lBTF9QTFVHSU5TID0gIiR7Q09NTUVSQ0lBTF9BVURJT19QTFVHSU5TfSAke0NPTU1FUkNJQUxfVklERU9fUExVR0lOU30iCitERVBFTkRTX1VHTFk9IiR7QCdnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5JyBpZiAndWdseScgaW4gQ09NTUVSQ0lBTF9QTFVHSU5TLnNwbGl0KCctJykgZWxzZSAnJ30iCitERVBFTkRTX0JBRD0iJHtAJ2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCcgaWYgJ2JhZCcgaW4gQ09NTUVSQ0lBTF9QTFVHSU5TLnNwbGl0KCctJykgZWxzZSAnJ30iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QgJHtERVBFTkRTX1VHTFl9ICR7REVQRU5EU19CQUR9IgorCitQQUNLQUdFUyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8iCisKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLXZpZGVvID0gIjEiCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlJywgJycsIGQpfSBcCisgICAgZ3N0cmVhbWVyMS4wIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXBsYXliYWNrIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWdpbyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hbHNhIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZvbHVtZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb2NvbnZlcnQgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW9yZXNhbXBsZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS10eXBlZmluZGZ1bmN0aW9ucyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12aWRlb3NjYWxlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvY29udmVydCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1hdXRvZGV0ZWN0IFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXNvdXBodHRwc3JjIgorCitSUkVDT01NRU5EU19nc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZSA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS14aW1hZ2VzaW5rIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXh2aW1hZ2VzaW5rIgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS12b3JiaXMgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2Utb2dnIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLXdhdnBhcnNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWZsYWMgXAorICAgICR7Q09NTUVSQ0lBTF9BVURJT19QTFVHSU5TfSIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtZGVidWcgPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtZGVidWcgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtYXVkaW90ZXN0c3JjIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvdGVzdHNyYyIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8gPSAiXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtYXZpIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1hdHJvc2thIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXRoZW9yYSBcCisgICAgJHtDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlN9IgorCitSUkVDT01NRU5EU19nc3RyZWFtZXIxLjAtbWV0YS12aWRlbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5ODkwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIk9wZW5NQVggSUwgcGx1Z2lucyBmb3IgR1N0cmVhbWVyIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3N0cmVhbWVyLm5ldC8iCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCIKK1JERVBFTkRTXyR7UE59ID0gImxpYm9teGlsIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vY29tbW9uL200IC1JICR7U30vbTQiCisKK1BSID0gInIxIgorCitHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVQgPz0gImJlbGxhZ2lvIgorR1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FID89ICIke2xpYmRpcn0vbGlib214aWwtYmVsbGFnaW8uc28uMCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtdmFsZ3JpbmQgLS13aXRoLW9teC10YXJnZXQ9JHtHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVR9IgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIG9teF90YXJnZXQgPSBkLmdldFZhcigiR1NUUkVBTUVSXzFfMF9PTVhfVEFSR0VUIiwgVHJ1ZSkKKyAgICBpZiBvbXhfdGFyZ2V0IGluIFsnZ2VuZXJpYycsICdiZWxsYWdpbyddOgorICAgICAgICBzcmNkaXIgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgICAgICMgQmVsbGFnaW8gaGVhZGVycyBhcmUgaW5jb21wbGV0ZSAodGhleSBhcmUgbWlzc2luZyB0aGUgT01YX1ZFUlNJT05fTUFKT1IsIworICAgICAgICAjIE9NWF9WRVJTSU9OX01JTk9SLCBPTVhfVkVSU0lPTl9SRVZJU0lPTiwgYW5kIE9NWF9WRVJTSU9OX1NURVAgbWFjcm9zKTsKKyAgICAgICAgIyBhcHBlbmRpbmcgYSBkaXJlY3RvcnkgcGF0aCB0byBnc3Qtb214JyBpbnRlcm5hbCBPcGVuTUFYIElMIGhlYWRlcnMgZml4ZXMgdGhpcworICAgICAgICBkLmFwcGVuZFZhcigiQ0ZMQUdTIiwgIiAtSSVzL29teC9vcGVubWF4IiAlIHNyY2RpcikKKyAgICBlbGlmIG9teF90YXJnZXQgPT0gInJwaSI6CisgICAgICAgICMgRGVkaWNhdGVkIFJhc3BiZXJyeSBQaSBPcGVuTUFYIElMIHN1cHBvcnQgbWFrZXMgdGhpcyBwYWNrYWdlIG1hY2hpbmUgc3BlY2lmaWMKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIGQuZ2V0VmFyKCJNQUNISU5FX0FSQ0giLCBUcnVlKSkKK30KKworc2V0X29teF9jb3JlX25hbWUoKSB7CisJc2VkIC1pIC1lICJzO15jb3JlLW5hbWU9Lio7Y29yZS1uYW1lPSR7R1NUUkVBTUVSXzFfMF9PTVhfQ09SRV9OQU1FfTsiICIke0R9JHtzeXNjb25mZGlyfS94ZGcvZ3N0b214LmNvbmYiCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gIiBzZXRfb214X2NvcmVfbmFtZSAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouYSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXgvMDAwMS1vbXgtZml4ZWQtdHlwZS1lcnJvci1pbi1wcmludGYtY2FsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQyOGFjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LzAwMDEtb214LWZpeGVkLXR5cGUtZXJyb3ItaW4tcHJpbnRmLWNhbGwucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBmNjI5ZTA0MWU5ZjY3OGZjZDg2YWQ3NjRhMTUxMTdkZmY2M2MyNzFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorRGF0ZTogU2F0LCAyNyBBcHIgMjAxMyAwMjo1MDoyNSArMDIwMAorU3ViamVjdDogW1BBVENIXSBvbXg6IGZpeGVkIHR5cGUgZXJyb3IgaW4gcHJpbnRmIGNhbGwKKworJXp1IGV4cGVjdHMgc2l6ZV90CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MDA4XQorCitTaWduZWQtb2ZmLWJ5OiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CistLS0KKyBvbXgvZ3N0b214LmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9vbXgvZ3N0b214LmMgYi9vbXgvZ3N0b214LmMKK2luZGV4IGEyOTQ1ZWQuLjFlY2E3Y2MgMTAwNjQ0CistLS0gYS9vbXgvZ3N0b214LmMKKysrKyBiL29teC9nc3RvbXguYworQEAgLTE2MzAsNyArMTYzMCw3IEBAIGdzdF9vbXhfcG9ydF9hbGxvY2F0ZV9idWZmZXJzX3VubG9ja2VkIChHc3RPTVhQb3J0ICogcG9ydCwKKyAKKyAgIEdTVF9JTkZPX09CSkVDVCAoY29tcC0+cGFyZW50LAorICAgICAgICJBbGxvY2F0aW5nICVkIGJ1ZmZlcnMgb2Ygc2l6ZSAlenUgZm9yICVzIHBvcnQgJXUiLCBuLAorLSAgICAgIHBvcnQtPnBvcnRfZGVmLm5CdWZmZXJTaXplLCBjb21wLT5uYW1lLCAoZ3VpbnQpIHBvcnQtPmluZGV4KTsKKysgICAgICAoc2l6ZV90KSAocG9ydC0+cG9ydF9kZWYubkJ1ZmZlclNpemUpLCBjb21wLT5uYW1lLCAoZ3VpbnQpIHBvcnQtPmluZGV4KTsKKyAKKyAgIGlmICghcG9ydC0+YnVmZmVycykKKyAgICAgcG9ydC0+YnVmZmVycyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyAobik7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTdjOTFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfMS4yLjAuYmIKQEAgLTAsMCArMSwxMiBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtb214LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9vbXgvZ3N0b214Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMTttZDU9NWM4ZTFmY2EzMjcwNDQ4OGU3NmQyYmE5ZGRmYTkzNWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1vbXgvZ3N0LW9teC0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkMjRlOGMwMTUzYzM1ZGZlZmVlM2UyNmIxYzJjMzVmOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYjQ4NzQ5NjFlNjQ4OGFkOWU1ODA4MTE0YmQ0ODZlYTk4MWM1NDA5MDcyNjJjYWFiMTQxOTM1NWZkODJkNzQ1IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LW9teC0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXhfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Yzg0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF9naXQuYmIKQEAgLTAsMCArMSwyNiBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1vbXguaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29teC9nc3RvbXguaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT01YzhlMWZjYTMyNzA0NDg4ZTc2ZDJiYTlkZGZhOTM1ZiIKKworU1JDX1VSSSA9ICIgXAorICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3Qtb214O2JyYW5jaD1tYXN0ZXI7bmFtZT1nc3Qtb214IFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjticmFuY2g9bWFzdGVyO25hbWU9Y29tbW9uIFwKKyAgICBmaWxlOi8vMDAwMS1vbXgtZml4ZWQtdHlwZS1lcnJvci1pbi1wcmludGYtY2FsbC5wYXRjaCBcCisgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVZfZ3N0LW9teCA9ICJhMmRiNzZiMDQ4ZGIyNzhlZjBhYTc5OGUxMDZiNzU5NDI2NGUwNmMwIgorU1JDUkVWX2NvbW1vbiA9ICI1ZWRjZDg1N2IyMTA3Y2Q4Yjc4YzE2MjMyZGQxMDg3NzUxM2VjMTU3IgorCitTUkNSRVZfRk9STUFUID0gImdzdC1vbXgiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGVkYjYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKQEAgLTAsMCArMSwxMzUgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAiCisKK0RFUEVORFMgKz0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgbGlicG5nIGpwZWciCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitpbmhlcml0IGdldHRleHQgYmx1ZXRvb3RoCisKKyMgb3BlbmdsIHBhY2thZ2Vjb25maWcgZmFjdG9yZWQgb3V0IHRvIG1ha2UgaXQgZWFzeSBmb3IgZGlzdHJvcworIyBhbmQgQlNQIGxheWVycyB0byBwaWNrIGVpdGhlciAoZGVza3RvcCkgb3BlbmdsLCBnbGVzMiwgb3Igbm8gR0wKK1BBQ0tBR0VDT05GSUdfR0wgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2dsZXMyJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtQQUNLQUdFQ09ORklHX0dMfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyAgICBvcmMgY3VybCB1dmNoMjY0IG5lb24gc25kZmlsZSBcCisgICAgaGxzIHNiYyBkYXNoIGJ6MiBzbW9vdGhzdHJlYW1pbmcgXAorICAgICIKKworIyBkYXNoID0gRHluYW1pYyBBZGFwdGl2ZSBTdHJlYW1pbmcgb3ZlciBIVFRQCitQQUNLQUdFQ09ORklHW2Fzc3JlbmRlcl0gICAgICAgPSAiLS1lbmFibGUtYXNzcmVuZGVyLC0tZGlzYWJsZS1hc3NyZW5kZXIsbGliYXNzIgorUEFDS0FHRUNPTkZJR1tjdXJsXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsY3VybCIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdICAgICAgICAgICA9ICItLWVuYWJsZS1nbGVzMiwtLWRpc2FibGUtZ2xlczIsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCx2aXJ0dWFsL2xpYmdsIGxpYmdsdSIKK1BBQ0tBR0VDT05GSUdbZmFhY10gICAgICAgICAgICA9ICItLWVuYWJsZS1mYWFjLC0tZGlzYWJsZS1mYWFjLGZhYWMiCitQQUNLQUdFQ09ORklHW2ZhYWRdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhZCwtLWRpc2FibGUtZmFhZCxmYWFkMiIKK1BBQ0tBR0VDT05GSUdbbGlibW1zXSAgICAgICAgICA9ICItLWVuYWJsZS1saWJtbXMsLS1kaXNhYmxlLWxpYm1tcyxsaWJtbXMiCitQQUNLQUdFQ09ORklHW21vZHBsdWddICAgICAgICAgPSAiLS1lbmFibGUtbW9kcGx1ZywtLWRpc2FibGUtbW9kcGx1ZyxsaWJtb2RwbHVnIgorUEFDS0FHRUNPTkZJR1ttcGcxMjNdICAgICAgICAgID0gIi0tZW5hYmxlLW1wZzEyMywtLWRpc2FibGUtbXBnMTIzLG1wZzEyMyIKK1BBQ0tBR0VDT05GSUdbb3B1c10gICAgICAgICAgICA9ICItLWVuYWJsZS1vcHVzLC0tZGlzYWJsZS1vcHVzLGxpYm9wdXMiCitQQUNLQUdFQ09ORklHW2ZsaXRlXSAgICAgICAgICAgPSAiLS1lbmFibGUtZmxpdGUsLS1kaXNhYmxlLWZsaXRlLGZsaXRlLWFsc2EiCitQQUNLQUdFQ09ORklHW29wZW5jdl0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmN2LC0tZGlzYWJsZS1vcGVuY3Ysb3BlbmN2IgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSAgICAgICAgID0gIi0tZW5hYmxlLXdheWxhbmQgLS1lbmFibGUtZWdsLC0tZGlzYWJsZS13YXlsYW5kIC0tZGlzYWJsZS1lZ2wsd2F5bGFuZCB2aXJ0dWFsL2VnbCIKK1BBQ0tBR0VDT05GSUdbdXZjaDI2NF0gICAgICAgICA9ICItLWVuYWJsZS11dmNoMjY0LC0tZGlzYWJsZS11dmNoMjY0LGxpYnVzYjEgdWRldiIKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdICAgICAgICA9ICItLWVuYWJsZS1kaXJlY3RmYiwtLWRpc2FibGUtZGlyZWN0ZmIsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW25lb25dICAgICAgICAgICAgPSAiLS1lbmFibGUtbmVvbiwtLWRpc2FibGUtbmVvbixuZW9uIgorUEFDS0FHRUNPTkZJR1tvcGVuYWxdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5hbCwtLWRpc2FibGUtb3BlbmFsLG9wZW5hbC1zb2Z0IgorUEFDS0FHRUNPTkZJR1tobHNdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWhscywtLWRpc2FibGUtaGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbc2JjXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1zYmMsLS1kaXNhYmxlLXNiYyxzYmMiCitQQUNLQUdFQ09ORklHW2Rhc2hdICAgICAgICAgICAgPSAiLS1lbmFibGUtZGFzaCwtLWRpc2FibGUtZGFzaCxsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1tiejJdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWJ6MiwtLWRpc2FibGUtYnoyLGJ6aXAyIgorUEFDS0FHRUNPTkZJR1tmbHVpZHN5bnRoXSAgICAgID0gIi0tZW5hYmxlLWZsdWlkc3ludGgsLS1kaXNhYmxlLWZsdWlkc3ludGgsZmx1aWRzeW50aCIKK1BBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSAgICA9ICItLWVuYWJsZS1zY2hybywtLWRpc2FibGUtc2Nocm8sc2Nocm9lZGluZ2VyIgorUEFDS0FHRUNPTkZJR1tzbW9vdGhzdHJlYW1pbmddID0gIi0tZW5hYmxlLXNtb290aHN0cmVhbWluZywtLWRpc2FibGUtc21vb3Roc3RyZWFtaW5nLGxpYnhtbDIiCitQQUNLQUdFQ09ORklHW2JsdWV6XSAgICAgICAgICAgPSAiLS1lbmFibGUtYmx1ZXosLS1kaXNhYmxlLWJsdWV6LCR7QkxVRVp9IgorUEFDS0FHRUNPTkZJR1tyc3ZnXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXJzdmcsLS1kaXNhYmxlLXJzdmcsbGlicnN2ZyIKK1BBQ0tBR0VDT05GSUdbc25kZmlsZV0gICAgICAgICA9ICItLWVuYWJsZS1zbmRmaWxlLC0tZGlzYWJsZS1zbmRmaWxlLGxpYnNuZGZpbGUxIgorUEFDS0FHRUNPTkZJR1t3ZWJwXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKK1BBQ0tBR0VDT05GSUdbcnRtcF0gICAgICAgICAgICA9ICItLWVuYWJsZS1ydG1wLC0tZGlzYWJsZS1ydG1wLHJ0bXBkdW1wIgorUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSAgICAgICAgID0gIi0tZW5hYmxlLWxpYnNzaDIsLS1kaXNhYmxlLWxpYnNzaDIsbGlic3NoMiIKKworIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm90IGJlZW4gcG9ydGVkIHRvIDEuMCAoeWV0KToKKyMgICBkaXJlY3RkcmF3IHZjZCBhcGV4c2luayBkYzEzOTQgbHYyIGxpbnN5cyBtdXNlcGFjayBteXRodHYKKyMgICBuYXMgdGltaWRpdHkgdGVsZXRleHRkZWMgc2RsIHh2aWQgd2luaW5ldCBhY20gZ3NldHRpbmdzCisjICAgc25kaW8gcXR3cmFwcGVyIGNkeGFwYXJzZSBkY2NwIGZhY2VvdmVybGF5IGhkdnBhcnNlIHR0YQorIyAgIG12ZSBudXZkZW11eCBvc3hfdmlkZW8gcGF0Y2hkZXRlY3QgcXVpY2t0aW1lIHJlYWwgc2RpCisjICAgdmlkZW9tZWFzdXJlIGdzZXR0aW5ncworCisjIHRoZXNlIHBsdWdpbnMgaGF2ZSBubyBjb3JyZXNwb25kaW5nIGxpYnJhcnkgaW4gT0UtY29yZSBvciBtZXRhLW9wZW5lbWJlZGRlZDoKKyMgICBvcGVubmkyIHdpbmtzIGRpcmVjdDNkIGRpcmVjdGRyYXcgZGlyZWN0c291bmQgd2luc2NyZWVuY2FwIG9zeF92aWRlbworIyAgIGFwcGxlX21lZGlhIGFuZHJvaWRfbWVkaWEgYXZjIGNocm9tYXByaW50IGRhYWxhIGR0cyBnbWUgZ3NtIGthdGUgbGFkc3BhIG1pbWljCisjICAgbXBlZzJlbmMgbXBsZXggb2ZhIG9wZW5qcGVnIG9wZW5zbGVzIHB2ciByZXNpbmR2ZCBydG1wIHNvdW5kdG91Y2ggc3BhbmRzcCBzcGMKKyMgICBzcnRwIHZkcGF1IHZvYWFjZW5jIHZvYW1yd2JlbmMgd2FzYXBpIHpiYXIKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZW5hYmxlLWR2YiBcCisgICAgLS1lbmFibGUtc2htIFwKKyAgICAtLWVuYWJsZS1mYmRldiBcCisgICAgLS1lbmFibGUtZGVja2xpbmsgXAorICAgIC0tZGlzYWJsZS1hY20gXAorICAgIC0tZGlzYWJsZS1hbmRyb2lkX21lZGlhIFwKKyAgICAtLWRpc2FibGUtYXBleHNpbmsgXAorICAgIC0tZGlzYWJsZS1hcHBsZV9tZWRpYSBcCisgICAgLS1kaXNhYmxlLWF2YyBcCisgICAgLS1kaXNhYmxlLWNocm9tYXByaW50IFwKKyAgICAtLWRpc2FibGUtY29jb2EgXAorICAgIC0tZGlzYWJsZS1kYWFsYSBcCisgICAgLS1kaXNhYmxlLWRjMTM5NCBcCisgICAgLS1kaXNhYmxlLWRpcmVjdDNkIFwKKyAgICAtLWRpc2FibGUtZGlyZWN0ZHJhdyBcCisgICAgLS1kaXNhYmxlLWRpcmVjdHNvdW5kIFwKKyAgICAtLWRpc2FibGUtZHRzIFwKKyAgICAtLWRpc2FibGUtZ21lIFwKKyAgICAtLWRpc2FibGUtZ3NldHRpbmdzIFwKKyAgICAtLWRpc2FibGUtZ3NtIFwKKyAgICAtLWRpc2FibGUta2F0ZSBcCisgICAgLS1kaXNhYmxlLWxhZHNwYSBcCisgICAgLS1kaXNhYmxlLWxpbnN5cyBcCisgICAgLS1kaXNhYmxlLWx2MiBcCisgICAgLS1kaXNhYmxlLW1pbWljIFwKKyAgICAtLWRpc2FibGUtbXBlZzJlbmMgXAorICAgIC0tZGlzYWJsZS1tcGxleCBcCisgICAgLS1kaXNhYmxlLW11c2VwYWNrIFwKKyAgICAtLWRpc2FibGUtbXl0aHR2IFwKKyAgICAtLWRpc2FibGUtbmFzIFwKKyAgICAtLWRpc2FibGUtb2ZhIFwKKyAgICAtLWRpc2FibGUtb3BlbmpwZWcgXAorICAgIC0tZGlzYWJsZS1vcGVuc2xlcyBcCisgICAgLS1kaXNhYmxlLW9zeF92aWRlbyBcCisgICAgLS1kaXNhYmxlLXB2ciBcCisgICAgLS1kaXNhYmxlLXF1aWNrdGltZSBcCisgICAgLS1kaXNhYmxlLXJlc2luZHZkIFwKKyAgICAtLWRpc2FibGUtc2RsIFwKKyAgICAtLWRpc2FibGUtc2RsdGVzdCBcCisgICAgLS1kaXNhYmxlLXNuZGlvIFwKKyAgICAtLWRpc2FibGUtc291bmR0b3VjaCBcCisgICAgLS1kaXNhYmxlLXNwYW5kc3AgXAorICAgIC0tZGlzYWJsZS1zcGMgXAorICAgIC0tZGlzYWJsZS1zcnRwIFwKKyAgICAtLWRpc2FibGUtdGVsZXRleHRkZWMgXAorICAgIC0tZGlzYWJsZS10aW1pZGl0eSBcCisgICAgLS1kaXNhYmxlLXZjZCBcCisgICAgLS1kaXNhYmxlLXZkcGF1IFwKKyAgICAtLWRpc2FibGUtdm9hYWNlbmMgXAorICAgIC0tZGlzYWJsZS12b2FtcndiZW5jIFwKKyAgICAtLWRpc2FibGUtd2FzYXBpIFwKKyAgICAtLWRpc2FibGUtd2lsZG1pZGkgXAorICAgIC0tZGlzYWJsZS13aW5pbmV0IFwKKyAgICAtLWRpc2FibGUtd2luc2NyZWVuY2FwIFwKKyAgICAtLWRpc2FibGUteHZpZCBcCisgICAgLS1kaXNhYmxlLXpiYXIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLS1kaXNhYmxlLXlhZGlmIiwgIiIsIGQpfSBcCisgICAgIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworRklMRVNfZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLW9wZW5jdiArPSAiJHtkYXRhZGlyfS9nc3QtcGx1Z2lucy1iYWQvMS4wL29wZW5jdioiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsLWRvLW5vdC1jaGVjay1mb3ItR0wtR0xVLUVHTC1HTEVTMi1saWJzLWlmLWRpc2FibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYTMyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gZGViYTBkYTQ1ZWM4MjEyMDlhN2VkMTQ4YTQ1MjFkNTYyZTY1MTJjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMTQ6NDc6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2w6IGRvIG5vdCBjaGVjayBmb3IgR0wvR0xVL0VHTC9HTEVTMiBsaWJzIGlmIGRpc2FibGVkIGluCisgY29uZmlndXJhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTUyMl0KKworU2lnbmVkLW9mZi1ieTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTQgKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWE0NmFmYi4uZTg1ZDRiYSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjYxLDEwICs2NjEsMTYgQEAgY2FzZSAkaG9zdCBpbgorICAgICBmaQorICAgOzsKKyAgICopCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0wsIEdMLCBnbFRleEltYWdlMkQsLCBHTC9nbC5oKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMVSwgR0xVLCBnbHVTcGhlcmUsLCBHTC9nbHUuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTEVTMiwgR0xFU3YyLCBnbFRleEltYWdlMkQsLCBHTEVTMi9nbDIuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihFR0wsIEVHTCwgZWdsR2V0RXJyb3IsLCBFR0wvZWdsLmgpCisrICAgIGlmIHRlc3QgIngkTkVFRF9HTCIgIT0gInhubyI7IHRoZW4KKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMLCBHTCwgZ2xUZXhJbWFnZTJELCwgR0wvZ2wuaCkKKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMVSwgR0xVLCBnbHVTcGhlcmUsLCBHTC9nbHUuaCkKKysgICAgZmkKKysgICAgaWYgdGVzdCAieCRORUVEX0dMRVMyIiAhPSAieG5vIjsgdGhlbgorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xFUzIsIEdMRVN2MiwgZ2xUZXhJbWFnZTJELCwgR0xFUzIvZ2wyLmgpCisrICAgIGZpCisrICAgIGlmIHRlc3QgIngkTkVFRF9FR0wiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihFR0wsIEVHTCwgZWdsR2V0RXJyb3IsLCBFR0wvZWdsLmgpCisrICAgIGZpCisgCisgICAgIG9sZF9MSUJTPSRMSUJTCisgICAgIG9sZF9DRkxBR1M9JENGTEFHUworLS0gCisxLjguMy4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJhZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gZjU5YzUyNjlmOTJkNTlhNTI5NmNiZmVlYjY4MmQ0MjA5NWNkODhhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOCBTZXAgMjAxNCAwMjoyNDowNyAtMDQwMAorU3ViamVjdDogW1BBVENIXSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQ6IGFsbG93IHRvIGRpc2FibGUgbGlic3NoMgorCitsaWJzc2gyIGlzIGF1dG9tYXRpY2FsbHkgbGlua2VkIHRvIGlmIHByZXNlbnQsIHRoaXMgdW5kZXRlcm1pbmVkCitkZXBlbmRlbmN5IG1heSBjYXVzZSBidWlsZCBlcnJvcnMgbGlrZToKKworICAuLi4veDg2XzY0LXBva3ktbGludXgvNC45LjAvbGQ6IGNhbm5vdCBmaW5kIC1sc3NoMgorCitsaWJzc2gyIGlzbid0IGFuIG9lLWNvcmUgcmVjaXBlLCBzbyBhbGxvdyB0byBkaXNhYmxlIGl0IGZyb20KK2NvbmZpZ3VyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAyMyArKysrKysrKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwZTk1YzVjLi4xMjE1M2I0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xOTAxLDYgKzE5MDEsMTUgQEAgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQ0hST01BUFJJTlQsIFtjaHJvbWFwcmludF0sIGNocm9tYXByaW50LCBbCisgXSkKKyAKKyBkbmwgKioqIEN1cmwgKioqCisrQUNfQVJHX0VOQUJMRShbbGlic3NoMl0sCisrICAgICBbICAtLWVuYWJsZS1saWJzc2gyCQllbmFibGUgTElCU1NIMiBzdXBwb3J0IEA8OkBkZWZhdWx0PWF1dG9AOj5AXSwKKysgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgICAgIHllcykgIE5FRURfU1NIMj15ZXMgOzsKKysgICAgICAgbm8pICAgTkVFRF9TU0gyPW5vIDs7CisrICAgICAgIGF1dG8pIE5FRURfU1NIMj1hdXRvIDs7CisrICAgICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGlic3NoMl0pIDs7CisrICAgICBlc2FjXSxbTkVFRF9TU0gyPWF1dG9dKQorKworIHRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0NVUkwsIHRydWUpCisgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQ1VSTCwgW0N1cmwgcGx1Z2luXSwgY3VybCwgWworICAgUEtHX0NIRUNLX01PRFVMRVMoQ1VSTCwgbGliY3VybCA+PSA3LjIxLjAsIFsKK0BAIC0xOTE1LDEyICsxOTI0LDE0IEBAIEFHX0dTVF9DSEVDS19GRUFUVVJFKENVUkwsIFtDdXJsIHBsdWdpbl0sIGN1cmwsIFsKKyAgIF0pCisgICBBQ19TVUJTVChDVVJMX0NGTEFHUykKKyAgIEFDX1NVQlNUKENVUkxfTElCUykKKy0gIFBLR19DSEVDS19NT0RVTEVTKFNTSDIsIGxpYnNzaDIgPj0gMS40LjMsIFsKKy0gICAgSEFWRV9TU0gyPSJ5ZXMiCistICAgIEFDX0RFRklORShIQVZFX1NTSDIsIDEsIFtEZWZpbmUgaWYgbGlic3NoMiBpcyBhdmFpbGFibGVdKQorLSAgXSwgWworLSAgICBIQVZFX1NTSDI9Im5vIgorLSAgXSkKKysgIGlmIHRlc3QgIngkTkVFRF9TU0gyIiAhPSAieG5vIjsgdGhlbgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhTU0gyLCBsaWJzc2gyID49IDEuNC4zLCBbCisrICAgICAgSEFWRV9TU0gyPSJ5ZXMiCisrICAgICAgQUNfREVGSU5FKEhBVkVfU1NIMiwgMSwgW0RlZmluZSBpZiBsaWJzc2gyIGlzIGF2YWlsYWJsZV0pCisrICAgIF0sIFsKKysgICAgICBIQVZFX1NTSDI9Im5vIgorKyAgICBdKQorKyAgZmkKKyAgIEFNX0NPTkRJVElPTkFMKFVTRV9TU0gyLCB0ZXN0ICJ4JEhBVkVfU1NIMiIgPSAieHllcyIpCisgICBBQ19TVUJTVChTU0gyX0NGTEFHUykKKyAgIEFDX1NVQlNUKFNTSDJfTElCUykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA2NWRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYgpAQCAtMCwwICsxLDE0IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzNhNTg1NWE4MTE5ZGViMDE3ZjVmMTNjZjMyNzA5NWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9maWx0ZXJzLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PThhMDgyNzA2NTZmMmY4YWQ3YmIzNjU1YjgzMTM4ZTVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yMTY4MmU0ZThmZWE1MjQxM2ZkMjZjNjBhY2I5MDdlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2NyYzMyLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PTI3ZGIyNjljNTc1ZDFlNTMxN2ZmZmNhMmQzM2IzYjUwIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBiYjM5NDEyY2Y0YTQ4ZmUwMzk3YmNmM2E3Y2Q0NTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTUyZmFkNzI1MDY4M2Q3MmY5ZGViMzZjNTY4NTQyODMzODM2NWZlNGE0Yzg3ZmZlMTVlMzg3ODNiMTRmOTgzYyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhZC0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk1MDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIKQEAgLTAsMCArMSwyNiBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzNhNTg1NWE4MTE5ZGViMDE3ZjVmMTNjZjMyNzA5NWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9maWx0ZXJzLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PThhMDgyNzA2NTZmMmY4YWQ3YmIzNjU1YjgzMTM4ZTVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yMTY4MmU0ZThmZWE1MjQxM2ZkMjZjNjBhY2I5MDdlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2NyYzMyLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PTI3ZGIyNjljNTc1ZDFlNTMxN2ZmZmNhMmQzM2IzYjUwIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiNmU1ZGI1N2QyNDQ2YTc1M2FhYTc2YmVlMjY4ZTFmOTU2MDBiMTRjZSIKKworUEFDS0FHRUNPTkZJR1tzYmNdID0gIi0tZW5hYmxlLXNiYywtLWRpc2FibGUtc2JjLHNiYyIKK1BBQ0tBR0VDT05GSUdbaGxzXSA9ICItLWVuYWJsZS1obHMsLS1kaXNhYmxlLWhscyxnbnV0bHMiCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtZGlzYWJsZS1vcGVuanBlZyBcCisgICAgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2YzZjQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKKworREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9saWJ4MTEgbGlieHYnLCAnJywgZCl9IgorREVQRU5EUyArPSAiZnJlZXR5cGUgbGlib2lsIHV0aWwtbGludXgiCisKK2luaGVyaXQgZ2V0dGV4dAorCitQQUNLQUdFU19EWU5BTUlDID0rICJebGliZ3N0LioiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisgICAgb3JjIGl2b3JiaXMgb2dnIHRoZW9yYSB2b3JiaXMgcGFuZ28gXAorICAgICIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIgorWDExRU5BQkxFT1BUUyA9ICItLWVuYWJsZS14IC0tZW5hYmxlLXh2aWRlbyAtLWVuYWJsZS14c2htIgorWDExRElTQUJMRU9QVFMgPSAiLS1kaXNhYmxlLXggLS1kaXNhYmxlLXh2aWRlbyAtLWRpc2FibGUteHNobSIKK1BBQ0tBR0VDT05GSUdbeDExXSAgICAgPSAiJHtYMTFFTkFCTEVPUFRTfSwke1gxMURJU0FCTEVPUFRTfSwke1gxMURFUEVORFN9IgorUEFDS0FHRUNPTkZJR1thbHNhXSAgICA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgorUEFDS0FHRUNPTkZJR1tpdm9yYmlzXSA9ICItLWVuYWJsZS1pdm9yYmlzLC0tZGlzYWJsZS1pdm9yYmlzLHRyZW1vciIKK1BBQ0tBR0VDT05GSUdbb2dnXSAgICAgPSAiLS1lbmFibGUtb2dnLC0tZGlzYWJsZS1vZ2csbGlib2dnIgorUEFDS0FHRUNPTkZJR1t0aGVvcmFdICA9ICItLWVuYWJsZS10aGVvcmEsLS1kaXNhYmxlLXRoZW9yYSxsaWJ0aGVvcmEiCitQQUNLQUdFQ09ORklHW3ZvcmJpc10gID0gIi0tZW5hYmxlLXZvcmJpcywtLWRpc2FibGUtdm9yYmlzLGxpYnZvcmJpcyIKK1BBQ0tBR0VDT05GSUdbcGFuZ29dICAgPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgorCisKKyMgY2RwYXJhbm9pYSBhbmQgbGlidmlzdWFsIGRvIG5vdCBzZWVtIHRvIGV4aXN0IGFueXdoZXJlIGluIE9FCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1kaXNhYmxlLWZyZWV0eXBldGVzdCBcCisgICAgLS1kaXNhYmxlLWNkcGFyYW5vaWEgXAorICAgIC0tZGlzYWJsZS1saWJ2aXN1YWwgXAorIgorCitGSUxFU18ke01MUFJFRklYfWxpYmdzdHRhZy0xLjAgKz0gIiR7ZGF0YWRpcn0vZ3N0LXBsdWdpbnMtYmFzZS8xLjAvbGljZW5zZS10cmFuc2xhdGlvbnMuZGljdCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlNfYXBwZW5kX3g4NiA9ICIgYWNfY3ZfaGVhZGVyX2VtbWludHJpbl9oPW5vIGFjX2N2X2hlYWRlcl94bW1pbnRyaW5faD1ubyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RjYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1iYXNldGV4dG92ZXJsYXktbWFrZS1tZW1vcnktY29weS13aGVuLXZpZGVvLWJ1ZmZlci1zLnBhdGNoCkBAIC0wLDAgKzEsMTI5IEBACitGcm9tIDM3ODFkNDA5NDBkNDZkN2U2YTUwMjA5MmQyNGFhYzc5OTdmNmRhNWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgNSBNYXIgMjAxNSAxMjowNjoyMyArMDgwMAorU3ViamVjdDogW1BBVENIIDEvNF0gYmFzZXRleHRvdmVybGF5OiBtYWtlIG1lbW9yeSBjb3B5IHdoZW4gdmlkZW8gYnVmZmVyJ3MKKyBtZW1vcnkgaXMgcmVhZHkgb25seQorCisxLiBzaW5jZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUganVzdCBsb29rdXAgdGhlIHJlZmNvdW50IHRvIGRldGVybWluZSBpZgorICAgYSBidWZmZXIgaXMgd3JpdGFibGUsIGFuZCBpdCB3aWxsIHVzZSBfZ3N0X2J1ZmZlcl9jb3B5KCkgd2hpY2ggZG9uJ3QKKyAgIHBlcmZvcm0gYSBkZWVwIG1lbW9yeSBjb3B5IGV2ZW4gaWYgdGhlIGZsYWcgb2YgYSBtZW1vcnkgaXMgc2V0IHRvCisgICBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkuIFNvLCB3ZSBkZXRlY3QgdGhlIG1lbW9yeSBmbGFnIGFuZCB1c2UKKyAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gd2l0aCBHU1RfQlVGRkVSX0NPUFlfREVFUCBwYXJhbWV0ZXIgdG8gcGVyZm9ybQorICAgZGVlcCBtZW1vcnkgY29weS4gaWYgdGhlIGFsbG9jYXRvciBvZiBhIG1lbW9yeSBkb24ndCBzdXBwb3J0IG1lbV9jb3B5CisgICBpbnRlcmZhY2UsIHRoZSBpdCB3aWxsIHJldHVybiBOVUxMLCBpZiB0aGlzIGNhc2UsIHdlIGNhbiB1c2UKKyAgIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIGdldCBhIHNoYXJlZCBtZW1vcnkgYnVmZmVyIG9yIHRoZSBvcmlnbmFsCisgICBidWZmZXIgaWYgdGhlIGJ1ZmZlcidzIHJlZmNvdW50IGlzIDEuCisyLiAgbmV3IGZlYXR1cmUgaXMgbm8gYWRkZWQgaWYgY2FwcyBoYXMgbm8gZmVhdHVyZSBkdXJpbmcgY2FwcyBuZWdvdGlhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ5NV0KKworU2lnbmVkLW9mZi1ieTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMgYi9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKK2luZGV4IGM5MTk4NjEuLjNjMGExZDcgMTAwNzU1CistLS0gYS9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKKysrKyBiL2V4dC9wYW5nby9nc3RiYXNldGV4dG92ZXJsYXkuYworQEAgLTc0Nyw2ICs3NDcsNyBAQCBnc3RfYmFzZV90ZXh0X292ZXJsYXlfbmVnb3RpYXRlIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LCBHc3RDYXBzICogY2FwcykKKyAgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgIGYgPSBnc3RfY2Fwc19mZWF0dXJlc19uZXcKKyAgICAgICAgICAgKEdTVF9DQVBTX0ZFQVRVUkVfTUVUQV9HU1RfVklERU9fT1ZFUkxBWV9DT01QT1NJVElPTiwgTlVMTCk7CisrICAgICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKG92ZXJsYXlfY2FwcywgMCwgZik7CisgICAgIH0gZWxzZSB7CisgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfYWRkIChmLAorICAgICAgICAgICBHU1RfQ0FQU19GRUFUVVJFX01FVEFfR1NUX1ZJREVPX09WRVJMQVlfQ09NUE9TSVRJT04pOworQEAgLTE4OTAsMTYgKzE4OTEsNzEgQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X3B1c2hfZnJhbWUgKEdzdEJhc2VUZXh0T3ZlcmxheSAqIG92ZXJsYXksCisgICBpZiAoZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAob3ZlcmxheS0+c3JjcGFkKSkKKyAgICAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X25lZ290aWF0ZSAob3ZlcmxheSwgTlVMTCk7CisgCistICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworLQorICAgaWYgKG92ZXJsYXktPmF0dGFjaF9jb21wb190b19idWZmZXIpIHsKKyAgICAgR1NUX0RFQlVHX09CSkVDVCAob3ZlcmxheSwgIkF0dGFjaGluZyB0ZXh0IG92ZXJsYXkgaW1hZ2UgdG8gdmlkZW8gYnVmZmVyIik7CisrICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisgICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX292ZXJsYXlfY29tcG9zaXRpb25fbWV0YSAodmlkZW9fZnJhbWUsCisgICAgICAgICBvdmVybGF5LT5jb21wb3NpdGlvbik7CisgICAgIC8qIEZJWE1FOiBlbXVsYXRlIHNoYWRlZCBiYWNrZ3JvdW5kIGJveCBpZiB3YW50X3NoYWRpbmc9dHJ1ZSAqLworICAgICBnb3RvIGRvbmU7CisgICB9CisgCisrICBnaW50IG0gPSBnc3RfYnVmZmVyX25fbWVtb3J5KHZpZGVvX2ZyYW1lKTsKKysgIGdib29sZWFuIG1lbV9yZG9ubHkgPSBGQUxTRTsKKysgIEdzdE1lbW9yeSAqbWVtOworKyAgR3N0QnVmZmVyICpvcmlnID0gdmlkZW9fZnJhbWU7CisrCisrICB3aGlsZSAoLS1tPj0wKSB7CisrICAgIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSh2aWRlb19mcmFtZSwgbSk7CisrICAgIGlmIChHU1RfTUVNT1JZX0lTX1JFQURPTkxZKG1lbSkpIHsKKysgICAgICBtZW1fcmRvbmx5ID0gVFJVRTsKKysgICAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICB9CisrCisrICBpZiAobWVtX3Jkb25seSkgeworKyAgICAvLyBzaW5jZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUganVzdCBsb29rdXAgdGhlIHJlZmNvdW50IHRvIGRldGVybWluZSBpZgorKyAgICAvLyBhIGJ1ZmZlciBpcyB3cml0YWJsZSwgYW5kIGl0IHdpbGwgdXNlIF9nc3RfYnVmZmVyX2NvcHkoKSB3aGljaCBkb24ndAorKyAgICAvLyBwZXJmb3JtIGEgZGVlcCBtZW1vcnkgY29weSBldmVuIGlmIHRoZSBmbGFnIG9mIGEgbWVtb3J5IGlzIHNldCB0bworKyAgICAvLyBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkuIFNvLCB3ZSBkZXRlY3QgdGhlIG1lbW9yeSBmbGFnIGFuZCB1c2UKKysgICAgLy8gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiB3aXRoIEdTVF9CVUZGRVJfQ09QWV9ERUVQIHBhcmFtZXRlciB0byBwZXJmb3JtCisrICAgIC8vIGRlZXAgbWVtb3J5IGNvcHkuIGlmIHRoZSBhbGxvY2F0b3Igb2YgYSBtZW1vcnkgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weQorKyAgICAvLyBpbnRlcmZhY2UsIHRoZSBpdCB3aWxsIHJldHVybiBOVUxMLCBpZiB0aGlzIGNhc2UsIHdlIGNhbiB1c2UKKysgICAgLy8gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgdG8gZ2V0IGEgc2hhcmVkIG1lbW9yeSBidWZmZXIgb3IgdGhlIG9yaWduYWwKKysgICAgLy8gYnVmZmVyIGlmIHRoZSBidWZmZXIncyByZWZjb3VudCBpcyAxLgorKyAgICBHc3RCdWZmZXIgKm5ld19idWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uICh2aWRlb19mcmFtZSwKKysgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9BTEwgfCBHU1RfQlVGRkVSX0NPUFlfREVFUCwgMCwgLTEpOworKworKyAgICBHU1RfREVCVUdfT0JKRUNUIChvdmVybGF5LCAiY29weSAlcyB2aWRlbyBmcmFtZSBidWZmZXIgJXAgLT4gJXAiLAorKyAgICAgICAgZ190eXBlX25hbWUgKEdTVF9NSU5JX09CSkVDVF9UWVBFICh2aWRlb19mcmFtZSkpLCB2aWRlb19mcmFtZSwgbmV3X2J1Zik7CisrCisrICAgIGlmICghbmV3X2J1ZikgeworKyAgICAgIC8vbWF5YmUgdGhlIGFsbG9jYXRvciBkb24ndCBzdXBwb3J0IG1lbV9jb3B5IGludGVyZmFjZSwgdGhlIHdlIGp1c3QgdXNlCisrICAgICAgLy9nc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB0byBnZXQgYSB3cml0YWJsZSBidWZmZXIuCisrICAgICAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKHZpZGVvX2ZyYW1lKTsKKysgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG5ld19idWYsIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZKTsKKysgICAgICB2aWRlb19mcmFtZSA9IG5ld19idWY7CisrICAgIH0KKysKKysgICAgaWYgKCF2aWRlb19mcmFtZSkgeworKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob3ZlcmxheSwgIm1ha2Ugd3JpdGFibGUgYnVmZmVyIGZhaWxlZCIpOworKyAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKysgICAgfQorKworKyAgICBtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSh2aWRlb19mcmFtZSk7CisrICAgIHdoaWxlICgtLW0+PTApIHsKKysgICAgICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkodmlkZW9fZnJhbWUsIG0pOworKyAgICAgIEdTVF9NRU1PUllfRkxBR19VTlNFVCAobWVtLCBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpOworKyAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisrICB9CisrCisgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJm92ZXJsYXktPmluZm8sIHZpZGVvX2ZyYW1lLAorICAgICAgICAgICBHU1RfTUFQX1JFQURXUklURSkpCisgICAgIGdvdG8gaW52YWxpZF9mcmFtZTsKK0BAIC0xOTE4LDYgKzE5NzQsMTggQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X3B1c2hfZnJhbWUgKEdzdEJhc2VUZXh0T3ZlcmxheSAqIG92ZXJsYXksCisgCisgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZSk7CisgCisrICBpZiAobWVtX3Jkb25seSAmJiBvcmlnID09IHZpZGVvX2ZyYW1lKSB7CisrICAgIC8vaWYgd2UgdXNlZCB0aGUgb3JpZ2luYWwgYnVmZmVyIGFuZCBpdCdzIG1lbSBpcyBzZXQgdG8gcmVhZCBvbmx5LAorKyAgICAvL3JlY292ZXIgdGhlIG1lbW9yeSByZWFkeSBvbmx5IGZsYWcgc2luY2Ugd2UgdW5zZXQgaXQgYmVmb3JlCisrICAgIC8vIGdzdF92aWRlb19mcmFtZV9tYXAgKCkKKysgICAgbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkodmlkZW9fZnJhbWUpOworKyAgICB3aGlsZSAoLS1tPj0wKSB7CisrICAgICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5KHZpZGVvX2ZyYW1lLCBtKTsKKysgICAgICBHU1RfTUVNT1JZX0ZMQUdTKG1lbSkgfD0gKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSk7CisrICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgICAgfQorKyAgfQorKworIGRvbmU6CisgCisgICByZXR1cm4gZ3N0X3BhZF9wdXNoIChvdmVybGF5LT5zcmNwYWQsIHZpZGVvX2ZyYW1lKTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtdmlkZW8tZnJhbWUtRG9uLXQtcmVmLWJ1ZmZlcnMtdHdpY2Utd2hlbi1tYXBwaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjQ3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitGcm9tIDI2OWY2NDJjNDVkODVjZmQ2MzBlZDQ5MDQ3OGU2YmQ2YjcxYTc2N2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogVHVlLCAxNiBTZXAgMjAxNCAwMTowNzoxOCArMDMwMAorU3ViamVjdDogW1BBVENIXSB2aWRlby1mcmFtZTogRG9uJ3QgcmVmIGJ1ZmZlcnMgdHdpY2Ugd2hlbiBtYXBwaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorLS0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitpbmRleCAwMWYyM2MwLi44YTlhZTk2IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitAQCAtMTA1LDcgKzEwNSw3IEBAIGdzdF92aWRlb19mcmFtZV9tYXBfaWQgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgR3N0VmlkZW9JbmZvICogaW5mbywKKyAgICAgICBmcmFtZS0+ZGF0YVtpXSA9IGZyYW1lLT5tYXBbMF0uZGF0YSArIGluZm8tPm9mZnNldFtpXTsKKyAgICAgfQorICAgfQorLSAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworKyAgZnJhbWUtPmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorICAgICBnc3RfYnVmZmVyX3JlZiAoZnJhbWUtPmJ1ZmZlcik7CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzE0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLWdzdHBsYXlzaW5rLWRvbi10LXNldC1hc3luYy1vZi1jdXN0b20tdGV4dC1zaW5rLXRvLWYucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAwYTc4NTU1ZWE2YzhjMmYxZWUyN2VlNDcwN2U4ZDdhYTAwYWI3YTY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE0OjE1OjI1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBnc3RwbGF5c2luazogZG9uJ3Qgc2V0IGFzeW5jIG9mIGN1c3RvbSB0ZXh0LXNpbmsgdG8KKyBmYWxzZQorCitzZXQgYXN5bmMgdG8gZmFsc2UgbGVhZCB0byBBL1Ygc3luYyBwcm9ibGVtIHdoZW4gc2Vla2luZy4KK3RoZSBwcmVyb2xsIG5lZWQgdXNlIEdBUCBldmVudCBpbnN0ZWFkIG9mIHNldCBhc3luYyB0byBmYWxzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTldCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMgYi9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGY1YTJkNDIuLmZiYTAxNzIKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworQEAgLTI0MDgsNyArMjQwOCw3IEBAIGdlbl90ZXh0X2NoYWluIChHc3RQbGF5U2luayAqIHBsYXlzaW5rKQorICAgICAgICAgICBHX1RZUEVfQk9PTEVBTik7CisgICAgICAgaWYgKGVsZW0pIHsKKyAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGUgc3BhcnNlIHN1YnRpdGxlcyBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgcHJlcm9sbCAqLworLSAgICAgICAgZ19vYmplY3Rfc2V0IChlbGVtLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7CisrICAgICAgICAvL2dfb2JqZWN0X3NldCAoZWxlbSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOworICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGxheXNpbmssICJhZGRpbmcgY3VzdG9tIHRleHQgc2luayIpOworICAgICAgICAgZ3N0X2Jpbl9hZGQgKGJpbiwgY2hhaW4tPnNpbmspOworICAgICAgICAgLyogTk9URSBzdHJlYW1zeW5jaHJvbml6ZXIgbmVlZHMgc3RyZWFtcyBkZWNvdXBsZWQgKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY1YjVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIDQwYTI5M2Q0NGQxYWVjY2Y1ZWI4ZTg2ZjIzYTBiMTM2NjYxMTFjNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAxNDozOToxNiArMDMwMAorU3ViamVjdDogW1BBVENIIDIvM10gdmlkZW8tZnJhbWU6IEFkZCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGCisKK1RoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBidWZmZXIgaXMgbm90IHJlZmZlZCBhbm90aGVyIHRpbWUgd2hlbgorc3RvcmluZyBpdCBpbiB0aGUgR3N0VmlkZW9GcmFtZSwga2VlcGluZyBpdCB3cml0YWJsZSBpZiBpdCB3YXMKK3dyaXRhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYxMTgKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIHwgICAgOSArKysrKysrKy0KKyBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaCB8ICAgMTggKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitpbmRleCA1MzdjZjcwLi4wMWYyM2MwIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitAQCAtMTA2LDYgKzEwNiw5IEBAIGdzdF92aWRlb19mcmFtZV9tYXBfaWQgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgR3N0VmlkZW9JbmZvICogaW5mbywKKyAgICAgfQorICAgfQorICAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworKyAgaWYgKChmbGFncyAmIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpID09IDApCisrICAgIGdzdF9idWZmZXJfcmVmIChmcmFtZS0+YnVmZmVyKTsKKysKKyAgIGZyYW1lLT5tZXRhID0gbWV0YTsKKyAKKyAgIC8qIGJ1ZmZlciBmbGFncyBlbmhhbmNlIHRoZSBmcmFtZSBmbGFncyAqLworQEAgLTE4OSwxMSArMTkyLDEzIEBAIGdzdF92aWRlb19mcmFtZV91bm1hcCAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQorICAgR3N0QnVmZmVyICpidWZmZXI7CisgICBHc3RWaWRlb01ldGEgKm1ldGE7CisgICBnaW50IGk7CisrICBHc3RNYXBGbGFncyBmbGFnczsKKyAKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZyYW1lICE9IE5VTEwpOworIAorICAgYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKKyAgIG1ldGEgPSBmcmFtZS0+bWV0YTsKKysgIGZsYWdzID0gZnJhbWUtPm1hcFswXS5mbGFnczsKKyAKKyAgIGlmIChtZXRhKSB7CisgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZS0+aW5mby5maW5mby0+bl9wbGFuZXM7IGkrKykgeworQEAgLTIwMiw3ICsyMDcsOSBAQCBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKKyAgIH0gZWxzZSB7CisgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmZyYW1lLT5tYXBbMF0pOworICAgfQorLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKysKKysgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorKyAgICBnc3RfYnVmZmVyX3VucmVmIChmcmFtZS0+YnVmZmVyKTsKKyB9CisgCisgLyoqCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmggYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAoraW5kZXggNjI3ZmFiMC4uZjhlNjMwNCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAorQEAgLTE0OSw2ICsxNDksMjQgQEAgdHlwZWRlZiBlbnVtIHsKKyAgIEdTVF9WSURFT19CVUZGRVJfRkxBR19MQVNUICAgICAgICA9IChHU1RfQlVGRkVSX0ZMQUdfTEFTVCA8PCA4KQorIH0gR3N0VmlkZW9CdWZmZXJGbGFnczsKKyAKKysvKioKKysgKiBHc3RWaWRlb0J1ZmZlckZsYWdzOgorKyAqIEBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGOiAgRG9uJ3QgdGFrZSBhbm90aGVyIHJlZmVyZW5jZSBvZiB0aGUgYnVmZmVyIGFuZCBzdG9yZSBpdCBpbgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEdzdFZpZGVvRnJhbWUuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBidWZmZXIgc3RheXMKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlIHdoaWxlIHRoZSBmcmFtZSBpcyBtYXBwZWQsIGJ1dCByZXF1aXJlcyB0aGF0IHRoZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHJlZmVyZW5jZSBzdGF5cyB2YWxpZCB1bnRpbCB0aGUgZnJhbWUgaXMgdW5tYXBwZWQgYWdhaW4uCisrICogQEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19MQVNUOiAgICBPZmZzZXQgdG8gZGVmaW5lIG1vcmUgZmxhZ3MKKysgKgorKyAqIEFkZGl0aW9uYWwgbWFwcGluZyBmbGFncyBmb3IgZ3N0X3ZpZGVvX2ZyYW1lX21hcCgpLgorKyAqCisrICogU2luY2U6IDEuNgorKyAqLworK3R5cGVkZWYgZW51bSB7CisrICBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGICAgPSAoR1NUX01BUF9GTEFHX0xBU1QgPDwgMCksCisrICBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTEFTVCAgICAgPSAoR1NUX01BUF9GTEFHX0xBU1QgPDwgOCkKKysgIC8qIDggbW9yZSBmbGFncyBwb3NzaWJsZSBhZnRlcndhcmRzICovCisrfSBHc3RWaWRlb0ZyYW1lTWFwRmxhZ3M7CisrCisgR19FTkRfREVDTFMKKyAKKyAjZW5kaWYgLyogX19HU1RfVklERU9fRlJBTUVfSF9fICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmJlYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2gKQEAgLTAsMCArMSwyMjUgQEAKK0Zyb20gYmU2MTYzY2ZhM2EyNTU0OTNmOWQ3NWJhZDk1NDFjYmZlMTcyM2ZlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNDoxNzoxMCArMDgwMAorU3ViamVjdDogW1BBVENIIDMvNF0gc3NhcGFyc2U6IGVuaGFuY2UgU1NBIHRleHQgbGluZXMgcGFyc2luZy4KKworc29tZSBwYXJzZXIgd2lsbCBwYXNzIGluIHRoZSBvcmlnaW5hbCBzc2EgdGV4dCBsaW5lIHdoaWNoIHN0YXJ0cyB3aXRoICJEaWFsb2c6IgorYW5kIHRoZXJlJ3MgYXJlIG1heWJlIG11bHRpcGxlIERpYWxvZyBsaW5lcyBpbiBvbmUgaW5wdXQgYnVmZmVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ5Nl0KKworU2lnbmVkLW9mZi1ieTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYyBiL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggMDZlY2VmOS4uMGFiNWRjZQorLS0tIGEvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMKKysrKyBiL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCitAQCAtMjYwLDYgKzI2MCw3IEBAIGdzdF9zc2FfcGFyc2VfcmVtb3ZlX292ZXJyaWRlX2NvZGVzIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCkKKyAgKiBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZToKKyAgKiBAcGFyc2U6IGNhbGxlciBlbGVtZW50CisgICogQHR4dDogdGV4dCB0byBwdXNoCisrICogQHNpemU6IHRleHQgc2l6ZSBuZWVkIHRvIGJlIHBhcnNlCisgICogQHN0YXJ0OiB0aW1lc3RhbXAgZm9yIHRoZSBidWZmZXIKKyAgKiBAZHVyYXRpb246IGR1cmF0aW9uIGZvciB0aGUgYnVmZmVyCisgICoKK0BAIC0yNjksMjcgKzI3MCwxMzMgQEAgZ3N0X3NzYV9wYXJzZV9yZW1vdmVfb3ZlcnJpZGVfY29kZXMgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0KQorICAqIFJldHVybnM6IHJlc3VsdCBvZiB0aGUgcHVzaCBvZiB0aGUgY3JlYXRlZCBidWZmZXIKKyAgKi8KKyBzdGF0aWMgR3N0Rmxvd1JldHVybgorLWdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCwKKytnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQsIGdpbnQgc2l6ZSwKKyAgICAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBHc3RDbG9ja1RpbWUgZHVyYXRpb24pCisgeworICAgR3N0Rmxvd1JldHVybiByZXQ7CisgICBHc3RCdWZmZXIgKmJ1ZjsKKy0gIGdjaGFyICp0LCAqZXNjYXBlZDsKKysgIGdjaGFyICp0LCAqdGV4dCwgKnAsICplc2NhcGVkLCAqcF9zdGFydCwgKnBfZW5kOworICAgZ2ludCBudW0sIGksIGxlbjsKKysgIEdzdENsb2NrVGltZSBzdGFydF90aW1lID0gR19NQVhVSU5UNjQsIGVuZF90aW1lID0gMDsKKyAKKy0gIG51bSA9IGF0b2kgKHR4dCk7CistICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJQYXJzaW5nIGxpbmUgIyVkIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKy0gICAgICBudW0sIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSk7CistCistICAvKiBza2lwIGFsbCBub24tdGV4dCBmaWVsZHMgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCAqLworKyAgcCA9IHRleHQgPSBnX21hbGxvYyhzaXplICsgMSk7CisrICAqcCA9ICdcMCc7CisgICB0ID0gdHh0OworLSAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworLSAgICB0ID0gc3RyY2hyICh0LCAnLCcpOworKworKyAgLyogdGhlcmUgYXJlIG1heSBoYXZlIG11bHRpcGxlIGRpYWxvZ3VlIGxpbmVzIGF0IGEgdGltZSAqLworKyAgd2hpbGUgKCp0KSB7CisrICAgIC8qIGlnbm9yZSBsZWFkaW5nIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMgKi8KKysgICAgd2hpbGUgKGlzc3BhY2UoKnQpKQorKyAgICAgIHQrKzsKKysKKysgICAgLyogaWdub3JlIEZvcm1hdDogYW5kIFN0eWxlOiBsaW5lcyAqLworKyAgICBpZiAoc3RybmNtcCh0LCAiRm9ybWF0OiIsIDcpID09IDAgfHwgc3RybmNtcCh0LCAiU3R5bGU6IiwgNikgPT0gMCkgeworKyAgICAgIHdoaWxlICgqdCAhPSAnXDAnICYmICp0ICE9ICdcbicpIHsKKysgICAgICAgIHQrKzsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKCp0ID09ICdcMCcpCisrICAgICAgYnJlYWs7CisrCisrICAgIC8qIGNvbnRpbnVlIHdpdGggbmV4dCBsaW5lICovCisrICAgIGlmICgqdCA9PSAnXG4nKSB7CisrICAgICAgdCsrOworKyAgICAgIGNvbnRpbnVlOworKyAgICB9CisrCisrICAgIGlmKHN0cm5jbXAodCwgIkRpYWxvZ3VlOiIsIDkpICE9IDApIHsKKysgICAgICAvKiBub3Qgc3RhcnRlZCB3aXRoICJEaWFsb2d1ZToiLCBpdCBtdXN0IGJlIGEgbGluZSB0cmltbWVkIGJ5IGRlbXV4ZXIgKi8KKysgICAgICBudW0gPSBhdG9pICh0KTsKKysgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJQYXJzaW5nIGxpbmUgIyVkIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKysgICAgICAgICAgbnVtLCBHU1RfVElNRV9BUkdTIChzdGFydCkpOworKworKyAgICAgIC8qIHNraXAgYWxsIG5vbi10ZXh0IGZpZWxkcyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0ICovCisrICAgICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworKyAgICAgICAgdCA9IHN0cmNociAodCwgJywnKTsKKysgICAgICAgIGlmICh0ID09IE5VTEwpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgKyt0OworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICAvKiBzdGFydGVkIHdpdGggIkRpYWxvZ3VlOiIsIHVwZGF0ZSB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uICovCisrICAgICAgLyogdGltZSBmb3JtYXQgYXJlIGxpa2UgRGlhbG9nOk1hcmssMDowMDowMS4wMiwwOjAwOjAzLjA0LHh4LHh4eCwuLi4gKi8KKysgICAgICBndWludCBob3VyLCBtaW4sIHNlYywgbXNlYywgbGVuOworKyAgICAgIEdzdENsb2NrVGltZSB0bXA7CisrICAgICAgZ2NoYXIgdF9zdHJbMTJdID0gezB9OworKworKyAgICAgIC8qIGZpbmQgdGhlIGZpcnN0ICcsJyAqLworKyAgICAgIHBfc3RhcnQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgaWYgKHBfc3RhcnQpCisrICAgICAgICBwX2VuZCA9IHN0cmNociAoKytwX3N0YXJ0LCAnLCcpOworKworKyAgICAgIGlmIChwX3N0YXJ0ICYmIHBfZW5kKSB7CisrICAgICAgICAvKiBjb3B5IHRleHQgYmV0d2VlbiBmaXJzdCAnLCcgYW5kIHNlY29uZCAnLCcgKi8KKysgICAgICAgIHN0cm5jcHkodF9zdHIsIHBfc3RhcnQsIHBfZW5kIC0gcF9zdGFydCk7CisrICAgICAgICBpZiAoc3NjYW5mICh0X3N0ciwgIiV1OiV1OiV1LiV1IiwgJmhvdXIsICZtaW4sICZzZWMsICZtc2VjKSA9PSA0KSB7CisrICAgICAgICAgIHRtcCA9ICgoaG91ciozNjAwKSArIChtaW4qNjApICsgc2VjKSAqIEdTVF9TRUNPTkQgKyBtc2VjKkdTVF9NU0VDT05EOworKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkdldCBzdGFydCB0aW1lOiUwMmQ6JTAyZDolMDJkOiUwM2RcbiIsCisrICAgICAgICAgICAgICBob3VyLCBtaW4sIHNlYywgbXNlYyk7CisrICAgICAgICAgIGlmIChzdGFydF90aW1lID4gdG1wKQorKyAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0bXA7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAorKyAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBzc2Egc3RhcnQgdGltZXN0YW1wIHN0cmluZyA6JXMiLCB0X3N0cik7CisrICAgICAgICB9CisrCisrICAgICAgICBwX3N0YXJ0ID0gcF9lbmQ7CisrICAgICAgICBwX2VuZCA9IHN0cmNociAoKytwX3N0YXJ0LCAnLCcpOworKyAgICAgICAgaWYgKHBfZW5kKSB7CisrICAgICAgICAgIC8qIGNvcHkgdGV4dCBiZXR3ZWVuIHNlY29uZCAnLCcgYW5kIHRoaXJkICcsJyAqLworKyAgICAgICAgICBzdHJuY3B5KHRfc3RyLCBwX3N0YXJ0LCBwX2VuZCAtIHBfc3RhcnQpOworKyAgICAgICAgICBpZiAoc3NjYW5mICh0X3N0ciwgIiV1OiV1OiV1LiV1IiwgJmhvdXIsICZtaW4sICZzZWMsICZtc2VjKSA9PSA0KSB7CisrICAgICAgICAgICAgdG1wID0gKChob3VyKjM2MDApICsgKG1pbio2MCkgKyBzZWMpKkdTVF9TRUNPTkQgKyBtc2VjKkdTVF9NU0VDT05EOworKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFyc2UsICJHZXQgZW5kIHRpbWU6JTAyZDolMDJkOiUwMmQ6JTAzZFxuIiwKKysgICAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMsIG1zZWMpOworKyAgICAgICAgICAgIGlmIChlbmRfdGltZSA8IHRtcCkKKysgICAgICAgICAgICAgIGVuZF90aW1lID0gdG1wOworKyAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCisrICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugc3NhIGVuZCB0aW1lc3RhbXAgc3RyaW5nIDolcyIsIHRfc3RyKTsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysKKysgICAgICAvKiBub3cgc2tpcCBhbGwgbm9uLXRleHQgZmllbGRzIGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgKi8KKysgICAgICBmb3IgKGkgPSAwOyBpIDw9IDg7ICsraSkgeworKyAgICAgICAgdCA9IHN0cmNociAodCwgJywnKTsKKysgICAgICAgIGlmICh0ID09IE5VTEwpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgKyt0OworKyAgICAgIH0KKysgICAgfQorKworKyAgICAvKiBsaW5lIGVuZCBiZWZvcmUgZXhwZWN0ZWQgbnVtYmVyIG9mICcsJywgbm90IGEgRGlhbG9ndWUgbGluZSAqLworICAgICBpZiAodCA9PSBOVUxMKQorLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKy0gICAgKyt0OworKyAgICAgIGJyZWFrOworKworKyAgICAvKiBpZiBub3QgdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgcHJldmlvdXMgbGluZSBpcyAnXDAnLAorKyAgICAgKiB0aGVuIHJlcGxhY2UgaXQgd2l0aCAnXE4nICovCisrICAgIGlmIChwICE9IHRleHQgJiYgKnAgPT0gJ1wwJykgeworKyAgICAgICpwKysgPSAnXFwnOworKyAgICAgICpwKysgPSAnTic7CisrICAgIH0KKysKKysgICAgLyogY29weSBhbGwgYWN0dWFsIHRleHQgb2YgdGhpcyBsaW5lICovCisrICAgIHdoaWxlICgoKnQgIT0gJ1wwJykgJiYgKCp0ICE9ICdcbicpKQorKyAgICAgICpwKysgPSAqdCsrOworKworKyAgICAvKiBhZGQgYSB0ZXJtaW5hdG9yIGF0IHRoZSBlbmQgKi8KKysgICAgKnAgPSAnXDAnOworKyAgfQorKworKyAgLyogbm90IHZhbGlkIHRleHQgZm91bmQgaW4gdGhpcyBidWZmZXIgcmV0dXJuIE9LIHRvIGxldCBjYWxsZXIgdW5yZWYgYnVmZmVyICovCisrICBpZiAoc3RybGVuKHRleHQpIDw9IDApIHsKKysgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIk5vdCB2YWxpZCB0ZXh0IGZvdW5kIGluIHRoaXMgYnVmZmVyXG4iKTsKKysgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgfQorIAorKyAgdCA9IHRleHQ7CisgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJUZXh0IDogJXMiLCB0KTsKKyAKKyAgIGlmIChnc3Rfc3NhX3BhcnNlX3JlbW92ZV9vdmVycmlkZV9jb2RlcyAocGFyc2UsIHQpKSB7CitAQCAtMzA3LDEzICs0MTQsMjIgQEAgZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0LAorICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGVzY2FwZWQsIGxlbiArIDEpOworICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoYnVmLCBsZW4pOworICAgZ19mcmVlIChlc2NhcGVkKTsKKysgIGdfZnJlZSh0KTsKKysKKysgIGlmIChzdGFydF90aW1lICE9IEdfTUFYVUlOVDY0KQorKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0X3RpbWU7CisrICBlbHNlCisrICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gc3RhcnQ7CisgCistICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0OworLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGR1cmF0aW9uOworKyAgaWYgKGVuZF90aW1lID4gc3RhcnRfdGltZSkKKysgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGVuZF90aW1lIC0gc3RhcnRfdGltZTsKKysgIGVsc2UKKysgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGR1cmF0aW9uOworIAorICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUHVzaGluZyBidWZmZXIgd2l0aCB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFUCistICAgICAgIiBhbmQgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdGFydCksCistICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKKysgICAgICAiIGFuZCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCisrICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpLAorKyAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpKTsKKyAKKyAgIHJldCA9IGdzdF9wYWRfcHVzaCAocGFyc2UtPnNyY3BhZCwgYnVmKTsKKyAKK0BAIC0zMzMsNiArNDQ5LDcgQEAgZ3N0X3NzYV9wYXJzZV9jaGFpbiAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCisgICBHc3RDbG9ja1RpbWUgdHM7CisgICBnY2hhciAqdHh0OworICAgR3N0TWFwSW5mbyBtYXA7CisrICBnaW50IHNpemU7CisgCisgICBpZiAoR19VTkxJS0VMWSAoIXBhcnNlLT5mcmFtZWQpKQorICAgICBnb3RvIG5vdF9mcmFtZWQ7CitAQCAtMzUwLDEzICs0NjcsMTQgQEAgZ3N0X3NzYV9wYXJzZV9jaGFpbiAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCisgICAvKiBtYWtlIGRvdWJsZS1zdXJlIGl0J3MgMC10ZXJtaW5hdGVkIGFuZCBhbGwgKi8KKyAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7CisgICB0eHQgPSBnX3N0cm5kdXAgKChnY2hhciAqKSBtYXAuZGF0YSwgbWFwLnNpemUpOworKyAgc2l6ZSA9IG1hcC5zaXplOworICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKKyAKKyAgIGlmICh0eHQgPT0gTlVMTCkKKyAgICAgZ290byBlbXB0eV90ZXh0OworIAorICAgdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKy0gIHJldCA9IGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChwYXJzZSwgdHh0LCB0cywgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSk7CisrICByZXQgPSBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAocGFyc2UsIHR4dCwgc2l6ZSwgdHMsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOworIAorICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAmJiBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodHMpKSB7CisgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIDNhN2NkY2RmYzljNWIwZDIwMzk0ZmU1MWIzYjhjZGEyMzkzMWNhNmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAxNDo0MTowMSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gdmlkZW9maWx0ZXI6IFVzZSBuZXcgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYxMTgKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jIHwgICAyMyArKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworaW5kZXggZTFmYTJjMS4uODc0YjJlOCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworQEAgLTI2MCwyMyArMjYwLDE1IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGluYnVmLAorICAgaWYgKGZjbGFzcy0+dHJhbnNmb3JtX2ZyYW1lKSB7CisgICAgIEdzdFZpZGVvRnJhbWUgaW5fZnJhbWUsIG91dF9mcmFtZTsKKyAKKy0gICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmaW5fZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGluYnVmLCBHU1RfTUFQX1JFQUQpKQorKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZpbl9mcmFtZSwgJmZpbHRlci0+aW5faW5mbywgaW5idWYsCisrICAgICAgICAgICAgR1NUX01BUF9SRUFEIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKyAgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmb3V0X2ZyYW1lLCAmZmlsdGVyLT5vdXRfaW5mbywgb3V0YnVmLAorLSAgICAgICAgICAgIEdTVF9NQVBfV1JJVEUpKQorKyAgICAgICAgICAgIEdTVF9NQVBfV1JJVEUgfCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSkKKyAgICAgICBnb3RvIGludmFsaWRfYnVmZmVyOworIAorLSAgICAvKiBHc3RWaWRlb0ZyYW1lIGhhcyBhbm90aGVyIHJlZmVyZW5jZSwgc28gdGhlIGJ1ZmZlciBsb29rcyB1bndyaXRlYWJsZSwKKy0gICAgICogbWVhbmluZyB0aGF0IHdlIGNhbid0IGF0dGFjaCBhbnkgbWV0YXMgb3IgYW55dGhpbmcgdG8gaXQuIE90aGVyCistICAgICAqIG1hcCgpIGZ1bmN0aW9ucyBsaWtlIGdzdF9idWZmZXJfbWFwKCkgZG9uJ3QgZ2V0IGFub3RoZXIgcmVmZXJlbmNlCistICAgICAqIG9mIHRoZSBidWZmZXIgYW5kIGV4cGVjdCB0aGUgYnVmZmVyIHJlZmVyZW5jZSB0byBiZSBrZXB0IHVudGlsCistICAgICAqIHRoZSBidWZmZXIgaXMgdW5tYXBwZWQgYWdhaW4uICovCistICAgIGdzdF9idWZmZXJfdW5yZWYgKGluYnVmKTsKKy0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKKyAgICAgcmVzID0gZmNsYXNzLT50cmFuc2Zvcm1fZnJhbWUgKGZpbHRlciwgJmluX2ZyYW1lLCAmb3V0X2ZyYW1lKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKGluYnVmKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKG91dGJ1Zik7CisgCisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJm91dF9mcmFtZSk7CisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmluX2ZyYW1lKTsKK0BAIC0zMTcsNyArMzA5LDcgQEAgZ3N0X3ZpZGVvX2ZpbHRlcl90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQorICAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOworICAgICBHc3RNYXBGbGFncyBmbGFnczsKKyAKKy0gICAgZmxhZ3MgPSBHU1RfTUFQX1JFQUQ7CisrICAgIGZsYWdzID0gR1NUX01BUF9SRUFEIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRjsKKyAKKyAgICAgaWYgKCFnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2ggKHRyYW5zKSkKKyAgICAgICBmbGFncyB8PSBHU1RfTUFQX1dSSVRFOworQEAgLTMyNSwxNCArMzE3LDcgQEAgZ3N0X3ZpZGVvX2ZpbHRlcl90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQorICAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJmZpbHRlci0+aW5faW5mbywgYnVmLCBmbGFncykpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKy0gICAgLyogR3N0VmlkZW9GcmFtZSBoYXMgYW5vdGhlciByZWZlcmVuY2UsIHNvIHRoZSBidWZmZXIgbG9va3MgdW53cml0ZWFibGUsCistICAgICAqIG1lYW5pbmcgdGhhdCB3ZSBjYW4ndCBhdHRhY2ggYW55IG1ldGFzIG9yIGFueXRoaW5nIHRvIGl0LiBPdGhlcgorLSAgICAgKiBtYXAoKSBmdW5jdGlvbnMgbGlrZSBnc3RfYnVmZmVyX21hcCgpIGRvbid0IGdldCBhbm90aGVyIHJlZmVyZW5jZQorLSAgICAgKiBvZiB0aGUgYnVmZmVyIGFuZCBleHBlY3QgdGhlIGJ1ZmZlciByZWZlcmVuY2UgdG8gYmUga2VwdCB1bnRpbAorLSAgICAgKiB0aGUgYnVmZmVyIGlzIHVubWFwcGVkIGFnYWluLiAqLworLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICAgICByZXMgPSBmY2xhc3MtPnRyYW5zZm9ybV9mcmFtZV9pcCAoZmlsdGVyLCAmZnJhbWUpOworLSAgICBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKKyAKKyAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOworICAgfSBlbHNlIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxMzkxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIGVkMDljOGZkMmM5YzJiNTM4NGI3MmNjNzBhZjM3MjhiZTY2OTRlNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTQ6MjA6MjYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIHN1YnBhcnNlOiBzZXQgbmVlZF9zZWdtZW50IGFmdGVyIHNpbmsgcGFkIHJlY2VpdmVkCisgR1NUX0VWRU5UX1NFR01FTlQKKworc3VicGFyc2Ugd29ya3MgaW4gcHVzaCBtb2RlLCBjaGFpbiBmdW5jaXRvbiB3aWxsIGJlIGNhbGxlZCBvbmNlCit1cCBzdHJlYW0gZWxlbWVudCBmaW5pc2hlZCB0aGUgc2Vla2luZyBhbmQgZmx1c2hpbmcuCitpZiBzZXQgbmVlZF9zZWdtZW50IGZsYWcgaW4gc3JjIHBhZCBldmVudCBoYW5kbGVyLCB0aGUgc2VnbWVudAorZXZlbnQgd2lsbCBiZSBwdXNoZWQgZWFybGllciwgcmVzdWx0IGluIHRoZSBzdWJ0aXRsZSB0ZXh0IHdpbGwKK2JlIHNlbmQgb3V0IHRvIGRvd24gc3RyZWFtIGZyb20gdGhlIGJlZ2lubmluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OThdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMgYi9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGI1NjVlOTMuLjc3NDFjY2MKKy0tLSBhL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jCisrKysgYi9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworQEAgLTI2NiwyMiArMjY2LDIwIEBAIGdzdF9zdWJfcGFyc2Vfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICAgIGdvdG8gYmVhY2g7CisgICAgICAgfQorIAorKyAgICAgIC8qIEFwcGx5IHRoZSBzZWVrIHRvIG91ciBzZWdtZW50ICovCisrICAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlbGYtPnNlZ21lbnQsIHJhdGUsIGZvcm1hdCwgZmxhZ3MsCisrICAgICAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworKworKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZWdtZW50IGFmdGVyIHNlZWs6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKysgICAgICAgICAgJnNlbGYtPnNlZ21lbnQpOworKworICAgICAgIC8qIENvbnZlcnQgdGhhdCBzZWVrIHRvIGEgc2Vla2luZyBpbiBieXRlcyBhdCBwb3NpdGlvbiAwLAorICAgICAgICAgIEZJWE1FOiBjb3VsZCB1c2UgYW4gaW5kZXggKi8KKyAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNpbmtwYWQsCisgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VlayAocmF0ZSwgR1NUX0ZPUk1BVF9CWVRFUywgZmxhZ3MsCisgICAgICAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9OT05FLCAwKSk7CisgCistICAgICAgaWYgKHJldCkgeworLSAgICAgICAgLyogQXBwbHkgdGhlIHNlZWsgdG8gb3VyIHNlZ21lbnQgKi8KKy0gICAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWxmLT5zZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAorLSAgICAgICAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworLQorLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNlZ21lbnQgYWZ0ZXIgc2VlazogJSIgR1NUX1NFR01FTlRfRk9STUFULAorLSAgICAgICAgICAgICZzZWxmLT5zZWdtZW50KTsKKy0KKy0gICAgICAgIHNlbGYtPm5lZWRfc2VnbWVudCA9IFRSVUU7CistICAgICAgfSBlbHNlIHsKKysgICAgICBpZiAoIXJldCkgeworICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAic2VlayB0byAwIGJ5dGVzIGZhaWxlZCIpOworICAgICAgIH0KKyAKK0BAIC0xNjMyLDggKzE2MzAsMTAgQEAgZ3N0X3N1Yl9wYXJzZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzKTsKKyAgICAgICBpZiAocy0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKKyAgICAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VsZi0+c2VnbWVudCk7CistICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIm5ld3NlZ21lbnQgKCVzKSIsCistICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlbGYtPnNlZ21lbnQuZm9ybWF0KSk7CisrICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIm5ld3NlZ21lbnQgKCVzKSAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisrICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlbGYtPnNlZ21lbnQuZm9ybWF0KSwgJnNlbGYtPnNlZ21lbnQpOworKworKyAgICAgIHNlbGYtPm5lZWRfc2VnbWVudCA9IFRSVUU7CisgCisgICAgICAgLyogaWYgbm90IHRpbWUgZm9ybWF0LCB3ZSdsbCBlaXRoZXIgc3RhcnQgd2l0aCBhIDAgdGltZXN0YW1wIGFueXdheSBvcgorICAgICAgICAqIGl0J3MgZm9sbG93aW5nIGEgc2VlayBpbiB3aGljaCBjYXNlIHdlJ2xsIGhhdmUgc2F2ZWQgdGhlIHJlcXVlc3RlZAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTU1ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50LWlmLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gYjYwOGQwMjdmZmY2ZWZjMmQxOTg4ZWJmMTY5Y2JlM2IyYjQ0YTYxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgOCBNYXkgMjAxNCAxMjowMToxNyArMDgwMAorU3ViamVjdDogW1BBVENIXSBFTkdSMDAzMTIwMzQ6IGRvIG5vdCBjaGFuZ2UgZW9zIGV2ZW50IHRvIGdhcCBldmVudCBpZiBubworIGRhdGEgaGFzIHBhc3NlZCB0byBzdHJlYW1zeW5jaHJvbml6ZXIuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcwNzQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyB8ICAgIDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitpbmRleCAzOTk3ZDFiLi4zZTE3YzU1IDEwMDY0NAorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK0BAIC00ODgsMTIgKzQ4OCwxMSBAQCBnc3Rfc3RyZWFtX3N5bmNocm9uaXplcl9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKKyAgICAgICAgIH0KKyAgICAgICAgIGdfc2xpc3RfZnJlZSAocGFkcyk7CisgICAgICAgfSBlbHNlIHsKKy0gICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIHNvbWV0aGluZyB0byByZXBsYWNlIEVPUworLSAgICAgICAgICogZm9yIHByZXJvbGwgcHVycG9zZXMgKi8KKysgICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIEVPUyBldmVudCAqLworICAgICAgICAgaWYgKCFzZWVuX2RhdGEpIHsKKyAgICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKyAKKy0gICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19nYXAgKHRpbWVzdGFtcCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisrICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworICAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ2FwX2V2ZW50KTsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjI0YmM3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorY29tbWl0IGY5NTM2NTQ0ZjVhZDE4MmI0Zjc4ZDAxNDNkMWRhYTQ1ZGQ2NGU2MjQKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCA5IDE3OjM3OjQzIDIwMTQgKzA4MDAKKworW2dzdHN0cmVhbXN5bmNocm9uaXplcl0gc2VuZCBFT1MgZXZlbnQgaW5zdGVyZCBvZiBHQVAgZXZlbnQgYXMgR0FQCitldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZSBkaWZmZXJlbnQgZHVyYXRpb24uCisgICAgCitzZW5kIEVPUyBldmVudCBpbnN0ZXJkIG9mIEdBUCBldmVudCBhcyBHQVAgZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUgZGlmZmVyZW50IGR1cmF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjY1NV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggM2UxN2M1NS4uZmY0MmQ3MiAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDg4LDE5ICs0ODgsMjQgQEAgZ3N0X3N0cmVhbV9zeW5jaHJvbml6ZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgICAgICB9CisgICAgICAgICBnX3NsaXN0X2ZyZWUgKHBhZHMpOworICAgICAgIH0gZWxzZSB7CistICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBFT1MgZXZlbnQgKi8KKysgICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIHNvbWV0aGluZyB0byByZXBsYWNlIEVPUworKyAgICAgICAgICogZm9yIHByZXJvbGwgcHVycG9zZXMgKi8KKyAgICAgICAgIGlmICghc2Vlbl9kYXRhKSB7CistICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CisrICAgICAgICAgIEdzdEV2ZW50ICplb3NfZXZlbnQ7CisgCistICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworLSAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ2FwX2V2ZW50KTsKKysgICAgICAgICAgLyogRklYTUU6IGNoYW5nZSB0byBFT1MgZXZlbnQgYXMgR0FQIGV2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlCisrICAgICAgICAgICAqIGRpZmZlcmVudCBkdXJhdGlvbiAqLworKyAgICAgICAgICBlb3NfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKysgICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGVvc19ldmVudCk7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworKyAgICAgICAgICBHc3RFdmVudCAqZW9zX2V2ZW50OworIAorICAgICAgICAgICAvKiBGSVhNRTogQWxzbyBzZW5kIGEgR0FQIGV2ZW50IHRvIGxldCBhdWRpbyBzaW5rcyBzdGFydCB0aGVpcgorICAgICAgICAgICAgKiBjbG9jayBpbiBjYXNlIHRoZXkgZGlkIG5vdCBoYXZlIGVub3VnaCBkYXRhIHlldCAqLworLSAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2dhcCAodGltZXN0YW1wLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKy0gICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisrICAgICAgICAgIC8qIEZJWE1FOiBjaGFuZ2UgdG8gRU9TIGV2ZW50IGFzIEdBUCBldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZQorKyAgICAgICAgICAgKiBkaWZmZXJlbnQgZHVyYXRpb24gKi8KKysgICAgICAgICAgZW9zX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisrICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBlb3NfZXZlbnQpOworICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMxYmU2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorY29tbWl0IDNmNzA1MmFhYzVlMDExOGE5YTllMDlmZmYyZjY1MDkxYmU0NDg5NzIKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCAyMyAxMzozNToxMyAyMDE0ICswODAwCisKK1tzdHJlYW1zeW5jaHJvbml6ZXJdIE9uZSBzdHJlYW0gY2FuIGZpbmlzaCBwbGF5YmFjay4KKyAgCitBcyBjaGFuZ2VkIEdBUCBldmVudCBFT1MgZXZlbnQsIHNvIEVPUyB3aWxsIHNlbmQgbW9yZSB0aW1lcywgd2hpY2ggd2lsbAorY2F1c2Ugc2VuZCBmdW5jdGlvbiByZXR1cm4gZXJyb3IuCitTdHJlYW1zeW5jaHJvbml6ZXIgd2lsbCBkb27igJl0IHNlbmQgc2Vjb25kIHRyYWNrIEVPUyBldmVudCBpZiBzZW5kIHRoZQorZmlyc3QgdHJhY2sgRU9TIHJldHVybiBmYWlsLiBGaXhlZCBieSBpZ25vcmUgdGhlIHJldHVybiBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY2NTVdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyBiMDY0OThAZnJlZXNjYWxlLmNvbQorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitpbmRleCBmZjQyZDcyLi5kMTczMmMzIDEwMDY0NAorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK0BAIC00ODIsNyArNDgyLDEwIEBAIGdzdF9zdHJlYW1fc3luY2hyb25pemVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAorICAgICAgICAgd2hpbGUgKGVwYWQpIHsKKyAgICAgICAgICAgcGFkID0gZXBhZC0+ZGF0YTsKKyAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUHVzaGluZyBFT1MiKTsKKy0gICAgICAgICAgcmV0ID0gcmV0ICYmIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisrICAgICAgICAgIC8qIEZJWE1FOiByZW1vdmUgZXJyb3IgY2hlY2sgYXMgR0FQIGNoYW5nZWQgdG8gRU9TIHdpbGwgc2VuZCBFT1MKKysgICAgICAgICAgICogbW9yZSB0aW1lcywgd2hpY2ggd2lsbCBjYXVzZSByZXR1cm4gZXJyb3IgYW5kIHRoZW4gZG9uJ3Qgc2VuZAorKyAgICAgICAgICAgKiBFT1MgZXZlbnQgdG8gZm9sbG93aW5nIHRyYWNrcy4gKi8KKysgICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKyAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgICAgICAgICAgZXBhZCA9IGdfc2xpc3RfbmV4dCAoZXBhZCk7CisgICAgICAgICB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU2NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDU0MGUwMmM5MmM3NWUwOGI5MDMyNjg2M2RjNzg3ZmE1Y2FkZjlkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogRnJpLCAxMyBNYXIgMjAxNSAxODowNDozMSArMDgwMAorU3ViamVjdDogW1BBVENIXSBlbmNvZGViaW46IE5lZWQgbW9yZSBidWZmZXJzIGluIG91dHB1dCBxdWV1ZSBmb3IgYmV0dGVyCisgcGVyZm9ybWFuY2UKKworTmVlZCBtb3JlIGJ1ZmZlcnMgaW4gb3V0cHV0IHF1ZXVlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxOTFdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMgfCAgICAzICstLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYyBiL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworaW5kZXggNjcyOGU1OC4uMzJkYWFlNCAxMDA2NDQKKy0tLSBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworKysrIGIvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCitAQCAtMTEzOCw4ICsxMTM4LDcgQEAgX2NyZWF0ZV9zdHJlYW1fZ3JvdXAgKEdzdEVuY29kZUJpbiAqIGViaW4sIEdzdEVuY29kaW5nUHJvZmlsZSAqIHNwcm9mLAorICAgICogV2Ugb25seSB1c2UgYSAxYnVmZmVyIGxvbmcgcXVldWUgaGVyZSwgdGhlIGFjdHVhbCBxdWV1ZWluZyB3aWxsIGJlIGRvbmUKKyAgICAqIGluIHRoZSBpbnB1dCBxdWV1ZSAqLworICAgbGFzdCA9IHNncm91cC0+b3V0cXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOworLSAgZ19vYmplY3Rfc2V0IChzZ3JvdXAtPm91dHF1ZXVlLCAibWF4LXNpemUtYnVmZmVycyIsIChndWludDMyKSAxLAorLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludDMyKSAwLCAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAorKyAgZ19vYmplY3Rfc2V0IChzZ3JvdXAtPm91dHF1ZXVlLCAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAorICAgICAgICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKKyAKKyAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChlYmluKSwgc2dyb3VwLT5vdXRxdWV1ZSk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9maXgtaWQzZGVtdXgtdXRmMTYtdG8tdXRmOC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjNmNzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorQXV0aG9yOiBMeW9uIFdhbmcgPGIxMjY5NkBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDkgMTc6Mzc6NDMgMjAxNCArMDgwMAorCitbaWQzdjJmcmFtZXNdIEJ1ZyBmaXggZm9yIGlkM2RlbXV4IGlzc3VlCisKK0ZpeCB0aGUgaXNzdWUgdGhhdCBpZDMgdGFncyB1dGYxNiBjaGFyYXRlcnMgY2Fubm90IGJlIGV4dHJlYWN0ZWQgaW4gaWQzZGVtdXgKK3doZW4gSSB0cmllZCB0byBnZXQgdGhlIGlkM3YyIHRhZyBzdWNoIGFzIFRJVDIsIFRBTEIgZXRjLiBpdCB3aWxsIHJldHVybiBleHRyYWMKK2ZhaWxlZC4KKworQ2hlY2tlZCBpbiBpZDN2MmZyYW1lLmMsICBXaGVuIHBhcnNlIHRoZSBVVEYtMTYgc3RyZWFtcywgaXQgdXNlZCBnX2NvbnZlcnQoKSB0bworY29udmVydCB0aGUgYnVmZmVyIGZyb20gVVRGLTE2IHRvIFVURi04LCBob3dldmVyIGl0IHdpbGwgcmV0dXJuIGVyciB0aGF0IHRoaXMKK2NvbnZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCB3aGljaCBjYXVzZSB0aGUgZXh0cmFjdGlvbiBmYWlsZWQgd2l0aCB0aGVzZSBVVEYtMTYKK2NoYXJhY3RlcnMuCisKK0luIHRoZSBwYXRjaCwgdXNlIGdfdXRmMTZfdG9fdXRmOCgpIGluc3RlYWQgb2YgZ19jb252ZXJ0LCB3aGljaCBjYW4gY29udmVydCB0aGUKK2NoYXJhY3RlciBmb3JtYXQgc3VjY2Vzc2Z1bGx5LgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMTQ0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorCitTaWduZWQtb2ZmLWJ5OiBMeW9uIFdhbmcgPGIxMjY5NkBmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jIGIvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggMzc4NWMyYS4uN2I5ZDhhYworLS0tIGEvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCisrKysgYi9nc3QtbGlicy9nc3QvdGFnL2lkM3YyZnJhbWVzLmMKK0BAIC0xMDU3LDE0ICsxMDU3LDE3IEBAIHBhcnNlX2luc2VydF9zdHJpbmdfZmllbGQgKGd1aW50OCBlbmNvZGluZywgZ2NoYXIgKiBkYXRhLCBnaW50IGRhdGFfc2l6ZSwKKyAgICAgICAgIGRhdGFfc2l6ZSAtPSAyOworICAgICAgIH0KKyAKKy0gICAgICBmaWVsZCA9IGdfY29udmVydCAoZGF0YSwgZGF0YV9zaXplLCAiVVRGLTgiLCBpbl9lbmNvZGUsIE5VTEwsIE5VTEwsIE5VTEwpOworLQorLSAgICAgIGlmIChmaWVsZCA9PSBOVUxMIHx8IGdfdXRmOF92YWxpZGF0ZSAoZmllbGQsIC0xLCBOVUxMKSA9PSBGQUxTRSkgeworLSAgICAgICAgLyogQXMgYSBmYWxsYmFjaywgdHJ5IGludGVycHJldGluZyBVVEYtMTYgaW4gdGhlIG90aGVyIGVuZGlhbm5lc3MgKi8KKy0gICAgICAgIGlmIChpbl9lbmNvZGUgPT0gdXRmMTZiZWVuYykKKy0gICAgICAgICAgZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgdXRmMTZsZWVuYywKKy0gICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAgIGlmIChpbl9lbmNvZGUgPT0gdXRmMTZiZWVuYykgeworKyAgICAgICAgICAgZ3VuaWNoYXIyICpkYXRhX3V0ZjE2OworKyAgICAgICAgICAgZ3VpbnQgaTsKKysgICAgICAgICAgIGRhdGFfdXRmMTYgPSAgKGd1bmljaGFyMiAqKSBkYXRhOworKyAgICAgICAgICBmb3IgKGk9MDsgaTwoZGF0YV9zaXplPj4xKTsgaSsrKSB7CisrICAgICAgICAgICAgZGF0YV91dGYxNltpXSA9IEdVSU5UMTZfVE9fTEUgKGRhdGFfdXRmMTZbaV0pOworKyAgICAgICAgICB9CisgICAgICAgfQorKyAgICAgIC8vZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgaW5fZW5jb2RlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgICAgZmllbGQgPSBnX3V0ZjE2X3RvX3V0ZjgoKGd1bmljaGFyMiAqKWRhdGEsIChnbG9uZykoZGF0YV9zaXplPj4xKSwgTlVMTCwgTlVMTCwgTlVMTCk7CisrCisgICAgIH0KKyAKKyAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NGFiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYWYwZGFjMjZmNjJhYWNlYjRiZjI2NjcyMDkxMTk1Mzc5M2UwZmM1ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMTQgTWF5IDIwMTQgMTA6MTY6MjAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRU5HUjAwMzEyNTE1OiBnZXQgY2FwcyBmcm9tIHNyYyBwYWQgd2hlbiBxdWVyeSBjYXBzCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjgzMTIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYyB8ICAgMTMgKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYyBiL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDliNmM0NzguLmFlMjI5NGEKKy0tLSBhL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCitAQCAtMTcwOCw2ICsxNzA4LDE5IEBAIGdzdF90YWdfZGVtdXhfcGFkX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKKyAgICAgICB9CisgICAgICAgYnJlYWs7CisgICAgIH0KKysgICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKKysgICAgeworKworKyAgICAgIC8qIFdlIGNhbiBoaWphY2sgY2FwcyBxdWVyeSBpZiB3ZSB0eXBlZmluZCBhbHJlYWR5ICovCisrICAgICAgaWYgKGRlbXV4LT5wcml2LT5zcmNfY2FwcykgeworKyAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGRlbXV4LT5wcml2LT5zcmNfY2Fwcyk7CisrICAgICAgICByZXMgPSBUUlVFOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOworICAgICAgIGJyZWFrOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvaGFuZGxlLWF1ZGlvLXZpZGVvLWRlY29kZXItZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMzY2U3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYmNiMmI4YjZmNDllN2M2NjEyNGE0ZjVlMDdkZWE4MjlkNWViZmU1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx5b24gV2FuZyA8bHlvbi53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDE1IERlYyAyMDE0IDE2OjUyOjA3ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGhhbmRsZSBhdWRpby92aWRlbyBkZWNvZGVyIGVycm9yCisKK1doZW4gdGhlcmUgaXMgaW5wdXQgZGF0YSBhbmQgbm8gb3V0cHV0IGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpdCB3aWxsCitzZW5kIEdTVF9FTEVNRU5UX0VSUk9SLCBTbyB0aGUgY2xpcHMgcGxheWluZyB3aWxsIHF1aXQuCitIb3dldmVyLCBpZiBvbmx5IG9uZSBvZiB0aGUgdHJhY2tzIGlzIGNvcnJ1cHQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcXVpdCBvdGhlcgordHJhY2tzIHBsYXlpbmcuCisKK1RoZSBwYXRjaCBjb21tZW50cyB0aGUgR1NUX0VMRU1FTlRfRVJST1IoKSBhbmQganVzdCBhZGQgR1NUX0VSUk9SX09CSkVDVCgpCitpbmZvcm1hdGlvbiBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTU0Ml0KKworU2lnbmVkLW9mZi1ieTogTHlvbiBXYW5nIDxseW9uLndhbmdAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyB8ICAgIDUgKysrLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgfCAgICA1ICsrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggYzJlN2EyOC4uODkxZGYwYQorLS0tIGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK0BAIC0yMTIzLDkgKzIxMjMsMTAgQEAgZ3N0X2F1ZGlvX2RlY29kZXJfc2lua19ldmVudGZ1bmMgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICBHU1RfQVVESU9fREVDT0RFUl9TVFJFQU1fVU5MT0NLIChkZWMpOworIAorICAgICAgIGlmIChkZWMtPnByaXYtPmN0eC5oYWRfaW5wdXRfZGF0YSAmJiAhZGVjLT5wcml2LT5jdHguaGFkX291dHB1dF9kYXRhKSB7CistICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgIC8qIEdTVF9FTEVNRU5UX0VSUk9SIChkZWMsIFNUUkVBTSwgREVDT0RFLAorICAgICAgICAgICAgICgiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKSwKKy0gICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsKKysgICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsgKi8KKysgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QoZGVjLCAiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKTsKKyAgICAgICB9CisgCisgICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBhYzU4MWUxLi40Mjc4YmNkCistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworQEAgLTEwNjgsOSArMTA2OCwxMCBAQCBnc3RfdmlkZW9fZGVjb2Rlcl9zaW5rX2V2ZW50X2RlZmF1bHQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsCisgCisgICAgICAgLyogRXJyb3Igb3V0IGV2ZW4gaWYgRU9TIHdhcyBvayB3aGVuIHdlIGhhZCBpbnB1dCwgYnV0IG5vIG91dHB1dCAqLworICAgICAgIGlmIChyZXQgJiYgcHJpdi0+aGFkX2lucHV0X2RhdGEgJiYgIXByaXYtPmhhZF9vdXRwdXRfZGF0YSkgeworLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlY29kZXIsIFNUUkVBTSwgREVDT0RFLAorKyAgICAgICAgLyogR1NUX0VMRU1FTlRfRVJST1IgKGRlY29kZXIsIFNUUkVBTSwgREVDT0RFLAorICAgICAgICAgICAgICgiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKSwKKy0gICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsKKysgICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsgKi8KKysgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QoZGVjb2RlciwgIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIik7CisgICAgICAgfQorIAorICAgICAgIC8qIEZvcndhcmQgRU9TIGltbWVkaWF0ZWx5LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugbm8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE1MmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDY4ZmExYjE0MjVhZDJjNWY3YzUwMTNkMDk0MzE1M2E4YTZkMDkzNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaWFuIExpIDxsai5xZnkuc2hAZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNCBTZXAgMjAxNCAxNzoyMTowMiArMDgwMAorU3ViamVjdDogW1BBVENIXSB0YWdsaXN0IG5vdCBzZW5kIHRvIGRvd24gc3RyZWFtIGlmIGFsbCB0aGUgZnJhbWUgY29ycnVwdGVkCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcyNDYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEppYW4gTGkgPGxqLnFmeS5zaEBnbWFpbC5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgfCAgICA5ICsrKysrKysrKworIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYyB8ICAgIDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworaW5kZXggMzUwNDY3OC4uM2Q2OWVmZSAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitAQCAtMjA4Myw2ICsyMDgzLDE1IEBAIGdzdF9hdWRpb19kZWNvZGVyX3NpbmtfZXZlbnRmdW5jIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfZHJhaW4gKGRlYyk7CisgICAgICAgR1NUX0FVRElPX0RFQ09ERVJfU1RSRUFNX1VOTE9DSyAoZGVjKTsKKyAKKysgICAgICAvKiBzZW5kIHRhZ2xpc3QgaWYgbm8gdmFsaWQgZnJhbWUgaXMgZGVjb2RlZCB1dGlsIEVPUyAqLworKyAgICAgIGlmIChkZWMtPnByaXYtPnRhZ2xpc3QgJiYgZGVjLT5wcml2LT50YWdsaXN0X2NoYW5nZWQpIHsKKysgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImNvZGVjIHRhZyAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVjLT5wcml2LT50YWdsaXN0KTsKKysgICAgICAgIGlmICghZ3N0X3RhZ19saXN0X2lzX2VtcHR5IChkZWMtPnByaXYtPnRhZ2xpc3QpKQorKyAgICAgICAgICBnc3RfYXVkaW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWMsCisrICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X3JlZiAoZGVjLT5wcml2LT50YWdsaXN0KSkpOworKyAgICAgICAgZGVjLT5wcml2LT50YWdsaXN0X2NoYW5nZWQgPSBGQUxTRTsKKysgICAgICB9CisrCisgICAgICAgLyogRm9yd2FyZCBFT1MgYmVjYXVzZSBubyBidWZmZXIgb3Igc2VyaWFsaXplZCBldmVudCB3aWxsIGNvbWUgYWZ0ZXIKKyAgICAgICAgKiBFT1MgYW5kIG5vdGhpbmcgY291bGQgdHJpZ2dlciBhbm90aGVyIF9maW5pc2hfZnJhbWUoKSBjYWxsLiAqLworICAgICAgIHJldCA9IGdzdF9hdWRpb19kZWNvZGVyX3B1c2hfZXZlbnQgKGRlYywgZXZlbnQpOworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworaW5kZXggZGQ4YWJlMy4uZDliZmU0ZCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitAQCAtMTAyNCw2ICsxMDI0LDE0IEBAIGdzdF92aWRlb19kZWNvZGVyX3NpbmtfZXZlbnRfZGVmYXVsdCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKKyAgICAgICAgKiBwYXJlbnQgY2xhc3MnIDo6c2lua19ldmVudCgpIHVudGlsIGEgbGF0ZXIgdGltZS4KKyAgICAgICAgKi8KKyAgICAgICBmb3J3YXJkX2ltbWVkaWF0ZSA9IFRSVUU7CisrCisrICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KKysgICAgICBpZiAoZGVjb2Rlci0+cHJpdi0+dGFncyAmJiBkZWNvZGVyLT5wcml2LT50YWdzX2NoYW5nZWQpIHsKKysgICAgICAgIGdzdF92aWRlb19kZWNvZGVyX3B1c2hfZXZlbnQgKGRlY29kZXIsCisrICAgICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKGRlY29kZXItPnByaXYtPnRhZ3MpKSk7CisrICAgICAgICBkZWNvZGVyLT5wcml2LT50YWdzX2NoYW5nZWQgPSBGQUxTRTsKKysgICAgICB9CisrCisgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9idWZmZXJfdXBkYXRhX2FsaWdubWVudF91cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGNmZGE5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2NvbW1pdCA4OGQyNTNlYTIzYjA2Mjg5ZGY0MDQwMTE2MGI2MDYzMjNmMTZjOTEwCitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIE1vbiBEZWMgMTUgMDk6MzQ6MzUgMjAxNCArMDgwMAorCit2aWRlb3Bvb2w6IHVwZGF0ZSB2aWRlbyBhbGlnbm1lbnQgYWZ0ZXIgdmlkZW8gYWxpZ25tZW50CisKK1ZpZGVvIGJ1ZmZlciBwb29sIHdpbGwgdXBkYXRlIHZpZGVvIGFsaWdubWVudCB0byByZXNwZWN0IHN0cmlkZSBhbGlnbm1lbnQKK3JlcXVpcmVtZW50LiBCdXQgaGF2ZW4ndCB1cGRhdGUgaXQgdG8gdmlkZW8gYWxpZ25tZW50IGluIGNvbmZpZ3VyZS4KK1doaWNoIHdpbGwgY2F1c2UgdXNlciBnZXQgd3JvbmcgdmlkZW8gYWxpZ25tZW50LgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNTAxCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworaW5kZXggNDQ3NWY0NS4uYWNlZjU5NCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5jCitAQCAtMTY3LDYgKzE2Nyw3IEBAIHZpZGVvX2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCisgICAgIC8qIGdldCBhbiBhcHBseSB0aGUgYWxpZ25tZW50IHRvIHRoZSBpbmZvICovCisgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworICAgICBnc3RfdmlkZW9faW5mb19hbGlnbiAoJmluZm8sICZwcml2LT52aWRlb19hbGlnbik7CisrICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworICAgfQorICAgcHJpdi0+aW5mbyA9IGluZm87CisKK2RpZmYgLS1naXQgYS9zeXMveGltYWdlL3hpbWFnZXBvb2wuYyBiL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCitpbmRleCA2Y2MyY2ZhLi42YTFjYmM5IDEwMDY0NAorLS0tIGEvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMKKysrKyBiL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCitAQCAtNTk3LDYgKzU5Nyw4IEBAIHhpbWFnZV9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBkbyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgKi8KKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+YWxpZ24pOworCisrICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+YWxpZ24pOworKworICAgICAvKiB3ZSBuZWVkIHRoZSB2aWRlbyBtZXRhZGF0YSB0b28gbm93ICovCisgICAgIHByaXYtPmFkZF9tZXRhdmlkZW8gPSBUUlVFOworICAgfSBlbHNlIHsKK2RpZmYgLS1naXQgYS9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jIGIvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYworaW5kZXggMjQ0YTUxYS4uMzRiMWFiMiAxMDA2NDQKKy0tLSBhL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKKysrKyBiL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKK0BAIC0xMjQsNiArMTI0LDggQEAgeHZpbWFnZV9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBkbyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgKi8KKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+YWxpZ24pOworCisrICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+YWxpZ24pOworKworICAgICAvKiB3ZSBuZWVkIHRoZSB2aWRlbyBtZXRhZGF0YSB0b28gbm93ICovCisgICAgIHByaXYtPmFkZF9tZXRhdmlkZW8gPSBUUlVFOworICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc2OTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9lbmNvZGVyLUtlZXAtc3RpY2t5LWV2ZW50cy1hcm91bmQtd2hlbi1kb2luZy1hLXNvZnQtLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYzNmN2QzNmI5OTJhM2NiY2VlMzM4NmRlYTg1NzIwZjNjYjA0ZTFmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiBGcmksIDI3IE1hciAyMDE1IDEzOjM5OjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHZpZGVvZW5jb2RlcjogS2VlcCBzdGlja3kgZXZlbnRzIGFyb3VuZCB3aGVuIGRvaW5nIGEgc29mdAorIHJlc2V0CisKK1RoZSBjdXJyZW50IGNvZGUgd2lsbCBmaXJzdCBkaXNjYXJkIGFsbCBmcmFtZXMsIGFuZCB0aGVuIHRyaWVzIHRvIGNvcHkKK2FsbCBzdGlja3kgZXZlbnRzIGZyb20gdGhlIChub3cgZGlzY2FyZGVkKSBmcmFtZXMuIExldCdzIGNoYW5nZSB0aGUgb3JkZXIuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY4NjUKKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCAKKworLS0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jIHwgICAgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKK2luZGV4IDYxNGJhMmQuLjRjNWIxMTEgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYworQEAgLTM0MCwxMCArMzQwLDYgQEAgZ3N0X3ZpZGVvX2VuY29kZXJfcmVzZXQgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIGdib29sZWFuIGhhcmQpCisgCisgICBwcml2LT5kcmFpbmVkID0gVFJVRTsKKyAKKy0gIGdfbGlzdF9mb3JlYWNoIChwcml2LT5mcmFtZXMsIChHRnVuYykgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3VucmVmLCBOVUxMKTsKKy0gIGdfbGlzdF9mcmVlIChwcml2LT5mcmFtZXMpOworLSAgcHJpdi0+ZnJhbWVzID0gTlVMTDsKKy0KKyAgIHByaXYtPmJ5dGVzID0gMDsKKyAgIHByaXYtPnRpbWUgPSAwOworIAorQEAgLTM5Miw2ICszODgsMTAgQEAgZ3N0X3ZpZGVvX2VuY29kZXJfcmVzZXQgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIGdib29sZWFuIGhhcmQpCisgICAgICAgICBlbmNvZGVyLT5wcml2LT5jdXJyZW50X2ZyYW1lX2V2ZW50cyk7CisgICB9CisgCisrICBnX2xpc3RfZm9yZWFjaCAocHJpdi0+ZnJhbWVzLCAoR0Z1bmMpIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiwgTlVMTCk7CisrICBnX2xpc3RfZnJlZSAocHJpdi0+ZnJhbWVzKTsKKysgIHByaXYtPmZyYW1lcyA9IE5VTEw7CisrCisgICBHU1RfVklERU9fRU5DT0RFUl9TVFJFQU1fVU5MT0NLIChlbmNvZGVyKTsKKyAKKyAgIHJldHVybiByZXQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDljMmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIKQEAgLTAsMCArMSwzMCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNTRjZTkzNDU3MjcxNzVmZjY2ZDE3YjY3ZmY1MWY1OCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50LWlmLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtaWQzZGVtdXgtdXRmMTYtdG8tdXRmOC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vaGFuZGxlLWF1ZGlvLXZpZGVvLWRlY29kZXItZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1iYXNldGV4dG92ZXJsYXktbWFrZS1tZW1vcnktY29weS13aGVuLXZpZGVvLWJ1ZmZlci1zLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWdzdHBsYXlzaW5rLWRvbi10LXNldC1hc3luYy1vZi1jdXN0b20tdGV4dC1zaW5rLXRvLWYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzU3MTY1YWY2MjVjMGNhMzUzYWI0N2M1ZDg0MzkyMGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzdiZDgxOTllN2EzMTJkM2Q3MWRlOWI3ZGRmNzYxYTNiNzg1NjBhMmMyYTgwODI5ZDA4MTVjYTM5Y2JkNTUxZCIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlM2E0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjhkNGNiNjRhNGI5ZDg0YjEwMDc2YmYzNTBmODBhMGQ2ZWE2OGVjMmQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzE2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKQEAgLTAsMCArMSw1NyBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCisKKyMgbGliaWQzdGFnCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIHpsaWIgYnppcDIgbGliY2FwIgorCitpbmhlcml0IGdldHRleHQKKworCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorICAgIG9yYyBjYWlybyBmbGFjIGdkay1waXhidWYgZ3VkZXYganBlZyBsaWJwbmcgc291cCBzcGVleCB0YWdsaWIgXAorICAgICIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIGxpYnhmaXhlcyBsaWJ4ZGFtYWdlIgorWDExRU5BQkxFT1BUUyA9ICItLWVuYWJsZS14IC0tZW5hYmxlLXhzaG0iCitYMTFESVNBQkxFT1BUUyA9ICItLWRpc2FibGUteCAtLWRpc2FibGUteHNobSIKK1BBQ0tBR0VDT05GSUdbeDExXSAgICAgICAgPSAiJHtYMTFFTkFCTEVPUFRTfSwke1gxMURJU0FCTEVPUFRTfSwke1gxMURFUEVORFN9IgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZSwtLWRpc2FibGUtcHVsc2UscHVsc2VhdWRpbyIKK1BBQ0tBR0VDT05GSUdbY2Fpcm9dICAgICAgPSAiLS1lbmFibGUtY2Fpcm8sLS1kaXNhYmxlLWNhaXJvLGNhaXJvIgorUEFDS0FHRUNPTkZJR1tmbGFjXSAgICAgICA9ICItLWVuYWJsZS1mbGFjLC0tZGlzYWJsZS1mbGFjLGZsYWMiCitQQUNLQUdFQ09ORklHW2dkay1waXhidWZdID0gIi0tZW5hYmxlLWdka19waXhidWYsLS1kaXNhYmxlLWdka19waXhidWYsZ2RrLXBpeGJ1ZiIKK1BBQ0tBR0VDT05GSUdbZ3VkZXZdICAgICAgPSAiLS13aXRoLWd1ZGV2LC0td2l0aG91dC1ndWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSAgICAgICA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW2pwZWddICAgICAgID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbbGlicG5nXSAgICAgPSAiLS1lbmFibGUtbGlicG5nLC0tZGlzYWJsZS1saWJwbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1tzb3VwXSAgICAgICA9ICItLWVuYWJsZS1zb3VwLC0tZGlzYWJsZS1zb3VwLGxpYnNvdXAtMi40IgorUEFDS0FHRUNPTkZJR1tzcGVleF0gICAgICA9ICItLWVuYWJsZS1zcGVleCwtLWRpc2FibGUtc3BlZXgsc3BlZXgiCitQQUNLQUdFQ09ORklHW3RhZ2xpYl0gICAgID0gIi0tZW5hYmxlLXRhZ2xpYiwtLWRpc2FibGUtdGFnbGliLHRhZ2xpYiIKK1BBQ0tBR0VDT05GSUdbdnB4XSAgICAgICAgPSAiLS1lbmFibGUtdnB4LC0tZGlzYWJsZS12cHgsbGlidnB4IgorUEFDS0FHRUNPTkZJR1t3YXZwYWNrXSAgICA9ICItLWVuYWJsZS13YXZwYWNrLC0tZGlzYWJsZS13YXZwYWNrLHdhdnBhY2siCisKKyMgdGhlIDEzOTQgcGx1Z2lucyByZXF1aXJlIGJvdGggbGlicmF3MTM5NCBhbmQgbGliaWVjNjE4ODMKKyMgdGhlIGZvcm1lciBpcyBpbmNsdWRlZCBpbiBtZXRhLW9lLCB0aGUgbGF0dGVyIGlzbid0CisjIC0+IGRpc2FibGVkCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWVuYWJsZS1vc3MgXAorICAgIC0tZW5hYmxlLWdzdF92NGwyIFwKKyAgICAtLXdpdGhvdXQtbGlidjRsMiBcCisgICAgLS1kaXNhYmxlLWRpcmVjdHNvdW5kIFwKKyAgICAtLWRpc2FibGUtd2F2ZWZvcm0gXAorICAgIC0tZGlzYWJsZS1vc3M0IFwKKyAgICAtLWRpc2FibGUtc3VuYXVkaW8gXAorICAgIC0tZGlzYWJsZS1vc3hfYXVkaW8gXAorICAgIC0tZGlzYWJsZS1vc3hfdmlkZW8gXAorICAgIC0tZGlzYWJsZS1hYWxpYiBcCisgICAgLS1kaXNhYmxlLWxpYmNhY2EgXAorICAgIC0tZGlzYWJsZS1saWJkdiBcCisgICAgLS1kaXNhYmxlLXNob3V0MiBcCisgICAgLS1kaXNhYmxlLWV4YW1wbGVzIFwKKyAgICAtLWRpc2FibGUtZHYxMzk0IFwKKyIKKworRklMRVNfJHtQTn0tZXF1YWxpemVyICs9ICIke2RhdGFkaXJ9L2dzdHJlYW1lci0xLjAvcHJlc2V0cy8qLnBycyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTk3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gYzc4MmEzMDQ4MjkwOGE0YjRkZDljZDRhYmZmOWY5YmM0MDE2Njk4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiBUdWUsIDUgQXVnIDIwMTQgMTQ6NDA6NDYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N0cnRwbXA0Z3BheTogc2V0IGRhZmF1bHQgdmFsdWUgZm9yIE1QRUc0IHdpdGhvdXQgY29kZWMKKyBkYXRhIGluIGNhcHMuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQyNjMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jIHwgICAxOSArKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jIGIvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKK2luZGV4IDc5MTNkOWEuLjE3NDlkMzkgMTAwNjQ0CistLS0gYS9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYworKysrIGIvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKK0BAIC0zOTAsNiArMzkwLDcgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorICAgY29uc3QgR1ZhbHVlICpjb2RlY19kYXRhOworICAgY29uc3QgZ2NoYXIgKm1lZGlhX3R5cGUgPSBOVUxMOworICAgZ2Jvb2xlYW4gcmVzOworKyAgY29uc3QgZ2NoYXIgKm5hbWU7CisgCisgICBydHBtcDRncGF5ID0gR1NUX1JUUF9NUDRHX1BBWSAocGF5bG9hZCk7CisgCitAQCAtNDAwLDcgKzQwMSw2IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKKyAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGdwYXksICJnb3QgY29kZWNfZGF0YSIpOworICAgICBpZiAoR19WQUxVRV9UWVBFIChjb2RlY19kYXRhKSA9PSBHU1RfVFlQRV9CVUZGRVIpIHsKKyAgICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKy0gICAgICBjb25zdCBnY2hhciAqbmFtZTsKKyAKKyAgICAgICBidWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAoY29kZWNfZGF0YSk7CisgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGdwYXksICJjb25maWd1cmluZyBjb2RlY19kYXRhIik7CitAQCAtNDI2LDYgKzQyNiwyMyBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCisgCisgICAgICAgcnRwbXA0Z3BheS0+Y29uZmlnID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOworICAgICB9CisrICB9IGVsc2UgeworKyAgICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKKysKKysgICAgaWYgKCFzdHJjbXAgKG5hbWUsICJ2aWRlby9tcGVnIikpIHsKKysgICAgICBydHBtcDRncGF5LT5wcm9maWxlID0gZ19zdHJkdXAgKCIxIik7CisrCisrICAgICAgLyogZml4ZWQgcmF0ZSAqLworKyAgICAgIHJ0cG1wNGdwYXktPnJhdGUgPSA5MDAwMDsKKysgICAgICAvKiB2aWRlbyBzdHJlYW0gdHlwZSAqLworKyAgICAgIHJ0cG1wNGdwYXktPnN0cmVhbXR5cGUgPSAiNCI7CisrICAgICAgLyogbm8gcGFyYW1zIGZvciB2aWRlbyAqLworKyAgICAgIHJ0cG1wNGdwYXktPnBhcmFtcyA9IE5VTEw7CisrICAgICAgLyogbW9kZSAqLworKyAgICAgIHJ0cG1wNGdwYXktPm1vZGUgPSAiZ2VuZXJpYyI7CisrCisrICAgICAgbWVkaWFfdHlwZSA9ICJ2aWRlbyI7CisrICAgIH0KKyAgIH0KKyAgIGlmIChtZWRpYV90eXBlID09IE5VTEwpCisgICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ODYzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitjb21taXQgZDcxZDc0ZGFhYzhlZDU0MTU2ZWQxMDM5NThhYjQ1NWM2M2M3MmIwZQorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gTm92IDEwIDExOjI1OjQ3IDIwMTQgKzA4MDAKKworW2FzdGVyaXNraDI2M10gZGVjcmVhc2UgdGhlIHJhbmsgYXMgd2UgaGF2bid0IHRoaXMga2luZCBvZiBkZWNvZGVyLgorCitEZWNyZWFzZSB0aGUgcmFuayBhcyB3ZSBoYXZuJ3QgdGhpcyBraW5kIG9mIGRlY29kZXIuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk5MzUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jIGIvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYworaW5kZXggYTAxZmJjOC4uOGZhMzE5NCAxMDA2NDQKKy0tLSBhL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKKysrKyBiL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKK0BAIC0yMjYsNSArMjI2LDUgQEAgZ2Jvb2xlYW4KKyBnc3RfYXN0ZXJpc2toMjYzX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCisgeworICAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhc3Rlcmlza2gyNjMiLAorLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfQVNURVJJU0tfSDI2Myk7CisrICAgICAgR1NUX1JBTktfU0VDT05EQVJZIC0gMSwgR1NUX1RZUEVfQVNURVJJU0tfSDI2Myk7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDNhYjYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImVhZjFhNmRhZjczNzQ5YmM0MjNmZWFjMzAxZDYwMDM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5YjFiNWYzZjdiY2FhOGE2MTUyMDJlYjVlMTc2MTIxZWViODMzNjk2MGY3MDY4N2U1MzZhZDc4ZGJjN2U2NDEiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGUwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWI2MGViZWZkNWIyZjVhOGUwY2FiNmJmZWUzOTFhNWZlIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiZmQwMTIzODAwYzhjMWNmMTQ2OGMwZmE1ZDU5MmFkMGQwZDhiNDE0MCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiYTMxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwpAQCAtMCwwICsxLDMwIEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyAmIExHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0RFUEVORFMgKz0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgbGliaWQzdGFnIgorCitpbmhlcml0IGdldHRleHQKKworCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICBvcmMgYTUyZGVjIGxhbWUgbWFkIG1wZWcyZGVjIFwKKyAgICAiCisKK1BBQ0tBR0VDT05GSUdbYTUyZGVjXSAgID0gIi0tZW5hYmxlLWE1MmRlYywtLWRpc2FibGUtYTUyZGVjLGxpYmE1MiIKK1BBQ0tBR0VDT05GSUdbY2Rpb10gICAgID0gIi0tZW5hYmxlLWNkaW8sLS1kaXNhYmxlLWNkaW8sbGliY2RpbyIKK1BBQ0tBR0VDT05GSUdbZHZkcmVhZF0gID0gIi0tZW5hYmxlLWR2ZHJlYWQsLS1kaXNhYmxlLWR2ZHJlYWQsbGliZHZkcmVhZCIKK1BBQ0tBR0VDT05GSUdbbGFtZV0gICAgID0gIi0tZW5hYmxlLWxhbWUsLS1kaXNhYmxlLWxhbWUsbGFtZSIKK1BBQ0tBR0VDT05GSUdbbWFkXSAgICAgID0gIi0tZW5hYmxlLW1hZCwtLWRpc2FibGUtbWFkLGxpYm1hZCIKK1BBQ0tBR0VDT05GSUdbbXBlZzJkZWNdID0gIi0tZW5hYmxlLW1wZWcyZGVjLC0tZGlzYWJsZS1tcGVnMmRlYyxtcGVnMmRlYyIKK1BBQ0tBR0VDT05GSUdbeDI2NF0gICAgID0gIi0tZW5hYmxlLXgyNjQsLS1kaXNhYmxlLXgyNjQseDI2NCIKKworCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1kaXNhYmxlLWFtcm5iIFwKKyAgICAtLWRpc2FibGUtYW1yd2IgXAorICAgIC0tZGlzYWJsZS1zaWRwbGF5IFwKKyAgICAtLWRpc2FibGUtdHdvbGFtZSBcCisgICAgIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2IyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYgpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OTU0YmVlZDdiYjlhOTNlNDI2ZGVlNTQzZmY0NjM5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Y2Q1ZTgxY2Y2MTg5NDRmNGRjOTM1ZjE2NjliMjEyNWU4YmIyZmU5Y2M3ZGM4ZGMxNWI3MjIzN2FjYTQ5MDY3IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtdWdseS0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjVmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIwNmI4YWMxMGNlZTg1YzVjMzA0Y2EzMjA5OTdhYThmNDQyOTVhNjZmIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzgzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiUGx1Z2lucyBmb3IgdGhlIEdTdHJlYW1lciBtdWx0aW1lZGlhIGZyYW1ld29yayAxLngiCitIT01FUEFHRSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Hc3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0dTVFJFQU1FUl8xXzBfREVCVUcgPz0gIi0tZGlzYWJsZS1kZWJ1ZyIKK0dTVFJFQU1FUl8xXzBfR0lUX0JSQU5DSCA/PSAibWFzdGVyIgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS12YWxncmluZCAke0dTVFJFQU1FUl8xXzBfREVCVUd9IC0tZGlzYWJsZS1leGFtcGxlcyAiCisKK2FjcGF0aHMgPSAiLUkgJHtTfS9jb21tb24vbTQgLUkgJHtTfS9tNCIKKworTElCViA9ICIxLjAiCityZXF1aXJlIGdzdC1wbHVnaW5zLXBhY2thZ2UuaW5jCisKK1BBQ0tBR0VDT05GSUdbb3JjXSA9ICItLWVuYWJsZS1vcmMsLS1kaXNhYmxlLW9yYyxvcmMgb3JjLW5hdGl2ZSIKKworZXhwb3J0IE9SQ0MgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJ9L29yY2MiCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LS4qIgorCisjIGFwcGx5IGdzdHJlYW1lciBoYWNrIGFmdGVyIE1ha2VmaWxlLmluLmluIGluIHNvdXJjZSBpcyByZXBsYWNlZCBieSBvdXIgdmVyc2lvbiBmcm9tCisjICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiwgYnV0IGJlZm9yZSBjb25maWd1cmUgaXMgZXhlY3V0ZWQgCisjIGh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDEyLU5vdmVtYmVyLzAzMjIzMy5odG1sCitvZV9ydW5jb25mX3ByZXBlbmQoKSB7CisJaWYgWyAtZSAke1N9L3BvL01ha2VmaWxlLmluLmluIF07IHRoZW4KKwkJc2VkIC1pIC1lICIxYVxcIiAtZSAnR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAnICR7U30vcG8vTWFrZWZpbGUuaW4uaW4KKwlmaQorfQorCitTUkNfVVJJID0gIiR7QGdldF9nc3Rfc3JjdXJpKGQpfSIKKworZGVmIGdldF9nc3Rfc3JjdXJpKGQpOgorICAgICMgY2hlY2sgaWYgZXhwZWN0ZWQgcHJlZml4IGlzIHByZXNlbnQKKyAgICBwcmVmaXggPSAiZ3N0cmVhbWVyMS4wLSIKKyAgICBicG4gPSBkLmdldFZhcigiQlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgYnBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgYmIuZmF0YWwoJ0ludmFsaWQgR1N0cmVhbWVyIDEuMCBwbHVnaW4gcGFja2FnZSBuYW1lICIlcyIgOiBtdXN0IHN0YXJ0IHdpdGggIiVzIicgJSAoYnBuLCBwcmVmaXgpKQorCisgICAgIyByZXBsYWNlZCBwcmVmaXggd2l0aCAiZ3N0LSIsIHdoaWNoIGlzIHdoYXQgaXMgdXNlZCBmb3IgdGhlIHRhcmJhbGwgYW5kIHJlcG9zaXRvcnkgZmlsZW5hbWVzCisgICAgZ3N0cGtnX2Jhc2VuYW1lID0gImdzdC0iICsgYnBuW2xlbihwcmVmaXgpOl0KKyAgICBwdiA9IGQuZ2V0VmFyKCJQViIsIFRydWUpCisgICAgYnJhbmNoID0gZC5nZXRWYXIoIkdTVFJFQU1FUl8xXzBfR0lUX0JSQU5DSCIsIFRydWUpCisKKyAgICBpZiBwdiA9PSAiZ2l0IjoKKyAgICAgICAgcyA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvJXM7YnJhbmNoPSVzIiAlIChnc3Rwa2dfYmFzZW5hbWUsIGJyYW5jaCkKKyAgICBlbHNlOgorICAgICAgICBzID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8lcy8lcy0lcy50YXIueHoiICUgKGdzdHBrZ19iYXNlbmFtZSwgZ3N0cGtnX2Jhc2VuYW1lLCBwdikKKyAgICByZXR1cm4gcworCitkZWxldGVfbGlibGlua19tNF9maWxlKCkgeworCSMgVGhpcyBtNCBmaWxlIGNvbnRhaW5zIG5hc3RpbmVzcyB3aGljaCBjb25mbGljdHMgd2l0aCBsaWJ0b29sIDIuMi4yCisJcm0gIiR7U30vbTQvbGliLWxpbmsubTQiIHx8IHRydWUKK30KKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiIGRlbGV0ZV9saWJsaW5rX200X2ZpbGUgIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTk0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYwpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBvbiB0b3Agb2YgR1N0cmVhbWVyIGZvciBidWlsZGluZyBhbiBSVFNQIHNlcnZlciIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorSE9NRVBBR0UgPSAiaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcnRzcC1zZXJ2ZXIvIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgbGliY2dyb3VwIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UiCisKK1BOUkVBTCA9ICJnc3QtcnRzcC1zZXJ2ZXIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyR7UE5SRUFMfS8ke1BOUkVBTH0tJHtQVn0udGFyLnh6IgorCitTID0gIiR7V09SS0RJUn0vJHtQTlJFQUx9LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWI0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiCkBAIC0wLDAgKzEsNiBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTlmOWI4ODk5ZWM3YWIzMzY2M2NkYTc2MjdkYjQwZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzA4OTI1NGJkMzFiN2MxZjFjZjJjMDM0YTNiMzU1MWY5Mjg3OGY5ZTNjYWI2NWNlZjNhOTAxYTA0YzBmMWQzNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4YWE4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiR1N0cmVhbWVyIDEuMCBtdWx0aW1lZGlhIGZyYW1ld29yayIKK0RFU0NSSVBUSU9OID0gIkdTdHJlYW1lciBpcyBhIG11bHRpbWVkaWEgZnJhbWV3b3JrIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdmlkZW8gYW5kIHNvdW5kLiBcCitJdCBzdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2YgZm9ybWF0cyBpbmNsdWRpbmcgbXAzLCBvZ2csIGF2aSwgbXBlZyBhbmQgcXVpY2t0aW1lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdzdHJlYW1lciIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGlieG1sMiBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK1BBQ0tBR0VDT05GSUdbZGVidWddID0gIi0tZW5hYmxlLWRlYnVnLC0tZGlzYWJsZS1kZWJ1ZyIKK1BBQ0tBR0VDT05GSUdbY2hlY2tdID0gIi0tZW5hYmxlLWNoZWNrLC0tZGlzYWJsZS1jaGVjayIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2Nib29rIC0tZGlzYWJsZS1ndGstZG9jIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJsZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKKyAgICAgICAgICAgICAgICAiCisKK1JSRUNPTU1FTkRTXyR7UE59X3FlbXV4ODYgICAgKz0gImtlcm5lbC1tb2R1bGUtc25kLWVuczEzNzAga2VybmVsLW1vZHVsZS1zbmQtcmF3bWlkaSIKK1JSRUNPTU1FTkRTXyR7UE59X3FlbXV4ODYtNjQgKz0gImtlcm5lbC1tb2R1bGUtc25kLWVuczEzNzAga2VybmVsLW1vZHVsZS1zbmQtcmF3bWlkaSIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kZXYgKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmxhICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1Zy8gJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1Zy8iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY1Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNmIyNmYzZGJmOWJmNTc3ZDcxNTM0YWI3NDEwZGU2NmQwNmU0NmJhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFNhdCwgNiBBcHIgMjAxMyAyMzo1MjoxMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggY3Jhc2ggd2l0aCBnc3QtaW5zcGVjdCBDaHJpcyBMb3JkIDxjaHJpc0BvcGVuZWRoYW5kLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIHRvb2xzL2dzdC1pbnNwZWN0LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9nc3QtaW5zcGVjdC5jIGIvdG9vbHMvZ3N0LWluc3BlY3QuYworaW5kZXggMjNiN2M0NC4uYjc5YjAyZSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2dzdC1pbnNwZWN0LmMKKysrKyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKK0BAIC0xNTU2LDcgKzE1NTYsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzIChjdHgsIG9wdGlvbnMsIEdFVFRFWFRfUEFDS0FHRSk7CisgICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKKyAgIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7CistICAgIGdfcHJpbnRlcnIgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOworKyAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyID8gZXJyLT5tZXNzYWdlIDogIihudWxsKSIpOworICAgICByZXR1cm4gLTE7CisgICB9CisgICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7CistLSAKKzEuOC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjEzYzRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLWdzdGluZm8tU2hvcnRlbi1fX0ZJTEVfXy1vbi1hbGwtcGxhdGZvcm1zLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gODFmZWNkMzY3YjAxNmU1YWM0ZmIwYzA0Yjg0ZGE1YzQ3NGYzMGRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGVyIFVyYmFuZWMgPGdpdC51c2VyQHVyYmFuZWMubmV0PgorRGF0ZTogRnJpLCAyNyBGZWIgMjAxNSAwMToxNjo1OCArMTEwMAorU3ViamVjdDogW1BBVENIIDEvMV0gZ3N0aW5mbzogU2hvcnRlbiBfX0ZJTEVfXyBvbiBhbGwgcGxhdGZvcm1zLgorCitUaGlzIGlzIHVzZWZ1bCBub3Qgb25seSBmb3IgTVNWQywgYnV0IGFsc28gd2l0aCBnY2MvTGludXggd2hlbiBkb2luZworY3Jvc3MtY29tcGlsYXRpb24gYnVpbGRzIGFuZCBvdXQtb2YtdHJlZSBidWlsZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MjEzXQorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBVcmJhbmVjIDxnaXQudXNlckB1cmJhbmVjLm5ldD4KKy0tLQorIGdzdC9nc3RpbmZvLmMgfCAxMSArKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvZ3N0aW5mby5jIGIvZ3N0L2dzdGluZm8uYworaW5kZXggYjJhMzAwNS4uOGI2MWQwOSAxMDA2NDQKKy0tLSBhL2dzdC9nc3RpbmZvLmMKKysrKyBiL2dzdC9nc3RpbmZvLmMKK0BAIC00NDQsNyArNDQ0LDYgQEAgZ3N0X2RlYnVnX2xvZyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAorICAgdmFfZW5kICh2YXJfYXJncyk7CisgfQorIAorLSNpZmRlZiBHX09TX1dJTjMyCisgLyogYmFzZWQgb24gZ19iYXNlbmFtZSgpLCB3aGljaCB3ZSBjYW4ndCB1c2UgYmVjYXVzZSBpdCB3YXMgZGVwcmVjYXRlZCAqLworIHN0YXRpYyBpbmxpbmUgY29uc3QgZ2NoYXIgKgorIGdzdF9wYXRoX2Jhc2VuYW1lIChjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKK0BAIC00NjcsNyArNDY2LDYgQEAgZ3N0X3BhdGhfYmFzZW5hbWUgKGNvbnN0IGdjaGFyICogZmlsZV9uYW1lKQorIAorICAgcmV0dXJuIGZpbGVfbmFtZTsKKyB9CistI2VuZGlmCisgCisgLyoqCisgICogZ3N0X2RlYnVnX2xvZ192YWxpc3Q6CitAQCAtNDk3LDEyICs0OTUsMTEgQEAgZ3N0X2RlYnVnX2xvZ192YWxpc3QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZ1bmN0aW9uICE9IE5VTEwpOworICAgZ19yZXR1cm5faWZfZmFpbCAoZm9ybWF0ICE9IE5VTEwpOworIAorLSAgLyogVGhlIHByZWRlZmluZWQgbWFjcm8gX19GSUxFX18gaXMgYWx3YXlzIHRoZSBleGFjdCBwYXRoIGdpdmVuIHRvIHRoZQorLSAgICogY29tcGlsZXIgd2l0aCBNU1ZDLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgYmFzZW5hbWUuICBXZSB3b3JrCistICAgKiBhcm91bmQgaXQgYXQgcnVudGltZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eS4gKi8KKy0jaWZkZWYgR19PU19XSU4zMgorKyAgLyogVGhlIHByZWRlZmluZWQgbWFjcm8gX19GSUxFX18gY2FuIGJlIGFuIGFic29sdXRlIHBhdGggaW4gc29tZSBidWlsZAorKyAgICogZW52aXJvbm1lbnRzLCBzdWNoIGFzIE1TVkMgb3Igb3V0LW9mLXRyZWUgY3Jvc3MtY29tcGlsZXMuIFRoaXMgbWF5CisrICAgKiBiZSBzaWduaWZpY2FudGx5IGxvbmdlciB0aGFuIHRoZSBmaWxlbmFtZS4gIFdlIHdvcmsgYXJvdW5kIGl0IGF0CisrICAgKiBydW50aW1lIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5LiAqLworICAgZmlsZSA9IGdzdF9wYXRoX2Jhc2VuYW1lIChmaWxlKTsKKy0jZW5kaWYKKyAKKyAgIG1lc3NhZ2UubWVzc2FnZSA9IE5VTEw7CisgICBtZXNzYWdlLmZvcm1hdCA9IGZvcm1hdDsKKy0tIAorMi4zLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDItYmFzZXNpbmstRml4LVFvUy1sYXRlbmVzcy1jaGVja2luZy1pZi1zdWJjbGFzcy1pbXBsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA1Y2JlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA2OTE0NTY2ZWQ2YTg5Yzk2OTczYTU3OGFhNWVjZDAxZWU2OGNkY2ZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbiA8Smlhbi5MaUBmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxNCBNYXkgMjAxNSAxNTo0OTo0MyArMDgwMAorU3ViamVjdDogW1BBVENIXSBiYXNlc2luazogRml4IFFvUy9sYXRlbmVzcyBjaGVja2luZyBpZiBzdWJjbGFzcyBpbXBsZW1lbnRzCisgcHJlcGFyZS9wcmVwYXJlX2xpc3QgdmZ1bmNzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0luIGJhc2VzaW5rIGZ1bmN0aW9ucyBnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKCksIGJlbG93IGNvZGUgaXMgdXNlZCB0bworY2hlY2tpbmcgaWYgYnVmZmVyIGlzIGxhdGUgYmVmb3JlIGRvaW5nIHByZXBhcmUgY2FsbCB0byBzYXZlIHNvbWUgZWZmb3J0OgorICAgIGlmIChzeW5jYWJsZSAmJiBkb19zeW5jKQorICAgICAgbGF0ZSA9CisgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKyAgICAgICAgICBHU1RfQ0xPQ0tfRUFSTFksIDAsIEZBTFNFKTsKKworICAgIGlmIChHX1VOTElLRUxZIChsYXRlKSkKKyAgICAgIGdvdG8gZHJvcHBlZDsKKworQnV0IHRoaXMgY29kZSBoYXMgcHJvYmxlbSwgaXQgc2hvdWxkIGNhbGN1bGF0ZSBqaXR0ZXIgYmFzZWQgb24gY3VycmVudCBtZWRpYQorY2xvY2ssIHJhdGhlciB0aGFuIGp1c3QgcGFzc2luZyAwLiBJIGZvdW5kIGl0IHdpbGwgZHJvcCBhbGwgdGhlIGZyYW1lcyB3aGVuCityZXdpbmQgaW4gc2xvdyBzcGVlZCwgc3VjaCBhcyAtMlguCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkyNTgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCistLS0KKyBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKK2luZGV4IGE1MDU2OTUuLjVmYjJkNmEgMTAwNjQ0CistLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKKysrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYworQEAgLTMzNjksMTAgKzMzNjksMjggQEAgZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLAorICAgICBpZiAoR19VTkxJS0VMWSAoc3RlcHBlZCkpCisgICAgICAgZ290byBkcm9wcGVkOworIAorLSAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykKKy0gICAgICBsYXRlID0KKy0gICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKy0gICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCAwLCBGQUxTRSk7CisrICAgIGlmIChzeW5jYWJsZSAmJiBkb19zeW5jKSB7CisrICAgICAgR3N0Q2xvY2sgKmNsb2NrOworKworKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOworKyAgICAgIGNsb2NrID0gR1NUX0VMRU1FTlRfQ0xPQ0sgKGJhc2VzaW5rKTsKKysgICAgICBpZiAoY2xvY2sgJiYgR1NUX1NUQVRFIChiYXNlc2luaykgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKKysgICAgICAgIEdzdENsb2NrVGltZSBiYXNlX3RpbWU7CisrICAgICAgICBHc3RDbG9ja1RpbWUgc3RpbWU7CisrICAgICAgICBHc3RDbG9ja1RpbWUgbm93OworKworKyAgICAgICAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLT5iYXNlX3RpbWU7CisrICAgICAgICBzdGltZSA9IGJhc2VfdGltZSArIGdzdF9iYXNlX3NpbmtfYWRqdXN0X3RpbWUgKGJhc2VzaW5rLCByc3RhcnQpOworKyAgICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisrICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworKworKyAgICAgICAgbGF0ZSA9CisrICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKysgICAgICAgICAgICBHU1RfQ0xPQ0tfRUFSTFksIEdTVF9DTE9DS19ESUZGIChzdGltZSwgbm93KSwgRkFMU0UpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworKyAgICAgIH0KKysgICAgfQorIAorICAgICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCisgICAgICAgZ290byBkcm9wcGVkOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTBjZTZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC9pbnB1dHNlbGVjdG9yLXN0aWNreS1ldmVudHMtaGF2ZW4tdC1zZW5kLW91dC13aGVuLWFjLTEtNC0xLnBhdGNoCkBAIC0wLDAgKzEsMTY3IEBACitGcm9tIDgzYmVkOTBjMzA2ZWQzMTg1ZDQ4ZmViZjY0NDExNzdkNjM4ZjczNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCAyNCBEZWMgMjAxNCAxMDoxMzo1MSArMDgwMAorU3ViamVjdDogW1BBVENIXSBpbnB1dHNlbGVjdG9yOiBzdGlja3kgZXZlbnRzIGhhdmVuJ3Qgc2VuZCBvdXQgd2hlbiBhY3RpdmUKKyB0cmFjayByZWFjaCBFT1MKKworRU9TIGV2ZW50IGhhc24ndCBiZWVuIHNlbmQgdG8gZG93bi1lbGVtZW50LiBUaGUgcmVzb2x1dGlvbiBpcyBibG9jayBFT1MgZXZlbnQKK29mIGluYWN0aXZlIHBhZCwgc2VuZCB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHBhZCBhY3RpdmVkLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTQ5CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorLS0tCisgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMgfCAgIDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmggfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworaW5kZXggZmI1MDgwMi4uNDQ2MWY3YyAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jCisrKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworQEAgLTQ0MCw2ICs0NDAsMTcgQEAgZ3N0X3NlbGVjdG9yX3BhZF9pdGVyYXRlX2xpbmtlZF9wYWRzIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKKyB9CisgCisgc3RhdGljIGdib29sZWFuCisrZ3N0X2lucHV0X3NlbGVjdG9yX2Vvc193YWl0IChHc3RJbnB1dFNlbGVjdG9yICogc2VsZiwgR3N0U2VsZWN0b3JQYWQgKiBwYWQpCisreworKyAgd2hpbGUgKCFzZWxmLT5lb3MgJiYgIXNlbGYtPmZsdXNoaW5nICYmICFwYWQtPmZsdXNoaW5nKSB7CisrICAgIC8qIHdlIGNhbiBiZSB1bmxvY2tlZCBoZXJlIHdoZW4gd2UgYXJlIHNodXR0aW5nIGRvd24gKGZsdXNoaW5nKSBvciB3aGVuIHdlCisrICAgICAqIGdldCB1bmJsb2NrZWQgKi8KKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1dBSVQgKHNlbGYpOworKyAgfQorKyAgcmV0dXJuIHNlbGYtPmZsdXNoaW5nOworK30KKysKKytzdGF0aWMgZ2Jvb2xlYW4KKyBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyB7CisgICBnYm9vbGVhbiByZXMgPSBUUlVFOworQEAgLTQ4Niw2ICs0OTcsNyBAQCBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICAgLyogVW5ibG9jayB0aGUgcGFkIGlmIGl0J3Mgd2FpdGluZyAqLworICAgICAgIHNlbHBhZC0+Zmx1c2hpbmcgPSBUUlVFOworKyAgICAgIHNlbC0+ZW9zID0gRkFMU0U7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKK0BAIC01MjMsMjEgKzUzNSwxMiBAQCBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgIHNlbHBhZC0+ZW9zID0gVFJVRTsKKyAKKy0gICAgICBpZiAoZm9yd2FyZCkgeworLSAgICAgICAgc2VscGFkLT5lb3Nfc2VudCA9IFRSVUU7CistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIEdzdFNlbGVjdG9yUGFkICphY3RpdmVfc2VscGFkOworLQorLSAgICAgICAgLyogSWYgdGhlIGFjdGl2ZSBzaW5rcGFkIGlzIGluIEVPUyBzdGF0ZSBidXQgRU9TCistICAgICAgICAgKiB3YXMgbm90IHNlbnQgZG93bnN0cmVhbSB0aGlzIG1lYW5zIHRoYXQgdGhlIHBhZAorLSAgICAgICAgICogZ290IEVPUyBiZWZvcmUgaXQgd2FzIHNldCBhcyBhY3RpdmUgcGFkIGFuZCB0aGF0CistICAgICAgICAgKiB0aGUgcHJldmlvdXNseSBhY3RpdmUgcGFkIGdvdCBFT1MgYWZ0ZXIgaXQgd2FzCistICAgICAgICAgKiBhY3RpdmUKKy0gICAgICAgICAqLworLSAgICAgICAgYWN0aXZlX3NlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQUQgKGFjdGl2ZV9zaW5rcGFkKTsKKy0gICAgICAgIGZvcndhcmQgPSAoYWN0aXZlX3NlbHBhZC0+ZW9zICYmICFhY3RpdmVfc2VscGFkLT5lb3Nfc2VudCk7CistICAgICAgICBhY3RpdmVfc2VscGFkLT5lb3Nfc2VudCA9IFRSVUU7CisrICAgICAgaWYgKCFmb3J3YXJkKSB7CisrICAgICAgICAvKiBibG9ja2VkIHVudGlsIGFjdGl2ZSB0aGUgc2luZCBwYWQgb3IgZmx1c2ggKi8KKysgICAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9lb3Nfd2FpdCAoc2VsLCBzZWxwYWQpOworKyAgICAgICAgZm9yd2FyZCA9IFRSVUU7CisgICAgICAgfQorKyAgICAgIHNlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIEVPUyIpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIEdTVF9FVkVOVF9HQVA6eworQEAgLTY3Niw2ICs2NzksMTIgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX3dhaXRfcnVubmluZ190aW1lIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLAorICAgICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQgKHNlbCwgR1NUX1BBRF9DQVNUIChzZWxwYWQpKTsKKyAgICAgYWN0aXZlX3NlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAoYWN0aXZlX3NpbmtwYWQpOworIAorKyAgICBpZiAoc2VsLT5lb3MpIHsKKysgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWwsICJOb3Qgd2FpdGluZyBiZWNhdXNlIGlucHV0c2VsZWN0b3IgcmVhY2ggRU9TLiIpOworKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisrICAgICAgcmV0dXJuIEZBTFNFOworKyAgICB9CisrCisgICAgIGlmIChzZWctPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKKyAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxwYWQsCisgICAgICAgICAgICJOb3Qgd2FpdGluZyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBUSU1FIHNlZ21lbnQiKTsKK0BAIC05NzEsNiArOTgwLDEyIEBAIGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCisgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpKTsKKyAKKyAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOworKyAgaWYgKHNlbC0+ZW9zKSB7CisrICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImlucHV0c2VsZWN0b3IgZW9zLiIpOworKyAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworKyAgICBnb3RvIGVvczsKKysgIH0KKysKKyAgIC8qIHdhaXQgb3IgY2hlY2sgZm9yIGZsdXNoaW5nICovCisgICBpZiAoZ3N0X2lucHV0X3NlbGVjdG9yX3dhaXQgKHNlbCwgc2VscGFkKSkgeworICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworQEAgLTExNTEsNiArMTE2NiwxMyBAQCBmbHVzaGluZzoKKyAgICAgcmVzID0gR1NUX0ZMT1dfRkxVU0hJTkc7CisgICAgIGdvdG8gZG9uZTsKKyAgIH0KKytlb3M6CisrICB7CisrICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIldlIGFyZSBlb3MsIGRpc2NhcmQgYnVmZmVyICVwIiwgYnVmKTsKKysgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKysgICAgcmVzID0gR1NUX0ZMT1dfRU9TOworKyAgICBnb3RvIGRvbmU7CisrICB9CisgfQorIAorIHN0YXRpYyB2b2lkIGdzdF9pbnB1dF9zZWxlY3Rvcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKK0BAIC0xMzA5LDYgKzEzMzEsNyBAQCBnc3RfaW5wdXRfc2VsZWN0b3JfaW5pdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCkKKyAgIGdfbXV0ZXhfaW5pdCAoJnNlbC0+bG9jayk7CisgICBnX2NvbmRfaW5pdCAoJnNlbC0+Y29uZCk7CisgICBzZWwtPmJsb2NrZWQgPSBGQUxTRTsKKysgIHNlbC0+ZW9zID0gRkFMU0U7CisgCisgICAvKiBsZXRzIGdpdmUgYSBjaGFuZ2UgZm9yIGRvd25zdHJlYW0gdG8gZG8gc29tZXRoaW5nIG9uCisgICAgKiBhY3RpdmUtcGFkIGNoYW5nZSBiZWZvcmUgd2Ugc3RhcnQgcHVzaGluZyBuZXcgYnVmZmVycyAqLworQEAgLTEzNzcsNiArMTQwMCwxMSBAQCBnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWxmLCBHc3RQYWQgKiBwYWQpCisgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiTmV3IGFjdGl2ZSBwYWQgaXMgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgc2VsZi0+YWN0aXZlX3NpbmtwYWQpOworIAorKyAgaWYgKG9sZCAhPSBuZXcgJiYgbmV3LT5lb3MgJiYgIW5ldy0+ZW9zX3NlbnQpIHsKKysgICAgc2VsZi0+ZW9zID0gVFJVRTsKKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsZik7CisrICB9CisrCisgICByZXR1cm4gVFJVRTsKKyB9CisgCitAQCAtMTc3MSw2ICsxNzk5LDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7CisrICAgICAgc2VsZi0+ZW9zID0gRkFMU0U7CisgICAgICAgc2VsZi0+YmxvY2tlZCA9IEZBTFNFOworICAgICAgIHNlbGYtPmZsdXNoaW5nID0gRkFMU0U7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsZik7CitAQCAtMTc3OSw2ICsxODA4LDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgICAgLyogZmlyc3QgdW5sb2NrIGJlZm9yZSB3ZSBjYWxsIHRoZSBwYXJlbnQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLCB3aGljaAorICAgICAgICAqIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHN0cmVhbSBsb2NrIHdoZW4gZ29pbmcgdG8gcmVhZHkuICovCisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbGYpOworKyAgICAgIHNlbGYtPmVvcyA9IFRSVUU7CisgICAgICAgc2VsZi0+YmxvY2tlZCA9IEZBTFNFOworICAgICAgIHNlbGYtPmZsdXNoaW5nID0gVFJVRTsKKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWxmKTsKK2RpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCitpbmRleCA5NmM2ODBmLi45YmY5MjRmIDEwMDY0NAorLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmgKKysrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCitAQCAtNzcsNiArNzcsNyBAQCBzdHJ1Y3QgX0dzdElucHV0U2VsZWN0b3IgeworICAgR011dGV4IGxvY2s7CisgICBHQ29uZCBjb25kOworICAgZ2Jvb2xlYW4gYmxvY2tlZDsKKysgIGdib29sZWFuIGVvczsKKyAgIGdib29sZWFuIGZsdXNoaW5nOworIH07CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ODc1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIKQEAgLTAsMCArMSwxNyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWdzdGluZm8tU2hvcnRlbi1fX0ZJTEVfXy1vbi1hbGwtcGxhdGZvcm1zLnBhdGNoIFwKKyAgICBmaWxlOi8vaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItYmFzZXNpbmstRml4LVFvUy1sYXRlbmVzcy1jaGVja2luZy1pZi1zdWJjbGFzcy1pbXBsZS5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiODhhOTI4OWM2NGE0OTUwZWJiNGY1NDQ5ODAyMzQyODkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDA4MDFhYTdmOTc5MDI0NTI2MjU4YTBlOTQ3MDdiYTQyYjhhYjZmN2QyMjA2ZTU2YWRiYzQ0MzMxNTVjYjBhZSIKKworUyA9ICIke1dPUktESVJ9L2dzdHJlYW1lci0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjAwZDMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L2dzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PWUwNTkxMzg0ODEyMDVlZTJjNmZjMWMwNzljMDE2ZDBkIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXI7YnJhbmNoPW1hc3RlciIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIzYjgxODFhOGM1NTBlNzRhY2FiYTRlOGM1NWJkYzY0OWZhNTUxZGM5IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFhMWQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggdGhpcyBraW5kIG9mIGVycm9ycyB3aXRoIGF1dG9tYWtlIDEuMTIueDoKK3wgZG9jL21hbi9NYWtlZmlsZS5hbTozOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEzCisKK0luZGV4OiBsYW1lLTMuOTkuNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGxhbWUtMy45OS41L2NvbmZpZ3VyZS5pbgorQEAgLTc3LDkgKzc3LDYgQEAgaWYgdGVzdCAiJHtHQ0N9IiA9ICJ5ZXMiOyB0aGVuCisgCUFDX01TR19SRVNVTFQoJHtHQ0NfdmVyc2lvbn0pCisgZmkKKyAKKy1kbmwgbW9yZSBhdXRvbWFrZSBzdHVmZgorLUFNX0NfUFJPVE9UWVBFUworLQorIEFDX0NIRUNLX0hFQURFUihkbWFsbG9jLmgpCisgaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZG1hbGxvY19ofSIgPSAieWVzIjsgdGhlbgorIAlBTV9XSVRIX0RNQUxMT0MKK0luZGV4OiBsYW1lLTMuOTkuNS9kb2MvaHRtbC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvZG9jL2h0bWwvTWFrZWZpbGUuYW0KKysrKyBsYW1lLTMuOTkuNS9kb2MvaHRtbC9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuNyAyMDEwLzA5LzMwIDIwOjU4OjQwIGphejAwMSBFeHAgJAorIAorLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBkb2NkaXIgPSAkKGRhdGFkaXIpL2RvYworIHBrZ2RvY2RpciA9ICQoZG9jZGlyKS8kKFBBQ0tBR0UpCitJbmRleDogbGFtZS0zLjk5LjUvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9saWJtcDNsYW1lL2kzODYvTWFrZWZpbGUuYW0KKysrKyBsYW1lLTMuOTkuNS9saWJtcDNsYW1lL2kzODYvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjICRJZDogTWFrZWZpbGUuYW0sdiAxLjI2IDIwMTEvMDQvMDQgMDk6NDI6MzQgYWxlaWRpbmdlciBFeHAgJAorIAorLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduICQodG9wX3NyY2RpcikvYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorIAorIERFRlMgPSBAREVGU0AgQENPTkZJR19ERUZTQAorIAorSW5kZXg6IGxhbWUtMy45OS41L2RvYy9tYW4vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2RvYy9tYW4vTWFrZWZpbGUuYW0KKysrKyBsYW1lLTMuOTkuNS9kb2MvbWFuL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyAkSWQ6IE1ha2VmaWxlLmFtLHYgMS4xIDIwMDAvMTAvMjIgMTE6Mzk6NDQgYWxlaWRpbmdlciBFeHAgJAorIAorLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBtYW5fTUFOUyA9IGxhbWUuMQorIEVYVFJBX0RJU1QgPSAke21hbl9NQU5TfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbm8tZ3RrMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhkN2YxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisjIEFjcXVpcmVkIGZyb20gT3BlbkVtYmVkZGVkCisKKy0tLSBsYW1lLTMuOTYuMS9jb25maWd1cmUuaW5+bm8tZ3RrMS5wYXRjaAkyMDA0LTA3LTI1IDE1OjUyOjEyLjAwMDAwMDAwMCArMDEwMAorKysrIGxhbWUtMy45Ni4xL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEwIDE1OjU0OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM2Myw3ICszNjMsMTIgQEAKKyAKKyBkbmwgY29uZmlndXJlIHVzZSBvZiBmZWF0dXJlcworIAorLUFNX1BBVEhfR1RLKDEuMi4wLCBIQVZFX0dUSz0ieWVzIiwgSEFWRV9HVEs9Im5vIikKKysjQU1fUEFUSF9HVEsoMS4yLjAsIEhBVkVfR1RLPSJ5ZXMiLCBIQVZFX0dUSz0ibm8iKQorK0hBVkVfR1RLPSJubyIKKytHVEtfQ0ZMQUdTPSIiCisrR1RLX0xJQlM9IiIKKytBQ19TVUJTVChHVEtfQ0ZMQUdTKQorK0FDX1NVQlNUKEdUS19MSUJTKQorCisgZG5sIEVsZWN0cmljRmVuY2UgbWFsbG9jIGRlYnVnZ2luZworIEFDX01TR19DSEVDS0lORyh1c2Ugb2YgRWxlY3RyaWNGZW5jZSBtYWxsb2MgZGVidWdnaW5nKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3NzYxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJIaWdoIHF1YWxpdHkgTVAzIGF1ZGlvIGVuY29kZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbGFtZS5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTI5MCZhdGlkPTEwMDI5MCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworREVQRU5EUyA9ICJuY3Vyc2VzIGdldHRleHQtbmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNDZiZGEwMGZmYmIwYmExZGFjMjJmOGQwODdmNTRkOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2xhbWUuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1hMjI1ODE4MmM1OTNjMzk4ZDE1YTQ4MjYyMTMwYTkyYiBcCisiCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGFtZS9sYW1lLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ndGsxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0ODM1YjMxM2Q0YThiNjhmNTM0OTgxNmQzM2UwN2NlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI0MzQ2YjQxNThlNGFmM2JkOWYyZTE5NGJiMjNlYjQ3M2M3NWZiNzM3NzAxMTUyMzM1MzE5NmIxOWI5YTIzZmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFUyArPSAibGlibXAzbGFtZSBsaWJtcDNsYW1lLWRldiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9sYW1lIgorRklMRVNfbGlibXAzbGFtZSA9ICIke2xpYmRpcn0vbGlibXAzbGFtZS5zby4qIgorRklMRVNfbGlibXAzbGFtZS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vKiIKK0ZJTEVTXyR7UE59LWRldiA9ICIiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2FwcGVuZF94ODYgPSAiIGFjX2N2X2hlYWRlcl9lbW1pbnRyaW5faD1ubyBhY19jdl9oZWFkZXJfeG1taW50cmluX2g9bm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTIvYnVpbGRjbGVhbnVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjgxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDg5IEBACitJdCBtYWtlcyBtdWNoIG1vcmUgc2Vuc2UgdG8gY29udHJvbCBvdXIgb3duIENGTEFHUyBhbmQgYXZvaWRpbmcgZlBJQyBicmVha3MKK3NvbWUgYXJjaGVzIHRvby4gQXNzdW1lIHdlIGtub3cgd2hhdCB3ZSdyZSBkb2luZyBhbmQgcmVtb3ZlIGFsbCB0aGUgbWVzc2luZyAKK2Fyb3VuZC4KKworUlAgMjMvMi8xMAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhNTJkZWMtMC43LjQvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYTUyZGVjLTAuNy40Lm9yaWcvY29uZmlndXJlLmluCTIwMTAtMDItMjMgMTQ6NTE6NTAuMDAwMDAwMDAwICswMDAwCisrKysgYTUyZGVjLTAuNy40L2NvbmZpZ3VyZS5pbgkyMDEwLTAyLTIzIDE0OjUyOjM2LjAwMDAwMDAwMCArMDAwMAorQEAgLTE0LDYyICsxNCw2IEBACisgQUNfUFJPR19DQworIEFDX1BST0dfR0NDX1RSQURJVElPTkFMCisgCistaWYgdGVzdCB4IiRHQ0MiID0geCJ5ZXMiOyB0aGVuCistCistICAgIGRubCBHQ0Mtc3BlY2lmaWMgZmxhZ3MgLSB0cnkgdG8gb3B0aW1pemUgdGhlbSBzb21ldGltZQorLSAgICBkbmwgLVdhbGwgLVdlcnJvciBtb3ZlZCB0byB0aGUgZW5kIHRvIG5vdCBkaXN0dXJiIHRoZSBjb25maWd1cmUgc2NyaXB0CistCistICAgIGRubCAtTzMKKy0gICAgY2hhbmdlcXVvdGUoPDwsPj4pCistICAgIE9QVF9DRkxBR1M9YGVjaG8gIiRDRkxBR1MifHNlZCAicy8tT1swLTldKi8vZyJgCistICAgIGNoYW5nZXF1b3RlKFssXSkKKy0gICAgT1BUX0NGTEFHUz0iJE9QVF9DRkxBR1MgLU8zIgorLSAgICBBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pCistCistICAgIGRubCAtZm9taXQtZnJhbWUtcG9pbnRlcgorLSAgICBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1mb21pdC1mcmFtZS1wb2ludGVyIgorLSAgICBBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pCistCistICAgIGRubCBhcmNoLXNwZWNpZmljIGZsYWdzCistICAgIGNhc2UgIiRob3N0IiBpbgorLSAgICBpPzg2LSogfCBrPy0qKQorLQljYXNlICIkaG9zdCIgaW4KKy0JaTM4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWkzODYiOzsKKy0JaTQ4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWk0ODYiOzsKKy0JaTU4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PXBlbnRpdW0iOzsKKy0JaTY4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PXBlbnRpdW1wcm8iOzsKKy0JazYtKikgICBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWs2Ijs7CistCWVzYWMKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIHNwYXJjLSogfCBzcGFyYzY0LSopCistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLW10dW5lPXVsdHJhc3BhcmMiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBtaXBzLXNnaS1pcml4Ni4qKQlkbmwgZG8gd2UgbmVlZCB0byBiZSB0aGF0IHNwZWNpZmljID8KKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAtbWFiaT02NCIKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIGVzYWMKKy1lbGlmIHRlc3QgeCIkQ0MiID0geCJ0Y2MiIC1hIHgiYCRDQyAtdmVyc2lvbiAyPiYxIHwgZ3JlcCBUZW5EUkFgIiAhPSB4IiI7IHRoZW4KKy0gICAgZG5sIFRlbkRSQSBwb3J0YWJpbGl0eSBjaGVja2luZyBjb21waWxlcgorLSAgICBURU5EUkE9eWVzCistICAgIENGTEFHUz0iLVhwIC1ZYW5zaSAtZmBwd2RgL2luY2x1ZGUvdGVuZHJhLmggLURFTElERV9DT0RFIgorLSAgICBlbmFibGVfbWxpYj1ubworLSAgICBlbmFibGVfb3NzPW5vCistICAgIGVuYWJsZV9zb2xhcmlzX2F1ZGlvPW5vCistZWxpZiB0ZXN0IHgiJENDIiA9IHgiaWNjIiAtYSB4ImAkQ0MgLVYgMj4mMSB8IGdyZXAgSW50ZWxgIiAhPSB4IiI7IHRoZW4KKy0gICAgZG5sIEludGVsIEMrKyBjb21waWxlcgorLSAgICBDRkxBR1M9Ii1nIC1PMyAtdW5yb2xsIC1pcCIKKy1lbHNlCistICAgIGRubCBub24tZ2NjIGZsYWdzIC0gd2UgcHJvYmFibHkgbmVlZCBleGFjdCBjb25maWd1cmF0aW9uIHRyaXBsZXRzIGhlcmUuCistICAgIGNhc2UgIiRob3N0IiBpbgorLSAgICBtaXBzLXNnaS1pcml4Ni4qKQorLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC02NCIKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIHNwYXJjLXN1bi1zb2xhcmlzKikKKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAteENDIC1mYXN0IC14TzUiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBlc2FjCistZmkKKy0KKyBkbmwgQ2hlY2tzIGZvciBsaWJ0b29sIC0gdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgd2Ugc2V0IGNmbGFncworIEFDX0RJU0FCTEVfU0hBUkVECisgQUNfTElCVE9PTF9XSU4zMl9ETEwKK0luZGV4OiBhNTJkZWMtMC43LjQvbGliYTUyL2NvbmZpZ3VyZS5pbmNsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYTUyZGVjLTAuNy40Lm9yaWcvbGliYTUyL2NvbmZpZ3VyZS5pbmNsCTIwMTAtMDItMjMgMTQ6NTE6NDQuMDAwMDAwMDAwICswMDAwCisrKysgYTUyZGVjLTAuNy40L2xpYmE1Mi9jb25maWd1cmUuaW5jbAkyMDEwLTAyLTIzIDE0OjUxOjU5LjAwMDAwMDAwMCArMDAwMAorQEAgLTEsOSArMSw2IEBACisgQUNfU1VCU1QoW0xJQkE1Ml9DRkxBR1NdKQorIEFDX1NVQlNUKFtMSUJBNTJfTElCU10pCisgCistZG5sIGF2b2lkIC1mUElDIHdoZW4gcG9zc2libGUKKy1MSUJBNTJfQ0ZMQUdTPSIkTElCQTUyX0NGTEFHUyAtcHJlZmVyLW5vbi1waWMiCistCisgQUNfQVJHX0VOQUJMRShbZG91YmxlXSwKKyAgICAgWyAgLS1lbmFibGUtZG91YmxlICAgICAgICAgdXNlIGRvdWJsZS1wcmVjaXNpb24gc2FtcGxlc10pCisgaWYgdGVzdCB4IiRlbmFibGVfZG91YmxlIiA9IHgieWVzIjsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiNjZiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJBVFNDIEEvNTIgc3Vycm91bmQgc291bmQgc3RyZWFtIGRlY29kZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbGliYTUyLnNvdXJjZWZvcmdlLm5ldC8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly9pbmNsdWRlL2E1Mi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PTgxMTUyY2ViMzU2MmJmMjBhNjBkMWI2MDE4MTc1ZGQxIgorU0VDVElPTiA9ICJsaWJzIgorUFIgPSAicjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvZmlsZXMvYTUyZGVjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZGNsZWFudXAucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYWE5ZjViYzQ0MjMyZGM4YWVlYTc3M2ZlYTU2YmU4MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjFkNzI0YWIzYjM5MzMzMzAxOTQzNTM2ODdkZjgyYzQ3NWI1ZGZiOTk3NTEzZWVmNGMyNWRlNmM4NjVlYzMzIgorUyA9ICIke1dPUktESVJ9L2E1MmRlYy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zaGFyZWQgIgorCitQQUNLQUdFUyA9KyAiYTUyZGVjIGE1MmRlYy1kb2MiCisKK0ZJTEVTX2E1MmRlYyA9ICIgJHtiaW5kaXJ9LyogIgorRklMRVNfYTUyZGVjLWRvYyA9ICIgJHttYW5kaXJ9L21hbjEvKiAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmNGIxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2LmluYwpAQCAtMCwwICsxLDE0NiBAQAorU1VNTUFSWSA9ICJPcGVuIHNvdXJjZSBhdWRpbyBhbmQgdmlkZW8gcHJvY2Vzc2luZyB0b29scyBhbmQgbGlicmFpcmllcyIKK0RFU0NSSVBUSU9OID0gIkxpYmF2IGlzIGEgZnJpZW5kbHkgYW5kIGNvbW11bml0eS1kcml2ZW4gZWZmb3J0IHRvIHByb3ZpZGUgaXRzIHVzZXJzIFwKKyAgICAgICAgICAgICAgIHdpdGggYSBzZXQgb2YgcG9ydGFibGUsIGZ1bmN0aW9uYWwgYW5kIGhpZ2gtcGVyZm9ybWFuY2UgbGlicmFyaWVzIGZvciBcCisgICAgICAgICAgICAgICBkZWFsaW5nIHdpdGggbXVsdGltZWRpYSBmb3JtYXRzIG9mIGFsbCBzb3J0cy4gSXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBcCisgICAgICAgICAgICAgICBGRm1wZWcgY29kZWJhc2UsIGJ1dCBnb2VzIGl0cyBvd24gd2F5IHRoZXNlIGRheXMsIHByb3ZpZGluZyBpdHMgdXNlcnMgXAorICAgICAgICAgICAgICAgd2l0aCByZWxpYWJsZSByZWxlYXNlcyBhbmQgYSBjbGVhciB2aXNpb24gaG93IHRvIGdvIGZvcndhcmQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmF2Lm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmF2Lm9yZy9yZWxlYXNlcy8ke0JQfS50YXIueHoiCisKKyMgUHJvdmlkZXMgZmZtcGVnIGNvbXBhdCwgc2VlIGh0dHA6Ly9saWJhdi5vcmcvYWJvdXQuaHRtbAorUFJPVklERVMgPSAiZmZtcGVnIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworREVQRU5EUyA9ICJhbHNhLWxpYiB6bGliIGxpYm9nZyB5YXNtLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0IgPSAiJHtTfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCitGVUxMX09QVElNSVpBVElPTl9hcm12N2EgPSAiLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzQgLWZmYXN0LW1hdGgiCitCVUlMRF9PUFRJTUlaQVRJT04gPSAiJHtGVUxMX09QVElNSVpBVElPTn0iCisKK0VYVFJBX0ZGQ09ORl9hcm12N2EgPSAiLS1jcHU9Y29ydGV4LWE4IgorRVhUUkFfRkZDT05GID89ICIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJiemlwMiB4MjY0IHRoZW9yYSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS1lbmFibGUtYnpsaWIsLS1kaXNhYmxlLWJ6bGliLGJ6aXAyIgorUEFDS0FHRUNPTkZJR1tmYWFjXSA9ICItLWVuYWJsZS1saWJmYWFjLC0tZGlzYWJsZS1saWJmYWFjLGZhYWMiCitQQUNLQUdFQ09ORklHW2dzbV0gPSAiLS1lbmFibGUtbGliZ3NtLC0tZGlzYWJsZS1saWJnc20sbGliZ3NtIgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1pbmRldj1qYWNrLC0tZGlzYWJsZS1pbmRldj1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW2xpYnZvcmJpc10gPSAiLS1lbmFibGUtbGlidm9yYmlzLC0tZGlzYWJsZS1saWJ2b3JiaXMsbGlidm9yYmlzIgorUEFDS0FHRUNPTkZJR1ttcDNsYW1lXSA9ICItLWVuYWJsZS1saWJtcDNsYW1lLC0tZGlzYWJsZS1saWJtcDNsYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSA9ICItLWVuYWJsZS1saWJzY2hyb2VkaW5nZXIsLS1kaXNhYmxlLWxpYnNjaHJvZWRpbmdlcixzY2hyb2VkaW5nZXIiCitQQUNLQUdFQ09ORklHW3NwZWV4XSA9ICItLWVuYWJsZS1saWJzcGVleCwtLWRpc2FibGUtbGlic3BlZXgsc3BlZXgiCitQQUNLQUdFQ09ORklHW3RoZW9yYV0gPSAiLS1lbmFibGUtbGlidGhlb3JhLC0tZGlzYWJsZS1saWJ0aGVvcmEsbGlidGhlb3JhIgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGksLS1kaXNhYmxlLXZhYXBpLGxpYnZhIgorUEFDS0FHRUNPTkZJR1t2cHhdID0gIi0tZW5hYmxlLWxpYnZweCwtLWRpc2FibGUtbGlidnB4LGxpYnZweCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTFncmFiLC0tZGlzYWJsZS14MTFncmFiLHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IHhwcm90byB2aXJ0dWFsL2xpYnNkbCIKK1BBQ0tBR0VDT05GSUdbeDI2NF0gPSAiLS1lbmFibGUtbGlieDI2NCwtLWRpc2FibGUtbGlieDI2NCx4MjY0IgorCisjIENoZWNrIGNvZGVjcyB0aGF0IHJlcXVpcmUgLS1lbmFibGUtbm9uZnJlZQorVVNFX05PTkZSRUUgPSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdQQUNLQUdFQ09ORklHJywgWyAnZmFhYycsICdvcGVuc3NsJyBdLCAneWVzJywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgLS1lbmFibGUtZ3BsIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnVVNFX05PTkZSRUUnLCAneWVzJywgJy0tZW5hYmxlLW5vbmZyZWUnLCAnJywgZCl9IFwKKyAgICAtLWVuYWJsZS1hdmZpbHRlciBcCisgICAgXAorICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgXAorICAgIC0tZW5hYmxlLWF2c2VydmVyIFwKKyAgICAtLWVuYWJsZS1hdnBsYXkgXAorICAgIC0tbGQ9IiR7Q0NMRH0iIFwKKyAgICAtLWFyY2g9JHtUQVJHRVRfQVJDSH0gXAorICAgIC0tdGFyZ2V0LW9zPSJsaW51eCIgXAorICAgIC0tZW5hYmxlLWNyb3NzLWNvbXBpbGUgXAorICAgIC0tZXh0cmEtY2ZsYWdzPSIke1RBUkdFVF9DRkxBR1N9ICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IiBcCisgICAgLS1leHRyYS1sZGZsYWdzPSIke1RBUkdFVF9MREZMQUdTfSIgXAorICAgIC0tc3lzcm9vdD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IiBcCisgICAgLS1lbmFibGUtaGFyZGNvZGVkLXRhYmxlcyBcCisgICAgJHtFWFRSQV9GRkNPTkZ9IFwKKyAgICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorICAgIC0tc2hsaWJkaXI9JHtsaWJkaXJ9IFwKKyIKKworZG9fY29uZmlndXJlKCkgeworICAgICMgV2UgZG9uJ3QgaGF2ZSBUQVJHRVRfUFJFRklYLXBrZ2NvbmZpZworICAgIHNlZCAtaSAnL3BrZ19jb25maWdfZGVmYXVsdD0iJHtjcm9zc19wcmVmaXh9JHtwa2dfY29uZmlnX2RlZmF1bHR9Ii9kJyAke1N9L2NvbmZpZ3VyZQorICAgIG1rZGlyIC1wICR7Qn0KKyAgICBjZCAke0J9CisgICAgJHtTfS9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9CisgICAgc2VkIC1pIC1lIHM6T3M6TzQ6ZyAke0J9L2NvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2xpYmF2ZmlsdGVyLyouaCAke0R9JHtpbmNsdWRlZGlyfS9saWJhdmZpbHRlci8KK30KKworUEFDS0FHRVMgKz0gIiR7UE59LXZob29rLWRiZyAke1BOfS12aG9vayBmZm1wZWcteDI2NC1wcmVzZXRzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYihhdihjb2RlY3xkZXZpY2V8ZmlsdGVyfGZvcm1hdHx1dGlsKXxzd3NjYWxlKS4qIgorCitSU1VHR0VTVFNfJHtQTn0gPSAibXBsYXllciIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9LyR7UE59IgorCitGSUxFU18ke1BOfS12aG9vayA9ICIke2xpYmRpcn0vdmhvb2siCitGSUxFU18ke1BOfS12aG9vay1kYmcgKz0gIiR7bGliZGlyfS92aG9vay8uZGVidWciCisKK0ZJTEVTX2ZmbXBlZy14MjY0LXByZXNldHMgPSAiJHtkYXRhZGlyfS8qLmF2cHJlc2V0IgorCitMRUFEX1NPTkFNRSA9ICJsaWJhdmNvZGVjLnNvIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgYXZfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgYXZfcGtnY29uZmlnID0gZC5leHBhbmQoJyR7bGliZGlyfS9wa2djb25maWcnKQorCisgICAgIyBSdW50aW1lIHBhY2thZ2UKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc29cLi4qJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBsaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorCisgICAgIyBEZXZlbG9wbWVudCBwYWNrYWdlcyAoLWRldiwgLXN0YXRpY2RldikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc28kJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9wa2djb25maWcsICdebGliKC4qKVwucGMkJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLmEkJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtc3RhdGljZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZSAtIHN0YXRpYyBsaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAnaTU4NicsICdpNjg2JyBdOgorICAgICAgICAjIGxpYmF2IGNhbid0IGJlIGJ1aWxkIHdpdGggLWZQSUMgZm9yIDMyLWJpdCB4ODYKKyAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0lOU0FORV9TS0lQXyVzJyAlIHBrZywgJyB0ZXh0cmVsJykKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYvbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzMWNhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQmFja3BvcnQgcGF0Y2ggdG8gZml4IENWRS0yMDE0LTk2NzYuCisKK2h0dHBzOi8vc2VjdXJpdHktdHJhY2tlci5kZWJpYW4ub3JnL3RyYWNrZXIvQ1ZFLTIwMTQtOTY3NgoraHR0cHM6Ly9naXQubGliYXYub3JnLz9wPWxpYmF2LmdpdDthPWNvbW1pdDtoPWIzZjA0NjU3MzY4YTMyYTk5MDM0MDYzOTVmODY1ZTIzMGIxZGUzNDgKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gYjNmMDQ2NTczNjhhMzJhOTkwMzQwNjM5NWY4NjVlMjMwYjFkZTM0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1Y2EgQmFyYmF0byA8bHVfemVyb0BnZW50b28ub3JnPgorRGF0ZTogTW9uLCA1IEphbiAyMDE1IDEwOjQwOjQxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlZ21lbnQ6IEZpeCB0aGUgZmFpbHVyZSBwYXRocworCitBIGZhaWx1cmUgaW4gc2VnbWVudF9lbmQoKSBvciBzZWdtZW50X3N0YXJ0KCkgd291bGQgbGVhZCB0byBmcmVlaW5nCithIGRhbmdsaW5nIHBvaW50ZXIgYW5kIGluIGdlbmVyYWwgZnVydGhlciBjYWxscyB0byBzZWdfd3JpdGVfcGFja2V0KCkKK29yIHRvIHNlZ193cml0ZV90cmFpbGVyKCkgd291bGQgaGF2ZSB0aGUgc2FtZSBmYXVsdHkgYmVoYXZpb3VyLgorCitDQzogbGliYXYtc3RhYmxlQGxpYmF2Lm9yZworUmVwb3J0ZWQtQnk6IGx1b2RhbG9uZ2RlQGdtYWlsLmNvbQorLS0tCisgbGliYXZmb3JtYXQvc2VnbWVudC5jIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9zZWdtZW50LmMgYi9saWJhdmZvcm1hdC9zZWdtZW50LmMKK2luZGV4IDUyZGE2YjkuLmJjZmQxZjkgMTAwNjQ0CistLS0gYS9saWJhdmZvcm1hdC9zZWdtZW50LmMKKysrKyBiL2xpYmF2Zm9ybWF0L3NlZ21lbnQuYworQEAgLTE4NCw2ICsxODQsMTMgQEAgc3RhdGljIHZvaWQgY2xvc2VfbnVsbF9jdHgoQVZJT0NvbnRleHQgKnBiKQorICAgICBhdl9mcmVlKHBiKTsKKyB9CisgCisrc3RhdGljIHZvaWQgc2VnX2ZyZWVfY29udGV4dChTZWdtZW50Q29udGV4dCAqc2VnKQorK3sKKysgICAgYXZpb19jbG9zZXAoJnNlZy0+cGIpOworKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQoc2VnLT5hdmYpOworKyAgICBzZWctPmF2ZiA9IE5VTEw7CisrfQorKworIHN0YXRpYyBpbnQgc2VnX3dyaXRlX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCisgeworICAgICBTZWdtZW50Q29udGV4dCAqc2VnID0gcy0+cHJpdl9kYXRhOworQEAgLTI2NSwxMiArMjcyLDkgQEAgc3RhdGljIGludCBzZWdfd3JpdGVfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKKyAgICAgfQorIAorIGZhaWw6CistICAgIGlmIChyZXQpIHsKKy0gICAgICAgIGlmIChzZWctPmxpc3QpCistICAgICAgICAgICAgYXZpb19jbG9zZShzZWctPnBiKTsKKy0gICAgICAgIGlmIChzZWctPmF2ZikKKy0gICAgICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQoc2VnLT5hdmYpOworLSAgICB9CisrICAgIGlmIChyZXQgPCAwKQorKyAgICAgICAgc2VnX2ZyZWVfY29udGV4dChzZWcpOworKworICAgICByZXR1cm4gcmV0OworIH0KKyAKK0BAIC0yODIsNiArMjg2LDkgQEAgc3RhdGljIGludCBzZWdfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKKyAgICAgaW50NjRfdCBlbmRfcHRzID0gc2VnLT5yZWNvcmRpbmdfdGltZSAqIHNlZy0+bnVtYmVyOworICAgICBpbnQgcmV0LCBjYW5fc3BsaXQgPSAxOworIAorKyAgICBpZiAoIW9jKQorKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKysKKyAgICAgaWYgKHNlZy0+aGFzX3ZpZGVvKSB7CisgICAgICAgICBjYW5fc3BsaXQgPSBzdC0+Y29kZWMtPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPICYmCisgICAgICAgICAgICAgICAgICAgICBwa3QtPmZsYWdzICYgQVZfUEtUX0ZMQUdfS0VZOworQEAgLTMyMiwxMSArMzI5LDggQEAgc3RhdGljIGludCBzZWdfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKKyAgICAgcmV0ID0gZmZfd3JpdGVfY2hhaW5lZChvYywgcGt0LT5zdHJlYW1faW5kZXgsIHBrdCwgcyk7CisgCisgZmFpbDoKKy0gICAgaWYgKHJldCA8IDApIHsKKy0gICAgICAgIGlmIChzZWctPmxpc3QpCistICAgICAgICAgICAgYXZpb19jbG9zZShzZWctPnBiKTsKKy0gICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChvYyk7CistICAgIH0KKysgICAgaWYgKHJldCA8IDApCisrICAgICAgICBzZWdfZnJlZV9jb250ZXh0KHNlZyk7CisgCisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTMzNSw3ICszMzksMTEgQEAgc3RhdGljIGludCBzZWdfd3JpdGVfdHJhaWxlcihzdHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzKQorIHsKKyAgICAgU2VnbWVudENvbnRleHQgKnNlZyA9IHMtPnByaXZfZGF0YTsKKyAgICAgQVZGb3JtYXRDb250ZXh0ICpvYyA9IHNlZy0+YXZmOworLSAgICBpbnQgcmV0OworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgaWYgKCFvYykKKysgICAgICAgIGdvdG8gZmFpbDsKKysKKyAgICAgaWYgKCFzZWctPndyaXRlX2hlYWRlcl90cmFpbGVyKSB7CisgICAgICAgICBpZiAoKHJldCA9IHNlZ21lbnRfZW5kKG9jLCAwKSkgPCAwKQorICAgICAgICAgICAgIGdvdG8gZmFpbDsKKy0tIAorMi40LjEuMzE0Lmc5NTMyZWFkCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGE2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBsaWJhdi5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjc1ZTgzODA2OGE3NWZiODhlMWI0ZWEwNTQ2YmMxNmYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA4NzVlODM1ZGE2ODNlZWYxYTdiYWM3NWUxODg0NjM0MTk0MTQ5ZDc0NzlkMTUzOGJhOWZiZTE2MTRkMDY2ZDciCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFhNTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGlicG9zdHByb2NfZ2l0LmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiRkZtcGVnIGRlcml2ZWQgcG9zdHByb2Nlc3NpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQudmlkZW9sYW4ub3JnLz9wPWxpYnBvc3Rwcm9jLmdpdDthPXN1bW1hcnkiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYmF2IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworIyBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbGliYXYgd2hpY2ggaGFzIGNvbW1lcmNpYWwgZmxhZworTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitQViA9ICI1Mi4zLjArZ2l0JHtTUkNQVn0iCisKK1NSQ1JFViA9ICI4MTFkYjNiOTU3ZGZkZTI0YWVmMmQwZjgyZTI5N2U1YmY1NTJkODczIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2x1LXplcm8vcG9zdHByb2M7cHJvdG9jb2w9aHR0cHMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitGVUxMX09QVElNSVpBVElPTl9hcm12N2EgPSAiLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzQgLWZmYXN0LW1hdGgiCitCVUlMRF9PUFRJTUlaQVRJT04gPSAiJHtGVUxMX09QVElNSVpBVElPTn0iCisKK0VYVFJBX0ZGQ09ORl9hcm12N2EgPSAiLS1jcHU9Y29ydGV4LWE4IgorRVhUUkFfRkZDT05GID89ICIiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgIC0tZW5hYmxlLWdwbCBcCisgICAgLS1lbmFibGUtcG9zdHByb2MgXAorICAgIFwKKyAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIFwKKyAgICAtLWFyY2g9JHtUQVJHRVRfQVJDSH0gXAorICAgIC0tdGFyZ2V0LW9zPSJsaW51eCIgXAorICAgIC0tZW5hYmxlLWNyb3NzLWNvbXBpbGUgXAorICAgIC0tZXh0cmEtY2ZsYWdzPSIke1RBUkdFVF9DRkxBR1N9ICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IiBcCisgICAgLS1leHRyYS1sZGZsYWdzPSIke1RBUkdFVF9MREZMQUdTfSIgXAorICAgIC0tc3lzcm9vdD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IiBcCisgICAgLS1zaGxpYmRpcj0iJHtsaWJkaXJ9IiBcCisgICAgJHtFWFRSQV9GRkNPTkZ9IFwKKyIKKworZG9fY29uZmlndXJlKCkgeworICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL2FkZHBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ0MGMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGliaWQzdGFnLTAuMTUuMWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZDN0YWctMC4xNS4xYi5vcmlnL01ha2VmaWxlLmFtCTIwMDktMDctMjkgMDk6Mjk6MjAuMDAwMDAwMDAwICswMTAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvTWFrZWZpbGUuYW0JMjAwOS0wNy0yOSAwOToyOTo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNyw2ICsyNyw5IEBACisgbGliX0xUTElCUkFSSUVTID0JbGliaWQzdGFnLmxhCisgaW5jbHVkZV9IRUFERVJTID0JaWQzdGFnLmgKKyAKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBpZDN0YWcucGMKKysKKyAjIyBGcm9tIHRoZSBsaWJ0b29sIGRvY3VtZW50YXRpb24gb24gbGlicmFyeSB2ZXJzaW9uaW5nOgorICMjCisgIyMgQ1VSUkVOVAorSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkM3RhZy0wLjE1LjFiLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDctMjkgMDk6Mjc6MTUuMDAwMDAwMDAwICswMTAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDktMDctMjkgMDk6Mjc6NDUuMDAwMDAwMDAwICswMTAwCitAQCAtMjAxLDUgKzIwMSw1IEBACisgZG5sIEFDX1NVQlNUKExUTElCT0JKUykKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIG1zdmMrKy9NYWtlZmlsZSAgXAorLQlsaWJpZDN0YWcubGlzdF0pCisrCWxpYmlkM3RhZy5saXN0IGlkM3RhZy5wY10pCisgQUNfT1VUUFVUCitJbmRleDogbGliaWQzdGFnLTAuMTUuMWIvaWQzdGFnLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvaWQzdGFnLnBjLmluCTIwMDktMDctMjkgMDk6Mjk6MTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDExIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogaWQzdGFnCisrRGVzY3JpcHRpb246IElEMyB0YWcgcmVhZGluZyBsaWJyYXJ5CisrUmVxdWlyZXM6CisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxpZDN0YWcgLWx6CisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0NWZiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzU5OTI4MCZncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYworLS0tIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTI0IDAxOjIyOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA2OjQxOjAyLjczNDgzNTAxNCArMDIwMAorQEAgLTI4LDcgKzI4LDcgQEAKKworLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKworLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorCisgZG5sIFN5c3RlbSB0eXBlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YThhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnXzAuMTUuMWIuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBpbnRlcmFjdGluZyB3aXRoIElEMyB0YWdzIGluIE1QMyBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWFkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkJZmlsZTovL0NPUFlSSUdIVDttZDU9NWU2Mjc5ZWZiODdjMjZjNmU1ZTdhNjgzMTdhNmE4N2EgXAorCQkJZmlsZTovL3ZlcnNpb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PTg2YWM2OGI2N2YwNTRiN2FmZGU5ZTE0OWJiYzNmZTYzIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJ6bGliIGdwZXJmLW5hdGl2ZSIKK1BSID0gInI3IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tYXJzLm9yZy9wdWIvbXBlZy9saWJpZDN0YWctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZHBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTU4MDhhZDk5N2JhMzJjNDk4ODAzODIyMDc4NzQ4YzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNkYTRmNmU3OTk3Mjc4ZjhhM2ZlZjRjNmEzNzJkMzQyZjcwNTA1MWQxZWViNmE0NmE4NmIwMzYxMGUyNjE1MSIKKworUyA9ICIke1dPUktESVJ9L2xpYmlkM3RhZy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYWRkLXBrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDcwIEBACitIZXJlIGlzIGEgcGF0Y2ggZm9yIGFkZGluZyBwa2ctY29uZmlnIHN1cHBvcnQgdG8gbGlibWFkLgorSXQgd291bGQgbWFrZSBsaWZlIGEgYml0IGVhc2llciBmb3IgZGlzdHJvIG1haW50YWluZXJzIGlmIHRoaXMgd2FzIGFwcGxpZWQuCitJbiBjYXNlIHlvdSBkaWRuJ3Qga25vdywgcGtnLWNvbmZpZyBpcyBhIHRvb2wgZm9yIHByb3ZpZGluZyBMREZMQUdTIGFuZAorQ0ZMQUdTIGZvciBwYWNrYWdlcyB1c2luZyBzaGFyZWQgbGlicmFyaWVzLiBJdCdzIG9uIGZyZWVkZXNrdG9wLm9yZy4KK0RlYmlhbiBoYXMgYWxyZWFkeSBiZWVuIGRpc3RyaWJ1dGluZyB0aGUgcGtnLWNvbmZpZyBmaWxlIG1hZC5wYyB3aXRoCitsaWJtYWQgZm9yIHNvbWUgdGltZSwgYW5kIHBlb3BsZSBkZXZlbG9waW5nIG9uIGRlYmlhbiAobm90YWJseSB4bW1zMiAKK2RldmVsb3BlcnMpIGhhdmUgc3RhcnRlZCByZWx5aW5nIG9uIHRoaXMgc3VwcG9ydCBiZWluZyBwcmVzZW50LCBjYXVzaW5nCitzb21lIGNvbmZ1c2lvbiBmb3IgcGVvcGxlIGluc3RhbGxpbmcgZnJvbSBzb3VyY2UgYW5kIG9uIHNvbWUgQlNEcyB3aGljaAorZG8gbm90IHByb3ZpZGUgbWFkLnBjIChnb29nbGU6IHBrZ2NvbmZpZyBsaWJtYWQpLgorCitFTUgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLWgzMWd6WkV0TkxUcU9qbEYKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JnF1b3Q7bGlibWFkLTAuMTUuMWItcGtnY29uZmlnLnBhdGNoJnF1b3Q7CisKK2RpZmYgLU5hdXIgbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTA6NDE6MzIuMDAwMDAwMDAwICswMTAwCisrKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDgtMDcgMDI6MjU6MjQuNjMzNDYyMTY4ICswMjAwCitAQCAtNDI5LDUgKzQyOSw1IEBACisgZG5sIEFDX1NVQlNUKExUTElCT0JKUykKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIG1zdmMrKy9NYWtlZmlsZSAgXAorLQlsaWJtYWQubGlzdF0pCisrCWxpYm1hZC5saXN0IG1hZC5wY10pCisgQUNfT1VUUFVUCitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4gbGlibWFkLTAuMTUuMWIvbWFkLnBjLmluCistLS0gbGlibWFkLTAuMTUuMWIub2xkL21hZC5wYy5pbgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgkyMDA0LTA4LTA3IDAyOjA0OjU5LjYxNzY5Mjg3MiArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorKyMgbGlibWFkIHBrZy1jb25maWcgc291cmNlIGZpbGUKKysKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKytOYW1lOiBtYWQKKytEZXNjcmlwdGlvbjogTVBFRyBBdWRpbyBEZWNvZGVyCisrVmVyc2lvbjogQFZFUlNJT05ACisrUmVxdWlyZXM6CisrQ29uZmxpY3RzOgorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbWFkIC1sbQorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9NYWtlZmlsZS5hbSBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQorLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9NYWtlZmlsZS5hbQkyMDA0LTAyLTE3IDAzOjAyOjAzLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL01ha2VmaWxlLmFtCTIwMDQtMDgtMDcgMDI6MDM6MTkuODU5ODU4MzY4ICswMjAwCitAQCAtMjQsNiArMjQsOSBAQAorIFNVQkRJUlMgPQkJCisgRElTVF9TVUJESVJTID0JCW1zdmMrKworIAorK3BrZ2NvbmZpZ2RpciA9CQkkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPQltYWQucGMKKysKKyBsaWJfTFRMSUJSQVJJRVMgPQlsaWJtYWQubGEKKyBpbmNsdWRlX0hFQURFUlMgPQltYWQuaAorIAorQEAgLTM0LDcgKzM3LDggQEAKKyBtaW5pbWFkX0xEQUREID0JCWxpYm1hZC5sYQorIAorIEVYVFJBX0RJU1QgPQkJbWFkLmguc2VkICBcCistCQkJQ0hBTkdFUyBDT1BZUklHSFQgQ1JFRElUUyBSRUFETUUgVE9ETyBWRVJTSU9OCisrCQkJQ0hBTkdFUyBDT1BZUklHSFQgQ1JFRElUUyBSRUFETUUgVE9ETyBWRVJTSU9OIFwKKysJCQltYWQucGMuaW4KKyAKKyBleHBvcnRlZF9oZWFkZXJzID0JdmVyc2lvbi5oIGZpeGVkLmggYml0LmggdGltZXIuaCBzdHJlYW0uaCBmcmFtZS5oICBcCisgCQkJc3ludGguaCBkZWNvZGVyLmgKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNTQ0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorUGFzcyBmb3JlaWduIHRvIEFNX0lOSVRfQVVUT01BS0Ugc28gaXQgZG9lc24ndCBlbmZvcmNlIEdOVSBzdHJpY3RuZXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU2MDJmZDMuLmUwNzViODYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI5ICsyOSBAQCBBQ19DT05GSUdfU1JDRElSKFtkZWNvZGVyLmhdKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjN2FhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK2djYyA0LjQgZGlkIHRoaXM6IFRoZSBNSVBTIHBvcnQgbm8gbG9uZ2VyIHJlY29nbml6ZXMgdGhlIGggIGFzbSBjb25zdHJhaW50LiBJdCB3YXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGlzIGNvbnN0cmFpbnQgaW4gb3JkZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyB1bnByZWRpY3RhYmxlIGNvZGUgc2VxdWVuY2VzLiAKKworc28gdGhlIGxpYm1hZCBidWlsZCB3aXRoIGdjYy00LjUuMCB3YXMgZmFpbGluZy4KKworRm91bmQgYSBzb2x1dGlvbiBoZXJlOgorCitodHRwOi8vdXMuZ2VuZXJhdGlvbi1udC5jb20vYW5zd2VyL2J1Zy01Njg0MTgtbGlibWFkMC1kZXYtbXBnMzIxLWNvbXBpbGF0aW9uLWVycm9ycy1taXBzLW1pcHNlbC1hcmNoaXRlY3R1cmVzLWhlbHAtMTY5MDMzNDUxLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzIwMTAvMDcvMjkKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJtYWQtMC4xNS4xYi9maXhlZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibWFkLTAuMTUuMWIub3JpZy9maXhlZC5oCisrKysgbGlibWFkLTAuMTUuMWIvZml4ZWQuaAorQEAgLTI5Nyw2ICsyOTcsMTUgQEAgbWFkX2ZpeGVkX3QgbWFkX2ZfbXVsX2lubGluZShtYWRfZml4ZWRfdAorIAorIC8qIC0tLSBNSVBTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKysjIGVsaWYgZGVmaW5lZChGUE1fTUlQUykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKKysgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTY0X2RpX3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOworKyMgICBkZWZpbmUgTUFEX0ZfTUxYKGhpLCBsbywgeCwgeSkgXAorKyAgICBkbyB7IFwKKysgICAgICAgIHU2NF9kaV90IF9fbGwgPSAodTY0X2RpX3QpICh4KSAqICh5KTsgXAorKyAgICAgICAgaGkgPSBfX2xsID4+IDMyOyBcCisrICAgICAgICBsbyA9IF9fbGw7IFwKKysgICAgIH0gd2hpbGUgKDApCisrCisgIyBlbGlmIGRlZmluZWQoRlBNX01JUFMpCisgCisgLyoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9uby1mb3JjZS1tZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlNmQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgb3B0aW9uIG5vIGxvbmdlciBleGlzdHMgaW4gZ2NjIDMuNC4xCisKK1JQIC0gMTgvMDcvMjAwOAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJtYWQtMC4xNS4xYi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE4IDE1OjQ1OjMwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE4IDE1OjQ1OjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0MCw3ICsxNDAsNiBAQAorICAgICBjYXNlICIkb3B0aW1pemUiIGluCisgCS1PfCItTyAiKikKKyAJICAgIG9wdGltaXplPSItTyIKKy0JICAgIG9wdGltaXplPSIkb3B0aW1pemUgLWZmb3JjZS1tZW0iCisgCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtYWRkciIKKyAJICAgIDogI3ggb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmlubGluZS1mdW5jdGlvbnMiCisgCSAgICA6ICMtIG9wdGltaXplPSIkb3B0aW1pemUgLWZzdHJlbmd0aC1yZWR1Y2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODdkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDldCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwNC0wMS0yMyAxMTo0MTozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwODoyODoyMy43MTg2OTM2OTcgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBACisKKyBBTV9JTklUX0FVVE9NQUtFCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIGRubCBTeXN0ZW0gdHlwZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA4YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZF8wLjE1LjFiLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTVBFRyBBdWRpbyBEZWNvZGVyIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDkiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9DT1BZUklHSFQ7bWQ1PThlNTVlYjE0ODk0ZTc4MmI4NDQ4OGQ1YTIzOWJjMjNkIFwKKwkJCWZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1hYTA3MzExZGQzOTI4OGQ0MzQ5ZjI4ZTFkZTUxNjQ1NCIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibGliaWQzdGFnIgorUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1hcnMub3JnL3B1Yi9tcGVnL2xpYm1hZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tZm9yY2UtbWVtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiZTU0M2JjMzBjNTZmYjZiZWExZDdiZjZhNjRlNjZjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiZmFjM2VkNmJmYmMyODIzZDM3NzVlYmI5MzEwODczNzFlMTQyYmIwZTliYjFiZWU1MWE3NmE2ZTAwNzg2OTAiIAorCitTID0gIiR7V09SS0RJUn0vbGlibWFkLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi1lbmFibGUtc3BlZWQgLS1lbmFibGUtc2hhcmVkIgorIyBUaGUgQVNPJ3MgZG9uJ3QgdGFrZSBhbnkgYWNjb3VudCBvZiB0aHVtYi4uLgorRVhUUkFfT0VDT05GX2FwcGVuZF90aHVtYiA9ICIgLS1kaXNhYmxlLWFzbyAtLWVuYWJsZS1mcG09ZGVmYXVsdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiAtLWVuYWJsZS1mcG09YXJtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisjCWRhbW4gcGlja3kgYXV0b21ha2UuLi4KKwl0b3VjaCBORVdTIEFVVEhPUlMgQ2hhbmdlTG9nCit9CisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0MmUwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJPZ2cgYml0c3RyZWFtIGFuZCBmcmFtaW5nIGxpYmFyeSIKK0RFU0NSSVBUSU9OID0gImxpYm9nZyBpcyB0aGUgYml0c3RyZWFtIGFuZCBmcmFtaW5nIGxpYnJhcnkgXAorZm9yIHRoZSBPZ2cgcHJvamVjdC4gSXQgcHJvdmlkZXMgZnVuY3Rpb25zIHdoaWNoIGFyZSBcCituZWNlc3NhcnkgdG8gY29kZWMgbGlicmFyaWVzIGxpa2UgbGlidm9yYmlzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94aXBoLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZy9uZXd0aWNrZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRiMWI3YTY2OGIyYTZmNDdiMmFmODhmYjAwOGFkNTU1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvb2dnL29nZy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTE7bWQ1PWVkYTgxMjg1NmYxM2EzYjEzMjZlYjhmMDIwY2MzYjBiIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvb2dnLyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjVjM2EzNDMwOWQ4Yjk4NjQwODI3ZTVkMDk5MWE0MDE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmNjg3Y2NkZDVhYzhiNTJkNzYzMjhmYmJmZWJjNzBjNDU5YTQwZWE4OTFkYmYzZGNjYjc0YTIxMDgyNmU3OWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2ZTgwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVG8gZW5hYmxlIC0tZGlzYWJsZS1XZXJyb3IgZm9yIGxpYm9teGlsIHRvIGF2b2lkIHNvbWUgY29tcGlsZXJzIHdoaWNoIGNoZWNrIGNvZGUgc3RyaWN0bHkuCisKK0ZvciBleGFtcGxlLCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGVycm9ycyBoYXBwZW5lZCB0byBzb21lIGNvbXBpbGVyczoKKworMSkgT01YX0lOREVYVFlQRSBpbiBpbmNsdWRlL09NWF9JbmRleC5oIElTIE5PVCBPTVhfSU5ERVhWRU5ET1JUWVBFIGluIHNyYy9iYXNlL29teF9iYXNlX2NvbXBvbmVudC5oCit8IGk1ODYtcG9reS1saW51eC1saWJ0b29sOiBjb21waWxlOiAgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS95b2N0by1idWlsZDUvcG9reS9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4NiAtREhBVkVfQ2xpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtV2Vycm9yIC1EQ09ORklHX0RFQlVHX0xFVkVMPTAgLWMgT01YQ29tcG9uZW50Uk1FeHQuYyAgLWZQSUMgLURQSUMgLW8gLmxpYnMvbGlib214YmFzZV9sYS1PTVhDb21wb25lbnRSTUV4dC5vCit8IG9teF9iYXNlX2NvbXBvbmVudC5jOiBJbiBmdW5jdGlvbiAnb214X2Jhc2VfY29tcG9uZW50X0dldFBhcmFtZXRlcic6Cit8IG9teF9iYXNlX2NvbXBvbmVudC5jOjk5MTozOiBlcnJvcjogY2FzZSB2YWx1ZSAnMjEzMDcwNjQzNScgbm90IGluIGVudW1lcmF0ZWQgdHlwZSAnT01YX0lOREVYVFlQRScgWy1XZXJyb3I9c3dpdGNoXQorfCBvbXhfYmFzZV9jb21wb25lbnQuYzo5MTg6MzogZXJyb3I6IGNhc2UgdmFsdWUgJzIxMzA3MDY0MzYnIG5vdCBpbiBlbnVtZXJhdGVkIHR5cGUgJ09NWF9JTkRFWFRZUEUnIFstV2Vycm9yPXN3aXRjaF0KKworMikKK3wgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS95b2N0by1idWlsZDUvcG9reS9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4NiAtREhBVkVfQ09ORklHX0ggLUkuIC1JLi4gICAgLURPTVhJTENPTVBPbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtV2Vycm9yIC1EQ09ORklHX0RFQlVHX0xFVkVMPTAgLWMgLW8gb214cmVnaXN0ZXJfYmVsbGFnaW8tb214cmVnaXN0ZXIubyBgdGVzdCAtZiAnb214cmVnaXN0ZXIuYycgfHwgZWNobyAnLi8nYG8KK3wgb214cmVnaXN0ZXIuYzogSW4gZnVuY3Rpb24gJ2J1aWxkQ29tcG9uZW50c0xpc3QnOgorfCBvbXhyZWdpc3Rlci5jOjE3NTo3OiBlcnJvcjogdmFyaWFibGUgJ2Vycicgc2V0IGJ1dCBub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZV0KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciA4MmQ3NDJkM2VhOTAgY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMJVHVlIERlYyAyNyAxNTozMDozNSAyMDExICswODAwCisrKysgYi9jb25maWd1cmUuYWMJVHVlIERlYyAyNyAxNjoyNjowMyAyMDExICswODAwCitAQCAtNSw3ICs1LDcgQEAKKyBBQ19QUkVSRVEoWzIuNTldKQorIAorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCistQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdlcnJvciIKKytDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCIKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgU2V0IHRoZSBzaGFyZWQgdmVyc2lvbmluZyBpbmZvLCBhY2NvcmRpbmcgdG8gc2VjdGlvbiA2LjMgb2YgdGhlIGxpYnRvb2wgaW5mbyAjCitAQCAtMTIyLDYgKzEyMiwxNCBAQAorICAgICBbd2l0aF9hbmRyb2lkPSRlbmFibGV2YWxdLAorICAgICBbd2l0aF9hbmRyb2lkPW5vXSkKKyAKKytBQ19BUkdfRU5BQkxFKAorKyAgICBbV2Vycm9yXSwKKysgICAgW0FDX0hFTFBfU1RSSU5HKAorKyAgICAgICAgWy0tZGlzYWJsZS1XZXJyb3JdLAorKyAgICAgICAgW3doZXRoZXIgdG8gZGlhYmxlIHRyZWF0aW5nIGdjYyB3YXJuaW5ncyBhcyBlcnJvcnNdKV0sCisrICAgIFt3aXRoX1dlcnJvcj0kZW5hYmxldmFsXSwKKysgICAgW3dpdGhfV2Vycm9yPXllc10pCisrCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIENoZWNrIGZvciBwcm9ncmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAQCAtMTkzLDYgKzIwMSwxMCBAQAorICBDRkdfREVCVUdfTEVWRUw9MjU1CisgZmkKKyAKKytpZiB0ZXN0ICJ4JHdpdGhfV2Vycm9yIiA9ICJ4eWVzIjsgdGhlbgorKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2Vycm9yIgorK2ZpCisrCisgQUNfU1VCU1QoQ0ZHX0RFQlVHX0xFVkVMKQorIENGTEFHUz0iJHtDRkxBR1N9IC1EQ09ORklHX0RFQlVHX0xFVkVMPSRDRkdfREVCVUdfTEVWRUwiCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwOGU0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2Rpc2FibGUtc28tdmVyc2lvbmluZy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitEaXNhYmxlIHNvIHZlcnNpb25pbmcgc2luY2UgdGhleSBhcmUgcmVhbGx5IG5vdCBhIHZlcnNpb25lZCBzaGFyZWQgbGliLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avb214aWwvYnVncy81OS8KKworU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9hdWRpb19lZmZlY3RzL01ha2VmaWxlLmFtCistLS0gbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy9hdWRpb19lZmZlY3RzL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODU4NDI1MjM0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjI1OjQyLjY4NzUyNTIyNSAtMDQwMAorQEAgLTEwLDQgKzEwLDUgQEAKKyBsaWJvbXhhdWRpb19lZmZlY3RzX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQkJLUkkKHRvcF9zcmNkaXIpL3NyYyBcCisgCQkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQorK2xpYm9teGF1ZGlvX2VmZmVjdHNfbGFfTERGTEFHUyA9IC1hdm9pZC12ZXJzaW9uCisgCitkaWZmIC1ydWIgbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjowMC44NTg0MjUyMzQgLTA0MDAKKysrKyBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjI0OjQ5LjE1MTI1OTc1MyAtMDQwMAorQEAgLTEwLDQgKzEwLDQgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9iYXNlCistCisrbGlib214Y2xvY2tzcmNfbGFfTERGTEFHUyA9IC1hdm9pZC12ZXJzaW9uCitkaWZmIC1ydWIgbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjowMC44NjI0MjUyNTQgLTA0MDAKKysrKyBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjM2LjQ2MjYwMTc4NiAtMDQwMAorQEAgLTYsNyArNiw3IEBACisgCQkJCQkJCQlsaWJyYXJ5X2VudHJ5X3BvaW50LmMKKyAKKyBsaWJvbXh2aWRlb3NjaGVkX2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9zcmMvbGlib214aWwtYmVsbGFnaW8ubGEKKy1saWJvbXh2aWRlb3NjaGVkX2xhX0xERkxBR1MgPSAKKytsaWJvbXh2aWRlb3NjaGVkX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorIGxpYm9teHZpZGVvc2NoZWRfbGFfQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Nzk1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9keW5hbWljbG9hZGVyLWxpbmtpbmcucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVGhpcyBwYXRjaCBmaXhlcyBsaW5rIGlzc3VlIHdoZW4gbGlib214ZHluYW1pY2xvYWRlci5zbyBpcyBsb2FkZWQgOgorTWlzc2luZyBzeW1ib2wgUk1fRGVpbml0LgorCitUaGlzIHBhdGNoIGNvbWVzIGZyb20gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL2NnaXQvbGlib214aWwtYmVsbGFnaW8uZ2l0L2NvbW1pdC8/aD1mMTcmaWQ9NDk5NmE5NTgyODk0M2QzNDVlNTFkZWQ2ODc2YzMxMDM2NTNlZWNmOCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFPDqWJhc3RpZW4gTWVubmV0cmllciA8cy5tZW5uZXRyaWVyQGlubm90aXMub3JnPgorCistLS0gYS9zcmMvZHluYW1pY19sb2FkZXIvTWFrZWZpbGUuYW0JMjAxNC0wMi0yNSAxNToyOToxMC4xMjg1NDk2MzYgKzAxMDAKKysrKyBiL3NyYy9keW5hbWljX2xvYWRlci9NYWtlZmlsZS5hbQkyMDE0LTAyLTI1IDE1OjMwOjE1Ljc1NjU0ODgwOCArMDEwMAorQEAgLTMsNyArMyw3IEBACisgb214ZHluYW1pY2xvYWRlcl9MVExJQlJBUklFUyA9IGxpYm9teGR5bmFtaWNsb2FkZXIubGEKKyBsaWJvbXhkeW5hbWljbG9hZGVyX2xhX1NPVVJDRVMgPSBzdGVfZHluYW1pY19jb21wb25lbnRfbG9hZGVyLmMgc3RlX2R5bmFtaWNfY29tcG9uZW50X2xvYWRlci5oCisgCistbGlib214ZHluYW1pY2xvYWRlcl9sYV9MREZMQUdTID0KKytsaWJvbXhkeW5hbWljbG9hZGVyX2xhX0xERkxBR1MgPSAtbG9teGlsLWJlbGxhZ2lvIC1MJCh0b3BfYnVpbGRkaXIpL3NyYy8ubGlicworIGxpYm9teGR5bmFtaWNsb2FkZXJfbGFfQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU4YzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGlzIHBhdGNoIGlzIHRvIHJlbW92ZSBERVNURElSIGluIGRvY2Rpci4KK090aGVyd2lzZSwgd2hlbiB1c2VycyBpbnN0YWxsIGJ5IHJ1bm5pbmcgYG1ha2UgaW5zdGFsbCBERVNURElSPS9hbHRlcm5hdGUvZGlyZWN0b3J5JyBzcGVjaWZpZWQgaW4gdGhlIGZpbGUgSU5TVEFMTCwgdGhlIGRvYyB3aWxsIGdvIGludG8gL2FsdGVybmF0ZS9kaXJlY3RvcnkvYWx0ZXJuYXRlL2RpcmVjdG9yeSwgd2hpY2ggaXMgbm90IGV4cGVjdGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgMzBiNTk3ZTRlNzBkIE1ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDE1OjM4OjM1IDIwMTEgKzA4MDAKKysrKyBiL01ha2VmaWxlLmFtCVdlZCBEZWMgMjggMTU6Mzk6MjUgMjAxMSArMDgwMAorQEAgLTcsNyArNyw3IEBACisgcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gbGlib214aWwtYmVsbGFnaW8ucGMKKyAKKy1kb2NkaXIgPSAkKERFU1RESVIpJChwcmVmaXgpL3NoYXJlL2RvYy9AUEFDS0FHRUAKKytkb2NkaXIgPSAkKHByZWZpeCkvc2hhcmUvZG9jL0BQQUNLQUdFQAorIGRvY19EQVRBID0gUkVBRE1FIFwKKyAJICAgQ2hhbmdlTG9nIFwKKyAJICAgVE9ETwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzY2ExMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVGhpcyBwYXRjaCBpcyB0byBtYWtlIGxpYm9teGlsIE1ha2VmaWxlIHN1cHBvcnQgIm1ha2UgLWpOIi4KK1RoZSBvbXhyZWdpc3Rlcl9iZWxsYWdpbyBzdHVmZnMgZGVwZW5kIG9uIGxpYm9teGlsX2JlbGxhZ2lvIGxpYnJhcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciBmNTlkMDc3ZDNkZDUgTWFrZWZpbGUuYW0KKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDEwOjU0OjM2IDIwMTEgKzA4MDAKKysrKyBiL3NyYy9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDEwOjU1OjQ2IDIwMTEgKzA4MDAKK0BAIC03LDYgKzcsNyBAQAorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX1NPVVJDRVMgPSBvbXhyZWdpc3Rlci5jIGNvbW1vbi5jIGNvbW1vbi5oCisgb214cmVnaXN0ZXJfYmVsbGFnaW9fQ0ZMQUdTID0gLURPTVhJTENPTVBPTkVOVFNQQVRIPVwiJChwbHVnaW5kaXIpL1wiIFwKKyAJCQkgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorK29teHJlZ2lzdGVyX2JlbGxhZ2lvX0xEQUREID0gJChsaWJfTFRMSUJSQVJJRVMpCisgb214cmVnaXN0ZXJfYmVsbGFnaW9fTERGTEFHUyA9IC1sb214aWwtYmVsbGFnaW8gLUwkKGJ1aWxkZGlyKQorIAorIGxpYl9MVExJQlJBUklFUyA9IGxpYm9teGlsLWJlbGxhZ2lvLmxhCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDZkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkJlbGxhZ2lvIE9wZW5NQVggSW50ZWdyYXRpb24gTGF5ZXIgKElMKSIKK0RFU0NSSVBUSU9OID0gIkJlbGxhZ2lvIGlzIGFuIG9wZW5zb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIEtocm9ub3MgT3Blbk1BWCBcCisgICAgICAgICAgICAgICBJbnRlZ3JhdGlvbiBMYXllciBBUEkgdG8gYWNjZXNzIG11bHRpbWVkaWEgY29tcG9uZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vb214aWwuc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZTZmMGY0ZGJjN2FjMTkzYjUwZjMyM2E2YWUxOTFjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvb214Y29yZS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PTgwNmIxZTU1NjZjMDY0ODZmZThlNDJiNDYxZTAzYTkwIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9vbXhpbC9saWJvbXhpbC1iZWxsYWdpby0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLWRvY2Rpci1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtc28tdmVyc2lvbmluZy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImExZGU4MjdmZGI3NWMwMmM4NGU1NWY3NDBjYTI3Y2I4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5M2MwNzI5YzhlZjhjMTQ2N2IzYmZlZmNmMzU1ZWMxOWE0NmRkOTJlMzFiZmMyODBlMTdkOTZiMDkzNGQ3NGMiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0tYmVsbGFnaW8tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWRvYyAtLWRpc2FibGUtV2Vycm9yIgorCisjCisjIFRoZSAuc28gZmlsZXMgdW5kZXIgJHtsaWJkaXJ9L2JlbGxhZ2lvIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgdmVyc2lvbmVkIGFuZCBzeW1saW5rZWQuCisjIE1ha2Ugc3VyZSB0aGV5IGdldCBwYWNrYWdlZCBpbiB0aGUgbWFpbiBwYWNrYWdlLgorIworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9iZWxsYWdpby8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5hIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vLmRlYnVnLyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLy5kZWJ1Zy8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTU4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlBORyBpbWFnZSBmb3JtYXQgZGVjb2RpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlicG5nLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxpYnBuZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWI5Yjc1Mzk5YjcyZTRhODY1NmNmM2E2ZGRmYzg2ZDlhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2VuZGxpbmU9MTY7bWQ1PWNjOWMyZDFlYWZkYTE3ZTEyNzdhNmY5OWE5ZmMyOWM0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2JlZ2lubGluZT0yNDI7ZW5kbGluZT0zNTY7bWQ1PTU5OTMxNjgxOWQ1MjVkZGUyYmZkZjI4ZmUzZjMyM2FmIgorREVQRU5EUyA9ICJ6bGliIgorTElCViA9ICIxNiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJwbmcvbGlicG5nJHtMSUJWfS8ke1BWfS9saWJwbmctJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDMwYTliNzZiNzg1MzMyMzVjZDRiOWIyNmNlNzVjN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg1MDdiNTVmYmU1Y2Q0M2M1MTk4MWYyOTI0ZTQ2NzFmZDgxZmUzNWQ1MmRjNTMzNTdlMjBmMmM3N2ZhNWRmZCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJwbmctY29uZmlnICR7YmluZGlyfS9saWJwbmcxNi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworIyBXb3JrIGFyb3VuZCBtaXNzaW5nIHN5bWJvbHMKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9mZiIgLGQpfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzIgorCitGSUxFU18ke1BOfS10b29scyA9ICIke2JpbmRpcn0vcG5nLWZpeC1pdHh0ICR7YmluZGlyfS9wbmdmaXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjkzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQXVkaW8gU2FtcGxlIFJhdGUgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL1NSQy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYW1wbGVyYXRlLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9ZDA4MDdjMzVmYzkwNjQ2NmQyNGE1MDQ2MzUzNDgxNWEiCitERVBFTkRTID0gImZsYWMgbGlic25kZmlsZTEiCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vU1JDL2xpYnNhbXBsZXJhdGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWM3ZmIyNTE5MWI0ZTZlMzYyOGQxOThhNjZhODRmNDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTNiNTRiZGY0NmQ1ZTZkMjM1NGI3MDM0Mzk1ZmUzMjljMjIyYTk2Njc5MGRlMzQ1MjA3MDJiYjk2NDJmMWMwNiIKK1MgPSAiJHtXT1JLRElSfS9saWJzYW1wbGVyYXRlLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJR1tmZnR3XSA9ICIsLS1kaXNhYmxlLWZmdHcsZmZ0dyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ4NzEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtc2VnZmF1bHQtaW4tU0QyLVJTUkMtcGFyc2VyLnBhdGNoCkBAIC0wLDAgKzEsMjExIEBACitGcm9tIDkzNDFlOWM2ZTcwY2QzYWQ3NmM5MDFjM2NmMDUyZDRjYjUyZmQ4MjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorRGF0ZTogVGh1LCAyNyBKdW4gMjAxMyAxODowNDowMyArMTAwMAorU3ViamVjdDogW1BBVENIXSBzcmMvc2QyLmMgOiBGaXggc2VnZmF1bHQgaW4gU0QyIFJTUkMgcGFyc2VyLgorCisoVXBzdHJlYW0gY29tbWl0IDkzNDFlOWM2ZTcwY2QzYWQ3NmM5MDFjM2NmMDUyZDRjYjUyZmQ4MjcpCisKK0Egc3BlY2lhbGx5IGNyYWZ0ZWQgcmVzb3VyY2UgZm9yayBmb3IgYW4gU0QyIGZpbGUgY2FuIGNhdXNlCit0aGUgU0QyIFJTUkMgcGFyc2VyIHRvIHJlYWQgZGF0YSBmcm9tIG91dHNpZGUgYSBkeW5hbWljYWxseQorZGVmaW5lZCBidWZmZXIuIFRoZSBkYXRhIHRoYXQgaXMgcmVhZCBpcyBjb252ZXJ0ZWQgaW50byBhCitzaG9ydCBvciBpbnQgYW5kIHVzZWQgZHVyaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKworU2luY2Ugbm8gd3JpdGUgb2NjdXJzLCB0aGlzIGlzIHVubGlrZWx5IHRvIGJlIGV4cGxvaXRhYmxlLgorCitCdWcgcmVwb3J0ZWQgYnkgVGhlIE1heWhlbSBUZWFtIGZyb20gQ3lsYWIsIENhcm5lZ2llIE1lbGxvbgorVW5pdmVyaXN0eS4gUGFwZXIgaXM6CitodHRwOi8vdXNlcnMuZWNlLmNtdS5lZHUvfmFyZWJlcnQvcGFwZXJzL21heWhlbS1vYWtsYW5kLTEyLnBkZgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9zZDIuYyB8ICAgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zZDIuYyBiL3NyYy9zZDIuYworaW5kZXggMzVjZTM2Yi4uNmJlMTUwYyAxMDA2NDQKKy0tLSBhL3NyYy9zZDIuYworKysrIGIvc3JjL3NkMi5jCitAQCAtMSw1ICsxLDUgQEAKKyAvKgorLSoqIENvcHlyaWdodCAoQykgMjAwMS0yMDExIEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CisrKiogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KKyAqKiBDb3B5cmlnaHQgKEMpIDIwMDQgUGFhdm8gSnVtcHBhbmVuCisgKioKKyAqKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorQEAgLTM3MSw0NCArMzcxLDYxIEBAIHNkMl93cml0ZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZiwgaW50IFVOVVNFRCAoY2FsY19sZW5ndGgpKQorICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX2NoYXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsJcmV0dXJuIGRhdGEgW29mZnNldF0gOworLX0gLyogcmVhZF9jaGFyICovCisrcmVhZF9yc3JjX2NoYXIgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCXJldHVybiBkYXRhIFtvZmZzZXRdIDsKKyt9IC8qIHJlYWRfcnNyY19jaGFyICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX3Nob3J0IChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCA4KSArIGRhdGEgW29mZnNldCArIDFdIDsKKy19IC8qIHJlYWRfc2hvcnQgKi8KKytyZWFkX3JzcmNfc2hvcnQgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDEgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKwlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAxXSA7CisrfSAvKiByZWFkX3JzcmNfc2hvcnQgKi8KKyAKKyBzdGF0aWMgaW5saW5lIGludAorLXJlYWRfaW50IChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCAyNCkgKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgM10gOworLX0gLyogcmVhZF9pbnQgKi8KKytyZWFkX3JzcmNfaW50IChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAzID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDI0KSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAzXSA7CisrfSAvKiByZWFkX3JzcmNfaW50ICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX21hcmtlciAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCisteworK3JlYWRfcnNyY19tYXJrZXIgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDMgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKworIAlpZiAoQ1BVX0lTX0JJR19FTkRJQU4pCisgCQlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgMjQpICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCA4KSArIGRhdGEgW29mZnNldCArIDNdIDsKKy0JZWxzZSBpZiAoQ1BVX0lTX0xJVFRMRV9FTkRJQU4pCisrCWlmIChDUFVfSVNfTElUVExFX0VORElBTikKKyAJCXJldHVybiBkYXRhIFtvZmZzZXRdICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDgpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAzXSA8PCAyNCkgOworLQllbHNlCistCQlyZXR1cm4gMHg2NjYgOworLX0gLyogcmVhZF9tYXJrZXIgKi8KKysKKysJcmV0dXJuIDAgOworK30gLyogcmVhZF9yc3JjX21hcmtlciAqLworIAorIHN0YXRpYyB2b2lkCistcmVhZF9zdHIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0LCBjaGFyICogYnVmZmVyLCBpbnQgYnVmZmVyX2xlbikKKy17CWludCBrIDsKKytyZWFkX3JzcmNfc3RyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQsIGNoYXIgKiBidWZmZXIsIGludCBidWZmZXJfbGVuKQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaW50IGsgOworIAorIAltZW1zZXQgKGJ1ZmZlciwgMCwgYnVmZmVyX2xlbikgOworIAorKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyBidWZmZXJfbGVuID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiA7CisrCisgCWZvciAoayA9IDAgOyBrIDwgYnVmZmVyX2xlbiAtIDEgOyBrKyspCisgCXsJaWYgKHBzZl9pc3ByaW50IChkYXRhIFtvZmZzZXQgKyBrXSkgPT0gMCkKKyAJCQlyZXR1cm4gOworIAkJYnVmZmVyIFtrXSA9IGRhdGEgW29mZnNldCArIGtdIDsKKyAJCX0gOworIAlyZXR1cm4gOworLX0gLyogcmVhZF9zdHIgKi8KKyt9IC8qIHJlYWRfcnNyY19zdHIgKi8KKyAKKyBzdGF0aWMgaW50Cisgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorQEAgLTQzNSwxNyArNDUyLDE3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAJLyogUmVzZXQgdGhlIGhlYWRlciBzdG9yYWdlIGJlY2F1c2Ugd2UgaGF2ZSBjaGFuZ2VkIHRvIHRoZSByc3JjZGVzLiAqLworIAlwc2YtPmhlYWRpbmRleCA9IHBzZi0+aGVhZGVuZCA9IHJzcmMucnNyY19sZW4gOworIAorLQlyc3JjLmRhdGFfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAwKSA7CistCXJzcmMubWFwX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgNCkgOworLQlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCA4KSA7CistCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMTIpIDsKKysJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAwKSA7CisrCXJzcmMubWFwX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCA0KSA7CisrCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgOCkgOworKwlyc3JjLm1hcF9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMTIpIDsKKyAKKyAJaWYgKHJzcmMuZGF0YV9vZmZzZXQgPT0gMHg1MTYwNyAmJiByc3JjLm1hcF9vZmZzZXQgPT0gMHgyMDAwMCkKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiVHJ5aW5nIG9mZnNldCBvZiAweDUyIGJ5dGVzLlxuIikgOworLQkJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDApICsgMHg1MiA7CistCQlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyA0KSArIDB4NTIgOworLQkJcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDgpIDsKKy0JCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDEyKSA7CisrCQlyc3JjLmRhdGFfb2Zmc2V0ID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyAwKSArIDB4NTIgOworKwkJcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyA0KSArIDB4NTIgOworKwkJcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgOCkgOworKwkJcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyAxMikgOworIAkJfSA7CisgCisgCXBzZl9sb2dfcHJpbnRmIChwc2YsICIgIGRhdGEgb2Zmc2V0IDogMHglMDRYXG4gIG1hcCAgb2Zmc2V0IDogMHglMDRYXG4iCitAQCAtNDg4LDcgKzUwNSw3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworIAkJfSA7CisgCistCXJzcmMuc3RyaW5nX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIHJlYWRfc2hvcnQgKHJzcmMucnNyY19kYXRhLCByc3JjLm1hcF9vZmZzZXQgKyAyNikgOworKwlyc3JjLnN0cmluZ19vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyNikgOworIAlpZiAocnNyYy5zdHJpbmdfb2Zmc2V0ID4gcnNyYy5yc3JjX2xlbikKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIHN0cmluZyBvZmZzZXQgKCVkKS5cbiIsIHJzcmMuc3RyaW5nX29mZnNldCkgOworIAkJZXJyb3IgPSBTRkVfU0QyX0JBRF9SU1JDIDsKK0BAIC00OTcsNyArNTE0LDcgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAorIAlyc3JjLnR5cGVfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgMzAgOworIAorLQlyc3JjLnR5cGVfY291bnQgPSByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy5tYXBfb2Zmc2V0ICsgMjgpICsgMSA7CisrCXJzcmMudHlwZV9jb3VudCA9IHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMubWFwX29mZnNldCArIDI4KSArIDEgOworIAlpZiAocnNyYy50eXBlX2NvdW50IDwgMSkKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIHR5cGUgY291bnQuXG4iKSA7CisgCQllcnJvciA9IFNGRV9TRDJfQkFEX1JTUkMgOworQEAgLTUxMywxMSArNTMwLDExIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy5zdHJfaW5kZXggPSAtMSA7CisgCWZvciAoayA9IDAgOyBrIDwgcnNyYy50eXBlX2NvdW50IDsgayArKykKKy0JewltYXJrZXIgPSByZWFkX21hcmtlciAocnNyYy5yc3JjX2RhdGEsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCkgOworKwl7CW1hcmtlciA9IHJlYWRfcnNyY19tYXJrZXIgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKyAKKyAJCWlmIChtYXJrZXIgPT0gU1RSX01BUktFUikKKyAJCXsJcnNyYy5zdHJfaW5kZXggPSBrIDsKKy0JCQlyc3JjLnN0cl9jb3VudCA9IHJlYWRfc2hvcnQgKHJzcmMucnNyY19kYXRhLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDggKyA0KSArIDEgOworKwkJCXJzcmMuc3RyX2NvdW50ID0gcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4ICsgNCkgKyAxIDsKKyAJCQllcnJvciA9IHBhcnNlX3N0cl9yc3JjIChwc2YsICZyc3JjKSA7CisgCQkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisgCQkJfSA7CitAQCAtNTQ5LDI2ICs1NjYsMjYgQEAgcGFyc2Vfc3RyX3JzcmMgKFNGX1BSSVZBVEUgKnBzZiwgU0QyX1JTUkMgKiByc3JjKQorIAlmb3IgKGsgPSAwIDsgZGF0YV9vZmZzZXQgKyBkYXRhX2xlbiA8IHJzcmMtPnJzcmNfbGVuIDsgaysrKQorIAl7CWludCBzbGVuIDsKKyAKKy0JCXNsZW4gPSByZWFkX2NoYXIgKHJzcmMtPnJzcmNfZGF0YSwgc3RyX29mZnNldCkgOworLQkJcmVhZF9zdHIgKHJzcmMtPnJzcmNfZGF0YSwgc3RyX29mZnNldCArIDEsIG5hbWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAobmFtZSksIHNsZW4gKyAxKSkgOworKwkJc2xlbiA9IHJlYWRfcnNyY19jaGFyIChyc3JjLCBzdHJfb2Zmc2V0KSA7CisrCQlyZWFkX3JzcmNfc3RyIChyc3JjLCBzdHJfb2Zmc2V0ICsgMSwgbmFtZSwgU0ZfTUlOIChTSUdORURfU0laRU9GIChuYW1lKSwgc2xlbiArIDEpKSA7CisgCQlzdHJfb2Zmc2V0ICs9IHNsZW4gKyAxIDsKKyAKKy0JCXJzcmNfaWQgPSByZWFkX3Nob3J0IChyc3JjLT5yc3JjX2RhdGEsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyKSA7CisrCQlyc3JjX2lkID0gcmVhZF9yc3JjX3Nob3J0IChyc3JjLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMikgOworIAorLQkJZGF0YV9vZmZzZXQgPSByc3JjLT5kYXRhX29mZnNldCArIHJlYWRfaW50IChyc3JjLT5yc3JjX2RhdGEsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyICsgNCkgOworKwkJZGF0YV9vZmZzZXQgPSByc3JjLT5kYXRhX29mZnNldCArIHJlYWRfcnNyY19pbnQgKHJzcmMsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyICsgNCkgOworIAkJaWYgKGRhdGFfb2Zmc2V0IDwgMCB8fCBkYXRhX29mZnNldCA+IHJzcmMtPnJzcmNfbGVuKQorIAkJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiRXhpdGluZyBwYXJzZXIgb24gZGF0YSBvZmZzZXQgb2YgJWQuXG4iLCBkYXRhX29mZnNldCkgOworIAkJCWJyZWFrIDsKKyAJCQl9IDsKKyAKKy0JCWRhdGFfbGVuID0gcmVhZF9pbnQgKHJzcmMtPnJzcmNfZGF0YSwgZGF0YV9vZmZzZXQpIDsKKysJCWRhdGFfbGVuID0gcmVhZF9yc3JjX2ludCAocnNyYywgZGF0YV9vZmZzZXQpIDsKKyAJCWlmIChkYXRhX2xlbiA8IDAgfHwgZGF0YV9sZW4gPiByc3JjLT5yc3JjX2xlbikKKyAJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkV4aXRpbmcgcGFyc2VyIG9uIGRhdGEgbGVuZ3RoIG9mICVkLlxuIiwgZGF0YV9sZW4pIDsKKyAJCQlicmVhayA7CisgCQkJfSA7CisgCistCQlzbGVuID0gcmVhZF9jaGFyIChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0ICsgNCkgOworLQkJcmVhZF9zdHIgKHJzcmMtPnJzcmNfZGF0YSwgZGF0YV9vZmZzZXQgKyA1LCB2YWx1ZSwgU0ZfTUlOIChTSUdORURfU0laRU9GICh2YWx1ZSksIHNsZW4gKyAxKSkgOworKwkJc2xlbiA9IHJlYWRfcnNyY19jaGFyIChyc3JjLCBkYXRhX29mZnNldCArIDQpIDsKKysJCXJlYWRfcnNyY19zdHIgKHJzcmMsIGRhdGFfb2Zmc2V0ICsgNSwgdmFsdWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAodmFsdWUpLCBzbGVuICsgMSkpIDsKKyAKKyAJCXBzZl9sb2dfcHJpbnRmIChwc2YsICIgIDB4JTA0eCAgICAgJTRkICAgICAlNGQgICAgICUzZCAgICAnJXMnXG4iLCBkYXRhX29mZnNldCwgcnNyY19pZCwgZGF0YV9sZW4sIHNsZW4sIHZhbHVlKSA7CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC10d28tcG90ZW50aWFsLWJ1ZmZlci1yZWFkLW92ZXJmbG93cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTY0NzNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSBkYmUxNGYwMDAzMGFmNWQzNTc3ZjRjYWJiZjk4NjFkYjU5ZTljMzc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KK0RhdGU6IFRodSwgMjUgRGVjIDIwMTQgMTk6MjM6MTIgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL3NkMi5jIDogRml4IHR3byBwb3RlbnRpYWwgYnVmZmVyIHJlYWQgb3ZlcmZsb3dzLgorCisoVXBzdHJlYW0gY29tbWl0IGRiZTE0ZjAwMDMwYWY1ZDM1NzdmNGNhYmJmOTg2MWRiNTllOWMzNzgpCisKK0Nsb3NlczogaHR0cHM6Ly9naXRodWIuY29tL2VyaWtkL2xpYnNuZGZpbGUvaXNzdWVzLzkzCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3NkMi5jIHwgICAxMiArKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NkMi5jIGIvc3JjL3NkMi5jCitpbmRleCAwYjRlNWFmLi5hNzBhMWYxIDEwMDY0NAorLS0tIGEvc3JjL3NkMi5jCisrKysgYi9zcmMvc2QyLmMKK0BAIC01MTcsNiArNTE3LDExIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy50eXBlX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIDMwIDsKKyAKKysJaWYgKHJzcmMubWFwX29mZnNldCArIDI4ID4gcnNyYy5yc3JjX2xlbikKKysJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIG1hcCBvZmZzZXQuXG4iKSA7CisrCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKysJCX0gOworKworIAlyc3JjLnR5cGVfY291bnQgPSByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyOCkgKyAxIDsKKyAJaWYgKHJzcmMudHlwZV9jb3VudCA8IDEpCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCB0eXBlIGNvdW50LlxuIikgOworQEAgLTUzMyw3ICs1MzgsMTIgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAorIAlyc3JjLnN0cl9pbmRleCA9IC0xIDsKKyAJZm9yIChrID0gMCA7IGsgPCByc3JjLnR5cGVfY291bnQgOyBrICsrKQorLQl7CW1hcmtlciA9IHJlYWRfcnNyY19tYXJrZXIgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKysJewlpZiAocnNyYy50eXBlX29mZnNldCArIGsgKiA4ID4gcnNyYy5yc3JjX2xlbikKKysJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCByc3JjIG1hcmtlci5cbiIpIDsKKysJCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKysJCQl9IDsKKysKKysJCW1hcmtlciA9IHJlYWRfcnNyY19tYXJrZXIgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKyAKKyAJCWlmIChtYXJrZXIgPT0gU1RSX01BUktFUikKKyAJCXsJcnNyYy5zdHJfaW5kZXggPSBrIDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDJmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkF1ZGlvIGZvcm1hdCBDb252ZXJzaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vbGlic25kZmlsZSIKK0FVVEhPUiA9ICJFcmlrIGRlIENhc3RybyBMb3BvIgorREVQRU5EUyA9ICJzcWxpdGUzIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUvZmlsZXMvbGlic25kZmlsZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTJiN2JiNjM3ZTAxMDIyYzdkMjBmOTVmOWMzOTkwYTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTkwMTZkYmQzMjZhYmU3ZTIzNjZkZWQ1YzM0NGM4NTM4MjliZWJmZDE3MDJlZjI2YTA3ZWY2NjJkNmFhNDg4MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTc3ZmU5MzIwMjczNmI0N2MwNzAzNTkxMGY0Nzk3NGEiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzbmRmaWxlLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWV4dGVybmFsLWxpYnMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZF9hcm0oKSB7CisJZXhwb3J0IGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTEKKwlleHBvcnQgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQKKwlhY19jdl9zaXplb2Zfb2ZmX3Q9OAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5ZjNkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmEtMS4xLjEvbm8tZG9jcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJ0aGVvcmEtMS4xLjEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aGVvcmEtMS4xLjEub3JpZy9NYWtlZmlsZS5hbQkyMDA5LTExLTI1IDIyOjAxOjUzLjU5Mzc3NTkyNiArMDEwMAorKysrIGxpYnRoZW9yYS0xLjEuMS9NYWtlZmlsZS5hbQkyMDA5LTExLTI1IDIyOjAyOjAwLjc3NzUyNDAxNyArMDEwMAorQEAgLTgsNyArOCw3IEBACisgRVhBTVBMRVNfRElSID0KKyBlbmRpZgorIAorLVNVQkRJUlMgPSBsaWIgaW5jbHVkZSBkb2MgdGVzdHMgbTQgJChFWEFNUExFU19ESVIpCisrU1VCRElSUyA9IGxpYiBpbmNsdWRlIHRlc3RzIG00ICQoRVhBTVBMRVNfRElSKQorIAorIAorICMgd2UgaW5jbHVkZSB0aGUgd2hvbGUgZGViaWFuLyBkaXIgaW4gRVhUUkFfRElTVCBiZWNhdXNlIHRoZXJlJ3MgYSBwcm9ibGVtCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGNiMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlRoZW9yYSBWaWRlbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIlRoZSBsaWJ0aGVvcmEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBlbmNvZGVyIGFuZCBkZWNvZGVyIHVuZGVyIGEgQlNEIGxpY2Vuc2UuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hpcGgub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly90cmFjLnhpcGgub3JnL25ld3RpY2tldCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2Y5MTcxOGY1OWViNmE4M2QwNmRjN2JjYWY0MTExMzIiCitERVBFTkRTID0gImxpYm9nZyIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy90aGVvcmEvbGlidGhlb3JhLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbm8tZG9jcy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5MmFiNjVjZWRkNTAyMWQ2YjdkZGQxMTdlMDdjZDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI2YWUxZWUyZmEzZDQyYWM0ODkyODdkM2VjMzRjNTg4NTczMGIxMjk2ZjA4MDFhZTU3N2EzNTE5M2QzYWZmYmMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWV4YW1wbGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MjAyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB0aWZmLTMuOS41L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRpZmYtMy45LjUub3JpZy9jb25maWd1cmUuYWMKKysrKyB0aWZmLTMuOS41L2NvbmZpZ3VyZS5hYworQEAgLTI3LDcgKzI3LDcgQEAgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcAorIEFDX1BSRVJFUSgyLjY0KQorIEFDX0lOSVQoW0xpYlRJRkYgU29mdHdhcmVdLFszLjkuNV0sW3RpZmZAbGlzdHMubWFwdG9vbHMub3JnXSxbdGlmZl0pCisgQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQorLUFDX0NPTkZJR19NQUNST19ESVIobTQpCisrZG5sIEFDX0NPTkZJR19NQUNST19ESVIobTQpCisgQUNfTEFORyhDKQorIAorIGRubCBDb21wdXRlIHRoZSBjYW5vbmljYWwgaG9zdCAocnVuLXRpbWUpIHN5c3RlbSB0eXBlIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzYTVmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNC5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBUYWcgSW1hZ2UgRmlsZSBGb3JtYXQgKFRJRkYpIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTM0ZGEzZGI0NmZhYjc1MDE5OTJmOTYxNWQ3ZTE1OGNmIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5yZW1vdGVzZW5zaW5nLm9yZy9saWJ0aWZmLyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAucmVtb3Rlc2Vuc2luZy5vcmcvcHViL2xpYnRpZmYvdGlmZi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjlhZWU3MTA3NDA4YTEyOGMwYzdiMjQyODZjMGRiOTAwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhjYjFkOTBjOTZmNjFjZGZjMGJjZjAzNmFjYzI1MWM5ZGJlNjMyMDMzNGRhOTQxYzdhODNjZmUxNTc2ZWY4OTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImF4X2N2X2NoZWNrX2dsX2xpYmdsPW5vIgorCitQQUNLQUdFQ09ORklHID89ICJjeHgganBlZyB6bGliIGx6bWEgXAorICAgICAgICAgICAgICAgICAgc3RyaXAtY2hvcHBpbmcgZXh0cmFzYW1wbGUtYXMtYWxwaGEgY2hlY2steWNiY3Itc3Vic2FtcGxpbmciCisKK1BBQ0tBR0VDT05GSUdbY3h4XSA9ICItLWVuYWJsZS1jeHgsLS1kaXNhYmxlLWN4eCwsIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWcsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLWVuYWJsZS16bGliLC0tZGlzYWJsZS16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1sem1hLC0tZGlzYWJsZS1sem1hLHh6LCIKKworIyBDb252ZXJ0IHNpbmdsZS1zdHJpcCB1bmNvbXByZXNzZWQgaW1hZ2VzIHRvIG11bHRpcGxlIHN0cmlwcyBvZiBzcGVjaWZpZWQKKyMgc2l6ZSAoZGVmYXVsdDogODE5MikgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZQorUEFDS0FHRUNPTkZJR1tzdHJpcC1jaG9wcGluZ10gPSAiLS1lbmFibGUtc3RyaXAtY2hvcHBpbmcsLS1kaXNhYmxlLXN0cmlwLWNob3BwaW5nLCwiCisKKyMgVHJlYXQgYSBmb3VydGggc2FtcGxlIHdpdGggbm8gRVhUUkFTQU1QTEVfIHZhbHVlIGFzIGJlaW5nIEFTU09DQUxQSEEKK1BBQ0tBR0VDT05GSUdbZXh0cmFzYW1wbGUtYXMtYWxwaGFdID0gIi0tZW5hYmxlLWV4dHJhc2FtcGxlLWFzLWFscGhhLC0tZGlzYWJsZS1leHRyYXNhbXBsZS1hcy1hbHBoYSwsIgorCisjIENvbnRyb2wgcGlja2luZyB1cCBZQ2JDciBzdWJzYW1wbGUgaW5mby4gRGlzYWJsZSB0byBzdXBwb3J0IGZpbGVzIGxhY2tpbmcKKyMgdGhlIHRhZworUEFDS0FHRUNPTkZJR1tjaGVjay15Y2Jjci1zdWJzYW1wbGluZ10gPSAiLS1lbmFibGUtY2hlY2steWNiY3Itc3Vic2FtcGxpbmcsLS1kaXNhYmxlLWNoZWNrLXljYmNyLXN1YnNhbXBsaW5nLCwiCisKKyMgU3VwcG9ydCBhIG1lY2hhbmlzbSBhbGxvd2luZyByZWFkaW5nIGxhcmdlIHN0cmlwcyAodXN1YWxseSBvbmUgc3RyaXAgZmlsZXMpCisjIGluIGNodW5rcyB3aGVuIHVzaW5nIFRJRkZSZWFkU2NhbmxpbmUuIEV4cGVyaW1lbnRhbCA0LjArIGZlYXR1cmUKK1BBQ0tBR0VDT05GSUdbY2h1bmt5LXN0cmlwLXJlYWRdID0gIi0tZW5hYmxlLWNodW5reS1zdHJpcC1yZWFkLC0tZGlzYWJsZS1jaHVua3ktc3RyaXAtcmVhZCwsIgorCitQQUNLQUdFUyA9KyAidGlmZnh4IHRpZmYtdXRpbHMiCitGSUxFU190aWZmeHggPSAiJHtsaWJkaXJ9L2xpYnRpZmZ4eC5zby4qIgorRklMRVNfdGlmZi11dGlscyA9ICIke2JpbmRpcn0vKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzZlMGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIk9nZyBWb3JiaXMgQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJPZ2cgVm9yYmlzIGlzIGEgaGlnaC1xdWFsaXR5IGxvc3N5IGF1ZGlvIGNvZGVjIFwKK3RoYXQgaXMgZnJlZSBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmVzdHJpY3Rpb25zLiBsaWJ2b3JiaXMgXAoraXMgdGhlIG1haW4gdm9yYmlzIGNvZGVjIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy52b3JiaXMuY29tLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly90cmFjLnhpcGgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZDJjNDg3ZDJmYzdkZDNlM2M3YzQ2NWE1YjdmNjIxNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3ZvcmJpcy92b3JiaXNlbmMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1kMWMxZDEzODg2M2Q2MzE1MTMxMTkzZDQwNDZkODFjYiIKK0RFUEVORFMgPSAibGlib2dnIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvdm9yYmlzLyR7QlB9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOGNiMjgwOTdjMDdhNzM1ZDZhZjU2ZTU5OGUxYzkwZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NGY5NGE5NTI3ZmYwYTg4NDc3YmUwYTcxYzBiYWIwOWE0YzNmZWJlMGVkODc4YjI0ODI0OTA2Y2Q0YjBlMWQxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzU2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0FkZCBuZXcgbWV0aG9kIHRvIGp1ZGdlIHdoZXRoZXIgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkCisKK1RoZSBvcmlnaW5hbCBsb2dpYyB3aWxsIHVzZSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7IiB0byBqdWRnZQord2hldGhlciA8YWx0aXZlYy5oPiBpcyBuZWVkZWQuIGFsdGl2ZWMuaCBjb250YWlucyB0aGUgZm9sbG93aW5nCitzdGF0ZW1lbnQ6CisKKyAjaWYgIWRlZmluZWQoX19BUFBMRV9BTFRJVkVDX18pCisgI2RlZmluZSB2ZWN0b3IgX192ZWN0b3IKKyAjZGVmaW5lIHBpeGVsIF9fcGl4ZWwKKyAjZGVmaW5lIGJvb2wgCisgI2VuZGlmCisKK0luIGdjYy00LjMuMywgX19BUFBMRV9BTFRJVkVDX18gaXMgbm90IGRlZmluZWQgYnkgY29tcGlsZXIsIG5laXRoZXIKK2FzIHZlY3RvciwgcGl4ZWwsIGFuZCBib29sLiBJbiBvcmRlciB0byBtYWtlICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiCitwYXNzIHRoZSBjb21waWxhdGlvbiwgd2UgbmVlZCB0byBpbmNsdWRlIGFsdGl2ZWMuaC4KKworSG93ZXZlciBpbiBnY2MtNC41LjAsIF9fQVBQTEVfQUxUSVZFQ19fIGlzIGRlZmluZWQgYnkgY29tcGlsZXIsCitzbyBhcyB2ZWN0b3IsIHBpeGVsLCBhbmQgYm9vbC4gV2UgY291bGQgbm90IGp1ZGdlIHdoZXRoZXIKK2FsdGl2ZWMuaCBpcyBuZWVkZWQgYnkgInR5cGVkZWYgdmVjdG9yIGludCB0OyIuCitIZXJlIHdlIGluY2x1ZGUgYW5vdGhlciBzdGF0ZW1lbnQgImludCB0bXAgPSBfX0NSNl9FUTsiLCBpbgord2hpY2ggX19DUjZfRVEgaXMgZGVmaW5lZCBpbiBhbHRpdmVjLmguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitkaWZmIC1ydU4gbXBlZzJkZWMtMC40LjEtb3JpZy9jb25maWd1cmUuaW4gbXBlZzJkZWMtMC40LjEvY29uZmlndXJlLmluCistLS0gbXBlZzJkZWMtMC40LjEtb3JpZy9jb25maWd1cmUuaW4JMjAxMC0wOS0xNCAyMDo1NTo0Mi4zOTk2ODc2NjMgKzA4MDAKKysrKyBtcGVnMmRlYy0wLjQuMS9jb25maWd1cmUuaW4JMjAxMC0wOS0xNCAyMDo1Njo0My40MDMyMDQ2NDggKzA4MDAKK0BAIC03NSwxMSArNzUsMTEgQEAKKyAJCSBDRkxBR1M9IiRPUFRfQ0ZMQUdTICRUUllfQ0ZMQUdTICRDRkxBR1MiCisgCQkgQUNfTVNHX0NIRUNLSU5HKFtpZiA8YWx0aXZlYy5oPiBpcyBuZWVkZWRdKQorIAkJIEFDX1RSWV9DT01QSUxFKFtdLAorLQkJICAgIFt0eXBlZGVmIHZlY3RvciBpbnQgdDsKKysJCSAgICBbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IGludCB0bXAgPSBfX0NSNl9FUTsKKyAJCSAgICAgdmVjX2xkKDAsICh1bnNpZ25lZCBjaGFyICopMCk7XSwKKyAJCSAgICBbaGF2ZV9hbHRpdmVjPXllczsgQUNfTVNHX1JFU1VMVChubyldLAorIAkJICAgIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGFsdGl2ZWMuaD5dLAorLQkJCVt0eXBlZGVmIHZlY3RvciBpbnQgdDsgdmVjX2xkKDAsICh1bnNpZ25lZCBjaGFyICopMCk7XSwKKysJCQlbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IGludCB0bXAgPSBfX0NSNl9FUTsgdmVjX2xkKDAsICh1bnNpZ25lZCBjaGFyICopMCk7XSwKKyAJCQlbQUNfREVGSU5FKFtIQVZFX0FMVElWRUNfSF0sLAorIAkJCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhbHRpdmVjLmg+IGhlYWRlci5dKQorIAkJCSBoYXZlX2FsdGl2ZWM9eWVzOyBBQ19NU0dfUkVTVUxUKHllcyldLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlY18wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRlMmJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGFuZCB0ZXN0IHByb2dyYW0gZm9yIGRlY29kaW5nIE1QRUctMiBhbmQgTVBFRy0xIHZpZGVvIHN0cmVhbXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9tcGVnMi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PWVhZDYyNjAyZDQ2MzgzMjlkM2I1Yjg2YTU1ODAzMTU0IgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL21wZWcyZGVjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzYzMWIwYTRiY2ZkZDBkNzhjMGJiMDA4MzA4MGIwZGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzc0YTc2MDY4ZjhlYzM2ZDRiYjU5YTAzYmYxMTU3YmU0NDExOGNhMDIyNTIxODBlOGIzNThiMGI1ZTNlZGVlZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXNkbCIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCwtLXdpdGhvdXQteCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh2IgorCitQQUNLQUdFUyA9ICJtcGVnMmRlYy1kYmcgbXBlZzJkZWMgbXBlZzJkZWMtZG9jIGxpYm1wZWcyIGxpYm1wZWcyLWRldiBsaWJtcGVnMmNvbnZlcnQgbGlibXBlZzJjb252ZXJ0LWRldiBsaWJtcGVnMi1zdGF0aWNkZXYgbGlibXBlZzJjb252ZXJ0LXN0YXRpY2RldiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCitGSUxFU19saWJtcGVnMiA9ICIke2xpYmRpcn0vbGlibXBlZzIuc28uKiIKK0ZJTEVTX2xpYm1wZWcyY29udmVydCA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LnNvLioiCitGSUxFU19saWJtcGVnMi1kZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzIubGEgXAorICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvbGlibXBlZzIucGMgXAorICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzIuaCIKK0ZJTEVTX2xpYm1wZWcyLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXBlZzIuYSIKK0ZJTEVTX2xpYm1wZWcyY29udmVydC1kZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyY29udmVydC5wYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzJjb252ZXJ0LmgiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViODA2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCkBAIC0wLDAgKzEsMTk3IEBACitTVU1NQVJZID0gIlNvdW5kIHNlcnZlciBmb3IgTGludXggYW5kIFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucHVsc2VhdWRpby5vcmciCitBVVRIT1IgPSAiTGVubmFydCBQb2V0dGVyaW5nIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcHVsc2Vjb3JlL3Jlc2FtcGxlci5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjE7bWQ1PTA5Nzk0MDEyYWUxNjkxMmMwMjcwZjMyODBjYzhmZjg0IgorCitERVBFTkRTID0gImxpYmF0b21pYy1vcHMgbGlib2lsIGxpYnNuZGZpbGUxIGxpYnRvb2wiCisjIG9wdGlvbmFsCitERVBFTkRTICs9ICJ1ZGV2IGFsc2EtbGliIGdsaWItMi4wIGdjb25mIgorREVQRU5EUyArPSAianNvbi1jIGdkYm0gc3BlZXhkc3AgbGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSBsaWJjYXAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1c2VyYWRkIGdldHRleHQgcGVybG5hdGl2ZSBibHVldG9vdGggc3lzdGVtZAorCisjICouZGVza3RvcCBydWxlcyB3b250IGJlIGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJlIGFuZCBidWlsZCB3aWxsIGZhaWwKKyMgaWYgdXNpbmcgLS1kaXNhYmxlLW5scworVVNFX05MUyA9ICJ5ZXMiCisKK0VYVFJBX09FQ09ORiA9ICJcCisJCS0tZGlzYWJsZS1oYWwtY29tcGF0IFwKKwkJLS1kaXNhYmxlLW9yYyBcCisJCS0tZW5hYmxlLXRjcHdyYXA9bm8gXAorCQktLXdpdGgtYWNjZXNzLWdyb3VwPWF1ZGlvIFwKKwkJLS1kaXNhYmxlLW9wZW5zc2wgXAorCQktLWRpc2FibGUteGVuIFwKKwkJLS13aXRoLWRhdGFiYXNlPXNpbXBsZSBcCisJCS0td2l0aG91dC1mZnR3IFwKKwkJLS13aXRob3V0LXpzaC1jb21wbGV0aW9uLWRpciBcCisJCS0td2l0aC11ZGV2LXJ1bGVzLWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9bm8gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICczZycsICdvZm9ubycsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVlejQsLS1kaXNhYmxlLWJsdWV6NCxibHVlejQgc2JjIgorUEFDS0FHRUNPTkZJR1tibHVlejVdID0gIi0tZW5hYmxlLWJsdWV6NSwtLWRpc2FibGUtYmx1ZXo1LGJsdWV6NSBzYmMiCitQQUNLQUdFQ09ORklHW29mb25vXSA9ICItLWVuYWJsZS1ibHVlejUtb2Zvbm8taGVhZHNldCwtLWRpc2FibGUtYmx1ZXo1LW9mb25vLWhlYWRzZXQsb2Zvbm8iCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS1lbmFibGUtZ3RrMywtLWRpc2FibGUtZ3RrMyxndGsrMyIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZC1kYWVtb24gLS1lbmFibGUtc3lzdGVtZC1sb2dpbiAtLWVuYWJsZS1zeXN0ZW1kLWpvdXJuYWwgLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdXNlcl91bml0ZGlyfSwtLWRpc2FibGUtc3lzdGVtZC1kYWVtb24gLS1kaXNhYmxlLXN5c3RlbWQtbG9naW4gLS1kaXNhYmxlLXN5c3RlbWQtam91cm5hbCxzeXN0ZW1kIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLHZpcnR1YWwvbGlieDExIGxpYnh0c3QgbGliaWNlIGxpYnNtIGxpYnhjYiIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgorIyBTaW5jZSBtYW55IGVtYmVkZGVkIHN5c3RlbXMgZG9uJ3QgaGF2ZSBub24tcm9vdCB1c2VycywgaXQncyB1c2VmdWwgdG8gYmUKKyMgYWJsZSB0byB1c2UgcHVsc2VhdWRpbyBhdXRvc3Bhd24gZm9yIHJvb3QgYXMgd2VsbC4KK1BBQ0tBR0VDT05GSUdbYXV0b3NwYXduLWZvci1yb290XSA9ICIsLCwiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtLWVuYWJsZS1uZW9uLW9wdD1ubyIsIGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtZWIgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC0tZW5hYmxlLW5lb24tb3B0PW5vIiwgZCl9IgorCisKK2V4cG9ydCBUQVJHRVRfUEZQVSA9ICIke1RBUkdFVF9GUFV9IgorCisjIFRPRE86IFVzZSBtb3JlIGZpbmUgZ3JhbnVsYXIgdmVyc2lvbgorI09FX0xUX1JQQVRIX0FMTE9XPSI6JHtsaWJkaXJ9L3B1bHNlLTAuOToiCitPRV9MVF9SUEFUSF9BTExPVyA9ICJhbnkiCitPRV9MVF9SUEFUSF9BTExPV1tleHBvcnRdPSIxIgorCitzZXRfY2ZnX3ZhbHVlICgpIHsKKwlzZWQgLWkgLWUgInMvXCg7ICpcKVw/JDIgPS4qLyQyID0gJDMvIiAiJDEiCisJaWYgISBncmVwIC1xICJeJDIgPSAkM1wkIiAiJDEiOyB0aGVuCisJCWRpZSAiVXNlIG9mIHNlZCB0byBzZXQgJyQyJyB0byAnJDMnIGluICckMScgZmFpbGVkIgorCWZpCit9CisKK2RvX2NvbXBpbGVfYXBwZW5kICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhdXRvc3Bhd24tZm9yLXJvb3QnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlzZXRfY2ZnX3ZhbHVlIHNyYy9jbGllbnQuY29uZiBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QgeWVzCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy4wNF9wdWxzZSAgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvdm9sYXRpbGVzLjA0X3B1bHNlCit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAicHVsc2VhdWRpby1zZXJ2ZXIiCitHUk9VUEFERF9QQVJBTV9wdWxzZWF1ZGlvLXNlcnZlciA9ICJwdWxzZSIKK1VTRVJBRERfUEFSQU1fcHVsc2VhdWRpby1zZXJ2ZXIgPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvcnVuL3B1bHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIGF1ZGlvLHB1bHNlIC0tZ2lkIHB1bHNlIHB1bHNlIgorCisjIFRoZSBjb25zb2xlLWtpdCBtb2R1bGUgaXMgaW5jbHVkZWQgaGVyZSBleHBsaWNpdGx5IHNvIGJpdGJha2UgY2FuIG1hcCB0byB0aGUKKyMgUkRFUEVORFMgd2UgZGVmaW5lIGZvciBpdCBpbiB0aGlzIHJlY2lwZSwgYW5kIHRoZXJlYnkgZW5zdXJlIHRoYXQgd2hlbgorIyBhZGRpbmcgdGhlIGNvbnNvbGUta2l0IG1vZHVsZSB0byBhbiBpbWFnZSwgd2UgYWxzbyBnZXQgdGhlIG5lY2Vzc2FyeQorIyBjb25zb2xla2l0IHBhY2thZ2UgcHJvZHVjZWQuCitQQUNLQUdFUyA9KyAibGlicHVsc2Vjb3JlIGxpYnB1bHNlY29tbW9uIGxpYnB1bHNlIGxpYnB1bHNlLXNpbXBsZSBsaWJwdWxzZS1tYWlubG9vcC1nbGliIFwKKyAgICAgICAgICAgICBwdWxzZWF1ZGlvLXNlcnZlciBwdWxzZWF1ZGlvLW1pc2MgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZGJ1cycsICdwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCcsICcnLCBkKX0iCisKKyN1cGdyYWRlIHBhdGg6CitSUkVQTEFDRVNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAibGlicHVsc2UtYmluIGxpYnB1bHNlLWNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wdWxzZWF1ZGlvLWxpYi0uKiBecHVsc2VhdWRpby1tb2R1bGUtLioiCisKK0ZJTEVTX2xpYnB1bHNlY29yZSA9ICIke2xpYmRpcn0vbGlicHVsc2Vjb3JlKi5zbyIKK0ZJTEVTX2xpYnB1bHNlY29tbW9uID0gIiR7bGliZGlyfS9wdWxzZWF1ZGlvL2xpYnB1bHNlY29tbW9uKi5zbyIKKworIyBjbGllbnQuY29uZiBjb25maWd1cmVzIHRoZSBiZWhhdmlvdXIgb2YgbGlicHVsc2UsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIHNhbWUKKyMgcGFja2FnZS4KK0ZJTEVTX2xpYnB1bHNlID0gIiR7bGliZGlyfS9saWJwdWxzZS5zby4qICR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYiCisKK0ZJTEVTX2xpYnB1bHNlLXNpbXBsZSA9ICIke2xpYmRpcn0vbGlicHVsc2Utc2ltcGxlLnNvLioiCitGSUxFU19saWJwdWxzZS1tYWlubG9vcC1nbGliID0gIiR7bGliZGlyfS9saWJwdWxzZS1tYWlubG9vcC1nbGliLnNvLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9wdWxzZS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wdWxzZS0ke1BWfS9tb2R1bGVzLyoubGEgJHtkYXRhZGlyfS92YWxhICR7bGliZGlyfS9jbWFrZSIgICAKK0ZJTEVTXyR7UE59LWNvbmYgPSAiJHtzeXNjb25mZGlyfSIKK0ZJTEVTXyR7UE59LWJpbiArPSAiJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy92b2xhdGlsZXMuMDRfcHVsc2UiCitGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtiaW5kaXJ9L3B1bHNlYXVkaW8gJHtiaW5kaXJ9L3N0YXJ0LSogJHtzeXNjb25mZGlyfSAke2JpbmRpcn0vcGFjdGwgKi91ZGV2L3J1bGVzLmQvKi5ydWxlcyAqLyovdWRldi9ydWxlcy5kLyoucnVsZXMgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0vKiIKKworI1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNlcnZlciA9ICJwdWxzZWF1ZGlvLnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L3B1bHNlYXVkaW8vbGlicHVsc2Vkc3Auc28iCisKKyMgQWxsb3cgdGhlIHB1bHNlYXVkaW8gcGFja2FnZSB0byBiZSBjcmVhdGVkIGVtcHR5IGFzIGEgcGxhY2Vob2xkZXIgKC1kYmcgYW5kIC1kZXYgZGVwZW5kIG9uIGl0KQorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworQ09ORkZJTEVTX2xpYnB1bHNlID0gIiR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYiCisKK0NPTkZGSUxFU19wdWxzZWF1ZGlvLXNlcnZlciA9ICJcIAorICAke3N5c2NvbmZkaXJ9L3B1bHNlL2RlZmF1bHQucGEgXAorICAke3N5c2NvbmZkaXJ9L3B1bHNlL2RhZW1vbi5jb25mIFwKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9zeXN0ZW0ucGEgXAorICAiCisKK3BrZ19wb3N0aW5zdF8ke1BOfS1zZXJ2ZXIoKSB7CisgICAgICAgIGlmIFsgLXogIiREIiBdICYmIFsgLWUgJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXSA7IHRoZW4KKyAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorICAgICAgICBmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICAjZC5zZXRWYXIoJ1BLR19wdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nKQorCisgICAgcGx1Z2luZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9wdWxzZS0ke1BWfS9tb2R1bGVzLycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXm1vZHVsZS0oLiopXC5zbyQnLCAncHVsc2VhdWRpby1tb2R1bGUtJXMnLCAnUHVsc2VBdWRpbyBtb2R1bGUgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgcHJlcGVuZD1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15saWIoLiopXC5zbyQnLCAncHVsc2VhdWRpby1saWItJXMnLCAnUHVsc2VBdWRpbyBsaWJyYXJ5IGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSkKK30KKworUkRFUEVORFNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAiIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1maWx0ZXItYXBwbHkgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWZpbHRlci1oZXVyaXN0aWNzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS11ZGV2LWRldGVjdCBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtbnVsbC1zaW5rIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZXZpY2UtcmVzdG9yZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtc3RyZWFtLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWNhcmQtcmVzdG9yZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZXRlY3QgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2Etc2luayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYWxzYS1zb3VyY2UgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2EtY2FyZCBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtbmF0aXZlLXByb3RvY29sLXVuaXggXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRlZmF1bHQtZGV2aWNlLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWludGVuZGVkLXJvbGVzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1yZXNjdWUtc3RyZWFtcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYWx3YXlzLXNpbmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN1c3BlbmQtb24taWRsZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcG9zaXRpb24tZXZlbnQtc291bmRzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1yb2xlLWNvcmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZSIKKworIyBJZiB0aGUgc2VydmVyIGlzIGluc3RhbGxlZCwgaXQncyB1c3VhbGx5IGRlc2lyYWJsZSB0byBtYWtlIEFMU0EgYXBwbGljYXRpb25zCisjIHVzZSBQdWxzZUF1ZGlvLiBhbHNhLXBsdWdpbnMtcHVsc2VhdWRpby1jb25mIHdpbGwgaW5zdGFsbCB0aGUgY29uZmlndXJhdGlvbgorIyB0aGF0IG1ha2VzIHRoZSBQdWxzZUF1ZGlvIHBsdWdpbiB0aGUgZGVmYXVsdCBBTFNBIGRldmljZS4KK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyICs9ICJhbHNhLXBsdWdpbnMtcHVsc2VhdWRpby1jb25mIgorCisjIHB1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0IGlzIGJ1aWx0IHdoZW5ldmVyIGRidXMgaXMgZW5hYmxlZCBieSBQQUNLQUdFQ09ORklHCisjIGJ1dCBjb25zb2xla2l0IGRlcGVuZHMgb24gbGlieDExIGFuZCBpcyBhdmFpbGFibGUgb25seSBmb3IgRElTVFJPIHdpdGggeDExIGluIERJU1RST19GRUFUVVJFUworUkRFUEVORFNfcHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2NvbnNvbGVraXQnLCAnJywgZCl9IgorUkRFUEVORFNfcHVsc2VhdWRpby1taXNjICs9ICJwdWxzZWF1ZGlvLW1vZHVsZS1jbGktcHJvdG9jb2wtdW5peCIKKworRklMRVNfcHVsc2VhdWRpby1tb2R1bGUtZ2NvbmYgKz0gIiR7bGliZXhlY2Rpcn0vcHVsc2UvZ2NvbmYtaGVscGVyIgorRklMRVNfcHVsc2VhdWRpby1tb2R1bGUtYWxzYS1jYXJkICs9ICIke2RhdGFkaXJ9L3B1bHNlYXVkaW8vYWxzYS1taXhlciIKKworIyBUaGUgY29uc29sZS1raXQgbW9kdWxlIGlzIGdvb2QgdG8gaGF2ZSBvbiBYMTEgc3lzdGVtcyAoaXQga2VlcHMgUHVsc2VBdWRpbworIyBydW5uaW5nIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHVzZXIgbG9naW4gc2Vzc2lvbikuIFRoZSBkZXZpY2UtbWFuYWdlciBhbmQKKyMgeDExLSogbW9kdWxlcyBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSBzdGFydC1wdWxzZWF1ZGlvLXgxMSBzY3JpcHQsIHNvIHRob3NlCisjIG1vZHVsZXMgbXVzdCBiZSBpbnN0YWxsZWQgd2hlbiBYMTEgaXMgZW5hYmxlZC4KK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyICs9ICJcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ1wKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV2aWNlLW1hbmFnZXIgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLXgxMS1jb3JrLXJlcXVlc3QgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLXgxMS1wdWJsaXNoIFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEteHNtcCBcCisgICAgICAgICcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTllYjdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaApAQCAtMCwwICsxLDkyIEBACitGcm9tIDFjYjU2NDdmNzZkYzhjZDdiYWNiY2UyYTY0ZmFjOWU2YzJkYzNiMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMTQ6MzI6NDMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY2xpZW50LWNvbmY6IEFkZCBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QKKworVXN1YWxseSBhdXRvc3Bhd25pbmcgZm9yIHJvb3QgaXMgYSBiYWQgaWRlYSwgc2luY2UgaXQgY2FuIGVhc2lseQoraW50ZXJmZXJlIHdpdGggb3RoZXIgdXNlcnMnIFB1bHNlQXVkaW8gaW5zdGFuY2VzLCBidXQgaW4gZW1iZWRkZWQKK2Vudmlyb25tZW50cyB3aGVyZSBvbmx5IHJvb3QgZXhpc3RzLCBhdXRvc3Bhd25pbmcgaXMgZmluZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8ucHVsc2VhdWRpby5nZW5lcmFsLzIzNTQ5XQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbiB8IDkgKysrKysrKysrCisgc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgICAgICAgIHwgMSArCisgc3JjL3B1bHNlL2NsaWVudC1jb25mLmggICAgICAgIHwgMSArCisgc3JjL3B1bHNlL2NsaWVudC5jb25mLmluICAgICAgIHwgMSArCisgc3JjL3B1bHNlL2NvbnRleHQuYyAgICAgICAgICAgIHwgMiArLQorIDUgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluIGIvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCitpbmRleCAxMDAyZGJlLi4wMDU4NDkwIDEwMDY0NAorLS0tIGEvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCisrKysgYi9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KK0BAIC03MSw2ICs3MSwxNSBAQCBMaWNlbnNlIGFsb25nIHdpdGggUHVsc2VBdWRpbzsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICAgICA8L29wdGlvbj4KKyAKKyAgICAgPG9wdGlvbj4KKysgICAgICA8cD48b3B0PmFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdD08L29wdD4gQWxsb3cgYXV0b3NwYXduaW5nIGFsc28gZm9yIHJvb3QuCisrICAgICAgVGFrZXMgYSBib29sZWFuIHZhbHVlLCBkZWZhdWx0cyB0byA8b3B0Pm5vPC9vcHQ+LiBJZiB0aGUgPG9wdD5hdXRvc3Bhd24KKysgICAgICA8L29wdD4gb3B0aW9uIGlzIGRpc2FibGVkLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LiBBdXRvc3Bhd25pbmcgZm9yCisrICAgICAgcm9vdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBiZWNhdXNlIHJ1bm5pbmcgUHVsc2VBdWRpbyBhcyByb290IHdpbGwKKysgICAgICBpbnRlcmZlcmUgd2l0aCByZWd1bGFyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcy4gVGhpcyBvcHRpb24gc2hvdWxkIGJlCisrICAgICAgZW5hYmxlZCBvbmx5IGluIGVudmlyb25tZW50cyB3aGVyZSB0aGVyZSBhcmUgbm8gcmVndWxhciB1c2VycyBhdCBhbGwuPC9wPgorKyAgICA8L29wdGlvbj4KKysKKysgICAgPG9wdGlvbj4KKyAgICAgICA8cD48b3B0PmRhZW1vbi1iaW5hcnk9PC9vcHQ+IFBhdGggdG8gdGhlIFB1bHNlQXVkaW8gZGFlbW9uIHRvCisgICAgICAgcnVuIHdoZW4gYXV0b3NwYXduaW5nLiBEZWZhdWx0cyB0byBhIHBhdGggY29uZmlndXJlZCBhdCBjb21waWxlCisgICAgICAgdGltZS48L3A+CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworaW5kZXggODMzMzFmOC4uMDQ3NDU4MyAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworQEAgLTEzOCw2ICsxMzgsNyBAQCB2b2lkIHBhX2NsaWVudF9jb25mX2xvYWQocGFfY2xpZW50X2NvbmYgKmMsIGJvb2wgbG9hZF9mcm9tX3gxMSwgYm9vbCBsb2FkX2Zyb21fZQorICAgICAgICAgeyAiZGVmYXVsdC1zZXJ2ZXIiLCAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmRlZmF1bHRfc2VydmVyLCBOVUxMIH0sCisgICAgICAgICB7ICJkZWZhdWx0LWRidXMtc2VydmVyIiwgICAgcGFfY29uZmlnX3BhcnNlX3N0cmluZywgICAmYy0+ZGVmYXVsdF9kYnVzX3NlcnZlciwgTlVMTCB9LAorICAgICAgICAgeyAiYXV0b3NwYXduIiwgICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICAgJmMtPmF1dG9zcGF3biwgTlVMTCB9LAorKyAgICAgICAgeyAiYWxsb3ctYXV0b3NwYXduLWZvci1yb290IiwgcGFfY29uZmlnX3BhcnNlX2Jvb2wsICAgJmMtPmFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdCwgTlVMTCB9LAorICAgICAgICAgeyAiY29va2llLWZpbGUiLCAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmNvb2tpZV9maWxlX2Zyb21fY2xpZW50X2NvbmYsIE5VTEwgfSwKKyAgICAgICAgIHsgImRpc2FibGUtc2htIiwgICAgICAgICAgICBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAgICZjLT5kaXNhYmxlX3NobSwgTlVMTCB9LAorICAgICAgICAgeyAiZW5hYmxlLXNobSIsICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ub3RfYm9vbCwgJmMtPmRpc2FibGVfc2htLCBOVUxMIH0sCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmggYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAoraW5kZXggZWFjNzA1YS4uMTMxMzkzYSAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAorQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcGFfY2xpZW50X2NvbmYgeworICAgICBjaGFyICpjb29raWVfZmlsZV9mcm9tX2FwcGxpY2F0aW9uOworICAgICBjaGFyICpjb29raWVfZmlsZV9mcm9tX2NsaWVudF9jb25mOworICAgICBib29sIGF1dG9zcGF3biwgZGlzYWJsZV9zaG0sIGF1dG9fY29ubmVjdF9sb2NhbGhvc3QsIGF1dG9fY29ubmVjdF9kaXNwbGF5OworKyAgICBib29sIGFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdDsKKyAgICAgc2l6ZV90IHNobV9zaXplOworIH0gcGFfY2xpZW50X2NvbmY7CisgCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluIGIvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCitpbmRleCAyNmI3NzkwLi42OTgzMGVmIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LmNvbmYuaW4KK0BAIC0yMyw2ICsyMyw3IEBACisgOyBkZWZhdWx0LWRidXMtc2VydmVyID0KKyAKKyA7IGF1dG9zcGF3biA9IHllcworKzsgYWxsb3ctYXV0b3NwYXduLWZvci1yb290ID0gbm8KKyA7IGRhZW1vbi1iaW5hcnkgPSBAUEFfQklOQVJZQAorIDsgZXh0cmEtYXJndW1lbnRzID0gLS1sb2ctdGFyZ2V0PXN5c2xvZworIAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jb250ZXh0LmMgYi9zcmMvcHVsc2UvY29udGV4dC5jCitpbmRleCA0YmM0NDVmLi5kNmMzZjZkIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NvbnRleHQuYworKysrIGIvc3JjL3B1bHNlL2NvbnRleHQuYworQEAgLTk3Niw3ICs5NzYsNyBAQCBpbnQgcGFfY29udGV4dF9jb25uZWN0KAorICAgICBpZiAoIShmbGFncyAmIFBBX0NPTlRFWFRfTk9BVVRPU1BBV04pICYmIGMtPmNvbmYtPmF1dG9zcGF3bikgeworIAorICNpZmRlZiBIQVZFX0dFVFVJRAorLSAgICAgICAgaWYgKGdldHVpZCgpID09IDApCisrICAgICAgICBpZiAoIWMtPmNvbmYtPmFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdCAmJiBnZXR1aWQoKSA9PSAwKQorICAgICAgICAgICAgIHBhX2xvZ19kZWJ1ZygiTm90IGRvaW5nIGF1dG9zcGF3biBzaW5jZSB3ZSBhcmUgcm9vdC4iKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGMtPmRvX2F1dG9zcGF3biA9IHRydWU7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWYxYjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY29uZi1wYXJzZXItYWRkLXN1cHBvcnQtZm9yLS5kLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTk2IEBACitGcm9tIDhjYjY0M2JiZjBhMjg3ZDY3Nzk0ZTY4MGQyNmY0OWM1MDNmMzEwNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMjEgTWF5IDIwMTUgMjE6MDA6NTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZi1wYXJzZXI6IGFkZCBzdXBwb3J0IGZvciAuZCBkaXJlY3RvcmllcworCitUaGlzIGFsbG93cyBhIGNvbmZpZ3VyYXRpb24gc2NoZW1lIHdoZXJlIHByaW9yIHRvIGxvYWRpbmcKK2NvbmZpZ3VyYXRpb24gZnJvbSAic29tZWZpbGUiLCB0aGUgcGFyc2VyIGZpcnN0IGxvYWRzIGNvbmZpZ3VyYXRpb24KK2Zyb20gZmlsZXMgaW4gZGlyZWN0b3J5ICJzb21lZmlsZS5kIi4gVGhpcyBmZWF0dXJlIGlzIGN1cnJlbnRseQorZW5hYmxlZCBvbmx5IGZvciBjbGllbnQuY29uZiBhbmQgZGFlbW9uLmNvbmYuCisKK1RoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIHBhY2thZ2VzIGluIGRpc3RyaWJ1dGlvbnMKK3doZW4gdGhlcmUncyBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaW4gZGlmZmVyZW50IHNldHVwcy4KK0ZvciBleGFtcGxlLCB0aGUgZ3JhcGhpY2FsIFNhdG8gZW52aXJvbm1lbnQgaW4gT3BlbkVtYmVkZGVkLWNvcmUgbmVlZHMKK3RvIHNldCBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3Q9dHJ1ZSBpbiBjbGllbnQuY29uZiwgYnV0IHRoZSBkZWZhdWx0Citjb25maWd1cmF0aW9uIGluIE9wZW5FbWJlZGRlZC1jb3JlIHNob3VsZCBub3Qgc2V0IHRoYXQgb3B0aW9uLiBXaXRoCit0aGlzIHBhdGNoLCBJIGNhbiBjcmVhdGUgYSBTYXRvLXNwZWNpZmljIHBhY2thZ2UgdGhhdCBzaW1wbHkgaW5zdGFsbHMKKzUwLXNhdG8uY29uZiBpbiAvZXRjL3B1bHNlL2NsaWVudC5jb25mLmQgd2l0aG91dCBjb25mbGljdGluZyB3aXRoIHRoZQorbWFpbiBjbGllbnQuY29uZiBmaWxlIGNvbWluZyBmcm9tIGEgZGlmZmVyZW50IHBhY2thZ2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yMzU5Ml0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jICAgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMgfCAgMiArLQorIHNyYy9wdWxzZS9jbGllbnQtY29uZi5jICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jICAgICAgICAgICAgIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oICAgICAgICAgICAgIHwgIDggKysrKysrLQorIDYgZmlsZXMgY2hhbmdlZCwgNTIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYyBiL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworaW5kZXggMjFhOGVkYi4uMTMzMmZjNiAxMDA2NDQKKy0tLSBhL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworKysrIGIvc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jCitAQCAtNjE3LDcgKzYxNyw3IEBAIGludCBwYV9kYWVtb25fY29uZl9sb2FkKHBhX2RhZW1vbl9jb25mICpjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgeworICAgICBjaS5kZWZhdWx0X2NoYW5uZWxfbWFwX3NldCA9IGNpLmRlZmF1bHRfc2FtcGxlX3NwZWNfc2V0ID0gZmFsc2U7CisgICAgIGNpLmNvbmYgPSBjOworIAorLSAgICByID0gZiA/IHBhX2NvbmZpZ19wYXJzZShjLT5jb25maWdfZmlsZSwgZiwgdGFibGUsIE5VTEwsIE5VTEwpIDogMDsKKysgICAgciA9IGYgPyBwYV9jb25maWdfcGFyc2UoYy0+Y29uZmlnX2ZpbGUsIGYsIHRhYmxlLCBOVUxMLCB0cnVlLCBOVUxMKSA6IDA7CisgCisgICAgIGlmIChyID49IDApIHsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYyBiL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCitpbmRleCAyMzE0NjEyLi45ODhiNGZlIDEwMDY0NAorLS0tIGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMKKysrKyBiL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCitAQCAtMjQ4Myw3ICsyNDgzLDcgQEAgcGFfYWxzYV9wYXRoKiBwYV9hbHNhX3BhdGhfbmV3KGNvbnN0IGNoYXIgKnBhdGhzX2RpciwgY29uc3QgY2hhciAqZm5hbWUsIHBhX2Fsc2EKKyAKKyAgICAgZm4gPSBwYV9tYXliZV9wcmVmaXhfcGF0aChmbmFtZSwgcGF0aHNfZGlyKTsKKyAKKy0gICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIHAtPnByb3BsaXN0LCBwKTsKKysgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIHAtPnByb3BsaXN0LCBmYWxzZSwgcCk7CisgICAgIHBhX3hmcmVlKGZuKTsKKyAKKyAgICAgaWYgKHIgPCAwKQorQEAgLTQyODgsNyArNDI4OCw3IEBAIHBhX2Fsc2FfcHJvZmlsZV9zZXQqIHBhX2Fsc2FfcHJvZmlsZV9zZXRfbmV3KGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBwYV9jaGFubmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFfcnVuX2Zyb21fYnVpbGRfdHJlZSgpID8gUEFfU1JDRElSICIvbW9kdWxlcy9hbHNhL21peGVyL3Byb2ZpbGUtc2V0cy8iIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQV9BTFNBX1BST0ZJTEVfU0VUU19ESVIpOworIAorLSAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBpdGVtcywgTlVMTCwgcHMpOworKyAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBpdGVtcywgTlVMTCwgZmFsc2UsIHBzKTsKKyAgICAgcGFfeGZyZWUoZm4pOworIAorICAgICBpZiAociA8IDApCitkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jIGIvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCitpbmRleCA0MmI2ZmQ5Li41NDFmMGU3IDEwMDY0NAorLS0tIGEvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCisrKysgYi9zcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMKK0BAIC0yMDQsNyArMjA0LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3J1bGUoc3RydWN0IHJ1bGUgKnIpIHsKKyAgICAgdGFibGVbMF0uZGF0YSA9ICZyLT5hcHBsaWNhdGlvbl9uYW1lOworICAgICB0YWJsZVsxXS5kYXRhID0gJnItPmljb25fbmFtZTsKKyAKKy0gICAgaWYgKHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgdGFibGUsIE5VTEwsIHIpIDwgMCkKKysgICAgaWYgKHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgdGFibGUsIE5VTEwsIGZhbHNlLCByKSA8IDApCisgICAgICAgICBwYV9sb2dfd2FybigiRmFpbGVkIHRvIHBhcnNlIC5kZXNrdG9wIGZpbGUgJXMuIiwgZm4pOworIAorICAgICBwYV94ZnJlZShmbik7CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworaW5kZXggODMzMzFmOC4uM2MzMzg0ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIHBhX2NsaWVudF9jb25mX2xvYWQocGFfY2xpZW50X2NvbmYgKmMsIGJvb2wgbG9hZF9mcm9tX3gxMSwgYm9vbCBsb2FkX2Zyb21fZQorIAorICAgICBmID0gcGFfb3Blbl9jb25maWdfZmlsZShERUZBVUxUX0NMSUVOVF9DT05GSUdfRklMRSwgREVGQVVMVF9DTElFTlRfQ09ORklHX0ZJTEVfVVNFUiwgRU5WX0NMSUVOVF9DT05GSUdfRklMRSwgJmZuKTsKKyAgICAgaWYgKGYpIHsKKy0gICAgICAgIHBhX2NvbmZpZ19wYXJzZShmbiwgZiwgdGFibGUsIE5VTEwsIE5VTEwpOworKyAgICAgICAgcGFfY29uZmlnX3BhcnNlKGZuLCBmLCB0YWJsZSwgTlVMTCwgdHJ1ZSwgTlVMTCk7CisgICAgICAgICBwYV94ZnJlZShmbik7CisgICAgICAgICBmY2xvc2UoZik7CisgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMgYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKK2luZGV4IDJkY2Q0NWEuLmQ0NzMyMzIgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKKysrKyBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisrI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KK0BAIC0xMDMsNyArMTA0LDcgQEAgc3RhdGljIGludCBwYXJzZV9saW5lKHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgKnN0YXRlKSB7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorIAorLSAgICAgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgc3RhdGUtPml0ZW1fdGFibGUsIHN0YXRlLT5wcm9wbGlzdCwgc3RhdGUtPnVzZXJkYXRhKTsKKysgICAgICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHN0YXRlLT5pdGVtX3RhYmxlLCBzdGF0ZS0+cHJvcGxpc3QsIGZhbHNlLCBzdGF0ZS0+dXNlcmRhdGEpOworICAgICAgICAgcGFfeGZyZWUocGF0aCk7CisgICAgICAgICByZXR1cm4gcjsKKyAgICAgfQorQEAgLTE1Miw4ICsxNTMsMTMgQEAgc3RhdGljIGludCBwYXJzZV9saW5lKHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgKnN0YXRlKSB7CisgICAgICAgICByZXR1cm4gbm9ybWFsX2Fzc2lnbm1lbnQoc3RhdGUpOworIH0KKyAKKytzdGF0aWMgaW50IGNvbmZfZmlsdGVyKGNvbnN0IHN0cnVjdCBkaXJlbnQgKmVudHJ5KSB7CisrICAgIHJldHVybiBwYV9lbmRzd2l0aChlbnRyeS0+ZF9uYW1lLCAiLmNvbmYiKTsKKyt9CisrCisgLyogR28gdGhyb3VnaCB0aGUgZmlsZSBhbmQgcGFyc2UgZWFjaCBsaW5lICovCistaW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgdm9pZCAqdXNlcmRhdGEpIHsKKytpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCBib29sIHVzZV9kb3RfZCwKKysgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgIGludCByID0gLTE7CisgICAgIGJvb2wgZG9fY2xvc2UgPSAhZjsKKyAgICAgcGFfY29uZmlnX3BhcnNlcl9zdGF0ZSBzdGF0ZTsKK0BAIC0xNjMsNiArMTY5LDM4IEBAIGludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wCisgCisgICAgIHBhX3plcm8oc3RhdGUpOworIAorKyAgICBpZiAodXNlX2RvdF9kKSB7CisrICAgICAgICBjaGFyICpkaXJfbmFtZTsKKysgICAgICAgIGludCBuOworKyAgICAgICAgc3RydWN0IGRpcmVudCAqKmVudHJpZXMgPSBOVUxMOworKworKyAgICAgICAgZGlyX25hbWUgPSBwYV9zcHJpbnRmX21hbGxvYygiJXMuZCIsIGZpbGVuYW1lKTsKKysKKysgICAgICAgIG4gPSBzY2FuZGlyKGRpcl9uYW1lLCAmZW50cmllcywgY29uZl9maWx0ZXIsIGFscGhhc29ydCk7CisrICAgICAgICBpZiAobiA+PSAwKSB7CisrICAgICAgICAgICAgaW50IGk7CisrCisrICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworKyAgICAgICAgICAgICAgICBjaGFyICpmaWxlbmFtZTI7CisrCisrICAgICAgICAgICAgICAgIGZpbGVuYW1lMiA9IHBhX3NwcmludGZfbWFsbG9jKCIlcyIgUEFfUEFUSF9TRVAgIiVzIiwgZGlyX25hbWUsIGVudHJpZXNbaV0tPmRfbmFtZSk7CisrICAgICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZShmaWxlbmFtZTIsIE5VTEwsIHQsIHByb3BsaXN0LCBmYWxzZSwgdXNlcmRhdGEpOworKyAgICAgICAgICAgICAgICBwYV94ZnJlZShmaWxlbmFtZTIpOworKworKyAgICAgICAgICAgICAgICBmcmVlKGVudHJpZXNbaV0pOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBmcmVlKGVudHJpZXMpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKQorKyAgICAgICAgICAgICAgICBwYV9sb2dfZGVidWcoInNjYW5kaXIoXCIlc1wiKSBmYWlsZWQ6ICVzIiwgZGlyX25hbWUsIHBhX2NzdHJlcnJvcihlcnJubykpOworKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgcGFfbG9nX3dhcm4oInNjYW5kaXIoXCIlc1wiKSBmYWlsZWQ6ICVzIiwgZGlyX25hbWUsIHBhX2NzdHJlcnJvcihlcnJubykpOworKyAgICAgICAgfQorKworKyAgICAgICAgcGFfeGZyZWUoZGlyX25hbWUpOworKyAgICB9CisrCisgICAgIGlmICghZiAmJiAhKGYgPSBwYV9mb3Blbl9jbG9leGVjKGZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkgeworICAgICAgICAgICAgIHBhX2xvZ19kZWJ1ZygiRmFpbGVkIHRvIG9wZW4gY29uZmlndXJhdGlvbiBmaWxlICclcyc6ICVzIiwgZmlsZW5hbWUsIHBhX2NzdHJlcnJvcihlcnJubykpOworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaCBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAoraW5kZXggZGJiNmY1Yy4uY2MyMGQ3ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAorKysrIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oCitAQCAtNTksNiArNTksMTEgQEAgc3RydWN0IHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgeworICAqIHBhX2NvbmZpZ19pdGVtcyBpbiAqdCB0aGF0IGlzIHRlcm1pbmF0ZWQgYnkgYW4gaXRlbSB3aGVyZSBsdmFsdWUgaXMKKyAgKiBOVUxMLgorICAqCisrICogSWYgdXNlX2RvdF9kIGlzIHRydWUsIHRoZW4gYmVmb3JlIHBhcnNpbmcgdGhlIGZpbGUgbmFtZWQgYnkgdGhlIGZpbGVuYW1lCisrICogYXJndW1lbnQsIHRoZSBmdW5jdGlvbiB3aWxsIHBhcnNlIGFsbCBmaWxlcyBlbmRpbmcgd2l0aCAiLmNvbmYiIGluCisrICogYWxwaGFiZXRpY2FsIG9yZGVyIGZyb20gYSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyBmaWxlbmFtZSArICIuZCIsIGlmIHN1Y2gKKysgKiBkaXJlY3RvcnkgZXhpc3RzLgorKyAqCisgICogU29tZSBjb25maWd1cmF0aW9uIGZpbGVzIG1heSBjb250YWluIGEgUHJvcGVydGllcyBzZWN0aW9uLCB3aGljaAorICAqIGlzIGEgYml0IHNwZWNpYWwuIE5vcm1hbGx5IGFsbCBhY2NlcHRlZCBsdmFsdWVzIG11c3QgYmUgcHJlZGVmaW5lZAorICAqIGluIHRoZSBwYV9jb25maWdfaXRlbSB0YWJsZSwgYnV0IGluIHRoZSBQcm9wZXJ0aWVzIHNlY3Rpb24gdGhlCitAQCAtNjgsNyArNzMsOCBAQCBzdHJ1Y3QgcGFfY29uZmlnX3BhcnNlcl9zdGF0ZSB7CisgICogcHJvcGVydGllcywgYW5kIHRob3NlIHByb3BlcnRpZXMgd2lsbCBiZSBtZXJnZWQgaW50byB0aGUgZ2l2ZW4KKyAgKiBwcm9wbGlzdC4gSWYgcHJvcGxpc3QgaXMgTlVMTCwgdGhlbiBzZWN0aW9ucyBuYW1lZCAiUHJvcGVydGllcyIKKyAgKiBhcmUgbm90IGFsbG93ZWQgYXQgYWxsIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuICovCistaW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgdm9pZCAqdXNlcmRhdGEpOworK2ludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIGJvb2wgdXNlX2RvdF9kLAorKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpOworIAorIC8qIEdlbmVyaWMgcGFyc2VycyBmb3IgaW50ZWdlcnMsIHNpemVfdCwgYm9vbGVhbnMgYW5kIHN0cmluZ3MgKi8KKyBpbnQgcGFfY29uZmlnX3BhcnNlX2ludChwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSk7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1NTk5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gZjZhYjNjM2FhN2ExODQxYzhhZGQwNDgyODAyOTM1NmQyYThjODhlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMjE6NTY6MzEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFkc3A6IE1ha2UgaXQgY29tcGlsZSBvbiBtdXNsCisKK2JyZWFrIGFzc3VtcHRpb25zIG9uIGdsaWJjIGFuZCB0aGVyZSBpcyBubyBzdGF0NjQgb24gbm9uCitnbGliYyBDIGxpYnJhcmllcworCitTZWUgcHVsc2VhdWRpbyBidWcKKworaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzMTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3V0aWxzL3BhZHNwLmMgfCAxNSArKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL3BhZHNwLmMgYi9zcmMvdXRpbHMvcGFkc3AuYworaW5kZXggZTYxMzczYy4uNjg0NzIxYSAxMDA2NDQKKy0tLSBhL3NyYy91dGlscy9wYWRzcC5jCisrKysgYi9zcmMvdXRpbHMvcGFkc3AuYworQEAgLTIzNjgsNyArMjM2OCw3IEBAIGZhaWw6CisgICAgIHJldHVybiByZXQ7CisgfQorIAorLSNpZmRlZiBzdW4KKysjaWZuZGVmIF9fR0xJQkNfXworIGludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0LCAuLi4pIHsKKyAjZWxzZQorIGludCBpb2N0bChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgLi4uKSB7CitAQCAtMjUwOCwxMCArMjUwOCwxMyBAQCBpbnQgc3RhdChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikgeworIAorICAgICByZXR1cm4gMDsKKyB9CistCisgI2lmZGVmIEhBVkVfT1BFTjY0CistCisrI3VuZGVmIHN0YXQ2NAorKyNpZmRlZiBfX0dMSUJDX18KKyBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpIHsKKysjZWxzZQorK2ludCBzdGF0NjQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0ICpidWYpIHsKKysjZW5kaWYKKyAgICAgc3RydWN0IHN0YXQgb2xkYnVmOworICAgICBpbnQgcmV0OworIAorQEAgLTI1NDQsNyArMjU0Nyw3IEBAIGludCBzdGF0NjQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0NjQgKmJ1ZikgeworIAorICAgICByZXR1cm4gMDsKKyB9CistCisrI3VuZGVmIG9wZW42NAorIGludCBvcGVuNjQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSB7CisgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgbW9kZV90IG1vZGUgPSAwOworQEAgLTI2NzAsOCArMjY3Myw4IEBAIEZJTEUqIGZvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSB7CisgfQorIAorICNpZmRlZiBIQVZFX09QRU42NAorLQorLUZJTEUgKmZvcGVuNjQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpIHsKKysjdW5kZWYgZm9wZW42NAorK0ZJTEUgKmZvcGVuNjQoY29uc3QgY2hhciAqX19yZXN0cmljdCBmaWxlbmFtZSwgY29uc3QgY2hhciAqX19yZXN0cmljdCBtb2RlKSB7CisgCisgICAgIGRlYnVnKERFQlVHX0xFVkVMX1ZFUkJPU0UsIF9fRklMRV9fIjogZm9wZW42NCglcylcbiIsIGZpbGVuYW1lP2ZpbGVuYW1lOiJOVUxMIik7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL2ZpeC1naXQtdmVyc2lvbi1nZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NDI1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2dpdC12ZXJzaW9uLWdlbiBnZXRzIGNvbmZ1c2VkIGlmIGEgdGFyYmFsbCBpcyBiZWluZyBidWlsdCBpbnNpZGUgYSBnaXQgZGlyZWN0b3J5CisoaWUgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgYSBwb2t5IGNsb25lKSwgYW5kIGVuZHMgdXAgY2FsbGluZwordGhlIHJlbGVhc2UgNi4wLWRpcnR5LiAgQWRkIGEgc2hvcnRjdXQgZXhpdCBzbyBpZiBhIHRhcmJhbGwgaXMgZGV0ZWN0ZWQgaXQKK2RvZXNuJ3QgYXR0ZW1wdCB0byBsb29rIGF0IHRoZSBnaXQgc3RhdHVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MzYpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2l0LXZlcnNpb24tZ2VuIGIvZ2l0LXZlcnNpb24tZ2VuCitpbmRleCA3NTQ2ODg0Li4wNzliOTNlIDEwMDc1NQorLS0tIGEvZ2l0LXZlcnNpb24tZ2VuCisrKysgYi9naXQtdmVyc2lvbi1nZW4KK0BAIC04NCw3ICs4NCwxMCBAQCB0aGVuCisgICAgIHY9YGNhdCAkdGFyYmFsbF92ZXJzaW9uX2ZpbGVgIHx8IGV4aXQgMQorICAgICBjYXNlICR2IGluCisgCSokbmwqKSB2PSA7OyAjIHJlamVjdCBtdWx0aS1saW5lIG91dHB1dAorLQlbMC05XSopIDs7CisrCVswLTldKikKKysJCWVjaG8gIiR2IiB8IHRyIC1kICdcMDEyJworKwkJZXhpdCAwCisrCQk7OworIAkqKSB2PSA7OworICAgICBlc2FjCisgICAgIHRlc3QgLXogIiR2IiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE5OTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZQpAQCAtMCwwICsxLDIgQEAKKyMgPHR5cGU+IDxvd25lcj4gPGdyb3VwPiA8bW9kZT4gPHBhdGg+IDxsaW5rc291cmNlPgorZCBwdWxzZSBwdWxzZSAwNzU1IC92YXIvcnVuL3B1bHNlIG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTkwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgcHVsc2VhdWRpby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3B1bHNlYXVkaW8vcmVsZWFzZXMvJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZi1wYXJzZXItYWRkLXN1cHBvcnQtZm9yLS5kLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1naXQtdmVyc2lvbi1nZW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjA0X3B1bHNlIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNjkxZTgzYjc0MzRjNjc4ZGZmYWNmYTNhMDI3NzUwZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTA2NDBlMGI4MGIxNjA3NjAwYWNjZmFkMmU0NWFhYmI3OWQzNzliZjYzNTRjOTY3MWVmYTIwNjU0NzdmNmY2IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgbWtkaXIgLXAgJHtTfS9saWJsdGRsCisgICAgY3AgJHtTVEFHSU5HX0xJQkRJUn0vbGlibHRkbCogJHtTfS9saWJsdGRsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NiYy9zYmNfMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkN2YzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlNCQyBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIkJsdWV0b290aCBsb3ctY29tcGxleGl0eSwgc3ViYmFuZCBjb2RlYyAoU0JDKSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmJsdWV6Lm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYmMvc2JjLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MGY1N2QwZGYyMmIwZDQwNzQ2YmRkMjk4MDVhNDM2MWIiCisKK0RFUEVORFMgPSAibGlic25kZmlsZTEiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9ibHVldG9vdGgvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmQ4Yjc4NDFmMmMxMWFiMjg3NzE4ZDU2MmYyYjk4MWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTYxMDIyY2Y1NzZmMTQxOTAyNDFlNzA3MTc1M2ZkYWNkY2U1ZDFkZWE4OWZmZDcwNDExMGZjNTBiZTY4OTMwOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkMjNkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMnJjMi5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlNwZWVjaCBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIlNwZWV4IGlzIGFuIE9wZW4gU291cmNlL0ZyZWUgU29mdHdhcmUgcGF0ZW50LWZyZWUgYXVkaW8gY29tcHJlc3Npb24gZm9ybWF0IGRlc2lnbmVkIGZvciBzcGVlY2guIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcGVleC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTMxNDY0OWQ4YmE5ZGQ3MDQ1ZGZiNjY4M2YyOThkMGE4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvc3BlZXgvc3BlZXguaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTM0O21kNT1lZjhjOGVhNGY3MTk4ZDcxY2YzNTA5YzZlZDA1ZWE1MCIKK0RFUEVORFMgPSAibGlib2dnIHNwZWV4ZHNwIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMudXMueGlwaC5vcmcvcmVsZWFzZXMvc3BlZXgvc3BlZXgtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmFlN2RiM2JhYjAxZTFkNGI4NmJhY2ZhOGNhMzNlODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2FhMjdjNzI0N2ZmMTVjODUyMWMyYWUwZWEyMTk4N2M5ZTk3MTBhOGYyZDM0NDhlOGI3OWRhOTgwNmJjZTg5MSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfRlBVJywgJ3NvZnQnLCAnLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1kaXNhYmxlLWZsb2F0LWFwaSAtLWRpc2FibGUtdmJyJywgJycsIGQpfSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDY3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIGM3MzM3MGNlYWZkMTM4YmVjZWU4Y2EzYzY4OGJhNzU3NTY4MzBiZmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFN1biwgNSBKdWwgMjAxNSAxNzo0ODoxNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCByZWx5IG9uIEhBVkVfU1RESU5UX0ggZXQgYWwuIGJlaW5nIGRlZmluZWQKKworTm90IGV2ZXJ5b25lIHdobyBpbmNsdWRlcyBzcGVleGRzcF9jb25maWdfdHlwZXMuaCB3aWxsIGhhdmUgYSB0ZXN0Cit3aGljaCBkZWZpbmVzIHRob3NlLCBhbmQgaWYgd2UndmUgY2hvc2VuIHRvIHVzZSB0aGUgc3RkaW50IHR5cGVzIGF0Citjb25maWd1cmUgdGltZSB0aGVuIHdlIGtub3cgZXhhY3RseSB3aGljaCBoZWFkZXIocykgYXJlIGF2YWlsYWJsZSwgc28KK2p1c3QgY2hvb3NlIHRoZSBiZXN0IG9uZSB0aGVuIGFuZCBnZW5lcmF0ZSB0aGUgaGVhZGVyIHRvIHVzZSBpdC4KKworVGhpcyBwYXRjaCwgaW5jbHVkaW5nIHRoZSBhYm92ZSB0ZXh0LCBpcyBjb3BpZWQgZnJvbSBhIGNvbW1pdCBpbiB0aGUKK3NwZWV4IHJlcG9zaXRvcnlbMV0uIFRoZSBvcmlnaW5hbCBjb21taXQgZm9yIHNwZWV4IHdhcyBtYWRlIGJ5IFJvbgorPHJvbkBkZWJpYW4ub3JnPi4KKworWzFdIGh0dHBzOi8vZ2l0LnhpcGgub3JnLz9wPXNwZWV4LmdpdDthPWNvbW1pdGRpZmY7aD03NzRjODdkNmNiN2RkOGRhYmRkMTc2NzdmYzZkYTc1M2VjZjRhYTg3CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyBpbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluIHwgOCArLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyY2QyZDFlLi4xZGUwYzIzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMzQsNiArMzM0LDEyIEBAIEFDX1NVQlNUKFtVU0laRTE2XSkKKyBBQ19TVUJTVChbU0laRTMyXSkKKyBBQ19TVUJTVChbVVNJWkUzMl0pCisgCisrQVNfSUYoW3Rlc3QgIiRhY19jdl9oZWFkZXJfc3RkaW50X2giID0gInllcyJdLCAgICBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxzdGRpbnQuaD4iXSwKKysgICAgICBbdGVzdCAiJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA9ICJ5ZXMiXSwgIFtJTkNMVURFX1NURElOVD0iI2luY2x1ZGUgPGludHR5cGVzLmg+Il0sCisrICAgICAgW3Rlc3QgIiRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2giID0gInllcyJdLCBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4iXSkKKysKKytBQ19TVUJTVChbSU5DTFVERV9TVERJTlRdKQorKworIEFDX0NPTkZJR19GSUxFUyhbCisgICAgICAgICAgICBNYWtlZmlsZSBsaWJzcGVleGRzcC9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgU3BlZXhEU1Auc3BlYworICAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL3NwZWV4L01ha2VmaWxlIHNwZWV4ZHNwLnBjCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbiBiL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4KK2luZGV4IDAyYjgyZmQuLjVlYTdiNTUgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCisrKysgYi9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCitAQCAtMSwxMyArMSw3IEBACisgI2lmbmRlZiBfX1NQRUVYX1RZUEVTX0hfXworICNkZWZpbmUgX19TUEVFWF9UWVBFU19IX18KKyAKKy0jaWYgZGVmaW5lZCBIQVZFX1NURElOVF9ICistIyAgaW5jbHVkZSA8c3RkaW50Lmg+CistI2VsaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKy0jICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorLSNlbGlmIGRlZmluZWQgSEFWRV9TWVNfVFlQRVNfSAorLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNlbmRpZgorK0BJTkNMVURFX1NURElOVEAKKyAKKyB0eXBlZGVmIEBTSVpFMTZAIHNweF9pbnQxNl90OworIHR5cGVkZWYgQFVTSVpFMTZAIHNweF91aW50MTZfdDsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWFjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcF8xLjJyYzMuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBIHBhdGVudC1mcmVlIERTUCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiU3BlZXhEU1AgaXMgYSBwYXRlbnQtZnJlZSwgT3BlbiBTb3VyY2UvRnJlZSBTb2Z0d2FyZSBEU1AgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNwZWV4Lm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzE0NjQ5ZDhiYTlkZDcwNDVkZmI2NjgzZjI5OGQwYTgiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy9zcGVleC9zcGVleGRzcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGQ5ZDMxMTg0ZjdlYjc2MTE5MmZkMWVmMGI3MzMzMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YWU2ODg2MDAwMzlmNWQyMjRiZGYyZTIyMmQyZmJkZTY1NjA4NDQ3ZTRjMmY2ODE1ODVlNGRjYTZkZjY5MmYxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAgICAgLS1kaXNhYmxlLWV4YW1wbGVzIFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1RBUkdFVF9GUFUnLCAnc29mdCcsICctLWVuYWJsZS1maXhlZC1wb2ludCAtLWRpc2FibGUtZmxvYXQtYXBpJywgJycsIGQpfSBcCisiCisKKyMgV29ya2Fyb3VuZCBmb3IgYSBidWlsZCBmYWlsdXJlIHdoZW4gYnVpbGRpbmcgd2l0aCBNQUNISU5FPXFlbXVhcm02NC4gSSB0aGluaworIyBhYXJjaDY0IGlzIHN1cHBvc2VkIHRvIHN1cHBvcnQgTkVPTiBqdXN0IGZpbmUsIGJ1dCBidWlsZGluZyBmb3IgcWVtdWFybTY0CisjIGZhaWxzIGluIE5FT04gY29kZToKKyMKKyMgLi4uL3NwZWV4ZHNwLTEuMnJjMy9saWJzcGVleGRzcC9yZXNhbXBsZV9uZW9uLmg6MTQ4OjU6IGVycm9yOiBpbXBvc3NpYmxlIGNvbnN0cmFpbnQgaW4gJ2FzbScKKyMgICAgICBhc20gdm9sYXRpbGUgKCIgIGNtcCAlW2xlbl0sICMwXG4iCisjICAgICAgXgorIworIyBJIHNlbnQgYW4gZW1haWwgYWJvdXQgdGhlIGlzc3VlIHRvIHNwZWV4LWRldi4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGVyZQorIyBhcmUgbm8gcmVzcG9uc2VzIHlldDoKKyMgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5jb21wcmVzc2lvbi5zcGVleC5kZXZlbC83MzYwCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FhcmNoNjQnLCAnLS1kaXNhYmxlLW5lb24nLCAnJywgZCl9IgorCisjIHNwZWV4ZHNwIHdhcyBzcGxpdCBvZmYgZnJvbSBzcGVleCBpbiAxLjJyYzIuIE9sZGVyIHZlcnNpb25zIG9mIHNwZWV4IGNhbid0CisjIGJlIGluc3RhbGxlZCB0b2dldGhlciB3aXRoIHNwZWV4ZHNwLCBzaW5jZSB0aGV5IGNvbnRhaW4gb3ZlcmxhcHBpbmcgZmlsZXMuCitSQ09ORkxJQ1RTXyR7UE59ID0gInNwZWV4ICg8IDEuMnJjMikiCitSQ09ORkxJQ1RTXyR7UE59LWRiZyA9ICJzcGVleC1kYmcgKDwgMS4ycmMyKSIKK1JDT05GTElDVFNfJHtQTn0tZGV2ID0gInNwZWV4LWRldiAoPCAxLjJyYzIpIgorUkNPTkZMSUNUU18ke1BOfS1zdGF0aWNkZXYgPSAic3BlZXgtc3RhdGljZGV2ICg8IDEuMnJjMikiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3Ivb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTEwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly90cmFjLnhpcGgub3JnL3RpY2tldC8xOTIyXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorSW5kZXg6IGNvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbmZpZ3VyZS5pbgkocmV2aXNpb24gMTg3NjQpCisrKysgY29uZmlndXJlLmluCSh3b3JraW5nIGNvcHkpCitAQCAtOSw3ICs5LDcgQEAKKyBBQ19DQU5PTklDQUxfSE9TVAorIEFDX0NBTk9OSUNBTF9UQVJHRVQKKworLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorCisgQU1fSU5JVF9BVVRPTUFLRShsaWJ2b3JiaXNpZGVjLDEuMi4xKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0OTU0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK0Zyb206IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgSnVsIDIwMTIgMTM6Mjk6MzQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdHJlbW9yOiBhZGQgSVQgaW5zdHJ1Y3Rpb25zIGZvciBhcm0gdGh1bWIyIHR1bmUgZmxhZ3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbiBUaHVtYi0yLCBtb3N0IGluc3RydWN0aW9ucyBkbyBub3QgaGF2ZSBhIGJ1aWx0IGluIGNvbmRpdGlvbiBjb2RlIChleGNlcHQgZm9yIAorY29uZGl0aW9uYWwgYnJhbmNoZXMpLiBJbnN0ZWFkLCBzaG9ydCBzZXF1ZW5jZXMgb2YgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSB0byBiZSAKK2V4ZWN1dGVkIGNvbmRpdGlvbmFsbHkgY2FuIGJlIHByZWNlZGVkIGJ5IGEgc3BlY2lhbCAiSVQgaW5zdHJ1Y3Rpb24iIHdoaWNoIAorZGVzY3JpYmVzIHRoZSBjb25kaXRpb24gYW5kIHdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSAKK2V4ZWN1dGVkIGlmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UgcmVzcGVjdGl2ZWx5LiAKKworRm9yIHRoZSBBUk0vVGh1bWIgSVQoSWYtVGhlbikgaW5zdHJ1Y3Rpb246CitodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvaW5kZXguanNwP3RvcGljPS9jb20uYXJtLmRvYy5kdWkwNDg5Yy9DamFiaWNjaS5odG1sCisKK1NpZ25lZC1vZmYtYnk6IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFzbV9hcm0uaCB8ICAgMTQgKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYXNtX2FybS5oIGIvYXNtX2FybS5oCitpbmRleCBjM2JkYTAwLi44MjNjNTRmIDEwMDc1NQorLS0tIGEvYXNtX2FybS5oCisrKysgYi9hc21fYXJtLmgKK0BAIC0xMDgsOSArMTA4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBYTlBST0QzMShvZ2dfaW50MzJfdCAgYSwgb2dnX2ludDMyX3QgIGIsCisgc3RhdGljIGlubGluZSBvZ2dfaW50MzJfdCBDTElQX1RPXzE1KG9nZ19pbnQzMl90IHgpIHsKKyAgIGludCB0bXA7CisgICBhc20gdm9sYXRpbGUoInN1YnMJJTEsICUwLCAjMzI3Njhcblx0IgorKwkgICAgICAgIml0dCAgICAgcGxcblx0IgorIAkgICAgICAgIm1vdnBsCSUwLCAjMHg3ZjAwXG5cdCIKKyAJICAgICAgICJvcnJwbAklMCwgJTAsICMweGZmXG4iCisgCSAgICAgICAiYWRkcwklMSwgJTAsICMzMjc2OFxuXHQiCisrCSAgICAgICAiaXQgICAgICBtaVxuXHQiCisgCSAgICAgICAibW92bWkJJTAsICMweDgwMDAiCisgCSAgICAgICA6ICIrciIoeCksIj1yIih0bXApCisgCSAgICAgICA6CitAQCAtMTM5LDEwICsxNDEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAKKyAgICAgICAibGRtZGIgICByMCEse3IxLHIzfTsiCisgICAgICAgInN1YnMgICAgcjEscjEsJTQ7IiAgICAgICAgICAvL2lsc3Bbal0td2kKKysgICAgICAiaXQgICAgICBtaTsiCisgICAgICAgInJzYm1pICAgcjEscjEsIzA7IiAgICAgICAgICAvL2xhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMCxyMixyMSwlMDsiICAgICAgIC8vcWkqPWxhYnMoaWxzcFtqXS13aSkKKyAgICAgICAKKyAgICAgICAic3VicyAgICByMSxyMywlNDsiICAgICAgICAgIC8vaWxzcFtqKzFdLXdpCisrICAgICAgIml0ICAgICAgbWk7IgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwOyIgICAgICAgICAgLy9sYWJzKGlsc3BbaisxXS13aSkKKyAgICAgICAidW11bGwgICAlMSxyMyxyMSwlMTsiICAgICAgIC8vcGkqPWxhYnMoaWxzcFtqKzFdLXdpKQorICAgICAgIAorQEAgLTE2Nyw2ICsxNzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHNwX2xvb3BfYXNtKG9nZ191aW50MzJfdCAqcWlwLG9nZ191aW50MzJfdCAqcGlwLAorICAgICAgICJtb3YgICAgIHIwLCMweDQwMDA7XG4iCisgICAgICAgCisgICAgICAgInN1YnMgICAgcjEscjEsJTQ7XG4iICAgICAgICAgIC8vaWxzcFtqXS13aQorKyAgICAgICJpdCAgICAgIG1pO1xuIgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwO1xuIiAgICAgICAgICAvL2xhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMCxyMixyMSwlMDtcbiIgICAgICAgLy9xaSo9bGFicyhpbHNwW2pdLXdpKQorICAgICAgICJ1bXVsbCAgICUxLHIzLHIwLCUxO1xuIiAgICAgICAvL3BpKj1sYWJzKGlsc3BbaisxXS13aSkKK0BAIC0xOTAsMTggKzE5NSwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHNwX2xvb3BfYXNtKG9nZ191aW50MzJfdCAqcWlwLG9nZ191aW50MzJfdCAqcGlwLAorICAgICAgICJtb3YgICAgIHIyLCMwOyIKKyAgICAgICAib3JyICAgICByMSwlMCwlMTsiCisgICAgICAgInRzdCAgICAgcjEsIzB4ZmYwMDAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjODsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICM4OyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMGYwMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCM0OyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzQ7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwMGMwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzI7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjMjsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDAwMjAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjMTsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICMxOyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMDAxMDAwMDsiCisrICAgICAgIml0ICAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCMxOyIKKyAgICAgICAibW92ICAgICAlMCwlMCxsc3IgcjI7IgorICAgICAgICJtb3YgICAgICUxLCUxLGxzciByMjsiCitAQCAtMjIyLDE1ICsyMzIsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9ub3JtX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfaW50MzJfdCAqcWV4cHApeworICAgb2dnX2ludDMyX3QgcWV4cD0qcWV4cHA7CisgCisgICBhc20oInRzdCAgICAgJTAsIzB4MDAwMGZmMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzg7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCM4OyIKKyAgICAgICAidHN0ICAgICAlMCwjMHgwMDAwZjAwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjNDsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzQ7IgorICAgICAgICJ0c3QgICAgICUwLCMweDAwMDBjMDAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICMyOyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjMjsiCisgICAgICAgInRzdCAgICAgJTAsIzB4MDAwMDgwMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzE7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCMxOyIKKyAgICAgICA6ICIrciIocWkpLCIrciIocWV4cCkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzc4OTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkZpeGVkLXBvaW50IGRlY29kZXIiCitERVNDUklQVElPTiA9ICJ0cmVtb3IgaXMgYSBmaXhlZCBwb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdm9yYmlzIGNvZGVjLiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGIxYjdhNjY4YjJhNmY0N2IyYWY4OGZiMDA4YWQ1NTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3MuaDtiZWdpbmxpbmU9MztlbmRsaW5lPTE0O21kNT01YzBhZjVlMWJlZGVmM2NlODE3OGM4OWY0OGNkNmYxZiIKK0RFUEVORFMgPSAibGlib2dnIgorU1JDREFURSA9ICIke1BWfSIKK1BSID0gInIxIgorCisjIFNWTiBzdXBwb3J0IGZvciB1cHN0cmVhbSB2ZXJzaW9uIGNoZWNrIGlzbid0IGltcGxlbWVudGVkIHlldAorUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04gPSAiMjAxNTAxMDciCitSRUNJUEVfVVBTVFJFQU1fREFURSA9ICJKYW4gMDcsIDIwMTUiCitDSEVDS19EQVRFID0gIkF1ZyAxMiwgMjAxNSIKKworU1JDX1VSSSA9ICJzdm46Ly9zdm4ueGlwaC5vcmcvdHJ1bms7bW9kdWxlPVRyZW1vcjtyZXY9MTk0Mjc7cHJvdG9jb2w9aHR0cCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL3RyZW1vci1hcm0tdGh1bWIyLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L1RyZW1vciIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjgwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC40LjMuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJXZWJQIGlzIGFuIGltYWdlIGZvcm1hdCBkZXNpZ25lZCBmb3IgdGhlIFdlYiIKK0RFU0NSSVBUSU9OID0gIldlYlAgaXMgYSBtZXRob2Qgb2YgbG9zc3kgYW5kIGxvc3NsZXNzIGNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIFwKKyAgICAgICAgICAgICAgIHVzZWQgb24gYSBsYXJnZSB2YXJpZXR5IG9mIHBob3RvZ3JhcGhpYywgdHJhbnNsdWNlbnQgYW5kIFwKKyAgICAgICAgICAgICAgIGdyYXBoaWNhbCBpbWFnZXMgZm91bmQgb24gdGhlIHdlYi4gVGhlIGRlZ3JlZSBvZiBsb3NzeSBcCisgICAgICAgICAgICAgICBjb21wcmVzc2lvbiBpcyBhZGp1c3RhYmxlIHNvIGEgdXNlciBjYW4gY2hvb3NlIHRoZSB0cmFkZS1vZmYgXAorICAgICAgICAgICAgICAgYmV0d2VlbiBmaWxlIHNpemUgYW5kIGltYWdlIHF1YWxpdHkuIFdlYlAgdHlwaWNhbGx5IGFjaGlldmVzIFwKKyAgICAgICAgICAgICAgIGFuIGF2ZXJhZ2Ugb2YgMzAlIG1vcmUgY29tcHJlc3Npb24gdGhhbiBKUEVHIGFuZCBKUEVHIDIwMDAsIFwKKyAgICAgICAgICAgICAgIHdpdGhvdXQgbG9zcyBvZiBpbWFnZSBxdWFsaXR5LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NwZWVkL3dlYnAvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlOGRlZTkzMmMyNmYyZGFiNTAzYWJmNzBjOTZkOGJiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1BBVEVOVFM7bWQ1PWFkMjU4MGFlZTM1NDY4Njc1YzQ0ZDdiZWJiYTY1Y2E4IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMud2VibXByb2plY3Qub3JnL3JlbGVhc2VzL3dlYnAvJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjA4ODEzNTI1ZWVlZmZlN2UzMDViNGNiZmFkZThhZTliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmYmUwZDU4ZmRhOTM2ZjJlZDk5ZDBiODM3ZWQ3MDg3ZDA2NGQ2ODM4OTMxZjI4MmM0NjE4ZDJhM2Y3MzkwYzQiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZGlzYWJsZS1leHBlcmltZW50YWwgXAorICAgIC0tZGlzYWJsZS13aWMgXAorICAgIC0tZW5hYmxlLWxpYndlYnBtdXggXAorICAgIC0tZW5hYmxlLWxpYndlYnBkZW11eCBcCisgICAgLS1lbmFibGUtdGhyZWFkaW5nIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKworIyBsaWJ3ZWJwZGVjb2RlciBpcyBhIHN1YnNldCBvZiBsaWJ3ZWJwLCBkb24ndCBidWlsZCBpdCB1bmxlc3MgcmVxdWVzdGVkCitQQUNLQUdFQ09ORklHW2RlY29kZXJdID0gIi0tZW5hYmxlLWxpYndlYnBkZWNvZGVyLC0tZGlzYWJsZS1saWJ3ZWJwZGVjb2RlciIKKworIyBBcHBseSBmb3IgZXhhbXBsZXMgcHJvZ3JhbXM6IGN3ZWJwIGFuZCBkd2VicAorUEFDS0FHRUNPTkZJR1tnaWZdID0gIi0tZW5hYmxlLWdpZiwtLWRpc2FibGUtZ2lmLGdpZmxpYiIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLCxsaWJwbmciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKKworIyBBcHBseSBvbmx5IGZvciBleGFtcGxlIHByb2dyYW0gdndlYnAKK1BBQ0tBR0VDT05GSUdbZ2xdID0gIi0tZW5hYmxlLWdsLC0tZGlzYWJsZS1nbCxtZXNhLWdsdXQiCisKK1BBQ0tBR0VTID0rICIke1BOfS1naWYyd2VicCIKKworREVTQ1JJUFRJT05fJHtQTn0tZ2lmMndlYnAgPSAiU2ltcGxlIHRvb2wgdG8gY29udmVydCBhbmltYXRlZCBHSUZzIHRvIFdlYlAiCitGSUxFU18ke1BOfS1naWYyd2VicCA9ICIke2JpbmRpcn0vZ2lmMndlYnAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcyZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaApAQCAtMCwwICsxLDI5IEBACistbWFyY2ggZmxhZyBpcyBub3QgaW4gQ0ZMQUdTIHNvIHRoaXMgd2lsbCBhbHdheXMgZGVmYXVsdCB0byAtbWNwdT1jb3J0ZXgtYTgKKy1tZnB1PW5lb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAyOTE2MDM2Li5mNGVjZTQwIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NzMsOSArNzczLDYgQEAgaWYgWyAkYXNtID0gYXV0byAtYSBcKCAkQVJDSCA9IFg4NiAtbyAkQVJDSCA9IFg4Nl82NCBcKSBdIDsgdGhlbgorIGZpCisgCisgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFSTSBdIDsgdGhlbgorLSAgICAjIHNldCBmbGFncyBzbyBuZW9uIGlzIGJ1aWx0IGJ5IGRlZmF1bHQKKy0gICAgZWNobyAkQ0ZMQUdTIHwgZ3JlcCAtRXEgJygtbWNwdXwtbWFyY2h8LW1mcHUpJyB8fCBDRkxBR1M9IiRDRkxBR1MgLW1jcHU9Y29ydGV4LWE4IC1tZnB1PW5lb24iCistCisgICAgIGlmICBjY19jaGVjayAnJyAnJyAnX19hc21fXygicmV2IGlwLCBpcCIpOycgOyB0aGVuICAgICAgZGVmaW5lIEhBVkVfQVJNVjYKKyAgICAgICAgIGNjX2NoZWNrICcnICcnICdfX2FzbV9fKCJtb3Z0IHIwLCAjMCIpOycgICAgICAgICAmJiBkZWZpbmUgSEFWRV9BUk1WNlQyCisgICAgICAgICBjY19jaGVjayAnJyAnJyAnX19hc21fXygidmFkZC5pMTYgcTAsIHEwLCBxMCIpOycgJiYgZGVmaW5lIEhBVkVfTkVPTgorQEAgLTc4OCw4ICs3ODUsNiBAQCBpZiBbICRhc20gPSBhdXRvIC1hICRBUkNIID0gQVJNIF0gOyB0aGVuCisgZmkKKyAKKyBpZiBbICRhc20gPSBhdXRvIC1hICRBUkNIID0gQUFSQ0g2NCBdIDsgdGhlbgorLSAgICAjIHNldCBmbGFncyBzbyBuZW9uIGlzIGJ1aWx0IGJ5IGRlZmF1bHQKKy0gICAgZWNobyAkQ0ZMQUdTIHwgZ3JlcCAtRXEgJygtbWNwdXwtbWFyY2h8LW1mcHV8LWFyY2gpJyB8fCBDRkxBR1M9IiRDRkxBR1MgLWFyY2ggYXJtNjQgLW1mcHU9bmVvbiIKKyAKKyAgICAgaWYgIGNjX2NoZWNrICcnICcnICdfX2FzbV9fKCJjbWVxIHYwLjhoLCB2MC44aCwgIzAiKTsnIDsgdGhlbiBkZWZpbmUgSEFWRV9ORU9OCisgICAgICAgICBBU0ZMQUdTPSIkQVNGTEFHUyAtYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjk5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiSC4yNjQvTVBFRy00IEFWQyB2aWRlbyBlbmNvZGVyIgorREVTQ1JJUFRJT04gPSAiQSBmcmVlIHNvZnR3YXJlIGxpYnJhcnkgYW5kIGFwcGxpY2F0aW9uIGZvciBlbmNvZGluZyB2aWRlbyBzdHJlYW1zIGludG8gdGhlIEguMjY0L01QRUctNCBBVkMgZm9ybWF0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL2RldmVsb3BlcnMveDI2NC5odG1sIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAieWFzbS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnZpZGVvbGFuLm9yZy94MjY0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9kb24tdC1kZWZhdWx0LXRvLWNvcnRleC1hOS13aXRoLW5lb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ1JFViA9ICJjOGE3NzNlYmZjYTE0OGVmMDRmNWE2MGQ0MmNiZDczMzZhZjBiYWY2IgorCitQViA9ICJyMjQ5MStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBsaWJfcGFja2FnZSBwa2djb25maWcgcGVybG5hdGl2ZQorCitYMjY0X0RJU0FCTEVfQVNNID0gIiIKK1gyNjRfRElTQUJMRV9BU01fYXJtdjQgPSAiLS1kaXNhYmxlLWFzbSIKK1gyNjRfRElTQUJMRV9BU01fYXJtdjUgPSAiLS1kaXNhYmxlLWFzbSIKK1gyNjRfRElTQUJMRV9BU01fcG93ZXJwYyA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzcGUiLCAiLS1kaXNhYmxlLWFzbSIsICIiLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICctLXByZWZpeD0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgIC0taG9zdD0ke0hPU1RfU1lTfSBcCisgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAgICAgICAgICAgICAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxhdmYgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zd3NjYWxlIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1waWMgXAorICAgICAgICAgICAgICAgICR7WDI2NF9ESVNBQkxFX0FTTX0gXAorICAgICAgICAgICAgICAgJworCitkb19jb25maWd1cmUoKSB7CisgICAgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Cit9CisKKyMgR2V0IHJpZCBvZiAtZQorRVhUUkFfT0VNQUtFID0gIiIKK0FTID0gIiR7VEFSR0VUX1BSRUZJWH1nY2MiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCisjIFBJQyBjYW4ndCBiZSBlbmFibGVkIGZvciAzMi1iaXQgeDg2CitJTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfeDg2ID0gIiB0ZXh0cmVsIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYiBiL21ldGEvcmVjaXBlcy1xdC9pbWFnZXMvcXQ0ZS1kZW1vLWltYWdlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYgpAQCAtMCwwICsxLDE0IEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSB0aGF0IHdpbGwgbGF1bmNoIGludG8gdGhlIGRlbW8gYXBwbGljYXRpb24gZm9yIHRoZSBlbWJlZGRlZCAobm90IGJhc2VkIG9uIFgxMSkgdmVyc2lvbiBvZiBRdC4iCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU1BR0VfSU5TVEFMTCArPSAiXAorCSR7Q09SRV9JTUFHRV9CQVNFX0lOU1RBTEx9IFwKKwlwYWNrYWdlZ3JvdXAtY29yZS1xdDRlIFwKKyIKKworaW5oZXJpdCBjb3JlLWltYWdlCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwMTAzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiCkBAIC0wLDAgKzEsNSBAQAorIyBRdCB0b29sY2hhaW4KK1FUTkFNRSA9ICJxdCIKK1FUX0RJUl9OQU1FID0gInF0NCIKKworcmVxdWlyZSBtZXRhLXRvb2xjaGFpbi1xdC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYyBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc1ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuaW5jCkBAIC0wLDAgKzEsMzUgQEAKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPSAibmF0aXZlc2RrLXBhY2thZ2Vncm91cC0ke1FUTkFNRX0tdG9vbGNoYWluLWhvc3QgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPSAicGFja2FnZWdyb3VwLSR7UVROQU1FfS10b29sY2hhaW4tdGFyZ2V0IgorVE9PTENIQUlOX09VVFBVVE5BTUUgPSAiJHtTREtfTkFNRX0tdG9vbGNoYWluLSR7UVROQU1FfS0ke0RJU1RST19WRVJTSU9OfSIKKworcmVxdWlyZSByZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYgorCitRVF9UT09MU19QUkVGSVggPSAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCR7YmluZGlyX25hdGl2ZXNka30iCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kKCkgeworICAgIG1rZGlyIC1wICR7U0RLX09VVFBVVH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQvCisgICAgc2NyaXB0PSR7U0RLX09VVFBVVH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQvJHtRVF9ESVJfTkFNRX0uc2gKKworICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DRkxBR1M9IiRDRkxBR1MiJyA+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYRkxBR1M9IiRDWFhGTEFHUyInID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTERGTEFHUz0iJExERkxBR1MiJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NDPSRDQycgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DWFg9JENYWCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSU5LPSRDWFgnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQVI9JEFSJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVD0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtsaWJkaXJ9JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVD0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9NT0M9JHtRVF9UT09MU19QUkVGSVh9L21vYzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDPSR7UVRfVE9PTFNfUFJFRklYfS91aWM0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQzM9JHtRVF9UT09MU19QUkVGSVh9L3VpYzM0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1JDQz0ke1FUX1RPT0xTX1BSRUZJWH0vcmNjNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUw9JHtRVF9UT09MU19QUkVGSVh9L3FkYnVzY3BwMnhtbDQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQPSR7UVRfVE9PTFNfUFJFRklYfS9xZGJ1c3htbDJjcHA0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FUX0NPTkZJRz0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IFFNQUtFU1BFQz0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL2xpbnV4LWcrKycgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBRVF9DT05GX1BBVEg9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVCR7c3lzY29uZmRpcn0vcXQuY29uZicgPj4gJHNjcmlwdAorCisgICAgIyBtYWtlIGEgc3ltYm9saWMgbGluayB0byBta3NwZWNzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUXQgU0RLCisgICAgIyBhbmQgUXQgQ3JlYXRvcgorICAgIChjZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9Ly4uOyBsbiAtcyAke1NES1RBUkdFVFNZU1JPT1R9L3Vzci9zaGFyZS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzIG1rc3BlY3M7KQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTNmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdGUuYmIKQEAgLTAsMCArMSw2IEBACisjIFF0IEVtYmVkZGVkIHRvb2xjaGFpbgorUFIgPSAicjYiCitRVE5BTUUgPSAicXRlIgorUVRfRElSX05BTUUgPSAicXRvcGlhIgorCityZXF1aXJlIG1ldGEtdG9vbGNoYWluLXF0LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYiBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1Y2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCisKK1NVTU1BUlkgPSAiSG9zdCBwYWNrYWdlcyBmb3IgUXQgU0RLIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MyNzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKKworREVTQ1JJUFRJT04gPSAiSG9zdCBwYWNrYWdlcyBmb3IgUXQgRW1iZWRkZWQgU0RLIgorTElDRU5TRSA9ICJNSVQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJuYXRpdmVzZGstcXQ0LXRvb2xzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZlNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCisKK1NVTU1BUlkgPSAiSG9zdCBwYWNrYWdlcyBmb3IgUXQgRW1iZWRkZWQgU0RLIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFmOGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIKQEAgLTAsMCArMSwyMiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkCisjCisKK1NVTU1BUlkgPSAiUXQgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0IgorCisjIFF0NCBjb3VsZCBOT1QgYmUgYnVpbHQgb24gTUlQUzY0IHdpdGggNjQgYml0cyB1c2Vyc3BhY2UKK0NPTVBBVElCTEVfSE9TVF9taXBzNjQgPSAibnVsbCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHF1aWNreSBhbmQgZm90b3dhbGwgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGVtb2FwcHMiCisKK1FUREVNT1MgPz0gInF1aWNreSAke0NPTU1FUkNJQUxfUVR9IGZvdG93YWxsIgorCitTVU1NQVJZXyR7UE59LWRlbW9hcHBzID0gIlF0IGRlbW8gYXBwbGljYXRpb25zIgorUkRFUEVORFNfJHtQTn0tZGVtb2FwcHMgPSAiJHtRVERFTU9TfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWZhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiUXQgZm9yIEVtYmVkZGVkIExpbnV4IChRdCB3aXRob3V0IFgxMSkiCitQUiA9ICJyMiIKK0xJQ0VOU0UgPSAiTUlUIgorCisjIFF0NCBjb3VsZCBOT1QgYmUgYnVpbHQgb24gTUlQUzY0IHdpdGggNjQgYml0cyB1c2Vyc3BhY2UKK0NPTVBBVElCTEVfSE9TVF9taXBzNjQgPSAibnVsbCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworVE9VQ0ggPSAnICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInRvdWNoc2NyZWVuIiwgInRzbGliIHRzbGliLWNhbGlicmF0ZSB0c2xpYi10ZXN0cyIsICIiLGQpfScKKworUkRFUEVORFNfJHtQTn0gPSAiIFwKKwlxdDQtZW1iZWRkZWQgXAorCWxpYnF0LWVtYmVkZGVkM3N1cHBvcnQ0IFwKKwlsaWJxdC1lbWJlZGRlZGNsdWNlbmU0IFwKKwlsaWJxdC1lbWJlZGRlZGNvcmU0IFwKKwlsaWJxdC1lbWJlZGRlZGRidXM0IFwKKwlsaWJxdC1lbWJlZGRlZGd1aTQgXAorCWxpYnF0LWVtYmVkZGVkaGVscDQgXAorCWxpYnF0LWVtYmVkZGVkbXVsdGltZWRpYTQgXAorCWxpYnF0LWVtYmVkZGVkbmV0d29yazQgXAorCWxpYnF0LWVtYmVkZGVkc2NyaXB0NCBcCisJbGlicXQtZW1iZWRkZWRzY3JpcHR0b29sczQgXAorCWxpYnF0LWVtYmVkZGVkc3FsNCBcCisJbGlicXQtZW1iZWRkZWRzdmc0IFwKKwlsaWJxdC1lbWJlZGRlZHRlc3Q0IFwKKwlsaWJxdC1lbWJlZGRlZHdlYmtpdDQgXAorCWxpYnF0LWVtYmVkZGVkeG1sNCBcCisJcXQ0LWVtYmVkZGVkLWZvbnRzLXR0Zi1kZWphdnUgXAorCXF0NC1lbWJlZGRlZC1mb250cy10dGYtdmVyYSBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pY29uZW5naW5lLXN2Z2ljb24gXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtZ2lmIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LWljbyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LW1uZyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1zdmcgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtdGlmZiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1tb3VzZWRyaXZlci10c2xpYiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1zY3JpcHQtZGJ1cyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKwkke1RPVUNIfSBcCisgICAgICAgIHF0NC1lbWJlZGRlZC1kZW1vcyBcCisgICAgICAgIHF0NC1lbWJlZGRlZC1leGFtcGxlcyBcCisgICAgICAgIHF0LWRlbW8taW5pdCBcCisgICAgICAgIHF0NC1lbWJlZGRlZC1hc3Npc3RhbnQgXAorIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICIgXAorCWxpYnF0LWVtYmVkZGVkeG1scGF0dGVybnM0IFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLXBob25vbi1iYWNrZW5kLWdzdHJlYW1lciBcCisiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyYzE1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciBRdCBTREsiCisKK1FUTElCUFJFRklYID0gIiIKKworcmVxdWlyZSBwYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiBxdDQteDExLWZyZWUKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1JERVBFTkRTXyR7UE59ICs9ICIgXAorICAgICAgICBxdDQteDExLWZyZWUtZGV2IFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbGlicXRvcGVuZ2w0LWRldicsICcnLCBkKX0gXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW52ZycsICdsaWJxdG9wZW52ZzQtZGV2JywgJycsIGQpfSBcCisgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk3ODJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK0xJQ0VOU0UgPSAiTUlUIgorCisjIFF0NCBjb3VsZCBOT1QgYmUgYnVpbHQgb24gTUlQUzY0IHdpdGggNjQgYml0cyB1c2Vyc3BhY2UKK0NPTVBBVElCTEVfSE9TVF9taXBzNjQgPSAibnVsbCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0IFwKKyAgICAgICAgcXQ0JHtRVExJQlBSRUZJWH0tbWtzcGVjcyBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1tdWx0aW1lZGlhNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9M3N1cHBvcnQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1jbHVjZW5lNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Y29yZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWRidXM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZXNpZ25lcmNvbXBvbmVudHM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZXNpZ25lcjQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXVpdG9vbHM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1ndWk0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1oZWxwNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9bmV0d29yazQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNjcmlwdDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNjcmlwdHRvb2xzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9c3FsNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9c3ZnNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9dGVzdDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXdlYmtpdDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXhtbDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWRlY2xhcmF0aXZlNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9eG1scGF0dGVybnM0LWRldiBcCisgICAgICAgIGxpYnNxbGl0ZTMtZGV2IFwKKyAgICAgICAgZXhwYXQtZGV2IFwKKyAgICAgICAgIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXBob25vbjQtZGV2IFwKKyAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWQyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQuYmIKQEAgLTAsMCArMSw3IEBACitTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgUXQgRW1iZWRkZWQgU0RLIgorCitQUiA9ICJyNyIKKworUVRMSUJQUkVGSVggPSAiLWVtYmVkZGVkIgorCityZXF1aXJlIHBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjJiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbC9FeHBvcnRXaXphcmQtZGVwZW5kcy1vbi11aV93aXphcmQucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorQXBwL0V4cG9ydFdpemFyZC5jcHAgZGVwZW5kcyBvbiB3aXphcmQuaCB3aGljaCBkZXBlbmRzIG9uIHVpX3dpemFyZC4gVGhlIGxhc3Qgb25lCitzaG91bGQgYmUgYWxyZWFkeSBnZW5lcmF0ZWQgYmVmb3JlIGNvbXBpbGluZyBFeHBvcnRXaXphcmQuY3BwLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IEZvdG93YWxsLTAuOS9BcHAvRXhwb3J0V2l6YXJkLmNwcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIEZvdG93YWxsLTAuOS5vcmlnL0FwcC9FeHBvcnRXaXphcmQuY3BwCTIwMDktMTEtMzAgMTM6MjE6MzEuMDAwMDAwMDAwICswMjAwCisrKysgRm90b3dhbGwtMC45L0FwcC9FeHBvcnRXaXphcmQuY3BwCTIwMTItMDUtMTAgMTc6MTI6MDYuNzY1MjMwODMwICswMzAwCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlICJpbWFnZWxvYWRlcnF0LmgiCisgI2luY2x1ZGUgInBvc3RlcmF6b3Jjb3JlLmgiCisgI2luY2x1ZGUgIndpemFyZC5oIgorKyNpbmNsdWRlICJ1aV93aXphcmQuaCIKKyAKKyAjaW5jbHVkZSA8UURlc2t0b3BTZXJ2aWNlcz4KKyAjaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmMDI2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsXzAuOS5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkNyZWF0aXZlIHBob3RvIGRpc3BsYXkgYXBwbGljYXRpb24iCitERVNDUklQVElPTiA9ICJGb3Rvd2FsbCBpcyBhIGNyZWF0aXZlIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGxheW91dCB5b3VyIHBob3RvcyBvciBwaWN0dXJlcyBcCitpbiBhIHBlcnNvbmFsIHdheS4gWW91IGNhbiBhZGQgcGljdHVyZXMsIHRoZW4gcmVzaXplLCBtb3ZlLCBjaGFuZ2UgY29sb3JzLCB0ZXh0LCBzaGFkb3dzLCBldGMuLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5lbnJpY29yb3MuY29tL29wZW5zb3VyY2UvZm90b3dhbGwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTF9WMjttZDU9Nzk4MDgzOTdjMzM1NWYxNjNjMDEyNjE2MTI1YzllMjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jcHA7YmVnaW5saW5lPTY7ZW5kbGluZT0xMTttZDU9YjU2OWFjYzJiZjg5NzRhMzA4MmI1OGZjNTNiOWQ4ZGMiCitTRUNUSU9OID0gIngxMS9hcHBzIgorCitQUiA9ICJyNCIKKworU1JDUkVWID0gIjA2ZDVhNDE0MmM1OTk2MDRkOWE5ZmQ2NDcyN2I2OTQ1ZWI4Y2QzZGEiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZW5yaWNvcm9zL2ZvdG93YWxsLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9FeHBvcnRXaXphcmQtZGVwZW5kcy1vbi11aV93aXphcmQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgcXQ0eDExCisKK0VYVFJBX1FNQUtFVkFSU19QUkUgPSAiQ09ORklHKz1uby13ZWJjYW0iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBJTlNUQUxMX1JPT1Q9JHtEfSBpbnN0YWxsCit9CisKKyMgRW5zdXJlIHdlIGhhdmUgc29tZSBwbHVnaW5zIGZvciBzb21lIHVzZWZ1bCBpbWFnZSBmb3JtYXRzCitSUkVDT01NRU5EU18ke1BOfSArPSAicXQ0LXBsdWdpbi1pbWFnZWZvcm1hdC1naWYgcXQ0LXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIHF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtdGlmZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmI1YmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcC9uby1ob3N0LXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0RvIG5vdCBpbmNsdWRlIC91c3IvaW5jbHVkZSBob3N0IHBhdGhzCisKK1RoZXNlIHdlcmUgYWRkZWQgdXBzdHJlYW0gYXBwYXJlbnRseSBmb3IgZnJlZWJzZCBzdXBwb3J0LCBidXQgdHJpZ2dlcgorY29tcGlsZXIgd2FybmluZ3MgZHVyaW5nIHRoZSBidWlsZCBhbmQgY291bGQgYmUgZGFuZ2Vyb3VzLCBzbyByZW1vdmUKK3RoZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY3Jvc3NdCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitVcGRhdGUgcGF0Y2ggZm9yIHZlcnNpb24gMC43LjQuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gcW1tcC0wLjcuNC9DTWFrZUxpc3RzLnR4dAkyMDE0LTAxLTEwIDA5OjU5OjQ0Ljk3MTgzNzc0NiArMDgwMAorKysrIHFtbXAtMC43LjQvQ01ha2VMaXN0cy50eHQubmV3CTIwMTQtMDEtMTAgMTA6MjQ6NTEuODU1ODM3NTY2ICswODAwCitAQCAtMSw5ICsxLDUgQEAKKyBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi42LjApCisgCistI2ZyZWVic2Qgc3VwcG9ydAorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNIC91c3IvbG9jYWwvaW5jbHVkZSkKKy1TRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDTUFLRV9SRVFVSVJFRF9JTkNMVURFU30gL3Vzci9sb2NhbC9pbmNsdWRlKQorLQorICNleHRyYWN0IHZlcnNpb24gZnJvbSBxbW1wLmgKKyBGSUxFKFNUUklOR1MgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zcmMvcW1tcC9xbW1wLmgiCisgICAgICBRTU1QX1ZFUlNJT05fREFUQSBSRUdFWCAiXiNkZWZpbmVbIFx0XStRTU1QX1ZFUlNJT05fW0EtWl0rWyBcdF0rWzAtOV0rLiokIikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGFkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiUXQtYmFzZWQgTXVsdGltZWRpYSBQbGF5ZXIiCitERVNDUklQVElPTiA9ICJRbW1wIGlzIGFuIGF1ZGlvIHBsYXllciwgd3JpdHRlbiB3aXRoIHRoZSBoZWxwIG9mIHRoZSBRdCBsaWJyYXJ5LiBUaGUgdXNlciBpbnRlcmZhY2UgaXMgc2ltaWxhciB0byBXaW5hbXAgb3IgWE1NUy4iCitIT01FUEFHRSA9ICJodHRwOi8vcW1tcC55bHNvZnR3YXJlLmNvbSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKKworREVQRU5EUyA9ICJ0YWdsaWIgbGlibWFkIGxpYnZvcmJpcyBsaWJvZ2cgYWxzYS1saWIgbGlic25kZmlsZTEgbGlic2FtcGxlcmF0ZTAgY3VybCIKKworU1JDX1VSSSA9ICJodHRwOi8vcW1tcC55bHNvZnR3YXJlLmNvbS9maWxlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL25vLWhvc3QtcGF0aHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjY3ZTk2ZTg5YzYxYjc0MzJlNWExMmY1NTVkYjcwMmIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkYWVhM2YwYTBkZjdiMzQwODk1MTNjMmM1NzQxM2M4MjgxNmFiODg5MmJkZGFiZjQ5YzE4YTc5NTYyNTU0NDkiCitpbmhlcml0IGNtYWtlIHF0NHgxMQorCitRTU1QX1BMVUdJTl9PUFRJT05TID8/PSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTU1TOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTVBDOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTU9EUExVRzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX1dBVlBBQ0s6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9GRk1QRUc6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9BQUM6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9DREE6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9NSURJOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfR01FOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfT1NTNDpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0pBQ0s6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9CUzJCOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfUFJPSkVDVE06Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9FTkNBOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitleHBvcnQgRVhUUkFfT0VDTUFLRSA9ICItRFFUX1FNQUtFX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9RTUFLRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9MUkVMRUFTRV9FWEVDVVRBQkxFPSR7T0VfUU1BS0VfTFJFTEVBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTU9DX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9NT0N9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfVUlDX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9VSUN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfUkNDX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9SQ0N9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTElCUkFSWV9ESVI9JHtPRV9RTUFLRV9MSUJESVJfUVR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfSEVBREVSU19ESVI9JHtPRV9RTUFLRV9JTkNESVJfUVR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfUVRDT1JFX0lOQ0xVREVfRElSPSR7T0VfUU1BS0VfSU5DRElSX1FUfS9RdENvcmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtRTU1QX1BMVUdJTl9PUFRJT05TfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIEVuc3VyZSB3ZSBnZXQgdGhlIGNtYWtlIGNvbmZpZ3VyZSBhbmQgbm90IHFtYWtlCisJY21ha2VfZG9fY29uZmlndXJlCit9CisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5xbW1wLXBsdWdpbi0uKiAiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBxbW1wX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcW1tcCcpCisgICAgZ2QgPSBkLmV4cGFuZCgnJHtEfS8ke2xpYmRpcn0vcW1tcCcpCisgICAgcGx1Z19kaXJzID0gb3MubGlzdGRpcihnZCkKKworICAgIGZvciBwbHVnX2RpciBpbiBwbHVnX2RpcnM6CisgICAgICAgIGdfcGx1Z19kaXIgPSBvcy5wYXRoLmpvaW4ocW1tcF9saWJkaXIscGx1Z19kaXIpCisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdfcGx1Z19kaXIsICdebGliKC4qKVwuc28kJywgJ3FtbXAtcGx1Z2luLScgKyBwbHVnX2Rpci5sb3dlcigpICsgJy0lcycsICdRbW1wICcgKyBwbHVnX2RpciAgKyAnIHBsdWdpbiBmb3IgJXMnKQorfQorCitGSUxFU18ke1BOfSA9ICJcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3FtbXAgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zLyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcW1tcC9pbWFnZXMvKiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvKiBcCisgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vcW1tcC8qLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0gKz0gInRhZ2xpYiBhbHNhLWxpYiBsaWJtYWQgY3VybCBsaWJpY3VpMThuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJBIHNpbXBsZSBub3RlLXRha2luZyBhcHBsaWNhdGlvbiB3aXRoIFdpa2ktc3R5bGUgc3ludGF4IGFuZCBiZWhhdmlvdXIiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtYXBwcy5vcmcvY29udGVudC9zaG93LnBocC9RdWlja3k/Y29udGVudD04MDMyNSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdmVyc2lvbi5oO2VuZGxpbmU9MTk7bWQ1PTg3OGJkYWZmNDM4ZGFiODYyOTgzMDFmZDFhMjEwZTE0IgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3F0LWFwcHMub3JnL0NPTlRFTlQvY29udGVudC1maWxlcy84MDMyNS1xdWlja3ktMC40LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjgyNGQ5ZTQ3N2VlOWM0OTk0ZjczYTNjYjIxNTE2MWQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljNjYzNzZlMDAzNWQ0NDU0NzYxMmJmNjI5ODkwNzY5YTYxNzhjM2U3ZWFmYmNmOTVmMWM2MjA3YWMwZjM1MmEiCisKK2luaGVyaXQgcXQ0eDExCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vJHtCUE59ICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdCBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWYwMjczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0L3F0ZGVtby1pbml0CkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworaWYgWyAteCAvdXNyL2Jpbi9xdGRlbW8gXTsgdGhlbgorCVFUREVNTz0icXRkZW1vIgorZWxzZQorCVFUREVNTz0icXRkZW1vRSAtcXdzIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nIHF0ZGVtbyIKKwlpZiBbIC1mIC9ldGMvcHJvZmlsZS5kL3RzbGliLnNoIF07IHRoZW4KKwkJLiAvZXRjL3Byb2ZpbGUuZC90c2xpYi5zaAorCWZpCisJaWYgWyAtZSAiJFRTTElCX1RTREVWSUNFIiBdOyB0aGVuCisJCWlmIFsgISAtZiAvZXRjL3BvaW50ZXJjYWwgXTsgdGhlbgorCQkJL3Vzci9iaW4vdHNfY2FsaWJyYXRlCisJCWZpCisJCWlmIFsgIiRRVERFTU8iID0gInF0ZGVtbyIgXTsgdGhlbgorCQkJWG9yZyAmCisJCQlleHBvcnQgRElTUExBWT06MAorCQkJJFFUREVNTyAmCisJCWVsc2UKKwkJCVFXU19NT1VTRV9QUk9UTz10c2xpYjokVFNMSUJfVFNERVZJQ0UgJFFUREVNTyAmCisJCWZpCisJZWxzZQorCQlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJCVhvcmcgJgorCQkJZXhwb3J0IERJU1BMQVk9OjAKKwkJZmkKKwkJJFFUREVNTyAmCisJZmkKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nIHF0ZGVtbyIKKwlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJa2lsbGFsbCBYb3JnCisJCWtpbGxhbGwgcXRkZW1vCisJZWxzZQorCQlraWxsYWxsIHF0ZGVtb0UKKwlmaQorCTs7CisgIHJlc3RhcnQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgKikKKwllY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExYjBiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJJbml0IHNjcmlwdCBmb3IgcXRkZW1vIgorTElDRU5TRSA9ICJNSVQiCitTUkNfVVJJID0gImZpbGU6Ly9xdGRlbW8taW5pdCIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3F0ZGVtby1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9xdGRlbW8KK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZCBhbGxhcmNoCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJxdGRlbW8iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDE5IDAgMSA2IC4iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdDQtZ3JhcGhpY3Mtc3lzdGVtL3F0NC1ncmFwaGljcy1zeXN0ZW1fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2YzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlNldHMgZGVmYXVsdCBRdDQgR3JhcGhpY3MgU3lzdGVtIHRvICR7UVRfR1JBUEhJQ1NfU1lTVEVNfSIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInIxIgorCitRVF9HUkFQSElDU19TWVNURU0gPz0gInJhc3RlciIKKworZGVmIF9nZXRfZXh0cmFfcmRlcGVuZHMoZCk6CisgICAgZ3MgPSBkLmdldFZhcignUVRfR1JBUEhJQ1NfU1lTVEVNJywgVHJ1ZSkKKyAgICBpZiBncyA9PSAib3BlbmdsIjoKKyAgICAgICAgcmV0dXJuICJxdDQtcGx1Z2luLWdyYXBoaWNzc3lzdGVtcy1nbGdyYXBoaWNzc3lzdGVtIgorCisgICAgcmV0dXJuICIiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KKwljZmdfZmlsZT0ke0R9LyR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3F0LWdyYXBoaWNzc3lzdGVtCisJZWNobyAiZXhwb3J0IFFUX0dSQVBISUNTU1lTVEVNPSR7UVRfR1JBUEhJQ1NfU1lTVEVNfSIgPiAkY2ZnX2ZpbGUKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtAX2dldF9leHRyYV9yZGVwZW5kcyhkKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcwMDhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYwpAQCAtMCwwICsxLDEyNSBAQAorU1VNTUFSWSA9ICJTREsgdG9vbHMgZm9yIFF0IHZlcnNpb24gNC54IgorREVQRU5EUyA9ICJuYXRpdmVzZGstemxpYiBuYXRpdmVzZGstZGJ1cyBxdDQtbmF0aXZlICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbmF0aXZlc2RrLWxpYngxMScsICcnLCBkKX0iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9xdDQtJHtQVn06IgorCitpbmhlcml0IG5hdGl2ZXNkayBxbWFrZTIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQucXQtcHJvamVjdC5vcmcvb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyR7UFZ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1jb25maWd1cmUtc2V0LUxGTEFHUy10by1waWNrLXVwLXpsaWItZnJvbS1zdGFnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWRidXMtUmVtb3ZlLWNvbnN0LXVzYWdlLXRoYXQtY2F1c2VzLWNvbXBpbGUtZmFpbHVyZS0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2crKy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2xpbnV4LmNvbmYiCisKK1MgPSAiJHtXT1JLRElSfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuR1BMMzttZDU9NmUxNjk0ZWUzMzhkYjQxMDQxNzUxNzg4NDkxOGQ0ZDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTF9FWENFUFRJT04udHh0O21kNT0wMTQ1YzRkMWI2Zjk2YTY2MWMyYzEzOWRmYjI2OGZiNiIKKworcmVxdWlyZSBxdDRfYXJjaC5pbmMKKworIyBGSVhNRTogbWFrZSBpdCB3b3JrIHdpdGggIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnIC0tY2ZsYWdzIGRidXMtMSIKK0VYVFJBX09FQ09ORiA9ICItcHJlZml4ICR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgLXF0LWxpYmpwZWcgLXN5c3RlbS16bGliIFwKKyAgICAgICAgICAgICAgICAtbm8tbGlianBlZyAtbm8tbGlicG5nIC1uby1saWJtbmcgLW5vLWxpYnRpZmYgXAorICAgICAgICAgICAgICAgIC1uby1hY2Nlc3NpYmlsaXR5IFwKKyAgICAgICAgICAgICAgICAtbm8tY3VwcyBcCisgICAgICAgICAgICAgICAgLW5vLWV4Y2VwdGlvbnMgIFwKKyAgICAgICAgICAgICAgICAtbm8tbmFzLXNvdW5kIFwKKyAgICAgICAgICAgICAgICAtbm8tbmlzIC1uby1vcGVuc3NsIFwKKyAgICAgICAgICAgICAgICAtdmVyYm9zZSAtcmVsZWFzZSAtZmFzdCAtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAtcGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisgICAgICAgICAgICAgICAgLXhwbGF0Zm9ybSAke1RBUkdFVF9PU30tb2UtZysrIFwKKyAgICAgICAgICAgICAgICAtYXJjaCAke1FUX0FSQ0h9IFwKKyAgICAgICAgICAgICAgICAtZW1iZWRkZWQgLW5vLWZyZWV0eXBlIC1uby1nbGliIC1uby1pY29udiBcCisgICAgICAgICAgICAgICAgLXF0M3N1cHBvcnQgXAorICAgICAgICAgICAgICAgIC1JJHtTVEFHSU5HX0RJUl9IT1NUfSR7U0RLUEFUSE5BVElWRX0vdXNyL2luY2x1ZGUvZGJ1cy0xLjAgXAorICAgICAgICAgICAgICAgIC1JJHtTVEFHSU5HX0RJUl9IT1NUfSR7U0RLUEFUSE5BVElWRX0vdXNyL2xpYi9kYnVzLTEuMC9pbmNsdWRlIgorCisjIHlhbmsgZGVmYXVsdCAtZSwgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZm9sbG93aW5nIGVycm9yOgorIyBtb2NfcWJ1ZmZlci5jcHA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0VYVFJBX09FTUFLRSA9ICIgIgorCitkb19jb25maWd1cmUoKSB7CisgICAgIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKyAgICB1bnNldCBMRAorCisgICAgaWYgWyAhIC1lIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyBdOyB0aGVuCisgICAgICAgIGxuIC1zZiBsaW51eC1nKysgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrCisgICAgZmkKKworICAgIGNwIC4uL2crKy5jb25mIG1rc3BlY3MvY29tbW9uCisgICAgY3AgLi4vbGludXguY29uZiBta3NwZWNzL2NvbW1vbgorCisgICAgaWYgWyAtZiBta3NwZWNzL2NvbW1vbi9nKystYmFzZS5jb25mIF0gOyB0aGVuCisgICAgICAgICMgZG9uJ3QgdXNlIGhvc3QgZysrIGV2ZW4gZHVyaW5nIGNvbmZpZ3VyZSAoNC44LjArKQorICAgICAgICBzZWQgLWkgLWUgInMjPSBnKysjPSAke0NYWH0jIiBta3NwZWNzL2NvbW1vbi9nKystYmFzZS5jb25mCisgICAgICAgIHNlZCAtaSAtZSAicyM9IGdjYyM9ICR7Q0N9IyIgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZgorICAgIGZpCisKKyAgICAjIFVzZSBxbWFrZSBmcm9tIHF0NC1uYXRpdmUgZm9yIGJ1aWxkaW5nCisgICAgaWYgWyAhIC1lIGJpbi9xbWFrZSBdOyB0aGVuCisgICAgICAgIGxuIC1zZiAke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIGJpbi9xbWFrZQorICAgIGZpCisgICAgc2V0X2FyY2gKKyAgICAoZWNobyBvOyBlY2hvIHllcykgfCBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IiAuL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0gfHwgZGllICJDb25maWd1cmluZyBxdCBmYWlsZWQuIEVYVFJBX09FQ09ORiB3YXMgJHtFWFRSQV9PRUNPTkZ9IgorfQorCitUT0JVSUxEID0gIlwKKyAgc3JjL3Rvb2xzL2Jvb3RzdHJhcCBcCisgIHNyYy90b29scy9tb2MgXAorICBzcmMvY29yZWxpYiBcCisgIHNyYy9zcWwgXAorICBzcmMvZGJ1cyBcCisgIHNyYy9xdDNzdXBwb3J0IFwKKyAgc3JjL3htbCBcCisgIHNyYy90b29scy91aWMgXAorICBzcmMvdG9vbHMvcmNjIFwKKyAgc3JjL25ldHdvcmsgXAorICBzcmMvZ3VpIFwKKyAgc3JjL3Rvb2xzL3VpYzMgXAorICB0b29scy9saW5ndWlzdC9scmVsZWFzZSBcCisgIHRvb2xzL2xpbmd1aXN0L2x1cGRhdGUgXAorICB0b29scy9xZGJ1cyBcCisiCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZm9yIGkgaW4gJHtUT0JVSUxEfTsgZG8KKyAgICAgICAgY2QgJHtTfS8kaSAmJiBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgZG9uZQorCisgICAgIyBCdWlsZCBuYXRpdmVzZGsgcW1ha2UKKyAgICBleHBvcnQgUU1BS0VTUEVDPSIke1N9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKKyAgICBjZCAke1N9L3FtYWtlCisgICAgJHtPRV9RTUFLRV9RTUFLRX0KKyAgICBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgY2QgJHtTfQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBiaW4vcW1ha2UyICR7RH0ke2JpbmRpcn0vcW1ha2UyCisgICAgZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHA7IGRvCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSBiaW4vJHtpfSAke0R9JHtiaW5kaXJ9LyR7aX00CisgICAgZG9uZQorCisgICAgKGNkICR7RH0ke2JpbmRpcn07IFwKKyAgICBsbiAtcyBxbWFrZTIgcW1ha2U7IFwKKyAgICBmb3IgaSBpbiBtb2MgdWljIHVpYzMgcmNjIGxyZWxlYXNlIGx1cGRhdGUgcWRidXNjcHAyeG1sIHFkYnVzeG1sMmNwcDsgZG8gXAorICAgICAgICBsbiAtcyAke2l9NCAke2l9OyBcCisgICAgZG9uZSkKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBjYXQgPiR7RH0ke3N5c2NvbmZkaXJ9L3F0LmNvbmYgPDxFT0YKK1tQYXRoc10KK1ByZWZpeCA9ICR7cHJlZml4fQorRU9GCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiYTA3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29sc180LjguNy5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgbmF0aXZlc2RrLXF0NC10b29scy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjU3ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcuaW5jCkBAIC0wLDAgKzEsNjggQEAKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwzO21kNT02ZTE2OTRlZTMzOGRiNDEwNDE3NTE3ODg0OTE4ZDRkMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMX0VYQ0VQVElPTi50eHQ7bWQ1PTAxNDVjNGQxYjZmOTZhNjYxYzJjMTM5ZGZiMjY4ZmI2IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9xdDQtJHtQVn06IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvJHtQVn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1jb25maWd1cmUtSGFjay10by1ub3QtdXNlLXRoZS1wZ19jb25maWctb2YtdGhlLWhvc3QtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtZnJlZXR5cGUtaG9zdC1pbmNsdWRlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktRml4ZXMtZm9yLWdjYy00LjcuMC1wYXJ0aWN1bGFybHktb24tcWVtdXg4Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LXRvb2xzLnByby1kaXNhYmxlLXFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkX2NoZWNrX2Zvcl9hYXJjaDY0XzMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2crKy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2xpbnV4LmNvbmYgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOTkwZWU2NmJmN2FiMGM3ODU1ODk3NzZmMzViYTZhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMjg4MjI5NTA5N2U0N2ZlMDg5ZjhhYzc0MWE5NWZlZjQ3ZTBhNzNhM2YzY2RmMjFiNTY5OTA2MzhmNjI2ZWEwIgorCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworIyBkaXNhYmxlIHdlYmtpdCBmb3IgbWlwczY0IG4zMiB0ZW1wb3JhcmlseSB0aGF0IGZhaWxzIHRvIGNvbXBpbGUsCisjIHF0IHVwc3RyZWFtIGRlZmVjdDoKKyMgaHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0zOTIyNAorUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9taXBzNjRuMzIgPSAiIC1uby13ZWJraXQiCisKKyMgZGlzYWJsZSB3ZWJraXQgZm9yIGFhcmNoNjQgdGVtcG9yYXJpbHkgdGhhdCBmYWlscyB0byBjb21waWxlCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1uby13ZWJraXQiCisKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29sc19hcHBlbmQgICAgID0gIiAke2JpbmRpcn0vcW1sICR7YmluZGlyfS9xbWxwbHVnaW5kdW1wIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzLWRiZ19hcHBlbmQgPSAiICR7YmluZGlyfS8uZGVidWcvcW1sICR7YmluZGlyfS8uZGVidWcvcW1scGx1Z2luZHVtcCIKKworUEFDS0FHRVNfYXBwZW5kID0gIiAke1FUX0JBU0VfTkFNRX0tdGVzdHMtZGJnICR7UVRfQkFTRV9OQU1FfS10ZXN0cyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10ZXN0cy1kYmcgICAgICAgID0gIiR7cHJlZml4fS90ZXN0cy9xdDQvKi8uZGVidWciCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdGVzdHMgICAgICAgICAgICA9ICIke3ByZWZpeH0vdGVzdHMvcXQ0LyoiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAnczpxdFByZXBhcmVUb29sKExSRUxFQVNFLCBscmVsZWFzZSk6TFJFTEVBU0UgPSAke09FX1FNQUtFX0xSRUxFQVNFfTpnJyBcCisgICAgICAgICR7U30vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KKworICAgIHNlZCAtaSBcCisgICAgLWUgL1FNQUtFX01PQ1wgL2QgXAorICAgIC1lIC9RTUFLRV9VSUNcIC9kIFwKKyAgICAtZSAvUU1BS0VfVUlDM1wgL2QgXAorICAgIC1lIC9RTUFLRV9SQ0NcIC9kIFwKKyAgICAke1N9L2NvbmZpZ3VyZQorCisgICAgIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKyAgICB1bnNldCBMRAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMGEwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDU1MDk3ZDI3ZThiNzQ2YjNkNWZmNDM3OTM5Y2FmMWZhNDNjMGQ2MmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAxNzoyMjozMCArMDIwMAorU3ViamVjdDogW1BBVENIIDAxLzIxXSBxbGlicmFyeWluZm86IGFsbG93IHRvIHNldCBxdC5jb25mIGZyb20gdGhlIG91dHNpZGUKKyB1c2luZyB0aGUgZW52aXJvbm1lbnQKKworQWxsb3cgdG8gc2V0IGEgcXQuY29uZiBmcm9tIHRoZSBvdXRzaWRlIHVzaW5nIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBhbGxvd3MKK3RvIGluamVjdCBuZXcgcHJlZml4ZXMgYW5kIG90aGVyIHBhdGhzIGludG8gcW1ha2UuIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcKK3RoZSBzYW1lIHFtYWtlIGJpbmFyeSB0byBidWlsZCBxdC94MTEgYW5kIHF0L2VtYmVkZGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcCB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcCBiL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCitpbmRleCAxODBkYzM5Li40YWRhZDM1IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAKKysrKyBiL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCitAQCAtNTQsNiArNTQsNyBAQAorIFFUX0JFR0lOX05BTUVTUEFDRQorIGV4dGVybiBRU3RyaW5nIHFtYWtlX2xpYnJhcnlJbmZvRmlsZSgpOworIFFUX0VORF9OQU1FU1BBQ0UKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgInFjb3JlYXBwbGljYXRpb24uaCIKKyAjZW5kaWYKK0BAIC0xMTIsNiArMTEzLDEwIEBAIFFTZXR0aW5ncyAqUUxpYnJhcnlJbmZvUHJpdmF0ZTo6ZmluZENvbmZpZ3VyYXRpb24oKQorICNpZmRlZiBCT09UU1RSQVBQSU5HCisgICAgIGlmKCFRRmlsZTo6ZXhpc3RzKHF0Y29uZmlnKSkKKyAgICAgICAgIHF0Y29uZmlnID0gcW1ha2VfbGlicmFyeUluZm9GaWxlKCk7CisrICAgIGlmICghUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykpIHsKKysgICAgICAgIFFCeXRlQXJyYXkgY29uZmlnID0gZ2V0ZW52KCJRVF9DT05GX1BBVEgiKTsKKysgICAgICAgIHF0Y29uZmlnID0gUUZpbGU6OmRlY29kZU5hbWUoY29uZmlnKTsKKysgICAgfQorICNlbHNlCisgICAgIGlmICghUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykgJiYgUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSkgeworICNpZmRlZiBRX09TX01BQworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZmM4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDVlNmIxMDUxYWZhMzA5OWEwMmE3NThiMDU5NjIzNjc1OWQ3MDY3MGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MTg6MDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8yMV0gcWtiZHR0eV9xd3M6IGZpeCBidWlsZCB3aXRoIG9sZCBrZXJuZWwgaGVhZGVycworCitUaGlzIGlzc3VlIGlzIHRoYXQgd2l0aCBDKysgY29tcGlsZXIgcHJvY2VzcyBhbiBvbGQgdmVyc2lvbiBvZiBrZXJuZWwKK2hlYWRlciBmaWxlLCBjb2luY2lkZW50bHkgdGhhdCBmaWxlIGhhcyBhIHZhcmlhYmxlIG5hbWVkICduZXcnOgorCisqICdlbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAnIGluY2x1ZGUgJ2xpbnV4L3Z0LmgnOworKiAnL3Vzci9pbmNsdWRlL2xpbnV4L3Z0LmgnIGhhcyBiZWxvdyBjb2RlIG9uIFNMRUQtMTEueDoKKyAgICArIHVuc2lnbmVkIGludCBuZXc7CisKK09uIG1vc3RseSBob3N0cyBpdCBoYXMgYmVlbiBjaGFuZ2VkIHRvOiBuZXcgLT4gbmV3ZXYuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwIHwgMTIgKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKK2luZGV4IGE0NjgxMWIuLjc2MjEzOGYgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKK0BAIC01NCw4ICs1NCwyMCBAQAorIAorICNpZiBkZWZpbmVkIFFfT1NfTElOVVgKKyAjICBpbmNsdWRlIDxsaW51eC9rZC5oPgorKworKy8qIFdvcmthcm91bmQga2VybmVsIGhlYWRlcnMgdXNpbmcgIm5ldyIgYXMgdmFyaWFibGUgbmFtZS4gVGhlIHByb2JsZW0KKysgaXMgc3BlY2lmaWMgdG8gU0xFRC0xMSwgb3RoZXIgZGlzdHJvcyB1c2UgIm5ld2V2IiByYXRoZXIgdGhhbiAibmV3IiAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworKyN3YXJuaW5nICJ3b3JrYXJvdW5kIGtlcm5lbCBoZWFkZXJzIHVzaW5nIG5ldyBhcyB2YXJpYWJsZSBuYW1lIG9uIFNMRUQgMTEiCisrI2RlZmluZSBuZXcgbmV3ZXYKKysjZW5kaWYKKysKKyAjICBpbmNsdWRlIDxsaW51eC92dC5oPiAvL1RPRE86IG1vdmUgdnQgaGFuZGxpbmcgc29tZXdoZXJlIGVsc2UgKFFMaW51eEZiU2NyZWVuPykKKyAKKysjaWZkZWYgX19jcGx1c3BsdXMKKysjdW5kZWYgbmV3CisrI2VuZGlmCisrCisgIyAgaW5jbHVkZSAicXNjcmVlbl9xd3MuaCIKKyAjICBpbmNsdWRlICJxd2luZG93c3lzdGVtX3F3cy5oIgorICMgIGluY2x1ZGUgInFhcHBsaWNhdGlvbi5oIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhZWE1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGI2ODA1ZTg4M2MwNzhmNzY0N2Q5MjM0YWNhNGUzNTEzZWJkMWM5YmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDEgTWF5IDIwMTIgMDc6NDg6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8yMV0gd2Via2l0Mjogc2V0IE9VVFBVVF9ESVIgdmFsdWUgaWYgZW1wdHkKKworV2l0aG91dCB0aGlzIGRvX2NvbmZpZ3VyZSB3YXMgdHJ5aW5nIHRvIGNyZWF0ZSAvaW5jbHVkZS9XZWJDb3JlL2xpYmR1bW15LnBybCBpbiByb290IG9mIGJ1aWxkIGhvc3QgZmlsZXN5c3RlbQorbm93IGl0J3MgaW4gcHJvcGVyIHBsYWNlICR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguMS9zcmMvM3JkcGFydHkvd2Via2l0L2luY2x1ZGUvV2ViQ29yZS9saWJkdW1teS5wcmwKKworRmlyc3QgcmVwb3J0ZWQgaGVyZToKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9vcGVuZW1iZWRkZWQtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tc2cyNDQzNi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCitpbmRleCAwMDZhODhjLi41ZTE3MTkzIDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCitAQCAtMyw2ICszLDggQEAgVEFSR0VUID0gZHVtbXkKKyAKKyBDT05GSUcgLT0gZGVidWdfYW5kX3JlbGVhc2UKKyAKKytpc0VtcHR5KE9VVFBVVF9ESVIpOiBPVVRQVVRfRElSID0gLi4vLi4KKysKKyBDT05GSUcoc3RhbmRhbG9uZV9wYWNrYWdlKSB7CisgICAgIGlzRW1wdHkoV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIpOldFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCRQV0QvZ2VuZXJhdGVkCisgICAgIGlzRW1wdHkoV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSKTpXQ19HRU5FUkFURURfU09VUkNFU19ESVIgPSAkJFBXRC8uLi9XZWJDb3JlL2dlbmVyYXRlZAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViOGE1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGFmNjk5YzZlOGNmOWZiMjhkNmY4Yjc4OWJmMzNkNTNiNDdlZGFlYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIEtyZWxpbiA8aGFja2VyQGtsZXZlci5uZXQ+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjI0OjIwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMjFdIGNvbmZpZ3VyZTogcW1ha2UgaXMgYWxyZWFkeSBidWlsdCBpbiBxdDQtdG9vbHMtbmF0aXZlLAorIHNvIGRpc2FibGUgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGUzZDQ2NGIuLmNjMDRiMjcgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ4OTksNyArNDg5OSw3IEBAIHNldEJvb3RzdHJhcFZhcmlhYmxlKCkKKyB9CisgCisgIyBidWlsZCBxbWFrZQorLWlmIHRydWU7IHRoZW4gIyMjWyAnIScgLWYgIiRvdXRwYXRoL2Jpbi9xbWFrZSIgXTsKKytpZiBmYWxzZTsgdGhlbiAjIyNbICchJyAtZiAiJG91dHBhdGgvYmluL3FtYWtlIiBdOworICAgICBlY2hvICJDcmVhdGluZyBxbWFrZS4gUGxlYXNlIHdhaXQuLi4iCisgCisgICAgIE9MRF9RQ09ORklHX0g9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThmMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNS1jb25maWd1cmUtc2V0LUxGTEFHUy10by1waWNrLXVwLXpsaWItZnJvbS1zdGFnaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYWM5MzIzN2JjOTBlYTc3NzNjMGVmNTI3NTk2MmJhYmEwMWQ0YTljNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KZXJlbXk9MjBMYWluPUMzPUE5Pz0gPGplcmVteS5sYWluZUBtNHgub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyNzo0NCArMDIwMAorU3ViamVjdDogW1BBVENIIDA1LzIxXSBjb25maWd1cmU6IHNldCBMRkxBR1MgdG8gcGljayB1cCB6bGliIGZyb20gc3RhZ2luZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBjYzA0YjI3Li41YTdjNGVlIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02OTAsNyArNjkwLDcgQEAgZmkKKyAjIGluaXRhbGl6ZSB2YXJpYWJsZXMKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorLVNZU1RFTV9WQVJJQUJMRVM9IlJBTkxJQiBTVFJJUCBPQkpEVU1QIExEIENDIENYWCBDRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyIKKytTWVNURU1fVkFSSUFCTEVTPSJSQU5MSUIgU1RSSVAgT0JKRFVNUCBMRCBDQyBDWFggQ0ZMQUdTIENYWEZMQUdTIExERkxBR1MgTEZMQUdTIgorIGZvciB2YXJuYW1lIGluICRTWVNURU1fVkFSSUFCTEVTOyBkbworICAgICBxbWFrZXZhcm5hbWU9IiR7dmFybmFtZX0iCisgICAgICMgdXNlIExERkxBR1MgZm9yIGF1dG9jb25mIGNvbXBhdCwgYnV0IHFtYWtlIHVzZXMgUU1BS0VfTEZMQUdTCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGViZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNi1jb25maWd1cmUtVXNlLU9FX1FNQUtFXy12YWx1ZXMtdG8tc3BlY2lmeS1RdC11dGlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMGJjMGRiODM4MTJiNTkwMGRjNGU2ZmZhOTZiZGVhYjQ2YjZhZGNhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyOTowOSArMDIwMAorU3ViamVjdDogW1BBVENIIDA2LzIxXSBjb25maWd1cmU6IFVzZSBPRV9RTUFLRV8qIHZhbHVlcyB0byBzcGVjaWZ5IFF0IHV0aWxpdHkKKyBwYXRocworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDVhN2M0ZWUuLmRiNGQwNDQgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTg2ODMsMTEgKzg2ODMsMTEgQEAgUU1BS0VfQUJTT0xVVEVfU09VUkNFX1JPT1QgPSBcJFwkUVRfU09VUkNFX1RSRUUKKyBRTUFLRV9NT0NfU1JDICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvc3JjL21vYworIAorICNsb2NhbCBwYXRocyB0aGF0IGNhbm5vdCBiZSBxdWVyaWVkIGZyb20gdGhlIFFUX0lOU1RBTExfKiBwcm9wZXJ0aWVzIHdoaWxlIGJ1aWxkaW5nIFFURElSCistUU1BS0VfTU9DICAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi9tb2MKKy1RTUFLRV9VSUMgICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3VpYworLVFNQUtFX1VJQzMgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vdWljMworLVFNQUtFX1JDQyAgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vcmNjCistUU1BS0VfUURCVVNYTUwyQ1BQID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3FkYnVzeG1sMmNwcAorK1FNQUtFX01PQyAgICAgICAgPSBcJHtPRV9RTUFLRV9NT0N9CisrUU1BS0VfVUlDICAgICAgICA9IFwke09FX1FNQUtFX1VJQ30KKytRTUFLRV9VSUMzICAgICAgID0gXCR7T0VfUU1BS0VfVUlDM30KKytRTUFLRV9SQ0MgICAgICAgID0gXCR7T0VfUU1BS0VfUkNDfQorK1FNQUtFX1FEQlVTWE1MMkNQUCA9IFwke09FX1FNQUtFX1FEQlVTWE1MMkNQUH0KKyBRTUFLRV9JTkNESVJfUVQgID0gXCRcJFFUX0JVSUxEX1RSRUUvaW5jbHVkZQorIFFNQUtFX0xJQkRJUl9RVCAgPSBcJFwkUVRfQlVJTERfVFJFRS9saWIKKyAKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjNjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA3LWRidXMtUmVtb3ZlLWNvbnN0LXVzYWdlLXRoYXQtY2F1c2VzLWNvbXBpbGUtZmFpbHVyZS0ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAyMDExYmI4MDI5NDgwYWYxZDEyNjZmMjU4ZTVhNWY1Y2VmNzM5MmQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF2ZWwgSGVpbWxpY2ggPHRyb3Bpa2hham1hQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzE6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8yMV0gZGJ1czogUmVtb3ZlICJjb25zdCIgdXNhZ2UgdGhhdCBjYXVzZXMgY29tcGlsZSBmYWlsdXJlCisgYnVpbGRpbmcgbmF0aXZlc2RrLXF0NC10b29scworCitQYXRjaCBoYXMgYXBwYXJlbnRseSBiZWVuIHJlamVjdGVkIHVwc3RyZWFtLCBub3QgYmVjYXVzZSBpdCBpcyBpbnZhbGlkCitidXQgYmVjYXVzZSB0aGUgc3VibWl0dGVyIGRpZCBub3Qgc3VibWl0IGEgbWVyZ2UgcmVxdWVzdCBmb3IgaXQsIHNvIHRoZQordmFsaWRpdHkgb2YgdGhlIHBhdGNoIHVwc3RyZWFtIGlzIHVuY2VydGFpbi4gRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWU6CitodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTE3OTYyCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtwb3NzaWJsZSByZXRyeV0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAgYi9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwCitpbmRleCAwZjBiNjQ3Li5hYTRjYmFiIDEwMDY0NAorLS0tIGEvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAorKysrIGIvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAorQEAgLTczLDcgKzczLDcgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCisgc3RhdGljIGJvb2wgaXNEZWJ1Z2dpbmc7CisgI2RlZmluZSBxREJ1c0RlYnVnICAgICAgICAgICAgICBpZiAoITo6aXNEZWJ1Z2dpbmcpOyBlbHNlIHFEZWJ1ZworIAorLVFfR0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoY29uc3QgUVN0cmluZywgb3JnRnJlZWRlc2t0b3BEQnVzU3RyaW5nLCAoUUxhdGluMVN0cmluZyhEQlVTX1NFUlZJQ0VfREJVUykpKQorK1FfR0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoUVN0cmluZywgb3JnRnJlZWRlc2t0b3BEQnVzU3RyaW5nLCAoUUxhdGluMVN0cmluZyhEQlVTX1NFUlZJQ0VfREJVUykpKQorIAorIHN0YXRpYyBpbmxpbmUgUVN0cmluZyBkYnVzU2VydmljZVN0cmluZygpCisgeyByZXR1cm4gKm9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZygpOyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA3ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNjRjZTVkMGU3YzE5NDM2YjkyOGEyYTBkOWQxOTJmNTZiZTNjOWJiMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozMjo0MSArMDIwMAorU3ViamVjdDogW1BBVENIIDA4LzIxXSBxbWFrZS5wcm86IEFsbG93IGJ1aWxkaW5nIGEgc2VwYXJhdGUgcW1ha2UgZm9yIHRoZQorIHRhcmdldAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBxbWFrZS9xbWFrZS5wcm8gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3FtYWtlL3FtYWtlLnBybyBiL3FtYWtlL3FtYWtlLnBybworaW5kZXggMzhlMGZjZS4uNTNiMWZmYiAxMDA2NDQKKy0tLSBhL3FtYWtlL3FtYWtlLnBybworKysrIGIvcW1ha2UvcW1ha2UucHJvCitAQCAtNyw2ICs3LDcgQEAgQ09ORklHICs9IGNvbnNvbGUgYm9vdHN0cmFwCisgQ09ORklHIC09IHF0IHNoYXJlZCBhcHBfYnVuZGxlIHVpYworIERFRklORVMgKz0gUVRfQlVJTERfUU1BS0UgUVRfQk9PVFNUUkFQUEVECisgREVTVERJUiA9IC4uL2Jpbi8KKytUQVJHRVQgPSBxbWFrZTIKKyAKKyBPQkpFQ1RTX0RJUiA9IC4KKyBNT0NfRElSID0gLgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjhjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGUxMjlkYzBkNmNkZTY5ZGQxNWQxODM2YzQxMTFlMDUyNmZjMjkxNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzM6NDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8yMV0gcW1ha2U6IGZpeCBzb3VyY2UgZmlsZSByZWZlcmVuY2VzIGluIHFtYWtlLnByaQorCitGaXggZHVwbGljYXRlIGVudHJpZXMgaW4gU09VUkNFUyBhbmQgSEVBREVSUywgYW5kIGZpeCB0aGUgc291cmNlIGZpbGUKK2xpc3QgZm9yIHRoZSBzcGxpdCBvZiBxbG9jYWxlLmNwcC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgcW1ha2UvcW1ha2UucHJpIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9xbWFrZS9xbWFrZS5wcmkgYi9xbWFrZS9xbWFrZS5wcmkKK2luZGV4IDMxZjY3ZjQuLjkwODE2NjkgMTAwNjQ0CistLS0gYS9xbWFrZS9xbWFrZS5wcmkKKysrKyBiL3FtYWtlL3FtYWtlLnByaQorQEAgLTIyLDggKzIyLDcgQEAgU09VUkNFUyArPSBwcm9qZWN0LmNwcCBwcm9wZXJ0eS5jcHAgbWFpbi5jcHAgZ2VuZXJhdG9ycy9tYWtlZmlsZS5jcHAgXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9zeW1iaWFuL2luaXRwcm9qZWN0ZGVwbG95X3N5bWJpYW4uY3BwIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5jcHAgXAorICAgICAgICAgICAgd2luZG93cy9yZWdpc3RyeS5jcHAgXAorLSAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdC5jcHAgXAorLSAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmNwcAorKyAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdC5jcHAKKyAKKyBIRUFERVJTICs9IHByb2plY3QuaCBwcm9wZXJ0eS5oIGdlbmVyYXRvcnMvbWFrZWZpbGUuaCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL3VuaXgvdW5peG1ha2UuaCBtZXRhLmggb3B0aW9uLmggY2FjaGVrZXlzLmggXAorQEAgLTQwLDggKzM5LDcgQEAgSEVBREVSUyArPSBwcm9qZWN0LmggcHJvcGVydHkuaCBnZW5lcmF0b3JzL21ha2VmaWxlLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9zeW1iaWFuL2luaXRwcm9qZWN0ZGVwbG95X3N5bWJpYW4uaCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuaCBcCisgICAgICAgICAgICB3aW5kb3dzL3JlZ2lzdHJ5X3AuaCBcCistICAgICAgICAgICBzeW1iaWFuL2Vwb2Nyb290X3AuaCBcCistICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuaAorKyAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdF9wLmgKKyAKKyBjb250YWlucyhRVF9FRElUSU9OLCBPcGVuU291cmNlKSB7CisgICAgREVGSU5FUyArPSBRTUFLRV9PUEVOU09VUkNFX0VESVRJT04KK0BAIC03Miw2ICs3MCw4IEBAIGJvb3RzdHJhcCB7ICNRdCBjb2RlCisgICAgICAgICBxbGlzdC5jcHAgXAorICAgICAgICAgcWxpbmtlZGxpc3QuY3BwIFwKKyAgICAgICAgIHFsb2NhbGUuY3BwIFwKKysgICAgICAgIHFsb2NhbGVfdG9vbHMuY3BwIFwKKysgICAgICAgIHFsb2NhbGVfdW5peC5jcHAgXAorICAgICAgICAgcW1hbGxvYy5jcHAgXAorICAgICAgICAgcW1hcC5jcHAgXAorICAgICAgICAgcW1ldGF0eXBlLmNwcCBcCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZhMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMC1jb25maWd1cmUtSGFjay10by1ub3QtdXNlLXRoZS1wZ19jb25maWctb2YtdGhlLWhvc3QtLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gNDg4ODc5MWQxODk5Zjc4MWFmNzEwZGQ4ODEzODg3ZGVhNTJmZGE1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbGdlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjM2OjM4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMjFdIGNvbmZpZ3VyZTogSGFjayB0byBub3QgdXNlIHRoZSBwZ19jb25maWcgb2YgdGhlIGhvc3QKKyBzeXN0ZW0gd2hpY2ggd2lsbCBhZGQgL3Vzci9pbmNsdWRlCisKK3BnX2NvbmZpZyBpcyBhIG5hdGl2ZSBiaW5hcnkgc28gdXNpbmcgdGhhdCB3aGVuIGNyb3NzIGNvbXBpbGluZword2lsbCBhbHdheXMgZmFpbC4gIFRoZSBjb21tZW50ZWQgb3V0IGZpeCB3b3VsZCBkbywgYnV0IGZvciBPRQorb3VyIC1wbGF0Zm9ybSBhbmQgLXhwbGF0Zm9ybSBpcyB0aGUgc2FtZSBzbyB3ZSBhcmUgYWN0dWFsbHkgbm90CityZWFsbHkgY3Jvc3MgY29tcGlsaW5nLiBKdXN0IGNvbW1lbnQgb3V0IHRoZSB0ZXN0LCB3ZSBhcmUgcGFzc2luZwordGhlIGxvY2F0aW9uIHRvIHRoZSBwb3N0Z3JlcyBoZWFkZXJzIGFuZCBpZiB0aGV5IGFyZSBva2F5IHdlCit3aWxsIHBhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1VwZGF0ZSBmb3IgcXQgNC44LjcuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGRiNGQwNDQuLjM1YThmZTcgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTU1NzQsMTAgKzU1NzQsMTAgQEAKKyAgICAgICAgICAgICBpZiBbICIkQ0ZHX1NRTF9wc3FsIiAhPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgWyAteiAiJENGR19QU1FMX0NPTkZJRyIgXSAmJiBDRkdfUFNRTF9DT05GSUc9YCIkV0hJQ0giIHBnX2NvbmZpZ2AKKyAgICAgICAgICAgICAgICAgIyBCZSBjYXJlZnVsIG5vdCB0byB1c2UgbmF0aXZlIHBnX2NvbmZpZyB3aGVuIGNyb3NzIGJ1aWxkaW5nLgorLSAgICAgICAgICAgICAgICBpZiBbICIkWFBMQVRGT1JNX01JTkdXIiAhPSAieWVzIiBdICYmIFsgLXggIiRDRkdfUFNRTF9DT05GSUciIF07IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgIFFUX0NGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0taW5jbHVkZWRpciAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICAgICAgICAgIFFUX0xGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0tbGliZGlyIDI+L2Rldi9udWxsYAorLSAgICAgICAgICAgICAgICBmaQorKyMgICAgICAgICAgICAgICAgaWYgWyAiJFhQTEFURk9STV9NSU5HVyIgIT0gInllcyIgXSAmJiBbIC14ICIkQ0ZHX1BTUUxfQ09ORklHIiBdOyB0aGVuCisrIyAgICAgICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX1BTUUw9YCRDRkdfUFNRTF9DT05GSUcgLS1pbmNsdWRlZGlyIDI+L2Rldi9udWxsYAorKyMgICAgICAgICAgICAgICAgICAgIFFUX0xGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0tbGliZGlyIDI+L2Rldi9udWxsYAorKyMgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgWyAteiAiJFFUX0NGTEFHU19QU1FMIiBdIHx8IFFUX0NGTEFHU19QU1FMPSItSSRRVF9DRkxBR1NfUFNRTCIKKyAgICAgICAgICAgICAgICAgWyAteiAiJFFUX0xGTEFHU19QU1FMIiBdIHx8IFFUX0xGTEFHU19QU1FMPSItTCRRVF9MRkxBR1NfUFNRTCIKKyAgICAgICAgICAgICAgICAgIyBCdXQsIHJlc3BlY3QgUFNRTF9MSUJTIGlmIHNldAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4NzljNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTEtZnJlZXR5cGUtaG9zdC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDNmY2ZmYTc5ZTZhNWYwNDQ4Y2JmZTJiYjMzZmUxMjE4ZjVkYWU2MWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIEtyZWxpbiA8aGFja2VyQGtsZXZlci5uZXQ+CitEYXRlOiBNb24sIDQgSnVuIDIwMDcgMTQ6NDg6NTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8yMV0gZnJlZXR5cGUgaG9zdCBpbmNsdWRlcworCitIb3N0IGluY2x1ZGUgcGF0aCBzaG91bGQgbm90IGJlIHVzZWQgaW4gY3Jvc3MgY29tcGlsaW5nIGNhc2UuCisKK1BvcnRlZCBmcm9tIE9FIGJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaSBiL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQoraW5kZXggN2VmMWNmOS4uYjM2MmZjZCAxMDA2NDQKKy0tLSBhL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQorKysrIGIvY29uZmlnLnRlc3RzL3VuaXgvZnJlZXR5cGUvZnJlZXR5cGUucHJpCitAQCAtMSw1ICsxLDUgQEAKKyAhY3Jvc3NfY29tcGlsZSB7CistICAgIFRSWV9JTkNMVURFUEFUSFMgPSAvaW5jbHVkZSAvdXNyL2luY2x1ZGUgJCRRTUFLRV9JTkNESVIgJCRRTUFLRV9JTkNESVJfWDExICQkSU5DTFVERVBBVEgKKysgICAgVFJZX0lOQ0xVREVQQVRIUyA9ICQkUU1BS0VfSU5DRElSICQkUU1BS0VfSU5DRElSX1gxMSAkJElOQ0xVREVQQVRICisgICAgICMgTFNCIGRvZXNuJ3QgYWxsb3cgdXNpbmcgaGVhZGVycyBmcm9tIC9pbmNsdWRlIG9yIC91c3IvaW5jbHVkZQorICAgICBsaW51eC1sc2ItZysrOlRSWV9JTkNMVURFUEFUSFMgPSAkJFFNQUtFX0lOQ0RJUiAkJFFNQUtFX0lOQ0RJUl9YMTEgJCRJTkNMVURFUEFUSAorICAgICBmb3IocCwgVFJZX0lOQ0xVREVQQVRIUykgeworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MTFmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTItQWRkLTJicHAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDMxOCBAQAorRnJvbSA4NzQ0MjczZmM0NTJlYjU0YmJlZWI3ZDE1ODIzMDA5Y2U5MjZjNmZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0plcmVteT0yMExhaW49QzM9QTk/PSA8amVyZW15LmxhaW5lQG00eC5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjM5OjIxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMjFdIEFkZCAyYnBwIHN1cHBvcnQKKworU3VibWl0dGVkIHVwc3RyZWFtIGJ1dCByZWplY3RlZCBhcyBiZWluZyAib3V0IG9mIHNjb3BlIjoKK2h0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMzQ2OAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KKyBzcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcCAgICAgICAgfCAyMTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAgfCAgIDQgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDIxNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAzNWE4ZmU3Li43OWMxYzdiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03MDYzLDYgKzcwNjMsNyBAQCBpZiBbICIkQ0ZHX1FXU19ERVBUSFMiID0gInByb21wdGVkIiAtYSAiJFBST01QVF9GT1JfREVQVEhTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgZWNobyAiQ2hvb3NlIHBpeGVsLWRlcHRocyB0byBzdXBwb3J0OiIKKyAgICAgZWNobworICAgICBlY2hvICIgICAxLiAxYnBwLCBibGFjay93aGl0ZSIKKysgICAgZWNobyAiICAgMi4gMmJwcCwgZ3JheXNjYWxlIgorICAgICBlY2hvICIgICA0LiA0YnBwLCBncmF5c2NhbGUiCisgICAgIGVjaG8gIiAgIDguIDhicHAsIHBhbGV0dGVkIgorICAgICBlY2hvICIgIDEyLiAxMmJwcCwgcmdiIDQtNC00IgorQEAgLTcwODEsMTEgKzcwODIsMTEgQEAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJwcm9tcHRlZCIgLWEgIiRQUk9NUFRfRk9SX0RFUFRIUyIgPSAieWVzIiBdOyB0aGVuCisgZmkKKyBpZiBbIC1uICIkQ0ZHX1FXU19ERVBUSFMiIC1hICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJhbGwiIF07IHRoZW4KKy0gICAgICAgIENGR19RV1NfREVQVEhTPSIxIDQgOCAxMiAxNSAxNiAxOCAyNCAzMiBnZW5lcmljIgorKyAgICAgICAgQ0ZHX1FXU19ERVBUSFM9IjEgMiA0IDggMTIgMTUgMTYgMTggMjQgMzIgZ2VuZXJpYyIKKyAgICAgZmkKKyAgICAgZm9yIEQgaW4gYGVjaG8gIiRDRkdfUVdTX0RFUFRIUyIgfCBzZWQgLWUgJ3MvLC8gL2cnYDsgZG8KKyAJY2FzZSAkRCBpbgorLQkgICAgMXw0fDh8MTJ8MTV8MTZ8MTh8MjR8MzIpIFFDT05GSUdfRkxBR1M9IiRRQ09ORklHX0ZMQUdTIFFUX1FXU19ERVBUSF8kRCI7OworKwkgICAgMXwyfDR8OHwxMnwxNXwxNnwxOHwyNHwzMikgUUNPTkZJR19GTEFHUz0iJFFDT05GSUdfRkxBR1MgUVRfUVdTX0RFUFRIXyREIjs7CisgCSAgICBnZW5lcmljKSBRQ09ORklHX0ZMQUdTPSIkUUNPTkZJR19GTEFHUyBRVF9RV1NfREVQVEhfR0VORVJJQyI7OworIAllc2FjCisgICAgIGRvbmUKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCitpbmRleCBiMzA3YmYyLi44ODk1MGIzIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCitAQCAtNDY5LDYgKzQ2OSw1OCBAQCBzdGF0aWMgdm9pZCBzb2xpZEZpbGxfZ3JheTQoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRQ29sb3IgJmNvbG9yLAorIH0KKyAjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzQKKyAKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKytzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGZpbGxfZ3JheTIocXVpbnQ4ICpkZXN0LCBxdWludDggdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyaWRlKQorK3sKKysgICAgY29uc3QgaW50IHBpeGVsc1BlckJ5dGUgPSA0OworKyAgICBjb25zdCBpbnQgYWxpZ25XaWR0aCA9IHFNaW4od2lkdGgsICg0IC0gKHggJiAzKSkgJiAzKTsKKysgICAgY29uc3QgaW50IGRvQWxpZ24gPSAoYWxpZ25XaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IGludCBhbGlnblN0YXJ0ID0gcGl4ZWxzUGVyQnl0ZSAtIDEgLSAoeCAmIDMpOworKyAgICBjb25zdCBpbnQgYWxpZ25TdG9wID0gYWxpZ25TdGFydCAtIChhbGlnbldpZHRoIC0gMSk7CisrICAgIGNvbnN0IHF1aW50OCBhbGlnbk1hc2sgPSAoKDEgPDwgKDIgKiBhbGlnbldpZHRoKSkgLSAxKSA8PCAoMiAqIGFsaWduU3RvcCk7CisrICAgIGNvbnN0IGludCB0YWlsV2lkdGggPSAod2lkdGggLSBhbGlnbldpZHRoKSAmIDM7CisrICAgIGNvbnN0IGludCBkb1RhaWwgPSAodGFpbFdpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgcXVpbnQ4IHRhaWxNYXNrID0gKDEgPDwgKDIgKiAocGl4ZWxzUGVyQnl0ZSAtIHRhaWxXaWR0aCkpKSAtIDE7CisrICAgIGNvbnN0IGludCB3aWR0aDggPSAod2lkdGggLSBhbGlnbldpZHRoKSAvIHBpeGVsc1BlckJ5dGU7CisrCisrICAgIGRlc3QgKz0geSAqIHN0cmlkZSArIHggLyBwaXhlbHNQZXJCeXRlOworKyAgICBzdHJpZGUgLT0gKGRvQWxpZ24gKyB3aWR0aDgpOworKworKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7CisrICAgICAgICBpZiAoZG9BbGlnbikgeworKyAgICAgICAgICAgICpkZXN0ID0gKCpkZXN0ICYgfmFsaWduTWFzaykgfCAodmFsdWUgJiBhbGlnbk1hc2spOworKyAgICAgICAgICAgICsrZGVzdDsKKysgICAgICAgIH0KKysgICAgICAgIGlmICh3aWR0aDgpIHsKKysgICAgICAgICAgICBxdF9tZW1maWxsPHF1aW50OD4oZGVzdCwgdmFsdWUsIHdpZHRoOCk7CisrICAgICAgICAgICAgZGVzdCArPSB3aWR0aDg7CisrICAgICAgICB9CisrICAgICAgICBpZiAoZG9UYWlsKQorKyAgICAgICAgICAgICpkZXN0ID0gKCpkZXN0ICYgdGFpbE1hc2spIHwgKHZhbHVlICYgfnRhaWxNYXNrKTsKKysgICAgICAgIGRlc3QgKz0gc3RyaWRlOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIHNvbGlkRmlsbF9ncmF5MihRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFDb2xvciAmY29sb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFSZWdpb24gJnJlZ2lvbikKKyt7CisrICAgIHF1aW50OCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQ4Kj4oc2NyZWVuLT5iYXNlKCkpOworKyAgICBjb25zdCBxdWludDggYyA9IHFHcmF5KGNvbG9yLnJnYmEoKSkgPj4gNjsKKysgICAgY29uc3QgcXVpbnQ4IGM4ID0gKGMgPDwgNikgfCAoYyA8PCA0KSB8IChjIDw8IDIpIHwgYzsKKysKKysgICAgY29uc3QgaW50IHN0cmlkZSA9IHNjcmVlbi0+bGluZXN0ZXAoKTsKKysgICAgY29uc3QgUVZlY3RvcjxRUmVjdD4gcmVjdHMgPSByZWdpb24ucmVjdHMoKTsKKysKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgeworKyAgICAgICAgY29uc3QgUVJlY3QgciA9IHJlY3RzLmF0KGkpOworKyAgICAgICAgcXRfcmVjdGZpbGxfZ3JheTIoZGVzdCwgYzgsIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlKTsKKysgICAgfQorK30KKysjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzIKKysKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyBzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGZpbGxfbW9ubyhxdWludDggKmRlc3QsIHF1aW50OCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKK0BAIC01NzYsNiArNjI4LDExIEBAIHZvaWQgcXRfc29saWRGaWxsX3NldHVwKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUNvbG9yICZjb2xvciwKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPnNvbGlkRmlsbCA9IHNvbGlkRmlsbF9ncmF5NDsKKyAgICAgICAgIGJyZWFrOworICNlbmRpZgorKyNpZmRlZiBRVF9RV1NfREVQVEhfMgorKyAgICBjYXNlIDI6CisrICAgICAgICBzY3JlZW4tPmRfcHRyLT5zb2xpZEZpbGwgPSBzb2xpZEZpbGxfZ3JheTI7CisrICAgICAgICBicmVhazsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAgICAgY2FzZSAxOgorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+c29saWRGaWxsID0gc29saWRGaWxsX21vbm87CitAQCAtMTAwNiw2ICsxMDYzLDE0OSBAQCBzdGF0aWMgdm9pZCBibGl0XzQoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRSW1hZ2UgJmltYWdlLAorIH0KKyAjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzQKKyAKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysKKytzdHJ1Y3QgcWdyYXkyIHsgcXVpbnQ4IGR1bW15OyB9IFFfUEFDS0VEOworKworK3RlbXBsYXRlIDx0eXBlbmFtZSBTUkM+Cisrc3RhdGljIGlubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIoU1JDIGNvbG9yKTsKKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocXVpbnQzMiBjb2xvcikKKyt7CisrICAgIHJldHVybiBxR3JheShjb2xvcikgPj4gNjsKKyt9CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MTYgY29sb3IpCisreworKyAgICBjb25zdCBpbnQgciA9IChjb2xvciAmIDB4ZjgwMCkgPj4gMTE7CisrICAgIGNvbnN0IGludCBnID0gKGNvbG9yICYgMHgwN2UwKSA+PiA2OyAvLyBvbmx5IGtlZXAgNSBiaXQKKysgICAgY29uc3QgaW50IGIgPSAoY29sb3IgJiAweDAwMWYpOworKyAgICByZXR1cm4gKHIgKiAxMSArIGcgKiAxNiArIGIgKiA1KSA+PiA4OworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocXJnYjQ0NCBjb2xvcikKKyt7CisrICAgIHJldHVybiBxdF9jb252ZXJ0VG9HcmF5MihxdWludDMyKGNvbG9yKSk7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxYXJnYjQ0NDQgY29sb3IpCisreworKyAgICByZXR1cm4gcXRfY29udmVydFRvR3JheTIocXVpbnQzMihjb2xvcikpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgU1JDPgorK3N0YXRpYyBpbmxpbmUgdm9pZCBxdF9yZWN0Y29udmVydF9ncmF5MihxZ3JheTIgKmRlc3QyLCBjb25zdCBTUkMgKnNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBjb25zdCBpbnQgcGl4ZWxzUGVyQnl0ZSA9IDQ7CisrICAgIHF1aW50OCAqZGVzdDggPSByZWludGVycHJldF9jYXN0PHF1aW50OCo+KGRlc3QyKQorKyAgICAgICAgICAgICAgICAgICAgKyB5ICogZHN0U3RyaWRlICsgeCAvIHBpeGVsc1BlckJ5dGU7CisrICAgIGNvbnN0IGludCBhbGlnbldpZHRoID0gcU1pbih3aWR0aCwgKDQgLSAoeCAmIDMpKSAmIDMpOworKyAgICBjb25zdCBpbnQgZG9BbGlnbiA9IChhbGlnbldpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RhcnQgPSBwaXhlbHNQZXJCeXRlIC0gMSAtICh4ICYgMyk7CisrICAgIGNvbnN0IGludCBhbGlnblN0b3AgPSBhbGlnblN0YXJ0IC0gKGFsaWduV2lkdGggLSAxKTsKKysgICAgY29uc3QgcXVpbnQ4IGFsaWduTWFzayA9ICgoMSA8PCAoMiAqIGFsaWduV2lkdGgpKSAtIDEpIDw8ICgyICogYWxpZ25TdG9wKTsKKysgICAgY29uc3QgaW50IHRhaWxXaWR0aCA9ICh3aWR0aCAtIGFsaWduV2lkdGgpICYgMzsKKysgICAgY29uc3QgaW50IGRvVGFpbCA9ICh0YWlsV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBxdWludDggdGFpbE1hc2sgPSAoMSA8PCAoMiAqIChwaXhlbHNQZXJCeXRlIC0gdGFpbFdpZHRoKSkpIC0gMTsKKysgICAgY29uc3QgaW50IHdpZHRoOCA9ICh3aWR0aCAtIGFsaWduV2lkdGgpIC8gcGl4ZWxzUGVyQnl0ZTsKKysKKysgICAgc3JjU3RyaWRlID0gc3JjU3RyaWRlIC8gc2l6ZW9mKFNSQykgLSAod2lkdGg4ICogcGl4ZWxzUGVyQnl0ZSArIGFsaWduV2lkdGgpOworKyAgICBkc3RTdHJpZGUgLT0gKHdpZHRoOCArIGRvQWxpZ24pOworKworKyAgICBmb3IgKGludCBqID0gMDsgIGogPCBoZWlnaHQ7ICsraikgeworKyAgICAgICAgaWYgKGRvQWxpZ24pIHsKKysgICAgICAgICAgICBxdWludDggZCA9ICpkZXN0OCAmIH5hbGlnbk1hc2s7CisrICAgICAgICAgICAgZm9yIChpbnQgaSA9IGFsaWduU3RhcnQ7IGkgPj0gYWxpZ25TdG9wOyAtLWkpCisrICAgICAgICAgICAgICAgIGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPigqc3JjKyspIDw8ICgyICogaSk7CisrICAgICAgICAgICAgKmRlc3Q4KysgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDg7ICsraSkgeworKyAgICAgICAgICAgICpkZXN0OCA9IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1swXSkgPDwgNikKKysgICAgICAgICAgICAgICAgICAgICB8IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1sxXSkgPDwgNCkKKysgICAgICAgICAgICAgICAgICAgICB8IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1syXSkgPDwgMikKKysgICAgICAgICAgICAgICAgICAgICB8IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1szXSkpOworKyAgICAgICAgICAgIHNyYyArPSA0OworKyAgICAgICAgICAgICsrZGVzdDg7CisrICAgICAgICB9CisrICAgICAgICBpZiAoZG9UYWlsKSB7CisrICAgICAgICAgICAgcXVpbnQ4IGQgPSAqZGVzdDggJiB0YWlsTWFzazsKKysgICAgICAgICAgICBzd2l0Y2ggKHRhaWxXaWR0aCkgeworKyAgICAgICAgICAgIGNhc2UgMzogZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1syXSkgPDwgMjsKKysgICAgICAgICAgICBjYXNlIDI6IGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMV0pIDw8IDQ7CisrICAgICAgICAgICAgY2FzZSAxOiBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzBdKSA8PCA2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAqZGVzdDggPSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVzdDggKz0gZHN0U3RyaWRlOworKyAgICAgICAgc3JjICs9IHNyY1N0cmlkZTsKKysgICAgfQorK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxdWludDMyICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxdWludDMyPihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcXVpbnQxNiAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cXVpbnQxNj4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHFyZ2I0NDQgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHFyZ2I0NDQ+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxYXJnYjQ0NDQgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHFhcmdiNDQ0ND4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrc3RhdGljIHZvaWQgYmxpdF8yKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50ICZ0b3BMZWZ0LCBjb25zdCBRUmVnaW9uICZyZWdpb24pCisreworKyAgICBzd2l0Y2ggKGltYWdlLmZvcm1hdCgpKSB7CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXVpbnQzMj4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0IxNjoKKysgICAgICAgIGJsaXRfdGVtcGxhdGU8cWdyYXkyLCBxdWludDE2PihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjQ0NDoKKysgICAgICAgIGJsaXRfdGVtcGxhdGU8cWdyYXkyLCBxcmdiNDQ0PihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0I0NDQ0X1ByZW11bHRpcGxpZWQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcWFyZ2I0NDQ0PihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgcUNyaXRpY2FsKCJibGl0XzIoKTogSW1hZ2UgZm9ybWF0ICVkIG5vdCBzdXBwb3J0ZWQhIiwgaW1hZ2UuZm9ybWF0KCkpOworKyAgICB9CisrfQorKyNlbmRpZiAvLyBRVF9RV1NfREVQVEhfMgorKworICNpZmRlZiBRVF9RV1NfREVQVEhfMQorIAorIHN0cnVjdCBxbW9ubyB7IHF1aW50OCBkdW1teTsgfSBRX1BBQ0tFRDsKK0BAIC0xMjU5LDYgKzE0NTksMTEgQEAgdm9pZCBxdF9ibGl0X3NldHVwKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPmJsaXQgPSBibGl0XzQ7CisgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgY2FzZSAyOgorKyAgICAgICAgc2NyZWVuLT5kX3B0ci0+YmxpdCA9IGJsaXRfMjsKKysgICAgICAgIGJyZWFrOworKyNlbmRpZgorICNpZmRlZiBRVF9RV1NfREVQVEhfMQorICAgICBjYXNlIDE6CisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5ibGl0ID0gYmxpdF8xOworQEAgLTIxNDYsNiArMjM1MSw4IEBAIGludCBRU2NyZWVuOjphbGxvYyh1bnNpZ25lZCBpbnQgcix1bnNpZ25lZCBpbnQgZyx1bnNpZ25lZCBpbnQgYikKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIGlmIChkID09IDQpIHsKKyAgICAgICAgIHJldCA9IHFHcmF5KHIsIGcsIGIpID4+IDQ7CisrICAgIH0gZWxzZSBpZiAoZCA9PSAyKSB7CisrICAgICAgICByZXQgPSBxR3JheShyLCBnLCBiKSA+PiA2OworICAgICB9IGVsc2UgaWYgKGQgPT0gMSkgeworICAgICAgICAgcmV0ID0gcUdyYXkociwgZywgYikgPj0gMTI4OworICAgICB9IGVsc2UgeworQEAgLTIyMTYsNiArMjQyMywxMCBAQCBib29sIFFTY3JlZW46OnN1cHBvcnRzRGVwdGgoaW50IGQpIGNvbnN0CisgICAgIH0gZWxzZSBpZihkPT0xKSB7CisgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgfSBlbHNlIGlmKGQ9PTIpIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyNlbmRpZgorICNpZmRlZiBRVF9RV1NfREVQVEhfNAorICAgICB9IGVsc2UgaWYoZD09NCkgeworICAgICAgICAgcmV0dXJuIHRydWU7CitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCitpbmRleCA2ZjNjYWFkLi4xNDE1OWVlIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAKK0BAIC00NjYsOCArNDY2LDggQEAgYm9vbCBRTGludXhGYlNjcmVlbjo6Y29ubmVjdChjb25zdCBRU3RyaW5nICZkaXNwbGF5U3BlYykKKyAgICAgICAgIHNldHVwT2ZmU2NyZWVuKCk7CisgCisgICAgIC8vIE5vdyByZWFkIGluIHBhbGV0dGUKKy0gICAgaWYoKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT04KSB8fCAodmluZm8uYml0c19wZXJfcGl4ZWw9PTQpKSB7CistICAgICAgICBzY3JlZW5jb2xzPSAodmluZm8uYml0c19wZXJfcGl4ZWw9PTgpID8gMjU2IDogMTY7CisrICAgIGlmKCh2aW5mby5iaXRzX3Blcl9waXhlbD09OCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT00KSB8fCAodmluZm8uYml0c19wZXJfcGl4ZWw9PTIpKSB7CisrICAgICAgICBzY3JlZW5jb2xzPSAxIDw8IHZpbmZvLmJpdHNfcGVyX3BpeGVsOworICAgICAgICAgaW50IGxvb3BjOworICAgICAgICAgOjpmYl9jbWFwIHN0YXJ0Y21hcDsKKyAgICAgICAgIHN0YXJ0Y21hcC5zdGFydD0wOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmNkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDU0OTM0MmZhMzgwZWQyYTlhZDQxYmUzZDA0ZWUyZjA1ODVmNmE0NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDE6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8yMV0gY29uZmlndXJlOiBhZGQgIi1jcm9zc2FyY2giIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIHF0IDQuOC43CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA0ZWI0YTNkLi5hNGRhY2VjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMTYwLDcgKzExNjAsNyBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgIHNoaWZ0CisgICAgICAgICBWQUw9JDEKKyAgICAgICAgIDs7CistICAgIC1wcmVmaXh8LWRvY2RpcnwtaGVhZGVyZGlyfC1wbHVnaW5kaXJ8LWltcG9ydGRpcnwtZGF0YWRpcnwtbGliZGlyfC1iaW5kaXJ8LXRyYW5zbGF0aW9uZGlyfC1zeXNjb25mZGlyfC1leGFtcGxlc2RpcnwtZGVtb3NkaXJ8LWRlcHRoc3wtbWFrZXwtbm9tYWtlfC1wbGF0Zm9ybXwteHBsYXRmb3JtfC1kZXZpY2Utb3B0aW9ufC1idWlsZGtleXwtc2RrfC1hcmNofC1ob3N0LWFyY2h8LW15c3FsX2NvbmZpZ3wtcHNxbF9jb25maWd8LXN5c3Jvb3QpCisrICAgIC1wcmVmaXh8LWRvY2RpcnwtaGVhZGVyZGlyfC1wbHVnaW5kaXJ8LWltcG9ydGRpcnwtZGF0YWRpcnwtbGliZGlyfC1iaW5kaXJ8LXRyYW5zbGF0aW9uZGlyfC1zeXNjb25mZGlyfC1leGFtcGxlc2RpcnwtZGVtb3NkaXJ8LWRlcHRoc3wtbWFrZXwtbm9tYWtlfC1wbGF0Zm9ybXwteHBsYXRmb3JtfC1kZXZpY2Utb3B0aW9ufC1idWlsZGtleXwtc2RrfC1hcmNofC1ob3N0LWFyY2h8LW15c3FsX2NvbmZpZ3wtcHNxbF9jb25maWd8LXN5c3Jvb3R8LWNyb3NzYXJjaCkKKyAgICAgICAgIFZBUj1gZWNobyAkMSB8IHNlZCAicyxeLVwoLipcKSxcMSwiYAorICAgICAgICAgc2hpZnQKKyAgICAgICAgIFZBTD0iJDEiCitAQCAtMTcxOSw2ICsxNzE5LDkgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICBERVZfVkFMPWBlY2hvICRWQUwgfCBzZWQgInMsXi4qPVwoLipcKSxcMSwiYAorICAgICAgICAgRGV2aWNlVmFyIHNldCAkREVWX1ZBUiAkREVWX1ZBTAorICAgICAgICAgOzsKKysgICAgY3Jvc3NhcmNoKQorKyAgICAgICAgQ1JPU1NBUkNIPSIkVkFMIgorKyAgICAgICAgOzsKKyAgICAgZGVidWctYW5kLXJlbGVhc2UpCisgICAgICAgICBpZiBbICIkVkFMIiA9ICJ5ZXMiIF0gfHwgWyAiJFZBTCIgPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICBDRkdfREVCVUdfUkVMRUFTRT0iJFZBTCIKK0BAIC0zMzMzLDYgKzMzMzYsOCBAQCBhcm0qKQorICAgICA7OworIGVzYWMKKyAKKytDRkdfQVJDSD0iJENST1NTQVJDSCIKKysKKyBpZiBbIC1kICIkcmVscGF0aC9zcmMvY29yZWxpYi9hcmNoLyRDRkdfQVJDSCIgXTsgdGhlbgorICAgICBpZiBbICIkT1BUX1ZFUkJPU0UiID0gInllcyIgXTsgdGhlbgorICAgICAgICAgZWNobyAiICAgICckQ0ZHX0FSQ0gnIGlzIHN1cHBvcnRlZCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE0LXRyYW5zbGF0aW9ucy1maXgtcGhvbnktdHJhbnNsYXRpb24tbGlua2luZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjcyNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAyMWFmOGY2ZDIxYjI4YTUzMDQxYWZmYjExYjU4ZDYzMTYwMjNmYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDU6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8yMV0gdHJhbnNsYXRpb25zOiBmaXggcGhvbnkgdHJhbnNsYXRpb24gbGlua2luZyBlcnJvcgorCisgIHwgLi4uL3Vzci9saWIvY3J0MS5vOiBJbiBmdW5jdGlvbiBgX3N0YXJ0JzoKKyAgfCAuLi4vLi4vc3lzZGVwcy9pMzg2L2VsZi9zdGFydC5TOjExNTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbWFpbicKKyAgfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8gYi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworaW5kZXggZGM5OWJlYi4uMGQ5ODgyOSAxMDA2NDQKKy0tLSBhL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCisrKysgYi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworQEAgLTEwMSw3ICsxMDEsNyBAQCB1cGRhdGVxbS5uYW1lID0gTFJFTEVBU0UgJHtRTUFLRV9GSUxFX0lOfQorIHVwZGF0ZXFtLkNPTkZJRyArPSBub19saW5rCisgUU1BS0VfRVhUUkFfQ09NUElMRVJTICs9IHVwZGF0ZXFtCisgCistaXNFbXB0eSh2Y3Byb2opIHsKKyshaXNFbXB0eSh2Y3Byb2opIHsKKyAgICAgUU1BS0VfTElOSyA9IEA6IElHTk9SRSBUSElTIExJTkUKKyAgICAgT0JKRUNUU19ESVIgPQorICAgICB3aW4zMjpDT05GSUcgLT0gZW1iZWRfbWFuaWZlc3RfZXhlCitAQCAtMTExLDcgKzExMSw3IEBAIGlzRW1wdHkodmNwcm9qKSB7CisgICAgIHBob255X3NyYy5pbnB1dCA9IFBIT05ZX0RFUFMKKyAgICAgcGhvbnlfc3JjLm91dHB1dCA9IHBob255LmMKKyAgICAgcGhvbnlfc3JjLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCistICAgIHBob255X3NyYy5jb21tYW5kcyA9IGVjaG8gaW50IG1haW4oKSB7IHJldHVybiAwOyB9ID4gcGhvbnkuYworKyAgICBwaG9ueV9zcmMuY29tbWFuZHMgPSBlY2hvIFwiaW50IG1haW4oKSB7IHJldHVybiAwOyB9XCIgPiBwaG9ueS5jCisgICAgIHBob255X3NyYy5uYW1lID0gQ1JFQVRFIHBob255LmMKKyAgICAgcGhvbnlfc3JjLkNPTkZJRyArPSBjb21iaW5lCisgICAgIFFNQUtFX0VYVFJBX0NPTVBJTEVSUyArPSBwaG9ueV9zcmMKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZGI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE1LWNvbmZpZ3VyZS1hZGQtbm9zdHJpcC1mb3ItZGVidWctcGFja2FnZXMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA5MjUwZmVkMDg2YTRhOGE2NDVhOTcyNzY0YTliZjM0ZTQ1NjZlYzJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmF0aGkgQm91ZHJhIDxmYWJvQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ2OjE0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMjFdIGNvbmZpZ3VyZTogYWRkIG5vc3RyaXAgZm9yIGRlYnVnIHBhY2thZ2VzCisKK1F0IGlzIGJ1aWx0IGluIHJlbGVhc2UgbW9kZSBhbmQgc3RyaXAgZmlsZXMgYnkgZGVmYXVsdC4KK1NldCBDT05GSUcrPW5vc3RyaXAgdG8gYXZvaWQgdGhlIHN0cmlwcGluZyBhbmQKK2xldCBkaF9zdHJpcCBkbyBpdCB0byBnZW5lcmF0ZSBkZWJ1ZyBwYWNrYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3OTgzYzNkLi5kMDI4MjRiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03MTAsNiArNzEwLDggQEAgbWtkaXIgLXAgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cyIKKyBybSAtZiAiJG91dHBhdGgvY29uZmlnLnRlc3RzLy5xbWFrZS5jYWNoZSIKKyBjcCAiJFFNQUtFX1ZBUlNfRklMRSIgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cy8ucW1ha2UuY2FjaGUiCisgCisrUU1ha2VWYXIgYWRkIENPTkZJRyBub3N0cmlwCisrCisgUU1ha2VWYXIgYWRkIHN0eWxlcyAiY2RlIG1hYyBtb3RpZiBwbGFzdGlxdWUgY2xlYW5sb29rcyB3aW5kb3dzIgorIFFNYWtlVmFyIGFkZCBkZWNvcmF0aW9ucyAiZGVmYXVsdCB3aW5kb3dzIHN0eWxlZCIKKyBRTWFrZVZhciBhZGQgbW91c2UtZHJpdmVycyAicGMiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNi1jb25maWd1cmUtZXZhbC1RTUFLRV9DWFgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzZGU0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gODQwMzYzNGE3MWYwNjdlZWM1MTRiNmQyMTkzY2Y0MWUyODFkZmY4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0NzowOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE2LzIxXSBjb25maWd1cmU6IGV2YWwgUU1BS0VfQ1hYCisKK0FsbG93IGV4cGFuc2lvbiBvZiAkKC4uLikgcmVmZXJlbmNlcyBpbiBRTUFLRV9DWFggKGN1cnJlbnRseSBpdHMgdmFsdWUKK2lzICQoT0VfUU1BS0VfQ1hYKSkgaW4gb3JkZXIgdG8gYWxsb3cgY29tcGlsZXIgdmVyc2lvbiBjaGVjayB0byBzdWNjZWVkCit3aGljaCBhbGxvd3MgV2ViS2l0IHRvIGJlIGVuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworQ29uZmxpY3RzOgorCWNvbmZpZ3VyZQorLS0tCisgY29uZmlndXJlIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQwMjgyNGIuLjg5MWQ2ZTcgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTM0MDksNyArMzQwOSw4IEBAIGVsc2UKKyAgICAgQ0ZHX0ZSQU1FV09SSz1ubworIGZpCisgCistUU1BS0VfQ09ORl9DT01QSUxFUj1gZ2V0WFFNYWtlQ29uZiBRTUFLRV9DWFhgCisrUU1BS0VfQ09ORl9DT01QSUxFUj1gZ2V0WFFNYWtlQ29uZiBRTUFLRV9DWFggfCBzZWQgLW4gJ3MvJFsoXVwoWzAtOWEtekEtWl9dKlwpWyldLyRcMS9wZydgCisrUU1BS0VfQ09ORl9DT01QSUxFUj1gZXZhbCAiZWNobyAkUU1BS0VfQ09ORl9DT01QSUxFUiJgCisgVEVTVF9DT01QSUxFUj0iJENYWCIKKyAKKyBbIC16ICIkVEVTVF9DT01QSUxFUiIgXSAmJiBURVNUX0NPTVBJTEVSPSRRTUFLRV9DT05GX0NPTVBJTEVSCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcxOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNy1jb25maWd1cmUtZW5zdXJlLXdlLWlkZW50aWZ5LXRoZS1jb21waWxlci1hcy1nLWluLWNvLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gZDJiYjcwMWI1NTE0MDJmMGJlZmRkZDBlOTA2NDIzNTk2YmRjMGRmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0ODozNyArMDIwMAorU3ViamVjdDogW1BBVENIIDE3LzIxXSBjb25maWd1cmU6IGVuc3VyZSB3ZSBpZGVudGlmeSB0aGUgY29tcGlsZXIgYXMgZysrIGluCisgY29uZmlndXJlCisKK091ciBQTEFURk9STSBpbiBPRSBpcyAke1RBUkdFVF9PU30tb2UtZysrLCBhbmQgcHJldmlvdXNseSB0aGUgY29uZmlndXJlCitzY3JpcHQgd2FzIGludGVycHJldGluZyBmcm9tIHRoaXMgdGhhdCB0aGUgY29tcGlsZXIgd2FzICJvZS1nKysiIGFuZAordGh1cworZysrIHNwZWNpZmljIGNoZWNrcyB3ZXJlIG5vdCBiZWluZyBydW4gc2luY2UgdGhpcyBzdHJpbmcgZGlkIG5vdCBtYXRjaDsKK2Ftb25nIG90aGVyIHRoaW5ncyB0aGlzIHJlc3VsdGVkIGluIGEgY29tcGlsZXIgdmVyc2lvbiBjaGVjayBpbiB0aGUKK1F0V2ViS2l0IGJ1aWxkIGNvZGUgbm90IHdvcmtpbmcsIGFuZCBoZW5jZSB0aGUgZm9sbG93aW5nIGVycm9yIGF0IGJ1aWxkCit0aW1lOgorCisuL3d0Zi9OdWxsUHRyLmg6NDg6MTogZXJyb3I6IGlkZW50aWZpZXIgJ251bGxwdHInIHdpbGwgYmVjb21lIGEga2V5d29yZAoraW4gQysrMHggWy1XZXJyb3I9YysrMHgtY29tcGF0XQorCitUaGUgZWFzaWVzdCB0aGluZyBzaW5jZSBvdXIgUExBVEZPUk0gaXMgZW50aXJlbHkgYXJ0aWZpY2lhbCBpcyB0byBqdXN0Citmb3JjZSBDT01QSUxFUiB0byAiZysrIiBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBpZiBpdCBpcyBkZXRlY3RlZCBhcworIm9lLWcrKyIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggODkxZDZlNy4uNzAzMTg5OCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzU5Miw2ICs3NTkyLDkgQEAgZWxpZiBbICIkWFBMQVRGT1JNIiAhPSAiJFBMQVRGT1JNIiBdOyB0aGVuCisgZWxzZQorICAgICBDT01QSUxFUj1gZWNobyAkUExBVEZPUk0gfCBjdXQgLWYgMi0gLWQtYAorIGZpCisrY2FzZSAkQ09NUElMRVIgaW4KKysgICAgKm9lLWcrKykgQ09NUElMRVI9ImcrKyIgOzsKKytlc2FjCisgaWYgWyAiJENGR19FWENFUFRJT05TIiA9ICJ1bnNwZWNpZmllZCIgLWEgIiRQTEFURk9STV9RV1MiID0gInllcyIgXTsgdGhlbgorICAgICBDRkdfRVhDRVBUSU9OUz1ubworIGZpCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2RkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gZDZkYzFhN2Q2NTk0ZDdlMzk1MzQ3NzMyYTNlNTUzZmM4MmNjYWIzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyOCBGZWIgMjAxMiAxNToxMDoyNCArMDAwMAorU3ViamVjdDogW1BBVENIIDE4LzIxXSBjb25maWd1cmU6IG1ha2UgcHVsc2VhdWRpbyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24KKworQWxsb3dzIGRpc2FibGluZyBwdWxzZWF1ZGlvIHN1cHBvcnQgd2l0aGluIHBob25vbiBhdCBjb25maWd1cmUgdGltZS4KKyhUaGlzIGlzIHRoZSBRdCA0LjguMCB2ZXJzaW9uLikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDcwMzE4OTguLmE0YTQyZjEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTExMzksNyArMTEzOSw3IEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgVkFMPW5vCisgICAgICAgICA7OworICAgICAjUXQgc3R5bGUgeWVzIG9wdGlvbnMKKy0gICAgLWluY3JlbWVudGFsfC1xdmZifC1wcm9maWxlfC1zaGFyZWR8LXN0YXRpY3wtc218LXhpbmVyYW1hfC14c2hhcGV8LXhzeW5jfC14aW5wdXR8LWVnbHwtcmVkdWNlLWV4cG9ydHN8LXBjaHwtc2VwYXJhdGUtZGVidWctaW5mb3wtc3RsfC1mcmVldHlwZXwteGN1cnNvcnwteGZpeGVzfC14cmFuZHJ8LXhyZW5kZXJ8LW1pdHNobXwtZm9udGNvbmZpZ3wteGtifC1uaXN8LXFkYnVzfC1kYnVzfC1kYnVzLWxpbmtlZHwtZ2xpYnwtZ3N0cmVhbWVyfC1ndGtzdHlsZXwtY3Vwc3wtaWNvbnZ8LWxhcmdlZmlsZXwtaHwtaGVscHwtdnwtdmVyYm9zZXwtZGVidWd8LXJlbGVhc2V8LWZhc3R8LWFjY2Vzc2liaWxpdHl8LWNvbmZpcm0tbGljZW5zZXwtZ251bWFrZXwtZnJhbWV3b3JrfC1xdDNzdXBwb3J0fC1kZWJ1Zy1hbmQtcmVsZWFzZXwtZXhjZXB0aW9uc3wtY29jb2F8LWNhcmJvbnwtdW5pdmVyc2FsfC1oYXJmYnV6enwtcHJlZml4LWluc3RhbGx8LXNpbGVudHwtYXJtZnBhfC1vcHRpbWl6ZWQtcW1ha2V8LWR3YXJmMnwtcmVkdWNlLXJlbG9jYXRpb25zfC1zc2V8LW9wZW5zc2x8LW9wZW5zc2wtbGlua2VkfC1wdG1hbGxvY3wteG1scGF0dGVybnN8LXBob25vbnwtcGhvbm9uLWJhY2tlbmR8LW11bHRpbWVkaWF8LWF1ZGlvLWJhY2tlbmR8LXN2Z3wtZGVjbGFyYXRpdmV8LWRlY2xhcmF0aXZlLWRlYnVnfC1qYXZhc2NyaXB0LWppdHwtc2NyaXB0fC1zY3JpcHR0b29sc3wtcnBhdGh8LWZvcmNlLXBrZy1jb25maWd8LXM2MHwtdXNlZGVmZmlsZXN8LWljdSkKKysgICAgLWluY3JlbWVudGFsfC1xdmZifC1wcm9maWxlfC1zaGFyZWR8LXN0YXRpY3wtc218LXhpbmVyYW1hfC14c2hhcGV8LXhzeW5jfC14aW5wdXR8LWVnbHwtcmVkdWNlLWV4cG9ydHN8LXBjaHwtc2VwYXJhdGUtZGVidWctaW5mb3wtc3RsfC1mcmVldHlwZXwteGN1cnNvcnwteGZpeGVzfC14cmFuZHJ8LXhyZW5kZXJ8LW1pdHNobXwtZm9udGNvbmZpZ3wteGtifC1uaXN8LXFkYnVzfC1kYnVzfC1kYnVzLWxpbmtlZHwtZ2xpYnwtZ3N0cmVhbWVyfC1wdWxzZWF1ZGlvfC1ndGtzdHlsZXwtY3Vwc3wtaWNvbnZ8LWxhcmdlZmlsZXwtaHwtaGVscHwtdnwtdmVyYm9zZXwtZGVidWd8LXJlbGVhc2V8LWZhc3R8LWFjY2Vzc2liaWxpdHl8LWNvbmZpcm0tbGljZW5zZXwtZ251bWFrZXwtZnJhbWV3b3JrfC1xdDNzdXBwb3J0fC1kZWJ1Zy1hbmQtcmVsZWFzZXwtZXhjZXB0aW9uc3wtY29jb2F8LWNhcmJvbnwtdW5pdmVyc2FsfC1oYXJmYnV6enwtcHJlZml4LWluc3RhbGx8LXNpbGVudHwtYXJtZnBhfC1vcHRpbWl6ZWQtcW1ha2V8LWR3YXJmMnwtcmVkdWNlLXJlbG9jYXRpb25zfC1zc2V8LW9wZW5zc2x8LW9wZW5zc2wtbGlua2VkfC1wdG1hbGxvY3wteG1scGF0dGVybnN8LXBob25vbnwtcGhvbm9uLWJhY2tlbmR8LW11bHRpbWVkaWF8LWF1ZGlvLWJhY2tlbmR8LXN2Z3wtZGVjbGFyYXRpdmV8LWRlY2xhcmF0aXZlLWRlYnVnfC1qYXZhc2NyaXB0LWppdHwtc2NyaXB0fC1zY3JpcHR0b29sc3wtcnBhdGh8LWZvcmNlLXBrZy1jb25maWd8LXM2MHwtdXNlZGVmZmlsZXN8LWljdSkKKyAgICAgICAgIFZBUj1gZWNobyAkMSB8IHNlZCAicyxeLVwoLipcKSxcMSwiYAorICAgICAgICAgVkFMPXllcworICAgICAgICAgOzsKK0BAIC0yMTIwLDYgKzIxMjAsMTMgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICAgICAgVU5LTk9XTl9PUFQ9eWVzCisgICAgICAgICBmaQorICAgICAgICAgOzsKKysgICAgcHVsc2VhdWRpbykKKysgICAgICAgIGlmIFsgIiRWQUwiID0gInllcyIgXSB8fCBbICIkVkFMIiA9ICJubyIgXTsgdGhlbgorKyAgICAgICAgICAgIENGR19QVUxTRUFVRElPPSIkVkFMIgorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIFVOS05PV05fT1BUPXllcworKyAgICAgICAgZmkKKysgICAgICAgIDs7CisgICAgIGd0a3N0eWxlKQorICAgICAgICAgaWYgWyAiJFZBTCIgPSAieWVzIiBdIHx8IFsgIiRWQUwiID0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgQ0ZHX1FHVEtTVFlMRT0iJFZBTCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2QyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAxZjFkYTJmMjRkMzAyOGIyNTBkYmMyZTk4ZTJiN2UzNzg2MmIzNzcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjU0OjM4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMjFdIEZpeGVzIGZvciBnY2MgNC43LjAsIHBhcnRpY3VsYXJseSBvbiBxZW11eDg2CisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzkzNjMxCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMTM4NDgKKworQnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNjgKK0J1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNTg0CisKK1JQIDIwMTIvMDQvMzAKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICB8IDIgKy0KKyBzcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgICAgICAgICAgICB8IDIgKy0KKyAuLi4vd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmggICB8IDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAoraW5kZXggMzJlNDdjYS4uYjhlNzM4OSAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorQEAgLTEwODAsNyArMTA4MCw3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQorIHsKKyAgICAgLy8gUmVmIGN1cnJlbnRTdHlsZSBpbiBjYXNlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSBkZWxldGVkIHdoZW4gc2V0UmVuZGVyU3R5bGUoKSBpcyBjYWxsZWQuCisgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VycmVudFN0eWxlKHJlbmRlclN0eWxlKCkpOworLSAgICBib29sIGhhc1BhcmVudFN0eWxlID0gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCkgPyBwYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKS0+cmVuZGVyU3R5bGUoKSA6IGZhbHNlOworKyAgICBib29sIGhhc1BhcmVudFN0eWxlID0gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCkgPyBzdGF0aWNfY2FzdDxib29sPihwYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKS0+cmVuZGVyU3R5bGUoKSkgOiBmYWxzZTsKKyAgICAgYm9vbCBoYXNEaXJlY3RBZGphY2VudFJ1bGVzID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOworICAgICBib29sIGhhc0luZGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKK2luZGV4IGQ2NjA3NWUuLmFiOGYxMTEgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorQEAgLTc0LDcgKzc0LDcgQEAgUGFzc1JlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KgorICAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBhZG9wdFJlZihuZXcgSFRNTEltYWdlRWxlbWVudChpbWdUYWcsIGRvY3VtZW50KSk7CisgICAgIGlmIChvcHRpb25hbFdpZHRoKQorICAgICAgICAgaW1hZ2UtPnNldFdpZHRoKCpvcHRpb25hbFdpZHRoKTsKKy0gICAgaWYgKG9wdGlvbmFsSGVpZ2h0ID4gMCkKKysgICAgaWYgKG9wdGlvbmFsSGVpZ2h0KQorICAgICAgICAgaW1hZ2UtPnNldEhlaWdodCgqb3B0aW9uYWxIZWlnaHQpOworICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworIH0KK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmggYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKK2luZGV4IDYwODdlYzMuLjZkNzQ4ZjYgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaAorQEAgLTI1LDYgKzI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeworICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCB7CisgcHVibGljOgorKyAgICB2aXJ0dWFsIH5UaWxlZEJhY2tpbmdTdG9yZUNsaWVudCgpIHsgfQorICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkgPSAwOworICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKSA9IDA7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmM5MDIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyMS1jb25maWd1cmUtbWFrZS1xdDQtbmF0aXZlLXdvcmstd2l0aC1sb25nLWJ1aWxkaW5nLXBhLnBhdGNoCkBAIC0wLDAgKzEsOTUgQEAKK0Zyb20gNjc0MmFjN2VhNmZkMWU5YzgyZWNiNTMwNWY4NGU3MjEyNDJmODU3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNSBEZWMgMjAxMiAwNzo0ODoxNSArMDIwMAorU3ViamVjdDogW1BBVENIIDIxLzIxXSBjb25maWd1cmU6IG1ha2UgcXQ0LW5hdGl2ZSB3b3JrIHdpdGggbG9uZyBidWlsZGluZworIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1JlZmVyZW5jZTogaHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0yODI5MgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBhNGE0MmYxLi4yMzU4NTYzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00Nzc5LDggKzQ3NzksOCBAQCBERU1PU19QQVRIX1NUUj1gIiRyZWxwYXRoL2NvbmZpZy50ZXN0cy91bml4L3BhZHN0cmluZyIgMjY4ICJxdF9kZW1vcGF0aD0kUVRfSU5TVAorIFRPREFZPWBkYXRlICslWS0lbS0lZGAKKyBjYXQgPiAiJG91dHBhdGgvc3JjL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuY3BwLm5ldyIgPDxFT0YKKyAvKiBMaWNlbnNlIEluZm8gKi8KKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWVfc3RyICAgICAgICAgIFsyNTYgKyAxMl0gPSAiJExJQ0VOU0VfVVNFUl9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZF9wcm9kdWN0c19zdHIgWzI1NiArIDEyXSA9ICIkTElDRU5TRV9QUk9EVUNUU19TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZV9zdHIgICAgICAgICAgWzUxMiArIDEyXSA9ICIkTElDRU5TRV9VU0VSX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VkX3Byb2R1Y3RzX3N0ciBbNTEyICsgMTJdID0gIiRMSUNFTlNFX1BST0RVQ1RTX1NUUiI7CisgCisgLyogSW5zdGFsbGF0aW9uIGRhdGUgKi8KKyBzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW5zdGFsbGF0aW9uICAgICAgICAgIFsxMisxMV0gICAgPSAicXRfaW5zdGRhdGU9JFRPREFZIjsKK0BAIC00ODA1LDM2ICs0ODA1LDM2IEBAIGlmIFsgISAteiAiJFFUX0hPU1RfUFJFRklYIiBdOyB0aGVuCisgCisgI2lmIGRlZmluZWQoUVRfQk9PVFNUUkFQUEVEKSB8fCBkZWZpbmVkKFFUX0JVSUxEX1FNQUtFKQorIC8qIEluc3RhbGxhdGlvbiBJbmZvICovCistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUUFJFRklYX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZG9jdW1lbnRhdGlvbl9wYXRoX3N0clsyNTYgKyAxMl0gPSAiJEhPU1RET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RIRUFERVJTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RMSUJSQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9iaW5hcmllc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkSE9TVEJJTkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RQTFVHSU5TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RJTVBPUlRTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGF0YV9wYXRoX3N0ciAgICAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1REQVRBX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFsyNTYgKyAxMl0gPSAiJEhPU1RUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkSE9TVFNFVFRJTkdTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZXhhbXBsZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RFWEFNUExFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUREVNT1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVFBSRUZJWF9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbNTEyICsgMTJdID0gIiRIT1NURE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIT1NUSEVBREVSU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbNTEyICsgMTJdID0gIiRIT1NUTElCUkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RCSU5BUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIT1NUUExVR0lOU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIT1NUSU1QT1JUU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbNTEyICsgMTJdID0gIiRIT1NUREFUQV9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbNTEyICsgMTJdID0gIiRIT1NUVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RTRVRUSU5HU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NURVhBTVBMRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVERFTU9TX1BBVEhfU1RSIjsKKyAjZWxzZSAvLyBRVF9CT09UU1RSQVBQRUQKKyBFT0YKKyBmaQorIAorIGNhdCA+PiAiJG91dHBhdGgvc3JjL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuY3BwLm5ldyIgPDxFT0YKKyAvKiBJbnN0YWxsYXRpb24gSW5mbyAqLworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzI1NiArIDEyXSA9ICIkUFJFRklYX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZG9jdW1lbnRhdGlvbl9wYXRoX3N0clsyNTYgKyAxMl0gPSAiJERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSEVBREVSU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbMjU2ICsgMTJdID0gIiRMSUJSQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9iaW5hcmllc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkQklOQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkUExVR0lOU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRJTVBPUlRTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGF0YV9wYXRoX3N0ciAgICAgICAgIFsyNTYgKyAxMl0gPSAiJERBVEFfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzI1NiArIDEyXSA9ICIkVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJFNFVFRJTkdTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZXhhbXBsZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEVYQU1QTEVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFsyNTYgKyAxMl0gPSAiJERFTU9TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFs1MTIgKyAxMl0gPSAiJFBSRUZJWF9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbNTEyICsgMTJdID0gIiRET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJEhFQURFUlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzUxMiArIDEyXSA9ICIkTElCUkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEJJTkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJFBMVUdJTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSU1QT1JUU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbNTEyICsgMTJdID0gIiREQVRBX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFs1MTIgKyAxMl0gPSAiJFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRTRVRUSU5HU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRFWEFNUExFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbNTEyICsgMTJdID0gIiRERU1PU19QQVRIX1NUUiI7CisgRU9GCisgCisgaWYgWyAhIC16ICIkUVRfSE9TVF9QUkVGSVgiIF07IHRoZW4KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMGFlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwNDYwZTJhNWYxM2FhZjAwODFjM2M5ZmVjODkyODAwNDY4NDJkZGJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDMgSnVsIDIwMTMgMTc6NDg6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdG9vbHMucHJvOiBkaXNhYmxlIHFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyCisKK1dlIGRvbid0IHdhbnQgdGhpcyBlbmFibGVkIGp1c3QgYmVjYXVzZSB3ZSBoYXZlIEVHTCBhbmQgT3BlbkdMIEVTIDIuMAorZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgdG9vbHMvdG9vbHMucHJvIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvdG9vbHMucHJvIGIvdG9vbHMvdG9vbHMucHJvCitpbmRleCAwZTI3MDUzLi4yZDNmMzZkIDEwMDY0NAorLS0tIGEvdG9vbHMvdG9vbHMucHJvCisrKysgYi90b29scy90b29scy5wcm8KK0BAIC00OSw0ICs0OSw0IEBAIFFURElSX2J1aWxkOlJFUVVJUkVTID0gImNvbnRhaW5zKFFUX0NPTkZJRywgZnVsbC1jb25maWcpIgorIAorICF3aW4zMjohZW1iZWRkZWQ6IW1hYzohc3ltYmlhbjpDT05GSUcgKz0geDExCisgCisteDExOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTpjb250YWlucyhRVF9DT05GSUcsIGVnbCk6U1VCRElSUyArPSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorKyN4MTE6Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpOmNvbnRhaW5zKFFUX0NPTkZJRywgZWdsKTpTVUJESVJTICs9IHFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZTJmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSBmMWI3NmMxMjZjNDc2YzE1NWFmOGM0MDRiOTdjNDJjZDFhNzA5MzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGFycyBLbm9sbCA8bGFycy5rbm9sbEBkaWdpYS5jb20+CitEYXRlOiBUaHUsIDI0IEFwciAyMDE0IDE1OjMzOjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IGNyYXNoIG9uIGJyb2tlbiBHSUYgaW1hZ2VzCisKK0Jyb2tlbiBHSUYgaW1hZ2VzIGNvdWxkIHNldCBpbnZhbGlkIHdpZHRoIGFuZCBoZWlnaHQKK3ZhbHVlcyBpbnNpZGUgdGhlIGltYWdlLCBsZWFkaW5nIHRvIFF0IGNyZWF0aW5nIGEgbnVsbAorUUltYWdlIGZvciBpdC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gYWJvcnQgZGVjb2RpbmcKK3RoZSBpbWFnZSBhbmQgcmV0dXJuIGFuIGVycm9yLgorCitJbml0aWFsIHBhdGNoIGJ5IFJpY2ggTW9vcmUuCisKK0JhY2twb3J0IG9mIElkODJhNDAzNmY0NzhiZDZlNDljNDAyZDY1OThmNTdlN2U1YmI1ZTFlIGZyb20gUXQgNQorCitUYXNrLW51bWJlcjogUVRCVUctMzgzNjcKK0NoYW5nZS1JZDogSTA2ODA3NDAwMThhYWE4MzU2ZDI2N2I3YWYzZjAxZmFjMzY5NzMxMmEKK1NlY3VyaXR5LWFkdmlzb3J5OiBDVkUtMjAxNC0wMTkwCitSZXZpZXdlZC1ieTogUmljaGFyZCBKLiBNb29yZSA8cmljaEBrZGUub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcCBiL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCitpbmRleCAzMzI0ZjA0Li41MTk5ZGQzIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAKKysrKyBiL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCitAQCAtMzU5LDYgKzM1OSwxMyBAQCBpbnQgUUdJRkZvcm1hdDo6ZGVjb2RlKFFJbWFnZSAqaW1hZ2UsIGNvbnN0IHVjaGFyICpidWZmZXIsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoYml0cywgMCwgaW1hZ2UtPmJ5dGVDb3VudCgpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJldmlvdXMgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGltYWdlIGZhaWxlZC4gSWYgaXQKKysgICAgICAgICAgICAgICAgLy8gZGlkIHRoZW4gdGhlIGltYWdlIGlzIGJyb2tlbiBhbmQgd2Ugc2hvdWxkIGdpdmUgdXAuCisrICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNOdWxsKCkpIHsKKysgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gRXJyb3I7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICAgICAgICAgIH0KKysKKyAgICAgICAgICAgICAgICAgZGlzcG9zZVByZXZpb3VzKGltYWdlKTsKKyAgICAgICAgICAgICAgICAgZGlzcG9zZWQgPSBmYWxzZTsKKyAKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0YzJhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0OTEgQEAKK0Zyb20gMjk0MDEwYjU2MmM5ODQ2YmIyYmM0ZWU5YzYzZmY3OGFkYzdjMWY0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9MaXNhbmRybz0yMERhbWk9QzM9QTFuPTIwTmljYW5vcj0yMFA9QzM9QTlyZXo9MjBNZXllcj89CisgPHBlcmV6bWV5ZXJAZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBNYXIgMjAxNCAxNTo0MDo0OSAtMDMwMAorU3ViamVjdDogW1BBVENIXSBBZGQgcWF0b21pYyBzdXBwb3J0IGZvciBBQXJjaDY0IChha2EgYXJtNjQpLgorCitQYXRjaCBieSBNYXJrIFNhbHRlciA8bXNhbHRlckByZWRoYXQuY29tPgorbGljZW5zZWQgdW5kZXIgQlNEOgorCis8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz03MzU0ODgjMTk1PgorCitUaGlzIHBhdGNoIGlzIGtub3duIHRvIG5vdCBiZSB0aGUgbW9zdCBjb3JyZWN0IHdheQordG8gaW1wbGVtZW50IHRoZW0sIGFzIGl0IHNlZW1zIHRvIGJlIHBvc3NpYmxlIHRvIGRvIGl0IGluIGEgZmFzdGVyIHdheSwKK2J1dCBzaG91bGQgd29yayBub24gdGhlIGxlc3MgdW50aWwgd2UgY2FuIHByb3ZpZGUgc29tZXRoaW5nIGJldHRlci4KKworQ2hhbmdlLUlkOiBJYjM5MmIyN2RjNTQ2OTFmZDRjMmVhOTg5NjI0MGFkNzFmYjgxMjhjYworCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpICAgICAgICAgICAgfCAgIDQgKworIHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwIHwgIDcwICsrKysrKworIHNyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCisgc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCAgICAgICAgICAgfCAzMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCAgICAgICAgICAgICAgfCAgIDIgKworIDUgZmlsZXMgY2hhbmdlZCwgNDE0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgKKworZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaSBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjYzNTIzZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorQEAgLTAsMCArMSw0IEBACisrIworKyMgQUFyY2g2NCBhcmNoaXRlY3R1cmUKKysjCisrU09VUkNFUyArPSAkJFFUX0FSQ0hfQ1BQL3FhdG9taWNfYWFyY2g2NC5jcHAKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcCBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZmM4NTFiOQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAKK0BAIC0wLDAgKzEsNzAgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFF0Q29yZSBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgorKworKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKysjIGluY2x1ZGUgPHNjaGVkLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPHRpbWUuaD4KKysKKytRVF9CRUdJTl9OQU1FU1BBQ0UKKysKKytRVF9VU0VfTkFNRVNQQUNFCisrCisrUV9DT1JFX0VYUE9SVCB2b2lkIHF0X2F0b21pY195aWVsZChpbnQgKmNvdW50KQorK3sKKysjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKysgICAgaWYgKCgqY291bnQpKysgPCA1MCkgeworKyAgICAgICAgc2NoZWRfeWllbGQoKTsKKysgICAgfSBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0bTsKKysgICAgICAgIHRtLnR2X3NlYyA9IDA7CisrICAgICAgICB0bS50dl9uc2VjID0gMjAwMDAwMTsKKysgICAgICAgIG5hbm9zbGVlcCgmdG0sIE5VTEwpOworKyAgICAgICAgKmNvdW50ID0gMDsKKysgICAgfQorK30KKysKKytRVF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaSBiL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkKK2luZGV4IGNkMjNlNWUuLmY1MGZjYTcgMTAwNjQ0CistLS0gYS9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCitAQCAtMzEsNyArMzEsOSBAQCBpbnRlZ3JpdHk6SEVBREVSUyArPSBhcmNoL3FhdG9taWNfaW50ZWdyaXR5LmgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zMzkwLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX3g4Nl82NC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zaC5oIFwKKy0gICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zaDRhLmgKKysgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zaDRhLmggXAorKyAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX2FhcmNoNjQuaCBcCisrCisgCisgUVRfQVJDSF9DUFAgPSAkJFFUX1NPVVJDRV9UUkVFL3NyYy9jb3JlbGliL2FyY2gvJCRRVF9BUkNICisgREVQRU5EUEFUSCArPSAkJFFUX0FSQ0hfQ1BQCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCBiL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kZTYxY2E4CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCitAQCAtMCwwICsxLDMzNSBAQAorKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKioKKysqKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKysqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisrKioKKysqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUXRDb3JlIG1vZHVsZSBvZiB0aGUgUXQgVG9vbGtpdC4KKysqKgorKyoqICRRVF9CRUdJTl9MSUNFTlNFOkxHUEwkCisrKiogQ29tbWVyY2lhbCBMaWNlbnNlIFVzYWdlCisrKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKyoqIFNvZnR3YXJlIG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbgorKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKysqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vcXQuZGlnaWEuY29tL2xpY2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisrKiogdXNlIHRoZSBjb250YWN0IGZvcm0gYXQgaHR0cDovL3F0LmRpZ2lhLmNvbS9jb250YWN0LXVzLgorKyoqCisrKiogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlcgorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuTEdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgcmVxdWlyZW1lbnRzCisrKiogd2lsbCBiZSBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKysqKgorKyoqIEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBEaWdpYSBnaXZlcyB5b3UgY2VydGFpbiBhZGRpdGlvbmFsCisrKiogcmlnaHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisrKiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBpbiB0aGlzIHBhY2thZ2UuCisrKioKKysqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlCisrKiogbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisrKioKKysqKgorKyoqICRRVF9FTkRfTElDRU5TRSQKKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2lmbmRlZiBRQVRPTUlDX0FBUkNINjRfSAorKyNkZWZpbmUgUUFUT01JQ19BQVJDSDY0X0gKKysKKytRVF9CRUdJTl9IRUFERVIKKysKKytRVF9CRUdJTl9OQU1FU1BBQ0UKKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9SRUZFUkVOQ0VfQ09VTlRJTkdfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNSZWZlcmVuY2VDb3VudGluZ05hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNSZWZlcmVuY2VDb3VudGluZ1dhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX1RFU1RfQU5EX1NFVF9JU19BTFdBWVNfTkFUSVZFCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1Rlc3RBbmRTZXROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzVGVzdEFuZFNldFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX0ZFVENIX0FORF9TVE9SRV9JU19BTFdBWVNfTkFUSVZFCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kU3RvcmVOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRTdG9yZVdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX0ZFVENIX0FORF9BRERfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZEFkZE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZEFkZFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfUE9JTlRFUl9URVNUX0FORF9TRVRfSVNfQUxXQVlTX05BVElWRQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNUZXN0QW5kU2V0TmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc1Rlc3RBbmRTZXRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX1BPSU5URVJfRkVUQ0hfQU5EX1NUT1JFX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRTdG9yZU5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZFN0b3JlV2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19QT0lOVEVSX0ZFVENIX0FORF9BRERfSVNfQUxXQVlTX05BVElWRQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZEFkZE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZEFkZFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNpZm5kZWYgUV9EQVRBX01FTU9SWV9CQVJSSUVSCisrIyBkZWZpbmUgUV9EQVRBX01FTU9SWV9CQVJSSUVSIGFzbSB2b2xhdGlsZSgiZG1iIHN5XG4iOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrI2lmbmRlZiBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSCisrIyBkZWZpbmUgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUiBhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKKysjZW5kaWYKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnJlZigpCisreworKyAgICBpbnQgbmV3VmFsdWU7CisrCisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIG5ld1ZhbHVlID0gX19hdG9taWNfYWRkX2ZldGNoKCZfcV92YWx1ZSwgMSwgX19BVE9NSUNfQUNRX1JFTCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrCisrICAgIHJldHVybiBuZXdWYWx1ZSAhPSAwOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmRlcmVmKCkKKyt7CisrICAgIGludCBuZXdWYWx1ZTsKKysKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgbmV3VmFsdWUgPSBfX2F0b21pY19zdWJfZmV0Y2goJl9xX3ZhbHVlLCAxLCBfX0FUT01JQ19BQ1FfUkVMKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysKKysgICAgcmV0dXJuIG5ld1ZhbHVlICE9IDA7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldFJlbGF4ZWQoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgdmFsOworKworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uICgmX3FfdmFsdWUsICZleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIF9fQVRPTUlDX1JFTEFYRUQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRTdG9yZVJlbGF4ZWQoaW50IG5ld1ZhbHVlKQorK3sKKysgICAgaW50IHZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZXhjaGFuZ2VfbigmX3FfdmFsdWUsIG5ld1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkUmVsYXhlZChpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIGludCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2ZldGNoX2FkZCgmX3FfdmFsdWUsIHZhbHVlVG9BZGQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRSZWxheGVkKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgYm9vbCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9ICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24gKCZfcV92YWx1ZSwgJmV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgX19BVE9NSUNfUkVMQVhFRCwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVSZWxheGVkKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgVCAqdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19leGNoYW5nZV9uKCZfcV92YWx1ZSwgbmV3VmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZFJlbGF4ZWQocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFQgKnZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZmV0Y2hfYWRkKCZfcV92YWx1ZSwgdmFsdWVUb0FkZCwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldEFjcXVpcmUoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRSZWxlYXNlKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldE9yZGVyZWQoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRTdG9yZUFjcXVpcmUoaW50IG5ld1ZhbHVlKQorK3sKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVSZWxlYXNlKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVPcmRlcmVkKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZEFjcXVpcmUoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRSZWxlYXNlKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRPcmRlcmVkKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0QWNxdWlyZShUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRSZWxlYXNlKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRPcmRlcmVkKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldEFjcXVpcmUoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVBY3F1aXJlKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgVCAqcmV0dXJuVmFsdWUgPSBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlUmVsZWFzZShUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZU9yZGVyZWQoVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkQWNxdWlyZShxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgVCAqcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZFJlbGVhc2UocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRPcmRlcmVkKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworKyN1bmRlZiBRX0RBVEFfTUVNT1JZX0JBUlJJRVIKKysjdW5kZWYgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUgorKworK1FUX0VORF9OQU1FU1BBQ0UKKysKKytRVF9FTkRfSEVBREVSCisrCisrI2VuZGlmIC8vIFFBVE9NSUNfQUFSQ0g2NF9ICitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCBiL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmgKK2luZGV4IDE0MTcyNmMuLjNlOTY5MjYgMTAwNjQ0CistLS0gYS9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCitAQCAtOTQsNiArOTQsOCBAQCBRVF9CRUdJTl9IRUFERVIKKyAjICBpbmNsdWRlICJRdENvcmUvcWF0b21pY19zaDRhLmgiCisgI2VsaWYgZGVmaW5lZChRVF9BUkNIX05BQ0wpCisgIyAgaW5jbHVkZSAiUXRDb3JlL3FhdG9taWNfZ2VuZXJpYy5oIgorKyNlbGlmIGRlZmluZWQoUVRfQVJDSF9BQVJDSDY0KQorKyMgIGluY2x1ZGUgIlF0Q29yZS9xYXRvbWljX2FhcmNoNjQuaCIKKyAjZWxzZQorICMgIGVycm9yICJRdCBoYXMgbm90IGJlZW4gcG9ydGVkIHRvIHRoaXMgYXJjaGl0ZWN0dXJlIgorICNlbmRpZgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzEtYWFyY2g2NF9hcm02NF9ta3NwZWNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaApAQCAtMCwwICsxLDEyNCBAQAorRnJvbSA3MDkwZmM4MGZmNjMwNzEyYTkwZGU5MjQwMzE5MGY2NDdkZDM4YTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0xpc2FuZHJvPTIwRGFtaT1DMz1BMW49MjBOaWNhbm9yPTIwUD1DMz1BOXJlej0yME1leWVyPz0KKyA8cGVyZXptZXllckBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE1IE1hciAyMDE0IDE1OjM1OjAwIC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1rc3BlY3MgZm9yIEFBcmNoNjQgKGFrYSBhcm02NCkuCisKK1BhdGNoIGJ5IE1hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luQGp1c3praWV3aWN6LmNvbS5wbD4KK2xpY2Vuc2VkIHVuZGVyIGVpdGhlciBQdWJsaWMgRG9tYWluIG9yIEJTRDoKKworPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzM1NDg4IzE3OT4KKworQ2hhbmdlLUlkOiBJMjFmMTc5NTMyMzRjZmIxNzZiYWMwMjNlNTJlY2RjOTI3ZmM1YzFhOQorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMyArKysKKyBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYgICAgICB8IDI3ICsrKysrKysrKysrKysrKysrKysrCisgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmggfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcW1ha2UuY29uZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaAorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBhOWJhN2M4Li5lNTdkMDUzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0yODA4LDYgKzI4MDgsOSBAQCBpZiBbICIkQ0ZHX0VNQkVEREVEIiAhPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICAqODZfNjQpCisgICAgICAgICAgICAgICAgIFBMQVRGT1JNPXF3cy9saW51eC14ODZfNjQtZysrCisgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgYWFyY2g2NCkKKysgICAgICAgICAgICAgICAgUExBVEZPUk09bGludXgtYWFyY2g2NC1nKysKKysgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICBQTEFURk9STT1xd3MvbGludXgtZ2VuZXJpYy1nKysKKyAgICAgICAgICAgICAgICAgOzsKK2RpZmYgLS1naXQgYS9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYgYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lYmMwYTkyCistLS0gL2Rldi9udWxsCisrKysgYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKK0BAIC0wLDAgKzEsMjcgQEAKKysjCisrIyBxbWFrZSBjb25maWd1cmF0aW9uIGZvciBsaW51eC1nKysKKysjCisrIyBXcml0dGVuIGZvciBHTlUvTGludXggcGxhdGZvcm1zIHRoYXQgaGF2ZSBib3RoIGxpYiBhbmQgbGliNjQgZGlyZWN0b3JpZXMsCisrIyBsaWtlIHRoZSBBTUQgT3B0ZXJvbi4KKysjCisrCisrTUFLRUZJTEVfR0VORVJBVE9SICAgID0gVU5JWAorK1RBUkdFVF9QTEFURk9STSAgICAgICA9IHVuaXgKKytURU1QTEFURSAgICAgICAgICAgICAgPSBhcHAKKytDT05GSUcgICAgICAgICAgICAgICArPSBxdCB3YXJuX29uIHJlbGVhc2UgaW5jcmVtZW50YWwgbGlua19wcmwgZ2RiX2R3YXJmX2luZGV4CisrUVQgICAgICAgICAgICAgICAgICAgKz0gY29yZSBndWkKKytRTUFLRV9JTkNSRU1FTlRBTF9TVFlMRSA9IHN1YmxpYgorKworK1FNQUtFX0NGTEFHUyAgICAgPQorK1FNQUtFX0xGTEFHUyAgICAgPQorKworK1FNQUtFX0NGTEFHU19SRUxFQVNFICAgKz0gLU8yCisrCisraW5jbHVkZSguLi9jb21tb24vbGludXguY29uZikKKytpbmNsdWRlKC4uL2NvbW1vbi9nY2MtYmFzZS11bml4LmNvbmYpCisraW5jbHVkZSguLi9jb21tb24vZysrLXVuaXguY29uZikKKysKKytRTUFLRV9MSUJESVJfWDExICAgICAgPSAvdXNyL1gxMVI2L2xpYjY0CisrUU1BS0VfTElCRElSX09QRU5HTCAgID0gL3Vzci9YMTFSNi9saWI2NAorKworK2xvYWQocXRfY29uZmlnKQorZGlmZiAtLWdpdCBhL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41NjIxMjhiCistLS0gL2Rldi9udWxsCisrKysgYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaAorQEAgLTAsMCArMSw0MiBAQAorKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKioKKysqKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKysqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisrKioKKysqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcW1ha2Ugc3BlYyBvZiB0aGUgUXQgVG9vbGtpdC4KKysqKgorKyoqICRRVF9CRUdJTl9MSUNFTlNFOkxHUEwkCisrKiogQ29tbWVyY2lhbCBMaWNlbnNlIFVzYWdlCisrKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKyoqIFNvZnR3YXJlIG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbgorKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKysqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vcXQuZGlnaWEuY29tL2xpY2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisrKiogdXNlIHRoZSBjb250YWN0IGZvcm0gYXQgaHR0cDovL3F0LmRpZ2lhLmNvbS9jb250YWN0LXVzLgorKyoqCisrKiogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlcgorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuTEdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgcmVxdWlyZW1lbnRzCisrKiogd2lsbCBiZSBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKysqKgorKyoqIEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBEaWdpYSBnaXZlcyB5b3UgY2VydGFpbiBhZGRpdGlvbmFsCisrKiogcmlnaHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisrKiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBpbiB0aGlzIHBhY2thZ2UuCisrKioKKysqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlCisrKiogbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisrKioKKysqKgorKyoqICRRVF9FTkRfTElDRU5TRSQKKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2luY2x1ZGUgIi4uL2xpbnV4LWcrKy9xcGxhdGZvcm1kZWZzLmgiCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4Zjc4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0FkZCBtaXNzaW5nIGhlYWRlciBmb3IgYWFyY2g2NC4gQW5kIGluc3RhbGwgLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLU5ydSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42Lm9yaWcvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmggcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9xYXRvbWljX2FhcmNoNjQuaAorLS0tIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYub3JpZy9pbmNsdWRlL1F0Q29yZS9xYXRvbWljX2FhcmNoNjQuaAkxOTcwLTAxLTAxIDA4OjMwOjAwLjAwMDAwMDAwMCArMDgzMAorKysrIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgJMjAxNC0wOS0wOSAxNzoxODowMy43NjgzNTI1NTEgKzA4MDAKK0BAIC0wLDAgKzEgQEAKKysjaW5jbHVkZSAiLi4vLi4vc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCIKKy0tLSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL2hlYWRlcnMucHJpLm9yaWcJMjAxNC0wOS0wOSAxODowNTozNy4xMDA0MzAzMTEgKzA4MDAKKysrKyBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL2hlYWRlcnMucHJpCTIwMTQtMDktMDkgMTg6MDU6NTkuMTEyNDMwOTExICswODAwCitAQCAtMSwzICsxLDMgQEAKKy1TWU5DUVQuSEVBREVSX0ZJTEVTID0gLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0ZXZlbnRkaXNwYXRjaGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsLmggLi4vY29yZWxpYi9rZXJuZWwvcWJhc2ljdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVldmVudC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGxvb3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX25hY2wuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3Z4d29ya3MuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3dpbmNlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1hdGguaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhdHlwZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtaW1lZGF0YS5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0Y2xlYW51cGhhbmRsZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0ZGVmcy5oIC4uL2NvcmVsaWIva2VybmVsL3Fwb2ludGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNoYXJlZG1lbW9yeS5oIC4uL2NvcmVsaWIva2VybmVsL3FzaWduYWxtYXBwZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc29ja2V0bm90aWZpZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtc2VtYXBob3JlLmggLi4vY29yZWxpYi9rZXJuZWwvcXRpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3IuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhdXNlYW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXNlcXVlbnRpYWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWxwaGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjUuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY3LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXZyMzIuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19iZmluLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYm9vdHN0cmFwLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfZ2VuZXJpYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2kzODYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pYTY0LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaW50ZWdyaXR5LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbTY4ay5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21hY29zeC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21pcHMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wYXJpc2MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wb3dlcnBjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfczM5MC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc2g0YS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NwYXJjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc3ltYmlhbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3Z4d29ya3MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY193aW5kb3dzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93c2NlLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfeDg2XzY0LmggLi4vY29yZWxpYi90b29scy9xYWxnb3JpdGhtcy5oIC4uL2NvcmVsaWIvdG9vbHMvcWJpdGFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5bWF0Y2hlci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNhY2hlLmggLi4vY29yZWxpYi90b29scy9xY2hhci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRhaW5lcmZ3ZC5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRpZ3VvdXNjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNyeXB0b2dyYXBoaWNoYXNoLmggLi4vY29yZWxpYi90b29scy9xZGF0ZXRpbWUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlYXNpbmdjdXJ2ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWVsYXBzZWR0aW1lci5oIC4uL2NvcmVsaWIvdG9vbHMvcWhhc2guaCAuLi9jb3JlbGliL3Rvb2xzL3FpdGVyYXRvci5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5rZWRsaXN0LmggLi4vY29yZWxpYi90b29scy9xbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9ibGFja2JlcnJ5LmggLi4vY29yZWxpYi90b29scy9xbWFwLmggLi4vY29yZWxpYi90b29scy9xbWFyZ2lucy5oIC4uL2NvcmVsaWIvdG9vbHMvcXBhaXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2ludC5oIC4uL2NvcmVsaWIvdG9vbHMvcXF1ZXVlLmggLi4vY29yZWxpYi90b29scy9xcmVjdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlZ2V4cC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWR2YWx1ZXJvbGxiYWNrLmggLi4vY29yZWxpYi90b29scy9xc2V0LmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkZGF0YS5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyX2ltcGwuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaXplLmggLi4vY29yZWxpYi90b29scy9xc3RhY2suaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmcuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdidWlsZGVyLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ21hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0ZXh0Ym91bmRhcnlmaW5kZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0aW1lbGluZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZhcmxlbmd0aGFycmF5LmggLi4vY29yZWxpYi90b29scy9xdmVjdG9yLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3RvcnlpbnRlcmZhY2UuaCAuLi9jb3JlbGliL3BsdWdpbi9xbGlicmFyeS5oIC4uL2NvcmVsaWIvcGx1Z2luL3FwbHVnaW4uaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2lubG9hZGVyLmggLi4vY29yZWxpYi9wbHVnaW4vcXV1aWQuaCAuLi9jb3JlbGliL3htbC9xeG1sc3RyZWFtLmggLi4vY29yZWxpYi90aHJlYWQvcWF0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FiYXNpY2F0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrLmggLi4vY29yZWxpYi90aHJlYWQvcXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWQuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkc3RvcmFnZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F3YWl0Y29uZGl0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3R0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FmaW5hbHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWx0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlbWFjaGluZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVpbnRlcmZhY2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXN5bmNocm9uaXplci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJld2F0Y2hlci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xcnVubmFibGUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50Y29tcGlsZXJ0ZXN0LmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGV4Y2VwdGlvbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmaWx0ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVya2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZ1bmN0aW9ud3JhcHBlcnMuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50aXRlcmF0ZWtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtYXAuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwa2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1lZGlhbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRyZWR1Y2VrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVzdWx0c3RvcmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cnVuLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bmJhc2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50c3RvcmVkZnVuY3Rpb25jYWxsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHRocmVhZGVuZ2luZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGhyZWFkcG9vbC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZS5oIC4uL2NvcmVsaWIvaW8vcWJ1ZmZlci5oIC4uL2NvcmVsaWIvaW8vcWRhdGFzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3FkZWJ1Zy5oIC4uL2NvcmVsaWIvaW8vcWRpci5oIC4uL2NvcmVsaWIvaW8vcWRpcml0ZXJhdG9yLmggLi4vY29yZWxpYi9pby9xZmlsZS5oIC4uL2NvcmVsaWIvaW8vcWZpbGVpbmZvLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXIuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3Fpb2RldmljZS5oIC4uL2NvcmVsaWIvaW8vcXByb2Nlc3MuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZS5oIC4uL2NvcmVsaWIvaW8vcXNldHRpbmdzLmggLi4vY29yZWxpYi9pby9xdGVtcG9yYXJ5ZmlsZS5oIC4uL2NvcmVsaWIvaW8vcXRleHRzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3F1cmwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWRpc3QuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWxhcmdlLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1tZWRpdW0uaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW1pbmltYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW5hY2wuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLXNtYWxsLmggLi4vY29yZWxpYi9nbG9iYWwvcWVuZGlhbi5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FmZWF0dXJlcy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FnbG9iYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uaCAuLi9jb3JlbGliL2dsb2JhbC9xbmFtZXNwYWNlLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWMuaCAuLi9jb3JlbGliL2dsb2JhbC9xdF93aW5kb3dzLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWMuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjcGx1Z2luLmggLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb3JlIAorK1NZTkNRVC5IRUFERVJfRklMRVMgPSAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RldmVudGRpc3BhdGNoZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RpdGVtbW9kZWwuaCAuLi9jb3JlbGliL2tlcm5lbC9xYmFzaWN0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlYXBwbGljYXRpb24uaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWV2ZW50LmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50bG9vcC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfbmFjbC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfdnh3b3Jrcy5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfd2luY2UuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWF0aC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGF0eXBlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1pbWVkYXRhLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RjbGVhbnVwaGFuZGxlci5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RkZWZzLmggLi4vY29yZWxpYi9rZXJuZWwvcXBvaW50ZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2hhcmVkbWVtb3J5LmggLi4vY29yZWxpYi9rZXJuZWwvcXNpZ25hbG1hcHBlci5oIC4uL2NvcmVsaWIva2VybmVsL3Fzb2NrZXRub3RpZmllci5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1zZW1hcGhvcmUuaCAuLi9jb3JlbGliL2tlcm5lbC9xdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xdHJhbnNsYXRvci5oIC4uL2NvcmVsaWIva2VybmVsL3F2YXJpYW50LmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFic3RyYWN0YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhcmFsbGVsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGF1c2VhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcHJvcGVydHlhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xc2VxdWVudGlhbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXZhcmlhbnRhbmltYXRpb24uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hbHBoYS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm0uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12NS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjcuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXZyMzIuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19iZmluLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYm9vdHN0cmFwLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfZ2VuZXJpYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2kzODYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pYTY0LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaW50ZWdyaXR5LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbTY4ay5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21hY29zeC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21pcHMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wYXJpc2MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wb3dlcnBjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfczM5MC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc2g0YS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NwYXJjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc3ltYmlhbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3Z4d29ya3MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY193aW5kb3dzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93c2NlLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfeDg2XzY0LmggLi4vY29yZWxpYi90b29scy9xYWxnb3JpdGhtcy5oIC4uL2NvcmVsaWIvdG9vbHMvcWJpdGFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5bWF0Y2hlci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNhY2hlLmggLi4vY29yZWxpYi90b29scy9xY2hhci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRhaW5lcmZ3ZC5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRpZ3VvdXNjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNyeXB0b2dyYXBoaWNoYXNoLmggLi4vY29yZWxpYi90b29scy9xZGF0ZXRpbWUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlYXNpbmdjdXJ2ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWVsYXBzZWR0aW1lci5oIC4uL2NvcmVsaWIvdG9vbHMvcWhhc2guaCAuLi9jb3JlbGliL3Rvb2xzL3FpdGVyYXRvci5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5rZWRsaXN0LmggLi4vY29yZWxpYi90b29scy9xbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9ibGFja2JlcnJ5LmggLi4vY29yZWxpYi90b29scy9xbWFwLmggLi4vY29yZWxpYi90b29scy9xbWFyZ2lucy5oIC4uL2NvcmVsaWIvdG9vbHMvcXBhaXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2ludC5oIC4uL2NvcmVsaWIvdG9vbHMvcXF1ZXVlLmggLi4vY29yZWxpYi90b29scy9xcmVjdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlZ2V4cC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWR2YWx1ZXJvbGxiYWNrLmggLi4vY29yZWxpYi90b29scy9xc2V0LmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkZGF0YS5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyX2ltcGwuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaXplLmggLi4vY29yZWxpYi90b29scy9xc3RhY2suaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmcuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdidWlsZGVyLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ21hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0ZXh0Ym91bmRhcnlmaW5kZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0aW1lbGluZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZhcmxlbmd0aGFycmF5LmggLi4vY29yZWxpYi90b29scy9xdmVjdG9yLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3RvcnlpbnRlcmZhY2UuaCAuLi9jb3JlbGliL3BsdWdpbi9xbGlicmFyeS5oIC4uL2NvcmVsaWIvcGx1Z2luL3FwbHVnaW4uaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2lubG9hZGVyLmggLi4vY29yZWxpYi9wbHVnaW4vcXV1aWQuaCAuLi9jb3JlbGliL3htbC9xeG1sc3RyZWFtLmggLi4vY29yZWxpYi90aHJlYWQvcWF0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FiYXNpY2F0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrLmggLi4vY29yZWxpYi90aHJlYWQvcXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWQuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkc3RvcmFnZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F3YWl0Y29uZGl0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3R0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FmaW5hbHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWx0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlbWFjaGluZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVpbnRlcmZhY2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXN5bmNocm9uaXplci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJld2F0Y2hlci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xcnVubmFibGUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50Y29tcGlsZXJ0ZXN0LmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGV4Y2VwdGlvbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmaWx0ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVya2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZ1bmN0aW9ud3JhcHBlcnMuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50aXRlcmF0ZWtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtYXAuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwa2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1lZGlhbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRyZWR1Y2VrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVzdWx0c3RvcmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cnVuLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bmJhc2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50c3RvcmVkZnVuY3Rpb25jYWxsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHRocmVhZGVuZ2luZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGhyZWFkcG9vbC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZS5oIC4uL2NvcmVsaWIvaW8vcWJ1ZmZlci5oIC4uL2NvcmVsaWIvaW8vcWRhdGFzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3FkZWJ1Zy5oIC4uL2NvcmVsaWIvaW8vcWRpci5oIC4uL2NvcmVsaWIvaW8vcWRpcml0ZXJhdG9yLmggLi4vY29yZWxpYi9pby9xZmlsZS5oIC4uL2NvcmVsaWIvaW8vcWZpbGVpbmZvLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXIuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3Fpb2RldmljZS5oIC4uL2NvcmVsaWIvaW8vcXByb2Nlc3MuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZS5oIC4uL2NvcmVsaWIvaW8vcXNldHRpbmdzLmggLi4vY29yZWxpYi9pby9xdGVtcG9yYXJ5ZmlsZS5oIC4uL2NvcmVsaWIvaW8vcXRleHRzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3F1cmwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWRpc3QuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWxhcmdlLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1tZWRpdW0uaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW1pbmltYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW5hY2wuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLXNtYWxsLmggLi4vY29yZWxpYi9nbG9iYWwvcWVuZGlhbi5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FmZWF0dXJlcy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FnbG9iYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uaCAuLi9jb3JlbGliL2dsb2JhbC9xbmFtZXNwYWNlLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWMuaCAuLi9jb3JlbGliL2dsb2JhbC9xdF93aW5kb3dzLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWMuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjcGx1Z2luLmggLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb3JlIAorIFNZTkNRVC5IRUFERVJfQ0xBU1NFUyA9IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEV2ZW50RGlzcGF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTW9kZWxJbmRleCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGVyc2lzdGVudE1vZGVsSW5kZXggLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1vZGVsSW5kZXhMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEl0ZW1Nb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RUYWJsZU1vZGVsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdExpc3RNb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQmFzaWNUaW1lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29yZUFwcGxpY2F0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q2xlYW5VcEZ1bmN0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZXJFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2hpbGRFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ3VzdG9tRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUR5bmFtaWNQcm9wZXJ0eUNoYW5nZUV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudExvb3AgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFNZXRob2QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFFbnVtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhUHJvcGVydHkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFDbGFzc0luZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFUeXBlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZUlkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZUlkMiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWltZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RT2JqZWN0VXNlckRhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdENsZWFudXBIYW5kbGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHZW5lcmljQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdlbmVyaWNSZXR1cm5Bcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJldHVybkFyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0QWNjZXNzb3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFPYmplY3RFeHRyYURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNoYXJlZE1lbW9yeSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2lnbmFsTWFwcGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTb2NrZXROb3RpZmllciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzdGVtU2VtYXBob3JlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVHJhbnNsYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50Q29tcGFyaXNvbkhlbHBlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFuaW1hdGlvbkRyaXZlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQW5pbWF0aW9uR3JvdXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBhcmFsbGVsQW5pbWF0aW9uR3JvdXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBhdXNlQW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9wZXJ0eUFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2VxdWVudGlhbEFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50QW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0QWxnb3JpdGhtcyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQml0QXJyYXkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJpdFJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZUFycmF5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCeXRlUmVmIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCeXRlQXJyYXlNYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDYWNoZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGF0aW4xQ2hhciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2hhciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbnRhaW5lckZ3ZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlVHlwZWREYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb250aWd1b3VzQ2FjaGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNyeXB0b2dyYXBoaWNIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEYXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEYXRlVGltZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRWFzaW5nQ3VydmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUVsYXBzZWRUaW1lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hEdW1teVZhbHVlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoRHVtbXlOb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoTm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXVsdGlIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVIYXNoSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmVGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUxpbmtlZExpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlzdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUxpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzdGVtTG9jYWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMb2NhbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJCU3lzdGVtTG9jYWxlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwTm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwUGF5bG9hZE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXVsdGlNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlTWFwSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcmdpbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBhaXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBvaW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludEYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVF1ZXVlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWN0RiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVnRXhwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyRGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlckFycmF5RGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlclBvZERlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZEFycmF5UG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkVmFsdWVSb2xsYmFjayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZXRJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVNldEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWREYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWREYXRhUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWRQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FXZWFrUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2l6ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2l6ZUYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0YWNrIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGRXU3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMVN0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2hhclJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29uc3RTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ1JlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGF0aW4xTGl0ZXJhbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RDb25jYXRlbmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbmNhdGVuYWJsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nQnVpbGRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlU3RyaW5nTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdNYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0Qm91bmRhcnlGaW5kZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWVMaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJMZW5ndGhBcnJheSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yVHlwZWREYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3Rvckl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlVmVjdG9ySXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZhY3RvcnlJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpYnJhcnkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRQbHVnaW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRQbHVnaW5JbnN0YW5jZUZ1bmN0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQbHVnaW5Mb2FkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVV1aWQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVN0cmluZ1JlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtQXR0cmlidXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1BdHRyaWJ1dGVzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1Ob3RhdGlvbkRlY2xhcmF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1Ob3RhdGlvbkRlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtRW50aXR5RGVjbGFyYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eURlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtRW50aXR5UmVzb2x2ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVJlYWRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtV3JpdGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBdG9taWNJbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUF0b21pY1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJhc2ljQXRvbWljSW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCYXNpY0F0b21pY1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGV4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRleExvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0ZXhEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWFkV3JpdGVMb2NrIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWFkTG9ja2VyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FXcml0ZUxvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2VtYXBob3JlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRocmVhZFN0b3JhZ2VEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRTdG9yYWdlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FXYWl0Q29uZGl0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdFN0YXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdFRyYW5zaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV2ZW50VHJhbnNpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmluYWxTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGlzdG9yeVN0YXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaWduYWxUcmFuc2l0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RhdGVNYWNoaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlRnV0dXJlSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZUludGVyZmFjZUJhc2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZUludGVyZmFjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlU3luY2hyb25pemVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVXYXRjaGVyQmFzZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlV2F0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUnVubmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25jdXJyZW50RmlsdGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uY3VycmVudE1hcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmN1cnJlbnRSdW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRocmVhZFBvb2wgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RGaWxlRW5naW5lSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RGaWxlRW5naW5lSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ1ZmZlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0YVN0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdERlYnVnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTm9EZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGlyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEaXJJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZUluZm9MaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVTeXN0ZW1XYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGU0ZpbGVFbmdpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUlPRGV2aWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfUElEIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9jZXNzRW52aXJvbm1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVByb2Nlc3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlc291cmNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZXR0aW5ncyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGVtcG9yYXJ5RmlsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbUZ1bmN0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0U3RyZWFtTWFuaXB1bGF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRTIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0SVN0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dE9TdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVVybCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEVuZGlhbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEdsb2JhbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSW50ZWdlckZvclNpemUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU5vSW1wbGljaXRCb29sQ2FzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDggLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UOCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDE2IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDE2IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UMzIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UMzIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQ2NCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQ2NCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0xMT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUxMT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VMT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTeXNJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0TXNnSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2xvYmFsU3RhdGljIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHbG9iYWxTdGF0aWNEZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCb29sIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUeXBlSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmxhZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSW5jb21wYXRpYmxlRmxhZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmxhZ3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZvcmVhY2hDb250YWluZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZvcmVhY2hDb250YWluZXJCYXNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaWJyYXJ5SW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSW50ZXJuYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNPT1JEIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uZmlnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0Q29kZWMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRFbmNvZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0RGVjb2RlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjRmFjdG9yeUludGVyZmFjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjUGx1Z2luIAorIFNZTkNRVC5QUklWQVRFX0hFQURFUl9GSUxFUyA9IC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGV2ZW50ZGlzcGF0Y2hlcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV9tYWNfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlX3VuaXhfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlYXBwbGljYXRpb25fcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlY21kbGluZWFyZ3NfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlZ2xvYmFsZGF0YV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNyYXNoaGFuZGxlcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl9ibGFja2JlcnJ5X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX2dsaWJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfc3ltYmlhbl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl91bml4X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX3dpbl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc19wLmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGFvYmplY3RfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzaGFyZWRtZW1vcnlfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1lcnJvcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbXNlbWFwaG9yZV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3JfcC5oIC4uL2NvcmVsaWIva2VybmVsL3F2YXJpYW50X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xd2luZXZlbnRub3RpZmllcl9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFic3RyYWN0YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYW5pbWF0aW9uZ3JvdXBfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcHJvcGVydHlhbmltYXRpb25fcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FzZXF1ZW50aWFsYW5pbWF0aW9uZ3JvdXBfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FieXRlZGF0YV9wLmggLi4vY29yZWxpYi90b29scy9xZGF0ZXRpbWVfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWhhcmZidXp6X3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfZGF0YV9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfdG9vbHNfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXBvZGxpc3RfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXJpbmdidWZmZXJfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHBvaW50ZXJfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNpbWRfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXRvb2xzX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3F1bmljb2RldGFibGVzX3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xZWxmcGFyc2VyX3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xZmFjdG9yeWxvYWRlcl9wLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnlfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FzeXN0ZW1saWJyYXJ5X3AuaCAuLi9jb3JlbGliL3htbC9xeG1sc3RyZWFtX3AuaCAuLi9jb3JlbGliL3htbC9xeG1sdXRpbHNfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleF9wLmggLi4vY29yZWxpYi90aHJlYWQvcW11dGV4cG9vbF9wLmggLi4vY29yZWxpYi90aHJlYWQvcW9yZGVyZWRtdXRleGxvY2tlcl9wLmggLi4vY29yZWxpYi90aHJlYWQvcXJlYWR3cml0ZWxvY2tfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWRfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3R0cmFuc2l0aW9uX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZXZlbnR0cmFuc2l0aW9uX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xaGlzdG9yeXN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsZXZlbnRnZW5lcmF0b3JfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWx0cmFuc2l0aW9uX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmVfcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXJfcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGhyZWFkcG9vbF9wLmggLi4vY29yZWxpYi9pby9xYWJzdHJhY3RmaWxlZW5naW5lX3AuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtX3AuaCAuLi9jb3JlbGliL2lvL3FkYXRhdXJsX3AuaCAuLi9jb3JlbGliL2lvL3FkaXJfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVpbmZvX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtZW5naW5lX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtZW50cnlfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1pdGVyYXRvcl9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbW1ldGFkYXRhX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9kbm90aWZ5X3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9mc2V2ZW50c19wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfaW5vdGlmeV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfa3F1ZXVlX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfc3ltYmlhbl9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfd2luX3AuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmVfaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcWZzZmlsZWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2VfcC5oIC4uL2NvcmVsaWIvaW8vcW5vbmNvbnRpZ3VvdXNieXRlZGV2aWNlX3AuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzX3AuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZV9pdGVyYXRvcl9wLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2VfcC5oIC4uL2NvcmVsaWIvaW8vcXNldHRpbmdzX3AuaCAuLi9jb3JlbGliL2lvL3F0bGR1cmxfcC5oIC4uL2NvcmVsaWIvaW8vcXVybHRsZHNfcC5oIC4uL2NvcmVsaWIvaW8vcXdpbmRvd3NwaXBld3JpdGVyX3AuaCAuLi9jb3JlbGliL2dsb2JhbC9xbnVtZXJpY19wLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfcGNoLmggLi4vY29yZWxpYi9jb2RlY3MvcWZvbnRsYW9jb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcWljb252Y29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3Fpc2NpaWNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xbGF0aW5jb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXNpbXBsZWNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xdHNjaWljb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXV0ZmNvZGVjX3AuaCAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmFjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2NvbmZpZ3VyZTogc3VwcG9ydCBjKysweCBzdGFuZGFyZCBmb3IgZGlyZWN0ZmQKKworV2hpbGUgZGlyZWN0ZmQgdXBncmFkZSB0byAxLjcuNiwgaXQgYWx3YXlzIGluY2x1ZGVzIGRpcmVjdGZiKysgdXRpbHMKK3doZW4gQysrIGlzIHVzZWQgYW5kIHNldCBjKysweCBhcyBjKysgc3RhbmRhcmQuCisoSW4gZ2l0Oi8vZ2l0LmRpcmVjdGZiLm9yZy9naXQvZGlyZWN0ZmIvY29yZS9EaXJlY3RGQi5naXQKK2NvbW1pdCBiNDQ0YmNhZTMxOTdiZTlmYWY4ODM0NjBkY2MyMzllZjc1N2Q1OTIyLCBhbmQgY29tbWl0Cis1MjJiZWViNzZmMmE4ZDJkZWUzMGQ5MjhkMmE1OTU1YmQwNmNmMjVjKQorCitUaGUgZGlyZWN0ZmQgaW4gcXQ0IGlzIGMrKywgYW5kIHRoZXJlIHdhcyBhIGJ1aWxkIGZhaWx1cmU6CisuLi4KK3wgcWRpcmVjdGZid2luZG93c3VyZmFjZS5jcHA6MzM2OjY5OiBlcnJvcjogaW4gQysrOTggJ3JlY3QnIG11c3QgYmUKK2luaXRpYWxpemVkIGJ5IGNvbnN0cnVjdG9yLCBub3QgYnkgJ3suLi59JworfCAgICAgIGNvbnN0IERGQlJlY3RhbmdsZSByZWN0ID0geyByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSB9OworLi4uCisKK1RoZSBnKysgdXNlZCBjKys5OCBhcyBkZWZhdWx0IGMrKyBzdGFuZGFyZCwgd2Ugc2hvdWxkCitleHBsaWNpdGx5IHNldCBjKysweCBmb3IgZGlyZWN0ZmQgaW4gcXQ0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDU3MjRiZDYuLmVjYzJmOGIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY2NTYsNiArNjY1Niw3IEBAIGlmIFsgIiRQTEFURk9STV9RV1MiID0gInllcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIke3NjcmVlbn0iID0gImRpcmVjdGZiIiBdICYmIFsgIiR7Q0ZHX0NPTkZJR1VSRV9FWElUX09OX0VSUk9SfSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgIiRQS0dfQ09ORklHIiAtLWV4aXN0cyBkaXJlY3RmYiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj1gJFBLR19DT05GSUcgLS1jZmxhZ3MgZGlyZWN0ZmIgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX0RJUkVDVEZCPSIkUVRfQ0ZMQUdTX0RJUkVDVEZCIC1zdGQ9YysrMHgiCisgICAgICAgICAgICAgICAgUVRfTElCU19ESVJFQ1RGQj1gJFBLR19DT05GSUcgLS1saWJzIGRpcmVjdGZiIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgZWxpZiBkaXJlY3RmYi1jb25maWcgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj1gZGlyZWN0ZmItY29uZmlnIC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZjAwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L0ZpeC1RV1NMb2NrLWludmFsaWQtYXJndW1lbnQtbG9ncy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIDUyYzM0MDAxYmFkODVjMzAzMjYxODA3MGIxZDZiMmEzYzY4ODA3MTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOZWlsIEplcnJhbSA8bi4uLkBvc3NhdS5ob21lbGludXgubmV0PgorRGF0ZTogVGh1LCA4IE5vdiAyMDEyIDA4OjE4OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBRV1NMb2NrICJpbnZhbGlkIGFyZ3VtZW50IiBsb2dzCisKK1RoZXJlIHdhcyBubyBrbm93biBhY3R1YWwgcHJvYmxlbSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgbG9ncywgYnV0IHRoZXkKK3dlcmUgc3BhbW1pbmcgdGhlIGxvZywgc28gSSB0aG91Z2h0IGl0IHdvcnRoIHRyeWluZyB0byB1bmRlcnN0YW5kIGFuZAorZml4IHRoZW0uCisKK1RoZSBjb25mdXNpb24gaXMgdGhhdCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCB3YXlzIG9mIGNyZWF0aW5nIFFXU0xvY2sKK29iamVjdHMuICAiUVdTTG9jaygpIiBjcmVhdGVzIGFuIG9iamVjdCB0aGF0IGNyZWF0ZXMgYSBuZXcgc2V0IG9mCitzZW1hcGhvcmVzLCB3aGVyZWFzICJRV1NMb2NrKGlkKSIgY3JlYXRlcyBhbiBvYmplY3QgdGhhdCBhbGlhc2VzIHRoZQorZXhpc3Rpbmcgc2V0IG9mIHNlbWFwaG9yZXMgd2l0aCBJRCBpZC4gIFdoYXQgc2VlbXMgdG8gaGFwcGVuIGlzIHRoYXQKK2VhY2ggYXBwbGljYXRpb24gY3JlYXRlcyBhIHNlbWFwaG9yZSBzZXQgc2NvcGVkIHRvIHRoYXQKK2FwcGxpY2F0aW9uIChRV1NEaXNwbGF5OjpEYXRhOjpjbGllbnRMb2NrIGluIHFhcHBsaWNhdGlvbl9xd3MuY3BwKSwKK3RoZW4gdGhpcyBzZW1hcGhvcmUgc2V0IGlzIHBhc3NlZCBieSBjb21wbGV4IG1lYW5zIHRvCitwbGFjZXMgKFFXU0NsaWVudFByaXZhdGUgYW5kIFFXU01lbW9yeVN1cmZhY2UpIHRoYXQgdXNlIHRoZSBzZW1hcGhvcmVzCitmb3IgYSBzaG9ydCBwZXJpb2QgYW5kIHRoZW4gZGVsZXRlIHRoZWlyIFFXU0xvY2sgb2JqZWN0cy4KKworVGhlIHByb2JsZW0gd2FzIHRoYXQgdGhlIFFXU0xvY2sgZGVzdHJ1Y3RvciBhbHdheXMgZGVzdHJveWVkIHRoZQorc2VtYXBob3JlIHNldCwgZXZlbiB3aGVuIHRoYXQgUVdTTG9jayBoYWRuJ3QgY3JlYXRlIHRoZSBzZW1hcGhvcmVzCitpdHNlbGYsIGhlbmNlIG1ha2luZyB0aGUgc2VtYXBob3JlcyBpbnZhbGlkIGZvciBvdGhlciBRV1NMb2NrIG9iamVjdHMKK3N0aWxsIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHNldC4KKworQ2xlYXJseSBhIFFXU0xvY2sgb2JqZWN0IHNob3VsZG4ndCBkZXN0cm95IHRoZSBzZW1hcGhvcmUgc2V0IGlmIGl0CitkaWRuJ3QgY3JlYXRlIGl0IGl0c2VsZiwgYW5kIHRoYXQgaXMgY29uZmlybWVkIGJ5IHRoZSBmYWN0IHRoYXQgb25lIG9mCit0aGUgaW1wbGVtZW50YXRpb25zIGluc2lkZSBRV1NMb2NrIGFscmVhZHkgaW1wbGVtZW50cyB0aGlzIGxvZ2ljLCB3aXRoCit0aGUgJ293bmVkJyBmbGFnLiAgVGhlIGZpeCBpcyB0byBpbXBsZW1lbnQgdGhpcyBmb3IgdGhlICNpZm5kZWYKK1FUX1BPU0lYX0lQQyBjYXNlIC0gd2hpY2ggaXMgd2hhdCBpcyB1c2VkIGluIFF0TW9rbyAtIGp1c3QgYXMgaXMKK2FscmVhZHkgaW1wbGVtZW50ZWQgZm9yIHRoZSAjaWZkZWYgUVRfUE9TSVhfSVBDIGNhc2UuCisKK09yaWdpbmFsIHBhdGNoIGNhbiBiZSBmb3VuZCBoZXJlOgorIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9jb21tdW5pdHlAbGlzdHMub3Blbm1va28ub3JnL21zZzY1NTEyLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogTWlrZSBMb29pam1hbnMgPG1pa2UubG9vaWptYW5zQHRvcGljLm5sPgorIChSZW1vdmVkIHRoZSBjb21tZW50ZWQtb3V0IGRlYnVnIHN0YXRlbWVudHMgZnJvbSB0aGUgb3JpZ2luYWwgcGF0Y2guKQorCistLS0KKworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwCitpbmRleCA5OTE0YTI0Li4xMDU1Nzg1IDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAorQEAgLTgzLDkgKzgzLDEyIEBAIFFXU0xvY2s6OlFXU0xvY2soaW50IGlkKSA6IHNlbUlkKGlkKQorICAgICBRV1NTaWduYWxIYW5kbGVyOjppbnN0YW5jZSgpLT5hZGRXU0xvY2sodGhpcyk7CisgI2VuZGlmCisgCisrICAgIG93bmVkID0gZmFsc2U7CisrCisgI2lmbmRlZiBRVF9QT1NJWF9JUEMKKyAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICBzZW1JZCA9IHNlbWdldChJUENfUFJJVkFURSwgMywgSVBDX0NSRUFUIHwgMDY2Nik7CisrICAgICAgICBvd25lZCA9IHRydWU7CisgICAgICAgICBpZiAoc2VtSWQgPT0gLTEpIHsKKyAgICAgICAgICAgICBwZXJyb3IoIlFXU0xvY2s6OlFXU0xvY2siKTsKKyAgICAgICAgICAgICBxRmF0YWwoIlVuYWJsZSB0byBjcmVhdGUgc2VtYXBob3JlIik7CitAQCAtMTAwLDcgKzEwNCw2IEBAIFFXU0xvY2s6OlFXU0xvY2soaW50IGlkKSA6IHNlbUlkKGlkKQorICAgICB9CisgI2Vsc2UKKyAgICAgc2Vtc1swXSA9IHNlbXNbMV0gPSBzZW1zWzJdID0gU0VNX0ZBSUxFRDsKKy0gICAgb3duZWQgPSBmYWxzZTsKKyAKKyAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICAvLyAjIyMgZ2VuZXJhdGUgcmVhbGx5IHVuaXF1ZSBJRHMKK0BAIC0xMzQsOSArMTM3LDExIEBAIFFXU0xvY2s6On5RV1NMb2NrKCkKKyAKKyAgICAgaWYgKHNlbUlkICE9IC0xKSB7CisgI2lmbmRlZiBRVF9QT1NJWF9JUEMKKy0gICAgICAgIHF0X3NlbXVuIHNlbXZhbDsKKy0gICAgICAgIHNlbXZhbC52YWwgPSAwOworLSAgICAgICAgc2VtY3RsKHNlbUlkLCAwLCBJUENfUk1JRCwgc2VtdmFsKTsKKysJaWYgKG93bmVkKSB7CisrCSAgICBxdF9zZW11biBzZW12YWw7CisrCSAgICBzZW12YWwudmFsID0gMDsKKysJICAgIHNlbWN0bChzZW1JZCwgMCwgSVBDX1JNSUQsIHNlbXZhbCk7CisrCX0KKyAgICAgICAgIHNlbUlkID0gLTE7CisgI2Vsc2UKKyAgICAgICAgIC8vIGVtdWxhdGUgdGhlIFNFTV9VTkRPIGJlaGF2aW9yIGZvciB0aGUgQmFja2luZ1N0b3JlIGxvY2sKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaAoraW5kZXggZDMyNGU0Zi4uZDg2N2QyMCAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKK0BAIC04Niw4ICs4Niw4IEBAIHByaXZhdGU6CisgICAgIGludCBsb2NrQ291bnRbMl07CisgI2lmZGVmIFFUX1BPU0lYX0lQQworICAgICBzZW1fdCAqc2Vtc1szXTsKKy0gICAgYm9vbCBvd25lZDsKKyAjZW5kaWYKKysgICAgYm9vbCBvd25lZDsKKyB9OworIAorIFFUX0VORF9OQU1FU1BBQ0UKKyAKKy0tIAorMS43LjEwLjQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDUxMDNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvYWRkX2NoZWNrX2Zvcl9hYXJjaDY0XzMyLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0F1dGhvcjogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorRGF0ZTogICBTdW4gQXByIDEyIDE5OjI3OjEwIDIwMTUgKzA1MzAKKworW1BBVENIXSBhZGQgY2hlY2tpbmcgZm9yIEFBcmNoNjQgaWxwMzIKKworQ3Jvc3MtY29tcGlsaW5nIHF0NC1lbWJlZGRlZCBhbmQgcXQ0LXgxMS1mcmVlIGFwcGxpY2F0aW9ucyBmb3IgQUFyY2g2NCBpbHAzMgorKGJvdGggYmlnIGFuZCBsaXR0bGUgZW5kaWFuKSBmYWlscyB3aXRoIGJlbG93IGVycm9yLAorCisoc25pcCkKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oOjMxOjAsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaDozMiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaDoyNiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oOjI2LAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaDoyNywKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6MzAsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHA6Mjc6CisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ1RPIFFUV1RGOjpiaXR3aXNlX2Nhc3QoRlJPTSkgW3cKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaDo1Mjo0OTogcmVxdWlyZWQgZnJvbSBoZXJlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6NjM6MTogZXJyb3I6IHNpemUgb2YgYXJyYXkgaXMgbmVnYXRpdmUKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnVE8gUVRXVEY6OmJpdHdpc2VfY2FzdChGUk9NKSBbdworLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oOjU3OjQ3OiByZXF1aXJlZCBmcm9tIGhlcmUKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaDo2MzoxOiBlcnJvcjogc2l6ZSBvZiBhcnJheSBpcyBuZWdhdGl2ZQorbWFrZVsxXTogKioqIFtvYmovcmVsZWFzZS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iub10gRXJyb3IgMQorLS0gQ1VUIC0tCisKK3RoZSBlcnJvciBpcyBiZWNhdXNlIG9mIEpTVkFMVUU2NCBpcyBiZWluZyBkZWZpbmVkIHdoaWxlIGNvbXBpbGluZyBwcm9ncmFtcworZm9yIEFBcmNoNjQgaWxwMzIuIFRoaXMgbWFrZXMgZXF1YWwgY29uZGl0aW9uIGNoZWNraW5nIG9mIGludHB0cl90IGFuZCBkb3VibGUKK2RhdGF0eXBlcyBhcyBmYWxzZSwgYW5kIHJlc3VsdHMgaW4gLTEgKG5lZ2F0aXZlKSBhcyBhcnJheSBzaXplIGluIGJpdHdpc2VfY2FzdAorZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLcmlzaG5hbmphbmFwcGEsIEphZ2FkZWVzaCA8amFnYWRlZXNoLmtyaXNobmFuamFuYXBwYUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKy0tLSBhL3NyYy8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkyMDE0LTA0LTExIDAwOjA3OjEyLjAwMDAwMDAwMCArMDUzMAorKysrIGIvc3JjLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCTIwMTUtMDQtMTAgMjI6MTk6NTEuMDY2Mjc5NDI2ICswNTMwCitAQCAtMjE0LDYgKzIxNCw5IEBACisgI2RlZmluZSBXVEZfQ1BVX0FBUkNINjQgMQorICNpZiBkZWZpbmVkKF9fQUFSQ0g2NEVCX18pCisgI2RlZmluZSBXVEZfQ1BVX0JJR19FTkRJQU4gMQorKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKysjZGVmaW5lIFdURl9DUFVfQUFSQ0g2NF8zMiAxCisrI2VuZGlmCisgI2VuZGlmCisgI2VuZGlmCisgCitAQCAtOTAzLDcgKzkwNiw3IEBACisgI2VuZGlmCisgCisgI2lmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0KSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMikgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzJfNjQpCistI2lmIChDUFUoWDg2XzY0KSAmJiAoT1MoVU5JWCkgfHwgT1MoV0lORE9XUykgfHwgT1MoU09MQVJJUykgfHwgT1MoSFBVWCkpKSB8fCAoQ1BVKElBNjQpICYmICFDUFUoSUE2NF8zMikpIHx8IENQVShBTFBIQSkgfHwgQ1BVKEFJWDY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKE1JUFM2NCkgfHwgQ1BVKEFBUkNINjQpCisrI2lmIChDUFUoWDg2XzY0KSAmJiAoT1MoVU5JWCkgfHwgT1MoV0lORE9XUykgfHwgT1MoU09MQVJJUykgfHwgT1MoSFBVWCkpKSB8fCAoQ1BVKElBNjQpICYmICFDUFUoSUE2NF8zMikpIHx8IENQVShBTFBIQSkgfHwgQ1BVKEFJWDY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKE1JUFM2NCkgfHwgKENQVShBQVJDSDY0KSAmJiAhQ1BVKEFBUkNINjRfMzIpKQorICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQorICNlbGlmIENQVShBUk0pIHx8IENQVShQUEM2NCkKKyAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvZysrLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3OGMyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgY29tbW9uIGdjYworIworCitRTUFLRV9DT01QSUxFUiA9IGdjYworCitRTUFLRV9DQyAgICAgICA9ICQoT0VfUU1BS0VfQ0MpCitRTUFLRV9DRkxBR1MgICAgICAgKz0gJChPRV9RTUFLRV9DRkxBR1MpCitRTUFLRV9DRkxBR1NfUkVMRUFTRV9XSVRIX0RFQlVHSU5GTyArPSAkKE9FX1FNQUtFX0NGTEFHUykKK1FNQUtFX0NGTEFHU19QUkVDT01QSUxFICs9IC14IGMtaGVhZGVyIC1jICR7UU1BS0VfUENIX0lOUFVUfSAtbyAke1FNQUtFX1BDSF9PVVRQVVR9CitRTUFLRV9DRkxBR1NfVVNFX1BSRUNPTVBJTEUgKz0gLWluY2x1ZGUgJHtRTUFLRV9QQ0hfT1VUUFVUX0JBU0V9CisKK1FNQUtFX0NYWCAgICAgID0gJChPRV9RTUFLRV9DWFgpCitRTUFLRV9DWFhGTEFHUyAgICAgKz0gJChPRV9RTUFLRV9DWFhGTEFHUykKK1FNQUtFX0NYWEZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8gKz0gJCRRTUFLRV9DRkxBR1NfUkVMRUFTRV9XSVRIX0RFQlVHSU5GTworUU1BS0VfQ1hYRkxBR1NfUFJFQ09NUElMRSArPSAteCBjKystaGVhZGVyIC1jICR7UU1BS0VfUENIX0lOUFVUfSAtbyAke1FNQUtFX1BDSF9PVVRQVVR9CitRTUFLRV9DWFhGTEFHU19VU0VfUFJFQ09NUElMRSA9ICQkUU1BS0VfQ0ZMQUdTX1VTRV9QUkVDT01QSUxFCisKK1FNQUtFX0xJTksgICAgID0gJChPRV9RTUFLRV9MSU5LKQorUU1BS0VfTElOS19TSExJQiAgID0gJChPRV9RTUFLRV9MSU5LKQorUU1BS0VfTElOS19DCQk9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfQ19TSExJQgk9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xGTEFHUyAgICAgICArPSAkKE9FX1FNQUtFX0xERkxBR1MpCitRTUFLRV9MRkxBR1NfTk9VTkRFRgkrPSAtV2wsLS1uby11bmRlZmluZWQKK1FNQUtFX0xGTEFHU19SUEFUSCAgICAgICAgPSAtV2wsLXJwYXRoLWxpbmssCisKK1FNQUtFX1BDSF9PVVRQVVRfRVhUICAgID0gLmdjaAorCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIChsZCkgc3VwcG9ydAorUU1BS0VfTEZMQUdTX0JTWU1CT0xJQ19GVU5DID0gLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCitRTUFLRV9MRkxBR1NfRFlOQU1JQ19MSVNUID0gLVdsLC0tZHluYW1pYy1saXN0LAorCisjIGRvIG5vdCBkZXBlbmQgb24gZ2RiCitDT05GSUcgLT0gZ2RiX2R3YXJmX2luZGV4CisKKyMgc29tZSBsaW5raW5nIGhlbHBlci4uLgorQ09ORklHICs9IHJwYXRoX2xpYmRpcnMKKworIyBmb3IgdGhlIFNESworaXNFbXB0eShRTUFLRV9RVF9DT05GSUcpOlFNQUtFX1FUX0NPTkZJRyA9ICQoT0VfUU1BS0VfUVRfQ09ORklHKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3MDM4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYKQEAgLTAsMCArMSw2NiBAQAorIworIyBxbWFrZSBjb25maWd1cmF0aW9uIGZvciBjb21tb24gbGludXgKKyMKKworUU1BS0VfQ0ZMQUdTX1RIUkVBRAkrPSAtRF9SRUVOVFJBTlQKK1FNQUtFX0NYWEZMQUdTX1RIUkVBRAkrPSAkJFFNQUtFX0NGTEFHU19USFJFQUQKKworUU1BS0VfSU5DRElSICAgICAgICAgID0KK1FNQUtFX0xJQkRJUiAgICAgICAgICA9CitRTUFLRV9JTkNESVJfWDExICAgICAgPQorUU1BS0VfTElCRElSX1gxMSAgICAgID0KK1FNQUtFX0lOQ0RJUl9RVCAgICAgICA9ICQoT0VfUU1BS0VfSU5DRElSX1FUKQorUU1BS0VfTElCRElSX1FUICAgICAgID0gJChPRV9RTUFLRV9MSUJESVJfUVQpCitRTUFLRV9JTkNESVJfT1BFTkdMICAgPQorUU1BS0VfTElCRElSX09QRU5HTCAgID0KK1FNQUtFX0lOQ0RJUl9PUEVOR0xfRVMxID0gJCRRTUFLRV9JTkNESVJfT1BFTkdMCitRTUFLRV9MSUJESVJfT1BFTkdMX0VTMSA9ICQkUU1BS0VfTElCRElSX09QRU5HTAorUU1BS0VfSU5DRElSX09QRU5HTF9FUzIgPSAkJFFNQUtFX0lOQ0RJUl9PUEVOR0wKK1FNQUtFX0xJQkRJUl9PUEVOR0xfRVMyID0gJCRRTUFLRV9MSUJESVJfT1BFTkdMCitRTUFLRV9JTkNESVJfRUdMICAgICAgPQorUU1BS0VfTElCRElSX0VHTCAgICAgID0KK1FNQUtFX0lOQ0RJUl9PUEVOVkcgICA9CitRTUFLRV9MSUJESVJfT1BFTlZHICAgPQorCisKK1FNQUtFX0xJQlMgICAgICAgICAgICA9CitRTUFLRV9MSUJTX0RZTkxPQUQgICAgPSAtbGRsCitRTUFLRV9MSUJTX1gxMSAgICAgICAgPSAkKE9FX1FNQUtFX0xJQlNfWDExKQorUU1BS0VfTElCU19YMTFTTSAgICAgID0gJChPRV9RTUFLRV9MSUJTX1gxMVNNKQorUU1BS0VfTElCU19OSVMgICAgICAgID0gLWxuc2wKK1FNQUtFX0xJQlNfRUdMICAgICAgICA9IC1sRUdMCitRTUFLRV9MSUJTX09QRU5HTCAgICAgPSAtbEdMCitRTUFLRV9MSUJTX09QRU5HTF9RVCAgPSAtbEdMCitRTUFLRV9MSUJTX09QRU5HTF9FUzEgPSAtbEdMRVNfQ00KK1FNQUtFX0xJQlNfT1BFTkdMX0VTMiA9IC1sR0xFU3YyCitRTUFLRV9MSUJTX09QRU5WRyAgICAgPSAtbE9wZW5WRworUU1BS0VfTElCU19USFJFQUQgICAgID0gLWxwdGhyZWFkCisKK1FNQUtFX01PQyAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfTU9DKQorUU1BS0VfVUlDICAgICAgICAgICAgID0gJChPRV9RTUFLRV9VSUMpCitRTUFLRV9VSUMzICAgICAgICAgICAgPSAkKE9FX1FNQUtFX1VJQzMpCitRTUFLRV9SQ0MgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX1JDQykKK1FNQUtFX1FEQlVTQ1BQMlhNTCAgICA9ICQoT0VfUU1BS0VfUURCVVNDUFAyWE1MKQorUU1BS0VfUURCVVNYTUwyQ1BQICAgID0gJChPRV9RTUFLRV9RREJVU1hNTDJDUFApCisKK1FNQUtFX0FSICAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfQVIpIGNxcworUU1BS0VfT0JKQ09QWSAgICAgICAgID0gb2JqY29weQorUU1BS0VfUkFOTElCICAgICAgICAgID0KKworUU1BS0VfVEFSICAgICAgICAgICAgID0gdGFyIC1jZgorUU1BS0VfR1pJUCAgICAgICAgICAgID0gZ3ppcCAtOWYKKworUU1BS0VfQ09QWSAgICAgICAgICAgID0gY3AgLWYKK1FNQUtFX0NPUFlfRklMRSAgICAgICA9ICQoQ09QWSkKK1FNQUtFX0NPUFlfRElSICAgICAgICA9ICQoQ09QWSkgLXIKK1FNQUtFX01PVkUgICAgICAgICAgICA9IG12IC1mCitRTUFLRV9ERUxfRklMRSAgICAgICAgPSBybSAtZgorUU1BS0VfREVMX0RJUiAgICAgICAgID0gcm1kaXIKK1FNQUtFX1NUUklQICAgICAgICAgICA9ICQoT0VfUU1BS0VfU1RSSVApCitRTUFLRV9TVFJJUEZMQUdTX0xJQiArPSAtLXN0cmlwLXVubmVlZGVkCitRTUFLRV9DSEtfRElSX0VYSVNUUyAgPSB0ZXN0IC1kCitRTUFLRV9NS0RJUiAgICAgICAgICAgPSBta2RpciAtcAorUU1BS0VfSU5TVEFMTF9GSUxFICAgID0gaW5zdGFsbCAtbSA2NDQgLXAKK1FNQUtFX0lOU1RBTExfUFJPR1JBTSA9IGluc3RhbGwgLW0gNzU1IC1wCisKK2luY2x1ZGUodW5peC5jb25mKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDZlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9xdGUuc2gKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworaWYgWyAtZSAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBdCit0aGVuCisgICAgUVdTX01PVVNFX1BST1RPPVRzbGliOi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wCisgICAgZXhwb3J0IFFXU19NT1VTRV9QUk9UTworZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY5MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWQuaW5jCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiQ3Jvc3MtcGxhdGZvcm0gVUkgdG9vbGtpdCBhbmQgYXBwbGljYXRpb24gZnJhbWV3b3JrIChmcmFtZWJ1ZmZlciB2ZXJzaW9uKSIKK0RFU0NSSVBUSU9OID0gIlF0IGlzIGEgdmVyc2F0aWxlIGNyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9uIGZyYW1ld29yayAtLSB0aGlzIGlzIHRoZSBlbWJlZGRlZCAoZnJhbWVidWZmZXIpIHZlcnNpb24uIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK0RFUEVORFMgKz0gImRpcmVjdGZiIHRzbGliIgorCitRVDRFREVQRU5EUyA9ICIiCitRVF9CQVNFX0xJQiAgPz0gImxpYnF0LWVtYmVkZGVkIgorCisjIFNldCBuZWNlc3NhcnkgdmFyaWFibGVzIGluIHRoZSBwcm9maWxlCitTUkNfVVJJICs9ICJmaWxlOi8vcXRlLnNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoIFwKKyIKKworUVRfRU1CRURERURfRkxBR1MgPz0gIiBcCisgICAgLWVtYmVkZGVkICRRVF9BUkNIIFwKKyAgICAtcXRsaWJpbmZpeCAke1FUX0xJQklORklYfSBcCisiCitRVF9FTUJFRERFRF9FWFRSQV9GTEFHUyA/PSAiIFwKKyAgICAtcGx1Z2luLWdmeC10cmFuc2Zvcm1lZCAtcGx1Z2luLWdmeC1xdmZiIC1wbHVnaW4tZ2Z4LXZuYyAtcGx1Z2luLWdmeC1kaXJlY3RmYiBcCisgICAgLXBsdWdpbi1tb3VzZS10c2xpYiAtcXQtbW91c2UtcGMgLXF0LW1vdXNlLXF2ZmIgLXF0LW1vdXNlLWxpbnV4aW5wdXQgXAorICAgIC1xdC1rYmQtdHR5IC1xdC1rYmQtbGludXhpbnB1dCBcCisiCitRVF9FTUJFRERFRF9LRVlQQURfRkxBR1MgPz0gIiBcCisgICAgLURRVF9LRVlQQURfTkFWSUdBVElPTiBcCisiCisKK1FUX0NPTkZJR19GTEFHUyArPSAiJHtRVF9FTUJFRERFRF9GTEFHU30gJHtRVF9FTUJFRERFRF9FWFRSQV9GTEFHU30gJHtRVF9FTUJFRERFRF9LRVlQQURfRkxBR1N9IgorCityZXF1aXJlIHF0NC5pbmMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9mb250cworICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9L2ZvbnRzL2ZvbnRkaXIKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3F0ZS5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCit9CisKKyMgV2UgcHV0IHRoZSBxdGUgcHJvZmlsZSBpbnRvIGl0J3Mgb3duIHBhY2thZ2UgYXMgd2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGFsbCBxdCBzdHVmZgorIyB3aXRoIGRlcGVuZGluZyBvbiB0aGUgZ2xvYmFsIHBhY2thZ2UgcXQ0LWVtYmVkZGVkCitQQUNLQUdFUyArPSAiICR7UE59LWNvbmYiCitGSUxFU18ke1BOfS1jb25mICs9ICIgJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvcXRlLnNoIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiAke1BOfS1jb25mIgorCitPVEhFUl9QQUNLQUdFUyArPSAiXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXFwZiIKKworUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWZvbnRzID0gIiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXFwZiIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cyIKKworQUxMT1dfRU1QVFlfJHtRVF9CQVNFX05BTUV9LWZvbnRzID0gIjEiCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtRVF9CQVNFX05BTUV9LWZvbnRzLS4qIgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLXZlcmEgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzL1ZlcmEqLnR0ZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtZGVqYXZ1ICAgICA9ICIke2xpYmRpcn0vZm9udHMvRGVqYVZ1Ki50dGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZhICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzLyoucGZhIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYiAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy8qLnBmYiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvKi5xcGYqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzICAgICAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy9SRUFETUUgJHtsaWJkaXJ9L2ZvbnRzL2ZvbnRkaXIiCisKK2luaGVyaXQgcXQ0ZQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzVkODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcXQ0LSR7UFZ9LmluYworcmVxdWlyZSBxdDQtZW1iZWRkZWQuaW5jCisKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtbm8tbmVvbiIgLGQpfSIKKworUVRfQ09ORklHX0ZMQUdTICs9ICIgXAorIC1leGNlcHRpb25zIFwKKyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0MWY4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSwxMTIgQEAKK1NVTU1BUlkgPSAiUXQgdmVyc2lvbiA0IHRvb2xzIGFuZCBzdXBwb3J0IGZpbGVzIGZvciB0aGUgYnVpbGQgaG9zdCIKK0RFUEVORFMgPSAiemxpYi1uYXRpdmUgZGJ1cy1uYXRpdmUiCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorUFJPVklERVMgPSAicXQ0LXRvb2xzLW5hdGl2ZSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDM7bWQ1PTZlMTY5NGVlMzM4ZGI0MTA0MTc1MTc4ODQ5MThkNGQyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUExfRVhDRVBUSU9OLnR4dDttZDU9MDE0NWM0ZDFiNmY5NmE2NjFjMmMxMzlkZmIyNjhmYjYiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnF0LXByb2plY3Qub3JnL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8ke1BWfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIFwKKwkiCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi1wcmVmaXggJHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAtYmluZGlyICR7YmluZGlyfSBcCisgICAgICAgICAgICAgICAgLWxpYmRpciAke2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC1kYXRhZGlyICR7ZGF0YWRpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtc3lzY29uZmRpciAke3N5c2NvbmZkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLWRvY2RpciAke2RvY2Rpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtaGVhZGVyZGlyICR7aW5jbHVkZWRpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtcGx1Z2luZGlyICR7bGliZGlyfS9xdDQvcGx1Z2lucyBcCisgICAgICAgICAgICAgICAgLWltcG9ydGRpciAke2xpYmRpcn0vcXQ0L2ltcG9ydHMgXAorICAgICAgICAgICAgICAgIC10cmFuc2xhdGlvbmRpciAke2RhdGFkaXJ9L3F0NC90cmFuc2xhdGlvbnMgXAorICAgICAgICAgICAgICAgIC1leGFtcGxlc2RpciAke2JpbmRpcn0vcXQ0L2V4YW1wbGVzIFwKKyAgICAgICAgICAgICAgICAtZGVtb3NkaXIgJHtiaW5kaXJ9L3F0NC9kZW1vcyBcCisgICAgICAgICAgICAgICAgLUwgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAtSSAke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgIC1xdC1saWJqcGVnIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgLW5vLWxpYmpwZWcgLW5vLWxpYnBuZyAtbm8tbGlibW5nIC1uby1saWJ0aWZmIFwKKyAgICAgICAgICAgICAgICAtbm8tYWNjZXNzaWJpbGl0eSBcCisgICAgICAgICAgICAgICAgLW5vLWN1cHMgXAorICAgICAgICAgICAgICAgIC1uby1uYXMtc291bmQgXAorICAgICAgICAgICAgICAgIC1uby1uaXMgLW5vLW9wZW5zc2wgXAorICAgICAgICAgICAgICAgIC12ZXJib3NlIC1yZWxlYXNlIFwKKyAgICAgICAgICAgICAgICAtZW1iZWRkZWQgLW5vLWZyZWV0eXBlIC1uby1nbGliIC1uby1pY29udiBcCisgICAgICAgICAgICAgICAgLWV4Y2VwdGlvbnMgLXhtbHBhdHRlcm5zIFwKKyAgICAgICAgICAgICAgICAtcXQzc3VwcG9ydCBcCisgICAgICAgICAgICAgICAgLW5vLWZhc3QgLXNpbGVudCAtbm8tcnBhdGgiCisKKyMgeWFuayBkZWZhdWx0IC1lLCBvdGhlcndpc2Ugd2UgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3I6CisjIG1vY19xYnVmZmVyLmNwcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorRVhUUkFfT0VNQUtFID0gIiAiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIEF2b2lkIHByb2JsZW1zIHdpdGggUXQgNC44LjAgY29uZmlndXJlIHNldHRpbmcgUU1BS0VfTElOSyBmcm9tIExEIChzaW5jZSB3ZSB3YW50IHRoZSBsaW5rZXIgdG8gYmUgZysrKQorCXVuc2V0IExECisKKwkoZWNobyBvOyBlY2hvIHllcykgfCAuL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0gfHwgZGllICJDb25maWd1cmluZyBxdCBmYWlsZWQuIEVYVFJBX09FQ09ORiB3YXMgJHtFWFRSQV9PRUNPTkZ9IgorfQorCitUT0JVSUxEID0gIlwKKyAgc3JjL3Rvb2xzL21vYyBcCisgIHNyYy9jb3JlbGliIFwKKyAgc3JjL3NxbCBcCisgIHNyYy94bWwgXAorICBzcmMvbmV0d29yayBcCisgIHNyYy90b29scy91aWMgXAorICBzcmMvdG9vbHMvcmNjIFwKKyAgc3JjL3htbHBhdHRlcm5zIFwKKyAgc3JjL2RidXMgXAorICBzcmMvZ3VpIFwKKyAgc3JjL3Rlc3RsaWIgXAorICBzcmMvcXQzc3VwcG9ydCBcCisgIHNyYy90b29scy91aWMzIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbGNvbnZlcnQgXAorICB0b29scy9saW5ndWlzdC9scmVsZWFzZSBcCisgIHRvb2xzL2xpbmd1aXN0L2x1cGRhdGUgXAorICB0b29scy9xZGJ1cy9xZGJ1c2NwcDJ4bWwgXAorICB0b29scy9xZGJ1cy9xZGJ1c3htbDJjcHAgXAorICB0b29scy94bWxwYXR0ZXJucyBcCisiCisKK2RvX2NvbXBpbGUoKSB7CisJZm9yIGkgaW4gJHtUT0JVSUxEfTsgZG8KKwkJY2QgJHtTfS8kaSAmJiBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisJZG9uZQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlICR7RH0ke2JpbmRpcn0vcW1ha2UyCisJZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBsY29udmVydCBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHAgeG1scGF0dGVybnM7IGRvCisJCWluc3RhbGwgLW0gMDc1NSBiaW4vJHtpfSAke0R9JHtiaW5kaXJ9LyR7aX00CisJZG9uZQorICAgIAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCWNwIC1QZlIgbWtzcGVjcyAke0R9JHtkYXRhZGlyfS9xdDQvCisJbG4gLXNmIGxpbnV4LWcrKyAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy8ke0JVSUxEX09TfS1vZS1nKysKKwlpZiBbIC1mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mIF0gOyB0aGVuCisJCSMgbWtzcGVjcyB3ZXJlIHJlZmFjdG9yZWQgZm9yIDQuOC4wCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uL2crKy11bml4LmNvbmYKKwllbHNlCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uL2crKy5jb25mCisJZmkKKwljcCAtZiAke1dPUktESVJ9L2xpbnV4LmNvbmYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uLworCisJaW5zdGFsbCAtbSAwNjQ0IHRvb2xzL3BvcnRpbmcvc3JjL3EzcG9ydGluZy54bWwgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCisJZm9yIGkgaW4gJHtUT0JVSUxEfTsgZG8KKwkJY2QgJHtTfS8kaSAmJiBvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTF9ST09UPSR7RH0KKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0ZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZV80LjguNy5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgcXQ0LW5hdGl2ZS5pbmMKKworVE9CVUlMRCA6PSAic3JjL3Rvb2xzL2Jvb3RzdHJhcCAke1RPQlVJTER9IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmExNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWUuaW5jCkBAIC0wLDAgKzEsMzggQEAKK3JlcXVpcmUgcXQ0LmluYworCitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtIFVJIHRvb2xraXQgYW5kIGFwcGxpY2F0aW9uIGZyYW1ld29yayAoWDExIHZlcnNpb24pIgorREVTQ1JJUFRJT04gPSAiUXQgaXMgYSB2ZXJzYXRpbGUgY3Jvc3MtcGxhdGZvcm0gYXBwbGljYXRpb24gZnJhbWV3b3JrIC0tIHRoaXMgaXMgdGhlIFgxMSB2ZXJzaW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZm9udGNvbmZpZyBsaWJ4ZnQgbGlieGV4dCBsaWJ4cmVuZGVyIGxpYnhyYW5kciBsaWJ4Y3Vyc29yIgorREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAndmlydHVhbC9saWJnbCcsICcnLCBkKX0iCitQUk9WSURFUyArPSAicXQ0LXgxMSIKK1FUNERFUEVORFMgPSAiIgorCitRVF9HTEZMQUdTID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICctb3BlbmdsJywgJy1uby1vcGVuZ2wnLCBkKX0gIgorUVRfR0xGTEFHU19xZW11eDg2ID0gIi1vcGVuZ2wiCitRVF9HTEZMQUdTX3FlbXVwcGMgPSAiLW9wZW5nbCIKK1FUX1gxMV9GTEFHUyA/PSAiLW5vLXhpbmVyYW1hIC1uby14a2IgLW5vLWd0a3N0eWxlIgorUVRfQ09ORklHX0ZMQUdTICs9ICIke1FUX1gxMV9GTEFHU30iCitRVF9CQVNFX0xJQiAgPz0gImxpYnF0IgorCisjIHJlcXVpcmVkIGJ5IGtkZWxpYnM0CitRVF9LREVfRkxBR1MgPz0gIi1hY2Nlc3NpYmlsaXR5IC1zbSIKK1FUX0RJU1RST19GTEFHUyA/PSAiJHtRVF9LREVfRkxBR1N9IgorCitpbmhlcml0IHF0NHgxMQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgIyBmaXggcGtnY29uZmlnLCBsaWJ0b29sIGFuZCBwcmwgZmlsZXMKKyAgc2VkIC1pIC1lICdzI0kvdXNyL2luY2x1ZGUjSWluY2x1ZGVkaXJ9I2cnIFwgCisgICAgLWUgJ3MjSWluI0kke2luI2cnIFwKKyAgICAke0R9JHtsaWJkaXJ9LyoubGEgJHtEfSR7bGliZGlyfS8qLnBybCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisKKyAgIyBRVCBhYnVzZXMgJGluY2x1ZGVkaXIgdG8gcG9pbnQgdG8gaXRzIGhlYWRlcnMsIHdoaWNoIGJyZWFrcyBwa2djb25maWcgc3lzcm9vdCwgc28KKyAgIyBtYW51YWxseSBmaXggaXQgdXAgaGVyZToKKyAgZm9yIHBjIGluICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMgOyBkbworICAgIHNlZCAtaSAtZSAiczpwcmVmaXh9aW5jbHVkZS8ke1FUX0JBU0VfTkFNRX0vJChiYXNlbmFtZSAkcGMgLnBjKTpwcmVmaXh9L2luY2x1ZGU6IiBcCisgICAgICAtZSAicyxDZmxhZ3M6ICxDZmxhZ3M6IC1JUHtpbmNsdWRlZGlyfS8ke1FUX0JBU0VfTkFNRX0vJChiYXNlbmFtZSAkcGMgLnBjKSAsIiBcCisgICAgICAtZSAnczpJUHs6SSR7OmcnICRwYworICBkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjVlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcXQ0LXgxMS1mcmVlLmluYworcmVxdWlyZSBxdDQtJHtQVn0uaW5jCisKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtbm8tbmVvbiIgLGQpfSIKKworUVRfQ09ORklHX0ZMQUdTICs9ICIgXAorIC1uby1lbWJlZGRlZCBcCisgLXhyYW5kciBcCisgLXgxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU4ZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQuaW5jCkBAIC0wLDAgKzEsMzkxIEBACitpbmhlcml0IHFtYWtlX2Jhc2UKKworREVQRU5EUyArPSAicXQ0LXRvb2xzLW5hdGl2ZSBmcmVldHlwZSBqcGVnIGxpYnBuZyB6bGliIGRidXMgb3BlbnNzbCBnbGliLTIuMCBzcWxpdGUzIHRpZmYgaWN1IgorREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IgorCityZXF1aXJlIHF0NF9hcmNoLmluYworCitRVF9ESVNUUk9fRkxBR1MgPz0gIi1uby1hY2Nlc3NpYmlsaXR5IC1uby1zbSIKK1FUX0RJU1RST19GTEFHU19saW51eHN0ZGJhc2UgPSAiLXNtIgorCitRVF9TUUxfRFJJVkVSX0ZMQUdTID89ICItbm8tc3FsLWliYXNlIC1uby1zcWwtbXlzcWwgLW5vLXNxbC1wc3FsIC1uby1zcWwtb2RiYyAtbm8tc3FsLXNxbGl0ZTIgLXBsdWdpbi1zcWwtc3FsaXRlIC1zeXN0ZW0tc3FsaXRlIgorCitRVF9HTEZMQUdTID89ICIiCisKKyAgCitRVF9RVDNTVVBQT1JUID89ICItcXQzc3VwcG9ydCIKK1FUX1hNTCA/PSAiLXhtbHBhdHRlcm5zIgorUVRfV0VCS0lUID89ICItd2Via2l0IgorUVRfUEhPTk9OID89ICItbm8tcGhvbm9uIgorUVRfREJVUyA/PSAiLXFkYnVzIgorUVRfTVVMVElNRURJQSA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJy1wdWxzZWF1ZGlvJywgJy1uby1wdWxzZWF1ZGlvJywgZCl9IgorIAorUVRfQ09ORklHX0ZMQUdTICs9ICItcmVsZWFzZSAtbm8tY3VwcyAtcmVkdWNlLXJlbG9jYXRpb25zIFwKKyAgICAgICAgICAgICAgICAgICAgLXNoYXJlZCAtbm8tbmFzLXNvdW5kIC1uby1uaXMgXAorICAgICAgICAgICAgICAgICAgICAtc3lzdGVtLWxpYmpwZWcgLXN5c3RlbS1saWJwbmcgLXN5c3RlbS1saWJ0aWZmIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgICAgIC1uby1wY2ggLXN0bCAtZ2xpYiAtaWN1IFwKKyAgICAgICAgICAgICAgICAgICAgLW5vLXJwYXRoIC1zaWxlbnQgXAorCQkgICAgLUQgVVNFX1FUTVVMVElNRURJQT0xIFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9EQlVTfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfUVQzU1VQUE9SVH0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1dFQktJVH0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1BIT05PTn0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1hNTH0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX01VTFRJTUVESUF9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9TUUxfRFJJVkVSX0ZMQUdTfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfRElTVFJPX0ZMQUdTfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfR0xGTEFHU30iCisKK0VYVFJBX09FTUFLRSA9ICItZSIKKworRVhUUkFfRU5WID0gJ1FNQUtFPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIC1hZnRlciBcCisgICAgICAgICAgICAgSU5DUEFUSCs9JHtTVEFHSU5HX0lOQ0RJUn0vZnJlZXR5cGUyIExJQlMrPS1MJHtTVEFHSU5HX0xJQkRJUn0iIFwKKyAgICAgICAgICAgICBRTUFLRVNQRUM9IiR7UU1BS0VTUEVDfSIgTElOSz0iJHtDWFh9IC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSIgXAorICAgICAgICAgICAgIEFSPSIke1RBUkdFVF9QUkVGSVh9YXIgY3FzIiBcCisgICAgICAgICAgICAgTU9DPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vbW9jNCIgVUlDPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljNCIgTUFLRT0ibWFrZSAtZSInCisKK2V4cG9ydCBRVF9DT05GX1BBVEg9IiR7V09SS0RJUn0vcXQuY29uZiIKKworIyBMaWJyYXJ5IHBhY2thZ2VzCitRVF9MSUJfTkFNRVMgPSAiUXQzU3VwcG9ydCBRdEFzc2lzdGFudENsaWVudCBRdENMdWNlbmUgUXRDb3JlIFF0REJ1cyBRdERlc2lnbmVyIFF0RGVzaWduZXJDb21wb25lbnRzIFF0R3VpIFF0SGVscCBRdE5ldHdvcmsgUXRPcGVuR0wgUXRTY3JpcHQgUXRTY3JpcHRUb29scyBRdFNxbCBRdFN2ZyBRdFRlc3QgUXRVaVRvb2xzIFF0V2ViS2l0IFF0WG1sIFF0WG1sUGF0dGVybnMgcGhvbm9uIFF0TXVsdGltZWRpYSBRdE9wZW5WRyBRdE1lZGlhU2VydmljZXMgUXREZWNsYXJhdGl2ZSIKKworUVRfRVhUUkFfTElCUyA9ICJwdnJRV1NXU0VHTCIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBsaWJfcGFja2FnZXMgPSBbXQorICAgIGRldl9wYWNrYWdlcyA9IFtdCisgICAgZGJnX3BhY2thZ2VzID0gW10KKyAgICBzdGF0aWNkZXZfcGFja2FnZXMgPSBbXQorICAgIGZvciBuYW1lIGluIGQuZ2V0VmFyKCJRVF9MSUJfTkFNRVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBwa2cgPSBkLmdldFZhcigiUVRfQkFTRV9MSUIiLCBUcnVlKSArIG5hbWUubG93ZXIoKS5yZXBsYWNlKCJxdCIsICIiKS5yZXBsYWNlKCJfIiwgIi0iKSArICI0IgorICAgICAgICAjIE5PVEU6IHRoZSBoZWFkZXJzIGZvciBRdEFzc2lzdGFudENsaWVudCBhcmUgZGlmZmVyZW50CisgICAgICAgIGluY25hbWUgPSBuYW1lLnJlcGxhY2UoIlF0QXNzaXN0YW50Q2xpZW50IiwgIlF0QXNzaXN0YW50IikKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnNvLioiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kZXYiICUgcGtnLCAiIiIke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5wcmwKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LmxhCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5zbworICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfS8lKGluY25hbWUpcworICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy8lKG5hbWUpcyR7UVRfTElCSU5GSVh9LnBjIiIiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1zdGF0aWNkZXYiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uYSIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwa2csICIke2xpYmRpcn0vLmRlYnVnL2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uc28qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiUlJFQ09NTUVORFNfJXMtZGJnIiAlIHBrZywgIiR7UE59LWRiZyIpCisgICAgICAgIGxpYl9wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1kZXYiICUgcGtnKQorICAgICAgICBkYmdfcGFja2FnZXMuYXBwZW5kKCIlcy1kYmciICUgcGtnKQorICAgICAgICBzdGF0aWNkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1zdGF0aWNkZXYiICUgcGtnKQorICAgIGZvciBuYW1lIGluIGQuZ2V0VmFyKCJPVEhFUl9QQUNLQUdFUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGRiZ19wYWNrYWdlcy5hcHBlbmQoIiVzLWRiZyIgJSBuYW1lKQorICAgICAgICBzdGF0aWNkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1zdGF0aWNkZXYiICUgbmFtZSkKKworICAgIGZvciBuYW1lIGluIGQuZ2V0VmFyKCJRVF9FWFRSQV9MSUJTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGtnID0gZC5nZXRWYXIoIlFUX0JBU0VfTElCIiwgVHJ1ZSkgKyBuYW1lLmxvd2VyKCkucmVwbGFjZSgicXQiLCAiIikucmVwbGFjZSgiXyIsICItIikgKyAiNCIKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcy5zby4qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtc3RhdGljZGV2IiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcy5hIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGV2IiAlIHBrZywgIiIiJHtsaWJkaXJ9L2xpYiUobmFtZSlzLnBybAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzLmxhCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMuc28KKyAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vJShpbmNuYW1lKXMKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvJShuYW1lKXMucGMiIiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwa2csICIke2xpYmRpcn0vLmRlYnVnL2xpYiUobmFtZSlzLnNvKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRUNPTU1FTkRTXyVzLWRiZyIgJSBwa2csICIke1BOfS1kYmciKQorICAgICAgICBsaWJfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtZGV2IiAlIHBrZykKKyAgICAgICAgZGJnX3BhY2thZ2VzLmFwcGVuZCgiJXMtZGJnIiAlIHBrZykKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIHBrZykKKworICAgIGQuc2V0VmFyKCJMSUJfUEFDS0FHRVMiLCAiICIuam9pbihsaWJfcGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJERVZfUEFDS0FHRVMiLCAiICIuam9pbihkZXZfcGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJEQkdfUEFDS0FHRVMiLCAiICIuam9pbihkYmdfcGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJTVEFUSUNERVZfUEFDS0FHRVMiLCAiICIuam9pbihzdGF0aWNkZXZfcGFja2FnZXMpKQorfQorCitPVEhFUl9QQUNLQUdFUyA9ICJcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXRvb2xzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tY29tbW9uIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGJ1cyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlbW9zIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVzaWduZXIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWxpbmd1aXN0IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tbWFrZXFwZiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LW1rc3BlY3MgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1waXhlbHRvb2wgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS14bWxwYXR0ZXJucyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXF0M3RvNCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIgorCisjV2UgcHJlcGVuZCBzbyAke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIGNvbWVzIGJlZm9yZSAke1BOfS1kb2Msc28gdGhlIHBhY2thZ2luZyBvZiBGSUxFU18gZ2V0IGRvbmUgYmVmb3JlLgorUEFDS0FHRVMgPSsgIiR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCitQQUNLQUdFUyArPSAiIFwKKyAgICAgICAgICAgICAke0xJQl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7REVWX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtEQkdfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke1NUQVRJQ0RFVl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7T1RIRVJfUEFDS0FHRVN9IgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtRVF9CQVNFX05BTUV9LXBsdWdpbi0uKiBeJHtRVF9CQVNFX05BTUV9LXRyYW5zbGF0aW9uLS4qIF4ke1FUX0JBU0VfTkFNRX0tcGhyYXNlYm9vay0uKiIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0ZJTEVTXyR7UE59ICAgICA9ICIiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfS9RdC8qIgorRklMRVNfJHtQTn0tZGJnID0gIi91c3Ivc3JjL2RlYnVnLyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MgPSAiJHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9L3FjaC9xdC5xY2giCitSUkVDT01NRU5EU18ke1BOfSA9ICIke0xJQl9QQUNLQUdFU30gJHtPVEhFUl9QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1BOfS1kZXYgPSAiJHtERVZfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7REJHX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9MSUJ9Y29yZTRfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LXV0Zi0xNiIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50IFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXIgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZG9jICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyIKKworUlBST1ZJREVTXyR7UVRfQkFTRV9OQU1FfS10b29scyArPSAicW1ha2UyIgorUlJFUExBQ0VTXyR7UVRfQkFTRV9OQU1FfS10b29scyArPSAicW1ha2UyIgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0dHJhY2VyZXBsYXkgJHtiaW5kaXJ9L3Fkb2MqICR7YmluZGlyfS9xbWFrZSAke2JpbmRpcn0vbW9jICR7YmluZGlyfS91aWMqICR7YmluZGlyfS9yY2MiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMtZGJnICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdHRyYWNlcmVwbGF5ICR7YmluZGlyfS8uZGVidWcvcWRvYyogJHtiaW5kaXJ9Ly5kZWJ1Zy9xbWFrZSAke2JpbmRpcn0vLmRlYnVnL3VpYyogJHtiaW5kaXJ9Ly5kZWJ1Zy9tb2MgJHtiaW5kaXJ9Ly5kZWJ1Zy9yY2MiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50ICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Lyphc3Npc3RhbnQqICR7YmluZGlyfS9xY29sbGVjdGlvbmdlbmVyYXRvciAke2JpbmRpcn0vcWhlbHBjb252ZXJ0ZXIgJHtiaW5kaXJ9L3FoZWxwZ2VuZXJhdG9yIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudC1kYmcgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvKmFzc2lzdGFudCogJHtiaW5kaXJ9Ly5kZWJ1Zy9xY29sbGVjdGlvbmdlbmVyYXRvciAke2JpbmRpcn0vLmRlYnVnL3FoZWxwY29udmVydGVyICR7YmluZGlyfS8uZGVidWcvcWhlbHBnZW5lcmF0b3IiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tY29tbW9uICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0Y29uZmlnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWNvbW1vbi1kYmcgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXRjb25maWciCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGJ1cyAgICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3FkYnVzICR7YmluZGlyfS9xZGJ1c3htbDJjcHAgJHtiaW5kaXJ9L3FkYnVzY3BwMnhtbCAke2JpbmRpcn0vcWRidXN2aWV3ZXIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGJ1cy1kYmcgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1cyAke2JpbmRpcn0vLmRlYnVnL3FkYnVzeG1sMmNwcCAke2JpbmRpcn0vLmRlYnVnL3FkYnVzY3BwMnhtbCAke2JpbmRpcn0vLmRlYnVnL3FkYnVzdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlbW9zICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdGRlbW8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlbW9zLXN0YXRpY2RldiAgICAgID0gIiR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy9zaGFyZWQvbGliZGVtb19zaGFyZWQuYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kYmcgICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0ZGVtbyogJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLy5kZWJ1Zy8qICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8uZGVidWcgICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8qLyovLmRlYnVnICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8qLyovLmRlYnVnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyICAgICAgICAgICAgID0gIiR7YmluZGlyfS8qZGVzaWduZXIqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyLWRiZyAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvKmRlc2lnbmVyKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyAgICAgICAgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcy1zdGF0aWNkZXYgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvdG9vbHMvcGx1Z2FuZHBhaW50L3BsdWdpbnMvbGlicG5wX2Jhc2ljdG9vbHMuYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcy1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLyovLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qLyovKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvZGVjbGFyYXRpdmUvKi8qLyovKi8qLy5kZWJ1Zy8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy9kZWNsYXJhdGl2ZS8qLyovKi8qLy5kZWJ1Zy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWxpbmd1aXN0ICAgICAgICAgICAgID0gIiR7YmluZGlyfS8qbGluZ3Vpc3QqICR7YmluZGlyfS9scmVsZWFzZSAke2JpbmRpcn0vbHVwZGF0ZSAke2JpbmRpcn0vbGNvbnZlcnQgJHtiaW5kaXJ9L3FtMnRzIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWxpbmd1aXN0LWRiZyAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvKmxpbmd1aXN0KiAke2JpbmRpcn0vLmRlYnVnL2xyZWxlYXNlICR7YmluZGlyfS8uZGVidWcvbHVwZGF0ZSAke2JpbmRpcn0vLmRlYnVnL2xjb252ZXJ0ICR7YmluZGlyfS8uZGVidWcvcW0ydHMiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3BpeGVsdG9vbCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1waXhlbHRvb2wtZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3BpeGVsdG9vbCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xdDN0bzQgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXQzdG80ICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vcTNwb3J0aW5nLnhtbCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xdDN0bzQtZGJnICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0M3RvNCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXIgICAgICAgICAgICA9ICIke2JpbmRpcn0vcW1sdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbHZpZXdlci1kYmcgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcW1sdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9tYWtlcXBmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYtZGJnICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvbWFrZXFwZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1ta3NwZWNzICAgICAgICAgICAgICA9ICIke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvKiAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L2Vudmlyb25tZW50LXNldHVwIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXhtbHBhdHRlcm5zICAgICAgICAgID0gIiR7YmluZGlyfS94bWxwYXR0ZXJucyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0teG1scGF0dGVybnMtZGJnICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy94bWxwYXR0ZXJucyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMgICAgICAgICAgPSAiJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMvKiAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy9xbWx0b29saW5nLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMtZGJnICAgICAgPSAiJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMvKi8qLyovLmRlYnVnLyogJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMvKi8uZGVidWcgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvcW1sdG9vbGluZy8uZGVidWciCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfSR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyAgICAgICs9ICJsaWJkaXIiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfSR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcy1kYmcgICs9ICJsaWJkaXIiCisKKyMgTGljZW5zZSBvcHRpb25zLCB0byBiZSBzZXQgYnkgdGhlIHJlY2lwZSBpZiBkaWZmZXJlbnQgdmFsdWVzIGFyZSBuZWVkZWQKK1FUX0xJQ0VOU0VfRklMRSA/PSAiIgorUVRfTElDRU5TRV9GTEFHUyA/PSAiLW9wZW5zb3VyY2UiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwl1bnNldCBRTUFLRVNQRUMKKwl1bnNldCBRVERJUgorCisJc2V0X2FyY2gKKwlzZXRfZW5kaWFuCisKKwlpZiBbICEgLWUgYmluL3FtYWtlIF07IHRoZW4KKwkJbG4gLXNmICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIgYmluL3FtYWtlCisJZmkKKworCWlmIFsgISAtZSBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysgXTsgdGhlbgorCQlsbiAtc2YgbGludXgtZysrIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKworCWZpCisKKwlpZiBbIC1mIG1rc3BlY3MvY29tbW9uL2crKy11bml4LmNvbmYgXSA7IHRoZW4KKwkJIyBta3NwZWNzIHdlcmUgcmVmYWN0b3JlZCBmb3IgNC44LjAKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiBta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mCisJZWxzZQorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mIG1rc3BlY3MvY29tbW9uL2crKy5jb25mCisJZmkKKwljcCAtZiAke1dPUktESVJ9L2xpbnV4LmNvbmYgbWtzcGVjcy9jb21tb24vCisKKwllY2hvICJbUGF0aHNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlByZWZpeD0ke3ByZWZpeH0iICAgICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRG9jdW1lbnRhdGlvbj0ke2RvY2Rpcn0vJHtRVF9ESVJfTkFNRX0iID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJIZWFkZXJzPSR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0iICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkxpYnJhcmllcz0ke2xpYmRpcn0iICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiQmluYXJpZXM9JHtiaW5kaXJ9IiAgICAgICAgICAgICAgICAgICAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJQbHVnaW5zPSR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiSW1wb3J0cz0ke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkRhdGE9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfSIgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiVHJhbnNsYXRpb25zPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vdHJhbnNsYXRpb25zIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiU2V0dGluZ3M9JHtzeXNjb25mZGlyfS8ke1FUX0RJUl9OQU1FfSIgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJFeGFtcGxlcz0ke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJEZW1vcz0ke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MiICAgPj4gJFFUX0NPTkZfUEFUSAorCisJJHtFWFRSQV9RTUFLRV9NVU5HRX18fCB0cnVlCisKKwllY2hvIHllcyB8IFFUX0xJQ0VOU0VfRklMRT0iJHtRVF9MSUNFTlNFX0ZJTEV9IiAuL2NvbmZpZ3VyZSAtdiBcCisJCQktcHJlZml4ICR7cHJlZml4fSBcCisJCQktYmluZGlyICR7YmluZGlyfSBcCisJCQktbGliZGlyICR7bGliZGlyfSBcCisJCQktZGF0YWRpciAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1zeXNjb25mZGlyICR7c3lzY29uZmRpcn0vJHtRVF9ESVJfTkFNRX0gXAorCQkJLWRvY2RpciAke2RvY2Rpcn0vJHtRVF9ESVJfTkFNRX0gXAorCQkJLWhlYWRlcmRpciAke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1wbHVnaW5kaXIgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMgXAorCQkJLWltcG9ydGRpciAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cyBcCisJCQktdHJhbnNsYXRpb25kaXIgJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS90cmFuc2xhdGlvbnMgXAorCQkJLWV4YW1wbGVzZGlyICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcyBcCisJCQktZGVtb3NkaXIgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zIFwKKwkJCS1wbGF0Zm9ybSAke1RBUkdFVF9PU30tb2UtZysrIFwKKwkJCS14cGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisJCQkke1FUX0VORElBTn0gXAorCQkJLWNyb3NzYXJjaCAke1FUX0FSQ0h9IFwKKwkJCSR7UVRfTElDRU5TRV9GTEFHU30gXAorCQkJJHtRVF9DT05GSUdfRkxBR1N9IC1uby1mYXN0IFwKKwkJCS1MJHtTVEFHSU5HX0xJQkRJUn0gLUkke1NUQUdJTkdfSU5DRElSfSBcCisJCQktSSR7U1RBR0lOR19JTkNESVJ9L2ZyZWV0eXBlMgorfQorCitkb19jb21waWxlKCkgeworICAgICMgRml4dXAgbWlzc2luZyB3c2VnbCBoZWFkZXIgaW4gc29tZSBTR1ggU0RLcworICAgIGlmICEgWyAtZSAke1NUQUdJTkdfSU5DRElSfS93c2VnbC5oIF0gOyB0aGVuCisgICAgICAgIGNwIHNyYy8zcmRwYXJ0eS9wb3dlcnZyL3dzZWdsLmggc3JjL3BsdWdpbnMvZ2Z4ZHJpdmVycy9wb3dlcnZyL1FXU1dTRUdMLworICAgIGZpCisKKyAgICB1bnNldCBDRkxBR1MgQ1hYRkxBR1MKKworICAgIG9lX3J1bm1ha2UgJHtFWFRSQV9FTlZ9CisKKyAgICAjIEJ1aWxkIHRhcmdldCBxbWFrZQorICAgIGV4cG9ydCBRTUFLRVNQRUM9IiR7U30vbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIgorICAgIGNkICR7U30vcW1ha2UKKyAgICAke09FX1FNQUtFX1FNQUtFfQorICAgIG9lX3J1bm1ha2UgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIKKyAgICBjZCAke1N9Cit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIHRyYW5zbGF0aW9uX2RpciA9IGQuZXhwYW5kKCcke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3RyYW5zbGF0aW9ucy8nKQorICAgIHRyYW5zbGF0aW9uX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXRyYW5zbGF0aW9uLSVzJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCB0cmFuc2xhdGlvbl9kaXIsICdeKGFzc2lzdGFudHxkZXNpZ25lcnxsaW5ndWlzdHxxdHxxdGNvbmZpZ3xxdmZifHF0c2NyaXB0KV8oLiopXC5xbSQnLCB0cmFuc2xhdGlvbl9uYW1lLCAnJHtQTn0gdHJhbnNsYXRpb24gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJyApCisgCisgICAgcGhyYXNlYm9va19kaXIgPSBkLmV4cGFuZCgnJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9waHJhc2Vib29rcy8nKQorICAgIHBocmFzZWJvb2tfbmFtZSA9IGQuZXhwYW5kKCcke1FUX0JBU0VfTkFNRX0tcGhyYXNlYm9vay0lcycpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cygiJXMlcyIgJSAoZC5leHBhbmQoJyR7RH0nKSwgcGhyYXNlYm9va19kaXIpKToKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGhyYXNlYm9va19kaXIsICdeKC4qKVwucXBoJCcsIHBocmFzZWJvb2tfbmFtZSwgJyR7UE59IHBocmFzZWJvb2sgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJyApCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiVGhlIHBhdGggZG9lcyBub3QgZXhpc3Q6IiwgZC5leHBhbmQoJyR7RH0nKSwgcGhyYXNlYm9va19kaXIpCisgCisgICAgIyBQYWNrYWdlIGFsbCB0aGUgcGx1Z2lucyBhbmQgdGhlaXIgLWRiZyB2ZXJzaW9uIGFuZCBjcmVhdGUgYSBtZXRhIHBhY2thZ2UKKyAgICBkZWYgcXRvcGlhX3NwbGl0KHBhdGgsIG5hbWUsIGdsb2IpOgorICAgICAgICAiIiIKKyAgICAgICAgU3BsaXQgdGhlIHBhY2thZ2UgaW50byBhIG5vcm1hbCBhbmQgLWRiZyBwYWNrYWdlIGFuZCB0aGVuIGFkZCB0aGUKKyAgICAgICAgbmV3IHBhY2thZ2VzIHRvIHRoZSBtZXRhIHBhY2thZ2UuCisgICAgICAgICIiIgorICAgICAgICBwbHVnaW5fZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zLyVzLycgJSBwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzJXMiICUgKGQuZXhwYW5kKCcke0R9JyksIHBsdWdpbl9kaXIpKToKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZSBwYXRoIGRvZXMgbm90IGV4aXN0OiIsIGQuZXhwYW5kKCcke0R9JyksIHBsdWdpbl9kaXIpCisgICAgICAgICAgICByZXR1cm4KKyAKKyAgICAgICAgcGx1Z2luX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXBsdWdpbi0lcy0lJXMnICUgbmFtZSkKKyAgICAgICAgZGV2X3BhY2thZ2VzID0gW10KKyAgICAgICAgZGV2X2hvb2sgPSBsYW1iZGEgZmlsZSxwa2csYixjLGQ6ZGV2X3BhY2thZ2VzLmFwcGVuZCgoZmlsZSxwa2cpKQorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5fZGlyLCBnbG9iLCBwbHVnaW5fbmFtZSwgJyR7UE59ICVzIGZvciAlJXMnICUgbmFtZSwgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1kZXZfaG9vaykKKyAgICAgICAgIyBDcmVhdGUgYSAtZGJnIHBhY2thZ2UgYXMgd2VsbAorICAgICAgICBwbHVnaW5fZGlyX2RiZyA9IGQuZXhwYW5kKCcke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8lcy8uZGVidWcnICUgcGF0aCkKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBGYWxzZSkKKyAgICAgICAgZm9yIChmaWxlLHBhY2thZ2UpIGluIGRldl9wYWNrYWdlczoKKyAgICAgICAgICAgIHBhY2thZ2VzID0gIiVzICVzLWRiZyIgJSAocGFja2FnZXMsIHBhY2thZ2UpCisgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4ocGx1Z2luX2Rpcl9kYmcsIG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpCisgICAgICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGJnIiAlIHBhY2thZ2UsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCJERVNDUklQVElPTl8lcy1kYmciICUgcGFja2FnZSwgIiR7UE59ICVzIGZvciAlcyIgJSAobmFtZSwgcGFja2FnZSkpCisKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgcGFja2FnZXMpCisKKyAgICBxdG9waWFfc3BsaXQoJ2FjY2Vzc2libGUnLCAgICAnYWNjZXNzaWJsZScsICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdjb2RlY3MnLCAgICAgICAgJ2NvZGVjJywgICAgICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZGVjb3JhdGlvbnMnLCAgICdkZWNvcmF0aW9uJywgICAgJ15saWJxZGVjb3JhdGlvbiguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdkZXNpZ25lcicsICAgICAgJ2Rlc2lnbmVyJywgICAgICAnXmxpYiguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdnZnhkcml2ZXJzJywgICAgJ2dmeGRyaXZlcicsICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZ3JhcGhpY3NzeXN0ZW1zJywnZ3JhcGhpY3NzeXN0ZW1zJywgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2tiZGRyaXZlcnMnLCAgICAna2JkZHJpdmVyJywgICAgICdebGlicSguKilrYmRkcml2ZXJcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdtb3VzZWRyaXZlcnMnLCAgJ21vdXNlZHJpdmVyJywgICAnXmxpYnEoLiopbW91c2Vkcml2ZXJcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdpY29uZW5naW5lcycsICAgJ2ljb25lbmdpbmUnLCAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnaW1hZ2Vmb3JtYXRzJywgICdpbWFnZWZvcm1hdCcsICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2lucHV0bWV0aG9kcycsICAnaW5wdXRtZXRob2QnLCAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdzcWxkcml2ZXJzJywgICAgJ3NxbGRyaXZlcicsICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc2NyaXB0JywgICAgICAgICdzY3JpcHQnLCAgICAgICAgJ15saWJxdHNjcmlwdCguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdzdHlsZXMnLCAgICAgICAgJ3N0eWxlJywgICAgICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgncGhvbm9uX2JhY2tlbmQnLCdwaG9ub24tYmFja2VuZCcsJ15saWJwaG9ub25fKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2JlYXJlcicsICAgICAgICAnYmVhcmVyJywgICAgICAgICdebGlicSguKiliZWFyZXJcLnNvJCcpCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExfUk9PVD0ke0R9CisKKwkjIEluc3RhbGwgYSBwcm9wZXIgdGFyZ2V0IHZlcnNpb24gb2YgcW1ha2UKKwlybSAke0R9LyR7YmluZGlyfS9xbWFrZQorCWluc3RhbGwgLW0gMDc1NSBiaW4vcW1ha2UyICR7RH0ke2JpbmRpcn0vcW1ha2UKKworCSMgZml4IHBrZ2NvbmZpZywgbGlidG9vbCBhbmQgcHJsIGZpbGVzCisJc2VkIC1pIC1lICdzIy1MJHtTfS9saWIvXD8jI2cnIFwKKwkJCS1lICdzIy1MJHtTVEFHSU5HX0xJQkRJUn0vXD8jI2cnIFwKKwkJCS1lICdzI1NUQUdJTkdfTElCRElSfSNsaWJkaXJ9JyNnIFwKKwkJCS1lICdzIy1MJHtsaWJkaXJ9L1w/IyNnJyBcCisJCQktZSBzIyckKE9FX1FNQUtFX0xJQlNfWDExKScjIiR7T0VfUU1BS0VfTElCU19YMTF9IiNnIFwKKwkJCS1lICdzIyIgLVdsLC1ycGF0aC1saW5rLCR7U30vbGliL1w/IiMjZycgXAorCQkJLWUgJ3MjIiAtV2wsLXJwYXRoLWxpbmssJHtsaWJkaXJ9L1w/IiMjZycgXAorCQkJLWUgJ3MjSWluI0kke2luI2cnIFwKKwkJCS1lICdzIy1MXC5cLi9cLlwuL1dlYkNvcmUvcmVsZWFzZVxzXCstTFwuXC4vXC5cLi9KYXZhU2NyaXB0Q29yZS9yZWxlYXNlXHNcKy1sd2ViY29yZSMjZycgXAorCQkJLWUgJ3MjLWxqc2NvcmUjI2cnIFwKKwkJCSR7RH0ke2xpYmRpcn0vKi5sYSAke0R9JHtsaWJkaXJ9LyoucHJsICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMKKworCSMgZml4IHBrZ2NvbmZpZyBmaWxlcworCXNlZCAtaSAtZSBzIyJtb2NfbG9jYXRpb249LiokIiMibW9jX2xvY2F0aW9uPSR7YmluZGlyfS9tb2M0IiMgXAorCQkJLWUgcyMidWljX2xvY2F0aW9uPS4qJCIjInVpY19sb2NhdGlvbj0ke2JpbmRpcn0vdWljNCIjIFwKKwkJCSR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMKKwlmb3IgbmFtZSBpbiAke1FUX0xJQl9OQU1FU307IGRvCisJCXNlZCAtaSAtZSAvUmVxdWlyZXMvcyMiJHtuYW1lfSIjIiR7bmFtZX0ke1FUX0xJQklORklYfSIjZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisJZG9uZQorCisJIyBRVCBhYnVzZXMgJGluY2x1ZGVkaXIgdG8gcG9pbnQgdG8gaXRzIGhlYWRlcnMsIHdoaWNoIGJyZWFrcyBwa2djb25maWcgc3lzcm9vdCwgc28gbWFudWFsbHkgZml4IGl0IHVwIGhlcmU6CisJZm9yIHBjIGluICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMgOyBkbworCQlzZWQgLWkgLWUgInM6cHJlZml4fS9pbmNsdWRlLyR7UVRfRElSX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYyk6cHJlZml4fS9pbmNsdWRlOiIgXAorCQkJCS1lICdzOklQezpJJHs6ZycgJHBjCisJZG9uZQorCisJI0FwcGVuZCBhbiBFIHRvIHRoZSBxdGRlbW8gZmlsZQorCWlmIFsgLW4gIiR7UVRfTElCSU5GSVh9IiBdIDsgdGhlbgorCQlbIC1mICR7RH0ke2JpbmRpcn0vcXRkZW1vIF0gJiYgbXYgJHtEfSR7YmluZGlyfS9xdGRlbW8gJHtEfSR7YmluZGlyfS9xdGRlbW8ke1FUX0xJQklORklYfQorCWZpCisKKwlzY3JpcHQ9IiR7RH0vJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9lbnZpcm9ubWVudC1zZXR1cCIKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFFUX0RJUl9OQU1FPSR7UVRfRElSX05BTUV9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFFUX0xJQklORklYPSR7UVRfTElCSU5GSVh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0FSPWFyJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NDPWdjYycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DWFg9ZysrJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJTks9ZysrJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVD0ke2xpYmRpcn0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUPSR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfTU9DPSR7YmluZGlyfS9tb2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDPSR7YmluZGlyfS91aWMnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDMz0ke2JpbmRpcn0vdWljMycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9SQ0M9JHtiaW5kaXJ9L3JjYycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUw9JHtiaW5kaXJ9L3FkYnVzY3BwMnhtbCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU1hNTDJDUFA9JHtiaW5kaXJ9L3FkYnVzeG1sMmNwcCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUc9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFFNQUtFU1BFQz0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvbGludXgtZysrJyA+PiAkc2NyaXB0CisJY2htb2QgMDc1NSAkc2NyaXB0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0X2FyY2guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NGMyODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYwpAQCAtMCwwICsxLDIyIEBACitpbmhlcml0IHNpdGVpbmZvCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitzZXRfYXJjaCgpIHsKKyAgIGNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKyAgICAgICBhYXJjaDY0KikgUVRfQVJDSD1hYXJjaDY0IDs7CisgICAgICAgYXJtKikgICAgIFFUX0FSQ0g9YXJtIDs7CisgICAgICAgaSo4NiopICAgIFFUX0FSQ0g9aTM4NiA7OworICAgICAgIG1pcHMqKSAgICBRVF9BUkNIPW1pcHMgOzsKKyAgICAgICBwb3dlcnBjKikgUVRfQVJDSD1wb3dlcnBjIDs7CisgICAgICAgeDg2XzY0KikgIFFUX0FSQ0g9eDg2XzY0IDs7CisgICBlc2FjCit9CisKK3NldF9lbmRpYW4oKSB7CisgICAgaWYgWyAke1NJVEVJTkZPX0VORElBTk5FU1N9ID0gImxlIiBdIDsgdGhlbgorICAgICAgICBRVF9FTkRJQU49Ii1saXR0bGUtZW5kaWFuIgorICAgIGVsaWYgWyAke1NJVEVJTkZPX0VORElBTk5FU1N9ID0gImJlIiBdIDsgdGhlbgorICAgICAgICBRVF9FTkRJQU49Ii1iaWctZW5kaWFuIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FIGIvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDc1NThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRQpAQCAtMCwwICsxLDEzIEBACitUaGUgcmVjaXBlcy1ydCByZWNpcGVzIHByb3ZpZGUgcGFja2FnZSBhbmQgaW1hZ2UgcmVjaXBlcyBmb3IgdXNpbmcgYW5kIHRlc3RpbmcKK3RoZSBQUkVFTVBUX1JUIGtlcm5lbC4gVGhlIGNvcmUtaW1hZ2UtcnQqLmJiIGltYWdlcyBhcmUgbWluaW1hbCBpbWFnZXMgd2l0aAorYSBjb3VwbGUgZXh0cmEgcGFja2FnZXMsIGluY2x1ZGluZyBydC10ZXN0cy4gSW4gb3JkZXIgdG8gYnVpbGQgdGhlIGltYWdlIHdpdGgKK3RoZSBsaW51eC15b2N0by1ydCBrZXJuZWwsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4geW91cgorbG9jYWwuY29uZiwgYmJsYXllcnMuY29uZiwgb3IgeW91ciAkTUFDSElORS5jb25mLgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8tcnQiCisKK0lmIHlvdSBhcmUgY3JlYXRpbmcgYSBuZXcgQlNQIHdoaWNoIHNob3VsZCB1c2UgbGludXgteW9jdG8tcnQgYnkgZGVmYXVsdCwKK3VzZSB0aGUgbGluZSBhYm92ZSBpbiB0aGUgJE1BQ0hJTkUuY29uZiBpbiB5b3VyIEJTUCBsYXllciwgYW5kIHNwZWNpZnkgdGhlCitmb2xsb3dpbmcgaW4gYSBsaW51eC15b2N0by1ydCBiYmFwcGVuZCByZWNpcGU6CisKK0NPTVBBVElCTEVfTUFDSElORV8kTUFDSElORSA9ICRNQUNISU5FCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiIGIvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdkNTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIGEgdGVzdCBzdWl0ZSBhbmQgXAordG9vbHMgZm9yIHJlYWwtdGltZSB1c2UuIEl0IGluY2x1ZGVzIHRoZSBmdWxsIG1ldGEtdG9vbGNoYWluLCBkZXZlbG9wbWVudCBcCitoZWFkZXJzIGFuZCBsaWJyYXJpZXMgdG8gZm9ybSBhIHN0YW5kYWxvbmUgU0RLLiIKK0RFUEVORFMgPSAibGludXgteW9jdG8tcnQiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyB0b29scy1zZGsgdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyIKKworSU1BR0VfSU5TVEFMTCArPSAicnQtdGVzdHMgaHdsYXRkZXRlY3Qga2VybmVsLWRldiIKKworTElDRU5TRSA9ICJNSVQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIgYi9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiNmY4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKKworREVTQ1JJUFRJT04gPSAiQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdCBwbHVzIGEgXAorcmVhbC10aW1lIHRlc3Qgc3VpdGUgYW5kIHRvb2xzIGFwcHJvcHJpYXRlIGZvciByZWFsLXRpbWUgdXNlLiIKK0RFUEVORFMgPSAibGludXgteW9jdG8tcnQiCisKK0lNQUdFX0lOU1RBTEwgKz0gInJ0LXRlc3RzIGh3bGF0ZGV0ZWN0IgorCitMSUNFTlNFID0gIk1JVCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ5M2ViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtcnQtdGVzdHMtQWxsb3ctZm9yLXVzZXItc3BlY2lmaWVkLVBZTElCLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK01lc3NhZ2UtSWQ6IDw2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxLjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitGcm9tOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMTIgMTU6MTk6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHJ0LXRlc3RzOiBBbGxvdyBmb3IgdXNlci1zcGVjaWZpZWQgUFlMSUIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworQWxsb3cgdXNlcnMgKGJ1aWxkIHN5c3RlbXMpIHRvIHNwZWNpZnkgUFlMSUIuIFRoaXMgYWxsb3dzIGZvciBhCitjcm9zcy1idWlsZC1zeXN0ZW0gdG8gc3BlY2lmeSB0aGUgdGFyZ2V0IFBZTElCIHJhdGhlciB0aGFuIHRoZSBob3N0CitQWUxJQi4KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitDQzogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+CitDQzogSm9obiBLYWN1ciA8amthY3VyQHJlZGhhdC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDNhODI0MDcuLjYxZTJmOWYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMyw3ICsyMyw3IEBAIGVuZGlmCisgQ0ZMQUdTID89IC1EX0dOVV9TT1VSQ0UgLVdhbGwgLVduby1ub25udWxsIC1Jc3JjL2luY2x1ZGUKKyBMREZMQUdTID89CisgCistUFlMSUIgIDo9ICQoc2hlbGwgcHl0aG9uIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKScpCisrUFlMSUIgID89ICQoc2hlbGwgcHl0aG9uIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKScpCisgCisgaWZuZGVmIERFQlVHCisgCUNGTEFHUwkrPSAtTzIKKy0tIAorMS43LjExLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzYxMzZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSBhZjkzZTU4MGQwMDVhMmJiYTZlZDM2NTI4MDAzYWY0Y2Y2MzFhZGI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorTWVzc2FnZS1JZDogPGFmOTNlNTgwZDAwNWEyYmJhNmVkMzY1MjgwMDNhZjRjZjYzMWFkYjguMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0luLVJlcGx5LVRvOiA8NjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MS4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorUmVmZXJlbmNlczogPDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEuMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0Zyb206IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxMSBTZXAgMjAxMiAxNDo1MToxMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvMl0gcnQtdGVzdHM6IEJyZWFrIG91dCBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0FsbG93IGh3bGF0ZGV0ZWN0IHRvIGJlIGluc3RhbGxlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSByZXN0IG9mIHRoZQordGVzdHMuIFRoaXMgaXMgY29udmVuaWVudCBmb3IgYnVpbGQgc3lzdGVtcyB0aGF0IHBhY2thZ2UgaXQgc2VwYXJhdGVseQorZHVlIHRvIHRoZSBweXRob24gZGVwZW5kZW5jeS4KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitDQzogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+CitDQzogSm9obiBLYWN1ciA8amthY3VyQHJlZGhhdC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDE4ICsrKysrKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNjFlMmY5Zi4uNjM2ZTYzYiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTExOSwyMSArMTE5LDE1IEBAIGNoYW5nZWxvZzoKKyAJZ2l0IGxvZyA+Q2hhbmdlTG9nCisgCisgLlBIT05ZOiBpbnN0YWxsCistaW5zdGFsbDogYWxsCisraW5zdGFsbDogYWxsIGluc3RhbGxfaHdsYXRkZXRlY3QKKyAJbWtkaXIgLXAgIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChtYW5kaXIpL21hbjQiCisgCW1rZGlyIC1wICIkKERFU1RESVIpJChzcmNkaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW44IgorIAljcCAkKFRBUkdFVFMpICIkKERFU1RESVIpJChiaW5kaXIpIgorLQlpZiB0ZXN0IC1uICIkKFBZTElCKSIgOyB0aGVuIFwKKy0JCWluc3RhbGwgLUQgLW0gNzU1IHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC5weSAkKERFU1RESVIpJChQWUxJQikvaHdsYXRkZXRlY3QucHkgOyBcCistCQlybSAtZiAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCistCQlsbiAtcyAkKFBZTElCKS9od2xhdGRldGVjdC5weSAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCistCWZpCisgCWluc3RhbGwgLUQgLW0gNjQ0IHNyYy9iYWNrZmlyZS9iYWNrZmlyZS5jICIkKERFU1RESVIpJChzcmNkaXIpL2JhY2tmaXJlL2JhY2tmaXJlLmMiCisgCWluc3RhbGwgLW0gNjQ0IHNyYy9iYWNrZmlyZS9NYWtlZmlsZSAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9NYWtlZmlsZSIKKyAJZ3ppcCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuNC9iYWNrZmlyZS40Lmd6IgorIAlnemlwIHNyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9jeWNsaWN0ZXN0LjguZ3oiCisgCWd6aXAgc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BpX3N0cmVzcy44Lmd6IgorLQlnemlwIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiCisgCWd6aXAgc3JjL3B0c2VtYXRlc3QvcHRzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3B0c2VtYXRlc3QuOC5neiIKKyAJZ3ppcCBzcmMvc2lnd2FpdHRlc3Qvc2lnd2FpdHRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zaWd3YWl0dGVzdC44Lmd6IgorIAlnemlwIHNyYy9zdnNlbWF0ZXN0L3N2c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zdnNlbWF0ZXN0LjguZ3oiCitAQCAtMTQxLDYgKzEzNSwxNiBAQCBpbnN0YWxsOiBhbGwKKyAJZ3ppcCBzcmMvYmFja2ZpcmUvc2VuZG1lLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2VuZG1lLjguZ3oiCisgCWd6aXAgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9oYWNrYmVuY2guOC5neiIKKyAKKysuUEhPTlk6IGluc3RhbGxfaHdsYXRkZXRlY3QKKytpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdAorKwlpZiB0ZXN0IC1uICIkKFBZTElCKSIgOyB0aGVuIFwKKysJCW1rZGlyIC1wICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW44IiA7IFwKKysJCWluc3RhbGwgLUQgLW0gNzU1IHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC5weSAkKERFU1RESVIpJChQWUxJQikvaHdsYXRkZXRlY3QucHkgOyBcCisrCQlybSAtZiAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCisrCQlsbiAtcyAkKFBZTElCKS9od2xhdGRldGVjdC5weSAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCisrCQlnemlwIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiIDsgXAorKwlmaQorKworIC5QSE9OWTogcmVsZWFzZQorIHJlbGVhc2U6IGNsZWFuIGNoYW5nZWxvZworIAlta2RpciAtcCByZWxlYXNlcworLS0gCisxLjcuMTEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9NYWtlZmlsZS1maXgtZ3ppcC1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzVkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDA3YjVlZDQyZDcwNDFjY2MwODQ4ODllYWE5NjgxN2FhMDk3YmY0NjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMyBGZWIgMjAxNSAwMzoxMDoyNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGd6aXAgY29tbWFuZAorCitUaGUgIi1jIiBkb2Vzbid0IHdvcmsgaW4gY29tbWFuZCAiZ3ppcCBmaWxlIC1jIiwgbmVlZCB1c2UgImd6aXAgLWMgZmlsZSIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAyMTlhNTkxLi5jN2QxNDdhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMTQ0LDcgKzE0NCw3IEBAIGluc3RhbGxfaHdsYXRkZXRlY3Q6IGh3bGF0ZGV0ZWN0CisgCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorIAkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorIAkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQkJZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IiA7IFwKKysJCWd6aXAgLWMgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIgOyBcCisgCWZpCisgCisgLlBIT05ZOiByZWxlYXNlCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2ZpeC1yZS1pbnN0YWxsLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4ZWM5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0N1cnJlbnRseSBnemlwIG9uIGhvc3QgaXMgdXNlZC4gSWYgaG9zdCBnemlwIGlzIHByb3ZpZGVkIGJ5IHBpZ3osIGl0IGZhaWxzIHRvCityZWRvIGluc3RhbGwgdGhhdCBwaWd6IGNhbid0IGhhbmRsZSB0aGUgb3B0aW9uIGFmdGVyIGZpbGUgbmFtZS4gV2hlbiBydW46CisKK2d6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiBPVVRQVVRfRklMRQorCitGaWxlIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IGlzIHppcHBlZCBpbnRvIGJhY2tmaXJlLjQuZ3ogYnV0IHRoZSBPVVRQVVRfRklMRQoraXMgZW1wdHkuIFdoZW4gcmVydW4gZG9faW5zdGFsbCwgaXQgc2hvd3Mgd2FybmluZzoKKworfCBnemlwOiBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCBkb2VzIG5vdCBleGlzdCAtLSBza2lwcGluZworCithbmQgZW1wdHkgbWFudWFsIGd6aXAgZmlsZXMgYXJlIGNyZWF0ZWQ6CisKKyQgZmlsZSBpbWFnZS91c3Ivc2hhcmUvbWFuL21hbjQvYmFja2ZpcmUuNC5negoraW1hZ2UvdXNyL3NoYXJlL21hbi9tYW40L2JhY2tmaXJlLjQuZ3o6IGVtcHR5CisKK0ZpeCBpdCBieSBwdXR0aW5nIG9wdGlvbiAnLWMnIGJlZm9yZSB0aGUgZmlsZSBuYW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKy0tLSBnaXQvTWFrZWZpbGUub3JpZwkyMDE0LTExLTE0IDE1OjQ3OjI2LjQwNjYzODQxOSArMDgwMAorKysrIGdpdC9NYWtlZmlsZQkyMDE0LTExLTE0IDE1OjQ2OjUzLjg5MDYzNzUzMyArMDgwMAorQEAgLTEyNywxNSArMTI3LDE1IEBACisgCWNwICQoVEFSR0VUUykgIiQoREVTVERJUikkKGJpbmRpcikiCisgCWluc3RhbGwgLUQgLW0gNjQ0IHNyYy9iYWNrZmlyZS9iYWNrZmlyZS5jICIkKERFU1RESVIpJChzcmNkaXIpL2JhY2tmaXJlL2JhY2tmaXJlLmMiCisgCWluc3RhbGwgLW0gNjQ0IHNyYy9iYWNrZmlyZS9NYWtlZmlsZSAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9NYWtlZmlsZSIKKy0JZ3ppcCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuNC9iYWNrZmlyZS40Lmd6IgorLQlnemlwIHNyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9jeWNsaWN0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BpX3N0cmVzcy44Lmd6IgorLQlnemlwIHNyYy9wdHNlbWF0ZXN0L3B0c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wdHNlbWF0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3NpZ3dhaXR0ZXN0L3NpZ3dhaXR0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2lnd2FpdHRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvc3ZzZW1hdGVzdC9zdnNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc3ZzZW1hdGVzdC44Lmd6IgorLQlnemlwIHNyYy9wbXF0ZXN0L3BtcXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wbXF0ZXN0LjguZ3oiCistCWd6aXAgc3JjL2JhY2tmaXJlL3NlbmRtZS44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NlbmRtZS44Lmd6IgorLQlnemlwIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaGFja2JlbmNoLjguZ3oiCisrCWd6aXAgLWMgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKysJZ3ppcCAtYyBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKysJZ3ppcCAtYyBzcmMvcHRzZW1hdGVzdC9wdHNlbWF0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcHRzZW1hdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9zaWd3YWl0dGVzdC9zaWd3YWl0dGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NpZ3dhaXR0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3N2c2VtYXRlc3Qvc3ZzZW1hdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3N2c2VtYXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvcG1xdGVzdC9wbXF0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcG1xdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9iYWNrZmlyZS9zZW5kbWUuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zZW5kbWUuOC5neiIKKysJZ3ppcCAtYyBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2hhY2tiZW5jaC44Lmd6IgorIAorIC5QSE9OWTogaW5zdGFsbF9od2xhdGRldGVjdAorIGluc3RhbGxfaHdsYXRkZXRlY3Q6IGh3bGF0ZGV0ZWN0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxN2ZkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaApAQCAtMCwwICsxLDQxIEBACitjaGlsZGluZm9fdCBpcyBhIHVuaW9uIHRoYXQgY29udGFpbnMgYm90aCBzaWduZWQgKGVycm9yKSBhbmQgdW5zaWduZWQKKyh0aHJlYWRpZCkgbWVtYmVycy4gVGh1cyBhIGxhcmdlIHRocmVhZGlkIGNvdWxkIGFwcGVhciBhcyBhIG5lZ2F0aXZlIGVycm9yCit2YWx1ZSwgd2hpY2ggd2lsbCBjYXVzZSB1bmV4cGVjdGVkIGZhaWx1cmVzLgorCitjaGlsZGluZm9fdCBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHN0cnVjdCwgYnV0IGl0IGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUKK3BlcmZvcm1hbmNlLiBTbyB3ZSBrZWVwIGl0IGFzIGEgdW5pb24gYnV0IG9ubHkgY2hlY2sgZXJyb3IgYWdhaW5zdCAtMS4gVGhlcmUgaXMKK3N0aWxsIGEgY2hhbmNlIG9mIGZhbHNlIGFsYXJtIGJ1dCBpdCdzIHNtYWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmVzc2UgWmhhbmcgPHNlbi56aGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jIGIvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYworaW5kZXggOGJhZWIyMy4uZGMwZGU4ZiAxMDA2NDQKKy0tLSBhL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKKysrKyBiL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKK0BAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBncm91cChjaGlsZGluZm9fdCAqY2hpbGQsCisgCQljdHgtPndha2VmZCA9IHdha2VmZDsKKyAKKyAJCWNoaWxkW3RhYl9vZmZzZXQraV0gPSBjcmVhdGVfd29ya2VyKGN0eCwgKHZvaWQgKikodm9pZCAqKXJlY2VpdmVyKTsKKy0JCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K2ldLmVycm9yIDwgMCApIHsKKysJCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K2ldLmVycm9yID09IC0xICkgeworIAkJCXJldHVybiAoaSA+IDAgPyBpLTEgOiAwKTsKKyAJCX0KKyAJCXNuZF9jdHgtPm91dF9mZHNbaV0gPSBmZHNbMV07CitAQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3JvdXAoY2hpbGRpbmZvX3QgKmNoaWxkLAorIAkJc25kX2N0eC0+bnVtX2ZkcyA9IG51bV9mZHM7CisgCisgCQljaGlsZFt0YWJfb2Zmc2V0K251bV9mZHMraV0gPSBjcmVhdGVfd29ya2VyKHNuZF9jdHgsICh2b2lkICopKHZvaWQgKilzZW5kZXIpOworLQkJaWYoIGNoaWxkW3RhYl9vZmZzZXQrbnVtX2ZkcytpXS5lcnJvciA8IDAgKSB7CisrCQlpZiggY2hpbGRbdGFiX29mZnNldCtudW1fZmRzK2ldLmVycm9yID09IC0xICkgeworIAkJCXJldHVybiAobnVtX2ZkcytpKS0xOworIAkJfQorIAl9CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5IGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyMjgwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkKQEAgLTAsMCArMSw0MTIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICAgQlNELTMtQ2xhdXNlCisjIENvcHlyaWdodCAoQykgMjAxNSBFbmVhIFNvZnR3YXJlIEFCCisjIEF1dGhvcjogVGhvbWFzIEx1bmRzdHLDtm0gPHRob21hcy5sdW5kc3Ryb21AZW5lYS5jb20+CisKKyMgVGhlIHNjcmlwdCBtZWFzdXJlcyBpbnRlcnJ1cHQgbGF0ZW5jeSB0b2dldGhlciB3aXRoIGRpZmZlcmVudCB0eXBlcyBvZgorIyBzeXN0ZW0gbG9hZC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBwcm9ncmFtcyBjeWNsaWN0ZXN0IGFuZCBzdHJlc3MuCisjCisjIFRoZSBtYWluIG91dHB1dCBpczoKKyMKKyMgICBCZXN0IGNhc2UgKG1pbikgbGF0ZW5jeQorIyAgICAgVGhpcyBoYXMgdmVyeSBsaW1pdGVkIHZhbHVlLCBidXQgaXMgcHJlc2VudGVkIHNpbmNlIGl0IGNhbiBiZSBkb25lCisjICAgICBlYXNpbHkKKyMKKyMgICBBdmVyYWdlIGxhdGVuY3kKKyMgICAgIFRoaXMgdmFsdWUgaXMgb2YgaW50ZXJyZXN0IGZvciB0aHJvdWdocHV0IG9yaWVudGVkIHN5c3RlbXMuIExpbWl0ZWQKKyMgICAgIHZhbHVlIGZvciBhIHJlYWwtdGltZSBzeXN0ZW0uIEFsc28gcHJlc2VudGVkIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBkby4KKyMKKyMgICBXb3JzdCBjYXNlIChtYXgpIGxhdGVuY3kKKyMgICAgIFRoaXMgaXMgdGhlIGludGVyZXN0aW5nIG51bWJlciBmb3IgYSByZWFsLXRpbWUgc3lzdGVtLiBUaGUgbnVtYmVyCisjICAgICBwcmVzZW50ZWQgaXMgKG9mIGNvdXJjZSkgdGhlIGxhcmdlc3QgbnVtYmVyIG9ic2VydmVkLiBUaGUgY2hhbGxlbmdlCisjICAgICBpcyB0byBrbm93IGhvdyB0aGUgb2JzZXJ2ZWQgd29yc3QgY2FzZSByZWxhdGVzIHRvIHRoZSBhY3R1YWwgd29yc3QgY2FzZS4KKyMKKyMgICAgIFRvIGdldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBjb25maWRlbmNlLCB0aGUgZm9sbG93aW5nIG1ldGhvZCBpcyB1c2VkOgorIyAgICAgMSkgSW5zdGVhZCBvZiBvbmUgbG9uZyBydW4sIHRoZSBtZWFzdXJlbWVudCBpcyBtYWRlIGFzIGEgc2V0IG9mIHNob3J0ZXIKKyMgICAgICAgIHJ1bnMuIFRoZSBudW1iZXIgb2YgcnVucyBtdXN0IGJlIGEgcG93ZXIgb2YgMiBmb3IgcmVhc29ucyB0aGF0IHdpbGwKKyMgICAgICAgIHNob3JsdHkgYmUgb2J2aW91cworIworIyAgICAgMikgRmlyc3QsIGEgbGlzdCBvZiB0aGUgbWF4IHZhbHVlcyBhcmUgY3JlYXRlZC4KKyMKKyMgICAgIDMpIFRoZSBzbWFsbGVzdCB2YWx1ZSBpbiB0aGF0IGxpc3QgaXMgcmVjb3JkZWQuCisjCisjICAgICA0KSBUaGVuIGEgbmV3IGxpc3QgaXMgY3JlYXRlIGJ5IHRha2luZyB0aGUgbWF4IHZhbHVlIG9mIGVhY2ggcGFpciBvZgorIyAgICAgICAgdmFsdWVzIGluIHRoZSBvcmlnaW5hbCBsaXN0LiBJbiB0aGlzIGxpc3QgdGhlIHNtYWxsZXN0IHZhbHVlIGlzCisjICAgICAgICByZWNvcmRlZC4KKyMKKyMgICAgIDUpIFN0ZXAgMyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBpbiB0aGUgbGlzdC4gU2VlCisjICAgICAgICBleGFtcGxlIGJlbG93OgorIworIyAgICAgICAgU2FtcGxlczoKKyMgICAgICAgICAgfCAgNDQgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA3NyB8ICA3NyB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTE4IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMTkgfCAxMTkgfCAxMTkgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDEzOCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgIDU3IHwgMTM4IHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxNzUgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDEzMCB8IDE3NSB8IDE3NSB8IDE3NSB8ICAgICB8CisjICAgICAgICAgIHwgIDU0IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxNTAgfCAxNTAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA0NyB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgIDU5IHwgIDU5IHwgMTUwIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxOTkgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDExNSB8IDE5OSB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTc3IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMjkgfCAxNzcgfCAxOTkgfCAxOTkgfCAxOTkgfAorIworIyAgICAgICAgU21hbGxlc3QgdmFsdWU6CisjICAgICAgICAgIHwgIDQ0IHwgIDU5IHwgMTE5IHwgMTc1IHwgMTk5IHwKKyMKKyMgICAgIDYpIFRoZSBnZW5lcmF0ZWQgbGlzdCBvZiBzbWFsbGVzdCB2YWx1ZXMgaXMgYW5hbHl6ZWQuIEluIHRoaXMgY2FzZSwgaXQKKyMgICAgICAgIGNhbiBiZSBvYnNlcnZlZCB0aGF0IHRoZSB2YWx1ZXMgYXJlIGluY3JlYXNpbmcgc2lnbmlmaWNhbnRseSB0aHJvdWdoCisjICAgICAgICB0aGUgZW50aXJlIGxpc3QsIHdoaWNoIGxlYWRzIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhlIG51bWJlciBvZgorIyAgICAgICAgc2FtcGxlcyBpcyB0b28gc21hbGwuCisjICAgICAgICBJZiBpbnN0ZWFkIHRoZSBsaXN0IGhhZCBiZWVuICgxNjcsIDE5MSwgMTk2LCAxOTksIDE5OSksIHRoZXJlIGhhZAorIyAgICAgICAgYmVlbiBhIHZlcnkgc21hbGwsIG9yIG5vLCBpbmNyZWFzZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiBXZSBtaWdodAorIyAgICAgICAgdGhlbiBzdXNwZWN0IHRoYXQgdGhlIG51bWJlciBvZiBzYW1wbGVzIGlzIHByb2JhYmx5IGxhcmdlIGVub3VnaC4KKyMgICAgICAgIFRoZXJlIGlzIGhvd2V2ZXIgbm8gZ3VhcmFudGVlIGZvciB0aGF0LgorIworIyAgICAgU3RlcHMgMS0yIGFyZSBkb25lIGluIHJ1bl9jeWNsaWN0ZXN0X3N1aXRlCisjICAgICBTdGVwcyAzLTUgYXJlIGRvbmUgaW4gZ2VuX21pbm1heF9saXN0LgorIyAgICAgU3RlcCA2IG5lZWRzIHRvIGJlIGRvbmUgbWFudWFsbHkgc2luY2UgdGhlcmUgaXMgKHlldCkgbm8gd2VsbCBkZWZpbmVkCisjICAgICBGQUlMIGNyaXRlcmlvbiBhbmQgYSB0aGVvcmV0aWNhbGx5IHNvbGlkIFBBU1MgY3JpdGVyaW9uIG1heSBuZXZlciBiZQorIyAgICAgYXZhaWxhYmxlLgorCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKKyMgU2VlIGNvbW1lbnQgb24gdGhlIGZ1bmN0aW9uIHNldF9odW5nX3RtbworaGFzX2h1bmdfdGFza19kZXRlY3Rpb24gPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RGYWlsKEV4Y2VwdGlvbik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICAgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJUZXN0IGZhaWx1cmU6ICgiICsgc2VsZi5tc2cgKyAiKSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRjX25hbWUoc3ViX25hbWUpOgorICAgICAgICByZXR1cm4gInJ0X2JtYXJrLmludGxhdC4iICsgc3ViX25hbWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9nKCkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgcHJpbnQgZXhjZXB0IHRoYXQgYSAnIycgaXMgYWRkZWQgYXQgdGhlIGJlZ2lubmluZworIyBvZiBlYWNoIGxpbmUuIFRoaXMgY2F1c2VzIFRFRkVMIHRvIGlnbm9yZSBpdAorCitkZWYgbG9nKCptc2cpOgorICAgICAgICB0bXAgPSAiIi5qb2luKG1hcChzdHIsIG1zZykpICMgJ21hcChzdHIsIC4uLicgYWxsb3dzIG51bWJlcnMKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIHByaW50ICIjIiwgbGluZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIGxvZygpLCBidXQgd2l0aCBhIHRpbWVzdGFtcCBhZGRlZAorCitkZWYgbG9nX3RzKCptc2cpOgorICAgICAgICB0cyA9IHRpbWUubG9jYWx0aW1lKCkKKyAgICAgICAgc3RhbXAgPSAiJTJkOiUwMmQ6JTAyZDogIiAlICh0cy50bV9ob3VyLCB0cy50bV9taW4sIHRzLnRtX3NlYykKKyAgICAgICAgbG9nKHN0YW1wLCAqbXNnKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgbG9nX3Rlc3RfaGVhZGVyKHNlcV9ubywgbnJfb2ZfdGVzdHMsIG5hbWUpOgorICAgICAgICBsb2coIj0iICogNzgpCisgICAgICAgIGxvZygpCisgICAgICAgIGxvZygiICBUZXN0IGNhc2UgKCVkLyVkKTogJXMiICUgKHNlcV9ubywgbnJfb2ZfdGVzdHMsIHRjX25hbWUobmFtZSkpKQorICAgICAgICBsb2coKQorICAgICAgICBsb2coIi4iICogNzgpCisgICAgICAgIGxvZygpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBzdGFydF9zdHJlc3MoKmFyZ3MpOgorICAgICAgICBzdHJlc3NfY21kICAgICAgICAgPSBbICJzdHJlc3MiIF0KKyAgICAgICAgYWRkZWRfc3RyZXNzX3R5cGVzID0gW10KKyAgICAgICAgcmVxX3N0cmVzc190eXBlcyAgID0gc2V0KGFyZ3MpCisgICAgICAgIGNwdV9jbnQgICAgICAgICAgICA9IHN0cihtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkpCisKKyAgICAgICAgIyBUaGUgZnVuY3Rpb24gY29uZF9hZGRfc3RyZXNzIGFwcGVuZHMgdGhlIG9wdGlvbnMgdG8gdGhlIHN0cmVzcworICAgICAgICAjIGNvbW1hbmQgaWYgdGhlIHN0cmVzcyB0eXBlIGlzIGluIHRoZSBzZXQgb2YgcmVxdWVzdGVkIHN0cmVzcyB0eXBlcworCisgICAgICAgIGRlZiBjb25kX2FkZF9zdHJlc3Moc3RyZXNzX3R5cGUsIG9wdGlvbnMpOgorICAgICAgICAgICAgICAgIGlmIHN0cmVzc190eXBlIGluIHJlcV9zdHJlc3NfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXFfc3RyZXNzX3R5cGVzLnJlbW92ZShzdHJlc3NfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkX3N0cmVzc190eXBlcy5hcHBlbmQoc3RyZXNzX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlc3NfY21kLmV4dGVuZChvcHRpb25zKQorCisgICAgICAgICMtLS0tLS0tLS0tCisKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJpbyIsICBbIi1pIiwgY3B1X2NudF0pCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygiY3B1IiwgWyItYyIsIGNwdV9jbnRdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoImhkZCIsIFsiLWQiLCBjcHVfY250LCAiLS1oZGQtYnl0ZXMiLCAiMjBNIl0pCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygidm0iLCAgWyItbSIsIGNwdV9jbnQsICItLXZtLWJ5dGVzIiwgIjEwTSJdKQorCisgICAgICAgIHVua25vd24gPSAiLCAiLmpvaW4ocmVxX3N0cmVzc190eXBlcykKKyAgICAgICAgaWYgdW5rbm93biAhPSAiIjoKKyAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsKCJVbmtub3duIHN0cmVzcyB0eXBlKHMpOiAlcyIgJSB1bmtub3duKQorCisgICAgICAgIGlmIG5vdCBhZGRlZF9zdHJlc3NfdHlwZXM6CisgICAgICAgICAgICAgICAgbG9nKCJObyBzdHJlc3MgcmVxdWVzdGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGFkZGVkICAgICAgICAgID0gIisiLmpvaW4oYWRkZWRfc3RyZXNzX3R5cGVzKQorICAgICAgICBzdHJlc3NfY21kX3N0ciA9ICIgIi5qb2luKHN0cmVzc19jbWQpCisKKyAgICAgICAgbG9nKCJTdGFydGluZyBzdHJlc3MoIiwgYWRkZWQsICIpIikKKyAgICAgICAgbG9nKCIgIENvbW1hbmQ6ICciLCBzdHJlc3NfY21kX3N0ciwgIiciKQorICAgICAgICBsb2coKQorCisgICAgICAgICMgcHJlZXhlY19mbj1vcy5zZXRzaWQgY2F1c2VzIHN0cmVzcyB0byBiZSBleGVjdXRlZCBpbiBhIHNlcGFyYXRlCisgICAgICAgICMgc2Vzc2lvbiwgPT4gaXQgZ2V0cyBhIG5ldyBwcm9jZXNzIGdyb3VwIChpbmNsLiBjaGlsZHJlbikuIEl0CisgICAgICAgICMgY2FuIHRoZW4gYmUgdGVybWluYXRlZCB1c2luZyBvcy5raWxscGcgaW4gZW5kX3N0cmVzcyB3aXRob3V0CisgICAgICAgICMgdGVybWluYXRpbmcgdGhpcyBzY3JpcHQuCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oc3RyZXNzX2NtZCwgcHJlZXhlY19mbj1vcy5zZXRzaWQpCisKKyAgICAgICAgcmV0dXJuIHAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGVuZF9zdHJlc3MocCk6CisgICAgICAgIGlmIHAgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoZSB2YWx1ZSBOb25lIGluZGljYXRlcyB0aGF0IG5vIHN0cmVzcyBzY2VuYXJpbyB3YXMgc3RhcnRlZAorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHAucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsKCJzdHJlc3MgcHJlbWF0dXJlbHkgdGVybWluYXRlZC4iKQorCisgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHAucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgIGxvZygiVGVybWluYXRlZCBzdHJlc3MiKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdXMyaG1zX3N0cih1cyk6CisgICAgICAgIHMgPSAodXMrNTAwMDAwKSAvLyAxMDAwMDAwICMgUm91bmQgbWljcm9zZWNvbmRzIHRvIHMKKyAgICAgICAgbSA9IHMvLzYwCisgICAgICAgIHMgLT0gNjAqbTsKKyAgICAgICAgaCA9IG0vLzYwCisgICAgICAgIG0gLT0gNjAqaAorCisgICAgICAgIHJldHVybiAiJWQ6JTAyZDolMDJkIiAlIChoLCBtLCBzKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTb21ldGltZSB0aGUgaHVuZyB0YXNrIHN1cGVydmlzaW9uIGlzIHRyaWdnZXJlZCBkdXJpbmcgZXhlY3V0aW9uIG9mCisjIGN5Y2xpY3Rlc3QgKGN5Y2xpY3Rlc3Qgc3RhcnZlcyBzdHJlc3MpLiBUbyBhdm9pZCB0aGF0LCB0aGUgc3VwZXJ2aXNpb24KKyMgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQKKworZGVmIHNldF9odW5nX3RtbyhuZXdfdG1vKToKKyAgICAgICAgZ2xvYmFsIGhhc19odW5nX3Rhc2tfZGV0ZWN0aW9uCisKKyAgICAgICAgdG1vX2ZpbGUgPSAiL3Byb2Mvc3lzL2tlcm5lbC9odW5nX3Rhc2tfdGltZW91dF9zZWNzIgorCisgICAgICAgIGlmIG5vdCBoYXNfaHVuZ190YXNrX2RldGVjdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHRtb19maWxlLCBvcy5XX09LKToKKyAgICAgICAgICAgICAgICBsb2coIkh1bmcgdGFzayBkZXRlY3Rpb24gbm90IHN1cHBvcnRlZCIpCisgICAgICAgICAgICAgICAgbG9nKCIgIChGaWxlICIsIHRtb19maWxlLCAiIG5vdCBmb3VuZCkiKQorICAgICAgICAgICAgICAgIGhhc19odW5nX3Rhc2tfZGV0ZWN0aW9uID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcmlnX3RtbyA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNhdCIsIHRtb19maWxlXSkuc3RyaXAoKSkKKyAgICAgICAgaWYgbmV3X3RtbyAhPSBvcmlnX3RtbzoKKyAgICAgICAgICAgICAgICBjbWQgPSAoICJlY2hvICIgKyBzdHIobmV3X3RtbykgKyAiID4gIiArIHRtb19maWxlICkKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgbG9nKCJDaGFuZ2VkIHRpbWVvdXQgZm9yIGRldGVjdGlvbiBvZiBodW5nIHRhc2tzOiAiLAorICAgICAgICAgICAgICAgICAgICBvcmlnX3RtbywgIiAtPiAiLCBuZXdfdG1vKQorCisgICAgICAgIHJldHVybiBvcmlnX3RtbworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZ2VuX21pbm1heF9saXN0KG1heF9saXN0KToKKyAgICAgICAgcmVzID0gW21pbihtYXhfbGlzdCldCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0bXAgPSBtYXhfbGlzdAorICAgICAgICAgICAgICAgIG1heF9saXN0ID0gW10KKyAgICAgICAgICAgICAgICB3aGlsZSB0bXA6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGlzdC5hcHBlbmQobWF4KHRtcC5wb3AoMCksIHRtcC5wb3AoMCkpKQorCisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChtaW4obWF4X2xpc3QpKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKG1heF9saXN0KSA8IDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhcmFtZXRlcnMgZm9yIGN5Y2xpY3Rlc3Q6CisjCisjIE9uIHRoZSAtUyBvcHRpb24gKGZyb20gY3ljbGljdGVzdC5jKToKKyMgIC1TIGltcGxpZXMgb3B0aW9ucyAtYSAtdCAtbiBhbmQgc2FtZSBwcmlvcml0eSBvZiBhbGwgdGhyZWFkcworIyAgICAtYTogT25lIHRocmVhZCBwZXIgY29yZQorIyAgICAtbjogdXNlIGNsb2NrX25hbm9zbGVlcCBpbnN0ZWFkIG9mIHBvc2l4IGludGVydmFsIHRpbWVycworIyAgICAtdDogKHdpdGhvdXQgYXJndW1lbnQpIFNldCBudW1iZXIgb2YgdGhyZWFkcyB0byB0aGUgbnVtYmVyCisjICAgICAgICAgb2YgY3B1cworCitpbnRlcnZhbF9jb3JlXzAgPSAxMDAgICAgICMgVGltZXIgaW50ZXJ2YWwgb24gY29yZSAwIFt1c10KK2ludGVydmFsX2RlbHRhICA9IDIwICAgICAgIyBJbnRlcnZhbCBpbmNyZW1lbnQgZm9yIGVhY2ggY29yZSBbdXNdCitsb29wX2NvdW50ICAgICAgPSAzMDAwMCAgICMgTnVtYmVyIG9mIGxvb3BzIChvbiBjb3JlIDApLgorCitjbWQgPSAoImN5Y2xpY3Rlc3QiLAorICAgICAgICItUyIsICAgICAgICAgICAgICMgU3RhbmRhcmQgU01QIHRlc3RpbmcuIFNlZSBiZWxvdworICAgICAgICItcCIsICI5OSIsICAgICAgICMgUlQgcHJpb3JpdHkgOTkKKyAgICAgICAiLXEiLCAgICAgICAgICAgICAjIFF1aWV0IG1vZGUsIGkuZS4gcHJpbnQgb25seSBhIHN1bW1hcnkKKyAgICAgICAiLWkiLCBzdHIoaW50ZXJ2YWxfY29yZV8wKSwKKyAgICAgICAiLWQiLCBzdHIoaW50ZXJ2YWxfZGVsdGEpLAorICAgICAgICItbCIsIHN0cihsb29wX2NvdW50KQorICAgICAgICkKK3JleCA9IHJlLmNvbXBpbGUoIkM6XHMqKFxkKykuKk1pbjpccyooXGQrKS4qQXZnOlxzKihcZCspLipNYXg6XHMqKFxkKykiKQorCitkZWYgcnVuX2N5Y2xpY3Rlc3Rfb25jZSgpOgorICAgICAgICByZXMgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQpCisKKyAgICAgICAgIyBtaW5saXN0IGFuZCBtYXhsaXN0IGFyZSBsaXN0cyB3aXRoIHRoZSBleHRyZW1lcyBmb3IgZWFjaCBjb3JlCisgICAgICAgICMgYXZnX2NudCBpcyB0aGUgc3VtIG9mIGN5Y2xlcyBmb3IgYWxsIGNvcmVzCisgICAgICAgICMgYXZnX3N1bSBpcyB0aGUgc3VtIG9mIChjeWNsZSBjb3VudCphdmVyYWdlKSBmb3IgZWFjaCBjb3JlCisgICAgICAgICMgICAgIFNpbmNlIGN5Y2xpY3Rlc3QgcnVucyBkaWZmZXJlbnQgbnVtYmVyIG9mIGN5Y2xlcyBvbgorICAgICAgICAjICAgICBkaWZmZXJlbnQgY29yZXMsIGF2Z19zdW0vYXZnX2NudCBnaXZlcyBhIG1vcmUgYWNjdXJhdGUKKyAgICAgICAgIyAgICAgdmFsdWUgb2YgdGhlIG92ZXJhbGwgYXZlcmFnZSB0aGFuIGp1c3QgdGFraW5nIHRoZSBhdmVyYWdlCisgICAgICAgICMgICAgIG9mIGVhY2ggY29yZSdzIGF2ZXJhZ2VzCisKKyAgICAgICAgbWlubGlzdCA9IFtdCisgICAgICAgIG1heGxpc3QgPSBbXQorICAgICAgICBhdmdfc3VtID0gMAorICAgICAgICBhdmdfY250ID0gMAorCisgICAgICAgIGZvciBsaW5lIGluIHJlcy5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICBtID0gcmV4LnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5saXN0LmFwcGVuZChpbnQobS5ncm91cCgyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhsaXN0LmFwcGVuZChpbnQobS5ncm91cCg0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBuID0gaW50KG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhdmdfc3VtICs9IG4gKiBpbnQobS5ncm91cCgzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2Z19jbnQgKz0gbgorCisgICAgICAgIHJldHVybiBtaW4obWlubGlzdCksIFthdmdfc3VtLCBhdmdfY250XSwgbWF4KG1heGxpc3QpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgcHJlY29uZGl0aW9uIGZvciB0aGUgdHJhY2tpbmcgb2YgbWluLW1heCB2YWx1ZXMgaXMgdGhhdAorIyB0aGUgc3VpdGUgc2l6ZSBvcyBhIHBvd2VyIG9mIDIuCisKK04gICAgICAgICAgPSA1CitzdWl0ZV9zaXplID0gMioqTgorCitlc3RfZXhlY190aW1lX29uY2UgID0gaW50ZXJ2YWxfY29yZV8wICogbG9vcF9jb3VudAorZXN0X2V4ZWNfdGltZV9zdWl0ZSA9IHN1aXRlX3NpemUgKiBlc3RfZXhlY190aW1lX29uY2UKKworZGVmIHJ1bl9jeWNsaWN0ZXN0X3N1aXRlKCk6CisgICAgICAgIGxvZygiU3RhcnRpbmcgY3ljbGljdGVzdCIpCisgICAgICAgIGxvZygiICBDb21tYW5kICAgICAgICAgIDogIiwgIiAiLmpvaW4oY21kKSkKKyAgICAgICAgbG9nKCIgIE51bWJlciBvZiBjeWNsZXMgOiAiLCBsb29wX2NvdW50KnN1aXRlX3NpemUsCisgICAgICAgICAgICAiICgiLCBzdWl0ZV9zaXplLCAiIHNldHMgb2YgIiwgbG9vcF9jb3VudCwgIiBjeWNsZXMpIikKKyAgICAgICAgbG9nKCIgIEV4ZWMuIHRpbWUgKGVzdCkgOiAiLCB1czJobXNfc3RyKGVzdF9leGVjX3RpbWVfc3VpdGUpKQorICAgICAgICBsb2coKQorCisgICAgICAgIG9yaWdfdG1vID0gc2V0X2h1bmdfdG1vKDApICMgMCA9PiBEaXNhYmxlCisKKyAgICAgICAgIyBmbG9hdCgnaW5mJykgZW11bGF0ZXMgaW5maW5pdHkuIEF0IGxlYXN0IGluIHRoZSBzZW5zZSB0aGF0IGl0IGlzCisgICAgICAgICMgZ3VhcmFudGVlZCB0byBiZSBsYXJnZXIgdGhhbiBhbnkgYWN0dWFsIG51bWJlci4KKyAgICAgICAgYWNrX21pbiA9IGZsb2F0KCdpbmYnKQorICAgICAgICBhY2tfYXZnID0gWzAsIDBdCisKKyAgICAgICAgbG9nKCkKKyAgICAgICAgbG9nX3RzKCJTdGFydCBvZiBleGVjdXRpb24iKQorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgbWF4X2xpc3QgPSBbXQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBzdWl0ZV9zaXplKToKKyAgICAgICAgICAgICAgICB0bXBfbWluLCB0bXBfYXZnLCB0bXBfbWF4ID0gcnVuX2N5Y2xpY3Rlc3Rfb25jZSgpCisKKyAgICAgICAgICAgICAgICBtc2cgPSAiJTJkLyUyZDoiICUgKGkrMSwgc3VpdGVfc2l6ZSkKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBtaW46ICU0ZCIgJSB0bXBfbWluCisgICAgICAgICAgICAgICAgbXNnICs9ICIgYXZnOiAlNS4xZiIgJSAoZmxvYXQodG1wX2F2Z1swXSkvdG1wX2F2Z1sxXSkKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBtYXg6ICU0ZCIgJSB0bXBfbWF4CisgICAgICAgICAgICAgICAgbG9nX3RzKG1zZykKKworICAgICAgICAgICAgICAgICMgVHJhY2sgbWluaW11bSB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIHRtcF9taW4gPCBhY2tfbWluOgorICAgICAgICAgICAgICAgICAgICAgICAgYWNrX21pbiA9IHRtcF9taW4KKworICAgICAgICAgICAgICAgICMgVHJhY2sgc21hbGxlc3QgbWF4IHZhbHVlCisgICAgICAgICAgICAgICAgbWF4X2xpc3QuYXBwZW5kKHRtcF9tYXgpCisKKyAgICAgICAgICAgICAgICBhY2tfYXZnWzBdICs9IHRtcF9hdmdbMF0KKyAgICAgICAgICAgICAgICBhY2tfYXZnWzFdICs9IHRtcF9hdmdbMV0KKworICAgICAgICB0ID0gdGltZS50aW1lKCktdAorICAgICAgICBsb2dfdHMoIkN5Y2xpY3Rlc3QgY29tcGxldGVkLiBBY3R1YWwgZXhlY3V0aW9uIHRpbWU6IiwKKyAgICAgICAgICAgICAgIHVzMmhtc19zdHIodCoxMDAwMDAwKSkKKyAgICAgICAgbG9nKCkKKyAgICAgICAgc2V0X2h1bmdfdG1vKG9yaWdfdG1vKQorCisgICAgICAgIHJldHVybiBhY2tfbWluLCBmbG9hdChhY2tfYXZnWzBdKS9hY2tfYXZnWzFdLCBnZW5fbWlubWF4X2xpc3QobWF4X2xpc3QpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIGN5Y2xpY3Rlc3RfcnVubmVyOgorICAgICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgc2VxX25vLCBucl9vZl90ZXN0cywgbmFtZSwgc3RyZXNzcGFyYW1zKToKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ190ZXN0X2hlYWRlcihzZXFfbm8sIG5yX29mX3Rlc3RzLCBuYW1lKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RhcnRfc3RyZXNzKCpzdHJlc3NwYXJhbXMpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJtX21pbiwgYm1fYXZnLCBibV9tYXhfbGlzdCA9IHJ1bl9jeWNsaWN0ZXN0X3N1aXRlKCkKKworICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3N0cmVzcyhwKQorCisgICAgICAgICAgICAgICAgICAgICAgICBibV9tYXggPSBibV9tYXhfbGlzdFstMV0KKworICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiTWluOiAlZCB1cyIgJSBibV9taW4pCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkF2ZzogJS4xZiB1cyIgJSBibV9hdmcpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1heDogJWQgdXMiICUgYm1fbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiTWF4IGxpc3Q6ICIsIGJtX21heF9saXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCB0Y19uYW1lKG5hbWUpLCAiW01pbi91cyxBdmcvdXMsTWF4L3VzXToiLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVkLCUuMWYsJWQiICUgKGJtX21pbixibV9hdmcsIGJtX21heCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJQQVNTOiIsIHRjX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiRXhjZXB0aW9uISIpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJUcmFjZWJhY2s6IiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIldEOiAiLCBvcy5nZXRjd2QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkZBSUwiKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiIsIHRjX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3J1bm5lciA9IGN5Y2xpY3Rlc3RfcnVubmVyKCkKKwordGVzdHMgPSAoKCJub19zdHJlc3MiLCBbXSksCisgICAgICAgICAoImNwdSIsICBbImNwdSJdKSwKKyAgICAgICAgICgiaGRkIiwgIFsiaGRkIl0pLAorICAgICAgICAgKCJpbyIsICAgWyJpbyJdKSwKKyAgICAgICAgICgidm0iLCAgIFsidm0iXSksCisgICAgICAgICAoImZ1bGwiLCBbImlvIiwgImNwdSIsICJoZGQiLCAidm0iXSksCisgICAgICAgICApCisKK25yX29mX3Rlc3RzID0gbGVuKHRlc3RzKQorZm9yIHNlcV9ubywgcGFyYW1zIGluIGVudW1lcmF0ZSh0ZXN0cywgc3RhcnQ9MSk6CisgICAgICAgIHJ1bm5lci5ydW5fdGVzdChzZXFfbm8sIG5yX29mX3Rlc3RzLCAqcGFyYW1zKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2ZDNlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworcHl0aG9uIC4vcnRfYm1hcmsucHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2h3bGF0ZGV0ZWN0XzAuOTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxOWViOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiSGFyZHdhcmUgbGF0ZW5jeSBkZXRlY3RvciIKK0RFU0NSSVBUSU9OID0gIlB5dGhvbiB1dGlsaXR5IGZvciBjb250cm9sbGluZyB0aGUga2VybmVsIGhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0aW9uIG1vZHVsZSAoaHdsYXRfZGV0ZWN0b3Iua28pLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L2Nscmt3bGxtcy9ydC10ZXN0cy5naXQiCitTRUNUSU9OID0gInRlc3RzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCityZXF1aXJlIHJ0LXRlc3RzLmluYworCitFWFRSQV9PRU1BS0UgKz0gIlBZTElCPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vZGlzdC1wYWNrYWdlcyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIGh3bGF0ZGV0ZWN0Cit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbF9od2xhdGRldGVjdCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IFwKKwkgICAgICAgICAgIE1BTkRJUj0ke21hbmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Cit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMvaHdsYXRkZXRlY3QucHkiCitSREVQRU5EU18ke1BOfSA9ICJweXRob24gcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXRleHR1dGlscyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtaHdsYXQtZGV0ZWN0b3IiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFkYjEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYwpAQCAtMCwwICsxLDE5IEBACisjIFZlcnNpb24gdjAuOTIKK1BWID0gIjAuOTIiCitTUkNSRVYgPSAiNWY5ZjFlM2ZlMzI3NDQwYTlkNDA1ZjRhZjhmZWIxNmZmN2E5MDllYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2xya3dsbG1zL3J0LXRlc3RzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBuZWVkIHRvIGFwcGVuZCBydC10ZXN0cycgZGVmYXVsdCBDRkxBR1MgdG8gb3VycworQ0ZMQUdTICs9ICItSSR7U30vc3JjL2luY2x1ZGUgLURfR05VX1NPVVJDRSAtV2FsbCAtV25vLW5vbm51bGwiCisKKyMgY2FsbGluZyAndW5hbWUgLW0nIGlzIGJyb2tlbiBvbiBjcm9zc2J1aWxkcworRVhUUkFfT0VNQUtFID0gIk5VTUE9MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlMmY2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUmVhbC1UaW1lIHByZWVtcHRpb24gdGVzdGNhc2VzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9ydC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0N5Y2xpY3Rlc3QiCitTRUNUSU9OID0gInRlc3RzIgorREVQRU5EUyA9ICJsaW51eC1saWJjLWhlYWRlcnMgdmlydHVhbC9saWJjIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuYztiZWdpbmxpbmU9NztlbmRsaW5lPTk7bWQ1PWU3NjhiOGRhNDQ1NTVmZTYzZjY1ZTVjNDk3ODQ0Y2I1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9waV90ZXN0cy9waV9zdHJlc3MuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTE5O21kNT1iZDQyNmE2MzRhNDNlYzYxMmU5ZmJmMTI1ZGZjYzk0OSIKKworcmVxdWlyZSBydC10ZXN0cy5pbmMKK2luaGVyaXQgcHRlc3QKKworU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vcnRfYm1hcmsucHkgXAorICAgICAgICAgICAiCisjIERvIG5vdCBpbnN0YWxsIGh3bGF0ZGV0ZWN0CitFWFRSQV9PRU1BS0UgKz0gIlBZTElCPScnIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgICAgICBjcCAke1dPUktESVJ9L3J0X2JtYXJrLnB5ICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIgc3RyZXNzIHB5dGhvbiBweXRob24tc3VicHJvY2VzcyBweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi1kYXRldGltZSBweXRob24tcmUgcHl0aG9uLWxhbmciCisKK0ZJTEVTXyR7UE59ICs9ICIke3ByZWZpeH0vc3JjL2JhY2tmaXJlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYyBiL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzN2ZmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJTYXRvIHRoZW1lIGVuZ2luZSBmb3IgR1RLKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgTEdQTHYyKyIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0RFUEVORFMgPSAiZ3RrKyIKK1JERVBFTkRTX2d0ay10aGVtZS1zYXRvID0gImd0ay1zYXRvLWVuZ2luZSIKKworUEFDS0FHRVMgKz0gImd0ay10aGVtZS1zYXRvIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyouc28gIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLy5kZWJ1ZyIKK0ZJTEVTX2d0ay10aGVtZS1zYXRvID0gIiR7ZGF0YWRpcn0vaWNvbnMgJHtkYXRhZGlyfS90aGVtZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZm9yIGkgaW4gYGxzIGd0ay1jb21tb25gOyBkbworCQlsbiAtc2YgLi4vZ3RrLWNvbW1vbi8kaSBndGsyLWVuZ2luZS8kaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGQ5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgZ3RrLXNhdG8tZW5naW5lLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tdXRpbHMuaDtlbmRsaW5lPTI0O21kNT03MDhmMjhjZmU3ZmUwMjhkNDk3YWFmNDM4OWI4MGI2MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2F0by1tYWluLmM7ZW5kbGluZT0yNDttZDU9YjVlNWRkZGViY2E1NzAyNzViZWNiNTFiNTI2ZTRjNWEiCisKK1NSQ1JFViA9ICI0NzQwYWQ4ZDUzYWJhNDM2OGNlM2UwM2IwNmNmZGM2OWViODZkY2RjIgorUFYgPSAiMC4zLjMrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3F2Z2EnLCAnLS13aXRoLW1vZGU9cXZnYScsICcnLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhNjlkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjb3JlLWltYWdlLXNhdG8uYmIKKworREVTQ1JJUFRJT04gPSAiSW1hZ2Ugd2l0aCBTYXRvIGZvciBkZXZlbG9wbWVudCB3b3JrLiBJdCBpbmNsdWRlcyBldmVyeXRoaW5nIFwKK3dpdGhpbiBjb3JlLWltYWdlLXNhdG8gcGx1cyBhIG5hdGl2ZSB0b29sY2hhaW4sIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGFuZCBcCit0ZXN0aW5nIGxpYnJhcmllcywgcHJvZmlsaW5nIGFuZCBkZWJ1ZyBzeW1ib2xzLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjgzNmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBjb3JlLWltYWdlLXNhdG8uYmIKKworREVTQ1JJUFRJT04gPSAiSW1hZ2Ugd2l0aCBTYXRvIHN1cHBvcnQgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIHdpdGhpbiBcCitjb3JlLWltYWdlLXNhdG8gcGx1cyBtZXRhLXRvb2xjaGFpbiwgZGV2ZWxvcG1lbnQgaGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIFwKK2Zvcm0gYSBzdGFuZGFsb25lIFNESy4iCisKK1FUNFBLRyA9ICJxdDQtcGtncyIKK1FUNFBLR19taXBzNjQgPSAiIgorUVQ0UEtHX21pcHM2NG4zMiA9ICIiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyB0b29scy1zZGsgJHtRVDRQS0d9IFwKKwl0b29scy1kZWJ1ZyBlY2xpcHNlLWRlYnVnIHRvb2xzLXByb2ZpbGUgdG9vbHMtdGVzdGFwcHMgZGVidWctdHdlYWtzIHNzaC1zZXJ2ZXItb3BlbnNzaCIKKworSU1BR0VfSU5TVEFMTCArPSAia2VybmVsLWRldnNyYyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyNDZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKQEAgLTAsMCArMSwxMSBAQAorREVTQ1JJUFRJT04gPSAiSW1hZ2Ugd2l0aCBTYXRvLCBhIG1vYmlsZSBlbnZpcm9ubWVudCBhbmQgdmlzdWFsIHN0eWxlIGZvciBcCittb2JpbGUgZGV2aWNlcy4gVGhlIGltYWdlIHN1cHBvcnRzIFgxMSB3aXRoIGEgU2F0byB0aGVtZSwgUGltbGljbyBcCithcHBsaWNhdGlvbnMsIGFuZCBjb250YWlucyB0ZXJtaW5hbCwgZWRpdG9yLCBhbmQgZmlsZSBtYW5hZ2VyLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgeDExLWJhc2UgeDExLXNhdG8gc3NoLXNlcnZlci1kcm9wYmVhciBod2NvZGVjcyIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCitJTUFHRV9JTlNUQUxMICs9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by1nYW1lcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9sZWFmcGFkLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMmQ1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wCkBAIC0wLDAgKzEsMTAgQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1Ob3RlcworRXhlYz0vdXNyL2Jpbi9sZWFmcGFkCitDb21tZW50PVRleHQgRWRpdG9yCitJY29uPWFjY2Vzc29yaWVzLXRleHQtZWRpdG9yCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HVEs7VXRpbGl0eTtUZXh0RWRpdG9yOworWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW5hYmxlIGZlYXR1cmVdCisKKy0tLSB0bXAvc3JjL21lbnUuYy5vcmlnCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy9tZW51LmMJMjAwNy0wNC0yMyAxMjowODo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTIsNyArMTUyLDcgQEAKKyAJfQorIAkKKyAJYWNjZWxfZ3JvdXAgPSBndGtfYWNjZWxfZ3JvdXBfbmV3KCk7CistCWlmYWN0b3J5ID0gZ3RrX2l0ZW1fZmFjdG9yeV9uZXcoR1RLX1RZUEVfTUVOVV9CQVIsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7CisrCWlmYWN0b3J5ID0gZ3RrX2l0ZW1fZmFjdG9yeV9uZXcoR1RLX1RZUEVfTUVOVSwgIjxtYWluPiIsIGFjY2VsX2dyb3VwKTsKKyAJZ3RrX2l0ZW1fZmFjdG9yeV9zZXRfdHJhbnNsYXRlX2Z1bmMoaWZhY3RvcnksIG1lbnVfdHJhbnNsYXRlLCBOVUxMLCBOVUxMKTsKKyAJZ3RrX2l0ZW1fZmFjdG9yeV9jcmVhdGVfaXRlbXMoaWZhY3RvcnksIG5tZW51X2l0ZW1zLCBtZW51X2l0ZW1zLCBOVUxMKTsKKyAJZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyh3aW5kb3cpLCBhY2NlbF9ncm91cCk7CisKKy0tLSB0bXAvc3JjL3dpbmRvdy5jLm9yaWcJMjAwNy0wNC0yMyAxMjoxNDowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0bXAvc3JjL3dpbmRvdy5jCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMTgsNiArMTgsOCBAQAorICAqLworIAorICNpbmNsdWRlICJsZWFmcGFkLmgiCisrI2luY2x1ZGUgPGxpYm93bC9vd2x3aW5kb3dtZW51Lmg+CisrCisgLyoKKyBzdGF0aWMgdm9pZCBjYl9zY3JvbGxfZXZlbnQoR3RrQWRqdXN0bWVudCAqYWRqLCBHdGtXaWRnZXQgKnZpZXcpCisgeworQEAgLTUyLDcgKzU0LDYgQEAKKyAJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKKyAJCisgCW1lbnViYXIgPSBjcmVhdGVfbWVudV9iYXIod2luZG93KTsKKy0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG1lbnViYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisgCQorIAlzdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOworIAlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzdyksCisKKy0tLSB0bXAvc3JjL21haW4uYy5vcmlnCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy9tYWluLmMJMjAwNy0wNC0yMyAxMjoxNTowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNDQsNiArMjQ0LDcgQEAKKyAJQ29uZiAqY29uZjsKKyAJR3RrSXRlbUZhY3RvcnkgKmlmYWN0b3J5OworIAlnY2hhciAqc3RkaW5fZGF0YSA9IE5VTEw7CisrCUd0a1dpZGdldCAqbWVudTsKKyAJCisgCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7CisgCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KFBBQ0tBR0UsICJVVEYtOCIpOworQEAgLTI5Myw3ICsyOTQsMTAgQEAKKyAJCWNvbmYtPmF1dG9pbmRlbnQpOworIAkKKyAJZ3RrX3dpZGdldF9zaG93X2FsbChwdWItPm13LT53aW5kb3cpOworKwlvd2xfc2V0X3dpbmRvd19tZW51IChHVEtfV0lORE9XKHB1Yi0+bXctPndpbmRvdyksCisrCQkJICAgICBHVEtfTUVOVShwdWItPm13LT5tZW51YmFyKSk7CisrCQorIAlnX2ZyZWUoY29uZi0+Zm9udG5hbWUpOworIAlnX2ZyZWUoY29uZik7CisgCQorCistLS0gdG1wL3NyYy9NYWtlZmlsZS5hbS5vcmlnCTIwMDctMDQtMjMgMTI6MTc6NTQuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy9NYWtlZmlsZS5hbQkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAorQEAgLTI3LDQgKzI3LDQgQEAKKyAJaTE4bi5oCisgCisgbGVhZnBhZF9DRkxBR1MgID0gJChHVEtfQ0ZMQUdTKSAkKEdOT01FUFJJTlRfQ0ZMQUdTKQorLWxlYWZwYWRfTERBREQgICA9ICQoR1RLX0xJQlMpICQoSU5UTExJQlMpICQoR05PTUVQUklOVF9MSUJTKQorK2xlYWZwYWRfTERBREQgICA9ICQoR1RLX0xJQlMpICQoSU5UTExJQlMpICQoR05PTUVQUklOVF9MSUJTKSAtbG93bApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTUxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBUZXh0IEVkaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly90YXJvdC5mcmVlc2hlbGwub3JnL2xlYWZwYWQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2xlYWZwYWQuaDtlbmRsaW5lPTIwO21kNT1kM2Q2YTg5ZjVlNjFlOGIxM2JkZWE1Mzc1MTFiYTFmYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdXRpbHMuYztlbmRsaW5lPTIwO21kNT0wZDJjYzY1ODRiYTMyMDI0NDhiYjI3NGY2MjczOTU3MSIKKworREVQRU5EUyA9ICJndGsrIGludGx0b29sLW5hdGl2ZSBsaWJvd2wiCisjIFRoZSBsaWJvd2wgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbGVhZnBhZC5kZXNrdG9wIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjU0YTcyZmM2NzUwNWUzYWE1Mjg4NGM3MjljZDdiOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU5ZDIyYWUwN2YyMjgwM2JjNjZmZjQwZDM3M2E4NTQ1MzJhNmU0NzMyNjgwYmY4YTk2YTNmYmNiOWY4MGEyYyIKK1BSID0gInIyIgorCitTUkNfVVJJX2FwcGVuZF9wb2t5ID0gIiBmaWxlOi8vb3dsLW1lbnUucGF0Y2g7YXBwbHk9eWVzICIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitFWFRSQV9PRUNPTkYgPSAiIC0tZW5hYmxlLWNob29zZXIgLS1kaXNhYmxlLWVtYWNzIC0tZGlzYWJsZS1wcmludCIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfQorICAgICAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbGVhZnBhZC5kZXNrdG9wICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2xlYWZwYWQuZGVza3RvcCIKKworUEFDS0FHRVMgKz0gImxlYWZwYWQtc3RvY2staWNvbnMiCitGSUxFU19sZWFmcGFkLXN0b2NrLWljb25zID0gIiR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL2xpYm93bC9saWJvd2xfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIk9wZW5lZEhhbmQgV2lkZ2V0IExpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dscGFuZWQuaDtlbmRsaW5lPTIwO21kNT03ZmVmODQ0YzRjYzAxYjEwNTQxYTdhYjZhYjU5NzFhZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dsdHJlZW1vZGVsc2xpY2UuaDtlbmRsaW5lPTIwO21kNT1hNTQyMWYyY2RhZThkZWJlNWU0YzQ4YzA5YTAyYmViOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dsY29sb3Vyc3dhdGNoLmg7ZW5kbGluZT0yNDttZDU9MDYzYzQxNWM1ODcxOWQ1MzY5OTBjYThmNjA2YjU3MzAiCisKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiZ3RrKyIKK1NSQ1JFViA9ICI2ZWJjOGFjOGY4NTc1Mjc4ZGQ0MGE1MzVjYWRlZmEyNjM3NGU0NGIxIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFJlcXVpcmVzIGdkay9nZGt4Lmggd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9maWxlcy9uby1oYW5kZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1Njk0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMJKHJldmlzaW9uIDE2MTQpCisrKysgYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMJKHdvcmtpbmcgY29weSkKK0BAIC0zMDAsMTEgKzMwMCwxMyBAQAorICAgICBndGtfZm9udF9idXR0b25fc2V0X2ZvbnRfbmFtZSAoR1RLX0ZPTlRfQlVUVE9OIChmb250X2J1dHRvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uZl92YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOworICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgSEFOREVEX0tFWSkgPT0gMCkgeworKyNpZiAwCisgICAgIEdFbnVtVmFsdWUgKmU7CisgICAgIGUgPSBnX2VudW1fZ2V0X3ZhbHVlX2J5X25hbWUgKGdfdHlwZV9jbGFzc19yZWYgKEdUS19UWVBFX0NPUk5FUl9UWVBFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbmZfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKKyAgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZSAoR1RLX1RPR0dMRV9CVVRUT04gKGhhbmRlZF9jaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnZhbHVlID09IEdUS19DT1JORVJfVE9QX1JJR0hUKTsKKysjZW5kaWYKKyAgIH0KKyB9CisgCitAQCAtMzk1LDEyICszOTcsMTMgQEAKKyAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChhbGlnbiksIGZvbnRfYnV0dG9uKTsKKyAKKyAgIC8qIExlZnQvUmlnaHQgSGFuZGVkICovCistICAKKysjaWYgMAorICAgZnJhbWUgPSBuZXdfZnJhbWUgKF8oIk9yaWVudGF0aW9uIiksICZhbGlnbik7CisgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGJveCksIGZyYW1lLCBUUlVFLCBUUlVFLCAwKTsKKyAgIGhhbmRlZF9jaGVjayA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMgKF8oIl9MZWZ0LWhhbmRlZCIpKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKGhhbmRlZF9jaGVjaywgInRvZ2dsZWQiLCBHX0NBTExCQUNLIChvbl9oYW5kZWRfc2V0KSwgTlVMTCk7CisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBoYW5kZWRfY2hlY2spOworKyNlbmRpZgorIAorICAgZ2NvbmZfY2xpZW50X2FkZF9kaXIgKGdjb25mLCBJTlRFUkZBQ0VfRElSLCBHQ09ORl9DTElFTlRfUFJFTE9BRF9PTkVMRVZFTCwgTlVMTCk7CisgICBnX3NpZ25hbF9jb25uZWN0IChnY29uZiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLIChvbl9nY29uZl92YWx1ZV9jaGFuZ2VkKSwgTlVMTCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczYTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIk1hdGNoYm94IEdUSysgdGhlbWUgY29uZmlndXJhdGlvbiBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jO2VuZGxpbmU9MjU7bWQ1PWVhOTIzMzNjZjhhNjgwMjYzOWQ2MmQ4NzRjMTE0YTI4IgorCitERVBFTkRTID0gImdjb25mIGd0aysiCitSREVQRU5EU18ke1BOfSA9ICJzZXR0aW5ncy1kYWVtb24iCisKK1NSQ1JFViA9ICIzZWQ3NGRmYjdjNTdiZTA4OGE1YWIzNmU0NDZjMGNjZGU5ZmExMDI4IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgIGZpbGU6Ly9uby1oYW5kZWQucGF0Y2g7c3RyaXBsZXZlbD0wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHNldHRpbmdzLWRhZW1vbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc5Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBkZXNrdG9wIGZvbGRlcnMgZm9yIHRoZSBTYXRvIGVudmlyb25tZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU0VDVElPTiA9ICJ4MTEiCitERVBFTkRTID0gIiIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtY29tbW9uIgorCitTUkNSRVYgPSAiODEwYjBiMDhlYjc5ZTQ2ODUyMDJkYTJlYzM0N2I5OTBiYjQ2N2UwNyIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ZDJlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBXaW5kb3cgTWFuYWdlciBEZXNrdG9wIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJ0YWt1L2VnZ3NlcXVlbmNlLmg7ZW5kbGluZT0yMDttZDU9YjkxZjY4Zjc2NDJhMTQ1OWZhMWY0YzlkZjk0YThmMTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Rlc2t0b3AuYztlbmRsaW5lPTIwO21kNT0zNmM5YmYyOTVlNjAwN2YzNDIzMDk1ZjQwNWFmNWEyZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MTk7bWQ1PTIwNDQyNDRmOTdhMTk1YzI1YjdkYzYwMmFjN2U5YTAwIgorCitERVBFTkRTID0gImd0aysgc3RhcnR1cC1ub3RpZmljYXRpb24gZGJ1cyIKK1NFQ1RJT04gPSAieDExL3dtIgorU1JDUkVWID0gIjcxZTNlNmUwNDI3MWU5ZDVhMTRmMWMyMzFlZjEwMGM3ZjMyMDEzNGQiCitQViA9ICIyLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59LTIiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiAtLXdpdGgtZGJ1cyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjE4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy84MG1hdGNoYm94a2V5Ym9hcmQuc2gKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitDTUQ9IiIKKworaWYgWyAiJEhBVkVfS0VZQk9BUkQiID0gIjAiIF07IHRoZW4KKyAgICBDTUQ9Im1hdGNoYm94LWtleWJvYXJkIC1kIgorZWxpZiBbICIkRElTUExBWV9DQU5fUk9UQVRFIiA9ICIxIiBdOyB0aGVuCisgICAgaWYgWyAiJEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQiID0gIjEiIC1hICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiID0gIjAiIF07IHRoZW4KKyAgICAgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCAtbyBsYW5kc2NhcGUiCisgICAgZWxpZiBbICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiID0gIjEiIC1hICIkSEFWRV9LRVlCT0FSRF9QT1JUUkFJVCIgPSAiMCIgXTsgdGhlbgorICAgICAgICBDTUQ9Im1hdGNoYm94LWtleWJvYXJkIC1kIC1vIHBvcnRyYWl0IgorICAgIGZpCitmaQorCitpZiBbICIkQ01EIiBdOyB0aGVuCisgICAgIyBEZWxheSB0byBtYWtlIHN1cmUgdGhlIHdpbmRvdyBtYW5hZ2VyIGlzIGFjdGl2ZQorICAgICMgYnkgd2FpdGluZyBmb3IgdGhlIGRlc2t0b3AgdG8gc2F5IGl0cyBmaW5pc2hlZCBsb2FkaW5nCisgICAgZGJ1cy13YWl0IG9yZy5tYXRjaGJveF9wcm9qZWN0LmRlc2t0b3AgTG9hZGVkICYmICRDTUQgJgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI2YzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvc2luZ2xlLWluc3RhbmNlLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK011bHRpcGxlIG1hdGNoYm94LWtleWJvYXJkIGluc3RhbmNlcyB3b3VsZCBvY2N1cHkgd2hvbGUgc2NyZWVuIGFuZCBjYXVzZSBYCit3aW5kb3cgc2VnZmF1bHQoQnVnIDUwOSkuIE1ha2luZyBtYXRjaGJveC1rZXlib2FyZCBzaW5nbGV0b24gaXMgb25lIHdvcmsKK2Fyb3VuZC4KKworVGhpcyBwYXRjaCBhbGxvdyBvbmx5IG9uZSBpbnN0YW5jZSBvZiBtYXRjaGJveC1rZXlib2FyZCBiYXNlZCBvbiBzb21lIG1lY2hhbmlzbQoraW4gbWF0Y2hib3gtZGVza3RvcC4gSW4gZnV0dXJlLCBhbiBhcHBsZXQgYW5kIEdUSy1JTSBtb2R1bGVzIGluCittYXRjaGJveC1rZXlib2FyZCBjYW4gYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IG1hcC91bm1hcCB0aGUgdmlydHVhbCBrZXlib2FyZAorb24gZGVtYW5kLgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmQuZGVza3RvcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hdGNoYm94LWtleWJvYXJkLm9yaWcvbWF0Y2hib3gta2V5Ym9hcmQuZGVza3RvcAkyMDEwLTEyLTIyIDIwOjQxOjQwLjAwMDAwMDAwMCArMDgwMAorKysrIG1hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AJMjAxMC0xMi0yMiAyMDo0MjoxMi4wMDAwMDAwMDAgKzA4MDAKK0BAIC02LDMgKzYsNSBAQAorIEljb249bWF0Y2hib3gta2V5Ym9hcmQucG5nCisgQ2F0ZWdvcmllcz1QYW5lbDtVdGlsaXR5O01CCisgWC1NQi1JTlBVVC1NRUNIQU5TSU09VHJ1ZQorK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzIxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF9naXQuYmIKQEAgLTAsMCArMSw1NiBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB2aXJ0dWFsIGtleWJvYXJkIGZvciBYMTEiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21hdGNoYm94LWtleWJvYXJkLmg7ZW5kbGluZT0xNzttZDU9OWQ2NTg2YzY5ZTRhOTI2ZjNjYjBiNDQyNWYyNGJhM2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0L2FwcGxldC5jO2VuZGxpbmU9MTg7bWQ1PTRhMGY3MjE3MjQ3NDZiMTRkOTViNTFkZGQ0MmI5NWU3IgorCitERVBFTkRTID0gImxpYmZha2VrZXkgZXhwYXQgbGlieGZ0IGd0aysgbWF0Y2hib3gtcGFuZWwtMiIKKworU1JDUkVWID0gIjIxN2YxYmZlMTRjNDFjZjdlMjkxZDA0YTYzYWEyZDc5Y2MxM2QwNjMiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn07YnJhbmNoPW1hdGNoYm94LWtleWJvYXJkLTAtMSBcCisgICAgICAgICAgIGZpbGU6Ly9zaW5nbGUtaW5zdGFuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vODBtYXRjaGJveGtleWJvYXJkLnNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaW1tb2R1bGVzLWNhY2hlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4ZnQsIGxpYmZha2VrZXkgYW5kIG1hdGNoYm94LXBhbmVsLTIgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jYWlybyAtLWVuYWJsZS1ndGstaW0gLS1lbmFibGUtYXBwbGV0IgorCitQQUNLQUdFUyArPSAiJHtQTn0taW0gJHtQTn0tYXBwbGV0IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vIFwKKwkgICAgICAgJHtzeXNjb25mZGlyfSBcCisJICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKKwkgICAgICAgJHtkYXRhZGlyfS9waXhtYXBzIFwKKwkgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1rZXlib2FyZCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8uZGVidWciCisKK0ZJTEVTXyR7UE59LWltID0gIiR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyouc28iCisKK0ZJTEVTXyR7UE59LWFwcGxldCA9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKKworCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS84MG1hdGNoYm94a2V5Ym9hcmQuc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCisJcm0gLWYgJHtEfSR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyoubGEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKK30KKworR1RLSU1NT0RVTEVTX1BBQ0tBR0VTID0gIiR7UE59LWltIgorCitSREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGRidXMtd2FpdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LWFwcGxldCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWJhOWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Rvbid0IHdhcm4gaWYgdGhlIG1hY2hpbmUgZG9lc24ndCBhY3R1YWxseSBoYXZlIGEgYmF0dGVyeSwgb3IgaWYgdGhlIGFwcGxldHMKK3N0cmluZyBjb250YWlucyBjb25zZWN1dGl2ZSBzZXBhcmF0b3JzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCitpbmRleCA2NTE1Y2IwLi5jNDRkZDEyIDEwMDY0NAorLS0tIGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCisrKysgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMKK0BAIC0xNCw4ICsxNCw2IEBAIGludCBiYXR0X3N0YXRlLCBhY19zdGF0ZTsKKyBpbnQgcG1fc3VwcG9ydCh2b2lkKQorIHsKKyAJaWYoY2hlY2tfYWNwaV9zdXBwb3J0KCkgPT0gTk9UX1NVUFBPUlRFRCl7CistCQlnX3dhcm5pbmcoIk5vIEFDUEkgc3VwcG9ydFxuIik7CistCisgCQlyZXR1cm4gMDsKKyAJfQorIAorQEAgLTMyLDggKzMwLDkgQEAgY29uc3QgY2hhciogcG1fYmF0dGVyeV9pY29uKHZvaWQpCisgCWNvbnN0IGNoYXIgKmljb247CisgCWJhdHRlcnlfdCAqYmluZm87CisgCisrICAgICAgICAvKiBObyBiYXR0ZXJ5IGF2YWlsYWJsZSAobm90IHByZXNlbnQsIGRpc2FibGVkLCBvciBzb21ldGhpbmcKKysgICAgICAgICAgIGVsc2UuIFNpbGVudGx5IGRvIG5vdGhpbmcuICovCisgCWlmIChiYXR0X3N0YXRlICE9IFNVQ0NFU1MpIHsKKy0JCWdfd2FybmluZygiQ291bGRudCBpbml0aWFsaXplIEFDUEkgYmF0dGVyeVxuIik7CisgCQlyZXR1cm4gTlVMTDsKKyAJfQorIAorZGlmZiAtLWdpdCBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKK2luZGV4IDU0Njc0MzguLjJmMzljYjYgMTAwNjQ0CistLS0gYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYworKysrIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKK0BAIC0xMCw4ICsxMCw2IEBACisgaW50IHBtX3N1cHBvcnQodm9pZCkKKyB7CisgCWlmICgxID09IGFwbV9leGlzdHMgKCkpIHsKKy0gICAgICAgICAgICAgICAgZ193YXJuaW5nICgiTm8gQVBNIHN1cHBvcnQiKTsKKy0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYyBiL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMKK2luZGV4IDJkOGNhZmQuLjgyOGEzNmQgMTAwNjQ0CistLS0gYS9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCisrKysgYi9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCitAQCAtMTEwLDEwICsxMTAsMTUgQEAgbG9hZF9hcHBsZXRzIChjb25zdCBjaGFyICAgICphcHBsZXRzX2Rlc2MsCisgICAgICAgICBhcHBsZXRzID0gZ19zdHJzcGxpdCAoYXBwbGV0c19kZXNjLCAiLCIsIC0xKTsKKyAKKyAgICAgICAgIGZvciAoaSA9IDA7IGFwcGxldHNbaV07IGkrKykgeworKyAgICAgICAgICAgICAgICBjaGFyICpzOworICAgICAgICAgICAgICAgICBjaGFyICoqYml0czsKKyAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0ICphcHBsZXQ7CisgCistICAgICAgICAgICAgICAgIGJpdHMgPSBnX3N0cnNwbGl0IChhcHBsZXRzW2ldLCAiOiIsIDIpOworKyAgICAgICAgICAgICAgICBzID0gYXBwbGV0c1tpXTsKKysgICAgICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBzWzBdID09ICdcMCcpCisrICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrCisrICAgICAgICAgICAgICAgIGJpdHMgPSBnX3N0cnNwbGl0IChzLCAiOiIsIDIpOworIAorICAgICAgICAgICAgICAgICBhcHBsZXQgPSBsb2FkX2FwcGxldCAoYml0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNbMV0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQ3MzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlNpbXBsZSBHVEsrIGJhc2VkIHBhbmVsIGZvciBoYW5kaGVsZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuaDtlbmRsaW5lPTEwO21kNT0wYjdkYjI4ZjRiNjg2M2ZiODUzZDA0NjdlNTkwMDE5YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBsZXRzL3N0YXJ0dXAvc3RhcnR1cC5jO2VuZGxpbmU9MjI7bWQ1PWIwYTY0ZmJlZjMwOTdkNzlmODI2NGU2OTA3YTk4ZjAzIgorCitERVBFTkRTID0gImdub21lLWNvbW1vbiBndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMgZGJ1cy1nbGliIgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAibGliYWNwaSIsICIiLGQpfSIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAiYXBtZCIsICIiLGQpfSIKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gIjI2YTNhNjdiNDFjNTBlMGFlMTYzZDhmZTg2Y2NmN2EwZjBhNjcxYWUiCitQViA9ICIyLjArZ2l0JHtTUkNQVn0iCisKK1JQUk9WSURFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKK1JSRVBMQUNFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IFwKKyAgICAgICAgICAgZmlsZTovL3NpbGVuY2Utd2FybmluZ3MucGF0Y2giCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiAtLWVuYWJsZS1kYnVzIgorRVhUUkFfT0VDT05GICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWNwaSIsICItLXdpdGgtYmF0dGVyeT1hY3BpIiwgIiIsZCl9IgorRVhUUkFfT0VDT05GICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgIi0td2l0aC1iYXR0ZXJ5PWFwbSIsICIiLGQpfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL2JyaWdodG5lc3MvKi5wbmcgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gtcGFuZWwvc3RhcnR1cC8qLnBuZyAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNlNDgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgpAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK2lmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCisgICAgU0hPV0NVUlNPUj0ibm8iCitlbHNlCisgICAgU0hPV0NVUlNPUj0ieWVzIgorZmkKKworaWYgWyAiJEhBVkVfS0VZQk9BUkQiID0gIjEiIF07IHRoZW4KKyAgICBLRVlCT0FSRF9BUFBMRVQ9IiIKK2Vsc2UKKyAgICBLRVlCT0FSRF9BUFBMRVQ9ImtleWJvYXJkIgorZmkKKworIyBUZWxsIEdUSyszIHdlIHJlYWxseSB3YW50IHNlcnZlciBzaWRlIGRlY29yYXRpb25zLCBldmVuIHdpdGgKKyMgR3RrSGVhZGVyQmFyIHVzaW5nIGFwcGxpY2F0aW9uczogV2l0aG91dCB0aGF0IG1iLXBhbmVsIHdpbGwgcmVuZGVyCisjIG9uIHRvcCBvZiB0aGUgY2xpZW50IHNpZGUgZGVjb3JhdGlvbnMuCitleHBvcnQgR1RLX0NTRD0wCisKK21hdGNoYm94LWRlc2t0b3AgJgorCisjIExpbmVzIGNvbnRhaW5pbmcgZmVhdHVyZS1bZm9vXSBhcmUgcmVtb3ZlZCBhdCBidWlsZCB0aW1lIGlmIHRoZSBtYWNoaW5lCisjIGRvZXNuJ3QgaGF2ZSB0aGUgZmVhdHVyZSAiZm9vIi4KKworU1RBUlRfQVBQTEVUUz1zaG93ZGVza3RvcCx3aW5kb3dzZWxlY3RvcgorRU5EX0FQUExFVFM9Y2xvY2ssYmF0dGVyeSwkS0VZQk9BUkRfQVBQTEVULHN5c3RyYXksc3RhcnR1cC1ub3RpZnksbm90aWZ5CitFTkRfQVBQTEVUUz1vcGVubW9rby1wYW5lbC1nc20sJEVORF9BUFBMRVRTICMgZmVhdHVyZS1waG9uZQorCittYXRjaGJveC1wYW5lbCAtLXRpdGxlYmFyIC0tc3RhcnQtYXBwbGV0cyAkU1RBUlRfQVBQTEVUUyAtLWVuZC1hcHBsZXRzICRFTkRfQVBQTEVUUyAmCisKK2V4ZWMgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgLXRoZW1lIFNhdG8gLXVzZV9kZXNrdG9wX21vZGUgZGVjb3JhdGVkIC11c2VfY3Vyc29yICRTSE9XQ1VSU09SICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkZTE4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvXzAuMS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkN1c3RvbSBNYXRjaGJveCBzZXNzaW9uIGZpbGVzIGZvciB0aGUgU2F0byBlbnZpcm9ubWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXNzaW9uO2VuZGxpbmU9MzttZDU9ZjhhNWM1YjljMjc5ZTUyZGMwOTRkMTBlMTFjMmJlNjMiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICJnY29uZi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGd0ay1zYXRvLWVuZ2luZSBtYXRjaGJveC10aGVtZS1zYXRvIGd0ay10aGVtZS1zYXRvIG1hdGNoYm94LXBhbmVsLTIgbWF0Y2hib3gtZGVza3RvcC1zYXRvIG1hdGNoYm94LXNlc3Npb24gZ2NvbmYiCitQUiA9ICJyMzAiCisKKyMgVGhpcyBwYWNrYWdlIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBiZWNhdXNlIHRoZSBzZXNzaW9uIHNjcmlwdCBpcyBtb2RpZmllZAorIyBiYXNlZCBvbiB0aGUgbWFjaGluZSBhcmNoaXRlY3R1cmUuCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBtYXRjaGJveC10aGVtZS1zYXRvIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL3Nlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBUaGlzIGlzIHRoZSBzZXQgb2YgbWFjaGluZSBmZWF0dXJlcyB0aGF0IHRoZSBzY3JpcHQgaGFzIG1hcmtlcnMgZm9yCisJRkVBVFVSRVM9InBob25lIgorCVNDUklQVD0iJHtTfS9zZWRkZXIiCisJcm0gLWYgJFNDUklQVAorCXRvdWNoICRTQ1JJUFQKKwlmb3IgRkVBVCBpbiAkRkVBVFVSRVM7IGRvCisJCWlmIGVjaG8gJHtNQUNISU5FX0ZFQVRVUkVTfSB8IGF3ayAiLyRGRUFULyB7ZXhpdCAxfSI7IHRoZW4KKwkJCWVjaG8gIi9mZWF0dXJlLSRGRUFUL2QiID4+ICRTQ1JJUFQKKwkJZmkKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveAorCXNlZCAtZiAiJFNDUklQVCIgJHtTfS9zZXNzaW9uID4gJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94L3Nlc3Npb24KKyAgICAgICAgY2htb2QgK3ggJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94L3Nlc3Npb24KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlzZXRfdmFsdWUoKSB7CisJCSN0eXBlLCBuYW1lLCB2YWx1ZQorCQlnY29uZnRvb2wtMiAtLWNvbmZpZy1zb3VyY2U9eG1sOjokRCR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIC0tZGlyZWN0IC0tdHlwZSAkMSAtLXNldCAvZGVza3RvcC9wb2t5L2ludGVyZmFjZS8kMiAiJDMiCisJfQorCXNldF92YWx1ZSBzdHJpbmcgdGhlbWUgU2F0bworCXNldF92YWx1ZSBzdHJpbmcgaWNvbl90aGVtZSBTYXRvCisJc2V0X3ZhbHVlIGJvb2wgdG91Y2hzY3JlZW4gdHJ1ZQorCXNldF92YWx1ZSBzdHJpbmcgZm9udF9uYW1lICJTYW5zIDkiCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZDE1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IEdUSysgdGVybWluYWwgYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTIwO21kNT05NmUzOTE3NmQ5ZTM1NTYzOWEwYjhiMWM3YTg0MDgyMCIKKworREVQRU5EUyA9ICJndGsrIHZ0ZSIKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorU1JDUkVWID0gIjQ1MmJjYTI1MzQ5MmE5N2E1ODdmNDQwMjg5YjlhYjI3ZDIxNzM1M2UiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDdlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgU2F0byB0aGVtZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkNDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFhZTg2YmIzNGIwYTgzNzE2Y2EwOWY0ZTc4M2Q2YmE0IgorCitERVBFTkRTID0gIm1hdGNoYm94LXdtIgorU0VDVElPTiA9ICJ4MTEvd20iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vdGhlbWVzIgorCisjIFRoZSBtYXRjaGJveC13bSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3ODZkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9wb2t5bGludXgub3JnL3JlbGVhc2VzL3NhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by0wLjEudGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzJhZTI3MmVmNzgwMzE0MWEzZGNiNjllNjcwY2ZmOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI1OWY5NjQ2ZWRiZmI5MDdhMzA5MzMyZGIzYmQ2ZmE3MDgwZGMxZmUyNGRmNTQ5NDgwY2ZhZTdkOTc0YTNmYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzU2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKKworU1JDUkVWID0gImY3MmNmNGVkN2Q3MWFkOWU0N2IwZjJkM2RiYzU5M2JjMmYzZTc2ZjgiCitQViA9ICIwLjIrZ2l0JHtTUkNQVn0iCisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tYXRjaGJveC1zYXRvIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3F2Z2EnLCAnLS13aXRoLW1vZGU9cXZnYScsICcnLGQpfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzlkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCkBAIC0wLDAgKzEsNjYgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiU2F0byBkZXNrdG9wIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMzMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiB4MTF2bmMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LWJhc2UgJHtQTn0tYXBwcyAke1BOfS1nYW1lcyIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgICR7UE59LWJhc2UgXAorICAgICR7UE59LWFwcHMgXAorICAgICR7UE59LWdhbWVzIFwKKyAgICAiCisKK05FVFdPUktfTUFOQUdFUiA/PSAiY29ubm1hbi1nbm9tZSIKK05FVFdPUktfTUFOQUdFUl9saWJjLXVjbGliYyA9ICIiCisKK1NVTU1BUllfJHtQTn0tYmFzZSA9ICJTYXRvIGRlc2t0b3AgLSBiYXNlIHBhY2thZ2VzIgorUkRFUEVORFNfJHtQTn0tYmFzZSA9ICJcCisgICAgbWF0Y2hib3gtZGVza3RvcCBcCisgICAgbWF0Y2hib3gtc2Vzc2lvbi1zYXRvIFwKKyAgICBtYXRjaGJveC1rZXlib2FyZCBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQtYXBwbGV0IFwKKyAgICBtYXRjaGJveC1rZXlib2FyZC1pbSBcCisgICAgbWF0Y2hib3gtY29uZmlnLWd0ayBcCisgICAgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZSBcCisgICAgc2F0by1pY29uLXRoZW1lIFwKKyAgICBzZXR0aW5ncy1kYWVtb24gXAorICAgIGd0ay1zYXRvLWVuZ2luZSBcCisgICAgc2h1dGRvd24tZGVza3RvcCBcCisgICAgbGlic2RsIFwKKyAgICAke05FVFdPUktfTUFOQUdFUn0gXAorICAgIHVkZXYtZXh0cmFjb25mIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpby1zZXJ2ZXIgcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvJywgJycsIGQpfSBcCisgICAgIgorCisjIHBjbWFuZm0gZG9lc24ndCB3b3JrIG9uIG1pcHMKK0ZJTEVNQU5BR0VSID89ICJwY21hbmZtIgorRklMRU1BTkFHRVJfbWlwcyA/PSAiIgorCitXRUIgPz0gIiIKKyNXRUIgPSAiZXBpcGhhbnkiCisKK1NVTU1BUllfJHtQTn0tYXBwcyA9ICJTYXRvIGRlc2t0b3AgLSBhcHBsaWNhdGlvbnMiCitSREVQRU5EU18ke1BOfS1hcHBzID0gIlwKKyAgICBsZWFmcGFkIFwKKyAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgeDExdm5jIFwKKyAgICBtYXRjaGJveC10ZXJtaW5hbCBcCisgICAgc2F0by1zY3JlZW5zaG90IFwKKyAgICAke0ZJTEVNQU5BR0VSfSBcCisgICAgJHtXRUJ9IFwKKyAgICAiCisKK1NVTU1BUllfJHtQTn0tZ2FtZXMgPSAiU2F0byBkZXNrdG9wIC0gZ2FtZXMiCitSREVQRU5EU18ke1BOfS1nYW1lcyA9ICJcCisgICAgb2gtcHV6emxlcyBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2VtYmxlbS1zeW1ib2xpYy1saW5rLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU1NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLWRpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3N2E4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTRiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLW1pbWUtdGV4dC1wbGFpbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2Q2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL25vLWRlc2t0b3AucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRGlzYWJsZSB0aGUgZGVza3RvcCBwcmVmZXJlbmNlcyBsYXVuY2hlciBhcyB3ZSBkb24ndCB1c2UgdGhlIHBjbWFuZm0gZGVza3RvcCBpbgorU2F0by4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wIGIvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wCitpbmRleCBjY2Y4YWJiLi4zZjZmYzFjIDEwMDY0NAorLS0tIGEvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wLmluCisrKysgYi9kYXRhL3BjbWFuZm0tZGVza3RvcC1wcmVmLmRlc2t0b3AuaW4KK0BAIC03LDMgKzcsNCBAQCBFeGVjPXBjbWFuZm0gLS1kZXNrdG9wLXByZWYKKyBTdGFydHVwTm90aWZ5PXRydWUKKyBUZXJtaW5hbD1mYWxzZQorIE5vdFNob3dJbj1HTk9NRTtYRkNFO0tERTsKKytOb0Rpc3BsYXk9dHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NjczMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjMuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJGYXN0IGxpZ2h0d2VpZ2h0IHRhYmJlZCBmaWxlbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9wY21hbmZtLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGNtYW5mbS5oO2VuZGxpbmU9MjI7bWQ1PTQxN2IzODU1NzcxYTNhODdmOGFkNzUzZDk5NDQ5MWYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9nc2VhbC1ndGstY29tcGF0Lmg7ZW5kbGluZT0yMTttZDU9NDY5MjJjODY5MWY1OGQxMjRmOTQyMGZlMTYxNDljZTIiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGxpYmZtIGludGx0b29sLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX3Bva3kgPSAiIGxpYm93bCIKKworCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhYXJjaDY0Lip8YXJtLip8bWlwcy4qfHBvd2VycGMuKnxzaC4qKS0obGludXh8ZnJlZWJzZC4qKScKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9wY21hbmZtLSR7UFZ9LnRhci54eiBcCisJICAgZmlsZTovL2dub21lLWZzLWRpcmVjdG9yeS5wbmcgXAorCSAgIGZpbGU6Ly9nbm9tZS1mcy1yZWd1bGFyLnBuZyBcCisJICAgZmlsZTovL2dub21lLW1pbWUtdGV4dC1wbGFpbi5wbmcgXAorCSAgIGZpbGU6Ly9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcgXAorCSAgIGZpbGU6Ly9uby1kZXNrdG9wLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzk5MzQwMmQ0MDdiMGEzZmMwNzZmODQyYWMxYmM1YzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZhOGQ4MmZjNjNiZTE0NzA0NTE3NGJlZjA3NDgwN2UxZTMyY2U4YzZiZjRkYmQ4ZmFkNDllMjYwYmNmNjM4MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5wbmcgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9wY21hbmZtIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAiYWR3YWl0YS1pY29uLXRoZW1lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYgYi9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvLzUwLXNhdG8uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ5MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYKQEAgLTAsMCArMSw3IEBACisjIFdlIHJlbHkgb24gUHVsc2VBdWRpbydzIGF1dG9zcGF3biBmZWF0dXJlIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgdGhlIGRhZW1vbgorIyBpbiBTYXRvLiBUaGUgZ3JhcGhpY2FsIHNlc3Npb24gaW4gU2F0byBydW5zIHVuZGVyIHJvb3QsIGhvd2V2ZXIsIGFuZAorIyBQdWxzZUF1ZGlvIGRpc2FibGVzIGF1dG9zcGF3bmluZyBmb3Igcm9vdCBieSBkZWZhdWx0LiBJbiBhIG5vcm1hbCBzZXR1cCBpdCdzCisjIG5vdCBkZXNpcmFibGUgdG8gYXV0b3NwYXduIGZvciByb290LCBiZWNhdXNlIGl0IGNhbiBlYXNpbHkgaW50ZXJmZXJlIHdpdGgKKyMgb3RoZXIgdXNlcnMnIFB1bHNlQXVkaW8gaW5zdGFuY2VzLCBidXQgaW4gU2F0byB0aGVyZSBhcmUgbm8gb3RoZXIgdXNlcnMsIHNvCisjIGl0J3MgT0sgdG8gZW5hYmxlIHRoaXMgaW4gU2F0by4KK2FsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCA9IHllcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzMzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvXzEuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICIvZXRjL3B1bHNlL2NsaWVudC5jb25mIHRhaWxvcmVkIGZvciBTYXRvIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vNTAtc2F0by5jb25mIgorUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2gKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS81MC1zYXRvLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZC81MC1zYXRvLmNvbmYKK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kLzUwLXNhdG8uY29uZiIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQvNTAtc2F0by5jb25mIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0M2QxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzLzAwMDEtVXNlLWxhYnMtaW5zdGVhZC1vZi1hYnMucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA5ODA4ZGMwOWUwODkzN2M5YmZmZDg1OGQzZGVkNDI4MjI1YTQzMTJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwOTowMjozOCArMDAwMAorU3ViamVjdDogW1BBVENIXSBVc2UgbGFicyBpbnN0ZWFkIG9mIGFicworCitjbHVldmFscyBpcyBhcnJheSBvZiBsb25ncyBzbyB3ZSBoYXZlIHRvIHVzZSBsYWJzKCkgaW5zdGVhZCBvZiBhYnMoKQorc2luY2UgYWJzKCkgcmV0dXJucyBpbnQKKworRml4ZXMKKwora2Vlbi5jOjE0NTg6MTc6IGVycm9yOiBhYnNvbHV0ZSB2YWx1ZSBmdW5jdGlvbiAnYWJzJyBnaXZlbiBhbiBhcmd1bWVudAorb2YgdHlwZSAnbG9uZycgYnV0IGhhcyBwYXJhbWV0ZXIgb2YgdHlwZSAnaW50JyB3aGljaCBtYXkgY2F1c2UKK3RydW5jYXRpb24gb2YgdmFsdWUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBrZWVuLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEva2Vlbi5jIGIva2Vlbi5jCitpbmRleCBhNmE3MjM4Li4xNjMxOTkyIDEwMDY0NAorLS0tIGEva2Vlbi5jCisrKysgYi9rZWVuLmMKK0BAIC0xMDQzLDcgKzEwNDMsNyBAQCBkb25lCisgCQkgICAgY2x1ZXZhbHNbal0gKj0gZ3JpZFtpXTsKKyAJCSAgICBicmVhazsKKyAJCSAgY2FzZSBDX1NVQjoKKy0JCSAgICBjbHVldmFsc1tqXSA9IGFicyhjbHVldmFsc1tqXSAtIGdyaWRbaV0pOworKwkJICAgIGNsdWV2YWxzW2pdID0gbGFicyhjbHVldmFsc1tqXSAtIGdyaWRbaV0pOworIAkJICAgIGJyZWFrOworIAkJICBjYXNlIENfRElWOgorIAkJICAgIHsKK0BAIC0xNDU1LDcgKzE0NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Vycm9ycyhjb25zdCBnYW1lX3N0YXRlICpzdGF0ZSwgbG9uZyAqZXJyb3JzKQorIAkJY2x1ZXZhbHNbal0gKj0gc3RhdGUtPmdyaWRbaV07CisgCQlicmVhazsKKyAJICAgICAgY2FzZSBDX1NVQjoKKy0JCWNsdWV2YWxzW2pdID0gYWJzKGNsdWV2YWxzW2pdIC0gc3RhdGUtPmdyaWRbaV0pOworKwkJY2x1ZXZhbHNbal0gPSBsYWJzKGNsdWV2YWxzW2pdIC0gc3RhdGUtPmdyaWRbaV0pOworIAkJYnJlYWs7CisgCSAgICAgIGNhc2UgQ19ESVY6CisgCQl7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjQ2ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9maXgtY29tcGlsaW5nLWZhaWx1cmUtd2l0aC1vcHRpb24tZy1PLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK2d0ay5jOiBmaXggY29tcGlsaW5nIGZhaWx1cmUgd2l0aCBvcHRpb24gLWcgLU8KKworVGhlcmUgd2VyZSBjb21waWxpbmcgZmFpbHVyZSB3aXRoIG9wdGlvbiAtZyAtTworLi4uCisuLy4vZ3RrLmM6IEluIGZ1bmN0aW9uICdjb25maWd1cmVfYXJlYSc6CisuLy4vZ3RrLmM6Mzk3OjI6IGVycm9yOiAnY3InIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkXQorICBjYWlyb19zZXRfc291cmNlX3JnYihjciwKKyAgXgorLi8uL2d0ay5jOjM4NDoxNDogbm90ZTogJ2NyJyB3YXMgZGVjbGFyZWQgaGVyZQorICAgICBjYWlyb190ICpjcjsKKyAgICAgICAgICAgICAgXgorLi8uL2d0ay5jOiBJbiBmdW5jdGlvbiAnbWFpbic6CisuLy4vZ3RrLmM6MjkxMTo2OiBlcnJvcjogJ2Vycm9yJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBwbmFtZSwgZXJyb3IpOworICAgICAgXgorY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKy4uLgorCitJbml0aWFsaXplZCBwb2ludGVyICdjcicgYW5kICdlcnJvcicgd2l0aCBOVUxMCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBndGsuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsuYyBiL2d0ay5jCitpbmRleCBhMmViYTJjLi5jNTRiZjYzIDEwMDY0NAorLS0tIGEvZ3RrLmMKKysrKyBiL2d0ay5jCitAQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2JhY2tpbmdfc3RvcmUoZnJvbnRlbmQgKmZlKQorIAorIHN0YXRpYyB2b2lkIHNldHVwX2JhY2tpbmdfc3RvcmUoZnJvbnRlbmQgKmZlKQorIHsKKy0gICAgY2Fpcm9fdCAqY3I7CisrICAgIGNhaXJvX3QgKmNyID0gTlVMTDsKKyAgICAgaW50IGk7CisgCisgICAgIGZlLT5waXhtYXAgPSBnZGtfcGl4bWFwX25ldyhmZS0+YXJlYS0+d2luZG93LCBmZS0+cHcsIGZlLT5waCwgLTEpOworQEAgLTI0ODEsNyArMjQ4MSw3IEBAIGNoYXIgKmZnZXRsaW5lKEZJTEUgKmZwKQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CisgICAgIGNoYXIgKnBuYW1lID0gYXJndlswXTsKKy0gICAgY2hhciAqZXJyb3I7CisrICAgIGNoYXIgKmVycm9yID0gTlVMTDsKKyAgICAgaW50IG5nZW5lcmF0ZSA9IDAsIHByaW50ID0gRkFMU0UsIHB4ID0gMSwgcHkgPSAxOworICAgICBpbnQgdGltZV9nZW5lcmF0aW9uID0gRkFMU0UsIHRlc3Rfc29sdmUgPSBGQUxTRSwgbGlzdF9wcmVzZXRzID0gRkFMU0U7CisgICAgIGludCBzb2xuID0gRkFMU0UsIGNvbG91ciA9IEZBTFNFOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYzNhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaApAQCAtMCwwICsxLDIwMyBAQAorVGhpcyBwYXRjaCBlbmFibGUgb3dsIG1lbnUsIHdoaWNoIGlzIGhpZGRlbiBpbiB0aGUgdGl0bGUgYmFyIHRvIHNhdmUgc3BhY2Ugb24KK3NtYWxsIHNjcmVlbi4gSXQgaGFzIG5vdCBiZWVuIHVzZWQgZm9yIGEgbG9uZyB0aW1lLCByZWJhc2UgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCitJbmRleDogc3JjL2d0ay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL2d0ay5jCShyZXZpc2lvbiAyMikKKysrKyBzcmMvZ3RrLmMJKHdvcmtpbmcgY29weSkKK0BAIC0yOCw2ICsyOCw4IEBACisgI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisgI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgorIAorKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgorKworICNpbmNsdWRlIDxsaWJyc3ZnL3JzdmcuaD4KKyAKKyAjaW5jbHVkZSA8WDExL1hsaWIuaD4KK0BAIC0xMjM3LDYgKzEyMzksNyBAQAorICAgICB9CisgfQorIAorKyNpZiAwCisgc3RhdGljIHZvaWQKKyBhZGRfd2lkZ2V0IChHdGtVSU1hbmFnZXIgKm1lcmdlLAorIAkgICAgR3RrV2lkZ2V0ICp3aWRnZXQsCitAQCAtMTI0NywxMCArMTI1MCwxMSBAQAorICAgICBndGtfYm94X3BhY2tfc3RhcnQgKGJveCwgd2lkZ2V0LCBGQUxTRSwgRkFMU0UsIDApOworIAorICAgICB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsIChHVEtfV0lER0VUIChib3gpKTsKKy0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCAodG9wbGV2ZWwpOworIH0KKysjZW5kaWYKKyAKKyBzdGF0aWMgR3RrQWN0aW9uRW50cnkgdG9wbGV2ZWxfYWN0aW9uc1tdID0geworKyAgICB7ICJUb3AiLCBOVUxMLCAiIiB9LAorICAgICB7ICJHYW1lIiwgTlVMTCwgTl8oIkdhbWUiKSB9LAorICAgICB7ICJTZXR0aW5ncyIsIE5VTEwsIE5fKCJTZXR0aW5ncyIpIH0sCisgICAgIHsgIkhlbHAiLCBOVUxMLCBOXygiSGVscCIpIH0sCitAQCAtMTMwMywxMSArMTMwNywxMyBAQAorIAkJCWZyb250ZW5kICpmZSkKKyB7CisgICAgIEdTdHJpbmcgKnhtbDsKKysgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgIGdib29sZWFuIHByZXNldHMgPSBGQUxTRTsKKyAgICAgR1NMaXN0ICpyYWRpb19ncm91cCA9IE5VTEw7CisgICAgIGludCBpOworIAorLSAgICB4bWwgPSBnX3N0cmluZ19uZXcgKCI8dWk+PG1lbnViYXI+PHBsYWNlaG9sZGVyIG5hbWU9XCJUeXBlUGxhY2Vob2xkZXJcIj4iCisrICAgIHhtbCA9IGdfc3RyaW5nX25ldyAoIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiVG9wTWVudVwiIGFjdGlvbj1cIlRvcFwiPiIKKysJCQkiPHBsYWNlaG9sZGVyIG5hbWU9XCJUeXBlUGxhY2Vob2xkZXJcIj4iCisgCQkJIjxtZW51IG5hbWU9XCJTZXR0aW5nc01lbnVcIiBhY3Rpb249XCJTZXR0aW5nc1wiPiIpOworIAorICAgICBmb3IgKGkgPSAwOyBpIDwgbWlkZW5kX251bV9wcmVzZXRzKGZlLT5tZSk7IGkrKykgeworQEAgLTEzNTksOCArMTM2NSwxNCBAQAorIAkJCSAiPG1lbnVpdGVtIG5hbWU9XCJDdXN0b21NZW51XCIgYWN0aW9uPVwiQ3VzdG9tXCIvPiIpOworICAgICB9CisgICAgIAorLSAgICBnX3N0cmluZ19hcHBlbmQgKHhtbCwgIjwvbWVudT48L3BsYWNlaG9sZGVyPjwvbWVudWJhcj48L3VpPiIpOworLSAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCB4bWwtPnN0ciwgLTEsIE5VTEwpOworKyAgICBnX3N0cmluZ19hcHBlbmQgKHhtbCwgIjwvbWVudT48L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnViYXI+PC91aT4iKTsKKysKKysgICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgeG1sLT5zdHIsIC0xLCAmZXJyb3IpOworKyAgICBpZiAoZXJyb3IgIT0gTlVMTCkgeworKwlnX3dhcm5pbmcgKCJFcnJvciBhZGRpbmcgY3VzdG9tOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKysJZ19lcnJvcl9mcmVlIChlcnJvcik7CisrICAgIH0KKysKKyAgICAgZ19zdHJpbmdfZnJlZSAoeG1sLCBUUlVFKTsKKyB9CisgCitAQCAtMTQzNCw2ICsxNDQ2LDcgQEAKKyBuZXdfd2luZG93KGNoYXIgKmFyZywgY2hhciAqKmVycm9yKQorIHsKKyAgICAgZnJvbnRlbmQgKmZlOworKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgIEd0a0JveCAqdmJveDsKKyAgICAgR3RrVUlNYW5hZ2VyICptZXJnZTsKKyAgICAgR3RrQWN0aW9uR3JvdXAgKmFjdGlvbnM7CitAQCAtMTQ5Niw4ICsxNTA5LDYgQEAKKyAgICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyhmZS0+d2luZG93KSwgZmUtPmFjY2VsZ3JvdXApOworIAorICAgICBtZXJnZSA9IGd0a191aV9tYW5hZ2VyX25ldyAoKTsKKy0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKG1lcmdlKSwgImFkZF93aWRnZXQiLAorLQkJICAgICAgR19DQUxMQkFDSyAoYWRkX3dpZGdldCksIHZib3gpOworIAorICAgICBhY3Rpb25zID0gZ3RrX2FjdGlvbl9ncm91cF9uZXcgKCJQdXp6bGVBY3Rpb25zIik7CisgICAgIGd0a19hY3Rpb25fZ3JvdXBfYWRkX2FjdGlvbnMgKGFjdGlvbnMsIHRvcGxldmVsX2FjdGlvbnMsCitAQCAtMTUwOSwyMiArMTUyMCwzOSBAQAorIAorICAgICBndGtfdWlfbWFuYWdlcl9pbnNlcnRfYWN0aW9uX2dyb3VwIChtZXJnZSwgYWN0aW9ucywgMCk7CisgICAgIAorLSAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9maWxlIChtZXJnZSwgREFUQURJUiAiL29oLXB1enpsZXMvdWkvbWVudS54bWwiLCBOVUxMKTsKKysgICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fZmlsZSAobWVyZ2UsIERBVEFESVIgIi9vaC1wdXp6bGVzL3VpL21lbnUueG1sIiwgCisrCQkJCSAgICAgJmVycik7CisrICAgIGlmIChlcnIgIT0gTlVMTCkgeworKwlnX3dhcm5pbmcgKCJFcnJvciBtYWtpbmcgVUk6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKysJZ19lcnJvcl9mcmVlIChlcnIpOworKwllcnIgPSBOVUxMOworKyAgICB9CisgCisgICAgIGlmICh0aGVnYW1lLmNhbl9zb2x2ZSkgeworLQkgICAgY2hhciAqc3RyID0gIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiR2FtZU1lbnVcIiBhY3Rpb249XCJHYW1lXCI+IgorKwljaGFyICpzdHIgPSAiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJUb3BNZW51XCIgYWN0aW9uPVwiVG9wXCI+IgorKwkgICAgIjxtZW51IG5hbWU9XCJHYW1lTWVudVwiIGFjdGlvbj1cIkdhbWVcIj4iCisgCSAgICAiPHBsYWNlaG9sZGVyIG5hbWU9XCJTb2x2ZVBsYWNlaG9sZGVyXCI+IgorIAkgICAgIjxzZXBhcmF0b3IgbmFtZT1cIlNvbHZlU2VwXCIvPiIKKyAJICAgICI8bWVudWl0ZW0gbmFtZT1cIlNvbHZlTWVudVwiIGFjdGlvbj1cIlNvbHZlXCIvPiIKKy0JICAgICI8L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnViYXI+PC91aT4iOworKwkgICAgIjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudT48L21lbnViYXI+PC91aT4iOworIAorLQlndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCBzdHIsIC0xLCBOVUxMKTsKKysJZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgc3RyLCAtMSwgJmVycik7CisrCWlmIChlcnIgIT0gTlVMTCkgeworKwkgICAgZ193YXJuaW5nICgiRXJyb3IgYWRkaW5nIHNvbHZlLiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCSAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisrCX0KKyAgICAgfQorIAorICAgICBpZiAoKG4gPSBtaWRlbmRfbnVtX3ByZXNldHMoZmUtPm1lKSkgPiAwIHx8IHRoZWdhbWUuY2FuX2NvbmZpZ3VyZSkgeworIAlnZW5lcmF0ZV9zZXR0aW5nc19tZW51IChtZXJnZSwgYWN0aW9ucywgZmUpOworICAgICB9CisgCisrICAgIC8qIERvIHRoaXMgc28gdGhhdCB0aGUgbWVudSBpcyBwYWNrZWQgbm93IGluc3RlYWQgb2YgaW4gdGhlIGlkbGUgbG9vcCAqLworKyAgICBndGtfdWlfbWFuYWdlcl9lbnN1cmVfdXBkYXRlIChtZXJnZSk7CisrCisrICAgIG93bF9zZXRfd2luZG93X21lbnVfaXRlbSAoR1RLX1dJTkRPVyAoZmUtPndpbmRvdyksCisrCQkJICAgICAgR1RLX01FTlVfSVRFTSAoZ3RrX3VpX21hbmFnZXJfZ2V0X3dpZGdldCAobWVyZ2UsICIvbWVudWJhci9Ub3BNZW51IikpKTsKKysgICAgCisgICAgIHNldHVwX2NvbG91cnMgKGZlKTsKKyAgICAgc2V0dXBfcGl4YnVmcyAoZmUpOworIAorQEAgLTE1NzIsNyArMTYwMCw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSyB8CisgCQkJICBHREtfQlVUVE9OX01PVElPTl9NQVNLKTsKKyAKKy0gICAgLyogVGhlIHdpbmRvdyBpcyBzaG93biBvbmNlIHRoZSBtZW51YmFyIGhhcyBiZWVuIGFkZGVkICovCisrICAgIGd0a193aWRnZXRfc2hvd19hbGwgKGZlLT53aW5kb3cpOworICAgICByZXR1cm4gZmU7CisgfQorIAorSW5kZXg6IHNyYy9tZW51LnhtbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9tZW51LnhtbAkocmV2aXNpb24gMjIpCisrKysgc3JjL21lbnUueG1sCSh3b3JraW5nIGNvcHkpCitAQCAtMSwyNiArMSwyNSBAQAorIDx1aT4KKyA8bWVudWJhcj4KKy08bWVudSBuYW1lPSJHYW1lTWVudSIgYWN0aW9uPSJHYW1lIj4KKy0JPG1lbnVpdGVtIG5hbWU9Ik5ld01lbnUiIGFjdGlvbj0iTmV3Ii8+CistCTxtZW51aXRlbSBuYW1lPSJSZXN0YXJ0TWVudSIgYWN0aW9uPSJSZXN0YXJ0Ii8+CistPCEtLQk8bWVudWl0ZW0gbmFtZT0iU3BlY2lmaWNNZW51IiBhY3Rpb249IlNwZWNpZmljIi8+IC0tPgorLQk8bWVudWl0ZW0gbmFtZT0iUmFuZG9tTWVudSIgYWN0aW9uPSJSYW5kb20iLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMSIvPgorLQk8bWVudWl0ZW0gbmFtZT0iTG9hZE1lbnUiIGFjdGlvbj0iTG9hZCIvPgorLQk8bWVudWl0ZW0gbmFtZT0iU2F2ZU1lbnUiIGFjdGlvbj0iU2F2ZSIvPgorLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAyIi8+CistCTxtZW51aXRlbSBuYW1lPSJVbmRvTWVudSIgYWN0aW9uPSJVbmRvIi8+CistCTxtZW51aXRlbSBuYW1lPSJSZWRvTWVudSIgYWN0aW9uPSJSZWRvIi8+CistCTxwbGFjZWhvbGRlciBuYW1lPSJDb3B5UGxhY2Vob2xkZXIiLz4KKy0JPHBsYWNlaG9sZGVyIG5hbWU9IlNvbHZlUGxhY2Vob2xkZXIiLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUXVpdE1lbnUiIGFjdGlvbj0iUXVpdCIvPgorLTwvbWVudT4KKys8bWVudSBuYW1lPSJUb3BNZW51IiBhY3Rpb249IlRvcCI+CisrCTxtZW51IG5hbWU9IkdhbWVNZW51IiBhY3Rpb249IkdhbWUiPgorKwkJPG1lbnVpdGVtIG5hbWU9Ik5ld01lbnUiIGFjdGlvbj0iTmV3Ii8+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmVzdGFydE1lbnUiIGFjdGlvbj0iUmVzdGFydCIvPgorKwk8IS0tCTxtZW51aXRlbSBuYW1lPSJTcGVjaWZpY01lbnUiIGFjdGlvbj0iU3BlY2lmaWMiLz4gLS0+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmFuZG9tTWVudSIgYWN0aW9uPSJSYW5kb20iLz4KKysJCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDEiLz4KKysJCTxtZW51aXRlbSBuYW1lPSJMb2FkTWVudSIgYWN0aW9uPSJMb2FkIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iU2F2ZU1lbnUiIGFjdGlvbj0iU2F2ZSIvPgorKwkJPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMiIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlVuZG9NZW51IiBhY3Rpb249IlVuZG8iLz4KKysJCTxtZW51aXRlbSBuYW1lPSJSZWRvTWVudSIgYWN0aW9uPSJSZWRvIi8+CisrCQk8cGxhY2Vob2xkZXIgbmFtZT0iQ29weVBsYWNlaG9sZGVyIi8+CisrCQk8cGxhY2Vob2xkZXIgbmFtZT0iU29sdmVQbGFjZWhvbGRlciIvPgorKwk8L21lbnU+CisgCistPHBsYWNlaG9sZGVyIG5hbWU9IlR5cGVQbGFjZWhvbGRlciIvPgorLQorLTxtZW51IG5hbWU9IkhlbHBNZW51IiBhY3Rpb249IkhlbHAiPgorKwk8cGxhY2Vob2xkZXIgbmFtZT0iVHlwZVBsYWNlaG9sZGVyIi8+CisgCTxtZW51aXRlbSBuYW1lPSJBYm91dE1lbnUiIGFjdGlvbj0iQWJvdXQiLz4KKysJPG1lbnVpdGVtIG5hbWU9IlF1aXRNZW51IiBhY3Rpb249IlF1aXQiLz4KKysKKyA8L21lbnU+CisgPC9tZW51YmFyPgorIDwvdWk+CitJbmRleDogc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL01ha2VmaWxlLmFtCShyZXZpc2lvbiAyMikKKysrKyBzcmMvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKK0BAIC0xMCw3ICsxMCw3IEBACisgCWxpZ2h0dXAgbG9vcHkgbWFwIG1pbmVzIG5ldCBuZXRzbGlkZSBwYXR0ZXJuIHBlZ3MgcmVjdCBzYW1lZ2FtZSBcCisgCXNpeHRlZW4gc2xhbnQgc29sbyB0ZW50cyB0d2lkZGxlIHVudGFuZ2xlCisgCistbGlicHV6emxlc19sYV9MSUJBREQgPSAkKFBVWlpMRVNfTElCUykKKytsaWJwdXp6bGVzX2xhX0xJQkFERCA9ICQoUFVaWkxFU19MSUJTKSAtbG93bAorIGxpYnB1enpsZXNfbGFfU09VUkNFUyA9IGNvbWJpLmMgXAorIAkJCWNvbmZpZ3VyYXRpb24uYyBcCisgCQkJZHJhd2luZy5jIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2QyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiUG9ydGFibGUgUHV6emxlIENvbGxlY3Rpb24iCitIT01FUEFHRSA9ICJodHRwOi8vby1oYW5kLmNvbS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1mNTZlYzY3NzJkZDFjN2MzNjcwNjdiYmVhOGVhMTY3NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5oO2VuZGxpbmU9Mjg7bWQ1PWExODhlNmQyNTA0MzBjYTA5NGE1NGE4MmY0ODQ3MmE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy90cmVlMjM0LmM7ZW5kbGluZT0yODttZDU9YjRmZWIxOTc2ZmVlYmY4ZjEzNzkwOTNlZDUyZjI5NDUiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICJndGsrIGdjb25mIGludGx0b29sLW5hdGl2ZSBsaWJyc3ZnIgorCisjIGxpYm93bCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitERVBFTkRTX2FwcGVuZF9wb2t5ID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJvd2wnLCAnJywgZCl9IgorCisjIFJlcXVpcmVzIGdkay9nZGt4Lmggd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gIjkyZjFhMjBlNGI3MmVlZDdhMzViMDA5ODRkOTc5M2I1MWRjMmZiM2IiCitQViA9ICIwLjIrZ2l0JHtTUkNQVn0iCitQUiA9ICJyMTAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2g7c3RyaXBsZXZlbD0wICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitiaW5kaXIgPSAiL3Vzci9nYW1lcyIKKworRVhUUkFfT0VNQUtFICs9ICJHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMPTEiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCisKKyAgICBjZCAke0R9LyR7cHJlZml4fS9nYW1lcworICAgIGZvciBwcm9nIGluICo7IGRvCisJaWYgWyAteCAkcHJvZyBdOyB0aGVuCisgICAgICAgICAgICAjIENvbnZlcnQgcHJvZyB0byBUaXRsZSBDYXNlCisgICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKKwkgICAgZWNobyAibWFraW5nICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcCIKKwkgICAgY2F0IDw8U1RPUCA+ICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcAorW0Rlc2t0b3AgRW50cnldCitOYW1lPSR0aXRsZQorRXhlYz0ke3ByZWZpeH0vZ2FtZXMvJHByb2cKK0ljb249YXBwbGljYXRpb25zLWdhbWVzCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HYW1lOworU3RhcnR1cE5vdGlmeT10cnVlCitYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKK0NvbW1lbnQ9UGxheSAkdGl0bGUuCitTVE9QCisgICAgICAgIGZpCisgICAgZG9uZQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tZXh0cmEiCitSREVQRU5EU18ke1BOfS1leHRyYSArPSAib2gtcHV6emxlcyIKKworRklMRVNfJHtQTn0gPSAiL3Vzci9zaGFyZS9waXhtYXBzIC91c3Ivc2hhcmUvb2gtcHV6emxlcy8iCitGSUxFU18ke1BOfS1kYmcgKz0gIi91c3IvZ2FtZXMvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1leHRyYSA9ICIvdXNyL2dhbWVzLyAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucyAvZXRjL2djb25mL3NjaGVtYXMiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgdmFyID0gYmIuZGF0YS5leHBhbmQoIkZJTEVTXyR7UE59IiwgZCwgMSkKKyAgICBkYXRhID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgIGZvciBuYW1lIGluICgiYnJpZGdlcyIsICJmaWZ0ZWVuIiwgImluZXJ0aWEiLCAibWFwIiwgInNhbWVnYW1lIiwgInNsYW50Iik6CisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL2dhbWVzLyVzIiAlIG5hbWUKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zLyVzLmRlc2t0b3AiICUgbmFtZQorICAgICAgICBkYXRhID0gZGF0YSArICIgL2V0Yy9nY29uZi9zY2hlbWFzLyVzLnNjaGVtYXMiICUgbmFtZQorICAgIGQuc2V0VmFyKHZhciwgZGF0YSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiU2ltb24gVGF0aGFtJ3MgUG9ydGFibGUgUHV6emxlIENvbGxlY3Rpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL3B1enpsZXMvIgorCitERVBFTkRTID0gImd0aysgbGlieHQiCisKKyMgVGhlIGxpYnh0IHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9MzNiY2Q0YmNlOGYzYzE5N2YyYWVmYmRiZDJkMjk5YmMiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnRhcnRhcnVzLm9yZy9zaW1vbi9wdXp6bGVzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29tcGlsaW5nLWZhaWx1cmUtd2l0aC1vcHRpb24tZy1PLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWxhYnMtaW5zdGVhZC1vZi1hYnMucGF0Y2ggXAorIgorU1JDUkVWID0gImMyOTYzMDFhMDZjZTQ5Yjg3Yzk1NGM5ZDE1NDUyNTIxZGZlZGRmMWEiCitQRSA9ICIxIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAuL21rZmlsZXMucGwKK30KKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L2Jpbi8qICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cHJlZml4fS9iaW4vLmRlYnVnIgorCitkb19pbnN0YWxsICgpIHsKKyAgICBybSAtcmYgJHtEfS8qCisgICAgZXhwb3J0IHByZWZpeD0ke0R9CisgICAgZXhwb3J0IERFU1RESVI9JHtEfQorICAgIGluc3RhbGwgLWQgJHtEfS8ke3ByZWZpeH0vYmluLworICAgIG9lX3J1bm1ha2UgaW5zdGFsbAorCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCisKKyAgICAjIENyZWF0ZSBkZXNrdG9wIHNob3J0Y3V0cworICAgIGNkICR7RH0vJHtwcmVmaXh9L2JpbgorICAgIGZvciBwcm9nIGluICo7IGRvCisJaWYgWyAteCAkcHJvZyBdOyB0aGVuCisgICAgICAgICAgICAjIENvbnZlcnQgcHJvZyB0byBUaXRsZSBDYXNlCisgICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKKwkgICAgZWNobyAibWFraW5nICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcCIKKwkgICAgY2F0IDw8U1RPUCA+ICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcAorW0Rlc2t0b3AgRW50cnldCitOYW1lPSR0aXRsZQorRXhlYz0ke3ByZWZpeH0vYmluLyRwcm9nCitJY29uPWFwcGxpY2F0aW9ucy1nYW1lcworVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R2FtZTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitTVE9QCisgICAgICAgIGZpCisgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE0M2MwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitTVU1NQVJZID0gInJ4dnQgdGVybWluYWwgY2xvbmUgc3VwcG9ydGluZyB1bmljb2RlIgorREVTQ1JJUFRJT04gPSAicnh2dC11bmljb2RlIGlzIGEgY2xvbmUgb2YgdGhlIHdlbGwga25vd24gXAordGVybWluYWwgZW11bGF0b3Igcnh2dCwgbW9kaWZpZWQgdG8gc3RvcmUgdGV4dCBpbiBVbmljb2RlIFwKKyhlaXRoZXIgVUNTLTIgb3IgVUNTLTQpIGFuZCB0byB1c2UgbG9jYWxlLWNvcnJlY3QgaW5wdXQgYW5kIFwKK291dHB1dC4gSXQgYWxzbyBzdXBwb3J0cyBtaXhpbmcgbXVsdGlwbGUgZm9udHMgYXQgdGhlIFwKK3NhbWUgdGltZSwgaW5jbHVkaW5nIFhmdCBmb250cy4iCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnh0IGxpYnhmdCBnZGstcGl4YnVmIgorCitTUkNfVVJJID0gImh0dHA6Ly9kaXN0LnNjaG1vcnAuZGUvcnh2dC11bmljb2RlL0F0dGljL3J4dnQtdW5pY29kZS0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8veHdjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnh2dC5kZXNrdG9wIFwKKwkgICBmaWxlOi8vcnh2dC5wbmciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUFJPVklERVMgPSAidmlydHVhbC94LXRlcm1pbmFsLWVtdWxhdG9yIgorQUxURVJOQVRJVkVfJHtQTn0gPSAieC10ZXJtaW5hbC1lbXVsYXRvciIKK0FMVEVSTkFUSVZFX1RBUkdFVFt4LXRlcm1pbmFsLWVtdWxhdG9yXSA9ICIke2JpbmRpcn0vcnh2dCIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLWZwZXJtaXNzaXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUteGltIFwKKwkJLS1lbmFibGUtdXRtcCAtLWVuYWJsZS13dG1wIC0tZW5hYmxlLWxhc3Rsb2cgXAorCQktLXdpdGgtdGVybT1yeHZ0IC0tZW5hYmxlLWtlZXBzY3JvbGxpbmcgXAorCQktLWVuYWJsZS14ZnQgLS13aXRoLW5hbWU9cnh2dCAtLWVuYWJsZS1mcmlsbHMgXAorCQktLWVuYWJsZS1zd2Fwc2NyZWVuIC0tZW5hYmxlLXRyYW5zcGFyZW5jeSBcCisJCS0td2l0aC1jb2Rlc2V0cz1ldSAtLWVuYWJsZS1wb2ludGVyLWJsYW5rIFwKKwkJLS1lbmFibGUtdGV4dC1ibGluayAtLWVuYWJsZS1yeHZ0LXNjcm9sbCBcCisJCS0tZW5hYmxlLWNvbWJpbmluZyAtLWRpc2FibGUtcGVybCBcCisJCS0td2l0aC14PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3N0YXJ0dXBdID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLC0tZGlzYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbixzdGFydHVwLW5vdGlmaWNhdGlvbiwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljcCAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWVjaG8gJyNkZWZpbmUgVVRNUF9GSUxFICIke2xvY2Fsc3RhdGVkaXJ9L3J1bi91dG1wIicgPj4gY29uZmlnLmgKKwllY2hvICcjZGVmaW5lIFdUTVBfRklMRSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvd3RtcCInID4+IGNvbmZpZy5oCisJZWNobyAnI2RlZmluZSBMQVNUTE9HX0ZJTEUgIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL2xhc3Rsb2ciJyA+PiBjb25maWcuaAorCWVjaG8gJyNkZWZpbmUgSEFWRV9YTE9DQUxFIDEnID4+IGNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfQorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yeHZ0LnBuZyAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3J4dnQuZGVza3RvcCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9yeHZ0LmRlc2t0b3AgJHtkYXRhZGlyfS9waXhtYXBzL3J4dnQucG5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODJlYTQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AKQEAgLTAsMCArMSw5IEBACitbRGVza3RvcCBFbnRyeV0KK1ZlcnNpb249MS4wCitOYW1lPVRlcm1pbmFsCitDb21tZW50PUEgdW5pY29kZSBjYXBhYmxlIHJ4dnQgY2xvbmUKK0V4ZWM9cnh2dAorSWNvbj10ZXJtaW5hbAorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9VXRpbGl0eTtUZXJtaW5hbEVtdWxhdG9yOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2ZmEyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3h3Yy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmVmZWVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXJ1TiByeHZ0LXVuaWNvZGUtOS4xMC1vcmlnLy9zcmMvc2NyZWVuLkMgcnh2dC11bmljb2RlLTkuMTAvc3JjL3NjcmVlbi5DCistLS0gcnh2dC11bmljb2RlLTkuMTAtb3JpZy8vc3JjL3NjcmVlbi5DCTIwMTEtMDQtMTkgMTM6MzQ6MDEuMzI3NjY0OTg0ICswODAwCisrKysgcnh2dC11bmljb2RlLTkuMTAvc3JjL3NjcmVlbi5DCTIwMTEtMDQtMTkgMTM6MzQ6NDcuMDM3NjY1MDAxICswODAwCitAQCAtMzE1Miw3ICszMTUyLDcgQEAKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKyAKKy0jaWYgMAorKyNpZiBIQVZFX1hXQworICAgWFRleHRQcm9wZXJ0eSBjdDsKKyAKKyAgIGlmIChYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5IChkcHksICZzZWxlY3Rpb24udGV4dCwgMSwgWFN0cmluZ1N0eWxlLCAmY3QpID49IDApCitAQCAtMzczNCw5ICszNzM0LDExIEBACisgICAgICAgICB9CisgICAgICAgZWxzZQorICNlbmRpZgorKyNpZmRlZiBIQVZFX1hXQworICAgICAgIGlmIChYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5IChkcHksICZjbCwgMSwgKFhJQ0NFbmNvZGluZ1N0eWxlKSBzdHlsZSwgJmN0KSA+PSAwKQorICAgICAgICAgZnJlZWN0ID0gMTsKKyAgICAgICBlbHNlCisrI2VuZGlmCisgICAgICAgICB7CisgICAgICAgICAgIC8qIGlmIHdlIGZhaWxlZCB0byBjb252ZXJ0IHRoZW4gc2VuZCBpdCByYXcgKi8KKyAgICAgICAgICAgY3QudmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWNsOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODBlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjAuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJ4dnQtdW5pY29kZS5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5DO2JlZ2lubGluZT0xO2VuZGxpbmU9MzE7bWQ1PTc3NTQ4NTM5OGEwOWZhN2FlZTZmOTA0NjRhZjg4NDMyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGE1YjgyM2YwOGQyMTAzNmY5NGE2YzUxZTk0ZDAyNWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTczZTEzZmU2NGI1OWZkM2M4ZTZlMjBjMDBmMTQ5ZDM4ODc0MWYxNDFiODE1NWU0NzAwZDNlZDQwYWE5NGI0ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQ5NDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIxLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSByeHZ0LXVuaWNvZGUuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5DO2JlZ2lubGluZT0xO2VuZGxpbmU9MzE7bWQ1PTdkYWMwMzk1ODA2NTcwODU2ZTAzN2Y5OGFiYTg1MTNiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTlhMDZjNjA4MjU4YzVmZDI0N2MzNzI1ZDhmNDQ1ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzUyNzBlZDcyYmM1ODk1YTY0YTFkNzM5MmJmNDVhNjIyMjA0MTkyMzcxYzM5NjViZDNkZDk3OGRjMDg4OTU2YiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZS8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxNzZlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gYjlmMDI5ODkzMTBhM2M5MjA1ODlmMWFhNjQ2YmNiZjE2YjI1NzJhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDEzIEp1biAyMDEyIDExOjA3OjMzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluaGVyaXQgdGhlIEdOT01FIGljb24gdGhlbWUKKworSWYgdGhlIEdOT01FIGljb24gdGhlbWUgaXNuJ3QgaW5zdGFsbGVkIHRoaXMgaXMgYSBuby1vcCwgYnV0IGlmIGl0IGlzIHRoZW4KK3lvdSdsbCBnZXQgZmFsbGJhY2sgZnJvbSBTYXRvIHRvIEdOT01FIGZvciBpY29ucyB0aGF0IGFyZSBub3QgaW4gU2F0by4KKworQXMgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSBmdWxsIEdOT01FIGljb24gdGhlbWUgZGVwZW5kIG9uIGdub21lLWljb24tdGhlbWUsCit0aGlzIGp1c3Qgd29ya3MuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGluZGV4LnRoZW1lIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9pbmRleC50aGVtZSBiL2luZGV4LnRoZW1lCitpbmRleCBjNGIwM2E3Li42ODhmYmJmIDEwMDY0NAorLS0tIGEvaW5kZXgudGhlbWUKKysrKyBiL2luZGV4LnRoZW1lCitAQCAtMSw2ICsxLDcgQEAKKyBbSWNvbiBUaGVtZV0KKyBOYW1lPVNhdG8KKyBDb21tZW50PVNhdG8gaWNvbiB0aGVtZQorK0luaGVyaXRzPUFkd2FpdGEKKyAKKyBEaXJlY3Rvcmllcz0xNngxNi9hcHBzLDE2eDE2L3N0YXR1cywxNngxNi9zdG9jaywxNngxNi9wbGFjZXMsMTZ4MTYvbWltZXR5cGVzLDE2eDE2L2RldmljZXMsMTZ4MTYvYWN0aW9ucywyMngyMi9hcHBzLDIyeDIyL3N0YXR1cywyMngyMi9zdG9jaywyMngyMi9wbGFjZXMsMjJ4MjIvbWltZXR5cGVzLDIyeDIyL2RldmljZXMsMjJ4MjIvYWN0aW9ucywzMngzMi9hcHBzLDMyeDMyL3N0YXR1cywzMngzMi9zdG9jaywzMngzMi9wbGFjZXMsMzJ4MzIvbWltZXR5cGVzLDMyeDMyL2RldmljZXMsMzJ4MzIvYWN0aW9ucyw0OHg0OC9hcHBzLDQ4eDQ4L3N0YXR1cyw0OHg0OC9zdG9jayw0OHg0OC9wbGFjZXMsNDh4NDgvbWltZXR5cGVzLDQ4eDQ4L2RldmljZXMsNDh4NDgvYWN0aW9ucyw2NHg2NC9hcHBzLDY0eDY0L3N0YXR1cyw2NHg2NC9zdG9jayw2NHg2NC9wbGFjZXMsNjR4NjQvbWltZXR5cGVzLDY0eDY0L2RldmljZXMsNjR4NjQvYWN0aW9ucywKKyAKKy0tIAorMS43LjEwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDczNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiU2F0byBpY29uIHRoZW1lIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTZhODMwYmJlNmU0Njk3ZmU2Y2JiYWUwMWJiN2MyYjIiCitTRUNUSU9OID0gIngxMSIKKworUFIgPSAicjYiCisKK0RFUEVORFMgPSAiaWNvbi1uYW1pbmctdXRpbHMtbmF0aXZlIGxpYnhtbC1zaW1wbGUtcGVybC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Bva3lsaW51eC5vcmcvcmVsZWFzZXMvc2F0by8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg2YTg0N2YzMTI4YTQzYTljZjIzYjcwMjlhNjU2ZjUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiMGEyODA3YTZhOTY5MThhYzc5OWE4NjA5NGVjM2U4ZTJjODkyYmUwZmQ2NzlhNDIzMmMyYTc3ZjJmNjE3MzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBhbGxhcmNoIGd0ay1pY29uLWNhY2hlIHBlcmxuYXRpdmUKKworIyBUaGUgY29uZmlndXJlIHNjcmlwdCB1c2VzIHBrZy1jb25maWcgdG8gZmluZCBuYXRpdmUgYmluYXJpZXMgdG8gZXhlY3V0ZSwgc28KKyMgdGVsbCBpdCB0byB1c2Ugb3VyIHBrZy1jb25maWctbmF0aXZlIHdyYXBwZXIuCitleHBvcnQgUEtHX0NPTkZJRyA9ICJwa2ctY29uZmlnLW5hdGl2ZSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvU2F0byIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIHByZWZlcmVuY2VzLXN5c3RlbS5wbmcge30vYXBwcy9wcmVmZXJlbmNlcy1kZXNrdG9wLnBuZyBcOworCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyBmaWxlLW1hbmFnZXIucG5nIHt9L2FwcHMvc3lzdGVtLWZpbGUtbWFuYWdlci5wbmcgXDsKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgLi4vYXBwcy90ZXJtaW5hbC5wbmcge30vcGxhY2VzL2NvbXB1dGVyLnBuZyBcOworfQorCisjIEV4cGxpY3RseSBzZXR0aW5nICJTYXRvIiBhcyB0aGUgZGVmYXVsdCBpY29uIHRoZW1lIHRvIGF2b2lkIGZsaWNrZXJpbmcgZnJvbQorIyB0aGUgZGVza3RvcCBhbmQgc2V0dGluZ3MgZGFlbW9uIHJhY2luZy4gIFRoaXMgc2hvdWxkbid0IGJlIGRvbmUgaGVyZSBidXQgaW4gdGhlIHNhdG8gaW1hZ2UKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgbWtkaXIgLXAgJEQvZXRjL2d0ay0yLjAKKworICAgIGdyZXAgLXMgLXEgLWUgXmd0ay1pY29uLXRoZW1lLW5hbWUuKlwiU2F0b1wiICREL2V0Yy9ndGstMi4wL2d0a3JjIHx8IFwKKyAgICAgICAgZWNobyAnZ3RrLWljb24tdGhlbWUtbmFtZSA9ICJTYXRvIicgPj4gJEQvZXRjL2d0ay0yLjAvZ3RrcmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5NDAzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiVWx0cmEtc2ltcGxlIHNjcmVlbiBjYXB0dXJlIHV0aWxpdHksIGFpbWVkIGF0IGhhbmRoZWxkIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTk7bWQ1PTAyM2UxNGQ2NDA0ZDBhOTYxZWI5N2NiZDAxMWZjMTQxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbnNob3QtdWkuaDtlbmRsaW5lPTk7bWQ1PTYzOGQ5ZmZhODNlOTMyNWEzNmRmMjI0MTY2ZWQ2YWQwIgorCitERVBFTkRTID0gIm1hdGNoYm94LXBhbmVsLTIiCitTUkNSRVYgPSAiM2E5Njg4ZThhMDFiNjNhNzhmNDAyYjRlN2MwYjhiMDA1ZmNkZmEyOSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3NjcmVlbnNob3QiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCit9CisKKyMgVGhlIG1hdGNoYm94LXBhbmVsLTIgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaCBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM3NDEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzLzcwc2V0dGluZ3MtZGFlbW9uLnNoCkBAIC0wLDAgKzEgQEAKKy91c3IvYmluL3NldHRpbmdzLWRhZW1vbiAmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWYwNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNldHRpbmdzLWRhZW1vbi5vcmlnL3NldHRpbmdzLWRhZW1vbi5jCTIwMDktMDUtMjIgMTQ6NTc6MDUuMDAwMDAwMDAwICswMTAwCisrKysgc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbi5jCTIwMDktMDUtMjIgMTQ6NTg6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTg3LDYgKzE4NywxMCBAQAorICAgICBHQ09ORl9WQUxVRV9TVFJJTkcsIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisgICB7ICIvZGVza3RvcC9wb2t5L2ludGVyZmFjZS9ndGtfY29sb3Jfc2NoZW1lIiwgIkd0ay9Db2xvclNjaGVtZSIsCisgICAgIEdDT05GX1ZBTFVFX1NUUklORywgdHJhbnNsYXRlX3N0cmluZ19zdHJpbmcgfSwKKysgIHsgIi9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWUiLCAiTmV0L1NvdW5kVGhlbWVOYW1lIiwKKysgICAgR0NPTkZfVkFMVUVfU1RSSU5HLCAgIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisrICB7ICIvZGVza3RvcC9nbm9tZS9zb3VuZC9ldmVudF9zb3VuZHMiLCAiTmV0L0VuYWJsZUV2ZW50U291bmRzIiAsCisrICAgIEdDT05GX1ZBTFVFX0JPT0wsICAgICB0cmFuc2xhdGVfYm9vbF9pbnQgfSwKKyB9OworIAorIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkVudHJ5KgorSW5kZXg6IHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNldHRpbmdzLWRhZW1vbi5vcmlnL3NldHRpbmdzLWRhZW1vbi5zY2hlbWFzCTIwMDktMDUtMjIgMTU6NDk6MTcuMDAwMDAwMDAwICswMTAwCisrKysgc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbi5zY2hlbWFzCTIwMDktMDUtMjIgMTU6NTE6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtMTk2LDYgKzE5NiwyNyBAQAorICAgICA8L2xvY2FsZT4KKyAgIDwvc2NoZW1hPgorIAorKyAgPHNjaGVtYT4KKysgICAgPGtleT4vc2NoZW1hcy9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWU8L2tleT4KKysgICAgPGFwcGx5dG8+L2Rlc2t0b3AvZ25vbWUvc291bmQvdGhlbWVfbmFtZTwvYXBwbHl0bz4KKysgICAgPG93bmVyPmdub21lPC9vd25lcj4KKysgICAgPHR5cGU+c3RyaW5nPC90eXBlPgorKyAgICA8ZGVmYXVsdD5mcmVlZGVza3RvcDwvZGVmYXVsdD4KKysgICAgPGxvY2FsZSBuYW1lPSJDIj4KKysgICAgICA8c2hvcnQ+U291bmQgVGhlbWUgTmFtZTwvc2hvcnQ+CisrICAgIDwvbG9jYWxlPgorKyAgPC9zY2hlbWE+CisrCisrICA8c2NoZW1hPgorKyAgICA8a2V5Pi9zY2hlbWFzL2Rlc2t0b3AvZ25vbWUvc291bmQvZXZlbnRfc291bmRzPC9rZXk+CisrICAgIDxhcHBseXRvPi9kZXNrdG9wL2dub21lL3NvdW5kL2V2ZW50X3NvdW5kczwvYXBwbHl0bz4KKysgICAgPG93bmVyPmdub21lPC9vd25lcj4KKysgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKysgICAgPGRlZmF1bHQ+dHJ1ZTwvZGVmYXVsdD4KKysgICAgPGxvY2FsZSBuYW1lPSJDIj4KKysgICAgICA8c2hvcnQ+RW5hYmxlIFNvdW5kIEV2ZW50czwvc2hvcnQ+CisrICAgIDwvbG9jYWxlPgorKyAgPC9zY2hlbWE+CisgCisgPC9zY2hlbWFsaXN0PgorIDwvZ2NvbmZzY2hlbWFmaWxlPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQzNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCithZnRlciBnY2MgbGlua2luZyBoYXMgY2hhbmdlZCwgYWxsIHRoZSBsaWJyYXJpZXMgbXVzdCBiZSBleHBsaWNpdGVseSBzcGVjaWZpZWQgdG8gZm9yIGxpbmtpbmcuIAorVGhpcyBwYXRjaCBhdm9pZHMgdGhpcyBsaW5raW5nIGVycm9yOgorCit8IG1ha2UgIGFsbC1hbV5NCit8IG1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NldHRpbmdzLWRhZW1vbi0wLjArc3ZucjIwNTktcjMvc2V0dGluZ3MtZGFlbW9uJ15NCit8IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4IC1XYWxsIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1vIHNldHRpbmdzLWRhZW1vbiBzZXR0aW5nc19kYWVtb24teHNldHRpbmdzLWNvbW1vbi5vIHNldHRpbmdzX2RhZW1vbi14c2V0dGluZ3MtbWFuYWdlci5vIHNldHRpbmdzX2RhZW1vbi1zZXR0aW5ncy1kYWVtb24ubyAtcHRocmVhZCAtbGdjb25mLTIgLWxkYnVzLWdsaWItMSAtbGRidXMtMSAtbHB0aHJlYWQgLWxnZGsteDExLTIuMCAtbGdka19waXhidWYtMi4wIC1scGFuZ29jYWlyby0xLjAgLWxwYW5nby0xLjAgLWxjYWlybyAtbGdvYmplY3QtMi4wIC1sZ21vZHVsZS0yLjAgLWxndGhyZWFkLTIuMCAtbHJ0IC1sZ2xpYi0yLjBeTQorfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWJleGVjL2k1ODYtcG9reS1saW51eC9nY2MvaTU4Ni1wb2t5LWxpbnV4LzQuNS4xL2xkOiAqXkE6IGludmFsaWQgRFNPIGZvciBzeW1ib2wgYFhDcmVhdGVTaW1wbGVXaW5kb3cnIGRlZmluaXRpb25eTQorfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4L3Vzci9saWIvbGliWDExLnNvLjY6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEJhZCB2YWx1ZV5NCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzXk0KK3wgbWFrZVsxXTogKioqIFtzZXR0aW5ncy1kYWVtb25dIEVycm9yIDFeTQorfCBtYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NldHRpbmdzLWRhZW1vbi0wLjArc3ZucjIwNTktcjMvc2V0dGluZ3MtZGFlbW9uJ15NCit8IG1ha2U6ICoqKiBbYWxsXSBFcnJvciAyXk0KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMTEKKworSW5kZXg6IHNldHRpbmdzLWRhZW1vbi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9jb25maWd1cmUuYWMKKysrKyBzZXR0aW5ncy1kYWVtb24vY29uZmlndXJlLmFjCitAQCAtMTQsNyArMTQsNyBAQCBBQ19QUk9HX0NDCisgCisgCisgZG5sIFRPRE86IG1ha2UgZ2NvbmYgb3B0aW9uYWwKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhBUFAsIFtnY29uZi0yLjAgZ2RrLXgxMS0yLjBdKQorK1BLR19DSEVDS19NT0RVTEVTKEFQUCwgW2djb25mLTIuMCBnZGsteDExLTIuMCB4MTFdKQorIAorIAorIEFDX1NVQlNUKEFQUF9DRkxBR1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjE1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgYnJpZGdlIGJldHdlZW4gZ2NvbmYgYW5kIHhzZXR0aW5ncyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zdm4uby1oYW5kLmNvbS92aWV3L21hdGNoYm94L3RydW5rL3NldHRpbmdzLWRhZW1vbi8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veHNldHRpbmdzLW1hbmFnZXIuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCitERVBFTkRTID0gImdjb25mIGdsaWItMi4wIGd0aysiCitTRUNUSU9OID0gIngxMSIKK1NSQ1JFViA9ICI5YTk5NTI4YjAyMjU1NDUwZGI4MTE3NmFiZDliYmNjMWRhYjlhNGMxIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHNldHRpbmdzLWRhZW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRzb3VuZGtleXMucGF0Y2g7YXBwbHk9eWVzIFwKKyAgICAgICAgICAgZmlsZTovLzcwc2V0dGluZ3MtZGFlbW9uLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnY29uZiBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gPSAJIiR7YmluZGlyfS8qICR7c3lzY29uZmRpcn0iCisKKyMgUmVxdWlyZXMgZ2RrLXgxMS0yLjAgd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS83MHNldHRpbmdzLWRhZW1vbi5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZDZkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGFuIGljb24gdG8gc2h1dCBkb3duIHRoZSBzeXN0ZW0gY2xlYW5seSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NodXRkb3duLmRlc2t0b3AiCisKK1BSID0gInIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwlpbnN0YWxsIC1tIDA2NDQgc2h1dGRvd24uZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCisKKwlzZWQgLWkgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL3NodXRkb3duLmRlc2t0b3AgLWUgJ3MjXkV4ZWM9XCguKlwpI0V4ZWM9JHtiYXNlX3NiaW5kaXJ9L1wxIycKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBncmVwIC1xIHFlbXVhcm0gJEQke3N5c2NvbmZkaXJ9L2hvc3RuYW1lICYmIFwKKyAgICAgICAgc2VkIC1pICREJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvc2h1dGRvd24uZGVza3RvcCAtZSAncyNeRXhlYz1cKC4qXCkvaGFsdCNFeGVjPVwxL3JlYm9vdCMnIFwKKyAgICAgICAgfHwgdHJ1ZQorfQorCitpbmhlcml0IGFsbGFyY2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyNjU5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wCkBAIC0wLDAgKzEsMTAgQEAKK1tEZXNrdG9wIEVudHJ5XQorRW5jb2Rpbmc9VVRGLTgKK1R5cGU9QXBwbGljYXRpb24KK05hbWU9U2h1dGRvd24KK0NvbW1lbnQ9Q2xvc2UgZG93biB0aGUgbWFjaGluZSBzYWZlbHkKK0V4ZWM9cG93ZXJvZmYKK0ljb249c3lzdGVtLXNodXRkb3duCitUZXJtaW5hbD1mYWxzZQorQ2F0ZWdvcmllcz1VdGlsaXR5OworU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGIzNDIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaApAQCAtMCwwICsxLDkxIEBACitGcm9tIDIyZDUwNjNjNTUxZDNjMDhjMGE0YWQ4YjgwZTA4Yjc5M2Q1MzA5M2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMTY6MjM6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gVGhpcyBwYXRjaCBmaXhlcyBhIGNvbW1hbmQgbGluZSB0aGF0IGlzIHRvbyBsb25nIChvdmVyIDEwMEshKQorIGFuZCBpcyByZWplY3RlZCBieSAvYmluL3NoLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtzaG91bGQgYXBwZWFyIGluIDIuMTAsIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4NDg1Nl0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCistLS0KKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKy0tLS0tCisgVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkgfCAxNiArKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQoraW5kZXggYTEzYWY3Yy4uMDU4YzI0MSAxMDA2NDQKKy0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorQEAgLTQwOCw3ICs0MDgsNyBAQCBzZXQoV2ViS2l0MldlYkV4dGVuc2lvbl9JTlNUQUxMRURfSEVBREVSUworICAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvd2Via2l0LXdlYi1leHRlbnNpb24uaAorICkKKyAKKy1maWxlKEdMT0IgSW5zcGVjdG9yRmlsZXMKKytzZXQoSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS8qLmh0bWwKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlLyouanMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy8qLmNzcworQEAgLTQyMywxMyArNDIzLDE0IEBAIGZpbGUoR0xPQiBJbnNwZWN0b3JGaWxlcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzLyouanMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvZ3RrLyoucG5nCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL2d0ay8qLnN2ZworLSkKKy0KKy1saXN0KEFQUEVORCBJbnNwZWN0b3JGaWxlcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKKyAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworICkKKyAKKytmaWxlKEdMT0IgSW5zcGVjdG9yRmlsZXNEZXBlbmRlbmNpZXMKKysgICAgJHtJbnNwZWN0b3JGaWxlc30KKyspCisrCisgIyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgR1RLKyBBUEkgV2ViS2l0VmVyc2lvbi5oIGFuZCBvbmUgZ2VuZXJhdGVkIGJ5IFdlYkNvcmUuCisgbGlzdChJTlNFUlQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTIDAKKyAgICAgIiR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRElSfSIKK0BAIC01NjQsNyArNTY1LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAorIAorIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS9JbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUueG1sCistICAgIERFUEVORFMgJHtJbnNwZWN0b3JGaWxlc30KKysgICAgREVQRU5EUyAke0luc3BlY3RvckZpbGVzRGVwZW5kZW5jaWVzfQorICAgICAgICAgICAgICR7VE9PTFNfRElSfS9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weQorICAgICBDT01NQU5EICR7VE9PTFNfRElSfS9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSAtLW91dHB1dD0ke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vSW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbCAke0luc3BlY3RvckZpbGVzfQorICAgICBWRVJCQVRJTQorZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKK2luZGV4IDA2ODdjNGMuLjAzMDYwY2YgMTAwNzU1CistLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weQorKysrIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKK0BAIC0xNiw2ICsxNiw3IEBACisgIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAKKyBpbXBvcnQgYXJncGFyc2UKKytpbXBvcnQgZ2xvYgorIGltcG9ydCBvcworIGltcG9ydCBzeXMKKyAKK0BAIC0yNiwxMCArMjcsMTcgQEAgQkFTRV9ESVIgPSAnV2ViSW5zcGVjdG9yVUkvJworIGRlZiBnZXRfZmlsZW5hbWVzKGFyZ3MpOgorICAgICBmaWxlbmFtZXMgPSBbXQorIAorLSAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKKy0gICAgICAgIGJhc2VfZGlyX2luZGV4ID0gZmlsZW5hbWUucmZpbmQoQkFTRV9ESVIpCistICAgICAgICBpZiBiYXNlX2Rpcl9pbmRleCAhPSAtMToKKy0gICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lW2Jhc2VfZGlyX2luZGV4ICsgbGVuKEJBU0VfRElSKTpdKQorKyAgICBmb3IgcGF0dGVybiBpbiBhcmdzOgorKyAgICAgICAgcGF0aHMgPSBnbG9iLmdsb2IocGF0dGVybikKKysgICAgICAgIGZvciBmaWxlbmFtZSBpbiBwYXRoczoKKysgICAgICAgICAgICBiYXNlX2Rpcl9pbmRleCA9IGZpbGVuYW1lLnJmaW5kKEJBU0VfRElSKQorKyAgICAgICAgICAgIGlmIGJhc2VfZGlyX2luZGV4ICE9IC0xOgorKyAgICAgICAgICAgICAgICBuYW1lID0gZmlsZW5hbWVbYmFzZV9kaXJfaW5kZXggKyBsZW4oQkFTRV9ESVIpOl0KKysgICAgICAgICAgICAgICAgIyBUaGUgcmVzdWx0IHNob3VsZCB1c2UgZm9yd2FyZCBzbGFzaGVzLCB0aHVzIG1ha2Ugc3VyZSBhbnkgb3Mtc3BlY2lmaWMKKysgICAgICAgICAgICAgICAgIyBzZXBhcmF0b3IsIGFkZGVkIGJ5IHRoZSBnbG9iLmdsb2IoKSBjYWxsLCBpcyBwcm9wZXJseSByZXBsYWNlZAorKyAgICAgICAgICAgICAgICBpZiBvcy5zZXAgIT0gJy8nOgorKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvcy5zZXAsICcvJykKKysgICAgICAgICAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChuYW1lKQorICAgICByZXR1cm4gZmlsZW5hbWVzCisgCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUxYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9nY2M1LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0pTT2JqZWN0OiBDcmVhdGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBvZiBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXMKKworUmVhc29uIGZvciBjaGFuZ2U6IG5ld2VyIGdjYyBtaWdodCBvcHRpbWl6ZSBhd2F5IHRoZSB0ZW1wbGF0ZXMKK2FuZCB0aGV5IHdvbnQgYmUgYXZhaWxhYmxlIGZvciBvdGhlciAuY3BwIGZpbGVzIHRvIHVzZSBhcyB0aGVzZQorYXJlIHVzZWQgaW4gYSBkaWZmZXJlbnQgLmNwcCB3ZSBuZWVkIHRvIHRlbGwgY29tcGlsZXIgdG8gZXhwbGljaXRseQoraW5zdGFudGlhdGUgdGhlbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB3ZWJraXRndGstMi44LjUvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuOC41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKysgd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorQEAgLTE5NjUsNiArMTk2NSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCisgICAgIH0KKyB9CisgCisrdGVtcGxhdGUgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSk7CisrdGVtcGxhdGUgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPERvdWJsZVNoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxDb250aWd1b3VzU2hhcGU+KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSk7CisrCisgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCisgeworICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkNjcwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJXZWJLaXQgd2ViIHJlbmRlcmluZyBlbmdpbmUgZm9yIHRoZSBHVEsrIHBsYXRmb3JtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiQlNEICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DT1BZSU5HLkxJQjttZDU9ZDBjNmQ2Mzk3YTVkODQyODZkZGE3NThkYTU3YmQ2OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYktpdC9MSUNFTlNFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUFQUExFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTI7bWQ1PTM2MzU3ZmZkZTJiNjRhZTE3N2IyNDk0NDQ1Yjc5ZDIxIFwKKwkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMi4xO21kNT1hNzc4YTMzZWYzMzhhYmJhZjhiOGE3YzM2YjZlZWM4MCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgZmlsZTovLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaCBcCisgIGZpbGU6Ly9nY2M1LnBhdGNoIFwKKyAgIgorU1JDX1VSSVttZDVzdW1dID0gImRmNzk5OTE4NDhhNTA5NmQzYTc1Mjg5ZWJjZTU0N2FlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNkMWYwYzUzNDkzNWY0M2ZkNzRkZjkwZjI2NDhmY2VlNjcyZDYwZjFmNTdhMzBmYTU1N2E3Nzg5MWFlMDRkMjAiCisKK2luaGVyaXQgY21ha2UgbGliX3BhY2thZ2UgcGtnY29uZmlnIHBlcmxuYXRpdmUgcHl0aG9ubmF0aXZlCisKK0RFUEVORFMgPSAiemxpYiBlbmNoYW50IGxpYnNvdXAtMi40IGN1cmwgbGlieG1sMiBjYWlybyBsaWJ4c2x0IGxpYnh0IGxpYmlkbiBnbnV0bHMgXAorICAgICAgICAgICBndGsrIGd0ayszIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGZsZXgtbmF0aXZlIGdwZXJmLW5hdGl2ZSBzcWxpdGUzIFwKKwkgICBwYW5nbyBpY3UgYmlzb24tbmF0aXZlIGdub21lLWNvbW1vbiBnYXdrIGludGx0b29sLW5hdGl2ZSBsaWJ3ZWJwIFwKKwkgICBhdGsgdWRldiBoYXJmYnV6eiBqcGVnIGxpYnBuZyBwdWxzZWF1ZGlvIGxpYnJzdmcgbGlidGhlb3JhIGxpYnZvcmJpcyBsaWJ4Y29tcG9zaXRlIGxpYnh0c3QgXAorCSAgIHJ1YnktbmF0aXZlIGxpYnNlY3JldCBsaWJub3RpZnkgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIFwKKyAgICAgICAgICAiCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAndmlydHVhbC9saWJnbCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ01BS0UgPSAiIFwKKwkJLURQT1JUPUdUSyBcCisJCS1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlIFwKKwkJLURFTkFCTEVfSU5UUk9TUEVDVElPTj1GYWxzZSBcCisJCS1ERU5BQkxFX01JTklCUk9XU0VSPVRydWUgXAorCSAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLURFTkFCTEVfV0VCR0w9VHJ1ZScsICctREVOQUJMRV9XRUJHTD1GYWxzZScsIGQpfSBcCisJCSIKKworIyBKYXZhc2NyaXB0IEpJVCBpcyBub3Qgc3VwcG9ydGVkIG9uIHBvd2VycGMKK0VYVFJBX09FQ01BS0VfYXBwZW5kX3Bvd2VycGMgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCisKKyMgQVJNIEpJVCBjb2RlIGRvZXMgbm90IGJ1aWxkIG9uIEFSTXY1LzYgYW55bW9yZSwgYXBwYXJlbnRseSB0aGV5IHRlc3Qgb25seSBvbiB2NyBvbndhcmRzCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NSA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FybXY2ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCisjIGJpbnV0aWxzIDIuMjUuMSBoYXMgYSBidWcgb24gYWFyY2g2NDoKKyMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTg0MzAKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FhcmNoNjQgPSAiIC1EVVNFX0xEX0dPTEQ9RmFsc2UgIgorCisjIEpJVCBub3Qgc3VwcG9ydGVkIG9uIE1JUFMgZWl0aGVyCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwczY0ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS93ZWJraXQyZ3RrLTQuMC9pbmplY3RlZC1idW5kbGUvLmRlYnVnL2xpYndlYmtpdDJndGtpbmplY3RlZGJ1bmRsZS5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3dlYmtpdGd0ay93ZWJraXQyZ3RrLTQuMC8uZGVidWcvKiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiMTE0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLXV0aWwtMS4zLjQvYXB1LWNvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci11dGlsLTEuMy40Lm9yaWcvYXB1LWNvbmZpZy5pbgkyMDA5LTAxLTEyIDE3OjA4OjA2LjAwMDAwMDAwMCArMDAwMAorKysrIGFwci11dGlsLTEuMy40L2FwdS1jb25maWcuaW4JMjAwOS0wMS0xMiAxNzowOTowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzQsMTQgKzEzNCw3IEBACisgICAgIGV4aXQgMAorICAgICA7OworICAgICAtLWluY2x1ZGVzKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKyAgICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkaW5jbHVkZWRpciAkSU5DTFVERVMiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJzb3VyY2UiOyB0aGVuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQVV9TT1VSQ0VfRElSL2luY2x1ZGUgJElOQ0xVREVTIgorLSAgICBlbHNlCistICAgICAgICAjIHRoaXMgaXMgZm9yIFZQQVRIIGJ1aWxkcworLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFVfQlVJTERfRElSL2luY2x1ZGUgLUkkQVBVX1NPVVJDRV9ESVIvaW5jbHVkZSAkSU5DTFVERVMiCistICAgIGZpCisgICAgIDs7CisgICAgIC0tbGRmbGFncykKKyAgICAgZmxhZ3M9IiRmbGFncyAkTERGTEFHUyIKK0BAIC0xNTUsMjggKzE0OCwxMCBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1saW5rLWxkKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKyAgICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1sJEFQUlVUSUxfTElCTkFNRSIKKy0gICAgZWxzZQorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRBUFVfQlVJTERfRElSIC1sJEFQUlVUSUxfTElCTkFNRSIKKy0gICAgZmkKKyAgICAgOzsKKyAgICAgLS1saW5rLWxpYnRvb2wpCistICAgICMgSWYgdGhlIExBX0ZJTEUgZXhpc3RzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSwgdXNlIGl0LiAgSWYgd2UncmUKKy0gICAgIyBpbnN0YWxsZWQgYW5kIHRoZSBMQV9GSUxFIGRvZXMgbm90IGV4aXN0LCBhc3N1bWUgdG8gdXNlIC1MLy1sCistICAgICMgKHRoZSBMQV9GSUxFIG1heSBub3QgaGF2ZSBiZWVuIGluc3RhbGxlZCkuICBJZiB3ZSdyZSBidWlsZGluZyBvdXJzZWx2ZXMsCistICAgICMgd2UnbGwgYXNzdW1lIHRoYXQgYXQgc29tZSBwb2ludCB0aGUgLmxhIGZpbGUgYmUgY3JlYXRlZC4KKy0gICAgaWYgdGVzdCAtZiAiJExBX0ZJTEUiOyB0aGVuCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorLSAgICAgICAgIyMjIGF2b2lkIHVzaW5nIC1MIGlmIGxpYmRpciBpcyBhICJzdGFuZGFyZCIgbG9jYXRpb24gbGlrZSAvdXNyL2xpYgorLSAgICAgICAgIyBTaW5jZSB0aGUgdXNlciBpcyBzcGVjaWZ5aW5nIHRoZXkgYXJlIGxpbmtpbmcgd2l0aCBsaWJ0b29sLCB3ZQorLSAgICAgICAgIyAqa25vdyogdGhhdCAtUiB3aWxsIGJlIHJlY29nbml6ZWQgYnkgbGlidG9vbC4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1SJGxpYmRpciAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJEFQUlVUSUxfTElCTkFNRSIKKyAgICAgOzsKKyAgICAgLS1hcHUtbGEtZmlsZSkKKyAgICAgaWYgdGVzdCAtZiAiJExBX0ZJTEUiOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWUyNDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItdXRpbC0xLjQuMS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItdXRpbC0xLjQuMS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA5LTEyLTE4IDAzOjE1OjE5LjAwMDAwMDAwMCArMDgwMAorKysrIGFwci11dGlsLTEuNC4xL2NvbmZpZ3VyZS5pbgkyMDExLTEyLTMwIDEzOjMyOjA3LjAwMDAwMDAwMCArMDgwMAorQEAgLTgsMTUgKzgsMTUgQEAKKyBBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvcHJpdmF0ZS9hcHVfY29uZmlnLmgpCisgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQpCisgCistc2luY2x1ZGUoYnVpbGQvYXB1LWNvbmYubTQpCistc2luY2x1ZGUoYnVpbGQvYXB1LWljb252Lm00KQorLXNpbmNsdWRlKGJ1aWxkL2FwdS1oaW50cy5tNCkKKy1zaW5jbHVkZShidWlsZC9hcHJfY29tbW9uLm00KQorLXNpbmNsdWRlKGJ1aWxkL2ZpbmRfYXByLm00KQorLXNpbmNsdWRlKGJ1aWxkL2NyeXB0by5tNCkKKy1zaW5jbHVkZShidWlsZC9kYm0ubTQpCistc2luY2x1ZGUoYnVpbGQvZGJkLm00KQorLXNpbmNsdWRlKGJ1aWxkL2Rzby5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXB1LWNvbmYubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1pY29udi5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXB1LWhpbnRzLm00KQorKyNzaW5jbHVkZShidWlsZC9hcHJfY29tbW9uLm00KQorKyNzaW5jbHVkZShidWlsZC9maW5kX2Fwci5tNCkKKysjc2luY2x1ZGUoYnVpbGQvY3J5cHRvLm00KQorKyNzaW5jbHVkZShidWlsZC9kYm0ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2RiZC5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZHNvLm00KQorIAorIGRubCBHZW5lcmF0ZSAuL2NvbmZpZy5uaWNlIGZvciByZXByb2R1Y2luZyBydW5zIG9mIGNvbmZpZ3VyZQorIGRubCAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NkIHRlc3QKKy4vdGVzdGFsbCB8c2VkIFwKKyAgLWUgJ3N8XCguKlwpOiAgU1VDQ0VTU3xQQVNTOiBcMXwnIFwKKyAgLWUgJ3N8XCguKlwpOiAgRkFJTEVEfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE0ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsXzEuNS40LmJiCkBAIC0wLDAgKzEsODEgQEAKK1NVTU1BUlkgPSAiQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgKEFQUikgY29tcGFuaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vYXByLmFwYWNoZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJhcHIgZXhwYXQgZ2RibSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT01MTllMGExOGUwM2Y3YzAyMzA3MDU2OGMxNGIwNzdiYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2FwdV92ZXJzaW9uLmg7ZW5kbGluZT0xNzttZDU9ODA2Njg1YTg0ZTcxZjEwYzgwMTQ0YzQ4ZWIzNWRmNDIiCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS9hcHIvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWdmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX2ZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NjY4MjVjMDRkYTgyN2M2ZTVmNTNkYWZmNTU2OWY0MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NzZhMTJhNTliYzI4NmQ2MzRhMjFkN2JlMDg0MWNjNzQyODllYTkwNzdhYTFhZjQ2YmUxOWQxYTZlODQ0YzE5IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfS9hcHItMS1jb25maWcgXCAKKwkJLS13aXRob3V0LW9kYmMgXAorCQktLXdpdGhvdXQtcGdzcWwgXAorCQktLXdpdGgtZGJtPWdkYm0gXAorCQktLXdpdGgtZ2RibT0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKwkJLS13aXRob3V0LXNxbGl0ZTIgXAorCQktLXdpdGhvdXQtc3FsaXRlMyBcCisJCS0td2l0aC1leHBhdD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZworCitQUiA9ICJyMSIKKworT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSA9ICIgLWUgJ3M6bG9jYXRpb249c291cmNlOmxvY2F0aW9uPWluc3RhbGxlZDonIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWlmIFsgIiR7Q0xBU1NPVkVSUklERX0iID0gImNsYXNzLXRhcmdldCIgXTsgdGhlbgorCQljcCAke1NUQUdJTkdfREFUQURJUn0vYXByL2Fwcl9ydWxlcy5tayAke0J9L2J1aWxkL3J1bGVzLm1rCisJZmkKK30KK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlta2RpciAke0J9L2J1aWxkCisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hcHIvYXByX3J1bGVzLm1rICR7Qn0vYnVpbGQvcnVsZXMubWsKK30KK2RvX2NvbmZpZ3VyZV9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCXNlZCAtaSAicyNMSUJUT09MPVwkKFNIRUxMKSBcJChhcHJfYnVpbGRkaXIpI0xJQlRPT0w9XCQoU0hFTEwpICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSMiICR7Qn0vYnVpbGQvcnVsZXMubWsKKwkjIHNvbWV0aW1lcyB0aGVyZSBpc24ndCBTSEVMTAorCXNlZCAtaSAicyNMSUJUT09MPVwkKGFwcl9idWlsZGRpcikjTElCVE9PTD0ke1NUQUdJTkdfQklORElSX05BVElWRX0jIiAke0J9L2J1aWxkL3J1bGVzLm1rCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcCAke1NUQUdJTkdfREFUQURJUn0vYXByL2Fwcl9ydWxlcy5tayAke1N9L2J1aWxkL3J1bGVzLm1rCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCXNlZCAtaSAicyNcKGFwcl9idWlsZGRpclwpPS4qI1wxPSR7U1RBR0lOR19EQVRBRElSfS9idWlsZC0xIyIgJHtTfS9idWlsZC9ydWxlcy5taworCXNlZCAtaSAicyNcKGFwcl9idWlsZGVyc1wpPS4qI1wxPSR7U1RBR0lOR19EQVRBRElSfS9idWlsZC0xIyIgJHtTfS9idWlsZC9ydWxlcy5taworCXNlZCAtaSAicyNcKHRvcF9idWlsZGRpclwpPS4qI1wxPSR7U1RBR0lOR19EQVRBRElSfS9idWlsZC0xIyIgJHtTfS9idWlsZC9ydWxlcy5taworCXNlZCAtaSAicyNcKExJQlRPT0w9XCQoYXByX2J1aWxkZGlyKVwpLiojXDEvbGlidG9vbCMiICR7U30vYnVpbGQvcnVsZXMubWsKK30KKworRklMRVNfJHtQTn0gICAgICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0tMS5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2FwcnV0aWwuZXhwICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5zbyogJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS8uZGVidWcvKiIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLmEiCisKK2luaGVyaXQgcHRlc3QKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwljZCAke0J9L3Rlc3QKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbWtkaXIgJHQKKwlmb3IgaSBpbiB0ZXN0YWxsIGRhdGE7IGRvIFwKKwkgIGNwIC1yICR7Qn0vdGVzdC8kaSAkdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9GaXgtcGFja2V0LWRpc2NhcmRzLUhUVFAtcmVkaXJlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwNWI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0ZpeCBwYWNrZXQgZGlzY2FyZHMgSFRUUCByZWRpcmVjdC4KKworRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiBieSBwb2xsKCkgdGltZW91dC4KK0lmIHRpbWVvdXQ9MCBhbmQgYXByX3dhaXRfZm9yX2lvX29yX3RpbWVvdXQoKT1BUFJfVElNRVVQIHRoZW4KK2Fwcl9zb2NrZXRfcmVjdigpIHJldHVybnMgRUFHQUlOLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTm9yaWFraSBZb3NoaXRhbmUgPHlvc2hpdGFuZS5ucnNAY250Lm5jb3MubmVjLmNvLmpwPgorU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMgfCAgICA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYyBiL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCitpbmRleCBjMTMzYTI2Li5lOGZhZjE1IDEwMDY0NAorLS0tIGEvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMKKysrKyBiL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCitAQCAtODUsNiArODUsMTAgQEAgYXByX3N0YXR1c190IGFwcl9zb2NrZXRfcmVjdihhcHJfc29ja2V0X3QgKnNvY2ssIGNoYXIgKmJ1ZiwgYXByX3NpemVfdCAqbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAmJiAoc29jay0+dGltZW91dCA+IDApKSB7CisgZG9fc2VsZWN0OgorICAgICAgICAgYXJ2ID0gYXByX3dhaXRfZm9yX2lvX29yX3RpbWVvdXQoTlVMTCwgc29jaywgMSk7CisrICAgICAgICBpZiAoKGFydiA9PSBBUFJfVElNRVVQKSAmJiAoc29jay0+dGltZW91dCA9PSAwKSkgeworKyAgICAgICAgICAgICpsZW4gPSAwOworKyAgICAgICAgICAgIHJldHVybiBFQUdBSU47CisrICAgICAgICB9CisgICAgICAgICBpZiAoYXJ2ICE9IEFQUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgKmxlbiA9IDA7CisgICAgICAgICAgICAgcmV0dXJuIGFydjsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3ODRlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItMS40LjIvYnVpbGQvYnVpbGRjaGVjay5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjQuMi5vcmlnL2J1aWxkL2J1aWxkY2hlY2suc2gJMjAwOS0xMS0xMyAwODoyNzoxNi4wMDAwMDAwMDAgKzA4MDAKKysrKyBhcHItMS40LjIvYnVpbGQvYnVpbGRjaGVjay5zaAkyMDEwLTExLTI2IDE1OjQ0OjAwLjAwMDAwMDAwMCArMDgwMAorQEAgLTMyLDM1ICszMiw0IEBACisgZWNobyAiYnVpbGRjb25mOiBhdXRvY29uZiB2ZXJzaW9uICRhY192ZXJzaW9uIChvaykiCisgZmkKKyAKKy0jIFNhbXBsZSBsaWJ0b29sIC0tdmVyc2lvbiBvdXRwdXRzOgorLSMgbHRtYWluLnNoIChHTlUgbGlidG9vbCkgMS4zLjMgKDEuMzg1LjIuMTgxIDE5OTkvMDcvMDIgMTU6NDk6MTEpCistIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sIDEuMTM2MSAyMDA0LzAxLzAyIDIzOjEwOjUyKSAxLjVhCistIyBvdXRwdXQgaXMgbXVsdGlsaW5lIGZyb20gMS41IG9ud2FyZHMKKy0KKy0jIFJlcXVpcmUgbGlidG9vbCAxLjQgb3IgbmV3ZXIKKy1saWJ0b29sPWBidWlsZC9QcmludFBhdGggZ2xpYnRvb2wxIGdsaWJ0b29sIGxpYnRvb2wgbGlidG9vbDE1IGxpYnRvb2wxNGAKKy1sdF9wdmVyc2lvbj1gJGxpYnRvb2wgLS12ZXJzaW9uIDI+L2Rldi9udWxsfHNlZCAtZSAncy8oW14pXSopLy9nO3MvXlteMC05XSovLztzL1stIF0uKi8vZztxJ2AKKy1pZiB0ZXN0IC16ICIkbHRfcHZlcnNpb24iOyB0aGVuCistZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIG5vdCBmb3VuZC4iCistZWNobyAiICAgICAgICAgICBZb3UgbmVlZCBsaWJ0b29sIHZlcnNpb24gMS40IG9yIG5ld2VyIGluc3RhbGxlZCIKKy1lY2hvICIgICAgICAgICAgIHRvIGJ1aWxkIEFQUiBmcm9tIFNWTi4iCistZXhpdCAxCistZmkKKy1sdF92ZXJzaW9uPWBlY2hvICRsdF9wdmVyc2lvbnxzZWQgLWUgJ3MvXChbYS16XSpcKSQvLlwxLydgCistSUZTPS47IHNldCAkbHRfdmVyc2lvbjsgSUZTPScgJworLWx0X3N0YXR1cz0iZ29vZCIKKy1pZiB0ZXN0ICIkMSIgPSAiMSI7IHRoZW4KKy0gICBpZiB0ZXN0ICIkMiIgLWx0ICI0IjsgdGhlbgorLSAgICAgIGx0X3N0YXR1cz0iYmFkIgorLSAgIGZpCistZmkKKy1pZiB0ZXN0ICRsdF9zdGF0dXMgPSAiZ29vZCI7IHRoZW4KKy0gICBlY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAkbHRfcHZlcnNpb24gKG9rKSIKKy0gICBleGl0IDAKKy1maQorLQorLWVjaG8gImJ1aWxkY29uZjogbGlidG9vbCB2ZXJzaW9uICRsdF9wdmVyc2lvbiBmb3VuZC4iCistZWNobyAiICAgICAgICAgICBZb3UgbmVlZCBsaWJ0b29sIHZlcnNpb24gMS40IG9yIG5ld2VyIGluc3RhbGxlZCIKKy1lY2hvICIgICAgICAgICAgIHRvIGJ1aWxkIEFQUiBmcm9tIFNWTi4iCistCistZXhpdCAxCisrZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlnZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNWM0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItMS4zLjMvYXByLWNvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjMuMy5vcmlnL2Fwci1jb25maWcuaW4JMjAwOS0wMS0xMiAxNToxNjozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHItMS4zLjMvYXByLWNvbmZpZy5pbgkyMDA5LTAxLTEyIDE1OjE5OjI1LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1MiwxNCArMTUyLDcgQEAKKyAgICAgZmxhZ3M9IiRmbGFncyAkTERGTEFHUyIKKyAgICAgOzsKKyAgICAgLS1pbmNsdWRlcykKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1JJGluY2x1ZGVkaXIgJEVYVFJBX0lOQ0xVREVTIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAic291cmNlIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFJfU09VUkNFX0RJUi9pbmNsdWRlICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZWxzZQorLSAgICAgICAgIyB0aGlzIGlzIGZvciBWUEFUSCBidWlsZHMKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBSX0JVSUxEX0RJUi9pbmNsdWRlIC1JJEFQUl9TT1VSQ0VfRElSL2luY2x1ZGUgJEVYVFJBX0lOQ0xVREVTIgorLSAgICBmaQorICAgICA7OworICAgICAtLXNyY2RpcikKKyAgICAgZWNobyAkQVBSX1NPVVJDRV9ESVIKK0BAIC0xODEsMjkgKzE2NywxNCBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1saW5rLWxkKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGVsc2UKKy0gICAgICAgICMjIyB0aGlzIHN1cmVseSBjYW4ndCB3b3JrIHNpbmNlIHRoZSBsaWJyYXJ5IGlzIGluIC5saWJzPworLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRBUFJfQlVJTERfRElSIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJHtBUFJfTElCTkFNRX0iCisgICAgIDs7CisgICAgIC0tbGluay1saWJ0b29sKQorICAgICAjIElmIHRoZSBMQV9GSUxFIGV4aXN0cyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUsIHVzZSBpdC4gIElmIHdlJ3JlCisgICAgICMgaW5zdGFsbGVkIGFuZCB0aGUgTEFfRklMRSBkb2VzIG5vdCBleGlzdCwgYXNzdW1lIHRvIHVzZSAtTC8tbAorICAgICAjICh0aGUgTEFfRklMRSBtYXkgbm90IGhhdmUgYmVlbiBpbnN0YWxsZWQpLiAgSWYgd2UncmUgYnVpbGRpbmcgb3Vyc2VsdmVzLAorICAgICAjIHdlJ2xsIGFzc3VtZSB0aGF0IGF0IHNvbWUgcG9pbnQgdGhlIC5sYSBmaWxlIGJlIGNyZWF0ZWQuCistICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgICMgU2luY2UgdGhlIHVzZXIgaXMgc3BlY2lmeWluZyB0aGV5IGFyZSBsaW5raW5nIHdpdGggbGlidG9vbCwgd2UKKy0gICAgICAgICMgKmtub3cqIHRoYXQgLVIgd2lsbCBiZSByZWNvZ25pemVkIGJ5IGxpYnRvb2wuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtUiRsaWJkaXIgLWwke0FQUl9MSUJOQU1FfSIKKy0gICAgZWxzZQorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZmkKKysgICAgICAgIGZsYWdzPSIkZmxhZ3MgLWwke0FQUl9MSUJOQU1FfSIKKyAgICAgOzsKKyAgICAgLS1zaGxpYi1wYXRoLXZhcikKKyAgICAgZWNobyAiJFNITElCUEFUSF9WQVIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlndXJlX2ZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTQwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApAQCAtMCwwICsxLDY4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItMS4zLjMvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLTEuMy4zLm9yaWcvY29uZmlndXJlLmluCisrKysgYXByLTEuMy4zL2NvbmZpZ3VyZS5pbgorQEAgLTc5NCwzOSArNzk0LDYgQEAgQUNfQ0hFQ0tfRlVOQ1MoW21tYXAgbXVubWFwIHNobV9vcGVuIHNobQorICAgICAgICAgICAgICAgICBjcmVhdGVfYXJlYV0pCisgCisgQVBSX0NIRUNLX0RFRklORShNQVBfQU5PTiwgc3lzL21tYW4uaCkKKy1BQ19DSEVDS19GSUxFKC9kZXYvemVybykKKy0KKy0jIE5vdCBhbGwgc3lzdGVtcyBjYW4gbW1hcCAvZGV2L3plcm8gKHN1Y2ggYXMgSFAtVVgpLiAgQ2hlY2sgZm9yIHRoYXQuCistaWYgdGVzdCAiJGFjX2N2X2Z1bmNfbW1hcCIgPSAieWVzIiAmJgorLSAgIHRlc3QgIiRhY19jdl9maWxlX19kZXZfemVybyIgPSAieWVzIjsgdGhlbgorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIG1tYXAgdGhhdCBjYW4gbWFwIC9kZXYvemVybykKKy0gICAgQUNfVFJZX1JVTihbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLSNpbmNsdWRlIDxmY250bC5oPgorLSNpZmRlZiBIQVZFX1NZU19NTUFOX0gKKy0jaW5jbHVkZSA8c3lzL21tYW4uaD4KKy0jZW5kaWYKKy0gICAgaW50IG1haW4oKQorLSAgICB7CistICAgICAgICBpbnQgZmQ7CistICAgICAgICB2b2lkICptOworLSAgICAgICAgZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworLSAgICAgICAgaWYgKGZkIDwgMCkgeworLSAgICAgICAgICAgIHJldHVybiAxOworLSAgICAgICAgfQorLSAgICAgICAgbSA9IG1tYXAoMCwgc2l6ZW9mKHZvaWQqKSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKy0gICAgICAgIGlmIChtID09ICh2b2lkICopLTEpIHsgIC8qIGFrYSBNQVBfRkFJTEVEICovCistICAgICAgICAgICAgcmV0dXJuIDI7CistICAgICAgICB9CistICAgICAgICBpZiAobXVubWFwKG0sIHNpemVvZih2b2lkKikpIDwgMCkgeworLSAgICAgICAgICAgIHJldHVybiAzOworLSAgICAgICAgfQorLSAgICAgICAgcmV0dXJuIDA7CistICAgIH1dLCBbXSwgW2FjX2N2X2ZpbGVfX2Rldl96ZXJvPW5vXSwgW2FjX2N2X2ZpbGVfX2Rldl96ZXJvPW5vXSkKKy0KKy0gICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZmlsZV9fZGV2X3plcm8pCistZmkKKyAKKyAjIE5vdyB3ZSBkZXRlcm1pbmUgd2hpY2ggb25lIGlzIG91ciBhbm9ueW1vdXMgc2htZW0gcHJlZmVyZW5jZS4KKyBoYXZlc2htZ2V0YW5vbj0iMCIKK0BAIC0xNTE4LDEzICsxNDg1LDE0IEBAIGVsc2UKKyAgICAgYmlnZW5kaWFuPTAKKyBmaQorIAorLUFQUl9DSEVDS19TSVpFT0ZfRVhURU5ERUQoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3Vpby5oPl0sc3RydWN0IGlvdmVjLDApCistaWYgdGVzdCAiJGFjX2N2X3NpemVvZl9zdHJ1Y3RfaW92ZWMiID0gIjAiOyB0aGVuCistICAgIGhhdmVfaW92ZWM9MAorLWVsc2UKKy0gICAgaGF2ZV9pb3ZlYz0xCistZmkKKysjQVBSX0NIRUNLX1NJWkVPRl9FWFRFTkRFRChbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyMjaW5jbHVkZSA8c3lzL3Vpby5oPl0sc3RydWN0IGlvdmVjLDApCisrI2lmIHRlc3QgIiRhY19jdl9zaXplb2Zfc3RydWN0X2lvdmVjIiA9ICIwIjsgdGhlbgorKyMgICAgaGF2ZV9pb3ZlYz0wCisrI2Vsc2UKKysjICAgIGhhdmVfaW92ZWM9MQorKyNmaQorK2hhdmVfaW92ZWM9MQorIAorIEFDX1NVQlNUKHZvaWRwX3NpemUpCisgQUNfU1VCU1Qoc2hvcnRfdmFsdWUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0CisuL3Rlc3RhbGwgfHNlZCBcCisgIC1lICdzfFwoLipcKTogIFNVQ0NFU1N8UEFTUzogXDF8JyBcCisgIC1lICdzfFwoLipcKTogIEZBSUxFRHxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvdXBncmFkZS1hbmQtZml4LTEuNS4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Njk2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitNYWtlZmlsZS5pbjogZml4IGNyb3NzIGNvbXBpbGluZyBmYWlsZWQKKworVGhlIHRvb2xzL2dlbl90ZXN0X2NoYXIgd2FzIGludm9rZWQgYXQgYnVpbGQgdGltZSwKK2FuZCBpdCBkaWRuJ3Qgd29yayBmb3IgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gd2UKK2NvbXBpbGUgaXQgd2l0aCAkQlVJTERfQ0MuCisKK1JlbW92ZSB0aGUgJ3Rvb2xzJyBkaXIgY3JlYXRpb24sIGl0IGFsd2F5cyBleGlzdGVkLgorQW5kIGl0IGNhdXNlZCBnZW5fdGVzdF9jaGFyIHVuZXhwZWN0ZWQgcmVidWlsdCBhdAorZG9faW5zdGFsbCB0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEwICsrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYTJhNTE5NC4uNWZlMDI4ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTQ2LDcgKzQ2LDYgQEAgTFRfVkVSU0lPTiA9IEBMVF9WRVJTSU9OQAorIAorIENMRUFOX1RBUkdFVFMgPSBhcHItY29uZmlnLm91dCBhcHIuZXhwIGV4cG9ydHMuYyBleHBvcnRfdmFycy5jIC5tYWtlLmRpcnMgXAorIAlidWlsZC9hcHJfcnVsZXMub3V0IHRvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQCBcCistCXRvb2xzL2dlbl90ZXN0X2NoYXIubyB0b29scy9nZW5fdGVzdF9jaGFyLmxvIFwKKyAJaW5jbHVkZS9wcml2YXRlL2Fwcl9lc2NhcGVfdGVzdF9jaGFyLmgKKyBESVNUQ0xFQU5fVEFSR0VUUyA9IGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgXAorIAlpbmNsdWRlL2Fwci5oIGluY2x1ZGUvYXJjaC91bml4L2Fwcl9wcml2YXRlLmggXAorQEAgLTEyOSwxMyArMTI4LDggQEAgY2hlY2s6ICQoVEFSR0VUX0xJQikKKyBldGFnczoKKyAJZXRhZ3MgYGZpbmQgLiAtbmFtZSAnKi5bY2hdJ2AKKyAKKy1PQkpFQ1RTX2dlbl90ZXN0X2NoYXIgPSB0b29scy9nZW5fdGVzdF9jaGFyLmxvICQoTE9DQUxfTElCUykKKy10b29scy9nZW5fdGVzdF9jaGFyLmxvOiB0b29scy9nZW5fdGVzdF9jaGFyLmMKKy0JJChBUFJfTUtESVIpIHRvb2xzCistCSQoTFRfQ09NUElMRSkKKy0KKy10b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEA6ICQoT0JKRUNUU19nZW5fdGVzdF9jaGFyKQorLQkkKExJTktfUFJPRykgJChPQkpFQ1RTX2dlbl90ZXN0X2NoYXIpICQoQUxMX0xJQlMpCisrdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRAOiB0b29scy9nZW5fdGVzdF9jaGFyLmMKKysJJChCVUlMRF9DQykgJChDRkxBR1NfRk9SX0JVSUxEKSAkPCAtbyAkQAorIAorIGluY2x1ZGUvcHJpdmF0ZS9hcHJfZXNjYXBlX3Rlc3RfY2hhci5oOiB0b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEAKKyAJJChBUFJfTUtESVIpIGluY2x1ZGUvcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmN2YzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIKQEAgLTAsMCArMSw5NiBAQAorU1VNTUFSWSA9ICJBcGFjaGUgUG9ydGFibGUgUnVudGltZSAoQVBSKSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAidXRpbC1saW51eCIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NGRmZDRjZDIxNjgyOGM4Y2FlNWRlNWExMmYzODQ0YzggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHJfbGliLmg7ZW5kbGluZT0xNzttZDU9ZWU0MmZhNzU3NWRjNDA1ODBhOWUwMWMxYjc1ZmFlOTYiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSA9ICIke0FQQUNIRV9NSVJST1J9L2Fwci8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVfZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYW51cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWdmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtcGFja2V0LWRpc2NhcmRzLUhUVFAtcmVkaXJlY3QucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGU5NzY5ZjMzNDlmZTExZmMwYTVlMWIyMjRjMjM2YWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2QwM2VkMjljMjJhNzE1MmJlNDViOGU1MDQzMTA2MzczNmRmOWUxZGFhMWRkZjkzZjZhNTQ3YmE3YTI4ZjY3YSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QKKworT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSA9ICIgLWUgJ3M6bG9jYXRpb249c291cmNlOmxvY2F0aW9uPWluc3RhbGxlZDonIgorCisjIEFkZGVkIHRvIGZpeCBzb21lIGlzc3VlcyB3aXRoIGNtYWtlLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYm13Y2FyaXQvbWV0YS1yb3MvaXNzdWVzLzY4I2lzc3VlY29tbWVudC0xOTg5NjkyOAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFwcl9jdl9tdXRleF9yZWN1cnNpdmU9eWVzIgorCisjIEFsc28gc3VwcHJlc3MgdHJ5aW5nIHRvIHVzZSBzY3RwLgorIworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ubyBhY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIEF2b2lkIGFic29sdXRlIHBhdGhzIGZvciBncmVwIHNpbmNlIGl0IGNhdXNlcyBmYWlsdXJlcworCSMgd2hlbiB1c2luZyBzc3RhdGUgYmV0d2VlbiBkaWZmZXJlbnQgaG9zdHMgd2l0aCBkaWZmZXJlbnQKKwkjIGluc3RhbGwgcGF0aHMgZm9yIGdyZXAuCisJZXhwb3J0IEdSRVA9ImdyZXAiCisKKwljZCAke1N9CisJLi9idWlsZGNvbmYKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vYXByLmV4cCAke2RhdGFkaXJ9L2J1aWxkLTEvKiIKK1JERVBFTkRTXyR7UE59LWRldiArPSAiYmFzaCIKKworI2ZvciBzb21lIHJlYXNvbiwgYnVpbGQvbGlidG9vbC5tNCBoYW5kbGVkIGJ5IGJ1aWxkY29uZiBzdGlsbCBiZSBvdmVyd3JpdHRlbgorI3doZW4gYXV0b2NvbmYsIHNvIGhhbmRsZSBpdCBhZ2Fpbi4KK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICdzL0xJQlRPT0w9XCguKlwpdG9wX2J1aWxkL0xJQlRPT0w9XDFhcHJfYnVpbGQvJyAke1N9L2J1aWxkL2xpYnRvb2wubTQKKwlzZWQgLWkgLWUgJ3MvTElCVE9PTD1cKC4qXCl0b3BfYnVpbGQvTElCVE9PTD1cMWFwcl9idWlsZC8nICR7U30vYnVpbGQvYXByX3J1bGVzLm1rCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBhcHIuaAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXByCisJY3AgJHtTfS8ke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2RhdGFkaXJ9L2J1aWxkLTEvbGlidG9vbAorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiYXByX3J1bGVzLm1rIGxpYnRvb2wiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYXByX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYXByX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZD0ke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2FwcgorCWluc3RhbGwgLWQgJGQvCisJY3AgJHtTfS9idWlsZC9hcHJfcnVsZXMubWsgJGQvCisJc2VkIC1pIHMsYXByX2J1aWxkZGlyPS4qLGFwcl9idWlsZGRpcj0sZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxhcHJfYnVpbGRlcnM9LiosYXByX2J1aWxkZXJzPSxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLExJQlRPT0w9LiosTElCVE9PTD0ke0hPU1RfU1lTfS1saWJ0b29sLGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsXCRcKGFwcl9idWlsZGVyc1wpLCR7U1RBR0lOR19EQVRBRElSfS9hcHIvLGcgJGQvYXByX3J1bGVzLm1rCisJY3AgJHtTfS9idWlsZC9ta2Rpci5zaCAkZC8KKwljcCAke1N9L2J1aWxkL21ha2VfZXhwb3J0cy5hd2sgJGQvCisJY3AgJHtTfS9idWlsZC9tYWtlX3Zhcl9leHBvcnQuYXdrICRkLworfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCWNkICR7U30vdGVzdAorCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlta2RpciAtcCAkdC8ubGlicworCWNwIC1yICR7U30vdGVzdC9kYXRhICR0LworCWNwIC1yICR7U30vdGVzdC8ubGlicy8qLnNvICR0Ly5saWJzLworCWNwICR7U30vdGVzdC9wcm9jX2NoaWxkICR0LworCWNwICR7U30vdGVzdC9yZWFkY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3NvY2tjaGlsZCAkdC8KKwljcCAke1N9L3Rlc3Qvc29ja3BlcmYgJHQvCisJY3AgJHtTfS90ZXN0L3Rlc3RhbGwgJHQvCisJY3AgJHtTfS90ZXN0L3RyeXJlYWQgJHQvCit9CisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjE3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiR05VIEFzcGVsbCBzcGVsbC1jaGVja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkxHUEx2MiB8IExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXNwZWxsL2FzcGVsbC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZTY2YTljOWFmNmE2MGRjNDYxMzRmZGFjZjZjZTk3ZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjUyNTgzYTgzYTYzNjMzNzAxYzVmNzFkYjNkYzQwYWFiODdiN2Y3NmIyOTcyM2FlYjI3OTQxZWZmNDJkZjZlMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbY3Vyc2VzXSA9ICItLWVuYWJsZS1jdXJzZXMsLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzIgorCitQQUNLQUdFUyArPSAibGliYXNwZWxsIGxpYnBzcGVsbCBhc3BlbGwtdXRpbHMiCisKK1JERVBFTkRTXyR7UE59LXV0aWxzICs9ICJwZXJsIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hc3BlbGwtMC42MC8uZGVidSoiCitGSUxFU19saWJhc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYmFzcGVsbC5zby4qICR7bGliZGlyfS9hc3BlbGwqIgorRklMRVNfYXNwZWxsLXV0aWxzID0gIiR7YmluZGlyfS93b3JkLWxpc3QtY29tcHJlc3MgJHtiaW5kaXJ9L2FzcGVsbC1pbXBvcnQgJHtiaW5kaXJ9L3J1bi13aXRoLWFzcGVsbCAke2JpbmRpcn0vcHJlKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hc3BlbGwiCitGSUxFU19saWJwc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYnBzcGVsbC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vcHNwZWxsLWNvbmZpZyIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZAorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BzcGVsbC1jb25maWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk1ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkFULVNQSSAyIFRvb2xraXQgQnJpZGdlIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjg5MzY0ODhjOGNkY2UwZTE1OGY4MGIyZTI0NzUyN2Y5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4ZWZjNDVlYzM2MzgzYmY3ODVmODYzNmU2NGE4ZDg2NmRlZmViMDIwZTAwYTA4ZjkyOTc4ZjFmYzM3NzJmZjkiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBhdGsgYXQtc3BpMi1jb3JlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGF0LXNwaTItY29yZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ25vbWUgJHtQTn0tZ3RrMiIKKworRklMRVNfJHtQTn0tZ25vbWUgPSAiJHtsaWJkaXJ9L2dub21lLXNldHRpbmdzLWRhZW1vbi0zLjAvZ3RrLW1vZHVsZXMiCitGSUxFU18ke1BOfS1ndGsyID0gIiR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliYXRrLWJyaWRnZS4qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzMyMDc5OWM5NDFkNDJhOWI3ZTM1MTgwNTM1OTY5NGVhM2IzNmQyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgQXByIDIwMTUgMDk6MDg6MzggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbmxzLm00OiBUYWtlIGl0IGZyb20gZ2V0dGV4dC0wLjE1CisKK0l0IG90aGVyd2lzZSBleHBlY3RzIGdldHRleHQgdG8gcHJvdmlkZSBpdC4gTGV0cyBnbyBpbmRlcGVuZGVudAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG00L25scy5tNCB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L25scy5tNAorCitkaWZmIC0tZ2l0IGEvbTQvbmxzLm00IGIvbTQvbmxzLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmM4ZmU2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbmxzLm00CitAQCAtMCwwICsxLDMwIEBACisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlIG5vdCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgVWxyaWNoIERyZXBwZXIgZHJlcHBlckBjeWdudXMuY29tLCAxOTk1LTIwMDAuCisrZG5sIEJydW5vIEhhaWJsZSBoYWlibGVAY2xpc3AuY29ucy5vcmcsIDIwMDAtMjAwMy4KKysKKytBQ19QUkVSRVEoMi41MCkKKysKKytBQ19ERUZVTihbQU1fTkxTXSwKKytbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorK2RubCBEZWZhdWx0IGlzIGVuYWJsZWQgTkxTCisrQUNfQVJHX0VOQUJMRShubHMsCisrWyAtLWRpc2FibGUtbmxzIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorK1VTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisrQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKytBQ19TVUJTVChVU0VfTkxTKQorK10pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2JlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQXNzaXN0aXZlIFRlY2hub2xvZ3kgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgKGRidXMgY29yZSkiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmU2ZWVlYTM3MGY5MTNiNzYzOWI2MDk5MTNiMmNmMDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWMwYjc3ZmI4Y2U4MWFiYmYxZDgwYzBhZmVlOTg1OGIzZjkyMjlmNjczYjc4ODE5OTVmZTBmYzE2YjFhNzRkMCIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIHZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnh0c3QgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS14ZXZpZSAtLXdpdGgtZGJ1cy1kYWVtb25kaXI9JHtiaW5kaXJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9hY2Nlc3NpYmlsaXR5LXNlcnZpY2VzLyouc2VydmljZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZjliNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQWNjZXNzaWJpbGl0eSB0b29sa2l0IGZvciBHTk9NRSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9HQVAvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9saWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrdXRpbC5jO2VuZGxpbmU9MTg7bWQ1PTZmZDMxY2QyZmRjOWIzMGY2MTljYThkODE5YmMxMmQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0ay9hdGsuaDtlbmRsaW5lPTE4O21kNT1mY2Q3NzEwMTg3ZTBlYWU0ODVlMzU2YzMwZDFiMGMzYiIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjN2M1MDAyYmQ2ZTU4YjQ3MjNhMTY1ZjFiZjMxMjExNiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjA5NWY5ODYwNjBhNmEwYjIyZWIxNWVlZjg0YWU5ZjE0YTFjZjgwODI0ODhmYWE2ODg2ZDk0YzM3NDM4YWU1NjIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdsaWJ0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJjOGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL2FjbC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYiR7QlBOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2MvQ09QWUlORzttZDU9Yzc4MWQ3MGVkMmI0ZDQ4OTk1Yjc5MDQwMzIxN2EyNDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0NPUFlJTkcuTEdQTDttZDU9OWU5YTIwNjkxN2Y4YWYxMTJkYTYzNGNlM2FiNDE3NjQiCisKK0RFUEVORFMgPSAiYXR0ciIKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9hY2wvJHtCUH0uc3JjLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2ggXAorIgorCityZXF1aXJlIGVhLWFjbC5pbmMKKworIyBhdm9pZCBSUEFUSCBoYXJkY29kZSB0byBzdGFnaW5nIGRpcgorZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtTfS9jb25maWcuc3RhdHVzIC1lIHMsXlxcXChoYXJkY29kZV9pbnRvX2xpYnM9XFxcKS4qJCxcXDFcJ25vXCcsCisJJHtTfS9jb25maWcuc3RhdHVzCit9CisKKyMgbGliZGlyIHNob3VsZCBwb2ludCB0byAubGEKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAke0R9JHtsaWJkaXJ9L2xpYmFjbC5sYSAtZSBcCisJICAgIHMsXmxpYmRpcj1cJyR7YmFzZV9saWJkaXJ9XCckLGxpYmRpcj1cJyR7bGliZGlyfVwnLAorfQorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdGFyIC1jZiAtIHRlc3QvIC0tZXhjbHVkZSBuZnMgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZQorCWNwICR7U30vaW5jbHVkZS9idWlsZGRlZnMgJHtTfS9pbmNsdWRlL2J1aWxkbWFjcm9zICR7U30vaW5jbHVkZS9idWlsZHJ1bGVzICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUvCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImFjbCBiYXNoIGNvcmV1dGlscyBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgcGVybC1tb2R1bGUtZ2V0b3B0LXN0ZCBwZXJsLW1vZHVsZS1wb3NpeCBzaGFkb3ciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzY1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaApAQCAtMCwwICsxLDE5OCBAQAorYWNsOiBmaXggdGhlIG9yZGVyIG9mIGV4cGVjdGVkIG91dHB1dCBvZiBnZXRmYWNsCisKK1RoZSByZXN1bHQgb2YgZ2V0ZmFjbCBpcyBzb3J0ZWQgYnkgdXNlciBpZC4KK0luIENlbnRvcyBvciBSSEVMLCBiaW4gdXNlciBpZCBpcyAxIGFuZCBkYWVtb24gdXNlciBpZCBpcyAyLgorQnV0IGluIG91ciBpbWFnZSwgYmluIHVzZXIgaWQgaXMgMiBhbmQgZGFlbW9uIHVzZXIgaWQgaXMgMS4KK1RoZSBwYXRjaCBmaXhlcyB0aGlzIGlzc3VlIHRvIG1ha2UgcHRlc3QgcGFzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0L21pc2MudGVzdCB8ICAgMzggKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L21pc2MudGVzdCBiL3Rlc3QvbWlzYy50ZXN0CitpbmRleCA2ZTk4MDUzLi41M2FlNWIwIDEwMDY0NAorLS0tIGEvdGVzdC9taXNjLnRlc3QKKysrKyBiL3Rlc3QvbWlzYy50ZXN0CitAQCAtNzksOCArNzksOCBAQCBNdWx0aXBsZSB1c2VycworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBmCisgCT4gdXNlcjo6cnctCistCT4gdXNlcjpiaW46cnctCisgCT4gdXNlcjpkYWVtb246ci0tCisrCT4gdXNlcjpiaW46cnctCisgCT4gZ3JvdXA6OnItLQorIAk+IG1hc2s6OnJ3LQorIAk+IG90aGVyOjpyLS0KK0BAIC05NCw4ICs5NCw4IEBAIE11bHRpcGxlIGdyb3VwcworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBmCisgCT4gdXNlcjo6cnctCistCT4gdXNlcjpiaW46cnctCisgCT4gdXNlcjpkYWVtb246ci0tCisrCT4gdXNlcjpiaW46cnctCisgCT4gZ3JvdXA6OnItLQorIAk+IGdyb3VwOmRhZW1vbjpyLS0KKyAJPiBncm91cDp1c2Vyczpydy0KK0BAIC0xMTEsOCArMTExLDggQEAgUmVtb3ZlIG9uZSBncm91cAorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBmCisgCT4gdXNlcjo6cnctCistCT4gdXNlcjpiaW46cnctCisgCT4gdXNlcjpkYWVtb246ci0tCisrCT4gdXNlcjpiaW46cnctCisgCT4gZ3JvdXA6OnItLQorIAk+IGdyb3VwOmRhZW1vbjpyLS0KKyAJPiBtYXNrOjpydy0KK0BAIC0xNDYsOCArMTQ2LDggQEAgRGVmYXVsdCBBQ0wKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAorIAk+IHVzZXI6ZGFlbW9uOnJ3LQorKwk+IHVzZXI6YmluOnJ3eAorIAk+IGdyb3VwOjpyLXgKKyAJPiBtYXNrOjpyd3gKKyAJPiBvdGhlcjo6LS0tCitAQCAtMjM2LDE2ICsyMzYsMTYgQEAgQWRkIHNvbWUgdXNlcnMgYW5kIGdyb3VwcworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkL2QKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyLXgKKysJPiB1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDo6ci14CisgCT4gZ3JvdXA6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOnVzZXJzOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyLXgKKysJPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnIteAorIAk+IGRlZmF1bHQ6bWFzazo6ci14CisgCT4gZGVmYXVsdDpvdGhlcjo6LS0tCitAQCAtMjYyLDE2ICsyNjIsMTYgQEAgU3ltbGluayBpbiBkaXJlY3Rvcnkgd2l0aCBkZWZhdWx0IEFDTD8KKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9sCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTI4NywxNiArMjg3LDE2IEBAIERvZXMgbWFzayBtYW5pcHVsYXRpb24gd29yaz8KKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTMwOCwxNiArMzA4LDE2IEBAIERvZXMgbWFzayBtYW5pcHVsYXRpb24gd29yaz8KKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTMzMyw4ICszMzMsOCBAQCBSZW1vdmUgdGhlIGRlZmF1bHQgQUNMCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gKKyAJPiB1c2VyOmRhZW1vbjpydy0KKysJPiB1c2VyOmJpbjpyd3gKKyAJPiBncm91cDo6ci14CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6Oi0tLQorQEAgLTM3MywxNCArMzczLDE0IEBAIE5vdywgY2htb2Qgc2hvdWxkIGNoYW5nZSB0aGUgZ3JvdXBfb2JqIGVudHJ5CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyd3gKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6cnd4CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6OnIteAorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnJ3eAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDpncm91cDo6cnd4CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjpyLXgKK0BAIC0zOTIsMTQgKzM5MiwxNCBAQCBOb3csIGNobW9kIHNob3VsZCBjaGFuZ2UgdGhlIGdyb3VwX29iaiBlbnRyeQorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyd3gKKysJPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnJ3eAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6ci14CitAQCAtNDExLDE0ICs0MTEsMTQgQEAgTm93LCBjaG1vZCBzaG91bGQgY2hhbmdlIHRoZSBncm91cF9vYmogZW50cnkKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246cnd4CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyd3gKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6OnIteAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjY5NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2NvbmZpZ3VyZS5hYyBpcyBtaXNzaW5nIGZyb20gdGFyYmFsbF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYWNsLTIuMi41Mi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBhY2wtMi4yLjUyL2NvbmZpZ3VyZS5hYworQEAgLTAsMCArMSw1MCBAQAorKworKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyMKKytBQ19JTklUKGluY2x1ZGUvYWNsLmgpCisrQUNfQ09ORklHX0FVWF9ESVIoWy5dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKytBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvY29uZmlnLmgpCisrQUNfUFJFRklYX0RFRkFVTFQoL3VzcikKKysKKytBQ19QUk9HX0xJQlRPT0wKKysKKytBQ19BUkdfRU5BQkxFKHNoYXJlZCwKKytbIC0tZW5hYmxlLXNoYXJlZD1beWVzL25vXSBFbmFibGUgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXV0sLAorKwllbmFibGVfc2hhcmVkPXllcykKKytBQ19TVUJTVChlbmFibGVfc2hhcmVkKQorKworK0FDX0FSR19FTkFCTEUoZ2V0dGV4dCwKKytbIC0tZW5hYmxlLWdldHRleHQ9W3llcy9ub10gRW5hYmxlIGFsdGVybmF0ZSBsYW5ndWFnZSBzdXBwb3J0IFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX2dldHRleHQ9eWVzKQorK0FDX1NVQlNUKGVuYWJsZV9nZXR0ZXh0KQorKworK0FDX0FSR19FTkFCTEUobGliNjQsCisrWyAtLWVuYWJsZS1saWI2ND1beWVzL25vXSBFbmFibGUgbGliNjQgc3VwcG9ydCBbZGVmYXVsdD1ub11dLCwKKysJZW5hYmxlX2xpYjY0PW5vKQorK0FDX1NVQlNUKGVuYWJsZV9saWI2NCkKKysKKytBQ19QQUNLQUdFX0dMT0JBTFMoYWNsKQorK0FDX1BBQ0tBR0VfVVRJTElUSUVTKGFjbCkKKytBQ19QQUNLQUdFX05FRURfQVRUUl9YQVRUUl9ICisrQUNfUEFDS0FHRV9ORUVEX0FUVFJfRVJST1JfSAorK0FDX01VTFRJTElCKCRlbmFibGVfbGliNjQpCisrQUNfUEFDS0FHRV9ORUVEX0dFVFhBVFRSX0xJQkFUVFIKKytBQ19NQU5VQUxfRk9STUFUCisrCisrQUNfRlVOQ19HQ0NfVklTSUJJTElUWQorKworK0FDX09VVFBVVChpbmNsdWRlL2J1aWxkZGVmcykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMxY2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2dwYXNzd2QgLWEgZGFlbW9uIGJpbgorbWFrZSAtQyB0ZXN0IC1rIHRlc3RzIHJvb3QtdGVzdHMgfHNlZCBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gb2skfFBBU1M6IFwxfCcgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIGZhaWxlZHxGQUlMOiBcMXwnCitncGFzc3dkIC1kIGRhZW1vbiBiaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2RiZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2xfMi4yLjUyLmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBhY2wuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hZGQtbWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjE0MTUzMTI0MjZlOWMyMjEyYmQ3ZGM3OTI5YWJkYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNzkwNzRiYjA1ODBjMDZjNGI0MTM3YmU0YzVhOTJhNzAxNTgzMjc3OTY3YWNkYjU1NDYwNDNjNzg3NGUwZDIzIgorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Yzc1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5pcHVsYXRpbmcgZmlsZXN5c3RlbSBleHRlbmRlZCBhdHRyaWJ1dGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvYXR0ci8iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAibmN1cnNlcyB2aXJ0dWFsL2xpYmludGwiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYiR7QlBOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2MvQ09QWUlORzttZDU9MmQwYWExNGIzZmNlNDY5NGU0ZjYxNWUzMDE4NjMzNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXR0ci9hdHRyLmM7ZW5kbGluZT0xNzttZDU9YmUwNDAzMjYxZjA4NDdlNWY0M2VkNWIwOGQxOTU5M2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliYXR0ci9saWJhdHRyLmM7ZW5kbGluZT0xNzttZDU9Nzk3MGY3NzA0OWY4ZmExMTk5ZmZmNjJhN2FiNzI0ZmIiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9hdHRyLyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworcmVxdWlyZSBlYS1hY2wuaW5jCisKKyMgbGliZGlyIHNob3VsZCBwb2ludCB0byAubGEKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAke0R9JHtsaWJkaXJ9L2xpYmF0dHIubGEgLWUgXAorCSAgICBzLF5saWJkaXI9XCcke2Jhc2VfbGliZGlyfVwnJCxsaWJkaXI9XCcke2xpYmRpcn1cJywKK30KKworaW5oZXJpdCBwdGVzdAorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgZXh0IHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUKKwlmb3IgaSBpbiBidWlsZGRlZnMgYnVpbGRtYWNyb3MgYnVpbGRydWxlczsgXAorCSAgZG8gY3AgJHtTfS9pbmNsdWRlLyRpICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUvOyBcCisJZG9uZQorCXNlZCAtZSAnc3w7IEBlY2hvfDsgZWNob3wnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvTWFrZWZpbGUKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiY29yZXV0aWxzIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgcGVybC1tb2R1bGUtZ2V0b3B0LXN0ZCBwZXJsLW1vZHVsZS1wb3NpeCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDBjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgYXR0ci5pbmMKKworIyBjb25maWd1cmUuYWMgd2FzIG1pc3NpbmcgZnJvbSB0aGUgcmVsZWFzZSB0YXJiYWxsLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbgorIyBmdXR1cmUgcmVsZWFzZXMgb2YgYXR0ciwgcmVtb3ZlIHRoaXMgd2hlbiB1cGRhdGluZyB0aGUgcmVjaXBlLgorU1JDX1VSSV9hcHBlbmQgKz0gImZpbGU6Ly9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODRmNThkZWMwMGI2MGYyZGM4ZmQxYzk3MDkyOTFjYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU3NzJmNjUzYWM1YjJlM2NlZWI4OWRmNTBlNDY4ODg5MWUyMWY3MjNjNDYwNjM2NTQ4OTcxNjUyYWYwYTg1OSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MGUxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2VhLWFjbC5pbmMKQEAgLTAsMCArMSw1MiBAQAorIyB0aGlzIGJ1aWxkIHN5c3RlbSBpcyBtb3N0bHkgc2hhcmVkIGJ5IGF0dHIgYW5kIGFjbAorCitTUkNfVVJJICs9ICJmaWxlOi8vcmVsYXRpdmUtbGliZGlyLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQKKworIyB0aGUgcGFja2FnZSBjb21lcyB3aXRoIGEgY3VzdG9tIGNvbmZpZy5oLmluLCBpdCBjYW5ub3QgYmUKKyMgb3ZlcndyaXR0ZW4gYnkgYXV0b2hlYWRlcgorRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCitFWFRSQV9PRUNPTkYgPSAiSU5TVEFMTF9VU0VSPXJvb3QgSU5TVEFMTF9HUk9VUD1yb290IgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLWdldHRleHQ9bm8iCisKK0VYVFJBX09FTUFLRSA9ICJQS0dfTElCX0RJUj0ke2Jhc2VfbGliZGlyfSBQS0dfREVWTElCX0RJUj0ke2xpYmRpcn0iCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBpbnN0YWxsLWxpYiBpbnN0YWxsLWRldiBESVNUX1JPT1Q9IiR7RH0iCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKyMgT25seSBhcHBlbmQgbGRmbGFncyBmb3IgdGFyZ2V0IHJlY2lwZSBhbmQgaWYgVVNFX05MUyBpcyBlbmFibGVkCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAiJHtAWycnLCAnIC1saW50bCAnXVsoZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSA9PSAneWVzJyldfSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiR7QFsnJywgJyAtLWRpc2FibGUtZ2V0dGV4dCAnXVsoZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSA9PSAnbm8nKV19IgorCitmaXhfc3ltbGluayAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iICE9ICJwb3B1bGF0ZV9zeXNyb290IiAtYSAiJHtCQl9DVVJSRU5UVEFTS30iICE9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQlyZXR1cm4KKwlmaQorCisJaWYgdGVzdCAiJHtsaWJkaXJ9IiA9ICIke2Jhc2VfbGliZGlyfSIgOyB0aGVuCisJCXJldHVybgorCWZpCisJIyBSZW1vdmUgYmFkIHN5bWxpbmtzICYgY3JlYXRlIHRoZSBjb3JyZWN0IHN5bWxpbmtzCisJaWYgdGVzdCAtTCAke2xpYmRpcn0vbGliJHtCUE59LnNvIDsgdGhlbgorCQlybSAtcmYgJHtsaWJkaXJ9L2xpYiR7QlBOfS5zbworCQlsbiAtc2YgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LnNvICR7bGliZGlyfS9saWIke0JQTn0uc28KKwlmaQorCWlmIHRlc3QgLUwgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmEgOyB0aGVuCisJCXJtIC1yZiAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uYQorCQlsbiAtc2YgJHtsaWJkaXJ9L2xpYiR7QlBOfS5hICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5hCisJZmkKKwlpZiB0ZXN0IC1MICAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0ubGEgOyB0aGVuCisJCXJtIC1yZiAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0ubGEKKwkJbG4gLXNmICR7bGliZGlyfS9saWIke0JQTn0ubGEgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhCisJZmkKK30KK1NTVEFURVBPU1RJTlNURlVOQ1NfY2xhc3MtbmF0aXZlICs9ICJmaXhfc3ltbGluayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZjYzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXR0cjogTWlzc2luZyBjb25maWd1cmUuYWMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbVXBzdHJlYW0gcmVsZWFzZWQgdGFyYmFsbCBtaXNzaW5nIHRoaXMgZmlsZV0KK1NpZ25lZC1vZmYtYnk6IE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbmZpZ3VyZS5hYworCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjk2NmQwZQorLS0tIC9kZXYvbnVsbAorKysrIGIvY29uZmlndXJlLmFjCitAQCAtMCwwICsxLDQ4IEBACisrIyBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrIworK0FDX0lOSVQoaW5jbHVkZS9hdHRyaWJ1dGVzLmgpCisrQUNfQ09ORklHX0FVWF9ESVIoWy5dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKytBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvY29uZmlnLmgpCisrQUNfUFJFRklYX0RFRkFVTFQoL3VzcikKKysKKytBQ19QUk9HX0xJQlRPT0wKKysKKytBQ19BUkdfRU5BQkxFKHNoYXJlZCwKKytbIC0tZW5hYmxlLXNoYXJlZD1beWVzL25vXSBFbmFibGUgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXV0sLAorKwllbmFibGVfc2hhcmVkPXllcykKKytBQ19TVUJTVChlbmFibGVfc2hhcmVkKQorKworK0FDX0FSR19FTkFCTEUoZ2V0dGV4dCwKKytbIC0tZW5hYmxlLWdldHRleHQ9W3llcy9ub10gRW5hYmxlIGFsdGVybmF0ZSBsYW5ndWFnZSBzdXBwb3J0IFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX2dldHRleHQ9eWVzKQorK0FDX1NVQlNUKGVuYWJsZV9nZXR0ZXh0KQorKworK0FDX0FSR19FTkFCTEUobGliNjQsCisrWyAtLWVuYWJsZS1saWI2ND1beWVzL25vXSBFbmFibGUgbGliNjQgc3VwcG9ydCBbZGVmYXVsdD1ub11dLCwKKysJZW5hYmxlX2xpYjY0PW5vKQorK0FDX1NVQlNUKGVuYWJsZV9saWI2NCkKKysKKytBQ19QQUNLQUdFX0dMT0JBTFMoYXR0cikKKytBQ19QQUNLQUdFX1VUSUxJVElFUyhhdHRyKQorK0FDX01BTlVBTF9GT1JNQVQKKytBQ19NVUxUSUxJQigkZW5hYmxlX2xpYjY0KQorKworK0FDX0NfQ09OU1QKKytBQ19UWVBFX01PREVfVAorK0FDX0ZVTkNfQUxMT0NBCisrCisrQUNfT1VUUFVUKGluY2x1ZGUvYnVpbGRkZWZzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3JlbGF0aXZlLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJiZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VzZSByZWxhdGl2ZSBwYXRoIGluIHN5bWJvbGljIGxpbmtzLCBvciBpdCBmYWlscyBpbiBzdGFnaW5nCitzZWQgZXhwcmVzc2lvbiBmcm9tIHVkZXYKKworNy8yOS8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtdSBpbmNsdWRlLm9yaWcvYnVpbGRtYWNyb3MgaW5jbHVkZS9idWlsZG1hY3JvcworLS0tIGluY2x1ZGUub3JpZy9idWlsZG1hY3JvcwkyMDEwLTA3LTI5IDE3OjM5OjQ4LjAwMDAwMDAwMCArMDgwMAorKysrIGluY2x1ZGUvYnVpbGRtYWNyb3MJMjAxMC0wNy0yOSAxODoyMDozNC4wMDAwMDAwMDAgKzA4MDAKK0BAIC04OCw5ICs4OCwxMSBAQAorIAkuLi8kKElOU1RBTEwpIC1tIDc1NSAtZCAkKFBLR19MSUJfRElSKTsgXAorIAkuLi8kKElOU1RBTEwpIC1UIHNvX2Jhc2UgJChMSUJOQU1FKS5sYWkgJChQS0dfTElCX0RJUik7IFwKKyAJaWYgdGVzdCAieCQoUEtHX0RFVkxJQl9ESVIpIiAhPSAieCQoUEtHX0xJQl9ESVIpIiA7IHRoZW4gXAorLQkuLi8kKElOU1RBTEwpIC1TICQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmE7IFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmxhICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkubGE7IFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLnNvICQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuc287IFwKKysJcmVsX2xpYl9wcmVmaXg9JCQoZWNobyAkKFBLR19MSUJfRElSKSB8IHNlZCAncyxcKF4vXHxcKVteL11bXi9dKiwuLixnJyk7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9saWJfcHJlZml4JChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5hICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuYTsgXAorKwkuLi8kKElOU1RBTEwpIC1TICQkcmVsX2xpYl9wcmVmaXgkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmxhICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkubGE7IFwKKysJcmVsX2RldmxpYl9wcmVmaXg9JCQoZWNobyAkKFBLR19ERVZMSUJfRElSKSB8IHNlZCAncyxcKF4vXHxcKVteL11bXi9dKiwuLixnJyk7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9kZXZsaWJfcHJlZml4JChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5zbyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLnNvOyBcCisgCWZpCisgZWxzZQorIElOU1RBTExfTFRMSUJfREVWID0gJChJTlNUQUxMX0xUTElCX1NUQVRJQykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNjg2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdCAtayB0ZXN0cyByb290LXRlc3RzIHxzZWQgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTA3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA4MjlhODllN2Y1Nzg1MjM5YTkzODRlM2FmZDQ2YzkwMGY5ZDc2YWRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMTk6NTU6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGJ1aWxkIHdpdGggbXVzbAorCitzaWduYWwuaCBhbHJlYWR5IGluY2x1ZGVzIGJpdHMvc2lnY29udGV4dC5oCitEb2N1bWVudGF0aW9uIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgaWYgeW91IG5lZWQgdGhlIGRlZmluaXRpb25zIGluCitzaWdjb250ZXh0LmgsIHlvdSBhcmUgc3VwcG9zZWQgdG8gaW5jbHVkZSBzaWduYWwuaCBhbmQgbm90IHNpZ2NvbnRleHQuaC4KKworYSBnb29kIGZpeCBzaG91bGQgYmUgdG8gcmVtb3ZlIGdsaWJjCitzcGVjaWZpYyB1bmRlcnN0YW5kaW5nLCBpbiB0aG9zZSBpZmRlZidzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgb3NfZGVwLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9vc19kZXAuYyBiL29zX2RlcC5jCitpbmRleCAwOGM1MDFkLi41Y2I3ODczIDEwMDY0NAorLS0tIGEvb3NfZGVwLmMKKysrKyBiL29zX2RlcC5jCitAQCAtNDEsNyArNDEsNyBAQAorICMgICBlbHNlIC8qIF9fR0xJQkNfXyA8IDIgKi8KKyAgICAgICAvKiBsaWJjNSBkb2Vzbid0IGhhdmUgPHNpZ2NvbnRleHQuaD46IGdvIGRpcmVjdGx5IHdpdGggdGhlIGtlcm5lbCAgICovCisgICAgICAgLyogb25lLiAgQ2hlY2sgTElOVVhfVkVSU0lPTl9DT0RFIHRvIHNlZSB3aGljaCB3ZSBzaG91bGQgcmVmZXJlbmNlLiAqLworLSMgICAgIGluY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisrIyAgICAgaW5jbHVkZSA8c2lnbmFsLmg+CisgIyAgIGVuZGlmIC8qIF9fR0xJQkNfXyA8IDIgKi8KKyAjIGVuZGlmCisgI2VuZGlmIC8qIExJTlVYICYmICFQT1dFUlBDICovCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlMzU4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQSBnYXJiYWdlIGNvbGxlY3RvciBmb3IgQyBhbmQgQysrIgorCitERVNDUklQVElPTiA9ICJUaGUgQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIGJlXAorIHVzZWQgYXMgYSBnYXJiYWdlIGNvbGxlY3RpbmcgcmVwbGFjZW1lbnQgZm9yIEMgbWFsbG9jIG9yIEMrKyBuZXcuIEl0IGFsbG93c1wKKyB5b3UgdG8gYWxsb2NhdGUgbWVtb3J5IGJhc2ljYWxseSBhcyB5b3Ugbm9ybWFsbHkgd291bGQsIHdpdGhvdXQgZXhwbGljaXRseVwKKyBkZWFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4gVGhlIGNvbGxlY3RvciBhdXRvbWF0aWNhbGx5XAorIHJlY3ljbGVzIG1lbW9yeSB3aGVuIGl0IGRldGVybWluZXMgdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlIG90aGVyd2lzZVwKKyBhY2Nlc3NlZC5cCisgIFRoZSBjb2xsZWN0b3IgaXMgYWxzbyB1c2VkIGJ5IGEgbnVtYmVyIG9mIHByb2dyYW1taW5nIGxhbmd1YWdlXAorIGltcGxlbWVudGF0aW9ucyB0aGF0IGVpdGhlciB1c2UgQyBhcyBpbnRlcm1lZGlhdGUgY29kZSwgd2FudCB0byBmYWNpbGl0YXRlXAorIGVhc2llciBpbnRlcm9wZXJhdGlvbiB3aXRoIEMgbGlicmFyaWVzLCBvciBqdXN0IHByZWZlciB0aGUgc2ltcGxlIGNvbGxlY3RvclwKKyBpbnRlcmZhY2UuXAorICBBbHRlcm5hdGl2ZWx5LCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgbWF5IGJlIHVzZWQgYXMgYSBsZWFrIGRldGVjdG9yIGZvciBDXAorIG9yIEMrKyBwcm9ncmFtcywgdGhvdWdoIHRoYXQgaXMgbm90IGl0cyBwcmltYXJ5IGdvYWwuXAorICBFbXBpcmljYWxseSwgdGhpcyBjb2xsZWN0b3Igd29ya3Mgd2l0aCBtb3N0IHVubW9kaWZpZWQgQyBwcm9ncmFtcywgc2ltcGx5XAorIGJ5IHJlcGxhY2luZyBtYWxsb2Mgd2l0aCBHQ19tYWxsb2MgY2FsbHMsIHJlcGxhY2luZyByZWFsbG9jIHdpdGggR0NfcmVhbGxvY1wKKyBjYWxscywgYW5kIHJlbW92aW5nIGZyZWUgY2FsbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmhib2VobS5pbmZvL2djLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5RVUlDSzttZDU9NTVmNTA4OGY5MGE5ODJmZWQ3YWY5YTQ4OTcwNDdlZjciCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy9nY19zb3VyY2UvZ2MtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTJjMDVmZDI4MTFkOTg5MzQxZDhjNmQ4MWY2NmFmODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMzMjBhZDdjNDU0NjBlNGE0MGUwM2Y1YWE0YzY4OTM3ODNmMjFhMTY0MTZjMzI4MmI5OTRmOTMzMzEyYWZhMiIKK0ZJTEVTXyR7UE59LWRvYyA9ICIvdXNyL3NoYXJlIgorCitSRUFMX1BWID0gIiR7QFtkLmdldFZhcignUFYnLDEpWzotMV0sIGQuZ2V0VmFyKCdQVicsMSldWyhkLmdldFZhcignUFYnLDEpWy0xXSkuaXNkaWdpdCgpXX0iCitTID0gIiR7V09SS0RJUn0vZ2MtJHtSRUFMX1BWfSIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIGJ5IGRlZmF1bHQgdXNlIGV4dGVybmFsIGxpYmF0b21pYy1vcHMKK1BBQ0tBR0VDT05GSUcgPz89ICJsaWJhdG9taWMtb3BzIgorUEFDS0FHRUNPTkZJR1tsaWJhdG9taWMtb3BzXSA9ICItLXdpdGgtbGliYXRvbWljLW9wcz15ZXMsLS13aXRoLWxpYmF0b21pYy1vcHM9bm8sbGliYXRvbWljLW9wcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9hZGQtb3B0aW9uLWRldi1kc3AucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorQWRkIGNvbmZpZyBvcHRpb24gLS13aXRoLWRldi1kc3AuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBaaGFuZyBYaWFvIDx4aWFvLnpoYW5nQHdpbmRyaXZlci5jb20+CistLS0KKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA2LDYgKzEwNiwxNiBAQCBBQ19BUkdfV0lUSChweXRob24sWyAgLS13aXRoLXB5dGhvbltbPUFSCisgICBmaQorICAgXSkKKyAKKytBQ19BUkdfV0lUSChkZXYtZHNwLFsgIC0td2l0aC1kZXYtZHNwICAgICAgICAgIGVuYWJsZXMgZGV2L2RzcCBmb3IgZW50cm9weSBwcm9kdWNpbmcuIGF1dG8gZm9yIGF1dG8tZGV0ZWN0aW5nIGRldi9kZXAgb24gaG9zdC4gW1tkZWZhdWx0PW5vXV1dLFsKKysgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoW0hBVkVfREVWX0RTUF0sIDEpCisrICBlbHNlCisrICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IGF1dG87ICB0aGVuCisrICAgICAgYWNfZGV0ZWN0X2Rldl9kc3A9eWVzCisrICAgIGZpCisrICBmaQorKyAgXSxbYWNfZGV0ZWN0X2Rldl9kc3A9bm9dKQorKworICMgQ2hlY2sgZm9yIGV4cGVydCBtb2RlCisgaWYgdGVzdCAiJGFjX2VuYWJsZV9leHBlcnRfbW9kZSIgPSB5ZXM7IHRoZW4KKyAgIEJFRV9FWFBFUlRfTU9ERQorQEAgLTQ2NCw3ICs0NzQsNyBAQCBsaW51eCopCisgICAgICAgYWNfY3ZfaGF2ZV9kZXZfZHNwPW5vCisgICAgIGZpCisgICAgIF0pCistICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZXZfZHNwIiA9IHllczsgdGhlbgorKyAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGV2X2RzcCIgPSB5ZXMgJiYgdGVzdCAiJGFjX2RldGVjdF9kZXZfZHNwIiA9IHllczsgdGhlbgorICAgICBBQ19ERUZJTkUoW0hBVkVfREVWX0RTUF0sIDEpCisgICBmaQorICAgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYmVlY3J5cHQtZW5hYmxlLXB0ZXN0LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NTEzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2JlZWNyeXB0OiBlbmFibGUgcHRlc3Qgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitBZGQgaW5zdGFsbC1wdGVzdCBydWxlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICB8IDMgKysrCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBiN2U3ODY5Li41MDc2ZjU5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNzMsMyArNzMsNiBAQCBESVNUQ0xFQU5GSUxFUyA9IG1wb3B0LnMgYmxvd2Zpc2hvcHQucyBzaGExb3B0LnMKKyAKKyBiZW5jaDoKKyAJKGNkIHRlc3RzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGJlbmNoKQorKworK2luc3RhbGwtcHRlc3Q6CisrCShjZCB0ZXN0cyAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVja19QUk9HUkFNUykKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAxNjA0ZTVlLi5kOGRiOGQ4IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTAxLDMgKzEwMSw2IEBAIGJlbmNoOiBiZW5jaG1lIGJlbmNocnNhIGJlbmNoaGYgYmVuY2hiYworIAkuL2JlbmNoYmMgQUVTIDEyOAorIAkuL2JlbmNoYmMgQmxvd2Zpc2ggMTI4CisgCS4vYmVuY2hiYyBCbG93ZmlzaCAxMjgKKysKKytjaGVja19QUk9HUkFNUzoKKysJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChjaGVja19QUk9HUkFNUykKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjFmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBhcmUgdW5hYmxlIHRvIHJ1biBjb2RlIGF0IGNvbmZpZ3VyZSB0aW1lIGluIGEgY3Jvc3MgZW52aXJvbmVtbnQsIGJ1dCBhcyB3ZQorY29udHJvbCB0aGUgYnVpbGQgd2UgY2FuIGJlIGZhaXJseSBjZXJ0YWluIHRoaXMgZGVwZW5kZW5jeSBpcyBtZXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0pMIDA1LzA3LzEwCitJbmRleDogYmVlY3J5cHQtNC4yLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAxNzoxMjoyNS4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAxNzoxMjozMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0yOTIsMzIgKzI5Miw2IEBACisgIyBQcmVkZWZpbmVzIGFuZCBjaGVja3MgZm9yIEMrKyBBUEkgc3VwcG9ydAorIEFIX1RFTVBMQVRFKFtDUFBHTFVFXSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGUgQysrIGNvZGVdKQorIAorLWlmIHRlc3QgIiRhY193aXRoX2NwbHVzcGx1cyIgPSB5ZXM7IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIElCTSdzIElDVSBsaWJyYXJ5IHZlcnNpb24gPj0gMi44XSkKKy0gIEFDX0xBTkdfUFVTSChDKQorLSAgQUNfUlVOX0lGRUxTRShbCistICAgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmljb2RlL3V2ZXJzaW9uLmg+XV0sW1sKKy0gICAgICAjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCAyCistICAgICAgZXhpdCgxKTsKKy0gICAgICAjZWxpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA9PSAyCistICAgICAgIyBpZiBVX0lDVV9WRVJTSU9OX01JTk9SX05VTSA8IDgKKy0gICAgICBleGl0KDEpOworLSAgICAgICMgZWxzZQorLSAgICAgIGV4aXQoMCk7CistICAgICAgIyBlbmRpZgorLSAgICAgICNlbHNlCistICAgICAgZXhpdCgwKTsKKy0gICAgICAjZW5kaWYKKy0gICAgXV0pXSxbCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICAgIF0sWworLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIEFDX01TR19XQVJOKFtkaXNhYmxpbmcgY3BsdXNwbHVzXSkKKy0gICAgYWNfd2l0aF9jcGx1c3BsdXM9bm8KKy0gICAgXSkKKy0gIEFDX0xBTkdfUE9QKEMpCistZmkKKy0KKyBBTV9DT05ESVRJT05BTChbV0lUSF9DUExVU1BMVVNdLFt0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzXSkKKyAKKyBpZiB0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzIDsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDRlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtZm9yLWdjYy00LjcucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCitnY2MtNC43IHNlZW1zIHRvIGJlIHN0cmljdGVyIGFib3V0IHNvbWUgdGhpbmdzLCBzbyBmb2xsb3cKK3RoZSBzdWdnZXN0aW9uIGZyb20gdGhlIGVycm9yL25vdGUgaW5mb3JtYXRpb24uCisKKyAgICAuLi8uLi94ODZfNjQtbGludXgtbGlidG9vbCAtLXRhZz1DWFggICAtLW1vZGU9Y29tcGlsZSBnKysgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uLy4uIAorICAgIHg4Nl82NC1saW51eC1saWJ0b29sOiBjb21waWxlOiAgZysrIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLi8uLiAtSS4uLy4uL2luY2x1ZGUgLWlzeXN0CisgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvSGFzaHRhYmxlLmg6NDI6MCwKKyAgICAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9Qcm9wZXJ0aWVzLmg6MzYsCisgICAgICAgICAgICAgICAgICAgICBmcm9tIFByb3BlcnRpZXMuY3h4OjI1OgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnYm9vbCBiZWVjcnlwdDo6dXRpCisgICAgUHJvcGVydGllcy5jeHg6MjI4OjE6ICAgcmVxdWlyZWQgZnJvbSBoZXJlCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBlcnJvcjogJ2NvbnRhaW5zQWxsJyB3YXMgbm90IGRlY2wKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IGRlY2xhcmF0aW9ucyBpbiBkZXBlbmRlbnQgYgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogdXNlICd0aGlzLT5jb250YWluc0FsbCcgaW5zCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdib29sIGJlZWNyeXB0Ojp1dGkKKyAgICBQcm9wZXJ0aWVzLmN4eDoyMjg6MTogICByZXF1aXJlZCBmcm9tIGhlcmUKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IGVycm9yOiAnY29udGFpbnNBbGwnIHdhcyBub3QgZGVjbAorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogZGVjbGFyYXRpb25zIGluIGRlcGVuZGVudCBiCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiB1c2UgJ3RoaXMtPmNvbnRhaW5zQWxsJyBpbnMKKyAgICAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0LmgKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0LmgKK0BAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBiZWVjcnlwdCB7CisgCQkJCQlpZiAoYy0+c2l6ZSgpICE9IHNpemUoKSkKKyAJCQkJCQlyZXR1cm4gZmFsc2U7CisgCistCQkJCQlyZXR1cm4gY29udGFpbnNBbGwoKmMpOworKwkJCQkJcmV0dXJuIHRoaXMtPmNvbnRhaW5zQWxsKCpjKTsKKyAJCQkJfQorIAkJCQlyZXR1cm4gZmFsc2U7CisgCQkJfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjBjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtc2VjdXJpdHkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRml4IHZpc2liaWxpdHkgb2YgdmFyaW91cyBDKysgZnVuY3Rpb25zLCBpbnNwaXJlZCBieSBhIHNpbWlsYXIgcGF0Y2ggaW4gdGhlIEZpbmsKK3Byb2plY3Q6IAoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2ZpbmstY29tbWl0c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQvbXNnNzU3NDIuaHRtbAorCitKTCAwNS8wNy8xMCAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiZWVjcnlwdC00LjIuMS5vcmlnL2luY2x1ZGUvYmVlY3J5cHQvYysrL2JlZXlvbmQvQmVlQ2VydGlmaWNhdGUuaAkyMDEwLTExLTI2IDE3OjIyOjU3LjAwMDAwMDAwMCArMDgwMAorKysrIGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL2JlZXlvbmQvQmVlQ2VydGlmaWNhdGUuaAkyMDEwLTExLTI2IDE3OjIzOjAxLjAwMDAwMDAwMCArMDgwMAorQEAgLTE0NywxMyArMTQ3LDEzIEBACisgCQkJbXV0YWJsZSBieXRlYXJyYXkqIGVuYzsKKyAKKyAJCQlCZWVDZXJ0aWZpY2F0ZSgpOworLQkJCUJlZUNlcnRpZmljYXRlKElucHV0U3RyZWFtJiBpbikgdGhyb3cgKElPRXhjZXB0aW9uKTsKKyAKKyAJCQl2b2lkIGVuY29kZVRCUyhEYXRhT3V0cHV0U3RyZWFtJiBvdXQpIGNvbnN0IHRocm93IChJT0V4Y2VwdGlvbik7CisgCisgCQkJYnl0ZWFycmF5KiBlbmNvZGVUQlMoKSBjb25zdCB0aHJvdyAoQ2VydGlmaWNhdGVFbmNvZGluZ0V4Y2VwdGlvbik7CisgCisgCQlwdWJsaWM6CisrCQkJQmVlQ2VydGlmaWNhdGUoSW5wdXRTdHJlYW0mIGluKSB0aHJvdyAoSU9FeGNlcHRpb24pOworIAkJCUJlZUNlcnRpZmljYXRlKGNvbnN0IEJlZUNlcnRpZmljYXRlJikgdGhyb3cgKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uKTsKKyAJCQl2aXJ0dWFsIH5CZWVDZXJ0aWZpY2F0ZSgpOworIAorSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3NlY3VyaXR5L1NlY3VyaXR5LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiZWVjcnlwdC00LjIuMS5vcmlnL2luY2x1ZGUvYmVlY3J5cHQvYysrL3NlY3VyaXR5L1NlY3VyaXR5LmgJMjAxMC0xMS0yNiAxNzoyMDo1NS4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCTIwMTAtMTEtMjYgMTc6MjE6MzYuMDAwMDAwMDAwICswODAwCitAQCAtNjEsNyArNjEsNiBAQAorIAkJCWZyaWVuZCBjbGFzcyBTZWN1cmVSYW5kb207CisgCQkJZnJpZW5kIGNsYXNzIFNpZ25hdHVyZTsKKyAKKy0JCXByaXZhdGU6CisgCQkJc3RydWN0IHNwaQorIAkJCXsKKyAJCQkJT2JqZWN0KiBjc3BpOworQEAgLTc2LDYgKzc1LDcgQEAKKyAJCQlzdGF0aWMgc3BpKiBnZXRTcGkoY29uc3QgU3RyaW5nJiBhbGdvLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFByb3ZpZGVyJikgdGhyb3cgKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbik7CisgCQkJc3RhdGljIHNwaSogZ2V0Rmlyc3RTcGkoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAKKysJCXByaXZhdGU6CisgCQkJc3RhdGljIGNvbnN0IFN0cmluZyYgZ2V0S2V5U3RvcmVEZWZhdWx0KCk7CisgCisgCQkJc3RhdGljIGJvb2wgX2luaXQ7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlMjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0cworZm9yIGkgaW4gYGxzYDsgZG8gLi8kaTsgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIlBBU1M6ICRpIjsgXAorICAgIGVsc2UgZWNobyAiRkFJTDogJGkiOyBmaTsgZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYyNmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIKQEAgLTAsMCArMSw0OCBAQAorIyBCZWVjcnlwdCBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKK1NVTU1BUlkgPSAiQSBnZW5lcmFsLXB1cnBvc2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2JlZWNyeXB0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9iZWVjcnlwdC9iZWVjcnlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXNlY3VyaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1mb3ItZ2NjLTQuNy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vYmVlY3J5cHQtZW5hYmxlLXB0ZXN0LXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NDQxYzAxNDE3MDgyM2YyZGZmOTdlMzNkZjU1YWYxZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyODZmMWY1NjA4MGQxYTZiMWQwMjQwMDNhNWZhMjE1OGY0ZmY4MmNhZTBjNjgyOWQzYzQ3NmE0YjU4OThjNTVkIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ODk0MzcwYWZkNWRmZTdkMDJiOGQxNDMxOWU3MjlhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZGNmM2M4MjU2NTllODI1Mzk2NDVkYTQxYTc5MDg1ODkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9iZWVjcnlwdC9iZWVjcnlwdC5oO2VuZGxpbmU9MjA7bWQ1PTQ3YTkzZWVmNTM5YWFjMjM3ZWVmODYyOTdhNGQ3MWMxIgorCitQUiA9ICJyMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CithY3BhdGhzPSIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBiZWVjcnlwdC9nbnUuaAorfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXB5dGhvbiAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS1vcGVubXAgLS13aXRoLWphdmE9bm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2NwbHVzcGx1c10gPSAiLS13aXRoLWNwbHVzcGx1cywtLXdpdGhvdXQtY3BsdXNwbHVzLGljdSIKKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke2xpYmRpcn0vKi5zby4qICR7bGliZGlyfS8ke0JQTn0vKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59Lyouc28gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyouYSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworCWNwIC1yICR7Qn0vdGVzdHMvLmxpYnMvdGVzdCogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY0NmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS41OC4wLmJiCkBAIC0wLDAgKzEsMTggQEAKK2luY2x1ZGUgYm9vc3QtJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiUG9ydGFibGUgQm9vc3QuSmFtIGJ1aWxkIHRvb2wgZm9yIGJvb3N0IgorU0VDVElPTiA9ICJkZXZlbCIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSArPSAiZmlsZTovL2JqYW0tbmF0aXZlLWJ1aWxkLWJqYW0uZGVidWcucGF0Y2giCisKK2RvX2NvbXBpbGUoKSB7CisgICAgLi9ib290c3RyYXAuc2ggLS13aXRoLXRvb2xzZXQ9Z2NjCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworICAgICMgaW5zdGFsbCB1bnN0cmlwcGVkIHZlcnNpb24gZm9yIGJqYW0KKyAgICBpbnN0YWxsIC1jIC1tIDc1NSBiamFtLmRlYnVnICR7RH0ke2JpbmRpcn0vYmphbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZDA5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBUaGUgQm9vc3Qgd2ViIHNpdGUgcHJvdmlkZXMgZnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlCisjIEMrKyBzb3VyY2UgbGlicmFyaWVzLiBUaGUgZW1waGFzaXMgaXMgb24gbGlicmFyaWVzIHdoaWNoCisjIHdvcmsgd2VsbCB3aXRoIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeS4gVGhlIGxpYnJhcmllcyBhcmUKKyMgaW50ZW5kZWQgdG8gYmUgd2lkZWx5IHVzZWZ1bCwgYW5kIGFyZSBpbiByZWd1bGFyIHVzZSBieQorIyB0aG91c2FuZHMgb2YgcHJvZ3JhbW1lcnMgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgYXBwbGljYXRpb25zLgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvIgorTElDRU5TRSA9ICJCU0wtMS4wICYgTUlUICYgUHl0aG9uLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VfMV8wLnR4dDttZDU9ZTQyMjRjY2FlY2IxNGQ5NDJjNzFkMzFiZWYyMGQ3OGMiCisKK0JPT1NUX1ZFUiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLDEpLnNwbGl0KCIuIikpfSIKK0JPT1NUX01BSiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLDEpLnNwbGl0KCIuIilbMDoyXSl9IgorQk9PU1RfUCA9ICJib29zdF8ke0JPT1NUX1ZFUn0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2Jvb3N0LyR7Qk9PU1RfUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImI4ODM5NjUwZTYxZTljMWMwYTg5ZjM3MWRkNDc1NTQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkZmMyMDRmYzMzZWM3OWM5OWI5YTc0OTQ0YzNlNTRiZDc4YmU0ZjdmMTVlMjYwYzBlMjcwMGEzNmRjN2QzZTUiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JPT1NUX1B9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyODhlODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKQEAgLTAsMCArMSwxOTIgQEAKK1NVTU1BUlkgPSAiRnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlIEMrKyBzb3VyY2UgbGlicmFyaWVzIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJiamFtLW5hdGl2ZSB6bGliIGJ6aXAyIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQk9PU1RfTElCUyA9ICJcCisJYXRvbWljIFwKKwljaHJvbm8gXAorCWRhdGVfdGltZSBcCisJZmlsZXN5c3RlbSBcCisJZ3JhcGggXAorCWlvc3RyZWFtcyBcCisJbG9nIFwKKwlwcm9ncmFtX29wdGlvbnMgXAorCXJhbmRvbSBcCisJcmVnZXggXAorCXNlcmlhbGl6YXRpb24gXAorCXNpZ25hbHMgXAorCXN5c3RlbSBcCisJdGVzdCBcCisJdGhyZWFkIFwKKwkiCisKKyMgb3B0aW9uYWwgYm9vc3QtcHl0aG9uIGxpYnJhcnkKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLCxweXRob24gcHl0aG9uMyIKK0JPT1NUX0xJQlMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24gcHl0aG9uMycsICcnLCBkKX0iCitpbmhlcml0IHB5dGhvbi1kaXIKK1BZVEhPTl9ST09UID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vJHtwcmVmaXh9IgorCisjIE1ha2UgYSBwYWNrYWdlIGZvciBlYWNoIGxpYnJhcnksIHBsdXMgLWRldgorUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7Qk9PU1RfUEFDS0FHRVN9IgorcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBwYWNrYWdlcyA9IFtdCisgICAgZXh0cmFzID0gW10KKyAgICBmb3IgbGliIGluIGQuZ2V0VmFyKCdCT09TVF9MSUJTJywgVHJ1ZSkuc3BsaXQoICk6CisgICAgICAgICMgQkpBTSBkb2VzIG5vdCBrbm93ICctLXdpdGgtcHl0aG9uMycgKG9ubHkgLS13aXRoLXB5dGhvbikKKyAgICAgICAgaWYgbGliICE9ICJweXRob24zIjoKKyAgICAgICAgICAgIGV4dHJhcy5hcHBlbmQoIi0td2l0aC0lcyIgJSBsaWIpCisgICAgICAgIHBrZyA9ICJib29zdC0lcyIgJSBsaWIucmVwbGFjZSgiXyIsICItIikKKyAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgaWYgbGliID09ICJweXRob24iOgorICAgICAgICAgICAgIyBzcGVjaWFsOiBweXRob24qLnNvIG1hdGNoZXMgcHl0aG9uMy5zbyAhIQorICAgICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJGSUxFU18lcyIgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYmJvb3N0XyVzLnNvLioiICUgbGliKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJGSUxFU18lcyIgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYmJvb3N0XyVzKi5zby4qIiAlIGxpYikKKyAgICBkLnNldFZhcigiQk9PU1RfUEFDS0FHRVMiLCAiICIuam9pbihwYWNrYWdlcykpCisgICAgZC5zZXRWYXIoIkJKQU1fRVhUUkEiLCAiICIuam9pbihleHRyYXMpKQorfQorCisjIE92ZXJyaWRlIHRoZSBjb250ZW50cyBvZiBzcGVjaWZpYyBwYWNrYWdlcworRklMRVNfYm9vc3Qtc2VyaWFsaXphdGlvbiA9ICIke2xpYmRpcn0vbGliYm9vc3Rfc2VyaWFsaXphdGlvbiouc28uKiBcCisJJHtsaWJkaXJ9L2xpYmJvb3N0X3dzZXJpYWxpemF0aW9uKi5zby4qIgorRklMRVNfYm9vc3QtdGVzdCA9ICIke2xpYmRpcn0vbGliYm9vc3RfcHJnX2V4ZWNfbW9uaXRvciouc28uKiBcCisJJHtsaWJkaXJ9L2xpYmJvb3N0X3VuaXRfdGVzdF9mcmFtZXdvcmsqLnNvLioiCisKKyMgLWRldiBsYXN0IHRvIHBpY2sgdXAgdGhlIHJlbWFpbmluZyBzdHVmZgorUEFDS0FHRVMgKz0gIiR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vbGliYm9vc3RfKi5zbyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliYm9vc3RfKi5hIgorCisjICJib29zdCIgaXMgYSBtZXRhcGFja2FnZSB3aGljaCBwdWxscyBpbiBhbGwgYm9vc3QgbGlicmFicmllcworUEFDS0FHRVMgKz0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7Qk9PU1RfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKKyMgdG8gYXZvaWQgR05VX0hBU0ggUUEgZXJyb3JzIGFkZGVkIExERkxBR1MgdG8gQVJDSDsgYSBsaXR0bGUgYml0IGRpcnR5IGJ1dCBhdCBsZWFzdCBpdCB3b3JrcworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKKyMgT2ggeWlwcGVlLCBhIG5ldyBidWlsZCBzeXN0ZW0sIGl0J3Mgc29vbyBjb29vb2wgSSBjb3VsZCBlYXQgbXkgb3duCisjIGZvb3QuICBpbmxpbmluZz1vbiBsZXRzIHRoZSBjb21waWxlciBjaG9vc2UsIEkgdGhpbmsuICBBdCBsZWFzdCB0aGlzCisjIHN0dWZmIGlzIGRvY3VtZW50ZWQuLi4KKyMgTk9URTogaWYgeW91IGxlYXZlIDxkZWJ1Zy1zeW1ib2xzPm9uIHRoZW4gaW4gYSBkZWJ1ZyBidWlsZCB0aGUgYnVpbGQgc3lzCisjIG9iamNvcHkgd2lsbCBiZSBpbnZva2VkLCBhbmQgdGhhdCB3b24ndCB3b3JrLiAgQnVpbGRpbmcgZGVidWcgYXBwYXJlbnRseQorIyByZXF1aXJlcyBoYWNraW5nIGdjYy10b29scy5qYW0KKyMKKyMgU29tZXRpbWVzIEkgd2FrZSB1cCBzY3JlYW1pbmcuICBGYW1vdXMgZmlndXJlcyBhcmUgZ2F0aGVyZWQgaW4gdGhlIG5pZ2h0bWFyZSwKKyMgU3RldmUgQm91cm5lLCBMYXJyeSBXYWxsLCB0aGUgd2hvbGUgb2YgdGhlIEFOU0kgQyBjb21taXR0ZWUuICBUaGV5J3JlIGp1c3QKKyMgc3RhbmRpbmcgdGhlcmUsIHdhaXRpbmcsIGJ1dCB0aGUgdHJ1ZWx5IHRlcnJpZnlpbmcgdGhpbmcgaXMgd2hhdCB0aGV5IGNhcnJ5CisjIGluIHRoZWlyIGhhbmRzLiAgQXQgZmlyc3Qgc2lnaHQgZWFjaCBzZWVtcyB0byBiZWFyIHRoZSBzYW1lIHRoaW5nLCBidXQgaXQgaXMKKyMgbm90IHNvIGZvciB0aGUgZm9ybXMgaW4gdGhlaXIgZ3Jhc3AgYXJlIGV2ZXIgc28gc2xpZ2h0bHkgZGlmZmVyZW50IG9uZSBmcm9tCisjIHRoZSBvdGhlci4gIEVhY2ggaXMgdHdpc3RlZCBpbiBzb21lIGdyb3Rlc3F1ZSB3YXkgZnJvbSB0aGUgb3RoZXIgdG8gbWFrZSBlYWNoCisjIGFuIHVuc3BlYWthYmxlIHBlcnZlcnNpb24gaW1wb3NzaWJsZSB0byBwZXJjZWl2ZSB3aXRob3V0IHRoZSBvbnNldCBvZiBtYWRuZXNzLgorIyBUcnVlIGluc2FuaXR5IGF3YWl0cyBhbnlvbmUgd2hvIHBlcmNlaXZlcyBhbGwgb2YgdGhlc2UgaG9ycm9ycyB0b2dldGhlci4KKyMKKyMgUXVvdGF0aW9uIG1hcmtzLCB0aGVyZSBtaWdodCBiZSBhbiBlYXNpZXIgd2F5IHRvIGRvIHRoaXMsIGJ1dCBJIGNhbid0IGZpbmQKKyMgaXQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSB1c2VyLmhwcCBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCByZWNlaXZlIGEKKyMgcHJlLXByb2Nlc3NvciBtYWNybyBkZWZpbmVkIGFzIHRoZSBhcHByb3ByaWF0ZSBzdHJpbmcgLSBjb21wbGV0ZSB3aXRoICIncworIyBhcm91bmQgaXQuICAoPD4gaXMgYSBwb3NzaWJpbGl0eSBoZXJlIGJ1dCB0aGUgZGFuZ2VyIHRvIHRoYXQgaXMgdGhhdCB0aGUKKyMgZmFpbHVyZSBjYXNlIGludGVycHJldHMgdGhlIDwgYW5kID4gYXMgc2hlbGwgcmVkaXJlY3Rpb25zLCBjcmVhdGluZworIyByYW5kb20gZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlLikKKyMKKyNiamFtOiAnLURCT09TVF9QTEFURk9STV9DT05GSUc9XCJjb25maWdcIicKKyNkb19jb21waWxlOiAnLXNHQ0M9Li4uICciJy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPVwiY29uZmlnXCInIgorU1FEID0gJyInCitFUUQgPSAnXCInCisjYm9vc3QuYmI6ICAgIi4uLiAgJy1zR0NDPS4uLiAnJHtTUUR9Jy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPSR7RVFEfWNvbmZpZyR7RVFEfScke1NRRH0gLi4uIgorQkpBTV9DT05GID0gIiR7U1FEfSctREJPT1NUX1BMQVRGT1JNX0NPTkZJRz0ke0VRRH1ib29zdC9jb25maWcvcGxhdGZvcm0vJHtUQVJHRVRfT1N9LmhwcCR7RVFEfScke1NRRH0iCisKK0JKQU1fVE9PTFMgICA9ICItLWlnbm9yZS1zaXRlLWNvbmZpZyBcCisJCSctc1RPT0xTPWdjYycgXAorCQknLXNHQ0M9JHtDQ30gJyR7QkpBTV9DT05GfSBcCisJCSctc0dYWD0ke0NYWH0gJyR7QkpBTV9DT05GfSBcCisJCSctc0dDQ19JTkNMVURFX0RJUkVDVE9SWT0ke1NUQUdJTkdfSU5DRElSfScgXAorCQknLXNHQ0NfU1RETElCX0RJUkVDVE9SWT0ke1NUQUdJTkdfTElCRElSfScgXAorCQknLXNCVUlMRD1yZWxlYXNlIDxvcHRpbWl6YXRpb24+c3BhY2UgPHRocmVhZGluZz5tdWx0aSA8aW5saW5pbmc+b24gPGRlYnVnLXN5bWJvbHM+b2ZmJyBcCisJCSctc1BZVEhPTl9ST09UPSR7UFlUSE9OX1JPT1R9JyBcCisJCSctLWxheW91dD1zeXN0ZW0nIFwKKwkJIgorCisjIHVzZSBQQVJBTExFTF9NQUtFIHRvIHNwZWVkIHVwIHRoZSBidWlsZCwgYnV0IGxpbWl0IGl0IGJ5IC1qIDY0LCBncmVhdGVyIHBhcmFsZWxpc20gY2F1c2VzIGJqYW0gdG8gc2VnZmF1bHQgb3IgdG8gaWdub3JlIC1qCisjIGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC83NjM0CitkZWYgZ2V0X2Jvb3N0X3BhcmFsbGVsX21ha2UoYmIsIGQpOgorICAgIHBtID0gZC5nZXRWYXIoJ1BBUkFMTEVMX01BS0UnLCBUcnVlKQorICAgIGlmIHBtOgorICAgICAgICAjIGxvb2sgZm9yICctaicgYW5kIHRocm93IG90aGVyIG9wdGlvbnMgKGUuZy4gJy1sJykgYXdheQorICAgICAgICAjIGJlY2F1c2UgdGhleSBtaWdodCBoYXZlIGRpZmZlcmVudCBtZWFuaW5nIGluIGJqYW0KKyAgICAgICAgcG0gPSBwbS5zcGxpdCgpCisgICAgICAgIHdoaWxlIHBtOgorICAgICAgICAgICAgdiA9IE5vbmUKKyAgICAgICAgICAgIG9wdCA9IHBtLnBvcCgwKQorICAgICAgICAgICAgaWYgb3B0ID09ICctaic6CisgICAgICAgICAgICAgICAgdiA9IHBtLnBvcCgwKQorICAgICAgICAgICAgZWxpZiBvcHQuc3RhcnRzd2l0aCgnLWonKToKKyAgICAgICAgICAgICAgICB2ID0gb3B0WzI6XS5zdHJpcCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHYgPSBOb25lCisKKyAgICAgICAgICAgIGlmIHY6CisgICAgICAgICAgICAgICAgdiA9IG1pbig2NCwgaW50KHYpKQorICAgICAgICAgICAgICAgIHJldHVybiAnLWonICsgc3RyKHYpCisKKyAgICByZXR1cm4gIiIKKworQk9PU1RfUEFSQUxMRUxfTUFLRSA9ICIke0BnZXRfYm9vc3RfcGFyYWxsZWxfbWFrZShiYiwgZCl9IgorQkpBTV9PUFRTICAgID0gJyR7Qk9PU1RfUEFSQUxMRUxfTUFLRX0gXAorCQkke0JKQU1fVE9PTFN9IFwKKwkJLXNCT09TVF9CVUlMRF9VU0VSX0NPTkZJRz0ke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtIFwKKwkJLS1idWlsZGRpcj0ke1N9LyR7VEFSR0VUX1NZU30gXAorCQktLWRpc2FibGUtaWN1IFwKKwkJJHtCSkFNX0VYVFJBfScKKworIyBOYXRpdmUgY29tcGlsYXRpb24gb2YgYnppcDIgaXNuJ3Qgd29ya2luZworQkpBTV9PUFRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAnIC1zTk9fQlpJUDI9MScKKworZG9fYm9vc3Rjb25maWcoKSB7CisJY3AgLWYgYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LmhwcCBib29zdC9jb25maWcvcGxhdGZvcm0vbGludXgtZ251ZWFiaS5ocHAKKworCSMgRDIxOTQ6Rml4aW5nIHRoZSBmYWlsdXJlIG9mICJlcnJvcjogZHVwbGljYXRlIGluaXRpYWxpemF0aW9uIG9mIGdjYyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyIgZHVyaW5nIGNvbXBpbGF0aW9uLgorCXNlZCAtaSAiL151c2luZyBnY2MgOiA0LjMuMS9kIiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJc2VkIC1pICIvXnVzaW5nIHB5dGhvbiA6ICR7UFlUSE9OX0JBU0VWRVJTSU9OfSIvZCAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAndXNpbmcgZ2NjIDogNC4zLjEgOiAke0NYWH0gOiA8Y2ZsYWdzPiIke0NGTEFHU30iIDxjeHhmbGFncz4iJHtDWFhGTEFHU30iIDxsaW5rZmxhZ3M+IiR7TERGTEFHU30iIDsnID4+ICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICJ1c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0gOiA6ICR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSA7IiA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAidXNpbmcgcHl0aG9uIDogMy40IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24zLjRtIDsiID4+ICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKworCUNDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIke0JVSUxEX0NGTEFHU30iIC4vYm9vdHN0cmFwLnNoIC0td2l0aC1iamFtPWJqYW0gLS13aXRoLXRvb2xzZXQ9Z2NjIC0td2l0aC1weXRob24tcm9vdD0ke1BZVEhPTl9ST09UfQorCXNlZCAtaSAnL151c2luZyBweXRob24vZCcgcHJvamVjdC1jb25maWcuamFtCit9CisKK2RvX2Jvb3N0Y29uZmlnW2RpcnNdID0gIiR7U30iCithZGR0YXNrIGRvX2Jvb3N0Y29uZmlnIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworZG9fY29tcGlsZSgpIHsKKwlzZXQgLWV4CisJYmphbSAke0JKQU1fT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IFwKKwkJLS1leGVjLXByZWZpeD0ke2V4ZWNfcHJlZml4fSBcCisJCS0tbGliZGlyPSR7bGliZGlyfSBcCisJCS0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJc2V0IC1leAorCWJqYW0gJHtCSkFNX09QVFN9IFwKKwkJLS1saWJkaXI9JHtEfSR7bGliZGlyfSBcCisJCS0taW5jbHVkZWRpcj0ke0R9JHtpbmNsdWRlZGlyfSBcCisJCWluc3RhbGwKKwlmb3IgbGliIGluICR7Qk9PU1RfTElCU307IGRvCisJCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0uYSBdOyB0aGVuCisJCQlsbiAtcyBsaWJib29zdF8ke2xpYn0uYSAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS1tdC5hCisJCWZpCisJCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0uc28gXTsgdGhlbgorCQkJbG4gLXMgbGliYm9vc3RfJHtsaWJ9LnNvICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LW10LnNvCisJCWZpCisJZG9uZQorCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYXJtLWludHJpbnNpY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4NWM2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworOC8xNy8yMDEwIC0gcmViYXNlZCB0byAxLjQ0IGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAoraW5kZXggYjYzNTliNS4uNzhiMWNjMiAxMDA2NDQKKy0tLSBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwCisrKysgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAorQEAgLTMzLDE3ICszMyw0NiBAQCBwdWJsaWM6CisgCisgICAgIGxvbmcgb3BlcmF0b3IrKygpCisgICAgIHsKKysjaWZkZWYgX19BUk1fQVJDSF83QV9fCisrICAgICAgIGludCB2MSwgdG1wOworKyAgICAgICBhc20gdm9sYXRpbGUgKCIxOiAgICAgICAgICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAibGRyZXggICAlMCwgJTEgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImFkZCAgICAgJTAgLCUwLCAjMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJzdHJleCAgICUyLCAlMCwgJTEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiY21wICAgICAlMiwgIzAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImJuZSAgICAgMWIgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHYxKSwgIitRIih2YWx1ZV8pLCAiPSZyIih0bXApCisrICAgICAgICAgICAgICAgICAgICApOworKyNlbHNlCisgICAgICAgICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2goICZ2YWx1ZV8sIDEgKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgICBsb25nIG9wZXJhdG9yLS0oKQorICAgICB7CisrI2lmZGVmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICBpbnQgdjEsIHRtcDsKKysgICAgICAgYXNtIHZvbGF0aWxlICgiMTogICAgICAgICAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImxkcmV4ICAgJTAsICUxICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJzdWIgICAgICUwICwlMCwgIzEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3RyZXggICAlMiwgJTAsICUxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImNtcCAgICAgJTIsICMwICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJibmUgICAgIDFiICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiICh2MSksICIrUSIodmFsdWVfKSwgIj0mciIodG1wKQorKyAgICAgICAgICAgICAgICAgICAgKTsKKysgICAgICAgcmV0dXJuIHZhbHVlXzsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCAmdmFsdWVfLCAtMSApOworKyNlbmRpZgorICAgICB9CisgCisgICAgIG9wZXJhdG9yIGxvbmcoKSBjb25zdAorICAgICB7CisrI2lmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICAgcmV0dXJuIHZhbHVlXzsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYWRkKCAmdmFsdWVfLCAwICk7CisrI2VuZGlmCisgICAgIH0KKyAKKyBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWQ1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjU4LjAuYmIKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlIGJvb3N0LSR7UFZ9LmluYworaW5jbHVkZSBib29zdC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9hcm0taW50cmluc2ljcy5wYXRjaCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YjRjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDEtbWlwczEtZml4LWFkZGVkLWdjYy5qYW0td2FzLXBhc3NpbmctdGhlLW9wdGlvbnMtbTMyLS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDgxN2FlZDBkNzU1YmY4YzBiYTRlZjZhNzdkNDE1MzhlNTBiNTcxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBjbGF5bW9yZSA8Y2FybG9zbWYucHRAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNCBBcHIgMjAxNSAwMjoyODo0NyArMDEwMAorU3ViamVjdDogW1BBVENIIDEvMl0gbWlwczEgZml4IGFkZGVkIGdjYy5qYW0gd2FzIHBhc3NpbmcgdGhlIG9wdGlvbnMgLW0zMiBhbmQKKyAtbTY0IHRvIG1pcHMgY3Jvc3MtY29tcGlsZXJzLCB3aGVuIHRob3NlIGRvIG5vdCB1c2UKKyBzdWNoIG9wdGlvbnMgVGhpcyBtb2RpZmljYXRpb24gc29sdmVzIGl0IGJ5IGFkZGluZyBtaXBzCisgYXMgYW4gZXhjZXB0aW9uCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBNLiBGZXJyZWlyYSBjYXJsb3NtZi5wdEBnbWFpbC5jb20KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHRvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gYi90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQoraW5kZXggZGIwNDUzNC4uZWZmOTVhZSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCisrKysgYi90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorQEAgLTQ1MSw3ICs0NTEsNyBAQCBydWxlIHNldHVwLWFkZHJlc3MtbW9kZWwgKCB0YXJnZXRzICogOiBzb3VyY2VzICogOiBwcm9wZXJ0aWVzICogKQorICAgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICAgIGxvY2FsIGFyY2ggPSBbIGZlYXR1cmUuZ2V0LXZhbHVlcyBhcmNoaXRlY3R1cmUgOiAkKHByb3BlcnRpZXMpIF0gOworLSAgICAgICAgICAgIGlmICQoYXJjaCkgIT0gYXJtCisrICAgICAgICAgICAgaWYgJChhcmNoKSAhPSBhcm0gJiYgJChhcmNoKSAhPSBtaXBzMQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgJChtb2RlbCkgPSAzMgorICAgICAgICAgICAgICAgICB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAyLURvbi10LXBhc3MtbTMyLW02NC13aGVyZS1pdC1zLW5vdC1zdXBwb3J0ZWQucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBmODI1NjM0YTU2YjExOWRmYTlkNzEyMTE5YTY2Mjc5Y2M3NjM1OTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0o9QzM9QjZyZz0yMEtyYXVzZT89IDxqb2VyZy5rcmF1c2VAZW1iZWRkZWQucm9ja3M+CitEYXRlOiBTYXQsIDIgTWF5IDIwMTUgMTQ6MjQ6MDIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIERvbid0IHBhc3MgLW0zMi8tbTY0IHdoZXJlIGl0J3Mgbm90IHN1cHBvcnRlZC4KKworT25seSBQb3dlclBDLCBTUEFSQywgYW5kIHg4NiBkbyBzdXBwb3J0IHRoZSAtbTMyIGFuZCAtbTY0IGNvbXBpbGVyIG9wdGlvbnMgWzFdLgorCitSYXRoZXIgdGhlbiBleGNsdWRpbmcgYWxsIGFyY2hpdGVjdHVyZXMgbm90IHN1cHBvcnRpbmcgdGhlc2Ugb3B0aW9ucyBhcyBpdCBpcworZG9uZSBpbiBjb21taXQgYzA2MzQzNDFkOWVlMmMwMmQzYTU1YzkxZGFmYjk4OGFmYzA2NmM0OSBbMl0sIGluY2x1ZGUgYWxsCithcmNoaXRlY3R1cmVzIHRoYXQgZG8gc3VwcG9ydCB0aGVtLgorCitUaGlzIHdpbGwgZml4IGJ1aWxkaW5nIEJvb3N0IGZvciB0aGUgU3VwZXJIIGFyY2hpdGVjdHVyZSB3aXRoIEJ1aWxkcm9vdCBbM10uCisKK1sxXSBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09wdGlvbi1TdW1tYXJ5Lmh0bWwKK1syXSBodHRwczovL2dpdGh1Yi5jb20vYm9vc3RvcmcvYnVpbGQvY29tbWl0L2MwNjM0MzQxZDllZTJjMDJkM2E1NWM5MWRhZmI5ODhhZmMwNjZjNDkKK1szXSBodHRwOi8vYXV0b2J1aWxkLmJ1aWxkcm9vdC5uZXQvcmVzdWx0cy9jY2QvY2NkNWM4Mzk2MzAzMmJhNDliMTYyN2IxZGZmMzllMzRhOTQ4Njk0My9idWlsZC1lbmQubG9nCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyB0b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK2luZGV4IGVmZjk1YWUuLjJmNmFmOTMgMTAwNjQ0CistLS0gYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorKysrIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK0BAIC00NTEsNyArNDUxLDcgQEAgcnVsZSBzZXR1cC1hZGRyZXNzLW1vZGVsICggdGFyZ2V0cyAqIDogc291cmNlcyAqIDogcHJvcGVydGllcyAqICkKKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBsb2NhbCBhcmNoID0gWyBmZWF0dXJlLmdldC12YWx1ZXMgYXJjaGl0ZWN0dXJlIDogJChwcm9wZXJ0aWVzKSBdIDsKKy0gICAgICAgICAgICBpZiAkKGFyY2gpICE9IGFybSAmJiAkKGFyY2gpICE9IG1pcHMxCisrICAgICAgICAgICAgaWYgJChhcmNoKSA9IHBvd2VyIHx8ICQoYXJjaCkgPSBzcGFyYyB8fCAkKGFyY2gpID0geDg2CisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBpZiAkKG1vZGVsKSA9IDMyCisgICAgICAgICAgICAgICAgIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjhiN2VhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDYxOWFkYTMxNGFiMjZjMGM5Y2JmZTU3MDJjZDljMGNhYThmNjQxNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMyBBdWcgMjAxNSAxNzoxMjozMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBiamFtLW5hdGl2ZTogYnVpbGQgYmphbS5kZWJ1ZworCitiamFtIGlzIHN0cmlwcGVkIGJ5IGRlZmF1bHQsIHRoaXMgY2F1c2VzIFFBIHdhcm5pbmcgd2hpbGUgc3RyaXBwaW5nIGl0Citmcm9tIGRvX3BvcHVsYXRlX3N5c3Jvb3QoKToKKworICBXQVJOSU5HOiBGaWxlICcuLi4vdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2JqYW0nIFwKKyAgICBmcm9tIGJqYW0tbmF0aXZlIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCBcCisgICAgdGhpcyB3aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEKKworVGhlIEpBTSBzY3JpcHRzIGFsbG93IHRvIGJ1aWxkIHVuc3RyaXBwZWQgdmVyc2lvbiB3aXRoICctLWRlYnVnJy4gSnVzdAorYnVpbGQgYW5kIGluc3RhbGwgdGhlIGJqYW0uZGVidWcgdG8gc3RvcCBiamFtIGZyb20gYmVpbmcgc3RyaXBwZWQgaW4KK2NvbXBpbGUgc3RlcC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGJvb3RzdHJhcC5zaCAgICAgICAgICAgICAgICAgICAgfCAxICsKKyB0b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib290c3RyYXAuc2ggYi9ib290c3RyYXAuc2gKK2luZGV4IDk4Y2Y4OGIuLjU0NjkwYWEgMTAwNzU1CistLS0gYS9ib290c3RyYXAuc2gKKysrKyBiL2Jvb3RzdHJhcC5zaAorQEAgLTIyOCw2ICsyMjgsNyBAQCBpZiB0ZXN0ICJ4JEJKQU0iID0geDsgdGhlbgorICAgZWNobyAidG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8kYXJjaC9iMiIKKyAgIGNwICIkQkpBTSIgLgorICAgY3AgIiRteV9kaXIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8kYXJjaC9iamFtIiAuCisrICBjcCAiJG15X2Rpci90b29scy9idWlsZC9zcmMvZW5naW5lLyR7YXJjaH0uZGVidWcvYmphbSIgYmphbS5kZWJ1ZworIAorIGZpCisgCitkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaCBiL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2gKK2luZGV4IDZkYmM3MDYuLmM2OWZkYzcgMTAwNzU1CistLS0gYS90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCisrKysgYi90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCitAQCAtMzEyLDUgKzMxMiw1IEBAIGlmIHRlc3QgLXggIi4vYm9vdHN0cmFwL2phbTAiIDsgdGhlbgorICAgICBpZiB0ZXN0ICIke0JKQU1fVVBEQVRFfSIgIT0gInVwZGF0ZSIgOyB0aGVuCisgICAgICAgICBlY2hvX3J1biAuL2Jvb3RzdHJhcC9qYW0wIC1mIGJ1aWxkLmphbSAtLXRvb2xzZXQ9JEJPT1NUX0pBTV9UT09MU0VUICItLXRvb2xzZXQtcm9vdD0kQk9PU1RfSkFNX1RPT0xTRVRfUk9PVCIgIiRAIiBjbGVhbgorICAgICBmaQorLSAgICBlY2hvX3J1biAuL2Jvb3RzdHJhcC9qYW0wIC1mIGJ1aWxkLmphbSAtLXRvb2xzZXQ9JEJPT1NUX0pBTV9UT09MU0VUICItLXRvb2xzZXQtcm9vdD0kQk9PU1RfSkFNX1RPT0xTRVRfUk9PVCIgIiRAIgorKyAgICBlY2hvX3J1biAuL2Jvb3RzdHJhcC9qYW0wIC1mIGJ1aWxkLmphbSAtLXRvb2xzZXQ9JEJPT1NUX0pBTV9UT09MU0VUICItLXRvb2xzZXQtcm9vdD0kQk9PU1RfSkFNX1RPT0xTRVRfUk9PVCIgIiRAIiAtLWRlYnVnCisgZmkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjRiMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorY2EtY2VydGlmaWNhdGVzIGlzIGEgcGFja2FnZSBmcm9tIERlYmlhbiwgYnV0IHNvbWUgaG9zdCBkaXN0cm9zIHN1Y2ggYXMgRmVkb3JhCitoYXZlIGEgbGVhbmVyIHJ1bi1wYXJ0cyBwcm92aWRlZCBieSBjcm9uIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCAtLXZlcmJvc2Ugb3IgdGhlCisgLS0gc2VwYXJhdG9yIGJldHdlZW4gYXJndW1lbnRzIGFuZCBwYXRocy4KKworVGhpcyBzb2x2ZXMgZXJyb3JzIHN1Y2ggYXMKKworfCBSdW5uaW5nIGhvb2tzIGluIFsuLi5dL3Jvb3Rmcy9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kLi4uCit8IFsuLi5dL3Vzci9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IGxpbmUgMTk0OiBOb3Q6IGNvbW1hbmQgbm90IGZvdW5kCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKy0tLQorIHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyB8IDQgKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtMTkxLDkgKzE5MSw3IEBAIGlmIFsgLWQgIiRIT09LU0RJUiIgXQorIHRoZW4KKyAKKyAgIGVjaG8gIlJ1bm5pbmcgaG9va3MgaW4gJEhPT0tTRElSLi4uIgorLSAgVkVSQk9TRV9BUkc9CistICBbICIkdmVyYm9zZSIgPSAwIF0gfHwgVkVSQk9TRV9BUkc9Ii0tdmVyYm9zZSIKKy0gIGV2YWwgcnVuLXBhcnRzICIkVkVSQk9TRV9BUkciIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vaworKyAgZXZhbCBydW4tcGFydHMgLS10ZXN0IC0tICIkSE9PS1NESVIiIHwgd2hpbGUgcmVhZCBob29rCisgICBkbworICAgICAoIGNhdCAiJEFEREVEIgorICAgICAgIGNhdCAiJFJFTU9WRUQiICkgfCAiJGhvb2siIHx8IGVjaG8gIkU6ICRob29rIGV4aXRlZCB3aXRoIGNvZGUgJD8uIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gMTExZTkwNWZlOTMxZGExYTM4MDBhY2NmYzY3NWNjMDFjOGVlMDgwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFVsZiBTYW11ZWxzc29uIDx1bGZAZW1hZ2lpLmNvbT4KK0RhdGU6IFR1ZSwgMjggRmViIDIwMTIgMDY6NDI6NTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdXBkYXRlLWNhLWNlcnRpZmljYXRlczogcmVtb3ZlIGMgcmVoYXNoCisKK1VwZGF0ZWQgZWFybGllciBwYXRjaCB0byBhcHBseSBjbGVhbiBvbiAyMDEyLTAyLTEyCitTaWduZWQtb2ZmLWJ5OiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCAgIDIwICsrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworaW5kZXggNTM3NTk1MC4uYzU2N2UzZCAxMDA3NTUKKy0tLSBhL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGIvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtMTMyLDE2ICsxMzIsMTYgQEAgcm0gLWYgIiRDRVJUQlVORExFIgorIEFEREVEX0NOVD0kKHdjIC1sIDwgIiRBRERFRCIpCisgUkVNT1ZFRF9DTlQ9JCh3YyAtbCA8ICIkUkVNT1ZFRCIpCisKKy1pZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQorLXRoZW4KKy0gICMgb25seSBydW4gaWYgc2V0IG9mIGZpbGVzIGhhcyBjaGFuZ2VkCistICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KKy0gIHRoZW4KKy0gICAgY19yZWhhc2ggLiA+IC9kZXYvbnVsbAorLSAgZWxzZQorLSAgICBjX3JlaGFzaCAuCistICBmaQorLWZpCisrI2lmIFsgIiRBRERFRF9DTlQiIC1ndCAwIF0gfHwgWyAiJFJFTU9WRURfQ05UIiAtZ3QgMCBdCisrI3RoZW4KKysjICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAorKyMgIGlmIFsgIiR2ZXJib3NlIiA9IDAgXQorKyMgIHRoZW4KKysjICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKKysjICBlbHNlCisrIyAgICBjX3JlaGFzaCAuCisrIyAgZmkKKysjZmkKKworIGNobW9kIDA2NDQgIiRURU1QQlVORExFIgorIG12IC1mICIkVEVNUEJVTkRMRSIgIiRDRVJUQlVORExFIgorLS0KKzEuNy40LjEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyYjQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDcyNGNiMTUzY2EwZjYwN2ZiMzhiM2E4ZGIzZWJiMjc0MjYwMWNkODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorRGF0ZTogVHVlLCAxOSBNYXIgMjAxMyAxNzoxNDozMyArMDEwMAorU3ViamVjdDogW1BBVENIIDIvMl0gdXBkYXRlLWNhLWNlcnRpZmljYXRlczogdXNlICRTWVNST09UCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCAgIDE0ICsrKysrKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtMjQsMTIgKzI0LDEyIEBACisgdmVyYm9zZT0wCisgZnJlc2g9MAorIGRlZmF1bHQ9MAorLUNFUlRTQ09ORj0vZXRjL2NhLWNlcnRpZmljYXRlcy5jb25mCistQ0VSVFNESVI9L3Vzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKy1MT0NBTENFUlRTRElSPS91c3IvbG9jYWwvc2hhcmUvY2EtY2VydGlmaWNhdGVzCisrQ0VSVFNDT05GPSRTWVNST09UL2V0Yy9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorK0NFUlRTRElSPSRTWVNST09UL3Vzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKytMT0NBTENFUlRTRElSPSRTWVNST09UL3Vzci9sb2NhbC9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKyBDRVJUQlVORExFPWNhLWNlcnRpZmljYXRlcy5jcnQKKy1FVENDRVJUU0RJUj0vZXRjL3NzbC9jZXJ0cworLUhPT0tTRElSPS9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisrRVRDQ0VSVFNESVI9JFNZU1JPT1QvZXRjL3NzbC9jZXJ0cworK0hPT0tTRElSPSRTWVNST09UL2V0Yy9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQKKyAKKyB3aGlsZSBbICQjIC1ndCAwIF07CisgZG8KK0BAIC05Miw5ICs5Miw5IEBAIGFkZCgpIHsKKyAgIFBFTT0iJEVUQ0NFUlRTRElSLyQoYmFzZW5hbWUgIiRDRVJUIiAuY3J0IHwgc2VkIC1lICdzLyAvXy9nJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9bKCldLz0vZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLC9fL2cnKS5wZW0iCistICBpZiAhIHRlc3QgLWUgIiRQRU0iIHx8IFsgIiQocmVhZGxpbmsgIiRQRU0iKSIgIT0gIiRDRVJUIiBdCisrICBpZiAhIHRlc3QgLWUgIiRQRU0iIHx8IFsgIiQocmVhZGxpbmsgIiRQRU0iKSIgIT0gIiR7Q0VSVCMjJFNZU1JPT1R9IiBdCisgICB0aGVuCistICAgIGxuIC1zZiAiJENFUlQiICIkUEVNIgorKyAgICBsbiAtc2YgIiR7Q0VSVCMjJFNZU1JPT1R9IiAiJFBFTSIKKyAgICAgZWNobyAiKyRQRU0iID4+ICIkQURERUQiCisgICBmaQorICAgIyBBZGQgdHJhaWxpbmcgbmV3bGluZSB0byBjZXJ0aWZpY2F0ZSwgaWYgaXQgaXMgbWlzc2luZyAoIzYzNTU3MCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9kZWZhdWx0LXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhiMDc5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBmaW5kIFNZU1JPT1QgcmVsYXRpdmUgdG8gaXRzIG93biBsb2NhdGlvbgorCitUaGlzIG1ha2VzIHRoZSBzY3JpcHQgcmVsb2NhdGFibGUuCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTY2LDYgKzY2LDM5IEBAIGRvCisgICBzaGlmdAorIGRvbmUKKyAKKytpZiBbIC16ICIkU1lTUk9PVCIgXTsgdGhlbgorKyAgbG9jYWxfd2hpY2ggKCkgeworKyAgICBpZiBbICQjIC1sdCAxIF07IHRoZW4KKysgICAgICByZXR1cm4gMQorKyAgICBmaQorKworKyAgICAoCisrICAgICAgSUZTPToKKysgICAgICBmb3IgZW50cnkgaW4gJFBBVEg7IGRvCisrICAgICAgICBpZiBbIC14ICIkZW50cnkvJDEiIF07IHRoZW4KKysgICAgICAgICAgZWNobyAiJGVudHJ5LyQxIgorKyAgICAgICAgICBleGl0IDAKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGV4aXQgMQorKyAgICApCisrICB9CisrCisrICBjYXNlICIkMCIgaW4KKysgICAgKi8qKQorKyAgICAgIHNiaW5kaXI9JChjZCAkezAlLyp9ICYmIHB3ZCkKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHNiaW5kaXI9JChjZCAkKGRpcm5hbWUgJChsb2NhbF93aGljaCAkMCkpICYmIHB3ZCkKKysgICAgICA7OworKyAgZXNhYworKyAgcHJlZml4PSR7c2JpbmRpciUvKn0KKysgIFNZU1JPT1Q9JHtwcmVmaXglLyp9CisrICBpZiBbICEgLWQgIiRTWVNST09UL3Vzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMiIF07IHRoZW4KKysgICAgU1lTUk9PVD0KKysgIGZpCisrZmkKKysKKyBpZiBbICEgLXMgIiRDRVJUU0NPTkYiIF0KKyB0aGVuCisgICBmcmVzaD0xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExM2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvc2JpbmRpci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworTGV0IHVzIGFsdGVyIHRoZSBpbnN0YWxsIGRlc3RpbmF0aW9uIG9mIHRoZSBzY3JpcHQgdmlhIFNCSU5ESVIKKworLS0tIGNhLWNlcnRpZmljYXRlcy0yMDEzMDExOS5vcmlnL3NiaW4vTWFrZWZpbGUKKysrKyBjYS1jZXJ0aWZpY2F0ZXMtMjAxMzAxMTkvc2Jpbi9NYWtlZmlsZQorQEAgLTMsOSArMywxMiBAQAorICMKKyAjCisKKytTQklORElSID0gL3Vzci9zYmluCisrCisgYWxsOgorCisgY2xlYW46CisKKyBpbnN0YWxsOgorLQlpbnN0YWxsIC1tNzU1IHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgJChERVNURElSKS91c3Ivc2Jpbi8KKysJaW5zdGFsbCAtZCAkKERFU1RESVIpJChTQklORElSKQorKwlpbnN0YWxsIC1tNzU1IHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgJChERVNURElSKSQoU0JJTkRJUikvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTZlM2RmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYgpAQCAtMCwwICsxLDgwIEBACitTVU1NQVJZID0gIkNvbW1vbiBDQSBjZXJ0aWZpY2F0ZXMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgUEVNIGZpbGVzIG9mIENBIGNlcnRpZmljYXRlcyB0byBhbGxvdyBcCitTU0wtYmFzZWQgYXBwbGljYXRpb25zIHRvIGNoZWNrIGZvciB0aGUgYXV0aGVudGljaXR5IG9mIFNTTCBjb25uZWN0aW9ucy4gXAorVGhpcyBkZXJpdmVkIGZyb20gRGViaWFuJ3MgQ0EgQ2VydGlmaWNhdGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3NpZC9jYS1jZXJ0aWZpY2F0ZXMiCitTRUNUSU9OID0gIm1pc2MiCitMSUNFTlNFID0gIkdQTC0yLjArICYgTVBMLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTQ4ZDJiYWY5Nzk4Njk5OWU3NzZiNDNjOGRkOWUwYzVhIgorCisjIFRoaXMgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gcnVuIHRoZSBwb3N0aW5zdCBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lCitERVBFTkRTID0gImNhLWNlcnRpZmljYXRlcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKKyMgdGFnOiBkZWJpYW4vMjAxNTA0MjYgKyAyCitTUkNSRVYgPSAiZDQ3OTBkMjgzMmFhYWM5MTUyZjQ1MGUwNjY2MTUxMTA2NzU5MjIyNyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvY29sbGFiLW1haW50L2NhLWNlcnRpZmljYXRlcy5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zYmluZGlyLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2gKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAnQ0VSVFNESVI9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMnIFwKKyAgICAnU0JJTkRJUj0ke3NiaW5kaXJ9JyBcCisiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICBvZV9ydW5tYWtlIGNsZWFuCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cyBcCisgICAgICAgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQKKyAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKworICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44CisgICAgaW5zdGFsbCAtbSAwNjQ0IHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcy44ICR7RH0ke21hbmRpcn0vbWFuOC8KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICB7CisgICAgICAgIGVjaG8gIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAjIHdpbGwgYmUgaWdub3JlZCIKKyAgICAgICAgZWNobyAiIyBMaW5lcyBzdGFydGluZyB3aXRoICEgd2lsbCByZW1vdmUgY2VydGlmaWNhdGUgb24gbmV4dCB1cGRhdGUiCisgICAgICAgIGVjaG8gIiMiCisgICAgICAgIGZpbmQgJHtEfSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzIC10eXBlIGYgLW5hbWUgJyouY3J0JyB8IFwKKyAgICAgICAgICAgIHNlZCAncyxeJHtEfSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzLywsJworICAgIH0gPiR7RH0ke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisgICAgc2VkIC1pIC1lICdzLC9ldGMvLCR7c3lzY29uZmRpcn0vLCcgXAorICAgICAgICAgICAtZSAncywvdXNyL3NoYXJlLywke2RhdGFkaXJ9LywnIFwKKyAgICAgICAgICAgLWUgJ3MsL3Vzci9sb2NhbCwke3ByZWZpeH0vbG9jYWwsJyBcCisgICAgICAgICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgXAorICAgICAgICAke0R9JHttYW5kaXJ9L21hbjgvdXBkYXRlLWNhLWNlcnRpZmljYXRlcy44Cit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgU1lTUk9PVD0iJEQiIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK30KKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy5jb25mIgorCisjIFBvc3RpbnN0cyBkb24ndCBzZWVtIHRvIGJlIHJ1biBmb3IgbmF0aXZlc2RrIHBhY2thZ2VzIHdoZW4gcG9wdWxhdGluZyBTREtzLgorQ09ORkZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworICAgIFNZU1JPT1Q9IiR7RH0ke1NES1BBVEhOQVRJVkV9IiB1cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgU1lTUk9PVD0iJHtEfSR7YmFzZV9wcmVmaXh9IiAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NzlkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIENvbnNvbGVLaXQtMC40LjYub3JpZy9jb25maWd1cmUuYWMKKysrKyBDb25zb2xlS2l0LTAuNC42L2NvbmZpZ3VyZS5hYworQEAgLTU2LDEwICs1NiwyNCBAQCBQS0dfQ0hFQ0tfTU9EVUxFUyhDT05TT0xFX0tJVCwKKyAgIGd0aHJlYWQtMi4wID49ICRHTElCX1JFUVVJUkVEX1ZFUlNJT04KKyApCisKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhQT0xLSVQsCistICBwb2xraXQtZ29iamVjdC0xID49ICRQT0xLSVRfUkVRVUlSRURfVkVSU0lPTiwKKy0gIGhhdmVfcG9sa2l0PXllcywKKy0gIGhhdmVfcG9sa2l0PW5vKQorK0FDX0FSR19XSVRIKFtwb2xraXRdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcG9sa2l0XSwKKysgICAgW3N1cHBvcnQgUG9saWN5S2l0IEA8OkBkZWZhdWx0PWNoZWNrQDo+QF0pXSwKKysgIFtdLAorKyAgW3dpdGhfcG9sa2l0PWNoZWNrXSkKKysKKytBU19JRihbdGVzdCAieCR3aXRoX3BvbGtpdCIgIT0geG5vXSwKKysgIFtQS0dfQ0hFQ0tfTU9EVUxFUyhQT0xLSVQsCisrICAgICBwb2xraXQtZ29iamVjdC0xID49ICRQT0xLSVRfUkVRVUlSRURfVkVSU0lPTiwKKysgICAgIGhhdmVfcG9sa2l0PXllcywKKysgICAgIFtpZiB0ZXN0ICJ4JHdpdGhfcG9sa2l0IiAhPSB4Y2hlY2s7IHRoZW4KKysgICAgICAgQUNfTVNHX0ZBSUxVUkUoCisrICAgICAgICAgWy0td2l0aC1wb2xraXQgd2FzIGdpdmVuLCBidXQgdGVzdCBmb3IgcG9sa2l0IGZhaWxlZF0pCisrICAgICAgZWxzZQorKyAgICAgICAgaGF2ZV9wb2xraXQ9bm8KKysgICAgICBmaQorKyAgICAgXSldKQorKworIGlmIHRlc3QgIngkaGF2ZV9wb2xraXQiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoSEFWRV9QT0xLSVQsIFtdLCBbRGVmaW5lIGlmIHdlIGhhdmUgcG9sa2l0XSkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjliOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvc2VwYnVpbGRmaXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorRml4IGJ1aWxkcyBpbiB0aGUgY2FzZSBvZiBzZXByYXRlIHNvdXJjZSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JQIDIwMTMvNC8xNworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHBhbS1jay1jb25uZWN0b3IvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xla2l0L3BhbS1jay1jb25uZWN0b3Iub3JpZy9NYWtlZmlsZS5hbQkyMDEwLTA5LTAzIDEzOjU0OjMxLjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGVraXQvcGFtLWNrLWNvbm5lY3Rvci9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDA5OjA2OjQ5LjA5MzUyNDkxOCArMDAwMAorQEAgLTQsNyArNCw3IEBACisgCisgSU5DTFVERVMgPSAJCQkJCVwKKyAJJChMSUJEQlVTX0NGTEFHUykJCQlcCistCS1JJCh0b3BfYnVpbGRkaXIpL2xpYmNrLWNvbm5lY3RvcglcCisrCS1JJCh0b3Bfc3JjZGlyKS9saWJjay1jb25uZWN0b3IJXAorIAkkKE5VTEwpCisgCisgcGFtbGliZGlyID0gJChQQU1fTU9EVUxFX0RJUikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE4OTJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBkZWZpbmluZyBhbmQgdHJhY2tpbmcgdXNlcnMsIGxvZ2luIHNlc3Npb25zLCBhbmQgc2VhdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0NvbnNvbGVLaXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cXVlcnlfZm9ybWF0PXNwZWNpZmljJnByb2R1Y3Q9Q29uc29sZUtpdCIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTBhOTk0ZTA5NzY5NzgwMjIwMTYzMjU1ZDhmOTA3MWMzIgorCitERVBFTkRTID0gImdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBkYnVzIGRidXMtZ2xpYiB2aXJ0dWFsL2xpYngxMSIKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNlLWZpbGVzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvQ29uc29sZUtpdC9kaXN0L0NvbnNvbGVLaXQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3NlcGJ1aWxkZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wb2xraXQtY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjYxMTc5MmI0ZDYxNjI1M2E1YmRlYzkxNzVmOGI3Njc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0MWQxN2UwNmY4MDA1OTU4OWZiZWVmZTk2YWQwN2JjYzU2NGM0OWU2NTUxNmRhMWNhZjk3NTE0NjQ3NTU2NWMiCisKK1MgPSAiJHtXT1JLRElSfS9Db25zb2xlS2l0LSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLW1vZHVsZSAtLXdpdGgtcGFtLW1vZHVsZS1kaXI9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHksLS1kaXNhYmxlLXBhbS1tb2R1bGUsbGlicGFtIgorUEFDS0FHRUNPTkZJR1twb2xpY3lraXRdID0gIi0td2l0aC1wb2xraXQsLS13aXRob3V0LXBvbGtpdCxwb2xraXQiCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9IgorCitGSUxFU18ke1BOfSArPSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvQ29uc29sZUtpdCAke2V4ZWNfcHJlZml4fS9saWIvQ29uc29sZUtpdCBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L0NvbnNvbGVLaXQgICR7c3lzdGVtZF91bml0ZGlyfSAke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9Qb2xpY3lLaXQgJHtkYXRhZGlyfS9wb2xraXQqIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWciCisKK1BBQ0tBR0VTID0rICJwYW0tcGx1Z2luLWNrLWNvbm5lY3RvciIKK0ZJTEVTX3BhbS1wbHVnaW4tY2stY29ubmVjdG9yICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIgorUkRFUEVORFNfcGFtLXBsdWdpbi1jay1jb25uZWN0b3IgKz0gIiR7UE59IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwkJZWNobyAiZCAke2xvY2Fsc3RhdGVkaXJ9L2xvZy9Db25zb2xlS2l0IC0gLSAtIC0iIFwKKwkJCT4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9jb25zb2xla2l0LmNvbmYKKwlmaQorCisJIyBSZW1vdmUgL3Zhci9ydW4gZnJvbSBwYWNrYWdlIGFzIGNvbnNvbGUta2l0LWRhZW1vbiB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKKwlybSAtZnIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc1NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2NyZWF0ZXJlcG86IEltcGxlbWVudCAtLWRicGF0aCBjb21tYW5kIGxpbmUgb3B0aW9uCisKKy0tZGJwYXRoIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkKK3dpdGggcnBtIGRhdGFiYXNlLiBCeSBkZWZhdWx0IGNyZWF0ZXJlcG8gdXNlcyBvciBjcmVhdGVzCitycG0gZGF0YWJhc2UgaW4gL3Zhci9saWIvcnBtLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisKKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2dlbnBrZ21ldGFkYXRhLnB5IDIwMTUtMDMtMzAgMjI6MTg6MTkuOTA0MDAwMDAwICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvZ2VucGtnbWV0YWRhdGEucHkgMjAxNS0wMy0zMCAyMjoyODo0OS4yMDgwMDAwMDAgKzAzMDAKK0BAIC02NSw2ICs2NSw3IEBACisgICAgICAtcCwgLS1wcmV0dHkgPSBvdXRwdXQgeG1sIGZpbGVzIGluIHByZXR0eSBmb3JtYXQuCisgICAgICAtLXVwZGF0ZSA9IHVwZGF0ZSBleGlzdGluZyBtZXRhZGF0YSAoaWYgcHJlc2VudCkKKyAgICAgIC1kLCAtLWRhdGFiYXNlID0gZ2VuZXJhdGUgdGhlIHNxbGl0ZSBkYXRhYmFzZXMuCisrICAgICAtLWRicGF0aCA8ZGlyPiA9IHNwZWNpZnkgcGF0aCB0byBycG0gZGIgZGlyZWN0b3J5LgorICAgICAiIiIpCisgCisgICAgIHN5cy5leGl0KHJldHZhbCkKK0BAIC03MiwxMCArNzMsMTMgQEAKKyBjbGFzcyBNZXRhRGF0YUdlbmVyYXRvcjoKKyAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMpOgorICAgICAgICAgc2VsZi5jbWRzID0gY21kcworLSAgICAgICAgc2VsZi50cyA9IHJwbS5UcmFuc2FjdGlvblNldCgpCisgICAgICAgICBzZWxmLnBrZ2NvdW50ID0gMAorICAgICAgICAgc2VsZi5maWxlcyA9IFtdCisgCisrICAgICAgICBpZiBzZWxmLmNtZHNbJ2RicGF0aCddOgorKyAgICAgICAgICAgIHJwbS5hZGRNYWNybygiX2RicGF0aCIsIHNlbGYuY21kc1snZGJwYXRoJ10pCisrICAgICAgICBzZWxmLnRzID0gcnBtLlRyYW5zYWN0aW9uU2V0KCkKKysKKyAgICAgZGVmIF9vc19wYXRoX3dhbGsoc2VsZiwgdG9wLCBmdW5jLCBhcmcpOgorICAgICAgICAgIiIiRGlyZWN0b3J5IHRyZWUgd2FsayB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgICAgICAgIGNvcHkgb2Ygb3MucGF0aC53YWxrLCBmaXhlcyB0aGUgbGluay9zdGF0aW5nIHByb2JsZW0KK0BAIC00MzUsNiArNDM5LDcgQEAKKyAgICAgY21kc1snZGlyLXBhdHRlcm4tbWF0Y2gnXSA9IFsnLipiaW5cLy4qJywgJ15cL2V0Y1wvLionXQorICAgICBjbWRzWydza2lwLXN5bWxpbmtzJ10gPSBGYWxzZQorICAgICBjbWRzWydwa2dsaXN0J10gPSBbXQorKyAgICBjbWRzWydkYnBhdGgnXSA9IE5vbmUKKyAKKyAgICAgdHJ5OgorICAgICAgICAgZ29wdHMsIGFyZ3NsZWZ0ID0gZ2V0b3B0LmdldG9wdChhcmdzLCAncGhxVnZuZGc6czp4OnU6YzpvOkNTaTonLCBbJ2hlbHAnLCAnZXhjbHVkZT0nLAorQEAgLTQ0Miw3ICs0NDcsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXNldXJsPScsICdncm91cGZpbGU9JywgJ2NoZWNrc3VtPScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nLCAncHJldHR5JywgJ3NwbGl0JywgJ291dHB1dGRpcj0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Vwb2NoJywgJ2NoZWNrdHMnLCAnZGF0YWJhc2UnLCAndXBkYXRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcC1zeW1saW5rcycsICdwa2dsaXN0PSddKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwLXN5bWxpbmtzJywgJ3BrZ2xpc3Q9JywgJ2RicGF0aD0nXSkKKyAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgZToKKyAgICAgICAgIGVycm9ycHJpbnQoXygnT3B0aW9ucyBFcnJvcjogJXMuJykgJSBlKQorICAgICAgICAgdXNhZ2UoKQorQEAgLTUxNiw2ICs1MjEsOCBAQAorICAgICAgICAgICAgICAgICBjbWRzWydza2lwLXN5bWxpbmtzJ10gPSBUcnVlCisgICAgICAgICAgICAgZWxpZiBhcmcgaW4gWyctaScsICctLXBrZ2xpc3QnXToKKyAgICAgICAgICAgICAgICAgY21kc1sncGtnbGlzdCddID0gYQorKyAgICAgICAgICAgIGVsaWYgYXJnID09ICctLWRicGF0aCc6CisrICAgICAgICAgICAgICAgIGNtZHNbJ2RicGF0aCddID0gb3MucGF0aC5yZWFscGF0aChhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgZXJyb3JwcmludChfKCdPcHRpb25zIEVycm9yOiAlcycpICUgZSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzcyMDBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tcnBtNTQ5LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2R1bXBNZXRhZGF0YS5weTogRml4IGZvciBSUE01IC0gNS40LjkgaW50ZWdyYXRpb24KKworUlBNNSBubyBsb25nZXIgaGFzIGEgc3dpdGNoIHRvIGRpc2FibGUgc2lnbmF0dXJlIHZhbGlkYXRpb24uICAoRHVlIHRvIHNlY3VyaXR5Cit2YWxpZGF0aW9uIGNvbmNlcm5zLikKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgY3JlYXRlcmVwbyBkb2VzIG5vdCBzdXBwb3J0IFJQTTUgdXBzdHJlYW0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11IGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZHVtcE1ldGFkYXRhLnB5IGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZHVtcE1ldGFkYXRhLnB5CTIwMTItMDYtMDUgMTA6MTI6NTUuNjg3OTY0MjIyIC0wNTAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5CTIwMTItMDYtMDUgMTA6NDA6MDguMTU0MDYwNjAwIC0wNTAwCitAQCAtOTIsNyArOTIsNyBAQAorICAgICAgICAgICAgIGZkbm8gPSBwYWNrYWdlICMgbGV0J3MgYXNzdW1lIHRoaXMgaXMgYW4gZmRubyBhbmQgZ28gd2l0aCBpdCA6KQorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJhaXNlIE1ERXJyb3IsICJFcnJvciBvcGVuaW5nIGZpbGUiCistICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uUlBNVlNGX05PTUQ1fHJwbS5SUE1WU0ZfTkVFRFBBWUxPQUQpKQorKyAgICB0cy5zZXRWU0ZsYWdzKChycG0uUlBNVlNGX05PTUQ1fHJwbS5SUE1WU0ZfTkVFRFBBWUxPQUQpKQorICAgICB0cnk6CisgICAgICAgICBoZHIgPSB0cy5oZHJGcm9tRmRubyhmZG5vKQorICAgICBleGNlcHQgcnBtLmVycm9yOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZHVtcE1ldGFkYXRhLWRpc2FibGUtc2lnbmF0dXJlLXZhbGlkYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorZHVtcE1ldGFkYXRhOiBkaXNhYmxlIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisKK01ha2VzIGl0IHBvc3NpYmxlIHRvIHdvcmsgb24gUlBNIHJlcG9zaXRvcmllcyB0aGF0IGNvbnRhaW4gc2lnbmVkIHBhY2thZ2VzCit3aXRob3V0IHRoZSBuZWVkIG9mIGltcG9ydGluZyB0aGUgcHVibGljIHBhcnQgb2YgdGhlIHNpZ25pbmcga2V5IGludG8gdGhlIFJQTQorZGF0YWJhc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrdXMgTGVodG9uZW4gPG1hcmt1cy5sZWh0b25lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBkdW1wTWV0YWRhdGEucHkgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9kdW1wTWV0YWRhdGEucHkgYi9kdW1wTWV0YWRhdGEucHkKK2luZGV4IGU0MGU4YWMuLmNhNmE4MmQgMTAwNjQ0CistLS0gYS9kdW1wTWV0YWRhdGEucHkKKysrKyBiL2R1bXBNZXRhZGF0YS5weQorQEAgLTkyLDcgKzkyLDkgQEAgZGVmIHJldHVybkhkcih0cywgcGFja2FnZSk6CisgICAgICAgICAgICAgZmRubyA9IHBhY2thZ2UgIyBsZXQncyBhc3N1bWUgdGhpcyBpcyBhbiBmZG5vIGFuZCBnbyB3aXRoIGl0IDopCisgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgcmFpc2UgTURFcnJvciwgIkVycm9yIG9wZW5pbmcgZmlsZSIKKy0gICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKysgICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEfAorKyAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBfHJwbS5SUE1WU0ZfTk9SU0F8CisrICAgICAgICAgICAgICAgICAgIHJwbS5SUE1WU0ZfTk9EU0FIRUFERVJ8cnBtLlJQTVZTRl9OT1JTQUhFQURFUikpCisgICAgIHRyeToKKyAgICAgICAgIGhkciA9IHRzLmhkckZyb21GZG5vKGZkbm8pCisgICAgIGV4Y2VwdCBycG0uZXJyb3I6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjAyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTYzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0RhdGU6IEphbiAzMSwgMjAxMQorCitUaGVyZSBhcmUgdHdvIGZpeGVzOgorICAxLiAtbmF0aXZlIG5lZWRzIHRvIGN1c3RvbWl6ZSBwcmVmaXgKKyAgMi4gbmVlZHMgdG8gY2hhbmdlIHB5dGhvbiByZWZlcmVuY2UgaW4gYmluYXJpZXMKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBiMmQxYTMyLi4zYzM2MzlmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMywyMiArMywyMiBAQCBWRVJTSU9OID0gMC40LjExCisgU0hFTEwgPSAvYmluL3NoCisgdG9wX3NyY2RpciA9IC4KKyBzcmNkaXIgPSAuCistcHJlZml4ID0gL3VzcgorLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CistCistYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCistc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KKy1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKKy1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YworLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQorLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCistbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCistaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCisrcHJlZml4ID89IC91c3IKKytleGVjX3ByZWZpeCA/PSAke3ByZWZpeH0KKysKKytiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vYmluCisrc2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9zYmluCisrbGliZXhlY2RpciA/PSAke2V4ZWNfcHJlZml4fS9saWJleGVjCisrZGF0YWRpciA/PSAke3ByZWZpeH0vc2hhcmUKKytzeXNjb25mZGlyID89ICR7cHJlZml4fS9ldGMKKytzaGFyZWRzdGF0ZWRpciA/PSAke3ByZWZpeH0vY29tCisrbG9jYWxzdGF0ZWRpciA/PSAke3ByZWZpeH0vdmFyCisrbGliZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYgorK2luZm9kaXIgPz0gJHtwcmVmaXh9L2luZm8KKyBkb2NkaXIgPSAKKy1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKKytpbmNsdWRlZGlyID89ICR7cHJlZml4fS9pbmNsdWRlCisgb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorLW1hbmRpciA9ICR7cHJlZml4fS9zaGFyZS9tYW4KKyttYW5kaXIgPz0gJHtwcmVmaXh9L3NoYXJlL21hbgorIAorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpLyQoUEFDS0FHRSkKKyBwa2dsaWJkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKQorZGlmZiAtLWdpdCBhL2Jpbi9NYWtlZmlsZSBiL2Jpbi9NYWtlZmlsZQoraW5kZXggNTJjMWY1MC4uZTMwNjEwZSAxMDA2NDQKKy0tLSBhL2Jpbi9NYWtlZmlsZQorKysrIGIvYmluL01ha2VmaWxlCitAQCAtMSwyMiArMSwyMiBAQAorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuLgorIHNyY2RpciA9IC4uL2JpbgorLXByZWZpeCA9IC91c3IKKy1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQorLQorLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgorLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCistbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKy1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCistc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKKy1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KKy1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgorLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgorLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbworK3ByZWZpeCA/PSAvdXNyCisrZXhlY19wcmVmaXggPz0gJHtwcmVmaXh9CisrCisrYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L2JpbgorK3NiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vc2JpbgorK2xpYmV4ZWNkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworK2RhdGFkaXIgPz0gJHtwcmVmaXh9L3NoYXJlCisrc3lzY29uZmRpciA/PSAke3ByZWZpeH0vZXRjCisrc2hhcmVkc3RhdGVkaXIgPz0gJHtwcmVmaXh9L2NvbQorK2xvY2Fsc3RhdGVkaXIgPz0gJHtwcmVmaXh9L3ZhcgorK2xpYmRpciA/PSAke2V4ZWNfcHJlZml4fS9saWIKKytpbmZvZGlyID89ICR7cHJlZml4fS9pbmZvCisgZG9jZGlyID0gCistaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCisraW5jbHVkZWRpciA/PSAke3ByZWZpeH0vaW5jbHVkZQorIG9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKKy1tYW5kaXIgPSAke3ByZWZpeH0vbWFuCisrbWFuZGlyID89ICR7cHJlZml4fS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKK0BAIC00MCw4ICs0MCwxMSBAQCBhbGw6ICQoc3JjZGlyKS8kKFBBQ0tBR0UpCisgCisgCisgaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzCistCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS8kKFBBQ0tBR0UpICQoREVTVERJUikkKGJpbmRpcikvJChQQUNLQUdFKQorLQkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvbW9kaWZ5cmVwbyAkKERFU1RESVIpJChiaW5kaXIpL21vZGlmeXJlcG8KKysJc2VkIC1lICJzfEBEQVRBRElSQHwkKGRhdGFkaXIpfCIgJChzcmNkaXIpLyQoUEFDS0FHRSkgPiAkKHNyY2RpcikvJChQQUNLQUdFKS50bXAKKysJc2VkIC1lICJzfEBEQVRBRElSQHwkKGRhdGFkaXIpfCIgJChzcmNkaXIpL21vZGlmeXJlcG8gPiAkKHNyY2RpcikvbW9kaWZ5cmVwby50bXAKKysJJChJTlNUQUxMX0JJTikgJChzcmNkaXIpLyQoUEFDS0FHRSkudG1wICQoREVTVERJUikkKGJpbmRpcikvJChQQUNLQUdFKQorKwkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvbW9kaWZ5cmVwby50bXAgJChERVNURElSKSQoYmluZGlyKS9tb2RpZnlyZXBvCisrCXJtIC1mICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnRtcCAkKHNyY2RpcikvbW9kaWZ5cmVwby50bXAKKyAKKyAKKyB1bmluc3RhbGw6CitkaWZmIC0tZ2l0IGEvYmluL2NyZWF0ZXJlcG8gYi9iaW4vY3JlYXRlcmVwbworaW5kZXggYjBkZTUxNS4uZWFhY2IzOSAxMDA3NTUKKy0tLSBhL2Jpbi9jcmVhdGVyZXBvCisrKysgYi9iaW4vY3JlYXRlcmVwbworQEAgLTEsMiArMSwyIEBACisgIyEvYmluL3NoCistZXhlYyAvdXNyL3NoYXJlL2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgIiRAIgorK2V4ZWMgQERBVEFESVJAL2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgIiRAIgorZGlmZiAtLWdpdCBhL2Jpbi9tb2RpZnlyZXBvIGIvYmluL21vZGlmeXJlcG8KK2luZGV4IGM5NzMyZDguLjZmN2MxZDQgMTAwNzU1CistLS0gYS9iaW4vbW9kaWZ5cmVwbworKysrIGIvYmluL21vZGlmeXJlcG8KK0BAIC0xLDIgKzEsMiBAQAorICMhL2Jpbi9zaAorLWV4ZWMgL3Vzci9zaGFyZS9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgIiRAIgorK2V4ZWMgQERBVEFESVJAL2NyZWF0ZXJlcG8vbW9kaWZ5cmVwby5weSAiJEAiCitkaWZmIC0tZ2l0IGEvZG9jcy9NYWtlZmlsZSBiL2RvY3MvTWFrZWZpbGUKK2luZGV4IDBhNDExNzkuLmUxMjhjODUgMTAwNjQ0CistLS0gYS9kb2NzL01ha2VmaWxlCisrKysgYi9kb2NzL01ha2VmaWxlCitAQCAtMSwyMiArMSwyMiBAQAorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuLgorIHNyY2RpciA9IC4uL2RvY3MKKy1wcmVmaXggPSAvdXNyCistZXhlY19wcmVmaXggPSAke3ByZWZpeH0KKy0KKy1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KKy1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2JpbgorLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCistZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQorLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCistc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCistbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKKy1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKKy1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KKytwcmVmaXggPz0gL3VzcgorK2V4ZWNfcHJlZml4ID89ICR7cHJlZml4fQorKworK2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9iaW4KKytzYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L3NiaW4KKytsaWJleGVjZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKytkYXRhZGlyID89ICR7cHJlZml4fS9zaGFyZQorK3N5c2NvbmZkaXIgPz0gJHtwcmVmaXh9L2V0YworK3NoYXJlZHN0YXRlZGlyID89ICR7cHJlZml4fS9jb20KKytsb2NhbHN0YXRlZGlyID89ICR7cHJlZml4fS92YXIKKytsaWJkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliCisraW5mb2RpciA/PSAke3ByZWZpeH0vaW5mbworIGRvY2RpciA9IAorLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorK2luY2x1ZGVkaXIgPz0gJHtwcmVmaXh9L2luY2x1ZGUKKyBvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCistbWFuZGlyID0gJHtkYXRhZGlyfS9tYW4KKyttYW5kaXIgPz0gJHtkYXRhZGlyfS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3B5dGhvbi1zY3JpcHRzLXNob3VsZC11c2UtaW50ZXJwcmV0ZXItZnJvbS1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMDVhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitQeXRob24gaW50ZXJwcmV0ZXIgc2hvdWxkIGJlIHVzZSBmcm9tIFBBVEggLSBuYXRpdmUgcHl0aG9uIC0gYW5kIG5vdCB0aGUgb25lIGZyb20KK2hvc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9nZW5wa2dtZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE0OjA1LjI3ODY0OTM4NCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTQ6MjIuMjkwNjQ4ODg2ICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdAorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAjIHByaW1hcnkgZnVuY3Rpb25zIGFuZCBnbHVlIGZvciBnZW5lcmF0aW5nIHRoZSByZXBvc2l0b3J5IG1ldGFkYXRhCisgIworIAorSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL21vZGlmeXJlcG8ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL21vZGlmeXJlcG8ucHkJMjAxMi0wNC0xMCAxNzoxNDowOS4xMDY2NDkyNzIgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9tb2RpZnlyZXBvLnB5CTIwMTItMDQtMTAgMTc6MTQ6MjcuODE4NjQ4NzI1ICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL2VudiBweXRob24KKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyAkSWQkCisgIworICMgVGhpcyB0b29scyBpcyB1c2VkIHRvIGluc2VydCBhcmJpdHJhcnkgbWV0YWRhdGEgaW50byBhbiBSUE0gcmVwb3NpdG9yeS4KK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE5OjIzLjg3NDY0MDA2OCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE5OjM0LjUwMjYzOTc1NiArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXQKKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyBiYXNlIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgZHVtcGluZyBvdXQgcGFja2FnZSBNZXRhZGF0YQorICMKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvcmVhZE1ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9yZWFkTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOToxOS42MjY2NDAxOTMgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9yZWFkTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOTo0MC4xOTg2Mzk1OTAgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC10CisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIAorICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9yZWNvbW1lbmRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNWRlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaApAQCAtMCwwICsxLDcxIEBACitjcmVhdGVyZXBvOiBpbXBsZW1lbnQgcmVjb21tZW5kcyBzdXBwb3J0CisKK1JlY29yZCBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIHJlcXVpcmVzIGVudHJ5IGluIHRoZSBvdXRwdXQgbWV0YWRhdGEKK2lmIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgaXMgbWFya2VkIHdpdGggdGhlIFJQTVNFTlNFX01JU1NJTkdPSyBmbGFnCisoaW5kaWNhdGluZyBpdCBpcyBhIHJlY29tbWVuZGF0aW9uLCByYXRoZXIgdGhhbiBhIGhhcmQgZGVwZW5kZW5jeSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2R1bXBNZXRhZGF0YS5weSBiL2R1bXBNZXRhZGF0YS5weQoraW5kZXggNzBiYjJkOC4uZTQwZThhYyAxMDA2NDQKKy0tLSBhL2R1bXBNZXRhZGF0YS5weQorKysrIGIvZHVtcE1ldGFkYXRhLnB5CitAQCAtMzE5LDYgKzMxOSwyMyBAQCBjbGFzcyBScG1NZXRhRGF0YToKKyAgICAgICAgICAgICAgICAgICAgIHJlcXMuYXBwZW5kKDApCisgICAgICAgICByZXR1cm4gcmVxcworIAorKyAgICBkZWYgX2NoZWNrTWlzc2luZ09rKHNlbGYsIGZsYWdzKToKKysgICAgICAgIHJlcXM9W10KKysgICAgICAgIGlmIGZsYWdzIGlzIE5vbmU6CisrICAgICAgICAgICAgcmV0dXJuIHJlcXMKKysKKysgICAgICAgIGlmIHR5cGUoZmxhZ3MpIGlzIG5vdCB0eXBlcy5MaXN0VHlwZToKKysgICAgICAgICAgICBmbGFncyA9IFtmbGFnc10KKysgICAgICAgIGZvciBmbGFnIGluIGZsYWdzOgorKyAgICAgICAgICAgIG5ld2ZsYWcgPSBmbGFnCisrICAgICAgICAgICAgaWYgZmxhZyBpcyBub3QgTm9uZToKKysgICAgICAgICAgICAgICAgbmV3ZmxhZyA9IGZsYWcgJiBycG0uUlBNU0VOU0VfTUlTU0lOR09LCisrICAgICAgICAgICAgICAgIGlmIG5ld2ZsYWc6CisrICAgICAgICAgICAgICAgICAgICByZXFzLmFwcGVuZCgxKQorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmVxcy5hcHBlbmQoMCkKKysgICAgICAgIHJldHVybiByZXFzCisrCisgCisgICAgIGRlZiBfY29ycmVjdFZlcnNpb24oc2VsZiwgdmVycyk6CisgICAgICAgICByZXR1cm52ZXJzID0gW10KK0BAIC01MzcsOSArNTU0LDEwIEBAIGNsYXNzIFJwbU1ldGFEYXRhOgorICAgICAgICAgdG1wZmxhZ3MgPSBzZWxmLmhkcltycG0uUlBNVEFHX1JFUVVJUkVGTEFHU10KKyAgICAgICAgIGZsYWdzID0gc2VsZi5fY29ycmVjdEZsYWdzKHRtcGZsYWdzKQorICAgICAgICAgcHJlcmVxID0gc2VsZi5fY2hlY2tQcmVSZXEodG1wZmxhZ3MpCisrICAgICAgICBtaXNzaW5nb2sgPSBzZWxmLl9jaGVja01pc3NpbmdPayh0bXBmbGFncykKKyAgICAgICAgIHZlciA9IHNlbGYuX2NvcnJlY3RWZXJzaW9uKHNlbGYuaGRyW3JwbS5SUE1UQUdfUkVRVUlSRVZFUlNJT05dKQorICAgICAgICAgaWYgbmFtZXMgaXMgbm90IE5vbmU6CistICAgICAgICAgICAgbHN0ID0gemlwKG5hbWVzLCBmbGFncywgdmVyLCBwcmVyZXEpCisrICAgICAgICAgICAgbHN0ID0gemlwKG5hbWVzLCBmbGFncywgdmVyLCBwcmVyZXEsIG1pc3NpbmdvaykKKyAgICAgICAgIHJldHVybiBzZWxmLl91bmlxKGxzdCkKKyAgICAgICAgIAorICAgICBkZWYgb2Jzb2xldGVzTGlzdChzZWxmKToKK0BAIC02OTIsNyArNzEwLDcgQEAgZGVmIGdlbmVyYXRlWE1MKGRvYywgbm9kZSwgZm9ybWF0bnMsIHJwbU9iaiwgc3VtdHlwZSk6CisgICAgIGRlcHNMaXN0ID0gcnBtT2JqLmRlcHNMaXN0KCkKKyAgICAgaWYgbGVuKGRlcHNMaXN0KSA+IDA6CisgICAgICAgICBycGNvbm9kZSA9IGZvcm1hdC5uZXdDaGlsZChmb3JtYXRucywgJ3JlcXVpcmVzJywgTm9uZSkgICAgCistICAgICAgICBmb3IgKG5hbWUsIGZsYWdzLCAoZSx2LHIpLCBwcmVyZXEpIGluIGRlcHNMaXN0OgorKyAgICAgICAgZm9yIChuYW1lLCBmbGFncywgKGUsdixyKSwgcHJlcmVxLCBtaXNzaW5nb2spIGluIGRlcHNMaXN0OgorICAgICAgICAgICAgIGVudHJ5ID0gcnBjb25vZGUubmV3Q2hpbGQoZm9ybWF0bnMsICdlbnRyeScsIE5vbmUpCisgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgnbmFtZScsIG5hbWUpCisgICAgICAgICAgICAgaWYgZmxhZ3MgIT0gMDoKK0BAIC03MTEsNiArNzI5LDggQEAgZGVmIGdlbmVyYXRlWE1MKGRvYywgbm9kZSwgZm9ybWF0bnMsIHJwbU9iaiwgc3VtdHlwZSk6CisgICAgICAgICAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCdyZWwnLCBzdHIocikpCisgICAgICAgICAgICAgaWYgcHJlcmVxID09IDE6CisgICAgICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ3ByZScsIHN0cihwcmVyZXEpKQorKyAgICAgICAgICAgIGlmIG1pc3NpbmdvazoKKysgICAgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgnbWlzc2luZ29rJywgJzEnKQorICAgICAgICAgCisgICAgIGZvciBmaWxlIGluIHJwbU9iai51c2VmdWxGaWxlcygpOgorICAgICAgICAgZmlsZXMgPSBmb3JtYXQubmV3Q2hpbGQoTm9uZSwgJ2ZpbGUnLCBOb25lKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weSBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWI2MWJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JwbS1jcmVhdGVzb2x2ZWRiLnB5CkBAIC0wLDAgKzEsNjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgYSBzb2x1dGlvbiBkYXRhYmFzZSBmb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyBycG0gcGFja2FnZXMKKyMgYnV0IHRyaWVzIHRvIGJlIGVmZmljaWVudCBhYm91dCB0aGlzLCBvbmx5IGRvaW5nIHNvIHdoZW4gdGhlIHBhY2thZ2VzIGhhdmUgY2hhbmdlZAorIyBpbiBzb21lIHdheS4KKyMKKyMgSXQgaXMgYXNzdW1lZCBzb21ldGhpbmcgYWxyZWFkeSB3ZW50IHRocm91Z2ggYW5kIHJlbW92ZWQgYWxsIHRoZSBzb2x2ZWRiLmRvbmUgc3RhbXAgZmlsZXMKKyMgaW4gYWR2YW5jZS4KKyMKKyMgRmlyc3QgYXJndW1lbnQgLSB0aGUgcnBtIGJpbmFyeSB0byB1c2UKKyMgU3Vic2VxdWVudCBhcmd1bWVudHMgLSBwYXRocyB0byBwcm9jZXNzIHNvbHV0aW9uIGRhdGFiYXNlcyBmb3IKKyMKKworaW1wb3J0IHN5cywgb3MKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgc3RhdAoraW1wb3J0IHN1YnByb2Nlc3MKKworaWYgbGVuKHN5cy5hcmd2KSA8IDE6CisgICAgcHJpbnQoIkVycm9yLCBycG0gY29tbWFuZCBub3Qgc3BlY2lmaWVkIikKKyAgICBzeXMuZXhpdCgxKQorCitpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKKyAgICBwcmludCgiRXJyb3IsIG5vIHBhdGhzIHNwZWNpZmllZCIpCisgICAgc3lzLmV4aXQoMSkKKworcGF0aHMgPSBzeXMuYXJndlsyOl0KKworZm9yIHBhdGggaW4gcGF0aHM6CisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCArICIvc29sdmVkYi5kb25lIik6CisgICAgICAgIGNvbnRpbnVlCisgICAgZGF0YSA9ICIiCisgICAgbWFuaWZlc3QgPSBbXQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aChwYXRoICsgIi8iICsgInNvbHZlZGIiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzdHIob3Muc3RhdChmKVtzdGF0LlNUX01USU1FXSkKKyAgICAgICAgICAgIG1hbmlmZXN0LmFwcGVuZChmKQorICAgIGNoZWNrc3VtID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIuY2hlY2tzdW0iKSBhbmQgb3BlbihwYXRoICsgIi9zb2x2ZWRiLmNoZWNrc3VtIiwgInIiKS5yZWFkKCkgPT0gY2hlY2tzdW06CisgICAgICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5kb25lIiwgInciKQorICAgICAgICBjb250aW51ZQorCisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCArICIvc29sdmVkYiIpOgorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoInJtIC1yZiAlcyIgJSAocGF0aCArICIvc29sdmVkYiIpLCBzaGVsbD1UcnVlKQorICAgIG9zLm1rZGlyKHBhdGggKyAiL3NvbHZlZGIiKQorICAgIG0gPSBvcGVuKHBhdGggKyAiL3NvbHZlZGIvbWFuaWZlc3QiLCAidyIpCisgICAgbS53cml0ZSgiIyBEeW5hbWljYWxseSBnZW5lcmF0ZWQgc29sdmUgbWFuaWZlc3RcbiIpCisgICAgZm9yIGYgaW4gbWFuaWZlc3Q6CisgICAgICAgIG0ud3JpdGUoZiArICJcbiIpCisgICAgbS5jbG9zZSgpCisKKyAgICBjbWQgPSBzeXMuYXJndlsxXSArICcgLWkgLS1yZXBsYWNlcGtncyAtLXJlcGxhY2VmaWxlcyAtLW9sZHBhY2thZ2UgLUQgIl9kYnBhdGggJyArIHBhdGggKyAnL3NvbHZlZGIiIC0tanVzdGRiIFwKKwkJCS0tbm9haWQgLS1ub2RlcHMgLS1ub29yZGVyIC0tbm9zY3JpcHRzIC0tbm90cmlnZ2VycyAtLW5vcGFyZW50ZGlycyAtLW5vbGlua3RvcyAtLXN0YXRzIFwKKwkJCS0taWdub3Jlc2l6ZSAtLW5vc2lnbmF0dXJlIC0tbm9kaWdlc3QgLUQgIl9fZGJpX3R4biBjcmVhdGUgbm9mc3luYyIgXAorCQkJJyArIHBhdGggKyAnL3NvbHZlZGIvbWFuaWZlc3QnCisgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKworICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5jaGVja3N1bSIsICJ3Iikud3JpdGUoY2hlY2tzdW0pCisgICAgb3BlbihwYXRoICsgIi9zb2x2ZWRiLmRvbmUiLCAidyIpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOWVjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiQ3JlYXRlcyBtZXRhZGF0YSBpbmRleGVzIGZvciBSUE0gcGFja2FnZSByZXBvc2l0b3JpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vY3JlYXRlcmVwby5iYXNldXJsLm9yZy8iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb25zIGFmdGVyIDAuOS4qIHVzZSBZVU0sIHNvIHdlIGhvbGQgYXQgMC40LjExIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAibGlieG1sMi1uYXRpdmUgcnBtLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJsaWJ4bWwyLXB5dGhvbiIKKworUFIgPSAicjkiCisKK1NSQ19VUkkgPSAiaHR0cDovL2NyZWF0ZXJlcG8uYmFzZXVybC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1uYXRpdmUtaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyZWF0ZXJlcG8tcnBtNTQ5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlY29tbWVuZHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3JlYXRlcmVwby1kYnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHVtcE1ldGFkYXRhLWRpc2FibGUtc2lnbmF0dXJlLXZhbGlkYXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnBtLWNyZWF0ZXNvbHZlZGIucHkgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZTljY2Y0YWJjZmZlM2Y0OWFmMDc4YzgzNjExZWRhMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNzNhZTExYTBkY2RlOGJkZTM2ZDkwMGJjM2Y3ZjhmMTA4M2JhNzUyYzcwYTVjNjFiNzJkMWUxZTc2MDhmMjFiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnBtLWNyZWF0ZXNvbHZlZGIucHkgJHtEfSR7YmluZGlyfS8KK30KKworIyBXcmFwIHRoZSBweXRob24gc2NyaXB0IHNpbmNlIHRoZSBuYXRpdmUgcHl0aG9uIGlzCisjICR7YmluZGlyfS9weXRob24tbmF0aXZlL3B5dGhvbiwgYW5kIHRoZSAiIyEgL3Vzci9iaW4vZW52IHB5dGhvbiIgY2FuJ3QKKyMgZmluZCBpdCBzaW5jZSBpdCBpcyBub3QgaW4gUEFUSC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJIyBOb3QgYWxsIHRoZSBweXRob24gc2NyaXB0cyBzaG91bGQgYmUgd3JhcHBlZCBzaW5jZSBzb21lIG9mCisJIyB0aGVtIGFyZSBtb2R1bGVzIChiZSBpbXBvcnRlZCkuCisJZm9yIGkgaW4gJHtEfSR7ZGF0YWRpcn0vY3JlYXRlcmVwby9nZW5wa2dtZXRhZGF0YS5weSBcCisJCSAke0R9JHtkYXRhZGlyfS9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgXAorCQkgJHtEfSR7YmluZGlyfS9ycG0tY3JlYXRlc29sdmVkYi5weSA7IGRvCisJCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICRpCisJZG9uZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vY3JlYXRlcmVwbyBcCisJCQlSUE1fVVNSTElCUlBNPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0ke1NUQUdJTkdfRVRDRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9MT0NBTEVESVJSUE09JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9sb2NhbGUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogIFBlbmRpbmcKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODEsNyArMjgxLDcgQEAgZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIAorIENVUkxfQ0hFQ0tfQ09NUElMRVIKKyBDVVJMX1NFVF9DT01QSUxFUl9CQVNJQ19PUFRTCistQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworK2RubCBDVVJMX1NFVF9DT01QSUxFUl9ERUJVR19PUFRTCisgQ1VSTF9TRVRfQ09NUElMRVJfT1BUSU1JWkVfT1BUUworIENVUkxfU0VUX0NPTVBJTEVSX1dBUk5JTkdfT1BUUworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg3NjlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtwYWNrYWdpbmddCisKK2RpZmYgLU51cmQgY3VybC03LjI5LjAvY29uZmlndXJlLmFjIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYworLS0tIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTA2IDExOjQ3OjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTE2IDEyOjMyOjIyLjEzMjMyNzc2NCArMDIwMAorQEAgLTE4ODMsNiArMTg4Myw3IEBACisgICAgICAgIEFDX1NVQlNUKFVTRV9HTlVUTFMsIFsxXSkKKyAgICAgICAgR05VVExTX0VOQUJMRUQ9MQorICAgICAgICBVU0VfR05VVExTPSJ5ZXMiCisrICAgICAgIEdOVVRMU19SRVFVSVJFRD0iZ251dGxzIgorICAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKEdudVRMUykiCisgICAgICAgIF0sCisgICAgICAgIFsKK0BAIC0xOTUzLDYgKzE5NTQsOCBAQAorICAgIF0pCisgZmkKKyAKKytBQ19TVUJTVChHTlVUTFNfUkVRVUlSRUQpCisrCisgZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbmwgY2hlY2sgZm9yIFBvbGFyU1NMCisgZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RpZmYgLU51cmQgY3VybC03LjI5LjAvbGliY3VybC5wYy5pbiBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluCistLS0gY3VybC03LjI5LjAvbGliY3VybC5wYy5pbgkyMDEyLTEyLTEyIDAwOjMyOjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4JMjAxMy0wMi0xNiAxMjozMzoyNy4wNjM4NDQzMzcgKzAyMDAKK0BAIC0zNSw1ICszNSw1IEBACisgRGVzY3JpcHRpb246IExpYnJhcnkgdG8gdHJhbnNmZXIgZmlsZXMgd2l0aCBmdHAsIGh0dHAsIGV0Yy4KKyBWZXJzaW9uOiBAQ1VSTFZFUlNJT05ACisgTGliczogLUwke2xpYmRpcn0gLWxjdXJsCistTGlicy5wcml2YXRlOiBATElCQ1VSTF9MSUJTQAorK0xpYnMucHJpdmF0ZTogLWxkbCAtbHoKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQ1BQRkxBR19DVVJMX1NUQVRJQ0xJQkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTMzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vY3VybC5oYXh4LnNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpc3QuY2dpP2xpc3Q9Y3VybC10cmFja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTc7bWQ1PTNhMzQ5NDJmNGFlM2ZiZjFhMzAzMTYwNzE0ZTY2NGFjIgorCitTUkNfVVJJID0gImh0dHA6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAorICAgICAgICAgICIKKworIyBjdXJsIGxpa2VzIHRvIHNldCAtZzAgaW4gQ0ZMQUdTLCBzbyB3ZSBzdG9wIGl0CisjIGZyb20gbXVja2luZyBhcm91bmQgd2l0aCBkZWJ1ZyBvcHRpb25zCisjCitTUkNfVVJJICs9ICIgZmlsZTovL2NvbmZpZ3VyZV9hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiOTUyY2EwMGU1NDczYjE2YTExZjA1ZjA2YWE4ZGFlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFlMjU0MWJhZTY1ODJiYjY5N2MwZmJhZTQ5ZTFkM2U2ZmFkNWQwNWQ1YWE4MGRiZDZmMDcyZTBhNDQzNDE4MTQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImlwdjYiLCAiaXB2NiIsICIiLCBkKX0gZ251dGxzIHpsaWIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICJpcHY2IHNzbCB6bGliIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiaXB2NiBzc2wgemxpYiIKKworUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKK1BBQ0tBR0VDT05GSUdbc3NsXSA9ICItLXdpdGgtc3NsIC0td2l0aC1yYW5kb209L2Rldi91cmFuZG9tLC0td2l0aG91dC1zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLi8sLS13aXRob3V0LXpsaWIsemxpYiIKK1BBQ0tBR0VDT05GSUdbcnRtcGR1bXBdID0gIi0td2l0aC1saWJydG1wLC0td2l0aG91dC1saWJydG1wLHJ0bXBkdW1wIgorUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSA9ICItLXdpdGgtbGlic3NoMiwtLXdpdGhvdXQtbGlic3NoMixsaWJzc2gyIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXNtYiwtLWRpc2FibGUtc21iLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1saWJpZG4gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNyeXB0by1hdXRoIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGRhcCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxkYXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2EtYnVuZGxlPSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQgXAorIgorIyBzZWUgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LzIwMTMtRGVjZW1iZXIvMDA5NDM1Lmh0bWwKKyMgV2Ugc2hvdWxkIGlkZWFsbHkgZHJvcCBhY19jdl9zaXplb2Zfb2ZmX3QgZnJvbSBzaXRlIGZpbGVzIGJ1dCB1bnRpbCB0aGVuCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2FjX2N2X3NpemVvZl9vZmZfdD04JywgJycsIGQpfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGN1cmwvY3VybGJ1aWxkLmgKK30KKworUEFDS0FHRVMgPSsgImxpYiR7QlBOfSIKKworRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitSUkVDT01NRU5EU19saWIke0JQTn0gKz0gImNhLWNlcnRpZmljYXRlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWJmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBjNjQwZmY5MzQwZjM1OGEwMDgzNTgxNmQwZmVhMDNkMjdhN2JlOTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDMxIE1hciAyMDE1IDAwOjU2OjQ0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBsZXQgbGlic29fdGFyZ2V0IGRlcGVuZCBvbiBidF9yZWMKKworRml4ZWQgcGFyYWxsZWwgaXNzdWU6CitsaWJ0b29sOiBsaW5rOiBgYnRfcmVjLmxvJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdAorTWFrZWZpbGU6ODY3OiByZWNpcGUgZm9yIHRhcmdldCAnbGliZGItNi4wLmxhJyBmYWlsZWQKK21ha2U6ICoqKiBbbGliZGItNi4wLmxhXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZTQ1MWY3MC4uMGE0MjM3NSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTg2Myw3ICs4NjMsNyBAQCAkKGxpYmRiX3ZlcnNpb24pOiAkKENfT0JKUykKKyAJJChMTikgLXMgJChsaWJkYl92ZXJzaW9uKSAkKGxpYmRiKQorIAorICMgU2hhcmVkIEMgbGlicmFyeS4KKy0kKGxpYnNvX3RhcmdldCk6ICQoQ19PQkpTKQorKyQobGlic29fdGFyZ2V0KTogJChDX09CSlMpIGJ0X3JlY0BvQAorIAkkKFNPTElOSykgJChTT0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoQ19PQkpTKSBcCisgCQkkKExJQkNTT19MSUJTKQorIAkkKFJNKSAkKGxpYmRiKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlOGRiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorT3JpZ2luYWwgcGF0Y2ggc3VibWl0dGVkIGJ5IGpib3dsZXJAbnNsdTItbGludXgub3JnIG9uIDIwMDUtMTEtMTc6CisKK2RiOiBmaXggdGh1bWIgdWNsaWJjIG9wZXJhdGlvbiBpbiA0LjMuMjkKKyAgLSB1Y2xpYmMgdGh1bWIgYnVpbGRzIHdlcmUgdXNpbmcgbGlicHRocmVhZCB0byBpbXBsZW1lbnQgbXV0ZXhlcywgdGhlCisgIC0gdWNsaWJjIHZlcnNpb24gc2VlbXMgdG8gYmUgYSBzdHViIChhdCBsZWFzdCBvbiB0aHVtYikuICBUaGlzIGNvbW1pdAorICAtIGZpeGVzIHRoZSBBUk0vZ2NjLWFzc2VtYmx5IG11dGV4IGltcGxlbWVudGF0aW9uIHNvIHRoYXQgaXQgaGFzIHRodW1iCisgIC0gc3VwcG9ydCBhbmQgdGhlIHJlc3VsdGFudCBkYjQgd29ya3MgKHRlc3RlZCBvbiBMRSBUaHVtYiB1Y2xpYmMpCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0F1dGhvcjogamJvd2xlckBuc2x1Mi1saW51eC5vcmcKKworLS0tIGRiLTUuMS4xOS9zcmMvZGJpbmMvbXV0ZXhfaW50Lmgub3JpZwkyMDExLTAxLTA1IDE5OjIxOjQyLjE4MTgwNTM2NiAtMDYwMAorKysrIGRiLTUuMS4xOS9zcmMvZGJpbmMvbXV0ZXhfaW50LmgJMjAxMS0wMS0wNSAxOToyNDo1My4xNDE4NTMxMTcgLTA2MDAKK0BAIC00NzQsNiArNDc0LDI1IEBACisgCisgI2lmZGVmIExPQURfQUNUVUFMX01VVEVYX0NPREUKKyAvKiBnY2MvYXJtOiAwIGlzIGNsZWFyLCAxIGlzIHNldC4gKi8KKysjaWYgZGVmaW5lZCBfX3RodW1iX18KKysjZGVmaW5lCU1VVEVYX1NFVCh0c2wpICh7CQkJCQkJXAorKwlpbnQgX19yLCBfX3A7CQkJCQkJCVwKKysJX19hc21fXyB2b2xhdGlsZSgJCQkJCQlcCisrCQkiLmFsaWduIDJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJieCAgICAgcGNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIm5vcFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiLmFybVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJzd3BiICAgJTAsICUyLCBbJTNdXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJImVvciAgICAlMCwgJTAsICMxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkib3JyICAgICUxLCBwYywgIzFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJieCAgICAgJTFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIi5mb3JjZV90aHVtYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgICA6ICI9JnIiIChfX3IpLCAiPXIiIChfX3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgICA6ICJyIiAoMSksICJyIiAodHNsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCV9fciAmIDE7CQkJCQkJCVwKKyt9KQorKyNlbHNlCisgI2RlZmluZQlNVVRFWF9TRVQodHNsKSAoewkJCQkJCVwKKyAJaW50IF9fcjsJCQkJCQkJXAorIAlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJCVwKK0BAIC00ODQsNiArNTAzLDcgQEAKKyAJICAgICk7CQkJCQkJCQlcCisgCV9fciAmIDE7CQkJCQkJCVwKKyB9KQorKyNlbmRpZgorIAorICNkZWZpbmUJTVVURVhfVU5TRVQodHNsKQkoKih2b2xhdGlsZSB0c2xfdCAqKSh0c2wpID0gMCkKKyAjZGVmaW5lCU1VVEVYX0lOSVQodHNsKSAgICAgICAgIChNVVRFWF9VTlNFVCh0c2wpLCAwKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjN2YxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2l0aCBoaWdoZXIgcGFyYWxlbGlzbSBpdCBzb21ldGltZXMgZmFpbHMgd2l0aDoKK2xpYnRvb2w6IGxpbms6IGB1dGlsX2xvZy5sbycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QKK21ha2U6ICoqKiBbZGJfcmVwbGljYXRlXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBkaXN0Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wNS0xMSAxOTo1Nzo0OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBkaXN0L01ha2VmaWxlLmluCTIwMTMtMTAtMzEgMTg6MTc6MTEuODc1NTMyNTIyICswMTAwCitAQCAtMTAzNCw3ICsxMDM0LDcgQEAKKyAJICAgIGRiX3JlY292ZXJAb0AgdXRpbF9zaWdAb0AgJChERUZfTElCKSAkKExJQlMpCisgCSQoUE9TVExJTkspICRACisgCistZGJfcmVwbGljYXRlOiBkYl9yZXBsaWNhdGVAb0AgdXRpbF9zaWdAb0AgJChERUZfTElCKQorK2RiX3JlcGxpY2F0ZTogZGJfcmVwbGljYXRlQG9AIHV0aWxfbG9nQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikKKyAJJChDQ0xJTkspIC1vICRAICQoTERGTEFHUykgXAorIAkgICAgZGJfcmVwbGljYXRlQG9AIHV0aWxfbG9nQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikgJChMSUJTKQorIAkkKFBPU1RMSU5LKSAkQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjgxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKQEAgLTAsMCArMSwxMTYgQEAKKyMgVmVyc2lvbiA1IG9mIHRoZSBCZXJrZWxleSBEQiBmcm9tIFNsZWVweWNhdAorIworIyBBdCBwcmVzZW50IHRoaXMgcGFja2FnZSBvbmx5IGluc3RhbGxzIHRoZSBEQiBjb2RlCisjIGl0c2VsZiAoc2hhcmVkIGxpYnJhcmllcywgLmEgaW4gdGhlIGRldiBwYWNrYWdlKSwKKyMgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycy4KKyMKKyMgVGhlIGhlYWRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aG9zZSBhcyB2MworIyBvZiB0aGUgREIsIG9ubHkgb25lIHZlcnNpb24gY2FuIGJlIHVzZWQgKmZvciBkZXYqCisjIGF0IG9uY2UgLSBEQjMgYW5kIERCNSBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24gdGhlCisjIHNhbWUgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUgaWYgcmVhbGx5IG5lY2Vzc2FyeS4KK1NFQ1RJT04gPSAibGlicyIKK1NVTU1BUlkgPSAiQmVya2VsZXkgRGF0YWJhc2UgdjUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5vbG9neS9wcm9kdWN0cy9iZXJrZWxleS1kYi9kYi9pbmRleC5odG1sIgorTElDRU5TRSA9ICJTbGVlcHljYXQiCitWSVJUVUFMX05BTUUgPz0gInZpcnR1YWwvZGIiCitSQ09ORkxJQ1RTXyR7UE59ID0gImRiMyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi0ke1BWfS50YXIuZ3oiCitTUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaDtwYXRjaGRpcj0uLiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk5NDU0NTY0ZDViNDQ3OTc1MDU2NzAzMWQ2NmZlMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTBhOTkyZDc0MDcwOTg5MmU4MWY5ZDkzZjA2ZGFmMzA1Y2Y3M2ZiODFiNTQ1YWZlNzI0NzgwNDMxNzJjMzYyOCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9ZWQxMTU4ZTMxNDM3ZjRmODdjZGQ0YWIyYjg2MTM5NTUiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgUHV0IHZpcnR1YWwvZGIgaW4gYW55IGFwcHJvcHJpYXRlIHByb3ZpZGVyIG9mIGEKKyMgcmVsYXRpb25hbCBkYXRhYmFzZSwgdXNlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbgorIyBwbGFjZSBvZiBhIHNwZWNpZmljIGRiIGFuZCB1c2U6CisjCisjIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiCisjCisjIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKK1BST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCisKKyMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCisjIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCisjIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKKyMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCitTID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKK0IgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgorU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCisKKyMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQorIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKKyMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgoraW5oZXJpdCBsaWJfcGFja2FnZQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3h4IgorRklMRVNfJHtQTn0tY3h4ID0gIiR7bGliZGlyfS8qY3h4KnNvIgorCisKKyMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KKyMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKKyMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKKyMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbworU09MSUJTID0gIi01Ki5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKKworI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQorIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCitEQjVfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCisKK0VYVFJBX09FQ09ORiA9ICIke0RCNV9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCisKKyMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKKyMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCisjIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKKyMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUsIHRoaXMgd29uJ3QKKyMgd29yayB3aXRoIHRodW1iIGNvbXBpbGF0aW9uLi4uCitBUk1fTVVURVggPSAiLS13aXRoLW11dGV4PUFSTS9nY2MtYXNzZW1ibHkiCitNVVRFWCA9ICIiCitNVVRFWF9hcm0gPSAiJHtBUk1fTVVURVh9IgorTVVURVhfYXJtZWIgPSAiJHtBUk1fTVVURVh9IgorRVhUUkFfT0VDT05GICs9ICIke01VVEVYfSIKKworIyBDYW5jZWwgdGhlIHNpdGUgc3R1ZmYgLSBpdCdzIHNldCBmb3IgZGIzIGFuZCBkZXN0cm95cyB0aGUKKyMgY29uZmlndXJlLgorQ09ORklHX1NJVEUgPSAiIgorZG9fY29uZmlndXJlKCkgeworCWdudS1jb25maWdpemUgLS1mb3JjZSAke1N9CisJZXhwb3J0IFNUUklQPSJ0cnVlIgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAnc3xoYXJkY29kZV9pbnRvX2xpYnM9eWVzfGhhcmRjb2RlX2ludG9fbGlicz1ub3wnIFwKKwkJJHtCfS9saWJ0b29sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICR7RH0vJHtpbmNsdWRlZGlyfS9kYjUxCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNTEvLgorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI1MS8uCisJbG4gLXMgZGI1MS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oCisJbG4gLXMgZGI1MS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmgKKworCSMgVGhlIGRvY3MgZW5kIHVwIGluIC91c3IvZG9jcyAtIG5vdCByaWdodC4KKwlpZiB0ZXN0IC1kICIke0R9LyR7cHJlZml4fS9kb2NzIgorCXRoZW4KKwkJbWtkaXIgLXAgIiR7RH0vJHtkYXRhZGlyfSIKKwkJdGVzdCAhIC1kICIke0R9LyR7ZG9jZGlyfSIgfHwgcm0gLXJmICIke0R9LyR7ZG9jZGlyfSIKKwkJbXYgIiR7RH0vJHtwcmVmaXh9L2RvY3MiICIke0R9LyR7ZG9jZGlyfSIKKwlmaQorCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tY3h4ID0gImRldi1zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5ZGY2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zMC5iYgpAQCAtMCwwICsxLDExOCBAQAorIyBWZXJzaW9uIDYgb2YgdGhlIEJlcmtlbGV5IERCIGZyb20gT3JhY2xlIChmb3JtZXJseSBTbGVlcHljYXQpCisjCisjIEF0IHByZXNlbnQgdGhpcyBwYWNrYWdlIG9ubHkgaW5zdGFsbHMgdGhlIERCIGNvZGUKKyMgaXRzZWxmIChzaGFyZWQgbGlicmFyaWVzLCAuYSBpbiB0aGUgZGV2IHBhY2thZ2UpLAorIyBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzLgorIworIyBUaGUgaGVhZGVycyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRob3NlIGFzIHYzCisjIG9mIHRoZSBEQiwgb25seSBvbmUgdmVyc2lvbiBjYW4gYmUgdXNlZCAqZm9yIGRldioKKyMgYXQgb25jZSAtIERCMyBhbmQgREI2IGNhbiBib3RoIGJlIGluc3RhbGxlZCBvbiB0aGUKKyMgc2FtZSBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZSBpZiByZWFsbHkgbmVjZXNzYXJ5LgorU0VDVElPTiA9ICJsaWJzIgorU1VNTUFSWSA9ICJCZXJrZWxleSBEYXRhYmFzZSB2NiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobm9sb2d5L3Byb2R1Y3RzL2JlcmtlbGV5LWRiL2RiL2luZGV4Lmh0bWwiCitMSUNFTlNFID0gIkFHUEwtMy4wIgorVklSVFVBTF9OQU1FID89ICJ2aXJ0dWFsL2RiIgorUkNPTkZMSUNUU18ke1BOfSA9ICJkYjMiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlVwZGF0aW5nIHRvIDYuMS54IHJlcXVpcmVzIGFsc28gdXBkYXRpbmcgcnBtIHRvIDUuNC4xNSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi0ke1BWfS50YXIuZ3oiCitTUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaDtwYXRjaGRpcj0uLiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZDI4ZWI4NmFkMzIwM2I1NDIyODQ0ZGIxNzljNTg1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDhlNGIxY2YzOTBlOWJmNTRjMGVmMDBjNWJkOWNhNzZkMzZlMjI2MWI5ZjRkMzNkNTQ1MTZmM2Y2YTIwZmQyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9MSUNFTlNFO21kNT0xZWM4YjBiMTdjYzMxNTEzZmUzNWFiMTA3MTZmODQ5MCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBQdXQgdmlydHVhbC9kYiBpbiBhbnkgYXBwcm9wcmlhdGUgcHJvdmlkZXIgb2YgYQorIyByZWxhdGlvbmFsIGRhdGFiYXNlLCB1c2UgaXQgYXMgYSBkZXBlbmRlbmN5IGluCisjIHBsYWNlIG9mIGEgc3BlY2lmaWMgZGIgYW5kIHVzZToKKyMKKyMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIKKyMKKyMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGRiIGluIHRoZSBidWlsZCAoZGlzdHJvKSAuY29uZgorUFJPVklERVMgKz0gIiR7VklSVFVBTF9OQU1FfSIKKworIyBiaXRiYWtlIGlzbid0IHF1aXRlIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoIHNsZWVweWNhdCwKKyMgdGhlIGRpc3RyaWJ1dGlvbiBzaXRzIGluIHRoZSBleHBlY3RlZCBkaXJlY3RvcnksIGJ1dCBhbGwKKyMgdGhlIGJ1aWxkcyBtdXN0IG9jY3VyIGZyb20gYSBzdWItZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZworIyBwZXJzdWFkZXMgYml0YmFrZSB0byBnbyB0byB0aGUgcmlnaHQgcGxhY2UKK1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9kaXN0IgorQiA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2J1aWxkX3VuaXgiCitTUERYX1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfSIKKworIyBUaGUgZXhlY3V0YWJsZXMgZ28gaW4gYSBzZXBhcmF0ZSBwYWNrYWdlIC0gdHlwaWNhbGx5IHRoZXJlCisjIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSB1bmxlc3MgZG9pbmcgcmVhbCBkYXRhYmFzZQorIyBtYW5hZ2VtZW50IG9uIHRoZSBzeXN0ZW0uCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VTID0rICIke1BOfS1jeHgiCitGSUxFU18ke1BOfS1jeHggPSAiJHtsaWJkaXJ9LypjeHgqc28iCisKKworIyBUaGUgZGV2IHBhY2thZ2UgaGFzIHRoZSAuc28gbGluayAoYXMgaW4gZGIzKSBhbmQgdGhlIC5hJ3MgLQorIyBpdCBpcyB0aGVyZWZvcmUgaW5jb21wYXRpYmxlIChjYW5ub3QgYmUgaW5zdGFsbGVkIGF0IHRoZQorIyBzYW1lIHRpbWUpIGFzIHRoZSBkYjMgcGFja2FnZQorIyBzb3J0IG91dCB0aGUgLnNvIHNpbmNlIHRoZXkgZG8gdmVyc2lvbiBwcmlvciB0byB0aGUgLnNvCitTT0xJQlMgPSAiLTYqLnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJkYi5zbyAke2xpYmRpcn0vbGliZGJfY3h4LnNvIgorCisjY29uZmlndXJhdGlvbiAtIHNldCBpbiBsb2NhbC5jb25mIHRvIG92ZXJyaWRlCisjIEFsbCB0aGUgLS1kaXNhYmxlLSogb3B0aW9ucyByZXBsYWNlIC0tZW5hYmxlLXNtYWxsYnVpbGQsIHdoaWNoIGJyZWFrcyBhIGJ1bmNoIG9mIHN0dWZmIChlZy4gcG9zdGZpeCkKK0RCNl9DT05GSUcgPz0gIi0tZW5hYmxlLW9fZGlyZWN0IC0tZGlzYWJsZS1jcnlwdG9ncmFwaHkgLS1kaXNhYmxlLXF1ZXVlIC0tZGlzYWJsZS1yZXBsaWNhdGlvbiAtLWRpc2FibGUtdmVyaWZ5IC0tZGlzYWJsZS1jb21wYXQxODUgLS1kaXNhYmxlLXNxbCIKKworRVhUUkFfT0VDT05GID0gIiR7REI2X0NPTkZJR30gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLWN4eCAtLXdpdGgtc3lzcm9vdCIKKworIyBPdmVycmlkZSB0aGUgTVVURVggc2V0dGluZyBoZXJlLCB0aGUgUE9TSVggbGlicmFyeSBpcworIyB0aGUgZGVmYXVsdCAtICJQT1NJWC9wdGhyZWFkcy9saWJyYXJ5Ii4KKyMgRG9uJ3QgaWdub3JlIHRoZSBuaWNlIFNXUCBpbnN0cnVjdGlvbiBvbiB0aGUgQVJNOgorIyBUaGVzZSBlbmFibGUgdGhlIEFSTSBhc3NlbWJsZXIgbXV0ZXggY29kZQorQVJNX01VVEVYID0gIi0td2l0aC1tdXRleD1BUk0vZ2NjLWFzc2VtYmx5IgorTVVURVggPSAiIgorTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKK01VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKK0VYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0iCisKKyMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlCisjIGNvbmZpZ3VyZS4KK0NPTkZJR19TSVRFID0gIiIKK2RvX2NvbmZpZ3VyZSgpIHsKKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtTfQorCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCisJCSR7Qn0vbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MAorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAvLgorCWxuIC1zIGRiNjAvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAorCWxuIC1zIGRiNjAvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCisKKwkjIFRoZSBkb2NzIGVuZCB1cCBpbiAvdXNyL2RvY3MgLSBub3QgcmlnaHQuCisJaWYgdGVzdCAtZCAiJHtEfS8ke3ByZWZpeH0vZG9jcyIKKwl0aGVuCisJCW1rZGlyIC1wICIke0R9LyR7ZGF0YWRpcn0iCisJCXRlc3QgISAtZCAiJHtEfS8ke2RvY2Rpcn0iIHx8IHJtIC1yZiAiJHtEfS8ke2RvY2Rpcn0iCisJCW12ICIke0R9LyR7cHJlZml4fS9kb2NzIiAiJHtEfS8ke2RvY2Rpcn0iCisJZmkKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjY2NWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBzcGVjaWZpYyB0byBEZWJpYW4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyICYgU01BSUxfR1BMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZjAxYTUyMDNkNTA1MTJmYzQ4MzBiNDMzMmI2OTZhOWYiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODc1MjQ1MThjZDU4MzNhNmE0ZjcwMDdiNWQxYmQ1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNTMxYzIzZTAxMDVmZTAxY2ZhOTI4NDU3YTgzNDNhMWU5NDdlMjYyMWIzY2Q0ZDA1ZjRlOTY1NjAyMGM2M2I3IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAtZSAnczp0ZW1wZmlsZS4xIHdoaWNoLjE6d2hpY2guMTpnJyAke1N9L01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgICMgRGViaWFuIHBsYWNlcyBzb21lIHV0aWxzIGludG8gJHtiYXNlX2JpbmRpcn0gYXMgZG9lcyBidXN5Ym94CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgIGZvciBhcHAgaW4gcnVuLXBhcnRzIHRlbXBmaWxlOyBkbworICAgICAgICAgICAgbXYgJHtEfSR7YmluZGlyfS8kYXBwICR7RH0ke2Jhc2VfYmluZGlyfS8kYXBwCisgICAgICAgIGRvbmUKKyAgICBmaQorfQorCisjIE5vdGUgdGhhdCB3ZSBwYWNrYWdlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIG5hbWUuCisjCitQQUNLQUdFUyA9KyAiJHtQTn0tcnVuLXBhcnRzIgorRklMRVNfJHtQTn0tcnVuLXBhcnRzID0gIiR7YmFzZV9iaW5kaXJ9L3J1bi1wYXJ0cy5kZWJpYW51dGlscyIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXJ1bi1wYXJ0cyIKKworCitBTFRFUk5BVElWRV9QUklPUklUWT0iMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYWRkLXNoZWxsIGluc3RhbGxrZXJuZWwgcmVtb3ZlLXNoZWxsIHNhdmVsb2cgdGVtcGZpbGUgd2hpY2giCitBTFRFUk5BVElWRV8ke1BOfS1ydW4tcGFydHMgPSAicnVuLXBhcnRzIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYWRkLXNoZWxsXT0iJHtzYmluZGlyfS9hZGQtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zdGFsbGtlcm5lbF09IiR7c2JpbmRpcn0vaW5zdGFsbGtlcm5lbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZW1vdmUtc2hlbGxdPSIke3NiaW5kaXJ9L3JlbW92ZS1zaGVsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW4tcGFydHNdPSIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2F2ZWxvZ109IiR7YmluZGlyfS9zYXZlbG9nIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3RlbXBmaWxlXT0iJHtiYXNlX2JpbmRpcn0vdGVtcGZpbGUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2hpY2hdPSIke2JpbmRpcn0vd2hpY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhNDc2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2VuY2hhbnQvZW5jaGFudF8xLjYuMC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkVuY2hhbnQgU3BlbGwgY2hlY2tlciBBUEkgTGlicmFyeSIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS9wcm9qZWN0cy9lbmNoYW50LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmFiaXNvdXJjZS5jb20vZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUVuY2hhbnQiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWRmY2JhYmY5MTMxZGM5YTk1ZmViZWY2NzUzYTI5NThiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9lbmNoYW50Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yOTttZDU9OGQ4ODFjYWExZDM3NTIzNTY3ZTFkOGY3MjY2NzVhMTgiCisKK0RFUEVORFMgPSAiYXNwZWxsIGdsaWItMi4wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2Rvd25sb2Fkcy9lbmNoYW50LyR7UFZ9L2VuY2hhbnQtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGUxMTAxMWFmZjgwMWRjNjEwNDI4MjgwNDFmYjU5YzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmZhYzllN2JlN2U5NDI0YjJjNTU3MGQ4YWZmZTU2OGRiMzlmNzU3MmMxMGVkNDhkNGUxM2NkZGYwM2Y3MDk3ZiIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hc3BlbGwtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorCQktLWVuYWJsZS1hc3BlbGwgYnJfY3ZfYmlucmVsb2M9bm8gXAorCQkiCisKK2V4cG9ydCBDWFhGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gLWxzdGRjKysgIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtsaWJkaXJ9Lyoke1NPTElCU30gJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJkaXJ9LyR7QlBOfS8qLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59Lyp7U09MSUJTREVWfSAke2xpYmRpcn0vJHtCUE59LyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5hIgorCitSREVQRU5EU18ke1BOfSArPSAiYXNwZWxsIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIzNmZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitBZGQgaW5zdGFsbC1wdGVzdCBydWxlcy4KKworU2lnbmVkLW9mZi1ieTogSm9zZXAgUHVpZ2RlbW9udCA8am9zZXAucHVpZ2RlbW9udEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdXIgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDExLTA4LTE2IDEwOjEzOjEwLjAwMDAwMDAwMCArMDIwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wNC0xMiAxODowMjoxNi40NzM3MTU4NzMgKzAyMDAKK0BAIC0zMSwzICszMSw4IEBACisgCWQ9YGRhdGUgJyslZC8lbS8lWSdgOyBcCisgCXNlZCAnc3wvXCpARElTVF9EQVRFQFwqL3wiJyIkJGQiJyJ8JyAkKHNyY2Rpcikvc3JjL3ZlcnNpb24uYyA+IFwKKyAJCSQoZGlzdGRpcikvc3JjL3ZlcnNpb24uYworKworK2luc3RhbGwtcHRlc3Q6CisrCUBmb3Igc3ViZGlyIGluICQoU1VCRElSUyk7IGRvIFwKKysJCSQoTUFLRSkgLUMgJCRzdWJkaXIgREVTVERJUj0kKERFU1RESVIpLyQkc3ViZGlyICRAOyBcCisrCWRvbmUKK2RpZmYgLXVyIGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMS0xMS0xMSAxOTozOTo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDQtMTIgMTg6MzA6NTcuMDY2MzAxMDM3ICswMjAwCitAQCAtMTMyLDQgKzEzMiwxNCBAQAorIGR0ZGVsX0xEQUREID0gLi4vc3JjL2xpYmdkYm0ubGEgLi4vY29tcGF0L2xpYmdkYm1fY29tcGF0LmxhCisgZF9jcmVhdF9jZV9MREFERCA9IC4uL3NyYy9saWJnZGJtLmxhIC4uL2NvbXBhdC9saWJnZGJtX2NvbXBhdC5sYQorIAorK2J1aWxkdGVzdHM6ICQoY2hlY2tfUFJPR1JBTVMpICQoVEVTVFNVSVRFKQorIAorK2luc3RhbGwtcHRlc3Q6ICQoY2hlY2tfUFJPR1JBTVMpICQoVEVTVFNVSVRFKQorKwlAJChJTlNUQUxMKSAtZCAkKERFU1RESVIpCisrCUBmb3IgZmlsZSBpbiAkXjsgZG8gXAorKwkJaWYgWyAteCAubGlicy8kJGZpbGUgXTsgdGhlbiBcCisrCQkJJChJTlNUQUxMX1BST0dSQU0pIC5saWJzLyQkZmlsZSAkKERFU1RESVIpLyQkZmlsZTsgXAorKwkJZWxzZSBcCisrCQkJJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKERFU1RESVIpIDsgXAorKwkJZmkgXAorKwlkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxNWRhODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biB0aGUgZ21kYiB0ZXN0IHN1aXRlCisKK2NkIHRlc3RzCisKKy4vdGVzdHN1aXRlIEFVVE9URVNUX1BBVEg9JFBXRCBhYnNfYnVpbGRkaXI9JFBXRCBDT01QQVQ9MSB8IHNlZCAncy9eW14wLTldKlwoWzAtOV1cK1wpOiBcKC4qXClcKG9rXHxwYXNzXHxza2lwcGVkXHxmYWlsXHxGQUlMRURcKVwoLipcKSQvXDM6IFwyIFw0LztzLyBcKy8gL2c7cy9eb2svUEFTUy87cy9ec2tpcHBlZC9TS0lQLztzL15mYWlsL0ZBSUwvO3MvXkZBSUxFRC9GQUlMLycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYjQzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvbGQgdmVyc2lvbl0KKworLS0tIGdkYm0tMS44LjMub3JpZy9NYWtlZmlsZS5pbgorKysrIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4KK0BAIC0xNTYsMTIgKzE1NiwxMiBAQCBpbnN0YWxsLWNvbXBhdDoKKworIGxpYmdkYm0ubGE6ICQoTE9CSlMpIGdkYm0uaAorCXJtIC1mIGxpYmdkYm0ubGEKKy0JJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyBsaWJnZGJtLmxhIC1ycGF0aCAkKGxpYmRpcikgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gbGliZ2RibS5sYSAtcnBhdGggJChsaWJkaXIpIFwKKwkJLXZlcnNpb24taW5mbyAkKFNITElCX1ZFUikgJChMT0JKUykKKworIGxpYmdkYm1fY29tcGF0LmxhOiAkKENfTE9CSlMpIGdkYm0uaAorCXJtIC1mIGxpYmdkYm1fY29tcGF0LmxhCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gbGliZ2RibV9jb21wYXQubGEgLXJwYXRoICQobGliZGlyKSBcCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyBsaWJnZGJtX2NvbXBhdC5sYSAtcnBhdGggJChsaWJkaXIpIFwKKwkJLXZlcnNpb24taW5mbyAkKFNITElCX1ZFUikgJChDX0xPQkpTKQorCisgZ2RibS5oOglnZGJtLnByb3RvIGdkYm1lcnJuby5oIGdkYm0ucHJvdG8yCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlkMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4ub3JpZwkyMDA2LTAyLTE2IDE1OjE3OjI1LjAwMDAwMDAwMCArMDAwMAorKysrIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4JMjAwNi0wMi0xNiAxNToxODowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzEsNyArMTMxLDcgQEAKKyAJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKSAkKERFU1RESVIpJChtYW4zZGlyKSBcCisgCQkkKERFU1RESVIpJChpbmZvZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm0ubGEKKysJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisgCSQoSU5TVEFMTF9EQVRBKSBnZGJtLmggXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZ2RibS5oCisgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS4zIFwKK0BAIC0xNDIsNyArMTQyLDcgQEAKKyBpbnN0YWxsLWNvbXBhdDoKKyAJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorIAkJJChERVNURElSKSQobGliZGlyKS9saWJnZGJtX2NvbXBhdC5sYQorIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RibS5oIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2RibS5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5MTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDYwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGdkYm0tMS44LjMvTWFrZWZpbGUuaW5+bWFrZWZpbGUKKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCitAQCAtMjIsNiArMjIsNyBAQAorIFRFWEkyRFZJID0gdGV4aTJkdmkKKyAKKyBERUZTID0KKytERVNURElSID0KKyAKKyAjIFdoZXJlIHRoZSBzeXN0ZW0gW25dZGJtIHJvdXRpbmVzIGFyZS4uLgorIExJQlMgPSBATElCU0AgLWxjCitAQCAtMTI3LDI2ICsxMjgsMjYgQEAKKyBwcm9nczogJChQUk9HUykKKyAKKyBpbnN0YWxsOiBsaWJnZGJtLmxhIGdkYm0uaCBnZGJtLmluZm8KKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikgJChJTlNUQUxMX1JPT1QpJChtYW4zZGlyKSBcCistCQkkKElOU1RBTExfUk9PVCkkKGluZm9kaXIpCistCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoSU5TVEFMTF9ST09UKSQobGliZGlyKS9saWJnZGJtLmxhCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApIGdkYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL2dkYm0uaAorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvZ2RibS4zIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQobWFuM2RpcikvZ2RibS4zCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9nZGJtLmluZm8gXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmZvZGlyKS9nZGJtLmluZm8KKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKSAkKERFU1RESVIpJChtYW4zZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmZvZGlyKQorKwkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm0ubGEKKysJJChJTlNUQUxMX0RBVEEpIGdkYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9nZGJtLmgKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9nZGJtLjMgXAorKwkJJChERVNURElSKSQobWFuM2RpcikvZ2RibS4zCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS5pbmZvIFwKKysJCSQoREVTVERJUikkKGluZm9kaXIpL2dkYm0uaW5mbworIAorIGluc3RhbGwtY29tcGF0OgorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUk9PVCkkKGxpYmRpcikgXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKQorKwkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJkaXIpIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpCisgCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtX2NvbXBhdC5sYSBcCistCQkkKElOU1RBTExfUk9PVCkkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL2RibS5oIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvZGJtLmgKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL25kYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL25kYm0uaAorKwkJJChERVNURElSKSQobGliZGlyKS9saWJnZGJtX2NvbXBhdC5sYQorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RibS5oIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2RibS5oCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbmRibS5oIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL25kYm0uaAorIAorICNsaWJnZGJtLmE6ICQoT0JKUykgZ2RibS5oCisgIwlybSAtZiBsaWJnZGJtLmEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmOGM1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiS2V5L3ZhbHVlIGRhdGFiYXNlIGxpYnJhcnkgd2l0aCBleHRlbnNpYmxlIGhhc2hpbmciCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RibS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQxZGExYjlmZTQyZTY0MmNiYjJjMjRkNWUwYzRkMjQiCisKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYm0vZ2RibS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MmM4MzI2ODBjZjA5OTljYWVkYmU1YjI2NWM4YzFiZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDkxMmY0NGYwNWQwYjE1YTRhNWQ5NmE3NmY4NTJlOTA1ZDA1MWJiODgwMjJmY2RmZDk4YjQzYmUwOTNlM2MzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gbGliX3BhY2thZ2UgcHRlc3QKKworIyBOZWVkZWQgZm9yIGRibSBweXRob24gbW9kdWxlCitFWFRSQV9PRUNPTkYgPSAiLWVuYWJsZS1saWJnZGJtLWNvbXBhdCIKKworIyBTdG9wIHByZXNlbmNlIG9mIGRibS9uYmRtIG9uIHRoZSBob3N0IGNvbnRhbWluYXRpbmcgYnVpbGRzCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfbGliX25kYm1fbWFpbj1ubyBhY19jdl9saWJfZGJtX21haW49bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgQ3JlYXRlIGEgc3ltbGluayB0byBuZGJtLmggYW5kIGdkYm0uaCBpbiBpbmNsdWRlL2dkYm0gdG8gbGV0IG90aGVyIHBhY2thZ2VzIHRvIGZpbmQKKyAgICAjIHRoZXNlIGhlYWRlcnMKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2dkYm0KKyAgICBsbiAtc2YgLi4vbmRibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL25kYm0uaAorICAgIGxuIC1zZiAuLi9nZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vZ2RibS5oCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJkaWZmdXRpbHMiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgb2VfcnVubWFrZSAtQyB0ZXN0cyBidWlsZHRlc3RzCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1jb21wYXQgXAorICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tY29tcGF0ID0gIiR7bGliZGlyfS9saWJnZGJtX2NvbXBhdCR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMWI2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjguMy5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kOGUyMGVlY2UyMTRkZjhlZjk1M2VkNTg1Nzg2MjE1MCIKKworUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbC1tb2RlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDFiMWQ1YzAyNDViMWMwMGFmZjkyZGE3NTFlOWFhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYzM0MDMzOGEyZTI4YjQwMDU4YWI5ZWI1MzU0YTIxZDUzZjg4YTE1ODJlYTIxYmEwYmIxODVjMzdhMjgxZGM5IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vZ2RibQorICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2RibS5oICR7RH0ke2luY2x1ZGVkaXJ9LworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L25kYm0uaCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCisgICAgIyB0aGVzZSBoZWFkZXJzCisgICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKKyAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2Rpc2FibGUtc3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVjYjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVGhpcyBwYXRjaCB3YXMgcmVtb3ZlZCBpbiBmMTgxYzZjZThiMyB3aGVuIGdtcCA0LjIuMSB3YXMgbWlzdGFrZW5seQorZHJvcHBlZC4KKworVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gcGF0Y2hlcyBmb3IgYW5jaWVudCB2ZXJzaW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisjICJleHRlcm4gaW5saW5lIiBpbiB0cmFkaXRpb25hbCBnY2MgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIAorIyBpbmxpbmVkIHdoZXJldmVyIGl0J3Mgc2Vlbiwgd2hpbGUgaW4gQzk5LCAiZXh0ZXJuIGlubGluZSIgbWVhbnMgdGhhdCBpCisjIHRoZSBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBpbmxpbmVkIHdoZXJlIHRoZSBpbmxpbmUgZGVmaW5pdGlvbiBpcyAKKyMgc2VlbiB3aGlsZSBpbiBvdGhlciBwbGFjZXMgaXQncyBub3QgaW5saW5lZDoKKyMgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDA2LTExL21zZzAwMDA2Lmh0bWwKKyMKKyMgZ21wIGNoZWNrcyAiLS1zdGQ9Z251OTkiIHRvIHVzZSBDOTkgY29udmVudGlvbiBob3dldmVyIGl0IGludGVybmFsbHkgCisjIGRlZmluZXMgc29tZSAiZXh0ZXJuIGlubGluZSIgZnVuY3Rpb25zIGluIGdtcC5oLCB3aGljaCBpcyBpbmNsdWRlZAorIyBieSBtYWlubHkgLmMgZmlsZXMgYW5kIGZpbmFsbHkgbGVhZCBhIGZsb29kIG9mIHJlZGVmaW5pdGlvbiBmdW5jdGlvbgorIyBlcnJvcnMgd2hlbiBsaW5raW5nIG9iamVjdHMgdG9nZXRoZXIuCisjCisjIFNvIGRpc2FibGUgQzk5L0FOU0kgZGV0ZWN0aW9uIHRvIHN0aWNrIHRvIHRyYW5kaXRpb25hbCBnY2MgYmVoYXZpb3IKKyMKKyMgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTEzCisjCisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNDUwY2M5Mi4uYWFiMGI1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTg2OSw5ICsxODY5LDcgQEAgQUNfU1VCU1QoREVGTl9MT05HX0xPTkdfTElNQikKKyAKKyAjIFRoZSBDIGNvbXBpbGVyIGFuZCBwcmVwcm9jZXNzb3IsIHB1dCBpbnRvIEFOU0kgbW9kZSBpZiBwb3NzaWJsZS4KKyBBQ19QUk9HX0NDCistQUNfUFJPR19DQ19TVERDCisgQUNfUFJPR19DUFAKKy1HTVBfSF9BTlNJCisgCisgCisgIyBUaGUgQyBjb21waWxlciBvbiB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgYXNzb2NpYXRlZCB0ZXN0cy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2FlZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjIyNDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgTWFrZWZpbGUuYW06Mjg6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDIKKworCitUaGlzIHBhdGNoIHdhcyByZW1vdmVkIGluIGYxODFjNmNlOGIzIHdoZW4gZ21wIDQuMi4xIHdhcyBtaXN0YWtlbmx5Citkcm9wcGVkLgorCitVcHN0cmVhbSBpcyBub3QgaW50ZXJlc3RlZCBpbiBwYXRjaGVzIGZvciBhbmNpZW50IHZlcnNpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworSW5kZXg6IGdtcC00LjIuMS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNC4yLjEub3JpZy9jb25maWd1cmUuaW4KKysrKyBnbXAtNC4yLjEvY29uZmlndXJlLmluCitAQCAtNjcsNyArNjcsNyBAQCBkbmwKKyBkbmwgIE5vdGUgdGhhdCB0aGVyZSdzIGEgY29weSBvZiB0aGVzZSBvcHRpb25zIGluIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuYW0sCisgZG5sICBzbyB1cGRhdGUgdGhlcmUgdG9vIGlmIGNoYW5naW5nIGFueXRoaW5nLgorIGRubAorLUFNX0lOSVRfQVVUT01BS0UoWzEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzICQodG9wX2J1aWxkZGlyKS9hbnNpMmtucl0pCisrQU1fSU5JVF9BVVRPTUFLRShbMS44IGdudSBuby1kZXBlbmRlbmNpZXNdKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmg6Y29uZmlnLmluKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorQEAgLTIwMjIsOSArMjAyMiw2IEBAIGZpCisgZWNobyAiICAgICAgTVBOX1BBVEg9XCIkcGF0aFwiIgorIAorIAorLSMgQXV0b21ha2UgYW5zaTJrbnIgc3VwcG9ydC4KKy1BTV9DX1BST1RPVFlQRVMKKy0KKyBHTVBfUFJPR19BUgorIEdNUF9QUk9HX05NCisgCitJbmRleDogZ21wLTQuMi4xL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTQuMi4xLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnbXAtNC4yLjEvTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBACisgIyBNYWtlZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGJ1dCBoZXJlIHdlIG11c3Qgb21pdCBpdCBzbyBhdXRvbWFrZSBnaXZlcworICMgdGhlIGFjdHVhbCBhbnNpMmtuciBidWlsZCBydWxlLCBub3QgImNkICQodG9wX2J1aWxkZGlyKSAmJiBtYWtlIGFuc2kya25yIi4KKyAjCistQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzCisgCisgCisgIyBMaWJ0b29sIC12ZXJzaW9uLWluZm8gZm9yIGxpYmdtcC5sYSBhbmQgbGlibXAubGEuICBTZWUgIlZlcnNpb25pbmciIGluIHRoZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0ZDEyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnbXAtNS4wLjMvbG9uZ2xvbmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC01LjAuMy5vcmlnL2xvbmdsb25nLmgKKysrKyBnbXAtNS4wLjMvbG9uZ2xvbmcuaAorQEAgLTk5NCw4ICs5OTQsMTAgQEAgZXh0ZXJuIFVXdHlwZSBfX01QTih1ZGl2X3Fybm5kKSBfUFJPVE8gKAorICAgIGNvdW50IGlzIG9ubHkgYW4gaW50LiAqLworICNkZWZpbmUgY291bnRfdHJhaWxpbmdfemVyb3MoY291bnQsIHgpCQkJCQlcCisgICBkbyB7CQkJCQkJCQkJXAorKyAgICBVREl0eXBlIF9fY2J0bXA7CQkJCQkJCVwKKyAgICAgQVNTRVJUICgoeCkgIT0gMCk7CQkJCQkJCVwKKy0gICAgX19hc21fXyAoImJzZnEgJTEsJXEwIiA6ICI9ciIgKGNvdW50KSA6ICJybSIgKChVREl0eXBlKSh4KSkpOwlcCisrICAgIF9fYXNtX18gKCJic2ZxICUxLCUwIiA6ICI9ciIgKF9fY2J0bXApIDogInJtIiAoKFVESXR5cGUpKHgpKSk7CVwKKysgICAgKGNvdW50KSA9IF9fY2J0bXA7CQkJCQkJCVwKKyAgIH0gd2hpbGUgKDApCisgI2VuZGlmIC8qIHg4Nl82NCAqLworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxMzg2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK0FwcGVuZCB0aGUgdXNlciBwcm92aWRlZCBmbGFncyB0byB0aGUgYXV0by1kZXRlY3RlZCBvbmVzLgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBnbXAtNS4xLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTUuMS4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDItMTEgMTU6MDU6NDQuOTI1MjAyNDAzICswMjAwCisrKysgZ21wLTUuMS4xL2NvbmZpZ3VyZS5hYwkyMDE0LTAyLTExIDE1OjE5OjAzLjkxODUxMTM5OCArMDIwMAorQEAgLTE3NDUsOCArMTc0NSwxMiBAQAorIEVPRgorIAorIAorLXRlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KKy10ZXN0X0NQUEZMQUdTPSR7Q1BQRkxBR1Mrc2V0fQorK3Rlc3RfQ0ZMQUdTPQorK3Rlc3RfQ1BQRkxBR1M9CisrCisrdXNlcl9DRkxBR1M9JENGTEFHUworK3VzZXJfQ1BQRkxBR1M9JENQUEZMQUdTCisrdXNlcl9DWFhGTEFHUz0kQ1hYRkxBR1MKKyAKKyBmb3IgYWJpIGluICRhYmlsaXN0OyBkbworICAgYWJpX2xhc3Q9IiRhYmkiCitAQCAtMjE3NSw3ICsyMTc5LDcgQEAKKyB3YW50X2N4eD1ubworIEFDX1BST0dfQ1hYCisgaWYgdGVzdCAkZW5hYmxlX2N4eCAhPSBubzsgdGhlbgorLSAgdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKysgIHRlc3RfQ1hYRkxBR1M9CisgCisgICBlY2hvICJDWFhGTEFHUyBjaG9zZW4gYnkgYXV0b2NvbmY6ICRDWFhGTEFHUyIgPiZBU19NRVNTQUdFX0xPR19GRCgpCisgICBjeHhmbGFnc19hY19wcm9nX2N4eD0kQ1hYRkxBR1MKK0BAIC0yMjAyLDcgKzIyMDYsNyBAQAorICAgIyBBdXRvbWFrZSBpbmNsdWRlcyAkQ1BQRkxBR1MgaW4gYSBDKysgY29tcGlsZSwgc28gd2UgZG8gdGhlIHNhbWUgaGVyZS4KKyAgICMKKyAgIGZvciBjeHhmbGFnc19jaG9pY2UgaW4gJGN4eGZsYWdzX2xpc3Q7IGRvCistICAgIGV2YWwgQ1hYRkxBR1M9XCJcJGN4eGZsYWdzXyRjeHhmbGFnc19jaG9pY2VcIgorKyAgICBldmFsIENYWEZMQUdTPVwiXCRjeHhmbGFnc18kY3h4ZmxhZ3NfY2hvaWNlICR1c2VyX0NYWEZMQUdTXCIKKyAgICAgR01QX1BST0dfQ1hYX1dPUktTKCRDWFggJENQUEZMQUdTICRDWFhGTEFHUywKKyAgICAgICBbd2FudF9jeHg9eWVzCisgICAgICAgYnJlYWtdKQorQEAgLTIyOTIsNiArMjI5Niw4IEBACisgIyAgZG9uZQorIGZpCisgCisrQ0ZMQUdTPSIkQ0ZMQUdTICR1c2VyX0NGTEFHUyIKKytDUFBGTEFHUz0iJENQUEZMQUdTICR1c2VyX0NQUEZMQUdTIgorIAorIGNhdCA+JkFTX01FU1NBR0VfTE9HX0ZEKCkgPDxFT0YKKyBEZWNpZGVkOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlkYTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwyMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIHRvIGFwcGx5IHRvIGdtcC01LjEuMAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCistLS0KKyBhY2luY2x1ZGUubTQgfCAzMiArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIGNvbmZpZ3VyZS5hYyB8IDI2ICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNAoraW5kZXggMjI3NzEyYS4uMTk5YWE2ZiAxMDA2NDQKKy0tLSBhL2FjaW5jbHVkZS5tNAorKysrIGIvYWNpbmNsdWRlLm00CitAQCAtNDAsMjkgKzQwLDI5IEBAIGRubCAgICBhX291dC5leGUgLSBPcGVuVk1TIERFQyBDIGNhbGxlZCB2aWEgR05WIHdyYXBwZXIgKGdudi5zb3VyY2Vmb3JnZS5uZXQpCisgZG5sICAgIGNvbmZ0ZXN0LmV4ZSAtIHZhcmlvdXMgRE9TIGNvbXBpbGVycworIAorIAorLWRlZmluZShJQTY0X1BBVFRFUk4sCisrZGVmaW5lKFtJQTY0X1BBVFRFUk5dLAorIFtbaWE2NCotKi0qIHwgaXRhbml1bS0qLSogfCBpdGFuaXVtMi0qLSpdXSkKKyAKKyBkbmwgIE5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbWF0Y2ggbTY4MTEsIG02ODEyLCBtNjhoYzExIGFuZCBtNjhoYzEyLCBhbGwKKyBkbmwgIG9mIHdoaWNoIGNvbmZpZy5zdWIgYWNjZXB0cy4gIChUaG91Z2ggbm9uZSBvZiB3aGljaCBhcmUgbGlrZWx5IHRvIHdvcmsKKyBkbmwgIHdpdGggR01QLikKKyBkbmwKKy1kZWZpbmUoTTY4S19QQVRURVJOLAorK2RlZmluZShbTTY4S19QQVRURVJOXSwKKyBbW202OGstKi0qIHwgbTY4WzAtOV1bMC05XVswLTldLSotKl1dKQorIAorLWRlZmluZShQT1dFUlBDNjRfUEFUVEVSTiwKKytkZWZpbmUoW1BPV0VSUEM2NF9QQVRURVJOXSwKKyBbW3Bvd2VycGM2NC0qLSogfCBwb3dlcnBjNjRsZS0qLSogfCBwb3dlcnBjNjIwLSotKiB8IHBvd2VycGM2MzAtKi0qIHwgcG93ZXJwYzk3MC0qLSogfCBwb3dlclszLTldLSotKl1dKQorIAorLWRlZmluZShTMzkwX1BBVFRFUk4sCisrZGVmaW5lKFtTMzkwX1BBVFRFUk5dLAorIFtbczM5MC0qLSogfCB6OTAwZXNhLSotKiB8IHo5OTBlc2EtKi0qIHwgejllc2EtKi0qIHwgejEwZXNhLSotKiB8IHoxOTZlc2EtKi0qXV0pCisgCistZGVmaW5lKFMzOTBYX1BBVFRFUk4sCisrZGVmaW5lKFtTMzkwWF9QQVRURVJOXSwKKyBbW3MzOTB4LSotKiB8IHo5MDAtKi0qIHwgejk5MC0qLSogfCB6OS0qLSogfCB6MTAtKi0qIHwgejE5Ni0qLSpdXSkKKyAKKy1kZWZpbmUoWDg2X1BBVFRFUk4sCisrZGVmaW5lKFtYODZfUEFUVEVSTl0sCisgW1tpPzg2Ki0qLSogfCBrWzUtOF0qLSotKiB8IHBlbnRpdW0qLSotKiB8IGF0aGxvbi0qLSogfCB2aWFjMyotKi0qIHwgZ2VvZGUqLSotKiB8IGF0b20tKi0qXV0pCisgCistZGVmaW5lKFg4Nl82NF9QQVRURVJOLAorK2RlZmluZShbWDg2XzY0X1BBVFRFUk5dLAorIFtbYXRobG9uNjQtKi0qIHwgazgtKi0qIHwgazEwLSotKiB8IGJvYmNhdC0qLSogfCBqYWd1YXItKi0qIHwgYnVsbGRvemVyLSotKiB8IHBpbGVkcml2ZXItKi0qIHwgc3RlYW1yb2xsZXItKi0qIHwgZXhjYXZhdG9yLSotKiB8IHBlbnRpdW00LSotKiB8IGF0b20tKi0qIHwgY29yZTItKi0qIHwgY29yZWkqLSotKiB8IHg4Nl82NC0qLSogfCBuYW5vLSotKl1dKQorIAorIGRubCAgR01QX0ZBVF9TVUZGSVgoRFNUVkFSLCBESVJFQ1RPUlkpCitAQCAtODAsNyArODAsNyBAQCBkbmwgICAgICB4ODYgICAgICAgICAtPiAgeDg2CisgZG5sICAgICAgeDg2L2s2ICAgICAgLT4gIGs2CisgZG5sICAgICAgeDg2L2s2L21teCAgLT4gIGs2X21teAorIAorLWRlZmluZShHTVBfRkFUX1NVRkZJWCwKKytkZWZpbmUoW0dNUF9GQVRfU1VGRklYXSwKKyBbWyQxPWBlY2hvICQyIHwgc2VkIC1lICcvXC8vczpeW14vXSovOjonIC1lICdzOltcXC9dOl86ZydgXV0pCisgCisgCitAQCAtODksNyArODksNyBAQCBkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbmwgIEVtaXQgY29kZSB0byByZW1vdmUgYW55IG9jY3VycmVuY2Ugb2YgSVRFTSBmcm9tICRMSVNUVkFSLiAgSVRFTSBjYW4gYmUgYQorIGRubCAgc2hlbGwgZXhwcmVzc2lvbiBsaWtlICRmb28gaWYgZGVzaXJlZC4KKyAKKy1kZWZpbmUoR01QX1JFTU9WRV9GUk9NX0xJU1QsCisrZGVmaW5lKFtHTVBfUkVNT1ZFX0ZST01fTElTVF0sCisgW3JlbW92ZV9mcm9tX2xpc3RfdG1wPQorIGZvciByZW1vdmVfZnJvbV9saXN0X2kgaW4gJFtdWyQxXTsgZG8KKyAgIGlmIHRlc3QgJHJlbW92ZV9mcm9tX2xpc3RfaSA9IFskMl07IHRoZW4gOjsKK0BAIC0xMDUsMTIgKzEwNSwxMiBAQCBkbmwgIEdNUF9TVFJJUF9QQVRIKHN1YmRpcikKKyBkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbmwgIFN0cmlwIGVudHJpZXMgKi9zdWJkaXIgZnJvbSAkcGF0aCBhbmQgJGZhdF9wYXRoLgorIAorLWRlZmluZShHTVBfU1RSSVBfUEFUSCwKKytkZWZpbmUoW0dNUF9TVFJJUF9QQVRIXSwKKyBbR01QX1NUUklQX1BBVEhfVkFSKHBhdGgsIFskMV0pCisgR01QX1NUUklQX1BBVEhfVkFSKGZhdF9wYXRoLCBbJDFdKQorIF0pCisgCistZGVmaW5lKEdNUF9TVFJJUF9QQVRIX1ZBUiwKKytkZWZpbmUoW0dNUF9TVFJJUF9QQVRIX1ZBUl0sCisgW3RtcF9wYXRoPQorIGZvciBpIGluICRbXVskMV07IGRvCisgICBjYXNlICRpIGluCitAQCAtMTMxLDcgKzEzMSw3IEBAIGRubAorIGRubCAgRHVtbXkgdmFsdWUgZm9yIEdNUF9MSU1CX0JJVFMgaXMgZW5vdWdoCisgZG5sICBmb3IgYWxsIGN1cnJlbnQgY29uZmlndXJlLXRpbWUgdXNlcyBvZiBnbXAuaC4KKyAKKy1kZWZpbmUoR01QX0lOQ0xVREVfR01QX0gsCisrZGVmaW5lKFtHTVBfSU5DTFVERV9HTVBfSF0sCisgW1sjZGVmaW5lIF9fR01QX1dJVEhJTl9DT05GSUdVUkUgMSAgIC8qIGlnbm9yZSB0ZW1wbGF0ZSBzdHVmZiAqLworICNkZWZpbmUgR01QX05BSUxfQklUUyAkR01QX05BSUxfQklUUworICNkZWZpbmUgR01QX0xJTUJfQklUUyAxMjMKK0BAIC0xNDYsNyArMTQ2LDcgQEAgZG5sICBFeHBhbmQgYXQgYXV0b2NvbmYgdGltZSB0byB0aGUgdmFsdWUgb2YgYSAiI2RlZmluZSBOQU1FIiBmcm9tIHRoZSBnaXZlbgorIGRubCAgRklMRS4gIFRoZSByZWdleHBzIGhlcmUgYXJlbid0IHZlcnkgcnVnZ2VkLCBidXQgYXJlIGVub3VnaCBmb3IgZ21wLgorIGRubCAgL2Rldi9udWxsIGFzIGEgcGFyYW1ldGVyIHByZXZlbnRzIGEgaGFuZyBpZiAkMiBpcyBhY2NpZGVudGFsbHkgb21pdHRlZC4KKyAKKy1kZWZpbmUoR01QX0hFQURFUl9HRVRWQUwsCisrZGVmaW5lKFtHTVBfSEVBREVSX0dFVFZBTF0sCisgW3BhdHN1YnN0KHBhdHN1YnN0KAorIGVzeXNjbWQoW2dyZXAgIl4jZGVmaW5lICQxICIgJDIgL2Rldi9udWxsIDI+L2Rldi9udWxsXSksCisgW14uKiQxWyAJXStdLFtdKSwKK0BAIC0xNjAsNyArMTYwLDcgQEAgZG5sICBUaGUgZ21wIHZlcnNpb24gbnVtYmVyLCBleHRyYWN0ZWQgZnJvbSB0aGUgI2RlZmluZXMgaW4gZ21wLWguaW4gYXQKKyBkbmwgIGF1dG9jb25mIHRpbWUuICBUd28gZGlnaXRzIGxpa2UgMy4wIGlmIHBhdGNobGV2ZWwgPD0gMCwgb3IgdGhyZWUgZGlnaXRzCisgZG5sICBsaWtlIDMuMC4xIGlmIHBhdGNobGV2ZWwgPiAwLgorIAorLWRlZmluZShHTVBfVkVSU0lPTiwKKytkZWZpbmUoW0dNUF9WRVJTSU9OXSwKKyBbR01QX0hFQURFUl9HRVRWQUwoX19HTlVfTVBfVkVSU0lPTixnbXAtaC5pbilbXWRubAorIC5HTVBfSEVBREVSX0dFVFZBTChfX0dOVV9NUF9WRVJTSU9OX01JTk9SLGdtcC1oLmluKVtdZG5sCisgLkdNUF9IRUFERVJfR0VUVkFMKF9fR05VX01QX1ZFUlNJT05fUEFUQ0hMRVZFTCxnbXAtaC5pbildKQorQEAgLTE1MjQsNyArMTUyNCw5IEBAIGVzYWMKKyBlY2hvIFsiZGVmaW5lKDxDT05GSUdfVE9QX1NSQ0RJUj4sPFxgJHRtcCc+KSJdID4+JGdtcF90bXBjb25maWdtNAorIAorICMgQWxsIENQVXMgdXNlIGFzbS1kZWZzLm00CistZWNobyBbImluY2x1ZGVdWyhDT05GSUdfVE9QX1NSQ0RJUlxgL21wbi9hc20tZGVmcy5tNCcpIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorK2VjaG8gLW4gWyJpbmNsdWRlKCJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIC1uIFsiQ09ORklHX1RPUF9TUkNESVJcYC9tcG4vYXNtLWRlZnMubTQnIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorK2VjaG8gWyIpIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorIF0pCisgCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA2NGIyYzUwLi5mMDdiODIxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zOSwxNCArMzksNiBAQCBBQ19SRVZJU0lPTigkUmV2aXNpb24kKQorIEFDX1BSRVJFUSgyLjU5KQorIEFDX0lOSVQoR05VIE1QLCBHTVBfVkVSU0lPTiwgW2dtcC1idWdzQGdtcGxpYi5vcmcsIHNlZSBodHRwczovL2dtcGxpYi5vcmcvbWFudWFsL1JlcG9ydGluZy1CdWdzLmh0bWxdLCBnbXApCisgQUNfQ09ORklHX1NSQ0RJUihnbXAtaW1wbC5oKQorLW00X3BhdHRlcm5fZm9yYmlkKFteWyBcdF0qR01QX10pCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTERGTEFHUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9MSU1CX0JJVFMpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTVBBUkFNX0hfU1VHR0VTVCkKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9OQUlMX0JJVFMpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTlVNQl9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX05PTlNURF9BQkkpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfQ1BVX1RZUEUpCisgCisgIyBJZiAtLXRhcmdldCBpcyBub3QgdXNlZCB0aGVuICR0YXJnZXRfYWxpYXMgaXMgZW1wdHksIGJ1dCBpZiBzYXkKKyAjICIuL2NvbmZpZ3VyZSBhdGhsb24tcGMtZnJlZWJzZDMuNSIgaXMgdXNlZCwgdGhlbiBhbGwgdGhyZWUgb2YKK0BAIC0zNDgsNyArMzQwLDcgQEAgQUhfVkVSQkFUSU0oW0hBVkVfSE9TVF9DUFVfMV0sCisgIyBBZnRlciBHTVAgc3BlY2lmaWMgc2VhcmNoZXMgYW5kIHRlc3RzLCB0aGUgc3RhbmRhcmQgYXV0b2NvbmYgQUNfUFJPR19DQyBpcworICMgY2FsbGVkLiAgVXNlciBzZWxlY3Rpb25zIG9mIENDIGV0YyBhcmUgcmVzcGVjdGVkLgorICMKKy0jIENhcmUgaXMgdGFrZW4gbm90IHRvIHVzZSBtYWNyb3MgbGlrZSBBQ19UUllfQ09NUElMRSBkdXJpbmcgdGhlIEdNUAorKyMgQ2FyZSBpcyB0YWtlbiBub3QgdG8gdXNlIG1hY3JvcyBsaWtlIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLFtdLFtdKSBkdXJpbmcgdGhlIEdNUAorICMgcHJlLXRlc3RpbmcsIHNpbmNlIHRoZXkgb2YgY291cnNlIGRlcGVuZCBvbiBBQ19QUk9HX0NDLCBhbmQgYWxzbyBzb21lIG9mCisgIyB0aGVtIGNhY2hlIHRoZWlyIHJlc3VsdHMsIHdoaWNoIGlzIG5vdCB3YW50ZWQuCisgIworQEAgLTQ0MCw3ICs0MzIsNyBAQCBhYmlsaXN0PSJzdGFuZGFyZCIKKyAjIEZJWE1FOiBXZSdkIGxpa2UgdG8gcHJlZmVyIGFuIEFOU0kgY29tcGlsZXIsIHBlcmhhcHMgYnkgcHJlZmVycmluZworICMgYzg5IG92ZXIgY2MgaGVyZS4gIEJ1dCBub3RlIHRoYXQgb24gSFAtVVggYzg5IHByb3ZpZGVzIGEgY2FzdHJhdGVkCisgIyBlbnZpcm9ubWVudCwgYW5kIHdvdWxkIHdhbnQgdG8gYmUgZXhjbHVkZWQgc29tZWhvdy4gIE1heWJlCistIyBBQ19QUk9HX0NDX1NUREMgYWxyZWFkeSBkb2VzIGVub3VnaCB0byBzdGljayBjYyBpbnRvIEFOU0kgbW9kZSBhbmQKKysjICBhbHJlYWR5IGRvZXMgZW5vdWdoIHRvIHN0aWNrIGNjIGludG8gQU5TSSBtb2RlIGFuZAorICMgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeS4KKyAjCisgY2NsaXN0PSJnY2MgY2MiCitAQCAtMTg0Myw3ICsxODM1LDcgQEAgZXNhYworIENGTEFHU19vcl91bnNldD0ke0NGTEFHUy0nKHVuc2V0KSd9CisgQ1BQRkxBR1Nfb3JfdW5zZXQ9JHtDUFBGTEFHUy0nKHVuc2V0KSd9CisgCistY2F0ID4mQUNfRkRfQ0MgPDxFT0YKKytjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgVXNlcjoKKyBBQkk9JEFCSQorIENDPSRDQworQEAgLTIyNjQsNyArMjI1Niw2IEBAIEFDX1NVQlNUKERFRk5fTE9OR19MT05HX0xJTUIpCisgCisgIyBUaGUgQyBjb21waWxlciBhbmQgcHJlcHJvY2Vzc29yLCBwdXQgaW50byBBTlNJIG1vZGUgaWYgcG9zc2libGUuCisgQUNfUFJPR19DQworLUFDX1BST0dfQ0NfU1REQworIEFDX1BST0dfQ1BQCisgCisgCitAQCAtMjI4NiwxMSArMjI3NywxMSBAQCBBQ19TVUJTVChDQ0FTKQorIAorICMgVGhlIEMrKyBjb21waWxlciwgaWYgZGVzaXJlZC4KKyB3YW50X2N4eD1ubworK0FDX1BST0dfQ1hYCisgaWYgdGVzdCAkZW5hYmxlX2N4eCAhPSBubzsgdGhlbgorICAgdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKy0gIEFDX1BST0dfQ1hYCisgCistICBlY2hvICJDWFhGTEFHUyBjaG9zZW4gYnkgYXV0b2NvbmY6ICRDWFhGTEFHUyIgPiZBQ19GRF9DQworKyAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQVNfTUVTU0FHRV9MT0dfRkQoKQorICAgY3h4ZmxhZ3NfYWNfcHJvZ19jeHg9JENYWEZMQUdTCisgICBjeHhmbGFnc19saXN0PWFjX3Byb2dfY3h4CisgCitAQCAtMjQxMiw3ICsyNDAzLDcgQEAgaWYgdGVzdCAiJGVuYWJsZV9hc3NlbWJseSIgPSAibm8iOyB0aGVuCisgZmkKKyAKKyAKKy1jYXQgPiZBQ19GRF9DQyA8PEVPRgorK2NhdCA+JkFTX01FU1NBR0VfTE9HX0ZEKCkgPDxFT0YKKyBEZWNpZGVkOgorIEFCST0kQUJJCisgQ0M9JENDCitAQCAtMzc4MSw3ICszNzcyLDcgQEAgR01QX0ZJTklTSAorICMgRklYTUU6IFVwY29taW5nIHZlcnNpb24gb2YgYXV0b2NvbmYvYXV0b21ha2UgbWF5IG5vdCBsaWtlIGJyb2tlbiBsaW5lcy4KKyAjICAgICAgICBSaWdodCBub3cgYXV0b21ha2UgaXNuJ3QgYWNjZXB0aW5nIHRoZSBuZXcgQUNfQ09ORklHX0ZJTEVTIHNjaGVtZS4KKyAKKy1BQ19PVVRQVVQoTWFrZWZpbGUJCQkJCQkJXAorK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUJCQkJCQkJXAorICAgbXBmL01ha2VmaWxlIG1wbi9NYWtlZmlsZSBtcHEvTWFrZWZpbGUJCQkJXAorICAgbXB6L01ha2VmaWxlIHByaW50Zi9NYWtlZmlsZSBzY2FuZi9NYWtlZmlsZSByYW5kL01ha2VmaWxlIGN4eC9NYWtlZmlsZSBcCisgICB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9kZXZlbC9NYWtlZmlsZQkJCQkJXAorQEAgLTM3OTAsNyArMzc4MSw4IEBAIEFDX09VVFBVVChNYWtlZmlsZQkJCQkJCQlcCisgICB0ZXN0cy9jeHgvTWFrZWZpbGUJCQkJCQkJXAorICAgZG9jL01ha2VmaWxlIHR1bmUvTWFrZWZpbGUJCQkJCQlcCisgICBkZW1vcy9NYWtlZmlsZSBkZW1vcy9jYWxjL01ha2VmaWxlIGRlbW9zL2V4cHIvTWFrZWZpbGUJCVwKKy0gIGdtcC5oOmdtcC1oLmluKQorKyAgZ21wLmg6Z21wLWguaW5dKQorK0FDX09VVFBVVAorIAorIEFDX01TR19OT1RJQ0UoW3N1bW1hcnkgb2YgYnVpbGQgb3B0aW9uczoKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2dtcC02LjAuMC1wcGM2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEzYjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPgorCitUaGlzIHBhdGNoIHdpdGggcHVsbGVkIGZyb20gZ21wLgoraHR0cHM6Ly9nbXBsaWIub3JnL3JlcG8vZ21wL3Jldi80YTZkMjU4YjQ2N2YKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBnbXBsaWIub3JnPgorIyBEYXRlIDEzOTU4MzUwNjggLTM2MDAKKyMgTm9kZSBJRCA0YTZkMjU4YjQ2N2Y2NjFkYTA4OTRjYzYwZWNkMDYwZjJlM2M2N2M3CisjIFBhcmVudCAgMzAxY2UyNzg4ODI2YTJkNGQyNzI1YmQ1Y2YwMWU5OTg2MzhkYjM3YQorUHJvdmlkZSBkZWZhdWx0IGZvciBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xELgorCitkaWZmIC1yIDMwMWNlMjc4ODgyNiAtciA0YTZkMjU4YjQ2N2YgbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtCistLS0gYS9tcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMS5hc20gICAgVHVlIE1hciAyNSAxNTozNDo1MiAyMDE0ICswMTAwCisrKysgYi9tcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMS5hc20gICAgV2VkIE1hciAyNiAxMjo1Nzo0OCAyMDE0ICswMTAwCitAQCAtNDMsNiArNDMsOSBAQAorIGRlZmluZShgbicsICAgICBgcjQnKQorIGRlZmluZShgdjAnLCAgICBgcjUnKQorCisraWZkZWYoYEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQnLCwKKysgIGBkZWZpbmUoYEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQnLDMwKScpCisrCisgRVhURVJOX0ZVTkMobXBuX21vZF8xKQorIEVYVEVSTl9GVU5DKG1wbl9tb2RleGFjdF8xY19vZGQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDkwNGEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdtcC00LjIuNC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC00LjIuNC5vcmlnL01ha2VmaWxlLmFtCTIwMDgtMDktMTAgMTk6MzE6MjcuMDAwMDAwMDAwICswMDAwCisrKysgZ21wLTQuMi40L01ha2VmaWxlLmFtCTIwMDktMDctMDYgMjA6MTk6MTkuMDAwMDAwMDAwICswMDAwCitAQCAtMTA2LDcgKzEwNiw3IEBACisgIyBidXQgYW55b25lIGtub3dsZWRnYWJsZSBlbm91Z2ggdG8gYmUgcGxheWluZyB3aXRoIGV4ZWNfcHJlZml4IHdpbGwgYmUgYWJsZQorICMgdG8gYWRkcmVzcyB0aGF0LgorICMKKy1pbmNsdWRlZXhlY2RpciA9ICQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKytpbmNsdWRlZXhlY2RpciA9ICQoaW5jbHVkZWRpcikKKyBpbmNsdWRlX0hFQURFUlMgPSAkKEdNUFhYX0hFQURFUlNfT1BUSU9OKQorIG5vZGlzdF9pbmNsdWRlZXhlY19IRUFERVJTID0gZ21wLmggJChNUEJTRF9IRUFERVJTX09QVElPTikKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJnbXAubGEgJChHTVBYWF9MVExJQlJBUklFU19PUFRJT04pICQoTVBCU0RfTFRMSUJSQVJJRVNfT1BUSU9OKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzUyYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMKQEAgLTAsMCArMSwxNiBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiR05VIG11bHRpcHJlY2lzaW9uIGFyaXRobWV0aWMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdNUCBpcyBhIGZyZWUgbGlicmFyeSBmb3IgYXJiaXRyYXJ5IHByZWNpc2lvbiBhcml0aG1ldGljLCBvcGVyYXRpbmcgb24gc2lnbmVkIGludGVnZXJzLCByYXRpb25hbCBudW1iZXJzLCBhbmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9nbXBsaWIub3JnLyIKKworUkVWSVNJT04gPz0gIiIKK1NSQ19VUkkgPSAiaHR0cHM6Ly9nbXBsaWIub3JnL2Rvd25sb2FkLyR7QlBOfS8ke0JQfSR7UkVWSVNJT059LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcmVhZGxpbmVdID0gIi0td2l0aC1yZWFkbGluZT15ZXMsLS13aXRoLXJlYWRsaW5lPW5vLHJlYWRsaW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4YzAxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBnbXAuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg5MmY1NjlhNTU1YmE5YzA3YTU2OGE3YzBjNGZhNjNhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbXAtaC5pbjtiZWdpbmxpbmU9NjtlbmRsaW5lPTIxO21kNT1lMDU2Zjc0YTEyYzMyNzdkNzMwZGJjZmI4NWQyY2EzNCIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGUtc3RkYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOTFjNTZlMGUxY2NhNmIwOWIxN2I2OWQ0N2VmMThlMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMDdmZmNiMzdlZWNlYzM1YzVlYzcyNTE2ZDEwYjM1ZmRmNmU2ZmVmMWZjZjFkY2QzN2UzMGI4Y2JmOGJmOTQxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNjNlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIKQEAgLTAsMCArMSwzMyBAQAorcmVxdWlyZSBnbXAuaW5jCisKK0xJQ0VOU0U9IkdQTHYyKyB8IExHUEx2MysiCisKK1JFVklTSU9OPSJhIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FtZDY0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dtcC02LjAuMC1wcGM2NC5wYXRjaCBcCisgICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYjdmZjJkODhjYWU3ZjgwODViZDUwMDYwOTZlZWQ0NzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y4ZTlhODA0YjljNmQwNzE2NGNmNzU0MjA3YmU4MzhlY2UxMjE5NDI1ZDY0ZTI4Y2ZhM2U3MGQ1Yzc1OWFhZiIKKworYWNwYXRocyA9ICIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZW5hYmxlLWN4eD1kZXRlY3QiCisKK1BBQ0tBR0VTID0rICJsaWJnbXB4eCIKK0ZJTEVTX2xpYmdtcHh4ID0gIiR7bGliZGlyfS9saWJnbXB4eCR7U09MSUJTfSIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICAgICBzZWQgLWkgInN8LS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH18fGciICR7RH0ke2luY2x1ZGVkaXJ9L2dtcC5oCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJnbXAuaCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nLzAwMDEtZ3N5c3RlbS1zdWJwcm9jZXNzLmMtRW5hYmxlLUdOVS1leHRlbnNpb25zLWluLXN5c3RlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA2NjZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBiMWRlMmM2MjkwYmMwNjUxZmU4N2E4YzRmYjUyZTdhMGE1ZmU2MzIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgNSBPY3QgMjAxNCAxNjowMTo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBnc3lzdGVtLXN1YnByb2Nlc3MuYzogRW5hYmxlIEdOVSBleHRlbnNpb25zIGluIHN5c3RlbSAgQworIGxpYnJhcnkKKworVGhpcyBzaG91bGQgZXhwb3J0IE9fQ0xPRVhFQyB3aGVyZSBpdCBpcyBvbmx5CithdmFpbGFibGUgd2hlbiBfR05VX1NPVVJDRSBpcyBkZWZpbmVkIC5lLmcuIHVjbGliYyBiYXNlZCBzeXN0ZW1zCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBzcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jIGIvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKK2luZGV4IGE5Njc4OTYuLmE1MmEzNjIgMTAwNjQ0CistLS0gYS9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYworKysrIGIvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKK0BAIC0xOCw2ICsxOCwxMCBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKyNlbmRpZgorKworICNkZWZpbmUgX0dTWVNURU1fTk9fTE9DQUxfQUxMT0MKKyAjaW5jbHVkZSAibGliZ3N5c3RlbS5oIgorIAorLS0gCisyLjEuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmdfMjAxNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MmRlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlRlc3QgcnVubmVyIGZvciBHTk9NRS1zdHlsZSBpbnN0YWxsZWQgdGVzdHMiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ25vbWUub3JnL0dub21lR29hbHMvSW5zdGFsbGVkVGVzdHMiCitMSUNFTlNFID0gIkxHUEx2MisiCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ3N5c3RlbS1zdWJwcm9jZXNzLmMtRW5hYmxlLUdOVS1leHRlbnNpb25zLWluLXN5c3RlbS5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImE2MDhhZDcyYTc3ZTIzYTFhZWNkZmQ4ZDA3YTk0YmFmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhM2VlZDczNjc4ZGQyMmQwOWQ2YTdlYzRmODk5NTU3ZGYzZThiNGE4MDJhZmZhNzZkMGYxNjNiMzEyODY1MzkiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9nbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyLmM7ZW5kbGluZT0xOTttZDU9NjczMTFhNjAwYjgzZmQwMDY4ZGZjN2U1Yjg0ZmZiM2YiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQUiA9ICJyMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbam91cm5hbGRdID0gIi0td2l0aC1zeXN0ZW1kLWpvdXJuYWwsLS13aXRob3V0LXN5c3RlbWQtam91cm5hbCxzeXN0ZW1kLHN5c3RlbWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWFkZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGUyMjAyZmYyYjcwNDYyM2VmYzYyNzdmYjUyNTZlNGUxNWJhYzU2NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZXJuZXIgS29jaCA8d2tAZ251cGcub3JnPgorRGF0ZTogVGh1LCAyNSBKdWwgMjAxMyAxMToxNzo1MiArMDIwMAorU3ViamVjdDogW1BBVENIXSBNaXRpZ2F0ZSBhIGZsdXNoK3JlbG9hZCBjYWNoZSBhdHRhY2sgb24gUlNBIHNlY3JldAorIGV4cG9uZW50cy4KKworY29tbWl0IGUyMjAyZmYyYjcwNDYyM2VmYzYyNzdmYjUyNTZlNGUxNWJhYzU2NzYgZnJvbQorZ2l0Oi8vZ2l0LmdudXBnLm9yZy9saWJnY3J5cHQuZ2l0CisKKyogbXBpL21waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IEFsd2F5cyBwZXJmcm9tIHRoZSBtcGlfbXVsIGZvcgorZXhwb25lbnRzIGluIHNlY3VyZSBtZW1vcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLQorCitUaGUgYXR0YWNrIGlzIHB1Ymxpc2hlZCBhcyBodHRwOi8vZXByaW50LmlhY3Iub3JnLzIwMTMvNDQ4IDoKKworRmx1c2grUmVsb2FkOiBhIEhpZ2ggUmVzb2x1dGlvbiwgTG93IE5vaXNlLCBMMyBDYWNoZSBTaWRlLUNoYW5uZWwKK0F0dGFjayBieSBZdXZhbCBZYXJvbSBhbmQgS2F0cmluYSBGYWxrbmVyLiAxOCBKdWx5IDIwMTMuCisKKyAgRmx1c2grUmVsb2FkIGlzIGEgY2FjaGUgc2lkZS1jaGFubmVsIGF0dGFjayB0aGF0IG1vbml0b3JzIGFjY2VzcyB0bworICBkYXRhIGluIHNoYXJlZCBwYWdlcy4gSW4gdGhpcyBwYXBlciB3ZSBkZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZQorICBhdHRhY2sgdG8gZXh0cmFjdCBwcml2YXRlIGVuY3J5cHRpb24ga2V5cyBmcm9tIEdudVBHLiAgVGhlIGhpZ2gKKyAgcmVzb2x1dGlvbiBhbmQgbG93IG5vaXNlIG9mIHRoZSBGbHVzaCtSZWxvYWQgYXR0YWNrIGVuYWJsZXMgYSBzcHkKKyAgcHJvZ3JhbSB0byByZWNvdmVyIG92ZXIgOTglIG9mIHRoZSBiaXRzIG9mIHRoZSBwcml2YXRlIGtleSBpbiBhCisgIHNpbmdsZSBkZWNyeXB0aW9uIG9yIHNpZ25pbmcgcm91bmQuIFVubGlrZSBwcmV2aW91cyBhdHRhY2tzLCB0aGUKKyAgYXR0YWNrIHRhcmdldHMgdGhlIGxhc3QgbGV2ZWwgTDMgY2FjaGUuIENvbnNlcXVlbnRseSwgdGhlIHNweQorICBwcm9ncmFtIGFuZCB0aGUgdmljdGltIGRvIG5vdCBuZWVkIHRvIHNoYXJlIHRoZSBleGVjdXRpb24gY29yZSBvZgorICB0aGUgQ1BVLiBUaGUgYXR0YWNrIGlzIG5vdCBsaW1pdGVkIHRvIGEgdHJhZGl0aW9uYWwgT1MgYW5kIGNhbiBiZQorICB1c2VkIGluIGEgdmlydHVhbGlzZWQgZW52aXJvbm1lbnQsIHdoZXJlIGl0IGNhbiBhdHRhY2sgcHJvZ3JhbXMKKyAgZXhlY3V0aW5nIGluIGEgZGlmZmVyZW50IFZNLgorCitJbmRleDogZ251cGctMS40LjcvbXBpL21waS1wb3cuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvbXBpL21waS1wb3cuYworKysrIGdudXBnLTEuNC43L21waS9tcGktcG93LmMKK0BAIC0yMTIsNyArMjEyLDEzIEBAIG1waV9wb3dtKCBNUEkgcmVzLCBNUEkgYmFzZSwgTVBJIGV4cG9uZW4KKyAJCXRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgCQlyc2l6ZSA9IHhzaXplOworIAorLQkJaWYoIChtcGlfbGltYl9zaWduZWRfdCllIDwgMCApIHsKKysgICAgICAgICAgICAvKiBUbyBtaXRpZ2F0ZSB0aGUgWWFyb20vRmFsa25lciBmbHVzaCtyZWxvYWQgY2FjaGUKKysgICAgICAgICAgICAgKiBzaWRlLWNoYW5uZWwgYXR0YWNrIG9uIHRoZSBSU0Egc2VjcmV0IGV4cG9uZW50LCB3ZSBkbworKyAgICAgICAgICAgICAqIHRoZSBtdWx0aXBsaWNhdGlvbiByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUKKysgICAgICAgICAgICAgKiBoaWdoLWJpdCBvZiBFLiAgQnV0IHRvIGF2b2lkIHRoaXMgcGVyZm9ybWFuY2UgcGVuYWx0eQorKyAgICAgICAgICAgICAqIHdlIGRvIGl0IG9ubHkgaWYgdGhlIGV4cG9uZW50IGhhcyBiZWVuIHN0b3JlZCBpbiBzZWN1cmUKKysgICAgICAgICAgICAgKiBtZW1vcnkgYW5kIHdlIGNhbiB0aHVzIGFzc3VtZSBpdCBpcyBhIHNlY3JldCBleHBvbmVudC4gICovCisrCQlpZiAoZXNlYyB8fCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDApIHsKKyAJCSAgICAvKm1waWhlbHBfbXVsKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsqLworIAkJICAgIGlmKCBic2l6ZSA8IEtBUkFUU1VCQV9USFJFU0hPTEQgKSB7CisgCQkJbXBpaGVscF9tdWwoIHhwLCBycCwgcnNpemUsIGJwLCBic2l6ZSApOworQEAgLTIyNyw2ICsyMzMsOCBAQCBtcGlfcG93bSggTVBJIHJlcywgTVBJIGJhc2UsIE1QSSBleHBvbmVuCisgCQkJbXBpaGVscF9kaXZyZW0oeHAgKyBtc2l6ZSwgMCwgeHAsIHhzaXplLCBtcCwgbXNpemUpOworIAkJCXhzaXplID0gbXNpemU7CisgCQkgICAgfQorKwkJfQorKwkJaWYgKCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDAgKSB7CisgCisgCQkgICAgdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKKyAJCSAgICByc2l6ZSA9IHhzaXplOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5ZWRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZ251cGctMS40LjcvZzEwL2dldGtleS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9nMTAvZ2V0a2V5LmMJMjAwNy0wMy0wNSAxNjo1NDo0MS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAvZ2V0a2V5LmMJMjAxMy0xMS0yOCAxNDo0MTo1OS42NDAyMTIyNDAgKzA4MDAKK0BAIC0xNDU0LDcgKzE0NTQsMTEgQEAKKyAKKyAgICAgICBpZihmbGFncykKKyAJa2V5X3VzYWdlIHw9IFBVQktFWV9VU0FHRV9VTktOT1dOOworKyAgICAgIGlmICgha2V5X3VzYWdlKQorKwlrZXlfdXNhZ2UgfD0gUFVCS0VZX1VTQUdFX05PTkU7CisgICAgIH0KKysgIGVsc2UgaWYgKHApCisrICAgIGtleV91c2FnZSB8PSBQVUJLRVlfVVNBR0VfTk9ORTsKKyAKKyAgIC8qIFdlIHNldCBQVUJLRVlfVVNBR0VfVU5LTk9XTiB0byBpbmRpY2F0ZSB0aGF0IHRoaXMga2V5IGhhcyBhCisgICAgICBjYXBhYmlsaXR5IHRoYXQgd2UgZG8gbm90IGhhbmRsZS4gIFRoaXMgc2VydmVzIHRvIGRpc3Rpbmd1aXNoCitJbmRleDogZ251cGctMS40LjcvZzEwL2tleWdlbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9nMTAva2V5Z2VuLmMJMjAwNy0wMi0wNSAwMDoyNzo0MC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAva2V5Z2VuLmMJMjAxMy0xMS0yOCAxNDo0MzowNS4wMTY2NzAwOTIgKzA4MDAKK0BAIC0yMDksOSArMjA5LDYgQEAKKyAgICAgaWYgKHVzZSAmIFBVQktFWV9VU0FHRV9BVVRIKQorICAgICAgICAgYnVmWzBdIHw9IDB4MjA7CisgCistICAgIGlmICghYnVmWzBdKSAKKy0gICAgICAgIHJldHVybjsKKy0KKyAgICAgYnVpbGRfc2lnX3N1YnBrdCAoc2lnLCBTSUdTVUJQS1RfS0VZX0ZMQUdTLCBidWYsIDEpOworIH0KKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9pbmNsdWRlL2NpcGhlci5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9pbmNsdWRlL2NpcGhlci5oCTIwMDYtMDQtMjEgMjA6Mzk6NDkuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvaW5jbHVkZS9jaXBoZXIuaAkyMDEzLTExLTI4IDE0OjQ5OjI0LjE1OTMyMjc0NCArMDgwMAorQEAgLTUyLDYgKzUyLDcgQEAKKyAjZGVmaW5lIFBVQktFWV9VU0FHRV9DRVJUICAgIDQgICAgICAvKiBrZXkgaXMgYWxzbyBnb29kIHRvIGNlcnRpZnkgb3RoZXIga2V5cyovCisgI2RlZmluZSBQVUJLRVlfVVNBR0VfQVVUSCAgICA4ICAgICAgLyoga2V5IGlzIGdvb2QgZm9yIGF1dGhlbnRpY2F0aW9uICovCisgI2RlZmluZSBQVUJLRVlfVVNBR0VfVU5LTk9XTiAxMjggICAgLyoga2V5IGhhcyBhbiB1bmtub3duIHVzYWdlIGJpdCAqLworKyNkZWZpbmUgUFVCS0VZX1VTQUdFX05PTkUgICAgMjU2ICAgIC8qIE5vIHVzYWdlIGdpdmVuLiAqLworIAorICNkZWZpbmUgRElHRVNUX0FMR09fTUQ1ICAgICAgIDEKKyAjZGVmaW5lIERJR0VTVF9BTEdPX1NIQTEgICAgICAyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWEyMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaApAQCAtMCwwICsxLDE1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL2RzYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvZHNhLmMJMjAwNi0xMi0xMiAwMjoyNzoyMS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvZHNhLmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0yODcsNiArMjg3LDggQEAKKyAgICAgTVBJIGtpbnY7CisgICAgIE1QSSB0bXA7CisgCisrICAgIG1waV9ub3JtYWxpemUgKGhhc2gpOworKworICAgICAvKiBzZWxlY3QgYSByYW5kb20gayB3aXRoIDAgPCBrIDwgcSAqLworICAgICBrID0gZ2VuX2soIHNrZXktPnEgKTsKKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvZWxnYW1hbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvZWxnYW1hbC5jCTIwMDYtMTItMTIgMDM6MDg6MDUuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL2VsZ2FtYWwuYwkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTM3Niw2ICszNzYsOSBAQAorIHsKKyAgICAgTVBJIHQxID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoIHNrZXktPnAgKSApOworIAorKyAgICBtcGlfbm9ybWFsaXplIChhKTsKKysgICAgbXBpX25vcm1hbGl6ZSAoYik7CisrCisgICAgIC8qIG91dHB1dCA9IGIvKGFeeCkgbW9kIHAgKi8KKyAgICAgbXBpX3Bvd20oIHQxLCBhLCBza2V5LT54LCBza2V5LT5wICk7CisgICAgIG1waV9pbnZtKCB0MSwgdDEsIHNrZXktPnAgKTsKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yYW5kb20uYwkyMDA2LTExLTAzIDE4OjA5OjM5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uYwkyMDE0LTAxLTIzIDExOjMxOjUzLjk5MzQ5NTQ2MiArMDgwMAorQEAgLTI3Myw2ICsyNzMsMTggQEAKKyB9CisgCisgCisrLyogUmFuZG9taXplIHRoZSBNUEkgKi8gCisrdm9pZAorK3JhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKQorK3sKKysgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKysKKysgIGJ1ZmZlciA9IGdldF9yYW5kb21fYml0cyAobmJpdHMsIGxldmVsLCBtcGlfaXNfc2VjdXJlIChtcGkpKTsKKysgIG1waV9zZXRfYnVmZmVyIChtcGksIGJ1ZmZlciwgKG5iaXRzKzcpLzgsIDApOworKyAgeGZyZWUgKGJ1ZmZlcik7CisrfQorKworKworIGludAorIHJhbmRvbV9pc19mYWtlZCgpCisgeworSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL3JhbmRvbS5oCTIwMDYtMDItMDkgMTk6Mjk6MjkuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5oCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMzIsNiArMzIsNyBAQAorIGludCAgcmFuZG9tX2lzX2Zha2VkKHZvaWQpOworIHZvaWQgcmFuZG9tX2Rpc2FibGVfbG9ja2luZyAodm9pZCk7Cisgdm9pZCByYW5kb21pemVfYnVmZmVyKCBieXRlICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCApOworK3ZvaWQgcmFuZG9taXplX21waSAoTVBJIG1waSwgc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwpOworIGJ5dGUgKmdldF9yYW5kb21fYml0cyggc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwsIGludCBzZWN1cmUgKTsKKyB2b2lkIGZhc3RfcmFuZG9tX3BvbGwoIHZvaWQgKTsKKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcnNhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yc2EuYwkyMDA2LTEyLTEyIDAzOjA5OjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yc2EuYwkyMDE0LTAxLTIzIDExOjM1OjA0LjMzMDYzOTEyNSArMDgwMAorQEAgLTMwMSw5ICszMDEsMjYgQEAKKyAjaWYgMAorICAgICBtcGlfcG93bSggb3V0cHV0LCBpbnB1dCwgc2tleS0+ZCwgc2tleS0+biApOworICNlbHNlCistICAgIE1QSSBtMSAgID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworLSAgICBNUEkgbTIgICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKy0gICAgTVBJIGggICAgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CisrICAgIGludCBubGltYnMgPSBtcGlfZ2V0X25saW1icyAoc2tleS0+bikrMTsKKysgICAgTVBJIG0xICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgbTIgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrICAgIE1QSSBoICAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysjIGlmIDEKKysgICAgTVBJIGJkYXRhPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgciAgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrIyBlbmRpZgorKworKyAgICAvKiBSZW1vdmUgc3VwZXJmbHVvdXMgbGVhZGluZyB6ZXJvZXMgZnJvbSBJTlBVVC4gICovCisrICAgIG1waV9ub3JtYWxpemUgKGlucHV0KTsKKysKKysjIGlmIDEgCisrICAgIC8qIEJsaW5kOiAgYmRhdGEgPSAoZGF0YSAqIHJeZSkgbW9kIG4gICAqLworKyAgICByYW5kb21pemVfbXBpIChyLCBtcGlfZ2V0X25iaXRzIChza2V5LT5uKSwgMCk7CisrICAgIG1waV9mZGl2X3IgKHIsIHIsIHNrZXktPm4pOworKyAgICBtcGlfcG93bSAoYmRhdGEsIHIsIHNrZXktPmUsIHNrZXktPm4pOworKyAgICBtcGlfbXVsbSAoYmRhdGEsIGJkYXRhLCBpbnB1dCwgc2tleS0+bik7CisrICAgIGlucHV0ID0gYmRhdGE7CisrIyBlbmRpZgorIAorICAgICAvKiBtMSA9IGMgXiAoZCBtb2QgKHAtMSkpIG1vZCBwICovCisgICAgIG1waV9zdWJfdWkoIGgsIHNrZXktPnAsIDEgICk7CitAQCAtMzIxLDggKzMzOCwxNSBAQAorICAgICAvKiBtID0gbTIgKyBoICogcCAqLworICAgICBtcGlfbXVsICggaCwgaCwgc2tleS0+cCApOworICAgICBtcGlfYWRkICggb3V0cHV0LCBtMSwgaCApOworLSAgICAvKiByZWFkeSAqLworLSAgICAKKysKKysjIGlmIDEKKysgICAgbXBpX2ZyZWUgKGJkYXRhKTsKKysgICAgLyogVW5ibGluZDogb3V0cHV0ID0gKG91dHB1dCAqIHJeKC0xKSkgbW9kIG4gICovCisrICAgIG1waV9pbnZtIChyLCByLCBza2V5LT5uKTsKKysgICAgbXBpX211bG0gKG91dHB1dCwgb3V0cHV0LCByLCBza2V5LT5uKTsKKysgICAgbXBpX2ZyZWUgKHIpOworKyMgZW5kaWYKKysKKyAgICAgbXBpX2ZyZWUgKCBoICk7CisgICAgIG1waV9mcmVlICggbTEgKTsKKyAgICAgbXBpX2ZyZWUgKCBtMiApOworQEAgLTM5Nyw2ICs0MjEsNyBAQAorIHJzYV9kZWNyeXB0KCBpbnQgYWxnbywgTVBJICpyZXN1bHQsIE1QSSAqZGF0YSwgTVBJICpza2V5ICkKKyB7CisgICAgIFJTQV9zZWNyZXRfa2V5IHNrOworKyAgICBNUEkgaW5wdXQ7CisgCisgICAgIGlmKCBhbGdvICE9IDEgJiYgYWxnbyAhPSAyICkKKyAJcmV0dXJuIEcxMEVSUl9QVUJLRVlfQUxHTzsKK0BAIC00MDcsOCArNDMyLDE0IEBACisgICAgIHNrLnAgPSBza2V5WzNdOworICAgICBzay5xID0gc2tleVs0XTsKKyAgICAgc2sudSA9IHNrZXlbNV07CistICAgICpyZXN1bHQgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyggc2subiApICk7CistICAgIHNlY3JldCggKnJlc3VsdCwgZGF0YVswXSwgJnNrICk7CisrCisrICAgIC8qIE1pdGlnYXRlcyBzaWRlLWNoYW5uZWwgYXR0YWNrcyAoQ1ZFLTIwMTMtNDU3NikuICAqLworKyAgICBpbnB1dCA9IG1waV9hbGxvYyAoMCk7CisrICAgIG1waV9ub3JtYWxpemUgKGRhdGFbMF0pOworKyAgICBtcGlfZmRpdl9yIChpbnB1dCwgZGF0YVswXSwgc2subik7CisrICAgICpyZXN1bHQgPSBtcGlfYWxsb2Nfc2VjdXJlIChtcGlfZ2V0X25saW1icyAoc2subikpOworKyAgICBzZWNyZXQgKCpyZXN1bHQsIGlucHV0LCAmc2spOworKyAgICBtcGlfZnJlZSAoaW5wdXQpOworICAgICByZXR1cm4gMDsKKyB9CisgCitJbmRleDogZ251cGctMS40LjcvZzEwL2dwZ3YuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2dwZ3YuYwkyMDA2LTEyLTEzIDE5OjI1OjA0LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2cxMC9ncGd2LmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0zOTAsNiArMzkwLDcgQEAKKyB2b2lkIHJhbmRvbV9kdW1wX3N0YXRzKHZvaWQpIHt9CisgaW50IHF1aWNrX3JhbmRvbV9nZW4oIGludCBvbm9mZiApIHsgcmV0dXJuIC0xO30KKyB2b2lkIHJhbmRvbWl6ZV9idWZmZXIoIGJ5dGUgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICkge30KKyt2b2lkIHJhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKSB7fQorIGludCByYW5kb21faXNfZmFrZWQoKSB7IHJldHVybiAtMTt9CisgYnl0ZSAqZ2V0X3JhbmRvbV9iaXRzKCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCwgaW50IHNlY3VyZSApIHsgcmV0dXJuIE5VTEw7fQorIHZvaWQgc2V0X3JhbmRvbV9zZWVkX2ZpbGUoIGNvbnN0IGNoYXIgKm5hbWUgKSB7fQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9HbnVQRzEtQ1ZFLTIwMTItNjA4NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjVkOWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorY29tbWl0IGYwYjMzYjZmYjhlMDU4NmU5NTg0YTdhNDA5ZGNjMzEyNjM3NzZhNjcKK0F1dGhvcjogV2VybmVyIEtvY2ggPHdrQGdudXBnLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAyMCAwOTo0Mzo0MSAyMDEyICswMTAwCisKKyAgICBncGc6IEltcG9ydCBvbmx5IHBhY2tldHMgd2hpY2ggYXJlIGFsbG93ZWQgaW4gYSBrZXlibG9jay4KKyAgICAKKyAgICAqIGcxMC9pbXBvcnQuYyAodmFsaWRfa2V5YmxvY2tfcGFja2V0KTogTmV3LgorICAgIChyZWFkX2Jsb2NrKTogU3RvcmUgb25seSB2YWxpZCBwYWNrZXRzLgorICAgIC0tCisgICAgCisgICAgQSBjb3JydXB0ZWQga2V5LCB3aGljaCBmb3IgZXhhbXBsZSBpbmNsdWRlZCBhIG1hbmdsZWQgcHVibGljIGtleQorICAgIGVuY3J5cHRlZCBwYWNrZXQsIHVzZWQgdG8gY29ycnVwdCB0aGUga2V5cmluZy4gIFRoaXMgY2hhbmdlIHNraXBzIGFsbAorICAgIHBhY2tldHMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIGluIGEga2V5YmxvY2suCisgICAgCisgICAgR251UEctYnVnLWlkOiAxNDU1CisgICAgCisgICAgKGNoZXJyeS1waWNrZWQgZnJvbSBjb21taXQgZjc5NWEwZDU5ZTE5NzQ1NWY4NzIzYzMwMGVlYmY1OWUwOTg1M2VmYSkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9nMTAvaW1wb3J0LmMgYi9nMTAvaW1wb3J0LmMKK2luZGV4IGJmZTAyZWIuLmE1N2IzMmUgMTAwNjQ0CistLS0gYS9nMTAvaW1wb3J0LmMKKysrKyBiL2cxMC9pbXBvcnQuYworQEAgLTM4NCw2ICszODQsMjcgQEAgaW1wb3J0X3ByaW50X3N0YXRzICh2b2lkICpoZCkKKyB9CisgCisgCisrLyogUmV0dXJuIHRydWUgaWYgUEtUVFlQRSBpcyB2YWxpZCBpbiBhIGtleWJsb2NrLiAgKi8KKytzdGF0aWMgaW50CisrdmFsaWRfa2V5YmxvY2tfcGFja2V0IChpbnQgcGt0dHlwZSkKKyt7CisrICBzd2l0Y2ggKHBrdHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBQS1RfUFVCTElDX0tFWToKKysgICAgY2FzZSBQS1RfUFVCTElDX1NVQktFWToKKysgICAgY2FzZSBQS1RfU0VDUkVUX0tFWToKKysgICAgY2FzZSBQS1RfU0VDUkVUX1NVQktFWToKKysgICAgY2FzZSBQS1RfU0lHTkFUVVJFOgorKyAgICBjYXNlIFBLVF9VU0VSX0lEOgorKyAgICBjYXNlIFBLVF9BVFRSSUJVVEU6CisrICAgIGNhc2UgUEtUX1JJTkdfVFJVU1Q6CisrICAgICAgcmV0dXJuIDE7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisgLyoqKioqKioqKioqKioqKioKKyAgKiBSZWFkIHRoZSBuZXh0IGtleWJsb2NrIGZyb20gc3RyZWFtIEEuCisgICogUEVORElOR19QS1Qgc2hvdWxkIGJlIGluaXRpYWx6ZWQgdG8gTlVMTAorQEAgLTQ2MSw3ICs0ODIsNyBAQCByZWFkX2Jsb2NrKCBJT0JVRiBhLCBQQUNLRVQgKipwZW5kaW5nX3BrdCwgS0JOT0RFICpyZXRfcm9vdCApCisgCSAgICB9CisgCSAgICBpbl9jZXJ0ID0gMTsKKyAJICBkZWZhdWx0OgorLQkgICAgaWYoIGluX2NlcnQgKSB7CisrCSAgICBpZiAoaW5fY2VydCAmJiB2YWxpZF9rZXlibG9ja19wYWNrZXQgKHBrdC0+cGt0dHlwZSkpIHsKKyAJCWlmKCAhcm9vdCApCisgCQkgICAgcm9vdCA9IG5ld19rYm5vZGUoIHBrdCApOworIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdudXBnLTEuNC43L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ251cGctMS40LjcvY29uZmlndXJlLmFjCitAQCAtODI3LDcgKzgyNyw2IEBAIGVsc2UKKyAgIEFDX1NVQlNUKFVTRV9OTFMpCisgICBBQ19TVUJTVChVU0VfSU5DTFVERURfTElCSU5UTCkKKyAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCistICBBTV9QT19TVUJESVJTCisgZmkKKyAKKyBpZiB0ZXN0ICIkdHJ5X2V4dGVuc2lvbnMiID0geWVzIHx8IHRlc3QgeCIkY2FyZF9zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYjI0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2N1cmxfdHlwZW9mX2ZpeF9iYWNrcG9ydC5wYXRjaApAQCAtMCwwICsxLDI3IEBACisKK1RoaXMgaGFzIGJlZW4gZGlzY3Vzc2VkIGluIGEgY291cGxlIG9mIGRpZmZlcmVudCBidWcgcmVwb3J0ZWQKK3Vwc3RyZWFtOgorCitodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NDg2MjUwCitodHRwOi8vYnVncy5zb3VyY2VtYWdlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDYKKworRml4OgoraHR0cDovL2xpc3RzLmdudXBnLm9yZy9waXBlcm1haWwvZ251cGctZGV2ZWwvMjAwOC1BcHJpbC8wMjQzNDQuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtEZWJpYW5dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdudXBnLTEuNC43L2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcva2V5c2VydmVyL2dwZ2tleXNfY3VybC5jCisrKysgZ251cGctMS40Ljcva2V5c2VydmVyL2dwZ2tleXNfY3VybC5jCitAQCAtMjg2LDcgKzI4Niw3IEBAIG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQorICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1ZFUkJPU0UsMSk7CisgICAgIH0KKyAKKy0gIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1NTTF9WRVJJRllQRUVSLG9wdC0+ZmxhZ3MuY2hlY2tfY2VydCk7CisrICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwobG9uZylvcHQtPmZsYWdzLmNoZWNrX2NlcnQpOworICAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfQ0FJTkZPLG9wdC0+Y2FfY2VydF9maWxlKTsKKyAKKyAgIGlmKHByb3h5KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTVjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9sb25nLWxvbmctdGh1bWIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorT3JpZ25hbCBQYXRjaCBjYW1lIGZyb20gT3BlbldydCB2aWEgT0UtQ2xhc3NpYworaHR0cHM6Ly9kZXYub3BlbndydC5vcmcvYnJvd3Nlci9wYWNrYWdlcy91dGlscy9nbnVwZy9wYXRjaGVzLzAwMS1taXBzX2djYzQuNAord2hpY2ggaXMgbm8gbG9uZ2VyIGEgdmFsaWQgcmV2aXNpb24hCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworCistLS0gZ251cGcvbXBpL2xvbmdsb25nLmh+ICAgICAgMjAwNi0wMi0xNCAxMDowOTo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbnVwZy9tcGkvbG9uZ2xvbmcuaCAgICAgICAyMDA4LTEwLTI3IDEzOjExOjA5LjAwMDAwMDAwMCArMDAwMAorQEAgLTE4MSw3ICsxODEsNyBAQAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKioqKioqKioqKioqKiogIEFSTSAgKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0jaWYgZGVmaW5lZCAoX19hcm1fXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKysjaWYgZGVmaW5lZCAoX19hcm1fXykgJiYgV19UWVBFX1NJWkUgPT0gMzIgJiYgIWRlZmluZWQoX190aHVtYl9fKQorICNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgICBfX2FzbV9fICgiYWRkcyAlMSwgJTQsICU1XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICJhZGMgICUwLCAlMiwgJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbWlwc19nY2M0LjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwM2IyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKKworRnJvbSBPcGVuZW1iZWRkZWQtQ2xhc3NpYworCisgICAgZ251cGctMS40LjEwOiBSZWFkZCB0aGUgQVJNIFRodW1iIHBhdGNoIGFzIGRlYmlhbiBoYXMgbm8gdGh1bWIgc3VwcG9ydAorCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQtc3BlY2lmaWNdCisKK0luZGV4OiBnbnVwZy0xLjQuMTAvbXBpL2xvbmdsb25nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuMTAub3JpZy9tcGkvbG9uZ2xvbmcuaAkyMDA4LTEyLTExIDE3OjM5OjQzLjAwMDAwMDAwMCArMDEwMAorKysrIGdudXBnLTEuNC4xMC9tcGkvbG9uZ2xvbmcuaAkyMDEwLTAzLTI3IDE0OjI3OjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTcwNiwxOCArNzA2LDM1IEBACisgI2VuZGlmIC8qIF9fbTg4MTEwX18gKi8KKyAjZW5kaWYgLyogX19tODgwMDBfXyAqLworIAorKy8qIFRlc3QgZm9yIGdjYyA+PSBtYWoubWluLCBhcyBwZXIgX19HTlVDX1BSRVJFUSBpbiBnbGliYyAqLworKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgZGVmaW5lZCAoX19HTlVDX01JTk9SX18pCisrI2RlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSBcCisrCSgoX19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQorKyNlbHNlCisrI2RlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSAgMAorKyNlbmRpZgorKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKioqKioqKioqKioqKiogIE1JUFMgICoqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAjaWYgZGVmaW5lZCAoX19taXBzX18pICYmIFdfVFlQRV9TSVpFID09IDMyCistI2lmIF9fR05VQ19fID4gMiB8fCBfX0dOVUNfTUlOT1JfXyA+PSA3CisrI2lmIF9fR05VQ19QUkVSRVEgKDQsNCkKKysjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKysgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJVURJdHlwZSBfX2xsID0gKFVESXR5cGUpKHUpICogKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJdzEgPSBfX2xsID4+IDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJdzAgPSBfX2xsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrI2VuZGlmCisrI2lmICFkZWZpbmVkICh1bXVsX3BwbW0pICYmIF9fR05VQ19QUkVSRVEgKDIsNykKKyAjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgIF9fYXNtX18gKCJtdWx0dSAlMiwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgIDogIj1sIiAoKFVTSXR5cGUpKHcwKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICAgIj1oIiAoKFVTSXR5cGUpKHcxKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgIDogImQiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICAgImQiICgoVVNJdHlwZSkodikpKQorLSNlbHNlCisrI2VuZGlmCisrI2lmICFkZWZpbmVkICh1bXVsX3BwbW0pCisgI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICBfX2FzbV9fICgibXVsdHUgJTIsJTMgXG4iIFwKKyAJICAgIm1mbG8gJTAgXG4iICAgICBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYxOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBnbnVwZy0yLjEuMC9kaXJtbmdyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9kaXJtbmdyL01ha2VmaWxlLmFtCisrKysgZ251cGctMi4xLjAvZGlybW5nci9NYWtlZmlsZS5hbQorQEAgLTc4LDcgKzc4LDggQEAgZW5kaWYKKyBkaXJtbmdyX0xEQUREID0gJChsaWJjb21tb250bHNucHRoKSAkKGxpYmNvbW1vbnB0aCkgXAorICAgICAgICAgJChETlNMSUJTKSAkKExJQkFTU1VBTl9MSUJTKSBcCisgCSQoTElCR0NSWVBUX0xJQlMpICQoS1NCQV9MSUJTKSAkKE5QVEhfTElCUykgXAorLQkkKE5UQlRMU19MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQklOVEwpICQoTElCSUNPTlYpCisrCSQoTlRCVExTX0xJQlMpICQoTElCR05VVExTX0xJQlMpICQoTElCSU5UTCkgJChMSUJJQ09OVikgXAorKwkkKEdQR19FUlJPUl9MSUJTKQorIGlmIFVTRV9MREFQCisgZGlybW5ncl9MREFERCArPSAkKGxkYXBsaWJzKQorIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1ODYwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDkwIEBACitVc2UgcGtnLWNvbmZpZyB0byBmaW5kIHB0aCBpbnN0ZWFkIG9mIHB0aC1jb25maWcuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitbbm90IHN1Ym1pdHRlZCBidXQgdGhleSd2ZSBiZWVuIGNsZWFyIHRoZXkgZG9uJ3Qgd2FudCBhIHBrZy1jb25maWcgZGVwZW5kZW5jeV0KKworUlAgMjAxNC81LzIyCisKK0luZGV4OiBnbnVwZy0yLjEuMC9tNC9nbnVwZy1wdGgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0yLjEuMC5vcmlnL200L2dudXBnLXB0aC5tNAorKysrIGdudXBnLTIuMS4wL200L2dudXBnLXB0aC5tNAorQEAgLTE3LDMzICsxNyw5IEBAIGRubCBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICMgVGFrZW4gYW5kIG1vZGlmaWVkIGZyb20gdGhlIG00IG1hY3JvcyB3aGljaCBjb21lIHdpdGggUHRoLgorIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgICBbCistICAgIF9wdGhfdmVyc2lvbj1gJFBUSF9DT05GSUcgLS12ZXJzaW9uIHwgYXdrICdOUj09MSB7cHJpbnQgWyRdM30nYAorICAgICBfcmVxX3ZlcnNpb249ImlmZWxzZShbJDFdLCwxLjIuMCwkMSkiCisrICAgIFBLR19DSEVDS19NT0RVTEVTKFBUSCwgW3B0aCA+PSAkX3JlcV92ZXJzaW9uXSwgW2hhdmVfcHRoPXllc10sIFtoYXZlX3B0aD1ub10pCisgCistICAgIEFDX01TR19DSEVDS0lORyhmb3IgUFRIIC0gdmVyc2lvbiA+PSAkX3JlcV92ZXJzaW9uKQorLSAgICBmb3IgX3ZhciBpbiBfcHRoX3ZlcnNpb24gX3JlcV92ZXJzaW9uOyBkbworLSAgICAgICAgZXZhbCAiX3ZhbD1cIlwkJHtfdmFyfVwiIgorLSAgICAgICAgX21ham9yPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgICAgIF9taW5vcj1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wyLydgCistICAgICAgICBfcnR5cGU9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMy8nYAorLSAgICAgICAgX21pY3JvPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDQvJ2AKKy0gICAgICAgIGNhc2UgJF9ydHlwZSBpbgorLSAgICAgICAgICAgICJhIiApIF9ydHlwZT0wIDs7CistICAgICAgICAgICAgImIiICkgX3J0eXBlPTEgOzsKKy0gICAgICAgICAgICAiLiIgKSBfcnR5cGU9MiA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgX2hleD1gZWNobyBkdW1teSB8IGF3ayAneyBwcmludGYoIiVkJTAyZCUxZCUwMmQiLCBtYWpvciwgbWlub3IsIHJ0eXBlLCBtaWNybyk7IH0nIFwKKy0gICAgICAgICAgICAgICJtYWpvcj0kX21ham9yIiAibWlub3I9JF9taW5vciIgInJ0eXBlPSRfcnR5cGUiICJtaWNybz0kX21pY3JvImAKKy0gICAgICAgIGV2YWwgIiR7X3Zhcn1faGV4PVwiXCRfaGV4XCIiCistICAgIGRvbmUKKy0gICAgaGF2ZV9wdGg9bm8KKy0gICAgaWYgdGVzdCAiLiRfcHRoX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCistICAgICAgICBpZiB0ZXN0ICIuJF9yZXFfdmVyc2lvbl9oZXgiICE9IC47IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICRfcHRoX3ZlcnNpb25faGV4IC1nZSAkX3JlcV92ZXJzaW9uX2hleDsgdGhlbgorLSAgICAgICAgICAgICAgICBoYXZlX3B0aD15ZXMKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKyAgICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBQVEggaW5zdGFsbGF0aW9uIGlzIHNhbmVdKQorQEAgLTUxLDkgKzI3LDkgQEAgQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfY2ZsYWdzPSRDRkxBR1MKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGRmbGFncz0kTERGTEFHUworICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9saWJzPSRMSUJTCistICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIGAkUFRIX0NPTkZJRyAtLWNmbGFnc2AiCistICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgYCRQVEhfQ09ORklHIC0tbGRmbGFnc2AiCistICAgICAgICAgTElCUz0iJExJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCisrICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhfQ0ZMQUdTIgorKyAgICAgICAgIExERkxBR1M9IiRMREZMQUdTICRQVEhfTERGTEFHUyIKKysgICAgICAgICBMSUJTPSIkTElCUyAkUFRIX0xJQlMiCisgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbIHB0aF9pbml0ICgpO11dKV0sCitAQCAtODAsMjYgKzU2LDEzIEBAIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgIyBQVEhfQ0xGQUdTIGFuZCBQVEhfTElCUyBhcmUgQVNfU1VCU1QuCisgIworIEFDX0RFRlVOKFtHTlVQR19QQVRIX1BUSF0sCistWyBBQ19BUkdfV0lUSChwdGgtcHJlZml4LAorLSAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXB0aC1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEdOVSBQdGggaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIHB0aF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHB0aF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JHB0aF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBQVEhfQ09ORklHPSIkcHRoX2NvbmZpZ19wcmVmaXgvYmluL3B0aC1jb25maWciCistICBmaQorLSAgQUNfUEFUSF9QUk9HKFBUSF9DT05GSUcsIHB0aC1jb25maWcsIG5vKQorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDEuMy43LCQxKQorLSAgaWYgdGVzdCAiJFBUSF9DT05GSUciICE9ICJubyI7IHRoZW4KKy0gICAgR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0soJHRtcCkKKy0gICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4gICAgICAKKy0gICAgICAgUFRIX0NGTEFHUz1gJFBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgICAgIFBUSF9MSUJTPWAkUFRIX0NPTkZJRyAtLWxkZmxhZ3NgCistICAgICAgIFBUSF9MSUJTPSIkUFRIX0xJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCistICAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKysgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKCR0bXApCisrICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbgorKyAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKyAgICAgICAgICAgICAgICAgW0RlZmluZWQgaWYgdGhlIEdOVSBQdGggaXMgYXZhaWxhYmxlXSkKKy0gICAgZmkKKyAgIGZpCisgICBBQ19TVUJTVChQVEhfQ0ZMQUdTKQorICAgQUNfU1VCU1QoUFRIX0xJQlMpCisgXSkKKy0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRiZjFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbmVtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGdudXBnLTIuMS4wL200L25wdGgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0yLjEuMC5vcmlnL200L25wdGgubTQKKysrKyBnbnVwZy0yLjEuMC9tNC9ucHRoLm00CitAQCAtMTcsMTAgKzE3LDEwIEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9OUFRIX0NPTkZJR10sCisgICBpZiB0ZXN0ICJ4JG5wdGhfY29uZmlnX3ByZWZpeCIgIT0geCA7IHRoZW4KKyAgICAgICBOUFRIX0NPTkZJRz0iJG5wdGhfY29uZmlnX3ByZWZpeC9iaW4vbnB0aC1jb25maWciCisgICBmaQorLSAgQUNfUEFUSF9QUk9HKE5QVEhfQ09ORklHLCBucHRoLWNvbmZpZywgbm8pCisrICBBQ19QQVRIX1BST0coUEtHQ09ORklHLCBwa2ctY29uZmlnLCBubykKKyAKKy0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgbnB0aF92ZXJzaW9uPWAkTlBUSF9DT05GSUcgLS12ZXJzaW9uYAorKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKysgICAgbnB0aF92ZXJzaW9uPWAkUEtHQ09ORklHIC0tbW9kdmVyc2lvbiBucHRoYAorICAgZmkKKyAgIG5wdGhfdmVyc2lvbl9tYWpvcj1gZWNobyAkbnB0aF92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCitAQCAtNDUsNyArNDUsNyBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKKyAKKyAgIEFDX01TR19DSEVDS0lORyhmb3IgTlBUSCAtIHZlcnNpb24gPj0gJG1pbl9ucHRoX3ZlcnNpb24pCisgICBvaz1ubworLSAgaWYgdGVzdCAiJE5QVEhfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICAgcmVxX21ham9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorICAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ucHRoX3ZlcnNpb24gfCBcCitAQCAtNjYsMjggKzY2LDkgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbnB0aF92ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBOUFRILCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorLSAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKy0gICAgIGlmIHRlc3QgIiRyZXFfbnB0aF9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkTlBUSF9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCistICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTlBUSCBBUEkgdmVyc2lvbl0pCistICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorLSAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtva2F5XSkKKy0gICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgb2s9bm8KKy0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbZG9lcyBub3QgbWF0Y2guIHdhbnQ9JHJlcV9ucHRoX2FwaSBnb3Q9JHRtcF0pCistICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTlBUSF9DRkxBR1M9YCROUFRIX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgTlBUSF9MSUJTPWAkTlBUSF9DT05GSUcgLS1saWJzYAorKyAgICBOUFRIX0NGTEFHUz1gJFBLR0NPTkZJRyAtLWNmbGFncyBucHRoYAorKyAgICBOUFRIX0xJQlM9YCRQS0dDT05GSUcgLS1saWJzIG5wdGhgCisrICAgIEFDX01TR19XQVJOKFtbR09UIEhFUkUgLSAkTlBUSF9MSUJTIF1dKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBucHRoX2NvbmZpZ19ob3N0PWAkTlBUSF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKyAgICAgaWYgdGVzdCB4IiRucHRoX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KK0BAIC0xMDMsNiArODQsNyBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBOUFRIX0NGTEFHUz0iIgorICAgICBOUFRIX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5OWY4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkdOVSBQcml2YWN5IEd1YXJkIC0gZW5jcnlwdGlvbiBhbmQgc2lnbmluZyB0b29scyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnLyIKK0RFUEVORFMgPSAiemxpYiBiemlwMiByZWFkbGluZSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dudXBnL2dudXBnLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzX2djYzQuNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9HbnVQRzEtQ1ZFLTIwMTItNjA4NS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTMtNDM1MS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxMy00NTc2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDEzLTQyNDIucGF0Y2ggXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjA2YTE0MWNjYTVjZDFhNTViYmRkMjVhYjgzMzMwM2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjlkMThiN2QxOTNmNjJjYTI3ZWQ0ZmViY2I0YzkwNDRhYTBjOTUzMDVkMzI1OGZlOTAyZTJmYWU1ZmM2NDY4ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKKyMgICAtLXdpdGgtZWdkLXNvY2tldD1OQU1FICB1c2UgTkFNRSBmb3IgdGhlIEVHRCBzb2NrZXQKKyMgICAtLXdpdGgtcGhvdG8tdmlld2VyPUZJWEVEX1ZJRVdFUiAgc2V0IGEgZml4ZWQgcGhvdG8gSUQgdmlld2VyCisjICAgLS13aXRoLWluY2x1ZGVkLXpsaWIgICAgdXNlIHRoZSB6bGliIGNvZGUgaW5jbHVkZWQgaGVyZQorIyAgIC0td2l0aC1jYXBhYmlsaXRpZXMgICAgIHVzZSBsaW51eCBjYXBhYmlsaXRpZXMgZGVmYXVsdD1ubworIyAgIC0td2l0aC1tYWlscHJvZz1OQU1FICAgIHVzZSAiTkFNRSAtdCIgZm9yIG1haWwgdHJhbnNwb3J0CisjICAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorIyAgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCisjICAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmUKKyMgICAtLXdpdGgtbGliaW50bC1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaW50bCBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorIyAgIC0td2l0aG91dC1saWJpbnRsLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpbnRsIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorIyAgIC0td2l0aG91dC1yZWFkbGluZSAgICAgIGRvIG5vdCBzdXBwb3J0IGZhbmN5IGNvbW1hbmQgbGluZSBlZGl0aW5nCisjICAgLS13aXRoLWluY2x1ZGVkLXJlZ2V4ICAgdXNlIHRoZSBpbmNsdWRlZCBHTlUgcmVnZXggbGlicmFyeQorIyAgIC0td2l0aC16bGliPURJUiAgICAgICAgIHVzZSBsaWJ6IGluIERJUgorIyAgIC0td2l0aC1iemlwMj1ESVIgICAgICAgIGxvb2sgZm9yIGJ6aXAyIGluIERJUgorIyAgIC0tZW5hYmxlLXN0YXRpYy1ybmQ9ZWdkfHVuaXh8bGludXh8YXV0bworIyAgIC0tZGlzYWJsZS1kZXYtcmFuZG9tICAgIGRpc2FibGUgdGhlIHVzZSBvZiBkZXYgcmFuZG9tCisjICAgLS1kaXNhYmxlLWFzbSAgICAgICAgICAgZG8gbm90IHVzZSBhc3NlbWJsZXIgbW9kdWxlcworIyAgIC0tZW5hYmxlLW0tZ3VhcmQgICAgICAgIGVuYWJsZSBtZW1vcnkgZ3VhcmQgZmFjaWxpdHkKKyMgICAtLWVuYWJsZS1zZWxpbnV4LXN1cHBvcnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgU0VMaW51eCBzdXBwb3J0CisjICAgLS1kaXNhYmxlLWNhcmQtc3VwcG9ydCAgZGlzYWJsZSBPcGVuUEdQIGNhcmQgc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1nbnVwZy1pY29udiAgIGRpc2FibGUgdGhlIG5ldyBpY29udiBjb2RlCisjICAgLS1lbmFibGUtYmFja3NpZ3MgICAgICAgZW5hYmxlIHRoZSBleHBlcmltZW50YWwgYmFja3NpZ3MgY29kZQorIyAgIC0tZW5hYmxlLW1pbmltYWwgICAgICAgIGJ1aWxkIHRoZSBzbWFsbGVzdCBncGcgYmluYXJ5IHBvc3NpYmxlCisjICAgLS1kaXNhYmxlLXJzYSAgICAgICAgICAgZGlzYWJsZSB0aGUgUlNBIHB1YmxpYyBrZXkgYWxnb3JpdGhtCisjICAgLS1kaXNhYmxlLWlkZWEgICAgICAgICAgZGlzYWJsZSB0aGUgSURFQSBjaXBoZXIKKyMgICAtLWRpc2FibGUtY2FzdDUgICAgICAgICBkaXNhYmxlIHRoZSBDQVNUNSBjaXBoZXIKKyMgICAtLWRpc2FibGUtYmxvd2Zpc2ggICAgICBkaXNhYmxlIHRoZSBCTE9XRklTSCBjaXBoZXIKKyMgICAtLWRpc2FibGUtYWVzICAgICAgICAgICBkaXNhYmxlIHRoZSBBRVMsIEFFUzE5MiwgYW5kIEFFUzI1NiBjaXBoZXJzCisjICAgLS1kaXNhYmxlLXR3b2Zpc2ggICAgICAgZGlzYWJsZSB0aGUgVFdPRklTSCBjaXBoZXIKKyMgICAtLWRpc2FibGUtc2hhMjU2ICAgICAgICBkaXNhYmxlIHRoZSBTSEEtMjU2IGRpZ2VzdAorIyAgIC0tZGlzYWJsZS1zaGE1MTIgICAgICAgIGRpc2FibGUgdGhlIFNIQS0zODQgYW5kIFNIQS01MTIgZGlnZXN0cworIyAgIC0tZGlzYWJsZS1iemlwMiAgICAgICAgIGRpc2FibGUgdGhlIEJaSVAyIGNvbXByZXNzaW9uIGFsZ29yaXRobQorIyAgIC0tZGlzYWJsZS1leGVjICAgICAgICAgIGRpc2FibGUgYWxsIGV4dGVybmFsIHByb2dyYW0gZXhlY3V0aW9uCisjICAgLS1kaXNhYmxlLXBob3RvLXZpZXdlcnMgZGlzYWJsZSBwaG90byBJRCB2aWV3ZXJzCisjICAgLS1kaXNhYmxlLWtleXNlcnZlci1oZWxwZXJzICBkaXNhYmxlIGFsbCBleHRlcm5hbCBrZXlzZXJ2ZXIgc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1sZGFwICAgICAgICAgIGRpc2FibGUgTERBUCBrZXlzZXJ2ZXIgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLWhrcCAgICAgICAgICAgZGlzYWJsZSBIS1Aga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1odHRwICAgICAgICAgIGRpc2FibGUgSFRUUCBrZXkgZmV0Y2hpbmcgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLWZpbmdlciAgICAgICAgZGlzYWJsZSBGaW5nZXIga2V5IGZldGNoaW5nIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1tYWlsdG8gICAgICAgIGRpc2FibGUgZW1haWwga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1rZXlzZXJ2ZXItcGF0aCBkaXNhYmxlIHRoZSBleGVjLXBhdGggb3B0aW9uIGZvciBrZXlzZXJ2ZXIgaGVscGVycworIyAgIC0tZW5hYmxlLWtleS1jYWNoZT1TSVpFIFNldCBrZXkgY2FjaGUgdG8gU0laRSAoZGVmYXVsdCA0MDk2KQorIyAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyMgICAtLWRpc2FibGUtZG5zLXNydiAgICAgICBkaXNhYmxlIHRoZSB1c2Ugb2YgRE5TIFNSViBpbiBIS1AgYW5kIEhUVFAKKyMgICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjICAgLS1kaXNhYmxlLXJlZ2V4ICAgICAgICAgZG8gbm90IGhhbmRsZSByZWd1bGFyIGV4cHJlc3Npb25zIGluIHRydXN0IHNpZ3MKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIFwKKwkJLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLXdpdGgtYnppcDI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLWRpc2FibGUtc2VsaW51eC1zdXBwb3J0IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT1ubyBcCisJCSIKKworIyBGb3JjZSBnY2MncyB0cmFkaXRpb25hbCBoYW5kbGluZyBvZiBpbmxpbmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggZ2NjIDUKK0NGTEFHUyArPSAiLWZnbnU4OS1pbmxpbmUiCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9LyR7QlBOfQorCW12ICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS8qICR7RH0vJHtkb2NkaXJ9LyR7QlBOfS8gfHwgOgorCW12ICR7RH0ke3ByZWZpeH0vZG9jLyogJHtEfS8ke2RvY2Rpcn0vJHtCUE59LyB8fCA6Cit9CisKKyMgc3BsaXQgb3V0IGdwZ3YgZnJvbSBtYWluIHBhY2thZ2UKK1JERVBFTkRTXyR7UE59ID0gImdwZ3YiCitQQUNLQUdFUyA9KyAiZ3BndiIKK0ZJTEVTX2dwZ3YgPSAiJHtiaW5kaXJ9L2dwZ3YiCisKKyMgRXhjbHVkZSBkZWJ1ZyBmaWxlcyBmcm9tIHRoZSBtYWluIHBhY2thZ2VzCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9LyR7QlBOfS8uZGVidWciCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2N1cmxdID0gIi0td2l0aC1saWJjdXJsPSR7U1RBR0lOR19MSUJESVJ9LC0td2l0aG91dC1saWJjdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW2xpYnVzYl0gPSAiLS13aXRoLWxpYnVzYj0ke1NUQUdJTkdfTElCRElSfSwtLXdpdGhvdXQtbGlidXNiLGxpYnVzYi1jb21wYXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YzdjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkdOVSBQcml2YWN5IEd1YXJkIC0gZW5jcnlwdGlvbiBhbmQgc2lnbmluZyB0b29scyAoMi54KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCisKK0RFUEVORFMgPSAibnB0aCBsaWJhc3N1YW4gbGlia3NiYSB6bGliIGJ6aXAyIHJlYWRsaW5lIGxpYmdjcnlwdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHBrZ2NvbmZpZworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImViZGY5MmIxNWI4YmNkODU3OWI2NDNjN2Y0MWEzMjM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMxOGEzNzc2ZDQ3ZmVjOTg4OTJkNTFkMjhiNjU3NGVmMTZiZjBhMjVlYWJiMDk1NjIzMTA1OGFhZjJlNzg0NmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCisJCS0tZGlzYWJsZS1jY2lkLWRyaXZlciBcCisJCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicGluZW50cnkiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKKwlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAorCXJtIC1mICR7U30vbTQva3NiYS5tNAorCXJtIC1mICR7U30vbTQvbGliZ2NyeXB0Lm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWxuIC1zZiBncGcyICR7RH0ke2JpbmRpcn0vZ3BnCisJbG4gLXNmIGdwZ3YyICR7RH0ke2JpbmRpcn0vZ3BndgorfQorCitSREVQRU5EU18ke1BOfSA9ICJnbnV0bHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjEzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYwpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdOVSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgTGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnV0bHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvc3VwcG9ydC8/Z3JvdXA9Z251dGxzIgorREVQRU5EUyA9ICJuZXR0bGUiCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LXh4ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tYmluID0gIkdQTHYzKyIKK0xJQ0VOU0VfJHtQTn0tb3BlbnNzbCA9ICJHUEx2MysiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXRscy5vcmcvZ2NyeXB0L2dudXRscy92JHtTSFJUX1ZFUn0vZ251dGxzLSR7UFZ9LnRhci54eiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWcgcGtnY29uZmlnIGdldHRleHQgbGliX3BhY2thZ2UKKworRVhUUkFfT0VDT05GPSItLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidGFzbjEgXAorICAgICAgICAgICAgICAtLWVuYWJsZS1sb2NhbC1saWJvcHRzIFwKKyAgICAgICAgICAgICAgLS13aXRoLWxpYnB0aHJlYWQtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAtLWRpc2FibGUtZ3VpbGUgXAorICAgICAgICAgICAgICAtLWRpc2FibGUtY3J5d3JhcCBcCisgICAgICAgICAgICAgIC0td2l0aG91dC1wMTEta2l0IFwKKyAgICAgICAgICAgICAgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlmb3IgZGlyIGluIC4gbGliOyBkbworCQlybSAtZiAke2Rpcn0vYWNsb2NhbC5tNCAke2Rpcn0vbTQvbGlidG9vbC5tNCAke2Rpcn0vbTQvbHQqLm00CisJZG9uZQorfQorCitQQUNLQUdFQ09ORklHID8/PSAiemxpYiIKK1BBQ0tBR0VDT05GSUdbdHBtXSA9ICItLXdpdGgtdHBtLCAtLXdpdGhvdXQtdHBtLCB0cm91c2VycyIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsIC0td2l0aG91dC16bGliLCB6bGliIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tb3BlbnNzbCAke1BOfS14eCIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ251dGxzLWNsaS1kZWJ1ZyIKK0ZJTEVTXyR7UE59LW9wZW5zc2wgPSAiJHtsaWJkaXJ9L2xpYmdudXRscy1vcGVuc3NsLnNvLioiCitGSUxFU18ke1BOfS14eCA9ICIke2xpYmRpcn0vbGliZ251dGxzeHguc28uKiIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgKz0gIiAtcHRocmVhZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTk5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvbmZpZ3VyZS5hYy1maXgtc2VkLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBlYjkzYWE3Yjk4NmM4NGRhNjBhM2RiNDBhZmIyOWQxYTcwYzUwMjIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDE3IEphbiAyMDE1IDE3OjAyOjE1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogZml4IHNlZCBjb21tYW5kCisKK1RoZSAic2VkICdzLy5iYWsvL2cnIiBtYXRjaHMgImJpdGJha2UiLCB3aGljaCB3b3VsZCBjYXVzZSBzdHJhbmdlIGVycm9ycword2hlbiB0aGUgUyBjb250YWlucyAiYml0YmFrZSIsIGZpeCB0byAic2VkICdzL1wuYmFrJC8vJ2AiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYzY4MThhMC4uMWM0NTgyZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDY2LDcgKzQ2Niw3IEBAIGlmIHRlc3QgIiRORUVEX0xJQk9QVFNfRElSIiA9ICJ0cnVlIjt0aGVuCisgCWRubCByZXBsYWNlIGxpYm9wdHMtZ2VuZXJhdGVkIGZpbGVzIHdpdGggZGlzdHJpYnV0ZWQgYmFja3VwcywgaWYgcHJlc2VudAorIAltaXNzaW5nX2Jha3M9CisgCWZvciBpIGluICR7c3JjZGlyfS9zcmMvKi1hcmdzLmMuYmFrICR7c3JjZGlyfS9zcmMvKi1hcmdzLmguYmFrOyBkbworLQkJbmFtPWBlY2hvICRpfHNlZCAncy8uYmFrLy9nJ2AKKysJCW5hbT1gZWNobyAkaXxzZWQgJ3MvXC5iYWskLy8nYAorIAkJaWYgdGVzdCAtZiAkaTt0aGVuCisgCQkJY3AgLWYgJGkgJG5hbQorIAkJZWxzZQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NTJjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGFlMzM3MDc4OGVkMzQ0N2JiYTE2OTY5ZDllYjFiZjFiOTYzMWUxYjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWYWxlbnRpbiBQb3BhIDx2YWxlbnRpbi5wb3BhQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgMjUgQXByIDIwMTQgMTM6NTg6NTUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ29ycmVjdCBycGxfZ2V0dGltZW9mZGF5IHNpZ25hdHVyZQorCitDdXJyZW50bHkgd2UgZmFpbCBvbiB1Y2xpYmMgbGlrZSBiZWxvdworCit8IEluIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc3lzL3Byb2Nmcy5oOjMyOjAsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0Lmg6MjYsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc2lnbmFsLmg6MzkyLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc2lnbmFsLmg6NTIsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9nbC9zeXMvc2VsZWN0Lmg6NTgsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmg6MjIwLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc3lzL3R5cGVzLmg6MjgsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9saWIvaW5jbHVkZXMvZ251dGxzL2dudXRscy5oOjQ2LAorfCAgICAgICAgICAgICAgICAgIGZyb20gZXgtY3h4LmNwcDozOgorfCAuLi8uLi9nbC9zeXMvdGltZS5oOjM5Njo2NjogZXJyb3I6IGNvbmZsaWN0aW5nIGRlY2xhcmF0aW9uICd2b2lkKiByZXN0cmljdCcKK3wgLi4vLi4vZ2wvc3lzL3RpbWUuaDozOTY6NTA6IGVycm9yOiAncmVzdHJpY3QnIGhhcyBhIHByZXZpb3VzIGRlY2xhcmF0aW9uIGFzICd0aW1ldmFsKiByZXN0cmljdCcKK3wgbWFrZVs0XTogKioqIFtleC1jeHgub10gRXJyb3IgMQorfCBtYWtlWzRdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorCitHQ0MgZGV0ZWN0cyB0aGF0IHdlIGNhbGwgJ3Jlc3RyaWN0JyBhcyBwYXJhbSBuYW1lIGluIGZ1bmN0aW9uCitzaWduYXR1cmVzIGFuZCBjb21wbGFpbnMgc2luY2UgYm90aCBwYXJhbXMgYXJlIGNhbGxlZCAncmVzdHJpY3QnCit0aGVyZWZvcmUgd2UgdXNlIF9fcmVzdHJpY3QgdG8gZGVub3RlIHRoZSBDOTkga2V5d29yaworCitUaGlzIG9ubHkgaGFwcGVucyBvZiB1Y2xpYmMgc2luY2UgdGhpcyBjb2RlIGlzIG5vdCBleGNlcmNpc2VkIHdpdGgKK2VnbGliYyBvdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIHNhbWUgaXNzdWUgdGhlcmUgdG9vCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2wvc3lzX3RpbWUuaW4uaCB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2wvc3lzX3RpbWUuaW4uaCBiL2dsL3N5c190aW1lLmluLmgKK2luZGV4IDg0YTE3YzkuLjZjZWFkYzMgMTAwNjQ0CistLS0gYS9nbC9zeXNfdGltZS5pbi5oCisrKysgYi9nbC9zeXNfdGltZS5pbi5oCitAQCAtOTMsMjAgKzkzLDIwIEBAIHN0cnVjdCB0aW1ldmFsCisgIyAgIGRlZmluZSBnZXR0aW1lb2ZkYXkgcnBsX2dldHRpbWVvZmRheQorICMgIGVuZGlmCisgX0dMX0ZVTkNERUNMX1JQTCAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpCisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KQorICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgX0dMX0NYWEFMSUFTX1JQTCAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpKTsKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKKyAjIGVsc2UKKyAjICBpZiAhQEhBVkVfR0VUVElNRU9GREFZQAorIF9HTF9GVU5DREVDTF9TWVMgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQorKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKKyAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICMgIGVuZGlmCisgLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIGdsaWJjIHN5c3RlbXMsIGJ5IGRlZmF1bHQsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lem9uZSAqLiAgKi8KKyBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpKTsKKysgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkpOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNXQVJOIChnZXR0aW1lb2ZkYXkpOworICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYjdjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBjZWU4MGFmMWZlOTNmNWI3Njc2NWFmZWViZmNjM2I5MDI3NjhmNWQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjYgTWF5IDIwMTUgMjE6NDE6MjQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIHBrZy1jb25maWcgdG8gbG9jYXRlIHpsaWIKKworQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiBzb21ldGltZXMgZmluZCBob3N0IGxpYnMgYW5kIGlzIHRoZXJlZm9yZSBub3QKK3JvYnVzdCB3aGVuIGNyb3NzLWNvbXBpbGluZy4gUmVtb3ZlIGl0IGZvciB6bGliIGFuZCB1c2UgUEtHX0NIRUNLX01PRFVMRVMKK2luc3RlYWQuCisKK1JlbW92aW5nIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBmb3IgemxpYiBhbHNvIHJlbW92ZXMgdGhlIC0td2l0aC1saWJ6LXByZWZpeAorY29uZmlndXJlIG9wdGlvbi4gSWYgemxpYiBzdXBwb3J0IGlzIGVuYWJsZWQsIHRoZW4gZmFpbHVyZSB0byBmaW5kIHpsaWIgdmlhCitwa2ctY29uZmlnIGlzIG5vdyB0cmVhdGVkIGFzIGEgZmF0YWwgZXJyb3IuCisKK0NoYW5nZSBiYXNlZCBvbiBDaHJvbWVPUyBnbnV0bHMgMi4xMi4yMyBjcm9zcy1jb21waWxlIGZpeGVzIHBhdGNoOgorCisgIGh0dHBzOi8vY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vIy9jLzI3MTY2MS8KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjQgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAxYjU2MWQ1Li4wYzc4N2RjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MDgsMjUgKzUwOCwyMSBAQCBBQ19BUkdfV0lUSCh6bGliLCBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LXpsaWJdLAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIHpsaWIgY29tcHJlc3Npb24gc3VwcG9ydF0pCisgaWYgdGVzdCB4JGFjX3psaWIgIT0geG5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorLSBBQ19MSUJfSEFWRV9MSU5LRkxBR1MoeiwsIFsjaW5jbHVkZSA8emxpYi5oPl0sIFtjb21wcmVzcyAoMCwgMCwgMCwgMCk7XSkKKy0gaWYgdGVzdCB4JGFjX2N2X2xpYnogIT0geHllczsgdGhlbgorLSAgIEFDX01TR19XQVJOKAorLSoqKiAKKy0qKiogWkxJQiB3YXMgbm90IGZvdW5kLiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgWkxJQiBjb21wcmVzc2lvbi4pCistIGZpCisgZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorIGZpCisgCistUEtHX0NIRUNLX0VYSVNUUyh6bGliLCBaTElCX0hBU19QS0dDT05GSUc9eSwgWkxJQl9IQVNfUEtHQ09ORklHPW4pCistCisgaWYgdGVzdCB4JGFjX3psaWIgIT0geG5vOyB0aGVuCistICBpZiB0ZXN0ICIkWkxJQl9IQVNfUEtHQ09ORklHIiA9ICJ5IiA7IHRoZW4KKy0gICAgaWYgdGVzdCAieCRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSIgPSB4OyB0aGVuCistICAgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IlJlcXVpcmVzLnByaXZhdGU6IHpsaWIiCistICAgIGVsc2UKKy0gICAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iJEdOVVRMU19SRVFVSVJFU19QUklWQVRFLCB6bGliIgorLSAgICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWkxJQiwgemxpYikKKysgIEhBVkVfTElCWj15ZXMKKysgIEFDX0RFRklORShbSEFWRV9MSUJaXSwgWzFdLCBbemxpYiBpcyBlbmFibGVkXSkKKysgIEFDX1NVQlNUKEhBVkVfTElCWikKKysgIExUTElCWj0kWkxJQl9MSUJTCisrICBBQ19TVUJTVChMVExJQlopCisrICBpZiB0ZXN0ICJ4JEdOVVRMU19SRVFVSVJFU19QUklWQVRFIiA9IHg7IHRoZW4KKysgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IlJlcXVpcmVzLnByaXZhdGU6IHpsaWIiCisrICBlbHNlCisrICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSIkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUsIHpsaWIiCisgICBmaQorIGZpCisgQUNfU1VCU1QoR05VVExTX1JFUVVJUkVTX1BSSVZBVEUpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODU3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBnbnV0bHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDAxYzdlN2YyY2JjNTg3MWZkY2E4MzJkMjI2MGI2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDBmMTU4MDMwYTkyZjQ1MGEwN2IyMDMwMGEzOTk2NzEwY2ExOTgwMDg0OGQ5ZjZmZDYyNDkzMTcwYzViYmI0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzg5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtCistLS0gbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wOS0yNCAxNTowODo0Mi4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTAzIDA3OjM1OjI2LjcwMjc2MzQwMyArMDIwMAorQEAgLTMxLDcgKzMxLDcgQEAKKyBBTV9NQUtFSU5GT0hUTUxGTEFHUyA9ICQoQU1fTUFLRUlORk9GTEFHUykgXAorCS0tbm8tc3BsaXQgLS1udW1iZXItc2VjdGlvbnMgLS1jc3MtaW5jbHVkZT10ZXhpbmZvLmNzcworCistZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKSBhc24xUGFyc2VyLjEgYXNuMUNvZGluZy4xIGFzbjFEZWNvZGluZy4xCisrZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKQorCisgSEVMUDJNQU5fT1BUUyA9IC0taW5mby1wYWdlIGxpYnRhc24xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODc0NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIEFTTi4xIGFuZCBERVIgbWFuaXB1bGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRhc24xLyIKKworTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7ZW5kbGluZT04O21kNT1jMzgwM2EzZThjYTVhYjVlYjFlNTkxMmZhYTQwNTM1MSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnRhc24xL2xpYnRhc24xLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjgxZDI3MjY5NzU0NWU4MmQzOWY2YmQxNDg1NGI2OGYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5YjNiNWRjZTExOTI3MzQzMTU0NGVjYjMwNTA4MWYzNTMwOTExMDAxYmIxMmU1ZDc2NTg4OTA3ZWRiNzFiZGEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIGxpYl9wYWNrYWdlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9ncGdtZS5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE0ZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMKQEAgLTAsMCArMSwxMCBAQAorcHJlZml4PS91c3IKK2xpYmRpcj0ke3ByZWZpeH0vbGliCitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IGdwZ21lCitEZXNjcmlwdGlvbjogR05VIFByaXZhY3kgR3VhcmQgTWFkZSBFYXN5CitWZXJzaW9uOiAxLjQuMworUmVxdWlyZXM6CitMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lIC1sYXNzdWFuIC1sZ3BnLWVycm9yCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjFmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyNzkgQEAKK1VwZGF0ZSBncGdtZSB0byB1c2UgcGtnY29uZmlnIGluc3RlYWQgb2YgLWNvbmZpZyBmaWxlcyBzaW5jZSBpdHMKK3NpbXBsZXIgYW5kIGxlc3MgZXJyb3IgcHJvbmUgd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtVcHN0cmVhbSBub3QgaW50ZXJlc3RlZCBpbiBwa2ctY29uZmlnIHN1cHBvcnRdCitSUCAyMDE1LzQvMTcKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjk4YTIyYi4uYzc3OGI2MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjIyLDYgKzYyMiw3IEBAIEFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZSBzcmMvTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgc3JjL3ZlcnNpb25pbmZvLnJjCisgICAgICAgICAgICAgICAgIHNyYy9ncGdtZS5oKQorIEFDX0NPTkZJR19GSUxFUyhzcmMvZ3BnbWUtY29uZmlnLCBjaG1vZCAreCBzcmMvZ3BnbWUtY29uZmlnKQorK0FDX0NPTkZJR19GSUxFUyhzcmMvZ3BnbWUucGMgc3JjL2dwZ21lLXB0aHJlYWQucGMpCisgQUNfQ09ORklHX0ZJTEVTKFtsYW5nL01ha2VmaWxlIGxhbmcvY2wvTWFrZWZpbGUgbGFuZy9jbC9ncGdtZS5hc2RdKQorIEFDX09VVFBVVAorIAorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggNTg5MjJmOS4uNDBkMGRjYSAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMjAsMTEgKzIwLDEzIEBACisgCisgIyBOb3RlOiBtb2Nfa2RwaXBlaW9kZXZpY2Ugc2hvdWxkIGFjdHVhbGx5IGJlIGEgZGVwZW5kZWN5IGJlbG93LgorIEVYVFJBX0RJU1QgPSBncGdtZS1jb25maWcuaW4gZ3BnbWUubTQgbGliZ3BnbWUudmVycyBDaGFuZ2VMb2ctMjAxMSBcCistCSAgICAgZ3BnbWUuaC5pbiB2ZXJzaW9uaW5mby5yYy5pbiBncGdtZS5kZWYgbW9jX2tkcGlwZWlvZGV2aWNlLmNwcAorKwkgICAgIGdwZ21lLmguaW4gdmVyc2lvbmluZm8ucmMuaW4gZ3BnbWUuZGVmIG1vY19rZHBpcGVpb2RldmljZS5jcHAgZ3BnbWUucGMuaW4gZ3BnbWUtcHRocmVhZC5wYy5pbgorIAorIGJpbl9TQ1JJUFRTID0gZ3BnbWUtY29uZmlnCisgbTRkYXRhZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCisgbTRkYXRhX0RBVEEgPSBncGdtZS5tNAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGdwZ21lLnBjIGdwZ21lLXB0aHJlYWQucGMKKyBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gZ3BnbWUuaAorIAorIGJpbl9QUk9HUkFNUyA9IGdwZ21lLXRvb2wKK2RpZmYgLS1naXQgYS9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbiBiL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTgwYTQ4ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4KK0BAIC0wLDAgKzEsMTUgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEdQR01FX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBHUEdNRV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGdtZQorK0Rlc2NyaXB0aW9uOiBHbnVQRyBNYWRlIEVhc3kgKEdQR01FKSBpcyBhIEMgbGFuZ3VhZ2UgbGlicmFyeSB0aGF0IGFsbG93cyB0byBhZGRzdXBwb3J0IGZvciBjcnlwdG9ncmFwaHkgdG8gYSBwcm9ncmFtICh0aHJlYWRlZCB2ZXJzaW9uKQorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnbWUtcHRocmVhZCAtbHB0aHJlYWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorK1JlcXVpcmVzOiBsaWJhc3N1YW4gZ3BnLWVycm9yCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLm00IGIvc3JjL2dwZ21lLm00CitpbmRleCA2YzJiZTQ0Li5kOGE3NWNiIDEwMDY0NAorLS0tIGEvc3JjL2dwZ21lLm00CisrKysgYi9zcmMvZ3BnbWUubTQKK0BAIC03OSw3ICs3OSw3IEBAIGRubCBjb25maWcgc2NyaXB0IGRvZXMgbm90IG1hdGNoIHRoZSBob3N0IHNwZWNpZmljYXRpb24gdGhlIHNjcmlwdAorIGRubCBpcyBhZGRlZCB0byB0aGUgZ3BnX2NvbmZpZ19zY3JpcHRfd2FybiB2YXJpYWJsZS4KKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCistWyBBQ19SRVFVSVJFKFtfQU1fUEFUSF9HUEdNRV9DT05GSUddKWRubAorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC40LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfZ3BnbWVfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTg5LDM2ICs4OSwxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRSwgW2dwZ21lID49ICRtaW5fZ3BnbWVfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0xMjcsMTkgKzEwMywxMSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgR1BHTUVfTElCUz1gJEdQR01FX0NPTkZJRyAtLWxpYnNgCistICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSworICAgZWxzZQorLSAgICBHUEdNRV9DRkxBR1M9IiIKKy0gICAgR1BHTUVfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX0NGTEFHUykKKy0gIEFDX1NVQlNUKEdQR01FX0xJQlMpCisgXSkKKyAKKyBkbmwgQU1fUEFUSF9HUEdNRV9QVEhSRUFEKFtNSU5JTVVNLVZFUlNJT04sCitAQCAtMTQ4LDcgKzExNiw3IEBAIGRubCBUZXN0IGZvciBsaWJncGdtZSBhbmQgZGVmaW5lIEdQR01FX1BUSFJFQURfQ0ZMQUdTCisgZG5sICBhbmQgR1BHTUVfUFRIUkVBRF9MSUJTLgorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAorLVsgQUNfUkVRVUlSRShbX0FNX1BBVEhfR1BHTUVfQ09ORklHXSlkbmwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuNC4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2dwZ21lX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC0xNTgsMzggKzEyNiwxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgcHRocmVhZCAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIGlmIGAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgMj4gL2Rldi9udWxsYCA7IHRoZW4KKy0gICAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRV9QVEhSRUFELCBbZ3BnbWUtcHRocmVhZCA+PSAkbWluX2dwZ21lX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lLXB0aHJlYWQgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0xOTgsMTkgKzE0MCwxMSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfUFRIUkVBRF9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAtLWNmbGFnc2AKKy0gICAgR1BHTUVfUFRIUkVBRF9MSUJTPWAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfUFRIUkVBRF9DRkxBR1M9IiIKKy0gICAgR1BHTUVfUFRIUkVBRF9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfUFRIUkVBRF9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9QVEhSRUFEX0xJQlMpCisgXSkKKyAKKyAKK0BAIC0yMjksMzYgKzE2MywxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9HTElCXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FX0dMSUIsIFtncGdtZSA+PSAkbWluX2dwZ21lX3ZlcnNpb24gZ2xpYi0yLjBdLCBbb2s9eWVzXSwgW29rPW5vXSkgIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0yNjcsMTcgKzE3Nyw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX0dMSUJdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9HTElCX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLWdsaWIgLS1jZmxhZ3NgCistICAgIEdQR01FX0dMSUJfTElCUz1gJEdQR01FX0NPTkZJRyAtLWdsaWIgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfR0xJQl9DRkxBR1M9IiIKKy0gICAgR1BHTUVfR0xJQl9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfR0xJQl9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9HTElCX0xJQlMpCisgXSkKK2RpZmYgLS1naXQgYS9zcmMvZ3BnbWUucGMuaW4gYi9zcmMvZ3BnbWUucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjk1MzlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ3BnbWUucGMuaW4KK0BAIC0wLDAgKzEsMTUgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEdQR01FX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBHUEdNRV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGdtZQorK0Rlc2NyaXB0aW9uOiBHbnVQRyBNYWRlIEVhc3kgKEdQR01FKSBpcyBhIEMgbGFuZ3VhZ2UgbGlicmFyeSB0aGF0IGFsbG93cyB0byBhZGRzdXBwb3J0IGZvciBjcnlwdG9ncmFwaHkgdG8gYSBwcm9ncmFtLgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnbWUKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorK1JlcXVpcmVzOiBsaWJhc3N1YW4gZ3BnLWVycm9yCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWVfMS41LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5ODM3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiSGlnaC1sZXZlbCBHbnVQRyBlbmNyeXB0aW9uL3NpZ25pbmcgQVBJIgorREVTQ1JJUFRJT04gPSAiR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIG1ha2UgYWNjZXNzIHRvIEdudVBHIGVhc2llciBmb3IgYXBwbGljYXRpb25zLiBJdCBwcm92aWRlcyBhIEhpZ2gtTGV2ZWwgQ3J5cHRvIEFQSSBmb3IgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgc2lnbmluZywgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9ncGdtZS5odG1sIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGdtZS5oLmluO2VuZGxpbmU9MjM7bWQ1PTcxYmEyYWU4ZDZjYTAzNGVkMTBiZDA5OWE4Y2Y0NzNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9lbmdpbmUuaDtlbmRsaW5lPTIyO21kNT00YjZkOGJhMzEzZDliNTY0Y2M0ZDRjZmIxNjQwYWY5ZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9ncGdtZS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2dwZ21lLnBjIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmVhZmEwM2VhMDY0ZTFkMWRjMTFiYzJiODg0MDQ2MjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmIzOGMwZWM4ODE1YzllOTRlNjA0N2I0ODQ5ODQ4MDhhOGRhZDlkNmJlYzhkZjMzZGM1MzM5ZmQ1NWZmZWE2YyIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliYXNzdWFuIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2dwZ21lLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0rICIke1BOfS1wdGhyZWFkIgorRklMRVNfJHtQTn0tcHRocmVhZCA9ICIke2xpYmRpcn0vbGliZ3BnbWUtcHRocmVhZC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NvbW1vbi1saXNwL3NvdXJjZS9ncGdtZS8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ncGdtZS5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ZjIyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiSW50ZXJuYXRpb25hbCBDb21wb25lbnQgZm9yIFVuaWNvZGUgbGlicmFyaWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEludGVybmF0aW9uYWwgQ29tcG9uZW50IGZvciBVbmljb2RlIChJQ1UpIGlzIGEgbWF0dXJlLCBcCitwb3J0YWJsZSBzZXQgb2YgQy9DKysgYW5kIEphdmEgbGlicmFyaWVzIGZvciBVbmljb2RlIHN1cHBvcnQsIHNvZnR3YXJlIFwKK2ludGVybmF0aW9uYWxpemF0aW9uIChJMThOKSBhbmQgZ2xvYmFsaXphdGlvbiAoRzExTiksIGdpdmluZyBhcHBsaWNhdGlvbnMgdGhlIFwKK3NhbWUgcmVzdWx0cyBvbiBhbGwgcGxhdGZvcm1zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zaXRlLmljdS1wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiSUNVIgorREVQRU5EUyA9ICJpY3UtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitTID0gIiR7V09SS0RJUn0vaWN1L3NvdXJjZSIKK1NQRFhfUyA9ICIke1dPUktESVJ9L2ljdSIKK1NUQUdJTkdfSUNVX0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS8ke0JQTn0vJHtQVn0iCisKK0NQUEZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURVX1RJTUVaT05FPTAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vaWN1LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZworCisjIElDVSBuZWVkcyB0aGUgbmF0aXZlIGJ1aWxkIGRpcmVjdG9yeSBhcyBhbiBhcmd1bWVudCB0byBpdHMgLS13aXRoLWNyb3NzLWJ1aWxkIG9wdGlvbiB3aGVuCisjIGNyb3NzLWNvbXBpbGluZy4gVGFrZW4gdGhlIHNpdHVhdGlvbiB0aGF0IGRpZmZlcmVudCBidWlsZHMgbWF5IHNoYXJlIGEgY29tbW9uIHNzdGF0ZS1jYWNoZQorIyBpbnRvIGNvbnNpZGVyYXRpb24sIHRoZSBuYXRpdmUgYnVpbGQgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHN0YWdlZC4KK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtY3Jvc3MtYnVpbGQ9JHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGgtY3Jvc3MtYnVpbGQ9JHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfSIKKworUFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTID0gIiR7ZGF0YWRpcn0vJHtCUE59LyR7UFZ9IgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCW1rZGlyIC1wICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfS9jb25maWcKKwljcCAtciAke0J9L2NvbmZpZy9pY3Vjcm9zcy5tayAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9jb25maWcvaWN1Y3Jvc3MuaW5jICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfS9jb25maWcKKwljcCAtciAke0J9L2xpYiAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KKwljcCAtciAke0J9L2JpbiAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KKwljcCAtciAke0J9L3Rvb2xzICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfQorfQorCitQQUNLQUdFUyA9KyAibGliaWN1ZGF0YSBsaWJpY3V1YyBsaWJpY3VpMThuIGxpYmljdWxlIGxpYmljdWx4IGxpYmljdXR1IGxpYmljdWlvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vIgorCitGSUxFU19saWJpY3VkYXRhID0gIiR7bGliZGlyfS9saWJpY3VkYXRhLnNvLioiCitGSUxFU19saWJpY3V1YyA9ICIke2xpYmRpcn0vbGliaWN1dWMuc28uKiIKK0ZJTEVTX2xpYmljdWkxOG4gPSAiJHtsaWJkaXJ9L2xpYmljdWkxOG4uc28uKiIKK0ZJTEVTX2xpYmljdWxlID0gIiR7bGliZGlyfS9saWJpY3VsZS5zby4qIgorRklMRVNfbGliaWN1bHggPSAiJHtsaWJkaXJ9L2xpYmljdWx4LnNvLioiCitGSUxFU19saWJpY3V0dSA9ICIke2xpYmRpcn0vbGliaWN1dHUuc28uKiIKK0ZJTEVTX2xpYmljdWlvID0gIiR7bGliZGlyfS9saWJpY3Vpby5zby4qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY4ZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDBjODJkNmFhMDJjMDhlNDFiMTNjODNiMTQ3ODJiZDcwMjRlMjVkNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBGZWIgMjAxNCAyMTowNjo0MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIExERkxBR1NJQ1VEVCBmb3IgTGludXgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0UgQ29uZmlndXJhdGlvbiBdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzb3VyY2UvY29uZmlnL21oLWxpbnV4IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnL21oLWxpbnV4IGIvY29uZmlnL21oLWxpbnV4CitpbmRleCAzNjZmMGNjLi4yNjg5YWFiIDEwMDY0NAorLS0tIGEvY29uZmlnL21oLWxpbnV4CisrKysgYi9jb25maWcvbWgtbGludXgKK0BAIC0yMSw3ICsyMSw3IEBAIExEX1JQQVRIPSAtV2wsLXpvcmlnaW4sLXJwYXRoLCckJCdPUklHSU4KKyBMRF9SUEFUSF9QUkUgPSAtV2wsLXJwYXRoLAorIAorICMjIFRoZXNlIGFyZSB0aGUgbGlicmFyeSBzcGVjaWZpYyBMREZMQUdTCistTERGTEFHU0lDVURUPS1ub2RlZmF1bHRsaWJzIC1ub3N0ZGxpYgorKyMgTERGTEFHU0lDVURUPS1ub2RlZmF1bHRsaWJzIC1ub3N0ZGxpYgorIAorICMjIENvbXBpbGVyIHN3aXRjaCB0byBlbWJlZCBhIGxpYnJhcnkgbmFtZQorICMgVGhlIGluaXRpYWwgdGFiIGluIHRoZSBuZXh0IGxpbmUgaXMgdG8gcHJldmVudCBpY3UtY29uZmlnIGZyb20gcmVhZGluZyBpdC4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQwNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorcGtnZGF0YS5jcHA6IHVzZSBMQVJHRV9CVUZGRVJfTUFYX1NJWkUgZm9yIGNtZAorCitVc2UgTEFSR0VfQlVGRkVSX01BWF9TSVpFIGZvciBjbWQgcmF0aGVyIHRoYW4gU01BTExfQlVGRkVSX01BWF9TSVpFLAorb3RoZXJ3aXNlIHRoZXJlIHdhcyBhIFNlZ21lbnRhdGlvbiBmYXVsdCBlcnJvciB3aGVuIHRoZSBjb21tYW5kIGxpbmUgaXMKK2xvbmcsIHRoaXMgc2hvdWxkIGJlIGEgbWlzcGxheSBzaW5jZSBvdGhlciBjbWQgdXNlcworTEFSR0VfQlVGRkVSX01BWF9TSVpFLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcCBiL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAKKy0tLSBhL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAKKysrKyBiL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAKK0BAIC0xMDE5LDcgKzEwMTksNyBAQCBub3JtYWxfc3ltbGlua19tb2RlOgorIAorIHN0YXRpYyBpbnQzMl90IHBrZ19pbnN0YWxsTGlicmFyeShjb25zdCBjaGFyICppbnN0YWxsRGlyLCBjb25zdCBjaGFyICp0YXJnZXREaXIsIFVCb29sIG5vVmVyc2lvbikgeworICAgICBpbnQzMl90IHJlc3VsdCA9IDA7CistICAgIGNoYXIgY21kW1NNQUxMX0JVRkZFUl9NQVhfU0laRV07CisrICAgIGNoYXIgY21kW0xBUkdFX0JVRkZFUl9NQVhfU0laRV07CisgCisgICAgIHNwcmludGYoY21kLCAiY2QgJXMgJiYgJXMgJXMgJXMlcyVzIiwKKyAgICAgICAgICAgICB0YXJnZXREaXIsCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjNhOWJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81NS4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgaWN1LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9saWNlbnNlLmh0bWw7bWQ1PTY0ZWZmNGFhZGZmNGQxMDRkNmQ0MzdjNGZkZTBlNmQ3IgorCitkZWYgaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KKworSUNVX1BWID0gIiR7QGljdV9kb3dubG9hZF92ZXJzaW9uKGQpfSIKKworQkFTRV9TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5pY3UtcHJvamVjdC5vcmcvZmlsZXMvaWN1NGMvJHtQVn0vaWN1NGMtJHtJQ1VfUFZ9LXNyYy50Z3oiCitTUkNfVVJJID0gIiR7QkFTRV9TUkNfVVJJfSBcCisgICAgICAgICAgIGZpbGU6Ly9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZTJkNTIzZGY3OWQ2Y2I3ODU1YzJmYmUyODRmNGRiMjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTE2YjIyY2JlZmRkMzU0YmVjMTE0NTQxZjc4NDlhMTJmOGZjMjAxNTMyMGNhNTI4MmVlNGZkNzg3NTcxNDU3YiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNTguYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJJU08gbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY3VycmVuY3ksIHNjcmlwdCBjb2RlcyBhbmQgdGhlaXIgdHJhbnNsYXRpb25zIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitTUkNfVVJJID0gImh0dHBzOi8vcGtnLWlzb2NvZGVzLmFsaW90aC5kZWJpYW4ub3JnL2Rvd25sb2Fkcy9pc28tY29kZXMtJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjM0MDk3YTAwODVmMDk3OWUyOGY5ZGI2NmVjMjc0YzVlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg2YWY1NzM1ZGNlNmU0ZWZmMmI5ODNlNWQ4YWE5YTNkZWExYjhkYjcwMjMzM2ZmMjBiZTg5ZTQ1ZjdmMzVhNzIiCisKKyMgaW5oZXJpdCBnZXR0ZXh0IGNhbm5vdCBiZSB1c2VkLCBiZWNhdXNlIGl0IGFkZHMgZ2V0dGV4dC1uYXRpdmUgdG8gQkFTRURFUEVORFMgd2hpY2gKKyMgYXJlIGluaGliaXRlZCBieSBhbGxhcmNoCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbC8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjY2RkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW4vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IHRvIGxpYmFzc3Vhbi4KK1RoaXMgcGF0Y2ggaXMgcmVqZWN0ZWQgYnkgdXBzdHJlYW0gZm9yIHRoZSByZWFzb24gYmVsb3c6CitUaGV5IHRoaW5rIHBrZ2NvbmZpZyBhZGRzIG5vIHBvcnRhYmlsaXR5IGFuZCBtYWludGFpbmluZyB0aGVtIGlzIG5vdCB3b3J0aHdoaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogbGliYXNzdWFuLTIuMS4yL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXNzdWFuLTIuMS4yLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBsaWJhc3N1YW4tMi4xLjIvTWFrZWZpbGUuYW0KK0BAIC0yNCwxMCArMjQsMTMgQEAgQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIgbm8tZGlzdC1negorICMgKEEgc3VpdGFibGUgZ2l0bG9nLXRvLWNoYW5nZWxvZyBzY3JpcHQgY2FuIGJlIGZvdW5kIGluIEdudVBHIG1hc3Rlci4pCisgR0lUTE9HX1RPX0NIQU5HRUxPRz1naXRsb2ctdG8tY2hhbmdlbG9nCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gbGliYXNzdWFuLnBjCisrCisgRVhUUkFfRElTVCA9IGF1dG9nZW4uc2ggYXV0b2dlbi5yYyBSRUFETUUuR0lUICAgICAgICAgCSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIENoYW5nZUxvZy0yMDExIGRvYy9DaGFuZ2VMb2ctMjAxMSBzcmMvQ2hhbmdlTG9nLTIwMTEgCVwKKyAgICAgICAgICAgICAgdGVzdHMvQ2hhbmdlTG9nLTIwMTEgY29udHJpYi9DaGFuZ2VMb2ctMjAxMSAgICAgCQlcCistICAgICAgICAgICAgIGJ1aWxkLWF1eC9naXQtbG9nLWZvb3RlciBidWlsZC1hdXgvZ2l0LWxvZy1maXgKKysgICAgICAgICAgICAgYnVpbGQtYXV4L2dpdC1sb2ctZm9vdGVyIGJ1aWxkLWF1eC9naXQtbG9nLWZpeCBsaWJhc3N1YW4ucGMuaW4KKyAKKyBTVUJESVJTID0gbTQgc3JjIGRvYyB0ZXN0cworIAorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9saWJhc3N1YW4ucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJhc3N1YW4tMi4xLjIvbGliYXNzdWFuLnBjLmluCitAQCAtMCwwICsxLDE0IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrYXBpX3ZlcnNpb249QExJQkFTU1VBTl9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1ATElCQVNTVUFOX0NPTkZJR19IT1NUQAorKworK05hbWU6IGxpYmFzc3VhbgorK0Rlc2NyaXB0aW9uOiBJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRQorK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYXNzdWFuCisrTGlicy5wcml2YXRlOiAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitJbmRleDogbGliYXNzdWFuLTIuMS4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFzc3Vhbi0yLjEuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmFzc3Vhbi0yLjEuMi9jb25maWd1cmUuYWMKK0BAIC00MzksNyArNDM5LDcgQEAgQUNfQ09ORklHX0ZJTEVTKFtkb2MvTWFrZWZpbGVdKQorIEFDX0NPTkZJR19GSUxFUyhbdGVzdHMvTWFrZWZpbGVdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL2xpYmFzc3Vhbi1jb25maWddLCBbY2htb2QgK3ggc3JjL2xpYmFzc3Vhbi1jb25maWddKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL3ZlcnNpb25pbmZvLnJjXSkKKy0KKytBQ19DT05GSUdfRklMRVMoW2xpYmFzc3Vhbi5wY10pCisgQUNfT1VUUFVUCisgCisgZWNobyAiCitJbmRleDogbGliYXNzdWFuLTIuMS4yL3NyYy9saWJhc3N1YW4ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhc3N1YW4tMi4xLjIub3JpZy9zcmMvbGliYXNzdWFuLm00CisrKysgbGliYXNzdWFuLTIuMS4yL3NyYy9saWJhc3N1YW4ubTQKK0BAIC0xNSwxOCArMTUsNiBAQCBkbmwgUmV0dXJucyBvayBzZXQgdG8geWVzIG9yIG5vLgorIGRubAorIEFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmFzc3Vhbi1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmFzc3Vhbi1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCQVNTVUFOIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBsaWJhc3N1YW5fY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJhc3N1YW5fY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICBsaWJhc3N1YW5fY29uZmlnX2FyZ3M9IiRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke0xJQkFTU1VBTl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIExJQkFTU1VBTl9DT05GSUc9JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4L2Jpbi9saWJhc3N1YW4tY29uZmlnCistICAgIGZpCistICBmaQorLQorLSAgQUNfUEFUSF9UT09MKExJQkFTU1VBTl9DT05GSUcsIGxpYmFzc3Vhbi1jb25maWcsIG5vKQorIAorICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjkuMiwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KK0BAIC0zNyw1MSArMjUsMTIgQEAgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorICAgICBtaW5fbGliYXNzdWFuX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBMSUJBU1NVQU4gLSB2ZXJzaW9uID49ICRtaW5fbGliYXNzdWFuX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJExJQkFTU1VBTl9DT05GSUciICE9ICJubyIgXAorLSAgICAgJiYgdGVzdCAtZiAiJExJQkFTU1VBTl9DT05GSUciIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLQorLSAgICBsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb249YCRMSUJBU1NVQU5fQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0KKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZSAKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJBU1NVQU4sIFtsaWJhc3N1YW4gPj0gJG1pbl9saWJhc3N1YW5fdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCAiJHJlcV9saWJhc3N1YW5fYXBpIiAtZ3QgMCA7IHRoZW4KKyAgICAgICB0bXA9YCRMSUJBU1NVQU5fQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBsaWJhc3N1YW5gCisgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0xJQkFTU1VBTiBBUEkgdmVyc2lvbl0pCisgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmFzc3Vhbl9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTYsNyArNDUsNyBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgiJGhvc3QiICE9IHggOyB0aGVuCistICAgICAgbGliYXNzdWFuX2NvbmZpZ19ob3N0PWAkTElCQVNTVUFOX0NPTkZJRyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICAgIGxpYmFzc3Vhbl9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGxpYmFzc3VhbmAKKyAgICAgICBpZiB0ZXN0IHgiJGxpYmFzc3Vhbl9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgICBpZiB0ZXN0IHgiJGxpYmFzc3Vhbl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTEzNywxMiArODYsOCBAQCBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9MSUJBU1NVQU5dLAorIFsgX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTigkMSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIExJQkFTU1VBTl9DRkxBR1M9YCRMSUJBU1NVQU5fQ09ORklHICRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIExJQkFTU1VBTl9MSUJTPWAkTElCQVNTVUFOX0NPTkZJRyAkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgIGVsc2UKKy0gICAgTElCQVNTVUFOX0NGTEFHUz0iIgorLSAgICBMSUJBU1NVQU5fTElCUz0iIgorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKExJQkFTU1VBTl9DRkxBR1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFlNDNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIklQQyBsaWJyYXJ5IHVzZWQgYnkgR251UEcgYW5kIEdQR01FIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJhc3N1YW4vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Fzc3Vhbi5jO2VuZGxpbmU9MjA7bWQ1PTBmNDY1NTQ0MTgzNDA1MDU1ZWMxNzk4NjlmYzViNWJhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4tZGVmcy5oO2VuZGxpbmU9MjA7bWQ1PTIwY2Q1NTUzNTI2MGNhMTc3OWVkYWU1YzdiODBiMjFlIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJhc3N1YW4vbGliYXNzdWFuLSR7UFZ9LnRhci5iejIgXAorCSAgIGZpbGU6Ly9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjI5MGU3NTBlZTg3YmUzYmZkOTU3OWZjNDRjNmExODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ5Mjg1YmI3OTM0NTM2MmNiNzJhNDBjNzk4ZGVmZWZjMDA3MDMxYzYwZjJmMTAyNTE3MjBiZjYwYTlkZTJkZSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJhc3N1YW4tY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcm5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200LyoubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwZTI5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuMi5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXRvbWljIGludGVnZXIgb3BlcmF0aW9ucyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9saWJhdG9taWNfb3BzLyIKK1NFQ1RJT04gPSAib3B0aW9uYWwiCitQUk9WSURFUyArPSAibGliYXRvbWljcy1vcHMiCitMSUNFTlNFID0gIkdQTHYyICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0xJQ0VOU0lORy50eHQ7bWQ1PWUwMGRkNWM4YWMwM2ExNGM1YWU1MjI1YTQ1MjVmYTJkIFwKKwkJICAgIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaXZtYWlzb2Z0LmNvbS9fYmluL2F0b21pY19vcHMvbGliYXRvbWljX29wcy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDY1Mzg2MDRiMzE0ZDJmY2NkZjg2OTE1ZTVjMDg1NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNGZhNjE1ZjYyOTkyNTQ3YmNiZGE1NjIyNjBlMjhiNTA0YmM0YzA2ZTJmOTg1ZjI2N2YzYWRlMzAzMDRiNWRkIgorCitTID0gIiR7V09SS0RJUn0vbGliYXRvbWljX29wcy0ke1BWfSIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHRob3NlIGNvbnRhaW4gb25seSBkb2NzLCBub3QgbmVjZXNzYXJ5IGZvciBub3cuCisJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0ke2RvY2Rpcn0KKwltdiAke0R9JHtkYXRhZGlyfS9saWJhdG9taWNfb3BzICR7RH0ke2RvY2Rpcn0vJHtCUE59Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMjY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGlicmFyeSBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIEJTRCBzeXN0ZW1zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHVzZWZ1bCBmdW5jdGlvbnMgY29tbW9ubHkgZm91bmQgb24gQlNEIHN5c3RlbXMsIFwKKyAgICAgICAgICAgICAgIGFuZCBsYWNraW5nIG9uIG90aGVycyBsaWtlIEdOVSBzeXN0ZW1zLCB0aHVzIG1ha2luZyBpdCBlYXNpZXIgdG8gcG9ydCBcCisgICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHN0cm9uZyBCU0Qgb3JpZ2lucywgd2l0aG91dCBuZWVkaW5nIHRvIGVtYmVkIHRoZSBzYW1lIFwKKyAgICAgICAgICAgICAgIGNvZGUgb3ZlciBhbmQgb3ZlciBhZ2FpbiBvbiBlYWNoIHByb2plY3QuIgorCitIT01FUEFHRSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKK0xJQ0VOU0UgPSAiQlNELTQtQ2xhdXNlICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjE1MzBlYTkyYWVhYTFjNWUyNTQ3Y2ZkNDM5MDVkOGMiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmNjZWI0ZTY2ZmQ0NDhjYTRlZDQyYmEyMmE4YmFiYjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGYzYjBlMTdlNWMzNGMwMzgxMjZlMGEwNDM1MWIxMWUyM2M2MTAxYTdkMGNlM2JlZWFiMjliYjY0MTVjMTBiYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmcvcHl0aG9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTkxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIGIwMWJiMjY5NGY2NmNkOTgxZTZkNjE1MjM0MzNkYzNlYjVlZDMyZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBTYXQsIDE4IEp1bCAyMDE1IDIzOjAzOjMwICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYyAtIEF2b2lkIGFuIGluY29ycmVjdCBjaGVjayBmb3IgcHl0aG9uLgorIE1ha2VmaWxlLmFtIC0gYXZvaWQgaGFyZCBjb2RlZCBob3N0IGluY2x1ZGUgcGF0aHMuCisKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBiaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0gfCAgMyArKy0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgfCAxNSArKy0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0gYi9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KK2luZGV4IDgyYjliYjguLmY5ZmU3YTggMTAwNjQ0CistLS0gYS9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KKysrKyBiL2JpbmRpbmdzL3B5dGhvbi9NYWtlZmlsZS5hbQorQEAgLTIzLDcgKzIzLDggQEAgU1VCRElSUyA9IHRlc3QKKyBDT05GSUdfQ0xFQU5fRklMRVMgPSAqLmxvVCAqLnJlaiAqLm9yaWcKKyBBTV9DRkxBR1MgPSAtZlBJQyAtRFBJQworIFBZTElCVkVSID89IHB5dGhvbiQoUFlUSE9OX1ZFUlNJT04pCistQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikgLUlAUFlJTkNMVURFRElSQAorK1BZSU5DID89IC91c3IvaW5jbHVkZS8kKFBZTElCVkVSKQorK0FNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpIC1JJChQWUlOQykKKyBMSUJTID0gJCh0b3BfYnVpbGRkaXIpL3NyYy9saWJjYXAtbmcubGEKKyBTV0lHX0ZMQUdTID0gLXB5dGhvbgorIFNXSUdfSU5DTFVERVMgPSAke0FNX0NQUEZMQUdTfQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWQ3NzdkNS4uOWQ5MGY2NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTIzLDE5ICsxMjMsOCBAQCBpZiB0ZXN0IHgkdXNlX3B5dGhvbiA9IHhubyA7IHRoZW4KKyBlbHNlCisgQUNfTVNHX1JFU1VMVCh0ZXN0aW5nKQorIEFNX1BBVEhfUFlUSE9OCistUFlJTkNMVURFRElSPWBweXRob24ke2FtX2N2X3B5dGhvbl92ZXJzaW9ufSAtYyAiZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdJTkNMVURFUFknKSkiYAorLWlmIHRlc3QgLWYgJHtQWUlOQ0xVREVESVJ9L1B5dGhvbi5oIDsgdGhlbgorLQlweXRob25fZm91bmQ9InllcyIKKy0JQUNfU1VCU1QoUFlJTkNMVURFRElSKQorLQlBQ19NU0dfTk9USUNFKFB5dGhvbiBiaW5kaW5ncyB3aWxsIGJlIGJ1aWx0KQorLWVsc2UKKy0JcHl0aG9uX2ZvdW5kPSJubyIKKy0JaWYgdGVzdCB4JHVzZV9weXRob24gPSB4eWVzIDsgdGhlbgorLQkJQUNfTVNHX0VSUk9SKFtQeXRob24gZXhwbGljaXRseSByZXF1aXJlZCBhbmQgcHl0aG9uIGhlYWRlcnMgZm91bmRdKQorLQllbHNlCistCQlBQ19NU0dfV0FSTigiUHl0aG9uIGhlYWRlcnMgbm90IGZvdW5kIC0gcHl0aG9uIGJpbmRpbmdzIHdpbGwgbm90IGJlIG1hZGUiKQorLQlmaQorLWZpCisrcHl0aG9uX2ZvdW5kPSJ5ZXMiCisrQUNfTVNHX05PVElDRShQeXRob24gYmluZGluZ3Mgd2lsbCBiZSBidWlsdCkKKyBmaQorIEFNX0NPTkRJVElPTkFMKEhBVkVfUFlUSE9OLCB0ZXN0ICR7cHl0aG9uX2ZvdW5kfSA9ICJ5ZXMiKQorIAorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMWQ1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQW4gYWx0ZXJuYXRlIHBvc2l4IGNhcGFiaWxpdGllcyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIGxpYmNhcC1uZyBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIG1ha2UgcHJvZ3JhbW1pbmcgXAord2l0aCBQT1NJWCBjYXBhYmlsaXRpZXMgbXVjaCBlYXNpZXIgdGhhbiB0aGUgdHJhZGl0aW9uYWwgbGliY2FwIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVjb2RlLmNvbS9wcm9qZWN0cy9saWJjYXAtbmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZTNlZGEwMWQ5ODE1ZjhkMjRhYWUyZGJkODliNjhiMDYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL3NncnViYi9saWJjYXAtbmcvbGliY2FwLW5nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24ucGF0Y2giCisKK2luaGVyaXQgbGliX3BhY2thZ2UgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQorCitTUkNfVVJJW21kNXN1bV0gPSAiM2Q3ZDEyNmIyOWUyODY5YTAyNTdjMTdjOGIwZDliMmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE1NTQ5Y2UzOWIzMzNmNmI3OGJhZWUwYzBiNGVmMThiYzcyNmM2YmYxY2NhMTIzZGZkODlkZDk2M2Y2ZDA2YiIKKworREVQRU5EUyArPSAic3dpZy1uYXRpdmUgcHl0aG9uIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1weXRob24zIgorCitFWFRSQV9PRU1BS0UgKz0gIlBZTElCVkVSPSdweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0nIFBZSU5DPScke1NUQUdJTkdfSU5DRElSfS8ke1BZTElCVkVSfSciCisKK1BBQ0tBR0VTICs9ICIke1BOfS1weXRob24iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZpbmcgbGliY2FwLW5nIHRvIGJhc2VfbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2FwLW5nLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlyZWxwYXRoPSR7QG9zLnBhdGgucmVscGF0aCgiJHtiYXNlX2xpYmRpcn0iLCAiJHtsaWJkaXJ9Iil9CisJCWxuIC1zZiAke3JlbHBhdGh9L2xpYmNhcC1uZy5zby4wLjAuMCAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zbworCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOTRlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNC5iYgpAQCAtMCwwICsxLDc3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGdldHRpbmcvc2V0dGluZyBQT1NJWC4xZSBjYXBhYmlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2Z1bGx5Y2FwYWJsZS8iCisKKyMgbm8gc3BlY2lmaWMgR1BMIHZlcnNpb24gcmVxdWlyZWQKK0xJQ0VOU0UgPSAiQlNEIHwgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlO21kNT0zZjg0ZmQ2ZjI5ZDQ1M2E1NjUxNGNiN2U0ZWFkMjVmMSIKKworREVQRU5EUyA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbGlicy9zZWN1cml0eS9saW51eC1wcml2cy8ke0JQTn0yLyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDNhYjlmNjgwNDM1YTdmZmYzNWI0YWNlOGQ0NWI4MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZWU0NTY4Zjc4ZGM4NTFkNzI2ZmM5M2YyNWY0ZWQ5MWNjMjIzYjFmZTgyNTlkYWE0YTc3MTU4ZDE3NGU2YzY1IgorCitpbmhlcml0IGxpYl9wYWNrYWdlCisKKyMgZG8gTk9UIHBhc3MgdGFyZ2V0IGNmbGFncyB0byBob3N0IGNvbXBpbGF0aW9ucworIworZG9fY29uZmlndXJlKCkgeworCSMgbGliY2FwIHVzZXMgOj0gZm9yIGNvbXBpbGVycywgZm9ydHVuYXRlbHksIGl0IGdpdmVzIHVzIGEgaGludAorCSMgb24gd2hhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCA/PQorCXNlZCAtZSAncyw6PSw/PSxnJyAtaSBNYWtlLlJ1bGVzCisJc2VkIC1lICdzLF5CVUlMRF9DRkxBR1MgPz0gJCguKkNGTEFHUyksQlVJTERfQ0ZMQUdTIDo9ICQoQlVJTERfQ0ZMQUdTKSwnIC1pIE1ha2UuUnVsZXMKKworCSMgZGlzYWJsZSBncGVyZiBkZXRlY3Rpb24KKwlzZWQgLWUgJy9zaGVsbCBncGVyZi9jaWZlcSAoLHllcyknIC1pIGxpYmNhcC9NYWtlZmlsZQorfQorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICdhdHRyJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAiIgorCitQQUNLQUdFQ09ORklHW2F0dHJdID0gIkxJQkFUVFI9eWVzLExJQkFUVFI9bm8sYXR0ciIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICJQQU1fQ0FQPXllcyxQQU1fQ0FQPW5vLGxpYnBhbSIKKworRVhUUkFfT0VNQUtFID0gIiBcCisgIElOREVOVD0gIFwKKyAgbGliPSR7QG9zLnBhdGguYmFzZW5hbWUoJyR7bGliZGlyfScpfSBcCisgIFJBSVNFX1NFVEZDQVA9bm8gXAorICBEWU5BTUlDPXllcyBcCisiCisKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBTWVNURU1fSEVBREVSUz0ke1NUQUdJTkdfSU5DRElSfSIKKworIyB0aGVzZSBhcmUgcHJlc2VudCBpbiB0aGUgbGliY2FwIGRlZmF1bHRzLCBzbyBpbmNsdWRlIGluIG91ciBDRkxBR1MgdG9vCitDRkxBR1MgKz0gIi1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgJHtFWFRSQV9PRUNPTkZ9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIFwKKwkJJHtFWFRSQV9PRUNPTkZ9IFwKKwkJREVTVERJUj0iJHtEfSIgXAorCQlwcmVmaXg9IiR7cHJlZml4fSIgXAorCQlTQklORElSPSIke0R9JHtzYmluZGlyfSIKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZlIHRoZSBsaWJyYXJ5IHRvIGJhc2VfbGliZGlyCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbXYgJHtEfSR7bGliZGlyfS9saWJjYXAqICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgICAgIGlmIFsgLWQgJHtEfSR7bGliZGlyfS9zZWN1cml0eSBdOyB0aGVuCisJCQltdiAke0R9JHtsaWJkaXJ9L3NlY3VyaXR5ICR7RH0ke2Jhc2VfbGliZGlyfQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyIKKworIyBwYW0gZmlsZXMKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWcvKi5zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjQ1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjaGVjay9saWJjaGVja18wLjEwLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSAgPSAiQ2hlY2sgLSB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIGZvciBDIGNvZGUiCitIT01FUEFHRSA9ICJodHRwOi8vY2hlY2suc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0xJQ0VOU0UgID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY2hlY2svY2hlY2stJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1M2M1ZTVjNzdkMDkwZTEwM2ExN2YzZWQ3ZmQ3ZDhiOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNWY1MDc2NmFhNmY4ZmU1YTJkZjc1MjY2NmNhMDFhOTUwYWRkNDUwNzlhYTA2NDE2YjgzNzY1YjFjZjcxMDUyIgorCitTID0gIiR7V09SS0RJUn0vY2hlY2stJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB0ZXhpbmZvCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0FXS19QQVRIPSR7YmluZGlyfS9nYXdrIgorCitSUkVQTEFDRVNfJHtQTn0gPSAiY2hlY2sgKDw9IDAuOS41KSIKK1JERVBFTkRTXyR7UE59ICs9ICJnYXdrIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWI5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkNhc2NhZGluZyBTdHlsZSBTaGVldCAoQ1NTKSBwYXJzaW5nIGFuZCBtYW5pcHVsYXRpb24gdG9vbGtpdCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NyLXJnYi5jO2VuZGxpbmU9MjI7bWQ1PTMxZDVmMDk0NGQ1NTZjODU4OWQwNGVhNjA1NWZjYzY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NyLXRlc3QtdXRpbHMuYztlbmRsaW5lPTIxO21kNT0yMzgyYzI3OTM0Y2FlMWQzNzkyZmNiMTdhNjE0MmM0ZSIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitERVBFTkRTID0gImdsaWItMi4wIGxpYnhtbDIgemxpYiIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKK1BSID0gInIyIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2Nyb2NvLTAuNi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBiaW5jb25maWctZGlzYWJsZWQKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNzY3ZTczYzQxNzRmNzViOTk2OTVkNDUzMGZkOWJiODAiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlYTZlMWI4NThjNTUyMTljZWZkNzEwOTc1NmJmZjViYzFhNzc0YmE3YTU1ZjdkM2NjZDczNGQ2Yjg3MWI4NTcwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uL2ZpeC1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDI3YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorbXVzbCBjb21wbGFpbnMKK2ZhdGFsIGVycm9yOiBzeXMvdW5pc3RkLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK2FuZCByaWdodGx5IHNvCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGxpYmRhZW1vbi0wLjE0Lm9yaWcvZXhhbXBsZXMvdGVzdGQuYworKysrIGxpYmRhZW1vbi0wLjE0L2V4YW1wbGVzL3Rlc3RkLmMKK0BAIC0yMSw5ICsyMSw5IEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorLSNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+CisgI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAKKyAjaW5jbHVkZSA8bGliZGFlbW9uL2Rmb3JrLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwZWUxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb25fMC4xNC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IEMgbGlicmFyeSB3aGljaCBlYXNlcyB0aGUgd3JpdGluZyBvZiBVTklYIGRhZW1vbnMiCitTRUNUSU9OID0gImxpYnMiCitBVVRIT1IgPSAiTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL2xpYmRhZW1vbi8iCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmRhZW1vbi9kYWVtb24uaDtiZWdpbmxpbmU9OTtlbmRsaW5lPTIxO21kNT1iZDlmYmU1N2NkOTZkMWE1ODQ4YThiYTEyZDlhNmJmNCIKKworU1JDX1VSSSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9saWJkYWVtb24vbGliZGFlbW9uLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaW5jbHVkZXMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwOWRjMjcxMDdjMjFiY2Q5ZmJmMmY5NWY1NjY5NTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkMjNlYjVmNmY5ODZkY2M3ZTcwODMwNzM1NWJhMzI4OWFiZTAzY2MzODFmYzQ3YTgwYmNhNGE1MGFhNmI4MzQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWx5bngiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTEzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIldyYXBwZXIgbGlicmFyeSBmb3IgZXZkZXYgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliZXZkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzVhYWUwZDM4ZmVlYTZmZGE5N2NhMzgxY2I5MTMyZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliZXZkZXYvbGliZXZkZXYuaDtlbmRsaW5lPTIxO21kNT03ZmY0ZjBiNTExMzI1MmMyZjFhODI4ZTBiYmFkOThkMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9saWJldmRldi8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZWJmY2Q1MTUzNTU4ZWJhMjVhOGU3MWViMjUzNGFlOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Yzc3YjIxM2YwNzU3MDZkNDI4YTJhZjU0YjY2YmY4NmIwM2E2OGU5ZmIzOTBlN2VjNDhjZjU1MDY1OTcwNjQzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCitmYWlsPTAKK2ZvciB0ZXN0IGluIC4vdGVzdC8qCitkbworCSR0ZXN0CisJaWYgWyAkPyAtZXEgMCBdCisJdGhlbgorCQlmYWlsPTEKKwlmaQorZG9uZQorCitpZiBbICRmYWlsIC1lcSAwIF0KK3RoZW4KKwllY2hvICJQQVNTOiBsaWJldmVudCIKK2Vsc2UKKwllY2hvICJGQUlMOiBsaWJldmVudCIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjMjYzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50XzIuMC4yMi5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkFuIGFzeW5jaHJvbm91cyBldmVudCBub3RpZmljYXRpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTUwODg0JmF0aWQ9NDYxMzIyIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQ1YzUzMTZmZjY4NGJjZmUyZjlmODZkOGIxMjc5NTU5IgorCitTUkNfVVJJID0gIiBcCisgICAgJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xldmVudC8ke0JQfS1zdGFibGUudGFyLmd6IFwKKyAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImM0YzU2Zjk4NmFhOTg1Njc3Y2ExZGI4OTYzMGEyZTExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxYzJjNDlmMGFkYWRhY2ZkYmU2MzMyYTM3MmMzOGNmOWM4Yjc4OTViYjczZGFiZWFhNTNjZGNjMWQ0ZTFmYTMiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0tc3RhYmxlIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgTmVlZGVkIGZvciBEZWJpYW4gcGFja2FnaW5nCitMRUFEX1NPTkFNRSA9ICJsaWJldmVudC0yLjAuc28iCisKK2luaGVyaXQgcHRlc3QKKworREVQRU5EUyA9ICJ6bGliIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGZpbGUgaW4gJHtCfS90ZXN0Ly5saWJzL3JlZ3Jlc3MgJHtCfS90ZXN0Ly5saWJzL3Rlc3QqCisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY0Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlYWRpbmcgZXh0ZW5kZWQgaW1hZ2UgaW5mb3JtYXRpb24gKEVYSUYpIGZyb20gSlBFRyBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliZXhpZiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGliZXhpZi9saWJleGlmLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNzMzOWI4OTg1MGYyOGM4ZjFjMjM3ZjIzM2UwNWIyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNmNkYWViNjJlYjNlNmRmYWIyNDM1ZjdkN2JjY2QyZjM3NDM4ZDIxYzUyMThlYzRlNThlZmE5MTU3ZDRkNDFhIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pIHM6ZG9jXCBiaW5hcnk6YmluYXJ5OmcgTWFrZWZpbGUKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNTFkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBjMzIwNzk5Yzk0MWQ0MmE5YjdlMzUxODA1MzU5Njk0ZWEzYjM2ZDJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgNSBBcHIgMjAxNSAwOTowODozOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBubHMubTQ6IFRha2UgaXQgZnJvbSBnZXR0ZXh0LTAuMTUKKworSXQgb3RoZXJ3aXNlIGV4cGVjdHMgZ2V0dGV4dCB0byBwcm92aWRlIGl0LiBMZXRzIGdvIGluZGVwZW5kZW50CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbTQvbmxzLm00IHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvbmxzLm00CisKK2RpZmYgLS1naXQgYS9tNC9ubHMubTQgYi9tNC9ubHMubTQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYzhmZTY5CistLS0gL2Rldi9udWxsCisrKysgYi9tNC9ubHMubTQKK0BAIC0wLDAgKzEsMzAgQEAKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKytkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgbm90IGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCBVbHJpY2ggRHJlcHBlciBkcmVwcGVyQGN5Z251cy5jb20sIDE5OTUtMjAwMC4KKytkbmwgQnJ1bm8gSGFpYmxlIGhhaWJsZUBjbGlzcC5jb25zLm9yZywgMjAwMC0yMDAzLgorKworK0FDX1BSRVJFUSgyLjUwKQorKworK0FDX0RFRlVOKFtBTV9OTFNdLAorK1sKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgTkxTIGlzIHJlcXVlc3RlZF0pCisrZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKytBQ19BUkdfRU5BQkxFKG5scywKKytbIC0tZGlzYWJsZS1ubHMgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCisrVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKytBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQorK0FDX1NVQlNUKFVTRV9OTFMpCisrXSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQyZDYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBmaWxlIG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvZm0tZXh0cmEuaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIxO21kNT1lZjFmODRkYTY0YjNjMDFjY2E0NDcyMTJmN2VmNjAwNyIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wY21hbmZtL2xpYmZtLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZmYzODIwMDcwMTY1OGY3ZTgwZTI1ZWQzOTVkOTJkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjkyZjE2MjRhNGNiYzhkMWRkNTVmM2IzZjMzNjlmYmY1ZDI2ZjYzYTkxNmUyYzI5NTIzMGIyMzQ0ZTFmYmY5IgorCitTID0gIiR7V09SS0RJUn0vbGliZm0tJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZXh0cmEtb25seSAtLXdpdGgtZ3RrPW5vIgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MKKworZG9fY29uZmlndXJlW2RpcnNdID0rICIke1N9L200IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk1MDJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBmaWxlIG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZm0uaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIxO21kNT1lZjFmODRkYTY0YjNjMDFjY2E0NDcyMTJmN2VmNjAwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYmFzZS9mbS1jb25maWcuaDtiZWdpbmxpbmU9MTA7ZW5kbGluZT0yMzttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZtLWd0ay5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTk7bWQ1PTY0NmJhYTQ5NTVjMDRmZTc2OGYyY2EyN2I5MmFjOGRkIgorCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdsaWItMi4wIHBhbmdvIGd0aysgbWVudS1jYWNoZSBpbnRsdG9vbC1uYXRpdmUgbGliZXhpZiBsaWJmbS1leHRyYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9saWJmbS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZmYzODIwMDcwMTY1OGY3ZTgwZTI1ZWQzOTVkOTJkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjkyZjE2MjRhNGNiYzhkMWRkNTVmM2IzZjMzNjlmYmY1ZDI2ZjYzYTkxNmUyYzI5NTIzMGIyMzQ0ZTFmYmY5IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MKKworZG9fY29uZmlndXJlW2RpcnNdID0rICIke1N9L200IgorCitQQUNLQUdFUyArPSAiJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW1pbWUgPSAiJHtkYXRhZGlyfS9taW1lLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2xpYmZtL21vZHVsZXMvLmRlYnVnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyByZW1vdmUgZmlsZXMgd2hpY2ggYXJlIHBhcnQgb2YgbGliZm0tZXh0cmEKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0teG1sLWZpbGUuaAorICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmZtLTEuMC9mbS12ZXJzaW9uLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0tZXh0cmEuaAorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmZtLWV4dHJhLnBjCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5zbyoKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmZtLWV4dHJhLmEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmZtLWV4dHJhLmxhCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RkZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE1MSBAQAorQWRkIGFuZCB1c2UgcGtnLWNvbmZpZyBmb3IgbGliZ2NyeXB0IGluc3RlYWQgb2YgLWNvbmZpZyBzY3JpcHRzLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbdXBzdHJlYW0gaGF2ZSBpbmRpY2F0ZWQgdGhleSBkb24ndCB3YW50IGEgcGtnLWNvbmZpZyBkZXBlbmRlbmN5XQorCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYmdjcnlwdC0xLjIuNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJnY3J5cHQtMS4yLjQub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wMy0xOSAyMjoxNDo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS4yLjQvY29uZmlndXJlLmFjCTIwMDgtMDMtMTkgMjI6MTQ6NTguMDAwMDAwMDAwICswMDAwCitAQCAtODA3LDYgKzgwNyw3IEBACisgZG9jL01ha2VmaWxlCisgc3JjL01ha2VmaWxlCisgc3JjL2djcnlwdC5oCisrc3JjL2xpYmdjcnlwdC5wYworIHNyYy9saWJnY3J5cHQtY29uZmlnCisgdGVzdHMvTWFrZWZpbGUKKyB3MzItZGxsL01ha2VmaWxlCitJbmRleDogbGliZ2NyeXB0LTEuMi40L3NyYy9saWJnY3J5cHQucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS4yLjQvc3JjL2xpYmdjcnlwdC5wYy5pbgkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwzMyBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgcGtnLWNvbmZpZyBtZXRhZGF0YSBmaWxlLgorKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgQXV0aG9yOiBTaW1vbiBKb3NlZnNzb24KKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisrIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKysjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKyMKKysjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKysjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorKworK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1ATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBMSUJHQ1JZUFRfQ09ORklHX0hPU1RACisrCisrIyBNaXNjIGluZm9ybWF0aW9uLgorK3N5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfQ0lQSEVSU0AKKythc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKKytkaWdlc3RzPUBMSUJHQ1JZUFRfRElHRVNUU0AKKysKKytOYW1lOiBsaWJnY3J5cHQKKytEZXNjcmlwdGlvbjogR05VIGNyeXB0byBsaWJyYXJ5CisrVVJMOiBodHRwOi8vd3d3LmdudXBnLm9yZworK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ2NyeXB0CisrTGlicy5wcml2YXRlOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IAorSW5kZXg6IGxpYmdjcnlwdC0xLjYuMS9zcmMvbGliZ2NyeXB0Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ2NyeXB0LTEuNi4xLm9yaWcvc3JjL2xpYmdjcnlwdC5tNAkyMDEzLTEyLTE2IDE3OjQ0OjMyLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdjcnlwdC0xLjYuMS9zcmMvbGliZ2NyeXB0Lm00CTIwMTQtMDUtMTMgMjE6MjU6MzcuNDc4Mzg5ODMzICswMDAwCitAQCAtMjIsMTcgKzIyLDcgQEAKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAorIFsgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgQUNfQVJHX1dJVEgobGliZ2NyeXB0LXByZWZpeCwKKy0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdjcnlwdC1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIExJQkdDUllQVCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgkbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCR7TElCR0NSWVBUX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ09ORklHPSRsaWJnY3J5cHRfY29uZmlnX3ByZWZpeC9iaW4vbGliZ2NyeXB0LWNvbmZpZworLSAgICAgZmkKKy0gIGZpCisgCistICBBQ19QQVRIX1RPT0woTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMi4wLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2xpYmdjcnlwdF9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtNDIsNDggKzMyLDEzIEBACisgICAgICBtaW5fbGliZ2NyeXB0X3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBMSUJHQ1JZUFQgLSB2ZXJzaW9uID49ICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbj1gJExJQkdDUllQVF9DT05GSUcgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKKy0gICAgbWlub3I9YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIG1pY3JvPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMy8nYAorLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49ICRtaW5fbGliZ2NyeXB0X3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKysKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgbGliZ2NyeXB0LCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZQorICAgICAgaWYgdGVzdCAiJHJlcV9saWJnY3J5cHRfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJExJQkdDUllQVF9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliZ2NyeXB0YAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0xJQkdDUllQVCBBUEkgdmVyc2lvbl0pCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTYsMTAgKzUxLDggQEAKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgLS1jZmxhZ3NgCistICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJExJQkdDUllQVF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgbGliZ2NyeXB0X2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3QgbGliZ2NyeXB0YAorICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMTMsOCArNjYsNiBAQAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgTElCR0NSWVBUX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChMSUJHQ1JZUFRfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODJlNjJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAordGVzdHMvYmVuY2gtc2xvcGUuYzogd29ya2Fyb3VuZCBJQ0UgZmFpbHVyZSBvbiBtaXBzIHdpdGggJy1PIC1nJworCitIaXQgYSBJQ0UgYW5kIGNvdWxkIHJlZHVjZSBpdCB0byB0aGUgZm9sbG93aW5nIG1pbmltYWwgZXhhbXBsZToKKworMS4gT25seSB0aGUgc2l6ZSBvZiBhcnJheSBhc3NpZ25lZCB3aXRoIDIgY2F1c2VkIHRoZSBpc3N1ZToKKyQgY2F0ID4gbWlwZ2NjLXRlc3QuYyA8PCBFTkQKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICAgY2hhciAqcFN0ckFycnlbQVJSQVlfU0laRV9NQVhdID0geyJoZWxsbyJ9OworICAgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICAgd2hpbGUocFN0ckFycnlbaV0gJiYgaTxBUlJBWV9TSVpFX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHBTdHJBcnJ5W2ldKTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKK30KKworRU5ECisKKzIuIE9ubHkgLU8xIGFuZCAtZyBvbiBtaXBzIGNhdXNlZCB0aGUgaXNzdWU6CiskIG1pcHMtcG9reS1saW51eC1nY2MgLU8xIC1nIC1vIG1pcGdjYy10ZXN0IG1pcGdjYy10ZXN0LmMKK21pcGdjYy10ZXN0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoKK21pcGdjYy10ZXN0LmM6MTg6MTogaW50ZXJuYWwgY29tcGlsZXIgZXJyb3I6IGluIGR3YXJmMm91dF92YXJfbG9jYXRpb24sIGF0IGR3YXJmMm91dC5jOjIwODEwCisgfQorIF4KK1BsZWFzZSBzdWJtaXQgYSBmdWxsIGJ1ZyByZXBvcnQsCit3aXRoIHByZXByb2Nlc3NlZCBzb3VyY2UgaWYgYXBwcm9wcmlhdGUuCitTZWUgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+IGZvciBpbnN0cnVjdGlvbnMKKworMy4gVGhlIHF1aWNrIHdvcmtyb3VuZCBpcyB0cnlpbmcgdG8gZW5sYXJnZSB0aGUgc2l6ZSBvZiBhcnJheSB3aXRoIGxhcmdlcgordGhhbiAyLgorCis0LiBGaWxlIGEgYnVnIHRvIEdOVSwgYnV0IGl0IGNvdWxkIG5vdCBiZSByZXByb2R1Y2VkIG9uIHRoZXJlIGVudmlyb25tZW50LgoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MDY0MworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9iZW5jaC1zbG9wZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMgYi90ZXN0cy9iZW5jaC1zbG9wZS5jCitpbmRleCBiZDA1MDY0Li4yOGMyNDM4IDEwMDY0NAorLS0tIGEvdGVzdHMvYmVuY2gtc2xvcGUuYworKysrIGIvdGVzdHMvYmVuY2gtc2xvcGUuYworQEAgLTExOTcsNyArMTE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmVuY2hfb3BzIGhhc2hfb3BzID0geworIH07CisgCisgCistc3RhdGljIHN0cnVjdCBiZW5jaF9oYXNoX21vZGUgaGFzaF9tb2Rlc1tdID0geworK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbM10gPSB7CisgICB7IiIsICZoYXNoX29wc30sCisgICB7MH0sCisgfTsKK0BAIC0xMzQ5LDcgKzEzNDksNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBtYWNfb3BzID0geworIH07CisgCisgCistc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbXSA9IHsKKytzdGF0aWMgc3RydWN0IGJlbmNoX21hY19tb2RlIG1hY19tb2Rlc1szXSA9IHsKKyAgIHsiIiwgJm1hY19vcHN9LAorICAgezB9LAorIH07CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1NDAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2xpYmdjcnlwdDogZml4IGJ1aWxkaW5nIGVycm9yIHdpdGggJy1PMicgaW4gc3lzcm9vdCBwYXRoCisKK0NoYXJhY3RlcnMgbGlrZSAnLU8yJyBvciAnLU9mYXN0JyB3aWxsIGJlIHJlcGxhY2VkIGJ5ICctTzEnIHdoZW4gY29tcGlsaW5nIGNpcGhlci4KK0lmIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgbGliZ2NyeXB0IGFuZCBzeXNyb290IGNvbnRhaW5zIHN1Y2ggY2hhcmFjdGVycywgd2Ugd291bGQKK2dldCBjb21waWxlIGVycm9ycyBiZWNhdXNlIHRoZSBzeXNyb290IHBhdGggaGFzIGJlZW4gbW9kaWZpZWQuCisKK0ZpeCB0aGlzIGJ5IGFkZGluZyBibGFuayBzcGFjZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGUKK3NlZCBjb21tYW5kLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjaXBoZXIvTWFrZWZpbGUuYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jaXBoZXIvTWFrZWZpbGUuYW0gYi9jaXBoZXIvTWFrZWZpbGUuYW0KK2luZGV4IDc2Y2RjOTYuLjlhODk3OTIgMTAwNjQ0CistLS0gYS9jaXBoZXIvTWFrZWZpbGUuYW0KKysrKyBiL2NpcGhlci9NYWtlZmlsZS5hbQorQEAgLTY5LDcgKzY5LDcgQEAgcmZjMjI2OC5jIFwKKyBjYW1lbGxpYS5jIGNhbWVsbGlhLmggY2FtZWxsaWEtZ2x1ZS5jCisgCisgaWYgRU5BQkxFX09fRkxBR19NVU5HSU5HCistb19mbGFnX211bmdpbmcgPSBzZWQgLWUgJ3MvLU9cKFsyLTlzXVsyLTlzXSpcKS8tTzEvJyAtZSAncy8tT2Zhc3QvLU8xL2cnCisrb19mbGFnX211bmdpbmcgPSBzZWQgLWUgJ3MvIC1PXChbMi05c11bMi05c10qXCkgLyAtTzEgLycgLWUgJ3MvIC1PZmFzdCAvIC1PMSAvZycKKyBlbHNlCisgb19mbGFnX211bmdpbmcgPSBjYXQKKyBlbmRpZgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYmU3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiR2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoaWMgbGlicmFyeSBiYXNlZCBvbiB0aGUgY29kZSBmcm9tIEdudVBHIgorSE9NRVBBR0UgPSAiaHR0cDovL2RpcmVjdG9yeS5mc2Yub3JnL3Byb2plY3QvbGliZ2NyeXB0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorU0VDVElPTiA9ICJsaWJzIgorCisjIGhlbHBlciBwcm9ncmFtIGdjcnlwdHJuZCBhbmQgZ2V0cmFuZG9tIGFyZSB1bmRlciBHUEwsIHJlc3QgTEdQTAorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfZHVtcHNleHAtZGV2ID0gIkdQTHYzKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciBsaWJjYXAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliZ2NyeXB0L2xpYmdjcnlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaCBcCisiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliZ2NyeXB0LWNvbmZpZyIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWFzbSAtLXdpdGgtY2FwYWJpbGl0aWVzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoaXMgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZSBvbmUgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKK30KKworIyBsaWJnY3J5cHQucGMgaXMgYWRkZWQgbG9jYWxseSBhbmQgdGh1cyBpbnN0YWxsZWQgaGVyZQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9zcmMvbGliZ2NyeXB0LnBjICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy8KK30KKworUEFDS0FHRVMgPSsgImR1bXBzZXhwLWRldiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaG1hYzI1NiIKK0ZJTEVTX2R1bXBzZXhwLWRldiArPSAiJHtiaW5kaXJ9L2R1bXBzZXhwIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgbGliZ2NyeXB0LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiZGUwM2I4NjdkMDJmZGYxMTVhMWJhYzhiYjhiNWMzYTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjllOTRlMWE3MDg0ZDk0ZTFhNmNhMjZkNDM2MDY4Y2I3NDg2MmQxMGE3MzUzY2ZhZTU3OWEyZDg4Njc0ZmYwOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmZWVkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTUwIEBACisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ3BnLWVycm9yLTEuMTcub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJncGctZXJyb3ItMS4xNy9jb25maWd1cmUuYWMKK0BAIC01MjksNiArNTI5LDcgQEAgQUNfQ09ORklHX0ZJTEVTKFtzcmMvTWFrZWZpbGUgdGVzdHMvTWFrZQorIEFDX0NPTkZJR19GSUxFUyhbbGFuZy9NYWtlZmlsZSBsYW5nL2NsL01ha2VmaWxlIGxhbmcvY2wvZ3BnLWVycm9yLmFzZF0pCisgQUNfQ09ORklHX0ZJTEVTKFtzcmMvdmVyc2lvbmluZm8ucmMgc3JjL2dwZy1lcnJvci53MzItbWFuaWZlc3RdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL2dwZy1lcnJvci1jb25maWddLCBbY2htb2QgK3ggc3JjL2dwZy1lcnJvci1jb25maWddKQorK0FDX0NPTkZJR19GSUxFUyhbc3JjL2dwZy1lcnJvci5wY10pCisgCisgQUNfT1VUUFVUCisgCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ3BnLWVycm9yLTEuMTcub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBsaWJncGctZXJyb3ItMS4xNy9zcmMvTWFrZWZpbGUuYW0KK0BAIC03NSw2ICs3NSw4IEBAIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBncGctZXJyb3IuaAorIGJpbl9TQ1JJUFRTID0gZ3BnLWVycm9yLWNvbmZpZworIG00ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorIG00ZGF0YV9EQVRBID0gZ3BnLWVycm9yLm00CisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gZ3BnLWVycm9yLnBjCisgCisgRVhUUkFfRElTVCA9IG1rc3RydGFibGUuYXdrIGVyci1zb3VyY2VzLmguaW4gZXJyLWNvZGVzLmguaW4gXAorIAlta2Vycm5vcy5hd2sgZXJybm9zLmluIFJFQURNRSBcCitAQCAtODIsNyArODQsNyBAQCBFWFRSQV9ESVNUID0gbWtzdHJ0YWJsZS5hd2sgZXJyLXNvdXJjZXMuCisgCW1raGVhZGVyLmMgZ3BnLWVycm9yLmguaW4gbWt3MzJlcnJtYXAuYyB3MzItYWRkLmggdzMyY2UtYWRkLmggXAorIAllcnItc291cmNlcy5oIGVyci1jb2Rlcy5oIGdwZy1lcnJvci1jb25maWcuaW4gZ3BnLWVycm9yLm00IFwKKyAJZ3BnLWVycm9yLnZlcnMgZ3BnLWVycm9yLmRlZi5pbiBcCistICAgICAgICB2ZXJzaW9uaW5mby5yYy5pbiBncGctZXJyb3IudzMyLW1hbmlmZXN0LmluIFwKKysgICAgICAgIHZlcnNpb25pbmZvLnJjLmluIGdwZy1lcnJvci53MzItbWFuaWZlc3QuaW4gZ3BnLWVycm9yLnBjIFwKKyAJJChsb2NrX29ial9wdWIpCisgCisgQlVJTFRfU09VUkNFUyA9IGVyci1zb3VyY2VzLmggZXJyLWNvZGVzLmggY29kZS10by1lcnJuby5oIGNvZGUtZnJvbS1lcnJuby5oIFwKK0luZGV4OiBsaWJncGctZXJyb3ItMS4xNy9zcmMvZ3BnLWVycm9yLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ3BnLWVycm9yLTEuMTcub3JpZy9zcmMvZ3BnLWVycm9yLm00CisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5tNAorQEAgLTI2LDczICsyNiwxMyBAQCBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfR1BHX0VSUk9SXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIGdwZ19lcnJvcl9jb25maWdfcHJlZml4PSIiCistICBkbmwgLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgdGhpcyBvcHRpb24sCistICBkbmwgc2luY2UgdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggaG93IG91ciB0aHJlZSBzaWJsaW5ncyB1c2UgdGhlIGRpcmVjdG9yeS8KKy0gIGRubCBwYWNrYWdlIG5hbWUgaW4gLS13aXRoLSRkaXJfbmFtZS1wcmVmaXg9UEZYLgorLSAgQUNfQVJHX1dJVEgobGliZ3BnLWVycm9yLXByZWZpeCwKKy0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeD1QRlhdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBHUEcgRXJyb3IgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgICAgICAgICAgIFtncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiXSkKKy0KKy0gIGRubCBBY2NlcHQgLS13aXRoLWdwZy1lcnJvci1wcmVmaXggYW5kIG1ha2UgaXQgd29yayB0aGUgc2FtZSBhcworLSAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4IGFib3ZlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksCistICBkbmwgYnV0IGRvIG5vdCBkb2N1bWVudCB0aGlzIG9sZCwgaW5jb25zaXN0ZW50bHktbmFtZWQgb3B0aW9uLgorLSAgQUNfQVJHX1dJVEgoZ3BnLWVycm9yLXByZWZpeCwsCistICAgICAgICAgICAgICBbZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIl0pCisrICBtaW5fZ3BnX2Vycm9yX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjAsJDEpCisgCistICBpZiB0ZXN0IHgiJHtHUEdfRVJST1JfQ09ORklHfSIgPSB4IDsgdGhlbgorLSAgICAgaWYgdGVzdCB4IiR7Z3BnX2Vycm9yX2NvbmZpZ19wcmVmaXh9IiAhPSB4IDsgdGhlbgorLSAgICAgICAgR1BHX0VSUk9SX0NPTkZJRz0iJHtncGdfZXJyb3JfY29uZmlnX3ByZWZpeH0vYmluL2dwZy1lcnJvci1jb25maWciCistICAgICBlbHNlCistICAgICAgIGNhc2UgIiR7U1lTUk9PVH0iIGluCistICAgICAgICAgLyopCistICAgICAgICAgICBpZiB0ZXN0IC14ICIke1NZU1JPT1R9L2Jpbi9ncGctZXJyb3ItY29uZmlnIiA7IHRoZW4KKy0gICAgICAgICAgICAgR1BHX0VSUk9SX0NPTkZJRz0iJHtTWVNST09UfS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIKKy0gICAgICAgICAgIGZpCistICAgICAgICAgICA7OworLSAgICAgICAgICcnKQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgIEFDX01TR19XQVJOKFtJZ25vcmluZyBcJFNZU1JPT1QgYXMgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGguXSkKKy0gICAgICAgICAgIDs7CistICAgICAgIGVzYWMKKy0gICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHX0VSUk9SLCBbZ3BnLWVycm9yID49ICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAKKy0gIEFDX1BBVEhfUFJPRyhHUEdfRVJST1JfQ09ORklHLCBncGctZXJyb3ItY29uZmlnLCBubykKKy0gIG1pbl9ncGdfZXJyb3JfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMCwkMSkKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHIEVycm9yIC0gdmVyc2lvbiA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdfRVJST1JfQ09ORklHIiAhPSAibm8iIFwKKy0gICAgICYmIHRlc3QgLWYgIiRHUEdfRVJST1JfQ09ORklHIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICBncGdfZXJyb3JfY29uZmlnX3ZlcnNpb249YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ2UgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHX0VSUk9SX0NGTEFHUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgR1BHX0VSUk9SX0xJQlM9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1saWJzYAorLSAgICBHUEdfRVJST1JfTVRfQ0ZMQUdTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbXQgLS1jZmxhZ3MgMj4vZGV2L251bGxgCistICAgIEdQR19FUlJPUl9NVF9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbXQgLS1saWJzIDI+L2Rldi9udWxsYAorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24pXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ19ob3N0PWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGdwZy1lcnJvcmAKKyAgICAgaWYgdGVzdCB4IiRncGdfZXJyb3JfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTA3LDExICs0Nyw2IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKy0gICAgR1BHX0VSUk9SX0NGTEFHUz0iIgorLSAgICBHUEdfRVJST1JfTElCUz0iIgorLSAgICBHUEdfRVJST1JfTVRfQ0ZMQUdTPSIiCistICAgIEdQR19FUlJPUl9NVF9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoR1BHX0VSUk9SX0NGTEFHUykKK0luZGV4OiBsaWJncGctZXJyb3ItMS4xNy9zcmMvZ3BnLWVycm9yLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5wYy5pbgorQEAgLTAsMCArMSwxMSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorK2hvc3Q9QEdQR19FUlJPUl9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGctZXJyb3IKKytEZXNjcmlwdGlvbjogYSBsaWJyYXJ5IHRoYXQgZGVmaW5lcyBjb21tb24gZXJyb3IgdmFsdWVzIGZvciBhbGwgR251UEcgY29tcG9uZW50cworK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnLWVycm9yCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWRiYmNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjE5LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiU21hbGwgbGlicmFyeSB0aGF0IGRlZmluZXMgY29tbW9uIGVycm9yIHZhbHVlcyBmb3IgYWxsIEdudVBHIGNvbXBvbmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmdwZy1lcnJvci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dwZy1lcnJvci5oLmluO2VuZGxpbmU9MjM7bWQ1PThiMjA0OTE4ZjBjYTcwNzEzNjM5NGQ4YmIyMGM3ZWJjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pbml0LmM7ZW5kbGluZT0yMDttZDU9OGY1YTliNTk2MzRmNGFlYmNkMGVjOWQzZWJkNTNiZmUiCisKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiYzA0YzE2MjQ1YjkyODI5MjgxZjQzYjViZWY3ZDE2ZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTMxMjBlMTMzM2Q1YzVkMjhkODdmZjI4NTRlOWU5ODcxOWM4ZTIxNDE1MmYxN2FkNTI5MTcwNGQyNWM0OTc4YiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ncGctZXJyb3ItY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnIGdldHRleHQKK0NQUEZMQUdTICs9ICItUCIKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlUQVJHRVRfRklMRT1saW51eC1nbnUKKwlpZiBbICR7VEFSR0VUX09TfSAhPSAibGludXgiIF07IHRoZW4KKwkJVEFSR0VUX0ZJTEU9JHtUQVJHRVRfT1N9CisJZmkKKworCWNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKwkgIGFhcmNoNjRfYmUpIFRVUExFPWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIGFybSkJICAgICAgVFVQTEU9YXJtLXVua25vd24tbGludXgtZ251ZWFiaSA7OworCSAgYXJtZWIpICAgICAgVFVQTEU9YXJtLXVua25vd24tbGludXgtZ251ZWFiaSA7OworCSAgaTU4NnxpNjg2KSAgVFVQTEU9aTY4Ni1wYy1saW51eC1nbnUgOzsKKwkgIG1pcHM2NGVsKSAgIFRVUExFPW1pcHNlbC11bmtub3duLWxpbnV4LWdudSA7OworCSAgbWlwczY0KSAgICAgVFVQTEU9bWlwcy11bmtub3duLWxpbnV4LWdudSA7OworCSAgeDg2XzY0KSAgICAgVFVQTEU9eDg2XzY0LXBjLWxpbnV4LWdudSA7OworCSAgKikgICAgICAgICAgVFVQTEU9JHtUQVJHRVRfQVJDSH0tdW5rbm93bi1saW51eC1nbnUgOzsgCisJZXNhYworCisJY3AgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVFVQTEUuaCBcCisJICAke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUQVJHRVRfRklMRS5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgd2UgZG9uJ3QgaGF2ZSBjb21tb24gbGlzcCBpbiBPRQorCXJtIC1yZiAiJHtEfSR7ZGF0YWRpcn0vY29tbW9uLWxpc3AvIgorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ncGctZXJyb3IiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNmI2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMS4wLjAuYmIKQEAgLTAsMCArMSwxMyBAQAorU1VNTUFSWSA9ICJpQ2FsIGFuZCBzY2hlZHVsaW5nIChSRkMgMjQ0NSwgMjQ0NiwgMjQ0NykgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwvaXNzdWVzIgorTElDRU5TRSA9ICJMR1BMdjIuMSB8IE1QTC0xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDRmYzU4MzA5ZDhlZDQ2NTg3YWM2M2JiNDQ5ZDgyZjggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRTttZDU9ZDFhMDg5MWNkM2U1ODJiM2UyZWM4ZmU2M2JhZGJiYjYiCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tLyR7QlBOfS8ke0JQTn0vYXJjaGl2ZS92JHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImY0YjhlMzNhZTVlZmIyZjAyNWViNDNjZTY5NjgyYTM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwNzJlODM4MzQwOTIzMTU3NzJlNjcxOWI4NWZjOGIxMTUzMGIxZmY1M2Y0ZDEwODMxNWZiMzhjZGRiY2U4YzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiZjU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9hdXRvY29uZi5wYXRjaApAQCAtMCwwICsxLDUwIEBACitJdCBhZGRzIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgbmVlZGVkCitmb3IgYXV0b2NvbmYgMi42NSB0byByZWNvbmZpZ3VyZSBsaWJpY29udiBhbmQgZGVmaW5lcyB0aGUgbTQgbWFjcm9zIAorZGlyZWN0b3J5LiBJdHMgaW1wb3J0ZWQgZnJvbSBPRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJpY29udi0xLjExLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMS4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMS4xL2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQtYXV4KQorIEFNX0lOSVRfQVVUT01BS0UobGliaWNvbnYsIDEuMTEpCisgQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmggbGliL2NvbmZpZy5oKQorIEFDX1BST0dfTUFLRV9TRVQKKy0KKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisgZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCisgCisgQUNfUFJPR19DQworSW5kZXg6IGxpYmljb252LTEuMTEuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMS4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCitAQCAtMTYsMTcgKzE2LDE3IEBAIGRubCBhbG9uZyB3aXRoIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5OworIGRubCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsCisgZG5sIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAKKy1BQ19QUkVSRVEoMi4xMykKKytBQ19QUkVSRVEoMi42MSkKKytBQ19JTklUKFtsaWJjaGFyc2V0XSxbMS40XSApCisrQUNfQ09ORklHX1NSQ0RJUihbbGliL2xvY2FsY2hhcnNldC5jXSkKKyAKKy1QQUNLQUdFPWxpYmNoYXJzZXQKKy1WRVJTSU9OPTEuNAorLQorLUFDX0lOSVQobGliL2xvY2FsY2hhcnNldC5jKQorIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBQ19DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIEFDX1BST0dfTUFLRV9TRVQKKy1BQ19TVUJTVChQQUNLQUdFKQorLUFDX1NVQlNUKFZFUlNJT04pCisrZG5sIEFDX1NVQlNUKFBBQ0tBR0UpCisrZG5sIEFDX1NVQlNUKFZFUlNJT04pCisrCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIAorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwN2Y3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorV2l0aCBsaWJ0b29sIGdlbmVyYXRpbmcgc2hhcmVkIGFuZCBzdGF0aWMgdmVyc2lvbiBvZiBsaWJyYXJpZXMgbmVlZHMgLWZQSUMgZmxhZ3MKK3dpdGhvdXQgdGhpcyBpdCB3aWxsIG5vdCBnZW5lcmF0ZSB0aGUgY29tbWFuZHMgdG8gY3JlYXRlIHNoYXJlZCBsaW5rZWQgbGlicmFyeQorSXRzIG1vcmUgZW5mb3JjZWQgYnkgbGlidG9vbCAyLjQuIEkgaGF2ZSBub3QgY2hlY2tlZCBpdCB3aXRoIG9sZGVyIGxpYnRvb2wKK2xpYmljb252IDEuMTEueCBpcyByZWxhdGl2ZWx5IG9sZCByZWxlYXNlIGFuZCBsaWJ0b29sIDIuNCBkaWQgbm90IGV4aXN0IHdoZW4gaXQKK3dhcyByZWxlYXNlZCB0aGVzZSBraW5kIG9mIHByb2JsZW0gYXJlIG1vcmUgbGlrZWx5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGliaWNvbnYtMS4xMS4xL2xpYi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2xpYi9NYWtlZmlsZS5pbgorKysrIGxpYmljb252LTEuMTEuMS9saWIvTWFrZWZpbGUuaW4KK0BAIC03MCw5ICs3MCw5IEBAIHByZWxvYWRhYmxlX2xpYmljb252LnNvIDogcHJlbG9hZGFibGVfbGkKKyAKKyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbyA6ICQoU09VUkNFUykKKyAJaWYgdGVzdCAtbiAiQEdDQ0AiOyB0aGVuIFwKKy0JICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtZlBJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtc2hhcmVkIC1vIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisrCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLWZQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXJwYXRoICQobGliZGlyKSAtbyBsaWJwcmVsb2FkX2ljb252LmxhICYmIGNwIC5saWJzL2xpYnByZWxvYWRfaWNvbnYuc28gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKyAJZWxzZSBcCistCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLUtQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXNoYXJlZCAtbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorKwkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1LUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1ycGF0aCAkKGxpYmRpcikgLW8gbGlicHJlbG9hZF9pY29udi5sYSAmJiBjcCAubGlicy9saWJwcmVsb2FkX2ljb252LnNvIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisgCWZpCisgCisgcHJlbG9hZGFibGVfbGliaWNvbnZfc29sYXJpcy5zbyA6ICQoU09VUkNFUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWYzNzdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoCkBAIC0wLDAgKzEsNTAwOCBAQAorVGhpcyBwYXRjaCBpcyBuZWVkZWQgdG8gc29sdmUgaXNzdWVzIGxpa2UKK3wgaWNvbnYubzogSW4gZnVuY3Rpb24gYG1haW4nOgorfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmMvLi9pY29udi5jOjg2MTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmVsb2NhdGUnCit8IC4uL3NyY2xpYi9saWJpY3J0LmEocHJvZ3JlbG9jLm8pOiBJbiBmdW5jdGlvbiBgcHJlcGFyZV9yZWxvY2F0ZSc6Cit8IC9ob21lL2phbWVzL3N0dWZmL2JlYWdsZS90bXAtZWdsaWJjL3dvcmsvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGliaWNvbnYtMS4xNC1yMC9saWJpY29udi0xLjE0L3NyY2xpYi9wcm9ncmVsb2MuYzoyOTc6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGNvbXB1dGVfY3Vycl9wcmVmaXgnCit8IC9ob21lL2phbWVzL3N0dWZmL2JlYWdsZS90bXAtZWdsaWJjL3dvcmsvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGliaWNvbnYtMS4xNC1yMC9saWJpY29udi0xLjE0L3NyY2xpYi9wcm9ncmVsb2MuYzozMDI6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHNldF9yZWxvY2F0aW9uX3ByZWZpeCcKK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK3wgbWFrZVsxXTogKioqIFtpbnN0YWxsXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2FyZy1ub25udWxsLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgJMjAxMi0wMS0wOCAwMjowNzozOS45MzA0ODQ0MzggLTA4MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysvKiBBIEMgbWFjcm8gZm9yIGRlY2xhcmluZyB0aGF0IHNwZWNpZmljIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBOVUxMLgorKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisrIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKysjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisrIyBlbHNlCisrIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9jKytkZWZzLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYysrZGVmcy5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9jKytkZWZzLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9jKytkZWZzLmgJMjAxMi0wMS0wOCAwMjowNzozOS45NDI0ODQ0MzggLTA4MDAKK0BAIC0wLDAgKzEsMjcxIEBACisrLyogQysrIGNvbXBhdGlibGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gbWFjcm9zLgorKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaWZuZGVmIF9HTF9DWFhERUZTX0gKKysjZGVmaW5lIF9HTF9DWFhERUZTX0gKKysKKysvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKysKKysgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisrICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisrICAgICBpdCBleGlzdHM6CisrCisrICAgICAgICNpZiBAR05VTElCX0ZPT0AKKysgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisrICAgICAgIC4uLgorKyAgICAgICAjZW5kaWYKKysKKysgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorKworKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisrICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyAgICAgICAjICAgdW5kZWYgZm9vCisrICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKysgICAgICAgIyAgZW5kaWYKKysgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisrICAgICAgICMgZWxzZQorKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKysgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisrICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKysKKysgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKysgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysgICAgICAgIyAgIHVuZGVmIGZvbworKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisrICAgICAgICMgIGVuZGlmCisrICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICAjIGVsc2UKKysgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKysgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjICBlbmRpZgorKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrKi8KKysKKysvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisrICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisrI2VuZGlmCisrCisrLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisrICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKysgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworKyAqLworKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKworKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKysgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworKyAqLworKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisrCisrLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKysgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKysgKi8KKysjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKysgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisrICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorKyAgIGlzIGRlZmluZWQuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworKyAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKysgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKysgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKysgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKysgICBvdGhlcndpc2Ugb2NjdXIuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKysgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisrICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKysgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisrICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisrICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKysgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisrICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisrICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisrICAgdmFyaWFudHMuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKysvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKysgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKysjIGlmICFfX09QVElNSVpFX18KKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKysgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKysgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrIyBlbmRpZgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisrICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworKyMgaWYgIV9fT1BUSU1JWkVfXworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisrICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjIGVuZGlmCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjYgKzAsMCBAQAorLS8qIEEgQyBtYWNybyBmb3IgZGVjbGFyaW5nIHRoYXQgc3BlY2lmaWMgYXJndW1lbnRzIG11c3Qgbm90IGJlIE5VTEwuCistICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCistICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCistICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCistI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKy0jIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworLSMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKy0jIGVuZGlmCistI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwyNzEgKzAsMCBAQAorLS8qIEMrKyBjb21wYXRpYmxlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG1hY3Jvcy4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistI2lmbmRlZiBfR0xfQ1hYREVGU19ICistI2RlZmluZSBfR0xfQ1hYREVGU19ICistCistLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CistCistICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorLSAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorLSAgICAgaXQgZXhpc3RzOgorLQorLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACistICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKy0gICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKy0gICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSAgICAgICAuLi4KKy0gICAgICAgI2VuZGlmCistCistICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKy0gICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKy0KKy0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAorLSAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKy0gICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0gICAgICAgIyAgIHVuZGVmIGZvbworLSAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCistICAgICAgICMgIGVuZGlmCistICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICAjIGVsc2UKKy0gICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCistICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorLSAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CistCistICAgICAgICNpZiBAR05VTElCX0ZPT0AKKy0gICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACistICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistICAgICAgICMgICB1bmRlZiBmb28KKy0gICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworLSAgICAgICAjICBlbmRpZgorLSAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbHNlCistICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACistICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyAgZW5kaWYKKy0gICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLSovCistCistLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworLSAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKy0jIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorLSNlbHNlCistIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorLSNlbmRpZgorLQorLS8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworLSAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCistICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKy0gKi8KKy0jZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKy0jZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKy0KKy0vKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCistICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKy0gKi8KKy0jZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworLQorLS8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCistICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CistICovCistI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CistICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorLSAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKy0gICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKy0gICBpcyBkZWZpbmVkLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKy0gKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0gIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKy0gICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CistICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCistICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCistICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKy0gICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKy0gICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCistICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CistICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorLSAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCistICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorLSAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKy0gICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKy0gICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorLSAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCistICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworLSAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorLSAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorLSAgIHZhcmlhbnRzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCistLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCistICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCistIyBpZiAhX19PUFRJTUlaRV9fCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKy0gICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCistICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCistICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSMgZW5kaWYKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworLSAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCistICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorLSAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy0vKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKy0gICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKy0jIGlmICFfX09QVElNSVpFX18KKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorLSAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistIyBlbmRpZgorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0jZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMCArMCwwIEBACistI2lmbmRlZiBfTm9yZXR1cm4KKy0jIGlmICgzIDw9IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18pIFwKKy0gICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKy0jICBkZWZpbmUgX05vcmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorLSMgZWxpZiAxMjAwIDw9IF9NU0NfVkVSCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKy0jIGVsc2UKKy0jICBkZWZpbmUgX05vcmV0dXJuCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDEwOSArMCwwIEBACistLyogQSBDIG1hY3JvIGZvciBlbWl0dGluZyB3YXJuaW5ncyBpZiBhIGZ1bmN0aW9uIGlzIHVzZWQuCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJsaXRlcmFsIHN0cmluZyIpIGlzc3VlcyBhIGRlY2xhcmF0aW9uCistICAgZm9yIEZVTkNUSU9OIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgY29tcGlsZXIgd2FybmluZyBjb250YWluaW5nCistICAgdGhlIHRleHQgb2YgImxpdGVyYWwgc3RyaW5nIiBhbnl3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCwgaWYKKy0gICBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgSWYgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcworLSAgIGZlYXR1cmUsIHRoZSBtYWNybyBleHBhbmRzIHRvIGFuIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCistCistICAgVGhpcyBtYWNybyBpcyB1c2VmdWwgZm9yIG1hcmtpbmcgYSBmdW5jdGlvbiBhcyBhIHBvdGVudGlhbAorLSAgIHBvcnRhYmlsaXR5IHRyYXAsIHdpdGggdGhlIGludGVudCB0aGF0ICJsaXRlcmFsIHN0cmluZyIgaW5jbHVkZQorLSAgIGluc3RydWN0aW9ucyBvbiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNlZAorLSAgIGluc3RlYWQuICBIb3dldmVyLCBvbmUgb2YgdGhlIHJlYXNvbnMgdGhhdCBhIGZ1bmN0aW9uIGlzIGEKKy0gICBwb3J0YWJpbGl0eSB0cmFwIGlzIGlmIGl0IGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlLiAgRGVjbGFyaW5nCistICAgRlVOQ1RJT04gd2l0aCBhIGRpZmZlcmVudCBzaWduYXR1cmUgaW4gQyBpcyBhIGNvbXBpbGF0aW9uIGVycm9yLCBzbworLSAgIHRoaXMgbWFjcm8gbXVzdCB1c2UgdGhlIHNhbWUgdHlwZSBhcyBhbnkgZXhpc3RpbmcgZGVjbGFyYXRpb24gc28KKy0gICB0aGF0IHByb2dyYW1zIHRoYXQgYXZvaWQgdGhlIHByb2JsZW1hdGljIEZVTkNUSU9OIGRvIG5vdCBmYWlsIHRvCistICAgY29tcGlsZSBtZXJlbHkgYmVjYXVzZSB0aGV5IGluY2x1ZGVkIGEgaGVhZGVyIHRoYXQgcG9pc29uZWQgdGhlCistICAgZnVuY3Rpb24uICBCdXQgdGhpcyBpbXBsaWVzIHRoYXQgX0dMX1dBUk5fT05fVVNFIGlzIG9ubHkgc2FmZSB0bworLSAgIHVzZSBpZiBGVU5DVElPTiBpcyBrbm93biB0byBhbHJlYWR5IGhhdmUgYSBkZWNsYXJhdGlvbi4gIFVzZSBvZgorLSAgIHRoaXMgbWFjcm8gaW1wbGllcyB0aGF0IHRoZXJlIG11c3Qgbm90IGJlIGFueSBvdGhlciBtYWNybyBoaWRpbmcKKy0gICB0aGUgZGVjbGFyYXRpb24gb2YgRlVOQ1RJT047IGJ1dCB1bmRlZmluaW5nIEZVTkNUSU9OIGZpcnN0IGlzIHBhcnQKKy0gICBvZiB0aGUgcG9pc29uaW5nIHByb2Nlc3MgYW55d2F5IChhbHRob3VnaCBmb3Igc3ltYm9scyB0aGF0IGFyZQorLSAgIHByb3ZpZGVkIG9ubHkgdmlhIGEgbWFjcm8sIHRoZSByZXN1bHQgaXMgYSBjb21waWxhdGlvbiBlcnJvciByYXRoZXIKKy0gICB0aGFuIGEgd2FybmluZyBjb250YWluaW5nICJsaXRlcmFsIHN0cmluZyIpLiAgQWxzbyBub3RlIHRoYXQgaW4KKy0gICBDKyssIGl0IGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgRlVOQ1RJT04gaGFzIG5vIG92ZXJsb2Fkcy4KKy0KKy0gICBGb3IgYW4gZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gcG9pc29uICdnZXRsaW5lJyBieToKKy0gICAtIGFkZGluZyBhIGNhbGwgdG8gZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLAorLSAgICAgW2dldGxpbmVdKSBpbiBjb25maWd1cmUuYWMsIHdoaWNoIHBvdGVudGlhbGx5IGRlZmluZXMKKy0gICAgIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorLSAgIC0gYWRkaW5nIHRoaXMgY29kZSB0byBhIGhlYWRlciB0aGF0IHdyYXBzIHRoZSBzeXN0ZW0gPHN0ZGlvLmg+OgorLSAgICAgI3VuZGVmIGdldGxpbmUKKy0gICAgICNpZiBIQVZFX1JBV19ERUNMX0dFVExJTkUKKy0gICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0bGluZSwgImdldGxpbmUgaXMgcmVxdWlyZWQgYnkgUE9TSVggMjAwOCwgYnV0IgorLSAgICAgICAibm90IHVuaXZlcnNhbGx5IHByZXNlbnQ7IHVzZSB0aGUgZ251bGliIG1vZHVsZSBnZXRsaW5lIik7CistICAgICAjZW5kaWYKKy0KKy0gICBJdCBpcyBub3QgcG9zc2libGUgdG8gZGlyZWN0bHkgcG9pc29uIGdsb2JhbCB2YXJpYWJsZXMuICBCdXQgaXQgaXMKKy0gICBwb3NzaWJsZSB0byB3cml0ZSBhIHdyYXBwZXIgYWNjZXNzb3IgZnVuY3Rpb24sIGFuZCBwb2lzb24gdGhhdAorLSAgIChsZXNzIGNvbW1vbiB1c2FnZSwgbGlrZSAmZW52aXJvbiwgd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yCistICAgcmF0aGVyIHRoYW4gaXNzdWUgdGhlIG5pY2Ugd2FybmluZywgYnV0IHRoZSBlbmQgcmVzdWx0IG9mIGluZm9ybWluZworLSAgIHRoZSBkZXZlbG9wZXIgYWJvdXQgdGhlaXIgcG9ydGFiaWxpdHkgcHJvYmxlbSBpcyBzdGlsbCBhY2hpZXZlZCk6CistICAgI2lmIEhBVkVfUkFXX0RFQ0xfRU5WSVJPTgorLSAgIHN0YXRpYyBpbmxpbmUgY2hhciAqKipycGxfZW52aXJvbiAodm9pZCkgeyByZXR1cm4gJmVudmlyb247IH0KKy0gICBfR0xfV0FSTl9PTl9VU0UgKHJwbF9lbnZpcm9uLCAiZW52aXJvbiBpcyBub3QgYWx3YXlzIHByb3Blcmx5IGRlY2xhcmVkIik7CistICAgIyB1bmRlZiBlbnZpcm9uCistICAgIyBkZWZpbmUgZW52aXJvbiAoKnJwbF9lbnZpcm9uICgpKQorLSAgICNlbmRpZgorLSAgICovCistI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKy0KKy0jIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLS8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCistZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCistZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorLSMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLV9HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorLSAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKy0gICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCistICAgYW5kIGF0dHJpYnV0ZXMuCistICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworLSAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCistI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCistIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCistICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0vKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKy1leHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCistIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKy0gICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworLSNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKy0jIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKy0jICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorLSMgZWxzZQorLSMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKy0jIGVuZGlmCistI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3dhcm4tb24tdXNlLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgJMjAxMi0wMS0wOCAwMjowNzozOS45NTA0ODQ0MzkgLTA4MDAKK0BAIC0wLDAgKzEsMTA5IEBACisrLyogQSBDIG1hY3JvIGZvciBlbWl0dGluZyB3YXJuaW5ncyBpZiBhIGZ1bmN0aW9uIGlzIHVzZWQuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKy8qIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJsaXRlcmFsIHN0cmluZyIpIGlzc3VlcyBhIGRlY2xhcmF0aW9uCisrICAgZm9yIEZVTkNUSU9OIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgY29tcGlsZXIgd2FybmluZyBjb250YWluaW5nCisrICAgdGhlIHRleHQgb2YgImxpdGVyYWwgc3RyaW5nIiBhbnl3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCwgaWYKKysgICBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgSWYgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcworKyAgIGZlYXR1cmUsIHRoZSBtYWNybyBleHBhbmRzIHRvIGFuIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCisrCisrICAgVGhpcyBtYWNybyBpcyB1c2VmdWwgZm9yIG1hcmtpbmcgYSBmdW5jdGlvbiBhcyBhIHBvdGVudGlhbAorKyAgIHBvcnRhYmlsaXR5IHRyYXAsIHdpdGggdGhlIGludGVudCB0aGF0ICJsaXRlcmFsIHN0cmluZyIgaW5jbHVkZQorKyAgIGluc3RydWN0aW9ucyBvbiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNlZAorKyAgIGluc3RlYWQuICBIb3dldmVyLCBvbmUgb2YgdGhlIHJlYXNvbnMgdGhhdCBhIGZ1bmN0aW9uIGlzIGEKKysgICBwb3J0YWJpbGl0eSB0cmFwIGlzIGlmIGl0IGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlLiAgRGVjbGFyaW5nCisrICAgRlVOQ1RJT04gd2l0aCBhIGRpZmZlcmVudCBzaWduYXR1cmUgaW4gQyBpcyBhIGNvbXBpbGF0aW9uIGVycm9yLCBzbworKyAgIHRoaXMgbWFjcm8gbXVzdCB1c2UgdGhlIHNhbWUgdHlwZSBhcyBhbnkgZXhpc3RpbmcgZGVjbGFyYXRpb24gc28KKysgICB0aGF0IHByb2dyYW1zIHRoYXQgYXZvaWQgdGhlIHByb2JsZW1hdGljIEZVTkNUSU9OIGRvIG5vdCBmYWlsIHRvCisrICAgY29tcGlsZSBtZXJlbHkgYmVjYXVzZSB0aGV5IGluY2x1ZGVkIGEgaGVhZGVyIHRoYXQgcG9pc29uZWQgdGhlCisrICAgZnVuY3Rpb24uICBCdXQgdGhpcyBpbXBsaWVzIHRoYXQgX0dMX1dBUk5fT05fVVNFIGlzIG9ubHkgc2FmZSB0bworKyAgIHVzZSBpZiBGVU5DVElPTiBpcyBrbm93biB0byBhbHJlYWR5IGhhdmUgYSBkZWNsYXJhdGlvbi4gIFVzZSBvZgorKyAgIHRoaXMgbWFjcm8gaW1wbGllcyB0aGF0IHRoZXJlIG11c3Qgbm90IGJlIGFueSBvdGhlciBtYWNybyBoaWRpbmcKKysgICB0aGUgZGVjbGFyYXRpb24gb2YgRlVOQ1RJT047IGJ1dCB1bmRlZmluaW5nIEZVTkNUSU9OIGZpcnN0IGlzIHBhcnQKKysgICBvZiB0aGUgcG9pc29uaW5nIHByb2Nlc3MgYW55d2F5IChhbHRob3VnaCBmb3Igc3ltYm9scyB0aGF0IGFyZQorKyAgIHByb3ZpZGVkIG9ubHkgdmlhIGEgbWFjcm8sIHRoZSByZXN1bHQgaXMgYSBjb21waWxhdGlvbiBlcnJvciByYXRoZXIKKysgICB0aGFuIGEgd2FybmluZyBjb250YWluaW5nICJsaXRlcmFsIHN0cmluZyIpLiAgQWxzbyBub3RlIHRoYXQgaW4KKysgICBDKyssIGl0IGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgRlVOQ1RJT04gaGFzIG5vIG92ZXJsb2Fkcy4KKysKKysgICBGb3IgYW4gZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gcG9pc29uICdnZXRsaW5lJyBieToKKysgICAtIGFkZGluZyBhIGNhbGwgdG8gZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLAorKyAgICAgW2dldGxpbmVdKSBpbiBjb25maWd1cmUuYWMsIHdoaWNoIHBvdGVudGlhbGx5IGRlZmluZXMKKysgICAgIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorKyAgIC0gYWRkaW5nIHRoaXMgY29kZSB0byBhIGhlYWRlciB0aGF0IHdyYXBzIHRoZSBzeXN0ZW0gPHN0ZGlvLmg+OgorKyAgICAgI3VuZGVmIGdldGxpbmUKKysgICAgICNpZiBIQVZFX1JBV19ERUNMX0dFVExJTkUKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0bGluZSwgImdldGxpbmUgaXMgcmVxdWlyZWQgYnkgUE9TSVggMjAwOCwgYnV0IgorKyAgICAgICAibm90IHVuaXZlcnNhbGx5IHByZXNlbnQ7IHVzZSB0aGUgZ251bGliIG1vZHVsZSBnZXRsaW5lIik7CisrICAgICAjZW5kaWYKKysKKysgICBJdCBpcyBub3QgcG9zc2libGUgdG8gZGlyZWN0bHkgcG9pc29uIGdsb2JhbCB2YXJpYWJsZXMuICBCdXQgaXQgaXMKKysgICBwb3NzaWJsZSB0byB3cml0ZSBhIHdyYXBwZXIgYWNjZXNzb3IgZnVuY3Rpb24sIGFuZCBwb2lzb24gdGhhdAorKyAgIChsZXNzIGNvbW1vbiB1c2FnZSwgbGlrZSAmZW52aXJvbiwgd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yCisrICAgcmF0aGVyIHRoYW4gaXNzdWUgdGhlIG5pY2Ugd2FybmluZywgYnV0IHRoZSBlbmQgcmVzdWx0IG9mIGluZm9ybWluZworKyAgIHRoZSBkZXZlbG9wZXIgYWJvdXQgdGhlaXIgcG9ydGFiaWxpdHkgcHJvYmxlbSBpcyBzdGlsbCBhY2hpZXZlZCk6CisrICAgI2lmIEhBVkVfUkFXX0RFQ0xfRU5WSVJPTgorKyAgIHN0YXRpYyBpbmxpbmUgY2hhciAqKipycGxfZW52aXJvbiAodm9pZCkgeyByZXR1cm4gJmVudmlyb247IH0KKysgICBfR0xfV0FSTl9PTl9VU0UgKHJwbF9lbnZpcm9uLCAiZW52aXJvbiBpcyBub3QgYWx3YXlzIHByb3Blcmx5IGRlY2xhcmVkIik7CisrICAgIyB1bmRlZiBlbnZpcm9uCisrICAgIyBkZWZpbmUgZW52aXJvbiAoKnJwbF9lbnZpcm9uICgpKQorKyAgICNlbmRpZgorKyAgICovCisrI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKysKKysjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCisrZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCisrZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKysgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisrICAgYW5kIGF0dHJpYnV0ZXMuCisrICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisrI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisrIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKysvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKytleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisrIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKysgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKysjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKysjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKysjIGVuZGlmCisrI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2FsbG9jYXRvci5oIGxpYmljb252LTEuMTQvc3JjbGliL2FsbG9jYXRvci5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9hbGxvY2F0b3IuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2FsbG9jYXRvci5oCTIwMTItMDEtMDggMDI6MDc6NDAuMDUwNDg0NDQ0IC0wODAwCitAQCAtNDUsMTEgKzQ1LDEwIEBAIHN0cnVjdCBhbGxvY2F0b3IKKyAgIC8qIENhbGwgRlJFRSB0byBmcmVlIG1lbW9yeSwgbGlrZSAnZnJlZScuICAqLworICAgdm9pZCAoKmZyZWUpICh2b2lkICopOworIAorLSAgLyogSWYgbm9ubnVsbCwgY2FsbCBESUUgKFNJWkUpIGlmIE1BTExPQyAoU0laRSkgb3IgUkVBTExPQyAoLi4uLAorLSAgICAgU0laRSkgZmFpbHMuICBESUUgc2hvdWxkIG5vdCByZXR1cm4uICBTSVpFIHNob3VsZCBlcXVhbCBTSVpFX01BWAorLSAgICAgaWYgc2l6ZV90IG92ZXJmbG93IHdhcyBkZXRlY3RlZCB3aGlsZSBjYWxjdWxhdGluZyBzaXplcyB0byBiZQorLSAgICAgcGFzc2VkIHRvIE1BTExPQyBvciBSRUFMTE9DLiAgKi8KKy0gIHZvaWQgKCpkaWUpIChzaXplX3QpOworKyAgLyogSWYgbm9ubnVsbCwgY2FsbCBESUUgaWYgTUFMTE9DIG9yIFJFQUxMT0MgZmFpbHMuICBESUUgc2hvdWxkIG5vdAorKyAgICAgcmV0dXJuLiAgRElFIGNhbiBiZSB1c2VkIGJ5IGNvZGUgdGhhdCBkZXRlY3RzIG1lbW9yeSBvdmVyZmxvdworKyAgICAgd2hpbGUgY2FsY3VsYXRpbmcgc2l6ZXMgdG8gYmUgcGFzc2VkIHRvIE1BTExPQyBvciBSRUFMTE9DLiAgKi8KKysgIHZvaWQgKCpkaWUpICh2b2lkKTsKKyB9OworIAorIC8qIEFuIGFsbG9jYXRvciB1c2luZyB0aGUgc3RkbGliIGZ1bmN0aW9ucyBhbmQgYSBudWxsIERJRSBmdW5jdGlvbi4gICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4wOTQ0ODQ0NDYgLTA4MDAKK0BAIC0xMjUsNyArMTI1LDcgQEAgX19yZWFscGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcmVzbworICNlbHNlCisgICBwYXRoX21heCA9IHBhdGhjb25mIChuYW1lLCBfUENfUEFUSF9NQVgpOworICAgaWYgKHBhdGhfbWF4IDw9IDApCistICAgIHBhdGhfbWF4ID0gODE5MjsKKysgICAgcGF0aF9tYXggPSAxMDI0OworICNlbmRpZgorIAorICAgaWYgKHJlc29sdmVkID09IE5VTEwpCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2NhcmVhZGxpbmthdC5jIGxpYmljb252LTEuMTQvc3JjbGliL2NhcmVhZGxpbmthdC5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYXJlYWRsaW5rYXQuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2NhcmVhZGxpbmthdC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMTAyNDg0NDQ1IC0wODAwCitAQCAtMTMzLDcgKzEzMyw2IEBAIGNhcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmEKKyAgICAgICAgICAgaWYgKGJ1ZiA9PSBzdGFja19idWYpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgY2hhciAqYiA9IChjaGFyICopIGFsbG9jLT5hbGxvY2F0ZSAobGlua19zaXplKTsKKy0gICAgICAgICAgICAgIGJ1Zl9zaXplID0gbGlua19zaXplOworICAgICAgICAgICAgICAgaWYgKCEgYikKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICBtZW1jcHkgKGIsIGJ1ZiwgbGlua19zaXplKTsKK0BAIC0xNTcsMTEgKzE1Niw2IEBAIGNhcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmEKKyAgICAgICAgIGJ1Zl9zaXplICo9IDI7CisgICAgICAgZWxzZSBpZiAoYnVmX3NpemUgPCBidWZfc2l6ZV9tYXgpCisgICAgICAgICBidWZfc2l6ZSA9IGJ1Zl9zaXplX21heDsKKy0gICAgICBlbHNlIGlmIChidWZfc2l6ZV9tYXggPCBTSVpFX01BWCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CistICAgICAgICAgIHJldHVybiBOVUxMOworLSAgICAgICAgfQorICAgICAgIGVsc2UKKyAgICAgICAgIGJyZWFrOworICAgICAgIGJ1ZiA9IChjaGFyICopIGFsbG9jLT5hbGxvY2F0ZSAoYnVmX3NpemUpOworQEAgLTE2OSw3ICsxNjMsNyBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICB3aGlsZSAoYnVmKTsKKyAKKyAgIGlmIChhbGxvYy0+ZGllKQorLSAgICBhbGxvYy0+ZGllIChidWZfc2l6ZSk7CisrICAgIGFsbG9jLT5kaWUgKCk7CisgICBlcnJubyA9IEVOT01FTTsKKyAgIHJldHVybiBOVUxMOworIH0KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJybm8uaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJuby5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJuby5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJybm8uaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjEyMjQ4NDQ0NiAtMDgwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICisrI2lmbmRlZiBfR0xfRVJSTk9fSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTI2LDggKzI2LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX0VSUk5PX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKysjaWZuZGVmIF9HTF9FUlJOT19ICisrI2RlZmluZSBfR0xfRVJSTk9fSAorIAorIAorIC8qIE9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcywgbWFueSBtYWNyb3MgYXJlIG5vdCBkZWZpbmVkLiAgKi8KK0BAIC0xNDcsMTYgKzE0Nyw2IEBACisgIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAgMQorICMgZW5kaWYKKyAKKy0jIGlmbmRlZiBFTkVUUkVTRVQKKy0jICBkZWZpbmUgRU5FVFJFU0VUIDIwMTEKKy0jICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUIDEKKy0jIGVuZGlmCistCistIyBpZm5kZWYgRUNPTk5BQk9SVEVECistIyAgZGVmaW5lIEVDT05OQUJPUlRFRCAyMDEyCistIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRCAxCistIyBlbmRpZgorLQorICMgaWZuZGVmIEVTVEFMRQorICMgIGRlZmluZSBFU1RBTEUgICAgMjAwOQorICMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FU1RBTEUgMQorQEAgLTE3Myw1ICsxNjMsNSBAQAorICMgZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KKysjZW5kaWYgLyogX0dMX0VSUk5PX0ggKi8KKysjZW5kaWYgLyogX0dMX0VSUk5PX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJyb3IuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJvci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJvci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJyb3IuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjEzNDQ4NDQ0OCAtMDgwMAorQEAgLTk3LDE1ICs5NywxMSBAQCBleHRlcm4gdm9pZCBfX2Vycm9yX2F0X2xpbmUgKGludCBzdGF0dXMsCisgLyogVGhlIGdudWxpYiBvdmVycmlkZSBvZiBmY250bCBpcyBub3QgbmVlZGVkIGluIHRoaXMgZmlsZS4gICovCisgIyB1bmRlZiBmY250bAorIAorLSMgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SCisrIyBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IgJiYgU1RSRVJST1JfUl9DSEFSX1AKKyAjICBpZm5kZWYgSEFWRV9ERUNMX1NUUkVSUk9SX1IKKyAidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorICMgIGVuZGlmCistIyAgaWYgU1RSRVJST1JfUl9DSEFSX1AKKyBjaGFyICpzdHJlcnJvcl9yICgpOworLSMgIGVsc2UKKy1pbnQgc3RyZXJyb3JfciAoKTsKKy0jICBlbmRpZgorICMgZW5kaWYKKyAKKyAvKiBUaGUgY2FsbGluZyBwcm9ncmFtIHNob3VsZCBkZWZpbmUgcHJvZ3JhbV9uYW1lIGFuZCBzZXQgaXQgdG8gdGhlCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ZjbnRsLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvZmNudGwuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZmNudGwuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2ZjbnRsLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xNTQ0ODQ0NDkgLTA4MDAKK0BAIC00MCw3ICs0MCw3IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICisrI2lmbmRlZiBfR0xfRkNOVExfSAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBPbiBzb21lIHN5c3RlbXMgb3RoZXIgdGhhbiBnbGliYywgPHN5cy9zdGF0Lmg+IGlzIGEgcHJlcmVxdWlzaXRlIG9mCitAQCAtNTUsOCArNTUsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfRkNOVExfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorKyNpZm5kZWYgX0dMX0ZDTlRMX0gKKysjZGVmaW5lIF9HTF9GQ05UTF9ICisgCisgI2lmbmRlZiBfX0dMSUJDX18gLyogQXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorQEAgLTMyMCw2ICszMjAsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKG9wZW5hdCwgIm9wZW5hdCBpcyBub3QKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0ggKi8KKysjZW5kaWYgLyogX0dMX0ZDTlRMX0ggKi8KKysjZW5kaWYgLyogX0dMX0ZDTlRMX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvaW50cHJvcHMuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9pbnRwcm9wcy5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9pbnRwcm9wcy5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvaW50cHJvcHMuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjE3NDQ4NDQ1MCAtMDgwMAorQEAgLTIyLDEzICsyMiwxNCBAQAorIAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKy0vKiBSZXR1cm4gYW4gaW50ZWdlciB2YWx1ZSwgY29udmVydGVkIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGludGVnZXIKKy0gICBleHByZXNzaW9uIEUgYWZ0ZXIgaW50ZWdlciB0eXBlIHByb21vdGlvbi4gIFYgaXMgdGhlIHVuY29udmVydGVkIHZhbHVlLiAgKi8KKy0jZGVmaW5lIF9HTF9JTlRfQ09OVkVSVChlLCB2KSAoMCAqIChlKSArICh2KSkKKysvKiBSZXR1cm4gYSBpbnRlZ2VyIHZhbHVlLCBjb252ZXJ0ZWQgdG8gdGhlIHNhbWUgdHlwZSBhcyB0aGUgaW50ZWdlcgorKyAgIGV4cHJlc3Npb24gRSBhZnRlciBpbnRlZ2VyIHR5cGUgcHJvbW90aW9uLiAgViBpcyB0aGUgdW5jb252ZXJ0ZWQgdmFsdWUuCisrICAgRSBzaG91bGQgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiAgKi8KKysjZGVmaW5lIF9HTF9JTlRfQ09OVkVSVChlLCB2KSAoKGUpIC0gKGUpICsgKHYpKQorIAorIC8qIEFjdCBsaWtlIF9HTF9JTlRfQ09OVkVSVCAoRSwgLVYpIGJ1dCB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBJUklYIDYuNSBjYzsgc2VlCisgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTEtMDUvbXNnMDA0MDYuaHRtbD4uICAqLworLSNkZWZpbmUgX0dMX0lOVF9ORUdBVEVfQ09OVkVSVChlLCB2KSAoMCAqIChlKSAtICh2KSkKKysjZGVmaW5lIF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQoZSwgdikgKChlKSAtIChlKSAtICh2KSkKKyAKKyAvKiBUaGUgZXh0cmEgY2FzdHMgaW4gdGhlIGZvbGxvd2luZyBtYWNyb3Mgd29yayBhcm91bmQgY29tcGlsZXIgYnVncywKKyAgICBlLmcuLCBpbiBDcmF5IEMgNS4wLjMuMC4gICovCitAQCAtNTIsNyArNTMsNyBAQAorICNkZWZpbmUgVFlQRV9TSUdORUQodCkgKCEgKCh0KSAwIDwgKHQpIC0xKSkKKyAKKyAvKiBSZXR1cm4gMSBpZiB0aGUgaW50ZWdlciBleHByZXNzaW9uIEUsIGFmdGVyIGludGVnZXIgcHJvbW90aW9uLCBoYXMKKy0gICBhIHNpZ25lZCB0eXBlLiAgKi8KKysgICBhIHNpZ25lZCB0eXBlLiAgRSBzaG91bGQgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiAgKi8KKyAjZGVmaW5lIF9HTF9JTlRfU0lHTkVEKGUpIChfR0xfSU5UX05FR0FURV9DT05WRVJUIChlLCAxKSA8IDApCisgCisgCitAQCAtMzEwLDEwICszMTEsMTMgQEAKKyAvKiBSZXR1cm4gMSBpZiB0aGUgZXhwcmVzc2lvbiBBIDxvcD4gQiB3b3VsZCBvdmVyZmxvdywKKyAgICB3aGVyZSBPUF9SRVNVTFRfT1ZFUkZMT1cgKEEsIEIsIE1JTiwgTUFYKSBkb2VzIHRoZSBhY3R1YWwgdGVzdCwKKyAgICBhc3N1bWluZyBNSU4gYW5kIE1BWCBhcmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZm9yIHRoZSByZXN1bHQgdHlwZS4KKy0gICBBcmd1bWVudHMgc2hvdWxkIGJlIGZyZWUgb2Ygc2lkZSBlZmZlY3RzLiAgKi8KKysKKysgICBUaGlzIG1hY3JvIGFzc3VtZXMgdGhhdCBBIHwgQiBpcyBhIHZhbGlkIGludGVnZXIgaWYgYm90aCBBIGFuZCBCIGFyZSwKKysgICB3aGljaCBpcyB0cnVlIG9mIGFsbCBrbm93biBwcmFjdGljYWwgaG9zdHMuICBJZiB0aGlzIGlzIGEgcHJvYmxlbQorKyAgIGZvciB5b3UsIHBsZWFzZSBsZXQgdXMga25vdyBob3cgdG8gZml4IGl0IGZvciB5b3VyIGhvc3QuICAqLworICNkZWZpbmUgX0dMX0JJTkFSWV9PUF9PVkVSRkxPVyhhLCBiLCBvcF9yZXN1bHRfb3ZlcmZsb3cpICAgICAgICBcCisgICBvcF9yZXN1bHRfb3ZlcmZsb3cgKGEsIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NSU5JTVVNICgwICogKGIpICsgKGEpKSwgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01BWElNVU0gKDAgKiAoYikgKyAoYSkpKQorKyAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01JTklNVU0gKChhKSB8IChiKSksICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUFYSU1VTSAoKGEpIHwgKGIpKSkKKyAKKyAjZW5kaWYgLyogX0dMX0lOVFBST1BTX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvTWFrZWZpbGUuZ251bGliIGxpYmljb252LTEuMTQvc3JjbGliL01ha2VmaWxlLmdudWxpYgorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvTWFrZWZpbGUuZ251bGliCTIwMTItMDEtMDggMDI6MDU6MTguNzU0NDc3NjA2IC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvTWFrZWZpbGUuZ251bGliCTIwMTItMDEtMDggMDI6MDc6NDMuMTM4NDg0NTkyIC0wODAwCitAQCAtOSw3ICs5LDcgQEAKKyAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgIworICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgorLSMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisrIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKyAKKyAKKyBNT1NUTFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKK0BAIC02MCwxMiArNjAsNjAgQEAgRVhUUkFfRElTVCArPSBhcmVhZGxpbmsuaAorIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXJlYWRsaW5rCisgCisrIyMgYmVnaW4gZ251bGliIG1vZHVsZSBhcmctbm9ubnVsbAorKworKyMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorKyMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKysjICdhbGwnIGRlZmluZWQgYWJvdmUuCisrCisrQlVJTFRfU09VUkNFUyArPSBhcmctbm9ubnVsbC5oCisrIyBUaGUgYXJnLW5vbm51bGwuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKysjIGJ1aWxkLWF1eC9hcmctbm9ubnVsbC5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKythcmctbm9ubnVsbC5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCisrCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisrCXNlZCAtbiAtZSAnL0dMX0FSR19OT05OVUxMLywkJHAnIFwKKysJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2FyZy1ub25udWxsLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IGFyZy1ub25udWxsLmggYXJnLW5vbm51bGwuaC10CisrCisrQVJHX05PTk5VTExfSD1hcmctbm9ubnVsbC5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCisrCisrIyMgZW5kICAgZ251bGliIG1vZHVsZSBhcmctbm9ubnVsbAorKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYmluYXJ5LWlvCisgCisgbGliaWNydF9hX1NPVVJDRVMgKz0gYmluYXJ5LWlvLmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGJpbmFyeS1pbworIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYysrZGVmcworKworKyMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorKyMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKysjICdhbGwnIGRlZmluZWQgYWJvdmUuCisrCisrQlVJTFRfU09VUkNFUyArPSBjKytkZWZzLmgKKysjIFRoZSBjKytkZWZzLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisrIyBidWlsZC1hdXgvYysrZGVmcy5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKytjKytkZWZzLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2MrK2RlZnMuaAorKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorKwlzZWQgLW4gLWUgJy9fR0xfQ1hYREVGUy8sJCRwJyBcCisrCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IGMrK2RlZnMuaCBjKytkZWZzLmgtdAorKworK0NYWERFRlNfSD1jKytkZWZzLmgKKysKKytFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2MrK2RlZnMuaAorKworKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYysrZGVmcworKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgY2Fub25pY2FsaXplLWxncGwKKyAKKyAKK0BAIC0xMDAsOCArMTQ4LDcgQEAgaWYgR0xfR0VORVJBVEVfRVJSTk9fSAorIGVycm5vLmg6IGVycm5vLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX0VSUk5PX0gnJ0B8JChORVhUX0VSUk5PX0gpfGcnIFwKK0BAIC0xNDIsMTUgKzE4OSwxNCBAQCBCVUlMVF9TT1VSQ0VTICs9IGZjbnRsLmgKKyBmY250bC5oOiBmY250bC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9GQ05UTF9IJydAfCQoTkVYVF9GQ05UTF9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ05UTCcnQC8kKEdOVUxJQl9GQ05UTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfTk9OQkxPQ0tJTkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU4nJ0AvJChHTlVMSUJfT1BFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfT1BFTkFUJydALyQoR05VTElCX09QRU5BVCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNOVEwnJ0B8JChHTlVMSUJfRkNOVEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX05PTkJMT0NLSU5HJydAfCQoR05VTElCX05PTkJMT0NLSU5HKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PUEVOJydAfCQoR05VTElCX09QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09QRU5BVCcnQHwkKEdOVUxJQl9PUEVOQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GQ05UTCcnQHwkKEhBVkVfRkNOVEwpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9PUEVOQVQnJ0B8JChIQVZFX09QRU5BVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDTlRMJydAfCQoUkVQTEFDRV9GQ05UTCl8ZycgXAorQEAgLTI5Nyw3ICszNDMsNyBAQCBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2NvCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSByZWxvY2F0YWJsZS1wcm9nLXdyYXBwZXIKKyAKKyAKKy1FWFRSQV9ESVNUICs9IGFsbG9jYXRvci5jIGFsbG9jYXRvci5oIGFyZWFkbGluay5jIGFyZWFkbGluay5oIGMtY3R5cGUuYyBjLWN0eXBlLmggY2Fub25pY2FsaXplLWxncGwuYyBjYXJlYWRsaW5rYXQuYyBjYXJlYWRsaW5rYXQuaCBtYWxsb2NhLmMgbWFsbG9jYS5oIHByb2duYW1lLmMgcHJvZ25hbWUuaCBwcm9ncmVsb2MuYyByZWFkbGluay5jIHJlbG9jYXRhYmxlLmMgcmVsb2NhdGFibGUuaCByZWxvY3dyYXBwZXIuYyBzZXRlbnYuYworK0VYVFJBX0RJU1QgKz0gYWxsb2NhdG9yLmMgYWxsb2NhdG9yLmggYXJlYWRsaW5rLmMgYXJlYWRsaW5rLmggYy1jdHlwZS5jIGMtY3R5cGUuaCBjYW5vbmljYWxpemUtbGdwbC5jIGNhcmVhZGxpbmthdC5jIGNhcmVhZGxpbmthdC5oIG1hbGxvY2EuYyBtYWxsb2NhLmggcHJvZ25hbWUuYyBwcm9nbmFtZS5oIHByb2dyZWxvYy5jIHJlYWRsaW5rLmMgcmVsb2NhdGFibGUuYyByZWxvY2F0YWJsZS5oIHJlbG9jd3JhcHBlci5jIHNldGVudi5jIHN0cmVycm9yLmMKKyAKKyBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2luc3RhbGwtcmVsb2MKKyAKK0BAIC0zMDUsOSArMzUxLDEwIEBAIEVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvaW4KKyAKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNhZmUtcmVhZAorIAorLWxpYmljcnRfYV9TT1VSQ0VTICs9IHNhZmUtcmVhZC5jCisgCistRVhUUkFfRElTVCArPSBzYWZlLXJlYWQuaAorK0VYVFJBX0RJU1QgKz0gc2FmZS1yZWFkLmMgc2FmZS1yZWFkLmgKKysKKytFWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzYWZlLXJlYWQuYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2FmZS1yZWFkCisgCitAQCAtMzIwLDI0ICszNjcsMjAgQEAgQlVJTFRfU09VUkNFUyArPSBzaWduYWwuaAorIHNpZ25hbC5oOiBzaWduYWwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TSUdOQUxfSCcnQHwkKE5FWFRfU0lHTkFMX0gpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnR05VTElCX1BUSFJFQURfU0lHTUFTSycnQHwkKEdOVUxJQl9QVEhSRUFEX1NJR01BU0spfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR05BTF9IX1NJR1BJUEUnJ0AvJChHTlVMSUJfU0lHTkFMX0hfU0lHUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHUFJPQ01BU0snJ0AvJChHTlVMSUJfU0lHUFJPQ01BU0spL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR0FDVElPTicnQC8kKEdOVUxJQl9TSUdBQ1RJT04pL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR05BTF9IX1NJR1BJUEUnJ0B8JChHTlVMSUJfU0lHTkFMX0hfU0lHUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0lHUFJPQ01BU0snJ0B8JChHTlVMSUJfU0lHUFJPQ01BU0spfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR0FDVElPTicnQHwkKEdOVUxJQl9TSUdBQ1RJT04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORycnQHwkKEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9QVEhSRUFEX1NJR01BU0snJ0B8JChIQVZFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR1NFVF9UJydAfCQoSEFWRV9TSUdTRVRfVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0lORk9fVCcnQHwkKEhBVkVfU0lHSU5GT19UKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHQUNUSU9OJydAfCQoSEFWRV9TSUdBQ1RJT04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTicnQHwkKEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCcnQHwkKEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdIQU5ETEVSX1QnJ0B8JChIQVZFX1NJR0hBTkRMRVJfVCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BUSFJFQURfU0lHTUFTSycnQHwkKFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorQEAgLTM2OCw4NyArNDExLDYgQEAgRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc2lncHJvY21hc2suYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sKKyAKKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuCistCistIyBCZWNhdXNlIHRoaXMgTWFrZWZpbGUgc25pcHBldCBkZWZpbmVzIGEgdmFyaWFibGUgdXNlZCBieSBvdGhlcgorLSMgZ251bGliIE1ha2VmaWxlIHNuaXBwZXRzLCBpdCBtdXN0IGJlIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQKKy0jIG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eSAnYWxsJyBkZWZpbmVkIGFib3ZlLgorLQorLV9OT1JFVFVSTl9IPSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0KKy1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsCistCistIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCistIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCistIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorLSMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKy0KKy1CVUlMVF9TT1VSQ0VTICs9IGFyZy1ub25udWxsLmgKKy0jIFRoZSBhcmctbm9ubnVsbC5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dAorLSMgb2ZmLgorLWFyZy1ub25udWxsLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLQkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorLQlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCistCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmggXAorLQkgID4gJEAtdCAmJiBcCistCW12ICRALXQgJEAKKy1NT1NUTFlDTEVBTkZJTEVTICs9IGFyZy1ub25udWxsLmggYXJnLW5vbm51bGwuaC10CistCistQVJHX05PTk5VTExfSD1hcmctbm9ubnVsbC5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGwKKy0KKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYysrZGVmcworLQorLSMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorLSMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorLSMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKy0jICdhbGwnIGRlZmluZWQgYWJvdmUuCistCistQlVJTFRfU09VUkNFUyArPSBjKytkZWZzLmgKKy0jIFRoZSBjKytkZWZzLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCistIyBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorLWMrK2RlZnMuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvX0dMX0NYWERFRlMvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmggXAorLQkgID4gJEAtdCAmJiBcCistCW12ICRALXQgJEAKKy1NT1NUTFlDTEVBTkZJTEVTICs9IGMrK2RlZnMuaCBjKytkZWZzLmgtdAorLQorLUNYWERFRlNfSD1jKytkZWZzLmgKKy0KKy1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnMKKy0KKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2UKKy0KKy1CVUlMVF9TT1VSQ0VTICs9IHdhcm4tb24tdXNlLmgKKy0jIFRoZSB3YXJuLW9uLXVzZS5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dAorLSMgb2ZmLgorLXdhcm4tb24tdXNlLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorLQkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorLQlzZWQgLW4gLWUgJy9eLmlmbmRlZi8sJCRwJyBcCistCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggXAorLQkgID4gJEAtdCAmJiBcCistCW12ICRALXQgJEAKKy1NT1NUTFlDTEVBTkZJTEVTICs9IHdhcm4tb24tdXNlLmggd2Fybi1vbi11c2UuaC10CistCistV0FSTl9PTl9VU0VfSD13YXJuLW9uLXVzZS5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2UKKy0KKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0YXQKKyAKKyAKK0BAIC00OTEsOCArNDUzLDcgQEAgaWYgR0xfR0VORVJBVEVfU1REREVGX0gKKyBzdGRkZWYuaDogc3RkZGVmLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NURERFRl9IJydAfCQoTkVYVF9TVERERUZfSCl8ZycgXAorQEAgLTUyMSw4ICs0ODIsNyBAQCBpZiBHTF9HRU5FUkFURV9TVERJTlRfSAorIHN0ZGludC5oOiBzdGRpbnQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzL0AnJ0hBVkVfU1RESU5UX0gnJ0AvJChIQVZFX1NURElOVF9IKS9nJyBcCisrCSAgc2VkIC1lICdzL0AnJ0hBVkVfU1RESU5UX0gnJ0AvJChIQVZFX1NURElOVF9IKS9nJyBcCisgCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCitAQCAtNTcwLDYzICs1MzAsNjIgQEAgQlVJTFRfU09VUkNFUyArPSBzdGRpby5oCisgc3RkaW8uaDogc3RkaW8uaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERJT19IJydAfCQoTkVYVF9TVERJT19IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EUFJJTlRGJydALyQoR05VTElCX0RQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDTE9TRScnQC8kKEdOVUxJQl9GQ0xPU0UpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGTFVTSCcnQC8kKEdOVUxJQl9GRkxVU0gpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZHRVRDJydALyQoR05VTElCX0ZHRVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUUycnQC8kKEdOVUxJQl9GR0VUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRk9QRU4nJ0AvJChHTlVMSUJfRk9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQUklOVEYnJ0AvJChHTlVMSUJfRlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9GUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVSR0UnJ0AvJChHTlVMSUJfRlBVUkdFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVUQycnQC8kKEdOVUxJQl9GUFVUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVFMnJ0AvJChHTlVMSUJfRlBVVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRUFEJydALyQoR05VTElCX0ZSRUFEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVPUEVOJydALyQoR05VTElCX0ZSRU9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTQ0FORicnQC8kKEdOVUxJQl9GU0NBTkYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTRUVLJydALyQoR05VTElCX0ZTRUVLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0VFS08nJ0AvJChHTlVMSUJfRlNFRUtPKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVEVMTCcnQC8kKEdOVUxJQl9GVEVMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTExPJydALyQoR05VTElCX0ZURUxMTykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRldSSVRFJydALyQoR05VTElCX0ZXUklURSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQycnQC8kKEdOVUxJQl9HRVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDSEFSJydALyQoR05VTElCX0dFVENIQVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERFTElNJydALyQoR05VTElCX0dFVERFTElNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMSU5FJydALyQoR05VTElCX0dFVExJTkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFMnJ0AvJChHTlVMSUJfR0VUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfT0JTVEFDS19QUklOVEYnJ0AvJChHTlVMSUJfT0JTVEFDS19QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QRVJST1InJ0AvJChHTlVMSUJfUEVSUk9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1BFTicnQC8kKEdOVUxJQl9QT1BFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFJJTlRGJydALyQoR05VTElCX1BSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQycnQC8kKEdOVUxJQl9QVVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRDSEFSJydALyQoR05VTElCX1BVVENIQVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVFMnJ0AvJChHTlVMSUJfUFVUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVNT1ZFJydALyQoR05VTElCX1JFTU9WRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVOQU1FJydALyQoR05VTElCX1JFTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVOQU1FQVQnJ0AvJChHTlVMSUJfUkVOQU1FQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NDQU5GJydALyQoR05VTElCX1NDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TTlBSSU5URicnQC8kKEdOVUxJQl9TTlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9TUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HJydALyQoR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NURElPX0hfU0lHUElQRScnQC8kKEdOVUxJQl9TVERJT19IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RNUEZJTEUnJ0AvJChHTlVMSUJfVE1QRklMRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkFTUFJJTlRGJydALyQoR05VTElCX1ZBU1BSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkRQUklOVEYnJ0AvJChHTlVMSUJfVkRQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGUFJJTlRGJydALyQoR05VTElCX1ZGUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WRlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZTQ0FORicnQC8kKEdOVUxJQl9WRlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU0NBTkYnJ0AvJChHTlVMSUJfVlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGJydALyQoR05VTElCX1ZQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNOUFJJTlRGJydALyQoR05VTElCX1ZTTlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVlNQUklOVEZfUE9TSVgpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0RQUklOVEYnJ0B8JChHTlVMSUJfRFBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNMT1NFJydAfCQoR05VTElCX0ZDTE9TRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkZMVVNIJydAfCQoR05VTElCX0ZGTFVTSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkdFVEMnJ0B8JChHTlVMSUJfRkdFVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZHRVRTJydAfCQoR05VTElCX0ZHRVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GT1BFTicnQHwkKEdOVUxJQl9GT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBSSU5URicnQHwkKEdOVUxJQl9GUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX0ZQUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQVVJHRScnQHwkKEdOVUxJQl9GUFVSR0UpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQVVRDJydAfCQoR05VTElCX0ZQVVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVUUycnQHwkKEdOVUxJQl9GUFVUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlJFQUQnJ0B8JChHTlVMSUJfRlJFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZSRU9QRU4nJ0B8JChHTlVMSUJfRlJFT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNDQU5GJydAfCQoR05VTElCX0ZTQ0FORil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNFRUsnJ0B8JChHTlVMSUJfRlNFRUspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTRUVLTycnQHwkKEdOVUxJQl9GU0VFS08pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZURUxMJydAfCQoR05VTElCX0ZURUxMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVEVMTE8nJ0B8JChHTlVMSUJfRlRFTExPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GV1JJVEUnJ0B8JChHTlVMSUJfRldSSVRFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDJydAfCQoR05VTElCX0dFVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVENIQVInJ0B8JChHTlVMSUJfR0VUQ0hBUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUREVMSU0nJ0B8JChHTlVMSUJfR0VUREVMSU0pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExJTkUnJ0B8JChHTlVMSUJfR0VUTElORSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUUycnQHwkKEdOVUxJQl9HRVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URicnQHwkKEdOVUxJQl9PQlNUQUNLX1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BFUlJPUicnQHwkKEdOVUxJQl9QRVJST1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BPUEVOJydAfCQoR05VTElCX1BPUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QUklOVEYnJ0B8JChHTlVMSUJfUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRDJydAfCQoR05VTElCX1BVVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVENIQVInJ0B8JChHTlVMSUJfUFVUQ0hBUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUUycnQHwkKEdOVUxJQl9QVVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRU1PVkUnJ0B8JChHTlVMSUJfUkVNT1ZFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRU5BTUUnJ0B8JChHTlVMSUJfUkVOQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRU5BTUVBVCcnQHwkKEdOVUxJQl9SRU5BTUVBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0NBTkYnJ0B8JChHTlVMSUJfU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NOUFJJTlRGJydAfCQoR05VTElCX1NOUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1NQUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcnJ0B8JChHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RESU9fSF9TSUdQSVBFJydAfCQoR05VTElCX1NURElPX0hfU0lHUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVE1QRklMRScnQHwkKEdOVUxJQl9UTVBGSUxFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WQVNQUklOVEYnJ0B8JChHTlVMSUJfVkFTUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRFBSSU5URicnQHwkKEdOVUxJQl9WRFBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZQUklOVEYnJ0B8JChHTlVMSUJfVkZQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1ZGUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlNDQU5GJydAfCQoR05VTElCX1ZGU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZTQ0FORicnQHwkKEdOVUxJQl9WU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZQUklOVEYnJ0B8JChHTlVMSUJfVlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU05QUklOVEYnJ0B8JChHTlVMSUJfVlNOUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WU1BSSU5URl9QT1NJWCl8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS9zdGRpby5pbi5oIHwgXAorIAkgIHNlZCAtZSAnc3xAJydIQVZFX0RFQ0xfRlBVUkdFJydAfCQoSEFWRV9ERUNMX0ZQVVJHRSl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRlNFRUtPJydAfCQoSEFWRV9ERUNMX0ZTRUVLTyl8ZycgXAorQEAgLTY5MSw0MyArNjUwLDQxIEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RkbGliLmgKKyAKKyAjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGxpYi5oPiB3aGVuIHRoZSBzeXN0ZW0KKyAjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KKy1zdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpIFwKKy0gICQoX05PUkVUVVJOX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorK3N0ZGxpYi5oOiBzdGRsaWIuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERMSUJfSCcnQHwkKE5FWFRfU1RETElCX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX19FWElUJydALyQoR05VTElCX19FWElUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9BVE9MTCcnQC8kKEdOVUxJQl9BVE9MTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0FMTE9DX1BPU0lYJydALyQoR05VTElCX0NBTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQC8kKEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0FEQVZHJydALyQoR05VTElCX0dFVExPQURBVkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFNVQk9QVCcnQC8kKEdOVUxJQl9HRVRTVUJPUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dSQU5UUFQnJ0AvJChHTlVMSUJfR1JBTlRQVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUFMTE9DX1BPU0lYJydALyQoR05VTElCX01BTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJUT1dDJydALyQoR05VTElCX01CVE9XQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtEVEVNUCcnQC8kKEdOVUxJQl9NS0RURU1QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS09TVEVNUCcnQC8kKEdOVUxJQl9NS09TVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtPU1RFTVBTJydALyQoR05VTElCX01LT1NURU1QUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUCcnQC8kKEdOVUxJQl9NS1NURU1QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1NURU1QUycnQC8kKEdOVUxJQl9NS1NURU1QUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFRTTkFNRScnQC8kKEdOVUxJQl9QVFNOQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRFTlYnJ0AvJChHTlVMSUJfUFVURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQU5ET01fUicnQC8kKEdOVUxJQl9SQU5ET01fUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9SRUFMTE9DX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFMUEFUSCcnQC8kKEdOVUxJQl9SRUFMUEFUSCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUlBNQVRDSCcnQC8kKEdOVUxJQl9SUE1BVENIKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TRVRFTlYnJ0AvJChHTlVMSUJfU0VURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0QnJ0AvJChHTlVMSUJfU1RSVE9EKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0xMJydALyQoR05VTElCX1NUUlRPTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPVUxMJydALyQoR05VTElCX1NUUlRPVUxMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWVNURU1fUE9TSVgnJ0AvJChHTlVMSUJfU1lTVEVNX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxPQ0tQVCcnQC8kKEdOVUxJQl9VTkxPQ0tQVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5TRVRFTlYnJ0AvJChHTlVMSUJfVU5TRVRFTlYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1dDVE9NQicnQC8kKEdOVUxJQl9XQ1RPTUIpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX19FWElUJydAfCQoR05VTElCX19FWElUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9BVE9MTCcnQHwkKEdOVUxJQl9BVE9MTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0FMTE9DX1BPU0lYJydAfCQoR05VTElCX0NBTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQHwkKEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMT0FEQVZHJydAfCQoR05VTElCX0dFVExPQURBVkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFNVQk9QVCcnQHwkKEdOVUxJQl9HRVRTVUJPUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dSQU5UUFQnJ0B8JChHTlVMSUJfR1JBTlRQVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUFMTE9DX1BPU0lYJydAfCQoR05VTElCX01BTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJUT1dDJydAfCQoR05VTElCX01CVE9XQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtEVEVNUCcnQHwkKEdOVUxJQl9NS0RURU1QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS09TVEVNUCcnQHwkKEdOVUxJQl9NS09TVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtPU1RFTVBTJydAfCQoR05VTElCX01LT1NURU1QUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtTVEVNUCcnQHwkKEdOVUxJQl9NS1NURU1QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS1NURU1QUycnQHwkKEdOVUxJQl9NS1NURU1QUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFRTTkFNRScnQHwkKEdOVUxJQl9QVFNOQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRFTlYnJ0B8JChHTlVMSUJfUFVURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SQU5ET01fUicnQHwkKEdOVUxJQl9SQU5ET01fUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9SRUFMTE9DX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFMUEFUSCcnQHwkKEdOVUxJQl9SRUFMUEFUSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUlBNQVRDSCcnQHwkKEdOVUxJQl9SUE1BVENIKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TRVRFTlYnJ0B8JChHTlVMSUJfU0VURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT0QnJ0B8JChHTlVMSUJfU1RSVE9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT0xMJydAfCQoR05VTElCX1NUUlRPTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPVUxMJydAfCQoR05VTElCX1NUUlRPVUxMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWVNURU1fUE9TSVgnJ0B8JChHTlVMSUJfU1lTVEVNX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxPQ0tQVCcnQHwkKEdOVUxJQl9VTkxPQ0tQVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5TRVRFTlYnJ0B8JChHTlVMSUJfVU5TRVRFTlYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1dDVE9NQicnQHwkKEdOVUxJQl9XQ1RPTUIpfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RkbGliLmluLmggfCBcCisgCSAgc2VkIC1lICdzfEAnJ0hBVkVfX0VYSVQnJ0B8JChIQVZFX19FWElUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfQVRPTEwnJ0B8JChIQVZFX0FUT0xMKXxnJyBcCitAQCAtNzY2LDcgKzcyMyw2IEBAIHN0ZGxpYi5oOiBzdGRsaWIuaW4uaCAkKHRvcF9idWlsZGRpcikvY28KKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VTlNFVEVOVicnQHwkKFJFUExBQ0VfVU5TRVRFTlYpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1RPTUInJ0B8JChSRVBMQUNFX1dDVE9NQil8ZycgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKy0JICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9Ob3JldHVybi9yICQoX05PUkVUVVJOX0gpJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorIAl9ID4gJEAtdCAmJiBcCitAQCAtNzkzLDE1ICs3NDksNiBAQCBFWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzdHJlcnJvci5jCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvcgorIAorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGUKKy0KKy0KKy1FWFRSQV9ESVNUICs9IHN0cmVycm9yLW92ZXJyaWRlLmMgc3RyZXJyb3Itb3ZlcnJpZGUuaAorLQorLUVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHN0cmVycm9yLW92ZXJyaWRlLmMKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlCistCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJpbmcKKyAKKyBCVUlMVF9TT1VSQ0VTICs9IHN0cmluZy5oCitAQCAtODExLDUyICs3NTgsNDcgQEAgQlVJTFRfU09VUkNFUyArPSBzdHJpbmcuaAorIHN0cmluZy5oOiBzdHJpbmcuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVFJJTkdfSCcnQHwkKE5FWFRfU1RSSU5HX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGU0wnJ0AvJChHTlVMSUJfRkZTTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTEwnJ0AvJChHTlVMSUJfRkZTTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0xFTicnQC8kKEdOVUxJQl9NQlNMRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU05MRU4nJ0AvJChHTlVMSUJfTUJTTkxFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0hSJydALyQoR05VTElCX01CU0NIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUkNIUicnQC8kKEdOVUxJQl9NQlNSQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTVFInJ0AvJChHTlVMSUJfTUJTU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDQVNFQ01QJydALyQoR05VTElCX01CU0NBU0VDTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU05DQVNFQ01QJydALyQoR05VTElCX01CU05DQVNFQ01QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNQQ0FTRUNNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRVNUUicnQC8kKEdOVUxJQl9NQlNDQVNFU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDU1BOJydALyQoR05VTElCX01CU0NTUE4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1BCUksnJ0AvJChHTlVMSUJfTUJTUEJSSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1BOJydALyQoR05VTElCX01CU1NQTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU0VQJydALyQoR05VTElCX01CU1NFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTVE9LX1InJ0AvJChHTlVMSUJfTUJTVE9LX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTUNIUicnQC8kKEdOVUxJQl9NRU1DSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTU1FTScnQC8kKEdOVUxJQl9NRU1NRU0pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTVBDUFknJ0AvJChHTlVMSUJfTUVNUENQWSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNUkNIUicnQC8kKEdOVUxJQl9NRU1SQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQVdNRU1DSFInJ0AvJChHTlVMSUJfUkFXTUVNQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBDUFknJ0AvJChHTlVMSUJfU1RQQ1BZKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBOQ1BZJydALyQoR05VTElCX1NUUE5DUFkpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkNIUk5VTCcnQC8kKEdOVUxJQl9TVFJDSFJOVUwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkRVUCcnQC8kKEdOVUxJQl9TVFJEVVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5DQVQnJ0AvJChHTlVMSUJfU1RSTkNBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkRVUCcnQC8kKEdOVUxJQl9TVFJORFVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJOTEVOJydALyQoR05VTElCX1NUUk5MRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBCUksnJ0AvJChHTlVMSUJfU1RSUEJSSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU0VQJydALyQoR05VTElCX1NUUlNFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU1RSJydALyQoR05VTElCX1NUUlNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0FTRVNUUicnQC8kKEdOVUxJQl9TVFJDQVNFU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0tfUicnQC8kKEdOVUxJQl9TVFJUT0tfUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRVJST1InJ0AvJChHTlVMSUJfU1RSRVJST1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SX1InJ0AvJChHTlVMSUJfU1RSRVJST1JfUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU0lHTkFMJydALyQoR05VTElCX1NUUlNJR05BTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVkVSU0NNUCcnQC8kKEdOVUxJQl9TVFJWRVJTQ01QKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNMRU4nJ0B8JChHTlVMSUJfTUJTTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNOTEVOJydAfCQoR05VTElCX01CU05MRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NIUicnQHwkKEdOVUxJQl9NQlNDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1JDSFInJ0B8JChHTlVMSUJfTUJTUkNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU1RSJydAfCQoR05VTElCX01CU1NUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNDQVNFQ01QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNOQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNOQ0FTRUNNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUENBU0VDTVAnJ0B8JChHTlVMSUJfTUJTUENBU0VDTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NBU0VTVFInJ0B8JChHTlVMSUJfTUJTQ0FTRVNUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ1NQTicnQHwkKEdOVUxJQl9NQlNDU1BOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNQQlJLJydAfCQoR05VTElCX01CU1BCUkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NQTicnQHwkKEdOVUxJQl9NQlNTUE4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NFUCcnQHwkKEdOVUxJQl9NQlNTRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1RPS19SJydAfCQoR05VTElCX01CU1RPS19SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1DSFInJ0B8JChHTlVMSUJfTUVNQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1NRU0nJ0B8JChHTlVMSUJfTUVNTUVNKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1QQ1BZJydAfCQoR05VTElCX01FTVBDUFkpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTVJDSFInJ0B8JChHTlVMSUJfTUVNUkNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkFXTUVNQ0hSJydAfCQoR05VTElCX1JBV01FTUNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RQQ1BZJydAfCQoR05VTElCX1NUUENQWSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RQTkNQWScnQHwkKEdOVUxJQl9TVFBOQ1BZKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDSFJOVUwnJ0B8JChHTlVMSUJfU1RSQ0hSTlVMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJEVVAnJ0B8JChHTlVMSUJfU1RSRFVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJOQ0FUJydAfCQoR05VTElCX1NUUk5DQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5EVVAnJ0B8JChHTlVMSUJfU1RSTkRVUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkxFTicnQHwkKEdOVUxJQl9TVFJOTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJQQlJLJydAfCQoR05VTElCX1NUUlBCUkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNFUCcnQHwkKEdOVUxJQl9TVFJTRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNUUicnQHwkKEdOVUxJQl9TVFJTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkNBU0VTVFInJ0B8JChHTlVMSUJfU1RSQ0FTRVNUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9LX1InJ0B8JChHTlVMSUJfU1RSVE9LX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkVSUk9SJydAfCQoR05VTElCX1NUUkVSUk9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJFUlJPUl9SJydAfCQoR05VTElCX1NUUkVSUk9SX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNJR05BTCcnQHwkKEdOVUxJQl9TVFJTSUdOQUwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlZFUlNDTVAnJ0B8JChHTlVMSUJfU1RSVkVSU0NNUCl8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS9zdHJpbmcuaW4uaCB8IFwKKy0JICBzZWQgLWUgJ3N8QCcnSEFWRV9GRlNMJydAfCQoSEFWRV9GRlNMKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfRkZTTEwnJ0B8JChIQVZFX0ZGU0xMKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJTTEVOJydAfCQoSEFWRV9NQlNMRU4pfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01CU0xFTil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX01FTUNIUicnQHwkKEhBVkVfTUVNQ0hSKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9NRU1NRU0nJ0B8JChIQVZFX0RFQ0xfTUVNTUVNKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNUENQWScnQHwkKEhBVkVfTUVNUENQWSl8ZycgXAorQEAgLTkxMiwyMyArODU0LDIyIEBAIHN5cy9zdGF0Lmg6IHN5c19zdGF0LmluLmggJCh0b3BfYnVpbGRkaXIKKyAJJChBTV9WX2F0KSQoTUtESVJfUCkgc3lzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1lTX1NUQVRfSCcnQHwkKE5FWFRfU1lTX1NUQVRfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNITU9EQVQnJ0AvJChHTlVMSUJfRkNITU9EQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTVEFUQVQnJ0AvJChHTlVMSUJfRlNUQVRBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlVUSU1FTlMnJ0AvJChHTlVMSUJfRlVUSU1FTlMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xDSE1PRCcnQC8kKEdOVUxJQl9MQ0hNT0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xTVEFUJydALyQoR05VTElCX0xTVEFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0RJUkFUJydALyQoR05VTElCX01LRElSQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRklGTycnQC8kKEdOVUxJQl9NS0ZJRk8pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRklGT0FUJydALyQoR05VTElCX01LRklGT0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS05PRCcnQC8kKEdOVUxJQl9NS05PRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0RBVCcnQC8kKEdOVUxJQl9NS05PREFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVEFUJydALyQoR05VTElCX1NUQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VUSU1FTlNBVCcnQC8kKEdOVUxJQl9VVElNRU5TQVQpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSE1PREFUJydAfCQoR05VTElCX0ZDSE1PREFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU1RBVEFUJydAfCQoR05VTElCX0ZTVEFUQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZVVElNRU5TJydAfCQoR05VTElCX0ZVVElNRU5TKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MQ0hNT0QnJ0B8JChHTlVMSUJfTENITU9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MU1RBVCcnQHwkKEdOVUxJQl9MU1RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtESVJBVCcnQHwkKEdOVUxJQl9NS0RJUkFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0ZJRk8nJ0B8JChHTlVMSUJfTUtGSUZPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0ZJRk9BVCcnQHwkKEdOVUxJQl9NS0ZJRk9BVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtOT0QnJ0B8JChHTlVMSUJfTUtOT0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LTk9EQVQnJ0B8JChHTlVMSUJfTUtOT0RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RBVCcnQHwkKEdOVUxJQl9TVEFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VVElNRU5TQVQnJ0B8JChHTlVMSUJfVVRJTUVOU0FUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNITU9EQVQnJ0B8JChIQVZFX0ZDSE1PREFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRlNUQVRBVCcnQHwkKEhBVkVfRlNUQVRBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZVVElNRU5TJydAfCQoSEFWRV9GVVRJTUVOUyl8ZycgXAorQEAgLTk3MSwxNiArOTEyLDE1IEBAIEJVSUxUX1NPVVJDRVMgKz0gdGltZS5oCisgdGltZS5oOiB0aW1lLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfVElNRV9IJydAfCQoTkVYVF9USU1FX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LVElNRScnQC8kKEdOVUxJQl9NS1RJTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX05BTk9TTEVFUCcnQC8kKEdOVUxJQl9OQU5PU0xFRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBUSU1FJydALyQoR05VTElCX1NUUlBUSU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9USU1FR00nJ0AvJChHTlVMSUJfVElNRUdNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9USU1FX1InJ0AvJChHTlVMSUJfVElNRV9SKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS1RJTUUnJ0B8JChHTlVMSUJfTUtUSU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9OQU5PU0xFRVAnJ0B8JChHTlVMSUJfTkFOT1NMRUVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJQVElNRScnQHwkKEdOVUxJQl9TVFJQVElNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVElNRUdNJydAfCQoR05VTElCX1RJTUVHTSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVElNRV9SJydAfCQoR05VTElCX1RJTUVfUil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9DQUxUSU1FX1InJ0B8JChIQVZFX0RFQ0xfTE9DQUxUSU1FX1IpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9OQU5PU0xFRVAnJ0B8JChIQVZFX05BTk9TTEVFUCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NUUlBUSU1FJydAfCQoSEFWRV9TVFJQVElNRSl8ZycgXAorQEAgLTEwMTMsNTYgKzk1Myw1NSBAQCBCVUlMVF9TT1VSQ0VTICs9IHVuaXN0ZC5oCisgdW5pc3RkLmg6IHVuaXN0ZC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX1VOSVNURF9IJydAfCQoSEFWRV9VTklTVERfSCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydIQVZFX1VOSVNURF9IJydAfCQoSEFWRV9VTklTVERfSCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1VOSVNURF9IJydAfCQoTkVYVF9VTklTVERfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0hPV04nJ0AvJChHTlVMSUJfQ0hPV04pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NMT1NFJydALyQoR05VTElCX0NMT1NFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAyJydALyQoR05VTElCX0RVUDIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0RVUDMnJ0AvJChHTlVMSUJfRFVQMykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRU5WSVJPTicnQC8kKEdOVUxJQl9FTlZJUk9OKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FVUlEQUNDRVNTJydALyQoR05VTElCX0VVSURBQ0NFU1MpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZBQ0NFU1NBVCcnQC8kKEdOVUxJQl9GQUNDRVNTQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSERJUicnQC8kKEdOVUxJQl9GQ0hESVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE9XTkFUJydALyQoR05VTElCX0ZDSE9XTkFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1lOQycnQC8kKEdOVUxJQl9GU1lOQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRSVU5DQVRFJydALyQoR05VTElCX0ZUUlVOQ0FURSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQ1dEJydALyQoR05VTElCX0dFVENXRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VURE9NQUlOTkFNRScnQC8kKEdOVUxJQl9HRVRET01BSU5OQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVREVEFCTEVTSVpFJydALyQoR05VTElCX0dFVERUQUJMRVNJWkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEdST1VQUycnQC8kKEdOVUxJQl9HRVRHUk9VUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEhPU1ROQU1FJydALyQoR05VTElCX0dFVEhPU1ROQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTicnQC8kKEdOVUxJQl9HRVRMT0dJTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9HSU5fUicnQC8kKEdOVUxJQl9HRVRMT0dJTl9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRQQUdFU0laRScnQC8kKEdOVUxJQl9HRVRQQUdFU0laRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUVVNFUlNIRUxMJydALyQoR05VTElCX0dFVFVTRVJTSEVMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR1JPVVBfTUVNQkVSJydALyQoR05VTElCX0dST1VQX01FTUJFUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTENIT1dOJydALyQoR05VTElCX0xDSE9XTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTElOSycnQC8kKEdOVUxJQl9MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MSU5LQVQnJ0AvJChHTlVMSUJfTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU0VFSycnQC8kKEdOVUxJQl9MU0VFSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRScnQC8kKEdOVUxJQl9QSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QSVBFMicnQC8kKEdOVUxJQl9QSVBFMikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFJFQUQnJ0AvJChHTlVMSUJfUFJFQUQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BXUklURScnQC8kKEdOVUxJQl9QV1JJVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUQnJ0AvJChHTlVMSUJfUkVBRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTksnJ0AvJChHTlVMSUJfUkVBRExJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQURMSU5LQVQnJ0AvJChHTlVMSUJfUkVBRExJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUk1ESVInJ0AvJChHTlVMSUJfUk1ESVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NMRUVQJydALyQoR05VTElCX1NMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LJydALyQoR05VTElCX1NZTUxJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NZTUxJTktBVCcnQC8kKEdOVUxJQl9TWU1MSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RUWU5BTUVfUicnQC8kKEdOVUxJQl9UVFlOQU1FX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOSVNURF9IX0dFVE9QVCcnQC8kKEdOVUxJQl9VTklTVERfSF9HRVRPUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HJydALyQoR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9TSUdQSVBFJydALyQoR05VTElCX1VOSVNURF9IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTElOSycnQC8kKEdOVUxJQl9VTkxJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTElOS0FUJydALyQoR05VTElCX1VOTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VU0xFRVAnJ0AvJChHTlVMSUJfVVNMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XUklURScnQC8kKEdOVUxJQl9XUklURSkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0hPV04nJ0B8JChHTlVMSUJfQ0hPV04pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NMT1NFJydAfCQoR05VTElCX0NMT1NFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EVVAyJydAfCQoR05VTElCX0RVUDIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0RVUDMnJ0B8JChHTlVMSUJfRFVQMyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRU5WSVJPTicnQHwkKEdOVUxJQl9FTlZJUk9OKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9FVUlEQUNDRVNTJydAfCQoR05VTElCX0VVSURBQ0NFU1MpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZBQ0NFU1NBVCcnQHwkKEdOVUxJQl9GQUNDRVNTQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSERJUicnQHwkKEdOVUxJQl9GQ0hESVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSE9XTkFUJydAfCQoR05VTElCX0ZDSE9XTkFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU1lOQycnQHwkKEdOVUxJQl9GU1lOQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRSVU5DQVRFJydAfCQoR05VTElCX0ZUUlVOQ0FURSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQ1dEJydAfCQoR05VTElCX0dFVENXRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VURE9NQUlOTkFNRScnQHwkKEdOVUxJQl9HRVRET01BSU5OQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVREVEFCTEVTSVpFJydAfCQoR05VTElCX0dFVERUQUJMRVNJWkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVEdST1VQUycnQHwkKEdOVUxJQl9HRVRHUk9VUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVEhPU1ROQU1FJydAfCQoR05VTElCX0dFVEhPU1ROQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMT0dJTicnQHwkKEdOVUxJQl9HRVRMT0dJTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9HSU5fUicnQHwkKEdOVUxJQl9HRVRMT0dJTl9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRQQUdFU0laRScnQHwkKEdOVUxJQl9HRVRQQUdFU0laRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUVVNFUlNIRUxMJydAfCQoR05VTElCX0dFVFVTRVJTSEVMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR1JPVVBfTUVNQkVSJydAfCQoR05VTElCX0dST1VQX01FTUJFUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTENIT1dOJydAfCQoR05VTElCX0xDSE9XTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTElOSycnQHwkKEdOVUxJQl9MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MSU5LQVQnJ0B8JChHTlVMSUJfTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MU0VFSycnQHwkKEdOVUxJQl9MU0VFSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUElQRScnQHwkKEdOVUxJQl9QSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QSVBFMicnQHwkKEdOVUxJQl9QSVBFMil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJFQUQnJ0B8JChHTlVMSUJfUFJFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BXUklURScnQHwkKEdOVUxJQl9QV1JJVEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUQnJ0B8JChHTlVMSUJfUkVBRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBRExJTksnJ0B8JChHTlVMSUJfUkVBRExJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQURMSU5LQVQnJ0B8JChHTlVMSUJfUkVBRExJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUk1ESVInJ0B8JChHTlVMSUJfUk1ESVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NMRUVQJydAfCQoR05VTElCX1NMRUVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWU1MSU5LJydAfCQoR05VTElCX1NZTUxJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NZTUxJTktBVCcnQHwkKEdOVUxJQl9TWU1MSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RUWU5BTUVfUicnQHwkKEdOVUxJQl9UVFlOQU1FX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOSVNURF9IX0dFVE9QVCcnQHwkKEdOVUxJQl9VTklTVERfSF9HRVRPUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HJydAfCQoR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9TSUdQSVBFJydAfCQoR05VTElCX1VOSVNURF9IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOTElOSycnQHwkKEdOVUxJQl9VTkxJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOTElOS0FUJydAfCQoR05VTElCX1VOTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VU0xFRVAnJ0B8JChHTlVMSUJfVVNMRUVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9XUklURScnQHwkKEdOVUxJQl9XUklURSl8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS91bmlzdGQuaW4uaCB8IFwKKyAJICBzZWQgLWUgJ3N8QCcnSEFWRV9DSE9XTicnQHwkKEhBVkVfQ0hPV04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAyJydAfCQoSEFWRV9EVVAyKXxnJyBcCitAQCAtMTE5OCw2ICsxMTM3LDI1IEBAIEVYVFJBX0RJU1QgKz0gdmVyaWZ5LmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHZlcmlmeQorIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgd2Fybi1vbi11c2UKKysKKytCVUlMVF9TT1VSQ0VTICs9IHdhcm4tb24tdXNlLmgKKysjIFRoZSB3YXJuLW9uLXVzZS5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworKyMgYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorK3dhcm4tb24tdXNlLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKysJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKysJc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvd2Fybi1vbi11c2UuaCBcCisrCSAgPiAkQC10ICYmIFwKKysJbXYgJEAtdCAkQAorK01PU1RMWUNMRUFORklMRVMgKz0gd2Fybi1vbi11c2UuaCB3YXJuLW9uLXVzZS5oLXQKKysKKytXQVJOX09OX1VTRV9IPXdhcm4tb24tdXNlLmgKKysKKytFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKysKKysjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHdhcm4tb24tdXNlCisrCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSB4YWxsb2MKKyAKKyBsaWJpY3J0X2FfU09VUkNFUyArPSB4YWxsb2MuaCB4bWFsbG9jLmMgeHN0cmR1cC5jCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3BhdGhtYXguaCBsaWJpY29udi0xLjE0L3NyY2xpYi9wYXRobWF4LmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3BhdGhtYXguaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3BhdGhtYXguaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjIxODQ4NDQ1MSAtMDgwMAorQEAgLTE5LDI3ICsxOSw2IEBACisgI2lmbmRlZiBfUEFUSE1BWF9ICisgIyBkZWZpbmUgX1BBVEhNQVhfSAorIAorLS8qIFBPU0lYOjIwMDggZGVmaW5lcyBQQVRIX01BWCB0byBiZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBmaWxlbmFtZSwKKy0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTCBieXRlLgorLSAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9saW1pdHMuaC5odG1sPgorLSAgIFBBVEhfTUFYIGlzIG5vdCBkZWZpbmVkIG9uIHN5c3RlbXMgd2hpY2ggaGF2ZSBubyBsaW1pdCBvbiBmaWxlbmFtZSBsZW5ndGgsCistICAgc3VjaCBhcyBHTlUvSHVyZC4KKy0KKy0gICBUaGlzIGZpbGUgZG9lcyAqbm90KiBkZWZpbmUgUEFUSF9NQVggYWx3YXlzLiAgUHJvZ3JhbXMgdGhhdCB1c2UgdGhpcyBmaWxlCistICAgY2FuIGhhbmRsZSB0aGUgR05VL0h1cmQgY2FzZSBpbiBzZXZlcmFsIHdheXM6CistICAgICAtIEVpdGhlciB3aXRoIGEgcGFja2FnZS13aWRlIGhhbmRsaW5nLCBvciB3aXRoIGEgcGVyLWZpbGUgaGFuZGxpbmcsCistICAgICAtIEVpdGhlciB0aHJvdWdoIGEKKy0gICAgICAgICAjaWZkZWYgUEFUSF9NQVgKKy0gICAgICAgb3IgdGhyb3VnaCBhIGZhbGxiYWNrIGxpa2UKKy0gICAgICAgICAjaWZuZGVmIFBBVEhfTUFYCistICAgICAgICAgIyBkZWZpbmUgUEFUSF9NQVggODE5MgorLSAgICAgICAgICNlbmRpZgorLSAgICAgICBvciB0aHJvdWdoIGEgZmFsbGJhY2sgbGlrZQorLSAgICAgICAgICNpZm5kZWYgUEFUSF9NQVgKKy0gICAgICAgICAjIGRlZmluZSBQQVRIX01BWCBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpCistICAgICAgICAgI2VuZGlmCistICovCistCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorQEAgLTQ4LDYgKzI3LDExIEBACisgIyAgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTYKKyAjIGVuZGlmCisgCisrIyBpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIF9QQ19QQVRIX01BWCAmJiBkZWZpbmVkIEhBVkVfUEFUSENPTkYKKysjICBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCBcCisrICAgICAgICAgICAgICAgICAgICA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCisrIyBlbmRpZgorKworIC8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCisgIyBpZiBkZWZpbmVkIEhBVkVfU1lTX1BBUkFNX0ggJiYgIWRlZmluZWQgUEFUSF9NQVggJiYgIWRlZmluZWQgTUFYUEFUSExFTgorICMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorQEAgLTU3LDEzICs0MSw4IEBACisgIyAgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyAjIGVuZGlmCisgCistIyBpZmRlZiBfX2hwdXgKKy0vKiBPbiBIUC1VWCwgUEFUSF9NQVggZGVzaWduYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBmaWxlbmFtZSwKKy0gICAqbm90KiBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTCBieXRlLCBhbmQgaXMgc2V0IHRvIDEwMjMuCistICAgQWRkaXRpb25hbGx5LCB3aGVuIF9YT1BFTl9TT1VSQ0UgaXMgZGVmaW5lZCB0byA1MDAgb3IgbW9yZSwgUEFUSF9NQVggaXMKKy0gICBub3QgZGVmaW5lZCBhdCBhbGwgYW55IG1vcmUuICAqLworLSMgIHVuZGVmIFBBVEhfTUFYCistIyAgZGVmaW5lIFBBVEhfTUFYIDEwMjQKKysjIGlmbmRlZiBQQVRIX01BWAorKyMgIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKyAjIGVuZGlmCisgCisgI2VuZGlmIC8qIF9QQVRITUFYX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcmVsb2N3cmFwcGVyLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvcmVsb2N3cmFwcGVyLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3JlbG9jd3JhcHBlci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvcmVsb2N3cmFwcGVyLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4yODI0ODQ0NTUgLTA4MDAKK0BAIC0yOSw2ICsyOSw3IEBACisgICAgIC0+IHJlbG9jYXRhYmxlCisgICAgIC0+IHNldGVudgorICAgICAgICAtPiBtYWxsb2NhCisrICAgIC0+IHN0cmVycm9yCisgICAgIC0+IGMtY3R5cGUKKyAKKyAgICBNYWNyb3MgdGhhdCBuZWVkIHRvIGJlIHNldCB3aGlsZSBjb21waWxpbmcgdGhpcyBmaWxlOgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zYWZlLXJlYWQuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zYWZlLXJlYWQuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2FmZS1yZWFkLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zYWZlLXJlYWQuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjI5ODQ4NDQ1NSAtMDgwMAorQEAgLTE0LDE5ICsxNCw2IEBACisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCistLyogU29tZSBzeXN0ZW0gY2FsbHMgbWF5IGJlIGludGVycnVwdGVkIGFuZCBmYWlsIHdpdGggZXJybm8gPSBFSU5UUiBpbiB0aGUKKy0gICBmb2xsb3dpbmcgc2l0dWF0aW9uczoKKy0gICAgIC0gVGhlIHByb2Nlc3MgaXMgc3RvcHBlZCBhbmQgcmVzdGFydGVkIChzaWduYWwgU0lHU1RPUCBhbmQgU0lHQ09OVCwgdXNlcgorLSAgICAgICB0eXBlcyBDdHJsLVopIG9uIHNvbWUgcGxhdGZvcm1zOiBNYWNPUyBYLgorLSAgICAgLSBUaGUgcHJvY2VzcyByZWNlaXZlcyBhIHNpZ25hbCBmb3Igd2hpY2ggYSBzaWduYWwgaGFuZGxlciB3YXMgaW5zdGFsbGVkCistICAgICAgIHdpdGggc2lnYWN0aW9uKCkgd2l0aCBhbiBzYV9mbGFncyBmaWVsZCB0aGF0IGRvZXMgbm90IGNvbnRhaW4KKy0gICAgICAgU0FfUkVTVEFSVC4KKy0gICAgIC0gVGhlIHByb2Nlc3MgcmVjZWl2ZXMgYSBzaWduYWwgZm9yIHdoaWNoIGEgc2lnbmFsIGhhbmRsZXIgd2FzIGluc3RhbGxlZAorLSAgICAgICB3aXRoIHNpZ25hbCgpIGFuZCBmb3Igd2hpY2ggbm8gY2FsbCB0byBzaWdpbnRlcnJ1cHQoc2lnLDApIHdhcyBkb25lLAorLSAgICAgICBvbiBzb21lIHBsYXRmb3JtczogQUlYLCBIUC1VWCwgSVJJWCwgT1NGLzEsIFNvbGFyaXMuCistCistICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCByZWFkKCkgdGhhdCBoYW5kbGVzIEVJTlRSLiAgKi8KKy0KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgI2lmZGVmIF9fY3BsdXNwbHVzCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NpZ25hbC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3NpZ25hbC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zaWduYWwuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3NpZ25hbC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzE0NDg0NDU2IC0wODAwCitAQCAtMjAsNDkgKzIwLDIxIEBACisgI2VuZGlmCisgQFBSQUdNQV9DT0xVTU5TQAorIAorLSNpZiBkZWZpbmVkIF9fbmVlZF9zaWdfYXRvbWljX3QgfHwgZGVmaW5lZCBfX25lZWRfc2lnc2V0X3QgfHwgZGVmaW5lZCBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0ggfHwgKGRlZmluZWQgX1NJR05BTF9IICYmICFkZWZpbmVkIF9fU0laRU9GX1BUSFJFQURfTVVURVhfVCkKKy0vKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbjoKKy0gICAtIEluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuCistICAgLSBPbiBnbGliYyBzeXN0ZW1zIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKy0gICAgIDxzaWduYWwuaD4gLT4gPHVjb250ZXh0Lmg+IC0+IDxzaWduYWwuaD4uCistICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlIHdlIGNhbm5vdAorLSAgICAgcHJvdmlkZSB0aGUgQysrIGFsaWFzZXMuCistICAgLSBPbiBnbGliYyBzeXN0ZW1zIHdpdGggR0NDIDQuMyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCistICAgICA8Y3NpZ25hbD4gLT4gPC91c3IvaW5jbHVkZS9zaWduYWwuaD4gLT4gPHN5cy91Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorLSAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlCistICAgICB3ZSBjYW5ub3QgcHJvdmlkZSB0aGUgQysrIGFsaWFzZXMuICAqLworKyNpZiBkZWZpbmVkIF9fbmVlZF9zaWdfYXRvbWljX3QgfHwgZGVmaW5lZCBfX25lZWRfc2lnc2V0X3QKKysvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbiBpbnNpZGUgZ2xpYmMgaGVhZGVyIGZpbGVzLiAgKi8KKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1NJR05BTF9IQAorIAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0KKy0jZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSAorLQorLS8qIERlZmluZSBwaWRfdCwgdWlkX3QuCistICAgQWxzbywgbWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uCistICAgT24gU29sYXJpcyAxMCwgPHNpZ25hbC5oPiBpbmNsdWRlcyA8c3lzL3R5cGVzLmg+LCB3aGljaCBldmVudHVhbGx5IGluY2x1ZGVzCistICAgdXM7IHNvIGluY2x1ZGUgPHN5cy90eXBlcy5oPiBub3csIGJlZm9yZSB0aGUgc2Vjb25kIGluY2x1c2lvbiBndWFyZC4gICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpZm5kZWYgX0dMX1NJR05BTF9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9TSUdOQUxfSEAKKyAKKy0jdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9ICistCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAorLQorLS8qIE1hY09TIFggMTAuMywgRnJlZUJTRCA2LjQsIE9wZW5CU0QgMy44LCBPU0YvMSA0LjAsIFNvbGFyaXMgMi42IGRlY2xhcmUKKy0gICBwdGhyZWFkX3NpZ21hc2sgaW4gPHB0aHJlYWQuaD4sIG5vdCBpbiA8c2lnbmFsLmg+LgorLSAgIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuKi8KKy0jaWYgKEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCistICAgICYmICgoZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXykgfHwgZGVmaW5lZCBfX0ZyZWVCU0RfXyB8fCBkZWZpbmVkIF9fT3BlbkJTRF9fIHx8IGRlZmluZWQgX19vc2ZfXyB8fCBkZWZpbmVkIF9fc3VuKSBcCistICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKy0jIGluY2x1ZGUgPHB0aHJlYWQuaD4KKy0jZW5kaWYKKysjaWZuZGVmIF9HTF9TSUdOQUxfSAorKyNkZWZpbmUgX0dMX1NJR05BTF9ICisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTcwLDYgKzQyLDEwIEBACisgCisgLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyAKKysvKiBEZWZpbmUgcGlkX3QsIHVpZF90LgorKyAgIEFsc28sIG1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisgLyogT24gQUlYLCBzaWdfYXRvbWljX3QgYWxyZWFkeSBpbmNsdWRlcyB2b2xhdGlsZS4gIEM5OSByZXF1aXJlcyB0aGF0CisgICAgJ3ZvbGF0aWxlIHNpZ19hdG9taWNfdCcgaWdub3JlIHRoZSBleHRyYSBtb2RpZmllciwgYnV0IEM4OSBkaWQgbm90LgorICAgIEhlbmNlLCByZWRlZmluZSB0aGlzIHRvIGEgbm9uLXZvbGF0aWxlIHR5cGUgYXMgbmVlZGVkLiAgKi8KK0BAIC0xMjQsMzQgKzEwMCw2IEBAIHR5cGVkZWYgdm9pZCAoKnNpZ2hhbmRsZXJfdCkgKGludCk7CisgI2VuZGlmCisgCisgCistI2lmIEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQAorLSMgaWYgQFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLQAorLSMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHB0aHJlYWRfc2lnbWFzaworLSMgICBkZWZpbmUgcHRocmVhZF9zaWdtYXNrIHJwbF9wdGhyZWFkX3NpZ21hc2sKKy0jICBlbmRpZgorLV9HTF9GVU5DREVDTF9SUEwgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLV9HTF9DWFhBTElBU19SUEwgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLSMgZWxzZQorLSMgIGlmICFASEFWRV9QVEhSRUFEX1NJR01BU0tACistX0dMX0ZVTkNERUNMX1NZUyAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistIyAgZW5kaWYKKy1fR0xfQ1hYQUxJQVNfU1lTIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy0jIGVuZGlmCistX0dMX0NYWEFMSUFTV0FSTiAocHRocmVhZF9zaWdtYXNrKTsKKy0jZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistIyB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKy0jIGlmIEhBVkVfUkFXX0RFQ0xfUFRIUkVBRF9TSUdNQVNLCistX0dMX1dBUk5fT05fVVNFIChwdGhyZWFkX3NpZ21hc2ssICJwdGhyZWFkX3NpZ21hc2sgaXMgbm90IHBvcnRhYmxlIC0gIgorLSAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0aHJlYWRfc2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCisgI2lmIEBHTlVMSUJfU0lHUFJPQ01BU0tACisgIyBpZiAhQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACisgCitAQCAtNDIzLDYgKzM3MSw2IEBAIF9HTF9XQVJOX09OX1VTRSAoc2lnYWN0aW9uLCAic2lnYWN0aW9uIGkKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSCAqLworKyNlbmRpZiAvKiBfR0xfU0lHTkFMX0ggKi8KKysjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0YXQuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGF0LmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0YXQuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0YXQuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjMzMDQ4NDQ1NyAtMDgwMAorQEAgLTM4LDcgKzM4LDYgQEAgb3JpZ19zdGF0IChjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgImRvc25hbWUuaCIKKy0jaW5jbHVkZSAidmVyaWZ5LmgiCisgCisgLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgTkFNRSBpbnRvIFNULiAgV29yayBhcm91bmQgYnVncyB3aXRoCisgICAgdHJhaWxpbmcgc2xhc2hlcy4gIE1pbmd3IGhhcyBvdGhlciBidWdzIChzdWNoIGFzIHN0X2lubyBhbHdheXMKK0BAIC02NCwxMiArNjMsNiBAQCBycGxfc3RhdCAoY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQKKyAgICAgfQorICNlbmRpZiAvKiBSRVBMQUNFX0ZVTkNfU1RBVF9GSUxFICovCisgI2lmIFJFUExBQ0VfRlVOQ19TVEFUX0RJUgorLSAgLyogVGhlIG9ubHkga25vd24gc3lzdGVtcyB3aGVyZSBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIgaXMgbmVlZGVkIGFsc28KKy0gICAgIGhhdmUgYSBjb25zdGFudCBQQVRIX01BWC4gICovCistIyBpZm5kZWYgUEFUSF9NQVgKKy0jICBlcnJvciAiUGxlYXNlIHBvcnQgdGhpcyByZXBsYWNlbWVudCB0byB5b3VyIHBsYXRmb3JtIgorLSMgZW5kaWYKKy0KKyAgIGlmIChyZXN1bHQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKQorICAgICB7CisgICAgICAgLyogRHVlIHRvIG1pbmd3J3Mgb2RkaXRpZXMsIHRoZXJlIGFyZSBzb21lIGRpcmVjdG9yaWVzIChsaWtlCitAQCAtODQsNyArNzcsNiBAQCBycGxfc3RhdCAoY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQKKyAgICAgICBjaGFyIGZpeGVkX25hbWVbUEFUSF9NQVggKyAxXSA9IHswfTsKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChuYW1lKTsKKyAgICAgICBib29sIGNoZWNrX2RpciA9IGZhbHNlOworLSAgICAgIHZlcmlmeSAoUEFUSF9NQVggPD0gNDA5Nik7CisgICAgICAgaWYgKFBBVEhfTUFYIDw9IGxlbikKKyAgICAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworICAgICAgIGVsc2UgaWYgKGxlbikKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkZGVmLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkZGVmLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGRlZi5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkZGVmLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNDY0ODQ0NTggLTA4MDAKK0BAIC0zOCw5ICszOCw5IEBACisgICAgcmVtZW1iZXIgaWYgc3BlY2lhbCBpbnZvY2F0aW9uIGhhcyBldmVyIGJlZW4gdXNlZCB0byBvYnRhaW4gd2ludF90LAorICAgIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBjbGVhbiB1cCBOVUxMIHlldCBhZ2Fpbi4gICovCisgCistIyBpZiAhKGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICYmIGRlZmluZWQgX0dMX1NURERFRl9XSU5UX1QpCisrIyBpZiAhKGRlZmluZWQgX0dMX1NURERFRl9IICYmIGRlZmluZWQgX0dMX1NURERFRl9XSU5UX1QpCisgIyAgaWZkZWYgX19uZWVkX3dpbnRfdAorLSMgICB1bmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKysjICAgdW5kZWYgX0dMX1NURERFRl9ICisgIyAgIGRlZmluZSBfR0xfU1REREVGX1dJTlRfVAorICMgIGVuZGlmCisgIyAgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1REREVGX0hACitAQCAtNDksMTQgKzQ5LDE0IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jIGlmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKysjIGlmbmRlZiBfR0xfU1REREVGX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgCisgIyAgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1REREVGX0hACisgCistIyAgaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorLSMgICBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyAgaWZuZGVmIF9HTF9TVERERUZfSAorKyMgICBkZWZpbmUgX0dMX1NURERFRl9ICisgCisgLyogT24gTmV0QlNEIDUuMCwgdGhlIGRlZmluaXRpb24gb2YgTlVMTCBsYWNrcyBwcm9wZXIgcGFyZW50aGVzZXMuICAqLworICNpZiBAUkVQTEFDRV9OVUxMQAorQEAgLTgyLDYgKzgyLDYgQEAKKyAjIGRlZmluZSB3Y2hhcl90IGludAorICNlbmRpZgorIAorLSMgIGVuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAqLworLSMgZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICovCisrIyAgZW5kaWYgLyogX0dMX1NURERFRl9IICovCisrIyBlbmRpZiAvKiBfR0xfU1REREVGX0ggKi8KKyAjZW5kaWYgLyogX19uZWVkX1hYWCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpbnQuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpbnQuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW50LmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpbnQuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM1ODQ4NDQ1OCAtMDgwMAorQEAgLTIxLDcgKzIxLDcgQEAKKyAgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3N0ZGludC5oLmh0bWw+CisgICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0gKKysjaWZuZGVmIF9HTF9TVERJTlRfSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTUyLDEzICs1MiwxMyBAQAorICAgLyogT3RoZXIgc3lzdGVtcyBtYXkgaGF2ZSBhbiBpbmNvbXBsZXRlIG9yIGJ1Z2d5IDxzdGRpbnQuaD4uCisgICAgICBJbmNsdWRlIGl0IGJlZm9yZSA8aW50dHlwZXMuaD4sIHNpbmNlIGFueSAiI2luY2x1ZGUgPHN0ZGludC5oPiIKKyAgICAgIGluIDxpbnR0eXBlcy5oPiB3b3VsZCByZWluY2x1ZGUgdXMsIHNraXBwaW5nIG91ciBjb250ZW50cyBiZWNhdXNlCistICAgICBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggaXMgZGVmaW5lZC4KKysgICAgIF9HTF9TVERJTlRfSCBpcyBkZWZpbmVkLgorICAgICAgVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RESU5UX0hACisgI2VuZGlmCisgCistI2lmICEgZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggJiYgISBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0gKKysjaWYgISBkZWZpbmVkIF9HTF9TVERJTlRfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKKysjZGVmaW5lIF9HTF9TVERJTlRfSAorIAorIC8qIDxzeXMvdHlwZXMuaD4gZGVmaW5lcyBzb21lIG9mIHRoZSBzdGRpbnQuaCB0eXBlcyBhcyB3ZWxsLCBvbiBnbGliYywKKyAgICBJUklYIDYuNSwgYW5kIE9wZW5CU0QgMy44ICh2aWEgPG1hY2hpbmUvdHlwZXMuaD4pLgorQEAgLTI3MCwzNiArMjcwLDI2IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZ2xfdWludHB0cl90OworIC8qIE5vdGU6IFRoZXNlIHR5cGVzIGFyZSBjb21waWxlciBkZXBlbmRlbnQuIEl0IG1heSBiZSB1bndpc2UgdG8gdXNlIHRoZW0gaW4KKyAgICBwdWJsaWMgaGVhZGVyIGZpbGVzLiAqLworIAorLS8qIElmIHRoZSBzeXN0ZW0gZGVmaW5lcyBJTlRNQVhfTUFYLCBhc3N1bWUgdGhhdCBpbnRtYXhfdCB3b3JrcywgYW5kCistICAgc2ltaWxhcmx5IGZvciBVSU5UTUFYX01BWCBhbmQgdWludG1heF90LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aAorLSAgIGFzc3VtaW5nIG9uZSB0eXBlIHdoZXJlIGFub3RoZXIgaXMgdXNlZCBieSB0aGUgc3lzdGVtLiAgKi8KKy0KKy0jaWZuZGVmIElOVE1BWF9NQVgKKy0jIHVuZGVmIElOVE1BWF9DCistIyB1bmRlZiBpbnRtYXhfdAorLSMgaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorKyN1bmRlZiBpbnRtYXhfdAorKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisgdHlwZWRlZiBsb25nIGxvbmcgaW50IGdsX2ludG1heF90OworLSMgIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorLSMgZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKy0jICBkZWZpbmUgaW50bWF4X3QgaW50NjRfdAorLSMgZWxzZQorKyMgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CisrI2VsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCisrIyBkZWZpbmUgaW50bWF4X3QgaW50NjRfdAorKyNlbHNlCisgdHlwZWRlZiBsb25nIGludCBnbF9pbnRtYXhfdDsKKy0jICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKy0jIGVuZGlmCisrIyBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIFVJTlRNQVhfTUFYCistIyB1bmRlZiBVSU5UTUFYX0MKKy0jIHVuZGVmIHVpbnRtYXhfdAorLSMgaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKysjdW5kZWYgdWludG1heF90CisrI2lmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGdsX3VpbnRtYXhfdDsKKy0jICBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorLSMgZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCistIyAgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorLSMgZWxzZQorKyMgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKysjZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCisrIyBkZWZpbmUgdWludG1heF90IHVpbnQ2NF90CisrI2Vsc2UKKyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRtYXhfdDsKKy0jICBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorLSMgZW5kaWYKKysjIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisgI2VuZGlmCisgCisgLyogVmVyaWZ5IHRoYXQgaW50bWF4X3QgYW5kIHVpbnRtYXhfdCBoYXZlIHRoZSBzYW1lIHNpemUuICBUb28gbXVjaCBjb2RlCitAQCAtNDQxLDIzICs0MzEsMjEgQEAgdHlwZWRlZiBpbnQgX3ZlcmlmeV9pbnRtYXhfc2l6ZVtzaXplb2YgKAorIAorIC8qIDcuMTguMi41LiBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworIAorLSNpZm5kZWYgSU5UTUFYX01BWAorLSMgdW5kZWYgSU5UTUFYX01JTgorLSMgaWZkZWYgSU5UNjRfTUFYCistIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDY0X01JTgorLSMgIGRlZmluZSBJTlRNQVhfTUFYICBJTlQ2NF9NQVgKKy0jIGVsc2UKKy0jICBkZWZpbmUgSU5UTUFYX01JTiAgSU5UMzJfTUlOCistIyAgZGVmaW5lIElOVE1BWF9NQVggIElOVDMyX01BWAorLSMgZW5kaWYKKysjdW5kZWYgSU5UTUFYX01JTgorKyN1bmRlZiBJTlRNQVhfTUFYCisrI2lmZGVmIElOVDY0X01BWAorKyMgZGVmaW5lIElOVE1BWF9NSU4gIElOVDY0X01JTgorKyMgZGVmaW5lIElOVE1BWF9NQVggIElOVDY0X01BWAorKyNlbHNlCisrIyBkZWZpbmUgSU5UTUFYX01JTiAgSU5UMzJfTUlOCisrIyBkZWZpbmUgSU5UTUFYX01BWCAgSU5UMzJfTUFYCisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX01BWAorLSMgaWZkZWYgVUlOVDY0X01BWAorLSMgIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDY0X01BWAorLSMgZWxzZQorLSMgIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDMyX01BWAorLSMgZW5kaWYKKysjdW5kZWYgVUlOVE1BWF9NQVgKKysjaWZkZWYgVUlOVDY0X01BWAorKyMgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UNjRfTUFYCisrI2Vsc2UKKysjIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDMyX01BWAorICNlbmRpZgorIAorIC8qIDcuMTguMy4gTGltaXRzIG9mIG90aGVyIGludGVnZXIgdHlwZXMgKi8KK0BAIC01ODAsMjcgKzU2OCwyNSBAQCB0eXBlZGVmIGludCBfdmVyaWZ5X2ludG1heF9zaXplW3NpemVvZiAoCisgCisgLyogNy4xOC40LjIuIE1hY3JvcyBmb3IgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciBjb25zdGFudHMgKi8KKyAKKy0jaWZuZGVmIElOVE1BWF9DCistIyBpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCistIyAgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTEwKKy0jIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCistIyAgZGVmaW5lIElOVE1BWF9DKHgpICAgSU5UNjRfQyh4KQorLSMgZWxzZQorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0wKKy0jIGVuZGlmCisrI3VuZGVmIElOVE1BWF9DCisrI2lmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKysjIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCisrI2VsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICBJTlQ2NF9DKHgpCisrI2Vsc2UKKysjIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0wKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIFVJTlRNQVhfQworLSMgaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKy0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTEwKKy0jIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIFVJTlQ2NF9DKHgpCistIyBlbHNlCistIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUwKKy0jIGVuZGlmCisrI3VuZGVmIFVJTlRNQVhfQworKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUxMCisrI2VsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgVUlOVDY0X0MoeCkKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUwKKyAjZW5kaWYKKyAKKyAjZW5kaWYgLyogIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TICovCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCAqLworLSNlbmRpZiAvKiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggJiYgIWRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElOVF9IICovCisrI2VuZGlmIC8qICFkZWZpbmVkIF9HTF9TVERJTlRfSCAmJiAhZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpby5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGlvLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGlvLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpby5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzc4NDg0NDU5IC0wODAwCitAQCAtMzUsNyArMzUsNyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAorKyNpZm5kZWYgX0dMX1NURElPX0gKKyAKKyAjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisgCitAQCAtNDQsOCArNDQsOCBAQAorIAorICN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICisrI2lmbmRlZiBfR0xfU1RESU9fSAorKyNkZWZpbmUgX0dMX1NURElPX0gKKyAKKyAvKiBHZXQgdmFfbGlzdC4gIE5lZWRlZCBvbiBtYW55IHN5c3RlbXMsIGluY2x1ZGluZyBnbGliYyAyLjguICAqLworICNpbmNsdWRlIDxzdGRhcmcuaD4KK0BAIC00NjEsNiArNDYxLDI1IEBAIF9HTF9GVU5DREVDTF9TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAKKyBfR0xfQ1hYQUxJQVNfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZnNlZWtvKTsKKysjIGlmIChAUkVQTEFDRV9GU0VFS09AIHx8ICFASEFWRV9GU0VFS09AKSAmJiAhQEdOVUxJQl9GU0VFS0AKKysgICAvKiBQcm92aWRlIGFuIGZzZWVrIGZ1bmN0aW9uIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGZzZWVrby4gICovCisrICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCBmc2VlayBnZXRzIGRlZmluZWQgYXMgYSBtYWNybyBoZXJlLCB0aGUKKysgICAgICBkZXZlbG9wZXIgY2FuIHJlcXVlc3QgdGhlICdmc2VlaycgbW9kdWxlLiAgKi8KKysjICBpZiAhR05VTElCX2RlZmluZWRfZnNlZWtfZnVuY3Rpb24KKysjICAgdW5kZWYgZnNlZWsKKysjICAgZGVmaW5lIGZzZWVrIHJwbF9mc2VlaworK3N0YXRpYyBpbmxpbmUgaW50IF9HTF9BUkdfTk9OTlVMTCAoKDEpKQorK3JwbF9mc2VlayAoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQorK3sKKysjICAgaWYgQFJFUExBQ0VfRlNFRUtPQAorKyAgcmV0dXJuIHJwbF9mc2Vla28gKGZwLCBvZmZzZXQsIHdoZW5jZSk7CisrIyAgIGVsc2UKKysgIHJldHVybiBmc2Vla28gKGZwLCBvZmZzZXQsIHdoZW5jZSk7CisrIyAgIGVuZGlmCisrfQorKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfZnNlZWtfZnVuY3Rpb24gMQorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAjIGRlZmluZSBfR0xfRlNFRUtfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisgIyB1bmRlZiBmc2VlaworQEAgLTUyMCw2ICs1MzksMjUgQEAgX0dMX0ZVTkNERUNMX1NZUyAoZnRlbGxvLCBvZmZfdCwgKEZJTEUgKgorIF9HTF9DWFhBTElBU19TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkpOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNXQVJOIChmdGVsbG8pOworKyMgaWYgKEBSRVBMQUNFX0ZURUxMT0AgfHwgIUBIQVZFX0ZURUxMT0ApICYmICFAR05VTElCX0ZURUxMQAorKyAgIC8qIFByb3ZpZGUgYW4gZnRlbGwgZnVuY3Rpb24gdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggZnRlbGxvLiAgKi8KKysgICAvKiBJbiBvcmRlciB0byBhdm9pZCB0aGF0IGZ0ZWxsIGdldHMgZGVmaW5lZCBhcyBhIG1hY3JvIGhlcmUsIHRoZQorKyAgICAgIGRldmVsb3BlciBjYW4gcmVxdWVzdCB0aGUgJ2Z0ZWxsJyBtb2R1bGUuICAqLworKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9mdGVsbF9mdW5jdGlvbgorKyMgICB1bmRlZiBmdGVsbAorKyMgICBkZWZpbmUgZnRlbGwgcnBsX2Z0ZWxsCisrc3RhdGljIGlubGluZSBsb25nIF9HTF9BUkdfTk9OTlVMTCAoKDEpKQorK3JwbF9mdGVsbCAoRklMRSAqZikKKyt7CisrIyAgIGlmIEBSRVBMQUNFX0ZURUxMT0AKKysgIHJldHVybiBycGxfZnRlbGxvIChmKTsKKysjICAgZWxzZQorKyAgcmV0dXJuIGZ0ZWxsbyAoZik7CisrIyAgIGVuZGlmCisrfQorKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfZnRlbGxfZnVuY3Rpb24gMQorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAjIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisgIyB1bmRlZiBmdGVsbAorQEAgLTEzMDcsNiArMTM0NSw2IEBAIF9HTF9XQVJOX09OX1VTRSAodnNwcmludGYsICJ2c3ByaW50ZiBpcworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSCAqLworKyNlbmRpZiAvKiBfR0xfU1RESU9fSCAqLworKyNlbmRpZiAvKiBfR0xfU1RESU9fSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRsaWIuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRsaWIuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkbGliLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRsaWIuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM5MDQ4NDQ1OSAtMDgwMAorQEAgLTI4LDEzICsyOCwxMyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKysjaWZuZGVmIF9HTF9TVERMSUJfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RETElCX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAorKyNpZm5kZWYgX0dMX1NURExJQl9ICisrI2RlZmluZSBfR0xfU1RETElCX0gKKyAKKyAvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworICNpbmNsdWRlIDxzdGRkZWYuaD4KK0BAIC04OSw3ICs4OSwxMSBAQCBzdHJ1Y3QgcmFuZG9tX2RhdGEKKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorICNlbmRpZgorIAorLS8qIFRoZSBkZWZpbml0aW9uIG9mIF9Ob3JldHVybiBpcyBjb3BpZWQgaGVyZS4gICovCisrI2lmIDMgPD0gX19HTlVDX18gfHwgX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fCisrIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4KKysjZW5kaWYKKyAKKyAvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisgCitAQCAtMTE2LDcgKzEyMCw3IEBAIHN0cnVjdCByYW5kb21fZGF0YQorIC8qIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBwcm9jZXNzIHdpdGggdGhlIGdpdmVuIHJldHVybiBjb2RlLCB3aXRob3V0IHJ1bm5pbmcKKyAgICB0aGUgJ2F0ZXhpdCcgaGFuZGxlcnMuICAqLworICMgaWYgIUBIQVZFX19FWElUQAorLV9HTF9GVU5DREVDTF9TWVMgKF9FeGl0LCBfTm9yZXR1cm4gdm9pZCwgKGludCBzdGF0dXMpKTsKKytfR0xfRlVOQ0RFQ0xfU1lTIChfRXhpdCwgdm9pZCwgKGludCBzdGF0dXMpIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4pOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNfU1lTIChfRXhpdCwgdm9pZCwgKGludCBzdGF0dXMpKTsKKyBfR0xfQ1hYQUxJQVNXQVJOIChfRXhpdCk7CitAQCAtNzU3LDYgKzc2MSw2IEBAIF9HTF9DWFhBTElBU1dBUk4gKHdjdG9tYik7CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisrI2VuZGlmIC8qIF9HTF9TVERMSUJfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci5jIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci5jCTIwMTItMDEtMDggMDI6MDc6NDAuNDA2NDg0NDYxIC0wODAwCitAQCAtMTcsNTQgKzE3LDM0MCBAQAorIAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKy0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWYgUkVQTEFDRV9TVFJFUlJPUgorKworKyMgaW5jbHVkZSA8ZXJybm8uaD4KKysjIGluY2x1ZGUgPHN0ZGlvLmg+CisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKysjICBpZiBIQVZFX1dJTlNPQ0syX0gKKysjICAgaW5jbHVkZSA8d2luc29jazIuaD4KKysjICBlbmRpZgorKyMgZW5kaWYKKyAKKy0jaW5jbHVkZSAiaW50cHJvcHMuaCIKKy0jaW5jbHVkZSAic3RyZXJyb3Itb3ZlcnJpZGUuaCIKKy0jaW5jbHVkZSAidmVyaWZ5LmgiCisrIyBpbmNsdWRlICJpbnRwcm9wcy5oIgorIAorIC8qIFVzZSB0aGUgc3lzdGVtIGZ1bmN0aW9ucywgbm90IHRoZSBnbnVsaWIgb3ZlcnJpZGVzIGluIHRoaXMgZmlsZS4gICovCistI3VuZGVmIHNwcmludGYKKysjIHVuZGVmIHNwcmludGYKKysKKysjIHVuZGVmIHN0cmVycm9yCisrIyBpZiAhIEhBVkVfREVDTF9TVFJFUlJPUgorKyMgIGRlZmluZSBzdHJlcnJvcihuKSBOVUxMCisrIyBlbmRpZgorIAorIGNoYXIgKgorLXN0cmVycm9yIChpbnQgbikKKy0jdW5kZWYgc3RyZXJyb3IKKytycGxfc3RyZXJyb3IgKGludCBuKQorIHsKKy0gIHN0YXRpYyBjaGFyIGJ1ZltTVEFDS0JVRl9MRU5dOworLSAgc2l6ZV90IGxlbjsKKysgIGNoYXIgY29uc3QgKm1zZyA9IE5VTEw7CisrICAvKiBUaGVzZSBlcnJvciBtZXNzYWdlcyBhcmUgdGFrZW4gZnJvbSBnbGliYy9zeXNkZXBzL2dudS9lcnJsaXN0LmMuICAqLworKyAgc3dpdGNoIChuKQorKyAgICB7CisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZCisrICAgIGNhc2UgRVRYVEJTWToKKysgICAgICBtc2cgPSAiVGV4dCBmaWxlIGJ1c3kiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworKyAgICAvKiBFV09VTERCTE9DSyBpcyB0aGUgc2FtZSBhcyBFQUdBSU4uICAqLworKyAgICBjYXNlIEVJTlBST0dSRVNTOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUxSRUFEWToKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1RTT0NLOgorKyAgICAgIG1zZyA9ICJTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVERVNUQUREUlJFUToKKysgICAgICBtc2cgPSAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1TR1NJWkU6CisrICAgICAgbXNnID0gIk1lc3NhZ2UgdG9vIGxvbmciOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQUk9UT1RZUEU6CisrICAgICAgbXNnID0gIlByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PUFJPVE9PUFQ6CisrICAgICAgbXNnID0gIlByb3RvY29sIG5vdCBhdmFpbGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQUk9UT05PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVNPQ0tUTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFT1BOT1RTVVBQOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVBGTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFGTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUREUklOVVNFOgorKyAgICAgIG1zZyA9ICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUREUk5PVEFWQUlMOgorKyAgICAgIG1zZyA9ICJDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTkVURE9XTjoKKysgICAgICBtc2cgPSAiTmV0d29yayBpcyBkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTkVUVU5SRUFDSDoKKysgICAgICBtc2cgPSAiTmV0d29yayBpcyB1bnJlYWNoYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVFJFU0VUOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorKyAgICAgIG1zZyA9ICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUNPTk5SRVNFVDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9CVUZTOgorKyAgICAgIG1zZyA9ICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSVNDT05OOgorKyAgICAgIG1zZyA9ICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1RDT05OOgorKyAgICAgIG1zZyA9ICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVNIVVRET1dOOgorKyAgICAgIG1zZyA9ICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVUT09NQU5ZUkVGUzoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVRJTUVET1VUOgorKyAgICAgIG1zZyA9ICJDb25uZWN0aW9uIHRpbWVkIG91dCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUNPTk5SRUZVU0VEOgorKyAgICAgIG1zZyA9ICJDb25uZWN0aW9uIHJlZnVzZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVMT09QOgorKyAgICAgIG1zZyA9ICJUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVIT1NURE9XTjoKKysgICAgICBtc2cgPSAiSG9zdCBpcyBkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSE9TVFVOUkVBQ0g6CisrICAgICAgbXNnID0gIk5vIHJvdXRlIHRvIGhvc3QiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQUk9DTElNOgorKyAgICAgIG1zZyA9ICJUb28gbWFueSBwcm9jZXNzZXMiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVVU0VSUzoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgdXNlcnMiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVEUVVPVDoKKysgICAgICBtc2cgPSAiRGlzayBxdW90YSBleGNlZWRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVNUQUxFOgorKyAgICAgIG1zZyA9ICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVSRU1PVEU6CisrICAgICAgbXNnID0gIk9iamVjdCBpcyByZW1vdGUiOworKyAgICAgIGJyZWFrOworKyMgIGlmIEhBVkVfV0lOU09DSzJfSAorKyAgICAvKiBXU0FfSU5WQUxJRF9IQU5ETEUgbWFwcyB0byBFQkFERiAqLworKyAgICAvKiBXU0FfTk9UX0VOT1VHSF9NRU1PUlkgbWFwcyB0byBFTk9NRU0gKi8KKysgICAgLyogV1NBX0lOVkFMSURfUEFSQU1FVEVSIG1hcHMgdG8gRUlOVkFMICovCisrICAgIGNhc2UgV1NBX09QRVJBVElPTl9BQk9SVEVEOgorKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIG9wZXJhdGlvbiBhYm9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FfSU9fSU5DT01QTEVURToKKysgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBJL08gZXZlbnQgb2JqZWN0IG5vdCBpbiBzaWduYWxlZCBzdGF0ZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBX0lPX1BFTkRJTkc6CisrICAgICAgbXNnID0gIk92ZXJsYXBwZWQgb3BlcmF0aW9ucyB3aWxsIGNvbXBsZXRlIGxhdGVyIjsKKysgICAgICBicmVhazsKKysgICAgLyogV1NBRUlOVFIgbWFwcyB0byBFSU5UUiAqLworKyAgICAvKiBXU0FFQkFERiBtYXBzIHRvIEVCQURGICovCisrICAgIC8qIFdTQUVBQ0NFUyBtYXBzIHRvIEVBQ0NFUyAqLworKyAgICAvKiBXU0FFRkFVTFQgbWFwcyB0byBFRkFVTFQgKi8KKysgICAgLyogV1NBRUlOVkFMIG1hcHMgdG8gRUlOVkFMICovCisrICAgIC8qIFdTQUVNRklMRSBtYXBzIHRvIEVNRklMRSAqLworKyAgICAvKiBXU0FFV09VTERCTE9DSyBtYXBzIHRvIEVXT1VMREJMT0NLICovCisrICAgIC8qIFdTQUVJTlBST0dSRVNTIGlzIEVJTlBST0dSRVNTICovCisrICAgIC8qIFdTQUVBTFJFQURZIGlzIEVBTFJFQURZICovCisrICAgIC8qIFdTQUVOT1RTT0NLIGlzIEVOT1RTT0NLICovCisrICAgIC8qIFdTQUVERVNUQUREUlJFUSBpcyBFREVTVEFERFJSRVEgKi8KKysgICAgLyogV1NBRU1TR1NJWkUgaXMgRU1TR1NJWkUgKi8KKysgICAgLyogV1NBRVBST1RPVFlQRSBpcyBFUFJPVE9UWVBFICovCisrICAgIC8qIFdTQUVOT1BST1RPT1BUIGlzIEVOT1BST1RPT1BUICovCisrICAgIC8qIFdTQUVQUk9UT05PU1VQUE9SVCBpcyBFUFJPVE9OT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRVNPQ0tUTk9TVVBQT1JUIGlzIEVTT0NLVE5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFT1BOT1RTVVBQIGlzIEVPUE5PVFNVUFAgKi8KKysgICAgLyogV1NBRVBGTk9TVVBQT1JUIGlzIEVQRk5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFQUZOT1NVUFBPUlQgaXMgRUFGTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVBRERSSU5VU0UgaXMgRUFERFJJTlVTRSAqLworKyAgICAvKiBXU0FFQUREUk5PVEFWQUlMIGlzIEVBRERSTk9UQVZBSUwgKi8KKysgICAgLyogV1NBRU5FVERPV04gaXMgRU5FVERPV04gKi8KKysgICAgLyogV1NBRU5FVFVOUkVBQ0ggaXMgRU5FVFVOUkVBQ0ggKi8KKysgICAgLyogV1NBRU5FVFJFU0VUIGlzIEVORVRSRVNFVCAqLworKyAgICAvKiBXU0FFQ09OTkFCT1JURUQgaXMgRUNPTk5BQk9SVEVEICovCisrICAgIC8qIFdTQUVDT05OUkVTRVQgaXMgRUNPTk5SRVNFVCAqLworKyAgICAvKiBXU0FFTk9CVUZTIGlzIEVOT0JVRlMgKi8KKysgICAgLyogV1NBRUlTQ09OTiBpcyBFSVNDT05OICovCisrICAgIC8qIFdTQUVOT1RDT05OIGlzIEVOT1RDT05OICovCisrICAgIC8qIFdTQUVTSFVURE9XTiBpcyBFU0hVVERPV04gKi8KKysgICAgLyogV1NBRVRPT01BTllSRUZTIGlzIEVUT09NQU5ZUkVGUyAqLworKyAgICAvKiBXU0FFVElNRURPVVQgaXMgRVRJTUVET1VUICovCisrICAgIC8qIFdTQUVDT05OUkVGVVNFRCBpcyBFQ09OTlJFRlVTRUQgKi8KKysgICAgLyogV1NBRUxPT1AgaXMgRUxPT1AgKi8KKysgICAgLyogV1NBRU5BTUVUT09MT05HIG1hcHMgdG8gRU5BTUVUT09MT05HICovCisrICAgIC8qIFdTQUVIT1NURE9XTiBpcyBFSE9TVERPV04gKi8KKysgICAgLyogV1NBRUhPU1RVTlJFQUNIIGlzIEVIT1NUVU5SRUFDSCAqLworKyAgICAvKiBXU0FFTk9URU1QVFkgbWFwcyB0byBFTk9URU1QVFkgKi8KKysgICAgLyogV1NBRVBST0NMSU0gaXMgRVBST0NMSU0gKi8KKysgICAgLyogV1NBRVVTRVJTIGlzIEVVU0VSUyAqLworKyAgICAvKiBXU0FFRFFVT1QgaXMgRURRVU9UICovCisrICAgIC8qIFdTQUVTVEFMRSBpcyBFU1RBTEUgKi8KKysgICAgLyogV1NBRVJFTU9URSBpcyBFUkVNT1RFICovCisrICAgIGNhc2UgV1NBU1lTTk9UUkVBRFk6CisrICAgICAgbXNnID0gIk5ldHdvcmsgc3Vic3lzdGVtIGlzIHVuYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FWRVJOT1RTVVBQT1JURUQ6CisrICAgICAgbXNnID0gIldpbnNvY2suZGxsIHZlcnNpb24gb3V0IG9mIHJhbmdlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT1RJTklUSUFMSVNFRDoKKysgICAgICBtc2cgPSAiU3VjY2Vzc2Z1bCBXU0FTdGFydHVwIG5vdCB5ZXQgcGVyZm9ybWVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFRElTQ09OOgorKyAgICAgIG1zZyA9ICJHcmFjZWZ1bCBzaHV0ZG93biBpbiBwcm9ncmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRU5PTU9SRTogY2FzZSBXU0FfRV9OT19NT1JFOgorKyAgICAgIG1zZyA9ICJObyBtb3JlIHJlc3VsdHMiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVDQU5DRUxMRUQ6IGNhc2UgV1NBX0VfQ0FOQ0VMTEVEOgorKyAgICAgIG1zZyA9ICJDYWxsIHdhcyBjYW5jZWxlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRUlOVkFMSURQUk9DVEFCTEU6CisrICAgICAgbXNnID0gIlByb2NlZHVyZSBjYWxsIHRhYmxlIGlzIGludmFsaWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVJTlZBTElEUFJPVklERVI6CisrICAgICAgbXNnID0gIlNlcnZpY2UgcHJvdmlkZXIgaXMgaW52YWxpZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRVBST1ZJREVSRkFJTEVESU5JVDoKKysgICAgICBtc2cgPSAiU2VydmljZSBwcm92aWRlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBU1lTQ0FMTEZBSUxVUkU6CisrICAgICAgbXNnID0gIlN5c3RlbSBjYWxsIGZhaWx1cmUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVNFUlZJQ0VfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJTZXJ2aWNlIG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVFlQRV9OT1RfRk9VTkQ6CisrICAgICAgbXNnID0gIkNsYXNzIHR5cGUgbm90IGZvdW5kIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFUkVGVVNFRDoKKysgICAgICBtc2cgPSAiRGF0YWJhc2UgcXVlcnkgd2FzIHJlZnVzZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUhPU1RfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJIb3N0IG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVFJZX0FHQUlOOgorKyAgICAgIG1zZyA9ICJOb25hdXRob3JpdGF0aXZlIGhvc3Qgbm90IGZvdW5kIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT19SRUNPVkVSWToKKysgICAgICBtc2cgPSAiTm9ucmVjb3ZlcmFibGUgZXJyb3IiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQU5PX0RBVEE6CisrICAgICAgbXNnID0gIlZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlIjsKKysgICAgICBicmVhazsKKysgICAgLyogV1NBX1FPU18qIG9taXR0ZWQgKi8KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT01TRworKyAgICBjYXNlIEVOT01TRzoKKysgICAgICBtc2cgPSAiTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VJRFJNCisrICAgIGNhc2UgRUlEUk06CisrICAgICAgbXNnID0gIklkZW50aWZpZXIgcmVtb3ZlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU5PTElOSworKyAgICBjYXNlIEVOT0xJTks6CisrICAgICAgbXNnID0gIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVBST1RPCisrICAgIGNhc2UgRVBST1RPOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBlcnJvciI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QCisrICAgIGNhc2UgRU1VTFRJSE9QOgorKyAgICAgIG1zZyA9ICJNdWx0aWhvcCBhdHRlbXB0ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VCQURNU0cKKysgICAgY2FzZSBFQkFETVNHOgorKyAgICAgIG1zZyA9ICJCYWQgbWVzc2FnZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XCisrICAgIGNhc2UgRU9WRVJGTE9XOgorKyAgICAgIG1zZyA9ICJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQCisrICAgIGNhc2UgRU5PVFNVUDoKKysgICAgICBtc2cgPSAiTm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVNUQUxFCisrICAgIGNhc2UgRVNUQUxFOgorKyAgICAgIG1zZyA9ICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VEUVVPVAorKyAgICBjYXNlIEVEUVVPVDoKKysgICAgICBtc2cgPSAiRGlzayBxdW90YSBleGNlZWRlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECisrICAgIGNhc2UgRUNBTkNFTEVEOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gY2FuY2VsZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysgICAgfQorIAorLSAgLyogQ2FzdCBhd2F5IGNvbnN0LCBkdWUgdG8gdGhlIGhpc3RvcmljYWwgc2lnbmF0dXJlIG9mIHN0cmVycm9yOworLSAgICAgY2FsbGVycyBzaG91bGQgbm90IGJlIG1vZGlmeWluZyB0aGUgc3RyaW5nLiAgKi8KKy0gIGNvbnN0IGNoYXIgKm1zZyA9IHN0cmVycm9yX292ZXJyaWRlIChuKTsKKyAgIGlmIChtc2cpCisgICAgIHJldHVybiAoY2hhciAqKSBtc2c7CisgCistICBtc2cgPSBzdHJlcnJvciAobik7CisrICB7CisrICAgIGNoYXIgKnJlc3VsdCA9IHN0cmVycm9yIChuKTsKKyAKKy0gIC8qIE91ciBzdHJlcnJvcl9yIGltcGxlbWVudGF0aW9uIG1pZ2h0IHVzZSB0aGUgc3lzdGVtJ3Mgc3RyZXJyb3IKKy0gICAgIGJ1ZmZlciwgc28gYWxsIG90aGVyIGNsaWVudHMgb2Ygc3RyZXJyb3IgaGF2ZSB0byBzZWUgdGhlIGVycm9yCistICAgICBjb3BpZWQgaW50byBhIGJ1ZmZlciB0aGF0IHdlIG1hbmFnZS4gIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLAorLSAgICAgZXZlbiBpZiB0aGUgc3lzdGVtIHN0cmVycm9yIGlzLCBidXQgcG9ydGFibGUgcHJvZ3JhbXMgc2hvdWxkbid0CistICAgICBiZSB1c2luZyBzdHJlcnJvciBpZiB0aGV5IGNhcmUgYWJvdXQgdGhyZWFkLXNhZmV0eS4gICovCistICBpZiAoIW1zZyB8fCAhKm1zZykKKy0gICAgeworLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZtdFtdID0gIlVua25vd24gZXJyb3IgJWQiOworLSAgICAgIHZlcmlmeSAoc2l6ZW9mIGJ1ZiA+PSBzaXplb2YgKGZtdCkgKyBJTlRfU1RSTEVOX0JPVU5EIChuKSk7CistICAgICAgc3ByaW50ZiAoYnVmLCBmbXQsIG4pOworLSAgICAgIGVycm5vID0gRUlOVkFMOworLSAgICAgIHJldHVybiBidWY7CistICAgIH0KKysgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8IHJlc3VsdFswXSA9PSAnXDAnKQorKyAgICAgIHsKKysgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZtdFtdID0gIlVua25vd24gZXJyb3IgKCVkKSI7CisrICAgICAgICBzdGF0aWMgY2hhciBtc2dfYnVmW3NpemVvZiBmbXQgKyBJTlRfU1RSTEVOX0JPVU5EIChuKV07CisrICAgICAgICBzcHJpbnRmIChtc2dfYnVmLCBmbXQsIG4pOworKyAgICAgICAgcmV0dXJuIG1zZ19idWY7CisrICAgICAgfQorIAorLSAgLyogRml4IFNUQUNLQlVGX0xFTiBpZiB0aGlzIGV2ZXIgYWJvcnRzLiAgKi8KKy0gIGxlbiA9IHN0cmxlbiAobXNnKTsKKy0gIGlmIChzaXplb2YgYnVmIDw9IGxlbikKKy0gICAgYWJvcnQgKCk7CistCistICByZXR1cm4gbWVtY3B5IChidWYsIG1zZywgbGVuICsgMSk7CisrICAgIHJldHVybiByZXN1bHQ7CisrICB9CisgfQorKworKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwyNzkgKzAsMCBAQAorLS8qIHN0cmVycm9yLW92ZXJyaWRlLmMgLS0tIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtIGVycm9yIHJvdXRpbmUKKy0KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMTAuICAqLworLQorLSNpbmNsdWRlIDxjb25maWcuaD4KKy0KKy0jaW5jbHVkZSAic3RyZXJyb3Itb3ZlcnJpZGUuaCIKKy0KKy0jaW5jbHVkZSA8ZXJybm8uaD4KKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCistIyBpZiBIQVZFX1dJTlNPQ0syX0gKKy0jICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBJZiBFUlJOVU0gbWFwcyB0byBhbiBlcnJubyB2YWx1ZSBkZWZpbmVkIGJ5IGdudWxpYiwgcmV0dXJuIGEgc3RyaW5nCistICAgZGVzY3JpYmluZyB0aGUgZXJyb3IuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworLWNvbnN0IGNoYXIgKgorLXN0cmVycm9yX292ZXJyaWRlIChpbnQgZXJybnVtKQorLXsKKy0gIC8qIFRoZXNlIGVycm9yIG1lc3NhZ2VzIGFyZSB0YWtlbiBmcm9tIGdsaWJjL3N5c2RlcHMvZ251L2Vycmxpc3QuYy4gICovCistICBzd2l0Y2ggKGVycm51bSkKKy0gICAgeworLSNpZiBSRVBMQUNFX1NUUkVSUk9SXzAKKy0gICAgY2FzZSAwOgorLSAgICAgIHJldHVybiAiU3VjY2VzcyI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VUWFRCU1kKKy0gICAgY2FzZSBFVFhUQlNZOgorLSAgICAgIHJldHVybiAiVGV4dCBmaWxlIGJ1c3kiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKy0gICAgICAvKiBFV09VTERCTE9DSyBpcyB0aGUgc2FtZSBhcyBFQUdBSU4uICAqLworLSAgICBjYXNlIEVJTlBST0dSRVNTOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyI7CistICAgIGNhc2UgRUFMUkVBRFk6CistICAgICAgcmV0dXJuICJPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyI7CistICAgIGNhc2UgRU5PVFNPQ0s6CistICAgICAgcmV0dXJuICJTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQiOworLSAgICBjYXNlIEVERVNUQUREUlJFUToKKy0gICAgICByZXR1cm4gIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiOworLSAgICBjYXNlIEVNU0dTSVpFOgorLSAgICAgIHJldHVybiAiTWVzc2FnZSB0b28gbG9uZyI7CistICAgIGNhc2UgRVBST1RPVFlQRToKKy0gICAgICByZXR1cm4gIlByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCI7CistICAgIGNhc2UgRU5PUFJPVE9PUFQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFU09DS1ROT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFT1BOT1RTVVBQOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOworLSAgICBjYXNlIEVQRk5PU1VQUE9SVDoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFQUZOT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIjsKKy0gICAgY2FzZSBFQUREUklOVVNFOgorLSAgICAgIHJldHVybiAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSI7CistICAgIGNhc2UgRUFERFJOT1RBVkFJTDoKKy0gICAgICByZXR1cm4gIkNhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiOworLSAgICBjYXNlIEVORVRET1dOOgorLSAgICAgIHJldHVybiAiTmV0d29yayBpcyBkb3duIjsKKy0gICAgY2FzZSBFTkVUVU5SRUFDSDoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiOworLSAgICBjYXNlIEVORVRSRVNFVDoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0IjsKKy0gICAgY2FzZSBFQ09OTkFCT1JURUQ6CistICAgICAgcmV0dXJuICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7CistICAgIGNhc2UgRUNPTk5SRVNFVDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciI7CistICAgIGNhc2UgRU5PQlVGUzoKKy0gICAgICByZXR1cm4gIk5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiOworLSAgICBjYXNlIEVJU0NPTk46CistICAgICAgcmV0dXJuICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQiOworLSAgICBjYXNlIEVOT1RDT05OOgorLSAgICAgIHJldHVybiAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiOworLSAgICBjYXNlIEVTSFVURE9XTjoKKy0gICAgICByZXR1cm4gIkNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93biI7CistICAgIGNhc2UgRVRPT01BTllSRUZTOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSI7CistICAgIGNhc2UgRVRJTUVET1VUOgorLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiOworLSAgICBjYXNlIEVDT05OUkVGVVNFRDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gcmVmdXNlZCI7CistICAgIGNhc2UgRUxPT1A6CistICAgICAgcmV0dXJuICJUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3MiOworLSAgICBjYXNlIEVIT1NURE9XTjoKKy0gICAgICByZXR1cm4gIkhvc3QgaXMgZG93biI7CistICAgIGNhc2UgRUhPU1RVTlJFQUNIOgorLSAgICAgIHJldHVybiAiTm8gcm91dGUgdG8gaG9zdCI7CistICAgIGNhc2UgRVBST0NMSU06CistICAgICAgcmV0dXJuICJUb28gbWFueSBwcm9jZXNzZXMiOworLSAgICBjYXNlIEVVU0VSUzoKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IHVzZXJzIjsKKy0gICAgY2FzZSBFRFFVT1Q6CistICAgICAgcmV0dXJuICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKKy0gICAgY2FzZSBFU1RBTEU6CistICAgICAgcmV0dXJuICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworLSAgICBjYXNlIEVSRU1PVEU6CistICAgICAgcmV0dXJuICJPYmplY3QgaXMgcmVtb3RlIjsKKy0jIGlmIEhBVkVfV0lOU09DSzJfSAorLSAgICAgIC8qIFdTQV9JTlZBTElEX0hBTkRMRSBtYXBzIHRvIEVCQURGICovCistICAgICAgLyogV1NBX05PVF9FTk9VR0hfTUVNT1JZIG1hcHMgdG8gRU5PTUVNICovCistICAgICAgLyogV1NBX0lOVkFMSURfUEFSQU1FVEVSIG1hcHMgdG8gRUlOVkFMICovCistICAgIGNhc2UgV1NBX09QRVJBVElPTl9BQk9SVEVEOgorLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBvcGVyYXRpb24gYWJvcnRlZCI7CistICAgIGNhc2UgV1NBX0lPX0lOQ09NUExFVEU6CistICAgICAgcmV0dXJuICJPdmVybGFwcGVkIEkvTyBldmVudCBvYmplY3Qgbm90IGluIHNpZ25hbGVkIHN0YXRlIjsKKy0gICAgY2FzZSBXU0FfSU9fUEVORElORzoKKy0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgb3BlcmF0aW9ucyB3aWxsIGNvbXBsZXRlIGxhdGVyIjsKKy0gICAgICAvKiBXU0FFSU5UUiBtYXBzIHRvIEVJTlRSICovCistICAgICAgLyogV1NBRUJBREYgbWFwcyB0byBFQkFERiAqLworLSAgICAgIC8qIFdTQUVBQ0NFUyBtYXBzIHRvIEVBQ0NFUyAqLworLSAgICAgIC8qIFdTQUVGQVVMVCBtYXBzIHRvIEVGQVVMVCAqLworLSAgICAgIC8qIFdTQUVJTlZBTCBtYXBzIHRvIEVJTlZBTCAqLworLSAgICAgIC8qIFdTQUVNRklMRSBtYXBzIHRvIEVNRklMRSAqLworLSAgICAgIC8qIFdTQUVXT1VMREJMT0NLIG1hcHMgdG8gRVdPVUxEQkxPQ0sgKi8KKy0gICAgICAvKiBXU0FFSU5QUk9HUkVTUyBpcyBFSU5QUk9HUkVTUyAqLworLSAgICAgIC8qIFdTQUVBTFJFQURZIGlzIEVBTFJFQURZICovCistICAgICAgLyogV1NBRU5PVFNPQ0sgaXMgRU5PVFNPQ0sgKi8KKy0gICAgICAvKiBXU0FFREVTVEFERFJSRVEgaXMgRURFU1RBRERSUkVRICovCistICAgICAgLyogV1NBRU1TR1NJWkUgaXMgRU1TR1NJWkUgKi8KKy0gICAgICAvKiBXU0FFUFJPVE9UWVBFIGlzIEVQUk9UT1RZUEUgKi8KKy0gICAgICAvKiBXU0FFTk9QUk9UT09QVCBpcyBFTk9QUk9UT09QVCAqLworLSAgICAgIC8qIFdTQUVQUk9UT05PU1VQUE9SVCBpcyBFUFJPVE9OT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFU09DS1ROT1NVUFBPUlQgaXMgRVNPQ0tUTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRU9QTk9UU1VQUCBpcyBFT1BOT1RTVVBQICovCistICAgICAgLyogV1NBRVBGTk9TVVBQT1JUIGlzIEVQRk5PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVBRk5PU1VQUE9SVCBpcyBFQUZOT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFQUREUklOVVNFIGlzIEVBRERSSU5VU0UgKi8KKy0gICAgICAvKiBXU0FFQUREUk5PVEFWQUlMIGlzIEVBRERSTk9UQVZBSUwgKi8KKy0gICAgICAvKiBXU0FFTkVURE9XTiBpcyBFTkVURE9XTiAqLworLSAgICAgIC8qIFdTQUVORVRVTlJFQUNIIGlzIEVORVRVTlJFQUNIICovCistICAgICAgLyogV1NBRU5FVFJFU0VUIGlzIEVORVRSRVNFVCAqLworLSAgICAgIC8qIFdTQUVDT05OQUJPUlRFRCBpcyBFQ09OTkFCT1JURUQgKi8KKy0gICAgICAvKiBXU0FFQ09OTlJFU0VUIGlzIEVDT05OUkVTRVQgKi8KKy0gICAgICAvKiBXU0FFTk9CVUZTIGlzIEVOT0JVRlMgKi8KKy0gICAgICAvKiBXU0FFSVNDT05OIGlzIEVJU0NPTk4gKi8KKy0gICAgICAvKiBXU0FFTk9UQ09OTiBpcyBFTk9UQ09OTiAqLworLSAgICAgIC8qIFdTQUVTSFVURE9XTiBpcyBFU0hVVERPV04gKi8KKy0gICAgICAvKiBXU0FFVE9PTUFOWVJFRlMgaXMgRVRPT01BTllSRUZTICovCistICAgICAgLyogV1NBRVRJTUVET1VUIGlzIEVUSU1FRE9VVCAqLworLSAgICAgIC8qIFdTQUVDT05OUkVGVVNFRCBpcyBFQ09OTlJFRlVTRUQgKi8KKy0gICAgICAvKiBXU0FFTE9PUCBpcyBFTE9PUCAqLworLSAgICAgIC8qIFdTQUVOQU1FVE9PTE9ORyBtYXBzIHRvIEVOQU1FVE9PTE9ORyAqLworLSAgICAgIC8qIFdTQUVIT1NURE9XTiBpcyBFSE9TVERPV04gKi8KKy0gICAgICAvKiBXU0FFSE9TVFVOUkVBQ0ggaXMgRUhPU1RVTlJFQUNIICovCistICAgICAgLyogV1NBRU5PVEVNUFRZIG1hcHMgdG8gRU5PVEVNUFRZICovCistICAgICAgLyogV1NBRVBST0NMSU0gaXMgRVBST0NMSU0gKi8KKy0gICAgICAvKiBXU0FFVVNFUlMgaXMgRVVTRVJTICovCistICAgICAgLyogV1NBRURRVU9UIGlzIEVEUVVPVCAqLworLSAgICAgIC8qIFdTQUVTVEFMRSBpcyBFU1RBTEUgKi8KKy0gICAgICAvKiBXU0FFUkVNT1RFIGlzIEVSRU1PVEUgKi8KKy0gICAgY2FzZSBXU0FTWVNOT1RSRUFEWToKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgc3Vic3lzdGVtIGlzIHVuYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBXU0FWRVJOT1RTVVBQT1JURUQ6CistICAgICAgcmV0dXJuICJXaW5zb2NrLmRsbCB2ZXJzaW9uIG91dCBvZiByYW5nZSI7CistICAgIGNhc2UgV1NBTk9USU5JVElBTElTRUQ6CistICAgICAgcmV0dXJuICJTdWNjZXNzZnVsIFdTQVN0YXJ0dXAgbm90IHlldCBwZXJmb3JtZWQiOworLSAgICBjYXNlIFdTQUVESVNDT046CistICAgICAgcmV0dXJuICJHcmFjZWZ1bCBzaHV0ZG93biBpbiBwcm9ncmVzcyI7CistICAgIGNhc2UgV1NBRU5PTU9SRTogY2FzZSBXU0FfRV9OT19NT1JFOgorLSAgICAgIHJldHVybiAiTm8gbW9yZSByZXN1bHRzIjsKKy0gICAgY2FzZSBXU0FFQ0FOQ0VMTEVEOiBjYXNlIFdTQV9FX0NBTkNFTExFRDoKKy0gICAgICByZXR1cm4gIkNhbGwgd2FzIGNhbmNlbGVkIjsKKy0gICAgY2FzZSBXU0FFSU5WQUxJRFBST0NUQUJMRToKKy0gICAgICByZXR1cm4gIlByb2NlZHVyZSBjYWxsIHRhYmxlIGlzIGludmFsaWQiOworLSAgICBjYXNlIFdTQUVJTlZBTElEUFJPVklERVI6CistICAgICAgcmV0dXJuICJTZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQiOworLSAgICBjYXNlIFdTQUVQUk9WSURFUkZBSUxFRElOSVQ6CistICAgICAgcmV0dXJuICJTZXJ2aWNlIHByb3ZpZGVyIGZhaWxlZCB0byBpbml0aWFsaXplIjsKKy0gICAgY2FzZSBXU0FTWVNDQUxMRkFJTFVSRToKKy0gICAgICByZXR1cm4gIlN5c3RlbSBjYWxsIGZhaWx1cmUiOworLSAgICBjYXNlIFdTQVNFUlZJQ0VfTk9UX0ZPVU5EOgorLSAgICAgIHJldHVybiAiU2VydmljZSBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQVRZUEVfTk9UX0ZPVU5EOgorLSAgICAgIHJldHVybiAiQ2xhc3MgdHlwZSBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQUVSRUZVU0VEOgorLSAgICAgIHJldHVybiAiRGF0YWJhc2UgcXVlcnkgd2FzIHJlZnVzZWQiOworLSAgICBjYXNlIFdTQUhPU1RfTk9UX0ZPVU5EOgorLSAgICAgIHJldHVybiAiSG9zdCBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQVRSWV9BR0FJTjoKKy0gICAgICByZXR1cm4gIk5vbmF1dGhvcml0YXRpdmUgaG9zdCBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQU5PX1JFQ09WRVJZOgorLSAgICAgIHJldHVybiAiTm9ucmVjb3ZlcmFibGUgZXJyb3IiOworLSAgICBjYXNlIFdTQU5PX0RBVEE6CistICAgICAgcmV0dXJuICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CistICAgICAgLyogV1NBX1FPU18qIG9taXR0ZWQgKi8KKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VOT01TRworLSAgICBjYXNlIEVOT01TRzoKKy0gICAgICByZXR1cm4gIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUlEUk0KKy0gICAgY2FzZSBFSURSTToKKy0gICAgICByZXR1cm4gIklkZW50aWZpZXIgcmVtb3ZlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksKKy0gICAgY2FzZSBFTk9MSU5LOgorLSAgICAgIHJldHVybiAiTGluayBoYXMgYmVlbiBzZXZlcmVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVBST1RPCistICAgIGNhc2UgRVBST1RPOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgZXJyb3IiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AKKy0gICAgY2FzZSBFTVVMVElIT1A6CistICAgICAgcmV0dXJuICJNdWx0aWhvcCBhdHRlbXB0ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FQkFETVNHCistICAgIGNhc2UgRUJBRE1TRzoKKy0gICAgICByZXR1cm4gIkJhZCBtZXNzYWdlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XCistICAgIGNhc2UgRU9WRVJGTE9XOgorLSAgICAgIHJldHVybiAiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAKKy0gICAgY2FzZSBFTk9UU1VQOgorLSAgICAgIHJldHVybiAiTm90IHN1cHBvcnRlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVAorLSAgICBjYXNlIEVORVRSRVNFVDoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVECistICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorLSAgICAgIHJldHVybiAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FU1RBTEUKKy0gICAgY2FzZSBFU1RBTEU6CistICAgICAgcmV0dXJuICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FRFFVT1QKKy0gICAgY2FzZSBFRFFVT1Q6CistICAgICAgcmV0dXJuICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECistICAgIGNhc2UgRUNBTkNFTEVEOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIGNhbmNlbGVkIjsKKy0jZW5kaWYKKy0KKy0gICAgZGVmYXVsdDoKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLX0KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsNTIgKzAsMCBAQAorLS8qIHN0cmVycm9yLW92ZXJyaWRlLmggLS0tIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtIGVycm9yIHJvdXRpbmUKKy0KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistI2lmbmRlZiBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSAorLSMgZGVmaW5lIF9HTF9TVFJFUlJPUl9PVkVSUklERV9ICistCistIyBpbmNsdWRlIDxlcnJuby5oPgorLSMgaW5jbHVkZSA8c3RkZGVmLmg+CistCistLyogUmVhc29uYWJsZSBidWZmZXIgc2l6ZSB0aGF0IHNob3VsZCBuZXZlciB0cmlnZ2VyIEVSQU5HRTsgaWYgdGhpcworLSAgIHByb3ZlcyB0b28gc21hbGwsIHdlIGludGVudGlvbmFsbHkgYWJvcnQoKSwgdG8gcmVtaW5kIHVzIHRvIGZpeAorLSAgIHRoaXMgdmFsdWUuICAqLworLSMgZGVmaW5lIFNUQUNLQlVGX0xFTiAyNTYKKy0KKy0vKiBJZiBFUlJOVU0gbWFwcyB0byBhbiBlcnJubyB2YWx1ZSBkZWZpbmVkIGJ5IGdudWxpYiwgcmV0dXJuIGEgc3RyaW5nCistICAgZGVzY3JpYmluZyB0aGUgZXJyb3IuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworLSMgaWYgUkVQTEFDRV9TVFJFUlJPUl8wIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VUWFRCU1kgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVNPQ0sgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PTVNHIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VJRFJNIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT0xJTksgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVBST1RPIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQkFETVNHIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVNUQUxFIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VEUVVPVCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQKKy1leHRlcm4gY29uc3QgY2hhciAqc3RyZXJyb3Jfb3ZlcnJpZGUgKGludCBlcnJudW0pOworLSMgZWxzZQorLSMgIGRlZmluZSBzdHJlcnJvcl9vdmVycmlkZShpZ25vcmVkKSBOVUxMCistIyBlbmRpZgorLQorLSNlbmRpZiAvKiBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJpbmcuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJpbmcuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyaW5nLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJpbmcuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQxODQ4NDQ2MSAtMDgwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorKyNpZm5kZWYgX0dMX1NUUklOR19ICisgCisgI2lmIF9fR05VQ19fID49IDMKKyBAUFJBR01BX1NZU1RFTV9IRUFERVJACitAQCAtMjYsOCArMjYsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RSSU5HX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorKyNpZm5kZWYgX0dMX1NUUklOR19ICisrI2RlZmluZSBfR0xfU1RSSU5HX0gKKyAKKyAvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworICNpbmNsdWRlIDxzdGRkZWYuaD4KK0BAIC01OSwzNiArNTksNiBAQAorIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisgCisgCistLyogRmluZCB0aGUgaW5kZXggb2YgdGhlIGxlYXN0LXNpZ25pZmljYW50IHNldCBiaXQuICAqLworLSNpZiBAR05VTElCX0ZGU0xACistIyBpZiAhQEhBVkVfRkZTTEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU19TWVMgKGZmc2wsIGludCwgKGxvbmcgaW50IGkpKTsKKy1fR0xfQ1hYQUxJQVNXQVJOIChmZnNsKTsKKy0jZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistIyB1bmRlZiBmZnNsCistIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0wKKy1fR0xfV0FSTl9PTl9VU0UgKGZmc2wsICJmZnNsIGlzIG5vdCBwb3J0YWJsZSAtIHVzZSB0aGUgZmZzbCBtb2R1bGUiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCistLyogRmluZCB0aGUgaW5kZXggb2YgdGhlIGxlYXN0LXNpZ25pZmljYW50IHNldCBiaXQuICAqLworLSNpZiBAR05VTElCX0ZGU0xMQAorLSMgaWYgIUBIQVZFX0ZGU0xMQAorLV9HTF9GVU5DREVDTF9TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKy0jIGVuZGlmCistX0dMX0NYWEFMSUFTX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworLV9HTF9DWFhBTElBU1dBUk4gKGZmc2xsKTsKKy0jZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistIyB1bmRlZiBmZnNsbAorLSMgaWYgSEFWRV9SQVdfREVDTF9GRlNMTAorLV9HTF9XQVJOX09OX1VTRSAoZmZzbGwsICJmZnNsbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2xsIG1vZHVsZSIpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKyAvKiBSZXR1cm4gdGhlIGZpcnN0IGluc3RhbmNlIG9mIEMgd2l0aGluIE4gYnl0ZXMgb2YgUywgb3IgTlVMTC4gICovCisgI2lmIEBHTlVMSUJfTUVNQ0hSQAorICMgaWYgQFJFUExBQ0VfTUVNQ0hSQAorQEAgLTEwMDcsNSArOTc3LDUgQEAgX0dMX1dBUk5fT05fVVNFIChzdHJ2ZXJzY21wLCAic3RydmVyc2NtcAorICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NUUklOR19IICovCisrI2VuZGlmIC8qIF9HTF9TVFJJTkdfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3lzX3N0YXQuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zeXNfc3RhdC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zeXNfc3RhdC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3lzX3N0YXQuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQzMDQ4NDQ2MSAtMDgwMAorQEAgLTM0LDcgKzM0LDcgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0gKKysjaWZuZGVmIF9HTF9TWVNfU1RBVF9ICisgCisgLyogR2V0IG5saW5rX3QuICAqLworICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0BAIC00NSw4ICs0NSw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9TWVNfU1RBVF9IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICisrI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorKyNkZWZpbmUgX0dMX1NZU19TVEFUX0gKKyAKKyAvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisgCitAQCAtNjUzLDYgKzY1Myw2IEBAIF9HTF9XQVJOX09OX1VTRSAodXRpbWVuc2F0LCAidXRpbWVuc2F0IGkKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0ggKi8KKysjZW5kaWYgLyogX0dMX1NZU19TVEFUX0ggKi8KKysjZW5kaWYgLyogX0dMX1NZU19TVEFUX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdGltZS5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3RpbWUuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdGltZS5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdGltZS5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDM4NDg0NDYyIC0wODAwCitAQCAtMjgsMTMgKzI4LDEzIEBACisgICAgd2l0aG91dCBhZGRpbmcgb3VyIG93biBkZWNsYXJhdGlvbnMuICAqLworICNpZiAoZGVmaW5lZCBfX25lZWRfdGltZV90IHx8IGRlZmluZWQgX19uZWVkX2Nsb2NrX3QgXAorICAgICAgfHwgZGVmaW5lZCBfX25lZWRfdGltZXNwZWMgXAorLSAgICAgfHwgZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVElNRV9IKQorKyAgICAgfHwgZGVmaW5lZCBfR0xfVElNRV9IKQorIAorICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfVElNRV9IQAorIAorICNlbHNlCisgCistIyBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1RJTUVfSAorKyMgZGVmaW5lIF9HTF9USU1FX0gKKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKyAKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdW5pc3RkLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdW5pc3RkLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3VuaXN0ZC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdW5pc3RkLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40NTA0ODQ0NjIgLTA4MDAKK0BAIC0zNiw3ICszNiw3IEBACisgIyBkZWZpbmUgX0dMX1dJTlNPQ0syX0hfV0lUTkVTUworIAorIC8qIE5vcm1hbCBpbnZvY2F0aW9uLiAgKi8KKy0jZWxpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0gKKysjZWxpZiAhZGVmaW5lZCBfR0xfVU5JU1REX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI2lmIEBIQVZFX1VOSVNURF9IQAorQEAgLTUxLDggKzUxLDggQEAKKyAjIHVuZGVmIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorICNlbmRpZgorIAorLSNpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggJiYgIWRlZmluZWQgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0gKKysjaWYgIWRlZmluZWQgX0dMX1VOSVNURF9IICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorKyNkZWZpbmUgX0dMX1VOSVNURF9ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgQWxzbyBnZXQgc2l6ZV90LiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtMTE3LDc3ICsxMTcsNzggQEAKKyAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworIAorIAorLS8qIEhpZGUgc29tZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZnJvbSA8d2luc29jazIuaD4uICAqLworLQorLSNpZiBAR05VTElCX0dFVEhPU1ROQU1FQCAmJiBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IQAorLSMgaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NZU19TT0NLRVRfSAorLSMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHNvY2tldAorLSMgICBkZWZpbmUgc29ja2V0ICAgICAgICAgICAgICBzb2NrZXRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgY29ubmVjdAorLSMgICBkZWZpbmUgY29ubmVjdCAgICAgICAgICAgICBjb25uZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGFjY2VwdAorLSMgICBkZWZpbmUgYWNjZXB0ICAgICAgICAgICAgICBhY2NlcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgYmluZAorLSMgICBkZWZpbmUgYmluZCAgICAgICAgICAgICAgICBiaW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGdldHBlZXJuYW1lCistIyAgIGRlZmluZSBnZXRwZWVybmFtZSAgICAgICAgIGdldHBlZXJuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGdldHNvY2tuYW1lCistIyAgIGRlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgIGdldHNvY2tuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGdldHNvY2tvcHQKKy0jICAgZGVmaW5lIGdldHNvY2tvcHQgICAgICAgICAgZ2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBsaXN0ZW4KKy0jICAgZGVmaW5lIGxpc3RlbiAgICAgICAgICAgICAgbGlzdGVuX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHJlY3YKKy0jICAgZGVmaW5lIHJlY3YgICAgICAgICAgICAgICAgcmVjdl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBzZW5kCistIyAgIGRlZmluZSBzZW5kICAgICAgICAgICAgICAgIHNlbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgcmVjdmZyb20KKy0jICAgZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgcmVjdmZyb21fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2VuZHRvCistIyAgIGRlZmluZSBzZW5kdG8gICAgICAgICAgICAgIHNlbmR0b191c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBzZXRzb2Nrb3B0CistIyAgIGRlZmluZSBzZXRzb2Nrb3B0ICAgICAgICAgIHNldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2h1dGRvd24KKy0jICAgZGVmaW5lIHNodXRkb3duICAgICAgICAgICAgc2h1dGRvd25fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICBlbHNlCistICAgIF9HTF9XQVJOX09OX1VTRSAoc29ja2V0LAorLSAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoY29ubmVjdCwKKy0gICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChhY2NlcHQsCistICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChiaW5kLAorLSAgICAgICAgICAgICAgICAgICAgICJiaW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHBlZXJuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICJnZXRwZWVybmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2NrbmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja25hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja29wdCwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChsaXN0ZW4sCistICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChyZWN2LAorLSAgICAgICAgICAgICAgICAgICAgICJyZWN2KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmQsCistICAgICAgICAgICAgICAgICAgICAgInNlbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdmZyb20sCistICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmR0bywKKy0gICAgICAgICAgICAgICAgICAgICAic2VuZHRvKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNldHNvY2tvcHQsCistICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoc2h1dGRvd24sCistICAgICAgICAgICAgICAgICAgICAgInNodXRkb3duKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyNpZiBAR05VTElCX0dFVEhPU1ROQU1FQAorKy8qIEdldCBhbGwgcG9zc2libGUgZGVjbGFyYXRpb25zIG9mIGdldGhvc3RuYW1lKCkuICAqLworKyMgaWYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKKysjICBpZiAhZGVmaW5lZCBfR0xfU1lTX1NPQ0tFVF9ICisrIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyAgICB1bmRlZiBzb2NrZXQKKysjICAgIGRlZmluZSBzb2NrZXQgICAgICAgICAgICAgIHNvY2tldF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgY29ubmVjdAorKyMgICAgZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgY29ubmVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgYWNjZXB0CisrIyAgICBkZWZpbmUgYWNjZXB0ICAgICAgICAgICAgICBhY2NlcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGJpbmQKKysjICAgIGRlZmluZSBiaW5kICAgICAgICAgICAgICAgIGJpbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGdldHBlZXJuYW1lCisrIyAgICBkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICBnZXRwZWVybmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgZ2V0c29ja25hbWUKKysjICAgIGRlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgIGdldHNvY2tuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBnZXRzb2Nrb3B0CisrIyAgICBkZWZpbmUgZ2V0c29ja29wdCAgICAgICAgICBnZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBsaXN0ZW4KKysjICAgIGRlZmluZSBsaXN0ZW4gICAgICAgICAgICAgIGxpc3Rlbl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgcmVjdgorKyMgICAgZGVmaW5lIHJlY3YgICAgICAgICAgICAgICAgcmVjdl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2VuZAorKyMgICAgZGVmaW5lIHNlbmQgICAgICAgICAgICAgICAgc2VuZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgcmVjdmZyb20KKysjICAgIGRlZmluZSByZWN2ZnJvbSAgICAgICAgICAgIHJlY3Zmcm9tX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBzZW5kdG8KKysjICAgIGRlZmluZSBzZW5kdG8gICAgICAgICAgICAgIHNlbmR0b191c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2V0c29ja29wdAorKyMgICAgZGVmaW5lIHNldHNvY2tvcHQgICAgICAgICAgc2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2h1dGRvd24KKysjICAgIGRlZmluZSBzaHV0ZG93biAgICAgICAgICAgIHNodXRkb3duX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgIGVsc2UKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc29ja2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAic29ja2V0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChjb25uZWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoYWNjZXB0LAorKyAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChiaW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAiYmluZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0cGVlcm5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRwZWVybmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja25hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2NrbmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja29wdCwKKysgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGxpc3RlbiwKKysgICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdiwKKysgICAgICAgICAgICAgICAgICAgICAgInJlY3YoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICJzZW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChyZWN2ZnJvbSwKKysgICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZW5kdG8sCisrICAgICAgICAgICAgICAgICAgICAgICJzZW5kdG8oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNldHNvY2tvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzaHV0ZG93biwKKysgICAgICAgICAgICAgICAgICAgICAgInNodXRkb3duKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyMgICBlbmRpZgorICMgIGVuZGlmCistIyBlbmRpZgorLSMgaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NZU19TRUxFQ1RfSAorLSMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHNlbGVjdAorLSMgICBkZWZpbmUgc2VsZWN0ICAgICAgICAgICAgICBzZWxlY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc2VsZWN0X2gKKy0jICBlbHNlCistICAgIF9HTF9XQVJOX09OX1VTRSAoc2VsZWN0LAorLSAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc2VsZWN0Lmg+Iik7CisrIyAgaWYgIWRlZmluZWQgX0dMX1NZU19TRUxFQ1RfSAorKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyMgICAgdW5kZWYgc2VsZWN0CisrIyAgICBkZWZpbmUgc2VsZWN0ICAgICAgICAgICAgICBzZWxlY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc2VsZWN0X2gKKysjICAgZWxzZQorKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZWxlY3QsCisrICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc2VsZWN0Lmg+Iik7CisrIyAgIGVuZGlmCisgIyAgZW5kaWYKKyAjIGVuZGlmCisgI2VuZGlmCitAQCAtMTA2MSw3ICsxMDYyLDYgQEAgX0dMX1dBUk5fT05fVVNFIChwaXBlMiwgInBpcGUyIGlzIHVucG9ydAorICAgIHNwZWNpZmljYXRpb24gPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9wcmVhZC5odG1sPi4gICovCisgIyBpZiBAUkVQTEFDRV9QUkVBREAKKyAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwcmVhZAorICMgICBkZWZpbmUgcHJlYWQgcnBsX3ByZWFkCisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChwcmVhZCwgc3NpemVfdCwKK0BAIC0xMDk2LDcgKzEwOTYsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHByZWFkLCAicHJlYWQgaXMgdW5wb3J0CisgICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9wd3JpdGUuaHRtbD4uICAqLworICMgaWYgQFJFUExBQ0VfUFdSSVRFQAorICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHB3cml0ZQorICMgICBkZWZpbmUgcHdyaXRlIHJwbF9wd3JpdGUKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKHB3cml0ZSwgc3NpemVfdCwKK0BAIC0xNDE3LDUgKzE0MTYsNSBAQCBfR0xfQ1hYQUxJQVNXQVJOICh3cml0ZSk7CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KKysjZW5kaWYgLyogX0dMX1VOSVNURF9IICovCisrI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi92ZXJpZnkuaCBsaWJpY29udi0xLjE0L3NyY2xpYi92ZXJpZnkuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdmVyaWZ5LmgJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi92ZXJpZnkuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQ5NDQ4NDQ2NCAtMDgwMAorQEAgLTE2NCwxMyArMTY0LDEwIEBACisgICAgICghIXNpemVvZiAoX0dMX1ZFUklGWV9UWVBFIChSLCBESUFHTk9TVElDKSkpCisgCisgIyBpZmRlZiBfX2NwbHVzcGx1cworLSMgIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfX2dsX3ZlcmlmeV90eXBlCisgdGVtcGxhdGUgPGludCB3PgorICAgc3RydWN0IF9nbF92ZXJpZnlfdHlwZSB7CisgICAgIHVuc2lnbmVkIGludCBfZ2xfdmVyaWZ5X2Vycm9yX2lmX25lZ2F0aXZlOiB3OworICAgfTsKKy0jICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9fZ2xfdmVyaWZ5X3R5cGUgMQorLSMgIGVuZGlmCisgIyAgZGVmaW5lIF9HTF9WRVJJRllfVFlQRShSLCBESUFHTk9TVElDKSBcCisgICAgIF9nbF92ZXJpZnlfdHlwZTwoUikgPyAxIDogLTE+CisgIyBlbGlmIGRlZmluZWQgX0dMX0hBVkVfX1NUQVRJQ19BU1NFUlQKK0BAIC0yMDksNyArMjA2LDcgQEAgdGVtcGxhdGUgPGludCB3PgorICMgIGVuZGlmCisgIyBlbmRpZgorIAorLS8qIEBhc3NlcnQuaCBvbWl0IHN0YXJ0QCAgKi8KKysjIGlmZGVmIF9HTF9WRVJJRllfSAorIAorIC8qIEVhY2ggb2YgdGhlc2UgbWFjcm9zIHZlcmlmaWVzIHRoYXQgaXRzIGFyZ3VtZW50IFIgaXMgbm9uemVyby4gIFRvCisgICAgYmUgcG9ydGFibGUsIFIgc2hvdWxkIGJlIGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbi4gIFVubGlrZQorQEAgLTIyMSwyMyArMjE4LDE1IEBAIHRlbXBsYXRlIDxpbnQgdz4KKyAgICBjb250ZXh0cywgZS5nLiwgdGhlIHRvcCBsZXZlbC4gICovCisgCisgLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLCBhcyBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uCistICAgUmV0dXJuIDEuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdmVyaWZ5X2V4cHIgKFIsIDEpLgorLQorLSAgIHZlcmlmeV90cnVlIGlzIG9ic29sZXNjZW50OyBwbGVhc2UgdXNlIHZlcmlmeV9leHByIGluc3RlYWQuICAqLworLQorLSMgZGVmaW5lIHZlcmlmeV90cnVlKFIpIF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV90cnVlICgiICNSICIpIikKKysgICBSZXR1cm4gMS4gICovCisgCistLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUKKy0gICBleHByZXNzaW9uIEUuICAqLworLQorLSMgZGVmaW5lIHZlcmlmeV9leHByKFIsIEUpIFwKKy0gICAgKF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV9leHByICgiICNSICIsICIgI0UgIikiKSA/IChFKSA6IChFKSkKKysjICBkZWZpbmUgdmVyaWZ5X3RydWUoUikgX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X3RydWUgKCIgI1IgIikiKQorIAorIC8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYSBkZWNsYXJhdGlvbiB3aXRob3V0IGEKKyAgICB0cmFpbGluZyAnOycuICAqLworIAorLSMgZGVmaW5lIHZlcmlmeShSKSBfR0xfVkVSSUZZIChSLCAidmVyaWZ5ICgiICNSICIpIikKKysjICBkZWZpbmUgdmVyaWZ5KFIpIF9HTF9WRVJJRlkgKFIsICJ2ZXJpZnkgKCIgI1IgIikiKQorIAorLS8qIEBhc3NlcnQuaCBvbWl0IGVuZEAgICovCisrIyBlbmRpZgorIAorICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Nhbm9uaWNhbGl6ZS5tNCBsaWJpY29udi0xLjE0L3NyY200L2Nhbm9uaWNhbGl6ZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9jYW5vbmljYWxpemUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2Nhbm9uaWNhbGl6ZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjU2NjQ4NDQ2OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBjYW5vbmljYWxpemUubTQgc2VyaWFsIDIzCisrIyBjYW5vbmljYWxpemUubTQgc2VyaWFsIDIxCisgCisgZG5sIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCitAQCAtMTAsNiArMTAsOCBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgIyBub3QgcHJvdmlkZSBvciBmaXggcmVhbHBhdGguCisgQUNfREVGVU4oW2dsX0ZVTkNfQ0FOT05JQ0FMSVpFX0ZJTEVOQU1FX01PREVdLAorIFsKKysgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplXSkKKysKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgICBBQ19DSEVDS19GVU5DU19PTkNFKFtjYW5vbmljYWxpemVfZmlsZV9uYW1lXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0RPVUJMRV9TTEFTSF9ST09UXSkKK0BAIC0yOCwxNCArMzAsMTYgQEAgQUNfREVGVU4oW2dsX0NBTk9OSUNBTElaRV9MR1BMXSwKKyAgIEFDX1JFUVVJUkUoW2dsX0NBTk9OSUNBTElaRV9MR1BMX1NFUEFSQVRFXSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfY2Fub25pY2FsaXplX2ZpbGVfbmFtZSA9IG5vOyB0aGVuCisgICAgIEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0wCisrICAgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQorICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlYWxwYXRoID0gbm87IHRoZW4KKyAgICAgICBIQVZFX1JFQUxQQVRIPTAKKyAgICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19yZWFscGF0aF93b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFMUEFUSD0xCisgICAgIGZpCisgICBlbGlmIHRlc3QgIiRnbF9jdl9mdW5jX3JlYWxwYXRoX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKy0gICAgUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTEKKysgICAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCisgICAgIFJFUExBQ0VfUkVBTFBBVEg9MQorKyAgICBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MQorICAgZmkKKyBdKQorIAorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm5vX2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJub19oLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm5vX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2Vycm5vX2gubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41OTA0ODQ0NjkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgZXJybm9faC5tNCBzZXJpYWwgMTAKKysjIGVycm5vX2gubTQgc2VyaWFsIDkKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMzQsMTIgKzM0LDYgQEAgYm9vYm9vCisgI2lmICFkZWZpbmVkIEVOT1RTVVAKKyBib29ib28KKyAjZW5kaWYKKy0jaWYgIWRlZmluZWQgRU5FVFJFU0VUCistYm9vYm9vCistI2VuZGlmCistI2lmICFkZWZpbmVkIEVDT05OQUJPUlRFRAorLWJvb2JvbworLSNlbmRpZgorICNpZiAhZGVmaW5lZCBFU1RBTEUKKyBib29ib28KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJvci5tNCBsaWJpY29udi0xLjE0L3NyY200L2Vycm9yLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm9yLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJvci5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjU5ODQ4NDQ3MCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistI3NlcmlhbCAxNAorKyNzZXJpYWwgMTMKKyAKKyAjIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4LCAyMDAxLTIwMDQsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtOCw4ICs4LDE2IEBACisgCisgQUNfREVGVU4oW2dsX0VSUk9SXSwKKyBbCistICBkbmwgV2UgZG9uJ3QgdXNlIEFDX0ZVTkNfRVJST1JfQVRfTElORSBhbnkgbW9yZSwgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIKKy0gIGRubCBtYWludGFpbmVkIGluIEF1dG9jb25mIGFuZCBiZWNhdXNlIGl0IGludm9rZXMgQUNfTElCT0JKLgorKyAgQUNfRlVOQ19FUlJPUl9BVF9MSU5FCisrICBkbmwgTm90ZTogQUNfRlVOQ19FUlJPUl9BVF9MSU5FIGRvZXMgQUNfTElCU09VUkNFUyhbZXJyb3IuaCwgZXJyb3IuY10pLgorKyAgZ2xfUFJFUkVRX0VSUk9SCisrXSkKKysKKysjIFJlZGVmaW5lIEFDX0ZVTkNfRVJST1JfQVRfTElORSwgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBpbgorKyMgQXV0b2NvbmYuCisrQUNfREVGVU4oW0FDX0ZVTkNfRVJST1JfQVRfTElORV0sCisrWworKyAgQUNfTElCU09VUkNFUyhbZXJyb3IuaCwgZXJyb3IuY10pZG5sCisgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGVycm9yX2F0X2xpbmVdLCBbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmVdLAorICAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCitAQCAtMTcsNiArMjUsOSBAQCBBQ19ERUZVTihbZ2xfRVJST1JdLAorICAgICAgICAgICBbW2Vycm9yX2F0X2xpbmUgKDAsIDAsICIiLCAwLCAiYW4gZXJyb3Igb2NjdXJyZWQiKTtdXSldLAorICAgICAgICBbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9eWVzXSwKKyAgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vXSldKQorKyAgaWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorKyAgICBBQ19MSUJPQkooW2Vycm9yXSkKKysgIGZpCisgXSkKKyAKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Vycm9yLmMuCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXh0ZW5zaW9ucy5tNCBsaWJpY29udi0xLjE0L3NyY200L2V4dGVuc2lvbnMubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXh0ZW5zaW9ucy5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjYwNjQ4NDQ3MSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgMTAgIC0qLSBBdXRvY29uZiAtKi0KKysjIHNlcmlhbCA5ICAtKi0gQXV0b2NvbmYgLSotCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLgorIAorICMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAQCAtNjcsMTAgKzY3LDYgQEAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSlkbmwKKyAjaWZuZGVmIF9BTExfU09VUkNFCisgIyB1bmRlZiBfQUxMX1NPVVJDRQorICNlbmRpZgorLS8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gTWFjT1MgWC4gICovCistI2lmbmRlZiBfREFSV0lOX0NfU09VUkNFCistIyB1bmRlZiBfREFSV0lOX0NfU09VUkNFCistI2VuZGlmCisgLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworICNpZm5kZWYgX0dOVV9TT1VSQ0UKKyAjIHVuZGVmIF9HTlVfU09VUkNFCitAQCAtOTksNyArOTUsNiBAQCBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKWRubAorICAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKyAgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgICBBQ19ERUZJTkUoW19BTExfU09VUkNFXSkKKy0gIEFDX0RFRklORShbX0RBUldJTl9DX1NPVVJDRV0pCisgICBBQ19ERUZJTkUoW19HTlVfU09VUkNFXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jYWNoZS5tNCBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jYWNoZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY2FjaGUubTQJMjAxMS0wOC0wNyAwNjo0MjoxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jYWNoZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQzLjE1NDQ4NDU5MyAtMDgwMAorQEAgLTE1LDcgKzE1LDcgQEAKKyAKKyAKKyAjIFNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm0gb2YgYSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbjoKKy0jICAgZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworKyMgICBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisgCisgIyBTcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtIG9mIGEgZmV3IGdudWxpYi10b29sLm00IG1hY3JvIGludm9jYXRpb25zOgorIGdsX0xPQ0FMX0RJUihbZ251bGliLWxvY2FsXSkKK0BAIC0yOCw2ICsyOCw3IEBAIGdsX01PRFVMRVMoWworICAgbWJzdGF0ZQorICAgbWVtbW92ZQorICAgcHJvZ25hbWUKKysgIHJlbG9jYXRhYmxlCisgICByZWxvY2F0YWJsZS1wcm9nCisgICBzYWZlLXJlYWQKKyAgIHNpZ3BpcGUKK0BAIC00OSw1ICs1MCw0IEBAIGdsX0xJQihbbGliaWNydF0pCisgZ2xfTUFLRUZJTEVfTkFNRShbTWFrZWZpbGUuZ251bGliXSkKKyBnbF9NQUNST19QUkVGSVgoW2dsXSkKKyBnbF9QT19ET01BSU4oW10pCistZ2xfV0lUTkVTU19DX0RPTUFJTihbXSkKKyBnbF9WQ19GSUxFUyhbZmFsc2VdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21tb24ubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tbW9uLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21tb24ubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21tb24ubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42MzQ0ODQ0NzEgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgZ251bGliLWNvbW1vbi5tNCBzZXJpYWwgMjkKKysjIGdudWxpYi1jb21tb24ubTQgc2VyaWFsIDI0CisgZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEyLDE5ICsxMiw2IEBAIEFDX0RFRlVOKFtnbF9DT01NT05dLCBbCisgICBBQ19SRVFVSVJFKFtnbF9DT01NT05fQk9EWV0pCisgXSkKKyBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCistICBBSF9WRVJCQVRJTShbX05vcmV0dXJuXSwKKy1bLyogVGhlIF9Ob3JldHVybiBrZXl3b3JkIG9mIGRyYWZ0IEMxWC4gICovCistI2lmbmRlZiBfTm9yZXR1cm4KKy0jIGlmICgzIDw9IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18pIFwKKy0gICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKy0jICBkZWZpbmUgX05vcmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorLSMgZWxpZiAxMjAwIDw9IF9NU0NfVkVSCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKy0jIGVsc2UKKy0jICBkZWZpbmUgX05vcmV0dXJuCistIyBlbmRpZgorLSNlbmRpZgorLV0pCisgICBBSF9WRVJCQVRJTShbaXNvYzk5X2lubGluZV0sCisgWy8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIEFwcGxlIEdDQyA0LjAuMSBidWlsZCA1NDY1OiBJbiBDOTkgbW9kZSwgaXQgc3VwcG9ydHMKKyAgICB0aGUgSVNPIEMgOTkgc2VtYW50aWNzIG9mICdleHRlcm4gaW5saW5lJyAodW5saWtlIHRoZSBHTlUgQyBzZW1hbnRpY3Mgb2YKK0BAIC00NywyMCArMzQsNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCisgLyogVGhlIG5hbWUgX1VOVVNFRF9QQVJBTUVURVJfIGlzIGFuIGVhcmxpZXIgc3BlbGxpbmcsIGFsdGhvdWdoIHRoZSBuYW1lCisgICAgaXMgYSBtaXNub21lciBvdXRzaWRlIG9mIHBhcmFtZXRlciBsaXN0cy4gICovCisgI2RlZmluZSBfVU5VU0VEX1BBUkFNRVRFUl8gX0dMX1VOVVNFRAorLQorLS8qIFRoZSBfX3B1cmVfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk2LiAgKi8KKy0jaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCistI2VuZGlmCistCistLyogVGhlIF9fY29uc3RfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk1LiAgKi8KKy0jaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk1KQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIC8qIGVtcHR5ICovCistI2VuZGlmCisgXSkKKyAgIGRubCBQcmVwYXJhdGlvbiBmb3IgcnVubmluZyB0ZXN0IHByb2dyYW1zOgorICAgZG5sIFRlbGwgZ2xpYmMgdG8gd3JpdGUgZGlhZ25vc3RpY3MgZnJvbSAtRF9GT1JUSUZZX1NPVVJDRT0yIHRvIHN0ZGVyciwgbm90CitAQCAtNzQsNDkgKzQ3LDE2IEBAIEFDX0RFRlVOKFtnbF9DT01NT05fQk9EWV0sIFsKKyAjIGV4cGFuZHMgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgIyB3aGV0aGVyIGEgZ251bGliIG1vZHVsZSB0aGF0IGhhcyBiZWVuIHJlcXVlc3RlZCBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQKKyAjIG9yIG5vdC4KKy1tNF9kZWZpbmUoW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSwgWzFdKQorK0FDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0sIFsxXSkKKyAKKyAjIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFttb2R1bGVuYW1lXSkKKyAjIHNldHMgdGhlIHNoZWxsIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgZ2l2ZW4gbW9kdWxlIHRvCisgIyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCB3aWxsIGV2YWx1YXRlIHRvIDEuCisgQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFXSwKKyBbCistICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVgoCistICAgIFtHTlVMSUJfW11tNF90cmFuc2xpdChbWyQxXV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldLAorLSAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKQorLV0pCistCistIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVgoW3ZhcmlhYmxlXSkKKy0jIG1vZGlmaWVzIHRoZSBzaGVsbCB2YXJpYWJsZSB0byBpbmNsdWRlIHRoZSBnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTi4KKy0jIFRoZSBzaGVsbCB2YXJpYWJsZSdzIHZhbHVlIGlzIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcworLSMgdG8gMCBvciAxLgorLUFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhdLAorLVsKKy0gIG00X2lmKG00X2RlZm4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSksIFsxXSwKKy0gICAgWworLSAgICAgZG5sIFNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIFZBTFVFIHx8IDEgdG8gMS4KKy0gICAgICQxPTEKKy0gICAgXSwKKy0gICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUihbJDFdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pXSkKKy1dKQorLQorLSMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SKFt2YXJpYWJsZV0sIFtjb25kaXRpb25dKQorLSMgbW9kaWZpZXMgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGdpdmVuIGNvbmRpdGlvbi4gIFRoZSBzaGVsbAorLSMgdmFyaWFibGUncyB2YWx1ZSBpcyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMCBvciAxLgorLUFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1JdLAorLVsKKy0gIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiAxIHx8IENPTkRJVElPTiB0byAxLgorLSAgaWYgdGVzdCAiJFtdJDEiICE9IDE7IHRoZW4KKy0gICAgZG5sIFNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIDAgfHwgQ09ORElUSU9OIHRvIENPTkRJVElPTi4KKy0gICAgaWYgdGVzdCAiJFtdJDEiID0gMDsgdGhlbgorLSAgICAgICQxPSQyCistICAgIGVsc2UKKy0gICAgICAkMT0iKCRbXSQxIHx8ICQyKSIKKy0gICAgZmkKKy0gIGZpCisrICBHTlVMSUJfW11tNF90cmFuc2xpdChbWyQxXV0sCisrICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pPWdsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OCisgXSkKKyAKKyAjIGdsX01PRFVMRV9JTkRJQ0FUT1IoW21vZHVsZW5hbWVdKQorQEAgLTIxMSwzNSArMTUxLDYgQEAgbTRfaWZuZGVmKFtBU19WQVJfSUZdLAorIFttNF9kZWZpbmUoW0FTX1ZBUl9JRl0sCisgW0FTX0lGKFt0ZXN0IHgiQVNfVkFSX0dFVChbJDFdKSIgPSB4IiIkMl0sIFskM10sIFskNF0pXSldKQorIAorLSMgZ2xfUFJPR19BUl9SQU5MSUIKKy0jIERldGVybWluZXMgdGhlIHZhbHVlcyBmb3IgQVIsIEFSRkxBR1MsIFJBTkxJQiB0aGF0IGZpdCB3aXRoIHRoZSBjb21waWxlci4KKy1BQ19ERUZVTihbZ2xfUFJPR19BUl9SQU5MSUJdLAorLVsKKy0gIGRubCBNaW5peCAzIGNvbWVzIHdpdGggdHdvIHRvb2xjaGFpbnM6IFRoZSBBbXN0ZXJkYW0gQ29tcGlsZXIgS2l0IGNvbXBpbGVyCistICBkbmwgYXMgImNjIiwgYW5kIEdDQyBhcyAiZ2NjIi4gVGhleSBoYXZlIGRpZmZlcmVudCBvYmplY3QgZmlsZSBmb3JtYXRzIGFuZAorLSAgZG5sIGxpYnJhcnkgZm9ybWF0cy4gSW4gcGFydGljdWxhciwgdGhlIEdOVSBiaW51dGlscyBwcm9ncmFtcyBhciwgcmFubGliCistICBkbmwgcHJvZHVjZSBsaWJyYXJpZXMgdGhhdCB3b3JrIG9ubHkgd2l0aCBnY2MsIG5vdCB3aXRoIGNjLgorLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCistICBBQ19FR1JFUF9DUFAoW0Ftc3RlcmRhbV0sCistICAgIFsKKy0jaWZkZWYgX19BQ0tfXworLUFtc3RlcmRhbQorLSNlbmRpZgorLSAgICBdLAorLSAgICBbQVI9J2NjIC1jLmEnCistICAgICBBUkZMQUdTPSctbycKKy0gICAgIFJBTkxJQj0nOicKKy0gICAgXSwKKy0gICAgW2RubCBVc2UgdGhlIEF1dG9tYWtlLWRvY3VtZW50ZWQgZGVmYXVsdCB2YWx1ZXMgZm9yIEFSIGFuZCBBUkZMQUdTLgorLSAgICAgQVI9J2FyJworLSAgICAgQVJGTEFHUz0nY3J1JworLSAgICAgZG5sIFVzZSB0aGUgcmFubGliIHByb2dyYW0gaWYgaXQgaXMgYXZhaWxhYmxlLgorLSAgICAgQUNfUFJPR19SQU5MSUIKKy0gICAgXSkKKy0gIEFDX1NVQlNUKFtBUl0pCistICBBQ19TVUJTVChbQVJGTEFHU10pCistXSkKKy0KKyAjIEFDX1BST0dfTUtESVJfUAorICMgaXMgYSBiYWNrcG9ydCBvZiBhdXRvY29uZi0yLjYwJ3MgQUNfUFJPR19NS0RJUl9QLCB3aXRoIGEgZml4CisgIyBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIGF1dG9tYWtlLTEuOS42IGZyb20gYXV0b2NvbmYtMi42Mi4KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tcC5tNCBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21wLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21wLm00CTIwMTEtMDgtMDcgMDY6NDI6MTIuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tcC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQzLjkyMjQ4NDYzMCAtMDgwMAorQEAgLTI1LDEyICsyNSwxNCBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0VTJF0pZG5sIGEgdmFsaWQgbG9jYWxlIG5hbWUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorLSAgQUNfUkVRVUlSRShbZ2xfUFJPR19BUl9SQU5MSUJdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorICAgQUNfUkVRVUlSRShbQU1fUFJPR19DQ19DX09dKQorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYS1vcHQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhdG9yOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFyZWFkbGluazoKKysgICMgQ29kZSBmcm9tIG1vZHVsZSBhcmctbm9ubnVsbDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBiaW5hcnktaW86CisrICAjIENvZGUgZnJvbSBtb2R1bGUgYysrZGVmczoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBjYXJlYWRsaW5rYXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgZG9zbmFtZToKK0BAIC00Niw3ICs0OCw2IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICAjIENvZGUgZnJvbSBtb2R1bGUgaGF2ZWxpYjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBpbmNsdWRlX25leHQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgaW50cHJvcHM6CistICAjIENvZGUgZnJvbSBtb2R1bGUgbGFyZ2VmaWxlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGxpYmljb252LW1pc2M6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgbHN0YXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgbWFsbG9jYToKK0BAIC02NCwxMCArNjUsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25hbDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwaXBlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ3Byb2NtYXNrOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGw6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9jKytkZWZzOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2U6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3NpemVfdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJvb2w6CitAQCAtNzcsNyArNzQsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGxpYjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvcjoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJpbmc6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3N0YXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgdGltZToKK0BAIC04Nyw2ICs4Myw3IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pd2lkdGgvd2lkdGg6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgdW5sb2NrZWQtaW86CisgICAjIENvZGUgZnJvbSBtb2R1bGUgdmVyaWZ5OgorKyAgIyBDb2RlIGZyb20gbW9kdWxlIHdhcm4tb24tdXNlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYzoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB4cmVhZGxpbms6CisgXSkKK0BAIC0xMDksOSArMTA2LDYgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAorICAgZ2xfc291cmNlX2Jhc2U9J3NyY2xpYicKKyBnbF9GVU5DX0FMTE9DQQorIGdsX0NBTk9OSUNBTElaRV9MR1BMCistaWYgdGVzdCAkSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKy1maQorIGdsX01PRFVMRV9JTkRJQ0FUT1IoW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKyBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbY2Fub25pY2FsaXplX2ZpbGVfbmFtZV0pCisgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWxwYXRoXSkKK0BAIC0xMjEsMTAgKzExNSw2IEBAIGdsX0VOVklST04KKyBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbZW52aXJvbl0pCisgZ2xfSEVBREVSX0VSUk5PX0gKKyBnbF9FUlJPUgorLWlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKy0gIEFDX0xJQk9CSihbZXJyb3JdKQorLSAgZ2xfUFJFUkVRX0VSUk9SCistZmkKKyBtNF9pZmRlZihbQU1fWEdFVFRFWFRfT1BUSU9OXSwKKyAgIFtBTV9dW1hHRVRURVhUX09QVElPTihbLS1mbGFnPWVycm9yOjM6Yy1mb3JtYXRdKQorICAgIEFNX11bWEdFVFRFWFRfT1BUSU9OKFstLWZsYWc9ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0XSldKQorQEAgLTEzNCw0MyArMTI0LDI2IEBAIEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTguMV0pCisgQUNfU1VCU1QoW0xJQklOVExdKQorIEFDX1NVQlNUKFtMVExJQklOVExdKQorIGdsX0ZVTkNfTFNUQVQKKy1pZiB0ZXN0ICRSRVBMQUNFX0xTVEFUID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtsc3RhdF0pCistICBnbF9QUkVSRVFfTFNUQVQKKy1maQorIGdsX1NZU19TVEFUX01PRFVMRV9JTkRJQ0FUT1IoW2xzdGF0XSkKKyBnbF9NQUxMT0NBCisgQUNfVFlQRV9NQlNUQVRFX1QKKyBnbF9GVU5DX01FTU1PVkUKKy1pZiB0ZXN0ICRhY19jdl9mdW5jX21lbW1vdmUgPSBubzsgdGhlbgorLSAgQUNfTElCT0JKKFttZW1tb3ZlXSkKKy0gIGdsX1BSRVJFUV9NRU1NT1ZFCistZmkKKyBnbF9NVUxUSUFSQ0gKKyBnbF9QQVRITUFYCisgQUNfQ0hFQ0tfREVDTFMoW3Byb2dyYW1faW52b2NhdGlvbl9uYW1lXSwgW10sIFtdLCBbI2luY2x1ZGUgPGVycm5vLmg+XSkKKyBBQ19DSEVDS19ERUNMUyhbcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWVdLCBbXSwgW10sIFsjaW5jbHVkZSA8ZXJybm8uaD5dKQorIGdsX0ZVTkNfUkVBRAorLWlmIHRlc3QgJFJFUExBQ0VfUkVBRCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbcmVhZF0pCistZmkKKyBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbcmVhZF0pCisgZ2xfRlVOQ19SRUFETElOSworLWlmIHRlc3QgJEhBVkVfUkVBRExJTksgPSAwIHx8IHRlc3QgJFJFUExBQ0VfUkVBRExJTksgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKy0gIGdsX1BSRVJFUV9SRUFETElOSworLWZpCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWRsaW5rXSkKKyBnbF9SRUxPQ0FUQUJMRShbJGdsX3NvdXJjZV9iYXNlXSkKKy1pZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorLSAgQUNfTElCT0JKKFtwcm9ncmVsb2NdKQorLWZpCisgZ2xfRlVOQ19SRUFETElOS19TRVBBUkFURQorIGdsX0NBTk9OSUNBTElaRV9MR1BMX1NFUEFSQVRFCisgZ2xfTUFMTE9DQQorLWdsX1JFTE9DQVRBQkxFX0xJQlJBUlkKKytnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX1NFUEFSQVRFCisgZ2xfRlVOQ19TRVRFTlZfU0VQQVJBVEUKKy1nbF9QUkVSRVFfU0FGRV9SRUFECisrZ2xfRlVOQ19TVFJFUlJPUl9TRVBBUkFURQorK2dsX1NBRkVfUkVBRAorIGdsX1NJR05BTF9ICisgZ2xfU0lHTkFMX1NJR1BJUEUKKyBkbmwgRGVmaW5lIHRoZSBDIG1hY3JvIEdOVUxJQl9TSUdQSVBFIHRvIDEuCitAQCAtMTg2LDE3ICsxNTksOSBAQCBkbmwgRGVmaW5lIHRoZSBzdWJzdGl0dXRlZCB2YXJpYWJsZSBHTlVMCisgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorIEdOVUxJQl9VTklTVERfSF9TSUdQSVBFPTEKKyBnbF9TSUdOQUxCTE9DS0lORworLWlmIHRlc3QgJEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSAwOyB0aGVuCistICBBQ19MSUJPQkooW3NpZ3Byb2NtYXNrXSkKKy0gIGdsX1BSRVJFUV9TSUdQUk9DTUFTSworLWZpCisgZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1IoW3NpZ3Byb2NtYXNrXSkKKyBndF9UWVBFX1NTSVpFX1QKKyBnbF9GVU5DX1NUQVQKKy1pZiB0ZXN0ICRSRVBMQUNFX1NUQVQgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3N0YXRdKQorLSAgZ2xfUFJFUkVRX1NUQVQKKy1maQorIGdsX1NZU19TVEFUX01PRFVMRV9JTkRJQ0FUT1IoW3N0YXRdKQorIEFNX1NUREJPT0xfSAorIGdsX1NURERFRl9ICitAQCAtMjA0LDE3ICsxNjksNyBAQCBnbF9TVERJTlRfSAorIGdsX1NURElPX0gKKyBnbF9TVERMSUJfSAorIGdsX0ZVTkNfU1RSRVJST1IKKy1pZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdHJlcnJvcl0pCistZmkKKy1nbF9NT0RVTEVfSU5ESUNBVE9SKFtzdHJlcnJvcl0pCisgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmVycm9yXSkKKy1BQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCistQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl8wXSkKKy1pZiB0ZXN0IC1uICIkRVJSTk9fSCIgfHwgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUl8wID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdHJlcnJvci1vdmVycmlkZV0pCistICBnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzIKKy1maQorIGdsX0hFQURFUl9TVFJJTkdfSAorIGdsX0hFQURFUl9TWVNfU1RBVF9ICisgQUNfUFJPR19NS0RJUl9QCitAQCAtMzY0LDE0ICszMTksMTMgQEAgQUNfREVGVU4oW2dsdGVzdHNfTElCU09VUkNFU10sIFsKKyAjIFRoaXMgbWFjcm8gcmVjb3JkcyB0aGUgbGlzdCBvZiBmaWxlcyB3aGljaCBoYXZlIGJlZW4gaW5zdGFsbGVkIGJ5CisgIyBnbnVsaWItdG9vbCBhbmQgbWF5IGJlIHJlbW92ZWQgYnkgZnV0dXJlIGdudWxpYi10b29sIGludm9jYXRpb25zLgorIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisrICBidWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKyAgYnVpbGQtYXV4L2MrK2RlZnMuaAorICAgYnVpbGQtYXV4L2NvbmZpZy5saWJwYXRoCisgICBidWlsZC1hdXgvY29uZmlnLnJwYXRoCisgICBidWlsZC1hdXgvaW5zdGFsbC1yZWxvYworICAgYnVpbGQtYXV4L3JlbG9jLWxkZmxhZ3MKKy0gIGJ1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistICBidWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKy0gIGJ1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKysgIGJ1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisgICBkb2MvcmVsb2NhdGFibGUudGV4aQorICAgbGliL2FsbG9jYS5pbi5oCisgICBsaWIvYWxsb2NhdG9yLmMKK0BAIC00MTksOCArMzczLDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKKyAgIGxpYi9zdGRpby5pbi5oCisgICBsaWIvc3RkbGliLmluLmgKKyAgIGxpYi9zdHJlcS5oCistICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYworLSAgbGliL3N0cmVycm9yLW92ZXJyaWRlLmgKKyAgIGxpYi9zdHJlcnJvci5jCisgICBsaWIvc3RyaW5nLmluLmgKKyAgIGxpYi9zeXNfc3RhdC5pbi5oCitAQCAtNDYzLDcgKzQxNSw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBtNC9pbnRtYXgubTQKKyAgIG00L2ludHR5cGVzLXByaS5tNAorICAgbTQvaW50dHlwZXNfaC5tNAorLSAgbTQvbGFyZ2VmaWxlLm00CisgICBtNC9sY21lc3NhZ2UubTQKKyAgIG00L2xpYi1sZC5tNAorICAgbTQvbGliLWxpbmsubTQKK0BAIC01MDIsNyArNDUzLDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKKyAgIG00L3N0ZGxpYl9oLm00CisgICBtNC9zdHJlcnJvci5tNAorICAgbTQvc3RyaW5nX2gubTQKKy0gIG00L3N5c19zb2NrZXRfaC5tNAorICAgbTQvc3lzX3N0YXRfaC5tNAorICAgbTQvdGhyZWFkbGliLm00CisgICBtNC90aW1lX2gubTQKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9pbmNsdWRlX25leHQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9pbmNsdWRlX25leHQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvaW5jbHVkZV9uZXh0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9pbmNsdWRlX25leHQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42NTA0ODQ0NzIgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgaW5jbHVkZV9uZXh0Lm00IHNlcmlhbCAyMAorKyMgaW5jbHVkZV9uZXh0Lm00IHNlcmlhbCAxOAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNzUsMTMgKzE3NSwxMSBAQCBBQ19ERUZVTihbZ2xfTkVYVF9IRUFERVJTX0lOVEVSTkFMXSwKKyAgICAgW0FDX0NIRUNLX0hFQURFUlNfT05DRShbJDFdKQorICAgICBdKQorIAorLWRubCBGSVhNRTogZ2xfbmV4dF9oZWFkZXIgYW5kIGdsX2hlYWRlcl9leGlzdHMgbXVzdCBiZSB1c2VkIHVucXVvdGVkCistZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyAgIG00X2ZvcmVhY2hfdyhbZ2xfSEVBREVSX05BTUVdLCBbJDFdLAorICAgICBbQVNfVkFSX1BVU0hERUYoW2dsX25leHRfaGVhZGVyXSwKKyAgICAgICAgICAgICAgICAgICAgIFtnbF9jdl9uZXh0X11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKQorICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKy0gICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKysgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQorICAgICAgZWxzZQorICAgICAgICBBQ19DQUNIRV9DSEVDSygKKyAgICAgICAgICBbYWJzb2x1dGUgbmFtZSBvZiA8XW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbPl0sCitAQCAtMjEwLDcgKzIwOCw3IEBAIGRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IKKyAgICAgICAgICAgICAgICBkbmwgZXZhbCBpcyBuZWNlc3NhcnkgdG8gZXhwYW5kIGdsX2Fic25hbWVfY3BwLgorICAgICAgICAgICAgICAgIGRubCBVbHRyaXggYW5kIFB5cmFtaWQgc2ggcmVmdXNlIHRvIHJlZGlyZWN0IG91dHB1dCBvZiBldmFsLAorICAgICAgICAgICAgICAgIGRubCBzbyB1c2Ugc3Vic2hlbGwuCistICAgICAgICAgICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwKKysgICAgICAgICAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICBbJyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JkFTX01FU1NBR0VfTE9HX0ZEIHwKKyAgICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pWyN7CisgICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbXCkiLiojXDEjCitAQCAtMjIwLDIwICsyMTgsMjAgQEAgZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvcgorICAgICAgICAgICAgICAgICAgIH0nYCciJ10pCisgICAgICAgICAgIG00X2lmKFskMl0sIFtjaGVja10sCisgICAgICAgICAgICAgW2Vsc2UKKy0gICAgICAgICAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQorKyAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBdKQorICAgICAgICAgIF0pCisgICAgICBmaQorICAgICAgQUNfU1VCU1QoCisgICAgICAgIEFTX1RSX0NQUChbTkVYVF9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCistICAgICAgIFtBU19WQVJfR0VUKGdsX25leHRfaGVhZGVyKV0pCisrICAgICAgIFtBU19WQVJfR0VUKFtnbF9uZXh0X2hlYWRlcl0pXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnCisgICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2dsX0hFQURFUl9OQU1FJz4nCisgICAgICBlbHNlCisgICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKy0gICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9QVNfVkFSX0dFVChnbF9uZXh0X2hlYWRlcikKKysgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9QVNfVkFSX0dFVChbZ2xfbmV4dF9oZWFkZXJdKQorICAgICAgZmkKKyAgICAgIEFDX1NVQlNUKAorICAgICAgICBBU19UUl9DUFAoW05FWFRfQVNfRklSU1RfRElSRUNUSVZFX11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKSwKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sYXJnZWZpbGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9sYXJnZWZpbGUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbGFyZ2VmaWxlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9sYXJnZWZpbGUubTQJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDEwNCArMCwwIEBACistIyBFbmFibGUgbGFyZ2UgZmlsZXMgb24gc3lzdGVtcyB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdC4KKy0KKy0jIENvcHlyaWdodCAxOTkyLTE5OTYsIDE5OTgtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCistIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorLQorLSMgVGhlIGZvbGxvd2luZyBpbXBsZW1lbnRhdGlvbiB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIGF1dG9jb25mIDw9IDIuNjg7CistIyBBQ19TWVNfTEFSR0VGSUxFIGRvZXMgbm90IGNvbmZpZ3VyZSBmb3IgbGFyZ2UgaW5vZGVzIG9uIE1hYyBPUyBYIDEwLjUuCistbTRfdmVyc2lvbl9wcmVyZXEoWzIuNjldLCBbXSAsWworLQorLSMgX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10sCistW0AlOkBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0gLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCistICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKy0gICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworLSAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCistQCU6QGRlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCistICBpbnQgb2ZmX3RfaXNfbGFyZ2VbWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCistCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCistCQkgICAgICA/IDEgOiAtMV1dO1tdZG5sCistXSkKKy0KKy0KKy0jIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKEMtTUFDUk8sIFZBTFVFLAorLSMJCQkJQ0FDSEUtVkFSLAorLSMJCQkJREVTQ1JJUFRJT04sCistIwkJCQlQUk9MT0dVRSwgW0ZVTkNUSU9OLUJPRFldKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFXSwKKy1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkMSB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzXSwgWyQzXSwKKy1bd2hpbGUgOjsgZG8KKy0gIG00X2lmdmFsKFskNl0sIFtBQ19MSU5LX0lGRUxTRV0sIFtBQ19DT01QSUxFX0lGRUxTRV0pKAorLSAgICBbQUNfTEFOR19QUk9HUkFNKFskNV0sIFskNl0pXSwKKy0gICAgWyQzPW5vOyBicmVha10pCistICBtNF9pZnZhbChbJDZdLCBbQUNfTElOS19JRkVMU0VdLCBbQUNfQ09NUElMRV9JRkVMU0VdKSgKKy0gICAgW0FDX0xBTkdfUFJPR1JBTShbQCU6QGRlZmluZSAkMSAkMgorLSQ1XSwgWyQ2XSldLAorLSAgICBbJDM9JDI7IGJyZWFrXSkKKy0gICQzPXVua25vd24KKy0gIGJyZWFrCistZG9uZV0pCistY2FzZSAkJDMgaW4gIygKKy0gIG5vIHwgdW5rbm93bikgOzsKKy0gICopIEFDX0RFRklORV9VTlFVT1RFRChbJDFdLCBbJCQzXSwgWyQ0XSk7OworLWVzYWMKKy1ybSAtcmYgY29uZnRlc3QqW11kbmwKKy1dKSMgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUKKy0KKy0KKy0jIEFDX1NZU19MQVJHRUZJTEUKKy0jIC0tLS0tLS0tLS0tLS0tLS0KKy0jIEJ5IGRlZmF1bHQsIG1hbnkgaG9zdHMgd29uJ3QgbGV0IHByb2dyYW1zIGFjY2VzcyBsYXJnZSBmaWxlczsKKy0jIG9uZSBtdXN0IHVzZSBzcGVjaWFsIGNvbXBpbGVyIG9wdGlvbnMgdG8gZ2V0IGxhcmdlLWZpbGUgYWNjZXNzIHRvIHdvcmsuCistIyBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMgYnJhaW4gZGFtYWdlIHBsZWFzZSBzZWU6CistIyBodHRwOi8vd3d3LnVuaXgtc3lzdGVtcy5vcmcvdmVyc2lvbjIvd2hhdHNuZXcvbGZzMjBtYXIuaHRtbAorLUFDX0RFRlVOKFtBQ19TWVNfTEFSR0VGSUxFXSwKKy1bQUNfQVJHX0VOQUJMRShsYXJnZWZpbGUsCistCSAgICAgICBbICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzXSkKKy1pZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKy0KKy0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sCistICAgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MsCistICAgIFthY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vCistICAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKy0gICAgICAgYWNfc2F2ZV9DQz0kQ0MKKy0gICAgICAgd2hpbGUgOjsgZG8KKy0JICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCistCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCistCSBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKV0pCistCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2JyZWFrXSkKKy0JIENDPSIkQ0MgLW4zMiIKKy0JIEFDX0NPTVBJTEVfSUZFTFNFKFtdLCBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz0nIC1uMzInOyBicmVha10pCistCSBicmVhaworLSAgICAgICBkb25lCistICAgICAgIENDPSRhY19zYXZlX0NDCistICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgZmldKQorLSAgaWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiICE9IG5vOyB0aGVuCistICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCistICBmaQorLQorLSAgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoX0ZJTEVfT0ZGU0VUX0JJVFMsIDY0LAorLSAgICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cywKKy0gICAgW051bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuXSwKKy0gICAgW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKQorLSAgaWYgdGVzdCAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgPSB1bmtub3duOyB0aGVuCistICAgIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKF9MQVJHRV9GSUxFUywgMSwKKy0gICAgICBhY19jdl9zeXNfbGFyZ2VfZmlsZXMsCistICAgICAgW0RlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy5dLAorLSAgICAgIFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSkKKy0gIGZpCistCistICBBSF9WRVJCQVRJTShbX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFXSwKKy1bLyogRW5hYmxlIGxhcmdlIGlub2RlIG51bWJlcnMgb24gTWFjIE9TIFguICAqLworLSNpZm5kZWYgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFCistIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKKy0jZW5kaWZdKQorLWZpCistXSkjIEFDX1NZU19MQVJHRUZJTEUKKy0KKy1dKSMgbTRfdmVyc2lvbl9wcmVyZXEgMi42OQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xzdGF0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvbHN0YXQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbHN0YXQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2xzdGF0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzIyNDg0NDc2IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCAyMworKyMgc2VyaWFsIDIxCisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSwgMjAwMy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKK0BAIC0xNSwyOCArMTUsMjQgQEAgQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRdLAorICAgZG5sICIjZGVmaW5lIGxzdGF0IHN0YXQiLCBhbmQgbHN0YXQuYyBpcyBhIG5vLW9wLgorICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbbHN0YXRdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdCA9IHllczsgdGhlbgorLSAgICBBQ19SRVFVSVJFKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSkKKy0gICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCisrICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IG5vOyB0aGVuCisrICAgICAgZG5sIE5vdGU6IEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgZG9lcyBBQ19MSUJPQkooW2xzdGF0XSkuCisgICAgICAgUkVQTEFDRV9MU1RBVD0xCisgICAgIGZpCisrICAgICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbHN0YXQuYy4KKysgICAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorICAgZWxzZQorICAgICBIQVZFX0xTVEFUPTAKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xzdGF0LmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9MU1RBVF0sCisrIyBSZWRlZmluZSBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlcgorKyMgbWFpbnRhaW5lZCBpbiBBdXRvY29uZi4KKytBQ19ERUZVTihbQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sCisgWworLSAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorLSAgOgorLV0pCistCistQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLAorLVsKKy0gIGRubCBXZSBkb24ndCB1c2UgQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSyBhbnkgbW9yZSwgYmVjYXVzZSBpdAorLSAgZG5sIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGluIEF1dG9jb25mIGFuZCBiZWNhdXNlIGl0IGludm9rZXMgQUNfTElCT0JKLgorICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2hdLAorLSAgICBbZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rXSwKKysgICAgW2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGlua10sCisgICAgIFtybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQorICAgICAgZWNobyA+Y29uZnRlc3QuZmlsZQorICAgICAgaWYgdGVzdCAiJGFzX2xuX3MiID0gImxuIC1zIiAmJiBsbiAtcyBjb25mdGVzdC5maWxlIGNvbmZ0ZXN0LnN5bTsgdGhlbgorQEAgLTQ5LDIyICs0NSwyNSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfCisgICAgICAgICAgICAgICAgICBoYXZlIHRvIGNvbXBpbGUgYW5kIHVzZSB0aGUgbHN0YXQgd3JhcHBlci4gICovCisgICAgICAgICAgICAgICByZXR1cm4gbHN0YXQgKCJjb25mdGVzdC5zeW0vIiwgJnNidWYpID09IDA7CisgICAgICAgICAgICAgXV0pXSwKKy0gICAgICAgICBbZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc10sCistICAgICAgICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ub10sCisrICAgICAgICAgW2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXNdLAorKyAgICAgICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm9dLAorICAgICAgICAgIFsjIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCBiZSBwZXNzaW1pc3RpYyBzbyB3ZSB3aWxsIGVuZCB1cCB1c2luZyB0aGUKKyAgICAgICAgICAgIyByZXBsYWNlbWVudCB2ZXJzaW9uIG9mIGxzdGF0IHRoYXQgY2hlY2tzIGZvciB0cmFpbGluZyBzbGFzaGVzIGFuZAorICAgICAgICAgICAjIGNhbGxzIGxzdGF0IGEgc2Vjb25kIHRpbWUgd2hlbiBuZWNlc3NhcnkuCistICAgICAgICAgIGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworKyAgICAgICAgICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKyAgICAgICAgICBdKQorICAgICAgZWxzZQorICAgICAgICAjIElmIHRoZSAnbG4gLXMnIGNvbW1hbmQgZmFpbGVkLCB0aGVuIHdlIHByb2JhYmx5IGRvbid0IGV2ZW4KKyAgICAgICAgIyBoYXZlIGFuIGxzdGF0IGZ1bmN0aW9uLgorLSAgICAgICBnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKysgICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKKyAgICAgXSkKKy0gIHRlc3QgJGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorKyAgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0geWVzICYmCisgICAgIEFDX0RFRklORV9VTlFVT1RFRChbTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLCBbMV0sCisgICAgICAgW0RlZmluZSB0byAxIGlmIGBsc3RhdCcgZGVyZWZlcmVuY2VzIGEgc3ltbGluayBzcGVjaWZpZWQKKyAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLl0pCisrICBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPSB4bm87IHRoZW4KKysgICAgQUNfTElCT0JKKFtsc3RhdF0pCisrICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbWVtbW92ZS5tNCBsaWJpY29udi0xLjE0L3NyY200L21lbW1vdmUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbWVtbW92ZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvbWVtbW92ZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjczODQ4NDQ3NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBtZW1tb3ZlLm00IHNlcmlhbCA0CisrIyBtZW1tb3ZlLm00IHNlcmlhbCAzCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTYsNyArNiwxMCBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgCisgQUNfREVGVU4oW2dsX0ZVTkNfTUVNTU9WRV0sCisgWworLSAgQUNfQ0hFQ0tfRlVOQ1MoW21lbW1vdmVdKQorKyAgQUNfUkVQTEFDRV9GVU5DUyhbbWVtbW92ZV0pCisrICBpZiB0ZXN0ICRhY19jdl9mdW5jX21lbW1vdmUgPSBubzsgdGhlbgorKyAgICBnbF9QUkVSRVFfTUVNTU9WRQorKyAgZmkKKyBdKQorIAorICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtbW92ZS5jLgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BhdGhtYXgubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9wYXRobWF4Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BhdGhtYXgubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3BhdGhtYXgubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43NTg0ODQ0NzggLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcGF0aG1heC5tNCBzZXJpYWwgOQorKyMgcGF0aG1heC5tNCBzZXJpYWwgOAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIGRubCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitAQCAtOCw1ICs4LDYgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIEFDX0RFRlVOKFtnbF9QQVRITUFYXSwKKyBbCisgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcGF0aG1heC5oLgorKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcGF0aGNvbmZdKQorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvcGFyYW0uaF0pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wby5tNCBsaWJpY29udi0xLjE0L3NyY200L3BvLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BvLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9wby5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc2NjQ4NDQ3NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBwby5tNCBzZXJpYWwgMTdhCisrIyBwby5tNCBzZXJpYWwgMTcgKGdldHRleHQtMC4xOCkKKyBkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTE4LDggKzExOCw3IEBAIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorLSAgICAgICAgICBndF90YWI9YHByaW50ZiAnXHQnYAorLSAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bICR7Z3RfdGFifV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKysgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iUE9URklMRVMuaW4iCisgICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCisgICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KK0BAIC0yNTUsNyArMjU0LDYgQEAgRU9UCisgICBmaQorIAorICAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorLSAgdGFiPWBwcmludGYgJ1x0J2AKKyAgIHNlZF94X3ZhcmlhYmxlPScKKyAjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisgeAorQEAgLTI2Myw5ICsyNjEsOSBAQCBzL1AvUC8KKyB4CisgdGEKKyAjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy0vXlsnIiR7dGFifSInIF0qVkFSSUFCTEVbJyIke3RhYn0iJyBdKj0veworKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisgICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCistICBzL15bJyIke3RhYn0iJyBdKlZBUklBQkxFWyciJHt0YWJ9IicgXSo9Ly8KKysgIHMvXlsJIF0qVkFSSUFCTEVbCSBdKj0vLworICAgYmEKKyB9CisgYmQKK0BAIC00MDcsMTUgKzQwNSwxNCBAQCBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICBmaQorIAorICAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorLSAgdGFiPWBwcmludGYgJ1x0J2AKKyAgIGlmIGdyZXAgLWwgJ0BUQ0xDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorICRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCistJHt0YWJ9QGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCistJHt0YWJ9XCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorIEVPRgorICAgICBkb25lCisgICBmaQorQEAgLTQyNSw4ICs0MjIsOCBAQCBFT0YKKyAgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsOiAkbGFuZy5wbworLSR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCistJHt0YWJ9XCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKyBFT0YKKyAgICAgZG9uZQorICAgZmkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkbGluay5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlYWRsaW5rLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWRsaW5rLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkbGluay5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc5MDQ4NDQ3OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWFkbGluay5tNCBzZXJpYWwgMTEKKysjIHJlYWRsaW5rLm00IHNlcmlhbCAxMAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMCw2ICsxMCw4IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURMSU5LXSwKKyAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3JlYWRsaW5rXSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhZGxpbmsgPSBubzsgdGhlbgorICAgICBIQVZFX1JFQURMSU5LPTAKKysgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCisrICAgIGdsX1BSRVJFUV9SRUFETElOSworICAgZWxzZQorICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciByZWFkbGluayBzaWduYXR1cmUgaXMgY29ycmVjdF0sCisgICAgICAgW2dsX2N2X2RlY2xfcmVhZGxpbmtfd29ya3NdLAorQEAgLTM4LDggKzQwLDEwIEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURMSU5LXSwKKyAgICAgICBBQ19ERUZJTkUoW1JFQURMSU5LX1RSQUlMSU5HX1NMQVNIX0JVR10sIFsxXSwgW0RlZmluZSB0byAxIGlmIHJlYWRsaW5rCisgICAgICAgICBmYWlscyB0byByZWNvZ25pemUgYSB0cmFpbGluZyBzbGFzaC5dKQorICAgICAgIFJFUExBQ0VfUkVBRExJTks9MQorKyAgICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorICAgICBlbGlmIHRlc3QgIiRnbF9jdl9kZWNsX3JlYWRsaW5rX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1JFQURMSU5LPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKyAgICAgZmkKKyAgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVhZC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzgyNDg0NDc4IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHJlYWQubTQgc2VyaWFsIDIKKysjIHJlYWQubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTE0LDYgKzE0LDcgQEAgQUNfREVGVU4oW2dsX0ZVTkNfUkVBRF0sCisgICAgIGdsX05PTkJMT0NLSU5HX0lPCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfbm9uYmxvY2tpbmcgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFEPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRdKQorICAgICBmaQorICAgXSkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc5ODQ4NDQ4MCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWxvY2F0YWJsZS1saWIubTQgc2VyaWFsIDYKKysjIHJlbG9jYXRhYmxlLWxpYi5tNCBzZXJpYWwgNQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEwLDYgKzEwLDkgQEAgZG5sIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIGxpYnJhcmllcy4KKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSkKKysgIGlmIHRlc3QgJFJFTE9DQVRBQkxFID0geWVzOyB0aGVuCisrICAgIEFDX0xJQk9CSihbcmVsb2NhdGFibGVdKQorKyAgZmkKKyBdKQorIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldLAorIFsKK0BAIC0yOSw2ICszMiwxMyBAQCBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSwKKyAgIGZpCisgXSkKKyAKKytkbmwgTGlrZSBnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24KKytkbmwgKG5vIEFDX0xJQk9CSikuCisrQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfU0VQQVJBVEVdLAorK1sKKysgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0pCisrXSkKKysKKyBkbmwgU3VwcG9ydCBmb3IgcmVsb2NhdGFibGUgcGFja2FnZXMgZm9yIHdoaWNoIGl0IGlzIGEgbm9wLgorIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9OT1BdLAorIFsKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgwMjQ4NDQ3OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWxvY2F0YWJsZS5tNCBzZXJpYWwgMTcKKysjIHJlbG9jYXRhYmxlLm00IHNlcmlhbCAxNgorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTE0LDYgKzE0LDkgQEAgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9CT0RZXSkKKyAgIGdsX1JFTE9DQVRBQkxFX0xJQlJBUlkKKysgIGlmIHRlc3QgJFJFTE9DQVRBQkxFID0geWVzOyB0aGVuCisrICAgIEFDX0xJQk9CSihbcHJvZ3JlbG9jXSkKKysgIGZpCisgICA6ICR7UkVMT0NBVEFCTEVfQ09ORklHX0hfRElSPSckKHRvcF9idWlsZGRpciknfQorICAgUkVMT0NBVEFCTEVfU1JDX0RJUj0iXCQodG9wX3NyY2RpcikvJGdsX3NvdXJjZV9iYXNlIgorICAgUkVMT0NBVEFCTEVfQlVJTERfRElSPSJcJCh0b3BfYnVpbGRkaXIpLyRnbF9zb3VyY2VfYmFzZSIKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zYWZlLXJlYWQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zYWZlLXJlYWQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2FmZS1yZWFkLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zYWZlLXJlYWQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MTA0ODQ0ODAgLTA4MDAKK0BAIC0xLDEwICsxLDE3IEBACistIyBzYWZlLXJlYWQubTQgc2VyaWFsIDYKKysjIHNhZmUtcmVhZC5tNCBzZXJpYWwgNQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIGRubCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKytBQ19ERUZVTihbZ2xfU0FGRV9SRUFEXSwKKytbCisrICBBQ19MSUJPQkooW3NhZmUtcmVhZF0pCisrCisrICBnbF9QUkVSRVFfU0FGRV9SRUFECisrXSkKKysKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3NhZmUtcmVhZC5jLgorIEFDX0RFRlVOKFtnbF9QUkVSRVFfU0FGRV9SRUFEXSwKKyBbCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2V0ZW52Lm00IGxpYmljb252LTEuMTQvc3JjbTQvc2V0ZW52Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NldGVudi5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2V0ZW52Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuODE4NDg0NDgxIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNldGVudi5tNCBzZXJpYWwgMjQKKysjIHNldGVudi5tNCBzZXJpYWwgMjIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0zOCw2ICszOCw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1NFVEVOVl0sCisgICAgICAgUkVQTEFDRV9TRVRFTlY9MQorICAgICBmaQorICAgZmkKKysgIGlmIHRlc3QgJEhBVkVfU0VURU5WJFJFUExBQ0VfU0VURU5WICE9IDEwOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc2V0ZW52XSkKKysgIGZpCisgXSkKKyAKKyAjIExpa2UgZ2xfRlVOQ19TRVRFTlYsIGV4Y2VwdCBwcmVwYXJlIGZvciBzZXBhcmF0ZSBjb21waWxhdGlvbgorQEAgLTYyLDkgKzY1LDkgQEAgQUNfREVGVU4oW2dsX0ZVTkNfVU5TRVRFTlZdLAorICAgZmkKKyAgIEFDX0NIRUNLX0ZVTkNTKFt1bnNldGVudl0pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Vuc2V0ZW52ID0gbm87IHRoZW4KKy0gICAgSEFWRV9VTlNFVEVOVj0wCisrICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorKyAgICBnbF9QUkVSRVFfVU5TRVRFTlYKKyAgIGVsc2UKKy0gICAgSEFWRV9VTlNFVEVOVj0xCisgICAgIGRubCBTb21lIEJTRHMgcmV0dXJuIHZvaWQsIGZhaWxpbmcgdG8gZG8gZXJyb3IgY2hlY2tpbmcuCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdW5zZXRlbnYoKSByZXR1cm4gdHlwZV0sIFtndF9jdl9mdW5jX3Vuc2V0ZW52X3JldF0sCisgICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorQEAgLTkwLDYgKzkzLDcgQEAgaW50IHVuc2V0ZW52KCk7CisgICAgICAgQUNfREVGSU5FKFtWT0lEX1VOU0VURU5WXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgdW5zZXRlbnYgcmV0dXJucyB2b2lkCisgICAgICAgIGluc3RlYWQgb2YgaW50Ll0pCisgICAgICAgUkVQTEFDRV9VTlNFVEVOVj0xCisrICAgICAgQUNfTElCT0JKKFt1bnNldGVudl0pCisgICAgIGZpCisgCisgICAgIGRubCBTb2xhcmlzIDEwIHVuc2V0ZW52IGRvZXMgbm90IHJlbW92ZSBhbGwgY29waWVzIG9mIGEgbmFtZS4KK0BAIC0xMjIsNiArMTI2LDcgQEAgaW50IHVuc2V0ZW52KCk7CisgICAgICAgW2dsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9Imd1ZXNzaW5nIG5vIl0pXSkKKyAgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3MiICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfVU5TRVRFTlY9MQorKyAgICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorICAgICBmaQorICAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbGJsb2NraW5nLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbGJsb2NraW5nLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODM0NDg0NDgyIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNpZ25hbGJsb2NraW5nLm00IHNlcmlhbCAxMgorKyMgc2lnbmFsYmxvY2tpbmcubTQgc2VyaWFsIDEwCisgZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTIsMTQgKzEyLDMxIEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfU0lHTkFMQkxPQ0tJTkddLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdKQorLSAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCA9IHllczsgdGhlbgorKyAgc2lnbmFsc19ub3RfcG9zaXg9CisrICBBQ19FR1JFUF9IRUFERVIoW3NpZ3NldF90XSwgW3NpZ25hbC5oXSwgLCBbc2lnbmFsc19ub3RfcG9zaXg9MV0pCisrICBpZiB0ZXN0IC16ICIkc2lnbmFsc19ub3RfcG9zaXgiOyB0aGVuCisgICAgIEFDX0NIRUNLX0ZVTkMoW3NpZ3Byb2NtYXNrXSwgW2dsX2N2X2Z1bmNfc2lncHJvY21hc2s9MV0pCisgICBmaQorICAgaWYgdGVzdCAteiAiJGdsX2N2X2Z1bmNfc2lncHJvY21hc2siOyB0aGVuCisgICAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MAorKyAgICBBQ19MSUJPQkooW3NpZ3Byb2NtYXNrXSkKKysgICAgZ2xfUFJFUkVRX1NJR1BST0NNQVNLCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zaWdwcm9jbWFzay5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU0lHUFJPQ01BU0tdLCBbOl0pCisrIyBQcmVyZXF1aXNpdGVzIG9mIHRoZSBwYXJ0IG9mIGxpYi9zaWduYWwuaW4uaCBhbmQgb2YgbGliL3NpZ3Byb2NtYXNrLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9TSUdQUk9DTUFTS10sCisrWworKyAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorKyAgQUNfQ0hFQ0tfVFlQRVMoW3NpZ3NldF90XSwKKysgICAgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9eWVzXSwgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9bm9dLAorKyAgICBbI2luY2x1ZGUgPHNpZ25hbC5oPgorKy8qIE1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSkKKysgIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgIT0geWVzOyB0aGVuCisrICAgIEhBVkVfU0lHU0VUX1Q9MAorKyAgZmkKKysgIGRubCBIQVZFX1NJR1NFVF9UIGlzIDEgaWYgdGhlIHN5c3RlbSBsYWNrcyB0aGUgc2lncHJvY21hc2sgZnVuY3Rpb24gYnV0IGhhcworKyAgZG5sIHRoZSBzaWdzZXRfdCB0eXBlLgorKyAgQUNfU1VCU1QoW0hBVkVfU0lHU0VUX1RdKQorK10pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsX2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxfaC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxfaC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsX2gubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MjY0ODQ0ODAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2lnbmFsX2gubTQgc2VyaWFsIDE2CisrIyBzaWduYWxfaC5tNCBzZXJpYWwgMTIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtNyw3ICs3LDYgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0pCisgICBnbF9ORVhUX0hFQURFUlMoW3NpZ25hbC5oXSkKKyAKKyAjIEFJWCBkZWNsYXJlcyBzaWdfYXRvbWljX3QgdG8gYWxyZWFkeSBpbmNsdWRlIHZvbGF0aWxlLCBhbmQgQzg5IGNvbXBpbGVycworQEAgLTI4LDI1ICsyNywxMCBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX0hdLAorICAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCisgICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHNpZ25hbC5oPgorLSAgICBdXSwgW3B0aHJlYWRfc2lnbWFzayBzaWdhY3Rpb24KKy0gICAgc2lnYWRkc2V0IHNpZ2RlbHNldCBzaWdlbXB0eXNldCBzaWdmaWxsc2V0IHNpZ2lzbWVtYmVyCisrICAgIF1dLCBbc2lnYWN0aW9uIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdpc21lbWJlcgorICAgICBzaWdwZW5kaW5nIHNpZ3Byb2NtYXNrXSkKKyBdKQorIAorLUFDX0RFRlVOKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSwKKy1bCistICBBQ19DSEVDS19UWVBFUyhbc2lnc2V0X3RdLAorLSAgICBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD15ZXNdLCBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD1ub10sCistICAgIFtbCistICAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPgorLSAgICAgIC8qIE1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKy0gICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistICAgIF1dKQorLSAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCAhPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9TSUdTRVRfVD0wCistICBmaQorLV0pCistCisgQUNfREVGVU4oW2dsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SXSwKKyBbCisgICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorQEAgLTU4LDEzICs0MiwxMSBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1JdLAorIAorIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10sCisgWworLSAgR05VTElCX1BUSFJFQURfU0lHTUFTSz0wOyAgICBBQ19TVUJTVChbR05VTElCX1BUSFJFQURfU0lHTUFTS10pCisgICBHTlVMSUJfU0lHTkFMX0hfU0lHUElQRT0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHTkFMX0hfU0lHUElQRV0pCisgICBHTlVMSUJfU0lHUFJPQ01BU0s9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHUFJPQ01BU0tdKQorICAgR05VTElCX1NJR0FDVElPTj0wOyAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1NJR0FDVElPTl0pCisgICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICAgSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORz0xOyBBQ19TVUJTVChbSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR10pCistICBIQVZFX1BUSFJFQURfU0lHTUFTSz0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX1BUSFJFQURfU0lHTUFTS10pCisgICBIQVZFX1NJR1NFVF9UPTE7ICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR1NFVF9UXSkKKyAgIEhBVkVfU0lHSU5GT19UPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHSU5GT19UXSkKKyAgIEhBVkVfU0lHQUNUSU9OPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHQUNUSU9OXSkKK0BAIC03Myw1ICs1NSw0IEBAIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10sCisgICBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UPTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UXSkKKyAgIEhBVkVfU0lHSEFORExFUl9UPTE7ICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHSEFORExFUl9UXSkKKy0gIFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLPTA7ICAgQUNfU1VCU1QoW1JFUExBQ0VfUFRIUkVBRF9TSUdNQVNLXSkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0YXQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zdGF0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0YXQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0YXQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44NTQ0ODQ0ODMgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDgKKysjIHNlcmlhbCA3CisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtNTgsMTEgKzU4LDkgQEAgQUNfREVGVU4oW2dsX0ZVTkNfU1RBVF0sCisgICAgICAgQUNfREVGSU5FKFtSRVBMQUNFX0ZVTkNfU1RBVF9GSUxFXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgc3RhdCBuZWVkcworICAgICAgICAgaGVscCB3aGVuIHBhc3NlZCBhIGZpbGUgbmFtZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2hdKTs7CisgICBlc2FjCistXSkKKy0KKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0YXQuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NUQVRdLAorLVsKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0gIDoKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RBVCA9IDE7IHRoZW4KKysgICAgQUNfTElCT0JKKFtzdGF0XSkKKysgICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0YXQuYy4KKysgICAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorKyAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmVycm9yLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RyZXJyb3IubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyZXJyb3IubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0cmVycm9yLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODkwNDg0NDg0IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHN0cmVycm9yLm00IHNlcmlhbCAxNgorKyMgc3RyZXJyb3IubTQgc2VyaWFsIDkKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtNiw3MyArNiw2MyBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgCisgQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JdLAorIFsKKysgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEVdKQorKyAgaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKysgICAgQUNfTElCT0JKKFtzdHJlcnJvcl0pCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChbUkVQTEFDRV9TVFJFUlJPUl0sIFskUkVQTEFDRV9TVFJFUlJPUl0sCisrICAgICAgW0RlZmluZSB0aGlzIHRvIDEgaWYgc3RyZXJyb3IgaXMgYnJva2VuLl0pCisrICBmaQorK10pCisrCisrIyBMaWtlIGdsX0ZVTkNfU1RSRVJST1IsIGV4Y2VwdCBwcmVwYXJlIGZvciBzZXBhcmF0ZSBjb21waWxhdGlvbiAobm8gQUNfTElCT0JKKS4KKytBQ19ERUZVTihbZ2xfRlVOQ19TVFJFUlJPUl9TRVBBUkFURV0sCisrWworICAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9FUlJOT19IXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCistICBtNF9pZmRlZihbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSwgWworLSAgICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdKQorLSAgXSkKKy0gIGlmIHRlc3QgIiRFUlJOT19IOiRSRVBMQUNFX1NUUkVSUk9SXzAiID0gOjA7IHRoZW4KKysgIGlmIHRlc3QgLXogIiRFUlJOT19IIjsgdGhlbgorICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgc3RyZXJyb3IgZnVuY3Rpb25dLAorICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcl0sCisgICAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgIF1dLAorLSAgICAgICAgICAgW1tpZiAoISpzdHJlcnJvciAoLTIpKSByZXR1cm4gMTtdXSldLAorKyAgICAgICAgICAgW1tyZXR1cm4gISpzdHJlcnJvciAoLTIpO11dKV0sCisgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPXllc10sCisgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPW5vXSwKKy0gICAgICAgIFtkbmwgQmUgcGVzc2ltaXN0aWMgb24gY3Jvc3MtY29tcGlsZXMgZm9yIG5vdy4KKy0gICAgICAgICBnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9Imd1ZXNzaW5nIG5vIl0pCisrICAgICAgICBbZG5sIEFzc3VtZSBjcm9zc2J1aWxkIHdvcmtzIGlmIGl0IGNvbXBpbGVzLgorKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorKyAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKysgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorKyAgICAgICAgICAgICAgXV0sCisrICAgICAgICAgICAgICBbW3JldHVybiAhKnN0cmVycm9yICgtMik7XV0pXSwKKysgICAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9eWVzXSwKKysgICAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9bm9dKQorKyAgICAgIF0pCisgICAgIF0pCistICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IiICE9IHllczsgdGhlbgorKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IgPSBubzsgdGhlbgorICAgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBmYWlscyB0byByZXR1cm4gYSBzdHJpbmcgZm9yIG91dC1vZi1yYW5nZQorICAgICAgIGRubCBpbnRlZ2Vycy4gUmVwbGFjZSBpdC4KKyAgICAgICBSRVBMQUNFX1NUUkVSUk9SPTEKKyAgICAgZmkKKy0gICAgbTRfaWZkZWYoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sIFsKKy0gICAgICBkbmwgSWYgdGhlIHN5c3RlbSdzIHN0cmVycm9yX3Igb3IgX194cGdfc3RyZXJyb3JfciBjbG9iYmVycyBzdHJlcnJvcidzCistICAgICAgZG5sIGJ1ZmZlciwgd2UgbXVzdCByZXBsYWNlIHN0cmVycm9yLgorLSAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiIGluCistICAgICAgICAqbm8pIFJFUExBQ0VfU1RSRVJST1I9MSA7OworLSAgICAgIGVzYWMKKy0gICAgXSkKKyAgIGVsc2UKKyAgICAgZG5sIFRoZSBzeXN0ZW0ncyBzdHJlcnJvcigpIGNhbm5vdCBrbm93IGFib3V0IHRoZSBuZXcgZXJybm8gdmFsdWVzIHdlIGFkZAorLSAgICBkbmwgdG8gPGVycm5vLmg+LCBvciBhbnkgZml4IGZvciBzdHJlcnJvcigwKS4gUmVwbGFjZSBpdC4KKysgICAgZG5sIHRvIDxlcnJuby5oPi4gUmVwbGFjZSBpdC4KKyAgICAgUkVQTEFDRV9TVFJFUlJPUj0xCisgICBmaQorKyAgaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKysgICAgZ2xfUFJFUkVRX1NUUkVSUk9SCisrICBmaQorIF0pCisgCistZG5sIERldGVjdCBpZiBzdHJlcnJvcigwKSBwYXNzZXMgKHRoYXQgaXMsIGRvZXMgbm90IHNldCBlcnJubywgYW5kIGRvZXMgbm90CistZG5sIHJldHVybiBhIHN0cmluZyB0aGF0IG1hdGNoZXMgc3RyZXJyb3IoLTEpKS4KKy1BQ19ERUZVTihbZ2xfRlVOQ19TVFJFUlJPUl8wXSwKKy1bCistICBSRVBMQUNFX1NUUkVSUk9SXzA9MAorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3RyZXJyb3IoMCkgc3VjY2VlZHNdLAorLSAgIFtnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3NdLAorLSAgIFtBQ19SVU5fSUZFTFNFKAorLSAgICAgIFtBQ19MQU5HX1BST0dSQU0oCistICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CistICAgICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKy0gICAgICAgICBdXSwKKy0gICAgICAgICBbW2ludCByZXN1bHQgPSAwOworLSAgICAgICAgICAgY2hhciAqc3RyOworLSAgICAgICAgICAgZXJybm8gPSAwOworLSAgICAgICAgICAgc3RyID0gc3RyZXJyb3IgKDApOworLSAgICAgICAgICAgaWYgKCEqc3RyKSByZXN1bHQgfD0gMTsKKy0gICAgICAgICAgIGlmIChlcnJubykgcmVzdWx0IHw9IDI7CistICAgICAgICAgICBpZiAoc3Ryc3RyIChzdHIsICJua25vd24iKSB8fCBzdHJzdHIgKHN0ciwgIm5kZWZpbmVkIikpCistICAgICAgICAgICAgIHJlc3VsdCB8PSA0OworLSAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtdXSldLAorLSAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9eWVzXSwKKy0gICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPW5vXSwKKy0gICAgICBbZG5sIEJlIHBlc3NpbWlzdGljIG9uIGNyb3NzLWNvbXBpbGVzIGZvciBub3cuCistICAgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz0iZ3Vlc3Npbmcgbm8iXSkKKy0gIF0pCistICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKy0gICAgUkVQTEFDRV9TVFJFUlJPUl8wPTEKKy0gICAgQUNfREVGSU5FKFtSRVBMQUNFX1NUUkVSUk9SXzBdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcigwKQorLSAgICAgIGRvZXMgbm90IHJldHVybiBhIG1lc3NhZ2UgaW1wbHlpbmcgc3VjY2Vzcy5dKQorKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyZXJyb3IuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1NUUkVSUk9SXSwgWworKyAgQUNfQ0hFQ0tfREVDTFMoW3N0cmVycm9yXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3NvY2tldC5oXSkKKysgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggIT0geWVzOyB0aGVuCisrICAgIGRubCBXZSBjYW5ub3QgdXNlIEFDX0NIRUNLX0hFQURFUlNfT05DRSBoZXJlLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZQorKyAgICBkbmwgdGhlIGNoZWNrIGZvciB0aG9zZSBoZWFkZXJzIHVuY29uZGl0aW9uYWw7IHlldCBjeWd3aW4gcmVwb3J0cworKyAgICBkbmwgdGhhdCB0aGUgaGVhZGVycyBhcmUgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIChzaW5jZSBvbgorKyAgICBkbmwgY3lnd2luLCBhbGwgc29ja2V0IGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gc3lzL3NvY2tldC5oKS4KKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhbd2luc29jazIuaF0pCisgICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyaW5nX2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJpbmdfaC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJpbmdfaC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3RyaW5nX2gubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44OTQ0ODQ0ODUgLTA4MDAKK0BAIC01LDcgKzUsNyBAQAorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCAyMQorKyMgc2VyaWFsIDIwCisgCisgIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorIAorQEAgLTI3LDkgKzI3LDkgQEAgQUNfREVGVU4oW2dsX0hFQURFUl9TVFJJTkdfSF9CT0RZXSwKKyAgIGRubCBndWFyYW50ZWVkIGJ5IEM4OS4KKyAgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgIF1dLAorLSAgICBbZmZzbCBmZnNsbCBtZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBzdHBjcHkgc3RwbmNweSBzdHJjaHJudWwKKy0gICAgIHN0cmR1cCBzdHJuY2F0IHN0cm5kdXAgc3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yCistICAgICBzdHJlcnJvcl9yIHN0cnNpZ25hbCBzdHJ2ZXJzY21wXSkKKysgICAgW21lbW1lbSBtZW1wY3B5IG1lbXJjaHIgcmF3bWVtY2hyIHN0cGNweSBzdHBuY3B5IHN0cmNocm51bCBzdHJkdXAKKysgICAgIHN0cm5jYXQgc3RybmR1cCBzdHJubGVuIHN0cnBicmsgc3Ryc2VwIHN0cmNhc2VzdHIgc3RydG9rX3Igc3RyZXJyb3JfcgorKyAgICAgc3Ryc2lnbmFsIHN0cnZlcnNjbXBdKQorIF0pCisgCisgQUNfREVGVU4oW2dsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SXSwKK0BAIC00Myw4ICs0Myw2IEBAIEFDX0RFRlVOKFtnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUl0sCisgCisgQUNfREVGVU4oW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10sCisgWworLSAgR05VTElCX0ZGU0w9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZTTF0pCistICBHTlVMSUJfRkZTTEw9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GRlNMTF0pCisgICBHTlVMSUJfTUVNQ0hSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1DSFJdKQorICAgR05VTElCX01FTU1FTT0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNTUVNXSkKKyAgIEdOVUxJQl9NRU1QQ1BZPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01FTVBDUFldKQorQEAgLTgyLDggKzgwLDYgQEAgQUNfREVGVU4oW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10sCisgICBHTlVMSUJfU1RSVkVSU0NNUD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9TVFJWRVJTQ01QXSkKKyAgIEhBVkVfTUJTTEVOPTA7ICAgICAgICBBQ19TVUJTVChbSEFWRV9NQlNMRU5dKQorICAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKy0gIEhBVkVfRkZTTD0xOyAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xdKQorLSAgSEFWRV9GRlNMTD0xOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkZTTExdKQorICAgSEFWRV9NRU1DSFI9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNQ0hSXSkKKyAgIEhBVkVfREVDTF9NRU1NRU09MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfTUVNTUVNXSkKKyAgIEhBVkVfTUVNUENQWT0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01FTVBDUFldKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N5c19zb2NrZXRfaC5tNCBsaWJpY29udi0xLjE0L3NyY200L3N5c19zb2NrZXRfaC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zeXNfc29ja2V0X2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N5c19zb2NrZXRfaC5tNAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTc3ICswLDAgQEAKKy0jIHN5c19zb2NrZXRfaC5tNCBzZXJpYWwgMjIKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCistZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCistZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy1kbmwgRnJvbSBTaW1vbiBKb3NlZnNzb24uCistCistQUNfREVGVU4oW2dsX0hFQURFUl9TWVNfU09DS0VUXSwKKy1bCistICBBQ19SRVFVSVJFKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdKQorLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorLQorLSAgZG5sIE9uIE9TRi8xLCB0aGUgZnVuY3Rpb25zIHJlY3YoKSwgc2VuZCgpLCByZWN2ZnJvbSgpLCBzZW5kdG8oKSBoYXZlCistICBkbmwgb2xkLXN0eWxlIGRlY2xhcmF0aW9ucyAod2l0aCByZXR1cm4gdHlwZSAnaW50JyBpbnN0ZWFkIG9mICdzc2l6ZV90JykKKy0gIGRubCB1bmxlc3MgX1BPU0lYX1BJSV9TT0NLRVQgaXMgZGVmaW5lZC4KKy0gIGNhc2UgIiRob3N0X29zIiBpbgorLSAgICBvc2YqKQorLSAgICAgIEFDX0RFRklORShbX1BPU0lYX1BJSV9TT0NLRVRdLCBbMV0sCistICAgICAgICBbRGVmaW5lIHRvIDEgaW4gb3JkZXIgdG8gZ2V0IHRoZSBQT1NJWCBjb21wYXRpYmxlIGRlY2xhcmF0aW9ucworLSAgICAgICAgIG9mIHNvY2tldCBmdW5jdGlvbnMuXSkKKy0gICAgICA7OworLSAgZXNhYworLQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgPHN5cy9zb2NrZXQuaD4gaXMgc2VsZi1jb250YWluZWRdLAorLSAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkXSwKKy0gICAgWworLSAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbW11dKV0sCistICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkPXllc10sCistICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkPW5vXSkKKy0gICAgXSkKKy0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZCA9IHllczsgdGhlbgorLSAgICBkbmwgSWYgdGhlIHNodXRkb3duIGZ1bmN0aW9uIGV4aXN0cywgPHN5cy9zb2NrZXQuaD4gc2hvdWxkIGRlZmluZQorLSAgICBkbmwgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9SRFdSLgorLSAgICBBQ19DSEVDS19GVU5DUyhbc2h1dGRvd25dKQorLSAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NodXRkb3duID0geWVzOyB0aGVuCistICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgPHN5cy9zb2NrZXQuaD4gZGVmaW5lcyB0aGUgU0hVVF8qIG1hY3Jvc10sCistICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0XSwKKy0gICAgICAgIFsKKy0gICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sCistICAgICAgICAgICAgICAgW1tpbnQgYVtdID0geyBTSFVUX1JELCBTSFVUX1dSLCBTSFVUX1JEV1IgfTtdXSldLAorLSAgICAgICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQ9eWVzXSwKKy0gICAgICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PW5vXSkKKy0gICAgICAgIF0pCistICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0ID0gbm87IHRoZW4KKy0gICAgICAgIFNZU19TT0NLRVRfSD0nc3lzL3NvY2tldC5oJworLSAgICAgIGZpCistICAgIGZpCistICBmaQorLSAgIyBXZSBuZWVkIHRvIGNoZWNrIGZvciB3czJ0Y3BpcC5oIG5vdy4KKy0gIGdsX1BSRVJFUV9TWVNfSF9TT0NLRVQKKy0gIEFDX0NIRUNLX1RZUEVTKFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwgc2FfZmFtaWx5X3RdLCwsWworLSAgLyogc3lzL3R5cGVzLmggaXMgbm90IG5lZWRlZCBhY2NvcmRpbmcgdG8gUE9TSVgsIGJ1dCB0aGUKKy0gICAgIHN5cy9zb2NrZXQuaCBpbiBpMzg2LXVua25vd24tZnJlZWJzZDQuMTAgYW5kCistICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUuNSByZXF1aXJlZCBpdC4gKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jZW5kaWYKKy0jaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICistI2luY2x1ZGUgPHdzMnRjcGlwLmg+CistI2VuZGlmCistXSkKKy0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgPSBubzsgdGhlbgorLSAgICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTAKKy0gIGZpCistICBpZiB0ZXN0ICRhY19jdl90eXBlX3NhX2ZhbWlseV90ID0gbm87IHRoZW4KKy0gICAgSEFWRV9TQV9GQU1JTFlfVD0wCistICBmaQorLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSAhPSBubzsgdGhlbgorLSAgICBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHldLAorLSAgICAgIFtdLAorLSAgICAgIFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWT0wXSwKKy0gICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSAgICAgICAjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKy0gICAgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0gICAgICAgI2VuZGlmCistICAgICAgICNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKy0gICAgICAgI2luY2x1ZGUgPHdzMnRjcGlwLmg+CistICAgICAgICNlbmRpZgorLSAgICAgIF0pCistICBmaQorLSAgaWYgdGVzdCAkSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSA9IDAgfHwgdGVzdCAkSEFWRV9TQV9GQU1JTFlfVCA9IDAgXAorLSAgICAgfHwgdGVzdCAkSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkgPSAwOyB0aGVuCistICAgIFNZU19TT0NLRVRfSD0nc3lzL3NvY2tldC5oJworLSAgZmkKKy0gIGdsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMgorLQorLSAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCistICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCistICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbCistLyogU29tZSBzeXN0ZW1zIHJlcXVpcmUgcHJlcmVxdWlzaXRlIGhlYWRlcnMuICAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSAgICBdXSwgW3NvY2tldCBjb25uZWN0IGFjY2VwdCBiaW5kIGdldHBlZXJuYW1lIGdldHNvY2tuYW1lIGdldHNvY2tvcHQKKy0gICAgbGlzdGVuIHJlY3Ygc2VuZCByZWN2ZnJvbSBzZW5kdG8gc2V0c29ja29wdCBzaHV0ZG93biBhY2NlcHQ0XSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1lTX0hfU09DS0VUXSwKKy1bCistICBkbmwgQ2hlY2sgcHJlcmVxdWlzaXRlcyBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gcmVwbGFjZW1lbnQuCistICBBQ19SRVFVSVJFKFtnbF9DSEVDS19TT0NLRVRfSEVBREVSU10pCistICBnbF9DSEVDS19ORVhUX0hFQURFUlMoW3N5cy9zb2NrZXQuaF0pCistICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oID0geWVzOyB0aGVuCistICAgIEhBVkVfU1lTX1NPQ0tFVF9IPTEKKy0gICAgSEFWRV9XUzJUQ1BJUF9IPTAKKy0gIGVsc2UKKy0gICAgSEFWRV9TWVNfU09DS0VUX0g9MAorLSAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCA9IHllczsgdGhlbgorLSAgICAgIEhBVkVfV1MyVENQSVBfSD0xCistICAgIGVsc2UKKy0gICAgICBIQVZFX1dTMlRDUElQX0g9MAorLSAgICBmaQorLSAgZmkKKy0gIEFDX1NVQlNUKFtIQVZFX1NZU19TT0NLRVRfSF0pCistICBBQ19TVUJTVChbSEFWRV9XUzJUQ1BJUF9IXSkKKy1dKQorLQorLSMgQ29tbW9uIHByZXJlcXVpc2l0ZXMgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IHJlcGxhY2VtZW50IGFuZCBvZiB0aGUKKy0jIDxzeXMvc2VsZWN0Lmg+IHJlcGxhY2VtZW50LgorLSMgU2V0cyBhbmQgc3Vic3RpdHV0ZXMgSEFWRV9XSU5TT0NLMl9ILgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzJdLAorLVsKKy0gIG00X2lmZGVmKFtnbF9VTklTVERfSF9ERUZBVUxUU10sIFtBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pXSkKKy0gIG00X2lmZGVmKFtnbF9TWVNfSU9DVExfSF9ERUZBVUxUU10sIFtBQ19SRVFVSVJFKFtnbF9TWVNfSU9DVExfSF9ERUZBVUxUU10pXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3NvY2tldC5oXSkKKy0gIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggIT0geWVzOyB0aGVuCistICAgIGRubCBXZSBjYW5ub3QgdXNlIEFDX0NIRUNLX0hFQURFUlNfT05DRSBoZXJlLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZQorLSAgICBkbmwgdGhlIGNoZWNrIGZvciB0aG9zZSBoZWFkZXJzIHVuY29uZGl0aW9uYWw7IHlldCBjeWd3aW4gcmVwb3J0cworLSAgICBkbmwgdGhhdCB0aGUgaGVhZGVycyBhcmUgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIChzaW5jZSBvbgorLSAgICBkbmwgY3lnd2luLCBhbGwgc29ja2V0IGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gc3lzL3NvY2tldC5oKS4KKy0gICAgQUNfQ0hFQ0tfSEVBREVSUyhbd2luc29jazIuaF0pCistICBmaQorLSAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbgorLSAgICBIQVZFX1dJTlNPQ0syX0g9MQorLSAgICBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0g9MQorLSAgICBTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0g9MQorLSAgZWxzZQorLSAgICBIQVZFX1dJTlNPQ0syX0g9MAorLSAgZmkKKy0gIEFDX1NVQlNUKFtIQVZFX1dJTlNPQ0syX0hdKQorLV0pCistCistQUNfREVGVU4oW2dsX1NZU19TT0NLRVRfTU9EVUxFX0lORElDQVRPUl0sCistWworLSAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKy0gIEFDX1JFUVVJUkUoW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10pCistICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorLSAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdLAorLVsKKy0gIEdOVUxJQl9TT0NLRVQ9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NPQ0tFVF0pCistICBHTlVMSUJfQ09OTkVDVD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9DT05ORUNUXSkKKy0gIEdOVUxJQl9BQ0NFUFQ9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0FDQ0VQVF0pCistICBHTlVMSUJfQklORD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9CSU5EXSkKKy0gIEdOVUxJQl9HRVRQRUVSTkFNRT0wOyBBQ19TVUJTVChbR05VTElCX0dFVFBFRVJOQU1FXSkKKy0gIEdOVUxJQl9HRVRTT0NLTkFNRT0wOyBBQ19TVUJTVChbR05VTElCX0dFVFNPQ0tOQU1FXSkKKy0gIEdOVUxJQl9HRVRTT0NLT1BUPTA7ICBBQ19TVUJTVChbR05VTElCX0dFVFNPQ0tPUFRdKQorLSAgR05VTElCX0xJU1RFTj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTElTVEVOXSkKKy0gIEdOVUxJQl9SRUNWPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1JFQ1ZdKQorLSAgR05VTElCX1NFTkQ9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORF0pCistICBHTlVMSUJfUkVDVkZST009MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUNWRlJPTV0pCistICBHTlVMSUJfU0VORFRPPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TRU5EVE9dKQorLSAgR05VTElCX1NFVFNPQ0tPUFQ9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU0VUU09DS09QVF0pCistICBHTlVMSUJfU0hVVERPV049MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9TSFVURE9XTl0pCistICBHTlVMSUJfQUNDRVBUND0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9BQ0NFUFQ0XSkKKy0gIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0U9MTsgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VdKQorLSAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9MTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFldKQorLSAgSEFWRV9TQV9GQU1JTFlfVD0xOyAgIEFDX1NVQlNUKFtIQVZFX1NBX0ZBTUlMWV9UXSkKKy0gIEhBVkVfQUNDRVBUND0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9BQ0NFUFQ0XSkKKy1dKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3dhcm4tb24tdXNlLm00IGxpYmljb252LTEuMTQvc3JjbTQvd2Fybi1vbi11c2UubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvd2Fybi1vbi11c2UubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3dhcm4tb24tdXNlLm00CTIwMTItMDEtMDggMDI6MDc6NDAuOTM0NDg0NDg3IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHdhcm4tb24tdXNlLm00IHNlcmlhbCA0CisrIyB3YXJuLW9uLXVzZS5tNCBzZXJpYWwgMgorIGRubCBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0yNyw4ICsyNyw2IEBAIEFDX0RFRlVOKFtnbF9XQVJOX09OX1VTRV9QUkVQQVJFXSwKKyAgICAgW0FIX1RFTVBMQVRFKFtIQVZFX1JBV19ERUNMX11BU19UUl9DUFAobTRfZGVmbihbZ2xfZGVjbF0pKSwKKyAgICAgICBbRGVmaW5lIHRvIDEgaWYgXW00X2RlZm4oW2dsX2RlY2xdKVsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgICAgICB1bmRlZmluaW5nIG1hY3Jvcy5dKV0pZG5sCistZG5sIEZJWE1FOiBnbF9TeW1ib2wgbXVzdCBiZSB1c2VkIHVucXVvdGVkIHVudGlsIHdlIGNhbiBhc3N1bWUKKy1kbmwgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyAgIGZvciBnbF9mdW5jIGluIG00X2ZsYXR0ZW4oWyQyXSk7IGRvCisgICAgIEFTX1ZBUl9QVVNIREVGKFtnbF9TeW1ib2xdLCBbZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuY10pZG5sCisgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyb10sCitAQCAtMzcsOCArMzUsOCBAQCBkbmwgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyBbQCU6QHVuZGVmICRnbF9mdW5jCisgICAodm9pZCkgJGdsX2Z1bmM7XSldLAorICAgICAgICAgW0FTX1ZBUl9TRVQoZ2xfU3ltYm9sLCBbeWVzXSldLCBbQVNfVkFSX1NFVChnbF9TeW1ib2wsIFtub10pXSldKQorLSAgICBBU19WQVJfSUYoZ2xfU3ltYm9sLCBbeWVzXSwKKy0gICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChbSEFWRV9SQVdfREVDTF8kZ2xfZnVuY10pLCBbMV0pCisrICAgICBBU19WQVJfSUYoZ2xfU3ltYm9sLCBbeWVzXSwKKysgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfUkFXX0RFQ0xfJGdsX2Z1bmNdKSwgWzFdKQorICAgICAgICBkbmwgc2hvcnRjdXQgLSBpZiB0aGUgcmF3IGRlY2xhcmF0aW9uIGV4aXN0cywgdGhlbiBzZXQgYSBjYWNoZQorICAgICAgICBkbmwgdmFyaWFibGUgdG8gYWxsb3cgc2tpcHBpbmcgYW55IGxhdGVyIEFDX0NIRUNLX0RFQ0wgZWZmb3J0cworICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXNdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzNGNlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorSXQgYWRkcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIG5lZWRlZAorZm9yIGF1dG9jb25mIDIuNjUgdG8gcmVjb25maWd1cmUgbGliaWNvbnYgYW5kIGRlbGV0ZSB0aGUgbTQgbWFjcm9zCitkaXJlY3RvcnkuIEl0cyBpbXBvcnRlZCBmcm9tIE9FLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYmljb252LTEuMTMuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjEzLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJpY29udi0xLjEzLjEvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKyBBTV9JTklUX0FVVE9NQUtFKFtsaWJpY29udl0sIFsxLjEzLjFdKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaCBsaWIvY29uZmlnLmhdKQorIEFDX1BST0dfTUFLRV9TRVQKKy0KKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisgZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCisgCisgQUNfUFJPR19DQworSW5kZXg6IGxpYmljb252LTEuMTMuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTMuMS5vcmlnL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMy4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCitAQCAtMTYsMTcgKzE2LDE3IEBAIGRubCBhbG9uZyB3aXRoIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5OworIGRubCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsCisgZG5sIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAKKy1BQ19QUkVSRVEoWzIuMTNdKQorK0FDX1BSRVJFUSgyLjYxKQorK0FDX0lOSVQoW2xpYmNoYXJzZXRdLFsxLjRdICkKKytBQ19DT05GSUdfU1JDRElSKFtsaWIvbG9jYWxjaGFyc2V0LmNdKQorIAorLVBBQ0tBR0U9bGliY2hhcnNldAorLVZFUlNJT049MS40CistCistQUNfSU5JVChbbGliL2xvY2FsY2hhcnNldC5jXSkKKyBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKyBBQ19DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisgQUNfUFJPR19NQUtFX1NFVAorLUFDX1NVQlNUKFtQQUNLQUdFXSkKKy1BQ19TVUJTVChbVkVSU0lPTl0pCisrZG5sIEFDX1NVQlNUKFBBQ0tBR0UpCisrZG5sIEFDX1NVQlNUKFZFUlNJT04pCisrCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIAorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTRiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjExLjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJDaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR05VIGxpYmljb252IC0gbGliaWNvbnYgaXMgZm9yIHlvdSBpZiB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHN1cHBvcnQgXAorbXVsdGlwbGUgY2hhcmFjdGVyIGVuY29kaW5ncywgYnV0IHRoYXQgc3VwcG9ydCBsYWNrcyBmcm9tIHlvdXIgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiIKK1NFQ1RJT04gPSAibGlicyIKK05PVEVTID0gIk5lZWRzIHRvIGJlIHN0cmlwcGVkIGRvd24gdG86IGFzY2lpIGlzbzg4NTktMSBldWNqcCBpc28tMjAyMmpwIGdiIHV0ZjgiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorCitMSUNFTlNFID0gIkxHUEx2Mi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmNoYXJzZXQvQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b2NvbmYucGF0Y2ggXAorCSAgIGZpbGU6Ly9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0MmI5N2Y2ZWY1ZGQwYmE0NDY5ZDUyMGVkNzMyZmVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3OGMzNDdhMWEwY2IxNWYyNjQ4NTE5ZTk3OTkxNTFmNGI0YTkzNGI2MWFkOWVlNzQyNDQ3OGVmZTJiODI1N2YiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpY29udi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQ0xJQkMiLCBUcnVlKSA9PSAiZ2xpYmMiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgibGliaWNvbnYgaXMgcHJvdmlkZWQgZm9yIHVzZSB3aXRoIHVDbGliYyBvbmx5IC0gZ2xpYmMgYWxyZWFkeSBwcm92aWRlcyBpY29udiIpCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxvY2F0YWJsZSIKKworTEVBRF9TT05BTUUgPSAibGliaWNvbnYuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2xpYnRvb2wubTQgJHtTfS9tNC9sdG9wdGlvbnMubTQgJHtTfS9tNC9sdHN1Z2FyLm00ICR7U30vbTQvbHR2ZXJzaW9uLm00ICR7U30vbTQvbHR+b2Jzb2xldGUubTQgJHtTfS9saWJjaGFyc2V0L200L2xpYnRvb2wubTQgJHtTfS9saWJjaGFyc2V0L200L2x0b3B0aW9ucy5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRzdWdhci5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR2ZXJzaW9uLm00ICR7U30vbGliY2hhcnNldC9tNC9sdH5vYnNvbGV0ZS5tNAorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKyAgICAgICAgIyBmb3JjaWJseSByZW1vdmUgUlBBVEggZnJvbSBsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xeaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0uKnxoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIifGcnICpsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xecnVucGF0aF92YXI9TERfUlVOX1BBVEh8cnVucGF0aF92YXI9X05PX1JQQVRIX3xnJyAqbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaWNvbnYuc28KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjZmZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkNoYXJhY3RlciBlbmNvZGluZyBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTlUgbGliaWNvbnYgLSBsaWJpY29udiBpcyBmb3IgeW91IGlmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgdG8gc3VwcG9ydCBcCittdWx0aXBsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBidXQgdGhhdCBzdXBwb3J0IGxhY2tzIGZyb20geW91ciBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmljb252IgorU0VDVElPTiA9ICJsaWJzIgorTk9URVMgPSAiTmVlZHMgdG8gYmUgc3RyaXBwZWQgZG93biB0bzogYXNjaWkgaXNvODg1OS0xIGV1Y2pwIGlzby0yMDIyanAgZ2IgdXRmOCIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaWNvbnYiCitQUiA9ICJyMSIKK0xJQ0VOU0UgPSAiTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmNoYXJzZXQvQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b2NvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTM0NTA5YjE2MjNjZWM0NDlkZmViNzNkN2NlOWM2YzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJiMjRkZWQxN2Q2ODcxOTNjMzM2NmQwZWJlN2NkZTFlNmIxOGYwZGY4YzU1NDM4YWM5NWJlMzllOGEzMDYxMyIKKworUyA9ICIke1dPUktESVJ9L2xpYmljb252LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpICE9ICJsaW51eCI6CisgICAgICAgIHJldHVybgorICAgIGlmIGQuZ2V0VmFyKCJUQ0xJQkMiLCBUcnVlKSA9PSAiZ2xpYmMiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgibGliaWNvbnYgaXMgcHJvdmlkZWQgZm9yIHVzZSB3aXRoIHVDbGliYyBvbmx5IC0gZ2xpYmMgYWxyZWFkeSBwcm92aWRlcyBpY29udiIpCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxvY2F0YWJsZSIKKworTEVBRF9TT05BTUUgPSAibGliaWNvbnYuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2xpYnRvb2wubTQgJHtTfS9tNC9sdG9wdGlvbnMubTQgJHtTfS9tNC9sdHN1Z2FyLm00ICR7U30vbTQvbHR2ZXJzaW9uLm00ICR7U30vbTQvbHR+b2Jzb2xldGUubTQgJHtTfS9saWJjaGFyc2V0L200L2xpYnRvb2wubTQgJHtTfS9saWJjaGFyc2V0L200L2x0b3B0aW9ucy5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRzdWdhci5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR2ZXJzaW9uLm00ICR7U30vbGliY2hhcnNldC9tNC9sdH5vYnNvbGV0ZS5tNAorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKyAgICAgICAgIyBmb3JjaWJseSByZW1vdmUgUlBBVEggZnJvbSBsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xeaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0uKnxoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIifGcnICpsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xecnVucGF0aF92YXI9TERfUlVOX1BBVEh8cnVucGF0aF92YXI9X05PX1JQQVRIX3xnJyAqbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaWNvbnYuc28KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODg2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmEva3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBsaWJrc2JhLgorVGhpcyBwYXRjaCBpcyByZWplY3RlZCBieSB1cHN0cmVhbSBmb3IgdGhlIHJlYXNvbiBiZWxvdzoKK1RoZXkgdGhpbmsgcGtnY29uZmlnIGFkZHMgbm8gcG9ydGFiaWxpdHkgYW5kIG1haW50YWluaW5nIHRoZW0gaXMgbm90IHdvcnRod2hpbGUuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYmtzYmEtMS4zLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvTWFrZWZpbGUuYW0JMjAxNC0wNS0xMyAyMTozOToyMi4zOTAzODU2NDYgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL01ha2VmaWxlLmFtCTIwMTQtMDUtMTMgMjE6Mzk6MjIuNDYyMzg1NjQ2ICswMDAwCitAQCAtMjEsNiArMjEsOSBAQAorIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC1JIGdsL200CisgQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIgbm8tZGlzdC1nemlwCisgCisrcGtnY29uZmlnZGlyID0gJHtsaWJkaXJ9L3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0ga3NiYS5wYworKworICMgKEEgc3VpdGFibGUgZ2l0bG9nLXRvLWNoYW5nZWxvZyBzY3JpcHQgY2FuIGJlIGZvdW5kIGluIEdudVBHIG1hc3Rlci4pCisgR0lUTE9HX1RPX0NIQU5HRUxPRz1naXRsb2ctdG8tY2hhbmdlbG9nCisgCitJbmRleDogbGlia3NiYS0xLjMuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMjE6Mzk6MjIuMzkwMzg1NjQ2ICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAyMTozOToyMi40NjIzODU2NDYgKzAwMDAKK0BAIC00MDAsNiArNDAwLDcgQEAKKyBzcmMvTWFrZWZpbGUKKyBzcmMva3NiYS1jb25maWcKKyBzcmMvdmVyc2lvbmluZm8ucmMKKytrc2JhLnBjCisgdGVzdHMvTWFrZWZpbGUKKyBkb2MvTWFrZWZpbGUKKyBdKQorSW5kZXg6IGxpYmtzYmEtMS4zLjAva3NiYS5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAva3NiYS5wYy5pbgkyMDE0LTA1LTEzIDIxOjM5OjIyLjQ2MjM4NTY0NiArMDAwMAorQEAgLTAsMCArMSwxNyBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1AS1NCQV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AS1NCQV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBrc2JhCisrRGVzY3JpcHRpb246IExpYmtzYmEgcHJvdmlkZXMgYW4gZWFzeSBBUEkgdG8gY3JlYXRlIGFuZCBwYXJzZSBYLjUwOSBhbmQgQ01TIHJlbGF0ZWQgb2JqZWN0cworK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sa3NiYQorK0xpYnMucHJpdmF0ZTogLUx7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CisrCitJbmRleDogbGlia3NiYS0xLjMuMC9zcmMva3NiYS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmtzYmEtMS4zLjAub3JpZy9zcmMva3NiYS5tNAkyMDE0LTA1LTEzIDIxOjM5OjIyLjM5MDM4NTY0NiArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAvc3JjL2tzYmEubTQJMjAxNC0wNS0xMyAyMTo0OTowMy42NTAzODI2OTYgKzAwMDAKK0BAIC0yMiwxOCArMjIsNyBAQAorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0tTQkFdLAorIFtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistIEFDX0FSR19XSVRIKGtzYmEtcHJlZml4LAorLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgta3NiYS1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEtTQkEgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGtzYmFfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBrc2JhX2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgka3NiYV9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBrc2JhX2NvbmZpZ19hcmdzPSIka3NiYV9jb25maWdfYXJncyAtLXByZWZpeD0ka3NiYV9jb25maWdfcHJlZml4IgorLSAgICAgaWYgdGVzdCB4JHtLU0JBX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgICBLU0JBX0NPTkZJRz0ka3NiYV9jb25maWdfcHJlZml4L2Jpbi9rc2JhLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCisgCistICBBQ19QQVRIX1BST0coS1NCQV9DT05GSUcsIGtzYmEtY29uZmlnLCBubykKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MS4wLjAsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfa3NiYV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtNDMsNDggKzMyLDEzIEBACisgICAgICBtaW5fa3NiYV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgS1NCQSAtIHZlcnNpb24gPj0gJG1pbl9rc2JhX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEtTQkFfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9rc2JhX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fa3NiYV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2tzYmFfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBrc2JhX2NvbmZpZ192ZXJzaW9uPWAkS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAka3NiYV9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRrc2JhX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGtzYmFfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMy8nYAorLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgka3NiYV9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEtTQkEsIFtrc2JhID49ICRtaW5fa3NiYV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisrCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBFdmVuIGlmIHdlIGhhdmUgYSByZWNlbnQgbGlia3NiYSwgd2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9rc2JhX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRLU0JBX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBrc2JhYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0tTQkEgQVBJIHZlcnNpb25dKQorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9rc2JhX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KK0BAIC05NywxMCArNTEsOCBAQAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBLU0JBX0NGTEFHUz1gJEtTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBLU0JBX0xJQlM9YCRLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGxpYmtzYmFfY29uZmlnX2hvc3Q9YCRMSUJLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICBsaWJrc2JhX2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3Qga3NiYWAKKyAgICAgaWYgdGVzdCB4IiRsaWJrc2JhX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGxpYmtzYmFfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMTQsOCArNjYsNiBAQAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIEtTQkFfQ0ZMQUdTPSIiCistICAgIEtTQkFfTElCUz0iIgorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKEtTQkFfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjExNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJFYXN5IEFQSSB0byBjcmVhdGUgYW5kIHBhcnNlIFguNTA5IGFuZCBDTVMgcmVsYXRlZCBvYmplY3RzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJrc2JhLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgTEdQTHYzKyB8IEdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZkNTQxZDgzZjc1ZDAzOGM0ZTA2MTdiNjcyZWQ4YmRhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PTJmMzFiMjY2ZDM0NDBkZDdlZTUwZjkyY2Y2N2Q4ZTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9rc2JhLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTVkZDNjNTdmY2EyNTQ5MzVmNWNmOGRiMjZlMzkwNjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGM3ZjVmZmUzNGQwNDE0ZjY5NTFkOTg4MGE0NmZjYzI5ODVjNDg3ZjdjMzYzNjliOWYxMWFkNDExMzFjNzc4NiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3NDI1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIGNvbXBsZXggbnVtYmVyIGFyaXRobWV0aWMgd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uIGFuZCBjb3JyZWN0IHJvdW5kaW5nIgorREVTQ1JJUFRJT04gPSAiTXBjIGlzIGEgQyBsaWJyYXJ5IGZvciB0aGUgYXJpdGhtZXRpYyBvZiBjb21wbGV4IG51bWJlcnMgd2l0aCBhcmJpdHJhcmlseSBoaWdoIHByZWNpc2lvbiBhbmQgY29ycmVjdCByb3VuZGluZyBvZiB0aGUgcmVzdWx0LiBJdCBpcyBidWlsdCB1cG9uIGFuZCBmb2xsb3dzIHRoZSBzYW1lIHByaW5jaXBsZXMgYXMgTXBmciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubXVsdGlwcmVjaXNpb24ub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYzIgorU0VDVElPTiA9ICJsaWJzIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U1YTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGxpYm1wYy5pbmMKKworREVQRU5EUyA9ICJnbXAgbXBmciIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy9tcGMvZG93bmxvYWQvbXBjLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ2YTFkNWY4ZGRlYTNhYmQyY2MzZTk4ZjU4MzUyZDI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxN2RlY2M2ZWEwOTg4OWZiMDhlZGUzMzA5MTdhMDBiMTY4MDliOGRiODhjMjljMzFiZmJiNDljYmY4OGVjYzMiCisKK1MgPSAiJHtXT1JLRElSfS9tcGMtJHtQVn0iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBjLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4YjgzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTb21lIHBhY2thZ2VzIGFyZSBhc2tpbmcgb25seSBmb3IgbGlibmwtMi4wLCBidXQgZXhwZWN0cyB0byBnZXQgYWxzbworbGlibmwtZ2VubCwgbGlibmwtbmYgbGlibmwtcm91dGUsIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGVtIGlzIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KK0luZGV4OiBsaWJubC0zLjIuMTQvbGlibmwtMy4wLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibmwtMy4yLjE0Lm9yaWcvbGlibmwtMy4wLnBjLmluCisrKysgbGlibmwtMy4yLjE0L2xpYm5sLTMuMC5wYy5pbgorQEAgLTYsNSArNiw1IEBAIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisgTmFtZTogbGlibmwKKyBEZXNjcmlwdGlvbjogQ29udmVuaWVuY2UgbGlicmFyeSBmb3IgbmV0bGluayBzb2NrZXRzCisgVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKKy1MaWJzOiAtTCR7bGliZGlyfSAtbG5sLUBNQUpfVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbG5sLUBNQUpfVkVSU0lPTkAgLWxubC1nZW5sLUBNQUpfVkVSU0lPTkAgLWxubC1uZi1ATUFKX1ZFUlNJT05AIC1sbmwtcm91dGUtQE1BSl9WRVJTSU9OQAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9L2xpYm5sQE1BSl9WRVJTSU9OQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YWEwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitsaWJubCBoYXMgcHJvZ3Jlc3NlZCB0byAwLjMuMiBhbmQgdGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFueQorIm1ha2UgLWoiIGlzc3VlcyB3aXRoIHRoaXMgYnVpbGQgYWZ0ZXIgbXkgbGltaXRlZCB0ZXN0aW5nIG9uIHRoYXQKK25ld2VyIHZlcnNpb24gc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzc3VlIGlzIGZpeGVkIHVwc3RyZWFtCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYm5sLTMuMi4yNS9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJubC0zLjIuMjUub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyBsaWJubC0zLjIuMjUvbGliL01ha2VmaWxlLmFtCitAQCAtNDYsOSArNDYsMTIgQEAgQ0xFQU5GSUxFUyA9IFwKKyAKKyAjIEhhY2sgdG8gYXZvaWQgdXNpbmcgeWx3cmFwLiBJdCBkb2VzIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkgaW4gY29tYmluYXRpb24KKyAjIHdpdGggLS1oZWFkZXItZmlsZT0KKytyb3V0ZS9wa3Rsb2MubG86IHJvdXRlL3BrdGxvY19zeW50YXguaCByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oCisrcm91dGUvcGt0bG9jX2dyYW1tYXIuaDogcm91dGUvcGt0bG9jX2dyYW1tYXIuYworIHJvdXRlL3BrdGxvY19ncmFtbWFyLmM6IHJvdXRlL3BrdGxvY19ncmFtbWFyLmwKKyAJJChBTV9WX0dFTikgJChNS0RJUl9QKSByb3V0ZTsgJChGTEVYKSAtLWhlYWRlci1maWxlPXJvdXRlL3BrdGxvY19ncmFtbWFyLmggJChMRkxBR1MpIC1vICRAICReCisgCisrcm91dGUvcGt0bG9jX3N5bnRheC5oOiByb3V0ZS9wa3Rsb2Nfc3ludGF4LmMKKyByb3V0ZS9wa3Rsb2Nfc3ludGF4LmM6IHJvdXRlL3BrdGxvY19zeW50YXgueQorIAkkKEFNX1ZfR0VOKSAkKE1LRElSX1ApIHJvdXRlOyAkKFlBQ0MpIC1kICQoWUZMQUdTKSAtbyAkQCAkXgorIAorQEAgLTEwMiw3ICsxMDUsOSBAQCBCVUlMVF9TT1VSQ0VTID0gXAorIAlyb3V0ZS9jbHMvZW1hdGNoX2dyYW1tYXIuYyBcCisgCXJvdXRlL2Nscy9lbWF0Y2hfc3ludGF4LmMgXAorIAlyb3V0ZS9wa3Rsb2NfZ3JhbW1hci5jIFwKKy0Jcm91dGUvcGt0bG9jX3N5bnRheC5jCisrICAgcm91dGUvcGt0bG9jX3N5bnRheC5jIFwKKysgICByb3V0ZS9wa3Rsb2Nfc3ludGF4LmggXAorKyAgIHJvdXRlL3BrdGxvY19ncmFtbWFyLmgKKyAKKyBFWFRSQV9ESVNUID0gXAorIAlyb3V0ZS9wa3Rsb2NfZ3JhbW1hci5sIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgxNGZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI1LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBhcHBsaWNhdGlvbnMgZGVhbGluZyB3aXRoIG5ldGxpbmsgc29ja2V0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyL2xpYm5sLyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCitQRSA9ICIxIgorUFIgPSAicjEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pbmZyYWRlYWQub3JnL350Z3IvJHtCUE59L2ZpbGVzLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXBjLWZpbGUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAzZjc0ZDBjZDUwMzdjYWRjOGNkZmEzMTNiYmQxOTVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiZWI3NTkwNjc0OTU3YjkzMWRlNmI3ZjgxYzUzMGI4NWRjN2MxYWQ4ZmJkYTAxNTM5OGJjMWU4ZDFjZThlYzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibmwtMy5zby4qIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC5zby4qIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0iCitSUkVQTEFDRVNfJHtQTn0gPSAibGlibmwyIgorUkNPTkZMSUNUU18ke1BOfSA9ICJsaWJubDIiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLmEiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1jbGkgJHtQTn0tcm91dGUgJHtQTn0tbmYgJHtQTn0tZ2VubCAke1BOfS1pZGlhZyIKK0ZJTEVTXyR7UE59LWNsaSAgID0gIiR7bGliZGlyfS9saWJubC1jbGktMy5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtzYmluZGlyfS9ubC0qIgorRklMRVNfJHtQTn0tcm91dGUgPSAiJHtsaWJkaXJ9L2xpYm5sLXJvdXRlLTMuc28uKiIKK0ZJTEVTXyR7UE59LWlkaWFnID0gIiR7bGliZGlyfS9saWJubC1pZGlhZy0zLnNvLioiCitGSUxFU18ke1BOfS1uZiAgICA9ICIke2xpYmRpcn0vbGlibmwtbmYtMy5zby4qIgorRklMRVNfJHtQTn0tZ2VubCAgPSAiJHtsaWJkaXJ9L2xpYm5sLWdlbmwtMy5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC1nZW5sLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtzYmluZGlyfS9nZW5sLWN0cmwtbGlzdCIKK1JSRVBMQUNFU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCitSQ09ORkxJQ1RTXyR7UE59LWdlbmwgPSAibGlibmwtZ2VubDIgbGlibmwtZ2VubC0zLTIwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYxY2IxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRnJvbSAxOTIxNDk4YmNjMDY0MDhlOGIwNTFhM2E5ZTljZTQxODI5OThmNzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CitEYXRlOiBGcmksIDggQXByIDIwMTEgMTA6MDU6NDkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xMF0gRml4IC0tZW5hYmxlLXZmcCBmbGFnCisKK1BhdGNoIGZyb20gQ2hyaXN0b3BoZSBMeW9uLCBmaXhlcyAjMzYwODQuCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgIHwgICAgNCArKy0tCisgbGlib2lsL2FybS9NYWtlZmlsZS5hbSB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5OGM4MWZiLi40MDdkODhjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xODgsOCArMTg4LDggQEAgZmkKKyBBQ19BUkdfRU5BQkxFKHZmcCwKKyAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12ZnBdLFtjb21waWxlIHdpdGggVmVjdG9yIEZsb2F0aW5nLXBvaW50IHVuaXQgc3VwcG9ydF0pLAorICAgZW5hYmxlX3ZmcD0kZW5hYmxldmFsLGVuYWJsZV92ZnA9eWVzKQorLWlmIHRlc3QgIngkZW5hYmxlLXZmcCIgPSB4eWVzIC1hIHgkSEFWRV9HQ0NfQVNNID0geHllcyAtYSB4JEhBVkVfQVJNID0geHllczsgdGhlbgorLSAgQVNfQ09NUElMRVJfRkxBRyhbIi1XYSwtbWZwdT12ZnAiXSwKKytpZiB0ZXN0ICJ4JGVuYWJsZV92ZnAiID0geHllcyAtYSB4JEhBVkVfR0NDX0FTTSA9IHh5ZXMgLWEgeCRIQVZFX0FSTSA9IHh5ZXM7IHRoZW4KKysgIEFTX0NPTVBJTEVSX0ZMQUcoWyItbWZwdT12ZnAiXSwKKyAgICAgW1ZGUF9DRkxBR1M9IiRWRlBfQ0ZMQUdTIC1tZnB1PXZmcCJdLAorICAgICB0cnVlKQorICAgI0FTX0NPTVBJTEVSX0ZMQUcoWyItV2EsLW1mbG9hdC1hYmk9c29mdGZwIl0sCitkaWZmIC0tZ2l0IGEvbGlib2lsL2FybS9NYWtlZmlsZS5hbSBiL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0KK2luZGV4IGVhZDA4ZWQuLmNkOGQ5ZmEgMTAwNjQ0CistLS0gYS9saWJvaWwvYXJtL01ha2VmaWxlLmFtCisrKysgYi9saWJvaWwvYXJtL01ha2VmaWxlLmFtCitAQCAtNiw0ICs2LDUgQEAgbGliYXJtX2xhX1NPVVJDRVMgPSBcCisgCW1hdGhfdmZwX2FzbS5TCisgCisgbGliYXJtX2xhX0NGTEFHUyA9ICQoTElCT0lMX0NGTEFHUykgJChWRlBfQ0ZMQUdTKQorK2xpYmFybV9sYV9DQ0FTRkxBR1MgPSAkKExJQk9JTF9DRkxBR1MpICQoVkZQX0NGTEFHUykKKyAKKy0tIAorMS43LjYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9maXgtdW5hbGlnbmVkLXdoaXRlbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUzYzFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW06IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMzU4CisKK2NvbmZpZ3VyZTogZml4IHdoaXRlbGlzdGluZyBvZiB4ODZfNjQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MKKworRml4IHR5cG8gaW4gd2hpdGVsaXN0IHNvIGNyb3NzLWNvbXBpbGUgd29ya3MgZm9yIHg4Nl82NC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbGlib2lsLTAuMy4xNy9tNC9hcy11bmFsaWduZWQtYWNjZXNzLm00Lm9yaWcJMjAwOS0wMi0yNiAxNDo0MDowOC4wMDAwMDAwMDAgLTA1MDAKKysrKyBsaWJvaWwtMC4zLjE3L200L2FzLXVuYWxpZ25lZC1hY2Nlc3MubTQJMjAxMC0xMS0wMyAxMjoxOTo1NS4wMDAwMDAwMDAgLTA0MDAKK0BAIC05LDcgKzksNyBAQAorICAgICAgICAgX0FTX0VDSE9fTihbKGJsYWNrbGlzdGVkKSBdKQorICAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ubworIAk7OworLSAgICAgIGk/ODYqfHg4Nl82NHxhbWQ2NHxwb3dlcnBjKnxtNjhrKnxjcmlzKikKKysgICAgICBpPzg2Knx4ODZfNjQqfGFtZDY0Knxwb3dlcnBjKnxtNjhrKnxjcmlzKikKKyAgICAgICAgIF9BU19FQ0hPX04oWyh3aGl0ZWxpc3RlZCkgXSkKKyAgICAgICAgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9eWVzCisgCTs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczMzgwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDIyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK01ha2UgdGhlIGFzc2VtYmx5IHN5bnRheCBjb21wYXRpYmxlIHdpdGggeDMyIGdjYy4gT3RoZXdpc2UgeDMyIGdjYyB0aHJvd3MgZXJyb3JzLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8xMi8wMQorCisKK0luZGV4OiBsaWJvaWwtMC4zLjE3L2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJvaWwtMC4zLjE3Lm9yaWcvbGlib2lsL2FtZDY0L3dhdmVsZXQuYworKysrIGxpYm9pbC0wLjMuMTcvbGlib2lsL2FtZDY0L3dhdmVsZXQuYworQEAgLTIxLDE0ICsyMSwxNCBAQCBkZWludGVybGVhdmUyX2FzbSAoaW50MTZfdCAqZDEsIGludDE2X3QgCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICBzdWIgJDIsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92dyAoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgMiglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgKCUyLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92dyA0KCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAyKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92dyA2KCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAyKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyAoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyAyKCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgKCVxMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgNCglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsIDIoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyA2KCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgMiglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBzdWIgJDIsICUlcmN4XG4iCisgICAgICAgIiAgamdlIDFiXG4iCisgICAgICAgOiAiK3IiIChkMSksICIrciIgKHNfMnhuKSwgIityIiAoZDIpLCAiK2MiIChuKQorQEAgLTUzLDIwICs1MywyMCBAQCBkZWludGVybGVhdmUyX21teCAoaW50MTZfdCAqZDEsIGludDE2X3QgCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorICAgICAgICIgIHBzbGxkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc2xsZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMFxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTFcbiIKKyAgICAgICAiICBwYWNrc3NkdyAlJW1tMSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcGFja3NzZHcgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTMsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC05MywxMCArOTMsMTAgQEAgZGVpbnRlcmxlYXZlMl9tbXhfMiAoaW50MTZfdCAqZDEsIGludDE2XworICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIHBzaHVmdyAkMHhkOCwgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdmQgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIHBzaHVmdyAkMHg4ZCwgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdmQgJSVtbTAsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBzaHVmdyAkMHhkOCwgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZkICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgcHNodWZ3ICQweDhkLCAoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdmQgJSVtbTAsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDIsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMTIzLDE2ICsxMjMsMTYgQEAgZGVpbnRlcmxlYXZlMl9tbXhfMyAoaW50MTZfdCAqZDEsIGludDE2XworICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgOCglcTEsJSVyY3gsNCksICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0wLCAlJW1tMVxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMCwgJSVtbTJcbiIKKyAgICAgICAiICBtb3ZxICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMiwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTIsICUlbW0xXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92cSAlJW1tMSwgKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMTU5LDI2ICsxNTksMjYgQEAgZGVpbnRlcmxlYXZlMl9tbXhfNCAoaW50MTZfdCAqZDEsIGludDE2XworICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBtb3ZxICUlbW0xLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICAgbW92cSAxNiglMSwlJXJjeCw0KSwgJSVtbTVcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgICBtb3ZxIDE2KCVxMSwlJXJjeCw0KSwgJSVtbTVcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTAsICUlbW0xXG4iCisgICAgICAgIiAgIG1vdnEgJSVtbTUsICUlbW02XG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0wLCAlJW1tMlxuIgorLSAgICAgICIgICBtb3ZxIDI0KCUxLCUlcmN4LDQpLCAlJW1tNFxuIgorKyAgICAgICIgICBtb3ZxIDI0KCVxMSwlJXJjeCw0KSwgJSVtbTRcbiIKKyAgICAgICAiICBtb3ZxICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgICBwdW5wY2tsd2QgJSVtbTQsICUlbW01XG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0yLCAlJW1tMFxuIgorICAgICAgICIgICBwdW5wY2tod2QgJSVtbTQsICUlbW02XG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgICBtb3ZxICUlbW01LCAlJW1tNFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICAgcHVucGNrbHdkICUlbW02LCAlJW1tNFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICAgcHVucGNraHdkICUlbW02LCAlJW1tNVxuIgorLSAgICAgICIgICBtb3ZxICUlbW00LCA4KCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgIG1vdnEgJSVtbTUsIDgoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICAgbW92cSAlJW1tNCwgOCglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICAgbW92cSAlJW1tNSwgOCglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDgsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMjUyLDEzICsyNTIsMTMgQEAgaW50ZXJsZWF2ZTJfbW14IChpbnQxNl90ICpkXzJ4biwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDIpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCwyKSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisgICAgICAgIiAgbW92cSAlJW1tMCwgJSVtbTJcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTEsICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0xLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgJSVtbTIsICglMCwlJXJjeCw0KVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsIDgoJTAsJSVyY3gsNClcbiIKKysgICAgICAiICBtb3ZxICUlbW0yLCAoJXEwLCUlcmN4LDQpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgOCglcTAsJSVyY3gsNClcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMjg1LDEyICsyODUsMTIgQEAgbGlmdF9hZGRfc2hpZnQxX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDEsICUlbW0xXG4iCistICAgICAgIiAgcGFkZHcgKCUxLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBhZGR3ICglcTEsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zMTcsMTMgKzMxNywxMyBAQCBsaWZ0X3N1Yl9zaGlmdDFfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDEsICUlbW0xXG4iCisgICAgICAgIiAgcHN1YncgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zNTAsMTIgKzM1MCwxMiBAQCBsaWZ0X2FkZF9zaGlmdDJfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKyAgICAgICAiICBwYWRkdyAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhdyAkMiwgJSVtbTFcbiIKKy0gICAgICAiICBwYWRkdyAoJTEsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAlJW1tMSwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgcGFkZHcgKCVxMSwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlNCwgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTM4MiwxMyArMzgyLDEzIEBAIGxpZnRfc3ViX3NoaWZ0Ml9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCwyKSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCwyKSwgJSVtbTBcbiIKKyAgICAgICAiICBwYWRkdyAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhdyAkMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3VidyAlJW1tMSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlNCwgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9uby10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTJkNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKKy0tLSBsaWJvaWwtMC4zLjkvbGlib2lsL2xpYm9pbGZ1bmN0aW9uLmMub2xkCTIwMDYtMDktMTggMTM6MDM6MjAuMDAwMDAwMDAwICswMTAwCisrKysgbGlib2lsLTAuMy45L2xpYm9pbC9saWJvaWxmdW5jdGlvbi5jCTIwMDYtMDktMTggMTM6MDQ6MTAuMDAwMDAwMDAwICswMTAwCitAQCAtMzQ1LDcgKzM0NSw5IEBACisgICAgIHJldHVybjsKKyAgIH0KKyAKKy0gIHRlc3QgPSBvaWxfdGVzdF9uZXcgKGtsYXNzKTsKKysgIGtsYXNzLT5jaG9zZW5faW1wbCA9IGtsYXNzLT5yZWZlcmVuY2VfaW1wbDsKKysgIGtsYXNzLT5mdW5jID0ga2xhc3MtPnJlZmVyZW5jZV9pbXBsLT5mdW5jOworKy8qICB0ZXN0ID0gb2lsX3Rlc3RfbmV3IChrbGFzcyk7CisgICBpZiAodGVzdCA9PSBOVUxMKSB7CisgICAgIE9JTF9FUlJPUiAoImZhaWxlZCB0byB0ZXN0IGZ1bmN0aW9uIGNsYXNzICVzIiwga2xhc3MtPm5hbWUpOworICAgICByZXR1cm47CitAQCAtMzg1LDcgKzM4Nyw3IEBACisgICBrbGFzcy0+Y2hvc2VuX2ltcGwgPSBtaW5faW1wbDsKKyAgIGtsYXNzLT5mdW5jID0gbWluX2ltcGwtPmZ1bmM7CisgCistICBvaWxfdGVzdF9mcmVlICh0ZXN0KTsKKysgIG9pbF90ZXN0X2ZyZWUgKHRlc3QpOyovCisgfQorIAorIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWxfMC4zLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjc3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgb2Ygc2ltcGxlIGZ1bmN0aW9ucyBvcHRpbWl6ZWQgZm9yIHZhcmlvdXMgQ1BVcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJvaWwuZnJlZWRlc2t0b3Aub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWQ4MDc4MGQ5YzUyMDVkNjM0ODFhMDE4NGUxOTlhMTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib2lsL2xpYm9pbC5oO2VuZGxpbmU9Mjg7bWQ1PTk1Yzc5NGE2NmI4ODgwMGQ5NDlmZWQxN2U0MzdkOWZiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm9pbC9saWJvaWxjcHUuYztlbmRsaW5lPTI4O21kNT04OWRhNjlhNjFkODhlZWRjYmEwNjZmNDIzNTNmYjc1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leGFtcGxlcy9leGFtcGxlMS5jO2VuZGxpbmU9Mjk7bWQ1PTlkNGRhZDlmY2JiZGYwNDQxZWUwNjNmOGFmNTE3MGM5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzdWl0ZS90cmFucy5jO2VuZGxpbmU9Mjk7bWQ1PTM4MGVjZDQzMTIxZmUzZGNjMGQ4ZDdlNTk4NGYyODNkIgorCitERVBFTkRTID0gImdsaWItMi4wIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYm9pbC5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtdW5hbGlnbmVkLXdoaXRlbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1lbmFibGUtdmZwLWZsYWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlib2lsX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0N2RjNzM0ZjgyZmFlYjI5NjRkOTc3NzFjZmQyZTcwMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMDVmMDIwNzliMGI1MDAzNGM3NTlkYjM0YjQ3M2VjYjU3MDRmZmEyMGE1NDg2YjYwYThiNzY5ODEyOGJmYzY5IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZDgwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9NYWtlZmlsZQpAQCAtMCwwICsxLDE4MyBAQAorVEVTVFMgPSBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0IFJ1blRlc3QgUnVuR3JlcFRlc3QKK3N1YmRpciA9IC4KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3R0eV9jb2xvcnNfZHVtbXkgPSBcCisgIG1nbj0gcmVkPSBncm49IGxnbj0gYmx1PSBicmc9IHN0ZD07IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPW5vCithbV9fdHR5X2NvbG9ycyA9IHsgXAorICAkKGFtX190dHlfY29sb3JzX2R1bW15KTsgXAorICBpZiB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWG5vOyB0aGVuIFwKKyAgICBhbV9fY29sb3JfdGVzdHM9bm87IFwKKyAgZWxpZiB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWGFsd2F5czsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICBlbGlmIHRlc3QgIlgkJFRFUk0iICE9IFhkdW1iICYmIHsgdGVzdCAtdCAxOyB9IDI+L2Rldi9udWxsOyB0aGVuIFwKKyAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIGZpOyBcCisgIGlmIHRlc3QgJCRhbV9fY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4gXAorICAgIHJlZD0nG1swOzMxbSc7IFwKKyAgICBncm49JxtbMDszMm0nOyBcCisgICAgbGduPScbWzE7MzJtJzsgXAorICAgIGJsdT0nG1sxOzM0bSc7IFwKKyAgICBtZ249JxtbMDszNW0nOyBcCisgICAgYnJnPScbWzFtJzsgXAorICAgIHN0ZD0nG1ttJzsgXAorICBmaTsgXAorfQorYW1fX3JzdF90aXRsZSA9IHsgc2VkICdzLy4qLyAgICYgICAvO2g7cy8uLz0vZztwO3g7cy8gKiQkLy87cDtnJyAmJiBlY2hvOyB9CithbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYworYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MgPSBcCisgIC0tY29sb3ItdGVzdHMgIiQkYW1fX2NvbG9yX3Rlc3RzIiBcCisgIC0tZW5hYmxlLWhhcmQtZXJyb3JzICIkJGFtX19lbmFibGVfaGFyZF9lcnJvcnMiIFwKKyAgLS1leHBlY3QtZmFpbHVyZSAiJCRhbV9fZXhwZWN0X2ZhaWx1cmUiCithbV9fY2hlY2tfcHJlID0gXAorJChhbV9fc2hfZV9zZXR1cCk7IFwKKyQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKSBcCiskKGFtX190dHlfY29sb3JzKTsgXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorY2FzZSAiJEAiIGluIFwKKyAgKi8qKSBhbV9fb2Rpcj1gZWNobyAiLi8kQCIgfCBzZWQgJ3N8L1teL10qJCR8fCdgOzsgXAorICAgICopIGFtX19vZGlyPS47OyBcCitlc2FjOyBcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4Ii4iIHx8IHRlc3QgLWQgIiQkYW1fX29kaXIiIFwKKyAgfHwgJChNS0RJUl9QKSAiJCRhbV9fb2RpciIgfHwgZXhpdCAkJD87IFwKK2lmIHRlc3QgLWYgIi4vJCRmIjsgdGhlbiBkaXI9Li87IFwKK2VsaWYgdGVzdCAtZiAiJCRmIjsgdGhlbiBkaXI9OyBcCitlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCit0c3Q9JCRkaXIkJGY7IGxvZz0nJEAnOyBcCitpZiB0ZXN0IC1uICckKERJU0FCTEVfSEFSRF9FUlJPUlMpJzsgdGhlbiBcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IFwKK2Vsc2UgXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPXllczsgXAorZmk7CithbV9fc2V0X1RFU1RTX2Jhc2VzID0gXAorICBiYXNlcz0nJChURVNUX0xPR1MpJzsgXAorICBiYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgfCBzZWQgJ3MvXC5sb2ckJC8vJ2A7IFwKKyAgYmFzZXM9YGVjaG8gJCRiYXNlc2AKK1JFQ0hFQ0tfTE9HUyA9ICQoVEVTVF9MT0dTKQorVEVTVF9TVUlURV9MT0cgPSB0ZXN0LXN1aXRlLmxvZworVEVTVF9FWFRFTlNJT05TID0gIC50ZXN0CitMT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgorYW1fX3Rlc3RfbG9nczEgPSAkKFRFU1RTOj0ubG9nKQorYW1fX3Rlc3RfbG9nczIgPSAkKGFtX190ZXN0X2xvZ3MxOi5sb2c9LmxvZykKK1RFU1RfTE9HUyA9ICQoYW1fX3Rlc3RfbG9nczI6LnRlc3QubG9nPS5sb2cpCitNS0RJUl9QID0gL2Jpbi9ta2RpciAtcAorUEFDS0FHRV9TVFJJTkcgPSBQQ1JFIDguMzYKK1NIRUxMID0gL2Jpbi9zaAorc3JjZGlyID0gLgordG9wX3NyY2RpciA9IC4KKyQoVEVTVF9TVUlURV9MT0cpOiAkKFRFU1RfTE9HUykKKwlAJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWFtX19mX29rICgpIHsgdGVzdCAtZiAiJCQxIiAmJiB0ZXN0IC1yICIkJDEiOyB9OyBcCisJcmVkb19iYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gXAorCSAgICAgICAgICAgICAgYW1fX2Zfb2sgJCRpLnRycyAmJiBhbV9fZl9vayAkJGkubG9nIHx8IGVjaG8gJCRpOyBcCisJICAgICAgICAgICAgZG9uZWA7IFwKKwlzdD0wOyAgXAorCWVycm1zZz0iZmF0YWw6IG1ha2luZyAkKFRFU1RfU1VJVEVfTE9HKTogZmFpbGVkIHRvIGNyZWF0ZSI7IFwKKwlmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIFwKKwkgIHRlc3QgLWYgJCRpLnRycyAmJiB0ZXN0IC1yICQkaS50cnMgXAorCSAgICB8fCB7IGVjaG8gIiQkZXJybXNnICQkaS50cnMiID4mMjsgc3Q9MTsgfTsgXAorCSAgdGVzdCAtZiAkJGkubG9nICYmIHRlc3QgLXIgJCRpLmxvZyBcCisJICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLmxvZyIgPiYyOyBzdD0xOyB9OyBcCisJZG9uZTsgXAorCXRlc3QgJCRzdCAtZXEgMCB8fCBleGl0IDE7CisJQCQoYW1fX3NoX2Vfc2V0dXApOyAkKGFtX190dHlfY29sb3JzKTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCXdzPSdbIAldJzsgXAorCXJlc3VsdHM9YGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiLnRyczsgZG9uZWA7IFwKKwl0ZXN0IC1uICIkJHJlc3VsdHMiIHx8IHJlc3VsdHM9L2Rldi9udWxsOyBcCisJYWxsPWAgIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDoiICAgICAgICAgICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlwYXNzPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqUEFTUyIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWZhaWw9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypGQUlMIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJc2tpcD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlNLSVAiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4ZmFpbD1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWEZBSUwiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhwYXNzPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYUEFTUyIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZXJyb3I9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkVSUk9SIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlpZiB0ZXN0IGBleHByICQkZmFpbCArICQkeHBhc3MgKyAkJGVycm9yYCAtZXEgMDsgdGhlbiBcCisJICBzdWNjZXNzPXRydWU7IFwKKwllbHNlIFwKKwkgIHN1Y2Nlc3M9ZmFsc2U7IFwKKwlmaTsgXAorCWJyPSc9PT09PT09PT09PT09PT09PT09JzsgYnI9JCRiciQkYnIkJGJyJCRicjsgXAorCXJlc3VsdF9jb3VudCAoKSBcCisJeyBcCisJICAgIGlmIHRlc3QgeCIkJDEiID0geCItLW1heWJlLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9eWVzOyBcCisJICAgIGVsaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbm8tY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT1ubzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICIkQDogaW52YWxpZCAncmVzdWx0X2NvdW50JyB1c2FnZSIgPiYyOyBleGl0IDQ7IFwKKwkgICAgZmk7IFwKKwkgICAgc2hpZnQ7IFwKKwkgICAgZGVzYz0kJDEgY291bnQ9JCQyOyBcCisJICAgIGlmIHRlc3QgJCRtYXliZV9jb2xvcml6ZSA9IHllcyAmJiB0ZXN0ICQkY291bnQgLWd0IDA7IHRoZW4gXAorCSAgICAgIGNvbG9yX3N0YXJ0PSQkMyBjb2xvcl9lbmQ9JCRzdGQ7IFwKKwkgICAgZWxzZSBcCisJICAgICAgY29sb3Jfc3RhcnQ9IGNvbG9yX2VuZD07IFwKKwkgICAgZmk7IFwKKwkgICAgZWNobyAiJCR7Y29sb3Jfc3RhcnR9IyAkJGRlc2MgJCRjb3VudCQke2NvbG9yX2VuZH0iOyBcCisJfTsgXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0ICgpIFwKKwl7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlRPVEFMOiIgJCRhbGwgICAiJCRicmciOyBcCisJICByZXN1bHRfY291bnQgJCQxICJQQVNTOiAiICQkcGFzcyAgIiQkZ3JuIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiU0tJUDogIiAkJHNraXAgICIkJGJsdSI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhGQUlMOiIgJCR4ZmFpbCAiJCRsZ24iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJGQUlMOiAiICQkZmFpbCAgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWFBBU1M6IiAkJHhwYXNzICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkVSUk9SOiIgJCRlcnJvciAiJCRtZ24iOyBcCisJfTsgXAorCXsJCQkJCQkJCVwKKwkgIGVjaG8gIiQoUEFDS0FHRV9TVFJJTkcpOiAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykiIHwJXAorCSAgICAkKGFtX19yc3RfdGl0bGUpOwkJCQkJCVwKKwkgIGNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbm8tY29sb3I7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBlY2hvICIuLiBjb250ZW50czo6IDpkZXB0aDogMiI7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYjsgZG9uZTsJCQkJXAorCX0gPiQoVEVTVF9TVUlURV9MT0cpLnRtcCB8fCBleGl0IDE7CQkJCVwKKwltdiAkKFRFU1RfU1VJVEVfTE9HKS50bXAgJChURVNUX1NVSVRFX0xPRyk7CQkJXAorCWlmICQkc3VjY2VzczsgdGhlbgkJCQkJCVwKKwkgIGNvbD0iJCRncm4iOwkJCQkJCQlcCisJIGVsc2UJCQkJCQkJCVwKKwkgIGNvbD0iJCRyZWQiOwkJCQkJCQlcCisJICB0ZXN0IHgiJCRWRVJCT1NFIiA9IHggfHwgY2F0ICQoVEVTVF9TVUlURV9MT0cpOwkJXAorCWZpOwkJCQkJCQkJXAorCWVjaG8gIiQke2NvbH0kJGJyJCR7c3RkfSI7IAkJCQkJXAorCWVjaG8gIiQke2NvbH1UZXN0c3VpdGUgc3VtbWFyeSBmb3IgJChQQUNLQUdFX1NUUklORykkJHtzdGR9IjsJXAorCWVjaG8gIiQke2NvbH0kJGJyJCR7c3RkfSI7IAkJCQkJXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbWF5YmUtY29sb3I7CQkJCVwKKwllY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQkJXAorCWlmICQkc3VjY2VzczsgdGhlbiA6OyBlbHNlCQkJCQlcCisJICBlY2hvICIkJHtjb2x9U2VlICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSQke3N0ZH0iOwkJXAorCSAgZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJXAorCWZpOwkJCQkJCQkJXAorCSQkc3VjY2VzcyB8fCBleGl0IDEKK2NoZWNrLVRFU1RTOgorCUBsaXN0PSckKFJFQ0hFQ0tfTE9HUyknOyAgICAgICAgICAgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3QKKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQHNldCArZTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWxvZ19saXN0PWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCisJbG9nX2xpc3Q9YGVjaG8gJCRsb2dfbGlzdGA7IFwKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbG9nX2xpc3QiOyBcCisJZXhpdCAkJD87CitwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0LmxvZzogcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCQoRVhFRVhUKQorCUBwPSdwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0JChFWEVFWFQpJzsgXAorCWI9J3BjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QnOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAiJCR0c3QiCitSdW5UZXN0LmxvZzogUnVuVGVzdAorCUBwPSdSdW5UZXN0JzsgXAorCWI9J1J1blRlc3QnOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAiJCR0c3QiCitSdW5HcmVwVGVzdC5sb2c6IFJ1bkdyZXBUZXN0CisJQHA9J1J1bkdyZXBUZXN0JzsgXAorCWI9J1J1bkdyZXBUZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjQ0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1RoaXMgcGF0Y2ggYWRkcmVzcyBhIG5hbWVzcGFjZSBjb2xsaXNpb24gd2l0aCBsaWJjLgorCitBbHRob3VnaCB0aGVyZSBpcyBubyAiI2luY2x1ZGUgPHJlZ2V4Lmg+IiBpbiB0aGUgc291cmNlIGZpbGUsIGF0CitydW50aW1lLCBpdCdzIHVuaW50ZW50aW9uYWxseSBsaW5rZWQgdG8gdGhlIGxpYmMgdmVyc2lvbiwgdGhlIHJlZ2NvbXAgb2YKK2xpYmMgaXMgY2FsbGVkIGluc3RlYWQgdGhlIHBjcmUgb25lIHVzaW5nIHBjcmUncyBkYXRhIHN0cnVjdHVyZS4uLgordGhhdCBsb29rcyBsaWtlIGEgZGlzYXN0ZXIuCisKK0NhbiBwYXRjaCBpcyBmcm9tIERlYmlhbiAoYW5kIFVidW50dSAxMS4wNGFscGhhIGhhcyBpdCBhbHNvKS4KKworW3NndzogYWRkZWQgcGF0Y2ggY29tbWVudF0KK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCistLS0gYS9wY3JlcG9zaXguaAkyMDEwLTA1LTE3IDAwOjE3OjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGIvcGNyZXBvc2l4LmgJMjAwOS0wMS0xNSAwNDozMjoxNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xMzMsMTQgKzEzMCwxOSBAQAorIAorIC8qIFRoZSBmdW5jdGlvbnMgKi8KKyAKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgaW50IHJlZ2NvbXAocmVnZXhfdCAqLCBjb25zdCBjaGFyICosIGludCk7CistUENSRVBPU0lYX0VYUF9ERUNMIGludCByZWdleGVjKGNvbnN0IHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisrUENSRVBPU0lYX0VYUF9ERUNMIGludCBwY3JlcG9zaXhfcmVnY29tcChyZWdleF90ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKytQQ1JFUE9TSVhfRVhQX0RFQ0wgaW50IHBjcmVwb3NpeF9yZWdleGVjKGNvbnN0IHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgcmVnbWF0Y2hfdCAqLCBpbnQpOworLVBDUkVQT1NJWF9FWFBfREVDTCBzaXplX3QgcmVnZXJyb3IoaW50LCBjb25zdCByZWdleF90ICosIGNoYXIgKiwgc2l6ZV90KTsKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgdm9pZCByZWdmcmVlKHJlZ2V4X3QgKik7CisrUENSRVBPU0lYX0VYUF9ERUNMIHNpemVfdCBwY3JlcG9zaXhfcmVnZXJyb3IoaW50LCBjb25zdCByZWdleF90ICosIGNoYXIgKiwgc2l6ZV90KTsKKytQQ1JFUE9TSVhfRVhQX0RFQ0wgdm9pZCBwY3JlcG9zaXhfcmVnZnJlZShyZWdleF90ICopOworIAorICNpZmRlZiBfX2NwbHVzcGx1cworIH0gICAvKiBleHRlcm4gIkMiICovCisgI2VuZGlmCisgCisrI2RlZmluZSByZWdjb21wIHBjcmVwb3NpeF9yZWdjb21wCisrI2RlZmluZSByZWdleGVjIHBjcmVwb3NpeF9yZWdleGVjCisrI2RlZmluZSByZWdlcnJvciBwY3JlcG9zaXhfcmVnZXJyb3IKKysjZGVmaW5lIHJlZ2ZyZWUgcGNyZXBvc2l4X3JlZ2ZyZWUKKysKKyAjZW5kaWYgLyogRW5kIG9mIHBjcmVwb3NpeC5oICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9wY3JlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODgwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHBjcmUtOC4zMi5vcmlnL01ha2VmaWxlLmFtCisrKysgcGNyZS04LjMyL01ha2VmaWxlLmFtCitAQCAtMTk3LDggKzE5NywxOCBAQCBiaW5fU0NSSVBUUyA9IHBjcmUtY29uZmlnCisgCisrQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKKytDRkxBR1NfRk9SX0JVSUxEID0gQENGTEFHU19GT1JfQlVJTERACisrQ0NMRF9GT1JfQlVJTEQgPSBAQ0NMRF9GT1JfQlVJTERACisrTERGTEFHU19GT1JfQlVJTEQgPSBATERGTEFHU19GT1JfQlVJTERACisrCisgaWYgV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVMKKyAKKyBub2luc3RfUFJPR1JBTVMgKz0gZGZ0YWJsZXMKKyBkZnRhYmxlc19TT1VSQ0VTID0gZGZ0YWJsZXMuYworK2RmdGFibGVzX0xJTksgPSAkKENDTERfRk9SX0JVSUxEKSAtbyAkQAorK2RmdGFibGVzX0xERkxBR1MgPSAkKExERkxBR1NfRk9SX0JVSUxEKQorKworK2RmdGFibGVzLm86ICQoc3JjZGlyKS9kZnRhYmxlcy5jCisrCSQoQ0NfRk9SX0JVSUxEKSAtYyAkKENGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoc3JjZGlyKS9kZnRhYmxlcy5jCisgCisgcGNyZV9jaGFydGFibGVzLmM6IGRmdGFibGVzJChFWEVFWFQpCisgCS4vZGZ0YWJsZXMkKEVYRUVYVCkgJEAKKy0tLSBwY3JlLTguMzIub3JpZy9jb25maWd1cmUuYWMKKysrKyBwY3JlLTguMzIvY29uZmlndXJlLmFjCitAQCAtNzIsNiArNzIsMjIgQEAgdGhlbgorICAgZmkKKyBmaQorIAorK2lmIHRlc3QgeCIkY3Jvc3NfY29tcGlsaW5nIiA9IHh5ZXM7IHRoZW4KKysgICAgQ0NfRk9SX0JVSUxEPSIke0NDX0ZPUl9CVUlMRC1nY2N9IgorKyAgICBDQ0xEX0ZPUl9CVUlMRD0iJHtDQ0xEX0ZPUl9CVUlMRC1nY2N9IgorKyAgICBDRkxBR1NfRk9SX0JVSUxEPSIke0NGTEFHU19GT1JfQlVJTER9IgorKyAgICBMREZMQUdTX0ZPUl9CVUlMRD0iJHtMREZMQUdTX0ZPUl9CVUlMRH0iCisrZWxzZQorKyAgICBDQ19GT1JfQlVJTEQ9IiR7Q0NfRk9SX0JVSUxELVwkKENDKX0iCisrICAgIENDTERfRk9SX0JVSUxEPSIke0NDTERfRk9SX0JVSUxELVwkKENDTEQpfSIKKysgICAgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtDRkxBR1NfRk9SX0JVSUxELVwkKENGTEFHUyl9IgorKyAgICBMREZMQUdTX0ZPUl9CVUlMRD0iJHtMREZMQUdTX0ZPUl9CVUlMRC1cJChMREZMQUdTKX0iCisrZmkKKytBQ19BUkdfVkFSKENDX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGNvbXBpbGVyXSkKKytBQ19BUkdfVkFSKENDTERfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgbGlua2VyIGZyb250ZW5kXSkKKytBQ19BUkdfVkFSKENGTEFHU19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBjb21waWxlciBhcmd1bWVudHNdKQorK0FDX0FSR19WQVIoTERGTEFHU19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBsaW5rZXIgZnJvbnRlbmQgYXJndW1lbnRzXSkKKysKKyAjIEFDX1BST0dfQ1hYIHdpbGwgcmV0dXJuICJnKysiIGV2ZW4gaWYgbm8gYysrIGNvbXBpbGVyIGlzIGluc3RhbGxlZC4KKyAjIENoZWNrIGZvciB0aGF0IGNhc2UsIGFuZCBqdXN0IGRpc2FibGUgYysrIGNvZGUgaWYgZysrIGRvZXNuJ3QgcnVuLgorIEFDX0xBTkdfUFVTSChDKyspCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBkNGExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZmM5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYgpAQCAtMCwwICsxLDczIEBACitERVNDUklQVElPTiA9ICJUaGUgUENSRSBsaWJyYXJ5IGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCByZWd1bGFyIFwKK2V4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyB1c2luZyB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBQZXJsIDUuIFBDUkUgXAoraGFzIGl0cyBvd24gbmF0aXZlIEFQSSwgYXMgd2VsbCBhcyBhIHNldCBvZiB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgXAordG8gdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBBUEkuIgorU1VNTUFSWSA9ICJQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGNyZS5vcmciCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT03ZTQ5Mzc4MTRhZWUxNDc1OGMxYzk1YjU5YzgwYzQ0ZCIKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvcGNyZS9wY3JlLyR7UFZ9L3BjcmUtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wY3JlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZDkxYmUyOTJjYjAxZDIxYmM3ZTUyNjgxNmMyNjk4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTY3OWVhODAwNmNlMzEzNzlmYjA4NjBlNDZkZDg2NjY1ZDg2NGI1MDIwZmM5Y2QxOWU3MTI2MGVlZjQ3ODlkIgorCitTID0gIiR7V09SS0RJUn0vcGNyZS0ke1BWfSIKKworUFJPVklERVMgKz0gInBjcmUiCitERVBFTkRTICs9ICJiemlwMiB6bGliIgorCitQQUNLQUdFQ09ORklHW3BjcmV0ZXN0LXJlYWRsaW5lXSA9ICItLWVuYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSwtLWRpc2FibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUscmVhZGxpbmUsIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BjcmUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmIFwKKyAgICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgXAorICAgIC0tZW5hYmxlLXV0ZjggXAorICAgIC0td2l0aC1saW5rLXNpemU9MiBcCisgICAgLS13aXRoLW1hdGNoLWxpbWl0PTEwMDAwMDAwIFwKKyIKKworIyBTZXQgTElOS19TSVpFIGluIEJVSUxEX0NGTEFHUyBnaXZlbiB0aGF0IHRoZSBhdXRvdG9vbHMgYmJjbGFzcyB1c2UgaXQgdG8KKyMgc2V0IENGTEFHU19GT1JfQlVJTEQsIHJlcXVpcmVkIGZvciB0aGUgbGlicGNyZSBidWlsZC4KK0JVSUxEX0NGTEFHUyA9KyAiLURMSU5LX1NJWkU9MiAtSSR7Qn0iCitDRkxBR1MgKz0gIi1EX1JFRU5UUkFOVCIKK0NYWEZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtbHN0ZGMrKyIKKworUEFDS0FHRVMgPSsgImxpYnBjcmVjcHAgbGlicGNyZXBvc2l4IHBjcmVncmVwIHBjcmVncmVwLWRvYyBwY3JldGVzdCBwY3JldGVzdC1kb2MiCisKK1NVTU1BUllfbGlicGNyZWNwcCA9ICIke1NVTU1BUll9IC0gQysrIHdyYXBwZXIgZnVuY3Rpb25zIgorU1VNTUFSWV9saWJwY3JlcG9zaXggPSAiJHtTVU1NQVJZfSAtIEMgd3JhcHBlciBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIFBPU0lYIHJlZ2V4IEFQSSIKK1NVTU1BUllfcGNyZWdyZXAgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIgorU1VNTUFSWV9wY3JlZ3JlcC1kb2MgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIC0gZG9jcyIKK1NVTU1BUllfcGNyZXRlc3QgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorU1VNTUFSWV9wY3JldGVzdC1kb2MgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIC0gZG9jcyIKKworRklMRVNfbGlicGNyZWNwcCA9ICIke2xpYmRpcn0vbGlicGNyZWNwcC5zby4qIgorRklMRVNfbGlicGNyZXBvc2l4ID0gIiR7bGliZGlyfS9saWJwY3JlcG9zaXguc28uKiIKK0ZJTEVTX3BjcmVncmVwID0gIiR7YmluZGlyfS9wY3JlZ3JlcCIKK0ZJTEVTX3BjcmVncmVwLWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JlZ3JlcC4xIgorRklMRVNfcGNyZXRlc3QgPSAiJHtiaW5kaXJ9L3BjcmV0ZXN0IgorRklMRVNfcGNyZXRlc3QtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmV0ZXN0LjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAkdAorCWNwIC1yICR7U30vdGVzdGRhdGEgJHQKKwlmb3IgaSBpbiBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0IHBjcmVncmVwIHBjcmV0ZXN0OyBcCisJICBkbyBjcCAke0J9Ly5saWJzLyRpICR0OyBcCisJZG9uZQorCWZvciBpIGluIFJ1blRlc3QgUnVuR3JlcFRlc3QgdGVzdC1kcml2ZXI7IFwKKwkgIGRvIGNwICR7U30vJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZTUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGY1ZjJjMjI4OWViMzVlYjgwNGMxYzM1ZTQ2Y2E0MWI1OGU0Y2FlMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE0OjEzOjQ5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3Q6IEluY2x1ZGUgPHN5cy9zZWxlY3QuaD4gZm9yIHNlbGVjdCgpCisKK0FzIHBlciBwb3NpeCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBlcnJvcnMgbGlrZQorCisvaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOiBJbiBtZW1iZXIgZnVuY3Rpb24gJ2Jvb2wgVGVzdFNlcnZlcjo6bG9vcCgpJzoKKy9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6ODA6NDogZXJyb3I6ICdmZF9zZXQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgIGZkX3NldCBmZHM7CisgICAgXgorL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDo4OToxNDogZXJyb3I6ICdmZHMnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgIEZEX1pFUk8gKCZmZHMpOworPEpJUkEgVElDS0VUICMxPiwgPEpJUkEgVElDS0VUICMyPiwgPEpJUkEgVElDS0VUICNuPiA6IDxvbmUgbGluZSBzdW1tYXJ5IG9mIGNoYW5nZT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcCBiL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAoraW5kZXggYTYxZmM0Yi4uYmRhNDY0NiAxMDA2NDQKKy0tLSBhL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAorKysrIGIvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwCitAQCAtMyw2ICszLDcgQEAKKyAjaW5jbHVkZSA8c3N0cmVhbT4KKyAjaW5jbHVkZSA8c3RyaW5nPgorIAorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDBiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTEuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHByb3ZpZGluZyBhdXRvbWF0aWMgcHJveHkgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xpYnByb3h5LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xpYnByb3h5L2lzc3Vlcy9saXN0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91dGlscy9wcm94eS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTU1MTUyYTEwMDZkN2RhZmJlZjMyYmFmOWMzMGE5OWMwIgorCitERVBFTkRTID0gImdjb25mIGdsaWItMi4wIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9saWJwLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2QxYWUyYTRhYmVjZjQ0YjNmMjRkNjYzOWQyY2Q4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYzNmMzNkZTU0MTYzNzE4ZjgyYjNlN2M0OTZhN2RlOTdmODg2MjU3ODQxNGI4ZWNhYWQzY2JmZTQ4MjE4NjRiIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZworCitFWFRSQV9PRUNNQUtFID0gIi1EV0lUSF9XRUJLSVQ9bm8gLURXSVRIX0dOT01FPXllcyAtRFdJVEhfS0RFND1ubyBcCisJICAgICAgLURXSVRIX1BZVEhPTj1ubyAtRFdJVEhfUEVSTD1ubyAtRFdJVEhfTU9aSlM9bm8gLURXSVRIX05NPW5vIC1ETElCX0lOU1RBTExfRElSPSR7bGliZGlyfSAtRExJQkVYRUNfSU5TVEFMTF9ESVI9JHtsaWJleGVjZGlyfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS8ke1BWfS9wbHVnaW5zLy5kZWJ1Zy8gJHtsaWJkaXJ9LyR7QlBOfS8ke1BWfS9tb2R1bGVzLy5kZWJ1Zy8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWV4cG9ydCBIT1NUX1NZUz0ke0hPU1RfU1lTfQorCWV4cG9ydCBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9Cit9CisKK3B5dGhvbigpIHsKKyAgICBpZiBpbmNvbXBhdGlibGVfbGljZW5zZV9jb250YWlucygiR1BMdjMiLCAieCIsICIiLCBkKSA9PSAieCIgb3IgYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ4MTEiLCAieCIsICIiLCBkKSA9PSAiIjoKKyAgICAgICAgZC5zZXRWYXIoIkVYVFJBX09FQ01BS0UiLCBkLmdldFZhcigiRVhUUkFfT0VDTUFLRSIsIEZhbHNlKS5yZXBsYWNlKCItRFdJVEhfR05PTUU9eWVzIiwgIi1EV0lUSF9HTk9NRT1ubyIpKQorICAgICAgICBkLnNldFZhcigiREVQRU5EUyIsICIgIi5qb2luKGkgZm9yIGkgaW4gZC5nZXRWYXIoIkRFUEVORFMiLCBGYWxzZSkuc3BsaXQoKSBpZiBpICE9ICJnY29uZiIpKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRkYjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJBbiBIVFRQIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW4gQyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitTRUNUSU9OID0gIngxMS9nbm9tZS9saWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIGdudXRscyBsaWJ4bWwyIHNxbGl0ZTMgaW50bHRvb2wtbmF0aXZlIgorCisjIGxpYnNvdXAtZ25vbWUgaXMgZW50aXJlbHkgZGVwcmVjYXRlZCBhbmQganVzdCBzdHVicyBpbiAyLjQyIG9ud2FyZHMuICBFbmFibGUKKyMgYnkgZGVmYXVsdCBidXQgbGV0IGl0IGJlIGVhc2lseSBkaXNhYmxlZC4KK1BBQ0tBR0VDT05GSUcgPz89ICJnbm9tZSIKK1BBQ0tBR0VDT05GSUdbZ25vbWVdID0gIi0td2l0aC1nbm9tZSwtLXdpdGhvdXQtZ25vbWUiCisKK1NIUlRfVkVSID0gIiR7QGJiLmRhdGEuZ2V0VmFyKCdQVicsZCwxKS5zcGxpdCgnLicpWzBdfS4ke0BiYi5kYXRhLmdldFZhcignUFYnLGQsMSkuc3BsaXQoJy4nKVsxXX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJzb3VwLyR7U0hSVF9WRVJ9L2xpYnNvdXAtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWE4NGQ2NmUxYjdjY2QzYmQzNDA1NzRiMTFlY2NjMTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWUwMTM2NWFjNGFmMzgxNzE4N2VhODQ3ZjlkMzU4OGMyN2VlZTAxZmM1MTlhNWE3Y2IyMTJiYjc4YjBmNjY3YiIKKworUyA9ICIke1dPUktESVJ9L2xpYnNvdXAtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMgZ2xpYi1uZXR3b3JraW5nIGlzIG5lZWRlZCBmb3IgU1NMLCBwcm94aWVzLCBldGMuCitSUkVDT01NRU5EU18ke1BOfSA9ICJnbGliLW5ldHdvcmtpbmciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlYWNiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBsaWJ1bmlzdHJpbmctMC45LjQvbGliL01ha2VmaWxlLmdudWxpYgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnVuaXN0cmluZy0wLjkuNC5vcmlnL2xpYi9NYWtlZmlsZS5nbnVsaWIKKysrKyBsaWJ1bmlzdHJpbmctMC45LjQvbGliL01ha2VmaWxlLmdudWxpYgorQEAgLTM4MCw3ICszODAsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4OTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA4ZDk5YTM2ODYxNTY1NmE4MzVmNTUwMjMyNmFmZDMxY2VjMmNlYmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgU2VwIDIwMTMgMTg6MTY6MTIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIHRoZSB0ZXN0IHRvIGNvbnZlcnQgZXVjLWpwCisKK1JlbW92ZSB0aGUgdGVzdCAiVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzoKK05vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcyBwcm92aWRlZCIKK3NpbmNlIHdlIGRvbid0IHN1cHBvcnQgSFAtVVggYW5kIGlmIHRoZSBldWMtanAgaXMgbm90CitpbnN0YWxsZWQgb24gdGhlIGhvc3QsIGxpYnVuaXN0cmluZyB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGQtbmF0aXZlIGNvbmZpZ3VyZSBmYWlsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ251bGliLW00L2ljb252Lm00IHwgICAxMSAtLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGxpYnVuaXN0cmluZy0wLjkuNC9nbnVsaWItbTQvaWNvbnYubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ1bmlzdHJpbmctMC45LjQub3JpZy9nbnVsaWItbTQvaWNvbnYubTQJMjAxNC0xMS0wMyAxNzo0MToyOS43NTUwMTE5MTcgKzAwMDAKKysrKyBsaWJ1bmlzdHJpbmctMC45LjQvZ251bGliLW00L2ljb252Lm00CTIwMTQtMTEtMDMgMTc6NDM6MDMuNzk1MDE0NDgwICswMDAwCitAQCAtMTU5LDE3ICsxNTksNiBAQAorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKy0gIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcworLSAgICAgcHJvdmlkZWQuICAqLworLSAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworLSAgICAgIGljb252X29wZW4gKCJVVEYtOCIsICJFVUMtSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KKy0gICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IEFJWCBuYW1lcy4gICovCistICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKKy0gICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworLSAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKy0gICAgcmVzdWx0IHw9IDE2OworICAgcmV0dXJuIHJlc3VsdDsKKyB9XV0pXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNmNjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBDIGFuZCBVbmljb2RlIHN0cmluZ3MiCisKK0RFU0NSSVBUSU9OID0gIlRleHQgZmlsZXMgYXJlIG5vd2FkYXlzIHVzdWFsbHkgZW5jb2RlZCBpbiBVbmljb2RlLCBhbmQgbWF5XAorIGNvbnNpc3Qgb2YgdmVyeSBkaWZmZXJlbnQgc2NyaXB0cyBmcm9tIExhdGluIGxldHRlcnMgdG8gQ2hpbmVzZSBIYW56aVwKKyB3aXRoIG1hbnkga2luZHMgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIGFjY2VudHMsIHJpZ2h0LXRvLWxlZnQgd3JpdGluZ1wKKyBtYXJrcywgaHlwaGVucywgUm9tYW4gbnVtYmVycywgYW5kIG11Y2ggbW9yZS4gQnV0IHRoZSBQT1NJWCBwbGF0Zm9ybVwKKyBBUElzIGZvciB0ZXh0IGRvIG5vdCBjb250YWluIGFkZXF1YXRlIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoXAorIHBhcnRpY3VsYXIgcHJvcGVydGllcyBvZiBtYW55IFVuaWNvZGUgY2hhcmFjdGVycy4gSW4gZmFjdCwgdGhlIFBPU0lYXAorIEFQSXMgZm9yIHRleHQgaGF2ZSBzZXZlcmFsIGFzc3VtcHRpb25zIGF0IHRoZWlyIGJhc2Ugd2hpY2ggZG9uJ3QgaG9sZFwKKyBmb3IgVW5pY29kZSB0ZXh0LiAgVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nXAorIFVuaWNvZGUgc3RyaW5ncyBhbmQgZm9yIG1hbmlwdWxhdGluZyBDIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBVbmljb2RlXAorIHN0YW5kYXJkLiAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24uIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidW5pc3RyaW5nLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjFhNzA1YmNkY2I4Mzc5OWQ1NDQxMzc2MTdiMzc3Y2ZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhOGMwNzcyNDY3ODUwYmVmNzE5NzMxOGE5NWY0NGFiYmI2NzhlYTgzY2JmMTE5YTM1MDBjYzc4NDgyNzZhMTciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk3MmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gMzk2YjZjN2FiNzM3ZTJiZmYyNDRkNjQwNjAxYzQzNmEyNjI2MGNhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFydW4gU2hhcm1hIDxhcnVuQHNoYXJtYS1ob21lLm5ldD4KK0RhdGU6IEZyaSwgMTkgSnVuIDIwMTUgMTk6NDc6MjIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW52YWxpZCBkd2FyZiBvcGNvZGVzIGNhbiBjYXVzZSByZWZlcmVuY2VzIGJleW9uZCB0aGUgZW5kIG9mCisgdGhlIGFycmF5LgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGUvZHdhcmZfaS5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kd2FyZl9pLmggYi9pbmNsdWRlL2R3YXJmX2kuaAoraW5kZXggMWU2MjMxZS4uNGEwMmE3ZCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHdhcmZfaS5oCisrKysgYi9pbmNsdWRlL2R3YXJmX2kuaAorQEAgLTIwLDcgKzIwLDcgQEAKKyBleHRlcm4gY29uc3QgdWludDhfdCBkd2FyZl90b191bndfcmVnbnVtX21hcFtEV0FSRl9SRUdOVU1fTUFQX0xFTkdUSF07CisgLyogUkVHIGlzIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lczsgaXQgYmV0dGVyIGJlIHNpZGUtZWZmZWN0cyBmcmVlISAgKi8KKyAjIGRlZmluZSBkd2FyZl90b191bndfcmVnbnVtKHJlZykJCQkJCSAgXAorLSAgKCgocmVnKSA8PSBEV0FSRl9SRUdOVU1fTUFQX0xFTkdUSCkgPyBkd2FyZl90b191bndfcmVnbnVtX21hcFtyZWddIDogMCkKKysgICgoKHJlZykgPCBEV0FSRl9SRUdOVU1fTUFQX0xFTkdUSCkgPyBkd2FyZl90b191bndfcmVnbnVtX21hcFtyZWddIDogMCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4ZWMzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaApAQCAtMCwwICsxLDI1MjkgQEAKK0Zyb20gYWM2YzBhNjUzNTk3NWYxZGMyZGE2ZTRlMjc2NjYxNGJhYWMyYTE0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl2YW4gUm91eCA8eXZhbi5yb3V4QGxpbmFyby5vcmc+CitEYXRlOiBTYXQsIDExIE1heSAyMDEzIDA5OjE4OjIzIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFBcmNoNjQgcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2IAorIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAKKyBpbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmggICAgICAgICAgfCAgMTg3ICsrKysrKysrKysrKysrKysrKysrKysKKyBpbmNsdWRlL2xpYnVud2luZC5oLmluICAgICAgICAgICAgICAgfCAgICA0IAorIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oICB8ICAgNTIgKysrKysrCisgaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmggICAgICAgIHwgICAzMyArKysKKyBpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oICAgfCAgMjk0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oICAgICAgICAgIHwgICAgNCAKKyBpbmNsdWRlL3RkZXAvam1wYnVmLmggICAgICAgICAgICAgICAgfCAgICAyIAorIGluY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oLmluICAgICAgICB8ICAgIDQgCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArKysrCisgc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMgICAgIHwgICA2MCArKysrKysrCisgc3JjL2FhcmNoNjQvR2dldF9wcm9jX2luZm8uYyAgICAgICAgIHwgICAzOSArKysrCisgc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jICAgICAgICAgIHwgIDEwMCArKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dnbG9iYWwuYyAgICAgICAgICAgICAgICB8ICAgNTcgKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXQuYyAgICAgICAgICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYyAgICAgICAgICAgIHwgICA1NSArKysrKysKKyBzcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYyAgICAgICAgICAgfCAgIDQ1ICsrKysrCisgc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jICAgICAgIHwgICA2NCArKysrKysrCisgc3JjL2FhcmNoNjQvR3JlZ3MuYyAgICAgICAgICAgICAgICAgIHwgIDExMyArKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR3Jlc3VtZS5jICAgICAgICAgICAgICAgIHwgIDE3NyArKysrKysrKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9Hc3RlcC5jICAgICAgICAgICAgICAgICAgfCAgMTI5ICsrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYyAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xnbG9iYWwuYyAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGluaXQuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaW5pdF9sb2NhbC5jICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9McmVncy5jICAgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xyZXN1bWUuYyAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTHN0ZXAuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jICAgICAgICAgICAgfCAgIDY4ICsrKysrKysrCisgc3JjL2FhcmNoNjQvaW5pdC5oICAgICAgICAgICAgICAgICAgIHwgIDEyNyArKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9pc19mcHJlZy5jICAgICAgICAgICAgICAgfCAgIDMyICsrKworIHNyYy9hYXJjaDY0L29mZnNldHMuaCAgICAgICAgICAgICAgICB8ICAgNDkgKysrKysKKyBzcmMvYWFyY2g2NC9yZWduYW1lLmMgICAgICAgICAgICAgICAgfCAgMTA2ICsrKysrKysrKysrKworIHNyYy9hYXJjaDY0L3NpZ2xvbmdqbXAuUyAgICAgICAgICAgICB8ICAgMTIgKworIHNyYy9hYXJjaDY0L3Vud2luZF9pLmggICAgICAgICAgICAgICB8ICAgNDMgKysrKysKKyBzcmMvY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2xpbnV4LmMgfCAgICA1IAorIHNyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMgICAgICAgICB8ICAgMzYgKysrKworIDQzIGZpbGVzIGNoYW5nZWQsIDIxODQgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dldF9wcm9jX2luZm8uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dsb2JhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3JlZ3MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HcmVzdW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3N0ZXAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2xvYmFsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdF9sb2NhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9McmVncy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xyZXN1bWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9Mc3RlcC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2dlbi1vZmZzZXRzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvaW5pdC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2lzX2ZwcmVnLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvb2Zmc2V0cy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3JlZ25hbWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9zaWdsb25nam1wLlMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvdW53aW5kX2kuaAorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yLDYgKzIsOSBAQCBpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL2xpYnVud2luZC1keW5hCisgICAgIGluY2x1ZGUvbGlidW53aW5kLXB0cmFjZS5oIFwKKyAgICAgaW5jbHVkZS9saWJ1bndpbmQtY29yZWR1bXAuaAorIAorK2lmIEFSQ0hfQUFSQ0g2NAorK2luY2x1ZGVfSEVBREVSUyArPSBpbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmgKKytlbmRpZgorIGlmIEFSQ0hfQVJNCisgaW5jbHVkZV9IRUFERVJTICs9IGluY2x1ZGUvbGlidW53aW5kLWFybS5oCisgZW5kaWYKK0BAIC00MSw2ICs0NCw5IEBAIFNVQkRJUlMgPSBzcmMgdGVzdHMgZG9jCisgbm9pbnN0X0hFQURFUlMgPSBpbmNsdWRlL2R3YXJmLmggaW5jbHVkZS9kd2FyZl9pLmggaW5jbHVkZS9kd2FyZi1laC5oCVwKKyAJaW5jbHVkZS9jb21waWxlci5oIGluY2x1ZGUvbGlidW53aW5kX2kuaCBpbmNsdWRlL21lbXBvb2wuaAlcCisgCWluY2x1ZGUvcmVtb3RlLmgJCQkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCQkJCVwKKysJaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmgJCQkJCVwKKysJaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaAkJCQlcCisgCWluY2x1ZGUvdGRlcC1hcm0vZHdhcmYtY29uZmlnLmgJaW5jbHVkZS90ZGVwLWFybS9leF90YWJsZXMuaAlcCisgCWluY2x1ZGUvdGRlcC1hcm0vam1wYnVmLmggaW5jbHVkZS90ZGVwLWFybS9saWJ1bndpbmRfaS5oCVwKKyAJaW5jbHVkZS90ZGVwLWlhNjQvam1wYnVmLmggaW5jbHVkZS90ZGVwLWlhNjQvcnNlLmggCQlcCistLS0gYS9SRUFETUUKKysrKyBiL1JFQURNRQorQEAgLTksNiArOSw3IEBAIHNldmVyYWwgYXJjaGl0ZWN0dXJlL29wZXJhdGluZy1zeXN0ZW0gY28KKyAgTGludXgvSUEtNjQ6CUZ1bGx5IHRlc3RlZCBhbmQgc3VwcG9ydGVkLgorICBMaW51eC9QQVJJU0M6CVdvcmtzIHdlbGwsIGJ1dCBDIGxpYnJhcnkgbWlzc2luZyB1bndpbmQtaW5mby4KKyAgSFAtVVgvSUEtNjQ6CU1vc3RseSB3b3JrcyBidXQga25vd24gdG8gaGF2ZSBzb21lIHNlcmlvdXMgbGltaXRhdGlvbnMuCisrIExpbnV4L0FBcmNoNjQ6CU5ld2x5IGFkZGVkLgorICBMaW51eC9QUEM2NDoJTmV3bHkgYWRkZWQuCisgIExpbnV4L1N1cGVySDoJTmV3bHkgYWRkZWQuCisgIEZyZWVCU0QvaTM4NjoJTmV3bHkgYWRkZWQuCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNCw3ICsxMDQsNyBAQCBTRVRfQVJDSChbJHRhcmdldF9jcHVdLFt0YXJnZXRfYXJjaF0pCisgCisgQUNfQVJHX0VOQUJMRShjb3JlZHVtcCwKKyAJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvcmVkdW1wXSxbYnVpbGRpbmcgbGlidW53aW5kLWNvcmVkdW1wIGxpYnJhcnldKSwsCistICAgICAgICBbQVNfQ0FTRShbJGhvc3RfYXJjaF0sIFthcm0qfG1pcHMqfHNoKnx4ODYqXSwgW2VuYWJsZV9jb3JlZHVtcD15ZXNdLCBbZW5hYmxlX2NvcmVkdW1wPW5vXSldCisrICAgICAgICBbQVNfQ0FTRShbJGhvc3RfYXJjaF0sIFthYXJjaDY0Knxhcm0qfG1pcHMqfHNoKnx4ODYqXSwgW2VuYWJsZV9jb3JlZHVtcD15ZXNdLCBbZW5hYmxlX2NvcmVkdW1wPW5vXSldCisgKQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgd2Ugc2hvdWxkIGJ1aWxkIGxpYnVud2luZC1jb3JlZHVtcF0pCitAQCAtMTIxLDYgKzEyMSw3IEBAIEFDX01TR19SRVNVTFQoWyR0YXJnZXRfb3NdKQorIAorIEFNX0NPTkRJVElPTkFMKEJVSUxEX0NPUkVEVU1QLCB0ZXN0IHgkZW5hYmxlX2NvcmVkdW1wID0geHllcykKKyBBTV9DT05ESVRJT05BTChSRU1PVEVfT05MWSwgdGVzdCB4JHRhcmdldF9hcmNoICE9IHgkaG9zdF9hcmNoKQorK0FNX0NPTkRJVElPTkFMKEFSQ0hfQUFSQ0g2NCwgdGVzdCB4JHRhcmdldF9hcmNoID0geGFhcmNoNjQpCisgQU1fQ09ORElUSU9OQUwoQVJDSF9BUk0sIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhhcm0pCisgQU1fQ09ORElUSU9OQUwoQVJDSF9JQTY0LCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4aWE2NCkKKyBBTV9DT05ESVRJT05BTChBUkNIX0hQUEEsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhocHBhKQorQEAgLTEzNyw3ICsxMzgsNyBAQCBBTV9DT05ESVRJT05BTChPU19GUkVFQlNELCBleHByIHgkdGFyZ2V0CisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgRUxGIGhlbHBlciB3aWR0aF0pCisgY2FzZSAiJHt0YXJnZXRfYXJjaH0iIGluCisgKGFybXxocHBhfHBwYzMyfHg4NnxzaCkgdXNlX2VsZjMyPXllczsgQUNfTVNHX1JFU1VMVChbMzJdKTs7CistKGlhNjR8cHBjNjR8eDg2XzY0KSAgICB1c2VfZWxmNjQ9eWVzOyBBQ19NU0dfUkVTVUxUKFs2NF0pOzsKKysoYWFyY2g2NHxpYTY0fHBwYzY0fHg4Nl82NCkgICAgdXNlX2VsZjY0PXllczsgQUNfTVNHX1JFU1VMVChbNjRdKTs7CisgKG1pcHMpICAgICAgICAgICAgICAgICB1c2VfZWxmeHg9eWVzOyBBQ19NU0dfUkVTVUxUKFt4eF0pOzsKKyAqKSAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbVW5rbm93biBFTEYgdGFyZ2V0OiAke3RhcmdldF9hcmNofV0pCisgZXNhYworQEAgLTE4Niw2ICsxODcsNyBAQCBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY3h4LWV4Y2VwdGlvbnNdCisgIyBDKysgZXhjZXB0aW9uIGhhbmRsaW5nIGRvZXNuJ3Qgd29yayB0b28gd2VsbCBvbiB4ODYKKyBjYXNlICR0YXJnZXRfYXJjaCBpbgorICAgeDg2KikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKysgIGFhcmNoNjQqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OworICAgYXJtKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgIG1pcHMqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OworICAgKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPXllczs7CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmgKK0BAIC0wLDAgKzEsMTg3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IEhld2xldHQtUGFja2FyZCBDbworKwlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIExJQlVOV0lORF9ICisrI2RlZmluZSBMSUJVTldJTkRfSAorKworKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKGNfcGx1c3BsdXMpCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorKworKyNkZWZpbmUgVU5XX1RBUkdFVAlhYXJjaDY0CisrI2RlZmluZSBVTldfVEFSR0VUX0FBUkNINjQJMQorKworKyNkZWZpbmUgX1VfVERFUF9RUF9UUlVFCTAJLyogc2VlIGxpYnVud2luZC1keW5hbWljLmggICovCisrCisrLyogVGhpcyBuZWVkcyB0byBiZSBiaWcgZW5vdWdoIHRvIGFjY29tbW9kYXRlICJzdHJ1Y3QgY3Vyc29yIiwgd2hpbGUKKysgICBsZWF2aW5nIHNvbWUgc2xhY2sgZm9yIGZ1dHVyZSBleHBhbnNpb24uICBDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwKKysgICByZXF1aXJlIHJlY29tcGlsaW5nIGFsbCB1c2VycyBvZiB0aGlzIGxpYnJhcnkuICBTdGFjayBhbGxvY2F0aW9uIGlzCisrICAgcmVsYXRpdmVseSBjaGVhcCBhbmQgdW53aW5kLXN0YXRlIGNvcHlpbmcgaXMgcmVsYXRpdmVseSByYXJlLCBzbyB3ZQorKyAgIHdhbnQgdG8gZXJyIG9uIG1ha2luZyBpdCByYXRoZXIgdG9vIGJpZyB0aGFuIHRvbyBzbWFsbC4gICovCisrCisrI2RlZmluZSBVTldfVERFUF9DVVJTT1JfTEVOCTQwOTYKKysKKyt0eXBlZGVmIHVpbnQ2NF90IHVud193b3JkX3Q7CisrdHlwZWRlZiBpbnQ2NF90IHVud19zd29yZF90OworKworK3R5cGVkZWYgbG9uZyBkb3VibGUgdW53X3RkZXBfZnByZWdfdDsKKysKKyt0eXBlZGVmIHN0cnVjdAorKyAgeworKyAgICAvKiBubyBhYXJjaDY0LXNwZWNpZmljIGF1eGlsaWFyeSBwcm9jLWluZm8gKi8KKysgIH0KKyt1bndfdGRlcF9wcm9jX2luZm9fdDsKKysKKyt0eXBlZGVmIGVudW0KKysgIHsKKysgICAgLyogNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDAsCisrICAgIFVOV19BQVJDSDY0X1gxLAorKyAgICBVTldfQUFSQ0g2NF9YMiwKKysgICAgVU5XX0FBUkNINjRfWDMsCisrICAgIFVOV19BQVJDSDY0X1g0LAorKyAgICBVTldfQUFSQ0g2NF9YNSwKKysgICAgVU5XX0FBUkNINjRfWDYsCisrICAgIFVOV19BQVJDSDY0X1g3LAorKyAgICBVTldfQUFSQ0g2NF9YOCwKKysKKysgICAgLyogVGVtcG9yYXJ5IHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1g5LAorKyAgICBVTldfQUFSQ0g2NF9YMTAsCisrICAgIFVOV19BQVJDSDY0X1gxMSwKKysgICAgVU5XX0FBUkNINjRfWDEyLAorKyAgICBVTldfQUFSQ0g2NF9YMTMsCisrICAgIFVOV19BQVJDSDY0X1gxNCwKKysgICAgVU5XX0FBUkNINjRfWDE1LAorKworKyAgICAvKiBJbnRyYS1wcm9jZWR1cmUtY2FsbCB0ZW1wb3JhcnkgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDE2LAorKyAgICBVTldfQUFSQ0g2NF9YMTcsCisrCisrICAgIC8qIENhbGxlZS1zYXZlZCByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMTgsCisrICAgIFVOV19BQVJDSDY0X1gxOSwKKysgICAgVU5XX0FBUkNINjRfWDIwLAorKyAgICBVTldfQUFSQ0g2NF9YMjEsCisrICAgIFVOV19BQVJDSDY0X1gyMiwKKysgICAgVU5XX0FBUkNINjRfWDIzLAorKyAgICBVTldfQUFSQ0g2NF9YMjQsCisrICAgIFVOV19BQVJDSDY0X1gyNSwKKysgICAgVU5XX0FBUkNINjRfWDI2LAorKyAgICBVTldfQUFSQ0g2NF9YMjcsCisrICAgIFVOV19BQVJDSDY0X1gyOCwKKysKKysgICAgLyogNjQtYml0IGZyYW1lIHBvaW50ZXIuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMjksCisrCisrICAgIC8qIDY0LWJpdCBsaW5rIHJlZ2lzdGVyLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDMwLAorKworKyAgICAvKiA2NC1iaXQgc3RhY2sgcG9pbnRlci4gICovCisrICAgIFVOV19BQVJDSDY0X1NQID0gIDMxLAorKyAgICBVTldfQUFSQ0g2NF9QQywKKysgICAgVU5XX0FBUkNINjRfUFNUQVRFLAorKworKyAgICAvKiAxMjgtYml0IEZQL0FkdmFuY2VkIFNJTUQgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfVjAgPSA2NCwKKysgICAgVU5XX0FBUkNINjRfVjEsCisrICAgIFVOV19BQVJDSDY0X1YyLAorKyAgICBVTldfQUFSQ0g2NF9WMywKKysgICAgVU5XX0FBUkNINjRfVjQsCisrICAgIFVOV19BQVJDSDY0X1Y1LAorKyAgICBVTldfQUFSQ0g2NF9WNiwKKysgICAgVU5XX0FBUkNINjRfVjcsCisrICAgIFVOV19BQVJDSDY0X1Y4LAorKyAgICBVTldfQUFSQ0g2NF9WOSwKKysgICAgVU5XX0FBUkNINjRfVjEwLAorKyAgICBVTldfQUFSQ0g2NF9WMTEsCisrICAgIFVOV19BQVJDSDY0X1YxMiwKKysgICAgVU5XX0FBUkNINjRfVjEzLAorKyAgICBVTldfQUFSQ0g2NF9WMTQsCisrICAgIFVOV19BQVJDSDY0X1YxNSwKKysgICAgVU5XX0FBUkNINjRfVjE2LAorKyAgICBVTldfQUFSQ0g2NF9WMTcsCisrICAgIFVOV19BQVJDSDY0X1YxOCwKKysgICAgVU5XX0FBUkNINjRfVjE5LAorKyAgICBVTldfQUFSQ0g2NF9WMjAsCisrICAgIFVOV19BQVJDSDY0X1YyMSwKKysgICAgVU5XX0FBUkNINjRfVjIyLAorKyAgICBVTldfQUFSQ0g2NF9WMjMsCisrICAgIFVOV19BQVJDSDY0X1YyNCwKKysgICAgVU5XX0FBUkNINjRfVjI1LAorKyAgICBVTldfQUFSQ0g2NF9WMjYsCisrICAgIFVOV19BQVJDSDY0X1YyNywKKysgICAgVU5XX0FBUkNINjRfVjI4LAorKyAgICBVTldfQUFSQ0g2NF9WMjksCisrICAgIFVOV19BQVJDSDY0X1YzMCwKKysgICAgVU5XX0FBUkNINjRfVjMxLAorKworKyAgICBVTldfQUFSQ0g2NF9GUFNSLAorKyAgICBVTldfQUFSQ0g2NF9GUENSLAorKworKyAgICAvKiBGb3IgQUFyY2g2NCwgdGhlIENGQSBpcyB0aGUgdmFsdWUgb2YgU1AgKHgzMSkgYXQgdGhlIGNhbGwgc2l0ZSBvZiB0aGUKKysgICAgICAgcHJldmlvdXMgZnJhbWUuICAqLworKyAgICBVTldfQUFSQ0g2NF9DRkEgPSBVTldfQUFSQ0g2NF9TUCwKKysKKysgICAgVU5XX1RERVBfTEFTVF9SRUcgPSBVTldfQUFSQ0g2NF9GUENSLAorKworKyAgICBVTldfVERFUF9JUCA9IFVOV19BQVJDSDY0X1gzMCwKKysgICAgVU5XX1RERVBfU1AgPSBVTldfQUFSQ0g2NF9TUCwKKysgICAgVU5XX1RERVBfRUggPSBVTldfQUFSQ0g2NF9YMCwKKysKKysgIH0KKythYXJjaDY0X3JlZ251bV90OworKworKy8qIFVzZSBSMCB0aHJvdWdoIFIzIHRvIHBhc3MgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uLiAgKi8KKysjZGVmaW5lIFVOV19UREVQX05VTV9FSF9SRUdTCTQKKysKKyt0eXBlZGVmIHN0cnVjdCB1bndfdGRlcF9zYXZlX2xvYworKyAgeworKyAgICAvKiBBZGRpdGlvbmFsIHRhcmdldC1kZXBlbmRlbnQgaW5mbyBvbiBhIHNhdmUgbG9jYXRpb24uICAqLworKyAgfQorK3Vud190ZGVwX3NhdmVfbG9jX3Q7CisrCisrCisrLyogT24gQUFyY2g2NCwgd2UgY2FuIGRpcmVjdGx5IHVzZSB1Y29udGV4dF90IGFzIHRoZSB1bndpbmQgY29udGV4dC4gICovCisrdHlwZWRlZiB1Y29udGV4dF90IHVud190ZGVwX2NvbnRleHRfdDsKKysKKysjaW5jbHVkZSAibGlidW53aW5kLWNvbW1vbi5oIgorKyNpbmNsdWRlICJsaWJ1bndpbmQtZHluYW1pYy5oIgorKworKyNkZWZpbmUgdW53X3RkZXBfZ2V0Y29udGV4dCh1YykgICAgICAgICAoZ2V0Y29udGV4dCAodWMpLCAwKQorKyNkZWZpbmUgdW53X3RkZXBfaXNfZnByZWcJCVVOV19BUkNIX09CSihpc19mcHJlZykKKysKKytleHRlcm4gaW50IHVud190ZGVwX2lzX2ZwcmVnIChpbnQpOworKworKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKGNfcGx1c3BsdXMpCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBMSUJVTldJTkRfSCAqLworLS0tIGEvaW5jbHVkZS9saWJ1bndpbmQuaC5pbgorKysrIGIvaW5jbHVkZS9saWJ1bndpbmQuaC5pbgorQEAgLTMsNyArMyw5IEBACisgCisgI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKyAKKy0jaWYgZGVmaW5lZCBfX2FybV9fCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjaW5jbHVkZSAibGlidW53aW5kLWFhcmNoNjQuaCIKKysjZWxpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgImxpYnVud2luZC1hcm0uaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCisgIyBpbmNsdWRlICJsaWJ1bndpbmQtaHBwYS5oIgorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgZHdhcmZfY29uZmlnX2gKKysjZGVmaW5lIGR3YXJmX2NvbmZpZ19oCisrCisrLyogVGhpcyBtYXRjaGVzIHRoZSB2YWx1ZSB1ZGVzIGJ5IEdDQyAoc2VlCisrICAgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaDpEV0FSRl9GUkFNRV9SRUdJU1RFUlMuICAqLworKyNkZWZpbmUgRFdBUkZfTlVNX1BSRVNFUlZFRF9SRUdTCTk3CisrCisrLyogUmV0dXJuIFRSVUUgaWYgdGhlIEFERFJfU1BBQ0UgdXNlcyBiaWctZW5kaWFuIGJ5dGUtb3JkZXIuICAqLworKyNkZWZpbmUgZHdhcmZfaXNfYmlnX2VuZGlhbihhZGRyX3NwYWNlKQkwCisrCisrI2RlZmluZSBkd2FyZl90b191bndfcmVnbnVtKHJlZykgKCgocmVnKSA8PSBVTldfQUFSQ0g2NF9WMzEpID8gKHJlZykgOiAwKQorKworKy8qIENvbnZlcnQgYSBwb2ludGVyIHRvIGEgZHdhcmZfY3Vyc29yIHN0cnVjdHVyZSB0byBhIHBvaW50ZXIgdG8KKysgICB1bndfY3Vyc29yX3QuICAqLworKyNkZWZpbmUgZHdhcmZfdG9fY3Vyc29yKGMpCSgodW53X2N1cnNvcl90ICopIChjKSkKKysKKyt0eXBlZGVmIHN0cnVjdCBkd2FyZl9sb2MKKysgIHsKKysgICAgdW53X3dvcmRfdCB2YWw7CisrI2lmbmRlZiBVTldfTE9DQUxfT05MWQorKyAgICB1bndfd29yZF90IHR5cGU7CQkvKiBzZWUgRFdBUkZfTE9DX1RZUEVfKiBtYWNyb3MuICAqLworKyNlbmRpZgorKyAgfQorK2R3YXJmX2xvY190OworKworKyNlbmRpZiAvKiBkd2FyZl9jb25maWdfaCAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmgKK0BAIC0wLDAgKzEsMzMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrLyogVXNlIGdsaWJjJ3MganVtcC1idWZmZXIgaW5kaWNlczsgTlBUTCBwZWVrcyBhdCBTUDogKi8KKysKKysvKiBGSVhNRSBmb3IgQUFyY2g2NCAgKi8KKysKKysjZGVmaW5lIEpCX1NQCQkxMworKyNkZWZpbmUgSkJfUlAJCTE0CisrI2RlZmluZSBKQl9NQVNLX1NBVkVECTE1CisrI2RlZmluZSBKQl9NQVNLCQkxNgorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaAorQEAgLTAsMCArMSwyOTQgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgSGV3bGV0dC1QYWNrYXJkIENvCisrCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgQUFSQ0g2NF9MSUJVTldJTkRfSV9ICisrI2RlZmluZSBBQVJDSDY0X0xJQlVOV0lORF9JX0gKKysKKysvKiBUYXJnZXQtZGVwZW5kZW50IGRlZmluaXRpb25zIHRoYXQgYXJlIGludGVybmFsIHRvIGxpYnVud2luZCBidXQgbmVlZAorKyAgIHRvIGJlIHNoYXJlZCB3aXRoIHRhcmdldC1pbmRlcGVuZGVudCBjb2RlLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKworKyNpbmNsdWRlICJlbGY2NC5oIgorKyNpbmNsdWRlICJtZW1wb29sLmgiCisrI2luY2x1ZGUgImR3YXJmLmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysgIHsKKysgICAgLyogbm8gYWFyY2g2NC1zcGVjaWZpYyBmYXN0IHRyYWNlICovCisrICB9CisrdW53X3RkZXBfZnJhbWVfdDsKKysKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysKKyt0eXBlZGVmIHVud193b3JkX3QgYWFyY2g2NF9sb2NfdDsKKysKKysjZWxzZSAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysKKyt0eXBlZGVmIHN0cnVjdCBhYXJjaDY0X2xvYworKyAgeworKyAgICB1bndfd29yZF90IHcwLCB3MTsKKysgIH0KKythYXJjaDY0X2xvY190OworKworKyNlbmRpZiAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysKKytzdHJ1Y3QgdW53X2FkZHJfc3BhY2UKKysgIHsKKysgICAgc3RydWN0IHVud19hY2Nlc3NvcnMgYWNjOworKyAgICBpbnQgYmlnX2VuZGlhbjsKKysgICAgdW53X2NhY2hpbmdfcG9saWN5X3QgY2FjaGluZ19wb2xpY3k7CisrI2lmZGVmIEhBVkVfQVRPTUlDX09QU19ICisrICAgIEFPX3QgY2FjaGVfZ2VuZXJhdGlvbjsKKysjZWxzZQorKyAgICB1aW50MzJfdCBjYWNoZV9nZW5lcmF0aW9uOworKyNlbmRpZgorKyAgICB1bndfd29yZF90IGR5bl9nZW5lcmF0aW9uOyAgICAgICAgICAvKiBzZWUgZHluLWNvbW1vbi5oICovCisrICAgIHVud193b3JkX3QgZHluX2luZm9fbGlzdF9hZGRyOwkvKiAoY2FjaGVkKSBkeW5faW5mb19saXN0X2FkZHIgKi8KKysgICAgc3RydWN0IGR3YXJmX3JzX2NhY2hlIGdsb2JhbF9jYWNoZTsKKysgICAgc3RydWN0IHVud19kZWJ1Z19mcmFtZV9saXN0ICpkZWJ1Z19mcmFtZXM7CisrICAgfTsKKysKKytzdHJ1Y3QgY3Vyc29yCisrICB7CisrICAgIHN0cnVjdCBkd2FyZl9jdXJzb3IgZHdhcmY7ICAgICAgICAgIC8qIG11c3QgYmUgZmlyc3QgKi8KKysgICAgZW51bQorKyAgICAgIHsKKysgICAgICAgIEFBUkNINjRfU0NGX05PTkUsCisrICAgICAgICBBQVJDSDY0X1NDRl9MSU5VWF9SVF9TSUdGUkFNRSwKKysgICAgICB9CisrICAgIHNpZ2NvbnRleHRfZm9ybWF0OworKyAgICB1bndfd29yZF90IHNpZ2NvbnRleHRfYWRkcjsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X3NwOworKyAgICB1bndfd29yZF90IHNpZ2NvbnRleHRfcGM7CisrICB9OworKworKyNkZWZpbmUgRFdBUkZfR0VUX0xPQyhsKSAgICAgICAgKChsKS52YWwpCisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrIyBkZWZpbmUgRFdBUkZfTlVMTF9MT0MgICAgICAgICBEV0FSRl9MT0MgKDAsIDApCisrIyBkZWZpbmUgRFdBUkZfSVNfTlVMTF9MT0MobCkgICAoRFdBUkZfR0VUX0xPQyAobCkgPT0gMCkKKysjIGRlZmluZSBEV0FSRl9MT0MociwgdCkgICAgICAgICgoZHdhcmZfbG9jX3QpIHsgLnZhbCA9IChyKSB9KQorKyMgZGVmaW5lIERXQVJGX0lTX1JFR19MT0MobCkgICAgMAorKyMgZGVmaW5lIERXQVJGX1JFR19MT0MoYyxyKSAgICAgKERXQVJGX0xPQygodW53X3dvcmRfdCkgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXBfdWNfYWRkcigoYyktPmFzX2FyZywgKHIpKSwgMCkpCisrIyBkZWZpbmUgRFdBUkZfTUVNX0xPQyhjLG0pICAgICBEV0FSRl9MT0MgKChtKSwgMCkKKysjIGRlZmluZSBEV0FSRl9GUFJFR19MT0MoYyxyKSAgIChEV0FSRl9MT0MoKHVud193b3JkX3QpICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwX3VjX2FkZHIoKGMpLT5hc19hcmcsIChyKSksIDApKQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgKnZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICp2YWwgPSAqKHVud19mcHJlZ190ICopIERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCB2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqKHVud19mcHJlZ190ICopIERXQVJGX0dFVF9MT0MgKGxvYykgPSB2YWw7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9nZXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCAqdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKnZhbCA9ICoodW53X3dvcmRfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKih1bndfd29yZF90ICopIERXQVJGX0dFVF9MT0MgKGxvYykgPSB2YWw7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrIyBkZWZpbmUgRFdBUkZfTE9DX1RZUEVfRlAgICAgICAoMSA8PCAwKQorKyMgZGVmaW5lIERXQVJGX0xPQ19UWVBFX1JFRyAgICAgKDEgPDwgMSkKKysjIGRlZmluZSBEV0FSRl9OVUxMX0xPQyAgICAgICAgIERXQVJGX0xPQyAoMCwgMCkKKysjIGRlZmluZSBEV0FSRl9JU19OVUxMX0xPQyhsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICh7IGR3YXJmX2xvY190IF9sID0gKGwpOyBfbC52YWwgPT0gMCAmJiBfbC50eXBlID09IDA7IH0pCisrIyBkZWZpbmUgRFdBUkZfTE9DKHIsIHQpICAgICAgICAoKGR3YXJmX2xvY190KSB7IC52YWwgPSAociksIC50eXBlID0gKHQpIH0pCisrIyBkZWZpbmUgRFdBUkZfSVNfUkVHX0xPQyhsKSAgICAoKChsKS50eXBlICYgRFdBUkZfTE9DX1RZUEVfUkVHKSAhPSAwKQorKyMgZGVmaW5lIERXQVJGX0lTX0ZQX0xPQyhsKSAgICAgKCgobCkudHlwZSAmIERXQVJGX0xPQ19UWVBFX0ZQKSAhPSAwKQorKyMgZGVmaW5lIERXQVJGX1JFR19MT0MoYyxyKSAgICAgRFdBUkZfTE9DKChyKSwgRFdBUkZfTE9DX1RZUEVfUkVHKQorKyMgZGVmaW5lIERXQVJGX01FTV9MT0MoYyxtKSAgICAgRFdBUkZfTE9DICgobSksIDApCisrIyBkZWZpbmUgRFdBUkZfRlBSRUdfTE9DKGMscikgICBEV0FSRl9MT0MoKHIpLCAoRFdBUkZfTE9DX1RZUEVfUkVHICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRFdBUkZfTE9DX1RZUEVfRlApKQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgKnZhbCkKKyt7CisrICBjaGFyICp2YWxwID0gKGNoYXIgKikgJnZhbDsKKysgIHVud193b3JkX3QgYWRkcjsKKysgIGludCByZXQ7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfZnByZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsIDAsIGMtPmFzX2FyZyk7CisrCisrICBhZGRyID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIGlmICgocmV0ID0gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDAsICh1bndfd29yZF90ICopIHZhbHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKSkgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyA0LCAodW53X3dvcmRfdCAqKSB2YWxwICsgMSwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmFzX2FyZyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgdmFsKQorK3sKKysgIGNoYXIgKnZhbHAgPSAoY2hhciAqKSAmdmFsOworKyAgdW53X3dvcmRfdCBhZGRyOworKyAgaW50IHJldDsKKysKKysgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19mcHJlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwsIDEsIGMtPmFzX2FyZyk7CisrCisrICBhZGRyID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIGlmICgocmV0ID0gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDAsICh1bndfd29yZF90ICopIHZhbHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKSkgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyA0LCAodW53X3dvcmRfdCAqKSB2YWxwICsgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgKnZhbCkKKyt7CisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICAvKiBJZiBhIGNvZGUtZ2VuZXJhdG9yIHdlcmUgdG8gc2F2ZSBhIHZhbHVlIG9mIHR5cGUgdW53X3dvcmRfdCBpbiBhCisrICAgICBmbG9hdGluZy1wb2ludCByZWdpc3Rlciwgd2Ugd291bGQgaGF2ZSB0byBzdXBwb3J0IHRoaXMgY2FzZS4gIEkKKysgICAgIHN1cHBvc2UgaXQgY291bGQgaGFwcGVuIHdpdGggTU1YIHJlZ2lzdGVycywgYnV0IGRvZXMgaXQgcmVhbGx5CisrICAgICBoYXBwZW4/ICAqLworKyAgYXNzZXJ0ICghRFdBUkZfSVNfRlBfTE9DIChsb2MpKTsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19yZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjLT5hc19hcmcpOworKyAgZWxzZQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90IHZhbCkKKyt7CisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICAvKiBJZiBhIGNvZGUtZ2VuZXJhdG9yIHdlcmUgdG8gc2F2ZSBhIHZhbHVlIG9mIHR5cGUgdW53X3dvcmRfdCBpbiBhCisrICAgICBmbG9hdGluZy1wb2ludCByZWdpc3Rlciwgd2Ugd291bGQgaGF2ZSB0byBzdXBwb3J0IHRoaXMgY2FzZS4gIEkKKysgICAgIHN1cHBvc2UgaXQgY291bGQgaGFwcGVuIHdpdGggTU1YIHJlZ2lzdGVycywgYnV0IGRvZXMgaXQgcmVhbGx5CisrICAgICBoYXBwZW4/ICAqLworKyAgYXNzZXJ0ICghRFdBUkZfSVNfRlBfTE9DIChsb2MpKTsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19yZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgJnZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKTsKKysgIGVsc2UKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksICZ2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysKKysKKysKKysjZGVmaW5lIHRkZXBfZ2V0Y29udGV4dF90cmFjZSAgICAgICAgICAgdW53X2dldGNvbnRleHQKKysjZGVmaW5lIHRkZXBfaW5pdF9kb25lCQkJVU5XX09CSihpbml0X2RvbmUpCisrI2RlZmluZSB0ZGVwX2luaXQJCQlVTldfT0JKKGluaXQpCisrLyogUGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBVTldfSU5GT19GT1JNQVRfVEFCTEUgbmVlZCB0byBkZWZpbmUKKysgICB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUuICAqLworKyNkZWZpbmUgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlCWR3YXJmX3NlYXJjaF91bndpbmRfdGFibGUKKysjZGVmaW5lIHRkZXBfZmluZF91bndpbmRfdGFibGUJICAgICAgICBkd2FyZl9maW5kX3Vud2luZF90YWJsZQorKyNkZWZpbmUgdGRlcF91Y19hZGRyCQkJVU5XX09CSih1Y19hZGRyKQorKyNkZWZpbmUgdGRlcF9nZXRfZWxmX2ltYWdlCQlVTldfQVJDSF9PQkooZ2V0X2VsZl9pbWFnZSkKKysjZGVmaW5lIHRkZXBfYWNjZXNzX3JlZwkJCVVOV19PQkooYWNjZXNzX3JlZykKKysjZGVmaW5lIHRkZXBfYWNjZXNzX2ZwcmVnCQlVTldfT0JKKGFjY2Vzc19mcHJlZykKKysjZGVmaW5lIHRkZXBfZmV0Y2hfZnJhbWUoYyxpcCxuKQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF9jYWNoZV9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfcmV1c2VfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX3N0YXNoX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF90cmFjZShjdXIsYWRkcixuKQkJKC1VTldfRU5PSU5GTykKKysKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysjIGRlZmluZSB0ZGVwX2ZpbmRfcHJvY19pbmZvKGMsaXAsbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZHdhcmZfZmluZF9wcm9jX2luZm8oKGMpLT5hcywgKGlwKSwgJihjKS0+cGksIChuKSwgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMpLT5hc19hcmcpCisrIyBkZWZpbmUgdGRlcF9wdXRfdW53aW5kX2luZm8oYXMscGksYXJnKSAgICAgICAgICAgICAgICBcCisrICAgICAgICBkd2FyZl9wdXRfdW53aW5kX2luZm8oKGFzKSwgKHBpKSwgKGFyZykpCisrI2Vsc2UKKysjIGRlZmluZSB0ZGVwX2ZpbmRfcHJvY19pbmZvKGMsaXAsbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAoKihjKS0+YXMtPmFjYy5maW5kX3Byb2NfaW5mbykoKGMpLT5hcywgKGlwKSwgJihjKS0+cGksIChuKSwgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKS0+YXNfYXJnKQorKyMgZGVmaW5lIHRkZXBfcHV0X3Vud2luZF9pbmZvKGFzLHBpLGFyZykgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKCooYXMpLT5hY2MucHV0X3Vud2luZF9pbmZvKSgoYXMpLCAocGkpLCAoYXJnKSkKKysjZW5kaWYKKysKKysjZGVmaW5lIHRkZXBfZ2V0X2FzKGMpICAgICAgICAgICAgICAgICAgKChjKS0+ZHdhcmYuYXMpCisrI2RlZmluZSB0ZGVwX2dldF9hc19hcmcoYykgICAgICAgICAgICAgICgoYyktPmR3YXJmLmFzX2FyZykKKysjZGVmaW5lIHRkZXBfZ2V0X2lwKGMpICAgICAgICAgICAgICAgICAgKChjKS0+ZHdhcmYuaXApCisrI2RlZmluZSB0ZGVwX2JpZ19lbmRpYW4oYXMpICAgICAgICAgICAgICgoYXMpLT5iaWdfZW5kaWFuKQorKworK2V4dGVybiBpbnQgdGRlcF9pbml0X2RvbmU7CisrCisrZXh0ZXJuIHZvaWQgdGRlcF9pbml0ICh2b2lkKTsKKytleHRlcm4gaW50IHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBpcCwKKysJCQkJICAgICB1bndfZHluX2luZm9fdCAqZGksIHVud19wcm9jX2luZm9fdCAqcGksCisrCQkJCSAgICAgaW50IG5lZWRfdW53aW5kX2luZm8sIHZvaWQgKmFyZyk7CisrZXh0ZXJuIHZvaWQgKnRkZXBfdWNfYWRkciAodW53X3RkZXBfY29udGV4dF90ICp1YywgaW50IHJlZyk7CisrZXh0ZXJuIGludCB0ZGVwX2dldF9lbGZfaW1hZ2UgKHN0cnVjdCBlbGZfaW1hZ2UgKmVpLCBwaWRfdCBwaWQsIHVud193b3JkX3QgaXAsCisrCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNlZ2Jhc2UsIHVuc2lnbmVkIGxvbmcgKm1hcG9mZiwKKysJCQkgICAgICAgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4pOworK2V4dGVybiBpbnQgdGRlcF9hY2Nlc3NfcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLAorKwkJCSAgICB1bndfd29yZF90ICp2YWxwLCBpbnQgd3JpdGUpOworK2V4dGVybiBpbnQgdGRlcF9hY2Nlc3NfZnByZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsCisrCQkJICAgICAgdW53X2ZwcmVnX3QgKnZhbHAsIGludCB3cml0ZSk7CisrCisrI2VuZGlmIC8qIEFBUkNINjRfTElCVU5XSU5EX0lfSCAqLworLS0tIGEvaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oCisrKysgYi9pbmNsdWRlL3RkZXAvZHdhcmYtY29uZmlnLmgKK0BAIC0xLDcgKzEsOSBAQAorIC8qIFByb3ZpZGUgYSByZWFsIGZpbGUgLSBub3QgYSBzeW1saW5rIC0gYXMgaXQgd291bGQgY2F1c2UgbXVsdGlhcmNoIGNvbmZsaWN0cworICAgIHdoZW4gbXVsdGlwbGUgZGlmZmVyZW50IGFyY2ggcmVsZWFzZXMgYXJlIGluc3RhbGxlZCBzaW11bHRhbmVvdXNseS4gICovCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgiCisrI2VsaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJ0ZGVwLWFybS9kd2FyZi1jb25maWcuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCisgIyBpbmNsdWRlICJ0ZGVwLWhwcGEvZHdhcmYtY29uZmlnLmgiCistLS0gYS9pbmNsdWRlL3RkZXAvam1wYnVmLmgKKysrKyBiL2luY2x1ZGUvdGRlcC9qbXBidWYuaAorQEAgLTMsNiArMyw4IEBACisgCisgI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKyAKKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2ptcGJ1Zi5oIgorICNpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgInRkZXAtYXJtL2ptcGJ1Zi5oIgorICNlbGlmIGRlZmluZWQgX19ocHBhX18KKy0tLSBhL2luY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oLmluCisrKysgYi9pbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbgorQEAgLTMsNyArMyw5IEBACisgCisgI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKyAKKy0jaWYgZGVmaW5lZCBfX2FybV9fCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oIgorKyNlbGlmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAidGRlcC1hcm0vbGlidW53aW5kX2kuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCisgIyBpbmNsdWRlICJ0ZGVwLWhwcGEvbGlidW53aW5kX2kuaCIKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMTcwLDYgKzE3MCwyOCBAQCBsaWJ1bndpbmRfZWxmeHhfbGFfU09VUkNFUyA9IGVsZnh4LmMKKyBub2luc3RfTFRMSUJSQVJJRVMgKz0gJChMSUJVTldJTkRfRUxGKQorIGxpYnVud2luZF9sYV9MSUJBREQgKz0gJChMSUJVTldJTkRfRUxGKQorIAorKyMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLWFhcmNoNjQ6Cisrbm9pbnN0X0hFQURFUlMgKz0gYWFyY2g2NC9pbml0LmggYWFyY2g2NC9vZmZzZXRzLmggYWFyY2g2NC91bndpbmRfaS5oCisrbGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NF9jb21tb24gPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJICAgIFwKKysJYWFyY2g2NC9pc19mcHJlZy5jIGFhcmNoNjQvcmVnbmFtZS5jCisrCisrIyBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGdvIGludG8gbGlidW53aW5kOgorK2xpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uKQkgICAgXAorKwkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2xvY2FsKQkJCQkJICAgIFwKKysJYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYyBhYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMgCQkgICAgXAorKwlhYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYyBhYXJjaDY0L0xnbG9iYWwuYyBhYXJjaDY0L0xpbml0LmMJICAgIFwKKysJYWFyY2g2NC9MaW5pdF9sb2NhbC5jIGFhcmNoNjQvTGluaXRfcmVtb3RlLmMgCQkJICAgIFwKKysJYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMgYWFyY2g2NC9McmVncy5jIGFhcmNoNjQvTHJlc3VtZS5jIAkgICAgXAorKwlhYXJjaDY0L0xzdGVwLmMKKysKKytsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTX2FhcmNoNjQgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uKSBcCisrCSQobGlidW53aW5kX2xhX1NPVVJDRVNfZ2VuZXJpYykJCQkJCSAgICAgIFwKKysJYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYyBhYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMgCQkgICAgICBcCisrCWFhcmNoNjQvR2dldF9zYXZlX2xvYy5jIGFhcmNoNjQvR2dsb2JhbC5jIGFhcmNoNjQvR2luaXQuYyAJICAgICAgXAorKwlhYXJjaDY0L0dpbml0X2xvY2FsLmMgYWFyY2g2NC9HaW5pdF9yZW1vdGUuYwkJCSAgICAgIFwKKysJYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMgYWFyY2g2NC9HcmVncy5jIGFhcmNoNjQvR3Jlc3VtZS5jCSAgICAgIFwKKysJYWFyY2g2NC9Hc3RlcC5jCisrCisgIyBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGdvIGludG8gbGlidW53aW5kIGFuZCBsaWJ1bndpbmQtYXJtOgorIG5vaW5zdF9IRUFERVJTICs9IGFybS9pbml0LmggYXJtL29mZnNldHMuaCBhcm0vdW53aW5kX2kuaAorIGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybV9jb21tb24gPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJICAgIFwKK0BAIC00MTgsNiArNDQwLDE4IEBAIGlmIE9TX0ZSRUVCU0QKKyAgbGlidW53aW5kX2NvcmVkdW1wX2xhX1NPVVJDRVMgKz0gY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2ZyZWVic2QuYworIGVuZGlmCisgCisraWYgQVJDSF9BQVJDSDY0CisrIGxpYl9MVExJQlJBUklFUyArPSBsaWJ1bndpbmQtYWFyY2g2NC5sYQorKyBsaWJ1bndpbmRfbGFfU09VUkNFUyA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NCkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFUyA9ICQobGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0KQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MREZMQUdTID0gJChDT01NT05fU09fTERGTEFHUykgLXZlcnNpb24taW5mbyAkKFNPVkVSU0lPTikKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREID0gbGlidW53aW5kLWR3YXJmLWdlbmVyaWMubGEKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREICs9IGxpYnVud2luZC1lbGY2NC5sYQorK2lmICFSRU1PVEVfT05MWQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MSUJBREQgKz0gbGlidW53aW5kLmxhIC1sYworK2VuZGlmCisrIGxpYnVud2luZF9zZXRqbXBfbGFfU09VUkNFUyArPSBhYXJjaDY0L3NpZ2xvbmdqbXAuUworK2Vsc2UKKyBpZiBBUkNIX0FSTQorICBsaWJfTFRMSUJSQVJJRVMgKz0gbGlidW53aW5kLWFybS5sYQorICBsaWJ1bndpbmRfbGFfU09VUkNFUyA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQorQEAgLTU0NSw2ICs1NzksNyBAQCBlbmRpZiAjIEFSQ0hfTUlQUworIGVuZGlmICMgQVJDSF9IUFBBCisgZW5kaWYgIyBBUkNIX0lBNjQKKyBlbmRpZiAjIEFSQ0hfQVJNCisrZW5kaWYgIyBBUkNIX0FBUkNINjQKKyAKKyAjIGxpYnVud2luZC1zZXRqbXAgZGVwZW5kcyBvbiBsaWJ1bndpbmQtJChhcmNoKS4gVGhlcmVmb3JlIG11c3QgYmUgYWRkZWQKKyAjIGF0IHRoZSBlbmQuCitAQCAtNTY3LDcgKzYwMiw4IEBAIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkKKyBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQorIG5vaW5zdF9IRUFERVJTICs9IHVud2luZC91bndpbmQtaW50ZXJuYWwuaAorIAorLUVYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkJCQlcCisrRVhUUkFfRElTVCA9CSQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NCkJCQlcCisrCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2hwcGEpCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19pYTY0KQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfbWlwcykJCQlcCitAQCAtNTc5LDYgKzYxNSw3IEBAIEVYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfbG9jYWwpCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19nZW5lcmljKQkJCVwKKysJCSQobGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0KQkJXAorIAkJJChsaWJ1bndpbmRfYXJtX2xhX1NPVVJDRVNfYXJtKQkJCVwKKyAJCSQobGlidW53aW5kX2hwcGFfbGFfU09VUkNFU19ocHBhKQkJXAorIAkJJChsaWJ1bndpbmRfaWE2NF9sYV9TT1VSQ0VTX2lhNjQpCQlcCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYworQEAgLTAsMCArMSw2MCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCB1bndfYWRkcl9zcGFjZV90CisrdW53X2NyZWF0ZV9hZGRyX3NwYWNlICh1bndfYWNjZXNzb3JzX3QgKmEsIGludCBieXRlX29yZGVyKQorK3sKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysgIHJldHVybiBOVUxMOworKyNlbHNlCisrICB1bndfYWRkcl9zcGFjZV90IGFzOworKworKyAgLyogQUFyY2g2NCBzdXBwb3J0cyBsaXR0bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuLiAqLworKyAgaWYgKGJ5dGVfb3JkZXIgIT0gMCAmJiBieXRlX29yZGVyICE9IF9fTElUVExFX0VORElBTgorKyAgICAgICYmIGJ5dGVfb3JkZXIgIT0gX19CSUdfRU5ESUFOKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGFzID0gbWFsbG9jIChzaXplb2YgKCphcykpOworKyAgaWYgKCFhcykKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBtZW1zZXQgKGFzLCAwLCBzaXplb2YgKCphcykpOworKworKyAgYXMtPmFjYyA9ICphOworKworKyAgLyogRGVmYXVsdCB0byBsaXR0bGUtZW5kaWFuIGZvciBBQXJjaDY0LiAqLworKyAgaWYgKGJ5dGVfb3JkZXIgPT0gMCB8fCBieXRlX29yZGVyID09IF9fTElUVExFX0VORElBTikKKysgICAgYXMtPmJpZ19lbmRpYW4gPSAwOworKyAgZWxzZQorKyAgICBhcy0+YmlnX2VuZGlhbiA9IDE7CisrCisrICByZXR1cm4gYXM7CisrI2VuZGlmCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2dldF9wcm9jX2luZm8uYworQEAgLTAsMCArMSwzOSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2dldF9wcm9jX2luZm8gKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfcHJvY19pbmZvX3QgKnBpKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICBpbnQgcmV0OworKworKyAgcmV0ID0gZHdhcmZfbWFrZV9wcm9jX2luZm8gKCZjLT5kd2FyZik7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgICpwaSA9IGMtPmR3YXJmLnBpOworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jCitAQCAtMCwwICsxLDEwMCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19nZXRfc2F2ZV9sb2MgKHVud19jdXJzb3JfdCAqY3Vyc29yLCBpbnQgcmVnLCB1bndfc2F2ZV9sb2NfdCAqc2xvYykKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgZHdhcmZfbG9jX3QgbG9jOworKworKyAgc3dpdGNoIChyZWcpCisrICAgIHsKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDExOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9TUDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QQzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QU1RBVEU6CisrICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgbG9jID0gRFdBUkZfTlVMTF9MT0M7CS8qIGRlZmF1bHQgdG8gIm5vdCBzYXZlZCIgKi8KKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgbWVtc2V0IChzbG9jLCAwLCBzaXplb2YgKCpzbG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHsKKysgICAgICBzbG9jLT50eXBlID0gVU5XX1NMVF9OT05FOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2lmICFkZWZpbmVkKFVOV19MT0NBTF9PTkxZKQorKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHsKKysgICAgICBzbG9jLT50eXBlID0gVU5XX1NMVF9SRUc7CisrICAgICAgc2xvYy0+dS5yZWdudW0gPSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgICB9CisrICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICBzbG9jLT50eXBlID0gVU5XX1NMVF9NRU1PUlk7CisrICAgICAgc2xvYy0+dS5hZGRyID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2dsb2JhbC5jCitAQCAtMCwwICsxLDU3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAiZHdhcmZfaS5oIgorKworK0hJRERFTiBkZWZpbmVfbG9jayAoYWFyY2g2NF9sb2NrKTsKKytISURERU4gaW50IHRkZXBfaW5pdF9kb25lOworKworK0hJRERFTiB2b2lkCisrdGRlcF9pbml0ICh2b2lkKQorK3sKKysgIGludHJtYXNrX3Qgc2F2ZWRfbWFzazsKKysKKysgIHNpZ2ZpbGxzZXQgKCZ1bndpX2Z1bGxfbWFzayk7CisrCisrICBsb2NrX2FjcXVpcmUgKCZhYXJjaDY0X2xvY2ssIHNhdmVkX21hc2spOworKyAgeworKyAgICBpZiAodGRlcF9pbml0X2RvbmUpCisrICAgICAgLyogYW5vdGhlciB0aHJlYWQgZWxzZSBiZWF0IHVzIHRvIGl0Li4uICovCisrICAgICAgZ290byBvdXQ7CisrCisrICAgIG1pX2luaXQgKCk7CisrCisrICAgIGR3YXJmX2luaXQgKCk7CisrCisrI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKysgICAgYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKCk7CisrI2VuZGlmCisrICAgIHRkZXBfaW5pdF9kb25lID0gMTsJLyogc2lnbmFsIHRoYXQgd2UncmUgaW5pdGlhbGl6ZWQuLi4gKi8KKysgIH0KKysgb3V0OgorKyAgbG9ja19yZWxlYXNlICgmYWFyY2g2NF9sb2NrLCBzYXZlZF9tYXNrKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdC5jCitAQCAtMCwwICsxLDE4NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKysjaWZkZWYgVU5XX1JFTU9URV9PTkxZCisrCisrLyogdW53X2xvY2FsX2FkZHJfc3BhY2UgaXMgYSBOVUxMIHBvaW50ZXIgaW4gdGhpcyBjYXNlLiAgKi8KKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdCB1bndfbG9jYWxfYWRkcl9zcGFjZTsKKysKKysjZWxzZSAvKiAhVU5XX1JFTU9URV9PTkxZICovCisrCisrc3RhdGljIHN0cnVjdCB1bndfYWRkcl9zcGFjZSBsb2NhbF9hZGRyX3NwYWNlOworKworK1BST1RFQ1RFRCB1bndfYWRkcl9zcGFjZV90IHVud19sb2NhbF9hZGRyX3NwYWNlID0gJmxvY2FsX2FkZHJfc3BhY2U7CisrCisrc3RhdGljIGlubGluZSB2b2lkICoKKyt1Y19hZGRyICh1Y29udGV4dF90ICp1YywgaW50IHJlZykKKyt7CisrICBpZiAocmVnID49IFVOV19BQVJDSDY0X1gwICYmIHJlZyA8PSBVTldfQUFSQ0g2NF9WMzEpCisrICAgIHJldHVybiAmdWMtPnVjX21jb250ZXh0LnJlZ3NbcmVnXTsKKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorKworKyMgaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysKKytISURERU4gdm9pZCAqCisrdGRlcF91Y19hZGRyICh1Y29udGV4dF90ICp1YywgaW50IHJlZykKKyt7CisrICByZXR1cm4gdWNfYWRkciAodWMsIHJlZyk7CisrfQorKworKyMgZW5kaWYgLyogVU5XX0xPQ0FMX09OTFkgKi8KKysKKytISURERU4gdW53X2R5bl9pbmZvX2xpc3RfdCBfVV9keW5faW5mb19saXN0OworKworKy8qIFhYWCBmaXggbWU6IHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gbG9jYXRlIHRoZSBkeW4taW5mbyBsaXN0CisrICAgICAgIGJ5IGEgcmVtb3RlIHVud2luZGVyLiAgT24gaWE2NCwgdGhpcyBpcyBkb25lIHZpYSBhIHNwZWNpYWwKKysgICAgICAgdW53aW5kLXRhYmxlIGVudHJ5LiAgUGVyaGFwcyBzb21ldGhpbmcgc2ltaWxhciBjYW4gYmUgZG9uZSB3aXRoCisrICAgICAgIERXQVJGMiB1bndpbmQgaW5mby4gICovCisrCisrc3RhdGljIHZvaWQKKytwdXRfdW53aW5kX2luZm8gKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19wcm9jX2luZm9fdCAqcHJvY19pbmZvLCB2b2lkICphcmcpCisreworKyAgLyogaXQncyBhIG5vLW9wICovCisrfQorKworK3N0YXRpYyBpbnQKKytnZXRfZHluX2luZm9fbGlzdF9hZGRyICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90ICpkeW5faW5mb19saXN0X2FkZHIsCisrCQkJdm9pZCAqYXJnKQorK3sKKysgICpkeW5faW5mb19saXN0X2FkZHIgPSAodW53X3dvcmRfdCkgJl9VX2R5bl9pbmZvX2xpc3Q7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK2FjY2Vzc19tZW0gKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgYWRkciwgdW53X3dvcmRfdCAqdmFsLCBpbnQgd3JpdGUsCisrCSAgICB2b2lkICphcmcpCisreworKyAgaWYgKHdyaXRlKQorKyAgICB7CisrICAgICAgRGVidWcgKDE2LCAibWVtWyVseF0gPC0gJWx4XG4iLCBhZGRyLCAqdmFsKTsKKysgICAgICAqKHVud193b3JkX3QgKikgYWRkciA9ICp2YWw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp2YWwgPSAqKHVud193b3JkX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTYsICJtZW1bJWx4XSAtPiAlbHhcbiIsIGFkZHIsICp2YWwpOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK2FjY2Vzc19yZWcgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19yZWdudW1fdCByZWcsIHVud193b3JkX3QgKnZhbCwgaW50IHdyaXRlLAorKwkgICAgdm9pZCAqYXJnKQorK3sKKysgIHVud193b3JkX3QgKmFkZHI7CisrICB1Y29udGV4dF90ICp1YyA9IGFyZzsKKysKKysgIGlmICh1bndfaXNfZnByZWcgKHJlZykpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKCEoYWRkciA9IHVjX2FkZHIgKHVjLCByZWcpKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAod3JpdGUpCisrICAgIHsKKysgICAgICAqKHVud193b3JkX3QgKikgYWRkciA9ICp2YWw7CisrICAgICAgRGVidWcgKDEyLCAiJXMgPC0gJWx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwgKnZhbCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp2YWwgPSAqKHVud193b3JkX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyAtPiAlbHhcbiIsIHVud19yZWduYW1lIChyZWcpLCAqdmFsKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrCisrIGJhZHJlZzoKKysgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfZnByZWcgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19yZWdudW1fdCByZWcsIHVud19mcHJlZ190ICp2YWwsCisrCSAgICAgIGludCB3cml0ZSwgdm9pZCAqYXJnKQorK3sKKysgIHVjb250ZXh0X3QgKnVjID0gYXJnOworKyAgdW53X2ZwcmVnX3QgKmFkZHI7CisrCisrICBpZiAoIXVud19pc19mcHJlZyAocmVnKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAoIShhZGRyID0gdWNfYWRkciAodWMsIHJlZykpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICh3cml0ZSkKKysgICAgeworKyAgICAgIERlYnVnICgxMiwgIiVzIDwtICUwOGx4LiUwOGx4LiUwOGx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwKKysJICAgICAoKGxvbmcgKil2YWwpWzBdLCAoKGxvbmcgKil2YWwpWzFdLCAoKGxvbmcgKil2YWwpWzJdKTsKKysgICAgICAqKHVud19mcHJlZ190ICopIGFkZHIgPSAqdmFsOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfZnByZWdfdCAqKSBhZGRyOworKyAgICAgIERlYnVnICgxMiwgIiVzIC0+ICUwOGx4LiUwOGx4LiUwOGx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwKKysJICAgICAoKGxvbmcgKil2YWwpWzBdLCAoKGxvbmcgKil2YWwpWzFdLCAoKGxvbmcgKil2YWwpWzJdKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrCisrIGJhZHJlZzoKKysgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgIC8qIGF0dGVtcHQgdG8gYWNjZXNzIGEgbm9uLXByZXNlcnZlZCByZWdpc3RlciAqLworKyAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKyt9CisrCisrc3RhdGljIGludAorK2dldF9zdGF0aWNfcHJvY19uYW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGlwLAorKwkJICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdW53X3dvcmRfdCAqb2ZmcCwKKysJCSAgICAgIHZvaWQgKmFyZykKKyt7CisrICByZXR1cm4gX1VlbGY2NF9nZXRfcHJvY19uYW1lIChhcywgZ2V0cGlkICgpLCBpcCwgYnVmLCBidWZfbGVuLCBvZmZwKTsKKyt9CisrCisrSElEREVOIHZvaWQKKythYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAodm9pZCkKKyt7CisrICBtZW1zZXQgKCZsb2NhbF9hZGRyX3NwYWNlLCAwLCBzaXplb2YgKGxvY2FsX2FkZHJfc3BhY2UpKTsKKysgIGxvY2FsX2FkZHJfc3BhY2UuY2FjaGluZ19wb2xpY3kgPSBVTldfQ0FDSEVfR0xPQkFMOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuZmluZF9wcm9jX2luZm8gPSBkd2FyZl9maW5kX3Byb2NfaW5mbzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLnB1dF91bndpbmRfaW5mbyA9IHB1dF91bndpbmRfaW5mbzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmdldF9keW5faW5mb19saXN0X2FkZHIgPSBnZXRfZHluX2luZm9fbGlzdF9hZGRyOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX21lbSA9IGFjY2Vzc19tZW07CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfcmVnID0gYWNjZXNzX3JlZzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19mcHJlZyA9IGFjY2Vzc19mcHJlZzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLnJlc3VtZSA9IGFhcmNoNjRfbG9jYWxfcmVzdW1lOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuZ2V0X3Byb2NfbmFtZSA9IGdldF9zdGF0aWNfcHJvY19uYW1lOworKyAgdW53X2ZsdXNoX2NhY2hlICgmbG9jYWxfYWRkcl9zcGFjZSwgMCwgMCk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdF9sb2NhbC5jCitAQCAtMCwwICsxLDU1IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgImluaXQuaCIKKysKKysjaWZkZWYgVU5XX1JFTU9URV9PTkxZCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pbml0X2xvY2FsICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X2NvbnRleHRfdCAqdWMpCisreworKyAgcmV0dXJuIC1VTldfRUlOVkFMOworK30KKysKKysjZWxzZSAvKiAhVU5XX1JFTU9URV9PTkxZICovCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pbml0X2xvY2FsICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X2NvbnRleHRfdCAqdWMpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIGlmICghdGRlcF9pbml0X2RvbmUpCisrICAgIHRkZXBfaW5pdCAoKTsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgYy0+ZHdhcmYuYXMgPSB1bndfbG9jYWxfYWRkcl9zcGFjZTsKKysgIGMtPmR3YXJmLmFzX2FyZyA9IHVjOworKworKyAgcmV0dXJuIGNvbW1vbl9pbml0IChjLCAxKTsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpbml0X3JlbW90ZS5jCitAQCAtMCwwICsxLDQ1IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJpbml0LmgiCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pbml0X3JlbW90ZSAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19hZGRyX3NwYWNlX3QgYXMsIHZvaWQgKmFzX2FyZykKKyt7CisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrICByZXR1cm4gLVVOV19FSU5WQUw7CisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKworKyAgaWYgKCF0ZGVwX2luaXRfZG9uZSkKKysgICAgdGRlcF9pbml0ICgpOworKworKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwKVxuIiwgYyk7CisrCisrICBjLT5kd2FyZi5hcyA9IGFzOworKyAgYy0+ZHdhcmYuYXNfYXJnID0gYXNfYXJnOworKyAgcmV0dXJuIGNvbW1vbl9pbml0IChjLCAwKTsKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jCitAQCAtMCwwICsxLDY0IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworKy8qIFRoZSByZXN0b3JlciBzdHViIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGZvcm06CisrCisrICAgZDI4MDExNjggICAgICAgIG1vdnogICAgeDgsICMweDhiCisrICAgZDQwMDAwMDEgICAgICAgIHN2YyAgICAgIzB4MAorKyovCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pc19zaWduYWxfZnJhbWUgKHVud19jdXJzb3JfdCAqY3Vyc29yKQorK3sKKysjaWZkZWYgX19saW51eF9fCisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgdW53X3dvcmRfdCB3MCwgaXA7CisrICB1bndfYWRkcl9zcGFjZV90IGFzOworKyAgdW53X2FjY2Vzc29yc190ICphOworKyAgdm9pZCAqYXJnOworKyAgaW50IHJldDsKKysKKysgIGFzID0gYy0+ZHdhcmYuYXM7CisrICBhID0gdW53X2dldF9hY2Nlc3NvcnMgKGFzKTsKKysgIGFyZyA9IGMtPmR3YXJmLmFzX2FyZzsKKysKKysgIGlwID0gYy0+ZHdhcmYuaXA7CisrCisrICByZXQgPSAoKmEtPmFjY2Vzc19tZW0pIChhcywgaXAsICZ3MCwgMCwgYXJnKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgLyogRklYTUU6IGRpc3Rpbmd1aXNoIDMyYml0IGluc24gdnMgNjRiaXQgcmVnaXN0ZXJzLiAgKi8KKysgIGlmICh3MCAhPSAweGQ0MDAwMDAxZDI4MDExNjgpCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIDE7CisrCisrI2Vsc2UKKysgIHJldHVybiAtVU5XX0VOT0lORk87CisrI2VuZGlmCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR3JlZ3MuYworQEAgLTAsMCArMSwxMTMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK0hJRERFTiBpbnQKKyt0ZGVwX2FjY2Vzc19yZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsIHVud193b3JkX3QgKnZhbHAsCisrCQkgaW50IHdyaXRlKQorK3sKKysgIGR3YXJmX2xvY190IGxvYyA9IERXQVJGX05VTExfTE9DOworKyAgdW5zaWduZWQgaW50IG1hc2s7CisrCisrICBzd2l0Y2ggKHJlZykKKysgICAgeworKyAgICBjYXNlIFVOV19BQVJDSDY0X1gwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzOgorKyAgICAgIG1hc2sgPSAxIDw8IHJlZzsKKysgICAgICBpZiAod3JpdGUpCisrICAgICAgICB7CisrICAgICAgICAgIGMtPmR3YXJmLmVoX2FyZ3NbcmVnXSA9ICp2YWxwOworKyAgICAgICAgICBjLT5kd2FyZi5laF92YWxpZF9tYXNrIHw9IG1hc2s7CisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgbWFzaykgIT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgKnZhbHAgPSBjLT5kd2FyZi5laF9hcmdzW3JlZ107CisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIFVOV19BQVJDSDY0X1g0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIxOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDMwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1BDOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1BTVEFURToKKysgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9TUDoKKysgICAgICBpZiAod3JpdGUpCisrICAgICAgICByZXR1cm4gLVVOV19FUkVBRE9OTFlSRUc7CisrICAgICAgKnZhbHAgPSBjLT5kd2FyZi5jZmE7CisrICAgICAgcmV0dXJuIDA7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOworKyAgICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrICAgIH0KKysKKysgIGlmICh3cml0ZSkKKysgICAgcmV0dXJuIGR3YXJmX3B1dCAoJmMtPmR3YXJmLCBsb2MsICp2YWxwKTsKKysgIGVsc2UKKysgICAgcmV0dXJuIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBsb2MsIHZhbHApOworK30KKysKKytISURERU4gaW50CisrdGRlcF9hY2Nlc3NfZnByZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsIHVud19mcHJlZ190ICp2YWxwLAorKwkJICAgaW50IHdyaXRlKQorK3sKKysgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR3Jlc3VtZS5jCitAQCAtMCwwICsxLDE3NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAib2Zmc2V0cy5oIgorKworKyNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisrCisrSElEREVOIGlubGluZSBpbnQKKythYXJjaDY0X2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X2N1cnNvcl90ICpjdXJzb3IsIHZvaWQgKmFyZykKKyt7CisrI2lmZGVmIF9fbGludXhfXworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIHVud190ZGVwX2NvbnRleHRfdCAqdWMgPSBjLT5kd2FyZi5hc19hcmc7CisrCisrICBpZiAoYy0+c2lnY29udGV4dF9mb3JtYXQgPT0gQUFSQ0g2NF9TQ0ZfTk9ORSkKKysgICAgeworKyAgICAgIC8qIFNpbmNlIHRoZXJlIGFyZSBubyBzaWduYWxzIGludm9sdmVkIGhlcmUgd2UgcmVzdG9yZSB0aGUgbm9uIHNjcmF0Y2gKKysJIHJlZ2lzdGVycyBvbmx5LiAgKi8KKysgICAgICB1bnNpZ25lZCBsb25nIHJlZ3NbMTFdOworKyAgICAgIHJlZ3NbMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxOV07CisrICAgICAgcmVnc1sxXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIwXTsKKysgICAgICByZWdzWzJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjFdOworKyAgICAgIHJlZ3NbM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMl07CisrICAgICAgcmVnc1s0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIzXTsKKysgICAgICByZWdzWzVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjRdOworKyAgICAgIHJlZ3NbNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNV07CisrICAgICAgcmVnc1s3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI2XTsKKysgICAgICByZWdzWzhdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjddOworKyAgICAgIHJlZ3NbOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOF07CisrICAgICAgcmVnc1sxMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1szMF07IC8qIExSICovCisrICAgICAgdW5zaWduZWQgbG9uZyBzcCA9IHVjLT51Y19tY29udGV4dC5zcDsKKysKKysgICAgICBzdHJ1Y3QgcmVnc19vdmVybGF5IHsKKysgICAgICAgIGNoYXIgeFtzaXplb2YocmVncyldOworKyAgICAgIH07CisrCisrICAgICAgYXNtIHZvbGF0aWxlICgKKysgICAgICAgICJsZHAgeDE5LCB4MjAsIFslMF1cbiIKKysgICAgICAgICJsZHAgeDIxLCB4MjIsIFslMCwxNl1cbiIKKysgICAgICAgICJsZHAgeDIzLCB4MjQsIFslMCwzMl1cbiIKKysgICAgICAgICJsZHAgeDI1LCB4MjYsIFslMCw0OF1cbiIKKysgICAgICAgICJsZHAgeDI3LCB4MjgsIFslMCw2NF1cbiIKKysgICAgICAgICJsZHIgeDMwLCBbJTAsODBdXG4iCisrICAgICAgICAibW92IHNwLCAlMVxuIgorKyAgICAgICAgInJldCBcbiIKKysgICAgICAgIDoKKysgICAgICAgIDogInIiIChyZWdzKSwKKysgICAgICAgICAgInIiIChzcCksCisrICAgICAgICAgICJtIiAoKihzdHJ1Y3QgcmVnc19vdmVybGF5ICopcmVncykKKysgICAgICApOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgKikgYy0+c2lnY29udGV4dF9hZGRyOworKworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHgxKSBzYy0+cmVnc1swXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMF07CisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDIpIHNjLT5yZWdzWzFdID0gYy0+ZHdhcmYuZWhfYXJnc1sxXTsKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4NCkgc2MtPnJlZ3NbMl0gPSBjLT5kd2FyZi5laF9hcmdzWzJdOworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHg4KSBzYy0+cmVnc1szXSA9IGMtPmR3YXJmLmVoX2FyZ3NbM107CisrCisrICAgICAgc2MtPnJlZ3NbNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s0XTsKKysgICAgICBzYy0+cmVnc1s1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzVdOworKyAgICAgIHNjLT5yZWdzWzZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNl07CisrICAgICAgc2MtPnJlZ3NbN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s3XTsKKysgICAgICBzYy0+cmVnc1s4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzhdOworKyAgICAgIHNjLT5yZWdzWzldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbOV07CisrICAgICAgc2MtPnJlZ3NbMTBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTBdOworKyAgICAgIHNjLT5yZWdzWzExXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzExXTsKKysgICAgICBzYy0+cmVnc1sxMl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMl07CisrICAgICAgc2MtPnJlZ3NbMTNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTNdOworKyAgICAgIHNjLT5yZWdzWzE0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE0XTsKKysgICAgICBzYy0+cmVnc1sxNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNV07CisrICAgICAgc2MtPnJlZ3NbMTZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTZdOworKyAgICAgIHNjLT5yZWdzWzE3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE3XTsKKysgICAgICBzYy0+cmVnc1sxOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxOF07CisrICAgICAgc2MtPnJlZ3NbMTldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTldOworKyAgICAgIHNjLT5yZWdzWzIwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIwXTsKKysgICAgICBzYy0+cmVnc1syMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMV07CisrICAgICAgc2MtPnJlZ3NbMjJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjJdOworKyAgICAgIHNjLT5yZWdzWzIzXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIzXTsKKysgICAgICBzYy0+cmVnc1syNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNF07CisrICAgICAgc2MtPnJlZ3NbMjVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjVdOworKyAgICAgIHNjLT5yZWdzWzI2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI2XTsKKysgICAgICBzYy0+cmVnc1syN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syN107CisrICAgICAgc2MtPnJlZ3NbMjhdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjhdOworKyAgICAgIHNjLT5yZWdzWzI5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI5XTsKKysgICAgICBzYy0+cmVnc1szMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1szMF07CisrICAgICAgc2MtPnNwID0gdWMtPnVjX21jb250ZXh0LnNwOworKyAgICAgIHNjLT5wYyA9IHVjLT51Y19tY29udGV4dC5wYzsKKysgICAgICBzYy0+cHN0YXRlID0gdWMtPnVjX21jb250ZXh0LnBzdGF0ZTsKKysKKysgICAgICBhc20gdm9sYXRpbGUgKAorKyAgICAgICAgIm1vdiBzcCwgJTBcbiIKKysgICAgICAgICJyZXQgJTFcbiIKKysgICAgICAgIDogOiAiciIgKGMtPnNpZ2NvbnRleHRfc3ApLCAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisrICAgICAgKTsKKysgICB9CisrICB1bnJlYWNoYWJsZSgpOworKyNlbHNlCisrICBwcmludGYgKCIlczogaW1wbGVtZW50IG1lXG4iLCBfX0ZVTkNUSU9OX18pOworKyNlbmRpZgorKyAgcmV0dXJuIC1VTldfRUlOVkFMOworK30KKysKKysjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK3N0YXRpYyBpbmxpbmUgdm9pZAorK2VzdGFibGlzaF9tYWNoaW5lX3N0YXRlIChzdHJ1Y3QgY3Vyc29yICpjKQorK3sKKysgIHVud19hZGRyX3NwYWNlX3QgYXMgPSBjLT5kd2FyZi5hczsKKysgIHZvaWQgKmFyZyA9IGMtPmR3YXJmLmFzX2FyZzsKKysgIHVud19mcHJlZ190IGZwdmFsOworKyAgdW53X3dvcmRfdCB2YWw7CisrICBpbnQgcmVnOworKworKyAgRGVidWcgKDgsICJjb3B5aW5nIG91dCBjdXJzb3Igc3RhdGVcbiIpOworKworKyAgZm9yIChyZWcgPSAwOyByZWcgPD0gVU5XX0FBUkNINjRfUFNUQVRFOyArK3JlZykKKysgICAgeworKyAgICAgIERlYnVnICgxNiwgImNvcHlpbmcgJXMgJWRcbiIsIHVud19yZWduYW1lIChyZWcpLCByZWcpOworKyAgICAgIGlmICh1bndfaXNfZnByZWcgKHJlZykpCisrCXsKKysJICBpZiAodGRlcF9hY2Nlc3NfZnByZWcgKGMsIHJlZywgJmZwdmFsLCAwKSA+PSAwKQorKwkgICAgYXMtPmFjYy5hY2Nlc3NfZnByZWcgKGFzLCByZWcsICZmcHZhbCwgMSwgYXJnKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmICh0ZGVwX2FjY2Vzc19yZWcgKGMsIHJlZywgJnZhbCwgMCkgPj0gMCkKKysJICAgIGFzLT5hY2MuYWNjZXNzX3JlZyAoYXMsIHJlZywgJnZhbCwgMSwgYXJnKTsKKysJfQorKyAgICB9CisrfQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfcmVzdW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKworKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwKVxuIiwgYyk7CisrCisrICBpZiAoIWMtPmR3YXJmLmlwKQorKyAgICB7CisrICAgICAgLyogVGhpcyBjYW4gaGFwcGVuIGVhc2lseSB3aGVuIHRoZSBmcmFtZS1jaGFpbiBnZXRzIHRydW5jYXRlZAorKwkgZHVlIHRvIGJhZCBvciBtaXNzaW5nIHVud2luZC1pbmZvLiAgKi8KKysgICAgICBEZWJ1ZyAoMSwgInJlZnVzaW5nIHRvIHJlc3VtZSBleGVjdXRpb24gYXQgYWRkcmVzcyAwXG4iKTsKKysgICAgICByZXR1cm4gLVVOV19FSU5WQUw7CisrICAgIH0KKysKKysgIGVzdGFibGlzaF9tYWNoaW5lX3N0YXRlIChjKTsKKysKKysgIHJldHVybiAoKmMtPmR3YXJmLmFzLT5hY2MucmVzdW1lKSAoYy0+ZHdhcmYuYXMsICh1bndfY3Vyc29yX3QgKikgYywKKysJCQkJICAgICBjLT5kd2FyZi5hc19hcmcpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dzdGVwLmMKK0BAIC0wLDAgKzEsMTI5IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBMaW5hcm8gTGltaXRlZAorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJvZmZzZXRzLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19oYW5kbGVfc2lnbmFsX2ZyYW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysgIHVud193b3JkX3Qgc2NfYWRkciwgc3AsIHNwX2FkZHIgPSBjLT5kd2FyZi5jZmE7CisrICBzdHJ1Y3QgZHdhcmZfbG9jIHNwX2xvYyA9IERXQVJGX0xPQyAoc3BfYWRkciwgMCk7CisrCisrICBpZiAoKHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBzcF9sb2MsICZzcCkpIDwgMCkKKysgICAgcmV0dXJuIC1VTldfRVVOU1BFQzsKKysKKysgIHJldCA9IHVud19pc19zaWduYWxfZnJhbWUgKGN1cnNvcik7CisrICBEZWJ1ZygxLCAidW53X2lzX3NpZ25hbF9mcmFtZSgpPSVkXG4iLCByZXQpOworKworKyAgLyogU2F2ZSB0aGUgU1AgYW5kIFBDIHRvIGJlIGFibGUgdG8gcmV0dXJuIGV4ZWN1dGlvbiBhdCB0aGlzIHBvaW50CisrICAgICBsYXRlciBpbiB0aW1lICh1bndfcmVzdW1lKS4gICovCisrICBjLT5zaWdjb250ZXh0X3NwID0gYy0+ZHdhcmYuY2ZhOworKyAgYy0+c2lnY29udGV4dF9wYyA9IGMtPmR3YXJmLmlwOworKworKyAgaWYgKHJldCkKKysgICAgeworKyAgICAgIGMtPnNpZ2NvbnRleHRfZm9ybWF0ID0gQUFSQ0g2NF9TQ0ZfTElOVVhfUlRfU0lHRlJBTUU7CisrICAgICAgc2NfYWRkciA9IHNwX2FkZHIgKyBzaXplb2YgKHNpZ2luZm9fdCkgKyBMSU5VWF9VQ19NQ09OVEVYVF9PRkY7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIC1VTldfRVVOU1BFQzsKKysKKysgIGMtPnNpZ2NvbnRleHRfYWRkciA9IHNjX2FkZHI7CisrCisrICAvKiBVcGRhdGUgdGhlIGR3YXJmIGN1cnNvci4KKysgICAgIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIHJlZ2lzdGVycyB0byB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzZXMgb2YgdGhlCisrICAgICB1Y19tY29udGV4dCAvIHNpZ2NvbnRleHQgc3RydWN0dXJlIGNvbnRlbnRzLiAgKi8KKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMl0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDJfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YM10gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDNfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDVfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNl0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDZfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YN10gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDhfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDlfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDExXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTJfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTNdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEzX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE0XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTVfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTZdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE2X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE3XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxN19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMThfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTldID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE5X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjJdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIzXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyM19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjVdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI2XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyN10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjhdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI5XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyOV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMzBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfU1BfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfUENfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QU1RBVEVdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1BTVEFURV9PRkYsIDApOworKworKyAgLyogU2V0IFNQL0NGQSBhbmQgUEMvSVAuICAqLworKyAgZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0sICZjLT5kd2FyZi5jZmEpOworKyAgZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10sICZjLT5kd2FyZi5pcCk7CisrCisrICBjLT5kd2FyZi5waV92YWxpZCA9IDA7CisrCisrICByZXR1cm4gMTsKKyt9CisrCisrUFJPVEVDVEVEIGludAorK3Vud19zdGVwICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcCwgaXA9MHglMDE2bHgsIGNmYT0weCUwMTZseCkpXG4iLAorKwkgYywgYy0+ZHdhcmYuaXAsIGMtPmR3YXJmLmNmYSk7CisrCisrICAvKiBDaGVjayBpZiB0aGlzIGlzIGEgc2lnbmFsIGZyYW1lLiAqLworKyAgaWYgKHVud19pc19zaWduYWxfZnJhbWUgKGN1cnNvcikpCisrICAgIHJldHVybiB1bndfaGFuZGxlX3NpZ25hbF9mcmFtZSAoY3Vyc29yKTsKKysKKysgIHJldCA9IGR3YXJmX3N0ZXAgKCZjLT5kd2FyZik7CisrICBEZWJ1ZygxLCAiZHdhcmZfc3RlcCgpPSVkXG4iLCByZXQpOworKworKyAgaWYgKHVubGlrZWx5IChyZXQgPT0gLVVOV19FU1RPUFVOV0lORCkpCisrICAgIHJldHVybiByZXQ7CisrCisrICBpZiAodW5saWtlbHkgKHJldCA8IDApKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAoYy0+ZHdhcmYuaXAgPT0gMCkgPyAwIDogMTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHY3JlYXRlX2FkZHJfc3BhY2UuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dldF9wcm9jX2luZm8uYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHZ2V0X3NhdmVfbG9jLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2xvYmFsLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dsb2JhbC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGluaXQuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHaW5pdC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHaW5pdF9sb2NhbC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGluaXRfcmVtb3RlLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXRfcmVtb3RlLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2lzX3NpZ25hbF9mcmFtZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTHJlZ3MuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHcmVncy5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTHJlc3VtZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdyZXN1bWUuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xzdGVwLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR3N0ZXAuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L2dlbi1vZmZzZXRzLmMKK0BAIC0wLDAgKzEsNjggQEAKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHVjb250ZXh0Lmg+CisrI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisrCisrI2RlZmluZSBVQyhOLFgpIFwKKysgIHByaW50ZiAoIiNkZWZpbmUgTElOVVhfVUNfIiBOICJfT0ZGXHQweCVYXG4iLCBvZmZzZXRvZiAodWNvbnRleHRfdCwgWCkpCisrCisrI2RlZmluZSBTQyhOLFgpIFwKKysgIHByaW50ZiAoIiNkZWZpbmUgTElOVVhfU0NfIiBOICJfT0ZGXHQweCVYXG4iLCBvZmZzZXRvZiAoc3RydWN0IHNpZ2NvbnRleHQsIFgpKQorKworK2ludAorK21haW4gKHZvaWQpCisreworKyAgcHJpbnRmICgKKysiLyogTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnM6ICovXG5cbiIKKysKKysiLyogRGVmaW5lIHZhcmlvdXMgc3RydWN0dXJlIG9mZnNldHMgdG8gc2ltcGxpZnkgY3Jvc3MtY29tcGlsYXRpb24uICAqL1xuXG4iCisrCisrIi8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggXCJ1Y29udGV4dF90XCI6ICAqL1xuXG4iKTsKKysKKysgIFVDICgiRkxBR1MiLCB1Y19mbGFncyk7CisrICBVQyAoIkxJTksiLCB1Y19saW5rKTsKKysgIFVDICgiU1RBQ0siLCB1Y19zdGFjayk7CisrICBVQyAoIk1DT05URVhUIiwgdWNfbWNvbnRleHQpOworKyAgVUMgKCJTSUdNQVNLIiwgdWNfc2lnbWFzayk7CisrCisrICBwcmludGYgKCJcbi8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggXCJzdHJ1Y3Qgc2lnY29udGV4dFwiOiAgKi9cblxuIik7CisrCisrICBTQyAoIlIwIiwgIHJlZ3NbMF0pOworKyAgU0MgKCJSMSIsICByZWdzWzFdKTsKKysgIFNDICgiUjIiLCAgcmVnc1syXSk7CisrICBTQyAoIlIzIiwgIHJlZ3NbM10pOworKyAgU0MgKCJSNCIsICByZWdzWzRdKTsKKysgIFNDICgiUjUiLCAgcmVnc1s1XSk7CisrICBTQyAoIlI2IiwgIHJlZ3NbNl0pOworKyAgU0MgKCJSNyIsICByZWdzWzddKTsKKysgIFNDICgiUjgiLCAgcmVnc1s4XSk7CisrICBTQyAoIlI5IiwgIHJlZ3NbOV0pOworKyAgU0MgKCJSMTAiLCByZWdzWzEwXSk7CisrICBTQyAoIlIxMSIsIHJlZ3NbMTFdKTsKKysgIFNDICgiUjEyIiwgcmVnc1sxMl0pOworKyAgU0MgKCJSMTMiLCByZWdzWzEzXSk7CisrICBTQyAoIlIxNCIsIHJlZ3NbMTRdKTsKKysgIFNDICgiUjE1IiwgcmVnc1sxNV0pOworKyAgU0MgKCJSMTYiLCByZWdzWzE2XSk7CisrICBTQyAoIlIxNyIsIHJlZ3NbMTddKTsKKysgIFNDICgiUjE4IiwgcmVnc1sxOF0pOworKyAgU0MgKCJSMTkiLCByZWdzWzE5XSk7CisrICBTQyAoIlIyMCIsIHJlZ3NbMjBdKTsKKysgIFNDICgiUjIxIiwgcmVnc1syMV0pOworKyAgU0MgKCJSMjIiLCByZWdzWzIyXSk7CisrICBTQyAoIlIyMyIsIHJlZ3NbMjNdKTsKKysgIFNDICgiUjI0IiwgcmVnc1syNF0pOworKyAgU0MgKCJSMjUiLCByZWdzWzI1XSk7CisrICBTQyAoIlIyNiIsIHJlZ3NbMjZdKTsKKysgIFNDICgiUjI3IiwgcmVnc1syN10pOworKyAgU0MgKCJSMjgiLCByZWdzWzI4XSk7CisrICBTQyAoIlIyOSIsIHJlZ3NbMjldKTsKKysgIFNDICgiUjMwIiwgcmVnc1szMF0pOworKyAgU0MgKCJSMzEiLCByZWdzWzMxXSk7CisrCisrICBTQyAoIlBDIiwgcGMpOworKyAgU0MgKCJTUCIsIHNwKTsKKysgIFNDICgiRmF1bHQiLCBmYXVsdF9hZGRyZXNzKTsKKysgIFNDICgic3RhdGUiLCBwc3RhdGUpOworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvaW5pdC5oCitAQCAtMCwwICsxLDEyNyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytzdGF0aWMgaW5saW5lIGludAorK2NvbW1vbl9pbml0IChzdHJ1Y3QgY3Vyc29yICpjLCB1bnNpZ25lZCB1c2VfcHJldl9pbnN0cikKKyt7CisrICBpbnQgcmV0LCBpOworKworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gwXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDJdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDVdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g2XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YN10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDhdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g5XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjhdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDMwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDMwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9TUCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfUEMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BTVEFURV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOV19BQVJDSDY0X1BTVEFURSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjBdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjNdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y0XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjZdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y3XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WOF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjldICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjExXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjExKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMThdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMzBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMzApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzMSk7CisrCisrICBmb3IgKGkgPSBVTldfQUFSQ0g2NF9QU1RBVEUgKyAxOyBpIDwgVU5XX0FBUkNINjRfVjA7ICsraSkKKysgICAgYy0+ZHdhcmYubG9jW2ldID0gRFdBUkZfTlVMTF9MT0M7CisrCisrICByZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSwgJmMtPmR3YXJmLmlwKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgcmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0sICZjLT5kd2FyZi5jZmEpOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICBjLT5zaWdjb250ZXh0X2Zvcm1hdCA9IEFBUkNINjRfU0NGX05PTkU7CisrICBjLT5zaWdjb250ZXh0X2FkZHIgPSAwOworKyAgYy0+c2lnY29udGV4dF9zcCA9IDA7CisrICBjLT5zaWdjb250ZXh0X3BjID0gMDsKKysKKysgIGMtPmR3YXJmLmFyZ3Nfc2l6ZSA9IDA7CisrICBjLT5kd2FyZi5yZXRfYWRkcl9jb2x1bW4gPSAwOworKyAgYy0+ZHdhcmYuc3Rhc2hfZnJhbWVzID0gMDsKKysgIGMtPmR3YXJmLnVzZV9wcmV2X2luc3RyID0gdXNlX3ByZXZfaW5zdHI7CisrICBjLT5kd2FyZi5waV92YWxpZCA9IDA7CisrICBjLT5kd2FyZi5waV9pc19keW5hbWljID0gMDsKKysgIGMtPmR3YXJmLmhpbnQgPSAwOworKyAgYy0+ZHdhcmYucHJldl9ycyA9IDA7CisrCisrICByZXR1cm4gMDsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9pc19mcHJlZy5jCitAQCAtMCwwICsxLDMyIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJsaWJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaXNfZnByZWcgKGludCByZWdudW0pCisreworKyAgcmV0dXJuIChyZWdudW0gPj0gVU5XX0FBUkNINjRfVjAgJiYgcmVnbnVtIDw9IFVOV19BQVJDSDY0X1YzMSk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvb2Zmc2V0cy5oCitAQCAtMCwwICsxLDQ5IEBACisrLyogTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnM6ICovCisrCisrLyogRGVmaW5lIHZhcmlvdXMgc3RydWN0dXJlIG9mZnNldHMgdG8gc2ltcGxpZnkgY3Jvc3MtY29tcGlsYXRpb24uICAqLworKworKy8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggInVjb250ZXh0X3QiOiAgKi8KKysKKysjZGVmaW5lIExJTlVYX1VDX0ZMQUdTX09GRgkweDAKKysjZGVmaW5lIExJTlVYX1VDX0xJTktfT0ZGCTB4OAorKyNkZWZpbmUgTElOVVhfVUNfU1RBQ0tfT0ZGCTB4MTAKKysjZGVmaW5lIExJTlVYX1VDX1NJR01BU0tfT0ZGCTB4MjgKKysjZGVmaW5lIExJTlVYX1VDX01DT05URVhUX09GRgkweGIwCisrCisrLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCAic3RydWN0IHNpZ2NvbnRleHQiOiAgKi8KKysKKysjZGVmaW5lIExJTlVYX1NDX0ZBVUxUQUREUkVTU19PRkYJMHgwMAorKyNkZWZpbmUgTElOVVhfU0NfWDBfT0ZGCQkweDAwOAorKyNkZWZpbmUgTElOVVhfU0NfWDFfT0ZGCQkweDAxMAorKyNkZWZpbmUgTElOVVhfU0NfWDJfT0ZGCQkweDAxOAorKyNkZWZpbmUgTElOVVhfU0NfWDNfT0ZGCQkweDAyMAorKyNkZWZpbmUgTElOVVhfU0NfWDRfT0ZGCQkweDAyOAorKyNkZWZpbmUgTElOVVhfU0NfWDVfT0ZGCQkweDAzMAorKyNkZWZpbmUgTElOVVhfU0NfWDZfT0ZGCQkweDAzOAorKyNkZWZpbmUgTElOVVhfU0NfWDdfT0ZGCQkweDA0MAorKyNkZWZpbmUgTElOVVhfU0NfWDhfT0ZGCQkweDA0OAorKyNkZWZpbmUgTElOVVhfU0NfWDlfT0ZGCQkweDA1MAorKyNkZWZpbmUgTElOVVhfU0NfWDEwX09GRgkweDA1OAorKyNkZWZpbmUgTElOVVhfU0NfWDExX09GRgkweDA2MAorKyNkZWZpbmUgTElOVVhfU0NfWDEyX09GRgkweDA2OAorKyNkZWZpbmUgTElOVVhfU0NfWDEzX09GRgkweDA3MAorKyNkZWZpbmUgTElOVVhfU0NfWDE0X09GRgkweDA3OAorKyNkZWZpbmUgTElOVVhfU0NfWDE1X09GRgkweDA4MAorKyNkZWZpbmUgTElOVVhfU0NfWDE2X09GRgkweDA4OAorKyNkZWZpbmUgTElOVVhfU0NfWDE3X09GRgkweDA5MAorKyNkZWZpbmUgTElOVVhfU0NfWDE4X09GRgkweDA5OAorKyNkZWZpbmUgTElOVVhfU0NfWDE5X09GRgkweDBhMAorKyNkZWZpbmUgTElOVVhfU0NfWDIwX09GRgkweDBhOAorKyNkZWZpbmUgTElOVVhfU0NfWDIxX09GRgkweDBiMAorKyNkZWZpbmUgTElOVVhfU0NfWDIyX09GRgkweDBiOAorKyNkZWZpbmUgTElOVVhfU0NfWDIzX09GRgkweDBjMAorKyNkZWZpbmUgTElOVVhfU0NfWDI0X09GRgkweDBjOAorKyNkZWZpbmUgTElOVVhfU0NfWDI1X09GRgkweDBkMAorKyNkZWZpbmUgTElOVVhfU0NfWDI2X09GRgkweDBkOAorKyNkZWZpbmUgTElOVVhfU0NfWDI3X09GRgkweDBlMAorKyNkZWZpbmUgTElOVVhfU0NfWDI4X09GRgkweDBlOAorKyNkZWZpbmUgTElOVVhfU0NfWDI5X09GRgkweDBmMAorKyNkZWZpbmUgTElOVVhfU0NfWDMwX09GRgkweDBmOAorKyNkZWZpbmUgTElOVVhfU0NfU1BfT0ZGCQkweDEwMAorKyNkZWZpbmUgTElOVVhfU0NfUENfT0ZGCQkweDEwOAorKyNkZWZpbmUgTElOVVhfU0NfUFNUQVRFX09GRgkweDExMAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvcmVnbmFtZS5jCitAQCAtMCwwICsxLDEwNiBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmVnbmFtZVtdID0KKysgIHsKKysgICAgW1VOV19BQVJDSDY0X1gwXSA9ICJ4MCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMV0gPSAieDEiLAorKyAgICBbVU5XX0FBUkNINjRfWDJdID0gIngyIiwKKysgICAgW1VOV19BQVJDSDY0X1gzXSA9ICJ4MyIsCisrICAgIFtVTldfQUFSQ0g2NF9YNF0gPSAieDQiLAorKyAgICBbVU5XX0FBUkNINjRfWDVdID0gIng1IiwKKysgICAgW1VOV19BQVJDSDY0X1g2XSA9ICJ4NiIsCisrICAgIFtVTldfQUFSQ0g2NF9YN10gPSAieDciLAorKyAgICBbVU5XX0FBUkNINjRfWDhdID0gIng4IiwKKysgICAgW1VOV19BQVJDSDY0X1g5XSA9ICJ4OSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTBdID0gIngxMCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTFdID0gIngxMSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTJdID0gIngxMiIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTNdID0gIngxMyIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTRdID0gIngxNCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTVdID0gIngxNSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTZdID0gImlwMCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTddID0gImlwMSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMThdID0gIngxOCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTldID0gIngxOSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjBdID0gIngyMCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjFdID0gIngyMSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjJdID0gIngyMiIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjNdID0gIngyMyIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjRdID0gIngyNCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjVdID0gIngyNSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjZdID0gIngyNiIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjddID0gIngyNyIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjhdID0gIngyOCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjldID0gImZwIiwKKysgICAgW1VOV19BQVJDSDY0X1gzMF0gPSAibHIiLAorKyAgICBbVU5XX0FBUkNINjRfU1BdID0gInNwIiwKKysgICAgW1VOV19BQVJDSDY0X1BDXSA9ICJwYyIsCisrICAgIFtVTldfQUFSQ0g2NF9WMF0gPSAidjAiLAorKyAgICBbVU5XX0FBUkNINjRfVjFdID0gInYxIiwKKysgICAgW1VOV19BQVJDSDY0X1YyXSA9ICJ2MiIsCisrICAgIFtVTldfQUFSQ0g2NF9WM10gPSAidjMiLAorKyAgICBbVU5XX0FBUkNINjRfVjRdID0gInY0IiwKKysgICAgW1VOV19BQVJDSDY0X1Y1XSA9ICJ2NSIsCisrICAgIFtVTldfQUFSQ0g2NF9WNl0gPSAidjYiLAorKyAgICBbVU5XX0FBUkNINjRfVjddID0gInY3IiwKKysgICAgW1VOV19BQVJDSDY0X1Y4XSA9ICJ2OCIsCisrICAgIFtVTldfQUFSQ0g2NF9WOV0gPSAidjkiLAorKyAgICBbVU5XX0FBUkNINjRfVjEwXSA9ICJ2MTAiLAorKyAgICBbVU5XX0FBUkNINjRfVjExXSA9ICJ2MTEiLAorKyAgICBbVU5XX0FBUkNINjRfVjEyXSA9ICJ2MTIiLAorKyAgICBbVU5XX0FBUkNINjRfVjEzXSA9ICJ2MTMiLAorKyAgICBbVU5XX0FBUkNINjRfVjE0XSA9ICJ2MTQiLAorKyAgICBbVU5XX0FBUkNINjRfVjE1XSA9ICJ2MTUiLAorKyAgICBbVU5XX0FBUkNINjRfVjE2XSA9ICJ2MTYiLAorKyAgICBbVU5XX0FBUkNINjRfVjE3XSA9ICJ2MTciLAorKyAgICBbVU5XX0FBUkNINjRfVjE4XSA9ICJ2MTgiLAorKyAgICBbVU5XX0FBUkNINjRfVjE5XSA9ICJ2MTkiLAorKyAgICBbVU5XX0FBUkNINjRfVjIwXSA9ICJ2MjAiLAorKyAgICBbVU5XX0FBUkNINjRfVjIxXSA9ICJ2MjEiLAorKyAgICBbVU5XX0FBUkNINjRfVjIyXSA9ICJ2MjIiLAorKyAgICBbVU5XX0FBUkNINjRfVjIzXSA9ICJ2MjMiLAorKyAgICBbVU5XX0FBUkNINjRfVjI0XSA9ICJ2MjQiLAorKyAgICBbVU5XX0FBUkNINjRfVjI1XSA9ICJ2MjUiLAorKyAgICBbVU5XX0FBUkNINjRfVjI2XSA9ICJ2MjYiLAorKyAgICBbVU5XX0FBUkNINjRfVjI3XSA9ICJ2MjciLAorKyAgICBbVU5XX0FBUkNINjRfVjI4XSA9ICJ2MjgiLAorKyAgICBbVU5XX0FBUkNINjRfVjI5XSA9ICJ2MjkiLAorKyAgICBbVU5XX0FBUkNINjRfVjMwXSA9ICJ2MzAiLAorKyAgICBbVU5XX0FBUkNINjRfVjMxXSA9ICJ2MzEiLAorKyAgICBbVU5XX0FBUkNINjRfRlBTUl0gPSAiZnBzciIsCisrICAgIFtVTldfQUFSQ0g2NF9GUENSXSA9ICJmcGNyIiwKKysgIH07CisrCisrUFJPVEVDVEVEIGNvbnN0IGNoYXIgKgorK3Vud19yZWduYW1lICh1bndfcmVnbnVtX3QgcmVnKQorK3sKKysgIGlmIChyZWcgPCAodW53X3JlZ251bV90KSBBUlJBWV9TSVpFIChyZWduYW1lKSAmJiByZWduYW1lW3JlZ10gIT0gTlVMTCkKKysgICAgcmV0dXJuIHJlZ25hbWVbcmVnXTsKKysgIGVsc2UKKysgICAgcmV0dXJuICI/Pz8iOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3NpZ2xvbmdqbXAuUworQEAgLTAsMCArMSwxMiBAQAorKwkvKiBEdW1teSBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LiAgKi8KKysKKysJLmdsb2JhbCBfVUlfc2lnbG9uZ2ptcF9jb250CisrCS5nbG9iYWwgX1VJX2xvbmdqbXBfY29udAorKworK19VSV9zaWdsb25nam1wX2NvbnQ6CisrX1VJX2xvbmdqbXBfY29udDoKKysJcmV0CisrI2lmZGVmIF9fbGludXhfXworKyAvKiBXZSBkbyBub3QgbmVlZCBleGVjdXRhYmxlIHN0YWNrLiAgKi8KKysgLnNlY3Rpb24gIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3Vud2luZF9pLmgKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiB1bndpbmRfaV9oCisrI2RlZmluZSB1bndpbmRfaV9oCisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpbmNsdWRlIDxsaWJ1bndpbmQtYWFyY2g2NC5oPgorKworKyNpbmNsdWRlICJsaWJ1bndpbmRfaS5oIgorKworKyNkZWZpbmUgYWFyY2g2NF9sb2NrCQkJVU5XX09CSihsb2NrKQorKyNkZWZpbmUgYWFyY2g2NF9sb2NhbF9yZXN1bWUJCVVOV19PQkoobG9jYWxfcmVzdW1lKQorKyNkZWZpbmUgYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQJVU5XX09CSihsb2NhbF9hZGRyX3NwYWNlX2luaXQpCisrCisrZXh0ZXJuIHZvaWQgYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpOworK2V4dGVybiBpbnQgYWFyY2g2NF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19jdXJzb3JfdCAqY3Vyc29yLAorKwkJCSAgICAgdm9pZCAqYXJnKTsKKysKKysjZW5kaWYgLyogdW53aW5kX2lfaCAqLworLS0tIGEvc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jCisrKysgYi9zcmMvY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2xpbnV4LmMKK0BAIC0zOSw3ICszOSwxMCBAQCBfVUNEX2FjY2Vzc19yZWcgKHVud19hZGRyX3NwYWNlX3QgYXMsCisgICAgICAgcmV0dXJuIC1VTldfRUlOVkFMOworICAgICB9CisgCistI2lmIGRlZmluZWQoVU5XX1RBUkdFVF9BUk0pCisrI2lmIGRlZmluZWQoVU5XX1RBUkdFVF9BQVJDSDY0KQorKyAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IFVOV19BQVJDSDY0X0ZQQ1IpCisrICAgIGdvdG8gYmFkcmVnOworKyNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9BUk0pCisgICBpZiAocmVnbnVtIDwgMCB8fCByZWdudW0gPj0gMTYpCisgICAgIGdvdG8gYmFkcmVnOworICNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9TSCkKKy0tLSBhL3NyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMKKysrKyBiL3NyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMKK0BAIC0xLDYgKzEsNyBAQAorIC8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKyAJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKyAKK0BAIC01MDEsNiArNTAyLDQxIEBAIGNvbnN0IGludCBfVVBUX3JlZ19vZmZzZXRbVU5XX1JFR19MQVNUICsKKyAgICAgW1VOV19BUk1fUjE1XSAgICAgID0gMHgzYywKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfTUlQUykKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfU0gpCisrI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX0FBUkNINjQpCisrICAgIFtVTldfQUFSQ0g2NF9YMF0gICAgICAgPSAweDAwLAorKyAgICBbVU5XX0FBUkNINjRfWDFdICAgICAgID0gMHgwOCwKKysgICAgW1VOV19BQVJDSDY0X1gyXSAgICAgICA9IDB4MTAsCisrICAgIFtVTldfQUFSQ0g2NF9YM10gICAgICAgPSAweDE4LAorKyAgICBbVU5XX0FBUkNINjRfWDRdICAgICAgID0gMHgyMCwKKysgICAgW1VOV19BQVJDSDY0X1g1XSAgICAgICA9IDB4MjgsCisrICAgIFtVTldfQUFSQ0g2NF9YNl0gICAgICAgPSAweDMwLAorKyAgICBbVU5XX0FBUkNINjRfWDddICAgICAgID0gMHgzOCwKKysgICAgW1VOV19BQVJDSDY0X1g4XSAgICAgICA9IDB4NDAsCisrICAgIFtVTldfQUFSQ0g2NF9YOV0gICAgICAgPSAweDQ4LAorKyAgICBbVU5XX0FBUkNINjRfWDEwXSAgICAgID0gMHg1MCwKKysgICAgW1VOV19BQVJDSDY0X1gxMV0gICAgICA9IDB4NTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTJdICAgICAgPSAweDYwLAorKyAgICBbVU5XX0FBUkNINjRfWDEzXSAgICAgID0gMHg2OCwKKysgICAgW1VOV19BQVJDSDY0X1gxNF0gICAgICA9IDB4NzAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTVdICAgICAgPSAweDc4LAorKyAgICBbVU5XX0FBUkNINjRfWDE2XSAgICAgID0gMHg4MCwKKysgICAgW1VOV19BQVJDSDY0X1gxN10gICAgICA9IDB4ODgsCisrICAgIFtVTldfQUFSQ0g2NF9YMThdICAgICAgPSAweDkwLAorKyAgICBbVU5XX0FBUkNINjRfWDE5XSAgICAgID0gMHg5OCwKKysgICAgW1VOV19BQVJDSDY0X1gyMF0gICAgICA9IDB4YTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjFdICAgICAgPSAweGE4LAorKyAgICBbVU5XX0FBUkNINjRfWDIyXSAgICAgID0gMHhiMCwKKysgICAgW1VOV19BQVJDSDY0X1gyM10gICAgICA9IDB4YjgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjRdICAgICAgPSAweGMwLAorKyAgICBbVU5XX0FBUkNINjRfWDI1XSAgICAgID0gMHhjOCwKKysgICAgW1VOV19BQVJDSDY0X1gyNl0gICAgICA9IDB4ZDAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjddICAgICAgPSAweGQ4LAorKyAgICBbVU5XX0FBUkNINjRfWDI4XSAgICAgID0gMHhlMCwKKysgICAgW1VOV19BQVJDSDY0X1gyOV0gICAgICA9IDB4ZTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMzBdICAgICAgPSAweGYwLAorKyAgICBbVU5XX0FBUkNINjRfU1BdICAgICAgID0gMHhmOCwKKysgICAgW1VOV19BQVJDSDY0X1BDXSAgICAgICA9IDB4MTAwLAorKyAgICBbVU5XX0FBUkNINjRfUFNUQVRFXSAgID0gMHgxMDgKKyAjZWxzZQorICMgZXJyb3IgRml4IG1lLgorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwZjVjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRml4IHRlc3QgY2FzZSBsaW5rIGZhaWx1cmUgb24gUG93ZXJQQyBzeXN0ZW1zIHdpdGggQWx0aXZlYworCitVcHN0cmVhbS1TdGF0dXM6YmFja3BvcnQKKworT24gc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGNvbXBpbGVyIHN1cHBvcnRzIEFsdGl2ZWMgYnkgZGVmYXVsdCwKK3RoZSBsaWJ1bndpbmQgTWFrZWZpbGUgd2lsbCBhdHRlbXB0IHRvIGJ1aWxkIGFuIGV4dHJhIHRlc3QgY2FzZQorcHBjNjQtdGVzdC1hbHRpdmVjLiAgVW5mb3J0dW5hdGVseSwgdGhlIGxpbmsgc3RlcCB3aWxsIGZhaWwgc2luY2UKK3RoZSBNYWtlZmlsZSBkb2VzIG5vdCBhY3R1YWxseSBsaW5rIGFnYWluc3QgdGhlIGxpYnVud2luZCBsaWJyYXJ5LgorCitGaXhlZCBieSBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIExEQUREIG1hY3JvLgorCitTaWduZWQtb2ZmLWJ5OiBVbHJpY2ggV2VpZ2FuZCA8YWRkcmVzc0BoaWRkZW4+CistLS0KKyB0ZXN0cy9NYWtlZmlsZS5hbSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMGUzMDUzNi4uOWM3NjYyOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTIwMSwzICsyMDEsNCBAQCBMaWE2NF90ZXN0X3Jic19MREFERCA9ICQoTElCVU5XSU5EX2xvY2FsKQorIExpYTY0X3Rlc3RfcmVhZG9ubHlfTERBREQgPSAkKExJQlVOV0lORF9sb2NhbCkKKyBpYTY0X3Rlc3RfZHluMV9MREFERCA9ICQoTElCVU5XSU5EKQorIGlhNjRfdGVzdF9zaWdfTERBREQgPSAkKExJQlVOV0lORCkKKytwcGM2NF90ZXN0X2FsdGl2ZWNfTERBREQgPSAkKExJQlVOV0lORCkKKy0tIAorMS44LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTVjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA1MDhjYTE3YTdiZTAxZDFjYzk2MGQ5YTA3ZDBhZjQ1MTM5NDhmYjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KK0RhdGU6IEZyaSwgMjcgSnVuIDIwMTQgMDg6NDA6MzMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gTGluayBsaWJ1bndpbmQgdG8gbGliZ2NjX3MgcmF0aGVyIHRoYW4gbGliZ2NjCisKK0ZvciBzb21lIGFyY2hpdGVjdHVyZXMsIC1sZ2NjIGFuZCAtbGdjY19zIGFyZSBub3QgZXF1aXZhbGVudC4gT24gQVJNIGZvcgorZXhhbXBsZSwgbGliZ2NjX3Muc28uMSBjb250YWlucyBzb21lIHN5bWJvbHMgbmVlZGVkIGJ5IGxpYnVud2luZCB3aGljaAorYXJlIG5vdCBwcmVzZW50IGluIGxpYmdjYy4KKworVGhpcyBjYXVzZXMgdGhlIGZvbGxvd2luZyBsaW5rIGVycm9yIHdoZW4gYnVpbGRpbmcgdGhlIFguT3JnIFggc2VydmVyCit3aXRoIGxpYnVud2luZCBzdXBwb3J0OgorCisJICBDQ0xEICAgICBYb3JnCisJL3Vzci9saWIvbGlidW53aW5kLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FlYWJpX3Vud2luZF9jcHBfcHIwJworCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMScKKworTGlua2luZyBhZ2FpbnN0IGxpYmdjY19zIGV4cGxpY2l0bHkgc29sdmVzIHRoaXMgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZmZlMTliLi4zYmViNWYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNTgsNyArMjU4LDcgQEAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWyNpZm5kZWYgX19JTlRFTF9DT01QSUxFUgorIAorIGlmIHRlc3QgeCRHQ0MgPSB4eWVzIC1hIHgkaW50ZWxfY29tcGlsZXIgIT0geHllczsgdGhlbgorICAgQ0ZMQUdTPSIke0NGTEFHU30gLWZleGNlcHRpb25zIC1XYWxsIC1Xc2lnbi1jb21wYXJlIgorLSAgTElCQ1JUUz0iLWxnY2MiCisrICBMSUJDUlRTPSItbGdjY19zIgorIGZpCisgQUNfTVNHX1JFU1VMVChbJGludGVsX2NvbXBpbGVyXSkKKyAKKy0tIAorMi4zLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4YjcwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSAxMGIwNjRmZmU5MDJkNWFmMzFiYjQ5YmQ4ZTRmMDNjNTQ1ZjhkNDYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgorRGF0ZTogVHVlLCAxMyBOb3YgMjAxMiAxMToxOTo0NyArMDEwMAorU3ViamVjdDogW1BBVENIXSBTdXBwb3J0IGJ1aWxkaW5nIHdpdGggb2xkZXIgY29tcGlsZXJzLgorCitBZGQgYSBjaGVjayBmb3IgX19idWlsdGluX3VucmVhY2hhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKKyBpbmNsdWRlL2xpYnVud2luZF9pLmggfCAgICA2ICsrKysrKworIHNyYy9hcm0vR3Jlc3VtZS5jICAgICB8ICAgIDIgKy0KKyBzcmMvc2gvR3Jlc3VtZS5jICAgICAgfCAgICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NSw2ICsyODUsMTcgQEAgaWYgdGVzdCB4JGhhdmVfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSA9CisgZmkKKyBBQ19NU0dfUkVTVUxUKFskaGF2ZV9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlXSkKKyAKKytBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBfX2J1aWx0aW5fdW5yZWFjaGFibGVdKQorK0FDX0xJTktfSUZFTFNFKAorKyAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW19fYnVpbHRpbl91bnJlYWNoYWJsZSgpXV0pXSwKKysgIFtoYXZlX19idWlsdGluX3VucmVhY2hhYmxlPXllc10sCisrICBbaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZT1ub10pCisraWYgdGVzdCB4JGhhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGUgPSB4eWVzOyB0aGVuCisrICBBQ19ERUZJTkUoW0hBVkVfX0JVSUxUSU5fVU5SRUFDSEFCTEVdLCBbMV0sCisrICAgICAgICAgICAgW0RlZmluZWQgaWYgX19idWlsdGluX3VucmVhY2hhYmxlKCkgaXMgYXZhaWxhYmxlXSkKKytmaQorK0FDX01TR19SRVNVTFQoWyRoYXZlX19idWlsdGluX3VucmVhY2hhYmxlXSkKKysKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBfX3N5bmMgYXRvbWljc10pCisgQUNfTElOS19JRkVMU0UoCisgICBbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbCistLS0gYS9pbmNsdWRlL2xpYnVud2luZF9pLmgKKysrKyBiL2luY2x1ZGUvbGlidW53aW5kX2kuaAorQEAgLTcyLDYgKzcyLDEyIEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREUKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoSEFWRV9fQlVJTFRJTl9VTlJFQUNIQUJMRSkKKysjIGRlZmluZSB1bnJlYWNoYWJsZSgpIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpCisrI2Vsc2UKKysjIGRlZmluZSB1bnJlYWNoYWJsZSgpIGRvIHsgfSB3aGlsZSAoMSkKKysjZW5kaWYKKysKKyAjaWZkZWYgREVCVUcKKyAjIGRlZmluZSBVTldfREVCVUcJMQorICNlbHNlCistLS0gYS9zcmMvYXJtL0dyZXN1bWUuYworKysrIGIvc3JjL2FybS9HcmVzdW1lLmMKK0BAIC05Niw3ICs5Niw3IEBAIGFybV9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHUKKyAJOiA6ICJyIiAoYy0+c2lnY29udGV4dF9zcCksICJyIiAoYy0+c2lnY29udGV4dF9wYykKKyAgICAgICApOworICAgIH0KKy0gIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOworKyAgdW5yZWFjaGFibGUoKTsKKyAjZWxzZQorICAgcHJpbnRmICgiJXM6IGltcGxlbWVudCBtZVxuIiwgX19GVU5DVElPTl9fKTsKKyAjZW5kaWYKKy0tLSBhL3NyYy9zaC9HcmVzdW1lLmMKKysrKyBiL3NyYy9zaC9HcmVzdW1lLmMKK0BAIC0xMDksNyArMTA5LDcgQEAgc2hfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bgorIAkgICJyIiAoYy0+c2lnY29udGV4dF9wYykKKyAgICAgICApOworICAgIH0KKy0gIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOworKyAgdW5yZWFjaGFibGUoKTsKKyAjZW5kaWYKKyAgIHJldHVybiAtVU5XX0VJTlZBTDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjBhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYwpAQCAtMCwwICsxLDMxIEBACitERVNDUklQVElPTiA9ICJhIHBvcnRhYmxlIGFuZCBlZmZpY2llbnQgQyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKEFQSSkgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsLWNoYWluIG9mIGEgcHJvZ3JhbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy9saWJ1bndpbmQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTNmY2VkMTFkNmRmNzE5YjQ3NTA1ODM3YTUxYzE2YWU1IgorREVQRU5EUyArPSAibGliYXRvbWljLW9wcyIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1taW5pZGVidWdpbmZvLC0tZGlzYWJsZS1taW5pZGVidWdpbmZvLHh6IgorCitFWFRSQV9PRUNPTkZfYXJtID0gIi0tZW5hYmxlLWRlYnVnLWZyYW1lIgorRVhUUkFfT0VDT05GX2FhcmNoNjQgPSAiLS1lbmFibGUtZGVidWctZnJhbWUiCisKK0NGTEFHUyArPSAiJHtBVE9NSUNPUFN9IgorQVRPTUlDT1BTX2FybXY1ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgorQVRPTUlDT1BTX2FybXY0ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgorQVRPTUlDT1BTID89ICIiCisKK0xERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX3g4Ni02NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKKworTERGTEFHU19hcHBlbmRfYXJtID0gIiAtZnVzZS1sZD1nb2xkIgorTERGTEFHU19hcHBlbmRfYWFyY2g2NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKKworTERGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX3Bvd2VycGM2NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODJjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGxpYnVud2luZC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoIFwKKyAgICBmaWxlOi8vQUFyY2g2NC1wb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBcCisgICAgZmlsZTovL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYjRlYTJmNmZiYmU0NWJmMDMyY2QzNmU1ODY4ODNjZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGZlMGZjYWUyYTg2NmRlOWQzOTQyYzY2OTk1ZTRiNDYwMjMwNDQ2ODg3ZGJkYWIzMDJkNDFhOGFlZThkMDlhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkMGJiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0Zyb20gNmFmNzkwODE4ZDA3NGMxMDNjNDc5N2YxY2U3NjQ4OTZmMTgzZTAyOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIyIEF1ZyAyMDE1IDIxOjM1OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVhdG9taWM6IFNwZWNpZnkgY29tcGxldGUgdHlwZXMgZm9yIGF0b21pYyBmdW5jdGlvbiBjYWxscworCitUaGlzIHdhcyB1bmVhcnRoZWQgYnkgY2xhbmcgY29tcGlsZXIgd2hlcmUgaXQgY29tcGxhaW5lZCBhYm91dCBwYXJhbWV0ZXIKK21pc21hdGNoLCBnY2MgZG9lc250IG5vdGljZSB0aGlzCisKK3VyY3UvdWF0b21pYy9nZW5lcmljLmg6MTkwOjEwOiBlcnJvcjogYWRkcmVzcyBhcmd1bWVudCB0byBhdG9taWMgYnVpbHRpbgorbXVzdCBiZSBhIHBvaW50ZXIgdG8gaW50ZWdlciBvciBwb2ludGVyICgndm9pZCAqJyBpbnZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisKK0ZpeGVkIGFsbCBpbnN0YW5jZXMgdGh1c2x5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyB1cmN1L3VhdG9taWMvZ2VuZXJpYy5oIHwgNDAgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VyY3UvdWF0b21pYy9nZW5lcmljLmggYi91cmN1L3VhdG9taWMvZ2VuZXJpYy5oCitpbmRleCAzN2Y1OWNjLi4wMDQ2ZmZkIDEwMDY0NAorLS0tIGEvdXJjdS91YXRvbWljL2dlbmVyaWMuaAorKysrIGIvdXJjdS91YXRvbWljL2dlbmVyaWMuaAorQEAgLTY1LDE3ICs2NSwxNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2NtcHhjaGcodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBvbGQsCisgCXN3aXRjaCAobGVuKSB7CisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCisgCWNhc2UgMToKKy0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMShhZGRyLCBvbGQsIF9uZXcpOworKwkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgb2xkLCBfbmV3KTsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMihhZGRyLCBvbGQsIF9uZXcpOworKwkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCBvbGQsIF9uZXcpOworICNlbmRpZgorIAljYXNlIDQ6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzQoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfNCgodW5zaWduZWQgaW50ICopYWRkciwgb2xkLCBfbmV3KTsKKyAjaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQorIAljYXNlIDg6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzgoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2VuZGlmCisgCX0KKyAJX3VhdG9taWNfbGlua19lcnJvcigpOworQEAgLTEwMCwyMCArMTAwLDIwIEBAIHZvaWQgX3VhdG9taWNfYW5kKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8xKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzIoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfOChhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCX0KK0BAIC0xMzksMjAgKzEzOSwyMCBAQCB2b2lkIF91YXRvbWljX29yKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzEoYWRkciwgdmFsKTsKKysJCV9fc3luY19vcl9hbmRfZmV0Y2hfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzIoYWRkciwgdmFsKTsKKysJCV9fc3luY19vcl9hbmRfZmV0Y2hfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF84KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAl9CitAQCAtMTgwLDE3ICsxODAsMTcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19hZGRfcmV0dXJuKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMShhZGRyLCB2YWwpOworKwkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCB2YWwpOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzIoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCB2YWwpOworICNlbmRpZgorIAljYXNlIDQ6CistCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworKwkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIHZhbCk7CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzgoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAJfQorIAlfdWF0b21pY19saW5rX2Vycm9yKCk7CitAQCAtMjE4LDcgKzIxOCw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBjaGFyICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8xKGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yMzAsNyArMjMwLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIHNob3J0ICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yKGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorQEAgLTI0MSw3ICsyNDEsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgaW50ICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF80KGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorQEAgLTI1Miw3ICsyNTIsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgbG9uZyAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfOChhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWE3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gN2IzZGYxMDAzNDYxMjhkNzgwZjIxOGI4ODFkNTYzZDFmZDEyZTMxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjAgT2N0IDIwMTQgMTM6NDY6MTAgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJCbGFja2xpc3QgQVJNIGdjYyA0LjguMCwgNC44LjEsIDQuOC4yIgorCitUaGlzIHJldmVydHMgY29tbWl0IDRiNzkzMTBhYTNkNDA4YmEzMGZlZTAyY2M0OTdhNjgwNzJkMzhhOTkuCitPRS1Db3JlIGlzIHVzaW5nIGEgcGF0Y2hlZCBHQ0MgNC44LjIgd2hpY2ggaXMgYWJsZSB0byBjb21waWxlIGxpYnVyY3UKK3Byb3Blcmx5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CistLS0KKyB1cmN1L2NvbXBpbGVyLmggfCAxOSAtLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXJjdS9jb21waWxlci5oIGIvdXJjdS9jb21waWxlci5oCitpbmRleCAxZTMwOTAzLi4xOTUzNGYwIDEwMDY0NAorLS0tIGEvdXJjdS9jb21waWxlci5oCisrKysgYi91cmN1L2NvbXBpbGVyLmgKK0BAIC0xMDgsMjMgKzEwOCw0IEBACisgCisgI2RlZmluZSBDQUFfQVJSQVlfU0laRSh4KQkoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisgCistLyoKKy0gKiBEb24ndCBhbGxvdyBjb21waWxpbmcgd2l0aCBidWdneSBjb21waWxlci4KKy0gKi8KKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBVUkNVX0dDQ19WRVJTSU9OCShfX0dOVUNfXyAqIDEwMDAwIFwKKy0JCQkJKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCBcCistCQkJCSsgX19HTlVDX1BBVENITEVWRUxfXykKKy0KKy0vKgorLSAqIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTg4NTQKKy0gKi8KKy0jIGlmZGVmIF9fQVJNRUxfXworLSMgIGlmIFVSQ1VfR0NDX1ZFUlNJT04gPj0gNDA4MDAgJiYgVVJDVV9HQ0NfVkVSU0lPTiA8PSA0MDgwMgorLSMgICBlcnJvciBZb3VyIGdjYyB2ZXJzaW9uIHByb2R1Y2VzIGNsb2JiZXJlZCBmcmFtZSBhY2Nlc3NlcworLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorICNlbmRpZiAvKiBfVVJDVV9DT01QSUxFUl9IICovCistLSAKKzIuMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L2FhcmNoNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjYzhjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2xpYnVjcnU6IHJlY29nbml6ZSBhYXJjaDY0CisKK01ha2UgdGhlIHNhbWUgYXMgImFybSIgaW50ZXJuYWxseS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbQorCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzcsNiArNzcsNyBAQCBBU19DQVNFKFskaG9zdF9jcHVdLAorIAlbYWxwaGEqXSwgW0FSQ0hUWVBFPSJhbHBoYSJdLAorIAlbaWE2NF0sIFtBUkNIVFlQRT0iZ2NjIl0sCisgCVthcm0qXSwgW0FSQ0hUWVBFPSJhcm0iXSwKKysJW2FhcmNoNjRdLCBbQVJDSFRZUEU9ImFybSJdLAorIAlbbWlwcypdLCBbQVJDSFRZUEU9Im1pcHMiXSwKKyAJW3RpbGUqXSwgW0FSQ0hUWVBFPSJnY2MiXSwKKyAJW0FSQ0hUWVBFPSJ1bmtub3duIl0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y0ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOC43LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIFJDVSAocmVhZC1jb3B5LXVwZGF0ZSkgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHRuZy5vcmcvdXJjdSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2x0dG5nLm9yZy9wcm9qZWN0L2lzc3VlcyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wZjA2MGMzMGEyNzkyMmNlOWMwZDU1N2E2MzliNGZhMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91cmN1Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMjttZDU9NGRlMGQ2OGQzYTk5NzY0MzcxNTAzNmQyMjA5YWUxZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS91YXRvbWljL3g4Ni5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjE7bWQ1PTIyMDU1MmY3MmM1NWIxMDJmMmVlMzU5Mjk3MzRlZjQyIgorCitTUkNfVVJJID0gImh0dHA6Ly9sdHRuZy5vcmcvZmlsZXMvdXJjdS91c2Vyc3BhY2UtcmN1LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11YXRvbWljLVNwZWNpZnktY29tcGxldGUtdHlwZXMtZm9yLWF0b21pYy1mdW5jdGlvbi1jLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YTZlZTE3ODcxZDMxMjI2ZGIzZjYxOGUyODM1MWQyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTIzZjIyYzQ3MjZjYTZiYjc3YTc3ZDI1OGU3NmQ4YzMzYzg5NzI0NDMzYmQ2NTMxMzAyNGI5OGU1NWM0Mjk1IgorCitTID0gIiR7V09SS0RJUn0vdXNlcnNwYWNlLXJjdS0ke1BWfSIKK0NGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EX0dOVV9TT1VSQ0UiCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODQ0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdC8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzNDBmOTExZjllM2Y0ZmY2YjAxNjgyYzUzNDFjOTU5MDYwNzgyYWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMiBBcHIgMjAxNSAxOToxODo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2IuaDogSW5jbHVkZSBzeXMvdHlwZXMuaAorCitXZSBuZWVkIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgdV9pbnRYX3QKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJ1c2IvdXNiLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlidXNiL3VzYi5oIGIvbGlidXNiL3VzYi5oCitpbmRleCA4NGU3MzBmLi5jYWZmYWUyIDEwMDY0NAorLS0tIGEvbGlidXNiL3VzYi5oCisrKysgYi9saWJ1c2IvdXNiLmgKK0BAIC0zMSw2ICszMSw4IEBACisgCisgI2luY2x1ZGUgPGRpcmVudC5oPgorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKyAvKgorICAqIFVTQiBzcGVjIGluZm9ybWF0aW9uCisgICoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdF8wLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY4NzJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJsaWJ1c2ItMC4xIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIGxpYnVzYjEiCitERVNDUklQVElPTiA9ICJsaWJ1c2ItMC4xIGNvbXBhdGlibGUgbGF5ZXIgZm9yIGxpYnVzYjEsIGEgZHJvcC1pbiByZXBsYWNlbWVudCBcCit0aGF0IGFpbXMgdG8gbG9vaywgZmVlbCBhbmQgYmVoYXZlIGV4YWN0bHkgbGlrZSBsaWJ1c2ItMC4xIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnL3JlcG9ydCIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mMmFjNWYzYWM0ODM1ZThmOTEzMjRhMjZhNTkwYTQyMyIKK0RFUEVORFMgPSAibGlidXNiMSIKKworIyBGZXcgcGFja2FnZXMgYXJlIGtub3duIG5vdCB0byB3b3JrIHdpdGggbGlidXNiLWNvbXBhdCAoZS5nLiBsaWJtdHAtMS4wLjApLAorIyBzbyBoZXJlIGxpYnVzYi0wLjEgaXMgcmVtb3ZlZCBjb21wbGV0ZWx5IGluc3RlYWQgb2YgYWRkaW5nIHZpcnR1YWwvbGlidXNiMC4KKyMgQmVzaWRlcywgbGlidXNiLTAuMSB1c2VzIGEgcGVyIDFtcyBwb2xsaW5nIHRoYXQgaHVydHMgYSBsb3QgdG8gcG93ZXIKKyMgY29uc3VtcHRpb24uCitQUk9WSURFUyA9ICJsaWJ1c2IgdmlydHVhbC9saWJ1c2IwIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ1c2IvbGlidXNiLWNvbXBhdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXNiLmgtSW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjc4MGI2YTc1OGExZTJjMjk0M2JkYmY3ZmFmNzQwZTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDA0ZWY0YjZiMzI0YmU3OWFjMWJmYjNkODM5ZWFjODYwZmJjOTI5ZTZhY2IxZWY4ODc5M2E2ZWEzMjhiYzU1YSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJ1c2ItY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwZTFmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2IxXzEuMC4xOS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBsaWJyYXJ5IHRvIGFjY2VzcyBVU0IgKHZlcnNpb24gMS4wKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJ1c2Iuc2YubmV0IgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LmxpYnVzYi5vcmcvcmVwb3J0IgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnVzYi9saWJ1c2ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjllMmJiNTg3OTk2ODQ2N2U1Y2E3NTZjYjRlMWZhN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmM1MDJjODE2MDAyZjkwZDRmNzYwNTBhNjQyOWMzYTdlMGQ4NDIwNDIyMmNiZmYyZGNlOTVkZDc3M2JhNjg0MCIKKworUyA9ICIke1dPUktESVJ9L2xpYnVzYi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgRG9uJ3QgY29uZmlndXJlIHVkZXYgYnkgZGVmYXVsdCBzaW5jZSBpdCB3aWxsIGNhdXNlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZWN5IHdpdGggdWRldiBwYWNrYWdlLCB3aGljaCBkZXBlbmRzIG9uIGxpYnVzYgorRVhUUkFfT0VDT05GID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tZGlzYWJsZS11ZGV2IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9CisJZmkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28uKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvICR7YmFzZV9saWJkaXJ9LyoubGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQxNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDExOCBAQAorVXNlIHBrZy1jb25maWcgdG8gZmluZCBnY3J5cHQgYW5kIGxpYnhtbDIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbbGlieG1sMiBpcyB1cHN0cmVhbWFibGVdCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGlieHNsdC0xLjEuMjgvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieHNsdC0xLjEuMjgub3JpZy9jb25maWd1cmUuaW4JMjAxNC0wNS0xMyAxNjo0NjowMi4yNzg0NzQ5NjcgKzAwMDAKKysrKyBsaWJ4c2x0LTEuMS4yOC9jb25maWd1cmUuaW4JMjAxNC0wNS0xMyAxNjo1Mzo1Ni41MTA0NzI1NjEgKzAwMDAKK0BAIC0zNzYsNiArMzc2LDggQEAKKyBBQ19TVUJTVChQWVRIT05fU1VCRElSKQorIEFDX1NVQlNUKFBZVEhPTl9MSUJTKQorIAorK1BLR19QUk9HX1BLR19DT05GSUcKKysKKyBBQ19BUkdfV0lUSChjcnlwdG8sIFsgIC0td2l0aC1jcnlwdG8gICAgICAgICAgIEFkZCBjcnlwdG8gc3VwcG9ydCB0byBleHNsdCAob24pXSkKKyBXSVRIX0NSWVBUTz0wCisgaWYgdGVzdCAiJHdpdGhfY3J5cHRvIiA9ICJubyIgOyB0aGVuCitAQCAtMzkxLDI2ICszOTMsMTMgQEAKKyAgICAgV0lUSF9DUllQVE89MQorICAgICA7OworICAgKikKKy0gICAgQUNfUEFUSF9QUk9HKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQorLSAgICBpZiB0ZXN0ICIkTElCR0NSWVBUX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgICBMSUJHQ1JZUFRfVkVSU0lPTj1gJExJQkdDUllQVF9DT05GSUcgLS12ZXJzaW9uYAorLSAgICAgIGlmIHRlc3QgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCR0NSWVBUX1ZFUlNJT04pIC1sdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICIxLjEuNDIiKQorLSAgICAgIHRoZW4KKy0gICAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgICAgIExJQkdDUllQVF9MSUJTPSIiCistICAgICAgICBlY2hvICdnY3J5cHQgbGlicmFyeSB2ZXJzaW9uIDwgMS4xLjQyIC0gQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLicKKy0gICAgICBlbHNlCistICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICAgICAgTElCR0NSWVBUX0xJQlM9YCRMSUJHQ1JZUFRfQ09ORklHICRsaWJnY3J5cHRfY29uZmlnX2FyZ3MgLS1saWJzYAorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQorLSAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUuJworKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHQ1JZUFQsIFtsaWJnY3J5cHQgPj0gMS4xLjQyXSwgWworKyAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HQ1JZUFQsIDEsIFtEZWZpbmUgaWYgZ2NyeXB0IGxpYnJhcnkgaXMgYXZhaWxhYmxlLl0pCisrICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKKyAJCVdJVEhfQ1JZUFRPPTEKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgorLSAgICAgIExJQkdDUllQVF9MSUJTPSIiCistICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiBJbnN0YWxsIGxpYmdjcnlwdCBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworLSAgICBmaQorKwldLCBbCisrICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgPj0gMS4xLjQyIGFuZCByZWNvbmZpZ3VyZSB0byBtYWtlIGF2YWlsYWJsZS4nCisrICAgICAgICBdKQorIGVzYWMKKyBmaQorIEFDX1NVQlNUKFdJVEhfQ1JZUFRPKQorQEAgLTQ3MSwyNCArNDYwLDggQEAKKyBkbmwgc29tZSB0d2Vha2luZyAtIERhdmlkIEjDpHJkZW1hbiAzMC8xMC8yMDAxCisgZG5sCisgCistTElCWE1MX0NPTkZJR19QUkVGSVg9IiIKKyBMSUJYTUxfU1JDPSIiCisgCistQUNfQVJHX1dJVEgobGlieG1sLXByZWZpeCwKKy0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtcHJlZml4PVtQRlhdCQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBjb25maWddLAorLQlMSUJYTUxfQ09ORklHX1BSRUZJWD0kd2l0aHZhbAorLSkKKy0gICAgICAgIAorLUFDX0FSR19XSVRIKGxpYnhtbC1pbmNsdWRlLXByZWZpeCwKKy0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtaW5jbHVkZS1wcmVmaXg9W1BGWF0JU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgaGVhZGVyc10sCistICAgICAgICBMSUJYTUxfQ0ZMQUdTPSItSSR3aXRodmFsIgorLSkKKy0KKy1BQ19BUkdfV0lUSChsaWJ4bWwtbGlicy1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLWxpYnMtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGxpYnNdLAorLSAgICAgICAgTElCWE1MX0xJQlM9Ii1MJHdpdGh2YWwiCistKQorLQorIEFDX0FSR19XSVRIKGxpYnhtbC1zcmMsCisgCVsgIC0td2l0aC1saWJ4bWwtc3JjPVtESVJdICAgICAgICAgICAgICBGb3IgbGlieG1sIHRoYXRzIG5vdCBpbnN0YWxsZWQgeWV0IChzZXRzIGFsbCB0aHJlZSBhYm92ZSldLAorIAlMSUJYTUxfU1JDPSIkd2l0aHZhbCIKK0BAIC01NTEsMjggKzUyNCw5IEBACisgCWZpCisgZmkKKyAKKy1kbmwKKy1kbmwgbWFrZSBzdXJlIHhtbDItY29uZmlnIGlzIGV4ZWN1dGFibGUsCistZG5sIHRlc3QgdmVyc2lvbiBhbmQgaW5pdCBvdXIgdmFyaWFibGVzCistZG5sCistCistaWYgJHtYTUxfQ09ORklHfSAtLWxpYnMgcHJpbnQgPiAvZGV2L251bGwgMj4mMQorLXRoZW4KKy0JWE1MVkVSUz1gJFhNTF9DT05GSUcgLS12ZXJzaW9uYAorLQlpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJFhNTFZFUlMpIC1nZSBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTikKKy0JdGhlbgorLQkJQUNfTVNHX1JFU1VMVCgkWE1MVkVSUyBmb3VuZCkKKy0JZWxzZQorLQkJQUNfTVNHX0VSUk9SKFZlcnNpb24gJFhNTFZFUlMgZm91bmQuIFlvdSBuZWVkIGF0IGxlYXN0IGxpYnhtbDIgJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OIGZvciB0aGlzIHZlcnNpb24gb2YgbGlieHNsdCkKKy0JZmkKKy0JTElCWE1MX0xJQlM9IiRMSUJYTUxfTElCUyBgJFhNTF9DT05GSUcgLS1saWJzYCIKKy0JaWYgdGVzdCAieCRMSUJYTUxfU1JDIiA9ICJ4IjsgdGhlbgorLQkJTElCWE1MX0NGTEFHUz0iJExJQlhNTF9DRkxBR1MgYCRYTUxfQ09ORklHIC0tY2ZsYWdzYCIKKy0JZmkKKy1lbHNlCistCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sMiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pCistZmkKKy0KKytQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJYTUwsIFtsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTl0sLAorKyAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pXQorKykKKyAKKyBBQ19TVUJTVChDRkxBR1MpCisgQUNfU1VCU1QoQ1BQRkxBR1MpCitAQCAtNTk3LDcgKzU1MSw3IEBACisgCisgaWYgdGVzdCAiJHdpdGhfcGx1Z2lucyIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX01TR19DSEVDS0lORyhbbGlieG1sMiBtb2R1bGUgc3VwcG9ydF0pCistICBXSVRIX01PRFVMRVM9ImAkWE1MX0NPTkZJRyAtLW1vZHVsZXNgIgorKyAgV0lUSF9NT0RVTEVTPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1tb2R1bGVzIGxpYnhtbC0yLjBgIgorICAgaWYgdGVzdCAiJHtXSVRIX01PRFVMRVN9IiA9ICIxIjsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODAxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYnhzbHQtMS4xLjI3L2xpYmV4c2x0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieHNsdC0xLjEuMjcub3JpZy9saWJleHNsdC5wYy5pbgorKysrIGxpYnhzbHQtMS4xLjI3L2xpYmV4c2x0LnBjLmluCitAQCAtOCw1ICs4LDUgQEAgTmFtZTogbGliZXhzbHQKKyBWZXJzaW9uOiBATElCRVhTTFRfVkVSU0lPTkAKKyBEZXNjcmlwdGlvbjogRVhTTFQgRXh0ZW5zaW9uIGxpYnJhcnkKKyBSZXF1aXJlczogbGlieG1sLTIuMAorLUxpYnM6IEBFWFNMVF9MSUJESVJAIEBFWFNMVF9MSUJTQAorK0xpYnM6IC1sZXhzbHQgQEVYU0xUX0xJQkRJUkAgQEVYU0xUX0xJQlNACisgQ2ZsYWdzOiBARVhTTFRfSU5DTFVERURJUkAKK0luZGV4OiBsaWJ4c2x0LTEuMS4yNy9saWJ4c2x0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieHNsdC0xLjEuMjcub3JpZy9saWJ4c2x0LnBjLmluCisrKysgbGlieHNsdC0xLjEuMjcvbGlieHNsdC5wYy5pbgorQEAgLTgsNSArOCw1IEBAIE5hbWU6IGxpYnhzbHQKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKyBEZXNjcmlwdGlvbjogWFNMVCBsaWJyYXJ5IHZlcnNpb24gMi4KKyBSZXF1aXJlczogbGlieG1sLTIuMAorLUxpYnM6IEBYU0xUX0xJQkRJUkAgQFhTTFRfTElCU0AgQEVYVFJBX0xJQlNACisrTGliczogLWx4c2x0IEBYU0xUX0xJQkRJUkAgQFhTTFRfTElCU0AgQEVYVFJBX0xJQlNACisgQ2ZsYWdzOiBAWFNMVF9JTkNMVURFRElSQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2YmNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJHTk9NRSBYU0xUIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8veG1sc29mdC5vcmcvWFNMVC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQ7bWQ1PTBjZDlhMDdhZmJlYjI0MDI2YzliMDNhZWNmZWJhNDU4IgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYnhtbDIiCisKK1NSQ19VUkkgPSAiZnRwOi8veG1sc29mdC5vcmcvbGlieHNsdC8vbGlieHNsdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NjY3YmY2ZjkzMTBiOTU3MjU0ZmRjZjY1OTY2MDBiNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmM3MTUxYTU3Yjg5YzAzZDdiODI1ZGY1YTBmYWUwYThkNWYwNTY3NGMwZTdjZjI5MzdlY2VjNGQ1NGEwMjhjIgorUyA9ICIke1dPUktESVJ9L2xpYnhzbHQtJHtQVn0iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veHNsdC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbGliX3BhY2thZ2UKKworIyBXZSBkb24ndCBERVBFTkQgb24gYmludXRpbHMgZm9yIGFuc2lkZWNsLmggc28gZW5zdXJlIHdlIGRvbid0IHVzZSB0aGUgaGVhZGVyCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pIC1lICdzL2Fuc2lkZWNsLmgvLycgJHtTfS9jb25maWd1cmUuaW4KKworCSMgVGhlIHRpbWVzdGFtcHMgaW4gdGhlIDEuMS4yOCB0YXJiYWxsIGFyZSBtZXNzZWQgdXAgY2F1c2luZyB0aGlzIGZpbGUgdG8KKwkjIGFwcGVhciBvdXQgb2YgZGF0ZS4gIFRvdWNoIGl0IHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHJlZ2VuZXJhdGUgaXQuCisJdG91Y2ggJHtTfS9kb2MveHNsdHByb2MuMQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXB5dGhvbiAtLXdpdGhvdXQtZGVidWcgLS13aXRob3V0LW1lbS1kZWJ1ZyAtLXdpdGhvdXQtY3J5cHRvIgorIyBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIHJlY2lwZSBoYWQgJHtQTn0tdXRpbHMKK1JQUk9WSURFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorUkNPTkZMSUNUU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorUlJFUExBQ0VTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCisKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS94c2x0cHJvYyBYTUxfQ0FUQUxPR19GSUxFUz0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2xpYnhzbHQtcGx1Z2lucyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3hzbHRDb25mLnNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvZmlsZXMvbGlieWFtbC1DVkUtMjAxNC05MTMwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGEwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEtpcmlsbCBTaW1vbm92IDx4aUByZXNvbHZlbnQubmV0PgorIyBEYXRlIDE0MTcxOTczMTIgMjE2MDAKKyMgTm9kZSBJRCAyYjkxNTY3NTY0MjNlOTY3Y2ZkMDlhNjFkMTI1ZDg4M2ZjYTZmNGYyCisjIFBhcmVudCAgMDUzZjUzYTM4MWZmNmFkYmJjOTNhMzFhYjdmZGVlMDZhMTZjOGEzMworUmVtb3ZlZCBpbnZhbGlkIHNpbXBsZSBrZXkgYXNzZXJ0aW9uICh0aGFuayB0byBKb25hdGhhbiBHcmF5KS4KKworVGhlIHBhdGNoIGNvbWVzIGZyb20gCisKK2h0dHBzOi8vYml0YnVja2V0Lm9yZy94aS9saWJ5YW1sL2NvbW1pdHMvMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKworZGlmZiAtciAwNTNmNTNhMzgxZmYgLXIgMmI5MTU2NzU2NDIzIHNyYy9zY2FubmVyLmMKKy0tLSBhL3NyYy9zY2FubmVyLmMJV2VkIE1hciAyNiAxMzo1NTo1NCAyMDE0IC0wNTAwCisrKysgYi9zcmMvc2Nhbm5lci5jCUZyaSBOb3YgMjggMTE6NTU6MTIgMjAxNCAtMDYwMAorQEAgLTExMDYsMTMgKzExMDYsNiBAQAorICAgICAgICAgICAgICYmIHBhcnNlci0+aW5kZW50ID09IChwdHJkaWZmX3QpcGFyc2VyLT5tYXJrLmNvbHVtbik7CisgCisgICAgIC8qCistICAgICAqIEEgc2ltcGxlIGtleSBpcyByZXF1aXJlZCBvbmx5IHdoZW4gaXQgaXMgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBjdXJyZW50CistICAgICAqIGxpbmUuICBUaGVyZWZvcmUgaXQgaXMgYWx3YXlzIGFsbG93ZWQuICBCdXQgd2UgYWRkIGEgY2hlY2sgYW55d2F5LgorLSAgICAgKi8KKy0KKy0gICAgYXNzZXJ0KHBhcnNlci0+c2ltcGxlX2tleV9hbGxvd2VkIHx8ICFyZXF1aXJlZCk7ICAgIC8qIEltcG9zc2libGUuICovCistCistICAgIC8qCisgICAgICAqIElmIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1heSBzdGFydCBhIHNpbXBsZSBrZXksIHNhdmUgaXQuCisgICAgICAqLworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTU1NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjYuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaWJZQU1MIGlzIGEgWUFNTCAxLjEgcGFyc2VyIGFuZCBlbWl0dGVyIHdyaXR0ZW4gaW4gQy4iCitERVNDUklQVElPTiA9ICJMaWJZQU1MIGlzIGEgQyBsaWJyYXJ5IGZvciBwYXJzaW5nIGFuZCBlbWl0dGluZyBkYXRhIGluIFlBTUwgMS4xLCBcCithIGh1bWFuLXJlYWRhYmxlIGRhdGEgc2VyaWFsaXphdGlvbiBmb3JtYXQuICIKK0hPTUVQQUdFID0gImh0dHA6Ly9weXlhbWwub3JnL3dpa2kvTGliWUFNTCIKK1NFQ1RJT04gPSAibGlicy9kZXZlbCIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02MDE1ZjA4ODc1OWIxMGUwYmMyYmY2NDg5OGQ0YWUxNyIKKworU1JDX1VSSSA9ICJodHRwOi8vcHl5YW1sLm9yZy9kb3dubG9hZC9saWJ5YW1sL3lhbWwtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWZlMDBjZGExOGNhNWRhZWI0Mzc2MmI4MGMzOGUwNmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RhNjk3MWI0YmQwOGE5ODZkZDJhNjEzNTNiYzQyMjM2MmJkMGVkY2M2N2Q3ZWJhYWM2OGM5NWY3NDE4Mjc0OSIKKworUyA9ICIke1dPUktESVJ9L3lhbWwtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNTZkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJFeHRyZW1lbHkgRmFzdCBDb21wcmVzc2lvbiBhbGdvcml0aG0iCitERVNDUklQVElPTiA9ICJMWjQgaXMgYSB2ZXJ5IGZhc3QgbG9zc2xlc3MgY29tcHJlc3Npb24gYWxnb3JpdGhtLCBwcm92aWRpbmcgY29tcHJlc3Npb24gc3BlZWQgYXQgNDAwIE1CL3MgcGVyIGNvcmUsIHNjYWxhYmxlIHdpdGggbXVsdGktY29yZXMgQ1BVLiBJdCBhbHNvIGZlYXR1cmVzIGFuIGV4dHJlbWVseSBmYXN0IGRlY29kZXIsIHdpdGggc3BlZWQgaW4gbXVsdGlwbGUgR0IvcyBwZXIgY29yZSwgdHlwaWNhbGx5IHJlYWNoaW5nIFJBTSBzcGVlZCBsaW1pdHMgb24gbXVsdGktY29yZSBzeXN0ZW1zLiIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWIvTElDRU5TRTttZDU9MGIwZDA2M2YzN2E0NDc3YjU0YWYyNDU5NDc3ZGNhZmQiCisKK1NSQ1JFViA9ICJkODZkYzkxNjc3MWMxMjZhZmI3OTc2MzdkZGE5ZjY0MjFjMGNiOTk4IgorCitQViA9ICIxMzErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9DeWFuNDk3My9sejQuZ2l0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRU1BS0UgPSAiUFJFRklYPSR7cHJlZml4fSBDQz0nJHtDQ30nIERFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfSIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiM2E3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb206IFNpbW9uIE1jVml0dGllIDxzbWN2QGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDIzIE5vdiAyMDE0IDIyOjUwOjMzICswMDAwCitTdWJqZWN0OiBVc2UgbWVtY3B5KCkgaW5zdGVhZCBvZiByZWludmVudGluZyBpdAorCitnY2MgaW5saW5lcyBtZW1jcHkoKSB3aXRoIHJlc3VsdHMgYXMgZmFzdCBhcyBoYW5kd3JpdHRlbiBjb2RlIChhdAorbGVhc3QgaW4gbXkgYnJpZWYgdGVzdGluZyB3aXRoIGx6b3ApLCBhbmQga25vd3MgdGhlIGFsaWdubWVudAorY29uc3RyYWludHMgZm9yIG91ciBhcmNoaXRlY3R1cmVzLgorCitDaGFuZ2Ugc3VnZ2VzdGVkIGJ5IEp1bGlhbiBUYXlsb3IuCisKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzU3MDM3CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorLS0tCisgbWluaWx6by9taW5pbHpvLmMgfCAxNCArKysrKysrKysrKysrKworIHNyYy9sem9fZnVuYy5oICAgIHwgMTQgKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKykKKworCitkaWZmIC0tZ2l0IGEvbWluaWx6by9taW5pbHpvLmMgYi9taW5pbHpvL21pbmlsem8uYworaW5kZXggYWIyYmU1Zi4uNjkxM2MyZiAxMDA2NDQKKy0tLSBhL21pbmlsem8vbWluaWx6by5jCisrKysgYi9taW5pbHpvL21pbmlsem8uYworQEAgLTM1MjMsNiArMzUyMywyMCBAQCBMWk9fQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoc2l6ZW9mKCoobHpvX21lbW9wc19UVThwKTApPT04KQorICAgICBpZiAoKHZvaWQpMCwgbl9fbiA+IDApIGRvIHsgKmRfX24rKyA9ICpzX19uKys7IH0gd2hpbGUgKC0tbl9fbiA+IDApOyBcCisgICAgIExaT19CTE9DS19FTkQKKyAKKysvKiBEZWJpYW4tc3BlY2lmaWMgY2hhbmdlOiB3ZSBrbm93IHRoYXQgb3VyIGNvbXBpbGVyIGlubGluZXMgbWVtY3B5KCkgd2l0aAorKyAqIGNvbnN0YW50IG4gdG8gYmUgYXMgZmFzdCBhcyBoYW5kd3JpdHRlbiBjb2RlLCBhbmQga25vd3Mgd2hpY2ggYXJjaGl0ZWN0dXJlcworKyAqIG5lZWQgdGhpbmdzIGNvcnJlY3RseSBhbGlnbmVkLiAqLworKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkxCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTIKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZNAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk4CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWU4KKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTEoZGQsc3MpIG1lbWNweShkZCwgc3MsIDEpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkyKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAyKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZNChkZCxzcykgbWVtY3B5KGRkLCBzcywgNCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTgoZGQsc3MpIG1lbWNweShkZCwgc3MsIDgpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFlOKGRkLHNzLG5uKSBtZW1jcHkoZGQsIHNzLCBubikKKysKKyBfX2x6b19zdGF0aWNfZm9yY2VpbmxpbmUgbHpvX3VpbnQxNl90IGx6b19tZW1vcHNfZ2V0X2xlMTYoY29uc3QgbHpvX3ZvaWRwIHNzKQorIHsKKyAgICAgbHpvX3VpbnQxNl90IHY7CitkaWZmIC0tZ2l0IGEvc3JjL2x6b19mdW5jLmggYi9zcmMvbHpvX2Z1bmMuaAoraW5kZXggZGZhYTY3Ni4uMWNjMWI1MyAxMDA2NDQKKy0tLSBhL3NyYy9sem9fZnVuYy5oCisrKysgYi9zcmMvbHpvX2Z1bmMuaAorQEAgLTMzMyw2ICszMzMsMjAgQEAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZigqKGx6b19tZW1vcHNfVFU4cCkwKT09OCkKKyAgICAgaWYgKCh2b2lkKTAsIG5fX24gPiAwKSBkbyB7ICpkX19uKysgPSAqc19fbisrOyB9IHdoaWxlICgtLW5fX24gPiAwKTsgXAorICAgICBMWk9fQkxPQ0tfRU5ECisgCisrLyogRGViaWFuLXNwZWNpZmljIGNoYW5nZTogd2Uga25vdyB0aGF0IG91ciBjb21waWxlciBpbmxpbmVzIG1lbWNweSgpIHdpdGgKKysgKiBjb25zdGFudCBuIHRvIGJlIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSwgYW5kIGtub3dzIHdoaWNoIGFyY2hpdGVjdHVyZXMKKysgKiBuZWVkIHRoaW5ncyBjb3JyZWN0bHkgYWxpZ25lZC4gKi8KKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMQorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkyCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTQKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZOAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFlOCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkxKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAxKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMihkZCxzcykgbWVtY3B5KGRkLCBzcywgMikKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTQoZGQsc3MpIG1lbWNweShkZCwgc3MsIDQpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk4KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA4KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZTihkZCxzcyxubikgbWVtY3B5KGRkLCBzcywgbm4pCisrCisgX19sem9fc3RhdGljX2ZvcmNlaW5saW5lIGx6b191aW50MTZfdCBsem9fbWVtb3BzX2dldF9sZTE2KGNvbnN0IGx6b192b2lkcCBzcykKKyB7CisgICAgIGx6b191aW50MTZfdCB2OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQyY2NkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwzNTggQEAKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShBQ0NfQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoQUNDX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19IRUFERVJTXSwgWworQUNfSEVBREVSX1RJTUUKK0FDX0NIRUNLX0hFQURFUlMoW2Fzc2VydC5oIGN0eXBlLmggZGlyZW50LmggZXJybm8uaCBmY250bC5oIGZsb2F0LmggbGltaXRzLmggbWFsbG9jLmggbWVtb3J5Lmggc2V0am1wLmggc2lnbmFsLmggc3RkYXJnLmggc3RkZGVmLmggc3RkaW50Lmggc3RkaW8uaCBzdGRsaWIuaCBzdHJpbmcuaCBzdHJpbmdzLmggdGltZS5oIHVuaXN0ZC5oIHV0aW1lLmggc3lzL3N0YXQuaCBzeXMvdGltZS5oIHN5cy90eXBlcy5oIHN5cy93YWl0LmhdKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0ZVTkNTXSwgWworQUNfQ0hFQ0tfRlVOQ1MoYWNjZXNzIGFsbG9jYSBhdGV4aXQgYXRvaSBhdG9sIGNobW9kIGNob3duIGN0aW1lIGRpZmZ0aW1lIGZzdGF0IGdldHRpbWVvZmRheSBnbXRpbWUgbG9jYWx0aW1lIGxvbmdqbXAgbHN0YXQgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXNldCBta3RpbWUgcXNvcnQgcmFpc2Ugc2V0am1wIHNpZ25hbCBzbnByaW50ZiBzdHJjYXNlY21wIHN0cmNociBzdHJkdXAgc3RyZXJyb3Igc3RyZnRpbWUgc3RyaWNtcCBzdHJuY2FzZWNtcCBzdHJuaWNtcCBzdHJyY2hyIHN0cnN0ciB0aW1lIHVtYXNrIHV0aW1lIHZzbnByaW50ZikKK10pIworCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKKworQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihfX2ludDE2KQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoX19pbnQ2NCkKKworQUNfQ0hFQ0tfU0laRU9GKHZvaWQgKikKK0FDX0NIRUNLX1NJWkVPRihzaXplX3QpCitBQ19DSEVDS19TSVpFT0YocHRyZGlmZl90KQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjaW5jbHVkZSAiYWNjL2FjYy5oIgorI2luY2x1ZGUgImFjYy9hY2NfaW5jZC5oIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorfQorI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgYXNzZXJ0KGV4cHIpOworI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X0FDQ19BQ0NDSEsKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9NSU5JQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNEX0ggMQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNpbmNsdWRlICQyCit9CisKKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBhc3NlcnQoZXhwcik7CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2luY2x1ZGUgJDIKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X01JTklBQ0NfQUNDQ0hLCisKKworCisjIHNlcmlhbCAxCisKK0FDX0RFRlVOKFttZnhfUFJPR19DUFBGTEFHU10sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgQyBwcmVwcm9jZXNzb3IgbmVlZHMgc3BlY2lhbCBmbGFnc10pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMSIKKyNlbGlmICgweGZmZmZ1ID09IDB4ZmZmZmZmZmZ1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDIiCisjZWxpZiAoMzI3NjcgPj0gVUxPTkdfTUFYKSB8fCAoNjU1MzV1ID49IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKK11dLCBbWyBdXQorKV0pCisKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworbWZ4X3RtcD1FUlJPUgorZm9yIG1meF9hcmcgaW4gIiIgLW5vLWNwcC1wcmVjb21wCitkbworICBDUFBGTEFHUz0iJG1meF9hcmcgJG1meF9zYXZlX0NQUEZMQUdTIgorICBfQUNfQ09NUElMRV9JRkVMU0UoW10sCitbbWZ4X3RtcD0kbWZ4X2FyZworYnJlYWtdKQorZG9uZQorQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHgpCisgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBuZWVkZWRdKSA7OworICB4RVJST1IpCisgICAgQUNfTVNHX1JFU1VMVChbRVJST1JdKQorICAgIEFDX01TR19FUlJPUihbeW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZ10pCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCisgICAgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKyAgICA7OworZXNhYworXSkjIG1meF9QUk9HX0NQUEZMQUdTCisKKworCisjIHNlcmlhbCAzCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfSEVBREVSX1NBTkVfTElNSVRTX0hdLCBbCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lXSwKK21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19HTlVDX18pCisjICAgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSB1c2UgY29tcGlsZXIgb3B0aW9uIC1uby1jcHAtcHJlY29tcCIKKyMgIGVsc2UKKyMgICAgaW5jbHVkZSAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIgorIyAgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBNRlhfMHhmZmZmICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNRlhfMHhmZmZmZmZmZkwgICAgIDQyOTQ5NjcyOTV1bAorI2lmICFkZWZpbmVkKENIQVJfQklUKSB8fCAoQ0hBUl9CSVQgIT0gOCkKKyMgIGluY2x1ZGUgImVycm9yIENIQVJfQklUIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUNIQVJfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIElOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKExPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgTE9OR19NQVggMSIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDIiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAyIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAyIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDB4ZmYpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMyIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCBNRlhfMHhmZmZmZmZmZkwpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPiBVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCB2cyBVSU5UX01BWCIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA+IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIHZzIFVMT05HX01BWCIKKyNlbmRpZgorXV0sIFtbCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDIpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDIpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSAyKV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJiWzEgLSAyICogIShzaXplb2YobG9uZykgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDQpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSA0KV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDQpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gNCldOyB9CisjZW5kaWYKK11dKV0sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPXllc10sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPW5vXSldKQorXSkKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gc3RhbmRhcmQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0xaT19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKExaT19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShMWk9fQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkbmwgbW9yZSB0eXBlcyB3aGljaCBhcmUgbm90IHlldCBjb3ZlcmVkIGJ5IEFDQworCitBQ19ERUZVTihbbWZ4X0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRihpbnRwdHJfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50cHRyX3QpCisKK0FDX0NIRUNLX1NJWkVPRihmbG9hdCkKK0FDX0NIRUNLX1NJWkVPRihkb3VibGUpCitBQ19DSEVDS19TSVpFT0YobG9uZyBkb3VibGUpCisKK0FDX0NIRUNLX1NJWkVPRihkZXZfdCkKK0FDX0NIRUNLX1NJWkVPRihmcG9zX3QpCitBQ19DSEVDS19TSVpFT0YobW9kZV90KQorQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorQUNfQ0hFQ0tfU0laRU9GKHNzaXplX3QpCitBQ19DSEVDS19TSVpFT0YodGltZV90KQorXSkjCisKKworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0xJQl9XSU5NTV0sIFsKK2lmIHRlc3QgIlgkR0NDIiA9IFh5ZXM7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgdGVzdCAiWCRMSUJTIiAhPSAiWCIgJiYgTElCUz0iJExJQlMgIgorICAgICBMSUJTPSIke0xJQlN9LWx3aW5tbSIgOzsKKyopCisgICAgIDs7Citlc2FjCitmaQorXSkjCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNzc0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKKy4vbHpvdGVzdCAtbWF2YWlsIC1uMTAgLXEgL2V0Yy9zZXJ2aWNlcworTFpPVEVTVD0uL2x6b3Rlc3QgL2Jpbi9zaCAtZSAiLi9jaGVjay5zaCIgIi9ldGMiCisuL2FsaWduCisuL2Noa3N1bQorLi9zaW1wbGUKKy4vdGVzdG1pbmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc4NjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6b18yLjA5LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiTG9zc2xlc3MgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2x6b19pbml0LmM7YmVnaW5saW5lPTU7ZW5kbGluZT0yNTttZDU9MzU1MDIzODM1YTliOWVlYjcwYWI4OTUzOTVlOTUxZmYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvL2Rvd25sb2FkL2x6by0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM3ZmZjOWExMDNhZmUyZDFiYmEwYjAxNWU3YWE4ODdmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYyOTRhN2NlZDMxMzA2M2MwNTdjNTA0MjU3ZjQzN2M4MzM1YzQxYmZlZWQyMzUzMWVlNGU2YTJiODdiY2IzNGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwljcCAke1N9L3V0aWwvY2hlY2suc2ggJHQKKwljcCAke0J9L21pbmlsem8vdGVzdG1pbmkgJHQKKwlmb3IgaSBpbiB0ZXN0cy9hbGlnbiB0ZXN0cy9jaGtzdW0gbHpvdGVzdC9sem90ZXN0IGV4YW1wbGVzL3NpbXBsZQorCQlkbyBjcCAke0J9L2BkaXJuYW1lICRpYC8ubGlicy9gYmFzZW5hbWUgJGlgICR0OyBcCisJZG9uZQorfQorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2I4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIGVjY2NiY2Y2NmRhNTM3NzlkODhlMzhlMmFmN2Y4MmVmZjhkZGU3ZjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAxMDozNTo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2Ugc3RhdGljIGlubGluZXMgYXMgdGhlIGV4dGVybmFsIGlubGluZSBkZWZpbml0aW9uIGhhcworIGNoYW5nZWQgd2l0aCBnY2M1CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL21pbmlhY2MuaCB8IDI0ICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pbmlhY2MuaCBiL3NyYy9taW5pYWNjLmgKK2luZGV4IDA5ZTZmMGMuLmNhZTk4ZDEgMTAwNjQ0CistLS0gYS9zcmMvbWluaWFjYy5oCisrKysgYi9zcmMvbWluaWFjYy5oCitAQCAtMjg4MCw4ICsyODgwLDcgQEAgdHlwZWRlZiB2b2lkIChfX2FjY19jZGVjbF9zaWdoYW5kbGVyICphY2Nfc2lnaGFuZGxlcl90KShhY2Nfc2lnbm9fdCk7CisgI2lmICEoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiAoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyAjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisgI2lmICFkZWZpbmVkKEFDQ19VQV9HRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgdW5zaWduZWQgbG9uZyB2OworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibGhicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKK0BAIC0yODkwLDggKzI4ODksNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdAorICNkZWZpbmUgQUNDX1VBX0dFVF9MRTE2KHApICAgICAgX19BQ0NfVUFfR0VUX0xFMTYocCkKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoQUNDX1VBX1NFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7CisgfQorQEAgLTI5MTYsOCArMjkxNCw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpCisgI2lmICEoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiAoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyAjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisgI2lmICFkZWZpbmVkKEFDQ19VQV9HRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgdW5zaWduZWQgbG9uZyB2OworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKK0BAIC0yOTI2LDggKzI5MjMsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdAorICNkZWZpbmUgQUNDX1VBX0dFVF9MRTMyKHApICAgICAgX19BQ0NfVUFfR0VUX0xFMzIocCkKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoQUNDX1VBX1NFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7CisgfQorQEAgLTMzMDcsOCArMzMwMyw3IEBAIHR5cGVkZWYgdm9pZCAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMzMxNyw4ICszMzEyLDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0zMzQzLDggKzMzMzcsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaQorICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMzM1Myw4ICszMzQ2LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUzMihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTMyKHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KKy0tIAorMi41LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyOWMxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwzOTAgQEAKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShBQ0NfQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoQUNDX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19IRUFERVJTXSwgWworQUNfSEVBREVSX1RJTUUKK0FDX0NIRUNLX0hFQURFUlMoW2Fzc2VydC5oIGN0eXBlLmggZGlyZW50LmggZXJybm8uaCBmY250bC5oIGZsb2F0LmggbGltaXRzLmggbWFsbG9jLmggbWVtb3J5Lmggc2V0am1wLmggc2lnbmFsLmggc3RkYXJnLmggc3RkZGVmLmggc3RkaW50Lmggc3RkaW8uaCBzdGRsaWIuaCBzdHJpbmcuaCBzdHJpbmdzLmggdGltZS5oIHVuaXN0ZC5oIHV0aW1lLmggc3lzL3N0YXQuaCBzeXMvdGltZS5oIHN5cy90eXBlcy5oIHN5cy93YWl0LmhdKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0ZVTkNTXSwgWworQUNfQ0hFQ0tfRlVOQ1MoYWNjZXNzIGFsbG9jYSBhdGV4aXQgYXRvaSBhdG9sIGNobW9kIGNob3duIGN0aW1lIGRpZmZ0aW1lIGZzdGF0IGdldHRpbWVvZmRheSBnbXRpbWUgbG9jYWx0aW1lIGxvbmdqbXAgbHN0YXQgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXNldCBta3RpbWUgcXNvcnQgcmFpc2Ugc2V0am1wIHNpZ25hbCBzbnByaW50ZiBzdHJjYXNlY21wIHN0cmNociBzdHJkdXAgc3RyZXJyb3Igc3RyZnRpbWUgc3RyaWNtcCBzdHJuY2FzZWNtcCBzdHJuaWNtcCBzdHJyY2hyIHN0cnN0ciB0aW1lIHVtYXNrIHV0aW1lIHZzbnByaW50ZikKK10pIworCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKKworQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihfX2ludDE2KQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoX19pbnQ2NCkKKworQUNfQ0hFQ0tfU0laRU9GKHZvaWQgKikKK0FDX0NIRUNLX1NJWkVPRihzaXplX3QpCitBQ19DSEVDS19TSVpFT0YocHRyZGlmZl90KQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjaW5jbHVkZSAiYWNjL2FjYy5oIgorI2luY2x1ZGUgImFjYy9hY2NfaW5jZC5oIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorfQorI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgYXNzZXJ0KGV4cHIpOworI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X0FDQ19BQ0NDSEsKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9NSU5JQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNEX0ggMQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNpbmNsdWRlICQyCit9CisKKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBhc3NlcnQoZXhwcik7CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2luY2x1ZGUgJDIKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X01JTklBQ0NfQUNDQ0hLCisKKworCisjIHNlcmlhbCAxCisKK0FDX0RFRlVOKFttZnhfUFJPR19DUFBGTEFHU10sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgQyBwcmVwcm9jZXNzb3IgbmVlZHMgc3BlY2lhbCBmbGFnc10pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMSIKKyNlbGlmICgweGZmZmZ1ID09IDB4ZmZmZmZmZmZ1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDIiCisjZWxpZiAoMzI3NjcgPj0gVUxPTkdfTUFYKSB8fCAoNjU1MzV1ID49IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKK11dLCBbWyBdXQorKV0pCisKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworbWZ4X3RtcD1FUlJPUgorZm9yIG1meF9hcmcgaW4gIiIgLW5vLWNwcC1wcmVjb21wCitkbworICBDUFBGTEFHUz0iJG1meF9hcmcgJG1meF9zYXZlX0NQUEZMQUdTIgorICBfQUNfQ09NUElMRV9JRkVMU0UoW10sCitbbWZ4X3RtcD0kbWZ4X2FyZworYnJlYWtdKQorZG9uZQorQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHgpCisgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBuZWVkZWRdKSA7OworICB4RVJST1IpCisgICAgQUNfTVNHX1JFU1VMVChbRVJST1JdKQorICAgIEFDX01TR19FUlJPUihbeW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZ10pCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCisgICAgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKyAgICA7OworZXNhYworXSkjIG1meF9QUk9HX0NQUEZMQUdTCisKKworCisjIHNlcmlhbCAzCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfSEVBREVSX1NBTkVfTElNSVRTX0hdLCBbCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lXSwKK21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19HTlVDX18pCisjICAgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSB1c2UgY29tcGlsZXIgb3B0aW9uIC1uby1jcHAtcHJlY29tcCIKKyMgIGVsc2UKKyMgICAgaW5jbHVkZSAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIgorIyAgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBNRlhfMHhmZmZmICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNRlhfMHhmZmZmZmZmZkwgICAgIDQyOTQ5NjcyOTV1bAorI2lmICFkZWZpbmVkKENIQVJfQklUKSB8fCAoQ0hBUl9CSVQgIT0gOCkKKyMgIGluY2x1ZGUgImVycm9yIENIQVJfQklUIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUNIQVJfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIElOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKExPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgTE9OR19NQVggMSIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDIiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAyIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAyIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDB4ZmYpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMyIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCBNRlhfMHhmZmZmZmZmZkwpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPiBVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCB2cyBVSU5UX01BWCIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA+IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIHZzIFVMT05HX01BWCIKKyNlbmRpZgorXV0sIFtbCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDIpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDIpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSAyKV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJiWzEgLSAyICogIShzaXplb2YobG9uZykgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDQpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSA0KV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDQpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gNCldOyB9CisjZW5kaWYKK11dKV0sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPXllc10sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPW5vXSldKQorXSkKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gc3RhbmRhcmQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0xaT19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKExaT19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShMWk9fQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkbmwgbW9yZSB0eXBlcyB3aGljaCBhcmUgbm90IHlldCBjb3ZlcmVkIGJ5IEFDQworCitBQ19ERUZVTihbbWZ4X0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRihpbnRwdHJfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50cHRyX3QpCisKK0FDX0NIRUNLX1NJWkVPRihmbG9hdCkKK0FDX0NIRUNLX1NJWkVPRihkb3VibGUpCitBQ19DSEVDS19TSVpFT0YobG9uZyBkb3VibGUpCisKK0FDX0NIRUNLX1NJWkVPRihkZXZfdCkKK0FDX0NIRUNLX1NJWkVPRihmcG9zX3QpCitBQ19DSEVDS19TSVpFT0YobW9kZV90KQorQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorQUNfQ0hFQ0tfU0laRU9GKHNzaXplX3QpCitBQ19DSEVDS19TSVpFT0YodGltZV90KQorXSkjCisKKworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0xJQl9XSU5NTV0sIFsKK2lmIHRlc3QgIlgkR0NDIiA9IFh5ZXM7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgdGVzdCAiWCRMSUJTIiAhPSAiWCIgJiYgTElCUz0iJExJQlMgIgorICAgICBMSUJTPSIke0xJQlN9LWx3aW5tbSIgOzsKKyopCisgICAgIDs7Citlc2FjCitmaQorXSkjCisKKyNzZXJpYWwgNgorCitkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKworIyBEZWZpbmUgU1RfTVRJTV9OU0VDIHRvIGJlIHRoZSBuYW5vc2Vjb25kcyBtZW1iZXIgb2Ygc3RydWN0IHN0YXQncyBzdF9tdGltLAorIyBpZiBpdCBleGlzdHMuCisKK0FDX0RFRlVOKFtBQ19TVFJVQ1RfU1RfTVRJTV9OU0VDXSwKKyBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kcyBtZW1iZXIgb2Ygc3RydWN0IHN0YXQuc3RfbXRpbV0sCisgICBhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjLAorICAgW2FjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjPW5vCisgICAgIyB0dl9uc2VjIC0tIHRoZSB1c3VhbCBjYXNlCisgICAgIyBfdHZfbnNlYyAtLSBTb2xhcmlzIDIuNiwgaWYKKyAgICAjCShkZWZpbmVkIF9YT1BFTl9TT1VSQ0UgJiYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCA9PSAxCisgICAgIwkgJiYgIWRlZmluZWQgX19FWFRFTlNJT05TX18pCisgICAgIyBzdF9fdGltLnR2X25zZWMgLS0gVW5peFdhcmUgMi4xLjIKKyAgICBmb3IgYWNfdmFsIGluIHR2X25zZWMgX3R2X25zZWMgc3RfX3RpbS50dl9uc2VjOyBkbworICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIC1EU1RfTVRJTV9OU0VDPSRhY192YWwiCisgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSwgW3N0cnVjdCBzdGF0IHM7IHMuc3RfbXRpbS5TVF9NVElNX05TRUM7XSwKKyAgICAgICAgW2FjX2N2X3N0cnVjdF9zdF9tdGltX25zZWM9JGFjX3ZhbDsgYnJlYWtdKQorICAgIGRvbmUKKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiXSkKKworICBpZiB0ZXN0ICRhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjICE9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNUX01USU1fTlNFQywgJGFjX2N2X3N0cnVjdF9zdF9tdGltX25zZWMsCisgICAgICBbRGVmaW5lIHRvIGJlIHRoZSBuYW5vc2Vjb25kcyBtZW1iZXIgb2Ygc3RydWN0IHN0YXQncyBzdF9tdGltLAorICAgICAgIGlmIGl0IGV4aXN0cy5dKQorICBmaQorIF0KKykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzliZTgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL3gzMl9hYmlfbWluaWFjY19oLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0ZpeCBnZXQgb2YgRkxBR1MgcmVnaXN0ZXIgaW4geDMyIEFCSSwKKworeDMyIEFCSSByZXF1aXJlcyB0byBoYXZlIDY0LWJpdCB2YXJpYWJsZSB0byBzdG9yZSBGTEFHUyByZWdpc3RlcgoraW5zdGVhZCBvZiBzaXplX3QgdGhhdCBpcyAzMi1iaXQgdmFyaWFibGUsIHRoaXMgZml4IG9wZXJhbmQKK3R5cGUgbWlzbWF0Y2ggd2hlbiB0cnkgdG8gcG9wIHByZXZpb3VzIHB1c2hmIHZhbHVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGx6b3AtMS4wMy9zcmMvbWluaWFjYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHpvcC0xLjAzLm9yaWcvc3JjL21pbmlhY2MuaAorKysrIGx6b3AtMS4wMy9zcmMvbWluaWFjYy5oCitAQCAtNzU0LDYgKzc1NCw5IEBACisgI2VsaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQU1ENjQgICAgICAgICAgICAxCisgIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImFtZDY0IgorKyMgIGlmIGRlZmluZWQoX19JTFAzMl9fKQorKyMgICAgZGVmaW5lIEFDQ19BUkNIX0FNRDY0X1gzMiAgICAgIDEKKysjICBlbmRpZgorICNlbGlmIGRlZmluZWQoX190aHVtYl9fKSB8fCAoZGVmaW5lZChfTV9BUk0pICYmIGRlZmluZWQoX01fVEhVTUIpKQorICMgIGRlZmluZSBBQ0NfQVJDSF9BUk0gICAgICAgICAgICAgIDEKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQVJNX1RIVU1CICAgICAgICAxCitAQCAtNjc4Nyw3ICs2NzkwLDExIEBAIEFDQ0xJQl9QVUJMSUNfTk9JTkxJTkUodm9pZCwgYWNjX2RlYnVnX24KKyBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKGludCwgYWNjX2RlYnVnX2FsaWduX2NoZWNrX3F1ZXJ5KSAodm9pZCkKKyB7CisgI2lmIChBQ0NfQVJDSF9BTUQ2NCB8fCBBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfR05VQykKKysjICBpZiBkZWZpbmVkKEFDQ19BUkNIX0FNRDY0X1gzMikKKysgICAgdW5zaWduZWQgbG9uZyBsb25nIHI7CisrIyAgZWxzZQorICAgICBzaXplX3QgcjsKKysjICBlbmRpZgorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZcbiBwb3AgJTBcbiIgOiAiPWEiIChyKSA6IDogX19BQ0NfQVNNX0NMT0JCRVIpOworICAgICByZXR1cm4gKGludCkociA+PiAxOCkgJiAxOworICNlbGlmIChBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfTVNDKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q2Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJSZWFsLXRpbWUgZmlsZSBjb21wcmVzc29yIgorREVTQ1JJUFRJT04gPSAibHpvcCBpcyBhIGNvbXByZXNzaW9uIHV0aWxpdHkgd2hpY2ggaXMgZGVzaWduZWQgdG8gYmUgYSBjb21wYW5pb24gdG8gZ3ppcC4gXG5cCitJdCBpcyBiYXNlZCBvbiB0aGUgTFpPIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXRzIG1haW4gYWR2YW50YWdlcyBvdmVyIFxuXAorZ3ppcCBhcmUgbXVjaCBoaWdoZXIgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBcblwKK2NvbXByZXNzaW9uIHJhdGlvLiBUaGUgbHpvcCBjb21wcmVzc2lvbiB1dGlsaXR5IHdhcyBkZXNpZ25lZCB3aXRoIHRoZSBnb2FscyBcblwKK29mIHJlbGlhYmlsaXR5LCBzcGVlZCwgcG9ydGFiaWxpdHkgYW5kIHdpdGggcmVhc29uYWJsZSBkcm9wLWluIGNvbXBhdGliaWxpdHkgXG5cCit0byBnemlwLiIKK0RFUEVORFMgKz0gImx6byIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZmVhZjNkYzRiZWVmNGY1YTdiZGJjMzViMTk3ZjM5ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHpvcC5jO2JlZ2lubGluZT01O2VuZGxpbmU9MjE7bWQ1PTY3OTdiZDNlZDBhMWE0OTMyN2I3ZWJmOTM2NmViZDg2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubHpvcC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDZjNWUyN2ZiNzhjZGQxNGE2MjhmZGZhNWFhMTkwNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMTQyNWI4Yzc3ZDQ5ZjVhNjc5ZDVhMTI2YzkwZWE2YWQ5OTU4NWE1NWUzMzVhNjEzY2FlNTllOTA5ZGJiMmM5IgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmUgKCkgeworICAgIGxuIC1zZiAgLi4vYWNpbmNsdWRlLm00ICR7U30vYWNpbmNsdWRlLm00CisgICAgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3MTAwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA4NDAyMWIxZTIzNjUwODE2OWJlNjVlODAyYTljMGEyNWZjOWE4ODI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KK0RhdGU6IE1vbiwgMjcgT2N0IDIwMDggMjI6MjY6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbXBmcjogY3J1c2FkZSBhZ2FpbnN0IGlubGluZSBhc3NlbWJsZXIKKworV2l0aG91dCB0aGlzLCBidWlsZCBmYWlscyBmb3IgdGh1bWI6Cit8IHtzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKK3wge3N0YW5kYXJkIGlucHV0fToxOTk6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCBzbCxyMCxyMixyMScKK3wge3N0YW5kYXJkIGlucHV0fToyMTQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCBzbCxyMixyMSxmcCcKK3wge3N0YW5kYXJkIGlucHV0fToyMTk6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyBmcCxyMCxzbCcKK3wge3N0YW5kYXJkIGlucHV0fToyMjA6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyByMixyMiwjMCcKK3wge3N0YW5kYXJkIGlucHV0fToyMzU6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxzbCxyMSxyMycKK3wge3N0YW5kYXJkIGlucHV0fToyNDQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCBmcCxpcCxyMSxyMycKK3wge3N0YW5kYXJkIGlucHV0fToyNTM6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyByMyxzbCxmcCcKK3wge3N0YW5kYXJkIGlucHV0fToyNTQ6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyBpcCxpcCwjMCcKK3wge3N0YW5kYXJkIGlucHV0fToyNTk6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyBzbCxyMSxyMCcKK3wge3N0YW5kYXJkIGlucHV0fTo2NDI6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxyMixyMyxyMScKK3wgLi4vYXJtLW9lLWxpbnV4LWdudWVhYmktbGlidG9vbCAtLXRhZz1DQyAgIC0tbW9kZT1jb21waWxlIGFybS1vZS1saW51eC1nbnVlYWJpLWdjYyAgLW1hcmNoPWFybXY1dGUgIC1tdGh1bWIgLW10aHVtYi1pbnRlcndvcmsgIC1tdHVuZT14c2NhbGUgLS1zeXNyb290PS9PRS9zaHItY29yZS90bXAtZWdsaWJjL3N5c3Jvb3RzL3NwaXR6IC1ESEFWRV9JTlRUWVBFU19IPTEgLURIQVZFX1NURElOVF9IPTEgLURUSU1FX1dJVEhfU1lTX1RJTUU9MSAtREhBVkVfTE9DQUxFX0g9MSAtREhBVkVfV0NIQVJfSD0xIC1ESEFWRV9TVERBUkc9MSAtREhBVkVfU1lTX1RJTUVfSD0xIC1ESEFWRV9BTExPQ0FfSD0xIC1ESEFWRV9TVERJTlRfSD0xIC1ESEFWRV9WQV9DT1BZPTEgLURIQVZFX1NFVExPQ0FMRT0xIC1ESEFWRV9HRVRUSU1FT0ZEQVk9MSAtREhBVkVfTE9OR19MT05HPTEgLURIQVZFX0lOVE1BWF9UPTEgLURNUEZSX0hBVkVfSU5UTUFYX01BWD0xIC1ETVBGUl9IQVZFX0ZFU0VUUk9VTkQ9MSAtREhBVkVfUk9VTkQ9MSAtREhBVkVfVFJVTkM9MSAtREhBVkVfRkxPT1I9MSAtREhBVkVfQ0VJTD0xIC1ESEFWRV9ORUFSQllJTlQ9MSAtRExUX09CSkRJUj1cIi5saWJzL1wiIC1ESEFWRV9BVFRSSUJVVEVfTU9ERT0xIC1ESEFWRV9fX0dNUE5fUk9PVFJFTT0xIC1ESEFWRV9fX0dNUE5fU0JQSTFfRElWQVBQUl9RPTEgLUkuICAgICAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1mZmxvYXQtc3RvcmUgLWMgLW8gcG93LmxvIHBvdy5jCit8IHtzdGFuZGFyZCBpbnB1dH06MTE1NDogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHIwLHIxLHNsLGlwJworfCB7c3RhbmRhcmQgaW5wdXR9OjExNjY6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMyxyMixpcCxyMCcKK3wge3N0YW5kYXJkIGlucHV0fToxMTcxOiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgcjAscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MTE3MjogRXJyb3I6IHVuc2hpZnRlZCByZWdpc3RlciByZXF1aXJlZCAtLSBgYWRjIHIyLHIyLCMwJworfCBtYWtlWzJdOiAqKiogW211bC5sb10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gbXBmci5vbGQvc3JjL21wZnItbG9uZ2xvbmcuaAkyMDA4LTAxLTAxIDAzOjI5OjA5LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnIvc3JjL21wZnItbG9uZ2xvbmcuaAkyMDA4LTEwLTI3IDIxOjQ2OjQ0LjAwMDAwMDAwMCArMDAwMAorQEAgLTQwNiw3ICs0MDYsNyBAQAorIAkgICAgICJySUoiICgoVVNJdHlwZSkgKGJsKSkpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisrI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyICYmICFkZWZpbmVkKF9fdGh1bWJfXykKKyAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICAgX19hc21fXyAoImFkZHNcdCUxLCAlNCwgJTVcblx0YWRjXHQlMCwgJTIsICUzIgkJCVwKKyAJICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkJCQkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmM2Y5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIG11bHRpcGxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbnMgd2l0aCBleGFjdCByb3VuZGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubXBmci5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjMrIgorU0VDVElPTiA9ICJkZXZlbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTliNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBtcGZyLmluYworCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKK0RFUEVORFMgPSAiZ21wIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubXBmci5vcmcvbXBmci0ke1BWfS9tcGZyLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9sb25nLWxvbmctdGh1bWIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OTY5Mzk4Y2QyZmJjNTZhNmFmNTcwYjUyNzNjNTZhOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ODM1YTA4YmQ5OTJjODI1NzY0MTc5MWU5YTZhMmIzNWIwMjMzNmM4ZGUyNmQwYTg1Nzc5NTM3NDdlNTE0YTE2IgorCitTID0gIiR7V09SS0RJUn0vbXBmci0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vZ251dGxzXzQuM19maXh1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTlmNWUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorcmVwbGFjZSBkZXByZWNhdGVkIEdudVRMUyBmdW5jdGlvbnMgd2l0aCBuZXdlciBvbmVzIGlmIGF2YWlsYWJsZSAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+CisKK0luZGV4OiBuZW9uLTAuMzAuMS9tYWNyb3MvbmVvbi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5lb24tMC4zMC4xLm9yaWcvbWFjcm9zL25lb24ubTQKKysrKyBuZW9uLTAuMzAuMS9tYWNyb3MvbmVvbi5tNAorQEAgLTk4Nyw2ICs5ODcsMTAgQEAgZ251dGxzKQorICAgICAgICAgICAgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9nZXRfeDUwOV9jYXMgXAorICAgICAgICAgICAgICAgICAgIGdudXRsc194NTA5X2NydF9zaWduMl0pCisgCisrICAgIyBnbnV0bHMgNC4zIGNoZWNrCisrICAgQUNfQ0hFQ0tfTElCKGdudXRscywgZ251dGxzX2dsb2JhbF9pbml0KQorKyAgIEFDX0NIRUNLX0ZVTkNTKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfcmV0cmlldmVfZnVuY3Rpb24sLCkKKysKKyAgICAjIGZhaWwgaWYgZ251dGxzX3g1MDlfY3J0X3NpZ24yIGlzIG5vdCBmb3VuZCAoaXQgd2FzIGludHJvZHVjZWQgaW4gMS4yLjAsIHdoaWNoIGlzIHJlcXVpcmVkKQorICAgIGlmIHRlc3QgeCR7YWNfY3ZfZnVuY19nbnV0bHNfeDUwOV9jcnRfc2lnbjJ9ICE9IHh5ZXM7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKFtHbnVUTFMgdmVyc2lvbiBwcmVkYXRlcyBnbnV0bHNfeDUwOV9jcnRfc2lnbjIsIG5ld2VyIHZlcnNpb24gcmVxdWlyZWQgKGF0IGxlYXN0IDEuMi4wKV0pCitJbmRleDogbmVvbi0wLjMwLjEvc3JjL25lX2dudXRscy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbmVvbi0wLjMwLjEub3JpZy9zcmMvbmVfZ251dGxzLmMKKysrKyBuZW9uLTAuMzAuMS9zcmMvbmVfZ251dGxzLmMKK0BAIC01NTMsNyArNTUzLDEzIEBAIGR1cF9lcnJvcjoKKyBzdGF0aWMgaW50IHByb3ZpZGVfY2xpZW50X2NlcnQoZ251dGxzX3Nlc3Npb25fdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbnV0bHNfZGF0dW1fdCAqcmVxX2NhX3JkbiwgaW50IG5yZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbnV0bHNfcGtfYWxnb3JpdGhtX3QgKnNpZ25fYWxnb3MsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWduX2FsZ29zX2xlbmd0aCwgZ251dGxzX3JldHJfc3QgKnN0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbl9hbGdvc19sZW5ndGgsCisrI2lmIEhBVkVfR05VVExTX0NFUlRJRklDQVRFX1NFVF9SRVRSSUVWRV9GVU5DVElPTgorKyAgICBnbnV0bHNfcmV0cjJfc3QqIHN0CisrI2Vsc2UKKysgICAgZ251dGxzX3JldHJfc3QgKnN0CisrI2VuZGlmCisrICAgICkKKyB7CisgICAgIG5lX3Nlc3Npb24gKnNlc3MgPSBnbnV0bHNfc2Vzc2lvbl9nZXRfcHRyKHNlc3Npb24pOworICAgICAKK0BAIC02MTcsOCArNjIzLDExIEBAIHN0YXRpYyBpbnQgcHJvdmlkZV9jbGllbnRfY2VydChnbnV0bHNfc2UKKyAjZW5kaWYKKyAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICBORV9ERUJVRyhORV9EQkdfU1NMLCAiU3VwcGx5aW5nIGNsaWVudCBjZXJ0aWZpY2F0ZS5cbiIpOworLQorKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgICAgICAgICBzdC0+Y2VydF90eXBlID0gdHlwZTsKKysjZWxzZQorICAgICAgICAgICAgIHN0LT50eXBlID0gdHlwZTsKKysjZW5kaWYKKyAgICAgICAgICAgICBzdC0+bmNlcnRzID0gMTsKKyAgICAgICAgICAgICBzdC0+Y2VydC54NTA5ID0gJnNlc3MtPmNsaWVudF9jZXJ0LT5jZXJ0LnN1YmplY3Q7CisgICAgICAgICAgICAgc3QtPmtleS54NTA5ID0gc2Vzcy0+Y2xpZW50X2NlcnQtPnBrZXk7CitAQCAtNjQ5LDggKzY1OCwxNCBAQCBuZV9zc2xfY29udGV4dCAqbmVfc3NsX2NvbnRleHRfY3JlYXRlKGluCisgICAgIG5lX3NzbF9jb250ZXh0ICpjdHggPSBuZV9jYWxsb2Moc2l6ZW9mICpjdHgpOworICAgICBnbnV0bHNfY2VydGlmaWNhdGVfYWxsb2NhdGVfY3JlZGVudGlhbHMoJmN0eC0+Y3JlZCk7CisgICAgIGlmIChmbGFncyA9PSBORV9TU0xfQ1RYX0NMSUVOVCkgeworKworKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfcmV0cmlldmVfZnVuY3Rpb24oY3R4LT5jcmVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlX2NsaWVudF9jZXJ0KTsKKysjZWxzZQorICAgICAgICAgZ251dGxzX2NlcnRpZmljYXRlX2NsaWVudF9zZXRfcmV0cmlldmVfZnVuY3Rpb24oY3R4LT5jcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZV9jbGllbnRfY2VydCk7CisrI2VuZGlmCisgICAgIH0KKyAgICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF92ZXJpZnlfZmxhZ3MoY3R4LT5jcmVkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1ZFUklGWV9BTExPV19YNTA5X1YxX0NBX0NSVCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlkYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIG5lb24ucGMuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBuZW9uLTAuMzAuMS5vcmlnL25lb24ucGMuaW4KKysrKyBuZW9uLTAuMzAuMS9uZW9uLnBjLmluCitAQCAtNyw1ICs3LDUgQEAgTmFtZTogbmVvbgorIERlc2NyaXB0aW9uOiBIVFRQL1dlYkRBViBjbGllbnQgbGlicmFyeQorIFZlcnNpb246IEBORU9OX1ZFUlNJT05ACisgTGliczogLUwke2xpYmRpcn0gLWxuZW9uIEBORU9OX1BDX0xJQlNACistTGlicy5wcml2YXRlOiBATkVPTl9MSUJTQAorK0xpYnMucHJpdmF0ZTogLUwke2xpYmRpcn0gLWx6IC1sZ2NyeXB0IC1sZ3BnLWVycm9yIC1sZXhwYXQgLWxnbnV0bHMKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9uZW9uIEBORU9OX0NGTEFHU0AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDQzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiQW4gSFRUUCBhbmQgV2ViREFWIGNsaWVudCBsaWJyYXJ5IHdpdGggYSBDIGludGVyZmFjZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cud2ViZGF2Lm9yZy9uZW9uLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9DT1BZSU5HLkxJQjttZDU9ZjMwYTk3MTZlZjM3NjJlMzQ2N2EyZjYyYmY3OTBmMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL25lX3V0aWxzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9MmNhY2E2MDk1MzhlZGRhYTZmNmFkZjEyMGEyMTgwMzciCitERVBFTkRTID0gInpsaWIgbGlieG1sMiBleHBhdCB0aW1lIGdudXRscyBsaWJwcm94eSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIGxpYnhtbDItbmF0aXZlIGV4cGF0LW5hdGl2ZSBnbnV0bHMtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LndlYmRhdi5vcmcvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudXRsc180LjNfZml4dXAucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiMjMxYWRlYmU1YzJmNzhmZGVkM2UzZGY2ZTk1ODg3OGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDBjNjI2YzBkYzE4ZDA5NGFiMzc0ZGJkOWEzNTQ5MTViZmU0Nzc2NDMzMjg5Mzg2ZWQ0ODljMmVjMDg0NWNkZCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9uZW9uLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNzbD1nbnV0bHMgLS13aXRoLWxpYnhtbDIgLS13aXRoLWV4cGF0IC0tZW5hYmxlLXNoYXJlZCIKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWdzc2FwaSIKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJb2VfcnVubWFrZSAtQyB0ZXN0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9BZGQtdGFyZ2V0LXRvLW9ubHktYnVpbGQtdGVzdHMtbm90LXJ1bi10aGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGE3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDQ2ZWRmMDFjYzk4ZGI5ZjlmZWVjOTg0ODk3ODM2ZGZkZDI2YmRjOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMiBBdWcgMjAxNSAyMzoyNzoyNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBBZGQgdGFyZ2V0IHRvIG9ubHkgYnVpbGQgdGVzdHMgKG5vdCBydW4gdGhlbSkKKworTm90IHNlbmRpbmcgdXBzdHJlYW0gYXMgdGhpcyBpcyBvbmx5IGEgc3RhcnQgb2YgYSBzb2x1dGlvbiB0bworaW5zdGFsbGFibGUgdGVzdHM6IEl0J3MgdXNlZnVsIGZvciB1cyBhbHJlYWR5IGFzIGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhIGNvbXBsZXRlIHNvbHV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICAgICAgICAgIHwgMyArKysKKyB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4gfCAyICsrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDA4ZWZiN2QuLjc5MDkzNDIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC01NSw2ICs1NSw5IEBAIGNsZWFuIGRpc3RjbGVhbiBtb3N0bHljbGVhbiBtYWludGFpbmVyLWNsZWFuIHRhZ3M6CisgCSAgZWNobyAiTWFraW5nICRAIGluICQkZCIgOyAoY2QgJCRkICYmICQoTUFLRSkgJEApOyBkb25lCisgCSQoTUFLRSkgJEAtaGVyZQorIAorK2J1aWxkdGVzdDoKKysJZWNobyAiTWFraW5nICRAIGluIHRlc3RzdWl0ZSIgOyAoY2QgdGVzdHN1aXRlICYmICQoTUFLRSkgJEApCisrCisgY2hlY2staGVyZToKKyAJdHJ1ZQorIAorZGlmZiAtLWdpdCBhL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgoraW5kZXggNmJjMTkwNy4uYmI2NWJmMCAxMDA2NDQKKy0tLSBhL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorKysrIGIvdGVzdHN1aXRlL01ha2VmaWxlLmluCitAQCAtMTE2LDYgKzExNiw4IEBAICQoVEFSR0VUUykgJChFWFRSQV9UQVJHRVRTKTogdGVzdHV0aWxzLiQoT0JKRVhUKSAuLi9uZXR0bGUtaW50ZXJuYWwuJChPQkpFWFQpIFwKKyAjIGRhdGEuCisgVkFMR1JJTkQgPSB2YWxncmluZCAtLWVycm9yLWV4aXRjb2RlPTEgLS1sZWFrLWNoZWNrPWZ1bGwgLS1zaG93LXJlYWNoYWJsZT15ZXMgQElGX0FTTUAgLS1wYXJ0aWFsLWxvYWRzLW9rPXllcworIAorK2J1aWxkdGVzdDogJChUU19BTEwpCisrCisgIyBUaGUgUEFUSCB1cGRhdGUgaXMgZm9yIGxvY2F0aW5nIGRsbHMgb24gdypuZG93cy4KKyBjaGVjazogJChUU19BTEwpCisgCUxEX0xJQlJBUllfUEFUSD0uLi8ubGliIFBBVEg9Ii4uLy5saWI6JCRQQVRIIiBzcmNkaXI9IiQoc3JjZGlyKSIgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBiZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDM2IEBACisjISAvYmluL3NoCisKK2NkIHRlc3RzdWl0ZQorCitmYWlsZWQ9MAorYWxsPTAKKworZm9yIGYgaW4gKi10ZXN0OyBkbworICAgIGlmIFsgIiRmIiA9ICJzaGExLWh1Z2UtdGVzdCIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiU0tJUDogJGYgKHNraXBwZWQgZm9yIGx1ZGljcm91cyBydW4gdGltZSkiCisgICAgICAgIGNvbnRpbnVlCisgICAgZmkKKworICAgICIuLyRmIgorICAgIGNhc2UgIiQ/IiBpbgorICAgICAgICAwKQorICAgICAgICAgICAgZWNobyAiUEFTUzogJGYiCisgICAgICAgICAgICBhbGw9JCgoYWxsICsgMSkpCisgICAgICAgICAgICA7OworICAgICAgICA3NykKKyAgICAgICAgICAgIGVjaG8gIlNLSVA6ICRmIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGVjaG8gIkZBSUw6ICRmIgorICAgICAgICAgICAgZmFpbGVkPSQoKGZhaWxlZCArIDEpKQorICAgICAgICAgICAgYWxsPSQoKGFsbCArIDEpKQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgIiRmYWlsZWQiIC1lcSAwIF0gOyB0aGVuCisgIGVjaG8gIkFsbCAkYWxsIHRlc3RzIHBhc3NlZCIKK2Vsc2UKKyAgZWNobyAiJGZhaWxlZCBvZiAkYWxsIHRlc3RzIGZhaWxlZCIKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmZmY2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQSBsb3cgbGV2ZWwgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+bmlzc2UvbmV0dGxlLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtZGVjcnlwdC5jO2JlZ2lubGluZT01MztlbmRsaW5lPTY3O21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LXNldC1rZXkuYztiZWdpbmxpbmU9NTY7ZW5kbGluZT03MDttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQiCisKK0RFUEVORFMgKz0gImdtcCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9hcmNoaXZlLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtdGFyZ2V0LXRvLW9ubHktYnVpbGQtdGVzdHMtbm90LXJ1bi10aGVtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwM2Q1MTQ3OTExMzE3OTMxZGQ0NTM1MjBlYjIzNGE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjNzFlYmQ0MzQzNTUzN2Q3Njc3OTllNDE0ZmNlODhlNTIxYjcyNzhkNDhjODYwNjUxMjE2ZTFmYzY1NTViNDAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtb3BlbnNzbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IC1hIC1lICR7U30vYWNsb2NhbC5tNCBdOyB0aGVuCisgICAgICAgICAgICAgICBjcCAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKyAgICAgICBmaQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgICAgICBvZV9ydW5tYWtlIGJ1aWxkdGVzdAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KKyAgICAgICAgaW5zdGFsbCAke1N9L3Rlc3RzdWl0ZS9nb2xkLWJ1Zy50eHQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworICAgICAgICBpbnN0YWxsICR7U30vdGVzdHN1aXRlLyotdGVzdCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCisgICAgICAgICMgdG9vbHMgY2FuIGJlIGZvdW5kIGluIFBBVEgsIG5vdCBpbiAuLi90b29scy8KKyAgICAgICAgc2VkIC1pIC1lICdzfC4uL3Rvb2xzL3x8JyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvKi10ZXN0CisgICAgICAgIGluc3RhbGwgJHtCfS90ZXN0c3VpdGUvKi10ZXN0ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KK30KKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTI1NzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG5ldHRsZS5pbmMKKworTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9NTM7ZW5kbGluZT02NzttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTU2O2VuZGxpbmU9NzA7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDAzZDUxNDc5MTEzMTc5MzFkZDQ1MzUyMGViMjM0YTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmM3MWViZDQzNDM1NTM3ZDc2Nzc5OWU0MTRmY2U4OGU1MjFiNzI3OGQ0OGM4NjA2NTEyMTZlMWZjNjU1NWI0MCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3MTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBuZXR0bGUuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYzKyB8IEdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9MTQ7ZW5kbGluZT0zNjttZDU9Y2EwZDIyMGJjNDEzZTE4NDJlY2M1MDc2OTBjZTQxNmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTE0O2VuZGxpbmU9MzY7bWQ1PWNhMGQyMjBiYzQxM2UxODQyZWNjNTA3NjkwY2U0MTZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjQwZmE4OGRjMzJmMzdhMTgyYjZiNDIwOTJlYmIxNDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZkNGQyNWQ2NGQ4ZGRjYjg1ZDBkODk3NTcyYWY3M2IwNWI0ZDE2M2M2Y2M0OTQzOGE1YmZiYjhmZjI5M2Q0YyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTEyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0FkZGVkIG5wdGggcGtnY29uZmlnIGZpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG5wdGgtMS4xL3NyYy9ucHRoLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbnB0aC0xLjEvc3JjL25wdGgucGMuaW4KK0BAIC0wLDAgKzEsMTAgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKytOYW1lOiBucHRoCisrRGVzY3JpcHRpb246IGEgbmV3IHBvcnRhYmxlIHBvc2l4IHRocmVhZGluZyBsaWJyYXJ5CisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxucHRoIC1scHRocmVhZAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitJbmRleDogbnB0aC0xLjEvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnB0aC0xLjEub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBucHRoLTEuMS9zcmMvTWFrZWZpbGUuYW0KK0BAIC0yNyw4ICsyNywxMCBAQAorICMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IG5wdGgucGMKKyAKKy1FWFRSQV9ESVNUID0gbGlibnB0aC52ZXJzCisrRVhUUkFfRElTVCA9IGxpYm5wdGgudmVycyBucHRoLnBjCisgIwkgICAgIHZlcnNpb25pbmZvLnJjLmluCisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IG5wdGguaAorIAorSW5kZXg6IG5wdGgtMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5wdGgtMS4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbnB0aC0xLjEvY29uZmlndXJlLmFjCitAQCAtMzM3LDYgKzMzNyw3IEBAIHNyYy9NYWtlZmlsZQorIHczMi9NYWtlZmlsZQorIHRlc3RzL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMobnB0aC1jb25maWcsIGNobW9kICt4IG5wdGgtY29uZmlnKQorK0FDX0NPTkZJR19GSUxFUyhbc3JjL25wdGgucGNdKQorIEFDX09VVFBVVAorIAorIGVjaG8gIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOTYyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJOZXcgR05VIFBvcnRhYmxlIFRocmVhZHMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3NvZnR3YXJlL3B0aC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2MysgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmVcCisgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKKyAgICAiCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L25wdGgvbnB0aC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjI2YmFjNzM3NGI5NDY2YzZlYzI2YjFjMzRkYWI4NDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmRkYmRkZGIyY2Y0OWE0NzIzZjlkMWFkNjU2M2M0ODBkNjc2MGRjYjYzY2I3NzI2YjhmYzNiYzJlMWI2YzA4YSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJucHRoLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzI1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0ZpeCBidWlsZCBmYWlsdXJlIG9uIHg4Nl82NAorCitXaGVuIHRoZSB0YXJnZXRfY3B1IGlzIHg4Nl82NCwgd2Ugc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBwa2cgdXNlcyA2NGJpdCwKK29ubHkgaWYgVVNFX04zMiBpcyBzZXQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgcGtnIHVzZXMgMzJiaXQuIEl0IHVzZWQgYQorb3Bwb3NpdGUgbG9naWMgYmVmb3JlLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuaW4gfCAgIDEyICsrKysrKy0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitJbmRleDogbnNwci9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3ByLm9yaWcvY29uZmlndXJlLmluCisrKysgbnNwci9jb25maWd1cmUuaW4KK0BAIC0xODc1LDI4ICsxODc1LDI0IEBAIHRvb2xzIGFyZSBzZWxlY3RlZCBkdXJpbmcgdGhlIFhjb2RlL0RldmUKKyAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfaWE2NC5zCisgICAgICAgICA7OworICAgICB4ODZfNjQpCistICAgICAgICBpZiB0ZXN0IC1uICIkVVNFXzY0IjsgdGhlbgorLSAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2XzY0LnMKKy0gICAgICAgIGVsaWYgdGVzdCAtbiAiJFVTRV9YMzIiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0IC1uICIkVVNFX1gzMiI7IHRoZW4KKysgICAgICAgICAgICBBQ19ERUZJTkUoaTM4NikKKyAgICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCisgICAgICAgICAgICAgQ0M9IiRDQyAtbXgzMiIKKyAgICAgICAgICAgICBDWFg9IiRDWFggLW14MzIiCisgICAgICAgICBlbHNlCistICAgICAgICAgICAgQUNfREVGSU5FKGkzODYpCistICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODYucworLSAgICAgICAgICAgIENDPSIkQ0MgLW0zMiIKKy0gICAgICAgICAgICBDWFg9IiRDWFggLW0zMiIKKysgICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgcHBjfHBvd2VycGMpCisgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3BwYy5zCisgICAgICAgICA7OworICAgICBwb3dlcnBjNjQpCistICAgICAgICBpZiB0ZXN0IC1uICIkVVNFXzY0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV9OMzIiOyB0aGVuCisrICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIENDPSIkQ0MgLW02NCIKKyAgICAgICAgICAgICBDWFg9IiRDWFggLW02NCIKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3BwYy5zCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgbTY4aykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL25zcHIucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZDBiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK29zX2xpYnM9LWxwdGhyZWFkIC1sZGwKK3ByZWZpeD1PRVBSRUZJWAorZXhlY19wcmVmaXg9T0VFWEVDUFJFRklYCitsaWJkaXI9T0VMSUJESVIKK2luY2x1ZGVkaXI9T0VJTkNESVIKKworTmFtZTogTlNQUgorRGVzY3JpcHRpb246IFRoZSBOZXRzY2FwZSBQb3J0YWJsZSBSdW50aW1lCitWZXJzaW9uOiA0LjkuNQorTGliczogLUwke2xpYmRpcn0gLWxwbGRzNCAtbHBsYzQgLWxuc3ByNCAtbHB0aHJlYWQgLWxkbAorQ2ZsYWdzOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTc4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorQXV0aG9yOiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitEYXRlOiAgIFRodSBGZWIgOSAwMDowMzozOCAyMDEyICswMjAwCisKK0F2b2lkIFFBIHdhcm5pbmdzIGJ5IHJlbW92aW5nIGhhcmRjb2RlZCBycGF0aCBmcm9tIGJpbmFyaWVzLgorCitbLi4uXQorV0FSTklORzogUUEgSXNzdWU6IHBhY2thZ2UgbnNwciBjb250YWlucyBiYWQgUlBBVEgge2J1aWxkZGlyfS90bXAvd29yay9hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaS9uc3ByLTQuOC45LXIxL25zcHItNC44LjkvbW96aWxsYS9uc3BycHViL3ByL3Rlc3RzLy4uLy4uL2Rpc3QvbGliCitpbiBmaWxlIHtidWlsZGRpcn0vdG1wL3dvcmsvYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmkvbnNwci00LjguOS1yMS9wYWNrYWdlcy1zcGxpdC9uc3ByL3Vzci9saWIvbnNwci90ZXN0cy9tdWx0aXdhaXQKK1suLi5dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbnNwci00LjguOS9tb3ppbGxhL25zcHJwdWIvcHIvdGVzdHMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3BycHViLm9yaWcvcHIvdGVzdHMvTWFrZWZpbGUuaW4JMjAxMi0wMi0xMSAwMDowMToxMC40NzYyMjA1MDUgKzAyMDAKKysrKyBuc3BycHViL3ByL3Rlc3RzL01ha2VmaWxlLmluCTIwMTItMDItMTAgMjM6NTc6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzc5LDcgKzM3OSw3IEBACisgZW5kaWYKKyAKKyBpZmVxICgsJChmaWx0ZXItb3V0IExpbnV4IEdOVSBHTlVfJSwkKE9TX0FSQ0gpKSkKKy0gICAgTERPUFRTICs9IC1YbGlua2VyIC1ycGF0aCAkKEFCU09MVVRFX0xJQl9ESVIpCisrICAgIExET1BUUyArPSAtWGxpbmtlcgorICAgICBpZmVxICgkKFVTRV9QVEhSRUFEUyksMSkKKyAgICAgICAgIEVYVFJBX0xJQlMgPSAtbHB0aHJlYWQKKyAgICAgZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1zcmNkaXItZnJvbS1jb25maWd1cmUtaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNzE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3RoZSAkc3JjZGlyIGlzIG5vdCBkZWZpbmVkIGF0IHRoZSB0aW1lIG9mIGdudS1jb25maWd1cml6ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBuc3ByL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5zcHIub3JpZy9jb25maWd1cmUuaW4KKysrKyBuc3ByL2NvbmZpZ3VyZS5pbgorQEAgLTgsNyArOCw3IEBAIEFDX1BSRVJFUSgyLjYxKQorIEFDX0lOSVQKKyBBQ19DT05GSUdfU1JDRElSKFtwci9pbmNsdWRlL25zcHIuaF0pCisgCistQUNfQ09ORklHX0FVWF9ESVIoJHtzcmNkaXJ9L2J1aWxkL2F1dG9jb25mKQorK0FDX0NPTkZJR19BVVhfRElSKGJ1aWxkL2F1dG9jb25mKQorIEFDX0NBTk9OSUNBTF9UQVJHRVQKKyAKKyBkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDk5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMC44LmJiCkBAIC0wLDAgKzEsMTc2IEBACitTVU1NQVJZID0gIk5ldHNjYXBlIFBvcnRhYmxlIFJ1bnRpbWUgTGlicmFyeSIKK0hPTUVQQUdFID0gICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL25zcHIvIgorTElDRU5TRSA9ICJHUEwtMi4wIHwgTVBMLTIuMCB8IExHUEwtMi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlndXJlLmluO2JlZ2lubGluZT0zO2VuZGxpbmU9NjttZDU9OTBjMmZkZWUzOGU0NWQ2MzAyYWJjZmU0NzVjOGI1YzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW47YmVnaW5saW5lPTQ7ZW5kbGluZT0zODttZDU9YmVkYTFkYmI5OGE1MTVmNTU3ZDNlNThlZjA2YmNhOTkiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL25zcHIvcmVsZWFzZXMvdiR7UFZ9L3NyYy9uc3ByLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcnBhdGgtZnJvbS10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS1zcmNkaXItZnJvbS1jb25maWd1cmUtaW4ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSSArPSAiZmlsZTovL25zcHIucGMuaW4iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDdjNWJkMGE1YjBhN2QwZTcwNWJlNjY0NzkwMzBhMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MDdlYTU3YzUyNWMwYzUyNGRhZTQ4NTdhNjQyYjRlZjVjOWQ3OTU1MTg3NTRjN2Y4MzQyMmQyMmZlNTQ0YTE1IgorCitTID0gIiR7V09SS0RJUn0vbnNwci0ke1BWfS9uc3ByIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gInBlcmwiCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKKworVEVTVFMgPSAiIFwKKyAgICBhY2NlcHQgXAorICAgIGFjY2VwdHJlYWQgXAorICAgIGFjY2VwdHJlYWRlbXUgXAorICAgIGFmZmluaXR5IFwKKyAgICBhbGFybSBcCisgICAgYW5vbmZtIFwKKyAgICBhdG9taWMgXAorICAgIGF0dGFjaCBcCisgICAgYmlnZmlsZSBcCisgICAgY2xlYW51cCBcCisgICAgY2x0c3J2ICBcCisgICAgY29uY3VyIFwKKyAgICBjdmFyIFwKKyAgICBjdmFyMiBcCisgICAgZGxsdGVzdCBcCisgICAgZHRvYSBcCisgICAgZXJyY29kZXMgXAorICAgIGV4aXQgXAorICAgIGZkY2FjaCBcCisgICAgZmlsZWlvIFwKKyAgICBmb3JlaWduIFwKKyAgICBmb3JtYXR0bSBcCisgICAgZnN5bmMgXAorICAgIGdldGhvc3QgXAorICAgIGdldHByb3RvIFwKKyAgICBpMmwgXAorICAgIGluaXRjbGsgXAorICAgIGlucnZhbCBcCisgICAgaW5zdHJ1bXQgXAorICAgIGludHJpbyBcCisgICAgaW50cnVwdCBcCisgICAgaW9fdGltZW91dCBcCisgICAgaW9jb250aHIgXAorICAgIGpvaW4gXAorICAgIGpvaW5rayBcCisgICAgam9pbmt1IFwKKyAgICBqb2ludWsgXAorICAgIGpvaW51dSBcCisgICAgbGF5ZXIgXAorICAgIGxhenlpbml0IFwKKyAgICBsaWJmaWxlbmFtZSBcCisgICAgbGx0ZXN0IFwKKyAgICBsb2NrIFwKKyAgICBsb2NrZmlsZSBcCisgICAgbG9nZmlsZSBcCisgICAgbG9nZ2VyIFwKKyAgICBtYW55X2N2IFwKKyAgICBtdWx0aXdhaXQgXAorICAgIG5hbWVzaG0xIFwKKyAgICBuYmxheWVyIFwKKyAgICBub25ibG9jayBcCisgICAgbnRpb3RvIFwKKyAgICBudG9oIFwKKyAgICBvcF8ybG9uZyBcCisgICAgb3BfZXhjbCBcCisgICAgb3BfZmlsbmYgXAorICAgIG9wX2ZpbG9rIFwKKyAgICBvcF9ub2ZpbCBcCisgICAgcGFyZW50IFwKKyAgICBwYXJzZXRtIFwKKyAgICBwZWVrIFwKKyAgICBwZXJmIFwKKyAgICBwaXBlcGluZyBcCisgICAgcGlwZXBpbmcyIFwKKyAgICBwaXBlc2VsZiBcCisgICAgcG9sbF9ubSBcCisgICAgcG9sbF90byBcCisgICAgcG9sbGFibGUgXAorICAgIHByZnRlc3QgXAorICAgIHByaW1ibG9rIFwKKyAgICBwcm92aWRlciBcCisgICAgcHJwb2xsbWwgXAorICAgIHJhbmZpbGUgXAorICAgIHJhbmRzZWVkIFwKKyAgICByZWluaXQgXAorICAgIHJ3bG9ja3Rlc3QgXAorICAgIHNlbF9zcGQgXAorICAgIHNlbGN0X2VyIFwKKyAgICBzZWxjdF9ubSBcCisgICAgc2VsY3RfdG8gXAorICAgIHNlbGludHIgXAorICAgIHNlbWEgXAorICAgIHNlbWFlcnIgXAorICAgIHNlbWFwaW5nIFwKKyAgICBzZW5kemxmIFwKKyAgICBzZXJ2ZXJfdGVzdCBcCisgICAgc2VydnJfa2sgXAorICAgIHNlcnZyX3VrIFwKKyAgICBzZXJ2cl9rdSBcCisgICAgc2VydnJfdXUgXAorICAgIHNob3J0X3RocmVhZCBcCisgICAgc2lncGlwZSBcCisgICAgc29ja2V0IFwKKyAgICBzb2Nrb3B0IFwKKyAgICBzb2NrcGluZyBcCisgICAgc3ByaW50ZiBcCisgICAgc3RhY2sgXAorICAgIHN0ZGlvIFwKKyAgICBzdHIyYWRkciBcCisgICAgc3Ryb2QgXAorICAgIHN3aXRjaCBcCisgICAgc3lzdGVtIFwKKyAgICB0ZXN0Yml0IFwKKyAgICB0ZXN0ZmlsZSBcCisgICAgdGhyZWFkcyBcCisgICAgdGltZW1hYyBcCisgICAgdGltZXRlc3QgXAorICAgIHRwZCBcCisgICAgdWRwc3J2IFwKKyAgICB2ZXJjaGVjayBcCisgICAgdmVyc2lvbiBcCisgICAgd3JpdGV2IFwKKyAgICB4bm90aWZ5IFwKKyAgICB6ZXJvbGVuIgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCW9lX3J1bm1ha2UgQ1JPU1NfQ09NUElMRT0xIENGTEFHUz0iLURYUF9VTklYIiBMREZMQUdTPSIiIENDPWdjYyAtQyBjb25maWcgZXhwb3J0Cit9CisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCW9lX3J1bm1ha2UgLUMgcHIvdGVzdHMKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtRCAke1dPUktESVJ9L25zcHIucGMuaW4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FUFJFRklYOiR7cHJlZml4fTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRUxJQkRJUjoke2xpYmRpcn06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VJTkNESVI6JHtpbmNsdWRlZGlyfTpnICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRUVYRUNQUkVGSVg6JHtleGVjX3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisKKyAgICBta2RpciAtcCAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9wci90ZXN0cy9ydW50ZXN0cy5wbCAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9wci90ZXN0cy9ydW50ZXN0cy5zaCAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKKyAgICBjZCAke0J9L3ByL3Rlc3RzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7VEVTVFN9ICR7RH0ke2xpYmRpcn0vbnNwci90ZXN0cworCisgICAgIyBkZWxldGUgY29tcGlsZS1ldC5wbCBhbmQgcGVyci5wcm9wZXJ0aWVzIGZyb20gJHtiaW5kaXJ9IGJlY2F1c2UgdGhlc2UgYXJlCisgICAgIyBvbmx5IHVzZWQgdG8gZ2VuZXJhdGUgcHJlcnIuYyBhbmQgcHJlcnIuaCBmaWxlcyBmcm9tIHByZXJyLmV0IGF0IGNvbXBpbGUKKyAgICAjIHRpbWUKKyAgICBybSAke0R9JHtiaW5kaXJ9L2NvbXBpbGUtZXQucGwgJHtEfSR7YmluZGlyfS9wcmVyci5wcm9wZXJ0aWVzCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqLnNvIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7YmluZGlyfS8qICR7bGliZGlyfS9uc3ByL3Rlc3RzLyogJHtsaWJkaXJ9L3BrZ2NvbmZpZyBcCisgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8qICR7ZGF0YWRpcn0vYWNsb2NhbC8qICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L25zcHIvdGVzdHMvLmRlYnVnLyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmNlOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzLW15aG9zdG5hbWUvbnNzLW15aG9zdG5hbWVfMC4zLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiTmFtZSBTZXJ2aWNlIFN3aXRjaCBtb2R1bGUgZm9yIHJlc29sdmluZyB0aGUgbG9jYWwgaG9zdG5hbWUiCitERVNDUklQVElPTiA9ICJwbHVnaW4gZm9yIHRoZSBHTlUgTmFtZSBTZXJ2aWNlIFN3aXRjaCAoTlNTKSBmdW5jdGlvbmFsaXR5IG9mIFwKK3RoZSBHTlUgQyBMaWJyYXJ5IChnbGliYykgcHJvdmlkaW5nIGhvc3QgbmFtZSByZXNvbHV0aW9uIGZvciB0aGUgbG9jYWxseSBcCitjb25maWd1cmVkIHN5c3RlbSBob3N0bmFtZSBhcyByZXR1cm5lZCBieSBnZXRob3N0bmFtZSgyKS4iCitIT01FUEFHRSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9uc3MtbXlob3N0bmFtZS8iCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW15aG9zdG5hbWUvbnNzLW15aG9zdG5hbWUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDRhYjlhYzM2YzA1M2FiOGZiODM2ZGIxY2JkNGE0OGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmJhNzQ0ZWE4ZDU3OGQxYzU3Yzg1ODg0ZTk0YTMwNDJlZTE3ODQzYTUyOTQ0MzRkM2E3ZjZjNGQ2N2U3Y2FmMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHN5c3RlbWQgaGFzIGl0cyBvd24gY29weSBvZiBuc3MtbXlob3N0bmFtZQorQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bXlob3N0bmFtZVw+Ly8nIFwKKwkJLWUgJ3MvXCheaG9zdHM6LipcKVwoXDxmaWxlc1w+XClcKC4qXClcKFw8ZG5zXD5cKVwoLipcKS9cMVwyIG15aG9zdG5hbWUgXDNcNFw1LycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQorCitwa2dfcHJlcm1fJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCisJCS1lICcvXmhvc3RzOi9zL1xzKm15aG9zdG5hbWUvLycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LWluY29ycmVjdC1zaGViYW5nLW9mLXBlcmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtaW5jb3JyZWN0LXNoZWJhbmctb2YtcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc1OTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LWluY29ycmVjdC1zaGViYW5nLW9mLXBlcmwucGF0Y2gKQEAgLTAsMCArMSwxMTAgQEAKK25zczogZml4IGluY29ycmVjdCBzaGViYW5nIG9mIHBlcmwKKworUmVwbGFjZSBpbmNvcnJlY3Qgc2hlYmFuZyBvZiBwZXJsIHdpdGggYCMhL3Vzci9iaW4vZW52IHBlcmwnLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG5zcy9jbWQvc21pbWV0b29scy9zbWltZSAgfCAyICstCisgbnNzL2NvcmVjb25mL2NwZGlzdC5wbCAgICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvaW1wb3J0LnBsICAgIHwgMiArLQorIG5zcy9jb3JlY29uZi9qbmlyZWdlbi5wbCAgfCAyICstCisgbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbCB8IDIgKy0KKyBuc3MvY29yZWNvbmYvcmVsZWFzZS5wbCAgIHwgMiArLQorIG5zcy9jb3JlY29uZi92ZXJzaW9uLnBsICAgfCAyICstCisgbnNzL3Rlc3RzL2NsZWFuX3RieCAgICAgICB8IDIgKy0KKyBuc3MvdGVzdHMvcGF0aF91bmlxICAgICAgIHwgMiArLQorIDkgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lIGIvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lCistLS0gYS9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUKKysrKyBiL25zcy9jbWQvc21pbWV0b29scy9zbWltZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorIAorICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9jcGRpc3QucGwgYi9uc3MvY29yZWNvbmYvY3BkaXN0LnBsCitpbmRleCA4MDBlZGZiLi42NTIxODdmIDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL2NwZGlzdC5wbAorKysrIGIvbnNzL2NvcmVjb25mL2NwZGlzdC5wbAorQEAgLTEsNCArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2ltcG9ydC5wbCBiL25zcy9jb3JlY29uZi9pbXBvcnQucGwKK2luZGV4IGRkMmQxNzcuLjQyOGVhYTUgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvaW1wb3J0LnBsCisrKysgYi9uc3MvY29yZWNvbmYvaW1wb3J0LnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvam5pcmVnZW4ucGwgYi9uc3MvY29yZWNvbmYvam5pcmVnZW4ucGwKK2luZGV4IDIwMzkxODAuLjVmNGY2OWMgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvam5pcmVnZW4ucGwKKysrKyBiL25zcy9jb3JlY29uZi9qbmlyZWdlbi5wbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2xvY2FsL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorICMKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsIGIvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbAoraW5kZXggMzNkODBiYi4uMDFmYzA5NyAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwKKysrKyBiL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwgYi9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbAoraW5kZXggN2NkZTE5ZC4uYjVkZjJmNiAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsCisrKysgYi9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbAorQEAgLTEsNCArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwgYi9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbAoraW5kZXggZDJhNDk0Mi4uNzkzNTlmZSAxMDA2NDQKKy0tLSBhL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsCisrKysgYi9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL3NiaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL3Rlc3RzL2NsZWFuX3RieCBiL25zcy90ZXN0cy9jbGVhbl90YngKK2luZGV4IDRkZTk1NTUuLmE3ZGVmOWYgMTAwNzU1CistLS0gYS9uc3MvdGVzdHMvY2xlYW5fdGJ4CisrKysgYi9uc3MvdGVzdHMvY2xlYW5fdGJ4CitAQCAtMSw0ICsxLDQgQEAKKy0jISAvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjCitkaWZmIC0tZ2l0IGEvbnNzL3Rlc3RzL3BhdGhfdW5pcSBiL25zcy90ZXN0cy9wYXRoX3VuaXEKK2luZGV4IGYyOWY2MGEuLjA4ZmJmZmEgMTAwNzU1CistLS0gYS9uc3MvdGVzdHMvcGF0aF91bmlxCisrKysgYi9uc3MvdGVzdHMvcGF0aF91bmlxCitAQCAtMSw0ICsxLDQgQEAKKy0jISAvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NmRlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0ZpeCBuc3MgbXVsdGlsaWIgYnVpbGQgb24gb3BlblNVU0UgMTEueCAzMmJpdAorCitXaGlsZSBidWlsZGluZyBsaWI2NC1uc3Mgb24gb3BlblNVU0UgMTEueCAzMmJpdCwgdGhlIG5zaW5zdGFsbCB3aWxsCitmYWlsIHdpdGggZXJyb3I6CisKKyogbnNpbnN0YWxsLmM6MTowOiBzb3JyeSwgdW5pbXBsZW1lbnRlZDogNjQtYml0IG1vZGUgbm90IGNvbXBpbGVkCisKK0l0IGNhdXNlZCBieSB0aGUgJy1tNjQnIG9wdGlvbiB3aGljaCBwYXNzZWQgdG8gaG9zdCBnY2MuCisKK1RoZSBuc2luc3RhbGwgd2FzIGJ1aWx0IGZpcnN0IHdoaWxlIG5zcyBzdGFydGluZyB0byBidWlsZCwgaXQgb25seSBydW5zCitvbiBob3N0IHRvIGluc3RhbGwgYnVpbHQgZmlsZXMsIGl0IGRvZXNuJ3QgbmVlZCBhbnkgY3Jvc3MtY29tcGxpbmcgb3IKK211bHRpbGliIGJ1aWxkIG9wdGlvbnMuIEp1c3QgY2xlYW4gdGhlIEFSQ0hGTEFHIGFuZCBMREZMQUdTIHRvIGZpeCB0aGlzCitlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZSBiL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUKK2luZGV4IDE4NTBiY2IuLjVhZWU4NGYgMTAwNjQ0CistLS0gYS9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCisrKysgYi9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCitAQCAtMTgsNiArMTgsMTIgQEAgSU5URVJOQUxfVE9PTFMgID0gMQorIAorIGluY2x1ZGUgJChERVBUSCkvY29yZWNvbmYvY29uZmlnLm1rCisgCisrIyBuc2luc3RhbGwgaXMgdW5maXQgZm9yIGNyb3NzLWNvbXBpbGluZy9tdWx0aWxpYi1idWlsZCBzaW5jZSBpdCB3YXMKKysjIGFsd2F5cyBydW4gb24gbG9jYWwgaG9zdCB0byBpbnN0YWxsIGJ1aWx0IGZpbGVzLiBUaGlzIGNoYW5nZSBpbnRlbmRzCisrIyB0byBjbGVhbiB0aGUgJy1tNjQnIGZyb20gQVJDSEZMQUcgYW5kIExERkxBR1MuCisrQVJDSEZMQUcgPQorK0xERkxBR1MgPQorKworIGlmZXEgKCwkKGZpbHRlci1vdXQgT1MyIFdJTiUsJChPU19UQVJHRVQpKSkKKyBQUk9HUkFNCQk9CisgZWxzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjM1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtc3VwcG9ydC1jcm9zcy1jb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorbnNzOiBmaXggc3VwcG9ydCBjcm9zcyBjb21waWxpbmcKKworTGV0IHNvbWUgbWFrZSB2YXJpYWJsZXMgYmUgYXNzaWduZWQgZnJvbSBvdXRzaWRlIG1ha2VmaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBuc3MvY29yZWNvbmYvTGludXgubWsgICB8IDEyICsrKysrKysrKysrLQorIG5zcy9jb3JlY29uZi9hcmNoLm1rICAgIHwgIDIgKy0KKyBuc3MvbGliL2ZyZWVibC9NYWtlZmlsZSB8ICA2ICsrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9MaW51eC5tayBiL25zcy9jb3JlY29uZi9MaW51eC5taworLS0tIGEvbnNzL2NvcmVjb25mL0xpbnV4Lm1rCisrKysgYi9uc3MvY29yZWNvbmYvTGludXgubWsKK0BAIC0xNiwxMSArMTYsMjEgQEAgaWZlcSAoJChVU0VfUFRIUkVBRFMpLDEpCisgCUlNUExfU1RSQVRFR1kgPSBfUFRICisgZW5kaWYKKyAKKytpZm5kZWYgQ0MKKyBDQwkJCT0gZ2NjCisrZW5kaWYKKysKKytpZmRlZiBDWFgKKytDQ0MJCQk9ICQoQ1hYKQorK2Vsc2UKKyBDQ0MJCQk9IGcrKworK2VuZGlmCisrCisraWZuZGVmIFJBTkxJQgorIFJBTkxJQgkJCT0gcmFubGliCisrZW5kaWYKKyAKKy1ERUZBVUxUX0NPTVBJTEVSID0gZ2NjCisrREVGQVVMVF9DT01QSUxFUiA9ICQoQ0MpCisgCisgaWZlcSAoJChPU19UQVJHRVQpLEFuZHJvaWQpCisgaWZuZGVmIEFORFJPSURfTkRLCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2FyY2gubWsgYi9uc3MvY29yZWNvbmYvYXJjaC5taworaW5kZXggNjU1NzM0OC4uYjcyMjQxMiAxMDA2NDQKKy0tLSBhL25zcy9jb3JlY29uZi9hcmNoLm1rCisrKysgYi9uc3MvY29yZWNvbmYvYXJjaC5taworQEAgLTM3LDcgKzM3LDcgQEAgT1NfVEVTVCA6PSAkKHNoZWxsIHVuYW1lIC1tKQorIGlmZXEgKCQoT1NfVEVTVCksaTg2cGMpCisgICAgIE9TX1JFTEVBU0UgOj0gJChzaGVsbCB1bmFtZSAtcilfJChPU19URVNUKQorIGVsc2UKKy0gICAgT1NfUkVMRUFTRSA6PSAkKHNoZWxsIHVuYW1lIC1yKQorKyAgICBPU19SRUxFQVNFID89ICQoc2hlbGwgdW5hbWUgLXIpCisgZW5kaWYKKyAKKyAjCitkaWZmIC0tZ2l0IGEvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUgYi9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZQoraW5kZXggMGQyOTNmMS4uNjc4ZjUwNiAxMDA2NDQKKy0tLSBhL25zcy9saWIvZnJlZWJsL01ha2VmaWxlCisrKysgYi9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZQorQEAgLTM2LDYgKzM2LDEyIEBAIGlmZGVmIFVTRV82NAorIAlERUZJTkVTICs9IC1ETlNTX1VTRV82NAorIGVuZGlmCisgCisraWZlcSAoJChPU19URVNUKSxtaXBzKQorK2lmbmRlZiBVU0VfNjQKKysJREVGSU5FUyArPSAtRE5TX1BUUl9MRV8zMgorK2VuZGlmCisrZW5kaWYKKysKKyBpZmRlZiBVU0VfQUJJMzJfRlBVCisgCURFRklORVMgKz0gLUROU1NfVVNFX0FCSTMyX0ZQVQorIGVuZGlmCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3Mtbm8tcnBhdGgtZm9yLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MWRjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorbnNzOm5vIHJwYXRoIGZvciBjcm9zcyBjb21waWxpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgbnNzL2NtZC9wbGF0bGlicy5tayB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uc3MvY21kL3BsYXRsaWJzLm1rIGIvbnNzL2NtZC9wbGF0bGlicy5taworLS0tIGEvbnNzL2NtZC9wbGF0bGlicy5taworKysrIGIvbnNzL2NtZC9wbGF0bGlicy5taworQEAgLTE4LDkgKzE4LDkgQEAgZW5kaWYKKyAKKyBpZmVxICgkKE9TX0FSQ0gpLCBMaW51eCkKKyBpZmVxICgkKFVTRV82NCksIDEpCistRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliNjQ6L29wdC9zdW4vcHJpdmF0ZS9saWI2NDokJE9SSUdJTi8uLi9saWInCisrI0VYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjY0Oi9vcHQvc3VuL3ByaXZhdGUvbGliNjQ6JCRPUklHSU4vLi4vbGliJworIGVsc2UKKy1FWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI6L29wdC9zdW4vcHJpdmF0ZS9saWInCisrI0VYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjovb3B0L3N1bi9wcml2YXRlL2xpYicKKyBlbmRpZgorIGVuZGlmCisgCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MucGMuaW4gYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDBmNjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MucGMuaW4KQEAgLTAsMCArMSwxMSBAQAorcHJlZml4PU9FUFJFRklYCitleGVjX3ByZWZpeD1PRUVYRUNQUkVGSVgKK2xpYmRpcj1PRUxJQkRJUgoraW5jbHVkZWRpcj1PRUlOQ0RJUgorCitOYW1lOiBOU1MKK0Rlc2NyaXB0aW9uOiBOZXR3b3JrIFNlY3VyaXR5IFNlcnZpY2VzCitWZXJzaW9uOiAlTlNTX1ZFUlNJT04lCitSZXF1aXJlczogbnNwciA+PSAlTlNQUl9WRVJTSU9OJQorTGliczogLWxzc2wzIC1sc21pbWUzIC1sbnNzMyAtbHNvZnRva24zIC1sbnNzdXRpbDMKK0NmbGFnczogLUlPRUlOQ0RJUgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9zaWdubGlicy5zaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0ZTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKKyMgc2lnbmxpYnMuc2gKKyMKKyMgKGMpMjAxMCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgcmVnZW5lcmF0ZXMgdGhlIC5jaGsgZmlsZXMgZm9yIHRoZSBOU1MgbGlicmFyaWVzIHRoYXQgcmVxdWlyZSBpdAorIyBzaW5jZSB0aGUgb25lcyB0aGF0IGFyZSBidWlsdCBoYXZlIGluY29ycmVjdCBjaGVja3N1bXMgdGhhdCB3ZXJlCisjIGNhbGN1bGF0ZWQgb24gdGhlIGhvc3Qgd2hlcmUgdGhleSByZWFsbHkgbmVlZCB0byBiZSBkb25lIG9uIHRoZQorIyB0YXJnZXQKKworQ0hLX0ZJTEVTPWBscyAvbGliKi8qLmNoayAvdXNyL2xpYiovKi5jaGsgMj4vZGV2L251bGxgCitTSUdOX0JJTkFSWT1gd2hpY2ggc2hsaWJzaWduYAorZm9yIEkgaW4gJENIS19GSUxFUworZG8KKyAgICAgICBETj1gZGlybmFtZSAkSWAKKyAgICAgICBCTj1gYmFzZW5hbWUgJEkgLmNoa2AKKyAgICAgICBGTj0kRE4vJEJOLnNvCisgICAgICAgJFNJR05fQklOQVJZIC1pICRGTgorZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjE5LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzXzMuMTkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E0YTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjE5LjIuYmIKQEAgLTAsMCArMSwyMjMgQEAKK1NVTU1BUlkgPSAiTW96aWxsYSdzIFNTTCBhbmQgVExTIGltcGxlbWVudGF0aW9uIgorREVTQ1JJUFRJT04gPSAiTmV0d29yayBTZWN1cml0eSBTZXJ2aWNlcyAoTlNTKSBpcyBhIHNldCBvZiBsaWJyYXJpZXMgXAorZGVzaWduZWQgdG8gc3VwcG9ydCBjcm9zcy1wbGF0Zm9ybSBkZXZlbG9wbWVudCBvZiBcCitzZWN1cml0eS1lbmFibGVkIGNsaWVudCBhbmQgc2VydmVyIGFwcGxpY2F0aW9ucy4gXAorQXBwbGljYXRpb25zIGJ1aWx0IHdpdGggTlNTIGNhbiBzdXBwb3J0IFNTTCB2MiBhbmQgdjMsIFwKK1RMUywgUEtDUyA1LCBQS0NTIDcsIFBLQ1MgMTEsIFBLQ1MgMTIsIFMvTUlNRSwgWC41MDkgXAordjMgY2VydGlmaWNhdGVzLCBhbmQgb3RoZXIgc2VjdXJpdHkgc3RhbmRhcmRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvc2VjdXJpdHkvcGtpL25zcy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTVBMLTIuMCB8IChNUEwtMi4wICYgR1BMLTIuMCspIHwgKE1QTC0yLjAgJiBMR1BMLTIuMSspIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9uc3MvQ09QWUlORzttZDU9M2IxZTg4ZTFiOWMwYjVhNGIyODgxZDQ2Y2NlMDZhMTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFO21kNT00OTFmMTU4ZDA5ZDk0ODQ2NmFmY2U4NWQ2ZjFmZTE4ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9uc3MvbGliL2ZyZWVibC9tcGkvZG9jL0xJQ0VOU0UtTVBMO21kNT01ZDQyNWM4ZjMxNTdkYmYyMTJkYjJlYzUzZDllNTEzMiIKKworU1JDX1VSSSA9ICJcCisgICAgaHR0cDovL2Z0cC5tb3ppbGxhLm9yZy9wdWIvbW96aWxsYS5vcmcvc2VjdXJpdHkvbnNzL3JlbGVhc2VzL05TU18zXzE5XzJfUlRNL3NyYy8ke0JQfS50YXIuZ3ogXAorICAgIGZpbGU6Ly9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3MtZml4LWluY29ycmVjdC1zaGViYW5nLW9mLXBlcmwucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaCBcCisgICAgZmlsZTovL25zcy5wYy5pbiBcCisgICAgZmlsZTovL3NpZ25saWJzLnNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImIwMmZmZDFlOGU4ZWY1Zjg1MTJmYTAyZDhjYTlkYjNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEzMDY2NjNlOGY2MWQ4NDQ5YWQ4Y2JjZmZhYjc0M2E2MDRkY2Q5ZjZmMzQyMzJjMjEwODQ3YzUxZGNlMmM5YWUiCisKK2luaGVyaXQgc2l0ZWluZm8KKworREVQRU5EUyA9ICJzcWxpdGUzIG5zcHIgemxpYiBuc3MtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAic3FsaXRlMy1uYXRpdmUgbnNwci1uYXRpdmUgemxpYi1uYXRpdmUiCitSREVQRU5EU18ke1BOfS1zbWltZSA9ICJwZXJsIgorCitURCA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0IgorVERTID0gIiR7U30vdGVudGF0aXZlLWRpc3Qtc3RhZ2luZyIKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgZXhwb3J0IE5TUFJfSU5DTFVERV9ESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9CisgICAgZXhwb3J0IE5TUFJfTElCX0RJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0KK30KKworZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICBleHBvcnQgTERGTEFHUz0iIgorfQorCitkb19jb21waWxlKCkgeworICAgIGV4cG9ydCBDUk9TU19DT01QSUxFPTEKKyAgICBleHBvcnQgTkFUSVZFX0NDPSJnY2MiCisgICAgZXhwb3J0IEJVSUxEX09QVD0xCisKKyAgICBleHBvcnQgRlJFRUJMX05PX0RFUEVORD0xCisgICAgZXhwb3J0IEZSRUVCTF9MT1dIQVNIPTEKKworICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9CisgICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKKyAgICBleHBvcnQgTlNfVVNFX0dDQz0xCisgICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCisgICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKKworICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAorICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKKyAgICBleHBvcnQgT1NfQVJDSD1MaW51eAorCisgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGMKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGM2NAorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPW1pcHMKKyAgICBlbHNlCisgICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgorICAgIGZpCisKKyAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFXzY0PTEKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFX1gzMj0xCisgICAgZmkKKworICAgICMgV2UgY2FuIG1vZGlmeSBDQyBpbiB0aGUgZW52aXJvbm1lbnQsIGJ1dCBpZiB3ZSBzZXQgaXQgdmlhIGFuCisgICAgIyBhcmd1bWVudCB0byBtYWtlLCBuc2luc3RhbGwsIGEgaG9zdCBwcm9ncmFtLCB3aWxsIGFsc28gYnVpbGQgd2l0aCBpdCEKKyAgICAjCisgICAgZXhwb3J0IENDPSIke0NDfSAtZyIKKyAgICBtYWtlIC1DIC4vbnNzIENDQz0iJHtDWFh9IC1nIiBcCisgICAgICAgIE9TX1RFU1Q9JHtPU19URVNUfQorfQorCisKK2RvX2luc3RhbGxfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgZXhwb3J0IExERkxBR1M9IiIKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCisgICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgorICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQorCisgICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQorCisgICAgZXhwb3J0IExJQkRJUj0ke2xpYmRpcn0KKyAgICBleHBvcnQgTU9aSUxMQV9DTElFTlQ9MQorICAgIGV4cG9ydCBOU19VU0VfR0NDPTEKKyAgICBleHBvcnQgTlNTX1VTRV9TWVNURU1fU1FMSVRFPTEKKyAgICBleHBvcnQgTlNTX0VOQUJMRV9FQ0M9MQorCisgICAgZXhwb3J0IE9TX1JFTEVBU0U9My40CisgICAgZXhwb3J0IE9TX1RBUkdFVD1MaW51eAorICAgIGV4cG9ydCBPU19BUkNIPUxpbnV4CisKKyAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYworICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGM2NCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPXBwYzY0CisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAibWlwcyIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzZWwiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0IiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NGVsIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9bWlwcworICAgIGVsc2UKKyAgICAgICAgT1NfVEVTVD0iJHtUQVJHRVRfQVJDSH0iCisgICAgZmkKKyAgICBpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFXzY0PTEKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIC1hICIke1NJVEVJTkZPX0JJVFN9IiA9ICIzMiIgXTsgdGhlbgorICAgICAgICBleHBvcnQgVVNFX1gzMj0xCisgICAgZmkKKworICAgIG1ha2UgLUMgLi9uc3MgXAorICAgICAgICBDQ0M9IiR7Q1hYfSIgXAorICAgICAgICBPU19URVNUPSR7T1NfVEVTVH0gXAorICAgICAgICBTT1VSQ0VfTElCX0RJUj0iJHtURH0vJHtsaWJkaXJ9IiBcCisgICAgICAgIFNPVVJDRV9CSU5fRElSPSIke1REfS8ke2JpbmRpcn0iIFwKKyAgICAgICAgaW5zdGFsbAorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8KKyAgICBmb3IgZmlsZSBpbiAke1N9L2Rpc3QvKi5PQkovbGliLyouc287IGRvCisgICAgICAgIGVjaG8gIkluc3RhbGxpbmcgYGJhc2VuYW1lICRmaWxlYC4uLiIKKyAgICAgICAgY3AgJGZpbGUgICR7RH0vJHtsaWJkaXJ9LworICAgIGRvbmUKKworICAgIGZvciBzaGFyZWRfbGliIGluICR7VER9LyR7bGliZGlyfS8qLnNvLio7IGRvCisgICAgICAgIGlmIFsgLWYgJHNoYXJlZF9saWIgXTsgdGhlbgorICAgICAgICAgICAgY3AgJHNoYXJlZF9saWIgJHtEfS8ke2xpYmRpcn0KKyAgICAgICAgICAgIGxuIC1zZiAkKGJhc2VuYW1lICRzaGFyZWRfbGliKSAke0R9LyR7bGliZGlyfS8kKGJhc2VuYW1lICRzaGFyZWRfbGliIC4xb2UpCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIGZvciBzaGFyZWRfbGliIGluICR7VER9LyR7bGliZGlyfS8qLnNvOyBkbworICAgICAgICBpZiBbIC1mICRzaGFyZWRfbGliIC1hICEgLWUgJHtEfS8ke2xpYmRpcn0vJHNoYXJlZF9saWIgXTsgdGhlbgorICAgICAgICAgICAgY3AgJHNoYXJlZF9saWIgJHtEfS8ke2xpYmRpcn0KKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtpbmNsdWRlZGlyfS9uc3MzCisgICAgaW5zdGFsbCAtbSA2NDQgLXQgJHtEfS8ke2luY2x1ZGVkaXJ9L25zczMgZGlzdC9wdWJsaWMvbnNzLyoKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKyAgICBmb3IgYmluYXJ5IGluICR7VER9LyR7YmluZGlyfS8qOyBkbworICAgICAgICBpbnN0YWxsIC1tIDc1NSAtdCAke0R9LyR7YmluZGlyfSAkYmluYXJ5CisgICAgZG9uZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIENyZWF0ZSBlbXB0eSAuY2hrIGZpbGVzIGZvciB0aGUgTlNTIGxpYnJhcmllcyBhdCBidWlsZCB0aW1lLiBUaGV5IGNvdWxkCisgICAgIyBiZSByZWdlbmVyYXRlZCBhdCB0YXJnZXQncyBib290IHRpbWUuCisgICAgZm9yIGZpbGUgaW4gbGlic29mdG9rbjMuY2hrIGxpYmZyZWVibDMuY2hrIGxpYm5zc2RibTMuY2hrOyBkbworICAgICAgICB0b3VjaCAke0R9LyR7bGliZGlyfS8kZmlsZQorICAgICAgICBjaG1vZCA3NTUgJHtEfS8ke2xpYmRpcn0vJGZpbGUKKyAgICBkb25lCisgICAgaW5zdGFsbCAtRCAtbSA3NTUgJHtXT1JLRElSfS9zaWdubGlicy5zaCAke0R9LyR7YmluZGlyfS9zaWdubGlicy5zaAorCisgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KKyAgICBzZWQgJ3MvJU5TU19WRVJTSU9OJS8ke1BWfS8nICR7V09SS0RJUn0vbnNzLnBjLmluIHwgc2VkICdzLyVOU1BSX1ZFUlNJT04lLzQuOS4yLycgPiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRVBSRUZJWDoke3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRUVYRUNQUkVGSVg6JHtleGVjX3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRUxJQkRJUjoke2xpYmRpcn06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKKyAgICBzZWQgLWkgczpPRUlOQ0RJUjoke2luY2x1ZGVkaXJ9L25zczM6ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3MucGMKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICMgQ3JlYXRlIGEgYmxhbmsgY2VydGlmaWNhdGUKKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvCisgICAgdG91Y2ggLi9lbXB0eV9wYXNzd29yZAorICAgIGNlcnR1dGlsIC1OIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3BraS9uc3NkYi8gLWYgLi9lbXB0eV9wYXNzd29yZAorICAgIGNobW9kIDY0NCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvKi5kYgorICAgIHJtIC4vZW1wdHlfcGFzc3dvcmQKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgICAgICBmb3IgSSBpbiAkRC8ke2xpYmRpcn0vbGliKi5jaGs7IGRvCisgICAgICAgICAgICBETj1gZGlybmFtZSAkSWAKKyAgICAgICAgICAgIEJOPWBiYXNlbmFtZSAkSSAuY2hrYAorICAgICAgICAgICAgRk49JEROLyRCTi5zbworICAgICAgICAgICAgc2hsaWJzaWduIC1pICRGTgorCSAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkgICAgICAgZXhpdCAxCisJICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhpdCAwCisgICAgZmkKKyAgICBzaWdubGlicy5zaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tc21pbWUiCitGSUxFU18ke1BOfS1zbWltZSA9ICJcCisgICAgJHtiaW5kaXJ9L3NtaW1lIFwKKyIKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke3N5c2NvbmZkaXJ9IFwKKyAgICAke2JpbmRpcn0gXAorICAgICR7bGliZGlyfS9saWIqLmNoayBcCisgICAgJHtsaWJkaXJ9L2xpYiouc28gXAorICAgICIKK0ZJTEVTXyR7UE59LWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L25zcyBcCisgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy8qIFwKKyAgICAke2luY2x1ZGVkaXJ9LyogXAorICAgICIKKyMgRklMRVNfJHtQTn0tZGJnIGlzIHBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcDExLWtpdC9wMTEta2l0XzAuMjIuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkOTYyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIHdheSB0byBsb2FkIGFuZCBlbnVtZXJhdGUgUEtDUyMxMSBtb2R1bGVzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wMjkzMzg4N2Y2MDk4MDdmYmI1N2FhNDIzN2QxNGE1MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworREVQRU5EUyA9ICJsaWJ0YXNuMSBsaWJmZmkiCisKK1NSQ19VUkkgPSAiaHR0cDovL3AxMS1nbHVlLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiNGU5YmVhMTEwNjYyOGZmYjgyMGJkYWQyNGE4MTlmYWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWYzYTMzOWZjZjZhYTBlMzJjOGMyM2Y3OWJhNzE5MWU1NzMxMmJlMmJkYThiMjRlNmQxMjFjMjY3MDUzOWE1YyIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIgXAorICAgICR7bGliZGlyfS9wMTEta2l0LXByb3h5LnNvIFwKKyAgICAke2xpYmRpcn0vcGtjczExL3AxMS1raXQtdHJ1c3Quc28gXAorIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vcGtjczExLyoubGEiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9wa2NzMTEvLmRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9waW5lbnRyeS9waW5lbnRyeV8wLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODM2Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIHNpbXBsZSBQSU4gb3IgcGFzc3BocmFzZSBlbnRyeSBkaWFsb2dzIgorREVTQ1JJUFRJT04gPSAiXAorCVBpbmVudHJ5IGlzIGEgY29sbGVjdGlvbiBvZiBzaW1wbGUgUElOIG9yIHBhc3NwaHJhc2UgZW50cnkgZGlhbG9ncyB3aGljaCBcCisJdXRpbGl6ZSB0aGUgQXNzdWFuIHByb3RvY29sIGFzIGRlc2NyaWJlZCBieSB0aGUgYWVneXB0ZW4gcHJvamVjdDsgc2VlIFwKKwlodHRwOi8vd3d3LmdudXBnLm9yZy9hZWd5cHRlbi8gZm9yIGRldGFpbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL3BpbmVudHJ5L2luZGV4LmVuLmh0bWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2JiZDc5NGUyYTBhMjg5YjlkZmNjOWY1MTNkMTk5NmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjUxZDQ1NGY5MjExMTFiNTE1NmEyMjkxY2JmNzAyNzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmQ4YmMxNTkyY2ViMjJiYjQ5MmIwN2NiMjliMWIxNDBiYjg4MmM4NTllNjUwM2I5NzQyNTRjMGE0YjQxMzRkMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ycGF0aCBcCisJCSAgICAgICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAorICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHID8/PSAibmN1cnNlcyBsaWJjYXAiCisKK1BBQ0tBR0VDT05GSUdbbmN1cnNlc10gPSAiLS1lbmFibGUtbmN1cnNlcyAgLS13aXRoLW5jdXJzZXMtaW5jbHVkZS1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0sIC0tZGlzYWJsZS1uY3Vyc2VzLCBuY3Vyc2VzIgorUEFDS0FHRUNPTkZJR1tsaWJjYXBdID0gIi0td2l0aC1saWJjYXAsIC0td2l0aG91dC1saWJjYXAsIGxpYmNhcCIKK1BBQ0tBR0VDT05GSUdbcXQ0XSA9ICItLWVuYWJsZS1waW5lbnRyeS1xdDQsIC0tZGlzYWJsZS1waW5lbnRyeS1xdDQsIHF0NC14MTEiCitQQUNLQUdFQ09ORklHW3F0NF9jbGlwYm9hcmRdID0gIi0tZW5hYmxlLXBpbmVudHJ5LXF0NC1jbGlwYm9hcmQgLS1lbmFibGUtcGluZW50cnktcXQ0LCAtLWRpc2FibGUtcGluZW50cnktcXQ0LWNsaXBib2FyZCwgcXQ0LXgxMSIKK1BBQ0tBR0VDT05GSUdbZ3RrMl0gPSAiLS1lbmFibGUtcGluZW50cnktZ3RrMiwgLS1kaXNhYmxlLXBpbmVudHJ5LWd0azIsIGd0aysgZ2xpYi0yLjAiCisKKyNUbyB1c2UgbGlic2VjcmV0LCBhZGQgbWV0YS1nbm9tZQorUEFDS0FHRUNPTkZJR1tzZWNyZXRdID0gIi0tZW5hYmxlLWxpYnNlY3JldCwgLS1kaXNhYmxlLWxpYnNlY3JldCwgbGlic2VjcmV0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L2Rpc2FibGVfdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTZjZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L2Rpc2FibGVfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXNlIG9mICQodG9wX3NyY2RpcikgaW4gVEVTVFMgaXMgYW4gZXJyb3Igd2hpY2ggY2F1c2VzCithdXRvbWFrZS0xLjEzIHRvIGFib3J0LiBKdXN0IHJlbW92ZSB0ZXN0cy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHBvcHQtMS4xNi9NYWtlZmlsZS5hbSBwb3B0LTEuMTYvTWFrZWZpbGUuYW0KKy0tLSBwb3B0LTEuMTYvTWFrZWZpbGUuYW0JMjAxMC0wNS0wNCAyMzo1NTo1NC4wMDAwMDAwMDAgKzAzMDAKKysrKyBwb3B0LTEuMTYvTWFrZWZpbGUuYW0JMjAxMy0wMS0wMiAxMzozNDoyOS41NDAzNjEzOTEgKzAyMDAKK0BAIC0zNCwxMSArMzQsNiBAQAorCisgbm9pbnN0X1NDUklQVFMgPSB0ZXN0aXQuc2gKKworLVRFU1RTX0VOVklST05NRU5UID0gXAorLXRlc3QxPSIkKHRvcF9idWlsZGRpcikvdGVzdDEiCistCistVEVTVFMgPSAkKHRvcF9zcmNkaXIpL3Rlc3RpdC5zaAorLQorIGluY2x1ZGVfSEVBREVSUyA9IHBvcHQuaAorCisgdXNybGliZGlyID0gJChsaWJkaXIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcGtnY29uZmlnX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wa2djb25maWdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGRiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcGtnY29uZmlnX2ZpeC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5zdGFsbCB0aGUgcGtnY29uZmlnIGZpbGUgaW50byBsaWJkaXIuCisKKy0tLSBwb3B0LTEuMTYub3JpZy9NYWtlZmlsZS5hbQkyMDEyLTA0LTI2IDEzOjQyOjU0LjAyMTEzOTgxMyArMDgwMAorKysrIHBvcHQtMS4xNi9NYWtlZmlsZS5hbQkyMDEyLTA0LTI2IDEzOjM2OjAzLjU1MjA5NjkxMiArMDgwMAorQEAgLTQ3LDcgKzQ3LDcgQEAKKyBsaWJwb3B0X2xhX1NPVVJDRVMgPSBwb3B0LmMgcG9wdHBhcnNlLmMgcG9wdGNvbmZpZy5jIHBvcHRoZWxwLmMgcG9wdGludC5jCisgbGlicG9wdF9sYV9MREZMQUdTID0gLW5vLXVuZGVmaW5lZCBATFRMSUJJTlRMQCBATFRMSUJJQ09OVkAKKyAKKy1wa2djb25maWdkaXIgPSAkKHByZWZpeCkvbGliL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKyBwa2djb25maWdfREFUQSA9IHBvcHQucGMKKyAKKyBpZiBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiY2E5NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9wb3B0X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKKworVGhpcyBwYXRjaCBhdm9pZHMgdGhpcyBlcnJvciB3aXRoIGF1dG9tYWtlIDEuMTI6CisKK3wgY29uZmlndXJlLmFjOjQ5OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAyCisKK0luZGV4OiBwb3B0LTEuMTYvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcG9wdC0xLjE2Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcG9wdC0xLjE2L2NvbmZpZ3VyZS5hYworQEAgLTQ2LDcgKzQ2LDYgQEAgQUNfR0NDX1RSQURJVElPTkFMCisgQUNfU1lTX0xBUkdFRklMRQorIAorIEFDX0lTQ19QT1NJWAorLUFNX0NfUFJPVE9UWVBFUworIAorIEFDX0NIRUNLX0hFQURFUlMoZmxvYXQuaCBmbm1hdGNoLmggZ2xvYi5oIGxhbmdpbmZvLmggbGliaW50bC5oIG1jaGVjay5oIHVuaXN0ZC5oKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHRfMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjEzYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBwYXJzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zIgorSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jYjA2MTNjMzBhZjJhODI0OWI4ZGNjNjdkM2VkYjA2ZCIKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly9ycG01Lm9yZy9maWxlcy9wb3B0L3BvcHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzc0M2JlZWZhM2RkNjI0N2E3M2Y4ZjdhMzJjMTRjMzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTcyOGVkMjk2ZmU5ZjA2OWEwZTAwNTAwM2MzZDZiMmRkZTNkOWNhZDQ1MzQyMmExMGQ2NTU4NjE2ZDMwNGNjOCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvZmlsZXMvcHRlc3QtcnVubmVyIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE4ZjExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lcgpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKK0FOWUZBSUxFRD1ubworZWNobyAiU1RBUlQ6ICQwIgorCitmb3IgbGliZGlyIGluIC91c3IvbGliKgorZG8KKworICAgIFsgISAtZCAiJGxpYmRpciIgXSAmJiBjb250aW51ZQorCisgICAgZm9yIHggaW4gYGxzIC1kICRsaWJkaXIvKi9wdGVzdCAyPi9kZXYvbnVsbGAKKyAgICBkbworICAgICAgICBbICEgLWYgJHgvcnVuLXB0ZXN0IF0gJiYgY29udGludWUKKyAgICAgICAgWyAtaCBgZGlybmFtZSAkeGAgXSAmJiBjb250aW51ZQorCisgICAgICAgIGRhdGUgIislWS0lbS0lZFQlSDolTSIKKyAgICAgICAgZWNobyAiQkVHSU46ICR4IgorICAgICAgICBjZCAiJHgiCisgICAgICAgIC4vcnVuLXB0ZXN0IHx8IEFOWUZBSUxFRD15ZXMKKyAgICAgICAgZWNobyAiRU5EOiAkeCIKKyAgICAgICAgZGF0ZSAiKyVZLSVtLSVkVCVIOiVNIgorICAgIGRvbmUKK2RvbmUKK2VjaG8gIlNUT1A6ICQwIgoraWYgWyAiJEFOWUZBSUxFRCIgPSAieWVzIiAgXTsgdGhlbgorICAgIGV4aXQgMQorZmkKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGVzdC1ydW5uZXIvcHRlc3QtcnVubmVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzFiMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8xLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJBIHNpbXBsZSBzaGVsbCBzY3JpcHQgdG8gcnVuIGFsbCBpbnN0YWxsZWQgcHRlc3RzIgorREVTQ1JJUFRJT04gPSAiVGhlIHB0ZXN0LXJ1bm5lciBwYWNrYWdlIGluc3RhbGxzIGEgcHRlc3QtcnVubmVyIFwKK3NoZWxsIHNjcmlwdCB3aGljaCBsb29wcyB0aHJvdWdoIGFsbCBpbnN0YWxsZWQgcHRlc3QgdGVzdCBzdWl0ZXMgYW5kIFwKK3J1bnMgdGhlbSBpbiBzZXF1ZW5jZS4iCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL1B0ZXN0IgorU1JDX1VSSSArPSAiZmlsZTovL3B0ZXN0LXJ1bm5lciIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBta2RpciAtcCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHRlc3QtcnVubmVyICR7RH0ke2JpbmRpcn0KK30KKworZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9fYnVpbGRbbm9leGVjXSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EyOGFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgcGtnY29uZmlnIHN1cHBvcnQgdG8gcHRoLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBNYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTQ3LDYgKzQ3LDkgQEAgZGF0YWRpciAgICAgPSBAZGF0YWRpckAKKyAKKyBERVNURElSICAgICA9CisgCisrcGtnY29uZmlnZGlyID0gJHtsaWJkaXJ9L3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gcHRoLnBjCisrCisgIyMKKyAjIyAgX19fXyBUT09MIERFRklOSVRJT05TIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAjIworQEAgLTIxNiw3ICsyMTksNyBAQCB0ZXN0X3B0aHJlYWQ6IHRlc3RfcHRocmVhZC5vIHRlc3RfY29tbW9uLm8gbGlicHRocmVhZC5sYQorIAorICMgICBpbnN0YWxsIHRoZSBwYWNrYWdlCisgaW5zdGFsbDogYWxsLWZvci1pbnN0YWxsCistCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURACisrCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzIGluc3RhbGwtcHRoIEBJTlNUQUxMX1BUSFJFQURAIGluc3RhbGwtcGtnY29uZmlnREFUQQorIAlAdG91Y2ggLmRvbmUtaW5zdGFsbCA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAlAJChNQUtFKSAkKE1LRkxBR1MpIHdoYXQtbmV4dAorIGluc3RhbGwtZGlyczoKK0BAIC0yMjcsNiArMjMwLDcgQEAgaW5zdGFsbC1kaXJzOgorIAkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKG1hbmRpcikvbWFuMQorIAkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKG1hbmRpcikvbWFuMworIAkkKFNIVE9PTCkgbWtkaXIgLWYgLXAgLW0gNzU1ICQoREVTVERJUikkKGRhdGFkaXIpL2FjbG9jYWwKKysJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChwa2djb25maWdkaXIpCisgaW5zdGFsbC1wdGg6CisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDc1NSBwdGgtY29uZmlnICQoREVTVERJUikkKGJpbmRpcikvcHRoLWNvbmZpZworIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKXB0aC1jb25maWcuMSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvcHRoLWNvbmZpZy4xCitAQCAtMjQyLDEyICsyNDYsMTYgQEAgaW5zdGFsbC1wdGhyZWFkOgorIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKXB0aHJlYWQuMyAkKERFU1RESVIpJChtYW5kaXIpL21hbjMvcHRocmVhZC4zCisgCUB1bWFzayAwMjI7ICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgXAorIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyBsaWJwdGhyZWFkLmxhICQoREVTVERJUikkKGxpYmRpcikvbGlicHRocmVhZC5sYQorK2luc3RhbGwtcGtnY29uZmlnREFUQTogJChwa2djb25maWdfREFUQSkKKysJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQocGtnY29uZmlnX0RBVEEpICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJChwa2djb25maWdfREFUQSkKKyAKKyAjICAgdW5pbnN0YWxsIHRoZSBwYWNrYWdlCisgdW5pbnN0YWxsOgorLQlAJChNQUtFKSAkKE1LRkxBR1MpIEBVTklOU1RBTExfUFRIUkVBREAgdW5pbnN0YWxsLXB0aCB1bmluc3RhbGwtZGlycworKwlAJChNQUtFKSAkKE1LRkxBR1MpIHVuaW5zdGFsbC1wa2djb25maWdEQVRBIEBVTklOU1RBTExfUFRIUkVBREAgdW5pbnN0YWxsLXB0aCB1bmluc3RhbGwtZGlycworIAlAdG91Y2ggLmRvbmUtdW5pbnN0YWxsID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCUAkKE1BS0UpICQoTUtGTEFHUykgd2hhdC1uZXh0CisrdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6CisrCSQoUk0pICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJChwa2djb25maWdfREFUQSkKKyB1bmluc3RhbGwtcHRocmVhZDoKKyAJJChSTSkgJChERVNURElSKSQoYmluZGlyKS9wdGhyZWFkLWNvbmZpZworIAkkKFJNKSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvcHRocmVhZC1jb25maWcuMQorQEAgLTI3MSw2ICsyNzksNyBAQCB1bmluc3RhbGwtZGlyczoKKyAJLSQoUk1ESVIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCS0kKFJNRElSKSAkKERFU1RESVIpJChiaW5kaXIpID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCS0kKFJNRElSKSAkKERFU1RESVIpJChwcmVmaXgpID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisrCS0kKFJNRElSKSAkKERFU1RESVIpJChwa2djb25maWdkaXIpID4gL2Rldi9udWxsIDI+JjEgfHwkKFRSVUUpCisgCisgIyAgIHN0cmlwIGRvd24gdGhlIHNvdXJjZSB0cmVlIHRvIGl0cyBtaW5pbXVtCisgc3RyaXB0ZWFzZToKK0luZGV4OiBjb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY1Niw2ICs2NTYsMTMgQEAgcHRoX2FjbWFjLmggZG5sCisgY2htb2QgK3J4IHB0aHJlYWQtY29uZmlnCisgY2htb2QgK3J4IHB0aC1jb25maWcKKyApZG5sCisrCisrUFRIX1ZFUlNJT049YGVjaG8gJFBUSF9WRVJTSU9OX1NUUiB8IGN1dCAtZCcgJyAtZjFgCisrQUNfU1VCU1QoUFRIX1ZFUlNJT04pCisrCisrQUNfQ09ORklHX0ZJTEVTKFtwdGgucGNdKQorK0FDX09VVFBVVAorKworIGlmIHRlc3QgIi4kZW5hYmxlX3B0aHJlYWQiID0gLm5vOyB0aGVuCisgICAgIHJtIC1mIHB0aHJlYWQtY29uZmlnCisgICAgIHJtIC1mIHB0aHJlYWQuaAorSW5kZXg6IHB0aC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiL3B0aC5wYy5pbgorQEAgLTAsMCArMSwxNiBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorK2JpbmRpcj1AYmluZGlyQAorK21hbmRpcj1AbWFuZGlyQAorK2RhdGFkaXI9QGRhdGFkaXJACisrYWNkaXI9QGRhdGFkaXJAL2FjbG9jYWwKKysKKytOYW1lOiBwdGgKKytEZXNjcmlwdGlvbjogR05VIFBvcnRhYmxlIFRocmVhZHMKKytSZXF1aXJlczoKKytWZXJzaW9uOiBAUFRIX1ZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxwdGgKKytMaWJzLnByaXZhdGU6IAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CistLSAKKzEuNy41LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1maXgtcGFyYWxsZWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvZmlsZXMvcHRoLWZpeC1wYXJhbGxlbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVkYWZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbSBkZjA2YjgxNzA3NDVlYWMzNDdhY2I5NWY5ZjM3NGYyNTc2MjEyNTRmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDI5IEphbiAyMDE1IDE4OjExOjAwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlLmluOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgorKiBkb19jb21waWxlCisgcHRoX3VjdHguYzozMToxOTogZmF0YWwgZXJyb3I6IHB0aF9wLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAjaW5jbHVkZSAicHRoX3AuaCIKKyAgICAgICAgICAgICAgICAgICBeCitjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorbWFrZTogKioqIFtwdGhfdWN0eC5sb10gRXJyb3IgMQorCisqIGRvX2luc3RhbGw6CisgIGNwOiBjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSBgaW1hZ2UvdXNyL2xpYi9wa2djb25maWcvI0lOU1RAMTU1MDcjJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICA1ICsrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGRlMDM5MGQuLjM4MWEwZWUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yMTksNyArMjE5LDggQEAgdGVzdF9wdGhyZWFkOiB0ZXN0X3B0aHJlYWQubyB0ZXN0X2NvbW1vbi5vIGxpYnB0aHJlYWQubGEKKyAKKyAjICAgaW5zdGFsbCB0aGUgcGFja2FnZQorIGluc3RhbGw6IGFsbC1mb3ItaW5zdGFsbAorLQlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycyBpbnN0YWxsLXB0aCBASU5TVEFMTF9QVEhSRUFEQCBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLXB0aCBASU5TVEFMTF9QVEhSRUFEQCBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKyAJQHRvdWNoIC5kb25lLWluc3RhbGwgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJQCQoTUFLRSkgJChNS0ZMQUdTKSB3aGF0LW5leHQKKyBpbnN0YWxsLWRpcnM6CitAQCAtNDMyLDcgKzQzMyw3IEBAIFRBR1M6CisgIyMgIChBVVRPTUFUSUNBTExZIFVQREFURUQgLSBETyBOT1QgRURJVCkKKyAjIworIAorLSQoTE9CSlMpOiBNYWtlZmlsZQorKyQoTE9CSlMpOiBNYWtlZmlsZSBwdGhfcC5oCisgCisgIyBETyBOT1QgUkVNT1ZFCisgcHRoX2F0dHIubG86IHB0aF9hdHRyLmMgcHRoX3AuaCBwdGhfdmVycy5jIHB0aC5oIHB0aF9hY2RlZi5oIHB0aF9hY21hYy5oCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL3B0aF8yLjAuNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzNzc2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJHTlUgUG9ydGFibGUgVGhyZWFkcyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3B0aC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTEyO2VuZGxpbmU9MTU7bWQ1PWE0OGFmMTE0YTgwYzIyMmNhZmQzN2YyNDM3MGE3N2IxIgorUFIgPSAicjMiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgdWNfb3MgPSAocmUubWF0Y2goJy4qdWNsaWJjKicsIGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSkgIT0gTm9uZSkKKyAgICBpZiB1Y19vczoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoIHVDbGliYyIpCit9CisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wdGgvcHRoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgZmlsZTovL3B0aC1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9wdGgtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5Y2I0YTI1MzMxYTRjNGRiODY2YTMxY2JlNTA3Yzc5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MjM1MzY2MGM1YTJjYWFmZDYwMWIyMGUxMmU3NWQ4NjVmZDg4ZjZjZjFhMDg4YjMwNmEzOTYzZjBiYzc3MjMyIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3B0aC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworZG9fY29uZmlndXJlKCkgeworCSggY2QgJHtTfTsgZ251LWNvbmZpZ2l6ZSApCisJKCBjZCAke1N9OyBhdXRvY29uZiApCisJb2VfcnVuY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL2Vudi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNzNlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorJ3Njb25zJyBjbGVhbnMgdGhlIGVudmlyb25tZW50IHdoaWNoIGJyZWFrcyBjY2FjaGUgYnVpbGRzIGJlY2F1c2UKK0NDQUNIRURJUiBjYW4gcG9pbnQgdG8gYW4gdW5leHBlY3RlZCBsb2NhdGlvbjoKKworfCBjY2FjaGUgYXJtLWxpbnV4LWdudWVhYmktZ2NjIC4uLiBjb250ZXh0LmMKK3wgY2NhY2hlOiBmYWlsZWQgdG8gY3JlYXRlIC4uLi9zZXJmLzEuMy42LXIwLy5ob21lLy5jY2FjaGUgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCisKK0lzc3VlIGlzIGRlc2NyaWJlZCBpbgorCisgIGh0dHA6Ly93d3cuc2NvbnMub3JnL3dpa2kvSW1wb3J0aW5nRW52aXJvbm1lbnRTZXR0aW5ncworCithbmQgYmVjYXVzZSAnYml0YmFrZScgY2xlYW5zIGVudmlyb25tZW50IHdlIGNhbiBwYXNzIGl0IGNvbXBsZXRlbHkKK2luc3RlYWQgb2YgdHJ5aW5nIHRvIGVudW1lcmF0ZSBuZWVkZWQgZW52LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworCitJbmRleDogc2VyZi0xLjMuNi9TQ29uc3RydWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2VyZi0xLjMuNi5vcmlnL1NDb25zdHJ1Y3QKKysrKyBzZXJmLTEuMy42L1NDb25zdHJ1Y3QKK0BAIC0xNDksNiArMTQ5LDcgQEAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgZW52ID0gRW52aXJvbm1lbnQodmFyaWFibGVzPW9wdHMsCisgICAgICAgICAgICAgICAgICAgdG9vbHM9KCdkZWZhdWx0JywgJ3RleHRmaWxlJywpLAorICAgICAgICAgICAgICAgICAgIENQUFBBVEg9WycuJywgXSwKKysgICAgICAgICAgICAgICAgICBFTlYgPSBvcy5lbnZpcm9uLAorICAgICAgICAgICAgICAgICAgICkKKworIGVudi5BcHBlbmQoQlVJTERFUlMgPSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvbm9ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9ub3JwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGY1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvbm9ycGF0aC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitUaGUgUlBBVEggaGFuZGxpbmcgaW4gc2VyZiBpcyBhbGwgd3JvbmcgZm9yIHVzIGFuZCB3ZSBkb24ndCBuZWVkIGl0IAorYW55d2F5IHNvIGhhY2sgYXJvdW5kIGl0IGJ5IHJlbW92aW5nIHRoaXMgZm9yIG5vdy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1JQIDIwMTQvNy8xNworCitJbmRleDogc2VyZi0xLjMuNi9TQ29uc3RydWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2VyZi0xLjMuNi5vcmlnL1NDb25zdHJ1Y3QJMjAxNC0wNy0xNyAxOTo1Nzo1Ny43MjQzODkxNTAgKzAwMDAKKysrKyBzZXJmLTEuMy42L1NDb25zdHJ1Y3QJMjAxNC0wNy0xNyAyMDowNDoyMS43ODQzOTk2MTYgKzAwMDAKK0BAIC0yMTgsOCArMjE4LDcgQEAKKyBlbHNlOgorICAgTElCTkFNRVNUQVRJQyA9ICdzZXJmLSR7TUFKT1J9JworIAorLWVudi5BcHBlbmQoUlBBVEg9bGliZGlyLAorLSAgICAgICAgICAgUERCPScke1RBUkdFVC5maWxlYmFzZX0ucGRiJykKKytlbnYuQXBwZW5kKFBEQj0nJHtUQVJHRVQuZmlsZWJhc2V9LnBkYicpCisgCisgI2ZvciBpIGluIGVudjoKKyAjICAgIHByaW50KHN0cihlbnZbaV0pKQorQEAgLTM3MSwxMiArMzcwLDYgQEAKKyBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgIGVudi5BcHBlbmQoQ1BQREVGSU5FUz1bJ1NFUkZfSEFWRV9TU1BJJ10pCisgCistIyBPbiBzb21lIHN5c3RlbXMsIHRoZSAtUiB2YWx1ZXMgdGhhdCBBUFIgZGVzY3JpYmVzIG5ldmVyIG1ha2UgaXQgaW50byBhY3R1YWwKKy0jIFJQQVRIIGZsYWdzLiBXZSdsbCBtYW51YWxseSBtYXAgYWxsIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaW50byBuZXcKKy0jIGZsYWdzIHRvIHNldCBSUEFUSCB2YWx1ZXMuCistZm9yIGQgaW4gZW52WydMSUJQQVRIJ106CistICBlbnYuQXBwZW5kKFJQQVRIPSc6JytkKQorLQorICMgU2V0IHVwIHRoZSBjb25zdHJ1Y3Rpb24gb2Ygc2VyZi0qLnBjCisgcGtnY29uZmlnID0gZW52LlRleHRmaWxlKCdzZXJmLSVkLnBjJyAlIChNQUpPUiwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYuRmlsZSgnYnVpbGQvc2VyZi5wYy5pbicpLAorQEAgLTQ0Niw3ICs0MzksNiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5WPXsnUEFUSCcgOiBvcy5lbnZpcm9uWydQQVRIJ119KSkKKyAKKyAjIEZpbmQgdGhlIChkeW5hbWljKSBsaWJyYXJ5IGluIHRoaXMgZGlyZWN0b3J5CistdGVudi5SZXBsYWNlKFJQQVRIPXRoaXNkaXIpCisgdGVudi5QcmVwZW5kKExJQlM9W0xJQk5BTUVTVEFUSUMsIF0sCisgICAgICAgICAgICAgIExJQlBBVEg9W3RoaXNkaXIsIF0pCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNTlkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZl8xLjMuOC5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkhpZ2gtUGVyZm9ybWFuY2UgQXN5bmNocm9ub3VzIEhUVFAgQ2xpZW50IExpYnJhcnkiCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9zLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm9ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbnYucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MTNiZWFmMDVkN2YzMzI5ZGUxMjFlMjE4ZTJmY2I5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzEzNGNkNTAxMDY2NGNhMDIzNTg1YmNlNTA5NzhiZDQwMDU5MDZlZDI4MGZmODg5ZjU5MWY4NmRmN2M1OWU0IgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04NmQzZjNhOTVjMzI0Yzk0NzliZDg5ODY5NjhmNDMyNyIKKworREVQRU5EUyA9ICJweXRob24tc2NvbnMtbmF0aXZlIG9wZW5zc2wgYXByIGFwci11dGlsIHV0aWwtbGludXggZXhwYXQiCisKK2RvX2NvbXBpbGUoKSB7CisJJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Njb25zICR7UEFSQUxMRUxfTUFLRX0gUFJFRklYPSR7cHJlZml4fSBcCisJCUNDPSIke0NDfSIgXAorCQlBUFI9YHdoaWNoIGFwci0xLWNvbmZpZ2AgQVBVPWB3aGljaCBhcHUtMS1jb25maWdgIFwKKwkJQ0ZMQUdTPSIke0NGTEFHU30iIExJTktGTEFHUz0iJHtMREZMQUdTfSIgXAorCQlPUEVOU1NMPSIke1NUQUdJTkdfRVhFQ1BSRUZJWERJUn0iCit9CisKK2RvX2luc3RhbGwoKSB7CisJJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Njb25zIFBSRUZJWD0ke0R9JHtwcmVmaXh9IExJQkRJUj0ke0R9JHtsaWJkaXJ9IGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8uaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVkYjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYwpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlNoYXJlZCBNSU1FIHR5cGUgZGF0YWJhc2UgYW5kIHNwZWNpZmljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvc2hhcmVkLW1pbWUtaW5mbyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAibGlieG1sMiBpbnRsdG9vbC1uYXRpdmUgZ2xpYi0yLjAgc2hhcmVkLW1pbWUtaW5mby1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJsaWJ4bWwyLW5hdGl2ZSBpbnRsdG9vbC1uYXRpdmUgZ2xpYi0yLjAtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvfmhhZGVzcy9zaGFyZWQtbWltZS1pbmZvLSR7UFZ9LnRhci54eiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS11cGRhdGUtbWltZWRiIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9taW1lIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZy9zaGFyZWQtbWltZS1pbmZvLnBjIgorCisjIGZyZWVkZXNrdG9wLm9yZy54bWwgaXMgb25seSByZXF1aXJlZCB3aGVuIHVwZGF0aW5nIHRoZSBtaW1lIGRhdGFiYXNlLAorIyBwYWNrYWdlIGl0IHNlcGFyYXRlbHkKK1BBQ0tBR0VTID0rICJzaGFyZWQtbWltZS1pbmZvLWRhdGEiCitGSUxFU19zaGFyZWQtbWltZS1pbmZvLWRhdGEgPSAiJHtkYXRhZGlyfS9taW1lL3BhY2thZ2VzL2ZyZWVkZXNrdG9wLm9yZy54bWwiCitSREVQRU5EU19zaGFyZWQtbWltZS1pbmZvLWRhdGEgPSAic2hhcmVkLW1pbWUtaW5mbyIKKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCXVwZGF0ZS1taW1lLWRhdGFiYXNlICR7RH0ke2RhdGFkaXJ9L21pbWUKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWYxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8vaW5zdGFsbC1kYXRhLWhvb2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorZml4IHNoYXJlZC1taW1lLWluZm8gYnVpbGQgcmFjZSBjb25kaXRpb24KKworVGhlIGRlZmluaXRpb24gb2YgaW5zdGFsbC1kYXRhLWhvb2sgaW4gTWFrZWZpbGUuYW0gbGVhZHMKK3RvIG11bHRpcGxlLCBvdmVybGFwcGluZywgZXhlY3V0aW9ucyBvZiBpbnN0YWxsLWJpblBST0dSQU1TCit0YXJnZXQuICBXZSBtb2RpZnkgdGhlIGRlZmluaXRpb24gdG8gYXZvaWQgdGhhdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNDQsNyArNDQsOSBAQCAkKHBrZ2NvbmZpZ19EQVRBKTogY29uZmlnLnN0YXR1cworIEBJTlRMVE9PTF9YTUxfUlVMRUAKKyBASU5UTFRPT0xfREVTS1RPUF9SVUxFQAorIAorLWluc3RhbGwtZGF0YS1ob29rOiBpbnN0YWxsLWJpblBST0dSQU1TCisrIyBkbyBOT1QgbWFrZSB0aGlzIGRlcGVuZGVudCBvbiBhbnl0aGluZyEKKysjCisraW5zdGFsbC1kYXRhLWhvb2s6CisgaWYgRU5BQkxFX1VQREFURV9NSU1FREIKKyAJJChERVNURElSKSIkKGJpbmRpcikvdXBkYXRlLW1pbWUtZGF0YWJhc2UiIC1WICIkKERFU1RESVIpJChkYXRhZGlyKS9taW1lIgorIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm8vcGFyYWxsZWxtYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM0ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitUaGUgTWFrZWZpbGUgdXNlZCBieSBzaGFyZWQtbWltZS1pbmZvIGlzIG9uZSBiaWcgcmFjZSB3aXRoIHRoZSBTVUJESVJTIAorb3B0aW9uIGFuZCB0aGUgZGVwZW5kZW5jeSBzcGVjaWZpY2FsbHkgY2FsbGluZyBtYWtlIGFsbCBjb21iaW5pbmcgdG8KK2NyZWF0ZSBtdWx0aXBsZSBtYWtlIGluc3RhbmNlcyBhbGwgb2Ygd2hpY2ggbWF5IHRyeSBhbmQgYnVpbGQgdGFyZ2V0cworbGlrZSB1cGRhdGUtbWltZS1kYXRhYmFzZS4KKworVGhpcyBwYXRjaCByZW1vdmVzIHRob3NlIG9wdGlvbnMgbWVhbmluZyBtYWtlIGNhbiBjb3JyZWN0bHkgaWRlbnRpZnkKK2RlcGVuZGVuY2llcyBhbmQgc3RvcCBpdHNlbGYgcmFjaW5nIGl0c2VsZi4KKworUlAgMTAvMTAvMjAxMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IHNoYXJlZC1taW1lLWluZm8tMS4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2hhcmVkLW1pbWUtaW5mby0xLjAub3JpZy9NYWtlZmlsZS5hbQorKysrIHNoYXJlZC1taW1lLWluZm8tMS4wL01ha2VmaWxlLmFtCitAQCAtMSw1ICsxLDMgQEAKKy1TVUJESVJTPS4gcG8KKy0KKyBBTV9DUFBGTEFHUyA9ICQoQUxMX0NGTEFHUykKKyAKKyBwYWNrYWdlc2RpciA9ICQoZGF0YWRpcikvbWltZS9wYWNrYWdlcworQEAgLTcyLDggKzcwLDcgQEAgdW5pbnN0YWxsLWhvb2s6CisgCisgYWxsOiAkKGRlZmF1bHRtYWtlZGVwcykKKyAKKy1jcmVhdGUtcG90OgorLQkkKEFNX1ZfR0VOKSAkKE1BS0UpIC1DIHBvIHNoYXJlZC1taW1lLWluZm8ucG90CisrY3JlYXRlLXBvdDogcG8KKyAKKyBjaGVjazogY3JlYXRlLXBvdCBmcmVlZGVza3RvcC5vcmcueG1sIHVwZGF0ZS1taW1lLWRhdGFiYXNlIGNoZWNrLXRyYW5zbGF0aW9ucworIAlpZiB0ZXN0IC1lICQodG9wX2J1aWxkZGlyKS9mcmVlZGVza3RvcC5vcmcueG1sOyB0aGVuIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mb18xLjQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGZkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBzaGFyZWQtbWltZS1pbmZvLmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vcGFyYWxsZWxtYWtlLnBhdGNoIFwKKwkgICAgZmlsZTovL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTZjMDJmN2I2NThmZmYyYTljMjA3NDA2ZDM4OGVhMzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmJjMGJkMDIzZjQ5N2RmZDc1ZTFjYTczNDQxY2JiYjVhNjM2MTdkOWUxNGYyNzkwYjg2ODM2MWNjMDU1YjViMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9maWxlcy8wMDAxLXVzaW5nLXRoZS1keW5hbWljLWxpYnJhcnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYmZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1tQQVRDSF0gdXNpbmcgdGhlIGR5bmFtaWMgbGlicmFyeQorCitVcHN0cmVhbS1TdGF0dXM6ICBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitidWlsZGluZyBzdGF0aWNhbGx5LWxpbmtlZCBzcWxpdGUzIGZhaWxlZCBzaW5jZSBzcWxpdGUzLm8gaXMgZ2VuZXJhdGVkIGluIAorZGlmZmVyZW50IGRpciwgZXZlbiBpZiBsaW5rIHN1Y2Nlc3NlcywgdGhlIHNpemUgb2Ygc3FsaXRlMyBpcyBiZWNvbWUgbGFyZ2VyLAorc28gdXNlIHRoZSBkeW5hbWljIGxpbmssIHJlZjogaHR0cDovL3BhdGNod29yay5vcGVuZW1iZWRkZWQub3JnL3BhdGNoLzkzMjkzLworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5hbSB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggODhiYzIzZC4uZmU1MGYyMCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTcsNyArNyw4IEBAIGxpYnNxbGl0ZTNfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgLXZlcnNpb24taW5mbyA4OjY6OAorIAorIGJpbl9QUk9HUkFNUyA9IHNxbGl0ZTMKKyBzcWxpdGUzX1NPVVJDRVMgPSBzaGVsbC5jIHNxbGl0ZTMuaAorLXNxbGl0ZTNfTERBREQgPSBzcWxpdGUzLiQoT0JKRVhUKSBAUkVBRExJTkVfTElCU0AKKytzcWxpdGUzX0xEQUREID0gQFJFQURMSU5FX0xJQlNAIGxpYnNxbGl0ZTMubGEKKysKKyAKKyBpbmNsdWRlX0hFQURFUlMgPSBzcWxpdGUzLmggc3FsaXRlM2V4dC5oCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTM3OTFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTMuaW5jCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiRW1iZWRkYWJsZSBTUUwgZGF0YWJhc2UgZW5naW5lIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcWxpdGUub3JnIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJyZWFkbGluZSBuY3Vyc2VzIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorTElDRU5TRSA9ICJQRCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtdGhyZWFkc2FmZSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXRocmVhZHNhZmUgLS1kaXNhYmxlLXJlYWRsaW5lIgorZXhwb3J0IGNvbmZpZ19CVUlMRF9DQyA9ICIke0JVSUxEX0NDfSIKK2V4cG9ydCBjb25maWdfQlVJTERfQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK2V4cG9ydCBjb25maWdfQlVJTERfTElCUyA9ICIke0JVSUxEX0xERkxBR1N9IgorZXhwb3J0IGNvbmZpZ19UQVJHRVRfQ0MgPSAiJHtDQ30iCitleHBvcnQgY29uZmlnX1RBUkdFVF9MSU5LID0gIiR7Q0NMRH0iCitleHBvcnQgY29uZmlnX1RBUkdFVF9DRkxBR1MgPSAiJHtDRkxBR1N9IgorZXhwb3J0IGNvbmZpZ19UQVJHRVRfTEZMQUdTID0gIiR7TERGTEFHU30iCisKKyMgcHJlYWQoKSBpcyBpbiBQT1NJWC4xLTIwMDEgc28gYW55IHJlYXNvbmFibGUgc3lzdGVtIG11c3Qgc3VyZWx5IHN1cHBvcnQgaXQKK0JVSUxEX0NGTEFHUyArPSAiLURVU0VfUFJFQUQiCitUQVJHRVRfQ0ZMQUdTICs9ICItRFVTRV9QUkVBRCIKKworUEFDS0FHRVMgPSAibGliJHtCUE59IGxpYiR7QlBOfS1kZXYgbGliJHtCUE59LWRvYyAke1BOfS1kYmcgbGliJHtCUE59LXN0YXRpY2RldiAke1BOfSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCitGSUxFU19saWIke0JQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTX2xpYiR7QlBOfS1kZXYgPSAiJHtsaWJkaXJ9LyoubGEgJHtsaWJkaXJ9Lyouc28gXAorCSAgICAgICAgICAgICAgICAJICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2luY2x1ZGVkaXJ9IgorRklMRVNfbGliJHtCUE59LWRvYyA9ICIke2RvY2Rpcn0gJHttYW5kaXJ9ICR7aW5mb2Rpcn0iCitGSUxFU19saWIke0JQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWIqLmEiCitBVVRPX0xJQk5BTUVfUEtHUyA9ICIke01MUFJFRklYfWxpYiR7QlBOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy44LjEwLjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlM18zLjguMTAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzJhZDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy44LjEwLjIuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBzcWxpdGUzLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcWxpdGUzLmg7ZW5kbGluZT0xMTttZDU9NjVmMGE1N2NhNjkyODcxMGI0MThjMDk0YjM1NzBiYjAiCisKK2RlZiBzcWxpdGVfZG93bmxvYWRfdmVyc2lvbihkKToKKyAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKQorICAgIHJldHVybiBwdnNwbGl0WzBdICsgJycuam9pbihbcGFydC5yanVzdCgyLCcwJykgZm9yIHBhcnQgaW4gcHZzcGxpdFsxOl1dKQorCitQRSA9ICIzIgorU1FMSVRFX1BWID0gIiR7QHNxbGl0ZV9kb3dubG9hZF92ZXJzaW9uKGQpfSIKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5zcWxpdGUub3JnLzIwMTUvc3FsaXRlLWF1dG9jb25mLSR7U1FMSVRFX1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImExOGJmYzAxNWNkNDlhMWU3YTk2MWI3Yjc3YmMzYjM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzODJlNTVhNGU3ZDg1M2M5MzAzODU2MmNhM2RkMDAzMDc5MzdmY2NmMWM2YjY1ZGRkODEzZTUwM2E1NmQ2MjYiCisKK1MgPSAiJHtXT1JLRElSfS9zcWxpdGUtYXV0b2NvbmYtJHtTUUxJVEVfUFZ9IgorCisjIFByb3ZpZGUgY29sdW1uIG1ldGEtZGF0YSBBUEkKK0JVSUxEX0NGTEFHUyArPSAiLURTUUxJVEVfRU5BQkxFX0NPTFVNTl9NRVRBREFUQSIKK1RBUkdFVF9DRkxBR1MgKz0gIi1EU1FMSVRFX0VOQUJMRV9DT0xVTU5fTUVUQURBVEEiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3RhZ2xpYi90YWdsaWJfMS45LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMjc4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgcmVhZGluZyBhbmQgZWRpdGluZyB0aGUgbWV0YS1kYXRhIG9mIHBvcHVsYXIgYXVkaW8gZm9ybWF0cyIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorSE9NRVBBR0UgPSAiaHR0cDovL3RhZ2xpYi5naXRodWIuaW8vIgorTElDRU5TRSA9ICJMR1BMdjIuMSB8IE1QTC0xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MR1BMO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLk1QTDttZDU9YmZlMWY3NWQ2MDY5MTJhNDExMWM5MDc0M2Q2YzczMjUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGFnbGliL2F1ZGlvcHJvcGVydGllcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTlkZjJjNzM5OTUxOWI3MzEwNTY4YTdjNTUwNDJlY2VlIgorCitERVBFTkRTID0gInpsaWIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3RhZ2xpYi5naXRodWIuaW8vcmVsZWFzZXMvJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjBkMzVkZjk2ODIyYmJkNTY0YzU1MDRjYjNjMmU0ZDg2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcyZDM3MWNkMTQxOWE4N2FlMjAwNDQ3YTUzYmZmMmJlMjE5MjgzMDcxZTgwZmQxMjMzNzkyOGNjOTY3ZGM3MWEiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vdGFnbGliLWNvbmZpZyIKKworaW5oZXJpdCBjbWFrZSBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkCisKK1BBQ0tBR0VTID0rICIke1BOfS1jIgorRklMRVNfJHtQTn0tYyA9ICIke2xpYmRpcn0vbGlidGFnX2Muc28uKiIKKworRVhUUkFfT0VDTUFLRSA9ICItRExJQl9TVUZGSVg9JHtAZC5nZXRWYXIoJ2Jhc2VsaWInLCBUcnVlKS5yZXBsYWNlKCdsaWInLCAnJyl9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9hZG1pbi9sdG1haW4uc2gKKwlybSAtZiAke1N9L2FkbWluL2xpYnRvb2wubTQuaW4KKwkjIERvbid0IGhhdmUgYSBmbG9hdGluZyBkZXBlbmRlbnkgb24gYm9vc3QKKwlzZWQgLWkgLWUgInMvYXRvbWljLmhwcC9hdG9taWMtbm90LWV4aXN0LmhwcC8iICR7U30vQ29uZmlndXJlQ2hlY2tzLmNtYWtlICR7U30vdGFnbGliL3Rvb2xraXQvdHJlZmNvdW50ZXIuY3BwCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3VzZXItY3JlYXRpb24veHVzZXItYWNjb3VudF8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YmE5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiQ3JlYXRlcyBhbiAneHVzZXInIGFjY291bnQgdXNlZCBmb3IgcnVubmluZyBYMTEiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTUkNfVVJJID0gIiIKKworaW5oZXJpdCBhbGxhcmNoIHVzZXJhZGQKKworZG9fY29uZmlndXJlKCkgeworICAgIDoKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgOgorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gc2h1dGRvd24iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWdyb3VwcyB2aWRlbyx0dHksYXVkaW8saW5wdXQsc2h1dGRvd24sZGlzayBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCB4dXNlciIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzYzZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS0wLjI4LjIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxNTQ1XQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4KKy0tLSB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCTIwMTAtMDctMTUgMjA6MDg6NDQuMDAwMDAwMDAwICswMzAwCisrKysgdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgkyMDEzLTAxLTExIDE0OjUwOjM0Ljk3MTAyNzQ0MCArMDIwMAorQEAgLTgsNyArOCw2IEBACisgQUNfSVNDX1BPU0lYCisgQUNfUFJPR19DQworIEFDX1NURENfSEVBREVSUworLUFNX1BST0dfQ0NfU1REQworCisgaWYgdGVzdCAteiAiJGVuYWJsZV9tYWludGFpbmVyX21vZGUiOyB0aGVuCisgICBlbmFibGVfbWFpbnRhaW5lcl9tb2RlPXllcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQwNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS5pbmMKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJWaXJ0dWFsIHRlcm1pbmFsIGVtdWxhdG9yIEdUSysgd2lkZ2V0IGxpYnJhcnkiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9dnRlIgorTElDRU5TRSA9ICJMR1BMdjIuMCIKK0RFUEVORFMgPSAiIGdsaWItMi4wIGd0aysgaW50bHRvb2wtbmF0aXZlIG5jdXJzZXMgZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIiCitSREVQRU5EU19saWJ2dGUgPSAidnRlLXRlcm1jYXAiCisKK2luaGVyaXQgZ25vbWUgZ3RrLWRvYworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXB5dGhvbiAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworUEFDS0FHRVMgPSsgImxpYnZ0ZSB2dGUtdGVybWNhcCIKK0ZJTEVTX2xpYnZ0ZSA9ICIke2xpYmRpcn0vKi5zby4qICR7bGliZXhlY2Rpcn0vZ25vbWUtcHR5LWhlbHBlciIKK0ZJTEVTXyR7UE59LWRiZyA9KyAiJHtsaWJleGVjZGlyfS8uZGVidWcgJHtwcmVmaXh9L3NyYyAke2JpbmRpcn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS8uZGVidWciCitGSUxFU192dGUtdGVybWNhcCA9ICIke2RhdGFkaXJ9L3Z0ZS90ZXJtY2FwLTAuMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlXzAuMjguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAyNWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB2dGUuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IgorCitQUiA9ICJyNiIKKworU1JDX1VSSSArPSAiZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCIKKworQ0ZMQUdTICs9ICItRF9HTlVfU09VUkNFIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI0OTdmMjZlNDU3MzA4NjQ5ZTZlY2UzMmIzYmIxNDJmZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjg2Y2YwYjgxYWEwMjNmYTkzZWQ0MTU2NTNkNTFjOTY3NjdmMjBiMmQ3MzM0Yzg5M2NhYmE3MWU0MjY1NGIwYWUiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIm1hdGNoYm94LXRlcm1pbmFsIG5lZWRzIHRvIGJlIHBvcnRlZCBvdmVyIHRvIG5ldyB2dGUgZmlyc3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMudHh0IGIvbWV0YS9yZWNpcGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDUzODZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLnR4dApAQCAtMCwwICsxLDE1IEBACityZWNpcGVzLWJzcCAgICAgICAgICAtIEFueXRoaW5nIHdpdGggbGlua3MgdG8gc3BlY2lmaWMgaGFyZHdhcmUgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorcmVjaXBlcy1jb25uZWN0aXZpdHkgLSBMaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucyByZWxhdGVkIHRvIGNvbW11bmljYXRpb24gd2l0aCBvdGhlciBkZXZpY2VzIAorcmVjaXBlcy1jb3JlICAgICAgICAgLSBXaGF0J3MgbmVlZGVkIHRvIGJ1aWxkIGEgYmFzaWMgd29ya2luZyBMaW51eCBpbWFnZSBpbmNsdWRpbmcgY29tbW9ubHkgdXNlZCBkZXBlbmRlbmNpZXMKK3JlY2lwZXMtZGV2dG9vbHMgICAgIC0gVG9vbHMgcHJpbWFyaWx5IHVzZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbSAoYnV0IGNhbiBhbHNvIGJlIHVzZWQgb24gdGFyZ2V0cykKK3JlY2lwZXMtZXh0ZW5kZWQgICAgIC0gQXBwbGljYXRpb25zIHdoaWNoIHdoaWxzdCBub3QgZXNzZW50aWFsIGFkZCBmZWF0dXJlcyBjb21wYXJlZCB0byB0aGUgYWx0ZXJuYXRpdmVzIGluCisgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuIE1heSBiZSBuZWVkZWQgZm9yIGZ1bGwgdG9vbCBmdW5jdGlvbmFsaXR5IG9yIExTQiBjb21wbGlhbmNlLgorcmVjaXBlcy1nbm9tZSAgICAgICAgLSBBbGwgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIEdUSysgYXBwbGljYXRpb24gZnJhbWV3b3JrCityZWNpcGVzLWdyYXBoaWNzICAgICAtIFggYW5kIG90aGVyIGdyYXBoaWNhbGx5IHJlbGF0ZWQgc3lzdGVtIGxpYnJhcmllcyAgCityZWNpcGVzLWtlcm5lbCAgICAgICAtIFRoZSBrZXJuZWwgYW5kIGdlbmVyaWMgYXBwbGljYXRpb25zL2xpYnJhcmllcyB3aXRoIHN0cm9uZyBrZXJuZWwgZGVwZW5kZW5jaWVzCityZWNpcGVzLWxzYjQgICAgICAgICAtIFJlY2lwZXMgYWRkZWQgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2Ygc3VwcG9ydGluZyB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSA0LngKK3JlY2lwZXMtbXVsdGltZWRpYSAgIC0gQ29kZWNzIGFuZCBzdXBwb3J0IHV0aWx0aWVzIGZvciBhdWRpbywgaW1hZ2VzIGFuZCB2aWRlbworcmVjaXBlcy1ydCAgICAgICAgICAgLSBQcm92aWRlcyBwYWNrYWdlIGFuZCBpbWFnZSByZWNpcGVzIGZvciB1c2luZyBhbmQgdGVzdGluZyB0aGUgUFJFRU1QVF9SVCBrZXJuZWwKK3JlY2lwZXMtcXQgICAgICAgICAgIC0gQWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBRdCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsKK3JlY2lwZXMtc2F0byAgICAgICAgIC0gVGhlIFNhdG8gZGVtby9yZWZlcmVuY2UgVUkvVVgsIGl0cyBhc3NvY2lhdGVkIGFwcHMgYW5kIGNvbmZpZ3VyYXRpb24gCityZWNpcGVzLXN1cHBvcnQgICAgICAtIFJlY2lwZXMgdXNlZCBieSBvdGhlciByZWNpcGVzIGJ1dCB0aGF0IGFyZSBub3QgZGlyZWN0bHkgaW5jbHVkZWQgaW4gaW1hZ2VzCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvYXJtLTMyIGIvbWV0YS9zaXRlL2FybS0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZkOGQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS0zMgpAQCAtMCwwICsxLDQ3IEBACisjIGRlZmluaXRpb25zIGFzc3VtaW5nIDMyLWJpdCBhcm0gYXJjaGl0ZWN0dXJlCisKKyMgYXBhY2hlCithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorZ2xpYl9jdl9zaXplb2Zfc2l6ZV90PSR7Z2xpYl9jdl9zaXplb2Zfc2l6ZV90PTR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisjIGppa2VzCithY19jdl9zaXplb2Zfd2NoYXJfdD00CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvYXJtLTY0IGIvbWV0YS9zaXRlL2FybS02NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGMwOWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS02NApAQCAtMCwwICsxLDQ2IEBACisjIGRlZmluaXRpb25zIGFzc3VtaW5nIDY0LWJpdCBhcm0gYXJjaGl0ZWN0dXJlCisKKyMgZ2VuZXJhbAorYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NAorYWNfY3Zfc2l6ZW9mX3NpemVfdD04CithY19jdl9zaXplb2Zfc3NpemVfdD04CithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OAorCisjIGdsaWIKKyNnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CisjZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KKyNnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CisKKyMgZ2xpYi0yLjAKKyNnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CisjZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorI2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorI2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD00fQorI2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgT1JCaXQyIChzaG91bGQgYmUgaW4gbWV0YS1nbm9tZS9zaXRlL2FybS02NCkKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9OAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTgKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvYXJtLWNvbW1vbiBiL21ldGEvc2l0ZS9hcm0tY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtLWNvbW1vbgpAQCAtMCwwICsxLDE1OSBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3Zfc2N0cD0ke2FjX2N2X3NjdHA9bm99CisKKyMgYXBhY2hlCithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIGNvcmV1dGlscwordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTl9CisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgZGIgKHNsZWVweWNhdCkKK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRiCitkYl9jdl9zcGlubG9ja3M9JHtkYl9jdl9zcGlubG9ja3M9bm99CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorY29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz1ub30KK2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPW5vfQorCisjIGZubWF0Y2gKK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorCisjIGdsaWItMi4wCitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT0ke2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPXllc30KKworI2dzdHJlYW1lcgorYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz0ke2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9bm99CisKKyMgaHR0cHBjCithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGliZXNtdHAKK2FjeF93b3JraW5nX3NucHJpbnRmPSR7YWN4X3dvcmtpbmdfc25wcmludGY9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBsaWJuZXQgCithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBsaWJ4ZmNlNHV0aWwKK3dpdGhfYnJva2VuX3B1dGVudj0ke3dpdGhfYnJva2VuX3B1dGVudj1ub30KKworIyBsaW5rcworYWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PSR7YWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PXllc30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPW5vfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPW5vfQorCisjIG5hbm8KK2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9JHthY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPW5vfQorbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPW5vfQorcnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPSR7cnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPXllc30KK3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9JHtyc3luY19jdl9IQVZFX0xPTkdMT05HPXllc30KK3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD0ke3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9JHtyc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPW5vfQorcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99Cityc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Cityc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Cityc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzb2NhdAorYWNfY3ZfaXNwZWVkX29mZnNldD0ke2FjX2N2X2lzcGVlZF9vZmZzZXQ9MTN9CitzY19jdl90ZXJtaW9zX2lzcGVlZD0ke3NjX2N2X3Rlcm1pb3NfaXNwZWVkPXllc30KKworIyBzc2gKK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9kaXJlbnRfaGF2ZV9zcGFjZV9kX25hbWU9eWVzfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyB4ZmZtCitqbV9jdl9mdW5jX3dvcmtpbmdfcmVhZGRpcj15ZXMKKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1kYXJ3aW4gYi9tZXRhL3NpdGUvYXJtLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1kYXJ3aW4KQEAgLTAsMCArMSwxMSBAQAorYWNfY3ZfbGliX21fc2luPSR7YWNfY3ZfbGliX21fc2luPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduPW5vfQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPW5vfQorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPW5vfQorYmFzaF9jdl9oYXZlX21ic3RhdGVfdD0ke2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9eWVzfQorYWNfY3ZfZnVuY19zdHJlcnJvcl9yPSR7YWNfY3ZfZnVuY19zdHJlcnJvcl9yPW5vfQorYWNfY3ZfdmFfY29weT0ke2FjX2N2X3ZhX2NvcHk9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1kYXJ3aW44IGIvbWV0YS9zaXRlL2FybS1kYXJ3aW44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZmYwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtLWRhcndpbjgKQEAgLTAsMCArMSwxMSBAQAorYWNfY3ZfbGliX21fc2luPSR7YWNfY3ZfbGliX21fc2luPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduPW5vfQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPW5vfQorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPW5vfQorYmFzaF9jdl9oYXZlX21ic3RhdGVfdD0ke2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9eWVzfQorYWNfY3ZfZnVuY19zdHJlcnJvcl9yPSR7YWNfY3ZfZnVuY19zdHJlcnJvcl9yPW5vfQorYWNfY3ZfdmFfY29weT0ke2FjX2N2X3ZhX2NvcHk9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1saW51eCBiL21ldGEvc2l0ZS9hcm0tbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMTg4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tbGludXgKQEAgLTAsMCArMSwxNjAgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9JHthY19jdl9zaXplb2Zfd2NoYXJfdD0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2Jvb2w9JHthY19jdl9zaXplb2ZfYm9vbD0xfQorYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9pbnRfcD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9pbnRfcD0ke2FjX2N2X3NpemVvZl9pbnRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTR9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX3A9JHthY19jdl9zaXplb2ZfbG9uZ19wPTR9CithY19jdl9zaXplb2ZfZmxvYXQ9JHthY19jdl9zaXplb2ZfZmxvYXQ9NH0KK2FjX2N2X3NpemVvZl9kb3VibGU9JHthY19jdl9zaXplb2ZfZG91YmxlPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBzYW1iYQorc2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz0ke3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9eWVzfQorc2FtYmFfY3ZfQlJPS0VOX1JFREhBVF83X1NZU1RFTV9IRUFERVJTPSR7c2FtYmFfY3ZfQlJPS0VOX1JFREhBVF83X1NZU1RFTV9IRUFERVJTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVJfTkFNRT0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVJfTkFNRT1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD0ke3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9bm99CitzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZBTV9IPSR7c2FtYmFfY3ZfSEFWRV9GQU1fSD1ub30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz0ke3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPSR7c2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPXllc30KK3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9JHtzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPSR7c2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49bm99CitzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPXllc30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUjY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSNjQ9bm99CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVElNQlVGPSR7c2FtYmFfY3ZfSEFWRV9VVElNQlVGPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfQUREUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfQUREUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0VYSVQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0VYSVQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9IT1NUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9IT1NUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfTkFNRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfTkFNRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVElNRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVElNRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RZUEU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RZUEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9VU0VSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9VU0VSPXllc30KK3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPSR7c2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49bm99CitzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9JHtzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9eWVzfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPXllc30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD0ke3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9eWVzfQorc2FtYmFfY3ZfUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9RVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9JHtzYW1iYV9jdl9SRVBMQUNFX0dFVFBBU1M9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1JFUExBQ0VfUkVBRERJUj0ke3NhbWJhX2N2X1JFUExBQ0VfUkVBRERJUj1ub30KK3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz0ke3NhbWJhX2N2X1JVTl9RVU9UQV9URVNUUz15ZXN9CitzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD0ke3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPXllc30KK3NhbWJhX2N2X1NJWkVPRl9ERVZfVD0ke3NhbWJhX2N2X1NJWkVPRl9ERVZfVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NFU1NPUlNfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NFU1NPUlNfT05MTj15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49bm99CitzYW1iYV9jdl9TWVNDT05GX1NDX1BBR0VTSVpFPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19QQUdFU0laRT15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1NfWEZTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1NfWEZTPXllc30KK3NhbWJhX2N2X1RSWV9RVU9UQVM9JHtzYW1iYV9jdl9UUllfUVVPVEFTPW5vfQorc2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9XRV9VU0VfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1dFX1VTRV9TWVNfUVVPVEFTPXllc30KK3NhbWJhX2N2X1dJVEhfQUZTPSR7c2FtYmFfY3ZfV0lUSF9BRlM9bm99CitzYW1iYV9jdl9XSVRIX0ZBS0VfS0FTRVJWRVI9JHtzYW1iYV9jdl9XSVRIX0ZBS0VfS0FTRVJWRVI9bm99CitzYW1iYV9jdl9XSVRIX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1NZU19RVU9UQVM9YXV0b30KK3NhbWJhX2N2X1dJVEhfVkZTX0FGU0FDTD0ke3NhbWJhX2N2X1dJVEhfVkZTX0FGU0FDTD1ub30KK3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPSR7c2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9eWVzfQorc2FtYmFfY3ZfZm91bmRfeGZzX2hlYWRlcj0ke3NhbWJhX2N2X2ZvdW5kX3hmc19oZWFkZXI9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPSR7c2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9eWVzfQorc2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz0ke3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9eWVzfQorc2FtYmFfY3Zfc2lnX2F0b21pY190PSR7c2FtYmFfY3Zfc2lnX2F0b21pY190PXllc30KK3NhbWJhX2N2X3NvY2tsZW5fdD0ke3NhbWJhX2N2X3NvY2tsZW5fdD15ZXN9CitzYW1iYV9jdl9zdHJ1Y3RfdGltZXNwZWM9JHtzYW1iYV9jdl9zdHJ1Y3RfdGltZXNwZWM9eWVzfQorc2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9JHtzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT1saWIvc3lzcXVvdGFzX2xpbnV4LmN9CitzYW1iYV9jdl91bml4c29ja2V0PSR7c2FtYmFfY3ZfdW5peHNvY2tldD15ZXN9CitzYW1iYV9jdl92b2xhdGlsZT0ke3NhbWJhX2N2X3ZvbGF0aWxlPXllc30KKworI29sZGVyIHNhbWJlIGRlZmluZXMKK3NhbWJhX2N2X1VTRV9TRVRFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVEVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRVSURYPSR7c2FtYmFfY3ZfVVNFX1NFVFVJRFg9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CisKKyMgY2xhbWF2CitjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9JHtjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PXllc30KK2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD0ke2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD15ZXN9CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPSR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXN9CisKKyNkYnVzCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGxmdHAKK2FjX2N2X2ZpbGVfX19kZXZfcHRjXz15ZXMKKworIyBndWlsZQorYWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9JHthY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz15ZXN9CisKKyMgZ25ldAorYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV9sZW49JHthY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX2xlbj1ub30KK2FjX2N2X2duZXRfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfZ25ldF9oYXZlX2Fic3RyYWN0X3NvY2tldHM9bm99CitnbmV0X3NvY2thZGRyX2ZhbWlseV9maWVsZF9uYW1lPSR7Z25ldF9zb2NrYWRkcl9mYW1pbHlfZmllbGRfbmFtZT1zc19mYW1pbHl9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvYXJtLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9hcm0tbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTdjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDEwNSBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBzYW1iYQorc2FtYmFfY3ZfQlJPS0VOX05JU1BMVVNfSU5DTFVERV9GSUxFUz0ke3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9eWVzfQorc2FtYmFfY3ZfQlJPS0VOX1JFREhBVF83X1NZU1RFTV9IRUFERVJTPSR7c2FtYmFfY3ZfQlJPS0VOX1JFREhBVF83X1NZU1RFTV9IRUFERVJTPW5vfQorc2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9JHtzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9EUUJfRlNPRlRMSU1JVD0ke3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9bm99CitzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89JHtzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPSR7c2FtYmFfY3ZfSEFWRV9OQVRJVkVfSUNPTlY9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT0ke3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9eWVzfQorc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD0ke3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT1ub30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND1ub30KK3NhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPSR7c2FtYmFfY3ZfSEFWRV9TT0NLX1NJTl9MRU49bm99CitzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT0ke3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTEtTSVpFPXllc30KK3NhbWJhX2N2X0hBVkVfU1RBVF9TVF9CTE9DS1M9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9bm99CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9JRl9EUUJMSz0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0lGX0RRQkxLPW5vfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfTUVNX0RRQkxLPSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfTUVNX0RRQkxLPW5vfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUSU1CVUY9JHtzYW1iYV9jdl9IQVZFX1VUSU1CVUY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9BRERSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfRVhJVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0hPU1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9OQU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9USU1FPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFlQRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1VTRVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49JHtzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj1ub30KK3NhbWJhX2N2X0hBVkVfVkFfQ09QWT0ke3NhbWJhX2N2X0hBVkVfVkFfQ09QWT15ZXN9CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9bm99CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9JHtzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPXllc30KK3NhbWJhX2N2X1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPSR7c2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9JHtzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9YXV0b30KK3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPSR7c2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfVFJZX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9RVU9UQVM9bm99CitzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPW5vfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfV0lUSF9RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD0ke3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz0ke3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPXllc30KK3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9JHtzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPXllc30KK3NhbWJhX2N2X3NpZ19hdG9taWNfdD0ke3NhbWJhX2N2X3NpZ19hdG9taWNfdD15ZXN9CitzYW1iYV9jdl9zb2NrbGVuX3Q9JHtzYW1iYV9jdl9zb2NrbGVuX3Q9eWVzfQorc2FtYmFfY3ZfdW5peHNvY2tldD0ke3NhbWJhX2N2X3VuaXhzb2NrZXQ9eWVzfQorc2FtYmFfY3Zfdm9sYXRpbGU9JHtzYW1iYV9jdl92b2xhdGlsZT15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvYXJtZWItbGludXggYi9tZXRhL3NpdGUvYXJtZWItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMWZmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm1lYi1saW51eApAQCAtMCwwICsxLDQzIEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZD00fQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X1VTRV9TRVRFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVEVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRVSURYPSR7c2FtYmFfY3ZfVVNFX1NFVFVJRFg9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KK3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PSR7c2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvYXJtZWItbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFlODU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDM4IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZD00fQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2dsaWJfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X1VTRV9TRVRFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVEVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRVSURYPSR7c2FtYmFfY3ZfVVNFX1NFVFVJRFg9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvY29tbW9uIGIvbWV0YS9zaXRlL2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2NjMTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2NvbW1vbgpAQCAtMCwwICsxLDIxIEBACisjIGxpYmVsZgorbXJfY3ZfdGFyZ2V0X2VsZj0ke21yX2N2X3RhcmdldF9lbGY9eWVzfQorCisjIE5vcm1hbGx5IGtlcm5lbHMgaGF2ZSAvZGV2L3JhbmRvbSBlbmFibGVkCithY19jdl9maWxlX19kZXZfcmFuZG9tPSR7YWNfY3ZfZmlsZV9fZGV2X3JhbmRvbT15ZXN9CisKKyMgQXZvaWQgc3VkbyB0byBhc3N1bWUgdm9pZCBmb3IgdW5zZXRlbnYgaW4gY3Jvc3MgZW52aXJvbm1lbnQsIG9yIGVsc2UgaXQgY29uZmxpY3RzIHdpdGgKKyMgdGFyZ2V0IHN0ZGxpYi5oIHByb3RvdHlwZSB3aGljaCBmb2xsb3dzIFBPU0lYIGNvbXBpbGlhbmNlLiBNYXJrIGZvciB1cHN0cmVhbS4KK3N1ZG9fY3ZfZnVuY191bnNldGVudl92b2lkPW5vCisKKyMgc2hhZG93IGRpciBpbmZvLCB0byBhdm9pZCBzZWFyY2hpbmcgYnVpbGQgc3lzdGVtCitzaGFkb3dfY3ZfbWFpbGRpcj0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL21haWwKK3NoYWRvd19jdl9tYWlsZmlsZT1NYWlsYm94CitzaGFkb3dfY3ZfdXRtcGRpcj0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorc2hhZG93X2N2X2xvZ2Rpcj0ke2xvY2Fsc3RhdGVkaXJ9L2xvZworc2hhZG93X2N2X3Bhc3N3ZF9kaXI9JHtiaW5kaXJ9CisKKyMgcHl0aG9uOiBkZWFjdGl2YXRlIGEgcnVudGltZSBjaGVjayBmb3IgaXB2Ni1zdXBwb3J0IGluIHB5dGhvbiA+PTIuNy4xIHRoYXQgZmFpbHMgd2hlbiBjcm9zcy1jb21waWxpbmcKK2FjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vCisKK2FjX2N2X3BhdGhfU0VEPXNlZApkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi1kYXJ3aW4gYi9tZXRhL3NpdGUvY29tbW9uLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJkODk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2NvbW1vbi1kYXJ3aW4KQEAgLTAsMCArMSwyIEBACithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tZ2xpYmMgYi9tZXRhL3NpdGUvY29tbW9uLWdsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDNmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvY29tbW9uLWdsaWJjCkBAIC0wLDAgKzEsODYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX21hbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9CithY19jdl9mdW5jX2dldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRncmVudF92b2lkPXllcworYWNfY3ZfZnVuY19nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X3R5cGVfdWlkX3Q9e2FjX2N2X3R5cGVfdWlkX3Q9eWVzfQorYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQorCisjIGJhc2gKK2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PXllc30KK2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3N5c19zaWdsaXN0PXllc30KK2Jhc2hfY3ZfZ2V0Y3dkX21hbGxvYz0ke2Jhc2hfY3ZfZ2V0Y3dkX21hbGxvYz15ZXN9CisKKyMgY2xhbWF2CitjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9JHtjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PXllc30KK2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD0ke2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD15ZXN9CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPSR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXN9CisKKyMgY29yZXV0aWxzCitmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorYWNfY3ZfZnVuY19wcmludGZfdW5peDk4PSR7YWNfY3ZfZnVuY19wcmludGZfdW5peDk4PXllc30KK2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9eWVzfQorYWNfY3ZfZnVuY192c25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY192c25wcmludGZfYzk5PXllc30KK2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPSR7Z2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249MX0KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKyMgZ2xpYi0xLnggcmVxdWlyZXMgdGhpcyBhbmQgcGtnY29uZmlnLW5hdGl2ZSAvIHBrZ2NvbmZpZy1uYXRpdmVzZGsgdXNlCisjIHRoYXQgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IGxvb3AuCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfdmFfY29weT0ke2dsaWJfY3ZfdmFfY29weT15ZXN9CitnbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPXllc30KKworI2RidXMtZ2xpYgorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBnbnVjYXNoCithbV9jdl9zY2FuZl9sbGQ9JHthbV9jdl9zY2FuZl9sbGQ9eWVzfQorCisjIGd1aWxlCithY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz0ke2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPXllc30KKworI2djYy16bGliCithY19jdl9mdW5jX2dldHBhZ2VzaXplPSR7YWNfY3ZfZnVuY19nZXRwYWdlc2l6ZT15ZXN9CithY19jdl9mdW5jX21lbWNweT0ke2FjX2N2X2Z1bmNfbWVtY3B5PXllc30KK2FjX2N2X2Z1bmNfc3RyZXJyb3I9JHthY19jdl9mdW5jX3N0cmVycm9yPXllc30KKworIyBzcXVpZAorYWNfY3ZfYWZfdW5peF9sYXJnZV9kZ3JhbT0ke2FjX2N2X2FmX3VuaXhfbGFyZ2VfZGdyYW09eWVzfQorYWNfY3ZfZnVuY19zZXRyZXN1aWQ9JHthY19jdl9mdW5jX3NldHJlc3VpZD15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CithY19jdl9lcG9sbF93b3Jrcz0ke2FjX2N2X2Vwb2xsX3dvcmtzPXllc30KKworYWNfY3ZfY2hlY2tfc2psaj1zc2psagorCisjIG00CitndF9jdl9sb2NhbGVfZnI9JHtndF9jdl9sb2NhbGVfZnI9ZnJfRlJ9CitnbF9jdl9mdW5jX2J0b3djX2VvZj0ke2dsX2N2X2Z1bmNfYnRvd2NfZW9mPXllc30KK2dsX2N2X2Z1bmNfd2NydG9tYl9yZXR2YWw9JHtnbF9jdl9mdW5jX3djcnRvbWJfcmV0dmFsPXllc30KK2dsX2N2X2Z1bmNfd2N0b2Jfd29ya3M9JHtnbF9jdl9mdW5jX3djdG9iX3dvcmtzPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZz0ke2dsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZz15ZXN9CitnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPSR7Z2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbD15ZXN9CitnbF9jdl9mdW5jX21icnRvd2NfbnVsX3JldHZhbD0ke2dsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPXllc30KKworIyB2YV9jb3B5IGFuZCBfdmFfY29weQorYWNfY3ZfdmFfY29weT0ke2FjX2N2X3ZhX2NvcHk9eWVzfQorYWNfY3ZfX192YV9jb3B5PSR7YWNfY3ZfX192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KKworIyBYb3JnCit4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvY29tbW9uLWxpbnV4IGIvbWV0YS9zaXRlL2NvbW1vbi1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjViZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2NvbW1vbi1saW51eApAQCAtMCwwICsxLDUyIEBACisjIGFwcgorYWNfY3ZfZmlsZV9fZGV2X3plcm89JHthY19jdl9maWxlX19kZXZfemVybz15ZXN9CithY19jdl9zaXplb2ZfcGlkX3Q9JHthY19jdl9zaXplb2ZfcGlkX3Q9NH0KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9JRkFDRV9BSVg9JHtzYW1iYV9jdl9IQVZFX0lGQUNFX0FJWD1ub30KK3NhbWJhX2N2X0hBVkVfSUZBQ0VfSUZDT05GPSR7c2FtYmFfY3ZfSEFWRV9JRkFDRV9JRkNPTkY9eWVzfQorc2FtYmFfY3ZfSEFWRV9JRkFDRV9JRlJFUT0ke3NhbWJhX2N2X0hBVkVfSUZBQ0VfSUZSRVE9eWVzfQorc2FtYmFfY3ZfSEFWRV9JUklYX1NQRUNJRklDX0NBUEFCSUxJVElFUz0ke3NhbWJhX2N2X0hBVkVfSVJJWF9TUEVDSUZJQ19DQVBBQklMSVRJRVM9bm99CisKKyMgZGIKK2RiX2N2X3BhdGhfYXI9JHtkYl9jdl9wYXRoX2FyPS91c3IvYmluL2FyfQorZGJfY3ZfcGF0aF9jaG1vZD0ke2RiX2N2X3BhdGhfY2htb2Q9L2Jpbi9jaG1vZH0KK2RiX2N2X3BhdGhfY3A9JHtkYl9jdl9wYXRoX2NwPS9iaW4vY3B9CitkYl9jdl9wYXRoX2xuPSR7ZGJfY3ZfcGF0aF9sbj0vYmluL2xufQorZGJfY3ZfcGF0aF9ta2Rpcj0ke2RiX2N2X3BhdGhfbWtkaXI9L2Jpbi9ta2Rpcn0KK2RiX2N2X3BhdGhfcmFubGliPSR7ZGJfY3ZfcGF0aF9yYW5saWI9L3Vzci9iaW4vcmFubGlifQorZGJfY3ZfcGF0aF9ybT0ke2RiX2N2X3BhdGhfcm09L2Jpbi9ybX0KK2RiX2N2X3BhdGhfc2g9JHtkYl9jdl9wYXRoX3NoPS9iaW4vc2h9CitkYl9jdl9wYXRoX3N0cmlwPSR7ZGJfY3ZfcGF0aF9zdHJpcD0vdXNyL2Jpbi9zdHJpcH0KKworIyBiYXNoCitiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PSR7YmFzaF9jdl9oYXZlX21ic3RhdGVfdD15ZXN9CitiYXNoX2N2X211c3RfcmVpbnN0YWxsX3NpZ2hhbmRsZXJzPSR7YmFzaF9jdl9tdXN0X3JlaW5zdGFsbF9zaWdoYW5kbGVycz1ub30KK2Jhc2hfY3ZfZnVuY19zdHJjb2xsX2Jyb2tlbj0ke2Jhc2hfY3ZfZnVuY19zdHJjb2xsX2Jyb2tlbj1ub30KK2Jhc2hfY3ZfZHVwMl9icm9rZW49JHtiYXNoX2N2X2R1cDJfYnJva2VuPW5vfQorYmFzaF9jdl9vcGVuZGlyX25vdF9yb2J1c3Q9JHtiYXNoX2N2X29wZW5kaXJfbm90X3JvYnVzdD1ub30KK2Jhc2hfY3ZfdHlwZV9ybGltaXQ9JHtiYXNoX2N2X3R5cGVfcmxpbWl0PXJsaW1fdH0KK2Jhc2hfY3ZfZ2V0ZW52X3JlZGVmPSR7YmFzaF9jdl9nZXRlbnZfcmVkZWY9eWVzfQorYmFzaF9jdl91bGltaXRfbWF4ZmRzPSR7YmFzaF9jdl91bGltaXRfbWF4ZmRzPXllc30KK2Jhc2hfY3ZfZ2V0Y3dkX2NhbGxzX3BvcGVuPSR7YmFzaF9jdl9nZXRjd2RfY2FsbHNfcG9wZW49bm99CitiYXNoX2N2X3ByaW50Zl9hX2Zvcm1hdD0ke2Jhc2hfY3ZfcHJpbnRmX2FfZm9ybWF0PXllc30KK2Jhc2hfY3ZfcGdycF9waXBlPSR7YmFzaF9jdl9wZ3JwX3BpcGU9bm99CitiYXNoX2N2X2pvYl9jb250cm9sX21pc3Npbmc9JHtiYXNoX2N2X2pvYl9jb250cm9sX21pc3Npbmc9cHJlc2VudH0KK2Jhc2hfY3Zfc3lzX25hbWVkX3BpcGVzPSR7YmFzaF9jdl9zeXNfbmFtZWRfcGlwZXM9cHJlc2VudH0KK2Jhc2hfY3ZfdW51c2FibGVfcnRzaWdzPSR7YmFzaF9jdl91bnVzYWJsZV9ydHNpZ3M9bm99CisKKyMgY29yZXV0aWxzCitnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnPSR7Z2xfY3ZfZnVuY19mc3RhdGF0X3plcm9fZmxhZz15ZXN9CisKKyMgbXlzcWwKK2FjX2N2X3N5c19yZXN0YXJ0YWJsZV9zeXNjYWxscz0ke2FjX2N2X3N5c19yZXN0YXJ0YWJsZV9zeXNjYWxscz15ZXN9CithY19jdl9jb252X2xvbmdsb25nX3RvX2Zsb2F0PSR7YWNfY3ZfY29udl9sb25nbG9uZ190b19mbG9hdD15ZXN9CisKKyMgVENMCit0Y2xfY3ZfYXBpX3NlcmlhbD0ke3RjbF9jdl9hcGlfc2VyaWFsPXRlcm1pb3N9CisKKyMgcHl0aG9uCithY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzCisKKyMgYXBhY2hlCithY19jdl9vX25vbmJsb2NrX2luaGVyaXRlZD0ke2FjX2N2X29fbm9uYmxvY2tfaW5oZXJpdGVkPW5vfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi1taW5ndyBiL21ldGEvc2l0ZS9jb21tb24tbWluZ3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzN2MzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tbWluZ3cKQEAgLTAsMCArMSwyIEBACisjIGV4cGF0CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvY29tbW9uLW11c2wgYi9tZXRhL3NpdGUvY29tbW9uLW11c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYzEwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tbXVzbApAQCAtMCwwICsxLDUyIEBACisjIGdlbmVyYWwKK2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD0ke2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD1ub30KK2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX21hbGxvY193b3Jrcz0ke2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD15ZXN9CithY19jdl9mdW5jX2dldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRncmVudF92b2lkPXllcworYWNfY3ZfZnVuY19nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89JHthY19jdl9mdW5jX2dldGFkZHJpbmZvPXllc30KKworIyBnbGliCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CithY19jdl9mdW5jX3ByaW50Zl91bml4OTg9JHthY19jdl9mdW5jX3ByaW50Zl91bml4OTg9eWVzfQorYWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3NucHJpbnRmX2M5OT15ZXN9CithY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9JHthY19jdl9mdW5jX3ZzbnByaW50Zl9jOTk9eWVzfQorZ2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249JHtnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0xfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9oYXZlX3Fzb3J0X3I9JHtnbGliX2N2X2hhdmVfcXNvcnRfcj1ub30KKworI2RidXMtZ2xpYgorYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBiYXNoCitiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PSR7YmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD1ub30KK2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3N5c19zaWdsaXN0PW5vfQorCisjIGNvcmV1dGlscworZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT0ke2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9eWVzfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX3R6c2V0X2Nsb2JiZXI9bm99CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bj0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz0ke2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9eWVzfQorCisjIHZhX2NvcHkgYW5kIF92YV9jb3B5CithY19jdl92YV9jb3B5PSR7YWNfY3ZfdmFfY29weT15ZXN9CithY19jdl9fX3ZhX2NvcHk9JHthY19jdl9fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorCisjIHBvc2l4X2dldHB3dWlkX3IgcG9zaXhfZ2V0Z3JnaWRfciBwb3NpeF9nZXRwd25hbV9yCithY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRncmdpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgWG9yZworeG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD0ke3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi11Y2xpYmMgYi9tZXRhL3NpdGUvY29tbW9uLXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZjMTAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2NvbW1vbi11Y2xpYmMKQEAgLTAsMCArMSw1MiBAQAorIyBnZW5lcmFsCithY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9JHthY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9bm99CithY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX21hbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19nZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0Z3JlbnRfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldHB3dWlkX3I9JHthY19jdl9mdW5jX2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldGFkZHJpbmZvPSR7YWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorYWNfY3ZfZnVuY19wcmludGZfdW5peDk4PSR7YWNfY3ZfZnVuY19wcmludGZfdW5peDk4PXllc30KK2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9eWVzfQorYWNfY3ZfZnVuY192c25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY192c25wcmludGZfYzk5PXllc30KK2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPSR7Z2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249MX0KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfaGF2ZV9xc29ydF9yPSR7Z2xpYl9jdl9oYXZlX3Fzb3J0X3I9bm99CisKKyNkYnVzLWdsaWIKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgYmFzaAorYmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9bm99CitiYXNoX2N2X3N5c19zaWdsaXN0PSR7YmFzaF9jdl9zeXNfc2lnbGlzdD1ub30KKworIyBjb3JldXRpbHMKK2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9JHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPXllc30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPW5vfQorZ2xfY3ZfZnVuY190enNldF9jbG9iYmVyPSR7Z2xfY3ZfZnVuY190enNldF9jbG9iYmVyPW5vfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPXllc30KKworIyB2YV9jb3B5IGFuZCBfdmFfY29weQorYWNfY3ZfdmFfY29weT0ke2FjX2N2X3ZhX2NvcHk9eWVzfQorYWNfY3ZfX192YV9jb3B5PSR7YWNfY3ZfX192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KKworIyBwb3NpeF9nZXRwd3VpZF9yIHBvc2l4X2dldGdyZ2lkX3IgcG9zaXhfZ2V0cHduYW1fcgorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIFhvcmcKK3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9JHt4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9lbmRpYW4tYmlnIGIvbWV0YS9zaXRlL2VuZGlhbi1iaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5ZTk2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9lbmRpYW4tYmlnCkBAIC0wLDAgKzEsOCBAQAorYWNfY3ZfY19saXR0bGVlbmRpYW49JHthY19jdl9jX2xpdHRsZWVuZGlhbj1ub30KK2FjX2N2X2NfYmlnZW5kaWFuPSR7YWNfY3ZfY19iaWdlbmRpYW49eWVzfQorCisjIGxpYm5ldAorYWNfY3ZfbGlibmV0X2VuZGlhbmVzcz0ke2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9YmlnfQorCisjIGxpYm1lbWNhY2hlZAorYWNfY3ZfY19lbmRpYW49YmlnCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvZW5kaWFuLWxpdHRsZSBiL21ldGEvc2l0ZS9lbmRpYW4tbGl0dGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OGRiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvZW5kaWFuLWxpdHRsZQpAQCAtMCwwICsxLDggQEAKK2FjX2N2X2NfbGl0dGxlZW5kaWFuPSR7YWNfY3ZfY19saXR0bGVlbmRpYW49eWVzfQorYWNfY3ZfY19iaWdlbmRpYW49JHthY19jdl9jX2JpZ2VuZGlhbj1ub30KKworIyBsaWJuZXQKK2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9JHthY19jdl9saWJuZXRfZW5kaWFuZXNzPWxpbH0KKworIyBsaWJtZW1jYWNoZWQKK2FjX2N2X2NfZW5kaWFuPWxpdHRsZQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2l4ODYtY29tbW9uIGIvbWV0YS9zaXRlL2l4ODYtY29tbW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDJjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvaXg4Ni1jb21tb24KQEAgLTAsMCArMSwyMzIgQEAKKyMgZ2VuZXJhbAorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyX3A9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl9pbnRfcD0ke2FjX2N2X3NpemVvZl9pbnRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19wPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfcD00fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9NH0KK2FjX2N2X3NpemVvZl91aWRfdD0ke2FjX2N2X3NpemVvZl91aWRfdD00fQorYWNfY3Zfc2l6ZW9mX2dpZF90PSR7YWNfY3Zfc2l6ZW9mX2dpZF90PTR9CithY19jdl9zaXplb2ZfaW5vX3Q9JHthY19jdl9zaXplb2ZfaW5vX3Q9NH0KK2FjX2N2X3NpemVvZl9kZXZfdD0ke2FjX2N2X3NpemVvZl9kZXZfdD04fQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm99CithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorYWNfY3Zfc2N0cD0ke2FjX2N2X3NjdHA9bm99CisKK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworYWNfY3ZfcGF0aF9FU0RfQ09ORklHPW5vCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCitqbV9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPW5vCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXMKK2JmX2xzYmY9MQorYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworIyBhdWRhY2l0eQorYWNfY3ZfZmlsZV9saWJfc3JjX2xpYm1hZF9mcmFtZV9oPSR7YWNfY3ZfZmlsZV9saWJfc3JjX2xpYm1hZF9mcmFtZV9oPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPW1pc3Npbmd9CisKKyMgY2xhbWF2CitjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9JHtjbGFtYXZfYXZfZnVuY193b3JraW5nX3NucHJpbnRmX2xvbmc9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fcG9ydF90PXllc30KK2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD0ke2NsYW1hdl9hdl9oYXZlX2luX2FkZHJfdD15ZXN9CithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPSR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXN9CisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49eWVzfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND00CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisjIGd1aWxlCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGppa2VzLW5hdGl2ZQorYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NAorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbGlibmV0IAorYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPSR7YWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorCisjIGxpYnhmY2U0dXRpbAord2l0aF9icm9rZW5fcHV0ZW52PSR7d2l0aF9icm9rZW5fcHV0ZW52PW5vfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9eWVzfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPXllc30KKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT1ub30KK3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj0ke3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj15ZXN9Cityc3luY19jdl9IQVZFX0xPTkdMT05HPSR7cnN5bmNfY3ZfSEFWRV9MT05HTE9ORz15ZXN9Cityc3luY19jdl9IQVZFX09GRjY0X1Q9JHtyc3luY19jdl9IQVZFX09GRjY0X1Q9bm99Cityc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPSR7cnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD1ub30KK3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtyc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorcnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtyc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Cityc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtyc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorcnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtyc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049bm99CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHNzaAorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2RpcmVudF9oYXZlX3NwYWNlX2RfbmFtZT15ZXN9CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9JHthY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgeGZmbQoram1fY3ZfZnVuY193b3JraW5nX3JlYWRkaXI9eWVzCisKKyMgeG9yZyBYMTFSNworYWNfY3Zfc3lzX2xpbmtlcl9oPSR7YWNfY3Zfc3lzX2xpbmtlcl9oPW5vfQorYWNfY3ZfZmlsZV9fdXNyX3NoYXJlX1gxMV9zZ21sX2RlZnNfZW50PSR7YWNfY3ZfZmlsZV9fdXNyX3NoYXJlX1gxMV9zZ21sX2RlZnNfZW50PW5vfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCisjZGJ1cworYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworI2xpYnBjaWFjY2VzcworaGF2ZV9tdHJyX2g9eWVzCisKKyNtb3ppbGxhCittb3pfY3Zfc2l6ZV9vZl9KU19CWVRFU19QRVJfV09SRD00Cittb3pfY3ZfYWxpZ25fb2ZfSlNfQUxJR05fT0ZfUE9JTlRFUj00Cittb3pfY3Zfc2l6ZV9vZl9KU19CWVRFU19QRVJfRE9VQkxFPTgKKworI29mb25vCithY19jdl9saWJfY19zaWduYWxmZD0ke2FjX2N2X2xpYl9jX3NpZ25hbGZkPXllc30KKworI3VuZnMzCituZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0ke25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPTB9CituZnNkX2N2X2Z1bmNfc3RhdGZzPSR7bmZzZF9jdl9mdW5jX3N0YXRmcz1zdGF0ZnMyX2JzaXplfQorbmZzZF9jdl9ic2Rfc2lnbmFscz0ke25mc2RfY3ZfYnNkX3NpZ25hbHM9eWVzfQorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTQKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTQKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzLWNvbW1vbiBiL21ldGEvc2l0ZS9taXBzLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQ3MmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHMtY29tbW9uCkBAIC0wLDAgKzEsNTYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CisKKyMgY3ZzCitjdnNfY3ZfZnVuY19wcmludGZfcHRyPSR7Y3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj15ZXN9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl92YV92YWxfY29weT0ke2dsaWJfY3ZfdmFfdmFsX2NvcHk9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzLWxpbnV4IGIvbWV0YS9zaXRlL21pcHMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhNTRmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzLWxpbnV4CkBAIC0wLDAgKzEsNzkgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzM2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvbWlwcy1saW51eC11Y2xpYmMKQEAgLTAsMCArMSw4MCBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwczY0LWxpbnV4IGIvbWV0YS9zaXRlL21pcHM2NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDBmYmJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHM2NC1saW51eApAQCAtMCwwICsxLDgzIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZWRzLWRidXMKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHM2NC1saW51eC11Y2xpYmMgYi9tZXRhL3NpdGUvbWlwczY0LWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHM2NC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSw4MyBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkcy1kYnVzCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eCBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjYxZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4CkBAIC0wLDAgKzEsODIgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkcy1kYnVzCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA0OTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDEwOCBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQord2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz0ke3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCisjIGZyb20gc2FtYmEgMy4wLjE0YSBvbiA1LzI5LzIwMDUKK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfYXNwcmludGZfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPSR7YWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD15ZXN9CithY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD15ZXN9CitmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9JHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9eWVzfQorc2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9JHtzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9JHtzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT0ke3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9eWVzfQorc2FtYmFfY3ZfSEFWRV9ST09UPSR7c2FtYmFfY3ZfSEFWRV9ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99CitzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9JHtzYW1iYV9jdl9IQVZFX1dPUktJTkdfQUZfTE9DQUw9bm99CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPW5vfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPW5vfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT0ke3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPWxpYi9zeXNxdW90YXNfNEEuY30KKyMgVGhpcyBjYWNoZWQgdmFsdWUgbmVlZHMgYSBsb2NhbCBwYXRjaCB0byBwaWNrIGl0IHVwLCB1cHN0cmVhbSAzLjAuMTRhCisjIGRvZXNuJ3QgY2FjaGUgaXQuCitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzZWwtbGludXggYi9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4CkBAIC0wLDAgKzEsNzkgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV2b2x1dGlvbi1kYXRhLXNlcnZlcgorYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHNlbC1saW51eC11Y2xpYmMgYi9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTIxY2RhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHNlbC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwxMDAgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorIyBmcm9tIHNhbWJhIDMuMC4xNGEgb24gNS8yOS8yMDA1CithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9CithY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9eWVzfQorZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KK3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD1ub30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9JHtzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT1saWIvc3lzcXVvdGFzXzRBLmN9CisjIFRoaXMgY2FjaGVkIHZhbHVlIG5lZWRzIGEgbG9jYWwgcGF0Y2ggdG8gcGljayBpdCB1cCwgdXBzdHJlYW0gMy4wLjE0YQorIyBkb2Vzbid0IGNhY2hlIGl0Lgorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbmF0aXZlIGIvbWV0YS9zaXRlL25hdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZiMWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL25hdGl2ZQpAQCAtMCwwICsxIEBACithY19jdl9wYXRoX1NFRD1zZWQKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbiBiL21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmEyOTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3Bvd2VycGMtY29tbW9uCkBAIC0wLDAgKzEsMTQgQEAKKyMgZ2xpYgorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9NAorCisjIGF0LXNwaTItY29yZQorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbiBiL21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVmNTBiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3Bvd2VycGMtZGFyd2luCkBAIC0wLDAgKzEsNyBAQAorIyBwa2djb25maWctbmF0aXZlIGZvciBPUyBYIGJ1aWQKK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3Bvd2VycGMtbGludXggYi9tZXRhL3NpdGUvcG93ZXJwYy1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY4OWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3Bvd2VycGMtbGludXgKQEAgLTAsMCArMSwxNiBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIGdsaWIKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsZnRwCitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3Bvd2VycGMzMi1saW51eCBiL21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MjlhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXgKQEAgLTAsMCArMSwyNzUgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2Jvb2w9JHthY19jdl9zaXplb2ZfYm9vbD0xfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9NH0KK2FjX2N2X3NpemVvZl9kb3VibGU9JHthY19jdl9zaXplb2ZfZG91YmxlPTh9CithY19jdl9zaXplb2ZfZmxvYXQ9JHthY19jdl9zaXplb2ZfZmxvYXQ9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfaW50X3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX3A9JHthY19jdl9zaXplb2ZfbG9uZ19wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9JHthY19jdl9zaXplb2Zfd2NoYXJfdD00fQorYWNfY3ZfdHlwZV9fX2ludDY0PSR7YWNfY3ZfdHlwZV9fX2ludDY0PW5vfQorYWNfY3ZfdHlwZV9zaXplX3Q9JHthY19jdl90eXBlX3NpemVfdD15ZXN9CithY19jdl90eXBlX3ZvaWRfcD0ke2FjX2N2X3R5cGVfdm9pZF9wPXllc30KK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisKKyMgYXBhY2hlCithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz0ke2Fwcl9jdl9wcm9jZXNzX3NoYXJlZF93b3Jrcz1ub30KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KKworYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF9oPW5vfQorYWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9bm99CithY19jdl9zY3RwPSR7YWNfY3Zfc2N0cD1ub30KKworIyBzc2gKK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9kaXJlbnRfaGF2ZV9zcGFjZV9kX25hbWU9eWVzfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPSR7YWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBjb3JldXRpbHMKK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE5fQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgbmFubworYWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj0ke2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9bm99CituYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPSR7bmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj1ub30KKworCisjIGxpYm5ldAorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KKworIyBzb2NhdAorYWNfY3ZfaXNwZWVkX29mZnNldD0ke2FjX2N2X2lzcGVlZF9vZmZzZXQ9MTN9CitzY19jdl90ZXJtaW9zX2lzcGVlZD0ke3NjX2N2X3Rlcm1pb3NfaXNwZWVkPXllc30KKworIyBsaW5rcworYWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PSR7YWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PXllc30KKworIyBkYgorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgbGliZXNtdHAKK2FjeF93b3JraW5nX3NucHJpbnRmPSR7YWN4X3dvcmtpbmdfc25wcmludGY9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGdsaWIgMi4wCitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD00fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPSR7Z2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9eWVzfQorCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CisKKyMgaHR0cHBjCithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgZWRiCitkYl9jdl9zcGlubG9ja3M9JHtkYl9jdl9zcGlubG9ja3M9bm99CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9Citjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPW5vfQorY29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9bm99CisKKyMgc2xybgorc2xybl9jdl92YV92YWxfY29weT0ke3Nscm5fY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBPUkJpdDIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9mbG9hdD00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfcG9pbnRlcj00CithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfd2NoYXI9MgorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPXllc30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPW1pc3Npbmd9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9icm9rZW5fZGlybmFtZT0ke2FjX2N2X2hhdmVfYnJva2VuX2Rpcm5hbWU9J3llcyd9CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0nbm8nfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0nbm8nfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSd5ZXMnfQorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSdubyd9CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0neWVzJ30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PSc0J30KKworI21vZHBocCAKK2FjX2N2X2NfYmlnZW5kaWFuX3BocD0ke2FjX2N2X2NfYmlnZW5kaWFuX3BocD15ZXN9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7YWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD00fQorCisjIGFwYWNoZTIgKG5vdGUgb3RoZXIgYXBhY2hlIHN0YW56YSBpbiB0aGlzIGZpbGUpCithcF92b2lkX3B0cl9sdF9sb25nPSR7YXBfdm9pZF9wdHJfbHRfbG9uZz1ub30KK2Fwcl9jdl91c2VfbGZzNjQ9JHthcHJfY3ZfdXNlX2xmczY0PXllc30KK2Fwcl9jdl9lcG9sbD0ke2Fwcl9jdl9lcG9sbD15ZXN9CithcHJfY3ZfcHRocmVhZHNfY2ZsYWdzPSR7YXByX2N2X3B0aHJlYWRzX2NmbGFncz0tcHRocmVhZH0KK2Fwcl9jdl9wdGhyZWFkc19saWI9JHthcHJfY3ZfcHRocmVhZHNfbGliPS1scHRocmVhZH0KK2FjX2N2X2Z1bmNfbW1hcD0ke2FjX2N2X2Z1bmNfbW1hcD15ZXN9CithY19jdl9maWxlX19kZXZfemVybz0ke2FjX2N2X2ZpbGVfX2Rldl96ZXJvPXllc30KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3BpZF90PSR7YWNfY3Zfc2l6ZW9mX3BpZF90PTR9CithY19jdl9zb2NrbGVuX3Q9JHthY19jdl9zb2NrbGVuX3Q9eWVzfQorYWNfY3Zfc3RydWN0X3JsaW1pdD0ke2FjX2N2X3N0cnVjdF9ybGltaXQ9eWVzfQorYWNfY3ZfbmVnYXRpdmVfZWFpPSR7YWNfY3ZfbmVnYXRpdmVfZWFpPXllc30KK2Fwcl9jdl9nYWlfYWRkcmNvbmZpZz0ke2Fwcl9jdl9nYWlfYWRkcmNvbmZpZz1ub30KK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBiaW51dGlscyAobGliaWJlcnR5KQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3R5cGVfaW50PSR7YWNfY3ZfdHlwZV9pbnQ9eWVzfQorYWNfY3ZfdHlwZV91aW50cHRyX3Q9JHthY19jdl90eXBlX3VpbnRwdHJfdD15ZXN9CitsaWJlcnR5X2N2X3VpbnQ2ND0ke2xpYmVydHlfY3ZfdWludDY0PXVpbnQ2NF90fQorCisjc2FtYmEKK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9JHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllc30KK2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND0ke2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPXllc30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVJfTkFNRT0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVJfTkFNRT1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD0ke3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3NhbWJhX2N2X1JFUExBQ0VfUkVBRERJUj0ke3NhbWJhX2N2X1JFUExBQ0VfUkVBRERJUj1ub30KK3NhbWJhX2N2X1NJWkVPRl9ERVZfVD0ke3NhbWJhX2N2X1NJWkVPRl9ERVZfVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PSR7c2FtYmFfY3ZfU1RBVF9TVEFUVkZTNjQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVEVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VURVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFVJRFg9JHtzYW1iYV9jdl9VU0VfU0VUVUlEWD15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9bm99CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9bm99CisKKworIyBsaWJjCitsaWJjX2N2X3BwY19tYWNoaW5lPSR7bGliY19jdl9wcGNfbWFjaGluZT15ZXN9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjhpYm09eWVzfQorbGliY19jdl9tYWJpX2libWxvbmdkb3VibGU9JHtsaWJjX2N2X21hYmlfaWJtbG9uZ2RvdWJsZT15ZXN9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjg9JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjg9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3Bvd2VycGM2NC1saW51eCBiL21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0ZTIzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXgKQEAgLTAsMCArMSwzOSBAQAorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2NoYXJfcD0ke2FjX2N2X3NpemVvZl9jaGFyX3A9OH0KK2FjX2N2X3NpemVvZl9kb3VibGU9JHthY19jdl9zaXplb2ZfZG91YmxlPTh9CithY19jdl9zaXplb2ZfZmxvYXQ9JHthY19jdl9zaXplb2ZfZmxvYXQ9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmdfaW50PTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTh9CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIGFwcgorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvc2gtY29tbW9uIGIvbWV0YS9zaXRlL3NoLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU0MTZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3NoLWNvbW1vbgpAQCAtMCwwICsxLDIzOCBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CisKKyMgbHpvCithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3Zfc2N0cD0ke2FjX2N2X3NjdHA9bm99CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIGNvcmV1dGlscwordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTl9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KKworIyBzb2NhdAorYWNfY3ZfaXNwZWVkX29mZnNldD0ke2FjX2N2X2lzcGVlZF9vZmZzZXQ9MTN9CitzY19jdl90ZXJtaW9zX2lzcGVlZD0ke3NjX2N2X3Rlcm1pb3NfaXNwZWVkPXllc30KKworIyBsaW5rcworYWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PSR7YWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND0ke3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorCisjIGRiCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgbGliZXNtdHAKK2FjeF93b3JraW5nX3NucHJpbnRmPSR7YWN4X3dvcmtpbmdfc25wcmludGY9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGdsaWIgMi4wCitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD00fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPSR7Z2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9eWVzfQorCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgaHR0cHBjCithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KKworIyBqaWtlcworYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NAorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD00CithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9bm99CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZm5tYXRjaAorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPW5vfQorcnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPSR7cnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPXllc30KK3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9JHtyc3luY19jdl9IQVZFX0xPTkdMT05HPXllc30KK3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD0ke3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9JHtyc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPW5vfQorcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99Cityc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Cityc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Cityc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KKworIyBsaWJ4ZmNlNHV0aWwKK3dpdGhfYnJva2VuX3B1dGVudj0ke3dpdGhfYnJva2VuX3B1dGVudj1ub30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBsaWJuZXQgCithY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9JHthY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvc3BhcmMtbGludXggYi9tZXRhL3NpdGUvc3BhcmMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkMGQ5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9zcGFyYy1saW51eApAQCAtMCwwICsxLDQ4IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorCithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT15ZXN9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjg9JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjg9eWVzfQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT00CithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CisKKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KK2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyBtaW5pY29tCithbV9jdl9zeXNfcG9zaXhfdGVybWlvcz0ke2FtX2N2X3N5c19wb3NpeF90ZXJtaW9zPXllc30KKworCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjZ2xpYgorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0gCitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CisKKyNsaW51eAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS94MzItbGludXggYi9tZXRhL3NpdGUveDMyLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZWU2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUveDMyLWxpbnV4CkBAIC0wLDAgKzEsMTAgQEAKKyMgZ2VuZXJhbAorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTh9CithY19jdl9zaXplb2ZfaW5vX3Q9JHthY19jdl9zaXplb2ZfaW5vX3Q9OH0KK2FjX2N2X3NpemVvZl9kZXZfdD0ke2FjX2N2X3NpemVvZl9kZXZfdD04fQorYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9JHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NH0KK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MzJ9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4IGIvbWV0YS9zaXRlL3g4Nl82NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNhOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3g4Nl82NC1saW51eApAQCAtMCwwICsxLDEzNiBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PW5vfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD04fQorYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CithY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KK2FjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD04fQorYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD04fQorYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9NDB9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD04fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9OH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT1ub30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CitzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9JHtzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9eWVzfQorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworI2djYworYWNfY3ZfbGliX21fc2luPSR7YWNfY3ZfbGliX21fc2luPXllc30KKworI29yYml0CitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbAorCisjIGJhc2gKK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz0ke2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9eWVzfQorCisjdW5mczMKK25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPSR7bmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9MH0KK25mc2RfY3ZfZnVuY19zdGF0ZnM9JHtuZnNkX2N2X2Z1bmNfc3RhdGZzPXN0YXRmczJfYnNpemV9CituZnNkX2N2X2JzZF9zaWduYWxzPSR7bmZzZF9jdl9ic2Rfc2lnbmFscz15ZXN9CisKKyNhcHIKK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBsZnRwCitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT1ub30KKworIyBncnViCithY19jdl9mdW5jX19fYXNobGRpMz1ubworYWNfY3ZfZnVuY19fX2FzaHJkaTM9bm8KK2FjX2N2X2Z1bmNfX19ic3dhcGRpMj1ubworYWNfY3ZfZnVuY19fX2Jzd2Fwc2kyPW5vCithY19jdl9mdW5jX19fbHNocmRpMz1ubworYWNfY3ZfZnVuY19fX3RyYW1wb2xpbmVfc2V0dXA9bm8KK2FjX2N2X2Z1bmNfX191Y21wZGkyPW5vCithY19jdl9mdW5jX19yZXN0Z3ByXzE0X3g9bm8KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS94ODZfNjQtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDkxIEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9bm99CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD04fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9NDB9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD04fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9OH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsZnRwCitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT1ub30KZGlmZiAtLWdpdCBhL29lLWluaXQtYnVpbGQtZW52IGIvb2UtaW5pdC1idWlsZC1lbnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmZlZTVmNwotLS0gL2Rldi9udWxsCisrKyBiL29lLWluaXQtYnVpbGQtZW52CkBAIC0wLDAgKzEsNjIgQEAKKyMhL2Jpbi9zaAorCisjIE9FIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworIworIyBOb3JtYWxseSB0aGlzIGlzIGNhbGxlZCBhcyAnLiAuL29lLWluaXQtYnVpbGQtZW52IGJ1aWxkZGlyJworIworIyBUaGlzIHdvcmtzIGluIG1vc3Qgc2hlbGxzIChub3QgZGFzaCksIGJ1dCBub3QgYWxsIG9mIHRoZW0gcGFzcyBhcmcxIHdoZW4KKyMgYmVpbmcgc291cmNlZC4gICBUbyB3b3JrYXJvdW5kIHRoZSBzaGVsbCBsaW1pdGF0aW9uIHVzZSAic2V0IGFyZzEiIHByaW9yIAorIyB0byBzb3VyY2luZyB0aGlzIHNjcmlwdC4KKyMKK2lmIFsgLW4gIiRCQVNIX1NPVVJDRSIgXTsgdGhlbgorICAgT0VST09UPSJgZGlybmFtZSAkQkFTSF9TT1VSQ0VgIgorZWxpZiBbIC1uICIkWlNIX05BTUUiIF07IHRoZW4KKyAgIE9FUk9PVD0iYGRpcm5hbWUgJDBgIgorZWxzZQorICAgT0VST09UPSJgcHdkYCIKK2ZpCitpZiBbIC1uICIkQkJTRVJWRVIiIF07IHRoZW4KKyAgIHVuc2V0IEJCU0VSVkVSCitmaQorVEhJU19TQ1JJUFQ9JE9FUk9PVC9vZS1pbml0LWJ1aWxkLWVudgorCitpZiBbIC16ICIkWlNIX05BTUUiIF0gJiYgWyAiJDAiID0gIiRUSElTX1NDUklQVCIgXTsgdGhlbgorICAgZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHNvdXJjZWQuIFBsZWFzZSBydW4gYXMgJy4gJFRISVNfU0NSSVBUJyIKKyAgIGV4aXQgMQorZmkKKworT0VST09UPWByZWFkbGluayAtZiAiJE9FUk9PVCJgCitleHBvcnQgT0VST09UCisuICRPRVJPT1Qvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbCAmJiBcCisgICAgICRPRVJPT1Qvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpciAmJiBcCisgICAgIFsgLW4gIiRCVUlMRERJUiIgXSAmJiBjZCAiJEJVSUxERElSIgordW5zZXQgT0VST09UCit1bnNldCBCQlBBVEgKK3Vuc2V0IFRISVNfU0NSSVBUCisKKyMgU2h1dGRvd24gYW55IGJpdGJha2Ugc2VydmVyIGlmIHRoZSBCQlNFUlZFUiB2YXJpYWJsZSBpcyBub3Qgc2V0CitpZiBbIC16ICIkQkJTRVJWRVIiIF0gJiYgWyAtZiBiaXRiYWtlLmxvY2sgXSA7IHRoZW4KKyAgICBncmVwICI6IiBiaXRiYWtlLmxvY2sgPiAvZGV2L251bGwgJiYgQkJTRVJWRVI9YGNhdCBiaXRiYWtlLmxvY2tgIGJpdGJha2UgLS1zdGF0dXMtb25seQorICAgIGlmIFsgJD8gPSAwIF0gOyB0aGVuCisJZWNobyAiU2h1dHRpbmcgZG93biBiaXRiYWtlIG1lbW9yeSByZXNpZGVudCBzZXJ2ZXIgd2l0aCBiaXRiYWtlIC1tIgorCUJCU0VSVkVSPWBjYXQgYml0YmFrZS5sb2NrYCBiaXRiYWtlIC1tCisgICAgZmkKK2ZpCisKZGlmZiAtLWdpdCBhL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcyBiL29lLWluaXQtYnVpbGQtZW52LW1lbXJlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWRjNGZlCi0tLSAvZGV2L251bGwKKysrIGIvb2UtaW5pdC1idWlsZC1lbnYtbWVtcmVzCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCisjIE9FIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworIworIyBOb3JtYWxseSB0aGlzIGlzIGNhbGxlZCBhcyAnLiAuL29lLWluaXQtYnVpbGQtZW52IGJ1aWxkZGlyIDxwb3J0bnVtYmVyPiA8YnVpbGRkaXI+JworIworIyBUaGlzIHdvcmtzIGluIG1vc3Qgc2hlbGxzIChub3QgZGFzaCksIGJ1dCBub3QgYWxsIG9mIHRoZW0gcGFzcyBhcmcxIHdoZW4KKyMgYmVpbmcgc291cmNlZC4gICBUbyB3b3JrYXJvdW5kIHRoZSBzaGVsbCBsaW1pdGF0aW9uIHVzZSAic2V0IGFyZzEiIHByaW9yIAorIyB0byBzb3VyY2luZyB0aGlzIHNjcmlwdC4KKyMKK2lmIFsgLXogIiQxIiBdOyB0aGVuCisgICAgZWNobyAiTm8gcG9ydCBzcGVjaWZpZWQsIHVzaW5nIGR5bmFtaWNhbGx5IHNlbGVjdGVkIHBvcnQiCisgICAgcG9ydD0tMQorZWxzZQorICAgIHBvcnQ9JDEKKyAgICBzaGlmdAorZmkKKworaWYgWyAtbiAiJEJBU0hfU09VUkNFIiBdOyB0aGVuCisgIE9FUk9PVD0iYGRpcm5hbWUgJEJBU0hfU09VUkNFYCIKK2VsaWYgWyAtbiAiJFpTSF9OQU1FIiBdOyB0aGVuCisgIE9FUk9PVD0iYGRpcm5hbWUgJDBgIgorZWxzZQorICBPRVJPT1Q9ImBwd2RgIgorZmkKK2lmIFsgLW4gIiRCQlNFUlZFUiIgXTsgdGhlbgorICB1bnNldCBCQlNFUlZFUgorZmkKKworVEhJU19TQ1JJUFQ9JE9FUk9PVC9vZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMKK2lmIFsgLXogIiRaU0hfTkFNRSIgXSAmJiBbICJ4JDAiID0gIngkVEhJU19TQ1JJUFQiIF07IHRoZW4KKyAgIGVjaG8gIkVycm9yOiBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBzb3VyY2VkLiBQbGVhc2UgcnVuIGFzICcuICRUSElTX1NDUklQVCciCisgICBleGl0IDEKK2ZpCisKK09FUk9PVD1gcmVhZGxpbmsgLWYgIiRPRVJPT1QiYAorZXhwb3J0IE9FUk9PVAorLiAkT0VST09UL3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwgJiYgXAorICAgICRPRVJPT1Qvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpciAmJiBcCisgICAgWyAtbiAiJEJVSUxERElSIiBdICYmIGNkICRCVUlMRERJUgordW5zZXQgT0VST09UCit1bnNldCBCQlBBVEgKK3Vuc2V0IFRISVNfU0NSSVBUCisKK3Jlcz0xCitpZiBbIC1lIGJpdGJha2UubG9jayBdICYmIGdyZXAgOiBiaXRiYWtlLmxvY2sgPiAvZGV2L251bGwgOyB0aGVuCisgICAgQkJTRVJWRVI9YGNhdCBiaXRiYWtlLmxvY2tgIGJpdGJha2UgLS1zdGF0dXMtb25seQorICAgIHJlcz0kPworZmkKKworaWYgWyAkcmVzICE9IDAgXSA7IHRoZW4KKyAgICBiaXRiYWtlIC0tc2VydmVyLW9ubHkgLXQgeG1scnBjIC1CIGxvY2FsaG9zdDokcG9ydAorZmkKKworaWYgWyAkcG9ydCA9IC0xIF0gOyB0aGVuCisgICAgZXhwb3J0IEJCU0VSVkVSPWxvY2FsaG9zdDotMQorICAgIGVjaG8gIkJpdGJha2Ugc2VydmVyIHN0YXJ0ZWQgb24gZGVtYW5kIGFzIG5lZWRlZCwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duIgorZWxzZQorICAgIGV4cG9ydCBCQlNFUlZFUj1gY2F0IGJpdGJha2UubG9ja2AKKworICAgIGlmIFsgJHJlcyA9IDAgXSA7IHRoZW4KKwllY2hvICJVc2luZyBleGlzdGluZyBiaXRiYWtlIHNlcnZlciBhdDogJEJCU0VSVkVSLCB1c2UgYml0YmFrZSAtbSB0byBzaHV0IGl0IGRvd24iCisgICAgZWxzZQorCWVjaG8gIkJpdGJha2Ugc2VydmVyIHN0YXJ0ZWQgYXQ6ICRCQlNFUlZFUiwgdXNlIGJpdGJha2UgLW0gdG8gc2h1dCBpdCBkb3duIgorICAgIGZpCisgICAgdW5zZXQgcmVzCitmaQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9SRUFETUUgYi9zY3JpcHRzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjhkMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9SRUFETUUKQEAgLTAsMCArMSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgVmFyaW91cyB1c2VmdWwgc2NyaXB0cyBmb3Igd29ya2luZyB3aXRoIE9FIGJ1aWxkcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sIGIvc2NyaXB0cy9iaXRiYWtlLXByc2Vydi10b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4YzI0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2JpdGJha2UtcHJzZXJ2LXRvb2wKQEAgLTAsMCArMSwxMDMgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKworaGVscCAoKQoreworICAgIGJhc2U9YGJhc2VuYW1lICQwYAorICAgIGVjaG8gLWUgIlVzYWdlOiAkYmFzZSBjb21tYW5kIgorICAgIGVjaG8gIkF2YWxpYWJsZSBjb21tYW5kczoiCisgICAgZWNobyAtZSAiXHRleHBvcnQgPGZpbGUuY29uZj46IGV4cG9ydCBhbmQgbG9jayBkb3duIHRoZSBBVVRPUFIgdmFsdWVzIGZyb20gdGhlIFBSIHNlcnZpY2UgaW50byBhIGZpbGUgZm9yIHJlbGVhc2UuIgorICAgIGVjaG8gLWUgIlx0aW1wb3J0IDxmaWxlLmNvbmY+OiBpbXBvcnQgdGhlIEFVVE9QUiB2YWx1ZXMgZnJvbSB0aGUgZXhwb3J0ZWQgZmlsZSBpbnRvIHRoZSBQUiBzZXJ2aWNlLiIKK30KKworY2xlYW5fY2FjaGUoKQoreworICAgIHM9YGJpdGJha2UgLWUgfCBncmVwIF5DQUNIRT0gfCBjdXQgLWYyIC1kXCJgCisgICAgaWYgWyAieCR7c30iICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIHJtIC1yZiAke3N9CisgICAgZmkKK30KKworZG9fZXhwb3J0ICgpCit7CisgICAgZmlsZT0kMQorICAgIFsgIngke2ZpbGV9IiA9PSAieCIgXSAmJiBoZWxwICYmIGV4aXQgMQorICAgIHJtIC1mICR7ZmlsZX0KKworICAgIGNsZWFuX2NhY2hlCisgICAgYml0YmFrZSAtUiBjb25mL3ByZXhwb3J0LmNvbmYgLXAKKyAgICBzPWBiaXRiYWtlIC1SIGNvbmYvcHJleHBvcnQuY29uZiAtZSB8IGdyZXAgXlBSU0VSVl9EVU1QRklMRT0gfCBjdXQgLWYyIC1kXCJgCisgICAgaWYgWyAieCR7c30iICE9ICJ4IiBdOworICAgIHRoZW4KKyAgICAgICBbIC1lICRzIF0gJiYgbXYgLWYgJHMgJGZpbGUgJiYgZWNobyAiRXhwb3J0aW5nIHRvIGZpbGUgJGZpbGUgc3VjY2VlZGVkISIKKyAgICAgICByZXR1cm4gMAorICAgIGZpCisgICAgZWNobyAiRXhwb3J0aW5nIHRvIGZpbGUgJGZpbGUgZmFpbGVkISIKKyAgICByZXR1cm4gMQorfQorCitkb19pbXBvcnQgKCkKK3sKKyAgICBmaWxlPSQxCisgICAgWyAieCR7ZmlsZX0iID09ICJ4IiBdICYmIGhlbHAgJiYgZXhpdCAxCisKKyAgICBjbGVhbl9jYWNoZQorICAgIGJpdGJha2UgLVIgY29uZi9wcmltcG9ydC5jb25mIC1SICRmaWxlIC1wCisgICAgcmV0PSQ/CisgICAgWyAkcmV0IC1lcSAwIF0gJiYgZWNobyAiSW1wb3J0aW5nIGZyb20gZmlsZSAkZmlsZSBzdWNjZWVkZWQhIiB8fCBlY2hvICJJbXBvcnRpbmcgZnJvbSBmaWxlICRmaWxlIGZhaWxlZCEiCisgICAgcmV0dXJuICRyZXQKK30KKworZG9fbWlncmF0ZV9sb2NhbGNvdW50ICgpCit7CisgICAgZGY9YGJpdGJha2UgLVIgY29uZi9taWdyYXRlX2xvY2FsY291bnQuY29uZiAtZSB8IFwKKyAgICAgICAgICAgICAgICBncmVwIF5MT0NBTENPVU5UX0RVTVBGSUxFPSB8IGN1dCAtZjIgLWRcImAKKyAgICBpZiBbICJ4JHtkZn0iID09ICJ4IiBdOworICAgIHRoZW4KKyAgICAgICAgZWNobyAiTE9DQUxDT1VOVF9EVU1QRklMRSBpcyBub3QgZGVmaW5lZCEiCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKworICAgIHJtIC1yZiAkZGYKKyAgICBjbGVhbl9jYWNoZQorICAgIGVjaG8gIkV4cG9ydGluZyBMT0NBTENPVU5UIHRvIEFVVE9JTkNzLi4uIgorICAgIGJpdGJha2UgLVIgY29uZi9taWdyYXRlX2xvY2FsY291bnQuY29uZiAtcAorICAgIFsgISAkPyAtZXEgMCBdICYmIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRkZiBmYWlsZWQhIiAmJiBleGl0IDEKKworICAgIGlmIFsgLWUgJGRmIF07CisgICAgdGhlbgorICAgICAgICBlY2hvICJFeHBvcnRpbmcgdG8gZmlsZSAkZGYgc3VjY2VlZGVkISIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkV4cG9ydGluZyB0byBmaWxlICRkZiBmYWlsZWQhIgorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIAorICAgIGVjaG8gIkltcG9ydGluZyBnZW5lcmF0ZWQgQVVUT0lOQyBlbnRyaWVzLi4uIgorICAgIFsgLWUgJGRmIF0gJiYgZG9faW1wb3J0ICRkZgorCisgICAgaWYgWyAhICQ/IC1lcSAwIF0KKyAgICB0aGVuCisgICAgICAgIGVjaG8gIk1pZ3JhdGlvbiBmcm9tIExPQ0FMQ09VTlQgdG8gQVVUT0lOQ3MgZmFpbGVkISIKKyAgICAgICAgcmV0dXJuIDEKKyAgICBmaQorCisgICAgZWNobyAiTWlncmF0aW9uIGZyb20gTE9DQUxDT1VOVCB0byBBVVRPSU5DcyBzdWNjZWVkZWQhIgorICAgIHJldHVybiAwCit9CisKK1sgJCMgLWVxIDAgXSAmJiBoZWxwICAmJiBleGl0IDEKKworY2FzZSAkMSBpbgorZXhwb3J0KQorICAgIGRvX2V4cG9ydCAkMgorICAgIDs7CitpbXBvcnQpCisgICAgZG9faW1wb3J0ICQyCisgICAgOzsKK21pZ3JhdGVfbG9jYWxjb3VudCkKKyAgICBkb19taWdyYXRlX2xvY2FsY291bnQKKyAgICA7OworKikKKyAgICBoZWxwCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZCBiL3NjcmlwdHMvYml0YmFrZS13aGF0Y2hhbmdlZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NWNmZTRiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9iaXRiYWtlLXdoYXRjaGFuZ2VkCkBAIC0wLDAgKzEsMzM5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisKKyMgQ29weXJpZ2h0IChjKSAyMDEzIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworaW1wb3J0IHNjcmlwdHBhdGgKKworIyBGaWd1cmUgb3V0IHdoZXJlIGlzIHRoZSBiaXRiYWtlL2xpYi9iYiBzaW5jZSB3ZSBuZWVkIGJiLnNpZ2dlbiBhbmQgYmIucHJvY2VzcworYml0YmFrZXBhdGggPSBzY3JpcHRwYXRoLmFkZF9iaXRiYWtlX2xpYl9wYXRoKCkKK2lmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEhcbiIpCisgICAgc3lzLmV4aXQoMSkKKworaW1wb3J0IGJiLnNpZ2dlbgoraW1wb3J0IGJiLnByb2Nlc3MKKworIyBNYXRjaCB0aGUgc3RhbXAncyBmaWxlbmFtZQorIyBncm91cCgxKTogUEVfUFYgKG1heSBubyBQRSkKKyMgZ3JvdXAoMik6IFBSCisjIGdyb3VwKDMpOiBUQVNLCisjIGdyb3VwKDQpOiBIQVNICitzdGFtcF9yZSA9IHJlLmNvbXBpbGUoIig/UDxwdj4uKiktKD9QPHByPnJcZCspXC4oP1A8dGFzaz5kb19cdyspXC4oP1A8aGFzaD5bXlwuXSopIikKK3NpZ2RhdGFfcmUgPSByZS5jb21waWxlKCIuKlwuc2lnZGF0YVwuLioiKQorCitkZWYgZ2VuX2RpY3Qoc3RhbXBzKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSB0aGUgZGljdCBmcm9tIHRoZSBzdGFtcHMgZGlyLgorICAgIFRoZSBvdXRwdXQgZGljdCBmb3JtYXQgaXM6CisgICAge2Zha2VfZjoge3BuOiBQTiwgcHY6IFBWLCBwcjogUFIsIHRhc2s6IFRBU0ssIHBhdGg6IFBBVEh9fQorICAgIFdoZXJlOgorICAgIGZha2VfZjogcHYgKyB0YXNrICsgaGFzaAorICAgIHBhdGg6IHRoZSBwYXRoIHRvIHRoZSBzdGFtcCBmaWxlCisgICAgIiIiCisgICAgIyBUaGUgbWVtYmVyIG9mIHRoZSBzdWIgZGljdCAoQSAicGF0aCIgd2lsbCBiZSBhcHBlbmRlZCBiZWxvdykKKyAgICBzdWJfbWVtID0gKCJwdiIsICJwciIsICJ0YXNrIikKKyAgICBkID0ge30KKyAgICBmb3IgZGlycGF0aCwgXywgZmlsZXMgaW4gb3Mud2FsayhzdGFtcHMpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICMgVGhlICJiaXRiYWtlIC1TIiB3b3VsZCBnZW5lcmF0ZSAiLnNpZ2RhdGEiLCBidXQgbm8gIl9zZXRzY2VuZSIuCisgICAgICAgICAgICBmYWtlX2YgPSByZS5zdWIoJ19zZXRzY2VuZS4nLCAnLicsIGYpCisgICAgICAgICAgICBmYWtlX2YgPSByZS5zdWIoJy5zaWdkYXRhJywgJycsIGZha2VfZikKKyAgICAgICAgICAgIHN1YmRpY3QgPSB7fQorICAgICAgICAgICAgdG1wID0gc3RhbXBfcmUubWF0Y2goZmFrZV9mKQorICAgICAgICAgICAgaWYgdG1wOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHN1Yl9tZW06CisgICAgICAgICAgICAgICAgICAgIHN1YmRpY3RbaV0gPSB0bXAuZ3JvdXAoaSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3ViZGljdCkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcG4gPSBvcy5wYXRoLmJhc2VuYW1lKGRpcnBhdGgpCisgICAgICAgICAgICAgICAgICAgIHN1YmRpY3RbJ3BuJ10gPSBwbgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBwYXRoIHdpbGwgYmUgdXNlZCBieSBvcy5zdGF0KCkgYW5kIGJiLnNpZ2dlbgorICAgICAgICAgICAgICAgICAgICBzdWJkaWN0WydwYXRoJ10gPSBkaXJwYXRoICsgIi8iICsgZgorICAgICAgICAgICAgICAgICAgICBmYWtlX2YgPSB0bXAuZ3JvdXAoJ3B2JykgKyB0bXAuZ3JvdXAoJ3Rhc2snKSArIHRtcC5ncm91cCgnaGFzaCcpCisgICAgICAgICAgICAgICAgICAgIGRbZmFrZV9mXSA9IHN1YmRpY3QKKyAgICByZXR1cm4gZAorCisjIFJlLWNvbnN0cnVjdCB0aGUgZGljdAorZGVmIHJlY29uX2RpY3QoZGljdF9pbik6CisgICAgIiIiCisgICAgVGhlIG91dHB1dCBkaWN0IGZvcm1hdCBpczoKKyAgICB7cG5fdGFzazoge3B2OiBQViwgcHI6IFBSLCBwYXRoOiBQQVRIfX0KKyAgICAiIiIKKyAgICBkaWN0X291dCA9IHt9CisgICAgZm9yIGsgaW4gZGljdF9pbi5rZXlzKCk6CisgICAgICAgIHN1YmRpY3QgPSB7fQorICAgICAgICAjIFRoZSBrZXkKKyAgICAgICAgcG5fdGFzayA9ICIlc18lcyIgJSAoZGljdF9pbi5nZXQoaykuZ2V0KCdwbicpLCBkaWN0X2luLmdldChrKS5nZXQoJ3Rhc2snKSkKKyAgICAgICAgIyBJZiBtb3JlIHRoYW4gb25lIHN0YW1wcyBhcmUgZm91bmQsIHVzZSB0aGUgbGF0ZXN0IG9uZS4KKyAgICAgICAgaWYgcG5fdGFzayBpbiBkaWN0X291dDoKKyAgICAgICAgICAgIGZ1bGxfcGF0aF9wcmUgPSBkaWN0X291dC5nZXQocG5fdGFzaykuZ2V0KCdwYXRoJykKKyAgICAgICAgICAgIGZ1bGxfcGF0aF9jdXIgPSBkaWN0X2luLmdldChrKS5nZXQoJ3BhdGgnKQorICAgICAgICAgICAgaWYgb3Muc3RhdChmdWxsX3BhdGhfcHJlKS5zdF9tdGltZSA+IG9zLnN0YXQoZnVsbF9wYXRoX2N1cikuc3RfbXRpbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc3ViZGljdFsncHYnXSA9IGRpY3RfaW4uZ2V0KGspLmdldCgncHYnKQorICAgICAgICBzdWJkaWN0WydwciddID0gZGljdF9pbi5nZXQoaykuZ2V0KCdwcicpCisgICAgICAgIHN1YmRpY3RbJ3BhdGgnXSA9IGRpY3RfaW4uZ2V0KGspLmdldCgncGF0aCcpCisgICAgICAgIGRpY3Rfb3V0W3BuX3Rhc2tdID0gc3ViZGljdAorCisgICAgcmV0dXJuIGRpY3Rfb3V0CisKK2RlZiBzcGxpdF9wbnRhc2socyk6CisgICAgIiIiCisgICAgU3BsaXQgdGhlIHBuX3Rhc2sgaW4gdG8gKHBuLCB0YXNrKSBhbmQgcmV0dXJuIGl0CisgICAgIiIiCisgICAgdG1wID0gcmUubWF0Y2goIiguKilfKGRvXy4qKSIsIHMpCisgICAgcmV0dXJuICh0bXAuZ3JvdXAoMSksIHRtcC5ncm91cCgyKSkKKworCitkZWYgcHJpbnRfYWRkZWQoZF9uZXcgPSBOb25lLCBkX29sZCA9IE5vbmUpOgorICAgICIiIgorICAgIFByaW50IHRoZSBuZXdseSBhZGRlZCB0YXNrcworICAgICIiIgorICAgIGFkZGVkID0ge30KKyAgICBmb3IgayBpbiBkX25ldy5rZXlzKCk6CisgICAgICAgIGlmIGsgbm90IGluIGRfb2xkOgorICAgICAgICAgICAgIyBBZGQgdGhlIG5ldyBvbmUgdG8gYWRkZWQgZGljdCwgYW5kIHJlbW92ZSBpdCBmcm9tCisgICAgICAgICAgICAjIGRfbmV3LCBzbyB0aGUgcmVtYWluaW5nIG9uZXMgYXJlIHRoZSBjaGFuZ2VkIG9uZXMKKyAgICAgICAgICAgIGFkZGVkW2tdID0gZF9uZXcuZ2V0KGspCisgICAgICAgICAgICBkZWwoZF9uZXdba10pCisKKyAgICBpZiBub3QgYWRkZWQ6CisgICAgICAgIHJldHVybiAwCisKKyAgICAjIEZvcm1hdCB0aGUgb3V0cHV0LCB0aGUgZGljdCBmb3JtYXQgaXM6CisgICAgIyB7cG46IHRhc2sxLCB0YXNrMiAuLi59CisgICAgYWRkZWRfZm9ybWF0ID0ge30KKyAgICBjb3VudGVyID0gMAorICAgIGZvciBrIGluIGFkZGVkLmtleXMoKToKKyAgICAgICAgcG4sIHRhc2sgPSBzcGxpdF9wbnRhc2soaykKKyAgICAgICAgaWYgcG4gaW4gYWRkZWRfZm9ybWF0OgorICAgICAgICAgICAgIyBBcHBlbmQgdGhlIHZhbHVlCisgICAgICAgICAgICBhZGRlZF9mb3JtYXRbcG5dID0gIiVzICVzIiAlIChhZGRlZF9mb3JtYXQuZ2V0KHBuKSwgdGFzaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZGVkX2Zvcm1hdFtwbl0gPSB0YXNrCisgICAgICAgIGNvdW50ZXIgKz0gMQorICAgIHByaW50KCI9PT0gTmV3bHkgYWRkZWQgdGFza3M6ICglcyB0YXNrcykiICUgY291bnRlcikKKyAgICBmb3IgayBpbiBhZGRlZF9mb3JtYXQua2V5cygpOgorICAgICAgICBwcmludCgiICAlczogJXMiICUgKGssIGFkZGVkX2Zvcm1hdC5nZXQoaykpKQorCisgICAgcmV0dXJuIGNvdW50ZXIKKworZGVmIHByaW50X3ZyY2hhbmdlZChkX25ldyA9IE5vbmUsIGRfb2xkID0gTm9uZSwgdnIgPSBOb25lKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgcHYgb3IgcHIgY2hhbmdlZCB0YXNrcy4KKyAgICBUaGUgYXJnICJ2ciIgaXMgInB2IiBvciAicHIiCisgICAgIiIiCisgICAgcHZjaGFuZ2VkID0ge30KKyAgICBjb3VudGVyID0gMAorICAgIGZvciBrIGluIGRfbmV3LmtleXMoKToKKyAgICAgICAgaWYgZF9uZXcuZ2V0KGspLmdldCh2cikgIT0gZF9vbGQuZ2V0KGspLmdldCh2cik6CisgICAgICAgICAgICBjb3VudGVyICs9IDEKKyAgICAgICAgICAgIHBuLCB0YXNrID0gc3BsaXRfcG50YXNrKGspCisgICAgICAgICAgICBpZiBwbiBub3QgaW4gcHZjaGFuZ2VkOgorICAgICAgICAgICAgICAgICMgRm9ybWF0IHRoZSBvdXRwdXQsIHdlIG9ubHkgcHJpbnQgcG4gKG5vIHRhc2spIHNpbmNlCisgICAgICAgICAgICAgICAgIyBhbGwgdGhlIHRhc2tzIHdvdWxkIGJlIGNoYW5nZWQgd2hlbiBwbiBvciBwciBjaGFuZ2VkLAorICAgICAgICAgICAgICAgICMgdGhlIGRpY3QgZm9ybWF0IGlzOgorICAgICAgICAgICAgICAgICMge3BuOiBwdi9wcl9vbGQgLT4gcHYvcHJfbmV3fQorICAgICAgICAgICAgICAgIHB2Y2hhbmdlZFtwbl0gPSAiJXMgLT4gJXMiICUgKGRfb2xkLmdldChrKS5nZXQodnIpLCBkX25ldy5nZXQoaykuZ2V0KHZyKSkKKyAgICAgICAgICAgIGRlbChkX25ld1trXSkKKworICAgIGlmIG5vdCBwdmNoYW5nZWQ6CisgICAgICAgIHJldHVybiAwCisKKyAgICBwcmludCgiXG49PT0gJXMgY2hhbmdlZDogKCVzIHRhc2tzKSIgJSAodnIudXBwZXIoKSwgY291bnRlcikpCisgICAgZm9yIGsgaW4gcHZjaGFuZ2VkLmtleXMoKToKKyAgICAgICAgcHJpbnQoIiAgJXM6ICVzIiAlIChrLCBwdmNoYW5nZWQuZ2V0KGspKSkKKworICAgIHJldHVybiBjb3VudGVyCisKK2RlZiBwcmludF9kZXBjaGFuZ2VkKGRfbmV3ID0gTm9uZSwgZF9vbGQgPSBOb25lLCB2ZXJib3NlID0gRmFsc2UpOgorICAgICIiIgorICAgIFByaW50IHRoZSBkZXBlbmRlbmN5IGNoYW5nZXMKKyAgICAiIiIKKyAgICBkZXBjaGFuZ2VkID0ge30KKyAgICBjb3VudGVyID0gMAorICAgIGZvciBrIGluIGRfbmV3LmtleXMoKToKKyAgICAgICAgY291bnRlciArPSAxCisgICAgICAgIHBuLCB0YXNrID0gc3BsaXRfcG50YXNrKGspCisgICAgICAgIGlmICh2ZXJib3NlKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aF9vbGQgPSBkX29sZC5nZXQoaykuZ2V0KCJwYXRoIikKKyAgICAgICAgICAgIGZ1bGxfcGF0aF9uZXcgPSBkX25ldy5nZXQoaykuZ2V0KCJwYXRoIikKKyAgICAgICAgICAgICMgTm8gY291bnRlciBzaW5jZSBpdCBpcyBub3QgcmVhZHkgaGVyZQorICAgICAgICAgICAgaWYgc2lnZGF0YV9yZS5tYXRjaChmdWxsX3BhdGhfb2xkKSBhbmQgc2lnZGF0YV9yZS5tYXRjaChmdWxsX3BhdGhfbmV3KToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBiYi5zaWdnZW4uY29tcGFyZV9zaWdmaWxlcyhmdWxsX3BhdGhfb2xkLCBmdWxsX3BhdGhfbmV3KQorICAgICAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlxuPT09IFRoZSB2ZXJib3NlIGNoYW5nZXMgb2YgJXMuZG9fJXM6IiAlIChwbiwgdGFzaykpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdcbicuam9pbihvdXRwdXQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBGb3JtYXQgdGhlIG91dHB1dCwgdGhlIGZvcm1hdCBpczoKKyAgICAgICAgICAgICMge3BuOiB0YXNrMSwgdGFzazIsIC4uLn0KKyAgICAgICAgICAgIGlmIHBuIGluIGRlcGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgZGVwY2hhbmdlZFtwbl0gPSAiJXMgJXMiICUgKGRlcGNoYW5nZWQuZ2V0KHBuKSwgdGFzaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVwY2hhbmdlZFtwbl0gPSB0YXNrCisKKyAgICBpZiBsZW4oZGVwY2hhbmdlZCkgPiAwOgorICAgICAgICBwcmludCgiXG49PT0gRGVwZW5kZW5jaWVzIGNoYW5nZWQ6ICglcyB0YXNrcykiICUgY291bnRlcikKKyAgICAgICAgZm9yIGsgaW4gZGVwY2hhbmdlZC5rZXlzKCk6CisgICAgICAgICAgICBwcmludCgiICAlczogJXMiICUgKGssIGRlcGNoYW5nZWRba10pKQorCisgICAgcmV0dXJuIGNvdW50ZXIKKworCitkZWYgbWFpbigpOgorICAgICIiIgorICAgIFByaW50IHdoYXQgd2lsbCBiZSBkb25lIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgYnVpbGRzOgorICAgIDEpIFJ1biAiU1RBTVBTX0RJUj08cGF0aD4gYml0YmFrZSAtUyByZWNpcGUiIHRvIHJlLWdlbmVyYXRlIHRoZSBzdGFtcHMKKyAgICAyKSBGaWd1cmUgb3V0IHdoYXQgYXJlIG5ld2x5IGFkZGVkIGFuZCBjaGFuZ2VkLCBjYW4ndCBmaWd1cmUgb3V0CisgICAgICAgd2hhdCBhcmUgcmVtb3ZlZCBzaW5jZSB3ZSBjYW4ndCBrbm93IHRoZSBwcmV2aW91cyBzdGFtcHMKKyAgICAgICBjbGVhcmx5LCBmb3IgZXhhbXBsZSwgaWYgdGhlcmUgYXJlIHNldmVyYWwgYnVpbGRzLCB3ZSBjYW4ndCBrbm93CisgICAgICAgd2hpY2ggc3RhbXBzIHRoZSBsYXN0IGJ1aWxkIGhhcyB1c2VkIGV4YWN0bHkuCisgICAgMykgVXNlIGJiLnNpZ2dlbi5jb21wYXJlX3NpZ2ZpbGVzIHRvIGRpZmYgdGhlIG9sZCBhbmQgbmV3IHN0YW1wcworICAgICIiIgorCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKAorICAgICAgICB2ZXJzaW9uID0gIjEuMCIsCisgICAgICAgIHVzYWdlID0gIiIiJXByb2cgW29wdGlvbnNdIFtwYWNrYWdlIC4uLl0KK3ByaW50IHdoYXQgd2lsbCBiZSBkb25lIGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIGxhc3QgYnVpbGRzLCBmb3IgZXhhbXBsZToKKworICAgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKyAgICAjIEVkaXQgdGhlIHJlY2lwZXMKKyAgICAkIGJpdGJha2Utd2hhdGNoYW5nZWQgY29yZS1pbWFnZS1zYXRvCisKK1RoZSBjaGFuZ2VzIHdpbGwgYmUgcHJpbnRlZCIKKworTm90ZToKKyAgICBUaGUgYW1vdW50IG9mIHRhc2tzIGlzIG5vdCBhY2N1cmF0ZSB3aGVuIHRoZSB0YXNrIGlzICJkb19idWlsZCIgc2luY2UKKyAgICBpdCB1c3VhbGx5IGRlcGVuZHMgb24gb3RoZXIgdGFza3MuCisgICAgVGhlICJub3N0YW1wIiB0YXNrIGlzIG5vdCBpbmNsdWRlZC4KKyIiIgorKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBoZWxwID0gInByaW50IHRoZSB2ZXJib3NlIGNoYW5nZXMiLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gInZlcmJvc2UiKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHN5cy5hcmd2KQorCisgICAgdmVyYm9zZSA9IG9wdGlvbnMudmVyYm9zZQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgIHBhcnNlci5lcnJvcigiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMiKQorICAgIGVsc2U6CisgICAgICAgIHJlY2lwZSA9IGFyZ3NbMV0KKworICAgICMgR2V0IHRoZSBTVEFNUFNfRElSCisgICAgcHJpbnQoIkZpZ3VyaW5nIG91dCB0aGUgU1RBTVBTX0RJUiAuLi4iKQorICAgIGNtZGxpbmUgPSAiYml0YmFrZSAtZSB8IHNlZCAtbmUgJ3MvXlNUQU1QU19ESVI9XCJcKC4qXClcIi9cXDEvcCciCisgICAgdHJ5OgorICAgICAgICBzdGFtcHNkaXIsIGVyciA9IGJiLnByb2Nlc3MucnVuKGNtZGxpbmUpCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZQorICAgIGlmIG5vdCBzdGFtcHNkaXI6CisgICAgICAgIHByaW50KCJFUlJPUjogTm8gU1RBTVBTX0RJUiBmb3VuZCBmb3IgJyVzJyIgJSByZWNpcGUsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuIDIKKyAgICBzdGFtcHNkaXIgPSBzdGFtcHNkaXIucnN0cmlwKCJcbiIpCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3RhbXBzZGlyKToKKyAgICAgICAgcHJpbnQoIkVSUk9SOiBzdGFtcHMgZGlyZWN0b3J5IFwiJXNcIiBub3QgZm91bmQhIiAlIHN0YW1wc2RpciwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICByZXR1cm4gMgorCisgICAgIyBUaGUgbmV3IHN0YW1wcyBkaXIKKyAgICBuZXdfc3RhbXBzZGlyID0gc3RhbXBzZGlyICsgIi5iYnMiCisgICAgaWYgb3MucGF0aC5leGlzdHMobmV3X3N0YW1wc2Rpcik6CisgICAgICAgIHByaW50KCJFUlJPUjogJXMgYWxyZWFkeSBleGlzdHMhIiAlIG5ld19zdGFtcHNkaXIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuIDIKKworICAgIHRyeToKKyAgICAgICAgIyBHZW5lcmF0ZSB0aGUgbmV3IHN0YW1wcyBkaXIKKyAgICAgICAgcHJpbnQoIkdlbmVyYXRpbmcgdGhlIG5ldyBzdGFtcHMgLi4uIChuZWVkIHNldmVyYWwgbWludXRlcykiKQorICAgICAgICBjbWRsaW5lID0gIlNUQU1QU19ESVI9JXMgYml0YmFrZSAtUyBub25lICVzIiAlIChuZXdfc3RhbXBzZGlyLCByZWNpcGUpCisgICAgICAgICMgRklYTUUKKyAgICAgICAgIyBUaGUgImJpdGJha2UgLVMiIG1heSBmYWlsLCBub3QgZmF0YWwgZXJyb3IsIHRoZSBzdGFtcHMgd2lsbCBzdGlsbAorICAgICAgICAjIGJlIGdlbmVyYXRlZCwgdGhpcyBtaWdodCBiZSBhIGJ1ZyBvZiAiYml0YmFrZSAtUyIuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKGNtZGxpbmUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgcHJpbnQoZXhjKQorCisgICAgICAgICMgVGhlIGRpY3QgZm9yIHRoZSBuZXcgYW5kIG9sZCBzdGFtcHMuCisgICAgICAgIG9sZF9kaWN0ID0gZ2VuX2RpY3Qoc3RhbXBzZGlyKQorICAgICAgICBuZXdfZGljdCA9IGdlbl9kaWN0KG5ld19zdGFtcHNkaXIpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHNhbWUgb25lIGZyb20gYm90aCBzdGFtcHMuCisgICAgICAgIGNudF91bmNoYW5nZWQgPSAwCisgICAgICAgIGZvciBrIGluIG5ld19kaWN0LmtleXMoKToKKyAgICAgICAgICAgIGlmIGsgaW4gb2xkX2RpY3Q6CisgICAgICAgICAgICAgICAgY250X3VuY2hhbmdlZCArPSAxCisgICAgICAgICAgICAgICAgZGVsKG5ld19kaWN0W2tdKQorICAgICAgICAgICAgICAgIGRlbChvbGRfZGljdFtrXSkKKworICAgICAgICAjIFJlLWNvbnN0cnVjdCB0aGUgZGljdCB0byBlYXNpbHkgZmluZCBvdXQgd2hhdCBpcyBhZGRlZCBvciBjaGFuZ2VkLgorICAgICAgICAjIFRoZSBkaWN0IGZvcm1hdCBpczoKKyAgICAgICAgIyB7cG5fdGFzazoge3B2OiBQViwgcHI6IFBSLCBwYXRoOiBQQVRIfX0KKyAgICAgICAgbmV3X3JlY29uID0gcmVjb25fZGljdChuZXdfZGljdCkKKyAgICAgICAgb2xkX3JlY29uID0gcmVjb25fZGljdChvbGRfZGljdCkKKworICAgICAgICBkZWwgbmV3X2RpY3QKKyAgICAgICAgZGVsIG9sZF9kaWN0CisKKyAgICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgYXJlIGNoYW5nZWQsIHRoZSBuZXdfcmVjb24gd291bGQgYmUgY2hhbmdlZAorICAgICAgICAjIGJ5IHRoZSBwcmludF94eHggZnVuY3Rpb24uCisgICAgICAgICMgTmV3bHkgYWRkZWQKKyAgICAgICAgY250X2FkZGVkID0gcHJpbnRfYWRkZWQobmV3X3JlY29uLCBvbGRfcmVjb24pCisKKyAgICAgICAgIyBQViAoaW5jbHVkaW5nIFBFKSBhbmQgUFIgY2hhbmdlZAorICAgICAgICAjIExldCB0aGUgYmIuc2lnZ2VuIGhhbmRsZSB0aGVtIGlmIHZlcmJvc2UKKyAgICAgICAgY250X3J2ID0ge30KKyAgICAgICAgaWYgbm90IHZlcmJvc2U6CisgICAgICAgICAgICBmb3IgaSBpbiAoJ3B2JywgJ3ByJyk6CisgICAgICAgICAgICAgICBjbnRfcnZbaV0gPSBwcmludF92cmNoYW5nZWQobmV3X3JlY29uLCBvbGRfcmVjb24sIGkpCisKKyAgICAgICAgIyBEZXBlbmRlbmNpZXMgY2hhbmdlZCAodXNlIGJpdGJha2UtZGlmZnNpZ3MpCisgICAgICAgIGNudF9kZXAgPSBwcmludF9kZXBjaGFuZ2VkKG5ld19yZWNvbiwgb2xkX3JlY29uLCB2ZXJib3NlKQorCisgICAgICAgIHRvdGFsX2NoYW5nZWQgPSBjbnRfYWRkZWQgKyAoY250X3J2LmdldCgncHYnKSBvciAwKSArIChjbnRfcnYuZ2V0KCdwcicpIG9yIDApICsgY250X2RlcAorCisgICAgICAgIHByaW50KCJcbj09PSBTdW1tYXJ5OiAoJXMgY2hhbmdlZCwgJXMgdW5jaGFuZ2VkKSIgJSAodG90YWxfY2hhbmdlZCwgY250X3VuY2hhbmdlZCkpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiTmV3bHkgYWRkZWQ6ICVzXG5EZXBlbmRlbmNpZXMgY2hhbmdlZDogJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgKGNudF9hZGRlZCwgY250X2RlcCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiTmV3bHkgYWRkZWQ6ICVzXG5QViBjaGFuZ2VkOiAlc1xuUFIgY2hhbmdlZDogJXNcbkRlcGVuZGVuY2llcyBjaGFuZ2VkOiAlc1xuIiAlIFwKKyAgICAgICAgICAgICAgICAoY250X2FkZGVkLCBjbnRfcnYuZ2V0KCdwdicpIG9yIDAsIGNudF9ydi5nZXQoJ3ByJykgb3IgMCwgY250X2RlcCkpCisgICAgZXhjZXB0OgorICAgICAgICBwcmludCgiRVJST1Igb2NjdXJyZWQhIikKKyAgICAgICAgcmFpc2UKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFJlbW92ZSB0aGUgbmV3bHkgZ2VuZXJhdGVkIHN0YW1wcyBkaXIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmV3X3N0YW1wc2Rpcik6CisgICAgICAgICAgICBwcmludCgiUmVtb3ZpbmcgdGhlIG5ld2x5IGdlbmVyYXRlZCBzdGFtcHMgZGlyIC4uLiIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKG5ld19zdGFtcHNkaXIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzIGIvc2NyaXB0cy9idWlsZGhpc3RvcnktY29sbGVjdC1zcmNyZXZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4YTI3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2J1aWxkaGlzdG9yeS1jb2xsZWN0LXNyY3JldnMKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb2xsZWN0cyB0aGUgcmVjb3JkZWQgU1JDUkVWIHZhbHVlcyBmcm9tIGJ1aWxkaGlzdG9yeSBhbmQgcmVwb3J0cyBvbiB0aGVtCisjCisjIENvcHlyaWdodCAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcmVkLWJ5OiAgUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBpbnRlbC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgb3MsIHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworCitkZWYgbG9nZ2VyX2NyZWF0ZSgpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJidWlsZGhpc3RvcnkiKQorICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCIlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICByZXR1cm4gbG9nZ2VyCisKK2xvZ2dlciA9IGxvZ2dlcl9jcmVhdGUoKQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb24gPSAiQ29sbGVjdHMgdGhlIHJlY29yZGVkIFNSQ1JFViB2YWx1ZXMgZnJvbSBidWlsZGhpc3RvcnkgYW5kIHJlcG9ydHMgb24gdGhlbS4iLAorICAgICAgICB1c2FnZSA9ICIiIgorICAgICVwcm9nIFtvcHRpb25zXSIiIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLXJlcG9ydC1hbGwiLAorICAgICAgICAgICAgaGVscCA9ICJSZXBvcnQgYWxsIFNSQ1JFViB2YWx1ZXMsIG5vdCBqdXN0IG9uZXMgd2hlcmUgQVVUT1JFViBoYXMgYmVlbiB1c2VkIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcG9ydGFsbCIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9yY2V2YXJpYWJsZSIsCisgICAgICAgICAgICBoZWxwID0gIlVzZSBmb3JjZXZhcmlhYmxlIG92ZXJyaWRlIGZvciBhbGwgb3V0cHV0IGxpbmVzIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNldmFyaWFibGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLWJ1aWxkaGlzdG9yeS1kaXIiLAorICAgICAgICAgICAgaGVscCA9ICJTcGVjaWZ5IHBhdGggdG8gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gYnVpbGRoaXN0b3J5LyB1bmRlciBjd2QpIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJidWlsZGhpc3RvcnlfZGlyIiwgZGVmYXVsdD0nYnVpbGRoaXN0b3J5LycpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdJbnZhbGlkIGFyZ3VtZW50KHMpIHNwZWNpZmllZDogJXNcblxuJyAlICcgJy5qb2luKGFyZ3NbMTpdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9wdGlvbnMuYnVpbGRoaXN0b3J5X2Rpcik6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0J1aWxkaGlzdG9yeSBkaXJlY3RvcnkgIiVzIiBkb2VzIG5vdCBleGlzdFxuXG4nICUgb3B0aW9ucy5idWlsZGhpc3RvcnlfZGlyKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvcHRpb25zLmZvcmNldmFyaWFibGU6CisgICAgICAgIGZvcmNldmFyaWFibGUgPSAnX2ZvcmNldmFyaWFibGUnCisgICAgZWxzZToKKyAgICAgICAgZm9yY2V2YXJpYWJsZSA9ICcnCisKKyAgICBsYXN0ZGlyID0gJycKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpOgorICAgICAgICBpZiAnLmdpdCcgaW4gZGlyczoKKyAgICAgICAgICAgIGRpcnMucmVtb3ZlKCcuZ2l0JykKKyAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgZm4gPT0gJ2xhdGVzdF9zcmNyZXYnOgorICAgICAgICAgICAgICAgIGN1cmRpciA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKHJvb3QpKQorICAgICAgICAgICAgICAgIGlmIGxhc3RkaXIgIT0gY3VyZGlyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnIyAlcycgJSBjdXJkaXIpCisgICAgICAgICAgICAgICAgICAgIGxhc3RkaXIgPSBjdXJkaXIKKyAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmbikKKyAgICAgICAgICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUocm9vdCkKKyAgICAgICAgICAgICAgICBzcmNyZXYgPSBOb25lCisgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSBOb25lCisgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXZzID0ge30KKyAgICAgICAgICAgICAgICBzcmNyZXZzID0ge30KKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZnVsbHBhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHZhbCA9IGxpbmUuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3BsaXR2YWxbMV0uc3RyaXAoJyIgXHRcblxyJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBTUkNSRVYgPSAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3NyY3JldiA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBTUkNSRVZfJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBsaW5lLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3BsaXR2YWxbMF0uc3BsaXQoJ18nKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXZzW25hbWVdID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdTUkNSRVYgPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3JldiA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnU1JDUkVWXycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzcGxpdHZhbFswXS5zcGxpdCgnXycpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNyZXZzW25hbWVdID0gdmFsdWUKKyAgICAgICAgICAgICAgICBpZiBzcmNyZXYgYW5kIChvcHRpb25zLnJlcG9ydGFsbCBvciBzcmNyZXYgIT0gb3JpZ19zcmNyZXYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnU1JDUkVWX3BuLSVzJXMgPSAiJXMiJyAlIChwbiwgZm9yY2V2YXJpYWJsZSwgc3JjcmV2KSkKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc3JjcmV2cy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBvcmlnID0gb3JpZ19zcmNyZXZzLmdldChuYW1lLCBvcmlnX3NyY3JldikKKyAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9ucy5yZXBvcnRhbGwgb3IgdmFsdWUgIT0gb3JpZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdTUkNSRVZfJXNfcG4tJXMlcyA9ICIlcyInICUgKG5hbWUsIHBuLCBmb3JjZXZhcmlhYmxlLCB2YWx1ZSkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYgYi9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmZWJjZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2J1aWxkaGlzdG9yeS1kaWZmCkBAIC0wLDAgKzEsMTAwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBSZXBvcnQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gdGhlIGJ1aWxkaGlzdG9yeSByZXBvc2l0b3J5IHNpbmNlIGEgc3BlY2lmaWMgcmV2aXNpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjIEF1dGhvcjogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9wdHBhcnNlCitmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KKworIyBFbnN1cmUgUHl0aG9uR2l0IGlzIGluc3RhbGxlZCAoYnVpbGRoaXN0b3J5X2FuYWx5c2lzIG5lZWRzIGl0KQordHJ5OgorICAgIGltcG9ydCBnaXQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwcmludCgiUGxlYXNlIGluc3RhbGwgR2l0UHl0aG9uIChweXRob24tZ2l0KSAwLjMuMSBvciBsYXRlciBpbiBvcmRlciB0byB1c2UgdGhpcyBzY3JpcHQiKQorICAgIHN5cy5leGl0KDEpCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbiA9ICJSZXBvcnRzIHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIHRoZSBidWlsZGhpc3RvcnkgcmVwb3NpdG9yeS4iLAorICAgICAgICB1c2FnZSA9ICIiIgorICAgICVwcm9nIFtvcHRpb25zXSBbZnJvbS1yZXZpc2lvbiBbdG8tcmV2aXNpb25dXQorKGlmIG5vdCBzcGVjaWZpZWQsIGZyb20tcmV2aXNpb24gZGVmYXVsdHMgdG8gYnVpbGQtbWludXMtMSwgYW5kIHRvLXJldmlzaW9uIGRlZmF1bHRzIHRvIEhFQUQpIiIiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tYnVpbGRoaXN0b3J5LWRpciIsCisgICAgICAgICAgICBoZWxwID0gIlNwZWNpZnkgcGF0aCB0byBidWlsZGhpc3RvcnkgZGlyZWN0b3J5IChkZWZhdWx0cyB0byBidWlsZGhpc3RvcnkvIHVuZGVyIGN3ZCkiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ1aWxkaGlzdG9yeV9kaXIiLCBkZWZhdWx0PSdidWlsZGhpc3RvcnkvJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS1yZXBvcnQtdmVyc2lvbiIsCisgICAgICAgICAgICBoZWxwID0gIlJlcG9ydCBjaGFuZ2VzIGluIFBLR0UvUEtHVi9QS0dSIGV2ZW4gd2hlbiB0aGUgdmFsdWVzIGFyZSBzdGlsbCB0aGUgZGVmYXVsdCAoUEUvUFYvUFIpIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlcG9ydF92ZXIiLCBkZWZhdWx0PUZhbHNlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYSIsICItLXJlcG9ydC1hbGwiLAorICAgICAgICAgICAgaGVscCA9ICJSZXBvcnQgYWxsIGNoYW5nZXMsIG5vdCBqdXN0IHRoZSBkZWZhdWx0IHNpZ25pZmljYW50IG9uZXMiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icmVwb3J0X2FsbCIsIGRlZmF1bHQ9RmFsc2UpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICBpZiBsZW4oYXJncykgPiAzOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdJbnZhbGlkIGFyZ3VtZW50KHMpIHNwZWNpZmllZDogJXNcblxuJyAlICcgJy5qb2luKGFyZ3NbMzpdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgTG9vc2VWZXJzaW9uKGdpdC5fX3ZlcnNpb25fXykgPCAnMC4zLjEnOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJWZXJzaW9uIG9mIEdpdFB5dGhvbiBpcyB0b28gb2xkLCBwbGVhc2UgaW5zdGFsbCBHaXRQeXRob24gKHB5dGhvbi1naXQpIDAuMy4xIG9yIGxhdGVyIGluIG9yZGVyIHRvIHVzZSB0aGlzIHNjcmlwdFxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcHRpb25zLmJ1aWxkaGlzdG9yeV9kaXIpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdCdWlsZGhpc3RvcnkgZGlyZWN0b3J5ICIlcyIgZG9lcyBub3QgZXhpc3RcblxuJyAlIG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpcikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKKyAgICBsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworICAgIHN5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKKyAgICBpbXBvcnQgc2NyaXB0cGF0aAorCisgICAgIyBTZXQgcGF0aCB0byBPRSBsaWIgZGlyIHNvIHdlIGNhbiBpbXBvcnQgdGhlIGJ1aWxkaGlzdG9yeV9hbmFseXNpcyBtb2R1bGUKKyAgICBzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCisgICAgIyBTZXQgcGF0aCB0byBiaXRiYWtlIGxpYiBkaXIgc28gdGhlIGJ1aWxkaGlzdG9yeV9hbmFseXNpcyBtb2R1bGUgY2FuIGxvYWQgYmIudXRpbHMKKyAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW1wb3J0IG9lLmJ1aWxkaGlzdG9yeV9hbmFseXNpcworCisgICAgZnJvbXJldiA9ICdidWlsZC1taW51cy0xJworICAgIHRvcmV2ID0gJ0hFQUQnCisgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID09IDIgYW5kICcuLicgaW4gYXJnc1sxXToKKyAgICAgICAgICAgIHJldnMgPSBhcmdzWzFdLnNwbGl0KCcuLicpCisgICAgICAgICAgICBmcm9tcmV2ID0gcmV2c1swXQorICAgICAgICAgICAgaWYgcmV2c1sxXToKKyAgICAgICAgICAgICAgICB0b3JldiA9IHJldnNbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb21yZXYgPSBhcmdzWzFdCisgICAgaWYgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgdG9yZXYgPSBhcmdzWzJdCisKKyAgICBpbXBvcnQgZ2l0ZGIKKyAgICB0cnk6CisgICAgICAgIGNoYW5nZXMgPSBvZS5idWlsZGhpc3RvcnlfYW5hbHlzaXMucHJvY2Vzc19jaGFuZ2VzKG9wdGlvbnMuYnVpbGRoaXN0b3J5X2RpciwgZnJvbXJldiwgdG9yZXYsIG9wdGlvbnMucmVwb3J0X2FsbCwgb3B0aW9ucy5yZXBvcnRfdmVyKQorICAgIGV4Y2VwdCBnaXRkYi5leGMuQmFkT2JqZWN0IGFzIGU6CisgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgcHJldmlvdXMgYnVpbGQgcmV2aXNpb24gaW4gYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnlcblxuIikKKyAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1NwZWNpZmllZCBnaXQgcmV2aXNpb24gIiVzIiBpcyBub3QgdmFsaWRcbicgJSBlLmFyZ3NbMF0pCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmb3IgY2hnIGluIGNoYW5nZXM6CisgICAgICAgIHByaW50KCclcycgJSBjaGcpCisKKyAgICBzeXMuZXhpdCgwKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NsZWFudXAtd29ya2RpciBiL3NjcmlwdHMvY2xlYW51cC13b3JrZGlyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZjVhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NsZWFudXAtd29ya2RpcgpAQCAtMCwwICsxLDE5OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDEyIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNodXRpbAorCitwa2dfY3VyX2RpcnMgPSB7fQorb2Jzb2xldGVfZGlycyA9IFtdCitwYXJzZXIgPSBOb25lCisKK2RlZiBlcnJfcXVpdChtc2cpOgorICAgIHByaW50IG1zZworICAgIHBhcnNlci5wcmludF91c2FnZSgpCisgICAgc3lzLmV4aXQoMSkKKworZGVmIHBhcnNlX3ZlcnNpb24odmVyc3RyKToKKyAgICBlbGVtcyA9IHZlcnN0ci5zcGxpdCgnOicpCisgICAgZXBvY2ggPSBlbGVtc1swXQorICAgIGlmIGxlbihlcG9jaCkgPT0gMDoKKyAgICAgICAgcmV0dXJuIGVsZW1zWzFdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGVwb2NoICsgJ18nICsgZWxlbXNbMV0KKworZGVmIHJ1bl9jb21tYW5kKGNtZCk6CisgICAgcGlwZSA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzaGVsbD1UcnVlKQorICAgIG91dHB1dCA9IHBpcGUuY29tbXVuaWNhdGUoKVswXQorICAgIGlmIHBpcGUucmV0dXJuY29kZSAhPSAwOgorICAgICAgICBwcmludCAiRXhlY3V0ZSBjb21tYW5kICclcycgZmFpbGVkLiIgJSBjbWQKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gb3V0cHV0CisKK2RlZiBnZXRfY3VyX2FyY2hfZGlycyh3b3JrZGlyLCBhcmNoX2RpcnMpOgorICAgIHBhdHRlcm4gPSB3b3JrZGlyICsgJy8oLio/KS8nCisKKyAgICBjbWQgPSAiYml0YmFrZSAtZSB8IGdyZXAgXlNES19BUkNIPSIKKyAgICBvdXRwdXQgPSBydW5fY29tbWFuZChjbWQpCisgICAgc2RrX2FyY2ggPSBvdXRwdXQuc3BsaXQoJyInKVsxXQorCisgICAgIyBzZWxlY3QgdGhlc3QgNSBwYWNrYWdlcyB0byBnZXQgdGhlIGRpcnMgb2YgY3VycmVudCBhcmNoCisgICAgcGtncyA9IFsnaGljb2xvci1pY29uLXRoZW1lJywgJ2Jhc2UtZmlsZXMnLCAnYWNsLW5hdGl2ZScsICdiaW51dGlscy1jcm9zc3Nkay0nICsgc2RrX2FyY2gsICduYXRpdmVzZGstYXV0b2NvbmYnXQorCisgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICBjbWQgPSAiYml0YmFrZSAtZSAiICsgcGtnICsgIiB8IGdyZXAgXklNQUdFX1JPT1RGUz0iCisgICAgICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKKyAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCciJylbMV0KKyAgICAgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIG91dHB1dCkKKyAgICAgICAgYXJjaF9kaXJzLmFwcGVuZChtLmdyb3VwKDEpKQorCitkZWYgbWFpbigpOgorICAgIGdsb2JhbCBwYXJzZXIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIHVzYWdlID0gIiIiJXByb2cKKworJXByb2cgcmVtb3ZlcyB0aGUgb2Jzb2xldGUgcGFja2FnZXMnIGJ1aWxkIGRpcmVjdG9yaWVzIGluIFdPUktESVIuCitUaGlzIHNjcmlwdCBtdXN0IGJlIHJhbiB1bmRlciBCVUlMRERJUiBhZnRlciBzb3VyY2UgZmlsZSBcIm9lLWluaXQtYnVpbGQtZW52XCIuCisKK0FueSBmaWxlIG9yIGRpcmVjdG9yeSB1bmRlciBXT1JLRElSIHdoaWNoIGlzIG5vdCBjcmVhdGVkIGJ5IFlvY3RvCit3aWxsIGJlIGRlbGV0ZWQuIEJlIENBVVRJT1VTLiIiIikKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgIGJ1aWxkZGlyID0gcnVuX2NvbW1hbmQoJ2VjaG8gJEJVSUxERElSJykuc3RyaXAoKQorICAgIGlmIGxlbihidWlsZGRpcikgPT0gMDoKKyAgICAgICAgZXJyX3F1aXQoIlBsZWFzZSBzb3VyY2UgZmlsZSBcIm9lLWluaXQtYnVpbGQtZW52XCIgZmlyc3QuXG4iKQorCisgICAgaWYgb3MuZ2V0Y3dkKCkgIT0gYnVpbGRkaXI6CisgICAgICAgIGVycl9xdWl0KCJQbGVhc2UgcnVuICVzIHVuZGVyOiAlc1xuIiAlIChvcy5wYXRoLmJhc2VuYW1lKGFyZ3NbMF0pLCBidWlsZGRpcikpCisKKyAgICBwcmludCAnVXBkYXRpbmcgYml0YmFrZSBjYWNoZXMuLi4nCisgICAgY21kID0gImJpdGJha2UgLXMiCisgICAgb3V0cHV0ID0gcnVuX2NvbW1hbmQoY21kKQorCisgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCdcbicpCisgICAgaW5kZXggPSAwCisgICAgd2hpbGUgbGVuKG91dHB1dFtpbmRleF0pID4gMDoKKyAgICAgICAgaW5kZXggKz0gMQorICAgIGFsbGxpbmVzID0gb3V0cHV0W2luZGV4KzE6XQorCisgICAgZm9yIGxpbmUgaW4gYWxsbGluZXM6CisgICAgICAgICMgZW1wdHkgYWdhaW4gbWVhbnMgZW5kIG9mIHRoZSB2ZXJzaW9ucyBvdXRwdXQKKyAgICAgICAgaWYgbGVuKGxpbmUpID09IDA6CisgICAgICAgICAgICBicmVhaworICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGxpbmUgPSByZS5zdWIoJ1xzKycsICcgJywgbGluZSkKKyAgICAgICAgZWxlbXMgPSBsaW5lLnNwbGl0KCcgJykKKyAgICAgICAgaWYgbGVuKGVsZW1zKSA9PSAyOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlX3ZlcnNpb24oZWxlbXNbMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VfdmVyc2lvbihlbGVtc1syXSkKKyAgICAgICAgcGtnX2N1cl9kaXJzW2VsZW1zWzBdXSA9IHZlcnNpb24KKworICAgIGNtZCA9ICJiaXRiYWtlIC1lIgorICAgIG91dHB1dCA9IHJ1bl9jb21tYW5kKGNtZCkKKworICAgIHRtcGRpciA9IE5vbmUKKyAgICBpbWFnZV9yb290ZnMgPSBOb25lCisgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCdcbicpCisgICAgZm9yIGxpbmUgaW4gb3V0cHV0OgorICAgICAgICBpZiB0bXBkaXIgYW5kIGltYWdlX3Jvb3RmczoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IHRtcGRpcjoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnVE1QRElSPSIoLiopIicsIGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHRtcGRpciA9IG0uZ3JvdXAoMSkKKworICAgICAgICBpZiBub3QgaW1hZ2Vfcm9vdGZzOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdJTUFHRV9ST09URlM9IiguKikiJywgbGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgaW1hZ2Vfcm9vdGZzID0gbS5ncm91cCgxKQorCisgICAgIyB3b24ndCBmYWlsIGp1c3QgaW4gY2FzZQorICAgIGlmIG5vdCB0bXBkaXIgb3Igbm90IGltYWdlX3Jvb3RmczoKKyAgICAgICAgcHJpbnQgIkNhbid0IGdldCBUTVBESVIgb3IgSU1BR0VfUk9PVEZTLiIKKyAgICAgICAgcmV0dXJuIDEKKworICAgIHBhdHRlcm4gPSB0bXBkaXIgKyAnLyguKj8pLyguKj8pLycKKyAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgaW1hZ2Vfcm9vdGZzKQorICAgIGlmIG5vdCBtOgorICAgICAgICBwcmludCAiQ2FuJ3QgZ2V0IFdPUktESVIuIgorICAgICAgICByZXR1cm4gMQorCisgICAgd29ya2RpciA9IG9zLnBhdGguam9pbih0bXBkaXIsIG0uZ3JvdXAoMSkpCisKKyAgICAjIHdlIG9ubHkgZGVhbCB0aGUgZGlycyBvZiBjdXJyZW50IGFyY2gsIHRvdGFsIG51bWJlcnMgb2YgZGlycyBhcmUgNgorICAgIGN1cl9hcmNoX2RpcnMgPSBbbS5ncm91cCgyKV0KKyAgICBnZXRfY3VyX2FyY2hfZGlycyh3b3JrZGlyLCBjdXJfYXJjaF9kaXJzKQorCisgICAgZm9yIHdvcmtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdvcmtkaXIpOgorICAgICAgICAjIEZvciB0aGUgZmlsZXMsIHRoZXkgc2hvdWxkIE5PVCBleGlzdCBpbiBXT1JLRElSLiBSZW1vdmUgdGhlbS4KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4od29ya3Jvb3QsIGYpKQorCisgICAgICAgIGZvciBkIGluIGRpcnM6CisgICAgICAgICAgICBpZiBkIG5vdCBpbiBjdXJfYXJjaF9kaXJzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBwa2dyb290LCBwa2dkaXJzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4od29ya3Jvb3QsIGQpKToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIG9ic29sZXRlX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwa2dyb290LCBmKSkKKworICAgICAgICAgICAgICAgIGZvciBwa2dkaXIgaW4gc29ydGVkKHBrZ2RpcnMpOgorICAgICAgICAgICAgICAgICAgICBpZiBwa2dkaXIgbm90IGluIHBrZ19jdXJfZGlyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic29sZXRlX2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwa2dyb290LCBwa2dkaXIpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZlcnJvb3QsIHZlcmRpcnMsIHZlcmZpbGVzIGluIG9zLndhbGsob3MucGF0aC5qb2luKHBrZ3Jvb3QsIHBrZ2RpcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIHZlcmZpbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocGtncm9vdCwgZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHYgaW4gc29ydGVkKHZlcmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHYgbm90IGluIHBrZ19jdXJfZGlyc1twa2dkaXJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNvbGV0ZV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocGtncm9vdCwgcGtnZGlyLCB2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgIyBqdXN0IHByb2Nlc3MgdGhlIHRvcCBkaXIgb2YgZXZlcnkgcGFja2FnZSB1bmRlciB0bXAvd29yay8qLywKKyAgICAgICAgICAgICAgICAjIHRoZW4ganVtcCBvdXQgb2YgdGhlIGFib3ZlIG9zLndhbGsoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBpdCBpcyBjb252ZW5pZW50IHRvIHVzZSBvcy53YWxrKCkgdG8gZ2V0IGRpcnMgYW5kIGZpbGVzIGF0IHNhbWUgdGltZQorICAgICAgICAjIGJvdGggb2YgdGhlbSBoYXZlIGJlZW4gZGVhbGVkIGluIHRoZSBsb29wLCBzbyBqdW1wIG91dAorICAgICAgICBicmVhaworCisgICAgZm9yIGQgaW4gb2Jzb2xldGVfZGlyczoKKyAgICAgICAgcHJpbnQgIkRlbGV0aW5nICVzIiAlIGQKKyAgICAgICAgc2h1dGlsLnJtdHJlZShkLCBUcnVlKQorCisgICAgaWYgbGVuKG9ic29sZXRlX2RpcnMpOgorICAgICAgICBwcmludCAnXG5Ub3RhbCAlZCBpdGVtcy4nICUgbGVuKG9ic29sZXRlX2RpcnMpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgJ1xuTm8gb2Jzb2xldGUgZGlyZWN0b3J5IGZvdW5kIHVuZGVyICVzLicgJSB3b3JrZGlyCisKKyAgICByZXR1cm4gMAorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMgorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoMykKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbWJvLWxheWVyIGIvc2NyaXB0cy9jb21iby1sYXllcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDM1YTE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb21iby1sYXllcgpAQCAtMCwwICsxLDk0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3JlZC1ieTogIFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisjICAgICAgICAgICAgICAgUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBpbnRlbC5jb20+CisjICAgICAgICAgICAgICAgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGludGVsLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgb3MsIHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IHJlCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK19fdmVyc2lvbl9fID0gIjAuMi4xIgorCitkZWYgbG9nZ2VyX2NyZWF0ZSgpOgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCIiKQorICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGxvZ2dlcmhhbmRsZXIuc2V0Rm9ybWF0dGVyKGxvZ2dpbmcuRm9ybWF0dGVyKCJbJShhc2N0aW1lKXNdICUobWVzc2FnZSlzIiwiJUg6JU06JVMiKSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitsb2dnZXIgPSBsb2dnZXJfY3JlYXRlKCkKKworZGVmIGdldF9jdXJyZW50X2JyYW5jaChyZXBvZGlyPU5vbmUpOgorICAgIHRyeToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihyZXBvZGlyIGlmIHJlcG9kaXIgZWxzZSAnJywgIi5naXQiKSk6CisgICAgICAgICAgICAjIFJlcG8gbm90IGNyZWF0ZWQgeWV0IChpLmUuIGR1cmluZyBpbml0KSBzbyBqdXN0IGFzc3VtZSBtYXN0ZXIKKyAgICAgICAgICAgIHJldHVybiAibWFzdGVyIgorICAgICAgICBicmFuY2huYW1lID0gcnVuY21kKCJnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwiLCByZXBvZGlyKS5zdHJpcCgpCisgICAgICAgIGlmIGJyYW5jaG5hbWUuc3RhcnRzd2l0aCgicmVmcy9oZWFkcy8iKToKKyAgICAgICAgICAgIGJyYW5jaG5hbWUgPSBicmFuY2huYW1lWzExOl0KKyAgICAgICAgcmV0dXJuIGJyYW5jaG5hbWUKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgIHJldHVybiAiIgorCitjbGFzcyBDb25maWd1cmF0aW9uKG9iamVjdCk6CisgICAgIiIiCisgICAgTWFuYWdlcyB0aGUgY29uZmlndXJhdGlvbgorCisgICAgRm9yIGFuIGV4YW1wbGUgY29uZmlnIGZpbGUsIHNlZSBjb21iby1sYXllci5jb25mLmV4YW1wbGUKKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zKToKKyAgICAgICAgZm9yIGtleSwgdmFsIGluIG9wdGlvbnMuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICAgICAgZGVmIHJlYWRzZWN0aW9uKHBhcnNlciwgc2VjdGlvbiwgcmVwbyk6CisgICAgICAgICAgICBmb3IgKG5hbWUsIHZhbHVlKSBpbiBwYXJzZXIuaXRlbXMoc2VjdGlvbik6CisgICAgICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgiQCIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zW3JlcG9dW25hbWVdID0gZXZhbCh2YWx1ZS5zdHJpcCgiQCIpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgQXBwbHkgc3BlY2lhbCB0eXBlIHRyYW5zZm9ybWF0aW9ucyBmb3Igc29tZSBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgICAgICAjIFR5cGUgbWF0Y2hlcyB0aGUgUmF3Q29uZmlnUGFyc2VyLmdldCooKSBtZXRob2RzLgorICAgICAgICAgICAgICAgICAgICB0eXBlcyA9IHsnc2lnbm9mZic6ICdib29sZWFuJ30KKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiB0eXBlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihwYXJzZXIsICdnZXQnICsgdHlwZXNbbmFtZV0pKHNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwb3NbcmVwb11bbmFtZV0gPSB2YWx1ZQorCisgICAgICAgIGRlZiByZWFkZ2xvYmFsc2VjdGlvbihwYXJzZXIsIHNlY3Rpb24pOgorICAgICAgICAgICAgZm9yIChuYW1lLCB2YWx1ZSkgaW4gcGFyc2VyLml0ZW1zKHNlY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImNvbW1pdF9tc2ciOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdF9tc2dfdGVtcGxhdGUgPSB2YWx1ZQorCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiTG9hZGluZyBjb25maWcgZmlsZSAlcyIgJSBzZWxmLmNvbmZmaWxlKQorICAgICAgICBzZWxmLnBhcnNlciA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25mZmlsZSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnJlYWRmcChmKQorCisgICAgICAgICMgaW5pdGlhbGl6ZSBkZWZhdWx0IHZhbHVlcworICAgICAgICBzZWxmLmNvbW1pdF9tc2dfdGVtcGxhdGUgPSAiQXV0b21hdGljIGNvbW1pdCB0byB1cGRhdGUgbGFzdF9yZXZpc2lvbiIKKworICAgICAgICBzZWxmLnJlcG9zID0ge30KKyAgICAgICAgZm9yIHJlcG8gaW4gc2VsZi5wYXJzZXIuc2VjdGlvbnMoKToKKyAgICAgICAgICAgIGlmIHJlcG8gPT0gImNvbWJvLWxheWVyLXNldHRpbmdzIjoKKyAgICAgICAgICAgICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGdsb2JhbCBzZXR0aW5ncworICAgICAgICAgICAgICAgIHJlYWRnbG9iYWxzZWN0aW9uKHNlbGYucGFyc2VyLCByZXBvKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlcG9zW3JlcG9dID0ge30KKyAgICAgICAgICAgICAgICByZWFkc2VjdGlvbihzZWxmLnBhcnNlciwgcmVwbywgcmVwbykKKworICAgICAgICAjIExvYWQgbG9jYWwgY29uZmlndXJhdGlvbiwgaWYgYXZhaWxhYmxlCisgICAgICAgIHNlbGYubG9jYWxjb25mZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2NhbHBhcnNlciA9IE5vbmUKKyAgICAgICAgc2VsZi5jb21ib2JyYW5jaCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5jb25mZmlsZS5lbmRzd2l0aCgnLmNvbmYnKToKKyAgICAgICAgICAgIGxjZmlsZSA9IHNlbGYuY29uZmZpbGUucmVwbGFjZSgnLmNvbmYnLCAnLWxvY2FsLmNvbmYnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobGNmaWxlKToKKyAgICAgICAgICAgICAgICAjIFJlYWQgY29tYm8gbGF5ZXIgYnJhbmNoCisgICAgICAgICAgICAgICAgc2VsZi5jb21ib2JyYW5jaCA9IGdldF9jdXJyZW50X2JyYW5jaCgpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJDb21ibyBsYXllciBicmFuY2ggaXMgJXMiICUgc2VsZi5jb21ib2JyYW5jaCkKKworICAgICAgICAgICAgICAgIHNlbGYubG9jYWxjb25mZmlsZSA9IGxjZmlsZQorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiTG9hZGluZyBsb2NhbCBjb25maWcgZmlsZSAlcyIgJSBzZWxmLmxvY2FsY29uZmZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5sb2NhbHBhcnNlciA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvY2FsY29uZmZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxwYXJzZXIucmVhZGZwKGYpCisKKyAgICAgICAgICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWxmLmxvY2FscGFyc2VyLnNlY3Rpb25zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmICd8JyBpbiBzZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnZhbHMgPSBzZWN0aW9uLnNwbGl0KCd8JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG8gPSBzZWN0aW9udmFsc1swXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VjdGlvbnZhbHNbMV0gIT0gc2VsZi5jb21ib2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbyA9IHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgcmVwbyBpbiBzZWxmLnJlcG9zOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHNlY3Rpb24oc2VsZi5sb2NhbHBhcnNlciwgc2VjdGlvbiwgcmVwbykKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgcmVwbywgb3B0aW9uLCB2YWx1ZSwgaW5pdG1vZGU9RmFsc2UpOgorICAgICAgICAjIElmIHRoZSBtYWluIGNvbmZpZyBoYXMgdGhlIG9wdGlvbiBhbHJlYWR5LCB0aGF0IGlzIHdoYXQgd2UKKyAgICAgICAgIyBhcmUgZXhwZWN0ZWQgdG8gbW9kaWZ5LgorICAgICAgICBpZiBzZWxmLmxvY2FscGFyc2VyIGFuZCBub3Qgc2VsZi5wYXJzZXIuaGFzX29wdGlvbihyZXBvLCBvcHRpb24pOgorICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5sb2NhbHBhcnNlcgorICAgICAgICAgICAgc2VjdGlvbiA9ICIlc3wlcyIgJSAocmVwbywgc2VsZi5jb21ib2JyYW5jaCkKKyAgICAgICAgICAgIGNvbmZmaWxlID0gc2VsZi5sb2NhbGNvbmZmaWxlCisgICAgICAgICAgICBpZiBpbml0bW9kZSBhbmQgbm90IHBhcnNlci5oYXNfc2VjdGlvbihzZWN0aW9uKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuYWRkX3NlY3Rpb24oc2VjdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IHNlbGYucGFyc2VyCisgICAgICAgICAgICBzZWN0aW9uID0gcmVwbworICAgICAgICAgICAgY29uZmZpbGUgPSBzZWxmLmNvbmZmaWxlCisgICAgICAgIHBhcnNlci5zZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBvcGVuKGNvbmZmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBwYXJzZXIud3JpdGUoZikKKyAgICAgICAgc2VsZi5yZXBvc1tyZXBvXVtvcHRpb25dID0gdmFsdWUKKworICAgIGRlZiBzYW5pdHlfY2hlY2soc2VsZiwgaW5pdG1vZGU9RmFsc2UpOgorICAgICAgICByZXF1aXJlZF9vcHRpb25zPVsic3JjX3VyaSIsICJsb2NhbF9yZXBvX2RpciIsICJkZXN0X2RpciIsICJsYXN0X3JldmlzaW9uIl0KKyAgICAgICAgaWYgaW5pdG1vZGU6CisgICAgICAgICAgICByZXF1aXJlZF9vcHRpb25zLnJlbW92ZSgibGFzdF9yZXZpc2lvbiIpCisgICAgICAgIG1zZyA9ICIiCisgICAgICAgIG1pc3Npbmdfb3B0aW9ucyA9IFtdCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYucmVwb3M6CisgICAgICAgICAgICBmb3Igb3B0aW9uIGluIHJlcXVpcmVkX29wdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgb3B0aW9uIG5vdCBpbiBzZWxmLnJlcG9zW25hbWVdOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiJXNcbk9wdGlvbiAlcyBpcyBub3QgZGVmaW5lZCBmb3IgY29tcG9uZW50ICVzIiAlKG1zZywgb3B0aW9uLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBtaXNzaW5nX29wdGlvbnMuYXBwZW5kKG9wdGlvbikKKyAgICAgICAgICAgICMgU2FuaXRpemUgZGVzdF9kaXIgc28gdGhhdCB3ZSBkbyBub3QgaGF2ZSB0byBkZWFsIHdpdGggZWRnZSBjYXNlcworICAgICAgICAgICAgIyAodW5zZXQsIGVtcHR5IHN0cmluZywgZG91YmxlIHNsYXNoZXMpIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLgorICAgICAgICAgICAgIyBJdCBub3QgYmVpbmcgc2V0IHdpbGwgc3RpbGwgYmUgZmxhZ2dlZCBhcyBlcnJvciBiZWNhdXNlIGl0IGlzCisgICAgICAgICAgICAjIGxpc3RlZCBhcyByZXF1aXJlZCBvcHRpb24gYWJvdmU7IHRoYXQgY291bGQgYmUgY2hhbmdlZCBub3cuCisgICAgICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGgubm9ybXBhdGgoc2VsZi5yZXBvc1tuYW1lXS5nZXQoImRlc3RfZGlyIiwgIi4iKSkKKyAgICAgICAgICAgIHNlbGYucmVwb3NbbmFtZV1bImRlc3RfZGlyIl0gPSAiLiIgaWYgbm90IGRlc3RfZGlyIGVsc2UgZGVzdF9kaXIKKyAgICAgICAgaWYgbXNnICE9ICIiOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJjb25maWd1cmF0aW9uIGZpbGUgJXMgaGFzIHRoZSBmb2xsb3dpbmcgZXJyb3I6ICVzIiAlIChzZWxmLmNvbmZmaWxlLG1zZykpCisgICAgICAgICAgICBpZiBzZWxmLmxvY2FsY29uZmZpbGUgYW5kICdsYXN0X3JldmlzaW9uJyBpbiBtaXNzaW5nX29wdGlvbnM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJsb2NhbCBjb25maWd1cmF0aW9uIGZpbGUgJXMgbWF5IGJlIG1pc3NpbmcgY29uZmlndXJhdGlvbiBmb3IgY29tYm8gYnJhbmNoICVzIiAlIChzZWxmLmxvY2FsY29uZmZpbGUsIHNlbGYuY29tYm9icmFuY2gpKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAjIGZpbHRlcmRpZmYgaXMgcmVxdWlyZWQgYnkgYWN0aW9uX3NwbGl0cGF0Y2gsIHNvIGNoZWNrIGl0cyBhdmFpbGFiaWxpdHkKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKCJ3aGljaCBmaWx0ZXJkaWZmID4gL2Rldi9udWxsIDI+JjEiLCBzaGVsbD1UcnVlKSAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFUlJPUjogcGF0Y2h1dGlscyBwYWNrYWdlIGlzIG1pc3NpbmcsIHBsZWFzZSBpbnN0YWxsIGl0IChlLmcuICMgYXB0LWdldCBpbnN0YWxsIHBhdGNodXRpbHMpIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBydW5jbWQoY21kLGRlc3RkaXI9Tm9uZSxwcmludGVycj1UcnVlLG91dD1Ob25lKToKKyAgICAiIiIKKyAgICAgICAgZXhlY3V0ZSBjb21tYW5kLCByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IgaWYgZmFpbAorICAgICAgICByZXR1cm4gb3V0cHV0IGlmIHN1Y2NlZWQKKyAgICAiIiIKKyAgICBsb2dnZXIuZGVidWcoInJ1biBjbWQgJyVzJyBpbiAlcyIgJSAoY21kLCBvcy5nZXRjd2QoKSBpZiBkZXN0ZGlyIGlzIE5vbmUgZWxzZSBkZXN0ZGlyKSkKKyAgICBpZiBub3Qgb3V0OgorICAgICAgICBvdXQgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgZXJyID0gb3V0CisgICAgZWxzZToKKyAgICAgICAgZXJyID0gb3MudG1wZmlsZSgpCisgICAgdHJ5OgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzdGRvdXQ9b3V0LCBzdGRlcnI9ZXJyLCBjd2Q9ZGVzdGRpciwgc2hlbGw9aXNpbnN0YW5jZShjbWQsIHN0cikpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLGU6CisgICAgICAgIGVyci5zZWVrKDApCisgICAgICAgIGlmIHByaW50ZXJyOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCIlcyIgJSBlcnIucmVhZCgpKQorICAgICAgICByYWlzZSBlCisKKyAgICBlcnIuc2VlaygwKQorICAgIG91dHB1dCA9IGVyci5yZWFkKCkKKyAgICBsb2dnZXIuZGVidWcoIm91dHB1dDogJXMiICUgb3V0cHV0ICkKKyAgICByZXR1cm4gb3V0cHV0CisKK2RlZiBhY3Rpb25faW5pdChjb25mLCBhcmdzKToKKyAgICAiIiIKKyAgICAgICAgQ2xvbmUgY29tcG9uZW50IHJlcG9zaXRvcmllcworICAgICAgICBDaGVjayBnaXQgaXMgaW5pdGlhbGlzZWQ7IGlmIG5vdCwgY29weSBpbml0aWFsIGRhdGEgZnJvbSBjb21wb25lbnQgcmVwb3MKKyAgICAiIiIKKyAgICBmb3IgbmFtZSBpbiBjb25mLnJlcG9zOgorICAgICAgICBsZGlyID0gY29uZi5yZXBvc1tuYW1lXVsnbG9jYWxfcmVwb19kaXInXQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGRpcik6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiY2xvbmluZyAlcyB0byAlcyIgJShjb25mLnJlcG9zW25hbWVdWydzcmNfdXJpJ10sIGxkaXIpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKCJnaXQgY2xvbmUgJXMgJXMiICUgKGNvbmYucmVwb3NbbmFtZV1bJ3NyY191cmknXSwgbGRpciksIHNoZWxsPVRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIuZ2l0Iik6CisgICAgICAgIHJ1bmNtZCgiZ2l0IGluaXQiKQorICAgICAgICBpZiBjb25mLmhpc3Rvcnk6CisgICAgICAgICAgICAjIE5lZWQgYSBjb21tb24gcmVmIGZvciBhbGwgdHJlZXMuCisgICAgICAgICAgICBydW5jbWQoJ2dpdCBjb21taXQgLW0gImluaXRpYWwgZW1wdHkgY29tbWl0IiAtLWFsbG93LWVtcHR5JykKKyAgICAgICAgICAgIHN0YXJ0cmV2ID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlIG1hc3RlcicpLnN0cmlwKCkKKworICAgICAgICBmb3IgbmFtZSBpbiBjb25mLnJlcG9zOgorICAgICAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgICAgIGxkaXIgPSByZXBvWydsb2NhbF9yZXBvX2RpciddCisgICAgICAgICAgICBicmFuY2ggPSByZXBvLmdldCgnYnJhbmNoJywgIm1hc3RlciIpCisgICAgICAgICAgICBsYXN0cmV2ID0gcmVwby5nZXQoJ2xhc3RfcmV2aXNpb24nLCBOb25lKQorICAgICAgICAgICAgaWYgbGFzdHJldiBhbmQgbGFzdHJldiAhPSAiSEVBRCI6CisgICAgICAgICAgICAgICAgaW5pdGlhbHJldiA9IGxhc3RyZXYKKyAgICAgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGVja19yZXZfYnJhbmNoKG5hbWUsIGxkaXIsIGxhc3RyZXYsIGJyYW5jaCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3B5aW5nIGRhdGEgZnJvbSAlcyBhdCBzcGVjaWZpZWQgcmV2aXNpb24gJXMuLi4iICUgKG5hbWUsIGxhc3RyZXYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsYXN0cmV2ID0gTm9uZQorICAgICAgICAgICAgICAgIGluaXRpYWxyZXYgPSBicmFuY2gKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29weWluZyBkYXRhIGZyb20gJXMuLi4iICUgbmFtZSkKKyAgICAgICAgICAgICMgU2FuaXR5IGNoZWNrIGluaXRpYWxyZXYgYW5kIHR1cm4gaXQgaW50byBoYXNoIChyZXF1aXJlZCBmb3IgY29weWluZyBoaXN0b3J5LAorICAgICAgICAgICAgIyBiZWNhdXNlIHJlc29sdmluZyBhIG5hbWUgcmVmIG9ubHkgd29ya3MgaW4gdGhlIGNvbXBvbmVudCByZXBvKS4KKyAgICAgICAgICAgIHJldiA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSAlcycgJSBpbml0aWFscmV2LCBsZGlyKS5zdHJpcCgpCisgICAgICAgICAgICBpZiByZXYgIT0gaW5pdGlhbHJldjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlZnMgPSBydW5jbWQoJ2dpdCBzaG93LXJlZiAtcyAlcycgJSBpbml0aWFscmV2LCBsZGlyKS5zcGxpdCgnXG4nKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc2V0KHJlZnMpKSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEhhcHBlbnMgZm9yIGV4YW1wbGUgd2hlbiBjb25maWd1cmVkIHRvIHRyYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAjICJtYXN0ZXIiIGFuZCB0aGVyZSBpcyBhIHJlZnMvaGVhZHMvbWFzdGVyLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhZGl0aW9uYWwgYmVoYXZpb3IgZnJvbSAiZ2l0IGFyY2hpdmUiIChwcmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaGVyZSkgaXQgdG8gY2hvb3NlIHRoZSBmaXJzdCBvbmUuIFRoaXMgbWlnaHQgbm90IGJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGludGVuZGVkLCBzbyBhdCBsZWFzdCB3YXJuIGFib3V0IGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIiVzOiBpbml0aWFsIHJldmlzaW9uICclcycgbm90IHVuaXF1ZSwgcGlja2luZyByZXN1bHQgb2YgcmV2LXBhcnNlID0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBpbml0aWFscmV2LCByZWZzWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxyZXYgPSByZXYKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICMgc2hvdy1yZWYgZmFpbHMgZm9yIGhhc2hlcy4gU2tpcCB0aGUgc2FuaXR5IHdhcm5pbmcgaW4gdGhhdCBjYXNlLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgaW5pdGlhbHJldiA9IHJldgorICAgICAgICAgICAgZGVzdF9kaXIgPSByZXBvWydkZXN0X2RpciddCisgICAgICAgICAgICBpZiBkZXN0X2RpciAhPSAiLiI6CisgICAgICAgICAgICAgICAgZXh0cmFjdF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGRlc3RfZGlyKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleHRyYWN0X2Rpcik6CisgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGV4dHJhY3RfZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHRyYWN0X2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBmaWxlX2ZpbHRlciA9IHJlcG8uZ2V0KCdmaWxlX2ZpbHRlcicsICIiKQorICAgICAgICAgICAgZXhjbHVkZV9wYXR0ZXJucyA9IHJlcG8uZ2V0KCdmaWxlX2V4Y2x1ZGUnLCAnJykuc3BsaXQoKQorICAgICAgICAgICAgZGVmIGNvcHlfc2VsZWN0ZWRfZmlsZXMoaW5pdGlhbHJldiwgZXh0cmFjdF9kaXIsIGZpbGVfZmlsdGVyLCBleGNsdWRlX3BhdHRlcm5zLCBsZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyPSIiKToKKyAgICAgICAgICAgICAgICAjIFdoZW4gd29ya2luZyBpbnNpZGUgYSBmaWx0ZXJlZCBicmFuY2ggd2hpY2ggaGFkIHRoZQorICAgICAgICAgICAgICAgICMgZmlsZXMgYWxyZWFkeSBtb3ZlZCwgd2UgbmVlZCB0byBwcmVwZW5kIHRoZQorICAgICAgICAgICAgICAgICMgc3ViZGlyZWN0b3J5IHRvIGFsbCBmaWx0ZXJzLCBvdGhlcndpc2UgdGhleSB3b3VsZAorICAgICAgICAgICAgICAgICMgbm90IG1hdGNoLgorICAgICAgICAgICAgICAgIGlmIHN1YmRpciA9PSAnLic6CisgICAgICAgICAgICAgICAgICAgIHN1YmRpciA9ICcnCisgICAgICAgICAgICAgICAgZWxpZiBzdWJkaXI6CisgICAgICAgICAgICAgICAgICAgIHN1YmRpciA9IG9zLnBhdGgubm9ybXBhdGgoc3ViZGlyKQorICAgICAgICAgICAgICAgICAgICBmaWxlX2ZpbHRlciA9ICcgJy5qb2luKFtzdWJkaXIgKyAnLycgKyB4IGZvciB4IGluIGZpbGVfZmlsdGVyLnNwbGl0KCldKQorICAgICAgICAgICAgICAgICAgICBleGNsdWRlX3BhdHRlcm5zID0gW3N1YmRpciArICcvJyArIHggZm9yIHggaW4gZXhjbHVkZV9wYXR0ZXJuc10KKyAgICAgICAgICAgICAgICAjIFRvIGhhbmRsZSBib3RoIGNhc2VzLCB3ZSBjZCBpbnRvIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgICAjIGRpcmVjdG9yeSBhbmQgb3B0aW9uYWxseSB0ZWxsIHRhciB0byBzdHJpcCB0aGUgcGF0aAorICAgICAgICAgICAgICAgICMgcHJlZml4IHdoZW4gdGhlIGZpbGVzIHdlcmUgYWxyZWFkeSBtb3ZlZC4KKyAgICAgICAgICAgICAgICBzdWJkaXJfY29tcG9uZW50cyA9IGxlbihzdWJkaXIuc3BsaXQob3MucGF0aC5zZXApKSBpZiBzdWJkaXIgZWxzZSAwCisgICAgICAgICAgICAgICAgc3RyaXA9KCctLXN0cmlwLWNvbXBvbmVudHM9JWQnICUgc3ViZGlyX2NvbXBvbmVudHMpIGlmIHN1YmRpciBlbHNlICcnCisgICAgICAgICAgICAgICAgIyBUT0RPOiBmaWxlX2ZpbHRlciB3aWxkIGNhcmRzIGRvIG5vdCB3b3JrIChhbmQgaGF2ZW4ndCB3b3JrZWQgYmVmb3JlIGVpdGhlciksIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAjIGEpIEdOVSB0YXIgcmVxdWlyZXMgYSAtLXdpbGRjYXJkcyBwYXJhbWV0ZXIgYmVmb3JlIHR1cm5pbmcgb24gd2lsZCBjYXJkIG1hdGNoaW5nLgorICAgICAgICAgICAgICAgICMgYikgVGhlIHNlbWFudGljIGlzIG5vdCBhcyBpbnRlbmRlbmQgKHNyYy8qLmMgYWxzbyBtYXRjaGVzIHNyYy9mb28vYmFyLmMsCisgICAgICAgICAgICAgICAgIyAgICBpbiBjb250cmFzdCB0byB0aGUgb3RoZXIgdXNlIG9mIGZpbGVfZmlsdGVyIGFzIHBhcmFtZXRlciBvZiAiZ2l0IGFyY2hpdmUiCisgICAgICAgICAgICAgICAgIyAgICB3aGVyZSBpdCBvbmx5IG1hdGNoZXMgLmMgZmlsZXMgZGlyZWN0bHkgaW4gc3JjKS4KKyAgICAgICAgICAgICAgICBmaWxlcyA9IHJ1bmNtZCgiZ2l0IGFyY2hpdmUgJXMgJXMgfCB0YXIgLXggLXYgJXMgLUMgJXMgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbHJldiwgc3ViZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCwgZXh0cmFjdF9kaXIsIGZpbGVfZmlsdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZGlyKQorICAgICAgICAgICAgICAgIGlmIGV4Y2x1ZGVfcGF0dGVybnM6CisgICAgICAgICAgICAgICAgICAgICMgSW1wbGVtZW50IGZpbGUgcmVtb3ZhbCBieSBsZXR0aW5nIHRhciBjcmVhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgICMgZmlsZSBhbmQgdGhlbiBkZWxldGluZyBpdCBpbiB0aGUgZmlsZSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgIyBhZ2Fpbi4gVXNlcyB0aGUgbGlzdCBvZiBmaWxlcyBjcmVhdGVkIGJ5IHRhciAoZWFzaWVyCisgICAgICAgICAgICAgICAgICAgICMgdGhhbiB3YWxraW5nIHRoZSB0cmVlKS4KKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXMuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBleGNsdWRlX3BhdHRlcm5zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxlLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbigqKFtleHRyYWN0X2Rpcl0gKyBbJy4uJ10gKiBzdWJkaXJfY29tcG9uZW50cyArIFtmaWxlXSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3QgY29uZi5oaXN0b3J5OgorICAgICAgICAgICAgICAgIGNvcHlfc2VsZWN0ZWRfZmlsZXMoaW5pdGlhbHJldiwgZXh0cmFjdF9kaXIsIGZpbGVfZmlsdGVyLCBleGNsdWRlX3BhdHRlcm5zLCBsZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEZpcnN0IGZldGNoIHJlbW90ZSBoaXN0b3J5IGludG8gbG9jYWwgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICAjIFdlIG5lZWQgYSByZWYgZm9yIHRoYXQsIHNvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG9uZS4KKyAgICAgICAgICAgICAgICByZWZuYW1lID0gImNvbWJvLWxheWVyLWluaXQtJXMiICUgbmFtZQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGJyYW5jaCAtZiAlcyAlcyIgJSAocmVmbmFtZSwgaW5pdGlhbHJldiksIGxkaXIpCisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgZmV0Y2ggJXMgJXMiICUgKGxkaXIsIHJlZm5hbWUpKQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGJyYW5jaCAtRCAlcyIgJSByZWZuYW1lLCBsZGlyKQorICAgICAgICAgICAgICAgICMgTWFrZSB0aGF0IHRoZSBoZWFkIHJldmlzaW9uLgorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGNoZWNrb3V0IC1iICVzICVzIiAlIChuYW1lLCBpbml0aWFscmV2KSkKKyAgICAgICAgICAgICAgICAjIE9wdGlvbmFsOiBjdXQgdGhlIGhpc3RvcnkgYnkgcmVwbGFjaW5nIHRoZSBnaXZlbgorICAgICAgICAgICAgICAgICMgc3RhcnQgcG9pbnQocykgd2l0aCBjb21taXRzIHByb3ZpZGluZyB0aGUgc2FtZQorICAgICAgICAgICAgICAgICMgY29udGVudCAoYWthIHRyZWUpLCBidXQgd2l0aCBjb21taXQgaW5mb3JtYXRpb24gdGhhdAorICAgICAgICAgICAgICAgICMgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGlzIGlzIGFuIGFydGlmaWNhbGx5IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICAjIGNvbW1pdCBhbmQgbm90aGluZyB0aGUgb3JpZ2luYWwgYXV0aG9ycyBoYWQgYW55dGhpbmcKKyAgICAgICAgICAgICAgICAjIHRvIGRvIHdpdGguCisgICAgICAgICAgICAgICAgc2luY2VfcmV2ID0gcmVwby5nZXQoJ3NpbmNlX3JldmlzaW9uJywgJycpCisgICAgICAgICAgICAgICAgaWYgc2luY2VfcmV2OgorICAgICAgICAgICAgICAgICAgICBjb21taXR0ZXIgPSBydW5jbWQoJ2dpdCB2YXIgR0lUX0FVVEhPUl9JREVOVCcpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgIyBTYW1lIHRpbWUgc3RhbXAsIG5vIG5hbWUuCisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IHJlLnN1YignLiogKFxkKyBbKy1dXGQrKScsIHIndW5rbm93biA8dW5rbm93bj4gXDEnLCBjb21taXR0ZXIpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdhdXRob3IgJXMnICUgYXV0aG9yKQorICAgICAgICAgICAgICAgICAgICBmb3IgcmV2IGluIHNpbmNlX3Jldi5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXNvbHZlIGluIGNvbXBvbmVudCByZXBvLi4uCisgICAgICAgICAgICAgICAgICAgICAgICByZXYgPSBydW5jbWQoJ2dpdCBsb2cgLS1vbmVsaW5lIC0tbm8tYWJicmV2LWNvbW1pdCAtbjEgJXMnICUgcmV2LCBsZGlyKS5zcGxpdCgpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAjIC4uLiBhbmQgdGhlbiBnZXQgdGhlIHRyZWUgaW4gY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmUuIFRoZSBjb21taXQgc2hvdWxkIGJlIGluIGJvdGggcmVwb3Mgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgc2FtZSB0cmVlLCBidXQgYmV0dGVyIGNoZWNrIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICB0cmVlID0gcnVuY21kKCdnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JSVUICVzJyAlIHJldikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBlZGl0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlKCcnJ2NhdCA+JDEgPDxFT0YKK3RyZWUgJXMKK2F1dGhvciAlcworY29tbWl0dGVyICVzCisKKyVzOiBzcXVhc2hlZCBpbXBvcnQgb2YgY29tcG9uZW50CisKK1RoaXMgY29tbWl0IGNvcGllcyB0aGUgZW50aXJlIHNldCBvZiBmaWxlcyBhcyBmb3VuZCBpbgorJXMgJXMKKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXMgY29tbWl0cywgc2VlIHRoZQordXBzdHJlYW0gcmVwb3NpdG9yeS4KKworQ29tbWl0IGNyZWF0ZWQgYnkgY29tYm8tbGF5ZXIuCitFT0YKKycnJyAlICh0cmVlLCBhdXRob3IsIGNvbW1pdHRlciwgbmFtZSwgbmFtZSwgc2luY2VfcmV2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0dJVF9FRElUT1InXSA9ICdzaCAlcycgJSBlZGl0b3IubmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZCgnZ2l0IHJlcGxhY2UgLS1lZGl0ICVzJyAlIHJldikKKworICAgICAgICAgICAgICAgICMgT3B0aW9uYWw6IHJld3JpdGUgaGlzdG9yeSB0byBjaGFuZ2UgY29tbWl0IG1lc3NhZ2VzIG9yIHRvIG1vdmUgZmlsZXMuCisgICAgICAgICAgICAgICAgaWYgJ2hvb2snIGluIHJlcG8gb3IgZGVzdF9kaXIgIT0gIi4iOgorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYnJhbmNoID0gWydnaXQnLCAnZmlsdGVyLWJyYW5jaCcsICctLWZvcmNlJ10KKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBob29rd3JhcHBlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdob29rJyBpbiByZXBvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgc2hlbGwgc2NyaXB0IHdyYXBwZXIgYXJvdW5kIHRoZSBvcmlnaW5hbCBob29rIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbiBiZSB1c2VkIGJ5IGdpdCBmaWx0ZXItYnJhbmNoLiBIb29rIG1heSBvciBtYXkgbm90IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuIGFic29sdXRlIHBhdGguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9vayA9IHJlcG9bJ2hvb2snXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2sgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGNvbmYuY29uZmZpbGUpLCAnLi4nLCBob29rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHdyYXBwZXJzIHR1cm5zIHRoZSBjb21taXQgbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSBzdGRpbiBpbnRvIGEgZmFrZSBwYXRjaCBoZWFkZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGdvb2QgZW5vdWdoIGZvciBjaGFuZ2luZyBTdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgY29tbWl0IG1zZyBib2R5IHdpdGggbm9ybWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21iby1sYXllciBob29rcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rd3JhcHBlci53cml0ZSgnJydzZXQgLWUKK3RtcG5hbWU9JChta3RlbXApCit0cmFwICJybSAkdG1wbmFtZSIgRVhJVAorZWNobyAtbiAnU3ViamVjdDogW1BBVENIXSAnID4+JHRtcG5hbWUKK2NhdCA+PiR0bXBuYW1lCitpZiAhIFsgJCh0YWlsIC1jIDEgJHRtcG5hbWUgfCBvZCAtQSBuIC10IHgxKSA9PSAnMGEnIF07IHRoZW4KKyAgICBlY2hvID4+JHRtcG5hbWUKK2ZpCitlY2hvICctLS0nID4+JHRtcG5hbWUKKyVzICR0bXBuYW1lICRHSVRfQ09NTUlUICVzCit0YWlsIC1jICsxOCAkdG1wbmFtZSB8IGhlYWQgLWMgLTQKKycnJyAlIChob29rLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rd3JhcHBlci5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2JyYW5jaC5leHRlbmQoWyctLW1zZy1maWx0ZXInLCAnYmFzaCAlcycgJSBob29rd3JhcHBlci5uYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlc3RfZGlyICE9ICIuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdF9kaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gJy4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXkgcnVuIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBzbyBkbyBub3QgYXNzdW1lIHRoYXQgLmdpdCBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2JyYW5jaC5leHRlbmQoWyctLXRyZWUtZmlsdGVyJywgJ21rZGlyIC1wIC5naXQvdG1wdHJlZSAmJiBtdiAkKGxzIC0xIC1hIHwgZ3JlcCAtdiAtZSBeLmdpdCQgLWUgXi4kIC1lIF4uLiQpIC5naXQvdG1wdHJlZSAmJiBta2RpciAtcCAlcyAmJiBtdiAuZ2l0L3RtcHRyZWUgJXMnICUgKHBhcmVudCwgZGVzdF9kaXIpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9icmFuY2guYXBwZW5kKCdIRUFEJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChmaWx0ZXJfYnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgdXBkYXRlLXJlZiAtZCByZWZzL29yaWdpbmFsL3JlZnMvaGVhZHMvJXMnICUgbmFtZSkKKyAgICAgICAgICAgICAgICByZXBvWydyZXdyaXR0ZW5fcmV2aXNpb24nXSA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSBIRUFEJykuc3RyaXAoKQorICAgICAgICAgICAgICAgIHJlcG9bJ3N0cmlwcGVkX3JldmlzaW9uJ10gPSByZXBvWydyZXdyaXR0ZW5fcmV2aXNpb24nXQorICAgICAgICAgICAgICAgICMgT3B0aW9uYWwgZmlsdGVyIGZpbGVzOiByZW1vdmUgZXZlcnl0aGluZyBhbmQgcmUtcG9wdWxhdGUgdXNpbmcgdGhlIG5vcm1hbCBmaWx0ZXJpbmcgY29kZS4KKyAgICAgICAgICAgICAgICAjIE92ZXJyaWRlIGFueSBwb3RlbnRpYWwgLmdpdGlnbm9yZS4KKyAgICAgICAgICAgICAgICBpZiBmaWxlX2ZpbHRlciBvciBleGNsdWRlX3BhdHRlcm5zOgorICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCBybSAtcmYgLicpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleHRyYWN0X2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhleHRyYWN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgY29weV9zZWxlY3RlZF9maWxlcygnSEVBRCcsIGV4dHJhY3RfZGlyLCBmaWxlX2ZpbHRlciwgZXhjbHVkZV9wYXR0ZXJucywgJy4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj1kZXN0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgcnVuY21kKCdnaXQgYWRkIC0tYWxsIC0tZm9yY2UgLicpCisgICAgICAgICAgICAgICAgICAgIGlmIHJ1bmNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBTb21ldGhpbmcgdG8gY29tbWl0LgorICAgICAgICAgICAgICAgICAgICAgICAgcnVuY21kKFsnZ2l0JywgJ2NvbW1pdCcsICctbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnJyVzOiBzZWxlY3QgZmlsZSBzdWJzZXQKKworRmlsZXMgZnJvbSB0aGUgY29tcG9uZW50IHJlcG9zaXRvcnkgd2VyZSBjaG9zZW4gYmFzZWQgb24KK3RoZSBmb2xsb3dpbmcgZmlsdGVyczoKK2ZpbGVfZmlsdGVyID0gJXMKK2ZpbGVfZXhjbHVkZSA9ICVzJycnICUgKG5hbWUsIGZpbGVfZmlsdGVyIG9yICc8ZW1wdHk+JywgcmVwby5nZXQoJ2ZpbGVfZXhjbHVkZScsICc8ZW1wdHk+JykpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9bJ3N0cmlwcGVkX3JldmlzaW9uJ10gPSBydW5jbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcpLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbm90IGxhc3RyZXY6CisgICAgICAgICAgICAgICAgbGFzdHJldiA9IHJ1bmNtZCgnZ2l0IHJldi1wYXJzZSAlcycgJSBpbml0aWFscmV2LCBsZGlyKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgY29uZi51cGRhdGUobmFtZSwgImxhc3RfcmV2aXNpb24iLCBsYXN0cmV2LCBpbml0bW9kZT1UcnVlKQorCisgICAgICAgIGlmIG5vdCBjb25mLmhpc3Rvcnk6CisgICAgICAgICAgICBydW5jbWQoImdpdCBhZGQgLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENyZWF0ZSBPY3RvcHVzIG1lcmdlIGNvbW1pdCBhY2NvcmRpbmcgdG8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg3NDE0OS9naXQtb2N0b3B1cy1tZXJnZS13aXRoLXVucmVsYXRlZC1yZXBvc2l0b2llcworICAgICAgICAgICAgcnVuY21kKCdnaXQgY2hlY2tvdXQgbWFzdGVyJykKKyAgICAgICAgICAgIG1lcmdlID0gWydnaXQnLCAnbWVyZ2UnLCAnLS1uby1jb21taXQnXQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICAgICAgICAgICMgVXNlIGJyYW5jaCBjcmVhdGVkIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgbWVyZ2UuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgIyBSb290IGFsbCBjb21taXRzIHdoaWNoIGhhdmUgbm8gcGFyZW50IGluIHRoZSBjb21tb24KKyAgICAgICAgICAgICAgICAjIGFuY2VzdG9yIGluIHRoZSBuZXcgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgICAgICBmb3Igc3RhcnQgaW4gcnVuY21kKCdnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolJUggLS1tYXgtcGFyZW50cz0wICVzJyAlIG5hbWUpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBydW5jbWQoJ2dpdCByZXBsYWNlIC0tZ3JhZnQgJXMgJXMnICUgKHN0YXJ0LCBzdGFydHJldikpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuY21kKG1lcmdlKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJycnTWVyZ2luZyBjb21wb25lbnQgcmVwb3NpdG9yeSBoaXN0b3J5IGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0cy4KK0l0IG1heSBiZSBwb3NzaWJsZSB0byBjb21taXQgYW55d2F5IGFmdGVyIHJlc29sdmluZyB0aGVzZSBjb25mbGljdHMuCisKKyVzJycnICUgZXJyb3IpCisgICAgICAgICAgICAjIENyZWF0ZSBNRVJHRV9IRUFEIGFuZCBNRVJHRV9NU0cuICJnaXQgbWVyZ2UiIGl0c2VsZgorICAgICAgICAgICAgIyBkb2VzIG5vdCBjcmVhdGUgTUVSR0VfSEVBRCBpbiBjYXNlIG9mIGEgKGhhcm1sZXNzKSBmYWlsdXJlLAorICAgICAgICAgICAgIyBhbmQgd2Ugd2FudCBjZXJ0YWluIGF1dG8tZ2VuZXJhdGVkIGluZm9ybWF0aW9uIGluIHRoZQorICAgICAgICAgICAgIyBjb21taXQgbWVzc2FnZSBmb3IgZnV0dXJlIHJlZmVyZW5jZSBhbmQvb3IgYXV0b21hdGlvbi4KKyAgICAgICAgICAgIHdpdGggb3BlbignLmdpdC9NRVJHRV9IRUFEJywgJ3cnKSBhcyBoZWFkOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbignLmdpdC9NRVJHRV9NU0cnLCAndycpIGFzIG1zZzoKKyAgICAgICAgICAgICAgICAgICAgbXNnLndyaXRlKCdyZXBvOiBpbml0aWFsIGltcG9ydCBvZiBjb21wb25lbnRzXG5cbicpCisgICAgICAgICAgICAgICAgICAgICMgaGVhZC53cml0ZSgnJXNcbicgJSBzdGFydHJldikKKyAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG8gPSBjb25mLnJlcG9zW25hbWVdCisgICAgICAgICAgICAgICAgICAgICAgICAjIDx1cHN0cmVhbSByZWY+IDxyZXdyaXR0ZW4gcmVmPiA8cmV3cml0dGVuICsgZmlsZXMgcmVtb3ZlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZy53cml0ZSgnY29tYm8tbGF5ZXItJXM6ICVzICVzICVzXG4nICUgKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvWydsYXN0X3JldmlzaW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvWydyZXdyaXR0ZW5fcmV2aXNpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9bJ3N0cmlwcGVkX3JldmlzaW9uJ10pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV2ID0gcnVuY21kKCdnaXQgcmV2LXBhcnNlICVzJyAlIG5hbWUpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQud3JpdGUoJyVzXG4nICUgcmV2KQorCisgICAgICAgIGlmIGNvbmYubG9jYWxjb25mZmlsZToKKyAgICAgICAgICAgIGxvY2FsYWRkZWQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgcm0gLS1jYWNoZWQgJXMiICUgY29uZi5sb2NhbGNvbmZmaWxlLCBwcmludGVycj1GYWxzZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2NhbGFkZGVkID0gRmFsc2UKKyAgICAgICAgICAgIGlmIGxvY2FsYWRkZWQ6CisgICAgICAgICAgICAgICAgbG9jYWxyZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKGNvbmYubG9jYWxjb25mZmlsZSkKKyAgICAgICAgICAgICAgICBydW5jbWQoImdyZXAgLXEgJXMgLmdpdGlnbm9yZSB8fCBlY2hvICVzID4+IC5naXRpZ25vcmUiICUgKGxvY2FscmVscGF0aCwgbG9jYWxyZWxwYXRoKSkKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBhZGQgLmdpdGlnbm9yZSIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkFkZGVkIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyB0byAuZ2l0aWdub3JlIiwgbG9jYWxyZWxwYXRoKQorICAgICAgICBsb2dnZXIuaW5mbygiSW5pdGlhbCBjb21ibyBsYXllciByZXBvc2l0b3J5IGRhdGEgaGFzIGJlZW4gY3JlYXRlZDsgcGxlYXNlIG1ha2UgYW55IGNoYW5nZXMgaWYgZGVzaXJlZCBhbmQgdGhlbiB1c2UgJ2dpdCBjb21taXQnIHRvIG1ha2UgdGhlIGluaXRpYWwgY29tbWl0LiIpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmluZm8oIlJlcG9zaXRvcnkgYWxyZWFkeSBpbml0aWFsaXNlZCwgbm90aGluZyB0byBkby4iKQorCisKK2RlZiBjaGVja19yZXBvX2NsZWFuKHJlcG9kaXIpOgorICAgICIiIgorICAgICAgICBjaGVjayBpZiB0aGUgcmVwbyBpcyBjbGVhbgorICAgICAgICBleGl0IGlmIHJlcG8gaXMgZGlydHkKKyAgICAiIiIKKyAgICBvdXRwdXQ9cnVuY21kKCJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiwgcmVwb2RpcikKKyAgICByID0gcmUuY29tcGlsZSgnXD9cPyBwYXRjaC0uKi8nKQorICAgIGRpcnR5b3V0ID0gW2l0ZW0gZm9yIGl0ZW0gaW4gb3V0cHV0LnNwbGl0bGluZXMoKSBpZiBub3Qgci5tYXRjaChpdGVtKV0KKyAgICBpZiBkaXJ0eW91dDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJnaXQgcmVwbyAlcyBpcyBkaXJ0eSwgcGxlYXNlIGZpeCBpdCBmaXJzdCIsIHJlcG9kaXIpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBjaGVja19wYXRjaChwYXRjaGZpbGUpOgorICAgIGYgPSBvcGVuKHBhdGNoZmlsZSkKKyAgICBsbiA9IGYucmVhZGxpbmUoKQorICAgIG9mID0gTm9uZQorICAgIGluX3BhdGNoID0gRmFsc2UKKyAgICBiZXlvbmRfbXNnID0gRmFsc2UKKyAgICBwcmVfYnVmID0gJycKKyAgICB3aGlsZSBsbjoKKyAgICAgICAgaWYgbm90IGJleW9uZF9tc2c6CisgICAgICAgICAgICBpZiBsbiA9PSAnLS0tXG4nOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpbl9wYXRjaCA9IEZhbHNlCisgICAgICAgICAgICAgICAgYmV5b25kX21zZyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgbG4uc3RhcnRzd2l0aCgnLS0tICcpOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGRpZmYgaW4gdGhlIGNvbW1pdCBtZXNzYWdlCisgICAgICAgICAgICAgICAgaW5fcGF0Y2ggPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbm90IG9mOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnV0FSTklORzogJXMgY29udGFpbnMgYSBkaWZmIGluIGl0cyBjb21taXQgbWVzc2FnZSwgaW5kZW50aW5nIHRvIGF2b2lkIGZhaWx1cmUgZHVyaW5nIGFwcGx5JyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgb2YgPSBvcGVuKHBhdGNoZmlsZSArICcudG1wJywgJ3cnKQorICAgICAgICAgICAgICAgICAgICBvZi53cml0ZShwcmVfYnVmKQorICAgICAgICAgICAgICAgICAgICBwcmVfYnVmID0gJycKKyAgICAgICAgICAgIGVsaWYgaW5fcGF0Y2ggYW5kIG5vdCBsblswXSBpbiAnKy1AIFxuXHInOgorICAgICAgICAgICAgICAgIGluX3BhdGNoID0gRmFsc2UKKyAgICAgICAgaWYgb2Y6CisgICAgICAgICAgICBpZiBpbl9wYXRjaDoKKyAgICAgICAgICAgICAgICBvZi53cml0ZSgnICcgKyBsbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb2Yud3JpdGUobG4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVfYnVmICs9IGxuCisgICAgICAgIGxuID0gZi5yZWFkbGluZSgpCisgICAgZi5jbG9zZSgpCisgICAgaWYgb2Y6CisgICAgICAgIG9mLmNsb3NlKCkKKyAgICAgICAgb3MucmVuYW1lKHBhdGNoZmlsZSArICcudG1wJywgcGF0Y2hmaWxlKQorCitkZWYgZHJvcF90b19zaGVsbCh3b3JrZGlyPU5vbmUpOgorICAgIGlmIG5vdCBzeXMuc3RkaW4uaXNhdHR5KCk6CisgICAgICAgIHByaW50ICJOb3QgYSBUVFkgc28gY2FuJ3QgZHJvcCB0byBzaGVsbCBmb3IgcmVzb2x1dGlvbiwgZXhpdGluZy4iCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc2hlbGwgPSBvcy5lbnZpcm9uLmdldCgnU0hFTEwnLCAnYmFzaCcpCisgICAgcHJpbnQoJ0Ryb3BwaW5nIHRvIHNoZWxsICIlcyJcbicgXAorICAgICAgICAgICdXaGVuIHlvdSBhcmUgZmluaXNoZWQsIHJ1biB0aGUgZm9sbG93aW5nIHRvIGNvbnRpbnVlOlxuJyBcCisgICAgICAgICAgJyAgICAgICBleGl0ICAgIC0tIGNvbnRpbnVlIHRvIGFwcGx5IHRoZSBwYXRjaGVzXG4nIFwKKyAgICAgICAgICAnICAgICAgIGV4aXQgMSAgLS0gYWJvcnRcbicgJSBzaGVsbCk7CisgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKFtzaGVsbF0sIGN3ZD13b3JrZGlyKQorICAgIGlmIHJldCAhPSAwOgorICAgICAgICBwcmludCAiQWJvcnRpbmciCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBUcnVlCisKK2RlZiBjaGVja19yZXZfYnJhbmNoKGNvbXBvbmVudCwgcmVwb2RpciwgcmV2LCBicmFuY2gpOgorICAgIHRyeToKKyAgICAgICAgYWN0dWFsYnJhbmNoID0gcnVuY21kKCJnaXQgYnJhbmNoIC0tY29udGFpbnMgJXMiICUgcmV2LCByZXBvZGlyLCBwcmludGVycj1GYWxzZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5yZXR1cm5jb2RlID09IDEyOToKKyAgICAgICAgICAgIGFjdHVhbGJyYW5jaCA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisgICAgaWYgbm90IGFjdHVhbGJyYW5jaDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCIlczogc3BlY2lmaWVkIHJldmlzaW9uICVzIGlzIGludmFsaWQhIiAlIChjb21wb25lbnQsIHJldikpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgYnJhbmNoZXMgPSBbXQorICAgIGJyYW5jaGxpc3QgPSBhY3R1YWxicmFuY2guc3BsaXQoIlxuIikKKyAgICBmb3IgYiBpbiBicmFuY2hsaXN0OgorICAgICAgICBicmFuY2hlcy5hcHBlbmQoYi5zdHJpcCgpLnNwbGl0KCcgJylbLTFdKQorCisgICAgaWYgYnJhbmNoIG5vdCBpbiBicmFuY2hlczoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCIlczogc3BlY2lmaWVkIHJldmlzaW9uICVzIGlzIG5vdCBvbiBzcGVjaWZpZWQgYnJhbmNoICVzISIgJSAoY29tcG9uZW50LCByZXYsIGJyYW5jaCkpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKK2RlZiBnZXRfcmVwb3MoY29uZiwgcmVwb19uYW1lcyk6CisgICAgcmVwb3MgPSBbXQorICAgIGZvciBuYW1lIGluIHJlcG9fbmFtZXM6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcG9zLmFwcGVuZChuYW1lKQorICAgIGZvciByZXBvIGluIHJlcG9zOgorICAgICAgICBpZiBub3QgcmVwbyBpbiBjb25mLnJlcG9zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJTcGVjaWZpZWQgY29tcG9uZW50ICclcycgbm90IGZvdW5kIGluIGNvbmZpZ3VyYXRpb24iICUgcmVwbykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3QgcmVwb3M6CisgICAgICAgIHJlcG9zID0gY29uZi5yZXBvcworCisgICAgcmV0dXJuIHJlcG9zCisKK2RlZiBhY3Rpb25fcHVsbChjb25mLCBhcmdzKToKKyAgICAiIiIKKyAgICAgICAgdXBkYXRlIHRoZSBjb21wb25lbnQgcmVwb3Mgb25seQorICAgICIiIgorICAgIHJlcG9zID0gZ2V0X3JlcG9zKGNvbmYsIGFyZ3NbMTpdKQorCisgICAgIyBtYWtlIHN1cmUgYWxsIHJlcG9zIGFyZSBjbGVhbgorICAgIGZvciBuYW1lIGluIHJlcG9zOgorICAgICAgICBjaGVja19yZXBvX2NsZWFuKGNvbmYucmVwb3NbbmFtZV1bJ2xvY2FsX3JlcG9fZGlyJ10pCisKKyAgICBmb3IgbmFtZSBpbiByZXBvczoKKyAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgbGRpciA9IHJlcG9bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgYnJhbmNoID0gcmVwby5nZXQoJ2JyYW5jaCcsICJtYXN0ZXIiKQorICAgICAgICBsb2dnZXIuaW5mbygidXBkYXRlIGJyYW5jaCAlcyBvZiBjb21wb25lbnQgcmVwbyAlcyBpbiAlcyAuLi4iICUgKGJyYW5jaCwgbmFtZSwgbGRpcikpCisgICAgICAgIGlmIG5vdCBjb25mLmhhcmRfcmVzZXQ6CisgICAgICAgICAgICAjIFRyeSB0byBwdWxsIG9ubHkgdGhlIGNvbmZpZ3VyZWQgYnJhbmNoLiBCZXdhcmUgdGhhdCB0aGlzIG1heSBmYWlsCisgICAgICAgICAgICAjIHdoZW4gdGhlIGJyYW5jaCBpcyBjdXJyZW50bHkgdW5rbm93biAoZm9yIGV4YW1wbGUsIGFmdGVyIHJlY29uZmlndXJpbmcKKyAgICAgICAgICAgICMgY29tYm8tbGF5ZXIpLiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBmZXRjaCBldmVyeXRoaW5nIGFuZCB0cnkgdGhlIGNoZWNrIG91dAorICAgICAgICAgICAgIyBhbmQgcHVsbCBhZ2Fpbi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBjaGVja291dCAlcyIgJSBicmFuY2gsIGxkaXIsIHByaW50ZXJyPUZhbHNlKQorICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgIG91dHB1dD1ydW5jbWQoImdpdCBmZXRjaCIsIGxkaXIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8ob3V0cHV0KQorICAgICAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGNoZWNrb3V0ICVzIiAlIGJyYW5jaCwgbGRpcikKKyAgICAgICAgICAgICAgICBydW5jbWQoImdpdCBwdWxsIC0tZmYtb25seSIsIGxkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dD1ydW5jbWQoImdpdCBwdWxsIC0tZmYtb25seSIsIGxkaXIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8ob3V0cHV0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0PXJ1bmNtZCgiZ2l0IGZldGNoIiwgbGRpcikKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKG91dHB1dCkKKyAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IGNoZWNrb3V0ICVzIiAlIGJyYW5jaCwgbGRpcikKKyAgICAgICAgICAgIHJ1bmNtZCgiZ2l0IHJlc2V0IC0taGFyZCBGRVRDSF9IRUFEIiwgbGRpcikKKworZGVmIGFjdGlvbl91cGRhdGUoY29uZiwgYXJncyk6CisgICAgIiIiCisgICAgICAgIHVwZGF0ZSB0aGUgY29tcG9uZW50IHJlcG9zCisgICAgICAgIGdlbmVyYXRlIHRoZSBwYXRjaCBsaXN0CisgICAgICAgIGFwcGx5IHRoZSBnZW5lcmF0ZWQgcGF0Y2hlcworICAgICIiIgorICAgIGNvbXBvbmVudHMgPSBbYXJnLnNwbGl0KCc6JylbMF0gZm9yIGFyZyBpbiBhcmdzWzE6XV0KKyAgICByZXZpc2lvbnMgPSB7fQorICAgIGZvciBhcmcgaW4gYXJnc1sxOl06CisgICAgICAgIGlmICc6JyBpbiBhcmc6CisgICAgICAgICAgICBhID0gYXJnLnNwbGl0KCc6JywgMSkKKyAgICAgICAgICAgIHJldmlzaW9uc1thWzBdXSA9IGFbMV0KKyAgICByZXBvcyA9IGdldF9yZXBvcyhjb25mLCBjb21wb25lbnRzKQorCisgICAgIyBtYWtlIHN1cmUgY29tYm8gcmVwbyBpcyBjbGVhbgorICAgIGNoZWNrX3JlcG9fY2xlYW4ob3MuZ2V0Y3dkKCkpCisKKyAgICBpbXBvcnQgdXVpZAorICAgIHBhdGNoX2RpciA9ICJwYXRjaC0lcyIgJSB1dWlkLnV1aWQ0KCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0Y2hfZGlyKToKKyAgICAgICAgb3MubWtkaXIocGF0Y2hfZGlyKQorCisgICAgIyBTdGVwIDE6IHVwZGF0ZSB0aGUgY29tcG9uZW50IHJlcG9zCisgICAgaWYgY29uZi5ub3B1bGw6CisgICAgICAgIGxvZ2dlci5pbmZvKCJTa2lwcGluZyBwdWxsICgtbikiKQorICAgIGVsc2U6CisgICAgICAgIGFjdGlvbl9wdWxsKGNvbmYsIFsnYXJnMCddICsgY29tcG9uZW50cykKKworICAgIGZvciBuYW1lIGluIHJlcG9zOgorICAgICAgICByZXZpc2lvbiA9IHJldmlzaW9ucy5nZXQobmFtZSwgTm9uZSkKKyAgICAgICAgcmVwbyA9IGNvbmYucmVwb3NbbmFtZV0KKyAgICAgICAgbGRpciA9IHJlcG9bJ2xvY2FsX3JlcG9fZGlyJ10KKyAgICAgICAgZGVzdF9kaXIgPSByZXBvWydkZXN0X2RpciddCisgICAgICAgIGJyYW5jaCA9IHJlcG8uZ2V0KCdicmFuY2gnLCAibWFzdGVyIikKKyAgICAgICAgcmVwb19wYXRjaF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHBhdGNoX2RpciwgbmFtZSkKKworICAgICAgICAjIFN0ZXAgMjogZ2VuZXJhdGUgdGhlIHBhdGNoIGxpc3QgYW5kIHN0b3JlIHRvIHBhdGNoIGRpcgorICAgICAgICBsb2dnZXIuaW5mbygiR2VuZXJhdGluZyBwYXRjaGVzIGZyb20gJXMuLi4iICUgbmFtZSkKKyAgICAgICAgdG9wX3JldmlzaW9uID0gcmV2aXNpb24gb3IgYnJhbmNoCisgICAgICAgIGlmIG5vdCBjaGVja19yZXZfYnJhbmNoKG5hbWUsIGxkaXIsIHRvcF9yZXZpc2lvbiwgYnJhbmNoKToKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIGRlc3RfZGlyICE9ICIuIjoKKyAgICAgICAgICAgIHByZWZpeCA9ICItLXNyYy1wcmVmaXg9YS8lcy8gLS1kc3QtcHJlZml4PWIvJXMvIiAlIChkZXN0X2RpciwgZGVzdF9kaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSAiIgorICAgICAgICBpZiByZXBvWydsYXN0X3JldmlzaW9uJ10gPT0gIiI6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiV2FybmluZzogbGFzdF9yZXZpc2lvbiBvZiBjb21wb25lbnQgJXMgaXMgbm90IHNldCwgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY29tbWl0IiAlIG5hbWUpCisgICAgICAgICAgICBwYXRjaF9jbWRfcmFuZ2UgPSAiLS1yb290ICVzIiAlIHRvcF9yZXZpc2lvbgorICAgICAgICAgICAgcmV2X2NtZF9yYW5nZSA9IHRvcF9yZXZpc2lvbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrX3Jldl9icmFuY2gobmFtZSwgbGRpciwgcmVwb1snbGFzdF9yZXZpc2lvbiddLCBicmFuY2gpOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBwYXRjaF9jbWRfcmFuZ2UgPSAiJXMuLiVzIiAlIChyZXBvWydsYXN0X3JldmlzaW9uJ10sIHRvcF9yZXZpc2lvbikKKyAgICAgICAgICAgIHJldl9jbWRfcmFuZ2UgPSBwYXRjaF9jbWRfcmFuZ2UKKworICAgICAgICBmaWxlX2ZpbHRlciA9IHJlcG8uZ2V0KCdmaWxlX2ZpbHRlcicsIiIpCisKKyAgICAgICAgcGF0Y2hfY21kID0gImdpdCBmb3JtYXQtcGF0Y2ggLU4gJXMgLS1vdXRwdXQtZGlyZWN0b3J5ICVzICVzIC0tICVzIiAlIFwKKyAgICAgICAgICAgIChwcmVmaXgscmVwb19wYXRjaF9kaXIsIHBhdGNoX2NtZF9yYW5nZSwgZmlsZV9maWx0ZXIpCisgICAgICAgIG91dHB1dCA9IHJ1bmNtZChwYXRjaF9jbWQsIGxkaXIpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiZ2VuZXJhdGVkIHBhdGNoIHNldDpcbiVzIiAlIG91dHB1dCkKKyAgICAgICAgcGF0Y2hsaXN0ID0gb3V0cHV0LnNwbGl0bGluZXMoKQorCisgICAgICAgIHJldl9jbWQgPSAiZ2l0IHJldi1saXN0IC0tbm8tbWVyZ2VzICVzIC0tICVzIiAlIChyZXZfY21kX3JhbmdlLCBmaWxlX2ZpbHRlcikKKyAgICAgICAgcmV2bGlzdCA9IHJ1bmNtZChyZXZfY21kLCBsZGlyKS5zcGxpdGxpbmVzKCkKKworICAgICAgICAjIFN0ZXAgMzogQ2FsbCByZXBvIHNwZWNpZmljIGhvb2sgdG8gYWRqdXN0IHBhdGNoCisgICAgICAgIGlmICdob29rJyBpbiByZXBvOgorICAgICAgICAgICAgIyBob29rIHBhcmFtZXRlciBpczogLi9ob29rIHBhdGNocGF0aCByZXZpc2lvbiByZXBvbmFtZQorICAgICAgICAgICAgY291bnQ9bGVuKHJldmxpc3QpLTEKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGxpc3Q6CisgICAgICAgICAgICAgICAgcnVuY21kKCIlcyAlcyAlcyAlcyIgJSAocmVwb1snaG9vayddLCBwYXRjaCwgcmV2bGlzdFtjb3VudF0sIG5hbWUpKQorICAgICAgICAgICAgICAgIGNvdW50PWNvdW50LTEKKworICAgICAgICAjIFN0ZXAgM2E6IEZpbHRlciBvdXQgdW53YW50ZWQgZmlsZXMgYW5kIHBhdGNoZXMuCisgICAgICAgIGV4Y2x1ZGUgPSByZXBvLmdldCgnZmlsZV9leGNsdWRlJywgJycpCisgICAgICAgIGlmIGV4Y2x1ZGU6CisgICAgICAgICAgICBmaWx0ZXIgPSBbJ2ZpbHRlcmRpZmYnLCAnLXAxJ10KKyAgICAgICAgICAgIGZvciBwYXRoIGluIGV4Y2x1ZGUuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBmaWx0ZXIuYXBwZW5kKCcteCcpCisgICAgICAgICAgICAgICAgZmlsdGVyLmFwcGVuZCgnJXMvJXMnICUgKGRlc3RfZGlyLCBwYXRoKSBpZiBkZXN0X2RpciAhPSAnLicgZWxzZSBwYXRoKQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNobGlzdFs6XToKKyAgICAgICAgICAgICAgICBmaWx0ZXJlZCA9IHBhdGNoICsgJy50bXAnCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbHRlcmVkLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChmaWx0ZXIgKyBbcGF0Y2hdLCBvdXQ9ZikKKyAgICAgICAgICAgICAgICAjIE5vdyBjaGVjayBmb3IgZW1wdHkgcGF0Y2hlcy4KKyAgICAgICAgICAgICAgICBpZiBydW5jbWQoWydmaWx0ZXJkaWZmJywgJy0tbGlzdCcsIGZpbHRlcmVkXSk6CisgICAgICAgICAgICAgICAgICAgICMgUG9zc2libHkgbW9kaWZpZWQuCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhwYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGZpbHRlcmVkLCBwYXRjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEVtcHR5LCBpZ25vcmUgaXQuIE11c3QgYWxzbyByZW1vdmUgZnJvbSByZXZsaXN0LgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0Y2gsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmcm9tbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUGF0Y2ggbXVzdCBoYXZlIGJlZW4gZW1wdHkgdG8gc3RhcnQgd2l0aC4gTm8gbmVlZAorICAgICAgICAgICAgICAgICAgICAgICAgIyB0byByZW1vdmUgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2gocicnJ15Gcm9tIChbMC05YS1mQS1GXSspIC4qXG4nJycsIGZyb21saW5lKQorICAgICAgICAgICAgICAgICAgICByZXYgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygnc2tpcHBpbmcgZW1wdHkgcGF0Y2ggJXMgPSAlcycgJSAocGF0Y2gsIHJldikpCisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhwYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbHRlcmVkKQorICAgICAgICAgICAgICAgICAgICBwYXRjaGxpc3QucmVtb3ZlKHBhdGNoKQorICAgICAgICAgICAgICAgICAgICByZXZsaXN0LnJlbW92ZShyZXYpCisKKyAgICAgICAgIyBTdGVwIDQ6IHdyaXRlIHBhdGNoIGxpc3QgYW5kIHJldmlzaW9uIGxpc3QgdG8gZmlsZSwgZm9yIHVzZXIgdG8gZWRpdCBsYXRlcgorICAgICAgICBwYXRjaGxpc3RfZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgcGF0Y2hfZGlyLCAicGF0Y2hsaXN0LSVzIiAlIG5hbWUpCisgICAgICAgIHJlcG9bJ3BhdGNobGlzdCddID0gcGF0Y2hsaXN0X2ZpbGUKKyAgICAgICAgZiA9IG9wZW4ocGF0Y2hsaXN0X2ZpbGUsICd3JykKKyAgICAgICAgY291bnQ9bGVuKHJldmxpc3QpLTEKKyAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNobGlzdDoKKyAgICAgICAgICAgIGYud3JpdGUoIiVzICVzXG4iICUgKHBhdGNoLCByZXZsaXN0W2NvdW50XSkpCisgICAgICAgICAgICBjaGVja19wYXRjaChvcy5wYXRoLmpvaW4ocGF0Y2hfZGlyLCBwYXRjaCkpCisgICAgICAgICAgICBjb3VudD1jb3VudC0xCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgIyBTdGVwIDU6IGludm9rZSBiYXNoIGZvciB1c2VyIHRvIGVkaXQgcGF0Y2ggYW5kIHBhdGNoIGxpc3QKKyAgICBpZiBjb25mLmludGVyYWN0aXZlOgorICAgICAgICBwcmludCgnWW91IG1heSBub3cgZWRpdCB0aGUgcGF0Y2ggYW5kIHBhdGNoIGxpc3QgaW4gJXNcbicgXAorICAgICAgICAgICAgICAnRm9yIGV4YW1wbGUsIHlvdSBjYW4gcmVtb3ZlIHVud2FudGVkIHBhdGNoIGVudHJpZXMgZnJvbSBwYXRjaGxpc3QtKiwgc28gdGhhdCB0aGV5IHdpbGwgYmUgbm90IGFwcGxpZWQgbGF0ZXInICUgcGF0Y2hfZGlyKTsKKyAgICAgICAgaWYgbm90IGRyb3BfdG9fc2hlbGwocGF0Y2hfZGlyKToKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAjIFN0ZXAgNjogYXBwbHkgdGhlIGdlbmVyYXRlZCBhbmQgcmV2aXNlZCBwYXRjaAorICAgIGFwcGx5X3BhdGNobGlzdChjb25mLCByZXBvcykKKyAgICBydW5jbWQoInJtIC1yZiAlcyIgJSBwYXRjaF9kaXIpCisKKyAgICAjIFN0ZXAgNzogY29tbWl0IHRoZSB1cGRhdGVkIGNvbmZpZyBmaWxlIGlmIGl0J3MgYmVpbmcgdHJhY2tlZAorICAgIHJlbHBhdGggPSBvcy5wYXRoLnJlbHBhdGgoY29uZi5jb25mZmlsZSkKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IHJ1bmNtZCgiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAlcyIgJSByZWxwYXRoLCBwcmludGVycj1GYWxzZSkKKyAgICBleGNlcHQ6CisgICAgICAgICMgT3V0c2lkZSB0aGUgcmVwb3NpdG9yeQorICAgICAgICBvdXRwdXQgPSBOb25lCisgICAgaWYgb3V0cHV0OgorICAgICAgICBsb2dnZXIuaW5mbygiQ29tbWl0dGluZyB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSIpCisgICAgICAgIGlmIG91dHB1dC5sc3RyaXAoKS5zdGFydHN3aXRoKCJNIik6CisKKyAgICAgICAgICAgICMgY3JlYXRlIHRoZSAiY29tcG9uZW50cyIgc3RyaW5nCisgICAgICAgICAgICBjb21wb25lbnRfc3RyID0gImFsbCBjb21wb25lbnRzIgorICAgICAgICAgICAgaWYgbGVuKGNvbXBvbmVudHMpID4gMDoKKyAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSB0ZWxsIHdoaWNoIGNvbXBvbmVudHMgd2VyZSBhY3R1YWxseSBjaGFuZ2VkCisgICAgICAgICAgICAgICAgY29tcG9uZW50X3N0ciA9ICIsICIuam9pbihjb21wb25lbnRzKQorCisgICAgICAgICAgICAjIGV4cGFuZCB0aGUgdGVtcGxhdGUgd2l0aCBrbm93biB2YWx1ZXMKKyAgICAgICAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUoY29uZi5jb21taXRfbXNnX3RlbXBsYXRlKQorICAgICAgICAgICAgcmF3X21zZyA9IHRlbXBsYXRlLnN1YnN0aXR1dGUoY29tcG9uZW50cyA9IGNvbXBvbmVudF9zdHIpCisKKyAgICAgICAgICAgICMgc2FuaXRpemUgdGhlIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaW4gY29tbWFuZCBsaW5lCisgICAgICAgICAgICBtc2cgPSByYXdfbXNnLnJlcGxhY2UoJyInLCAnXFwiJykKKworICAgICAgICAgICAgcnVuY21kKCdnaXQgY29tbWl0IC1tICIlcyIgJXMnICUgKG1zZywgcmVscGF0aCkpCisKK2RlZiBhcHBseV9wYXRjaGxpc3QoY29uZiwgcmVwb3MpOgorICAgICIiIgorICAgICAgICBhcHBseSB0aGUgZ2VuZXJhdGVkIHBhdGNoIGxpc3QgdG8gY29tYm8gcmVwbworICAgICIiIgorICAgIGZvciBuYW1lIGluIHJlcG9zOgorICAgICAgICByZXBvID0gY29uZi5yZXBvc1tuYW1lXQorICAgICAgICBsYXN0cmV2ID0gcmVwb1sibGFzdF9yZXZpc2lvbiJdCisgICAgICAgIHByZXZyZXYgPSBsYXN0cmV2CisKKyAgICAgICAgIyBHZXQgbm9uLWJsYW5rIGxpbmVzIGZyb20gcGF0Y2ggbGlzdCBmaWxlCisgICAgICAgIHBhdGNobGlzdCA9IFtdCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJlcG9bJ3BhdGNobGlzdCddKSBvciBub3QgY29uZi5pbnRlcmFjdGl2ZToKKyAgICAgICAgICAgICMgTm90ZTogd2Ugd2FudCB0aGlzIHRvIGZhaWwgaGVyZSBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCB3ZSdyZSBub3QgaW4KKyAgICAgICAgICAgICMgaW50ZXJhY3RpdmUgbW9kZSBzaW5jZSB0aGUgZmlsZSBzaG91bGQgZXhpc3QgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICB3aXRoIG9wZW4ocmVwb1sncGF0Y2hsaXN0J10pIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNobGlzdC5hcHBlbmQobGluZSkKKworICAgICAgICBsZGlyID0gY29uZi5yZXBvc1tuYW1lXVsnbG9jYWxfcmVwb19kaXInXQorICAgICAgICBicmFuY2ggPSBjb25mLnJlcG9zW25hbWVdLmdldCgnYnJhbmNoJywgIm1hc3RlciIpCisgICAgICAgIGJyYW5jaHJldiA9IHJ1bmNtZCgiZ2l0IHJldi1wYXJzZSAlcyIgJSBicmFuY2gsIGxkaXIpLnN0cmlwKCkKKworICAgICAgICBpZiBwYXRjaGxpc3Q6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQXBwbHlpbmcgcGF0Y2hlcyBmcm9tICVzLi4uIiAlIG5hbWUpCisgICAgICAgICAgICBsaW5lY291bnQgPSBsZW4ocGF0Y2hsaXN0KQorICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHBhdGNobGlzdDoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGUgPSBsaW5lLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICBsYXN0cmV2ID0gbGluZS5zcGxpdCgpWzFdCisgICAgICAgICAgICAgICAgcGF0Y2hkaXNwID0gb3MucGF0aC5yZWxwYXRoKHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmdldHNpemUocGF0Y2hmaWxlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiKHNraXBwaW5nICVkLyVkICVzIC0gbm8gY2hhbmdlcykiICUgKGksIGxpbmVjb3VudCwgcGF0Y2hkaXNwKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAiZ2l0IGFtIC0ta2VlcC1jciAlcy1wMSAlcyIgJSAoJy1zICcgaWYgcmVwby5nZXQoJ3NpZ25vZmYnLCBUcnVlKSBlbHNlICcnLCBwYXRjaGZpbGUpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBcHBseWluZyAlZC8lZDogJXMiICUgKGksIGxpbmVjb3VudCwgcGF0Y2hkaXNwKSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcnVuY21kKGNtZCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1J1bm5pbmcgImdpdCBhbSAtLWFib3J0IiB0byBjbGVhbnVwIHJlcG8nKQorICAgICAgICAgICAgICAgICAgICAgICAgcnVuY21kKCJnaXQgYW0gLS1hYm9ydCIpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJyIlcyIgZmFpbGVkJyAlIGNtZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJQbGVhc2UgbWFudWFsbHkgYXBwbHkgcGF0Y2ggJXMiICUgcGF0Y2hkaXNwKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk5vdGU6IGlmIHlvdSBleGl0IGFuZCBjb250aW51ZSBhcHBseWluZyB3aXRob3V0IG1hbnVhbGx5IGFwcGx5aW5nIHRoZSBwYXRjaCwgaXQgd2lsbCBiZSBza2lwcGVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkcm9wX3RvX3NoZWxsKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJldnJldiAhPSByZXBvWydsYXN0X3JldmlzaW9uJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYudXBkYXRlKG5hbWUsICJsYXN0X3JldmlzaW9uIiwgcHJldnJldikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIHByZXZyZXYgPSBsYXN0cmV2CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAjIE9uY2UgYWxsIHBhdGNoZXMgYXJlIGFwcGxpZWQsIHdlIHNob3VsZCB1cGRhdGUKKyAgICAgICAgICAgICMgbGFzdF9yZXZpc2lvbiB0byB0aGUgYnJhbmNoIGhlYWQgaW5zdGVhZCBvZiB0aGUgbGFzdAorICAgICAgICAgICAgIyBhcHBsaWVkIHBhdGNoLiBUaGUgdHdvIGFyZSBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgd2hlbgorICAgICAgICAgICAgIyB0aGUgbGFzdCBjb21taXQgaXMgYSBtZXJnZSBjb21taXQgb3Igd2hlbiB0aGUgcGF0Y2hlcyBhdAorICAgICAgICAgICAgIyB0aGUgYnJhbmNoIGhlYWQgd2VyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZiB3ZSBkbyBub3QgZG8gdGhhdCBmb3IgYSBtZXJnZSBjb21taXQsIHRoZSBuZXh0CisgICAgICAgICAgICAjIGNvbWJvLWxheWVyIHJ1biB3aWxsIG9ubHkgZXhjbHVkZSBwYXRjaGVzIHJlYWNoYWJsZSBmcm9tCisgICAgICAgICAgICAjIG9uZSBvZiB0aGUgbWVyZ2VkIGJyYW5jaGVzIGFuZCB0cnkgdG8gcmUtYXBwbHkgcGF0Y2hlcworICAgICAgICAgICAgIyBmcm9tIG90aGVyIGJyYW5jaGVzIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhbHJlYWR5CisgICAgICAgICAgICAjIGNvcGllZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgcGF0Y2hlcyB3ZXJlIGludGVudGlvbmFsbHkgZXhjbHVkZWQsIHRoZSBuZXh0IHJ1biB3aWxsCisgICAgICAgICAgICAjIHByZXNlbnQgdGhlbSBhZ2FpbiBpbnN0ZWFkIG9mIHNraXBwaW5nIG92ZXIgdGhlbS4gVGhpcworICAgICAgICAgICAgIyBtYXkgb3IgbWF5IG5vdCBiZSBpbnRlbmRlZCwgc28gdGhlIGNvZGUgaGVyZSBpcyBjb25zZXJ2YXRpdmUKKyAgICAgICAgICAgICMgYW5kIG9ubHkgYWRkcmVzc2VzIHRoZSAiaGVhZCBpcyBtZXJnZSBjb21taXQiIGNhc2UuCisgICAgICAgICAgICBpZiBsYXN0cmV2ICE9IGJyYW5jaHJldiBhbmQgXAorICAgICAgICAgICAgICAgbGVuKHJ1bmNtZCgiZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiUlUCAtLW5vLXBhdGNoICVzIiAlIGJyYW5jaCwgbGRpcikuc3BsaXQoKSkgPiAxOgorICAgICAgICAgICAgICAgIGxhc3RyZXYgPSBicmFuY2hyZXYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJObyBwYXRjaGVzIHRvIGFwcGx5IGZyb20gJXMiICUgbmFtZSkKKyAgICAgICAgICAgIGxhc3RyZXYgPSBicmFuY2hyZXYKKworICAgICAgICBpZiBsYXN0cmV2ICE9IHJlcG9bJ2xhc3RfcmV2aXNpb24nXToKKyAgICAgICAgICAgIGNvbmYudXBkYXRlKG5hbWUsICJsYXN0X3JldmlzaW9uIiwgbGFzdHJldikKKworZGVmIGFjdGlvbl9zcGxpdHBhdGNoKGNvbmYsIGFyZ3MpOgorICAgICIiIgorICAgICAgICBnZW5lcmF0ZSB0aGUgY29tbWl0IHBhdGNoIGFuZAorICAgICAgICBzcGxpdCB0aGUgcGF0Y2ggcGVyIHJlcG8KKyAgICAiIiIKKyAgICBsb2dnZXIuZGVidWcoImFjdGlvbl9zcGxpdHBhdGNoIikKKyAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICBjb21taXQgPSBhcmdzWzFdCisgICAgZWxzZToKKyAgICAgICAgY29tbWl0ID0gIkhFQUQiCisgICAgcGF0Y2hkaXIgPSAic3BsaXRwYXRjaC0lcyIgJSBjb21taXQKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0Y2hkaXIpOgorICAgICAgICBvcy5ta2RpcihwYXRjaGRpcikKKworICAgICMgZmlsZXJhbmdlX3Jvb3QgaXMgZm9yIHRoZSByZXBvIHdob3NlIGRlc3RfZGlyIGlzIHJvb3QgIi4iCisgICAgIyBhbmQgaXQgc2hvdWxkIGJlIHNwZWNpZmllZCBieSBleGNsdWRpbmcgYWxsIG90aGVyIHJlcG8gZGVzdCBkaXIKKyAgICAjIGxpa2UgIi14IHJlcG8xIC14IHJlcG8yIC14IHJlcG8zIC4uLiIKKyAgICBmaWxlcmFuZ2Vfcm9vdCA9ICIiCisgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgZGVzdF9kaXIgPSBjb25mLnJlcG9zW25hbWVdWydkZXN0X2RpciddCisgICAgICAgIGlmIGRlc3RfZGlyICE9ICIuIjoKKyAgICAgICAgICAgIGZpbGVyYW5nZV9yb290ID0gJyVzIC14ICIlcy8qIicgJSAoZmlsZXJhbmdlX3Jvb3QsIGRlc3RfZGlyKQorCisgICAgZm9yIG5hbWUgaW4gY29uZi5yZXBvczoKKyAgICAgICAgZGVzdF9kaXIgPSBjb25mLnJlcG9zW25hbWVdWydkZXN0X2RpciddCisgICAgICAgIHBhdGNoX2ZpbGVuYW1lID0gIiVzLyVzLnBhdGNoIiAlIChwYXRjaGRpciwgbmFtZSkKKyAgICAgICAgaWYgZGVzdF9kaXIgPT0gIi4iOgorICAgICAgICAgICAgY21kID0gImdpdCBmb3JtYXQtcGF0Y2ggLW4xIC0tc3Rkb3V0ICVzXi4uJXMgfCBmaWx0ZXJkaWZmIC1wMSAlcyA+ICVzIiAlIChjb21taXQsIGNvbW1pdCwgZmlsZXJhbmdlX3Jvb3QsIHBhdGNoX2ZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gImdpdCBmb3JtYXQtcGF0Y2ggLS1uby1wcmVmaXggLW4xIC0tc3Rkb3V0ICVzXi4uJXMgLS0gJXMgPiAlcyIgJSAoY29tbWl0LCBjb21taXQsIGRlc3RfZGlyLCBwYXRjaF9maWxlbmFtZSkKKyAgICAgICAgcnVuY21kKGNtZCkKKyAgICAgICAgIyBEZXRlY3QgZW1wdHkgcGF0Y2hlcyAoaW5jbHVkaW5nIHRob3NlIHByb2R1Y2VkIGJ5IGZpbHRlcmRpZmYgYWJvdmUKKyAgICAgICAgIyB0aGF0IGNvbnRhaW4gb25seSBwcmVhbWJsZSB0ZXh0KQorICAgICAgICBpZiBvcy5wYXRoLmdldHNpemUocGF0Y2hfZmlsZW5hbWUpID09IDAgb3IgcnVuY21kKCJmaWx0ZXJkaWZmICVzIiAlIHBhdGNoX2ZpbGVuYW1lKSA9PSAiIjoKKyAgICAgICAgICAgIG9zLnJlbW92ZShwYXRjaF9maWxlbmFtZSkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIoc2tpcHBpbmcgJXMgLSBubyBjaGFuZ2VzKSIsIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuaW5mbyhwYXRjaF9maWxlbmFtZSkKKworZGVmIGFjdGlvbl9lcnJvcihjb25mLCBhcmdzKToKKyAgICBsb2dnZXIuaW5mbygiaW52YWxpZCBhY3Rpb24gJXMiICUgYXJnc1swXSkKKworYWN0aW9ucyA9IHsKKyAgICAiaW5pdCI6IGFjdGlvbl9pbml0LAorICAgICJ1cGRhdGUiOiBhY3Rpb25fdXBkYXRlLAorICAgICJwdWxsIjogYWN0aW9uX3B1bGwsCisgICAgInNwbGl0cGF0Y2giOiBhY3Rpb25fc3BsaXRwYXRjaCwKK30KKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIHZlcnNpb24gPSAiQ29tYm8gTGF5ZXIgUmVwbyBUb29sIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCisgICAgICAgIHVzYWdlID0gIiIiJXByb2cgW29wdGlvbnNdIGFjdGlvbgorCitDcmVhdGUgYW5kIHVwZGF0ZSBhIGNvbWJpbmF0aW9uIGxheWVyIHJlcG9zaXRvcnkgZnJvbSBtdWx0aXBsZSBjb21wb25lbnQgcmVwb3NpdG9yaWVzLgorCitBY3Rpb246CisgIGluaXQgICAgICAgICAgICAgICAgIGluaXRpYWxpc2UgdGhlIGNvbWJvIGxheWVyIHJlcG8KKyAgdXBkYXRlIFtjb21wb25lbnRzXSAgZ2V0IHBhdGNoZXMgZnJvbSBjb21wb25lbnQgcmVwb3MgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIGNvbWJvIHJlcG8KKyAgcHVsbCBbY29tcG9uZW50c10gICAganVzdCBwdWxsIGNvbXBvbmVudCByZXBvcyBvbmx5CisgIHNwbGl0cGF0Y2ggW2NvbW1pdF0gIGdlbmVyYXRlIGNvbW1pdCBwYXRjaCBhbmQgc3BsaXQgcGVyIGNvbXBvbmVudCwgZGVmYXVsdCBjb21taXQgaXMgSEVBRCIiIikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvbmYiLCBoZWxwID0gInNwZWNpZnkgdGhlIGNvbmZpZyBmaWxlIChjb25mL2NvbWJvLWxheWVyLmNvbmYgaXMgdGhlIGRlZmF1bHQpLiIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gImNvbmZmaWxlIiwgZGVmYXVsdCA9ICJjb25mL2NvbWJvLWxheWVyLmNvbmYiKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1pIiwgIi0taW50ZXJhY3RpdmUiLCBoZWxwID0gImludGVyYWN0aXZlIG1vZGUsIHVzZXIgY2FuIGVkaXQgdGhlIHBhdGNoIGxpc3QgYW5kIHBhdGNoZXMiLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gImludGVyYWN0aXZlIiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBoZWxwID0gIm91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiIsCisgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlc3QgPSAiZGVidWciLCBkZWZhdWx0ID0gRmFsc2UpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1uby1wdWxsIiwgaGVscCA9ICJza2lwIHB1bGxpbmcgY29tcG9uZW50IHJlcG9zIGR1cmluZyB1cGRhdGUiLAorICAgICAgICAgICAgICAgYWN0aW9uID0gInN0b3JlX3RydWUiLCBkZXN0ID0gIm5vcHVsbCIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWhhcmQtcmVzZXQiLAorICAgICAgICAgICAgICAgaGVscCA9ICJpbnN0ZWFkIG9mIHB1bGwgZG8gZmV0Y2ggYW5kIGhhcmQtcmVzZXQgaW4gY29tcG9uZW50IHJlcG9zIiwKKyAgICAgICAgICAgICAgIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwgZGVzdCA9ICJoYXJkX3Jlc2V0IiwgZGVmYXVsdCA9IEZhbHNlKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1IIiwgIi0taGlzdG9yeSIsIGhlbHAgPSAiaW1wb3J0IGZ1bGwgaGlzdG9yeSBvZiBjb21wb25lbnRzIGR1cmluZyBpbml0IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsIGRlZmF1bHQgPSBGYWxzZSkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKworICAgICMgRGlzcGF0Y2ggdG8gYWN0aW9uIGhhbmRsZXIKKyAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBhY3Rpb24gc3BlY2lmaWVkLCBleGl0aW5nIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsaWYgYXJnc1sxXSBub3QgaW4gYWN0aW9uczoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbnN1cHBvcnRlZCBhY3Rpb24gJXMsIGV4aXRpbmdcbiIgJSAoYXJnc1sxXSkpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICBlbGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcHRpb25zLmNvbmZmaWxlKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJObyB2YWxpZCBjb25maWcgZmlsZSwgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgY29uZmRhdGEgPSBDb25maWd1cmF0aW9uKG9wdGlvbnMpCisgICAgICAgIGluaXRtb2RlID0gKGFyZ3NbMV0gPT0gJ2luaXQnKQorICAgICAgICBjb25mZGF0YS5zYW5pdHlfY2hlY2soaW5pdG1vZGUpCisgICAgICAgIGFjdGlvbnMuZ2V0KGFyZ3NbMV0sIGFjdGlvbl9lcnJvcikoY29uZmRhdGEsIGFyZ3NbMTpdKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbWJvLWxheWVyLWhvb2stZGVmYXVsdC5zaCBiL3NjcmlwdHMvY29tYm8tbGF5ZXItaG9vay1kZWZhdWx0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlM2EzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbWJvLWxheWVyLWhvb2stZGVmYXVsdC5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKyMgSG9vayB0byBhZGQgc291cmNlIGNvbXBvbmVudC9yZXZpc2lvbiBpbmZvIHRvIGNvbW1pdCBtZXNzYWdlCisjIFBhcmFtZXRlcjoKKyMgICAkMSBwYXRjaC1maWxlCisjICAgJDIgcmV2aXNpb24KKyMgICAkMyByZXBvbmFtZQorCitwYXRjaGZpbGU9JDEKK3Jldj0kMgorcmVwb25hbWU9JDMKKworc2VkIC1pIC1lICIwLC9eU3ViamVjdDovcyNeU3ViamVjdDogXFtQQVRDSFxdIFwoJHJlcG9uYW1lOiBcKSpcKC4qXCkjU3ViamVjdDogXFtQQVRDSFxdICRyZXBvbmFtZTogXDIjIiAkcGF0Y2hmaWxlCitpZiBncmVwIC1xICdeU2lnbmVkLW9mZi1ieTonICRwYXRjaGZpbGU7IHRoZW4KKyAgICAjIEluc2VydCBiZWZvcmUgU2lnbmVkLW9mZi1ieS4KKyAgICBzZWQgLWkgLWUgIjAsL15TaWduZWQtb2ZmLWJ5Oi9zI1woXlNpZ25lZC1vZmYtYnk6LipcKSNcKEZyb20gJHJlcG9uYW1lIHJldjogJHJldlwpXG5cblwxIyIgJHBhdGNoZmlsZQorZWxzZQorICAgICMgSW5zZXJ0IGJlZm9yZSBmaW5hbCAtLS0gc2VwYXJhdG9yLCB3aXRoIGV4dHJhIGJsYW5rIGxpbmVzIHJlbW92ZWQuCisgICAgcGVybCAtZSAiXCRfID0gam9pbignJywgPD4pOyBzL14oLipcU1sgXHRdKikoXG58XG5ccypcbiktLS1cbi9cJDFcblxuRnJvbSAkcmVwb25hbWUgcmV2OiAkcmV2XG4tLS1cbi9zOyBwcmludDsiICRwYXRjaGZpbGUgPiRwYXRjaGZpbGUudG1wCisgICAgbXYgJHBhdGNoZmlsZS50bXAgJHBhdGNoZmlsZQorZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29tYm8tbGF5ZXIuY29uZi5leGFtcGxlIGIvc2NyaXB0cy9jb21iby1sYXllci5jb25mLmV4YW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlMmI1OAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29tYm8tbGF5ZXIuY29uZi5leGFtcGxlCkBAIC0wLDAgKzEsOTMgQEAKKyMgY29tYm8tbGF5ZXIgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUKKworIyBEZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHNlY3Rpb25zLgorW0RFRkFVTFRdCisKKyMgQWRkICdTaWduZWQtb2ZmLWJ5JyB0byBhbGwgY29tbWl0cyB0aGF0IGdldCBpbXBvcnRlZCBhdXRvbWF0aWNhbGx5Lgorc2lnbm9mZiA9IFRydWUKKworIyBjb21wb25lbnQgbmFtZQorW2JpdGJha2VdCisKKyMgT3ZlcnJpZGUgc2lnbmVkb2ZmIGRlZmF1bHQgYWJvdmUgKG5vdCB2ZXJ5IHVzZWZ1bCwgYnV0IHBvc3NpYmxlKS4KK3NpZ25vZmYgPSBGYWxzZQorCisjIG1hbmRhdG9yeSBvcHRpb25zCisjIGdpdCB1cHN0cmVhbSB1cmkKK3NyY191cmkgPSBnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlCisKKyMgdGhlIGRpcmVjdG9yeSB0byBjbG9uZSB0aGUgY29tcG9uZW50IHJlcG8KK2xvY2FsX3JlcG9fZGlyID0gL2hvbWUva3l1My9zcmMvdGVzdC9iaXRiYWtlCisKKyMgdGhlIHJlbGF0aXZlIGRpciB3aXRoaW4gdGhlIGNvbWJvIHJlcG8gdG8gcHV0IHRoZSBjb21wb25lbnQgZmlsZXMKKyMgdXNlICIuIiBpZiB0aGUgZmlsZXMgc2hvdWxkIGJlIGluIHRoZSByb290IGRpcgorZGVzdF9kaXIgPSBiaXRiYWtlCisKKyMgdGhlIGxhc3QgdXBkYXRlIHJldmlzaW9uLgorIyAiaW5pdCIgd2lsbCBzZXQgdGhpcyB0byB0aGUgbGF0ZXN0IHJldmlzaW9uIGF1dG9tYXRpY2FsbHksIGhvd2V2ZXIgaWYgaXQKKyMgaXMgZW1wdHkgd2hlbiAidXBkYXRlIiBpcyBydW4sIHRoZSB0b29sIHdpbGwgc3RhcnQgZnJvbSB0aGUgZmlyc3QgY29tbWl0LgorIyBOb3RlIHRoYXQgdGhpcyB2YWx1ZSB3aWxsIGdldCB1cGRhdGVkIGJ5ICJ1cGRhdGUiIGlmIHRoZSBjb21wb25lbnQgcmVwbydzCisjIGxhdGVzdCByZXZpc2lvbiBjaGFuZ2VkIGFuZCB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCitsYXN0X3JldmlzaW9uID0KKworIyBvcHRpb25hbCBvcHRpb25zOgorCisjIGJyYW5jaDogc3BlY2lmeSB0aGUgYnJhbmNoIGluIHRoZSBjb21wb25lbnQgcmVwbyB0byBwdWxsIGZyb20KKyMgKG1hc3RlciBpZiBub3Qgc3BlY2lmaWVkKQorCisjIGZpbGVfZmlsdGVyOiBvbmx5IGluY2x1ZGUgdGhlIHNwZWNpZmllZCBmaWxlKHMpCisjIGZpbGVfZmlsdGVyID0gW3BhdGhdIFtwYXRoXSAuLi4KKyMgZXhhbXBsZToKKyMgICBmaWxlX2ZpbHRlciA9IHNyYy8gIDogb25seSBpbmNsdWRlIHRoZSBzdWJkaXIgc3JjCisjICAgZmlsZV9maWx0ZXIgPSBzcmMvKi5jIDogb25seSBpbmNsdWRlIHRoZSBzcmMgKi5jIGZpbGUKKyMgICBmaWxlX2ZpbHRlciA9IHNyYy9tYWluLmMgc3JjL01ha2VmaWxlLmFtIDogb25seSBpbmNsdWRlIHRoZXNlIHR3byBmaWxlcworCisjIGZpbGVfZXhjbHVkZTogZmlsdGVyIG91dCB0aGVzZSBmaWxlKHMpCisjIGZpbGVfZXhjbHVkZSA9IFtwYXRoXSBbcGF0aF0gLi4uCisjCisjIEVhY2ggZW50cnkgbXVzdCBtYXRjaCBhIGZpbGUgbmFtZS4gSW4gY29udHJhc3QgZG8gZmlsZV9maWx0ZXIsIG1hdGNoaW5nCisjIGEgZGlyZWN0b3J5IGhhcyBubyBlZmZlY3QuIFRvIGFjaGlldmUgdGhhdCwgdXNlIGFwcGVuZCBhICogd2lsZGNhcmQKKyMgYXQgdGhlIGVuZC4KKyMKKyMgV2lsZGNhcmRzIGFyZSBhcHBsaWVkIHRvIHRoZSBjb21wbGV0ZSBwYXRoIGFuZCBhbHNvIG1hdGNoIHNsYXNoZXMuCisjCisjIGV4YW1wbGU6CisjICAgZmlsZV9leGNsdWRlID0gc3JjL2Zvb2Jhci8qICA6IGV4Y2x1ZGUgZXZlcnl0aGluZyB1bmRlciBzcmMvZm9vYmFyCisjICAgZmlsZV9leGNsdWRlID0gc3JjL21haW4uYyA6IGZpbHRlciBvdXQgbWFpbi5jIGFmdGVyIGluY2x1ZGluZyBpdCB3aXRoIGZpbGVfZmlsdGVyID0gc3JjLyouYworIyAgIGZpbGVfZXhjbHVkZSA9ICp+IDogZXhjbHVkZSBiYWNrdXAgZmlsZXMKKworIyBob29rOiBpZiBwcm92aWRlZCwgdGhlIHRvb2wgd2lsbCBjYWxsIHRoZSBob29rIHRvIHByb2Nlc3MgdGhlIGdlbmVyYXRlZAorIyAgICAgcGF0Y2ggZnJvbSB1cHN0cmVhbSwgYW5kIHRoZW4gYXBwbHkgdGhlIG1vZGlmaWVkIHBhdGNoIHRvIHRoZSBjb21ibworIyAgICAgcmVwby4KKyMgdGhlIGhvb2sgc2NyaXB0IGlzIGNhbGxlZCBhcyBmb2xsb3dzOiAuL2hvb2sgcGF0Y2hwYXRoIHJldmlzaW9uIHJlcG9uYW1lCisjIGV4YW1wbGU6CisjICAgICBob29rID0gY29tYm8tbGF5ZXItaG9vay1kZWZhdWx0LnNoCisKKyMgc2luY2VfcmV2aXNpb246CisjICAgc2luY2VfcmV2aXNpb24gPSByZWxlYXNlLTEtMgorIyAgIHNpbmNlX3JldmlzaW9uID0gMTIzNDUgYWJjZGYKKyMKKyMgSWYgcHJvdmlkZWQsIHRydW5jYXRlIGltcG9ydGVkIGhpc3RvcnkgZHVyaW5nICJjb21iby1sYXllciAtLWhpc3RvcnkKKyMgaW5pdCIgYXQgdGhlIHNwZWNpZmllZCByZXZpc2lvbihzKS4gIE1vcmUgdGhhbiBvbmUgY2FuIGJlIHNwZWNpZmllZAorIyB0byBjdXQgb2ZmIG11bHRpcGxlIGNvbXBvbmVudCBicmFuY2hlcy4KKyMKKyMgVGhlIHNwZWNpZmllZCBjb21taXRzIHRoZW1zZWx2ZXMgZG8gbm90IGdldCBpbXBvcnRlZC4gSW5zdGVhZCwgYW4KKyMgYXJ0aWZpY2lhbCBjb21taXQgd2l0aCAidW5rbm93biIgYXV0aG9yIGlzIGNyZWF0ZWQgd2l0aCBhIGNvbnRlbnQKKyMgdGhhdCBtYXRjaGVzIHRoZSBvcmlnaW5hbCBjb21taXQuCisKK1tvZS1jb3JlXQorc3JjX3VyaSA9IGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZC1jb3JlCitsb2NhbF9yZXBvX2RpciA9IC9ob21lL2t5dTMvc3JjL3Rlc3Qvb2Vjb3JlCitkZXN0X2RpciA9IC4KK2xhc3RfcmV2aXNpb24gPQorc2luY2VfcmV2aXNpb24gPSBzb21lLXRhZy1vci1jb21taXQtb24tbWFzdGVyLWJyYW5jaAorCisjIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZW1iZWQgcHl0aG9uIGNvZGUgaW4gdGhlIGNvbmZpZyB2YWx1ZXMuIFNpbWlsYXIKKyMgdG8gYml0YmFrZSBpdCBjb25zaWRlcnMgZXZlcnkgdmFsdWUgc3RhcnRpbmcgd2l0aCBAIHRvIGJlIGEgcHl0aG9uCisjIHNjcmlwdC4KKyMgZS5nLiBsb2NhbF9yZXBvX2RpciBjb3VsZCBlYXNpbHkgYmUgY29uZmlndXJlZCB1c2luZyBhbiBlbnZpcm9ubWVudAorIyB2YXJpYWJsZToKKyMKKyMgW2JpdGJha2VdCisjIGxvY2FsX3JlcG9fZGlyID0gQG9zLmdldGVudigiTE9DQUxfUkVQT19ESVIiKSArICIvYml0YmFrZSIKKyMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC1wbG90LnNoIGIvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYmItbWF0cml4LXBsb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTM2YTI1NQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC1wbG90LnNoCkBAIC0wLDAgKzEsMTM3IEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBvcGVyYXRlcyBvbiB0aGUgLmRhdCBmaWxlIGdlbmVyYXRlZCBieSBiYi1tYXRyaXguc2guIEl0IHRvbGVyYXRlcworIyB0aGUgaGVhZGVyIGJ5IHNraXBwaW5nIHRoZSBmaXJzdCBsaW5lLCBidXQgZXJyb3IgbWVzc2FnZXMgYW5kIGJhZCBkYXRhIHJlY29yZHMKKyMgbmVlZCB0byBiZSByZW1vdmVkIGZpcnN0LiBJdCB3aWxsIGdlbmVyYXRlIHRocmVlIHZpZXdzIG9mIHRoZSBwbG90LCBhbmQgbGVhdmUKKyMgYW4gaW50ZXJhY3RpdmUgdmlldyBvcGVuIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgorIworIyBBVVRIT1JTCisjIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorIworCisjIFNldHVwIHRoZSBkZWZhdWx0cworREFURklMRT0iYmItbWF0cml4LmRhdCIKK1hMQUJFTD0iQkJfTlVNQkVSX1RIUkVBRFMiCitZTEFCRUw9IlBBUkFMTEVMX01BS0UiCitGSUVMRD0zCitERUZfVElUTEU9IkVsYXBzZWQgVGltZSAoc2Vjb25kcykiCitQTTNEX0ZSQUdNRU5UPSJ1bnNldCBzdXJmYWNlOyBzZXQgcG0zZCBhdCBzIGhpZGRlbjNkIDEwMCIKK1NJWkU9IjY0MCw0ODAiCisKK2Z1bmN0aW9uIHVzYWdlIHsKK0NNRD0kKGJhc2VuYW1lICQwKQorY2F0IDw8RU9NCitVc2FnZTogJENNRCBbLWQgZGF0ZmlsZV0gWy1mIGZpZWxkXSBbLWhdIFstdCB0aXRsZV0gWy13XQorICAtZCBkYXRmaWxlICAgIFRoZSBkYXRhIGZpbGUgZ2VuZXJhdGVkIGJ5IGJiLW1hdHJpeC5zaCAoZGVmYXVsdDogJERBVEZJTEUpCisgIC1mIGZpZWxkICAgICAgVGhlIGZpZWxkIGluZGV4IHRvIHBsb3QgYXMgdGhlIFogYXhpcyBmcm9tIHRoZSBkYXRhIGZpbGUKKyAgICAgICAgICAgICAgICAoZGVmYXVsdDogJEZJRUxELCAiJERFRl9USVRMRSIpCisgIC1oICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZQorICAtcyBXLEggICAgICAgIFBORyBhbmQgd2luZG93IHNpemUgaW4gcGl4ZWxzIChkZWZhdWx0OiAkU0laRSkKKyAgLXQgdGl0bGUgICAgICBUaGUgdGl0bGUgdG8gZGlzcGxheSwgc2hvdWxkIGRlc2NyaWJlIHRoZSBmaWVsZCAoLWYpIGFuZCB1bml0cworICAgICAgICAgICAgICAgIChkZWZhdWx0OiAiJERFRl9USVRMRSIpCisgIC13ICAgICAgICAgICAgUmVuZGVyIHRoZSBwbG90IGFzIHdpcmVmcmFtZSB3aXRoIGEgMkQgY29sb3JtYXAgcHJvamVjdGVkIG9uIHRoZQorICAgICAgICAgICAgICAgIFhZIHBsYW5lIHJhdGhlciB0aGFuIGFzIHRoZSB0ZXh0dXJlIGZvciB0aGUgc3VyZmFjZQorRU9NCit9CisKKyMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cword2hpbGUgZ2V0b3B0cyAiZDpmOmhzOnQ6dyIgT1BUOyBkbworCWNhc2UgJE9QVCBpbgorCWQpCisJCURBVEZJTEU9IiRPUFRBUkciCisJCTs7CisJZikKKwkJRklFTEQ9IiRPUFRBUkciCisJCTs7CisJaCkKKwkJdXNhZ2UKKwkJZXhpdCAwCisJCTs7CisJcykKKwkJU0laRT0iJE9QVEFSRyIKKwkJOzsKKwl0KQorCQlUSVRMRT0iJE9QVEFSRyIKKwkJOzsKKwl3KQorCQlQTTNEX0ZSQUdNRU5UPSJzZXQgcG0zZCBhdCBiIgorCQlXPSItdyIKKwkJOzsKKwkqKQorCQl1c2FnZQorCQlleGl0IDEKKwkJOzsKKwllc2FjCitkb25lCisKKyMgRW5zdXJlIHRoZSBkYXRhIGZpbGUgZXhpc3RzCitpZiBbICEgLWYgIiREQVRGSUxFIiBdOyB0aGVuCisJZWNobyAiRVJST1I6ICREQVRGSUxFIGRvZXMgbm90IGV4aXN0IgorCXVzYWdlCisJZXhpdCAxCitmaQorUExPVF9CQVNFTkFNRT0ke0RBVEZJTEUlLip9LWYkRklFTEQkVworCisjIFNldCBhIHNhbmUgdGl0bGUKKyMgVE9ETzogcGFyc2UgdGhlIGhlYWRlciBhbmQgZGVmaW5lIHRpdGxlcyBmb3IgZWFjaCBmb3JtYXQgcGFyYW1ldGVyIGZvciBUSU1FKDEpCitpZiBbIC16ICIkVElUTEUiIF07IHRoZW4KKwlpZiBbICEgIiRGSUVMRCIgPT0gIjMiIF07IHRoZW4KKwkJVElUTEU9IkZpZWxkICRGSUVMRCIKKwllbHNlCisJCVRJVExFPSIkREVGX1RJVExFIgorCWZpCitmaQorCisjIERldGVybWluZSB0aGUgZGdyaWQzZCBtZXNoIGRpbWVuc2lvbnMgc2l6ZQorTUlOPSQodGFpbCAtbiArMiAiJERBVEZJTEUiIHwgY3V0IC1kICcgJyAtZiAxIHwgc2VkICdzL14wKi8vJyB8IHNvcnQgLW4gfCB1bmlxIHwgaGVhZCAtbjEpCitNQVg9JCh0YWlsIC1uICsyICIkREFURklMRSIgfCBjdXQgLWQgJyAnIC1mIDEgfCBzZWQgJ3MvXjAqLy8nIHwgc29ydCAtbiB8IHVuaXEgfCB0YWlsIC1uMSkKK0JCX0NOVD0kWyR7TUFYfSAtICRNSU4gKyAxXQorTUlOPSQodGFpbCAtbiArMiAiJERBVEZJTEUiIHwgY3V0IC1kICcgJyAtZiAyIHwgc2VkICdzL14wKi8vJyB8IHNvcnQgLW4gfCB1bmlxIHwgaGVhZCAtbjEpCitNQVg9JCh0YWlsIC1uICsyICIkREFURklMRSIgfCBjdXQgLWQgJyAnIC1mIDIgfCBzZWQgJ3MvXjAqLy8nIHwgc29ydCAtbiB8IHVuaXEgfCB0YWlsIC1uMSkKK1BNX0NOVD0kWyR7TUFYfSAtICRNSU4gKyAxXQorCisKKyhjYXQgPDxFT0YKK3NldCB0aXRsZSAiJFRJVExFIgorc2V0IHhsYWJlbCAiJFhMQUJFTCIKK3NldCB5bGFiZWwgIiRZTEFCRUwiCitzZXQgc3R5bGUgbGluZSAxMDAgbHQgNSBsdyAxLjUKKyRQTTNEX0ZSQUdNRU5UCitzZXQgZGdyaWQzZCAkUE1fQ05ULCRCQl9DTlQgc3BsaW5lcworc2V0IHRpY3NsZXZlbCAwLjIKKworc2V0IHRlcm0gcG5nIHNpemUgJFNJWkUKK3NldCBvdXRwdXQgIiRQTE9UX0JBU0VOQU1FLnBuZyIKK3NwbG90ICIkREFURklMRSIgZXZlcnkgOjoxIHVzaW5nIDE6MjokRklFTEQgd2l0aCBsaW5lcyBscyAxMDAKKworc2V0IHZpZXcgOTAsMAorc2V0IG91dHB1dCAiJFBMT1RfQkFTRU5BTUUtYmIucG5nIgorcmVwbG90CisKK3NldCB2aWV3IDkwLDkwCitzZXQgb3V0cHV0ICIkUExPVF9CQVNFTkFNRS1wbS5wbmciCityZXBsb3QKKworc2V0IHZpZXcgNjAsMzAKK3NldCB0ZXJtIHd4dCBzaXplICRTSVpFCityZXBsb3QKK0VPRgorKSB8IGdudXBsb3QgLS1wZXJzaXN0CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2ggYi9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9iYi1tYXRyaXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTA2NDU2NQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29udHJpYi9iYi1wZXJmL2JiLW1hdHJpeC5zaApAQCAtMCwwICsxLDc5IEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBydW5zIEJCX0NNRCAodHlwaWNhbGx5IGJ1aWxkaW5nIGNvcmUtaW1hZ2Utc2F0bykgZm9yIGFsbAorIyBjb21iaW5jYXRpb25zIG9mIEJCX1JBTkdFIGFuZCBQTV9SQU5HRSB2YWx1ZXMuIEl0IHNhdmVzIG9mZiBhbGwgdGhlIGNvbnNvbGUKKyMgbG9ncywgdGhlIGJ1aWxkc3RhdHMgZGlyZWN0b3JpZXMsIGFuZCBjcmVhdGVzIGEgYmItcG0tcnVudGltZS5kYXQgZmlsZSB3aGljaAorIyBjYW4gYmUgdXNlZCB0byBwb3N0cHJvY2VzcyB0aGUgcmVzdWx0cyB3aXRoIGEgcGxvdHRpbmcgdG9vbCwgc3ByZWFkc2hlZXQsIGV0Yy4KKyMgQmVmb3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHByZS1kb3dubG9hZCBhbGwgdGhlCisjIG5lY2Vzc2FyeSBzb3VyY2VzIGJ5IHBlcmZvcm1pbmcgdGhlIEJCX0NNRCBvbmNlIG1hbnVhbGx5LiBJdCBpcyBhbHNvIGEgZ29vZAorIyBpZGVhIHRvIGRpc2FibGUgY3JvbiB0byBhdm9pZCBydW50aW1lIHZhcmlhdGlvbnMgY2F1c2VkIGJ5IHRoaW5ncyBsaWtlIHRoZQorIyBsb2NhdGUgcHJvY2Vzcy4gQmUgc3VyZSB0byBzYW5pdGl6ZSB0aGUgZGF0IGZpbGUgcHJpb3IgdG8gcG9zdC1wcm9jZXNzaW5nIGFzCisjIGl0IG1heSBjb250YWluIGVycm9yIG1lc3NhZ2VzIG9yIGJhZCBydW5zIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWQuCisjCisjIEFVVEhPUlMKKyMgRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisjCisKKyMgVGhlIGZvbGxvd2luZyByYW5nZXMgYXJlIGFwcHJvcHJpYXRlIGZvciBhIDQgY29yZSBzeXN0ZW0gd2l0aCA4IGxvZ2ljYWwgdW5pdHMKKyMgVXNlIGxlYWRpbmcgMHMgdG8gZW5zdXJlIGFsbCBkaWdpdHMgYXJlIHRoZSBzYW1lIHN0cmluZyBsZW5ndGgsIHRoaXMgcmVzdWx0cworIyBpbiBuaWNlIGxvZyBmaWxlIG5hbWVzIGFuZCBjb2x1bW5hciBkYXQgZmlsZXMuCitCQl9SQU5HRT0iMDQgMDUgMDYgMDcgMDggMDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYiCitQTV9SQU5HRT0iMDQgMDUgMDYgMDcgMDggMDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYiCisKK0RBVEFESVI9ImJiLW1hdHJpeC0kJCIKK0JCX0NNRD0iYml0YmFrZSBjb3JlLWltYWdlLW1pbmltYWwiCitSVU5USU1FX0xPRz0iJERBVEFESVIvYmItbWF0cml4LmRhdCIKKworIyBTZWUgVElNRSgxKSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdGltZSBmb3JtYXQgcGFyYW1ldGVycworIyBUaGUgZm9sbG93aW5nIGFsbCByZXBvcnQgMDogVyBLIHIgcyB0IHcKK1RJTUVfU1RSPSIlZSAlUyAlVSAlUCAlYyAldyAlUiAlRiAlTSAleCIKKworIyBQcmVwYXJlIHRoZSBEQVRBRElSCitta2RpciAkREFUQURJUgoraWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJZWNobyAiRmFpbGVkIHRvIGNyZWF0ZSAkREFUQURJUi4iCisJZXhpdCAxCitmaQorCisjIEFkZCBhIHNpbXBsZSBoZWFkZXIKK2VjaG8gIkJCIFBNICRUSU1FX1NUUiIgPiAkUlVOVElNRV9MT0cKK2ZvciBCQiBpbiAkQkJfUkFOR0U7IGRvCisJZm9yIFBNIGluICRQTV9SQU5HRTsgZG8KKwkJUlVORElSPSIkREFUQURJUi8kQkItJFBNLWJ1aWxkIgorCQlta2RpciAkUlVORElSCisJCUJCX0xPRz0kUlVORElSLyRCQi0kUE0tYml0YmFrZS5sb2cKKwkJZGF0ZQorCQllY2hvICJCQj0kQkIgUE09JFBNIExvZ2dpbmcgdG8gJEJCX0xPRyIKKworCQllY2hvIC1uICIgIFByZXBhcmluZyB0aGUgd29yayBkaXJlY3RvcnkuLi4gIgorCQlybSAtcmYgcHNldWRvZG9uZSB0bXAgc3N0YXRlLWNhY2hlIHRtcC1lZ2xpYmMgJj4gL2Rldi9udWxsCisJCWVjaG8gImRvbmUiCisKKwkJIyBFeHBvcnQgdGhlIHZhcmlhYmxlcyB1bmRlciB0ZXN0IGFuZCBydW4gdGhlIGJpdGJha2UgY29tbWFuZAorCQkjIFN0cmlwIGFueSBsZWFkaW5nIHplcm9lcyBiZWZvcmUgcGFzc2luZyB0byBiaXRiYWtlCisJCWV4cG9ydCBCQl9OVU1CRVJfVEhSRUFEUz0kKGVjaG8gJEJCIHwgc2VkICdzL14wKi8vJykKKwkJZXhwb3J0IFBBUkFMTEVMX01BS0U9Ii1qICQoZWNobyAkUE0gfCBzZWQgJ3MvXjAqLy8nKSIKKwkJL3Vzci9iaW4vdGltZSAtZiAiJEJCICRQTSAkVElNRV9TVFIiIC1hIC1vICRSVU5USU1FX0xPRyAkQkJfQ01EICY+ICRCQl9MT0cKKworCQllY2hvICIgICQodGFpbCAtbjEgJFJVTlRJTUVfTE9HKSIKKwkJY3AgLWEgdG1wL2J1aWxkc3RhdHMgJFJVTkRJUi8kQkItJFBNLWJ1aWxkc3RhdHMKKwlkb25lCitkb25lCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvYmItcGVyZi9idWlsZHN0YXRzLnNoIGIvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYnVpbGRzdGF0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjE1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb250cmliL2JiLXBlcmYvYnVpbGRzdGF0cy5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBERVNDUklQVElPTgorIyBHaXZlbiBhICdidWlsZHN0YXRzJyBwYXRoIChjcmVhdGVkIGJ5IGJpdGJha2Ugd2hlbiBzZXR0aW5nCisjIFVTRVJfQ0xBU1NFUyA/PSAiYnVpbGRzdGF0cyIgb24gbG9jYWwuY29uZikgYW5kIHRhc2sgbmFtZXMsIG91dHB1dHMKKyMgJzx0YXNrPiA8cmVjaXBlPiA8ZWxhcHNlZCB0aW1lPicgZm9yIGFsbCByZWNpcGVzLiBFbGFwc2VkIHRpbWVzIGFyZSBpbgorIyBzZWNvbmRzLCBhbmQgdGFzayBzaG91bGQgYmUgZ2l2ZW4gd2l0aG91dCB0aGUgJ2RvXycgcHJlZml4LgorIworIyBTb21lIHVzZWZ1bCBwaXBlbGluZXMKKyMKKyMgMS4gVGFza3Mgd2l0aCBsYXJnZXN0IGVsYXBzZWQgdGltZXMKKyMgJCBidWlsZHN0YXRzLnNoIC1iIDxidWlsZHN0YXRzPiB8IHNvcnQgLWszIC1uIC1yIHwgaGVhZAorIworIyAyLiBNaW4sIG1heCwgc3VtIHBlciB0YXNrIChpbiBuZWVkcyBHTlUgZGF0YW1hc2gpCisjICQgYnVpbGRzdGF0cy5zaCAtYiA8YnVpbGRzdGF0cz4gfCBkYXRhbWFzaCAtdCcgJyAtZzEgbWluIDMgbWF4IDMgc3VtIDMgfCBzb3J0IC1rNCAtbiAtcgorIworIyBBVVRIT1JTCisjIExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CisjCitCU19ESVI9InRtcC9idWlsZHN0YXRzIgorVEFTS1M9ImNvbXBpbGU6Y29uZmlndXJlOmZldGNoOmluc3RhbGw6cGF0Y2g6cG9wdWxhdGVfbGljOnBvcHVsYXRlX3N5c3Jvb3Q6dW5wYWNrIgorCitmdW5jdGlvbiB1c2FnZSB7CitDTUQ9JChiYXNlbmFtZSAkMCkKK2NhdCA8PEVPTQorVXNhZ2U6ICRDTUQgWy1iIGJ1aWxkc3RhdHNfZGlyXSBbLXQgZG9fdGFza10KKyAgLWIgYnVpbGRzdGF0cyBUaGUgcGF0aCB3aGVyZSB0aGUgZm9sZGVyIHJlc2lkZXMKKyAgICAgICAgICAgICAgICAoZGVmYXVsdDogIiRCU19ESVIiKQorICAtdCB0YXNrcyAgICAgIFRoZSB0YXNrcyB0byBiZSBjb21wdXRlZAorICAgICAgICAgICAgICAgIChkZWZhdWx0OiAiJFRBU0tTIikKKyAgLWggICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlCitFT00KK30KKworIyBQYXJzZSBhbmQgdmFsaWRhdGUgYXJndW1lbnRzCit3aGlsZSBnZXRvcHRzICJiOnQ6aCIgT1BUOyBkbworCWNhc2UgJE9QVCBpbgorCWIpCisJCUJTX0RJUj0iJE9QVEFSRyIKKwkJOzsKKwl0KQorCQlUQVNLUz0iJE9QVEFSRyIKKwkJOzsKKwloKQorCQl1c2FnZQorCQlleGl0IDAKKwkJOzsKKwkqKQorCQl1c2FnZQorCQlleGl0IDEKKwkJOzsKKwllc2FjCitkb25lCisKKyMgRW5zdXJlIHRoZSBidWlsZHN0YXRzIGZvbGRlciBleGlzdHMKK2lmIFsgISAtZCAiJEJTX0RJUiIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiAkQlNfRElSIGRvZXMgbm90IGV4aXN0IgorCXVzYWdlCisJZXhpdCAxCitmaQorCitSRUNJUEVfRklFTEQ9MQorVElNRV9GSUVMRD00CisKK3Rhc2tzPSgke1RBU0tTLy86LyB9KQorZm9yIHRhc2sgaW4gIiR7dGFza3NbQF19IjsgZG8KKyAgICB0YXNrPSJkb18ke3Rhc2t9IgorICAgIGZvciBmaWxlIGluICQoZmluZCAke0JTX0RJUn0gLXR5cGUgZiAtbmFtZSAke3Rhc2t9KTsgZG8KKyAgICAgICAgcmVjaXBlPSQoc2VkIC1uIC1lICIvJHRhc2svcCIgJHtmaWxlfSB8IGN1dCAtZCAnOicgLWYke1JFQ0lQRV9GSUVMRH0pCisgICAgICAgIHRpbWU9JChzZWQgLW4gLWUgIi8kdGFzay9wIiAke2ZpbGV9IHwgY3V0IC1kICc6JyAtZiR7VElNRV9GSUVMRH0gfCBjdXQgLWQgJyAnIC1mMikKKyAgICAgICAgZWNobyAiJHt0YXNrfSAke3JlY2lwZX0gJHt0aW1lfSIKKyAgICBkb25lCitkb25lCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvYmJ2YXJzLnB5IGIvc2NyaXB0cy9jb250cmliL2JidmFycy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODk2ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb250cmliL2JidmFycy5weQpAQCAtMCwwICsxLDE4NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMgQ29weXJpZ2h0IChDKSBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4sIDIwMTAKKworCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQgJ1VzYWdlOiAlcyAtZCBGSUxFTkFNRSBbLWQgRklMRU5BTUVdKiAtbSBNRVRBRElSIFstbSBNQVRBRElSXSonICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKyAgICBwcmludCAnICAtZCBGSUxFTkFNRSAgICAgICAgIGRvY3VtZW50YXRpb24gZmlsZSB0byBzZWFyY2gnCisgICAgcHJpbnQgJyAgLWgsIC0taGVscCAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCcKKyAgICBwcmludCAnICAtbSBNRVRBRElSICAgICAgICAgIG1ldGEgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgcmVjaXBlcycKKyAgICBwcmludCAnICAtdCBGSUxFTkFNRSAgICAgICAgIGRvY3VtZW50YXRpb24gY29uZmlnIGZpbGUgKGZvciBkb2MgdGFncyknCisgICAgcHJpbnQgJyAgLVQgICAgICAgICAgICAgICAgICBPbmx5IGRpc3BsYXkgdmFyaWFibGVzIHdpdGggZG9jIHRhZ3MgKHJlcXVpcmVzIC10KScKKworZGVmIHJlY2lwZV9iYnZhcnMocmVjaXBlKToKKyAgICAnJycgUmV0dXJuIGEgdW5pcXVlIHNldCBvZiBldmVyeSBiYnZhciBlbmNvdW50ZXJlZCBpbiB0aGUgcmVjaXBlICcnJworICAgIHByb2cgPSByZS5jb21waWxlKCJbQS1aX10rIikKKyAgICB2c2V0ID0gc2V0KCkKKyAgICB0cnk6CisgICAgICAgIHIgPSBvcGVuKHJlY2lwZSkKKyAgICBleGNlcHQgSU9FcnJvciBhcyAoZXJybm8sIHN0cmVycm9yKToKKyAgICAgICAgcHJpbnQgJ1dBUk5JTkc6IEZhaWxlZCB0byBvcGVuIHJlY2lwZSAnLCByZWNpcGUKKyAgICAgICAgcHJpbnQgc3RyZXJyb3IKKworICAgIGZvciBsaW5lIGluIHI6CisgICAgICAgICMgU3RyaXAgYW55IGNvbW1lbnRzIGZyb20gdGhlIGxpbmUKKyAgICAgICAgbGluZSA9IGxpbmUucnNwbGl0KCcjJylbMF0KKyAgICAgICAgdnNldCA9IHZzZXQudW5pb24oc2V0KHByb2cuZmluZGFsbChsaW5lKSkpCisgICAgci5jbG9zZSgpCisKKyAgICBiYnZhcnMgPSB7fQorICAgIGZvciB2IGluIHZzZXQ6CisgICAgICAgIGJidmFyc1t2XSA9IDEKKworICAgIHJldHVybiBiYnZhcnMKKworZGVmIGNvbGxlY3RfYmJ2YXJzKG1ldGFkaXIpOgorICAgICcnJyBXYWxrIHRoZSBtZXRhZGlyIGFuZCBjb2xsZWN0IHRoZSBiYnZhcnMgZnJvbSBlYWNoIHJlY2lwZSBmb3VuZCAnJycKKyAgICBiYnZhcnMgPSB7fQorICAgIGZvciByb290LGRpcnMsZmlsZXMgaW4gb3Mud2FsayhtZXRhZGlyKToKKyAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBuYW1lLmZpbmQoIi5iYiIpID49IDA6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiByZWNpcGVfYmJ2YXJzKG9zLnBhdGguam9pbihyb290LG5hbWUpKS5pdGVya2V5cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBiYnZhcnMuaGFzX2tleShrZXkpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJ2YXJzW2tleV0gPSBiYnZhcnNba2V5XSArIDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gMQorICAgIHJldHVybiBiYnZhcnMKKworZGVmIGJidmFyX2lzX2RvY3VtZW50ZWQodmFyLCBkb2NmaWxlcyk6CisgICAgcHJvZyA9IHJlLmNvbXBpbGUoIi4qKCR8W15BLVpfXSklcyhbXkEtWl9dfCQpIiAlICh2YXIpKQorICAgIGZvciBkb2MgaW4gZG9jZmlsZXM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKGRvYykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgKGVycm5vLCBzdHJlcnJvcik6CisgICAgICAgICAgICBwcmludCAnV0FSTklORzogRmFpbGVkIHRvIG9wZW4gZG9jICcsIGRvYworICAgICAgICAgICAgcHJpbnQgc3RyZXJyb3IKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIHByb2cubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZi5jbG9zZSgpCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBiYnZhcl9kb2N0YWcodmFyLCBkb2Njb25mKToKKyAgICBwcm9nID0gcmUuY29tcGlsZSgnXiVzXFtkb2NcXSAqPSAqIiguKikiJyAlICh2YXIpKQorICAgIGlmIGRvY2NvbmYgPT0gIiI6CisgICAgICAgIHJldHVybiAiPyIKKworICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oZG9jY29uZikKKyAgICBleGNlcHQgSU9FcnJvciBhcyAoZXJybm8sIHN0cmVycm9yKToKKyAgICAgICAgcmV0dXJuIHN0cmVycm9yCisKKyAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICBtID0gcHJvZy5zZWFyY2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisKKyAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gIiIKKworZGVmIG1haW4oKToKKyAgICBkb2NmaWxlcyA9IFtdCisgICAgbWV0YWRpcnMgPSBbXQorICAgIGJidmFycyA9IHt9CisgICAgdW5kb2N1bWVudGVkID0gW10KKyAgICBkb2Njb25mID0gIiIKKyAgICBvbmx5ZG9jdGFncyA9IEZhbHNlCisKKyAgICAjIENvbGxlY3QgYW5kIHZhbGlkYXRlIGlucHV0CisgICAgdHJ5OgorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJkOmhtOnQ6VCIsIFsiaGVscCJdKQorICAgIGV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IsIGVycjoKKyAgICAgICAgcHJpbnQgJyVzJyAlIHN0cihlcnIpCisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIGZvciBvLCBhIGluIG9wdHM6CisgICAgICAgIGlmIG8gaW4gKCctaCcsICctLWhlbHAnKToKKyAgICAgICAgICAgIHVzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDApCisgICAgICAgIGVsaWYgbyA9PSAnLWQnOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYSk6CisgICAgICAgICAgICAgICAgZG9jZmlsZXMuYXBwZW5kKGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICdFUlJPUjogZG9jdW1lbnRhdGlvbiBmaWxlICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZScgJSAoYSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgzKQorICAgICAgICBlbGlmIG8gPT0gJy1tJzoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoYSk6CisgICAgICAgICAgICAgICAgbWV0YWRpcnMuYXBwZW5kKGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICdFUlJPUjogbWV0YSBkaXJlY3RvcnkgJXMgaXMgbm90IGEgZGlyZWN0b3J5JyAlIChhKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDQpCisgICAgICAgIGVsaWYgbyA9PSAiLXQiOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYSk6CisgICAgICAgICAgICAgICAgZG9jY29uZiA9IGEKKyAgICAgICAgZWxpZiBvID09ICItVCI6CisgICAgICAgICAgICBvbmx5ZG9jdGFncyA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgInVuaGFuZGxlZCBvcHRpb24iCisKKyAgICBpZiBsZW4oZG9jZmlsZXMpID09IDA6CisgICAgICAgIHByaW50ICdFUlJPUjogbm8gZG9jZmlsZSBzcGVjaWZpZWQnCisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoNSkKKworICAgIGlmIGxlbihtZXRhZGlycykgPT0gMDoKKyAgICAgICAgcHJpbnQgJ0VSUk9SOiBubyBtZXRhZGlyIHNwZWNpZmllZCcKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCg2KQorCisgICAgaWYgb25seWRvY3RhZ3MgYW5kIGRvY2NvbmYgPT0gIiI6CisgICAgICAgIHByaW50ICdFUlJPUjogbm8gZG9jY29uZiBzcGVjaWZpZWQnCisgICAgICAgIHVzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoNykKKworICAgICMgQ29sbGVjdCBhbGwgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhlIHJlY2lwZXMgaW4gdGhlIG1ldGFkaXJzCisgICAgZm9yIG0gaW4gbWV0YWRpcnM6CisgICAgICAgIGZvciBrZXksY250IGluIGNvbGxlY3RfYmJ2YXJzKG0pLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgYmJ2YXJzLmhhc19rZXkoa2V5KToKKyAgICAgICAgICAgICAgICBiYnZhcnNba2V5XSA9IGJidmFyc1trZXldICsgY250CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJidmFyc1trZXldID0gY250CisKKyAgICAjIENoZWNrIGVhY2ggdmFyIGZvciBkb2N1bWVudGF0aW9uCisgICAgdmFybGVuID0gMAorICAgIGZvciB2IGluIGJidmFycy5pdGVya2V5cygpOgorICAgICAgICBpZiBsZW4odikgPiB2YXJsZW46CisgICAgICAgICAgICB2YXJsZW4gPSBsZW4odikKKyAgICAgICAgaWYgbm90IGJidmFyX2lzX2RvY3VtZW50ZWQodiwgZG9jZmlsZXMpOgorICAgICAgICAgICAgdW5kb2N1bWVudGVkLmFwcGVuZCh2KQorICAgIHVuZG9jdW1lbnRlZC5zb3J0KCkKKyAgICB2YXJsZW4gPSB2YXJsZW4gKyAxCisKKyAgICAjIFJlcG9ydCBhbGwgdW5kb2N1bWVudGVkIHZhcmlhYmxlcworICAgIHByaW50ICdGb3VuZCAlZCB1bmRvY3VtZW50ZWQgYmIgdmFyaWFibGVzIChvdXQgb2YgJWQpOicgJSAobGVuKHVuZG9jdW1lbnRlZCksIGxlbihiYnZhcnMpKQorICAgIGhlYWRlciA9ICclcyVzJXMnICUgKHN0cigiVkFSSUFCTEUiKS5sanVzdCh2YXJsZW4pLCBzdHIoIkNPVU5UIikubGp1c3QoNiksIHN0cigiRE9DVEFHIikubGp1c3QoNykpCisgICAgcHJpbnQgaGVhZGVyCisgICAgcHJpbnQgc3RyKCIiKS5sanVzdChsZW4oaGVhZGVyKSwgJz0nKQorICAgIGZvciB2IGluIHVuZG9jdW1lbnRlZDoKKyAgICAgICAgZG9jdGFnID0gYmJ2YXJfZG9jdGFnKHYsIGRvY2NvbmYpCisgICAgICAgIGlmIG5vdCBvbmx5ZG9jdGFncyBvciBub3QgZG9jdGFnID09ICIiOgorICAgICAgICAgICAgcHJpbnQgJyVzJXMlcycgJSAodi5sanVzdCh2YXJsZW4pLCBzdHIoYmJ2YXJzW3ZdKS5sanVzdCg2KSwgZG9jdGFnKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvYnVpbGQtcGVyZi10ZXN0LnNoIGIvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGQ3ODg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb250cmliL2J1aWxkLXBlcmYtdGVzdC5zaApAQCAtMCwwICsxLDM2OSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgVGhpcyBzY3JpcHQgcnVucyBhIHNlcmllcyBvZiB0ZXN0cyAgKHdpdGggYW5kIHdpdGhvdXQgc3N0YXRlKSBhbmQgcmVwb3J0cyBidWlsZCB0aW1lIChhbmQgdG1wLyBzaXplKQorIyAKKyMgQnVpbGQgcGVyZm9ybWFuY2UgdGVzdCBzY3JpcHQKKyMKKyMgQ29weXJpZ2h0IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworIworIyBBVVRIT1JTOgorIyBTdGVmYW4gU3RhbmFjYXIgPHN0ZWZhbnguc3RhbmFjYXJAaW50ZWwuY29tPgorCisKK01FPSQoYmFzZW5hbWUgJDApCisKKyMKKyMgdXNhZ2UgYW5kIHNldHVwCisjCisKK3VzYWdlICgpIHsKK2NhdCA8PCBFT1QKK1VzYWdlOiAkTUUgWy1oXQorICAgICAgICRNRSBbLWMgPGNvbW1pdD5dIFstdl0gWy1tIDx2YWw+XSBbLWogPHZhbD5dIFstdCA8dmFsPl0gWy1pIDxpbWFnZS1uYW1lPl0gWy1kIDxwYXRoPl0KK09wdGlvbnM6CisgICAgICAgIC1oCisgICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisgICAgICAgIC1jIDxjb21taXQ+CisgICAgICAgICAgICAgICAgZ2l0IGNoZWNrb3V0IDxjb21taXQ+IGJlZm9yZSBhbnl0aGluZyBlbHNlCisgICAgICAgIC12CisgICAgICAgICAgICAgICAgU2hvdyBiaXRiYWtlIG91dHB1dCwgZG9uJ3QgcmVkaXJlY3QgaXQgdG8gYSBsb2cuCisgICAgICAgIC1tIDxtYWNoaW5lPgorICAgICAgICAgICAgICAgIFZhbHVlIGZvciBNQUNISU5FLiBEZWZhdWx0IGlzIHFlbXV4ODYuCisgICAgICAgIC1qIDx2YWw+CisgICAgICAgICAgICAgICAgVmFsdWUgZm9yIFBBUkFMTEVMX01BS0UuIERlZmF1bHQgaXMgOC4gCisgICAgICAgIC10IDx2YWw+CisgICAgICAgICAgICAgICAgVmFsdWUgZm9yIEJCX05VTUJFUl9USFJFQURTLiBEZWZhdWx0IGlzIDguCisgICAgICAgIC1pIDxpbWFnZS1uYW1lPgorICAgICAgICAgICAgICAgIEluc3RlYWQgb2YgdGltaW5nIGFnYWluc3QgY29yZS1pbWFnZS1zYXRvLCB1c2UgPGltYWdlLW5hbWU+CisgICAgICAgIC1kIDxwYXRoPgorICAgICAgICAgICAgICAgIFVzZSA8cGF0aD4gYXMgRExfRElSCisgICAgICAgIC1wIDxnaXRoYXNoPgorICAgICAgICAgICAgICAgIENoZXJyeSBwaWNrIGdpdGhhc2ggb250byB0aGUgY29tbWl0CisgICAgICAgICAgICAgICAgCitOb3RlOiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG11c3QgYmUgaW5zaWRlIGEgcG9reSBnaXQgY2xvbmUuCisgCitFT1QKK30KKworCitpZiBjbG9uZWRpcj0kKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKTsgdGhlbgorICAgICAgICBjZCAkY2xvbmVkaXIKK2Vsc2UKKyAgICAgICAgZWNobyAiVGhlIGN1cnJlbnQgd29ya2luZyBkaXIgZG9lc24ndCBzZWVtIHRvIGJlIGEgcG9reSBnaXQgY2xvbmUuIFBsZWFzZSBjZCB0aGVyZSBiZWZvcmUgcnVubmluZyAkTUUiCisgICAgICAgIGV4aXQgMQorZmkKKworSU1BR0U9ImNvcmUtaW1hZ2Utc2F0byIKK3ZlcmJvc2U9MAorZGxkaXI9Citjb21taXQ9CitwbWFrZT0KK2NoZXJyeXBpY2tzPQord2hpbGUgZ2V0b3B0cyAiaHZjOm06ajp0Omk6ZDpwOiIgb3B0OyBkbworICAgICAgICBjYXNlICRvcHQgaW4KKyAgICAgICAgICAgICAgICBoKSAgICAgIHVzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgdikgICAgICB2ZXJib3NlPTEKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgYykgICAgICBjb21taXQ9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBtKSAgICAgIGV4cG9ydCBNQUNISU5FPSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgaikgICAgICBwbWFrZT0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIHQpICAgICAgZXhwb3J0IEJCX05VTUJFUl9USFJFQURTPSRPUFRBUkcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgaSkgICAgICBJTUFHRT0kT1BUQVJHCisgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGQpICAgICAgZGxkaXI9JE9QVEFSRworICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBwKSAgICAgIGNoZXJyeXBpY2tzPSIkY2hlcnJ5cGlja3MgJE9QVEFSRyIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKikgICAgICB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgICAgICAgICA7OyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZXNhYworZG9uZQorCisKKyNkcm9wIGNhY2hlZCBjcmVkZW50aWFscyBhbmQgdGVzdCBmb3Igc3VkbyBhY2Nlc3Mgd2l0aG91dCBhIHBhc3N3b3JkCitzdWRvIC1rIC1uIGxzID4gL2Rldi9udWxsIDI+JjEKK3JlcXBhc3M9JD8KK2lmIFsgJHJlcXBhc3MgLW5lIDAgXTsgdGhlbgorICAgIGVjaG8gIlRoZSBzY3JpcHQgcmVxdWlyZXMgc3VkbyBhY2Nlc3MgdG8gZHJvcCBjYWNoZXMgYmV0d2VlbiBidWlsZHMgKGVjaG8gMyA+IC9wcm9jL3N5cy92bS9kcm9wX2NhY2hlcykiCisgICAgcmVhZCAtcyAtcCAiUGxlYXNlIGVudGVyIHlvdXIgc3VkbyBwYXNzd29yZDogIiBwYXNzCisgICAgZWNobworZmkKKworaWYgWyAtbiAiJGNvbW1pdCIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiZ2l0IGNoZWNrb3V0IC1mICRjb21taXQiCisgICAgICAgICAgICBnaXQgcHVsbCA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICBnaXQgY2hlY2tvdXQgLWYgJGNvbW1pdCB8fCBleGl0IDEKKyAgICAgICAgICAgIGdpdCBwdWxsID4gL2Rldi9udWxsIDI+JjEKK2ZpCisKK2lmIFsgLW4gIiRjaGVycnlwaWNrcyIgXTsgdGhlbgorICAgIGZvciBjIGluICRjaGVycnlwaWNrczsgZG8KKyAgICAgICAgZ2l0IGNoZXJyeS1waWNrICRjCisgICAgZG9uZQorZmkKKworcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICB8fCBleGl0IDEKK09VVERJUj0iJGNsb25lZGlyL2J1aWxkLXBlcmYtdGVzdC9yZXN1bHRzLSRyZXYtYGRhdGUgIislWSVtJWQlSCVNJVMiYCIKK0JVSUxERElSPSIkT1VURElSL2J1aWxkIgorcmVzdWx0c2ZpbGU9IiRPVVRESVIvcmVzdWx0cy5sb2ciCitiYm91dHB1dD0iJE9VVERJUi9iaXRiYWtlLmxvZyIKK215b3V0cHV0PSIkT1VURElSL291dHB1dC5sb2ciCitnbG9iYWxyZXM9IiRjbG9uZWRpci9idWlsZC1wZXJmLXRlc3QvZ2xvYmFscmVzLmxvZyIKKworbWtkaXIgLXAgJE9VVERJUiB8fCBleGl0IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitsb2cgKCkgeworICAgIGxvY2FsIG1zZz0iJDEiCisgICAgZWNobyAiYGRhdGVgOiAkbXNnIiB8IHRlZSAtYSAkbXlvdXRwdXQKK30KKworCisjCisjIENvbmZpZyBzdHVmZgorIworCiticmFuY2g9YGdpdCBicmFuY2ggMj4mMSB8IGdyZXAgIl4qICIgfCB0ciAtZCAiKiAiYAorZ2l0Y29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAgfHwgZXhpdCAxCitsb2cgIlJ1bm5pbmcgb24gJGJyYW5jaDokZ2l0Y29tbWl0IgorCitzb3VyY2UgLi9vZS1pbml0LWJ1aWxkLWVudiAkT1VURElSL2J1aWxkID4vZGV2L251bGwgfHwgZXhpdCAxCitjZCAkT1VURElSL2J1aWxkCisKK1sgLW4gIiRNQUNISU5FIiBdIHx8IGV4cG9ydCBNQUNISU5FPSJxZW11eDg2IgorWyAtbiAiJEJCX05VTUJFUl9USFJFQURTIiBdIHx8IGV4cG9ydCBCQl9OVU1CRVJfVEhSRUFEUz0iOCIKKworaWYgWyAtbiAiJHBtYWtlIiBdOyB0aGVuCisgICAgICAgIGV4cG9ydCBQQVJBTExFTF9NQUtFPSItaiAkcG1ha2UiCitlbHNlCisgICAgICAgIGV4cG9ydCBQQVJBTExFTF9NQUtFPSItaiA4IgorZmkKKworaWYgWyAtbiAiJGRsZGlyIiBdOyB0aGVuCisgICAgZWNobyAiRExfRElSID0gXCIkZGxkaXJcIiIgPj4gY29uZi9sb2NhbC5jb25mCitlbHNlCisgICAgZWNobyAiRExfRElSID0gXCIkY2xvbmVkaXIvYnVpbGQtcGVyZi10ZXN0L2Rvd25sb2Fkc1wiIiA+PiBjb25mL2xvY2FsLmNvbmYKK2ZpCisKKyMgU29tZXRpbWVzIEkndmUgbm90aWNlZCBiaWcgZGlmZmVyZW5jZXMgaW4gdGltaW5ncyBmb3IgdGhlIHNhbWUgY29tbWl0LCBvbiB0aGUgc2FtZSBtYWNoaW5lCisjIERpc2FibGluZyB0aGUgbmV0d29yayBzYW5pdHkgY2hlY2sgaGVscHMgYSBiaXQgKGJlY2F1c2Ugb2YgbXkgY3JhcHB5IG5ldHdvcmsgY29ubmVjdGlvbiBhbmQvb3IgcHJveHkpCitlY2hvICJDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyA9XCJcIiIgPj4gY29uZi9sb2NhbC5jb25mCisKKworIworIyBGdW5jdGlvbnMKKyMKKworZGVjbGFyZSAtYSBUSU1FUwordGltZV9jb3VudD0wCitkZWNsYXJlIC1hIFNJWkVTCitzaXplX2NvdW50PTAKKworYmJ0aW1lICgpIHsKKyAgICBsb2NhbCBhcmc9IiRAIgorICAgIGxvZyAiICAgVGltaW5nOiBiaXRiYWtlICR7YXJnfSIKKworICAgIGlmIFsgJHZlcmJvc2UgLWVxIDAgXTsgdGhlbiAKKyAgICAgICAgL3Vzci9iaW4vdGltZSAtdiAtbyAkcmVzdWx0c2ZpbGUgYml0YmFrZSAke2FyZ30gPj4gJGJib3V0cHV0CisgICAgZWxzZQorICAgICAgICAvdXNyL2Jpbi90aW1lIC12IC1vICRyZXN1bHRzZmlsZSBiaXRiYWtlICR7YXJnfQorICAgIGZpCisgICAgcmV0PSQ/CisgICAgaWYgWyAkcmV0IC1lcSAwIF07IHRoZW4KKyAgICAgICAgdD1gZ3JlcCB3YWxsICRyZXN1bHRzZmlsZSB8IHNlZCAncy8uKm06c3MpOiAvLydgCisgICAgICAgIGxvZyAiICAgVElNRTogJHQiCisgICAgICAgIFRJTUVTWygoIHRpbWVfY291bnQrKyApKV09IiR0IgorICAgIGVsc2UKKyAgICAgICAgbG9nICJFUlJPUjogZXhpdCBzdGF0dXMgd2FzIG5vbi16ZXJvLCB3aWxsIHJlcG9ydCB0aW1lIGFzIDAuIgorICAgICAgICBUSU1FU1soKCB0aW1lX2NvdW50KysgKSldPSIwIgorICAgIGZpCisgICAgCisgICAgI3RpbWUgYnkgZGVmYXVsdCBvdmVyd3JpdGVzIHRoZSBvdXRwdXQgZmlsZSBhbmQgd2UgIHdhbnQgdG8ga2VlcCB0aGUgcmVzdWx0cworICAgICNpdCBoYXMgYW4gYXBwZW5kIG9wdGlvbiBidXQgSSBkb24ndCB3YW50IHRvIGNsb2JiZXIgdGhlIHJlc3VsdHMgaW4gdGhlIHNhbWUgZmlsZQorICAgIGk9YGxzICRPVVRESVIvcmVzdWx0cy5sb2cqIHx3YyAtbGAKKyAgICBtdiAkcmVzdWx0c2ZpbGUgIiR7cmVzdWx0c2ZpbGV9LiR7aX0iCisgICAgbG9nICJNb3JlIHN0YXRzIGNhbiBiZSBmb3VuZCBpbiAke3Jlc3VsdHNmaWxlfS4ke2l9IiAgICAKK30KKworI3dlIGRvbid0IHRpbWUgYml0YmFrZSBoZXJlCitiYm5vdGltZSAoKSB7CisgICAgbG9jYWwgYXJnPSIkQCIKKyAgICBsb2cgIiAgIFJ1bm5pbmc6IGJpdGJha2UgJHthcmd9IgorICAgIGlmIFsgJHZlcmJvc2UgLWVxIDAgXTsgdGhlbgorICAgICAgICBiaXRiYWtlICR7YXJnfSA+PiAkYmJvdXRwdXQKKyAgICBlbHNlCisgICAgICAgIGJpdGJha2UgJHthcmd9CisgICAgZmkKKyAgICByZXQ9JD8KKyAgICBpZiBbICRyZXQgLWVxIDAgXTsgdGhlbgorICAgICAgICBsb2cgIiAgIEZpbmlzaGVkIGJpdGJha2UgJHthcmd9IgorICAgIGVsc2UKKyAgICAgICAgbG9nICJFUlJPUjogZXhpdCBzdGF0dXMgd2FzIG5vbi16ZXJvLiBFeGl0Li4iCisgICAgICAgIGV4aXQgJHJldAorICAgIGZpCisKK30KKworZG9fcm10bXAoKSB7CisgICAgbG9nICIgICBSZW1vdmluZyB0bXAiCisgICAgcm0gLXJmIGJpdGJha2UubG9jayBwc2V1ZG9kb25lIGNvbmYvc2FuaXR5X2luZm8gY2FjaGUgdG1wCit9Citkb19ybXNzdGF0ZSAoKSB7CisgICAgbG9nICIgICBSZW1vdmluZyBzc3RhdGUtY2FjaGUiCisgICAgcm0gLXJmIHNzdGF0ZS1jYWNoZQorfQorZG9fc3luYyAoKSB7CisgICAgbG9nICIgICBTeW5jaW5nIGFuZCBkcm9wcGluZyBjYWNoZXMiCisgICAgc3luYzsgc3luYworICAgIGlmIFsgJHJlcXBhc3MgLWVxIDAgXTsgdGhlbgorICAgICAgICBzdWRvIHNoIC1jICJlY2hvIDMgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMiCisgICAgZWxzZQorICAgICAgICBlY2hvICIkcGFzcyIgfCBzdWRvIC1TIHNoIC1jICJlY2hvIDMgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMiCisgICAgICAgIGVjaG8KKyAgICBmaQorICAgIHNsZWVwIDMKK30KKword3JpdGVfcmVzdWx0cygpIHsKKyAgICBlY2hvIC1uICJgdW5hbWUgLW5gLCRicmFuY2g6JGdpdGNvbW1pdCxgZ2l0IGRlc2NyaWJlYCwiID4+ICRnbG9iYWxyZXMKKyAgICBmb3IgaSBpbiAiJHtUSU1FU1tAXX0iOyBkbworICAgICAgICBlY2hvIC1uICIkaSwiID4+ICRnbG9iYWxyZXMKKyAgICBkb25lCisgICAgZm9yIGkgaW4gIiR7U0laRVNbQF19IjsgZG8KKyAgICAgICAgZWNobyAtbiAiJGksIiA+PiAkZ2xvYmFscmVzCisgICAgZG9uZQorICAgIGVjaG8gPj4gJGdsb2JhbHJlcworICAgIHNlZCAtaSAnJCBzLywkLy8nICRnbG9iYWxyZXMKK30KKworIyMjIworCisjCisjIFRlc3QgMQorIyBNZWFzdXJlOiBXYWxsIGNsb2NrIG9mICJiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0byIgYW5kIHNpemUgb2YgdG1wL2RpciAody9vIHJtX3dvcmsgYW5kIHcvIHJtX3dvcmspCisjIFByZTogRG93bmxvYWRlZCBzb3VyY2VzLCBubyBzc3RhdGUKKyMgU3RlcHM6CisjICAgICBQYXJ0MToKKyMgICAgICAgIC0gZmV0Y2hhbGwgCisjICAgICAgICAtIGNsZWFuIGJ1aWxkIGRpcgorIyAgICAgICAgLSB0aW1lIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvCisjICAgICAgICAtIGNvbGxlY3QgZGF0YQorIyAgICAgUGFydDI6CisjICAgICAgICAtIGJpdGJha2UgdmlydHVhbC9rZXJuZWwgLWMgY2xlYW5zc3RhdGUKKyMgICAgICAgIC0gdGltZSBiaXRiYWtlIHZpcnR1YWwva2VybmVsCisjICAgICBQYXJ0MzoKKyMgICAgICAgIC0gYWRkIElOSEVSSVQgdG8gbG9jYWwuY29uZgorIyAgICAgICAgLSBjbGVhbiBidWlsZCBkaXIKKyMgICAgICAgIC0gYnVpbGQKKyMgICAgICAgIC0gcmVwb3J0IHNpemUsIHJlbW92ZSBJTkhFUklUCisKK3Rlc3QxX3AxICgpIHsKKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAxLCBwYXJ0IDEvMzogTWVhc3VyZSB3YWxsIGNsb2NrIG9mIGJpdGJha2UgJElNQUdFIGFuZCBzaXplIG9mIHRtcC8gZGlyIgorICAgIGJibm90aW1lICRJTUFHRSAtYyBmZXRjaGFsbAorICAgIGRvX3JtdG1wCisgICAgZG9fcm1zc3RhdGUKKyAgICBkb19zeW5jCisgICAgYmJ0aW1lICRJTUFHRQorICAgIHM9YGR1IC1zIHRtcCB8IHNlZCAncy90bXAvLycgfCBzZWQgJ3MvWyBcdF0qJC8vJ2AKKyAgICBTSVpFU1soKCBzaXplX2NvdW50KysgKSldPSIkcyIKKyAgICBsb2cgIlNJWkUgb2YgdG1wIGRpciBpczogJHMiCisgICAgbG9nICJCdWlsZHN0YXRzIGFyZSBzYXZlZCBpbiAkT1VURElSL2J1aWxkc3RhdHMtdGVzdDEiCisgICAgbXYgdG1wL2J1aWxkc3RhdHMgJE9VVERJUi9idWlsZHN0YXRzLXRlc3QxCit9CisKKwordGVzdDFfcDIgKCkgeworICAgIGxvZyAiUnVubmluZyBUZXN0IDEsIHBhcnQgMi8zOiBiaXRiYWtlIHZpcnR1YWwva2VybmVsIC1jIGNsZWFuc3N0YXRlIGFuZCB0aW1lIGJpdGJha2UgdmlydHVhbC9rZXJuZWwiCisgICAgYmJub3RpbWUgdmlydHVhbC9rZXJuZWwgLWMgY2xlYW5zc3RhdGUKKyAgICBkb19zeW5jCisgICAgYmJ0aW1lIHZpcnR1YWwva2VybmVsCit9CisKK3Rlc3QxX3AzICgpIHsKKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAxLCBwYXJ0IDMvMzogQnVpbGQgJElNQUdFIHcvbyBzc3RhdGUgYW5kIHJlcG9ydCBzaXplIG9mIHRtcC9kaXIgd2l0aCBybV93b3JrIGVuYWJsZWQiCisgICAgZWNobyAiSU5IRVJJVCArPSBcInJtX3dvcmtcIiIgPj4gY29uZi9sb2NhbC5jb25mCisgICAgZG9fcm10bXAKKyAgICBkb19ybXNzdGF0ZQorICAgIGRvX3N5bmMKKyAgICBiYnRpbWUgJElNQUdFCisgICAgc2VkIC1pICdzL0lOSEVSSVQgKz0gXCJybV93b3JrXCIvLycgY29uZi9sb2NhbC5jb25mCisgICAgcz1gZHUgLXMgdG1wIHwgc2VkICdzL3RtcC8vJyB8IHNlZCAncy9bIFx0XSokLy8nYAorICAgIFNJWkVTWygoIHNpemVfY291bnQrKyApKV09IiRzIgorICAgIGxvZyAiU0laRSBvZiB0bXAgZGlyIGlzOiAkcyIKKyAgICBsb2cgIkJ1aWxkc3RhdHMgYXJlIHNhdmVkIGluICRPVVRESVIvYnVpbGRzdGF0cy10ZXN0MTMiCisgICAgbXYgdG1wL2J1aWxkc3RhdHMgJE9VVERJUi9idWlsZHN0YXRzLXRlc3QxMworfQorCisKKyMKKyMgVGVzdCAyCisjIE1lYXN1cmU6IFdhbGwgY2xvY2sgb2YgImJpdGJha2UgY29yZS1pbWFnZS1zYXRvIiBhbmQgc2l6ZSBvZiB0bXAvZGlyCisjIFByZTogcG9wdWxhdGVkIHNzdGF0ZSBjYWNoZQorCit0ZXN0MiAoKSB7CisgICAgIyBBc3N1bWluZyB0ZXN0IDEgaGFzIHJ1bgorICAgIGxvZyAiUnVubmluZyBUZXN0IDI6IE1lYXN1cmUgd2FsbCBjbG9jayBvZiBiaXRiYWtlICRJTUFHRSAtYyByb290ZnMgd2l0aCBzc3RhdGUiCisgICAgZG9fcm10bXAKKyAgICBkb19zeW5jCisgICAgYmJ0aW1lICRJTUFHRSAtYyByb290ZnMKK30KKworCisjIFRlc3QgMworIyBwYXJzaW5nIHRpbWUgbWV0cmljcworIworIyAgU3RhcnQgd2l0aAorIyAgIGkpICJybSAtcmYgdG1wL2NhY2hlOyB0aW1lIGJpdGJha2UgLXAiCisjICBpaSkgInJtIC1yZiB0bXAvY2FjaGUvZGVmYXVsdC1nbGliYy87IHRpbWUgYml0YmFrZSAtcCIKKyMgaWlpKSAidGltZSBiaXRiYWtlIC1wIgorCisKK3Rlc3QzICgpIHsKKyAgICBsb2cgIlJ1bm5pbmcgVGVzdCAzOiBQYXJzaW5nIHRpbWUgbWV0cmljcyAoYml0YmFrZSAtcCkiCisgICAgbG9nICIgICBSZW1vdmluZyB0bXAvY2FjaGUgJiYgY2FjaGUiCisgICAgcm0gLXJmIHRtcC9jYWNoZSBjYWNoZQorICAgIGJidGltZSAtcAorICAgIGxvZyAiICAgUmVtb3ZpbmcgdG1wL2NhY2hlL2RlZmF1bHQtZ2xpYmMvIgorICAgIHJtIC1yZiB0bXAvY2FjaGUvZGVmYXVsdC1nbGliYy8KKyAgICBiYnRpbWUgLXAKKyAgICBiYnRpbWUgLXAKK30KKworCisKKyMgUlVOIQorCit0ZXN0MV9wMQordGVzdDFfcDIKK3Rlc3QxX3AzCit0ZXN0MgordGVzdDMKKworIyBpZiB3ZSBnb3QgdGlsIGhlcmUgd3JpdGUgdG8gZ2xvYmFsIHJlc3VsdHMKK3dyaXRlX3Jlc3VsdHMKKworbG9nICJBbGwgZG9uZSwgY2xlYW5pbmcgdXAuLi4iCisKK2RvX3JtdG1wCitkb19ybXNzdGF0ZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb250cmliL2RkaW1hZ2UgYi9zY3JpcHRzL2NvbnRyaWIvZGRpbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTAzZjExCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb250cmliL2RkaW1hZ2UKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9zaAorCisjIERlZmF1bHQgdG8gYXZvaWRpbmcgdGhlIGZpcnN0IHR3byBkaXNrcyBvbiB0eXBpY2FsIExpbnV4IGFuZCBNYWMgT1MgaW5zdGFsbHMKKyMgQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSA6LSkKK0JMQUNLTElTVF9ERVZJQ0VTPSIvZGV2L3NkYSAvZGV2L3NkYiAvZGV2L2Rpc2sxIC9kZXYvZGlzazIiCisKKyMgMU1CIGJsb2Nrc2l6ZQorQkxPQ0tTSVpFPTEwNDg1NzYKKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQoYmFzZW5hbWUgJDApIElNQUdFIERFVklDRSIKK30KKworaW1hZ2VfZGV0YWlscygpIHsKKwlJTUc9JDEKKwllY2hvICJJbWFnZSBkZXRhaWxzIgorCWVjaG8gIj09PT09PT09PT09PT0iCisJZWNobyAiICAgIGltYWdlOiAkKGJhc2VuYW1lICRJTUcpIgorCSMgc3RhdCBmb3JtYXQgaXMgZGlmZmVyZW50IG9uIE1hYyBPUyBhbmQgTGludXgKKwlpZiBbICIkKHVuYW1lKSIgPSAiRGFyd2luIiBdOyB0aGVuCisJCWVjaG8gIiAgICAgc2l6ZTogJChzdGF0IC1MIC1mICcleiBieXRlcycgJElNRykiCisJCWVjaG8gIiBtb2RpZmllZDogJChzdGF0IC1MIC1mICclU20nICRJTUcpIgorCWVsc2UKKwkJZWNobyAiICAgICBzaXplOiAkKHN0YXQgLUwgLWMgJyVzIGJ5dGVzJyAkSU1HKSIKKwkJZWNobyAiIG1vZGlmaWVkOiAkKHN0YXQgLUwgLWMgJyV5JyAkSU1HKSIKKwlmaQorCWVjaG8gIiAgICAgdHlwZTogJChmaWxlIC1MIC1iICRJTUcpIgorCWVjaG8gIiIKK30KKworZGV2aWNlX2RldGFpbHMoKSB7CisJREVWPSQxCisJQkxPQ0tfU0laRT01MTIKKworCWVjaG8gIkRldmljZSBkZXRhaWxzIgorCWVjaG8gIj09PT09PT09PT09PT09IgorCisJIyBDb2xsZWN0IGRpc2sgaW5mbyB1c2luZyBkaXNrdXRpbCBvbiBNYWMgT1MKKwlpZiBbICIkKHVuYW1lKSIgPSAiRGFyd2luIiBdOyB0aGVuCisJCWRpc2t1dGlsIGluZm8gJERFVklDRSB8IGVncmVwICIoRGV2aWNlIE5vZGV8TWVkaWEgTmFtZXxUb3RhbCBTaXplKSIKKwkJcmV0dXJuCisJZmkKKworCSMgRGVmYXVsdCAvIExpbnV4IGluZm9ybWF0aW9uIGNvbGxlY3Rpb24KKwllY2hvICIgIGRldmljZTogJERFVklDRSIKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL3ZlbmRvciIgXTsgdGhlbgorCQllY2hvICIgIHZlbmRvcjogJChjYXQgL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS92ZW5kb3IpIgorCWVsc2UKKwkJZWNobyAiICB2ZW5kb3I6IFVOS09XTiIKKwlmaQorCWlmIFsgLWYgIi9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvbW9kZWwiIF07IHRoZW4KKwkJZWNobyAiICAgbW9kZWw6ICQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvbW9kZWwpIgorCWVsc2UKKwkJZWNobyAiICAgbW9kZWw6IFVOS05PV04iCisJZmkKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvc2l6ZSIgXTsgdGhlbgorCQllY2hvICIgICAgc2l6ZTogJCgoJChjYXQgL3N5cy9jbGFzcy9ibG9jay8kREVWL3NpemUpICogJEJMT0NLX1NJWkUpKSBieXRlcyIKKwllbHNlCisJCWVjaG8gIiAgICBzaXplOiBVTktOT1dOIgorCWZpCisJZWNobyAiIgorfQorCitpZiBbICQjIC1uZSAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworSU1BR0U9JDEKK0RFVklDRT0kMgorCitpZiBbICEgLWUgIiRJTUFHRSIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBJbWFnZSAkSU1BR0UgZG9lcyBub3QgZXhpc3QiCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKKworZm9yIGkgaW4gJHtCTEFDS0xJU1RfREVWSUNFU307IGRvCisJaWYgWyAiJGkiID0gIiRERVZJQ0UiIF07IHRoZW4KKwkJZWNobyAiRVJST1I6IERldmljZSAkREVWSUNFIGlzIGJsYWNrbGlzdGVkIgorCQlleGl0IDEKKwlmaQorZG9uZQorCitpZiBbICEgLXcgIiRERVZJQ0UiIF07IHRoZW4KKwllY2hvICJFUlJPUjogRGV2aWNlICRERVZJQ0UgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHdyaXRhYmxlIgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpbWFnZV9kZXRhaWxzICRJTUFHRQorZGV2aWNlX2RldGFpbHMgJChiYXNlbmFtZSAkREVWSUNFKQorCitwcmludGYgIldyaXRlICRJTUFHRSB0byAkREVWSUNFIFt5L05dPyAiCityZWFkIFJFU1BPTlNFCitpZiBbICIkUkVTUE9OU0UiICE9ICJ5IiBdOyB0aGVuCisJZWNobyAiV3JpdGUgYWJvcnRlZCIKKwlleGl0IDAKK2ZpCisKK2VjaG8gIldyaXRpbmcgaW1hZ2UuLi4iCitkZCBpZj0iJElNQUdFIiBvZj0iJERFVklDRSIgYnM9IiRCTE9DS1NJWkUiCitzeW5jCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wgYi9zY3JpcHRzL2NvbnRyaWIvZGlhbG9nLXBvd2VyLWNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzU1MGVhNQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29udHJpYi9kaWFsb2ctcG93ZXItY29udHJvbApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKyMKKyMgU2ltcGxlIHNjcmlwdCB0byBzaG93IGEgbWFudWFsIHBvd2VyIHByb21wdCBmb3Igd2hlbiB5b3Ugd2FudCB0byB1c2UKKyMgYXV0b21hdGVkIGhhcmR3YXJlIHRlc3Rpbmcgd2l0aCB0ZXN0aW1hZ2UuYmJjbGFzcyBidXQgeW91IGRvbid0IGhhdmUgYQorIyB3ZWItZW5hYmxlZCBwb3dlciBzdHJpcCBvciBzaW1pbGFyIHRvIGRvIHRoZSBwb3dlciBvbi9vZmYvY3ljbGUuCisjCisjIFlvdSBjYW4gZW5hYmxlIGl0IGJ5IGVuYWJsaW5nIHRlc3RpbWFnZSAoc2VlIHRoZSBZb2N0byBQcm9qZWN0CisjIERldmVsb3BtZW50IG1hbnVhbCAiUGVyZm9ybWluZyBBdXRvbWF0ZWQgUnVudGltZSBUZXN0aW5nIiBzZWN0aW9uKQorIyBhbmQgc2V0dGluZyB0aGUgZm9sbG93aW5nIGluIHlvdXIgbG9jYWwuY29uZjoKKyMKKyMgVEVTVF9QT1dFUkNPTlRST0xfQ01EID0gIiR7Q09SRUJBU0V9L3NjcmlwdHMvY29udHJpYi9kaWFsb2ctcG93ZXItY29udHJvbCIKKyMKKworUFJPTVBUPSIiCit3aGlsZSB0cnVlOyBkbworICAgIGNhc2UgJDEgaW4KKyAgICAgICAgb24pCisgICAgICAgICAgICBQUk9NUFQ9IlBsZWFzZSB0dXJuIGRldmljZSBwb3dlciBvbiI7OworICAgICAgICBvZmYpCisgICAgICAgICAgICBQUk9NUFQ9IlBsZWFzZSB0dXJuIGRldmljZSBwb3dlciBvZmYiOzsKKyAgICAgICAgY3ljbGUpCisgICAgICAgICAgICBQUk9NUFQ9IlBsZWFzZSBjbGljayBEb25lLCB0aGVuIHR1cm4gdGhlIGRldmljZSBwb3dlciBvZmYgdGhlbiBvbiI7OworICAgICAgICAiIikKKyAgICAgICAgICAgIGJyZWFrOzsKKyAgICBlc2FjCisgICAgc2hpZnQKK2RvbmUKKworaWYgWyAiJFBST01QVCIgPSAiIiBdIDsgdGhlbgorICAgIGVjaG8gIkVSUk9SOiBubyBwb3dlciBhY3Rpb24gc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZSIKKyAgICBleGl0IDIKK2ZpCisKK2lmIFsgImB3aGljaCBrZGlhbG9nIDI+L2Rldi9udWxsYCIgIT0gIiIgXSA7IHRoZW4KKyAgICBESUFMT0dVVElMPSJrZGlhbG9nIgorZWxpZiBbICJgd2hpY2ggemVuaXR5IDI+L2Rldi9udWxsYCIgIT0gIiIgXSA7IHRoZW4KKyAgICBESUFMT0dVVElMPSJ6ZW5pdHkiCitlbHNlCisgICAgZWNobyAiRVJST1I6IGNvdWxkbid0IGZpbmQgcHJvZ3JhbSB0byBkaXNwbGF5IGEgbWVzc2FnZSwgaW5zdGFsbCBrZGlhbG9nIG9yIHplbml0eSIKKyAgICBleGl0IDMKK2ZpCisKK2lmIFsgIiRESUFMT0dVVElMIiA9ICJrZGlhbG9nIiBdIDsgdGhlbgorICAgIGtkaWFsb2cgLS15ZXNubyAiJFBST01QVCIgLS10aXRsZSAiVGVzdEltYWdlIFBvd2VyIENvbnRyb2wiIC0teWVzLWxhYmVsICJEb25lIiAtLW5vLWxhYmVsICJDYW5jZWwgdGVzdCIKK2VsaWYgWyAiJERJQUxPR1VUSUwiID0gInplbml0eSIgXSA7IHRoZW4KKyAgICB6ZW5pdHkgLS1xdWVzdGlvbiAtLXRleHQ9IiRQUk9NUFQiIC0tdGl0bGU9IlRlc3RJbWFnZSBQb3dlciBDb250cm9sIiAtLW9rLWxhYmVsPSJEb25lIiAtLWNhbmNlbC1sYWJlbD0iQ2FuY2VsIHRlc3QiCitmaQorCitpZiBbICIkPyIgIT0gIjAiIF0gOyB0aGVuCisgICAgZWNobyAiVXNlciBjYW5jZWxsZWQgdGVzdCBhdCBwb3dlciBwcm9tcHQiCisgICAgZXhpdCAxCitmaQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvZG9jdW1lbnRhdGlvbi1hdWRpdC5zaCBiL3NjcmlwdHMvY29udHJpYi9kb2N1bWVudGF0aW9uLWF1ZGl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxNDRhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvZG9jdW1lbnRhdGlvbi1hdWRpdC5zaApAQCAtMCwwICsxLDk0IEBACisjIS9iaW4vYmFzaAorIworIyBQZXJmb3JtIGFuIGF1ZGl0IG9mIHdoaWNoIHBhY2thZ2VzIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBhbmQgd2hpY2gKKyMgYXJlIG1pc3NpbmcgLWRvYyBwYWNrYWdlcy4KKyMKKyMgU2V0dXAgcmVxdWlyZW1lbnRzOiBiZSBzdXJlIHRvIGJlIGJ1aWxkaW5nIGZvciBNQUNISU5FPXFlbXV4ODYuIFJ1bgorIyB0aGlzIHNjcmlwdCBhZnRlciBzb3VyY2UnaW5nIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzY3JpcHQsIHNvIHlvdSdyZQorIyBydW5uaW5nIGl0IGZyb20gYnVpbGQvIGRpcmVjdG9yeS4KKyMKKyMgTWFpbnRhaW5lcjogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK1JFUE9SVF9ET0NfU0lNUExFPSJkb2N1bWVudGF0aW9uX2V4aXN0cy50eHQiCitSRVBPUlRfRE9DX0RFVEFJTD0iZG9jdW1lbnRhdGlvbl9leGlzdHNfZGV0YWlsLnR4dCIKK1JFUE9SVF9NSVNTSU5HX1NJTVBMRT0iZG9jdW1lbnRhdGlvbl9taXNzaW5nLnR4dCIKK1JFUE9SVF9NSVNTSU5HX0RFVEFJTD0iZG9jdW1lbnRhdGlvbl9taXNzaW5nX2RldGFpbC50eHQiCitSRVBPUlRfQlVJTERfRVJST1JTPSJidWlsZF9lcnJvcnMudHh0IgorCitybSAtcmYgJFJFUE9SVF9ET0NfU0lNUExFICRSRVBPUlRfRE9DX0RFVEFJTCAkUkVQT1JUX01JU1NJTkdfU0lNUExFICRSRVBPUlRfTUlTU0lOR19ERVRBSUwKKworQklUQkFLRT1gd2hpY2ggYml0YmFrZWAKK2lmIFsgLXogIiRCSVRCQUtFIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IGJpdGJha2UgY29tbWFuZCBub3QgZm91bmQuIgorCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2NyaXB0PyIKKwlleGl0IDEKK2ZpCisKK2VjaG8gIlJFTUlOREVSOiB5b3UgbmVlZCB0byBidWlsZCBmb3IgTUFDSElORT1xZW11eDg2IG9yIHlvdSB3b24ndCBnZXQgdXNlZnVsIHJlc3VsdHMiCitlY2hvICJSRU1JTkRFUjogeW91IG5lZWQgdG8gc2V0IExJQ0VOU0VfRkxBR1NfV0hJVEVMSVNUIGFwcHJvcHJpYXRlbHkgaW4gbG9jYWwuY29uZiBvciAiCitlY2hvICIgeW91J2xsIGdldCBmYWxzZSBwb3NpdGl2ZXMuICBGb3IgZXhhbXBsZSwgTElDRU5TRV9GTEFHU19XSElURUxJU1QgPSBcIkNvbW1lcmNpYWxcIiIKKworZm9yIHBrZyBpbiBgYml0YmFrZSAtcyB8IGF3ayAneyBwcmludCBcJDEgfSdgOyBkbworCWlmIFtbICIkcGtnIiA9PSAiTG9hZGluZyIgfHwgIiRwa2ciID09ICJMb2FkZWQiIHx8CisJICAiJHBrZyIgPT0gIlJlY2lwZSIgIHx8CisgICAgICAgICAgIiRwa2ciID09ICJQYXJzaW5nIiB8fCAiJHBrZyIgPT0gIlBhY2thZ2UiIHx8CisgICAgICAgICAgIiRwa2ciID09ICJOT1RFOiIgICB8fCAiJHBrZyIgPT0gIldBUk5JTkc6IiB8fAorICAgICAgICAgICIkcGtnIiA9PSAiZG9uZS4iICAgfHwgIiRwa2ciID09ICI9PT09PT09PT09PSIgXV0KKwl0aGVuCisJCSMgU2tpcCBpbml0aWFsIGJpdGJha2Ugb3V0cHV0CisJCWNvbnRpbnVlCisJZmkKKwlpZiBbWyAiJHBrZyIgPX4gLW5hdGl2ZSQgfHwgIiRwa2ciID1+IC1uYXRpdmVzZGskIHx8CisgICAgICAgICAgIiRwa2ciID1+IC1jcm9zcy1jYW5hZGlhbiBdXTsgdGhlbgorCQkjIFNraXAgbmF0aXZlL25hdGl2ZXNkay9jcm9zcy1jYW5hZGlhbiByZWNpcGVzCisJCWNvbnRpbnVlCisJZmkKKwlpZiBbWyAiJHBrZyIgPX4gXm1ldGEtIHx8ICIkcGtnIiA9fiBecGFja2FnZWdyb3VwLSB8fCAiJHBrZyIgPX4gLWltYWdlIF1dOyB0aGVuCisJCSMgU2tpcCBtZXRhLCB0YXNrIGFuZCBpbWFnZSByZWNpcGVzCisJCWNvbnRpbnVlCisJZmkKKwlpZiBbWyAiJHBrZyIgPX4gXmdsaWJjLSB8fCAiJHBrZyIgPX4gXmxpYmljb252JCB8fAorICAgICAgICAgICIkcGtnIiA9fiAtdG9vbGNoYWluJCB8fCAiJHBrZyIgPX4gXnBhY2thZ2UtaW5kZXgkIHx8CisgICAgICAgICAgIiRwa2ciID1+IF5saW51eC0gfHwgIiRwa2ciID1+IF5hZHQtaW5zdGFsbGVyJCB8fAorICAgICAgICAgICIkcGtnIiA9fiBeZWRzLXRvb2xzJCB8fCAiJHBrZyIgPX4gXmV4dGVybmFsLXB5dGhvbi10YXJiYWxsJCB8fAorICAgICAgICAgICIkcGtnIiA9fiBecXQ0LWVtYmVkZGVkJCB8fCAiJHBrZyIgPX4gXnF0LW1vYmlsaXR5IF1dOyB0aGVuCisJCSMgU2tpcCBnbGliYywgbGliaWNvbnYsIC10b29sY2hhaW4sIGFuZCBvdGhlciByZWNpcGVzIGtub3duCisJCSMgdG8gY2F1c2UgYnVpbGQgY29uZmxpY3RzIG9yIHRyaWdnZXIgZmFsc2UgcG9zaXRpdmVzLgorCQljb250aW51ZQorCWZpCQorCisJZWNobyAiQnVpbGRpbmcgcGFja2FnZSAkcGtnLi4uIgorCWJpdGJha2UgJHBrZyA+IC9kZXYvbnVsbAorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICJUaGVyZSB3YXMgYW4gZXJyb3IgYnVpbGRpbmcgcGFja2FnZSAkcGtnIiA+PiAiJFJFUE9SVF9NSVNTSU5HX0RFVEFJTCIKKwkJZWNobyAiJHBrZyIgPj4gJFJFUE9SVF9CVUlMRF9FUlJPUlMKKworCQkjIERvIG5vdCBza2lwIHRoZSByZW1haW5pbmcgdGVzdHMsIGFzIHNvbWV0aW1lcyB0aGUKKwkJIyBleGl0IHN0YXR1cyBpcyAxIGR1ZSB0byBRQSBlcnJvcnMsIGFuZCB3ZSBjYW4gc3RpbGwKKwkJIyBwZXJmb3JtIHRoZSAtZG9jIGNoZWNrcy4KKwlmaQorCisJZWNobyAiJHBrZyBidWlsdCBzdWNjZXNzZnVsbHksIGNoZWNraW5nIGZvciBhIGRvY3VtZW50YXRpb24gcGFja2FnZS4uLiIKKwlXT1JLRElSPWBiaXRiYWtlIC1lICRwa2cgfCBncmVwIF5XT1JLRElSIHwgYXdrIC1GICc9JyAneyBwcmludCBcJDIgfScgfCBhd2sgLUYgJyInICd7IHByaW50IFwkMiB9J2AKKwlGSU5EX0RPQ19QS0c9YGZpbmQgJFdPUktESVIvcGFja2FnZXMtc3BsaXQvKi1kb2MgLW1heGRlcHRoIDAgLXR5cGUgZGAKKwlpZiBbIC16ICIkRklORF9ET0NfUEtHIiBdOyB0aGVuCisJCSMgTm8gLWRvYyBwYWNrYWdlIHdhcyBnZW5lcmF0ZWQ6CisJCWVjaG8gIk5vIC1kb2MgcGFja2FnZTogJHBrZyIgPj4gIiRSRVBPUlRfTUlTU0lOR19ERVRBSUwiCisJCWVjaG8gIiRwa2ciID4+ICRSRVBPUlRfTUlTU0lOR19TSU1QTEUKKwkJY29udGludWUKKwlmaQorCisJRklORF9ET0NfRklMRVM9YGZpbmQgJEZJTkRfRE9DX1BLRyAtdHlwZSBmYAorCWlmIFsgLXogIiRGSU5EX0RPQ19GSUxFUyIgXTsgdGhlbgorCQkjIE5vIGZpbGVzIHNoaXBwZWQgd2l0aCB0aGUgLWRvYyBwYWNrYWdlOgorCQllY2hvICJObyBmaWxlcyBzaGlwcGVkIHdpdGggdGhlIC1kb2MgcGFja2FnZTogJHBrZyIgPj4gIiRSRVBPUlRfTUlTU0lOR19ERVRBSUwiCisJCWVjaG8gIiRwa2ciID4+ICRSRVBPUlRfTUlTU0lOR19TSU1QTEUKKwkJY29udGludWUKKwlmaQorCisJZWNobyAiRG9jdW1lbnRhdGlvbiBzaGlwcGVkIHdpdGggJHBrZzoiID4+ICIkUkVQT1JUX0RPQ19ERVRBSUwiCisJZWNobyAiJEZJTkRfRE9DX0ZJTEVTIiA+PiAiJFJFUE9SVF9ET0NfREVUQUlMIgorCWVjaG8gIiIJPj4gIiRSRVBPUlRfRE9DX0RFVEFJTCIKKworCWVjaG8gIiRwa2ciID4+ICIkUkVQT1JUX0RPQ19TSU1QTEUiCitkb25lCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbCBiL3NjcmlwdHMvY29udHJpYi9ncmFwaC10b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkYzdkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvZ3JhcGgtdG9vbApAQCAtMCwwICsxLDkyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBTaW1wbGUgZ3JhcGggcXVlcnkgdXRpbGl0eQorIyB1c2VmdWwgZm9yIGdldHRpbmcgYW5zd2VycyBmcm9tIC5kb3QgZmlsZXMgcHJvZHVjZWQgYnkgYml0YmFrZSAtZworIworIyBXcml0dGVuIGJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBzeXMKKworZGVmIGdldF9wYXRoX25ldHdvcmt4KGRvdGZpbGUsIGZyb21ub2RlLCB0b25vZGUpOgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IG5ldHdvcmt4CisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwcmludCgnRVJST1I6IFBsZWFzZSBpbnN0YWxsIHRoZSBuZXR3b3JreCBweXRob24gbW9kdWxlJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGdyYXBoID0gbmV0d29ya3guRGlHcmFwaChuZXR3b3JreC5yZWFkX2RvdChkb3RmaWxlKSkKKworICAgIGRlZiBub2RlX21pc3Npbmcobm9kZSk6CisgICAgICAgIGltcG9ydCBkaWZmbGliCisgICAgICAgIGNsb3NlX21hdGNoZXMgPSBkaWZmbGliLmdldF9jbG9zZV9tYXRjaGVzKG5vZGUsIGdyYXBoLm5vZGVzKCksIGN1dG9mZj0wLjcpCisgICAgICAgIGlmIGNsb3NlX21hdGNoZXM6CisgICAgICAgICAgICBwcmludCgnRVJST1I6IG5vIG5vZGUgIiVzIiBpbiBncmFwaC4gQ2xvc2UgbWF0Y2hlczpcbiAgJXMnICUgKG5vZGUsICdcbiAgJy5qb2luKGNsb3NlX21hdGNoZXMpKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBmcm9tbm9kZSBpbiBncmFwaDoKKyAgICAgICAgbm9kZV9taXNzaW5nKGZyb21ub2RlKQorICAgIGlmIG5vdCB0b25vZGUgaW4gZ3JhcGg6CisgICAgICAgIG5vZGVfbWlzc2luZyh0b25vZGUpCisgICAgcmV0dXJuIG5ldHdvcmt4LmFsbF9zaW1wbGVfcGF0aHMoZ3JhcGgsIHNvdXJjZT1mcm9tbm9kZSwgdGFyZ2V0PXRvbm9kZSkKKworCitkZWYgZmluZF9wYXRocyhhcmdzLCB1c2FnZSk6CisgICAgaWYgbGVuKGFyZ3MpIDwgMzoKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZnJvbW5vZGUgPSBhcmdzWzFdCisgICAgdG9ub2RlID0gYXJnc1syXQorICAgIHBhdGhzID0gbGlzdChnZXRfcGF0aF9uZXR3b3JreChhcmdzWzBdLCBmcm9tbm9kZSwgdG9ub2RlKSkKKyAgICBpZiBwYXRoczoKKyAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgICAgICBwcmludCAnIC0+ICcuam9pbihwYXRoKQorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJFUlJPUjogbm8gcGF0aCBmcm9tICVzIHRvICVzIGluIGdyYXBoIiAlIChmcm9tbm9kZSwgdG9ub2RlKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworZGVmIG1haW4oKToKKyAgICBpbXBvcnQgb3B0cGFyc2UKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIHVzYWdlID0gJycnJXByb2cgW29wdGlvbnNdIDxjb21tYW5kPiA8YXJndW1lbnRzPgorCitBdmFpbGFibGUgY29tbWFuZHM6CisgICAgZmluZC1wYXRocyA8ZG90ZmlsZT4gPGZyb20+IDx0bz4KKyAgICAgICAgRmluZCBhbGwgb2YgdGhlIHBhdGhzIGJldHdlZW4gdHdvIG5vZGVzIGluIGEgZG90IGdyYXBoJycnKQorCisgICAgI3BhcnNlci5hZGRfb3B0aW9uKCItZCIsICItLWRlYnVnIiwKKyAgICAjICAgICAgICBoZWxwID0gIlJlcG9ydCBhbGwgU1JDUkVWIHZhbHVlcywgbm90IGp1c3Qgb25lcyB3aGVyZSBBVVRPUkVWIGhhcyBiZWVuIHVzZWQiLAorICAgICMgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImRlYnVnIiwgZGVmYXVsdD1GYWxzZSkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICBhcmdzID0gYXJnc1sxOl0KKworICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGFyZ3NbMF0gPT0gImZpbmQtcGF0aHMiOgorICAgICAgICBmaW5kX3BhdGhzKGFyZ3NbMTpdLCBwYXJzZXIucHJpbnRfaGVscCkKKyAgICBlbHNlOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29udHJpYi9saXN0LXBhY2thZ2Vjb25maWctZmxhZ3MucHkgYi9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmM2I4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvbGlzdC1wYWNrYWdlY29uZmlnLWZsYWdzLnB5CkBAIC0wLDAgKzEsMTc5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyAtIGxpc3QgYXZhaWxhYmxlIHJlY2lwZXMgd2hpY2ggaGF2ZSBQQUNLQUdFQ09ORklHIGZsYWdzCisjIC0gbGlzdCBhdmFpbGFibGUgUEFDS0FHRUNPTkZJRyBmbGFncyBhbmQgYWxsIGFmZmVjdGVkIHJlY2lwZXMKKyMgLSBsaXN0IGFsbCByZWNpcGVzIGFuZCBQQUNLQUdFQ09ORklHIGluZm9ybWF0aW9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCisKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHNjcmlwdHNfcGF0aCArICcvLi4vbGliJykKK3N5cy5wYXRoID0gc3lzLnBhdGggKyBbbGliX3BhdGhdCisKK2ltcG9ydCBzY3JpcHRwYXRoCisKKyMgRm9yIGltcG9ydGluZyB0aGUgZm9sbG93aW5nIG1vZHVsZXMKK2JpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitpZiBub3QgYml0YmFrZXBhdGg6CisgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQorICAgIHN5cy5leGl0KDEpCisKK2ltcG9ydCBiYi5jYWNoZQoraW1wb3J0IGJiLmNvb2tlcgoraW1wb3J0IGJiLnByb3ZpZGVycworaW1wb3J0IGJiLnRpbmZvaWwKKworZGVmIGdldF9mbmxpc3QoYmJoYW5kbGVyLCBwa2dfcG4sIHByZWZlcnJlZCk6CisgICAgJycnIEdldCBhbGwgcmVjaXBlIGZpbGUgbmFtZXMgJycnCisgICAgaWYgcHJlZmVycmVkOgorICAgICAgICAobGF0ZXN0X3ZlcnNpb25zLCBwcmVmZXJyZWRfdmVyc2lvbnMpID0gYmIucHJvdmlkZXJzLmZpbmRQcm92aWRlcnMoYmJoYW5kbGVyLmNvbmZpZ19kYXRhLCBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLCBwa2dfcG4pCisKKyAgICBmbl9saXN0ID0gW10KKyAgICBmb3IgcG4gaW4gc29ydGVkKHBrZ19wbik6CisgICAgICAgIGlmIHByZWZlcnJlZDoKKyAgICAgICAgICAgIGZuX2xpc3QuYXBwZW5kKHByZWZlcnJlZF92ZXJzaW9uc1twbl1bMV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbl9saXN0LmV4dGVuZChwa2dfcG5bcG5dKQorCisgICAgcmV0dXJuIGZuX2xpc3QKKworZGVmIGdldF9yZWNpcGVzZGF0YShiYmhhbmRsZXIsIHByZWZlcnJlZCk6CisgICAgJycnIEdldCBkYXRhIG9mIGFsbCBhdmFpbGFibGUgcmVjaXBlcyB3aGljaCBoYXZlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgJycnCisgICAgcGtnX3BuID0gYmJoYW5kbGVyLmNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG4KKworICAgIGRhdGFfZGljdCA9IHt9CisgICAgZm9yIGZuIGluIGdldF9mbmxpc3QoYmJoYW5kbGVyLCBwa2dfcG4sIHByZWZlcnJlZCk6CisgICAgICAgIGRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICBmbGFncyA9IGRhdGEuZ2V0VmFyRmxhZ3MoIlBBQ0tBR0VDT05GSUciKQorICAgICAgICBmbGFncy5wb3AoJ2RvYycsIE5vbmUpCisgICAgICAgIGlmIGZsYWdzOgorICAgICAgICAgICAgZGF0YV9kaWN0W2ZuXSA9IGRhdGEKKworICAgIHJldHVybiBkYXRhX2RpY3QKKworZGVmIGNvbGxlY3RfcGtncyhkYXRhX2RpY3QpOgorICAgICcnJyBDb2xsZWN0IGF2YWlsYWJsZSBwa2dzIGluIHdoaWNoIGhhdmUgUEFDS0FHRUNPTkZJRyBmbGFncyAnJycKKyAgICAjIHBrZ19kaWN0ID0geydwa2cxJzogWydmbGFnMScsICdmbGFnMicsLi4uXX0KKyAgICBwa2dfZGljdCA9IHt9CisgICAgZm9yIGZuIGluIGRhdGFfZGljdDoKKyAgICAgICAgcGtnY29uZmlnZmxhZ3MgPSBkYXRhX2RpY3RbZm5dLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikKKyAgICAgICAgcGtnY29uZmlnZmxhZ3MucG9wKCdkb2MnLCBOb25lKQorICAgICAgICBwa2duYW1lID0gZGF0YV9kaWN0W2ZuXS5nZXRWYXIoIlAiLCBUcnVlKQorICAgICAgICBwa2dfZGljdFtwa2duYW1lXSA9IHNvcnRlZChwa2djb25maWdmbGFncy5rZXlzKCkpCisKKyAgICByZXR1cm4gcGtnX2RpY3QKKworZGVmIGNvbGxlY3RfZmxhZ3MocGtnX2RpY3QpOgorICAgICcnJyBDb2xsZWN0IGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFuZCBhbGwgYWZmZWN0ZWQgcGtncyAnJycKKyAgICAjIGZsYWdfZGljdCA9IHsnZmxhZyc6IFsncGtnMScsICdwa2cyJywuLi5dfQorICAgIGZsYWdfZGljdCA9IHt9CisgICAgZm9yIHBrZ25hbWUsIGZsYWdsaXN0IGluIHBrZ19kaWN0Lml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgZmxhZyBpbiBmbGFnbGlzdDoKKyAgICAgICAgICAgIGlmIGZsYWcgaW4gZmxhZ19kaWN0OgorICAgICAgICAgICAgICAgIGZsYWdfZGljdFtmbGFnXS5hcHBlbmQocGtnbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmxhZ19kaWN0W2ZsYWddID0gW3BrZ25hbWVdCisKKyAgICByZXR1cm4gZmxhZ19kaWN0CisKK2RlZiBkaXNwbGF5X3BrZ3MocGtnX2RpY3QpOgorICAgICcnJyBEaXNwbGF5IGF2YWlsYWJsZSBwa2dzIHdoaWNoIGhhdmUgUEFDS0FHRUNPTkZJRyBmbGFncyAnJycKKyAgICBwa2duYW1lX2xlbiA9IGxlbigiUkVDSVBFIE5BTUUiKSArIDEKKyAgICBmb3IgcGtnbmFtZSBpbiBwa2dfZGljdDoKKyAgICAgICAgaWYgcGtnbmFtZV9sZW4gPCBsZW4ocGtnbmFtZSk6CisgICAgICAgICAgICBwa2duYW1lX2xlbiA9IGxlbihwa2duYW1lKQorICAgIHBrZ25hbWVfbGVuICs9IDEKKworICAgIGhlYWRlciA9ICclLSpzJXMnICUgKHBrZ25hbWVfbGVuLCBzdHIoIlJFQ0lQRSBOQU1FIiksIHN0cigiUEFDS0FHRUNPTkZJRyBGTEFHUyIpKQorICAgIHByaW50IGhlYWRlcgorICAgIHByaW50IHN0cigiIikubGp1c3QobGVuKGhlYWRlciksICc9JykKKyAgICBmb3IgcGtnbmFtZSBpbiBzb3J0ZWQocGtnX2RpY3QpOgorICAgICAgICBwcmludCgnJS0qcyVzJyAlIChwa2duYW1lX2xlbiwgcGtnbmFtZSwgJyAnLmpvaW4ocGtnX2RpY3RbcGtnbmFtZV0pKSkKKworCitkZWYgZGlzcGxheV9mbGFncyhmbGFnX2RpY3QpOgorICAgICcnJyBEaXNwbGF5IGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFuZCBhbGwgYWZmZWN0ZWQgcGtncyAnJycKKyAgICBmbGFnX2xlbiA9IGxlbigiUEFDS0FHRUNPTkZJRyBGTEFHIikgKyA1CisKKyAgICBoZWFkZXIgPSAnJS0qcyVzJyAlIChmbGFnX2xlbiwgc3RyKCJQQUNLQUdFQ09ORklHIEZMQUciKSwgc3RyKCJSRUNJUEUgTkFNRVMiKSkKKyAgICBwcmludCBoZWFkZXIKKyAgICBwcmludCBzdHIoIiIpLmxqdXN0KGxlbihoZWFkZXIpLCAnPScpCisKKyAgICBmb3IgZmxhZyBpbiBzb3J0ZWQoZmxhZ19kaWN0KToKKyAgICAgICAgcHJpbnQoJyUtKnMlcycgJSAoZmxhZ19sZW4sIGZsYWcsICcgICcuam9pbihzb3J0ZWQoZmxhZ19kaWN0W2ZsYWddKSkpKQorCitkZWYgZGlzcGxheV9hbGwoZGF0YV9kaWN0KToKKyAgICAnJycgRGlzcGxheSBhbGwgcGtncyBhbmQgUEFDS0FHRUNPTkZJRyBpbmZvcm1hdGlvbiAnJycKKyAgICBwcmludCBzdHIoIiIpLmxqdXN0KDUwLCAnPScpCisgICAgZm9yIGZuIGluIGRhdGFfZGljdDoKKyAgICAgICAgcHJpbnQoJyVzJyAlIGRhdGFfZGljdFtmbl0uZ2V0VmFyKCJQIiwgVHJ1ZSkpCisgICAgICAgIHByaW50IGZuCisgICAgICAgIHBhY2thZ2Vjb25maWcgPSBkYXRhX2RpY3RbZm5dLmdldFZhcigiUEFDS0FHRUNPTkZJRyIsIFRydWUpIG9yICcnCisgICAgICAgIGlmIHBhY2thZ2Vjb25maWcuc3RyaXAoKSA9PSAnJzoKKyAgICAgICAgICAgIHBhY2thZ2Vjb25maWcgPSAnTm9uZScKKyAgICAgICAgcHJpbnQoJ1BBQ0tBR0VDT05GSUcgJXMnICUgcGFja2FnZWNvbmZpZykKKworICAgICAgICBmb3IgZmxhZyxmbGFnX3ZhbCBpbiBkYXRhX2RpY3RbZm5dLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwcmludCgnUEFDS0FHRUNPTkZJR1slc10gJXMnICUgKGZsYWcsIGZsYWdfdmFsKSkKKyAgICAgICAgcHJpbnQgJycKKworZGVmIG1haW4oKToKKyAgICBwa2dfZGljdCA9IHt9CisgICAgZmxhZ19kaWN0ID0ge30KKworICAgICMgQ29sbGVjdCBhbmQgdmFsaWRhdGUgaW5wdXQKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uID0gIkxpc3RzIHJlY2lwZXMgYW5kIFBBQ0tBR0VDT05GSUcgZmxhZ3MuIFdpdGhvdXQgLWEgb3IgLWYsIHJlY2lwZXMgYW5kIHRoZWlyIGF2YWlsYWJsZSBQQUNLQUdFQ09ORklHIGZsYWdzIGFyZSBsaXN0ZWQuIiwKKyAgICAgICAgdXNhZ2UgPSAiIiIKKyAgICAlcHJvZyBbb3B0aW9uc10iIiIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mbGFncyIsCisgICAgICAgICAgICBoZWxwID0gImxpc3QgYXZhaWxhYmxlIFBBQ0tBR0VDT05GSUcgZmxhZ3MgYW5kIGFmZmVjdGVkIHJlY2lwZXMiLAorICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGRlc3Q9Imxpc3R0eXBlIiwgY29uc3Q9ImZsYWdzIiwgZGVmYXVsdD0icmVjaXBlcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tYWxsIiwKKyAgICAgICAgICAgIGhlbHAgPSAibGlzdCBhbGwgcmVjaXBlcyBhbmQgUEFDS0FHRUNPTkZJRyBpbmZvcm1hdGlvbiIsCisgICAgICAgICAgICBhY3Rpb249InN0b3JlX2NvbnN0IiwgZGVzdD0ibGlzdHR5cGUiLCBjb25zdD0iYWxsIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1wcmVmZXJyZWQtb25seSIsCisgICAgICAgICAgICBoZWxwID0gIndoZXJlIG11bHRpcGxlIHJlY2lwZSB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlLCBsaXN0IG9ubHkgdGhlIHByZWZlcnJlZCB2ZXJzaW9uIiwKKyAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InByZWZlcnJlZCIsIGRlZmF1bHQ9RmFsc2UpCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCisKKyAgICBiYmhhbmRsZXIgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIGJiaGFuZGxlci5wcmVwYXJlKCkKKyAgICBwcmludCgiR2F0aGVyaW5nIHJlY2lwZSBkYXRhLi4uIikKKyAgICBkYXRhX2RpY3QgPSBnZXRfcmVjaXBlc2RhdGEoYmJoYW5kbGVyLCBvcHRpb25zLnByZWZlcnJlZCkKKworICAgIGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ2ZsYWdzJzoKKyAgICAgICAgcGtnX2RpY3QgPSBjb2xsZWN0X3BrZ3MoZGF0YV9kaWN0KQorICAgICAgICBmbGFnX2RpY3QgPSBjb2xsZWN0X2ZsYWdzKHBrZ19kaWN0KQorICAgICAgICBkaXNwbGF5X2ZsYWdzKGZsYWdfZGljdCkKKyAgICBlbGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ3JlY2lwZXMnOgorICAgICAgICBwa2dfZGljdCA9IGNvbGxlY3RfcGtncyhkYXRhX2RpY3QpCisgICAgICAgIGRpc3BsYXlfcGtncyhwa2dfZGljdCkKKyAgICBlbGlmIG9wdGlvbnMubGlzdHR5cGUgPT0gJ2FsbCc6CisgICAgICAgIGRpc3BsYXlfYWxsKGRhdGFfZGljdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29udHJpYi9ta2VmaWRpc2suc2ggYi9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1ZjcyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvbWtlZmlkaXNrLnNoCkBAIC0wLDAgKzEsNDAzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisjIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworTEFORz1DCisKKyMgU2V0IHRvIDEgdG8gZW5hYmxlIGFkZGl0aW9uYWwgb3V0cHV0CitERUJVRz0wCitPVVQ9Ii9kZXYvbnVsbCIKKworIworIyBEZWZhdWx0cworIworIyAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitCT09UX1NJWkU9MjAKKyMgNSUgZm9yIHN3YXAKK1NXQVBfUkFUSU89NQorCisjIENsZWFudXAgYWZ0ZXIgZGllKCkKK2NsZWFudXAoKSB7CisJZGVidWcgIlN5bmNpbmcgYW5kIHVubW91bnRpbmcgZGV2aWNlcyIKKwkjIFVubW91bnQgYW55dGhpbmcgd2UgbW91bnRlZAorCXVubW91bnQgJFJPT1RGU19NTlQgfHwgZXJyb3IgIkZhaWxlZCB0byB1bm1vdW50ICRST09URlNfTU5UIgorCXVubW91bnQgJEJPT1RGU19NTlQgfHwgZXJyb3IgIkZhaWxlZCB0byB1bm1vdW50ICRCT09URlNfTU5UIgorCXVubW91bnQgJEhERElNR19ST09URlNfTU5UIHx8IGVycm9yICJGYWlsZWQgdG8gdW5tb3VudCAkSERESU1HX1JPT1RGU19NTlQiCisJdW5tb3VudCAkSERESU1HX01OVCB8fCBlcnJvciAiRmFpbGVkIHRvIHVubW91bnQgJEhERElNR19NTlQiCisKKwkjIFJlbW92ZSB0aGUgVE1QRElSCisJZGVidWcgIlJlbW92aW5nIHRlbXBvcmFyeSBmaWxlcyIKKwlpZiBbIC1kICIkVE1QRElSIiBdOyB0aGVuCisJCXJtIC1yZiAkVE1QRElSIHx8IGVycm9yICJGYWlsZWQgdG8gcmVtb3ZlICRUTVBESVIiCisJZmkKK30KKwordHJhcCAnZGllICJTaWduYWwgUmVjZWl2ZWQsIEFib3J0aW5nLi4uIicgSFVQIElOVCBURVJNCisKKyMgTG9nZ2luZyByb3V0aW5lcworV0FSTklOR1M9MAorRVJST1JTPTAKK0NMRUFSPSIkKHRwdXQgc2dyMCkiCitJTkZPPSIkKHRwdXQgYm9sZCkiCitSRUQ9IiQodHB1dCBzZXRhZiAxKSQodHB1dCBib2xkKSIKK0dSRUVOPSIkKHRwdXQgc2V0YWYgMikkKHRwdXQgYm9sZCkiCitZRUxMT1c9IiQodHB1dCBzZXRhZiAzKSQodHB1dCBib2xkKSIKK2luZm8oKSB7CisJZWNobyAiJHtJTkZPfSQxJHtDTEVBUn0iCit9CitlcnJvcigpIHsKKwlFUlJPUlM9JCgoRVJST1JTKzEpKQorCWVjaG8gIiR7UkVEfSQxJHtDTEVBUn0iCit9Cit3YXJuKCkgeworCVdBUk5JTkdTPSQoKFdBUk5JTkdTKzEpKQorCWVjaG8gIiR7WUVMTE9XfSQxJHtDTEVBUn0iCit9CitzdWNjZXNzKCkgeworCWVjaG8gIiR7R1JFRU59JDEke0NMRUFSfSIKK30KK2RpZSgpIHsKKwllcnJvciAiJDEiCisJY2xlYW51cAorCWV4aXQgMQorfQorZGVidWcoKSB7CisJaWYgWyAkREVCVUcgLWVxIDEgXTsgdGhlbgorCQllY2hvICIkMSIKKwlmaQorfQorCit1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJChiYXNlbmFtZSAkMCkgWy12XSBERVZJQ0UgSERESU1HIFRBUkdFVF9ERVZJQ0UiCisJZWNobyAiICAgICAgIC12OiBWZXJib3NlIGRlYnVnIgorCWVjaG8gIiAgICAgICBERVZJQ0U6IFRoZSBkZXZpY2UgdG8gd3JpdGUgdGhlIGltYWdlIHRvLCBlLmcuIC9kZXYvc2RoIgorCWVjaG8gIiAgICAgICBIRERJTUc6IFRoZSBoZGRpbWcgZmlsZSB0byBnZW5lcmF0ZSB0aGUgZWZpIGRpc2sgZnJvbSIKKwllY2hvICIgICAgICAgVEFSR0VUX0RFVklDRTogVGhlIGRldmljZSB0aGUgdGFyZ2V0IHdpbGwgYm9vdCBmcm9tLCBlLmcuICAvZGV2L21tY2JsazAiCit9CisKK2ltYWdlX2RldGFpbHMoKSB7CisJSU1HPSQxCisJaW5mbyAiSW1hZ2UgZGV0YWlscyIKKwllY2hvICIgICAgaW1hZ2U6ICQoc3RhdCAtLXByaW50ZiAnJU5cbicgJElNRykiCisJZWNobyAiICAgICBzaXplOiAkKHN0YXQgLUwgLS1wcmludGYgJyVzIGJ5dGVzXG4nICRJTUcpIgorCWVjaG8gIiBtb2RpZmllZDogJChzdGF0IC1MIC0tcHJpbnRmICcleVxuJyAkSU1HKSIKKwllY2hvICIgICAgIHR5cGU6ICQoZmlsZSAtTCAtYiAkSU1HKSIKKwllY2hvICIiCit9CisKK2RldmljZV9kZXRhaWxzKCkgeworCURFVj0kMQorCUJMT0NLX1NJWkU9NTEyCisKKwlpbmZvICJEZXZpY2UgZGV0YWlscyIKKwllY2hvICIgIGRldmljZTogJERFVklDRSIKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvZGV2aWNlL3ZlbmRvciIgXTsgdGhlbgorCQllY2hvICIgIHZlbmRvcjogJChjYXQgL3N5cy9jbGFzcy9ibG9jay8kREVWL2RldmljZS92ZW5kb3IpIgorCWVsc2UKKwkJZWNobyAiICB2ZW5kb3I6IFVOS09XTiIKKwlmaQorCWlmIFsgLWYgIi9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvbW9kZWwiIF07IHRoZW4KKwkJZWNobyAiICAgbW9kZWw6ICQoY2F0IC9zeXMvY2xhc3MvYmxvY2svJERFVi9kZXZpY2UvbW9kZWwpIgorCWVsc2UKKwkJZWNobyAiICAgbW9kZWw6IFVOS05PV04iCisJZmkKKwlpZiBbIC1mICIvc3lzL2NsYXNzL2Jsb2NrLyRERVYvc2l6ZSIgXTsgdGhlbgorCQllY2hvICIgICAgc2l6ZTogJCgoJChjYXQgL3N5cy9jbGFzcy9ibG9jay8kREVWL3NpemUpICogJEJMT0NLX1NJWkUpKSBieXRlcyIKKwllbHNlCisJCWVjaG8gIiAgICBzaXplOiBVTktOT1dOIgorCWZpCisJZWNobyAiIgorfQorCit1bm1vdW50X2RldmljZSgpIHsKKwlncmVwIC1xICRERVZJQ0UgL3Byb2MvbW91bnRzCisJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCXdhcm4gIiRERVZJQ0UgbGlzdGVkIGluIC9wcm9jL21vdW50cywgYXR0ZW1wdGluZyB0byB1bm1vdW50IgorCQl1bW91bnQgJERFVklDRSogMj4vZGV2L251bGwKKwkJcmV0dXJuICQ/CisJZmkKKwlyZXR1cm4gMAorfQorCit1bm1vdW50KCkgeworCWlmIFsgIiQxIiA9ICIiIF0gOyB0aGVuCisJCXJldHVybiAwCisJZmkKKwlncmVwIC1xICQxIC9wcm9jL21vdW50cworCWlmIFsgJD8gLWVxIDAgXTsgdGhlbgorCQlkZWJ1ZyAiVW5tb3VudGluZyAkMSIKKwkJdW1vdW50ICQxCisJCXJldHVybiAkPworCWZpCisJcmV0dXJuIDAKK30KKworIworIyBQYXJzZSBhbmQgdmFsaWRhdGUgYXJndW1lbnRzCisjCitpZiBbICQjIC1sdCAzIF0gfHwgWyAkIyAtZ3QgNCBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgIiQxIiA9ICItdiIgXTsgdGhlbgorCURFQlVHPTEKKwlPVVQ9IjEiCisJc2hpZnQKK2ZpCisKK0RFVklDRT0kMQorSERESU1HPSQyCitUQVJHRVRfREVWSUNFPSQzCisKK0xJTks9JChyZWFkbGluayAkREVWSUNFKQoraWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJREVWSUNFPSIkTElOSyIKK2ZpCisKK2lmIFsgISAtdyAiJERFVklDRSIgXTsgdGhlbgorCXVzYWdlCisJaWYgWyAhIC1lICIke0RFVklDRX0iIF0gOyB0aGVuCisJCWRpZSAiRGV2aWNlICRERVZJQ0UgY2Fubm90IGJlIGZvdW5kIgorCWVsc2UKKwkJZGllICJEZXZpY2UgJERFVklDRSBpcyBub3Qgd3JpdGFibGUgKG5lZWQgdG8gcnVuIHVuZGVyIHN1ZG8/KSIKKwlmaQorZmkKKworaWYgWyAhIC1lICIkSERESU1HIiBdOyB0aGVuCisJdXNhZ2UKKwlkaWUgIkhERElNRyAkSERESU1HIGRvZXMgbm90IGV4aXN0IgorZmkKKworIworIyBFbnN1cmUgdGhlIGhkZGltZyBpcyBub3QgbW91bnRlZAorIwordW5tb3VudCAiJEhERElNRyIgfHwgZGllICJGYWlsZWQgdG8gdW5tb3VudCAkSERESU1HIgorCisjCisjIENoZWNrIGlmIGFueSAkREVWSUNFIHBhcnRpdGlvbnMgYXJlIG1vdW50ZWQKKyMKK3VubW91bnRfZGV2aWNlIHx8IGRpZSAiRmFpbGVkIHRvIHVubW91bnQgJERFVklDRSIKKworIworIyBDb25maXJtIGRldmljZSB3aXRoIHVzZXIKKyMKK2ltYWdlX2RldGFpbHMgJEhERElNRworZGV2aWNlX2RldGFpbHMgJChiYXNlbmFtZSAkREVWSUNFKQorZWNobyAtbiAiJHtJTkZPfVByZXBhcmUgRUZJIGltYWdlIG9uICRERVZJQ0UgW3kvTl0/JHtDTEVBUn0gIgorcmVhZCBSRVNQT05TRQoraWYgWyAiJFJFU1BPTlNFIiAhPSAieSIgXTsgdGhlbgorCWVjaG8gIkltYWdlIGNyZWF0aW9uIGFib3J0ZWQiCisJZXhpdCAwCitmaQorCisKKyMKKyMgUHJlcGFyZSB0aGUgdGVtcG9yYXJ5IHdvcmtpbmcgc3BhY2UKKyMKK1RNUERJUj0kKG1rdGVtcCAtZCBta2VmaWRpc2stWFhYKSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IG1vdW50aW5nIGRpcmVjdG9yeS4iCitIRERJTUdfTU5UPSRUTVBESVIvaGRkaW1nCitIRERJTUdfUk9PVEZTX01OVD0kVE1QRElSL2hkZGltZ19yb290ZnMKK1JPT1RGU19NTlQ9JFRNUERJUi9yb290ZnMKK0JPT1RGU19NTlQ9JFRNUERJUi9ib290ZnMKK21rZGlyICRIRERJTUdfTU5UIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSAkSERESU1HX01OVCIKK21rZGlyICRIRERJTUdfUk9PVEZTX01OVCB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgJEhERElNR19ST09URlNfTU5UIgorbWtkaXIgJFJPT1RGU19NTlQgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlICRST09URlNfTU5UIgorbWtkaXIgJEJPT1RGU19NTlQgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlICRCT09URlNfTU5UIgorCisKKyMKKyMgUGFydGl0aW9uICRERVZJQ0UKKyMKK0RFVklDRV9TSVpFPSQocGFydGVkIC1zICRERVZJQ0UgdW5pdCBtYiBwcmludCB8IGdyZXAgXkRpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKyMgSWYgdGhlIGRldmljZSBzaXplIGlzIG5vdCByZXBvcnRlZCB0aGVyZSBtYXkgbm90IGJlIGEgdmFsaWQgbGFiZWwKK2lmIFsgIiRERVZJQ0VfU0laRSIgPSAiIiBdIDsgdGhlbgorCXBhcnRlZCAtcyAkREVWSUNFIG1rbGFiZWwgbXNkb3MgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIE1TRE9TIHBhcnRpdGlvbiB0YWJsZSIKKwlERVZJQ0VfU0laRT0kKHBhcnRlZCAtcyAkREVWSUNFIHVuaXQgbWIgcHJpbnQgfCBncmVwIF5EaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCitmaQorU1dBUF9TSVpFPSQoKERFVklDRV9TSVpFKlNXQVBfUkFUSU8vMTAwKSkKK1JPT1RGU19TSVpFPSQoKERFVklDRV9TSVpFLUJPT1RfU0laRS1TV0FQX1NJWkUpKQorUk9PVEZTX1NUQVJUPSQoKEJPT1RfU0laRSkpCitST09URlNfRU5EPSQoKFJPT1RGU19TVEFSVCtST09URlNfU0laRSkpCitTV0FQX1NUQVJUPSQoKFJPT1RGU19FTkQpKQorCisjIE1NQyBkZXZpY2VzIHVzZSBhIHBhcnRpdGlvbiBwcmVmaXggY2hhcmFjdGVyICdwJworUEFSVF9QUkVGSVg9IiIKK2lmIFsgISAiJHtERVZJQ0UjL2Rldi9tbWNibGt9IiA9ICIke0RFVklDRX0iIF0gfHwgWyAhICIke0RFVklDRSMvZGV2L2xvb3B9IiA9ICIke0RFVklDRX0iIF07IHRoZW4KKwlQQVJUX1BSRUZJWD0icCIKK2ZpCitCT09URlM9JERFVklDRSR7UEFSVF9QUkVGSVh9MQorUk9PVEZTPSRERVZJQ0Uke1BBUlRfUFJFRklYfTIKK1NXQVA9JERFVklDRSR7UEFSVF9QUkVGSVh9MworCitUQVJHRVRfUEFSVF9QUkVGSVg9IiIKK2lmIFsgISAiJHtUQVJHRVRfREVWSUNFIy9kZXYvbW1jYmxrfSIgPSAiJHtUQVJHRVRfREVWSUNFfSIgXTsgdGhlbgorCVRBUkdFVF9QQVJUX1BSRUZJWD0icCIKK2ZpCitUQVJHRVRfUk9PVEZTPSRUQVJHRVRfREVWSUNFJHtUQVJHRVRfUEFSVF9QUkVGSVh9MgorVEFSR0VUX1NXQVA9JFRBUkdFVF9ERVZJQ0Uke1RBUkdFVF9QQVJUX1BSRUZJWH0zCisKK2VjaG8gIiIKK2luZm8gIkJvb3QgcGFydGl0aW9uIHNpemU6ICAgJEJPT1RfU0laRSBNQiAoJEJPT1RGUykiCitpbmZvICJST09URlMgcGFydGl0aW9uIHNpemU6ICRST09URlNfU0laRSBNQiAoJFJPT1RGUykiCitpbmZvICJTd2FwIHBhcnRpdGlvbiBzaXplOiAgICRTV0FQX1NJWkUgTUIgKCRTV0FQKSIKK2VjaG8gIiIKKworIyBVc2UgTVNET1MgYnkgZGVmYXVsdCBhcyBHUFQgY2Fubm90IGJlIHJlbGlhYmx5IGRpc3RyaWJ1dGVkIGluIGRpc2sgaW1hZ2UgZm9ybQorIyBhcyBpdCByZXF1aXJlcyB0aGUgYmFja3VwIHRhYmxlIHRvIGJlIG9uIHRoZSBsYXN0IGJsb2NrIG9mIHRoZSBkZXZpY2UsIHdoaWNoCisjIG9mIGNvdXJzZSB2YXJpZXMgZnJvbSBkZXZpY2UgdG8gZGV2aWNlLgorCitpbmZvICJQYXJ0aXRpb25pbmcgaW5zdGFsbGF0aW9uIG1lZGlhICgkREVWSUNFKSIKKworZGVidWcgIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAkREVWSUNFIgorZGQgaWY9L2Rldi96ZXJvIG9mPSRERVZJQ0UgYnM9NTEyIGNvdW50PTIgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byB6ZXJvIGJlZ2lubmluZyBvZiAkREVWSUNFIgorCitkZWJ1ZyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSAoTVNET1MpIG9uICRERVZJQ0UiCitwYXJ0ZWQgLXMgJERFVklDRSBta2xhYmVsIG1zZG9zID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIE1TRE9TIHBhcnRpdGlvbiB0YWJsZSIKKworZGVidWcgIkNyZWF0aW5nIGJvb3QgcGFydGl0aW9uIG9uICRCT09URlMiCitwYXJ0ZWQgLXMgJERFVklDRSBta3BhcnQgcHJpbWFyeSAwJSAkQk9PVF9TSVpFID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gY3JlYXRlIEJPT1QgcGFydGl0aW9uIgorCitkZWJ1ZyAiRW5hYmxpbmcgYm9vdCBmbGFnIG9uICRCT09URlMiCitwYXJ0ZWQgLXMgJERFVklDRSBzZXQgMSBib290IG9uID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gZW5hYmxlIGJvb3QgZmxhZyIKKworZGVidWcgIkNyZWF0aW5nIFJPT1RGUyBwYXJ0aXRpb24gb24gJFJPT1RGUyIKK3BhcnRlZCAtcyAkREVWSUNFIG1rcGFydCBwcmltYXJ5ICRST09URlNfU1RBUlQgJFJPT1RGU19FTkQgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgUk9PVEZTIHBhcnRpdGlvbiIKKworZGVidWcgIkNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIG9uICRTV0FQIgorcGFydGVkIC1zICRERVZJQ0UgbWtwYXJ0IHByaW1hcnkgJFNXQVBfU1RBUlQgMTAwJSA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBTV0FQIHBhcnRpdGlvbiIKKworaWYgWyAkREVCVUcgLWVxIDEgXTsgdGhlbgorCXBhcnRlZCAtcyAkREVWSUNFIHByaW50CitmaQorCisKKyMKKyMgQ2hlY2sgaWYgYW55ICRERVZJQ0UgcGFydGl0aW9ucyBhcmUgbW91bnRlZCBhZnRlciBwYXJ0aXRpb25pbmcKKyMKK3VubW91bnRfZGV2aWNlIHx8IGRpZSAiRmFpbGVkIHRvIHVubW91bnQgJERFVklDRSBwYXJ0aXRpb25zIgorCisKKyMKKyMgRm9ybWF0ICRERVZJQ0UgcGFydGl0aW9ucworIworaW5mbyAiRm9ybWF0dGluZyBwYXJ0aXRpb25zIgorZGVidWcgIkZvcm1hdHRpbmcgJEJPT1RGUyBhcyB2ZmF0IgoraWYgWyAhICIke0RFVklDRSMvZGV2L2xvb3B9IiA9ICIke0RFVklDRX0iIF07IHRoZW4KKwlta2ZzLnZmYXQgLUkgJEJPT1RGUyAtbiAiRUZJIiA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIGZvcm1hdCAkQk9PVEZTIgorZWxzZQorCW1rZnMudmZhdCAkQk9PVEZTIC1uICJFRkkiID4kT1VUIDI+JjEgfHwgZGllICJGYWlsZWQgdG8gZm9ybWF0ICRCT09URlMiCitmaQorCitkZWJ1ZyAiRm9ybWF0dGluZyAkUk9PVEZTIGFzIGV4dDMiCitta2ZzLmV4dDMgLUYgJFJPT1RGUyAtTCAiUk9PVCIgPiRPVVQgMj4mMSB8fCBkaWUgIkZhaWxlZCB0byBmb3JtYXQgJFJPT1RGUyIKKworZGVidWcgIkZvcm1hdHRpbmcgc3dhcCBwYXJ0aXRpb24gKCRTV0FQKSIKK21rc3dhcCAkU1dBUCA+JE9VVCAyPiYxIHx8IGRpZSAiRmFpbGVkIHRvIHByZXBhcmUgc3dhcCIKKworCisjCisjIEluc3RhbGxpbmcgdG8gJERFVklDRQorIworZGVidWcgIk1vdW50aW5nIGltYWdlcyBhbmQgZGV2aWNlIGluIHByZXBhcmF0aW9uIGZvciBpbnN0YWxsYXRpb24iCittb3VudCAtbyBsb29wICRIRERJTUcgJEhERElNR19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRIRERJTUciCittb3VudCAtbyBsb29wICRIRERJTUdfTU5UL3Jvb3Rmcy5pbWcgJEhERElNR19ST09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBtb3VudCByb290ZnMuaW1nIgorbW91bnQgJFJPT1RGUyAkUk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gbW91bnQgJFJPT1RGUyBvbiAkUk9PVEZTX01OVCIKK21vdW50ICRCT09URlMgJEJPT1RGU19NTlQgPiRPVVQgMj4mMSB8fCBlcnJvciAiRmFpbGVkIHRvIG1vdW50ICRCT09URlMgb24gJEJPT1RGU19NTlQiCisKK2luZm8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbiIKK0VGSURJUj0iJEJPT1RGU19NTlQvRUZJL0JPT1QiCitjcCAkSERESU1HX01OVC92bWxpbnV6ICRCT09URlNfTU5UID4kT1VUIDI+JjEgfHwgZXJyb3IgIkZhaWxlZCB0byBjb3B5IHZtbGludXoiCisjIENvcHkgdGhlIGVmaSBsb2FkZXIgYW5kIGNvbmZpZ3MgKGJvb3RpKi5lZmkgYW5kIGdydWIuY2ZnIGlmIGl0IGV4aXN0cykKK2NwIC1yICRIRERJTUdfTU5UL0VGSSAkQk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGVycm9yICJGYWlsZWQgdG8gY29weSBFRkkgZGlyIgorIyBTaWxlbnRseSBpZ25vcmUgYSBtaXNzaW5nIGd1bW1pYm9vdCBsb2FkZXIgZGlyICh3ZSBtaWdodCBqdXN0IGJlIGEgR1JVQiBpbWFnZSkKK2NwIC1yICRIRERJTUdfTU5UL2xvYWRlciAkQk9PVEZTX01OVCA+JE9VVCAyPiYxCisKKyMgVXBkYXRlIHRoZSBib290IGxvYWRlcnMgY29uZmlndXJhdGlvbnMgZm9yIGFuIGluc3RhbGxlZCBpbWFnZQorIyBSZW1vdmUgYW55IGV4aXN0aW5nIHJvb3Q9IGtlcm5lbCBwYXJhbWV0ZXJzIGFuZDoKKyMgbyBBZGQgYSByb290PSBwYXJhbWV0ZXIgd2l0aCB0aGUgdGFyZ2V0IHJvb3RmcworIyBvIFNwZWNpZnkgcm8gc28gZnNjayBjYW4gYmUgcnVuIGR1cmluZyBib290CisjIG8gU3BlY2lmeSByb290d2FpdCBpbiBjYXNlIHRoZSB0YXJnZXQgbWVkaWEgaXMgYW4gYXN5bmNyb25vdXMgYmxvY2sgZGV2aWNlCisjICAgc3VjaCBhcyBNTUMgb3IgVVNCIGRpc2tzCisjIG8gU3BlY2lmeSAicXVpZXQiIHRvIG1pbmltaXplIGJvb3QgdGltZSB3aGVuIHVzaW5nIHNsb3cgc2VyaWFsIGNvbnNvbGVzCisKKyMgTG9vayBmb3IgYSBHUlVCIGluc3RhbGxhdGlvbgorR1JVQl9DRkc9IiRFRklESVIvZ3J1Yi5jZmciCitpZiBbIC1lICIkR1JVQl9DRkciIF07IHRoZW4KKwlpbmZvICJDb25maWd1cmluZyBHUlVCIgorCSMgRGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisJc2VkIC1pICIvbWVudWVudHJ5ICdpbnN0YWxsJy8sL159L2QiICRHUlVCX0NGRworCSMgRGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKwlzZWQgLWkgIi9pbml0cmQgL2QiICRHUlVCX0NGRworCSMgRGVsZXRlIGFueSBMQUJFTD0gc3RyaW5ncworCXNlZCAtaSAicy8gTEFCRUw9W14gXSovIC8iICRHUlVCX0NGRworCisJc2VkIC1pICJzQCByb290PVteIF0qQCBAIiAkR1JVQl9DRkcKKwlzZWQgLWkgInNAdm1saW51eiBAdm1saW51eiByb290PSRUQVJHRVRfUk9PVEZTIHJvIHJvb3R3YWl0IHF1aWV0IEAiICRHUlVCX0NGRworZmkKKworIyBMb29rIGZvciBhIGd1bW1pYm9vdCBpbnN0YWxsYXRpb24KK0dVTU1JX0VOVFJJRVM9IiRCT09URlNfTU5UL2xvYWRlci9lbnRyaWVzIgorR1VNTUlfQ0ZHPSIkR1VNTUlfRU5UUklFUy9ib290LmNvbmYiCitpZiBbIC1kICIkR1VNTUlfRU5UUklFUyIgXTsgdGhlbgorCWluZm8gIkNvbmZpZ3VyaW5nIEd1bW1pYm9vdCIKKwkjIHJlbW92ZSB0aGUgaW5zdGFsbCB0YXJnZXQgaWYgaXQgZXhpc3RzCisJcm0gJEdVTU1JX0VOVFJJRVMvaW5zdGFsbC5jb25mID4kT1VUIDI+JjEKKworCWlmIFsgISAtZSAiJEdVTU1JX0NGRyIgXTsgdGhlbgorCQllY2hvICJFUlJPUjogJEdVTU1JX0NGRyBub3QgZm91bmQiCisJZmkKKworCXNlZCAtaSAiL2luaXRyZCAvZCIgJEdVTU1JX0NGRworCXNlZCAtaSAic0Agcm9vdD1bXiBdKkAgQCIgJEdVTU1JX0NGRworCXNlZCAtaSAic0BvcHRpb25zICpMQUJFTD1ib290IEBvcHRpb25zIExBQkVMPUJvb3Qgcm9vdD0kVEFSR0VUX1JPT1RGUyBybyByb290d2FpdCBxdWlldCBAIiAkR1VNTUlfQ0ZHCitmaQorCisjIEVuc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBFRkkgYm9vdGxvYWRlciBjb25maWd1cmVkCitpZiBbICEgLWUgJEdSVUJfQ0ZHIF0gJiYgWyAhIC1lICRHVU1NSV9DRkcgXTsgdGhlbgorCWRpZSAiTm8gRUZJIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiBmb3VuZCIKK2ZpCisKKworaW5mbyAiQ29weWluZyBST09URlMgZmlsZXMgKHRoaXMgbWF5IHRha2UgYSB3aGlsZSkiCitjcCAtYSAkSERESU1HX1JPT1RGU19NTlQvKiAkUk9PVEZTX01OVCA+JE9VVCAyPiYxIHx8IGRpZSAiUm9vdCBGUyBjb3B5IGZhaWxlZCIKKworZWNobyAiJFRBUkdFVF9TV0FQICAgICBzd2FwICAgICAgICAgICAgIHN3YXAgICAgICAgZGVmYXVsdHMgICAgICAgICAgICAgIDAgMCIgPj4gJFJPT1RGU19NTlQvZXRjL2ZzdGFiCisKKyMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KK2lmIFsgLWQgJFJPT1RGU19NTlQvZXRjL3VkZXYvIF0gOyB0aGVuCisJZWNobyAiJFRBUkdFVF9ERVZJQ0UiID4+ICRST09URlNfTU5UL2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorZmkKKworCisjIENhbGwgY2xlYW51cCB0byB1bm1vdW50IGRldmljZXMgYW5kIGltYWdlcyBhbmQgcmVtb3ZlIHRoZSBUTVBESVIKK2NsZWFudXAKKworZWNobyAiIgoraWYgWyAkV0FSTklOR1MgLW5lIDAgXSAmJiBbICRFUlJPUlMgLWVxIDAgXTsgdGhlbgorCWVjaG8gIiR7WUVMTE9XfUluc3RhbGxhdGlvbiBjb21wbGV0ZWQgd2l0aCB3YXJuaW5ncyR7Q0xFQVJ9IgorCWVjaG8gIiR7WUVMTE9XfVdhcm5pbmdzOiAkV0FSTklOR1Mke0NMRUFSfSIKK2VsaWYgWyAkRVJST1JTIC1uZSAwIF07IHRoZW4KKwllY2hvICIke1JFRH1JbnN0YWxsYXRpb24gZW5jb3VudGVyZWQgZXJyb3JzJHtDTEVBUn0iCisJZWNobyAiJHtSRUR9RXJyb3JzOiAkRVJST1JTJHtDTEVBUn0iCisJZWNobyAiJHtZRUxMT1d9V2FybmluZ3M6ICRXQVJOSU5HUyR7Q0xFQVJ9IgorZWxzZQorCXN1Y2Nlc3MgIkluc3RhbGxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgorZmkKK2VjaG8gIiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5IGIvc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTM2NTIyZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CkBAIC0wLDAgKzEsMzk4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBnZW5lcmF0ZSBQeXRob24gTWFuaWZlc3QgZm9yIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtCisjIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIChDKSAyMDA3IEplcmVteSBMYWluZQorIyBsaWNlbnNlZCB1bmRlciBNSVQsIHNlZSBDT1BZSU5HLk1JVAorIworIyBKdW5lIDIyLCAyMDExIC0tIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyMgICogVXBkYXRlZCB0byBubyBsb25nZXIgZ2VuZXJhdGUgc3BlY2lhbCAtZGJnIHBhY2thZ2UsIGluc3RlYWQgdXNlIHRoZQorIyAgICBzaW5nbGUgc3lzdGVtIC1kYmcKKyMgICogVXBkYXRlIHZlcnNpb24gd2l0aCAiLjEiIHRvIGluZGljYXRlIHRoaXMgY2hhbmdlCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworVkVSU0lPTiA9ICIyLjcuMiIKKworX19hdXRob3JfXyA9ICJNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4iCitfX3ZlcnNpb25fXyA9ICIyMDExMDIyMi4yIgorCitjbGFzcyBNYWtlZmlsZU1ha2VyOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBvdXRmaWxlICk6CisgICAgICAgICIiImluaXRpYWxpemUiIiIKKyAgICAgICAgc2VsZi5wYWNrYWdlcyA9IHt9CisgICAgICAgIHNlbGYudGFyZ2V0UHJlZml4ID0gIiR7bGliZGlyfS9weXRob24lcy8iICUgVkVSU0lPTls6M10KKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRmaWxlCisgICAgICAgIHNlbGYub3V0KCAiIiIKKyMgV0FSTklORzogVGhpcyBmaWxlIGlzIEFVVE8gR0VORVJBVEVEOiBNYW51YWwgZWRpdHMgd2lsbCBiZSBsb3N0IG5leHQgdGltZSBJIHJlZ2VuZXJhdGUgdGhlIGZpbGUuCisjIEdlbmVyYXRvcjogJyVzJyBWZXJzaW9uICVzIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIFZpc2l0IHRoZSBQeXRob24gZm9yIEVtYmVkZGVkIFN5c3RlbXMgU2l0ZSA9PiBodHRwOi8vd3d3LlZhbmlsbGUuZGUvcHJvamVjdHMvcHl0aG9uLnNweQorIiIiICUgKCBzeXMuYXJndlswXSwgX192ZXJzaW9uX18gKSApCisKKyAgICAjCisgICAgIyBoZWxwZXIgZnVuY3Rpb25zCisgICAgIworCisgICAgZGVmIG91dCggc2VsZiwgZGF0YSApOgorICAgICAgICAiIiJwcmludCBhIGxpbmUgdG8gdGhlIG91dHB1dCBmaWxlIiIiCisgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCAiJXNcbiIgJSBkYXRhICkKKworICAgIGRlZiBzZXRQcmVmaXgoIHNlbGYsIHRhcmdldFByZWZpeCApOgorICAgICAgICAiIiJzZXQgYSBmaWxlIHByZWZpeCBmb3IgYWRkUGFja2FnZSBmaWxlcyIiIgorICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9IHRhcmdldFByZWZpeAorCisgICAgZGVmIGRvUHJvbG9nKCBzZWxmICk6CisgICAgICAgIHNlbGYub3V0KCAiIiIgIiIiICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgIGRlZiBhZGRQYWNrYWdlKCBzZWxmLCBuYW1lLCBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmaWxlbmFtZXMgKToKKyAgICAgICAgIiIiYWRkIGEgcGFja2FnZSB0byB0aGUgTWFrZWZpbGUiIiIKKyAgICAgICAgaWYgdHlwZSggZmlsZW5hbWVzICkgPT0gdHlwZSggIiIgKToKKyAgICAgICAgICAgIGZpbGVuYW1lcyA9IGZpbGVuYW1lcy5zcGxpdCgpCisgICAgICAgIGZ1bGxGaWxlbmFtZXMgPSBbXQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgaWYgZmlsZW5hbWVbMF0gIT0gIiQiOgorICAgICAgICAgICAgICAgIGZ1bGxGaWxlbmFtZXMuYXBwZW5kKCAiJXMlcyIgJSAoIHNlbGYudGFyZ2V0UHJlZml4LCBmaWxlbmFtZSApICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVsbEZpbGVuYW1lcy5hcHBlbmQoIGZpbGVuYW1lICkKKyAgICAgICAgc2VsZi5wYWNrYWdlc1tuYW1lXSA9IGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZ1bGxGaWxlbmFtZXMKKworICAgIGRlZiBkb0JvZHkoIHNlbGYgKToKKyAgICAgICAgIiIiZ2VuZXJhdGUgYm9keSBvZiBNYWtlZmlsZSIiIgorCisgICAgICAgIGdsb2JhbCBWRVJTSU9OCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHByb3ZpZGVzIGxpbmUKKyAgICAgICAgIworCisgICAgICAgIHByb3ZpZGVMaW5lID0gJ1BST1ZJREVTKz0iJworICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcyk6CisgICAgICAgICAgICBwcm92aWRlTGluZSArPSAiJXMgIiAlIG5hbWUKKyAgICAgICAgcHJvdmlkZUxpbmUgKz0gJyInCisKKyAgICAgICAgc2VsZi5vdXQoIHByb3ZpZGVMaW5lICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICAjCisgICAgICAgICMgZ2VuZXJhdGUgcGFja2FnZSBsaW5lCisgICAgICAgICMKKworICAgICAgICBwYWNrYWdlTGluZSA9ICdQQUNLQUdFUz0iJHtQTn0tZGJnICcKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCIke1BOfS1kaXN0dXRpbHMiKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICIke1BOfS1kaXN0dXRpbHMiOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTGluZSArPSAiJXMtc3RhdGljZGV2ICVzICIgJSAobmFtZSwgbmFtZSkKKyAgICAgICAgICAgIGVsaWYgbmFtZSAhPSAnJHtQTn0tZGJnJzoKKyAgICAgICAgICAgICAgICBwYWNrYWdlTGluZSArPSAiJXMgIiAlIG5hbWUKKyAgICAgICAgcGFja2FnZUxpbmUgKz0gJyR7UE59LW1vZHVsZXMiJworCisgICAgICAgIHNlbGYub3V0KCBwYWNrYWdlTGluZSApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgdmFyaWFibGVzCisgICAgICAgICMKKworICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICBkZXNjLCBkZXBzLCBmaWxlcyA9IGRhdGEKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyB3cml0ZSBvdXQgdGhlIGRlc2NyaXB0aW9uLCByZXZpc2lvbiBhbmQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJXM9IiVzIicgJSAoIG5hbWUsIGRlc2MgKSApCisgICAgICAgICAgICBzZWxmLm91dCggJ1JERVBFTkRTXyVzPSIlcyInICUgKCBuYW1lLCBkZXBzICkgKQorCisgICAgICAgICAgICBsaW5lID0gJ0ZJTEVTXyVzPSInICUgbmFtZQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGNoZWNrIHdoaWNoIGRpcmVjdG9yaWVzIHRvIG1ha2UgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAgICAgICAgICMKKworICAgICAgICAgICAgZGlyc2V0ID0ge30gIyBpZiBweXRob24gaGFkIGEgc2V0LWRhdGF0eXBlIHRoaXMgd291bGQgYmUgc3VmZmljaWVudC4gZm9yIG5vdywgd2UncmUgdXNpbmcgYSBkaWN0IGluc3RlYWQuCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGRpcnNldFtvcy5wYXRoLmRpcm5hbWUoIHRhcmdldCApXSA9IFRydWUKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBnZW5lcmF0ZSB3aGljaCBmaWxlcyB0byBjb3B5IGZvciB0aGUgdGFyZ2V0ICgtZGZSIGJlY2F1c2Ugd2hvbGUgZGlyZWN0b3JpZXMgYXJlIGFsc28gYWxsb3dlZCkKKyAgICAgICAgICAgICMKKworICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBsaW5lICs9ICIlcyAiICUgdGFyZ2V0CisKKyAgICAgICAgICAgIGxpbmUgKz0gJyInCisgICAgICAgICAgICBzZWxmLm91dCggbGluZSApCisgICAgICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgIHNlbGYub3V0KCAnU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiJyApCisgICAgICAgIGxpbmUgPSAnUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJworCisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZXJpdGVtcygpKToKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIFsnJHtQTn0tZGV2JywgJyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYnXToKKyAgICAgICAgICAgICAgICBsaW5lICs9ICIlcyAiICUgbmFtZQorCisgICAgICAgIHNlbGYub3V0KCAiJXMgXCIiICUgbGluZSApCisgICAgICAgIHNlbGYub3V0KCAnQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIicgKQorCisgICAgZGVmIGRvRXBpbG9nKCBzZWxmICk6CisgICAgICAgIHNlbGYub3V0KCAiIiIiIiIgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgZGVmIG1ha2UoIHNlbGYgKToKKyAgICAgICAgc2VsZi5kb1Byb2xvZygpCisgICAgICAgIHNlbGYuZG9Cb2R5KCkKKyAgICAgICAgc2VsZi5kb0VwaWxvZygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisKKyAgICBpZiBsZW4oIHN5cy5hcmd2ICkgPiAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3lzLmFyZ3ZbMV0pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzeXMuZXhjX2NsZWFyKCkKKyAgICAgICAgb3V0ZmlsZSA9IGZpbGUoIHN5cy5hcmd2WzFdLCAidyIgKQorICAgIGVsc2U6CisgICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0CisKKyAgICBtID0gTWFrZWZpbGVNYWtlciggb3V0ZmlsZSApCisKKyAgICAjIEFkZCBwYWNrYWdlcyBoZXJlLiBPbmx5IHNwZWNpZnkgZGxvcGVuLXN0eWxlIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGhlcmUsIG5vIGxkZC1zdHlsZSBkZXBlbmRlbmNpZXMhCisgICAgIyBQYXJhbWV0ZXJzOiByZXZpc2lvbiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzCisgICAgIworCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29yZSIsICJQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGNvcmUgbW9kdWxlcyIsICIke1BOfS1sYW5nICR7UE59LXJlIiwKKyAgICAiX19mdXR1cmVfXy4qIF9hYmNvbGwuKiBhYmMuKiBjb3B5LiogY29weV9yZWcuKiBDb25maWdQYXJzZXIuKiAiICsKKyAgICAiZ2VuZXJpY3BhdGguKiBnZXRvcHQuKiBsaW5lY2FjaGUuKiBuZXcuKiAiICsKKyAgICAib3MuKiBwb3NpeHBhdGguKiBzdHJ1Y3QuKiAiICsKKyAgICAid2FybmluZ3MuKiBzaXRlLiogc3RhdC4qICIgKworICAgICJVc2VyRGljdC4qIFVzZXJMaXN0LiogVXNlclN0cmluZy4qICIgKworICAgICJsaWItZHlubG9hZC9iaW5hc2NpaS5zbyBsaWItZHlubG9hZC9fc3RydWN0LnNvIGxpYi1keW5sb2FkL3RpbWUuc28gIiArCisgICAgImxpYi1keW5sb2FkL3hyZWFkbGluZXMuc28gdHlwZXMuKiBwbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICIgICsKKyAgICAiX3dlYWtyZWZzZXQuKiBzeXNjb25maWcuKiBfc3lzY29uZmlnZGF0YS4qIGNvbmZpZy9NYWtlZmlsZSAiICsKKyAgICAiJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnKi5oICIgKworICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlY3VzdG9taXplLnB5ICIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kZXYiLCAiUHl0aG9uIGRldmVsb3BtZW50IHBhY2thZ2UiLCAiJHtQTn0tY29yZSIsCisgICAgIiR7aW5jbHVkZWRpcn0gIiArCisgICAgIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICIgKworICAgICIke2xpYmRpcn0vKi5sYSAiICsKKyAgICAiJHtsaWJkaXJ9LyouYSAiICsKKyAgICAiJHtsaWJkaXJ9LyoubyAiICsKKyAgICAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyAiICsKKyAgICAiJHtiYXNlX2xpYmRpcn0vKi5hICIgKworICAgICIke2Jhc2VfbGliZGlyfS8qLm8gIiArCisgICAgIiR7ZGF0YWRpcn0vYWNsb2NhbCAiICsKKyAgICAiJHtkYXRhZGlyfS9wa2djb25maWcgIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS0ydG8zIiwgIlB5dGhvbiBhdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0b3IiLCAiJHtQTn0tY29yZSIsCisgICAgIiR7YmluZGlyfS8ydG8zIGxpYjJ0bzMiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pZGxlIiwgIlB5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IiwgIiR7UE59LWNvcmUgJHtQTn0tdGtpbnRlciIsCisgICAgIiR7YmluZGlyfS9pZGxlIGlkbGVsaWIiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1weWRvYyIsICJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiLAorICAgICIke2JpbmRpcn0vcHlkb2MgcHlkb2MuKiBweWRvY19kYXRhIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zbXRwZCIsICJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIsICIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIiwKKyAgICAiJHtiaW5kaXJ9L3NtdHBkLiogc210cGQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tYXVkaW8iLCAiUHl0aG9uIEF1ZGlvIEhhbmRsaW5nIiwgIiR7UE59LWNvcmUiLAorICAgICJ3YXZlLiogY2h1bmsuKiBzbmRoZHIuKiBsaWItZHlubG9hZC9vc3NhdWRpb2Rldi5zbyBsaWItZHlubG9hZC9hdWRpb29wLnNvIGF1ZGlvZGV2Liogc3VuYXVkaW8uKiBzdW5hdS4qIHRvYWlmZi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1ic2RkYiIsICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBCZXJrZWxleSBEYXRhYmFzZSIsICIke1BOfS1jb3JlIiwKKyAgICAiYnNkZGIgbGliLWR5bmxvYWQvX2JzZGRiLnNvIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29kZWNzIiwgIlB5dGhvbiBjb2RlY3MsIGVuY29kaW5ncyAmIGkxOG4gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWxhbmciLAorICAgICJjb2RlY3MuKiBlbmNvZGluZ3MgZ2V0dGV4dC4qIGxvY2FsZS4qIGxpYi1keW5sb2FkL19sb2NhbGUuc28gbGliLWR5bmxvYWQvX2NvZGVjcyogbGliLWR5bmxvYWQvX211bHRpYnl0ZWNvZGVjLnNvIGxpYi1keW5sb2FkL3VuaWNvZGVkYXRhLnNvIHN0cmluZ3ByZXAuKiB4ZHJsaWIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29tcGlsZSIsICJQeXRob24gYnl0ZWNvZGUgY29tcGlsYXRpb24gc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAicHlfY29tcGlsZS4qIGNvbXBpbGVhbGwuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29tcGlsZXIiLCAiUHl0aG9uIGNvbXBpbGVyIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImNvbXBpbGVyIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29tcHJlc3Npb24iLCAiUHl0aG9uIGhpZ2gtbGV2ZWwgY29tcHJlc3Npb24gc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXpsaWIiLAorICAgICJnemlwLiogemlwZmlsZS4qIHRhcmZpbGUuKiBsaWItZHlubG9hZC9iejIuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNyeXB0IiwgIlB5dGhvbiBiYXNpYyBjcnlwdG9ncmFwaGljIGFuZCBoYXNoaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImhhc2hsaWIuKiBtZDUuKiBzaGEuKiBsaWItZHlubG9hZC9jcnlwdC5zbyBsaWItZHlubG9hZC9faGFzaGxpYi5zbyBsaWItZHlubG9hZC9fc2hhMjU2LnNvIGxpYi1keW5sb2FkL19zaGE1MTIuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRleHR1dGlscyIsICJQeXRob24gb3B0aW9uIHBhcnNpbmcsIHRleHQgd3JhcHBpbmcgYW5kIENTViBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIiwKKyAgICAibGliLWR5bmxvYWQvX2Nzdi5zbyBjc3YuKiBvcHRwYXJzZS4qIHRleHR3cmFwLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN1cnNlcyIsICJQeXRob24gY3Vyc2VzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImN1cnNlcyBsaWItZHlubG9hZC9fY3Vyc2VzLnNvIGxpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuc28iICkgIyBkaXJlY3RvcnkgKyBsb3cgbGV2ZWwgbW9kdWxlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1jdHlwZXMiLCAiUHl0aG9uIEMgdHlwZXMgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiY3R5cGVzIGxpYi1keW5sb2FkL19jdHlwZXMuc28gbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0LnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGF0ZXRpbWUiLCAiUHl0aG9uIGNhbGVuZGFyIGFuZCB0aW1lIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiLAorICAgICJfc3RycHRpbWUuKiBjYWxlbmRhci4qIGxpYi1keW5sb2FkL2RhdGV0aW1lLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kYiIsICJQeXRob24gZmlsZS1iYXNlZCBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJhbnlkYm0uKiBkdW1iZGJtLiogd2hpY2hkYi4qICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGVidWdnZXIiLCAiUHl0aG9uIGRlYnVnZ2VyIiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc2hlbGwgJHtQTn0tcHByaW50IiwKKyAgICAiYmRiLiogcGRiLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpZmZsaWIiLCAiUHl0aG9uIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzIiwgIiR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJkaWZmbGliLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYiLCAiUHl0aG9uIGRpc3RyaWJ1dGlvbiB1dGlsaXRpZXMgKHN0YXRpYyBsaWJyYXJpZXMpIiwgIiR7UE59LWRpc3R1dGlscyIsCisgICAgImNvbmZpZy9saWIqLmEiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kaXN0dXRpbHMiLCAiUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiLCAiJHtQTn0tY29yZSIsCisgICAgImNvbmZpZyBkaXN0dXRpbHMiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kb2N0ZXN0IiwgIlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tdW5pdHRlc3QgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiIsCisgICAgImRvY3Rlc3QuKiIgKQorCisgICAgIyBGSVhNRSBjb25zaWRlciBhZGRpbmcgdG8gc29tZSBoaWdoZXIgbGV2ZWwgcGFja2FnZQorICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWVsZW1lbnR0cmVlIiwgIlB5dGhvbiBlbGVtZW50cmVlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fZWxlbWVudHRyZWUuc28iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWVtYWlsIiwgIlB5dGhvbiBlbWFpbCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tbWltZSAke1BOfS1hdWRpbyAke1BOfS1pbWFnZSAke1BOfS1uZXRjbGllbnQiLAorICAgICJpbWFwbGliLiogZW1haWwiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1mY250bCIsICJQeXRob24ncyBmY250bCBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL2ZjbnRsLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1ob3RzaG90IiwgIlB5dGhvbiBob3RzaG90IHBlcmZvcm1hbmNlIHByb2ZpbGVyIiwgIiR7UE59LWNvcmUiLAorICAgICJob3RzaG90IGxpYi1keW5sb2FkL19ob3RzaG90LnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1odG1sIiwgIlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiZm9ybWF0dGVyLiogaHRtbGVudGl0eWRlZnMuKiBodG1sbGliLiogbWFya3VwYmFzZS4qIHNnbWxsaWIuKiBIVE1MUGFyc2VyLiogIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbXBvcnRsaWIiLCAiUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IiwgIiR7UE59LWNvcmUiLAorICAgICJpbXBvcnRsaWIiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWdkYm0iLCAiUHl0aG9uIEdOVSBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9nZGJtLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbWFnZSIsICJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIiwgIiR7UE59LWNvcmUiLAorICAgICJjb2xvcnN5cy4qIGltZ2hkci4qIGxpYi1keW5sb2FkL2ltYWdlb3Auc28gbGliLWR5bmxvYWQvcmdiaW1nLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbyIsICJQeXRob24gbG93LWxldmVsIEkvTyIsICIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tdGV4dHV0aWxzICR7UE59LW5ldGNsaWVudCAke1BOfS1jb250ZXh0bGliIiwKKyAgICAibGliLWR5bmxvYWQvX3NvY2tldC5zbyBsaWItZHlubG9hZC9faW8uc28gbGliLWR5bmxvYWQvX3NzbC5zbyBsaWItZHlubG9hZC9zZWxlY3Quc28gbGliLWR5bmxvYWQvdGVybWlvcy5zbyBsaWItZHlubG9hZC9jU3RyaW5nSU8uc28gIiArCisgICAgInBpcGVzLiogc29ja2V0Liogc3NsLiogdGVtcGZpbGUuKiBTdHJpbmdJTy4qIGlvLiogX3B5aW8uKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tanNvbiIsICJQeXRob24gSlNPTiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS1yZSAke1BOfS1jb2RlY3MiLAorICAgICJqc29uIGxpYi1keW5sb2FkL19qc29uLnNvIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbGFuZyIsICJQeXRob24gbG93LWxldmVsIGxhbmd1YWdlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL19iaXNlY3Quc28gbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLnNvIGxpYi1keW5sb2FkL19oZWFwcS5zbyBsaWItZHlubG9hZC9fd2Vha3JlZi5zbyBsaWItZHlubG9hZC9fZnVuY3Rvb2xzLnNvICIgKworICAgICJsaWItZHlubG9hZC9hcnJheS5zbyBsaWItZHlubG9hZC9pdGVydG9vbHMuc28gbGliLWR5bmxvYWQvb3BlcmF0b3Iuc28gbGliLWR5bmxvYWQvcGFyc2VyLnNvICIgKworICAgICJhdGV4aXQuKiBiaXNlY3QuKiBjb2RlLiogY29kZW9wLiogY29sbGVjdGlvbnMuKiBkaXMuKiBmdW5jdG9vbHMuKiBoZWFwcS4qIGluc3BlY3QuKiBrZXl3b3JkLiogb3Bjb2RlLiogc3ltYm9sLiogcmVwci4qIHRva2VuLiogIiArCisgICAgInRva2VuaXplLiogdHJhY2ViYWNrLiogd2Vha3JlZi4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1sb2dnaW5nIiwgIlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiLAorICAgICJsb2dnaW5nIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAorICAgICJtYWlsYm94LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW1hdGgiLCAiUHl0aG9uIG1hdGggc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNyeXB0IiwKKyAgICAibGliLWR5bmxvYWQvY21hdGguc28gbGliLWR5bmxvYWQvbWF0aC5zbyBsaWItZHlubG9hZC9fcmFuZG9tLnNvIHJhbmRvbS4qIHNldHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWltZSIsICJQeXRob24gTUlNRSBoYW5kbGluZyBBUElzIiwgIiR7UE59LWNvcmUgJHtQTn0taW8iLAorICAgICJtaW1ldG9vbHMuKiB1dS4qIHF1b3ByaS4qIHJmYzgyMi4qIE1pbWVXcml0ZXIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbW1hcCIsICJQeXRob24gbWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgImxpYi1keW5sb2FkL21tYXAuc28gIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tdWx0aXByb2Nlc3NpbmciLCAiUHl0aG9uIG11bHRpcHJvY2Vzc2luZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tdGhyZWFkaW5nICR7UE59LWN0eXBlcyAke1BOfS1tbWFwIiwKKyAgICAibGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy5zbyBtdWx0aXByb2Nlc3NpbmciICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1uZXRjbGllbnQiLCAiUHl0aG9uIEludGVybmV0IFByb3RvY29sIGNsaWVudHMiLCAiJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1kYXRldGltZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWltZSIsCisgICAgIipDb29raWUqLiogIiArCisgICAgImJhc2U2NC4qIGNvb2tpZWxpYi4qIGZ0cGxpYi4qIGdvcGhlcmxpYi4qIGhtYWMuKiBodHRwbGliLiogbWltZXR5cGVzLiogbm50cGxpYi4qIHBvcGxpYi4qIHNtdHBsaWIuKiB0ZWxuZXRsaWIuKiB1cmxsaWIuKiB1cmxsaWIyLiogdXJscGFyc2UuKiB1dWlkLiogcmZjODIyLiogbWltZXRvb2xzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW5ldHNlcnZlciIsICJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgc2VydmVycyIsICIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciLAorICAgICJjZ2kuKiAqSFRUUFNlcnZlci4qIFNvY2tldFNlcnZlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1udW1iZXJzIiwgIlB5dGhvbiBudW1iZXIgQVBJcyIsICIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tcmUiLAorICAgICJkZWNpbWFsLiogZnJhY3Rpb25zLiogbnVtYmVycy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1waWNrbGUiLCAiUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1yZSIsCisgICAgInBpY2tsZS4qIHNoZWx2ZS4qIGxpYi1keW5sb2FkL2NQaWNrbGUuc28gcGlja2xldG9vbHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcGtndXRpbCIsICJQeXRob24gcGFja2FnZSBleHRlbnNpb24gdXRpbGl0eSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJwa2d1dGlsLioiKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcHByaW50IiwgIlB5dGhvbiBwcmV0dHktcHJpbnQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAicHByaW50LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXByb2ZpbGUiLCAiUHl0aG9uIGJhc2ljIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tdGV4dHV0aWxzIiwKKyAgICAicHJvZmlsZS4qIHBzdGF0cy4qIGNQcm9maWxlLiogbGliLWR5bmxvYWQvX2xzcHJvZi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmUiLCAiUHl0aG9uIFJlZ3VsYXIgRXhwcmVzc2lvbiBBUElzIiwgIiR7UE59LWNvcmUiLAorICAgICJyZS4qIHNyZS4qIHNyZV9jb21waWxlLiogc3JlX2NvbnN0YW50cyogc3JlX3BhcnNlLioiICkgIyBfc3JlIGlzIGJ1aWx0aW4KKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlYWRsaW5lIiwgIlB5dGhvbiByZWFkbGluZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9yZWFkbGluZS5zbyBybGNvbXBsZXRlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yZXNvdXJjZSIsICJQeXRob24gcmVzb3VyY2UgY29udHJvbCBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3Jlc291cmNlLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zaGVsbCIsICJQeXRob24gc2hlbGwtbGlrZSBmdW5jdGlvbmFsaXR5IiwgIiR7UE59LWNvcmUgJHtQTn0tcmUiLAorICAgICJjbWQuKiBjb21tYW5kcy4qIGRpcmNhY2hlLiogZm5tYXRjaC4qIGdsb2IuKiBwb3BlbjIuKiBzaGxleC4qIHNodXRpbC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1yb2JvdHBhcnNlciIsICJQeXRob24gcm9ib3RzLnR4dCBwYXJzZXIiLCAiJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQiLAorICAgICJyb2JvdHBhcnNlci4qIikKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN1YnByb2Nlc3MiLCAiUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIsCisgICAgInN1YnByb2Nlc3MuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3FsaXRlMyIsICJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tbGFuZyAke1BOfS1jcnlwdCAke1BOfS1pbyAke1BOfS10aHJlYWRpbmcgJHtQTn0temxpYiIsCisgICAgImxpYi1keW5sb2FkL19zcWxpdGUzLnNvIHNxbGl0ZTMvZGJhcGkyLiogc3FsaXRlMy9fX2luaXRfXy4qIHNxbGl0ZTMvZHVtcC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zcWxpdGUzLXRlc3RzIiwgIlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQgdGVzdHMiLCAiJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIiwKKyAgICAic3FsaXRlMy90ZXN0IiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zdHJpbmdvbGQiLCAiUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICAibGliLWR5bmxvYWQvc3Ryb3Auc28gc3RyaW5nLiogc3RyaW5nb2xkLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN5c2xvZyIsICJQeXRob24gc3lzbG9nIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvc3lzbG9nLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXJtaW5hbCIsICJQeXRob24gdGVybWluYWwgY29udHJvbGxpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAicHR5LiogdHR5LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRlc3RzIiwgIlB5dGhvbiB0ZXN0cyIsICIke1BOfS1jb3JlIiwKKyAgICAidGVzdCIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRocmVhZGluZyIsICJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKKyAgICAiX3RocmVhZGluZ19sb2NhbC4qIGR1bW15X3RocmVhZC4qIGR1bW15X3RocmVhZGluZy4qIG11dGV4LiogdGhyZWFkaW5nLiogUXVldWUuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGtpbnRlciIsICJQeXRob24gVGNsL1RrIGJpbmRpbmdzIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fdGtpbnRlci5zbyBsaWItdGsiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS11bml0dGVzdCIsICJQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayIsICIke1BOfS1jb3JlICR7UE59LXN0cmluZ29sZCAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LWRpZmZsaWIgJHtQTn0tcHByaW50ICR7UE59LXNoZWxsIiwKKyAgICAidW5pdHRlc3QvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS11bml4YWRtaW4iLCAiUHl0aG9uIFVuaXggYWRtaW5pc3RyYXRpb24gc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvbmlzLnNvIGxpYi1keW5sb2FkL2dycC5zbyBsaWItZHlubG9hZC9wd2Quc28gZ2V0cGFzcy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS14bWwiLCAiUHl0aG9uIGJhc2ljIFhNTCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tcmUiLAorICAgICJsaWItZHlubG9hZC9weWV4cGF0LnNvIHhtbCB4bWxsaWIuKiIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXhtbHJwYyIsICJQeXRob24gWE1MLVJQQyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0teG1sICR7UE59LW5ldHNlcnZlciAke1BOfS1sYW5nIiwKKyAgICAieG1scnBjbGliLiogU2ltcGxlWE1MUlBDU2VydmVyLiogRG9jWE1MUlBDU2VydmVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXpsaWIiLCAiUHl0aG9uIHpsaWIgY29tcHJlc3Npb24gc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvemxpYi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWFpbGJveCIsICJQeXRob24gbWFpbGJveCBmb3JtYXQgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LW1pbWUiLAorICAgICJtYWlsYm94LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWFyZ3BhcnNlIiwgIlB5dGhvbiBjb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2VyIiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LXRleHR1dGlscyIsCisgICAgImFyZ3BhcnNlLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbnRleHRsaWIiLCAiUHl0aG9uIHV0aWxpdGllcyBmb3Igd2l0aC1zdGF0ZW1lbnQiICsKKyAgICAiY29udGV4dHMuIiwgIiR7UE59LWNvcmUiLAorICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb250ZXh0bGliLioiICkKKworICAgIG0ubWFrZSgpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weSBiL3NjcmlwdHMvY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMy40LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZWVjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvcHl0aG9uL2dlbmVyYXRlLW1hbmlmZXN0LTMuNC5weQpAQCAtMCwwICsxLDM4OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgZ2VuZXJhdGUgUHl0aG9uIE1hbmlmZXN0IGZvciB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbQorIyAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyAoQykgMjAwNyBKZXJlbXkgTGFpbmUKKyMgbGljZW5zZWQgdW5kZXIgTUlULCBzZWUgQ09QWUlORy5NSVQKKyMKKyMgSnVuZSAyMiwgMjAxMSAtLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisjICAqIFVwZGF0ZWQgdG8gbm8gbG9uZ2VyIGdlbmVyYXRlIHNwZWNpYWwgLWRiZyBwYWNrYWdlLCBpbnN0ZWFkIHVzZSB0aGUKKyMgICAgc2luZ2xlIHN5c3RlbSAtZGJnCisjICAqIFVwZGF0ZSB2ZXJzaW9uIHdpdGggIi4xIiB0byBpbmRpY2F0ZSB0aGlzIGNoYW5nZQorIworIyAyMDE0IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIEFkZGVkIHB5dGhvbjMgc3VwcG9ydAorIworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitWRVJTSU9OID0gIjMuNC4yIgorCitfX2F1dGhvcl9fID0gIk1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPiIKK19fdmVyc2lvbl9fID0gIjIwMTQwMTMxIgorCitjbGFzcyBNYWtlZmlsZU1ha2VyOgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBvdXRmaWxlICk6CisgICAgICAgICIiImluaXRpYWxpemUiIiIKKyAgICAgICAgc2VsZi5wYWNrYWdlcyA9IHt9CisgICAgICAgIHNlbGYudGFyZ2V0UHJlZml4ID0gIiR7bGliZGlyfS9weXRob24lcy8iICUgVkVSU0lPTls6M10KKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRmaWxlCisgICAgICAgIHNlbGYub3V0KCAiIiIKKyMgV0FSTklORzogVGhpcyBmaWxlIGlzIEFVVE8gR0VORVJBVEVEOiBNYW51YWwgZWRpdHMgd2lsbCBiZSBsb3N0IG5leHQgdGltZSBJIHJlZ2VuZXJhdGUgdGhlIGZpbGUuCisjIEdlbmVyYXRvcjogJyVzJyBWZXJzaW9uICVzIChDKSAyMDAyLTIwMTAgTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWxhdWVyQHZhbmlsbGUtbWVkaWEuZGU+CisjIFZpc2l0IHRoZSBQeXRob24gZm9yIEVtYmVkZGVkIFN5c3RlbXMgU2l0ZSA9PiBodHRwOi8vd3d3LlZhbmlsbGUuZGUvcHJvamVjdHMvcHl0aG9uLnNweQorIiIiICUgKCBzeXMuYXJndlswXSwgX192ZXJzaW9uX18gKSApCisKKyAgICAjCisgICAgIyBoZWxwZXIgZnVuY3Rpb25zCisgICAgIworCisgICAgZGVmIG91dCggc2VsZiwgZGF0YSApOgorICAgICAgICAiIiJwcmludCBhIGxpbmUgdG8gdGhlIG91dHB1dCBmaWxlIiIiCisgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCAiJXNcbiIgJSBkYXRhICkKKworICAgIGRlZiBzZXRQcmVmaXgoIHNlbGYsIHRhcmdldFByZWZpeCApOgorICAgICAgICAiIiJzZXQgYSBmaWxlIHByZWZpeCBmb3IgYWRkUGFja2FnZSBmaWxlcyIiIgorICAgICAgICBzZWxmLnRhcmdldFByZWZpeCA9IHRhcmdldFByZWZpeAorCisgICAgZGVmIGRvUHJvbG9nKCBzZWxmICk6CisgICAgICAgIHNlbGYub3V0KCAiIiIgIiIiICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgIGRlZiBhZGRQYWNrYWdlKCBzZWxmLCBuYW1lLCBkZXNjcmlwdGlvbiwgZGVwZW5kZW5jaWVzLCBmaWxlbmFtZXMgKToKKyAgICAgICAgIiIiYWRkIGEgcGFja2FnZSB0byB0aGUgTWFrZWZpbGUiIiIKKyAgICAgICAgaWYgdHlwZSggZmlsZW5hbWVzICkgPT0gdHlwZSggIiIgKToKKyAgICAgICAgICAgIGZpbGVuYW1lcyA9IGZpbGVuYW1lcy5zcGxpdCgpCisgICAgICAgIGZ1bGxGaWxlbmFtZXMgPSBbXQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgaWYgZmlsZW5hbWVbMF0gIT0gIiQiOgorICAgICAgICAgICAgICAgIGZ1bGxGaWxlbmFtZXMuYXBwZW5kKCAiJXMlcyIgJSAoIHNlbGYudGFyZ2V0UHJlZml4LCBmaWxlbmFtZSApICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVsbEZpbGVuYW1lcy5hcHBlbmQoIGZpbGVuYW1lICkKKyAgICAgICAgc2VsZi5wYWNrYWdlc1tuYW1lXSA9IGRlc2NyaXB0aW9uLCBkZXBlbmRlbmNpZXMsIGZ1bGxGaWxlbmFtZXMKKworICAgIGRlZiBkb0JvZHkoIHNlbGYgKToKKyAgICAgICAgIiIiZ2VuZXJhdGUgYm9keSBvZiBNYWtlZmlsZSIiIgorCisgICAgICAgIGdsb2JhbCBWRVJTSU9OCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHByb3ZpZGVzIGxpbmUKKyAgICAgICAgIworCisgICAgICAgIHByb3ZpZGVMaW5lID0gJ1BST1ZJREVTKz0iJworICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcyk6CisgICAgICAgICAgICBwcm92aWRlTGluZSArPSAiJXMgIiAlIG5hbWUKKyAgICAgICAgcHJvdmlkZUxpbmUgKz0gJyInCisKKyAgICAgICAgc2VsZi5vdXQoIHByb3ZpZGVMaW5lICkKKyAgICAgICAgc2VsZi5vdXQoICIiICkKKworICAgICAgICAjCisgICAgICAgICMgZ2VuZXJhdGUgcGFja2FnZSBsaW5lCisgICAgICAgICMKKworICAgICAgICBwYWNrYWdlTGluZSA9ICdQQUNLQUdFUz0iJHtQTn0tZGJnICcKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHNlbGYucGFja2FnZXMpOgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCIke1BOfS1kaXN0dXRpbHMiKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICIke1BOfS1kaXN0dXRpbHMiOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTGluZSArPSAiJXMtc3RhdGljZGV2ICVzICIgJSAobmFtZSwgbmFtZSkKKyAgICAgICAgICAgIGVsaWYgbmFtZSAhPSAnJHtQTn0tZGJnJzoKKyAgICAgICAgICAgICAgICBwYWNrYWdlTGluZSArPSAiJXMgIiAlIG5hbWUKKyAgICAgICAgcGFja2FnZUxpbmUgKz0gJyR7UE59LW1vZHVsZXMiJworCisgICAgICAgIHNlbGYub3V0KCBwYWNrYWdlTGluZSApCisgICAgICAgIHNlbGYub3V0KCAiIiApCisKKyAgICAgICAgIworICAgICAgICAjIGdlbmVyYXRlIHBhY2thZ2UgdmFyaWFibGVzCisgICAgICAgICMKKworICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBzb3J0ZWQoc2VsZi5wYWNrYWdlcy5pdGVyaXRlbXMoKSk6CisgICAgICAgICAgICBkZXNjLCBkZXBzLCBmaWxlcyA9IGRhdGEKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyB3cml0ZSBvdXQgdGhlIGRlc2NyaXB0aW9uLCByZXZpc2lvbiBhbmQgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBzZWxmLm91dCggJ1NVTU1BUllfJXM9IiVzIicgJSAoIG5hbWUsIGRlc2MgKSApCisgICAgICAgICAgICBzZWxmLm91dCggJ1JERVBFTkRTXyVzPSIlcyInICUgKCBuYW1lLCBkZXBzICkgKQorCisgICAgICAgICAgICBsaW5lID0gJ0ZJTEVTXyVzPSInICUgbmFtZQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGNoZWNrIHdoaWNoIGRpcmVjdG9yaWVzIHRvIG1ha2UgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICAgICAgICAgICMKKworICAgICAgICAgICAgZGlyc2V0ID0ge30gIyBpZiBweXRob24gaGFkIGEgc2V0LWRhdGF0eXBlIHRoaXMgd291bGQgYmUgc3VmZmljaWVudC4gZm9yIG5vdywgd2UncmUgdXNpbmcgYSBkaWN0IGluc3RlYWQuCisgICAgICAgICAgICBmb3IgdGFyZ2V0IGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGRpcnNldFtvcy5wYXRoLmRpcm5hbWUoIHRhcmdldCApXSA9IFRydWUKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBnZW5lcmF0ZSB3aGljaCBmaWxlcyB0byBjb3B5IGZvciB0aGUgdGFyZ2V0ICgtZGZSIGJlY2F1c2Ugd2hvbGUgZGlyZWN0b3JpZXMgYXJlIGFsc28gYWxsb3dlZCkKKyAgICAgICAgICAgICMKKworICAgICAgICAgICAgZm9yIHRhcmdldCBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBsaW5lICs9ICIlcyAiICUgdGFyZ2V0CisKKyAgICAgICAgICAgIGxpbmUgKz0gJyInCisgICAgICAgICAgICBzZWxmLm91dCggbGluZSApCisgICAgICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgICAgIHNlbGYub3V0KCAnU1VNTUFSWV8ke1BOfS1tb2R1bGVzPSJBbGwgUHl0aG9uIG1vZHVsZXMiJyApCisgICAgICAgIGxpbmUgPSAnUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJworCisgICAgICAgIGZvciBuYW1lLCBkYXRhIGluIHNvcnRlZChzZWxmLnBhY2thZ2VzLml0ZXJpdGVtcygpKToKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIFsnJHtQTn0tZGV2JywgJyR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYnXToKKyAgICAgICAgICAgICAgICBsaW5lICs9ICIlcyAiICUgbmFtZQorCisgICAgICAgIHNlbGYub3V0KCAiJXMgXCIiICUgbGluZSApCisgICAgICAgIHNlbGYub3V0KCAnQUxMT1dfRU1QVFlfJHtQTn0tbW9kdWxlcyA9ICIxIicgKQorCisgICAgZGVmIGRvRXBpbG9nKCBzZWxmICk6CisgICAgICAgIHNlbGYub3V0KCAiIiIiIiIgKQorICAgICAgICBzZWxmLm91dCggIiIgKQorCisgICAgZGVmIG1ha2UoIHNlbGYgKToKKyAgICAgICAgc2VsZi5kb1Byb2xvZygpCisgICAgICAgIHNlbGYuZG9Cb2R5KCkKKyAgICAgICAgc2VsZi5kb0VwaWxvZygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisKKyAgICBpZiBsZW4oIHN5cy5hcmd2ICkgPiAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3lzLmFyZ3ZbMV0pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzeXMuZXhjX2NsZWFyKCkKKyAgICAgICAgb3V0ZmlsZSA9IGZpbGUoIHN5cy5hcmd2WzFdLCAidyIgKQorICAgIGVsc2U6CisgICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0CisKKyAgICBtID0gTWFrZWZpbGVNYWtlciggb3V0ZmlsZSApCisKKyAgICAjIEFkZCBwYWNrYWdlcyBoZXJlLiBPbmx5IHNwZWNpZnkgZGxvcGVuLXN0eWxlIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGhlcmUsIG5vIGxkZC1zdHlsZSBkZXBlbmRlbmNpZXMhCisgICAgIyBQYXJhbWV0ZXJzOiByZXZpc2lvbiwgbmFtZSwgZGVzY3JpcHRpb24sIGRlcGVuZGVuY2llcywgZmlsZW5hbWVzCisgICAgIworCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY29yZSIsICJQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGNvcmUgbW9kdWxlcyIsICIke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXJlcHJsaWIgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LW1hdGgiLAorICAgICJfX2Z1dHVyZV9fLiogX2FiY29sbC4qIGFiYy4qIGNvcHkuKiBjb3B5cmVnLiogQ29uZmlnUGFyc2VyLiogIiArCisgICAgImdlbmVyaWNwYXRoLiogZ2V0b3B0LiogbGluZWNhY2hlLiogbmV3LiogIiArCisgICAgIm9zLiogcG9zaXhwYXRoLiogc3RydWN0LiogIiArCisgICAgIndhcm5pbmdzLiogc2l0ZS4qIHN0YXQuKiAiICsKKyAgICAiVXNlckRpY3QuKiBVc2VyTGlzdC4qIFVzZXJTdHJpbmcuKiAiICsKKyAgICAibGliLWR5bmxvYWQvYmluYXNjaWkuKi5zbyBsaWItZHlubG9hZC9fc3RydWN0Liouc28gbGliLWR5bmxvYWQvdGltZS4qLnNvICIgKworICAgICJsaWItZHlubG9hZC94cmVhZGxpbmVzLiouc28gdHlwZXMuKiBwbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICIgICsgCisgICAgIl93ZWFrcmVmc2V0Liogc3lzY29uZmlnLiogX3N5c2NvbmZpZ2RhdGEuKiBjb25maWcvTWFrZWZpbGUgIiArCisgICAgIiR7aW5jbHVkZWRpcn0vcHl0aG9uJHtQWVRIT05fQklOQUJJfS9weWNvbmZpZyouaCAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29sbGVjdGlvbnMgIiArCisgICAgIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19jb2xsZWN0aW9uc19hYmMuKiAiICsKKyAgICAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX3NpdGVidWlsdGlucy4qICIgKworICAgICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlY3VzdG9taXplLnB5ICIpCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kZXYiLCAiUHl0aG9uIGRldmVsb3BtZW50IHBhY2thZ2UiLCAiJHtQTn0tY29yZSIsCisgICAgIiR7aW5jbHVkZWRpcn0gIiArCisgICAgIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICIgKworICAgICIke2xpYmRpcn0vKi5sYSAiICsKKyAgICAiJHtsaWJkaXJ9LyouYSAiICsKKyAgICAiJHtsaWJkaXJ9LyoubyAiICsKKyAgICAiJHtsaWJkaXJ9L3BrZ2NvbmZpZyAiICsKKyAgICAiJHtiYXNlX2xpYmRpcn0vKi5hICIgKworICAgICIke2Jhc2VfbGliZGlyfS8qLm8gIiArCisgICAgIiR7ZGF0YWRpcn0vYWNsb2NhbCAiICsKKyAgICAiJHtkYXRhZGlyfS9wa2djb25maWcgIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS0ydG8zIiwgIlB5dGhvbiBhdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0b3IiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYjJ0bzMiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pZGxlIiwgIlB5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IiwgIiR7UE59LWNvcmUgJHtQTn0tdGtpbnRlciIsCisgICAgIiR7YmluZGlyfS9pZGxlIGlkbGVsaWIiICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1weWRvYyIsICJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiLAorICAgICIke2JpbmRpcn0vcHlkb2MgcHlkb2MuKiBweWRvY19kYXRhIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zbXRwZCIsICJQeXRob24gU2ltcGxlIE1haWwgVHJhbnNwb3J0IERhZW1vbiIsICIke1BOfS1jb3JlICR7UE59LW5ldHNlcnZlciAke1BOfS1lbWFpbCAke1BOfS1taW1lIiwKKyAgICAiJHtiaW5kaXJ9L3NtdHBkLiogc210cGQuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tYXVkaW8iLCAiUHl0aG9uIEF1ZGlvIEhhbmRsaW5nIiwgIiR7UE59LWNvcmUiLAorICAgICJ3YXZlLiogY2h1bmsuKiBzbmRoZHIuKiBsaWItZHlubG9hZC9vc3NhdWRpb2Rldi4qLnNvIGxpYi1keW5sb2FkL2F1ZGlvb3AuKi5zbyBhdWRpb2Rldi4qIHN1bmF1ZGlvLiogc3VuYXUuKiB0b2FpZmYuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tYXN5bmNpbyIsICJQeXRob24gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MiLCAiJHtQTn0tY29yZSIsCisgICAgImFzeW5jaW8iICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvZGVjcyIsICJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKKyAgICAiY29kZWNzLiogZW5jb2RpbmdzIGdldHRleHQuKiBsb2NhbGUuKiBsaWItZHlubG9hZC9fbG9jYWxlLiouc28gbGliLWR5bmxvYWQvX2NvZGVjcyogbGliLWR5bmxvYWQvX211bHRpYnl0ZWNvZGVjLiouc28gbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuKi5zbyBzdHJpbmdwcmVwLiogeGRybGliLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXBpbGUiLCAiUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgInB5X2NvbXBpbGUuKiBjb21waWxlYWxsLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWNvbXByZXNzaW9uIiwgIlB5dGhvbiBoaWdoLWxldmVsIGNvbXByZXNzaW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1jb2RlY3MiLAorICAgICJnemlwLiogemlwZmlsZS4qIHRhcmZpbGUuKiBsaWItZHlubG9hZC9iejIuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3J5cHQiLCAiUHl0aG9uIGJhc2ljIGNyeXB0b2dyYXBoaWMgYW5kIGhhc2hpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiaGFzaGxpYi4qIG1kNS4qIHNoYS4qIGxpYi1keW5sb2FkL2NyeXB0Liouc28gbGliLWR5bmxvYWQvX2hhc2hsaWIuKi5zbyBsaWItZHlubG9hZC9fc2hhMjU2Liouc28gbGliLWR5bmxvYWQvX3NoYTUxMi4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXh0dXRpbHMiLCAiUHl0aG9uIG9wdGlvbiBwYXJzaW5nLCB0ZXh0IHdyYXBwaW5nIGFuZCBDU1Ygc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LXN0cmluZ29sZCIsCisgICAgImxpYi1keW5sb2FkL19jc3YuKi5zbyBjc3YuKiBvcHRwYXJzZS4qIHRleHR3cmFwLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWN1cnNlcyIsICJQeXRob24gY3Vyc2VzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImN1cnNlcyBsaWItZHlubG9hZC9fY3Vyc2VzLiouc28gbGliLWR5bmxvYWQvX2N1cnNlc19wYW5lbC4qLnNvIiApICMgZGlyZWN0b3J5ICsgbG93IGxldmVsIG1vZHVsZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tY3R5cGVzIiwgIlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImN0eXBlcyBsaWItZHlubG9hZC9fY3R5cGVzLiouc28gbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0Liouc28iICkgIyBkaXJlY3RvcnkgKyBsb3cgbGV2ZWwgbW9kdWxlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kYXRldGltZSIsICJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIsCisgICAgIl9zdHJwdGltZS4qIGNhbGVuZGFyLiogbGliLWR5bmxvYWQvZGF0ZXRpbWUuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGIiLCAiUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiYW55ZGJtLiogZHVtYmRibS4qIHdoaWNoZGIuKiBkYm0gbGliLWR5bmxvYWQvX2RibS4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1kZWJ1Z2dlciIsICJQeXRob24gZGVidWdnZXIiLCAiJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiLAorICAgICJiZGIuKiBwZGIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlmZmxpYiIsICJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiLCAiJHtQTn0tbGFuZyAke1BOfS1yZSIsCisgICAgImRpZmZsaWIuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2RldiIsICJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiLCAiJHtQTn0tZGlzdHV0aWxzIiwKKyAgICAiY29uZmlnL2xpYiouYSIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRpc3R1dGlscyIsICJQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyIsICIke1BOfS1jb3JlIiwKKyAgICAiY29uZmlnIGRpc3R1dGlscyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWRvY3Rlc3QiLCAiUHl0aG9uIGZyYW1ld29yayBmb3IgcnVubmluZyBleGFtcGxlcyBpbiBkb2NzdHJpbmdzIiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIiwKKyAgICAiZG9jdGVzdC4qIiApCisKKyAgICAjIEZJWE1FIGNvbnNpZGVyIGFkZGluZyB0byBzb21lIGhpZ2hlciBsZXZlbCBwYWNrYWdlCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZWxlbWVudHRyZWUiLCAiUHl0aG9uIGVsZW1lbnRyZWUiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL19lbGVtZW50dHJlZS4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1lbWFpbCIsICJQeXRob24gZW1haWwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LW1pbWUgJHtQTn0tYXVkaW8gJHtQTn0taW1hZ2UgJHtQTn0tbmV0Y2xpZW50IiwKKyAgICAiaW1hcGxpYi4qIGVtYWlsIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tZmNudGwiLCAiUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9mY250bC4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1odG1sIiwgIlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAiZm9ybWF0dGVyLiogaHRtbGVudGl0eWRlZnMuKiBodG1sbGliLiogbWFya3VwYmFzZS4qIHNnbWxsaWIuKiBIVE1MUGFyc2VyLiogIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbXBvcnRsaWIiLCAiUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IiwgIiR7UE59LWNvcmUiLAorICAgICJpbXBvcnRsaWIiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWdkYm0iLCAiUHl0aG9uIEdOVSBkYXRhYmFzZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fZ2RibS4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1pbWFnZSIsICJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIiwgIiR7UE59LWNvcmUiLAorICAgICJjb2xvcnN5cy4qIGltZ2hkci4qIGxpYi1keW5sb2FkL2ltYWdlb3AuKi5zbyBsaWItZHlubG9hZC9yZ2JpbWcuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0taW8iLCAiUHl0aG9uIGxvdy1sZXZlbCBJL08iLCAiJHtQTn0tY29yZSAke1BOfS1tYXRoIiwKKyAgICAibGliLWR5bmxvYWQvX3NvY2tldC4qLnNvIGxpYi1keW5sb2FkL19pby4qLnNvIGxpYi1keW5sb2FkL19zc2wuKi5zbyBsaWItZHlubG9hZC9zZWxlY3QuKi5zbyBsaWItZHlubG9hZC90ZXJtaW9zLiouc28gbGliLWR5bmxvYWQvY1N0cmluZ0lPLiouc28gIiArCisgICAgInBpcGVzLiogc29ja2V0Liogc3NsLiogdGVtcGZpbGUuKiBTdHJpbmdJTy4qIGlvLiogX3B5aW8uKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tanNvbiIsICJQeXRob24gSlNPTiBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS1yZSIsCisgICAgImpzb24gbGliLWR5bmxvYWQvX2pzb24uKi5zbyIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxhbmciLCAiUHl0aG9uIGxvdy1sZXZlbCBsYW5ndWFnZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fYmlzZWN0Liouc28gbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLiouc28gbGliLWR5bmxvYWQvX2hlYXBxLiouc28gbGliLWR5bmxvYWQvX3dlYWtyZWYuKi5zbyBsaWItZHlubG9hZC9fZnVuY3Rvb2xzLiouc28gIiArCisgICAgImxpYi1keW5sb2FkL2FycmF5Liouc28gbGliLWR5bmxvYWQvaXRlcnRvb2xzLiouc28gbGliLWR5bmxvYWQvb3BlcmF0b3IuKi5zbyBsaWItZHlubG9hZC9wYXJzZXIuKi5zbyAiICsKKyAgICAiYXRleGl0LiogYmlzZWN0LiogY29kZS4qIGNvZGVvcC4qIGNvbGxlY3Rpb25zLiogX2NvbGxlY3Rpb25zX2FiYy4qIGRpcy4qIGZ1bmN0b29scy4qIGhlYXBxLiogaW5zcGVjdC4qIGtleXdvcmQuKiBvcGNvZGUuKiBzeW1ib2wuKiByZXByLiogdG9rZW4uKiAiICsKKyAgICAidG9rZW5pemUuKiB0cmFjZWJhY2suKiB3ZWFrcmVmLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LWxvZ2dpbmciLCAiUHl0aG9uIGxvZ2dpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIsCisgICAgImxvZ2dpbmciICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYWlsYm94IiwgIlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWltZSIsCisgICAgIm1haWxib3guKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbWF0aCIsICJQeXRob24gbWF0aCBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9jbWF0aC4qLnNvIGxpYi1keW5sb2FkL21hdGguKi5zbyBsaWItZHlubG9hZC9fcmFuZG9tLiouc28gcmFuZG9tLiogc2V0cy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1taW1lIiwgIlB5dGhvbiBNSU1FIGhhbmRsaW5nIEFQSXMiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgIm1pbWV0b29scy4qIHV1LiogcXVvcHJpLiogcmZjODIyLiogTWltZVdyaXRlci4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tbWFwIiwgIlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAibGliLWR5bmxvYWQvbW1hcC4qLnNvICIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbXVsdGlwcm9jZXNzaW5nIiwgIlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXRocmVhZGluZyAke1BOfS1jdHlwZXMgJHtQTn0tbW1hcCIsCisgICAgImxpYi1keW5sb2FkL19tdWx0aXByb2Nlc3NpbmcuKi5zbyBtdWx0aXByb2Nlc3NpbmciICkgIyBwYWNrYWdlCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1uZXRjbGllbnQiLCAiUHl0aG9uIEludGVybmV0IFByb3RvY29sIGNsaWVudHMiLCAiJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1kYXRldGltZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWltZSIsCisgICAgIipDb29raWUqLiogIiArCisgICAgImJhc2U2NC4qIGNvb2tpZWxpYi4qIGZ0cGxpYi4qIGdvcGhlcmxpYi4qIGhtYWMuKiBodHRwbGliLiogbWltZXR5cGVzLiogbm50cGxpYi4qIHBvcGxpYi4qIHNtdHBsaWIuKiB0ZWxuZXRsaWIuKiB1cmxsaWIgIHV1aWQuKiByZmM4MjIuKiBtaW1ldG9vbHMuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tbmV0c2VydmVyIiwgIlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBzZXJ2ZXJzIiwgIiR7UE59LWNvcmUgJHtQTn0tbmV0Y2xpZW50ICR7UE59LXNoZWxsICR7UE59LXRocmVhZGluZyIsCisgICAgImNnaS4qICpIVFRQU2VydmVyLiogU29ja2V0U2VydmVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LW51bWJlcnMiLCAiUHl0aG9uIG51bWJlciBBUElzIiwgIiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1yZSIsCisgICAgImRlY2ltYWwuKiBmcmFjdGlvbnMuKiBudW1iZXJzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBpY2tsZSIsICJQeXRob24gc2VyaWFsaXNhdGlvbi9wZXJzaXN0ZW5jZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tY29kZWNzICR7UE59LWlvICR7UE59LXJlIiwKKyAgICAicGlja2xlLiogc2hlbHZlLiogbGliLWR5bmxvYWQvY1BpY2tsZS4qLnNvIHBpY2tsZXRvb2xzLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBrZ3V0aWwiLCAiUHl0aG9uIHBhY2thZ2UgZXh0ZW5zaW9uIHV0aWxpdHkgc3VwcG9ydCIsICIke1BOfS1jb3JlIiwKKyAgICAicGtndXRpbC4qIikKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXBwcmludCIsICJQeXRob24gcHJldHR5LXByaW50IHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1pbyIsCisgICAgInBwcmludC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1wcm9maWxlIiwgIlB5dGhvbiBiYXNpYyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIsCisgICAgInByb2ZpbGUuKiBwc3RhdHMuKiBjUHJvZmlsZS4qIGxpYi1keW5sb2FkL19sc3Byb2YuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tcmUiLCAiUHl0aG9uIFJlZ3VsYXIgRXhwcmVzc2lvbiBBUElzIiwgIiR7UE59LWNvcmUiLAorICAgICJyZS4qIHNyZS4qIHNyZV9jb21waWxlLiogc3JlX2NvbnN0YW50cyogc3JlX3BhcnNlLioiICkgIyBfc3JlIGlzIGJ1aWx0aW4KKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlYWRsaW5lIiwgIlB5dGhvbiByZWFkbGluZSBzdXBwb3J0IiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9yZWFkbGluZS4qLnNvIHJsY29tcGxldGVyLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlcHJsaWIiLCAiUHl0aG9uIGFsdGVybmF0ZSByZXByKCkgaW1wbGVtZW50YXRpb24iLCAiJHtQTn0tY29yZSIsCisgICAgInJlcHJsaWIucHkiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXJlc291cmNlIiwgIlB5dGhvbiByZXNvdXJjZSBjb250cm9sIGludGVyZmFjZSIsICIke1BOfS1jb3JlIiwKKyAgICAibGliLWR5bmxvYWQvcmVzb3VyY2UuKi5zbyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc2hlbGwiLCAiUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIsICIke1BOfS1jb3JlICR7UE59LXJlIiwKKyAgICAiY21kLiogY29tbWFuZHMuKiBkaXJjYWNoZS4qIGZubWF0Y2guKiBnbG9iLiogcG9wZW4yLiogc2hsZXguKiBzaHV0aWwuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tc3VicHJvY2VzcyIsICJQeXRob24gc3VicHJvY2VzcyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIiwKKyAgICAic3VicHJvY2Vzcy4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zcWxpdGUzIiwgIlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1kYXRldGltZSAke1BOfS1sYW5nICR7UE59LWNyeXB0ICR7UE59LWlvICR7UE59LXRocmVhZGluZyIsCisgICAgImxpYi1keW5sb2FkL19zcWxpdGUzLiouc28gc3FsaXRlMy9kYmFwaTIuKiBzcWxpdGUzL19faW5pdF9fLiogc3FsaXRlMy9kdW1wLioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXNxbGl0ZTMtdGVzdHMiLCAiUHl0aG9uIFNxbGl0ZTMgZGF0YWJhc2Ugc3VwcG9ydCB0ZXN0cyIsICIke1BOfS1jb3JlICR7UE59LXNxbGl0ZTMiLAorICAgICJzcWxpdGUzL3Rlc3QiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXN0cmluZ29sZCIsICJQeXRob24gc3RyaW5nIEFQSXMgW2RlcHJlY2F0ZWRdIiwgIiR7UE59LWNvcmUgJHtQTn0tcmUiLAorICAgICJsaWItZHlubG9hZC9zdHJvcC4qLnNvIHN0cmluZy4qIHN0cmluZ29sZC4qIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1zeXNsb2ciLCAiUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL3N5c2xvZy4qLnNvIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS10ZXJtaW5hbCIsICJQeXRob24gdGVybWluYWwgY29udHJvbGxpbmcgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWlvIiwKKyAgICAicHR5LiogdHR5LioiICkKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRlc3RzIiwgIlB5dGhvbiB0ZXN0cyIsICIke1BOfS1jb3JlIiwKKyAgICAidGVzdCIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXRocmVhZGluZyIsICJQeXRob24gdGhyZWFkaW5nICYgc3luY2hyb25pemF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSAke1BOfS1sYW5nIiwKKyAgICAiX3RocmVhZGluZ19sb2NhbC4qIGR1bW15X3RocmVhZC4qIGR1bW15X3RocmVhZGluZy4qIG11dGV4LiogdGhyZWFkaW5nLiogUXVldWUuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdGtpbnRlciIsICJQeXRob24gVGNsL1RrIGJpbmRpbmdzIiwgIiR7UE59LWNvcmUiLAorICAgICJsaWItZHlubG9hZC9fdGtpbnRlci4qLnNvIGxpYi10ayB0a2ludGVyIiApICMgcGFja2FnZQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdW5pdHRlc3QiLCAiUHl0aG9uIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsiLCAiJHtQTn0tY29yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1kaWZmbGliICR7UE59LXBwcmludCAke1BOfS1zaGVsbCIsCisgICAgInVuaXR0ZXN0LyIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0tdW5peGFkbWluIiwgIlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiLCAiJHtQTn0tY29yZSIsCisgICAgImxpYi1keW5sb2FkL25pcy4qLnNvIGxpYi1keW5sb2FkL2dycC4qLnNvIGxpYi1keW5sb2FkL3B3ZC4qLnNvIGdldHBhc3MuKiIgKQorCisgICAgbS5hZGRQYWNrYWdlKCAiJHtQTn0teG1sIiwgIlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIsICIke1BOfS1jb3JlICR7UE59LWVsZW1lbnR0cmVlICR7UE59LXJlIiwKKyAgICAibGliLWR5bmxvYWQvcHlleHBhdC4qLnNvIHhtbCB4bWxsaWIuKiIgKSAjIHBhY2thZ2UKKworICAgIG0uYWRkUGFja2FnZSggIiR7UE59LXhtbHJwYyIsICJQeXRob24gWE1MLVJQQyBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0teG1sICR7UE59LW5ldHNlcnZlciAke1BOfS1sYW5nIiwKKyAgICAieG1scnBjbGliLiogU2ltcGxlWE1MUlBDU2VydmVyLiogRG9jWE1MUlBDU2VydmVyLiogeG1scnBjIiApCisKKyAgICBtLmFkZFBhY2thZ2UoICIke1BOfS1tYWlsYm94IiwgIlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IiwgIiR7UE59LWNvcmUgJHtQTn0tbWltZSIsCisgICAgIm1haWxib3guKiIgKQorCisgICAgbS5tYWtlKCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29udHJpYi9zZXJkZXZ0cnkgYi9zY3JpcHRzL2NvbnRyaWIvc2VyZGV2dHJ5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc0YmQ3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvc2VyZGV2dHJ5CkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworaWYgWyAiJDEiID0gIiIgLW8gIiQxIiA9ICItLWhlbHAiIF0gOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6ICQwIDxzZXJpYWwgdGVybWluYWwgY29tbWFuZD4iCisgICAgZWNobworICAgIGVjaG8gIlNpbXBsZSBzY3JpcHQgdG8gaGFuZGxlIG1haW50YWluaW5nIGEgdGVybWluYWwgZm9yIHNlcmlhbCBkZXZpY2VzIHRoYXQiCisgICAgZWNobyAiZGlzYXBwZWFyIHdoZW4gYSBkZXZpY2UgaXMgcG93ZXJlZCBkb3duIG9yIHJlc2V0LCBzdWNoIGFzIHRoZSBVU0IiCisgICAgZWNobyAic2VyaWFsIGNvbnNvbGUgb24gdGhlIG9yaWdpbmFsIEJlYWdsZUJvbmUgKHdoaXRlIHZlcnNpb24pLiIKKyAgICBlY2hvCisgICAgZWNobyAiZS5nLiAkMCBwaWNvY29tIC1iIDExNTIwMCAvZGV2L3R0eVVTQjAiCisgICAgZWNobworICAgIGV4aXQKK2ZpCisKK2FyZ3M9IiRAIgorREVWSUNFPSIiCit3aGlsZSBbICIkMSIgIT0gIiIgXTsgZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgL2Rldi8qKQorICAgICAgICAgICAgREVWSUNFPSQxCisgICAgICAgICAgICBicmVhazs7CisgICAgZXNhYworICAgIHNoaWZ0Citkb25lCisKK2lmIFsgIiRERVZJQ0UiICE9ICIiIF0gOyB0aGVuCisgICAgd2hpbGUgdHJ1ZTsgZG8KKyAgICAgICAgaWYgWyAhIC1lICRERVZJQ0UgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gInNlcmRldnRyeTogd2FpdGluZyBmb3IgJERFVklDRSB0byBleGlzdC4uLiIKKyAgICAgICAgICAgIHdoaWxlIFsgISAtZSAkREVWSUNFIF07IGRvCisgICAgICAgICAgICAgICAgc2xlZXAgMC4xCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgISAtdyAkREVWSUNFIF0gOyB0aGVuCisgICAgICAgICAgICAjIFNvbWV0aW1lcyAocHJlc3VtYWJseSBiZWNhdXNlIG9mIGEgcmFjZSB3aXRoIHVkZXYpIHdlIGdldCB0bworICAgICAgICAgICAgIyB0aGUgZGV2aWNlIGJlZm9yZSBpdHMgcGVybWlzc2lvbnMgaGF2ZSBiZWVuIHNldCB1cAorICAgICAgICAgICAgUkVUUllOVU09MAorICAgICAgICAgICAgd2hpbGUgWyAhIC13ICRERVZJQ0UgXTsgZG8KKyAgICAgICAgICAgICAgICBpZiBbICIkUkVUUllOVU0iID0gIjIiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIkRldmljZSAkREVWSUNFIGV4aXN0cyBidXQgaXMgbm90IHdyaXRhYmxlISIKKyAgICAgICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBSRVRSWU5VTT0kKChSRVRSWU5VTSsxKSkKKyAgICAgICAgICAgICAgICBzbGVlcCAwLjEKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgJGFyZ3MKKyAgICAgICAgaWYgWyAtZSAkREVWSUNFIF0gOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgIGRvbmUKK2Vsc2UKKyAgICBlY2hvICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRldmljZSBub2RlIGZyb20gY29tbWFuZDogJGFyZ3MiCisgICAgZXhpdCAxCitmaQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lLnNoIGIvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTU3MjVhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZS5zaApAQCAtMCwwICsxLDIzNyBAQAorIyEvYmluL2Jhc2gKKworIyBCdWlsZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Qgc2NyaXB0CisjCisjIENvcHlyaWdodCAyMDExIEludGVsIENvcnBvcmF0aW9uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICJnaXQgYmlzZWN0IHJ1biIKKyMgaW4gb3JkZXIgdG8gZmluZCByZWdyZXNzaW9ucyBpbiBidWlsZCB0aW1lLCBob3dldmVyIGl0IGNhbiBhbHNvIGJlIHVzZWQKKyMgaW5kZXBlbmRlbnRseS4gSXQgY2xlYW5zIG91dCB0aGUgYnVpbGQgb3V0cHV0IGRpcmVjdG9yaWVzLCBydW5zIGEKKyMgc3BlY2lmaWVkIHdvcmtlciBzY3JpcHQgKGFuIGV4YW1wbGUgaXMgdGVzdF9idWlsZF90aW1lX3dvcmtlci5zaCkgdW5kZXIKKyMgVElNRSgxKSwgbG9ncyB0aGUgcmVzdWx0cyB0byBURVNUX0xPR0RJUiAoZGVmYXVsdCAvdG1wKSBhbmQgcmV0dXJucyBhCisjIHZhbHVlIHRlbGxpbmcgImdpdCBiaXNlY3QgcnVuIiB3aGV0aGVyIHRoZSBidWlsZCB0aW1lIGlzIGdvb2QgKHVuZGVyCisjIHRoZSBzcGVjaWZpZWQgdGhyZXNob2xkKSBvciBiYWQgKG92ZXIgaXQpLiBUaGVyZSBpcyBhbHNvIGEgdG9sZXJhbmNlCisjIG9wdGlvbiBidXQgaXQgaXMgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwgYXMgaXQgb25seSBzdWJ0cmFjdHMgdGhlCisjIHRvbGVyYW5jZSBmcm9tIHRoZSBnaXZlbiB0aHJlc2hvbGQgYW5kIHVzZXMgaXQgYXMgdGhlIGFjdHVhbCB0aHJlc2hvbGQuCisjCisjIEl0IGlzIGFsc28gY2FwYWJsZSBvZiB0YWtpbmcgYSBmaWxlIGxpc3RpbmcgZ2l0IHJldmlzaW9uIGhhc2hlcyB0byBiZQorIyB0ZXN0LWFwcGxpZWQgdG8gdGhlIHJlcG9zaXRvcnkgaW4gb3JkZXIgdG8gZ2V0IHBhc3QgYnVpbGQgZmFpbHVyZXMgdGhhdAorIyB3b3VsZCBvdGhlcndpc2UgY2F1c2UgY2VydGFpbiByZXZpc2lvbnMgdG8gaGF2ZSB0byBiZSBza2lwcGVkOyBpZiBhCisjIHJldmlzaW9uIGRvZXMgbm90IGFwcGx5IGNsZWFubHkgdGhlbiB0aGUgc2NyaXB0IGFzc3VtZXMgaXQgZG9lcyBub3QKKyMgbmVlZCB0byBiZSBhcHBsaWVkIGFuZCBpZ25vcmVzIGl0LgorIworIyBQbGVhc2Ugc2VlIHRoZSBoZWxwIG91dHB1dCAoc3ludGF4IGJlbG93KSBmb3Igc29tZSBpbXBvcnRhbnQgc2V0dXAKKyMgaW5zdHJ1Y3Rpb25zLgorIworIyBBVVRIT1JTCisjIFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCisKK3N5bnRheCgpIHsKKyAgICBlY2hvICJzeW50YXg6ICQwIDxzY3JpcHQ+IDx0aW1lPiA8dG9sZXJhbmNlPiBbcGF0Y2hyZXZsaXN0XSIKKyAgICBlY2hvICIiCisgICAgZWNobyAiICBzY3JpcHQgICAgICAgLSB3b3JrZXIgc2NyaXB0IGZpbGUgKGlmIGluIGN1cnJlbnQgZGlyLCBwcmVmaXggd2l0aCAuLykiCisgICAgZWNobyAiICB0aW1lICAgICAgICAgLSB0aW1lIHRocmVzaG9sZCAoaW4gc2Vjb25kcywgc3VmZml4IG0gZm9yIG1pbnV0ZXMpIgorICAgIGVjaG8gIiAgdG9sZXJhbmNlICAgIC0gdG9sZXJhbmNlIChpbiBzZWNvbmRzLCBzdWZmaXggbSBmb3IgbWludXRlcyBvciAlIGZvciIKKyAgICBlY2hvICIgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UsIGNhbiBiZSAwKSIKKyAgICBlY2hvICIgIHBhdGNocmV2bGlzdCAtIG9wdGlvbmFsIGZpbGUgbGlzdGluZyByZXZpc2lvbnMgdG8gYXBwbHkgYXMgcGF0Y2hlcyBvbiB0b3AiCisgICAgZWNobyAiIgorICAgIGVjaG8gIllvdSBtdXN0IHNldCBURVNUX0JVSUxERElSIHRvIHBvaW50IHRvIGEgcHJldmlvdXNseSBjcmVhdGVkIGJ1aWxkIGRpcmVjdG9yeSwiCisgICAgZWNobyAiaG93ZXZlciBwbGVhc2Ugbm90ZSB0aGF0IHRoaXMgc2NyaXB0IHdpbGwgd2lwZSBvdXQgdGhlIFRNUERJUiBkZWZpbmVkIGluIgorICAgIGVjaG8gIlRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mIGFzIHBhcnQgb2YgaXRzIGluaXRpYWwgc2V0dXAgKGFzIHdlbGwgYXMgeW91ciIKKyAgICBlY2hvICJ+Ly5jY2FjaGUpIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJUbyBnZXQgcmlkIG9mIHRoZSBzdWRvIHByb21wdCwgcGxlYXNlIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gL2V0Yy9zdWRvZXJzIgorICAgIGVjaG8gIih1c2UgJ3Zpc3VkbycgdG8gZWRpdCB0aGlzOyBhbHNvIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdXNlciB5b3UgYXJlIHJ1bm5pbmciCisgICAgZWNobyAiYXMgaXMgYSBtZW1iZXIgb2YgdGhlICd3aGVlbCcgZ3JvdXApOiIKKyAgICBlY2hvICIiCisgICAgZWNobyAiJXdoZWVsIEFMTD0oQUxMKSBOT1BBU1NXRDogL3NiaW4vc3lzY3RsIC13IHZtLmRyb3BfY2FjaGVzPVsxLTNdIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICJOb3RlOiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkaXNhYmxlIGNyb25kIGFuZCBhbnkgb3RoZXIgcHJvY2VzcyB0aGF0IgorICAgIGVjaG8gIm1heSBjYXVzZSBzaWduaWZpY2FudCBDUFUgb3IgSS9PIHVzYWdlIGR1cmluZyBidWlsZCBwZXJmb3JtYW5jZSB0ZXN0cy4iCit9CisKKyMgTm90ZSAtIHdlIGV4aXQgd2l0aCAyNTAgaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCB0ZWxsIGdpdCBiaXNlY3QgcnVuIHRoYXQKKyMgc29tZXRoaW5nIGJhZCBoYXBwZW5lZCBhbmQgc3RvcAoraWYgWyAiJDEiID0gIiIgXSA7IHRoZW4KKyAgIHN5bnRheAorICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgIiQyIiA9ICIiIF0gOyB0aGVuCisgICBzeW50YXgKKyAgIGV4aXQgMjUwCitmaQorCitpZiBbICIkMyIgPSAiIiBdIDsgdGhlbgorICAgc3ludGF4CisgICBleGl0IDI1MAorZmkKKworaWYgISBbWyAiJDIiID1+IF5bMC05XVswLTltLl0qJCBdXSA7IHRoZW4KKyAgIGVjaG8gIickMicgaXMgbm90IGEgdmFsaWQgbnVtYmVyIGZvciB0aHJlc2hvbGQiCisgICBleGl0IDI1MAorZmkKKworaWYgISBbWyAiJDMiID1+IF5bMC05XVswLTltLiVdKiQgXV0gOyB0aGVuCisgICBlY2hvICInJDMnIGlzIG5vdCBhIHZhbGlkIG51bWJlciBmb3IgdG9sZXJhbmNlIgorICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgIiRURVNUX0JVSUxERElSIiA9ICIiIF0gOyB0aGVuCisgICBlY2hvICJQbGVhc2Ugc2V0IFRFU1RfQlVJTERESVIgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgYnVpbGQgZGlyZWN0b3J5IgorICAgZXhpdCAyNTAKK2ZpCisKK2lmIFsgISAtZCAiJFRFU1RfQlVJTERESVIiIF0gOyB0aGVuCisgICBlY2hvICJURVNUX0JVSUxERElSICRURVNUX0JVSUxERElSIG5vdCBmb3VuZCIKKyAgIGV4aXQgMjUwCitmaQorCitnaXQgZGlmZiAtLXF1aWV0CitpZiBbICQ/ICE9IDAgXSA7IHRoZW4KKyAgICBlY2hvICJXb3JraW5nIHRyZWUgaXMgZGlydHksIGNhbm5vdCBwcm9jZWVkIgorICAgIGV4aXQgMjUxCitmaQorCitpZiBbICIkQkJfRU5WX0VYVFJBV0hJVEUiICE9ICIiIF0gOyB0aGVuCisgICBlY2hvICJXQVJOSU5HOiB5b3UgYXJlIHJ1bm5pbmcgYWZ0ZXIgc291cmNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IHNjcmlwdCwgdGhpcyBpcyBub3QgcmVjb21tZW5kZWQiCitmaQorCitydW5zY3JpcHQ9JDEKK3RpbWV0aHJlc2hvbGQ9JDIKK3RvbGVyYW5jZT0kMworCitpZiBbICIkNCIgIT0gIiIgXSA7IHRoZW4KKyAgICBwYXRjaHJldmxpc3Q9YGNhdCAkNGAKK2Vsc2UKKyAgICBwYXRjaHJldmxpc3Q9IiIKK2ZpCisKK2lmIFtbIHRpbWV0aHJlc2hvbGQgPT0gKm0qIF1dIDsgdGhlbgorICAgIHRpbWV0aHJlc2hvbGQ9YGVjaG8gJHRpbWV0aHJlc2hvbGQgfCBzZWQgcy9tLyo2MC8gfCBiY2AKK2ZpCisKK2lmIFtbICR0b2xlcmFuY2UgPT0gKm0qIF1dIDsgdGhlbgorICAgIHRvbGVyYW5jZT1gZWNobyAkdG9sZXJhbmNlIHwgc2VkIHMvbS8qNjAvIHwgYmNgCitlbGlmIFtbICR0b2xlcmFuY2UgPT0gKiUqIF1dIDsgdGhlbgorICAgIHRvbGVyYW5jZT1gZWNobyAkdG9sZXJhbmNlIHwgc2VkIHMvJS8vYAorICAgIHRvbGVyYW5jZT1gZWNobyAic2NhbGUgPSAyOyAoKCR0b2xlcmFuY2UgKiAkdGltZXRocmVzaG9sZCkgLyAxMDApIiB8IGJjYAorZmkKKwordG1wZGlyPWBncmVwICJeVE1QRElSIiAkVEVTVF9CVUlMRERJUi9jb25mL2xvY2FsLmNvbmYgfCBzZWQgLWUgJ3MvVE1QRElSWyBcdF0qPVsgXHRcP10qIi8vJyAtZSAncy8iLy8nYAoraWYgWyAieCR0bXBkaXIiID0gIngiIF07IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gZGV0ZXJtaW5lIFRNUERJUiBmcm9tICRURVNUX0JVSUxERElSL2NvbmYvbG9jYWwuY29uZiwgYmFpbGluZyBvdXQiCisgICAgZXhpdCAyNTAKK2ZpCitzc3RhdGVkaXI9YGdyZXAgIl5TU1RBVEVfRElSIiAkVEVTVF9CVUlMRERJUi9jb25mL2xvY2FsLmNvbmYgfCBzZWQgLWUgJ3MvU1NUQVRFX0RJUlsgXHRcP10qPVsgXHRdKiIvLycgLWUgJ3MvIi8vJ2AKK2lmIFsgIngkc3N0YXRlZGlyIiA9ICJ4IiBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIGRldGVybWluZSBTU1RBVEVfRElSIGZyb20gJFRFU1RfQlVJTERESVIvY29uZi9sb2NhbC5jb25mLCBiYWlsaW5nIG91dCIKKyAgICBleGl0IDI1MAorZmkKKworaWYgWyBgZXhwciBsZW5ndGggJHRtcGRpcmAgLWx0IDQgXSA7IHRoZW4KKyAgICBlY2hvICJUTVBESVIgJHRtcGRpciBpcyBsZXNzIHRoYW4gNCBjaGFyYWN0ZXJzLCBiYWlsaW5nIG91dCIKKyAgICBleGl0IDI1MAorZmkKKworaWYgWyBgZXhwciBsZW5ndGggJHNzdGF0ZWRpcmAgLWx0IDQgXSA7IHRoZW4KKyAgICBlY2hvICJTU1RBVEVfRElSICRzc3RhdGVkaXIgaXMgbGVzcyB0aGFuIDQgY2hhcmFjdGVycywgYmFpbGluZyBvdXQiCisgICAgZXhpdCAyNTAKK2ZpCisKK2VjaG8gLW4gIkFib3V0IHRvIHdpcGUgb3V0IFRNUERJUiAkdG1wZGlyLCBwcmVzcyBDdHJsK0MgdG8gYnJlYWsgb3V0Li4uICAiCitmb3IgaSBpbiA5IDggNyA2IDUgNCAzIDIgMQorZG8KKyAgICBlY2hvIC1uZSAiXHgwOCRpIgorICAgIHNsZWVwIDEKK2RvbmUKK2VjaG8KKworcHVzaGQgLiA+IC9kZXYvbnVsbAorCitybSAtZiBwc2V1ZG9kb25lCitlY2hvICJSZW1vdmluZyBUTVBESVIgJHRtcGRpci4uLiIKK3JtIC1yZiAkdG1wZGlyCitlY2hvICJSZW1vdmluZyBUTVBESVIgJHRtcGRpci0qbGliYy4uLiIKK3JtIC1yZiAkdG1wZGlyLSpsaWJjCitlY2hvICJSZW1vdmluZyBTU1RBVEVfRElSICRzc3RhdGVkaXIuLi4iCitybSAtcmYgJHNzdGF0ZWRpcgorZWNobyAiUmVtb3Zpbmcgfi8uY2NhY2hlLi4uIgorcm0gLXJmIH4vLmNjYWNoZQorCitlY2hvICJTeW5jaW5nLi4uIgorc3luYworc3luYworZWNobyAiRHJvcHBpbmcgVk0gY2FjaGUuLi4iCisjZWNobyAzID4gL3Byb2Mvc3lzL3ZtL2Ryb3BfY2FjaGVzCitzdWRvIC9zYmluL3N5c2N0bCAtdyB2bS5kcm9wX2NhY2hlcz0zID4gL2Rldi9udWxsCisKK2lmIFsgIiRURVNUX0xPR0RJUiIgPSAiIiBdIDsgdGhlbgorICAgIGxvZ2Rpcj0iL3RtcCIKK2Vsc2UKKyAgICBsb2dkaXI9IiRURVNUX0xPR0RJUiIKK2ZpCityZXY9YGdpdCByZXYtcGFyc2UgSEVBRGAKK2xvZ2ZpbGU9IiRsb2dkaXIvdGltZWxvZ18kcmV2LmxvZyIKK2VjaG8gLW4gPiAkbG9nZmlsZQorCitnaXRyb290PWBnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbGAKK2NkICRnaXRyb290Citmb3IgcGF0Y2hyZXYgaW4gJHBhdGNocmV2bGlzdCA7IGRvCisgICAgZWNobyAiQXBwbHlpbmcgJHBhdGNocmV2IgorICAgIHBhdGNoZmlsZT1gbWt0ZW1wYAorICAgIGdpdCBzaG93ICRwYXRjaHJldiA+ICRwYXRjaGZpbGUKKyAgICBnaXQgYXBwbHkgLS1jaGVjayAkcGF0Y2hmaWxlICY+IC9kZXYvbnVsbAorICAgIGlmIFsgJD8gIT0gMCBdIDsgdGhlbgorICAgICAgICBlY2hvICIgLi4uIHBhdGNoIGRvZXMgbm90IGFwcGx5IHdpdGhvdXQgZXJyb3JzLCBpZ25vcmluZyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkFwcGxpZWQgJHBhdGNocmV2IiA+PiAkbG9nZmlsZQorICAgICAgICBnaXQgYXBwbHkgJHBhdGNoZmlsZSAmPiAvZGV2L251bGwKKyAgICBmaQorICAgIHJtICRwYXRjaGZpbGUKK2RvbmUKKworc3luYworZWNobyAiUXVpZXNjaW5nIGZvciA1cy4uLiIKK3NsZWVwIDUKKworZWNobyAiUnVubmluZyAkcnVuc2NyaXB0IGF0ICRyZXYuLi4iCit0aW1lb3V0ZmlsZT1gbWt0ZW1wYAorL3Vzci9iaW4vdGltZSAtbyAkdGltZW91dGZpbGUgLWYgIiVlXG5yZWFsXHQlRVxudXNlclx0JVVzXG5zeXNcdCVTc1xubWF4bVx0JU1rIiAkcnVuc2NyaXB0IDI+JjEgfCB0ZWUgLWEgJGxvZ2ZpbGUKK2V4aXRzdGF0dXM9JFBJUEVTVEFUVVMKKworZ2l0IHJlc2V0IC0taGFyZCBIRUFEID4gL2Rldi9udWxsCitwb3BkID4gL2Rldi9udWxsCisKK3RpbWVyZXN1bHQ9YGhlYWQgLW4xICR0aW1lb3V0ZmlsZWAKK2NhdCAkdGltZW91dGZpbGUgfCB0ZWUgLWEgJGxvZ2ZpbGUKK3JtICR0aW1lb3V0ZmlsZQorCitpZiBbICRleGl0c3RhdHVzICE9IDAgXSA7IHRoZW4KKyAgICAjIEJ1aWxkIGZhaWxlZCwgZXhpdCB3aXRoIDEyNSB0byB0ZWxsIGdpdCBiaXNlY3QgcnVuIHRvIHNraXAgdGhpcyByZXYKKyAgICBlY2hvICIqKiogQnVpbGQgZmFpbGVkIChleGl0IGNvZGUgJGV4aXRzdGF0dXMpLCBza2lwcGluZy4uLiIgfCB0ZWUgLWEgJGxvZ2ZpbGUKKyAgICBleGl0IDEyNQorZmkKKworcmV0PWBlY2hvICJzY2FsZSA9IDI7ICR0aW1lcmVzdWx0ID4gJHRpbWV0aHJlc2hvbGQgLSAkdG9sZXJhbmNlIiB8IGJjYAorZWNobyAiUmV0dXJuaW5nICRyZXQiIHwgdGVlIC1hICRsb2dmaWxlCitleGl0ICRyZXQKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZV93b3JrZXIuc2ggYi9zY3JpcHRzL2NvbnRyaWIvdGVzdF9idWlsZF90aW1lX3dvcmtlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTIwYTllCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jb250cmliL3Rlc3RfYnVpbGRfdGltZV93b3JrZXIuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL2Jhc2gKKworIyBUaGlzIGlzIGFuIGV4YW1wbGUgc2NyaXB0IHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0ZXN0X2J1aWxkX3RpbWUuc2gKKworaWYgWyAiJFRFU1RfQlVJTERESVIiID0gIiIgXSA7IHRoZW4KKyAgICBlY2hvICJURVNUX0JVSUxERElSIGlzIG5vdCBzZXQiCisgICAgZXhpdCAxCitmaQorCitidWlsZHN1YmRpcj1gYmFzZW5hbWUgJFRFU1RfQlVJTERESVJgCitpZiBbICEgLWQgJGJ1aWxkc3ViZGlyIF0gOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIGZpbmQgYnVpbGQgc3ViZGlyICRidWlsZHN1YmRpciBpbiBjdXJyZW50IGRpcmVjdG9yeSIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgLWYgb2UtaW5pdC1idWlsZC1lbnYgXSA7IHRoZW4KKyAgICAuIC4vb2UtaW5pdC1idWlsZC1lbnYgJGJ1aWxkc3ViZGlyCitlbGlmIFsgLWYgcG9reS1pbml0LWJ1aWxkLWVudiBdIDsgdGhlbgorICAgIC4gLi9wb2t5LWluaXQtYnVpbGQtZW52ICRidWlsZHN1YmRpcgorZWxzZQorICAgIGVjaG8gIlVuYWJsZSB0byBmaW5kIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdCIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgLWYgLi4vbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYiBdIDsgdGhlbgorICAgIHRhcmdldD0iY29yZS1pbWFnZS1zYXRvIgorZWxzZQorICAgIHRhcmdldD0icG9reS1pbWFnZS1zYXRvIgorZmkKKworZWNobyAiQnVpbGQgc3RhcnRlZCBhdCBgZGF0ZSAiKyVZLSVtLSVkICVIOiVNOiVTImAiCitlY2hvICJiaXRiYWtlICR0YXJnZXQiCitiaXRiYWtlICR0YXJnZXQKK3JldD0kPworZWNobyAiQnVpbGQgZmluaXNoZWQgYXQgYGRhdGUgIislWS0lbS0lZCAlSDolTTolUyJgIgorZXhpdCAkcmV0CisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY29udHJpYi92ZXJpZnktaG9tZXBhZ2UucHkgYi9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2Y2M4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2NvbnRyaWIvdmVyaWZ5LWhvbWVwYWdlLnB5CkBAIC0wLDAgKzEsNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFRoaXMgc2NyaXB0IGlzIHVzZWQgZm9yIHZlcmlmeSBIT01FUEFHRS4KKyMgVGhlIHJlc3VsdCBpcyBpbmZsdWVuY2VkIGJ5IG5ldHdvcmsgZW52aXJvbm1lbnQsIHNpbmNlIHRoZSB0aW1lb3V0IG9mIGNvbm5lY3QgdXJsIGlzIDUgc2Vjb25kcyBhcyBkZWZhdWx0LgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdXJsbGliMgorCitkZWYgc2VhcmNoX2JpdGJha2VwYXRoKCk6CisgICAgYml0YmFrZXBhdGggPSAiIgorCisgICAgIyBTZWFyY2ggcGF0aCB0byBiaXRiYWtlIGxpYiBkaXIgaW4gb3JkZXIgdG8gbG9hZCBiYiBtb2R1bGVzCisgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9iaXRiYWtlL2xpYi9iYicpKToKKyAgICAgICAgYml0YmFrZXBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSwgJy4uLy4uL2JpdGJha2UvbGliJykKKyAgICAgICAgYml0YmFrZXBhdGggPSBvcy5wYXRoLmFic3BhdGgoYml0YmFrZXBhdGgpCisgICAgZWxzZToKKyAgICAgICAgIyBMb29rIGZvciBiaXRiYWtlL2JpbiBkaXIgaW4gUEFUSAorICAgICAgICBmb3IgcHRoIGluIG9zLmVudmlyb25bJ1BBVEgnXS5zcGxpdCgnOicpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHB0aCwgJy4uL2xpYi9iYicpKToKKyAgICAgICAgICAgICAgICBiaXRiYWtlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocHRoLCAnLi4vbGliJykpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVW5hYmxlIHRvIGZpbmQgYml0YmFrZSBieSBzZWFyY2hpbmcgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGlzIHNjcmlwdCBvciBQQVRIXG4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gYml0YmFrZXBhdGgKKworIyBGb3IgaW1wb3J0aW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlcworc3lzLnBhdGguaW5zZXJ0KDAsIHNlYXJjaF9iaXRiYWtlcGF0aCgpKQoraW1wb3J0IGJiLnRpbmZvaWwKKworZGVmIHdnZXRIb21lcGFnZShwbiwgaG9tZXBhZ2UpOgorICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbCgnd2dldCAnICsgJy1xIC1UIDUgLXQgMSAtLXNwaWRlciAnICsgaG9tZXBhZ2UsIHNoZWxsID0gVHJ1ZSkKKyAgICBpZiByZXN1bHQ6CisgICAgICAgIGJiLndhcm4oIkZhaWxlZCB0byB2ZXJpZnkgSE9NRVBBR0UgKCVzKSBvZiAlcyIgJSAoaG9tZXBhZ2UsIHBuKSkKKyAgICAgICAgcmV0dXJuIDEKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gMAorCitkZWYgdmVyaWZ5SG9tZXBhZ2UoYmJoYW5kbGVyKToKKyAgICBwa2dfcG4gPSBiYmhhbmRsZXIuY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbgorICAgIHBubGlzdCA9IHNvcnRlZChwa2dfcG4pCisgICAgY291bnQgPSAwCisgICAgZm9yIHBuIGluIHBubGlzdDoKKyAgICAgICAgZm4gPSBwa2dfcG5bcG5dLnBvcCgpCisgICAgICAgIGRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGJiaGFuZGxlci5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKGZuKSwgYmJoYW5kbGVyLmNvbmZpZ19kYXRhKQorICAgICAgICBob21lcGFnZSA9IGRhdGEuZ2V0VmFyKCJIT01FUEFHRSIpCisgICAgICAgIGlmIGhvbWVwYWdlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVybGxpYjIudXJsb3Blbihob21lcGFnZSwgdGltZW91dD01KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgd2dldEhvbWVwYWdlKHBuLCBob21lcGFnZSkKKyAgICByZXR1cm4gY291bnQKKworaWYgX19uYW1lX189PSdfX21haW5fXyc6CisgICAgZmFpbGNvdW50ID0gMAorICAgIGJiaGFuZGxlciA9IGJiLnRpbmZvaWwuVGluZm9pbCgpCisgICAgYmJoYW5kbGVyLnByZXBhcmUoKQorICAgIHByaW50ICJTdGFydCB0byB2ZXJpZnkgSE9NRVBBR0U6IgorICAgIGZhaWxjb3VudCA9IHZlcmlmeUhvbWVwYWdlKGJiaGFuZGxlcikKKyAgICBwcmludCAiZmluaXNoIHRvIHZlcmlmeSBIT01FUEFHRS4iCisgICAgcHJpbnQgIlN1bW1hcnk6ICVzIGZhaWxlZCIgJSBmYWlsY291bnQKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY3Atbm9lcnJvciBiL3NjcmlwdHMvY3Atbm9lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOGViOTBkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jcC1ub2Vycm9yCkBAIC0wLDAgKzEsNTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBBbGxvdyBjb3B5aW5nIG9mICQxIHRvICQyIGJ1dCBpZiBmaWxlcyBpbiAkMSBkaXNhcHBlYXIgZHVyaW5nIHRoZSBjb3B5IG9wZXJhdGlvbiwKKyMgZG9uJ3QgZXJyb3IuCisjIEFsc28gZG9uJ3QgZXJyb3IgaWYgJDEgZGlzYXBwZWFycy4KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCisKK2RlZiBjb3B5dHJlZShzcmMsIGRzdCwgc3ltbGlua3M9RmFsc2UsIGlnbm9yZT1Ob25lKToKKyAgICAiIiJCYXNlZCBvbiBzaHV0aWwuY29weXRyZWUiIiIKKyAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc3JjKQorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoZHN0KQorICAgIGV4Y2VwdCBPU0Vycm9yOiAKKyAgICAgICAgIyBBbHJlYWR5IGV4aXN0cworICAgICAgICBwYXNzCisgICAgZXJyb3JzID0gW10KKyAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgc3JjbmFtZSA9IG9zLnBhdGguam9pbihzcmMsIG5hbWUpCisgICAgICAgIGRzdG5hbWUgPSBvcy5wYXRoLmpvaW4oZHN0LCBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkID0gZHN0bmFtZQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3RuYW1lKToKKyAgICAgICAgICAgICAgICBkID0gb3MucGF0aC5qb2luKGRzdG5hbWUsIG9zLnBhdGguYmFzZW5hbWUoc3JjbmFtZSkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjbmFtZSwgZHN0bmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MihzcmNuYW1lLCBkc3RuYW1lKQorICAgICAgICAjIGNhdGNoIHRoZSBFcnJvciBmcm9tIHRoZSByZWN1cnNpdmUgY29weXRyZWUgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgIyBjb250aW51ZSB3aXRoIG90aGVyIGZpbGVzCisgICAgICAgIGV4Y2VwdCBzaHV0aWwuRXJyb3IsIGVycjoKKyAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yLCB3aHk6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmNuYW1lLCBkc3RuYW1lLCBzdHIod2h5KSkpCisgICAgdHJ5OgorICAgICAgICBzaHV0aWwuY29weXN0YXQoc3JjLCBkc3QpCisgICAgZXhjZXB0IE9TRXJyb3IsIHdoeToKKyAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKKyAgICBpZiBlcnJvcnM6CisgICAgICAgIHJhaXNlIHNodXRpbC5FcnJvciwgZXJyb3JzCisKK3RyeToKKyAgICBjb3B5dHJlZShzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCitleGNlcHQgc2h1dGlsLkVycm9yOgorICAgcGFzcworZXhjZXB0IE9TRXJyb3I6CisgICBwYXNzCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QgYi9zY3JpcHRzL2NyZWF0ZS1wdWxsLXJlcXVlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTliYTU4OAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvY3JlYXRlLXB1bGwtcmVxdWVzdApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMC0yMDEzLCAgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorIyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMKKyMgVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBwcmVwYXJlIGEgc2VyaWVzIG9mIHBhdGNoZXMKKyMgYW5kIGEgY292ZXIgbGV0dGVyIGluIGFuIGFwcHJvcHJpYXRlIGFuZCBjb25zaXN0ZW50IGZvcm1hdCBmb3IKKyMgc3VibWlzc2lvbiB0byBPcGVuIEVtYmVkZGVkIGFuZCBUaGUgWW9jdG8gUHJvamVjdCwgYXMgd2VsbCBhcyB0bworIyByZWxhdGVkIHByb2plY3RzIGFuZCBsYXllcnMuCisjCisKK09ESVI9cHVsbC0kJAorUkVMQVRJVkVfVE89Im1hc3RlciIKK0NPTU1JVF9JRD0iSEVBRCIKK1BSRUZJWD0iUEFUQ0giCitSRkM9MAorCit1c2FnZSgpIHsKK0NNRD0kKGJhc2VuYW1lICQwKQorY2F0IDw8RU9NCitVc2FnZTogJENNRCBbLWhdIFstbyBvdXRwdXRfZGlyXSBbLW0gbXNnX2JvZHlfZmlsZV0gWy1zIHN1YmplY3RdIFstciByZWxhdGl2ZV90b10gWy1pIGNvbW1pdF9pZF0gWy1kIHJlbGF0aXZlX2Rpcl0gLXUgcmVtb3RlIFstYiBicmFuY2hdCisgIC1iIGJyYW5jaCAgICAgICAgICAgQnJhbmNoIG5hbWUgaW4gdGhlIHNwZWNpZmllZCByZW1vdGUgKGRlZmF1bHQ6IGN1cnJlbnQgYnJhbmNoKQorICAtYyAgICAgICAgICAgICAgICAgIENyZWF0ZSBhbiBSRkMgKFJlcXVlc3QgZm9yIENvbW1lbnQpIHBhdGNoIHNlcmllcworICAtaCAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UKKyAgLWkgY29tbWl0X2lkICAgICAgICBFbmRpbmcgY29tbWl0IChkZWZhdWx0OiBIRUFEKQorICAtbSBtc2dfYm9keV9maWxlICAgIFRoZSBmaWxlIGNvbnRhaW5pbmcgYSBibHVyYiB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBzdW1tYXJ5IGVtYWlsCisgIC1vIG91dHB1dF9kaXIgICAgICAgU3BlY2lmeSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIG1lc3NhZ2VzIChkZWZhdWx0OiBwdWxsLVBJRCkKKyAgLXAgcHJlZml4ICAgICAgICAgICBVc2UgW3ByZWZpeCBOL01dIGluc3RlYWQgb2YgW1BBVENIIE4vTV0gYXMgdGhlIHN1YmplY3QgcHJlZml4CisgIC1yIHJlbGF0aXZlX3RvICAgICAgU3RhcnRpbmcgY29tbWl0IChkZWZhdWx0OiBtYXN0ZXIpCisgIC1zIHN1YmplY3QgICAgICAgICAgVGhlIHN1YmplY3QgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgc3VtbWFyeSBlbWFpbAorICAtdSByZW1vdGUgICAgICAgICAgIFRoZSBnaXQgcmVtb3RlIHdoZXJlIHRoZSBicmFuY2ggaXMgbG9jYXRlZAorICAtZCByZWxhdGl2ZV9kaXIgICAgIEdlbmVyYXRlIHBhdGNoZXMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5CisKKyBFeGFtcGxlczoKKyAgICRDTUQgLXUgY29udHJpYiAtYiBuaXRpbi9iYXNpYworICAgJENNRCAtdSBjb250cmliIC1yIGRpc3Ryby9tYXN0ZXIgLWkgbml0aW4vZGlzdHJvIC1iIG5pdGluL2Rpc3RybworICAgJENNRCAtdSBjb250cmliIC1yIG1hc3RlciAtaSBtaXNjIC1iIG5pdGluL21pc2MgLW8gcHVsbC1taXNjCisgICAkQ01EIC11IGNvbnRyaWIgLXAgIlJGQyBQQVRDSCIgLWIgbml0aW4vZXhwZXJpbWVudGFsCisgICAkQ01EIC11IGNvbnRyaWIgLWkgbWlzYyAtYiBuaXRpbi9taXNjIC1kIC4vYml0YmFrZQorRU9NCit9CisKKyMgUGFyc2UgYW5kIHZhbGlkYXRlIGFyZ3VtZW50cword2hpbGUgZ2V0b3B0cyAiYjpjZDpoaTptOm86cDpyOnM6dToiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwliKQorCQlCUkFOQ0g9IiRPUFRBUkciCisJCTs7CisJYykKKwkJUkZDPTEKKwkJOzsKKwlkKQorCQlSRUxESVI9IiRPUFRBUkciCisJCTs7CisJaCkKKwkJdXNhZ2UKKwkJZXhpdCAwCisJCTs7CisJaSkKKwkJQ09NTUlUX0lEPSIkT1BUQVJHIgorCQk7OworCW0pCisJCUJPRFk9IiRPUFRBUkciCisJCWlmIFsgISAtZSAiJEJPRFkiIF07IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiBCb2R5IGZpbGUgZG9lcyBub3QgZXhpc3QiCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwlvKQorCQlPRElSPSIkT1BUQVJHIgorCQk7OworCXApCisJCVBSRUZJWD0iJE9QVEFSRyIKKwkJOzsKKwlyKQorCQlSRUxBVElWRV9UTz0iJE9QVEFSRyIKKwkJOzsKKwlzKQorCQlTVUJKRUNUPSIkT1BUQVJHIgorCQk7OworCXUpCisJCVJFTU9URT0iJE9QVEFSRyIKKwkJUkVNT1RFX1VSTD0kKGdpdCBjb25maWcgcmVtb3RlLiRSRU1PVEUudXJsKQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiBnaXQgY29uZmlnIGZhaWxlZCB0byBmaW5kIGEgdXJsIGZvciAnJFJFTU9URSciCisJCQllY2hvCisJCQllY2hvICJUbyBhZGQgYSByZW1vdGUgdXJsIGZvciAkUkVNT1RFLCB1c2U6IgorCQkJZWNobyAiICBnaXQgY29uZmlnIHJlbW90ZS4kUkVNT1RFLnVybCA8dXJsPiIKKwkJCWV4aXQgMQorCQlmaQorCisJCSMgUmV3cml0ZSBwcml2YXRlIFVSTHMgdG8gcHVibGljIFVSTHMKKwkJIyBEZXRlcm1pbmUgdGhlIHJlcG9zaXRvcnkgbmFtZSBmb3IgdXNlIGluIHRoZSBXRUJfVVJMIGxhdGVyCisJCWNhc2UgIiRSRU1PVEVfVVJMIiBpbgorCQkqQCopCisJCQlVU0VSX1JFPSJbQS1aYS16MC05Xy5AXVtBLVphLXowLTlfLkAtXSpcJFw/IgorCQkJUFJPVE9fUkU9IlthLXpdW2EteitdKjovLyIKKwkJCUdJVF9SRT0iXCheXCgkUFJPVE9fUkVcKVw/JFVTRVJfUkVAXClcKFteOi9dKlwpWzovXVwoLipcKSIKKwkJCVJFTU9URV9VUkw9JHtSRU1PVEVfVVJMJS5naXR9CisJCQlSRU1PVEVfUkVQTz0kKGVjaG8gJFJFTU9URV9VUkwgfCBzZWQgInMjJEdJVF9SRSNcNCMiKQorCQkJUkVNT1RFX1VSTD0kKGVjaG8gJFJFTU9URV9VUkwgfCBzZWQgInMjJEdJVF9SRSNnaXQ6Ly9cMy9cNCMiKQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIldBUk5JTkc6IFVucmVjb2duaXplZCByZW1vdGUgVVJMOiAkUkVNT1RFX1VSTCIKKwkJCWVjaG8gIiAgICAgICAgIFRoZSBwdWxsIGFuZCBicm93c2UgVVJMcyB3aWxsIGxpa2VseSBiZSBpbmNvcnJlY3QiCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworZG9uZQorCitpZiBbIC16ICIkQlJBTkNIIiBdOyB0aGVuCisJQlJBTkNIPSQoZ2l0IGJyYW5jaCB8IGdyZXAgLWUgIl5cKiAiIHwgY3V0IC1kJyAnIC1mMikKKwllY2hvICJOT1RFOiBBc3N1bWluZyByZW1vdGUgYnJhbmNoICckQlJBTkNIJywgdXNlIC1iIHRvIG92ZXJyaWRlLiIKK2ZpCisKK2lmIFsgLXogIiRSRU1PVEVfVVJMIiBdOyB0aGVuCisJZWNobyAiRVJST1I6IE1pc3NpbmcgcGFyYW1ldGVyIC11LCBubyBnaXQgcmVtb3RlISIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgWyAkUkZDIC1lcSAxIF07IHRoZW4KKwlQUkVGSVg9IlJGQyAkUFJFRklYIgorZmkKKworCisjIFNldCBXRUJfVVJMIGZyb20ga25vd24gcmVtb3RlcworV0VCX1VSTD0iIgorY2FzZSAiJFJFTU9URV9VUkwiIGluCisJKmdpdC55b2N0b3Byb2plY3Qub3JnKikKKwkJV0VCX1VSTD0iaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQuY2dpLyRSRU1PVEVfUkVQTy9sb2cvP2g9JEJSQU5DSCIKKwkJOzsKKwkqZ2l0LnBva3lsaW51eC5vcmcqKQorCQlXRUJfVVJMPSJodHRwOi8vZ2l0LnBva3lsaW51eC5vcmcvY2dpdC5jZ2kvJFJFTU9URV9SRVBPL2xvZy8/aD0kQlJBTkNIIgorCQk7OworCSpnaXQub3BlbmVtYmVkZGVkLm9yZyopCisJCVdFQl9VUkw9Imh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvY2dpdC5jZ2kvJFJFTU9URV9SRVBPL2xvZy8/aD0kQlJBTkNIIgorCQk7OworCSpnaXRodWIuY29tKikKKwkJV0VCX1VSTD0iaHR0cHM6Ly9naXRodWIuY29tLyRSRU1PVEVfUkVQTy90cmVlLyRCUkFOQ0giCisJCTs7Citlc2FjCisKKyMgUGVyZm9ybSBhIHNhbml0eSB0ZXN0IG9uIHRoZSB3ZWIgVVJMLiBJc3N1ZSBhIHdhcm5pbmcgaWYgaXQgaXMgbm90CisjIGFjY2Vzc2libGUsIGJ1dCBkbyBub3QgYWJvcnQgYXMgdXNlcnMgbWF5IHdhbnQgdG8gcnVuIG9mZmxpbmUuCitpZiBbIC1uICIkV0VCX1VSTCIgXTsgdGhlbgorCXdnZXQgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSAtcSAkV0VCX1VSTCAtTyAvZGV2L251bGwKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAiV0FSTklORzogQnJhbmNoICckQlJBTkNIJyB3YXMgbm90IGZvdW5kIG9uIHRoZSBjb250cmliIGdpdCB0cmVlLiIKKwkJZWNobyAiICAgICAgICAgUGxlYXNlIGNoZWNrIHlvdXIgcmVtb3RlIGFuZCBicmFuY2ggcGFyYW1ldGVyIGJlZm9yZSBzZW5kaW5nLiIKKwkJZWNobyAiIgorCWZpCitmaQorCitpZiBbIC1lICRPRElSIF07IHRoZW4KKwllY2hvICJFUlJPUjogb3V0cHV0IGRpcmVjdG9yeSAkT0RJUiBleGlzdHMuIgorCWV4aXQgMQorZmkKK21rZGlyICRPRElSCisKK2lmIFsgLW4gIiRSRUxESVIiIF07IHRoZW4KKwlPRElSPSQocmVhbHBhdGggJE9ESVIpCisJcGRpcj0kKHB3ZCkKKwljZCAkUkVMRElSCisJZXh0cmFvcHRzPSItLXJlbGF0aXZlIgorZmkKKworIyBHZW5lcmF0ZSB0aGUgcGF0Y2hlcyBhbmQgY292ZXIgbGV0dGVyCitnaXQgZm9ybWF0LXBhdGNoICRleHRyYW9wdHMgLU00MCAtLXN1YmplY3QtcHJlZml4PSIkUFJFRklYIiAtbiAtbyAkT0RJUiAtLXRocmVhZD1zaGFsbG93IC0tY292ZXItbGV0dGVyICRSRUxBVElWRV9UTy4uJENPTU1JVF9JRCA+IC9kZXYvbnVsbAorCitbIC1uICIkUkVMRElSIiBdICYmIGNkICRwZGlyCisKKyMgQ3VzdG9taXplIHRoZSBjb3ZlciBsZXR0ZXIKK0NMPSIkT0RJUi8wMDAwLWNvdmVyLWxldHRlci5wYXRjaCIKK1BNPSIkT0RJUi9wdWxsLW1zZyIKK0dJVF9WRVJTSU9OPSQoYGdpdCAtLXZlcnNpb25gIHwgdHIgLWQgJ1s6YWxwaGE6XVs6c3BhY2U6XS4nIHwgc2VkICdzL1woLi4uXCkuKi9cMS8nKQorTkVXRVJfR0lUX1ZFUlNJT049MjEwCitpZiBbICRHSVRfVkVSU0lPTiAtbHQgJE5FV0VSX0dJVF9WRVJTSU9OIF07IHRoZW4KKwlnaXQgcmVxdWVzdC1wdWxsICRSRUxBVElWRV9UTyAkUkVNT1RFX1VSTCAkQ09NTUlUX0lEID4+ICIkUE0iCitlbHNlCisJZ2l0IHJlcXVlc3QtcHVsbCAkUkVMQVRJVkVfVE8gJFJFTU9URV9VUkwgOiRCUkFOQ0ggPj4gIiRQTSIKK2ZpCitpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwllY2hvICJFUlJPUjogZ2l0IHJlcXVlc3QtcHVsbCByZXBvcnRlZCBhbiBlcnJvciIKKwlleGl0IDEKK2ZpCisKKyMgVGhlIGNvdmVyIGxldHRlciBhbHJlYWR5IGhhcyBhIGRpZmZzdGF0LCByZW1vdmUgaXQgZnJvbSB0aGUgcHVsbC1tc2cKKyMgYmVmb3JlIGluc2VydGluZyBpdC4KK3NlZCAtbiAiMCxcIyRSRU1PVEVfVVJMIyBwIiAiJFBNIiB8IHNlZCAtaSAiL0JMVVJCIEhFUkUvIHIgL2Rldi9zdGRpbiIgIiRDTCIKK3JtICIkUE0iCisKKyMgSWYgdGhpcyBpcyBhbiBSRkMsIG1ha2UgdGhhdCBjbGVhciBpbiB0aGUgY292ZXIgbGV0dGVyCitpZiBbICRSRkMgLWVxIDEgXTsgdGhlbgorKGNhdCA8PEVPTQorUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGNoYW5nZXMgZm9yIHN1aXRhYmlsaXR5IGZvciBpbmNsdXNpb24uIElmIHlvdSBoYXZlCithbnkgb2JqZWN0aW9ucyBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHBsZWFzZSByZXNwb25kIHRvIHRoZSBwYXRjaGVzLiBJZgoreW91IGFncmVlIHdpdGggdGhlIGNoYW5nZXMsIHBsZWFzZSBwcm92aWRlIHlvdXIgQWNrZWQtYnkuCisKK0VPTQorKSB8IHNlZCAtaSAiL0JMVVJCIEhFUkUvIHIgL2Rldi9zdGRpbiIgIiRDTCIKK2ZpCisKKyMgSW5zZXJ0IHRoZSBXRUJfVVJMIGlmIHRoZXJlIGlzIG9uZQoraWYgWyAtbiAiJFdFQl9VUkwiIF07IHRoZW4KKwllY2hvICIgICRXRUJfVVJMIiB8IHNlZCAtaSAiXCMkUkVNT1RFX1VSTCMgciAvZGV2L3N0ZGluIiAiJENMIgorZmkKKworCisjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhIG1lc3NhZ2UgYm9keSwgaW5zZXJ0IGl0IGludG8gdGhlIGNvdmVyIGxldHRlciBhbmQKKyMgcmVtb3ZlIHRoZSBCTFVSQiB0b2tlbi4KK2lmIFsgLW4gIiRCT0RZIiBdOyB0aGVuCisJc2VkIC1pICIvQkxVUkIgSEVSRS8gciAkQk9EWSIgIiRDTCIKKwlzZWQgLWkgIi9CTFVSQiBIRVJFLyBkIiAiJENMIgorZmkKKworIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzdWJqZWN0LCByZXBsYWNlIHRoZSBTVUJKRUNUIHRva2VuIHdpdGggaXQuCitpZiBbIC1uICIkU1VCSkVDVCIgXTsgdGhlbgorCXNlZCAtaSAtZSAicy9cKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKi8kU1VCSkVDVC8iICIkQ0wiCitmaQorCisKKyMgR2VuZXJhdGUgcmVwb3J0IGZvciB1c2VyCitjYXQgPDxFT00KK1RoZSBmb2xsb3dpbmcgcGF0Y2hlcyBoYXZlIGJlZW4gcHJlcGFyZWQ6CiskKGZvciBQQVRDSCBpbiAkKGxzICRPRElSLyopOyBkbyBlY2hvICIgICAgJFBBVENIIjsgZG9uZSkKKworUmV2aWV3IHRoZWlyIGNvbnRlbnQsIGVzcGVjaWFsbHkgdGhlIHN1bW1hcnkgbWFpbDoKKyAgICAkQ0wKKworV2hlbiB5b3UgYXJlIHNhdGlzZmllZCwgeW91IGNhbiBzZW5kIHRoZW0gd2l0aDoKKyAgICBzZW5kLXB1bGwtcmVxdWVzdCAtYSAtcCAkT0RJUgorRU9NCisKKyMgQ2hlY2sgdGhlIHBhdGNoZXMgZm9yIHRyYWlsaW5nIHdoaXRlIHNwYWNlCitlZ3JlcCAtcSAtZSAiXlwrLipccyskIiAkT0RJUi8qCitpZiBbICQ/IC1uZSAxIF07IHRoZW4KKwllY2hvCisJZWNobyAiV0FSTklORzogVHJhaWxpbmcgd2hpdGUgc3BhY2UgZGV0ZWN0ZWQgYXQgdGhlc2UgbG9jYXRpb25zIgorCWVncmVwIC1uSCAtLWNvbG9yIC1lICJeXCsuKlxzKyQiICRPRElSLyoKK2ZpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Nyb3NzdGFwIGIvc2NyaXB0cy9jcm9zc3RhcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODMxN2NmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9jcm9zc3RhcApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgUnVuIGEgc3lzdGVtdGFwIHNjcmlwdCBvbiByZW1vdGUgdGFyZ2V0CisjCisjIEV4YW1wbGVzIChydW4gb24gYnVpbGQgaG9zdCwgdGFyZ2V0IGlzIDE5Mi4xNjguMS54eHgpOgorIyAgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52IgorIyAgICQgY2Qgfi9teS9zeXN0ZW10YXAvc2NyaXB0cyIKKyMKKyMgICAkIGNyb3NzdGFwIHJvb3RAMTkyLjE2OC4xLnh4eCBteXNjcmlwdC5zdHAiCisjICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS54eHggbXlzY3JpcHQtd2l0aC1hcmdzLnN0cCA5OSBuaW5ldHluaW5lIgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitmdW5jdGlvbiB1c2FnZSgpIHsKKyAgICBlY2hvICJVc2FnZTogJDAgPHVzZXJAaG9zdG5hbWU+IDxzeXRlbXRhcC1zY3JpcHQ+IFthZGRpdGlvbmFsIHN5c3RlbXRhcC1zY3JpcHQgYXJnc10iCit9CisKK2Z1bmN0aW9uIHNldHVwX3VzYWdlKCkgeworICAgIGVjaG8gIiIKKyAgICBlY2hvICInY3Jvc3N0YXAnIHJlcXVpcmVzIGEgbG9jYWwgc2RrIGJ1aWxkIG9mIHRoZSB0YXJnZXQgc3lzdGVtIgorICAgIGVjaG8gIihvciBhIGJ1aWxkIHRoYXQgaW5jbHVkZXMgJ3Rvb2xzLXByb2ZpbGUnKSBpbiBvcmRlciB0byBidWlsZCIKKyAgICBlY2hvICJrZXJuZWwgbW9kdWxlcyB0aGF0IGNhbiBwcm9iZSB0aGUgdGFyZ2V0IHN5c3RlbS4iCisgICAgZWNobyAiIgorICAgIGVjaG8gIlByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGF0IG1lYW5zIHlvdSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6IgorICAgIGVjaG8gIiAgLSBJZiB5b3UncmUgcnVubmluZyBhIHByZS1idWlsdCBpbWFnZSwgZG93bmxvYWQgdGhlIHJlbGVhc2UiCisgICAgZWNobyAiICAgIGFuZC9vciBCU1AgdGFyYmFsbHMgdXNlZCB0byBidWlsZCB0aGUgaW1hZ2UuIgorICAgIGVjaG8gIiAgLSBJZiB5b3UncmUgd29ya2luZyBmcm9tIGdpdCBzb3VyY2VzLCBqdXN0IGNsb25lIHRoZSBtZXRhZGF0YSIKKyAgICBlY2hvICIgICAgYW5kIEJTUCBsYXllcnMgbmVlZGVkIHRvIGJ1aWxkIHRoZSBpbWFnZSB5b3UnbGwgYmUgYm9vdGluZy4iCisgICAgZWNobyAiICAtIE1ha2Ugc3VyZSB5b3UncmUgcHJvcGVybHkgc2V0IHVwIHRvIGJ1aWxkIGEgbmV3IGltYWdlIChzZWUiCisgICAgZWNobyAiICAgIHRoZSBCU1AgUkVBRE1FIGFuZC9vciB0aGUgd2lkZWx5IGF2YWlsYWJsZSBiYXNpYyBkb2N1bWVudGF0aW9uIgorICAgIGVjaG8gIiAgICB0aGF0IGRpc2N1c3NlcyBob3cgdG8gYnVpbGQgaW1hZ2VzKS4iCisgICAgZWNobyAiICAtIEJ1aWxkIGFuIC1zZGsgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgZS5nLjoiCisgICAgZWNobyAiICAgICAgJCBiaXRiYWtlIGNvcmUtaW1hZ2Utc2F0by1zZGsiCisgICAgZWNobyAiICBPUiIKKyAgICBlY2hvICIgIC0gQnVpbGQgYSBub24tc2RrIGltYWdlIGJ1dCBpbmNsdWRlIHRoZSBwcm9maWxpbmcgdG9vbHM6IgorICAgIGVjaG8gIiAgICAgIFsgZWRpdCBsb2NhbC5jb25mIGFuZCBhZGQgJ3Rvb2xzLXByb2ZpbGUnIHRvIHRoZSBlbmQgb2YiCisgICAgZWNobyAiICAgICAgICB0aGUgRVhUUkFfSU1BR0VfRkVBVFVSRVMgdmFyaWFibGUgXSIKKyAgICBlY2hvICIgICAgICAkIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIgorICAgIGVjaG8gIiIKKyAgICBlY2hvICIgIFsgTk9URSB0aGF0ICdjcm9zc3RhcCcgbmVlZHMgdG8gYmUgYWJsZSB0byBzc2ggaW50byB0aGUgdGFyZ2V0IgorICAgIGVjaG8gIiAgICBzeXN0ZW0sIHdoaWNoIGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiAtbWluaW1hbCBpbWFnZXMuIF0iCisgICAgZWNobyAiIgorICAgIGVjaG8gIk9uY2UgeW91J3ZlIGJ1aWxkIHRoZSBpbWFnZSBvbiB0aGUgaG9zdCBzeXN0ZW0sIHlvdSdyZSByZWFkeSB0byIKKyAgICBlY2hvICJib290IGl0IChvciB0aGUgZXF1aXZhbGVudCBwcmUtYnVpbHQgaW1hZ2UpIGFuZCB1c2UgJ2Nyb3NzdGFwJyIKKyAgICBlY2hvICJ0byBwcm9iZSBpdCAoeW91IG5lZWQgdG8gc291cmNlIHRoZSBlbnZpcm9ubWVudCBhcyB1c3VhbCBmaXJzdCk6IgorICAgIGVjaG8gIiIKKyAgICBlY2hvICIgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYiCisgICAgZWNobyAiICAgICQgY2Qgfi9teS9zeXN0ZW10YXAvc2NyaXB0cyIKKyAgICBlY2hvICIgICAgJCBjcm9zc3RhcCByb290QDE5Mi4xNjguMS54eHggbXlzY3JpcHQuc3RwIgorICAgIGVjaG8gIiIKK30KKworZnVuY3Rpb24gc3lzdGVtdGFwX3RhcmdldF9hcmNoKCkgeworICAgIFNZU1RFTVRBUF9UQVJHRVRfQVJDSD0kMQorICAgIGNhc2UgJFNZU1RFTVRBUF9UQVJHRVRfQVJDSCBpbgorICAgICAgICBpPzg2KQorICAgICAgICAgICAgU1lTVEVNVEFQX1RBUkdFVF9BUkNIPSJpMzg2IgorICAgICAgICAgICAgOzsKKyAgICAgICAgeDg2PzY0KikKKyAgICAgICAgICAgIFNZU1RFTVRBUF9UQVJHRVRfQVJDSD0ieDg2XzY0IgorICAgICAgICAgICAgOzsKKyAgICAgICAgYXJtKikKKyAgICAgICAgICAgIFNZU1RFTVRBUF9UQVJHRVRfQVJDSD0iYXJtIgorICAgICAgICAgICAgOzsKKyAgICAgICAgcG93ZXJwYyopCisgICAgICAgICAgICBTWVNURU1UQVBfVEFSR0VUX0FSQ0g9InBvd2VycGMiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCit9CisKK2lmIFsgJCMgLWx0IDIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbIC16ICIkQlVJTERESVIiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdGhlIEJVSUxERElSIGVudmlyb25tZW50IHZhcmlhYmxlLiIKKyAgICBlY2hvICJEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgeW91ciBidWlsZCBzeXN0ZW0gZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIKKyAgICBleGl0IDEKK2ZpCisKK3B1c2hkICRQV0QKK2NkICRCVUlMRERJUgorQklUQkFLRV9WQVJTPWBiaXRiYWtlIC1lIHZpcnR1YWwva2VybmVsYAorcG9wZAorCitTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU49JChlY2hvICIkQklUQkFLRV9WQVJTIiB8IGdyZXAgXlNUQUdJTkdfQklORElSX1RPT0xDSEFJTiBcCisgIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMikKK1NUQUdJTkdfQklORElSX1RPT0xQUkVGSVg9JChlY2hvICIkQklUQkFLRV9WQVJTIiB8IGdyZXAgXlRBUkdFVF9QUkVGSVggXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCitTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSPSQoZWNobyAiJEJJVEJBS0VfVkFSUyIgfCBncmVwIF5TVEFHSU5HX0RJUl9OQVRJVkUgXAorICB8IGN1dCAtZCAnPScgLWYyIHwgY3V0IC1kICciJyAtZjIpCitUQVJHRVRfQVJDSD0kKGVjaG8gIiRCSVRCQUtFX1ZBUlMiIHwgZ3JlcCBeVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCBcCisgIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMikKK1RBUkdFVF9LRVJORUxfQlVJTERESVI9JChlY2hvICIkQklUQkFLRV9WQVJTIiB8IGdyZXAgXkI9IFwKKyAgfCBjdXQgLWQgJz0nIC1mMiB8IGN1dCAtZCAnIicgLWYyKQorCitzeXN0ZW10YXBfdGFyZ2V0X2FyY2ggIiRUQVJHRVRfQVJDSCIKKworaWYgWyAhIC1kICRUQVJHRVRfS0VSTkVMX0JVSUxERElSIF0gfHwKKyAgIFsgISAtZiAkVEFSR0VUX0tFUk5FTF9CVUlMRERJUi92bWxpbnV4IF07IHRoZW4KKyAgICBlY2hvIC1lICJcbkVycm9yOiBObyB0YXJnZXQga2VybmVsIGJ1aWxkIGZvdW5kLiIKKyAgICBlY2hvIC1lICJEaWQgeW91IGZvcmdldCB0byBjcmVhdGUgYSBsb2NhbCBidWlsZCBvZiB5b3VyIGltYWdlPyIKKyAgICBzZXR1cF91c2FnZQorICAgIGV4aXQgMQorZmkKKworaWYgWyAhIC1mICRTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSL3Vzci9iaW4vc3RhcCBdOyB0aGVuCisgICAgZWNobyAtZSAiXG5FcnJvcjogTmF0aXZlIChob3N0KSBzeXN0ZW10YXAgbm90IGZvdW5kLiIKKyAgICBlY2hvIC1lICJEaWQgeW91IGFjY2lkZW50YWxseSBidWlsZCBhIGxvY2FsIG5vbi1zZGsgaW1hZ2U/IChvciBmb3JnZXQgdG8iCisgICAgZWNobyAtZSAiYWRkICd0b29scy1wcm9maWxlJyB0byBFWFRSQV9JTUFHRV9GRUFUVVJFUyBpbiB5b3VyIGxvY2FsLmNvbmYpPyIKKyAgICBzZXR1cF91c2FnZQorICAgIGV4aXQgMQorZmkKKwordGFyZ2V0X3VzZXJfaG9zdG5hbWU9IiQxIgorZnVsbF9zY3JpcHRfbmFtZT0iJDIiCitzY3JpcHRfbmFtZT0kKGJhc2VuYW1lICIkMiIpCitzY3JpcHRfYmFzZT0ke3NjcmlwdF9uYW1lJS4qfQorc2hpZnQgMgorCiske1NZU1RFTVRBUF9IT1NUX0lOU1RBTExESVJ9L3Vzci9iaW4vc3RhcCBcCisgIC1hICR7U1lTVEVNVEFQX1RBUkdFVF9BUkNIfSBcCisgIC1CIENST1NTX0NPTVBJTEU9IiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1NUQUdJTkdfQklORElSX1RPT0xQUkVGSVh9IiBcCisgIC1yICR7VEFSR0VUX0tFUk5FTF9CVUlMRERJUn0gXAorICAtSSAke1NZU1RFTVRBUF9IT1NUX0lOU1RBTExESVJ9L3Vzci9zaGFyZS9zeXN0ZW10YXAvdGFwc2V0IFwKKyAgLVIgJHtTWVNURU1UQVBfSE9TVF9JTlNUQUxMRElSfS91c3Ivc2hhcmUvc3lzdGVtdGFwL3J1bnRpbWUgXAorICAtLXJlbW90ZT0kdGFyZ2V0X3VzZXJfaG9zdG5hbWUgXAorICAtbSAkc2NyaXB0X2Jhc2UgXAorICAgJGZ1bGxfc2NyaXB0X25hbWUgIiRAIgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZGV2dG9vbCBiL3NjcmlwdHMvZGV2dG9vbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2RmOTUxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9kZXZ0b29sCkBAIC0wLDAgKzEsMjk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBPcGVuRW1iZWRkZWQgRGV2ZWxvcG1lbnQgdG9vbAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgcmUKK2ltcG9ydCBDb25maWdQYXJzZXIKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCitiYXNlcGF0aCA9ICcnCit3b3Jrc3BhY2UgPSB7fQorY29uZmlnID0gTm9uZQorY29udGV4dCA9IE5vbmUKKworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2Zyb20gZGV2dG9vbCBpbXBvcnQgRGV2dG9vbEVycm9yLCBzZXR1cF90aW5mb2lsCitpbXBvcnQgc2NyaXB0dXRpbHMKK2xvZ2dlciA9IHNjcmlwdHV0aWxzLmxvZ2dlcl9jcmVhdGUoJ2RldnRvb2wnKQorCitwbHVnaW5zID0gW10KKworCitjbGFzcyBDb25maWdIYW5kbGVyKG9iamVjdCk6CisgICAgY29uZmlnX2ZpbGUgPSAnJworICAgIGNvbmZpZ19vYmogPSBOb25lCisgICAgaW5pdF9wYXRoID0gJycKKyAgICB3b3Jrc3BhY2VfcGF0aCA9ICcnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19maWxlID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5jb25maWdfb2JqID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorCisgICAgZGVmIGdldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldCA9IHNlbGYuY29uZmlnX29iai5nZXQoc2VjdGlvbiwgb3B0aW9uKQorICAgICAgICBleGNlcHQgKENvbmZpZ1BhcnNlci5Ob09wdGlvbkVycm9yLCBDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IpOgorICAgICAgICAgICAgaWYgZGVmYXVsdCAhPSBOb25lOgorICAgICAgICAgICAgICAgIHJldCA9IGRlZmF1bHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuY29uZmlnX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5jb25maWdfb2JqLnJlYWQoc2VsZi5jb25maWdfZmlsZSkKKworICAgICAgICAgICAgaWYgc2VsZi5jb25maWdfb2JqLmhhc19vcHRpb24oJ0dlbmVyYWwnLCAnaW5pdF9wYXRoJyk6CisgICAgICAgICAgICAgICAgcHRoID0gc2VsZi5nZXQoJ0dlbmVyYWwnLCAnaW5pdF9wYXRoJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXRfcGF0aCA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgcHRoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmluaXRfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignaW5pdF9wYXRoICVzIHNwZWNpZmllZCBpbiBjb25maWcgZmlsZSBjYW5ub3QgYmUgZm91bmQnICUgcHRoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX29iai5hZGRfc2VjdGlvbignR2VuZXJhbCcpCisKKyAgICAgICAgc2VsZi53b3Jrc3BhY2VfcGF0aCA9IHNlbGYuZ2V0KCdHZW5lcmFsJywgJ3dvcmtzcGFjZV9wYXRoJywgb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnd29ya3NwYWNlJykpCisgICAgICAgIHJldHVybiBUcnVlCisKKworICAgIGRlZiB3cml0ZShzZWxmKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCd3cml0aW5nIHRvIGNvbmZpZyBmaWxlICVzJyAlIHNlbGYuY29uZmlnX2ZpbGUpCisgICAgICAgIHNlbGYuY29uZmlnX29iai5zZXQoJ0dlbmVyYWwnLCAnd29ya3NwYWNlX3BhdGgnLCBzZWxmLndvcmtzcGFjZV9wYXRoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jb25maWdfb2JqLndyaXRlKGYpCisKK2NsYXNzIENvbnRleHQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoa3dhcmdzKQorCisKK2RlZiByZWFkX3dvcmtzcGFjZSgpOgorICAgIGdsb2JhbCB3b3Jrc3BhY2UKKyAgICB3b3Jrc3BhY2UgPSB7fQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICBpZiBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJ3b3Jrc3BhY2UgbGF5ZXIgbm90IHNldCB1cCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIHdvcmtzcGFjZSBsYXllciBpbiAlcycgJSBjb25maWcud29ya3NwYWNlX3BhdGgpCisgICAgICAgICAgICBfY3JlYXRlX3dvcmtzcGFjZShjb25maWcud29ya3NwYWNlX3BhdGgsIGNvbmZpZywgYmFzZXBhdGgpCisgICAgaWYgbm90IGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIF9lbmFibGVfd29ya3NwYWNlX2xheWVyKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgY29uZmlnLCBiYXNlcGF0aCkKKworICAgIGxvZ2dlci5kZWJ1ZygnUmVhZGluZyB3b3Jrc3BhY2UgaW4gJXMnICUgY29uZmlnLndvcmtzcGFjZV9wYXRoKQorICAgIGV4dGVybmFsc3JjX3JlID0gcmUuY29tcGlsZShyJ15FWFRFUk5BTFNSQyhfcG4tKFteID1dKykpPyAqPSAqIihbXiJdKikiJCcpCisgICAgZm9yIGZuIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsICcqLmJiYXBwZW5kJykpOgorICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgcmVzID0gZXh0ZXJuYWxzcmNfcmUubWF0Y2gobGluZS5yc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIHBuID0gcmVzLmdyb3VwKDIpIG9yIG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmbikpWzBdLnNwbGl0KCdfJylbMF0KKyAgICAgICAgICAgICAgICAgICAgd29ya3NwYWNlW3BuXSA9IHsnc3JjdHJlZSc6IHJlcy5ncm91cCgzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmJhcHBlbmQnOiBmbn0KKworZGVmIGNyZWF0ZV93b3Jrc3BhY2UoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICBpZiBhcmdzLmxheWVycGF0aDoKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5hYnNwYXRoKGFyZ3MubGF5ZXJwYXRoKQorICAgIGVsc2U6CisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICd3b3Jrc3BhY2UnKSkKKyAgICBfY3JlYXRlX3dvcmtzcGFjZSh3b3Jrc3BhY2VkaXIsIGNvbmZpZywgYmFzZXBhdGgpCisgICAgaWYgbm90IGFyZ3MuY3JlYXRlX29ubHk6CisgICAgICAgIF9lbmFibGVfd29ya3NwYWNlX2xheWVyKHdvcmtzcGFjZWRpciwgY29uZmlnLCBiYXNlcGF0aCkKKworZGVmIF9jcmVhdGVfd29ya3NwYWNlKHdvcmtzcGFjZWRpciwgY29uZmlnLCBiYXNlcGF0aCk6CisgICAgaW1wb3J0IGJiCisKKyAgICBjb25mZGlyID0gb3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihjb25mZGlyLCAnbGF5ZXIuY29uZicpKToKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1NwZWNpZmllZCB3b3Jrc3BhY2UgYWxyZWFkeSBzZXQgdXAsIGxlYXZpbmcgYXMtaXMnKQorICAgIGVsc2U6CisgICAgICAgICMgQWRkIGEgY29uZmlnIGZpbGUKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbmZkaXIpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29uZmRpciwgJ2xheWVyLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnIyAjIyMgd29ya3NwYWNlIGxheWVyIGF1dG8tZ2VuZXJhdGVkIGJ5IGRldnRvb2wgIyMjXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJQQVRIID0uICIkJyArICd7TEFZRVJESVJ9OiJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIkJyArICd7TEFZRVJESVJ9L3JlY2lwZXMvKi8qLmJiIFxcXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnICAgICAgICAgICAgJCcgKyAne0xBWUVSRElSfS9hcHBlbmRzLyouYmJhcHBlbmQiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX0NPTExFQ1RJT05TICs9ICJ3b3Jrc3BhY2VsYXllciJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl93b3Jrc3BhY2VsYXllciA9ICJeJCcgKyAne0xBWUVSRElSfS8iXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZX3dvcmtzcGFjZWxheWVyID0gIjEiXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZX3dvcmtzcGFjZWxheWVyID0gIjk5IlxuJykKKyAgICAgICAgIyBBZGQgYSBSRUFETUUgZmlsZQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ1JFQURNRScpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdUaGlzIGxheWVyIHdhcyBjcmVhdGVkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgZGV2dG9vbCB1dGlsaXR5IGluIG9yZGVyIHRvXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnY29udGFpbiByZWNpcGVzIGFuZCBiYmFwcGVuZHMuIEluIG1vc3QgaW5zdGFuY2VzIHlvdSBzaG91bGQgdXNlIHRoZVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2RldnRvb2wgdXRpbGl0eSB0byBtYW5hZ2UgZmlsZXMgd2l0aGluIGl0IHJhdGhlciB0aGFuIG1vZGlmeWluZyBmaWxlc1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2RpcmVjdGx5IChhbHRob3VnaCByZWNpcGVzIGFkZGVkIHdpdGggImRldnRvb2wgYWRkIiB3aWxsIG9mdGVuIG5lZWRcbicpCisgICAgICAgICAgICBmLndyaXRlKCdkaXJlY3QgbW9kaWZpY2F0aW9uLilcbicpCisgICAgICAgICAgICBmLndyaXRlKCdcbklmIHlvdSBubyBsb25nZXIgbmVlZCB0byB1c2UgZGV2dG9vbCB5b3UgY2FuIHJlbW92ZSB0aGUgcGF0aCB0byB0aGlzXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnd29ya3NwYWNlIGxheWVyIGZyb20geW91ciBjb25mL2JibGF5ZXJzLmNvbmYgZmlsZSAoYW5kIHRoZW4gZGVsZXRlIHRoZVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2xheWVyLCBpZiB5b3Ugd2lzaCkuXG4nKQorCitkZWYgX2VuYWJsZV93b3Jrc3BhY2VfbGF5ZXIod29ya3NwYWNlZGlyLCBjb25maWcsIGJhc2VwYXRoKToKKyAgICAiIiJFbnN1cmUgdGhlIHdvcmtzcGFjZSBsYXllciBpcyBpbiBiYmxheWVycy5jb25mIiIiCisgICAgaW1wb3J0IGJiCisgICAgYmJsYXllcnNfY29uZiA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ2NvbmYnLCAnYmJsYXllcnMuY29uZicpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJibGF5ZXJzX2NvbmYpOgorICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIGJibGF5ZXJzLmNvbmYnKQorICAgICAgICByZXR1cm4KKyAgICBfLCBhZGRlZCA9IGJiLnV0aWxzLmVkaXRfYmJsYXllcnNfY29uZihiYmxheWVyc19jb25mLCB3b3Jrc3BhY2VkaXIsIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0VuYWJsaW5nIHdvcmtzcGFjZSBsYXllciBpbiBiYmxheWVycy5jb25mJykKKyAgICBpZiBjb25maWcud29ya3NwYWNlX3BhdGggIT0gd29ya3NwYWNlZGlyOgorICAgICAgICAjIFVwZGF0ZSBvdXIgY29uZmlnIHRvIHBvaW50IHRvIHRoZSBuZXcgbG9jYXRpb24KKyAgICAgICAgY29uZmlnLndvcmtzcGFjZV9wYXRoID0gd29ya3NwYWNlZGlyCisgICAgICAgIGNvbmZpZy53cml0ZSgpCisKKworZGVmIG1haW4oKToKKyAgICBnbG9iYWwgYmFzZXBhdGgKKyAgICBnbG9iYWwgY29uZmlnCisgICAgZ2xvYmFsIGNvbnRleHQKKworICAgIGNvbnRleHQgPSBDb250ZXh0KGZpeGVkX3NldHVwPUZhbHNlKQorCisgICAgIyBEZWZhdWx0IGJhc2VwYXRoCisgICAgYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKKyAgICBwdGggPSBiYXNlcGF0aAorICAgIHdoaWxlIHB0aCAhPSAnJyBhbmQgcHRoICE9IG9zLnNlcDoKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHB0aCwgJy5kZXZ0b29sYmFzZScpKToKKyAgICAgICAgICAgIGNvbnRleHQuZml4ZWRfc2V0dXAgPSBUcnVlCisgICAgICAgICAgICBiYXNlcGF0aCA9IHB0aAorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKHB0aCkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJPcGVuRW1iZWRkZWQgZGV2ZWxvcG1lbnQgdG9vbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmFzZXBhdGgnLCBoZWxwPSdCYXNlIGRpcmVjdG9yeSBvZiBTREsgLyBidWlsZCBkaXJlY3RvcnknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmJwYXRoJywgaGVscD0nRXhwbGljaXRseSBzcGVjaWZ5IHRoZSBCQlBBVEgsIHJhdGhlciB0aGFuIGdldHRpbmcgaXQgZnJvbSB0aGUgbWV0YWRhdGEnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgaGVscD0nUHJpbnQgb25seSBlcnJvcnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY29sb3InLCBjaG9pY2VzPVsnYXV0bycsICdhbHdheXMnLCAnbmV2ZXInXSwgZGVmYXVsdD0nYXV0bycsIGhlbHA9J0NvbG9yaXplIG91dHB1dCAod2hlcmUgJShtZXRhdmFyKXMgaXMgJShjaG9pY2VzKXMpJywgbWV0YXZhcj0nQ09MT1InKQorCisgICAgZ2xvYmFsX2FyZ3MsIHVucGFyc2VkX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCisKKyAgICAjIEhlbHAgaXMgYWRkZWQgaGVyZSByYXRoZXIgdGhhbiB2aWEgYWRkX2hlbHA9VHJ1ZSwgYXMgd2UgZG9uJ3Qgd2FudCBpdCB0bworICAgICMgYmUgaGFuZGxlZCBieSBwYXJzZV9rbm93bl9hcmdzKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBhY3Rpb249J2hlbHAnLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCisKKyAgICBpZiBnbG9iYWxfYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgZWxpZiBnbG9iYWxfYXJncy5xdWlldDoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisKKyAgICBpZiBnbG9iYWxfYXJncy5iYXNlcGF0aDoKKyAgICAgICAgIyBPdmVycmlkZQorICAgICAgICBiYXNlcGF0aCA9IGdsb2JhbF9hcmdzLmJhc2VwYXRoCisgICAgZWxpZiBub3QgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgYmFzZXBhdGggPSBvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKQorICAgICAgICBpZiBub3QgYmFzZXBhdGg6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRoaXMgc2NyaXB0IGNhbiBvbmx5IGJlIHJ1biBhZnRlciBpbml0aWFsaXNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IChlLmcuIGJ5IHVzaW5nIG9lLWluaXQtYnVpbGQtZW52KSIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBiYXNlcGF0aCAlcycgJSBiYXNlcGF0aCkKKworICAgIGNvbmZpZyA9IENvbmZpZ0hhbmRsZXIob3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZicsICdkZXZ0b29sLmNvbmYnKSkKKyAgICBpZiBub3QgY29uZmlnLnJlYWQoKToKKyAgICAgICAgcmV0dXJuIC0xCisKKyAgICAjIFdlIG5lZWQgdG8gYmUgaW4gdGhpcyBkaXJlY3Rvcnkgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBpbml0aWFsaXNlIHRpbmZvaWwKKyAgICBvcy5jaGRpcihiYXNlcGF0aCkKKworICAgIGJpdGJha2Vfc3ViZGlyID0gY29uZmlnLmdldCgnR2VuZXJhbCcsICdiaXRiYWtlX3N1YmRpcicsICcnKQorICAgIGlmIGJpdGJha2Vfc3ViZGlyOgorICAgICAgICAjIE5vcm1hbGx5IHNldCBmb3IgdXNlIHdpdGhpbiB0aGUgU0RLCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgYml0YmFrZSBzdWJkaXIgJXMnICUgYml0YmFrZV9zdWJkaXIpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsIGJpdGJha2Vfc3ViZGlyLCAnbGliJykpCisgICAgICAgIGNvcmVfbWV0YV9zdWJkaXIgPSBjb25maWcuZ2V0KCdHZW5lcmFsJywgJ2NvcmVfbWV0YV9zdWJkaXInKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKGJhc2VwYXRoLCBjb3JlX21ldGFfc3ViZGlyLCAnbGliJykpCisgICAgZWxzZToKKyAgICAgICAgIyBTdGFuZGFyZCBsb2NhdGlvbgorICAgICAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgICAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgICAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHN0YW5kYXJkIGJpdGJha2UgcGF0aCAlcycgJSBiaXRiYWtlcGF0aCkKKyAgICAgICAgc2NyaXB0cGF0aC5hZGRfb2VfbGliX3BhdGgoKQorCisgICAgc2NyaXB0dXRpbHMubG9nZ2VyX3NldHVwX2NvbG9yKGxvZ2dlciwgZ2xvYmFsX2FyZ3MuY29sb3IpCisKKyAgICBpZiBnbG9iYWxfYXJncy5iYnBhdGggaXMgTm9uZToKKyAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoY29uZmlnX29ubHk9VHJ1ZSkKKyAgICAgICAgZ2xvYmFsX2FyZ3MuYmJwYXRoID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgZWxzZToKKyAgICAgICAgdGluZm9pbCA9IE5vbmUKKworICAgIGZvciBwYXRoIGluIFtzY3JpcHRzX3BhdGhdICsgZ2xvYmFsX2FyZ3MuYmJwYXRoLnNwbGl0KCc6Jyk6CisgICAgICAgIHBsdWdpbnBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicsICdkZXZ0b29sJykKKyAgICAgICAgc2NyaXB0dXRpbHMubG9hZF9wbHVnaW5zKGxvZ2dlciwgcGx1Z2lucywgcGx1Z2lucGF0aCkKKworICAgIGlmIHRpbmZvaWw6CisgICAgICAgIHRpbmZvaWwuc2h1dGRvd24oKQorCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSJzdWJwYXJzZXJfbmFtZSIsIHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisKKyAgICBpZiBub3QgY29udGV4dC5maXhlZF9zZXR1cDoKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV93b3Jrc3BhY2UgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2NyZWF0ZS13b3Jrc3BhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdXAgYSB3b3Jrc3BhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nU2V0cyB1cCBhIG5ldyB3b3Jrc3BhY2UuIE5PVEU6IG90aGVyIGRldnRvb2wgc3ViY29tbWFuZHMgd2lsbCBjcmVhdGUgYSB3b3Jrc3BhY2UgYXV0b21hdGljYWxseSBhcyBuZWVkZWQsIHNvIHlvdSBvbmx5IG5lZWQgdG8gdXNlICUocHJvZylzIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgd2hlcmUgdGhlIHdvcmtzcGFjZSBzaG91bGQgYmUgbG9jYXRlZC4nKQorICAgICAgICBwYXJzZXJfY3JlYXRlX3dvcmtzcGFjZS5hZGRfYXJndW1lbnQoJ2xheWVycGF0aCcsIG5hcmdzPSc/JywgaGVscD0nUGF0aCBpbiB3aGljaCB0aGUgd29ya3NwYWNlIGxheWVyIHNob3VsZCBiZSBjcmVhdGVkJykKKyAgICAgICAgcGFyc2VyX2NyZWF0ZV93b3Jrc3BhY2UuYWRkX2FyZ3VtZW50KCctLWNyZWF0ZS1vbmx5JywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nT25seSBjcmVhdGUgdGhlIHdvcmtzcGFjZSBsYXllciwgZG8gbm90IGFsdGVyIGNvbmZpZ3VyYXRpb24nKQorICAgICAgICBwYXJzZXJfY3JlYXRlX3dvcmtzcGFjZS5zZXRfZGVmYXVsdHMoZnVuYz1jcmVhdGVfd29ya3NwYWNlKQorCisgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX2NvbW1hbmRzJyk6CisgICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyh1bnBhcnNlZF9hcmdzLCBuYW1lc3BhY2U9Z2xvYmFsX2FyZ3MpCisKKyAgICBpZiBhcmdzLnN1YnBhcnNlcl9uYW1lICE9ICdjcmVhdGUtd29ya3NwYWNlJzoKKyAgICAgICAgcmVhZF93b3Jrc3BhY2UoKQorCisgICAgdHJ5OgorICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKQorICAgIGV4Y2VwdCBEZXZ0b29sRXJyb3IgYXMgZXJyOgorICAgICAgICBpZiBzdHIoZXJyKToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXJyKSkKKyAgICAgICAgcmV0ID0gMQorCisgICAgcmV0dXJuIHJldAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZSBiL3NjcmlwdHMvZ2VuLWxvY2tlZHNpZy1jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOTNiMmMwCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9nZW4tbG9ja2Vkc2lnLWNhY2hlCkBAIC0wLDAgKzEsNDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBnZW4tbG9ja2Vkc2lnLWNhY2hlIDxsb2NrZWQtc2lncy5pbmM+IDxpbnB1dC1jYWNoZWRpcj4gPG91dHB1dC1jYWNoZWRpcj4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2xvYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IGVycm5vCisKK2RlZiBta2RpcihkKToKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGQpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisKK2lmIGxlbihzeXMuYXJndikgPCAzOgorICAgIHByaW50KCJJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBzcGVjaWZpZWQiKQorICAgIHN5cy5leGl0KDEpCisKK3NpZ3MgPSBbXQord2l0aCBvcGVuKHN5cy5hcmd2WzFdKSBhcyBmOgorICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgIGlmICI6IiBpbiBsOgorICAgICAgICAgICAgc2lncy5hcHBlbmQobC5zcGxpdCgiOiIpWzJdLnNwbGl0KClbMF0pCisKK2ZpbGVzID0gc2V0KCkKK2ZvciBzIGluIHNpZ3M6CisgICAgcCA9IHN5cy5hcmd2WzJdICsgIi8iICsgc1s6Ml0gKyAiLyoiICsgcyArICIqIgorICAgIGZpbGVzIHw9IHNldChnbG9iLmdsb2IocCkpCisgICAgcCA9IHN5cy5hcmd2WzJdICsgIi8qLyIgKyBzWzoyXSArICIvKiIgKyBzICsgIioiCisgICAgZmlsZXMgfD0gc2V0KGdsb2IuZ2xvYihwKSkKKworZm9yIGYgaW4gZmlsZXM6CisgICAgZHN0ID0gZi5yZXBsYWNlKHN5cy5hcmd2WzJdLCBzeXMuYXJndlszXSkKKyAgICBkZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGRzdCkKKyAgICBta2RpcihkZXN0ZGlyKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0KToKKyAgICAgICAgb3MucmVtb3ZlKGRzdCkKKyAgICBpZiAob3Muc3RhdChmKS5zdF9kZXYgPT0gb3Muc3RhdChkZXN0ZGlyKS5zdF9kZXYpOgorICAgICAgICBvcy5saW5rKGYsIGRzdCkKKyAgICBlbHNlOgorICAgICAgICBzaHV0aWwuY29weWZpbGUoZiwgZHN0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW4tc2l0ZS1jb25maWcgYi9zY3JpcHRzL2dlbi1zaXRlLWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZGE3YTBiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9nZW4tc2l0ZS1jb25maWcKQEAgLTAsMCArMSw1MyBAQAorIyEgL2Jpbi9zaAorIyAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK2NhdCA8PCBFT0YKK0FDX1BSRVJFUSgyLjU3KQorQUNfSU5JVChbc2l0ZV93aWRlXSxbMS4wLjBdKQorCitFT0YKKworIyBEaXNhYmxlIGFzIGVuZGlhbiBpcyBzZXQgaW4gdGhlIGRlZmF1bHQgY29uZmlnCisjZWNobyBBQ19DX0JJR0VORElBTgorI2VjaG8KKworaWYgWyAtZSAkMS90eXBlcyBdIDsgdGhlbgorICB3aGlsZSByZWFkIHR5cGUgOyBkbworICAgIGVjaG8gIkFDX0NIRUNLX1NJWkVPRihbJHR5cGVdKSIKKyAgZG9uZSA8ICQxL3R5cGVzCisKKyAgZWNobworZmkKKworaWYgWyAtZSAkMS9mdW5jcyBdOyB0aGVuCisgIHdoaWxlIHJlYWQgZnVuYyA7IGRvCisgICAgZWNobyAiQUNfQ0hFQ0tfRlVOQ1MoWyRmdW5jXSkiCisgIGRvbmUgPCAkMS9mdW5jcworCisgIGVjaG8KK2ZpCisKK2lmIFsgLWUgJDEvaGVhZGVycyBdOyB0aGVuCisgIHdoaWxlIHJlYWQgaGVhZGVyIDsgZG8KKyAgICBlY2hvICJBQ19DSEVDS19IRUFERVJTKFskaGVhZGVyXSkiCisgIGRvbmUgPCAkMS9oZWFkZXJzCisKKyAgZWNobworZmkKKworY2F0IDw8IEVPRgorQUNfT1VUUFVUCitFT0YKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaG9iIGIvc2NyaXB0cy9ob2IKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGQzM2FiMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvaG9iCkBAIC0wLDAgKzEsNiBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorZXhwb3J0IEJCX0VOVl9FWFRSQVdISVRFPSJESVNBQkxFX1NBTklUWV9DSEVDS1MgJEJCX0VOVl9FWFRSQVdISVRFIgorRElTQUJMRV9TQU5JVFlfQ0hFQ0tTPTEgYml0YmFrZSAtdSBob2IgJEAKKworcmV0PSQ/CitleGl0ICRyZXQKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weSBiL3NjcmlwdHMvbGliL2JzcC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmJiNmUxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgWW9jdG8gQlNQIHRvb2xzIGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL2VuZ2luZS5weSBiL3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2YmUyMwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9lbmdpbmUucHkKQEAgLTAsMCArMSwxOTQ3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgdGVtcGxhdGluZyBlbmdpbmUgdXNlZCBieSAneW9jdG8tYnNwJyB0bworIyBjcmVhdGUgQlNQcy4gIFRoZSBCU1AgdGVtcGxhdGVzIGFyZSBzaW1wbHkgdGhlIHNldCBvZiBmaWxlcyBleHBlY3RlZAorIyB0byBhcHBlYXIgaW4gYSBnZW5lcmF0ZWQgQlNQLCBtYXJrZWQgdXAgd2l0aCBhIHNtYWxsIHNldCBvZiB0YWdzCisjIHVzZWQgdG8gY3VzdG9taXplIHRoZSBvdXRwdXQuICBUaGUgZW5naW5lIHBhcnNlcyB0aHJvdWdoIHRoZQorIyB0ZW1wbGF0ZXMgYW5kIGdlbmVyYXRlcyBhIFB5dGhvbiBwcm9ncmFtIGNvbnRhaW5pbmcgYWxsIHRoZSBsb2dpYworIyBhbmQgaW5wdXQgZWxlbWVudHMgbmVlZGVkIHRvIGRpc3BsYXkgYW5kIHJldHJpZXZlIEJTUC1zcGVjaWZpYworIyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyLiAgVGhlIHJlc3VsdGluZyBwcm9ncmFtIHVzZXMgdGhvc2UgcmVzdWx0cworIyB0byBnZW5lcmF0ZSB0aGUgZmluYWwgQlNQIGZpbGVzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2Zyb20gdGFncyBpbXBvcnQgKgoraW1wb3J0IHNobGV4CitpbXBvcnQganNvbgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKKworY2xhc3MgTGluZSgpOgorICAgICIiIgorICAgIEdlbmVyaWMgKGFic3RyYWN0KSBjb250YWluZXIgcmVwcmVzZW50aW5nIGEgbGluZSB0aGF0IHdpbGwgYXBwZWFyCisgICAgaW4gdGhlIEJTUC1nZW5lcmF0aW5nIHByb2dyYW0uCisgICAgIiIiCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5saW5lID0gbGluZQorICAgICAgICBzZWxmLmdlbmVyYXRlZF9saW5lID0gIiIKKyAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heGludAorICAgICAgICBzZWxmLmRpc2NhcmQgPSBGYWxzZQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSB0aGUgZmluYWwgZXhlY3V0YWJsZSBsaW5lIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlCisgICAgICAgIEJTUC1nZW5lcmF0aW9uIHByb2dyYW0uCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZXNjYXBlKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRXNjYXBlIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgdW50aWwgSSBmaW5kCisgICAgICAgIHNvbWV0aGluZyBiZXR0ZXIgKHJlLmVzY2FwZSgpIGVzY2FwZXMgd2F5IHRvbyBtdWNoKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsaW5lLnJlcGxhY2UoIlxcIiwgIlxcXFwiKS5yZXBsYWNlKCJcIiIsICJcXFwiIikucmVwbGFjZSgiJyIsICJcXCciKQorCisgICAgZGVmIHBhcnNlX2Vycm9yKHNlbGYsIG1zZywgbGluZW5vLCBsaW5lKToKKyAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCIlczogJXMiICUgKG1zZywgbGluZSkpCisKKworY2xhc3MgTm9ybWFsTGluZShMaW5lKToKKyAgICAiIiIKKyAgICBDb250YWluZXIgZm9yIG5vcm1hbCAobm9uLXRhZykgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICBMaW5lLl9faW5pdF9fKHNlbGYsIGxpbmUpCisgICAgICAgIHNlbGYuaXNfZmlsZW5hbWUgPSBGYWxzZQorICAgICAgICBzZWxmLmlzX2Rpcm5hbWUgPSBGYWxzZQorICAgICAgICBzZWxmLm91dF9maWxlYmFzZSA9IE5vbmUKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBpZiBzZWxmLmlzX2ZpbGVuYW1lOgorICAgICAgICAgICAgbGluZSA9ICJjdXJyZW50X2ZpbGUgPSBcIiIgKyBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZmlsZWJhc2UsIHNlbGYuZXNjYXBlKHNlbGYubGluZSkpICsgIlwiOyBvZiA9IG9wZW4oY3VycmVudF9maWxlLCBcIndcIikiCisgICAgICAgIGVsaWYgc2VsZi5pc19kaXJuYW1lOgorICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm91dF9maWxlYmFzZSwgc2VsZi5lc2NhcGUoc2VsZi5saW5lKSkKKyAgICAgICAgICAgIGxpbmUgPSAiaWYgbm90IG9zLnBhdGguZXhpc3RzKFwiIiArIGRpcm5hbWUgKyAiXCIpOiBvcy5ta2RpcihcIiIgKyBkaXJuYW1lICsgIlwiKSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSAib2Yud3JpdGUoXCIiICsgc2VsZi5lc2NhcGUoc2VsZi5saW5lKSArICJcXG5cIikiCisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgQ29kZUxpbmUoTGluZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBQeXRob24gY29kZSB0YWcgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmUpOgorICAgICAgICBMaW5lLl9faW5pdF9fKHNlbGYsIGxpbmUpCisKKyAgICBkZWYgZ2VuKHNlbGYsIGNvbnRleHQgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGluZQorCisKK2NsYXNzIEFzc2lnbm1lbnQ6CisgICAgIiIiCisgICAgUmVwcmVzZW50YXRpb24gb2YgZXZlcnl0aGluZyB3ZSBrbm93IGFib3V0IHt7PW5hbWUgfX0gdGFncy4KKyAgICBJbnN0YW5jZXMgb2YgdGhlc2UgYXJlIHVzZWQgYnkgQXNzaWdubWVudCBsaW5lcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIGVuZCwgbmFtZSk6CisgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAorICAgICAgICBzZWxmLmVuZCA9IGVuZAorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKworY2xhc3MgQXNzaWdubWVudExpbmUoTm9ybWFsTGluZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBub3JtYWwgbGluZXMgY29udGFpbmluZyBhc3NpZ25tZW50IHRhZ3MuICBBc3NpZ25tZW50CisgICAgdGFncyBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciBvZiAnc3RhcnQnIHZhbHVlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgTm9ybWFsTGluZS5fX2luaXRfXyhzZWxmLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2lnbm1lbnRzID0gW10KKworICAgIGRlZiBhZGRfYXNzaWdubWVudChzZWxmLCBzdGFydCwgZW5kLCBuYW1lKToKKyAgICAgICAgc2VsZi5hc3NpZ25tZW50cy5hcHBlbmQoQXNzaWdubWVudChzdGFydCwgZW5kLCBuYW1lKSkKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBsaW5lID0gc2VsZi5lc2NhcGUoc2VsZi5saW5lKQorCisgICAgICAgIGZvciBhc3NpZ25tZW50IGluIHNlbGYuYXNzaWdubWVudHM6CisgICAgICAgICAgICByZXBsYWNlbWVudCA9ICJcIiArICIgKyBhc3NpZ25tZW50Lm5hbWUgKyAiICsgXCIiCisgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoQVNTSUdOX1RBRykKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzppZHhdICsgcmVwbGFjZW1lbnQgKyBsaW5lW2lkeCArIGFzc2lnbm1lbnQuZW5kIC0gYXNzaWdubWVudC5zdGFydDpdCisgICAgICAgIGlmIHNlbGYuaXNfZmlsZW5hbWU6CisgICAgICAgICAgICByZXR1cm4gImN1cnJlbnRfZmlsZSA9IFwiIiArIG9zLnBhdGguam9pbihzZWxmLm91dF9maWxlYmFzZSwgbGluZSkgKyAiXCI7IG9mID0gb3BlbihjdXJyZW50X2ZpbGUsIFwid1wiKSIKKyAgICAgICAgZWxpZiBzZWxmLmlzX2Rpcm5hbWU6CisgICAgICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5qb2luKHNlbGYub3V0X2ZpbGViYXNlLCBsaW5lKQorICAgICAgICAgICAgcmV0dXJuICJpZiBub3Qgb3MucGF0aC5leGlzdHMoXCIiICsgZGlybmFtZSArICJcIik6IG9zLm1rZGlyKFwiIiArIGRpcm5hbWUgKyAiXCIpIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJvZi53cml0ZShcIiIgKyBsaW5lICsgIlxcblwiKSIKKworCitjbGFzcyBJbnB1dExpbmUoTGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgSW5wdXQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIExpbmUuX19pbml0X18oc2VsZiwgdGFnKQorICAgICAgICBzZWxmLnByb3BzID0gcHJvcHMKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnByaW8gPSBpbnQocHJvcHNbInByaW8iXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5wcmlvID0gc3lzLm1heGludAorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlcGVuZHNfb24gPSBzZWxmLnByb3BzWyJkZXBlbmRzLW9uIl0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZXBlbmRzX29uX3ZhbCA9IHNlbGYucHJvcHNbImRlcGVuZHMtb24tdmFsIl0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyAnZGVwZW5kcy1vbi12YWwnIGZvciAnZGVwZW5kcy1vbicgcHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIEVkaXRCb3hJbnB1dExpbmUoSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciAnZWRpdGJveCcgSW5wdXQgbGluZXMuCisKKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJMb2FkIGFkZHJlc3MiCisgICAgICAgIG1zZzogZXhhbXBsZSAtICJQbGVhc2UgZW50ZXIgdGhlIGxvYWQgYWRkcmVzcyIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvCisgICAgICAgIHdoYXRldmVyIHRoZSB1c2VyIHR5cGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICduYW1lJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBkZWZhdWx0KHJhd19pbnB1dChcIiIgKyBtc2cgKyAiIFwiKSwgIiArIG5hbWUgKyAiKSIKKworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIEdpdFJlcG9FZGl0Qm94SW5wdXRMaW5lKEVkaXRCb3hJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yICdlZGl0Ym94JyBJbnB1dCBsaW5lcyBmb3IgdXNlciBpbnB1dCBvZiByZW1vdGUgZ2l0CisgICAgcmVwb3MuICBUaGlzIGNsYXNzIHZlcmlmaWVzIHRoZSBleGlzdGVuY2UgYW5kIGNvbm5lY3Rpdml0eSBvZiB0aGUKKyAgICBzcGVjaWZpZWQgZ2l0IHJlcG8uCisKKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJMb2FkIGFkZHJlc3MiCisgICAgICAgIG1zZzogZXhhbXBsZSAtICJQbGVhc2UgZW50ZXIgdGhlIGxvYWQgYWRkcmVzcyIKKyAgICByZXN1bHQ6CisgICAgICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJ25hbWUnIHRvCisgICAgICAgIHdoYXRldmVyIHRoZSB1c2VyIHR5cGVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBFZGl0Qm94SW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICBFZGl0Qm94SW5wdXRMaW5lLmdlbihzZWxmLCBjb250ZXh0KQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ25hbWUnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKyAgICAgICAgbXNnID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGdldF92ZXJpZmllZF9naXRfcmVwbyhcIiIgKyBtc2cgKyAiXCIsIiArIG5hbWUgKyAiKSIKKworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIEZpbGVFZGl0Qm94SW5wdXRMaW5lKEVkaXRCb3hJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yICdlZGl0Ym94JyBJbnB1dCBsaW5lcyBmb3IgdXNlciBpbnB1dCBvZiBleGlzdGluZworICAgIGZpbGVzLiAgVGhpcyBjbGFzcyB2ZXJpZmllcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBzcGVjaWZpZWQgZmlsZS4KKworICAgIHByb3BzOgorICAgICAgICBuYW1lOiBleGFtcGxlIC0gIkxvYWQgYWRkcmVzcyIKKyAgICAgICAgbXNnOiBleGFtcGxlIC0gIlBsZWFzZSBlbnRlciB0aGUgbG9hZCBhZGRyZXNzIgorICAgIHJlc3VsdDoKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSAnbmFtZScgdG8KKyAgICAgICAgd2hhdGV2ZXIgdGhlIHVzZXIgdHlwZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIEVkaXRCb3hJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIEVkaXRCb3hJbnB1dExpbmUuZ2VuKHNlbGYsIGNvbnRleHQpCisgICAgICAgIG5hbWUgPSBzZWxmLnByb3BzWyJuYW1lIl0KKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbmFtZScgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICBtc2cgPSBzZWxmLnByb3BzWyJtc2ciXQorICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ21zZycgcHJvcGVydHkgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gc2VsZi5wcm9wc1siZGVmYXVsdCJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGRlZmF1bHRfY2hvaWNlID0gIiIKKworICAgICAgICBtc2cgKz0gIiBbZGVmYXVsdDogIiArIGRlZmF1bHRfY2hvaWNlICsgIl0iCisKKyAgICAgICAgbGluZSA9IG5hbWUgKyAiID0gZ2V0X3ZlcmlmaWVkX2ZpbGUoXCIiICsgbXNnICsgIlwiLCIgKyBuYW1lICsgIiwgVHJ1ZSkiCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworCitjbGFzcyBCb29sZWFuSW5wdXRMaW5lKElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgYm9vbGVhbiBJbnB1dCBsaW5lcy4KKyAgICBwcm9wczoKKyAgICAgICAgbmFtZTogZXhhbXBsZSAtICJrZXlib2FyZCIKKyAgICAgICAgbXNnOiAgZXhhbXBsZSAtICJHb3Qga2V5Ym9hcmQ/IgorICAgIHJlc3VsdDoKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSAnbmFtZScgdG8gInllcyIgb3IgIm5vIgorICAgICAgICBleGFtcGxlIC0ga2V5Ym9hcmQgPSAieWVzIgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKyAgICAgICAgbmFtZSA9IHNlbGYucHJvcHNbIm5hbWUiXQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICduYW1lJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIG1zZyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGlmIG5vdCBtc2c6CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAnbXNnJyBwcm9wZXJ0eSBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIG1zZyArPSAiIFtkZWZhdWx0OiAiICsgZGVmYXVsdF9jaG9pY2UgKyAiXSIKKworICAgICAgICBsaW5lID0gbmFtZSArICIgPSBib29sZWFuKHJhd19pbnB1dChcIiIgKyBtc2cgKyAiIFwiKSwgIiArIG5hbWUgKyAiKSIKKworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIExpc3RJbnB1dExpbmUoSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBMaXN0LWJhc2VkIElucHV0IGxpbmVzLiBlLmcuIENob2ljZWxpc3QsIENoZWNrbGlzdC4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIElucHV0TGluZS5fX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIHNlbGYuY2hvaWNlcyA9IFtdCisKKyAgICBkZWYgZ2VuX2Nob2ljZXBhaXJfbGlzdChzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYSBsaXN0IG9mIDItaXRlbSB2YWw6ZGVzYyBsaXN0cyBmcm9tIHNlbGYuY2hvaWNlcy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuY2hvaWNlczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgY2hvaWNlcGFpcl9saXN0ID0gbGlzdCgpCisKKyAgICAgICAgZm9yIGNob2ljZSBpbiBzZWxmLmNob2ljZXM6CisgICAgICAgICAgICBjaG9pY2VwYWlyID0gW10KKyAgICAgICAgICAgIGNob2ljZXBhaXIuYXBwZW5kKGNob2ljZS52YWwpCisgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UuZGVzYykKKyAgICAgICAgICAgIGNob2ljZXBhaXJfbGlzdC5hcHBlbmQoY2hvaWNlcGFpcikKKworICAgICAgICByZXR1cm4gY2hvaWNlcGFpcl9saXN0CisKKyAgICBkZWYgZ2VuX2RlZ2VuZXJhdGVfY2hvaWNlcGFpcl9saXN0KHNlbGYsIGNob2ljZXMpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIGxpc3Qgb2YgMi1pdGVtIHZhbDpkZXNjIHdpdGggdmFsPWRlc2MgZnJvbSBwYXNzZWQtaW4gY2hvaWNlcy4iIiIKKyAgICAgICAgY2hvaWNlcGFpcl9saXN0ID0gbGlzdCgpCisKKyAgICAgICAgZm9yIGNob2ljZSBpbiBjaG9pY2VzOgorICAgICAgICAgICAgY2hvaWNlcGFpciA9IFtdCisgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UpCisgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UpCisgICAgICAgICAgICBjaG9pY2VwYWlyX2xpc3QuYXBwZW5kKGNob2ljZXBhaXIpCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXBhaXJfbGlzdAorCisgICAgZGVmIGV4ZWNfbGlzdGdlbl9mbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBFeGVjdXRlIHRoZSBsaXN0LWdlbmVyYXRpbmcgZnVuY3Rpb24gY29udGFpbmVkIGFzIGEgc3RyaW5nIGluCisgICAgICAgIHRoZSAiZ2VuIiBwcm9wZXJ0eS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHZhbCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm5hbWUgPSBzZWxmLnByb3BzWyJnZW4iXQorICAgICAgICAgICAgbW9kc3BsaXQgPSBmbmFtZS5zcGxpdCgnLicpCisgICAgICAgICAgICBtb2RfZm4gPSBtb2RzcGxpdC5wb3AoKQorICAgICAgICAgICAgbW9kID0gJy4nLmpvaW4obW9kc3BsaXQpCisKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kKQorICAgICAgICAgICAgIyBweXRob24gMi43IGhhcyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB1c2luZyBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZQorICAgICAgICAgICAgbSA9IHN5cy5tb2R1bGVzW21vZF0KKworICAgICAgICAgICAgZm4gPSBnZXRhdHRyKG0sIG1vZF9mbikKKyAgICAgICAgICAgIGlmIG5vdCBmbjoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJjb3VsZG4ndCBsb2FkIGZ1bmN0aW9uIHNwZWNpZmllZCBmb3IgJ2dlbicgcHJvcGVydHkgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgICAgICByZXR2YWwgPSBmbihjb250ZXh0KQorICAgICAgICAgICAgaWYgbm90IHJldHZhbDoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJmdW5jdGlvbiBzcGVjaWZpZWQgZm9yICdnZW4nIHByb3BlcnR5IHJldHVybmVkIG5vdGhpbmcgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vLCBzZWxmLmxpbmUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgZ2VuX2Nob2ljZXNfc3RyKHNlbGYsIGNob2ljZXBhaXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIEdlbmVyYXRlIGEgbnVtYmVyZWQgbGlzdCBvZiBjaG9pY2VzIGZyb20gYSBsaXN0IG9mIGNob2ljZXBhaXJzCisgICAgICAgIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLgorICAgICAgICAiIiIKKyAgICAgICAgY2hvaWNlc19zdHIgPSAiIgorCisgICAgICAgIGZvciBpLCBjaG9pY2VwYWlyIGluIGVudW1lcmF0ZShjaG9pY2VwYWlycyk6CisgICAgICAgICAgICBjaG9pY2VzX3N0ciArPSAiXHQiICsgc3RyKGkgKyAxKSArICIpICIgKyBjaG9pY2VwYWlyWzFdICsgIlxuIgorCisgICAgICAgIHJldHVybiBjaG9pY2VzX3N0cgorCisgICAgZGVmIGdlbl9jaG9pY2VzX3ZhbF9zdHIoc2VsZiwgY2hvaWNlcGFpcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2hvaWNlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgICBudW1iZXJlZCBsaXN0IGdlbmVyYXRlZCBieSBnZW5fY2hvaWNlc19zdHIoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgPSAiWyIKKworICAgICAgICBmb3IgaSwgY2hvaWNlcGFpciBpbiBlbnVtZXJhdGUoY2hvaWNlcGFpcnMpOgorICAgICAgICAgICAgY2hvaWNlc192YWxfbGlzdCArPSAiXCIiICsgY2hvaWNlcGFpclswXSArICJcIiwiCisgICAgICAgIGNob2ljZXNfdmFsX2xpc3QgKz0gIl0iCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXNfdmFsX2xpc3QKKworICAgIGRlZiBnZW5fY2hvaWNlc192YWxfbGlzdChzZWxmLCBjaG9pY2VwYWlycyk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhbiBhcnJheSBvZiBjaG9pY2UgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgICAgIG51bWJlcmVkIGxpc3QgZ2VuZXJhdGVkIGJ5IGdlbl9jaG9pY2VzX3N0cigpLgorICAgICAgICAiIiIKKyAgICAgICAgY2hvaWNlc192YWxfbGlzdCA9IFtdCisKKyAgICAgICAgZm9yIGksIGNob2ljZXBhaXIgaW4gZW51bWVyYXRlKGNob2ljZXBhaXJzKToKKyAgICAgICAgICAgIGNob2ljZXNfdmFsX2xpc3QuYXBwZW5kKGNob2ljZXBhaXJbMF0pCisKKyAgICAgICAgcmV0dXJuIGNob2ljZXNfdmFsX2xpc3QKKworICAgIGRlZiBnZW5fY2hvaWNlc19saXN0KHNlbGYsIGNvbnRleHQgPSBOb25lLCBjaGVja2xpc3QgPSBGYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhbiBhcnJheSBvZiBjaG9pY2UgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgICAgIG51bWJlcmVkIGxpc3QgZ2VuZXJhdGVkIGJ5IGdlbl9jaG9pY2VzX3N0cigpLgorICAgICAgICAiIiIKKyAgICAgICAgY2hvaWNlcyA9IHNlbGYuZXhlY19saXN0Z2VuX2ZuKGNvbnRleHQpCisgICAgICAgIGlmIGNob2ljZXM6CisgICAgICAgICAgICBpZiBsZW4oY2hvaWNlcykgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgaW5wdXQgbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICAgICAgY2hvaWNlcGFpcnMgPSBzZWxmLmdlbl9kZWdlbmVyYXRlX2Nob2ljZXBhaXJfbGlzdChjaG9pY2VzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYuY2hvaWNlcykgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgaW5wdXQgbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorICAgICAgICAgICAgY2hvaWNlcGFpcnMgPSBzZWxmLmdlbl9jaG9pY2VwYWlyX2xpc3QoKQorICAgICAgICAgICAgCisgICAgICAgIHJldHVybiBjaG9pY2VwYWlycworCisgICAgZGVmIGdlbl9jaG9pY2VzKHNlbGYsIGNvbnRleHQgPSBOb25lLCBjaGVja2xpc3QgPSBGYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhbiBhcnJheSBvZiBjaG9pY2UgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgICAgIG51bWJlcmVkIGxpc3QgZ2VuZXJhdGVkIGJ5IGdlbl9jaG9pY2VzX3N0cigpLCBkaXNwbGF5IGl0IHRvCisgICAgICAgIHRoZSB1c2VyLCBhbmQgcHJvY2VzcyB0aGUgcmVzdWx0LgorICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gc2VsZi5wcm9wc1sibXNnIl0KKyAgICAgICAgaWYgbm90IG1zZzoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9IHNlbGYucHJvcHNbImRlZmF1bHQiXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBkZWZhdWx0X2Nob2ljZSA9ICIiCisKKyAgICAgICAgbXNnICs9ICIgW2RlZmF1bHQ6ICIgKyBkZWZhdWx0X2Nob2ljZSArICJdIgorCisgICAgICAgIGNob2ljZXBhaXJzID0gc2VsZi5nZW5fY2hvaWNlc19saXN0KGNvbnRleHQsIGNoZWNrbGlzdCkKKworICAgICAgICBjaG9pY2VzX3N0ciA9IHNlbGYuZ2VuX2Nob2ljZXNfc3RyKGNob2ljZXBhaXJzKQorICAgICAgICBjaG9pY2VzX3ZhbF9saXN0ID0gc2VsZi5nZW5fY2hvaWNlc192YWxfbGlzdChjaG9pY2VwYWlycykKKyAgICAgICAgaWYgY2hlY2tsaXN0OgorICAgICAgICAgICAgY2hvaWNldmFsID0gZGVmYXVsdChmaW5kX2Nob2ljZXZhbHMocmF3X2lucHV0KG1zZyArICJcbiIgKyBjaG9pY2VzX3N0ciksIGNob2ljZXNfdmFsX2xpc3QpLCBkZWZhdWx0X2Nob2ljZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNob2ljZXZhbCA9IGRlZmF1bHQoZmluZF9jaG9pY2V2YWwocmF3X2lucHV0KG1zZyArICJcbiIgKyBjaG9pY2VzX3N0ciksIGNob2ljZXNfdmFsX2xpc3QpLCBkZWZhdWx0X2Nob2ljZSkKKworICAgICAgICByZXR1cm4gY2hvaWNldmFsCisKKworZGVmIGZpbmRfY2hvaWNldmFsKGNob2ljZV9zdHIsIGNob2ljZV9saXN0KToKKyAgICAiIiIKKyAgICBUYWtlIG51bWJlciBhcyBzdHJpbmcgYW5kIHJldHVybiB2YWwgc3RyaW5nIGZyb20gY2hvaWNlX2xpc3QsCisgICAgZW1wdHkgc3RyaW5nIGlmIG9vYi4gIGNob2ljZV9saXN0IGlzIGEgc2ltcGxlIHB5dGhvbiBsaXN0LgorICAgICIiIgorICAgIGNob2ljZV92YWwgPSAiIgorCisgICAgdHJ5OgorICAgICAgICBjaG9pY2VfaWR4ID0gaW50KGNob2ljZV9zdHIpCisgICAgICAgIGlmIGNob2ljZV9pZHggPD0gbGVuKGNob2ljZV9saXN0KToKKyAgICAgICAgICAgIGNob2ljZV9pZHggLT0gMQorICAgICAgICAgICAgY2hvaWNlX3ZhbCA9IGNob2ljZV9saXN0W2Nob2ljZV9pZHhdCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIHJldHVybiBjaG9pY2VfdmFsCisKKworZGVmIGZpbmRfY2hvaWNldmFscyhjaG9pY2Vfc3RyLCBjaG9pY2VfbGlzdCk6CisgICAgIiIiCisgICAgVGFrZSBudW1iZXJzIGFzIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgYW5kIHJldHVybiB2YWxzIGxpc3QgZnJvbQorICAgIGNob2ljZV9saXN0LCBlbXB0eSBsaXN0IGlmIG9vYi4gIGNob2ljZV9saXN0IGlzIGEgc2ltcGxlIHB5dGhvbgorICAgIGxpc3QuCisgICAgIiIiCisgICAgY2hvaWNlX3ZhbHMgPSBbXQorCisgICAgY2hvaWNlcyA9IGNob2ljZV9zdHIuc3BsaXQoKQorICAgIGZvciBjaG9pY2UgaW4gY2hvaWNlczoKKyAgICAgICAgY2hvaWNlX3ZhbHMuYXBwZW5kKGZpbmRfY2hvaWNldmFsKGNob2ljZSwgY2hvaWNlX2xpc3QpKQorCisgICAgcmV0dXJuIGNob2ljZV92YWxzCisKKworZGVmIGRlZmF1bHQoaW5wdXRfc3RyLCBuYW1lKToKKyAgICAiIiIKKyAgICBSZXR1cm4gZGVmYXVsdCBpZiBubyBpbnB1dF9zdHIsIG90aGVyd2lzZSBzdHJpcHBlZCBpbnB1dF9zdHIuCisgICAgIiIiCisgICAgaWYgbm90IGlucHV0X3N0cjoKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIHJldHVybiBpbnB1dF9zdHIuc3RyaXAoKQorCisKK2RlZiB2ZXJpZnlfZ2l0X3JlcG8oZ2l0dXJsKToKKyAgICAiIiIKKyAgICBWZXJpZnkgdGhhdCB0aGUgZ2l0dXJsIHBhc3NlZCBpbiBjYW4gYmUgY29ubmVjdGVkIHRvLiAgVGhpcyBjYW4gYmUKKyAgICB1c2VkIGFzIGEgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGdpdmVuIHJlcG8gYW5kL29yIGJhc2ljCisgICAgZ2l0IHJlbW90ZSBjb25uZWN0aXZpdHkuCisKKyAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWwsIGZhbHMgb3RoZXJ3aXNlCisgICAgIiIiCisgICAgaWYgbm90IGdpdHVybDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBnaXRjbWQgPSAiZ2l0IGxzLXJlbW90ZSAlcyA+IC9kZXYvbnVsbCAyPiYxIiAlIChnaXR1cmwpCisgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoZ2l0Y21kLCBzaGVsbD1UcnVlKQorICAgIGlmIHJjID09IDA6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZ2V0X3ZlcmlmaWVkX2dpdF9yZXBvKGlucHV0X3N0ciwgbmFtZSk6CisgICAgIiIiCisgICAgUmV0dXJuIGdpdCByZXBvIGlmIHZlcmlmaWVkLCBvdGhlcndpc2UgbG9vcCBmb3JldmVyIGFza2luZyB1c2VyCisgICAgZm9yIGZpbGVuYW1lLgorICAgICIiIgorICAgIG1zZyA9IGlucHV0X3N0ci5zdHJpcCgpICsgIiAiCisKKyAgICBnaXR1cmwgPSBkZWZhdWx0KHJhd19pbnB1dChtc2cpLCBuYW1lKQorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYgdmVyaWZ5X2dpdF9yZXBvKGdpdHVybCk6CisgICAgICAgICAgICByZXR1cm4gZ2l0dXJsCisgICAgICAgIGdpdHVybCA9IGRlZmF1bHQocmF3X2lucHV0KG1zZyksIG5hbWUpCisKKworZGVmIGdldF92ZXJpZmllZF9maWxlKGlucHV0X3N0ciwgbmFtZSwgZmlsZW5hbWVfY2FuX2JlX251bGwpOgorICAgICIiIgorICAgIFJldHVybiBmaWxlbmFtZSBpZiB0aGUgZmlsZSBleGlzdHMsIG90aGVyd2lzZSBsb29wIGZvcmV2ZXIgYXNraW5nCisgICAgdXNlciBmb3IgZmlsZW5hbWUuCisgICAgIiIiCisgICAgbXNnID0gaW5wdXRfc3RyLnN0cmlwKCkgKyAiICIKKworICAgIGZpbGVuYW1lID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGlmIG5vdCBmaWxlbmFtZSBhbmQgZmlsZW5hbWVfY2FuX2JlX251bGw6CisgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisgICAgICAgIGZpbGVuYW1lID0gZGVmYXVsdChyYXdfaW5wdXQobXNnKSwgbmFtZSkKKworCitkZWYgcmVwbGFjZV9maWxlKHJlcGxhY2VfdGhpcywgd2l0aF90aGlzKToKKyAgICAiIiIKKyAgICBSZXBsYWNlIHRoZSBnaXZlbiBmaWxlIHdpdGggdGhlIGNvbnRlbnRzIG9mIGZpbGVuYW1lLCByZXRhaW5pbmcKKyAgICB0aGUgb3JpZ2luYWwgZmlsZW5hbWUuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXBsYWNlX3RoaXMuY2xvc2UoKQorICAgICAgICBzaHV0aWwuY29weSh3aXRoX3RoaXMsIHJlcGxhY2VfdGhpcy5uYW1lKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKKworZGVmIGJvb2xlYW4oaW5wdXRfc3RyLCBuYW1lKToKKyAgICAiIiIKKyAgICBSZXR1cm4gbG93ZXJjYXNlIHZlcnNpb24gb2YgZmlyc3QgY2hhciBpbiBzdHJpbmcsIG9yIHZhbHVlIGluIG5hbWUuCisgICAgIiIiCisgICAgaWYgbm90IGlucHV0X3N0cjoKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIHN0ciA9IGlucHV0X3N0ci5sb3dlcigpLnN0cmlwKCkKKyAgICBpZiBzdHIgYW5kIHN0clswXSA9PSAieSIgb3Igc3RyWzBdID09ICJuIjoKKyAgICAgICAgcmV0dXJuIHN0clswXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBuYW1lCisKKworZGVmIHN0cmlwX2Jhc2UoaW5wdXRfc3RyKToKKyAgICAiIiIKKyAgICBzdHJpcCAnL2Jhc2UnIG9mZiB0aGUgZW5kIG9mIGlucHV0X3N0ciwgc28gd2UgY2FuIHVzZSAnYmFzZScgaW4KKyAgICB0aGUgYnJhbmNoIG5hbWVzIHdlIHByZXNlbnQgdG8gdGhlIHVzZXIuCisgICAgIiIiCisgICAgaWYgaW5wdXRfc3RyIGFuZCBpbnB1dF9zdHIuZW5kc3dpdGgoIi9iYXNlIik6CisgICAgICAgIHJldHVybiBpbnB1dF9zdHJbOi1sZW4oIi9iYXNlIildCisgICAgcmV0dXJuIGlucHV0X3N0ci5zdHJpcCgpCisKKworZGVmZXJyZWRfY2hvaWNlcyA9IHt9CisKK2RlZiBnZW5fY2hvaWNlc19kZWZlcihpbnB1dF9saW5lLCBjb250ZXh0LCBjaGVja2xpc3QgPSBGYWxzZSk6CisgICAgIiIiCisgICAgU2F2ZSB0aGUgY29udGV4dCBoYXNoZWQgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGl0ZW0sIHdoaWNoIHdpbGwgYmUKKyAgICBwYXNzZWQgdG8gdGhlIGdlbiBmdW5jdGlvbiBsYXRlci4KKyAgICAiIiIKKyAgICBuYW1lID0gaW5wdXRfbGluZS5wcm9wc1sibmFtZSJdCisKKyAgICB0cnk6CisgICAgICAgIG5hbWVhcHBlbmQgPSBpbnB1dF9saW5lLnByb3BzWyJuYW1lYXBwZW5kIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIG5hbWVhcHBlbmQgPSAiIgorCisgICAgdHJ5OgorICAgICAgICBicmFuY2hlc19iYXNlID0gaW5wdXRfbGluZS5wcm9wc1siYnJhbmNoZXNfYmFzZSJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBicmFuY2hlc19iYXNlID0gIiIKKworICAgIGZpbGVuYW1lID0gaW5wdXRfbGluZS5wcm9wc1siZmlsZW5hbWUiXQorCisgICAgY2xvc2V0YWdfc3RhcnQgPSBmaWxlbmFtZS5maW5kKENMT1NFX1RBRykKKworICAgIGlmIGNsb3NldGFnX3N0YXJ0ICE9IC0xOgorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lW2Nsb3NldGFnX3N0YXJ0ICsgbGVuKENMT1NFX1RBRyk6XQorCisgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdHJpcCgpCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXQorCisgICAgY2FwdHVyZWRfY29udGV4dCA9IGNhcHR1cmVfY29udGV4dChjb250ZXh0KQorICAgIGNvbnRleHRbImZpbGVuYW1lIl0gPSBmaWxlbmFtZQorICAgIGNhcHR1cmVkX2NvbnRleHRbImZpbGVuYW1lIl0gPSBmaWxlbmFtZQorICAgIGNvbnRleHRbIm5hbWVhcHBlbmQiXSA9IG5hbWVhcHBlbmQKKyAgICBjYXB0dXJlZF9jb250ZXh0WyJuYW1lYXBwZW5kIl0gPSBuYW1lYXBwZW5kCisgICAgY29udGV4dFsiYnJhbmNoZXNfYmFzZSJdID0gYnJhbmNoZXNfYmFzZQorICAgIGNhcHR1cmVkX2NvbnRleHRbImJyYW5jaGVzX2Jhc2UiXSA9IGJyYW5jaGVzX2Jhc2UKKworICAgIGRlZmVycmVkX2Nob2ljZSA9IChpbnB1dF9saW5lLCBjYXB0dXJlZF9jb250ZXh0LCBjaGVja2xpc3QpCisgICAga2V5ID0gbmFtZSArICJfIiArIGZpbGVuYW1lICsgIl8iICsgbmFtZWFwcGVuZAorICAgIGRlZmVycmVkX2Nob2ljZXNba2V5XSA9IGRlZmVycmVkX2Nob2ljZQorCisKK2RlZiBpbnZva2VfZGVmZXJyZWRfY2hvaWNlcyhuYW1lKToKKyAgICAiIiIKKyAgICBJbnZva2UgdGhlIGNob2ljZSBnZW5lcmF0aW9uIGZ1bmN0aW9uIHVzaW5nIHRoZSBjb250ZXh0IGhhc2hlZCBieQorICAgICduYW1lJy4KKyAgICAiIiIKKyAgICBkZWZlcnJlZF9jaG9pY2UgPSBkZWZlcnJlZF9jaG9pY2VzW25hbWVdCisgICAgaW5wdXRfbGluZSA9IGRlZmVycmVkX2Nob2ljZVswXQorICAgIGNvbnRleHQgPSBkZWZlcnJlZF9jaG9pY2VbMV0KKyAgICBjaGVja2xpc3QgPSBkZWZlcnJlZF9jaG9pY2VbMl0KKworICAgIGNvbnRleHRbIm5hbWUiXSA9IG5hbWUKKworICAgIGNob2ljZXMgPSBpbnB1dF9saW5lLmdlbl9jaG9pY2VzKGNvbnRleHQsIGNoZWNrbGlzdCkKKworICAgIHJldHVybiBjaG9pY2VzCisKKworY2xhc3MgQ2hvaWNlbGlzdElucHV0TGluZShMaXN0SW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBjaG9pY2VsaXN0IElucHV0IGxpbmVzLgorICAgIHByb3BzOgorICAgICAgICBuYW1lOiBleGFtcGxlIC0gInhzZXJ2ZXJfY2hvaWNlIgorICAgICAgICBtc2c6ICBleGFtcGxlIC0gIlBsZWFzZSBzZWxlY3QgYW4geHNlcnZlciBmb3IgdGhpcyBtYWNoaW5lIgorICAgIHJlc3VsdDoKKyAgICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSAnbmFtZScgdG8gd2hpY2hldmVyIENob2ljZSB3YXMgY2hvc2VuCisgICAgICAgIGV4YW1wbGUgLSB4c2VydmVyX2Nob2ljZSA9ICJ4c2VydmVyX3Zlc2EiCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIExpc3RJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKworICAgICAgICBnZW5fY2hvaWNlc19kZWZlcihzZWxmLCBjb250ZXh0KQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIG5hbWVhcHBlbmQgPSBjb250ZXh0WyJuYW1lYXBwZW5kIl0KKyAgICAgICAgZmlsZW5hbWUgPSBjb250ZXh0WyJmaWxlbmFtZSJdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGRlZmF1bHQoaW52b2tlX2RlZmVycmVkX2Nob2ljZXMoXCIiICsgbmFtZSArICJfIiArIGZpbGVuYW1lICsgIl8iICsgbmFtZWFwcGVuZCArICJcIiksIFwiIiArIGRlZmF1bHRfY2hvaWNlICsgIlwiKSIKKworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIExpc3RWYWxJbnB1dExpbmUoSW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBjaG9pY2UgYW5kIGNoZWNrYm94IElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudmFsID0gc2VsZi5wcm9wc1sidmFsIl0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gaW5wdXQgJ3ZhbCcgcHJvcGVydHkgZm91bmQiLCBzZWxmLmxpbmVubywgc2VsZi5saW5lKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGVzYyA9IHNlbGYucHJvcHNbIm1zZyJdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGlucHV0ICdtc2cnIHByb3BlcnR5IGZvdW5kIiwgc2VsZi5saW5lbm8sIHNlbGYubGluZSkKKworCitjbGFzcyBDaG9pY2VJbnB1dExpbmUoTGlzdFZhbElucHV0TGluZSk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY2hvaWNlbGlzdCBpdGVtIElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaXN0VmFsSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIENoZWNrbGlzdElucHV0TGluZShMaXN0SW5wdXRMaW5lKToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBjaGVja2xpc3QgSW5wdXQgbGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubyk6CisgICAgICAgIExpc3RJbnB1dExpbmUuX19pbml0X18oc2VsZiwgcHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgIElucHV0TGluZS5nZW4oc2VsZiwgY29udGV4dCkKKworICAgICAgICBnZW5fY2hvaWNlc19kZWZlcihzZWxmLCBjb250ZXh0LCBUcnVlKQorICAgICAgICBuYW1lID0gc2VsZi5wcm9wc1sibmFtZSJdCisgICAgICAgIG5hbWVhcHBlbmQgPSBjb250ZXh0WyJuYW1lYXBwZW5kIl0KKyAgICAgICAgZmlsZW5hbWUgPSBjb250ZXh0WyJmaWxlbmFtZSJdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSBzZWxmLnByb3BzWyJkZWZhdWx0Il0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgZGVmYXVsdF9jaG9pY2UgPSAiIgorCisgICAgICAgIGxpbmUgPSBuYW1lICsgIiA9IGRlZmF1bHQoaW52b2tlX2RlZmVycmVkX2Nob2ljZXMoXCIiICsgbmFtZSArICJfIiArIGZpbGVuYW1lICsgIl8iICsgbmFtZWFwcGVuZCArICJcIiksIFwiIiArIGRlZmF1bHRfY2hvaWNlICsgIlwiKSIKKworICAgICAgICByZXR1cm4gbGluZQorCisKK2NsYXNzIENoZWNrSW5wdXRMaW5lKExpc3RWYWxJbnB1dExpbmUpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIGNoZWNrbGlzdCBpdGVtIElucHV0IGxpbmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wcywgdGFnLCBsaW5lbm8pOgorICAgICAgICBMaXN0VmFsSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHByb3BzLCB0YWcsIGxpbmVubykKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2Rpcm5hbWVfc3Vic3RpdHV0aW9ucyA9IHt9CisKK2NsYXNzIFN1YnN0cmF0ZUJhc2Uob2JqZWN0KToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBib3RoIGV4cGFuZGVkIGFuZCB1bmV4cGFuZGVkIGZpbGUgYW5kIGRpciBjb250YWluZXIKKyAgICBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmlsZWJhc2UsIG91dF9maWxlYmFzZSk6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmZpbGViYXNlID0gZmlsZWJhc2UKKyAgICAgICAgc2VsZi50cmFuc2xhdGVkX2ZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5vdXRfZmlsZWJhc2UgPSBvdXRfZmlsZWJhc2UKKyAgICAgICAgc2VsZi5yYXdfbGluZXMgPSBbXQorICAgICAgICBzZWxmLmV4cGFuZGVkX2xpbmVzID0gW10KKyAgICAgICAgc2VsZi5wcmV2X2Nob2ljZWxpc3QgPSBOb25lCisKKyAgICBkZWYgcGFyc2VfZXJyb3Ioc2VsZiwgbXNnLCBsaW5lbm8sIGxpbmUpOgorICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIiVzOiBbJXM6ICVkXTogJXMiICUgKG1zZywgc2VsZi5maWxlbmFtZSwgbGluZW5vLCBsaW5lKSkKKworICAgIGRlZiBleHBhbmRfaW5wdXRfdGFnKHNlbGYsIHRhZywgbGluZW5vKToKKyAgICAgICAgIiIiCisgICAgICAgIElucHV0IHRhZ3MgY29uc2lzdCBvZiB0aGUgd29yZCAnaW5wdXQnIGF0IHRoZSBiZWdpbm5pbmcsCisgICAgICAgIGZvbGxvd2VkIGJ5IG5hbWU6dmFsdWUgcHJvcGVydHkgcGFpcnMgd2hpY2ggYXJlIGNvbnZlcnRlZCBpbnRvCisgICAgICAgIGEgZGljdGlvbmFyeS4KKyAgICAgICAgIiIiCisgICAgICAgIHByb3BzdHIgPSB0YWdbbGVuKElOUFVUX1RBRyk6XQorCisgICAgICAgIHByb3BzID0gZGljdChwcm9wLnNwbGl0KCI6IiwgMSkgZm9yIHByb3AgaW4gc2hsZXguc3BsaXQocHJvcHN0cikpCisgICAgICAgIHByb3BzWyJmaWxlbmFtZSJdID0gc2VsZi5maWxlbmFtZQorCisgICAgICAgIGlucHV0X3R5cGUgPSBwcm9wc1tJTlBVVF9UWVBFX1BST1BFUlRZXQorICAgICAgICBpZiBub3QgcHJvcHNbSU5QVVRfVFlQRV9QUk9QRVJUWV06CisgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBpbnB1dCAndHlwZScgcHJvcGVydHkgZm91bmQiLCBsaW5lbm8sIHRhZykKKworICAgICAgICBpZiBpbnB1dF90eXBlID09ICJib29sZWFuIjoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFuSW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgaWYgaW5wdXRfdHlwZSA9PSAiZWRpdCI6CisgICAgICAgICAgICByZXR1cm4gRWRpdEJveElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGlmIGlucHV0X3R5cGUgPT0gImVkaXQtZ2l0LXJlcG8iOgorICAgICAgICAgICAgcmV0dXJuIEdpdFJlcG9FZGl0Qm94SW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgaWYgaW5wdXRfdHlwZSA9PSAiZWRpdC1maWxlIjoKKyAgICAgICAgICAgIHJldHVybiBGaWxlRWRpdEJveElucHV0TGluZShwcm9wcywgdGFnLCBsaW5lbm8pCisgICAgICAgIGVsaWYgaW5wdXRfdHlwZSA9PSAiY2hvaWNlbGlzdCI6CisgICAgICAgICAgICBzZWxmLnByZXZfY2hvaWNlbGlzdCA9IENob2ljZWxpc3RJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJldl9jaG9pY2VsaXN0CisgICAgICAgIGVsaWYgaW5wdXRfdHlwZSA9PSAiY2hvaWNlIjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnByZXZfY2hvaWNlbGlzdDoKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJGb3VuZCAnY2hvaWNlJyBpbnB1dCB0YWcgYnV0IG5vIHByZXZpb3VzIGNob2ljZWxpc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCB0YWcpCisgICAgICAgICAgICBjaG9pY2UgPSBDaG9pY2VJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorICAgICAgICAgICAgc2VsZi5wcmV2X2Nob2ljZWxpc3QuY2hvaWNlcy5hcHBlbmQoY2hvaWNlKQorICAgICAgICAgICAgcmV0dXJuIGNob2ljZQorICAgICAgICBlbGlmIGlucHV0X3R5cGUgPT0gImNoZWNrbGlzdCI6CisgICAgICAgICAgICByZXR1cm4gQ2hlY2tsaXN0SW5wdXRMaW5lKHByb3BzLCB0YWcsIGxpbmVubykKKyAgICAgICAgZWxpZiBpbnB1dF90eXBlID09ICJjaGVjayI6CisgICAgICAgICAgICByZXR1cm4gQ2hlY2tJbnB1dExpbmUocHJvcHMsIHRhZywgbGluZW5vKQorCisgICAgZGVmIGV4cGFuZF9hc3NpZ25tZW50X3RhZyhzZWxmLCBzdGFydCwgbGluZSwgbGluZW5vKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGFuZCBhbGwgdGFncyBpbiBhIGxpbmUuCisgICAgICAgICIiIgorICAgICAgICBleHBhbmRlZF9saW5lID0gQXNzaWdubWVudExpbmUobGluZS5yc3RyaXAoKSkKKworICAgICAgICB3aGlsZSBzdGFydCAhPSAtMToKKyAgICAgICAgICAgIGVuZCA9IGxpbmUuZmluZChDTE9TRV9UQUcsIHN0YXJ0KQorICAgICAgICAgICAgaWYgZW5kID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoIk5vIGNsb3NlIHRhZyBmb3VuZCBmb3IgYXNzaWdubWVudCB0YWciLCBsaW5lbm8sIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWUgPSBsaW5lW3N0YXJ0ICsgbGVuKEFTU0lHTl9UQUcpOmVuZF0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGV4cGFuZGVkX2xpbmUuYWRkX2Fzc2lnbm1lbnQoc3RhcnQsIGVuZCArIGxlbihDTE9TRV9UQUcpLCBuYW1lKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGluZS5maW5kKEFTU0lHTl9UQUcsIGVuZCkKKworICAgICAgICByZXR1cm4gZXhwYW5kZWRfbGluZQorCisgICAgZGVmIGV4cGFuZF90YWcoc2VsZiwgbGluZSwgbGluZW5vKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgYSBwcm9jZXNzZWQgdGFnIGxpbmUsIG9yIE5vbmUgaWYgdGhlcmUgd2FzIG5vIHRhZworCisgICAgICAgIFRoZSBydWxlcyBmb3IgdGFncyBhcmUgdmVyeSBzaW1wbGU6CisgICAgICAgICAgICAtIE5vIG5lc3RlZCB0YWdzCisgICAgICAgICAgICAtIFRhZ3Mgc3RhcnQgd2l0aCB7eyBhbmQgZW5kIHdpdGggfX0KKyAgICAgICAgICAgIC0gQW4gYXNzaWduIHRhZywge3s9LCBjYW4gYXBwZWFyIGFueXdoZXJlIGFuZCB3aWxsCisgICAgICAgICAgICAgIGJlIHJlcGxhY2VkIHdpdGggd2hhdCB0aGUgYXNzaWdubWVudCBldmFsdWF0ZXMgdG8KKyAgICAgICAgICAgIC0gQW55IG90aGVyIHRhZyBvY2N1cGllcyB0aGUgd2hvbGUgbGluZSBpdCBpcyBvbgorICAgICAgICAgICAgICAgIC0gaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIG9uIHRoZSB0YWcgbGluZSwgaXQncyBhbiBlcnJvcgorICAgICAgICAgICAgICAgIC0gaWYgaXQgc3RhcnRzIHdpdGggJ2lucHV0JywgaXQncyBhbiBpbnB1dCB0YWcgYW5kCisgICAgICAgICAgICAgICAgICB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgcHJvbXB0aW5nIGFuZCBzZXR0aW5nIHZhcmlhYmxlcworICAgICAgICAgICAgICAgIC0gYW55dGhpbmcgZWxzZSBpcyBzdHJhaWdodCBQeXRob24KKyAgICAgICAgICAgICAgICAtIHRhZ3MgYXJlIGluIGVmZmVjdCBvbmx5IHVudGlsIHRoZSBuZXh0IGJsYW5rIGxpbmUgb3IgdGFnIG9yICdwYXNzJyB0YWcKKyAgICAgICAgICAgICAgICAtIHdlIGRvbid0IGhhdmUgaW5kZW50YXRpb24gaW4gdGFncywgYnV0IHdlIG5lZWQgc29tZSB3YXkgdG8gZW5kIGEgYmxvY2sKKyAgICAgICAgICAgICAgICAgIGZvcmNlZnVsbHkgd2l0aG91dCBibGFuayBsaW5lcyBvciBvdGhlciB0YWdzIC0gdGhhdCdzIHRoZSAncGFzcycgdGFnCisgICAgICAgICAgICAgICAgLSB0b2RvOiBpbXBsZW1lbnQgcGFzcyB0YWcKKyAgICAgICAgICAgICAgICAtIGRpcmVjdG9yaWVzIGFuZCBmaWxlbmFtZXMgY2FuIGhhdmUgdGFncyBhcyB3ZWxsLCBidXQgb25seSBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgICBhbmQgJ2lmJyBjb2RlIGxpbmVzCisgICAgICAgICAgICAgICAgLSBkaXJlY3RvcmllcyBhbmQgZmlsZW5hbWVzIGFyZSB0aGUgb25seSBjYXNlIHdoZXJlIG5vcm1hbCB0YWdzIGNhbgorICAgICAgICAgICAgICAgICAgY29leGlzdCB3aXRoIG5vcm1hbCB0ZXh0IG9uIHRoZSBzYW1lICdsaW5lJworICAgICAgICAiIiIKKyAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoQVNTSUdOX1RBRykKKyAgICAgICAgaWYgc3RhcnQgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRfYXNzaWdubWVudF90YWcoc3RhcnQsIGxpbmUsIGxpbmVubykKKworICAgICAgICBzdGFydCA9IGxpbmUuZmluZChPUEVOX1RBRykKKyAgICAgICAgaWYgc3RhcnQgPT0gLTE6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGVuZCA9IGxpbmUuZmluZChDTE9TRV9UQUcsIDApCisgICAgICAgIGlmIGVuZCA9PSAtMToKKyAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJObyBjbG9zZSB0YWcgZm91bmQgZm9yIG9wZW4gdGFnIiwgbGluZW5vLCBsaW5lKQorCisgICAgICAgIHRhZyA9IGxpbmVbc3RhcnQgKyBsZW4oT1BFTl9UQUcpOmVuZF0uc3RyaXAoKQorCisgICAgICAgIGlmIG5vdCB0YWcubHN0cmlwKCkuc3RhcnRzd2l0aChJTlBVVF9UQUcpOgorICAgICAgICAgICAgcmV0dXJuIENvZGVMaW5lKHRhZykKKworICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRfaW5wdXRfdGFnKHRhZywgbGluZW5vKQorCisgICAgZGVmIGFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFNpbXBseSBhcHBlbmQgZmlsZW5hbWUgdG8gdHJhbnNsYXRlZF9maWxlbmFtZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50cmFuc2xhdGVkX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYudHJhbnNsYXRlZF9maWxlbmFtZSwgZmlsZW5hbWUpCisKKyAgICBkZWYgZ2V0X3N1YnN0aXR1dGVkX2ZpbGVfb3JfZGlyX25hbWUoc2VsZiwgZmlyc3RfbGluZSwgdGFnKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGZpbGUgb3IgZGlyIG5hbWVzIGNvbnRhaW4gbmFtZSBzdWJzdGl0dXRpb25zLCByZXR1cm4gdGhlIG5hbWUKKyAgICAgICAgdG8gc3Vic3RpdHV0ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgdGhlIGZpbGUgb3IgZGlybmFtZSBhbmQKKyAgICAgICAgZG9lc24ndCBpbmNsdWRlIHRoZSBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgZmlsZW5hbWUgPSBmaXJzdF9saW5lLmZpbmQodGFnKQorICAgICAgICBpZiBmaWxlbmFtZSAhPSAtMToKKyAgICAgICAgICAgIGZpbGVuYW1lICs9IGxlbih0YWcpCisgICAgICAgIHN1YnN0aXR1dGVkX2ZpbGVuYW1lID0gZmlyc3RfbGluZVtmaWxlbmFtZTpdLnN0cmlwKCkKKyAgICAgICAgdGhpcyA9IHN1YnN0aXR1dGVkX2ZpbGVuYW1lLmZpbmQoIiB0aGlzIikKKyAgICAgICAgaWYgdGhpcyAhPSAtMToKKyAgICAgICAgICAgIGhlYWQsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICBzdWJzdGl0dXRlZF9maWxlbmFtZSA9IHN1YnN0aXR1dGVkX2ZpbGVuYW1lWzp0aGlzICsgMV0gKyB0YWlsCisgICAgICAgICAgICBpZiB0YWcgPT0gRElSTkFNRV9UQUc6ICMgZ2V0IHJpZCBvZiAubm9pbnN0YWxsIGluIGRpcm5hbWUKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRlZF9maWxlbmFtZSA9IHN1YnN0aXR1dGVkX2ZpbGVuYW1lLnNwbGl0KCcuJylbMF0KKworICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZWRfZmlsZW5hbWUKKworICAgIGRlZiBnZXRfc3Vic3RpdHV0ZWRfZmlsZW5hbWUoc2VsZiwgZmlyc3RfbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBJZiBhIGZpbGVuYW1lIGNvbnRhaW5zIGEgbmFtZSBzdWJzdGl0dXRpb24sIHJldHVybiB0aGUgbmFtZSB0bworICAgICAgICBzdWJzdGl0dXRlLiAgTm90ZSB0aGF0IHRoaXMgaXMganVzdCB0aGUgZmlsZW5hbWUgYW5kIGRvZXNuJ3QKKyAgICAgICAgaW5jbHVkZSB0aGUgcGF0aC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmdldF9zdWJzdGl0dXRlZF9maWxlX29yX2Rpcl9uYW1lKGZpcnN0X2xpbmUsIEZJTEVOQU1FX1RBRykKKworICAgIGRlZiBnZXRfc3Vic3RpdHV0ZWRfZGlybmFtZShzZWxmLCBmaXJzdF9saW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIElmIGEgZGlybmFtZSBjb250YWlucyBhIG5hbWUgc3Vic3RpdHV0aW9uLCByZXR1cm4gdGhlIG5hbWUgdG8KKyAgICAgICAgc3Vic3RpdHV0ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3QgdGhlIGRpcm5hbWUgYW5kIGRvZXNuJ3QKKyAgICAgICAgaW5jbHVkZSB0aGUgcGF0aC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmdldF9zdWJzdGl0dXRlZF9maWxlX29yX2Rpcl9uYW1lKGZpcnN0X2xpbmUsIERJUk5BTUVfVEFHKQorCisgICAgZGVmIHN1YnN0aXR1dGVfZmlsZW5hbWUoc2VsZiwgZmlyc3RfbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBGaW5kIHRoZSBmaWxlbmFtZSBpbiBmaXJzdF9saW5lIGFuZCBhcHBlbmQgaXQgdG8gdHJhbnNsYXRlZF9maWxlbmFtZS4KKyAgICAgICAgIiIiCisgICAgICAgIHN1YnN0aXR1dGVkX2ZpbGVuYW1lID0gc2VsZi5nZXRfc3Vic3RpdHV0ZWRfZmlsZW5hbWUoZmlyc3RfbGluZSkKKyAgICAgICAgc2VsZi5hcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZShzdWJzdGl0dXRlZF9maWxlbmFtZSk7CisKKyAgICBkZWYgc3Vic3RpdHV0ZV9kaXJuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluZCB0aGUgZGlybmFtZSBpbiBmaXJzdF9saW5lIGFuZCBhcHBlbmQgaXQgdG8gdHJhbnNsYXRlZF9maWxlbmFtZS4KKyAgICAgICAgIiIiCisgICAgICAgIHN1YnN0aXR1dGVkX2Rpcm5hbWUgPSBzZWxmLmdldF9zdWJzdGl0dXRlZF9kaXJuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUoc3Vic3RpdHV0ZWRfZGlybmFtZSk7CisKKyAgICBkZWYgaXNfZmlsZW5hbWVfc3Vic3RpdHV0aW9uKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRG8gd2UgaGF2ZSBhIGZpbGVuYW1lIHN1YnVzdGl0aW9uPworICAgICAgICAiIiIKKyAgICAgICAgaWYgbGluZS5maW5kKEZJTEVOQU1FX1RBRykgIT0gLTE6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19kaXJuYW1lX3N1YnN0aXR1dGlvbihzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIERvIHdlIGhhdmUgYSBkaXJuYW1lIHN1YnVzdGl0aW9uPworICAgICAgICAiIiIKKyAgICAgICAgaWYgbGluZS5maW5kKERJUk5BTUVfVEFHKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHRyYW5zbGF0ZV9kaXJuYW1lKHNlbGYsIGZpcnN0X2xpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSnVzdCBzYXZlIHRoZSBmaXJzdF9saW5lIG1hcHBlZCBieSBmaWxlbmFtZS4gIFRoZSBsYXRlciBwYXNzCisgICAgICAgIHRocm91Z2ggdGhlIGRpcmVjdG9yaWVzIHdpbGwgbG9vayBmb3IgYSBkaXJuYW1lLm5vaW5zdGFsbAorICAgICAgICBtYXRjaCBhbmQgZ3JhYiB0aGUgc3Vic3RpdHV0aW9uIGxpbmUuCisgICAgICAgICIiIgorICAgICAgICBkaXJuYW1lX3N1YnN0aXR1dGlvbnNbc2VsZi5maWxlbmFtZV0gPSBmaXJzdF9saW5lCisKKyAgICBkZWYgdHJhbnNsYXRlX2Rpcm5hbWVzX2luX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIgorICAgICAgICBUcmFuc2xhdGUgZGlybmFtZXMgYmVsb3cgdGhpcyBmaWxlIG9yIGRpciwgbm90IGluY2x1ZGluZyB0YWlsLgorICAgICAgICBkaXJuYW1lX3N1YnN0aXRpdGlvbnMgaXMga2V5ZWQgb24gYWN0dWFsIHVudHJhbnNsYXRlZCBmaWxlbmFtZXMuCisgICAgICAgIHRyYW5zbGF0ZWRfcGF0aCBjb250YWlucyB0aGUgc3Vic2l0aXR1dGlvbnMgZm9yIGVhY2ggZWxlbWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJlbWFpbmRlciA9IHBhdGhbbGVuKHNlbGYuZmlsZWJhc2UpKzE6XQorICAgICAgICB0cmFuc2xhdGVkX3BhdGggPSB1bnRyYW5zbGF0ZWRfcGF0aCA9IHNlbGYuZmlsZWJhc2UKKworICAgICAgICB1bnRyYW5zbGF0ZWRfZGlycyA9IHJlbWFpbmRlci5zcGxpdChvcy5zZXApCisKKyAgICAgICAgZm9yIGRpciBpbiB1bnRyYW5zbGF0ZWRfZGlyczoKKyAgICAgICAgICAgIGtleSA9IG9zLnBhdGguam9pbih1bnRyYW5zbGF0ZWRfcGF0aCwgZGlyICsgJy5ub2luc3RhbGwnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpcnN0X2xpbmUgPSBkaXJuYW1lX3N1YnN0aXR1dGlvbnNba2V5XQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRfcGF0aCA9IG9zLnBhdGguam9pbih0cmFuc2xhdGVkX3BhdGgsIGRpcikKKyAgICAgICAgICAgICAgICB1bnRyYW5zbGF0ZWRfcGF0aCA9IG9zLnBhdGguam9pbih1bnRyYW5zbGF0ZWRfcGF0aCwgZGlyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdWJzdGl0dXRlZF9kaXIgPSBzZWxmLmdldF9zdWJzdGl0dXRlZF9kaXJuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgICAgICB0cmFuc2xhdGVkX3BhdGggPSBvcy5wYXRoLmpvaW4odHJhbnNsYXRlZF9wYXRoLCBzdWJzdGl0dXRlZF9kaXIpCisgICAgICAgICAgICB1bnRyYW5zbGF0ZWRfcGF0aCA9IG9zLnBhdGguam9pbih1bnRyYW5zbGF0ZWRfcGF0aCwgZGlyKQorCisgICAgICAgIHJldHVybiB0cmFuc2xhdGVkX3BhdGgKKworICAgIGRlZiB0cmFuc2xhdGVfZmlsZV9vcl9kaXJfbmFtZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIE9yaWdpbmFsbHkgd2Ugd2VyZSBhbGxvd2VkIHRvIHVzZSBvcGVuL2Nsb3NlL2Fzc2lnbiB0YWdzIGFuZCBweXRob24KKyAgICAgICAgY29kZSBpbiB0aGUgZmlsZW5hbWUsIHdoaWNoIGZpdCBpbiBuaWNlbHkgd2l0aCB0aGUgd2F5IHdlCisgICAgICAgIHByb2Nlc3NlZCB0aGUgdGVtcGxhdGVzIGFuZCBnZW5lcmF0ZWQgY29kZS4gIE5vdyB0aGF0IHdlIGNhbid0CisgICAgICAgIGRvIHRoYXQsIHdlIG1ha2UgdGhvc2UgdGFncyBwcm9wZXIgZmlsZSBjb250ZW50cyBhbmQgaGF2ZSB0aGlzCisgICAgICAgIHBhc3Mgc3Vic3RpdHV0ZSB0aGUgbmljZSBidXQgbm9uLWZ1bmN0aW9uYWwgbmFtZXMgd2l0aCB0aG9zZQorICAgICAgICAnc3RyYW5nZScgb25lcywgYW5kIHRoZW4gcHJvY2VlZCBhcyB1c3VhbC4KKworICAgICAgICBTbywgaWYgZmlsZXMgb3IgbWF0Y2hpbmcgZGlyPC5ub2luc3RhbGw+IGZpbGVzIGNvbnRhaW4KKyAgICAgICAgZmlsZW5hbWUgc3Vic3RpdHV0aW9ucywgdGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIHRoZW0gaW50byB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyAnc3RyYW5nZScgbmFtZXMsIHdoaWNoIGZ1dHVyZSBwYXNzZXMgd2lsbCBleHBhbmQKKyAgICAgICAgYXMgdGhleSBhbHdheXMgaGF2ZS4gIFRoZSByZXN1bHRpbmcgcGF0aG5hbWUgaXMga2VwdCBpbiB0aGUKKyAgICAgICAgZmlsZSBvciBkaXJlY3RvcnkncyB0cmFuc2xhdGVkX2ZpbGVuYW1lLiAgQW5vdGhlciB3YXkgdG8gdGhpbmsKKyAgICAgICAgYWJvdXQgaXQgaXMgdGhhdCBzZWxmLmZpbGVuYW1lIGlzIHRoZSBpbnB1dCBmaWxlbmFtZSwgYW5kCisgICAgICAgIHRyYW5zbGF0ZWRfZmlsZW5hbWUgaXMgdGhlIG91dHB1dCBmaWxlbmFtZSBiZWZvcmUgZXhwYW5zaW9uLgorICAgICAgICAiIiIKKyAgICAgICAgIyByZW1vdmUgbGVhZiBmaWxlIG9yIGRpcm5hbWUKKyAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgdHJhbnNsYXRlZF9wYXRoID0gc2VsZi50cmFuc2xhdGVfZGlybmFtZXNfaW5fcGF0aChoZWFkKQorICAgICAgICBzZWxmLnRyYW5zbGF0ZWRfZmlsZW5hbWUgPSB0cmFuc2xhdGVkX3BhdGgKKworICAgICAgICAjIFRoaXMgaXMgYSBkaXJuYW1lIC0gZG9lcyBpdCBoYXZlIGEgbWF0Y2hpbmcgLm5vaW5zdGFsbCB3aXRoCisgICAgICAgICMgYSBzdWJzdGl0dXRpb24/ICBJZiBzbywgYXBwbHkgdGhlIGRpcm5hbWUgc3Vic2l0aXR1dGlvbi4KKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNlbGYuZmlsZW5hbWUpOgorICAgICAgICAgICAga2V5ID0gc2VsZi5maWxlbmFtZSArICIubm9pbnN0YWxsIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpcnN0X2xpbmUgPSBkaXJuYW1lX3N1YnN0aXR1dGlvbnNba2V5XQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kX3RyYW5zbGF0ZWRfZmlsZW5hbWUodGFpbCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuc3Vic3RpdHV0ZV9kaXJuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lKQorICAgICAgICBmaXJzdF9saW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgVGhpcyBpcyBhIG5vcm1hbCBmaWxlbmFtZSBub3QgbmVlZGluZyB0cmFuc2xhdGlvbiwganVzdCB1c2UKKyAgICAgICAgIyBpdCBhcy1pcy4KKyAgICAgICAgaWYgbm90IGZpcnN0X2xpbmUgb3Igbm90IGZpcnN0X2xpbmUuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgc2VsZi5hcHBlbmRfdHJhbnNsYXRlZF9maWxlbmFtZSh0YWlsKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUgc3Vic3RpdHV0aW9uIChmaXJzdCBsaW5lIGluIHRoZSBmaWxlCisgICAgICAgICMgaXMgYSBGSUxFTkFNRV9UQUcgbGluZSkgZG8gdGhlIHN1YnN0aXR1dGlvbiBub3cuICBJZiB3ZSBoYXZlCisgICAgICAgICMgYSBkaXJuYW1lIHN1YnN0aXR1dGlvbiAoRElSTkFNRV9UQUcgaW4gZGlybmFtZS5ub2luc3RhbGwKKyAgICAgICAgIyBtZXRhLWZpbGUpLCBoYXNoIGl0IHNvIHdlIGNhbiBhcHBseSBpdCB3aGVuIHdlIHNlZSB0aGUKKyAgICAgICAgIyBtYXRjaGluZyBkaXJuYW1lIGxhdGVyLiAgT3RoZXJ3aXNlIHdlIGhhdmUgYSByZWd1bGFyCisgICAgICAgICMgZmlsZW5hbWUsIGp1c3QgdXNlIGl0IGFzLWlzLgorICAgICAgICBpZiBzZWxmLmlzX2ZpbGVuYW1lX3N1YnN0aXR1dGlvbihmaXJzdF9saW5lKToKKyAgICAgICAgICAgIHNlbGYuc3Vic3RpdHV0ZV9maWxlbmFtZShmaXJzdF9saW5lKQorICAgICAgICBlbGlmIHNlbGYuaXNfZGlybmFtZV9zdWJzdGl0dXRpb24oZmlyc3RfbGluZSk6CisgICAgICAgICAgICBzZWxmLnRyYW5zbGF0ZV9kaXJuYW1lKGZpcnN0X2xpbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF90cmFuc2xhdGVkX2ZpbGVuYW1lKHRhaWwpCisKKyAgICBkZWYgZXhwYW5kX2ZpbGVfb3JfZGlyX25hbWUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBhbmQgZmlsZSBvciBkaXIgbmFtZXMgaW50byBjb2RlbGluZS4gIERpcm5hbWVzIGFuZAorICAgICAgICBmaWxlbmFtZXMgY2FuIG9ubHkgaGF2ZSBhc3NpZ25tZW50cyBvciBpZiBzdGF0ZW1lbnRzLiAgRmlyc3QKKyAgICAgICAgdHJhbnNsYXRlIGlmIHN0YXRlbWVudHMgaW50byBDb2RlTGluZSArIChkaXJuYW1lIG9yIGZpbGVuYW1lCisgICAgICAgIGNyZWF0aW9uKS4KKyAgICAgICAgIiIiCisgICAgICAgIGxpbmVubyA9IDAKKworICAgICAgICBsaW5lID0gc2VsZi50cmFuc2xhdGVkX2ZpbGVuYW1lW2xlbihzZWxmLmZpbGViYXNlKTpdCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiLyIpOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdCisgICAgICAgIG9wZW50YWdfc3RhcnQgPSAtMQorCisgICAgICAgIHN0YXJ0ID0gbGluZS5maW5kKE9QRU5fVEFHKQorICAgICAgICB3aGlsZSBzdGFydCAhPSAtMToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lW3N0YXJ0Ol0uc3RhcnRzd2l0aChBU1NJR05fVEFHKToKKyAgICAgICAgICAgICAgICBvcGVudGFnX3N0YXJ0ID0gc3RhcnQKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc3RhcnQgKz0gbGVuKEFTU0lHTl9UQUcpCisgICAgICAgICAgICBzdGFydCA9IGxpbmUuZmluZChPUEVOX1RBRywgc3RhcnQpCisKKyAgICAgICAgaWYgb3BlbnRhZ19zdGFydCAhPSAtMToKKyAgICAgICAgICAgIGVuZCA9IGxpbmUuZmluZChDTE9TRV9UQUcsIG9wZW50YWdfc3RhcnQpCisgICAgICAgICAgICBpZiBlbmQgPT0gLTE6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcigiTm8gY2xvc2UgdGFnIGZvdW5kIGZvciBvcGVuIHRhZyIsIGxpbmVubywgbGluZSkKKyAgICAgICAgICAgICMgd2UgaGF2ZSBhIHt7IHRhZyBpLmUuIGNvZGUKKyAgICAgICAgICAgIHRhZyA9IGxpbmVbb3BlbnRhZ19zdGFydCArIGxlbihPUEVOX1RBRyk6ZW5kXS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgdGFnLmxzdHJpcCgpLnN0YXJ0c3dpdGgoSUZfVEFHKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKCJPbmx5ICdpZicgdGFncyBhcmUgYWxsb3dlZCBpbiBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sIGxpbmUpCisgICAgICAgICAgICBzZWxmLmV4cGFuZGVkX2xpbmVzLmFwcGVuZChDb2RlTGluZSh0YWcpKQorCisgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgYWZ0ZXIgfX0gaXMgdGhlIGFjdHVhbCBmaWxlbmFtZSAocG9zc2libHkgd2l0aCBhc3NpZ25tZW50cykKKyAgICAgICAgICAgICMgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIHBhdGhuYW1lCisgICAgICAgICAgICBsaW5lID0gbGluZVs6b3BlbnRhZ19zdGFydF0gKyBsaW5lW2VuZCArIGxlbihDTE9TRV9UQUcpOl0uc3RyaXAoKQorCisgICAgICAgIGFzc2lnbl9zdGFydCA9IGxpbmUuZmluZChBU1NJR05fVEFHKQorICAgICAgICBpZiBhc3NpZ25fc3RhcnQgIT0gLTE6CisgICAgICAgICAgICBhc3NpZ25tZW50X3RhZyA9IHNlbGYuZXhwYW5kX2Fzc2lnbm1lbnRfdGFnKGFzc2lnbl9zdGFydCwgbGluZSwgbGluZW5vKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBTdWJzdHJhdGVGaWxlKToKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50X3RhZy5pc19maWxlbmFtZSA9IFRydWUKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50X3RhZy5vdXRfZmlsZWJhc2UgPSBzZWxmLm91dF9maWxlYmFzZQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYsIFN1YnN0cmF0ZURpcik6CisgICAgICAgICAgICAgICAgYXNzaWdubWVudF90YWcuaXNfZGlybmFtZSA9IFRydWUKKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50X3RhZy5vdXRfZmlsZWJhc2UgPSBzZWxmLm91dF9maWxlYmFzZQorICAgICAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcy5hcHBlbmQoYXNzaWdubWVudF90YWcpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBub3JtYWxfbGluZSA9IE5vcm1hbExpbmUobGluZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBTdWJzdHJhdGVGaWxlKToKKyAgICAgICAgICAgIG5vcm1hbF9saW5lLmlzX2ZpbGVuYW1lID0gVHJ1ZQorICAgICAgICAgICAgbm9ybWFsX2xpbmUub3V0X2ZpbGViYXNlID0gc2VsZi5vdXRfZmlsZWJhc2UKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYsIFN1YnN0cmF0ZURpcik6CisgICAgICAgICAgICBub3JtYWxfbGluZS5pc19kaXJuYW1lID0gVHJ1ZQorICAgICAgICAgICAgbm9ybWFsX2xpbmUub3V0X2ZpbGViYXNlID0gc2VsZi5vdXRfZmlsZWJhc2UKKyAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcy5hcHBlbmQobm9ybWFsX2xpbmUpCisKKyAgICBkZWYgZXhwYW5kKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhwYW5kIHRoZSBmaWxlIG9yIGRpciBuYW1lIGZpcnN0LCBldmVudHVhbGx5IHRoaXMgZW5kcyB1cAorICAgICAgICBjcmVhdGluZyB0aGUgZmlsZSBvciBkaXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnRyYW5zbGF0ZV9maWxlX29yX2Rpcl9uYW1lKCkKKyAgICAgICAgc2VsZi5leHBhbmRfZmlsZV9vcl9kaXJfbmFtZSgpCisKKworY2xhc3MgU3Vic3RyYXRlRmlsZShTdWJzdHJhdGVCYXNlKToKKyAgICAiIiIKKyAgICBDb250YWluZXIgZm9yIGJvdGggZXhwYW5kZWQgYW5kIHVuZXhwYW5kZWQgc3Vic3RyYXRlIGZpbGVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmlsZWJhc2UsIG91dF9maWxlYmFzZSk6CisgICAgICAgIFN1YnN0cmF0ZUJhc2UuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yYXdfbGluZXM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5yYXdfbGluZXMgPSBmLnJlYWRsaW5lcygpCisKKyAgICBkZWYgZXhwYW5kKHNlbGYpOgorICAgICAgICAiIiJFeHBhbmQgdGhlIGNvbnRlbnRzIG9mIGFsbCB0ZW1wbGF0ZSB0YWdzIGluIHRoZSBmaWxlLiIiIgorICAgICAgICBTdWJzdHJhdGVCYXNlLmV4cGFuZChzZWxmKQorICAgICAgICBzZWxmLnJlYWQoKQorCisgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKHNlbGYucmF3X2xpbmVzKToKKyAgICAgICAgICAgICMgb25seSBmaXJzdCBsaW5lIGNhbiBiZSBhIGZpbGVuYW1lIHN1YnN0aXRpdGlvbgorICAgICAgICAgICAgaWYgbGluZW5vID09IDAgYW5kIGxpbmUuc3RhcnRzd2l0aCgiIyIpIGFuZCBGSUxFTkFNRV9UQUcgaW4gbGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZSAjIHNraXAgaXQgLSB3ZSd2ZSBhbHJlYWR5IGV4cGFuZGVkIGl0CisgICAgICAgICAgICBleHBhbmRlZF9saW5lID0gc2VsZi5leHBhbmRfdGFnKGxpbmUsIGxpbmVubyArIDEpICMgaHVtYW5zIG5vdCAwLWJhc2VkCisgICAgICAgICAgICBpZiBub3QgZXhwYW5kZWRfbGluZToKKyAgICAgICAgICAgICAgICBleHBhbmRlZF9saW5lID0gTm9ybWFsTGluZShsaW5lLnJzdHJpcCgpKQorICAgICAgICAgICAgc2VsZi5leHBhbmRlZF9saW5lcy5hcHBlbmQoZXhwYW5kZWRfbGluZSkKKworICAgIGRlZiBnZW4oc2VsZiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgY29kZSB0aGF0IGdlbmVyYXRlcyB0aGUgQlNQLiIiIgorICAgICAgICBiYXNlX2luZGVudCA9IDAKKworICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50ID0gYmFzZV9pbmRlbnQKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZGVkX2xpbmVzOgorICAgICAgICAgICAgZ2VubGluZSA9IGxpbmUuZ2VuKGNvbnRleHQpCisgICAgICAgICAgICBpZiBub3QgZ2VubGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgICAgIGxpbmUuZ2VuZXJhdGVkX2xpbmUgPSBnZW5saW5lCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGdlbmxpbmUuc3RhcnRzd2l0aChPUEVOX1NUQVJUKToKKyAgICAgICAgICAgICAgICBpZiBpbmRlbnQgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgYmFzZV9pbmRlbnQgPSAxCisgICAgICAgICAgICBpZiBpbmRlbnQ6CisgICAgICAgICAgICAgICAgaWYgZ2VubGluZSA9PSBCTEFOS0xJTkVfU1RSIG9yIChub3QgZ2VubGluZS5zdGFydHN3aXRoKE5PUk1BTF9TVEFSVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3QgZ2VubGluZS5zdGFydHN3aXRoKE9QRU5fU1RBUlQpKToKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudCA9IGJhc2VfaW5kZW50CisgICAgICAgICAgICBpZiBnZW5saW5lLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICAgICAgbmV3X2luZGVudCA9IGJhc2VfaW5kZW50ICsgMQorICAgICAgICAgICAgbGluZS5nZW5lcmF0ZWRfbGluZSA9IChpbmRlbnQgKiBJTkRFTlRfU1RSKSArIGdlbmxpbmUKKyAgICAgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQKKworCitjbGFzcyBTdWJzdHJhdGVEaXIoU3Vic3RyYXRlQmFzZSk6CisgICAgIiIiCisgICAgQ29udGFpbmVyIGZvciBib3RoIGV4cGFuZGVkIGFuZCB1bmV4cGFuZGVkIHN1YnN0cmF0ZSBkaXJzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZmlsZWJhc2UsIG91dF9maWxlYmFzZSk6CisgICAgICAgIFN1YnN0cmF0ZUJhc2UuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIGZpbGViYXNlLCBvdXRfZmlsZWJhc2UpCisKKyAgICBkZWYgZXhwYW5kKHNlbGYpOgorICAgICAgICBTdWJzdHJhdGVCYXNlLmV4cGFuZChzZWxmKQorCisgICAgZGVmIGdlbihzZWxmLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSBjb2RlIHRoYXQgZ2VuZXJhdGVzIHRoZSBCU1AuIiIiCisgICAgICAgIGluZGVudCA9IG5ld19pbmRlbnQgPSAwCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kZWRfbGluZXM6CisgICAgICAgICAgICBnZW5saW5lID0gbGluZS5nZW4oY29udGV4dCkKKyAgICAgICAgICAgIGlmIG5vdCBnZW5saW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBnZW5saW5lLmVuZHN3aXRoKCI6Iik6CisgICAgICAgICAgICAgICAgbmV3X2luZGVudCA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X2luZGVudCA9IDAKKyAgICAgICAgICAgIGxpbmUuZ2VuZXJhdGVkX2xpbmUgPSAoaW5kZW50ICogSU5ERU5UX1NUUikgKyBnZW5saW5lCisgICAgICAgICAgICBpbmRlbnQgPSBuZXdfaW5kZW50CisKKworZGVmIGV4cGFuZF90YXJnZXQodGFyZ2V0LCBhbGxfZmlsZXMsIG91dF9maWxlYmFzZSk6CisgICAgIiIiCisgICAgRXhwYW5kIHRoZSBjb250ZW50cyBvZiBhbGwgdGVtcGxhdGUgdGFncyBpbiB0aGUgdGFyZ2V0LiAgVGhpcworICAgIG1lYW5zIHJlbW92aW5nIHRhZ3MgYW5kIGNhdGVnb3JpemluZyBvciBjcmVhdGluZyBsaW5lcyBzbyB0aGF0CisgICAgZnV0dXJlIHBhc3NlcyBjYW4gcHJvY2VzcyBhbmQgcHJlc2VudCBpbnB1dCBsaW5lcyBhbmQgZ2VuZXJhdGUgdGhlCisgICAgY29ycmVzcG9uZGluZyBsaW5lcyBvZiB0aGUgUHl0aG9uIHByb2dyYW0gdGhhdCB3aWxsIGJlIGV4ZWMnZWQgdG8KKyAgICBhY3R1YWxseSBwcm9kdWNlIHRoZSBmaW5hbCBCU1AuICAnYWxsX2ZpbGVzJyBpbmNsdWRlcyBkaXJlY3Rvcmllcy4KKyAgICAiIiIKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0YXJnZXQpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIn4iKSBvciBmaWxlLmVuZHN3aXRoKCIjIik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgIHNmaWxlID0gU3Vic3RyYXRlRmlsZShmLCB0YXJnZXQsIG91dF9maWxlYmFzZSkKKyAgICAgICAgICAgIHNmaWxlLmV4cGFuZCgpCisgICAgICAgICAgICBhbGxfZmlsZXMuYXBwZW5kKHNmaWxlKQorCisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGQgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZGlyKQorICAgICAgICAgICAgc2RpciA9IFN1YnN0cmF0ZURpcihkLCB0YXJnZXQsIG91dF9maWxlYmFzZSkKKyAgICAgICAgICAgIHNkaXIuZXhwYW5kKCkKKyAgICAgICAgICAgIGFsbF9maWxlcy5hcHBlbmQoc2RpcikKKworCitkZWYgZ2VuX3Byb2dyYW1fbWFjaGluZV9saW5lcyhtYWNoaW5lLCBwcm9ncmFtX2xpbmVzKToKKyAgICAiIiIKKyAgICBVc2UgdGhlIGlucHV0IHZhbHVlcyB3ZSBnb3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICAgICIiIgorICAgIGxpbmUgPSAibWFjaGluZSA9IFwiIiArIG1hY2hpbmUgKyAiXCIiCisgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQobGluZSkKKworICAgIGxpbmUgPSAibGF5ZXJfbmFtZSA9IFwiIiArIG1hY2hpbmUgKyAiXCIiCisgICAgcHJvZ3JhbV9saW5lcy5hcHBlbmQobGluZSkKKworCitkZWYgc29ydF9pbnB1dGxpbmVzKGlucHV0X2xpbmVzKToKKyAgICAiIiJTb3J0IGlucHV0IGxpbmVzIGFjY29yZGluZyB0byBwcmlvcml0eSAocG9zaXRpb24pLiIiIgorICAgIGlucHV0X2xpbmVzLnNvcnQoa2V5ID0gbGFtYmRhIGw6IGwucHJpbykKKworCitkZWYgZmluZF9wYXJlbnRfZGVwZW5kZW5jeShsaW5lcywgZGVwZW5kc19vbik6CisgICAgZm9yIGksIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgQ29kZUxpbmUpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgbGluZS5wcm9wc1sibmFtZSJdID09IGRlcGVuZHNfb246CisgICAgICAgICAgICByZXR1cm4gaQorCisgICAgcmV0dXJuIC0xCisKKworZGVmIHByb2Nlc3NfaW5wdXRsaW5lX2RlcGVuZGVuY2llcyhpbnB1dF9saW5lcywgYWxsX2lucHV0bGluZXMpOgorICAgICIiIklmIGFueSBpbnB1dCBsaW5lcyBkZXBlbmQgb24gb3RoZXJzLCBwdXQgdGhlIG90aGVycyBmaXJzdC4iIiIKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBncm91cF9pbnB1dGxpbmVzID0gW10KKyAgICAgICAgICAgIHByb2Nlc3NfaW5wdXRsaW5lX2RlcGVuZGVuY2llcyhsaW5lLmdyb3VwLCBncm91cF9pbnB1dGxpbmVzKQorICAgICAgICAgICAgbGluZS5ncm91cCA9IGdyb3VwX2lucHV0bGluZXMKKyAgICAgICAgICAgIGFsbF9pbnB1dGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIENvZGVMaW5lKSBvciBpc2luc3RhbmNlKGxpbmUsIE5vcm1hbExpbmUpOgorICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlcGVuZHNfb24gPSBsaW5lLnByb3BzWyJkZXBlbmRzLW9uIl0KKyAgICAgICAgICAgIGRlcGVuZHNfY29kZWxpbmUgPSAiaWYgIiArIGxpbmUucHJvcHNbImRlcGVuZHMtb24iXSArICIgPT0gXCIiICsgbGluZS5wcm9wc1siZGVwZW5kcy1vbi12YWwiXSArICJcIjoiCisgICAgICAgICAgICBhbGxfaW5wdXRsaW5lcy5hcHBlbmQoQ29kZUxpbmUoZGVwZW5kc19jb2RlbGluZSkpCisgICAgICAgICAgICBhbGxfaW5wdXRsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgYWxsX2lucHV0bGluZXMuYXBwZW5kKGxpbmUpCisKKworZGVmIGNvbmRpdGlvbmFsX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiB0aGUgZmlsZW5hbWUgaXRzZWxmIGNvbnRhaW5zIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiAgSWYKKyAgICBzbywgcmV0dXJuIGEgY29kZWxpbmUgZm9yIGl0LgorICAgICIiIgorICAgIG9wZW50YWdfc3RhcnQgPSBmaWxlbmFtZS5maW5kKE9QRU5fVEFHKQorCisgICAgaWYgb3BlbnRhZ19zdGFydCAhPSAtMToKKyAgICAgICAgaWYgZmlsZW5hbWVbb3BlbnRhZ19zdGFydDpdLnN0YXJ0c3dpdGgoQVNTSUdOX1RBRyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbmQgPSBmaWxlbmFtZS5maW5kKENMT1NFX1RBRywgb3BlbnRhZ19zdGFydCkKKyAgICAgICAgaWYgZW5kID09IC0xOgorICAgICAgICAgICAgcHJpbnQgIk5vIGNsb3NlIHRhZyBmb3VuZCBmb3Igb3BlbiB0YWcgaW4gZmlsZW5hbWUgJXMiICUgZmlsZW5hbWUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgIyB3ZSBoYXZlIGEge3sgdGFnIGkuZS4gY29kZQorICAgICAgICB0YWcgPSBmaWxlbmFtZVtvcGVudGFnX3N0YXJ0ICsgbGVuKE9QRU5fVEFHKTplbmRdLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IHRhZy5sc3RyaXAoKS5zdGFydHN3aXRoKElGX1RBRyk6CisgICAgICAgICAgICBwcmludCAiT25seSAnaWYnIHRhZ3MgYXJlIGFsbG93ZWQgaW4gZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMsIGZpbGVuYW1lOiAlcyIgJSBmaWxlbmFtZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICByZXR1cm4gQ29kZUxpbmUodGFnKQorCisgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBJbnB1dExpbmVHcm91cChJbnB1dExpbmUpOgorICAgICIiIgorICAgIElucHV0TGluZSB0aGF0IGRvZXMgbm90aGluZyBidXQgZ3JvdXAgb3RoZXIgaW5wdXQgbGluZXMKKyAgICBjb3JyZXNwb25kaW5nIHRvIGFsbCB0aGUgaW5wdXQgbGluZXMgaW4gYSBTdWJzdHJhdGVGaWxlIHNvIHRoZXkKKyAgICBjYW4gYmUgZ2VuZXJhdGVkIGFzIGEgZ3JvdXAuICBwcmlvIGlzIHRoZSBvbmx5IHByb3BlcnR5IHVzZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGVsaW5lKToKKyAgICAgICAgSW5wdXRMaW5lLl9faW5pdF9fKHNlbGYsIHt9LCAiIiwgMCkKKyAgICAgICAgc2VsZi5ncm91cCA9IFtdCisgICAgICAgIHNlbGYucHJpbyA9IHN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5ncm91cC5hcHBlbmQoY29kZWxpbmUpCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmdyb3VwLmFwcGVuZChsaW5lKQorICAgICAgICBpZiBsaW5lLnByaW8gPCBzZWxmLnByaW86CisgICAgICAgICAgICBzZWxmLnByaW8gPSBsaW5lLnByaW8KKworICAgIGRlZiBsZW4oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5ncm91cCkKKworCitkZWYgZ2F0aGVyX2lucHV0bGluZXMoZmlsZXMpOgorICAgICIiIgorICAgIEdhdGhlciBhbGwgdGhlIElucHV0TGluZXMgLSB3ZSB3YW50IHRvIGdlbmVyYXRlIHRoZW0gZmlyc3QuCisgICAgIiIiCisgICAgYWxsX2lucHV0bGluZXMgPSBbXQorICAgIGlucHV0X2xpbmVzID0gW10KKworICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIFN1YnN0cmF0ZUZpbGUpOgorICAgICAgICAgICAgZ3JvdXAgPSBOb25lCisgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZS50cmFuc2xhdGVkX2ZpbGVuYW1lKQorCisgICAgICAgICAgICBjb2RlbGluZSA9IGNvbmRpdGlvbmFsX2ZpbGVuYW1lKGJhc2VuYW1lKQorICAgICAgICAgICAgaWYgY29kZWxpbmU6CisgICAgICAgICAgICAgICAgZ3JvdXAgPSBJbnB1dExpbmVHcm91cChjb2RlbGluZSkKKworICAgICAgICAgICAgaGF2ZV9jb25kaXRpb24gPSBGYWxzZQorICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmlsZS5leHBhbmRlZF9saW5lczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIENvZGVMaW5lKToKKyAgICAgICAgICAgICAgICAgICAgaGF2ZV9jb25kaXRpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZSA9IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29uZGl0aW9uX3RvX3dyaXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZS5wcmlvID0gbGluZS5wcmlvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlLmRpc2NhcmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKGNvbmRpdGlvbl90b193cml0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRpdGlvbl90b193cml0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdG9fd3JpdGUucHJpbyA9IGxpbmUucHJpbworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl90b193cml0ZS5kaXNjYXJkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xpbmVzLmFwcGVuZChjb25kaXRpb25fdG9fd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgY29uZGl0aW9uX3RvX3dyaXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX3RvX3dyaXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBpZiBoYXZlX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lLmxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRpc2NhcmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGhhdmVfY29uZGl0aW9uID0gRmFsc2UKKworICAgICAgICAgICAgaWYgZ3JvdXAgYW5kIGdyb3VwLmxlbigpID4gMToKKyAgICAgICAgICAgICAgICBpbnB1dF9saW5lcy5hcHBlbmQoZ3JvdXApCisKKyAgICBzb3J0X2lucHV0bGluZXMoaW5wdXRfbGluZXMpCisgICAgcHJvY2Vzc19pbnB1dGxpbmVfZGVwZW5kZW5jaWVzKGlucHV0X2xpbmVzLCBhbGxfaW5wdXRsaW5lcykKKworICAgIHJldHVybiBhbGxfaW5wdXRsaW5lcworCisKK2RlZiBydW5fcHJvZ3JhbV9saW5lcyhsaW5lbGlzdCwgY29kZWR1bXApOgorICAgICIiIgorICAgIEZvciBhIHNpbmdsZSBmaWxlLCBwcmludCBhbGwgdGhlIHB5dGhvbiBjb2RlIGludG8gYSBidWYgYW5kIGV4ZWN1dGUgaXQuCisgICAgIiIiCisgICAgYnVmID0gIlxuIi5qb2luKGxpbmVsaXN0KQorCisgICAgaWYgY29kZWR1bXA6CisgICAgICAgIG9mID0gb3BlbigiYnNwZ2VuLm91dCIsICJ3IikKKyAgICAgICAgb2Yud3JpdGUoYnVmKQorICAgICAgICBvZi5jbG9zZSgpCisgICAgZXhlYyBidWYKKworCitkZWYgZ2VuX3RhcmdldChmaWxlcywgY29udGV4dCA9IE5vbmUpOgorICAgICIiIgorICAgIEdlbmVyYXRlIHRoZSBweXRob24gY29kZSBmb3IgZWFjaCBmaWxlLgorICAgICIiIgorICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICBmaWxlLmdlbihjb250ZXh0KQorCisKK2RlZiBnZW5fcHJvZ3JhbV9oZWFkZXJfbGluZXMocHJvZ3JhbV9saW5lcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYW55IGltcG9ydHMgd2UgbmVlZC4KKyAgICAiIiIKKyAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZCgiY3VycmVudF9maWxlID0gXCJcIiIpCisKKworZGVmIGdlbl9zdXBwbGllZF9wcm9wZXJ0eV92YWxzKHByb3BlcnRpZXMsIHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIHVzZXItc3BlY2lmaWVkIGVudHJpZXMgZm9yIGlucHV0IHZhbHVlcyBpbnN0ZWFkIG9mCisgICAgZ2VuZXJhdGluZyBpbnB1dCBwcm9tcHRzLgorICAgICIiIgorICAgIGZvciBuYW1lLCB2YWwgaW4gcHJvcGVydGllcy5pdGVyaXRlbXMoKToKKyAgICAgICAgcHJvZ3JhbV9saW5lID0gbmFtZSArICIgPSBcIiIgKyB2YWwgKyAiXCIiCisgICAgICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKHByb2dyYW1fbGluZSkKKworCitkZWYgZ2VuX2luaXRpYWxfcHJvcGVydHlfdmFscyhpbnB1dF9saW5lcywgcHJvZ3JhbV9saW5lcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgbnVsbCBvciBkZWZhdWx0IGVudHJpZXMgZm9yIGlucHV0IHZhbHVlcywgc28gd2UgZG9uJ3QKKyAgICBoYXZlIHVuZGVmaW5lZCB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgZ2VuX2luaXRpYWxfcHJvcGVydHlfdmFscyhsaW5lLmdyb3VwLCBwcm9ncmFtX2xpbmVzKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IGxpbmUucHJvcHNbIm5hbWUiXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YWwgPSAiXCIiICsgbGluZS5wcm9wc1siZGVmYXVsdCJdICsgIlwiIgorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YWwgPSAiXCJcIiIKKyAgICAgICAgICAgICAgICBwcm9ncmFtX2xpbmUgPSBuYW1lICsgIiA9ICIgKyBkZWZhdWx0X3ZhbAorICAgICAgICAgICAgICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKHByb2dyYW1fbGluZSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKworZGVmIGdlbl9wcm9ncmFtX2lucHV0X2xpbmVzKGlucHV0X2xpbmVzLCBwcm9ncmFtX2xpbmVzLCBjb250ZXh0LCBpbl9ncm91cCA9IEZhbHNlKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSBvbmx5IHRoZSBpbnB1dCBsaW5lcyB1c2VkIGZvciBwcm9tcHRpbmcgdGhlIHVzZXIuICBGb3IKKyAgICB0aGF0LCB3ZSBvbmx5IGhhdmUgaW5wdXQgbGluZXMgYW5kIENvZGVMaW5lcyB0aGF0IGFmZmVjdCB0aGUgbmV4dAorICAgIGlucHV0IGxpbmUuCisgICAgIiIiCisgICAgaW5kZW50ID0gbmV3X2luZGVudCA9IDAKKworICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGdlbl9wcm9ncmFtX2lucHV0X2xpbmVzKGxpbmUuZ3JvdXAsIHByb2dyYW1fbGluZXMsIGNvbnRleHQsIFRydWUpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBub3QgbGluZS5saW5lLnN0cmlwKCk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGdlbmxpbmUgPSBsaW5lLmdlbihjb250ZXh0KQorICAgICAgICBpZiBub3QgZ2VubGluZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGdlbmxpbmUuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgIG5ld19pbmRlbnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaW5kZW50ID4gMSBvciAobm90IGluX2dyb3VwIGFuZCBpbmRlbnQpOgorICAgICAgICAgICAgICAgIG5ld19pbmRlbnQgLT0gMQorCisgICAgICAgIGxpbmUuZ2VuZXJhdGVkX2xpbmUgPSAoaW5kZW50ICogSU5ERU5UX1NUUikgKyBnZW5saW5lCisgICAgICAgIHByb2dyYW1fbGluZXMuYXBwZW5kKGxpbmUuZ2VuZXJhdGVkX2xpbmUpCisKKyAgICAgICAgaW5kZW50ID0gbmV3X2luZGVudAorCisKK2RlZiBnZW5fcHJvZ3JhbV9saW5lcyh0YXJnZXRfZmlsZXMsIHByb2dyYW1fbGluZXMpOgorICAgICIiIgorICAgIEdlbmVyYXRlIHRoZSBwcm9ncmFtIGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgQlNQIGdlbmVyYXRpb24KKyAgICBwcm9ncmFtLiAgVGhpcyBhcHBlbmRzIHRoZSBnZW5lcmF0ZWQgbGluZXMgb2YgYWxsIHRhcmdldF9maWxlcyB0bworICAgIHByb2dyYW1fbGluZXMsIGFuZCBza2lwcyBpbnB1dCBsaW5lcywgd2hpY2ggYXJlIGRlYWx0IHdpdGgKKyAgICBzZXBhcmF0ZWx5LCBvciBvbWl0dGVkLgorICAgICIiIgorICAgIGZvciBmaWxlIGluIHRhcmdldF9maWxlczoKKyAgICAgICAgaWYgZmlsZS5maWxlbmFtZS5lbmRzd2l0aCgibm9pbnN0YWxsIik6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGZvciBsaW5lIGluIGZpbGUuZXhwYW5kZWRfbGluZXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmUuZGlzY2FyZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBwcm9ncmFtX2xpbmVzLmFwcGVuZChsaW5lLmdlbmVyYXRlZF9saW5lKQorCisKK2RlZiBjcmVhdGVfY29udGV4dChtYWNoaW5lLCBhcmNoLCBzY3JpcHRzX3BhdGgpOgorICAgICIiIgorICAgIENyZWF0ZSBhIGNvbnRleHQgb2JqZWN0IGZvciB1c2UgaW4gZGVmZXJyZWQgZnVuY3Rpb24gaW52b2NhdGlvbi4KKyAgICAiIiIKKyAgICBjb250ZXh0ID0ge30KKworICAgIGNvbnRleHRbIm1hY2hpbmUiXSA9IG1hY2hpbmUKKyAgICBjb250ZXh0WyJhcmNoIl0gPSBhcmNoCisgICAgY29udGV4dFsic2NyaXB0c19wYXRoIl0gPSBzY3JpcHRzX3BhdGgKKworICAgIHJldHVybiBjb250ZXh0CisKKworZGVmIGNhcHR1cmVfY29udGV4dChjb250ZXh0KToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBjb250ZXh0IG9iamVjdCBmb3IgdXNlIGluIGRlZmVycmVkIGZ1bmN0aW9uIGludm9jYXRpb24uCisgICAgIiIiCisgICAgY2FwdHVyZWRfY29udGV4dCA9IHt9CisKKyAgICBjYXB0dXJlZF9jb250ZXh0WyJtYWNoaW5lIl0gPSBjb250ZXh0WyJtYWNoaW5lIl0KKyAgICBjYXB0dXJlZF9jb250ZXh0WyJhcmNoIl0gPSBjb250ZXh0WyJhcmNoIl0KKyAgICBjYXB0dXJlZF9jb250ZXh0WyJzY3JpcHRzX3BhdGgiXSA9IGNvbnRleHRbInNjcmlwdHNfcGF0aCJdCisKKyAgICByZXR1cm4gY2FwdHVyZWRfY29udGV4dAorCisKK2RlZiBleHBhbmRfdGFyZ2V0cyhjb250ZXh0LCBic3Bfb3V0cHV0X2RpciwgZXhwYW5kX2NvbW1vbj1UcnVlKToKKyAgICAiIiIKKyAgICBFeHBhbmQgYWxsIHRoZSB0YWdzIGluIGJvdGggdGhlIGNvbW1vbiBhbmQgbWFjaGluZS1zcGVjaWZpYworICAgICd0YXJnZXRzJy4KKworICAgIElmIGV4cGFuZF9jb21tb24gaXMgRmFsc2UsIGRvbid0IGV4cGFuZCB0aGUgY29tbW9uIHRhcmdldCAodGhpcworICAgIG9wdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBzcGVjaWFsLXB1cnBvc2UgbGF5ZXJzKS4KKyAgICAiIiIKKyAgICB0YXJnZXRfZmlsZXMgPSBbXQorCisgICAgbWFjaGluZSA9IGNvbnRleHRbIm1hY2hpbmUiXQorICAgIGFyY2ggPSBjb250ZXh0WyJhcmNoIl0KKyAgICBzY3JpcHRzX3BhdGggPSBjb250ZXh0WyJzY3JpcHRzX3BhdGgiXQorCisgICAgbGliX3BhdGggPSBzY3JpcHRzX3BhdGggKyAnL2xpYicKKyAgICBic3BfcGF0aCA9IGxpYl9wYXRoICsgJy9ic3AnCisgICAgYXJjaF9wYXRoID0gYnNwX3BhdGggKyAnL3N1YnN0cmF0ZS90YXJnZXQvYXJjaCcKKworICAgIGlmIGV4cGFuZF9jb21tb246CisgICAgICAgIGNvbW1vbiA9IG9zLnBhdGguam9pbihhcmNoX3BhdGgsICJjb21tb24iKQorICAgICAgICBleHBhbmRfdGFyZ2V0KGNvbW1vbiwgdGFyZ2V0X2ZpbGVzLCBic3Bfb3V0cHV0X2RpcikKKworICAgIGFyY2hlcyA9IG9zLmxpc3RkaXIoYXJjaF9wYXRoKQorICAgIGlmIGFyY2ggbm90IGluIGFyY2hlcyBvciBhcmNoID09ICJjb21tb24iOgorICAgICAgICBwcmludCAiSW52YWxpZCBrYXJjaCwgZXhpdGluZ1xuIgorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKGFyY2hfcGF0aCwgYXJjaCkKKyAgICBleHBhbmRfdGFyZ2V0KHRhcmdldCwgdGFyZ2V0X2ZpbGVzLCBic3Bfb3V0cHV0X2RpcikKKworICAgIGdlbl90YXJnZXQodGFyZ2V0X2ZpbGVzLCBjb250ZXh0KQorCisgICAgcmV0dXJuIHRhcmdldF9maWxlcworCisKK2RlZiB5b2N0b19jb21tb25fY3JlYXRlKG1hY2hpbmUsIHRhcmdldCwgc2NyaXB0c19wYXRoLCBsYXllcl9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzX3N0cj0iIiwgZXhwYW5kX2NvbW1vbj1UcnVlKToKKyAgICAiIiIKKyAgICBDb21tb24gbGF5ZXItY3JlYXRpb24gY29kZQorCisgICAgbWFjaGluZSAtIHVzZXItZGVmaW5lZCBtYWNoaW5lIG5hbWUgKGlmIG5lZWRlZCwgd2lsbCBnZW5lcmF0ZSAnbWFjaGluZScgdmFyKQorICAgIHRhcmdldCAtIHRoZSAndGFyZ2V0JyB0aGUgbGF5ZXIgd2lsbCBiZSBiYXNlZCBvbiwgbXVzdCBiZSBvbmUgaW4KKyAgICAgICAgICAgc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaAorICAgIHNjcmlwdHNfcGF0aCAtIGFic29sdXRlIHBhdGggdG8geW9jdG8gL3NjcmlwdHMgZGlyCisgICAgbGF5ZXJfb3V0cHV0X2RpciAtIGRpcm5hbWUgdG8gY3JlYXRlIGZvciBsYXllcgorICAgIGNvZGVkdW1wIC0gZHVtcCBnZW5lcmF0ZWQgY29kZSB0byBic3BnZW4ub3V0CisgICAgcHJvcGVydGllc19maWxlIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgZmlsZSBpZiBub25lbXB0eSBpLmUgbm8gcHJvbXB0aW5nCisgICAgcHJvcGVydGllc19zdHIgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBzdHJpbmcgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgIGV4cGFuZF9jb21tb24gLSBib29sZWFuLCB1c2UgdGhlIGNvbnRlbnRzIG9mIChmb3IgYnNwIGxheWVycykgYXJjaC9jb21tb24KKyAgICAiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcl9vdXRwdXRfZGlyKToKKyAgICAgICAgcHJpbnQgIlxubGF5ZXIgb3V0cHV0IGRpciBhbHJlYWR5IGV4aXN0cywgZXhpdGluZy4gKCVzKSIgJSBsYXllcl9vdXRwdXRfZGlyCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBwcm9wZXJ0aWVzID0gTm9uZQorCisgICAgaWYgcHJvcGVydGllc19maWxlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbmZpbGUgPSBvcGVuKHByb3BlcnRpZXNfZmlsZSwgInIiKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBvcGVuIHByb3BlcnRpZXMgZmlsZSAlcyBmb3IgcmVhZGluZywgZXhpdGluZyIgJSBwcm9wZXJ0aWVzX2ZpbGUKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgcHJvcGVydGllcyA9IGpzb24ubG9hZChpbmZpbGUpCisKKyAgICBpZiBwcm9wZXJ0aWVzX3N0ciBhbmQgbm90IHByb3BlcnRpZXM6CisgICAgICAgIHByb3BlcnRpZXMgPSBqc29uLmxvYWRzKHByb3BlcnRpZXNfc3RyKQorCisgICAgb3MubWtkaXIobGF5ZXJfb3V0cHV0X2RpcikKKworICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dChtYWNoaW5lLCB0YXJnZXQsIHNjcmlwdHNfcGF0aCkKKyAgICB0YXJnZXRfZmlsZXMgPSBleHBhbmRfdGFyZ2V0cyhjb250ZXh0LCBsYXllcl9vdXRwdXRfZGlyLCBleHBhbmRfY29tbW9uKQorCisgICAgaW5wdXRfbGluZXMgPSBnYXRoZXJfaW5wdXRsaW5lcyh0YXJnZXRfZmlsZXMpCisKKyAgICBwcm9ncmFtX2xpbmVzID0gW10KKworICAgIGdlbl9wcm9ncmFtX2hlYWRlcl9saW5lcyhwcm9ncmFtX2xpbmVzKQorCisgICAgZ2VuX2luaXRpYWxfcHJvcGVydHlfdmFscyhpbnB1dF9saW5lcywgcHJvZ3JhbV9saW5lcykKKworICAgIGlmIHByb3BlcnRpZXM6CisgICAgICAgIGdlbl9zdXBwbGllZF9wcm9wZXJ0eV92YWxzKHByb3BlcnRpZXMsIHByb2dyYW1fbGluZXMpCisKKyAgICBnZW5fcHJvZ3JhbV9tYWNoaW5lX2xpbmVzKG1hY2hpbmUsIHByb2dyYW1fbGluZXMpCisKKyAgICBpZiBub3QgcHJvcGVydGllczoKKyAgICAgICAgZ2VuX3Byb2dyYW1faW5wdXRfbGluZXMoaW5wdXRfbGluZXMsIHByb2dyYW1fbGluZXMsIGNvbnRleHQpCisKKyAgICBnZW5fcHJvZ3JhbV9saW5lcyh0YXJnZXRfZmlsZXMsIHByb2dyYW1fbGluZXMpCisKKyAgICBydW5fcHJvZ3JhbV9saW5lcyhwcm9ncmFtX2xpbmVzLCBjb2RlZHVtcCkKKworCitkZWYgeW9jdG9fbGF5ZXJfY3JlYXRlKGxheWVyX25hbWUsIHNjcmlwdHNfcGF0aCwgbGF5ZXJfb3V0cHV0X2RpciwgY29kZWR1bXAsIHByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcz0iIik6CisgICAgIiIiCisgICAgQ3JlYXRlIHlvY3RvIGxheWVyCisKKyAgICBsYXllcl9uYW1lIC0gdXNlci1kZWZpbmVkIGxheWVyIG5hbWUKKyAgICBzY3JpcHRzX3BhdGggLSBhYnNvbHV0ZSBwYXRoIHRvIHlvY3RvIC9zY3JpcHRzIGRpcgorICAgIGxheWVyX291dHB1dF9kaXIgLSBkaXJuYW1lIHRvIGNyZWF0ZSBmb3IgbGF5ZXIKKyAgICBjb2RlZHVtcCAtIGR1bXAgZ2VuZXJhdGVkIGNvZGUgdG8gYnNwZ2VuLm91dAorICAgIHByb3BlcnRpZXNfZmlsZSAtIHVzZSB2YWx1ZXMgZnJvbSB0aGlzIGZpbGUgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgIHByb3BlcnRpZXMgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBzdHJpbmcgaWYgbm9uZW1wdHkgaS5lIG5vIHByb21wdGluZworICAgICIiIgorICAgIHlvY3RvX2NvbW1vbl9jcmVhdGUobGF5ZXJfbmFtZSwgImxheWVyIiwgc2NyaXB0c19wYXRoLCBsYXllcl9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzLCBGYWxzZSkKKworICAgIHByaW50ICJcbk5ldyBsYXllciBjcmVhdGVkIGluICVzLlxuIiAlIChsYXllcl9vdXRwdXRfZGlyKQorICAgIHByaW50ICJEb24ndCBmb3JnZXQgdG8gYWRkIGl0IHRvIHlvdXIgQkJMQVlFUlMgKGZvciBkZXRhaWxzIHNlZSAlc1xSRUFETUUpLiIgJSAobGF5ZXJfb3V0cHV0X2RpcikKKworCitkZWYgeW9jdG9fYnNwX2NyZWF0ZShtYWNoaW5lLCBhcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBjb2RlZHVtcCwgcHJvcGVydGllc19maWxlLCBwcm9wZXJ0aWVzPU5vbmUpOgorICAgICIiIgorICAgIENyZWF0ZSBic3AKKworICAgIG1hY2hpbmUgLSB1c2VyLWRlZmluZWQgbWFjaGluZSBuYW1lCisgICAgYXJjaCAtIHRoZSBhcmNoIHRoZSBic3Agd2lsbCBiZSBiYXNlZCBvbiwgbXVzdCBiZSBvbmUgaW4KKyAgICAgICAgICAgc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaAorICAgIHNjcmlwdHNfcGF0aCAtIGFic29sdXRlIHBhdGggdG8geW9jdG8gL3NjcmlwdHMgZGlyCisgICAgYnNwX291dHB1dF9kaXIgLSBkaXJuYW1lIHRvIGNyZWF0ZSBmb3IgQlNQCisgICAgY29kZWR1bXAgLSBkdW1wIGdlbmVyYXRlZCBjb2RlIHRvIGJzcGdlbi5vdXQKKyAgICBwcm9wZXJ0aWVzX2ZpbGUgLSB1c2UgdmFsdWVzIGZyb20gdGhpcyBmaWxlIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICBwcm9wZXJ0aWVzIC0gdXNlIHZhbHVlcyBmcm9tIHRoaXMgc3RyaW5nIGlmIG5vbmVtcHR5IGkuZSBubyBwcm9tcHRpbmcKKyAgICAiIiIKKyAgICB5b2N0b19jb21tb25fY3JlYXRlKG1hY2hpbmUsIGFyY2gsIHNjcmlwdHNfcGF0aCwgYnNwX291dHB1dF9kaXIsIGNvZGVkdW1wLCBwcm9wZXJ0aWVzX2ZpbGUsIHByb3BlcnRpZXMpCisKKyAgICBwcmludCAiXG5OZXcgJXMgQlNQIGNyZWF0ZWQgaW4gJXMiICUgKGFyY2gsIGJzcF9vdXRwdXRfZGlyKQorCisKK2RlZiBwcmludF9kaWN0KGl0ZW1zLCBpbmRlbnQgPSAwKToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgdmFsdWVzIGluIGEgcG9zc2libHkgbmVzdGVkIGRpY3Rpb25hcnkuCisgICAgIiIiCisgICAgZm9yIGtleSwgdmFsIGluIGl0ZW1zLml0ZXJpdGVtcygpOgorICAgICAgICBwcmludCAiICAgICIqaW5kZW50ICsgIlwiJXNcIiA6IiAlIGtleSwKKyAgICAgICAgaWYgdHlwZSh2YWwpID09IGRpY3Q6CisgICAgICAgICAgICBwcmludCAieyIKKyAgICAgICAgICAgIHByaW50X2RpY3QodmFsLCBpbmRlbnQgKyAxKQorICAgICAgICAgICAgcHJpbnQgIiAgICAiKmluZGVudCArICJ9IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIiVzIiAlIHZhbAorCisKK2RlZiBnZXRfcHJvcGVydGllcyhpbnB1dF9saW5lcyk6CisgICAgIiIiCisgICAgR2V0IHRoZSBjb21wbGV0ZSBzZXQgb2YgcHJvcGVydGllcyBmb3IgYWxsIHRoZSBpbnB1dCBpdGVtcyBpbiB0aGUKKyAgICBCU1AsIGFzIGEgcG9zc2libHkgbmVzdGVkIGRpY3Rpb25hcnkuCisgICAgIiIiCisgICAgcHJvcGVydGllcyA9IHt9CisKKyAgICBmb3IgbGluZSBpbiBpbnB1dF9saW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmVHcm91cCk6CisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBsaW5lLmdyb3VwWzBdLmxpbmUKKyAgICAgICAgICAgIGdyb3VwX3Byb3BlcnRpZXMgPSBnZXRfcHJvcGVydGllcyhsaW5lLmdyb3VwKQorICAgICAgICAgICAgcHJvcGVydGllc1tzdGF0ZW1lbnRdID0gZ3JvdXBfcHJvcGVydGllcworICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsaW5lLCBJbnB1dExpbmUpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIENob2ljZUlucHV0TGluZSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHByb3BzID0gbGluZS5wcm9wcworICAgICAgICBpdGVtID0ge30KKyAgICAgICAgbmFtZSA9IHByb3BzWyJuYW1lIl0KKyAgICAgICAgZm9yIGtleSwgdmFsIGluIHByb3BzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3Qga2V5ID09ICJuYW1lIjoKKyAgICAgICAgICAgICAgICBpdGVtW2tleV0gPSB2YWwKKyAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IGl0ZW0KKworICAgIHJldHVybiBwcm9wZXJ0aWVzCisKKworZGVmIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydGllcyhhcmNoLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSwgZXhwYW5kX2NvbW1vbj1UcnVlKToKKyAgICAiIiIKKyAgICBMaXN0IHRoZSBjb21wbGV0ZSBzZXQgb2YgcHJvcGVydGllcyBmb3IgYWxsIHRoZSBpbnB1dCBpdGVtcyBpbiB0aGUKKyAgICBsYXllci4gIElmIHByb3BlcnRpZXNfZmlsZSBpcyBub24tbnVsbCwgd3JpdGUgdGhlIGNvbXBsZXRlIHNldCBvZgorICAgIHByb3BlcnRpZXMgYXMgYSBuZXN0ZWQgSlNPTiBvYmplY3QgY29ycmVzcG9uZGluZyB0byBhIHBvc3NpYmx5CisgICAgbmVzdGVkIGRpY3Rpb25hcnkuCisgICAgIiIiCisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KCJ1bnVzZWQiLCBhcmNoLCBzY3JpcHRzX3BhdGgpCisgICAgdGFyZ2V0X2ZpbGVzID0gZXhwYW5kX3RhcmdldHMoY29udGV4dCwgInVudXNlZCIsIGV4cGFuZF9jb21tb24pCisKKyAgICBpbnB1dF9saW5lcyA9IGdhdGhlcl9pbnB1dGxpbmVzKHRhcmdldF9maWxlcykKKworICAgIHByb3BlcnRpZXMgPSBnZXRfcHJvcGVydGllcyhpbnB1dF9saW5lcykKKyAgICBpZiBwcm9wZXJ0aWVzX2ZpbGU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9mID0gb3Blbihwcm9wZXJ0aWVzX2ZpbGUsICJ3IikKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3Qgb3BlbiBwcm9wZXJ0aWVzIGZpbGUgJXMgZm9yIHdyaXRpbmcsIGV4aXRpbmciICUgcHJvcGVydGllc19maWxlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIGpzb24uZHVtcChwcm9wZXJ0aWVzLCBvZikKKworICAgIHByaW50X2RpY3QocHJvcGVydGllcykKKworCitkZWYgc3BsaXRfbmVzdGVkX3Byb3BlcnR5KHByb3BlcnR5KToKKyAgICAiIiIKKyAgICBBIHByb3BlcnR5IG5hbWUgb2YgdGhlIGZvcm0geC55IGRlc2NyaWJlcyBhIG5lc3RlZCBwcm9wZXJ0eQorICAgIGkuZS4gdGhlIHByb3BlcnR5IHkgaXMgY29udGFpbmVkIHdpdGhpbiB4IGFuZCBjYW4gYmUgYWRkcmVzc2VkCisgICAgdXNpbmcgc3RhbmRhcmQgSlNPTiBzeW50YXggZm9yIG5lc3RlZCBwcm9wZXJ0aWVzLiAgTm90ZSB0aGF0IGlmIGEKKyAgICBwcm9wZXJ0eSBuYW1lIGl0c2VsZiBjb250YWlucyAnLicsIGl0IHNob3VsZCBiZSBjb250YWluZWQgaW4KKyAgICBkb3VibGUgcXVvdGVzLgorICAgICIiIgorICAgIHNwbGl0dGFibGVfcHJvcGVydHkgPSAiIgorICAgIGluX3F1b3RlcyA9IEZhbHNlCisgICAgZm9yIGMgaW4gcHJvcGVydHk6CisgICAgICAgIGlmIGMgPT0gJy4nIGFuZCBub3QgaW5fcXVvdGVzOgorICAgICAgICAgICAgc3BsaXR0YWJsZV9wcm9wZXJ0eSArPSAnXG4nCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBjID09ICciJzoKKyAgICAgICAgICAgIGluX3F1b3RlcyA9IG5vdCBpbl9xdW90ZXMKKyAgICAgICAgc3BsaXR0YWJsZV9wcm9wZXJ0eSArPSBjCisKKyAgICBzcGxpdF9wcm9wZXJ0aWVzID0gc3BsaXR0YWJsZV9wcm9wZXJ0eS5zcGxpdCgnXG4nKQorCisgICAgaWYgbGVuKHNwbGl0X3Byb3BlcnRpZXMpID4gMToKKyAgICAgICAgcmV0dXJuIHNwbGl0X3Byb3BlcnRpZXMKKworICAgIHJldHVybiBOb25lCisKKworZGVmIGZpbmRfaW5wdXRfbGluZV9ncm91cChzdWJzdHJpbmcsIGlucHV0X2xpbmVzKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gdGhlIElucHV0TGluZUdyb3VwIGNvbnRhaW5pbmcgdGhlIHNwZWNpZmllZCBzdWJzdHJpbmcuCisgICAgIiIiCisgICAgZm9yIGxpbmUgaW4gaW5wdXRfbGluZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgSW5wdXRMaW5lR3JvdXApOgorICAgICAgICAgICAgaWYgc3Vic3RyaW5nIGluIGxpbmUuZ3JvdXBbMF0ubGluZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZmluZF9pbnB1dF9saW5lKG5hbWUsIGlucHV0X2xpbmVzKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBpbnB1dCBsaW5lIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorICAgICIiIgorICAgIGZvciBsaW5lIGluIGlucHV0X2xpbmVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZUdyb3VwKToKKyAgICAgICAgICAgIGwgPSBmaW5kX2lucHV0X2xpbmUobmFtZSwgbGluZS5ncm91cCkKKyAgICAgICAgICAgIGlmIGw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGwKKworICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIElucHV0TGluZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5wcm9wc1sibmFtZSJdID09IG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgICAgICAgICAgaWYgbGluZS5wcm9wc1sibmFtZSJdICsgIl8iICsgbGluZS5wcm9wc1sibmFtZWFwcGVuZCJdID09IG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgcHJpbnRfdmFsdWVzKHR5cGUsIHZhbHVlc19saXN0KToKKyAgICAiIiIKKyAgICBQcmludCB0aGUgdmFsdWVzIGluIHRoZSBnaXZlbiBsaXN0IG9mIHZhbHVlcy4KKyAgICAiIiIKKyAgICBpZiB0eXBlID09ICJjaG9pY2VsaXN0IjoKKyAgICAgICAgZm9yIHZhbHVlIGluIHZhbHVlc19saXN0OgorICAgICAgICAgICAgcHJpbnQgIltcIiVzXCIsIFwiJXNcIl0iICUgKHZhbHVlWzBdLCB2YWx1ZVsxXSkKKyAgICBlbGlmIHR5cGUgPT0gImJvb2xlYW4iOgorICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzX2xpc3Q6CisgICAgICAgICAgICBwcmludCAiW1wiJXNcIiwgXCIlc1wiXSIgJSAodmFsdWVbMF0sIHZhbHVlWzFdKQorCisKK2RlZiB5b2N0b19sYXllcl9saXN0X3Byb3BlcnR5X3ZhbHVlcyhhcmNoLCBwcm9wZXJ0eSwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUsIGV4cGFuZF9jb21tb249VHJ1ZSk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBhIGdpdmVuIGlucHV0IHByb3BlcnR5LiAgSWYKKyAgICBwcm9wZXJ0aWVzX2ZpbGUgaXMgbm9uLW51bGwsIHdyaXRlIHRoZSBjb21wbGV0ZSBzZXQgb2YgcHJvcGVydGllcworICAgIGFzIGEgSlNPTiBvYmplY3QgY29ycmVzcG9uZGluZyB0byBhbiBhcnJheSBvZiBwb3NzaWJsZSB2YWx1ZXMuCisgICAgIiIiCisgICAgY29udGV4dCA9IGNyZWF0ZV9jb250ZXh0KCJ1bnVzZWQiLCBhcmNoLCBzY3JpcHRzX3BhdGgpCisgICAgY29udGV4dFsibmFtZSJdID0gcHJvcGVydHkKKworICAgIHRhcmdldF9maWxlcyA9IGV4cGFuZF90YXJnZXRzKGNvbnRleHQsICJ1bnVzZWQiLCBleHBhbmRfY29tbW9uKQorCisgICAgaW5wdXRfbGluZXMgPSBnYXRoZXJfaW5wdXRsaW5lcyh0YXJnZXRfZmlsZXMpCisKKyAgICBwcm9wZXJ0aWVzID0gZ2V0X3Byb3BlcnRpZXMoaW5wdXRfbGluZXMpCisKKyAgICBuZXN0ZWRfcHJvcGVydGllcyA9IHNwbGl0X25lc3RlZF9wcm9wZXJ0eShwcm9wZXJ0eSkKKyAgICBpZiBuZXN0ZWRfcHJvcGVydGllczoKKyAgICAgICAgIyBjdXJyZW50bHkgdGhlIG91dGVyIHByb3BlcnR5IG9mIGEgbmVzdGVkIHByb3BlcnR5IGFsd2F5cworICAgICAgICAjIGNvcnJlc3BvbmRzIHRvIGFuIGlucHV0IGxpbmUgZ3JvdXAKKyAgICAgICAgaW5wdXRfbGluZV9ncm91cCA9IGZpbmRfaW5wdXRfbGluZV9ncm91cChuZXN0ZWRfcHJvcGVydGllc1swXSwgaW5wdXRfbGluZXMpCisgICAgICAgIGlmIGlucHV0X2xpbmVfZ3JvdXA6CisgICAgICAgICAgICBpbnB1dF9saW5lc1s6XSA9IGlucHV0X2xpbmVfZ3JvdXAuZ3JvdXBbMTpdCisgICAgICAgICAgICAjIFRoZSBpbm5lciBwcm9wZXJ0eSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBuYW1lIGlzIHRoZQorICAgICAgICAgICAgIyBhY3R1YWwgcHJvcGVydHkgbmFtZSB3ZSB3YW50LCBzbyByZXNldCB0byB0aGF0CisgICAgICAgICAgICBwcm9wZXJ0eSA9IG5lc3RlZF9wcm9wZXJ0aWVzWzFdCisKKyAgICBpbnB1dF9saW5lID0gZmluZF9pbnB1dF9saW5lKHByb3BlcnR5LCBpbnB1dF9saW5lcykKKyAgICBpZiBub3QgaW5wdXRfbGluZToKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgdmFsdWVzIGZvciBwcm9wZXJ0eSAlcyIgJSBwcm9wZXJ0eQorICAgICAgICByZXR1cm4KKworICAgIHZhbHVlc19saXN0ID0gW10KKworICAgIHR5cGUgPSBpbnB1dF9saW5lLnByb3BzWyJ0eXBlIl0KKyAgICBpZiB0eXBlID09ICJib29sZWFuIjoKKyAgICAgICAgdmFsdWVzX2xpc3QuYXBwZW5kKFsieSIsICJuIl0pCisgICAgZWxpZiB0eXBlID09ICJjaG9pY2VsaXN0IiBvciB0eXBlID09ICJjaGVja2xpc3QiOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZW5fZm4gPSBpbnB1dF9saW5lLnByb3BzWyJnZW4iXQorICAgICAgICAgICAgaWYgbmVzdGVkX3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgY29udGV4dFsiZmlsZW5hbWUiXSA9IG5lc3RlZF9wcm9wZXJ0aWVzWzBdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0WyJicmFuY2hlc19iYXNlIl0gPSBpbnB1dF9saW5lLnByb3BzWyJicmFuY2hlc19iYXNlIl0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbImJyYW5jaGVzX2Jhc2UiXSA9IE5vbmUKKyAgICAgICAgICAgIHZhbHVlc19saXN0ID0gaW5wdXRfbGluZS5nZW5fY2hvaWNlc19saXN0KGNvbnRleHQsIEZhbHNlKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBmb3IgY2hvaWNlIGluIGlucHV0X2xpbmUuY2hvaWNlczoKKyAgICAgICAgICAgICAgICBjaG9pY2VwYWlyID0gW10KKyAgICAgICAgICAgICAgICBjaG9pY2VwYWlyLmFwcGVuZChjaG9pY2UudmFsKQorICAgICAgICAgICAgICAgIGNob2ljZXBhaXIuYXBwZW5kKGNob2ljZS5kZXNjKQorICAgICAgICAgICAgICAgIHZhbHVlc19saXN0LmFwcGVuZChjaG9pY2VwYWlyKQorCisgICAgaWYgcHJvcGVydGllc19maWxlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvZiA9IG9wZW4ocHJvcGVydGllc19maWxlLCAidyIpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IG9wZW4gcHJvcGVydGllcyBmaWxlICVzIGZvciB3cml0aW5nLCBleGl0aW5nIiAlIHByb3BlcnRpZXNfZmlsZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBqc29uLmR1bXAodmFsdWVzX2xpc3QsIG9mKQorICAgIAorICAgIHByaW50X3ZhbHVlcyh0eXBlLCB2YWx1ZXNfbGlzdCkKKworCitkZWYgeW9jdG9fYnNwX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpOgorICAgICIiIgorICAgIFByaW50IGF2YWlsYWJsZSBhcmNoaXRlY3R1cmVzLCBvciB0aGUgY29tcGxldGUgbGlzdCBvZiBwcm9wZXJ0aWVzCisgICAgZGVmaW5lZCBieSB0aGUgQlNQLCBvciB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBhIHBhcnRpY3VsYXIgQlNQCisgICAgcHJvcGVydHkuCisgICAgIiIiCisgICAgaWYgbGVuKGFyZ3MpIDwgMToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBhcmdzWzBdID09ICJrYXJjaCI6CisgICAgICAgIGxpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCisgICAgICAgIGJzcF9wYXRoID0gbGliX3BhdGggKyAnL2JzcCcKKyAgICAgICAgYXJjaF9wYXRoID0gYnNwX3BhdGggKyAnL3N1YnN0cmF0ZS90YXJnZXQvYXJjaCcKKyAgICAgICAgcHJpbnQgIkFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlOiIKKyAgICAgICAgZm9yIGFyY2ggaW4gb3MubGlzdGRpcihhcmNoX3BhdGgpOgorICAgICAgICAgICAgaWYgYXJjaCA9PSAiY29tbW9uIiBvciBhcmNoID09ICJsYXllciI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHByaW50ICIgICAgJXMiICUgYXJjaAorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGFyY2ggPSBhcmdzWzBdCisKKyAgICBpZiBsZW4oYXJncykgPCAyIG9yIGxlbihhcmdzKSA+IDM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbGVuKGFyZ3MpID09IDI6CisgICAgICAgIGlmIGFyZ3NbMV0gPT0gInByb3BlcnRpZXMiOgorICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0aWVzKGFyY2gsIHNjcmlwdHNfcGF0aCwgcHJvcGVydGllc19maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBsZW4oYXJncykgPT0gMzoKKyAgICAgICAgaWYgYXJnc1sxXSA9PSAicHJvcGVydHkiOgorICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF9wcm9wZXJ0eV92YWx1ZXMoYXJjaCwgYXJnc1syXSwgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHlvY3RvX2xheWVyX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBwcm9wZXJ0aWVzX2ZpbGUpOgorICAgICIiIgorICAgIFByaW50IHRoZSBjb21wbGV0ZSBsaXN0IG9mIGlucHV0IHByb3BlcnRpZXMgZGVmaW5lZCBieSB0aGUgbGF5ZXIsCisgICAgb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIGxheWVyIHByb3BlcnR5LgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA8IDE6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMSBvciBsZW4oYXJncykgPiAyOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICBpZiBhcmdzWzBdID09ICJwcm9wZXJ0aWVzIjoKKyAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfcHJvcGVydGllcygibGF5ZXIiLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGxlbihhcmdzKSA9PSAyOgorICAgICAgICBpZiBhcmdzWzBdID09ICJwcm9wZXJ0eSI6CisgICAgICAgICAgICB5b2N0b19sYXllcl9saXN0X3Byb3BlcnR5X3ZhbHVlcygibGF5ZXIiLCBhcmdzWzFdLCBzY3JpcHRzX3BhdGgsIHByb3BlcnRpZXNfZmlsZSwgRmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIG1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGxpbnV4LXlvY3RvIGJzcCBicmFuY2ggdG8gdXNlIHdpdGggdGhlIHNwZWNpZmllZAorICAgIGticmFuY2guICBUaGlzIGhhbmRsZXMgdGhlIC1zdGFuZGFyZCB2YXJpYW50cyBmb3IgMy40IGFuZCAzLjg7IHRoZQorICAgIG90aGVyIHZhcmlhbnRzIGRvbid0IG5lZWQgbWFwcGluZ3MuCisgICAgIiIiCisgICAgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6CisgICAgICAgIGticmFuY2ggPSBuZXdfa2JyYW5jaAorICAgIGVsc2U6CisgICAgICAgIGticmFuY2ggPSBleGlzdGluZ19rYnJhbmNoCisKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL2NvbW1vbi1wYy02NCIpOgorICAgICAgICByZXR1cm4gImJzcC9jb21tb24tcGMtNjQvY29tbW9uLXBjLTY0LXN0YW5kYXJkLnNjYyIKKyAgICBpZiBrYnJhbmNoLnN0YXJ0c3dpdGgoInN0YW5kYXJkL2NvbW1vbi1wYyIpOgorICAgICAgICByZXR1cm4gImJzcC9jb21tb24tcGMvY29tbW9uLXBjLXN0YW5kYXJkLnNjYyIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gImt0eXBlcy9zdGFuZGFyZC9zdGFuZGFyZC5zY2MiCisKKworZGVmIG1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgbGludXgteW9jdG8gYnNwIGJyYW5jaCB0byB1c2Ugd2l0aCB0aGUgc3BlY2lmaWVkCisgICAga2JyYW5jaC4gIFRoaXMgaGFuZGxlcyB0aGUgLXByZWVtcHQtcnQgdmFyaWFudHMgZm9yIDMuNCBhbmQgMy44OworICAgIHRoZSBvdGhlciB2YXJpYW50cyBkb24ndCBuZWVkIG1hcHBpbmdzLgorICAgICIiIgorICAgIGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOgorICAgICAgICBrYnJhbmNoID0gbmV3X2ticmFuY2gKKyAgICBlbHNlOgorICAgICAgICBrYnJhbmNoID0gZXhpc3Rpbmdfa2JyYW5jaAorCisgICAgaWYga2JyYW5jaC5zdGFydHN3aXRoKCJzdGFuZGFyZC9wcmVlbXB0LXJ0L2NvbW1vbi1wYy02NCIpOgorICAgICAgICByZXR1cm4gImJzcC9jb21tb24tcGMtNjQvY29tbW9uLXBjLTY0LXByZWVtcHQtcnQuc2NjIgorICAgIGlmIGticmFuY2guc3RhcnRzd2l0aCgic3RhbmRhcmQvcHJlZW1wdC1ydC9jb21tb24tcGMiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjL2NvbW1vbi1wYy1wcmVlbXB0LXJ0LnNjYyIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gImt0eXBlcy9wcmVlbXB0LXJ0L3ByZWVtcHQtcnQuc2NjIgorCisKK2RlZiBtYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGxpbnV4LXlvY3RvIGJzcCBicmFuY2ggdG8gdXNlIHdpdGggdGhlIHNwZWNpZmllZAorICAgIGticmFuY2guICBUaGlzIGhhbmRsZXMgdGhlIC10aW55IHZhcmlhbnRzIGZvciAzLjQgYW5kIDMuODsgdGhlCisgICAgb3RoZXIgdmFyaWFudHMgZG9uJ3QgbmVlZCBtYXBwaW5ncy4KKyAgICAiIiIKKyAgICBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjoKKyAgICAgICAga2JyYW5jaCA9IG5ld19rYnJhbmNoCisgICAgZWxzZToKKyAgICAgICAga2JyYW5jaCA9IGV4aXN0aW5nX2ticmFuY2gKKworICAgIGlmIGticmFuY2guc3RhcnRzd2l0aCgic3RhbmRhcmQvdGlueS9jb21tb24tcGMiKToKKyAgICAgICAgcmV0dXJuICJic3AvY29tbW9uLXBjL2NvbW1vbi1wYy10aW55LnNjYyIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gImt0eXBlcy90aW55L3Rpbnkuc2NjIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkgYi9zY3JpcHRzL2xpYi9ic3AvaGVscC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2NlMTAwCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL2hlbHAucHkKQEAgLTAsMCArMSwxMDQ0IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzb21lIGJhc2ljIGhlbHAgaW52b2NhdGlvbiBmdW5jdGlvbnMgYWxvbmcKKyMgd2l0aCB0aGUgYnVsayBvZiB0aGUgaGVscCB0b3BpYyB0ZXh0IGZvciB0aGUgWW9jdG8gQlNQIFRvb2xzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCisKKworZGVmIHN1YmNvbW1hbmRfZXJyb3IoYXJncyk6CisgICAgbG9nZ2luZy5pbmZvKCJpbnZhbGlkIHN1YmNvbW1hbmQgJXMiICUgYXJnc1swXSkKKworCitkZWYgZGlzcGxheV9oZWxwKHN1YmNvbW1hbmQsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IGhlbHAgZm9yIHN1YmNvbW1hbmQuCisgICAgIiIiCisgICAgaWYgc3ViY29tbWFuZCBub3QgaW4gc3ViY29tbWFuZHM6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaGVscCA9IHN1YmNvbW1hbmRzLmdldChzdWJjb21tYW5kLCBzdWJjb21tYW5kX2Vycm9yKVsyXQorICAgIHBhZ2VyID0gc3VicHJvY2Vzcy5Qb3BlbignbGVzcycsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICBwYWdlci5jb21tdW5pY2F0ZShoZWxwKQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgeW9jdG9faGVscChhcmdzLCB1c2FnZV9zdHIsIHN1YmNvbW1hbmRzKToKKyAgICAiIiIKKyAgICBTdWJjb21tYW5kIGhlbHAgZGlzcGF0Y2hlci4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPT0gMSBvciBub3QgZGlzcGxheV9oZWxwKGFyZ3NbMV0sIHN1YmNvbW1hbmRzKToKKyAgICAgICAgcHJpbnQodXNhZ2Vfc3RyKQorCisKK2RlZiBpbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIERpc3BhdGNoIHRvIHN1YmNvbW1hbmQgaGFuZGxlciBib3Jyb3dlZCBmcm9tIGNvbWJvLWxheWVyLgorICAgIFNob3VsZCB1c2UgYXJncGFyc2UsIGJ1dCBoYXMgdG8gd29yayBpbiAyLjYuCisgICAgIiIiCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIk5vIHN1YmNvbW1hbmQgc3BlY2lmaWVkLCBleGl0aW5nIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgIGVsaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgIHlvY3RvX2hlbHAoYXJncywgbWFpbl9jb21tYW5kX3VzYWdlLCBzdWJjb21tYW5kcykKKyAgICBlbGlmIGFyZ3NbMF0gbm90IGluIHN1YmNvbW1hbmRzOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJVbnN1cHBvcnRlZCBzdWJjb21tYW5kICVzLCBleGl0aW5nXG4iICUgKGFyZ3NbMF0pKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgZWxzZToKKyAgICAgICAgdXNhZ2UgPSBzdWJjb21tYW5kcy5nZXQoYXJnc1swXSwgc3ViY29tbWFuZF9lcnJvcilbMV0KKyAgICAgICAgc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzBdKGFyZ3NbMTpdLCB1c2FnZSkKKworCisjIworIyB5b2N0by1ic3AgaGVscCBhbmQgdXNhZ2Ugc3RyaW5ncworIyMKKworeW9jdG9fYnNwX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBjdXN0b21pemVkIFlvY3RvIEJTUCBsYXllci4KKworIHVzYWdlOiB5b2N0by1ic3AgWy0tdmVyc2lvbl0gWy0taGVscF0gQ09NTUFORCBbQVJHU10KKworIEN1cnJlbnQgJ3lvY3RvLWJzcCcgY29tbWFuZHMgYXJlOgorICAgIGNyZWF0ZSAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBZb2N0byBCU1AKKyAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIG9wdGlvbnMgYW5kIEJTUCBwcm9wZXJ0aWVzCisKKyBTZWUgJ3lvY3RvLWJzcCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKyIiIgorCit5b2N0b19ic3BfaGVscF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHlvY3RvLWJzcCBoZWxwIDxzdWJjb21tYW5kPgorCisgVGhpcyBjb21tYW5kIGRpc3BsYXlzIGRldGFpbGVkIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4KKyIiIgorCit5b2N0b19ic3BfY3JlYXRlX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisKKyB1c2FnZTogeW9jdG8tYnNwIGNyZWF0ZSA8YnNwLW5hbWU+IDxrYXJjaD4gWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCisgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBZb2N0byBCU1AgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLgorIFRoZSBuZXcgQlNQIHdpbGwgYmUgYSBuZXcgWW9jdG8gQlNQIGxheWVyIGNvbnRhaW5lZCBieSBkZWZhdWx0IHdpdGhpbgorIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcyAnbWV0YS1ic3AtbmFtZScuICBUaGUgLW8gb3B0aW9uCisgY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIEJTUCBsYXllciBpbiBhIGRpcmVjdG9yeSB3aXRoIGEgZGlmZmVyZW50CisgbmFtZSBhbmQgbG9jYXRpb24uCisKKyBUaGUgdmFsdWUgb2YgdGhlICdrYXJjaCcgcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNldCBvZiBmaWxlcyB0aGF0Cisgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBCU1AsIGFsb25nIHdpdGggdGhlIHNwZWNpZmljIHNldCBvZgorICdwcm9wZXJ0aWVzJyB0aGF0IHdpbGwgYmUgdXNlZCB0byBmaWxsIG91dCB0aGUgQlNQLXNwZWNpZmljIHBvcnRpb25zCisgb2YgdGhlIEJTUC4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSAna2FyY2gnIHBhcmFtdGVyIGNhbiBiZQorIGxpc3RlZCB2aWEgJ3lvY3RvLWJzcCBsaXN0IGthcmNoJy4KKworIE5PVEU6IE9uY2UgY3JlYXRlZCwgeW91IHNob3VsZCBhZGQgeW91ciBuZXcgbGF5ZXIgdG8geW91cgorIGJibGF5ZXJzLmNvbmYgZmlsZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgc3Vic2VxdWVudGx5IHNlZW4gYW5kCisgbW9kaWZpZWQgYnkgdGhlIHlvY3RvLWtlcm5lbCB0b29sLgorCisgU2VlICd5b2N0byBic3AgaGVscCBjcmVhdGUnIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucy4KKyIiIgorCit5b2N0b19ic3BfY3JlYXRlX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWJzcCBjcmVhdGUgLSBDcmVhdGUgYSBuZXcgWW9jdG8gQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8tYnNwIGNyZWF0ZSA8YnNwLW5hbWU+IDxrYXJjaD4gWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgWy1pIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLS1pbmZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBZb2N0byBCU1AgYmFzZWQgb24gdGhlIHNwZWNpZmllZAorICAgIHBhcmFtZXRlcnMuICBUaGUgbmV3IEJTUCB3aWxsIGJlIGEgbmV3IFlvY3RvIEJTUCBsYXllciBjb250YWluZWQKKyAgICBieSBkZWZhdWx0IHdpdGhpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMKKyAgICAnbWV0YS1ic3AtbmFtZScuICBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBCU1AgbGF5ZXIKKyAgICBpbiBhIGRpcmVjdG9yeSB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgVGhlIHZhbHVlIG9mIHRoZSAna2FyY2gnIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBzZXQgb2YgZmlsZXMKKyAgICB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgQlNQLCBhbG9uZyB3aXRoIHRoZSBzcGVjaWZpYyBzZXQgb2YKKyAgICAncHJvcGVydGllcycgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZmlsbCBvdXQgdGhlIEJTUC1zcGVjaWZpYworICAgIHBvcnRpb25zIG9mIHRoZSBCU1AuICBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgJ2thcmNoJyBwYXJhbXRlcgorICAgIGNhbiBiZSBsaXN0ZWQgdmlhICd5b2N0by1ic3AgbGlzdCBrYXJjaCcuCisKKyAgICBUaGUgQlNQLXNwZWNpZmljIHByb3BlcnRpZXMgdGhhdCBkZWZpbmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUKKyAgICB1c2VkIHRvIGdlbmVyYXRlIGEgcGFydGljdWxhciBCU1AgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUKKyAgICBjb21tYW5kLWxpbmUgdXNpbmcgdGhlIC1pIG9wdGlvbiBhbmQgc3VwcGx5aW5nIGEgSlNPTiBvYmplY3QKKyAgICBjb25zaXN0aW5nIG9mIHRoZSBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBuZWVkZWQgYnkgdGhlIEJTUC4KKworICAgIElmIHRoZSAtaSBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSB1c2VyIHdpbGwgYmUgaW50ZXJhY3RpdmVseQorICAgIHByb21wdGVkIGZvciBlYWNoIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0eSB2YWx1ZXMsIHdoaWNoIHdpbGwgdGhlbgorICAgIGJlIHVzZWQgYXMgdmFsdWVzIGZvciBCU1AgZ2VuZXJhdGlvbi4KKworICAgIFRoZSBzZXQgb2YgcHJvcGVydGllcyBhdmFpbGFibGUgZm9yIGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlIGNhbiBiZQorICAgIGxpc3RlZCB1c2luZyB0aGUgJ3lvY3RvLWJzcCBsaXN0JyBjb21tYW5kLgorCisgICAgU3BlY2lmeWluZyAtYyBjYXVzZXMgdGhlIFB5dGhvbiBjb2RlIGdlbmVyYXRlZCBhbmQgZXhlY3V0ZWQgdG8KKyAgICBjcmVhdGUgdGhlIEJTUCB0byBiZSBkdW1wZWQgdG8gdGhlICdic3BnZW4ub3V0JyBmaWxlIGluIHRoZQorICAgIGN1cnJlbnQgZGlyZWN0b3J5LCBhbmQgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisKKyAgICBOT1RFOiBPbmNlIGNyZWF0ZWQsIHlvdSBzaG91bGQgYWRkIHlvdXIgbmV3IGxheWVyIHRvIHlvdXIKKyAgICBiYmxheWVycy5jb25mIGZpbGUgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHN1YnNlcXVlbnRseSBzZWVuIGFuZAorICAgIG1vZGlmaWVkIGJ5IHRoZSB5b2N0by1rZXJuZWwgdG9vbC4KKworICAgIEZvciBleGFtcGxlLCBhc3N1bWluZyB5b3VyIHBva3kgcmVwbyBpcyBhdCAvcGF0aC90by9wb2t5LCB5b3VyIG5ldworICAgIEJTUCBsYXllciBpcyBhdCAvcGF0aC90by9wb2t5L21ldGEtbXlic3AsIGFuZCB5b3VyIGJ1aWxkIGRpcmVjdG9yeQorICAgIGlzIC9wYXRoL3RvL2J1aWxkOgorCisgICAgJCBnZWRpdCAvcGF0aC90by9idWlsZC9jb25mL2JibGF5ZXJzLmNvbmYKKworICAgIEJCTEFZRVJTID89ICIgXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YSBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhLXlvY3RvIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEtbXlic3AgXFwKKyAgICAgICIKKyIiIgorCit5b2N0b19ic3BfbGlzdF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHlvY3RvLWJzcCBsaXN0IGthcmNoCisgICAgICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydGllcworICAgICAgICAgICAgICAgIFstbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0tb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICAgICAgeW9jdG8tYnNwIGxpc3QgPGthcmNoPiBwcm9wZXJ0eSA8eHh4PgorICAgICAgICAgICAgICAgIFstbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0tb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBhCisgc3BlY2lmaWVkIG9wdGlvbiBvciBwcm9wZXJ0eSBuZWVkZWQgYnkgdGhlIEJTUCBjcmVhdGlvbiBwcm9jZXNzLgorCisgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZCBjYW4KKyBiZSBzcGVjaWZpZWQgZm9yIHRoZSAna2FyY2gnIHBhcmFtZXRlciB0byB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnCisgY29tbWFuZC4KKworIFRoZSBzZWNvbmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB0aGF0IGV4aXN0IGFuZAorIG11c3QgaGF2ZSB2YWx1ZXMgc3BlY2lmaWVkIGZvciB0aGVtIGluIHRoZSAneW9jdG8gYnNwIGNyZWF0ZScgY29tbWFuZAorIGZvciB0aGUgZ2l2ZW4gJ2thcmNoJy4KKworIFRoZSB0aGlyZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQgY2FuCisgYmUgc3BlY2lmaWVkIGZvciBhbnkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4KKyAna2FyY2gnIGluIHRoZSAneW9jdG8gYnNwIGNyZWF0ZScgY29tbWFuZC4KKworIFNlZSAneW9jdG8tYnNwIGhlbHAgbGlzdCcgZm9yIG1vcmUgZGV0YWlscy4KKyIiIgorCit5b2N0b19ic3BfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1ic3AgbGlzdCAtIExpc3QgYXZhaWxhYmxlIHZhbHVlcyBmb3Igb3B0aW9ucyBhbmQgQlNQIHByb3BlcnRpZXMKKworU1lOT1BTSVMKKyAgICB5b2N0by1ic3AgbGlzdCBrYXJjaAorICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydGllcworICAgICAgICAgICAgWy0tbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC1vdXRmaWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgIHlvY3RvLWJzcCBsaXN0IDxrYXJjaD4gcHJvcGVydHkgPHh4eD4KKyAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgZW51bWVyYXRlcyB0aGUgY29tcGxldGUgc2V0IG9mIHBvc3NpYmxlIHZhbHVlcyBmb3IgYQorICAgIHNwZWNpZmllZCBvcHRpb24gb3IgcHJvcGVydHkgbmVlZGVkIGJ5IHRoZSBCU1AgY3JlYXRpb24gcHJvY2Vzcy4KKworICAgIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdGhhdCBleGlzdCBhbmQKKyAgICBjYW4gYmUgc3BlY2lmaWVkIGZvciB0aGUgJ2thcmNoJyBwYXJhbWV0ZXIgdG8gdGhlICd5b2N0byBic3AKKyAgICBjcmVhdGUnIGNvbW1hbmQuICBFeGFtcGxlIG91dHB1dCBmb3IgdGhlICdsaXN0IGthcmNoJyBjb21tYW5kOgorCisgICAgJCB5b2N0by1ic3AgbGlzdCBrYXJjaAorICAgIEFyY2hpdGVjdHVyZXMgYXZhaWxhYmxlOgorICAgICAgICBhcm0KKyAgICAgICAgcG93ZXJwYworICAgICAgICBpMzg2CisgICAgICAgIG1pcHMKKyAgICAgICAgbWlwczY0CisgICAgICAgIHg4Nl82NAorICAgICAgICBxZW11CisKKyAgICBUaGUgc2Vjb25kIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgdGhhdCBleGlzdAorICAgIGFuZCBtdXN0IGhhdmUgdmFsdWVzIHNwZWNpZmllZCBmb3IgdGhlbSBpbiB0aGUgJ3lvY3RvIGJzcCBjcmVhdGUnCisgICAgY29tbWFuZCBmb3IgdGhlIGdpdmVuICdrYXJjaCcuICBUaGlzIGNvbW1hbmQgaXMgbWFpbmx5IG1lYW50IHRvCisgICAgYWxsb3cgdGhlIGRldmVsb3BtZW50IHVzZXIgaW50ZXJmYWNlIGFsdGVybmF0aXZlcyB0byB0aGUgZGVmYXVsdAorICAgIHRleHQtYmFzZWQgcHJvbXB0aW5nIGludGVyZmFjZS4gIElmIHRoZSAtbyBvcHRpb24gaXMgc3BlY2lmaWVkLAorICAgIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMsIGluIGFkZGl0aW9uIHRvIGJlaW5nIGRpc3BsYXllZCwgd2lsbCBiZQorICAgIHdyaXR0ZW4gdG8gdGhlIHNwZWNpZmllZCBmaWxlIGFzIGEgSlNPTiBvYmplY3QuICBJbiB0aGlzIGNhc2UsIHRoZQorICAgIG9iamVjdCB3aWxsIGNvbnNpc3Qgb2YgdGhlIHNldCBvZiBuYW1lOnZhbHVlIHBhaXJzIGNvcnJlc3BvbmRpbmcKKyAgICB0byB0aGUgKHBvc3NpYmx5IG5lc3RlZCkgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlCisgICAgaW5wdXQgc3RhdGVtZW50cyB1c2VkIGJ5IHRoZSBCU1AuICBTb21lIGV4YW1wbGUgb3V0cHV0IGZvciB0aGUKKyAgICAnbGlzdCBwcm9wZXJ0aWVzJyBjb21tYW5kOgorCisgICAgJCB5b2N0by1ic3AgbGlzdCBhcm0gcHJvcGVydGllcworICAgICJ0b3VjaHNjcmVlbiIgOiB7CisgICAgICAgICJtc2ciIDogRG9lcyB5b3VyIEJTUCBoYXZlIGEgdG91Y2hzY3JlZW4/ICh5L04pCisgICAgICAgICJkZWZhdWx0IiA6IG4KKyAgICAgICAgInR5cGUiIDogYm9vbGVhbgorICAgIH0KKyAgICAidWJvb3RfbG9hZGFkZHJlc3MiIDogeworICAgICAgICAibXNnIiA6IFBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIFVCT09UX0xPQURBRERSRVNTLgorICAgICAgICAiZGVmYXVsdCIgOiAweDgwMDA4MDAwCisgICAgICAgICJ0eXBlIiA6IGVkaXQKKyAgICAgICAgInByaW8iIDogNDAKKyAgICB9CisgICAgImtlcm5lbF9jaG9pY2UiIDogeworICAgICAgICAicHJpbyIgOiAxMAorICAgICAgICAiZGVmYXVsdCIgOiBsaW51eC15b2N0b18zLjIKKyAgICAgICAgImRlcGVuZHMtb24iIDogdXNlX2RlZmF1bHRfa2VybmVsCisgICAgICAgICJkZXBlbmRzLW9uLXZhbCIgOiBuCisgICAgICAgICJtc2ciIDogUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUCA9PgorICAgICAgICAidHlwZSIgOiBjaG9pY2VsaXN0CisgICAgICAgICJnZW4iIDogYnNwLmtlcm5lbC5rZXJuZWxzCisgICAgfQorICAgICJpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjAiOiIgOiB7CisgICAgICAgICJiYXNlX2ticmFuY2hfbGludXhfeW9jdG9fM18wIiA6IHsKKyAgICAgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICAgICAiZGVmYXVsdCIgOiB5b2N0by9zdGFuZGFyZAorICAgICAgICAgICAgImRlcGVuZHMtb24iIDogbmV3X2ticmFuY2hfbGludXhfeW9jdG9fM18wCisgICAgICAgICAgICAiZGVwZW5kcy1vbi12YWwiIDogeQorICAgICAgICAgICAgIm1zZyIgOiBQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbiA9PgorICAgICAgICAgICAgInR5cGUiIDogY2hvaWNlbGlzdAorICAgICAgICAgICAgImdlbiIgOiBic3Aua2VybmVsLmFsbF9icmFuY2hlcworICAgIH0KKyAgICAuCisgICAgLgorICAgIC4KKworICAgIEVhY2ggZW50cnkgaW4gdGhlIG91dHB1dCBjb25zaXN0cyBvZiB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudAorICAgIGUuZy4gInRvdWNoc2NyZWVuIiwgZm9sbG93ZWQgYnkgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBmb3IgdGhhdAorICAgIGVsZW1lbnQgZW5jbG9zZWQgaW4gYnJhY2VzLiAgVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgcHJvdmlkZQorICAgIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgY29tcGxldGUgdXNlciBpbnRlcmZhY2Ugd2l0aC4KKyAgICBUd28gZmVhdHVyZXMgb2YgdGhlIHNjaGVtZSBwcm92aWRlIGZvciBjb25kaXRpb25hbCBpbnB1dC4gIEZpcnN0LAorICAgIGlmIGEgUHl0aG9uICJpZiIgc3RhdGVtZW50IGFwcGVhcnMgaW4gcGxhY2Ugb2YgYW4gaW5wdXQgZWxlbWVudAorICAgIG5hbWUsIHRoZSBzZXQgb2YgZW5jbG9zZWQgaW5wdXQgZWxlbWVudHMgYXBwbHkgYW5kIHNob3VsZCBiZQorICAgIHByZXNlbnRlZCB0byB0aGUgdXNlciBvbmx5IGlmIHRoZSAnaWYnIHN0YXRlbWVudCBldmFsdWF0ZXMgdG8KKyAgICB0cnVlLiAgVGhlIHRlc3QgaW4gdGhlIGlmIHN0YXRlbWVudCB3aWxsIGFsd2F5cyByZWZlcmVuY2UgYW5vdGhlcgorICAgIGlucHV0IGVsZW1lbnQgaW4gdGhlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgYmVpbmcKKyAgICB0ZXN0ZWQgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlciBiZWZvcmUgdGhlIGVsZW1lbnRzCisgICAgZW5jbG9zZWQgYnkgdGhlIGlmIGJsb2NrLiAgU2Vjb25kbHksIGluIGEgc2ltaWxhciB3YXksIHNvbWUKKyAgICBlbGVtZW50cyBjb250YWluICJkZXBlbmRzLW9uIiBhbmQgZGVwZW5kcy1vbi12YWwiIHRhZ3MsIHdoaWNoIG1lYW4KKyAgICB0aGF0IHRoZSBhZmZlY3RlZCBpbnB1dCBlbGVtZW50IHNob3VsZCBvbmx5IGJlIHByZXNlbnRlZCB0byB0aGUKKyAgICB1c2VyIGlmIHRoZSBlbGVtZW50IGl0IGRlcGVuZHMgb24gaGFzIGFscmVhZHkgYmVlbiBwcmVzZW50ZWQgdG8KKyAgICB0aGUgdXNlciBhbmQgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBzcGVjaWZpZWQgdmFsdWUgZm9yIHRoYXQKKyAgICBlbGVtZW50LgorCisgICAgVGhlIHRoaXJkIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZAorICAgIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGFueSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbgorICAgICdrYXJjaCcgaW4gdGhlICd5b2N0byBic3AgY3JlYXRlJyBjb21tYW5kLiAgSWYgdGhlIC1vIG9wdGlvbiBpcworICAgIHNwZWNpZmllZCwgdGhlIGxpc3Qgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIGluIGFkZGl0aW9uCisgICAgdG8gYmVpbmcgZGlzcGxheWVkLCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHNwZWNpZmllZCBmaWxlIGFzIGEKKyAgICBKU09OIG9iamVjdC4gIEluIHRoaXMgY2FzZSwgdGhlIG9iamVjdCB3aWxsIGNvbnNpc3Qgb2YgdGhlIHNldCBvZgorICAgIG5hbWU6dmFsdWUgcGFpcnMgY29ycmVzcG9uZGluZyB0byB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzCisgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eS4KKworICAgICQgeW9jdG8tYnNwIGxpc3QgaTM4NiBwcm9wZXJ0eSB4c2VydmVyX2Nob2ljZQorICAgICAgICBbInhzZXJ2ZXJfdmVzYSIsICJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCJdCisgICAgICAgIFsieHNlcnZlcl9pOTE1IiwgImk5MTUgeHNlcnZlciBzdXBwb3J0Il0KKworICAgICQgeW9jdG8tYnNwIGxpc3QgYXJtIHByb3BlcnR5IGJhc2Vfa2JyYW5jaF9saW51eF95b2N0b18zXzAKKyAgICAgICAgR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMC4uLgorICAgICAgICBbInlvY3RvL2Jhc2UiLCAieW9jdG8vYmFzZSJdCisgICAgICAgIFsieW9jdG8vZWcyMHQiLCAieW9jdG8vZWcyMHQiXQorICAgICAgICBbInlvY3RvL2dtYTUwMCIsICJ5b2N0by9nbWE1MDAiXQorICAgICAgICBbInlvY3RvL3B2ciIsICJ5b2N0by9wdnIiXQorICAgICAgICBbInlvY3RvL3N0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiwgInlvY3RvL3N0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIl0KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9iYXNlIiwgInlvY3RvL3N0YW5kYXJkL2Jhc2UiXQorICAgICAgICBbInlvY3RvL3N0YW5kYXJkL2NlZGFydHJhaWwiLCAieW9jdG8vc3RhbmRhcmQvY2VkYXJ0cmFpbCJdCisgICAgICAgIC4KKyAgICAgICAgLgorICAgICAgICAuCisgICAgICAgIFsieW9jdG8vc3RhbmRhcmQvcWVtdS1wcGMzMiIsICJ5b2N0by9zdGFuZGFyZC9xZW11LXBwYzMyIl0KKyAgICAgICAgWyJ5b2N0by9zdGFuZGFyZC9yb3V0ZXJzdGF0aW9ucHJvIiwgInlvY3RvL3N0YW5kYXJkL3JvdXRlcnN0YXRpb25wcm8iXQorCisgICAgVGhlIHRoaXJkIGZvcm0gYXMgd2VsbCBpcyBtZWFudCBtYWlubHkgZm9yIGRldmVsb3BlcnMgb2YKKyAgICBhbHRlcm5hdGl2ZSBpbnRlcmZhY2VzIC0gaXQgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gZmV0Y2ggdGhlCisgICAgcG9zc2libGUgdmFsdWVzIGZvciBhIGdpdmVuIGlucHV0IGVsZW1lbnQgb24tZGVtYW5kLiAgVGhpcworICAgIG9uLWRlbWFuZCBjYXBhYmlsaXR5IGlzIGVzcGVjaWFsbHkgdmFsdWFibGUgZm9yIGVsZW1lbnRzIHRoYXQKKyAgICByZXF1aXJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlIHJlbW90ZSBvcGVyYXRpb25zIHRvIGZ1bGZpbGwsIHN1Y2ggYXMKKyAgICB0aGUgZXhhbXBsZSB0aGF0IHJldHVybnMgdGhlIHNldCBvZiBicmFuY2hlcyBhdmFpbGFibGUgaW4gYSByZW1vdGUKKyAgICBnaXQgdHJlZSBhYm92ZS4KKworIiIiCisKKyMjCisjIHlvY3RvLWtlcm5lbCBoZWxwIGFuZCB1c2FnZSBzdHJpbmdzCisjIworCit5b2N0b19rZXJuZWxfdXNhZ2UgPSAiIiIKKworIE1vZGlmeSBhbmQgbGlzdCBZb2N0byBCU1Aga2VybmVsIGNvbmZpZyBpdGVtcyBhbmQgcGF0Y2hlcy4KKworIHVzYWdlOiB5b2N0by1rZXJuZWwgWy0tdmVyc2lvbl0gWy0taGVscF0gQ09NTUFORCBbQVJHU10KKworIEN1cnJlbnQgJ3lvY3RvLWtlcm5lbCcgY29tbWFuZHMgYXJlOgorICAgY29uZmlnIGxpc3QgICAgICAgTGlzdCB0aGUgbW9kaWZpYWJsZSBzZXQgb2YgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisgICBjb25maWcgYWRkICAgICAgICBBZGQgb3IgbW9kaWZ5IGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorICAgY29uZmlnIHJtICAgICAgICAgUmVtb3ZlIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZyb20gYSBCU1AKKyAgIHBhdGNoIGxpc3QgICAgICAgIExpc3QgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIGEgQlNQCisgICBwYXRjaCBhZGQgICAgICAgICBQYXRjaCB0aGUgWW9jdG8ga2VybmVsIGZvciBhIEJTUAorICAgcGF0Y2ggcm0gICAgICAgICAgUmVtb3ZlIHBhdGNoZXMgZnJvbSBhIEJTUAorICAgZmVhdHVyZSBsaXN0ICAgICAgTGlzdCB0aGUgZmVhdHVyZXMgdXNlZCBieSBhIEJTUAorICAgZmVhdHVyZSBhZGQgICAgICAgSGF2ZSBhIEJTUCB1c2UgYSBmZWF0dXJlCisgICBmZWF0dXJlIHJtICAgICAgICBIYXZlIGEgQlNQIHN0b3AgdXNpbmcgYSBmZWF0dXJlCisgICBmZWF0dXJlcyBsaXN0ICAgICBMaXN0IHRoZSBmZWF0dXJlcyBhdmFpbGFibGUgdG8gQlNQcworICAgZmVhdHVyZSBkZXNjcmliZSAgRGVzY3JpYmUgYSBwYXJ0aWN1bGFyIGZlYXR1cmUKKyAgIGZlYXR1cmUgY3JlYXRlICAgIENyZWF0ZSBhIG5ldyBCU1AtbG9jYWwgZmVhdHVyZQorICAgZmVhdHVyZSBkZXN0cm95ICAgUmVtb3ZlIGEgQlNQLWxvY2FsIGZlYXR1cmUKKworIFNlZSAneW9jdG8ta2VybmVsIGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLgorCisiIiIKKworCit5b2N0b19rZXJuZWxfaGVscF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBoZWxwIDxzdWJjb21tYW5kPgorCisgVGhpcyBjb21tYW5kIGRpc3BsYXlzIGRldGFpbGVkIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4KKyIiIgorCit5b2N0b19rZXJuZWxfY29uZmlnX2xpc3RfdXNhZ2UgPSAiIiIKKworIExpc3QgdGhlIG1vZGlmaWFibGUgc2V0IG9mIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBjb25maWcgbGlzdCA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlICdtb2RpZmlhYmxlJyBjb25maWcgaXRlbXMgZm9yIGEgQlNQIGkuZS4gdGhlCisgaXRlbXMgd2hpY2ggYXJlIGVsaWdpYmxlIGZvciBtb2RpZmljYXRpb24gb3IgcmVtb3ZhbCBieSBvdGhlcgorIHlvY3RvLWtlcm5lbCBjb21tYW5kcy4KKworICdtb2RpZmlhYmxlJyBjb25maWcgaXRlbXMgYXJlIHRoZSBjb25maWcgaXRlbXMgY29udGFpbmVkIGEgQlNQJ3MKKyB1c2VyLWNvbmZpZy5jZmcgYmFzZSBjb25maWcuCisiIiIKKworCit5b2N0b19rZXJuZWxfY29uZmlnX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGNvbmZpZyBsaXN0IC0gTGlzdCB0aGUgbW9kaWZpYWJsZSBzZXQgb2YgYmFyZSBrZXJuZWwKKyAgICBjb25maWcgb3B0aW9ucyBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIGxpc3QgPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgJ21vZGlmaWFibGUnIGNvbmZpZyBpdGVtcyBmb3IgYSBCU1AKKyAgICBpLmUuIHRoZSBpdGVtcyB3aGljaCBhcmUgZWxpZ2libGUgZm9yIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsIGJ5CisgICAgb3RoZXIgeW9jdG8ta2VybmVsIGNvbW1hbmRzLgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfdXNhZ2UgPSAiIiIKKworIEFkZCBvciBtb2RpZnkgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgZm9yIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGNvbmZpZyBhZGQgPGJzcC1uYW1lPiBbPENPTkZJR19YWFg9eD4gLi4uXQorCisgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgQ09ORklHX1hYWD14IGl0ZW1zIHRvIGEgQlNQJ3MgdXNlci1jb25maWcuY2ZnCisgYmFzZSBjb25maWcuCisiIiIKKworCit5b2N0b19rZXJuZWxfY29uZmlnX2FkZF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIGFkZCAtIEFkZCBvciBtb2RpZnkgYmFyZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMKKyAgICBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIGFkZCA8YnNwLW5hbWU+IFs8Q09ORklHX1hYWD14PiAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgQ09ORklHX1hYWD14IGl0ZW1zIHRvIGEgQlNQJ3MKKyAgICBmb28uY2ZnIGJhc2UgY29uZmlnLgorCisgICAgTk9URTogSXQncyB1cCB0byB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGNvbmZpZworICAgIG9wdGlvbnMgYmVpbmcgYWRkZWQgbWFrZSBzZW5zZSBvciBub3QgLSB0aGlzIGNvbW1hbmQgZG9lcyBubworICAgIHNhbml0eSBjaGVja2luZyBvciB2ZXJpZmljYXRpb24gb2YgYW55IGtpbmQgdG8gZW5zdXJlIHRoYXQgYQorICAgIGNvbmZpZyBvcHRpb24gcmVhbGx5IG1ha2VzIHNlbnNlIGFuZCB3aWxsIGFjdHVhbGx5IGJlIHNldCBpbiBpbgorICAgIHRoZSBmaW5hbCBjb25maWcuICBGb3IgZXhhbXBsZSwgaWYgYSBjb25maWcgb3B0aW9uIGRlcGVuZHMgb24KKyAgICBvdGhlciBjb25maWcgb3B0aW9ucywgaXQgd2lsbCBiZSB0dXJuZWQgb2ZmIGJ5IGtjb25maWcgaWYgdGhlCisgICAgb3RoZXIgb3B0aW9ucyBhcmVuJ3Qgc2V0IGNvcnJlY3RseS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9jb25maWdfcm1fdXNhZ2UgPSAiIiIKKworIFJlbW92ZSBiYXJlIGtlcm5lbCBjb25maWcgb3B0aW9ucyBmcm9tIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGNvbmZpZyBybSA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgcmVtb3ZlcyAodHVybnMgb2ZmKSBvbmUgb3IgbW9yZSBDT05GSUdfWFhYIGl0ZW1zIGZyb20gYQorIEJTUCdzIHVzZXItY29uZmlnLmNmZyBiYXNlIGNvbmZpZy4KKworIFRoZSBzZXQgb2YgY29uZmlnIGl0ZW1zIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYQorIEJTUCBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgaXRlbXMgdG8gcmVtb3ZlLgorIiIiCisKKworeW9jdG9fa2VybmVsX2NvbmZpZ19ybV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgY29uZmlnIHJtIC0gUmVtb3ZlIGJhcmUga2VybmVsIGNvbmZpZyBvcHRpb25zIGZyb20gYQorICAgIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBjb25maWcgcm0gPGJzcC1uYW1lPgorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCByZW1vdmVzICh0dXJucyBvZmYpIG9uZSBvciBtb3JlIENPTkZJR19YWFggaXRlbXMgZnJvbSBhCisgICAgQlNQJ3MgdXNlci1jb25maWcuY2ZnIGJhc2UgY29uZmlnLgorCisgICAgVGhlIHNldCBvZiBjb25maWcgaXRlbXMgYXZhaWxhYmxlIHRvIGJlIHJlbW92ZWQgYnkgdGhpcyBjb21tYW5kCisgICAgZm9yIGEgQlNQIGlzIGxpc3RlZCBhbmQgdGhlIHVzZXIgcHJvbXB0ZWQgZm9yIHRoZSBzcGVjaWZpYyBpdGVtcworICAgIHRvIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IHRoZSBwYXRjaGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUga2VybmVsIGZvciBhIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBwYXRjaCBsaXN0IDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgcGF0Y2hlcyBhc3NvY2lhdGVkIHdpdGggYSBCU1AuCisKKyBOT1RFOiB0aGlzIG9ubHkgYXBwbGllcyB0byBwYXRjaGVzIGxpc3RlZCBpbiB0aGUga2VybmVsIHJlY2lwZSdzCisgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBsaXN0IC0gTGlzdCB0aGUgcGF0Y2hlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGtlcm5lbAorICAgIGZvciBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBsaXN0IDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIHBhdGNoZXMgYXNzb2NpYXRlZCB3aXRoIGEgQlNQLgorCisgICAgTk9URTogdGhpcyBvbmx5IGFwcGxpZXMgdG8gcGF0Y2hlcyBsaXN0ZWQgaW4gdGhlIGtlcm5lbCByZWNpcGUncworICAgIHVzZXItcGF0Y2hlcy5zY2MgZmlsZSAoYW5kIGN1cnJlbnRseSByZXBlYXRlZCBpbiBpdHMgU1JDX1VSSSkuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3VzYWdlID0gIiIiCisKKyBQYXRjaCB0aGUgWW9jdG8ga2VybmVsIGZvciBhIHNwZWNpZmljIEJTUAorCisgdXNhZ2U6IHlvY3RvLWtlcm5lbCBwYXRjaCBhZGQgPGJzcC1uYW1lPiBbPFBBVENIPiAuLi5dCisKKyBUaGlzIGNvbW1hbmQgYWRkcyBvbmUgb3IgbW9yZSBwYXRjaGVzIHRvIGEgQlNQJ3MgbWFjaGluZSBicmFuY2guICBUaGUKKyBwYXRjaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBCU1AncyBsaW51eC15b2N0byBrZXJuZWwgdXNlci1wYXRjaGVzLnNjYworIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzIFNSQ19VUkkpIGFuZCB3aWxsIGJlIGd1YXJhbnRlZWQKKyB0byBiZSBhcHBsaWVkIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCisiIiIKKworCit5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBhZGQgLSBQYXRjaCB0aGUgWW9jdG8ga2VybmVsIGZvciBhIHNwZWNpZmljIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBwYXRjaCBhZGQgPGJzcC1uYW1lPiBbPFBBVENIPiAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgcGF0Y2hlcyB0byBhIEJTUCdzIG1hY2hpbmUgYnJhbmNoLgorICAgIFRoZSBwYXRjaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBCU1AncyBsaW51eC15b2N0byBrZXJuZWwKKyAgICB1c2VyLXBhdGNoZXMuc2NjIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzIFNSQ19VUkkpIGFuZAorICAgIHdpbGwgYmUgZ3VhcmFudGVlZCB0byBiZSBhcHBsaWVkIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCisKKyAgICBOT1RFOiBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgcGF0Y2hlcworICAgIGJlaW5nIGFkZGVkIG1ha2VzIHNlbnNlIG9yIG5vdCAtIHRoaXMgY29tbWFuZCBkb2VzIG5vIHNhbml0eQorICAgIGNoZWNraW5nIG9yIHZlcmlmaWNhdGlvbiBvZiBhbnkga2luZCB0byBlbnN1cmUgdGhhdCBhIHBhdGNoIGNhbgorICAgIGFjdHVhbGx5IGJlIGFwcGxpZWQgdG8gdGhlIEJTUCdzIGtlcm5lbCBicmFuY2g7IGl0J3MgYXNzdW1lZCB0aGF0CisgICAgdGhlIHVzZXIgaGFzIGFscmVhZHkgZG9uZSB0aGF0LgorIiIiCisKKworeW9jdG9fa2VybmVsX3BhdGNoX3JtX3VzYWdlID0gIiIiCisKKyBSZW1vdmUgYSBwYXRjaCBmcm9tIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgc3BlY2lmaWMgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIHBhdGNoIHJtIDxic3AtbmFtZT4KKworIFRoaXMgY29tbWFuZCByZW1vdmVzIG9uZSBvciBtb3JlIHBhdGNoZXMgZnJvbSBhIEJTUCdzIG1hY2hpbmUgYnJhbmNoLgorIFRoZSBwYXRjaCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgQlNQJ3MgbGludXgteW9jdG8ga2VybmVsCisgdXNlci1wYXRjaGVzLnNjYyBmaWxlIChhbmQgY3VycmVudGx5IHJlcGVhdGVkIGluIGl0cyBTUkNfVVJJKSBhbmQKKyBrZXJuZWwgU1JDX1VSSSBkaXIuCisKKyBUaGUgc2V0IG9mIHBhdGNoZXMgYXZhaWxhYmxlIHRvIGJlIHJlbW92ZWQgYnkgdGhpcyBjb21tYW5kIGZvciBhIEJTUAorIGlzIGxpc3RlZCBhbmQgdGhlIHVzZXIgcHJvbXB0ZWQgZm9yIHRoZSBzcGVjaWZpYyBwYXRjaGVzIHRvIHJlbW92ZS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9wYXRjaF9ybV9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgcGF0Y2ggcm0gLSBSZW1vdmUgYSBwYXRjaCBmcm9tIHRoZSBZb2N0byBrZXJuZWwgZm9yIGEgc3BlY2lmaWMgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIHBhdGNoIHJtIDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgcmVtb3ZlcyBvbmUgb3IgbW9yZSBwYXRjaGVzIGZyb20gYSBCU1AncyBtYWNoaW5lCisgICAgYnJhbmNoLiAgVGhlIHBhdGNoIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBCU1AncyBsaW51eC15b2N0bworICAgIGtlcm5lbCB1c2VyLXBhdGNoZXMuc2NjIGZpbGUgKGFuZCBjdXJyZW50bHkgcmVwZWF0ZWQgaW4gaXRzCisgICAgU1JDX1VSSSkuCisKKyAgICBUaGUgc2V0IG9mIHBhdGNoZXMgYXZhaWxhYmxlIHRvIGJlIHJlbW92ZWQgYnkgdGhpcyBjb21tYW5kIGZvciBhCisgICAgQlNQIGlzIGxpc3RlZCBhbmQgdGhlIHVzZXIgcHJvbXB0ZWQgZm9yIHRoZSBzcGVjaWZpYyBwYXRjaGVzIHRvCisgICAgcmVtb3ZlLgorIiIiCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3RfdXNhZ2UgPSAiIiIKKworIExpc3QgdGhlIEJTUCBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyB1c2VkIGJ5IGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgbGlzdCA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgbGlzdHMgdGhlIGZlYXR1cmVzIGJlaW5nIHVzZWQgYnkgYSBCU1AgaS5lLiB0aGUgZmVhdHVyZXMKKyB3aGljaCBhcmUgZWxpZ2libGUgZm9yIG1vZGlmaWNhdGlvbiBvciByZW1vdmFsIGJ5IG90aGVyIHlvY3RvLWtlcm5lbAorIGNvbW1hbmRzLgorCisgJ21vZGlmaWFibGUnIGZlYXR1cmVzIGFyZSB0aGUgZmVhdHVyZXMgbGlzdGVkIGluIGEgQlNQJ3MKKyB1c2VyLWZlYXR1cmVzLnNjYyBmaWxlLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBsaXN0IC0gTGlzdCB0aGUgbW9kaWZpYWJsZSBzZXQgb2YgZmVhdHVyZXMKKyAgICBiZWluZyB1c2VkIGJ5IGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgbGlzdCA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSAnbW9kaWZpYWJsZScgZmVhdHVyZXMgYmVpbmcgdXNlZCBieSBhIEJTUAorICAgIGkuZS4gdGhlIGZlYXR1cmVzIHdoaWNoIGFyZSBlbGlnaWJsZSBmb3IgbW9kaWZpY2F0aW9uIG9yIHJlbW92YWwKKyAgICBieSBvdGhlciB5b2N0by1rZXJuZWwgY29tbWFuZHMuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfdXNhZ2UgPSAiIiIKKworIEFkZCB0byBvciBtb2RpZnkgdGhlIGxpc3Qgb2YgZmVhdHVyZXMgYmVpbmcgdXNlZCBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZSBhZGQgPGJzcC1uYW1lPiBbL3h4eHgveXl5eS9mZWF0dXJlLnNjYyAuLi5dCisKKyBUaGlzIGNvbW1hbmQgYWRkcyBvbmUgb3IgbW9yZSBmZWF0dXJlIGl0ZW1zIHRvIGEgQlNQJ3Mga2VybmVsCisgdXNlci1mZWF0dXJlcy5zY2MgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCB0byBtYW5hZ2UgZmVhdHVyZXMgaW4KKyBhIHlvY3RvLWJzcC1nZW5lcmF0ZWQgQlNQLiAgRmVhdHVyZXMgdG8gYmUgYWRkZWQgbXVzdCBiZSBzcGVjaWZpZWQgYXMKKyBmdWxseS1xdWFsaWZpZWQgZmVhdHVyZSBuYW1lcy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBhZGQgLSBBZGQgdG8gb3IgbW9kaWZ5IHRoZSBsaXN0IG9mIGZlYXR1cmVzCisgICAgYmVpbmcgdXNlZCBmb3IgYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBhZGQgPGJzcC1uYW1lPiBbL3h4eHgveXl5eS9mZWF0dXJlLnNjYyAuLi5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGFkZHMgb25lIG9yIG1vcmUgZmVhdHVyZSBpdGVtcyB0byBhIEJTUCdzCisgICAgdXNlci1mZWF0dXJlcy5zY2MgZmlsZSwgd2hpY2ggaXMgdGhlIGZpbGUgdXNlZCB0byBtYW5hZ2UgZmVhdHVyZXMKKyAgICBpbiBhIHlvY3RvLWJzcC1nZW5lcmF0ZWQgQlNQLiAgRmVhdHVyZXMgdG8gYmUgYWRkZWQgbXVzdCBiZQorICAgIHNwZWNpZmllZCBhcyBmdWxseS1xdWFsaWZpZWQgZmVhdHVyZSBuYW1lcy4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX3VzYWdlID0gIiIiCisKKyBSZW1vdmUgYSBmZWF0dXJlIGZyb20gdGhlIGxpc3Qgb2YgZmVhdHVyZXMgYmVpbmcgdXNlZCBmb3IgYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZSBybSA8YnNwLW5hbWU+CisKKyBUaGlzIGNvbW1hbmQgcmVtb3ZlcyAodHVybnMgb2ZmKSBvbmUgb3IgbW9yZSBmZWF0dXJlcyBmcm9tIGEgQlNQJ3MKKyB1c2VyLWZlYXR1cmVzLnNjYyBmaWxlLCB3aGljaCBpcyB0aGUgZmlsZSB1c2VkIHRvIG1hbmFnZSBmZWF0dXJlcyBpbgorIGEgeW9jdG8tYnNwLWdlbmVyYXRlZCBCU1AuCisKKyBUaGUgc2V0IG9mIGZlYXR1cmVzIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYSBCU1AKKyBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgaXRlbXMgdG8gcmVtb3ZlLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1faGVscCA9ICIiIgorCitOQU1FCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgcm0gLSBSZW1vdmUgYSBmZWF0dXJlIGZyb20gdGhlIGxpc3Qgb2YKKyAgICBmZWF0dXJlcyBiZWluZyB1c2VkIGZvciBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIHJtIDxic3AtbmFtZT4KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgcmVtb3ZlcyAodHVybnMgb2ZmKSBvbmUgb3IgbW9yZSBmZWF0dXJlcyBmcm9tIGEgQlNQJ3MKKyAgICB1c2VyLWZlYXR1cmVzLnNjYyBmaWxlLCB3aGljaCBpcyB0aGUgZmlsZSB1c2VkIHRvIG1hbmFnZSBmZWF0dXJlcworICAgIGluIGEgeW9jdG8tYnNwLWdlbmVyYXRlZCBCU1AuCisKKyAgICBUaGUgc2V0IG9mIGZlYXR1cmVzIGF2YWlsYWJsZSB0byBiZSByZW1vdmVkIGJ5IHRoaXMgY29tbWFuZCBmb3IgYQorICAgIEJTUCBpcyBsaXN0ZWQgYW5kIHRoZSB1c2VyIHByb21wdGVkIGZvciB0aGUgc3BlY2lmaWMgaXRlbXMgdG8KKyAgICByZW1vdmUuCisiIiIKKworCit5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3RfdXNhZ2UgPSAiIiIKKworIExpc3QgdGhlIHNldCBvZiBrZXJuZWwgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmVzIGxpc3QgPGJzcC1uYW1lPgorCisgVGhpcyBjb21tYW5kIGxpc3RzIHRoZSBjb21wbGV0ZSBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSB0byBhCisgQlNQLiAgVGhpcyBpbmNsdWRlcyB0aGUgZmVhdHVyZXMgY29udGFpbmVkIGluIGxpbnV4LXlvY3RvIG1ldGEKKyBicmFuY2hlcyBhcyB3ZWxsIGFzIHJlY2lwZS1zcGFjZSBmZWF0dXJlcyBkZWZpbmVkIGxvY2FsbHkgdG8gdGhlIEJTUC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9oZWxwID0gIiIiCisKK05BTUUKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZXMgbGlzdCAtIExpc3QgdGhlIHNldCBvZiBrZXJuZWwgZmVhdHVyZXMKKyAgICBhdmFpbGFibGUgdG8gYSBCU1AKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZXMgbGlzdCA8YnNwLW5hbWU+CisKK0RFU0NSSVBUSU9OCisgICAgIFRoaXMgY29tbWFuZCBsaXN0cyB0aGUgY29tcGxldGUgc2V0IG9mIGtlcm5lbCBmZWF0dXJlcyBhdmFpbGFibGUKKyAgICAgdG8gYSBCU1AuICBUaGlzIGluY2x1ZGVzIHRoZSBmZWF0dXJlcyBjb250YWluZWQgaW4gbGludXgteW9jdG8KKyAgICAgbWV0YSBicmFuY2hlcyBhcyB3ZWxsIGFzIHJlY2lwZS1zcGFjZSBmZWF0dXJlcyBkZWZpbmVkIGxvY2FsbHkgdG8KKyAgICAgdGhlIEJTUC4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX3VzYWdlID0gIiIiCisKKyBQcmludCB0aGUgZGVzY3JpcHRpb24gYW5kIGNvbXBhdGliaWxpdHkgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4ga2VybmVsIGZlYXR1cmUKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXNjcmliZSA8YnNwLW5hbWU+IFsveHh4eC95eXl5L2ZlYXR1cmUuc2NjIC4uLl0KKworIFRoaXMgY29tbWFuZCBwcmludHMgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb21wYXRpYmlsaXR5IG9mIGEgc3BlY2lmaWMKKyBmZWF0dXJlIGluIHRoZSBmb3JtYXQgJ2Rlc2NyaXB0aW9uIFtjb21wYXRpYmlsaXR5XS4KKyIiIgorCisKK3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc2NyaWJlIC0gcHJpbnQgdGhlIGRlc2NyaXB0aW9uIGFuZAorICAgIGNvbXBhdGliaWxpdHkgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4ga2VybmVsIGZlYXR1cmUKKworU1lOT1BTSVMKKyAgICB5b2N0by1rZXJuZWwgZmVhdHVyZSBkZXNjcmliZSA8YnNwLW5hbWU+IFsveHh4eC95eXl5L2ZlYXR1cmUuc2NjIC4uLl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgcHJpbnRzIHRoZSBkZXNjcmlwdGlvbiBhbmQgY29tcGF0aWJpbGl0eSBvZiBhCisgICAgc3BlY2lmaWMgZmVhdHVyZSBpbiB0aGUgZm9ybWF0ICdkZXNjcmlwdGlvbiBbY29tcGF0aWJpbGl0eV0uICBJZgorICAgIHRoZSBmZWF0dXJlIGRvZXNuJ3QgZGVmaW5lIGEgZGVzY3JpcHRpb24gb3IgY29tcGF0aWJpbGl0eSwgYQorICAgIHN0cmluZyB3aXRoIGdlbmVyaWMgdW5rbm93biB2YWx1ZXMgd2lsbCBiZSBwcmludGVkLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSByZWNpcGUtc3BhY2Uga2VybmVsIGZlYXR1cmUgaW4gYSBCU1AKKworIHVzYWdlOiB5b2N0by1rZXJuZWwgZmVhdHVyZSBjcmVhdGUgPGJzcC1uYW1lPiBuZXdmZWF0dXJlLnNjYyBcCisgICAgICAgICJGZWF0dXJlIERlc2NyaXB0aW9uIiBjYXBhYmlsaXRpZXMgWzxDT05GSUdfWFhYPXg+IC4uLl0gWzxQQVRDSD4gLi4uXQorCisgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBuZXcga2VybmVsIGZlYXR1cmUgZnJvbSB0aGUgYmFyZSBjb25maWcKKyBvcHRpb25zIGFuZCBwYXRjaGVzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lLgorIiIiCisKKworeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGNyZWF0ZSAtIGNyZWF0ZSBhIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZQorICAgIGluIGEgQlNQCisKK1NZTk9QU0lTCisgICAgeW9jdG8ta2VybmVsIGZlYXR1cmUgY3JlYXRlIDxic3AtbmFtZT4gbmV3ZmVhdHVyZS5zY2MgXAorICAgICAgICAiRmVhdHVyZSBEZXNjcmlwdGlvbiIgY2FwYWJpbGl0aWVzIFs8Q09ORklHX1hYWD14PiAuLi5dIFs8UEFUQ0g+IC4uLl0KKworREVTQ1JJUFRJT04KKyAgICBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyBrZXJuZWwgZmVhdHVyZSBmcm9tIHRoZSBiYXJlIGNvbmZpZworICAgIG9wdGlvbnMgYW5kIHBhdGNoZXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kLWxpbmUuICBUaGUgbmV3CisgICAgZmVhdHVyZSB3aWxsIGJlIGNyZWF0ZWQgaW4gcmVjaXBlLXNwYWNlLCBzcGVjaWZpY2FsbHkgaW4gZWl0aGVyCisgICAgdGhlIGtlcm5lbCAuYmJhcHBlbmQncyAvZmlsZXMvY2ZnIG9yIC9maWxlcy9mZWF0dXJlcyBzdWJkaXJlY3RvcnksCisgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBmZWF0dXJlIGNvbnRhaW5zIGNvbmZpZyBpdGVtcyBvbmx5CisgICAgb3IgY29uZmlnIGl0ZW1zIGFsb25nIHdpdGggcGF0Y2hlcy4gIFRoZSBuYW1lZCBmZWF0dXJlIG11c3QgZW5kCisgICAgd2l0aCAuc2NjIGFuZCBtdXN0IG5vdCBjb250YWluIGEgZmVhdHVyZSBkaXJlY3RvcnkgdG8gY29udGFpbiB0aGUKKyAgICBmZWF0dXJlICh0aGlzIHdpbGwgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5KSwgYW5kIGEgZmVhdHVyZQorICAgIGRlY3JpcHRpb24gaW4gZG91YmxlLXF1b3RlcyBhbG9uZyB3aXRoIGEgY2FwYWJpbGl0aWVzIHN0cmluZworICAgICh3aGljaCBmb3IgdGhlIHRpbWUgYmVpbmcgY2FuIGJlIG9uZSBvZjogJ2FsbCcgb3IgJ2JvYXJkJykuCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X3VzYWdlID0gIiIiCisKKyBEZXN0cm95IGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlIGluIGEgQlNQCisKKyB1c2FnZTogeW9jdG8ta2VybmVsIGZlYXR1cmUgZGVzdHJveSA8YnNwLW5hbWU+IGZlYXR1cmUuc2NjCisKKyBUaGlzIGNvbW1hbmQgZGVzdHJveXMgYSBrZXJuZWwgZmVhdHVyZSBkZWZpbmVkIGluIHRoZSBzcGVjaWZpZWQgQlNQJ3MKKyByZWNpcGUtc3BhY2Uga2VybmVsIGRlZmluaXRpb24uCisiIiIKKworCit5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc3Ryb3kgPGJzcC1uYW1lPiBmZWF0dXJlLnNjYyAtIGRlc3Ryb3kgYQorICAgIHJlY2lwZS1zcGFjZSBrZXJuZWwgZmVhdHVyZSBpbiBhIEJTUAorCitTWU5PUFNJUworICAgIHlvY3RvLWtlcm5lbCBmZWF0dXJlIGRlc3Ryb3kgPGJzcC1uYW1lPiBmZWF0dXJlLnNjYworCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBkZXN0cm95cyBhIGtlcm5lbCBmZWF0dXJlIGRlZmluZWQgaW4gdGhlIHNwZWNpZmllZAorICAgIEJTUCdzIHJlY2lwZS1zcGFjZSBrZXJuZWwgZGVmaW5pdGlvbi4gIFRoZSBuYW1lZCBmZWF0dXJlIG11c3QgZW5kCisgICAgd2l0aCAuc2NjIGFuZCBtdXN0IG5vdCBjb250YWluIGEgZmVhdHVyZSBkaXJlY3RvcnkgdG8gY29udGFpbiB0aGUKKyAgICBmZWF0dXJlICh0aGlzIHdpbGwgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5KS4gIElmIHRoZSBrZXJuZWwKKyAgICBmZWF0dXJlIGlzIGluIHVzZSBieSBhIEJTUCwgaXQgY2FuJ3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGUgQlNQCisgICAgc3RvcHMgdXNpbmcgaXQgKHNlZSB5b2N0by1rZXJuZWwgZmVhdHVyZSBybSB0byBzdG9wIHVzaW5nIGl0KS4KKyIiIgorCisjIworIyB5b2N0by1sYXllciBoZWxwIGFuZCB1c2FnZSBzdHJpbmdzCisjIworCit5b2N0b19sYXllcl91c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgZ2VuZXJpYyBZb2N0byBsYXllci4KKworIHVzYWdlOiB5b2N0by1sYXllciBbLS12ZXJzaW9uXSBbLS1oZWxwXSBDT01NQU5EIFtBUkdTXQorCisgQ3VycmVudCAneW9jdG8tbGF5ZXInIGNvbW1hbmRzIGFyZToKKyAgICBjcmVhdGUgICAgICAgICAgICBDcmVhdGUgYSBuZXcgZ2VuZXJpYyBZb2N0byBsYXllcgorICAgIGxpc3QgICAgICAgICAgICAgIExpc3QgYXZhaWxhYmxlIHZhbHVlcyBmb3IgaW5wdXQgb3B0aW9ucyBhbmQgcHJvcGVydGllcworCisgU2VlICd5b2N0by1sYXllciBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4KKyIiIgorCit5b2N0b19sYXllcl9oZWxwX3VzYWdlID0gIiIiCisKKyB1c2FnZTogeW9jdG8tbGF5ZXIgaGVscCA8c3ViY29tbWFuZD4KKworIFRoaXMgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIHN1YmNvbW1hbmQuCisiIiIKKworeW9jdG9fbGF5ZXJfY3JlYXRlX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBuZXcgZ2VuZXJpYyBZb2N0byBsYXllcgorCisgdXNhZ2U6IHlvY3RvLWxheWVyIGNyZWF0ZSA8bGF5ZXItbmFtZT4gW2xheWVyX3ByaW9yaXR5XQorICAgICAgICAgICAgWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCisgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBnZW5lcmljIFlvY3RvIGxheWVyIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQKKyBwYXJhbWV0ZXJzLiAgVGhlIG5ldyBsYXllciB3aWxsIGJlIGEgbmV3IFlvY3RvIGxheWVyIGNvbnRhaW5lZCBieQorIGRlZmF1bHQgd2l0aGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IHNwZWNpZmllZCBhcworICdtZXRhLWxheWVyLW5hbWUnLiAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgbGF5ZXIgaW4gYQorIGRpcmVjdG9yeSB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgSWYgbGF5ZXJfcHJpb3JpdHkgaXMgc3BlY2lmaWVkLCBhIHNpbXBsZSBsYXllciB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcKKyB0aGUgZ2l2ZW4gbGF5ZXIgcHJpb3JpdHksIGFuZCB0aGUgdXNlciB3aWxsIG5vdCBiZSBwcm9tcHRlZCBmb3IKKyBmdXJ0aGVyIGlucHV0LgorCisgTk9URTogT25jZSBjcmVhdGVkLCB5b3Ugc2hvdWxkIGFkZCB5b3VyIG5ldyBsYXllciB0byB5b3VyCisgYmJsYXllcnMuY29uZiBmaWxlIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWJzZXF1ZW50bHkgc2VlbiBhbmQKKyBtb2RpZmllZCBieSB0aGUgeW9jdG8ta2VybmVsIHRvb2wuICBJbnN0cnVjdGlvbnMgZm9yIGRvaW5nIHRoaXMgY2FuCisgYmUgZm91bmQgaW4gdGhlIFJFQURNRSBmaWxlIGdlbmVyYXRlZCBpbiB0aGUgbGF5ZXIncyB0b3AtbGV2ZWwKKyBkaXJlY3RvcnkuCisKKyBTZWUgJ3lvY3RvIGxheWVyIGhlbHAgY3JlYXRlJyBmb3IgbW9yZSBkZXRhaWxlZCBpbnN0cnVjdGlvbnMuCisiIiIKKworeW9jdG9fbGF5ZXJfY3JlYXRlX2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWxheWVyIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBnZW5lcmljIFlvY3RvIGxheWVyCisKK1NZTk9QU0lTCisgICAgeW9jdG8tbGF5ZXIgY3JlYXRlIDxsYXllci1uYW1lPiBbbGF5ZXJfcHJpb3JpdHldCisgICAgICAgIFstbyA8RElSTkFNRT4gfCAtLW91dGRpciA8RElSTkFNRT5dCisgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGEgZ2VuZXJpYyBZb2N0byBsYXllciBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkCisgICAgcGFyYW1ldGVycy4gIFRoZSBuZXcgbGF5ZXIgd2lsbCBiZSBhIG5ldyBZb2N0byBsYXllciBjb250YWluZWQgYnkKKyAgICBkZWZhdWx0IHdpdGhpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMKKyAgICAnbWV0YS1sYXllci1uYW1lJy4gIFRoZSAtbyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGxhY2UgdGhlIGxheWVyCisgICAgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIGFuZCBsb2NhdGlvbi4KKworICAgIElmIGxheWVyX3ByaW9yaXR5IGlzIHNwZWNpZmllZCwgYSBzaW1wbGUgbGF5ZXIgd2lsbCBiZSBjcmVhdGVkCisgICAgdXNpbmcgdGhlIGdpdmVuIGxheWVyIHByaW9yaXR5LCBhbmQgdGhlIHVzZXIgd2lsbCBub3QgYmUgcHJvbXB0ZWQKKyAgICBmb3IgZnVydGhlciBpbnB1dC4KKworICAgIFRoZSBsYXllci1zcGVjaWZpYyBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIHRoZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisgICAgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbGF5ZXIgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lCisgICAgdXNpbmcgdGhlIC1pIG9wdGlvbiBhbmQgc3VwcGx5aW5nIGEgSlNPTiBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUKKyAgICBzZXQgb2YgbmFtZTp2YWx1ZSBwYWlycyBuZWVkZWQgYnkgdGhlIGxheWVyLgorCisgICAgSWYgdGhlIC1pIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlIHVzZXIgd2lsbCBiZSBpbnRlcmFjdGl2ZWx5CisgICAgcHJvbXB0ZWQgZm9yIGVhY2ggb2YgdGhlIHJlcXVpcmVkIHByb3BlcnR5IHZhbHVlcywgd2hpY2ggd2lsbCB0aGVuCisgICAgYmUgdXNlZCBhcyB2YWx1ZXMgZm9yIGxheWVyIGdlbmVyYXRpb24uCisKKyAgICBUaGUgc2V0IG9mIHByb3BlcnRpZXMgYXZhaWxhYmxlIGNhbiBiZSBsaXN0ZWQgdXNpbmcgdGhlCisgICAgJ3lvY3RvLWxheWVyIGxpc3QnIGNvbW1hbmQuCisKKyAgICBTcGVjaWZ5aW5nIC1jIGNhdXNlcyB0aGUgUHl0aG9uIGNvZGUgZ2VuZXJhdGVkIGFuZCBleGVjdXRlZCB0bworICAgIGNyZWF0ZSB0aGUgbGF5ZXIgdG8gYmUgZHVtcGVkIHRvIHRoZSAnYnNwZ2VuLm91dCcgZmlsZSBpbiB0aGUKKyAgICBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLgorCisgICAgTk9URTogT25jZSBjcmVhdGVkLCB5b3Ugc2hvdWxkIGFkZCB5b3VyIG5ldyBsYXllciB0byB5b3VyCisgICAgYmJsYXllcnMuY29uZiBmaWxlIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWJzZXF1ZW50bHkgc2VlbiBhbmQKKyAgICBtb2RpZmllZCBieSB0aGUgeW9jdG8ta2VybmVsIHRvb2wuICBJbnN0cnVjdGlvbnMgZm9yIGRvaW5nIHRoaXMKKyAgICBjYW4gYmUgZm91bmQgaW4gdGhlIFJFQURNRSBmaWxlIGdlbmVyYXRlZCBpbiB0aGUgbGF5ZXIncyB0b3AtbGV2ZWwKKyAgICBkaXJlY3RvcnkuCisKKyAgICBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgeW91ciBwb2t5IHJlcG8gaXMgYXQgL3BhdGgvdG8vcG9reSwgeW91ciBuZXcKKyAgICBsYXllciBpcyBhdCAvcGF0aC90by9wb2t5L21ldGEtbXlsYXllciwgYW5kIHlvdXIgYnVpbGQgZGlyZWN0b3J5CisgICAgaXMgL3BhdGgvdG8vYnVpbGQ6CisKKyAgICAkIGdlZGl0IC9wYXRoL3RvL2J1aWxkL2NvbmYvYmJsYXllcnMuY29uZgorCisgICAgQkJMQVlFUlMgPz0gIiBcXAorICAgICAgL3BhdGgvdG8vcG9reS9tZXRhIFxcCisgICAgICAvcGF0aC90by9wb2t5L21ldGEteW9jdG8gXFwKKyAgICAgIC9wYXRoL3RvL3Bva3kvbWV0YS1teWxheWVyIFxcCisgICAgICAiCisiIiIKKworeW9jdG9fbGF5ZXJfbGlzdF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHlvY3RvLWxheWVyIGxpc3QgcHJvcGVydGllcworICAgICAgICAgICAgICAgIFstbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0tb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICAgICAgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0eSA8eHh4PgorICAgICAgICAgICAgICAgIFstbyA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0tb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKworIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBjb21wbGV0ZSBzZXQgb2YgcG9zc2libGUgdmFsdWVzIGZvciBhCisgc3BlY2lmaWVkIG9wdGlvbiBvciBwcm9wZXJ0eSBuZWVkZWQgYnkgdGhlIGxheWVyIGNyZWF0aW9uIHByb2Nlc3MuCisKKyBUaGUgZmlyc3QgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgcHJvcGVydGllcyB0aGF0IGV4aXN0IGFuZAorIG11c3QgaGF2ZSB2YWx1ZXMgc3BlY2lmaWVkIGZvciB0aGVtIGluIHRoZSAneW9jdG8tbGF5ZXIgY3JlYXRlJworIGNvbW1hbmQuCisKKyBUaGUgc2Vjb25kIGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IGV4aXN0IGFuZCBjYW4KKyBiZSBzcGVjaWZpZWQgZm9yIGFueSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluIHRoZSAneW9jdG8tbGF5ZXIKKyBjcmVhdGUnIGNvbW1hbmQuCisKKyBTZWUgJ3lvY3RvLWxheWVyIGhlbHAgbGlzdCcgZm9yIG1vcmUgZGV0YWlscy4KKyIiIgorCit5b2N0b19sYXllcl9saXN0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHlvY3RvLWxheWVyIGxpc3QgLSBMaXN0IGF2YWlsYWJsZSB2YWx1ZXMgZm9yIGxheWVyIGlucHV0IG9wdGlvbnMgYW5kIHByb3BlcnRpZXMKKworU1lOT1BTSVMKKyAgICB5b2N0by1sYXllciBsaXN0IHByb3BlcnRpZXMKKyAgICAgICAgICAgIFstLW8gPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtb3V0ZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICB5b2N0by1sYXllciBsaXN0IHByb3BlcnR5IDx4eHg+CisgICAgICAgICAgICBbLS1vIDxKU09OIFBST1BFUlRZIEZJTEU+IHwgLW91dGZpbGUgPEpTT04gUFJPUEVSVFlfRklMRT5dCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIGNvbXBsZXRlIHNldCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGEKKyAgICBzcGVjaWZpZWQgb3B0aW9uIG9yIHByb3BlcnR5IG5lZWRlZCBieSB0aGUgbGF5ZXIgY3JlYXRpb24gcHJvY2Vzcy4KKworICAgIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSBwcm9wZXJ0aWVzIHRoYXQgZXhpc3QKKyAgICBhbmQgbXVzdCBoYXZlIHZhbHVlcyBzcGVjaWZpZWQgZm9yIHRoZW0gaW4gdGhlICd5b2N0by1sYXllcgorICAgIGNyZWF0ZScgY29tbWFuZC4gIFRoaXMgY29tbWFuZCBpcyBtYWlubHkgbWVhbnQgdG8gYWlkIHRoZQorICAgIGRldmVsb3BtZW50IG9mIHVzZXIgaW50ZXJmYWNlIGFsdGVybmF0aXZlcyB0byB0aGUgZGVmYXVsdAorICAgIHRleHQtYmFzZWQgcHJvbXB0aW5nIGludGVyZmFjZS4gIElmIHRoZSAtbyBvcHRpb24gaXMgc3BlY2lmaWVkLAorICAgIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMsIGluIGFkZGl0aW9uIHRvIGJlaW5nIGRpc3BsYXllZCwgd2lsbCBiZQorICAgIHdyaXR0ZW4gdG8gdGhlIHNwZWNpZmllZCBmaWxlIGFzIGEgSlNPTiBvYmplY3QuICBJbiB0aGlzIGNhc2UsIHRoZQorICAgIG9iamVjdCB3aWxsIGNvbnNpc3Qgb2YgdGhlIHNldCBvZiBuYW1lOnZhbHVlIHBhaXJzIGNvcnJlc3BvbmRpbmcKKyAgICB0byB0aGUgKHBvc3NpYmx5IG5lc3RlZCkgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhlCisgICAgaW5wdXQgc3RhdGVtZW50cyB1c2VkIGJ5IHRoZSBCU1AuICBTb21lIGV4YW1wbGUgb3V0cHV0IGZvciB0aGUKKyAgICAnbGlzdCBwcm9wZXJ0aWVzJyBjb21tYW5kOgorCisgICAgJCB5b2N0by1sYXllciBsaXN0IHByb3BlcnRpZXMKKyAgICAiZXhhbXBsZV9iYmFwcGVuZF9uYW1lIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogZXhhbXBsZQorICAgICAgICAibXNnIiA6IFBsZWFzZSBlbnRlciB0aGUgbmFtZSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBiYmFwcGVuZCBmaWxlOgorICAgICAgICAidHlwZSIgOiBlZGl0CisgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICJmaWxlbmFtZSIgOiAvaG9tZS90cnoveW9jdG8veW9jdG8tbGF5ZXItZGV2L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbAorICAgIH0KKyAgICAiY3JlYXRlX2V4YW1wbGVfcmVjaXBlIiA6IHsKKyAgICAgICAgImRlZmF1bHQiIDogbgorICAgICAgICAibXNnIiA6IFdvdWxkIHlvdSBsaWtlIHRvIGhhdmUgYW4gZXhhbXBsZSByZWNpcGUgY3JlYXRlZD8gKHkvbikKKyAgICAgICAgInR5cGUiIDogYm9vbGVhbgorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImV4YW1wbGVfcmVjaXBlX25hbWUiIDogeworICAgICAgICAiZGVmYXVsdCIgOiBleGFtcGxlCisgICAgICAgICJtc2ciIDogUGxlYXNlIGVudGVyIHRoZSBuYW1lIHlvdSdkIGxpa2UgdG8gdXNlIGZvciB5b3VyIGV4YW1wbGUgcmVjaXBlOgorICAgICAgICAidHlwZSIgOiBlZGl0CisgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICJmaWxlbmFtZSIgOiAvaG9tZS90cnoveW9jdG8veW9jdG8tbGF5ZXItZGV2L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbAorICAgIH0KKyAgICAibGF5ZXJfcHJpb3JpdHkiIDogeworICAgICAgICAiZGVmYXVsdCIgOiA2CisgICAgICAgICJtc2ciIDogUGxlYXNlIGVudGVyIHRoZSBsYXllciBwcmlvcml0eSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgdGhlIGxheWVyOgorICAgICAgICAidHlwZSIgOiBlZGl0CisgICAgICAgICJwcmlvIiA6IDIwCisgICAgICAgICJmaWxlbmFtZSIgOiAvaG9tZS90cnoveW9jdG8veW9jdG8tbGF5ZXItZGV2L3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvbGF5ZXItcXVlc3Rpb25zLm5vaW5zdGFsbAorICAgIH0KKyAgICAiY3JlYXRlX2V4YW1wbGVfYmJhcHBlbmQiIDogeworICAgICAgICAiZGVmYXVsdCIgOiBuCisgICAgICAgICJtc2ciIDogV291bGQgeW91IGxpa2UgdG8gaGF2ZSBhbiBleGFtcGxlIGJiYXBwZW5kIGZpbGUgY3JlYXRlZD8gKHkvbikKKyAgICAgICAgInR5cGUiIDogYm9vbGVhbgorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisgICAgImV4YW1wbGVfYmJhcHBlbmRfdmVyc2lvbiIgOiB7CisgICAgICAgICJkZWZhdWx0IiA6IDAuMQorICAgICAgICAibXNnIiA6IFBsZWFzZSBlbnRlciB0aGUgdmVyc2lvbiBudW1iZXIgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgYmJhcHBlbmQgZmlsZSAodGhpcyBzaG91bGQgbWF0Y2ggdGhlIHJlY2lwZSB5b3UncmUgYXBwZW5kaW5nIHRvKToKKyAgICAgICAgInR5cGUiIDogZWRpdAorICAgICAgICAicHJpbyIgOiAyMAorICAgICAgICAiZmlsZW5hbWUiIDogL2hvbWUvdHJ6L3lvY3RvL3lvY3RvLWxheWVyLWRldi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKKyAgICB9CisKKyAgICBFYWNoIGVudHJ5IGluIHRoZSBvdXRwdXQgY29uc2lzdHMgb2YgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQKKyAgICBlLmcuICJsYXllcl9wcmlvcml0eSIsIGZvbGxvd2VkIGJ5IHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgZm9yIHRoYXQKKyAgICBlbGVtZW50IGVuY2xvc2VkIGluIGJyYWNlcy4gIFRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIHByb3ZpZGUKKyAgICBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIGNvbXBsZXRlIHVzZXIgaW50ZXJmYWNlLiAgVHdvCisgICAgZmVhdHVyZXMgb2YgdGhlIHNjaGVtZSBwcm92aWRlIGZvciBjb25kaXRpb25hbCBpbnB1dC4gIEZpcnN0LCBpZiBhCisgICAgUHl0aG9uICJpZiIgc3RhdGVtZW50IGFwcGVhcnMgaW4gcGxhY2Ugb2YgYW4gaW5wdXQgZWxlbWVudCBuYW1lLAorICAgIHRoZSBzZXQgb2YgZW5jbG9zZWQgaW5wdXQgZWxlbWVudHMgYXBwbHkgYW5kIHNob3VsZCBiZSBwcmVzZW50ZWQKKyAgICB0byB0aGUgdXNlciBvbmx5IGlmIHRoZSAnaWYnIHN0YXRlbWVudCBldmFsdWF0ZXMgdG8gdHJ1ZS4gIFRoZQorICAgIHRlc3QgaW4gdGhlIGlmIHN0YXRlbWVudCB3aWxsIGFsd2F5cyByZWZlcmVuY2UgYW5vdGhlciBpbnB1dAorICAgIGVsZW1lbnQgaW4gdGhlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgYmVpbmcgdGVzdGVkCisgICAgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlciBiZWZvcmUgdGhlIGVsZW1lbnRzIGVuY2xvc2VkIGJ5CisgICAgdGhlIGlmIGJsb2NrLiAgU2Vjb25kbHksIGluIGEgc2ltaWxhciB3YXksIHNvbWUgZWxlbWVudHMgY29udGFpbgorICAgICJkZXBlbmRzLW9uIiBhbmQgZGVwZW5kcy1vbi12YWwiIHRhZ3MsIHdoaWNoIG1lYW4gdGhhdCB0aGUKKyAgICBhZmZlY3RlZCBpbnB1dCBlbGVtZW50IHNob3VsZCBvbmx5IGJlIHByZXNlbnRlZCB0byB0aGUgdXNlciBpZiB0aGUKKyAgICBlbGVtZW50IGl0IGRlcGVuZHMgb24gaGFzIGFscmVhZHkgYmVlbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYW5kCisgICAgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIHRoZSBzcGVjaWZpZWQgdmFsdWUgZm9yIHRoYXQgZWxlbWVudC4KKworICAgIFRoZSBzZWNvbmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdmFsdWVzIHRoYXQgZXhpc3QgYW5kCisgICAgY2FuIGJlIHNwZWNpZmllZCBmb3IgYW55IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4gdGhlCisgICAgJ3lvY3RvLWxheWVyIGNyZWF0ZScgY29tbWFuZC4gIElmIHRoZSAtbyBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUKKyAgICBsaXN0IG9mIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LCBpbiBhZGRpdGlvbiB0byBiZWluZworICAgIGRpc3BsYXllZCwgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBhcyBhIEpTT04gb2JqZWN0LgorICAgIEluIHRoaXMgY2FzZSwgdGhlIG9iamVjdCB3aWxsIGNvbnNpc3Qgb2YgdGhlIHNldCBvZiBuYW1lOnZhbHVlCisgICAgcGFpcnMgY29ycmVzcG9uZGluZyB0byB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzIGFzc29jaWF0ZWQKKyAgICB3aXRoIHRoZSBwcm9wZXJ0eS4KKworICAgICQgeW9jdG8tbGF5ZXIgbGlzdCBwcm9wZXJ0eSBsYXllcl9wcmlvcml0eQorICAgICBbbm8gb3V0cHV0IC0gbGF5ZXJfcHJpb3JpdHkgaXMgYSB0ZXh0IGZpZWxkIHRoYXQgaGFzIG5vIGVudW1lcmFibGUgdmFsdWVzXQorCisgICAgVGhlIHNlY29uZCBmb3JtIGFzIHdlbGwgaXMgbWVhbnQgbWFpbmx5IGZvciBkZXZlbG9wZXJzIG9mCisgICAgYWx0ZXJuYXRpdmUgaW50ZXJmYWNlcyAtIGl0IGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIGZldGNoIHRoZQorICAgIHBvc3NpYmxlIHZhbHVlcyBmb3IgYSBnaXZlbiBpbnB1dCBlbGVtZW50IG9uLWRlbWFuZC4gIFRoaXMKKyAgICBvbi1kZW1hbmQgY2FwYWJpbGl0eSBpcyBlc3BlY2lhbGx5IHZhbHVhYmxlIGZvciBlbGVtZW50cyB0aGF0CisgICAgcmVxdWlyZSByZWxhdGl2ZWx5IGV4cGVuc2l2ZSByZW1vdGUgb3BlcmF0aW9ucyB0byBmdWxmaWxsLCBzdWNoIGFzCisgICAgdGhlIGV4YW1wbGUgdGhhdCByZXR1cm5zIHRoZSBzZXQgb2YgYnJhbmNoZXMgYXZhaWxhYmxlIGluIGEgcmVtb3RlCisgICAgZ2l0IHRyZWUgYWJvdmUuCisKKyIiIgorCisjIworIyB0ZXN0IGNvZGUKKyMjCisKK3Rlc3RfYnNwX3Byb3BlcnRpZXMgPSB7CisgICAgJ3NtcCc6ICd5ZXMnLAorICAgICd0b3VjaHNjcmVlbic6ICd5ZXMnLAorICAgICdrZXlib2FyZCc6ICdubycsCisgICAgJ3hzZXJ2ZXInOiAneWVzJywKKyAgICAneHNlcnZlcl9jaG9pY2UnOiAneHNlcnZlci1pOTE1JywKKyAgICAnZmVhdHVyZXMnOiBbJ2dvb2RmZWF0dXJlJywgJ2dyZWF0ZmVhdHVyZSddLAorICAgICd0dW5lZmlsZSc6ICd0dW5lLXF1YXJrJywKK30KKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL2tlcm5lbC5weSBiL3NjcmlwdHMvbGliL2JzcC9rZXJuZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2OGI2MAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9rZXJuZWwucHkKQEAgLTAsMCArMSwxMDcxIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUga2VybmVsLXJlbGF0ZWQgZnVuY3Rpb25zIHVzZWQgYnkKKyMgJ3lvY3RvLWtlcm5lbCcgdG8gbWFuYWdlIGtlcm5lbCBjb25maWcgaXRlbXMgYW5kIHBhdGNoZXMgZm9yIFlvY3RvCisjIEJTUHMuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2Zyb20gdGFncyBpbXBvcnQgKgoraW1wb3J0IGdsb2IKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIGVuZ2luZSBpbXBvcnQgY3JlYXRlX2NvbnRleHQKKworCitkZWYgZmluZF9iYmxheWVycygpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiBhIHNhbml0aXplZCBsaXN0IG9mIHRoZSBsYXllcnMgZm91bmQgaW4gQkJMQVlFUlMuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBidWlsZGRpciA9IG9zLmVudmlyb25bIkJVSUxERElSIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHByaW50ICJCVUlMRERJUiBub3QgZm91bmQsIGV4aXRpbmcuIChEaWQgeW91IGZvcmdldCB0byBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnY/KSIKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBiYmxheWVyc19jb25mID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIikKKworICAgIGxheWVycyA9IFtdCisKKyAgICBiaXRiYWtlX2Vudl9jbWQgPSAiYml0YmFrZSAtZSIKKyAgICBiaXRiYWtlX2Vudl9saW5lcyA9IHN1YnByb2Nlc3MuUG9wZW4oYml0YmFrZV9lbnZfY21kLCBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICBpZiBub3QgYml0YmFrZV9lbnZfbGluZXM6CisgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgJyVzJyBvdXRwdXQsIGV4aXRpbmcuIiAlIGJpdGJha2VfZW52X2NtZAorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZm9yIGxpbmUgaW4gYml0YmFrZV9lbnZfbGluZXMuc3BsaXQoJ1xuJyk6CisgICAgICAgIGJibGF5ZXJzID0gZ2V0X2xpbmVfdmFsKGxpbmUsICJCQkxBWUVSUyIpCisgICAgICAgIGlmIChiYmxheWVycyk6CisgICAgICAgICAgICBicmVhaworCisgICAgaWYgbm90IGJibGF5ZXJzOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBCQkxBWUVSUyBpbiAlcyBvdXRwdXQsIGV4aXRpbmcuIiAlIFwKKyAgICAgICAgICAgIGJpdGJha2VfZW52X2NtZAorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgcmF3X2xheWVycyA9IGJibGF5ZXJzLnNwbGl0KCkKKworICAgIGZvciBsYXllciBpbiByYXdfbGF5ZXJzOgorICAgICAgICBpZiBsYXllciA9PSAnQkJMQVlFUlMnIG9yICc9JyBpbiBsYXllcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGxheWVycy5hcHBlbmQobGF5ZXIpCisKKyAgICByZXR1cm4gbGF5ZXJzCisKKworZGVmIGdldF9saW5lX3ZhbChsaW5lLCBrZXkpOgorICAgICIiIgorICAgIEV4dHJhY3QgdGhlIHZhbHVlIGZyb20gdGhlIFZBUj0idmFsIiBzdHJpbmcKKyAgICAiIiIKKyAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoa2V5ICsgIj0iKToKKyAgICAgICAgc3RyaXBwZWRfbGluZSA9IGxpbmUuc3BsaXQoJz0nKVsxXQorICAgICAgICBzdHJpcHBlZF9saW5lID0gc3RyaXBwZWRfbGluZS5yZXBsYWNlKCdcIicsICcnKQorICAgICAgICByZXR1cm4gc3RyaXBwZWRfbGluZQorICAgIHJldHVybiBOb25lCisKKworZGVmIGZpbmRfbWV0YV9sYXllcigpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiB0aGUgbWV0YSBsYXllciBpbiBCQkxBWUVSUy4KKyAgICAiIiIKKyAgICBsYXllcnMgPSBmaW5kX2JibGF5ZXJzKCkKKworICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgIGlmIGxheWVyLmVuZHN3aXRoKCJtZXRhIik6CisgICAgICAgICAgICByZXR1cm4gbGF5ZXIKKworICAgIHJldHVybiBOb25lCisKKworZGVmIGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiBhIG1hY2hpbmUncyBCU1AgbGF5ZXIgaW4gQkJMQVlFUlMuCisgICAgIiIiCisgICAgbGF5ZXJzID0gZmluZF9iYmxheWVycygpCisKKyAgICBmb3IgbGF5ZXIgaW4gbGF5ZXJzOgorICAgICAgICBpZiBsYXllci5lbmRzd2l0aChtYWNoaW5lKToKKyAgICAgICAgICAgIHJldHVybiBsYXllcgorCisgICAgcHJpbnQgIlVuYWJsZSB0byBmaW5kIHRoZSBCU1AgbGF5ZXIgZm9yIG1hY2hpbmUgJXMuIiAlIG1hY2hpbmUKKyAgICBwcmludCAiUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBsaXN0ZWQgaW4gYmJsYXllcnMuY29uZiIKKyAgICBzeXMuZXhpdCgxKQorCisKK2RlZiBnZW5fY2hvaWNlc19zdHIoY2hvaWNlcyk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYSBudW1iZXJlZCBsaXN0IG9mIGNob2ljZXMgZnJvbSBhIGxpc3Qgb2YgY2hvaWNlcyBmb3IKKyAgICBkaXNwbGF5IHRvIHRoZSB1c2VyLgorICAgICIiIgorICAgIGNob2ljZXNfc3RyID0gIiIKKworICAgIGZvciBpLCBjaG9pY2UgaW4gZW51bWVyYXRlKGNob2ljZXMpOgorICAgICAgICBjaG9pY2VzX3N0ciArPSAiXHQiICsgc3RyKGkgKyAxKSArICIpICIgKyBjaG9pY2UgKyAiXG4iCisKKyAgICByZXR1cm4gY2hvaWNlc19zdHIKKworCitkZWYgb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCB1c2VyZmlsZSwgbW9kZSk6CisgICAgIiIiCisgICAgRmluZCBvbmUgb2YgdGhlIHVzZXIgZmlsZXMgKHVzZXItY29uZmlnLmNmZywgdXNlci1wYXRjaGVzLnNjYykKKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIG1hY2hpbmUgKGNvdWxkIGJlIGluIGZpbGVzLywKKyAgICBsaW51eC15b2N0by1jdXN0b20vLCBldGMpLiAgUmV0dXJucyB0aGUgb3BlbiBmaWxlIGlmIGZvdW5kLCBOb25lCisgICAgb3RoZXJ3aXNlLgorCisgICAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xvc2luZyB0aGUgZmlsZSByZXR1cm5lZC4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisgICAgbGludXhkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eCIpCisgICAgbGludXhkaXJfbGlzdCA9IG9zLmxpc3RkaXIobGludXhkaXIpCisgICAgZm9yIGZpbGVvYmogaW4gbGludXhkaXJfbGlzdDoKKyAgICAgICAgZmlsZW9ial9wYXRoID0gb3MucGF0aC5qb2luKGxpbnV4ZGlyLCBmaWxlb2JqKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVvYmpfcGF0aCk6CisgICAgICAgICAgICB1c2VyZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKGZpbGVvYmpfcGF0aCwgdXNlcmZpbGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4odXNlcmZpbGVfbmFtZSwgbW9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiByZWFkX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiBhIGxpc3Qgb2YgY29uZmlnIGl0ZW1zIChDT05GSUdfWFhYKSBpbiBhIG1hY2hpbmUncworICAgIHVzZXItZGVmaW5lZCBjb25maWcgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1jb25maWcuY2ZnXS4KKyAgICAiIiIKKyAgICBjb25maWdfaXRlbXMgPSBbXQorCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItY29uZmlnLmNmZyIsICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgcyA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzIGFuZCBub3Qgcy5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICBjb25maWdfaXRlbXMuYXBwZW5kKHMpCisgICAgZi5jbG9zZSgpCisKKyAgICByZXR1cm4gY29uZmlnX2l0ZW1zCisKKworZGVmIHdyaXRlX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGNvbmZpZ19pdGVtcyk6CisgICAgIiIiCisgICAgV3JpdGUgKHJlcGxhY2UpIHRoZSBsaXN0IG9mIGNvbmZpZyBpdGVtcyAoQ09ORklHX1hYWCkgaW4gYQorICAgIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgY29uZmlnIGZyYWdtZW50IFske21hY2hpbmV9PXVzZXItY29uZmlnLmNmZ10uCisgICAgIiIiCisgICAgZiA9IG9wZW5fdXNlcl9maWxlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbWFjaGluZSsiLXVzZXItY29uZmlnLmNmZyIsICJ3IikKKyAgICBmb3IgaXRlbSBpbiBjb25maWdfaXRlbXM6CisgICAgICAgIGYud3JpdGUoaXRlbSArICJcbiIpCisgICAgZi5jbG9zZSgpCisKKyAgICBrZXJuZWxfY29udGVudHNfY2hhbmdlZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfbGlzdChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgY29uZmlnIGl0ZW1zIChDT05GSUdfWFhYKSBpbiBhIG1hY2hpbmUncworICAgIHVzZXItZGVmaW5lZCBjb25maWcgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1jb25maWcuY2ZnXS4KKyAgICAiIiIKKyAgICBjb25maWdfaXRlbXMgPSByZWFkX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMga2VybmVsIGNvbmZpZyBpdGVtcyBmb3IgJXMgaXM6IiAlIG1hY2hpbmUKKyAgICBwcmludCBnZW5fY2hvaWNlc19zdHIoY29uZmlnX2l0ZW1zKQorCisKK2RlZiB5b2N0b19rZXJuZWxfY29uZmlnX3JtKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBjb25maWcgaXRlbXMgKENPTkZJR19YWFgpIGluIGEgbWFjaGluZSdzCisgICAgdXNlci1kZWZpbmVkIGNvbmZpZyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWNvbmZpZy5jZmddLCBwcm9tcHQgdGhlIHVzZXIKKyAgICBmb3Igb25lIG9yIG1vcmUgdG8gcmVtb3ZlLCBhbmQgcmVtb3ZlIHRoZW0uCisgICAgIiIiCisgICAgY29uZmlnX2l0ZW1zID0gcmVhZF9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlNwZWNpZnkgdGhlIGtlcm5lbCBjb25maWcgaXRlbXMgdG8gcmVtb3ZlOiIKKyAgICBpbnB1dCA9IHJhd19pbnB1dChnZW5fY2hvaWNlc19zdHIoY29uZmlnX2l0ZW1zKSkKKyAgICBybV9jaG9pY2VzID0gaW5wdXQuc3BsaXQoKQorICAgIHJtX2Nob2ljZXMuc29ydCgpCisKKyAgICByZW1vdmVkID0gW10KKworICAgIGZvciBjaG9pY2UgaW4gcmV2ZXJzZWQocm1fY2hvaWNlcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlkeCA9IGludChjaG9pY2UpIC0gMQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgaWR4IDwgMCBvciBpZHggPj0gbGVuKGNvbmZpZ19pdGVtcyk6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBjaG9pY2UgKCVkKSwgZXhpdGluZyIgJSAoaWR4ICsgMSkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJlbW92ZWQuYXBwZW5kKGNvbmZpZ19pdGVtcy5wb3AoaWR4KSkKKworICAgIHdyaXRlX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGNvbmZpZ19pdGVtcykKKworICAgIHByaW50ICJSZW1vdmVkIGl0ZW1zOiIKKyAgICBmb3IgciBpbiByZW1vdmVkOgorICAgICAgICBwcmludCAiXHQlcyIgJSByCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgY29uZmlnX2l0ZW1zKToKKyAgICAiIiIKKyAgICBBZGQgb25lIG9yIG1vcmUgY29uZmlnIGl0ZW1zIChDT05GSUdfWFhYKSB0byBhIG1hY2hpbmUncworICAgIHVzZXItZGVmaW5lZCBjb25maWcgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1jb25maWcuY2ZnXS4KKyAgICAiIiIKKyAgICBuZXdfaXRlbXMgPSBbXQorICAgIGR1cF9pdGVtcyA9IFtdCisKKyAgICBjdXJfaXRlbXMgPSByZWFkX2NvbmZpZ19pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBmb3IgaXRlbSBpbiBjb25maWdfaXRlbXM6CisgICAgICAgIGlmIG5vdCBpdGVtLnN0YXJ0c3dpdGgoIkNPTkZJRyIpIG9yIChub3QgIj15IiBpbiBpdGVtIGFuZCBub3QgIj1tIiBpbiBpdGVtKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNvbmZpZyBpdGVtICglcyksIGV4aXRpbmciICUgaXRlbQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgaXRlbSBub3QgaW4gY3VyX2l0ZW1zIGFuZCBpdGVtIG5vdCBpbiBuZXdfaXRlbXM6CisgICAgICAgICAgICBuZXdfaXRlbXMuYXBwZW5kKGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkdXBfaXRlbXMuYXBwZW5kKGl0ZW0pCisKKyAgICBpZiBsZW4obmV3X2l0ZW1zKSA+IDA6CisgICAgICAgIGN1cl9pdGVtcy5leHRlbmQobmV3X2l0ZW1zKQorICAgICAgICB3cml0ZV9jb25maWdfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjdXJfaXRlbXMpCisgICAgICAgIHByaW50ICJBZGRlZCBpdGVtJXM6IiAlICgiIiBpZiBsZW4obmV3X2l0ZW1zKT09MSBlbHNlICJzIikKKyAgICAgICAgZm9yIG4gaW4gbmV3X2l0ZW1zOgorICAgICAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorCisgICAgaWYgbGVuKGR1cF9pdGVtcykgPiAwOgorICAgICAgICBvdXRwdXQ9IlRoZSBmb2xsb3dpbmcgaXRlbSVzIGFscmVhZHkgZXhpc3QlcyBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBpZ25vcmluZyAlczoiICUgXAorICAgICAgICAgICAgKCgiIiwicyIsICJpdCIpIGlmIGxlbihkdXBfaXRlbXMpPT0xIGVsc2UgKCJzIiwgIiIsICJ0aGVtIiApKQorICAgICAgICBwcmludCBvdXRwdXQKKyAgICAgICAgZm9yIG4gaW4gZHVwX2l0ZW1zOgorICAgICAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorCitkZWYgZmluZF9jdXJyZW50X2tlcm5lbChic3BfbGF5ZXIsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERldGVybWluZSB0aGUga2VybmVsIGFuZCB2ZXJzaW9uIGN1cnJlbnRseSBiZWluZyB1c2VkIGluIHRoZSBCU1AuCisgICAgIiIiCisgICAgbWFjaGluZV9jb25mID0gb3MucGF0aC5qb2luKGJzcF9sYXllciwgImNvbmYvbWFjaGluZS8iICsgbWFjaGluZSArICIuY29uZiIpCisKKyAgICBwcmVmZXJyZWRfa2VybmVsID0gcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0gcHJlZmVycmVkX3ZlcnNpb25fdmFybmFtZSA9IE5vbmUKKworICAgIGYgPSBvcGVuKG1hY2hpbmVfY29uZiwgInIiKQorICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIik6CisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsID0gbGluZS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgcHJlZmVycmVkX2tlcm5lbCA9IHByZWZlcnJlZF9rZXJuZWwucmVwbGFjZSgnXCInLCcnKQorICAgICAgICAgICAgcHJlZmVycmVkX3ZlcnNpb25fdmFybmFtZSA9ICJQUkVGRVJSRURfVkVSU0lPTl8iICsgcHJlZmVycmVkX2tlcm5lbAorICAgICAgICBpZiBwcmVmZXJyZWRfdmVyc2lvbl92YXJuYW1lIGFuZCBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aChwcmVmZXJyZWRfdmVyc2lvbl92YXJuYW1lKToKKyAgICAgICAgICAgIHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGxpbmUuc3BsaXQoKVstMV0KKyAgICAgICAgICAgIHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbi5yZXBsYWNlKCdcIicsJycpCisgICAgICAgICAgICBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24ucmVwbGFjZSgnJScsJycpCisKKyAgICBpZiBwcmVmZXJyZWRfa2VybmVsIGFuZCBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb246CisgICAgICAgIHJldHVybiBwcmVmZXJyZWRfa2VybmVsICsgIl8iICsgcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uCisgICAgZWxpZiBwcmVmZXJyZWRfa2VybmVsOgorICAgICAgICByZXR1cm4gcHJlZmVycmVkX2tlcm5lbAorCisKK2RlZiBmaW5kX2ZpbGVzZGlyKHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRmluZCB0aGUgbmFtZSBvZiB0aGUgJ2ZpbGVzJyBkaXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWNoaW5lCisgICAgKGNvdWxkIGJlIGluIGZpbGVzLywgbGludXgteW9jdG8tY3VzdG9tLywgZXRjKS4gIFJldHVybnMgdGhlIG5hbWUKKyAgICBvZiB0aGUgZmlsZXMgZGlyIGlmIGZvdW5kLCBOb25lIG90aGVyd2lzZS4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisgICAgZmlsZXNkaXIgPSBOb25lCisgICAgbGludXhkaXIgPSBvcy5wYXRoLmpvaW4obGF5ZXIsICJyZWNpcGVzLWtlcm5lbC9saW51eCIpCisgICAgbGludXhkaXJfbGlzdCA9IG9zLmxpc3RkaXIobGludXhkaXIpCisgICAgZm9yIGZpbGVvYmogaW4gbGludXhkaXJfbGlzdDoKKyAgICAgICAgZmlsZW9ial9wYXRoID0gb3MucGF0aC5qb2luKGxpbnV4ZGlyLCBmaWxlb2JqKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVvYmpfcGF0aCk6CisgICAgICAgICAgICAjIHRoaXMgY291bGQgYmUgZmlsZXMvIG9yIGxpbnV4LXlvY3RvLWN1c3RvbS8sIHdlIGhhdmUgbm8gd2F5IG9mIGRpc3Rpbmd1aXNoaW5nCisgICAgICAgICAgICAjIHNvIHdlIHRha2UgdGhlIGZpcnN0IChhbmQgbm9ybWFsbHkgb25seSkgZGlyIHdlIGZpbmQgYXMgdGhlICdmaWxlc2RpcicKKyAgICAgICAgICAgIGZpbGVzZGlyID0gZmlsZW9ial9wYXRoCisKKyAgICByZXR1cm4gZmlsZXNkaXIKKworCitkZWYgcmVhZF9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIEZpbmQgYW5kIHJldHVybiBhIGxpc3Qgb2YgcGF0Y2ggaXRlbXMgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgcGF0Y2ggbGlzdCBbJHttYWNoaW5lfS11c2VyLXBhdGNoZXMuc2NjXS4KKyAgICAiIiIKKyAgICBwYXRjaF9pdGVtcyA9IFtdCisKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1wYXRjaGVzLnNjYyIsICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgcyA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzIGFuZCBub3Qgcy5zdGFydHN3aXRoKCIjIik6CisgICAgICAgICAgICBmaWVsZHMgPSBzLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5vdCBmaWVsZHNbMF0gPT0gInBhdGNoIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGF0Y2hfaXRlbXMuYXBwZW5kKGZpZWxkc1sxXSkKKyAgICBmLmNsb3NlKCkKKworICAgIHJldHVybiBwYXRjaF9pdGVtcworCisKK2RlZiB3cml0ZV9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIHBhdGNoX2l0ZW1zKToKKyAgICAiIiIKKyAgICBXcml0ZSAocmVwbGFjZSkgdGhlIGxpc3Qgb2YgcGF0Y2hlcyBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQKKyAgICBwYXRjaCBsaXN0IFske21hY2hpbmV9LXVzZXItcGF0Y2hlcy5zY2NdLgorICAgICIiIgorICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLXBhdGNoZXMuc2NjIiwgInciKQorICAgIGZvciBpdGVtIGluIHBhdGNoX2l0ZW1zOgorICAgICAgICBmLndyaXRlKCJwYXRjaCAiICsgaXRlbSArICJcbiIpCisgICAgZi5jbG9zZSgpCisKKyAgICBrZXJuZWxfY29udGVudHNfY2hhbmdlZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0KHNjcmlwdHNfcGF0aCwgbWFjaGluZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgbGlzdCBvZiBwYXRjaGVzIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZCBwYXRjaCBsaXN0CisgICAgWyR7bWFjaGluZX0tdXNlci1wYXRjaGVzLnNjY10uCisgICAgIiIiCisgICAgcGF0Y2hlcyA9IHJlYWRfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlRoZSBjdXJyZW50IHNldCBvZiBtYWNoaW5lLXNwZWNpZmljIHBhdGNoZXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCisgICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKHBhdGNoZXMpCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIFJlbW92ZSBvbmUgb3IgbW9yZSBwYXRjaGVzIGZyb20gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIHBhdGNoCisgICAgbGlzdCBbJHttYWNoaW5lfS11c2VyLXBhdGNoZXMuc2NjXS4KKyAgICAiIiIKKyAgICBwYXRjaGVzID0gcmVhZF9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBwcmludCAiU3BlY2lmeSB0aGUgcGF0Y2hlcyB0byByZW1vdmU6IgorICAgIGlucHV0ID0gcmF3X2lucHV0KGdlbl9jaG9pY2VzX3N0cihwYXRjaGVzKSkKKyAgICBybV9jaG9pY2VzID0gaW5wdXQuc3BsaXQoKQorICAgIHJtX2Nob2ljZXMuc29ydCgpCisKKyAgICByZW1vdmVkID0gW10KKworICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgaWYgbm90IGZpbGVzZGlyOgorICAgICAgICBwcmludCAiQ291bGRuJ3Qgcm0gcGF0Y2goZXMpIHNpbmNlIHdlIGNvdWxkbid0IGZpbmQgYSAnZmlsZXMnIGRpciIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZvciBjaG9pY2UgaW4gcmV2ZXJzZWQocm1fY2hvaWNlcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlkeCA9IGludChjaG9pY2UpIC0gMQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgaWR4IDwgMCBvciBpZHggPj0gbGVuKHBhdGNoZXMpOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgY2hvaWNlICglZCksIGV4aXRpbmciICUgKGlkeCArIDEpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBmaWxlc2Rpcl9wYXRjaCA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgcGF0Y2hlc1tpZHhdKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlc2Rpcl9wYXRjaCk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZXNkaXJfcGF0Y2gpCisgICAgICAgIHJlbW92ZWQuYXBwZW5kKHBhdGNoZXNbaWR4XSkKKyAgICAgICAgcGF0Y2hlcy5wb3AoaWR4KQorCisgICAgd3JpdGVfcGF0Y2hfaXRlbXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBwYXRjaGVzKQorCisgICAgcHJpbnQgIlJlbW92ZWQgcGF0Y2hlczoiCisgICAgZm9yIHIgaW4gcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQgIlx0JXMiICUgcgorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgcGF0Y2hlcyk6CisgICAgIiIiCisgICAgQWRkIG9uZSBvciBtb3JlIHBhdGNoZXMgdG8gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkIHBhdGNoIGxpc3QKKyAgICBbJHttYWNoaW5lfS11c2VyLXBhdGNoZXMuc2NjXS4KKyAgICAiIiIKKyAgICBleGlzdGluZ19wYXRjaGVzID0gcmVhZF9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRjaCkgaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBhZGQgcGF0Y2ggKCVzKSBzaW5jZSBpdCdzIGFscmVhZHkgYmVlbiBhZGRlZCIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgaWYgbm90IGZpbGVzZGlyOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgYWRkIHBhdGNoICglcykgc2luY2Ugd2UgY291bGRuJ3QgZmluZCBhICdmaWxlcycgZGlyIHRvIGFkZCBpdCB0byIgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbmV3X3BhdGNoZXMgPSBbXQorCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwYXRjaCk6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBwYXRjaCAoJXMpLCBleGl0aW5nIiAlIHBhdGNoCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgIGZpbGVzZGlyX3BhdGNoID0gb3MucGF0aC5qb2luKGZpbGVzZGlyLCBiYXNlbmFtZSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHBhdGNoLCBmaWxlc2Rpcl9wYXRjaCkKKyAgICAgICAgbmV3X3BhdGNoZXMuYXBwZW5kKGJhc2VuYW1lKQorCisgICAgY3VyX2l0ZW1zID0gcmVhZF9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgY3VyX2l0ZW1zLmV4dGVuZChuZXdfcGF0Y2hlcykKKyAgICB3cml0ZV9wYXRjaF9pdGVtcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGN1cl9pdGVtcykKKworICAgIHByaW50ICJBZGRlZCBwYXRjaGVzOiIKKyAgICBmb3IgbiBpbiBuZXdfcGF0Y2hlczoKKyAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorCisKK2RlZiBpbmNfcHIobGluZSk6CisgICAgIiIiCisgICAgQWRkIDEgdG8gdGhlIFBSIHZhbHVlIGluIHRoZSBnaXZlbiBiYmFwcGVuZCBQUiBsaW5lLiAgRm9yIHRoZSBQUgorICAgIGxpbmVzIGluIGtlcm5lbCAuYmJhcHBlbmRzIGFmdGVyIG1vZGlmaWNhdGlvbnMuICBIYW5kbGVzIFBScyBvZgorICAgIHRoZSBmb3JtIFBSIDo9ICIke1BSfS4xIiBhcyB3ZWxsIGFzIFBSID0gInIwIi4KKyAgICAiIiIKKyAgICBpZHggPSBsaW5lLmZpbmQoIlwiIikKKworICAgIHByX3N0ciA9IGxpbmVbaWR4Ol0KKyAgICBwcl9zdHIgPSBwcl9zdHIucmVwbGFjZSgnXCInLCcnKQorICAgIGZpZWxkcyA9IHByX3N0ci5zcGxpdCgnLicpCisgICAgaWYgbGVuKGZpZWxkcykgPiAxOgorICAgICAgICBmaWVsZHNbMV0gPSBzdHIoaW50KGZpZWxkc1sxXSkgKyAxKQorICAgICAgICBwcl9zdHIgPSAiXCIiICsgJy4nLmpvaW4oZmllbGRzKSArICJcIlxuIgorICAgIGVsc2U6CisgICAgICAgIHByX3ZhbCA9IHByX3N0clsxOl0KKyAgICAgICAgcHJfc3RyID0gIlwiIiArICJyIiArIHN0cihpbnQocHJfdmFsKSArIDEpICsgIlwiXG4iCisgICAgaWR4MiA9IGxpbmUuZmluZCgiXCIiLCBpZHggKyAxKQorICAgIGxpbmUgPSBsaW5lWzppZHhdICsgcHJfc3RyCisgICAgCisgICAgcmV0dXJuIGxpbmUKKworCitkZWYga2VybmVsX2NvbnRlbnRzX2NoYW5nZWQoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEbyB3aGF0IHdlIG5lZWQgdG8gZG8gdG8gbm90aWZ5IHRoZSBzeXN0ZW0gdGhhdCB0aGUga2VybmVsCisgICAgcmVjaXBlJ3MgY29udGVudHMgaGF2ZSBjaGFuZ2VkLgorICAgICIiIgorICAgIGxheWVyID0gZmluZF9ic3BfbGF5ZXIobWFjaGluZSkKKworICAgIGtlcm5lbCA9IGZpbmRfY3VycmVudF9rZXJuZWwobGF5ZXIsIG1hY2hpbmUpCisgICAgaWYgbm90IGtlcm5lbDoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBrZXJuZWxfYmJmaWxlID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgvIiArIGtlcm5lbCArICIuYmJhcHBlbmQiKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShrZXJuZWxfYmJmaWxlKToKKyAgICAgICAga2VybmVsX2JiZmlsZSA9IG9zLnBhdGguam9pbihsYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4LyIgKyBrZXJuZWwgKyAiLmJiIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGtlcm5lbF9iYmZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAga2VybmVsX2JiZmlsZV9wcmV2ID0ga2VybmVsX2JiZmlsZSArICIucHJldiIKKyAgICBzaHV0aWwuY29weWZpbGUoa2VybmVsX2JiZmlsZSwga2VybmVsX2JiZmlsZV9wcmV2KQorCisgICAgaWZpbGUgPSBvcGVuKGtlcm5lbF9iYmZpbGVfcHJldiwgInIiKQorICAgIG9maWxlID0gb3BlbihrZXJuZWxfYmJmaWxlLCAidyIpCisgICAgaWZpbGVfbGluZXMgPSBpZmlsZS5yZWFkbGluZXMoKQorICAgIGZvciBpZmlsZV9saW5lIGluIGlmaWxlX2xpbmVzOgorICAgICAgICBpZiBpZmlsZV9saW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgiUFIiKToKKyAgICAgICAgICAgIGlmaWxlX2xpbmUgPSBpbmNfcHIoaWZpbGVfbGluZSkKKyAgICAgICAgb2ZpbGUud3JpdGUoaWZpbGVfbGluZSkKKyAgICBvZmlsZS5jbG9zZSgpCisgICAgaWZpbGUuY2xvc2UoKQorCisKK2RlZiBrZXJuZWxzKGNvbnRleHQpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgbGlzdCBvZiBhdmFpbGFibGUga2VybmVscyBpbiB0aGUgQlNQIGkuZS4gY29ycmVzcG9uZGluZworICAgIHRvIHRoZSBrZXJuZWwgLmJiYXBwZW5kcyBmb3VuZCBpbiB0aGUgbGF5ZXIuCisgICAgIiIiCisgICAgYXJjaGRpciA9IG9zLnBhdGguam9pbihjb250ZXh0WyJzY3JpcHRzX3BhdGgiXSwgImxpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoLyIgKyBjb250ZXh0WyJhcmNoIl0pCisgICAga2VybmRpciA9IG9zLnBhdGguam9pbihhcmNoZGlyLCAicmVjaXBlcy1rZXJuZWwvbGludXgiKQorICAgIGJiZ2xvYiA9IG9zLnBhdGguam9pbihrZXJuZGlyLCAiKi5iYmFwcGVuZCIpCisKKyAgICBiYmFwcGVuZHMgPSBnbG9iLmdsb2IoYmJnbG9iKQorCisgICAga2VybmVscyA9IFtdCisKKyAgICBmb3Iga2VybmVsIGluIGJiYXBwZW5kczoKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoa2VybmVsKSlbMF0KKyAgICAgICAgaWR4ID0gZmlsZW5hbWUuZmluZChDTE9TRV9UQUcpCisgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbaWR4ICsgbGVuKENMT1NFX1RBRyk6XS5zdHJpcCgpCisgICAgICAgIGtlcm5lbHMuYXBwZW5kKGZpbGVuYW1lKQorCisgICAga2VybmVscy5hcHBlbmQoImN1c3RvbSIpCisKKyAgICByZXR1cm4ga2VybmVscworCisKK2RlZiBleHRyYWN0X2dpdHVybChmaWxlKToKKyAgICAiIiIKKyAgICBFeHRyYWN0IHRoZSBnaXQgdXJsIG9mIHRoZSBrZXJuZWwgcmVwbyBmcm9tIHRoZSBrZXJuZWwgcmVjaXBlJ3MKKyAgICBTUkNfVVJJLgorICAgICIiIgorICAgIHVybCA9IE5vbmUKKyAgICBmID0gb3BlbihmaWxlLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJTUkNfVVJJIik6CisgICAgICAgICAgICBsaW5lID0gbGluZVtsZW4oIlNSQ19VUkkiKTpdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiPSIpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJcIiIpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBwcm90ID0gImdpdCIKKyAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gbGluZS5zcGxpdCgiOyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKCJnaXQ6Ly8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoInByb3RvY29sPSIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3QgPSBzLnNwbGl0KCI9IilbMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgdXJsOgorICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gcHJvdCArIHVybFszOl0KKyAgICByZXR1cm4gdXJsCisKKworZGVmIGZpbmRfZ2l0dXJsKGNvbnRleHQpOgorICAgICIiIgorICAgIEZpbmQgdGhlIGdpdCB1cmwgb2YgdGhlIGtlcm5lbCByZXBvIGZyb20gdGhlIGtlcm5lbCByZWNpcGUncworICAgIFNSQ19VUkkuCisgICAgIiIiCisgICAgbmFtZSA9IGNvbnRleHRbIm5hbWUiXQorICAgIGZpbGViYXNlID0gY29udGV4dFsiZmlsZW5hbWUiXQorICAgIHNjcmlwdHNfcGF0aCA9IGNvbnRleHRbInNjcmlwdHNfcGF0aCJdCisKKyAgICBtZXRhX2xheWVyID0gZmluZF9tZXRhX2xheWVyKCkKKworICAgIGtlcm5kaXIgPSBvcy5wYXRoLmpvaW4obWV0YV9sYXllciwgInJlY2lwZXMta2VybmVsL2xpbnV4IikKKyAgICBiYmdsb2IgPSBvcy5wYXRoLmpvaW4oa2VybmRpciwgIiouYmIiKQorICAgIGJicyA9IGdsb2IuZ2xvYihiYmdsb2IpCisgICAgZm9yIGtlcm5lbCBpbiBiYnM6CisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGtlcm5lbCkpWzBdCisgICAgICAgIGlmIGZpbGVuYW1lIGluIGZpbGViYXNlOgorICAgICAgICAgICAgZ2l0dXJsID0gZXh0cmFjdF9naXR1cmwoa2VybmVsKQorICAgICAgICAgICAgcmV0dXJuIGdpdHVybAorICAgIAorICAgIHJldHVybiBOb25lCisKKworZGVmIHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBGaW5kIGFuZCByZXR1cm4gYSBsaXN0IG9mIGZlYXR1cmVzIGluIGEgbWFjaGluZSdzIHVzZXItZGVmaW5lZAorICAgIGZlYXR1cmVzIGZyYWdtZW50IFske21hY2hpbmV9LXVzZXItZmVhdHVyZXMuc2NjXS4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IFtdCisKKyAgICBmID0gb3Blbl91c2VyX2ZpbGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBtYWNoaW5lKyItdXNlci1mZWF0dXJlcy5zY2MiLCAiciIpCisgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIHMgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgcyBhbmQgbm90IHMuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgZmVhdHVyZV9pbmNsdWRlID0gcy5zcGxpdCgpCisgICAgICAgICAgICBmZWF0dXJlcy5hcHBlbmQoZmVhdHVyZV9pbmNsdWRlWzFdLnN0cmlwKCkpCisgICAgZi5jbG9zZSgpCisKKyAgICByZXR1cm4gZmVhdHVyZXMKKworCitkZWYgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlcyk6CisgICAgIiIiCisgICAgV3JpdGUgKHJlcGxhY2UpIHRoZSBsaXN0IG9mIGZlYXR1cmUgaXRlbXMgaW4gYQorICAgIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgZmVhdHVyZXMgZnJhZ21lbnQgWyR7bWFjaGluZX09dXNlci1mZWF0dXJlcy5jZmddLgorICAgICIiIgorICAgIGYgPSBvcGVuX3VzZXJfZmlsZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIG1hY2hpbmUrIi11c2VyLWZlYXR1cmVzLnNjYyIsICJ3IikKKyAgICBmb3IgaXRlbSBpbiBmZWF0dXJlczoKKyAgICAgICAgZi53cml0ZSgiaW5jbHVkZSAiICsgaXRlbSArICJcbiIpCisgICAgZi5jbG9zZSgpCisKKyAgICBrZXJuZWxfY29udGVudHNfY2hhbmdlZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3Qoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGZlYXR1cmVzIHVzZWQgaW4gYSBtYWNoaW5lJ3MgdXNlci1kZWZpbmVkCisgICAgZmVhdHVyZXMgZnJhZ21lbnQgWyR7bWFjaGluZX0tdXNlci1mZWF0dXJlcy5zY2NdLgorICAgICIiIgorICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisKKyAgICBwcmludCAiVGhlIGN1cnJlbnQgc2V0IG9mIG1hY2hpbmUtc3BlY2lmaWMgZmVhdHVyZXMgZm9yICVzIGlzOiIgJSBtYWNoaW5lCisgICAgcHJpbnQgZ2VuX2Nob2ljZXNfc3RyKGZlYXR1cmVzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9ybShzY3JpcHRzX3BhdGgsIG1hY2hpbmUpOgorICAgICIiIgorICAgIERpc3BsYXkgdGhlIGxpc3Qgb2YgZmVhdHVyZXMgdXNlZCBpbiBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQKKyAgICBmZWF0dXJlcyBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWZlYXR1cmVzLnNjY10sIHByb21wdCB0aGUgdXNlcgorICAgIGZvciBvbmUgb3IgbW9yZSB0byByZW1vdmUsIGFuZCByZW1vdmUgdGhlbS4KKyAgICAiIiIKKyAgICBmZWF0dXJlcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorCisgICAgcHJpbnQgIlNwZWNpZnkgdGhlIGZlYXR1cmVzIHRvIHJlbW92ZToiCisgICAgaW5wdXQgPSByYXdfaW5wdXQoZ2VuX2Nob2ljZXNfc3RyKGZlYXR1cmVzKSkKKyAgICBybV9jaG9pY2VzID0gaW5wdXQuc3BsaXQoKQorICAgIHJtX2Nob2ljZXMuc29ydCgpCisKKyAgICByZW1vdmVkID0gW10KKworICAgIGZvciBjaG9pY2UgaW4gcmV2ZXJzZWQocm1fY2hvaWNlcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlkeCA9IGludChjaG9pY2UpIC0gMQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJXMpLCBleGl0aW5nIiAlIGNob2ljZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgaWR4IDwgMCBvciBpZHggPj0gbGVuKGZlYXR1cmVzKToKKyAgICAgICAgICAgIHByaW50ICJJbnZhbGlkIGNob2ljZSAoJWQpLCBleGl0aW5nIiAlIChpZHggKyAxKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcmVtb3ZlZC5hcHBlbmQoZmVhdHVyZXMucG9wKGlkeCkpCisKKyAgICB3cml0ZV9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGZlYXR1cmVzKQorCisgICAgcHJpbnQgIlJlbW92ZWQgZmVhdHVyZXM6IgorICAgIGZvciByIGluIHJlbW92ZWQ6CisgICAgICAgIHByaW50ICJcdCVzIiAlIHIKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZXMpOgorICAgICIiIgorICAgIEFkZCBvbmUgb3IgbW9yZSBmZWF0dXJlcyBhIG1hY2hpbmUncyB1c2VyLWRlZmluZWQgZmVhdHVyZXMKKyAgICBmcmFnbWVudCBbJHttYWNoaW5lfS11c2VyLWZlYXR1cmVzLnNjY10uCisgICAgIiIiCisgICAgbmV3X2l0ZW1zID0gW10KKworICAgIGZvciBpdGVtIGluIGZlYXR1cmVzOgorICAgICAgICBpZiBub3QgaXRlbS5lbmRzd2l0aCgiLnNjYyIpOgorICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgZmVhdHVyZSAoJXMpLCBleGl0aW5nIiAlIGl0ZW0KKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIG5ld19pdGVtcy5hcHBlbmQoaXRlbSkKKworICAgIGN1cl9pdGVtcyA9IHJlYWRfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGN1cl9pdGVtcy5leHRlbmQobmV3X2l0ZW1zKQorCisgICAgd3JpdGVfZmVhdHVyZXMoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBjdXJfaXRlbXMpCisKKyAgICBwcmludCAiQWRkZWQgZmVhdHVyZXM6IgorICAgIGZvciBuIGluIG5ld19pdGVtczoKKyAgICAgICAgcHJpbnQgIlx0JXMiICUgbgorCisKK2RlZiBmaW5kX2ZlYXR1cmVfdXJsKGdpdF91cmwpOgorICAgICIiIgorICAgIEZpbmQgdGhlIHVybCBvZiB0aGUga2Vybi1mZWF0dXJlcy5yYyBrZXJuZWwgZm9yIHRoZSBrZXJuZWwgcmVwbworICAgIHNwZWNpZmllZCBmcm9tIHRoZSBCU1AncyBrZXJuZWwgcmVjaXBlIFNSQ19VUkkuCisgICAgIiIiCisgICAgZmVhdHVyZV91cmwgPSAiIgorICAgIGlmIGdpdF91cmwuc3RhcnRzd2l0aCgiZ2l0Oi8vIik6CisgICAgICAgIGdpdF91cmwgPSBnaXRfdXJsW2xlbigiZ2l0Oi8vIik6XS5zdHJpcCgpCisgICAgICAgIHMgPSBnaXRfdXJsLnNwbGl0KCIvIikKKyAgICAgICAgaWYgc1sxXS5lbmRzd2l0aCgiLmdpdCIpOgorICAgICAgICAgICAgc1sxXSA9IHNbMV1bOmxlbihzWzFdKSAtIGxlbigiLmdpdCIpXQorICAgICAgICBmZWF0dXJlX3VybCA9ICJodHRwOi8vIiArIHNbMF0gKyAiL2NnaXQvY2dpdC5jZ2kvIiArIHNbMV0gKyBcCisgICAgICAgICAgICAiL3BsYWluL21ldGEvY2ZnL2tlcm4tZmVhdHVyZXMucmM/aD1tZXRhIgorCisgICAgcmV0dXJuIGZlYXR1cmVfdXJsCisKKworZGVmIGZpbmRfZmVhdHVyZV9kZXNjKGxpbmVzKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSBmZWF0dXJlIGRlc2NyaXB0aW9uIGFuZCBjb21wYXRpYmlsaXR5IGluIHRoZSBwYXNzZWQtaW4KKyAgICBzZXQgb2YgbGluZXMuICBSZXR1cm5zIGEgc3RyaW5nIHN0cmluZyBvZiB0aGUgZm9ybSAnZGVzYworICAgIFtjb21wYXRdJy4KKyAgICAiIiIKKyAgICBkZXNjID0gIm5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSIKKyAgICBjb21wYXQgPSAidW5rbm93biIKKworICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBpZHggPSBsaW5lLmZpbmQoIktGRUFUVVJFX0RFU0NSSVBUSU9OIikKKyAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgZGVzYyA9IGxpbmVbaWR4ICsgbGVuKCJLRkVBVFVSRV9ERVNDUklQVElPTiIpOl0uc3RyaXAoKQorICAgICAgICAgICAgaWYgZGVzYy5zdGFydHN3aXRoKCJcIiIpOgorICAgICAgICAgICAgICAgIGRlc2MgPSBkZXNjWzE6XQorICAgICAgICAgICAgICAgIGlmIGRlc2MuZW5kc3dpdGgoIlwiIik6CisgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBkZXNjWzotMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgiS0ZFQVRVUkVfQ09NUEFUSUJJTElUWSIpCisgICAgICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICAgICAgY29tcGF0ID0gbGluZVtpZHggKyBsZW4oIktGRUFUVVJFX0NPTVBBVElCSUxJVFkiKTpdLnN0cmlwKCkKKworICAgIHJldHVybiBkZXNjICsgIiBbIiArIGNvbXBhdCArICJdIgorCisKK2RlZiBwcmludF9mZWF0dXJlX2Rlc2NzKGxheWVyLCBmZWF0dXJlX2Rpcik6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIGZlYXR1cmUgZGVzY3JpcHRpb25zIGZvciB0aGUgZmVhdHVyZXMgaW4gZmVhdHVyZV9kaXIuCisgICAgIiIiCisgICAga2VybmVsX2ZpbGVzX2ZlYXR1cmVzID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVfZGlyKQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGtlcm5lbF9maWxlc19mZWF0dXJlcyk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgifiIpIG9yIGZpbGUuZW5kc3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLnNjYyIpOgorICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKGxheWVyLCAicmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9kaXIgKyAiLyIgKyBmaWxlKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZ1bGxwYXRoKQorICAgICAgICAgICAgICAgIGZlYXR1cmVfZGVzYyA9IGZpbmRfZmVhdHVyZV9kZXNjKGYucmVhZGxpbmVzKCkpCisgICAgICAgICAgICAgICAgcHJpbnQgZmVhdHVyZV9kaXIgKyAiLyIgKyBmaWxlICsgIjogIiArIGZlYXR1cmVfZGVzYworCisKK2RlZiB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3Qoc2NyaXB0c19wYXRoLCBtYWNoaW5lKToKKyAgICAiIiIKKyAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGFsbCB0aGUga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSBmb3IgdXNlIGluCisgICAgQlNQcywgYXMgZ2F0aGVyZWQgZnJvbSB0aGUgc2V0IG9mIGZlYXR1cmUgc291cmNlcy4KKyAgICAiIiIKKyAgICBsYXllciA9IGZpbmRfYnNwX2xheWVyKG1hY2hpbmUpCisgICAga2VybmVsID0gZmluZF9jdXJyZW50X2tlcm5lbChsYXllciwgbWFjaGluZSkKKyAgICBpZiBub3Qga2VybmVsOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBrZXJuZWwgZm9yIHRoaXMgQlNQLCBleGl0aW5nLiIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGNvbnRleHQgPSBjcmVhdGVfY29udGV4dChtYWNoaW5lLCAiYXJjaCIsIHNjcmlwdHNfcGF0aCkKKyAgICBjb250ZXh0WyJuYW1lIl0gPSAibmFtZSIKKyAgICBjb250ZXh0WyJmaWxlbmFtZSJdID0ga2VybmVsCisgICAgZ2l0dXJsID0gZmluZF9naXR1cmwoY29udGV4dCkKKyAgICBmZWF0dXJlX3VybCA9IGZpbmRfZmVhdHVyZV91cmwoZ2l0dXJsKQorCisgICAgZmVhdHVyZV9jbWQgPSAid2dldCAtcSAtTyAtICIgKyBmZWF0dXJlX3VybAorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZmVhdHVyZV9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKworICAgIHByaW50ICJUaGUgY3VycmVudCBzZXQgb2Yga2VybmVsIGZlYXR1cmVzIGF2YWlsYWJsZSB0byAlcyBpczpcbiIgJSBtYWNoaW5lCisKKyAgICBpZiB0bXA6CisgICAgICAgIHRtcGxpbmUgPSB0bXAuc3BsaXQoIlxuIikKKyAgICAgICAgaW5fa2VybmVsX29wdGlvbnMgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiB0bXBsaW5lOgorICAgICAgICAgICAgaWYgbm90ICI9IiBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGlmIGluX2tlcm5lbF9vcHRpb25zOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmICJrZXJuZWwtb3B0aW9ucyIgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgaW5fa2VybmVsX29wdGlvbnMgPSBUcnVlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGluX2tlcm5lbF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGZlYXR1cmVfZGVmID0gbGluZS5zcGxpdCgiPSIpCisgICAgICAgICAgICAgICAgZmVhdHVyZV90eXBlID0gZmVhdHVyZV9kZWZbMF0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlX2RlZlsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZGVzYyA9IGdldF9mZWF0dXJlX2Rlc2MoZ2l0dXJsLCBmZWF0dXJlKQorICAgICAgICAgICAgICAgIHByaW50ICIlczogJXMiICUgKGZlYXR1cmUsIGRlc2MpCisKKyAgICBwcmludCAiW2xvY2FsXSIKKworICAgIHByaW50X2ZlYXR1cmVfZGVzY3MobGF5ZXIsICJjZmciKQorICAgIHByaW50X2ZlYXR1cmVfZGVzY3MobGF5ZXIsICJmZWF0dXJlcyIpCisKKworZGVmIGZpbmRfZmVhdHVyZV9kZXNjX3VybChnaXRfdXJsLCBmZWF0dXJlKToKKyAgICAiIiIKKyAgICBGaW5kIHRoZSB1cmwgb2YgdGhlIGtlcm5lbCBmZWF0dXJlIGluIHRoZSBrZXJuZWwgcmVwbyBzcGVjaWZpZWQKKyAgICBmcm9tIHRoZSBCU1AncyBrZXJuZWwgcmVjaXBlIFNSQ19VUkkuCisgICAgIiIiCisgICAgZmVhdHVyZV9kZXNjX3VybCA9ICIiCisgICAgaWYgZ2l0X3VybC5zdGFydHN3aXRoKCJnaXQ6Ly8iKToKKyAgICAgICAgZ2l0X3VybCA9IGdpdF91cmxbbGVuKCJnaXQ6Ly8iKTpdLnN0cmlwKCkKKyAgICAgICAgcyA9IGdpdF91cmwuc3BsaXQoIi8iKQorICAgICAgICBpZiBzWzFdLmVuZHN3aXRoKCIuZ2l0Iik6CisgICAgICAgICAgICBzWzFdID0gc1sxXVs6bGVuKHNbMV0pIC0gbGVuKCIuZ2l0IildCisgICAgICAgIGZlYXR1cmVfZGVzY191cmwgPSAiaHR0cDovLyIgKyBzWzBdICsgIi9jZ2l0L2NnaXQuY2dpLyIgKyBzWzFdICsgXAorICAgICAgICAgICAgIi9wbGFpbi9tZXRhL2NmZy9rZXJuZWwtY2FjaGUvIiArIGZlYXR1cmUgKyAiP2g9bWV0YSIKKworICAgIHJldHVybiBmZWF0dXJlX2Rlc2NfdXJsCisKKworZGVmIGdldF9mZWF0dXJlX2Rlc2MoZ2l0X3VybCwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgZmVhdHVyZSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybSAnZGVzY3JpcHRpb24gW2NvbXBhdGliaWxpdHldCisgICAgQlNQcywgYXMgZ2F0aGVyZWQgZnJvbSB0aGUgc2V0IG9mIGZlYXR1cmUgc291cmNlcy4KKyAgICAiIiIKKyAgICBmZWF0dXJlX2Rlc2NfdXJsID0gZmluZF9mZWF0dXJlX2Rlc2NfdXJsKGdpdF91cmwsIGZlYXR1cmUpCisgICAgZmVhdHVyZV9kZXNjX2NtZCA9ICJ3Z2V0IC1xIC1PIC0gIiArIGZlYXR1cmVfZGVzY191cmwKKyAgICB0bXAgPSBzdWJwcm9jZXNzLlBvcGVuKGZlYXR1cmVfZGVzY19jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKworICAgIHJldHVybiBmaW5kX2ZlYXR1cmVfZGVzYyh0bXAuc3BsaXQoIlxuIikpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgRGlzcGxheSB0aGUgZGVzY3JpcHRpb24gb2YgYSBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZSBhdmFpbGFibGUgZm9yCisgICAgdXNlIGluIGEgQlNQLgorICAgICIiIgorICAgIGxheWVyID0gZmluZF9ic3BfbGF5ZXIobWFjaGluZSkKKworICAgIGtlcm5lbCA9IGZpbmRfY3VycmVudF9rZXJuZWwobGF5ZXIsIG1hY2hpbmUpCisgICAgaWYgbm90IGtlcm5lbDoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRldGVybWluZSB0aGUga2VybmVsIGZvciB0aGlzIEJTUCwgZXhpdGluZy4iCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBjb250ZXh0ID0gY3JlYXRlX2NvbnRleHQobWFjaGluZSwgImFyY2giLCBzY3JpcHRzX3BhdGgpCisgICAgY29udGV4dFsibmFtZSJdID0gIm5hbWUiCisgICAgY29udGV4dFsiZmlsZW5hbWUiXSA9IGtlcm5lbAorICAgIGdpdHVybCA9IGZpbmRfZ2l0dXJsKGNvbnRleHQpCisKKyAgICBkZXNjID0gZ2V0X2ZlYXR1cmVfZGVzYyhnaXR1cmwsIGZlYXR1cmUpCisKKyAgICBwcmludCBkZXNjCisKKworZGVmIGNoZWNrX2ZlYXR1cmVfbmFtZShmZWF0dXJlX25hbWUpOgorICAgICIiIgorICAgIFNhbml0eS1jaGVjayB0aGUgZmVhdHVyZSBuYW1lIGZvciBjcmVhdGUvZGVzdHJveS4gIFJldHVybiBGYWxzZSBpZiBub3QgT0suCisgICAgIiIiCisgICAgaWYgbm90IGZlYXR1cmVfbmFtZS5lbmRzd2l0aCgiLnNjYyIpOgorICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlIG5hbWUgKG11c3QgZW5kIHdpdGggLnNjYykgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX25hbWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiAiLyIgaW4gZmVhdHVyZV9uYW1lOgorICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlIG5hbWUgKGRvbid0IHNwZWNpZnkgZGlyZWN0b3J5KSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfbmFtZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIGNoZWNrX2NyZWF0ZV9pbnB1dChmZWF0dXJlX2l0ZW1zKToKKyAgICAiIiIKKyAgICBTYW5pdHktY2hlY2sgdGhlIGNyZWF0ZSBpbnB1dC4gIFJldHVybiBGYWxzZSBpZiBub3QgT0suCisgICAgIiIiCisgICAgaWYgbm90IGNoZWNrX2ZlYXR1cmVfbmFtZShmZWF0dXJlX2l0ZW1zWzBdKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBmZWF0dXJlX2l0ZW1zWzFdLmVuZHN3aXRoKCIucGF0Y2giKSBvciBmZWF0dXJlX2l0ZW1zWzFdLnN0YXJ0c3dpdGgoIkNPTkZJR18iKToKKyAgICAgICAgcHJpbnQgIk1pc3NpbmcgZGVzY3JpcHRpb24gYW5kL29yIGNvbXBhdGliaWx0eSBbJXNdLCBleGl0aW5nIiAlIGZlYXR1cmVfaXRlbXNbMV0KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBmZWF0dXJlX2l0ZW1zWzJdLmVuZHN3aXRoKCIucGF0Y2giKSBvciBmZWF0dXJlX2l0ZW1zWzJdLnN0YXJ0c3dpdGgoIkNPTkZJR18iKToKKyAgICAgICAgcHJpbnQgIk1pc3NpbmcgZGVzY3JpcHRpb24gYW5kL29yIGNvbXBhdGliaWxpdHkgWyVzXSwgZXhpdGluZyIgJSBmZWF0dXJlX2l0ZW1zWzFdCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZV9pdGVtcyk6CisgICAgIiIiCisgICAgQ3JlYXRlIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlIGluIGEgQlNQLgorICAgICIiIgorICAgIGlmIG5vdCBjaGVja19jcmVhdGVfaW5wdXQoZmVhdHVyZV9pdGVtcyk6CisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmZWF0dXJlID0gZmVhdHVyZV9pdGVtc1swXQorICAgIGZlYXR1cmVfYmFzZW5hbWUgPSBmZWF0dXJlLnNwbGl0KCIuIilbMF0KKyAgICBmZWF0dXJlX2Rlc2NyaXB0aW9uID0gZmVhdHVyZV9pdGVtc1sxXQorICAgIGZlYXR1cmVfY29tcGF0ID0gZmVhdHVyZV9pdGVtc1syXQorCisgICAgcGF0Y2hlcyA9IFtdCisgICAgY2ZnX2l0ZW1zID0gW10KKworICAgIGZvciBpdGVtIGluIGZlYXR1cmVfaXRlbXNbMzpdOgorICAgICAgICBpZiBpdGVtLmVuZHN3aXRoKCIucGF0Y2giKToKKyAgICAgICAgICAgIHBhdGNoZXMuYXBwZW5kKGl0ZW0pCisgICAgICAgIGVsaWYgaXRlbS5zdGFydHN3aXRoKCJDT05GSUciKToKKyAgICAgICAgICAgIGlmICgiPXkiIGluIGl0ZW0gb3IgIj1tIiBpbiBpdGVtKToKKyAgICAgICAgICAgICAgICBjZmdfaXRlbXMuYXBwZW5kKGl0ZW0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAiSW52YWxpZCBmZWF0dXJlIGl0ZW0gKG11c3QgYmUgLnBhdGNoIG9yIENPTkZJR18qKSBbJXNdLCBleGl0aW5nIiAlIGl0ZW0KKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiY2ZnIgorICAgIGlmIHBhdGNoZXM6CisgICAgICAgIGZlYXR1cmVfZGlybmFtZSA9ICJmZWF0dXJlcyIKKworICAgIGZpbGVzZGlyID0gZmluZF9maWxlc2RpcihzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgaWYgbm90IGZpbGVzZGlyOgorICAgICAgICBwcmludCAiQ291bGRuJ3QgYWRkIGZlYXR1cmUgKCVzKSwgbm8gJ2ZpbGVzJyBkaXIgZm91bmQiICUgZmVhdHVyZQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmVhdGRpciA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgZmVhdHVyZV9kaXJuYW1lKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0ZGlyKToKKyAgICAgICAgb3MubWtkaXIoZmVhdGRpcikKKworICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocGF0Y2gpOgorICAgICAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgcGF0Y2ggKCVzKSwgZXhpdGluZyIgJSBwYXRjaAorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICBmZWF0ZGlyX3BhdGNoID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGJhc2VuYW1lKQorICAgICAgICBzaHV0aWwuY29weWZpbGUocGF0Y2gsIGZlYXRkaXJfcGF0Y2gpCisKKyAgICBuZXdfY2ZnX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmVfYmFzZW5hbWUgKyAiLmNmZyIpCisgICAgbmV3X2NmZ19maWxlID0gb3BlbihuZXdfY2ZnX2ZpbGVuYW1lLCAidyIpCisgICAgZm9yIGNmZ19pdGVtIGluIGNmZ19pdGVtczoKKyAgICAgICAgbmV3X2NmZ19maWxlLndyaXRlKGNmZ19pdGVtICsgIlxuIikKKyAgICBuZXdfY2ZnX2ZpbGUuY2xvc2UoKQorCisgICAgbmV3X2ZlYXR1cmVfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgZmVhdHVyZV9iYXNlbmFtZSArICIuc2NjIikKKyAgICBuZXdfZmVhdHVyZV9maWxlID0gb3BlbihuZXdfZmVhdHVyZV9maWxlbmFtZSwgInciKQorICAgIG5ld19mZWF0dXJlX2ZpbGUud3JpdGUoImRlZmluZSBLRkVBVFVSRV9ERVNDUklQVElPTiBcIiIgKyBmZWF0dXJlX2Rlc2NyaXB0aW9uICsgIlwiXG4iKQorICAgIG5ld19mZWF0dXJlX2ZpbGUud3JpdGUoImRlZmluZSBLRkVBVFVSRV9DT01QQVRJQklMSVRZICIgKyBmZWF0dXJlX2NvbXBhdCArICJcblxuIikKKworICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBwYXRjaF9kaXIsIHBhdGNoX2ZpbGUgPSBvcy5wYXRoLnNwbGl0KHBhdGNoKQorICAgICAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJwYXRjaCAiICsgcGF0Y2hfZmlsZSArICJcbiIpCisKKyAgICBuZXdfZmVhdHVyZV9maWxlLndyaXRlKCJrY29uZiBub24taGFyZHdhcmUgIiArIGZlYXR1cmVfYmFzZW5hbWUgKyAiLmNmZ1xuIikKKyAgICBuZXdfZmVhdHVyZV9maWxlLmNsb3NlKCkKKworICAgIHByaW50ICJBZGRlZCBmZWF0dXJlOiIKKyAgICBwcmludCAiXHQlcyIgJSBmZWF0dXJlX2Rpcm5hbWUgKyAiLyIgKyBmZWF0dXJlCisKKworZGVmIGZlYXR1cmVfaW5fdXNlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBmZWF0dXJlIGlzIGluIHVzZSBieSB0aGUgQlNQLgorICAgIFJldHVybiBUcnVlIGlmIHNvLCBGYWxzZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgZmVhdHVyZXMgPSByZWFkX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSkKKyAgICBmb3IgZiBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZiA9PSBmZWF0dXJlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZmVhdHVyZV9yZW1vdmUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKToKKyAgICAiIiIKKyAgICBSZW1vdmUgdGhlIHNwZWNpZmllZCBmZWF0dXJlIGZyb20gdGhlIGF2YWlsYWJsZSByZWNpcGUtc3BhY2UKKyAgICBmZWF0dXJlcyBkZWZpbmVkIGZvciB0aGUgQlNQLgorICAgICIiIgorICAgIGZlYXR1cmVzID0gcmVhZF9mZWF0dXJlcyhzY3JpcHRzX3BhdGgsIG1hY2hpbmUpCisgICAgbmV3X2ZlYXR1cmVzID0gW10KKyAgICBmb3IgZiBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZiA9PSBmZWF0dXJlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmV3X2ZlYXR1cmVzLmFwcGVuZChmKQorICAgIHdyaXRlX2ZlYXR1cmVzKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgbmV3X2ZlYXR1cmVzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95KHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgZmVhdHVyZSk6CisgICAgIiIiCisgICAgUmVtb3ZlIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlIGZyb20gYSBCU1AuCisgICAgIiIiCisgICAgaWYgbm90IGNoZWNrX2ZlYXR1cmVfbmFtZShmZWF0dXJlKToKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGZlYXR1cmVfaW5fdXNlKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgImZlYXR1cmVzLyIgKyBmZWF0dXJlKSBvciBcCisgICAgICAgICAgICBmZWF0dXJlX2luX3VzZShzY3JpcHRzX3BhdGgsIG1hY2hpbmUsICJjZmcvIiArIGZlYXR1cmUpOgorICAgICAgICBwcmludCAiRmVhdHVyZSAlcyBpcyBpbiB1c2UgKHVzZSAnZmVhdHVyZSBybScgdG8gdW4tdXNlIGl0IGZpcnN0KSwgZXhpdGluZyIgJSBmZWF0dXJlCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmaWxlc2RpciA9IGZpbmRfZmlsZXNkaXIoc2NyaXB0c19wYXRoLCBtYWNoaW5lKQorICAgIGlmIG5vdCBmaWxlc2RpcjoKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGRlc3Ryb3kgZmVhdHVyZSAoJXMpLCBubyAnZmlsZXMnIGRpciBmb3VuZCIgJSBmZWF0dXJlCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBmZWF0dXJlX2Rpcm5hbWUgPSAiZmVhdHVyZXMiCisgICAgZmVhdGRpciA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgZmVhdHVyZV9kaXJuYW1lKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmZWF0ZGlyKToKKyAgICAgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgZmVhdHVyZSBkaXJlY3RvcnkgKCVzKSIgJSBmZWF0dXJlX2Rpcm5hbWUKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGZlYXR1cmVfZnFuID0gb3MucGF0aC5qb2luKGZlYXRkaXIsIGZlYXR1cmUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXR1cmVfZnFuKToKKyAgICAgICAgZmVhdHVyZV9kaXJuYW1lID0gImNmZyIKKyAgICAgICAgZmVhdGRpciA9IG9zLnBhdGguam9pbihmaWxlc2RpciwgZmVhdHVyZV9kaXJuYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmVhdGRpcik6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgZmluZCBmZWF0dXJlIGRpcmVjdG9yeSAoJXMpIiAlIGZlYXR1cmVfZGlybmFtZQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgZmVhdHVyZV9mcW4gPSBvcy5wYXRoLmpvaW4oZmVhdGRpciwgZmVhdHVyZV9maWxlbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZlYXR1cmVfZnFuKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBmaW5kIGZlYXR1cmUgKCVzKSIgJSBmZWF0dXJlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZiA9IG9wZW4oZmVhdHVyZV9mcW4sICJyIikKKyAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgcyA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoInBhdGNoICIpIG9yIHMuc3RhcnRzd2l0aCgia2NvbmYgIik6CisgICAgICAgICAgICBzcGxpdF9saW5lID0gcy5zcGxpdCgpCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihmZWF0ZGlyLCBzcGxpdF9saW5lWy0xXSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgZi5jbG9zZSgpCisgICAgb3MucmVtb3ZlKGZlYXR1cmVfZnFuKQorCisgICAgZmVhdHVyZV9yZW1vdmUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBmZWF0dXJlKQorCisgICAgcHJpbnQgIlJlbW92ZWQgZmVhdHVyZToiCisgICAgcHJpbnQgIlx0JXMiICUgZmVhdHVyZV9kaXJuYW1lICsgIi8iICsgZmVhdHVyZQorCisKK2RlZiBiYXNlX2JyYW5jaGVzKGNvbnRleHQpOgorICAgICIiIgorICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGJhc2UgYnJhbmNoZXMgZm91bmQgaW4gdGhlIGtlcm5lbCBnaXQgcmVwby4KKyAgICAiIiIKKyAgICBnaXR1cmwgPSBmaW5kX2dpdHVybChjb250ZXh0KQorCisgICAgcHJpbnQgIkdldHRpbmcgYnJhbmNoZXMgZnJvbSByZW1vdGUgcmVwbyAlcy4uLiIgJSBnaXR1cmwKKworICAgIGdpdGNtZCA9ICJnaXQgbHMtcmVtb3RlICVzICpoZWFkcyogMj4mMSIgJSAoZ2l0dXJsKQorICAgIHRtcCA9IHN1YnByb2Nlc3MuUG9wZW4oZ2l0Y21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQucmVhZCgpCisKKyAgICBicmFuY2hlcyA9IFtdCisKKyAgICBpZiB0bXA6CisgICAgICAgIHRtcGxpbmUgPSB0bXAuc3BsaXQoIlxuIikKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wbGluZToKKyAgICAgICAgICAgIGlmIGxlbihsaW5lKT09MDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLmVuZHN3aXRoKCJiYXNlIik6CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZHggPSBsaW5lLmZpbmQoInJlZnMvaGVhZHMvIikKKyAgICAgICAgICAgIGticmFuY2ggPSBsaW5lW2lkeCArIGxlbigicmVmcy9oZWFkcy8iKTpdCisgICAgICAgICAgICBpZiBrYnJhbmNoLmZpbmQoIi8iKSA9PSAtMSBhbmQga2JyYW5jaC5maW5kKCJiYXNlIikgPT0gLTE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlkeCA9IGticmFuY2guZmluZCgiYmFzZSIpCisgICAgICAgICAgICBicmFuY2hlcy5hcHBlbmQoa2JyYW5jaFs6aWR4IC0gMV0pCisKKyAgICByZXR1cm4gYnJhbmNoZXMKKworCitkZWYgYWxsX2JyYW5jaGVzKGNvbnRleHQpOgorICAgICIiIgorICAgIFJldHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBicmFuY2hlcyBmb3VuZCBpbiB0aGUga2VybmVsIGdpdCByZXBvLgorICAgICIiIgorICAgIGdpdHVybCA9IGZpbmRfZ2l0dXJsKGNvbnRleHQpCisKKyAgICBwcmludCAiR2V0dGluZyBicmFuY2hlcyBmcm9tIHJlbW90ZSByZXBvICVzLi4uIiAlIGdpdHVybAorCisgICAgZ2l0Y21kID0gImdpdCBscy1yZW1vdGUgJXMgKmhlYWRzKiAyPiYxIiAlIChnaXR1cmwpCisgICAgdG1wID0gc3VicHJvY2Vzcy5Qb3BlbihnaXRjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKworICAgIGJyYW5jaGVzID0gW10KKworICAgIGJhc2VfcHJlZml4ZXMgPSBOb25lCisKKyAgICB0cnk6CisgICAgICAgIGJyYW5jaGVzX2Jhc2UgPSBjb250ZXh0WyJicmFuY2hlc19iYXNlIl0KKyAgICAgICAgaWYgYnJhbmNoZXNfYmFzZToKKyAgICAgICAgICAgIGJhc2VfcHJlZml4ZXMgPSBicmFuY2hlc19iYXNlLnNwbGl0KCI6IikKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIGFyY2ggPSBjb250ZXh0WyJhcmNoIl0KKworICAgIGlmIHRtcDoKKyAgICAgICAgdG1wbGluZSA9IHRtcC5zcGxpdCgiXG4iKQorICAgICAgICBmb3IgbGluZSBpbiB0bXBsaW5lOgorICAgICAgICAgICAgaWYgbGVuKGxpbmUpPT0wOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJyZWZzL2hlYWRzLyIpCisgICAgICAgICAgICBrYnJhbmNoID0gbGluZVtpZHggKyBsZW4oInJlZnMvaGVhZHMvIik6XQorICAgICAgICAgICAga2JyYW5jaF9wcmVmaXggPSBrYnJhbmNoLnJzcGxpdCgiLyIsIDEpWzBdCisKKyAgICAgICAgICAgIGlmIGJhc2VfcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgZm9yIGJhc2VfcHJlZml4IGluIGJhc2VfcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGticmFuY2hfcHJlZml4ID09IGJhc2VfcHJlZml4OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMuYXBwZW5kKGticmFuY2gpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgKGticmFuY2guZmluZCgiLyIpICE9IC0xIGFuZAorICAgICAgICAgICAgICAgIChrYnJhbmNoLmZpbmQoInN0YW5kYXJkIikgIT0gLTEgb3Iga2JyYW5jaC5maW5kKCJiYXNlIikgIT0gLTEpIG9yCisgICAgICAgICAgICAgICAga2JyYW5jaCA9PSAiYmFzZSIpOgorICAgICAgICAgICAgICAgIGJyYW5jaGVzLmFwcGVuZChrYnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICByZXR1cm4gYnJhbmNoZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtLy5naXRpZ25vcmUgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODgzNjdhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDEwMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1ldmRldiBcCisgICAgICAgICAgIHhmODYtaW5wdXQtbW91c2UgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMga2VybmVsLWRldmljZXRyZWUiCisKK0VYVFJBX0lNQUdFREVQRU5EUyArPSAidS1ib290IgorCit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ0dW5lZmlsZSIgcHJpbzoiNDAiIG1zZzoiV2hpY2ggbWFjaGluZSB0dW5pbmcgd291bGQgeW91IGxpa2UgdG8gdXNlPyIgZGVmYXVsdDoidHVuZV9jb3J0ZXhhOCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2FybTExMzZqZl9zIiBtc2c6ImFybTExMzZqZi1zIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfYXJtOTIwdCIgbXNnOiJhcm05MjB0IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfYXJtOTI2ZWpzIiBtc2c6ImFybTkyNmVqcyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2FybTl0ZG1pIiBtc2c6ImFybTl0ZG1pIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTUiIG1zZzoiY29ydGV4YTUgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhhNyIgbXNnOiJjb3J0ZXhhNyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleGE4IiBtc2c6ImNvcnRleGE4IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4YTkiIG1zZzoiY29ydGV4YTkgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhhMTUiIG1zZzoiY29ydGV4YTE1IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfY29ydGV4bTEiIG1zZzoiY29ydGV4bTEgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3J0ZXhtMyIgbXNnOiJjb3J0ZXhtMyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcnRleHI0IiBtc2c6ImNvcnRleHI0IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfZXA5MzEyIiBtc2c6ImVwOTMxMiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2l3bW14dCIgbXNnOiJpd21teHQgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9zdHJvbmdhcm0xMTAwIiBtc2c6InN0cm9uZ2FybTExMDAgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV94c2NhbGUiIG1zZzoieHNjYWxlIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfYXJtMTEzNmpmX3MiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfYXJtOTIwdCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTIwdC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2FybTkyNmVqcyI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfYXJtOXRkbWkiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTl0ZG1pLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4YTUiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE1LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4YTciOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4YTgiOiB9fQorREVGQVVMVFRVTkUgPz0gImNvcnRleGE4aGYtbmVvbiIKK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGE5IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOS5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2NvcnRleGExNSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE1LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4bTEiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4bTMiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfY29ydGV4cjQiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleHI0LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfZXA5MzEyIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1lcDkzMTIuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9pd21teHQiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3N0cm9uZ2FybTExMDAiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN0cm9uZ2FybTExMDAuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV94c2NhbGUiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXhzY2FsZS5pbmMKKworSU1BR0VfRlNUWVBFUyArPSAidGFyLmJ6MiBqZmZzMiIKK0VYVFJBX0lNQUdFQ01EX2pmZnMyID0gIi1sbnAgIgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5TzAiCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidUltYWdlIgorS0VSTkVMX0RFVklDRVRSRUUgPSAiYW0zMzV4LWJvbmUuZHRiIGFtMzM1eC1ib25lYmxhY2suZHRiIgorS0VSTkVMX0VYVFJBX0FSR1MgKz0gIkxPQURBRERSPSR7VUJPT1RfRU5UUllQT0lOVH0iCisKK1NQTF9CSU5BUlkgPSAiTUxPIgorVUJPT1RfU1VGRklYID0gImltZyIKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6InVib290X21hY2hpbmUiIHByaW86IjQwIiBtc2c6IlBsZWFzZSBzcGVjaWZ5IGEgdmFsdWUgZm9yIFVCT09UX01BQ0hJTkU6IiBkZWZhdWx0OiJhbTMzNXhfZXZtX2NvbmZpZyIgfX0KK1VCT09UX01BQ0hJTkUgPSAie3s9dWJvb3RfbWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToidWJvb3RfZW50cnlwb2ludCIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSBmb3IgVUJPT1RfRU5UUllQT0lOVDoiIGRlZmF1bHQ6IjB4ODAwMDgwMDAiIH19CitVQk9PVF9FTlRSWVBPSU5UID0gInt7PXVib290X2VudHJ5cG9pbnR9fSIKK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6InVib290X2xvYWRhZGRyZXNzIiBwcmlvOiI0MCIgbXNnOiJQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9MT0FEQUREUkVTUzoiIGRlZmF1bHQ6IjB4ODAwMDgwMDAiIH19CitVQk9PVF9MT0FEQUREUkVTUyA9ICJ7ez11Ym9vdF9sb2FkYWRkcmVzc319IgorCitNQUNISU5FX0ZFQVRVUkVTID0gInVzYmdhZGdldCB1c2Job3N0IHZmYXQgYWxzYSIKKworSU1BR0VfQk9PVF9GSUxFUyA/PSAidS1ib290LiR7VUJPT1RfU1VGRklYfSBNTE8iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQyZDAyCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1Mjg5MwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKQEAgLTAsMCArMSwzNCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYgeHNlcnZlciA9PSAieSI6IH19IHRoaXMKK1NlY3Rpb24gIk1vZHVsZSIKKwlMb2FkCSJleHRtb2QiCisJTG9hZAkiZGJlIgorCUxvYWQJImdseCIKKwlMb2FkCSJmcmVldHlwZSIKKwlMb2FkCSJ0eXBlMSIKKwlMb2FkCSJyZWNvcmQiCisJTG9hZAkiZHJpIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorCUlkZW50aWZpZXIJIkJ1aWx0aW4gRGVmYXVsdCBNb25pdG9yIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisJSWRlbnRpZmllcgkiQnVpbHRpbiBEZWZhdWx0IGZiZGV2IERldmljZSAwIgorCURyaXZlcgkJIm9tYXBmYiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorCUlkZW50aWZpZXIJIkJ1aWx0aW4gRGVmYXVsdCBmYmRldiBTY3JlZW4gMCIKKwlEZXZpY2UJCSJCdWlsdGluIERlZmF1bHQgZmJkZXYgRGV2aWNlIDAiCisJTW9uaXRvcgkJIkJ1aWx0aW4gRGVmYXVsdCBNb25pdG9yIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisJSWRlbnRpZmllcgkiQnVpbHRpbiBEZWZhdWx0IExheW91dCIKKwlTY3JlZW4JCSJCdWlsdGluIERlZmF1bHQgZmJkZXYgU2NyZWVuIDAiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckZsYWdzIgorCU9wdGlvbgkJIkRvbnRaYXAiICAiMCIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MzAwMwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYgeHNlcnZlciA9PSAieSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtbm9uX2hhcmR3YXJlLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmZjOTBjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1ub25faGFyZHdhcmUuY2ZnCkBAIC0wLDAgKzEsMzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1ub25faGFyZHdhcmUuY2ZnCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19ORlNfREVGX0ZJTEVfSU9fU0laRT0xMDI0CisKKyMKKyMgTXVsdGlwbGUgRGV2aWNlIFN1cHBvcnQKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19OT19IWj15CisKKyMKKyMgQ1BVSWRsZQorIworQ09ORklHX0NQVV9JRExFPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19ERUJVR19GUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE1fREVCVUc9eQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZjNiNQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKQEAgLTAsMCArMSwxNCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgcHJlZW1wdC1ydAorZGVmaW5lIEtBUkNIIGFybQorCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3IgcHJlZW1wdC1ydCBrZXJuZWxzCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxNGMyYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIGFybQorCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHN0YW5kYXJkIGtlcm5lbHMKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxYzI1MgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIGFybQorCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlMWFlMAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsMzIxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfQVJDSF9PTUFQPXkKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMz15CisKKyMKKyMgVEkgT01BUCBDb21tb24gRmVhdHVyZXMKKyMKK0NPTkZJR19BUkNIX09NQVAyUExVUz15CisKKyMKKyMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CitDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQorQ09ORklHX09NQVBfU01BUlRSRUZMRVg9eQorQ09ORklHX09NQVBfU01BUlRSRUZMRVhfQ0xBU1MzPXkKK0NPTkZJR19PTUFQX01CT1hfRldLPW0KK0NPTkZJR19PTUFQX01CT1hfS0ZJRk9fU0laRT0yNTYKKworIworIyBPTUFQIEJvYXJkIFR5cGUKKyMKK0NPTkZJR19NQUNIX09NQVAzX0JFQUdMRT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CRUU9eQorQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19MRURTPXkKKworCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMX09NQVA9eQorQ09ORklHX1NFUklBTF9PTUFQX0NPTlNPTEU9eQorCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX1ZGUD15CitDT05GSUdfTkVPTj15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX1JVTlRJTUU9eQorCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPXkKKworQ09ORklHX01URF9OQU5EX09NQVAyPXkKKworQ09ORklHX01URF9VQkk9eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX1NNU0M5MTFYPXkKK0NPTkZJR19VU0JfTkVUX1NNU0M5NVhYPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfRVZERVY9eQorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX09NQVA9eQorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCitDT05GSUdfR1BJT19UV0w0MDMwPXkKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCitDT05GSUdfT01BUF9XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19UV0w0MDMwX0NPUkU9eQorQ09ORklHX1JFR1VMQVRPUj15CitDT05GSUdfUkVHVUxBVE9SX0RVTU1ZPXkKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19EUk09bQorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX09NQVAyX1ZSQU09eQorQ09ORklHX09NQVAyX1ZSRkI9eQorQ09ORklHX09NQVAyX0RTUz15CitDT05GSUdfT01BUDJfVlJBTV9TSVpFPTE0CitDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQ9eQorIyBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9EU1NfRFBJPXkKKyMgQ09ORklHX09NQVAyX0RTU19SRkJJIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9EU1NfVkVOQz15CisjIENPTkZJR19PTUFQMl9EU1NfU0RJIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9EU1NfRFNJPXkKKyMgQ09ORklHX09NQVAyX0RTU19GQUtFX1ZTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTAKK0NPTkZJR19GQl9PTUFQMj15CitDT05GSUdfRkJfT01BUDJfREVCVUdfU1VQUE9SVD15CitDT05GSUdfRkJfT01BUDJfTlVNX0ZCUz0yCisKKyMKKyMgT01BUDIvMyBEaXNwbGF5IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfUEFORUxfR0VORVJJQ19EUEk9eQorQ09ORklHX1BBTkVMX0RWST15CitDT05GSUdfUEFORUxfU0hBUlBfTFMwMzdWN0RXMDE9eQorIyBDT05GSUdfUEFORUxfTEdQSElMSVBTX0xCMDM1UTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkVMX1RBQUwgaXMgbm90IHNldAorQ09ORklHX1BBTkVMX1RQT19URDA0M01URUExPW0KKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19MT0dPPXkKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKKworIyBETUEgRGV2aWNlcworQ09ORklHX0RNQURFVklDRVM9eQorQ09ORklHX0RNQV9PTUFQPXkKK0NPTkZJR19ETUFfT0Y9eQorCitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfT01BUF9UV0w0MDMwPXkKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQj15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfT1RHPXkKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfT01BUDJQTFVTPXkKK0NPTkZJR19VU0JfT01BUD15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfTVVTQl9PVEc9eQorQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CitDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworQ09ORklHX1VTQl9HQURHRVQ9eQorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKK0NPTkZJR19UV0w0MDMwX1VTQj15CisKKyMgVVNCIGdhZGdldCBtb2R1bGVzCitDT05GSUdfVVNCX0dfTkNNPXkKK0NPTkZJR19VU0JfTUFTU19TVE9SQUdFPXkKKworQ09ORklHX01NQz15CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX09NQVBfSFM9eQorCisjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfVkZBVF9GUz15CisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKworIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgRW11bGF0aW9uIHN1cHBvcnQKKyMKK0NPTkZJR19BUE1fRU1VTEFUSU9OPXkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4NDAwZAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsOCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZwora2NvbmYgbm9uLWhhcmR3YXJlIHt7bWFjaGluZX19LW5vbl9oYXJkd2FyZS5jZmcKKworaW5jbHVkZSBmZWF0dXJlcy91c2ItbmV0L3VzYi1uZXQuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOGRiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9hcm0vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWNjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvYXJtL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTFiYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2FybS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL0NPUFlJTkcuTUlUIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vQ09QWUlORy5NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5NTBkYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODY1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9SRUFETUUKQEAgLTAsMCArMSwxMTggQEAKK1RoaXMgUkVBRE1FIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gb24gYnVpbGRpbmcgdGhlIG1ldGEte3s9bWFjaGluZX19CitCU1AgbGF5ZXIsIGFuZCBib290aW5nIHRoZSBpbWFnZXMgY29udGFpbmVkIGluIHRoZSAvYmluYXJ5IGRpcmVjdG9yeS4KK1BsZWFzZSBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdGlvbnMgYmVsb3cgZm9yIGRldGFpbHMuCisKKworRGVwZW5kZW5jaWVzCis9PT09PT09PT09PT0KKworVGhpcyBsYXllciBkZXBlbmRzIG9uOgorCisgIFVSSTogZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICBicmFuY2g6IG1hc3RlcgorCisgIFVSSTogZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUKKyAgbGF5ZXJzOiBtZXRhCisgIGJyYW5jaDogbWFzdGVyCisKKyAgVVJJOiBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy94eHh4CisgIGxheWVyczogeHh4eAorICBicmFuY2g6IG1hc3RlcgorCisKK1BhdGNoZXMKKz09PT09PT0KKworUGxlYXNlIHN1Ym1pdCBhbnkgcGF0Y2hlcyBhZ2FpbnN0IHRoaXMgQlNQIHRvIHRoZSBZb2N0byBtYWlsaW5nIGxpc3QKKyh5b2N0b0B5b2N0b3Byb2plY3Qub3JnKSBhbmQgY2M6IHRoZSBtYWludGFpbmVyOgorCitNYWludGFpbmVyOiBYWFggWVlZWVlZIDx4eHgueXl5eXl5QHp6enp6LmNvbT4KKworUGxlYXNlIHNlZSB0aGUgbWV0YS14eHh4L01BSU5UQUlORVJTIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KKworCitUYWJsZSBvZiBDb250ZW50cworPT09PT09PT09PT09PT09PT0KKworICBJLiBCdWlsZGluZyB0aGUgbWV0YS17ez1tYWNoaW5lfX0gQlNQIGxheWVyCisgSUkuIEJvb3RpbmcgdGhlIGltYWdlcyBpbiAvYmluYXJ5CisKKworSS4gQnVpbGRpbmcgdGhlIG1ldGEte3s9bWFjaGluZX19IEJTUCBsYXllcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0gcmVwbGFjZSB3aXRoIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgeW91ciBsYXllciAtLS0KKworSW4gb3JkZXIgdG8gYnVpbGQgYW4gaW1hZ2Ugd2l0aCBCU1Agc3VwcG9ydCBmb3IgYSBnaXZlbiByZWxlYXNlLCB5b3UKK25lZWQgdG8gZG93bmxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgQlNQIHRhcmJhbGwgZnJvbSB0aGUgJ0JvYXJkIFN1cHBvcnQKK1BhY2thZ2UgKEJTUCkgRG93bmxvYWRzJyBwYWdlIG9mIHRoZSBZb2N0byBQcm9qZWN0IHdlYnNpdGUuCisKK0hhdmluZyBkb25lIHRoYXQsIGFuZCBhc3N1bWluZyB5b3UgZXh0cmFjdGVkIHRoZSBCU1AgdGFyYmFsbCBjb250ZW50cworYXQgdGhlIHRvcC1sZXZlbCBvZiB5b3VyIHlvY3RvIGJ1aWxkIHRyZWUsIHlvdSBjYW4gYnVpbGQgYQore3s9bWFjaGluZX19IGltYWdlIGJ5IGFkZGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIG1ldGEte3s9bWFjaGluZX19CitsYXllciB0byBiYmxheWVycy5jb25mLCBhbG9uZyB3aXRoIGFueSBvdGhlciBsYXllcnMgbmVlZGVkICh0byBhY2Nlc3MKK2NvbW1vbiBtZXRhZGF0YSBzaGFyZWQgYmV0d2VlbiBCU1BzKSBlLmcuOgorCisgIHlvY3RvL21ldGEteHh4eCBcCisgIHlvY3RvL21ldGEteHh4eC9tZXRhLXt7PW1hY2hpbmV9fSBcCisKK1RvIGVuYWJsZSB0aGUge3s9bWFjaGluZX19IGxheWVyLCBhZGQgdGhlIHt7PW1hY2hpbmV9fSBNQUNISU5FIHRvIGxvY2FsLmNvbmY6CisKKyAgTUFDSElORSA/PSAie3s9bWFjaGluZX19IgorCitZb3Ugc2hvdWxkIHRoZW4gYmUgYWJsZSB0byBidWlsZCBhIHt7PW1hY2hpbmV9fSBpbWFnZSBhcyBzdWNoOgorCisgICQgc291cmNlIG9lLWluaXQtYnVpbGQtZW52CisgICQgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8KKworQXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgYnVpbGQsIHlvdSBzaG91bGQgaGF2ZSBhIGxpdmUgaW1hZ2UgdGhhdAoreW91IGNhbiBib290IGZyb20gYSBVU0IgZmxhc2ggZHJpdmUgKHNlZSBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGRvCit0aGF0IGJlbG93LCBpbiB0aGUgc2VjdGlvbiAnQm9vdGluZyB0aGUgaW1hZ2VzIGZyb20gL2JpbmFyeScpLgorCitBcyBhbiBhbHRlcm5hdGl2ZSB0byBkb3dubG9hZGluZyB0aGUgQlNQIHRhcmJhbGwsIHlvdSBjYW4gYWxzbyB3b3JrCitkaXJlY3RseSBmcm9tIHRoZSBtZXRhLXh4eHggZ2l0IHJlcG9zaXRvcnkuICBGb3IgZWFjaCBCU1AgaW4gdGhlCisnbWV0YS14eHh4JyByZXBvc2l0b3J5LCB0aGVyZSBhcmUgbXVsdGlwbGUgYnJhbmNoZXMsIG9uZSBjb3JyZXNwb25kaW5nCit0byBlYWNoIG1ham9yIHJlbGVhc2Ugc3RhcnRpbmcgd2l0aCAnbGF2ZXJuZScgKDAuOTApLCBpbiBhZGRpdGlvbiB0bwordGhlIGxhdGVzdCBjb2RlIHdoaWNoIHRyYWNrcyB0aGUgY3VycmVudCBtYXN0ZXIgKG5vdGUgdGhhdCBub3QgYWxsCitCU1BzIGFyZSBwcmVzZW50IGluIGV2ZXJ5IHJlbGVhc2UpLiAgSW5zdGVhZCBvZiBleHRyYWN0aW5nIGEgQlNQCit0YXJiYWxsIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciB5b2N0byBidWlsZCB0cmVlLCB5b3UgY2FuCitlcXVpdmFsZW50bHkgY2hlY2sgb3V0IHRoZSBhcHByb3ByaWF0ZSBicmFuY2ggZnJvbSB0aGUgbWV0YS14eHh4CityZXBvc2l0b3J5IGF0IHRoZSBzYW1lIGxvY2F0aW9uLgorCisKK0lJLiBCb290aW5nIHRoZSBpbWFnZXMgaW4gL2JpbmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tLSByZXBsYWNlIHdpdGggc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyIHBsYXRmb3JtIC0tLQorCitUaGlzIEJTUCBjb250YWlucyBib290YWJsZSBsaXZlIGltYWdlcywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGlyZWN0bHkKK2Jvb3QgWW9jdG8gb2ZmIG9mIGEgVVNCIGZsYXNoIGRyaXZlLgorCitVbmRlciBMaW51eCwgaW5zZXJ0IGEgVVNCIGZsYXNoIGRyaXZlLiAgQXNzdW1pbmcgdGhlIFVTQiBmbGFzaCBkcml2ZQordGFrZXMgZGV2aWNlIC9kZXYvc2RmLCB1c2UgZGQgdG8gY29weSB0aGUgbGl2ZSBpbWFnZSB0byBpdC4gIEZvcgorZXhhbXBsZToKKworIyBkZCBpZj1jb3JlLWltYWdlLXNhdG8te3s9bWFjaGluZX19LTIwMTAxMjA3MDUzNzM4LmhkZGltZyBvZj0vZGV2L3NkZgorIyBzeW5jCisjIGVqZWN0IC9kZXYvc2RmCisKK1RoaXMgc2hvdWxkIGdpdmUgeW91IGEgYm9vdGFibGUgVVNCIGZsYXNoIGRldmljZS4gIEluc2VydCB0aGUgZGV2aWNlCitpbnRvIGEgYm9vdGFibGUgVVNCIHNvY2tldCBvbiB0aGUgdGFyZ2V0LCBhbmQgcG93ZXIgb24uICBUaGlzIHNob3VsZAorcmVzdWx0IGluIGEgc3lzdGVtIGJvb3RlZCB0byB0aGUgU2F0byBncmFwaGljYWwgZGVza3RvcC4KKworSWYgeW91IHdhbnQgYSB0ZXJtaW5hbCwgdXNlIHRoZSBhcnJvd3MgYXQgdGhlIHRvcCBvZiB0aGUgVUkgdG8gbW92ZSB0bworZGlmZmVyZW50IHBhZ2VzIG9mIGF2YWlsYWJsZSBhcHBsaWNhdGlvbnMsIG9uZSBvZiB3aGljaCBpcyBuYW1lZAorJ1Rlcm1pbmFsJy4gIENsaWNraW5nIHRoYXQgc2hvdWxkIGdpdmUgeW91IGEgcm9vdCB0ZXJtaW5hbC4KKworSWYgeW91IHdhbnQgdG8gc3NoIGludG8gdGhlIHN5c3RlbSwgeW91IGNhbiB1c2UgdGhlIHJvb3QgdGVybWluYWwgdG8KK2lmY29uZmlnIHRoZSBJUCBhZGRyZXNzIGFuZCB1c2UgdGhhdCB0byBzc2ggaW4uICBUaGUgcm9vdCBwYXNzd29yZCBpcworZW1wdHksIHNvIHRvIGxvZyBpbiB0eXBlICdyb290JyBmb3IgdGhlIHVzZXIgbmFtZSBhbmQgaGl0ICdFbnRlcicgYXQKK3RoZSBQYXNzd29yZCBwcm9tcHQ6IGFuZCB5b3Ugc2hvdWxkIGJlIGluLgorCistLS0tCisKK0lmIHlvdSBmaW5kIHlvdSdyZSBnZXR0aW5nIGNvcnJ1cHQgaW1hZ2VzIG9uIHRoZSBVU0IgKGl0IGRvZXNuJ3Qgc2hvdwordGhlIHN5c2xpbnV4IGJvb3Q6IHByb21wdCwgb3IgdGhlIGJvb3Q6IHByb21wdCBjb250YWlucyBzdHJhbmdlCitjaGFyYWN0ZXJzKSwgdHJ5IGRvaW5nIHRoaXMgZmlyc3Q6CisKKyMgZGQgaWY9L2Rldi96ZXJvIG9mPS9kZXYvc2RmIGJzPTFNIGNvdW50PTUxMgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FLnNvdXJjZXMgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9SRUFETUUuc291cmNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRjYjdiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vUkVBRE1FLnNvdXJjZXMKQEAgLTAsMCArMSwxNyBAQAorVGhlIHNvdXJjZXMgZm9yIHRoZSBwYWNrYWdlcyBjb21wcmlzaW5nIHRoZSBpbWFnZXMgc2hpcHBlZCB3aXRoIHRoaXMKK0JTUCBjYW4gYmUgZm91bmQgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoKKworaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLworCitUaGUgbWV0YWRhdGEgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW1hZ2VzIHNoaXBwZWQgd2l0aCB0aGlzIEJTUCwgaW4KK2FkZGl0aW9uIHRvIHRoZSBjb2RlIGNvbnRhaW5lZCBpbiB0aGlzIEJTUCwgY2FuIGJlIGZvdW5kIGF0IHRoZQorZm9sbG93aW5nIGxvY2F0aW9uOgorCitodHRwOi8vd3d3LnlvY3RvcHJvamVjdC5vcmcvZG93bmxvYWRzL3lvY3RvLTEuMS9wb2t5LWVkaXNvbi02LjAudGFyLmJ6MgorCitUaGUgbWV0YWRhdGEgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaW1hZ2VzIHNoaXBwZWQgd2l0aCB0aGlzIEJTUCwgaW4KK2FkZGl0aW9uIHRvIHRoZSBjb2RlIGNvbnRhaW5lZCBpbiB0aGlzIEJTUCwgY2FuIGFsc28gYmUgZm91bmQgYXQgdGhlCitmb2xsb3dpbmcgbG9jYXRpb25zOgorCitnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9wb2t5LmdpdAorZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbWV0YS14eHh4CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9iaW5hcnkvLmdpdGlnbm9yZSBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL2JpbmFyeS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9iaW5hcnkvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MjlmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9jb25mL2xheWVyLmNvbmYKQEAgLTAsMCArMSwxMCBAQAorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFkZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgYSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKwkke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInt7PW1hY2hpbmV9fSIKK0JCRklMRV9QQVRURVJOX3t7PW1hY2hpbmV9fSA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3t7PW1hY2hpbmV9fSA9ICI2IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7ez1tYWNoaW5lfX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZm9ybWZhY3Rvci9tYWNoaW5lL21hY2hjb25maWcgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODVkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3IvbWFjaGluZS9tYWNoY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIyBBc3N1bWUgYSBVU0IgbW91c2UgYW5kIGtleWJvYXJkIGFyZSBjb25uZWN0ZWQKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InRvdWNoc2NyZWVuIiBtc2c6IkRvZXMgeW91ciBCU1AgaGF2ZSBhIHRvdWNoc2NyZWVuPyAoeS9uKSIgZGVmYXVsdDoibiIgfX0KK0hBVkVfVE9VQ0hTQ1JFRU49e3s9dG91Y2hzY3JlZW59fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToia2V5Ym9hcmQiIG1zZzoiRG9lcyB5b3VyIEJTUCBoYXZlIGEga2V5Ym9hcmQ/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQorSEFWRV9LRVlCT0FSRD17ez1rZXlib2FyZH19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDQ4MDRkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYmFwcGVuZApAQCAtMCwwICsxLDIgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2M2RkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSwyNiBAQAore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImN1c3RvbV9rZXJuZWxfcmVtb3RlIiBwcmlvOiIyMCIgbXNnOiJJcyB0aGUgY3VzdG9tIGtlcm5lbCB5b3UnZCBsaWtlIHRvIHVzZSBpbiBhIHJlbW90ZSBnaXQgcmVwbz8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9yZW1vdGUgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdC1naXQtcmVwbyIgbmFtZToiY3VzdG9tX2tlcm5lbF9yZW1vdGVfcGF0aCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBmdWxsIFVSSSB0byB0aGUgcmVtb3RlIGdpdCByZXBvICh0aGUgZGVmYXVsdCBjb3JyZXNwb25kcyB0byBsaW51eC1zdGFibGUgdjMuMTYuMykiIGRlZmF1bHQ6ImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zdGFibGUvbGludXgtc3RhYmxlLmdpdCJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIGFuZCBjdXN0b21fa2VybmVsX3JlbW90ZSA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0LWdpdC1yZXBvIiBuYW1lOiJjdXN0b21fa2VybmVsX2xvY2FsX3BhdGgiIHByaW86IjIwIiBtc2c6IllvdSd2ZSBpbmRpY2F0ZWQgdGhhdCB5b3UncmUgbm90IHVzaW5nIGEgcmVtb3RlIGdpdCByZXBvLiAgUGxlYXNlIGVudGVyIHRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIGdpdCByZXBvIHlvdSB3YW50IHRvIHVzZSAodGhlIGRlZmF1bHQgYXNzdW1lcyBhIGxvY2FsIGxpbnV4LXN0YWJsZSB2My4xNi4zKSIgZGVmYXVsdDoiL2hvbWUvdHJ6L3lvY3RvL2tlcm5lbHMvbGludXgtc3RhYmxlLmdpdCJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToiY3VzdG9tX2tlcm5lbF9uZWVkX2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIHRvIHVzZSBhIHNwZWNpZmljIChub24tbWFzdGVyKSBicmFuY2g/ICh5L24pIiBkZWZhdWx0OiJuIn19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfbmVlZF9rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImN1c3RvbV9rZXJuZWxfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBicmFuY2ggeW91IHdhbnQgdG8gdXNlICh0aGUgZGVmYXVsdCBicmFuY2ggY29ycmVzcG9uZHMgdG8gdGhlIGxpbnV4LXN0YWJsZSAnbGludXgtMy4xNi55JyBicmFuY2gpOiIgZGVmYXVsdDoibGludXgtMy4xNi55In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJjdXN0b21fa2VybmVsX3NyY3JldiIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGVudGVyIHRoZSBTUkNSRVYgKGNvbW1pdCBpZCkgeW91J2QgbGlrZSB0byB1c2UgKHVzZSAnJHtBVVRPUkVWfScgdG8gdHJhY2sgdGhlIGN1cnJlbnQgSEVBRCk6IiBkZWZhdWx0OiIke0FVVE9SRVZ9In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJjdXN0b21fa2VybmVsX2xpbnV4X3ZlcnNpb24iIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgTGludXggdmVyc2lvbiBvZiB0aGUga2VybmVsIHlvdSd2ZSBzcGVjaWZpZWQ6IiBkZWZhdWx0OiIzLjE2LjMifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImVkaXQiIG5hbWU6ImN1c3RvbV9rZXJuZWxfbGludXhfdmVyc2lvbl9leHRlbnNpb24iIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciBhIExpbnV4IHZlcnNpb24gZXh0ZW5zaW9uIGlmIHlvdSB3YW50IChpdCB3aWxsIHNob3cgdXAgYXQgdGhlIGVuZCBvZiB0aGUga2VybmVsIG5hbWUgc2hvd24gYnkgdW5hbWUpOiIgZGVmYXVsdDoiLWN1c3RvbSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiZWRpdC1maWxlIiBuYW1lOiJjdXN0b21fa2VybmVsX2RlZmNvbmZpZyIgcHJpbzoiMjAiIG1zZzoiSXQncyByZWNvbW1lbmRlZCAoYnV0IG5vdCByZXF1aXJlZCkgdGhhdCBjdXN0b20ga2VybmVscyBiZSBidWlsdCB1c2luZyBhIGRlZmNvbmZpZy4gIFBsZWFzZSBlbnRlciB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkZWZjb25maWcgZm9yIHlvdXIga2VybmVsIChOT1RFOiBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGRlZmNvbmZpZyB0aGUga2VybmVsIHByb2JhYmx5IHdvbid0IGJ1aWxkIG9yIGJvb3QpOiIgZGVmYXVsdDoiIn19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhOTU1YgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS5iYgpAQCAtMCwwICsxLDU3IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiB9fSB0aGlzCisjIFRoaXMgZmlsZSB3YXMgZGVyaXZlZCBmcm9tIHRoZSBsaW51eC15b2N0by1jdXN0b20uYmIgcmVjaXBlIGluCisjIG9lLWNvcmUuCisjCisjIGxpbnV4LXlvY3RvLWN1c3RvbS5iYjoKKyMKKyMgICBBIHlvY3RvLWJzcC1nZW5lcmF0ZWQga2VybmVsIHJlY2lwZSB0aGF0IHVzZXMgdGhlIGxpbnV4LXlvY3RvIGFuZAorIyAgIG9lLWNvcmUga2VybmVsIGNsYXNzZXMgdG8gYXBwbHkgYSBzdWJzZXQgb2YgeW9jdG8ga2VybmVsCisjICAgbWFuYWdlbWVudCB0byBnaXQgbWFuYWdlZCBrZXJuZWwgcmVwb3NpdG9yaWVzLgorIworIyBXYXJuaW5nOgorIworIyAgIEJ1aWxkaW5nIHRoaXMga2VybmVsIHdpdGhvdXQgcHJvdmlkaW5nIGEgZGVmY29uZmlnIG9yIEJTUAorIyAgIGNvbmZpZ3VyYXRpb24gd2lsbCByZXN1bHQgaW4gYnVpbGQgb3IgYm9vdCBlcnJvcnMuIFRoaXMgaXMgbm90IGEKKyMgICBidWcuCisjCisjIE5vdGVzOgorIworIyAgIHBhdGNoZXM6IHBhdGNoZXMgY2FuIGJlIG1lcmdlZCBpbnRvIHRvIHRoZSBzb3VyY2UgZ2l0IHRyZWUgaXRzZWxmLAorIyAgICAgICAgICAgIGFkZGVkIHZpYSB0aGUgU1JDX1VSSSwgb3IgY29udHJvbGxlZCB2aWEgYSBCU1AKKyMgICAgICAgICAgICBjb25maWd1cmF0aW9uLgorIworIyAgIGV4YW1wbGUgY29uZmlndXJhdGlvbiBhZGRpdGlvbjoKKyMgICAgICAgICAgICBTUkNfVVJJICs9ICJmaWxlOi8vc21wLmNmZyIKKyMgICBleGFtcGxlIHBhdGNoIGFkZGl0aW9uOgorIyAgICAgICAgICAgIFNSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLWxpbnV4LXZlcnNpb24tdHdlYWsucGF0Y2gKKyMgICBleGFtcGxlIGZlYXR1cmUgYWRkaXRpb246CisjICAgICAgICAgICAgU1JDX1VSSSArPSAiZmlsZTovL2ZlYXR1cmUuc2NjIgorIworCitpbmhlcml0IGtlcm5lbAorcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9yZW1vdGUgPT0gInkiOiB9fQorU1JDX1VSSSA9ICJ7ez1jdXN0b21fa2VybmVsX3JlbW90ZV9wYXRofX07cHJvdG9jb2w9Z2l0O2JhcmVjbG9uZT0xO2JyYW5jaD0ke0tCUkFOQ0h9Igore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBhbmQgY3VzdG9tX2tlcm5lbF9yZW1vdGUgPT0gIm4iOiB9fQorU1JDX1VSSSA9ICJnaXQ6Ly97ez1jdXN0b21fa2VybmVsX2xvY2FsX3BhdGh9fTtwcm90b2NvbD1maWxlO2JhcmVjbG9uZT0xO2JyYW5jaD0ke0tCUkFOQ0h9IgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGVmY29uZmlnIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAiCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgYW5kIGN1c3RvbV9rZXJuZWxfbmVlZF9rYnJhbmNoID09ICJ5IiBhbmQgY3VzdG9tX2tlcm5lbF9rYnJhbmNoIGFuZCBjdXN0b21fa2VybmVsX2ticmFuY2ggIT0gIm1hc3RlciI6IH19CitLQlJBTkNIID0gInt7PWN1c3RvbV9rZXJuZWxfa2JyYW5jaH19IgorCitMSU5VWF9WRVJTSU9OID89ICJ7ez1jdXN0b21fa2VybmVsX2xpbnV4X3ZlcnNpb259fSIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OID89ICJ7ez1jdXN0b21fa2VybmVsX2xpbnV4X3ZlcnNpb25fZXh0ZW5zaW9ufX0iCisKK1NSQ1JFVj0ie3s9Y3VzdG9tX2tlcm5lbF9zcmNyZXZ9fSIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20ubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTdkMjA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IH19IGxpbnV4LXlvY3RvLWN1c3RvbQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL2RlZmNvbmZpZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViMGZmYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9kZWZjb25maWcKQEAgLTAsMCArMSw1IEBACisjCisjIFBsYWNlaG9sZGVyIGZvciBjdXN0b20gZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbi4gIHlvY3RvLWJzcCB3aWxsCisjIHJlcGxhY2UgdGhpcyBmaWxlIHdpdGggYSB1c2VyLXNwZWNpZmllZCBkZWZjb25maWcuCisjCit7eyBpZiBjdXN0b21fa2VybmVsX2RlZmNvbmZpZzogcmVwbGFjZV9maWxlKG9mLCBjdXN0b21fa2VybmVsX2RlZmNvbmZpZykgfX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjIzMDlkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEsOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworIworIyBVc2VkIGJ5IHlvY3RvLWtlcm5lbCB0byBtYW5hZ2UgY29uZmlnIG9wdGlvbnMuCisjCisjIHlvY3RvLWtlcm5lbCBtYXkgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaW4gYW55CisjIHdheSBpdCBzZWVzIGZpdCwgaW5jbHVkaW5nIHJlbW92aW5nIGNvbW1lbnRzIGxpa2UgdGhpcywKKyMgc28gZG9uJ3QgbWFudWFsbHkgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgZG9uJ3Qgd2FudAorIyB0byBsb3NlLgorIwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxMTM4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSw5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYworIworIyBVc2VkIGJ5IHlvY3RvLWtlcm5lbCB0byBtYW5hZ2UgcGF0Y2hlcy4KKyMKKyMgeW9jdG8ta2VybmVsIG1heSBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBpbiBhbnkKKyMgd2F5IGl0IHNlZXMgZml0LCBpbmNsdWRpbmcgcmVtb3ZpbmcgY29tbWVudHMgbGlrZSB0aGlzLAorIyBzbyBkb24ndCBtYW51YWxseSBtYWtlIGFueSBtb2RpZmljYXRpb25zIHlvdSBkb24ndCB3YW50CisjIHRvIGxvc2UuCisjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhODIwMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvY29tbW9uL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWN1c3RvbS9tYWNoaW5lLmNmZwpAQCAtMCwwICsxLDQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKKyMKKyMgQSBjb252ZW5pZW50IHBsYWNlIHRvIGFkZCBjb25maWcgb3B0aW9ucywgbm90aGluZyBtb3JlLgorIwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9jb21tb24vcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tY3VzdG9tL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNmI0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2NvbW1vbi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1jdXN0b20vbWFjaGluZS5zY2MKQEAgLTAsMCArMSwxOCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYworIworIyBUaGUgdG9wLWxldmVsICdmZWF0dXJlJyBmb3IgdGhlIHt7PW1hY2hpbmV9fSBjdXN0b20ga2VybmVsLgorIworIyBFc3NlbnRpYWxseSB0aGlzIGlzIGEgY29udmVuaWVudCB0b3AtbGV2ZWwgY29udGFpbmVyIG9yIHN0YXJ0aW5nCisjIHBvaW50IGZvciBhZGRpbmcgbG93ZXItbGV2ZWwgY29uZmlnIGZyYWdlbWVudHMgYW5kIGZlYXR1cmVzLgorIworCisjIHt7PW1hY2hpbmV9fS5jZmcgaW4gdGhlIGxpbnV4LXlvY3RvLWN1c3RvbSBzdWJkaXIgaXMganVzdCBhCisjIGNvbnZlbmllbnQgcGxhY2UgZm9yIGFkZGluZyByYW5kb20gY29uZmlnIGZyYWdtZW50cy4KKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCisjIFRoZXNlIGFyZSB1c2VkIGJ5IHlvY3RvLWtlcm5lbCB0byBhZGQgY29uZmlnIGZyYWdtZW50cyBhbmQgZmVhdHVyZXMuCisjIERvbid0IHJlbW92ZSBpZiB5b3UgcGxhbiBvbiB1c2luZyB5b2N0by1rZXJuZWwgd2l0aCB0aGlzIEJTUC4KKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg5MzQxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSw3NyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJ0dW5lZmlsZSIgcHJpbzoiNDAiIG1zZzoiV2hpY2ggbWFjaGluZSB0dW5pbmcgd291bGQgeW91IGxpa2UgdG8gdXNlPyIgZGVmYXVsdDoidHVuZV9jb3JlMiIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2k1ODYiIG1zZzoiaTU4NiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2F0b20iIG1zZzoiQXRvbSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcmUyIiBtc2c6IkNvcmUyIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfaTU4NiI6IH19CityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX2F0b20iOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3JlMiI6IH19CitERUZBVUxUVFVORT0iY29yZTItMzIiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgKz0gIndpZmkgZWZpIHBjYmlvcyIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCAoa2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCIpOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToieHNlcnZlcl9jaG9pY2UiIHByaW86IjUwIiBtc2c6IlBsZWFzZSBzZWxlY3QgYW4geHNlcnZlciBmb3IgdGhpcyBtYWNoaW5lOiIgZGVmYXVsdDoieHNlcnZlcl92ZXNhIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfdmVzYSIgbXNnOiJWRVNBIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5MTUiIG1zZzoiaTkxNSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTY1IiBtc2c6Imk5NjUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfZmJkZXYiIG1zZzoiZmJkZXYgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfbW9kZXNldHRpbmciIG1zZzoibW9kZXNldHRpbmcgeHNlcnZlciBzdXBwb3J0IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6InhzZXJ2ZXJfY2hvaWNlIiBwcmlvOiI1MCIgbXNnOiJQbGVhc2Ugc2VsZWN0IGFuIHhzZXJ2ZXIgZm9yIHRoaXMgbWFjaGluZToiIGRlZmF1bHQ6InhzZXJ2ZXJfdmVzYSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX3Zlc2EiIG1zZzoiVkVTQSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9pOTE1IiBtc2c6Imk5MTUgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTk2NSIgbXNnOiJpOTY1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2ZiZGV2IiBtc2c6ImZiZGV2IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX21vZGVzZXR0aW5nIiBtc2c6Im1vZGVzZXR0aW5nIHhzZXJ2ZXIgc3VwcG9ydCIgfX0KKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvXzMuMTkiIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0b18zLjE0IiBhbmQga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogeHNlcnZlcl9jaG9pY2UgPSAieHNlcnZlcl9pOTE1IiB9fQorCit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1hTRVJWRVIgPz0gIiR7WFNFUlZFUl9YODZfQkFTRX0gXAorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0VYVH0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X1ZFU0F9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTE1IjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9JOTE1fSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTk2NSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTk2NX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2ZiZGV2IjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9GQkRFVn0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX21vZGVzZXR0aW5nIjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9NT0RFU0VUVElOR30gXAore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CisgICAgICAgICAgICIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAibGludXgtZmlybXdhcmUgdjg2ZCBlZWUtYWNwaS1zY3JpcHRzIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiIC0td2l0aC1iYXR0ZXJ5PWFjcGkiCisKK0dMSUJDX0FERE9OUyA9ICJucHRsIgorCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CitBUFBFTkQgKz0gInZpZGVvPXZlc2FmYiB2Z2E9MHgzMTgiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlhMGYxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYgeHNlcnZlciA9PSAieSI6IH19IHRoaXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnXzAuMS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgzMDAzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYgeHNlcnZlciA9PSAieSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5ZWUzZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCBpMzg2CisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBwcmVlbXB0LXJ0IGtlcm5lbHMKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9ib290LWxpdmUuc2NjCitpbmNsdWRlIGZlYXR1cmVzL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvcHJvZmlsaW5nL3Byb2ZpbGluZy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODIwMTJmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIGkzODYKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYworCisjIGRlZmF1bHQgcG9saWN5IGZvciBzdGFuZGFyZCBrZXJuZWxzCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9sYXRlbmN5dG9wL2xhdGVuY3l0b3Auc2NjCitpbmNsdWRlIGZlYXR1cmVzL3Byb2ZpbGluZy9wcm9maWxpbmcuc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzUxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0ggaTM4NgorCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVmZGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzU5ZGFhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjE2OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsNTUgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKK0NPTkZJR19YODZfMzI9eQorQ09ORklHX01BVE9NPXkKK0NPTkZJR19QUklOVEs9eQorCisjIEJhc2ljIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBib3ggLSBuZXR3b3JrLCBVU0IsIFBDSSwgc291bmQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19BVEE9eQorQ09ORklHX0FUQV9HRU5FUklDPXkKK0NPTkZJR19BVEFfU0ZGPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX01NQz15CitDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfUjgxNjk9eQorQ09ORklHX1BBVEFfU0NIPXkKK0NPTkZJR19NTUNfU0RIQ0lfUENJPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19ORVQ9eQorQ09ORklHX1VTQl9VSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfSERBX0lOVEVMPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQorQ09ORklHX0FHUD15CitDT05GSUdfUE09eQorQ09ORklHX0FDUEk9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfSU5QVVQ9eQorCisjIE1ha2Ugc3VyZSB0aGVzZSBhcmUgb24sIG90aGVyd2lzZSB0aGUgYm9vdHVwIHdvbid0IGJlIGZ1bgorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfUEFDS0VUPXkKKworIyBOZWVkZWQgZm9yIGJvb3RpbmcgKGFuZCB1c2luZykgVVNCIG1lbW9yeSBzdGlja3MKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorCitDT05GSUdfUkRfR1pJUD15CisKKyMgTmVlZGVkIGZvciBib290aW5nIChhbmQgdXNpbmcpIENEIGltYWdlcworQ09ORklHX0JMS19ERVZfU1I9eQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzJmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSwyMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitpbmNsdWRlIGZlYXR1cmVzL2ludGVsLWUxeHh4eC9pbnRlbC1lMTAwLnNjYworaW5jbHVkZSBmZWF0dXJlcy9pbnRlbC1lMXh4eHgvaW50ZWwtZTF4eHh4LnNjYworCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTkxNSIgb3IgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTk2NSI6IH19CitpbmNsdWRlIGZlYXR1cmVzL2k5MTUvaTkxNS5zY2MKKworaW5jbHVkZSBmZWF0dXJlcy9zZXJpYWwvODI1MC5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvZXJpY3Nzb24tM2cvZjU1MjFndy5zY2MKKwore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQoraW5jbHVkZSBjZmcvdmVzYWZiLnNjYworCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvYm9vdC1saXZlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wb3dlci9pbnRlbC5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZDY5NQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhkYjAzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxY2NiYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlODJmYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI0OWVkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9pMzg2L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvaTM4Ni9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMmNiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2kzODYvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvQ09QWUlORy5NSVQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZGUzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9SRUFETUUgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDNkZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9SRUFETUUKQEAgLTAsMCArMSw2NCBAQAorVGhpcyBSRUFETUUgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGUgY29udGVudHMgb2YgdGhlCit7ez1sYXllcl9uYW1lfX0gbGF5ZXIuCisKK1BsZWFzZSBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdGlvbnMgYmVsb3cgZm9yIGRldGFpbHMuCisKKworRGVwZW5kZW5jaWVzCis9PT09PT09PT09PT0KKworVGhpcyBsYXllciBkZXBlbmRzIG9uOgorCisgIFVSSTogZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZQorICBicmFuY2g6IG1hc3RlcgorCisgIFVSSTogZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUKKyAgbGF5ZXJzOiBtZXRhCisgIGJyYW5jaDogbWFzdGVyCisKKyAgVVJJOiBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy94eHh4CisgIGxheWVyczogeHh4eAorICBicmFuY2g6IG1hc3RlcgorCisKK1BhdGNoZXMKKz09PT09PT0KKworUGxlYXNlIHN1Ym1pdCBhbnkgcGF0Y2hlcyBhZ2FpbnN0IHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgdG8gdGhlCit4eHh4IG1haWxpbmcgbGlzdCAoeHh4eEB6enp6Lm9yZykgYW5kIGNjOiB0aGUgbWFpbnRhaW5lcjoKKworTWFpbnRhaW5lcjogWFhYIFlZWVlZWSA8eHh4Lnl5eXl5eUB6enp6ei5jb20+CisKKworVGFibGUgb2YgQ29udGVudHMKKz09PT09PT09PT09PT09PT09CisKKyAgSS4gQWRkaW5nIHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgdG8geW91ciBidWlsZAorIElJLiBNaXNjCisKKworSS4gQWRkaW5nIHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgdG8geW91ciBidWlsZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0gcmVwbGFjZSB3aXRoIHNwZWNpZmljIGluc3RydWN0aW9ucyBmb3IgdGhlIHt7PWxheWVyX25hbWV9fSBsYXllciAtLS0KKworSW4gb3JkZXIgdG8gdXNlIHRoaXMgbGF5ZXIsIHlvdSBuZWVkIHRvIG1ha2UgdGhlIGJ1aWxkIHN5c3RlbSBhd2FyZSBvZgoraXQuCisKK0Fzc3VtaW5nIHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgZXhpc3RzIGF0IHRoZSB0b3AtbGV2ZWwgb2YgeW91cgoreW9jdG8gYnVpbGQgdHJlZSwgeW91IGNhbiBhZGQgaXQgdG8gdGhlIGJ1aWxkIHN5c3RlbSBieSBhZGRpbmcgdGhlCitsb2NhdGlvbiBvZiB0aGUge3s9bGF5ZXJfbmFtZX19IGxheWVyIHRvIGJibGF5ZXJzLmNvbmYsIGFsb25nIHdpdGggYW55CitvdGhlciBsYXllcnMgbmVlZGVkLiBlLmcuOgorCisgIEJCTEFZRVJTID89ICIgXAorICAgIC9wYXRoL3RvL3lvY3RvL21ldGEgXAorICAgIC9wYXRoL3RvL3lvY3RvL21ldGEteW9jdG8gXAorICAgIC9wYXRoL3RvL3lvY3RvL21ldGEteW9jdG8tYnNwIFwKKyAgICAvcGF0aC90by95b2N0by9tZXRhLXt7PWxheWVyX25hbWV9fSBcCisgICAgIgorCisKK0lJLiBNaXNjCis9PT09PT09PQorCistLS0gcmVwbGFjZSB3aXRoIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSB7ez1sYXllcl9uYW1lfX0gbGF5ZXIgLS0tCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2NvbmYvbGF5ZXIuY29uZiBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvY29uZi9sYXllci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmZlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2NvbmYvbGF5ZXIuY29uZgpAQCAtMCwwICsxLDEwIEBACisjIFdlIGhhdmUgYSBjb25mIGFuZCBjbGFzc2VzIGRpcmVjdG9yeSwgYWRkIHRvIEJCUEFUSAorQkJQQVRIIC49ICI6JHtMQVlFUkRJUn0iCisKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIFwKKwkke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gInt7PWxheWVyX25hbWV9fSIKK0JCRklMRV9QQVRURVJOX3t7PWxheWVyX25hbWV9fSA9ICJeJHtMQVlFUkRJUn0vIgorQkJGSUxFX1BSSU9SSVRZX3t7PWxheWVyX25hbWV9fSA9ICJ7ez1sYXllcl9wcmlvcml0eX19IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9sYXllci1xdWVzdGlvbnMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTg5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL2xheWVyLXF1ZXN0aW9ucy5ub2luc3RhbGwKQEAgLTAsMCArMSwxNCBAQAore3sgaW5wdXQgdHlwZToiZWRpdCIgbmFtZToibGF5ZXJfcHJpb3JpdHkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgbGF5ZXIgcHJpb3JpdHkgeW91J2QgbGlrZSB0byB1c2UgZm9yIHRoZSBsYXllcjoiIGRlZmF1bHQ6IjYifX0KKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToiY3JlYXRlX2V4YW1wbGVfcmVjaXBlIiBwcmlvOiIyMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byBoYXZlIGFuIGV4YW1wbGUgcmVjaXBlIGNyZWF0ZWQ/ICh5L24pIiBkZWZhdWx0OiJuIn19CisKK3t7IGlmIGNyZWF0ZV9leGFtcGxlX3JlY2lwZSA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJleGFtcGxlX3JlY2lwZV9uYW1lIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgZW50ZXIgdGhlIG5hbWUgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgZXhhbXBsZSByZWNpcGU6IiBkZWZhdWx0OiJleGFtcGxlIn19CisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6ImNyZWF0ZV9leGFtcGxlX2JiYXBwZW5kIiBwcmlvOiIyMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byBoYXZlIGFuIGV4YW1wbGUgYmJhcHBlbmQgZmlsZSBjcmVhdGVkPyAoeS9uKSIgZGVmYXVsdDoibiJ9fQorCit7eyBpZiBjcmVhdGVfZXhhbXBsZV9iYmFwcGVuZCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJleGFtcGxlX2JiYXBwZW5kX25hbWUiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgbmFtZSB5b3UnZCBsaWtlIHRvIHVzZSBmb3IgeW91ciBiYmFwcGVuZCBmaWxlOiIgZGVmYXVsdDoiZXhhbXBsZSJ9fQorCit7eyBpZiBjcmVhdGVfZXhhbXBsZV9iYmFwcGVuZCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJleGFtcGxlX2JiYXBwZW5kX3ZlcnNpb24iIHByaW86IjIwIiBtc2c6IlBsZWFzZSBlbnRlciB0aGUgdmVyc2lvbiBudW1iZXIgeW91J2QgbGlrZSB0byB1c2UgZm9yIHlvdXIgYmJhcHBlbmQgZmlsZSAodGhpcyBzaG91bGQgbWF0Y2ggdGhlIHJlY2lwZSB5b3UncmUgYXBwZW5kaW5nIHRvKToiIGRlZmF1bHQ6IjAuMSJ9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTRlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBjcmVhdGVfZXhhbXBsZV9iYmFwcGVuZCA9PSAieSI6IH19IHJlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24uYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTMxMzMwCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24uYmJhcHBlbmQKQEAgLTAsMCArMSw5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1leGFtcGxlX2JiYXBwZW5kX25hbWV9fV97ez1leGFtcGxlX2JiYXBwZW5kX3ZlcnNpb259fS5iYmFwcGVuZAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn0tJHtQVn06IgorCisjCisjIFRoaXMgLmJiYXBwZW5kIGRvZXNuJ3QgeWV0IGRvIGFueXRoaW5nIC0gcmVwbGFjZSB0aGlzIHRleHQgd2l0aAorIyBtb2RpZmljYXRpb25zIHRvIHRoZSBleGFtcGxlXzAuMS5iYiByZWNpcGUsIG9yIHdoYXRldmVyIHJlY2lwZSBpdCBpcworIyB0aGF0IHlvdSB3YW50IHRvIG1vZGlmeSB3aXRoIHRoaXMgLmJiYXBwZW5kIChtYWtlIHN1cmUgeW91IGNoYW5nZQorIyB0aGUgcmVjaXBlIG5hbWUgKFBOKSBhbmQgdmVyc2lvbiAoUFYpIHRvIG1hdGNoKS4KKyMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmRmOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kLXZlcnNpb24ubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9ZXhhbXBsZV9iYmFwcGVuZF9uYW1lfX0te3s9ZXhhbXBsZV9iYmFwcGVuZF92ZXJzaW9ufX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQvZXhhbXBsZS1iYmFwcGVuZC12ZXJzaW9uL2V4YW1wbGUucGF0Y2ggYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi9leGFtcGxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS1iYmFwcGVuZC9leGFtcGxlLWJiYXBwZW5kL2V4YW1wbGUtYmJhcHBlbmQtdmVyc2lvbi9leGFtcGxlLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIHBsYWNlaG9sZGVyIGZpbGUsIGhlcmUgZm9yIGV4YW1wbGUgcHVycG9zZXMKKyMgb25seS4KKyMKKyMgSWYgeW91IGhhZCBhIHBhdGNoIGZvciB5b3VyIHJlY2lwZSwgeW91J2QgcHV0IGl0IGluIHRoaXMgZGlyZWN0b3J5CisjIGFuZCByZWZlcmVuY2UgaXQgZnJvbSB5b3VyIHJlY2lwZSdzIFNSQ19VUkk6CisjCisjICBTUkNfVVJJICs9ICJmaWxlOi8vZXhhbXBsZS5wYXRjaCIKKyMKKyMgTm90ZSB0aGF0IHlvdSBjb3VsZCBhbHNvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBwYXRjaAorIyB0byByZW1vdmUgdGhlIHZlcnNpb24gbnVtYmVyIG9yIHNpbXBseSByZW5hbWUgaXQgJ2ZpbGVzJy4gIERvaW5nIHNvCisjIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGRpcmVjdG9yeSBmb3IgbXVsdGlwbGUgcmVjaXBlcy4KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDA2OWIxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYgY3JlYXRlX2V4YW1wbGVfcmVjaXBlID09ICJ5IjogfX0gcmVjaXBlcy1leGFtcGxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5iYiBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYmY1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5iYgpAQCAtMCwwICsxLDIzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1leGFtcGxlX3JlY2lwZV9uYW1lfX1fMC4xLmJiCisjCisjIFRoaXMgZmlsZSB3YXMgZGVyaXZlZCBmcm9tIHRoZSAnSGVsbG8gV29ybGQhJyBleGFtcGxlIHJlY2lwZSBpbiB0aGUKKyMgWW9jdG8gUHJvamVjdCBEZXZlbG9wbWVudCBNYW51YWwuCisjCisKK1NVTU1BUlkgPSAiU2ltcGxlIGhlbGxvd29ybGQgYXBwbGljYXRpb24iCitTRUNUSU9OID0gImV4YW1wbGVzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vaGVsbG93b3JsZC5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJICAgICAke0NDfSBoZWxsb3dvcmxkLmMgLW8gaGVsbG93b3JsZAorfQorCitkb19pbnN0YWxsKCkgeworCSAgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJICAgICBpbnN0YWxsIC1tIDA3NTUgaGVsbG93b3JsZCAke0R9JHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxOWMxOQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PWV4YW1wbGVfcmVjaXBlX25hbWV9fS0wLjEKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2V4YW1wbGUucGF0Y2ggYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS9leGFtcGxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL2xheWVyL3JlY2lwZXMtZXhhbXBsZS9leGFtcGxlL2V4YW1wbGUtcmVjaXBlLTAuMS9leGFtcGxlLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgVGhpcyBpcyBhIG5vbi1mdW5jdGlvbmFsIHBsYWNlaG9sZGVyIGZpbGUsIGhlcmUgZm9yIGV4YW1wbGUgcHVycG9zZXMKKyMgb25seS4KKyMKKyMgSWYgeW91IGhhZCBhIHBhdGNoIGZvciB5b3VyIHJlY2lwZSwgeW91J2QgcHV0IGl0IGluIHRoaXMgZGlyZWN0b3J5CisjIGFuZCByZWZlcmVuY2UgaXQgZnJvbSB5b3VyIHJlY2lwZSdzIFNSQ19VUkk6CisjCisjICBTUkNfVVJJICs9ICJmaWxlOi8vZXhhbXBsZS5wYXRjaCIKKyMKKyMgTm90ZSB0aGF0IHlvdSBjb3VsZCBhbHNvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBwYXRjaAorIyB0byByZW1vdmUgdGhlIHZlcnNpb24gbnVtYmVyIG9yIHNpbXBseSByZW5hbWUgaXQgJ2ZpbGVzJy4gIERvaW5nIHNvCisjIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBzYW1lIGRpcmVjdG9yeSBmb3IgbXVsdGlwbGUgcmVjaXBlcy4KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbGF5ZXIvcmVjaXBlcy1leGFtcGxlL2V4YW1wbGUvZXhhbXBsZS1yZWNpcGUtMC4xL2hlbGxvd29ybGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWYyZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9sYXllci9yZWNpcGVzLWV4YW1wbGUvZXhhbXBsZS9leGFtcGxlLXJlY2lwZS0wLjEvaGVsbG93b3JsZC5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBwcmludGYoIkhlbGxvIFdvcmxkIVxuIik7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy8uZ2l0aWdub3JlIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZiBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTlkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpAQCAtMCwwICsxLDM5IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY29uZgorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IHt7PW1hY2hpbmV9fQorCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHt7PW1hY2hpbmV9fSBzeXN0ZW1zCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzIuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAic2NyZWVuIGtleWJvYXJkIHBjaSB1c2Job3N0IGV4dDIgZXh0MyBzZXJpYWwiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TICA9ICIuY29tbWVudCIKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgIHhmODYtdmlkZW8tZmJkZXYiCisKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlTMCIKK1VTRV9WVCA/PSAiMCIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCisKK0lNQUdFX0ZTVFlQRVMgPz0gImpmZnMyIHRhci5iejIiCitKRkZTMl9FUkFTRUJMT0NLID0gIjB4MTAwMDAiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19IGZpbGVzCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjE5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1wcmVlbXB0LXJ0LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBwcmVlbXB0LXJ0CitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF9wcmVlbXB0X3J0X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDVkZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSBzdGFuZGFyZAorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfc3RhbmRhcmRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFjNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIG1pcHMKKworaW5jbHVkZSB7ez1tYXBfdGlueV9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y3NDdmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTQ3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSwyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCitDT05GSUdfTUlQUz15CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5ZGMzZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpAQCAtMCwwICsxLDggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2ZzL3ZmYXQuc2NjCisKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKK2luY2x1ZGUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCkBAIC0wLDAgKzEsNSBAQAore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0KK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InVzZV9kZWZhdWx0X2tlcm5lbCIgcHJpbzoiMTAiIG1zZzoiV291bGQgeW91IGxpa2UgdG8gdXNlIHRoZSBkZWZhdWx0ICgzLjE5KSBrZXJuZWw/ICh5L24pIiBkZWZhdWx0OiJ5In19CisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIHVzZV9kZWZhdWx0X2tlcm5lbCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJrZXJuZWxfY2hvaWNlIiBnZW46ImJzcC5rZXJuZWwua2VybmVscyIgcHJpbzoiMTAiIG1zZzoiUGxlYXNlIGNob29zZSB0aGUga2VybmVsIHRvIHVzZSBpbiB0aGlzIEJTUDoiIGRlZmF1bHQ6ImxpbnV4LXlvY3RvXzMuMTkifX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCkBAIC0wLDAgKzEsMjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ZGIwMwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXJ0XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tcHJlZW1wdC1ydC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gImYzNTk5MmY4MGM4MWRjNWZhMWE5NzE2NWRmZDVjYmI4NDY2MWY3Y2IiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICIxYjUzNGIyZjhiYmU5YjhhNzczMjY4Y2ZhMzBhNDg1MDM0NmY2ZjVmIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwcy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTc5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJhMGFlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFjYzUxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2UxYmI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTkiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvLmdpdGlnbm9yZSBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0Ly5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmM1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsMzkgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKworTUFDSElORV9GRUFUVVJFUyA9ICJwY2kgZXh0MiBleHQzIHNlcmlhbCIKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCitLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlMgID0gIi5jb21tZW50IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWN1c3RvbSIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tZGV2IiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIiBvciBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiIDogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzBdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsX3ZlcnNpb24gPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMV0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKK1BSRUZFUlJFRF9WRVJTSU9OX3t7PXByZWZlcnJlZF9rZXJuZWx9fSA/PSAie3s9cHJlZmVycmVkX2tlcm5lbF92ZXJzaW9ufX0lIgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ4c2VydmVyIiBwcmlvOiI1MCIgbXNnOiJEbyB5b3UgbmVlZCBzdXBwb3J0IGZvciBYPyAoeS9uKSIgZGVmYXVsdDoieSIgfX0KK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorWFNFUlZFUiA/PSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiIKKworU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorVVNFX1ZUID89ICIwIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKKworSU1BR0VfRlNUWVBFUyA/PSAiamZmczIgdGFyLmJ6MiIKK0pGRlMyX0VSQVNFQkxPQ0sgPSAiMHgxMDAwMCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NjE5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCBtaXBzCisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDVkZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFjNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0ggbWlwcworCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZmRjYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJlMjZkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1OWRhYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjOTA2YgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsNjYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKKyNTT0MKK0NPTkZJR19DQVZJVU1fT0NURU9OX1NPQz15CitDT05GSUdfQ0FWSVVNX0NONjNYWFAxPXkKK0NPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFPTIKKworI0tlcm5lbAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0zMgorI0V4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCitDT05GSUdfTUlQUzMyX0NPTVBBVD15CitDT05GSUdfTUlQUzMyX08zMj15CitDT05GSUdfTUlQUzMyX04zMj15CisKKworI1BDSQorQ09ORklHX1BDST15CitDT05GSUdfUENJX01TST15CisKKyNJMkMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19PQ1RFT049eQorCitDT05GSUdfSFdfUkFORE9NX09DVEVPTj15CisKKyNTUEkKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9PQ1RFT049eQorCisjTWlzYworQ09ORklHX0VFUFJPTV9BVDI0PXkKK0NPTkZJR19FRVBST01fQVQyNT15CitDT05GSUdfT0NURU9OX1dEVD15CisKK0NPTkZJR19TVEFHSU5HPXkKKworI0V0aGVybmV0CitDT05GSUdfT0NURU9OX0VUSEVSTkVUPXkKK0NPTkZJR19PQ1RFT05fTUdNVF9FVEhFUk5FVD15CitDT05GSUdfTURJT19PQ1RFT049eQorCisjUEhZCitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfQkNNODdYWF9QSFk9eQorCisKKyNVU0IKK0NPTkZJR19VU0I9eQorQ09ORklHX09DVEVPTl9VU0I9eQorQ09ORklHX1VTQl9PQ1RFT05fRUhDST15CitDT05GSUdfVVNCX09DVEVPTl9PSENJPXkKK0NPTkZJR19VU0JfT0NURU9OMl9DT01NT049eQorCitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0RXPXkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkYzNlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSw4IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uc2NjCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0uY2ZnCisKK2luY2x1ZGUgY2ZnL3VzYi1tYXNzLXN0b3JhZ2Uuc2NjCitpbmNsdWRlIGNmZy9mcy92ZmF0LnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0ZTZjNwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xNCkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE0In19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhkYjAzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlNzk4OQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tdGlueS5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiODQwYmI4YzA1OTQxOGM0NzUzNDE1ZGY1NmM5YWZmMWMwZDUzNTRjOCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by10aW55X3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmEwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvbWlwczY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNmNkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2VkZ2Vyb3V0ZXIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICJkYmU1YjUyZTkzZmYxMTRiMmMwZjVkYTZmNmFmOTFmNTJjMThmMmI4IgorU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI2ZWRkYmY0Nzg3NWVmNDhkZGM1ODY0OTU3YTdiNjMzNjMxMDA3ODJiIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL21pcHM2NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRhZWVjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9taXBzNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvZWRnZXJvdXRlciIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9lZGdlcm91dGVyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvLmdpdGlnbm9yZSBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvY29uZi9tYWNoaW5lL21hY2hpbmUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRmN2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKQEAgLTAsMCArMSw4NyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNvbmYKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiB7ez1tYWNoaW5lfX0KKworI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciB7ez1tYWNoaW5lfX0gc3lzdGVtcworCitUQVJHRVRfRlBVID0gIiIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToidHVuZWZpbGUiIHByaW86IjQwIiBtc2c6IldoaWNoIG1hY2hpbmUgdHVuaW5nIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6InR1bmVfcHBjZTMwMGMzIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjNDc2IiBtc2c6InBwYzQ3NiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwYzYwM2UiIG1zZzoicHBjNjAzZSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwYzc0MDAiIG1zZzoicHBjNzQwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2UzMDBjMiIgbXNnOiJwcGNlMzAwYzIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlMzAwYzMiIG1zZzoicHBjZTMwMGMzIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTUwMCIgbXNnOiJwcGNlNTAwIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcHBjZTUwMG1jIiBtc2c6InBwY2U1MDBtYyB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U1MDB2MiIgbXNnOiJwcGNlNTAwdjIgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wcGNlNTUwMCIgbXNnOiJwcGNlNTUwMCB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3BwY2U2NTAwIiBtc2c6InBwY2U2NTAwIHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InR1bmVfcG93ZXI1IiBtc2c6InBvd2VyNSB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX3Bvd2VyNiIgbXNnOiJwb3dlcjYgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9wb3dlcjciIG1zZzoicG93ZXI3IHR1bmluZyBvcHRpbWl6YXRpb25zIiB9fQore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjNDc2IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGM2MDNlIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM2MDNlLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjNzQwMCI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2UzMDBjMiI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMyLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTMwMGMzIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNTAwIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwLmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcHBjZTUwMG1jIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wcGNlNTAwdjIiOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2U1NTAwIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3BwY2U2NTAwIjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMKK3t7IGlmIHR1bmVmaWxlID09ICJ0dW5lX3Bvd2VyNSI6IH19CitpbmNsdWRlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI1LmluYwore3sgaWYgdHVuZWZpbGUgPT0gInR1bmVfcG93ZXI2IjogfX0KK2luY2x1ZGUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9wb3dlcjciOiB9fQoraW5jbHVkZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNy5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ1SW1hZ2UiCisKK0VYVFJBX0lNQUdFREVQRU5EUyArPSAidS1ib290IgorVUJPT1RfTUFDSElORV97ez1tYWNoaW5lfX0gPSAiTVBDODMxNUVSREJfY29uZmlnIgorCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAia2V5Ym9hcmQgcGNpIGV4dDIgZXh0MyBzZXJpYWwiCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSI6IHByZWZlcnJlZF9rZXJuZWwgPSAibGludXgteW9jdG8tY3VzdG9tIiB9fQore3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJjdXN0b20iIG9yIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLWRldiIgOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCisKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWwgPSBrZXJuZWxfY2hvaWNlLnNwbGl0KCdfJylbMF0gfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSIgYW5kIGtlcm5lbF9jaG9pY2UgIT0gImxpbnV4LXlvY3RvLWRldiI6IHByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbiA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVsxXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogfX0KK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA/PSAie3s9cHJlZmVycmVkX2tlcm5lbH19IgorUFJFRkVSUkVEX1ZFUlNJT05fe3s9cHJlZmVycmVkX2tlcm5lbH19ID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsX3ZlcnNpb259fSUiCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InhzZXJ2ZXIiIHByaW86IjUwIiBtc2c6IkRvIHlvdSBuZWVkIHN1cHBvcnQgZm9yIFg/ICh5L24pIiBkZWZhdWx0OiJ5IiB9fQore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitYU0VSVkVSID89ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1mYmRldiIKKworUFJFRkVSUkVEX1ZFUlNJT05fdS1ib290ID89ICJ2MjAxNS4wMSUiCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJ1Ym9vdF9lbnRyeXBvaW50IiBwcmlvOiI0MCIgbXNnOiJQbGVhc2Ugc3BlY2lmeSBhIHZhbHVlIGZvciBVQk9PVF9FTlRSWVBPSU5UOiIgZGVmYXVsdDoiMHgwMDAwMDAwMCIgfX0KK1VCT09UX0VOVFJZUE9JTlQgPSAie3s9dWJvb3RfZW50cnlwb2ludH19IgorCit7eyBpbnB1dCB0eXBlOiJlZGl0IiBuYW1lOiJrZXJuZWxfZGV2aWNldHJlZSIgcHJpbzoiNDAiIG1zZzoiUGxlYXNlIHNwZWNpZnkgYSBbYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3h4eF0gdmFsdWUgZm9yIEtFUk5FTF9ERVZJQ0VUUkVFOiIgZGVmYXVsdDoibXBjODMxNWVyZGIuZHRzIiB9fQorS0VSTkVMX0RFVklDRVRSRUUgPSAiJHtTfS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMve3s9a2VybmVsX2RldmljZXRyZWV9fSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCisKK0lNQUdFX0ZTVFlQRVMgPz0gImpmZnMyIHRhci5iejIiCitKRkZTMl9FUkFTRUJMT0NLID0gIjB4NDAwMCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMGQ5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjOTI2NwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCBwb3dlcnBjCisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWQzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0ggcG93ZXJwYworCitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjk0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0ggcG93ZXJwYworCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ4OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1wYXRjaGVzLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmNzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZlMWZlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsMTY0IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0uY2ZnCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FSTklORworLgorLiBUaGlzIGZpbGUgaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBmcmFnbWVudCwgYW5kIG5vdCBhIGZ1bGwga2VybmVsCisuIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoZSBmaW5hbCBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBtYWRlIHVwIG9mCisuIGFuIGFzc2VtYmx5IG9mIHByb2Nlc3NlZCBmcmFnbWVudHMsIGVhY2ggb2Ygd2hpY2ggaXMgZGVzaWduZWQgdG8KKy4gY2FwdHVyZSBhIHNwZWNpZmljIHBhcnQgb2YgdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gKGUuZy4gcGxhdGZvcm0KKy4gY29uZmlndXJhdGlvbiwgZmVhdHVyZSBjb25maWd1cmF0aW9uLCBhbmQgYm9hcmQgc3BlY2lmaWMgaGFyZHdhcmUKKy4gY29uZmlndXJhdGlvbikuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiwgcGxlYXNlCisuIGNvbnN1bHQgdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbi4KKy4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfUFBDXzgzeHg9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19NUEM4MzF4X1JEQj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19QQ0k9eQorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisKKyMKKyMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX01URF9OQU5EPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworQ09ORklHX0dJQU5GQVI9eQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworQ09ORklHXzh4eHhfV0RUPXkKKworIworIyBJMkMgc3VwcG9ydAorIworQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19NUEM9eQorCitDT05GSUdfU0VOU09SU19MTTc1PXkKKworQ09ORklHX01JU0NfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfRUVQUk9NX0FUMjQ9eQorCisjCisjIFNQSSBzdXBwb3J0CisjCitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfTVBDOHh4eD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKK0NPTkZJR19IV01PTj15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CisKK0NPTkZJR19BVEE9eQorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKK0NPTkZJR19TQVRBX0ZTTD15CitDT05GSUdfQVRBX1NGRj15CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0I9bQorQ09ORklHX1VTQl9ERVZJQ0VGUz15CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPW0KK0NPTkZJR19VU0JfRUhDSV9GU0w9eQorQ09ORklHX1VTQl9TVE9SQUdFPW0KKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfQ0xBU1M9eQorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKworQ09ORklHX0tHREJfODI1MD1tCisKK0NPTkZJR19DUllQVE9fREVWX1RBTElUT1M9bQorCitDT05GSUdfRlNMX0RNQT15CisKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19TUEk9bQorCitDT05GSUdfVVNCX0ZTTF9NUEhfRFJfT0Y9eQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYWM4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBjZmcvZnMvdmZhdC5zY2MKKworaW5jbHVkZSBjZmcvZG1hZW5naW5lLnNjYworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2MjMxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDI2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjU0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxY2NiYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlODJmYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tdGlueV8zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjRmZDc2Y2M0ZjMzZTBhZmQ4ZjkwNmIxZThmMjMxYjZkMTNiNmM5OTMiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjg4Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9wb3dlcnBjL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IkRvIHlvdSBuZWVkIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiNGZkNzZjYzRmMzNlMGFmZDhmOTA2YjFlOGYyMzFiNmQxM2I2Yzk5MyIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcG93ZXJwYy9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDllODUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3Bvd2VycGMvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApAQCAtMCwwICsxLDMzIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0b18zLjE5IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMWNiZAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsNzQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJxZW11YXJjaCIgcHJpbzoiNSIgbXNnOiJXaGljaCBxZW11IGFyY2hpdGVjdHVyZSB3b3VsZCB5b3UgbGlrZSB0byB1c2U/IiBkZWZhdWx0OiJpMzg2IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6ImkzODYiIG1zZzoiaTM4NiAgICAoMzItYml0KSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4ODZfNjQiIG1zZzoieDg2XzY0ICAoNjQtYml0KSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJhcm0iIG1zZzoiQVJNICAgICAoMzItYml0KSIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJwb3dlcnBjIiBtc2c6IlBvd2VyUEMgKDMyLWJpdCkiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoibWlwcyIgbXNnOiJNSVBTICAgICgzMi1iaXQpIiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6Im1pcHM2NCIgbXNnOiJNSVBTNjQgICg2NC1iaXQpIiB9fQore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCit7eyBpZiBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK0RFRkFVTFRUVU5FID89ICJjb3JlMi02NCIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKK3t7IGlmIHFlbXVhcmNoID09ICJhcm0iOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKK3t7IGlmIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYwore3sgaWYgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKK3t7IGlmIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKwore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQorTUFDSElORV9GRUFUVVJFUyArPSAieDg2IgorS0VSTkVMX0lNQUdFVFlQRSA9ICJiekltYWdlIgorU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorWFNFUlZFUiA9ICJ4c2VydmVyLXhvcmcgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1zd3Jhc3QnLCAnJywgZCl9IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC12bW1vdXNlIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1rZXlib2FyZCBcCisgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLXZtd2FyZSIKKwore3sgaWYgcWVtdWFyY2ggPT0gImFybSI6IH19CitLRVJORUxfSU1BR0VUWVBFID0gInpJbWFnZSIKK1NFUklBTF9DT05TT0xFID0gIjExNTIwMCB0dHlBTUEwIgorCit7eyBpZiBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19CitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitTRVJJQUxfQ09OU09MRSA9ICIxMTUyMDAgdHR5UzAiCisKK3t7IGlmIHFlbXVhcmNoID09ICJtaXBzIiBvciBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKK0tFUk5FTF9BTFRfSU1BR0VUWVBFID0gInZtbGludXguYmluIgorU0VSSUFMX0NPTlNPTEUgPSAiMTE1MjAwIHR0eVMwIgorTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyA9ICIga2VybmVsLW1vZHVsZXMiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duL21hY2hpbmUubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24vbWFjaGluZS9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi9tYWNoaW5lL2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duXzEuMC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmQ5OTFjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiYXBwZW5kCkBAIC0wLDAgKzEgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MmQwMgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3s9bWFjaGluZX19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGRlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZgpAQCAtMCwwICsxLDc3IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKK3t7IGlmIHFlbXVhcmNoID09ICJhcm0iIG9yIHFlbXVhcmNoID09ICJwb3dlcnBjIiBvciBxZW11YXJjaCA9PSAibWlwcyIgb3IgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19CisgICAgRHJpdmVyICAgICAgICAibW91c2UiCit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiIgb3IgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CisgICAgRHJpdmVyICAgICAgICAidm1tb3VzZSIKKworICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIiBvciBxZW11YXJjaCA9PSAicG93ZXJwYyIgb3IgcWVtdWFyY2ggPT0gIm1pcHMiIG9yIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQorICAgIERyaXZlciAgICAgICAgImZiZGV2Igore3sgaWYgcWVtdWFyY2ggPT0gImkzODYiIG9yIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQorICAgIERyaXZlciAgICAgICAgInZtd2FyZSIKKworRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDk5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKQEAgLTAsMCArMSBAQAorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZiNTI4MwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy5ub2luc3RhbGwKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZGlybmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fSBmaWxlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhZmZiOAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTAgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCB7ez1xZW11YXJjaH19CisKK2luY2x1ZGUge3s9bWFwX3ByZWVtcHRfcnRfa2JyYW5jaChuZWVkX25ld19rYnJhbmNoLCBuZXdfa2JyYW5jaCwgZXhpc3Rpbmdfa2JyYW5jaCl9fQore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSI6IH19CiticmFuY2gge3s9bWFjaGluZX19CisKK2luY2x1ZGUge3s9bWFjaGluZX19LnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtc3RhbmRhcmQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTAzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxOSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0gge3s9cWVtdWFyY2h9fQorCit7eyBpZiBxZW11YXJjaCA9PSAiaTM4NiIgb3IgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19CitpbmNsdWRlIHt7PW1hcF9zdGFuZGFyZF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBxZW11YXJjaCA9PSAiYXJtIjogfX0KK2luY2x1ZGUgYnNwL2FybS12ZXJzYXRpbGUtOTI2ZWpzL2FybS12ZXJzYXRpbGUtOTI2ZWpzLXN0YW5kYXJkCit7eyBpZiBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19CitpbmNsdWRlIGJzcC9xZW11LXBwYzMyL3FlbXUtcHBjMzItc3RhbmRhcmQKK3t7IGlmIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK2luY2x1ZGUgYnNwL210aS1tYWx0YTMyL210aS1tYWx0YTMyLWJlLXN0YW5kYXJkCit7eyBpZiBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK2luY2x1ZGUgYnNwL210aS1tYWx0YTY0L210aS1tYWx0YTY0LWJlLXN0YW5kYXJkCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXRpbnkuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDk4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYwpAQCAtMCwwICsxLDEwIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdGlueS5zY2MKK2RlZmluZSBLTUFDSElORSB7ez1tYWNoaW5lfX0KK2RlZmluZSBLVFlQRSB0aW55CitkZWZpbmUgS0FSQ0gge3s9cWVtdWFyY2h9fQorCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItY29uZmlnLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWVmZGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWZlYXR1cmVzLnNjYwpAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NjA3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LmNmZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAxZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsNSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LnNjYwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LmNmZworCitrY29uZiBoYXJkd2FyZSB7ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnCitpbmNsdWRlIHt7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFkNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1saXN0Lm5vaW5zdGFsbApAQCAtMCwwICsxLDUgQEAKK3t7IGlmIGtlcm5lbF9jaG9pY2UgIT0gImN1c3RvbSI6IH19Cit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJ1c2VfZGVmYXVsdF9rZXJuZWwiIHByaW86IjEwIiBtc2c6IldvdWxkIHlvdSBsaWtlIHRvIHVzZSB0aGUgZGVmYXVsdCAoMy4xOSkga2VybmVsPyAoeS9uKSIgZGVmYXVsdDoieSJ9fQorCit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCB1c2VfZGVmYXVsdF9rZXJuZWwgPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToia2VybmVsX2Nob2ljZSIgZ2VuOiJic3Aua2VybmVsLmtlcm5lbHMiIHByaW86IjEwIiBtc2c6IlBsZWFzZSBjaG9vc2UgdGhlIGtlcm5lbCB0byB1c2UgaW4gdGhpcyBCU1A6IiBkZWZhdWx0OiJsaW51eC15b2N0b18zLjE5In19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ3OWJlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYmFwcGVuZApAQCAtMCwwICsxLDU2IEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB5b3VyIG5ldyBCU1AgYnJhbmNoIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgbWFjaGluZSBicmFuY2ggdG8gdXNlIGZvciB0aGlzIEJTUDoiIGRlZmF1bHQ6InN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9xZW11cHBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoieDg2XzY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiICBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwczY0IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiV291bGQgeW91IGxpa2UgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNWUxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDYyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1ydF8zLjE0IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJhcm0iIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gInBvd2VycGMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L3FlbXVwcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC9wcmVlbXB0LXJ0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvcHJlZW1wdC1ydCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9wcmVlbXB0LXJ0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXByZWVtcHQtcnQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tcnRfe3s9bWFjaGluZX19ID89ICJmMzU5OTJmODBjODFkYzVmYTFhOTcxNjVkZmQ1Y2JiODQ2NjFmN2NiIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiMWI1MzRiMmY4YmJlOWI4YTc3MzI2OGNmYTMwYTQ4NTAzNDZmNmY1ZiIKKyNMSU5VWF9WRVJTSU9OID0gIjMuMTQiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc5Y2UyCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApAQCAtMCwwICsxLDYyIEBACisjIHlvY3RvLWJzcC1maWxlbmFtZSB7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by10aW55XzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6Im5lZWRfbmV3X2ticmFuY2giIHByaW86IjIwIiBtc2c6IkRvIHlvdSBuZWVkIGEgbmV3IG1hY2hpbmUgYnJhbmNoIGZvciB0aGlzIEJTUCAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHJlLXVzZSBhbiBleGlzdGluZyBicmFuY2gpPyBbeS9uXSIgZGVmYXVsdDoieSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAiYXJtIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImFybSIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJpMzg2IiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIng4Nl82NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICIwMTQzYzZlYmI0YTJkNjNiMjQxZGY1ZjYwOGIxOWY0ODNmN2ViOWUwIgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4ZjU1YmVlMjQwMzE3NmE1MGNjMGRkNDE4MTFhYTYwZmNmMDcyNDNjIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gvcWVtdS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZWY0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsNjIgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJhcm0iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiYXJtIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJwb3dlcnBjIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImkzODYiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJ4ODZfNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwcyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZC90aW55IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3RpbnkvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzNjQiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQvdGlueSIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC90aW55L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJEbyB5b3UgbmVlZCBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXRpbnkuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgorCisjIHVuY29tbWVudCBhbmQgcmVwbGFjZSB0aGVzZSBTUkNSRVZzIHdpdGggdGhlIHJlYWwgY29tbWl0IGlkcyBvbmNlIHlvdSd2ZSBoYWQKKyMgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgY29tbWl0dGVkIHRvIHRoZSB1cHN0cmVhbSBsaW51eC15b2N0byByZXBvCisjU1JDUkVWX21hY2hpbmVfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjAxNDNjNmViYjRhMmQ2M2IyNDFkZjVmNjA4YjE5ZjQ4M2Y3ZWI5ZTAiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG8tdGlueV97ez1tYWNoaW5lfX0gPz0gIjhmNTViZWUyNDAzMTc2YTUwY2MwZGQ0MTgxMWFhNjBmY2YwNzI0M2MiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYwMTljCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHlvdXIgbmV3IEJTUCBicmFuY2ggb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhbiBleGlzdGluZyBtYWNoaW5lIGJyYW5jaCB0byB1c2UgZm9yIHRoaXMgQlNQOiIgZGVmYXVsdDoic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3FlbXVwcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAieSIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoibWlwcyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvbXRpLW1hbHRhMzIiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHM2NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvbXRpLW1hbHRhNjQiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiMDE0M2M2ZWJiNGEyZDYzYjI0MWRmNWY2MDhiMTlmNDgzZjdlYjllMCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjhmNTViZWUyNDAzMTc2YTUwY2MwZGQ0MTgxMWFhNjBmY2YwNzI0M2MiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3FlbXUvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc5OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC9xZW11L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQKQEAgLTAsMCArMSw2MiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG9fMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19Igore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHlvdXIgbmV3IEJTUCBicmFuY2ggb246IiBkZWZhdWx0OiJzdGFuZGFyZC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gImFybSI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZCIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhbiBleGlzdGluZyBtYWNoaW5lIGJyYW5jaCB0byB1c2UgZm9yIHRoaXMgQlNQOiIgZGVmYXVsdDoic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAicG93ZXJwYyI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoicG93ZXJwYyIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJwb3dlcnBjIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6InBvd2VycGMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL3FlbXVwcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAiaTM4NiI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJuZXdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYyIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJpMzg2IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYyIgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJ4ODZfNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkOnN0YW5kYXJkL2NvbW1vbi1wYy02NCIgIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iIGFuZCBxZW11YXJjaCA9PSAieDg2XzY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Ing4Nl82NCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiAgcHJpbzoiMjAiIG1zZzoiUGxlYXNlIGNob29zZSBhIG1hY2hpbmUgYnJhbmNoIHRvIGJhc2UgdGhpcyBCU1Agb246IiBkZWZhdWx0OiJzdGFuZGFyZC9jb21tb24tcGMtNjQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiIgYW5kIHFlbXVhcmNoID09ICJtaXBzIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTMyIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIiBhbmQgcWVtdWFyY2ggPT0gIm1pcHM2NCI6IH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2VsaXN0IiBuYW1lOiJleGlzdGluZ19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL210aS1tYWx0YTY0IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IiBhbmQgcWVtdWFyY2ggPT0gIm1pcHMiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6Im1pcHMiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiIGFuZCBxZW11YXJjaCA9PSAibWlwczY0IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBuYW1lYXBwZW5kOiJtaXBzNjQiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQorS0JSQU5DSF97ez1tYWNoaW5lfX0gID0gInt7PWV4aXN0aW5nX2ticmFuY2h9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToic21wIiBwcmlvOiIzMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSBTTVAgc3VwcG9ydD8gKHkvbikiIGRlZmF1bHQ6InkifX0KK3t7IGlmIHNtcCA9PSAieSI6IH19CitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3t7PW1hY2hpbmV9fSArPSAiIGNmZy9zbXAuc2NjIgorCitTUkNfVVJJICs9ICJmaWxlOi8ve3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvX3t7PW1hY2hpbmV9fSA/PSAiMDE0M2M2ZWJiNGEyZDYzYjI0MWRmNWY2MDhiMTlmNDgzZjdlYjllMCIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjhmNTViZWUyNDAzMTc2YTUwY2MwZGQ0MTgxMWFhNjBmY2YwNzI0M2MiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE5IgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvLmdpdGlnbm9yZSBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0Ly5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L2NvbmYvbWFjaGluZS9tYWNoaW5lLmNvbmYgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjgyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9jb25mL21hY2hpbmUvbWFjaGluZS5jb25mCkBAIC0wLDAgKzEsNjUgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jb25mCisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRToge3s9bWFjaGluZX19CisKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3Ige3s9bWFjaGluZX19IHN5c3RlbXMKKwore3sgaWYga2VybmVsX2Nob2ljZSA9PSAiY3VzdG9tIjogcHJlZmVycmVkX2tlcm5lbCA9ICJsaW51eC15b2N0by1jdXN0b20iIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlID09ICJsaW51eC15b2N0by1kZXYiOiBwcmVmZXJyZWRfa2VybmVsID0gImxpbnV4LXlvY3RvLWRldiIgfX0KK3t7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImN1c3RvbSIgb3Iga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IiA6IH19CitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gInt7PXByZWZlcnJlZF9rZXJuZWx9fSIKKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbCA9IGtlcm5lbF9jaG9pY2Uuc3BsaXQoJ18nKVswXSB9fQore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQga2VybmVsX2Nob2ljZSAhPSAibGludXgteW9jdG8tZGV2IjogcHJlZmVycmVkX2tlcm5lbF92ZXJzaW9uID0ga2VybmVsX2Nob2ljZS5zcGxpdCgnXycpWzFdIH19Cit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iIGFuZCBrZXJuZWxfY2hvaWNlICE9ICJsaW51eC15b2N0by1kZXYiOiB9fQorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsID89ICJ7ez1wcmVmZXJyZWRfa2VybmVsfX0iCitQUkVGRVJSRURfVkVSU0lPTl97ez1wcmVmZXJyZWRfa2VybmVsfX0gPz0gInt7PXByZWZlcnJlZF9rZXJuZWxfdmVyc2lvbn19JSIKKwore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToidHVuZWZpbGUiIHByaW86IjQwIiBtc2c6IldoaWNoIG1hY2hpbmUgdHVuaW5nIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8iIGRlZmF1bHQ6InR1bmVfY29yZTIiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoidHVuZV9jb3JlMiIgbXNnOiJDb3JlMiB0dW5pbmcgb3B0aW1pemF0aW9ucyIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ0dW5lX2NvcmVpNyIgbXNnOiJDb3JlaTcgdHVuaW5nIG9wdGltaXphdGlvbnMiIH19Cit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3JlMiI6IH19CitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCit7eyBpZiB0dW5lZmlsZSA9PSAidHVuZV9jb3JlaTciOiB9fQorREVGQVVMVFRVTkUgPz0gImNvcmVpNy02NCIKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUveDg2LWJhc2UuaW5jCisKK01BQ0hJTkVfRkVBVFVSRVMgKz0gIndpZmkgZWZpIHBjYmlvcyIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToieHNlcnZlciIgcHJpbzoiNTAiIG1zZzoiRG8geW91IG5lZWQgc3VwcG9ydCBmb3IgWD8gKHkvbikiIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToieHNlcnZlcl9jaG9pY2UiIHByaW86IjUwIiBtc2c6IlBsZWFzZSBzZWxlY3QgYW4geHNlcnZlciBmb3IgdGhpcyBtYWNoaW5lOiIgZGVmYXVsdDoieHNlcnZlcl9pOTE1IiB9fQorCit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl92ZXNhIiBtc2c6IlZFU0EgeHNlcnZlciBzdXBwb3J0IiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlIiB2YWw6InhzZXJ2ZXJfaTkxNSIgbXNnOiJpOTE1IHhzZXJ2ZXIgc3VwcG9ydCIgfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZSIgdmFsOiJ4c2VydmVyX2k5NjUiIG1zZzoiaTk2NSB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9mYmRldiIgbXNnOiJmYmRldiB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpbnB1dCB0eXBlOiJjaG9pY2UiIHZhbDoieHNlcnZlcl9tb2Rlc2V0dGluZyIgbXNnOiJtb2Rlc2V0dGluZyB4c2VydmVyIHN1cHBvcnQiIH19Cit7eyBpZiB4c2VydmVyID09ICJ5IjogfX0KK1hTRVJWRVIgPz0gIiR7WFNFUlZFUl9YODZfQkFTRX0gXAorICAgICAgICAgICAke1hTRVJWRVJfWDg2X0VYVH0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX3Zlc2EiOiB9fQorICAgICAgICAgICAke1hTRVJWRVJfWDg2X1ZFU0F9IFwKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTE1IjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9JOTE1fSBcCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfaTk2NSI6IH19CisgICAgICAgICAgICR7WFNFUlZFUl9YODZfSTk2NX0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX2ZiZGV2IjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9GQkRFVn0gXAore3sgaWYgeHNlcnZlciA9PSAieSIgYW5kIHhzZXJ2ZXJfY2hvaWNlID09ICJ4c2VydmVyX21vZGVzZXR0aW5nIjogfX0KKyAgICAgICAgICAgJHtYU0VSVkVSX1g4Nl9NT0RFU0VUVElOR30gXAore3sgaWYgeHNlcnZlciA9PSAieSI6IH19CisgICAgICAgICAgICIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAibGludXgtZmlybXdhcmUgdjg2ZCBlZWUtYWNwaS1zY3JpcHRzIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiIC0td2l0aC1iYXR0ZXJ5PWFjcGkiCisKK0dMSUJDX0FERE9OUyA9ICJucHRsIgorCit7eyBpZiB4c2VydmVyID09ICJ5IiBhbmQgeHNlcnZlcl9jaG9pY2UgPT0gInhzZXJ2ZXJfdmVzYSI6IH19CitBUFBFTkQgKz0gInZpZGVvPXZlc2FmYiB2Z2E9MHgzMTgiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL21hY2hpbmUubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQyZDAyCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lLm5vaW5zdGFsbApAQCAtMCwwICsxIEBACisjIHlvY3RvLWJzcC1kaXJuYW1lIHt7PW1hY2hpbmV9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9tYWNoaW5lL3hvcmcuY29uZiBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YTBmMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvbWFjaGluZS94b3JnLmNvbmYKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYgeHNlcnZlciA9PSAieSI6IH19IHRoaXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MzAwMwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiYXBwZW5kCkBAIC0wLDAgKzEsMiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYgeHNlcnZlciA9PSAieSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzLm5vaW5zdGFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkOTJjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMubm9pbnN0YWxsCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWRpcm5hbWUge3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIjogfX0gZmlsZXMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtcHJlZW1wdC1ydC5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTMyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXByZWVtcHQtcnQuc2NjCkBAIC0wLDAgKzEsMTYgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHByZWVtcHQtcnQKK2RlZmluZSBLQVJDSCB4ODZfNjQKKworaW5jbHVkZSB7ez1tYXBfcHJlZW1wdF9ydF9rYnJhbmNoKG5lZWRfbmV3X2ticmFuY2gsIG5ld19rYnJhbmNoLCBleGlzdGluZ19rYnJhbmNoKX19Cit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK2JyYW5jaCB7ez1tYWNoaW5lfX0KKworaW5jbHVkZSB7ez1tYWNoaW5lfX0uc2NjCisKKyMgZGVmYXVsdCBwb2xpY3kgZm9yIHByZWVtcHQtcnQga2VybmVscworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXN0YW5kYXJkLnNjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjlmOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS1zdGFuZGFyZC5zY2MKQEAgLTAsMCArMSwxNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXN0YW5kYXJkLnNjYworZGVmaW5lIEtNQUNISU5FIHt7PW1hY2hpbmV9fQorZGVmaW5lIEtUWVBFIHN0YW5kYXJkCitkZWZpbmUgS0FSQ0ggeDg2XzY0CisKK2luY2x1ZGUge3s9bWFwX3N0YW5kYXJkX2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKKworIyBkZWZhdWx0IHBvbGljeSBmb3Igc3RhbmRhcmQga2VybmVscworaW5jbHVkZSBjZmcvdXNiLW1hc3Mtc3RvcmFnZS5zY2MKK2luY2x1ZGUgY2ZnL2Jvb3QtbGl2ZS5zY2MKK2luY2x1ZGUgZmVhdHVyZXMvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wcm9maWxpbmcvcHJvZmlsaW5nLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS10aW55LnNjYyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIyMTQzMgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdGlueS5zY2MKQEAgLTAsMCArMSwxMCBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXRpbnkuc2NjCitkZWZpbmUgS01BQ0hJTkUge3s9bWFjaGluZX19CitkZWZpbmUgS1RZUEUgdGlueQorZGVmaW5lIEtBUkNIIHg4Nl82NAorCitpbmNsdWRlIHt7PW1hcF90aW55X2ticmFuY2gobmVlZF9uZXdfa2JyYW5jaCwgbmV3X2ticmFuY2gsIGV4aXN0aW5nX2ticmFuY2gpfX0KK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQorYnJhbmNoIHt7PW1hY2hpbmV9fQorCitpbmNsdWRlIHt7PW1hY2hpbmV9fS5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLWNvbmZpZy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc0ODllNAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1jb25maWcuY2ZnCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUtdXNlci1mZWF0dXJlcy5zY2MgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Mjc1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItZmVhdHVyZXMuc2NjCkBAIC0wLDAgKzEgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS11c2VyLXBhdGNoZXMuc2NjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Zjc0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9maWxlcy9tYWNoaW5lLXVzZXItcGF0Y2hlcy5zY2MKQEAgLTAsMCArMSBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5MGRkZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuY2ZnCkBAIC0wLDAgKzEsNDggQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5jZmcKK0NPTkZJR19QUklOVEs9eQorCisjIEJhc2ljIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBib3ggLSBuZXR3b3JrLCBVU0IsIFBDSSwgc291bmQgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19BVEE9eQorQ09ORklHX0FUQV9HRU5FUklDPXkKK0NPTkZJR19BVEFfU0ZGPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX01NQz15CitDT05GSUdfTU1DX1NESENJPXkKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfUjgxNjk9eQorQ09ORklHX1BBVEFfU0NIPXkKK0NPTkZJR19NTUNfU0RIQ0lfUENJPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19ORVQ9eQorQ09ORklHX1VTQl9VSENJX0hDRD15CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TRz15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX0hEQV9JTlRFTD15CisKKyMgTWFrZSBzdXJlIHRoZXNlIGFyZSBvbiwgb3RoZXJ3aXNlIHRoZSBib290dXAgd29uJ3QgYmUgZnVuICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX0lORVQ9eQorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfUEFDS0VUPXkKKworQ09ORklHX0kyQz15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfQUdQPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19QTT15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX0FDUEk9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfSU5QVVQ9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBOZWVkZWQgZm9yIGJvb3RpbmcgKGFuZCB1c2luZykgVVNCIG1lbW9yeSBzdGlja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitDT05GSUdfQkxLX0RFVl9MT09QPXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ09ORklHX05MU19JU084ODU5XzE9eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0NPTkZJR19SRF9HWklQPXkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvZmlsZXMvbWFjaGluZS5zY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI3YzI5MQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2ZpbGVzL21hY2hpbmUuc2NjCkBAIC0wLDAgKzEsMTQgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7PW1hY2hpbmV9fS5zY2MKK2tjb25mIGhhcmR3YXJlIHt7PW1hY2hpbmV9fS5jZmcKKworaW5jbHVkZSBmZWF0dXJlcy9zZXJpYWwvODI1MC5zY2MKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl92ZXNhIjogfX0KK2luY2x1ZGUgY2ZnL3Zlc2FmYi5zY2MKK3t7IGlmIHhzZXJ2ZXIgPT0gInkiIGFuZCB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTE1IiBvciB4c2VydmVyX2Nob2ljZSA9PSAieHNlcnZlcl9pOTY1IjogfX0KK2luY2x1ZGUgZmVhdHVyZXMvaTkxNS9pOTE1LnNjYworCitpbmNsdWRlIGNmZy91c2ItbWFzcy1zdG9yYWdlLnNjYworaW5jbHVkZSBmZWF0dXJlcy9wb3dlci9pbnRlbC5zY2MKKwora2NvbmYgaGFyZHdhcmUge3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZworaW5jbHVkZSB7ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWxpc3Qubm9pbnN0YWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9rZXJuZWwtbGlzdC5ub2luc3RhbGwKQEAgLTAsMCArMSw1IEBACit7eyBpZiBrZXJuZWxfY2hvaWNlICE9ICJjdXN0b20iOiB9fQore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToidXNlX2RlZmF1bHRfa2VybmVsIiBwcmlvOiIxMCIgbXNnOiJXb3VsZCB5b3UgbGlrZSB0byB1c2UgdGhlIGRlZmF1bHQgKDMuMTkpIGtlcm5lbD8gKHkvbikiIGRlZmF1bHQ6InkifX0KKwore3sgaWYga2VybmVsX2Nob2ljZSAhPSAiY3VzdG9tIiBhbmQgdXNlX2RlZmF1bHRfa2VybmVsID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Imtlcm5lbF9jaG9pY2UiIGdlbjoiYnNwLmtlcm5lbC5rZXJuZWxzIiBwcmlvOiIxMCIgbXNnOiJQbGVhc2UgY2hvb3NlIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoaXMgQlNQOiIgZGVmYXVsdDoibGludXgteW9jdG9fMy4xOSJ9fQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTYyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1kZXYuYmJhcHBlbmQKQEAgLTAsMCArMSwyNiBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tZGV2IjogfX0gdGhpcworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vZmlsZXM6IgorCitQUiA6PSAiJHtQUn0uMSIKKworQ09NUEFUSUJMRV9NQUNISU5FX3t7PW1hY2hpbmV9fSA9ICJ7ez1tYWNoaW5lfX0iCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIG5hbWVhcHBlbmQ6ImkzODYiIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkIiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgbmFtZWFwcGVuZDoiaTM4NiIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvYmFzZSIgfX0KKwore3sgaWYgbmVlZF9uZXdfa2JyYW5jaCA9PSAibiI6IH19CitLQlJBTkNIX3t7PW1hY2hpbmV9fSAgPSAie3s9ZXhpc3Rpbmdfa2JyYW5jaH19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJzbXAiIHByaW86IjMwIiBtc2c6IldvdWxkIHlvdSBsaWtlIFNNUCBzdXBwb3J0PyAoeS9uKSIgZGVmYXVsdDoieSJ9fQore3sgaWYgc21wID09ICJ5IjogfX0KK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfe3s9bWFjaGluZX19ICs9ICIgY2ZnL3NtcC5zY2MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly97ez1tYWNoaW5lfX0tc3RhbmRhcmQuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1jb25maWcuY2ZnIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1wYXRjaGVzLnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItZmVhdHVyZXMuc2NjIFwKKyAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyNTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzMuMTQuYmJhcHBlbmQKQEAgLTAsMCArMSwzMyBAQAorIyB5b2N0by1ic3AtZmlsZW5hbWUge3sgaWYga2VybmVsX2Nob2ljZSA9PSAibGludXgteW9jdG8tcnRfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3ByZWVtcHQtcnQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvcHJlZW1wdC1ydC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1wcmVlbXB0LXJ0LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXJ0X3t7PW1hY2hpbmV9fSA/PSAiZjM1OTkyZjgwYzgxZGM1ZmExYTk3MTY1ZGZkNWNiYjg0NjYxZjdjYiIKKyNTUkNSRVZfbWV0YV9wbi1saW51eC15b2N0by1ydF97ez1tYWNoaW5lfX0gPz0gIjFiNTM0YjJmOGJiZTliOGE3NzMyNjhjZmEzMGE0ODUwMzQ2ZjZmNWYiCisjTElOVVhfVkVSU0lPTiA9ICIzLjE0IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjY2JjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xNCI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZCBiL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYmFwcGVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU4MmZhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvYnNwL3N1YnN0cmF0ZS90YXJnZXQvYXJjaC94ODZfNjQvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV8zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvLXRpbnlfMy4xOSI6IH19IHRoaXMKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9L2ZpbGVzOiIKKworUFIgOj0gIiR7UFJ9LjEiCisKK0NPTVBBVElCTEVfTUFDSElORV97ez1tYWNoaW5lfX0gPSAie3s9bWFjaGluZX19IgorCit7eyBpbnB1dCB0eXBlOiJib29sZWFuIiBuYW1lOiJuZWVkX25ld19rYnJhbmNoIiBwcmlvOiIyMCIgbXNnOiJEbyB5b3UgbmVlZCBhIG5ldyBtYWNoaW5lIGJyYW5jaCBmb3IgdGhpcyBCU1AgKHRoZSBhbHRlcm5hdGl2ZSBpcyB0byByZS11c2UgYW4gZXhpc3RpbmcgYnJhbmNoKT8gW3kvbl0iIGRlZmF1bHQ6InkiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gInkiOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToibmV3X2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6ImV4aXN0aW5nX2ticmFuY2giIGdlbjoiYnNwLmtlcm5lbC5hbGxfYnJhbmNoZXMiIGJyYW5jaGVzX2Jhc2U6InN0YW5kYXJkL3RpbnkiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvdGlueS9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS10aW55LnNjYyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItY29uZmlnLmNmZyBcCisgICAgICAgICAgICBmaWxlOi8ve3s9bWFjaGluZX19LXVzZXItcGF0Y2hlcy5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWZlYXR1cmVzLnNjYyBcCisgICAgICAgICAgICIKKworIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgdGhlc2UgU1JDUkVWcyB3aXRoIHRoZSByZWFsIGNvbW1pdCBpZHMgb25jZSB5b3UndmUgaGFkCisjIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGNvbW1pdHRlZCB0byB0aGUgdXBzdHJlYW0gbGludXgteW9jdG8gcmVwbworI1NSQ1JFVl9tYWNoaW5lX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI4NDBiYjhjMDU5NDE4YzQ3NTM0MTVkZjU2YzlhZmYxYzBkNTM1NGM4IgorI1NSQ1JFVl9tZXRhX3BuLWxpbnV4LXlvY3RvLXRpbnlfe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMGI0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTQiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xNCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC9zdWJzdHJhdGUvdGFyZ2V0L2FyY2gveDg2XzY0L3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmJhcHBlbmQgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTYzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9ic3Avc3Vic3RyYXRlL3RhcmdldC9hcmNoL3g4Nl82NC9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE5LmJiYXBwZW5kCkBAIC0wLDAgKzEsMzMgQEAKKyMgeW9jdG8tYnNwLWZpbGVuYW1lIHt7IGlmIGtlcm5lbF9jaG9pY2UgPT0gImxpbnV4LXlvY3RvXzMuMTkiOiB9fSB0aGlzCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS9maWxlczoiCisKK1BSIDo9ICIke1BSfS4xIgorCitDT01QQVRJQkxFX01BQ0hJTkVfe3s9bWFjaGluZX19ID0gInt7PW1hY2hpbmV9fSIKKwore3sgaW5wdXQgdHlwZToiYm9vbGVhbiIgbmFtZToibmVlZF9uZXdfa2JyYW5jaCIgcHJpbzoiMjAiIG1zZzoiRG8geW91IG5lZWQgYSBuZXcgbWFjaGluZSBicmFuY2ggZm9yIHRoaXMgQlNQICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGJyYW5jaCk/IFt5L25dIiBkZWZhdWx0OiJ5IiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJ5IjogfX0KK3t7IGlucHV0IHR5cGU6ImNob2ljZWxpc3QiIG5hbWU6Im5ld19rYnJhbmNoIiBnZW46ImJzcC5rZXJuZWwuYWxsX2JyYW5jaGVzIiBicmFuY2hlc19iYXNlOiJzdGFuZGFyZDpzdGFuZGFyZC9jb21tb24tcGMtNjQiIHByaW86IjIwIiBtc2c6IlBsZWFzZSBjaG9vc2UgYSBtYWNoaW5lIGJyYW5jaCB0byBiYXNlIHRoaXMgQlNQIG9uOiIgZGVmYXVsdDoic3RhbmRhcmQvY29tbW9uLXBjLTY0L2Jhc2UiIH19CisKK3t7IGlmIG5lZWRfbmV3X2ticmFuY2ggPT0gIm4iOiB9fQore3sgaW5wdXQgdHlwZToiY2hvaWNlbGlzdCIgbmFtZToiZXhpc3Rpbmdfa2JyYW5jaCIgZ2VuOiJic3Aua2VybmVsLmFsbF9icmFuY2hlcyIgYnJhbmNoZXNfYmFzZToic3RhbmRhcmQ6c3RhbmRhcmQvY29tbW9uLXBjLTY0IiBwcmlvOiIyMCIgbXNnOiJQbGVhc2UgY2hvb3NlIGEgbWFjaGluZSBicmFuY2ggdG8gYmFzZSB0aGlzIEJTUCBvbjoiIGRlZmF1bHQ6InN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIiB9fQorCit7eyBpZiBuZWVkX25ld19rYnJhbmNoID09ICJuIjogfX0KK0tCUkFOQ0hfe3s9bWFjaGluZX19ICA9ICJ7ez1leGlzdGluZ19rYnJhbmNofX0iCisKK3t7IGlucHV0IHR5cGU6ImJvb2xlYW4iIG5hbWU6InNtcCIgcHJpbzoiMzAiIG1zZzoiRG8geW91IG5lZWQgU01QIHN1cHBvcnQ/ICh5L24pIiBkZWZhdWx0OiJ5In19Cit7eyBpZiBzbXAgPT0gInkiOiB9fQorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF97ez1tYWNoaW5lfX0gKz0gIiBjZmcvc21wLnNjYyIKKworU1JDX1VSSSArPSAiZmlsZTovL3t7PW1hY2hpbmV9fS1zdGFuZGFyZC5zY2MgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLWNvbmZpZy5jZmcgXAorICAgICAgICAgICAgZmlsZTovL3t7PW1hY2hpbmV9fS11c2VyLXBhdGNoZXMuc2NjIFwKKyAgICAgICAgICAgIGZpbGU6Ly97ez1tYWNoaW5lfX0tdXNlci1mZWF0dXJlcy5zY2MgXAorICAgICAgICAgICAiCisKKyMgdW5jb21tZW50IGFuZCByZXBsYWNlIHRoZXNlIFNSQ1JFVnMgd2l0aCB0aGUgcmVhbCBjb21taXQgaWRzIG9uY2UgeW91J3ZlIGhhZAorIyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBjb21taXR0ZWQgdG8gdGhlIHVwc3RyZWFtIGxpbnV4LXlvY3RvIHJlcG8KKyNTUkNSRVZfbWFjaGluZV9wbi1saW51eC15b2N0b197ez1tYWNoaW5lfX0gPz0gIjg0MGJiOGMwNTk0MThjNDc1MzQxNWRmNTZjOWFmZjFjMGQ1MzU0YzgiCisjU1JDUkVWX21ldGFfcG4tbGludXgteW9jdG9fe3s9bWFjaGluZX19ID89ICI0ZmQ3NmNjNGYzM2UwYWZkOGY5MDZiMWU4ZjIzMWI2ZDEzYjZjOTkzIgorI0xJTlVYX1ZFUlNJT04gPSAiMy4xOSIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2JzcC90YWdzLnB5IGIvc2NyaXB0cy9saWIvYnNwL3RhZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxOTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2JzcC90YWdzLnB5CkBAIC0wLDAgKzEsNDkgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHBsYWNlIHRvIGRlZmluZSBjb21tb24gY29uc3RhbnRzIGZvciB0aGUKKyMgWW9jdG8gQlNQIFRvb2xzLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGludGVsLmNvbT4KKyMKKworT1BFTl9UQUcgPSAgICAgInt7IgorQ0xPU0VfVEFHID0gICAgIn19IgorQVNTSUdOX1RBRyA9ICAgInt7PSIKK0lOUFVUX1RBRyA9ICAgICJpbnB1dCIKK0lGX1RBRyA9ICAgICAgICJpZiIKK0ZJTEVOQU1FX1RBRyA9ICJ5b2N0by1ic3AtZmlsZW5hbWUiCitESVJOQU1FX1RBRyA9ICAieW9jdG8tYnNwLWRpcm5hbWUiCisKK0lOREVOVF9TVFIgPSAgIiAgICAiCisKK0JMQU5LTElORV9TVFIgPSAib2Yud3JpdGUoXCJcXG5cIikiCitOT1JNQUxfU1RBUlQgPSAgIm9mLndyaXRlIgorT1BFTl9TVEFSVCA9ICAgICJjdXJyZW50X2ZpbGUgPSIKKworSU5QVVRfVFlQRV9QUk9QRVJUWSA9ICJ0eXBlIgorCitTUkNfVVJJX0ZJTEUgPSAiZmlsZTovLyIKKworR0lUX0NIRUNLX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by1kZXYuZ2l0IgorCisKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvZGV2dG9vbC9fX2luaXRfXy5weSBiL3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0ZDNlNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2RldnRvb2wvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIERldmVsb3BtZW50IHRvb2wgLSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgcGx1Z2lucworIworIyBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisiIiJEZXZ0b29sIHBsdWdpbnMgbW9kdWxlIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworCitjbGFzcyBEZXZ0b29sRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIGhhbmRsaW5nIGRldnRvb2wgZXJyb3JzIiIiCisgICAgcGFzcworCisKK2RlZiBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGluaXRfcGF0aCwgYnVpbGRkaXIsIGNtZCwgd2F0Y2g9RmFsc2UsICoqb3B0aW9ucyk6CisgICAgIiIiUnVuIGEgcHJvZ3JhbSBpbiBiaXRiYWtlIGJ1aWxkIGNvbnRleHQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpZiBub3QgJ2N3ZCcgaW4gb3B0aW9uczoKKyAgICAgICAgb3B0aW9uc1siY3dkIl0gPSBidWlsZGRpcgorICAgIGlmIGluaXRfcGF0aDoKKyAgICAgICAgIyBBcyB0aGUgT0UgaW5pdCBzY3JpcHQgbWFrZXMgdXNlIG9mIEJBU0hfU09VUkNFIHRvIGRldGVybWluZSBPRVJPT1QsCisgICAgICAgICMgYW5kIGNhbid0IGRldGVybWluZSBpdCB3aGVuIHJ1bm5pbmcgdW5kZXIgZGFzaCwgd2UgbmVlZCB0byBzZXQKKyAgICAgICAgIyB0aGUgZXhlY3V0YWJsZSB0byBiYXNoIHRvIGNvcnJlY3RseSBzZXQgdGhpbmdzIHVwCisgICAgICAgIGlmIG5vdCAnZXhlY3V0YWJsZScgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIG9wdGlvbnNbJ2V4ZWN1dGFibGUnXSA9ICdiYXNoJworICAgICAgICBsb2dnZXIuZGVidWcoJ0V4ZWN1dGluZyBjb21tYW5kOiAiJXMiIHVzaW5nIGluaXQgcGF0aCAlcycgJSAoY21kLCBpbml0X3BhdGgpKQorICAgICAgICBpbml0X3ByZWZpeCA9ICcuICVzICVzID4gL2Rldi9udWxsICYmICcgJSAoaW5pdF9wYXRoLCBidWlsZGRpcikKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuZGVidWcoJ0V4ZWN1dGluZyBjb21tYW5kICIlcyInICUgY21kKQorICAgICAgICBpbml0X3ByZWZpeCA9ICcnCisgICAgaWYgd2F0Y2g6CisgICAgICAgIGlmIHN5cy5zdGRvdXQuaXNhdHR5KCk6CisgICAgICAgICAgICAjIEZvb2wgYml0YmFrZSBpbnRvIHRoaW5raW5nIGl0J3Mgb3V0cHV0dGluZyB0byBhIHRlcm1pbmFsIChiZWNhdXNlIGl0IGlzLCBpbmRpcmVjdGx5KQorICAgICAgICAgICAgY21kID0gJ3NjcmlwdCAtZSAtcSAtYyAiJXMiIC9kZXYvbnVsbCcgJSBjbWQKKyAgICAgICAgcmV0dXJuIGV4ZWNfd2F0Y2goJyVzJXMnICUgKGluaXRfcHJlZml4LCBjbWQpLCAqKm9wdGlvbnMpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGJiLnByb2Nlc3MucnVuKCclcyVzJyAlIChpbml0X3ByZWZpeCwgY21kKSwgKipvcHRpb25zKQorCitkZWYgZXhlY193YXRjaChjbWQsICoqb3B0aW9ucyk6CisgICAgIiIiUnVuIHByb2dyYW0gd2l0aCBzdGRvdXQgc2hvd24gb24gc3lzLnN0ZG91dCIiIgorICAgIGltcG9ydCBiYgorICAgIGlmIGlzaW5zdGFuY2UoY21kLCBiYXNlc3RyaW5nKSBhbmQgbm90ICJzaGVsbCIgaW4gb3B0aW9uczoKKyAgICAgICAgb3B0aW9uc1sic2hlbGwiXSA9IFRydWUKKworICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgKipvcHRpb25zCisgICAgKQorCisgICAgYnVmID0gJycKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBvdXQgPSBwcm9jZXNzLnN0ZG91dC5yZWFkKDEpCisgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUob3V0KQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBidWYgKz0gb3V0CisgICAgICAgIGVsaWYgb3V0ID09ICcnIGFuZCBwcm9jZXNzLnBvbGwoKSAhPSBOb25lOgorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmIHByb2Nlc3MucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByYWlzZSBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yKGNtZCwgcHJvY2Vzcy5yZXR1cm5jb2RlLCBidWYsIE5vbmUpCisKKyAgICByZXR1cm4gYnVmLCBOb25lCisKK2RlZiBleGVjX2Zha2Vyb290KGQsIGNtZCwgKiprd2FyZ3MpOgorICAgICIiIlJ1biBhIGNvbW1hbmQgdW5kZXIgZmFrZXJvb3QgKHBzZXVkbywgaW4gZmFjdCkgc28gdGhhdCBpdCBwaWNrcyB1cCB0aGUgYXBwcm9wcmlhdGUgZmlsZSBwZXJtaXNzaW9ucyIiIgorICAgICMgR3JhYiB0aGUgY29tbWFuZCBhbmQgY2hlY2sgaXQgYWN0dWFsbHkgZXhpc3RzCisgICAgZmFrZXJvb3RjbWQgPSBkLmdldFZhcignRkFLRVJPT1RDTUQnLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmYWtlcm9vdGNtZCk6CisgICAgICAgIGxvZ2dlci5lcnJvcigncHNldWRvIGV4ZWN1dGFibGUgJXMgY291bGQgbm90IGJlIGZvdW5kIC0gaGF2ZSB5b3UgcnVuIGEgYnVpbGQgeWV0PyBwc2V1ZG8tbmF0aXZlIHNob3VsZCBpbnN0YWxsIHRoaXMgYW5kIGlmIHlvdSBoYXZlIHJ1biBhbnkgYnVpbGQgdGhlbiB0aGF0IHNob3VsZCBoYXZlIGJlZW4gYnVpbHQnKQorICAgICAgICByZXR1cm4gMgorICAgICMgU2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudAorICAgIG5ld2VudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICBmYWtlcm9vdGVudiA9IGQuZ2V0VmFyKCdGQUtFUk9PVEVOVicsIFRydWUpCisgICAgZm9yIHZhcnZhbHVlIGluIGZha2Vyb290ZW52LnNwbGl0KCk6CisgICAgICAgIGlmICc9JyBpbiB2YXJ2YWx1ZToKKyAgICAgICAgICAgIHNwbGl0dmFsID0gdmFydmFsdWUuc3BsaXQoJz0nLCAxKQorICAgICAgICAgICAgbmV3ZW52W3NwbGl0dmFsWzBdXSA9IHNwbGl0dmFsWzFdCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbCgiJXMgJXMiICUgKGZha2Vyb290Y21kLCBjbWQpLCBlbnY9bmV3ZW52LCAqKmt3YXJncykKKworZGVmIHNldHVwX3RpbmZvaWwoY29uZmlnX29ubHk9RmFsc2UpOgorICAgICIiIkluaXRpYWxpemUgdGluZm9pbCBhcGkgZnJvbSBiaXRiYWtlIiIiCisgICAgaW1wb3J0IHNjcmlwdHBhdGgKKyAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgIGlmIG5vdCBiaXRiYWtlcGF0aDoKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBiaXRiYWtlIGJ5IHNlYXJjaGluZyBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoaXMgc2NyaXB0IG9yIFBBVEgiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICB0aW5mb2lsID0gYmIudGluZm9pbC5UaW5mb2lsKCkKKyAgICB0aW5mb2lsLnByZXBhcmUoY29uZmlnX29ubHkpCisgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkpCisgICAgcmV0dXJuIHRpbmZvaWwKKworZGVmIGdldF9yZWNpcGVfZmlsZShjb29rZXIsIHBuKToKKyAgICAiIiJGaW5kIHJlY2lwZSBmaWxlIGNvcnJlc3BvbmRpbmcgYSBwYWNrYWdlIG5hbWUiIiIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICByZWNpcGVmaWxlID0gb2UucmVjaXBldXRpbHMucG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgIHNraXByZWFzb25zID0gb2UucmVjaXBldXRpbHMuZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbikKKyAgICAgICAgaWYgc2tpcHJlYXNvbnM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1xuJy5qb2luKHNraXByZWFzb25zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICVzIiAlIHBuKQorICAgIHJldHVybiByZWNpcGVmaWxlCisKK2RlZiBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBwbiwgYXBwZW5kcyk6CisgICAgIiIiUGFyc2UgcmVjaXBlIG9mIGEgcGFja2FnZSIiIgorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworICAgIHJlY2lwZWZpbGUgPSBnZXRfcmVjaXBlX2ZpbGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgIGlmIG5vdCByZWNpcGVmaWxlOgorICAgICAgICAjIEVycm9yIGFscmVhZHkgbG9nZ2VkCisgICAgICAgIHJldHVybiBOb25lCisgICAgaWYgYXBwZW5kczoKKyAgICAgICAgYXBwZW5kX2ZpbGVzID0gdGluZm9pbC5jb29rZXIuY29sbGVjdGlvbi5nZXRfZmlsZV9hcHBlbmRzKHJlY2lwZWZpbGUpCisgICAgICAgICMgRmlsdGVyIG91dCBhcHBlbmRzIGZyb20gdGhlIHdvcmtzcGFjZQorICAgICAgICBhcHBlbmRfZmlsZXMgPSBbcGF0aCBmb3IgcGF0aCBpbiBhcHBlbmRfZmlsZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwYXRoLnN0YXJ0c3dpdGgoY29uZmlnLndvcmtzcGFjZV9wYXRoKV0KKyAgICByZXR1cm4gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIGFwcGVuZF9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLWltYWdlLnB5IGIvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC1pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzAxNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvZGV2dG9vbC9idWlsZC1pbWFnZS5weQpAQCAtMCwwICsxLDkxIEBACisjIERldmVsb3BtZW50IHRvb2wgLSBidWlsZC1pbWFnZSBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiJEZXZ0b29sIHBsdWdpbiBjb250YWluaW5nIHRoZSBidWlsZC1pbWFnZSBzdWJjb21tYW5kLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gYmIucHJvY2VzcyBpbXBvcnQgRXhlY3V0aW9uRXJyb3IKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgcGFyc2VfcmVjaXBlCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIF9nZXRfcmVjaXBlcyh3b3Jrc3BhY2UsIGNvbmZpZyk6CisgICAgIiIiR2V0IGxpc3Qgb2YgdGFyZ2V0IHJlY2lwZXMgZnJvbSB0aGUgd29ya3NwYWNlLiIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorICAgIGZvciByZWNpcGUgaW4gd29ya3NwYWNlOgorICAgICAgICBkYXRhID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgcmVjaXBlLCBUcnVlKQorICAgICAgICBpZiAnY2xhc3MtdGFyZ2V0JyBpbiBkYXRhLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkuc3BsaXQoJzonKToKKyAgICAgICAgICAgIGlmIHJlY2lwZSBpbiBkYXRhLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlY2lwZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlNraXBwaW5nIHJlY2lwZSAlcyBhcyBpdCBkb2Vzbid0IHByb2R1Y2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlIHdpdGggdGhlIHNhbWUgbmFtZSIsIHJlY2lwZSkKKyAgICB0aW5mb2lsLnNodXRkb3duKCkKKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBidWlsZF9pbWFnZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnYnVpbGQtaW1hZ2UnIHN1YmNvbW1hbmQuIiIiCisgICAgaW1hZ2UgPSBhcmdzLnJlY2lwZQorICAgIGFwcGVuZGZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMuYmJhcHBlbmQnICUgaW1hZ2UpCisKKyAgICAjIHJlbW92ZSA8aW1hZ2U+LmJiYXBlbmQgdG8gbWFrZSBzdXJlIHNldHVwX3RpbmZvaWwgZG9lc24ndAorICAgICMgYnJlYWtlIGJlY2F1c2Ugb2YgaXQKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShhcHBlbmRmaWxlKToKKyAgICAgICAgb3MudW5saW5rKGFwcGVuZGZpbGUpCisKKyAgICByZWNpcGVzID0gX2dldF9yZWNpcGVzKHdvcmtzcGFjZSwgY29uZmlnKQorICAgIGlmIHJlY2lwZXM6CisgICAgICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGFmaWxlOgorICAgICAgICAgICAgIyBpbmNsdWRlIHNlbGVjdGVkIHJlY2lwZXMgaW50byB0aGUgaW1hZ2UKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgJXMiXG4nICUgJyAnLmpvaW4ocmVjaXBlcykpCisKKyAgICAgICAgICAgICMgR2VuZXJhdGUgbm90aWZpY2F0aW9uIGNhbGxiYWNrIGRldnRvb2xfd2Fybl9pbWFnZV9leHRlbmRlZAorICAgICAgICAgICAgYWZpbGUud3JpdGUoJ2RvX3Jvb3Rmc1twcmVmdW5jc10gKz0gImRldnRvb2xfd2Fybl9pbWFnZV9leHRlbmRlZCJcblxuJykKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCJweXRob24gZGV2dG9vbF93YXJuX2ltYWdlX2V4dGVuZGVkKCkge1xuIikKKyAgICAgICAgICAgIGFmaWxlLndyaXRlKCIgICAgYmIucGxhaW4oJ05PVEU6ICUlczogYnVpbGRpbmcgd2l0aCBhZGRpdGlvbmFsICdcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgJ3BhY2thZ2VzIGR1ZSB0byBcImRldnRvb2wgYnVpbGQtaW1hZ2VcIiciCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAlJSBkLmdldFZhcignUE4nLCBUcnVlKSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgYmIucGxhaW4oJ05PVEU6IGRlbGV0ZSAlJXMgdG8gY2xlYXIgdGhpcycgJSUgXFxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgJyVzJylcbiIgJSBvcy5wYXRoLnJlbHBhdGgoYXBwZW5kZmlsZSwgYmFzZXBhdGgpKQorICAgICAgICAgICAgYWZpbGUud3JpdGUoIn1cbiIpCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdCdWlsZGluZyBpbWFnZSAlcyB3aXRoIHRoZSBmb2xsb3dpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGl0aW9uYWwgcGFja2FnZXM6ICVzJywgaW1hZ2UsICcgJy5qb2luKHJlY2lwZXMpKQorICAgIGVsc2U6CisgICAgICAgIGxvZ2dlci53YXJuaW5nKCdObyByZWNpcGVzIGluIHdvcmtzcGFjZSwgYnVpbGRpbmcgaW1hZ2UgJXMgdW5tb2RpZmllZCcsIGltYWdlKQorCisgICAgIyBydW4gYml0YmFrZSB0byBidWlsZCBpbWFnZQorICAgIHRyeToKKyAgICAgICAgZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYml0YmFrZSAlcycgJSBpbWFnZSwgd2F0Y2g9VHJ1ZSkKKyAgICBleGNlcHQgRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICByZXR1cm4gZXJyLmV4aXRjb2RlCisKKyAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IGJ1aWx0ICVzJywgaW1hZ2UpCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhlIGJ1aWxkLWltYWdlIHBsdWdpbiIiIgorICAgIHBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYnVpbGQtaW1hZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWlsZCBpbWFnZSBpbmNsdWRpbmcgd29ya3NwYWNlIHJlY2lwZSBwYWNrYWdlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdCdWlsZHMgYW4gaW1hZ2UsIGV4dGVuZGluZyBpdCB0byBpbmNsdWRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2VzIGZyb20gcmVjaXBlcyBpbiB0aGUgd29ya3NwYWNlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdyZWNpcGUnLCBoZWxwPSdJbWFnZSByZWNpcGUgdG8gYnVpbGQnKQorICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1idWlsZF9pbWFnZSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2RldnRvb2wvYnVpbGQucHkgYi9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWFmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9kZXZ0b29sL2J1aWxkLnB5CkBAIC0wLDAgKzEsNzcgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIGJ1aWxkIGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIiIiRGV2dG9vbCBidWlsZCBwbHVnaW4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgYmIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBEZXZ0b29sRXJyb3IKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RldnRvb2wnKQorCitkZWYgcGx1Z2luX2luaXQocGx1Z2lubGlzdCk6CisgICAgIiIiUGx1Z2luIGluaXRpYWxpemF0aW9uIiIiCisgICAgcGFzcworCitkZWYgX2NyZWF0ZV9jb25mX2ZpbGUodmFsdWVzLCBjb25mX2ZpbGU9Tm9uZSk6CisgICAgaWYgbm90IGNvbmZfZmlsZToKKyAgICAgICAgZmQsIGNvbmZfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoc3VmZml4PScuY29uZicpCisgICAgZWxpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKGNvbmZfZmlsZSkpOgorICAgICAgICBsb2dnZXIuZGVidWcoIkNyZWF0aW5nIGZvbGRlciAlcyIgJSBvcy5wYXRoLmRpcm5hbWUoY29uZl9maWxlKSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShjb25mX2ZpbGUpKQorICAgIHdpdGggb3Blbihjb25mX2ZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gdmFsdWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZi53cml0ZSgnJXMgPSAiJXMiXG4nICUgKGtleSwgdmFsdWUpKQorICAgIHJldHVybiBjb25mX2ZpbGUKKworZGVmIGJ1aWxkKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdidWlsZCcgc3ViY29tbWFuZCIiIgorICAgIGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHJlY2lwZSBuYW1lZCAlcyBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgYnVpbGRfdGFzayA9IGNvbmZpZy5nZXQoJ0J1aWxkJywgJ2J1aWxkX3Rhc2snLCAncG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICBwb3N0ZmlsZV9wYXJhbSA9ICIiCisgICAgcG9zdGZpbGUgPSAiIgorICAgIGlmIGFyZ3MuZGlzYWJsZV9wYXJhbGxlbF9tYWtlOgorICAgICAgICBsb2dnZXIuaW5mbygiRGlzYWJsaW5nICdtYWtlJyBwYXJhbGxlbGlzbSIpCisgICAgICAgIHBvc3RmaWxlID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnY29uZicsICdkaXNhYmxlX3BhcmFsbGVsaXNtLmNvbmYnKQorICAgICAgICBfY3JlYXRlX2NvbmZfZmlsZSh7J1BBUkFMTEVMX01BS0UnOicnfSwgcG9zdGZpbGUpCisgICAgICAgIHBvc3RmaWxlX3BhcmFtID0gIi1SICVzIiAlIHBvc3RmaWxlCisgICAgdHJ5OgorICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAnYml0YmFrZSAtYyAlcyAlcyAlcycgJSAoYnVpbGRfdGFzaywgcG9zdGZpbGVfcGFyYW0sIGFyZ3MucmVjaXBlbmFtZSksIHdhdGNoPVRydWUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgIyBXZSd2ZSBhbHJlYWR5IHNlZW4gdGhlIG91dHB1dCBzaW5jZSB3YXRjaD1UcnVlLCBzbyBqdXN0IGVuc3VyZSB3ZSByZXR1cm4gc29tZXRoaW5nIHRvIHRoZSB1c2VyCisgICAgICAgIHJldHVybiBlLmV4aXRjb2RlCisgICAgZmluYWxseToKKyAgICAgICAgaWYgcG9zdGZpbGU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1JlbW92aW5nIHBvc3RmaWxlJykKKyAgICAgICAgICAgIG9zLnJlbW92ZShwb3N0ZmlsZSkKKworICAgIHJldHVybiAwCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhpcyBwbHVnaW4iIiIKKyAgICBwYXJzZXJfYnVpbGQgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2J1aWxkJywgaGVscD0nQnVpbGQgYSByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQnVpbGRzIHRoZSBzcGVjaWZpZWQgcmVjaXBlIHVzaW5nIGJpdGJha2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyX2J1aWxkLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J1JlY2lwZSB0byBidWlsZCcpCisgICAgcGFyc2VyX2J1aWxkLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1kaXNhYmxlLXBhcmFsbGVsLW1ha2UnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEaXNhYmxlIG1ha2UgcGFyYWxsZWxpc20nKQorICAgIHBhcnNlcl9idWlsZC5zZXRfZGVmYXVsdHMoZnVuYz1idWlsZCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5IGIvc2NyaXB0cy9saWIvZGV2dG9vbC9kZXBsb3kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5M2FkZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL2RldnRvb2wvZGVwbG95LnB5CkBAIC0wLDAgKzEsMTQ5IEBACisjIERldmVsb3BtZW50IHRvb2wgLSBkZXBsb3kvdW5kZXBsb3kgY29tbWFuZCBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisiIiJEZXZ0b29sIHBsdWdpbiBjb250YWluaW5nIHRoZSBkZXBsb3kgc3ViY29tbWFuZHMiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19mYWtlcm9vdCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIGRlcGxveShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnZGVwbG95JyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBpZiBub3QgYXJncy5yZWNpcGVuYW1lIGluIHdvcmtzcGFjZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyByZWNpcGUgbmFtZWQgJXMgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKyAgICB0cnk6CisgICAgICAgIGhvc3QsIGRlc3RkaXIgPSBhcmdzLnRhcmdldC5zcGxpdCgnOicpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIGRlc3RkaXIgPSAnLycKKyAgICBlbHNlOgorICAgICAgICBhcmdzLnRhcmdldCA9IGhvc3QKKworICAgIGRlcGxveV9kaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICd0YXJnZXRfZGVwbG95JywgYXJncy50YXJnZXQpCisgICAgZGVwbG95X2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGVwbG95X2RpciwgYXJncy5yZWNpcGVuYW1lICsgJy5saXN0JykKKworICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICB0cnk6CisgICAgICAgIHJkID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlX3NpbXBsZSh0aW5mb2lsLmNvb2tlciwgYXJncy5yZWNpcGVuYW1lLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdFeGNlcHRpb24gcGFyc2luZyByZWNpcGUgJXM6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJncy5yZWNpcGVuYW1lLCBlKSkKKyAgICByZWNpcGVfb3V0ZGlyID0gcmQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVjaXBlX291dGRpcikgb3Igbm90IG9zLmxpc3RkaXIocmVjaXBlX291dGRpcik6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignTm8gZmlsZXMgdG8gZGVwbG95IC0gaGF2ZSB5b3UgYnVpbHQgdGhlICVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWNpcGU/IElmIHNvLCB0aGUgaW5zdGFsbCBzdGVwIGhhcyBub3QgaW5zdGFsbGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbnkgZmlsZXMuJyAlIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGlmIGFyZ3MuZHJ5X3J1bjoKKyAgICAgICAgcHJpbnQoJ0ZpbGVzIHRvIGJlIGRlcGxveWVkIGZvciAlcyBvbiB0YXJnZXQgJXM6JyAlIChhcmdzLnJlY2lwZW5hbWUsIGFyZ3MudGFyZ2V0KSkKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlX291dGRpcik6CisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgcHJpbnQoJyAgJXMnICUgb3MucGF0aC5qb2luKGRlc3RkaXIsIG9zLnBhdGgucmVscGF0aChyb290LCByZWNpcGVfb3V0ZGlyKSwgZm4pKQorICAgICAgICByZXR1cm4gMAorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZGVwbG95X2ZpbGUpOgorICAgICAgICBpZiB1bmRlcGxveShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICAgICAgICAgIyBFcnJvciBhbHJlYWR5IHNob3duCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgZXh0cmFvcHRpb25zID0gJycKKyAgICBpZiBhcmdzLm5vX2hvc3RfY2hlY2s6CisgICAgICAgIGV4dHJhb3B0aW9ucyArPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgaWYgYXJncy5zaG93X3N0YXR1czoKKyAgICAgICAgdGFyZXh0cmFjdG9wdHMgPSAneHYnCisgICAgZWxzZToKKyAgICAgICAgdGFyZXh0cmFjdG9wdHMgPSAneCcKKyAgICAgICAgZXh0cmFvcHRpb25zICs9ICcgLXEnCisgICAgIyBXZSBjYW5ub3QgdXNlIHNjcCBoZXJlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcHJlc2VydmUgc3ltbGlua3MKKyAgICByZXQgPSBleGVjX2Zha2Vyb290KHJkLCAndGFyIGNmIC0gLiB8IHNzaCAlcyAlcyBcJ3RhciAlcyAtQyAlcyAtZiAtXCcnICUgKGV4dHJhb3B0aW9ucywgYXJncy50YXJnZXQsIHRhcmV4dHJhY3RvcHRzLCBkZXN0ZGlyKSwgY3dkPXJlY2lwZV9vdXRkaXIsIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignRGVwbG95IGZhaWxlZCAtIHJlcnVuIHdpdGggLXMgdG8gZ2V0IGEgY29tcGxldGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIG1lc3NhZ2UnKQorCisgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSBkZXBsb3llZCAlcycgJSByZWNpcGVfb3V0ZGlyKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlcGxveV9kaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhkZXBsb3lfZGlyKQorCisgICAgZmlsZXNfbGlzdCA9IFtdCisgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsocmVjaXBlX291dGRpcik6CisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSksIHJlY2lwZV9vdXRkaXIpCisgICAgICAgICAgICBmaWxlc19saXN0LmFwcGVuZChvcy5wYXRoLmpvaW4oZGVzdGRpciwgZmlsZW5hbWUpKQorCisgICAgd2l0aCBvcGVuKGRlcGxveV9maWxlLCAndycpIGFzIGZvYmo6CisgICAgICAgIGZvYmoud3JpdGUoJ1xuJy5qb2luKGZpbGVzX2xpc3QpKQorCisgICAgcmV0dXJuIDAKKworZGVmIHVuZGVwbG95KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICd1bmRlcGxveScgc3ViY29tbWFuZCIiIgorICAgIGRlcGxveV9maWxlID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAndGFyZ2V0X2RlcGxveScsIGFyZ3MudGFyZ2V0LCBhcmdzLnJlY2lwZW5hbWUgKyAnLmxpc3QnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXBsb3lfZmlsZSk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignJXMgaGFzIG5vdCBiZWVuIGRlcGxveWVkJyAlIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGlmIGFyZ3MuZHJ5X3J1bjoKKyAgICAgICAgcHJpbnQoJ1ByZXZpb3VzbHkgZGVwbG95ZWQgZmlsZXMgdG8gYmUgdW4tZGVwbG95ZWQgZm9yICVzIG9uIHRhcmdldCAlczonICUgKGFyZ3MucmVjaXBlbmFtZSwgYXJncy50YXJnZXQpKQorICAgICAgICB3aXRoIG9wZW4oZGVwbG95X2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgcHJpbnQoJyAgJXMnICUgbGluZS5yc3RyaXAoKSkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGV4dHJhb3B0aW9ucyA9ICcnCisgICAgaWYgYXJncy5ub19ob3N0X2NoZWNrOgorICAgICAgICBleHRyYW9wdGlvbnMgKz0gJy1vIFVzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwgLW8gU3RyaWN0SG9zdEtleUNoZWNraW5nPW5vJworICAgIGlmIG5vdCBhcmdzLnNob3dfc3RhdHVzOgorICAgICAgICBleHRyYW9wdGlvbnMgKz0gJyAtcScKKworICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgic2NwICVzICVzICVzOi90bXAiICUgKGV4dHJhb3B0aW9ucywgZGVwbG95X2ZpbGUsIGFyZ3MudGFyZ2V0KSwgc2hlbGw9VHJ1ZSkKKyAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdGYWlsZWQgdG8gY29weSBmaWxlIGxpc3QgdG8gJXMgLSByZXJ1biB3aXRoIC1zIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXQgYSBjb21wbGV0ZSBlcnJvciBtZXNzYWdlJyAlIGFyZ3MudGFyZ2V0KQorCisgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJzc2ggJXMgJXMgJ3hhcmdzIC1uMSBybSAtZiA8L3RtcC8lcyciICUgKGV4dHJhb3B0aW9ucywgYXJncy50YXJnZXQsIG9zLnBhdGguYmFzZW5hbWUoZGVwbG95X2ZpbGUpKSwgc2hlbGw9VHJ1ZSkKKyAgICBpZiByZXQgPT0gMDoKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSB1bmRlcGxveWVkICVzJyAlIGFyZ3MucmVjaXBlbmFtZSkKKyAgICAgICAgb3MucmVtb3ZlKGRlcGxveV9maWxlKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignVW5kZXBsb3kgZmFpbGVkIC0gcmVydW4gd2l0aCAtcyB0byBnZXQgYSBjb21wbGV0ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3IgbWVzc2FnZScpCisKKyAgICByZXR1cm4gcmV0CisKKworZGVmIHJlZ2lzdGVyX2NvbW1hbmRzKHN1YnBhcnNlcnMsIGNvbnRleHQpOgorICAgICIiIlJlZ2lzdGVyIGRldnRvb2wgc3ViY29tbWFuZHMgZnJvbSB0aGUgZGVwbG95IHBsdWdpbiIiIgorICAgIHBhcnNlcl9kZXBsb3kgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2RlcGxveS10YXJnZXQnLCBoZWxwPSdEZXBsb3kgcmVjaXBlIG91dHB1dCBmaWxlcyB0byBsaXZlIHRhcmdldCBtYWNoaW5lJykKKyAgICBwYXJzZXJfZGVwbG95LmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J1JlY2lwZSB0byBkZXBsb3knKQorICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCd0YXJnZXQnLCBoZWxwPSdMaXZlIHRhcmdldCBtYWNoaW5lIHJ1bm5pbmcgYW4gc3NoIHNlcnZlcjogdXNlckBob3N0bmFtZVs6ZGVzdGRpcl0nKQorICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCctYycsICctLW5vLWhvc3QtY2hlY2snLCBoZWxwPSdEaXNhYmxlIHNzaCBob3N0IGtleSBjaGVja2luZycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2RlcGxveS5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2hvdy1zdGF0dXMnLCBoZWxwPSdTaG93IHByb2dyZXNzL3N0YXR1cyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9kZXBsb3kuYWRkX2FyZ3VtZW50KCctbicsICctLWRyeS1ydW4nLCBoZWxwPSdMaXN0IGZpbGVzIHRvIGJlIGRlcGxveWVkIG9ubHknLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9kZXBsb3kuc2V0X2RlZmF1bHRzKGZ1bmM9ZGVwbG95KQorCisgICAgcGFyc2VyX3VuZGVwbG95ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCd1bmRlcGxveS10YXJnZXQnLCBoZWxwPSdVbmRlcGxveSByZWNpcGUgb3V0cHV0IGZpbGVzIGluIGxpdmUgdGFyZ2V0IG1hY2hpbmUnKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdSZWNpcGUgdG8gdW5kZXBsb3knKQorICAgIHBhcnNlcl91bmRlcGxveS5hZGRfYXJndW1lbnQoJ3RhcmdldCcsIGhlbHA9J0xpdmUgdGFyZ2V0IG1hY2hpbmUgcnVubmluZyBhbiBzc2ggc2VydmVyOiB1c2VyQGhvc3RuYW1lJykKKyAgICBwYXJzZXJfdW5kZXBsb3kuYWRkX2FyZ3VtZW50KCctYycsICctLW5vLWhvc3QtY2hlY2snLCBoZWxwPSdEaXNhYmxlIHNzaCBob3N0IGtleSBjaGVja2luZycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX3VuZGVwbG95LmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zaG93LXN0YXR1cycsIGhlbHA9J1Nob3cgcHJvZ3Jlc3Mvc3RhdHVzIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX3VuZGVwbG95LmFkZF9hcmd1bWVudCgnLW4nLCAnLS1kcnktcnVuJywgaGVscD0nTGlzdCBmaWxlcyB0byBiZSB1bmRlcGxveWVkIG9ubHknLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl91bmRlcGxveS5zZXRfZGVmYXVsdHMoZnVuYz11bmRlcGxveSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weSBiL3NjcmlwdHMvbGliL2RldnRvb2wvcGFja2FnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdhMzZiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvZGV2dG9vbC9wYWNrYWdlLnB5CkBAIC0wLDAgKzEsNjEgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIHBhY2thZ2UgY29tbWFuZCBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisiIiJEZXZ0b29sIHBsdWdpbiBjb250YWluaW5nIHRoZSBwYWNrYWdlIHN1YmNvbW1hbmRzIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBsb2dnaW5nCitmcm9tIGJiLnByb2Nlc3MgaW1wb3J0IEV4ZWN1dGlvbkVycm9yCitmcm9tIGRldnRvb2wgaW1wb3J0IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQsIHNldHVwX3RpbmZvaWwsIERldnRvb2xFcnJvcgorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAiIiJQbHVnaW4gaW5pdGlhbGl6YXRpb24iIiIKKyAgICBwYXNzCisKK2RlZiBwYWNrYWdlKGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdwYWNrYWdlJyBzdWJjb21tYW5kIiIiCisgICAgaWYgbm90IGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigibm8gcmVjaXBlIG5hbWVkICVzIGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpbWFnZV9wa2d0eXBlID0gY29uZmlnLmdldCgnUGFja2FnZScsICdpbWFnZV9wa2d0eXBlJywgJycpCisgICAgaWYgbm90IGltYWdlX3BrZ3R5cGU6CisgICAgICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGluZm9pbC5wcmVwYXJlKGNvbmZpZ19vbmx5PVRydWUpCisgICAgICAgICAgICBpbWFnZV9wa2d0eXBlID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGluZm9pbC5zaHV0ZG93bigpCisKKyAgICBwYWNrYWdlX3Rhc2sgPSBjb25maWcuZ2V0KCdQYWNrYWdlJywgJ3BhY2thZ2VfdGFzaycsICdwYWNrYWdlX3dyaXRlXyVzJyAlIGltYWdlX3BrZ3R5cGUpCisgICAgdHJ5OgorICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAnYml0YmFrZSAtYyAlcyAlcycgJSAocGFja2FnZV90YXNrLCBhcmdzLnJlY2lwZW5hbWUpLCB3YXRjaD1UcnVlKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICMgV2UndmUgYWxyZWFkeSBzZWVuIHRoZSBvdXRwdXQgc2luY2Ugd2F0Y2g9VHJ1ZSwgc28ganVzdCBlbnN1cmUgd2UgcmV0dXJuIHNvbWV0aGluZyB0byB0aGUgdXNlcgorICAgICAgICByZXR1cm4gZS5leGl0Y29kZQorICAgIGxvZ2dlci5pbmZvKCdZb3VyIHBhY2thZ2VzIGFyZSBpbiAlcy90bXAvZGVwbG95LyVzJyAlIChiYXNlcGF0aCwgaW1hZ2VfcGtndHlwZSkpCisKKyAgICByZXR1cm4gMAorCitkZWYgcmVnaXN0ZXJfY29tbWFuZHMoc3VicGFyc2VycywgY29udGV4dCk6CisgICAgIiIiUmVnaXN0ZXIgZGV2dG9vbCBzdWJjb21tYW5kcyBmcm9tIHRoZSBwYWNrYWdlIHBsdWdpbiIiIgorICAgIGlmIGNvbnRleHQuZml4ZWRfc2V0dXA6CisgICAgICAgIHBhcnNlcl9wYWNrYWdlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdwYWNrYWdlJywgaGVscD0nQnVpbGQgcGFja2FnZXMgZm9yIGEgcmVjaXBlJywgZGVzY3JpcHRpb249J0J1aWxkcyBwYWNrYWdlcyBmb3IgYSByZWNpcGVcJ3Mgb3V0cHV0IGZpbGVzJykKKyAgICAgICAgcGFyc2VyX3BhY2thZ2UuYWRkX2FyZ3VtZW50KCdyZWNpcGVuYW1lJywgaGVscD0nUmVjaXBlIHRvIHBhY2thZ2UnKQorICAgICAgICBwYXJzZXJfcGFja2FnZS5zZXRfZGVmYXVsdHMoZnVuYz1wYWNrYWdlKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkgYi9zY3JpcHRzL2xpYi9kZXZ0b29sL3Nkay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQxNmIzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvZGV2dG9vbC9zZGsucHkKQEAgLTAsMCArMSwxOTcgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIHNkay11cGRhdGUgY29tbWFuZCBwbHVnaW4KKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBnbG9iCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzeXMKK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZXZ0b29sJykKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbmxpc3QpOgorICAgICIiIlBsdWdpbiBpbml0aWFsaXphdGlvbiIiIgorICAgIHBhc3MKKworZGVmIHBhcnNlX2xvY2tlZF9zaWdzKHNpZ2ZpbGVfcGF0aCk6CisgICAgIiIiUmV0dXJuIDxwbjp0YXNrPjo8aGFzaD4gZGljdGlvbmFyeSIiIgorICAgIHNpZ19kaWN0ID0ge30KKyAgICB3aXRoIG9wZW4oc2lnZmlsZV9wYXRoKSBhcyBmOgorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBpZiAnOicgaW4gbGluZToKKyAgICAgICAgICAgICAgICB0YXNra2V5LCBfLCBoYXNodmFsID0gbGluZS5ycGFydGl0aW9uKCc6JykKKyAgICAgICAgICAgICAgICBzaWdfZGljdFt0YXNra2V5LnN0cmlwKCldID0gaGFzaHZhbC5zcGxpdCgpWzBdCisgICAgcmV0dXJuIHNpZ19kaWN0CisKK2RlZiBnZW5lcmF0ZV91cGRhdGVfZGljdChzaWdmaWxlX25ldywgc2lnZmlsZV9vbGQpOgorICAgICIiIlJldHVybiBhIGRpY3QgY29udGFpbmluZyA8cG46dGFzaz46PGhhc2g+IHdoaWNoIGluZGljYXRlcyB3aGF0IG5lZWQgdG8gYmUgdXBkYXRlZCIiIgorICAgIHVwZGF0ZV9kaWN0ID0ge30KKyAgICBzaWdkaWN0X25ldyA9IHBhcnNlX2xvY2tlZF9zaWdzKHNpZ2ZpbGVfbmV3KQorICAgIHNpZ2RpY3Rfb2xkID0gcGFyc2VfbG9ja2VkX3NpZ3Moc2lnZmlsZV9vbGQpCisgICAgZm9yIGsgaW4gc2lnZGljdF9uZXc6CisgICAgICAgIGlmIGsgbm90IGluIHNpZ2RpY3Rfb2xkOgorICAgICAgICAgICAgdXBkYXRlX2RpY3Rba10gPSBzaWdkaWN0X25ld1trXQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgc2lnZGljdF9uZXdba10gIT0gc2lnZGljdF9vbGRba106CisgICAgICAgICAgICB1cGRhdGVfZGljdFtrXSA9IHNpZ2RpY3RfbmV3W2tdCisgICAgICAgICAgICBjb250aW51ZQorICAgIHJldHVybiB1cGRhdGVfZGljdAorCitkZWYgZ2V0X3NzdGF0ZV9vYmplY3RzKHVwZGF0ZV9kaWN0LCBuZXdzZGtfcGF0aCk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHNzdGF0ZSBvYmplY3RzIHdoaWNoIGFyZSB0byBiZSBpbnN0YWxsZWQiIiIKKyAgICBzc3RhdGVfb2JqZWN0cyA9IFtdCisgICAgIyBFbnN1cmUgbmV3c2RrX3BhdGggcG9pbnRzIHRvIGFuIGV4dGVuc2libGUgU0RLCisgICAgc3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihuZXdzZGtfcGF0aCwgJ3NzdGF0ZS1jYWNoZScpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZV9kaXIpOgorICAgICAgICBsb2dnZXIuZXJyb3IoInNzdGF0ZS1jYWNoZSBkaXJlY3Rvcnkgbm90IGZvdW5kIHVuZGVyICVzIiAlIG5ld3Nka19wYXRoKQorICAgICAgICByYWlzZQorICAgIGZvciBrIGluIHVwZGF0ZV9kaWN0OgorICAgICAgICBmaWxlcyA9IHNldCgpCisgICAgICAgIGhhc2h2YWwgPSB1cGRhdGVfZGljdFtrXQorICAgICAgICBwID0gc3N0YXRlX2RpciArICcvJyArIGhhc2h2YWxbOjJdICsgJy8qJyArIGhhc2h2YWwgKyAnKi50Z3onCisgICAgICAgIGZpbGVzIHw9IHNldChnbG9iLmdsb2IocCkpCisgICAgICAgIHAgPSBzc3RhdGVfZGlyICsgJy8qLycgKyBoYXNodmFsWzoyXSArICcvKicgKyBoYXNodmFsICsgJyoudGd6JworICAgICAgICBmaWxlcyB8PSBzZXQoZ2xvYi5nbG9iKHApKQorICAgICAgICBmaWxlcyA9IGxpc3QoZmlsZXMpCisgICAgICAgIGlmIGxlbihmaWxlcykgPT0gMToKKyAgICAgICAgICAgIHNzdGF0ZV9vYmplY3RzLmV4dGVuZChmaWxlcykKKyAgICAgICAgZWxpZiBsZW4oZmlsZXMpID4gMToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiTW9yZSB0aGFuIG9uZSBtYXRjaGluZyBzc3RhdGUgb2JqZWN0IGZvdW5kIGZvciAlcyIgJSBoYXNodmFsKQorCisgICAgcmV0dXJuIHNzdGF0ZV9vYmplY3RzCisKK2RlZiBta2RpcihkKToKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGQpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisKK2RlZiBpbnN0YWxsX3NzdGF0ZV9vYmplY3RzKHNzdGF0ZV9vYmplY3RzLCBzcmNfc2RrLCBkZXN0X3Nkayk6CisgICAgIiIiSW5zdGFsbCBzc3RhdGUgb2JqZWN0cyBpbnRvIGRlc3RpbmF0aW9uIFNESyIiIgorICAgIHNzdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdF9zZGssICdzc3RhdGUtY2FjaGUnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVfZGlyKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJNaXNzaW5nIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgaW4gJXMsIGl0IG1pZ2h0IG5vdCBiZSBhbiBleHRlbnNpYmxlIFNESy4iICUgZGVzdF9zZGspCisgICAgICAgIHJhaXNlCisgICAgZm9yIHNiIGluIHNzdGF0ZV9vYmplY3RzOgorICAgICAgICBkc3QgPSBzYi5yZXBsYWNlKHNyY19zZGssIGRlc3Rfc2RrKQorICAgICAgICBkZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGRzdCkKKyAgICAgICAgbWtkaXIoZGVzdGRpcikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJDb3B5aW5nICVzIHRvICVzIiAlIChzYiwgZHN0KSkKKyAgICAgICAgc2h1dGlsLmNvcHkoc2IsIGRzdCkKKworZGVmIHNka191cGRhdGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAjIEZldGNoIGxvY2tlZC1zaWdzLmluYyBmaWxlIGZyb20gcmVtb3RlL2xvY2FsIGRlc3RpbmF0aW9uCisgICAgZnJvbSBDb25maWdQYXJzZXIgaW1wb3J0IE5vU2VjdGlvbkVycm9yCisgICAgdXBkYXRlc2VydmVyID0gYXJncy51cGRhdGVzZXJ2ZXIKKyAgICBpZiBub3QgdXBkYXRlc2VydmVyOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB1cGRhdGVzZXJ2ZXIgPSBjb25maWcuZ2V0KCdTREsnLCAndXBkYXRlc2VydmVyJywgTm9uZSkKKyAgICAgICAgZXhjZXB0IE5vU2VjdGlvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIGlmIG5vdCB1cGRhdGVzZXJ2ZXI6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVXBkYXRlIHNlcnZlciBub3Qgc3BlY2lmaWVkIGluIGNvbmZpZyBmaWxlLCB5b3UgbXVzdCBzcGVjaWZ5IGl0IG9uIHRoZSBjb21tYW5kIGxpbmUiKQorICAgIGxvZ2dlci5kZWJ1ZygidXBkYXRlc2VydmVyOiAlcyIgJSBhcmdzLnVwZGF0ZXNlcnZlcikKKworICAgICMgTWFrZSBzdXJlIHdlIGFyZSB1c2luZyBzZGstdXBkYXRlIGZyb20gd2l0aGluIFNESworICAgIGxvZ2dlci5kZWJ1ZygiYmFzZXBhdGggPSAlcyIgJSBiYXNlcGF0aCkKKyAgICBvbGRfbG9ja2VkX3NpZ19maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mL2xvY2tlZC1zaWdzLmluYycpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9sZF9sb2NrZWRfc2lnX2ZpbGVfcGF0aCk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm90IHVzaW5nIGRldnRvb2wncyBzZGstdXBkYXRlIGNvbW1hbmQgZnJvbSB3aXRoaW4gYW4gZXh0ZW5zaWJsZSBTREsuIFBsZWFzZSBzcGVjaWZ5IGNvcnJlY3QgYmFzZXBhdGggdmlhIC0tYmFzZXBhdGggb3B0aW9uIikKKyAgICAgICAgcmV0dXJuIC0xCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJGb3VuZCBjb25mL2xvY2tlZC1zaWdzLmluYyBpbiAlcyIgJSBiYXNlcGF0aCkKKworICAgIGlmICc6JyBpbiBhcmdzLnVwZGF0ZXNlcnZlcjoKKyAgICAgICAgaXNfcmVtb3RlID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGlzX3JlbW90ZSA9IEZhbHNlCisKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICAjIGRldnRvb2wgc2RrLXVwZGF0ZSAvbG9jYWwvcGF0aC90by9sYXRlc3Qvc2RrCisgICAgICAgIG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihhcmdzLnVwZGF0ZXNlcnZlciwgJ2NvbmYvbG9ja2VkLXNpZ3MuaW5jJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIiVzIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgbm90IGFuIGV4dGVuc2libGUgU0RLIiAlIGFyZ3MudXBkYXRlc2VydmVyKQorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkZvdW5kIGNvbmYvbG9ja2VkLXNpZ3MuaW5jIGluICVzIiAlIGFyZ3MudXBkYXRlc2VydmVyKQorICAgICAgICB1cGRhdGVfZGljdCA9IGdlbmVyYXRlX3VwZGF0ZV9kaWN0KG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCwgb2xkX2xvY2tlZF9zaWdfZmlsZV9wYXRoKQorICAgICAgICBsb2dnZXIuZGVidWcoInVwZGF0ZV9kaWN0ID0gJXMiICUgdXBkYXRlX2RpY3QpCisgICAgICAgIHNzdGF0ZV9vYmplY3RzID0gZ2V0X3NzdGF0ZV9vYmplY3RzKHVwZGF0ZV9kaWN0LCBhcmdzLnVwZGF0ZXNlcnZlcikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJzc3RhdGVfb2JqZWN0cyA9ICVzIiAlIHNzdGF0ZV9vYmplY3RzKQorICAgICAgICBpZiBsZW4oc3N0YXRlX29iamVjdHMpID09IDA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiTm8gbmVlZCB0byB1cGRhdGUuIikKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGxvZ2dlci5pbmZvKCJJbnN0YWxsaW5nIHNzdGF0ZSBvYmplY3RzIGludG8gJXMiLCBiYXNlcGF0aCkKKyAgICAgICAgaW5zdGFsbF9zc3RhdGVfb2JqZWN0cyhzc3RhdGVfb2JqZWN0cywgYXJncy51cGRhdGVzZXJ2ZXIucnN0cmlwKCcvJyksIGJhc2VwYXRoKQorICAgICAgICBsb2dnZXIuaW5mbygiVXBkYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlcyIpCisgICAgICAgIG5ld19jb25mX2RpciA9IG9zLnBhdGguam9pbihhcmdzLnVwZGF0ZXNlcnZlciwgJ2NvbmYnKQorICAgICAgICBvbGRfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mJykKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvbGRfY29uZl9kaXIpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShuZXdfY29uZl9kaXIsIG9sZF9jb25mX2RpcikKKyAgICAgICAgbG9nZ2VyLmluZm8oIlVwZGF0aW5nIGxheWVycyIpCisgICAgICAgIG5ld19sYXllcnNfZGlyID0gb3MucGF0aC5qb2luKGFyZ3MudXBkYXRlc2VydmVyLCAnbGF5ZXJzJykKKyAgICAgICAgb2xkX2xheWVyc19kaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdsYXllcnMnKQorICAgICAgICBzaHV0aWwucm10cmVlKG9sZF9sYXllcnNfZGlyKQorICAgICAgICBzaHV0aWwuY29weXRyZWUobmV3X2xheWVyc19kaXIsIG9sZF9sYXllcnNfZGlyKQorICAgIGVsc2U6CisgICAgICAgICMgZGV2dG9vbCBzZGstdXBkYXRlIGh0dHA6Ly9teWhvc3Qvc2RrCisgICAgICAgIHRtcHNka19kaXIgPSAnL3RtcC9zZGstZXh0JworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBzZGtfZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodG1wc2RrX2RpcikKKyAgICAgICAgb3MubWFrZWRpcnModG1wc2RrX2RpcikKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRtcHNka19kaXIsICdjb25mJykpCisgICAgICAgICMgRmV0Y2ggbG9ja2VkLXNpZ3MuaW5jIGZyb20gdXBkYXRlIHNlcnZlcgorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoIndnZXQgLXEgLU8gLSAlcy9jb25mL2xvY2tlZC1zaWdzLmluYyA+ICVzL2xvY2tlZC1zaWdzLmluYyIgJSAoYXJncy51cGRhdGVzZXJ2ZXIsIG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZldGNoaW5nIGNvbmYvbG9ja2VkLXNpZ3MuaW5jIGZyb20gJXMgdG8gJXMvbG9ja2VkLXNpZ3MuaW5jIGZhaWxlZCIgJSAoYXJncy51cGRhdGVzZXJ2ZXIsIG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZicpKSkKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJGZXRjaGluZyBjb25mL2xvY2tlZC1zaWdzLmluYyBmcm9tICVzIHRvICVzL2xvY2tlZC1zaWdzLmluYyBzdWNjZWVkZWQiICUgKGFyZ3MudXBkYXRlc2VydmVyLCBvcy5wYXRoLmpvaW4odG1wc2RrX2RpciwgJ2NvbmYnKSkpCisgICAgICAgIG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCA9IG9zLnBhdGguam9pbih0bXBzZGtfZGlyLCAnY29uZi9sb2NrZWQtc2lncy5pbmMnKQorICAgICAgICB1cGRhdGVfZGljdCA9IGdlbmVyYXRlX3VwZGF0ZV9kaWN0KG5ld19sb2NrZWRfc2lnX2ZpbGVfcGF0aCwgb2xkX2xvY2tlZF9zaWdfZmlsZV9wYXRoKQorICAgICAgICBsb2dnZXIuZGVidWcoInVwZGF0ZV9kaWN0ID0gJXMiICUgdXBkYXRlX2RpY3QpCisgICAgICAgIGlmIGxlbih1cGRhdGVfZGljdCkgPT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJObyBuZWVkIHRvIHVwZGF0ZS4iKQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgIyBVcGRhdGUgbWV0YWRhdGEKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJVcGRhdGluZyBtZXRhIGRhdGEgdmlhIGdpdCAuLi4iKQorICAgICAgICAjIFRyeSB1c2luZyAnZ2l0IHB1bGwnLCBpZiBmYWlsZWQsIHVzZSAnZ2l0IGNsb25lJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdsYXllcnMvLmdpdCcpKToKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgiY2QgbGF5ZXJzICYmIGdpdCBwdWxsIiwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldCA9IC0xCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJybSAtcmYgbGF5ZXJzICYmIGdpdCBjbG9uZSAlcy9sYXllcnMiICUgYXJncy51cGRhdGVzZXJ2ZXIsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVcGRhdGluZyBtZXRhIGRhdGEgdmlhIGdpdCBmYWlsZWQiKQorICAgICAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBsb2dnZXIuZGVidWcoIlVwZGF0aW5nIGNvbmYgZmlsZXMgLi4uIikKKyAgICAgICAgY29uZl9maWxlcyA9IFsnbG9jYWwuY29uZicsICdiYmxheWVycy5jb25mJywgJ2RldnRvb2wuY29uZicsICd3b3JrLWNvbmZpZy5pbmMnLCAnbG9ja2VkLXNpZ3MuaW5jJ10KKyAgICAgICAgZm9yIGNvbmYgaW4gY29uZl9maWxlczoKKyAgICAgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgid2dldCAtcSAtTyAtICVzL2NvbmYvJXMgPiBjb25mLyVzIiAlIChhcmdzLnVwZGF0ZXNlcnZlciwgY29uZiwgY29uZiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVwZGF0ZSAlcyBmYWlsZWQiICUgY29uZikKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdjb25mL2xvY2FsLmNvbmYnKSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnU1NUQVRFX01JUlJPUlNfYXBwZW5kID0gIiBmaWxlOi8vLiogJXMvc3N0YXRlLWNhY2hlL1BBVEggXFxuICJcbicgJSBhcmdzLnVwZGF0ZXNlcnZlcikKKworICAgICMgUnVuIGJpdGJha2UgY29tbWFuZCBmb3IgdGhlIHdob2xlIFNESworICAgIHNka190YXJnZXRzID0gY29uZmlnLmdldCgnU0RLJywgJ3Nka190YXJnZXRzJykKKyAgICBsb2dnZXIuaW5mbygiRXhlY3V0aW5nICdiaXRiYWtlICVzJyAuLi4gKFRoaXMgbWF5IHRha2Ugc29tZSB0aW1lLikiICUgc2RrX3RhcmdldHMpCisgICAgdHJ5OgorICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAnYml0YmFrZSAlcycgJSBzZGtfdGFyZ2V0cykKKyAgICBleGNlcHQ6CisgICAgICAgIGxvZ2dlci5lcnJvcignYml0YmFrZSAlcyBmYWlsZWQnICUgc2RrX3RhcmdldHMpCisgICAgICAgIHJldHVybiAtMQorICAgIHJldHVybiAwCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhlIHNkayBwbHVnaW4iIiIKKyAgICBpZiBjb250ZXh0LmZpeGVkX3NldHVwOgorICAgICAgICBwYXJzZXJfc2RrID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdzZGstdXBkYXRlJywgaGVscD0nVXBkYXRlIFNESyBjb21wb25lbnRzIGZyb20gYSBub21pbmF0ZWQgbG9jYXRpb24nKQorICAgICAgICBwYXJzZXJfc2RrLmFkZF9hcmd1bWVudCgndXBkYXRlc2VydmVyJywgaGVscD0nVGhlIHVwZGF0ZSBzZXJ2ZXIgdG8gZmV0Y2ggbGF0ZXN0IFNESyBjb21wb25lbnRzIGZyb20nLCBuYXJncz0nPycpCisgICAgICAgIHBhcnNlcl9zZGsuc2V0X2RlZmF1bHRzKGZ1bmM9c2RrX3VwZGF0ZSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL2RldnRvb2wvc3RhbmRhcmQucHkgYi9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTAwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9kZXZ0b29sL3N0YW5kYXJkLnB5CkBAIC0wLDAgKzEsOTMwIEBACisjIERldmVsb3BtZW50IHRvb2wgLSBzdGFuZGFyZCBjb21tYW5kcyBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisiIiJEZXZ0b29sIHN0YW5kYXJkIHBsdWdpbnMiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHNjcmlwdHV0aWxzCitpbXBvcnQgZXJybm8KK2Zyb20gZGV2dG9vbCBpbXBvcnQgZXhlY19idWlsZF9lbnZfY29tbWFuZCwgc2V0dXBfdGluZm9pbCwgRGV2dG9vbEVycm9yCitmcm9tIGRldnRvb2wgaW1wb3J0IHBhcnNlX3JlY2lwZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKKworZGVmIGFkZChhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAnYWRkJyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBpZiBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoInJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgd29ya3NwYWNlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgcmVhc29uID0gb2UucmVjaXBldXRpbHMudmFsaWRhdGVfcG4oYXJncy5yZWNpcGVuYW1lKQorICAgIGlmIHJlYXNvbjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKHJlYXNvbikKKworICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoYXJncy5zcmN0cmVlKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHNyY3RyZWUpOgorICAgICAgICBpZiBhcmdzLmZldGNoOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3JjdHJlZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJDYW5ub3QgZmV0Y2ggaW50byBzb3VyY2UgdHJlZSBwYXRoICVzIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0IGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCisgICAgICAgICAgICBlbGlmIG9zLmxpc3RkaXIoc3JjdHJlZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJDYW5ub3QgZmV0Y2ggaW50byBzb3VyY2UgdHJlZSBwYXRoICVzIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0IGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub24tZW1wdHkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdHJlZSkKKyAgICBlbGlmIG5vdCBhcmdzLmZldGNoOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlNwZWNpZmllZCBzb3VyY2UgdHJlZSAlcyBjb3VsZCBub3QgYmUgZm91bmQiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3RyZWUpCisKKyAgICBhcHBlbmRwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmRwYXRoKToKKyAgICAgICAgb3MubWFrZWRpcnMoYXBwZW5kcGF0aCkKKworICAgIHJlY2lwZWRpciA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICdyZWNpcGVzJywgYXJncy5yZWNpcGVuYW1lKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihyZWNpcGVkaXIpCisgICAgcmZ2ID0gTm9uZQorICAgIGlmIGFyZ3MudmVyc2lvbjoKKyAgICAgICAgaWYgJ18nIGluIGFyZ3MudmVyc2lvbiBvciAnICcgaW4gYXJncy52ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdJbnZhbGlkIHZlcnNpb24gc3RyaW5nICIlcyInICUgYXJncy52ZXJzaW9uKQorICAgICAgICByZnYgPSBhcmdzLnZlcnNpb24KKyAgICBpZiBhcmdzLmZldGNoOgorICAgICAgICBpZiBhcmdzLmZldGNoLnN0YXJ0c3dpdGgoJ2dpdDovLycpOgorICAgICAgICAgICAgcmZ2ID0gJ2dpdCcKKyAgICAgICAgZWxpZiBhcmdzLmZldGNoLnN0YXJ0c3dpdGgoJ3N2bjovLycpOgorICAgICAgICAgICAgcmZ2ID0gJ3N2bicKKyAgICAgICAgZWxpZiBhcmdzLmZldGNoLnN0YXJ0c3dpdGgoJ2hnOi8vJyk6CisgICAgICAgICAgICByZnYgPSAnaGcnCisgICAgaWYgcmZ2OgorICAgICAgICBicCA9ICIlc18lcyIgJSAoYXJncy5yZWNpcGVuYW1lLCByZnYpCisgICAgZWxzZToKKyAgICAgICAgYnAgPSBhcmdzLnJlY2lwZW5hbWUKKyAgICByZWNpcGVmaWxlID0gb3MucGF0aC5qb2luKHJlY2lwZWRpciwgIiVzLmJiIiAlIGJwKQorICAgIGlmIHN5cy5zdGRvdXQuaXNhdHR5KCk6CisgICAgICAgIGNvbG9yID0gJ2Fsd2F5cycKKyAgICBlbHNlOgorICAgICAgICBjb2xvciA9IGFyZ3MuY29sb3IKKyAgICBleHRyYWNtZG9wdHMgPSAnJworICAgIGlmIGFyZ3MuZmV0Y2g6CisgICAgICAgIHNvdXJjZSA9IGFyZ3MuZmV0Y2gKKyAgICAgICAgZXh0cmFjbWRvcHRzID0gJy14ICVzJyAlIHNyY3RyZWUKKyAgICBlbHNlOgorICAgICAgICBzb3VyY2UgPSBzcmN0cmVlCisgICAgaWYgYXJncy52ZXJzaW9uOgorICAgICAgICBleHRyYWNtZG9wdHMgKz0gJyAtViAlcycgJSBhcmdzLnZlcnNpb24KKyAgICB0cnk6CisgICAgICAgIHN0ZG91dCwgXyA9IGV4ZWNfYnVpbGRfZW52X2NvbW1hbmQoY29uZmlnLmluaXRfcGF0aCwgYmFzZXBhdGgsICdyZWNpcGV0b29sIC0tY29sb3I9JXMgY3JlYXRlIC1vICVzICIlcyIgJXMnICUgKGNvbG9yLCByZWNpcGVmaWxlLCBzb3VyY2UsIGV4dHJhY21kb3B0cykpCisgICAgICAgIGxvZ2dlci5pbmZvKCdSZWNpcGUgJXMgaGFzIGJlZW4gYXV0b21hdGljYWxseSBjcmVhdGVkOyBmdXJ0aGVyIGVkaXRpbmcgbWF5IGJlIHJlcXVpcmVkIHRvIG1ha2UgaXQgZnVsbHkgZnVuY3Rpb25hbCcgJSByZWNpcGVmaWxlKQorICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignQ29tbWFuZCBcJyVzXCcgZmFpbGVkOlxuJXMnICUgKGUuY29tbWFuZCwgZS5zdGRvdXQpKQorCisgICAgX2FkZF9tZDUoY29uZmlnLCBhcmdzLnJlY2lwZW5hbWUsIHJlY2lwZWZpbGUpCisKKyAgICBpbml0aWFsX3JldiA9IE5vbmUKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJy5naXQnKSk6CisgICAgICAgIChzdGRvdXQsIF8pID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQorICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorCisgICAgYXBwZW5kZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRwYXRoLCAnJXMuYmJhcHBlbmQnICUgYnApCisgICAgd2l0aCBvcGVuKGFwcGVuZGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgnaW5oZXJpdCBleHRlcm5hbHNyY1xuJykKKyAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkMgPSAiJXMiXG4nICUgc3JjdHJlZSkKKyAgICAgICAgaWYgYXJncy5zYW1lX2RpcjoKKyAgICAgICAgICAgIGYud3JpdGUoJ0VYVEVSTkFMU1JDX0JVSUxEID0gIiVzIlxuJyAlIHNyY3RyZWUpCisgICAgICAgIGlmIGluaXRpYWxfcmV2OgorICAgICAgICAgICAgZi53cml0ZSgnXG4jIGluaXRpYWxfcmV2OiAlc1xuJyAlIGluaXRpYWxfcmV2KQorCisgICAgX2FkZF9tZDUoY29uZmlnLCBhcmdzLnJlY2lwZW5hbWUsIGFwcGVuZGZpbGUpCisKKyAgICByZXR1cm4gMAorCisKK2RlZiBfY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUocG4sIGQpOgorICAgICIiIkNoZWNrIGlmIHRoZSByZWNpcGUgaXMgc3VwcG9ydGVkIGJ5IGRldnRvb2wiIiIKKyAgICBpZiBwbiA9PSAncGVyZic6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlIHBlcmYgcmVjaXBlIGRvZXMgbm90IGFjdHVhbGx5IGNoZWNrIG91dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGFuZCB0aHVzIGNhbm5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIikKKworICAgIGlmIHBuIGluIFsna2VybmVsLWRldnNyYycsICdwYWNrYWdlLWluZGV4J10gb3IgcG4uc3RhcnRzd2l0aCgnZ2NjLXNvdXJjZScpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIGQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIlRoZSAlcyByZWNpcGUgaXMgYW4gaW1hZ2UsIGFuZCB0aGVyZWZvcmUgaXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncG9wdWxhdGVfc2RrJywgZCk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBhbiBTREssIGFuZCB0aGVyZWZvcmUgaXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQgYnkgdGhpcyB0b29sIiAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBhIHBhY2thZ2Vncm91cCwgYW5kIHRoZXJlZm9yZSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBieSB0aGlzIHRvb2wiICUgcG4pCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtZXRhJywgZCk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiVGhlICVzIHJlY2lwZSBpcyBhIG1ldGEtcmVjaXBlLCBhbmQgdGhlcmVmb3JlIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdG9vbCIgJSBwbikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2V4dGVybmFsc3JjJywgZCkgYW5kIGQuZ2V0VmFyKCdFWFRFUk5BTFNSQycsIFRydWUpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoImV4dGVybmFsc3JjIGlzIGN1cnJlbnRseSBlbmFibGVkIGZvciB0aGUgJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY2lwZS4gVGhpcyBwcmV2ZW50cyB0aGUgbm9ybWFsIGRvX3BhdGNoIHRhc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gd29ya2luZy4gWW91IHdpbGwgbmVlZCB0byBkaXNhYmxlIHRoaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0LiIgJSBwbikKKworZGVmIF9sc190cmVlKGRpcmVjdG9yeSk6CisgICAgIiIiUmVjdXJzaXZlIGxpc3Rpbmcgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkiIiIKKyAgICByZXQgPSBbXQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgICAgIHJldC5leHRlbmQoW29zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZm5hbWUpLCBkaXJlY3RvcnkpIGZvcgorICAgICAgICAgICAgICAgICAgICBmbmFtZSBpbiBmaWxlc10pCisgICAgcmV0dXJuIHJldAorCisKK2RlZiBleHRyYWN0KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdleHRyYWN0JyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisKKyAgICB0aW5mb2lsID0gX3ByZXBfZXh0cmFjdF9vcGVyYXRpb24oY29uZmlnLCBiYXNlcGF0aCwgYXJncy5yZWNpcGVuYW1lKQorCisgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgaWYgbm90IHJkOgorICAgICAgICByZXR1cm4gMQorCisgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgaW5pdGlhbF9yZXYgPSBfZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwgYXJncy5rZWVwX3RlbXAsIGFyZ3MuYnJhbmNoLCByZCkKKyAgICBsb2dnZXIuaW5mbygnU291cmNlIHRyZWUgZXh0cmFjdGVkIHRvICVzJyAlIHNyY3RyZWUpCisKKyAgICBpZiBpbml0aWFsX3JldjoKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gMQorCitjbGFzcyBCYlRhc2tFeGVjdXRvcihvYmplY3QpOgorICAgICIiIkNsYXNzIGZvciBleGVjdXRpbmcgYml0YmFrZSB0YXNrcyBmb3IgYSByZWNpcGUKKworICAgIEZJWE1FOiBUaGlzIGlzIHZlcnkgYXdrd2FyZC4gVW5mb3J0dW5hdGVseSBpdCdzIG5vdCBjdXJyZW50bHkgZWFzeSB0bworICAgIHByb3Blcmx5IGV4ZWN1dGUgdGFza3Mgb3V0c2lkZSBvZiBiaXRiYWtlIGl0c2VsZiwgdW50aWwgdGhlbiB0aGlzIGhhcyB0bworICAgIHN1ZmZpY2UgaWYgd2UgYXJlIHRvIGhhbmRsZSBlLmcuIGxpbnV4LXlvY3RvJ3MgZXh0cmEgdGFza3MKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZGF0YSk6CisgICAgICAgIHNlbGYucmRhdGEgPSByZGF0YQorICAgICAgICBzZWxmLmV4ZWN1dGVkID0gW10KKworICAgIGRlZiBleGVjX2Z1bmMoc2VsZiwgZnVuYywgcmVwb3J0KToKKyAgICAgICAgIiIiUnVuIGJpdGJha2UgdGFzayBmdW5jdGlvbiIiIgorICAgICAgICBpZiBub3QgZnVuYyBpbiBzZWxmLmV4ZWN1dGVkOgorICAgICAgICAgICAgZGVwcyA9IHNlbGYucmRhdGEuZ2V0VmFyRmxhZyhmdW5jLCAnZGVwcycpCisgICAgICAgICAgICBpZiBkZXBzOgorICAgICAgICAgICAgICAgIGZvciB0YXNrZGVwZnVuYyBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4ZWNfZnVuYyh0YXNrZGVwZnVuYywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlcG9ydDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnRXhlY3V0aW5nICVzLi4uJyAlIGZ1bmMpCisgICAgICAgICAgICBmbiA9IHNlbGYucmRhdGEuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmJ1aWxkLl90YXNrX2RhdGEoZm4sIGZ1bmMsIHNlbGYucmRhdGEpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZnVuYywgbG9jYWxkYXRhKQorICAgICAgICAgICAgc2VsZi5leGVjdXRlZC5hcHBlbmQoZnVuYykKKworCitkZWYgX3ByZXBfZXh0cmFjdF9vcGVyYXRpb24oY29uZmlnLCBiYXNlcGF0aCwgcmVjaXBlbmFtZSk6CisgICAgIiIiSEFDSzogVWdseSB3b3JrYXJvdW5kIGZvciBtYWtpbmcgc3VyZSB0aGF0IHJlcXVpcmVtZW50cyBhcmUgbWV0IHdoZW4KKyAgICAgICB0cnlpbmcgdG8gZXh0cmFjdCBhIHBhY2thZ2UuIFJldHVybnMgdGhlIHRpbmZvaWwgaW5zdGFuY2UgdG8gYmUgdXNlZC4iIiIKKyAgICB0aW5mb2lsID0gc2V0dXBfdGluZm9pbCgpCisgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCByZWNpcGVuYW1lLCBUcnVlKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsLXlvY3RvJywgcmQpOgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Rkb3V0LCBfID0gZXhlY19idWlsZF9lbnZfY29tbWFuZChjb25maWcuaW5pdF9wYXRoLCBiYXNlcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGJha2Uga2Vybi10b29scy1uYXRpdmUnKQorICAgICAgICAgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIkZhaWxlZCB0byBidWlsZCBrZXJuLXRvb2xzLW5hdGl2ZTpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnN0ZG91dCkKKyAgICByZXR1cm4gdGluZm9pbAorCisKK2RlZiBfZXh0cmFjdF9zb3VyY2Uoc3JjdHJlZSwga2VlcF90ZW1wLCBkZXZicmFuY2gsIGQpOgorICAgICIiIkV4dHJhY3Qgc291cmNlcyBvZiBhIHJlY2lwZSIiIgorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBvZS5yZWNpcGV1dGlscworCisgICAgZGVmIGV2ZW50ZmlsdGVyKG5hbWUsIGhhbmRsZXIsIGV2ZW50LCBkKToKKyAgICAgICAgIiIiQml0YmFrZSBldmVudCBmaWx0ZXIgZm9yIGRldnRvb2wgZXh0cmFjdCBvcGVyYXRpb24iIiIKKyAgICAgICAgaWYgbmFtZSA9PSAnYmFzZV9ldmVudGhhbmRsZXInOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgaWYgaGFzYXR0cihiYi5ldmVudCwgJ3NldF9ldmVudGZpbHRlcicpOgorICAgICAgICBiYi5ldmVudC5zZXRfZXZlbnRmaWx0ZXIoZXZlbnRmaWx0ZXIpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBfY2hlY2tfY29tcGF0aWJsZV9yZWNpcGUocG4sIGQpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmN0cmVlKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3JjdHJlZSk6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm91dHB1dCBwYXRoICVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdHJlZSkKKyAgICAgICAgZWxpZiBvcy5saXN0ZGlyKHNyY3RyZWUpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJvdXRwdXQgcGF0aCAlcyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24tZW1wdHkiICUgc3JjdHJlZSkKKworICAgICMgUHJlcGFyZSBmb3Igc2h1dGlsLm1vdmUgbGF0ZXIgb24KKyAgICBiYi51dGlscy5ta2RpcmhpZXIoc3JjdHJlZSkKKyAgICBvcy5ybWRpcihzcmN0cmVlKQorCisgICAgIyBXZSBkb24ndCB3YW50IG5vdGVzIHRvIGJlIHByaW50ZWQsIHRoZXkgYXJlIHRvbyB2ZXJib3NlCisgICAgb3JpZ2xldmVsID0gYmIubG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKyAgICBpZiBsb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKSA+IGxvZ2dpbmcuREVCVUc6CisgICAgICAgIGJiLmxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLldBUk5JTkcpCisKKyAgICBpbml0aWFsX3JldiA9IE5vbmUKKyAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2wnKQorICAgIHRyeToKKyAgICAgICAgY3JkID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgIyBNYWtlIGEgc3ViZGlyIHNvIHdlIGd1YXJkIGFnYWluc3QgV09SS0RJUj09UworICAgICAgICB3b3JrZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICd3b3JrZGlyJykKKyAgICAgICAgY3JkLnNldFZhcignV09SS0RJUicsIHdvcmtkaXIpCisgICAgICAgIGNyZC5zZXRWYXIoJ1QnLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3RlbXAnKSkKKyAgICAgICAgaWYgbm90IGNyZC5nZXRWYXIoJ1MnLCBUcnVlKS5zdGFydHN3aXRoKHdvcmtkaXIpOgorICAgICAgICAgICAgIyBVc3VhbGx5IGEgc2hhcmVkIHdvcmtkaXIgcmVjaXBlIChrZXJuZWwsIGdjYykKKyAgICAgICAgICAgICMgVHJ5IHRvIHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdAorICAgICAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgZCk6CisgICAgICAgICAgICAgICAgY3JkLnNldFZhcignUycsICcke1dPUktESVJ9L3NvdXJjZScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1MnLCAnJHtXT1JLRElSfS8ke0JQfScpCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGQpOgorICAgICAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIG1vdmUgdGhlIHNvdXJjZSB0byBTVEFHSU5HX0tFUk5FTF9ESVIgaGVyZQorICAgICAgICAgICAgY3JkLnNldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgJyR7U30nKQorCisgICAgICAgIHRhc2tfZXhlY3V0b3IgPSBCYlRhc2tFeGVjdXRvcihjcmQpCisKKyAgICAgICAgY3JkLnNldFZhcignRVhURVJOQUxTUkNfZm9yY2V2YXJpYWJsZScsICcnKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyAlcy4uLicgJSBwbikKKyAgICAgICAgdGFza19leGVjdXRvci5leGVjX2Z1bmMoJ2RvX2ZldGNoJywgRmFsc2UpCisgICAgICAgIGxvZ2dlci5pbmZvKCdVbnBhY2tpbmcuLi4nKQorICAgICAgICB0YXNrX2V4ZWN1dG9yLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgRmFsc2UpCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIGQpOgorICAgICAgICAgICAgIyBFeHRyYSBzdGVwIGZvciBrZXJuZWwgdG8gcG9wdWxhdGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdEb2luZyBrZXJuZWwgY2hlY2tvdXQuLi4nKQorICAgICAgICAgICAgdGFza19leGVjdXRvci5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jaGVja291dCcsIEZhbHNlKQorICAgICAgICBzcmNzdWJkaXIgPSBjcmQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICAgICAgaWYgc3Jjc3ViZGlyID09IHdvcmtkaXI6CisgICAgICAgICAgICAjIEZpbmQgbm9uLXBhdGNoIHNvdXJjZXMgdGhhdCB3ZXJlICJ1bnBhY2tlZCIgdG8gc3JjdHJlZSBkaXJlY3RvcnkKKyAgICAgICAgICAgIHJlY2lwZV9wYXRjaGVzID0gW29zLnBhdGguYmFzZW5hbWUocGF0Y2gpIGZvciBwYXRjaCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVzKGNyZCldCisgICAgICAgICAgICBzcmNfZmlsZXMgPSBbZm5hbWUgZm9yIGZuYW1lIGluIF9sc190cmVlKHdvcmtkaXIpIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShmbmFtZSkgbm90IGluIHJlY2lwZV9wYXRjaGVzXQorICAgICAgICAgICAgIyBGb3JjZSBzZXBhcmF0ZSBTIHNvIHRoYXQgcGF0Y2ggZmlsZXMgY2FuIGJlIGxlZnQgb3V0IGZyb20gc3JjdHJlZQorICAgICAgICAgICAgc3Jjc3ViZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9d29ya2RpcikKKyAgICAgICAgICAgIGNyZC5zZXRWYXIoJ1MnLCBzcmNzdWJkaXIpCisgICAgICAgICAgICAjIE1vdmUgc291cmNlIGZpbGVzIHRvIFMKKyAgICAgICAgICAgIGZvciBwYXRoIGluIHNyY19maWxlczoKKyAgICAgICAgICAgICAgICB0Z3RfZGlyID0gb3MucGF0aC5qb2luKHNyY3N1YmRpciwgb3MucGF0aC5kaXJuYW1lKHBhdGgpKQorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih0Z3RfZGlyKQorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKG9zLnBhdGguam9pbih3b3JrZGlyLCBwYXRoKSwgdGd0X2RpcikKKyAgICAgICAgZWxpZiBvcy5wYXRoLmRpcm5hbWUoc3Jjc3ViZGlyKSAhPSB3b3JrZGlyOgorICAgICAgICAgICAgIyBIYW5kbGUgaWYgUyBpcyBzZXQgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZQorICAgICAgICAgICAgc3Jjc3ViZGlyID0gb3MucGF0aC5qb2luKHdvcmtkaXIsIG9zLnBhdGgucmVscGF0aChzcmNzdWJkaXIsIHdvcmtkaXIpLnNwbGl0KG9zLnNlcClbMF0pCisKKyAgICAgICAgc2NyaXB0dXRpbHMuZ2l0X2NvbnZlcnRfc3RhbmRhbG9uZV9jbG9uZShzcmNzdWJkaXIpCisKKyAgICAgICAgcGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4oc3Jjc3ViZGlyLCAncGF0Y2hlcycpCisgICAgICAgIGhhc3BhdGNoZXMgPSBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRjaGRpcik6CisgICAgICAgICAgICBpZiBvcy5saXN0ZGlyKHBhdGNoZGlyKToKKyAgICAgICAgICAgICAgICBoYXNwYXRjaGVzID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihwYXRjaGRpcikKKworICAgICAgICBpZiBub3Qgb3MubGlzdGRpcihzcmNzdWJkaXIpOgorICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJubyBzb3VyY2UgdW5wYWNrZWQgdG8gUywgcGVyaGFwcyB0aGUgJXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNpcGUgZG9lc24ndCB1c2UgYW55IHNvdXJjZT8iICUgcG4pCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmNzdWJkaXIsICcuZ2l0JykpOgorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBpbml0JywgY3dkPXNyY3N1YmRpcikKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgYWRkIC4nLCBjd2Q9c3Jjc3ViZGlyKQorICAgICAgICAgICAgYmIucHJvY2Vzcy5ydW4oJ2dpdCBjb21taXQgLXEgLW0gIkluaXRpYWwgY29tbWl0IGZyb20gdXBzdHJlYW0gYXQgdmVyc2lvbiAlcyInICUgY3JkLmdldFZhcignUFYnLCBUcnVlKSwgY3dkPXNyY3N1YmRpcikKKworICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9c3Jjc3ViZGlyKQorICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorCisgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgY2hlY2tvdXQgLWIgJXMnICUgZGV2YnJhbmNoLCBjd2Q9c3Jjc3ViZGlyKQorICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IHRhZyAtZiBkZXZ0b29sLWJhc2UnLCBjd2Q9c3Jjc3ViZGlyKQorICAgICAgICBjcmQuc2V0VmFyKCdQQVRDSFRPT0wnLCAnZ2l0JykKKworICAgICAgICBsb2dnZXIuaW5mbygnUGF0Y2hpbmcuLi4nKQorICAgICAgICB0YXNrX2V4ZWN1dG9yLmV4ZWNfZnVuYygnZG9fcGF0Y2gnLCBGYWxzZSkKKworICAgICAgICBiYi5wcm9jZXNzLnJ1bignZ2l0IHRhZyAtZiBkZXZ0b29sLXBhdGNoZWQnLCBjd2Q9c3Jjc3ViZGlyKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGNoZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0Y2hkaXIpCisgICAgICAgICAgICBpZiBoYXNwYXRjaGVzOgorICAgICAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgY2hlY2tvdXQgcGF0Y2hlcycsIGN3ZD1zcmNzdWJkaXIpCisKKyAgICAgICAgc2h1dGlsLm1vdmUoc3Jjc3ViZGlyLCBzcmN0cmVlKQorICAgIGZpbmFsbHk6CisgICAgICAgIGJiLmxvZ2dlci5zZXRMZXZlbChvcmlnbGV2ZWwpCisKKyAgICAgICAgaWYga2VlcF90ZW1wOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1ByZXNlcnZpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlcycgJSB0ZW1wZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorICAgIHJldHVybiBpbml0aWFsX3JldgorCitkZWYgX2FkZF9tZDUoY29uZmlnLCByZWNpcGVuYW1lLCBmaWxlbmFtZSk6CisgICAgIiIiUmVjb3JkIGNoZWNrc3VtIG9mIGEgZmlsZSAob3IgcmVjdXJzaXZlbHkgZm9yIGEgZGlyZWN0b3J5KSB0byB0aGUgbWQ1LWZpbGUgb2YgdGhlIHdvcmtzcGFjZSIiIgorICAgIGltcG9ydCBiYi51dGlscworCisgICAgZGVmIGFkZGZpbGUoZm4pOgorICAgICAgICBtZDUgPSBiYi51dGlscy5tZDVfZmlsZShmbikKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICcuZGV2dG9vbF9tZDUnKSwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnJXN8JXN8JXNcbicgJSAocmVjaXBlbmFtZSwgb3MucGF0aC5yZWxwYXRoKGZuLCBjb25maWcud29ya3NwYWNlX3BhdGgpLCBtZDUpKQorCisgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlbmFtZSk6CisgICAgICAgIGZvciByb290LCBfLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgYWRkZmlsZShvcy5wYXRoLmpvaW4ocm9vdCwgZikpCisgICAgZWxzZToKKyAgICAgICAgYWRkZmlsZShmaWxlbmFtZSkKKworZGVmIF9jaGVja19wcmVzZXJ2ZShjb25maWcsIHJlY2lwZW5hbWUpOgorICAgICIiIkNoZWNrIGlmIGEgZmlsZSB3YXMgbWFudWFsbHkgY2hhbmdlZCBhbmQgbmVlZHMgdG8gYmUgc2F2ZWQgaW4gJ2F0dGljJworICAgICAgIGRpcmVjdG9yeSIiIgorICAgIGltcG9ydCBiYi51dGlscworICAgIG9yaWdmaWxlID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJy5kZXZ0b29sX21kNScpCisgICAgbmV3ZmlsZSA9IG9zLnBhdGguam9pbihjb25maWcud29ya3NwYWNlX3BhdGgsICcuZGV2dG9vbF9tZDVfbmV3JykKKyAgICBwcmVzZXJ2ZXBhdGggPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXR0aWMnKQorICAgIHdpdGggb3BlbihvcmlnZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICB3aXRoIG9wZW4obmV3ZmlsZSwgJ3cnKSBhcyB0ZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnfCcpCisgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzBdID09IHJlY2lwZW5hbWU6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWZpbGUgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCBzcGxpdGxpbmVbMV0pCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1kNSA9IGJiLnV0aWxzLm1kNV9maWxlKHJlbW92ZWZpbGUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRmlsZSBubyBsb25nZXIgZXhpc3RzLCBza2lwIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzJdICE9IG1kNToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwcmVzZXJ2ZXBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZWZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHJlbW92ZWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmlsZSAlcyBtb2RpZmllZCBzaW5jZSBpdCB3YXMgd3JpdHRlbiwgcHJlc2VydmluZyBpbiAlcycgJSAocHJlc2VydmVmaWxlLCBwcmVzZXJ2ZXBhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUocmVtb3ZlZmlsZSwgb3MucGF0aC5qb2luKHByZXNlcnZlcGF0aCwgcHJlc2VydmVmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShyZW1vdmVmaWxlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKGxpbmUpCisgICAgb3MucmVuYW1lKG5ld2ZpbGUsIG9yaWdmaWxlKQorCitkZWYgbW9kaWZ5KGFyZ3MsIGNvbmZpZywgYmFzZXBhdGgsIHdvcmtzcGFjZSk6CisgICAgIiIiRW50cnkgcG9pbnQgZm9yIHRoZSBkZXZ0b29sICdtb2RpZnknIHN1YmNvbW1hbmQiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIGlmIGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigicmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciB3b3Jrc3BhY2UiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIGlmIG5vdCBhcmdzLmV4dHJhY3QgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKGFyZ3Muc3JjdHJlZSk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0IG9yIG5vdCBhIGRpcmVjdG9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHNwZWNpZnkgLXggdG8gZXh0cmFjdCBzb3VyY2UgZnJvbSByZWNpcGUpIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNyY3RyZWUpCisgICAgaWYgYXJncy5leHRyYWN0OgorICAgICAgICB0aW5mb2lsID0gX3ByZXBfZXh0cmFjdF9vcGVyYXRpb24oY29uZmlnLCBiYXNlcGF0aCwgYXJncy5yZWNpcGVuYW1lKQorICAgIGVsc2U6CisgICAgICAgIHRpbmZvaWwgPSBzZXR1cF90aW5mb2lsKCkKKworICAgIHJkID0gcGFyc2VfcmVjaXBlKGNvbmZpZywgdGluZm9pbCwgYXJncy5yZWNpcGVuYW1lLCBUcnVlKQorICAgIGlmIG5vdCByZDoKKyAgICAgICAgcmV0dXJuIDEKKyAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICBhcHBlbmRuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKVswXQorICAgIGlmIGFyZ3Mud2lsZGNhcmQ6CisgICAgICAgIGFwcGVuZG5hbWUgPSByZS5zdWIocidfLionLCAnXyUnLCBhcHBlbmRuYW1lKQorICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycpCisgICAgYXBwZW5kZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRwYXRoLCBhcHBlbmRuYW1lICsgJy5iYmFwcGVuZCcpCisgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kZmlsZSk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiQW5vdGhlciB2YXJpYW50IG9mIHJlY2lwZSAlcyBpcyBhbHJlYWR5IGluIHlvdXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvcmtzcGFjZSAob25seSBvbmUgdmFyaWFudCBvZiBhIHJlY2lwZSBjYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRseSBiZSB3b3JrZWQgb24gYXQgb25jZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFyZ3MucmVjaXBlbmFtZSkKKworICAgIF9jaGVja19jb21wYXRpYmxlX3JlY2lwZShhcmdzLnJlY2lwZW5hbWUsIHJkKQorCisgICAgaW5pdGlhbF9yZXYgPSBOb25lCisgICAgY29tbWl0cyA9IFtdCisgICAgc3JjdHJlZSA9IG9zLnBhdGguYWJzcGF0aChhcmdzLnNyY3RyZWUpCisgICAgaWYgYXJncy5leHRyYWN0OgorICAgICAgICBpbml0aWFsX3JldiA9IF9leHRyYWN0X3NvdXJjZShhcmdzLnNyY3RyZWUsIEZhbHNlLCBhcmdzLmJyYW5jaCwgcmQpCisgICAgICAgIGlmIG5vdCBpbml0aWFsX3JldjoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGxvZ2dlci5pbmZvKCdTb3VyY2UgdHJlZSBleHRyYWN0ZWQgdG8gJXMnICUgc3JjdHJlZSkKKyAgICAgICAgIyBHZXQgbGlzdCBvZiBjb21taXRzIHNpbmNlIHRoaXMgcmV2aXNpb24KKyAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAlcy4uSEVBRCcgJSBpbml0aWFsX3JldiwgY3dkPWFyZ3Muc3JjdHJlZSkKKyAgICAgICAgY29tbWl0cyA9IHN0ZG91dC5zcGxpdCgpCisgICAgZWxzZToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFyZ3Muc3JjdHJlZSwgJy5naXQnKSk6CisgICAgICAgICAgICAjIENoZWNrIGlmIGl0J3MgYSB0cmVlIHByZXZpb3VzbHkgZXh0cmFjdGVkIGJ5IHVzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IGJyYW5jaCAtLWNvbnRhaW5zIGRldnRvb2wtYmFzZScsIGN3ZD1hcmdzLnNyY3RyZWUpCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBzdGRvdXQgPSAnJworICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyonKToKKyAgICAgICAgICAgICAgICAgICAgKHN0ZG91dCwgXykgPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBkZXZ0b29sLWJhc2UnLCBjd2Q9YXJncy5zcmN0cmVlKQorICAgICAgICAgICAgICAgICAgICBpbml0aWFsX3JldiA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGluaXRpYWxfcmV2OgorICAgICAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBqdXN0IGdyYWIgdGhlIGhlYWQgcmV2aXNpb24KKyAgICAgICAgICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9YXJncy5zcmN0cmVlKQorICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisKKyAgICAjIENoZWNrIHRoYXQgcmVjaXBlIGlzbid0IHVzaW5nIGEgc2hhcmVkIHdvcmtkaXIKKyAgICBzID0gb3MucGF0aC5hYnNwYXRoKHJkLmdldFZhcignUycsIFRydWUpKQorICAgIHdvcmtkaXIgPSBvcy5wYXRoLmFic3BhdGgocmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkpCisgICAgaWYgcy5zdGFydHN3aXRoKHdvcmtkaXIpIGFuZCBzICE9IHdvcmtkaXIgYW5kIG9zLnBhdGguZGlybmFtZShzKSAhPSB3b3JrZGlyOgorICAgICAgICAjIEhhbmRsZSBpZiBTIGlzIHNldCB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlCisgICAgICAgIHNyY3N1YmRpciA9IG9zLnBhdGgucmVscGF0aChzLCB3b3JrZGlyKS5zcGxpdChvcy5zZXAsIDEpWzFdCisgICAgICAgIHNyY3RyZWUgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgc3Jjc3ViZGlyKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFwcGVuZHBhdGgpOgorICAgICAgICBvcy5tYWtlZGlycyhhcHBlbmRwYXRoKQorICAgIHdpdGggb3BlbihhcHBlbmRmaWxlLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcblxuJykKKyAgICAgICAgZi53cml0ZSgnaW5oZXJpdCBleHRlcm5hbHNyY1xuJykKKyAgICAgICAgZi53cml0ZSgnIyBOT1RFOiBXZSB1c2UgcG4tIG92ZXJyaWRlcyBoZXJlIHRvIGF2b2lkIGFmZmVjdGluZyBtdWx0aXBsZSB2YXJpYW50cyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcmVjaXBlIHVzZXMgQkJDTEFTU0VYVEVORFxuJykKKyAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfcG4tJXMgPSAiJXMiXG4nICUgKGFyZ3MucmVjaXBlbmFtZSwgc3JjdHJlZSkpCisKKyAgICAgICAgYl9pc19zID0gVHJ1ZQorICAgICAgICBpZiBhcmdzLm5vX3NhbWVfZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSAtLW5vLXNhbWUtZGlyIHNwZWNpZmllZCcpCisgICAgICAgICAgICBiX2lzX3MgPSBGYWxzZQorICAgICAgICBlbGlmIGFyZ3Muc2FtZV9kaXI6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIC0tc2FtZS1kaXIgc3BlY2lmaWVkJykKKyAgICAgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhdXRvdG9vbHMtYnJva2Vuc2VwJywgcmQpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3VzaW5nIHNvdXJjZSB0cmVlIGFzIGJ1aWxkIGRpcmVjdG9yeSBzaW5jZSBvcmlnaW5hbCByZWNpcGUgaW5oZXJpdHMgYXV0b3Rvb2xzLWJyb2tlbnNlcCcpCisgICAgICAgIGVsaWYgcmQuZ2V0VmFyKCdCJywgVHJ1ZSkgPT0gczoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2UgdGhhdCBpcyB0aGUgZGVmYXVsdCBmb3IgdGhpcyByZWNpcGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYl9pc19zID0gRmFsc2UKKyAgICAgICAgaWYgYl9pc19zOgorICAgICAgICAgICAgZi53cml0ZSgnRVhURVJOQUxTUkNfQlVJTERfcG4tJXMgPSAiJXMiXG4nICUgKGFyZ3MucmVjaXBlbmFtZSwgc3JjdHJlZSkpCisKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygna2VybmVsJywgcmQpOgorICAgICAgICAgICAgZi53cml0ZSgnU1JDVFJFRUNPVkVSRURUQVNLUyA9ICJkb192YWxpZGF0ZV9icmFuY2hlcyBkb19rZXJuZWxfY2hlY2tvdXQgZG9fZmV0Y2ggZG9fdW5wYWNrIlxuJykKKyAgICAgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgaW5pdGlhbF9yZXYpCisgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnIyBjb21taXQ6ICVzXG4nICUgY29tbWl0KQorCisgICAgX2FkZF9tZDUoY29uZmlnLCBhcmdzLnJlY2lwZW5hbWUsIGFwcGVuZGZpbGUpCisKKyAgICBsb2dnZXIuaW5mbygnUmVjaXBlICVzIG5vdyBzZXQgdXAgdG8gYnVpbGQgZnJvbSAlcycgJSAoYXJncy5yZWNpcGVuYW1lLCBzcmN0cmVlKSkKKworICAgIHJldHVybiAwCisKK2RlZiBfZ2V0X3BhdGNoc2V0X3JldnMoYXJncywgc3JjdHJlZSwgcmVjaXBlX3BhdGgpOgorICAgICIiIkdldCBpbml0aWFsIGFuZCB1cGRhdGUgcmV2IG9mIGEgcmVjaXBlLiBUaGVzZSBhcmUgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZQorICAgIHdob2xlIHBhdGNoc2V0IGFuZCBzdGFydCBwb2ludCBmb3IgdGhlIHBhdGNoZXMgdG8gYmUgcmUtZ2VuZXJhdGVkL3VwZGF0ZWQuCisgICAgIiIiCisgICAgaW1wb3J0IGJiCisKKyAgICBpZiBhcmdzLmluaXRpYWxfcmV2OgorICAgICAgICByZXR1cm4gYXJncy5pbml0aWFsX3JldiwgYXJncy5pbml0aWFsX3JldgorCisgICAgIyBQYXJzZSBpbml0aWFsIHJldiBmcm9tIHJlY2lwZQorICAgIGNvbW1pdHMgPSBbXQorICAgIGluaXRpYWxfcmV2ID0gTm9uZQorICAgIHdpdGggb3BlbihyZWNpcGVfcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjIGluaXRpYWxfcmV2OicpOgorICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2ID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnIyBjb21taXQ6Jyk6CisgICAgICAgICAgICAgICAgY29tbWl0cy5hcHBlbmQobGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpKQorCisgICAgdXBkYXRlX3JldiA9IGluaXRpYWxfcmV2CisgICAgaWYgaW5pdGlhbF9yZXY6CisgICAgICAgICMgRmluZCBmaXJzdCBhY3R1YWxseSBjaGFuZ2VkIHJldmlzaW9uCisgICAgICAgIHN0ZG91dCwgXyA9IGJiLnByb2Nlc3MucnVuKCdnaXQgcmV2LWxpc3QgLS1yZXZlcnNlICVzLi5IRUFEJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmV2LCBjd2Q9c3JjdHJlZSkKKyAgICAgICAgbmV3Y29tbWl0cyA9IHN0ZG91dC5zcGxpdCgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShtaW4obGVuKGNvbW1pdHMpLCBsZW4obmV3Y29tbWl0cykpKToKKyAgICAgICAgICAgIGlmIG5ld2NvbW1pdHNbaV0gPT0gY29tbWl0c1tpXToKKyAgICAgICAgICAgICAgICB1cGRhdGVfcmV2ID0gY29tbWl0c1tpXQorCisgICAgcmV0dXJuIGluaXRpYWxfcmV2LCB1cGRhdGVfcmV2CisKK2RlZiBfcmVtb3ZlX3BhdGNoX2VudHJpZXMoc3JjdXJpLCBwYXRjaGxpc3QpOgorICAgICIiIlJlbW92ZSBwYXRjaCBlbnRyaWVzIGZyb20gU1JDX1VSSSIiIgorICAgIHJlbWFpbmluZyA9IHBhdGNobGlzdFs6XQorICAgIGVudHJpZXMgPSBbXQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGxpc3Q6CisgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc3JjdXJpKSk6CisgICAgICAgICAgICBpZiBzcmN1cmlbaV0uc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCBvcy5wYXRoLmJhc2VuYW1lKHNyY3VyaVtpXS5zcGxpdCgnOycpWzBdKSA9PSBwYXRjaGZpbGU6CisgICAgICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoc3JjdXJpW2ldKQorICAgICAgICAgICAgICAgIHJlbWFpbmluZy5yZW1vdmUocGF0Y2gpCisgICAgICAgICAgICAgICAgc3JjdXJpLnBvcChpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIGVudHJpZXMsIHJlbWFpbmluZworCitkZWYgX3JlbW92ZV9wYXRjaF9maWxlcyhhcmdzLCBwYXRjaGVzLCBkZXN0cGF0aCk6CisgICAgIiIiVW5saW5rIGV4aXN0aW5nIHBhdGNoIGZpbGVzIiIiCisgICAgZm9yIHBhdGNoZmlsZSBpbiBwYXRjaGVzOgorICAgICAgICBpZiBhcmdzLmFwcGVuZDoKKyAgICAgICAgICAgIGlmIG5vdCBkZXN0cGF0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2Rlc3RwYXRoIHNob3VsZCBiZSBzZXQgaGVyZScpCisgICAgICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmpvaW4oZGVzdHBhdGgsIG9zLnBhdGguYmFzZW5hbWUocGF0Y2hmaWxlKSkKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRjaGZpbGUpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1JlbW92aW5nIHBhdGNoICVzJyAlIHBhdGNoZmlsZSkKKyAgICAgICAgICAgICMgRklYTUUgImdpdCBybSIgaGVyZSB3b3VsZCBiZSBuaWNlIGlmIHRoZSBmaWxlIGluIHF1ZXN0aW9uIGlzCisgICAgICAgICAgICAjICAgICAgIHRyYWNrZWQKKyAgICAgICAgICAgICMgRklYTUUgdGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoaXMgZmlsZSBpcyByZWZlcnJlZCB0byBieQorICAgICAgICAgICAgIyAgICAgICBhbm90aGVyIHJlY2lwZSwgaW4gd2hpY2ggY2FzZSBkZWxldGluZyB3b3VsZG4ndCBiZSB0aGUKKyAgICAgICAgICAgICMgICAgICAgcmlnaHQgdGhpbmcgdG8gZG8KKyAgICAgICAgICAgIG9zLnJlbW92ZShwYXRjaGZpbGUpCisgICAgICAgICAgICAjIFJlbW92ZSBkaXJlY3RvcnkgaWYgZW1wdHkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmRpcm5hbWUocGF0Y2hmaWxlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG9zZToKKyAgICAgICAgICAgICAgICBpZiBvc2UuZXJybm8gIT0gZXJybm8uRU5PVEVNUFRZOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgX3VwZGF0ZV9yZWNpcGVfc3JjcmV2KGFyZ3MsIHNyY3RyZWUsIHJkLCBjb25maWdfZGF0YSk6CisgICAgIiIiSW1wbGVtZW50IHRoZSAnc3JjcmV2JyBtb2RlIG9mIHVwZGF0ZS1yZWNpcGUiIiIKKyAgICBpbXBvcnQgYmIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICBmcm9tIG9lLnBhdGNoIGltcG9ydCBHaXRBcHBseVRyZWUKKworICAgIHJlY2lwZWZpbGUgPSByZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKQorICAgIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBTUkNSRVYgaW4gcmVjaXBlICVzJyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpCisKKyAgICAjIEdldCBIRUFEIHJldmlzaW9uCisgICAgdHJ5OgorICAgICAgICBzdGRvdXQsIF8gPSBiYi5wcm9jZXNzLnJ1bignZ2l0IHJldi1wYXJzZSBIRUFEJywgY3dkPXNyY3RyZWUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ0ZhaWxlZCB0byBnZXQgSEVBRCByZXZpc2lvbiBpbiAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcmN0cmVlLCBlcnIpKQorICAgIHNyY3JldiA9IHN0ZG91dC5zdHJpcCgpCisgICAgaWYgbGVuKHNyY3JldikgIT0gNDA6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcignSW52YWxpZCBoYXNoIHJldHVybmVkIGJ5IGdpdDogJXMnICUgc3Rkb3V0KQorCisgICAgZGVzdHBhdGggPSBOb25lCisgICAgcmVtb3ZlcGF0Y2hlcyA9IFtdCisgICAgcGF0Y2hmaWVsZHMgPSB7fQorICAgIHBhdGNoZmllbGRzWydTUkNSRVYnXSA9IHNyY3JldgorICAgIG9yaWdfc3JjX3VyaSA9IHJkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKSBvciAnJworICAgIGlmIG5vdCBhcmdzLm5vX3JlbW92ZToKKyAgICAgICAgIyBGaW5kIGxpc3Qgb2YgZXhpc3RpbmcgcGF0Y2hlcyBpbiByZWNpcGUgZmlsZQorICAgICAgICBleGlzdGluZ19wYXRjaGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVzKHJkKQorCisgICAgICAgIG9sZF9zcmNyZXYgPSAocmQuZ2V0VmFyKCdTUkNSRVYnLCBGYWxzZSkgb3IgJycpCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEdpdEFwcGx5VHJlZS5leHRyYWN0UGF0Y2hlcyhzcmN0cmVlLCBvbGRfc3JjcmV2LCB0ZW1wZGlyKQorICAgICAgICAgICAgbmV3cGF0Y2hlcyA9IG9zLmxpc3RkaXIodGVtcGRpcikKKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBleGlzdGluZ19wYXRjaGVzOgorICAgICAgICAgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgICAgICAgICAgaWYgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXBhdGNoZXMuYXBwZW5kKHBhdGNoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgICAgIGlmIHJlbW92ZXBhdGNoZXM6CisgICAgICAgICAgICBzcmN1cmkgPSBvcmlnX3NyY191cmkuc3BsaXQoKQorICAgICAgICAgICAgcmVtb3ZlZGVudHJpZXMsIF8gPSBfcmVtb3ZlX3BhdGNoX2VudHJpZXMoc3JjdXJpLCByZW1vdmVwYXRjaGVzKQorICAgICAgICAgICAgaWYgcmVtb3ZlZGVudHJpZXM6CisgICAgICAgICAgICAgICAgcGF0Y2hmaWVsZHNbJ1NSQ19VUkknXSA9ICcgJy5qb2luKHNyY3VyaSkKKworICAgIGlmIGFyZ3MuYXBwZW5kOgorICAgICAgICBfLCBkZXN0cGF0aCA9IG9lLnJlY2lwZXV0aWxzLmJiYXBwZW5kX3JlY2lwZSgKKyAgICAgICAgICAgICAgICByZCwgYXJncy5hcHBlbmQsIE5vbmUsIHdpbGRjYXJkdmVyPWFyZ3Mud2lsZGNhcmRfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICBleHRyYWxpbmVzPXBhdGNoZmllbGRzKQorICAgIGVsc2U6CisgICAgICAgIG9lLnJlY2lwZXV0aWxzLnBhdGNoX3JlY2lwZShyZCwgcmVjaXBlZmlsZSwgcGF0Y2hmaWVsZHMpCisKKyAgICBpZiBub3QgJ2dpdDovLycgaW4gb3JpZ19zcmNfdXJpOgorICAgICAgICBsb2dnZXIuaW5mbygnWW91IHdpbGwgbmVlZCB0byB1cGRhdGUgU1JDX1VSSSB3aXRoaW4gdGhlIHJlY2lwZSB0byAnCisgICAgICAgICAgICAgICAgICAgICdwb2ludCB0byBhIGdpdCByZXBvc2l0b3J5IHdoZXJlIHlvdSBoYXZlIHB1c2hlZCB5b3VyICcKKyAgICAgICAgICAgICAgICAgICAgJ2NoYW5nZXMnKQorCisgICAgX3JlbW92ZV9wYXRjaF9maWxlcyhhcmdzLCByZW1vdmVwYXRjaGVzLCBkZXN0cGF0aCkKKworZGVmIF91cGRhdGVfcmVjaXBlX3BhdGNoKGFyZ3MsIGNvbmZpZywgc3JjdHJlZSwgcmQsIGNvbmZpZ19kYXRhKToKKyAgICAiIiJJbXBsZW1lbnQgdGhlICdwYXRjaCcgbW9kZSBvZiB1cGRhdGUtcmVjaXBlIiIiCisgICAgaW1wb3J0IGJiCisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgZnJvbSBvZS5wYXRjaCBpbXBvcnQgR2l0QXBwbHlUcmVlCisKKyAgICByZWNpcGVmaWxlID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICBhcHBlbmQgPSBvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAnYXBwZW5kcycsICclcy5iYmFwcGVuZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSkpWzBdKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcHBlbmQpOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ3VuYWJsZSB0byBmaW5kIHdvcmtzcGFjZSBiYmFwcGVuZCBmb3IgcmVjaXBlICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnJlY2lwZW5hbWUpCisKKyAgICBpbml0aWFsX3JldiwgdXBkYXRlX3JldiA9IF9nZXRfcGF0Y2hzZXRfcmV2cyhhcmdzLCBzcmN0cmVlLCBhcHBlbmQpCisgICAgaWYgbm90IGluaXRpYWxfcmV2OgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGluaXRpYWwgcmV2aXNpb24gLSBwbGVhc2Ugc3BlY2lmeSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXQgd2l0aCAtLWluaXRpYWwtcmV2JykKKworICAgICMgRmluZCBsaXN0IG9mIGV4aXN0aW5nIHBhdGNoZXMgaW4gcmVjaXBlIGZpbGUKKyAgICBleGlzdGluZ19wYXRjaGVzID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wYXRjaGVzKHJkKQorCisgICAgcmVtb3ZlcGF0Y2hlcyA9IFtdCisgICAgc2VxcGF0Y2hfcmUgPSByZS5jb21waWxlKCdeKFswLTldezR9LSk/KC4rKScpCisgICAgaWYgbm90IGFyZ3Mubm9fcmVtb3ZlOgorICAgICAgICAjIEdldCBhbGwgcGF0Y2hlcyBmcm9tIHNvdXJjZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgc2hvdWxkIGJlIHJlbW92ZWQKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgR2l0QXBwbHlUcmVlLmV4dHJhY3RQYXRjaGVzKHNyY3RyZWUsIGluaXRpYWxfcmV2LCB0ZW1wZGlyKQorICAgICAgICAgICAgIyBTdHJpcCBudW1iZXJpbmcgZnJvbSBwYXRjaCBuYW1lcy4gSWYgaXQncyBhIGdpdCBzZXF1ZW5jZSBuYW1lZAorICAgICAgICAgICAgIyBwYXRjaCwgdGhlIG51bWJlcnMgbWlnaHQgbm90IG1hdGNoIHVwIHNpbmNlIHdlIGFyZSBzdGFydGluZyBmcm9tCisgICAgICAgICAgICAjIGEgZGlmZmVyZW50IHJldmlzaW9uIFRoaXMgZG9lcyBhc3N1bWUgdGhhdCBwZW9wbGUgYXJlIHVzaW5nCisgICAgICAgICAgICAjIHVuaXF1ZSBzaG9ydGxvZyB2YWx1ZXMsIGJ1dCB0aGV5IG91Z2h0IHRvIGJlIGFueXdheS4uLgorICAgICAgICAgICAgbmV3cGF0Y2hlcyA9IFtzZXFwYXRjaF9yZS5tYXRjaChmbmFtZSkuZ3JvdXAoMikgZm9yIGZuYW1lIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpc3RkaXIodGVtcGRpcildCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBiYXNlbmFtZSA9IHNlcXBhdGNoX3JlLm1hdGNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKSkuZ3JvdXAoMikKKyAgICAgICAgICAgICAgICBpZiBiYXNlbmFtZSBub3QgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlcGF0Y2hlcy5hcHBlbmQocGF0Y2gpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICAjIEdldCB1cGRhdGVkIHBhdGNoZXMgZnJvbSBzb3VyY2UgdHJlZQorICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbCcpCisgICAgdHJ5OgorICAgICAgICBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoZXMoc3JjdHJlZSwgdXBkYXRlX3JldiwgdGVtcGRpcikKKworICAgICAgICAjIE1hdGNoIHVwIGFuZCByZXBsYWNlIGV4aXN0aW5nIHBhdGNoZXMgd2l0aCBjb3JyZXNwb25kaW5nIG5ldyBwYXRjaGVzCisgICAgICAgIHVwZGF0ZXBhdGNoZXMgPSBGYWxzZQorICAgICAgICB1cGRhdGVyZWNpcGUgPSBGYWxzZQorICAgICAgICBkZXN0cGF0aCA9IE5vbmUKKyAgICAgICAgbmV3cGF0Y2hlcyA9IG9zLmxpc3RkaXIodGVtcGRpcikKKyAgICAgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgICAgICBwYXRjaGZpbGVzID0ge30KKyAgICAgICAgICAgIGZvciBwYXRjaCBpbiBleGlzdGluZ19wYXRjaGVzOgorICAgICAgICAgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpCisgICAgICAgICAgICAgICAgaWYgcGF0Y2hmaWxlIGluIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIHBhdGNoZmlsZXNbb3MucGF0aC5qb2luKHRlbXBkaXIsIHBhdGNoZmlsZSldID0gcGF0Y2hmaWxlCisgICAgICAgICAgICAgICAgICAgIG5ld3BhdGNoZXMucmVtb3ZlKHBhdGNoZmlsZSkKKyAgICAgICAgICAgIGZvciBwYXRjaGZpbGUgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGVzW29zLnBhdGguam9pbih0ZW1wZGlyLCBwYXRjaGZpbGUpXSA9IE5vbmUKKworICAgICAgICAgICAgaWYgcGF0Y2hmaWxlcyBvciByZW1vdmVwYXRjaGVzOgorICAgICAgICAgICAgICAgIHJlbW92ZXZhbHVlcyA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBzcmN1cmkgPSAocmQuZ2V0VmFyKCdTUkNfVVJJJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRlbnRyaWVzLCByZW1haW5pbmcgPSBfcmVtb3ZlX3BhdGNoX2VudHJpZXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjdXJpLCByZW1vdmVwYXRjaGVzKQorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVkZW50cmllcyBvciByZW1haW5pbmc6CisgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSBbJ2ZpbGU6Ly8nICsgb3MucGF0aC5iYXNlbmFtZShpdGVtKSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtIGluIHJlbWFpbmluZ10KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhbHVlcyA9IHsnU1JDX1VSSSc6IHJlbW92ZWRlbnRyaWVzICsgcmVtYWluaW5nfQorICAgICAgICAgICAgICAgIF8sIGRlc3RwYXRoID0gb2UucmVjaXBldXRpbHMuYmJhcHBlbmRfcmVjaXBlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZCwgYXJncy5hcHBlbmQsIHBhdGNoZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhbHVlcz1yZW1vdmV2YWx1ZXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdObyBwYXRjaGVzIG5lZWRlZCB1cGRhdGluZycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gZXhpc3RpbmdfcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBwYXRjaGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKQorICAgICAgICAgICAgICAgIGlmIHBhdGNoZmlsZSBpbiBuZXdwYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnVXBkYXRpbmcgcGF0Y2ggJXMnICUgcGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4odGVtcGRpciwgcGF0Y2hmaWxlKSwgcGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIG5ld3BhdGNoZXMucmVtb3ZlKHBhdGNoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcGF0Y2hlcyA9IFRydWUKKyAgICAgICAgICAgIHNyY3VyaSA9IChyZC5nZXRWYXIoJ1NSQ19VUkknLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5ld3BhdGNoZXM6CisgICAgICAgICAgICAgICAgIyBBZGQgYW55IHBhdGNoZXMgbGVmdCBvdmVyCisgICAgICAgICAgICAgICAgcGF0Y2hkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkLmdldFZhcignQlBOJywgVHJ1ZSkpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBhdGNoZGlyKQorICAgICAgICAgICAgICAgIGZvciBwYXRjaGZpbGUgaW4gbmV3cGF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0FkZGluZyBuZXcgcGF0Y2ggJXMnICUgcGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwubW92ZShvcy5wYXRoLmpvaW4odGVtcGRpciwgcGF0Y2hmaWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGNoZGlyLCBwYXRjaGZpbGUpKQorICAgICAgICAgICAgICAgICAgICBzcmN1cmkuYXBwZW5kKCdmaWxlOi8vJXMnICUgcGF0Y2hmaWxlKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVyZWNpcGUgPSBUcnVlCisgICAgICAgICAgICBpZiByZW1vdmVwYXRjaGVzOgorICAgICAgICAgICAgICAgIHJlbW92ZWRlbnRyaWVzLCBfID0gX3JlbW92ZV9wYXRjaF9lbnRyaWVzKHNyY3VyaSwgcmVtb3ZlcGF0Y2hlcykKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVkZW50cmllczoKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlcmVjaXBlID0gVHJ1ZQorICAgICAgICAgICAgaWYgdXBkYXRlcmVjaXBlOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdVcGRhdGluZyByZWNpcGUgJXMnICUgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgICAgICAgICBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGUocmQsIHJlY2lwZWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnU1JDX1VSSSc6ICcgJy5qb2luKHNyY3VyaSl9KQorICAgICAgICAgICAgZWxpZiBub3QgdXBkYXRlcGF0Y2hlczoKKyAgICAgICAgICAgICAgICAjIE5laXRoZXIgcGF0Y2hlcyBub3IgcmVjaXBlIHdlcmUgdXBkYXRlZAorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdObyBwYXRjaGVzIG5lZWQgdXBkYXRpbmcnKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworICAgIF9yZW1vdmVfcGF0Y2hfZmlsZXMoYXJncywgcmVtb3ZlcGF0Y2hlcywgZGVzdHBhdGgpCisKK2RlZiBfZ3Vlc3NfcmVjaXBlX3VwZGF0ZV9tb2RlKHNyY3RyZWUsIHJkYXRhKToKKyAgICAiIiJHdWVzcyB0aGUgcmVjaXBlIHVwZGF0ZSBtb2RlIHRvIHVzZSIiIgorICAgIHNyY191cmkgPSAocmRhdGEuZ2V0VmFyKCdTUkNfVVJJJywgRmFsc2UpIG9yICcnKS5zcGxpdCgpCisgICAgZ2l0X3VyaXMgPSBbdXJpIGZvciB1cmkgaW4gc3JjX3VyaSBpZiB1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyldCisgICAgaWYgbm90IGdpdF91cmlzOgorICAgICAgICByZXR1cm4gJ3BhdGNoJworICAgICMgSnVzdCB1c2UgdGhlIGZpcnN0IFVSSSBmb3Igbm93CisgICAgdXJpID0gZ2l0X3VyaXNbMF0KKyAgICAjIENoZWNrIHJlbW90ZSBicmFuY2gKKyAgICBwYXJhbXMgPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJpKVs1XQorICAgIHVwc3RyX2JyYW5jaCA9IHBhcmFtc1snYnJhbmNoJ10gaWYgJ2JyYW5jaCcgaW4gcGFyYW1zIGVsc2UgJ21hc3RlcicKKyAgICAjIENoZWNrIGlmIGN1cnJlbnQgYnJhbmNoIEhFQUQgaXMgZm91bmQgaW4gdXBzdHJlYW0gYnJhbmNoCisgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD1zcmN0cmVlKQorICAgIGhlYWRfcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgc3Rkb3V0LCBfID0gYmIucHJvY2Vzcy5ydW4oJ2dpdCBicmFuY2ggLXIgLS1jb250YWlucyAlcycgJSBoZWFkX3JldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9c3JjdHJlZSkKKyAgICByZW1vdGVfYnJzID0gW2JyYW5jaC5zdHJpcCgpIGZvciBicmFuY2ggaW4gc3Rkb3V0LnNwbGl0bGluZXMoKV0KKyAgICBpZiAnb3JpZ2luLycgKyB1cHN0cl9icmFuY2ggaW4gcmVtb3RlX2JyczoKKyAgICAgICAgcmV0dXJuICdzcmNyZXYnCisKKyAgICByZXR1cm4gJ3BhdGNoJworCitkZWYgdXBkYXRlX3JlY2lwZShhcmdzLCBjb25maWcsIGJhc2VwYXRoLCB3b3Jrc3BhY2UpOgorICAgICIiIkVudHJ5IHBvaW50IGZvciB0aGUgZGV2dG9vbCAndXBkYXRlLXJlY2lwZScgc3ViY29tbWFuZCIiIgorICAgIGlmIG5vdCBhcmdzLnJlY2lwZW5hbWUgaW4gd29ya3NwYWNlOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHJlY2lwZSBuYW1lZCAlcyBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5yZWNpcGVuYW1lKQorCisgICAgaWYgYXJncy5hcHBlbmQ6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLmFwcGVuZCk6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ2JiYXBwZW5kIGRlc3RpbmF0aW9uIGxheWVyIGRpcmVjdG9yeSAiJXMiICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG9lcyBub3QgZXhpc3QnICUgYXJncy5hcHBlbmQpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYXJncy5hcHBlbmQsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoJ2NvbmYvbGF5ZXIuY29uZiBub3QgZm91bmQgaW4gYmJhcHBlbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5hdGlvbiBsYXllciAiJXMiJyAlIGFyZ3MuYXBwZW5kKQorCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorCisgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgaWYgbm90IHJkOgorICAgICAgICByZXR1cm4gMQorCisgICAgc3JjdHJlZSA9IHdvcmtzcGFjZVthcmdzLnJlY2lwZW5hbWVdWydzcmN0cmVlJ10KKyAgICBpZiBhcmdzLm1vZGUgPT0gJ2F1dG8nOgorICAgICAgICBtb2RlID0gX2d1ZXNzX3JlY2lwZV91cGRhdGVfbW9kZShzcmN0cmVlLCByZCkKKyAgICBlbHNlOgorICAgICAgICBtb2RlID0gYXJncy5tb2RlCisKKyAgICBpZiBtb2RlID09ICdzcmNyZXYnOgorICAgICAgICBfdXBkYXRlX3JlY2lwZV9zcmNyZXYoYXJncywgc3JjdHJlZSwgcmQsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgZWxpZiBtb2RlID09ICdwYXRjaCc6CisgICAgICAgIF91cGRhdGVfcmVjaXBlX3BhdGNoKGFyZ3MsIGNvbmZpZywgc3JjdHJlZSwgcmQsIHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCd1cGRhdGVfcmVjaXBlOiBpbnZhbGlkIG1vZGUgJXMnICUgbW9kZSkKKworICAgIHJmID0gcmQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICBpZiByZi5zdGFydHN3aXRoKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCk6CisgICAgICAgIGxvZ2dlci53YXJuKCdSZWNpcGUgZmlsZSAlcyBoYXMgYmVlbiB1cGRhdGVkIGJ1dCBpcyBpbnNpZGUgdGhlIHdvcmtzcGFjZSAtIHlvdSB3aWxsIG5lZWQgdG8gbW92ZSBpdCAoYW5kIGFueSBhc3NvY2lhdGVkIGZpbGVzIG5leHQgdG8gaXQpIG91dCB0byB0aGUgZGVzaXJlZCBsYXllciBiZWZvcmUgdXNpbmcgImRldnRvb2wgcmVzZXQiIGluIG9yZGVyIHRvIGtlZXAgYW55IGNoYW5nZXMnICUgcmYpCisKKyAgICByZXR1cm4gMAorCisKK2RlZiBzdGF0dXMoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3N0YXR1cycgc3ViY29tbWFuZCIiIgorICAgIGlmIHdvcmtzcGFjZToKKyAgICAgICAgZm9yIHJlY2lwZSwgdmFsdWUgaW4gd29ya3NwYWNlLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgcHJpbnQoIiVzOiAlcyIgJSAocmVjaXBlLCB2YWx1ZVsnc3JjdHJlZSddKSkKKyAgICBlbHNlOgorICAgICAgICBsb2dnZXIuaW5mbygnTm8gcmVjaXBlcyBjdXJyZW50bHkgaW4geW91ciB3b3Jrc3BhY2UgLSB5b3UgY2FuIHVzZSAiZGV2dG9vbCBtb2RpZnkiIHRvIHdvcmsgb24gYW4gZXhpc3RpbmcgcmVjaXBlIG9yICJkZXZ0b29sIGFkZCIgdG8gYWRkIGEgbmV3IG9uZScpCisgICAgcmV0dXJuIDAKKworCitkZWYgcmVzZXQoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3Jlc2V0JyBzdWJjb21tYW5kIiIiCisgICAgaW1wb3J0IGJiCisgICAgaWYgYXJncy5yZWNpcGVuYW1lOgorICAgICAgICBpZiBhcmdzLmFsbDoKKyAgICAgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiUmVjaXBlIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgLWEvLS1hbGwgaXMgdXNlZCIpCisgICAgICAgIGVsaWYgbm90IGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIm5vIHJlY2lwZSBuYW1lZCAlcyBpbiB5b3VyIHdvcmtzcGFjZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucmVjaXBlbmFtZSkKKyAgICBlbGlmIG5vdCBhcmdzLmFsbDoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJSZWNpcGUgbXVzdCBiZSBzcGVjaWZpZWQsIG9yIHNwZWNpZnkgLWEvLS1hbGwgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc2V0IGFsbCByZWNpcGVzIikKKyAgICBpZiBhcmdzLmFsbDoKKyAgICAgICAgcmVjaXBlcyA9IHdvcmtzcGFjZQorICAgIGVsc2U6CisgICAgICAgIHJlY2lwZXMgPSBbYXJncy5yZWNpcGVuYW1lXQorCisgICAgZm9yIHBuIGluIHJlY2lwZXM6CisgICAgICAgIGlmIG5vdCBhcmdzLm5vX2NsZWFuOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ0NsZWFuaW5nIHN5c3Jvb3QgZm9yIHJlY2lwZSAlcy4uLicgJSBwbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjX2J1aWxkX2Vudl9jb21tYW5kKGNvbmZpZy5pbml0X3BhdGgsIGJhc2VwYXRoLCAnYml0YmFrZSAtYyBjbGVhbiAlcycgJSBwbikKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQsIG91dHB1dDpcbiVzXG5JZiB5b3UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lzaCwgeW91IG1heSBzcGVjaWZ5IC1uLy0tbm8tY2xlYW4gdG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcCBydW5uaW5nIHRoaXMgY29tbWFuZCB3aGVuIHJlc2V0dGluZycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5jb21tYW5kLCBlLnN0ZG91dCkpCisKKyAgICAgICAgX2NoZWNrX3ByZXNlcnZlKGNvbmZpZywgcG4pCisKKyAgICAgICAgcHJlc2VydmVwYXRoID0gb3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2F0dGljJywgcG4pCisgICAgICAgIGRlZiBwcmVzZXJ2ZWRpcihvcmlnZGlyKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9yaWdkaXIpOgorICAgICAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9yaWdkaXIpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignUHJlc2VydmluZyAlcyBpbiAlcycgJSAoZm4sIHByZXNlcnZlcGF0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocHJlc2VydmVwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUob3MucGF0aC5qb2luKG9yaWdkaXIsIGZuKSwgb3MucGF0aC5qb2luKHByZXNlcnZlcGF0aCwgZm4pKQorICAgICAgICAgICAgICAgICAgICBmb3IgZG4gaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihyb290LCBkbikpCisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3JpZ2RpcikKKworICAgICAgICBwcmVzZXJ2ZWRpcihvcy5wYXRoLmpvaW4oY29uZmlnLndvcmtzcGFjZV9wYXRoLCAncmVjaXBlcycsIHBuKSkKKyAgICAgICAgIyBXZSBkb24ndCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGlzIGRpciBuZXh0IHRvIGFwcGVuZHMsIGJ1dCB0aGUgdXNlciBjYW4KKyAgICAgICAgcHJlc2VydmVkaXIob3MucGF0aC5qb2luKGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgJ2FwcGVuZHMnLCBwbikpCisKKyAgICByZXR1cm4gMAorCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhpcyBwbHVnaW4iIiIKKyAgICBwYXJzZXJfYWRkID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdhZGQnLCBoZWxwPSdBZGQgYSBuZXcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdBZGRzIGEgbmV3IHJlY2lwZScpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIGZvciBuZXcgcmVjaXBlIHRvIGFkZCcpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJ3NyY3RyZWUnLCBoZWxwPSdQYXRoIHRvIGV4dGVybmFsIHNvdXJjZSB0cmVlJykKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS1zYW1lLWRpcicsICctcycsIGhlbHA9J0J1aWxkIGluIHNhbWUgZGlyZWN0b3J5IGFzIHNvdXJjZScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyX2FkZC5hZGRfYXJndW1lbnQoJy0tZmV0Y2gnLCAnLWYnLCBoZWxwPSdGZXRjaCB0aGUgc3BlY2lmaWVkIFVSSSBhbmQgZXh0cmFjdCBpdCB0byBjcmVhdGUgdGhlIHNvdXJjZSB0cmVlJywgbWV0YXZhcj0nVVJJJykKKyAgICBwYXJzZXJfYWRkLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgJy1WJywgaGVscD0nVmVyc2lvbiB0byB1c2Ugd2l0aGluIHJlY2lwZSAoUFYpJykKKyAgICBwYXJzZXJfYWRkLnNldF9kZWZhdWx0cyhmdW5jPWFkZCkKKworICAgIHBhcnNlcl9tb2RpZnkgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ21vZGlmeScsIGhlbHA9J01vZGlmeSB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0VuYWJsZXMgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgZm9yIGFuIGV4aXN0aW5nIHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICAgcGFyc2VyX21vZGlmeS5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBoZWxwPSdOYW1lIGZvciByZWNpcGUgdG8gZWRpdCcpCisgICAgcGFyc2VyX21vZGlmeS5hZGRfYXJndW1lbnQoJ3NyY3RyZWUnLCBoZWxwPSdQYXRoIHRvIGV4dGVybmFsIHNvdXJjZSB0cmVlJykKKyAgICBwYXJzZXJfbW9kaWZ5LmFkZF9hcmd1bWVudCgnLS13aWxkY2FyZCcsICctdycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J1VzZSB3aWxkY2FyZCBmb3IgdW52ZXJzaW9uZWQgYmJhcHBlbmQnKQorICAgIHBhcnNlcl9tb2RpZnkuYWRkX2FyZ3VtZW50KCctLWV4dHJhY3QnLCAnLXgnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdFeHRyYWN0IHNvdXJjZSBhcyB3ZWxsJykKKyAgICBncm91cCA9IHBhcnNlcl9tb2RpZnkuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXNhbWUtZGlyJywgJy1zJywgaGVscD0nQnVpbGQgaW4gc2FtZSBkaXJlY3RvcnkgYXMgc291cmNlJywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tbm8tc2FtZS1kaXInLCBoZWxwPSdGb3JjZSBidWlsZCBpbiBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeScsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgcGFyc2VyX21vZGlmeS5hZGRfYXJndW1lbnQoJy0tYnJhbmNoJywgJy1iJywgZGVmYXVsdD0iZGV2dG9vbCIsIGhlbHA9J05hbWUgZm9yIGRldmVsb3BtZW50IGJyYW5jaCB0byBjaGVja291dCAob25seSB3aGVuIHVzaW5nIC14KScpCisgICAgcGFyc2VyX21vZGlmeS5zZXRfZGVmYXVsdHMoZnVuYz1tb2RpZnkpCisKKyAgICBwYXJzZXJfZXh0cmFjdCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZXh0cmFjdCcsIGhlbHA9J0V4dHJhY3QgdGhlIHNvdXJjZSBmb3IgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdFeHRyYWN0cyB0aGUgc291cmNlIGZvciBhbiBleGlzdGluZyByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9leHRyYWN0LmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J05hbWUgZm9yIHJlY2lwZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgZm9yJykKKyAgICBwYXJzZXJfZXh0cmFjdC5hZGRfYXJndW1lbnQoJ3NyY3RyZWUnLCBoZWxwPSdQYXRoIHRvIHdoZXJlIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSB0cmVlJykKKyAgICBwYXJzZXJfZXh0cmFjdC5hZGRfYXJndW1lbnQoJy0tYnJhbmNoJywgJy1iJywgZGVmYXVsdD0iZGV2dG9vbCIsIGhlbHA9J05hbWUgZm9yIGRldmVsb3BtZW50IGJyYW5jaCB0byBjaGVja291dCcpCisgICAgcGFyc2VyX2V4dHJhY3QuYWRkX2FyZ3VtZW50KCctLWtlZXAtdGVtcCcsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0tlZXAgdGVtcG9yYXJ5IGRpcmVjdG9yeSAoZm9yIGRlYnVnZ2luZyknKQorICAgIHBhcnNlcl9leHRyYWN0LnNldF9kZWZhdWx0cyhmdW5jPWV4dHJhY3QpCisKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigndXBkYXRlLXJlY2lwZScsIGhlbHA9J0FwcGx5IGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgdHJlZSB0byByZWNpcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0FwcGxpZXMgY2hhbmdlcyBmcm9tIGV4dGVybmFsIHNvdXJjZSB0cmVlIHRvIGEgcmVjaXBlICh1cGRhdGluZy9hZGRpbmcvcmVtb3ZpbmcgcGF0Y2hlcyBhcyBuZWNlc3NhcnksIG9yIGJ5IHVwZGF0aW5nIFNSQ1JFViknKQorICAgIHBhcnNlcl91cGRhdGVfcmVjaXBlLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J05hbWUgb2YgcmVjaXBlIHRvIHVwZGF0ZScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLW1vZGUnLCAnLW0nLCBjaG9pY2VzPVsncGF0Y2gnLCAnc3JjcmV2JywgJ2F1dG8nXSwgZGVmYXVsdD0nYXV0bycsIGhlbHA9J1VwZGF0ZSBtb2RlICh3aGVyZSAlKG1ldGF2YXIpcyBpcyAlKGNob2ljZXMpczsgZGVmYXVsdCBpcyAlKGRlZmF1bHQpcyknLCBtZXRhdmFyPSdNT0RFJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJy0taW5pdGlhbC1yZXYnLCBoZWxwPSdTdGFydGluZyByZXZpc2lvbiBmb3IgcGF0Y2hlcycpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLWFwcGVuZCcsICctYScsIGhlbHA9J1dyaXRlIGNoYW5nZXMgdG8gYSBiYmFwcGVuZCBpbiB0aGUgc3BlY2lmaWVkIGxheWVyIGluc3RlYWQgb2YgdGhlIHJlY2lwZScsIG1ldGF2YXI9J0xBWUVSRElSJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5hZGRfYXJndW1lbnQoJy0td2lsZGNhcmQtdmVyc2lvbicsICctdycsIGhlbHA9J0luIGNvbmp1bmN0aW9uIHdpdGggLWEvLS1hcHBlbmQsIHVzZSBhIHdpbGRjYXJkIHRvIG1ha2UgdGhlIGJiYXBwZW5kIGFwcGx5IHRvIGFueSByZWNpcGUgdmVyc2lvbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX3VwZGF0ZV9yZWNpcGUuYWRkX2FyZ3VtZW50KCctLW5vLXJlbW92ZScsICctbicsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0RvblwndCByZW1vdmUgcGF0Y2hlcywgb25seSBhZGQgb3IgdXBkYXRlJykKKyAgICBwYXJzZXJfdXBkYXRlX3JlY2lwZS5zZXRfZGVmYXVsdHMoZnVuYz11cGRhdGVfcmVjaXBlKQorCisgICAgcGFyc2VyX3N0YXR1cyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignc3RhdHVzJywgaGVscD0nU2hvdyB3b3Jrc3BhY2Ugc3RhdHVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMaXN0cyByZWNpcGVzIGN1cnJlbnRseSBpbiB5b3VyIHdvcmtzcGFjZSBhbmQgdGhlIHBhdGhzIHRvIHRoZWlyIHJlc3BlY3RpdmUgZXh0ZXJuYWwgc291cmNlIHRyZWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikKKyAgICBwYXJzZXJfc3RhdHVzLnNldF9kZWZhdWx0cyhmdW5jPXN0YXR1cykKKworICAgIHBhcnNlcl9yZXNldCA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigncmVzZXQnLCBoZWxwPSdSZW1vdmUgYSByZWNpcGUgZnJvbSB5b3VyIHdvcmtzcGFjZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdSZW1vdmVzIHRoZSBzcGVjaWZpZWQgcmVjaXBlIGZyb20geW91ciB3b3Jrc3BhY2UgKHJlc2V0dGluZyBpdHMgc3RhdGUpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLkFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQorICAgIHBhcnNlcl9yZXNldC5hZGRfYXJndW1lbnQoJ3JlY2lwZW5hbWUnLCBuYXJncz0nPycsIGhlbHA9J1JlY2lwZSB0byByZXNldCcpCisgICAgcGFyc2VyX3Jlc2V0LmFkZF9hcmd1bWVudCgnLS1hbGwnLCAnLWEnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdSZXNldCBhbGwgcmVjaXBlcyAoY2xlYXIgd29ya3NwYWNlKScpCisgICAgcGFyc2VyX3Jlc2V0LmFkZF9hcmd1bWVudCgnLS1uby1jbGVhbicsICctbicsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9J0RvblwndCBjbGVhbiB0aGUgc3lzcm9vdCB0byByZW1vdmUgcmVjaXBlIG91dHB1dCcpCisgICAgcGFyc2VyX3Jlc2V0LnNldF9kZWZhdWx0cyhmdW5jPXJlc2V0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5IGIvc2NyaXB0cy9saWIvZGV2dG9vbC91cGdyYWRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NDQzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9kZXZ0b29sL3VwZ3JhZGUucHkKQEAgLTAsMCArMSwzNTQgQEAKKyMgRGV2ZWxvcG1lbnQgdG9vbCAtIHVwZ3JhZGUgY29tbWFuZCBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisiIiJEZXZ0b29sIHVwZ3JhZGUgcGx1Z2luIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBzY3JpcHR1dGlscworaW1wb3J0IGVycm5vCitpbXBvcnQgYmIKK2ltcG9ydCBvZS5yZWNpcGV1dGlscworZnJvbSBkZXZ0b29sIGltcG9ydCBzdGFuZGFyZAorZnJvbSBkZXZ0b29sIGltcG9ydCBleGVjX2J1aWxkX2Vudl9jb21tYW5kLCBzZXR1cF90aW5mb2lsLCBEZXZ0b29sRXJyb3IsIHBhcnNlX3JlY2lwZQorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZGV2dG9vbCcpCisKK2RlZiBwbHVnaW5faW5pdChwbHVnaW5saXN0KToKKyAgICAiIiJQbHVnaW4gaW5pdGlhbGl6YXRpb24iIiIKKyAgICBwYXNzCisKK2RlZiBfcnVuKGNtZCwgY3dkPScnKToKKyAgICBsb2dnZXIuZGVidWcoIlJ1bm5pbmcgY29tbWFuZCAlcz4gJXMiICUgKGN3ZCxjbWQpKQorICAgIHJldHVybiBiYi5wcm9jZXNzLnJ1bignJXMnICUgY21kLCBjd2Q9Y3dkKQorCitkZWYgX2dldF9zcmN0cmVlKHRtcGRpcik6CisgICAgc3JjdHJlZSA9IHRtcGRpcgorICAgIGRpcnMgPSBvcy5saXN0ZGlyKHRtcGRpcikKKyAgICBpZiBsZW4oZGlycykgPT0gMToKKyAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbih0bXBkaXIsIGRpcnNbMF0pCisgICAgcmV0dXJuIHNyY3RyZWUKKworZGVmIF9jb3B5X3NvdXJjZV9jb2RlKG9yaWcsIGRlc3QpOgorICAgIGZvciBwYXRoIGluIHN0YW5kYXJkLl9sc190cmVlKG9yaWcpOgorICAgICAgICBkZXN0X2RpciA9IG9zLnBhdGguam9pbihkZXN0LCBvcy5wYXRoLmRpcm5hbWUocGF0aCkpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0X2RpcikKKyAgICAgICAgZGVzdF9wYXRoID0gb3MucGF0aC5qb2luKGRlc3QsIHBhdGgpCisgICAgICAgIG9zLnJlbmFtZShvcy5wYXRoLmpvaW4ob3JpZywgcGF0aCksIGRlc3RfcGF0aCkKKworZGVmIF9nZXRfY2hlY2tzdW1zKHJmKToKKyAgICBpbXBvcnQgcmUKKyAgICBjaGVja3N1bXMgPSB7fQorICAgIHdpdGggb3BlbihyZikgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGZvciBjcyBpbiBbJ21kNXN1bScsICdzaGEyNTZzdW0nXToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl5TUkNfVVJJXFslc1xdLio9LipcIiguKilcIiIgJSBjcywgbGluZSkKKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bXNbY3NdID0gbS5ncm91cCgxKQorICAgIHJldHVybiBjaGVja3N1bXMKKworZGVmIF9yZXBsYWNlX2NoZWNrc3VtcyhyZiwgbWQ1LCBzaGEyNTYpOgorICAgIGlmIG5vdCBtZDUgYW5kIG5vdCBzaGEyNTY6CisgICAgICAgIHJldHVybgorICAgIGNoZWNrc3VtcyA9IHsnbWQ1c3VtJzptZDUsICdzaGEyNTZzdW0nOnNoYTI1Nn0KKyAgICB3aXRoIG9wZW4ocmYgKyAiLnRtcCIsICJ3KyIpIGFzIHRtcHJmOgorICAgICAgICB3aXRoIG9wZW4ocmYpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIG0gPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIGNzIGluIGNoZWNrc3Vtcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXlNSQ19VUklcWyVzXF0uKj0uKlwiKC4qKVwiIiAlIGNzLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW1zW2NzXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRjaGVjayA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdjaGVjayA9IGNoZWNrc3Vtc1tjc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKG9sZGNoZWNrLCBuZXdjaGVjaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdG1wcmYud3JpdGUobGluZSkKKyAgICBvcy5yZW5hbWUocmYgKyAiLnRtcCIsIHJmKQorCisKK2RlZiBfcmVtb3ZlX3BhdGNoX2RpcnMocmVjaXBlZm9sZGVyKToKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhyZWNpcGVmb2xkZXIpOgorICAgICAgICBmb3IgZCBpbiBkaXJzOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ocm9vdCxkKSkKKworZGVmIF9yZWNpcGVfY29udGFpbnMocmYsIHZhcik6CisgICAgaW1wb3J0IHJlCisgICAgZm91bmQgPSBGYWxzZQorICAgIHdpdGggb3BlbihyZikgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIHJlLm1hdGNoKCJeJXMuKj0uKiIgJSB2YXIsIGxpbmUpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIGZvdW5kCisKK2RlZiBfcmVuYW1lX3JlY2lwZV9kaXJzKG9sZHB2LCBuZXdwdiwgcGF0aCk6CisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgIGZvciBvbGRkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGlmIG9sZGRpci5maW5kKG9sZHB2KSAhPSAtMToKKyAgICAgICAgICAgICAgICBuZXdkaXIgPSBvbGRkaXIucmVwbGFjZShvbGRwdiwgbmV3cHYpCisgICAgICAgICAgICAgICAgaWYgb2xkZGlyICE9IG5ld2RpcjoKKyAgICAgICAgICAgICAgICAgICAgX3J1bignbXYgJXMgJXMnICUgKG9sZGRpciwgbmV3ZGlyKSkKKworZGVmIF9yZW5hbWVfcmVjaXBlX2ZpbGUoYnBuLCBvbGRwdiwgbmV3cHYsIHBhdGgpOgorICAgIG9sZHJlY2lwZSA9ICIlc18lcy5iYiIgJSAoYnBuLCBvbGRwdikKKyAgICBuZXdyZWNpcGUgPSAiJXNfJXMuYmIiICUgKGJwbiwgbmV3cHYpCisgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsIG9sZHJlY2lwZSkpOgorICAgICAgICBpZiBvbGRyZWNpcGUgIT0gbmV3cmVjaXBlOgorICAgICAgICAgICAgX3J1bignbXYgJXMgJXMnICUgKG9sZHJlY2lwZSwgbmV3cmVjaXBlKSwgY3dkPXBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcmVjaXBlID0gIiVzX2dpdC5iYiIgJSBicG4KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsIHJlY2lwZSkpOgorICAgICAgICAgICAgbmV3cmVjaXBlID0gcmVjaXBlCisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoIk9yaWdpbmFsIHJlY2lwZSBub3QgZm91bmQgb24gd29ya3NwYWNlIikKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIG5ld3JlY2lwZSkKKworZGVmIF9yZW5hbWVfcmVjaXBlX2ZpbGVzKGJwbiwgb2xkcHYsIG5ld3B2LCBwYXRoKToKKyAgICBfcmVuYW1lX3JlY2lwZV9kaXJzKG9sZHB2LCBuZXdwdiwgcGF0aCkKKyAgICByZXR1cm4gX3JlbmFtZV9yZWNpcGVfZmlsZShicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCkKKworZGVmIF91c2VfZXh0ZXJuYWxfYnVpbGQoc2FtZV9kaXIsIG5vX3NhbWVfZGlyLCBkKToKKyAgICBiX2lzX3MgPSBUcnVlCisgICAgaWYgbm9fc2FtZV9kaXI6CisgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzZXBhcmF0ZSBidWlsZCBkaXJlY3Rvcnkgc2luY2UgLS1uby1zYW1lLWRpciBzcGVjaWZpZWQnKQorICAgICAgICBiX2lzX3MgPSBGYWxzZQorICAgIGVsaWYgc2FtZV9kaXI6CisgICAgICAgIGxvZ2dlci5pbmZvKCd1c2luZyBzb3VyY2UgdHJlZSBhcyBidWlsZCBkaXJlY3Rvcnkgc2luY2UgLS1zYW1lLWRpciBzcGVjaWZpZWQnKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXV0b3Rvb2xzLWJyb2tlbnNlcCcsIGQpOgorICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIG9yaWdpbmFsIHJlY2lwZSBpbmhlcml0cyBhdXRvdG9vbHMtYnJva2Vuc2VwJykKKyAgICBlbGlmIGQuZ2V0VmFyKCdCJywgVHJ1ZSkgPT0gb3MucGF0aC5hYnNwYXRoKGQuZ2V0VmFyKCdTJywgVHJ1ZSkpOgorICAgICAgICBsb2dnZXIuaW5mbygndXNpbmcgc291cmNlIHRyZWUgYXMgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIHRoYXQgaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgcmVjaXBlJykKKyAgICBlbHNlOgorICAgICAgICBiX2lzX3MgPSBGYWxzZQorICAgIHJldHVybiBiX2lzX3MKKworZGVmIF93cml0ZV9hcHBlbmQocmMsIHNyY3RyZWUsIHNhbWVfZGlyLCBub19zYW1lX2RpciwgcmV2LCB3b3Jrc3BhY2UsIGQpOgorICAgICIiIldyaXRlcyBhbiBhcHBlbmQgZmlsZSIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyYyk6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigiYmJhcHBlbmQgbm90IGNyZWF0ZWQgYmVjYXVzZSAlcyBkb2VzIG5vdCBleGlzdCIgJSByYykKKworICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4od29ya3NwYWNlLCAnYXBwZW5kcycpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFwcGVuZHBhdGgpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoYXBwZW5kcGF0aCkKKworICAgIGJyZiA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5zcGxpdGV4dChyYylbMF0pICMgcmMgYmFzZW5hbWUKKworICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoc3JjdHJlZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsVHJ1ZSkKKyAgICBhZiA9IG9zLnBhdGguam9pbihhcHBlbmRwYXRoLCAnJXMuYmJhcHBlbmQnICUgYnJmKQorICAgIHdpdGggb3BlbihhZiwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG5cbicpCisgICAgICAgIGYud3JpdGUoJ2luaGVyaXQgZXh0ZXJuYWxzcmNcbicpCisgICAgICAgIGYud3JpdGUoKCcjIE5PVEU6IFdlIHVzZSBwbi0gb3ZlcnJpZGVzIGhlcmUgdG8gYXZvaWQgYWZmZWN0aW5nJworICAgICAgICAgICAgICAgICAnbXVsdGlwbGUgdmFyaWFudHMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHJlY2lwZSB1c2VzIEJCQ0xBU1NFWFRFTkRcbicpKQorICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19wbi0lcyA9ICIlcyJcbicgJSAocG4sIHNyY3RyZWUpKQorICAgICAgICBpZiBfdXNlX2V4dGVybmFsX2J1aWxkKHNhbWVfZGlyLCBub19zYW1lX2RpciwgZCk6CisgICAgICAgICAgICBmLndyaXRlKCdFWFRFUk5BTFNSQ19CVUlMRF9wbi0lcyA9ICIlcyJcbicgJSAocG4sIHNyY3RyZWUpKQorICAgICAgICBpZiByZXY6CisgICAgICAgICAgICBmLndyaXRlKCdcbiMgaW5pdGlhbF9yZXY6ICVzXG4nICUgcmV2KQorICAgIHJldHVybiBhZgorCitkZWYgX2NsZWFudXBfb25fZXJyb3IocmYsIHNyY3RyZWUpOgorICAgIHJmcCA9IG9zLnBhdGguc3BsaXQocmYpWzBdICMgcmVjaXBlIGZvbGRlcgorICAgIHJmcHAgPSBvcy5wYXRoLnNwbGl0KHJmcClbMF0gIyByZWNpcGVzIGZvbGRlcgorICAgIGlmIG9zLnBhdGguZXhpc3RzKHJmcCk6CisgICAgICAgIHNodXRpbC5ybXRyZWUoYikKKyAgICBpZiBub3QgbGVuKG9zLmxpc3RkaXIocmZwcCkpOgorICAgICAgICBvcy5ybWRpcihyZnBwKQorICAgIHNyY3RyZWUgPSBvcy5wYXRoLmFic3BhdGgoc3JjdHJlZSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmN0cmVlKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmN0cmVlKQorCitkZWYgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIHNyY3RyZWUpOgorICAgIGlmIHJmOgorICAgICAgICBjbGVhbnVwX29uX2Vycm9yKHJmLCBzcmN0cmVlKQorICAgIGxvZ2dlci5lcnJvcihlKQorICAgIHJhaXNlIERldnRvb2xFcnJvcihlKQorCitkZWYgX2dldF91cmkocmQpOgorICAgIHNyY3VyaXMgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpCisgICAgaWYgbm90IGxlbihzcmN1cmlzKToKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCdTUkNfVVJJIG5vdCBmb3VuZCBvbiByZWNpcGUnKQorICAgIHNyY3VyaSA9IHNyY3VyaXNbMF0gIyBpdCBpcyBhc3N1bWVkLCBVUkkgaXMgYXQgZmlyc3QgcG9zaXRpb24KKyAgICBzcmNyZXYgPSAnJHtBVVRPUkVWfScKKyAgICBpZiAnOi8vJyBpbiBzcmN1cmk6CisgICAgICAgICMgRmV0Y2ggYSBVUkwKKyAgICAgICAgcmV2X3JlID0gcmUuY29tcGlsZSgnO3Jldj0oW147XSspJykKKyAgICAgICAgcmVzID0gcmV2X3JlLnNlYXJjaChzcmN1cmkpCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIHNyY3JldiA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgc3JjdXJpID0gcmV2X3JlLnN1YignJywgc3JjdXJpKQorICAgIHJldHVybiBzcmN1cmksIHNyY3JldgorCitkZWYgX2V4dHJhY3RfbmV3X3NvdXJjZShuZXdwdiwgc3JjdHJlZSwgbm9fcGF0Y2gsIHNyY3JldiwgYnJhbmNoLCBrZWVwX3RlbXAsIHRpbmZvaWwsIHJkKToKKyAgICAiIiJFeHRyYWN0IHNvdXJjZXMgb2YgYSByZWNpcGUgd2l0aCBhIG5ldyB2ZXJzaW9uIiIiCisKKyAgICBkZWYgX19ydW4oY21kKToKKyAgICAgICAgIiIiU2ltcGxlIHdyYXBwZXIgd2hpY2ggY2FsbHMgX3J1biB3aXRoIHNyY3RyZWUgYXMgY3dkIiIiCisgICAgICAgIHJldHVybiBfcnVuKGNtZCwgc3JjdHJlZSkKKworICAgIGNyZCA9IHJkLmNyZWF0ZUNvcHkoKQorCisgICAgcHYgPSBjcmQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgY3JkLnNldFZhcignUFYnLCBuZXdwdikKKworICAgIHRtcHNyY3RyZWUgPSBOb25lCisgICAgdXJpLCByZXYgPSBfZ2V0X3VyaShjcmQpCisgICAgaWYgc3JjcmV2OgorICAgICAgICByZXYgPSBzcmNyZXYKKyAgICBpZiB1cmkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgJXMnICUgcmV2KQorICAgICAgICBfX3J1bignZ2l0IHRhZyAtZiBkZXZ0b29sLWJhc2UtbmV3JykKKyAgICAgICAgbWQ1ID0gTm9uZQorICAgICAgICBzaGEyNTYgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgX19ydW4oJ2dpdCBjaGVja291dCAtYiBkZXZ0b29sLSVzJyAlIG5ld3B2KQorCisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29sJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWQ1LCBzaGEyNTYgPSBzY3JpcHR1dGlscy5mZXRjaF91cmkodGluZm9pbC5jb25maWdfZGF0YSwgdXJpLCB0bXBkaXIsIHJldikKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoMi5GZXRjaEVycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IoZSkKKworICAgICAgICB0bXBzcmN0cmVlID0gX2dldF9zcmN0cmVlKHRtcGRpcikKKworICAgICAgICBzY3J0cmVlID0gb3MucGF0aC5hYnNwYXRoKHNyY3RyZWUpCisKKyAgICAgICAgX2NvcHlfc291cmNlX2NvZGUodG1wc3JjdHJlZSwgc3JjdHJlZSkKKworICAgICAgICAoc3Rkb3V0LF8pID0gX19ydW4oJ2dpdCBscy1maWxlcyAtLW1vZGlmaWVkIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCcpCisgICAgICAgIGZvciBmIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBfX3J1bignZ2l0IGFkZCAiJXMiJyAlIGYpCisKKyAgICAgICAgX19ydW4oJ2dpdCBjb21taXQgLXEgLW0gIkNvbW1pdCBvZiB1cHN0cmVhbSBjaGFuZ2VzIGF0IHZlcnNpb24gJXMiIC0tYWxsb3ctZW1wdHknICUgbmV3cHYpCisgICAgICAgIF9fcnVuKCdnaXQgdGFnIC1mIGRldnRvb2wtYmFzZS0lcycgJSBuZXdwdikKKworICAgIChzdGRvdXQsIF8pID0gX19ydW4oJ2dpdCByZXYtcGFyc2UgSEVBRCcpCisgICAgcmV2ID0gc3Rkb3V0LnJzdHJpcCgpCisKKyAgICBpZiBub19wYXRjaDoKKyAgICAgICAgcGF0Y2hlcyA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfcGF0Y2hlcyhjcmQpCisgICAgICAgIGlmIGxlbihwYXRjaGVzKToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdCeSB1c2VyIGNob2ljZSwgdGhlIGZvbGxvd2luZyBwYXRjaGVzIHdpbGwgTk9UIGJlIGFwcGxpZWQnKQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIiVzIiAlIG9zLnBhdGguYmFzZW5hbWUocGF0Y2gpKQorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9fcnVuKCdnaXQgY2hlY2tvdXQgZGV2dG9vbC1wYXRjaGVkIC1iICVzJyAlIGJyYW5jaCkKKyAgICAgICAgICAgIF9fcnVuKCdnaXQgcmViYXNlICVzJyAlIHJldikKKyAgICAgICAgICAgIGlmIHVyaS5zdGFydHN3aXRoKCdnaXQ6Ly8nKToKKyAgICAgICAgICAgICAgICBzdWZmaXggPSAnbmV3JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWZmaXggPSBuZXdwdgorICAgICAgICAgICAgX19ydW4oJ2dpdCB0YWcgLWYgZGV2dG9vbC1wYXRjaGVkLSVzJyAlIHN1ZmZpeCkKKyAgICAgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdDb21tYW5kIFwnJXNcJyBmYWlsZWQ6XG4lcycgJSAoZS5jb21tYW5kLCBlLnN0ZG91dCkpCisKKyAgICBpZiB0bXBzcmN0cmVlOgorICAgICAgICBpZiBrZWVwX3RlbXA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnUHJlc2VydmluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzJyAlIHRtcHNyY3RyZWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRtcHNyY3RyZWUpCisKKyAgICByZXR1cm4gKHJldiwgbWQ1LCBzaGEyNTYpCisKK2RlZiBfY3JlYXRlX25ld19yZWNpcGUobmV3cHYsIG1kNSwgc2hhMjU2LCB3b3Jrc3BhY2UsIHJkKToKKyAgICAiIiJDcmVhdGVzIHRoZSBuZXcgcmVjaXBlIHVuZGVyIHdvcmtzcGFjZSIiIgorICAgIGNyZCA9IHJkLmNyZWF0ZUNvcHkoKQorCisgICAgYnBuID0gY3JkLmdldFZhcignQlBOJywgVHJ1ZSkKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHdvcmtzcGFjZSwgJ3JlY2lwZXMnLCBicG4pCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHBhdGgpCisgICAgb2UucmVjaXBldXRpbHMuY29weV9yZWNpcGVfZmlsZXMoY3JkLCBwYXRoKQorCisgICAgb2xkcHYgPSBjcmQuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgaWYgbm90IG5ld3B2OgorICAgICAgICBuZXdwdiA9IG9sZHB2CisgICAgZnVsbHBhdGggPSBfcmVuYW1lX3JlY2lwZV9maWxlcyhicG4sIG9sZHB2LCBuZXdwdiwgcGF0aCkKKworICAgIGlmIF9yZWNpcGVfY29udGFpbnMoZnVsbHBhdGgsICdQVicpIGFuZCBuZXdwdiAhPSBvbGRwdjoKKyAgICAgICAgb2UucmVjaXBldXRpbHMucGF0Y2hfcmVjaXBlKGQsIGZ1bGxwYXRoLCB7J1BWJzpuZXdwdn0pCisKKyAgICBpZiBtZDUgYW5kIHNoYTI1NjoKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCBvZS5yZWNpcGV1dGlscy5wYXRjaF9yZWNpcGUgY2Fubm90IHVwZGF0ZSBmbGFncy4KKyAgICAgICAgIyBvbmNlIHRoZSBsYXR0ZXIgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZCwgd2Ugc2hvdWxkIGNhbGwgcGF0Y2hfcmVjaXBlCisgICAgICAgICMgaW5zdGVhZCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCisgICAgICAgIF9yZXBsYWNlX2NoZWNrc3VtcyhmdWxscGF0aCwgbWQ1LCBzaGEyNTYpCisKKyAgICByZXR1cm4gZnVsbHBhdGgKKworZGVmIHVwZ3JhZGUoYXJncywgY29uZmlnLCBiYXNlcGF0aCwgd29ya3NwYWNlKToKKyAgICAiIiJFbnRyeSBwb2ludCBmb3IgdGhlIGRldnRvb2wgJ3VwZ3JhZGUnIHN1YmNvbW1hbmQiIiIKKworICAgIGlmIGFyZ3MucmVjaXBlbmFtZSBpbiB3b3Jrc3BhY2U6CisgICAgICAgIHJhaXNlIERldnRvb2xFcnJvcigicmVjaXBlICVzIGlzIGFscmVhZHkgaW4geW91ciB3b3Jrc3BhY2UiICUgYXJncy5yZWNpcGVuYW1lKQorICAgIGlmIG5vdCBhcmdzLnZlcnNpb24gYW5kIG5vdCBhcmdzLnNyY3JldjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJZb3UgbXVzdCBwcm92aWRlIGEgdmVyc2lvbiB1c2luZyB0aGUgLS12ZXJzaW9uLy1WIG9wdGlvbiwgb3IgZm9yIHJlY2lwZXMgdGhhdCBmZXRjaCBmcm9tIGFuIFNDTSBzdWNoIGFzIGdpdCwgdGhlIC0tc3JjcmV2Ly1TIG9wdGlvbiIpCisKKyAgICByZWFzb24gPSBvZS5yZWNpcGV1dGlscy52YWxpZGF0ZV9wbihhcmdzLnJlY2lwZW5hbWUpCisgICAgaWYgcmVhc29uOgorICAgICAgICByYWlzZSBEZXZ0b29sRXJyb3IocmVhc29uKQorCisgICAgdGluZm9pbCA9IHNldHVwX3RpbmZvaWwoKQorCisgICAgcmQgPSBwYXJzZV9yZWNpcGUoY29uZmlnLCB0aW5mb2lsLCBhcmdzLnJlY2lwZW5hbWUsIFRydWUpCisgICAgaWYgbm90IHJkOgorICAgICAgICByZXR1cm4gMQorCisgICAgc3RhbmRhcmQuX2NoZWNrX2NvbXBhdGlibGVfcmVjaXBlKGFyZ3MucmVjaXBlbmFtZSwgcmQpCisgICAgaWYgcmQuZ2V0VmFyKCdQVicsIFRydWUpID09IGFyZ3MudmVyc2lvbiBhbmQgcmQuZ2V0VmFyKCdTUkNSRVYnLCBUcnVlKSA9PSBhcmdzLnNyY3JldjoKKyAgICAgICAgcmFpc2UgRGV2dG9vbEVycm9yKCJDdXJyZW50IGFuZCB1cGdyYWRlIHZlcnNpb25zIGFyZSB0aGUgc2FtZSB2ZXJzaW9uIiAlIHZlcnNpb24pCisKKyAgICByZiA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJldjEgPSBzdGFuZGFyZC5fZXh0cmFjdF9zb3VyY2UoYXJncy5zcmN0cmVlLCBGYWxzZSwgJ2RldnRvb2wtb3JpZycsIHJkKQorICAgICAgICByZXYyLCBtZDUsIHNoYTI1NiA9IF9leHRyYWN0X25ld19zb3VyY2UoYXJncy52ZXJzaW9uLCBhcmdzLnNyY3RyZWUsIGFyZ3Mubm9fcGF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNyY3JldiwgYXJncy5icmFuY2gsIGFyZ3Mua2VlcF90ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGluZm9pbCwgcmQpCisgICAgICAgIHJmID0gX2NyZWF0ZV9uZXdfcmVjaXBlKGFyZ3MudmVyc2lvbiwgbWQ1LCBzaGEyNTYsIGNvbmZpZy53b3Jrc3BhY2VfcGF0aCwgcmQpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZToKKyAgICAgICAgX3VwZ3JhZGVfZXJyb3IoZSwgcmYsIGFyZ3Muc3JjdHJlZSkKKyAgICBleGNlcHQgRGV2dG9vbEVycm9yIGFzIGU6CisgICAgICAgIF91cGdyYWRlX2Vycm9yKGUsIHJmLCBhcmdzLnNyY3RyZWUpCisgICAgc3RhbmRhcmQuX2FkZF9tZDUoY29uZmlnLCBhcmdzLnJlY2lwZW5hbWUsIG9zLnBhdGguZGlybmFtZShyZikpCisKKyAgICBhZiA9IF93cml0ZV9hcHBlbmQocmYsIGFyZ3Muc3JjdHJlZSwgYXJncy5zYW1lX2RpciwgYXJncy5ub19zYW1lX2RpciwgcmV2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLndvcmtzcGFjZV9wYXRoLCByZCkKKyAgICBzdGFuZGFyZC5fYWRkX21kNShjb25maWcsIGFyZ3MucmVjaXBlbmFtZSwgYWYpCisgICAgbG9nZ2VyLmluZm8oJ1VwZ3JhZGVkIHNvdXJjZSBleHRyYWN0ZWQgdG8gJXMnICUgYXJncy5zcmN0cmVlKQorICAgIHJldHVybiAwCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhzdWJwYXJzZXJzLCBjb250ZXh0KToKKyAgICAiIiJSZWdpc3RlciBkZXZ0b29sIHN1YmNvbW1hbmRzIGZyb20gdGhpcyBwbHVnaW4iIiIKKyAgICBwYXJzZXJfdXBncmFkZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigndXBncmFkZScsIGhlbHA9J1VwZ3JhZGUgYW4gZXhpc3RpbmcgcmVjaXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nVXBncmFkZXMgYW4gZXhpc3RpbmcgcmVjaXBlIHRvIGEgbmV3IHVwc3RyZWFtIHZlcnNpb24nKQorICAgIHBhcnNlcl91cGdyYWRlLmFkZF9hcmd1bWVudCgncmVjaXBlbmFtZScsIGhlbHA9J05hbWUgZm9yIHJlY2lwZSB0byBleHRyYWN0IHRoZSBzb3VyY2UgZm9yJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJ3NyY3RyZWUnLCBoZWxwPSdQYXRoIHRvIHdoZXJlIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSB0cmVlJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tdmVyc2lvbicsICctVicsIGhlbHA9J1ZlcnNpb24gdG8gdXBncmFkZSB0byAoUFYpJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tc3JjcmV2JywgJy1TJywgaGVscD0nU291cmNlIHJldmlzaW9uIHRvIHVwZ3JhZGUgdG8gKGlmIGZldGNoaW5nIGZyb20gYW4gU0NNIHN1Y2ggYXMgZ2l0KScpCisgICAgcGFyc2VyX3VwZ3JhZGUuYWRkX2FyZ3VtZW50KCctLWJyYW5jaCcsICctYicsIGRlZmF1bHQ9ImRldnRvb2wiLCBoZWxwPSdOYW1lIGZvciBuZXcgZGV2ZWxvcG1lbnQgYnJhbmNoIHRvIGNoZWNrb3V0IChkZWZhdWx0ICIlKGRlZmF1bHQpcyIpJykKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0tbm8tcGF0Y2gnLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSdEbyBub3QgYXBwbHkgcGF0Y2hlcyBmcm9tIHRoZSByZWNpcGUgdG8gdGhlIG5ldyBzb3VyY2UgY29kZScpCisgICAgZ3JvdXAgPSBwYXJzZXJfdXBncmFkZS5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc2FtZS1kaXInLCAnLXMnLCBoZWxwPSdCdWlsZCBpbiBzYW1lIGRpcmVjdG9yeSBhcyBzb3VyY2UnLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1uby1zYW1lLWRpcicsIGhlbHA9J0ZvcmNlIGJ1aWxkIGluIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5JywgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICBwYXJzZXJfdXBncmFkZS5hZGRfYXJndW1lbnQoJy0ta2VlcC10ZW1wJywgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0nS2VlcCB0ZW1wb3JhcnkgZGlyZWN0b3J5IChmb3IgZGVidWdnaW5nKScpCisgICAgcGFyc2VyX3VwZ3JhZGUuc2V0X2RlZmF1bHRzKGZ1bmM9dXBncmFkZSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvX19pbml0X18ucHkgYi9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weSBiL3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvYXBwZW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTQxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2FwcGVuZC5weQpAQCAtMCwwICsxLDQ2OSBAQAorIyBSZWNpcGUgY3JlYXRpb24gdG9vbCAtIGFwcGVuZCBwbHVnaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0YXQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzY3JpcHR1dGlscworaW1wb3J0IGVycm5vCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCisKK3RpbmZvaWwgPSBOb25lCisKK2RlZiB0aW5mb2lsX2luaXQoaW5zdGFuY2UpOgorICAgIGdsb2JhbCB0aW5mb2lsCisgICAgdGluZm9pbCA9IGluc3RhbmNlCisKKworIyBGSVhNRSBndWVzc2luZyB3aGVuIHdlIGRvbid0IGhhdmUgcGtnZGF0YT8KKyMgRklYTUUgbW9kZSB0byBjcmVhdGUgcGF0Y2ggcmF0aGVyIHRoYW4gZGlyZWN0bHkgc3Vic3RpdHV0ZQorCitjbGFzcyBJbnZhbGlkVGFyZ2V0RmlsZUVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitkZWYgZmluZF90YXJnZXRfZmlsZSh0YXJnZXRwYXRoLCBkLCBwa2dsaXN0PU5vbmUpOgorICAgICIiIkZpbmQgdGhlIHJlY2lwZSBpbnN0YWxsaW5nIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHBhdGgsIG9wdGlvbmFsbHkgbGltaXRlZCB0byBhIHNlbGVjdCBsaXN0IG9mIHBhY2thZ2VzIiIiCisgICAgaW1wb3J0IGpzb24KKworICAgIHBrZ2RhdGFfZGlyID0gZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKworICAgICMgVGhlIG1peCBiZXR3ZWVuIC9ldGMgYW5kICR7c3lzY29uZmRpcn0gaGVyZSBtYXkgbG9vayBvZGQsIGJ1dCBpdCBpcyBqdXN0CisgICAgIyBiZWluZyBjb25zaXN0ZW50IHdpdGggdXNhZ2UgZWxzZXdoZXJlCisgICAgaW52YWxpZHRhcmdldHMgPSB7JyR7c3lzY29uZmRpcn0vdmVyc2lvbic6ICcke3N5c2NvbmZkaXJ9L3ZlcnNpb24gaXMgd3JpdHRlbiBvdXQgYXQgaW1hZ2UgY3JlYXRpb24gdGltZScsCisgICAgICAgICAgICAgICAgICAgICAgJy9ldGMvdGltZXN0YW1wJzogJy9ldGMvdGltZXN0YW1wIGlzIHdyaXR0ZW4gb3V0IGF0IGltYWdlIGNyZWF0aW9uIHRpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICcvZGV2LyonOiAnL2RldiBpcyBoYW5kbGVkIGJ5IHVkZXYgKG9yIGVxdWl2YWxlbnQpIGFuZCB0aGUga2VybmVsIChkZXZ0bXBmcyknLAorICAgICAgICAgICAgICAgICAgICAgICcvZXRjL3Bhc3N3ZCc6ICcvZXRjL3Bhc3N3ZCBzaG91bGQgYmUgbWFuYWdlZCB0aHJvdWdoIHRoZSB1c2VyYWRkIGFuZCBleHRyYXVzZXJzIGNsYXNzZXMnLAorICAgICAgICAgICAgICAgICAgICAgICcvZXRjL2dyb3VwJzogJy9ldGMvZ3JvdXAgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy9zaGFkb3cnOiAnL2V0Yy9zaGFkb3cgc2hvdWxkIGJlIG1hbmFnZWQgdGhyb3VnaCB0aGUgdXNlcmFkZCBhbmQgZXh0cmF1c2VycyBjbGFzc2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAnL2V0Yy9nc2hhZG93JzogJy9ldGMvZ3NoYWRvdyBzaG91bGQgYmUgbWFuYWdlZCB0aHJvdWdoIHRoZSB1c2VyYWRkIGFuZCBleHRyYXVzZXJzIGNsYXNzZXMnLAorICAgICAgICAgICAgICAgICAgICAgICcke3N5c2NvbmZkaXJ9L2hvc3RuYW1lJzogJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUgY29udGVudHMgc2hvdWxkIGJlIHNldCBieSBzZXR0aW5nIGhvc3RuYW1lX3BuLWJhc2UtZmlsZXMgPSAidmFsdWUiIGluIGNvbmZpZ3VyYXRpb24nLH0KKworICAgIGZvciBwdGhzcGVjLCBtZXNzYWdlIGluIGludmFsaWR0YXJnZXRzLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKHRhcmdldHBhdGgsIGQuZXhwYW5kKHB0aHNwZWMpKToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRUYXJnZXRGaWxlRXJyb3IoZC5leHBhbmQobWVzc2FnZSkpCisKKyAgICB0YXJnZXRwYXRoX3JlID0gcmUuY29tcGlsZShyJ1xzKyhcJEQpPyVzKFxzfCQpJyAlIHRhcmdldHBhdGgpCisKKyAgICByZWNpcGVzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJykpOgorICAgICAgICBpZiBwa2dsaXN0OgorICAgICAgICAgICAgZmlsZWxpc3QgPSBwa2dsaXN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbGlzdCA9IGZpbGVzCisgICAgICAgIGZvciBmbiBpbiBmaWxlbGlzdDoKKyAgICAgICAgICAgIHBrZ2RhdGFmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgaWYgcGtnbGlzdCBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd2l0aCBvcGVuKHBrZ2RhdGFmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgcG4gPSAnJworICAgICAgICAgICAgICAgICMgVGhpcyBkb2VzIGFzc3VtZSB0aGF0IFBOIGNvbWVzIGJlZm9yZSBvdGhlciB2YWx1ZXMsIGJ1dCB0aGF0J3MgYSBmYWlybHkgc2FmZSBhc3N1bXB0aW9uCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdQTjonKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBuID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0ZJTEVTX0lORk86Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgZGljdHZhbCA9IGpzb24ubG9hZHModmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZ1bGxwdGggaW4gZGljdHZhbC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmdWxscHRoLCB0YXJnZXRwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlc1t0YXJnZXRwYXRoXS5hcHBlbmQocG4pCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdwa2dfcHJlaW5zdF8nKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ3BrZ19wb3N0aW5zdF8nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpLmRlY29kZSgnc3RyaW5nX2VzY2FwZScpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAndXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgJXMgJyAlIHRhcmdldHBhdGggaW4gc2NyaXB0dmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2lwZXNbdGFyZ2V0cGF0aF0uYXBwZW5kKCc/JXMnICUgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHRhcmdldHBhdGhfcmUuc2VhcmNoKHNjcmlwdHZhbCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlc1t0YXJnZXRwYXRoXS5hcHBlbmQoJyElcycgJSBwbikKKyAgICByZXR1cm4gcmVjaXBlcworCitkZWYgX2dldF9yZWNpcGVfZmlsZShjb29rZXIsIHBuKToKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICByZWNpcGVmaWxlID0gb2UucmVjaXBldXRpbHMucG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgIHNraXByZWFzb25zID0gb2UucmVjaXBldXRpbHMuZ2V0X3VuYXZhaWxhYmxlX3JlYXNvbnMoY29va2VyLCBwbikKKyAgICAgICAgaWYgc2tpcHJlYXNvbnM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1xuJy5qb2luKHNraXByZWFzb25zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICVzIiAlIHBuKQorICAgIHJldHVybiByZWNpcGVmaWxlCisKK2RlZiBfcGFyc2VfcmVjaXBlKHBuLCB0aW5mb2lsKToKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICByZWNpcGVmaWxlID0gX2dldF9yZWNpcGVfZmlsZSh0aW5mb2lsLmNvb2tlciwgcG4pCisgICAgaWYgbm90IHJlY2lwZWZpbGU6CisgICAgICAgICMgRXJyb3IgYWxyZWFkeSBsb2dnZWQKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBhcHBlbmRfZmlsZXMgPSB0aW5mb2lsLmNvb2tlci5jb2xsZWN0aW9uLmdldF9maWxlX2FwcGVuZHMocmVjaXBlZmlsZSkKKyAgICByZCA9IG9lLnJlY2lwZXV0aWxzLnBhcnNlX3JlY2lwZShyZWNpcGVmaWxlLCBhcHBlbmRfZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhKQorICAgIHJldHVybiByZAorCitkZWYgZGV0ZXJtaW5lX2ZpbGVfc291cmNlKHRhcmdldHBhdGgsIHJkKToKKyAgICAiIiJBc3N1bWluZyB3ZSBrbm93IGEgZmlsZSBjYW1lIGZyb20gYSBzcGVjaWZpYyByZWNpcGUsIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSBpdCBjYW1lIGZyb20iIiIKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgICMgU2VlIGlmIGl0J3MgaW4gZG9faW5zdGFsbCBmb3IgdGhlIHJlY2lwZQorICAgIHdvcmtkaXIgPSByZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHNyY191cmkgPSByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgIHNyY2ZpbGUgPSAnJworICAgIG1vZHBhdGNoZXMgPSBbXQorICAgIGVsZW1lbnRzID0gY2hlY2tfZG9faW5zdGFsbChyZCwgdGFyZ2V0cGF0aCkKKyAgICBpZiBlbGVtZW50czoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdkb19pbnN0YWxsIGxpbmU6XG4lcycgJSAnICcuam9pbihlbGVtZW50cykpCisgICAgICAgIHNyY3BhdGggPSBnZXRfc291cmNlX3BhdGgoZWxlbWVudHMpCisgICAgICAgIGxvZ2dlci5kZWJ1Zygnc291cmNlIHBhdGg6ICVzJyAlIHNyY3BhdGgpCisgICAgICAgIGlmIG5vdCBzcmNwYXRoLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgICAgICAgICMgSGFuZGxlIG5vbi1hYnNvbHV0ZSBwYXRoCisgICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihyZC5nZXRWYXJGbGFnKCdkb19pbnN0YWxsJywgJ2RpcnMnLCBUcnVlKS5zcGxpdCgpWy0xXSwgc3JjcGF0aCkpCisgICAgICAgIGlmIHNyY3BhdGguc3RhcnRzd2l0aCh3b3JrZGlyKToKKyAgICAgICAgICAgICMgT0ssIG5vdyB3ZSBoYXZlIHRoZSBzb3VyY2UgZmlsZSBuYW1lLCBsb29rIGZvciBpdCBpbiBTUkNfVVJJCisgICAgICAgICAgICB3b3JrZGlyZmlsZSA9IG9zLnBhdGgucmVscGF0aChzcmNwYXRoLCB3b3JrZGlyKQorICAgICAgICAgICAgIyBGSVhNRSB0aGlzIGlzIHdoZXJlIHdlIG91Z2h0IHRvIGhhdmUgc29tZSBjb2RlIGluIHRoZSBmZXRjaGVyLCBiZWNhdXNlIHRoaXMgaXMgbmFpdmUKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHNyY191cmkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBsb2NhbHBhdGggPSBiYi5mZXRjaDIubG9jYWxwYXRoKGl0ZW0sIHJkKQorICAgICAgICAgICAgICAgICMgU291cmNlIHBhdGggc3BlY2lmaWVkIGluIGRvX2luc3RhbGwgbWlnaHQgYmUgYSBnbG9iCisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKG9zLnBhdGguYmFzZW5hbWUobG9jYWxwYXRoKSwgd29ya2RpcmZpbGUpOgorICAgICAgICAgICAgICAgICAgICBzcmNmaWxlID0gJ2ZpbGU6Ly8lcycgJSBsb2NhbHBhdGgKKyAgICAgICAgICAgICAgICBlbGlmICcvJyBpbiB3b3JrZGlyZmlsZToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXRlbSA9PSAnZmlsZTovLyVzJyAlIHdvcmtkaXJmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjZmlsZSA9ICdmaWxlOi8vJXMnICUgbG9jYWxwYXRoCisKKyAgICAgICAgIyBDaGVjayBwYXRjaGVzCisgICAgICAgIHNyY3BhdGNoZXMgPSBbXQorICAgICAgICBwYXRjaGVkZmlsZXMgPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3BhdGNoZWRfZmlsZXMocmQpCisgICAgICAgIGZvciBwYXRjaCwgZmlsZWxpc3QgaW4gcGF0Y2hlZGZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIGZpbGVpdGVtWzBdID09IHNyY3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHNyY3BhdGNoZXMuYXBwZW5kKChwYXRjaCwgZmlsZWl0ZW1bMV0pKQorICAgICAgICBpZiBzcmNwYXRjaGVzOgorICAgICAgICAgICAgYWRkcGF0Y2ggPSBOb25lCisgICAgICAgICAgICBmb3IgcGF0Y2ggaW4gc3JjcGF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBwYXRjaFsxXSA9PSAnQSc6CisgICAgICAgICAgICAgICAgICAgIGFkZHBhdGNoID0gcGF0Y2hbMF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2RwYXRjaGVzLmFwcGVuZChwYXRjaFswXSkKKyAgICAgICAgICAgIGlmIGFkZHBhdGNoOgorICAgICAgICAgICAgICAgIHNyY2ZpbGUgPSAncGF0Y2g6Ly8lcycgJSBhZGRwYXRjaAorCisgICAgcmV0dXJuIChzcmNmaWxlLCBlbGVtZW50cywgbW9kcGF0Y2hlcykKKworZGVmIGdldF9zb3VyY2VfcGF0aChjbWRlbGVtZW50cyk6CisgICAgIiIiRmluZCB0aGUgc291cmNlIHBhdGggc3BlY2lmaWVkIHdpdGhpbiBhIGNvbW1hbmQiIiIKKyAgICBjb21tYW5kID0gY21kZWxlbWVudHNbMF0KKyAgICBpZiBjb21tYW5kIGluIFsnaW5zdGFsbCcsICdjcCddOgorICAgICAgICBoZWxwdGV4dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCdMQ19BTEw9QyAlcyAtLWhlbHAnICUgY29tbWFuZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgYXJnb3B0cyA9ICcnCisgICAgICAgIGFyZ29wdF9saW5lX3JlID0gcmUuY29tcGlsZSgnXi0oW2EtekEtWjAtOV0pLCAtLVthLXotXSs9JykKKyAgICAgICAgZm9yIGxpbmUgaW4gaGVscHRleHQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgIHJlcyA9IGFyZ29wdF9saW5lX3JlLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgaWYgcmVzOgorICAgICAgICAgICAgICAgIGFyZ29wdHMgKz0gcmVzLmdyb3VwKDEpCisgICAgICAgIGlmIG5vdCBhcmdvcHRzOgorICAgICAgICAgICAgIyBGYWxsYmFjaworICAgICAgICAgICAgaWYgY29tbWFuZCA9PSAnaW5zdGFsbCc6CisgICAgICAgICAgICAgICAgYXJnb3B0cyA9ICdnbW9TdCcKKyAgICAgICAgICAgIGVsaWYgY29tbWFuZCA9PSAnY3AnOgorICAgICAgICAgICAgICAgIGFyZ29wdHMgPSAndCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdObyBmYWxsYmFjayBhcmd1bWVudHMgZm9yIGNvbW1hbmQgJXMnICUgY29tbWFuZCkKKworICAgICAgICBza2lwbmV4dCA9IEZhbHNlCisgICAgICAgIGZvciBlbGVtIGluIGNtZGVsZW1lbnRzWzE6LTFdOgorICAgICAgICAgICAgaWYgZWxlbS5zdGFydHN3aXRoKCctJyk6CisgICAgICAgICAgICAgICAgaWYgbGVuKGVsZW0pID4gMSBhbmQgZWxlbVsxXSBpbiBhcmdvcHRzOgorICAgICAgICAgICAgICAgICAgICBza2lwbmV4dCA9IFRydWUKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2tpcG5leHQ6CisgICAgICAgICAgICAgICAgc2tpcG5leHQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXR1cm4gZWxlbQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignZ2V0X3NvdXJjZV9wYXRoOiBubyBoYW5kbGluZyBmb3IgY29tbWFuZCAiJXMiJykKKworZGVmIGdldF9mdW5jX2RlcHMoZnVuYywgZCk6CisgICAgIiIiRmluZCB0aGUgZnVuY3Rpb24gZGVwZW5kZW5jaWVzIG9mIGEgc2hlbGwgZnVuY3Rpb24iIiIKKyAgICBkZXBzID0gYmIuY29kZXBhcnNlci5TaGVsbFBhcnNlcihmdW5jLCBsb2dnZXIpLnBhcnNlX3NoZWxsKGQuZ2V0VmFyKGZ1bmMsIFRydWUpKQorICAgIGRlcHMgfD0gc2V0KChkLmdldFZhckZsYWcoZnVuYywgInZhcmRlcHMiLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBmdW5jZGVwcyA9IFtdCisgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoZGVwLCAnZnVuYycsIFRydWUpOgorICAgICAgICAgICAgZnVuY2RlcHMuYXBwZW5kKGRlcCkKKyAgICByZXR1cm4gZnVuY2RlcHMKKworZGVmIGNoZWNrX2RvX2luc3RhbGwocmQsIHRhcmdldHBhdGgpOgorICAgICIiIkxvb2sgYXQgZG9faW5zdGFsbCBmb3IgYSBjb21tYW5kIHRoYXQgaW5zdGFsbHMvY29waWVzIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IHBhdGgiIiIKKyAgICBpbnN0cGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocmQuZ2V0VmFyKCdEJywgVHJ1ZSksIHRhcmdldHBhdGgubHN0cmlwKCcvJykpKQorICAgIGRvX2luc3RhbGwgPSByZC5nZXRWYXIoJ2RvX2luc3RhbGwnLCBUcnVlKQorICAgICMgSGFuZGxlIHdoZXJlIGRvX2luc3RhbGwgY2FsbHMgb3RoZXIgZnVuY3Rpb25zIChzb21ld2hhdCBjcnVkZWx5LCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMgcHVycG9zZSkKKyAgICBkZXBzID0gZ2V0X2Z1bmNfZGVwcygnZG9faW5zdGFsbCcsIHJkKQorICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgZG9faW5zdGFsbCA9IGRvX2luc3RhbGwucmVwbGFjZShkZXAsIHJkLmdldFZhcihkZXAsIFRydWUpKQorCisgICAgIyBMb29rIGJhY2t3YXJkcyB0aHJvdWdoIGRvX2luc3RhbGwgYXMgd2Ugd2FudCB0byBjYXRjaCB3aGVyZSBhIGxhdGVyIGxpbmUgKHBlcmhhcHMKKyAgICAjIGZyb20gYSBiYmFwcGVuZCkgaXMgd3JpdGluZyBvdmVyIHRoZSB0b3AKKyAgICBmb3IgbGluZSBpbiByZXZlcnNlZChkb19pbnN0YWxsLnNwbGl0bGluZXMoKSk6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCgnaW5zdGFsbCAnKSBhbmQgJyAtbScgaW4gbGluZSkgb3IgbGluZS5zdGFydHN3aXRoKCdjcCAnKToKKyAgICAgICAgICAgIGVsZW1lbnRzID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguYWJzcGF0aChlbGVtZW50c1stMV0pCisgICAgICAgICAgICBpZiBkZXN0cGF0aCA9PSBpbnN0cGF0aDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMKKyAgICAgICAgICAgIGVsaWYgZGVzdHBhdGgucnN0cmlwKCcvJykgPT0gb3MucGF0aC5kaXJuYW1lKGluc3RwYXRoKToKKyAgICAgICAgICAgICAgICAjIEZJWE1FIHRoaXMgZG9lc24ndCB0YWtlIHJlY3Vyc2l2ZSBjb3B5IGludG8gYWNjb3VudDsgdW5zdXJlIGlmIGl0J3MgcHJhY3RpY2FsIHRvIGRvIHNvCisgICAgICAgICAgICAgICAgc3JjcGF0aCA9IGdldF9zb3VyY2VfcGF0aChlbGVtZW50cykKKyAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKG9zLnBhdGguYmFzZW5hbWUoaW5zdHBhdGgpLCBvcy5wYXRoLmJhc2VuYW1lKHNyY3BhdGgpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgYXBwZW5kZmlsZShhcmdzKToKKyAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKworICAgIHN0ZG91dCA9ICcnCisgICAgdHJ5OgorICAgICAgICAoc3Rkb3V0LCBfKSA9IGJiLnByb2Nlc3MucnVuKCdMQU5HPUMgZmlsZSAtYiAlcycgJSBhcmdzLm5ld2ZpbGUsIHNoZWxsPVRydWUpCisgICAgICAgIGlmICdjYW5ub3Qgb3BlbicgaW4gc3Rkb3V0OgorICAgICAgICAgICAgcmFpc2UgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvcihzdGRvdXQpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuRXhlY3V0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICBsb2dnZXIuZGVidWcoJ2ZpbGUgY29tbWFuZCByZXR1cm5lZCBlcnJvcjogJXMnICUgZXJyKQorICAgICAgICBzdGRvdXQgPSAnJworICAgIGlmIHN0ZG91dDoKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdmaWxlIGNvbW1hbmQgb3V0cHV0OiAlcycgJSBzdGRvdXQucnN0cmlwKCkpCisgICAgICAgIGlmICgnZXhlY3V0YWJsZScgaW4gc3Rkb3V0IGFuZCBub3QgJ3NoZWxsIHNjcmlwdCcgaW4gc3Rkb3V0KSBvciAnc2hhcmVkIG9iamVjdCcgaW4gc3Rkb3V0OgorICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ1RoaXMgZmlsZSBsb29rcyBsaWtlIGl0IGlzIGEgYmluYXJ5IG9yIG90aGVyd2lzZSB0aGUgb3V0cHV0IG9mIGNvbXBpbGF0aW9uLiBJZiBpdCBpcywgeW91IHNob3VsZCBjb25zaWRlciBidWlsZGluZyBpdCBwcm9wZXJseSBpbnN0ZWFkIG9mIHN1YnN0aXR1dGluZyBhIGJpbmFyeSBmaWxlIGRpcmVjdGx5LicpCisKKyAgICBpZiBhcmdzLnJlY2lwZToKKyAgICAgICAgcmVjaXBlcyA9IHthcmdzLnRhcmdldHBhdGg6IFthcmdzLnJlY2lwZV0sfQorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlY2lwZXMgPSBmaW5kX3RhcmdldF9maWxlKGFyZ3MudGFyZ2V0cGF0aCwgdGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgZXhjZXB0IEludmFsaWRUYXJnZXRGaWxlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignJXMgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sOiAlcycgJSAoYXJncy50YXJnZXRwYXRoLCBlKSkKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIG5vdCByZWNpcGVzOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAlcyAtIHRoaXMgbWF5IGJlIGJlY2F1c2UgdGhlIHJlY2lwZSBwYWNrYWdpbmcgaXQgaGFzIG5vdCBiZWVuIGJ1aWx0IHlldCcgJSBhcmdzLnRhcmdldHBhdGgpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgYWx0ZXJuYXRpdmVfcG5zID0gW10KKyAgICBwb3N0aW5zdF9wbnMgPSBbXQorCisgICAgc2VsZWN0cG4gPSBOb25lCisgICAgZm9yIHRhcmdldHBhdGgsIHBubGlzdCBpbiByZWNpcGVzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgcG4gaW4gcG5saXN0OgorICAgICAgICAgICAgaWYgcG4uc3RhcnRzd2l0aCgnPycpOgorICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlX3Bucy5hcHBlbmQocG5bMTpdKQorICAgICAgICAgICAgZWxpZiBwbi5zdGFydHN3aXRoKCchJyk6CisgICAgICAgICAgICAgICAgcG9zdGluc3RfcG5zLmFwcGVuZChwblsxOl0pCisgICAgICAgICAgICBlbGlmIHNlbGVjdHBuOgorICAgICAgICAgICAgICAgICMgaGl0IGhlcmUgd2l0aCBtdWx0aWxpYnMKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxlY3RwbiA9IHBuCisKKyAgICBpZiBub3Qgc2VsZWN0cG4gYW5kIGxlbihhbHRlcm5hdGl2ZV9wbnMpID09IDE6CisgICAgICAgIHNlbGVjdHBuID0gYWx0ZXJuYXRpdmVfcG5zWzBdCisgICAgICAgIGxvZ2dlci5lcnJvcignRmlsZSAlcyBpcyBhbiBhbHRlcm5hdGl2ZSBwb3NzaWJseSBwcm92aWRlZCBieSByZWNpcGUgJXMgYnV0IHNlZW1pbmdseSBubyBvdGhlciwgc2VsZWN0aW5nIGl0IGJ5IGRlZmF1bHQgLSB5b3Ugc2hvdWxkIGRvdWJsZSBjaGVjayBvdGhlciByZWNpcGVzJyAlIChhcmdzLnRhcmdldHBhdGgsIHNlbGVjdHBuKSkKKworICAgIGlmIHNlbGVjdHBuOgorICAgICAgICBsb2dnZXIuZGVidWcoJ1NlbGVjdGluZyByZWNpcGUgJXMgZm9yIGZpbGUgJXMnICUgKHNlbGVjdHBuLCBhcmdzLnRhcmdldHBhdGgpKQorICAgICAgICBpZiBwb3N0aW5zdF9wbnM6CisgICAgICAgICAgICBsb2dnZXIud2FybignJXMgYmUgbW9kaWZpZWQgYnkgcG9zdGluc3RhbGwgc2NyaXB0cyBmb3IgdGhlIGZvbGxvd2luZyByZWNpcGVzOlxuICAlc1xuVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSBhbiBpc3N1ZSBkZXBlbmRpbmcgb24gd2hhdCBtb2RpZmljYXRpb25zIHRoZXNlIHBvc3RpbnN0YWxsIHNjcmlwdHMgbWFrZS4nICUgKGFyZ3MudGFyZ2V0cGF0aCwgJ1xuICAnLmpvaW4ocG9zdGluc3RfcG5zKSkpCisgICAgICAgIHJkID0gX3BhcnNlX3JlY2lwZShzZWxlY3RwbiwgdGluZm9pbCkKKyAgICAgICAgaWYgbm90IHJkOgorICAgICAgICAgICAgIyBFcnJvciBtZXNzYWdlIGFscmVhZHkgc2hvd24KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHNvdXJjZWZpbGUsIGluc3RlbGVtZW50cywgbW9kcGF0Y2hlcyA9IGRldGVybWluZV9maWxlX3NvdXJjZShhcmdzLnRhcmdldHBhdGgsIHJkKQorICAgICAgICBzb3VyY2VwYXRoID0gTm9uZQorICAgICAgICBpZiBzb3VyY2VmaWxlOgorICAgICAgICAgICAgc291cmNldHlwZSwgc291cmNlcGF0aCA9IHNvdXJjZWZpbGUuc3BsaXQoJzovLycsIDEpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ09yaWdpbmFsIHNvdXJjZSBmaWxlIGlzICVzICglcyknICUgKHNvdXJjZXBhdGgsIHNvdXJjZXR5cGUpKQorICAgICAgICAgICAgaWYgc291cmNldHlwZSA9PSAncGF0Y2gnOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdGaWxlICVzIGlzIGFkZGVkIGJ5IHRoZSBwYXRjaCAlcyAtIHlvdSBtYXkgbmVlZCB0byByZW1vdmUgb3IgcmVwbGFjZSB0aGlzIHBhdGNoIGluIG9yZGVyIHRvIHJlcGxhY2UgdGhlIGZpbGUuJyAlIChhcmdzLnRhcmdldHBhdGgsIHNvdXJjZXBhdGgpKQorICAgICAgICAgICAgICAgIHNvdXJjZXBhdGggPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1VuYWJsZSB0byBkZXRlcm1pbmUgc291cmNlIGZpbGUsIHByb2NlZWRpbmcgYW55d2F5JykKKyAgICAgICAgaWYgbW9kcGF0Y2hlczoKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCdGaWxlICVzIGlzIG1vZGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcgcGF0Y2hlczpcbiAgJXMnICUgKGFyZ3MudGFyZ2V0cGF0aCwgJ1xuICAnLmpvaW4obW9kcGF0Y2hlcykpKQorCisgICAgICAgIGlmIGluc3RlbGVtZW50cyBhbmQgc291cmNlcGF0aDoKKyAgICAgICAgICAgIGluc3RhbGwgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEF1dG8tZGV0ZXJtaW5lIHBlcm1pc3Npb25zCisgICAgICAgICAgICAjIENoZWNrIGRlc3RpbmF0aW9uCisgICAgICAgICAgICBiaW5wYXRocyA9ICcke2JpbmRpcn06JHtzYmluZGlyfToke2Jhc2VfYmluZGlyfToke2Jhc2Vfc2JpbmRpcn06JHtsaWJleGVjZGlyfToke3N5c2NvbmZkaXJ9L2luaXQuZCcKKyAgICAgICAgICAgIHBlcm1zID0gJzA2NDQnCisgICAgICAgICAgICBpZiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKGFyZ3MudGFyZ2V0cGF0aCkpIGluIHJkLmV4cGFuZChiaW5wYXRocykuc3BsaXQoJzonKToKKyAgICAgICAgICAgICAgICAjIEZpbGUgaXMgZ29pbmcgaW50byBhIGRpcmVjdG9yeSBub3JtYWxseSByZXNlcnZlZCBmb3IgZXhlY3V0YWJsZXMsIHNvIGl0IHNob3VsZCBiZSBleGVjdXRhYmxlCisgICAgICAgICAgICAgICAgcGVybXMgPSAnMDc1NScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBDaGVjayBzb3VyY2UKKyAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQoYXJncy5uZXdmaWxlKQorICAgICAgICAgICAgICAgIGlmIHN0LnN0X21vZGUgJiBzdGF0LlNfSVhVU1I6CisgICAgICAgICAgICAgICAgICAgIHBlcm1zID0gJzA3NTUnCisgICAgICAgICAgICBpbnN0YWxsID0ge2FyZ3MubmV3ZmlsZTogKGFyZ3MudGFyZ2V0cGF0aCwgcGVybXMpfQorICAgICAgICBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUocmQsIGFyZ3MuZGVzdGxheWVyLCB7YXJncy5uZXdmaWxlOiBzb3VyY2VwYXRofSwgaW5zdGFsbCwgd2lsZGNhcmR2ZXI9YXJncy53aWxkY2FyZF92ZXJzaW9uLCBtYWNoaW5lPWFyZ3MubWFjaGluZSkKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbHNlOgorICAgICAgICBpZiBhbHRlcm5hdGl2ZV9wbnM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZpbGUgJXMgaXMgYW4gYWx0ZXJuYXRpdmUgcG9zc2libHkgcHJvdmlkZWQgYnkgdGhlIGZvbGxvd2luZyByZWNpcGVzOlxuICAlc1xuUGxlYXNlIHNlbGVjdCByZWNpcGUgd2l0aCAtci8tLXJlY2lwZScgJSAodGFyZ2V0cGF0aCwgJ1xuICAnLmpvaW4oYWx0ZXJuYXRpdmVfcG5zKSkpCisgICAgICAgIGVsaWYgcG9zdGluc3RfcG5zOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGaWxlICVzIG1heSBiZSB3cml0dGVuIG91dCBpbiBhIHByZS9wb3N0aW5zdGFsbCBzY3JpcHQgb2YgdGhlIGZvbGxvd2luZyByZWNpcGVzOlxuICAlc1xuUGxlYXNlIHNlbGVjdCByZWNpcGUgd2l0aCAtci8tLXJlY2lwZScgJSAodGFyZ2V0cGF0aCwgJ1xuICAnLmpvaW4ocG9zdGluc3RfcG5zKSkpCisgICAgICAgIHJldHVybiAzCisKKworZGVmIGFwcGVuZHNyYyhhcmdzLCBmaWxlcywgcmQsIGV4dHJhbGluZXM9Tm9uZSk6CisgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisKKyAgICBzcmNkaXIgPSByZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIHdvcmtkaXIgPSByZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgaW1wb3J0IGJiLmZldGNoCisgICAgc2ltcGxpZmllZCA9IHt9CisgICAgc3JjX3VyaSA9IHJkLmdldFZhcignU1JDX1VSSScsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgdXJpIGluIHNyY191cmk6CisgICAgICAgIHNpbXBsZV91cmkgPSBiYi5mZXRjaC5VUkkodXJpKQorICAgICAgICBzaW1wbGVfdXJpLnBhcmFtcyA9IHt9CisgICAgICAgIHNpbXBsaWZpZWRbc3RyKHNpbXBsZV91cmkpXSA9IHVyaQorCisgICAgY29weWZpbGVzID0ge30KKyAgICBleHRyYWxpbmVzID0gZXh0cmFsaW5lcyBvciBbXQorICAgIGZvciBuZXdmaWxlLCBzcmNmaWxlIGluIGZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICBzcmNfZGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShzcmNmaWxlKQorICAgICAgICBpZiBub3QgYXJncy51c2Vfd29ya2RpcjoKKyAgICAgICAgICAgIGlmIHJkLmdldFZhcignUycsIFRydWUpID09IHJkLmdldFZhcignU1RBR0lOR19LRVJORUxfRElSJywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHdvcmtkaXIsICdnaXQnKQorICAgICAgICAgICAgICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCByZCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdTID09IFNUQUdJTkdfS0VSTkVMX0RJUiBhbmQgbm9uLWtlcm5lbC15b2N0bywgdW5hYmxlIHRvIGRldGVybWluZSBwYXRoIHRvIHNyY2RpciwgZGVmYXVsdGluZyB0byAke1dPUktESVJ9L2dpdCcpCisgICAgICAgICAgICBzcmNfZGVzdGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLnJlbHBhdGgoc3JjZGlyLCB3b3JrZGlyKSwgc3JjX2Rlc3RkaXIpCisgICAgICAgIHNyY19kZXN0ZGlyID0gb3MucGF0aC5ub3JtcGF0aChzcmNfZGVzdGRpcikKKworICAgICAgICBzb3VyY2VfdXJpID0gJ2ZpbGU6Ly97MH0nLmZvcm1hdChvcy5wYXRoLmJhc2VuYW1lKHNyY2ZpbGUpKQorICAgICAgICBpZiBzcmNfZGVzdGRpciBhbmQgc3JjX2Rlc3RkaXIgIT0gJy4nOgorICAgICAgICAgICAgc291cmNlX3VyaSArPSAnO3N1YmRpcj17MH0nLmZvcm1hdChzcmNfZGVzdGRpcikKKworICAgICAgICBzaW1wbGUgPSBiYi5mZXRjaC5VUkkoc291cmNlX3VyaSkKKyAgICAgICAgc2ltcGxlLnBhcmFtcyA9IHt9CisgICAgICAgIHNpbXBsZV9zdHIgPSBzdHIoc2ltcGxlKQorICAgICAgICBpZiBzaW1wbGVfc3RyIGluIHNpbXBsaWZpZWQ6CisgICAgICAgICAgICBleGlzdGluZyA9IHNpbXBsaWZpZWRbc2ltcGxlX3N0cl0KKyAgICAgICAgICAgIGlmIHNvdXJjZV91cmkgIT0gZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ3swIXJ9IGlzIGFscmVhZHkgaW4gU1JDX1VSSSwgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyczogezEhcn0sIG5vdCBhZGRpbmcnLmZvcm1hdChzb3VyY2VfdXJpLCBleGlzdGluZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCd7MCFyfSBpcyBhbHJlYWR5IGluIFNSQ19VUkksIG5vdCBhZGRpbmcnLmZvcm1hdChzb3VyY2VfdXJpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJhbGluZXMuYXBwZW5kKCdTUkNfVVJJICs9IHswfScuZm9ybWF0KHNvdXJjZV91cmkpKQorICAgICAgICBjb3B5ZmlsZXNbbmV3ZmlsZV0gPSBzcmNmaWxlCisKKyAgICBvZS5yZWNpcGV1dGlscy5iYmFwcGVuZF9yZWNpcGUocmQsIGFyZ3MuZGVzdGxheWVyLCBjb3B5ZmlsZXMsIE5vbmUsIHdpbGRjYXJkdmVyPWFyZ3Mud2lsZGNhcmRfdmVyc2lvbiwgbWFjaGluZT1hcmdzLm1hY2hpbmUsIGV4dHJhbGluZXM9ZXh0cmFsaW5lcykKKworCitkZWYgYXBwZW5kc3JjZmlsZXMocGFyc2VyLCBhcmdzKToKKyAgICByZWNpcGVkYXRhID0gX3BhcnNlX3JlY2lwZShhcmdzLnJlY2lwZSwgdGluZm9pbCkKKyAgICBpZiBub3QgcmVjaXBlZGF0YToKKyAgICAgICAgcGFyc2VyLmVycm9yKCdSRUNJUEUgbXVzdCBiZSBhIHZhbGlkIHJlY2lwZSBuYW1lJykKKworICAgIGZpbGVzID0gZGljdCgoZiwgb3MucGF0aC5qb2luKGFyZ3MuZGVzdGRpciwgb3MucGF0aC5iYXNlbmFtZShmKSkpCisgICAgICAgICAgICAgICAgIGZvciBmIGluIGFyZ3MuZmlsZXMpCisgICAgcmV0dXJuIGFwcGVuZHNyYyhhcmdzLCBmaWxlcywgcmVjaXBlZGF0YSkKKworCitkZWYgYXBwZW5kc3JjZmlsZShwYXJzZXIsIGFyZ3MpOgorICAgIHJlY2lwZWRhdGEgPSBfcGFyc2VfcmVjaXBlKGFyZ3MucmVjaXBlLCB0aW5mb2lsKQorICAgIGlmIG5vdCByZWNpcGVkYXRhOgorICAgICAgICBwYXJzZXIuZXJyb3IoJ1JFQ0lQRSBtdXN0IGJlIGEgdmFsaWQgcmVjaXBlIG5hbWUnKQorCisgICAgaWYgbm90IGFyZ3MuZGVzdGZpbGU6CisgICAgICAgIGFyZ3MuZGVzdGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuZmlsZSkKKyAgICBlbGlmIGFyZ3MuZGVzdGZpbGUuZW5kc3dpdGgoJy8nKToKKyAgICAgICAgYXJncy5kZXN0ZmlsZSA9IG9zLnBhdGguam9pbihhcmdzLmRlc3RmaWxlLCBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuZmlsZSkpCisKKyAgICByZXR1cm4gYXBwZW5kc3JjKGFyZ3MsIHthcmdzLmZpbGU6IGFyZ3MuZGVzdGZpbGV9LCByZWNpcGVkYXRhKQorCisKK2RlZiBsYXllcihsYXllcnBhdGgpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obGF5ZXJwYXRoLCAnY29uZicsICdsYXllci5jb25mJykpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignezAhcn0gbXVzdCBiZSBhIHBhdGggdG8gYSB2YWxpZCBsYXllcicuZm9ybWF0KGxheWVycGF0aCkpCisgICAgcmV0dXJuIGxheWVycGF0aAorCisKK2RlZiBleGlzdGluZ19wYXRoKGZpbGVwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignezAhcn0gbXVzdCBiZSBhbiBleGlzdGluZyBwYXRoJy5mb3JtYXQoZmlsZXBhdGgpKQorICAgIHJldHVybiBmaWxlcGF0aAorCisKK2RlZiBleGlzdGluZ19maWxlKGZpbGVwYXRoKToKKyAgICBmaWxlcGF0aCA9IGV4aXN0aW5nX3BhdGgoZmlsZXBhdGgpCisgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlcGF0aCk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCd7MCFyfSBtdXN0IGJlIGEgZmlsZSwgbm90IGEgZGlyZWN0b3J5Jy5mb3JtYXQoZmlsZXBhdGgpKQorICAgIHJldHVybiBmaWxlcGF0aAorCisKK2RlZiBkZXN0aW5hdGlvbl9wYXRoKGRlc3RwYXRoKToKKyAgICBpZiBvcy5wYXRoLmlzYWJzKGRlc3RwYXRoKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3swIXJ9IG11c3QgYmUgYSByZWxhdGl2ZSBwYXRoLCBub3QgYWJzb2x1dGUnLmZvcm1hdChkZXN0cGF0aCkpCisgICAgcmV0dXJuIGRlc3RwYXRoCisKKworZGVmIHRhcmdldF9wYXRoKHRhcmdldHBhdGgpOgorICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHRhcmdldHBhdGgpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignezAhcn0gbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBub3QgcmVsYXRpdmUnLmZvcm1hdCh0YXJnZXRwYXRoKSkKKyAgICByZXR1cm4gdGFyZ2V0cGF0aAorCisKK2RlZiByZWdpc3Rlcl9jb21tYW5kKHN1YnBhcnNlcnMpOgorICAgIGNvbW1vbiA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgIGNvbW1vbi5hZGRfYXJndW1lbnQoJy1tJywgJy0tbWFjaGluZScsIGhlbHA9J01ha2UgYmJhcHBlbmQgY2hhbmdlcyBzcGVjaWZpYyB0byBhIG1hY2hpbmUgb25seScsIG1ldGF2YXI9J01BQ0hJTkUnKQorICAgIGNvbW1vbi5hZGRfYXJndW1lbnQoJy13JywgJy0td2lsZGNhcmQtdmVyc2lvbicsIGhlbHA9J1VzZSB3aWxkY2FyZCB0byBtYWtlIHRoZSBiYmFwcGVuZCBhcHBseSB0byBhbnkgcmVjaXBlIHZlcnNpb24nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNvbW1vbi5hZGRfYXJndW1lbnQoJ2Rlc3RsYXllcicsIG1ldGF2YXI9J0RFU1RMQVlFUicsIGhlbHA9J0Jhc2UgZGlyZWN0b3J5IG9mIHRoZSBkZXN0aW5hdGlvbiBsYXllciB0byB3cml0ZSB0aGUgYmJhcHBlbmQgdG8nLCB0eXBlPWxheWVyKQorCisgICAgcGFyc2VyX2FwcGVuZGZpbGUgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2FwcGVuZGZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHM9W2NvbW1vbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ3JlYXRlL3VwZGF0ZSBhIGJiYXBwZW5kIHRvIHJlcGxhY2UgYSB0YXJnZXQgZmlsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0NyZWF0ZXMgYSBiYmFwcGVuZCAob3IgdXBkYXRlcyBhbiBleGlzdGluZyBvbmUpIHRvIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBmaWxlIHRoYXQgYXBwZWFycyBpbiB0aGUgdGFyZ2V0IHN5c3RlbSwgZGV0ZXJtaW5pbmcgdGhlIHJlY2lwZSB0aGF0IHBhY2thZ2VzIHRoZSBmaWxlIGFuZCB0aGUgcmVxdWlyZWQgcGF0aCBhbmQgbmFtZSBmb3IgdGhlIGJiYXBwZW5kIGF1dG9tYXRpY2FsbHkuIE5vdGUgdGhhdCB0aGUgYWJpbGl0eSB0byBkZXRlcm1pbmUgdGhlIHJlY2lwZSBwYWNrYWdpbmcgYSBwYXJ0aWN1bGFyIGZpbGUgZGVwZW5kcyB1cG9uIHRoZSByZWNpcGVcJ3MgZG9fcGFja2FnZWRhdGEgdGFzayBoYXZpbmcgYWxyZWFkeSBydW4gcHJpb3IgdG8gcnVubmluZyB0aGlzIGNvbW1hbmQgKHdoaWNoIGl0IHdpbGwgaGF2ZSB3aGVuIHRoZSByZWNpcGUgaGFzIGJlZW4gYnVpbHQgc3VjY2Vzc2Z1bGx5LCB3aGljaCBpbiB0dXJuIHdpbGwgaGF2ZSBoYXBwZW5lZCBpZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmVjaXBlXCdzIHBhY2thZ2VzIGlzIGluY2x1ZGVkIGluIGFuIGltYWdlIHRoYXQgaGFzIGJlZW4gYnVpbHQgc3VjY2Vzc2Z1bGx5KS4nKQorICAgIHBhcnNlcl9hcHBlbmRmaWxlLmFkZF9hcmd1bWVudCgndGFyZ2V0cGF0aCcsIGhlbHA9J1BhdGggdG8gdGhlIGZpbGUgdG8gYmUgcmVwbGFjZWQgKGFzIGl0IHdvdWxkIGFwcGVhciB3aXRoaW4gdGhlIHRhcmdldCBpbWFnZSwgZS5nLiAvZXRjL21vdGQpJywgdHlwZT10YXJnZXRfcGF0aCkKKyAgICBwYXJzZXJfYXBwZW5kZmlsZS5hZGRfYXJndW1lbnQoJ25ld2ZpbGUnLCBoZWxwPSdDdXN0b20gZmlsZSB0byByZXBsYWNlIHRoZSB0YXJnZXQgZmlsZSB3aXRoJywgdHlwZT1leGlzdGluZ19maWxlKQorICAgIHBhcnNlcl9hcHBlbmRmaWxlLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZWNpcGUnLCBoZWxwPSdPdmVycmlkZSByZWNpcGUgdG8gYXBwbHkgdG8gKGRlZmF1bHQgaXMgdG8gZmluZCB3aGljaCByZWNpcGUgYWxyZWFkeSBwYWNrYWdlcyB0aGUgZmlsZSknKQorICAgIHBhcnNlcl9hcHBlbmRmaWxlLnNldF9kZWZhdWx0cyhmdW5jPWFwcGVuZGZpbGUsIHBhcnNlcmVjaXBlcz1UcnVlKQorCisgICAgY29tbW9uX3NyYyA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlLCBwYXJlbnRzPVtjb21tb25dKQorICAgIGNvbW1vbl9zcmMuYWRkX2FyZ3VtZW50KCctVycsICctLXdvcmtkaXInLCBoZWxwPSdVbnBhY2sgZmlsZSBpbnRvIFdPUktESVIgcmF0aGVyIHRoYW4gUycsIGRlc3Q9J3VzZV93b3JrZGlyJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjb21tb25fc3JjLmFkZF9hcmd1bWVudCgncmVjaXBlJywgbWV0YXZhcj0nUkVDSVBFJywgaGVscD0nT3ZlcnJpZGUgcmVjaXBlIHRvIGFwcGx5IHRvJykKKworICAgIHBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYXBwZW5kc3JjZmlsZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzPVtjb21tb25fc3JjXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ3JlYXRlL3VwZGF0ZSBhIGJiYXBwZW5kIHRvIGFkZCBvciByZXBsYWNlIHNvdXJjZSBmaWxlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdDcmVhdGVzIGEgYmJhcHBlbmQgKG9yIHVwZGF0ZXMgYW4gZXhpc3Rpbmcgb25lKSB0byBhZGQgb3IgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGZpbGUgaW4gdGhlIHJlY2lwZSBzb3VyY2VzLCBlaXRoZXIgdGhvc2UgaW4gV09SS0RJUiBvciB0aG9zZSBpbiB0aGUgc291cmNlIHRyZWUuIFRoaXMgY29tbWFuZCBsZXRzIHlvdSBzcGVjaWZ5IG11bHRpcGxlIGZpbGVzIHdpdGggYSBkZXN0aW5hdGlvbiBkaXJlY3RvcnksIHNvIGNhbm5vdCBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBmaWxlbmFtZS4gU2VlIHRoZSBgYXBwZW5kc3JjZmlsZWAgY29tbWFuZCBmb3IgdGhlIG90aGVyIGJlaGF2aW9yLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLUQnLCAnLS1kZXN0ZGlyJywgaGVscD0nRGVzdGluYXRpb24gZGlyZWN0b3J5IChyZWxhdGl2ZSB0byBTIG9yIFdPUktESVIsIGRlZmF1bHRzIHRvICIuIiknLCBkZWZhdWx0PScnLCB0eXBlPWRlc3RpbmF0aW9uX3BhdGgpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZmlsZXMnLCBuYXJncz0nKycsIG1ldGF2YXI9J0ZJTEUnLCBoZWxwPSdGaWxlKHMpIHRvIGJlIGFkZGVkIHRvIHRoZSByZWNpcGUgc291cmNlcyAoV09SS0RJUiBvciBTKScsIHR5cGU9ZXhpc3RpbmdfcGF0aCkKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9bGFtYmRhIGE6IGFwcGVuZHNyY2ZpbGVzKHBhcnNlciwgYSksIHBhcnNlcmVjaXBlcz1UcnVlKQorCisgICAgcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdhcHBlbmRzcmNmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cz1bY29tbW9uX3NyY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NyZWF0ZS91cGRhdGUgYSBiYmFwcGVuZCB0byBhZGQgb3IgcmVwbGFjZSBhIHNvdXJjZSBmaWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0NyZWF0ZXMgYSBiYmFwcGVuZCAob3IgdXBkYXRlcyBhbiBleGlzdGluZyBvbmUpIHRvIGFkZCBvciByZXBsYWNlIHRoZSBzcGVjaWZpZWQgZmlsZXMgaW4gdGhlIHJlY2lwZSBzb3VyY2VzLCBlaXRoZXIgdGhvc2UgaW4gV09SS0RJUiBvciB0aG9zZSBpbiB0aGUgc291cmNlIHRyZWUuIFRoaXMgY29tbWFuZCBsZXRzIHlvdSBzcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBmaWxlbmFtZSwgbm90IGp1c3QgZGVzdGluYXRpb24gZGlyZWN0b3J5LCBidXQgb25seSB3b3JrcyBmb3Igb25lIGZpbGUuIFNlZSB0aGUgYGFwcGVuZHNyY2ZpbGVzYCBjb21tYW5kIGZvciB0aGUgb3RoZXIgYmVoYXZpb3IuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJywgbWV0YXZhcj0nRklMRScsIGhlbHA9J0ZpbGUgdG8gYmUgYWRkZWQgdG8gdGhlIHJlY2lwZSBzb3VyY2VzIChXT1JLRElSIG9yIFMpJywgdHlwZT1leGlzdGluZ19wYXRoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2Rlc3RmaWxlJywgbWV0YXZhcj0nREVTVEZJTEUnLCBuYXJncz0nPycsIGhlbHA9J0Rlc3RpbmF0aW9uIHBhdGggKHJlbGF0aXZlIHRvIFMgb3IgV09SS0RJUiwgb3B0aW9uYWwpJywgdHlwZT1kZXN0aW5hdGlvbl9wYXRoKQorICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoZnVuYz1sYW1iZGEgYTogYXBwZW5kc3JjZmlsZShwYXJzZXIsIGEpLCBwYXJzZXJlY2lwZXM9VHJ1ZSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5IGIvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3NTRkYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlLnB5CkBAIC0wLDAgKzEsNDEyIEBACisjIFJlY2lwZSBjcmVhdGlvbiB0b29sIC0gY3JlYXRlIGNvbW1hbmQgcGx1Z2luCisjCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGdsb2IKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2NyaXB0dXRpbHMKKworbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3JlY2lwZXRvb2wnKQorCit0aW5mb2lsID0gTm9uZQorcGx1Z2lucyA9IE5vbmUKKworZGVmIHBsdWdpbl9pbml0KHBsdWdpbmxpc3QpOgorICAgICMgVGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgbGlzdCBzbyB3ZSBjYW4gdXNlIGl0IGxhdGVyCisgICAgZ2xvYmFsIHBsdWdpbnMKKyAgICBwbHVnaW5zID0gcGx1Z2lubGlzdAorCitkZWYgdGluZm9pbF9pbml0KGluc3RhbmNlKToKKyAgICBnbG9iYWwgdGluZm9pbAorICAgIHRpbmZvaWwgPSBpbnN0YW5jZQorCitjbGFzcyBSZWNpcGVIYW5kbGVyKCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjaGVja2ZpbGVzKHBhdGgsIHNwZWNsaXN0KToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciBzcGVjIGluIHNwZWNsaXN0OgorICAgICAgICAgICAgcmVzdWx0cy5leHRlbmQoZ2xvYi5nbG9iKG9zLnBhdGguam9pbihwYXRoLCBzcGVjKSkpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgZ2VuZnVuY3Rpb24oc2VsZiwgb3V0bGluZXMsIGZ1bmNuYW1lLCBjb250ZW50KToKKyAgICAgICAgb3V0bGluZXMuYXBwZW5kKCclcyAoKSB7JyAlIGZ1bmNuYW1lKQorICAgICAgICBmb3IgbGluZSBpbiBjb250ZW50OgorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCdcdCVzJyAlIGxpbmUpCisgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnJykKKworICAgIGRlZiBwcm9jZXNzKHNlbGYsIHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCisKK2RlZiBzdXBwb3J0c19zcmNyZXYodXJpKToKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkodGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAjIFRoaXMgaXMgYSBiaXQgc2FkLCBidXQgaWYgeW91IGRvbid0IGhhdmUgdGhpcyBzZXQgdGhlcmUgY2FuIGJlIHNvbWUKKyAgICAjIG9kZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdXJsZGF0YSBjYWNoZSB3aGljaCBsZWFkIHRvIGVycm9ycworICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ1JFVicsICcke0FVVE9SRVZ9JykKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFt1cmldLCBsb2NhbGRhdGEpCisgICAgdXJsZGF0YSA9IGZldGNoZXIudWQKKyAgICBmb3IgdSBpbiB1cmxkYXRhOgorICAgICAgICBpZiB1cmxkYXRhW3VdLm1ldGhvZC5zdXBwb3J0c19zcmNyZXYoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBjcmVhdGVfcmVjaXBlKGFyZ3MpOgorICAgIGltcG9ydCBiYi5wcm9jZXNzCisgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgaW1wb3J0IHNodXRpbAorCisgICAgcGtnYXJjaCA9ICIiCisgICAgaWYgYXJncy5tYWNoaW5lOgorICAgICAgICBwa2dhcmNoID0gIiR7TUFDSElORV9BUkNIfSIKKworICAgIGNoZWNrc3VtcyA9IChOb25lLCBOb25lKQorICAgIHRlbXBzcmMgPSAnJworICAgIHNyY3N1YmRpciA9ICcnCisgICAgc3JjcmV2ID0gJyR7QVVUT1JFVn0nCisgICAgaWYgJzovLycgaW4gYXJncy5zb3VyY2U6CisgICAgICAgICMgRmV0Y2ggYSBVUkwKKyAgICAgICAgc3JjdXJpID0gYXJncy5zb3VyY2UKKyAgICAgICAgcmV2X3JlID0gcmUuY29tcGlsZSgnO3Jldj0oW147XSspJykKKyAgICAgICAgcmVzID0gcmV2X3JlLnNlYXJjaChzcmN1cmkpCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIHNyY3JldiA9IHJlcy5ncm91cCgxKQorICAgICAgICAgICAgc3JjdXJpID0gcmV2X3JlLnN1YignJywgc3JjdXJpKQorICAgICAgICB0ZW1wc3JjID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2wtJykKKyAgICAgICAgc3JjdHJlZSA9IHRlbXBzcmMKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nICVzLi4uJyAlIHNyY3VyaSkKKyAgICAgICAgY2hlY2tzdW1zID0gc2NyaXB0dXRpbHMuZmV0Y2hfdXJpKHRpbmZvaWwuY29uZmlnX2RhdGEsIGFyZ3Muc291cmNlLCBzcmN0cmVlLCBzcmNyZXYpCisgICAgICAgIGRpcmxpc3QgPSBvcy5saXN0ZGlyKHNyY3RyZWUpCisgICAgICAgIGlmICdnaXQuaW5kaXJlY3Rpb25zeW1saW5rJyBpbiBkaXJsaXN0OgorICAgICAgICAgICAgZGlybGlzdC5yZW1vdmUoJ2dpdC5pbmRpcmVjdGlvbnN5bWxpbmsnKQorICAgICAgICBpZiBsZW4oZGlybGlzdCkgPT0gMSBhbmQgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3JjdHJlZSwgZGlybGlzdFswXSkpOgorICAgICAgICAgICAgIyBXZSB1bnBhY2tlZCBhIHNpbmdsZSBkaXJlY3RvcnksIHNvIHdlIHNob3VsZCB1c2UgdGhhdAorICAgICAgICAgICAgc3Jjc3ViZGlyID0gZGlybGlzdFswXQorICAgICAgICAgICAgc3JjdHJlZSA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBzcmNzdWJkaXIpCisgICAgZWxzZToKKyAgICAgICAgIyBBc3N1bWUgd2UncmUgcG9pbnRpbmcgdG8gYW4gZXhpc3Rpbmcgc291cmNlIHRyZWUKKyAgICAgICAgaWYgYXJncy5leHRyYWN0X3RvOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCctLWV4dHJhY3QtdG8gY2Fubm90IGJlIHNwZWNpZmllZCBpZiBzb3VyY2UgaXMgYSBkaXJlY3RvcnknKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJncy5zb3VyY2UpOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdJbnZhbGlkIHNvdXJjZSBkaXJlY3RvcnkgJXMnICUgYXJncy5zb3VyY2UpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBzcmN1cmkgPSAnJworICAgICAgICBzcmN0cmVlID0gYXJncy5zb3VyY2UKKworICAgIG91dGZpbGUgPSBhcmdzLm91dGZpbGUKKyAgICBpZiBvdXRmaWxlIGFuZCBvdXRmaWxlICE9ICctJzoKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3V0ZmlsZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ091dHB1dCBmaWxlICVzIGFscmVhZHkgZXhpc3RzJyAlIG91dGZpbGUpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbGluZXNfYmVmb3JlID0gW10KKyAgICBsaW5lc19hZnRlciA9IFtdCisKKyAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIFJlY2lwZSBjcmVhdGVkIGJ5ICVzJyAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgVGhpcyBpcyB0aGUgYmFzaXMgb2YgYSByZWNpcGUgYW5kIG1heSBuZWVkIGZ1cnRoZXIgZWRpdGluZyBpbiBvcmRlciB0byBiZSBmdWxseSBmdW5jdGlvbmFsLicpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyAoRmVlbCBmcmVlIHRvIHJlbW92ZSB0aGVzZSBjb21tZW50cyB3aGVuIGVkaXRpbmcuKScpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCisKKyAgICBsaWN2YWx1ZXMgPSBndWVzc19saWNlbnNlKHNyY3RyZWUpCisgICAgbGljX2ZpbGVzX2Noa3N1bSA9IFtdCisgICAgaWYgbGljdmFsdWVzOgorICAgICAgICBsaWNlbnNlcyA9IFtdCisgICAgICAgIGZvciBsaWN2YWx1ZSBpbiBsaWN2YWx1ZXM6CisgICAgICAgICAgICBpZiBub3QgbGljdmFsdWVbMF0gaW4gbGljZW5zZXM6CisgICAgICAgICAgICAgICAgbGljZW5zZXMuYXBwZW5kKGxpY3ZhbHVlWzBdKQorICAgICAgICAgICAgbGljX2ZpbGVzX2Noa3N1bS5hcHBlbmQoJ2ZpbGU6Ly8lczttZDU9JXMnICUgKGxpY3ZhbHVlWzFdLCBsaWN2YWx1ZVsyXSkpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgV0FSTklORzogdGhlIGZvbGxvd2luZyBMSUNFTlNFIGFuZCBMSUNfRklMRVNfQ0hLU1VNIHZhbHVlcyBhcmUgYmVzdCBndWVzc2VzIC0gaXQgaXMnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHZhbHVlcyBhcmUgY29tcGxldGUgYW5kIGNvcnJlY3QuJykKKyAgICAgICAgaWYgbGVuKGxpY3ZhbHVlcykgPiAxOgorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCisgICAgICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5PVEU6IG11bHRpcGxlIGxpY2Vuc2VzIGhhdmUgYmVlbiBkZXRlY3RlZDsgaWYgdGhhdCBpcyBjb3JyZWN0IHlvdSBzaG91bGQgc2VwYXJhdGUnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyB0aGVzZSBpbiB0aGUgTElDRU5TRSB2YWx1ZSB1c2luZyAmIGlmIHRoZSBtdWx0aXBsZSBsaWNlbnNlcyBhbGwgYXBwbHksIG9yIHwgaWYgdGhlcmUnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBpcyBhIGNob2ljZSBiZXR3ZWVuIHRoZSBtdWx0aXBsZSBsaWNlbnNlcy4gSWYgaW4gZG91YnQsIGNoZWNrIHRoZSBhY2NvbXBhbnlpbmcnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB3aGljaCBzaXR1YXRpb24gaXMgYXBwbGljYWJsZS4nKQorICAgIGVsc2U6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgVW5hYmxlIHRvIGZpbmQgYW55IGZpbGVzIHRoYXQgbG9va2VkIGxpa2UgbGljZW5zZSBzdGF0ZW1lbnRzLiBDaGVjayB0aGUgYWNjb21wYW55aW5nJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgaGVhZGVycyBhbmQgc2V0IExJQ0VOU0UgYW5kIExJQ19GSUxFU19DSEtTVU0gYWNjb3JkaW5nbHkuJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIycpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgTk9URTogTElDRU5TRSBpcyBiZWluZyBzZXQgdG8gIkNMT1NFRCIgdG8gYWxsb3cgeW91IHRvIGF0IGxlYXN0IHN0YXJ0IGJ1aWxkaW5nIC0gaWYnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHRoaXMgaXMgbm90IGFjY3VyYXRlIHdpdGggcmVzcGVjdCB0byB0aGUgbGljZW5zaW5nIG9mIHRoZSBzb2Z0d2FyZSBiZWluZyBidWlsdCAoaXQnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHdpbGwgbm90IGJlIGluIG1vc3QgY2FzZXMpIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGNvcnJlY3QgdmFsdWUgYmVmb3JlIHVzaW5nIHRoaXMnKQorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIHJlY2lwZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBpbml0aWFsIHRlc3RpbmcvZGV2ZWxvcG1lbnQhJykKKyAgICAgICAgbGljZW5zZXMgPSBbJ0NMT1NFRCddCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnTElDRU5TRSA9ICIlcyInICUgJyAnLmpvaW4obGljZW5zZXMpKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ0xJQ19GSUxFU19DSEtTVU0gPSAiJXMiJyAlICcgXFxcbiAgICAgICAgICAgICAgICAgICAgJy5qb2luKGxpY19maWxlc19jaGtzdW0pKQorICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisKKyAgICAjIEZJWE1FIFRoaXMgaXMga2luZCBvZiBhIGhhY2ssIHdlIHByb2JhYmx5IG91Z2h0IHRvIGJlIHVzaW5nIGJpdGJha2UgdG8gZG8gdGhpcworICAgICMgd2UnZCBhbHNvIHdhbnQgYSB3YXkgdG8gYXV0b21hdGljYWxseSBzZXQgb3V0ZmlsZSBiYXNlZCB1cG9uIGF1dG8tZGV0ZWN0aW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2UgaWYgcG9zc2libGUKKyAgICByZWNpcGVmbiA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShvdXRmaWxlKSlbMF0KKyAgICBmbnNwbGl0ID0gcmVjaXBlZm4uc3BsaXQoJ18nKQorICAgIGlmIGxlbihmbnNwbGl0KSA+IDE6CisgICAgICAgIHBuID0gZm5zcGxpdFswXQorICAgICAgICBwdiA9IGZuc3BsaXRbMV0KKyAgICBlbHNlOgorICAgICAgICBwbiA9IHJlY2lwZWZuCisgICAgICAgIHB2ID0gTm9uZQorCisgICAgaWYgYXJncy52ZXJzaW9uOgorICAgICAgICBwdiA9IGFyZ3MudmVyc2lvbgorCisgICAgaWYgcHYgYW5kIHB2IG5vdCBpbiAnZ2l0IHN2biBoZycuc3BsaXQoKToKKyAgICAgICAgcmVhbHB2ID0gcHYKKyAgICBlbHNlOgorICAgICAgICByZWFscHYgPSBOb25lCisKKyAgICBpZiBzcmN1cmk6CisgICAgICAgIGlmIHJlYWxwdjoKKyAgICAgICAgICAgIHNyY3VyaSA9IHNyY3VyaS5yZXBsYWNlKHJlYWxwdiwgJyR7UFZ9JykKKyAgICBlbHNlOgorICAgICAgICBsaW5lc19iZWZvcmUuYXBwZW5kKCcjIE5vIGluZm9ybWF0aW9uIGZvciBTUkNfVVJJIHlldCAob25seSBhbiBleHRlcm5hbCBzb3VyY2UgdHJlZSB3YXMgc3BlY2lmaWVkKScpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnU1JDX1VSSSA9ICIlcyInICUgc3JjdXJpKQorICAgIChtZDV2YWx1ZSwgc2hhMjU2dmFsdWUpID0gY2hlY2tzdW1zCisgICAgaWYgbWQ1dmFsdWU6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ19VUklbbWQ1c3VtXSA9ICIlcyInICUgbWQ1dmFsdWUpCisgICAgaWYgc2hhMjU2dmFsdWU6CisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1NSQ19VUklbc2hhMjU2c3VtXSA9ICIlcyInICUgc2hhMjU2dmFsdWUpCisgICAgaWYgc3JjdXJpIGFuZCBzdXBwb3J0c19zcmNyZXYoc3JjdXJpKToKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBNb2RpZnkgdGhlc2UgYXMgZGVzaXJlZCcpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJ1BWID0gIiVzK2dpdCR7U1JDUFZ9IicgJSAocmVhbHB2IG9yICcxLjAnKSkKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnU1JDUkVWID0gIiVzIicgJSBzcmNyZXYpCisgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKKworICAgIGlmIHNyY3N1YmRpciBhbmQgcHY6CisgICAgICAgIGlmIHNyY3N1YmRpciA9PSAiJXMtJXMiICUgKHBuLCBwdik6CisgICAgICAgICAgICAjIFRoaXMgd291bGQgYmUgdGhlIGRlZmF1bHQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc2V0IFMgaW4gdGhlIHJlY2lwZQorICAgICAgICAgICAgc3Jjc3ViZGlyID0gJycKKyAgICBpZiBzcmNzdWJkaXI6CisgICAgICAgIGlmIHB2IGFuZCBwdiBub3QgaW4gJ2dpdCBzdm4gaGcnLnNwbGl0KCk6CisgICAgICAgICAgICBzcmNzdWJkaXIgPSBzcmNzdWJkaXIucmVwbGFjZShwdiwgJyR7UFZ9JykKKyAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnUyA9ICIke1dPUktESVJ9LyVzIicgJSBzcmNzdWJkaXIpCisgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJycpCisKKyAgICBpZiBwa2dhcmNoOgorICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ1BBQ0tBR0VfQVJDSCA9ICIlcyInICUgcGtnYXJjaCkKKyAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorCisgICAgIyBGaW5kIGFsbCBwbHVnaW5zIHRoYXQgd2FudCB0byByZWdpc3RlciBoYW5kbGVycworICAgIGhhbmRsZXJzID0gW10KKyAgICBmb3IgcGx1Z2luIGluIHBsdWdpbnM6CisgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzJyk6CisgICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfcmVjaXBlX2hhbmRsZXJzKGhhbmRsZXJzKQorCisgICAgIyBBcHBseSB0aGUgaGFuZGxlcnMKKyAgICBjbGFzc2VzID0gW10KKyAgICBoYW5kbGVkID0gW10KKyAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKKyAgICAgICAgaGFuZGxlci5wcm9jZXNzKHNyY3RyZWUsIGNsYXNzZXMsIGxpbmVzX2JlZm9yZSwgbGluZXNfYWZ0ZXIsIGhhbmRsZWQpCisKKyAgICBvdXRsaW5lcyA9IFtdCisgICAgb3V0bGluZXMuZXh0ZW5kKGxpbmVzX2JlZm9yZSkKKyAgICBpZiBjbGFzc2VzOgorICAgICAgICBvdXRsaW5lcy5hcHBlbmQoJ2luaGVyaXQgJXMnICUgJyAnLmpvaW4oY2xhc3NlcykpCisgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnJykKKyAgICBvdXRsaW5lcy5leHRlbmQobGluZXNfYWZ0ZXIpCisKKyAgICBpZiBhcmdzLmV4dHJhY3RfdG86CisgICAgICAgIHNjcmlwdHV0aWxzLmdpdF9jb252ZXJ0X3N0YW5kYWxvbmVfY2xvbmUoc3JjdHJlZSkKKyAgICAgICAgc2h1dGlsLm1vdmUoc3JjdHJlZSwgYXJncy5leHRyYWN0X3RvKQorICAgICAgICBsb2dnZXIuaW5mbygnU291cmNlIGV4dHJhY3RlZCB0byAlcycgJSBhcmdzLmV4dHJhY3RfdG8pCisKKyAgICBpZiBvdXRmaWxlID09ICctJzoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nLmpvaW4ob3V0bGluZXMpICsgJ1xuJykKKyAgICBlbHNlOgorICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnXG4nLmpvaW4ob3V0bGluZXMpICsgJ1xuJykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ1JlY2lwZSAlcyBoYXMgYmVlbiBjcmVhdGVkOyBmdXJ0aGVyIGVkaXRpbmcgbWF5IGJlIHJlcXVpcmVkIHRvIG1ha2UgaXQgZnVsbHkgZnVuY3Rpb25hbCcgJSBvdXRmaWxlKQorCisgICAgaWYgdGVtcHNyYzoKKyAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wc3JjKQorCisgICAgcmV0dXJuIDAKKworZGVmIGdldF9saWNlbnNlX21kNXN1bXMoZCwgc3RhdGljX29ubHk9RmFsc2UpOgorICAgIGltcG9ydCBiYi51dGlscworICAgIG1kNXN1bXMgPSB7fQorICAgIGlmIG5vdCBzdGF0aWNfb25seToKKyAgICAgICAgIyBHYXRoZXIgbWQ1c3VtcyBvZiBsaWNlbnNlIGZpbGVzIGluIGNvbW1vbiBsaWNlbnNlIGRpcgorICAgICAgICBjb21tb25saWNkaXIgPSBkLmdldFZhcignQ09NTU9OX0xJQ0VOU0VfRElSJywgVHJ1ZSkKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIoY29tbW9ubGljZGlyKToKKyAgICAgICAgICAgIG1kNXZhbHVlID0gYmIudXRpbHMubWQ1X2ZpbGUob3MucGF0aC5qb2luKGNvbW1vbmxpY2RpciwgZm4pKQorICAgICAgICAgICAgbWQ1c3Vtc1ttZDV2YWx1ZV0gPSBmbgorICAgICMgVGhlIGZvbGxvd2luZyB3ZXJlIGV4dHJhY3RlZCBmcm9tIGNvbW1vbiB2YWx1ZXMgaW4gdmFyaW91cyByZWNpcGVzCisgICAgIyAoZG91YmxlIGNoZWNraW5nIHRoZSBsaWNlbnNlIGFnYWluc3QgdGhlIGxpY2Vuc2UgZmlsZSBpdHNlbGYsIG5vdCBqdXN0CisgICAgIyB0aGUgTElDRU5TRSB2YWx1ZSBpbiB0aGUgcmVjaXBlKQorICAgIG1kNXN1bXNbJzk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snYjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyc1OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyc3NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzJ10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snMTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyc4Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJ2ViYjVjNTBhYjdjYWI0YmFlZmZiYTE0OTc3MDMwYzA3J10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snYzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGInXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWyc5YWMyZTdjZmYxZGRhZjQ4YjZlYWI2MDI4ZjIzZWY4OCddID0gJ0dQTHYyJworICAgIG1kNXN1bXNbJzQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0J10gPSAnR1BMdjInCisgICAgbWQ1c3Vtc1snMTg4MTA2NjlmMTNiODczNDg0NTllNjExZDMxYWI3NjAnXSA9ICdHUEx2MicKKyAgICBtZDVzdW1zWydkNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyddID0gJ0dQTHYyJyAjIHRoZSBMaW51eCBrZXJuZWwncyBDT1BZSU5HIGZpbGUKKyAgICBtZDVzdW1zWydiYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJzdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0J10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snNGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWycyZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJ2ZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0J10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snYTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMnXSA9ICdMR1BMdjIuMScKKyAgICBtZDVzdW1zWydkODA0NWYzYjhmOTI5YzFjYjI5YTFlM2ZkNzM3YjQ5OSddID0gJ0xHUEx2Mi4xJworICAgIG1kNXN1bXNbJ2ZhZDliMzMzMmJlODk0YmFiOWJjNTAxNTcyODY0YjI5J10gPSAnTEdQTHYyLjEnCisgICAgbWQ1c3Vtc1snM2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcnXSA9ICdMR1BMdjInCisgICAgbWQ1c3Vtc1snOWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQnXSA9ICdMR1BMdjInCisgICAgbWQ1c3Vtc1snNWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzInXSA9ICdMR1BMdjInCisgICAgbWQ1c3Vtc1snNTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUnXSA9ICdMR1BMdjInCisgICAgbWQ1c3Vtc1snMjUyODkwZDllZWUyNmFhYjdiNDMyZThiOGE2MTY0NzUnXSA9ICdMR1BMdjInCisgICAgbWQ1c3Vtc1snZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQnXSA9ICdHUEx2MycKKyAgICBtZDVzdW1zWydmMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSddID0gJ0dQTHYzJworICAgIG1kNXN1bXNbJzZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2J10gPSAnTEdQTHYzJworICAgIG1kNXN1bXNbJzNiODNlZjk2Mzg3ZjE0NjU1ZmM4NTRkZGMzYzZiZDU3J10gPSAnQXBhY2hlLTIuMCcKKyAgICBtZDVzdW1zWyczODVjNTU2NTM4ODZhY2FjMzgyMTk5OWEzY2NkMTdiMyddID0gJ0FydGlzdGljLTEuMCB8IEdQTC0yLjAnICMgc29tZSBwZXJsIG1vZHVsZXMKKyAgICByZXR1cm4gbWQ1c3VtcworCitkZWYgZ3Vlc3NfbGljZW5zZShzcmN0cmVlKToKKyAgICBpbXBvcnQgYmIKKyAgICBtZDVzdW1zID0gZ2V0X2xpY2Vuc2VfbWQ1c3Vtcyh0aW5mb2lsLmNvbmZpZ19kYXRhKQorCisgICAgbGljZW5zZXMgPSBbXQorICAgIGxpY3NwZWNzID0gWydMSUNFTlNFKicsICdDT1BZSU5HKicsICcqW0xsXWljZW5zZSonLCAnTElDRU5DRSonLCAnTEVHQUwqJywgJ1tMbF1lZ2FsKicsICcqR1BMKicsICdSRUFETUUubGljKicsICdDT1BZUklHSFQqJywgJ1tDY11vcHlyaWdodConXQorICAgIGxpY2ZpbGVzID0gW10KKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzcmN0cmVlKToKKyAgICAgICAgZm9yIGZuIGluIGZpbGVzOgorICAgICAgICAgICAgZm9yIHNwZWMgaW4gbGljc3BlY3M6CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZuLCBzcGVjKToKKyAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZm4pCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmdWxscGF0aCBpbiBsaWNmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpY2ZpbGVzLmFwcGVuZChmdWxscGF0aCkKKyAgICBmb3IgbGljZmlsZSBpbiBsaWNmaWxlczoKKyAgICAgICAgbWQ1dmFsdWUgPSBiYi51dGlscy5tZDVfZmlsZShsaWNmaWxlKQorICAgICAgICBsaWNlbnNlID0gbWQ1c3Vtcy5nZXQobWQ1dmFsdWUsICdVbmtub3duJykKKyAgICAgICAgbGljZW5zZXMuYXBwZW5kKChsaWNlbnNlLCBvcy5wYXRoLnJlbHBhdGgobGljZmlsZSwgc3JjdHJlZSksIG1kNXZhbHVlKSkKKworICAgICMgRklYTUUgc2hvdWxkIHdlIGdyYWIgYXQgbGVhc3Qgb25lIHNvdXJjZSBmaWxlIHdpdGggYSBsaWNlbnNlIGhlYWRlciBhbmQgYWRkIHRoYXQgdG9vPworCisgICAgcmV0dXJuIGxpY2Vuc2VzCisKK2RlZiByZWFkX3BrZ2NvbmZpZ19wcm92aWRlcyhkKToKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKyAgICBwa2dtYXAgPSB7fQorICAgIGZvciBmbiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsICdzaGxpYnMyJywgJyoucGNsaXN0JykpOgorICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgcGtnbWFwW29zLnBhdGguYmFzZW5hbWUobGluZS5yc3RyaXAoKSldID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZuKSlbMF0KKyAgICByZWNpcGVtYXAgPSB7fQorICAgIGZvciBwYywgcGtnIGluIHBrZ21hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgJ3J1bnRpbWUnLCBwa2cpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFmaWxlKToKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUE46ICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlbWFwW3BjXSA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgcmV0dXJuIHJlY2lwZW1hcAorCitkZWYgY29udmVydF9wa2dpbmZvKHBrZ2luZm9maWxlKToKKyAgICB2YWx1ZXMgPSB7fQorICAgIHdpdGggb3Blbihwa2dpbmZvZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgaW5kZXNjOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydERVNDUklQVElPTiddICs9ICcgJyArIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoJzogJywgMSkKKyAgICAgICAgICAgICAgICBrZXkgPSBsaW5lWzBdCisgICAgICAgICAgICAgICAgdmFsdWUgPSBsaW5lWzFdCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdMSUNFTlNFJzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiB2YWx1ZS5zcGxpdCgnLCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZGVwLnNwbGl0KClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZCA9IGRlcG1hcC5nZXQoZGVwLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzLmFwcGVuZChtYXBwZWQpCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0xpY2Vuc2UnOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ0xJQ0VOU0UnXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ1N1bW1hcnknOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ1NVTU1BUlknXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ0Rlc2NyaXB0aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydERVNDUklQVElPTiddID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaW5kZXNjID0gVHJ1ZQorICAgIHJldHVybiB2YWx1ZXMKKworZGVmIGNvbnZlcnRfZGViaWFuKGRlYnBhdGgpOgorICAgICMgRklYTUUgZXh0ZW5kIHRoaXMgbWFwcGluZyAtIHBlcmhhcHMgdXNlIGRpc3Ryb19hbGlhcy5pbmM/CisgICAgZGVwbWFwID0geydsaWJ6LWRldic6ICd6bGliJ30KKworICAgIHZhbHVlcyA9IHt9CisgICAgZGVwZW5kcyA9IFtdCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkZWJwYXRoLCAnY29udHJvbCcpKSBhcyBmOgorICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgaW5kZXNjOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcgVGhpcyBwYWNrYWdlIGNvbnRhaW5zJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlc2MgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWydERVNDUklQVElPTiddICs9ICcgJyArIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgICAgIGtleSA9IGxpbmVbMF0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmVbMV0KKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ0J1aWxkLURlcGVuZHMnOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIHZhbHVlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBkZXAuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkID0gZGVwbWFwLmdldChkZXAsICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMuYXBwZW5kKG1hcHBlZCkKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnU2VjdGlvbic6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1snU0VDVElPTiddID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAnRGVzY3JpcHRpb24nOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ1NVTU1BUlknXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGluZGVzYyA9IFRydWUKKworICAgIGlmIGRlcGVuZHM6CisgICAgICAgIHZhbHVlc1snREVQRU5EUyddID0gJyAnLmpvaW4oZGVwZW5kcykKKworICAgIHJldHVybiB2YWx1ZXMKKworCitkZWYgcmVnaXN0ZXJfY29tbWFuZChzdWJwYXJzZXJzKToKKyAgICBwYXJzZXJfY3JlYXRlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjcmVhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ3JlYXRlIGEgbmV3IHJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nQ3JlYXRlcyBhIG5ldyByZWNpcGUgZnJvbSBhIHNvdXJjZSB0cmVlJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnc291cmNlJywgaGVscD0nUGF0aCBvciBVUkwgdG8gc291cmNlJykKKyAgICBwYXJzZXJfY3JlYXRlLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRmaWxlJywgaGVscD0nU3BlY2lmeSBmaWxlbmFtZSBmb3IgcmVjaXBlIHRvIGNyZWF0ZScsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyX2NyZWF0ZS5hZGRfYXJndW1lbnQoJy1tJywgJy0tbWFjaGluZScsIGhlbHA9J01ha2UgcmVjaXBlIG1hY2hpbmUtc3BlY2lmaWMgYXMgb3Bwb3NlZCB0byBhcmNoaXRlY3R1cmUtc3BlY2lmaWMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCcteCcsICctLWV4dHJhY3QtdG8nLCBtZXRhdmFyPSdFWFRSQUNUUEFUSCcsIGhlbHA9J0Fzc3VtaW5nIHNvdXJjZSBpcyBhIFVSTCwgZmV0Y2ggaXQgYW5kIGV4dHJhY3QgaXQgdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYXMgJShtZXRhdmFyKXMnKQorICAgIHBhcnNlcl9jcmVhdGUuYWRkX2FyZ3VtZW50KCctVicsICctLXZlcnNpb24nLCBoZWxwPSdWZXJzaW9uIHRvIHVzZSB3aXRoaW4gcmVjaXBlIChQViknKQorICAgIHBhcnNlcl9jcmVhdGUuc2V0X2RlZmF1bHRzKGZ1bmM9Y3JlYXRlX3JlY2lwZSkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkgYi9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE0YTUzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvcmVjaXBldG9vbC9jcmVhdGVfYnVpbGRzeXMucHkKQEAgLTAsMCArMSwzMTYgQEAKKyMgUmVjaXBlIGNyZWF0aW9uIHRvb2wgLSBjcmVhdGUgY29tbWFuZCBidWlsZCBzeXN0ZW0gaGFuZGxlcnMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitpbXBvcnQgcmUKK2ltcG9ydCBsb2dnaW5nCitmcm9tIHJlY2lwZXRvb2wuY3JlYXRlIGltcG9ydCBSZWNpcGVIYW5kbGVyLCByZWFkX3BrZ2NvbmZpZ19wcm92aWRlcworCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigncmVjaXBldG9vbCcpCisKK3RpbmZvaWwgPSBOb25lCisKK2RlZiB0aW5mb2lsX2luaXQoaW5zdGFuY2UpOgorICAgIGdsb2JhbCB0aW5mb2lsCisgICAgdGluZm9pbCA9IGluc3RhbmNlCisKK2NsYXNzIENtYWtlUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnQ01ha2VMaXN0cy50eHQnXSk6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnY21ha2UnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFNwZWNpZnkgYW55IG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBjbWFrZSB1c2luZyBFWFRSQV9PRUNNQUtFOicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ0VYVFJBX09FQ01BS0UgPSAiIicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFNjb25zUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnU0NvbnN0cnVjdCcsICdTY29uc3RydWN0JywgJ3Njb25zdHJ1Y3QnXSk6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnc2NvbnMnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFNwZWNpZnkgYW55IG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBzY29ucyB1c2luZyBFWFRSQV9PRVNDT05TOicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJ0VYVFJBX09FU0NPTlMgPSAiIicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIFFtYWtlUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnKi5wcm8nXSk6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgncW1ha2UyJykKKyAgICAgICAgICAgIGhhbmRsZWQuYXBwZW5kKCdidWlsZHN5c3RlbScpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgQXV0b3Rvb2xzUmVjaXBlSGFuZGxlcihSZWNpcGVIYW5kbGVyKToKKyAgICBkZWYgcHJvY2VzcyhzZWxmLCBzcmN0cmVlLCBjbGFzc2VzLCBsaW5lc19iZWZvcmUsIGxpbmVzX2FmdGVyLCBoYW5kbGVkKToKKyAgICAgICAgaWYgJ2J1aWxkc3lzdGVtJyBpbiBoYW5kbGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgYXV0b2NvbmYgPSBGYWxzZQorICAgICAgICBpZiBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydjb25maWd1cmUuYWMnLCAnY29uZmlndXJlLmluJ10pOgorICAgICAgICAgICAgYXV0b2NvbmYgPSBUcnVlCisgICAgICAgICAgICB2YWx1ZXMgPSBBdXRvdG9vbHNSZWNpcGVIYW5kbGVyLmV4dHJhY3RfYXV0b3Rvb2xzX2RlcHMobGluZXNfYmVmb3JlLCBzcmN0cmVlKQorICAgICAgICAgICAgY2xhc3Nlcy5leHRlbmQodmFsdWVzLnBvcCgnaW5oZXJpdCcsICcnKS5zcGxpdCgpKQorICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyVzID0gIiVzIicgJSAodmFyLCB2YWx1ZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25mZmlsZSA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ2NvbmZpZ3VyZSddKQorICAgICAgICAgICAgaWYgY29uZmZpbGU6CisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGlzIGlzIGp1c3QgYSBwcmUtZ2VuZXJhdGVkIGF1dG9jb25mIGNvbmZpZ3VyZSBzY3JpcHQKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY29uZmZpbGVbMF0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTApOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ0dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYnIGluIGYucmVhZGxpbmUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29uZiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGF1dG9jb25mOgorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBpZiB0aGlzIHNvZnR3YXJlIGlzIG5vdCBjYXBhYmxlIG9mIGJlaW5nIGJ1aWx0IGluIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyMgZnJvbSB0aGUgc291cmNlLCB5b3Ugc2hvdWxkIHJlcGxhY2UgYXV0b3Rvb2xzIHdpdGggYXV0b3Rvb2xzLWJyb2tlbnNlcCBpbiB0aGUnKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBpbmhlcml0IGxpbmUnKQorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoJ2F1dG90b29scycpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgU3BlY2lmeSBhbnkgb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IHVzaW5nIEVYVFJBX09FQ09ORjonKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCdFWFRSQV9PRUNPTkYgPSAiIicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdF9hdXRvdG9vbHNfZGVwcyhvdXRsaW5lcywgc3JjdHJlZSwgYWNmaWxlPU5vbmUpOgorICAgICAgICBpbXBvcnQgc2hsZXgKKyAgICAgICAgaW1wb3J0IG9lLnBhY2thZ2UKKworICAgICAgICB2YWx1ZXMgPSB7fQorICAgICAgICBpbmhlcml0cyA9IFtdCisKKyAgICAgICAgIyBGSVhNRSB0aGlzIG1hcHBpbmcgaXMgdmVyeSB0aGluCisgICAgICAgIHByb2dtYXAgPSB7J2ZsZXgnOiAnZmxleC1uYXRpdmUnLAorICAgICAgICAgICAgICAgICdiaXNvbic6ICdiaXNvbi1uYXRpdmUnLAorICAgICAgICAgICAgICAgICdtNCc6ICdtNC1uYXRpdmUnfQorICAgICAgICBwcm9nY2xhc3NtYXAgPSB7J2djb25mdG9vbC0yJzogJ2djb25mJywKKyAgICAgICAgICAgICAgICAncGtnLWNvbmZpZyc6ICdwa2djb25maWcnfQorCisgICAgICAgIGlnbm9yZWRlcHMgPSBbJ2djYy1ydW50aW1lJywgJ2dsaWJjJywgJ3VjbGliYyddCisKKyAgICAgICAgcGtnX3JlID0gcmUuY29tcGlsZSgnUEtHX0NIRUNLX01PRFVMRVNcKFxbP1thLXpBLVowLTldKlxdPywgXFs/KFteLFxdXSopWyksXS4qJykKKyAgICAgICAgbGliX3JlID0gcmUuY29tcGlsZSgnQUNfQ0hFQ0tfTElCXChcWz8oW2EtekEtWjAtOV0qKVxdPywgLionKQorICAgICAgICBwcm9nc19yZSA9IHJlLmNvbXBpbGUoJ19QUk9HUz9cKFxbP1thLXpBLVowLTldKlxdPywgXFs/KFteLFxdXSopXF0/WyksXS4qJykKKyAgICAgICAgZGVwX3JlID0gcmUuY29tcGlsZSgnKFteID48PV0rKSggWzw+PV0rIFteID48PV0rKT8nKQorCisgICAgICAgICMgQnVpbGQgdXAgbGliIGxpYnJhcnktPnBhY2thZ2UgbWFwcGluZworICAgICAgICBzaGxpYl9wcm92aWRlcnMgPSBvZS5wYWNrYWdlLnJlYWRfc2hsaWJfcHJvdmlkZXJzKHRpbmZvaWwuY29uZmlnX2RhdGEpCisgICAgICAgIGxpYmRpciA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorICAgICAgICBiYXNlX2xpYmRpciA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdiYXNlX2xpYmRpcicsIFRydWUpCisgICAgICAgIGxpYnBhdGhzID0gbGlzdChzZXQoW2Jhc2VfbGliZGlyLCBsaWJkaXJdKSkKKyAgICAgICAgbGlibmFtZV9yZSA9IHJlLmNvbXBpbGUoJ15saWIoLispXC5zby4qJCcpCisgICAgICAgIHBrZ2xpYm1hcCA9IHt9CisgICAgICAgIGZvciBsaWIsIGl0ZW0gaW4gc2hsaWJfcHJvdmlkZXJzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIHBhdGgsIHBrZyBpbiBpdGVtLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHBhdGggaW4gbGlicGF0aHM6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IGxpYm5hbWVfcmUubWF0Y2gobGliKQorICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaWJuYW1lID0gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGlibmFtZSBpbiBwa2dsaWJtYXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnbGlibWFwW2xpYm5hbWVdID0gcGtnWzBdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3VuYWJsZSB0byBleHRyYWN0IGxpYnJhcnkgbmFtZSBmcm9tICVzJyAlIGxpYikKKworICAgICAgICAjIE5vdyB0dXJuIGl0IGludG8gYSBsaWJyYXJ5LT5yZWNpcGUgbWFwcGluZworICAgICAgICByZWNpcGVsaWJtYXAgPSB7fQorICAgICAgICBwa2dkYXRhX2RpciA9IHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgICAgIGZvciBsaWJuYW1lLCBwa2cgaW4gcGtnbGlibWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGtnKSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnUE46Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjaXBlbGlibWFwW2xpYm5hbWVdID0gbGluZS5zcGxpdCgnOicsIDEpWy0xXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGlvZToKKyAgICAgICAgICAgICAgICBpZiBpb2UuZXJybm8gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ3VuYWJsZSB0byBmaW5kIGEgcGtnZGF0YSBmaWxlIGZvciBwYWNrYWdlICVzJyAlIHBrZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgU2luY2UgYSBjb25maWd1cmUuYWMgZmlsZSBpcyBlc3NlbnRpYWxseSBhIHByb2dyYW0sIHRoaXMgaXMgb25seSBldmVyIGdvaW5nIHRvIGJlCisgICAgICAgICMgYSBoYWNrIHVuZm9ydHVuYXRlbHk7IGJ1dCBpdCBvdWdodCB0byBiZSBlbm91Z2ggb2YgYW4gYXBwcm94aW1hdGlvbgorICAgICAgICBpZiBhY2ZpbGU6CisgICAgICAgICAgICBzcmNmaWxlcyA9IFthY2ZpbGVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcmNmaWxlcyA9IFJlY2lwZUhhbmRsZXIuY2hlY2tmaWxlcyhzcmN0cmVlLCBbJ2NvbmZpZ3VyZS5hYycsICdjb25maWd1cmUuaW4nXSkKKyAgICAgICAgcGNkZXBzID0gW10KKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIHVubWFwcGVkID0gW10KKyAgICAgICAgdW5tYXBwZWRsaWJzID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHNyY2ZpbGVzWzBdLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmICdQS0dfQ0hFQ0tfTU9EVUxFUycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gcGtnX3JlLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBkZXBfcmUuZmluZGFsbChyZXMuZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNkZXBzLmV4dGVuZChbeFswXSBmb3IgeCBpbiByZXNdKQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cy5hcHBlbmQoJ3BrZ2NvbmZpZycpCisgICAgICAgICAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCdBTV9HTlVfR0VUVEVYVCcpOgorICAgICAgICAgICAgICAgICAgICBpbmhlcml0cy5hcHBlbmQoJ2dldHRleHQnKQorICAgICAgICAgICAgICAgIGVsaWYgJ0FDX0NIRUNLX1BST0cnIGluIGxpbmUgb3IgJ0FDX1BBVEhfUFJPRycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gcHJvZ3NfcmUuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9nIGluIHNobGV4LnNwbGl0KHJlcy5ncm91cCgxKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZyA9IHByb2cuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2djbGFzcyA9IHByb2djbGFzc21hcC5nZXQocHJvZywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9nY2xhc3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRzLmFwcGVuZChwcm9nY2xhc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ2RlcCA9IHByb2dtYXAuZ2V0KHByb2csIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb2dkZXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChwcm9nZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByb2cuc3RhcnRzd2l0aCgnJCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkLmFwcGVuZChwcm9nKQorICAgICAgICAgICAgICAgIGVsaWYgJ0FDX0NIRUNLX0xJQicgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gbGliX3JlLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaWIgPSByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYmRlcCA9IHJlY2lwZWxpYm1hcC5nZXQobGliLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGliZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGxpYmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGliZGVwIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaWIuc3RhcnRzd2l0aCgnJCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXBwZWRsaWJzLmFwcGVuZChsaWIpCisgICAgICAgICAgICAgICAgZWxpZiAnQUNfUEFUSF9YJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZCgnbGlieDExJykKKworICAgICAgICBpZiB1bm1hcHBlZDoKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyBOT1RFOiB0aGUgZm9sbG93aW5nIHByb2cgZGVwZW5kZW5jaWVzIGFyZSB1bmtub3duLCBpZ25vcmluZzogJXMnICUgJyAnLmpvaW4odW5tYXBwZWQpKQorCisgICAgICAgIGlmIHVubWFwcGVkbGliczoKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyBOT1RFOiB0aGUgZm9sbG93aW5nIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSB1bmtub3duLCBpZ25vcmluZzogJXMnICUgJyAnLmpvaW4odW5tYXBwZWRsaWJzKSkKKyAgICAgICAgICAgIG91dGxpbmVzLmFwcGVuZCgnIyAgICAgICAodGhpcyBpcyBiYXNlZCBvbiByZWNpcGVzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYnVpbHQgYW5kIHBhY2thZ2VkKScpCisKKyAgICAgICAgcmVjaXBlbWFwID0gcmVhZF9wa2djb25maWdfcHJvdmlkZXModGluZm9pbC5jb25maWdfZGF0YSkKKyAgICAgICAgdW5tYXBwZWQgPSBbXQorICAgICAgICBmb3IgcGNkZXAgaW4gcGNkZXBzOgorICAgICAgICAgICAgcmVjaXBlID0gcmVjaXBlbWFwLmdldChwY2RlcCwgTm9uZSkKKyAgICAgICAgICAgIGlmIHJlY2lwZToKKyAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChyZWNpcGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwY2RlcC5zdGFydHN3aXRoKCckJyk6CisgICAgICAgICAgICAgICAgICAgIHVubWFwcGVkLmFwcGVuZChwY2RlcCkKKworICAgICAgICBkZXBzID0gc2V0KGRlcHMpLmRpZmZlcmVuY2Uoc2V0KGlnbm9yZWRlcHMpKQorCisgICAgICAgIGlmIHVubWFwcGVkOgorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcjIE5PVEU6IHVuYWJsZSB0byBtYXAgdGhlIGZvbGxvd2luZyBwa2ctY29uZmlnIGRlcGVuZGVuY2llczogJXMnICUgJyAnLmpvaW4odW5tYXBwZWQpKQorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKCcjICAgICAgICh0aGlzIGlzIGJhc2VkIG9uIHJlY2lwZXMgdGhhdCBoYXZlIHByZXZpb3VzbHkgYmVlbiBidWlsdCBhbmQgcGFja2FnZWQpJykKKworICAgICAgICBpZiBkZXBzOgorICAgICAgICAgICAgdmFsdWVzWydERVBFTkRTJ10gPSAnICcuam9pbihkZXBzKQorCisgICAgICAgIGlmIGluaGVyaXRzOgorICAgICAgICAgICAgdmFsdWVzWydpbmhlcml0J10gPSAnICcuam9pbihsaXN0KHNldChpbmhlcml0cykpKQorCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworCitjbGFzcyBNYWtlZmlsZVJlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG1ha2VmaWxlID0gUmVjaXBlSGFuZGxlci5jaGVja2ZpbGVzKHNyY3RyZWUsIFsnTWFrZWZpbGUnXSkKKyAgICAgICAgaWYgbWFrZWZpbGU6CisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgTk9URTogdGhpcyBpcyBhIE1ha2VmaWxlLW9ubHkgcGllY2Ugb2Ygc29mdHdhcmUsIHNvIHdlIGNhbm5vdCBnZW5lcmF0ZSBtdWNoIG9mIHRoZScpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgcmVjaXBlIGF1dG9tYXRpY2FsbHkgLSB5b3Ugd2lsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIE1ha2VmaWxlIHlvdXJzZWxmIGFuZCBlbnN1cmUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLicpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisKKyAgICAgICAgICAgIHNjYW5maWxlID0gb3MucGF0aC5qb2luKHNyY3RyZWUsICdjb25maWd1cmUuc2NhbicpCisgICAgICAgICAgICBza2lwc2NhbiA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBiYi5wcm9jZXNzLnJ1bignYXV0b3NjYW4nLCBjd2Q9c3JjdHJlZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBiYi5wcm9jZXNzLkV4ZWN1dGlvbkVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2tpcHNjYW4gPSBUcnVlCisgICAgICAgICAgICBpZiBzY2FuZmlsZSBhbmQgb3MucGF0aC5leGlzdHMoc2NhbmZpbGUpOgorICAgICAgICAgICAgICAgIHZhbHVlcyA9IEF1dG90b29sc1JlY2lwZUhhbmRsZXIuZXh0cmFjdF9hdXRvdG9vbHNfZGVwcyhsaW5lc19iZWZvcmUsIHNyY3RyZWUsIGFjZmlsZT1zY2FuZmlsZSkKKyAgICAgICAgICAgICAgICBjbGFzc2VzLmV4dGVuZCh2YWx1ZXMucG9wKCdpbmhlcml0JywgJycpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gdmFsdWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiB2YXIgPT0gJ0RFUEVORFMnOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnIyBOT1RFOiBzb21lIG9mIHRoZXNlIGRlcGVuZGVuY2llcyBtYXkgYmUgb3B0aW9uYWwsIGNoZWNrIHRoZSBNYWtlZmlsZSBhbmQvb3IgdXBzdHJlYW0gZG9jdW1lbnRhdGlvbicpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZS5hcHBlbmQoJyVzID0gIiVzIicgJSAodmFyLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgbGluZXNfYmVmb3JlLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBbJ2NvbmZpZ3VyZS5zY2FuJywgJ2F1dG9zY2FuLmxvZyddOgorICAgICAgICAgICAgICAgICAgICBmcCA9IG9zLnBhdGguam9pbihzcmN0cmVlLCBmKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmcCk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZnApCisKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19jb25maWd1cmUnLCBbJyMgU3BlY2lmeSBhbnkgbmVlZGVkIGNvbmZpZ3VyZSBjb21tYW5kcyBoZXJlJ10pCisKKyAgICAgICAgICAgIGZ1bmMgPSBbXQorICAgICAgICAgICAgZnVuYy5hcHBlbmQoJyMgWW91IHdpbGwgYWxtb3N0IGNlcnRhaW5seSBuZWVkIHRvIGFkZCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBoZXJlJykKKyAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCdvZV9ydW5tYWtlJykKKyAgICAgICAgICAgIHNlbGYuZ2VuZnVuY3Rpb24obGluZXNfYWZ0ZXIsICdkb19jb21waWxlJywgZnVuYykKKworICAgICAgICAgICAgaW5zdGFsbHRhcmdldCA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IGJiLnByb2Nlc3MucnVuKCdtYWtlIC1xbiBpbnN0YWxsJywgY3dkPXNyY3RyZWUsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5FeGVjdXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXhpdGNvZGUgIT0gMToKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbHRhcmdldCA9IEZhbHNlCisgICAgICAgICAgICBmdW5jID0gW10KKyAgICAgICAgICAgIGlmIGluc3RhbGx0YXJnZXQ6CisgICAgICAgICAgICAgICAgZnVuYy5hcHBlbmQoJyMgVGhpcyBpcyBhIGd1ZXNzOyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBtYXkgYmUgcmVxdWlyZWQnKQorICAgICAgICAgICAgICAgIG1ha2VhcmdzID0gJycKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGVbMF0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTAwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdERVNURElSJyBpbiBmLnJlYWRsaW5lKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZWFyZ3MgKz0gIiAnREVTVERJUj0ke0R9JyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCdvZV9ydW5tYWtlIGluc3RhbGwlcycgJSBtYWtlYXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuYy5hcHBlbmQoJyMgTk9URTogdW5hYmxlIHRvIGRldGVybWluZSB3aGF0IHRvIHB1dCBoZXJlIC0gdGhlcmUgaXMgYSBNYWtlZmlsZSBidXQgbm8nKQorICAgICAgICAgICAgICAgIGZ1bmMuYXBwZW5kKCcjIHRhcmdldCBuYW1lZCAiaW5zdGFsbCIsIHNvIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lIHRoaXMgeW91cnNlbGYnKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2luc3RhbGwnLCBmdW5jKQorCisgICAgICAgICAgICBoYW5kbGVkLmFwcGVuZCgnYnVpbGRzeXN0ZW0nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIE5PVEU6IG5vIE1ha2VmaWxlIGZvdW5kLCB1bmFibGUgdG8gZGV0ZXJtaW5lIHdoYXQgbmVlZHMgdG8gYmUgZG9uZScpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJycpCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9fY29uZmlndXJlJywgWycjIFNwZWNpZnkgYW55IG5lZWRlZCBjb25maWd1cmUgY29tbWFuZHMgaGVyZSddKQorICAgICAgICAgICAgc2VsZi5nZW5mdW5jdGlvbihsaW5lc19hZnRlciwgJ2RvX2NvbXBpbGUnLCBbJyMgU3BlY2lmeSBjb21waWxhdGlvbiBjb21tYW5kcyBoZXJlJ10pCisgICAgICAgICAgICBzZWxmLmdlbmZ1bmN0aW9uKGxpbmVzX2FmdGVyLCAnZG9faW5zdGFsbCcsIFsnIyBTcGVjaWZ5IGluc3RhbGwgY29tbWFuZHMgaGVyZSddKQorCisKK2RlZiByZWdpc3Rlcl9yZWNpcGVfaGFuZGxlcnMoaGFuZGxlcnMpOgorICAgICMgVGhlc2UgYXJlIGluIGEgc3BlY2lmaWMgb3JkZXIgc28gdGhhdCB0aGUgcmlnaHQgb25lIGlzIGRldGVjdGVkIGZpcnN0CisgICAgaGFuZGxlcnMuYXBwZW5kKENtYWtlUmVjaXBlSGFuZGxlcigpKQorICAgIGhhbmRsZXJzLmFwcGVuZChBdXRvdG9vbHNSZWNpcGVIYW5kbGVyKCkpCisgICAgaGFuZGxlcnMuYXBwZW5kKFNjb25zUmVjaXBlSGFuZGxlcigpKQorICAgIGhhbmRsZXJzLmFwcGVuZChRbWFrZVJlY2lwZUhhbmRsZXIoKSkKKyAgICBoYW5kbGVycy5hcHBlbmQoTWFrZWZpbGVSZWNpcGVIYW5kbGVyKCkpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkgYi9zY3JpcHRzL2xpYi9yZWNpcGV0b29sL2NyZWF0ZV9idWlsZHN5c19weXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZjJhMAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3JlY2lwZXRvb2wvY3JlYXRlX2J1aWxkc3lzX3B5dGhvbi5weQpAQCAtMCwwICsxLDcxNiBAQAorIyBSZWNpcGUgY3JlYXRpb24gdG9vbCAtIGNyZWF0ZSBidWlsZCBzeXN0ZW0gaGFuZGxlciBmb3IgcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBNZW50b3IgR3JhcGhpY3MgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBhc3QKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5CitpbXBvcnQgZW1haWwKK2ltcG9ydCBpbXAKK2ltcG9ydCBnbG9iCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitmcm9tIHJlY2lwZXRvb2wuY3JlYXRlIGltcG9ydCBSZWNpcGVIYW5kbGVyCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdyZWNpcGV0b29sJykKKwordGluZm9pbCA9IE5vbmUKKworCitkZWYgdGluZm9pbF9pbml0KGluc3RhbmNlKToKKyAgICBnbG9iYWwgdGluZm9pbAorICAgIHRpbmZvaWwgPSBpbnN0YW5jZQorCisKK2NsYXNzIFB5dGhvblJlY2lwZUhhbmRsZXIoUmVjaXBlSGFuZGxlcik6CisgICAgYmFzZV9wa2dkZXBzID0gWydweXRob24tY29yZSddCisgICAgZXhjbHVkZWRfcGtnZGVwcyA9IFsncHl0aG9uLWRiZyddCisgICAgIyBvcy5wYXRoIGlzIHByb3ZpZGVkIGJ5IHB5dGhvbi1jb3JlCisgICAgYXNzdW1lX3Byb3ZpZGVkID0gWydidWlsdGlucycsICdvcy5wYXRoJ10KKyAgICAjIEFzc3VtZXMgdGhhdCB0aGUgaG9zdCBweXRob24gYnVpbHRpbl9tb2R1bGVfbmFtZXMgaXMgc2FuZSBmb3IgdGFyZ2V0IHRvbworICAgIGFzc3VtZV9wcm92aWRlZCA9IGFzc3VtZV9wcm92aWRlZCArIGxpc3Qoc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzKQorCisgICAgYmJ2YXJfbWFwID0geworICAgICAgICAnTmFtZSc6ICdQTicsCisgICAgICAgICdWZXJzaW9uJzogJ1BWJywKKyAgICAgICAgJ0hvbWUtcGFnZSc6ICdIT01FUEFHRScsCisgICAgICAgICdTdW1tYXJ5JzogJ1NVTU1BUlknLAorICAgICAgICAnRGVzY3JpcHRpb24nOiAnREVTQ1JJUFRJT04nLAorICAgICAgICAnTGljZW5zZSc6ICdMSUNFTlNFJywKKyAgICAgICAgJ1JlcXVpcmVzJzogJ1JERVBFTkRTXyR7UE59JywKKyAgICAgICAgJ1Byb3ZpZGVzJzogJ1JQUk9WSURFU18ke1BOfScsCisgICAgICAgICdPYnNvbGV0ZXMnOiAnUlJFUExBQ0VTXyR7UE59JywKKyAgICB9CisgICAgIyBQTi9QViBhcmUgYWxyZWFkeSBzZXQgYnkgcmVjaXBldG9vbCBjb3JlICYgZGVzYyBjYW4gYmUgZXh0cmVtZWx5IGxvbmcKKyAgICBleGNsdWRlZF9maWVsZHMgPSBbCisgICAgICAgICdOYW1lJywKKyAgICAgICAgJ1ZlcnNpb24nLAorICAgICAgICAnRGVzY3JpcHRpb24nLAorICAgIF0KKyAgICBzZXR1cF9wYXJzZV9tYXAgPSB7CisgICAgICAgICdVcmwnOiAnSG9tZS1wYWdlJywKKyAgICAgICAgJ0NsYXNzaWZpZXJzJzogJ0NsYXNzaWZpZXInLAorICAgICAgICAnRGVzY3JpcHRpb24nOiAnU3VtbWFyeScsCisgICAgfQorICAgIHNldHVwYXJnX21hcCA9IHsKKyAgICAgICAgJ0hvbWUtcGFnZSc6ICd1cmwnLAorICAgICAgICAnQ2xhc3NpZmllcic6ICdjbGFzc2lmaWVycycsCisgICAgICAgICdTdW1tYXJ5JzogJ2Rlc2NyaXB0aW9uJywKKyAgICAgICAgJ0Rlc2NyaXB0aW9uJzogJ2xvbmctZGVzY3JpcHRpb24nLAorICAgIH0KKyAgICAjIFZhbHVlcyB3aGljaCBhcmUgbGlzdHMsIHVzZWQgYnkgdGhlIHNldHVwLnB5IGFyZ3VtZW50IGJhc2VkIG1ldGFkYXRhCisgICAgIyBleHRyYWN0aW9uIG1ldGhvZCwgdG8gZGV0ZXJtaW5lIGhvdyB0byBwcm9jZXNzIHRoZSBzZXR1cC5weSBvdXRwdXQuCisgICAgc2V0dXBhcmdfbGlzdF9maWVsZHMgPSBbCisgICAgICAgICdDbGFzc2lmaWVyJywKKyAgICAgICAgJ1JlcXVpcmVzJywKKyAgICAgICAgJ1Byb3ZpZGVzJywKKyAgICAgICAgJ09ic29sZXRlcycsCisgICAgICAgICdQbGF0Zm9ybScsCisgICAgICAgICdTdXBwb3J0ZWQtUGxhdGZvcm0nLAorICAgIF0KKyAgICBzZXR1cGFyZ19tdWx0aV9saW5lX3ZhbHVlcyA9IFsnRGVzY3JpcHRpb24nXQorICAgIHJlcGxhY2VtZW50cyA9IFsKKyAgICAgICAgKCdMaWNlbnNlJywgcicgJywgJy0nKSwKKyAgICAgICAgKCdMaWNlbnNlJywgcictTGljZW5zZSQnLCAnJyksCisgICAgICAgICgnTGljZW5zZScsIHInXlVOS05PV04kJywgJycpLAorCisgICAgICAgICMgUmVtb3ZlIGN1cnJlbnRseSB1bmhhbmRsZWQgdmVyc2lvbiBudW1iZXJzIGZyb20gdGhlc2UgdmFyaWFibGVzCisgICAgICAgICgnUmVxdWlyZXMnLCByJyAqXChbXildKlwpJywgJycpLAorICAgICAgICAoJ1Byb3ZpZGVzJywgcicgKlwoW14pXSpcKScsICcnKSwKKyAgICAgICAgKCdPYnNvbGV0ZXMnLCByJyAqXChbXildKlwpJywgJycpLAorICAgICAgICAoJ0luc3RhbGwtcmVxdWlyZXMnLCByJ14oW14+PD0gXSspLionLCByJ1wxJyksCisgICAgICAgICgnRXh0cmFzLXJlcXVpcmUnLCByJ14oW14+PD0gXSspLionLCByJ1wxJyksCisgICAgICAgICgnVGVzdHMtcmVxdWlyZScsIHInXihbXj48PSBdKykuKicsIHInXDEnKSwKKworICAgICAgICAjIFJlbW92ZSB1bmhhbmRsZWQgZGVwZW5kZW5jeSBvbiBwYXJ0aWN1bGFyIGZlYXR1cmVzIChlLmcuIGZvb1tQREZdKQorICAgICAgICAoJ0luc3RhbGwtcmVxdWlyZXMnLCByJ1xbW15cXV0rXF0kJywgJycpLAorICAgIF0KKworICAgIGNsYXNzaWZpZXJfbGljZW5zZV9tYXAgPSB7CisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKEFGTCknOiAnQUZMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlJzogJ0FwYWNoZScsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UnOiAnQVBTTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBBcnRpc3RpYyBMaWNlbnNlJzogJ0FydGlzdGljJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEF0dHJpYnV0aW9uIEFzc3VyYW5jZSBMaWNlbnNlJzogJ0FBTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBCU0QgTGljZW5zZSc6ICdCU0QnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogQ29tbW9uIFB1YmxpYyBMaWNlbnNlJzogJ0NQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBFaWZmZWwgRm9ydW0gTGljZW5zZSc6ICdFRkwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgMS4wIChFVVBMIDEuMCknOiAnRVVQTC0xLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgMS4xIChFVVBMIDEuMSknOiAnRVVQTC0xLjEnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIG9yIGxhdGVyIChBR1BMdjMrKSc6ICdBR1BMLTMuMCsnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzJzogJ0FHUEwtMy4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSAoRkRMKSc6ICdHRkRMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpJzogJ0dQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiAoR1BMdjIpJzogJ0dQTC0yLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgb3IgbGF0ZXIgKEdQTHYyKyknOiAnR1BMLTIuMCsnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgKEdQTHYzKSc6ICdHUEwtMy4wJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIG9yIGxhdGVyIChHUEx2MyspJzogJ0dQTC0zLjArJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiAoTEdQTHYyKSc6ICdMR1BMLTIuMCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgb3IgbGF0ZXIgKExHUEx2MispJzogJ0xHUEwtMi4wKycsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjMgKExHUEx2MyknOiAnTEdQTC0zLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYzIG9yIGxhdGVyIChMR1BMdjMrKSc6ICdMR1BMLTMuMCsnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogR05VIExpYnJhcnkgb3IgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpJzogJ0xHUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogSUJNIFB1YmxpYyBMaWNlbnNlJzogJ0lQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBJU0MgTGljZW5zZSAoSVNDTCknOiAnSVNDJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IEludGVsIE9wZW4gU291cmNlIExpY2Vuc2UnOiAnSW50ZWwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogSmFiYmVyIE9wZW4gU291cmNlIExpY2Vuc2UnOiAnSmFiYmVyJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJzogJ01JVCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVRSRSBDb2xsYWJvcmF0aXZlIFZpcnR1YWwgV29ya3NwYWNlIExpY2Vuc2UgKENWVyknOiAnQ1ZXTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNb3Rvc290byBMaWNlbnNlJzogJ01vdG9zb3RvJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4wIChNUEwpJzogJ01QTC0xLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgKE1QTCAxLjEpJzogJ01QTC0xLjEnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgKE1QTCAyLjApJzogJ01QTC0yLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTmV0aGFjayBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJzogJ05HUEwnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTm9raWEgT3BlbiBTb3VyY2UgTGljZW5zZSc6ICdOb2tpYScsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZSc6ICdPR1RTTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBQeXRob24gTGljZW5zZSAoQ05SSSBQeXRob24gTGljZW5zZSknOiAnQ05SSS1QeXRob24nLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gTGljZW5zZSc6ICdQU0YnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogUXQgUHVibGljIExpY2Vuc2UgKFFQTCknOiAnUVBMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFJpY29oIFNvdXJjZSBDb2RlIFB1YmxpYyBMaWNlbnNlJzogJ1JTQ1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFNsZWVweWNhdCBMaWNlbnNlJzogJ1NsZWVweWNhdCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBTdW4gSW5kdXN0cnkgU3RhbmRhcmRzIFNvdXJjZSBMaWNlbnNlIChTSVNTTCknOiAnLS0gIFN1biBJbmR1c3RyeSBTdGFuZGFyZHMgU291cmNlIExpY2Vuc2UgKFNJU1NMKScsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBTdW4gUHVibGljIExpY2Vuc2UnOiAnU1BMJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlJzogJ05DU0EnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogVm92aWRhIFNvZnR3YXJlIExpY2Vuc2UgMS4wJzogJ1ZTTC0xLjAnLAorICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogVzNDIExpY2Vuc2UnOiAnVzNDJywKKyAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IFguTmV0IExpY2Vuc2UnOiAnWG5ldCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBab3BlIFB1YmxpYyBMaWNlbnNlJzogJ1pQTCcsCisgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiB6bGliL2xpYnBuZyBMaWNlbnNlJzogJ1psaWInLAorICAgIH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHByb2Nlc3Moc2VsZiwgc3JjdHJlZSwgY2xhc3NlcywgbGluZXNfYmVmb3JlLCBsaW5lc19hZnRlciwgaGFuZGxlZCk6CisgICAgICAgIGlmICdidWlsZHN5c3RlbScgaW4gaGFuZGxlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydzZXR1cC5weSddKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgc2V0dXAucHkgaXMgYWx3YXlzIHBhcnNlZCB0byBnZXQgYXQgY2VydGFpbiByZXF1aXJlZCBpbmZvcm1hdGlvbiwgc3VjaCBhcworICAgICAgICAjIGRpc3R1dGlscyB2cyBzZXR1cHRvb2xzCisgICAgICAgICMKKyAgICAgICAgIyBJZiBlZ2cgaW5mbyBpcyBhdmFpbGFibGUsIHdlIHVzZSBpdCBmb3IgYm90aCBpdHMgUEtHLUlORk8gbWV0YWRhdGEKKyAgICAgICAgIyBhbmQgZm9yIGl0cyByZXF1aXJlcy50eHQgZm9yIGluc3RhbGxfcmVxdWlyZXMuCisgICAgICAgICMgSWYgUEtHLUlORk8gaXMgYXZhaWxhYmxlIGJ1dCBubyBlZ2cgaW5mbyBpcywgd2UgdXNlIHRoYXQgZm9yIG1ldGFkYXRhIGluIHByZWZlcmVuY2UgdG8KKyAgICAgICAgIyB0aGUgcGFyc2VkIHNldHVwLnB5LCBidXQgdXNlIHRoZSBpbnN0YWxsX3JlcXVpcmVzIGluZm8gZnJvbSB0aGUKKyAgICAgICAgIyBwYXJzZWQgc2V0dXAucHkuCisKKyAgICAgICAgc2V0dXBzY3JpcHQgPSBvcy5wYXRoLmpvaW4oc3JjdHJlZSwgJ3NldHVwLnB5JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2V0dXBfaW5mbywgdXNlc19zZXR1cHRvb2xzLCBzZXR1cF9ub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMgPSBzZWxmLnBhcnNlX3NldHVwX3B5KHNldHVwc2NyaXB0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIHNldHVwLnB5IikKKyAgICAgICAgICAgIHNldHVwX2luZm8sIHVzZXNfc2V0dXB0b29scywgc2V0dXBfbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zID0ge30sIFRydWUsIFtdLCBbXQorCisgICAgICAgIGVnZ2luZm8gPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNyY3RyZWUsICcqLmVnZy1pbmZvJykpCisgICAgICAgIGlmIGVnZ2luZm86CisgICAgICAgICAgICBpbmZvID0gc2VsZi5nZXRfcGtnaW5mbyhvcy5wYXRoLmpvaW4oZWdnaW5mb1swXSwgJ1BLRy1JTkZPJykpCisgICAgICAgICAgICByZXF1aXJlc190eHQgPSBvcy5wYXRoLmpvaW4oZWdnaW5mb1swXSwgJ3JlcXVpcmVzLnR4dCcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXF1aXJlc190eHQpOgorICAgICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocmVxdWlyZXNfdHh0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBpbnN0X3JlcSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGV4dHJhc19yZXEgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2ZlYXR1cmUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdbJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9mZWF0dXJlID0gbGluZVsxOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBjdXJyZW50X2ZlYXR1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFzX3JlcVtjdXJyZW50X2ZlYXR1cmVdLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0X3JlcS5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaW5mb1snSW5zdGFsbC1yZXF1aXJlcyddID0gaW5zdF9yZXEKKyAgICAgICAgICAgICAgICAgICAgaW5mb1snRXh0cmFzLXJlcXVpcmUnXSA9IGV4dHJhc19yZXEKKyAgICAgICAgZWxpZiBSZWNpcGVIYW5kbGVyLmNoZWNrZmlsZXMoc3JjdHJlZSwgWydQS0ctSU5GTyddKToKKyAgICAgICAgICAgIGluZm8gPSBzZWxmLmdldF9wa2dpbmZvKG9zLnBhdGguam9pbihzcmN0cmVlLCAnUEtHLUlORk8nKSkKKworICAgICAgICAgICAgaWYgc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiAnSW5zdGFsbC1yZXF1aXJlcycgaW4gc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1snSW5zdGFsbC1yZXF1aXJlcyddID0gc2V0dXBfaW5mb1snSW5zdGFsbC1yZXF1aXJlcyddCisgICAgICAgICAgICAgICAgaWYgJ0V4dHJhcy1yZXF1aXJlJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgICAgICBpbmZvWydFeHRyYXMtcmVxdWlyZSddID0gc2V0dXBfaW5mb1snRXh0cmFzLXJlcXVpcmUnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2V0dXBfaW5mbzoKKyAgICAgICAgICAgICAgICBpbmZvID0gc2V0dXBfaW5mbworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmZvID0gc2VsZi5nZXRfc2V0dXBfYXJnc19pbmZvKHNldHVwc2NyaXB0KQorCisgICAgICAgIHNlbGYuYXBwbHlfaW5mb19yZXBsYWNlbWVudHMoaW5mbykKKworICAgICAgICBpZiB1c2VzX3NldHVwdG9vbHM6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnc2V0dXB0b29scycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgnZGlzdHV0aWxzJykKKworICAgICAgICBpZiAnQ2xhc3NpZmllcicgaW4gaW5mbzoKKyAgICAgICAgICAgIGxpY2Vuc2VzID0gW10KKyAgICAgICAgICAgIGZvciBjbGFzc2lmaWVyIGluIGluZm9bJ0NsYXNzaWZpZXInXToKKyAgICAgICAgICAgICAgICBpZiBjbGFzc2lmaWVyIGluIHNlbGYuY2xhc3NpZmllcl9saWNlbnNlX21hcDoKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZSA9IHNlbGYuY2xhc3NpZmllcl9saWNlbnNlX21hcFtjbGFzc2lmaWVyXQorICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcy5hcHBlbmQobGljZW5zZSkKKworICAgICAgICAgICAgaWYgbGljZW5zZXM6CisgICAgICAgICAgICAgICAgaW5mb1snTGljZW5zZSddID0gJyAmICcuam9pbihsaWNlbnNlcykKKworCisgICAgICAgICMgTWFwIFBLRy1JTkZPICYgc2V0dXAucHkgZmllbGRzIHRvIGJpdGJha2UgdmFyaWFibGVzCisgICAgICAgIGJiaW5mbyA9IHt9CisgICAgICAgIGZvciBmaWVsZCwgdmFsdWVzIGluIGluZm8uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBmaWVsZCBpbiBzZWxmLmV4Y2x1ZGVkX2ZpZWxkczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBmaWVsZCBub3QgaW4gc2VsZi5iYnZhcl9tYXA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZXMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gJyAnLmpvaW4oc3RyKHYpIGZvciB2IGluIHZhbHVlcyBpZiB2KQorCisgICAgICAgICAgICBiYnZhciA9IHNlbGYuYmJ2YXJfbWFwW2ZpZWxkXQorICAgICAgICAgICAgaWYgYmJ2YXIgbm90IGluIGJiaW5mbyBhbmQgdmFsdWU6CisgICAgICAgICAgICAgICAgYmJpbmZvW2JidmFyXSA9IHZhbHVlCisKKyAgICAgICAgY29tbWVudF9saWNfbGluZSA9IE5vbmUKKyAgICAgICAgZm9yIHBvcywgbGluZSBpbiBlbnVtZXJhdGUobGlzdChsaW5lc19iZWZvcmUpKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpIGFuZCAnTElDRU5TRScgaW4gbGluZToKKyAgICAgICAgICAgICAgICBjb21tZW50X2xpY19saW5lID0gcG9zCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnTElDRU5TRSA9JykgYW5kICdMSUNFTlNFJyBpbiBiYmluZm86CisgICAgICAgICAgICAgICAgaWYgbGluZSBpbiAoJ0xJQ0VOU0UgPSAiVW5rbm93biInLCAnTElDRU5TRSA9ICJDTE9TRUQiJyk6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzX2JlZm9yZVtwb3NdID0gJ0xJQ0VOU0UgPSAie30iJy5mb3JtYXQoYmJpbmZvWydMSUNFTlNFJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gJ0xJQ0VOU0UgPSAiQ0xPU0VEIicgYW5kIGNvbW1lbnRfbGljX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc19iZWZvcmVbY29tbWVudF9saWNfbGluZTpwb3NdID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgTElDRU5TRSB2YWx1ZSBpcyBhIGJlc3QgZ3Vlc3MgLSBpdCBpcyB5b3VyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgdmFsdWUgaXMgY29tcGxldGUgYW5kIGNvcnJlY3QuJworICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIGRlbCBiYmluZm9bJ0xJQ0VOU0UnXQorCisgICAgICAgIHNyY191cmlfbGluZSA9IE5vbmUKKyAgICAgICAgZm9yIHBvcywgbGluZSBpbiBlbnVtZXJhdGUobGluZXNfYmVmb3JlKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU1JDX1VSSSA9Jyk6CisgICAgICAgICAgICAgICAgc3JjX3VyaV9saW5lID0gcG9zCisKKyAgICAgICAgaWYgYmJpbmZvOgorICAgICAgICAgICAgbWRpbmZvID0gWycnXQorICAgICAgICAgICAgZm9yIGsgaW4gc29ydGVkKGJiaW5mbyk6CisgICAgICAgICAgICAgICAgdiA9IGJiaW5mb1trXQorICAgICAgICAgICAgICAgIG1kaW5mby5hcHBlbmQoJ3t9ID0gInt9IicuZm9ybWF0KGssIHYpKQorICAgICAgICAgICAgbGluZXNfYmVmb3JlW3NyY191cmlfbGluZS0xOnNyY191cmlfbGluZS0xXSA9IG1kaW5mbworCisgICAgICAgIG1hcHBlZF9kZXBzLCB1bm1hcHBlZF9kZXBzID0gc2VsZi5zY2FuX3NldHVwX3B5dGhvbl9kZXBzKHNyY3RyZWUsIHNldHVwX2luZm8sIHNldHVwX25vbl9saXRlcmFscykKKworICAgICAgICBleHRyYXNfcmVxID0gc2V0KCkKKyAgICAgICAgaWYgJ0V4dHJhcy1yZXF1aXJlJyBpbiBpbmZvOgorICAgICAgICAgICAgZXh0cmFzX3JlcSA9IGluZm9bJ0V4dHJhcy1yZXF1aXJlJ10KKyAgICAgICAgICAgIGlmIGV4dHJhc19yZXE6CisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFRoZSBmb2xsb3dpbmcgY29uZmlncyAmIGRlcGVuZGVuY2llcyBhcmUgZnJvbSBzZXR1cHRvb2xzIGV4dHJhc19yZXF1aXJlLicpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgb3B0aW9uYWwsIGhlbmNlIGNhbiBiZSBjb250cm9sbGVkIHZpYSBQQUNLQUdFQ09ORklHLicpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFRoZSB1cHN0cmVhbSBuYW1lcyBtYXkgbm90IGNvcnJlc3BvbmQgZXhhY3RseSB0byBiaXRiYWtlIHBhY2thZ2UgbmFtZXMuJykKKyAgICAgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMnKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnIyBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGVuYWJsZSBhbGwgdGhlIG9wdGlvbmFsIGZlYXR1cmVzLicpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjUEFDS0FHRUNPTkZJRyA/PSAie30iJy5mb3JtYXQoJyAnLmpvaW4oay5sb3dlcigpIGZvciBrIGluIGV4dHJhc19yZXEuaXRlcmtleXMoKSkpKQorICAgICAgICAgICAgICAgIGZvciBmZWF0dXJlLCBmZWF0dXJlX3JlcXMgaW4gZXh0cmFzX3JlcS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgdW5tYXBwZWRfZGVwcy5kaWZmZXJlbmNlX3VwZGF0ZShmZWF0dXJlX3JlcXMpCisKKyAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9yZXFfZGVwcyA9ICgncHl0aG9uLScgKyByLnJlcGxhY2UoJy4nLCAnLScpLmxvd2VyKCkgZm9yIHIgaW4gc29ydGVkKGZlYXR1cmVfcmVxcykpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnUEFDS0FHRUNPTkZJR1t7fV0gPSAiLCwse30iJy5mb3JtYXQoZmVhdHVyZS5sb3dlcigpLCAnICcuam9pbihmZWF0dXJlX3JlcV9kZXBzKSkpCisKKyAgICAgICAgaW5zdF9yZXFzID0gc2V0KCkKKyAgICAgICAgaWYgJ0luc3RhbGwtcmVxdWlyZXMnIGluIGluZm86CisgICAgICAgICAgICBpZiBleHRyYXNfcmVxOgorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGluc3RfcmVxcyA9IGluZm9bJ0luc3RhbGwtcmVxdWlyZXMnXQorICAgICAgICAgICAgaWYgaW5zdF9yZXFzOgorICAgICAgICAgICAgICAgIHVubWFwcGVkX2RlcHMuZGlmZmVyZW5jZV91cGRhdGUoaW5zdF9yZXFzKQorCisgICAgICAgICAgICAgICAgaW5zdF9yZXFfZGVwcyA9ICgncHl0aG9uLScgKyByLnJlcGxhY2UoJy4nLCAnLScpLmxvd2VyKCkgZm9yIHIgaW4gc29ydGVkKGluc3RfcmVxcykpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgcmRlcGVuZHMgYXJlIGZyb20gc2V0dXB0b29scyBpbnN0YWxsX3JlcXVpcmVzLiBUaGVzZScpCisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIHVwc3RyZWFtIG5hbWVzIG1heSBub3QgY29ycmVzcG9uZCBleGFjdGx5IHRvIGJpdGJha2UgcGFja2FnZSBuYW1lcy4nKQorICAgICAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnUkRFUEVORFNfJHt7UE59fSArPSAie30iJy5mb3JtYXQoJyAnLmpvaW4oaW5zdF9yZXFfZGVwcykpKQorCisgICAgICAgIGlmIG1hcHBlZF9kZXBzOgorICAgICAgICAgICAgbmFtZSA9IGluZm8uZ2V0KCdOYW1lJykKKyAgICAgICAgICAgIGlmIG5hbWUgYW5kIG5hbWVbMF0gaW4gbWFwcGVkX2RlcHM6CisgICAgICAgICAgICAgICAgIyBBdHRlbXB0IHRvIGF2b2lkIHNlbGYtcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgbWFwcGVkX2RlcHMucmVtb3ZlKG5hbWVbMF0pCisgICAgICAgICAgICBtYXBwZWRfZGVwcyAtPSBzZXQoc2VsZi5leGNsdWRlZF9wa2dkZXBzKQorICAgICAgICAgICAgaWYgaW5zdF9yZXFzIG9yIGV4dHJhc19yZXE6CisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFdBUk5JTkc6IHRoZSBmb2xsb3dpbmcgcmRlcGVuZHMgYXJlIGRldGVybWluZWQgdGhyb3VnaCBiYXNpYyBhbmFseXNpcyBvZiB0aGUnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIHB5dGhvbiBzb3VyY2VzLCBhbmQgbWlnaHQgbm90IGJlIDEwMCUgYWNjdXJhdGUuJykKKyAgICAgICAgICAgIGxpbmVzX2FmdGVyLmFwcGVuZCgnUkRFUEVORFNfJHt7UE59fSArPSAie30iJy5mb3JtYXQoJyAnLmpvaW4oc29ydGVkKG1hcHBlZF9kZXBzKSkpKQorCisgICAgICAgIHVubWFwcGVkX2RlcHMgLT0gc2V0KGV4dGVuc2lvbnMpCisgICAgICAgIHVubWFwcGVkX2RlcHMgLT0gc2V0KHNlbGYuYXNzdW1lX3Byb3ZpZGVkKQorICAgICAgICBpZiB1bm1hcHBlZF9kZXBzOgorICAgICAgICAgICAgaWYgbWFwcGVkX2RlcHM6CisgICAgICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuYXBwZW5kKCcjIFdBUk5JTkc6IFdlIHdlcmUgdW5hYmxlIHRvIG1hcCB0aGUgZm9sbG93aW5nIHB5dGhvbiBwYWNrYWdlL21vZHVsZScpCisgICAgICAgICAgICBsaW5lc19hZnRlci5hcHBlbmQoJyMgZGVwZW5kZW5jaWVzIHRvIHRoZSBiaXRiYWtlIHBhY2thZ2VzIHdoaWNoIGluY2x1ZGUgdGhlbTonKQorICAgICAgICAgICAgbGluZXNfYWZ0ZXIuZXh0ZW5kKCcjICAgIHt9Jy5mb3JtYXQoZCkgZm9yIGQgaW4gc29ydGVkKHVubWFwcGVkX2RlcHMpKQorCisgICAgICAgIGhhbmRsZWQuYXBwZW5kKCdidWlsZHN5c3RlbScpCisKKyAgICBkZWYgZ2V0X3BrZ2luZm8oc2VsZiwgcGtnaW5mb19mbik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKG9wZW4ocGtnaW5mb19mbiwgJ3InKSkKKyAgICAgICAgbXNnaW5mbyA9IHt9CisgICAgICAgIGZvciBmaWVsZCBpbiBtc2cua2V5cygpOgorICAgICAgICAgICAgdmFsdWVzID0gbXNnLmdldF9hbGwoZmllbGQpCisgICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA9PSAxOgorICAgICAgICAgICAgICAgIG1zZ2luZm9bZmllbGRdID0gdmFsdWVzWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZ2luZm9bZmllbGRdID0gdmFsdWVzCisgICAgICAgIHJldHVybiBtc2dpbmZvCisKKyAgICBkZWYgcGFyc2Vfc2V0dXBfcHkoc2VsZiwgc2V0dXBzY3JpcHQ9Jy4vc2V0dXAucHknKToKKyAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzZXR1cHNjcmlwdCkgYXMgZjoKKyAgICAgICAgICAgIGluZm8sIGltcG9ydGVkX21vZHVsZXMsIG5vbl9saXRlcmFscywgZXh0ZW5zaW9ucyA9IGdhdGhlcl9zZXR1cF9pbmZvKGYpCisKKyAgICAgICAgZGVmIF9tYXAoa2V5KToKKyAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKCdfJywgJy0nKQorICAgICAgICAgICAga2V5ID0ga2V5WzBdLnVwcGVyKCkgKyBrZXlbMTpdCisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZi5zZXR1cF9wYXJzZV9tYXA6CisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5zZXR1cF9wYXJzZV9tYXBba2V5XQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgICMgTmFpdmUgbWFwcGluZyBvZiBzZXR1cCgpIGFyZ3VtZW50cyB0byBQS0ctSU5GTyBmaWVsZCBuYW1lcworICAgICAgICBmb3IgZCBpbiBbaW5mbywgbm9uX2xpdGVyYWxzXToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGQuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBuZXdfa2V5ID0gX21hcChrZXkpCisgICAgICAgICAgICAgICAgaWYgbmV3X2tleSAhPSBrZXk6CisgICAgICAgICAgICAgICAgICAgIGRlbCBkW2tleV0KKyAgICAgICAgICAgICAgICAgICAgZFtuZXdfa2V5XSA9IHZhbHVlCisKKyAgICAgICAgcmV0dXJuIGluZm8sICdzZXR1cHRvb2xzJyBpbiBpbXBvcnRlZF9tb2R1bGVzLCBub25fbGl0ZXJhbHMsIGV4dGVuc2lvbnMKKworICAgIGRlZiBnZXRfc2V0dXBfYXJnc19pbmZvKHNlbGYsIHNldHVwc2NyaXB0PScuL3NldHVwLnB5Jyk6CisgICAgICAgIGNtZCA9IFsncHl0aG9uJywgc2V0dXBzY3JpcHRdCisgICAgICAgIGluZm8gPSB7fQorICAgICAgICBrZXlzID0gc2V0KHNlbGYuYmJ2YXJfbWFwLmtleXMoKSkKKyAgICAgICAga2V5cyB8PSBzZXQoc2VsZi5zZXR1cGFyZ19saXN0X2ZpZWxkcykKKyAgICAgICAga2V5cyB8PSBzZXQoc2VsZi5zZXR1cGFyZ19tdWx0aV9saW5lX3ZhbHVlcykKKyAgICAgICAgZ3JvdXBlZF9rZXlzID0gaXRlcnRvb2xzLmdyb3VwYnkoa2V5cywgbGFtYmRhIGs6IChrIGluIHNlbGYuc2V0dXBhcmdfbGlzdF9maWVsZHMsIGsgaW4gc2VsZi5zZXR1cGFyZ19tdWx0aV9saW5lX3ZhbHVlcykpCisgICAgICAgIGZvciBpbmRleCwga2V5cyBpbiBncm91cGVkX2tleXM6CisgICAgICAgICAgICBpZiBpbmRleCA9PSAoVHJ1ZSwgRmFsc2UpOgorICAgICAgICAgICAgICAgICMgU3BsaXRsaW5lcyBvdXRwdXQgZm9yIGVhY2ggYXJnIGFzIGEgbGlzdCB2YWx1ZQorICAgICAgICAgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gc2VsZi5zZXR1cGFyZ19tYXAuZ2V0KGtleSwga2V5Lmxvd2VyKCkpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19pbmZvID0gc2VsZi5ydW5fY29tbWFuZChjbWQgKyBbJy0tJyArIGFyZ10sIGN3ZD1vcy5wYXRoLmRpcm5hbWUoc2V0dXBzY3JpcHQpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ba2V5XSA9IFtsLnJzdHJpcCgpIGZvciBsIGluIGFyZ19pbmZvLnNwbGl0bGluZXMoKV0KKyAgICAgICAgICAgIGVsaWYgaW5kZXggPT0gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICAjIEVudGlyZSBvdXRwdXQgZm9yIGVhY2ggYXJnCisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBzZWxmLnNldHVwYXJnX21hcC5nZXQoa2V5LCBrZXkubG93ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnX2luZm8gPSBzZWxmLnJ1bl9jb21tYW5kKGNtZCArIFsnLS0nICsgYXJnXSwgY3dkPW9zLnBhdGguZGlybmFtZShzZXR1cHNjcmlwdCkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1trZXldID0gYXJnX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby51cGRhdGUoc2VsZi5nZXRfc2V0dXBfYnlsaW5lKGxpc3Qoa2V5cyksIHNldHVwc2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIGluZm8KKworICAgIGRlZiBnZXRfc2V0dXBfYnlsaW5lKHNlbGYsIGZpZWxkcywgc2V0dXBzY3JpcHQ9Jy4vc2V0dXAucHknKToKKyAgICAgICAgaW5mbyA9IHt9CisKKyAgICAgICAgY21kID0gWydweXRob24nLCBzZXR1cHNjcmlwdF0KKyAgICAgICAgY21kLmV4dGVuZCgnLS0nICsgc2VsZi5zZXR1cGFyZ19tYXAuZ2V0KGYsIGYubG93ZXIoKSkgZm9yIGYgaW4gZmllbGRzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbmZvX2xpbmVzID0gc2VsZi5ydW5fY29tbWFuZChjbWQsIGN3ZD1vcy5wYXRoLmRpcm5hbWUoc2V0dXBzY3JpcHQpKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSAhPSBsZW4oaW5mb19saW5lcyk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdNaXNtYXRjaCBiZXR3ZWVuIHNldHVwLnB5IG91dHB1dCBsaW5lcyBhbmQgbnVtYmVyIG9mIGZpZWxkcycpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUoaW5mb19saW5lcyk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpbmZvW2ZpZWxkc1tsaW5lbm9dXSA9IGxpbmUKKyAgICAgICAgcmV0dXJuIGluZm8KKworICAgIGRlZiBhcHBseV9pbmZvX3JlcGxhY2VtZW50cyhzZWxmLCBpbmZvKToKKyAgICAgICAgZm9yIHZhcmlhYmxlLCBzZWFyY2gsIHJlcGxhY2UgaW4gc2VsZi5yZXBsYWNlbWVudHM6CisgICAgICAgICAgICBpZiB2YXJpYWJsZSBub3QgaW4gaW5mbzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZWYgcmVwbGFjZV92YWx1ZShzZWFyY2gsIHJlcGxhY2UsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBpZiByZXBsYWNlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChzZWFyY2gsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gcmUuc3ViKHNlYXJjaCwgcmVwbGFjZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlICE9IG5ld192YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdfdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICAgICAgdmFsdWUgPSBpbmZvW3ZhcmlhYmxlXQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gcmVwbGFjZV92YWx1ZShzZWFyY2gsIHJlcGxhY2UsIHZhbHVlKQorICAgICAgICAgICAgICAgIGlmIG5ld192YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBkZWwgaW5mb1t2YXJpYWJsZV0KKyAgICAgICAgICAgICAgICBlbGlmIG5ld192YWx1ZSAhPSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgaW5mb1t2YXJpYWJsZV0gPSBuZXdfdmFsdWUKKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cih2YWx1ZSwgJ2l0ZXJpdGVtcycpOgorICAgICAgICAgICAgICAgIGZvciBka2V5LCBkdmFsdWUgaW4gdmFsdWUuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG5ld19saXN0ID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9yIHBvcywgYV92YWx1ZSBpbiBlbnVtZXJhdGUoZHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IHJlcGxhY2VfdmFsdWUoc2VhcmNoLCByZXBsYWNlLCBhX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV3X3ZhbHVlIGlzIG5vdCBOb25lIGFuZCBuZXdfdmFsdWUgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2xpc3QuYXBwZW5kKG5ld192YWx1ZSkKKworICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSAhPSBuZXdfbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2RrZXldID0gbmV3X2xpc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X2xpc3QgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwb3MsIGFfdmFsdWUgaW4gZW51bWVyYXRlKHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gcmVwbGFjZV92YWx1ZShzZWFyY2gsIHJlcGxhY2UsIGFfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld192YWx1ZSBpcyBub3QgTm9uZSBhbmQgbmV3X3ZhbHVlICE9IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2xpc3QuYXBwZW5kKG5ld192YWx1ZSkKKworICAgICAgICAgICAgICAgIGlmIHZhbHVlICE9IG5ld19saXN0OgorICAgICAgICAgICAgICAgICAgICBpbmZvW3ZhcmlhYmxlXSA9IG5ld19saXN0CisKKyAgICBkZWYgc2Nhbl9zZXR1cF9weXRob25fZGVwcyhzZWxmLCBzcmN0cmVlLCBzZXR1cF9pbmZvLCBzZXR1cF9ub25fbGl0ZXJhbHMpOgorICAgICAgICBpZiAnUGFja2FnZS1kaXInIGluIHNldHVwX2luZm86CisgICAgICAgICAgICBwYWNrYWdlX2RpciA9IHNldHVwX2luZm9bJ1BhY2thZ2UtZGlyJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfZGlyID0ge30KKworICAgICAgICBjbGFzcyBQYWNrYWdlRGlyKGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5LmJ1aWxkX3B5KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYWNrYWdlX2Rpcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2RpciA9IHBhY2thZ2VfZGlyCisKKyAgICAgICAgcGQgPSBQYWNrYWdlRGlyKHBhY2thZ2VfZGlyKQorICAgICAgICB0b19zY2FuID0gW10KKyAgICAgICAgaWYgbm90IGFueSh2IGluIHNldHVwX25vbl9saXRlcmFscyBmb3IgdiBpbiBbJ1B5LW1vZHVsZXMnLCAnU2NyaXB0cycsICdQYWNrYWdlcyddKToKKyAgICAgICAgICAgIGlmICdQeS1tb2R1bGVzJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgIGZvciBtb2R1bGUgaW4gc2V0dXBfaW5mb1snUHktbW9kdWxlcyddOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBtb2R1bGUgPSBtb2R1bGUucnNwbGl0KCcuJywgMSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLCBtb2R1bGUgPSAnLicsIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfcGF0aCA9IG9zLnBhdGguam9pbihwZC5nZXRfcGFja2FnZV9kaXIocGFja2FnZSksIG1vZHVsZSArICcucHknKQorICAgICAgICAgICAgICAgICAgICB0b19zY2FuLmFwcGVuZChtb2R1bGVfcGF0aCkKKworICAgICAgICAgICAgaWYgJ1BhY2thZ2VzJyBpbiBzZXR1cF9pbmZvOgorICAgICAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHNldHVwX2luZm9bJ1BhY2thZ2VzJ106CisgICAgICAgICAgICAgICAgICAgIHRvX3NjYW4uYXBwZW5kKHBkLmdldF9wYWNrYWdlX2RpcihwYWNrYWdlKSkKKworICAgICAgICAgICAgaWYgJ1NjcmlwdHMnIGluIHNldHVwX2luZm86CisgICAgICAgICAgICAgICAgdG9fc2Nhbi5leHRlbmQoc2V0dXBfaW5mb1snU2NyaXB0cyddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNjYW5uaW5nIHRoZSBlbnRpcmUgc291cmNlIHRyZWUsIGFzIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgc2V0dXAga2V5d29yZHMgYXJlIG5vbi1saXRlcmFsOiBweV9tb2R1bGVzLCBzY3JpcHRzLCBwYWNrYWdlcy4iKQorCisgICAgICAgIGlmIG5vdCB0b19zY2FuOgorICAgICAgICAgICAgdG9fc2NhbiA9IFsnLiddCisKKyAgICAgICAgbG9nZ2VyLmluZm8oIlNjYW5uaW5nIHBhdGhzIGZvciBwYWNrYWdlcyAmIGRlcGVuZGVuY2llczogJXMiLCAnLCAnLmpvaW4odG9fc2NhbikpCisKKyAgICAgICAgcHJvdmlkZWRfcGFja2FnZXMgPSBzZWxmLnBhcnNlX3BrZ2RhdGFfZm9yX3B5dGhvbl9wYWNrYWdlcygpCisgICAgICAgIHNjYW5uZWRfZGVwcyA9IHNlbGYuc2Nhbl9weXRob25fZGVwZW5kZW5jaWVzKFtvcy5wYXRoLmpvaW4oc3JjdHJlZSwgcCkgZm9yIHAgaW4gdG9fc2Nhbl0pCisgICAgICAgIG1hcHBlZF9kZXBzLCB1bm1hcHBlZF9kZXBzID0gc2V0KHNlbGYuYmFzZV9wa2dkZXBzKSwgc2V0KCkKKyAgICAgICAgZm9yIGRlcCBpbiBzY2FubmVkX2RlcHM6CisgICAgICAgICAgICBtYXBwZWQgPSBwcm92aWRlZF9wYWNrYWdlcy5nZXQoZGVwKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZF9kZXBzLmFkZChtYXBwZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHVubWFwcGVkX2RlcHMuYWRkKGRlcCkKKyAgICAgICAgcmV0dXJuIG1hcHBlZF9kZXBzLCB1bm1hcHBlZF9kZXBzCisKKyAgICBkZWYgc2Nhbl9weXRob25fZGVwZW5kZW5jaWVzKHNlbGYsIHBhdGhzKToKKyAgICAgICAgZGVwcyA9IHNldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlcF9vdXRwdXQgPSBzZWxmLnJ1bl9jb21tYW5kKFsncHl0aG9uZGVwcycsICctZCddICsgcGF0aHMpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGVwX291dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBkZXAsIGZpbGVuYW1lID0gbGluZS5zcGxpdCgnXHQnLCAxKQorICAgICAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcvc2V0dXAucHknKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkZXBzLmFkZChkZXApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvdmlkZXNfb3V0cHV0ID0gc2VsZi5ydW5fY29tbWFuZChbJ3B5dGhvbmRlcHMnLCAnLXAnXSArIHBhdGhzKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb3ZpZGVzX2xpbmVzID0gKGwucnN0cmlwKCkgZm9yIGwgaW4gcHJvdmlkZXNfb3V0cHV0LnNwbGl0bGluZXMoKSkKKyAgICAgICAgICAgIHByb3ZpZGVzID0gc2V0KGwgZm9yIGwgaW4gcHJvdmlkZXNfbGluZXMgaWYgbCBhbmQgbCAhPSAnc2V0dXAnKQorICAgICAgICAgICAgZGVwcyAtPSBwcm92aWRlcworCisgICAgICAgIHJldHVybiBkZXBzCisKKyAgICBkZWYgcGFyc2VfcGtnZGF0YV9mb3JfcHl0aG9uX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBzdWZmaXhlcyA9IFt0WzBdIGZvciB0IGluIGltcC5nZXRfc3VmZml4ZXMoKV0KKyAgICAgICAgcGtnZGF0YV9kaXIgPSB0aW5mb2lsLmNvbmZpZ19kYXRhLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKQorCisgICAgICAgIGxkYXRhID0gdGluZm9pbC5jb25maWdfZGF0YS5jcmVhdGVDb3B5KCkKKyAgICAgICAgYmIucGFyc2UuaGFuZGxlKCdjbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcycsIGxkYXRhLCBUcnVlKQorICAgICAgICBweXRob25fc2l0ZWRpciA9IGxkYXRhLmdldFZhcignUFlUSE9OX1NJVEVQQUNLQUdFU19ESVInLCBUcnVlKQorCisgICAgICAgIGR5bmxvYWRfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShweXRob25fc2l0ZWRpciksICdsaWItZHlubG9hZCcpCisgICAgICAgIHB5dGhvbl9kaXJzID0gW3B5dGhvbl9zaXRlZGlyICsgb3Muc2VwLAorICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHB5dGhvbl9zaXRlZGlyKSwgJ2Rpc3QtcGFja2FnZXMnKSArIG9zLnNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHB5dGhvbl9zaXRlZGlyKSArIG9zLnNlcF0KKyAgICAgICAgcGFja2FnZXMgPSB7fQorICAgICAgICBmb3IgcGtnZGF0YWZpbGUgaW4gZ2xvYi5nbG9iKCd7fS9ydW50aW1lLyonLmZvcm1hdChwa2dkYXRhX2RpcikpOgorICAgICAgICAgICAgZmlsZXNfaW5mbyA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIGZpZWxkLCB2YWx1ZSA9IGxpbmUuc3BsaXQoJzogJywgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZmllbGQgPT0gJ0ZJTEVTX0lORk8nOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNfaW5mbyA9IGFzdC5saXRlcmFsX2V2YWwodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlc19pbmZvLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoZHlubG9hZF9kaXIgKyBvcy5zZXApOgorICAgICAgICAgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShmbikKKyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgPSBiYXNlLnNwbGl0KCcuJywgMSlbMF0KKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXNbcHJvdmlkZWRdID0gb3MucGF0aC5iYXNlbmFtZShwa2dkYXRhZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZvciBweXRob25fZGlyIGluIHB5dGhvbl9kaXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBmbi5zdGFydHN3aXRoKHB5dGhvbl9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVscGF0aCA9IGZuW2xlbihweXRob25fZGlyKTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZWxzdGFydCwgXywgcmVscmVtYWluaW5nID0gcmVscGF0aC5wYXJ0aXRpb24ob3Muc2VwKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVsc3RhcnQuZW5kc3dpdGgoJy5lZ2cnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxwYXRoID0gcmVscmVtYWluaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBfID0gb3MucGF0aC5zcGxpdGV4dChyZWxwYXRoKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnLy5kZWJ1Zy8nIGluIGJhc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoYmFzZSkgPT0gJ19faW5pdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5kaXJuYW1lKGJhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKG9zLnNlcCArIG9zLnNlcCwgb3Muc2VwKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgPSBiYXNlLnJlcGxhY2Uob3Muc2VwLCAnLicpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlc1twcm92aWRlZF0gPSBvcy5wYXRoLmJhc2VuYW1lKHBrZ2RhdGFmaWxlKQorICAgICAgICByZXR1cm4gcGFja2FnZXMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBydW5fY29tbWFuZChjbHMsIGNtZCwgKipwb3BlbmFyZ3MpOgorICAgICAgICBpZiAnc3RkZXJyJyBub3QgaW4gcG9wZW5hcmdzOgorICAgICAgICAgICAgcG9wZW5hcmdzWydzdGRlcnInXSA9IHN1YnByb2Nlc3MuU1RET1VUCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsICoqcG9wZW5hcmdzKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBydW4gYHt9YDoge30nLCAnICcuam9pbihjbWQpLCBleGMpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gcnVuIGB7fWA6IHt9JywgJyAnLmpvaW4oY21kKSwgZXhjLm91dHB1dCkKKyAgICAgICAgICAgIHJhaXNlCisKKworZGVmIGdhdGhlcl9zZXR1cF9pbmZvKGZpbGVvYmopOgorICAgIHBhcnNlZCA9IGFzdC5wYXJzZShmaWxlb2JqLnJlYWQoKSwgZmlsZW9iai5uYW1lKQorICAgIHZpc2l0b3IgPSBTZXR1cFNjcmlwdFZpc2l0b3IoKQorICAgIHZpc2l0b3IudmlzaXQocGFyc2VkKQorCisgICAgbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zID0ge30sIFtdCisgICAgZm9yIGtleSwgdmFsdWUgaW4gdmlzaXRvci5rZXl3b3Jkcy5pdGVtcygpOgorICAgICAgICBpZiBrZXkgPT0gJ2V4dF9tb2R1bGVzJzoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgIGZvciBleHQgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGlmICAoaXNpbnN0YW5jZShleHQsIGFzdC5DYWxsKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGV4dC5mdW5jLCBhc3QuTmFtZSkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgZXh0LmZ1bmMuaWQgPT0gJ0V4dGVuc2lvbicgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGhhc19ub25fbGl0ZXJhbHMoZXh0LmFyZ3MpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMuYXBwZW5kKGV4dC5hcmdzWzBdKQorICAgICAgICBlbGlmIGhhc19ub25fbGl0ZXJhbHModmFsdWUpOgorICAgICAgICAgICAgbm9uX2xpdGVyYWxzW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZGVsIHZpc2l0b3Iua2V5d29yZHNba2V5XQorCisgICAgcmV0dXJuIHZpc2l0b3Iua2V5d29yZHMsIHZpc2l0b3IuaW1wb3J0ZWRfbW9kdWxlcywgbm9uX2xpdGVyYWxzLCBleHRlbnNpb25zCisKKworY2xhc3MgU2V0dXBTY3JpcHRWaXNpdG9yKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBhc3QuTm9kZVZpc2l0b3IuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IHt9CisgICAgICAgIHNlbGYubm9uX2xpdGVyYWxzID0gW10KKyAgICAgICAgc2VsZi5pbXBvcnRlZF9tb2R1bGVzID0gc2V0KCkKKworICAgIGRlZiB2aXNpdF9FeHByKHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUudmFsdWUsIGFzdC5DYWxsKSBhbmQgXAorICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUudmFsdWUuZnVuYywgYXN0Lk5hbWUpIGFuZCBcCisgICAgICAgICAgIG5vZGUudmFsdWUuZnVuYy5pZCA9PSAnc2V0dXAnOgorICAgICAgICAgICAgc2VsZi52aXNpdF9zZXR1cChub2RlLnZhbHVlKQorCisgICAgZGVmIHZpc2l0X3NldHVwKHNlbGYsIG5vZGUpOgorICAgICAgICBjYWxsID0gTGl0ZXJhbEFzdFRyYW5zZm9ybSgpLnZpc2l0KG5vZGUpCisgICAgICAgIHNlbGYua2V5d29yZHMgPSBjYWxsLmtleXdvcmRzCisgICAgICAgIGZvciBrLCB2IGluIHNlbGYua2V5d29yZHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBoYXNfbm9uX2xpdGVyYWxzKHYpOgorICAgICAgICAgICAgICAgc2VsZi5ub25fbGl0ZXJhbHMuYXBwZW5kKGspCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0KHNlbGYsIG5vZGUpOgorICAgICAgICBmb3IgYWxpYXMgaW4gbm9kZS5uYW1lczoKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0ZWRfbW9kdWxlcy5hZGQoYWxpYXMubmFtZSkKKworICAgIGRlZiB2aXNpdF9JbXBvcnRGcm9tKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmltcG9ydGVkX21vZHVsZXMuYWRkKG5vZGUubW9kdWxlKQorCisKK2NsYXNzIExpdGVyYWxBc3RUcmFuc2Zvcm0oYXN0Lk5vZGVUcmFuc2Zvcm1lcik6CisgICAgIiIiU2ltcGxpZnkgdGhlIGFzdCB0aHJvdWdoIGV2YWx1YXRpb24gb2YgbGl0ZXJhbHMuIiIiCisgICAgZXhjbHVkZWRfZmllbGRzID0gWydjdHgnXQorCisgICAgZGVmIHZpc2l0KHNlbGYsIG5vZGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShub2RlLCBhc3QuQVNUKToKKyAgICAgICAgICAgIHJldHVybiBub2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gYXN0Lk5vZGVUcmFuc2Zvcm1lci52aXNpdChzZWxmLCBub2RlKQorCisgICAgZGVmIGdlbmVyaWNfdmlzaXQoc2VsZiwgbm9kZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBhc3QubGl0ZXJhbF9ldmFsKG5vZGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZm9yIGZpZWxkLCB2YWx1ZSBpbiBhc3QuaXRlcl9maWVsZHMobm9kZSk6CisgICAgICAgICAgICAgICAgaWYgZmllbGQgaW4gc2VsZi5leGNsdWRlZF9maWVsZHM6CisgICAgICAgICAgICAgICAgICAgIGRlbGF0dHIobm9kZSwgZmllbGQpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZCBpbiAoJ2tleXdvcmRzJywgJ2t3YXJncycpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gZGljdCgoa3cuYXJnLCBzZWxmLnZpc2l0KGt3LnZhbHVlKSkgZm9yIGt3IGluIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gW3NlbGYudmlzaXQoaSkgZm9yIGkgaW4gdmFsdWVdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gc2VsZi52aXNpdCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKG5vZGUsIGZpZWxkLCBuZXdfdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbm9kZQorCisgICAgZGVmIHZpc2l0X05hbWUoc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIGhhc2F0dHIoJ19fYnVpbHRpbnNfXycsIG5vZGUuaWQpOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoX19idWlsdGluc19fLCBub2RlLmlkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCisgICAgZGVmIHZpc2l0X1R1cGxlKHNlbGYsIG5vZGUpOgorICAgICAgICByZXR1cm4gdHVwbGUoc2VsZi52aXNpdCh2KSBmb3IgdiBpbiBub2RlLmVsdHMpCisKKyAgICBkZWYgdmlzaXRfTGlzdChzZWxmLCBub2RlKToKKyAgICAgICAgcmV0dXJuIFtzZWxmLnZpc2l0KHYpIGZvciB2IGluIG5vZGUuZWx0c10KKworICAgIGRlZiB2aXNpdF9TZXQoc2VsZiwgbm9kZSk6CisgICAgICAgIHJldHVybiBzZXQoc2VsZi52aXNpdCh2KSBmb3IgdiBpbiBub2RlLmVsdHMpCisKKyAgICBkZWYgdmlzaXRfRGljdChzZWxmLCBub2RlKToKKyAgICAgICAga2V5cyA9IChzZWxmLnZpc2l0KGspIGZvciBrIGluIG5vZGUua2V5cykKKyAgICAgICAgdmFsdWVzID0gKHNlbGYudmlzaXQodikgZm9yIHYgaW4gbm9kZS52YWx1ZXMpCisgICAgICAgIHJldHVybiBkaWN0KHppcChrZXlzLCB2YWx1ZXMpKQorCisKK2RlZiBoYXNfbm9uX2xpdGVyYWxzKHZhbHVlKToKKyAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBhc3QuQVNUKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbGlmIGhhc2F0dHIodmFsdWUsICdpdGVydmFsdWVzJyk6CisgICAgICAgIHJldHVybiBhbnkoaGFzX25vbl9saXRlcmFscyh2KSBmb3IgdiBpbiB2YWx1ZS5pdGVydmFsdWVzKCkpCisgICAgZWxpZiBoYXNhdHRyKHZhbHVlLCAnX19pdGVyX18nKToKKyAgICAgICAgcmV0dXJuIGFueShoYXNfbm9uX2xpdGVyYWxzKHYpIGZvciB2IGluIHZhbHVlKQorCisKK2RlZiByZWdpc3Rlcl9yZWNpcGVfaGFuZGxlcnMoaGFuZGxlcnMpOgorICAgICMgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhaGVhZCBvZiB0aGUgbWFrZWZpbGUgZmFsbGJhY2sgaGFuZGxlcgorICAgIGhhbmRsZXJzLmluc2VydCgwLCBQeXRob25SZWNpcGVIYW5kbGVyKCkpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi9zY3JpcHRwYXRoLnB5IGIvc2NyaXB0cy9saWIvc2NyaXB0cGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDAzMTdlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvc2NyaXB0cGF0aC5weQpAQCAtMCwwICsxLDQyIEBACisjIFBhdGggdXRpbGl0eSBmdW5jdGlvbnMgZm9yIE9FIHB5dGhvbiBzY3JpcHRzCisjCisjIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMSBNZW50b3IgR3JhcGhpY3MgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKKworZGVmIGFkZF9vZV9saWJfcGF0aCgpOgorICAgIGJhc2VwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgKyAnLy4uLy4uJykKKyAgICBuZXdwYXRoID0gYmFzZXBhdGggKyAnL21ldGEvbGliJworICAgIHN5cy5wYXRoLmluc2VydCgwLCBuZXdwYXRoKQorCitkZWYgYWRkX2JpdGJha2VfbGliX3BhdGgoKToKKyAgICBiYXNlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pICsgJy8uLi8uLicpCisgICAgYml0YmFrZXBhdGggPSBOb25lCisgICAgaWYgb3MucGF0aC5leGlzdHMoYmFzZXBhdGggKyAnL2JpdGJha2UvbGliL2JiJyk6CisgICAgICAgIGJpdGJha2VwYXRoID0gYmFzZXBhdGggKyAnL2JpdGJha2UnCisgICAgZWxzZToKKyAgICAgICAgIyBsb29rIGZvciBiaXRiYWtlL2JpbiBkaXIgaW4gUEFUSAorICAgICAgICBmb3IgcHRoIGluIG9zLmVudmlyb25bJ1BBVEgnXS5zcGxpdCgnOicpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHB0aCwgJy4uL2xpYi9iYicpKToKKyAgICAgICAgICAgICAgICBiaXRiYWtlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocHRoLCAnLi4nKSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgaWYgYml0YmFrZXBhdGg6CisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBiaXRiYWtlcGF0aCArICcvbGliJykKKyAgICByZXR1cm4gYml0YmFrZXBhdGgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5IGIvc2NyaXB0cy9saWIvc2NyaXB0dXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2Njg4MgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3NjcmlwdHV0aWxzLnB5CkBAIC0wLDAgKzEsOTggQEAKKyMgU2NyaXB0IHV0aWxpdHkgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IGdsb2IKKworZGVmIGxvZ2dlcl9jcmVhdGUobmFtZSk6CisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICBsb2dnZXJoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsb2dnZXJoYW5kbGVyLnNldEZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcigiJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiKSkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnZXJoYW5kbGVyKQorICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgcmV0dXJuIGxvZ2dlcgorCitkZWYgbG9nZ2VyX3NldHVwX2NvbG9yKGxvZ2dlciwgY29sb3I9J2F1dG8nKToKKyAgICBmcm9tIGJiLm1zZyBpbXBvcnQgQkJMb2dGb3JtYXR0ZXIKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgZm9ybWF0dGVyID0gQkJMb2dGb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikKKyAgICBjb25zb2xlLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2NvbnNvbGVdCisgICAgaWYgY29sb3IgPT0gJ2Fsd2F5cycgb3IgKGNvbG9yPT0nYXV0bycgYW5kIGNvbnNvbGUuc3RyZWFtLmlzYXR0eSgpKToKKyAgICAgICAgZm9ybWF0dGVyLmVuYWJsZV9jb2xvcigpCisKKworZGVmIGxvYWRfcGx1Z2lucyhsb2dnZXIsIHBsdWdpbnMsIHBsdWdpbnBhdGgpOgorICAgIGltcG9ydCBpbXAKKworICAgIGRlZiBsb2FkX3BsdWdpbihuYW1lKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHBsdWdpbiAlcycgJSBuYW1lKQorICAgICAgICBmcCwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUsIFtwbHVnaW5wYXRoXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGltcC5sb2FkX21vZHVsZShuYW1lLCBmcCwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgZnA6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgbG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHBsdWdpbnMgZnJvbSAlcy4uLicgJSBwbHVnaW5wYXRoKQorICAgIGZvciBmbiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHBsdWdpbnBhdGgsICcqLnB5JykpOgorICAgICAgICBuYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZuKSlbMF0KKyAgICAgICAgaWYgbmFtZSAhPSAnX19pbml0X18nOgorICAgICAgICAgICAgcGx1Z2luID0gbG9hZF9wbHVnaW4obmFtZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIocGx1Z2luLCAncGx1Z2luX2luaXQnKToKKyAgICAgICAgICAgICAgICBwbHVnaW4ucGx1Z2luX2luaXQocGx1Z2lucykKKyAgICAgICAgICAgIHBsdWdpbnMuYXBwZW5kKHBsdWdpbikKKworZGVmIGdpdF9jb252ZXJ0X3N0YW5kYWxvbmVfY2xvbmUocmVwb2Rpcik6CisgICAgIiIiSWYgc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBhIGdpdCByZXBvc2l0b3J5LCBlbnN1cmUgaXQncyBhIHN0YW5kYWxvbmUgY2xvbmUiIiIKKyAgICBpbXBvcnQgYmIucHJvY2VzcworICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihyZXBvZGlyLCAnLmdpdCcpKToKKyAgICAgICAgYWx0ZXJuYXRlc2ZpbGUgPSBvcy5wYXRoLmpvaW4ocmVwb2RpciwgJy5naXQnLCAnb2JqZWN0cycsICdpbmZvJywgJ2FsdGVybmF0ZXMnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhbHRlcm5hdGVzZmlsZSk6CisgICAgICAgICAgICAjIFRoaXMgd2lsbCBoYXZlIGJlZW4gY2xvbmVkIHdpdGggLXMsIHNvIHdlIG5lZWQgdG8gY29udmVydCBpdCBzbyBub25lCisgICAgICAgICAgICAjIG9mIHRoZSBjb250ZW50cyBpcyBzaGFyZWQKKyAgICAgICAgICAgIGJiLnByb2Nlc3MucnVuKCdnaXQgcmVwYWNrIC1hJywgY3dkPXJlcG9kaXIpCisgICAgICAgICAgICBvcy5yZW1vdmUoYWx0ZXJuYXRlc2ZpbGUpCisKK2RlZiBmZXRjaF91cmkoZCwgdXJpLCBkZXN0ZGlyLCBzcmNyZXY9Tm9uZSk6CisgICAgIiIiRmV0Y2ggYSBVUkkgdG8gYSBsb2NhbCBkaXJlY3RvcnkiIiIKKyAgICBpbXBvcnQgYmIuZGF0YQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1NUUklDVF9DSEVDS1NVTScsICcnKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ1JFVicsIHNyY3JldikKKyAgICByZXQgPSAoTm9uZSwgTm9uZSkKKyAgICBvbGRkaXIgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbdXJpXSwgbG9jYWxkYXRhKQorICAgICAgICBmb3IgdSBpbiBmZXRjaGVyLnVkOgorICAgICAgICAgICAgdWQgPSBmZXRjaGVyLnVkW3VdCisgICAgICAgICAgICB1ZC5pZ25vcmVfY2hlY2tzdW1zID0gVHJ1ZQorICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKyAgICAgICAgZmV0Y2hlci51bnBhY2soZGVzdGRpcikKKyAgICAgICAgZm9yIHUgaW4gZmV0Y2hlci51ZDoKKyAgICAgICAgICAgIHVkID0gZmV0Y2hlci51ZFt1XQorICAgICAgICAgICAgaWYgdWQubWV0aG9kLnJlY29tbWVuZHNfY2hlY2tzdW0odWQpOgorICAgICAgICAgICAgICAgIG1kNXZhbHVlID0gYmIudXRpbHMubWQ1X2ZpbGUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgICAgIHNoYTI1NnZhbHVlID0gYmIudXRpbHMuc2hhMjU2X2ZpbGUodWQubG9jYWxwYXRoKQorICAgICAgICAgICAgICAgIHJldCA9IChtZDV2YWx1ZSwgc2hhMjU2dmFsdWUpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorICAgIHJldHVybiByZXQKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L19faW5pdF9fLnB5IGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9iYXNlLnB5IGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjOGY1NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9iYXNlLnB5CkBAIC0wLDAgKzEsNDY2IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNiwgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuCisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitCYXNlIGNsYXNzZXMgZm9yIGNyZWF0aW5nIGNvbW1hbmRzIGFuZCBzeW50YXggdmVyc2lvbiBvYmplY3QuCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgc2V2ZXJhbCBpbXBvcnRhbnQgYmFzZSBjbGFzc2VzOgorCisgICAgQmFzZURhdGEgLSBUaGUgYmFzZSBhYnN0cmFjdCBjbGFzcyBmb3IgYWxsIGRhdGEgb2JqZWN0cy4gIERhdGEgb2JqZWN0cworICAgICAgICAgICAgICAgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBCYXNlSGFuZGxlciBvYmplY3QuCisKKyAgICBCYXNlSGFuZGxlciAtIFRoZSBiYXNlIGFic3RyYWN0IGNsYXNzIGZyb20gd2hpY2ggdmVyc2lvbmVkIGtpY2tzdGFydAorICAgICAgICAgICAgICAgICAgaGFuZGxlciBhcmUgZGVyaXZlZC4gIFN1YmNsYXNzZXMgb2YgQmFzZUhhbmRsZXIgaG9sZAorICAgICAgICAgICAgICAgICAgQmFzZURhdGEgYW5kIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0cy4KKworICAgIERlcHJlY2F0ZWRDb21tYW5kIC0gQW4gYWJzdHJhY3Qgc3ViY2xhc3Mgb2YgS2lja3N0YXJ0Q29tbWFuZCB0aGF0IHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgZnVydGhlciBzdWJjbGFzc2VkIGJ5IHVzZXJzIG9mIHRoaXMgbW9kdWxlLiAgV2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgYSBzdWJjbGFzcyBpcyB1c2VkLCBhIHdhcm5pbmcgbWVzc2FnZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVkLgorCisgICAgS2lja3N0YXJ0Q29tbWFuZCAtIFRoZSBiYXNlIGFic3RyYWN0IGNsYXNzIGZvciBhbGwga2lja3N0YXJ0IGNvbW1hbmRzLgorICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kIG9iamVjdHMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBCYXNlSGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuCisiIiIKK2ltcG9ydCBnZXR0ZXh0CitnZXR0ZXh0LnRleHRkb21haW4oInB5a2lja3N0YXJ0IikKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworaW1wb3J0IHR5cGVzCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gcHlraWNrc3RhcnQuZXJyb3JzIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LmtvIGltcG9ydCAqCitmcm9tIHB5a2lja3N0YXJ0LnBhcnNlciBpbXBvcnQgUGFja2FnZXMKK2Zyb20gcHlraWNrc3RhcnQudmVyc2lvbiBpbXBvcnQgdmVyc2lvblRvU3RyaW5nCisKKyMjIworIyMjIENPTU1BTkRTCisjIyMKK2NsYXNzIEtpY2tzdGFydENvbW1hbmQoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGtpY2tzdGFydCBjb21tYW5kcy4gIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIiIiCisgICAgcmVtb3ZlZEtleXdvcmRzID0gW10KKyAgICByZW1vdmVkQXR0cnMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydENvbW1hbmQgaW5zdGFuY2UuICBUaGlzIG1ldGhvZCBtdXN0IGJlCisgICAgICAgICAgIHByb3ZpZGVkIGJ5IGFsbCBzdWJjbGFzc2VzLCBidXQgc3ViY2xhc3NlcyBtdXN0IGNhbGwKKyAgICAgICAgICAgS2lja3N0YXJ0Q29tbWFuZC5fX2luaXRfXyBmaXJzdC4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgY3VycmVudENtZCAgICAtLSBUaGUgbmFtZSBvZiB0aGUgY29tbWFuZCBpbiB0aGUgaW5wdXQgZmlsZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2VkIHRoaXMgaGFuZGxlciB0byBiZSBydW4uCisgICAgICAgICAgIGN1cnJlbnRMaW5lICAgLS0gVGhlIGN1cnJlbnQgdW5wcm9jZXNzZWQgbGluZSBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjYXVzZWQgdGhpcyBoYW5kbGVyIHRvIGJlIHJ1bi4KKyAgICAgICAgICAgaGFuZGxlciAgICAgICAtLSBBIHJlZmVyZW5jZSB0byB0aGUgQmFzZUhhbmRsZXIgc3ViY2xhc3MgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgaXMgY29udGFpbmVkIHdpdGhpbmcuICBUaGlzIGlzIG5lZWRlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93IHJlZmVyZW5jaW5nIG9mIERhdGEgb2JqZWN0cy4KKyAgICAgICAgICAgbGluZW5vICAgICAgICAtLSBUaGUgY3VycmVudCBsaW5lIG51bWJlciBpbiB0aGUgaW5wdXQgZmlsZS4KKyAgICAgICAgICAgd3JpdGVQcmlvcml0eSAtLSBBbiBpbnRlZ2VyIHNwZWNpZnlpbmcgd2hlbiB0aGlzIGNvbW1hbmQgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIGFsbCBjb21tYW5kcycgX19zdHJfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMuICBUaGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBsYXRlciB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB3aWxsIGJlIHdyaXR0ZW4uICBBbGwgY29tbWFuZHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIHByaW9yaXR5IHdpbGwgYmUgd3JpdHRlbiBhbHBoYWJldGljYWxseS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBkb24ndCB3YW50IHBlb3BsZSB1c2luZyB0aGlzIGNsYXNzIGJ5IGl0c2VsZi4KKyAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgS2lja3N0YXJ0Q29tbWFuZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIktpY2tzdGFydENvbW1hbmQgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi53cml0ZVByaW9yaXR5ID0gd3JpdGVQcmlvcml0eQorCisgICAgICAgICMgVGhlc2Ugd2lsbCBiZSBzZXQgYnkgdGhlIGRpc3BhdGNoZXIuCisgICAgICAgIHNlbGYuY3VycmVudENtZCA9ICIiCisgICAgICAgIHNlbGYuY3VycmVudExpbmUgPSAiIgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYubGluZW5vID0gMAorCisgICAgICAgICMgSWYgYSBzdWJjbGFzcyBwcm92aWRlcyBhIHJlbW92ZWRLZXl3b3JkcyBsaXN0LCByZW1vdmUgYWxsIHRoZQorICAgICAgICAjIG1lbWJlcnMgZnJvbSB0aGUga3dhcmdzIGxpc3QgYmVmb3JlIHdlIHN0YXJ0IHByb2Nlc3NpbmcgaXQuICBUaGlzCisgICAgICAgICMgZW5zdXJlcyB0aGF0IHN1YmNsYXNzZXMgZG9uJ3QgY29udGludWUgdG8gcmVjb2duaXplIGFyZ3VtZW50cyB0aGF0CisgICAgICAgICMgd2VyZSByZW1vdmVkLgorICAgICAgICBmb3IgYXJnIGluIGZpbHRlcihrd2FyZ3MuaGFzX2tleSwgc2VsZi5yZW1vdmVkS2V5d29yZHMpOgorICAgICAgICAgICAga3dhcmdzLnBvcChhcmcpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2V0IG11bHRpcGxlIGF0dHJpYnV0ZXMgb24gYSBzdWJjbGFzcyBvZiBLaWNrc3RhcnRDb21tYW5kIGF0IG9uY2UKKyAgICAgICAgICAgdmlhIGtleXdvcmQgYXJndW1lbnRzLiAgVmFsaWQgYXR0cmlidXRlcyBhcmUgYW55dGhpbmcgc3BlY2lmaWVkIGluCisgICAgICAgICAgIGEgc3ViY2xhc3MsIGJ1dCB1bmtub3duIGF0dHJpYnV0ZXMgd2lsbCBiZSBpZ25vcmVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIChrZXksIHZhbCkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgICAgICAjIElnbm9yZSBzZXR0aW5nIGF0dHJpYnV0ZXMgdGhhdCB3ZXJlIHJlbW92ZWQgaW4gYSBzdWJjbGFzcywgYXMKKyAgICAgICAgICAgICMgaWYgdGhleSB3ZXJlIHVua25vd24gYXR0cmlidXRlcy4KKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLnJlbW92ZWRBdHRyczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4gIFRoaXMKKyAgICAgICAgICAgbWV0aG9kIG11c3QgYmUgcHJvdmlkZWQgYnkgYWxsIHN1YmNsYXNzZXMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gS2lja3N0YXJ0T2JqZWN0Ll9fc3RyX18oc2VsZikKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIGxpc3Qgb2YgYXJncyBhbmQgc2V0IGRhdGEgb24gdGhlIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0LgorICAgICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBzdWJjbGFzc2VzLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAicGFyc2UoKSBub3QgaW1wbGVtZW50ZWQgZm9yIEtpY2tzdGFydENvbW1hbmQiCisKKyAgICBkZWYgYXBwbHkoc2VsZiwgaW5zdHJvb3Q9Ii8iKToKKyAgICAgICAgIiIiV3JpdGUgb3V0IHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0LgorICAgICAgICAgICBTdWJjbGFzc2VzIHdoaWNoIGRvIG5vdCBwcm92aWRlIHRoaXMgbWV0aG9kIHdpbGwgbm90IGhhdmUgdGhlaXIKKyAgICAgICAgICAgY29uZmlndXJhdGlvbiB3cml0dGVuIG91dC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGRhdGFMaXN0KHNlbGYpOgorICAgICAgICAiIiJGb3IgY29tbWFuZHMgdGhhdCBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMgaW4gYSBzaW5nbGUga2lja3N0YXJ0CisgICAgICAgICAgIGZpbGUgKGxpa2UgbmV0d29yaywgcGFydCwgZXRjLiksIHJldHVybiB0aGUgbGlzdCB0aGF0IHdlIHNob3VsZAorICAgICAgICAgICBhcHBlbmQgbW9yZSBkYXRhIG9iamVjdHMgdG8uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRlbGV0ZVJlbW92ZWRBdHRycyhzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIGFsbCBhdHRyaWJ1dGVzIGZyb20gc2VsZiB0aGF0IGFyZSBnaXZlbiBpbiB0aGUgcmVtb3ZlZEF0dHJzCisgICAgICAgICAgIGxpc3QuICBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb20gX19pbml0X18gaW4gYSBzdWJjbGFzcywKKyAgICAgICAgICAgYnV0IG9ubHkgYWZ0ZXIgdGhlIHN1cGVyY2xhc3MncyBfX2luaXRfXyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGF0dHIgaW4gZmlsdGVyKGxhbWJkYSBrOiBoYXNhdHRyKHNlbGYsIGspLCBzZWxmLnJlbW92ZWRBdHRycyk6CisgICAgICAgICAgICBkZWxhdHRyKHNlbGYsIGF0dHIpCisKKyAgICAjIFNldCB0aGUgY29udGVudHMgb2YgdGhlIG9wdHMgb2JqZWN0IChhbiBpbnN0YW5jZSBvZiBvcHRwYXJzZS5WYWx1ZXMKKyAgICAjIHJldHVybmVkIGJ5IHBhcnNlX2FyZ3MpIGFzIGF0dHJpYnV0ZXMgb24gdGhlIEtpY2tzdGFydENvbW1hbmQgb2JqZWN0LgorICAgICMgSXQncyB1c2VmdWwgdG8gY2FsbCB0aGlzIGZyb20gS2lja3N0YXJ0Q29tbWFuZCBzdWJjbGFzc2VzIGFmdGVyIHBhcnNpbmcKKyAgICAjIHRoZSBhcmd1bWVudHMuCisgICAgZGVmIF9zZXRUb1NlbGYoc2VsZiwgb3B0UGFyc2VyLCBvcHRzKToKKyAgICAgICAgc2VsZi5fc2V0VG9PYmoob3B0UGFyc2VyLCBvcHRzLCBzZWxmKQorCisgICAgIyBTZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgb3B0cyBvYmplY3QgKGFuIGluc3RhbmNlIG9mIG9wdHBhcnNlLlZhbHVlcworICAgICMgcmV0dXJuZWQgYnkgcGFyc2VfYXJncykgYXMgYXR0cmlidXRlcyBvbiB0aGUgcHJvdmlkZWQgb2JqZWN0IG9iai4gIEl0J3MKKyAgICAjIHVzZWZ1bCB0byBjYWxsIHRoaXMgZnJvbSBLaWNrc3RhcnRDb21tYW5kIHN1YmNsYXNzZXMgdGhhdCBoYW5kbGUgbGlzdHMKKyAgICAjIG9mIG9iamVjdHMgKGxpa2UgcGFydGl0aW9ucywgbmV0d29yayBkZXZpY2VzLCBldGMuKSBhbmQgbmVlZCB0byBwb3B1bGF0ZQorICAgICMgYSBEYXRhIG9iamVjdC4KKyAgICBkZWYgX3NldFRvT2JqKHNlbGYsIG9wdFBhcnNlciwgb3B0cywgb2JqKToKKyAgICAgICAgZm9yIGtleSBpbiBmaWx0ZXIgKGxhbWJkYSBrOiBnZXRhdHRyKG9wdHMsIGspICE9IE5vbmUsIG9wdFBhcnNlci5rZXlzKCkpOgorICAgICAgICAgICAgc2V0YXR0cihvYmosIGtleSwgZ2V0YXR0cihvcHRzLCBrZXkpKQorCitjbGFzcyBEZXByZWNhdGVkQ29tbWFuZChLaWNrc3RhcnRDb21tYW5kKToKKyAgICAiIiJTcGVjaWZ5IHRoYXQgYSBjb21tYW5kIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBoYXMgYW55IGZ1bmN0aW9uLgorICAgICAgIEFueSBjb21tYW5kIHRoYXQgaXMgZGVwcmVjYXRlZCBzaG91bGQgYmUgc3ViY2xhc3NlZCBmcm9tIHRoaXMgY2xhc3MsCisgICAgICAgb25seSBzcGVjaWZ5aW5nIGFuIF9faW5pdF9fIG1ldGhvZCB0aGF0IGNhbGxzIHRoZSBzdXBlcmNsYXNzJ3MgX19pbml0X18uCisgICAgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIFdlIGRvbid0IHdhbnQgcGVvcGxlIHVzaW5nIHRoaXMgY2xhc3MgYnkgaXRzZWxmLgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBLaWNrc3RhcnRDb21tYW5kOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiRGVwcmVjYXRlZENvbW1hbmQgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IERlcHJlY2F0ZWRDb21tYW5kIGluc3RhbmNlLgorICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJQbGFjZWhvbGRlciBzaW5jZSBEZXByZWNhdGVkQ29tbWFuZHMgZG9uJ3Qgd29yayBhbnltb3JlLiIiIgorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgIiIiUHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGNvbW1hbmQgaXMgc2VlbiBpbiB0aGUgaW5wdXQgZmlsZS4iIiIKKyAgICAgICAgbWFwcGluZyA9IHsibGluZW5vIjogc2VsZi5saW5lbm8sICJjbWQiOiBzZWxmLmN1cnJlbnRDbWR9CisgICAgICAgIHdhcm5pbmdzLndhcm4oXygiSWdub3JpbmcgZGVwcmVjYXRlZCBjb21tYW5kIG9uIGxpbmUgJShsaW5lbm8pczogIFRoZSAlKGNtZClzIGNvbW1hbmQgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGhhcyBhbnkgZWZmZWN0LiAgSXQgbWF5IGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUgcmVsZWFzZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IgZnJvbSBraWNrc3RhcnQuICBQbGVhc2UgbW9kaWZ5IHlvdXIga2lja3N0YXJ0IGZpbGUgdG8gcmVtb3ZlIHRoaXMgY29tbWFuZC4iKSAlIG1hcHBpbmcsIERlcHJlY2F0aW9uV2FybmluZykKKworCisjIyMKKyMjIyBIQU5ETEVSUworIyMjCitjbGFzcyBCYXNlSGFuZGxlcihLaWNrc3RhcnRPYmplY3QpOgorICAgICIiIkVhY2ggdmVyc2lvbiBvZiBraWNrc3RhcnQgc3ludGF4IGlzIHByb3ZpZGVkIGJ5IGEgc3ViY2xhc3Mgb2YgdGhpcworICAgICAgIGNsYXNzLiAgVGhlc2Ugc3ViY2xhc3NlcyBhcmUgd2hhdCB1c2VycyB3aWxsIGludGVyYWN0IHdpdGggZm9yIHBhcnNpbmcsCisgICAgICAgZXh0cmFjdGluZyBkYXRhLCBhbmQgd3JpdGluZyBvdXQga2lja3N0YXJ0IGZpbGVzLiAgVGhpcyBpcyBhbiBhYnN0cmFjdAorICAgICAgIGNsYXNzLgorCisgICAgICAgdmVyc2lvbiAtLSBUaGUgdmVyc2lvbiB0aGlzIHN5bnRheCBoYW5kbGVyIHN1cHBvcnRzLiAgVGhpcyBpcyBzZXQgYnkKKyAgICAgICAgICAgICAgICAgIGEgY2xhc3MgYXR0cmlidXRlIG9mIGEgQmFzZUhhbmRsZXIgc3ViY2xhc3MgYW5kIGlzIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgIHNldCB1cCB0aGUgY29tbWFuZCBkaWN0LiAgSXQgaXMgZm9yIHJlYWQtb25seSB1c2UuCisgICAgIiIiCisgICAgdmVyc2lvbiA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nPU5vbmUsIGRhdGFNYXBwaW5nPU5vbmUsIGNvbW1hbmRVcGRhdGVzPU5vbmUsCisgICAgICAgICAgICAgICAgIGRhdGFVcGRhdGVzPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBCYXNlSGFuZGxlciBpbnN0YW5jZS4gIFRoaXMgbWV0aG9kIG11c3QgYmUgcHJvdmlkZWQgYnkKKyAgICAgICAgICAgYWxsIHN1YmNsYXNzZXMsIGJ1dCBzdWJjbGFzc2VzIG11c3QgY2FsbCBCYXNlSGFuZGxlci5fX2luaXRfXyBmaXJzdC4KKworICAgICAgICAgICBtYXBwaW5nICAgICAgICAgIC0tIEEgY3VzdG9tIG1hcCBmcm9tIGNvbW1hbmQgc3RyaW5ncyB0byBjbGFzc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIHlvdXIgb3duIGhhbmRsZXIgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgY29tbWFuZCBvYmplY3RzLiAgSXQgaXMgb3RoZXJ3aXNlIHVudXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByYXJlbHkgbmVlZGVkLiAgSWYgeW91IGdpdmUgdGhpcyBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWFwcGluZyB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIGRlZmF1bHQgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvIG11c3QgaW5jbHVkZSBhbGwgY29tbWFuZHMgeW91IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvZ25pemVkLgorICAgICAgICAgICBkYXRhTWFwcGluZyAgICAgIC0tIFRoaXMgaXMgdGhlIHNhbWUgYXMgbWFwcGluZywgYnV0IGZvciBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4gIEFsbCB0aGUgc2FtZSBjb21tZW50cyBhcHBseS4KKyAgICAgICAgICAgY29tbWFuZFVwZGF0ZXMgICAtLSBUaGlzIGlzIHNpbWlsYXIgdG8gbWFwcGluZywgYnV0IGRvZXMgbm90IHRha2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGxhY2Ugb2YgdGhlIGRlZmF1bHRzIGVudGlyZWx5LiAgSW5zdGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1hcHBpbmcgaXMgYXBwbGllZCBhZnRlciB0aGUgZGVmYXVsdHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcyBpdCB3aXRoIGp1c3QgdGhlIGNvbW1hbmRzIHlvdSB3YW50IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5LgorICAgICAgICAgICBkYXRhVXBkYXRlcyAgICAgIC0tIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29tbWFuZFVwZGF0ZXMsIGJ1dCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIG9iamVjdHMuCisKKworICAgICAgICAgICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGNvbW1hbmRzIC0tIEEgbWFwcGluZyBmcm9tIGEgc3RyaW5nIGNvbW1hbmQgdG8gYSBLaWNrc3RhcnRDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgIHN1YmNsYXNzIG9iamVjdCB0aGF0IGhhbmRsZXMgaXQuICBNdWx0aXBsZSBzdHJpbmdzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICBtYXAgdG8gdGhlIHNhbWUgb2JqZWN0LCBidXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgb2JqZWN0IHNob3VsZCBldmVyIGV4aXN0LiAgTW9zdCB1c2VycyBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgICAgbmV2ZXIgaGF2ZSB0byBkZWFsIHdpdGggdGhpcyBkaXJlY3RseSwgYXMgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZWQgaW50ZXJuYWxseSBhbmQgY2FsbGVkIHRocm91Z2ggZGlzcGF0Y2hlci4KKyAgICAgICAgICAgY3VycmVudExpbmUgLS0gVGhlIGN1cnJlbnQgdW5wcm9jZXNzZWQgbGluZSBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2F1c2VkIHRoaXMgaGFuZGxlciB0byBiZSBydW4uCisgICAgICAgICAgIHBhY2thZ2VzIC0tIEFuIGluc3RhbmNlIG9mIHB5a2lja3N0YXJ0LnBhcnNlci5QYWNrYWdlcyB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZXMgdGhlIHBhY2thZ2VzIHNlY3Rpb24gb2YgdGhlIGlucHV0IGZpbGUuCisgICAgICAgICAgIHBsYXRmb3JtIC0tIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGhhcmR3YXJlIHBsYXRmb3JtLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgb25seSBieSBzeXN0ZW0tY29uZmlnLWtpY2tzdGFydC4KKyAgICAgICAgICAgc2NyaXB0cyAgLS0gQSBsaXN0IG9mIHB5a2lja3N0YXJ0LnBhcnNlci5TY3JpcHQgaW5zdGFuY2VzLCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZWQgYnkgS2lja3N0YXJ0UGFyc2VyLmFkZFNjcmlwdCBhbmQgZGVzY3JpYmVzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAlcHJlLyVwb3N0LyV0cmFjZWJhY2sgc2NyaXB0IHNlY3Rpb24gb2YgdGhlIGlucHV0IGZpbGUuCisgICAgICAgICIiIgorCisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdXNpbmcgdGhpcyBjbGFzcyBieSBpdHNlbGYuCisgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIEJhc2VIYW5kbGVyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiQmFzZUhhbmRsZXIgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIgorCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgIyBUaGlzIGlzbid0IHJlYWxseSBhIGdvb2QgcGxhY2UgZm9yIHRoZXNlLCBidXQgaXQncyBiZXR0ZXIgdGhhbgorICAgICAgICAjIGV2ZXJ5dGhpbmcgZWxzZSBJIGNhbiB0aGluayBvZi4KKyAgICAgICAgc2VsZi5zY3JpcHRzID0gW10KKyAgICAgICAgc2VsZi5wYWNrYWdlcyA9IFBhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9ICIiCisKKyAgICAgICAgIyBUaGVzZSB3aWxsIGJlIHNldCBieSB0aGUgZGlzcGF0Y2hlci4KKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IHt9CisgICAgICAgIHNlbGYuY3VycmVudExpbmUgPSAwCisKKyAgICAgICAgIyBBIGRpY3Qga2V5ZWQgYnkgYW4gaW50ZWdlciBwcmlvcml0eSBudW1iZXIsIHdpdGggZWFjaCB2YWx1ZSBiZWluZyBhCisgICAgICAgICMgbGlzdCBvZiBLaWNrc3RhcnRDb21tYW5kIHN1YmNsYXNzZXMuICBUaGlzIGRpY3QgaXMgbWFpbnRhaW5lZCBieQorICAgICAgICAjIHJlZ2lzdGVyQ29tbWFuZCBhbmQgdXNlZCBpbiBfX3N0cl9fLiAgTm8gb25lIGVsc2Ugc2hvdWxkIGJlIHRvdWNoaW5nCisgICAgICAgICMgaXQuCisgICAgICAgIHNlbGYuX3dyaXRlT3JkZXIgPSB7fQorCisgICAgICAgIHNlbGYuX3JlZ2lzdGVyQ29tbWFuZHMobWFwcGluZywgZGF0YU1hcHBpbmcsIGNvbW1hbmRVcGRhdGVzLCBkYXRhVXBkYXRlcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLnBsYXRmb3JtICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIjcGxhdGZvcm09JXNcbiIgJSBzZWxmLnBsYXRmb3JtCisKKyAgICAgICAgcmV0dmFsICs9ICIjdmVyc2lvbj0lc1xuIiAlIHZlcnNpb25Ub1N0cmluZyhzZWxmLnZlcnNpb24pCisKKyAgICAgICAgbHN0ID0gc2VsZi5fd3JpdGVPcmRlci5rZXlzKCkKKyAgICAgICAgbHN0LnNvcnQoKQorCisgICAgICAgIGZvciBwcmlvIGluIGxzdDoKKyAgICAgICAgICAgIGZvciBvYmogaW4gc2VsZi5fd3JpdGVPcmRlcltwcmlvXToKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gb2JqLl9fc3RyX18oKQorCisgICAgICAgIGZvciBzY3JpcHQgaW4gc2VsZi5zY3JpcHRzOgorICAgICAgICAgICAgcmV0dmFsICs9IHNjcmlwdC5fX3N0cl9fKCkKKworICAgICAgICByZXR2YWwgKz0gc2VsZi5wYWNrYWdlcy5fX3N0cl9fKCkKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2luc2VydFNvcnRlZChzZWxmLCBsc3QsIG9iaik6CisgICAgICAgIGxlbmd0aCA9IGxlbihsc3QpCisgICAgICAgIGkgPSAwCisKKyAgICAgICAgd2hpbGUgaSA8IGxlbmd0aDoKKyAgICAgICAgICAgICMgSWYgdGhlIHR3byBjbGFzc2VzIGhhdmUgdGhlIHNhbWUgbmFtZSwgaXQncyBiZWNhdXNlIHdlIGFyZQorICAgICAgICAgICAgIyBvdmVycmlkaW5nIGFuIGV4aXN0aW5nIGNsYXNzIHdpdGggb25lIGZyb20gYSBsYXRlciBraWNrc3RhcnQKKyAgICAgICAgICAgICMgdmVyc2lvbiwgc28gcmVtb3ZlIHRoZSBvbGQgb25lIGluIGZhdm9yIG9mIHRoZSBuZXcgb25lLgorICAgICAgICAgICAgaWYgb2JqLl9fY2xhc3NfXy5fX25hbWVfXyA+IGxzdFtpXS5fX2NsYXNzX18uX19uYW1lX186CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBlbGlmIG9iai5fX2NsYXNzX18uX19uYW1lX18gPT0gbHN0W2ldLl9fY2xhc3NfXy5fX25hbWVfXzoKKyAgICAgICAgICAgICAgICBsc3RbaV0gPSBvYmoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgb2JqLl9fY2xhc3NfXy5fX25hbWVfXyA8IGxzdFtpXS5fX2NsYXNzX18uX19uYW1lX186CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBpZiBpID49IGxlbmd0aDoKKyAgICAgICAgICAgIGxzdC5hcHBlbmQob2JqKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbHN0Lmluc2VydChpLCBvYmopCisKKyAgICBkZWYgX3NldENvbW1hbmQoc2VsZiwgY21kT2JqKToKKyAgICAgICAgIyBBZGQgYW4gYXR0cmlidXRlIG9uIHRoaXMgdmVyc2lvbiBvYmplY3QuICBXZSBuZWVkIHRoaXMgdG8gcHJvdmlkZSBhCisgICAgICAgICMgd2F5IGZvciBjbGllbnRzIHRvIGFjY2VzcyB0aGUgY29tbWFuZCBvYmplY3RzLiAgV2UgYWxzbyBuZWVkIHRvIHN0cmlwCisgICAgICAgICMgb2ZmIHRoZSB2ZXJzaW9uIHBhcnQgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIG5hbWUuCisgICAgICAgIGlmIGNtZE9iai5fX2NsYXNzX18uX19uYW1lX18uZmluZCgiXyIpICE9IC0xOgorICAgICAgICAgICAgbmFtZSA9IHVuaWNvZGUoY21kT2JqLl9fY2xhc3NfXy5fX25hbWVfXy5zcGxpdCgiXyIsIDEpWzFdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IHVuaWNvZGUoY21kT2JqLl9fY2xhc3NfXy5fX25hbWVfXykubG93ZXIoKQorCisgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZS5sb3dlcigpLCBjbWRPYmopCisKKyAgICAgICAgIyBBbHNvLCBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBfd3JpdGVPcmRlciBkaWN0IGluIHRoZSByaWdodCBwbGFjZS4KKyAgICAgICAgaWYgY21kT2JqLndyaXRlUHJpb3JpdHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl93cml0ZU9yZGVyLmhhc19rZXkoY21kT2JqLndyaXRlUHJpb3JpdHkpOgorICAgICAgICAgICAgICAgIHNlbGYuX2luc2VydFNvcnRlZChzZWxmLl93cml0ZU9yZGVyW2NtZE9iai53cml0ZVByaW9yaXR5XSwgY21kT2JqKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZU9yZGVyW2NtZE9iai53cml0ZVByaW9yaXR5XSA9IFtjbWRPYmpdCisKKyAgICBkZWYgX3JlZ2lzdGVyQ29tbWFuZHMoc2VsZiwgbWFwcGluZz1Ob25lLCBkYXRhTWFwcGluZz1Ob25lLCBjb21tYW5kVXBkYXRlcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVXBkYXRlcz1Ob25lKToKKyAgICAgICAgaWYgbWFwcGluZyA9PSB7fSBvciBtYXBwaW5nID09IE5vbmU6CisgICAgICAgICAgICBmcm9tIHB5a2lja3N0YXJ0LmhhbmRsZXJzLmNvbnRyb2wgaW1wb3J0IGNvbW1hbmRNYXAKKyAgICAgICAgICAgIGNNYXAgPSBjb21tYW5kTWFwW3NlbGYudmVyc2lvbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNNYXAgPSBtYXBwaW5nCisKKyAgICAgICAgaWYgZGF0YU1hcHBpbmcgPT0ge30gb3IgZGF0YU1hcHBpbmcgPT0gTm9uZToKKyAgICAgICAgICAgIGZyb20gcHlraWNrc3RhcnQuaGFuZGxlcnMuY29udHJvbCBpbXBvcnQgZGF0YU1hcAorICAgICAgICAgICAgZE1hcCA9IGRhdGFNYXBbc2VsZi52ZXJzaW9uXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZE1hcCA9IGRhdGFNYXBwaW5nCisKKyAgICAgICAgaWYgdHlwZShjb21tYW5kVXBkYXRlcykgPT0gdHlwZXMuRGljdFR5cGU6CisgICAgICAgICAgICBjTWFwLnVwZGF0ZShjb21tYW5kVXBkYXRlcykKKworICAgICAgICBpZiB0eXBlKGRhdGFVcGRhdGVzKSA9PSB0eXBlcy5EaWN0VHlwZToKKyAgICAgICAgICAgIGRNYXAudXBkYXRlKGRhdGFVcGRhdGVzKQorCisgICAgICAgIGZvciAoY21kTmFtZSwgY21kQ2xhc3MpIGluIGNNYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAjIEZpcnN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IGluc3RhbnRpYXRlZCB0aGlzIGNvbW1hbmQgaGFuZGxlcgorICAgICAgICAgICAgIyBhbHJlYWR5LiAgSWYgd2UgaGF2ZSwgd2UganVzdCBuZWVkIHRvIG1ha2UgYW5vdGhlciBtYXBwaW5nIHRvCisgICAgICAgICAgICAjIGl0IGluIHNlbGYuY29tbWFuZHMuCisgICAgICAgICAgICBjbWRPYmogPSBOb25lCisKKyAgICAgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIHNlbGYuY29tbWFuZHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgdmFsLl9fY2xhc3NfXy5fX25hbWVfXyA9PSBjbWRDbGFzcy5fX25hbWVfXzoKKyAgICAgICAgICAgICAgICAgICAgY21kT2JqID0gdmFsCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgSWYgd2UgZGlkbid0IGZpbmQgYW4gaW5zdGFuY2UgaW4gc2VsZi5jb21tYW5kcywgY3JlYXRlIG9uZSBub3cuCisgICAgICAgICAgICBpZiBjbWRPYmogPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjbWRPYmogPSBjbWRDbGFzcygpCisgICAgICAgICAgICAgICAgc2VsZi5fc2V0Q29tbWFuZChjbWRPYmopCisKKyAgICAgICAgICAgICMgRmluYWxseSwgYWRkIHRoZSBtYXBwaW5nIHRvIHRoZSBjb21tYW5kcyBkaWN0LgorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWROYW1lXSA9IGNtZE9iagorICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tjbWROYW1lXS5oYW5kbGVyID0gc2VsZgorCisgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIGNyZWF0ZSBhdHRyaWJ1dGVzIGZvciB0aGUgdmFyaW91cyBkYXRhIG9iamVjdHMuCisgICAgICAgICMgTm8gY2hlY2tzIGhlcmUgYmVjYXVzZSBkTWFwIGlzIGEgYmlqZWN0aW9uLiAgQXQgbGVhc3QsIHRoYXQncyB3aGF0CisgICAgICAgICMgdGhlIGNvbW1lbnQgc2F5cy4gIEhvcGUgbm8gb25lIHNjcmV3cyB0aGF0IHVwLgorICAgICAgICBmb3IgKGRhdGFOYW1lLCBkYXRhQ2xhc3MpIGluIGRNYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGRhdGFOYW1lLCBkYXRhQ2xhc3MpCisKKyAgICBkZWYgZGlzcGF0Y2hlcihzZWxmLCBhcmdzLCBsaW5lbm8pOgorICAgICAgICAiIiJDYWxsIHRoZSBhcHByb3ByaWF0ZSBLaWNrc3RhcnRDb21tYW5kIGhhbmRsZXIgZm9yIHRoZSBjdXJyZW50IGxpbmUKKyAgICAgICAgICAgaW4gdGhlIGtpY2tzdGFydCBmaWxlLiAgQSBoYW5kbGVyIGZvciB0aGUgY3VycmVudCBjb21tYW5kIHNob3VsZAorICAgICAgICAgICBiZSByZWdpc3RlcmVkLCB0aG91Z2ggYSBoYW5kbGVyIG9mIE5vbmUgaXMgbm90IGFuIGVycm9yLiAgUmV0dXJucworICAgICAgICAgICB0aGUgZGF0YSBvYmplY3QgcmV0dXJuZWQgYnkgS2lja3N0YXJ0Q29tbWFuZC5wYXJzZS4KKworICAgICAgICAgICBhcmdzICAgIC0tIEEgbGlzdCBvZiBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgY29tbWFuZAorICAgICAgICAgICBsaW5lbm8gIC0tIFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSwgZm9yIGVycm9yIHJlcG9ydGluZworICAgICAgICAiIiIKKyAgICAgICAgY21kID0gYXJnc1swXQorCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbW1hbmRzLmhhc19rZXkoY21kKToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlVua25vd24gY29tbWFuZDogJXMiICUgY21kKSkKKyAgICAgICAgZWxpZiBzZWxmLmNvbW1hbmRzW2NtZF0gIT0gTm9uZToKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZHNbY21kXS5jdXJyZW50Q21kID0gY21kCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZF0uY3VycmVudExpbmUgPSBzZWxmLmN1cnJlbnRMaW5lCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRzW2NtZF0ubGluZW5vID0gbGluZW5vCisKKyAgICAgICAgICAgICMgVGhlIHBhcnNlciByZXR1cm5zIHRoZSBkYXRhIG9iamVjdCB0aGF0IHdhcyBtb2RpZmllZC4gIFRoaXMgY291bGQKKyAgICAgICAgICAgICMgYmUgYSBCYXNlRGF0YSBzdWJjbGFzcyB0aGF0IHNob3VsZCBiZSBwdXQgaW50byBhIGxpc3QsIG9yIGl0CisgICAgICAgICAgICAjIGNvdWxkIGJlIHRoZSBjb21tYW5kIGhhbmRsZXIgb2JqZWN0IGl0c2VsZi4KKyAgICAgICAgICAgIG9iaiA9IHNlbGYuY29tbWFuZHNbY21kXS5wYXJzZShhcmdzWzE6XSkKKyAgICAgICAgICAgIGxzdCA9IHNlbGYuY29tbWFuZHNbY21kXS5kYXRhTGlzdCgpCisgICAgICAgICAgICBpZiBsc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbHN0LmFwcGVuZChvYmopCisKKyAgICAgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBtYXNrQWxsRXhjZXB0KHNlbGYsIGxzdCk6CisgICAgICAgICIiIlNldCBhbGwgZW50cmllcyBpbiB0aGUgY29tbWFuZHMgZGljdCB0byBOb25lLCBleGNlcHQgdGhlIG9uZXMgaW4KKyAgICAgICAgICAgdGhlIGxzdC4gIEFsbCBvdGhlciBjb21tYW5kcyB3aWxsIG5vdCBiZSBwcm9jZXNzZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl93cml0ZU9yZGVyID0ge30KKworICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBzZWxmLmNvbW1hbmRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGtleSBpbiBsc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kc1trZXldID0gTm9uZQorCisgICAgZGVmIGhhc0NvbW1hbmQoc2VsZiwgY21kKToKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBoYW5kbGVyIGZvciB0aGUgc3RyaW5nIGNtZC4iIiIKKyAgICAgICAgcmV0dXJuIGhhc2F0dHIoc2VsZiwgY21kKQorCisKKyMjIworIyMjIERBVEEKKyMjIworY2xhc3MgQmFzZURhdGEoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGRhdGEgb2JqZWN0cy4gIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIiIiCisgICAgcmVtb3ZlZEtleXdvcmRzID0gW10KKyAgICByZW1vdmVkQXR0cnMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBCYXNlRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgCisgICAgICAgICAgIGxpbmVubyAtLSBMaW5lIG51bWJlciBpbiB0aGUga3MtZmlsZSB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZAorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIGRvbid0IHdhbnQgcGVvcGxlIHVzaW5nIHRoaXMgY2xhc3MgYnkgaXRzZWxmLgorICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBCYXNlRGF0YToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIkJhc2VEYXRhIGlzIGFuIGFic3RyYWN0IGNsYXNzLiIKKworICAgICAgICBLaWNrc3RhcnRPYmplY3QuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmxpbmVubyA9IDAKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9ybWF0dGVkIGZvciBvdXRwdXQgdG8gYSBraWNrc3RhcnQgZmlsZS4iIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiU2V0IG11bHRpcGxlIGF0dHJpYnV0ZXMgb24gYSBzdWJjbGFzcyBvZiBCYXNlRGF0YSBhdCBvbmNlIHZpYQorICAgICAgICAgICBrZXl3b3JkIGFyZ3VtZW50cy4gIFZhbGlkIGF0dHJpYnV0ZXMgYXJlIGFueXRoaW5nIHNwZWNpZmllZCBpbiBhCisgICAgICAgICAgIHN1YmNsYXNzLCBidXQgdW5rbm93biBhdHRyaWJ1dGVzIHdpbGwgYmUgaWdub3JlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciAoa2V5LCB2YWwpIGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICAgICAgIyBJZ25vcmUgc2V0dGluZyBhdHRyaWJ1dGVzIHRoYXQgd2VyZSByZW1vdmVkIGluIGEgc3ViY2xhc3MsIGFzCisgICAgICAgICAgICAjIGlmIHRoZXkgd2VyZSB1bmtub3duIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZi5yZW1vdmVkQXR0cnM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgZGVsZXRlUmVtb3ZlZEF0dHJzKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYWxsIGF0dHJpYnV0ZXMgZnJvbSBzZWxmIHRoYXQgYXJlIGdpdmVuIGluIHRoZSByZW1vdmVkQXR0cnMKKyAgICAgICAgICAgbGlzdC4gIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBfX2luaXRfXyBpbiBhIHN1YmNsYXNzLAorICAgICAgICAgICBidXQgb25seSBhZnRlciB0aGUgc3VwZXJjbGFzcydzIF9faW5pdF9fIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgYXR0ciBpbiBmaWx0ZXIobGFtYmRhIGs6IGhhc2F0dHIoc2VsZiwgayksIHNlbGYucmVtb3ZlZEF0dHJzKToKKyAgICAgICAgICAgIGRlbGF0dHIoc2VsZiwgYXR0cikKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9fX2luaXRfXy5weSBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDk0NTUwCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitpbXBvcnQgYm9vdGxvYWRlciwgcGFydGl0aW9uCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvYm9vdGxvYWRlci5weSBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9jb21tYW5kcy9ib290bG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjU1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvYm9vdGxvYWRlci5weQpAQCAtMCwwICsxLDIxNiBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQuYmFzZSBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5vcHRpb25zIGltcG9ydCAqCisKK2NsYXNzIEZDM19Cb290bG9hZGVyKEtpY2tzdGFydENvbW1hbmQpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEtpY2tzdGFydENvbW1hbmQucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gS2lja3N0YXJ0Q29tbWFuZC5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5vcCA9IHNlbGYuX2dldFBhcnNlcigpCisKKyAgICAgICAgc2VsZi5kcml2ZW9yZGVyID0ga3dhcmdzLmdldCgiZHJpdmVvcmRlciIsIFtdKQorICAgICAgICBzZWxmLmFwcGVuZExpbmUgPSBrd2FyZ3MuZ2V0KCJhcHBlbmRMaW5lIiwgIiIpCisgICAgICAgIHNlbGYuZm9yY2VMQkEgPSBrd2FyZ3MuZ2V0KCJmb3JjZUxCQSIsIEZhbHNlKQorICAgICAgICBzZWxmLmxpbmVhciA9IGt3YXJncy5nZXQoImxpbmVhciIsIFRydWUpCisgICAgICAgIHNlbGYubG9jYXRpb24gPSBrd2FyZ3MuZ2V0KCJsb2NhdGlvbiIsICIiKQorICAgICAgICBzZWxmLm1kNXBhc3MgPSBrd2FyZ3MuZ2V0KCJtZDVwYXNzIiwgIiIpCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBrd2FyZ3MuZ2V0KCJwYXNzd29yZCIsICIiKQorICAgICAgICBzZWxmLnVwZ3JhZGUgPSBrd2FyZ3MuZ2V0KCJ1cGdyYWRlIiwgRmFsc2UpCisgICAgICAgIHNlbGYudXNlTGlsbyA9IGt3YXJncy5nZXQoInVzZUxpbG8iLCBGYWxzZSkKKworICAgICAgICBzZWxmLmRlbGV0ZVJlbW92ZWRBdHRycygpCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLmFwcGVuZExpbmUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFwcGVuZD1cIiVzXCIiICUgc2VsZi5hcHBlbmRMaW5lCisgICAgICAgIGlmIHNlbGYubGluZWFyOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1saW5lYXIiCisgICAgICAgIGlmIHNlbGYubG9jYXRpb246CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWxvY2F0aW9uPSVzIiAlIHNlbGYubG9jYXRpb24KKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiZm9yY2VMQkEiKSBhbmQgc2VsZi5mb3JjZUxCQToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbGJhMzIiCisgICAgICAgIGlmIHNlbGYucGFzc3dvcmQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXBhc3N3b3JkPVwiJXNcIiIgJSBzZWxmLnBhc3N3b3JkCisgICAgICAgIGlmIHNlbGYubWQ1cGFzcyAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbWQ1cGFzcz1cIiVzXCIiICUgc2VsZi5tZDVwYXNzCisgICAgICAgIGlmIHNlbGYudXBncmFkZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tdXBncmFkZSIKKyAgICAgICAgaWYgc2VsZi51c2VMaWxvOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11c2VMaWxvIgorICAgICAgICBpZiBsZW4oc2VsZi5kcml2ZW9yZGVyKSA+IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWRyaXZlb3JkZXI9XCIlc1wiIiAlICIsIi5qb2luKHNlbGYuZHJpdmVvcmRlcikKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dmFsID0gS2lja3N0YXJ0Q29tbWFuZC5fX3N0cl9fKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5sb2NhdGlvbiAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIyBTeXN0ZW0gYm9vdGxvYWRlciBjb25maWd1cmF0aW9uXG5ib290bG9hZGVyIgorICAgICAgICAgICAgcmV0dmFsICs9IHNlbGYuX2dldEFyZ3NBc1N0cigpICsgIlxuIgorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgZHJpdmVvcmRlcl9jYiAob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGZvciBkIGluIHZhbHVlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIFtdKS5hcHBlbmQoZCkKKworICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1hcHBlbmQiLCBkZXN0PSJhcHBlbmRMaW5lIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1saW5lYXIiLCBkZXN0PSJsaW5lYXIiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2xpbmVhciIsIGRlc3Q9ImxpbmVhciIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxvY2F0aW9uIiwgZGVzdD0ibG9jYXRpb24iLCB0eXBlPSJjaG9pY2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im1iciIsCisgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bIm1iciIsICJwYXJ0aXRpb24iLCAibm9uZSIsICJib290Il0pCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbGJhMzIiLCBkZXN0PSJmb3JjZUxCQSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1wYXNzd29yZCIsIGRlc3Q9InBhc3N3b3JkIiwgZGVmYXVsdD0iIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1tZDVwYXNzIiwgZGVzdD0ibWQ1cGFzcyIsIGRlZmF1bHQ9IiIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tdXBncmFkZSIsIGRlc3Q9InVwZ3JhZGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tdXNlTGlsbyIsIGRlc3Q9InVzZUxpbG8iLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZHJpdmVvcmRlciIsIGRlc3Q9ImRyaXZlb3JkZXIiLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1kcml2ZW9yZGVyX2NiLCBuYXJncz0xLCB0eXBlPSJzdHJpbmciKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IHNlbGYub3AucGFyc2VfYXJncyhhcmdzPWFyZ3MsIGxpbmVubz1zZWxmLmxpbmVubykKKyAgICAgICAgc2VsZi5fc2V0VG9TZWxmKHNlbGYub3AsIG9wdHMpCisKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50Q21kID09ICJsaWxvIjoKKyAgICAgICAgICAgIHNlbGYudXNlTGlsbyA9IFRydWUKKworICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBGQzRfQm9vdGxvYWRlcihGQzNfQm9vdGxvYWRlcik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkMzX0Jvb3Rsb2FkZXIucmVtb3ZlZEtleXdvcmRzICsgWyJsaW5lYXIiLCAidXNlTGlsbyJdCisgICAgcmVtb3ZlZEF0dHJzID0gRkMzX0Jvb3Rsb2FkZXIucmVtb3ZlZEF0dHJzICsgWyJsaW5lYXIiLCAidXNlTGlsbyJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkMzX0Jvb3Rsb2FkZXIuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9ICIiCisgICAgICAgIGlmIHNlbGYuYXBwZW5kTGluZSAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYXBwZW5kPVwiJXNcIiIgJSBzZWxmLmFwcGVuZExpbmUKKyAgICAgICAgaWYgc2VsZi5sb2NhdGlvbjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbG9jYXRpb249JXMiICUgc2VsZi5sb2NhdGlvbgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJmb3JjZUxCQSIpIGFuZCBzZWxmLmZvcmNlTEJBOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sYmEzMiIKKyAgICAgICAgaWYgc2VsZi5wYXNzd29yZCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFzc3dvcmQ9XCIlc1wiIiAlIHNlbGYucGFzc3dvcmQKKyAgICAgICAgaWYgc2VsZi5tZDVwYXNzICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1tZDVwYXNzPVwiJXNcIiIgJSBzZWxmLm1kNXBhc3MKKyAgICAgICAgaWYgc2VsZi51cGdyYWRlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS11cGdyYWRlIgorICAgICAgICBpZiBsZW4oc2VsZi5kcml2ZW9yZGVyKSA+IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWRyaXZlb3JkZXI9XCIlc1wiIiAlICIsIi5qb2luKHNlbGYuZHJpdmVvcmRlcikKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRkMzX0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLWxpbmVhciIpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tbm9saW5lYXIiKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLXVzZUxpbG8iKQorICAgICAgICByZXR1cm4gb3AKKworICAgIGRlZiBwYXJzZShzZWxmLCBhcmdzKToKKyAgICAgICAgKG9wdHMsIGV4dHJhKSA9IHNlbGYub3AucGFyc2VfYXJncyhhcmdzPWFyZ3MsIGxpbmVubz1zZWxmLmxpbmVubykKKyAgICAgICAgc2VsZi5fc2V0VG9TZWxmKHNlbGYub3AsIG9wdHMpCisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEY4X0Jvb3Rsb2FkZXIoRkM0X0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9Cb290bG9hZGVyLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDNF9Cb290bG9hZGVyLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLnRpbWVvdXQgPSBrd2FyZ3MuZ2V0KCJ0aW1lb3V0IiwgTm9uZSkKKyAgICAgICAgc2VsZi5kZWZhdWx0ID0ga3dhcmdzLmdldCgiZGVmYXVsdCIsICIiKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldCA9IEZDNF9Cb290bG9hZGVyLl9nZXRBcmdzQXNTdHIoc2VsZikKKworICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXQgKz0gIiAtLXRpbWVvdXQ9JWQiICUoc2VsZi50aW1lb3V0LCkKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0OgorICAgICAgICAgICAgcmV0ICs9ICIgLS1kZWZhdWx0PSVzIiAlKHNlbGYuZGVmYXVsdCwpCisKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRkM0X0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXRpbWVvdXQiLCBkZXN0PSJ0aW1lb3V0IiwgdHlwZT0iaW50IikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1kZWZhdWx0IiwgZGVzdD0iZGVmYXVsdCIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTJfQm9vdGxvYWRlcihGOF9Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGOF9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEY4X0Jvb3Rsb2FkZXIucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGOF9Cb290bG9hZGVyLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sYmEzMiIsIGRlc3Q9ImZvcmNlTEJBIiwgZGVwcmVjYXRlZD0xLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjE0X0Jvb3Rsb2FkZXIoRjEyX0Jvb3Rsb2FkZXIpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxMl9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcyArIFsiZm9yY2VMQkEiXQorICAgIHJlbW92ZWRBdHRycyA9IEYxMl9Cb290bG9hZGVyLnJlbW92ZWRLZXl3b3JkcyArIFsiZm9yY2VMQkEiXQorCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjEyX0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5yZW1vdmVfb3B0aW9uKCItLWxiYTMyIikKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxNV9Cb290bG9hZGVyKEYxNF9Cb290bG9hZGVyKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTRfQm9vdGxvYWRlci5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTRfQm9vdGxvYWRlci5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGMTRfQm9vdGxvYWRlci5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5pc0NyeXB0ZWQgPSBrd2FyZ3MuZ2V0KCJpc0NyeXB0ZWQiLCBGYWxzZSkKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXQgPSBGMTRfQm9vdGxvYWRlci5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5pc0NyeXB0ZWQ6CisgICAgICAgICAgICByZXQgKz0gIiAtLWlzY3J5cHRlZCIKKworICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgZGVmIHBhc3N3b3JkX2NiKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmlzQ3J5cHRlZCA9IFRydWUKKyAgICAgICAgICAgIHBhcnNlci52YWx1ZXMucGFzc3dvcmQgPSB2YWx1ZQorCisgICAgICAgIG9wID0gRjE0X0Jvb3Rsb2FkZXIuX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWlzY3J5cHRlZCIsIGRlc3Q9ImlzQ3J5cHRlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbWQ1cGFzcyIsIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1wYXNzd29yZF9jYiwgbmFyZ3M9MSwgdHlwZT0ic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIG9wCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29tbWFuZHMvcGFydGl0aW9uLnB5IGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL3BhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTY0YjFhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbW1hbmRzL3BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDMxNCBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQuYmFzZSBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5lcnJvcnMgaW1wb3J0ICoKK2Zyb20gcHlraWNrc3RhcnQub3B0aW9ucyBpbXBvcnQgKgorCitpbXBvcnQgZ2V0dGV4dAoraW1wb3J0IHdhcm5pbmdzCitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2NsYXNzIEZDM19QYXJ0RGF0YShCYXNlRGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gQmFzZURhdGEucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gQmFzZURhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgQmFzZURhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFjdGl2ZSA9IGt3YXJncy5nZXQoImFjdGl2ZSIsIEZhbHNlKQorICAgICAgICBzZWxmLnByaW1Pbmx5ID0ga3dhcmdzLmdldCgicHJpbU9ubHkiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5lbmQgPSBrd2FyZ3MuZ2V0KCJlbmQiLCAwKQorICAgICAgICBzZWxmLmZzdHlwZSA9IGt3YXJncy5nZXQoImZzdHlwZSIsICIiKQorICAgICAgICBzZWxmLmdyb3cgPSBrd2FyZ3MuZ2V0KCJncm93IiwgRmFsc2UpCisgICAgICAgIHNlbGYubWF4U2l6ZU1CID0ga3dhcmdzLmdldCgibWF4U2l6ZU1CIiwgMCkKKyAgICAgICAgc2VsZi5mb3JtYXQgPSBrd2FyZ3MuZ2V0KCJmb3JtYXQiLCBUcnVlKQorICAgICAgICBzZWxmLm9uYmlvc2Rpc2sgPSBrd2FyZ3MuZ2V0KCJvbmJpb3NkaXNrIiwgIiIpCisgICAgICAgIHNlbGYuZGlzayA9IGt3YXJncy5nZXQoImRpc2siLCAiIikKKyAgICAgICAgc2VsZi5vblBhcnQgPSBrd2FyZ3MuZ2V0KCJvblBhcnQiLCAiIikKKyAgICAgICAgc2VsZi5yZWNvbW1lbmRlZCA9IGt3YXJncy5nZXQoInJlY29tbWVuZGVkIiwgRmFsc2UpCisgICAgICAgIHNlbGYuc2l6ZSA9IGt3YXJncy5nZXQoInNpemUiLCBOb25lKQorICAgICAgICBzZWxmLnN0YXJ0ID0ga3dhcmdzLmdldCgic3RhcnQiLCAwKQorICAgICAgICBzZWxmLm1vdW50cG9pbnQgPSBrd2FyZ3MuZ2V0KCJtb3VudHBvaW50IiwgIiIpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIHkpOgorICAgICAgICBpZiBzZWxmLm1vdW50cG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb3VudHBvaW50ID09IHkubW91bnRwb2ludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2dldEFyZ3NBc1N0cihzZWxmKToKKyAgICAgICAgcmV0dmFsID0gIiIKKworICAgICAgICBpZiBzZWxmLmFjdGl2ZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYWN0aXZlIgorICAgICAgICBpZiBzZWxmLnByaW1Pbmx5OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1hc3ByaW1hcnkiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImVuZCIpIGFuZCBzZWxmLmVuZCAhPSAwOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1lbmQ9JXMiICUgc2VsZi5lbmQKKyAgICAgICAgaWYgc2VsZi5mc3R5cGUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWZzdHlwZT1cIiVzXCIiICUgc2VsZi5mc3R5cGUKKyAgICAgICAgaWYgc2VsZi5ncm93OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ncm93IgorICAgICAgICBpZiBzZWxmLm1heFNpemVNQiA+IDA6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW1heHNpemU9JWQiICUgc2VsZi5tYXhTaXplTUIKKyAgICAgICAgaWYgbm90IHNlbGYuZm9ybWF0OgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ub2Zvcm1hdCIKKyAgICAgICAgaWYgc2VsZi5vbmJpb3NkaXNrICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1vbmJpb3NkaXNrPSVzIiAlIHNlbGYub25iaW9zZGlzaworICAgICAgICBpZiBzZWxmLmRpc2sgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW9uZGlzaz0lcyIgJSBzZWxmLmRpc2sKKyAgICAgICAgaWYgc2VsZi5vblBhcnQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW9ucGFydD0lcyIgJSBzZWxmLm9uUGFydAorICAgICAgICBpZiBzZWxmLnJlY29tbWVuZGVkOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1yZWNvbW1lbmRlZCIKKyAgICAgICAgaWYgc2VsZi5zaXplIGFuZCBzZWxmLnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc2l6ZT0lc2siICUgc2VsZi5zaXplCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgInN0YXJ0IikgYW5kIHNlbGYuc3RhcnQgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc3RhcnQ9JXMiICUgc2VsZi5zdGFydAorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBCYXNlRGF0YS5fX3N0cl9fKHNlbGYpCisgICAgICAgIGlmIHNlbGYubW91bnRwb2ludDoKKyAgICAgICAgICAgIG1vdW50cG9pbnRfc3RyID0gIiVzIiAlIHNlbGYubW91bnRwb2ludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW91bnRwb2ludF9zdHIgPSAiKE5vIG1vdW50IHBvaW50KSIKKyAgICAgICAgcmV0dmFsICs9ICJwYXJ0ICVzJXNcbiIgJSAobW91bnRwb2ludF9zdHIsIHNlbGYuX2dldEFyZ3NBc1N0cigpKQorICAgICAgICByZXR1cm4gcmV0dmFsCisKK2NsYXNzIEZDNF9QYXJ0RGF0YShGQzNfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDM19QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGQzNfUGFydERhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkMzX1BhcnREYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5ieXRlc1Blcklub2RlID0ga3dhcmdzLmdldCgiYnl0ZXNQZXJJbm9kZSIsIDQwOTYpCisgICAgICAgIHNlbGYuZnNvcHRzID0ga3dhcmdzLmdldCgiZnNvcHRzIiwgIiIpCisgICAgICAgIHNlbGYubGFiZWwgPSBrd2FyZ3MuZ2V0KCJsYWJlbCIsICIiKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEZDM19QYXJ0RGF0YS5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiYnl0ZXNQZXJJbm9kZSIpIGFuZCBzZWxmLmJ5dGVzUGVySW5vZGUgIT0gMDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tYnl0ZXMtcGVyLWlub2RlPSVkIiAlIHNlbGYuYnl0ZXNQZXJJbm9kZQorICAgICAgICBpZiBzZWxmLmZzb3B0cyAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZnNvcHRpb25zPVwiJXNcIiIgJSBzZWxmLmZzb3B0cworICAgICAgICBpZiBzZWxmLmxhYmVsICE9ICIiOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1sYWJlbD0lcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitjbGFzcyBGOV9QYXJ0RGF0YShGQzRfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMgKyBbImJ5dGVzUGVySW5vZGUiXQorICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMgKyBbImJ5dGVzUGVySW5vZGUiXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDNF9QYXJ0RGF0YS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZGVsZXRlUmVtb3ZlZEF0dHJzKCkKKworICAgICAgICBzZWxmLmZzb3B0cyA9IGt3YXJncy5nZXQoImZzb3B0cyIsICIiKQorICAgICAgICBzZWxmLmxhYmVsID0ga3dhcmdzLmdldCgibGFiZWwiLCAiIikKKyAgICAgICAgc2VsZi5mc3Byb2ZpbGUgPSBrd2FyZ3MuZ2V0KCJmc3Byb2ZpbGUiLCAiIikKKyAgICAgICAgc2VsZi5lbmNyeXB0ZWQgPSBrd2FyZ3MuZ2V0KCJlbmNyeXB0ZWQiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wYXNzcGhyYXNlID0ga3dhcmdzLmdldCgicGFzc3BocmFzZSIsICIiKQorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEZDNF9QYXJ0RGF0YS5fZ2V0QXJnc0FzU3RyKHNlbGYpCisKKyAgICAgICAgaWYgc2VsZi5mc3Byb2ZpbGUgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWZzcHJvZmlsZT1cIiVzXCIiICUgc2VsZi5mc3Byb2ZpbGUKKyAgICAgICAgaWYgc2VsZi5lbmNyeXB0ZWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWVuY3J5cHRlZCIKKworICAgICAgICAgICAgaWYgc2VsZi5wYXNzcGhyYXNlICE9ICIiOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFzc3BocmFzZT1cIiVzXCIiICUgc2VsZi5wYXNzcGhyYXNlCisKKyAgICAgICAgcmV0dXJuIHJldHZhbAorCitjbGFzcyBGMTFfUGFydERhdGEoRjlfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEY5X1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcyArIFsic3RhcnQiLCAiZW5kIl0KKyAgICByZW1vdmVkQXR0cnMgPSBGOV9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMgKyBbInN0YXJ0IiwgImVuZCJdCisKK2NsYXNzIEYxMl9QYXJ0RGF0YShGMTFfUGFydERhdGEpOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEYxMV9QYXJ0RGF0YS5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTFfUGFydERhdGEucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRjExX1BhcnREYXRhLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLmVzY3Jvd2NlcnQgPSBrd2FyZ3MuZ2V0KCJlc2Nyb3djZXJ0IiwgIiIpCisgICAgICAgIHNlbGYuYmFja3VwcGFzc3BocmFzZSA9IGt3YXJncy5nZXQoImJhY2t1cHBhc3NwaHJhc2UiLCBGYWxzZSkKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGMTFfUGFydERhdGEuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYuZW5jcnlwdGVkIGFuZCBzZWxmLmVzY3Jvd2NlcnQgIT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWVzY3Jvd2NlcnQ9XCIlc1wiIiAlIHNlbGYuZXNjcm93Y2VydAorCisgICAgICAgICAgICBpZiBzZWxmLmJhY2t1cHBhc3NwaHJhc2U6CisgICAgICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1iYWNrdXBwYXNzcGhyYXNlIgorCisgICAgICAgIHJldHVybiByZXR2YWwKKworRjE0X1BhcnREYXRhID0gRjEyX1BhcnREYXRhCisKK2NsYXNzIEZDM19QYXJ0aXRpb24oS2lja3N0YXJ0Q29tbWFuZCk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gS2lja3N0YXJ0Q29tbWFuZC5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBLaWNrc3RhcnRDb21tYW5kLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHk9MTMwLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBLaWNrc3RhcnRDb21tYW5kLl9faW5pdF9fKHNlbGYsIHdyaXRlUHJpb3JpdHksICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5vcCA9IHNlbGYuX2dldFBhcnNlcigpCisKKyAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0ga3dhcmdzLmdldCgicGFydGl0aW9ucyIsIFtdKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHZhbCA9ICIiCisKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgcmV0dmFsICs9IHBhcnQuX19zdHJfXygpCisKKyAgICAgICAgaWYgcmV0dmFsICE9ICIiOgorICAgICAgICAgICAgcmV0dXJuICIjIERpc2sgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uXG4iICsgcmV0dmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgcGFydF9jYiAob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0YXJ0c3dpdGgoIi9kZXYvIik6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlWzU6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLnZhbHVlcy5lbnN1cmVfdmFsdWUob3B0aW9uLmRlc3QsIHZhbHVlKQorCisgICAgICAgIG9wID0gS1NPcHRpb25QYXJzZXIoKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWFjdGl2ZSIsIGRlc3Q9ImFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1hc3ByaW1hcnkiLCBkZXN0PSJwcmltT25seSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lbmQiLCBkZXN0PSJlbmQiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0iaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWZzdHlwZSIsICItLXR5cGUiLCBkZXN0PSJmc3R5cGUiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWdyb3ciLCBkZXN0PSJncm93IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1tYXhzaXplIiwgZGVzdD0ibWF4U2l6ZU1CIiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ub2Zvcm1hdCIsIGRlc3Q9ImZvcm1hdCIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1vbmJpb3NkaXNrIiwgZGVzdD0ib25iaW9zZGlzayIpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tb25kaXNrIiwgIi0tb25kcml2ZSIsIGRlc3Q9ImRpc2siKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW9ucGFydCIsICItLXVzZXBhcnQiLCBkZXN0PSJvblBhcnQiLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1wYXJ0X2NiLCBuYXJncz0xLCB0eXBlPSJzdHJpbmciKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXJlY29tbWVuZGVkIiwgZGVzdD0icmVjb21tZW5kZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tc2l6ZSIsIGRlc3Q9InNpemUiLCBhY3Rpb249InN0b3JlIiwgdHlwZT0ic2l6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1zdGFydCIsIGRlc3Q9InN0YXJ0IiwgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsCisgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9MSkKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncyk6CisgICAgICAgIChvcHRzLCBleHRyYSkgPSBzZWxmLm9wLnBhcnNlX2FyZ3MoYXJncz1hcmdzLCBsaW5lbm89c2VsZi5saW5lbm8pCisKKyAgICAgICAgcGQgPSBzZWxmLmhhbmRsZXIuUGFydERhdGEoKQorICAgICAgICBzZWxmLl9zZXRUb09iaihzZWxmLm9wLCBvcHRzLCBwZCkKKyAgICAgICAgcGQubGluZW5vID0gc2VsZi5saW5lbm8KKyAgICAgICAgaWYgZXh0cmE6CisgICAgICAgICAgICBwZC5tb3VudHBvaW50ID0gZXh0cmFbMF0KKyAgICAgICAgICAgIGlmIHBkIGluIHNlbGYuZGF0YUxpc3QoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKF8oIkEgcGFydGl0aW9uIHdpdGggdGhlIG1vdW50cG9pbnQgJXMgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIpICUgcGQubW91bnRwb2ludCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBkLm1vdW50cG9pbnQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIHBkCisKKyAgICBkZWYgZGF0YUxpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcnRpdGlvbnMKKworY2xhc3MgRkM0X1BhcnRpdGlvbihGQzNfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzNfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDM19QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMzAsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEZDM19QYXJ0aXRpb24uX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBwYXJ0X2NiIChvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgorICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgiL2Rldi8iKToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWVbNTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXIudmFsdWVzLmVuc3VyZV92YWx1ZShvcHRpb24uZGVzdCwgdmFsdWUpCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGQzNfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1ieXRlcy1wZXItaW5vZGUiLCBkZXN0PSJieXRlc1Blcklub2RlIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iaW50IiwgbmFyZ3M9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1mc29wdGlvbnMiLCBkZXN0PSJmc29wdHMiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWxhYmVsIiwgZGVzdD0ibGFiZWwiKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjlfUGFydGl0aW9uKEZDNF9QYXJ0aXRpb24pOgorICAgIHJlbW92ZWRLZXl3b3JkcyA9IEZDNF9QYXJ0aXRpb24ucmVtb3ZlZEtleXdvcmRzCisgICAgcmVtb3ZlZEF0dHJzID0gRkM0X1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5PTEzMCwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgRkM0X1BhcnRpdGlvbi5fX2luaXRfXyhzZWxmLCB3cml0ZVByaW9yaXR5LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIHBhcnRfY2IgKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCIvZGV2LyIpOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZVs1Ol0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlci52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEZDNF9QYXJ0aXRpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWJ5dGVzLXBlci1pbm9kZSIsIGRlcHJlY2F0ZWQ9MSkKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1mc3Byb2ZpbGUiKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWVuY3J5cHRlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tcGFzc3BocmFzZSIpCisgICAgICAgIHJldHVybiBvcAorCitjbGFzcyBGMTFfUGFydGl0aW9uKEY5X1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjlfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEY5X1BhcnRpdGlvbi5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEY5X1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tc3RhcnQiLCBkZXByZWNhdGVkPTEpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tZW5kIiwgZGVwcmVjYXRlZD0xKQorICAgICAgICByZXR1cm4gb3AKKworY2xhc3MgRjEyX1BhcnRpdGlvbihGMTFfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGMTFfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEYxMV9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgb3AgPSBGMTFfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lc2Nyb3djZXJ0IikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1iYWNrdXBwYXNzcGhyYXNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIG9wCisKK2NsYXNzIEYxNF9QYXJ0aXRpb24oRjEyX1BhcnRpdGlvbik6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRjEyX1BhcnRpdGlvbi5yZW1vdmVkS2V5d29yZHMKKyAgICByZW1vdmVkQXR0cnMgPSBGMTJfUGFydGl0aW9uLnJlbW92ZWRBdHRycworCisgICAgZGVmIF9nZXRQYXJzZXIoc2VsZik6CisgICAgICAgIG9wID0gRjEyX1BhcnRpdGlvbi5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tYnl0ZXMtcGVyLWlub2RlIikKKyAgICAgICAgb3AucmVtb3ZlX29wdGlvbigiLS1zdGFydCIpCisgICAgICAgIG9wLnJlbW92ZV9vcHRpb24oIi0tZW5kIikKKyAgICAgICAgcmV0dXJuIG9wCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvY29uc3RhbnRzLnB5IGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbnN0YW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTEyZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2NvbnN0YW50cy5weQpAQCAtMCwwICsxLDU3IEBACisjCisjIENocmlzIEx1bWVucyA8Y2x1bWVuc0ByZWRoYXQuY29tPgorIworIyBDb3B5cmlnaHQgMjAwNS0yMDA3IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCitDTEVBUlBBUlRfVFlQRV9MSU5VWCA9IDAKK0NMRUFSUEFSVF9UWVBFX0FMTCA9IDEKK0NMRUFSUEFSVF9UWVBFX05PTkUgPSAyCisKK0RJU1BMQVlfTU9ERV9DTURMSU5FID0gMAorRElTUExBWV9NT0RFX0dSQVBISUNBTCA9IDEKK0RJU1BMQVlfTU9ERV9URVhUID0gMgorCitGSVJTVEJPT1RfREVGQVVMVCA9IDAKK0ZJUlNUQk9PVF9TS0lQID0gMQorRklSU1RCT09UX1JFQ09ORklHID0gMgorCitLU19NSVNTSU5HX1BST01QVCA9IDAKK0tTX01JU1NJTkdfSUdOT1JFID0gMQorCitTRUxJTlVYX0RJU0FCTEVEID0gMAorU0VMSU5VWF9FTkZPUkNJTkcgPSAxCitTRUxJTlVYX1BFUk1JU1NJVkUgPSAyCisKK0tTX1NDUklQVF9QUkUgPSAwCitLU19TQ1JJUFRfUE9TVCA9IDEKK0tTX1NDUklQVF9UUkFDRUJBQ0sgPSAyCisKK0tTX1dBSVQgPSAwCitLU19SRUJPT1QgPSAxCitLU19TSFVURE9XTiA9IDIKKworS1NfSU5TVEtFWV9TS0lQID0gLTk5CisKK0JPT1RQUk9UT19ESENQID0gImRoY3AiCitCT09UUFJPVE9fQk9PVFAgPSAiYm9vdHAiCitCT09UUFJPVE9fU1RBVElDID0gInN0YXRpYyIKK0JPT1RQUk9UT19RVUVSWSA9ICJxdWVyeSIKK0JPT1RQUk9UT19JQkZUID0gImliZnQiCisKK0dST1VQX1JFUVVJUkVEID0gMAorR1JPVVBfREVGQVVMVCA9IDEKK0dST1VQX0FMTCA9IDIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9lcnJvcnMucHkgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzRkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvZXJyb3JzLnB5CkBAIC0wLDAgKzEsMTAzIEBACisjCisjIGVycm9ycy5weTogIEtpY2tzdGFydCBlcnJvciBoYW5kbGluZy4KKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLCBtb2RpZnksCisjIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugdi4yLiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQKKyMgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHRoZQorIyBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxCisjIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgQW55IFJlZCBIYXQKKyMgdHJhZGVtYXJrcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIG9yIGRvY3VtZW50YXRpb24gYXJlIG5vdAorIyBzdWJqZWN0IHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgbWF5IG9ubHkgYmUgdXNlZCBvciByZXBsaWNhdGVkCisjIHdpdGggdGhlIGV4cHJlc3MgcGVybWlzc2lvbiBvZiBSZWQgSGF0LCBJbmMuIAorIworIiIiCitFcnJvciBoYW5kbGluZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgYSBzaW5nbGUgZnVuY3Rpb246CisKKyAgICBmb3JtYXRFcnJvck1zZyAtIFByb3Blcmx5IGZvcm1hdHMgYW4gZXJyb3IgbWVzc2FnZS4KKworSXQgYWxzbyBleHBvcnRzIHNldmVyYWwgZXhjZXB0aW9uIGNsYXNzZXM6CisKKyAgICBLaWNrc3RhcnRFcnJvciAtIEEgZ2VuZXJpYyBleGNlcHRpb24gY2xhc3MuCisKKyAgICBLaWNrc3RhcnRQYXJzZUVycm9yIC0gQW4gZXhjZXB0aW9uIGZvciBlcnJvcnMgcmVsYXRpbmcgdG8gcGFyc2luZy4KKworICAgIEtpY2tzdGFydFZhbHVlRXJyb3IgLSBBbiBleGNlcHRpb24gZm9yIGVycm9ycyByZWxhdGluZyB0byBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy4KKworICAgIEtpY2tzdGFydFZlcnNpb25FcnJvciAtIEFuIGV4Y2VwdGlvbiBmb3IgZXJyb3JzIHJlbGF0aW5nIHRvIHVuc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ludGF4IHZlcnNpb25zLgorIiIiCitpbXBvcnQgZ2V0dGV4dAorXyA9IGxhbWJkYSB4OiBnZXR0ZXh0LmxkZ2V0dGV4dCgicHlraWNrc3RhcnQiLCB4KQorCitkZWYgZm9ybWF0RXJyb3JNc2cobGluZW5vLCBtc2c9IiIpOgorICAgICIiIlByb3Blcmx5IGZvcm1hdCB0aGUgZXJyb3IgbWVzc2FnZSBtc2cgZm9yIGluY2x1c2lvbiBpbiBhbiBleGNlcHRpb24uIiIiCisgICAgaWYgbXNnICE9ICIiOgorICAgICAgICBtYXBwaW5nID0geyJsaW5lbm8iOiBsaW5lbm8sICJtc2ciOiBtc2d9CisgICAgICAgIHJldHVybiBfKCJUaGUgZm9sbG93aW5nIHByb2JsZW0gb2NjdXJyZWQgb24gbGluZSAlKGxpbmVubylzIG9mIHRoZSBraWNrc3RhcnQgZmlsZTpcblxuJShtc2cpc1xuIikgJSBtYXBwaW5nCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIF8oIlRoZXJlIHdhcyBhIHByb2JsZW0gcmVhZGluZyBmcm9tIGxpbmUgJXMgb2YgdGhlIGtpY2tzdGFydCBmaWxlIikgJSBsaW5lbm8KKworY2xhc3MgS2lja3N0YXJ0RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBIGdlbmVyaWMgZXhjZXB0aW9uIGNsYXNzIGZvciB1bnNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCA9ICIiKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydEVycm9yIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aXRoIHRoZSBkZXNjcmlwdGl2ZQorICAgICAgICAgICBtZXNzYWdlIHZhbC4gIHZhbCBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZiBmb3JtYXRFcnJvck1zZy4KKyAgICAgICAgIiIiCisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnZhbHVlID0gdmFsCisKKyAgICBkZWYgX19zdHJfXyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIEtpY2tzdGFydFBhcnNlRXJyb3IoS2lja3N0YXJ0RXJyb3IpOgorICAgICIiIkFuIGV4Y2VwdGlvbiBjbGFzcyBmb3IgZXJyb3JzIHdoZW4gcHJvY2Vzc2luZyB0aGUgaW5wdXQgZmlsZSwgc3VjaCBhcworICAgICAgIHVua25vd24gb3B0aW9ucywgY29tbWFuZHMsIG9yIHNlY3Rpb25zLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgS2lja3N0YXJ0UGFyc2VFcnJvciBleGNlcHRpb24gaW5zdGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgZGVzY3JpcHRpdmUgbWVzc2FnZSB2YWwuICB2YWwgc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgICAgICAgZm9ybWF0RXJyb3JNc2cuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRFcnJvci5fX2luaXRfXyhzZWxmLCBtc2cpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworY2xhc3MgS2lja3N0YXJ0VmFsdWVFcnJvcihLaWNrc3RhcnRFcnJvcik6CisgICAgIiIiQW4gZXhjZXB0aW9uIGNsYXNzIGZvciBlcnJvcnMgd2hlbiBwcm9jZXNzaW5nIGFyZ3VtZW50cyB0byBjb21tYW5kcywKKyAgICAgICBzdWNoIGFzIHRvbyBtYW55IGFyZ3VtZW50cywgdG9vIGZldyBhcmd1bWVudHMsIG9yIG1pc3NpbmcgcmVxdWlyZWQKKyAgICAgICBhcmd1bWVudHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLaWNrc3RhcnRWYWx1ZUVycm9yIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aXRoIHRoZQorICAgICAgICAgICBkZXNjcmlwdGl2ZSBtZXNzYWdlIHZhbC4gIHZhbCBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAgICAgICBmb3JtYXRFcnJvck1zZy4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydEVycm9yLl9faW5pdF9fKHNlbGYsIG1zZykKKworICAgIGRlZiBfX3N0cl9fIChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworY2xhc3MgS2lja3N0YXJ0VmVyc2lvbkVycm9yKEtpY2tzdGFydEVycm9yKToKKyAgICAiIiJBbiBleGNlcHRpb24gY2xhc3MgZm9yIGVycm9ycyByZWxhdGVkIHRvIHVzaW5nIGFuIGluY29ycmVjdCB2ZXJzaW9uIG9mCisgICAgICAga2lja3N0YXJ0IHN5bnRheC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydFZlcnNpb25FcnJvciBleGNlcHRpb24gaW5zdGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgZGVzY3JpcHRpdmUgbWVzc2FnZSB2YWwuICB2YWwgc2hvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgICAgICAgZm9ybWF0RXJyb3JNc2cuCisgICAgICAgICIiIgorICAgICAgICBLaWNrc3RhcnRFcnJvci5fX2luaXRfXyhzZWxmLCBtc2cpCisKKyAgICBkZWYgX19zdHJfXyAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvX19pbml0X18ucHkgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2NvbnRyb2wucHkgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvaGFuZGxlcnMvY29udHJvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGM4MGQxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2NvbnRyb2wucHkKQEAgLTAsMCArMSw0NiBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQudmVyc2lvbiBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC5jb21tYW5kcyBpbXBvcnQgKgorCisjIFRoaXMgbWFwIGlzIGtleWVkIG9uIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiBhcyBwcm92aWRlZCBieQorIyBweWtpY2tzdGFydC52ZXJzaW9uLiAgV2l0aGluIGVhY2ggc3ViLWRpY3QgaXMgYSBtYXBwaW5nIGZyb20gY29tbWFuZCBuYW1lCisjIHRvIHRoZSBjbGFzcyB0aGF0IGhhbmRsZXMgaXQuICBUaGlzIGlzIGFuIG9udG8gbWFwcGluZyAtIHRoYXQgaXMsIG11bHRpcGxlCisjIGNvbW1hbmQgbmFtZXMgY2FuIG1hcCB0byB0aGUgc2FtZSBjbGFzcy4gIEhvd2V2ZXIsIHRoZSBIYW5kbGVyIHdpbGwgZW5zdXJlCisjIHRoYXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgZWFjaCBjbGFzcyBldmVyIGV4aXN0cy4KK2NvbW1hbmRNYXAgPSB7CisgICAgIyBiYXNlZCBvbiBmMTUKKyAgICBGMTY6IHsKKyAgICAgICAgImJvb3Rsb2FkZXIiOiBib290bG9hZGVyLkYxNV9Cb290bG9hZGVyLAorICAgICAgICAicGFydCI6IHBhcnRpdGlvbi5GMTRfUGFydGl0aW9uLAorICAgICAgICAicGFydGl0aW9uIjogcGFydGl0aW9uLkYxNF9QYXJ0aXRpb24sCisgICAgfSwKK30KKworIyBUaGlzIG1hcCBpcyBrZXllZCBvbiBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gYXMgcHJvdmlkZWQgYnkKKyMgcHlraWNrc3RhcnQudmVyc2lvbi4gIFdpdGhpbiBlYWNoIHN1Yi1kaWN0IGlzIGEgbWFwcGluZyBmcm9tIGEgZGF0YSBvYmplY3QKKyMgbmFtZSB0byB0aGUgY2xhc3MgdGhhdCBwcm92aWRlcyBpdC4gIFRoaXMgaXMgYSBiaWplY3RpdmUgbWFwcGluZyAtIHRoYXQgaXMsCisjIGVhY2ggbmFtZSBtYXBzIHRvIGV4YWN0bHkgb25lIGRhdGEgY2xhc3MgYW5kIGFsbCBkYXRhIGNsYXNzZXMgaGF2ZSBhIG5hbWUuCisjIE1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgZWFjaCBjbGFzcyBpcyBhbGxvd2VkIHRvIGV4aXN0LCBob3dldmVyLgorZGF0YU1hcCA9IHsKKyAgICBGMTY6IHsKKyAgICAgICAgIlBhcnREYXRhIjogcGFydGl0aW9uLkYxNF9QYXJ0RGF0YSwKKyAgICB9LAorfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2hhbmRsZXJzL2YxNi5weSBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9mMTYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MmY4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9oYW5kbGVycy9mMTYucHkKQEAgLTAsMCArMSwyNCBAQAorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTEgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKK2Zyb20gcHlraWNrc3RhcnQuYmFzZSBpbXBvcnQgKgorZnJvbSBweWtpY2tzdGFydC52ZXJzaW9uIGltcG9ydCAqCisKK2NsYXNzIEYxNkhhbmRsZXIoQmFzZUhhbmRsZXIpOgorICAgIHZlcnNpb24gPSBGMTYKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9rby5weSBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9rby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUwZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L2tvLnB5CkBAIC0wLDAgKzEsMzcgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA5IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK0Jhc2UgY2xhc3NlcyBmb3IgaW50ZXJuYWwgcHlraWNrc3RhcnQgdXNlLgorCitUaGUgbW9kdWxlIGV4cG9ydHMgdGhlIGZvbGxvd2luZyBpbXBvcnRhbnQgY2xhc3NlczoKKworICAgIEtpY2tzdGFydE9iamVjdCAtIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgY2xhc3NlcyBpbiBweWtpY2tzdGFydAorIiIiCisKK2NsYXNzIEtpY2tzdGFydE9iamVjdChvYmplY3QpOgorICAgICIiIlRoZSBiYXNlIGNsYXNzIGZvciBhbGwgb3RoZXIgY2xhc3NlcyBpbiBweWtpY2tzdGFydC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydE9iamVjdCBpbnN0YW5jZS4gIEFsbCBvdGhlciBjbGFzc2VzIGluCisgICAgICAgICAgIHB5a2lja3N0YXJ0IHNob3VsZCBiZSBkZXJpdmVkIGZyb20gdGhpcyBvbmUuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L29wdGlvbnMucHkgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvb3B0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmMyM2VkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L29wdGlvbnMucHkKQEAgLTAsMCArMSwyMjMgQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDA3IFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK1NwZWNpYWxpemVkIG9wdGlvbiBoYW5kbGluZy4KKworVGhpcyBtb2R1bGUgZXhwb3J0cyB0d28gY2xhc3NlczoKKworICAgIEtTT3B0aW9uUGFyc2VyIC0gQSBzcGVjaWFsaXplZCBzdWJjbGFzcyBvZiBPcHRpb25QYXJzZXIgdG8gYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICAgaW4gQmFzZUhhbmRsZXIgc3ViY2xhc3Nlcy4KKworICAgIEtTT3B0aW9uIC0gQSBzcGVjaWFsaXplZCBzdWJjbGFzcyBvZiBPcHRpb24uCisiIiIKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBjb3B5IGltcG9ydCBjb3B5Citmcm9tIG9wdHBhcnNlIGltcG9ydCAqCisKK2Zyb20gY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIGVycm9ycyBpbXBvcnQgKgorZnJvbSB2ZXJzaW9uIGltcG9ydCAqCisKK2ltcG9ydCBnZXR0ZXh0CitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK2NsYXNzIEtTT3B0aW9uUGFyc2VyKE9wdGlvblBhcnNlcik6CisgICAgIiIiQSBzcGVjaWFsaXplZCBzdWJjbGFzcyBvZiBvcHRwYXJzZS5PcHRpb25QYXJzZXIgdG8gaGFuZGxlIGV4dHJhIG9wdGlvbgorICAgICAgIGF0dHJpYnV0ZSBjaGVja2luZywgd29yayBlcnJvciByZXBvcnRpbmcgaW50byB0aGUgS2lja3N0YXJ0UGFyc2VFcnJvcgorICAgICAgIGZyYW1ld29yaywgYW5kIHRvIHR1cm4gb2ZmIHRoZSBkZWZhdWx0IGhlbHAuCisgICAgIiIiCisgICAgZGVmIGV4aXQoc2VsZiwgc3RhdHVzPTAsIG1zZz1Ob25lKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubGluZW5vICE9IE5vbmU6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhzZWxmLmxpbmVubywgbXNnPW1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIG1zZworCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJldHZhbCA9IFtdCisKKyAgICAgICAgZm9yIG9wdCBpbiBzZWxmLm9wdGlvbl9saXN0OgorICAgICAgICAgICAgaWYgb3B0IG5vdCBpbiByZXR2YWw6CisgICAgICAgICAgICAgICAgcmV0dmFsLmFwcGVuZChvcHQuZGVzdCkKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2luaXRfcGFyc2luZ19zdGF0ZSAoc2VsZik6CisgICAgICAgIE9wdGlvblBhcnNlci5faW5pdF9wYXJzaW5nX3N0YXRlKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9uX3NlZW4gPSB7fQorCisgICAgZGVmIGNoZWNrX3ZhbHVlcyAoc2VsZiwgdmFsdWVzLCBhcmdzKToKKyAgICAgICAgZGVmIHNlZW4oc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9wdGlvbl9zZWVuLmhhc19rZXkob3B0aW9uKQorCisgICAgICAgIGRlZiB1c2VkVG9vTmV3KHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmludHJvZHVjZWQgYW5kIG9wdGlvbi5pbnRyb2R1Y2VkID4gc2VsZi52ZXJzaW9uCisKKyAgICAgICAgZGVmIHVzZWREZXByZWNhdGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICByZXR1cm4gb3B0aW9uLmRlcHJlY2F0ZWQKKworICAgICAgICBkZWYgdXNlZFJlbW92ZWQoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgIHJldHVybiBvcHRpb24ucmVtb3ZlZCBhbmQgb3B0aW9uLnJlbW92ZWQgPD0gc2VsZi52ZXJzaW9uCisKKyAgICAgICAgZm9yIG9wdGlvbiBpbiBmaWx0ZXIobGFtYmRhIG86IGlzaW5zdGFuY2UobywgT3B0aW9uKSwgc2VsZi5vcHRpb25fbGlzdCk6CisgICAgICAgICAgICBpZiBvcHRpb24ucmVxdWlyZWQgYW5kIG5vdCBzZWVuKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmFsdWVFcnJvciwgZm9ybWF0RXJyb3JNc2coc2VsZi5saW5lbm8sIF8oIk9wdGlvbiAlcyBpcyByZXF1aXJlZCIpICUgb3B0aW9uKQorICAgICAgICAgICAgZWxpZiBzZWVuKHNlbGYsIG9wdGlvbikgYW5kIHVzZWRUb29OZXcoc2VsZiwgb3B0aW9uKToKKyAgICAgICAgICAgICAgICBtYXBwaW5nID0geyJvcHRpb24iOiBvcHRpb24sICJpbnRybyI6IHZlcnNpb25Ub1N0cmluZyhvcHRpb24uaW50cm9kdWNlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiI6IHZlcnNpb25Ub1N0cmluZyhzZWxmLnZlcnNpb24pfQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoXygiVGhlICUob3B0aW9uKXMgb3B0aW9uIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gJShpbnRybylzLCBidXQgeW91IGFyZSB1c2luZyBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gJSh2ZXJzaW9uKXMuIikgJSBtYXBwaW5nKQorICAgICAgICAgICAgZWxpZiBzZWVuKHNlbGYsIG9wdGlvbikgYW5kIHVzZWRSZW1vdmVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgbWFwcGluZyA9IHsib3B0aW9uIjogb3B0aW9uLCAicmVtb3ZlZCI6IHZlcnNpb25Ub1N0cmluZyhvcHRpb24ucmVtb3ZlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiI6IHZlcnNpb25Ub1N0cmluZyhzZWxmLnZlcnNpb24pfQorCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uLnJlbW92ZWQgPT0gc2VsZi52ZXJzaW9uOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKF8oIlRoZSAlKG9wdGlvbilzIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpICUgbWFwcGluZykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKF8oIlRoZSAlKG9wdGlvbilzIG9wdGlvbiB3YXMgcmVtb3ZlZCBpbiB2ZXJzaW9uICUocmVtb3ZlZClzLCBidXQgeW91IGFyZSB1c2luZyBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gJSh2ZXJzaW9uKXMuIikgJSBtYXBwaW5nKQorICAgICAgICAgICAgZWxpZiBzZWVuKHNlbGYsIG9wdGlvbikgYW5kIHVzZWREZXByZWNhdGVkKHNlbGYsIG9wdGlvbik6CisgICAgICAgICAgICAgICAgbWFwcGluZyA9IHsibGluZW5vIjogc2VsZi5saW5lbm8sICJvcHRpb24iOiBvcHRpb259CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybihfKCJJZ25vcmluZyBkZXByZWNhdGVkIG9wdGlvbiBvbiBsaW5lICUobGluZW5vKXM6ICBUaGUgJShvcHRpb24pcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGhhcyBhbnkgZWZmZWN0LiAgSXQgbWF5IGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUgcmVsZWFzZXMsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgZmF0YWwgZXJyb3IgZnJvbSBraWNrc3RhcnQuICBQbGVhc2UgbW9kaWZ5IHlvdXIga2lja3N0YXJ0IGZpbGUgdG8gcmVtb3ZlIHRoaXMgb3B0aW9uLiIpICUgbWFwcGluZywgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgIHJldHVybiAodmFsdWVzLCBhcmdzKQorCisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYga3dhcmdzLmhhc19rZXkoImxpbmVubyIpOgorICAgICAgICAgICAgc2VsZi5saW5lbm8gPSBrd2FyZ3MucG9wKCJsaW5lbm8iKQorCisgICAgICAgIHJldHVybiBPcHRpb25QYXJzZXIucGFyc2VfYXJncyhzZWxmLCAqKmt3YXJncykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBwaW5nPU5vbmUsIHZlcnNpb249Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBLU09wdGlvblBhcnNlciBpbnN0YW5jZS4gIEVhY2ggS2lja3N0YXJ0Q29tbWFuZAorICAgICAgICAgICBzdWJjbGFzcyBzaG91bGQgY3JlYXRlIG9uZSBpbnN0YW5jZSBvZiBLU09wdGlvblBhcnNlciwgcHJvdmlkaW5nCisgICAgICAgICAgIGF0IGxlYXN0IHRoZSBsaW5lbm8gYXR0cmlidXRlLiAgbWFwcGluZyBhbmQgdmVyc2lvbiBhcmUgbm90IHJlcXVpcmVkLgorICAgICAgICAgICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIG1hcHBpbmcgLS0gQSBtYXBwaW5nIGZyb20gb3B0aW9uIHN0cmluZ3MgdG8gZGlmZmVyZW50IHZhbHVlcy4KKyAgICAgICAgICAgdmVyc2lvbiAtLSBUaGUgdmVyc2lvbiBvZiB0aGUga2lja3N0YXJ0IHN5bnRheCB3ZSBhcmUgY2hlY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0LgorICAgICAgICAiIiIKKyAgICAgICAgT3B0aW9uUGFyc2VyLl9faW5pdF9fKHNlbGYsIG9wdGlvbl9jbGFzcz1LU09wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwX29wdGlvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9InJlc29sdmUiKQorICAgICAgICBpZiBtYXBwaW5nIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1hcCA9IHt9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm1hcCA9IG1hcHBpbmcKKworICAgICAgICBzZWxmLmxpbmVubyA9IE5vbmUKKyAgICAgICAgc2VsZi5vcHRpb25fc2VlbiA9IHt9CisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKworZGVmIF9jaGVja19rc2Jvb2xlYW4ob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICBpZiB2YWx1ZS5sb3dlcigpIGluICgib24iLCAieWVzIiwgInRydWUiLCAiMSIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgdmFsdWUubG93ZXIoKSBpbiAoIm9mZiIsICJubyIsICJmYWxzZSIsICIwIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIG1hcHBpbmcgPSB7Im9wdCI6IG9wdCwgInZhbHVlIjogdmFsdWV9CisgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoXygiT3B0aW9uICUob3B0KXM6IGludmFsaWQgYm9vbGVhbiB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorCitkZWYgX2NoZWNrX3N0cmluZyhvcHRpb24sIG9wdCwgdmFsdWUpOgorICAgIGlmIGxlbih2YWx1ZSkgPiAyIGFuZCB2YWx1ZS5zdGFydHN3aXRoKCItLSIpOgorICAgICAgICBtYXBwaW5nID0geyJvcHQiOiBvcHQsICJ2YWx1ZSI6IHZhbHVlfQorICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKF8oIk9wdGlvbiAlKG9wdClzOiBpbnZhbGlkIHN0cmluZyB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB2YWx1ZQorCitkZWYgX2NoZWNrX3NpemUob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICAjIEZvcm1lciBkZWZhdWx0IHdhcyBNQgorICAgIGlmIHZhbHVlLmlzZGlnaXQoKToKKyAgICAgICAgcmV0dXJuIGludCh2YWx1ZSkgKiAxMDI0TAorCisgICAgbWFwcGluZyA9IHsib3B0Ijogb3B0LCAidmFsdWUiOiB2YWx1ZX0KKyAgICBpZiBub3QgdmFsdWVbOi0xXS5pc2RpZ2l0KCk6CisgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoXygiT3B0aW9uICUob3B0KXM6IGludmFsaWQgc2l6ZSB2YWx1ZTogJSh2YWx1ZSlyIikgJSBtYXBwaW5nKQorCisgICAgc2l6ZSA9IGludCh2YWx1ZVs6LTFdKQorICAgIGlmIHZhbHVlLmVuZHN3aXRoKCJrIikgb3IgdmFsdWUuZW5kc3dpdGgoIksiKToKKyAgICAgICAgcmV0dXJuIHNpemUKKyAgICBpZiB2YWx1ZS5lbmRzd2l0aCgiTSIpOgorICAgICAgICByZXR1cm4gc2l6ZSAqIDEwMjRMCisgICAgaWYgdmFsdWUuZW5kc3dpdGgoIkciKToKKyAgICAgICAgcmV0dXJuIHNpemUgKiAxMDI0TCAqIDEwMjRMCisgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcihfKCJPcHRpb24gJShvcHQpczogaW52YWxpZCBzaXplIHZhbHVlOiAlKHZhbHVlKXIiKSAlIG1hcHBpbmcpCisKKyMgQ3JlYXRlcyBhIG5ldyBPcHRpb24gY2xhc3MgdGhhdCBzdXBwb3J0cyBzZXZlcmFsIG5ldyBhdHRyaWJ1dGVzOgorIyAtIHJlcXVpcmVkOiAgYW55IG9wdGlvbiB3aXRoIHRoaXMgYXR0cmlidXRlIG11c3QgYmUgc3VwcGxpZWQgb3IgYW4gZXhjZXB0aW9uCisjICAgICAgICAgICAgICBpcyB0aHJvd24KKyMgLSBpbnRyb2R1Y2VkOiAgdGhlIGtpY2tzdGFydCBzeW50YXggdmVyc2lvbiB0aGF0IHRoaXMgb3B0aW9uIGZpcnN0IGFwcGVhcmVkCisjICAgICAgICAgICAgICAgIGluIC0gYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvcHRpb24gaXMgdXNlZCBhbmQKKyMgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBzeW50YXggdmVyc2lvbiBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMKKyMgICAgICAgICAgICAgICAgYXR0cmlidXRlCisjIC0gZGVwcmVjYXRlZDogIHRoZSBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gdGhhdCB0aGlzIG9wdGlvbiB3YXMgZGVwcmVjYXRlZAorIyAgICAgICAgICAgICAgICBpbiAtIGEgRGVwcmVjYXRpb25XYXJuaW5nIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBvcHRpb24gaXMKKyMgICAgICAgICAgICAgICAgdXNlZCBhbmQgdGhlIHNwZWNpZmllZCBzeW50YXggdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gdGhlCisjICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlCisjIC0gcmVtb3ZlZDogIHRoZSBraWNrc3RhcnQgc3ludGF4IHZlcnNpb24gdGhhdCB0aGlzIG9wdGlvbiB3YXMgcmVtb3ZlZCBpbiAtIGFuCisjICAgICAgICAgICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb3B0aW9uIGlzIHVzZWQgYW5kIHRoZSBzcGVjaWZpZWQKKyMgICAgICAgICAgICAgc3ludGF4IHZlcnNpb24gaXMgZ3JlYXRlZCB0aGFuIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZQorIyBBbHNvIGNyZWF0ZXMgYSBuZXcgdHlwZToKKyMgLSBrc2Jvb2xlYW46ICBzdXBwb3J0IHZhcmlvdXMga2luZHMgb2YgYm9vbGVhbiB2YWx1ZXMgb24gYW4gb3B0aW9uCisjIEFuZCB0d28gbmV3IGFjdGlvbnM6CisjIC0gbWFwIDogIGFsbG93cyB5b3UgdG8gZGVmaW5lIGFuIG9wdCAtPiB2YWwgbWFwcGluZyBzdWNoIHRoYXQgZGVzdCBnZXRzIHZhbAorIyAgICAgICAgICB3aGVuIG9wdCBpcyBzZWVuCisjIC0gbWFwX2V4dGVuZDogIGFsbG93cyB5b3UgdG8gZGVmaW5lIGFuIG9wdCAtPiBbdmFsMSwgLi4uIHZhbG5dIG1hcHBpbmcgc3VjaAorIyAgICAgICAgICAgICAgICB0aGF0IGRlc3QgZ2V0cyBhIGxpc3Qgb2YgdmFscyBidWlsdCB1cCB3aGVuIG9wdCBpcyBzZWVuCitjbGFzcyBLU09wdGlvbiAoT3B0aW9uKToKKyAgICBBVFRSUyA9IE9wdGlvbi5BVFRSUyArIFsnaW50cm9kdWNlZCcsICdkZXByZWNhdGVkJywgJ3JlbW92ZWQnLCAncmVxdWlyZWQnXQorICAgIEFDVElPTlMgPSBPcHRpb24uQUNUSU9OUyArICgibWFwIiwgIm1hcF9leHRlbmQiLCkKKyAgICBTVE9SRV9BQ1RJT05TID0gT3B0aW9uLlNUT1JFX0FDVElPTlMgKyAoIm1hcCIsICJtYXBfZXh0ZW5kIiwpCisKKyAgICBUWVBFUyA9IE9wdGlvbi5UWVBFUyArICgia3Nib29sZWFuIiwgInN0cmluZyIsICJzaXplIikKKyAgICBUWVBFX0NIRUNLRVIgPSBjb3B5KE9wdGlvbi5UWVBFX0NIRUNLRVIpCisgICAgVFlQRV9DSEVDS0VSWyJrc2Jvb2xlYW4iXSA9IF9jaGVja19rc2Jvb2xlYW4KKyAgICBUWVBFX0NIRUNLRVJbInN0cmluZyJdID0gX2NoZWNrX3N0cmluZworICAgIFRZUEVfQ0hFQ0tFUlsic2l6ZSJdID0gX2NoZWNrX3NpemUKKworICAgIGRlZiBfY2hlY2tfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVxdWlyZWQgYW5kIG5vdCBzZWxmLnRha2VzX3ZhbHVlKCk6CisgICAgICAgICAgICByYWlzZSBPcHRpb25FcnJvcihfKCJSZXF1aXJlZCBmbGFnIHNldCBmb3Igb3B0aW9uIHRoYXQgZG9lc24ndCB0YWtlIGEgdmFsdWUiKSwgc2VsZikKKworICAgICMgTWFrZSBzdXJlIF9jaGVja19yZXF1aXJlZCgpIGlzIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciEKKyAgICBDSEVDS19NRVRIT0RTID0gT3B0aW9uLkNIRUNLX01FVEhPRFMgKyBbX2NoZWNrX3JlcXVpcmVkXQorCisgICAgZGVmIHByb2Nlc3MgKHNlbGYsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKyAgICAgICAgT3B0aW9uLnByb2Nlc3Moc2VsZiwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCisgICAgICAgIHBhcnNlci5vcHRpb25fc2VlbltzZWxmXSA9IDEKKworICAgICMgT3ZlcnJpZGUgZGVmYXVsdCB0YWtlX2FjdGlvbiBtZXRob2QgdG8gaGFuZGxlIG91ciBjdXN0b20gYWN0aW9ucy4KKyAgICBkZWYgdGFrZV9hY3Rpb24oc2VsZiwgYWN0aW9uLCBkZXN0LCBvcHQsIHZhbHVlLCB2YWx1ZXMsIHBhcnNlcik6CisgICAgICAgIGlmIGFjdGlvbiA9PSAibWFwIjoKKyAgICAgICAgICAgIHZhbHVlcy5lbnN1cmVfdmFsdWUoZGVzdCwgcGFyc2VyLm1hcFtvcHQubHN0cmlwKCctJyldKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAibWFwX2V4dGVuZCI6CisgICAgICAgICAgICB2YWx1ZXMuZW5zdXJlX3ZhbHVlKGRlc3QsIFtdKS5leHRlbmQocGFyc2VyLm1hcFtvcHQubHN0cmlwKCctJyldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgT3B0aW9uLnRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCisKKyAgICBkZWYgdGFrZXNfdmFsdWUoc2VsZik6CisgICAgICAgICMgRGVwcmVjYXRlZCBvcHRpb25zIGRvbid0IHRha2UgYSB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIE9wdGlvbi50YWtlc192YWx1ZShzZWxmKSBhbmQgbm90IHNlbGYuZGVwcmVjYXRlZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZGVwcmVjYXRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYucmVxdWlyZWQgPSBGYWxzZQorICAgICAgICBPcHRpb24uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3BhcnNlci5weSBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9wYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5Njc0YgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9wYXJzZXIucHkKQEAgLTAsMCArMSw2MTkgQEAKKyMKKyMgcGFyc2VyLnB5OiAgS2lja3N0YXJ0IGZpbGUgcGFyc2VyLgorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorTWFpbiBraWNrc3RhcnQgZmlsZSBwcm9jZXNzaW5nIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgZXhwb3J0cyBzZXZlcmFsIGltcG9ydGFudCBjbGFzc2VzOgorCisgICAgU2NyaXB0IC0gUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgJXByZSwgJXBvc3QsIG9yICV0cmFjZWJhY2sgc2NyaXB0LgorCisgICAgUGFja2FnZXMgLSBSZXByZXNlbnRhdGlvbiBvZiB0aGUgJXBhY2thZ2VzIHNlY3Rpb24uCisKKyAgICBLaWNrc3RhcnRQYXJzZXIgLSBUaGUga2lja3N0YXJ0IGZpbGUgcGFyc2VyIHN0YXRlIG1hY2hpbmUuCisiIiIKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgSXRlcmF0b3IKK2ltcG9ydCBvcworaW1wb3J0IHNobGV4CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gY29weSBpbXBvcnQgY29weQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgKgorCitpbXBvcnQgY29uc3RhbnRzCitmcm9tIGVycm9ycyBpbXBvcnQgS2lja3N0YXJ0RXJyb3IsIEtpY2tzdGFydFBhcnNlRXJyb3IsIEtpY2tzdGFydFZhbHVlRXJyb3IsIGZvcm1hdEVycm9yTXNnCitmcm9tIGtvIGltcG9ydCBLaWNrc3RhcnRPYmplY3QKK2Zyb20gc2VjdGlvbnMgaW1wb3J0ICoKK2ltcG9ydCB2ZXJzaW9uCisKK2ltcG9ydCBnZXR0ZXh0CitfID0gbGFtYmRhIHg6IGdldHRleHQubGRnZXR0ZXh0KCJweWtpY2tzdGFydCIsIHgpCisKK1NUQVRFX0VORCA9ICJlbmQiCitTVEFURV9DT01NQU5EUyA9ICJjb21tYW5kcyIKKwordmVyID0gdmVyc2lvbi5ERVZFTAorCisKK2NsYXNzIFB1dEJhY2tJdGVyYXRvcihJdGVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgc2VsZi5faXRlcmFibGUgPSBpdGVyKGl0ZXJhYmxlKQorICAgICAgICBzZWxmLl9idWYgPSBOb25lCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcHV0KHNlbGYsIHMpOgorICAgICAgICBzZWxmLl9idWYgPSBzCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fYnVmOgorICAgICAgICAgICAgcmV0dmFsID0gc2VsZi5fYnVmCisgICAgICAgICAgICBzZWxmLl9idWYgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXRlcmFibGUubmV4dCgpCisKKyMjIworIyMjIFNDUklQVCBIQU5ETElORworIyMjCitjbGFzcyBTY3JpcHQoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBraWNrc3RhcnQgc2NyaXB0LiAgSWYgZnVuY3Rpb25hbGl0eSBiZXlvbmQKKyAgICAgICBqdXN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCBhIHJ1biBtZXRob2QgaW4KKyAgICAgICBhbmFjb25kYSksIFNjcmlwdCBtYXkgYmUgc3ViY2xhc3NlZC4gIEFsdGhvdWdoIGEgcnVuIG1ldGhvZCBpcyBub3QKKyAgICAgICBwcm92aWRlZCwgbW9zdCBvZiB0aGUgYXR0cmlidXRlcyBvZiBTY3JpcHQgaGF2ZSB0byBkbyB3aXRoIHJ1bm5pbmcgdGhlCisgICAgICAgc2NyaXB0LiAgSW5zdGFuY2VzIG9mIFNjcmlwdCBhcmUgaGVsZCBpbiBhIGxpc3QgYnkgdGhlIFZlcnNpb24gb2JqZWN0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzY3JpcHQsICphcmdzICwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgU2NyaXB0IGluc3RhbmNlLiAgSW5zdGFuY2UgYXR0cmlidXRlczoKKworICAgICAgICAgICBlcnJvck9uRmFpbCAtLSBJZiBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBmYWlscywgc2hvdWxkIGFuYWNvbmRhCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AsIGRpc3BsYXkgYW4gZXJyb3IsIGFuZCB0aGVuIHJlYm9vdCB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYW55IG90aGVyIHNjcmlwdHM/CisgICAgICAgICAgIGluQ2hyb290ICAgIC0tIERvZXMgdGhlIHNjcmlwdCBleGVjdXRlIGluIGFuYWNvbmRhJ3MgY2hyb290CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IG9yIG5vdD8KKyAgICAgICAgICAgaW50ZXJwICAgICAgLS0gVGhlIHByb2dyYW0gdGhhdCBzaG91bGQgYmUgdXNlZCB0byBpbnRlcnByZXQgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuCisgICAgICAgICAgIGxpbmVubyAgICAgIC0tIFRoZSBsaW5lIG51bWJlciB0aGlzIHNjcmlwdCBzdGFydHMgb24uCisgICAgICAgICAgIGxvZ2ZpbGUgICAgIC0tIFdoZXJlIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBzY3JpcHQgc2hvdWxkIGJlIGxvZ2dlZC4KKyAgICAgICAgICAgc2NyaXB0ICAgICAgLS0gQSBzdHJpbmcgY29udGFpbmluZyBhbGwgdGhlIGxpbmVzIG9mIHRoZSBzY3JpcHQuCisgICAgICAgICAgIHR5cGUgICAgICAgIC0tIFRoZSB0eXBlIG9mIHRoZSBzY3JpcHQsIHdoaWNoIGNhbiBiZSBLU19TQ1JJUFRfKiBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB5a2lja3N0YXJ0LmNvbnN0YW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIEtpY2tzdGFydE9iamVjdC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc2NyaXB0ID0gIiIuam9pbihzY3JpcHQpCisKKyAgICAgICAgc2VsZi5pbnRlcnAgPSBrd2FyZ3MuZ2V0KCJpbnRlcnAiLCAiL2Jpbi9zaCIpCisgICAgICAgIHNlbGYuaW5DaHJvb3QgPSBrd2FyZ3MuZ2V0KCJpbkNocm9vdCIsIEZhbHNlKQorICAgICAgICBzZWxmLmxpbmVubyA9IGt3YXJncy5nZXQoImxpbmVubyIsIE5vbmUpCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGt3YXJncy5nZXQoImxvZ2ZpbGUiLCBOb25lKQorICAgICAgICBzZWxmLmVycm9yT25GYWlsID0ga3dhcmdzLmdldCgiZXJyb3JPbkZhaWwiLCBGYWxzZSkKKyAgICAgICAgc2VsZi50eXBlID0ga3dhcmdzLmdldCgidHlwZSIsIGNvbnN0YW50cy5LU19TQ1JJUFRfUFJFKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBmb3JtYXR0ZWQgZm9yIG91dHB1dCB0byBhIGtpY2tzdGFydCBmaWxlLiIiIgorICAgICAgICByZXR2YWwgPSAiIgorCisgICAgICAgIGlmIHNlbGYudHlwZSA9PSBjb25zdGFudHMuS1NfU0NSSVBUX1BSRToKKyAgICAgICAgICAgIHJldHZhbCArPSAnXG4lcHJlJworICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSBjb25zdGFudHMuS1NfU0NSSVBUX1BPU1Q6CisgICAgICAgICAgICByZXR2YWwgKz0gJ1xuJXBvc3QnCisgICAgICAgIGVsaWYgc2VsZi50eXBlID09IGNvbnN0YW50cy5LU19TQ1JJUFRfVFJBQ0VCQUNLOgorICAgICAgICAgICAgcmV0dmFsICs9ICdcbiV0cmFjZWJhY2snCisKKyAgICAgICAgaWYgc2VsZi5pbnRlcnAgIT0gIi9iaW4vc2giIGFuZCBzZWxmLmludGVycCAhPSAiIjoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0taW50ZXJwcmV0ZXI9JXMiICUgc2VsZi5pbnRlcnAKKyAgICAgICAgaWYgc2VsZi50eXBlID09IGNvbnN0YW50cy5LU19TQ1JJUFRfUE9TVCBhbmQgbm90IHNlbGYuaW5DaHJvb3Q6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW5vY2hyb290IgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGUgIT0gTm9uZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbG9nZmlsZSAlcyIgJSBzZWxmLmxvZ2ZpbGUKKyAgICAgICAgaWYgc2VsZi5lcnJvck9uRmFpbDoKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tZXJyb3JvbmZhaWwiCisKKyAgICAgICAgaWYgc2VsZi5zY3JpcHQuZW5kc3dpdGgoIlxuIik6CisgICAgICAgICAgICBpZiB2ZXIgPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuJXMlJWVuZFxuIiAlIHNlbGYuc2NyaXB0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4lc1xuIiAlIHNlbGYuc2NyaXB0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB2ZXIgPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsICsgIlxuJXNcbiUlZW5kXG4iICUgc2VsZi5zY3JpcHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbCArICJcbiVzXG4iICUgc2VsZi5zY3JpcHQKKworCisjIworIyMgUEFDS0FHRSBIQU5ETElORworIyMKK2NsYXNzIEdyb3VwOgorICAgICIiIkEgY2xhc3MgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGdyb3VwIGluIHRoZSAlcGFja2FnZXMgc2VjdGlvbi4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT0iIiwgaW5jbHVkZT1jb25zdGFudHMuR1JPVVBfREVGQVVMVCk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBHcm91cCBpbnN0YW5jZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgbmFtZSAgICAtLSBUaGUgZ3JvdXAncyBpZGVudGlmaWVyCisgICAgICAgICAgIGluY2x1ZGUgLS0gVGhlIGxldmVsIG9mIGhvdyBtdWNoIG9mIHRoZSBncm91cCBzaG91bGQgYmUgaW5jbHVkZWQuCisgICAgICAgICAgICAgICAgICAgICAgVmFsdWVzIGNhbiBiZSBHUk9VUF8qIGZyb20gcHlraWNrc3RhcnQuY29uc3RhbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmluY2x1ZGUgPSBpbmNsdWRlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIGlmIHNlbGYuaW5jbHVkZSA9PSBjb25zdGFudHMuR1JPVVBfUkVRVUlSRUQ6CisgICAgICAgICAgICByZXR1cm4gIkAlcyAtLW5vZGVmYXVsdHMiICUgc2VsZi5uYW1lCisgICAgICAgIGVsaWYgc2VsZi5pbmNsdWRlID09IGNvbnN0YW50cy5HUk9VUF9BTEw6CisgICAgICAgICAgICByZXR1cm4gIkAlcyAtLW9wdGlvbmFsIiAlIHNlbGYubmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJAJXMiICUgc2VsZi5uYW1lCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYubmFtZSA8IG90aGVyLm5hbWU6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgZWxpZiBzZWxmLm5hbWUgPiBvdGhlci5uYW1lOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIDAKKworY2xhc3MgUGFja2FnZXMoS2lja3N0YXJ0T2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgJXBhY2thZ2VzIHNlY3Rpb24gb2YgdGhlIGtpY2tzdGFydCBmaWxlLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgUGFja2FnZXMgaW5zdGFuY2UuICBJbnN0YW5jZSBhdHRyaWJ1dGVzOgorCisgICAgICAgICAgIGFkZEJhc2UgICAgICAgLS0gU2hvdWxkIHRoZSBCYXNlIGdyb3VwIGJlIGluc3RhbGxlZCBldmVuIGlmIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNwZWNpZmllZD8KKyAgICAgICAgICAgZGVmYXVsdCAgICAgICAtLSBTaG91bGQgdGhlIGRlZmF1bHQgcGFja2FnZSBzZXQgYmUgc2VsZWN0ZWQ/CisgICAgICAgICAgIGV4Y2x1ZGVkTGlzdCAgLS0gQSBsaXN0IG9mIGFsbCB0aGUgcGFja2FnZXMgbWFya2VkIGZvciBleGNsdXNpb24gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgJXBhY2thZ2VzIHNlY3Rpb24sIHdpdGhvdXQgdGhlIGxlYWRpbmcgbWludXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wuCisgICAgICAgICAgIGV4Y2x1ZGVEb2NzICAgLS0gU2hvdWxkIGRvY3VtZW50YXRpb24gaW4gZWFjaCBwYWNrYWdlIGJlIGV4Y2x1ZGVkPworICAgICAgICAgICBncm91cExpc3QgICAgIC0tIEEgbGlzdCBvZiBHcm91cCBvYmplY3RzIHJlcHJlc2VudGluZyBhbGwgdGhlIGdyb3VwcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgJXBhY2thZ2VzIHNlY3Rpb24uICBOYW1lcyB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBwZWQgb2YgdGhlIGxlYWRpbmcgQCBzeW1ib2wuCisgICAgICAgICAgIGV4Y2x1ZGVkR3JvdXBMaXN0IC0tIEEgbGlzdCBvZiBHcm91cCBvYmplY3RzIHJlcHJlc2VudGluZyBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyBzcGVjaWZpZWQgZm9yIHJlbW92YWwgaW4gdGhlICVwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLiAgTmFtZXMgd2lsbCBiZSBzdHJpcHBlZCBvZiB0aGUgbGVhZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtQCBzeW1ib2xzLgorICAgICAgICAgICBoYW5kbGVNaXNzaW5nIC0tIElmIHVua25vd24gcGFja2FnZXMgYXJlIHNwZWNpZmllZCBpbiB0aGUgJXBhY2thZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgc2hvdWxkIGl0IGJlIGlnbm9yZWQgb3Igbm90PyAgVmFsdWVzIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIEtTX01JU1NJTkdfKiBmcm9tIHB5a2lja3N0YXJ0LmNvbnN0YW50cy4KKyAgICAgICAgICAgcGFja2FnZUxpc3QgICAtLSBBIGxpc3Qgb2YgYWxsIHRoZSBwYWNrYWdlcyBzcGVjaWZpZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXBhY2thZ2VzIHNlY3Rpb24uCisgICAgICAgICAgIGluc3RMYW5ncyAgICAgLS0gQSBsaXN0IG9mIGxhbmd1YWdlcyB0byBpbnN0YWxsLgorICAgICAgICAiIiIKKyAgICAgICAgS2lja3N0YXJ0T2JqZWN0Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBzZWxmLmFkZEJhc2UgPSBUcnVlCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIHNlbGYuZXhjbHVkZWRMaXN0ID0gW10KKyAgICAgICAgc2VsZi5leGNsdWRlZEdyb3VwTGlzdCA9IFtdCisgICAgICAgIHNlbGYuZXhjbHVkZURvY3MgPSBGYWxzZQorICAgICAgICBzZWxmLmdyb3VwTGlzdCA9IFtdCisgICAgICAgIHNlbGYuaGFuZGxlTWlzc2luZyA9IGNvbnN0YW50cy5LU19NSVNTSU5HX1BST01QVAorICAgICAgICBzZWxmLnBhY2thZ2VMaXN0ID0gW10KKyAgICAgICAgc2VsZi5pbnN0TGFuZ3MgPSBOb25lCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvcm1hdHRlZCBmb3Igb3V0cHV0IHRvIGEga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHBrZ3MgPSAiIgorCisgICAgICAgIGlmIG5vdCBzZWxmLmRlZmF1bHQ6CisgICAgICAgICAgICBncnBzID0gc2VsZi5ncm91cExpc3QKKyAgICAgICAgICAgIGdycHMuc29ydCgpCisgICAgICAgICAgICBmb3IgZ3JwIGluIGdycHM6CisgICAgICAgICAgICAgICAgcGtncyArPSAiJXNcbiIgJSBncnAuX19zdHJfXygpCisKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhY2thZ2VMaXN0CisgICAgICAgICAgICBwLnNvcnQoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBwOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIiVzXG4iICUgcGtnCisKKyAgICAgICAgICAgIGdycHMgPSBzZWxmLmV4Y2x1ZGVkR3JvdXBMaXN0CisgICAgICAgICAgICBncnBzLnNvcnQoKQorICAgICAgICAgICAgZm9yIGdycCBpbiBncnBzOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIi0lc1xuIiAlIGdycC5fX3N0cl9fKCkKKworICAgICAgICAgICAgcCA9IHNlbGYuZXhjbHVkZWRMaXN0CisgICAgICAgICAgICBwLnNvcnQoKQorICAgICAgICAgICAgZm9yIHBrZyBpbiBwOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gIi0lc1xuIiAlIHBrZworCisgICAgICAgICAgICBpZiBwa2dzID09ICIiOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIHJldHZhbCA9ICJcbiVwYWNrYWdlcyIKKworICAgICAgICBpZiBzZWxmLmRlZmF1bHQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWRlZmF1bHQiCisgICAgICAgIGlmIHNlbGYuZXhjbHVkZURvY3M6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWV4Y2x1ZGVkb2NzIgorICAgICAgICBpZiBub3Qgc2VsZi5hZGRCYXNlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1ub2Jhc2UiCisgICAgICAgIGlmIHNlbGYuaGFuZGxlTWlzc2luZyA9PSBjb25zdGFudHMuS1NfTUlTU0lOR19JR05PUkU6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWlnbm9yZW1pc3NpbmciCisgICAgICAgIGlmIHNlbGYuaW5zdExhbmdzOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1pbnN0TGFuZ3M9JXMiICUgc2VsZi5pbnN0TGFuZ3MKKworICAgICAgICBpZiB2ZXIgPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4iICsgcGtncyArICJcbiVlbmRcbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwgKyAiXG4iICsgcGtncyArICJcbiIKKworICAgIGRlZiBfcHJvY2Vzc0dyb3VwIChzZWxmLCBsaW5lKToKKyAgICAgICAgb3AgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vZGVmYXVsdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW9wdGlvbmFsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSkKKworICAgICAgICAob3B0cywgZXh0cmEpID0gb3AucGFyc2VfYXJncyhhcmdzPWxpbmUuc3BsaXQoKSkKKworICAgICAgICBpZiBvcHRzLm5vZGVmYXVsdHMgYW5kIG9wdHMub3B0aW9uYWw6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRWYWx1ZUVycm9yLCBfKCJHcm91cCBjYW5ub3Qgc3BlY2lmeSBib3RoIC0tbm9kZWZhdWx0cyBhbmQgLS1vcHRpb25hbCIpCisKKyAgICAgICAgIyBJZiB0aGUgZ3JvdXAgbmFtZSBoYXMgc3BhY2VzIGluIGl0LCB3ZSBoYXZlIHRvIHB1dCBpdCBiYWNrIHRvZ2V0aGVyCisgICAgICAgICMgbm93LgorICAgICAgICBncnAgPSAiICIuam9pbihleHRyYSkKKworICAgICAgICBpZiBvcHRzLm5vZGVmYXVsdHM6CisgICAgICAgICAgICBzZWxmLmdyb3VwTGlzdC5hcHBlbmQoR3JvdXAobmFtZT1ncnAsIGluY2x1ZGU9Y29uc3RhbnRzLkdST1VQX1JFUVVJUkVEKSkKKyAgICAgICAgZWxpZiBvcHRzLm9wdGlvbmFsOgorICAgICAgICAgICAgc2VsZi5ncm91cExpc3QuYXBwZW5kKEdyb3VwKG5hbWU9Z3JwLCBpbmNsdWRlPWNvbnN0YW50cy5HUk9VUF9BTEwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5ncm91cExpc3QuYXBwZW5kKEdyb3VwKG5hbWU9Z3JwLCBpbmNsdWRlPWNvbnN0YW50cy5HUk9VUF9ERUZBVUxUKSkKKworICAgIGRlZiBhZGQgKHNlbGYsIHBrZ0xpc3QpOgorICAgICAgICAiIiJHaXZlbiBhIGxpc3Qgb2YgbGluZXMgZnJvbSB0aGUgaW5wdXQgZmlsZSwgc3RyaXAgb2ZmIGFueSBsZWFkaW5nCisgICAgICAgICAgIHN5bWJvbHMgYW5kIGFkZCB0aGUgcmVzdWx0IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgZXhpc3RpbmdFeGNsdWRlZFNldCA9IHNldChzZWxmLmV4Y2x1ZGVkTGlzdCkKKyAgICAgICAgZXhpc3RpbmdQYWNrYWdlU2V0ID0gc2V0KHNlbGYucGFja2FnZUxpc3QpCisgICAgICAgIG5ld0V4Y2x1ZGVkU2V0ID0gc2V0KCkKKyAgICAgICAgbmV3UGFja2FnZVNldCA9IHNldCgpCisKKyAgICAgICAgZXhjbHVkZWRHcm91cExpc3QgPSBbXQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnTGlzdDoKKyAgICAgICAgICAgIHN0cmlwcGVkID0gcGtnLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgc3RyaXBwZWRbMF0gPT0gIkAiOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NHcm91cChzdHJpcHBlZFsxOl0pCisgICAgICAgICAgICBlbGlmIHN0cmlwcGVkWzBdID09ICItIjoKKyAgICAgICAgICAgICAgICBpZiBzdHJpcHBlZFsxXSA9PSAiQCI6CisgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkR3JvdXBMaXN0LmFwcGVuZChHcm91cChuYW1lPXN0cmlwcGVkWzI6XSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3RXhjbHVkZWRTZXQuYWRkKHN0cmlwcGVkWzE6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3UGFja2FnZVNldC5hZGQoc3RyaXBwZWQpCisKKyAgICAgICAgIyBHcm91cHMgaGF2ZSB0byBiZSBleGNsdWRlZCBpbiB0d28gZGlmZmVyZW50IHdheXMgKG5vdGU6IGNhbid0IHVzZQorICAgICAgICAjIHNldHMgaGVyZSBiZWNhdXNlIHdlIGhhdmUgdG8gc3RvcmUgb2JqZWN0cyk6CisgICAgICAgIGV4Y2x1ZGVkR3JvdXBOYW1lcyA9IG1hcChsYW1iZGEgZzogZy5uYW1lLCBleGNsdWRlZEdyb3VwTGlzdCkKKworICAgICAgICAjIEZpcnN0LCBhbiBleGNsdWRlZCBncm91cCBtYXkgYmUgY2FuY2VsbGluZyBvdXQgYSBwcmV2aW91c2x5IGdpdmVuCisgICAgICAgICMgb25lLiAgVGhpcyBpcyBvZnRlbiB0aGUgY2FzZSB3aGVuIHVzaW5nICVpbmNsdWRlLiAgU28gdGhlcmUgd2Ugc2hvdWxkCisgICAgICAgICMganVzdCByZW1vdmUgdGhlIGdyb3VwIGZyb20gdGhlIGxpc3QuCisgICAgICAgIHNlbGYuZ3JvdXBMaXN0ID0gZmlsdGVyKGxhbWJkYSBnOiBnLm5hbWUgbm90IGluIGV4Y2x1ZGVkR3JvdXBOYW1lcywgc2VsZi5ncm91cExpc3QpCisKKyAgICAgICAgIyBTZWNvbmQsIHRoZSBwYWNrYWdlIGxpc3QgY291bGQgaGF2ZSBpbmNsdWRlZCBnbG9icyB3aGljaCBhcmUgbm90CisgICAgICAgICMgcHJvY2Vzc2VkIGJ5IHB5a2lja3N0YXJ0LiAgSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gcHJlc2VydmUgYSBsaXN0IG9mCisgICAgICAgICMgZXhjbHVkZWQgZ3JvdXBzIHNvIHdoYXRldmVyIHRvb2wgZG9pbmcgcGFja2FnZS9ncm91cCBpbnN0YWxsYXRpb24gY2FuCisgICAgICAgICMgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uCisgICAgICAgIHNlbGYuZXhjbHVkZWRHcm91cExpc3QuZXh0ZW5kKGV4Y2x1ZGVkR3JvdXBMaXN0KQorCisgICAgICAgIGV4aXN0aW5nUGFja2FnZVNldCA9IChleGlzdGluZ1BhY2thZ2VTZXQgLSBuZXdFeGNsdWRlZFNldCkgfCBuZXdQYWNrYWdlU2V0CisgICAgICAgIGV4aXN0aW5nRXhjbHVkZWRTZXQgPSAoZXhpc3RpbmdFeGNsdWRlZFNldCAtIGV4aXN0aW5nUGFja2FnZVNldCkgfCBuZXdFeGNsdWRlZFNldAorCisgICAgICAgIHNlbGYucGFja2FnZUxpc3QgPSBsaXN0KGV4aXN0aW5nUGFja2FnZVNldCkKKyAgICAgICAgc2VsZi5leGNsdWRlZExpc3QgPSBsaXN0KGV4aXN0aW5nRXhjbHVkZWRTZXQpCisKKworIyMjCisjIyMgUEFSU0VSCisjIyMKK2NsYXNzIEtpY2tzdGFydFBhcnNlcjoKKyAgICAiIiJUaGUga2lja3N0YXJ0IGZpbGUgcGFyc2VyIGNsYXNzIGFzIHJlcHJlc2VudGVkIGJ5IGEgYmFzaWMgc3RhdGUKKyAgICAgICBtYWNoaW5lLiAgVG8gY3JlYXRlIGEgc3BlY2lhbGl6ZWQgcGFyc2VyLCBtYWtlIGEgc3ViY2xhc3MgYW5kIG92ZXJyaWRlCisgICAgICAgYW55IG9mIHRoZSBtZXRob2RzIHlvdSBjYXJlIGFib3V0LiAgTWV0aG9kcyB0aGF0IGRvbid0IG5lZWQgdG8gZG8KKyAgICAgICBhbnl0aGluZyBtYXkganVzdCBwYXNzLiAgSG93ZXZlciwgX3N0YXRlTWFjaGluZSBzaG91bGQgbmV2ZXIgYmUKKyAgICAgICBvdmVycmlkZGVuLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgaGFuZGxlciwgZm9sbG93SW5jbHVkZXM9VHJ1ZSwgZXJyb3JzQXJlRmF0YWw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgIG1pc3NpbmdJbmNsdWRlSXNGYXRhbD1UcnVlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IEtpY2tzdGFydFBhcnNlciBpbnN0YW5jZS4gIEluc3RhbmNlIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgICAgZXJyb3JzQXJlRmF0YWwgICAgICAgIC0tIFNob3VsZCBlcnJvcnMgY2F1c2UgcHJvY2Vzc2luZyB0byBoYWx0LCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdCBwcmludCBhIG1lc3NhZ2UgdG8gdGhlIHNjcmVlbj8gIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG1vc3QgdXNlZnVsIGZvciB3cml0aW5nIHN5bnRheCBjaGVja2VycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtYXkgd2FudCB0byBjb250aW51ZSBhZnRlciBhbiBlcnJvciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb3VudGVyZWQuCisgICAgICAgICAgIGZvbGxvd0luY2x1ZGVzICAgICAgICAtLSBJZiAlaW5jbHVkZSBpcyBzZWVuLCBzaG91bGQgdGhlIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGJlIGNoZWNrZWQgYXMgd2VsbCBvciBza2lwcGVkPworICAgICAgICAgICBoYW5kbGVyICAgICAgICAgICAgICAgLS0gQW4gaW5zdGFuY2Ugb2YgYSBCYXNlSGFuZGxlciBzdWJjbGFzcy4gIElmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCB0aGUgaW5wdXQgZmlsZSB3aWxsIHN0aWxsIGJlIHBhcnNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IG5vIGRhdGEgd2lsbCBiZSBzYXZlZCBhbmQgbm8gY29tbWFuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICAgICAgIG1pc3NpbmdJbmNsdWRlSXNGYXRhbCAtLSBTaG91bGQgbWlzc2luZyBpbmNsdWRlIGZpbGVzIGJlIGZhdGFsLCBldmVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnJvcnNBcmVGYXRhbCBpcyBGYWxzZT8KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZXJyb3JzQXJlRmF0YWwgPSBlcnJvcnNBcmVGYXRhbAorICAgICAgICBzZWxmLmZvbGxvd0luY2x1ZGVzID0gZm9sbG93SW5jbHVkZXMKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorICAgICAgICBzZWxmLmN1cnJlbnRkaXIgPSB7fQorICAgICAgICBzZWxmLm1pc3NpbmdJbmNsdWRlSXNGYXRhbCA9IG1pc3NpbmdJbmNsdWRlSXNGYXRhbAorCisgICAgICAgIHNlbGYuX3N0YXRlID0gU1RBVEVfQ09NTUFORFMKKyAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoID0gMAorICAgICAgICBzZWxmLl9saW5lID0gIiIKKworICAgICAgICBzZWxmLnZlcnNpb24gPSBzZWxmLmhhbmRsZXIudmVyc2lvbgorCisgICAgICAgIGdsb2JhbCB2ZXIKKyAgICAgICAgdmVyID0gc2VsZi52ZXJzaW9uCisKKyAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSB7fQorICAgICAgICBzZWxmLnNldHVwU2VjdGlvbnMoKQorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgdGhlIGludGVybmFsIHZhcmlhYmxlcyBvZiB0aGUgc3RhdGUgbWFjaGluZSBmb3IgYSBuZXcga2lja3N0YXJ0IGZpbGUuIiIiCisgICAgICAgIHNlbGYuX3N0YXRlID0gU1RBVEVfQ09NTUFORFMKKyAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoID0gMAorCisgICAgZGVmIGdldFNlY3Rpb24oc2VsZiwgcyk6CisgICAgICAgICIiIlJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdGVkIHNlY3Rpb24gKHMgbXVzdCBzdGFydCB3aXRoICclJ3MpLAorICAgICAgICAgICBvciByYWlzZSBLZXlFcnJvciBpZiBub3QgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc2VjdGlvbnNbc10KKworICAgIGRlZiBoYW5kbGVDb21tYW5kIChzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJHaXZlbiB0aGUgbGlzdCBvZiBjb21tYW5kIGFuZCBhcmd1bWVudHMsIGNhbGwgdGhlIFZlcnNpb24ncworICAgICAgICAgICBkaXNwYXRjaGVyIG1ldGhvZCB0byBoYW5kbGUgdGhlIGNvbW1hbmQuICBSZXR1cm5zIHRoZSBjb21tYW5kIG9yCisgICAgICAgICAgIGRhdGEgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBkaXNwYXRjaGVyLiAgVGhpcyBtZXRob2QgbWF5IGJlCisgICAgICAgICAgIG92ZXJyaWRkZW4gaW4gYSBzdWJjbGFzcyBpZiBuZWNlc3NhcnkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmhhbmRsZXI6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuY3VycmVudENtZCA9IGFyZ3NbMF0KKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5jdXJyZW50TGluZSA9IHNlbGYuX2xpbmUKKyAgICAgICAgICAgIHJldHZhbCA9IHNlbGYuaGFuZGxlci5kaXNwYXRjaGVyKGFyZ3MsIGxpbmVubykKKworICAgICAgICAgICAgcmV0dXJuIHJldHZhbAorCisgICAgZGVmIHJlZ2lzdGVyU2VjdGlvbihzZWxmLCBvYmopOgorICAgICAgICAiIiJHaXZlbiBhbiBpbnN0YW5jZSBvZiBhIFNlY3Rpb24gc3ViY2xhc3MsIHJlZ2lzdGVyIHRoZSBuZXcgc2VjdGlvbgorICAgICAgICAgICB3aXRoIHRoZSBwYXJzZXIuICBDYWxsaW5nIHRoaXMgbWV0aG9kIG1lYW5zIHRoZSBwYXJzZXIgd2lsbAorICAgICAgICAgICByZWNvZ25pemUgeW91ciBuZXcgc2VjdGlvbiBhbmQgZGlzcGF0Y2ggaW50byB0aGUgZ2l2ZW4gb2JqZWN0IHRvCisgICAgICAgICAgIGhhbmRsZSBpdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBvYmouc2VjdGlvbk9wZW46CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICJubyBzZWN0aW9uT3BlbiBnaXZlbiBmb3Igc2VjdGlvbiAlcyIgJSBvYmoKKworICAgICAgICBpZiBub3Qgb2JqLnNlY3Rpb25PcGVuLnN0YXJ0c3dpdGgoIiUiKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgInNlY3Rpb24gJXMgdGFnIGRvZXMgbm90IHN0YXJ0IHdpdGggYSAlJSIgJSBvYmouc2VjdGlvbk9wZW4KKworICAgICAgICBzZWxmLl9zZWN0aW9uc1tvYmouc2VjdGlvbk9wZW5dID0gb2JqCisKKyAgICBkZWYgX2ZpbmFsaXplKHNlbGYsIG9iaik6CisgICAgICAgICIiIkNhbGxlZCBhdCB0aGUgY2xvc2Ugb2YgYSBraWNrc3RhcnQgc2VjdGlvbiB0byB0YWtlIGFueSByZXF1aXJlZAorICAgICAgICAgICBhY3Rpb25zLiAgSW50ZXJuYWxseSwgdGhpcyBpcyB1c2VkIHRvIGFkZCBzY3JpcHRzIG9uY2Ugd2UgaGF2ZSB0aGUKKyAgICAgICAgICAgd2hvbGUgYm9keSByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgb2JqLmZpbmFsaXplKCkKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBTVEFURV9DT01NQU5EUworCisgICAgZGVmIF9oYW5kbGVTcGVjaWFsQ29tbWVudHMoc2VsZiwgbGluZSk6CisgICAgICAgICIiIktpY2tzdGFydCByZWNvZ25pemVzIGEgY291cGxlIHNwZWNpYWwgY29tbWVudHMuIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IFNUQVRFX0NPTU1BTkRTOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBTYXZlIHRoZSBwbGF0Zm9ybSBmb3Igcy1jLWtpY2tzdGFydC4KKyAgICAgICAgaWYgbGluZVs6MTBdID09ICIjcGxhdGZvcm09IjoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wbGF0Zm9ybSA9IHNlbGYuX2xpbmVbMTE6XQorCisgICAgZGVmIF9yZWFkU2VjdGlvbihzZWxmLCBsaW5lSXRlciwgbGluZW5vKToKKyAgICAgICAgb2JqID0gc2VsZi5fc2VjdGlvbnNbc2VsZi5fc3RhdGVdCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZUl0ZXIubmV4dCgpCisgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHNlY3Rpb24gZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcnNpb24gPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlNlY3Rpb24gZG9lcyBub3QgZW5kIHdpdGggJSVlbmQuIikpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluYWxpemUob2JqKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgbGluZW5vICs9IDEKKworICAgICAgICAgICAgIyBUaHJvdyBhd2F5IGJsYW5rIGxpbmVzIGFuZCBjb21tZW50cywgdW5sZXNzIHRoZSBzZWN0aW9uIHdhbnRzIGFsbAorICAgICAgICAgICAgIyBsaW5lcy4KKyAgICAgICAgICAgIGlmIHNlbGYuX2lzQmxhbmtPckNvbW1lbnQobGluZSkgYW5kIG5vdCBvYmouYWxsTGluZXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIlIik6CisgICAgICAgICAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KGxpbmUpCisKKyAgICAgICAgICAgICAgICBpZiBhcmdzIGFuZCBhcmdzWzBdID09ICIlZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgcHJvcGVybHkgdGVybWluYXRlZCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZShvYmopCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBhcmdzIGFuZCBhcmdzWzBdID09ICIla3NhcHBlbmQiOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgYXJncyBhbmQgKHNlbGYuX3ZhbGlkU3RhdGUoYXJnc1swXSkgb3IgYXJnc1swXSBpbiBbIiVpbmNsdWRlIiwgIiVrc2FwcGVuZCJdKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIHVudGVybWluYXRlZCBzZWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcnNpb24gPj0gdmVyc2lvbi5GODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydFBhcnNlRXJyb3IsIGZvcm1hdEVycm9yTXNnKGxpbmVubywgbXNnPV8oIlNlY3Rpb24gZG9lcyBub3QgZW5kIHdpdGggJSVlbmQuIikpCisKKyAgICAgICAgICAgICAgICAgICAgIyBGaW5pc2ggdXAuICBXZSBkbyBub3QgcHJvY2VzcyB0aGUgaGVhZGVyIGhlcmUgYmVjYXVzZQorICAgICAgICAgICAgICAgICAgICAjIGtpY2tpbmcgYmFjayBvdXQgdG8gU1RBVEVfQ09NTUFORFMgd2lsbCBlbnN1cmUgdGhhdCBoYXBwZW5zLgorICAgICAgICAgICAgICAgICAgICBsaW5lSXRlci5wdXQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZW5vIC09IDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluYWxpemUob2JqKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMganVzdCBhIGxpbmUgd2l0aGluIGEgc2VjdGlvbi4gIFBhc3MgaXQgb2ZmIHRvIHdoYXRldmVyCisgICAgICAgICAgICAgICAgIyBzZWN0aW9uIGhhbmRsZXMgaXQuCisgICAgICAgICAgICAgICAgb2JqLmhhbmRsZUxpbmUobGluZSkKKworICAgICAgICByZXR1cm4gbGluZW5vCisKKyAgICBkZWYgX3ZhbGlkU3RhdGUoc2VsZiwgc3QpOgorICAgICAgICAiIiJJcyB0aGUgZ2l2ZW4gc2VjdGlvbiB0YWcgb25lIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoIHRoZSBwYXJzZXI/IiIiCisgICAgICAgIHJldHVybiBzdCBpbiBzZWxmLl9zZWN0aW9ucy5rZXlzKCkKKworICAgIGRlZiBfdHJ5RnVuYyhzZWxmLCBmbik6CisgICAgICAgICIiIkNhbGwgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uICh3aGljaCBkb2Vzbid0IHRha2UgYW55IGFyZ3VtZW50cykgYW5kCisgICAgICAgICAgIGRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZy4gIElmIGVycm9yc0FyZUZhdGFsIGlzIEZhbHNlLCB0aGlzCisgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwganVzdCBwcmludCB0aGUgZXhjZXB0aW9uIGFuZCBrZWVwIGdvaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm4oKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBtc2c6CisgICAgICAgICAgICBpZiBzZWxmLmVycm9yc0FyZUZhdGFsOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50IG1zZworCisgICAgZGVmIF9pc0JsYW5rT3JDb21tZW50KHNlbGYsIGxpbmUpOgorICAgICAgICByZXR1cm4gbGluZS5pc3NwYWNlKCkgb3IgbGluZSA9PSAiIiBvciBsaW5lLmxzdHJpcCgpWzBdID09ICcjJworCisgICAgZGVmIF9zdGF0ZU1hY2hpbmUoc2VsZiwgbGluZUl0ZXIpOgorICAgICAgICAjIEZvciBlcnJvciByZXBvcnRpbmcuCisgICAgICAgIGxpbmVubyA9IDAKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgIyBHZXQgdGhlIG5leHQgbGluZSBvdXQgb2YgdGhlIGZpbGUsIHF1aXR0aW5nIGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9saW5lID0gbGluZUl0ZXIubmV4dCgpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbGluZSA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGxpbmVubyArPSAxCisKKyAgICAgICAgICAgICMgRWxpbWluYXRlIGJsYW5rIGxpbmVzLCB3aGl0ZXNwYWNlLW9ubHkgbGluZXMsIGFuZCBjb21tZW50cy4KKyAgICAgICAgICAgIGlmIHNlbGYuX2lzQmxhbmtPckNvbW1lbnQoc2VsZi5fbGluZSk6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlU3BlY2lhbENvbW1lbnRzKHNlbGYuX2xpbmUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBSZW1vdmUgYW55IGVuZC1vZi1saW5lIGNvbW1lbnRzLgorICAgICAgICAgICAgc2FuaXRpemVkID0gc2VsZi5fbGluZS5zcGxpdCgiIyIpWzBdCisKKyAgICAgICAgICAgICMgVGhlbiBzcGxpdCB0aGUgbGluZS4KKyAgICAgICAgICAgIGFyZ3MgPSBzaGxleC5zcGxpdChzYW5pdGl6ZWQucnN0cmlwKCkpCisKKyAgICAgICAgICAgIGlmIGFyZ3NbMF0gPT0gIiVpbmNsdWRlIjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgY2FzZSBjb21lcyB1cCBwcmltYXJpbHkgaW4ga3N2YWxpZGF0b3IuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZm9sbG93SW5jbHVkZXM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMSBvciBub3QgYXJnc1sxXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0UGFyc2VFcnJvciwgZm9ybWF0RXJyb3JNc2cobGluZW5vKQorCisgICAgICAgICAgICAgICAgc2VsZi5faW5jbHVkZURlcHRoICs9IDEKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkS2lja3N0YXJ0KGFyZ3NbMV0sIHJlc2V0PUZhbHNlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLaWNrc3RhcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBIYW5kbGUgdGhlIGluY2x1ZGUgZmlsZSBiZWluZyBwcm92aWRlZCBvdmVyIHRoZQorICAgICAgICAgICAgICAgICAgICAjIG5ldHdvcmsgaW4gYSAlcHJlIHNjcmlwdC4gIFRoaXMgY2FzZSBjb21lcyB1cCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBlYXJseSBwYXJzaW5nIGluIGFuYWNvbmRhLgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1pc3NpbmdJbmNsdWRlSXNGYXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICAgICBzZWxmLl9pbmNsdWRlRGVwdGggLT0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgTm93IG9uIHRvIHRoZSBtYWluIGV2ZW50LgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gU1RBVEVfQ09NTUFORFM6CisgICAgICAgICAgICAgICAgaWYgYXJnc1swXSA9PSAiJWtzYXBwZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHByZXByb2Nlc3MqIGZ1bmN0aW9ucywgc28gY29udGludWUuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxpZiBhcmdzWzBdWzBdID09ICclJzoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgc2VjdGlvbi4gIEhhbmRsZSBpdHMgaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICMgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgbmV3U2VjdGlvbiA9IGFyZ3NbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3ZhbGlkU3RhdGUobmV3U2VjdGlvbik6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRQYXJzZUVycm9yLCBmb3JtYXRFcnJvck1zZyhsaW5lbm8sIG1zZz1fKCJVbmtub3duIGtpY2tzdGFydCBzZWN0aW9uOiAlcyIgJSBuZXdTZWN0aW9uKSkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IG5ld1NlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgb2JqID0gc2VsZi5fc2VjdGlvbnNbc2VsZi5fc3RhdGVdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RyeUZ1bmMobGFtYmRhOiBvYmouaGFuZGxlSGVhZGVyKGxpbmVubywgYXJncykpCisKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgaGFuZGxlIGFsbCBzZWN0aW9uIHByb2Nlc3NpbmcsIGtpY2tpbmcgdXMgYmFjaworICAgICAgICAgICAgICAgICAgICAjIG91dCB0byBTVEFURV9DT01NQU5EUyBhdCB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgbGluZQorICAgICAgICAgICAgICAgICAgICAjIGJlaW5nIHRoZSBuZXh0IHNlY3Rpb24gaGVhZGVyLCBldGMuCisgICAgICAgICAgICAgICAgICAgIGxpbmVubyA9IHNlbGYuX3JlYWRTZWN0aW9uKGxpbmVJdGVyLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBzZWN0aW9uLiAgRGlzcGF0Y2ggdG8gaXQuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RyeUZ1bmMobGFtYmRhOiBzZWxmLmhhbmRsZUNvbW1hbmQobGluZW5vLCBhcmdzKSkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgPT0gU1RBVEVfRU5EOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgcmVhZEtpY2tzdGFydEZyb21TdHJpbmcgKHNlbGYsIHMsIHJlc2V0PVRydWUpOgorICAgICAgICAiIiJQcm9jZXNzIGEga2lja3N0YXJ0IGZpbGUsIHByb3ZpZGVkIGFzIHRoZSBzdHJpbmcgc3RyLiIiIgorICAgICAgICBpZiByZXNldDoKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgICAgICAjIEFkZCBhICIiIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgc28gdGhlIHN0cmluZyByZWFkZXIgYWN0cyBsaWtlIHRoZQorICAgICAgICAjIGZpbGUgcmVhZGVyIGFuZCB3ZSBvbmx5IGdldCBTdG9wSXRlcmF0aW9uIHdoZW4gd2UncmUgYWZ0ZXIgdGhlIGZpbmFsCisgICAgICAgICMgbGluZSBvZiBpbnB1dC4KKyAgICAgICAgaSA9IFB1dEJhY2tJdGVyYXRvcihzLnNwbGl0bGluZXMoVHJ1ZSkgKyBbIiJdKQorICAgICAgICBzZWxmLl9zdGF0ZU1hY2hpbmUgKGkpCisKKyAgICBkZWYgcmVhZEtpY2tzdGFydChzZWxmLCBmLCByZXNldD1UcnVlKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIGtpY2tzdGFydCBmaWxlLCBnaXZlbiBieSB0aGUgZmlsZW5hbWUgZi4iIiIKKyAgICAgICAgaWYgcmVzZXQ6CisgICAgICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgIyBhbiAlaW5jbHVkZSBtaWdodCBub3Qgc3BlY2lmeSBhIGZ1bGwgcGF0aC4gIGlmIHdlIGRvbid0IHRyeSB0byBmaWd1cmUKKyAgICAgICAgIyBvdXQgd2hhdCB0aGUgcGF0aCBzaG91bGQgaGF2ZSBiZWVuLCB0aGVuIHdlJ3JlIHVuYWJsZSB0byBmaW5kIGl0CisgICAgICAgICMgcmVxdWlyaW5nIGZ1bGwgcGF0aCBzcGVjaWZpY2F0aW9uLCB0aG91Z2gsIHN1Y2tzLiAgc28gbGV0J3MgbWFrZQorICAgICAgICAjIHRoZSByZWFkaW5nICJzbWFydCIgYnkga2VlcGluZyB0cmFjayBvZiB3aGF0IHRoZSBwYXRoIGlzIGF0IGVhY2gKKyAgICAgICAgIyBpbmNsdWRlIGRlcHRoLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZik6CisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRkaXIuaGFzX2tleShzZWxmLl9pbmNsdWRlRGVwdGggLSAxKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5jdXJyZW50ZGlyW3NlbGYuX2luY2x1ZGVEZXB0aCAtIDFdLCBmKSk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oc2VsZi5jdXJyZW50ZGlyW3NlbGYuX2luY2x1ZGVEZXB0aCAtIDFdLCBmKQorCisgICAgICAgIGNkID0gb3MucGF0aC5kaXJuYW1lKGYpCisgICAgICAgIGlmIG5vdCBjZC5zdGFydHN3aXRoKCIvIik6CisgICAgICAgICAgICBjZCA9IG9zLnBhdGguYWJzcGF0aChjZCkKKyAgICAgICAgc2VsZi5jdXJyZW50ZGlyW3NlbGYuX2luY2x1ZGVEZXB0aF0gPSBjZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBmaWxlKGYpLnJlYWQoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIEtpY2tzdGFydEVycm9yLCBmb3JtYXRFcnJvck1zZygwLCBtc2c9XygiVW5hYmxlIHRvIG9wZW4gaW5wdXQga2lja3N0YXJ0IGZpbGU6ICVzIikgJSBlLnN0cmVycm9yKQorCisgICAgICAgIHNlbGYucmVhZEtpY2tzdGFydEZyb21TdHJpbmcocywgcmVzZXQ9RmFsc2UpCisKKyAgICBkZWYgc2V0dXBTZWN0aW9ucyhzZWxmKToKKyAgICAgICAgIiIiSW5zdGFsbCB0aGUgc2VjdGlvbnMgYWxsIGtpY2tzdGFydCBmaWxlcyBzdXBwb3J0LiAgWW91IG1heSBvdmVycmlkZQorICAgICAgICAgICB0aGlzIG1ldGhvZCBpbiBhIHN1YmNsYXNzLCBidXQgc2hvdWxkIGF2b2lkIGRvaW5nIHNvIHVubGVzcyB5b3Uga25vdworICAgICAgICAgICB3aGF0IHlvdSdyZSBkb2luZy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NlY3Rpb25zID0ge30KKworICAgICAgICAjIEluc3RhbGwgdGhlIHNlY3Rpb25zIGFsbCBraWNrc3RhcnQgZmlsZXMgc3VwcG9ydC4KKyAgICAgICAgc2VsZi5yZWdpc3RlclNlY3Rpb24oUHJlU2NyaXB0U2VjdGlvbihzZWxmLmhhbmRsZXIsIGRhdGFPYmo9U2NyaXB0KSkKKyAgICAgICAgc2VsZi5yZWdpc3RlclNlY3Rpb24oUG9zdFNjcmlwdFNlY3Rpb24oc2VsZi5oYW5kbGVyLCBkYXRhT2JqPVNjcmlwdCkpCisgICAgICAgIHNlbGYucmVnaXN0ZXJTZWN0aW9uKFRyYWNlYmFja1NjcmlwdFNlY3Rpb24oc2VsZi5oYW5kbGVyLCBkYXRhT2JqPVNjcmlwdCkpCisgICAgICAgIHNlbGYucmVnaXN0ZXJTZWN0aW9uKFBhY2thZ2VTZWN0aW9uKHNlbGYuaGFuZGxlcikpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvc2VjdGlvbnMucHkgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvc2VjdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkZjg1NgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy8zcmRwYXJ0eS9weWtpY2tzdGFydC9zZWN0aW9ucy5weQpAQCAtMCwwICsxLDI0NCBAQAorIworIyBzZWN0aW9ucy5weTogIEtpY2tzdGFydCBmaWxlIHNlY3Rpb25zLgorIworIyBDaHJpcyBMdW1lbnMgPGNsdW1lbnNAcmVkaGF0LmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTEgUmVkIEhhdCwgSW5jLgorIworIyBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwgbW9kaWZ5LAorIyBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYuMi4gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0CisjIHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyB0aGUKKyMgaW1wbGllZCB3YXJyYW50aWVzIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisjIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MQorIyBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIEFueSBSZWQgSGF0CisjIHRyYWRlbWFya3MgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBzb3VyY2UgY29kZSBvciBkb2N1bWVudGF0aW9uIGFyZSBub3QKKyMgc3ViamVjdCB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIG1heSBvbmx5IGJlIHVzZWQgb3IgcmVwbGljYXRlZAorIyB3aXRoIHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgUmVkIEhhdCwgSW5jLiAKKyMKKyIiIgorVGhpcyBtb2R1bGUgZXhwb3J0cyB0aGUgY2xhc3NlcyB0aGF0IGRlZmluZSBhIHNlY3Rpb24gb2YgYSBraWNrc3RhcnQgZmlsZS4gIEEKK3NlY3Rpb24gaXMgYSBjaHVuayBvZiB0aGUgZmlsZSBzdGFydGluZyB3aXRoIGEgJXRhZyBhbmQgZW5kaW5nIHdpdGggYSAlZW5kLgorRXhhbXBsZXMgb2Ygc2VjdGlvbnMgaW5jbHVkZSAlcGFja2FnZXMsICVwcmUsIGFuZCAlcG9zdC4KKworWW91IG1heSB1c2UgdGhpcyBtb2R1bGUgdG8gZGVmaW5lIHlvdXIgb3duIGN1c3RvbSBzZWN0aW9ucyB3aGljaCB3aWxsIGJlCit0cmVhdGVkIGp1c3QgdGhlIHNhbWUgYXMgYSBwcmVkZWZpbmVkIG9uZSBieSB0aGUga2lja3N0YXJ0IHBhcnNlci4gIEFsbCB0aGF0CitpcyBuZWNlc3NhcnkgaXMgdG8gY3JlYXRlIGEgbmV3IHN1YmNsYXNzIG9mIFNlY3Rpb24gYW5kIGNhbGwKK3BhcnNlci5yZWdpc3RlclNlY3Rpb24gd2l0aCBhbiBpbnN0YW5jZSBvZiB5b3VyIG5ldyBjbGFzcy4KKyIiIgorZnJvbSBjb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gb3B0aW9ucyBpbXBvcnQgS1NPcHRpb25QYXJzZXIKK2Zyb20gdmVyc2lvbiBpbXBvcnQgKgorCitjbGFzcyBTZWN0aW9uKG9iamVjdCk6CisgICAgIiIiVGhlIGJhc2UgY2xhc3MgZm9yIGRlZmluaW5nIGtpY2tzdGFydCBzZWN0aW9ucy4gIFlvdSBhcmUgZnJlZSB0bworICAgICAgIHN1YmNsYXNzIHRoaXMgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICBDbGFzcyBhdHRyaWJ1dGVzOgorCisgICAgICAgYWxsTGluZXMgICAgLS0gRG9lcyB0aGlzIHNlY3Rpb24gcmVxdWlyZSB0aGUgcGFyc2VyIHRvIGNhbGwgaGFuZGxlTGluZQorICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSBsaW5lIGluIHRoZSBzZWN0aW9uLCBldmVuIGJsYW5rcyBhbmQgY29tbWVudHM/CisgICAgICAgc2VjdGlvbk9wZW4gLS0gVGhlIHN0cmluZyB0aGF0IGRlbm90ZXMgdGhlIHN0YXJ0IG9mIHRoaXMgc2VjdGlvbi4gIFlvdQorICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc3RhcnQgeW91ciB0YWcgd2l0aCBhIHBlcmNlbnQgc2lnbi4KKyAgICAgICB0aW1lc1NlZW4gICAtLSBUaGlzIGF0dHJpYnV0ZSBpcyBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5LiAgSXQgaXMKKyAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGhhbmRsZUhlYWRlciBpcyBjYWxsZWQgdG8ga2VlcAorICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgdGltZXMgYSBzZWN0aW9uIG9mIHRoaXMgdHlwZSBpcworICAgICAgICAgICAgICAgICAgICAgIHNlZW4uCisgICAgIiIiCisgICAgYWxsTGluZXMgPSBGYWxzZQorICAgIHNlY3Rpb25PcGVuID0gIiIKKyAgICB0aW1lc1NlZW4gPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlciwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgU2NyaXB0IGluc3RhbmNlLiAgQXQgdGhlIGxlYXN0LCB5b3UgbXVzdCBwYXNzIGluIGFuCisgICAgICAgICAgIGluc3RhbmNlIG9mIGEgYmFzZUhhbmRsZXIgc3ViY2xhc3MuCisKKyAgICAgICAgICAgVmFsaWQga3dhcmdzOgorCisgICAgICAgICAgIGRhdGFPYmogLS0KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuaGFuZGxlciA9IGhhbmRsZXIKKworICAgICAgICBzZWxmLnZlcnNpb24gPSBzZWxmLmhhbmRsZXIudmVyc2lvbgorCisgICAgICAgIHNlbGYuZGF0YU9iaiA9IGt3YXJncy5nZXQoImRhdGFPYmoiLCBOb25lKQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgJWVuZCB0YWcgZm9yIGEgc2VjdGlvbiBpcyBzZWVuLiAgSXQKKyAgICAgICAgICAgaXMgbm90IHJlcXVpcmVkIHRvIGJlIHByb3ZpZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZUxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZXZlcnkgbGluZSBvZiBhIHNlY3Rpb24uICBUYWtlIHdoYXRldmVyCisgICAgICAgICAgIGFjdGlvbiBpcyBhcHByb3ByaWF0ZS4gIFdoaWxlIHRoaXMgbWV0aG9kIGlzIG5vdCByZXF1aXJlZCB0byBiZQorICAgICAgICAgICBwcm92aWRlZCwgbm90IHByb3ZpZGluZyBpdCBkb2VzIG5vdCBtYWtlIGEgd2hvbGUgbG90IG9mIHNlbnNlLgorCisgICAgICAgICAgIEFyZ3VtZW50czoKKworICAgICAgICAgICBsaW5lIC0tIFRoZSBjb21wbGV0ZSBsaW5lLCB3aXRoIGFueSB0cmFpbGluZyBuZXdsaW5lLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgb3BlbmluZyB0YWcgZm9yIGEgc2VjdGlvbiBpcyBzZWVuLgorICAgICAgICAgICBOb3QgYWxsIHNlY3Rpb25zIHdpbGwgbmVlZCB0aGlzIG1ldGhvZCwgdGhvdWdoIGFsbCBwcm92aWRlZCB3aXRoCisgICAgICAgICAgIGtpY2tzdGFydCBpbmNsdWRlIG9uZS4KKworICAgICAgICAgICBBcmd1bWVudHM6CisKKyAgICAgICAgICAgYXJncyAtLSBBIGxpc3Qgb2YgYWxsIHN0cmluZ3MgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgIG9wZW5pbmcgdGFnLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50aW1lc1NlZW4gKz0gMQorCitjbGFzcyBOdWxsU2VjdGlvbihTZWN0aW9uKToKKyAgICAiIiJUaGlzIGRlZmluZXMgYSBzZWN0aW9uIHRoYXQgcHlraWNrc3RhcnQgd2lsbCByZWNvZ25pemUgYnV0IGRvIG5vdGhpbmcKKyAgICAgICB3aXRoLiAgSWYgdGhlIHBhcnNlciBydW5zIGFjcm9zcyBhICVzZWN0aW9uIHRoYXQgaGFzIG5vIG9iamVjdCByZWdpc3RlcmVkLAorICAgICAgIGl0IHdpbGwgcmFpc2UgYW4gZXJyb3IuICBTb21ldGltZXMsIHlvdSBtYXkgd2FudCB0byBzaW1wbHkgaWdub3JlIHRob3NlCisgICAgICAgc2VjdGlvbnMgaW5zdGVhZC4gIFRoaXMgY2xhc3MgaXMgdXNlZnVsIGZvciB0aGF0IHB1cnBvc2UuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBOdWxsU2VjdGlvbiBpbnN0YW5jZS4gIFlvdSBtdXN0IHBhc3MgYSBzZWN0aW9uT3BlbgorICAgICAgICAgICBwYXJhbWV0ZXIgKGluY2x1ZGluZyBhIGxlYWRpbmcgJyUnKSBmb3IgdGhlIHNlY3Rpb24geW91IHdpc2ggdG8KKyAgICAgICAgICAgaWdub3JlLgorICAgICAgICAiIiIKKyAgICAgICAgU2VjdGlvbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc2VjdGlvbk9wZW4gPSBrd2FyZ3MuZ2V0KCJzZWN0aW9uT3BlbiIpCisKK2NsYXNzIFNjcmlwdFNlY3Rpb24oU2VjdGlvbik6CisgICAgYWxsTGluZXMgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgU2VjdGlvbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3NjcmlwdCA9IHt9CisgICAgICAgIHNlbGYuX3Jlc2V0U2NyaXB0KCkKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKHNlbGYudmVyc2lvbikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1lcnJvcm9uZmFpbCIsIGRlc3Q9ImVycm9yT25GYWlsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWludGVycHJldGVyIiwgZGVzdD0iaW50ZXJwcmV0ZXIiLCBkZWZhdWx0PSIvYmluL3NoIikKKyAgICAgICAgb3AuYWRkX29wdGlvbigiLS1sb2ciLCAiLS1sb2dmaWxlIiwgZGVzdD0ibG9nIikKKyAgICAgICAgcmV0dXJuIG9wCisKKyAgICBkZWYgX3Jlc2V0U2NyaXB0KHNlbGYpOgorICAgICAgICBzZWxmLl9zY3JpcHQgPSB7ImludGVycCI6ICIvYmluL3NoIiwgImxvZyI6IE5vbmUsICJlcnJvck9uRmFpbCI6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgImxpbmVubyI6IE5vbmUsICJjaHJvb3QiOiBGYWxzZSwgImJvZHkiOiBbXX0KKworICAgIGRlZiBoYW5kbGVMaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLl9zY3JpcHRbImJvZHkiXS5hcHBlbmQobGluZSkKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgaWYgIiAiLmpvaW4oc2VsZi5fc2NyaXB0WyJib2R5Il0pLnN0cmlwKCkgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBrd2FyZ3MgPSB7ImludGVycCI6IHNlbGYuX3NjcmlwdFsiaW50ZXJwIl0sCisgICAgICAgICAgICAgICAgICAiaW5DaHJvb3QiOiBzZWxmLl9zY3JpcHRbImNocm9vdCJdLAorICAgICAgICAgICAgICAgICAgImxpbmVubyI6IHNlbGYuX3NjcmlwdFsibGluZW5vIl0sCisgICAgICAgICAgICAgICAgICAibG9nZmlsZSI6IHNlbGYuX3NjcmlwdFsibG9nIl0sCisgICAgICAgICAgICAgICAgICAiZXJyb3JPbkZhaWwiOiBzZWxmLl9zY3JpcHRbImVycm9yT25GYWlsIl0sCisgICAgICAgICAgICAgICAgICAidHlwZSI6IHNlbGYuX3NjcmlwdFsidHlwZSJdfQorCisgICAgICAgIHMgPSBzZWxmLmRhdGFPYmogKHNlbGYuX3NjcmlwdFsiYm9keSJdLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fcmVzZXRTY3JpcHQoKQorCisgICAgICAgIGlmIHNlbGYuaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zY3JpcHRzLmFwcGVuZChzKQorCisgICAgZGVmIGhhbmRsZUhlYWRlcihzZWxmLCBsaW5lbm8sIGFyZ3MpOgorICAgICAgICAiIiJQcm9jZXNzIHRoZSBhcmd1bWVudHMgdG8gYSAlcHJlLyVwb3N0LyV0cmFjZWJhY2sgaGVhZGVyIGZvciBsYXRlcgorICAgICAgICAgICBzZXR0aW5nIG9uIGEgU2NyaXB0IGluc3RhbmNlIG9uY2UgdGhlIGVuZCBvZiB0aGUgc2NyaXB0IGlzIGZvdW5kLgorICAgICAgICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIiIiCisgICAgICAgIFNlY3Rpb24uaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncykKKyAgICAgICAgb3AgPSBzZWxmLl9nZXRQYXJzZXIoKQorCisgICAgICAgIChvcHRzLCBleHRyYSkgPSBvcC5wYXJzZV9hcmdzKGFyZ3M9YXJnc1sxOl0sIGxpbmVubz1saW5lbm8pCisKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJpbnRlcnAiXSA9IG9wdHMuaW50ZXJwcmV0ZXIKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJsaW5lbm8iXSA9IGxpbmVubworICAgICAgICBzZWxmLl9zY3JpcHRbImxvZyJdID0gb3B0cy5sb2cKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJlcnJvck9uRmFpbCJdID0gb3B0cy5lcnJvck9uRmFpbAorICAgICAgICBpZiBoYXNhdHRyKG9wdHMsICJub2Nocm9vdCIpOgorICAgICAgICAgICAgc2VsZi5fc2NyaXB0WyJjaHJvb3QiXSA9IG5vdCBvcHRzLm5vY2hyb290CisKK2NsYXNzIFByZVNjcmlwdFNlY3Rpb24oU2NyaXB0U2VjdGlvbik6CisgICAgc2VjdGlvbk9wZW4gPSAiJXByZSIKKworICAgIGRlZiBfcmVzZXRTY3JpcHQoc2VsZik6CisgICAgICAgIFNjcmlwdFNlY3Rpb24uX3Jlc2V0U2NyaXB0KHNlbGYpCisgICAgICAgIHNlbGYuX3NjcmlwdFsidHlwZSJdID0gS1NfU0NSSVBUX1BSRQorCitjbGFzcyBQb3N0U2NyaXB0U2VjdGlvbihTY3JpcHRTZWN0aW9uKToKKyAgICBzZWN0aW9uT3BlbiA9ICIlcG9zdCIKKworICAgIGRlZiBfZ2V0UGFyc2VyKHNlbGYpOgorICAgICAgICBvcCA9IFNjcmlwdFNlY3Rpb24uX2dldFBhcnNlcihzZWxmKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLW5vY2hyb290IiwgZGVzdD0ibm9jaHJvb3QiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIHJldHVybiBvcAorCisgICAgZGVmIF9yZXNldFNjcmlwdChzZWxmKToKKyAgICAgICAgU2NyaXB0U2VjdGlvbi5fcmVzZXRTY3JpcHQoc2VsZikKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJjaHJvb3QiXSA9IFRydWUKKyAgICAgICAgc2VsZi5fc2NyaXB0WyJ0eXBlIl0gPSBLU19TQ1JJUFRfUE9TVAorCitjbGFzcyBUcmFjZWJhY2tTY3JpcHRTZWN0aW9uKFNjcmlwdFNlY3Rpb24pOgorICAgIHNlY3Rpb25PcGVuID0gIiV0cmFjZWJhY2siCisKKyAgICBkZWYgX3Jlc2V0U2NyaXB0KHNlbGYpOgorICAgICAgICBTY3JpcHRTZWN0aW9uLl9yZXNldFNjcmlwdChzZWxmKQorICAgICAgICBzZWxmLl9zY3JpcHRbInR5cGUiXSA9IEtTX1NDUklQVF9UUkFDRUJBQ0sKKworY2xhc3MgUGFja2FnZVNlY3Rpb24oU2VjdGlvbik6CisgICAgc2VjdGlvbk9wZW4gPSAiJXBhY2thZ2VzIgorCisgICAgZGVmIGhhbmRsZUxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmhhbmRsZXI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAoaCwgcywgdCkgPSBsaW5lLnBhcnRpdGlvbignIycpCisgICAgICAgIGxpbmUgPSBoLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmFkZChbbGluZV0pCisKKyAgICBkZWYgaGFuZGxlSGVhZGVyKHNlbGYsIGxpbmVubywgYXJncyk6CisgICAgICAgICIiIlByb2Nlc3MgdGhlIGFyZ3VtZW50cyB0byB0aGUgJXBhY2thZ2VzIGhlYWRlciBhbmQgc2V0IGF0dHJpYnV0ZXMKKyAgICAgICAgICAgb24gdGhlIFZlcnNpb24ncyBQYWNrYWdlcyBpbnN0YW5jZSBhcHByb3ByaWF0ZS4gIFRoaXMgbWV0aG9kIG1heSBiZQorICAgICAgICAgICBvdmVycmlkZGVuIGluIGEgc3ViY2xhc3MgaWYgbmVjZXNzYXJ5LgorICAgICAgICAiIiIKKyAgICAgICAgU2VjdGlvbi5oYW5kbGVIZWFkZXIoc2VsZiwgbGluZW5vLCBhcmdzKQorICAgICAgICBvcCA9IEtTT3B0aW9uUGFyc2VyKHZlcnNpb249c2VsZi52ZXJzaW9uKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWV4Y2x1ZGVkb2NzIiwgZGVzdD0iZXhjbHVkZWRvY3MiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taWdub3JlbWlzc2luZyIsIGRlc3Q9Imlnbm9yZW1pc3NpbmciLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0tbm9iYXNlIiwgZGVzdD0ibm9iYXNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlKQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWlnbm9yZWRlcHMiLCBkZXN0PSJyZXNvbHZlRGVwcyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQ9RkM0LCByZW1vdmVkPUY5KQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLXJlc29sdmVkZXBzIiwgZGVzdD0icmVzb2x2ZURlcHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQ9RkM0LCByZW1vdmVkPUY5KQorICAgICAgICBvcC5hZGRfb3B0aW9uKCItLWRlZmF1bHQiLCBkZXN0PSJkZWZhdWx0UGFja2FnZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGludHJvZHVjZWQ9RjcpCisgICAgICAgIG9wLmFkZF9vcHRpb24oIi0taW5zdExhbmdzIiwgZGVzdD0iaW5zdExhbmdzIiwgdHlwZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiLCBpbnRyb2R1Y2VkPUY5KQorCisgICAgICAgIChvcHRzLCBleHRyYSkgPSBvcC5wYXJzZV9hcmdzKGFyZ3M9YXJnc1sxOl0sIGxpbmVubz1saW5lbm8pCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLnBhY2thZ2VzLmV4Y2x1ZGVEb2NzID0gb3B0cy5leGNsdWRlZG9jcworICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuYWRkQmFzZSA9IG5vdCBvcHRzLm5vYmFzZQorICAgICAgICBpZiBvcHRzLmlnbm9yZW1pc3Npbmc6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuaGFuZGxlTWlzc2luZyA9IEtTX01JU1NJTkdfSUdOT1JFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuaGFuZGxlTWlzc2luZyA9IEtTX01JU1NJTkdfUFJPTVBUCisKKyAgICAgICAgaWYgb3B0cy5kZWZhdWx0UGFja2FnZXM6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIucGFja2FnZXMuZGVmYXVsdCA9IFRydWUKKworICAgICAgICBpZiBvcHRzLmluc3RMYW5nczoKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5wYWNrYWdlcy5pbnN0TGFuZ3MgPSBvcHRzLmluc3RMYW5ncwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3ZlcnNpb24ucHkgYi9zY3JpcHRzL2xpYi93aWMvM3JkcGFydHkvcHlraWNrc3RhcnQvdmVyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThlNmFhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljLzNyZHBhcnR5L3B5a2lja3N0YXJ0L3ZlcnNpb24ucHkKQEAgLTAsMCArMSwxNjggQEAKKyMKKyMgQ2hyaXMgTHVtZW5zIDxjbHVtZW5zQHJlZGhhdC5jb20+CisjCisjIENvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIFJlZCBIYXQsIEluYy4KKyMKKyMgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsIG1vZGlmeSwKKyMgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2LjIuICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorIyB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcgdGhlCisjIGltcGxpZWQgd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEKKyMgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICBBbnkgUmVkIEhhdAorIyB0cmFkZW1hcmtzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgc291cmNlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiBhcmUgbm90CisjIHN1YmplY3QgdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCBtYXkgb25seSBiZSB1c2VkIG9yIHJlcGxpY2F0ZWQKKyMgd2l0aCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uIG9mIFJlZCBIYXQsIEluYy4gCisjCisiIiIKK01ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBraWNrc3RhcnQgdmVyc2lvbnMuCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgc2V2ZXJhbCBzeW1ib2xpYyBjb25zdGFudHMgdGhhdCBzcGVjaWZ5IGtpY2tzdGFydCBzeW50YXgKK3ZlcnNpb25zLiAgRWFjaCB2ZXJzaW9uIGNvcnJlc3BvbmRzIHJvdWdobHkgdG8gb25lIHJlbGVhc2Ugb2YgUmVkIEhhdCBMaW51eCwKK1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCwgb3IgRmVkb3JhIENvcmUgYXMgdGhlc2UgYXJlIHdoZXJlIG1vc3Qgc3ludGF4CitjaGFuZ2VzIHRha2UgcGxhY2UuCisKK1RoaXMgbW9kdWxlIGFsc28gZXhwb3J0cyBzZXZlcmFsIGZ1bmN0aW9uczoKKworICAgIG1ha2VWZXJzaW9uIC0gR2l2ZW4gYSB2ZXJzaW9uIG51bWJlciwgcmV0dXJuIGFuIGluc3RhbmNlIG9mIHRoZQorICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgaGFuZGxlciBjbGFzcy4KKworICAgIHJldHVybkNsYXNzRm9yVmVyc2lvbiAtIEdpdmVuIGEgdmVyc2lvbiBudW1iZXIsIHJldHVybiB0aGUgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyIGNsYXNzLiAgVGhpcyBkb2VzIG5vdCByZXR1cm4gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzLCBob3dldmVyLgorCisgICAgc3RyaW5nVG9WZXJzaW9uIC0gQ29udmVydCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlcnNpb24gbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgc3ltYm9saWMgY29uc3RhbnQuCisKKyAgICB2ZXJzaW9uVG9TdHJpbmcgLSBQZXJmb3JtIHRoZSByZXZlcnNlIG1hcHBpbmcuCisKKyAgICB2ZXJzaW9uRnJvbUZpbGUgLSBSZWFkIGEga2lja3N0YXJ0IGZpbGUgYW5kIGRldGVybWluZSB0aGUgdmVyc2lvbiBvZgorICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCBpdCB1c2VzLiAgVGhpcyByZXF1aXJlcyB0aGUga2lja3N0YXJ0IGZpbGUgdG8KKyAgICAgICAgICAgICAgICAgICAgICBoYXZlIGEgdmVyc2lvbj0gY29tbWVudCBpbiBpdC4KKyIiIgoraW1wb3J0IGltcHV0aWwsIHJlLCBzeXMKKworaW1wb3J0IGdldHRleHQKK18gPSBsYW1iZGEgeDogZ2V0dGV4dC5sZGdldHRleHQoInB5a2lja3N0YXJ0IiwgeCkKKworZnJvbSBweWtpY2tzdGFydC5lcnJvcnMgaW1wb3J0IEtpY2tzdGFydFZlcnNpb25FcnJvcgorCisjIFN5bWJvbGljIG5hbWVzIGZvciBpbnRlcm5hbCB2ZXJzaW9uIG51bWJlcnMuCitSSEVMMyA9IDkwMAorRkMzID0gMTAwMAorUkhFTDQgPSAxMTAwCitGQzQgPSAyMDAwCitGQzUgPSAzMDAwCitGQzYgPSA0MDAwCitSSEVMNSA9IDQxMDAKK0Y3ICA9IDUwMDAKK0Y4ID0gNjAwMAorRjkgPSA3MDAwCitGMTAgPSA4MDAwCitGMTEgPSA5MDAwCitGMTIgPSAxMDAwMAorRjEzID0gMTEwMDAKK1JIRUw2ID0gMTExMDAKK0YxNCA9IDEyMDAwCitGMTUgPSAxMzAwMAorRjE2ID0gMTQwMDAKKworIyBUaGlzIGFsd2F5cyBwb2ludHMgYXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCBpcyB0aGUgZGVmYXVsdC4KK0RFVkVMID0gRjE2CisKKyMgQSBvbmUtdG8tb25lIG1hcHBpbmcgZnJvbSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIHRvIHZlcnNpb24gbnVtYmVycy4KK3ZlcnNpb25NYXAgPSB7CisgICAgICAgICJERVZFTCI6IERFVkVMLAorICAgICAgICAiRkMzIjogRkMzLCAiRkM0IjogRkM0LCAiRkM1IjogRkM1LCAiRkM2IjogRkM2LCAiRjciOiBGNywgIkY4IjogRjgsCisgICAgICAgICJGOSI6IEY5LCAiRjEwIjogRjEwLCAiRjExIjogRjExLCAiRjEyIjogRjEyLCAiRjEzIjogRjEzLAorICAgICAgICAiRjE0IjogRjE0LCAiRjE1IjogRjE1LCAiRjE2IjogRjE2LAorICAgICAgICAiUkhFTDMiOiBSSEVMMywgIlJIRUw0IjogUkhFTDQsICJSSEVMNSI6IFJIRUw1LCAiUkhFTDYiOiBSSEVMNgorfQorCitkZWYgc3RyaW5nVG9WZXJzaW9uKHMpOgorICAgICIiIkNvbnZlcnQgc3RyaW5nIGludG8gb25lIG9mIHRoZSBwcm92aWRlZCB2ZXJzaW9uIGNvbnN0YW50cy4gIFJhaXNlcworICAgICAgIEtpY2tzdGFydFZlcnNpb25FcnJvciBpZiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYW55dGhpbmcuCisgICAgIiIiCisgICAgIyBGaXJzdCB0cnkgdGhlc2Ugc2hvcnQgZm9ybXMuCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmVyc2lvbk1hcFtzLnVwcGVyKCldCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICAjIE5vdyB0cnkgdGhlIEZlZG9yYSB2ZXJzaW9ucy4KKyAgICBtID0gcmUubWF0Y2goIl5mZWRvcmEuKiAoXGQrKSQiLCBzLCByZS5JKQorCisgICAgaWYgbSBhbmQgbS5ncm91cCgxKToKKyAgICAgICAgaWYgdmVyc2lvbk1hcC5oYXNfa2V5KCJGQyIgKyBtLmdyb3VwKDEpKToKKyAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uTWFwWyJGQyIgKyBtLmdyb3VwKDEpXQorICAgICAgICBlbGlmIHZlcnNpb25NYXAuaGFzX2tleSgiRiIgKyBtLmdyb3VwKDEpKToKKyAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uTWFwWyJGIiArIG0uZ3JvdXAoMSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSBzKQorCisgICAgIyBOb3cgdHJ5IHRoZSBSSEVMIHZlcnNpb25zLgorICAgIG0gPSByZS5tYXRjaCgiXnJlZCBoYXQgZW50ZXJwcmlzZSBsaW51eC4qIChcZCspKFtcLlxkXSopJCIsIHMsIHJlLkkpCisKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpOgorICAgICAgICBpZiB2ZXJzaW9uTWFwLmhhc19rZXkoIlJIRUwiICsgbS5ncm91cCgxKSk6CisgICAgICAgICAgICByZXR1cm4gdmVyc2lvbk1hcFsiUkhFTCIgKyBtLmdyb3VwKDEpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgcykKKworICAgICMgSWYgbm90aGluZyBlbHNlIHdvcmtlZCwgd2UncmUgb3V0IG9mIG9wdGlvbnMuCisgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgcykKKworZGVmIHZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uLCBza2lwRGV2ZWw9RmFsc2UpOgorICAgICIiIkNvbnZlcnQgdmVyc2lvbiBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZXJzaW9uIG51bWJlci4KKyAgICAgICBUaGlzIGlzIHRoZSByZXZlcnNlIG9wZXJhdGlvbiBvZiBzdHJpbmdUb1ZlcnNpb24uICBSYWlzZXMKKyAgICAgICBLaWNrc3RhcnRWZXJzaW9uRXJyb3IgaWYgdmVyc2lvbiBkb2VzIG5vdCBtYXRjaCBhbnl0aGluZy4KKyAgICAiIiIKKyAgICBpZiBub3Qgc2tpcERldmVsIGFuZCB2ZXJzaW9uID09IHZlcnNpb25NYXBbIkRFVkVMIl06CisgICAgICAgIHJldHVybiAiREVWRUwiCisKKyAgICBmb3IgKGtleSwgdmFsKSBpbiB2ZXJzaW9uTWFwLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBrZXkgPT0gIkRFVkVMIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWYgdmFsID09IHZlcnNpb246CisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICByYWlzZSBLaWNrc3RhcnRWZXJzaW9uRXJyb3IoXygiVW5zdXBwb3J0ZWQgdmVyc2lvbiBzcGVjaWZpZWQ6ICVzIikgJSB2ZXJzaW9uKQorCitkZWYgcmV0dXJuQ2xhc3NGb3JWZXJzaW9uKHZlcnNpb249REVWRUwpOgorICAgICIiIlJldHVybiB0aGUgY2xhc3Mgb2YgdGhlIHN5bnRheCBoYW5kbGVyIGZvciB2ZXJzaW9uLiAgdmVyc2lvbiBjYW4gYmUKKyAgICAgICBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIG1hdGNoaW5nIGNvbnN0YW50LiAgUmFpc2VzIEtpY2tzdGFydFZhbHVlRXJyb3IKKyAgICAgICBpZiB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoIGFueXRoaW5nLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgdmVyc2lvbiA9IGludCh2ZXJzaW9uKQorICAgICAgICBtb2R1bGUgPSAiJXMiICUgdmVyc2lvblRvU3RyaW5nKHZlcnNpb24sIHNraXBEZXZlbD1UcnVlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBtb2R1bGUgPSAiJXMiICUgdmVyc2lvbgorICAgICAgICB2ZXJzaW9uID0gc3RyaW5nVG9WZXJzaW9uKHZlcnNpb24pCisKKyAgICBtb2R1bGUgPSBtb2R1bGUubG93ZXIoKQorCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgcHlraWNrc3RhcnQuaGFuZGxlcnMKKyAgICAgICAgc3lzLnBhdGguZXh0ZW5kKHB5a2lja3N0YXJ0LmhhbmRsZXJzLl9fcGF0aF9fKQorICAgICAgICBmb3VuZCA9IGltcHV0aWwuaW1wLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgbG9hZGVkID0gaW1wdXRpbC5pbXAubG9hZF9tb2R1bGUobW9kdWxlLCBmb3VuZFswXSwgZm91bmRbMV0sIGZvdW5kWzJdKQorCisgICAgICAgIGZvciAoaywgdikgaW4gbG9hZGVkLl9fZGljdF9fLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgay5sb3dlcigpLmVuZHN3aXRoKCIlc2hhbmRsZXIiICUgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgS2lja3N0YXJ0VmVyc2lvbkVycm9yKF8oIlVuc3VwcG9ydGVkIHZlcnNpb24gc3BlY2lmaWVkOiAlcyIpICUgdmVyc2lvbikKKworZGVmIG1ha2VWZXJzaW9uKHZlcnNpb249REVWRUwpOgorICAgICIiIlJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgc3ludGF4IGhhbmRsZXIgZm9yIHZlcnNpb24uICB2ZXJzaW9uIGNhbiBiZQorICAgICAgIGVpdGhlciBhIHN0cmluZyBvciB0aGUgbWF0Y2hpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IKKyAgICAgICBzdGFuZGFsb25lIHByb2dyYW1zIHdoaWNoIGp1c3QgbmVlZCB0byBoYW5kbGUgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mCisgICAgICAga2lja3N0YXJ0IHN5bnRheCAoYXMgcHJvdmlkZWQgYnkgYSBjb21tYW5kIGxpbmUgYXJndW1lbnQsIGZvciBleGFtcGxlKQorICAgICAgIGFuZCBuZWVkIHRvIGluc3RhbnRpYXRlIHRoZSBjb3JyZWN0IG9iamVjdC4KKyAgICAiIiIKKyAgICBjbCA9IHJldHVybkNsYXNzRm9yVmVyc2lvbih2ZXJzaW9uKQorICAgIHJldHVybiBjbCgpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvX19pbml0X18ucHkgYi9zY3JpcHRzL2xpYi93aWMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjMWQ5YwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBvcywgc3lzCisKK2N1cl9wYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciAnLicKK3N5cy5wYXRoLmluc2VydCgwLCBjdXJfcGF0aCArICcvM3JkcGFydHknKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL19fdmVyc2lvbl9fLnB5IGIvc2NyaXB0cy9saWIvd2ljL19fdmVyc2lvbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTJhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvX192ZXJzaW9uX18ucHkKQEAgLTAsMCArMSBAQAorVkVSU0lPTiA9ICIyLjAwIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzIGIvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvZGlyZWN0ZGlzay1ncHQud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMDFjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLWdwdC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGEgJ3BjYmlvcycgZGlyZWN0IGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIGxlZ2FjeSBCSU9TIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0IC0tdXNlLXV1aWQKKworYm9vdGxvYWRlciAgLS1wdGFibGUgZ3B0IC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLW11bHRpLXJvb3Rmcy53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4MWY4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2stbXVsdGktcm9vdGZzLndrcwpAQCAtMCwwICsxLDIzIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgbXVsdGkgcm9vdGZzIGltYWdlIHVzaW5nIHJvb3RmcyBwbHVnaW4KKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIGRpc2sgaW1hZ2Ugd2l0aCB0d28gcm9vdGZzIHBhcnRpdGlvbnMKKyMgdXNpbmcgcm9vdGZzIHBsdWdpbi4KKyMKKyMgUGFydGl0aW9ucyBjYW4gdXNlIGVpdGhlcgorIyAgIC0gaW5kaXJlY3Qgcm9vdGZzIHJlZmVyZW5jZXMgdG8gaW1hZ2UgcmVjaXBlKHMpOgorIyAgICAgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrLW11bHRpLWluZGlyZWN0LXJlY2lwZXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIFwKKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMT1jb3JlLWltYWdlLW1pbmltYWwKKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMj1jb3JlLWltYWdlLW1pbmltYWwtZGV2CisjCisjICAgLSBvciBwYXRocyB0byByb290ZnMgZGlyZWN0b3JpZXM6CisjICAgICB3aWMgY3JlYXRlIGRpcmVjdGRpc2stbXVsdGktcm9vdGZzIFwKKyMgICAgICAgICAtLXJvb3Rmcy1kaXIgcm9vdGZzMT10bXAvd29yay9xZW11eDg2XzY0LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMvCisjICAgICAgICAgLS1yb290ZnMtZGlyIHJvb3RmczI9dG1wL3dvcmsvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYvMS4wLXIwL3Jvb3Rmcy8KKyMKKyMgICAtIG9yIGFueSBjb21iaW5hdGlvbnMgb2YgLXIgYW5kIC0tcm9vdGZzIGNvbW1hbmQgbGluZSBvcHRpb25zCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPXJvb3RmczEgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKK3BhcnQgL3Jlc2N1ZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPXJvb3RmczIgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBzZWNvbmRhcnkgLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IHZpZGVvPXZlc2FmYiB2Z2E9MHgzMTggY29uc29sZT10dHkwIgorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcyBiL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL2RpcmVjdGRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNGM5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcwpAQCAtMCwwICsxLDEwIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgbGVnYWN5IEJJT1MgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSBkZCB0byBib290IG1lZGlhLgorCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1wY2Jpb3MgLS1vbmRpc2sgc2RhIC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKK3BhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDQgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgdmlkZW89dmVzYWZiIHZnYT0weDMxOCBjb25zb2xlPXR0eTAiCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZWZpZGlzay53a3MgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NmU5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2VmaWRpc2sud2tzCkBAIC0wLDAgKzEsMTEgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLXNvdXJjZXBhcmFtcz0ibG9hZGVyPWdydWItZWZpIiAtLW9uZGlzayBzZGEgLS1sYWJlbCBtc2RvcyAtLWFjdGl2ZSAtLWFsaWduIDEwMjQKKworcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorCitwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgcm9vdGZzdHlwZT1leHQ0IGNvbnNvbGU9dHR5UENIMCwxMTUyMDAgY29uc29sZT10dHkwIHZtYWxsb2M9MjU2TUIgc25kLWhkYS1pbnRlbC5lbmFibGVfbXNpPTAiCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9ta2d1bW1pZGlzay53a3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhMjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21rZ3VtbWlkaXNrLndrcwpAQCAtMCwwICsxLDExIEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIEVGSSBkaXNrIGltYWdlIHRoYXQgdGhlIHVzZXIKKyMgY2FuIGRpcmVjdGx5IGRkIHRvIGJvb3QgbWVkaWEuCisKK3BhcnQgL2Jvb3QgLS1zb3VyY2UgYm9vdGltZy1lZmkgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ndW1taWJvb3QiIC0tb25kaXNrIHNkYSAtLWxhYmVsIG1zZG9zIC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorCitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK3BhcnQgc3dhcCAtLW9uZGlzayBzZGEgLS1zaXplIDQ0IC0tbGFiZWwgc3dhcDEgLS1mc3R5cGU9c3dhcAorCitib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQgY29uc29sZT10dHlQQ0gwLDExNTIwMCBjb25zb2xlPXR0eTAgdm1hbGxvYz0yNTZNQiBzbmQtaGRhLWludGVsLmVuYWJsZV9tc2k9MCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21raHlicmlkaXNvLndrcyBiL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL21raHlicmlkaXNvLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDM0ZTliCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3MvbWtoeWJyaWRpc28ud2tzCkBAIC0wLDAgKzEsNyBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogQ3JlYXRlIGEgaHlicmlkIElTTyBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGFuIEVGSSBhbmQgbGVnYWN5IGJvb3RhYmxlIGh5YnJpZCBJU08gaW1hZ2UKKyMgd2hpY2ggY2FuIGJlIHVzZWQgb24gb3B0aWNhbCBtZWRpYSBhcyB3ZWxsIGFzIFVTQiBtZWRpYS4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBpc29pbWFnZS1pc29oeWJyaWQgLS1zb3VyY2VwYXJhbXM9ImxvYWRlcj1ncnViLWVmaSxpbWFnZV9uYW1lPUhZQlJJRF9JU09fSU1HIiAtLW9uZGlzayBjZCAtLWxhYmVsIEhZQlJJRElTTyAtLWZzdHlwZT1leHQ0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0xNSAgLS1hcHBlbmQ9IiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzL3FlbXV4ODYtZGlyZWN0ZGlzay53a3MgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9xZW11eDg2LWRpcmVjdGRpc2sud2tzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzM4YjUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9xZW11eDg2LWRpcmVjdGRpc2sud2tzCkBAIC0wLDAgKzEsMTAgQEAKKyMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhIHFlbXUgbWFjaGluZSAncGNiaW9zJyBkaXJlY3QgZGlzayBpbWFnZQorIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgbGVnYWN5IEJJT1MgZGlzayBpbWFnZSB0aGF0IHRoZSB1c2VyCisjIGNhbiBkaXJlY3RseSB1c2UgdG8gYm9vdCBhIHFlbXUgbWFjaGluZS4KKworCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIHNkYSAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcGxhdGZvcm0gLS1hbGlnbiAxMDI0CisKK2Jvb3Rsb2FkZXIgIC0tdGltZW91dD0wICAtLWFwcGVuZD0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9L2Rldi92ZGEyIHJ3IG1lbT0yNTZNIGlwPTE5Mi4xNjguNy4yOjoxOTIuMTY4LjcuMToyNTUuMjU1LjI1NS4wIG9wcm9maWxlLnRpbWVyPTEgcm9vdGZzdHlwZT1leHQ0ICIKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc2RpbWFnZS1ib290cGFydC53a3MgYi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9zZGltYWdlLWJvb3RwYXJ0LndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZkNjMyCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL2Nhbm5lZC13a3Mvc2RpbWFnZS1ib290cGFydC53a3MKQEAgLTAsMCArMSw2IEBACisjIHNob3J0LWRlc2NyaXB0aW9uOiBDcmVhdGUgU0QgY2FyZCBpbWFnZSB3aXRoIGEgYm9vdCBwYXJ0aXRpb24KKyMgbG9uZy1kZXNjcmlwdGlvbjogQ3JlYXRlcyBhIHBhcnRpdGlvbmVkIFNEIGNhcmQgaW1hZ2UuIEJvb3QgZmlsZXMKKyMgYXJlIGxvY2F0ZWQgaW4gdGhlIGZpcnN0IHZmYXQgcGFydGl0aW9uLgorCitwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGFydGl0aW9uIC0tb25kaXNrIG1tY2JsayAtLWZzdHlwZT12ZmF0IC0tbGFiZWwgYm9vdCAtLWFjdGl2ZSAtLWFsaWduIDQgLS1zaXplIDE2CitwYXJ0IC8gLS1zb3VyY2Ugcm9vdGZzIC0tb25kaXNrIG1tY2JsayAtLWZzdHlwZT1leHQ0IC0tbGFiZWwgcm9vdCAtLWFsaWduIDQKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9jb25mLnB5IGIvc2NyaXB0cy9saWIvd2ljL2NvbmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0MzYzYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9jb25mLnB5CkBAIC0wLDAgKzEsMTAwIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydAorZnJvbSB3aWMudXRpbHMgaW1wb3J0IG1pc2MKKworCitkZWYgZ2V0X3NpdGVjb25mKCk6CisgICAgd2ljX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgZW9zID0gd2ljX3BhdGguZmluZCgnc2NyaXB0cycpICsgbGVuKCdzY3JpcHRzJykKKyAgICBzY3JpcHRzX3BhdGggPSB3aWNfcGF0aFs6ZW9zXQorCisgICAgcmV0dXJuIHNjcmlwdHNfcGF0aCArICIvbGliL2ltYWdlL2NvbmZpZy93aWMuY29uZiIKKworY2xhc3MgQ29uZmlnTWdyKG9iamVjdCk6CisgICAgREVGQVVMVFMgPSB7CisgICAgICAgICdjb21tb24nOiB7CisgICAgICAgICAgICAiZGlzdHJvX25hbWUiOiAiRGVmYXVsdCBEaXN0cmlidXRpb24iLAorICAgICAgICAgICAgInBsdWdpbl9kaXIiOiAiL3Vzci9saWIvd2ljL3BsdWdpbnMifSwgIyBUT0RPIHVzZSBwcmVmaXggYWxzbz8KKyAgICAgICAgJ2NyZWF0ZSc6IHsKKyAgICAgICAgICAgICJ0bXBkaXIiOiAnL3Zhci90bXAvd2ljJywKKyAgICAgICAgICAgICJvdXRkaXIiOiAnLi93aWMtb3V0cHV0JywKKyAgICAgICAgICAgICJyZWxlYXNlIjogTm9uZSwKKyAgICAgICAgICAgICJsb2dmaWxlIjogTm9uZSwKKyAgICAgICAgICAgICJuYW1lX3ByZWZpeCI6IE5vbmUsCisgICAgICAgICAgICAibmFtZV9zdWZmaXgiOiBOb25lfQorICAgICAgICB9CisKKyAgICAjIG1ha2UgdGhlIG1hbmFnZXIgY2xhc3MgYXMgc2luZ2xldG9uCisgICAgX2luc3RhbmNlID0gTm9uZQorICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGNscy5faW5zdGFuY2U6CisgICAgICAgICAgICBjbHMuX2luc3RhbmNlID0gc3VwZXIoQ29uZmlnTWdyLCBjbHMpLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgcmV0dXJuIGNscy5faW5zdGFuY2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrc2NvbmY9Tm9uZSwgc2l0ZWNvbmY9Tm9uZSk6CisgICAgICAgICMgcmVzZXQgY29uZmlnIG9wdGlvbnMKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICAgICAgaWYgbm90IHNpdGVjb25mOgorICAgICAgICAgICAgc2l0ZWNvbmYgPSBnZXRfc2l0ZWNvbmYoKQorCisgICAgICAgICMgaW5pdGlhbCBvcHRpb25zIGZyb20gc2l0ZWNvbmYKKyAgICAgICAgc2VsZi5fc2l0ZWNvbmYgPSBzaXRlY29uZgorCisgICAgICAgIGlmIGtzY29uZjoKKyAgICAgICAgICAgIHNlbGYuX2tzY29uZiA9IGtzY29uZgorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9fa3Njb25mID0gTm9uZQorICAgICAgICBzZWxmLl9fc2l0ZWNvbmYgPSBOb25lCisgICAgICAgIHNlbGYuY3JlYXRlID0ge30KKworICAgICAgICAjIGluaXRpYWxpemUgdGhlIHZhbHVlcyB3aXRoIGRlZmF1bHRzCisgICAgICAgIGZvciBzZWMsIHZhbHMgaW4gc2VsZi5ERUZBVUxUUy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgc2VjLCB2YWxzKQorCisgICAgZGVmIF9fc2V0X2tzY29uZihzZWxmLCBrc2NvbmYpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoa3Njb25mKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdDYW5ub3QgZmluZCBrcyBmaWxlOiAlcycgJSBrc2NvbmYpCisKKyAgICAgICAgc2VsZi5fX2tzY29uZiA9IGtzY29uZgorICAgICAgICBzZWxmLl9wYXJzZV9raWNrc3RhcnQoa3Njb25mKQorICAgIGRlZiBfX2dldF9rc2NvbmYoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fa3Njb25mCisgICAgX2tzY29uZiA9IHByb3BlcnR5KF9fZ2V0X2tzY29uZiwgX19zZXRfa3Njb25mKQorCisgICAgZGVmIF9wYXJzZV9raWNrc3RhcnQoc2VsZiwga3Njb25mPU5vbmUpOgorICAgICAgICBpZiBub3Qga3Njb25mOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga3NvYmogPSBraWNrc3RhcnQucmVhZF9raWNrc3RhcnQoa3Njb25mKQorCisgICAgICAgIHNlbGYuY3JlYXRlWydrcyddID0ga3NvYmoKKyAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWUnXSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShrc2NvbmYpKVswXQorCisgICAgICAgIHNlbGYuY3JlYXRlWyduYW1lJ10gPSBtaXNjLmJ1aWxkX25hbWUoa3Njb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlWydyZWxlYXNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWVfcHJlZml4J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVbJ25hbWVfc3VmZml4J10pCisKK2NvbmZpZ21nciA9IENvbmZpZ01ncigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvY29uZmlnL3dpYy5jb25mIGIvc2NyaXB0cy9saWIvd2ljL2NvbmZpZy93aWMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTFiY2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL2NvbmZpZy93aWMuY29uZgpAQCAtMCwwICsxLDYgQEAKK1tjb21tb25dCis7IGdlbmVyYWwgc2V0dGluZ3MKK2Rpc3Ryb19uYW1lID0gT3BlbkVtYmVkZGVkCisKK1tjcmVhdGVdCis7IHNldHRpbmdzIGZvciBjcmVhdGUgc3ViY29tbWFuZApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkgYi9zY3JpcHRzL2xpYi93aWMvY3JlYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMxMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL2NyZWF0b3IucHkKQEAgLTAsMCArMSwxMjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MsIHN5cworZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyLCBTVVBQUkVTU19IRUxQCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMgaW1wb3J0IGVycm9ycworZnJvbSB3aWMuY29uZiBpbXBvcnQgY29uZmlnbWdyCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorCisKK2NsYXNzIENyZWF0b3Iob2JqZWN0KToKKyAgICAiIiIke25hbWV9OiBjcmVhdGUgYW4gaW1hZ2UKKworICAgIFVzYWdlOgorICAgICAgICAke25hbWV9IFNVQkNPTU1BTkQgPGtzZmlsZT4gW09QVFNdCisKKyAgICAke2NvbW1hbmRfbGlzdH0KKyAgICAke29wdGlvbl9saXN0fQorICAgICIiIgorCisgICAgbmFtZSA9ICd3aWMgY3JlYXRlKGNyKScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9zdWJjbWRzID0ge30KKworICAgICAgICAjIGdldCBjbWRzIGZyb20gcGx1Z2lubWdyCisgICAgICAgICMgbWl4LWluIGRvX3N1YmNtZCBpbnRlcmZhY2UKKyAgICAgICAgZm9yIHN1YmNtZCwga2xhc3MgaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKCdpbWFnZXInKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGtsYXNzLCAnZG9fY3JlYXRlJyk6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygiVW5zdXBwb3J0ZWQgc3ViY21kOiAlcyIgJSBzdWJjbWQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoa2xhc3MsICdkb19jcmVhdGUnKQorICAgICAgICAgICAgc2VsZi5fc3ViY21kc1tzdWJjbWRdID0gZnVuYworCisgICAgZGVmIGdldF9vcHRwYXJzZXIoc2VsZik6CisgICAgICAgIG9wdHBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRlYnVnJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nZGVidWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPVNVUFBSRVNTX0hFTFApCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd2ZXJib3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1TVVBQUkVTU19IRUxQKQorICAgICAgICBvcHRwYXJzZXIuYWRkX29wdGlvbignJywgJy0tbG9nZmlsZScsIHR5cGU9J3N0cmluZycsIGRlc3Q9J2xvZ2ZpbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggb2YgbG9nZmlsZScpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNvbmZpZycsIHR5cGU9J3N0cmluZycsIGRlc3Q9J2NvbmZpZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBjb25maWcgZmlsZSBmb3Igd2ljJykKKyAgICAgICAgb3B0cGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0ZGlyJywgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J291dGRpcicsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nT3V0cHV0IGRpcmVjdG9yeScpCisgICAgICAgIG9wdHBhcnNlci5hZGRfb3B0aW9uKCcnLCAnLS10bXBmcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2VuYWJsZXRtcGZzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0dXAgdG1wZGlyIGFzIHRtcGZzIHRvIGFjY2VsZXJhdGUsIGV4cGVyaW1lbnRhbCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZlYXR1cmUsIHVzZSBpdCBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4gNEcgbWVtb3J5JykKKyAgICAgICAgcmV0dXJuIG9wdHBhcnNlcgorCisgICAgZGVmIHBvc3RvcHRwYXJzZShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgYWJzcGF0aCA9IGxhbWJkYSBwdGg6IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIocHRoKSkKKworICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBtc2dlci5zZXRfbG9nbGV2ZWwoJ3ZlcmJvc2UnKQorICAgICAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCdkZWJ1ZycpCisKKyAgICAgICAgaWYgb3B0aW9ucy5sb2dmaWxlOgorICAgICAgICAgICAgbG9nZmlsZV9hYnNfcGF0aCA9IGFic3BhdGgob3B0aW9ucy5sb2dmaWxlKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihsb2dmaWxlX2Fic19wYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcnMuVXNhZ2UoImxvZ2ZpbGUncyBwYXRoICVzIHNob3VsZCBiZSBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9wdGlvbnMubG9nZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUobG9nZmlsZV9hYnNfcGF0aCkpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShsb2dmaWxlX2Fic19wYXRoKSkKKyAgICAgICAgICAgIG1zZ2VyLnNldF9pbnRlcmFjdGl2ZShGYWxzZSkKKyAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dmaWxlKGxvZ2ZpbGVfYWJzX3BhdGgpCisgICAgICAgICAgICBjb25maWdtZ3IuY3JlYXRlWydsb2dmaWxlJ10gPSBvcHRpb25zLmxvZ2ZpbGUKKworICAgICAgICBpZiBvcHRpb25zLmNvbmZpZzoKKyAgICAgICAgICAgIGNvbmZpZ21nci5yZXNldCgpCisgICAgICAgICAgICBjb25maWdtZ3IuX3NpdGVjb25mID0gb3B0aW9ucy5jb25maWcKKworICAgICAgICBpZiBvcHRpb25zLm91dGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbmZpZ21nci5jcmVhdGVbJ291dGRpciddID0gYWJzcGF0aChvcHRpb25zLm91dGRpcikKKworICAgICAgICBjZGlyID0gJ291dGRpcicKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZmlnbWdyLmNyZWF0ZVtjZGlyXSkgXAorICAgICAgICAgICBhbmQgbm90IG9zLnBhdGguaXNkaXIoY29uZmlnbWdyLmNyZWF0ZVtjZGlyXSk6CisgICAgICAgICAgICBtc2dlci5lcnJvcignSW52YWxpZCBkaXJlY3Rvcnkgc3BlY2lmaWVkOiAlcycgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjb25maWdtZ3IuY3JlYXRlW2NkaXJdKQorCisgICAgICAgIGlmIG9wdGlvbnMuZW5hYmxldG1wZnM6CisgICAgICAgICAgICBjb25maWdtZ3IuY3JlYXRlWydlbmFibGV0bXBmcyddID0gb3B0aW9ucy5lbmFibGV0bXBmcworCisgICAgZGVmIG1haW4oc2VsZiwgYXJndj1Ob25lKToKKyAgICAgICAgaWYgYXJndiBpcyBOb25lOgorICAgICAgICAgICAgYXJndiA9IHN5cy5hcmd2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmd2ID0gYXJndls6XSAjIGRvbid0IG1vZGlmeSBjYWxsZXIncyBsaXN0CisKKyAgICAgICAgcG5hbWUgPSBhcmd2WzBdCisgICAgICAgIGlmIHBuYW1lIG5vdCBpbiBzZWxmLl9zdWJjbWRzOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoJ1Vua25vd24gcGx1Z2luOiAlcycgJSBwbmFtZSkKKworICAgICAgICBvcHRwYXJzZXIgPSBzZWxmLmdldF9vcHRwYXJzZXIoKQorICAgICAgICBvcHRpb25zLCBhcmdzID0gb3B0cGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworICAgICAgICBzZWxmLnBvc3RvcHRwYXJzZShvcHRpb25zKQorCisgICAgICAgIHJldHVybiBzZWxmLl9zdWJjbWRzW3BuYW1lXShvcHRpb25zLCAqYXJnc1sxOl0pCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvZW5naW5lLnB5IGIvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmI5M2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL2VuZ2luZS5weQpAQCAtMCwwICsxLDIyMCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisKKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgaW1hZ2UgY3JlYXRpb24gZW5naW5lIHVzZWQgYnkgJ3dpYycgdG8KKyMgY3JlYXRlIGltYWdlcy4gIFRoZSBlbmdpbmUgcGFyc2VzIHRocm91Z2ggdGhlIE9wZW5FbWJlZGRlZCBraWNrc3RhcnQKKyMgKHdrcykgZmlsZSBzcGVjaWZpZWQgYW5kIGdlbmVyYXRlcyBpbWFnZXMgdGhhdCBjYW4gdGhlbiBiZSBkaXJlY3RseQorIyB3cml0dGVuIG9udG8gbWVkaWEuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyLCBjcmVhdG9yCitmcm9tIHdpYy51dGlscyBpbXBvcnQgbWlzYworZnJvbSB3aWMucGx1Z2luIGltcG9ydCBwbHVnaW5tZ3IKK2Zyb20gd2ljLnV0aWxzLm9lIGltcG9ydCBtaXNjCisKKworZGVmIHZlcmlmeV9idWlsZF9lbnYoKToKKyAgICAiIiIKKyAgICBWZXJpZnkgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4KKworICAgIFJldHVybnMgVHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlCisgICAgIiIiCisgICAgaWYgbm90IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpOgorICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICByZXR1cm4gVHJ1ZQorCisKK0NBTk5FRF9JTUFHRV9ESVIgPSAibGliL3dpYy9jYW5uZWQtd2tzIiAjIHJlbGF0aXZlIHRvIHNjcmlwdHMKK1NDUklQVFNfQ0FOTkVEX0lNQUdFX0RJUiA9ICJzY3JpcHRzLyIgKyBDQU5ORURfSU1BR0VfRElSCisKK2RlZiBidWlsZF9jYW5uZWRfaW1hZ2VfbGlzdChwYXRoKToKKyAgICBsYXllcnNfcGF0aCA9IG1pc2MuZ2V0X2JpdGJha2VfdmFyKCJCQkxBWUVSUyIpCisgICAgY2FubmVkX3drc19sYXllcl9kaXJzID0gW10KKworICAgIGlmIGxheWVyc19wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBmb3IgbGF5ZXJfcGF0aCBpbiBsYXllcnNfcGF0aC5zcGxpdCgpOgorICAgICAgICAgICAgY3BhdGggPSBvcy5wYXRoLmpvaW4obGF5ZXJfcGF0aCwgU0NSSVBUU19DQU5ORURfSU1BR0VfRElSKQorICAgICAgICAgICAgY2FubmVkX3drc19sYXllcl9kaXJzLmFwcGVuZChjcGF0aCkKKworICAgIGNwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIENBTk5FRF9JTUFHRV9ESVIpCisgICAgY2FubmVkX3drc19sYXllcl9kaXJzLmFwcGVuZChjcGF0aCkKKworICAgIHJldHVybiBjYW5uZWRfd2tzX2xheWVyX2RpcnMKKworZGVmIGZpbmRfY2FubmVkX2ltYWdlKHNjcmlwdHNfcGF0aCwgd2tzX2ZpbGUpOgorICAgICIiIgorICAgIEZpbmQgYSAud2tzIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgY2FubmVkIGZpbGVzIGRpci4KKworICAgIFJldHVybiBGYWxzZSBpZiBub3QgZm91bmQKKyAgICAiIiIKKyAgICBsYXllcnNfY2FubmVkX3drc19kaXIgPSBidWlsZF9jYW5uZWRfaW1hZ2VfbGlzdChzY3JpcHRzX3BhdGgpCisKKyAgICBmb3IgY2FubmVkX3drc19kaXIgaW4gbGF5ZXJzX2Nhbm5lZF93a3NfZGlyOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhjYW5uZWRfd2tzX2Rpcik6CisgICAgICAgICAgICBmb3IgZm5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoIn4iKSBvciBmbmFtZS5lbmRzd2l0aCgiIyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGZuYW1lLmVuZHN3aXRoKCIud2tzIikgYW5kIHdrc19maWxlICsgIi53a3MiID09IGZuYW1lOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjYW5uZWRfd2tzX2RpciwgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxscGF0aAorICAgIHJldHVybiBOb25lCisKKworZGVmIGxpc3RfY2FubmVkX2ltYWdlcyhzY3JpcHRzX3BhdGgpOgorICAgICIiIgorICAgIExpc3QgdGhlIC53a3MgZmlsZXMgaW4gdGhlIGNhbm5lZCBpbWFnZSBkaXIsIG1pbnVzIHRoZSBleHRlbnNpb24uCisgICAgIiIiCisgICAgbGF5ZXJzX2Nhbm5lZF93a3NfZGlyID0gYnVpbGRfY2FubmVkX2ltYWdlX2xpc3Qoc2NyaXB0c19wYXRoKQorCisgICAgZm9yIGNhbm5lZF93a3NfZGlyIGluIGxheWVyc19jYW5uZWRfd2tzX2RpcjoKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoY2FubmVkX3drc19kaXIpOgorICAgICAgICAgICAgZm9yIGZuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGlmIGZuYW1lLmVuZHN3aXRoKCJ+Iikgb3IgZm5hbWUuZW5kc3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBmbmFtZS5lbmRzd2l0aCgiLndrcyIpOgorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihjYW5uZWRfd2tzX2RpciwgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmdWxscGF0aCkgYXMgd2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gd2tzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgic2hvcnQtZGVzY3JpcHRpb246IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBsaW5lW2lkeCArIGxlbigic2hvcnQtZGVzY3JpcHRpb246Iik6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmbmFtZSlbMF0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAgJXNcdFx0JXMiICUgKGJhc2VuYW1lLmxqdXN0KDMwKSwgZGVzYykKKworCitkZWYgbGlzdF9jYW5uZWRfaW1hZ2VfaGVscChzY3JpcHRzX3BhdGgsIGZ1bGxwYXRoKToKKyAgICAiIiIKKyAgICBMaXN0IHRoZSBoZWxwIGFuZCBwYXJhbXMgaW4gdGhlIHNwZWNpZmllZCBjYW5uZWQgaW1hZ2UuCisgICAgIiIiCisgICAgZm91bmQgPSBGYWxzZQorICAgIHdpdGggb3BlbihmdWxscGF0aCkgYXMgd2tzOgorICAgICAgICBmb3IgbGluZSBpbiB3a3M6CisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgaWR4ID0gbGluZS5maW5kKCJsb25nLWRlc2NyaXB0aW9uOiIpCisgICAgICAgICAgICAgICAgaWYgaWR4ICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgICAgICAgICBwcmludCBsaW5lW2lkeCArIGxlbigibG9uZy1kZXNjcmlwdGlvbjoiKTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlkeCA9IGxpbmUuZmluZCgiIyIpCisgICAgICAgICAgICBpZiBpZHggIT0gLTE6CisgICAgICAgICAgICAgICAgcHJpbnQgbGluZVtpZHggKyBsZW4oIiM6Iik6XS5yc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworCisKK2RlZiBsaXN0X3NvdXJjZV9wbHVnaW5zKCk6CisgICAgIiIiCisgICAgTGlzdCB0aGUgYXZhaWxhYmxlIHNvdXJjZSBwbHVnaW5zIGkuZS4gcGx1Z2lucyBhdmFpbGFibGUgZm9yIC0tc291cmNlLgorICAgICIiIgorICAgIHBsdWdpbnMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5zKCkKKworICAgIGZvciBwbHVnaW4gaW4gcGx1Z2luczoKKyAgICAgICAgcHJpbnQgIiAgJXMiICUgcGx1Z2luCisKKworZGVmIHdpY19jcmVhdGUod2tzX2ZpbGUsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHNjcmlwdHNfcGF0aCwgaW1hZ2Vfb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgIGNvbXByZXNzb3IsIGRlYnVnKToKKyAgICAiIiJDcmVhdGUgaW1hZ2UKKworICAgIHdrc19maWxlIC0gdXNlci1kZWZpbmVkIE9FIGtpY2tzdGFydCBmaWxlCisgICAgcm9vdGZzX2RpciAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3MgL3Jvb3RmcyBkaXIKKyAgICBib290aW1nX2RpciAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3MgYm9vdCBhcnRpZmFjdHMgZGlyZWN0b3J5CisgICAga2VybmVsX2RpciAtIGFic29sdXRlIHBhdGggdG8gdGhlIGJ1aWxkJ3Mga2VybmVsIGRpcmVjdG9yeQorICAgIG5hdGl2ZV9zeXNyb290IC0gYWJzb2x1dGUgcGF0aCB0byB0aGUgYnVpbGQncyBuYXRpdmUgc3lzcm9vdHMgZGlyCisgICAgc2NyaXB0c19wYXRoIC0gYWJzb2x1dGUgcGF0aCB0byAvc2NyaXB0cyBkaXIKKyAgICBpbWFnZV9vdXRwdXRfZGlyIC0gZGlybmFtZSB0byBjcmVhdGUgZm9yIGltYWdlCisgICAgY29tcHJlc3NvciAtIGNvbXByZXNzb3IgdXRpbGl0eSB0byBjb21wcmVzcyB0aGUgaW1hZ2UKKworICAgIE5vcm1hbGx5LCB0aGUgdmFsdWVzIGZvciB0aGUgYnVpbGQgYXJ0aWZhY3RzIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZAorICAgIGJ5ICd3aWMgLWUnIGZyb20gdGhlIG91dHB1dCBvZiB0aGUgJ2JpdGJha2UgLWUnIGNvbW1hbmQgZ2l2ZW4gYW4KKyAgICBpbWFnZSBuYW1lIGUuZy4gJ2NvcmUtaW1hZ2UtbWluaW1hbCcgYW5kIGEgZ2l2ZW4gbWFjaGluZSBzZXQgaW4KKyAgICBsb2NhbC5jb25mLiAgSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgdmFyaWFibGVzIGdldCB0aGUgZm9sbG93aW5nCisgICAgdmFsdWVzIGZyb20gdGhlIG91dHB1dCBvZiAnYml0YmFrZSAtZSc6CisKKyAgICByb290ZnNfZGlyOiAgICAgICAgSU1BR0VfUk9PVEZTCisgICAga2VybmVsX2RpcjogICAgICAgIERFUExPWV9ESVJfSU1BR0UKKyAgICBuYXRpdmVfc3lzcm9vdDogICAgU1RBR0lOR19ESVJfTkFUSVZFCisKKyAgICBJbiB0aGUgYWJvdmUgY2FzZSwgYm9vdGltZ19kaXIgcmVtYWlucyB1bnNldCBhbmQgdGhlCisgICAgcGx1Z2luLXNwZWNpZmljIGltYWdlIGNyZWF0aW9uIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgdGhlCisgICAgYm9vdGltZyBhcnRpZmFjdHMuCisKKyAgICBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgdmFsdWVzIGFyZSBwYXNzZWQgaW4gZXhwbGljaXRseSBpLmUgJ3dpYyAtZScKKyAgICBpcyBub3QgdXNlZCBidXQgcmF0aGVyIHRoZSBpbmRpdmlkdWFsICd3aWMnIG9wdGlvbnMgYXJlIHVzZWQgdG8KKyAgICBleHBsaWNpdGx5IHNwZWNpZnkgdGhlc2UgdmFsdWVzLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgb2VfYnVpbGRkaXIgPSBvcy5lbnZpcm9uWyJCVUlMRERJUiJdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwcmludCAiQlVJTERESVIgbm90IGZvdW5kLCBleGl0aW5nLiAoRGlkIHlvdSBmb3JnZXQgdG8gc291cmNlIG9lLWluaXQtYnVpbGQtZW52PykiCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBkZWJ1ZzoKKyAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCdkZWJ1ZycpCisKKyAgICBjcm9iaiA9IGNyZWF0b3IuQ3JlYXRvcigpCisKKyAgICBjcm9iai5tYWluKFsiZGlyZWN0IiwgbmF0aXZlX3N5c3Jvb3QsIGtlcm5lbF9kaXIsIGJvb3RpbWdfZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgIHdrc19maWxlLCBpbWFnZV9vdXRwdXRfZGlyLCBvZV9idWlsZGRpciwgY29tcHJlc3NvciBvciAiIl0pCisKKyAgICBwcmludCAiXG5UaGUgaW1hZ2Uocykgd2VyZSBjcmVhdGVkIHVzaW5nIE9FIGtpY2tzdGFydCBmaWxlOlxuICAlcyIgJSB3a3NfZmlsZQorCisKK2RlZiB3aWNfbGlzdChhcmdzLCBzY3JpcHRzX3BhdGgpOgorICAgICIiIgorICAgIFByaW50IHRoZSBsaXN0IG9mIGltYWdlcyBvciBzb3VyY2UgcGx1Z2lucy4KKyAgICAiIiIKKyAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGFyZ3MgPT0gWyJpbWFnZXMiXToKKyAgICAgICAgbGlzdF9jYW5uZWRfaW1hZ2VzKHNjcmlwdHNfcGF0aCkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIGFyZ3MgPT0gWyJzb3VyY2UtcGx1Z2lucyJdOgorICAgICAgICBsaXN0X3NvdXJjZV9wbHVnaW5zKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbGlmIGxlbihhcmdzKSA9PSAyIGFuZCBhcmdzWzFdID09ICJoZWxwIjoKKyAgICAgICAgd2tzX2ZpbGUgPSBhcmdzWzBdCisgICAgICAgIGZ1bGxwYXRoID0gZmluZF9jYW5uZWRfaW1hZ2Uoc2NyaXB0c19wYXRoLCB3a3NfZmlsZSkKKyAgICAgICAgaWYgbm90IGZ1bGxwYXRoOgorICAgICAgICAgICAgcHJpbnQgIk5vIGltYWdlIG5hbWVkICVzIGZvdW5kLCBleGl0aW5nLiAiXAorICAgICAgICAgICAgICAgICAgIihVc2UgJ3dpYyBsaXN0IGltYWdlcycgdG8gbGlzdCBhdmFpbGFibGUgaW1hZ2VzLCBvciAiXAorICAgICAgICAgICAgICAgICAgInNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgT0Uga2lja3N0YXJ0ICgud2tzKSAiXAorICAgICAgICAgICAgICAgICAgImZpbGVuYW1lKVxuIiAlIHdrc19maWxlCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBsaXN0X2Nhbm5lZF9pbWFnZV9oZWxwKHNjcmlwdHNfcGF0aCwgZnVsbHBhdGgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5IGIvc2NyaXB0cy9saWIvd2ljL2hlbHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3NzhiNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9oZWxwLnB5CkBAIC0wLDAgKzEsNzQ3IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzb21lIGJhc2ljIGhlbHAgaW52b2NhdGlvbiBmdW5jdGlvbnMgYWxvbmcKKyMgd2l0aCB0aGUgYnVsayBvZiB0aGUgaGVscCB0b3BpYyB0ZXh0IGZvciB0aGUgT0UgQ29yZSBJbWFnZSBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgbG9nZ2luZworCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1nciwgUExVR0lOX1RZUEVTCisKK2RlZiBzdWJjb21tYW5kX2Vycm9yKGFyZ3MpOgorICAgIGxvZ2dpbmcuaW5mbygiaW52YWxpZCBzdWJjb21tYW5kICVzIiAlIGFyZ3NbMF0pCisKKworZGVmIGRpc3BsYXlfaGVscChzdWJjb21tYW5kLCBzdWJjb21tYW5kcyk6CisgICAgIiIiCisgICAgRGlzcGxheSBoZWxwIGZvciBzdWJjb21tYW5kLgorICAgICIiIgorICAgIGlmIHN1YmNvbW1hbmQgbm90IGluIHN1YmNvbW1hbmRzOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGhscCA9IHN1YmNvbW1hbmRzLmdldChzdWJjb21tYW5kLCBzdWJjb21tYW5kX2Vycm9yKVsyXQorICAgIGlmIGNhbGxhYmxlKGhscCk6CisgICAgICAgIGhscCA9IGhscCgpCisgICAgcGFnZXIgPSBzdWJwcm9jZXNzLlBvcGVuKCdsZXNzJywgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQorICAgIHBhZ2VyLmNvbW11bmljYXRlKGhscCkKKworICAgIHJldHVybiBUcnVlCisKKworZGVmIHdpY19oZWxwKGFyZ3MsIHVzYWdlX3N0ciwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIFN1YmNvbW1hbmQgaGVscCBkaXNwYXRjaGVyLgorICAgICIiIgorICAgIGlmIGxlbihhcmdzKSA9PSAxIG9yIG5vdCBkaXNwbGF5X2hlbHAoYXJnc1sxXSwgc3ViY29tbWFuZHMpOgorICAgICAgICBwcmludCB1c2FnZV9zdHIKKworCitkZWYgZ2V0X3dpY19wbHVnaW5zX2hlbHAoKToKKyAgICAiIiIKKyAgICBDb21iaW5lIHdpY19wbHVnaW5zX2hlbHAgd2l0aCB0aGUgaGVscCBmb3IgZXZlcnkga25vd24KKyAgICBzb3VyY2UgcGx1Z2luLgorICAgICIiIgorICAgIHJlc3VsdCA9IHdpY19wbHVnaW5zX2hlbHAKKyAgICBmb3IgcGx1Z2luX3R5cGUgaW4gUExVR0lOX1RZUEVTOgorICAgICAgICByZXN1bHQgKz0gJ1xuXG4lcyBQTFVHSU5TXG5cbicgJSBwbHVnaW5fdHlwZS51cHBlcigpCisgICAgICAgIGZvciBuYW1lLCBwbHVnaW4gaW4gcGx1Z2lubWdyLmdldF9wbHVnaW5zKHBsdWdpbl90eXBlKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAiXG4gJXMgcGx1Z2luOlxuIiAlIG5hbWUKKyAgICAgICAgICAgIGlmIHBsdWdpbi5fX2RvY19fOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwbHVnaW4uX19kb2NfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlxuICAgICVzIGlzIG1pc3NpbmcgZG9jc3RyaW5nXG4iICUgcGx1Z2luCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBpbnZva2Vfc3ViY29tbWFuZChhcmdzLCBwYXJzZXIsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpOgorICAgICIiIgorICAgIERpc3BhdGNoIHRvIHN1YmNvbW1hbmQgaGFuZGxlciBib3Jyb3dlZCBmcm9tIGNvbWJvLWxheWVyLgorICAgIFNob3VsZCB1c2UgYXJncGFyc2UsIGJ1dCBoYXMgdG8gd29yayBpbiAyLjYuCisgICAgIiIiCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIk5vIHN1YmNvbW1hbmQgc3BlY2lmaWVkLCBleGl0aW5nIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICByZXR1cm4gMQorICAgIGVsaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgIHdpY19oZWxwKGFyZ3MsIG1haW5fY29tbWFuZF91c2FnZSwgc3ViY29tbWFuZHMpCisgICAgZWxpZiBhcmdzWzBdIG5vdCBpbiBzdWJjb21tYW5kczoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiVW5zdXBwb3J0ZWQgc3ViY29tbWFuZCAlcywgZXhpdGluZ1xuIiAlIChhcmdzWzBdKSkKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICByZXR1cm4gMQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlID0gc3ViY29tbWFuZHMuZ2V0KGFyZ3NbMF0sIHN1YmNvbW1hbmRfZXJyb3IpWzFdCisgICAgICAgIHN1YmNvbW1hbmRzLmdldChhcmdzWzBdLCBzdWJjb21tYW5kX2Vycm9yKVswXShhcmdzWzE6XSwgdXNhZ2UpCisKKworIyMKKyMgd2ljIGhlbHAgYW5kIHVzYWdlIHN0cmluZ3MKKyMjCisKK3dpY191c2FnZSA9ICIiIgorCisgQ3JlYXRlIGEgY3VzdG9taXplZCBPcGVuRW1iZWRkZWQgaW1hZ2UKKworIHVzYWdlOiB3aWMgWy0tdmVyc2lvbl0gfCBbLS1oZWxwXSB8IFtDT01NQU5EIFtBUkdTXV0KKworIEN1cnJlbnQgJ3dpYycgY29tbWFuZHMgYXJlOgorICAgIGhlbHAgICAgICAgICAgICAgIFNob3cgaGVscCBmb3IgY29tbWFuZCBvciBvbmUgb2YgdGhlIHRvcGljcyAoc2VlIGJlbG93KQorICAgIGNyZWF0ZSAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKKyAgICBsaXN0ICAgICAgICAgICAgICBMaXN0IGF2YWlsYWJsZSBjYW5uZWQgaW1hZ2VzIGFuZCBzb3VyY2UgcGx1Z2lucworCisgSGVscCB0b3BpY3M6CisgICAgb3ZlcnZpZXcgICAgICAgICAgd2ljIG92ZXJ2aWV3IC0gR2VuZXJhbCBvdmVydmlldyBvZiB3aWMKKyAgICBwbHVnaW5zICAgICAgICAgICB3aWMgcGx1Z2lucyAtIE92ZXJ2aWV3IGFuZCBBUEkKKyAgICBraWNrc3RhcnQgICAgICAgICB3aWMga2lja3N0YXJ0IC0gd2ljIGtpY2tzdGFydCByZWZlcmVuY2UKKyIiIgorCit3aWNfaGVscF91c2FnZSA9ICIiIgorCisgdXNhZ2U6IHdpYyBoZWxwIDxzdWJjb21tYW5kPgorCisgVGhpcyBjb21tYW5kIGRpc3BsYXlzIGRldGFpbGVkIGhlbHAgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4KKyIiIgorCit3aWNfY3JlYXRlX3VzYWdlID0gIiIiCisKKyBDcmVhdGUgYSBuZXcgT3BlbkVtYmVkZGVkIGltYWdlCisKKyB1c2FnZTogd2ljIGNyZWF0ZSA8d2tzIGZpbGUgb3IgaW1hZ2UgbmFtZT4gWy1vIDxESVJOQU1FPiB8IC0tb3V0ZGlyIDxESVJOQU1FPl0KKyAgICAgICAgICAgIFstaSA8SlNPTiBQUk9QRVJUWSBGSUxFPiB8IC0taW5maWxlIDxKU09OIFBST1BFUlRZX0ZJTEU+XQorICAgICAgICAgICAgWy1lIHwgLS1pbWFnZS1uYW1lXSBbLXMsIC0tc2tpcC1idWlsZC1jaGVja10gWy1ELCAtLWRlYnVnXQorICAgICAgICAgICAgWy1yLCAtLXJvb3Rmcy1kaXJdIFstYiwgLS1ib290aW1nLWRpcl0KKyAgICAgICAgICAgIFstaywgLS1rZXJuZWwtZGlyXSBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCisKKyBUaGlzIGNvbW1hbmQgY3JlYXRlcyBhbiBPcGVuRW1iZWRkZWQgaW1hZ2UgYmFzZWQgb24gdGhlICdPRSBraWNrc3RhcnQKKyBjb21tYW5kcycgZm91bmQgaW4gdGhlIDx3a3MgZmlsZT4uCisKKyBUaGUgLW8gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBsYWNlIHRoZSBpbWFnZSBpbiBhIGRpcmVjdG9yeSB3aXRoIGEKKyBkaWZmZXJlbnQgbmFtZSBhbmQgbG9jYXRpb24uCisKKyBTZWUgJ3dpYyBoZWxwIGNyZWF0ZScgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorIiIiCisKK3dpY19jcmVhdGVfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIGNyZWF0ZSAtIENyZWF0ZSBhIG5ldyBPcGVuRW1iZWRkZWQgaW1hZ2UKKworU1lOT1BTSVMKKyAgICB3aWMgY3JlYXRlIDx3a3MgZmlsZSBvciBpbWFnZSBuYW1lPiBbLW8gPERJUk5BTUU+IHwgLS1vdXRkaXIgPERJUk5BTUU+XQorICAgICAgICBbLWUgfCAtLWltYWdlLW5hbWVdIFstcywgLS1za2lwLWJ1aWxkLWNoZWNrXSBbLUQsIC0tZGVidWddCisgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdCisgICAgICAgIFstaywgLS1rZXJuZWwtZGlyXSBbLW4sIC0tbmF0aXZlLXN5c3Jvb3RdIFstZiwgLS1idWlsZC1yb290ZnNdCisgICAgICAgIFstYywgLS1jb21wcmVzcy13aXRoXQorCitERVNDUklQVElPTgorICAgIFRoaXMgY29tbWFuZCBjcmVhdGVzIGFuIE9wZW5FbWJlZGRlZCBpbWFnZSBiYXNlZCBvbiB0aGUgJ09FCisgICAga2lja3N0YXJ0IGNvbW1hbmRzJyBmb3VuZCBpbiB0aGUgPHdrcyBmaWxlPi4KKworICAgIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdpYyBuZWVkcyB0byBrbm93IHRoZSBsb2NhdGlvbnMgb2YgdGhlCisgICAgdmFyaW91cyBidWlsZCBhcnRpZmFjdHMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGltYWdlLgorCisgICAgVXNlcnMgY2FuIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgYnVpbGQgYXJ0aWZhY3QgbG9jYXRpb25zIHVzaW5nCisgICAgdGhlIC1yLCAtYiwgLWssIGFuZCAtbiBvcHRpb25zLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzIG9uIHdoZXJlCisgICAgdGhlIGNvcnJlc3BvbmRpbmcgYXJ0aWZhY3RzIGFyZSB0eXBpY2FsbHkgZm91bmQgaW4gYSBub3JtYWwKKyAgICBPcGVuRW1iZWRkZWQgYnVpbGQuCisKKyAgICBBbHRlcm5hdGl2ZWx5LCB1c2VycyBjYW4gdXNlIHRoZSAtZSBvcHRpb24gdG8gaGF2ZSAnd2ljJyBkZXRlcm1pbmUKKyAgICB0aG9zZSBsb2NhdGlvbnMgZm9yIGEgZ2l2ZW4gaW1hZ2UuICBJZiB0aGUgLWUgb3B0aW9uIGlzIHVzZWQsIHRoZQorICAgIHVzZXIgbmVlZHMgdG8gaGF2ZSBzZXQgdGhlIGFwcHJvcHJpYXRlIE1BQ0hJTkUgdmFyaWFibGUgaW4KKyAgICBsb2NhbC5jb25mLCBhbmQgaGF2ZSBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudC4KKworICAgIFRoZSAtZSBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBpbWFnZSB0byB1c2UgdGhlCisgICAgYXJ0aWZhY3RzIGZyb20gZS5nLiBjb3JlLWltYWdlLXNhdG8uCisKKyAgICBUaGUgLXIgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgL3Jvb3RmcyBkaXIgdG8KKyAgICB1c2UgYXMgdGhlIC53a3Mgcm9vdGZzIHNvdXJjZS4KKworICAgIFRoZSAtYiBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZworICAgIHRoZSBib290IGFydGlmYWN0cyAoZS5nLiAvRUZJIG9yIC9zeXNsaW51eCBkaXJzKSB0byB1c2UgYXMgdGhlCisgICAgLndrcyBib290aW1nIHNvdXJjZS4KKworICAgIFRoZSAtayBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZworICAgIHRoZSBrZXJuZWwgdG8gdXNlIGluIHRoZSAud2tzIGJvb3RpbWcuCisKKyAgICBUaGUgLW4gb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QKKyAgICBjb250YWluaW5nIHRoZSB0b29scyB0byB1c2UgdG8gYnVpbGQgdGhlIGltYWdlLgorCisgICAgVGhlIC1mIG9wdGlvbiBpcyB1c2VkIHRvIGJ1aWxkIHJvb3RmcyBieSBydW5uaW5nICJiaXRiYWtlIDxpbWFnZT4iCisKKyAgICBUaGUgLXMgb3B0aW9uIGlzIHVzZWQgdG8gc2tpcCB0aGUgYnVpbGQgY2hlY2suICBUaGUgYnVpbGQgY2hlY2sgaXMKKyAgICBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciBoYXMKKyAgICBzb3VyY2VkIHRoZSBidWlsZCBlbnZpcm9ubWVudCBzbyB0aGF0IHRoZSAtZSBvcHRpb24gY2FuIG9wZXJhdGUKKyAgICBjb3JyZWN0bHkuICBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBidWlsZCBhcnRpZmFjdCBsb2NhdGlvbnMKKyAgICBleHBsaWNpdGx5LCAnd2ljJyBhc3N1bWVzIHRoZSB1c2VyIGtub3dzIHdoYXQgaGUgb3Igc2hlIGlzIGRvaW5nCisgICAgYW5kIHNraXBzIHRoZSBidWlsZCBjaGVjay4KKworICAgIFRoZSAtRCBvcHRpb24gaXMgdXNlZCB0byBkaXNwbGF5IGRlYnVnIGluZm9ybWF0aW9uIGRldGFpbGluZworICAgIGV4YWN0bHkgd2hhdCBoYXBwZW5zIGJlaGluZCB0aGUgc2NlbmVzIHdoZW4gYSBjcmVhdGUgcmVxdWVzdCBpcworICAgIGZ1bGZpbGxlZCAob3Igbm90LCBhcyB0aGUgY2FzZSBtYXkgYmUpLiAgSXQgZW51bWVyYXRlcyBhbmQKKyAgICBkaXNwbGF5cyB0aGUgY29tbWFuZCBzZXF1ZW5jZSB1c2VkLCBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGFueQorICAgIGJ1ZyByZXBvcnQgZGVzY3JpYmluZyB1bmV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICBXaGVuICd3aWMgLWUnIGlzIHVzZWQsIHRoZSBsb2NhdGlvbnMgZm9yIHRoZSBidWlsZCBhcnRpZmFjdHMKKyAgICB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgJ3dpYyAtZScgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSAnYml0YmFrZQorICAgIC1lJyBjb21tYW5kIGdpdmVuIGFuIGltYWdlIG5hbWUgZS5nLiAnY29yZS1pbWFnZS1taW5pbWFsJyBhbmQgYQorICAgIGdpdmVuIG1hY2hpbmUgc2V0IGluIGxvY2FsLmNvbmYuICBJbiB0aGF0IGNhc2UsIHRoZSBpbWFnZSBpcworICAgIGNyZWF0ZWQgYXMgaWYgdGhlIGZvbGxvd2luZyAnYml0YmFrZSAtZScgdmFyaWFibGVzIHdlcmUgdXNlZDoKKworICAgIC1yOiAgICAgICAgSU1BR0VfUk9PVEZTCisgICAgLWs6ICAgICAgICBTVEFHSU5HX0tFUk5FTF9ESVIKKyAgICAtbjogICAgICAgIFNUQUdJTkdfRElSX05BVElWRQorICAgIC1iOiAgICAgICAgZW1wdHkgKHBsdWdpbi1zcGVjaWZpYyBoYW5kbGVycyBtdXN0IGRldGVybWluZSB0aGlzKQorCisgICAgSWYgJ3dpYyAtZScgaXMgbm90IHVzZWQsIHRoZSB1c2VyIG5lZWRzIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUKKyAgICB2YWx1ZSBmb3IgLWIgKGFzIHdlbGwgYXMgLXIsIC1rLCBhbmQgLW4pLgorCisgICAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgaW1hZ2UgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhCisgICAgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgVGhlIC1jIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgY29tcHJlc3NvciB1dGlsaXR5IHRvIGNvbXByZXNzCisgICAgYW4gaW1hZ2UuIGd6aXAsIGJ6aXAyIGFuZCB4eiBjb21wcmVzc29ycyBhcmUgc3VwcG9ydGVkLgorIiIiCisKK3dpY19saXN0X3VzYWdlID0gIiIiCisKKyBMaXN0IGF2YWlsYWJsZSBPcGVuRW1iZWRkZWQgaW1hZ2VzIGFuZCBzb3VyY2UgcGx1Z2lucworCisgdXNhZ2U6IHdpYyBsaXN0IGltYWdlcworICAgICAgICB3aWMgbGlzdCA8aW1hZ2U+IGhlbHAKKyAgICAgICAgd2ljIGxpc3Qgc291cmNlLXBsdWdpbnMKKworIFRoaXMgY29tbWFuZCBlbnVtZXJhdGVzIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGNhbm5lZCBpbWFnZXMgYXMgd2VsbCBhcworIGhlbHAgZm9yIHRob3NlIGltYWdlcy4gIEl0IGFsc28gY2FuIGJlIHVzZWQgdG8gbGlzdCBvZiBhdmFpbGFibGUgc291cmNlCisgcGx1Z2lucy4KKworIFRoZSBmaXJzdCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBhdmFpbGFibGUgJ2Nhbm5lZCcgaW1hZ2VzLgorCisgVGhlIHNlY29uZCBmb3JtIGxpc3RzIHRoZSBkZXRhaWxlZCBoZWxwIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljCisgJ2Nhbm5lZCcgaW1hZ2UuCisKKyBUaGUgdGhpcmQgZm9ybSBlbnVtZXJhdGVzIGFsbCB0aGUgYXZhaWxhYmxlIC0tc291cmNlcyAoc291cmNlCisgcGx1Z2lucykuCisKKyBTZWUgJ3dpYyBoZWxwIGxpc3QnIGZvciBtb3JlIGRldGFpbHMuCisiIiIKKword2ljX2xpc3RfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIGxpc3QgLSBMaXN0IGF2YWlsYWJsZSBPcGVuRW1iZWRkZWQgaW1hZ2VzIGFuZCBzb3VyY2UgcGx1Z2lucworCitTWU5PUFNJUworICAgIHdpYyBsaXN0IGltYWdlcworICAgIHdpYyBsaXN0IDxpbWFnZT4gaGVscAorICAgIHdpYyBsaXN0IHNvdXJjZS1wbHVnaW5zCisKK0RFU0NSSVBUSU9OCisgICAgVGhpcyBjb21tYW5kIGVudW1lcmF0ZXMgdGhlIHNldCBvZiBhdmFpbGFibGUgY2FubmVkIGltYWdlcyBhcyB3ZWxsCisgICAgYXMgaGVscCBmb3IgdGhvc2UgaW1hZ2VzLiAgSXQgYWxzbyBjYW4gYmUgdXNlZCB0byBsaXN0IGF2YWlsYWJsZQorICAgIHNvdXJjZSBwbHVnaW5zLgorCisgICAgVGhlIGZpcnN0IGZvcm0gZW51bWVyYXRlcyBhbGwgdGhlIGF2YWlsYWJsZSAnY2FubmVkJyBpbWFnZXMuCisgICAgVGhlc2UgYXJlIGFjdHVhbGx5IGp1c3QgdGhlIHNldCBvZiAud2tzIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vdmVkCisgICAgaW50byB0aGUgL3NjcmlwdHMvbGliL3dpYy9jYW5uZWQtd2tzIGRpcmVjdG9yeSkuCisKKyAgICBUaGUgc2Vjb25kIGZvcm0gbGlzdHMgdGhlIGRldGFpbGVkIGhlbHAgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMKKyAgICAnY2FubmVkJyBpbWFnZS4KKworICAgIFRoZSB0aGlyZCBmb3JtIGVudW1lcmF0ZXMgYWxsIHRoZSBhdmFpbGFibGUgLS1zb3VyY2VzIChzb3VyY2UKKyAgICBwbHVnaW5zKS4gIFRoZSBjb250ZW50cyBvZiBhIGdpdmVuIHBhcnRpdGlvbiBhcmUgZHJpdmVuIGJ5IGNvZGUKKyAgICBkZWZpbmVkIGluICdzb3VyY2UgcGx1Z2lucycuICBVc2VycyBzcGVjaWZ5IGEgc3BlY2lmaWMgcGx1Z2luIHZpYQorICAgIHRoZSAtLXNvdXJjZSBwYXJhbWV0ZXIgb2YgdGhlIHBhcnRpdGlvbiAud2tzIGNvbW1hbmQuICBOb3JtYWxseQorICAgIHRoaXMgaXMgdGhlICdyb290ZnMnIHBsdWdpbiBidXQgY2FuIGJlIGFueSBvZiB0aGUgbW9yZSBzcGVjaWFsaXplZAorICAgIHNvdXJjZXMgbGlzdGVkIGJ5IHRoZSAnbGlzdCBzb3VyY2UtcGx1Z2lucycgY29tbWFuZC4gIFVzZXJzIGNhbgorICAgIGFsc28gYWRkIHRoZWlyIG93biBzb3VyY2UgcGx1Z2lucyAtIHNlZSAnd2ljIGhlbHAgcGx1Z2lucycgZm9yCisgICAgZGV0YWlscy4KKyIiIgorCit3aWNfcGx1Z2luc19oZWxwID0gIiIiCisKK05BTUUKKyAgICB3aWMgcGx1Z2lucyAtIE92ZXJ2aWV3IGFuZCBBUEkKKworREVTQ1JJUFRJT04KKyAgICBwbHVnaW5zIGFsbG93IHdpYyBmdW5jdGlvbmFsaXR5IHRvIGJlIGV4dGVuZGVkIGFuZCBzcGVjaWFsaXplZCBieQorICAgIHVzZXJzLiAgVGhpcyBzZWN0aW9uIGRvY3VtZW50cyB0aGUgcGx1Z2luIGludGVyZmFjZSwgd2hpY2ggaXMKKyAgICBjdXJyZW50bHkgcmVzdHJpY3RlZCB0byAnc291cmNlJyBwbHVnaW5zLgorCisgICAgJ1NvdXJjZScgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIHRvIGN1c3RvbWl6ZSB2YXJpb3VzIGFzcGVjdHMKKyAgICBvZiB0aGUgaW1hZ2UgZ2VuZXJhdGlvbiBwcm9jZXNzIGluIHdpYywgbWFpbmx5IHRoZSBjb250ZW50cyBvZgorICAgIHBhcnRpdGlvbnMuCisKKyAgICBTb3VyY2UgcGx1Z2lucyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHZhbHVlcyBzcGVjaWZpZWQgaW4KKyAgICAud2tzIGZpbGVzIHVzaW5nIHRoZSAtLXNvdXJjZSBrZXl3b3JkIHRvIGEgcGFydGljdWxhciBwbHVnaW4KKyAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IHBvcHVsYXRlcyBhIGNvcnJlc3BvbmRpbmcgcGFydGl0aW9uLgorCisgICAgQSBzb3VyY2UgcGx1Z2luIGlzIGNyZWF0ZWQgYXMgYSBzdWJjbGFzcyBvZiBTb3VyY2VQbHVnaW4gKHNlZQorICAgIHNjcmlwdHMvbGliL3dpYy9wbHVnaW5iYXNlLnB5KSBhbmQgdGhlIHBsdWdpbiBmaWxlIGNvbnRhaW5pbmcgaXQKKyAgICBpcyBhZGRlZCB0byBzY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvIHRvIG1ha2UgdGhlIHBsdWdpbgorICAgIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgd2ljIGltcGxlbWVudGF0aW9uLgorCisgICAgU291cmNlIHBsdWdpbnMgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgYW5kIGFkZGVkIGJ5IGV4dGVybmFsCisgICAgbGF5ZXJzIC0gYW55IHBsdWdpbnMgZm91bmQgaW4gYSBzY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvCisgICAgZGlyZWN0b3J5IGluIGFuIGV4dGVybmFsIGxheWVyIHdpbGwgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZS4KKworICAgIFdoZW4gdGhlIHdpYyBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBpbnZva2UgYSBwYXJ0aXRpb24tc3BlY2lmaWMKKyAgICBpbXBsZW1lbnRhdGlvbiwgaXQgbG9va3MgZm9yIHRoZSBwbHVnaW4gdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcworICAgIHRoZSAtLXNvdXJjZSBwYXJhbSBnaXZlbiB0byB0aGF0IHBhcnRpdGlvbi4gIEZvciBleGFtcGxlLCBpZiB0aGUKKyAgICBwYXJ0aXRpb24gaXMgc2V0IHVwIGxpa2UgdGhpczoKKworICAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAgIC4uLgorCisgICAgdGhlbiB0aGUgbWV0aG9kcyBkZWZpbmVkIGFzIGNsYXNzIG1lbWJlcnMgb2YgdGhlIHBsdWdpbiBoYXZpbmcgdGhlCisgICAgbWF0Y2hpbmcgYm9vdGltZy1wY2Jpb3MgLm5hbWUgY2xhc3MgbWVtYmVyIHdvdWxkIGJlIHVzZWQuCisKKyAgICBUbyBiZSBtb3JlIGNvbmNyZXRlLCBoZXJlJ3MgdGhlIHBsdWdpbiBkZWZpbml0aW9uIHRoYXQgd291bGQgbWF0Y2gKKyAgICBhICctLXNvdXJjZSBib290aW1nLXBjYmlvcycgdXNhZ2UsIGFsb25nIHdpdGggYW4gZXhhbXBsZSBtZXRob2QKKyAgICB0aGF0IHdvdWxkIGJlIGNhbGxlZCBieSB0aGUgd2ljIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgbmVlZGVkIHRvCisgICAgaW52b2tlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHBhcnRpdGlvbi1wcmVwYXJhdGlvbiBmdW5jdGlvbjoKKworICAgIGNsYXNzIEJvb3RpbWdQY2Jpb3NQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAgICAgbmFtZSA9ICdib290aW1nLXBjYmlvcycKKworICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oc2VsZiwgcGFydCwgLi4uKQorCisgICAgSWYgdGhlIHN1YmNsYXNzIGl0c2VsZiBkb2Vzbid0IGltcGxlbWVudCBhIGZ1bmN0aW9uLCBhICdkZWZhdWx0JworICAgIHZlcnNpb24gaW4gYSBzdXBlcmNsYXNzIHdpbGwgYmUgbG9jYXRlZCBhbmQgdXNlZCwgd2hpY2ggaXMgd2h5IGFsbAorICAgIHBsdWdpbnMgbXVzdCBiZSBkZXJpdmVkIGZyb20gU291cmNlUGx1Z2luLgorCisgICAgVGhlIFNvdXJjZVBsdWdpbiBjbGFzcyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcywgd2hpY2ggaXMgdGhlCisgICAgY3VycmVudCBzZXQgb2YgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZC9vdmVycmlkZGVuIGJ5CisgICAgLS1zb3VyY2UgcGx1Z2lucy4gIEFueSBtZXRob2RzIG5vdCBpbXBsZW1lbnRlZCBieSBhIFNvdXJjZVBsdWdpbgorICAgIHN1YmNsYXNzIGluaGVyaXQgdGhlIGltcGxlbWVudGF0aW9ucyBwcmVzZW50IGluIHRoZSBTb3VyY2VQbHVnaW4KKyAgICBjbGFzcyAoc2VlIHRoZSBTb3VyY2VQbHVnaW4gc291cmNlIGZvciBkZXRhaWxzKToKKworICAgICAgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKQorICAgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYQorICAgICAgICAgIHBhcnRpdGlvbi4gSW4gb3RoZXIgd29yZHMsIGl0ICdwcmVwYXJlcycgdGhlIGZpbmFsIHBhcnRpdGlvbgorICAgICAgICAgIGltYWdlIHdoaWNoIHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGRpc2sgaW1hZ2UuCisKKyAgICAgIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oKQorICAgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgdHlwaWNhbGx5IHVzZWQgdG8KKyAgICAgICAgICBjcmVhdGUgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgcGFydGl0aW9uLCBmb3IKKyAgICAgICAgICBleGFtcGxlIHN5c2xpbnV4IG9yIGdydWIgY29uZmlnIGZpbGVzLgorCisgICAgICBkb19pbnN0YWxsX2Rpc2soKQorICAgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZAorICAgICAgICAgIGludG8gYSBkaXNrIGltYWdlLiAgVGhpcyBwcm92aWRlcyBhIGhvb2sgdG8gYWxsb3cKKyAgICAgICAgICBmaW5hbGl6YXRpb24gb2YgYSBkaXNrIGltYWdlLCBmb3IgZXhhbXBsZSB0byB3cml0ZSBhbiBNQlIgdG8KKyAgICAgICAgICBpdC4KKworICAgICAgZG9fc3RhZ2VfcGFydGl0aW9uKCkKKyAgICAgICAgICBTcGVjaWFsIGNvbnRlbnQtc3RhZ2luZyBob29rIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgICBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBub3JtYWxseSBlbXB0eS4KKworICAgICAgICAgIFR5cGljYWxseSwgYSBwYXJ0aXRpb24gd2lsbCBqdXN0IHVzZSB0aGUgcGFzc2VkLWluCisgICAgICAgICAgcGFyYW1ldGVycywgZm9yIGV4YW1wbGUgdGhlIHVubW9kaWZpZWQgdmFsdWUgb2YgYm9vdGltZ19kaXIuCisgICAgICAgICAgSW4gc29tZSBjYXNlcyBob3dldmVyLCB0aGluZ3MgbWF5IG5lZWQgdG8gYmUgbW9yZSB0YWlsb3JlZC4KKyAgICAgICAgICBBcyBhbiBleGFtcGxlLCBjZXJ0YWluIGZpbGVzIG1heSBhZGRpdGlvbmFsbHkgbmVlZCB0byBiZQorICAgICAgICAgIHRha2UgZnJvbSBib290aW1nX2RpciArIC9ib290LiAgVGhpcyBob29rIGFsbG93cyB0aG9zZSBmaWxlcworICAgICAgICAgIHRvIGJlIHN0YWdlZCBpbiBhIGN1c3RvbWl6ZWQgZmFzaGlvbi4gIE5vdGUgdGhhdAorICAgICAgICAgIGdldF9iaXRiYWtlX3ZhcigpIGFsbG93cyB5b3UgdG8gYWNjZXNzIG5vbi1zdGFuZGFyZAorICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IHlvdSBtaWdodCB3YW50IHRvIHVzZSBmb3IgdGhlc2UgdHlwZXMgb2YKKyAgICAgICAgICBzaXR1YXRpb25zLgorCisgICAgVGhpcyBzY2hlbWUgaXMgZXh0ZW5zaWJsZSAtIGFkZGluZyBtb3JlIGhvb2tzIGlzIGEgc2ltcGxlIG1hdHRlcgorICAgIG9mIGFkZGluZyBtb3JlIHBsdWdpbiBtZXRob2RzIHRvIFNvdXJjZVBsdWdpbiBhbmQgZGVyaXZlZCBjbGFzc2VzLgorICAgIFRoZSBjb2RlIHRoYXQgdGhlbiBuZWVkcyB0byBjYWxsIHRoZSBwbHVnaW4gbWV0aG9kcyB1c2VzCisgICAgcGx1Z2luLmdldF9zb3VyY2VfcGx1Z2luX21ldGhvZHMoKSB0byBmaW5kIHRoZSBtZXRob2QocykgbmVlZGVkIGJ5CisgICAgdGhlIGNhbGw7IHRoaXMgaXMgZG9uZSBieSBmaWxsaW5nIHVwIGEgZGljdCB3aXRoIGtleXMgY29udGFpbmluZworICAgIHRoZSBtZXRob2QgbmFtZXMgb2YgaW50ZXJlc3QgLSBvbiBzdWNjZXNzLCB0aGVzZSB3aWxsIGJlIGZpbGxlZCBpbgorICAgIHdpdGggdGhlIGFjdHVhbCBtZXRob2RzLiBQbGVhc2Ugc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICBleGFtcGxlcyBhbmQgZGV0YWlscy4KKyIiIgorCit3aWNfb3ZlcnZpZXdfaGVscCA9ICIiIgorCitOQU1FCisgICAgd2ljIG92ZXJ2aWV3IC0gR2VuZXJhbCBvdmVydmlldyBvZiB3aWMKKworREVTQ1JJUFRJT04KKyAgICBUaGUgJ3dpYycgY29tbWFuZCBnZW5lcmF0ZXMgcGFydGl0aW9uZWQgaW1hZ2VzIGZyb20gZXhpc3RpbmcKKyAgICBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3RzLiAgSW1hZ2UgZ2VuZXJhdGlvbiBpcyBkcml2ZW4gYnkKKyAgICBwYXJ0aXRpb25pbmcgY29tbWFuZHMgY29udGFpbmVkIGluIGFuICdPcGVuZW1iZWRkZWQga2lja3N0YXJ0JworICAgICgud2tzKSBmaWxlIChzZWUgJ3dpYyBoZWxwIGtpY2tzdGFydCcpIHNwZWNpZmllZCBlaXRoZXIgZGlyZWN0bHkKKyAgICBvbiB0aGUgY29tbWFuZC1saW5lIG9yIGFzIG9uZSBvZiBhIHNlbGVjdGlvbiBvZiBjYW5uZWQgLndrcyBmaWxlcworICAgIChzZWUgJ3dpYyBsaXN0IGltYWdlcycpLiAgV2hlbiBhcHBsaWVkIHRvIGEgZ2l2ZW4gc2V0IG9mIGJ1aWxkCisgICAgYXJ0aWZhY3RzLCB0aGUgcmVzdWx0IGlzIGFuIGltYWdlIG9yIHNldCBvZiBpbWFnZXMgdGhhdCBjYW4gYmUKKyAgICBkaXJlY3RseSB3cml0dGVuIG9udG8gbWVkaWEgYW5kIHVzZWQgb24gYSBwYXJ0aWN1bGFyIHN5c3RlbS4KKworICAgIFRoZSAnd2ljJyBjb21tYW5kIGFuZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgaXQncyBiYXNlZCBvbiBpcyBieQorICAgIGRlZmluaXRpb24gaW5jb21wbGV0ZSAtIGl0cyBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBnZW5lcmF0aW9uIG9mCisgICAgY3VzdG9taXplZCBpbWFnZXMsIGFuZCBhcyBzdWNoIHdhcyBkZXNpZ25lZCB0byBiZSBjb21wbGV0ZWx5CisgICAgZXh0ZW5zaWJsZSB2aWEgYSBwbHVnaW4gaW50ZXJmYWNlIChzZWUgJ3dpYyBoZWxwIHBsdWdpbnMnKS4KKworICBCYWNrZ3JvdW5kIGFuZCBNb3RpdmF0aW9uCisKKyAgICB3aWMgaXMgbWVhbnQgdG8gYmUgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IHN0YW5kYWxvbmUgdXRpbGl0eQorICAgIHRoYXQgaW5pdGlhbGx5IHByb3ZpZGVzIGVhc2llci10by11c2UgYW5kIG1vcmUgZmxleGlibGUKKyAgICByZXBsYWNlbWVudHMgZm9yIGEgY291cGxlIGJpdHMgb2YgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBpbgorICAgIG9lLWNvcmU6IGRpcmVjdGRpc2suYmJjbGFzcyBhbmQgbWtlZmlkaXNrLnNoLiAgVGhlIGRpZmZlcmVuY2UKKyAgICBiZXR3ZWVuIHdpYyBhbmQgdGhvc2UgZXhhbXBsZXMgaXMgdGhhdCB3aXRoIHdpYyB0aGUgZnVuY3Rpb25hbGl0eQorICAgIG9mIHRob3NlIHNjcmlwdHMgaXMgaW1wbGVtZW50ZWQgYnkgYSBnZW5lcmFsLXB1cnBvc2UgcGFydGl0aW9uaW5nCisgICAgJ2xhbmd1YWdlJyBiYXNlZCBvbiBSZWRoYXQga2lja3N0YXJ0IHN5bnRheCkuCisKKyAgICBUaGUgaW5pdGlhbCBtb3RpdmF0aW9uIGFuZCBkZXNpZ24gY29uc2lkZXJhdGlvbnMgdGhhdCBsZWFkIHRvIHRoZQorICAgIGN1cnJlbnQgdG9vbCBhcmUgZGVzY3JpYmVkIGV4aGF1c3RpdmVseSBpbiBZb2N0byBCdWcgIzM4NDcKKyAgICAoaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQ3KS4KKworICBJbXBsZW1lbnRhdGlvbiBhbmQgRXhhbXBsZXMKKworICAgIHdpYyBjYW4gYmUgdXNlZCBpbiB0d28gZGlmZmVyZW50IG1vZGVzLCBkZXBlbmRpbmcgb24gaG93IG11Y2gKKyAgICBjb250cm9sIHRoZSB1c2VyIG5lZWRzIGluIHNwZWNpZnlpbmcgdGhlIE9wZW5lbWJlZGRlZCBidWlsZAorICAgIGFydGlmYWN0cyB0aGF0IHdpbGwgYmUgdXNlZCBpbiBjcmVhdGluZyB0aGUgaW1hZ2U6ICdyYXcnIGFuZAorICAgICdjb29rZWQnLgorCisgICAgSWYgdXNlZCBpbiAncmF3JyBtb2RlLCBhcnRpZmFjdHMgYXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHZpYQorICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgKHNlZSBleGFtcGxlIGJlbG93KS4KKworICAgIFRoZSBtb3JlIGVhc2lseSB1c2FibGUgJ2Nvb2tlZCcgbW9kZSB1c2VzIHRoZSBjdXJyZW50IE1BQ0hJTkUKKyAgICBzZXR0aW5nIGFuZCBhIHNwZWNpZmllZCBpbWFnZSBuYW1lIHRvIGF1dG9tYXRpY2FsbHkgbG9jYXRlIHRoZQorICAgIGFydGlmYWN0cyB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2UuCisKKyAgICBPRSBraWNrc3RhcnQgZmlsZXMgKC53a3MpIGNhbiBvZiBjb3Vyc2UgYmUgc3BlY2lmaWVkIGRpcmVjdGx5IG9uCisgICAgdGhlIGNvbW1hbmQtbGluZSwgYnV0IHRoZSB1c2VyIGNhbiBhbHNvIGNob29zZSBmcm9tIGEgc2V0IG9mCisgICAgJ2Nhbm5lZCcgLndrcyBmaWxlcyBhdmFpbGFibGUgdmlhIHRoZSAnd2ljIGxpc3QgaW1hZ2VzJyBjb21tYW5kCisgICAgKGV4YW1wbGUgYmVsb3cpLgorCisgICAgSW4gYW55IGNhc2UsIHRoZSBwcmVyZXF1aXNpdGUgZm9yIGdlbmVyYXRpbmcgYW55IGltYWdlIGlzIHRvIGhhdmUKKyAgICB0aGUgYnVpbGQgYXJ0aWZhY3RzIGFscmVhZHkgYXZhaWxhYmxlLiAgVGhlIGJlbG93IGV4YW1wbGVzIGFzc3VtZQorICAgIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGJ1aWxkIGEgJ2NvcmUtaW1hZ2UtbWluaW1hbCcgZm9yIGEgc3BlY2lmaWMKKyAgICBtYWNoaW5lIChmdXR1cmUgdmVyc2lvbnMgd29uJ3QgcmVxdWlyZSB0aGlzIHJlZHVuZGFudCBzdGVwLCBidXQKKyAgICBmb3Igbm93IHRoYXQncyB0eXBpY2FsbHkgaG93IGJ1aWxkIGFydGlmYWN0cyBnZXQgZ2VuZXJhdGVkKS4KKworICAgIFRoZSBvdGhlciBwcmVyZXF1aXNpdGUgaXMgdG8gc291cmNlIHRoZSBidWlsZCBlbnZpcm9ubWVudDoKKworICAgICAgJCBzb3VyY2Ugb2UtaW5pdC1idWlsZC1lbnYKKworICAgIFRvIHN0YXJ0IG91dCB3aXRoLCB3ZSdsbCBnZW5lcmF0ZSBhbiBpbWFnZSBmcm9tIG9uZSBvZiB0aGUgY2FubmVkCisgICAgLndrcyBmaWxlcy4gIFRoZSBmb2xsb3dpbmcgZ2VuZXJhdGVzIGEgbGlzdCBvZiBhdmFpbGFpbGFibGUKKyAgICBpbWFnZXM6CisKKyAgICAgICQgd2ljIGxpc3QgaW1hZ2VzCisgICAgICAgIG1rZWZpZGlzayAgICAgICAgICAgICBDcmVhdGUgYW4gRUZJIGRpc2sgaW1hZ2UKKyAgICAgICAgZGlyZWN0ZGlzayAgICAgICAgICAgIENyZWF0ZSBhICdwY2Jpb3MnIGRpcmVjdCBkaXNrIGltYWdlCisKKyAgICBZb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFueSBvZiB0aGUgYXZhaWxhYmxlIGltYWdlcyBieQorICAgIHR5cGluZyAnd2ljIGxpc3QgeHh4IGhlbHAnLCB3aGVyZSAneHh4JyBpcyBvbmUgb2YgdGhlIGltYWdlIG5hbWVzOgorCisgICAgICAkIHdpYyBsaXN0IG1rZWZpZGlzayBoZWxwCisKKyAgICBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlciBjYW4gZGlyZWN0bHkgZGQKKyAgICB0byBib290IG1lZGlhLgorCisgICAgQXQgYW55IHRpbWUsIHlvdSBjYW4gZ2V0IGhlbHAgb24gdGhlICd3aWMnIGNvbW1hbmQgb3IgYW55CisgICAgc3ViY29tbWFuZCAoY3VycmVudGx5ICdsaXN0JyBhbmQgJ2NyZWF0ZScpLiAgRm9yIGluc3RhbmNlLCB0byBnZXQKKyAgICB0aGUgZGVzY3JpcHRpb24gb2YgJ3dpYyBjcmVhdGUnIGNvbW1hbmQgYW5kIGl0cyBwYXJhbWV0ZXJzOgorCisgICAgICAkIHdpYyBjcmVhdGUKKworICAgICAgIFVzYWdlOgorCisgICAgICAgQ3JlYXRlIGEgbmV3IE9wZW5FbWJlZGRlZCBpbWFnZQorCisgICAgICAgdXNhZ2U6IHdpYyBjcmVhdGUgPHdrcyBmaWxlIG9yIGltYWdlIG5hbWU+IFstbyA8RElSTkFNRT4gfCAuLi5dCisgICAgICAgICAgICBbLWkgPEpTT04gUFJPUEVSVFkgRklMRT4gfCAtLWluZmlsZSA8SlNPTiBQUk9QRVJUWV9GSUxFPl0KKyAgICAgICAgICAgIFstZSB8IC0taW1hZ2UtbmFtZV0gWy1zLCAtLXNraXAtYnVpbGQtY2hlY2tdIFstRCwgLS1kZWJ1Z10KKyAgICAgICAgICAgIFstciwgLS1yb290ZnMtZGlyXSBbLWIsIC0tYm9vdGltZy1kaXJdIFstaywgLS1rZXJuZWwtZGlyXQorICAgICAgICAgICAgWy1uLCAtLW5hdGl2ZS1zeXNyb290XSBbLWYsIC0tYnVpbGQtcm9vdGZzXQorCisgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gT3BlbkVtYmVkZGVkIGltYWdlIGJhc2VkIG9uIHRoZSAnT0UKKyAgICAgICBraWNrc3RhcnQgY29tbWFuZHMnIGZvdW5kIGluIHRoZSA8d2tzIGZpbGU+LgorCisgICAgICAgVGhlIC1vIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwbGFjZSB0aGUgaW1hZ2UgaW4gYSBkaXJlY3RvcnkKKyAgICAgICB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uLgorCisgICAgICAgU2VlICd3aWMgaGVscCBjcmVhdGUnIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucy4KKyAgICAgICAuLi4KKworICAgIEFzIG1lbnRpb25lZCBpbiB0aGUgY29tbWFuZCwgeW91IGNhbiBnZXQgZXZlbiBtb3JlIGRldGFpbGVkCisgICAgaW5mb3JtYXRpb24gYnkgYWRkaW5nICdoZWxwJyB0byB0aGUgYWJvdmU6CisKKyAgICAgICQgd2ljIGhlbHAgY3JlYXRlCisKKyAgICBTbywgdGhlIGVhc2llc3Qgd2F5IHRvIGNyZWF0ZSBhbiBpbWFnZSBpcyB0byB1c2UgdGhlIC1lIG9wdGlvbgorICAgIHdpdGggYSBjYW5uZWQgLndrcyBmaWxlLiAgVG8gdXNlIHRoZSAtZSBvcHRpb24sIHlvdSBuZWVkIHRvCisgICAgc3BlY2lmeSB0aGUgaW1hZ2UgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYXJ0aWZhY3RzIGFuZCB5b3UgYWN0dWFsbHkKKyAgICBuZWVkIHRvIGhhdmUgdGhlIE1BQ0hJTkUgdXNlZCB0byBidWlsZCB0aGVtIHNwZWNpZmllZCBpbiB5b3VyCisgICAgbG9jYWwuY29uZiAodGhlc2UgcmVxdWlyZW1lbnRzIGFyZW4ndCBuZWNlc3NhcnkgaWYgeW91IGFyZW4ndAorICAgIHVzaW5nIHRoZSAtZSBvcHRpb25zLikgIEJlbG93LCB3ZSBnZW5lcmF0ZSBhIGRpcmVjdGRpc2sgaW1hZ2UsCisgICAgcG9pbnRpbmcgdGhlIHByb2Nlc3MgYXQgdGhlIGNvcmUtaW1hZ2UtbWluaW1hbCBhcnRpZmFjdHMgZm9yIHRoZQorICAgIGN1cnJlbnQgTUFDSElORToKKworICAgICAgJCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgLWUgY29yZS1pbWFnZS1taW5pbWFsCisKKyAgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgICBEb25lLgorCisgICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL2RpcmVjdGRpc2stMjAxMzA5MjUyMzUwLXNkYS5kaXJlY3QKKworICAgICAgVGhlIGZvbGxvd2luZyBidWlsZCBhcnRpZmFjdHMgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgaW1hZ2Uocyk6CisKKyAgICAgIFJPT1RGU19ESVI6ICAgICAgLi4uCisgICAgICBCT09USU1HX0RJUjogICAgIC4uLgorICAgICAgS0VSTkVMX0RJUjogICAgICAuLi4KKyAgICAgIE5BVElWRV9TWVNST09UOiAgLi4uCisKKyAgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgICAgIC4uLi9zY3JpcHRzL2xpYi93aWMvY2FubmVkLXdrcy9kaXJlY3RkaXNrLndrcworCisgICAgVGhlIG91dHB1dCBzaG93cyB0aGUgbmFtZSBhbmQgbG9jYXRpb24gb2YgdGhlIGltYWdlIGNyZWF0ZWQsIGFuZAorICAgIHNvIHRoYXQgeW91IGtub3cgZXhhY3RseSB3aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbWFnZSwgZWFjaAorICAgIG9mIHRoZSBhcnRpZmFjdHMgYW5kIHRoZSBraWNrc3RhcnQgZmlsZSB1c2VkLgorCisgICAgU2ltaWxhcmx5LCB5b3UgY2FuIGNyZWF0ZSBhICdta2VmaWRpc2snIGltYWdlIGluIHRoZSBzYW1lIHdheQorICAgIChub3RpY2UgdGhhdCB0aGlzIGV4YW1wbGUgdXNlcyBhIGRpZmZlcmVudCBtYWNoaW5lIC0gYmVjYXVzZSBpdCdzCisgICAgdXNpbmcgdGhlIC1lIG9wdGlvbiwgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBNQUNISU5FIGluIHlvdXIKKyAgICBsb2NhbC5jb25mKToKKworICAgICAgJCB3aWMgY3JlYXRlIG1rZWZpZGlzayAtZSBjb3JlLWltYWdlLW1pbmltYWwKKyAgICAgIENoZWNraW5nIGJhc2ljIGJ1aWxkIGVudmlyb25tZW50Li4uCisgICAgICBEb25lLgorCisgICAgICBDcmVhdGluZyBpbWFnZShzKS4uLgorCisgICAgICBJbmZvOiBUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgICAgICAgL3Zhci90bXAvd2ljL2J1aWxkL21rZWZpZGlzay0yMDEzMDkyNjAwMjctc2RhLmRpcmVjdAorCisgICAgICAuLi4KKworICAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgZG9lc24ndCB0YWtlIHRoZSBlYXN5IHdheSBvdXQgYW5kIG1hbnVhbGx5CisgICAgc3BlY2lmaWVzIGVhY2ggYnVpbGQgYXJ0aWZhY3QsIGFsb25nIHdpdGggYSBub24tY2FubmVkIC53a3MgZmlsZSwKKyAgICBhbmQgYWxzbyB1c2VzIHRoZSAtbyBvcHRpb24gdG8gaGF2ZSB3aWMgY3JlYXRlIHRoZSBvdXRwdXQKKyAgICBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCAvdmFyL3RtcC93aWM6CisKKyAgICAgICQgd2ljIGNyZWF0ZSAuL3Rlc3Qud2tzIC1vIC4vb3V0IC0tcm9vdGZzLWRpcgorICAgICAgdG1wL3dvcmsvcWVtdXg4Nl82NC1wb2t5LWxpbnV4L2NvcmUtaW1hZ2UtbWluaW1hbC8xLjAtcjAvcm9vdGZzCisgICAgICAtLWJvb3RpbWctZGlyIHRtcC9zeXNyb290cy9xZW11eDg2LTY0L3Vzci9zaGFyZQorICAgICAgLS1rZXJuZWwtZGlyIHRtcC9kZXBsb3kvaW1hZ2VzL3FlbXV4ODYtNjQKKyAgICAgIC0tbmF0aXZlLXN5c3Jvb3QgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisgICAgIENyZWF0aW5nIGltYWdlKHMpLi4uCisKKyAgICAgSW5mbzogVGhlIG5ldyBpbWFnZShzKSBjYW4gYmUgZm91bmQgaGVyZToKKyAgICAgICAgICAgb3V0L2J1aWxkL3Rlc3QtMjAxNTA3MjExMzEzLXNkYS5kaXJlY3QKKworICAgICBUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKToKKyAgICAgICBST09URlNfRElSOiAgICAgICAgICAgICAgICAgICB0bXAvd29yay9xZW11eDg2XzY0LXBva3ktbGludXgvY29yZS1pbWFnZS1taW5pbWFsLzEuMC1yMC9yb290ZnMKKyAgICAgICBCT09USU1HX0RJUjogICAgICAgICAgICAgICAgICB0bXAvc3lzcm9vdHMvcWVtdXg4Ni02NC91c3Ivc2hhcmUKKyAgICAgICBLRVJORUxfRElSOiAgICAgICAgICAgICAgICAgICB0bXAvZGVwbG95L2ltYWdlcy9xZW11eDg2LTY0CisgICAgICAgTkFUSVZFX1NZU1JPT1Q6ICAgICAgICAgICAgICAgdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eAorCisgICAgIFRoZSBpbWFnZShzKSB3ZXJlIGNyZWF0ZWQgdXNpbmcgT0Uga2lja3N0YXJ0IGZpbGU6CisgICAgIC4vdGVzdC53a3MKKworICAgICBIZXJlIGlzIGEgY29udGVudCBvZiB0ZXN0LndrczoKKworICAgICBwYXJ0IC9ib290IC0tc291cmNlIGJvb3RpbWctcGNiaW9zIC0tb25kaXNrIHNkYSAtLWxhYmVsIGJvb3QgLS1hY3RpdmUgLS1hbGlnbiAxMDI0CisgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybSAtLWFsaWduIDEwMjQKKworICAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MCAgLS1hcHBlbmQ9InJvb3R3YWl0IHJvb3Rmc3R5cGU9ZXh0MyB2aWRlbz12ZXNhZmIgdmdhPTB4MzE4IGNvbnNvbGU9dHR5MCIKKworCisgICAgRmluYWxseSwgaGVyZSdzIGFuIGV4YW1wbGUgb2YgdGhlIGFjdHVhbCBwYXJ0aXRpb24gbGFuZ3VhZ2UKKyAgICBjb21tYW5kcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBta2VmaWRpc2sgaW1hZ2UgaS5lLiB0aGVzZSBhcmUgdGhlCisgICAgY29udGVudHMgb2YgdGhlIG1rZWZpZGlzay53a3MgT0Uga2lja3N0YXJ0IGZpbGU6CisKKyAgICAgICMgc2hvcnQtZGVzY3JpcHRpb246IENyZWF0ZSBhbiBFRkkgZGlzayBpbWFnZQorICAgICAgIyBsb25nLWRlc2NyaXB0aW9uOiBDcmVhdGVzIGEgcGFydGl0aW9uZWQgRUZJIGRpc2sgaW1hZ2UgdGhhdCB0aGUgdXNlcgorICAgICAgIyBjYW4gZGlyZWN0bHkgZGQgdG8gYm9vdCBtZWRpYS4KKworICAgICAgcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLWVmaSAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZWZpIC0tYWN0aXZlCisKKyAgICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMgLS1sYWJlbCBwbGF0Zm9ybQorCisgICAgICBwYXJ0IHN3YXAgLS1vbmRpc2sgc2RhIC0tc2l6ZSA0NCAtLWxhYmVsIHN3YXAxIC0tZnN0eXBlPXN3YXAKKworICAgICAgYm9vdGxvYWRlciAgLS10aW1lb3V0PTEwICAtLWFwcGVuZD0icm9vdHdhaXQgY29uc29sZT10dHlQQ0gwLDExNTIwMCIKKworICAgIFlvdSBjYW4gZ2V0IGEgY29tcGxldGUgbGlzdGluZyBhbmQgZGVzY3JpcHRpb24gb2YgYWxsIHRoZQorICAgIGtpY2tzdGFydCBjb21tYW5kcyBhdmFpbGFibGUgZm9yIHVzZSBpbiAud2tzIGZpbGVzIGZyb20gJ3dpYyBoZWxwCisgICAga2lja3N0YXJ0Jy4KKyIiIgorCit3aWNfa2lja3N0YXJ0X2hlbHAgPSAiIiIKKworTkFNRQorICAgIHdpYyBraWNrc3RhcnQgLSB3aWMga2lja3N0YXJ0IHJlZmVyZW5jZQorCitERVNDUklQVElPTgorICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyB0aGUgZGVmaW5pdGl2ZSByZWZlcmVuY2UgdG8gdGhlIHdpYworICAgIGtpY2tzdGFydCBsYW5ndWFnZS4gIEl0IGFsc28gcHJvdmlkZXMgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbGlzdCBvZgorICAgIC0tc291cmNlIHBsdWdpbnMgYXZhaWxhYmxlIGZvciB1c2UgZnJvbSB0aGUgJ3BhcnQnIGNvbW1hbmQgKHNlZQorICAgIHRoZSAnUGxhdGZvcm0tc3BlY2lmaWMgUGx1Z2lucycgc2VjdGlvbiBiZWxvdykuCisKKyAgICBUaGUgY3VycmVudCB3aWMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgYmFzaWMga2lja3N0YXJ0CisgICAgcGFydGl0aW9uaW5nIGNvbW1hbmRzOiBwYXJ0aXRpb24gKG9yIHBhcnQgZm9yIHNob3J0KSBhbmQKKyAgICBib290bG9hZGVyLgorCisgICAgVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Rpbmcgb2YgdGhlIGNvbW1hbmRzLCB0aGVpciBzeW50YXgsIGFuZAorICAgIG1lYW5pbmdzLiBUaGUgY29tbWFuZHMgYXJlIGJhc2VkIG9uIHRoZSBGZWRvcmEga2lja3N0YXJ0CisgICAgZG9jdW1lbnRhdGlvbiBidXQgd2l0aCBtb2RpZmljYXRpb25zIHRvIHJlZmxlY3Qgd2ljIGNhcGFiaWxpdGllcy4KKworICAgICAgaHR0cDovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQW5hY29uZGEvS2lja3N0YXJ0I3BhcnRfb3JfcGFydGl0aW9uCisgICAgICBodHRwOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9BbmFjb25kYS9LaWNrc3RhcnQjYm9vdGxvYWRlcgorCisgIENvbW1hbmRzCisKKyAgICAqICdwYXJ0JyBvciAncGFydGl0aW9uJworCisgICAgICAgVGhpcyBjb21tYW5kIGNyZWF0ZXMgYSBwYXJ0aXRpb24gb24gdGhlIHN5c3RlbSBhbmQgdXNlcyB0aGUKKyAgICAgICBmb2xsb3dpbmcgc3ludGF4OgorCisgICAgICAgICBwYXJ0IDxtb3VudHBvaW50PgorCisgICAgICAgVGhlIDxtb3VudHBvaW50PiBpcyB3aGVyZSB0aGUgcGFydGl0aW9uIHdpbGwgYmUgbW91bnRlZCBhbmQKKyAgICAgICBtdXN0IHRha2Ugb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKyAgICAgICAgIC88cGF0aD46IEZvciBleGFtcGxlOiAvLCAvdXNyLCBvciAvaG9tZQorCisgICAgICAgICBzd2FwOiBUaGUgcGFydGl0aW9uIHdpbGwgYmUgdXNlZCBhcyBzd2FwIHNwYWNlLgorCisgICAgICAgVGhlIGZvbGxvd2luZyBhcmUgc3VwcG9ydGVkICdwYXJ0JyBvcHRpb25zOgorCisgICAgICAgICAtLXNpemU6IFRoZSBtaW5pbXVtIHBhcnRpdGlvbiBzaXplLiBTcGVjaWZ5IGFuIGludGVnZXIgdmFsdWUKKyAgICAgICAgICAgICAgICAgc3VjaCBhcyA1MDAuIE11bHRpcGxpZXJzIGssIE0gYW5nIEcgY2FuIGJlIHVzZWQuIElmCisgICAgICAgICAgICAgICAgIG5vdCBzcGVjaWZpZWQsIHRoZSBzaXplIGlzIGluIE1CLgorICAgICAgICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdGhpcyBvcHRpb24gaWYgeW91IHVzZSAtLXNvdXJjZS4KKworICAgICAgICAgLS1zb3VyY2U6IFRoaXMgb3B0aW9uIGlzIGEgd2ljLXNwZWNpZmljIG9wdGlvbiB0aGF0IG5hbWVzIHRoZQorICAgICAgICAgICAgICAgICAgIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0IHdpbGwgcG9wdWxhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uLiAgVGhlIG1vc3QgY29tbW9uIHZhbHVlIGZvciB0aGlzIG9wdGlvbgorICAgICAgICAgICAgICAgICAgIGlzICdyb290ZnMnLCBidXQgY2FuIGJlIGFueSB2YWx1ZSB3aGljaCBtYXBzIHRvIGEKKyAgICAgICAgICAgICAgICAgICB2YWxpZCAnc291cmNlIHBsdWdpbicgKHNlZSAnd2ljIGhlbHAgcGx1Z2lucycpLgorCisgICAgICAgICAgICAgICAgICAgSWYgJy0tc291cmNlIHJvb3RmcycgaXMgdXNlZCwgaXQgdGVsbHMgdGhlIHdpYworICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gY3JlYXRlIGEgcGFydGl0aW9uIGFzIGxhcmdlIGFzIG5lZWRlZAorICAgICAgICAgICAgICAgICAgIGFuZCB0byBmaWxsIGl0IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbSBwb2ludGVkIHRvIGJ5IHRoZSAnLXInIHdpYyBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgICAgICAgICBvcHRpb24gKG9yIHRoZSBlcXVpdmFsZW50IHJvb3RmcyBkZXJpdmVkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgJy1lJyBjb21tYW5kLWxpbmUgb3B0aW9uKS4gIFRoZSBmaWxlc3lzdGVtIHR5cGUKKyAgICAgICAgICAgICAgICAgICB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHBhcnRpdGlvbiBpcyBkcml2ZW4KKyAgICAgICAgICAgICAgICAgICBieSB0aGUgdmFsdWUgb2YgdGhlIC0tZnN0eXBlIG9wdGlvbiBzcGVjaWZpZWQgZm9yCisgICAgICAgICAgICAgICAgICAgdGhlIHBhcnRpdGlvbiAoc2VlIC0tZnN0eXBlIGJlbG93KS4KKworICAgICAgICAgICAgICAgICAgIElmIC0tc291cmNlIDxwbHVnaW4tbmFtZT4nIGlzIHVzZWQsIGl0IHRlbGxzIHRoZQorICAgICAgICAgICAgICAgICAgIHdpYyBjb21tYW5kIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBhcyBsYXJnZSBhcworICAgICAgICAgICAgICAgICAgIG5lZWRlZCBhbmQgdG8gZmlsbCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb24gdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgICAgcGx1Z2luIG5hbWUgdXNpbmcgdGhlIGRhdGEgcG9pbnRlZCB0byBieSB0aGUgJy1yJworICAgICAgICAgICAgICAgICAgIHdpYyBjb21tYW5kLWxpbmUgb3B0aW9uIChvciB0aGUgZXF1aXZhbGVudCByb290ZnMKKyAgICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhlICctZScgY29tbWFuZC1saW5lIG9wdGlvbikuCisgICAgICAgICAgICAgICAgICAgRXhhY3RseSB3aGF0IHRob3NlIGNvbnRlbnRzIGFuZCBmaWxlc3lzdGVtIHR5cGUgZW5kCisgICAgICAgICAgICAgICAgICAgdXAgYmVpbmcgYXJlIGRlcGVuZGVudCBvbiB0aGUgZ2l2ZW4gcGx1Z2luCisgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgICAgICAgICAgICBJZiAtLXNvdXJjZSBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSB3aWMgY29tbWFuZAorICAgICAgICAgICAgICAgICAgIHdpbGwgY3JlYXRlIGVtcHR5IHBhcnRpdGlvbi4gLS1zaXplIHBhcmFtZXRlciBoYXMKKyAgICAgICAgICAgICAgICAgICB0byBiZSB1c2VkIHRvIHNwZWNpZnkgc2l6ZSBvZiBlbXB0eSBwYXJ0aXRpb24uCisKKyAgICAgICAgIC0tb25kaXNrIG9yIC0tb25kcml2ZTogRm9yY2VzIHRoZSBwYXJ0aXRpb24gdG8gYmUgY3JlYXRlZCBvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHBhcnRpY3VsYXIgZGlzay4KKworICAgICAgICAgLS1mc3R5cGU6IFNldHMgdGhlIGZpbGUgc3lzdGVtIHR5cGUgZm9yIHRoZSBwYXJ0aXRpb24uICBUaGVzZQorICAgICAgICAgICBhcHBseSB0byBwYXJ0aXRpb25zIGNyZWF0ZWQgdXNpbmcgJy0tc291cmNlIHJvb3RmcycgKHNlZQorICAgICAgICAgICAtLXNvdXJjZSBhYm92ZSkuICBWYWxpZCB2YWx1ZXMgYXJlOgorCisgICAgICAgICAgICAgZXh0MgorICAgICAgICAgICAgIGV4dDMKKyAgICAgICAgICAgICBleHQ0CisgICAgICAgICAgICAgYnRyZnMKKyAgICAgICAgICAgICBzcXVhc2hmcworICAgICAgICAgICAgIHN3YXAKKworICAgICAgICAgLS1mc29wdGlvbnM6IFNwZWNpZmllcyBhIGZyZWUtZm9ybSBzdHJpbmcgb2Ygb3B0aW9ucyB0byBiZQorICAgICAgICAgICAgICAgICAgICAgIHVzZWQgd2hlbiBtb3VudGluZyB0aGUgZmlsZXN5c3RlbS4gVGhpcyBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSAvZXRjL2ZzdGFiIGZpbGUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHN5c3RlbSBhbmQgc2hvdWxkIGJlIGVuY2xvc2VkIGluCisgICAgICAgICAgICAgICAgICAgICAgcXVvdGVzLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgc3RyaW5nIGlzCisgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHRzIi4KKworICAgICAgICAgLS1sYWJlbCBsYWJlbDogU3BlY2lmaWVzIHRoZSBsYWJlbCB0byBnaXZlIHRvIHRoZSBmaWxlc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBtYWRlIG9uIHRoZSBwYXJ0aXRpb24uIElmIHRoZSBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBmaWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgbGFiZWwgaXMgY3JlYXRlZCBmb3IgdGhlIHBhcnRpdGlvbi4KKworICAgICAgICAgLS1hY3RpdmU6IE1hcmtzIHRoZSBwYXJ0aXRpb24gYXMgYWN0aXZlLgorCisgICAgICAgICAtLWFsaWduIChpbiBLQnl0ZXMpOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMgYW5kIHNheXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHN0YXJ0IGEgcGFydGl0aW9uIG9uIGFuIHggS0J5dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeS4KKworICAgICAgICAgLS1uby10YWJsZTogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBTcGFjZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCBmb3IgdGhlIHBhcnRpdGlvbiBhbmQgaXQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVkIGJ1dCBpdCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbiB0YWJsZS4gSXQgbWF5IGJlIHVzZWZ1bCBmb3IKKyAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXJzLgorCisgICAgICAgICAtLWV4dHJhLXNwYWNlOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IGFkZHMgZXh0cmEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFmdGVyIHRoZSBzcGFjZSBmaWxsZWQgYnkgdGhlIGNvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwYXJ0aXRpb24uIFRoZSBmaW5hbCBzaXplIGNhbiBnbworICAgICAgICAgICAgICAgICAgICAgICAgYmV5b25kIHRoZSBzaXplIHNwZWNpZmllZCBieSAtLXNpemUuCisgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCAxME1CLgorCisgICAgICAgICAtLW92ZXJoZWFkLWZhY3RvcjogVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gd2ljLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRoZSBwYXJ0aXRpb24gaXMgbXVsdGlwbGllZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmFjdG9yLiBJdCBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLjMuCisKKyAgICAgICAgIC0tcGFydC10eXBlOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IHNwZWNpZmllcyBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAgICAgICB0eXBlIEdVSUQgZm9yIEdQVCBwYXJ0aXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcGFydGl0aW9uIHR5cGUgR1VJRFMgY2FuIGJlIGZvdW5kIGhlcmU6CisgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HVUlEX1BhcnRpdGlvbl9UYWJsZSNQYXJ0aXRpb25fdHlwZV9HVUlEcworCisgICAgICAgICAtLXVzZS11dWlkOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IG1ha2VzIHdpYyB0byBnZW5lcmF0ZQorICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChHVUlEKSBmb3IgdGhlIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgICAgICAgYW5kIHVzZSBpdCBpbiBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24gdG8gc3BlY2lmeSByb290IHBhcnRpdGlvbi4KKworICAgICAgICAgLS11dWlkOiBUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB3aWMuIEl0IHNwZWNpZmllcyBwYXJ0aXRpb24gVVVJRC4KKyAgICAgICAgICAgICAgICAgSXQncyB1c2VmdWwgaWYgcHJlY29uZmlndXJlZCBwYXJ0aXRpb24gVVVJRCBpcyBhZGRlZCB0byBrZXJuZWwgY29tbWFuZCBsaW5lCisgICAgICAgICAgICAgICAgIGluIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiBiZWZvcmUgcnVubmluZyB3aWMuIEluIHRoaXMgY2FzZSAud2tzIGZpbGUgY2FuCisgICAgICAgICAgICAgICAgIGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCB0byBzZXQgcHJlY29uZmlndXJlZCBwYXJpdGlvbiBVVUlEIHVzaW5nIHRoaXMgb3B0aW9uLgorCisgICAgKiBib290bG9hZGVyCisKKyAgICAgIFRoaXMgY29tbWFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB2YXJpb3VzIGJvb3Rsb2FkZXIKKyAgICAgIG9wdGlvbnMuICBUaGUgZm9sbG93aW5nIGFyZSBzdXBwb3J0ZWQgJ2Jvb3Rsb2FkZXInIG9wdGlvbnM6CisKKyAgICAgICAgLS10aW1lb3V0OiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUKKyAgICAgICAgICAgICAgICAgICBib290bG9hZGVyIHRpbWVzIG91dCBhbmQgYm9vdHMgdGhlIGRlZmF1bHQgb3B0aW9uLgorCisgICAgICAgIC0tYXBwZW5kOiBTcGVjaWZpZXMga2VybmVsIHBhcmFtZXRlcnMuIFRoZXNlIHdpbGwgYmUgYWRkZWQgdG8KKyAgICAgICAgICAgICAgICAgIGJvb3Rsb2FkZXIgY29tbWFuZC1saW5lIC0gZm9yIGV4YW1wbGUsIHRoZSBzeXNsaW51eAorICAgICAgICAgICAgICAgICAgQVBQRU5EIG9yIGdydWIga2VybmVsIGNvbW1hbmQgbGluZS4KKworICAgICAgTm90ZSB0aGF0IGJvb3Rsb2FkZXIgZnVuY3Rpb25hbGl0eSBhbmQgYm9vdCBwYXJ0aXRpb25zIGFyZQorICAgICAgaW1wbGVtZW50ZWQgYnkgdGhlIHZhcmlvdXMgLS1zb3VyY2UgcGx1Z2lucyB0aGF0IGltcGxlbWVudAorICAgICAgYm9vdGxvYWRlciBmdW5jdGlvbmFsaXR5OyB0aGUgYm9vdGxvYWRlciBjb21tYW5kIGVzc2VudGlhbGx5CisgICAgICBwcm92aWRlcyBhIG1lYW5zIG9mIG1vZGlmeWluZyBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCisiIiIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvX19pbml0X18ucHkgYi9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkgYi9zY3JpcHRzL2xpYi93aWMvaW1hZ2VyL2Jhc2VpbWFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNiZTk0OAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvYmFzZWltYWdlci5weQpAQCAtMCwwICsxLDE5MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgUmVkIEhhdCAgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBDcmVhdG9yRXJyb3IKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKKworY2xhc3MgQmFzZUltYWdlQ3JlYXRvcihvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGltYWdlIGNyZWF0aW9uLgorCisgICAgQmFzZUltYWdlQ3JlYXRvciBpcyB0aGUgc2ltcGxlc3QgY3JlYXRvciBjbGFzcyBhdmFpbGFibGU7IGl0IHdpbGwKKyAgICBjcmVhdGUgYSBzeXN0ZW0gaW1hZ2UgYWNjb3JkaW5nIHRvIHRoZSBzdXBwbGllZCBraWNrc3RhcnQgZmlsZS4KKworICAgIGUuZy4KKworICAgICAgaW1wb3J0IHdpYy5pbWdjcmVhdGUgYXMgaW1nY3JlYXRlCisgICAgICBrcyA9IGltZ2NyZWF0ZS5yZWFkX2tpY2tzdGFydCgiZm9vLmtzIikKKyAgICAgIGltZ2NyZWF0ZS5JbWFnZUNyZWF0b3Ioa3MsICJmb28iKS5jcmVhdGUoKQorICAgICIiIgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlb3B0cz1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbiBJbWFnZUNyZWF0b3IgaW5zdGFuY2UuCisKKyAgICAgICAga3MgLS0gYSBweWtpY2tzdGFydC5LaWNrc3RhcnRQYXJzZXIgaW5zdGFuY2U7IHRoaXMgaW5zdGFuY2Ugd2lsbCBiZQorICAgICAgICAgICAgICB1c2VkIHRvIGRyaXZlIHRoZSBpbnN0YWxsIGJ5IGUuZy4gcHJvdmlkaW5nIHRoZSBsaXN0IG9mIHBhY2thZ2VzCisgICAgICAgICAgICAgIHRvIGJlIGluc3RhbGxlZCwgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGFuZCAlcG9zdCBzY3JpcHRzCisKKyAgICAgICAgbmFtZSAtLSBhIG5hbWUgZm9yIHRoZSBpbWFnZTsgdXNlZCBmb3IgZS5nLiBpbWFnZSBmaWxlbmFtZXMgb3IKKyAgICAgICAgICAgICAgICBmaWxlc3lzdGVtIGxhYmVscworICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9fYnVpbGRkaXIgPSBOb25lCisKKyAgICAgICAgc2VsZi5rcyA9IE5vbmUKKyAgICAgICAgc2VsZi5uYW1lID0gInRhcmdldCIKKyAgICAgICAgc2VsZi50bXBkaXIgPSAiL3Zhci90bXAvd2ljIgorICAgICAgICBzZWxmLndvcmtkaXIgPSAiL3Zhci90bXAvd2ljL2J1aWxkIgorCisgICAgICAgICMgc2V0dXAgdG1wZnMgdG1wZGlyIHdoZW4gZW5hYmxldG1wZnMgaXMgVHJ1ZQorICAgICAgICBzZWxmLmVuYWJsZXRtcGZzID0gRmFsc2UKKworICAgICAgICBpZiBjcmVhdGVvcHRzOgorICAgICAgICAgICAgIyBNYXBwaW5nIHRhYmxlIGZvciB2YXJpYWJsZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKyAgICAgICAgICAgIG9wdG1hcCA9IHsib3V0ZGlyIiA6ICJkZXN0ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyB1cGRhdGUgc2V0dGluZyBmcm9tIGNyZWF0ZW9wdHMKKyAgICAgICAgICAgIGZvciBrZXkgaW4gY3JlYXRlb3B0cy5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYga2V5IGluIG9wdG1hcDoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0bWFwW2tleV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBrZXkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG9wdGlvbiwgY3JlYXRlb3B0c1trZXldKQorCisgICAgICAgICAgICBzZWxmLmRlc3RkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBhbmR1c2VyKHNlbGYuZGVzdGRpcikpCisKKyAgICAgICAgc2VsZi5fZGVwX2NoZWNrcyA9IFsibHMiLCAiYmFzaCIsICJjcCIsICJlY2hvIl0KKworICAgICAgICAjIE91dHB1dCBpbWFnZSBmaWxlIG5hbWVzCisgICAgICAgIHNlbGYub3V0aW1hZ2UgPSBbXQorCisgICAgICAgICMgTm8ga3MgcHJvdmlkZWQgd2hlbiBjYWxsZWQgYnkgY29udmVydG9yLCBzbyBza2lwIHRoZSBkZXBlbmRlbmN5IGNoZWNrCisgICAgICAgIGlmIHNlbGYua3M6CisgICAgICAgICAgICAjIElmIHdlIGhhdmUgYnRyZnMgcGFydGl0aW9uIHdlIG5lZWQgdG8gY2hlY2sgbmVjZXNzYXJ5IHRvb2xzCisgICAgICAgICAgICBmb3IgcGFydCBpbiBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgcGFydC5mc3R5cGUgYW5kIHBhcnQuZnN0eXBlID09ICJidHJmcyI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcF9jaGVja3MuYXBwZW5kKCJta2ZzLmJ0cmZzIikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgc3BlY2lmaWVkIHRtcGRpciBhbmQgY2FjaGVkaXIgZXhpc3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYudG1wZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYudG1wZGlyKQorCisKKyAgICAjCisgICAgIyBIb29rcyBmb3Igc3ViY2xhc3NlcworICAgICMKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHBhcnRpdGlvbnMgZm9yIHRoZSBkaXNrIGltYWdlKHMpCisKKyAgICAgICAgVGhpcyBpcyB0aGUgaG9vayB3aGVyZSBzdWJjbGFzc2VzIG1heSBjcmVhdGUgdGhlIHBhcnRpdGlvbnMKKyAgICAgICAgdGhhdCB3aWxsIGJlIGFzc2VtYmxlZCBpbnRvIGRpc2sgaW1hZ2UocykuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiVW5kbyBhbnl0aGluZyBwZXJmb3JtZWQgaW4gX2NyZWF0ZSgpLgorCisgICAgICAgIFRoaXMgaXMgdGhlIGhvb2sgd2hlcmUgc3ViY2xhc3NlcyBtdXN0IHVuZG8gYW55dGhpbmcgd2hpY2ggd2FzCisgICAgICAgIGRvbmUgaW4gX2NyZWF0ZSgpLgorCisgICAgICAgIFRoZXJlIGlzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgICMKKyAgICAjIEFjdHVhbCBpbXBsZW1lbnRhdGlvbgorICAgICMKKyAgICBkZWYgX19lbnN1cmVfYnVpbGRkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9fYnVpbGRkaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud29ya2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRtcGRpciwgImJ1aWxkIikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLndvcmtkaXIpOgorICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYud29ya2RpcikKKyAgICAgICAgICAgIHNlbGYuX19idWlsZGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPXNlbGYud29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSJpbWdjcmVhdGUtIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgQ3JlYXRvckVycm9yKCJGYWlsZWQgY3JlYXRlIGJ1aWxkIGRpcmVjdG9yeSBpbiAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi50bXBkaXIsIGVycikpCisKKyAgICBkZWYgX19zZXR1cF90bXBkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmVuYWJsZXRtcGZzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcnVubmVyLnNob3coJ21vdW50IC10IHRtcGZzIC1vIHNpemU9NEcgdG1wZnMgJXMnICUgc2VsZi53b3JrZGlyKQorCisgICAgZGVmIF9fY2xlYW5fdG1wZGlyKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5lbmFibGV0bXBmczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJ1bm5lci5zaG93KCd1bW91bnQgLWwgJXMnICUgc2VsZi53b3JrZGlyKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHBhcnRpdGlvbnMgZm9yIHRoZSBkaXNrIGltYWdlKHMpCisKKyAgICAgICAgQ3JlYXRlIHRoZSBwYXJ0aXRpb25zIHRoYXQgd2lsbCBiZSBhc3NlbWJsZWQgaW50byBkaXNrCisgICAgICAgIGltYWdlKHMpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fX3NldHVwX3RtcGRpcigpCisgICAgICAgIHNlbGYuX19lbnN1cmVfYnVpbGRkaXIoKQorCisgICAgICAgIHNlbGYuX2NyZWF0ZSgpCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiVW5kbyBhbnl0aGluZyBwZXJmb3JtZWQgaW4gY3JlYXRlKCkuCisKKyAgICAgICAgTm90ZSwgbWFrZSBzdXJlIHRvIGNhbGwgdGhpcyBtZXRob2Qgb25jZSBmaW5pc2hlZCB3aXRoIHRoZSBjcmVhdG9yCisgICAgICAgIGluc3RhbmNlIGluIG9yZGVyIHRvIGVuc3VyZSBubyBzdGFsZSBmaWxlcyBhcmUgbGVmdCBvbiB0aGUgaG9zdCBlLmcuOgorCisgICAgICAgICAgY3JlYXRvciA9IEltYWdlQ3JlYXRvcihrcywgbmFtZSkKKyAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgIGNyZWF0b3IuY3JlYXRlKCkKKyAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICBjcmVhdG9yLmNsZWFudXAoKQorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fX2J1aWxkZGlyOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl9fYnVpbGRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fX2J1aWxkZGlyID0gTm9uZQorCisgICAgICAgIHNlbGYuX19jbGVhbl90bXBkaXIoKQorCisKKyAgICBkZWYgcHJpbnRfb3V0aW1hZ2VfaW5mbyhzZWxmKToKKyAgICAgICAgbXNnID0gIlRoZSBuZXcgaW1hZ2UgY2FuIGJlIGZvdW5kIGhlcmU6XG4iCisgICAgICAgIHNlbGYub3V0aW1hZ2Uuc29ydCgpCisgICAgICAgIGZvciBwYXRoIGluIHNlbGYub3V0aW1hZ2U6CisgICAgICAgICAgICBtc2cgKz0gJyAgJXNcbicgJSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKworICAgICAgICBtc2dlci5pbmZvKG1zZykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5IGIvc2NyaXB0cy9saWIvd2ljL2ltYWdlci9kaXJlY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2YTBkMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9pbWFnZXIvZGlyZWN0LnB5CkBAIC0wLDAgKzEsMzc4IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnZGlyZWN0JyBpbWFnZSBjcmVhdG9yIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gd2ljIGltcG9ydCBraWNrc3RhcnQsIG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZnNfcmVsYXRlZAorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyCitmcm9tIHdpYy51dGlscy5wYXJ0aXRpb25lZGZzIGltcG9ydCBJbWFnZQorZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBDcmVhdG9yRXJyb3IsIEltYWdlRXJyb3IKK2Zyb20gd2ljLmltYWdlci5iYXNlaW1hZ2VyIGltcG9ydCBCYXNlSW1hZ2VDcmVhdG9yCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQKKworZGlza19tZXRob2RzID0geworICAgICJkb19pbnN0YWxsX2Rpc2siOk5vbmUsCit9CisKK2NsYXNzIERpcmVjdEltYWdlQ3JlYXRvcihCYXNlSW1hZ2VDcmVhdG9yKToKKyAgICAiIiIKKyAgICBJbnN0YWxscyBhIHN5c3RlbSBpbnRvIGEgZmlsZSBjb250YWluaW5nIGEgcGFydGl0aW9uZWQgZGlzayBpbWFnZS4KKworICAgIERpcmVjdEltYWdlQ3JlYXRvciBpcyBhbiBhZHZhbmNlZCBJbWFnZUNyZWF0b3Igc3ViY2xhc3M7IGFuIGltYWdlCisgICAgZmlsZSBpcyBmb3JtYXR0ZWQgd2l0aCBhIHBhcnRpdGlvbiB0YWJsZSwgZWFjaCBwYXJ0aXRpb24gY3JlYXRlZAorICAgIGZyb20gYSByb290ZnMgb3Igb3RoZXIgT3BlbkVtYmVkZGVkIGJ1aWxkIGFydGlmYWN0IGFuZCBkZCdlZCBpbnRvCisgICAgdGhlIHZpcnR1YWwgZGlzay4gVGhlIGRpc2sgaW1hZ2UgY2FuIHN1YnNlcXVlbnRseSBiZSBkZCdlZCBvbnRvCisgICAgbWVkaWEgYW5kIHVzZWQgb24gYWN0dWFsIGhhcmR3YXJlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9lX2J1aWxkZGlyLCBpbWFnZV9vdXRwdXRfZGlyLCByb290ZnNfZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QsIGNvbXByZXNzb3IsIGNyZWF0b3JvcHRzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGl6ZSBhIERpcmVjdEltYWdlQ3JlYXRvciBpbnN0YW5jZS4KKworICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgSW1hZ2VDcmVhdG9yLl9faW5pdF9fKCkKKyAgICAgICAgIiIiCisgICAgICAgIEJhc2VJbWFnZUNyZWF0b3IuX19pbml0X18oc2VsZiwgY3JlYXRvcm9wdHMpCisKKyAgICAgICAgc2VsZi5fX2ltYWdlID0gTm9uZQorICAgICAgICBzZWxmLl9fZGlza3MgPSB7fQorICAgICAgICBzZWxmLl9fZGlza19mb3JtYXQgPSAiZGlyZWN0IgorICAgICAgICBzZWxmLl9kaXNrX25hbWVzID0gW10KKyAgICAgICAgc2VsZi5wdGFibGVfZm9ybWF0ID0gc2VsZi5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIucHRhYmxlCisKKyAgICAgICAgc2VsZi5vZV9idWlsZGRpciA9IG9lX2J1aWxkZGlyCisgICAgICAgIGlmIGltYWdlX291dHB1dF9kaXI6CisgICAgICAgICAgICBzZWxmLnRtcGRpciA9IGltYWdlX291dHB1dF9kaXIKKyAgICAgICAgc2VsZi5yb290ZnNfZGlyID0gcm9vdGZzX2RpcgorICAgICAgICBzZWxmLmJvb3RpbWdfZGlyID0gYm9vdGltZ19kaXIKKyAgICAgICAgc2VsZi5rZXJuZWxfZGlyID0ga2VybmVsX2RpcgorICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290ID0gbmF0aXZlX3N5c3Jvb3QKKyAgICAgICAgc2VsZi5jb21wcmVzc29yID0gY29tcHJlc3NvcgorCisgICAgZGVmIF9fZ2V0X3BhcnRfbnVtKHNlbGYsIG51bSwgcGFydHMpOgorICAgICAgICAiIiJjYWxjdWxhdGUgdGhlIHJlYWwgcGFydGl0aW9uIG51bWJlciwgYWNjb3VudGluZyBmb3IgcGFydGl0aW9ucyBub3QKKyAgICAgICAgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZSBhbmQgbG9naWNhbCBwYXJ0aXRpb25zCisgICAgICAgICIiIgorICAgICAgICByZWFsbnVtID0gMAorICAgICAgICBmb3IgcG51bSwgcGFydCBpbiBlbnVtZXJhdGUocGFydHMsIDEpOgorICAgICAgICAgICAgaWYgbm90IHBhcnQubm9fdGFibGU6CisgICAgICAgICAgICAgICAgcmVhbG51bSArPSAxCisgICAgICAgICAgICBpZiBwbnVtID09IG51bToKKyAgICAgICAgICAgICAgICBpZiAgcGFydC5ub190YWJsZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJyBhbmQgcmVhbG51bSA+IDM6CisgICAgICAgICAgICAgICAgICAgICMgYWNjb3VudCBmb3IgbG9naWNhbCBwYXJ0aXRpb24gbnVtYmVyaW5nLCBleC4gc2RhNS4uCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFsbnVtICsgMQorICAgICAgICAgICAgICAgIHJldHVybiByZWFsbnVtCisKKyAgICBkZWYgX3dyaXRlX2ZzdGFiKHNlbGYsIGltYWdlX3Jvb3Rmcyk6CisgICAgICAgICIiIm92ZXJyaWRlbiB0byBnZW5lcmF0ZSBmc3RhYiAodGVtcG9yYXJpbHkpIGluIHJvb3Rmcy4gVGhpcyBpcyBjYWxsZWQKKyAgICAgICAgZnJvbSBfY3JlYXRlLCBtYWtlIHN1cmUgaXQgZG9lc24ndCBnZXQgY2FsbGVkIGZyb20KKyAgICAgICAgQmFzZUltYWdlLmNyZWF0ZSgpCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaW1hZ2Vfcm9vdGZzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnN0YWJfcGF0aCA9IGltYWdlX3Jvb3RmcyArICIvZXRjL2ZzdGFiIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZnN0YWJfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3aXRoIG9wZW4oZnN0YWJfcGF0aCkgYXMgZnN0YWI6CisgICAgICAgICAgICBmc3RhYl9saW5lcyA9IGZzdGFiLnJlYWRsaW5lcygpCisKKyAgICAgICAgaWYgc2VsZi5fdXBkYXRlX2ZzdGFiKGZzdGFiX2xpbmVzLCBzZWxmLl9nZXRfcGFydHMoKSk6CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoZnN0YWJfcGF0aCwgZnN0YWJfcGF0aCArICIub3JpZyIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihmc3RhYl9wYXRoLCAidyIpIGFzIGZzdGFiOgorICAgICAgICAgICAgICAgIGZzdGFiLndyaXRlbGluZXMoZnN0YWJfbGluZXMpCisKKyAgICAgICAgICAgIHJldHVybiBmc3RhYl9wYXRoCisKKyAgICBkZWYgX3VwZGF0ZV9mc3RhYihzZWxmLCBmc3RhYl9saW5lcywgcGFydHMpOgorICAgICAgICAiIiJBc3N1bWUgcGFydGl0aW9uIG9yZGVyIHNhbWUgYXMgaW4gd2tzIiIiCisgICAgICAgIHVwZGF0ZWQgPSBGYWxzZQorICAgICAgICBmb3IgbnVtLCBwYXJ0IGluIGVudW1lcmF0ZShwYXJ0cywgMSk6CisgICAgICAgICAgICBwbnVtID0gc2VsZi5fX2dldF9wYXJ0X251bShudW0sIHBhcnRzKQorICAgICAgICAgICAgaWYgbm90IHBudW0gb3Igbm90IHBhcnQubW91bnRwb2ludCBcCisgICAgICAgICAgICAgICBvciBwYXJ0Lm1vdW50cG9pbnQgaW4gKCIvIiwgIi9ib290Iik6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBtbWMgZGV2aWNlIHBhcnRpdGlvbnMgYXJlIG5hbWVkIG1tY2JsazBwMSwgbW1jYmxrMHAyLi4KKyAgICAgICAgICAgIHByZWZpeCA9ICdwJyBpZiAgcGFydC5kaXNrLnN0YXJ0c3dpdGgoJ21tY2JsaycpIGVsc2UgJycKKyAgICAgICAgICAgIGRldmljZV9uYW1lID0gIi9kZXYvJXMlcyVkIiAlIChwYXJ0LmRpc2ssIHByZWZpeCwgcG51bSkKKworICAgICAgICAgICAgb3B0cyA9IHBhcnQuZnNvcHRzIGlmIHBhcnQuZnNvcHRzIGVsc2UgImRlZmF1bHRzIgorICAgICAgICAgICAgbGluZSA9ICJcdCIuam9pbihbZGV2aWNlX25hbWUsIHBhcnQubW91bnRwb2ludCwgcGFydC5mc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLCAiMCIsICIwIl0pICsgIlxuIgorCisgICAgICAgICAgICBmc3RhYl9saW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIHVwZGF0ZWQKKworICAgIGRlZiBzZXRfYm9vdGltZ19kaXIoc2VsZiwgYm9vdGltZ19kaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNjZXNzb3IgZm9yIGJvb3RpbWdfZGlyLCB0aGUgYWN0dWFsIGxvY2F0aW9uIHVzZWQgZm9yIHRoZSBzb3VyY2UKKyAgICAgICAgb2YgdGhlIGJvb3RpbWcuICBTaG91bGQgYmUgc2V0IGJ5IHNvdXJjZSBwbHVnaW5zIChvbmx5IGlmIHRoZXkKKyAgICAgICAgY2hhbmdlIHRoZSBkZWZhdWx0IGJvb3RpbWcgc291cmNlKSBzbyB0aGUgY29ycmVjdCBpbmZvIGdldHMKKyAgICAgICAgZGlzcGxheWVkIGZvciBwcmludF9vdXRpbWFnZV9pbmZvKCkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmJvb3RpbWdfZGlyID0gYm9vdGltZ19kaXIKKworICAgIGRlZiBfZ2V0X3BhcnRzKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5rczoKKyAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIHRvIGdldCBwYXJ0aXRpb24gaW5mbywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGVhc2UgY2hlY2sgeW91ciBraWNrc3RhcnQgc2V0dGluZy4iKQorCisgICAgICAgICMgU2V0IGEgZGVmYXVsdCBwYXJ0aXRpb24gaWYgbm8gcGFydGl0aW9uIGlzIGdpdmVuIG91dAorICAgICAgICBpZiBub3Qgc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgcGFydHN0ciA9ICJwYXJ0IC8gLS1zaXplIDE5MDAgLS1vbmRpc2sgc2RhIC0tZnN0eXBlPWV4dDMiCisgICAgICAgICAgICBhcmdzID0gcGFydHN0ci5zcGxpdCgpCisgICAgICAgICAgICBwYXJ0ID0gc2VsZi5rcy5oYW5kbGVyLnBhcnRpdGlvbi5wYXJzZShhcmdzWzE6XSkKKyAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIHNlbGYua3MuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgICAgICAgICBzZWxmLmtzLmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnMuYXBwZW5kKHBhcnQpCisKKyAgICAgICAgIyBwYXJ0aXRpb25zIGxpc3QgZnJvbSBraWNrc3RhcnQgZmlsZQorICAgICAgICByZXR1cm4ga2lja3N0YXJ0LmdldF9wYXJ0aXRpb25zKHNlbGYua3MpCisKKyAgICBkZWYgZ2V0X2Rpc2tfbmFtZXMoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm5zIGEgbGlzdCBvZiBwaHlzaWNhbCB0YXJnZXQgZGlzayBuYW1lcyAoZS5nLiwgJ3NkYicpIHdoaWNoCisgICAgICAgIHdpbGwgYmUgY3JlYXRlZC4gIiIiCisKKyAgICAgICAgaWYgc2VsZi5fZGlza19uYW1lczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kaXNrX25hbWVzCisKKyAgICAgICAgI2dldCBwYXJ0aXRpb24gaW5mbyBmcm9tIGtzIGhhbmRsZXIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJ0cykpOgorICAgICAgICAgICAgaWYgcGFydHNbaV0uZGlzazoKKyAgICAgICAgICAgICAgICBkaXNrX25hbWUgPSBwYXJ0c1tpXS5kaXNrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNrcywgbm8gLS1vbmRpc2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIGluIHBhcnRpdGlvbiBsaW5lIG9mIGtzIGZpbGUiKQorCisgICAgICAgICAgICBpZiBwYXJ0c1tpXS5tb3VudHBvaW50IGFuZCBub3QgcGFydHNbaV0uZnN0eXBlOgorICAgICAgICAgICAgICAgIHJhaXNlIENyZWF0b3JFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNrcywgbm8gLS1mc3R5cGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIGZvciBwYXJ0aXRpb24gd2l0aCBtb3VudHBvaW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgaW4gdGhlIGtzIGZpbGUiKQorCisgICAgICAgICAgICBzZWxmLl9kaXNrX25hbWVzLmFwcGVuZChkaXNrX25hbWUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rpc2tfbmFtZXMKKworICAgIGRlZiBfZnVsbF9uYW1lKHNlbGYsIG5hbWUsIGV4dGVudGlvbik6CisgICAgICAgICIiIiBDb25zdHJ1Y3QgZnVsbCBmaWxlIG5hbWUgZm9yIGEgZmlsZSB3ZSBnZW5lcmF0ZS4gIiIiCisgICAgICAgIHJldHVybiAiJXMtJXMuJXMiICUgKHNlbGYubmFtZSwgbmFtZSwgZXh0ZW50aW9uKQorCisgICAgZGVmIF9mdWxsX3BhdGgoc2VsZiwgcGF0aCwgbmFtZSwgZXh0ZW50aW9uKToKKyAgICAgICAgIiIiIENvbnN0cnVjdCBmdWxsIGZpbGUgcGF0aCB0byBhIGZpbGUgd2UgZ2VuZXJhdGUuICIiIgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIHNlbGYuX2Z1bGxfbmFtZShuYW1lLCBleHRlbnRpb24pKQorCisgICAgZGVmIGdldF9kZWZhdWx0X3NvdXJjZV9wbHVnaW4oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgZGVmYXVsdCBzb3VyY2UgcGx1Z2luIGkuZS4gdGhlIHBsdWdpbiB0aGF0J3MgY29uc3VsdGVkIGZvcgorICAgICAgICBvdmVyYWxsIGltYWdlIGdlbmVyYXRpb24gdGFza3Mgb3V0c2lkZSBvZiBhbnkgcGFydGljdWxhcgorICAgICAgICBwYXJ0aXRpb24uICBGb3IgY29udmVuaWVuY2UsIHdlIGp1c3QgaGFuZyBpdCBvZmYgdGhlCisgICAgICAgIGJvb3Rsb2FkZXIgaGFuZGxlciBzaW5jZSBpdCdzIHRoZSBvbmUgbm9uLXBhcnRpdGlvbiBvYmplY3QgaW4KKyAgICAgICAgYW55IHNldHVwLiAgQnkgZGVmYXVsdCB0aGUgZGVmYXVsdCBwbHVnaW4gaXMgc2V0IHRvIHRoZSBzYW1lCisgICAgICAgIHBsdWdpbiBhcyB0aGUgL2Jvb3QgcGFydGl0aW9uOyBzaW5jZSB3ZSBoYW5nIGl0IG9mZiB0aGUKKyAgICAgICAgYm9vdGxvYWRlciBvYmplY3QsIHRoZSBkZWZhdWx0IGNhbiBiZSBleHBsaWNpdGx5IHNldCB1c2luZyB0aGUKKyAgICAgICAgLS1zb3VyY2UgYm9vdGxvYWRlciBwYXJhbS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5zb3VyY2UKKworICAgICMKKyAgICAjIEFjdHVhbCBpbXBsZW1lbnRpb24KKyAgICAjCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBGb3IgJ3dpYycsIHdlIGFscmVhZHkgaGF2ZSBvdXIgYnVpbGQgYXJ0aWZhY3RzIC0gd2UganVzdCBjcmVhdGUKKyAgICAgICAgZmlsZXN5c3RlbXMgZnJvbSB0aGUgYXJ0aWZhY3RzIGRpcmVjdGx5IGFuZCBjb21iaW5lIHRoZW0gaW50bworICAgICAgICBhIHBhcnRpdGlvbmVkIGltYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorCisgICAgICAgIHNlbGYuX19pbWFnZSA9IEltYWdlKHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICAjIGFzIGEgY29udmVuaWVuY2UsIHNldCBzb3VyY2UgdG8gdGhlIGJvb3QgcGFydGl0aW9uIHNvdXJjZQorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGZvcmNpbmcgaXQgdG8gYmUgc2V0IHZpYSBib290bG9hZGVyIC0tc291cmNlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuc291cmNlIGFuZCBwYXJ0Lm1vdW50cG9pbnQgPT0gIi9ib290IjoKKyAgICAgICAgICAgICAgICBzZWxmLmtzLmhhbmRsZXIuYm9vdGxvYWRlci5zb3VyY2UgPSBwYXJ0LnNvdXJjZQorCisgICAgICAgIGZzdGFiX3BhdGggPSBzZWxmLl93cml0ZV9mc3RhYihzZWxmLnJvb3Rmc19kaXIuZ2V0KCJST09URlNfRElSIikpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICAjIGdldCByb290ZnMgc2l6ZSBmcm9tIGJpdGJha2UgdmFyaWFibGUgaWYgaXQncyBub3Qgc2V0IGluIC5rcyBmaWxlCisgICAgICAgICAgICBpZiBub3QgcGFydC5zaXplOgorICAgICAgICAgICAgICAgICMgYW5kIGlmIHJvb3RmcyBuYW1lIGlzIHNwZWNpZmllZCBmb3IgdGhlIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgIGltYWdlX25hbWUgPSBwYXJ0LmdldF9yb290ZnMoKQorICAgICAgICAgICAgICAgIGlmIGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgICAgICMgQml0YmFrZSB2YXJpYWJsZSBST09URlNfU0laRSBpcyBjYWxjdWxhdGVkIGluCisgICAgICAgICAgICAgICAgICAgICMgSW1hZ2UuX2dldF9yb290ZnNfc2l6ZSBtZXRob2QgZnJvbSBtZXRhL2xpYi9vZS9pbWFnZS5weQorICAgICAgICAgICAgICAgICAgICAjIHVzaW5nIElNQUdFX1JPT1RGU19TSVpFLCBJTUFHRV9ST09URlNfQUxJR05NRU5ULAorICAgICAgICAgICAgICAgICAgICAjIElNQUdFX09WRVJIRUFEX0ZBQ1RPUiBhbmQgSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFCisgICAgICAgICAgICAgICAgICAgIHJzaXplX2JiID0gZ2V0X2JpdGJha2VfdmFyKCdST09URlNfU0laRScsIGltYWdlX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHJzaXplX2JiOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IGZyb20gS2IgdG8gTWIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuc2l6ZSA9IGludChyb3VuZChmbG9hdChyc2l6ZV9iYikgLyAxMDI0LikpCisgICAgICAgICAgICAjIG5lZWQgdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtcyBpbiBvcmRlciB0byBnZXQgdGhlaXIKKyAgICAgICAgICAgICMgc2l6ZXMgYmVmb3JlIHdlIGNhbiBhZGQgdGhlbSBhbmQgZG8gdGhlIGxheW91dC4KKyAgICAgICAgICAgICMgSW1hZ2UuY3JlYXRlKCkgYWN0dWFsbHkgY2FsbHMgX19mb3JtYXRfZGlza3MoKSB0byBjcmVhdGUKKyAgICAgICAgICAgICMgdGhlIGRpc2sgaW1hZ2VzIGFuZCBjYXJ2ZSBvdXQgdGhlIHBhcnRpdGlvbnMsIHRoZW4KKyAgICAgICAgICAgICMgc2VsZi5hc3NlbWJsZSgpIGNhbGxzIEltYWdlLmFzc2VtYmxlKCkgd2hpY2ggY2FsbHMKKyAgICAgICAgICAgICMgX193cml0ZV9wYXJ0aXRpdGlvbigpIGZvciBlYWNoIHBhcnRpdGlvbiB0byBkZCB0aGUgZnMKKyAgICAgICAgICAgICMgaW50byB0aGUgcGFydGl0aW9ucy4KKyAgICAgICAgICAgIHBhcnQucHJlcGFyZShzZWxmLCBzZWxmLndvcmtkaXIsIHNlbGYub2VfYnVpbGRkaXIsIHNlbGYucm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RpbWdfZGlyLCBzZWxmLmtlcm5lbF9kaXIsIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKworICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmFkZF9wYXJ0aXRpb24oaW50KHBhcnQuc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmRpc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0Lm1vdW50cG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LnNvdXJjZV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5mc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNvcHRzPXBhcnQuZnNvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdD1wYXJ0LmFjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPXBhcnQuYWxpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub190YWJsZT1wYXJ0Lm5vX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPXBhcnQucGFydF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZD1wYXJ0LnV1aWQpCisKKyAgICAgICAgaWYgZnN0YWJfcGF0aDoKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGZzdGFiX3BhdGggKyAiLm9yaWciLCBmc3RhYl9wYXRoKQorCisgICAgICAgIHNlbGYuX19pbWFnZS5sYXlvdXRfcGFydGl0aW9ucyhzZWxmLnB0YWJsZV9mb3JtYXQpCisKKyAgICAgICAgc2VsZi5fX2ltZ2RpciA9IHNlbGYud29ya2RpcgorICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZnVsbF9wYXRoKHNlbGYuX19pbWdkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiQWRkaW5nIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisgICAgICAgICAgICBkaXNrX29iaiA9IGZzX3JlbGF0ZWQuRGlza0ltYWdlKGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkKKyAgICAgICAgICAgIHNlbGYuX19kaXNrc1tkaXNrX25hbWVdID0gZGlza19vYmoKKyAgICAgICAgICAgIHNlbGYuX19pbWFnZS5hZGRfZGlzayhkaXNrX25hbWUsIGRpc2tfb2JqKQorCisgICAgICAgIHNlbGYuX19pbWFnZS5jcmVhdGUoKQorCisgICAgZGVmIGFzc2VtYmxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzZW1ibGUgcGFydGl0aW9ucyBpbnRvIGRpc2sgaW1hZ2UocykKKyAgICAgICAgIiIiCisgICAgICAgIGZvciBkaXNrX25hbWUsIGRpc2sgaW4gc2VsZi5fX2ltYWdlLmRpc2tzLml0ZW1zKCk6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBzZWxmLl9mdWxsX3BhdGgoc2VsZi5fX2ltZ2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJBc3NlbWJsaW5nIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisgICAgICAgICAgICBzZWxmLl9faW1hZ2UuYXNzZW1ibGUoZnVsbF9wYXRoKQorCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRmluYWxpemUgdGhlIGRpc2sgaW1hZ2UuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIHByZXBhcmUgdGhlIGltYWdlIHRvIGJlIGJvb3RhYmxlIGJ5IGUuZy4KKyAgICAgICAgY3JlYXRpbmcgYW5kIGluc3RhbGxpbmcgYSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgIiIiCisgICAgICAgIHNvdXJjZV9wbHVnaW4gPSBzZWxmLmdldF9kZWZhdWx0X3NvdXJjZV9wbHVnaW4oKQorICAgICAgICBpZiBzb3VyY2VfcGx1Z2luOgorICAgICAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcyhzb3VyY2VfcGx1Z2luLCBkaXNrX21ldGhvZHMpCisgICAgICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvdXJjZV9tZXRob2RzWyJkb19pbnN0YWxsX2Rpc2siXShkaXNrLCBkaXNrX25hbWUsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5rZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorICAgICAgICAjIENvbXByZXNzIHRoZSBpbWFnZQorICAgICAgICBpZiBzZWxmLmNvbXByZXNzb3I6CisgICAgICAgICAgICBmb3IgZGlza19uYW1lLCBkaXNrIGluIHNlbGYuX19pbWFnZS5kaXNrcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsICJkaXJlY3QiKQorICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJDb21wcmVzc2luZyBkaXNrICVzIHdpdGggJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrX25hbWUsIHNlbGYuY29tcHJlc3NvcikpCisgICAgICAgICAgICAgICAgZXhlY19jbWQoIiVzICVzIiAlIChzZWxmLmNvbXByZXNzb3IsIGZ1bGxfcGF0aCkpCisKKyAgICBkZWYgcHJpbnRfb3V0aW1hZ2VfaW5mbyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFByaW50IHRoZSBpbWFnZShzKSBhbmQgYXJ0aWZhY3RzIHVzZWQsIGZvciB0aGUgdXNlci4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZyA9ICJUaGUgbmV3IGltYWdlKHMpIGNhbiBiZSBmb3VuZCBoZXJlOlxuIgorCisgICAgICAgIHBhcnRzID0gc2VsZi5fZ2V0X3BhcnRzKCkKKworICAgICAgICBmb3IgZGlza19uYW1lIGluIHNlbGYuX19pbWFnZS5kaXNrczoKKyAgICAgICAgICAgIGV4dGVuc2lvbiA9ICJkaXJlY3QiICsgeyJnemlwIjogIi5neiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnppcDIiOiAiLmJ6MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieHoiOiAiLnh6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiOiAiIn0uZ2V0KHNlbGYuY29tcHJlc3NvcikKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2Z1bGxfcGF0aChzZWxmLl9faW1nZGlyLCBkaXNrX25hbWUsIGV4dGVuc2lvbikKKyAgICAgICAgICAgIG1zZyArPSAnICAlc1xuXG4nICUgZnVsbF9wYXRoCisKKyAgICAgICAgbXNnICs9ICdUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBpbWFnZShzKTpcbicKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBpZiBwYXJ0LmdldF9yb290ZnMoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gJy8nOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICc6JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWZmaXggPSAnWyIlcyJdOicgJSAocGFydC5tb3VudHBvaW50IG9yIHBhcnQubGFiZWwpCisgICAgICAgICAgICBtc2cgKz0gJyAgUk9PVEZTX0RJUiVzJXNcbicgJSAoc3VmZml4LmxqdXN0KDIwKSwgcGFydC5nZXRfcm9vdGZzKCkpCisKKyAgICAgICAgbXNnICs9ICcgIEJPT1RJTUdfRElSOiAgICAgICAgICAgICAgICAgICVzXG4nICUgc2VsZi5ib290aW1nX2RpcgorICAgICAgICBtc2cgKz0gJyAgS0VSTkVMX0RJUjogICAgICAgICAgICAgICAgICAgJXNcbicgJSBzZWxmLmtlcm5lbF9kaXIKKyAgICAgICAgbXNnICs9ICcgIE5BVElWRV9TWVNST09UOiAgICAgICAgICAgICAgICVzXG4nICUgc2VsZi5uYXRpdmVfc3lzcm9vdAorCisgICAgICAgIG1zZ2VyLmluZm8obXNnKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJvb3RkZXYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBHZXQgcm9vdCBkZXZpY2UgbmFtZSB0byB1c2UgYXMgYSAncm9vdCcgcGFyYW1ldGVyCisgICAgICAgIGluIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKKyAgICAgICAgQXNzdW1lIHBhcnRpdGlvbiBvcmRlciBzYW1lIGFzIGluIHdrcworICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBzZWxmLl9nZXRfcGFydHMoKQorICAgICAgICBmb3IgbnVtLCBwYXJ0IGluIGVudW1lcmF0ZShwYXJ0cywgMSk6CisgICAgICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gIi8iOgorICAgICAgICAgICAgICAgIGlmIHBhcnQudXVpZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQQVJUVVVJRD0lcyIgJSBwYXJ0LnV1aWQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSAncCcgaWYgcGFydC5kaXNrLnN0YXJ0c3dpdGgoJ21tY2JsaycpIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgcG51bSA9IHNlbGYuX19nZXRfcGFydF9udW0obnVtLCBwYXJ0cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIvZGV2LyVzJXMlLWQiICUgKHBhcnQuZGlzaywgc3VmZml4LCBwbnVtKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fX2ltYWdlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fX2ltYWdlLmNsZWFudXAoKQorICAgICAgICAgICAgZXhjZXB0IEltYWdlRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCIlcyIgJSBlcnIpCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvX19pbml0X18ucHkgYi9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwNyBSZWQgSGF0LCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zLCBzeXMsIHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN0cmluZworCitpbXBvcnQgcHlraWNrc3RhcnQuc2VjdGlvbnMgYXMga3NzZWN0aW9ucworaW1wb3J0IHB5a2lja3N0YXJ0LmNvbW1hbmRzIGFzIGtzY29tbWFuZHMKK2ltcG9ydCBweWtpY2tzdGFydC5jb25zdGFudHMgYXMga3Njb25zdGFudHMKK2ltcG9ydCBweWtpY2tzdGFydC5lcnJvcnMgYXMga3NlcnJvcnMKK2ltcG9ydCBweWtpY2tzdGFydC5wYXJzZXIgYXMga3NwYXJzZXIKK2ltcG9ydCBweWtpY2tzdGFydC52ZXJzaW9uIGFzIGtzdmVyc2lvbgorZnJvbSBweWtpY2tzdGFydC5oYW5kbGVycy5jb250cm9sIGltcG9ydCBjb21tYW5kTWFwCitmcm9tIHB5a2lja3N0YXJ0LmhhbmRsZXJzLmNvbnRyb2wgaW1wb3J0IGRhdGFNYXAKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZXJyb3JzLCBtaXNjLCBydW5uZXIsIGZzX3JlbGF0ZWQgYXMgZnMKK2Zyb20gY3VzdG9tX2NvbW1hbmRzIGltcG9ydCB3aWNib290LCBwYXJ0aXRpb24KKworZGVmIHJlYWRfa2lja3N0YXJ0KHBhdGgpOgorICAgICIiIlBhcnNlIGEga2lja3N0YXJ0IGZpbGUgYW5kIHJldHVybiBhIEtpY2tzdGFydFBhcnNlciBpbnN0YW5jZS4KKworICAgIFRoaXMgaXMgYSBzaW1wbGUgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIHBhdGggdG8gYSBraWNrc3RhcnQgZmlsZSwKKyAgICBwYXJzZXMgaXQgYW5kIHJldHVybnMgYSBweWtpY2tzdGFydCBLaWNrc3RhcnRQYXJzZXIgaW5zdGFuY2Ugd2hpY2ggY2FuCisgICAgYmUgdGhlbiBwYXNzZWQgdG8gYW4gSW1hZ2VDcmVhdG9yIGNvbnN0cnVjdG9yLgorCisgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBhIENyZWF0b3JFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLgorICAgICIiIgorCisgICAgI3ZlcnNpb24gPSBrc3ZlcnNpb24ubWFrZVZlcnNpb24oKQorICAgICNrcyA9IGtzcGFyc2VyLktpY2tzdGFydFBhcnNlcih2ZXJzaW9uKQorCisgICAgdXNpbmdfdmVyc2lvbiA9IGtzdmVyc2lvbi5ERVZFTAorICAgIGNvbW1hbmRNYXBbdXNpbmdfdmVyc2lvbl1bImJvb3Rsb2FkZXIiXSA9IHdpY2Jvb3QuV2ljX0Jvb3Rsb2FkZXIKKyAgICBjb21tYW5kTWFwW3VzaW5nX3ZlcnNpb25dWyJwYXJ0Il0gPSBwYXJ0aXRpb24uV2ljX1BhcnRpdGlvbgorICAgIGNvbW1hbmRNYXBbdXNpbmdfdmVyc2lvbl1bInBhcnRpdGlvbiJdID0gcGFydGl0aW9uLldpY19QYXJ0aXRpb24KKyAgICBkYXRhTWFwW3VzaW5nX3ZlcnNpb25dWyJQYXJ0RGF0YSJdID0gcGFydGl0aW9uLldpY19QYXJ0RGF0YQorICAgIHN1cGVyY2xhc3MgPSBrc3ZlcnNpb24ucmV0dXJuQ2xhc3NGb3JWZXJzaW9uKHZlcnNpb249dXNpbmdfdmVyc2lvbikKKworICAgIGNsYXNzIEtTSGFuZGxlcnMoc3VwZXJjbGFzcyk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyY2xhc3MuX19pbml0X18oc2VsZiwgbWFwcGluZz1jb21tYW5kTWFwW3VzaW5nX3ZlcnNpb25dKQorCisgICAga2lja3N0YXJ0ID0ga3NwYXJzZXIuS2lja3N0YXJ0UGFyc2VyKEtTSGFuZGxlcnMoKSwgZXJyb3JzQXJlRmF0YWw9VHJ1ZSkKKworICAgIHRyeToKKyAgICAgICAga2lja3N0YXJ0LnJlYWRLaWNrc3RhcnQocGF0aCkKKyAgICBleGNlcHQgKGtzZXJyb3JzLktpY2tzdGFydFBhcnNlRXJyb3IsIGtzZXJyb3JzLktpY2tzdGFydEVycm9yKSwgZXJyOgorICAgICAgICBtc2dlci53YXJuaW5nKCJFcnJvcnMgb2NjdXJyZWQgd2hlbiBwYXJzaW5nIGtpY2tzdGFydCBmaWxlOiAlc1xuIiAlIHBhdGgpCisgICAgICAgIG1zZ2VyLmVycm9yKCIlcyIgJSBlcnIpCisKKyAgICByZXR1cm4ga2lja3N0YXJ0CisKK2RlZiBnZXRfaW1hZ2Vfc2l6ZShraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgX19zaXplID0gMAorICAgIGZvciBwYXJ0IGluIGtpY2tzdGFydC5oYW5kbGVyLnBhcnRpdGlvbi5wYXJ0aXRpb25zOgorICAgICAgICBpZiBwYXJ0Lm1vdW50cG9pbnQgPT0gIi8iIGFuZCBwYXJ0LnNpemU6CisgICAgICAgICAgICBfX3NpemUgPSBwYXJ0LnNpemUKKyAgICBpZiBfX3NpemUgPiAwOgorICAgICAgICByZXR1cm4gaW50KF9fc2l6ZSkgKiAxMDI0TAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKK2RlZiBnZXRfaW1hZ2VfZnN0eXBlKGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBmb3IgcGFydCBpbiBraWNrc3RhcnQuaGFuZGxlci5wYXJ0aXRpb24ucGFydGl0aW9uczoKKyAgICAgICAgaWYgcGFydC5tb3VudHBvaW50ID09ICIvIiBhbmQgcGFydC5mc3R5cGU6CisgICAgICAgICAgICByZXR1cm4gcGFydC5mc3R5cGUKKyAgICByZXR1cm4gZGVmYXVsdAorCitkZWYgZ2V0X2ltYWdlX2Zzb3B0cyhraWNrc3RhcnQsIGRlZmF1bHQ9Tm9uZSk6CisgICAgZm9yIHBhcnQgaW4ga2lja3N0YXJ0LmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnM6CisgICAgICAgIGlmIHBhcnQubW91bnRwb2ludCA9PSAiLyIgYW5kIHBhcnQuZnNvcHRzOgorICAgICAgICAgICAgcmV0dXJuIHBhcnQuZnNvcHRzCisgICAgcmV0dXJuIGRlZmF1bHQKKworZGVmIGdldF90aW1lb3V0KGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBpZiBub3QgaGFzYXR0cihraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLCAidGltZW91dCIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIudGltZW91dCBpcyBOb25lOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJldHVybiBpbnQoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci50aW1lb3V0KQorCitkZWYgZ2V0X2tlcm5lbF9hcmdzKGtpY2tzdGFydCwgZGVmYXVsdD0icm8gcmQubGl2ZS5pbWFnZSIpOgorICAgIGlmIG5vdCBoYXNhdHRyKGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIsICJhcHBlbmRMaW5lIik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5hcHBlbmRMaW5lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgcmV0dXJuICIlcyAlcyIgJShkZWZhdWx0LCBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUpCisKK2RlZiBnZXRfbWVudV9hcmdzKGtpY2tzdGFydCwgZGVmYXVsdD0iIik6CisgICAgaWYgbm90IGhhc2F0dHIoa2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlciwgIm1lbnVzIik6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5tZW51cyBpbiAoTm9uZSwgIiIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJldHVybiAiJXMiICUga2lja3N0YXJ0LmhhbmRsZXIuYm9vdGxvYWRlci5tZW51cworCitkZWYgZ2V0X2RlZmF1bHRfa2VybmVsKGtpY2tzdGFydCwgZGVmYXVsdD1Ob25lKToKKyAgICBpZiBub3QgaGFzYXR0cihraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLCAiZGVmYXVsdCIpOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBraWNrc3RhcnQuaGFuZGxlci5ib290bG9hZGVyLmRlZmF1bHQ6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgcmV0dXJuIGtpY2tzdGFydC5oYW5kbGVyLmJvb3Rsb2FkZXIuZGVmYXVsdAorCitkZWYgZ2V0X3BhcnRpdGlvbnMoa2lja3N0YXJ0KToKKyAgICByZXR1cm4ga2lja3N0YXJ0LmhhbmRsZXIucGFydGl0aW9uLnBhcnRpdGlvbnMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL19faW5pdF9fLnB5IGIvc2NyaXB0cy9saWIvd2ljL2tpY2tzdGFydC9jdXN0b21fY29tbWFuZHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhZTQwNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNyBAQAorZnJvbSBwYXJ0aXRpb24gaW1wb3J0IFdpY19QYXJ0aXRpb24KK2Zyb20gcGFydGl0aW9uIGltcG9ydCBXaWNfUGFydERhdGEKKworX19hbGxfXyA9ICgKKyAgICAiV2ljX1BhcnRpdGlvbiIsCisgICAgIldpY19QYXJ0RGF0YSIsCispCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9wYXJ0aXRpb24ucHkgYi9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy9wYXJ0aXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlMjVhNAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3BhcnRpdGlvbi5weQpAQCAtMCwwICsxLDUyNiBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBPcGVuRW1iZWRkZWQgcGFydGl0aW9uIG9iamVjdCBkZWZpbml0aW9ucy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdXVpZAorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uVmFsdWVFcnJvcgorCitmcm9tIHB5a2lja3N0YXJ0LmNvbW1hbmRzLnBhcnRpdGlvbiBpbXBvcnQgRkM0X1BhcnREYXRhLCBGQzRfUGFydGl0aW9uCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBtc2dlciwgcGFyc2Vfc291cmNlcGFyYW1zCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCitmcm9tIHdpYy5wbHVnaW4gaW1wb3J0IHBsdWdpbm1ncgorCitwYXJ0aXRpb25fbWV0aG9kcyA9IHsKKyAgICAiZG9fc3RhZ2VfcGFydGl0aW9uIjpOb25lLAorICAgICJkb19wcmVwYXJlX3BhcnRpdGlvbiI6Tm9uZSwKKyAgICAiZG9fY29uZmlndXJlX3BhcnRpdGlvbiI6Tm9uZSwKK30KKworY2xhc3MgV2ljX1BhcnREYXRhKEZDNF9QYXJ0RGF0YSk6CisgICAgcmVtb3ZlZEtleXdvcmRzID0gRkM0X1BhcnREYXRhLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0RGF0YS5yZW1vdmVkQXR0cnMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBGQzRfUGFydERhdGEuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmRlbGV0ZVJlbW92ZWRBdHRycygpCisgICAgICAgIHNlbGYuYWxpZ24gPSBrd2FyZ3MuZ2V0KCJhbGlnbiIsIE5vbmUpCisgICAgICAgIHNlbGYuZXh0b3B0cyA9IGt3YXJncy5nZXQoImV4dG9wdHMiLCBOb25lKQorICAgICAgICBzZWxmLnBhcnRfdHlwZSA9IGt3YXJncy5nZXQoInBhcnRfdHlwZSIsIE5vbmUpCisgICAgICAgIHNlbGYuc291cmNlID0ga3dhcmdzLmdldCgic291cmNlIiwgTm9uZSkKKyAgICAgICAgc2VsZi5zb3VyY2VwYXJhbXMgPSBrd2FyZ3MuZ2V0KCJzb3VyY2VwYXJhbXMiLCBOb25lKQorICAgICAgICBzZWxmLnJvb3RmcyA9IGt3YXJncy5nZXQoInJvb3Rmcy1kaXIiLCBOb25lKQorICAgICAgICBzZWxmLm5vX3RhYmxlID0ga3dhcmdzLmdldCgibm8tdGFibGUiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5leHRyYV9zcGFjZSA9IGt3YXJncy5nZXQoImV4dHJhLXNwYWNlIiwgIjEwTSIpCisgICAgICAgIHNlbGYub3ZlcmhlYWRfZmFjdG9yID0ga3dhcmdzLmdldCgib3ZlcmhlYWQtZmFjdG9yIiwgMS4zKQorICAgICAgICBzZWxmLl91c2VfdXVpZCA9IEZhbHNlCisgICAgICAgIHNlbGYudXVpZCA9IGt3YXJncy5nZXQoInV1aWQiLCBOb25lKQorICAgICAgICBzZWxmLnVzZV91dWlkID0ga3dhcmdzLmdldCgidXNlLXV1aWQiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5zb3VyY2VfZmlsZSA9ICIiCisgICAgICAgIHNlbGYuc2l6ZSA9IDAKKworICAgIGRlZiBfZ2V0QXJnc0FzU3RyKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBGQzRfUGFydERhdGEuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYuYWxpZ246CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLWFsaWduPSVkIiAlIHNlbGYuYWxpZ24KKyAgICAgICAgaWYgc2VsZi5leHRvcHRzOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1leHRvcHRpb25zPSVzIiAlIHNlbGYuZXh0b3B0cworICAgICAgICBpZiBzZWxmLnBhcnRfdHlwZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcGFydC10eXBlPSVzIiAlIHNlbGYucGFydF90eXBlCisgICAgICAgIGlmIHNlbGYuc291cmNlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zb3VyY2U9JXMiICUgc2VsZi5zb3VyY2UKKyAgICAgICAgICAgIGlmIHNlbGYuc291cmNlcGFyYW1zOgorICAgICAgICAgICAgICAgIHJldHZhbCArPSAiIC0tc291cmNlcGFyYW1zPSVzIiAlIHNlbGYuc291cmNlcGFyYW1zCisgICAgICAgICAgICBpZiBzZWxmLnJvb3RmczoKKyAgICAgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXJvb3Rmcy1kaXI9JXMiICUgc2VsZi5yb290ZnMKKyAgICAgICAgaWYgc2VsZi5ub190YWJsZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tbm8tdGFibGUiCisgICAgICAgIGlmIHNlbGYudXNlX3V1aWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXVzZS11dWlkIgorICAgICAgICBpZiBzZWxmLnV1aWQ6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLXV1aWQ9JXMiICUgc2VsZi51dWlkCisgICAgICAgIHJldHZhbCArPSAiIC0tZXh0cmEtc3BhY2U9JXMiICUgc2VsZi5leHRyYV9zcGFjZQorICAgICAgICByZXR2YWwgKz0gIiAtLW92ZXJoZWFkLWZhY3Rvcj0lZiIgJSBzZWxmLm92ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIHJldHVybiByZXR2YWwKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1c2VfdXVpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VzZV91dWlkCisKKyAgICBAdXNlX3V1aWQuc2V0dGVyCisgICAgZGVmIHVzZV91dWlkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fdXNlX3V1aWQgPSB2YWx1ZQorICAgICAgICBpZiB2YWx1ZSBhbmQgbm90IHNlbGYudXVpZDoKKyAgICAgICAgICAgIHNlbGYudXVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCisKKyAgICBkZWYgZ2V0X3Jvb3RmcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjZXNzb3IgZm9yIHJvb3RmcyBkaXIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJvb3RmcworCisgICAgZGVmIHNldF9yb290ZnMoc2VsZiwgcm9vdGZzKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjZXNzb3IgZm9yIGFjdHVhbCByb290ZnMgZGlyLCB3aGljaCBtdXN0IGJlIHNldCBieSBzb3VyY2UKKyAgICAgICAgcGx1Z2lucy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucm9vdGZzID0gcm9vdGZzCisKKyAgICBkZWYgZ2V0X3NpemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBY2Nlc3NvciBmb3IgcGFydGl0aW9uIHNpemUsIDAgb3IgLS1zaXplIGJlZm9yZSBzZXRfc2l6ZSgpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2l6ZQorCisgICAgZGVmIHNldF9zaXplKHNlbGYsIHNpemUpOgorICAgICAgICAiIiIKKyAgICAgICAgQWNjZXNzb3IgZm9yIGFjdHVhbCBwYXJ0aXRpb24gc2l6ZSwgd2hpY2ggbXVzdCBiZSBzZXQgYnkgc291cmNlCisgICAgICAgIHBsdWdpbnMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNpemUgPSBzaXplCisKKyAgICBkZWYgc2V0X3NvdXJjZV9maWxlKHNlbGYsIHNvdXJjZV9maWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEFjY2Vzc29yIGZvciBzb3VyY2VfZmlsZSwgdGhlIGxvY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgcGFydGl0aW9uCisgICAgICAgIGltYWdlLCB3aGljaCBtdXN0IGJlIHNldCBieSBzb3VyY2UgcGx1Z2lucy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSBzb3VyY2VfZmlsZQorCisgICAgZGVmIGdldF9leHRyYV9ibG9ja19jb3VudChzZWxmLCBjdXJyZW50X2Jsb2Nrcyk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgLS1zaXplIHBhcmFtIGlzIHJlZmxlY3RlZCBpbiBzZWxmLnNpemUgKGluIGtCKSwgYW5kIHdlIGFscmVhZHkKKyAgICAgICAgaGF2ZSBjdXJyZW50X2Jsb2NrcyAoMWspIGJsb2NrcywgY2FsY3VsYXRlIGFuZCByZXR1cm4gdGhlCisgICAgICAgIG51bWJlciBvZiAoMWspIGJsb2NrcyB3ZSBuZWVkIHRvIGFkZCB0byBnZXQgdG8gLS1zaXplLCAwIGlmCisgICAgICAgIHdlJ3JlIGFscmVhZHkgdGhlcmUgb3IgYmV5b25kLgorICAgICAgICAiIiIKKyAgICAgICAgbXNnZXIuZGVidWcoIlJlcXVlc3RlZCBwYXJ0aXRpb24gc2l6ZSBmb3IgJXM6ICVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHNlbGYubW91bnRwb2ludCwgc2VsZi5zaXplKSkKKworICAgICAgICBpZiBub3Qgc2VsZi5zaXplOgorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICByZXF1ZXN0ZWRfYmxvY2tzID0gc2VsZi5zaXplCisKKyAgICAgICAgbXNnZXIuZGVidWcoIlJlcXVlc3RlZCBibG9ja3MgJWQsIGN1cnJlbnRfYmxvY2tzICVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3RlZF9ibG9ja3MsIGN1cnJlbnRfYmxvY2tzKSkKKworICAgICAgICBpZiByZXF1ZXN0ZWRfYmxvY2tzID4gY3VycmVudF9ibG9ja3M6CisgICAgICAgICAgICByZXR1cm4gcmVxdWVzdGVkX2Jsb2NrcyAtIGN1cnJlbnRfYmxvY2tzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgY3JlYXRvciwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgaW5kaXZpZHVhbCBwYXJ0aXRpb25zLCBkZXBlbmRpbmcgb24KKyAgICAgICAgcGFydGl0aW9uIGNvbW1hbmQgcGFyYW1ldGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc291cmNlcGFyYW1zX2RpY3QgPSB7fQorCisgICAgICAgIGlmIHNlbGYuc291cmNlcGFyYW1zOgorICAgICAgICAgICAgc2VsZi5zb3VyY2VwYXJhbXNfZGljdCA9IHBhcnNlX3NvdXJjZXBhcmFtcyhzZWxmLnNvdXJjZXBhcmFtcykKKworICAgICAgICBpZiBub3Qgc2VsZi5zb3VyY2U6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaXplOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJUaGUgJXMgcGFydGl0aW9uIGhhcyBhIHNpemUgb2YgemVyby4gIFBsZWFzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZnkgYSBub24temVybyAtLXNpemUgZm9yIHRoYXQgcGFydGl0aW9uLiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb3VudHBvaW50KQorICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUgYW5kIHNlbGYuZnN0eXBlID09ICJzd2FwIjoKKyAgICAgICAgICAgICAgICBzZWxmLnByZXBhcmVfc3dhcF9wYXJ0aXRpb24oY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorICAgICAgICAgICAgZWxpZiBzZWxmLmZzdHlwZToKKyAgICAgICAgICAgICAgICByb290ZnMgPSAiJXMvZnNfJXMuJXMuJXMiICUgKGNyX3dvcmtkaXIsIHNlbGYubGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5mc3R5cGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocm9vdGZzKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHJvb3RmcykKKyAgICAgICAgICAgICAgICBmb3IgcHJlZml4IGluICgiZXh0IiwgImJ0cmZzIiwgInZmYXQiLCAic3F1YXNoZnMiKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fIiArIHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZChyb290ZnMsIG9lX2J1aWxkZGlyLCBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSByb290ZnMKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwbHVnaW5zID0gcGx1Z2lubWdyLmdldF9zb3VyY2VfcGx1Z2lucygpCisKKyAgICAgICAgaWYgc2VsZi5zb3VyY2Ugbm90IGluIHBsdWdpbnM6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiVGhlICclcycgLS1zb3VyY2Ugc3BlY2lmaWVkIGZvciAlcyBkb2Vzbid0IGV4aXN0LlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAiU2VlICd3aWMgbGlzdCBzb3VyY2UtcGx1Z2lucycgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUiCisgICAgICAgICAgICAgICAgICAgICAgICAiIC0tc291cmNlcy5cblx0U2VlICd3aWMgaGVscCBzb3VyY2UtcGx1Z2lucycgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZXRhaWxzIG9uIGFkZGluZyBhIG5ldyBzb3VyY2UgcGx1Z2luLiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zb3VyY2UsIHNlbGYubW91bnRwb2ludCkpCisKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHMgPSBwbHVnaW5tZ3IuZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcyhcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlLCBwYXJ0aXRpb25fbWV0aG9kcykKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHNbImRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24iXShzZWxmLCBzZWxmLnNvdXJjZXBhcmFtc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCkKKyAgICAgICAgc2VsZi5fc291cmNlX21ldGhvZHNbImRvX3N0YWdlX3BhcnRpdGlvbiJdKHNlbGYsIHNlbGYuc291cmNlcGFyYW1zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorICAgICAgICBzZWxmLl9zb3VyY2VfbWV0aG9kc1siZG9fcHJlcGFyZV9wYXJ0aXRpb24iXShzZWxmLCBzZWxmLnNvdXJjZXBhcmFtc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX2Zyb21fZnNfaW1hZ2Uoc2VsZiwgY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBIYW5kbGUgYW4gYWxyZWFkeS1jcmVhdGVkIHBhcnRpdGlvbiBlLmcuIHh4eC5leHQzCisgICAgICAgICIiIgorICAgICAgICByb290ZnMgPSBvZV9idWlsZGRpcgorICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgcm9vdGZzCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgcm9vdGZzX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHNlbGYuc2l6ZSA9IHJvb3Rmc19zaXplCisgICAgICAgIHNlbGYuc291cmNlX2ZpbGUgPSByb290ZnMKKworICAgIGRlZiBwcmVwYXJlX3Jvb3RmcyhzZWxmLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcm9vdGZzX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIHJvb3RmcyBwYXJ0aXRpb24gaS5lLiBjcmVhdGUgYSBwYXJ0aXRpb24KKyAgICAgICAgYW5kIGZpbGwgaXQgZnJvbSBhIC9yb290ZnMgZGlyLgorCisgICAgICAgIEN1cnJlbnRseSBoYW5kbGVzIGV4dDIvMy80LCBidHJmcyBhbmQgdmZhdC4KKyAgICAgICAgIiIiCisgICAgICAgIHBfcHJlZml4ID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19QUkVGSVgiLCAiJXMvdXNyIiAlIG5hdGl2ZV9zeXNyb290KQorICAgICAgICBwX2xvY2Fsc3RhdGVkaXIgPSBvcy5lbnZpcm9uLmdldCgiUFNFVURPX0xPQ0FMU1RBVEVESVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvLi4vcHNldWRvIiAlIHJvb3Rmc19kaXIpCisgICAgICAgIHBfcGFzc3dkID0gb3MuZW52aXJvbi5nZXQoIlBTRVVET19QQVNTV0QiLCByb290ZnNfZGlyKQorICAgICAgICBwX25vc3ltbGlua2V4cCA9IG9zLmVudmlyb24uZ2V0KCJQU0VVRE9fTk9TWU1MSU5LRVhQIiwgIjEiKQorICAgICAgICBwc2V1ZG8gPSAiZXhwb3J0IFBTRVVET19QUkVGSVg9JXM7IiAlIHBfcHJlZml4CisgICAgICAgIHBzZXVkbyArPSAiZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPSVzOyIgJSBwX2xvY2Fsc3RhdGVkaXIKKyAgICAgICAgcHNldWRvICs9ICJleHBvcnQgUFNFVURPX1BBU1NXRD0lczsiICUgcF9wYXNzd2QKKyAgICAgICAgcHNldWRvICs9ICJleHBvcnQgUFNFVURPX05PU1lNTElOS0VYUD0lczsiICUgcF9ub3N5bWxpbmtleHAKKyAgICAgICAgcHNldWRvICs9ICIlcy91c3IvYmluL3BzZXVkbyAiICUgbmF0aXZlX3N5c3Jvb3QKKworICAgICAgICByb290ZnMgPSAiJXMvcm9vdGZzXyVzLiVzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubywgc2VsZi5mc3R5cGUpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHJvb3Rmcyk6CisgICAgICAgICAgICBvcy5yZW1vdmUocm9vdGZzKQorCisgICAgICAgIGZvciBwcmVmaXggaW4gKCJleHQiLCAiYnRyZnMiLCAidmZhdCIsICJzcXVhc2hmcyIpOgorICAgICAgICAgICAgaWYgc2VsZi5mc3R5cGUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgInByZXBhcmVfcm9vdGZzXyIgKyBwcmVmaXgpCisgICAgICAgICAgICAgICAgbWV0aG9kKHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pCisKKyAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZV9maWxlID0gcm9vdGZzCisKKyAgICAgICAgICAgICAgICAjIGdldCB0aGUgcm9vdGZzIHNpemUgaW4gdGhlIHJpZ2h0IHVuaXRzIGZvciBraWNrc3RhcnQgKGtCKQorICAgICAgICAgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSByb290ZnMKKyAgICAgICAgICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgICAgICAgICAgc2VsZi5zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgcHJlcGFyZV9yb290ZnNfZXh0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYW4gZXh0Mi8zLzQgcm9vdGZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGR1X2NtZCA9ICJkdSAta3MgJXMiICUgcm9vdGZzX2RpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGFjdHVhbF9yb290ZnNfc2l6ZSA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmdldF9leHRyYV9ibG9ja19jb3VudChhY3R1YWxfcm9vdGZzX3NpemUpCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IHNlbGYuZXh0cmFfc3BhY2U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmV4dHJhX3NwYWNlCisKKyAgICAgICAgcm9vdGZzX3NpemUgPSBhY3R1YWxfcm9vdGZzX3NpemUgKyBleHRyYV9ibG9ja3MKKyAgICAgICAgcm9vdGZzX3NpemUgKj0gc2VsZi5vdmVyaGVhZF9mYWN0b3IKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBzZWxmLm1vdW50cG9pbnQsIHJvb3Rmc19zaXplKSkKKworICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTEwMjQgc2Vlaz0lZCBjb3VudD0wIGJzPTFrIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHJvb3Rmc19zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgZXh0cmFfaW1hZ2VjbWQgPSAiLWkgODE5MiIKKworICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1GICVzICVzICVzIC1kICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgZXh0cmFfaW1hZ2VjbWQsIHJvb3RmcywgbGFiZWxfc3RyLCByb290ZnNfZGlyKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQocHNldWRvICsgbWtmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIHByZXBhcmVfcm9vdGZzX2J0cmZzKHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBwc2V1ZG8pOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIGJ0cmZzIHJvb3RmcyBwYXJ0aXRpb24uCisKKyAgICAgICAgQ3VycmVudGx5IGhhbmRsZXMgZXh0Mi8zLzQgYW5kIGJ0cmZzLgorICAgICAgICAiIiIKKyAgICAgICAgZHVfY21kID0gImR1IC1rcyAlcyIgJSByb290ZnNfZGlyCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYWN0dWFsX3Jvb3Rmc19zaXplID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZ2V0X2V4dHJhX2Jsb2NrX2NvdW50KGFjdHVhbF9yb290ZnNfc2l6ZSkKKyAgICAgICAgaWYgZXh0cmFfYmxvY2tzIDwgc2VsZi5leHRyYV9zcGFjZToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IHNlbGYuZXh0cmFfc3BhY2UKKworICAgICAgICByb290ZnNfc2l6ZSA9IGFjdHVhbF9yb290ZnNfc2l6ZSArIGV4dHJhX2Jsb2NrcworICAgICAgICByb290ZnNfc2l6ZSAqPSBzZWxmLm92ZXJoZWFkX2ZhY3RvcgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgcm9vdGZzX3NpemUpKQorCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MTAyNCBzZWVrPSVkIGNvdW50PTAgYnM9MWsiICUgXAorICAgICAgICAgICAgKHJvb3Rmcywgcm9vdGZzX3NpemUpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBsYWJlbF9zdHIgPSAiIgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1MICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBta2ZzX2NtZCA9ICJta2ZzLiVzIC1iICVkIC1yICVzICVzICVzIiAlIFwKKyAgICAgICAgICAgIChzZWxmLmZzdHlwZSwgcm9vdGZzX3NpemUgKiAxMDI0LCByb290ZnNfZGlyLCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHBzZXVkbyArIG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc192ZmF0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QsIHBzZXVkbyk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGNvbnRlbnQgZm9yIGEgdmZhdCByb290ZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMiICUgcm9vdGZzX2RpcgorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGJsb2NrcyA9IGludChvdXQuc3BsaXQoKVswXSkKKworICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmdldF9leHRyYV9ibG9ja19jb3VudChibG9ja3MpCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IHNlbGYuZXh0cmFfc3BhY2U6CisgICAgICAgICAgICBleHRyYV9ibG9ja3MgPSBzZWxmLmV4dHJhX3NwYWNlCisKKyAgICAgICAgYmxvY2tzICs9IGV4dHJhX2Jsb2NrcworCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAlZCBleHRyYSBibG9ja3MgdG8gJXMgdG8gZ2V0IHRvICVkIHRvdGFsIGJsb2NrcyIgJSBcCisgICAgICAgICAgICAgICAgICAgIChleHRyYV9ibG9ja3MsIHNlbGYubW91bnRwb2ludCwgYmxvY2tzKSkKKworICAgICAgICAjIEVuc3VyZSB0b3RhbCBzZWN0b3JzIGlzIGFuIGludGVncmFsIG51bWJlciBvZiBzZWN0b3JzIHBlcgorICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisgICAgICAgICMgZ2VuZXJhdGUgaW1hZ2VzIHdpdGggMzIgc2VjdG9ycyBwZXIgdHJhY2suIFRoaXMgY2FsY3VsYXRpb24KKyAgICAgICAgIyBpcyBkb25lIGluIGJsb2NrcywgdGh1cyB0aGUgbW9kIGJ5IDE2IGluc3RlYWQgb2YgMzIuIEFwcGx5CisgICAgICAgICMgc2VjdG9yIGNvdW50IGZpeCBvbmx5IHdoZW4gbmVlZGVkLgorICAgICAgICBpZiBibG9ja3MgJSAxNiAhPSAwOgorICAgICAgICAgICAgYmxvY2tzICs9ICgxNiAtIChibG9ja3MgJSAxNikpCisKKyAgICAgICAgbGFiZWxfc3RyID0gIi1uIGJvb3QiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLW4gJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIGRvc2ZzX2NtZCA9ICJta2Rvc2ZzICVzIC1TIDUxMiAtQyAlcyAlZCIgJSAobGFiZWxfc3RyLCByb290ZnMsIGJsb2NrcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzLyogOjovIiAlIChyb290ZnMsIHJvb3Rmc19kaXIpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtY29weV9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgcm9vdGZzCisgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgIGRlZiBwcmVwYXJlX3Jvb3Rmc19zcXVhc2hmcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwgcHNldWRvKToKKyAgICAgICAgIiIiCisgICAgICAgIFByZXBhcmUgY29udGVudCBmb3IgYSBzcXVhc2hmcyByb290ZnMgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgc3F1YXNoZnNfY21kID0gIm1rc3F1YXNoZnMgJXMgJXMgLW5vYXBwZW5kIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKHBzZXVkbyArIHNxdWFzaGZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgcHJlcGFyZV9lbXB0eV9wYXJ0aXRpb25fZXh0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IGV4dDIvMy80IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHNlbGYuc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGV4dHJhX2ltYWdlY21kID0gIi1pIDgxOTIiCisKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisKKyAgICAgICAgbWtmc19jbWQgPSAibWtmcy4lcyAtRiAlcyAlcyAlcyIgJSBcCisgICAgICAgICAgICAoc2VsZi5mc3R5cGUsIGV4dHJhX2ltYWdlY21kLCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9idHJmcyhzZWxmLCByb290ZnMsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGFuIGVtcHR5IGJ0cmZzIHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGRkX2NtZCA9ICJkZCBpZj0vZGV2L3plcm8gb2Y9JXMgYnM9MWsgc2Vlaz0lZCBjb3VudD0wIiAlIFwKKyAgICAgICAgICAgIChyb290ZnMsIHNlbGYuc2l6ZSkKKyAgICAgICAgZXhlY19jbWQoZGRfY21kKQorCisgICAgICAgIGxhYmVsX3N0ciA9ICIiCisgICAgICAgIGlmIHNlbGYubGFiZWw6CisgICAgICAgICAgICBsYWJlbF9zdHIgPSAiLUwgJXMiICUgc2VsZi5sYWJlbAorCisgICAgICAgIG1rZnNfY21kID0gIm1rZnMuJXMgLWIgJWQgJXMgJXMiICUgXAorICAgICAgICAgICAgKHNlbGYuZnN0eXBlLCBzZWxmLnNpemUgKiAxMDI0LCBsYWJlbF9zdHIsIHJvb3RmcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1rZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl92ZmF0KHNlbGYsIHJvb3Rmcywgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhbiBlbXB0eSB2ZmF0IHBhcnRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGJsb2NrcyA9IHNlbGYuc2l6ZQorCisgICAgICAgIGxhYmVsX3N0ciA9ICItbiBib290IgorICAgICAgICBpZiBzZWxmLmxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RyID0gIi1uICVzIiAlIHNlbGYubGFiZWwKKworICAgICAgICBkb3Nmc19jbWQgPSAibWtkb3NmcyAlcyAtUyA1MTIgLUMgJXMgJWQiICUgKGxhYmVsX3N0ciwgcm9vdGZzLCBibG9ja3MpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgcm9vdGZzCisgICAgICAgIGV4ZWNfY21kKGNobW9kX2NtZCkKKworICAgIGRlZiBwcmVwYXJlX2VtcHR5X3BhcnRpdGlvbl9zcXVhc2hmcyhzZWxmLCBjcl93b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhbiBlbXB0eSBzcXVhc2hmcyBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBtc2dlci53YXJuaW5nKCJDcmVhdGluZyBvZiBhbiBlbXB0eSBzcXVhc2hmcyAlcyBwYXJ0aXRpb24gd2FzIGF0dGVtcHRlZC4gIiBcCisgICAgICAgICAgICAgICAgICAgICAgIlByb2NlZWRpbmcgYXMgcmVxdWVzdGVkLiIgJSBzZWxmLm1vdW50cG9pbnQpCisKKyAgICAgICAgcGF0aCA9ICIlcy9mc18lcy4lcyIgJSAoY3Jfd29ya2Rpciwgc2VsZi5sYWJlbCwgc2VsZi5mc3R5cGUpCisgICAgICAgIG9zLnBhdGguaXNmaWxlKHBhdGgpIGFuZCBvcy5yZW1vdmUocGF0aCkKKworICAgICAgICAjIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBzcXVhc2hmcyB3aXRob3V0IHNvdXJjZSBkYXRhLAorICAgICAgICAjIHRodXMgcHJlcGFyZSBhbiBlbXB0eSB0ZW1wIGRpciB0aGF0IGlzIHVzZWQgYXMgc291cmNlCisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgIHNxdWFzaGZzX2NtZCA9ICJta3NxdWFzaGZzICVzICVzIC1ub2FwcGVuZCIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICh0bXBkaXIsIHBhdGgpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChzcXVhc2hmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG9zLnJtZGlyKHRtcGRpcikKKworICAgICAgICAjIGdldCB0aGUgcm9vdGZzIHNpemUgaW4gdGhlIHJpZ2h0IHVuaXRzIGZvciBraWNrc3RhcnQgKGtCKQorICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgcGF0aAorICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGZzX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHNlbGYuc2l6ZSA9IGZzX3NpemUKKworICAgIGRlZiBwcmVwYXJlX3N3YXBfcGFydGl0aW9uKHNlbGYsIGNyX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgc3dhcCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gIiVzL2ZzLiVzIiAlIChjcl93b3JrZGlyLCBzZWxmLmZzdHlwZSkKKworICAgICAgICBkZF9jbWQgPSAiZGQgaWY9L2Rldi96ZXJvIG9mPSVzIGJzPTFrIHNlZWs9JWQgY291bnQ9MCIgJSBcCisgICAgICAgICAgICAocGF0aCwgc2VsZi5zaXplKQorICAgICAgICBleGVjX2NtZChkZF9jbWQpCisKKyAgICAgICAgaW1wb3J0IHV1aWQKKyAgICAgICAgbGFiZWxfc3RyID0gIiIKKyAgICAgICAgaWYgc2VsZi5sYWJlbDoKKyAgICAgICAgICAgIGxhYmVsX3N0ciA9ICItTCAlcyIgJSBzZWxmLmxhYmVsCisgICAgICAgIG1rc3dhcF9jbWQgPSAibWtzd2FwICVzIC1VICVzICVzIiAlIChsYWJlbF9zdHIsIHN0cih1dWlkLnV1aWQxKCkpLCBwYXRoKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWtzd2FwX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKworY2xhc3MgV2ljX1BhcnRpdGlvbihGQzRfUGFydGl0aW9uKToKKyAgICByZW1vdmVkS2V5d29yZHMgPSBGQzRfUGFydGl0aW9uLnJlbW92ZWRLZXl3b3JkcworICAgIHJlbW92ZWRBdHRycyA9IEZDNF9QYXJ0aXRpb24ucmVtb3ZlZEF0dHJzCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgZGVmIG92ZXJoZWFkX2NiKG9wdGlvbiwgb3B0X3N0ciwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgICAgICBpZiB2YWx1ZSA8IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigiT3B0aW9uICVzOiBpbnZhbGlkIHZhbHVlOiAlciIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uLCB2YWx1ZSkpCisgICAgICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsIG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgICAgICBwYXJzZXIgPSBGQzRfUGFydGl0aW9uLl9nZXRQYXJzZXIoc2VsZikKKworICAgICAgICAjIFRoZSBhbGlnbm1lbnQgdmFsdWUgaXMgZ2l2ZW4gaW4ga0J5dGVzLiBlLmcuLCB2YWx1ZSA4IG1lYW5zIHRoYXQKKyAgICAgICAgIyB0aGUgcGFydGl0aW9uIGlzIGFsaWduZWQgdG8gc3RhcnQgZnJvbSA4MDk2IGJ5dGUgYm91bmRhcnkuCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWFsaWduIiwgdHlwZT0iaW50IiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImFsaWduIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1leHRvcHRpb25zIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImV4dG9wdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXBhcnQtdHlwZSIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJwYXJ0X3R5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUpCisgICAgICAgICMgdXNlIHNwZWNpZmllZCBzb3VyY2UgZmlsZSB0byBmaWxsIHRoZSBwYXJ0aXRpb24KKyAgICAgICAgIyBhbmQgY2FsY3VsYXRlIHBhcnRpdGlvbiBzaXplCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXNvdXJjZSIsIHR5cGU9InN0cmluZyIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzb3VyY2UiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgICMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW09dmFsdWUgcGFpcnMKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc291cmNlcGFyYW1zIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InNvdXJjZXBhcmFtcyIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgIyB1c2Ugc3BlY2lmaWVkIHJvb3RmcyBwYXRoIHRvIGZpbGwgdGhlIHBhcnRpdGlvbgorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1yb290ZnMtZGlyIiwgdHlwZT0ic3RyaW5nIiwgYWN0aW9uPSJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InJvb3RmcyIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgIyB3ZXRoZXIgdG8gYWRkIHRoZSBwYXJ0aXRpb24gaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1uby10YWJsZSIsIGRlc3Q9Im5vX3RhYmxlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSkKKyAgICAgICAgIyBleHRyYSBzcGFjZSBiZXlvbmQgdGhlIHBhcnRpdGlvbiBzaXplCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWV4dHJhLXNwYWNlIiwgZGVzdD0iZXh0cmFfc3BhY2UiLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2l6ZSIsIG5hcmdzPTEsIGRlZmF1bHQ9IjEwTSIpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW92ZXJoZWFkLWZhY3RvciIsIGRlc3Q9Im92ZXJoZWFkX2ZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1vdmVyaGVhZF9jYiwgdHlwZT0iZmxvYXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncz0xLCBkZWZhdWx0PTEuMykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLXV1aWQiLCBkZXN0PSJ1c2VfdXVpZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLXV1aWQiKQorCisgICAgICAgIHJldHVybiBwYXJzZXIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9raWNrc3RhcnQvY3VzdG9tX2NvbW1hbmRzL3dpY2Jvb3QucHkgYi9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy93aWNib290LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZTE4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMva2lja3N0YXJ0L2N1c3RvbV9jb21tYW5kcy93aWNib290LnB5CkBAIC0wLDAgKzEsNjAgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgT3BlbkVtYmVkZGVkIGJvb3Rsb2FkZXIgb2JqZWN0IGRlZmluaXRpb25zLgorIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKK2Zyb20gcHlraWNrc3RhcnQuY29tbWFuZHMuYm9vdGxvYWRlciBpbXBvcnQgRjhfQm9vdGxvYWRlcgorCitjbGFzcyBXaWNfQm9vdGxvYWRlcihGOF9Cb290bG9hZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eT0xMCwgYXBwZW5kTGluZT0iIiwgZHJpdmVvcmRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBmb3JjZUxCQT1GYWxzZSwgbG9jYXRpb249IiIsIG1kNXBhc3M9IiIsIHBhc3N3b3JkPSIiLAorICAgICAgICAgICAgICAgICB1cGdyYWRlPUZhbHNlLCBtZW51cz0iIik6CisgICAgICAgIEY4X0Jvb3Rsb2FkZXIuX19pbml0X18oc2VsZiwgd3JpdGVQcmlvcml0eSwgYXBwZW5kTGluZSwgZHJpdmVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUxCQSwgbG9jYXRpb24sIG1kNXBhc3MsIHBhc3N3b3JkLCB1cGdyYWRlKQorCisgICAgICAgIHNlbGYubWVudXMgPSAiIgorICAgICAgICBzZWxmLnB0YWJsZSA9ICJtc2RvcyIKKyAgICAgICAgc2VsZi5zb3VyY2UgPSAiIgorCisgICAgZGVmIF9nZXRBcmdzQXNTdHIoc2VsZik6CisgICAgICAgIHJldHZhbCA9IEY4X0Jvb3Rsb2FkZXIuX2dldEFyZ3NBc1N0cihzZWxmKQorCisgICAgICAgIGlmIHNlbGYubWVudXMgPT0gIiI6CisgICAgICAgICAgICByZXR2YWwgKz0gIiAtLW1lbnVzPSVzIiAlKHNlbGYubWVudXMsKQorICAgICAgICBpZiBzZWxmLnB0YWJsZToKKyAgICAgICAgICAgIHJldHZhbCArPSAiIC0tcHRhYmxlPVwiJXNcIiIgJShzZWxmLnB0YWJsZSwpCisgICAgICAgIGlmIHNlbGYuc291cmNlOgorICAgICAgICAgICAgcmV0dmFsICs9ICIgLS1zb3VyY2U9JXMiICUgc2VsZi5zb3VyY2UKKworICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICBkZWYgX2dldFBhcnNlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRjhfQm9vdGxvYWRlci5fZ2V0UGFyc2VyKHNlbGYpCisgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLW1lbnVzIiwgZGVzdD0ibWVudXMiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1wdGFibGUiLCBkZXN0PSJwdGFibGUiLCBjaG9pY2VzPSgibXNkb3MiLCAiZ3B0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Im1zZG9zIikKKyAgICAgICAgIyB1c2Ugc3BlY2lmaWVkIHNvdXJjZSBwbHVnaW4gdG8gaW1wbGVtZW50IGJvb3Rsb2FkZXItc3BlY2lmaWMgbWV0aG9kcworICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1zb3VyY2UiLCB0eXBlPSJzdHJpbmciLCBhY3Rpb249InN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJzb3VyY2UiLCBkZWZhdWx0PU5vbmUpCisgICAgICAgIHJldHVybiBwYXJzZXIKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5IGIvc2NyaXB0cy9saWIvd2ljL21zZ2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Mzc1NTQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvbXNnZXIucHkKQEAgLTAsMCArMSwzMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMgdmltOiBhaSB0cz00IHN0cz00IGV0IHN3PTQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKKworX19BTExfXyA9IFsnc2V0X21vZGUnLAorICAgICAgICAgICAnZ2V0X2xvZ2xldmVsJywKKyAgICAgICAgICAgJ3NldF9sb2dsZXZlbCcsCisgICAgICAgICAgICdzZXRfbG9nZmlsZScsCisgICAgICAgICAgICdyYXcnLAorICAgICAgICAgICAnZGVidWcnLAorICAgICAgICAgICAndmVyYm9zZScsCisgICAgICAgICAgICdpbmZvJywKKyAgICAgICAgICAgJ3dhcm5pbmcnLAorICAgICAgICAgICAnZXJyb3InLAorICAgICAgICAgICAnYXNrJywKKyAgICAgICAgICAgJ3BhdXNlJywKKyAgICAgICAgICBdCisKKyMgQ09MT1JzIGluIEFOU0kKK0lORk9fQ09MT1IgPSAzMiAjIGdyZWVuCitXQVJOX0NPTE9SID0gMzMgIyB5ZWxsb3cKK0VSUl9DT0xPUiA9IDMxICMgcmVkCitBU0tfQ09MT1IgPSAzNCAjIGJsdWUKK05PX0NPTE9SID0gMAorCitQUkVGSVhfUkUgPSByZS5jb21waWxlKCdePCguKj8pPlxzKiguKiknLCByZS5TKQorCitJTlRFUkFDVElWRSA9IFRydWUKKworTE9HX0xFVkVMID0gMQorTE9HX0xFVkVMUyA9IHsKKyAgICAncXVpZXQnOiAwLAorICAgICdub3JtYWwnOiAxLAorICAgICd2ZXJib3NlJzogMiwKKyAgICAnZGVidWcnOiAzLAorICAgICduZXZlcic6IDQsCit9CisKK0xPR19GSUxFX0ZQID0gTm9uZQorTE9HX0NPTlRFTlQgPSAnJworQ0FUQ0hFUlJfQlVGRklMRV9GRCA9IC0xCitDQVRDSEVSUl9CVUZGSUxFX1BBVEggPSBOb25lCitDQVRDSEVSUl9TQVZFRF8yID0gLTEKKworZGVmIF9nZW5lcmFsX3ByaW50KGhlYWQsIGNvbG9yLCBtc2c9Tm9uZSwgc3RyZWFtPU5vbmUsIGxldmVsPSdub3JtYWwnKToKKyAgICBnbG9iYWwgTE9HX0NPTlRFTlQKKyAgICBpZiBub3Qgc3RyZWFtOgorICAgICAgICBzdHJlYW0gPSBzeXMuc3Rkb3V0CisKKyAgICBpZiBMT0dfTEVWRUxTW2xldmVsXSA+IExPR19MRVZFTDoKKyAgICAgICAgIyBza2lwCisgICAgICAgIHJldHVybgorCisgICAgIyBlbmNvZGUgcmF3ICd1bmljb2RlJyBzdHIgdG8gdXRmOCBlbmNvZGVkIHN0cgorICAgIGlmIG1zZyBhbmQgaXNpbnN0YW5jZShtc2csIHVuaWNvZGUpOgorICAgICAgICBtc2cgPSBtc2cuZW5jb2RlKCd1dGYtOCcsICdpZ25vcmUnKQorCisgICAgZXJyb3Jtc2cgPSAnJworICAgIGlmIENBVENIRVJSX0JVRkZJTEVfRkQgPiAwOgorICAgICAgICBzaXplID0gb3MubHNlZWsoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgMCwgb3MuU0VFS19FTkQpCisgICAgICAgIG9zLmxzZWVrKENBVENIRVJSX0JVRkZJTEVfRkQsIDAsIG9zLlNFRUtfU0VUKQorICAgICAgICBlcnJvcm1zZyA9IG9zLnJlYWQoQ0FUQ0hFUlJfQlVGRklMRV9GRCwgc2l6ZSkKKyAgICAgICAgb3MuZnRydW5jYXRlKENBVENIRVJSX0JVRkZJTEVfRkQsIDApCisKKyAgICAjIGFwcGVuZCBlcnJvciBtc2cgdG8gTE9HCisgICAgaWYgZXJyb3Jtc2c6CisgICAgICAgIExPR19DT05URU5UICs9IGVycm9ybXNnCisKKyAgICAjIGFwcGVuZCBub3JtYWwgbXNnIHRvIExPRworICAgIHNhdmVfbXNnID0gbXNnLnN0cmlwKCkgaWYgbXNnIGVsc2UgTm9uZQorICAgIGlmIHNhdmVfbXNnOgorICAgICAgICB0aW1lc3RyID0gdGltZS5zdHJmdGltZSgiWyVtLyVkICVIOiVNOiVTICVaXSAiLCB0aW1lLmxvY2FsdGltZSgpKQorICAgICAgICBMT0dfQ09OVEVOVCArPSB0aW1lc3RyICsgc2F2ZV9tc2cgKyAnXG4nCisKKyAgICBpZiBlcnJvcm1zZzoKKyAgICAgICAgX2NvbG9yX3ByaW50KCcnLCBOT19DT0xPUiwgZXJyb3Jtc2csIHN0cmVhbSwgbGV2ZWwpCisKKyAgICBfY29sb3JfcHJpbnQoaGVhZCwgY29sb3IsIG1zZywgc3RyZWFtLCBsZXZlbCkKKworZGVmIF9jb2xvcl9wcmludChoZWFkLCBjb2xvciwgbXNnLCBzdHJlYW0sIGxldmVsKToKKyAgICBjb2xvcmVkID0gVHJ1ZQorICAgIGlmIGNvbG9yID09IE5PX0NPTE9SIG9yIFwKKyAgICAgICBub3Qgc3RyZWFtLmlzYXR0eSgpIG9yIFwKKyAgICAgICBvcy5nZXRlbnYoJ0FOU0lfQ09MT1JTX0RJU0FCTEVEJykgaXMgbm90IE5vbmU6CisgICAgICAgIGNvbG9yZWQgPSBGYWxzZQorCisgICAgaWYgaGVhZC5zdGFydHN3aXRoKCdccicpOgorICAgICAgICAjIG5lZWQgbm90IFxuIGF0IGxhc3QKKyAgICAgICAgbmV3bGluZSA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgbmV3bGluZSA9IFRydWUKKworICAgIGlmIGNvbG9yZWQ6CisgICAgICAgIGhlYWQgPSAnXDAzM1slZG0lczpcMDMzWzBtICcgJShjb2xvciwgaGVhZCkKKyAgICAgICAgaWYgbm90IG5ld2xpbmU6CisgICAgICAgICAgICAjIEVTQyBjbWQgdG8gY2xlYXIgbGluZQorICAgICAgICAgICAgaGVhZCA9ICdcMDMzWzJLJyArIGhlYWQKKyAgICBlbHNlOgorICAgICAgICBpZiBoZWFkOgorICAgICAgICAgICAgaGVhZCArPSAnOiAnCisgICAgICAgICAgICBpZiBoZWFkLnN0YXJ0c3dpdGgoJ1xyJyk6CisgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQubHN0cmlwKCkKKyAgICAgICAgICAgICAgICBuZXdsaW5lID0gVHJ1ZQorCisgICAgaWYgbXNnIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1zZywgdW5pY29kZSk6CisgICAgICAgICAgICBtc2cgPSBtc2cuZW5jb2RlKCd1dGY4JywgJ2lnbm9yZScpCisKKyAgICAgICAgc3RyZWFtLndyaXRlKCclcyVzJyAlIChoZWFkLCBtc2cpKQorICAgICAgICBpZiBuZXdsaW5lOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKCdcbicpCisKKyAgICBzdHJlYW0uZmx1c2goKQorCitkZWYgX2NvbG9yX3BlcnJvcihoZWFkLCBjb2xvciwgbXNnLCBsZXZlbD0nbm9ybWFsJyk6CisgICAgaWYgQ0FUQ0hFUlJfQlVGRklMRV9GRCA+IDA6CisgICAgICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIGNvbG9yLCBtc2csIHN5cy5zdGRvdXQsIGxldmVsKQorICAgIGVsc2U6CisgICAgICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIGNvbG9yLCBtc2csIHN5cy5zdGRlcnIsIGxldmVsKQorCitkZWYgX3NwbGl0X21zZyhoZWFkLCBtc2cpOgorICAgIGlmIGlzaW5zdGFuY2UobXNnLCBsaXN0KToKKyAgICAgICAgbXNnID0gJ1xuJy5qb2luKG1hcChzdHIsIG1zZykpCisKKyAgICBpZiBtc2cuc3RhcnRzd2l0aCgnXG4nKToKKyAgICAgICAgIyBtZWFucyBwcmludCBcbiBhdCBmaXJzdAorICAgICAgICBtc2cgPSBtc2cubHN0cmlwKCkKKyAgICAgICAgaGVhZCA9ICdcbicgKyBoZWFkCisKKyAgICBlbGlmIG1zZy5zdGFydHN3aXRoKCdccicpOgorICAgICAgICAjIG1lYW5zIHByaW50IFxyIGF0IGZpcnN0CisgICAgICAgIG1zZyA9IG1zZy5sc3RyaXAoKQorICAgICAgICBoZWFkID0gJ1xyJyArIGhlYWQKKworICAgIG1hdGNoID0gUFJFRklYX1JFLm1hdGNoKG1zZykKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgaGVhZCArPSAnIDwlcz4nICUgbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgbXNnID0gbWF0Y2guZ3JvdXAoMikKKworICAgIHJldHVybiBoZWFkLCBtc2cKKworZGVmIGdldF9sb2dsZXZlbCgpOgorICAgIHJldHVybiAoayBmb3IgaywgdiBpbiBMT0dfTEVWRUxTLml0ZW1zKCkgaWYgdiA9PSBMT0dfTEVWRUwpLm5leHQoKQorCitkZWYgc2V0X2xvZ2xldmVsKGxldmVsKToKKyAgICBnbG9iYWwgTE9HX0xFVkVMCisgICAgaWYgbGV2ZWwgbm90IGluIExPR19MRVZFTFM6CisgICAgICAgICMgbm8gZWZmZWN0CisgICAgICAgIHJldHVybgorCisgICAgTE9HX0xFVkVMID0gTE9HX0xFVkVMU1tsZXZlbF0KKworZGVmIHNldF9pbnRlcmFjdGl2ZShtb2RlPVRydWUpOgorICAgIGdsb2JhbCBJTlRFUkFDVElWRQorICAgIGlmIG1vZGU6CisgICAgICAgIElOVEVSQUNUSVZFID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIElOVEVSQUNUSVZFID0gRmFsc2UKKworZGVmIGxvZyhtc2c9JycpOgorICAgICMgbG9nIG1zZyB0byBMT0dfQ09OVEVOVCB0aGVuIHNhdmUgdG8gbG9nZmlsZQorICAgIGdsb2JhbCBMT0dfQ09OVEVOVAorICAgIGlmIG1zZzoKKyAgICAgICAgTE9HX0NPTlRFTlQgKz0gbXNnCisKK2RlZiByYXcobXNnPScnKToKKyAgICBfZ2VuZXJhbF9wcmludCgnJywgTk9fQ09MT1IsIG1zZykKKworZGVmIGluZm8obXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdJbmZvJywgbXNnKQorICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIElORk9fQ09MT1IsIG1zZykKKworZGVmIHZlcmJvc2UobXNnKToKKyAgICBoZWFkLCBtc2cgPSBfc3BsaXRfbXNnKCdWZXJib3NlJywgbXNnKQorICAgIF9nZW5lcmFsX3ByaW50KGhlYWQsIElORk9fQ09MT1IsIG1zZywgbGV2ZWw9J3ZlcmJvc2UnKQorCitkZWYgd2FybmluZyhtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ1dhcm5pbmcnLCBtc2cpCisgICAgX2NvbG9yX3BlcnJvcihoZWFkLCBXQVJOX0NPTE9SLCBtc2cpCisKK2RlZiBkZWJ1Zyhtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ0RlYnVnJywgbXNnKQorICAgIF9jb2xvcl9wZXJyb3IoaGVhZCwgRVJSX0NPTE9SLCBtc2csIGxldmVsPSdkZWJ1ZycpCisKK2RlZiBlcnJvcihtc2cpOgorICAgIGhlYWQsIG1zZyA9IF9zcGxpdF9tc2coJ0Vycm9yJywgbXNnKQorICAgIF9jb2xvcl9wZXJyb3IoaGVhZCwgRVJSX0NPTE9SLCBtc2cpCisgICAgc3lzLmV4aXQoMSkKKworZGVmIGFzayhtc2csIGRlZmF1bHQ9VHJ1ZSk6CisgICAgX2dlbmVyYWxfcHJpbnQoJ1xyUScsIEFTS19DT0xPUiwgJycpCisgICAgdHJ5OgorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgbXNnICs9ICcoWS9uKSAnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgKz0gJyh5L04pICcKKyAgICAgICAgaWYgSU5URVJBQ1RJVkU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlcGwgPSByYXdfaW5wdXQobXNnKQorICAgICAgICAgICAgICAgIGlmIHJlcGwubG93ZXIoKSA9PSAneSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiByZXBsLmxvd2VyKCkgPT0gJ24nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIG5vdCByZXBsLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgICMgPEVudGVyPgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgICAgICAgICAgIyBlbHNlIGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbXNnICs9ICcgWScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnICs9ICcgTicKKyAgICAgICAgICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQorCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICBzeXMuZXhpdCgyKQorCitkZWYgY2hvaWNlKG1zZywgY2hvaWNlcywgZGVmYXVsdD0wKToKKyAgICBpZiBkZWZhdWx0ID49IGxlbihjaG9pY2VzKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKKyAgICB0cnk6CisgICAgICAgIG1zZyArPSAiIFslc10gIiAlICcvJy5qb2luKGNob2ljZXMpCisgICAgICAgIGlmIElOVEVSQUNUSVZFOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXBsID0gcmF3X2lucHV0KG1zZykKKyAgICAgICAgICAgICAgICBpZiByZXBsIGluIGNob2ljZXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBsCisgICAgICAgICAgICAgICAgZWxpZiBub3QgcmVwbC5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlc1tkZWZhdWx0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnICs9IGNob2ljZXNbZGVmYXVsdF0KKyAgICAgICAgICAgIF9nZW5lcmFsX3ByaW50KCcnLCBOT19DT0xPUiwgbXNnKQorCisgICAgICAgICAgICByZXR1cm4gY2hvaWNlc1tkZWZhdWx0XQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICBzeXMuZXhpdCgyKQorCitkZWYgcGF1c2UobXNnPU5vbmUpOgorICAgIGlmIElOVEVSQUNUSVZFOgorICAgICAgICBfZ2VuZXJhbF9wcmludCgnXHJRJywgQVNLX0NPTE9SLCAnJykKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAncHJlc3MgPEVOVEVSPiB0byBjb250aW51ZSAuLi4nCisgICAgICAgIHJhd19pbnB1dChtc2cpCisKK2RlZiBzZXRfbG9nZmlsZShmcGF0aCk6CisgICAgZ2xvYmFsIExPR19GSUxFX0ZQCisKKyAgICBkZWYgX3NhdmVsb2dmKCk6CisgICAgICAgIGlmIExPR19GSUxFX0ZQOgorICAgICAgICAgICAgd2l0aCBvcGVuKExPR19GSUxFX0ZQLCAndycpIGFzIGxvZzoKKyAgICAgICAgICAgICAgICBsb2cud3JpdGUoTE9HX0NPTlRFTlQpCisKKyAgICBpZiBMT0dfRklMRV9GUCBpcyBub3QgTm9uZToKKyAgICAgICAgd2FybmluZygnZHVwbGljYXRlIGxvZyBmaWxlIGNvbmZpZ3VyYXRpb24nKQorCisgICAgTE9HX0ZJTEVfRlAgPSBmcGF0aAorCisgICAgaW1wb3J0IGF0ZXhpdAorICAgIGF0ZXhpdC5yZWdpc3Rlcihfc2F2ZWxvZ2YpCisKK2RlZiBlbmFibGVfbG9nc3RkZXJyKGZwYXRoKToKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfQlVGRklMRV9GRAorICAgIGdsb2JhbCBDQVRDSEVSUl9CVUZGSUxFX1BBVEgKKyAgICBnbG9iYWwgQ0FUQ0hFUlJfU0FWRURfMgorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZnBhdGgpOgorICAgICAgICBvcy5yZW1vdmUoZnBhdGgpCisgICAgQ0FUQ0hFUlJfQlVGRklMRV9QQVRIID0gZnBhdGgKKyAgICBDQVRDSEVSUl9CVUZGSUxFX0ZEID0gb3Mub3BlbihDQVRDSEVSUl9CVUZGSUxFX1BBVEgsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKQorICAgIENBVENIRVJSX1NBVkVEXzIgPSBvcy5kdXAoMikKKyAgICBvcy5kdXAyKENBVENIRVJSX0JVRkZJTEVfRkQsIDIpCisKK2RlZiBkaXNhYmxlX2xvZ3N0ZGVycigpOgorICAgIGdsb2JhbCBDQVRDSEVSUl9CVUZGSUxFX0ZECisgICAgZ2xvYmFsIENBVENIRVJSX0JVRkZJTEVfUEFUSAorICAgIGdsb2JhbCBDQVRDSEVSUl9TQVZFRF8yCisKKyAgICByYXcobXNnPU5vbmUpICMgZmx1c2ggbWVzc2FnZSBidWZmZXIgYW5kIHByaW50IGl0LgorICAgIG9zLmR1cDIoQ0FUQ0hFUlJfU0FWRURfMiwgMikKKyAgICBvcy5jbG9zZShDQVRDSEVSUl9TQVZFRF8yKQorICAgIG9zLmNsb3NlKENBVENIRVJSX0JVRkZJTEVfRkQpCisgICAgb3MudW5saW5rKENBVENIRVJSX0JVRkZJTEVfUEFUSCkKKyAgICBDQVRDSEVSUl9CVUZGSUxFX0ZEID0gLTEKKyAgICBDQVRDSEVSUl9CVUZGSUxFX1BBVEggPSBOb25lCisgICAgQ0FUQ0hFUlJfU0FWRURfMiA9IC0xCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvcGx1Z2luLnB5IGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2ZkZmNiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbi5weQpAQCAtMCwwICsxLDE1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK2ltcG9ydCBvcywgc3lzCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMgaW1wb3J0IHBsdWdpbmJhc2UKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBlcnJvcnMKK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorCitfX0FMTF9fID0gWydQbHVnaW5NZ3InLCAncGx1Z2lubWdyJ10KKworUExVR0lOX1RZUEVTID0gWyJpbWFnZXIiLCAic291cmNlIl0KKworUExVR0lOX0RJUiA9ICIvbGliL3dpYy9wbHVnaW5zIiAjIHJlbGF0aXZlIHRvIHNjcmlwdHMKK1NDUklQVFNfUExVR0lOX0RJUiA9ICJzY3JpcHRzIiArIFBMVUdJTl9ESVIKKworY2xhc3MgUGx1Z2luTWdyKG9iamVjdCk6CisgICAgcGx1Z2luX2RpcnMgPSB7fQorCisgICAgIyBtYWtlIHRoZSBtYW5hZ2VyIGNsYXNzIGFzIHNpbmdsZXRvbgorICAgIF9pbnN0YW5jZSA9IE5vbmUKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBjbHMuX2luc3RhbmNlOgorICAgICAgICAgICAgY2xzLl9pbnN0YW5jZSA9IHN1cGVyKFBsdWdpbk1nciwgY2xzKS5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHJldHVybiBjbHMuX2luc3RhbmNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHdpY19wYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBlb3MgPSB3aWNfcGF0aC5maW5kKCdzY3JpcHRzJykgKyBsZW4oJ3NjcmlwdHMnKQorICAgICAgICBzY3JpcHRzX3BhdGggPSB3aWNfcGF0aFs6ZW9zXQorICAgICAgICBzZWxmLnNjcmlwdHNfcGF0aCA9IHNjcmlwdHNfcGF0aAorICAgICAgICBzZWxmLnBsdWdpbl9kaXIgPSBzY3JpcHRzX3BhdGggKyBQTFVHSU5fRElSCisgICAgICAgIHNlbGYubGF5ZXJzX3BhdGggPSBOb25lCisKKyAgICBkZWYgX2J1aWxkX3BsdWdpbl9kaXJfbGlzdChzZWxmLCBwbHVnaW5fZGlyLCBwdHlwZSk6CisgICAgICAgIGlmIHNlbGYubGF5ZXJzX3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYubGF5ZXJzX3BhdGggPSBnZXRfYml0YmFrZV92YXIoIkJCTEFZRVJTIikKKyAgICAgICAgbGF5ZXJfZGlycyA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5sYXllcnNfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBsYXllcl9wYXRoIGluIHNlbGYubGF5ZXJzX3BhdGguc3BsaXQoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGxheWVyX3BhdGgsIFNDUklQVFNfUExVR0lOX0RJUiwgcHR5cGUpCisgICAgICAgICAgICAgICAgbGF5ZXJfZGlycy5hcHBlbmQocGF0aCkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBsdWdpbl9kaXIsIHB0eXBlKQorICAgICAgICBsYXllcl9kaXJzLmFwcGVuZChwYXRoKQorCisgICAgICAgIHJldHVybiBsYXllcl9kaXJzCisKKyAgICBkZWYgYXBwZW5kX2RpcnMoc2VsZiwgZGlycyk6CisgICAgICAgIGZvciBwYXRoIGluIGRpcnM6CisgICAgICAgICAgICBzZWxmLl9hZGRfcGx1Z2luZGlyKHBhdGgpCisKKyAgICAgICAgIyBsb2FkIGFsbCB0aGUgcGx1Z2lucyBBR0FJTgorICAgICAgICBzZWxmLl9sb2FkX2FsbCgpCisKKyAgICBkZWYgX2FkZF9wbHVnaW5kaXIoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5leHBhbmR1c2VyKHBhdGgpKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgcGF0aCBub3QgaW4gc2VsZi5wbHVnaW5fZGlyczoKKyAgICAgICAgICAgIHNlbGYucGx1Z2luX2RpcnNbcGF0aF0gPSBGYWxzZQorICAgICAgICAgICAgIyB0aGUgdmFsdWUgVHJ1ZS9GYWxzZSBtZWFucyAibG9hZGVkIgorCisgICAgZGVmIF9sb2FkX2FsbChzZWxmKToKKyAgICAgICAgZm9yIChwZGlyLCBsb2FkZWQpIGluIHNlbGYucGx1Z2luX2RpcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBsb2FkZWQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHBkaXIpCisgICAgICAgICAgICBmb3IgbW9kIGluIFt4WzotM10gZm9yIHggaW4gb3MubGlzdGRpcihwZGlyKSBpZiB4LmVuZHN3aXRoKCIucHkiKV06CisgICAgICAgICAgICAgICAgaWYgbW9kIGFuZCBtb2QgIT0gJ19faW5pdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgbW9kIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGYucGx1Z2luX2RpcnNbcGRpcl0gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJNb2R1bGUgJXMgYWxyZWFkeSBleGlzdHMsIHNraXAiICUgbW9kKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5bW9kID0gX19pbXBvcnRfXyhtb2QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbHVnaW5fZGlyc1twZGlyXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiUGx1Z2luIG1vZHVsZSAlczolcyBpbXBvcnRlZCJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobW9kLCBweW1vZC5fX2ZpbGVfXykpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnRmFpbGVkIHRvIGxvYWQgcGx1Z2luICVzLyVzOiAlcycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChvcy5wYXRoLmJhc2VuYW1lKHBkaXIpLCBtb2QsIGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKG1zZykKKworICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBkZWYgZ2V0X3BsdWdpbnMoc2VsZiwgcHR5cGUpOgorICAgICAgICAiIiIgdGhlIHJldHVybiB2YWx1ZSBpcyBkaWN0IG9mIG5hbWU6Y2xhc3MgcGFpcnMgIiIiCisKKyAgICAgICAgaWYgcHR5cGUgbm90IGluIFBMVUdJTl9UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5DcmVhdG9yRXJyb3IoJyVzIGlzIG5vdCB2YWxpZCBwbHVnaW4gdHlwZScgJSBwdHlwZSkKKworICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2J1aWxkX3BsdWdpbl9kaXJfbGlzdChzZWxmLnBsdWdpbl9kaXIsIHB0eXBlKQorCisgICAgICAgIHNlbGYuYXBwZW5kX2RpcnMocGx1Z2luc19kaXIpCisKKyAgICAgICAgcmV0dXJuIHBsdWdpbmJhc2UuZ2V0X3BsdWdpbnMocHR5cGUpCisKKyAgICBkZWYgZ2V0X3NvdXJjZV9wbHVnaW5zKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIGxpc3Qgb2YgYXZhaWxhYmxlIHNvdXJjZSBwbHVnaW5zLgorICAgICAgICAiIiIKKyAgICAgICAgcGx1Z2luc19kaXIgPSBzZWxmLl9idWlsZF9wbHVnaW5fZGlyX2xpc3Qoc2VsZi5wbHVnaW5fZGlyLCAnc291cmNlJykKKworICAgICAgICBzZWxmLmFwcGVuZF9kaXJzKHBsdWdpbnNfZGlyKQorCisgICAgICAgIHJldHVybiBzZWxmLmdldF9wbHVnaW5zKCdzb3VyY2UnKQorCisKKyAgICBkZWYgZ2V0X3NvdXJjZV9wbHVnaW5fbWV0aG9kcyhzZWxmLCBzb3VyY2VfbmFtZSwgbWV0aG9kcyk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgbWV0aG9kcyBwYXJhbSBpcyBhIGRpY3Qgd2l0aCB0aGUgbWV0aG9kIG5hbWVzIHRvIGZpbmQuICBPbgorICAgICAgICByZXR1cm4sIHRoZSBkaWN0IHZhbHVlcyB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIHBvaW50ZXJzIHRvIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIG1ldGhvZHMuICBJZiBvbmUgb3IgbW9yZSBtZXRob2RzIGFyZSBub3QgZm91bmQsCisgICAgICAgIE5vbmUgaXMgcmV0dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm5fbWV0aG9kcyA9IE5vbmUKKyAgICAgICAgZm9yIF9zb3VyY2VfbmFtZSwga2xhc3MgaW4gc2VsZi5nZXRfcGx1Z2lucygnc291cmNlJykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBfc291cmNlX25hbWUgPT0gc291cmNlX25hbWU6CisgICAgICAgICAgICAgICAgZm9yIF9tZXRob2RfbmFtZSBpbiBtZXRob2RzLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoa2xhc3MsIF9tZXRob2RfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJVbmltcGxlbWVudGVkICVzIHNvdXJjZSBpbnRlcmZhY2UgZm9yOiAlcyJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKF9tZXRob2RfbmFtZSwgX3NvdXJjZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKGtsYXNzLCBfbWV0aG9kX25hbWUpCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbX21ldGhvZF9uYW1lXSA9IGZ1bmMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX21ldGhvZHMgPSBtZXRob2RzCisgICAgICAgIHJldHVybiByZXR1cm5fbWV0aG9kcworCitwbHVnaW5tZ3IgPSBQbHVnaW5NZ3IoKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2luYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThmZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbmJhc2UucHkKQEAgLTAsMCArMSwxMDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKKworY2xhc3MgX1BsdWdpbihvYmplY3QpOgorICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICdwbHVnaW5zJyk6CisgICAgICAgICAgICAgICAgY2xzLnBsdWdpbnMgPSB7fQorCisgICAgICAgICAgICBlbGlmICd3aWNfcGx1Z2luX3R5cGUnIGluIGF0dHJzOgorICAgICAgICAgICAgICAgIGlmIGF0dHJzWyd3aWNfcGx1Z2luX3R5cGUnXSBub3QgaW4gY2xzLnBsdWdpbnM6CisgICAgICAgICAgICAgICAgICAgIGNscy5wbHVnaW5zW2F0dHJzWyd3aWNfcGx1Z2luX3R5cGUnXV0gPSB7fQorCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIoY2xzLCAnd2ljX3BsdWdpbl90eXBlJykgYW5kICduYW1lJyBpbiBhdHRyczoKKyAgICAgICAgICAgICAgICBjbHMucGx1Z2luc1tjbHMud2ljX3BsdWdpbl90eXBlXVthdHRyc1snbmFtZSddXSA9IGNscworCisgICAgICAgIGRlZiBzaG93X3BsdWdpbnMoY2xzKToKKyAgICAgICAgICAgIGZvciBjbHMgaW4gY2xzLnBsdWdpbnNbY2xzLndpY19wbHVnaW5fdHlwZV06CisgICAgICAgICAgICAgICAgcHJpbnQgY2xzCisKKyAgICAgICAgZGVmIGdldF9wbHVnaW5zKGNscyk6CisgICAgICAgICAgICByZXR1cm4gY2xzLnBsdWdpbnMKKworCitjbGFzcyBJbWFnZXJQbHVnaW4oX1BsdWdpbik6CisgICAgd2ljX3BsdWdpbl90eXBlID0gImltYWdlciIKKworCitjbGFzcyBTb3VyY2VQbHVnaW4oX1BsdWdpbik6CisgICAgd2ljX3BsdWdpbl90eXBlID0gInNvdXJjZSIKKyAgICAiIiIKKyAgICBUaGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBpbXBsZW1lbnRlZCBieSAtLXNvdXJjZSBwbHVnaW5zLgorCisgICAgQW55IG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGluIGEgc3ViY2xhc3MgaW5oZXJpdCB0aGVzZS4KKyAgICAiIiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyZWF0b3IsIHdvcmtkaXIsIG9lX2J1aWxkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBhZnRlciBhbGwgcGFydGl0aW9ucyBoYXZlIGJlZW4gcHJlcGFyZWQgYW5kIGFzc2VtYmxlZCBpbnRvIGEKKyAgICAgICAgZGlzayBpbWFnZS4gIFRoaXMgcHJvdmlkZXMgYSBob29rIHRvIGFsbG93IGZpbmFsaXphdGlvbiBvZiBhCisgICAgICAgIGRpc2sgaW1hZ2UgZS5nLiB0byB3cml0ZSBhbiBNQlIgdG8gaXQuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19pbnN0YWxsX2Rpc2s6IGRpc2s6ICVzIiAlIGRpc2tfbmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19zdGFnZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgU3BlY2lhbCBjb250ZW50IHN0YWdpbmcgaG9vayBjYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCksCisgICAgICAgIG5vcm1hbGx5IGVtcHR5LgorCisgICAgICAgIFR5cGljYWxseSwgYSBwYXJ0aXRpb24gd2lsbCBqdXN0IHVzZSB0aGUgcGFzc2VkLWluIHBhcmFtZSBlLmcKKyAgICAgICAgc3RyYWlnaHQgYm9vdGltZ19kaXIsIGV0YywgYnV0IGluIHNvbWUgY2FzZXMsIHRoaW5ncyBuZWVkIHRvCisgICAgICAgIGJlIG1vcmUgdGFpbG9yZWQgZS5nLiB0byB1c2UgYSBkZXBsb3kgZGlyICsgL2Jvb3QsIGV0Yy4gIFRoaXMKKyAgICAgICAgaG9vayBhbGxvd3MgdGhvc2UgZmlsZXMgdG8gYmUgc3RhZ2VkIGluIGEgY3VzdG9taXplZCBmYXNoaW9uLgorICAgICAgICBOb3QgdGhhdCBnZXRfYml0YmFrZV92YXIoKSBhbGxvd3MgeW91IHRvIGFjY2VzIG5vbi1zdGFuZGFyZAorICAgICAgICB2YXJpYWJsZXMgdGhhdCB5b3UgbWlnaHQgd2FudCB0byB1c2UgZm9yIHRoaXMuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19zdGFnZV9wYXJ0aXRpb246IHBhcnQ6ICVzIiAlIHBhcnQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCBiZWZvcmUgZG9fcHJlcGFyZV9wYXJ0aXRpb24oKSwgdHlwaWNhbGx5IHVzZWQgdG8gY3JlYXRlCisgICAgICAgIGN1c3RvbSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBhIHBhcnRpdGlvbiwgZm9yIGV4YW1wbGUKKyAgICAgICAgc3lzbGludXggb3IgZ3J1YiBjb25maWcgZmlsZXMuCisgICAgICAgICIiIgorICAgICAgICBtc2dlci5kZWJ1ZygiU291cmNlUGx1Z2luOiBkb19jb25maWd1cmVfcGFydGl0aW9uOiBwYXJ0OiAlcyIgJSBwYXJ0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCByb290ZnNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZ2VyLmRlYnVnKCJTb3VyY2VQbHVnaW46IGRvX3ByZXBhcmVfcGFydGl0aW9uOiBwYXJ0OiAlcyIgJSBwYXJ0KQorCitkZWYgZ2V0X3BsdWdpbnModHlwZW4pOgorICAgIHBsdWdpbnMgPSBJbWFnZXJQbHVnaW4uZ2V0X3BsdWdpbnMoKQorICAgIGlmIHR5cGVuIGluIHBsdWdpbnM6CisgICAgICAgIHJldHVybiBwbHVnaW5zW3R5cGVuXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKK19fYWxsX18gPSBbJ0ltYWdlclBsdWdpbicsICdTb3VyY2VQbHVnaW4nLCAnZ2V0X3BsdWdpbnMnXQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9pbWFnZXIvZGlyZWN0X3BsdWdpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDNmNDZjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvaW1hZ2VyL2RpcmVjdF9wbHVnaW4ucHkKQEAgLTAsMCArMSwxMDIgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdkaXJlY3QnIGltYWdlciBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIworCitmcm9tIHdpYy51dGlscyBpbXBvcnQgZXJyb3JzCitmcm9tIHdpYy5jb25mIGltcG9ydCBjb25maWdtZ3IKKworaW1wb3J0IHdpYy5pbWFnZXIuZGlyZWN0IGFzIGRpcmVjdAorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgSW1hZ2VyUGx1Z2luCisKK2NsYXNzIERpcmVjdFBsdWdpbihJbWFnZXJQbHVnaW4pOgorICAgICIiIgorICAgIEluc3RhbGwgYSBzeXN0ZW0gaW50byBhIGZpbGUgY29udGFpbmluZyBhIHBhcnRpdGlvbmVkIGRpc2sgaW1hZ2UuCisKKyAgICBBbiBpbWFnZSBmaWxlIGlzIGZvcm1hdHRlZCB3aXRoIGEgcGFydGl0aW9uIHRhYmxlLCBlYWNoIHBhcnRpdGlvbgorICAgIGNyZWF0ZWQgZnJvbSBhIHJvb3RmcyBvciBvdGhlciBPcGVuRW1iZWRkZWQgYnVpbGQgYXJ0aWZhY3QgYW5kIGRkJ2VkCisgICAgaW50byB0aGUgdmlydHVhbCBkaXNrLiBUaGUgZGlzayBpbWFnZSBjYW4gc3Vic2VxdWVudGx5IGJlIGRkJ2VkIG9udG8KKyAgICBtZWRpYSBhbmQgdXNlZCBvbiBhY3R1YWwgaGFyZHdhcmUuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2RpcmVjdCcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3Jvb3Rmc19kaXJfdG9fZGljdChjbHMsIHJvb3Rmc19kaXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldHMgYSBzdHJpbmcgdGhhdCBjb250YWluICdjb25uZWN0aW9uPWRpcicgc3BsaXR0ZWQgYnkKKyAgICAgICAgc3BhY2UgYW5kIHJldHVybiBhIGRpY3QKKyAgICAgICAgIiIiCisgICAgICAgIGtyb290ZnNfZGlyID0ge30KKyAgICAgICAgZm9yIHJvb3Rmc19kaXIgaW4gcm9vdGZzX2RpcnMuc3BsaXQoJyAnKToKKyAgICAgICAgICAgIGtleSwgdmFsID0gcm9vdGZzX2Rpci5zcGxpdCgnPScpCisgICAgICAgICAgICBrcm9vdGZzX2RpcltrZXldID0gdmFsCisKKyAgICAgICAgcmV0dXJuIGtyb290ZnNfZGlyCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY3JlYXRlKGNscywgb3B0cywgKmFyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGRpcmVjdCBpbWFnZSwgY2FsbGVkIGZyb20gY3JlYXRvciBhcyAnZGlyZWN0JyBjbWQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxlbihhcmdzKSAhPSA4OgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlVzYWdlKCJFeHRyYSBhcmd1bWVudHMgZ2l2ZW4iKQorCisgICAgICAgIG5hdGl2ZV9zeXNyb290ID0gYXJnc1swXQorICAgICAgICBrZXJuZWxfZGlyID0gYXJnc1sxXQorICAgICAgICBib290aW1nX2RpciA9IGFyZ3NbMl0KKyAgICAgICAgcm9vdGZzX2RpciA9IGFyZ3NbM10KKworICAgICAgICBjcmVhdG9yb3B0cyA9IGNvbmZpZ21nci5jcmVhdGUKKyAgICAgICAga3Njb25mID0gYXJnc1s0XQorCisgICAgICAgIGltYWdlX291dHB1dF9kaXIgPSBhcmdzWzVdCisgICAgICAgIG9lX2J1aWxkZGlyID0gYXJnc1s2XQorICAgICAgICBjb21wcmVzc29yID0gYXJnc1s3XQorCisgICAgICAgIGtyb290ZnNfZGlyID0gY2xzLl9fcm9vdGZzX2Rpcl90b19kaWN0KHJvb3Rmc19kaXIpCisKKyAgICAgICAgY29uZmlnbWdyLl9rc2NvbmYgPSBrc2NvbmYKKworICAgICAgICBjcmVhdG9yID0gZGlyZWN0LkRpcmVjdEltYWdlQ3JlYXRvcihvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Vfb3V0cHV0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Jvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcm9wdHMpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3JlYXRvci5jcmVhdGUoKQorICAgICAgICAgICAgY3JlYXRvci5hc3NlbWJsZSgpCisgICAgICAgICAgICBjcmVhdG9yLmZpbmFsaXplKCkKKyAgICAgICAgICAgIGNyZWF0b3IucHJpbnRfb3V0aW1hZ2VfaW5mbygpCisKKyAgICAgICAgZXhjZXB0IGVycm9ycy5DcmVhdG9yRXJyb3I6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY3JlYXRvci5jbGVhbnVwKCkKKworICAgICAgICByZXR1cm4gMApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5IGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctZWZpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjNjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1lZmkucHkKQEAgLTAsMCArMSwyMTQgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdib290aW1nLWVmaScgc291cmNlIHBsdWdpbiBjbGFzcyBmb3IgJ3dpYycKKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAorCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0LCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT1RERF9FWFRSQV9TUEFDRQorCitjbGFzcyBCb290aW1nRUZJUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQ3JlYXRlIEVGSSBib290IHBhcnRpdGlvbi4KKyAgICBUaGlzIHBsdWdpbiBzdXBwb3J0cyBHUlVCIDIgYW5kIGd1bW1pYm9vdCBib290bG9hZGVycy4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnYm9vdGltZy1lZmknCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX2dydWJlZmkoY2xzLCBoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3J1Yi1lZmkpIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBncnViZWZpX2NvbmYgPSAiIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAtLXBhcml0eT1ubyAtLXN0b3A9MVxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gImRlZmF1bHQ9Ym9vdFxuIgorICAgICAgICB0aW1lb3V0ID0ga2lja3N0YXJ0LmdldF90aW1lb3V0KGNyZWF0b3Iua3MpCisgICAgICAgIGlmIG5vdCB0aW1lb3V0OgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ0aW1lb3V0PSVzXG4iICUgdGltZW91dAorICAgICAgICBncnViZWZpX2NvbmYgKz0gIm1lbnVlbnRyeSAnYm9vdCd7XG4iCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorCisgICAgICAgIGdydWJlZmlfY29uZiArPSAibGludXggJXMgcm9vdD0lcyByb290d2FpdCAlc1xuIiBcCisgICAgICAgICAgICAlIChrZXJuZWwsIGNyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ9XG4iCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgZ3J1YmVmaSBjb25maWcgJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnID0gb3BlbigiJXMvaGRkL2Jvb3QvRUZJL0JPT1QvZ3J1Yi5jZmciICUgY3Jfd29ya2RpciwgInciKQorICAgICAgICBjZmcud3JpdGUoZ3J1YmVmaV9jb25mKQorICAgICAgICBjZmcuY2xvc2UoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9ndW1taWJvb3QoY2xzLCBoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3VtbWlib290KSBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvbG9hZGVyIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL2xvYWRlci9lbnRyaWVzIiAlIGhkZGRpcgorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcykKKyAgICAgICAgaWYgbm90IHRpbWVvdXQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorCisgICAgICAgIGxvYWRlcl9jb25mID0gIiIKKyAgICAgICAgbG9hZGVyX2NvbmYgKz0gImRlZmF1bHQgYm9vdFxuIgorICAgICAgICBsb2FkZXJfY29uZiArPSAidGltZW91dCAlZFxuIiAlIHRpbWVvdXQKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBndW1taWJvb3QgY29uZmlnICVzL2hkZC9ib290L2xvYWRlci9sb2FkZXIuY29uZiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICBjZmcgPSBvcGVuKCIlcy9oZGQvYm9vdC9sb2FkZXIvbG9hZGVyLmNvbmYiICUgY3Jfd29ya2RpciwgInciKQorICAgICAgICBjZmcud3JpdGUobG9hZGVyX2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorCisgICAgICAgIGJvb3RfY29uZiA9ICIiCisgICAgICAgIGJvb3RfY29uZiArPSAidGl0bGUgYm9vdFxuIgorICAgICAgICBib290X2NvbmYgKz0gImxpbnV4ICVzXG4iICUga2VybmVsCisgICAgICAgIGJvb3RfY29uZiArPSAib3B0aW9ucyBMQUJFTD1Cb290IHJvb3Q9JXMgJXNcbiIgJSAoY3JlYXRvci5yb290ZGV2LCBvcHRpb25zKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIGd1bW1pYm9vdCBjb25maWcgJXMvaGRkL2Jvb3QvbG9hZGVyL2VudHJpZXMvYm9vdC5jb25mIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIGNyX3dvcmtkaXIpCisgICAgICAgIGNmZyA9IG9wZW4oIiVzL2hkZC9ib290L2xvYWRlci9lbnRyaWVzL2Jvb3QuY29uZiIgJSBjcl93b3JrZGlyLCAidyIpCisgICAgICAgIGNmZy53cml0ZShib290X2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBjcmVhdGVzIGxvYWRlci1zcGVjaWZpYyBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisgICAgICAgIHJtX2NtZCA9ICJybSAtcmYgJXMiICUgY3Jfd29ya2RpcgorICAgICAgICBleGVjX2NtZChybV9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcy9FRkkvQk9PVCIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2dydWItZWZpJzoKKyAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2dydWJlZmkoaGRkZGlyLCBjcmVhdG9yLCBjcl93b3JrZGlyKQorICAgICAgICAgICAgZWxpZiBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSA9PSAnZ3VtbWlib290JzoKKyAgICAgICAgICAgICAgICBjbHMuZG9fY29uZmlndXJlX2d1bW1pYm9vdChoZGRkaXIsIGNyZWF0b3IsIGNyX3dvcmtkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJ1bnJlY29nbml6ZWQgYm9vdGltZy1lZmkgbG9hZGVyOiAlcyIgJSBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoImJvb3RpbWctZWZpIHJlcXVpcmVzIGEgbG9hZGVyLCBub25lIHNwZWNpZmllZCIpCisKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBhbiBFRkkgKGdydWIpIGJvb3QgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIkhERERJUiIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgSERERElSLCBleGl0aW5nXG4iKQorICAgICAgICAgICAgIyBqdXN0IHNvIHRoZSByZXN1bHQgbm90ZXMgZGlzcGxheSBpdAorICAgICAgICAgICAgY3JlYXRvci5zZXRfYm9vdGltZ19kaXIoYm9vdGltZ19kaXIpCisKKyAgICAgICAgc3RhZ2luZ19rZXJuZWxfZGlyID0ga2VybmVsX2RpcgorCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzL2J6SW1hZ2UgJXMvYnpJbWFnZSIgJSBcCisgICAgICAgICAgICAoc3RhZ2luZ19rZXJuZWxfZGlyLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdncnViLWVmaSc6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCIlcy9oZGQvYm9vdC9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvZ3J1Yi5jZmciICUgY3Jfd29ya2RpcikKKyAgICAgICAgICAgICAgICBjcF9jbWQgPSAiY3AgJXMvRUZJL0JPT1QvKiAlcy9FRkkvQk9PVCIgJSAoYm9vdGltZ19kaXIsIGhkZGRpcikKKyAgICAgICAgICAgICAgICBleGVjX2NtZChjcF9jbWQsIFRydWUpCisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoIiVzL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzL2hkZC9ib290L0VGSS9CT09UL2dydWIuY2ZnIiAlIGNyX3dvcmtkaXIpCisgICAgICAgICAgICBlbGlmIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddID09ICdndW1taWJvb3QnOgorICAgICAgICAgICAgICAgIGNwX2NtZCA9ICJjcCAlcy9FRkkvQk9PVC8qICVzL0VGSS9CT09UIiAlIChib290aW1nX2RpciwgaGRkZGlyKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKGNwX2NtZCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoInVucmVjb2duaXplZCBib290aW1nLWVmaSBsb2FkZXI6ICVzIiAlIHNvdXJjZV9wYXJhbXNbJ2xvYWRlciddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiYm9vdGltZy1lZmkgcmVxdWlyZXMgYSBsb2FkZXIsIG5vbmUgc3BlY2lmaWVkIikKKworICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSBoZGRkaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBibG9ja3MgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gcGFydC5nZXRfZXh0cmFfYmxvY2tfY291bnQoYmxvY2tzKQorCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IEJPT1RERF9FWFRSQV9TUEFDRToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IEJPT1RERF9FWFRSQV9TUEFDRQorCisgICAgICAgIGJsb2NrcyArPSBleHRyYV9ibG9ja3MKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykpCisKKyAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKyAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCisgICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKKworICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKKyAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgLW4gZWZpIC1DICVzICVkIiAlIChib290aW1nLCBibG9ja3MpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChkb3Nmc19jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIG1jb3B5X2NtZCA9ICJtY29weSAtaSAlcyAtcyAlcy8qIDo6LyIgJSAoYm9vdGltZywgaGRkZGlyKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQobWNvcHlfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBjaG1vZF9jbWQgPSAiY2htb2QgNjQ0ICVzIiAlIGJvb3RpbWcKKyAgICAgICAgZXhlY19jbWQoY2htb2RfY21kKQorCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBib290aW1nCisgICAgICAgIG91dCA9IGV4ZWNfY21kKGR1X2NtZCkKKyAgICAgICAgYm9vdGltZ19zaXplID0gb3V0LnNwbGl0KClbMF0KKworICAgICAgICBwYXJ0LnNldF9zaXplKGJvb3RpbWdfc2l6ZSkKKyAgICAgICAgcGFydC5zZXRfc291cmNlX2ZpbGUoYm9vdGltZykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBhcnRpdGlvbi5weSBiL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBhcnRpdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJjYTBmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2Jvb3RpbWctcGFydGl0aW9uLnB5CkBAIC0wLDAgKzEsMTQzIEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnYm9vdGltZy1wYXJ0aXRpb24nIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yCisjICd3aWMnLiBUaGUgcGx1Z2luIGNyZWF0ZXMgYW4gaW1hZ2Ugb2YgYm9vdCBwYXJ0aXRpb24sIGNvcHlpbmcgb3ZlcgorIyBmaWxlcyBsaXN0ZWQgaW4gSU1BR0VfQk9PVF9GSUxFUyBiaXRiYWtlIHZhcmlhYmxlLgorIworIyBBVVRIT1JTCisjIE1hY2llaiBCb3J6ZWNraSA8bWFjaWVqLmJvcnplY2tpIChhdF0gb3Blbi1ybmQucGw+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZ2V0X2JpdGJha2VfdmFyCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKKworY2xhc3MgQm9vdGltZ1BhcnRpdGlvblBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSBhbiBpbWFnZSBvZiBib290IHBhcnRpdGlvbiwgY29weWluZyBvdmVyIGZpbGVzCisgICAgbGlzdGVkIGluIElNQUdFX0JPT1RfRklMRVMgYml0YmFrZSB2YXJpYWJsZS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnYm9vdGltZy1wYXJ0aXRpb24nCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiBEbyBub3RoaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLiBQb3NzaWJseSBwcmVwYXJlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Ygc29tZSBzb3J0LgorCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIC0gc2V0cyB1cCBhIHZmYXQgcGFydGl0aW9uCisgICAgICAgIC0gY29waWVzIGFsbCBmaWxlcyBsaXN0ZWQgaW4gSU1BR0VfQk9PVF9GSUxFUyB2YXJpYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgaGRkZGlyID0gIiVzL2Jvb3QiICUgY3Jfd29ya2RpcgorICAgICAgICBybV9jbWQgPSAicm0gLXJmICVzL2Jvb3QiICUgY3Jfd29ya2RpcgorICAgICAgICBleGVjX2NtZChybV9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcyIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgYm9vdGltZ19kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIERFUExPWV9ESVJfSU1BR0UsIGV4aXRpbmdcbiIpCisKKyAgICAgICAgbXNnZXIuZGVidWcoJ0Jvb3RpbWcgZGlyOiAlcycgJSBib290aW1nX2RpcikKKworICAgICAgICBib290X2ZpbGVzID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9CT09UX0ZJTEVTIikKKworICAgICAgICBpZiBub3QgYm9vdF9maWxlczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdObyBib290IGZpbGVzIGRlZmluZWQsIElNQUdFX0JPT1RfRklMRVMgdW5zZXQnKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdCb290IGZpbGVzOiAlcycgJSBib290X2ZpbGVzKQorCisgICAgICAgICMgbGlzdCBvZiB0dXBsZXMgKHNyY19uYW1lLCBkc3RfbmFtZSkKKyAgICAgICAgZGVwbG95X2ZpbGVzID0gW10KKyAgICAgICAgZm9yIHNyY19lbnRyeSBpbiByZS5maW5kYWxsKHInW1x3O1wtXC4vXCpdKycsIGJvb3RfZmlsZXMpOgorICAgICAgICAgICAgaWYgJzsnIGluIHNyY19lbnRyeToKKyAgICAgICAgICAgICAgICBkc3RfZW50cnkgPSB0dXBsZShzcmNfZW50cnkuc3BsaXQoJzsnKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHN0X2VudHJ5WzBdIG9yIG5vdCBkc3RfZW50cnlbMV06CisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCdNYWxmb3JtZWQgYm9vdCBmaWxlIGVudHJ5OiAlcycgJSAoc3JjX2VudHJ5KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZHN0X2VudHJ5ID0gKHNyY19lbnRyeSwgc3JjX2VudHJ5KQorCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygnRGVzdGluYXRpb24gZW50cnk6ICVyJyAlIChkc3RfZW50cnksKSkKKyAgICAgICAgICAgIGRlcGxveV9maWxlcy5hcHBlbmQoZHN0X2VudHJ5KQorCisgICAgICAgIGZvciBkZXBsb3lfZW50cnkgaW4gZGVwbG95X2ZpbGVzOgorICAgICAgICAgICAgc3JjLCBkc3QgPSBkZXBsb3lfZW50cnkKKyAgICAgICAgICAgIGluc3RhbGxfdGFzayA9IFtdCisgICAgICAgICAgICBpZiAnKicgaW4gc3JjOgorICAgICAgICAgICAgICAgICMgYnkgZGVmYXVsdCBpbnN0YWxsIGZpbGVzIHVuZGVyIHRoZWlyIGJhc2VuYW1lCisgICAgICAgICAgICAgICAgZW50cnlfbmFtZV9mbiA9IG9zLnBhdGguYmFzZW5hbWUKKyAgICAgICAgICAgICAgICBpZiBkc3QgIT0gc3JjOgorICAgICAgICAgICAgICAgICAgICAjIHVubGVzcyBhIHRhcmdldCBuYW1lIHdhcyBnaXZlbiwgdGhlbiB0cmVhdCBuYW1lCisgICAgICAgICAgICAgICAgICAgICMgYXMgYSBkaXJlY3RvcnkgYW5kIGFwcGVuZCBhIGJhc2VuYW1lCisgICAgICAgICAgICAgICAgICAgIGVudHJ5X25hbWVfZm4gPSBsYW1iZGEgbmFtZTogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG5hbWUpKQorCisgICAgICAgICAgICAgICAgc3JjcyA9IGdsb2Iob3MucGF0aC5qb2luKGJvb3RpbWdfZGlyLCBzcmMpKQorCisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoJ0dsb2JiZWQgc291cmNlczogJXMnICUgKCcsICcuam9pbihzcmNzKSkpCisgICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIHNyY3M6CisgICAgICAgICAgICAgICAgICAgIGVudHJ5X2RzdF9uYW1lID0gZW50cnlfbmFtZV9mbihlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF90YXNrLmFwcGVuZCgoZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihoZGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9kc3RfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbnN0YWxsX3Rhc2sgPSBbKG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc3JjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihoZGRkaXIsIGRzdCkpXQorCisgICAgICAgICAgICBmb3IgdGFzayBpbiBpbnN0YWxsX3Rhc2s6CisgICAgICAgICAgICAgICAgc3JjX3BhdGgsIGRzdF9wYXRoID0gdGFzaworICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCdJbnN0YWxsICVzIGFzICVzJyAlIChvcy5wYXRoLmJhc2VuYW1lKHNyY19wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3BhdGgpKQorICAgICAgICAgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAtRCAlcyAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3JjX3BhdGgsIGRzdF9wYXRoKQorICAgICAgICAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdQcmVwYXJlIGJvb3QgcGFydGl0aW9uIHVzaW5nIHJvb3RmcyBpbiAlcycgJSAoaGRkZGlyKSkKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmcyhjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgaGRkZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290KQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvYm9vdGltZy1wY2Jpb3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlZDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9ib290aW1nLXBjYmlvcy5weQpAQCAtMCwwICsxLDIwMCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgaW1wbGVtZW50cyB0aGUgJ2Jvb3RpbWctcGNiaW9zJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIFRvbSBaYW51c3NpIDx0b20uemFudXNzaSAoYXRdIGxpbnV4LmludGVsLmNvbT4KKyMKKworaW1wb3J0IG9zCisKK2Zyb20gd2ljLnV0aWxzLmVycm9ycyBpbXBvcnQgSW1hZ2VFcnJvcgorZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydCwgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQsIGV4ZWNfbmF0aXZlX2NtZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2JpdGJha2VfdmFyLCBCT09URERfRVhUUkFfU1BBQ0UKKworY2xhc3MgQm9vdGltZ1BjYmlvc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSBNQlIgYm9vdCBwYXJ0aXRpb24gYW5kIGluc3RhbGwgc3lzbGludXggb24gaXQuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ2Jvb3RpbWctcGNiaW9zJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2luc3RhbGxfZGlzayhjbHMsIGRpc2ssIGRpc2tfbmFtZSwgY3JlYXRvciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiAgSW4gdGhpcyBjYXNlLCB3ZSBpbnN0YWxsIHRoZSBNQlIuCisgICAgICAgICIiIgorICAgICAgICBtYnJmaWxlID0gIiVzL3N5c2xpbnV4LyIgJSBib290aW1nX2RpcgorICAgICAgICBpZiBjcmVhdG9yLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJzoKKyAgICAgICAgICAgIG1icmZpbGUgKz0gIm1ici5iaW4iCisgICAgICAgIGVsaWYgY3JlYXRvci5wdGFibGVfZm9ybWF0ID09ICdncHQnOgorICAgICAgICAgICAgbWJyZmlsZSArPSAiZ3B0bWJyLmJpbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJVbnN1cHBvcnRlZCBwYXJ0aXRpb24gdGFibGU6ICVzIiAlIGNyZWF0b3IucHRhYmxlX2Zvcm1hdCkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWJyZmlsZSk6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAlcy4gIElmIHVzaW5nIHRoZSAtZSBvcHRpb24sIGRvIHlvdSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiaGF2ZSB0aGUgcmlnaHQgTUFDSElORSBzZXQgaW4gbG9jYWwuY29uZj8gIElmIG5vdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgImlzIHRoZSBib290aW1nX2RpciBwYXRoIGNvcnJlY3Q/IiAlIG1icmZpbGUpCisKKyAgICAgICAgZnVsbF9wYXRoID0gY3JlYXRvci5fZnVsbF9wYXRoKHdvcmtkaXIsIGRpc2tfbmFtZSwgImRpcmVjdCIpCisgICAgICAgIG1zZ2VyLmRlYnVnKCJJbnN0YWxsaW5nIE1CUiBvbiBkaXNrICVzIGFzICVzIHdpdGggc2l6ZSAlcyBieXRlcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChkaXNrX25hbWUsIGZ1bGxfcGF0aCwgZGlza1snbWluX3NpemUnXSkpCisKKyAgICAgICAgcmNvZGUgPSBydW5uZXIuc2hvdyhbJ2RkJywgJ2lmPSVzJyAlIG1icmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZj0lcycgJSBmdWxsX3BhdGgsICdjb252PW5vdHJ1bmMnXSkKKyAgICAgICAgaWYgcmNvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoIlVuYWJsZSB0byBzZXQgTUJSIHRvICVzIiAlIGZ1bGxfcGF0aCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBjcmVhdGVzIHN5c2xpbnV4IGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgaGRkZGlyID0gIiVzL2hkZC9ib290IiAlIGNyX3dvcmtkaXIKKyAgICAgICAgcm1fY21kID0gInJtIC1yZiAiICsgY3Jfd29ya2RpcgorICAgICAgICBleGVjX2NtZChybV9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtZCAlcyIgJSBoZGRkaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIvaGRkL2Jvb3Qvc3BsYXNoLmpwZyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICIiCisKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBzeXNsaW51eF9jb25mID0gIiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiUFJPTVBUIDBcbiIKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzKQorICAgICAgICBpZiBub3QgdGltZW91dDoKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlRJTUVPVVQgIiArIHN0cih0aW1lb3V0KSArICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFMTE9XT1BUSU9OUyAxXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlNFUklBTCAwIDExNTIwMFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJcbiIKKyAgICAgICAgaWYgc3BsYXNobGluZToKKyAgICAgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiVzXG4iICUgc3BsYXNobGluZQorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJERUZBVUxUIGJvb3RcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiTEFCRUwgYm9vdFxuIgorCisgICAgICAgIGtlcm5lbCA9ICIvdm1saW51eiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiS0VSTkVMICIgKyBrZXJuZWwgKyAiXG4iCisKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQVBQRU5EIGxhYmVsPWJvb3Qgcm9vdD0lcyAlc1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKworICAgICAgICBtc2dlci5kZWJ1ZygiV3JpdGluZyBzeXNsaW51eCBjb25maWcgJXMvaGRkL2Jvb3Qvc3lzbGludXguY2ZnIiBcCisgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgY2ZnID0gb3BlbigiJXMvaGRkL2Jvb3Qvc3lzbGludXguY2ZnIiAlIGNyX3dvcmtkaXIsICJ3IikKKyAgICAgICAgY2ZnLndyaXRlKHN5c2xpbnV4X2NvbmYpCisgICAgICAgIGNmZy5jbG9zZSgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjcmVhdG9yLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGxlZCB0byBkbyB0aGUgYWN0dWFsIGNvbnRlbnQgcG9wdWxhdGlvbiBmb3IgYSBwYXJ0aXRpb24gaS5lLiBpdAorICAgICAgICAncHJlcGFyZXMnIHRoZSBwYXJ0aXRpb24gdG8gYmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGltYWdlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHByZXBhcmUgY29udGVudCBmb3IgbGVnYWN5IGJpb3MgYm9vdCBwYXJ0aXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkZWYgX2hhc19zeXNsaW51eChkaXJuYW1lKToKKyAgICAgICAgICAgIGlmIGRpcm5hbWU6CisgICAgICAgICAgICAgICAgc3lzbGludXggPSAiJXMvc3lzbGludXgiICUgZGlybmFtZQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c2xpbnV4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBfaGFzX3N5c2xpbnV4KGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJTVEFHSU5HX0RBVEFESVIiKQorICAgICAgICAgICAgaWYgbm90IGJvb3RpbWdfZGlyOgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfREFUQURJUiwgZXhpdGluZ1xuIikKKyAgICAgICAgICAgIGlmIG5vdCBfaGFzX3N5c2xpbnV4KGJvb3RpbWdfZGlyKToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiUGxlYXNlIGJ1aWxkIHN5c2xpbnV4IGZpcnN0XG4iKQorICAgICAgICAgICAgIyBqdXN0IHNvIHRoZSByZXN1bHQgbm90ZXMgZGlzcGxheSBpdAorICAgICAgICAgICAgY3JlYXRvci5zZXRfYm9vdGltZ19kaXIoYm9vdGltZ19kaXIpCisKKyAgICAgICAgc3RhZ2luZ19rZXJuZWxfZGlyID0ga2VybmVsX2RpcgorCisgICAgICAgIGhkZGRpciA9ICIlcy9oZGQvYm9vdCIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSAwNjQ0ICVzL2J6SW1hZ2UgJXMvdm1saW51eiIgXAorICAgICAgICAgICAgJSAoc3RhZ2luZ19rZXJuZWxfZGlyLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gNDQ0ICVzL3N5c2xpbnV4L2xkbGludXguc3lzICVzL2xkbGludXguc3lzIiBcCisgICAgICAgICAgICAlIChib290aW1nX2RpciwgaGRkZGlyKQorICAgICAgICBleGVjX2NtZChpbnN0YWxsX2NtZCkKKworICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSBoZGRkaXIKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBibG9ja3MgPSBpbnQob3V0LnNwbGl0KClbMF0pCisKKyAgICAgICAgZXh0cmFfYmxvY2tzID0gcGFydC5nZXRfZXh0cmFfYmxvY2tfY291bnQoYmxvY2tzKQorCisgICAgICAgIGlmIGV4dHJhX2Jsb2NrcyA8IEJPT1RERF9FWFRSQV9TUEFDRToKKyAgICAgICAgICAgIGV4dHJhX2Jsb2NrcyA9IEJPT1RERF9FWFRSQV9TUEFDRQorCisgICAgICAgIGJsb2NrcyArPSBleHRyYV9ibG9ja3MKKworICAgICAgICBtc2dlci5kZWJ1ZygiQWRkZWQgJWQgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiICUgXAorICAgICAgICAgICAgICAgICAgICAoZXh0cmFfYmxvY2tzLCBwYXJ0Lm1vdW50cG9pbnQsIGJsb2NrcykpCisKKyAgICAgICAgIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKyAgICAgICAgIyB0cmFjayBvciBtY29weSB3aWxsIGNvbXBsYWluLiBTZWN0b3JzIGFyZSA1MTIgYnl0ZXMsIGFuZCB3ZQorICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCisgICAgICAgICMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorICAgICAgICBibG9ja3MgKz0gKDE2IC0gKGJsb2NrcyAlIDE2KSkKKworICAgICAgICAjIGRvc2ZzIGltYWdlLCBjcmVhdGVkIGJ5IG1rZG9zZnMKKyAgICAgICAgYm9vdGltZyA9ICIlcy9ib290LmltZyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgZG9zZnNfY21kID0gIm1rZG9zZnMgLW4gYm9vdCAtUyA1MTIgLUMgJXMgJWQiICUgKGJvb3RpbWcsIGJsb2NrcykKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgbWNvcHlfY21kID0gIm1jb3B5IC1pICVzIC1zICVzLyogOjovIiAlIChib290aW1nLCBoZGRkaXIpCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChtY29weV9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIHN5c2xpbnV4X2NtZCA9ICJzeXNsaW51eCAlcyIgJSBib290aW1nCisgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChzeXNsaW51eF9jbWQsIG5hdGl2ZV9zeXNyb290KQorCisgICAgICAgIGNobW9kX2NtZCA9ICJjaG1vZCA2NDQgJXMiICUgYm9vdGltZworICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICAgICAgZHVfY21kID0gImR1IC1MYmtzICVzIiAlIGJvb3RpbWcKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBib290aW1nX3NpemUgPSBvdXQuc3BsaXQoKVswXQorCisgICAgICAgIHBhcnQuc2V0X3NpemUoYm9vdGltZ19zaXplKQorICAgICAgICBwYXJ0LnNldF9zb3VyY2VfZmlsZShib290aW1nKQorCisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9mc2ltYWdlLnB5IGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2ZzaW1hZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5NGU4OQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9mc2ltYWdlLnB5CkBAIC0wLDAgKzEsNzMgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgb3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGdldF9iaXRiYWtlX3ZhcgorCitjbGFzcyBGU0ltYWdlUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgQWRkIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZXN5c3RlbSBpbWFnZSB0byB0aGUgcGFydGl0aW9uIGxheW91dC4KKyAgICAiIiIKKworICAgIG5hbWUgPSAnZnNpbWFnZScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19pbnN0YWxsX2Rpc2soY2xzLCBkaXNrLCBkaXNrX25hbWUsIGNyLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuIERvIG5vdGhpbmcuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkuIFBvc3NpYmx5IHByZXBhcmUKKyAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlcyBvZiBzb21lIHNvcnQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2VfYnVpbGRkaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIikKKyAgICAgICAgICAgIGlmIG5vdCBib290aW1nX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBERVBMT1lfRElSX0lNQUdFLCBleGl0aW5nXG4iKQorCisgICAgICAgIG1zZ2VyLmRlYnVnKCdCb290aW1nIGRpcjogJXMnICUgYm9vdGltZ19kaXIpCisKKyAgICAgICAgaWYgJ2ZpbGUnIG5vdCBpbiBzb3VyY2VfcGFyYW1zOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIk5vIGZpbGUgc3BlY2lmaWVkXG4iKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKGJvb3RpbWdfZGlyLCBzb3VyY2VfcGFyYW1zWydmaWxlJ10pCisKKworICAgICAgICBtc2dlci5kZWJ1ZygnUHJlcGFyaW5nIHBhcnRpdGlvbiB1c2luZyBpbWFnZSAlcycgJSAoc3JjKSkKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmc19mcm9tX2ZzX2ltYWdlKGNyX3dvcmtkaXIsIHNyYywgIiIpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2UvaXNvaW1hZ2UtaXNvaHlicmlkLnB5IGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcyZDhhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL2lzb2ltYWdlLWlzb2h5YnJpZC5weQpAQCAtMCwwICsxLDUzOCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBpbXBsZW1lbnRzIHRoZSAnaXNvaW1hZ2UtaXNvaHlicmlkJyBzb3VyY2UgcGx1Z2luIGNsYXNzIGZvciAnd2ljJworIworIyBBVVRIT1JTCisjIE1paGFseSBWYXJnYSA8bWloYWx5LnZhcmdhIChhdF0gbmkuY29tPgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitmcm9tIHdpYyBpbXBvcnQga2lja3N0YXJ0LCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kLCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgSXNvSW1hZ2VQbHVnaW4oU291cmNlUGx1Z2luKToKKyAgICAiIiIKKyAgICBDcmVhdGUgYSBib290YWJsZSBJU08gaW1hZ2UKKworICAgIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBoeWJyaWQsIGxlZ2FjeSBhbmQgRUZJIGJvb3RhYmxlIElTTyBpbWFnZS4gVGhlCisgICAgZ2VuZXJhdGVkIGltYWdlIGNhbiBiZSB1c2VkIG9uIG9wdGljYWwgbWVkaWEgYXMgd2VsbCBhcyBVU0IgbWVkaWEuCisKKyAgICBMZWdhY3kgYm9vdCB1c2VzIHN5c2xpbnV4IGFuZCBFRkkgYm9vdCB1c2VzIGdydWIgb3IgZ3VtbWlib290IChub3QKKyAgICBpbXBsZW1lbnRlZCB5ZXQpIGFzIGJvb3Rsb2FkZXIuIFRoZSBwbHVnaW4gY3JlYXRlcyB0aGUgZGlyZWN0b3JpZXMgcmVxdWlyZWQKKyAgICBieSBib290bG9hZGVycyBhbmQgcG9wdWxhdGVzIHRoZW0gYnkgY3JlYXRpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZQorICAgIGJvb3Rsb2FkZXIgZmlsZXMuCisKKyAgICBFeGFtcGxlIGtpY2tzdGFydCBmaWxlOgorICAgIHBhcnQgL2Jvb3QgLS1zb3VyY2UgaXNvaW1hZ2UtaXNvaHlicmlkIC0tc291cmNlcGFyYW1zPSJsb2FkZXI9Z3J1Yi1lZmksIFxcCisgICAgaW1hZ2VfbmFtZT0gSXNvSW1hZ2UiIC0tb25kaXNrIGNkIC0tbGFiZWwgTElWRUNEIC0tZnN0eXBlPWV4dDIKKyAgICBib290bG9hZGVyICAtLXRpbWVvdXQ9MTAgIC0tYXBwZW5kPSIgIgorCisgICAgSW4gLS1zb3VyY2VwYXJhbXMgImxvYWRlciIgc3BlY2lmaWVzIHRoZSBib290bG9hZGVyIHVzZWQgZm9yIGJvb3RpbmcgaW4gRUZJCisgICAgbW9kZSwgd2hpbGUgImltYWdlX25hbWUiIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGltYWdlLiBJbiB0aGUKKyAgICBleGFtcGxlIGFib3ZlLCB3aWMgY3JlYXRlcyBhbiBJU08gaW1hZ2UgbmFtZWQgSXNvSW1hZ2UtY2QuZGlyZWN0IChkZWZhdWx0CisgICAgZXh0ZW5zaW9uIGFkZGVkIGJ5IGRpcmVjdCBpbWVnZXIgcGx1Z2luKSBhbmQgYSBmaWxlIG5hbWVkIElzb0ltYWdlLWNkLmlzbworICAgICIiIgorCisgICAgbmFtZSA9ICdpc29pbWFnZS1pc29oeWJyaWQnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fY29uZmlndXJlX3N5c2xpbnV4KGNscywgY3JlYXRvciwgY3Jfd29ya2Rpcik6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgbG9hZGVyLXNwZWNpZmljIChzeXNsaW51eCkgY29uZmlnCisgICAgICAgICIiIgorICAgICAgICBzcGxhc2ggPSBvcy5wYXRoLmpvaW4oY3Jfd29ya2RpciwgIi9JU08vYm9vdC9zcGxhc2guanBnIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3BsYXNoKToKKyAgICAgICAgICAgIHNwbGFzaGxpbmUgPSAibWVudSBiYWNrZ3JvdW5kIHNwbGFzaC5qcGciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIiIKKworICAgICAgICBvcHRpb25zID0gY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoY3JlYXRvci5rcywgMTApCisKKyAgICAgICAgc3lzbGludXhfY29uZiA9ICIiCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlBST01QVCAwXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlRJTUVPVVQgJXMgXG4iICUgdGltZW91dAorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQUxMT1dPUFRJT05TIDFcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiU0VSSUFMIDAgMTE1MjAwXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIlxuIgorICAgICAgICBpZiBzcGxhc2hsaW5lOgorICAgICAgICAgICAgc3lzbGludXhfY29uZiArPSAiJXNcbiIgJSBzcGxhc2hsaW5lCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkRFRkFVTFQgYm9vdFxuIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJMQUJFTCBib290XG4iCisKKyAgICAgICAga2VybmVsID0gIi9iekltYWdlIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJLRVJORUwgIiArIGtlcm5lbCArICJcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiQVBQRU5EIGluaXRyZD0vaW5pdHJkIExBQkVMPWJvb3QgJXNcbiIgJSBvcHRpb25zCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgc3lzbGludXggY29uZmlnICVzL0lTTy9pc29saW51eC9pc29saW51eC5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgJSBjcl93b3JrZGlyKQorICAgICAgICB3aXRoIG9wZW4oIiVzL0lTTy9pc29saW51eC9pc29saW51eC5jZmciICUgY3Jfd29ya2RpciwgInciKSBhcyBjZmc6CisgICAgICAgICAgICBjZmcud3JpdGUoc3lzbGludXhfY29uZikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfZ3J1YmVmaShjbHMsIHBhcnQsIGNyZWF0b3IsIGNyX3dvcmtkaXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGxvYWRlci1zcGVjaWZpYyAoZ3J1Yi1lZmkpIGNvbmZpZworICAgICAgICAiIiIKKyAgICAgICAgc3BsYXNoID0gb3MucGF0aC5qb2luKGNyX3dvcmtkaXIsICIvRUZJL2Jvb3Qvc3BsYXNoLmpwZyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNwbGFzaCk6CisgICAgICAgICAgICBzcGxhc2hsaW5lID0gIm1lbnUgYmFja2dyb3VuZCBzcGxhc2guanBnIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BsYXNobGluZSA9ICIiCisKKyAgICAgICAgb3B0aW9ucyA9IGNyZWF0b3Iua3MuaGFuZGxlci5ib290bG9hZGVyLmFwcGVuZExpbmUKKworICAgICAgICBncnViZWZpX2NvbmYgPSAiIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAiCisgICAgICAgIGdydWJlZmlfY29uZiArPSAiLS1wYXJpdHk9bm8gLS1zdG9wPTFcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJkZWZhdWx0PWJvb3RcbiIKKyAgICAgICAgdGltZW91dCA9IGtpY2tzdGFydC5nZXRfdGltZW91dChjcmVhdG9yLmtzLCAxMCkKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ0aW1lb3V0PSVzXG4iICUgdGltZW91dAorICAgICAgICBncnViZWZpX2NvbmYgKz0gIlxuIgorICAgICAgICBncnViZWZpX2NvbmYgKz0gInNlYXJjaCAtLXNldD1yb290IC0tbGFiZWwgJXMgIiAlIHBhcnQubGFiZWwKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJtZW51ZW50cnkgJ2Jvb3Qne1xuIgorCisgICAgICAgIGtlcm5lbCA9ICIvYnpJbWFnZSIKKworICAgICAgICBncnViZWZpX2NvbmYgKz0gImxpbnV4ICVzIHJvb3R3YWl0ICVzXG4iIFwKKyAgICAgICAgICAgICUgKGtlcm5lbCwgb3B0aW9ucykKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJpbml0cmQgL2luaXRyZCBcbiIKKyAgICAgICAgZ3J1YmVmaV9jb25mICs9ICJ9XG4iCisKKyAgICAgICAgaWYgc3BsYXNobGluZToKKyAgICAgICAgICAgIGdydWJlZmlfY29uZiArPSAiJXNcbiIgJSBzcGxhc2hsaW5lCisKKyAgICAgICAgbXNnZXIuZGVidWcoIldyaXRpbmcgZ3J1YmVmaSBjb25maWcgJXMvRUZJL0JPT1QvZ3J1Yi5jZmciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICUgY3Jfd29ya2RpcikKKyAgICAgICAgd2l0aCBvcGVuKCIlcy9FRkkvQk9PVC9ncnViLmNmZyIgJSBjcl93b3JrZGlyLCAidyIpIGFzIGNmZzoKKyAgICAgICAgICAgIGNmZy53cml0ZShncnViZWZpX2NvbmYpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9idWlsZF9pbml0cmFtZnNfcGF0aChyb290ZnNfZGlyLCBjcl93b3JrZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBwYXRoIGZvciBpbml0cmFtZnMgaW1hZ2UKKyAgICAgICAgIiIiCisKKyAgICAgICAgaW5pdHJkID0gZ2V0X2JpdGJha2VfdmFyKCJJTklUUkQiKQorICAgICAgICBpZiBub3QgaW5pdHJkOgorICAgICAgICAgICAgaW5pdHJkX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpZiBub3QgaW5pdHJkX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBERVBMT1lfRElSX0lNQUdFLCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgaW1hZ2VfbmFtZSA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfQkFTRU5BTUUiKQorICAgICAgICAgICAgaWYgbm90IGltYWdlX25hbWU6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgSU1BR0VfQkFTRU5BTUUsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBpbWFnZV90eXBlID0gZ2V0X2JpdGJha2VfdmFyKCJJTklUUkFNRlNfRlNUWVBFUyIpCisgICAgICAgICAgICBpZiBub3QgaW1hZ2VfdHlwZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBJTklUUkFNRlNfRlNUWVBFUywgZXhpdGluZy5cbiIpCisKKyAgICAgICAgICAgIG1hY2hpbmVfYXJjaCA9IGdldF9iaXRiYWtlX3ZhcigiTUFDSElORV9BUkNIIikKKyAgICAgICAgICAgIGlmIG5vdCBtYWNoaW5lX2FyY2g6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgTUFDSElORV9BUkNILCBleGl0aW5nLlxuIikKKworICAgICAgICAgICAgaW5pdHJkID0gIiVzLyVzLWluaXRyYW1mcy0lcy4lcyIgXAorICAgICAgICAgICAgICAgICAgICAlIChpbml0cmRfZGlyLCBpbWFnZV9uYW1lLCBtYWNoaW5lX2FyY2gsIGltYWdlX3R5cGUpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGluaXRyZCk6CisgICAgICAgICAgICAjIENyZWF0ZSBpbml0cmQgZnJvbSByb290ZnMgZGlyZWN0b3J5CisgICAgICAgICAgICBpbml0cmQgPSAiJXMvaW5pdHJkLmNwaW8uZ3oiICUgY3Jfd29ya2RpcgorICAgICAgICAgICAgaW5pdHJkX2RpciA9ICIlcy9JTklUUkQiICUgY3Jfd29ya2RpcgorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKCIlcyIgJSByb290ZnNfZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAlIGluaXRyZF9kaXIsIHN5bWxpbmtzPVRydWUpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCIlcy9pbml0IiAlIHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MigiJXMvaW5pdCIgJSByb290ZnNfZGlyLCAiJXMvaW5pdCIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoIiVzL2luaXQiICUgcm9vdGZzX2Rpcik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5yZWFkbGluaygiJXMvaW5pdCIgJSByb290ZnNfZGlyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy9pbml0IiAlIGluaXRyZF9kaXIpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2Rpcik6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkyKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2RpciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmxleGlzdHMoIiVzL3NiaW4vaW5pdCIgJSByb290ZnNfZGlyKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnJlYWRsaW5rKCIlcy9zYmluL2luaXQiICUgcm9vdGZzX2RpciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMvaW5pdCIgJSBpbml0cmRfZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBvciBidWlsZCBpbml0cmQsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICBleGVjX2NtZCgiY2QgJXMgJiYgZmluZCAuIHwgY3BpbyAtbyAtSCBuZXdjID4lcy9pbml0cmQuY3BpbyAiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoaW5pdHJkX2RpciwgY3Jfd29ya2RpciksIGFzX3NoZWxsPVRydWUpCisgICAgICAgICAgICBleGVjX2NtZCgiZ3ppcCAtZiAtOSAtYyAlcy9pbml0cmQuY3BpbyA+ICVzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGNyX3dvcmtkaXIsIGluaXRyZCksIGFzX3NoZWxsPVRydWUpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGluaXRyZF9kaXIpCisKKyAgICAgICAgcmV0dXJuIGluaXRyZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3N0YWdlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBTcGVjaWFsIGNvbnRlbnQgc3RhZ2luZyBjYWxsZWQgYmVmb3JlIGRvX3ByZXBhcmVfcGFydGl0aW9uKCkuCisgICAgICAgIEl0IGNoZWtzIGlmIGFsbCBuZWNlc3NhcnkgdG9vbHMgYXJlIGF2YWlsYWJsZSwgaWYgbm90CisgICAgICAgIHRyaWVzIHRvIGluc3RhbCB0aGVtLgorICAgICAgICAiIiIKKyAgICAgICAgIyBNYWtlIHN1cmUgcGFydGVkIGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3Vzci9zYmluL3BhcnRlZCIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBwYXJ0ZWQtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgcGFydGVkLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgbWtmcy5leHQyLzMvNCBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy9zYmluL21rZnMuZXh0MiIgJSBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJCdWlsZGluZyBlMmZzcHJvZ3MtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgZTJmc3Byb2dzLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgc3lzbGludXggaXMgYXZhaWxhYmxlIGluIHN5c3Jvb3QgYW5kIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIHN5c2xpbnV4X2RpciA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19EQVRBRElSIikKKyAgICAgICAgaWYgbm90IHN5c2xpbnV4X2RpcjoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIFNUQUdJTkdfREFUQURJUiwgZXhpdGluZy5cbiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygiJXMvc3lzbGludXgiICUgc3lzbGludXhfZGlyKToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIHN5c2xpbnV4Li4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2Ugc3lzbGludXgiKQorICAgICAgICAgICAgbXNnZXIuaW5mbygiQnVpbGRpbmcgc3lzbGludXgtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2Ugc3lzbGludXgtbmF0aXZlIikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcy9zeXNsaW51eCIgJSBzeXNsaW51eF9kaXIpOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoIlBsZWFzZSBidWlsZCBzeXNsaW51eCBmaXJzdFxuIikKKworICAgICAgICAjTWFrZSBzdXJlIG1raXNvZnMgaXMgYXZhaWxhYmxlIGluIG5hdGl2ZSBzeXNyb290CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgiJXMvdXNyL2Jpbi9ta2lzb2ZzIiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGNkcnRvb2xzLW5hdGl2ZS4uLlxuIikKKyAgICAgICAgICAgIGV4ZWNfY21kKCJiaXRiYWtlIGNkcnRvb2xzLW5hdGl2ZSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgbWtmcy52ZmF0IGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdAorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL3NiaW4vbWtmcy52ZmF0IiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGRvc2ZzdG9vbHMtbmF0aXZlLi4uXG4iKQorICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgZG9zZnN0b29scy1uYXRpdmUiKQorCisgICAgICAgICMgTWFrZSBzdXJlIG10b29scyBpcyBhdmFpbGFibGUgaW4gbmF0aXZlIHN5c3Jvb3QKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy91c3IvYmluL21jb3B5IiAlIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIG10b29scy1uYXRpdmUuLi5cbiIpCisgICAgICAgICAgICBleGVjX2NtZCgiYml0YmFrZSBtdG9vbHMtbmF0aXZlIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3JlYXRvciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLCBjcmVhdGVzIGxvYWRlci1zcGVjaWZpYyBjb25maWcKKyAgICAgICAgIiIiCisgICAgICAgIGlzb2RpciA9ICIlcy9JU08vIiAlIGNyX3dvcmtkaXIKKworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjcl93b3JrZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoY3Jfd29ya2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzICIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgIyBPdmVyd3JpdGUgdGhlIG5hbWUgb2YgdGhlIGNyZWF0ZWQgaW1hZ2UKKyAgICAgICAgbXNnZXIuZGVidWcoIiVzIiAlIHNvdXJjZV9wYXJhbXMpCisgICAgICAgIGlmICdpbWFnZV9uYW1lJyBpbiBzb3VyY2VfcGFyYW1zIGFuZCBcCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXJhbXNbJ2ltYWdlX25hbWUnXS5zdHJpcCgpOgorICAgICAgICAgICAgY3JlYXRvci5uYW1lID0gc291cmNlX3BhcmFtc1snaW1hZ2VfbmFtZSddLnN0cmlwKCkKKyAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgaXM6ICVzIiAlIGNyZWF0b3IubmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyZWF0b3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgIEluIHRoaXMgY2FzZSwgcHJlcGFyZSBjb250ZW50IGZvciBhIGJvb3RhYmxlIElTTyBpbWFnZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaXNvZGlyID0gIiVzL0lTTyIgJSBjcl93b3JrZGlyCisKKyAgICAgICAgaWYgcGFydC5yb290ZnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCAnUk9PVEZTX0RJUicgaW4gcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXIsIGV4aXRpbmcuXG4iKQorICAgICAgICAgICAgcm9vdGZzX2RpciA9IHJvb3Rmc19kaXJbJ1JPT1RGU19ESVInXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGFydC5yb290ZnMgaW4gcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0gcm9vdGZzX2RpcltwYXJ0LnJvb3Rmc10KKyAgICAgICAgICAgIGVsaWYgcGFydC5yb290ZnM6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IHBhcnQucm9vdGZzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpcj0lcyBjb25uZWN0aW9uICIKKyAgICAgICAgICAgICAgICBtc2cgKz0gIm9yIGl0IGlzIG5vdCBhIHZhbGlkIHBhdGgsIGV4aXRpbmcuXG4iCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnICUgcGFydC5yb290ZnMpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICByb290ZnNfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJJTUFHRV9ST09URlMiKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJDb3VsZG4ndCBmaW5kIElNQUdFX1JPT1RGUywgZXhpdGluZy5cbiIpCisKKyAgICAgICAgcGFydC5zZXRfcm9vdGZzKHJvb3Rmc19kaXIpCisKKyAgICAgICAgIyBQcmVwYXJlIHJvb3Rmcy5pbWcKKyAgICAgICAgaGRkX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSERERElSIikKKyAgICAgICAgaW1nX2lzb19kaXIgPSBnZXRfYml0YmFrZV92YXIoIklTT0RJUiIpCisKKyAgICAgICAgcm9vdGZzX2ltZyA9ICIlcy9yb290ZnMuaW1nIiAlIGhkZF9kaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHJvb3Rmc19pbWcpOgorICAgICAgICAgICAgcm9vdGZzX2ltZyA9ICIlcy9yb290ZnMuaW1nIiAlIGltZ19pc29fZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShyb290ZnNfaW1nKToKKyAgICAgICAgICAgICMgY2hlY2sgaWYgcm9vdGZzLmltZyBpcyBpbiBkZXBsb3lkaXIKKyAgICAgICAgICAgIGRlcGxveV9kaXIgPSBnZXRfYml0YmFrZV92YXIoIkRFUExPWV9ESVJfSU1BR0UiKQorICAgICAgICAgICAgaW1hZ2VfbmFtZSA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfTElOS19OQU1FIikKKyAgICAgICAgICAgIHJvb3Rmc19pbWcgPSAiJXMvJXMuJXMiIFwKKyAgICAgICAgICAgICAgICAlIChkZXBsb3lfZGlyLCBpbWFnZV9uYW1lLCBwYXJ0LmZzdHlwZSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUocm9vdGZzX2ltZyk6CisgICAgICAgICAgICAjIGNyZWF0ZSBpbWFnZSBmaWxlIHdpdGggdHlwZSBzcGVjaWZpZWQgYnkgLS1mc3R5cGUKKyAgICAgICAgICAgICMgd2hpY2ggY29udGFpbnMgcm9vdGZzCisgICAgICAgICAgICBkdV9jbWQgPSAiZHUgLWJrcyAlcyIgJSByb290ZnNfZGlyCisgICAgICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgICAgICBwYXJ0LnNldF9zaXplKGludChvdXQuc3BsaXQoKVswXSkpCisgICAgICAgICAgICBwYXJ0LmV4dHJhX3NwYWNlID0gMAorICAgICAgICAgICAgcGFydC5vdmVyaGVhZF9mYWN0b3IgPSAxLjIKKyAgICAgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoY3Jfd29ya2Rpciwgb2VfYnVpbGRkaXIsIHJvb3Rmc19kaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgICAgICByb290ZnNfaW1nID0gcGFydC5zb3VyY2VfZmlsZQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLW0gMDY0NCAlcyAlcy9yb290ZnMuaW1nIiBcCisgICAgICAgICAgICAlIChyb290ZnNfaW1nLCBpc29kaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICMgUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkIGJ5IHBhcnQucHJlcGFyZV9yb290ZnMoKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXJ0LnNvdXJjZV9maWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShwYXJ0LnNvdXJjZV9maWxlKQorCisgICAgICAgICMgUHJlcGFyZSBpbml0aWFsIHJhbWRpc2sKKyAgICAgICAgaW5pdHJkID0gIiVzL2luaXRyZCIgJSBoZGRfZGlyCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShpbml0cmQpOgorICAgICAgICAgICAgaW5pdHJkID0gIiVzL2luaXRyZCIgJSBpbWdfaXNvX2RpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoaW5pdHJkKToKKyAgICAgICAgICAgIGluaXRyZCA9IGNscy5fYnVpbGRfaW5pdHJhbWZzX3BhdGgocm9vdGZzX2RpciwgY3Jfd29ya2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMgJXMvaW5pdHJkIiBcCisgICAgICAgICAgICAlIChpbml0cmQsIGlzb2RpcikKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQgYnkgX2J1aWxkX2luaXRyYW1mc19wYXRoIGZ1bmN0aW9uCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKCIlcy9pbml0cmQuY3Bpby5neiIgJSBjcl93b3JrZGlyKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiJXMvaW5pdHJkLmNwaW8uZ3oiICUgY3Jfd29ya2RpcikKKworICAgICAgICAjIEluc3RhbGwgYnpJbWFnZQorICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMvYnpJbWFnZSAlcy9iekltYWdlIiAlIFwKKyAgICAgICAgICAgIChrZXJuZWxfZGlyLCBpc29kaXIpCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICNDcmVhdGUgYm9vdGxvYWRlciBmb3IgZWZpIGJvb3QKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc291cmNlX3BhcmFtc1snbG9hZGVyJ10gPT0gJ2dydWItZWZpJzoKKyAgICAgICAgICAgICAgICAjIEJ1aWxkcyBncnViLmNmZyBpZiBJU09ESVIgZGlkbid0IGV4aXN0IG9yCisgICAgICAgICAgICAgICAgIyBkaWRuJ3QgY29udGFpbnMgZ3J1Yi5jZmcKKyAgICAgICAgICAgICAgICBib290aW1nX2RpciA9IGltZ19pc29fZGlyCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCIlcy9FRkkvQk9PVCIgJSBib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyID0gIiVzL2Jvb3RpbWciICUgY3Jfd29ya2RpcgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJvb3RpbWdfZGlyKQorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1kICVzL0VGSS9CT09UIiAlIGJvb3RpbWdfZGlyCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIlcy9FRkkvQk9PVC9ib290LmNmZyIgJSBib290aW1nX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGNscy5kb19jb25maWd1cmVfZ3J1YmVmaShwYXJ0LCBjcmVhdG9yLCBib290aW1nX2RpcikKKworICAgICAgICAgICAgICAgICMgQnVpbGRzIGJvb3R4NjQuZWZpL2Jvb3RpYTMyLmVmaSBpZiBJU09ESVIgZGlkbid0IGV4aXN0IG9yCisgICAgICAgICAgICAgICAgIyBkaWRuJ3QgY29udGFpbnMgaXQKKyAgICAgICAgICAgICAgICB0YXJnZXRfYXJjaCA9IGdldF9iaXRiYWtlX3ZhcigiVEFSR0VUX1NZUyIpCisgICAgICAgICAgICAgICAgaWYgbm90IHRhcmdldF9hcmNoOgorICAgICAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ29sdWRuJ3QgZmluZCB0YXJnZXQgYXJjaGl0ZWN0dXJlXG4iKQorCisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goIng4Nl82NCIsIHRhcmdldF9hcmNoKToKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl90YXJnZXQgPSAneDg2XzY0LWVmaScKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICAgICAgICAgICAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0X2FyY2gpOgorICAgICAgICAgICAgICAgICAgICBncnViX3RhcmdldCA9ICdpMzg2LWVmaScKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9pbWFnZSA9ICJib290aWEzMi5lZmkiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoImdydWItZWZpIGlzIGluY29tcGF0aWJsZSB3aXRoIHRhcmdldCAlc1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdGFyZ2V0X2FyY2gpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoIiVzL0VGSS9CT09ULyVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGJvb3RpbWdfZGlyLCBncnViX2ltYWdlKSk6CisgICAgICAgICAgICAgICAgICAgIGdydWJfcGF0aCA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19MSUJESVIiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3J1Yl9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgU1RBR0lOR19MSUJESVIsIGV4aXRpbmcuXG4iKQorCisgICAgICAgICAgICAgICAgICAgIGdydWJfY29yZSA9ICIlcy9ncnViLyVzIiAlIChncnViX3BhdGgsIGdydWJfdGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZ3J1Yl9jb3JlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmluZm8oIkJ1aWxkaW5nIGdydWItZWZpLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19jbWQoImJpdGJha2UgZ3J1Yi1lZmkiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZ3J1Yl9jb3JlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJQbGVhc2UgYnVpbGQgZ3J1Yi1lZmkgZmlyc3RcbiIpCisKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgPSAiZ3J1Yi1ta2ltYWdlIC1wICcvRUZJL0JPT1QnICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIi1kICVzICIgICUgZ3J1Yl9jb3JlCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICItTyAlcyAtbyAlcy9FRkkvQk9PVC8lcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZ3J1Yl90YXJnZXQsIGJvb3RpbWdfZGlyLCBncnViX2ltYWdlKQorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAicGFydF9ncHQgcGFydF9tc2RvcyBudGZzIG50ZnNjb21wIGZhdCBleHQyICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gIm5vcm1hbCBjaGFpbiBib290IGNvbmZpZ2ZpbGUgbGludXggbXVsdGlib290ICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInNlYXJjaCBlZmlfZ29wIGVmaV91Z2EgZm9udCBnZnh0ZXJtIGdmeG1lbnUgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAidGVybWluYWwgbWluaWNtZCB0ZXN0IGlvcncgbG9hZGVudiBlY2hvIGhlbHAgIgorICAgICAgICAgICAgICAgICAgICBncnViX2NtZCArPSAicmVib290IHNlcmlhbCB0ZXJtaW5mbyBpc285NjYwIGxvb3BiYWNrIHRhciAiCisgICAgICAgICAgICAgICAgICAgIGdydWJfY21kICs9ICJtZW1kaXNrIGxzIHNlYXJjaF9mc191dWlkIHVkZiBidHJmcyB4ZnMgbHZtICIKKyAgICAgICAgICAgICAgICAgICAgZ3J1Yl9jbWQgKz0gInJlaXNlcmZzIGF0YSAiCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZChncnViX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUT0RPOiBpbnNlcnQgZ3VtbWlib290IHN0dWZmCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoInVucmVjb2duaXplZCBib290aW1nLWVmaSBsb2FkZXI6ICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzb3VyY2VfcGFyYW1zWydsb2FkZXInXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgbXNnZXIuZXJyb3IoImJvb3RpbWctZWZpIHJlcXVpcmVzIGEgbG9hZGVyLCBub25lIHNwZWNpZmllZCIpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoIiVzL0VGSS9CT09UIiAlIGlzb2Rpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKCIlcy9FRkkvQk9PVCIgJSBpc29kaXIpCisKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGJvb3RpbWdfZGlyKyIvRUZJL0JPT1QiLCBpc29kaXIrIi9FRkkvQk9PVCIpCisKKyAgICAgICAgIyBJZiBleGlzdHMsIHJlbW92ZSBjcl93b3JrZGlyL2Jvb3RpbWcgdGVtcG9yYXJ5IGZvbGRlcgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiJXMvYm9vdGltZyIgJSBjcl93b3JrZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoIiVzL2Jvb3RpbWciICUgY3Jfd29ya2RpcikKKworICAgICAgICAjIENyZWF0ZSBlZmkuaW1nIHRoYXQgY29udGFpbnMgYm9vdGxvYWRlciBmaWxlcyBmb3IgRUZJIGJvb3RpbmcKKyAgICAgICAgIyBpZiBJU09ESVIgZGlkbid0IGV4aXN0IG9yIGRpZG4ndCBjb250YWlucyBpdAorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSgiJXMvZWZpLmltZyIgJSBpbWdfaXNvX2Rpcik6CisgICAgICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDA2NDQgJXMvZWZpLmltZyAlcy9lZmkuaW1nIiAlIFwKKyAgICAgICAgICAgICAgICAoaW1nX2lzb19kaXIsIGlzb2RpcikKKyAgICAgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZHVfY21kID0gImR1IC1ia3MgJXMvRUZJIiAlIGlzb2RpcgorICAgICAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICAgICAgYmxvY2tzID0gaW50KG91dC5zcGxpdCgpWzBdKQorICAgICAgICAgICAgIyBBZGQgc29tZSBleHRyYSBzcGFjZSBmb3IgZmlsZSBzeXN0ZW0gb3ZlcmhlYWQKKyAgICAgICAgICAgIGJsb2NrcyArPSAxMDAKKyAgICAgICAgICAgIG1zZyA9ICJBZGRlZCAxMDAgZXh0cmEgYmxvY2tzIHRvICVzIHRvIGdldCB0byAlZCB0b3RhbCBibG9ja3MiIFwKKyAgICAgICAgICAgICAgICAgICAgJSAocGFydC5tb3VudHBvaW50LCBibG9ja3MpCisgICAgICAgICAgICBtc2dlci5kZWJ1Zyhtc2cpCisKKyAgICAgICAgICAgICMgRW5zdXJlIHRvdGFsIHNlY3RvcnMgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHNlY3RvcnMgcGVyCisgICAgICAgICAgICAjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisgICAgICAgICAgICAjIGdlbmVyYXRlIGltYWdlcyB3aXRoIDMyIHNlY3RvcnMgcGVyIHRyYWNrLiBUaGlzIGNhbGN1bGF0aW9uIGlzCisgICAgICAgICAgICAjIGRvbmUgaW4gYmxvY2tzLCB0aHVzIHRoZSBtb2QgYnkgMTYgaW5zdGVhZCBvZiAzMi4KKyAgICAgICAgICAgIGJsb2NrcyArPSAoMTYgLSAoYmxvY2tzICUgMTYpKQorCisgICAgICAgICAgICAjIGRvc2ZzIGltYWdlIGZvciBFRkkgYm9vdAorICAgICAgICAgICAgYm9vdGltZyA9ICIlcy9lZmkuaW1nIiAlIGlzb2RpcgorCisgICAgICAgICAgICBkb3Nmc19jbWQgPSAnbWtmcy52ZmF0IC1uICJFRklpbWciIC1TIDUxMiAtQyAlcyAlZCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSAoYm9vdGltZywgYmxvY2tzKQorICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKGRvc2ZzX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIG1tZF9jbWQgPSAibW1kIC1pICVzIDo6L0VGSSIgJSBib290aW1nCisgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQobW1kX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgICAgIG1jb3B5X2NtZCA9ICJtY29weSAtaSAlcyAtcyAlcy9FRkkvKiA6Oi9FRkkvIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAlIChib290aW1nLCBpc29kaXIpCisgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQobWNvcHlfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAgICAgY2htb2RfY21kID0gImNobW9kIDY0NCAlcyIgJSBib290aW1nCisgICAgICAgICAgICBleGVjX2NtZChjaG1vZF9jbWQpCisKKyAgICAgICAgIyBQcmVwYXJlIGZpbGVzIGZvciBsZWdhY3kgYm9vdAorICAgICAgICBzeXNsaW51eF9kaXIgPSBnZXRfYml0YmFrZV92YXIoIlNUQUdJTkdfREFUQURJUiIpCisgICAgICAgIGlmIG5vdCBzeXNsaW51eF9kaXI6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBTVEFHSU5HX0RBVEFESVIsIGV4aXRpbmcuXG4iKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIlcy9pc29saW51eCIgJSBpc29kaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgiJXMvaXNvbGludXgiICUgaXNvZGlyKQorCisgICAgICAgIGluc3RhbGxfY21kID0gImluc3RhbGwgLWQgJXMvaXNvbGludXgiICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgIGNscy5kb19jb25maWd1cmVfc3lzbGludXgoY3JlYXRvciwgY3Jfd29ya2RpcikKKworICAgICAgICBpbnN0YWxsX2NtZCA9ICJpbnN0YWxsIC1tIDQ0NCAlcy9zeXNsaW51eC9sZGxpbnV4LnN5cyAiICUgc3lzbGludXhfZGlyCisgICAgICAgIGluc3RhbGxfY21kICs9ICIlcy9pc29saW51eC9sZGxpbnV4LnN5cyIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA0NDQgJXMvc3lzbGludXgvaXNvaGRwZnguYmluICIgJSBzeXNsaW51eF9kaXIKKyAgICAgICAgaW5zdGFsbF9jbWQgKz0gIiVzL2lzb2xpbnV4L2lzb2hkcGZ4LmJpbiIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA2NDQgJXMvc3lzbGludXgvaXNvbGludXguYmluICIgJSBzeXNsaW51eF9kaXIKKyAgICAgICAgaW5zdGFsbF9jbWQgKz0gIiVzL2lzb2xpbnV4L2lzb2xpbnV4LmJpbiIgJSBpc29kaXIKKyAgICAgICAgZXhlY19jbWQoaW5zdGFsbF9jbWQpCisKKyAgICAgICAgaW5zdGFsbF9jbWQgPSAiaW5zdGFsbCAtbSA2NDQgJXMvc3lzbGludXgvbGRsaW51eC5jMzIgIiAlIHN5c2xpbnV4X2RpcgorICAgICAgICBpbnN0YWxsX2NtZCArPSAiJXMvaXNvbGludXgvbGRsaW51eC5jMzIiICUgaXNvZGlyCisgICAgICAgIGV4ZWNfY21kKGluc3RhbGxfY21kKQorCisgICAgICAgICNjcmVhdGUgSVNPIGltYWdlCisgICAgICAgIGlzb19pbWcgPSAiJXMvdGVtcGlzb19pbWcuaXNvIiAlIGNyX3dvcmtkaXIKKyAgICAgICAgaXNvX2Jvb3RpbWcgPSAiaXNvbGludXgvaXNvbGludXguYmluIgorICAgICAgICBpc29fYm9vdGNhdCA9ICJpc29saW51eC9ib290LmNhdCIKKyAgICAgICAgZWZpX2ltZyA9ICJlZmkuaW1nIgorCisgICAgICAgIG1raXNvZnNfY21kID0gIm1raXNvZnMgLVYgJXMgIiAlIHBhcnQubGFiZWwKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1vICVzIC1VICIgJSBpc29faW1nCisgICAgICAgIG1raXNvZnNfY21kICs9ICItSiAtam9saWV0LWxvbmcgLXIgLWlzby1sZXZlbCAyIC1iICVzICIgJSBpc29fYm9vdGltZworICAgICAgICBta2lzb2ZzX2NtZCArPSAiLWMgJXMgLW5vLWVtdWwtYm9vdCAtYm9vdC1sb2FkLXNpemUgNCAiICUgaXNvX2Jvb3RjYXQKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1ib290LWluZm8tdGFibGUgLWVsdG9yaXRvLWFsdC1ib290ICIKKyAgICAgICAgbWtpc29mc19jbWQgKz0gIi1lbHRvcml0by1wbGF0Zm9ybSAweEVGIC1lbHRvcml0by1ib290ICVzICIgJSBlZmlfaW1nCisgICAgICAgIG1raXNvZnNfY21kICs9ICItbm8tZW11bC1ib290ICVzICIgJSBpc29kaXIKKworICAgICAgICBtc2dlci5kZWJ1ZygicnVubmluZyBjb21tYW5kOiAlcyIgJSBta2lzb2ZzX2NtZCkKKyAgICAgICAgZXhlY19uYXRpdmVfY21kKG1raXNvZnNfY21kLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBzaHV0aWwucm10cmVlKGlzb2RpcikKKworICAgICAgICBkdV9jbWQgPSAiZHUgLUxia3MgJXMiICUgaXNvX2ltZworICAgICAgICBvdXQgPSBleGVjX2NtZChkdV9jbWQpCisgICAgICAgIGlzb2ltZ19zaXplID0gaW50KG91dC5zcGxpdCgpWzBdKQorCisgICAgICAgIHBhcnQuc2V0X3NpemUoaXNvaW1nX3NpemUpCisgICAgICAgIHBhcnQuc2V0X3NvdXJjZV9maWxlKGlzb19pbWcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjcmVhdG9yLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuICBJbiB0aGlzIGNhc2UsIHdlIGluc2VydC9tb2RpZnkgdGhlIE1CUiB1c2luZyBpc29oeWJyaWQKKyAgICAgICAgdXRpbGl0eSBmb3IgYm9vdGluZyB2aWEgQklPUyBmcm9tIGRpc2sgc3RvcmFnZSBkZXZpY2VzLgorICAgICAgICAiIiIKKworICAgICAgICBmdWxsX3BhdGggPSBjcmVhdG9yLl9mdWxsX3BhdGgod29ya2RpciwgZGlza19uYW1lLCAiZGlyZWN0IikKKyAgICAgICAgaXNvX2ltZyA9ICIlcy5wMSIgJSBmdWxsX3BhdGgKKyAgICAgICAgZnVsbF9wYXRoX2lzbyA9IGNyZWF0b3IuX2Z1bGxfcGF0aCh3b3JrZGlyLCBkaXNrX25hbWUsICJpc28iKQorCisgICAgICAgIGlzb2h5YnJpZF9jbWQgPSAiaXNvaHlicmlkIC11ICVzIiAlIGlzb19pbWcKKyAgICAgICAgbXNnZXIuZGVidWcoInJ1bm5pbmcgY29tbWFuZDogJXMiICUgXAorICAgICAgICAgICAgICAgICAgICBpc29oeWJyaWRfY21kKQorICAgICAgICBleGVjX25hdGl2ZV9jbWQoaXNvaHlicmlkX2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICAgICAgIyBSZXBsYWNlIHRoZSBpbWFnZSBjcmVhdGVkIGJ5IGRpcmVjdCBwbHVnaW4gd2l0aCB0aGUgb25lIGNyZWF0ZWQgYnkKKyAgICAgICAgIyBta2lzb2ZzIGNvbW1hbmQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGlzbyBpbWFnZSBjcmVhdGVkIGJ5CisgICAgICAgICMgbWtpc29mcyBoYXMgYSB2ZXJ5IHNwZWNpZmljIE1CUiBpcyBzeXN0ZW0gYXJlYSBvZiB0aGUgSVNPIGltYWdlLCBhbmQKKyAgICAgICAgIyBkaXJlY3QgcGx1Z2luIGFkZHMgYW5kIGNvbmZpZ3VyZXMgYW4gYW5vdGhlciBNQlIuCisgICAgICAgIG1zZ2VyLmRlYnVnKCJSZXBsYWNlaW5nIHRoZSBpbWFnZSBjcmVhdGVkIGJ5IGRpcmVjdCBwbHVnaW5cbiIpCisgICAgICAgIG9zLnJlbW92ZShmdWxsX3BhdGgpCisgICAgICAgIHNodXRpbC5jb3B5Mihpc29faW1nLCBmdWxsX3BhdGhfaXNvKQorICAgICAgICBzaHV0aWwuY29weTIoZnVsbF9wYXRoX2lzbywgZnVsbF9wYXRoKQorCisgICAgICAgICMgUmVtb3ZlIHRlbXBvcmFyeSBJU08gZmlsZQorICAgICAgICBvcy5yZW1vdmUoaXNvX2ltZykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5IGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jhd2NvcHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA2OTFiYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yYXdjb3B5LnB5CkBAIC0wLDAgKzEsODcgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworCitpbXBvcnQgb3MKKworZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy5wbHVnaW5iYXNlIGltcG9ydCBTb3VyY2VQbHVnaW4KK2Zyb20gd2ljLnV0aWxzLm9lLm1pc2MgaW1wb3J0IGV4ZWNfY21kLCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgUmF3Q29weVBsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIFBvcHVsYXRlIHBhcnRpdGlvbiBjb250ZW50IGZyb20gcmF3IGltYWdlIGZpbGUuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ3Jhd2NvcHknCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBjciwgd29ya2Rpciwgb2VfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBib290aW1nX2Rpciwga2VybmVsX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGFmdGVyIGFsbCBwYXJ0aXRpb25zIGhhdmUgYmVlbiBwcmVwYXJlZCBhbmQgYXNzZW1ibGVkIGludG8gYQorICAgICAgICBkaXNrIGltYWdlLiBEbyBub3RoaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX2NvbmZpZ3VyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBjciwgY3Jfd29ya2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpLiBQb3NzaWJseSBwcmVwYXJlCisgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Ygc29tZSBzb3J0LgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRvX3ByZXBhcmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgY3IsIGNyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9lX2J1aWxkZGlyLCBib290aW1nX2Rpciwga2VybmVsX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzX2RpciwgbmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbGVkIHRvIGRvIHRoZSBhY3R1YWwgY29udGVudCBwb3B1bGF0aW9uIGZvciBhIHBhcnRpdGlvbiBpLmUuIGl0CisgICAgICAgICdwcmVwYXJlcycgdGhlIHBhcnRpdGlvbiB0byBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgaW1hZ2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICBib290aW1nX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIpCisgICAgICAgICAgICBpZiBub3QgYm9vdGltZ19kaXI6CisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IoIkNvdWxkbid0IGZpbmQgREVQTE9ZX0RJUl9JTUFHRSwgZXhpdGluZ1xuIikKKworICAgICAgICBtc2dlci5kZWJ1ZygnQm9vdGltZyBkaXI6ICVzJyAlIGJvb3RpbWdfZGlyKQorCisgICAgICAgIGlmICdmaWxlJyBub3QgaW4gc291cmNlX3BhcmFtczoKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJObyBmaWxlIHNwZWNpZmllZFxuIikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihib290aW1nX2Rpciwgc291cmNlX3BhcmFtc1snZmlsZSddKQorICAgICAgICBkc3QgPSBzcmMKKworICAgICAgICBpZiAnc2tpcCcgaW4gc291cmNlX3BhcmFtczoKKyAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihjcl93b3JrZGlyLCBzb3VyY2VfcGFyYW1zWydmaWxlJ10pCisgICAgICAgICAgICBkZF9jbWQgPSAiZGQgaWY9JXMgb2Y9JXMgaWJzPSVzIHNraXA9MSBjb252PW5vdHJ1bmMiICUgXAorICAgICAgICAgICAgICAgICAgICAoc3JjLCBkc3QsIHNvdXJjZV9wYXJhbXNbJ3NraXAnXSkKKyAgICAgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICAjIGdldCB0aGUgc2l6ZSBpbiB0aGUgcmlnaHQgdW5pdHMgZm9yIGtpY2tzdGFydCAoa0IpCisgICAgICAgIGR1X2NtZCA9ICJkdSAtTGJrcyAlcyIgJSBkc3QKKyAgICAgICAgb3V0ID0gZXhlY19jbWQoZHVfY21kKQorICAgICAgICBmaWxlc2l6ZSA9IG91dC5zcGxpdCgpWzBdCisKKyAgICAgICAgaWYgaW50KGZpbGVzaXplKSA+IGludChwYXJ0LnNpemUpOgorICAgICAgICAgICAgcGFydC5zaXplID0gZmlsZXNpemUKKworICAgICAgICBwYXJ0LnNvdXJjZV9maWxlID0gZHN0CisKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy9wbHVnaW5zL3NvdXJjZS9yb290ZnMucHkgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MDcxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzLnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIGltcGxlbWVudHMgdGhlICdyb290ZnMnIHNvdXJjZSBwbHVnaW4gY2xhc3MgZm9yICd3aWMnCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIyBKb2FvIEhlbnJpcXVlIEZlcnJlaXJhIGRlIEZyZWl0YXMgPGpvYW9oZiAoYXRdIGdtYWlsLmNvbT4KKyMKKworaW1wb3J0IG9zCisKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMucGx1Z2luYmFzZSBpbXBvcnQgU291cmNlUGx1Z2luCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBnZXRfYml0YmFrZV92YXIKKworY2xhc3MgUm9vdGZzUGx1Z2luKFNvdXJjZVBsdWdpbik6CisgICAgIiIiCisgICAgUG9wdWxhdGUgcGFydGl0aW9uIGNvbnRlbnQgZnJvbSBhIHJvb3RmcyBkaXJlY3RvcnkuCisgICAgIiIiCisKKyAgICBuYW1lID0gJ3Jvb3RmcycKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX19nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgICAgIHJldHVybiByb290ZnNfZGlyCisKKyAgICAgICAgaW1hZ2Vfcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgcm9vdGZzX2RpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2Vfcm9vdGZzX2Rpcik6CisgICAgICAgICAgICBtc2cgPSAiTm8gdmFsaWQgYXJ0aWZhY3QgSU1BR0VfUk9PVEZTIGZyb20gaW1hZ2UgbmFtZWQiCisgICAgICAgICAgICBtc2cgKz0gIiAlcyBoYXMgYmVlbiBmb3VuZCBhdCAlcywgZXhpdGluZy5cbiIgJSBcCisgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIGltYWdlX3Jvb3Rmc19kaXIpCisgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cpCisKKyAgICAgICAgcmV0dXJuIGltYWdlX3Jvb3Rmc19kaXIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcmVwYXJlX3BhcnRpdGlvbihjbHMsIHBhcnQsIHNvdXJjZV9wYXJhbXMsIGNyLCBjcl93b3JrZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZV9idWlsZGRpciwgYm9vdGltZ19kaXIsIGtlcm5lbF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgdG8gZG8gdGhlIGFjdHVhbCBjb250ZW50IHBvcHVsYXRpb24gZm9yIGEgcGFydGl0aW9uIGkuZS4gaXQKKyAgICAgICAgJ3ByZXBhcmVzJyB0aGUgcGFydGl0aW9uIHRvIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBwcmVwYXJlIGNvbnRlbnQgZm9yIGxlZ2FjeSBiaW9zIGJvb3QgcGFydGl0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgcGFydC5yb290ZnMgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCAnUk9PVEZTX0RJUicgaW4ga3Jvb3Rmc19kaXI6CisgICAgICAgICAgICAgICAgbXNnID0gIkNvdWxkbid0IGZpbmQgLS1yb290ZnMtZGlyLCBleGl0aW5nIgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZykKKyAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBrcm9vdGZzX2RpclsnUk9PVEZTX0RJUiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpbiBrcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICByb290ZnNfZGlyID0ga3Jvb3Rmc19kaXJbcGFydC5yb290ZnNdCisgICAgICAgICAgICBlbGlmIHBhcnQucm9vdGZzOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBwYXJ0LnJvb3RmcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSAiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXI9JXMgY29ubmVjdGlvbiIKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBvciBpdCBpcyBub3QgYSB2YWxpZCBwYXRoLCBleGl0aW5nIgorICAgICAgICAgICAgICAgIG1zZ2VyLmVycm9yKG1zZyAlIHBhcnQucm9vdGZzKQorCisgICAgICAgIHJlYWxfcm9vdGZzX2RpciA9IGNscy5fX2dldF9yb290ZnNfZGlyKHJvb3Rmc19kaXIpCisKKyAgICAgICAgcGFydC5zZXRfcm9vdGZzKHJlYWxfcm9vdGZzX2RpcikKKyAgICAgICAgcGFydC5wcmVwYXJlX3Jvb3Rmcyhjcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcmVhbF9yb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmc19wY2Jpb3NfZXh0LnB5IGIvc2NyaXB0cy9saWIvd2ljL3BsdWdpbnMvc291cmNlL3Jvb3Rmc19wY2Jpb3NfZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTdiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvcGx1Z2lucy9zb3VyY2Uvcm9vdGZzX3BjYmlvc19leHQucHkKQEAgLTAsMCArMSwxODEgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEFVVEhPUgorIyBBZHJpYW4gRnJlaWhvZmVyIDxhZHJpYW4uZnJlaWhvZmVyIChhdF0gbmVyYXRlYy5jb20+CisjCisKK2ltcG9ydCBvcworZnJvbSB3aWMgaW1wb3J0IGtpY2tzdGFydAorZnJvbSB3aWMgaW1wb3J0IG1zZ2VyCitmcm9tIHdpYy51dGlscyBpbXBvcnQgc3lzbGludXgKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKK2Zyb20gd2ljLnV0aWxzLm9lIGltcG9ydCBtaXNjCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IEltYWdlRXJyb3IKK2Zyb20gd2ljLnBsdWdpbmJhc2UgaW1wb3J0IFNvdXJjZVBsdWdpbgorCisKKyMgcHlsaW50OiBkaXNhYmxlPW5vLWluaXQKK2NsYXNzIFJvb3Rmc1BsdWdpbihTb3VyY2VQbHVnaW4pOgorICAgICIiIgorICAgIENyZWF0ZSByb290IHBhcnRpdGlvbiBhbmQgaW5zdGFsbCBzeXNsaW51eCBib290bG9hZGVyCisKKyAgICBUaGlzIHBsdWdpbiBjcmVhdGVzIGEgZGlzayBpbWFnZSBjb250YWluaW5nIGEgYm9vdGFibGUgcm9vdCBwYXJ0aXRpb24gd2l0aAorICAgIHN5c2xpbnV4IGluc3RhbGxlZC4gVGhlIGZpbGVzeXN0ZW0gaXMgZXh0Mi8zLzQsIG5vIGV4dHJhIGJvb3QgcGFydGl0aW9uIGlzCisgICAgcmVxdWlyZWQuCisKKyAgICBFeGFtcGxlIGtpY2tzdGFydCBmaWxlOgorICAgIHBhcnQgLyAtLXNvdXJjZSByb290ZnMtcGNiaW9zLWV4dCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0NCAtLWxhYmVsIHJvb3RmcyAtLWFsaWduIDEwMjQKKyAgICBib290bG9hZGVyIC0tc291cmNlIHJvb3Rmcy1wY2Jpb3MtZXh0IC0tdGltZW91dD0wIC0tYXBwZW5kPSJyb290d2FpdCByb290ZnN0eXBlPWV4dDQiCisKKyAgICBUaGUgZmlyc3QgbGluZSBnZW5lcmF0ZXMgYSByb290IGZpbGUgc3lzdGVtIGluY2x1ZGluZyBhIHN5c2xpbnV4LmNmZyBmaWxlCisgICAgVGhlICItLXNvdXJjZSByb290ZnMtcGNiaW9zLWV4dCIgaW4gdGhlIHNlY29uZCBsaW5lIHRyaWdnZXJzIHRoZSBpbnN0YWxsYXRpb24KKyAgICBvZiBsZGxpbnV4LnN5cyBpbnRvIHRoZSBpbWFnZS4KKyAgICAiIiIKKworICAgIG5hbWUgPSAncm9vdGZzLXBjYmlvcy1leHQnCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgIEZpbmQgcm9vdGZzIHBzZXVkbyBkaXIKKworICAgICAgICBJZiByb290ZnNfZGlyIGlzIGEgZGlyZWN0b3J5IGNvbnNpZGVyIGl0IGFzIHJvb3RmcyBkaXJlY3RvcnkuCisgICAgICAgIE90aGVyd2lzZSBhc2sgYml0YmFrZSBhYm91dCB0aGUgSU1BR0VfUk9PVEZTIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICByZXR1cm4gcm9vdGZzX2RpcgorCisgICAgICAgIGltYWdlX3Jvb3Rmc19kaXIgPSBtaXNjLmdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgcm9vdGZzX2RpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1hZ2Vfcm9vdGZzX2Rpcik6CisgICAgICAgICAgICBtc2cgPSAiTm8gdmFsaWQgYXJ0aWZhY3QgSU1BR0VfUk9PVEZTIGZyb20gaW1hZ2UgbmFtZWQiCisgICAgICAgICAgICBtc2cgKz0gIiAlcyBoYXMgYmVlbiBmb3VuZCBhdCAlcywgZXhpdGluZy5cbiIgJSBcCisgICAgICAgICAgICAgICAgKHJvb3Rmc19kaXIsIGltYWdlX3Jvb3Rmc19kaXIpCisgICAgICAgICAgICBtc2dlci5lcnJvcihtc2cpCisKKyAgICAgICAgcmV0dXJuIGltYWdlX3Jvb3Rmc19kaXIKKworICAgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19jb25maWd1cmVfcGFydGl0aW9uKGNscywgcGFydCwgc291cmNlX3BhcmFtcywgaW1hZ2VfY3JlYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9jcmVhdG9yX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGVzIHN5c2xpbnV4IGNvbmZpZyBpbiByb290ZnMgZGlyZWN0b3J5CisKKyAgICAgICAgQ2FsbGVkIGJlZm9yZSBkb19wcmVwYXJlX3BhcnRpdGlvbigpCisgICAgICAgICIiIgorICAgICAgICBvcHRpb25zID0gaW1hZ2VfY3JlYXRvci5rcy5oYW5kbGVyLmJvb3Rsb2FkZXIuYXBwZW5kTGluZQorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgPSAiIgorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJQUk9NUFQgMFxuIgorCisgICAgICAgIHRpbWVvdXQgPSBraWNrc3RhcnQuZ2V0X3RpbWVvdXQoaW1hZ2VfY3JlYXRvci5rcykKKyAgICAgICAgaWYgbm90IHRpbWVvdXQ6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBzeXNsaW51eF9jb25mICs9ICJUSU1FT1VUICIgKyBzdHIodGltZW91dCkgKyAiXG4iCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkFMTE9XT1BUSU9OUyAxXG4iCisKKyAgICAgICAgIyBEZXJpdmUgU0VSSUFMLi4uIGxpbmUgZnJvbSBmcm9tIGtlcm5lbCBib290IHBhcmFtZXRlcnMKKyAgICAgICAgc3lzbGludXhfY29uZiArPSBzeXNsaW51eC5zZXJpYWxfY29uc29sZV9mb3JtX2thcmdzKG9wdGlvbnMpICsgIlxuIgorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIkRFRkFVTFQgbGludXhcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiTEFCRUwgbGludXhcbiIKKyAgICAgICAgc3lzbGludXhfY29uZiArPSAiICBLRVJORUwgL2Jvb3QvYnpJbWFnZVxuIgorCisgICAgICAgIHN5c2xpbnV4X2NvbmYgKz0gIiAgQVBQRU5EIGxhYmVsPWJvb3Qgcm9vdD0lcyAlc1xuIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlX2NyZWF0b3Iucm9vdGRldiwgb3B0aW9ucykKKworICAgICAgICBzeXNsaW51eF9jZmcgPSBvcy5wYXRoLmpvaW4oaW1hZ2VfY3JlYXRvci5yb290ZnNfZGlyWydST09URlNfRElSJ10sICJib290IiwgInN5c2xpbnV4LmNmZyIpCisgICAgICAgIG1zZ2VyLmRlYnVnKCJXcml0aW5nIHN5c2xpbnV4IGNvbmZpZyAlcyIgJSBzeXNsaW51eF9jZmcpCisgICAgICAgIHdpdGggb3BlbihzeXNsaW51eF9jZmcsICJ3IikgYXMgY2ZnOgorICAgICAgICAgICAgY2ZnLndyaXRlKHN5c2xpbnV4X2NvbmYpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9fcHJlcGFyZV9wYXJ0aXRpb24oY2xzLCBwYXJ0LCBzb3VyY2VfcGFyYW1zLCBpbWFnZV9jcmVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZV9jcmVhdG9yX3dvcmtkaXIsIG9lX2J1aWxkZGlyLCBib290aW1nX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsX2Rpciwga3Jvb3Rmc19kaXIsIG5hdGl2ZV9zeXNyb290KToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZXMgcGFydGl0aW9uIG91dCBvZiByb290ZnMgZGlyZWN0b3J5CisKKyAgICAgICAgUHJlcGFyZSBjb250ZW50IGZvciBhIHJvb3RmcyBwYXJ0aXRpb24gaS5lLiBjcmVhdGUgYSBwYXJ0aXRpb24KKyAgICAgICAgYW5kIGZpbGwgaXQgZnJvbSBhIC9yb290ZnMgZGlyLgorICAgICAgICBJbnN0YWxsIHN5c2xpbnV4IGJvb3Rsb2FkZXIgaW50byByb290IHBhcnRpdGlvbiBpbWFnZSBmaWxlCisgICAgICAgICIiIgorICAgICAgICBkZWYgaXNfZXhlKGV4ZXBhdGgpOgorICAgICAgICAgICAgIiIiVmVyaWZ5IGV4ZXBhdGggaXMgYW4gZXhlY3V0YWJsZSBmaWxlIiIiCisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5pc2ZpbGUoZXhlcGF0aCkgYW5kIG9zLmFjY2VzcyhleGVwYXRoLCBvcy5YX09LKQorCisgICAgICAgICMgTWFrZSBzdXJlIHN5c2xpbnV4LW5vbXRvb2xzIGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgc3lzcm9vdCBvciBmYWlsCisgICAgICAgIG5hdGl2ZV9zeXNsaW51eF9ub210b29scyA9IG9zLnBhdGguam9pbihuYXRpdmVfc3lzcm9vdCwgInVzci9iaW4vc3lzbGludXgtbm9tdG9vbHMiKQorICAgICAgICBpZiBub3QgaXNfZXhlKG5hdGl2ZV9zeXNsaW51eF9ub210b29scyk6CisgICAgICAgICAgICBtc2dlci5pbmZvKCJidWlsZGluZyBzeXNsaW51eC1uYXRpdmUuLi4iKQorICAgICAgICAgICAgbWlzYy5leGVjX2NtZCgiYml0YmFrZSBzeXNsaW51eC1uYXRpdmUiKQorICAgICAgICBpZiBub3QgaXNfZXhlKG5hdGl2ZV9zeXNsaW51eF9ub210b29scyk6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCBzeXNsaW51eC1ub210b29scyAoJXMpLCBleGl0aW5nXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNsaW51eF9ub210b29scykKKworICAgICAgICBpZiBwYXJ0LnJvb3RmcyBpcyBOb25lOgorICAgICAgICAgICAgaWYgJ1JPT1RGU19ESVInIG5vdCBpbiBrcm9vdGZzX2RpcjoKKyAgICAgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAtLXJvb3Rmcy1kaXIsIGV4aXRpbmciKQorICAgICAgICAgICAgcm9vdGZzX2RpciA9IGtyb290ZnNfZGlyWydST09URlNfRElSJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBhcnQucm9vdGZzIGluIGtyb290ZnNfZGlyOgorICAgICAgICAgICAgICAgIHJvb3Rmc19kaXIgPSBrcm9vdGZzX2RpcltwYXJ0LnJvb3Rmc10KKyAgICAgICAgICAgIGVsaWYgcGFydC5yb290ZnM6CisgICAgICAgICAgICAgICAgcm9vdGZzX2RpciA9IHBhcnQucm9vdGZzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJDb3VsZG4ndCBmaW5kIC0tcm9vdGZzLWRpcj0lcyBjb25uZWN0aW9uIgorICAgICAgICAgICAgICAgIG1zZyArPSAiIG9yIGl0IGlzIG5vdCBhIHZhbGlkIHBhdGgsIGV4aXRpbmciCisgICAgICAgICAgICAgICAgbXNnZXIuZXJyb3IobXNnICUgcGFydC5yb290ZnMpCisKKyAgICAgICAgcmVhbF9yb290ZnNfZGlyID0gY2xzLl9nZXRfcm9vdGZzX2Rpcihyb290ZnNfZGlyKQorCisgICAgICAgIHBhcnQuc2V0X3Jvb3RmcyhyZWFsX3Jvb3Rmc19kaXIpCisgICAgICAgIHBhcnQucHJlcGFyZV9yb290ZnMoaW1hZ2VfY3JlYXRvcl93b3JrZGlyLCBvZV9idWlsZGRpciwgcmVhbF9yb290ZnNfZGlyLCBuYXRpdmVfc3lzcm9vdCkKKworICAgICAgICAjIGluc3RhbGwgc3lzbGludXggaW50byByb290ZnMgcGFydGl0aW9uCisgICAgICAgIHN5c2xpbnV4X2NtZCA9ICJzeXNsaW51eC1ub210b29scyAtZCAvYm9vdCAtaSAlcyIgJSBwYXJ0LnNvdXJjZV9maWxlCisgICAgICAgIG1pc2MuZXhlY19uYXRpdmVfY21kKHN5c2xpbnV4X2NtZCwgbmF0aXZlX3N5c3Jvb3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZG9faW5zdGFsbF9kaXNrKGNscywgZGlzaywgZGlza19uYW1lLCBpbWFnZV9jcmVhdG9yLCB3b3JrZGlyLCBvZV9idWlsZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLCBuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICIiIgorICAgICAgICBBc3NlbWJsZSBwYXJ0aXRpb25zIHRvIGRpc2sgaW1hZ2UKKworICAgICAgICBDYWxsZWQgYWZ0ZXIgYWxsIHBhcnRpdGlvbnMgaGF2ZSBiZWVuIHByZXBhcmVkIGFuZCBhc3NlbWJsZWQgaW50byBhCisgICAgICAgIGRpc2sgaW1hZ2UuIEluIHRoaXMgY2FzZSwgd2UgaW5zdGFsbCB0aGUgTUJSLgorICAgICAgICAiIiIKKyAgICAgICAgbWJyZmlsZSA9IG9zLnBhdGguam9pbihuYXRpdmVfc3lzcm9vdCwgInVzci9zaGFyZS9zeXNsaW51eC8iKQorICAgICAgICBpZiBpbWFnZV9jcmVhdG9yLnB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJzoKKyAgICAgICAgICAgIG1icmZpbGUgKz0gIm1ici5iaW4iCisgICAgICAgIGVsaWYgaW1hZ2VfY3JlYXRvci5wdGFibGVfZm9ybWF0ID09ICdncHQnOgorICAgICAgICAgICAgbWJyZmlsZSArPSAiZ3B0bWJyLmJpbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZ2VyLmVycm9yKCJVbnN1cHBvcnRlZCBwYXJ0aXRpb24gdGFibGU6ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX2NyZWF0b3IucHRhYmxlX2Zvcm1hdCkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobWJyZmlsZSk6CisgICAgICAgICAgICBtc2dlci5lcnJvcigiQ291bGRuJ3QgZmluZCAlcy4gSGFzIHN5c2xpbnV4LW5hdGl2ZSBiZWVuIGJha2VkPyIgJSBtYnJmaWxlKQorCisgICAgICAgIGZ1bGxfcGF0aCA9IGRpc2tbJ2Rpc2snXS5kZXZpY2UKKyAgICAgICAgbXNnZXIuZGVidWcoIkluc3RhbGxpbmcgTUJSIG9uIGRpc2sgJXMgYXMgJXMgd2l0aCBzaXplICVzIGJ5dGVzIiBcCisgICAgICAgICAgICAgICAgICAgICUgKGRpc2tfbmFtZSwgZnVsbF9wYXRoLCBkaXNrWydtaW5fc2l6ZSddKSkKKworICAgICAgICByZXRfY29kZSA9IHJ1bm5lci5zaG93KFsnZGQnLCAnaWY9JXMnICUgbWJyZmlsZSwgJ29mPSVzJyAlIGZ1bGxfcGF0aCwgJ2NvbnY9bm90cnVuYyddKQorICAgICAgICBpZiByZXRfY29kZSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgSW1hZ2VFcnJvcigiVW5hYmxlIHRvIHNldCBNQlIgdG8gJXMiICUgZnVsbF9wYXRoKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3Rlc3QgYi9zY3JpcHRzL2xpYi93aWMvdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlYWZiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3Rlc3QKQEAgLTAsMCArMSBAQAordGVzdApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5IGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy91dGlscy9lcnJvcnMucHkgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjUxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvZXJyb3JzLnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFJlZCBIYXQsIEluYy4KKyMgQ29weXJpZ2h0IChjKSAyMDExIEludGVsLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitjbGFzcyBXaWNFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQ3JlYXRvckVycm9yKFdpY0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFVzYWdlKFdpY0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIEltYWdlRXJyb3IoV2ljRXJyb3IpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5IGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL2ZzX3JlbGF0ZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3NDQ2MQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy91dGlscy9mc19yZWxhdGVkLnB5CkBAIC0wLDAgKzEsODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbiAtdHQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3LCBSZWQgSGF0LCBJbmMuCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAoraW1wb3J0IG9zCitpbXBvcnQgZXJybm8KKworZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZXhlY19jbWQKKworZGVmIG1ha2VkaXJzKGRpcm5hbWUpOgorICAgICIiIkEgdmVyc2lvbiBvZiBvcy5tYWtlZGlycygpIHRoYXQgZG9lc24ndCB0aHJvdyBhbgorICAgIGV4Y2VwdGlvbiBpZiB0aGUgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgIGlmIGVyci5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZQorCitjbGFzcyBEaXNrOgorICAgICIiIgorICAgIEdlbmVyaWMgYmFzZSBvYmplY3QgZm9yIGEgZGlzay4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSwgZGV2aWNlPU5vbmUpOgorICAgICAgICBzZWxmLl9kZXZpY2UgPSBkZXZpY2UKKyAgICAgICAgc2VsZi5fc2l6ZSA9IHNpemUKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X2RldmljZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZQorICAgIGRlZiBzZXRfZGV2aWNlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9kZXZpY2UgPSBwYXRoCisgICAgZGV2aWNlID0gcHJvcGVydHkoZ2V0X2RldmljZSwgc2V0X2RldmljZSkKKworICAgIGRlZiBnZXRfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NpemUKKyAgICBzaXplID0gcHJvcGVydHkoZ2V0X3NpemUpCisKKworY2xhc3MgRGlza0ltYWdlKERpc2spOgorICAgICIiIgorICAgIEEgRGlzayBiYWNrZWQgYnkgYSBmaWxlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbWFnZV9maWxlLCBzaXplKToKKyAgICAgICAgRGlzay5fX2luaXRfXyhzZWxmLCBzaXplKQorICAgICAgICBzZWxmLmltYWdlX2ZpbGUgPSBpbWFnZV9maWxlCisKKyAgICBkZWYgZXhpc3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMoc2VsZi5pbWFnZV9maWxlKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZXZpY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBibG9ja3MgPSBzZWxmLnNpemUgLyAxMDI0CisgICAgICAgIGlmIHNlbGYuc2l6ZSAtIGJsb2NrcyAqIDEwMjQ6CisgICAgICAgICAgICBibG9ja3MgKz0gMQorCisgICAgICAgICMgY3JlYXRlIGRpc2sgaW1hZ2UKKyAgICAgICAgZGRfY21kID0gImRkIGlmPS9kZXYvemVybyBvZj0lcyBicz0xMDI0IHNlZWs9JWQgY291bnQ9MSIgJSBcCisgICAgICAgICAgICAoc2VsZi5pbWFnZV9maWxlLCBibG9ja3MpCisgICAgICAgIGV4ZWNfY21kKGRkX2NtZCkKKworICAgICAgICBzZWxmLmRldmljZSA9IHNlbGYuaW1hZ2VfZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3V0aWxzL21pc2MucHkgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvbWlzYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc1MDY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL21pc2MucHkKQEAgLTAsMCArMSw1OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uIC10dAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTEgSW50ZWwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorCitkZWYgYnVpbGRfbmFtZShrc2NmZywgcmVsZWFzZT1Ob25lLCBwcmVmaXg9Tm9uZSwgc3VmZml4PU5vbmUpOgorICAgICIiIkNvbnN0cnVjdCBhbmQgcmV0dXJuIGFuIGltYWdlIG5hbWUgc3RyaW5nLgorCisgICAgVGhpcyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gdG8gaGVscCBjcmVhdGUgc2Vuc2libGUgbmFtZSBhbmQgZnNsYWJlbAorICAgIHN0cmluZ3MuIFRoZSBuYW1lIGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBzYW5zLXByZWZpeC1hbmQtZXh0ZW5zaW9uCisgICAga2lja3N0YXJ0IGZpbGVuYW1lIGFuZCB0aGUgc3VwcGxpZWQgcHJlZml4IGFuZCBzdWZmaXguCisKKyAgICBrc2NmZyAtLSBhIHBhdGggdG8gYSBraWNrc3RhcnQgZmlsZQorICAgIHJlbGVhc2UgLS0gIGEgcmVwbGFjZW1lbnQgdG8gc3VmZml4IGZvciBpbWFnZSByZWxlYXNlCisgICAgcHJlZml4IC0tIGEgcHJlZml4IHRvIHByZXBlbmQgdG8gdGhlIG5hbWU7IGRlZmF1bHRzIHRvIE5vbmUsIHdoaWNoIGNhdXNlcworICAgICAgICAgICAgICBubyBwcmVmaXggdG8gYmUgdXNlZAorICAgIHN1ZmZpeCAtLSBhIHN1ZmZpeCB0byBhcHBlbmQgdG8gdGhlIG5hbWU7IGRlZmF1bHRzIHRvIE5vbmUsIHdoaWNoIGNhdXNlcworICAgICAgICAgICAgICBhIFlZWVlNTURESEhNTSBzdWZmaXggdG8gYmUgdXNlZAorCisgICAgTm90ZSwgaWYgbWF4bGVuIGlzIGxlc3MgdGhlbiB0aGUgbGVuKHN1ZmZpeCksIHlvdSBnZXQgdG8ga2VlcCBib3RoIHBpZWNlcy4KKworICAgICIiIgorICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGtzY2ZnKQorICAgIGlkeCA9IG5hbWUucmZpbmQoJy4nKQorICAgIGlmIGlkeCA+PSAwOgorICAgICAgICBuYW1lID0gbmFtZVs6aWR4XQorCisgICAgaWYgcmVsZWFzZSBpcyBub3QgTm9uZToKKyAgICAgICAgc3VmZml4ID0gIiIKKyAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgcHJlZml4ID0gIiIKKyAgICBpZiBzdWZmaXggaXMgTm9uZToKKyAgICAgICAgc3VmZml4ID0gdGltZS5zdHJmdGltZSgiJVklbSVkJUglTSIpCisKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgbmFtZSA9IG5hbWVbbGVuKHByZWZpeCk6XQorCisgICAgcHJlZml4ID0gIiVzLSIgJSBwcmVmaXggaWYgcHJlZml4IGVsc2UgIiIKKyAgICBzdWZmaXggPSAiLSVzIiAlIHN1ZmZpeCBpZiBzdWZmaXggZWxzZSAiIgorCisgICAgcmV0ID0gcHJlZml4ICsgbmFtZSArIHN1ZmZpeAorCisgICAgcmV0dXJuIHJldApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL19faW5pdF9fLnB5IGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODE1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMiBAQAorIworIyBPcGVuRW1iZWRkZWQgd2ljIHV0aWxzIGxpYnJhcnkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gbGludXguaW50ZWwuY29tPgorIwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvb2UvbWlzYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzcwZDkzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL29lL21pc2MucHkKQEAgLTAsMCArMSwyMzQgQEAKKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBERVNDUklQVElPTgorIyBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHBsYWNlIHRvIGNvbGxlY3QgdmFyaW91cyB3aWMtcmVsYXRlZCB1dGlscworIyBmb3IgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBUb29scy4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisiIiJNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucy4iIiIKKworaW1wb3J0IG9zCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKK2Zyb20gd2ljLnV0aWxzIGltcG9ydCBydW5uZXIKKworIyBleGVjdXRhYmxlIC0+IHJlY2lwZSBwYWlycyBmb3IgZXhlY19uYXRpdmVfY21kCitOQVRJVkVfUkVDSVBFUyA9IHsibWNvcHkiOiAibXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta2Rvc2ZzIjogImRvc2ZzdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuYnRyZnMiOiAiYnRyZnMtdG9vbHMiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MiI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0MyI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMuZXh0NCI6ICJlMmZzcHJvZ3MiLAorICAgICAgICAgICAgICAgICAgIm1rZnMudmZhdCI6ICJkb3Nmc3Rvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta3NxdWFzaGZzIjogInNxdWFzaGZzLXRvb2xzIiwKKyAgICAgICAgICAgICAgICAgICJta3N3YXAiOiAidXRpbC1saW51eCIsCisgICAgICAgICAgICAgICAgICAicGFydGVkIjogInBhcnRlZCIsCisgICAgICAgICAgICAgICAgICAic2dkaXNrIjogImdwdGZkaXNrIiwKKyAgICAgICAgICAgICAgICAgICJzeXNsaW51eCI6ICJzeXNsaW51eCIKKyAgICAgICAgICAgICAgICAgfQorCitkZWYgX2V4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGw9RmFsc2UsIGNhdGNoPTMpOgorICAgICIiIgorICAgIEV4ZWN1dGUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKKworICAgIE5lZWQgdG8gZXhlY3V0ZSBhc19zaGVsbCBpZiB0aGUgY29tbWFuZCB1c2VzIHdpbGRjYXJkcworICAgICIiIgorICAgIG1zZ2VyLmRlYnVnKCJfZXhlY19jbWQ6ICVzIiAlIGNtZF9hbmRfYXJncykKKyAgICBhcmdzID0gY21kX2FuZF9hcmdzLnNwbGl0KCkKKyAgICBtc2dlci5kZWJ1ZyhhcmdzKQorCisgICAgaWYgYXNfc2hlbGw6CisgICAgICAgIHJldCwgb3V0ID0gcnVubmVyLnJ1bnRvb2woY21kX2FuZF9hcmdzLCBjYXRjaCkKKyAgICBlbHNlOgorICAgICAgICByZXQsIG91dCA9IHJ1bm5lci5ydW50b29sKGFyZ3MsIGNhdGNoKQorICAgIG91dCA9IG91dC5zdHJpcCgpCisgICAgbXNnZXIuZGVidWcoIl9leGVjX2NtZDogb3V0cHV0IGZvciAlcyAocmMgPSAlZCk6ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoY21kX2FuZF9hcmdzLCByZXQsIG91dCkpCisKKyAgICByZXR1cm4gKHJldCwgb3V0KQorCisKK2RlZiBleGVjX2NtZChjbWRfYW5kX2FyZ3MsIGFzX3NoZWxsPUZhbHNlLCBjYXRjaD0zKToKKyAgICAiIiIKKyAgICBFeGVjdXRlIGNvbW1hbmQsIGNhdGNoaW5nIHN0ZGVyciwgc3Rkb3V0CisKKyAgICBFeGl0cyBpZiByYyBub24temVybworICAgICIiIgorICAgIHJldCwgb3V0ID0gX2V4ZWNfY21kKGNtZF9hbmRfYXJncywgYXNfc2hlbGwsIGNhdGNoKQorCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIG1zZ2VyLmVycm9yKCJleGVjX2NtZDogJXMgcmV0dXJuZWQgJyVzJyBpbnN0ZWFkIG9mIDAiICUgXAorICAgICAgICAgICAgICAgICAgICAoY21kX2FuZF9hcmdzLCByZXQpKQorCisgICAgcmV0dXJuIG91dAorCisKK2RlZiBleGVjX25hdGl2ZV9jbWQoY21kX2FuZF9hcmdzLCBuYXRpdmVfc3lzcm9vdCwgY2F0Y2g9Myk6CisgICAgIiIiCisgICAgRXhlY3V0ZSBuYXRpdmUgY29tbWFuZCwgY2F0Y2hpbmcgc3RkZXJyLCBzdGRvdXQKKworICAgIE5lZWQgdG8gZXhlY3V0ZSBhc19zaGVsbCBpZiB0aGUgY29tbWFuZCB1c2VzIHdpbGRjYXJkcworCisgICAgQWx3YXlzIG5lZWQgdG8gZXhlY3V0ZSBuYXRpdmUgY29tbWFuZHMgYXNfc2hlbGwKKyAgICAiIiIKKyAgICBuYXRpdmVfcGF0aHMgPSBcCisgICAgICAgICJleHBvcnQgUEFUSD0lcy9zYmluOiVzL3Vzci9zYmluOiVzL3Vzci9iaW4iICUgXAorICAgICAgICAobmF0aXZlX3N5c3Jvb3QsIG5hdGl2ZV9zeXNyb290LCBuYXRpdmVfc3lzcm9vdCkKKyAgICBuYXRpdmVfY21kX2FuZF9hcmdzID0gIiVzOyVzIiAlIChuYXRpdmVfcGF0aHMsIGNtZF9hbmRfYXJncykKKyAgICBtc2dlci5kZWJ1ZygiZXhlY19uYXRpdmVfY21kOiAlcyIgJSBjbWRfYW5kX2FyZ3MpCisKKyAgICBhcmdzID0gY21kX2FuZF9hcmdzLnNwbGl0KCkKKyAgICBtc2dlci5kZWJ1ZyhhcmdzKQorCisgICAgcmV0LCBvdXQgPSBfZXhlY19jbWQobmF0aXZlX2NtZF9hbmRfYXJncywgVHJ1ZSwgY2F0Y2gpCisKKyAgICBpZiByZXQgPT0gMTI3OiAjIHNoZWxsIGNvbW1hbmQtbm90LWZvdW5kCisgICAgICAgIHByb2cgPSBhcmdzWzBdCisgICAgICAgIG1zZyA9ICJBIG5hdGl2ZSBwcm9ncmFtICVzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBpbWFnZSAiXAorICAgICAgICAgICAgICAid2FzIG5vdCBmb3VuZCAoc2VlIGRldGFpbHMgYWJvdmUpLlxuXG4iICUgcHJvZworICAgICAgICByZWNpcGUgPSBOQVRJVkVfUkVDSVBFUy5nZXQocHJvZykKKyAgICAgICAgaWYgcmVjaXBlOgorICAgICAgICAgICAgbXNnICs9ICJQbGVhc2UgYmFrZSBpdCB3aXRoICdiaXRiYWtlICVzLW5hdGl2ZScgIlwKKyAgICAgICAgICAgICAgICAgICAiYW5kIHRyeSBhZ2Fpbi5cbiIgJSByZWNpcGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyArPSAiV2ljIGZhaWxlZCB0byBmaW5kIGEgcmVjaXBlIHRvIGJ1aWxkIG5hdGl2ZSAlcy4gUGxlYXNlICJcCisgICAgICAgICAgICAgICAgICAgImZpbGUgYSBidWcgYWdhaW5zdCB3aWMuXG4iICUgcHJvZworICAgICAgICBtc2dlci5lcnJvcihtc2cpCisgICAgaWYgb3V0OgorICAgICAgICBtc2dlci5kZWJ1ZygnIiVzIiBvdXRwdXQ6ICVzJyAlIChhcmdzWzBdLCBvdXQpKQorCisgICAgaWYgcmV0ICE9IDA6CisgICAgICAgIG1zZ2VyLmVycm9yKCJleGVjX2NtZDogJyVzJyByZXR1cm5lZCAnJXMnIGluc3RlYWQgb2YgMCIgJSBcCisgICAgICAgICAgICAgICAgICAgIChjbWRfYW5kX2FyZ3MsIHJldCkpCisKKyAgICByZXR1cm4gcmV0LCBvdXQKKworQk9PVEREX0VYVFJBX1NQQUNFID0gMTYzODQKKworY2xhc3MgQml0YmFrZVZhcnMoZGVmYXVsdGRpY3QpOgorICAgICIiIgorICAgIENvbnRhaW5lciBmb3IgQml0YmFrZSB2YXJpYWJsZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBkZWZhdWx0ZGljdC5fX2luaXRfXyhzZWxmLCBkaWN0KQorCisgICAgICAgICMgZGVmYXVsdF9pbWFnZSBhbmQgdmFyc19kaXIgYXR0cmlidXRlcyBzaG91bGQgYmUgc2V0IGZyb20gb3V0c2lkZQorICAgICAgICBzZWxmLmRlZmF1bHRfaW1hZ2UgPSBOb25lCisgICAgICAgIHNlbGYudmFyc19kaXIgPSBOb25lCisKKyAgICBkZWYgX3BhcnNlX2xpbmUoc2VsZiwgbGluZSwgaW1hZ2UpOgorICAgICAgICAiIiIKKyAgICAgICAgUGFyc2Ugb25lIGxpbmUgZnJvbSBiaXRiYWtlIC1lIG91dHB1dCBvciBmcm9tIC5lbnYgZmlsZS4KKyAgICAgICAgUHV0IHJlc3VsdCBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBzdG9yYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgIj0iIG5vdCBpbiBsaW5lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSwgdmFsID0gbGluZS5zcGxpdCgiPSIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGtleSA9IGtleS5zdHJpcCgpCisgICAgICAgIHZhbCA9IHZhbC5zdHJpcCgpCisgICAgICAgIGlmIGtleS5yZXBsYWNlKCdfJywgJycpLmlzYWxudW0oKToKKyAgICAgICAgICAgIHNlbGZbaW1hZ2VdW2tleV0gPSB2YWwuc3RyaXAoJyInKQorCisgICAgZGVmIGdldF92YXIoc2VsZiwgdmFyLCBpbWFnZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCBiaXRiYWtlIHZhcmlhYmxlIGZyb20gJ2JpdGJha2UgLWUnIG91dHB1dCBvciBmcm9tIC5lbnYgZmlsZS4KKyAgICAgICAgVGhpcyBpcyBhIGxhenkgbWV0aG9kLCBpLmUuIGl0IHJ1bnMgYml0YmFrZSBvciBwYXJzZXMgZmlsZSBvbmx5IHdoZW4KKyAgICAgICAgb25seSB3aGVuIHZhcmlhYmxlIGlzIHJlcXVlc3RlZC4gSXQgYWxzbyBjYWNoZXMgcmVzdWx0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpbWFnZToKKyAgICAgICAgICAgIGltYWdlID0gc2VsZi5kZWZhdWx0X2ltYWdlCisKKyAgICAgICAgaWYgaW1hZ2Ugbm90IGluIHNlbGY6CisgICAgICAgICAgICBpZiBpbWFnZSBhbmQgc2VsZi52YXJzX2RpcjoKKyAgICAgICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnZhcnNfZGlyLCBpbWFnZSArICcuZW52JykKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICMgcGFyc2UgLmVudiBmaWxlCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgdmFyc2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB2YXJzZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9saW5lKGxpbmUsIGltYWdlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgYml0YmFrZSB2YXJpYWJsZSBmcm9tICVzLiIgJSBmbmFtZQorICAgICAgICAgICAgICAgICAgICBwcmludCAiRmlsZSAlcyBkb2Vzbid0IGV4aXN0LiIgJSBmbmFtZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBHZXQgYml0YmFrZSAtZSBvdXRwdXQKKyAgICAgICAgICAgICAgICBjbWQgPSAiYml0YmFrZSAtZSIKKyAgICAgICAgICAgICAgICBpZiBpbWFnZToKKyAgICAgICAgICAgICAgICAgICAgY21kICs9ICIgJXMiICUgaW1hZ2UKKworICAgICAgICAgICAgICAgIGxvZ19sZXZlbCA9IG1zZ2VyLmdldF9sb2dsZXZlbCgpCisgICAgICAgICAgICAgICAgbXNnZXIuc2V0X2xvZ2xldmVsKCdub3JtYWwnKQorICAgICAgICAgICAgICAgIHJldCwgbGluZXMgPSBfZXhlY19jbWQoY21kKQorICAgICAgICAgICAgICAgIG1zZ2VyLnNldF9sb2dsZXZlbChsb2dfbGV2ZWwpCisKKyAgICAgICAgICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJDb3VsZG4ndCBnZXQgJyVzJyBvdXRwdXQuIiAlIGNtZAorICAgICAgICAgICAgICAgICAgICBwcmludCAiQml0YmFrZSBmYWlsZWQgd2l0aCBlcnJvcjpcbiVzXG4iICUgbGluZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICAjIFBhcnNlIGJpdGJha2UgLWUgb3V0cHV0CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXMuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2xpbmUobGluZSwgaW1hZ2UpCisKKyAgICAgICAgICAgICMgTWFrZSBmaXJzdCBpbWFnZSBhIGRlZmF1bHQgc2V0IG9mIHZhcmlhYmxlcworICAgICAgICAgICAgaW1hZ2VzID0gW2tleSBmb3Iga2V5IGluIHNlbGYgaWYga2V5XQorICAgICAgICAgICAgaWYgbGVuKGltYWdlcykgPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmW05vbmVdID0gc2VsZltpbWFnZV0KKworICAgICAgICByZXR1cm4gc2VsZltpbWFnZV0uZ2V0KHZhcikKKworIyBDcmVhdGUgQkJfVkFSUyBzaW5nbGV0b24KK0JCX1ZBUlMgPSBCaXRiYWtlVmFycygpCisKK2RlZiBnZXRfYml0YmFrZV92YXIodmFyLCBpbWFnZT1Ob25lKToKKyAgICAiIiIKKyAgICBQcm92aWRlIG9sZCBnZXRfYml0YmFrZV92YXIgQVBJIGJ5IHdyYXBwaW5nCisgICAgZ2V0X3ZhciBtZXRob2Qgb2YgQkJfVkFSUyBzaW5nbGV0b24uCisgICAgIiIiCisgICAgcmV0dXJuIEJCX1ZBUlMuZ2V0X3Zhcih2YXIsIGltYWdlKQorCitkZWYgcGFyc2Vfc291cmNlcGFyYW1zKHNvdXJjZXBhcmFtcyk6CisgICAgIiIiCisgICAgU3BsaXQgc291cmNlcGFyYW1zIHN0cmluZyBvZiB0aGUgZm9ybSBrZXkxPXZhbDFbLGtleTI9dmFsMiwuLi5dCisgICAgaW50byBhIGRpY3QuICBBbHNvIGFjY2VwdHMgdmFsdWVsZXNzIGtleXMgaS5lLiB3aXRob3V0ID0uCisKKyAgICBSZXR1cm5zIGRpY3Qgb2YgcGFyYW0ga2V5L3ZhbCBwYWlycyAobm90ZSB0aGF0IHZhbCBtYXkgYmUgTm9uZSkuCisgICAgIiIiCisgICAgcGFyYW1zX2RpY3QgPSB7fQorCisgICAgcGFyYW1zID0gc291cmNlcGFyYW1zLnNwbGl0KCcsJykKKyAgICBpZiBwYXJhbXM6CisgICAgICAgIGZvciBwYXIgaW4gcGFyYW1zOgorICAgICAgICAgICAgaWYgbm90IHBhcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90ICc9JyBpbiBwYXI6CisgICAgICAgICAgICAgICAga2V5ID0gcGFyCisgICAgICAgICAgICAgICAgdmFsID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrZXksIHZhbCA9IHBhci5zcGxpdCgnPScpCisgICAgICAgICAgICBwYXJhbXNfZGljdFtrZXldID0gdmFsCisKKyAgICByZXR1cm4gcGFyYW1zX2RpY3QKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5IGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3BhcnRpdGlvbmVkZnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExMDNiYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvbGliL3dpYy91dGlscy9wYXJ0aXRpb25lZGZzLnB5CkBAIC0wLDAgKzEsMzYyIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSBJbnRlbCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggUmVkIEhhdCwgSW5jLgorIyBDb3B5cmlnaHQgKGMpIDIwMDggRGFuaWVsIFAuIEJlcnJhbmdlCisjIENvcHlyaWdodCAoYykgMjAwOCBEYXZpZCBQLiBIdWZmCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorIyBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCitpbXBvcnQgb3MKK2Zyb20gd2ljIGltcG9ydCBtc2dlcgorZnJvbSB3aWMudXRpbHMuZXJyb3JzIGltcG9ydCBJbWFnZUVycm9yCitmcm9tIHdpYy51dGlscy5vZS5taXNjIGltcG9ydCBleGVjX2NtZCwgZXhlY19uYXRpdmVfY21kCisKKyMgT3ZlcmhlYWQgb2YgdGhlIE1CUiBwYXJ0aXRpb25pbmcgc2NoZW1lIChqdXN0IG9uZSBzZWN0b3IpCitNQlJfT1ZFUkhFQUQgPSAxCisKKyMgT3ZlcmhlYWQgb2YgdGhlIEdQVCBwYXJ0aXRpb25pbmcgc2NoZW1lCitHUFRfT1ZFUkhFQUQgPSAzNAorCisjIFNpemUgb2YgYSBzZWN0b3IgaW4gYnl0ZXMKK1NFQ1RPUl9TSVpFID0gNTEyCisKK2NsYXNzIEltYWdlKG9iamVjdCk6CisgICAgIiIiCisgICAgR2VuZXJpYyBiYXNlIG9iamVjdCBmb3IgYW4gaW1hZ2UuCisKKyAgICBBbiBJbWFnZSBpcyBhIGNvbnRhaW5lciBmb3IgYSBzZXQgb2YgRGlza0ltYWdlcyBhbmQgYXNzb2NpYXRlZAorICAgIHBhcnRpdGlvbnMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hdGl2ZV9zeXNyb290PU5vbmUpOgorICAgICAgICBzZWxmLmRpc2tzID0ge30KKyAgICAgICAgc2VsZi5wYXJ0aXRpb25zID0gW10KKyAgICAgICAgIyBTaXplIG9mIGEgc2VjdG9yIHVzZWQgaW4gY2FsY3VsYXRpb25zCisgICAgICAgIHNlbGYuc2VjdG9yX3NpemUgPSBTRUNUT1JfU0laRQorICAgICAgICBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dCA9IEZhbHNlCisgICAgICAgIHNlbGYubmF0aXZlX3N5c3Jvb3QgPSBuYXRpdmVfc3lzcm9vdAorCisgICAgZGVmIF9fYWRkX2Rpc2soc2VsZiwgZGlza19uYW1lKToKKyAgICAgICAgIiIiIEFkZCBhIGRpc2sgJ2Rpc2tfbmFtZScgdG8gdGhlIGludGVybmFsIGxpc3Qgb2YgZGlza3MuIE5vdGUsCisgICAgICAgICdkaXNrX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGluIHRoZSB0YXJnZXQgc3lzdGVtCisgICAgICAgIChlLmcuLCBzZGIpLiAiIiIKKworICAgICAgICBpZiBkaXNrX25hbWUgaW4gc2VsZi5kaXNrczoKKyAgICAgICAgICAgICMgV2UgYWxyZWFkeSBoYXZlIHRoaXMgZGlzaworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dAorCisgICAgICAgIHNlbGYuZGlza3NbZGlza19uYW1lXSA9IFwKKyAgICAgICAgICAgICAgICB7J2Rpc2snOiBOb25lLCAgICAgIyBEaXNrIG9iamVjdAorICAgICAgICAgICAgICAgICAnbnVtcGFydCc6IDAsICAgICAjIE51bWJlciBvZiBhbGxvY2F0ZSBwYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgICdyZWFscGFydCc6IDAsICAgICMgTnVtYmVyIG9mIHBhcnRpdGlvbnMgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICAgICAgICAgICAgICAncGFydGl0aW9ucyc6IFtdLCAjIEluZGV4ZXMgdG8gc2VsZi5wYXJ0aXRpb25zCisgICAgICAgICAgICAgICAgICdvZmZzZXQnOiAwLCAgICAgICMgT2Zmc2V0IG9mIG5leHQgcGFydGl0aW9uIChpbiBzZWN0b3JzKQorICAgICAgICAgICAgICAgICAjIE1pbmltdW0gcmVxdWlyZWQgZGlzayBzaXplIHRvIGZpdCBhbGwgcGFydGl0aW9ucyAoaW4gYnl0ZXMpCisgICAgICAgICAgICAgICAgICdtaW5fc2l6ZSc6IDAsCisgICAgICAgICAgICAgICAgICdwdGFibGVfZm9ybWF0JzogIm1zZG9zIn0gIyBQYXJ0aXRpb24gdGFibGUgZm9ybWF0CisKKyAgICBkZWYgYWRkX2Rpc2soc2VsZiwgZGlza19uYW1lLCBkaXNrX29iaik6CisgICAgICAgICIiIiBBZGQgYSBkaXNrIG9iamVjdCB3aGljaCBoYXZlIHRvIGJlIHBhcnRpdGlvbmVkLiBNb3JlIHRoYW4gb25lIGRpc2sKKyAgICAgICAgY2FuIGJlIGFkZGVkLiBJbiBjYXNlIG9mIG11bHRpcGxlIGRpc2tzLCBkaXNrIHBhcnRpdGlvbnMgaGF2ZSB0byBiZQorICAgICAgICBhZGRlZCBmb3IgZWFjaCBkaXNrIHNlcGFyYXRlbHkgd2l0aCAnYWRkX3BhcnRpdGlvbigpIi4gIiIiCisKKyAgICAgICAgc2VsZi5fX2FkZF9kaXNrKGRpc2tfbmFtZSkKKyAgICAgICAgc2VsZi5kaXNrc1tkaXNrX25hbWVdWydkaXNrJ10gPSBkaXNrX29iagorCisgICAgZGVmIF9fYWRkX3BhcnRpdGlvbihzZWxmLCBwYXJ0KToKKyAgICAgICAgIiIiIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yICdhZGRfcGFydGl0aW9uKCknIHdoaWNoIGFkZHMgYQorICAgICAgICBwYXJ0aXRpb24gdG8gdGhlIGludGVybmFsIGxpc3Qgb2YgcGFydGl0aW9ucy4gIiIiCisKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXJ0aXRpb25zX2xheWVkX291dAorCisgICAgICAgIHNlbGYucGFydGl0aW9ucy5hcHBlbmQocGFydCkKKyAgICAgICAgc2VsZi5fX2FkZF9kaXNrKHBhcnRbJ2Rpc2tfbmFtZSddKQorCisgICAgZGVmIGFkZF9wYXJ0aXRpb24oc2VsZiwgc2l6ZSwgZGlza19uYW1lLCBtb3VudHBvaW50LCBzb3VyY2VfZmlsZT1Ob25lLCBmc3R5cGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1Ob25lLCBmc29wdHM9Tm9uZSwgYm9vdD1GYWxzZSwgYWxpZ249Tm9uZSwgbm9fdGFibGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgcGFydF90eXBlPU5vbmUsIHV1aWQ9Tm9uZSk6CisgICAgICAgICIiIiBBZGQgdGhlIG5leHQgcGFydGl0aW9uLiBQcnRpdGlvbnMgaGF2ZSB0byBiZSBhZGRlZCBpbiB0aGUKKyAgICAgICAgZmlyc3QtdG8tbGFzdCBvcmRlci4gIiIiCisKKyAgICAgICAga3NfcG51bSA9IGxlbihzZWxmLnBhcnRpdGlvbnMpCisKKyAgICAgICAgIyBDb252ZXJ0aW5nIGtCIHRvIHNlY3RvcnMgZm9yIHBhcnRlZAorICAgICAgICBzaXplID0gc2l6ZSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplCisKKyAgICAgICAgIyBXZSBzdGlsbCBuZWVkIHBhcnRpdGlvbiBmb3IgIi8iIG9yIG5vbi1zdWJ2b2x1bWUKKyAgICAgICAgaWYgbW91bnRwb2ludCA9PSAiLyIgb3Igbm90IGZzb3B0czoKKyAgICAgICAgICAgIHBhcnQgPSB7J2tzX3BudW0nOiBrc19wbnVtLCAjIFBhcnRpdGlvbiBudW1iZXIgaW4gdGhlIEtTIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiBzaXplLCAjIEluIHNlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgJ21vdW50cG9pbnQnOiBtb3VudHBvaW50LCAjIE1vdW50IHJlbGF0aXZlIHRvIGNocm9vdAorICAgICAgICAgICAgICAgICAgICAnc291cmNlX2ZpbGUnOiBzb3VyY2VfZmlsZSwgIyBwYXJ0aXRpb24gY29udGVudHMKKyAgICAgICAgICAgICAgICAgICAgJ2ZzdHlwZSc6IGZzdHlwZSwgIyBGaWxlc3lzdGVtIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgJ2Zzb3B0cyc6IGZzb3B0cywgIyBGaWxlc3lzdGVtIG1vdW50IG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogbGFiZWwsICMgUGFydGl0aW9uIGxhYmVsCisgICAgICAgICAgICAgICAgICAgICdkaXNrX25hbWUnOiBkaXNrX25hbWUsICMgcGh5c2ljYWwgZGlzayBuYW1lIGhvbGRpbmcgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICdkZXZpY2UnOiBOb25lLCAjIGtwYXJ0eCBkZXZpY2Ugbm9kZSBmb3IgcGFydGl0aW9uCisgICAgICAgICAgICAgICAgICAgICdudW0nOiBOb25lLCAjIFBhcnRpdGlvbiBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgJ2Jvb3QnOiBib290LCAjIEJvb3RhYmxlIGZsYWcKKyAgICAgICAgICAgICAgICAgICAgJ2FsaWduJzogYWxpZ24sICMgUGFydGl0aW9uIGFsaWdubWVudAorICAgICAgICAgICAgICAgICAgICAnbm9fdGFibGUnIDogbm9fdGFibGUsICMgUGFydGl0aW9uIGRvZXMgbm90IGFwcGVhciBpbiBwYXJ0aXRpb24gdGFibGUKKyAgICAgICAgICAgICAgICAgICAgJ3BhcnRfdHlwZScgOiBwYXJ0X3R5cGUsICMgUGFydGl0aW9uIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgJ3V1aWQnOiB1dWlkfSAjIFBhcnRpdGlvbiBVVUlECisKKyAgICAgICAgICAgIHNlbGYuX19hZGRfcGFydGl0aW9uKHBhcnQpCisKKyAgICBkZWYgbGF5b3V0X3BhcnRpdGlvbnMoc2VsZiwgcHRhYmxlX2Zvcm1hdD0ibXNkb3MiKToKKyAgICAgICAgIiIiIExheW91dCB0aGUgcGFydGl0aW9ucywgbWVhbmluZyBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIGV2ZXJ5CisgICAgICAgIHBhcnRpdGlvbiBvbiB0aGUgZGlzay4gVGhlICdwdGFibGVfZm9ybWF0JyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUKKyAgICAgICAgcGFydGl0aW9uIHRhYmxlIGZvcm1hdCBhbmQgbWF5IGJlICJtc2RvcyIuICIiIgorCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBc3NpZ25pbmcgJXMgcGFydGl0aW9ucyB0byBkaXNrcyIgJSBwdGFibGVfZm9ybWF0KQorCisgICAgICAgIGlmIHNlbGYuX3BhcnRpdGlvbnNfbGF5ZWRfb3V0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcGFydGl0aW9uc19sYXllZF9vdXQgPSBUcnVlCisKKyAgICAgICAgIyBHbyB0aHJvdWdoIHBhcnRpdGlvbnMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIGluIC5rcyBmaWxlCisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UobGVuKHNlbGYucGFydGl0aW9ucykpOgorICAgICAgICAgICAgcGFydCA9IHNlbGYucGFydGl0aW9uc1tudW1dCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRpc2tzLmhhc19rZXkocGFydFsnZGlza19uYW1lJ10pOgorICAgICAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoIk5vIGRpc2sgJXMgZm9yIHBhcnRpdGlvbiAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFydFsnZGlza19uYW1lJ10sIHBhcnRbJ21vdW50cG9pbnQnXSkpCisKKyAgICAgICAgICAgIGlmIHB0YWJsZV9mb3JtYXQgPT0gJ21zZG9zJyBhbmQgcGFydFsncGFydF90eXBlJ106CisgICAgICAgICAgICAgICAgIyBUaGUgLS1wYXJ0LXR5cGUgY2FuIGFsc28gYmUgaW1wbGVtZW50ZWQgZm9yIE1CUiBwYXJ0aXRpb25zLAorICAgICAgICAgICAgICAgICMgaW4gd2hpY2ggY2FzZSBpdCB3b3VsZCBtYXAgdG8gdGhlIDEtYnl0ZSAicGFydGl0aW9uIHR5cGUiCisgICAgICAgICAgICAgICAgIyBmaWxlZCBhdCBvZmZzZXQgMyBvZiB0aGUgcGFydGl0aW9uIGVudHJ5LgorICAgICAgICAgICAgICAgIHJhaXNlIEltYWdlRXJyb3IoInNldHRpbmcgY3VzdG9tIHBhcnRpdGlvbiB0eXBlIGlzIG5vdCAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsZW1lbnRlZCBmb3IgbXNkb3MgcGFydGl0aW9ucyIpCisKKyAgICAgICAgICAgICMgR2V0IHRoZSBkaXNrIHdoZXJlIHRoZSBwYXJ0aXRpb24gaXMgbG9jYXRlZAorICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbcGFydFsnZGlza19uYW1lJ11dCisgICAgICAgICAgICBkaXNrWydudW1wYXJ0J10gKz0gMQorICAgICAgICAgICAgaWYgbm90IHBhcnRbJ25vX3RhYmxlJ106CisgICAgICAgICAgICAgICAgZGlza1sncmVhbHBhcnQnXSArPSAxCisgICAgICAgICAgICBkaXNrWydwdGFibGVfZm9ybWF0J10gPSBwdGFibGVfZm9ybWF0CisKKyAgICAgICAgICAgIGlmIGRpc2tbJ251bXBhcnQnXSA9PSAxOgorICAgICAgICAgICAgICAgIGlmIHB0YWJsZV9mb3JtYXQgPT0gIm1zZG9zIjoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmhlYWQgPSBNQlJfT1ZFUkhFQUQKKyAgICAgICAgICAgICAgICBlbGlmIHB0YWJsZV9mb3JtYXQgPT0gImdwdCI6CisgICAgICAgICAgICAgICAgICAgIG92ZXJoZWFkID0gR1BUX09WRVJIRUFECisKKyAgICAgICAgICAgICAgICAjIFNraXAgb25lIHNlY3RvciByZXF1aXJlZCBmb3IgdGhlIHBhcnRpdGlvbmluZyBzY2hlbWUgb3ZlcmhlYWQKKyAgICAgICAgICAgICAgICBkaXNrWydvZmZzZXQnXSArPSBvdmVyaGVhZAorCisgICAgICAgICAgICBpZiBkaXNrWydyZWFscGFydCddID4gMzoKKyAgICAgICAgICAgICAgICAjIFJlc2VydmUgYSBzZWN0b3IgZm9yIEVCUiBmb3IgZXZlcnkgbG9naWNhbCBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAjIGJlZm9yZSBhbGlnbm1lbnQgaXMgcGVyZm9ybWVkLgorICAgICAgICAgICAgICAgIGlmIHB0YWJsZV9mb3JtYXQgPT0gIm1zZG9zIjoKKyAgICAgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gKz0gMQorCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ2FsaWduJ106CisgICAgICAgICAgICAgICAgIyBJZiBub3QgZmlyc3QgcGFydGl0aW9uIGFuZCB3ZSBkbyBoYXZlIGFsaWdubWVudCBzZXQgd2UgbmVlZAorICAgICAgICAgICAgICAgICMgdG8gYWxpZ24gdGhlIHBhcnRpdGlvbi4KKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGxlYXZlcyBhIGVtcHR5IHNwYWNlcyB0byB0aGUgZGlzay4gVG8gZmlsbCB0aGUKKyAgICAgICAgICAgICAgICAjIGdhcHMgd2UgY291bGQgZW5sYXJnZWEgdGhlIHByZXZpb3VzIHBhcnRpdGlvbj8KKworICAgICAgICAgICAgICAgICMgQ2FsYyBob3cgbXVjaCB0aGUgYWxpZ25tZW50IGlzIG9mZi4KKyAgICAgICAgICAgICAgICBhbGlnbl9zZWN0b3JzID0gZGlza1snb2Zmc2V0J10gJSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplKQorCisgICAgICAgICAgICAgICAgaWYgYWxpZ25fc2VjdG9yczoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBwYXJ0aXRpb24gaXMgbm90IGFsaWduZWQgYXMgcmVxdWlyZWQsIHdlIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgIyB0byBtb3ZlIGZvcndhcmQgdG8gdGhlIG5leHQgYWxpZ25tZW50IHBvaW50CisgICAgICAgICAgICAgICAgICAgIGFsaWduX3NlY3RvcnMgPSAocGFydFsnYWxpZ24nXSAqIDEwMjQgLyBzZWxmLnNlY3Rvcl9zaXplKSAtIGFsaWduX3NlY3RvcnMKKworICAgICAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiUmVhbGlnbm1lbnQgZm9yICVzJXMgd2l0aCAlcyBzZWN0b3JzLCBvcmlnaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZmZzZXQgJXMsIHRhcmdldCBhbGlnbm1lbnQgaXMgJXNLLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnZGlza19uYW1lJ10sIGRpc2tbJ251bXBhcnQnXSwgYWxpZ25fc2VjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddLCBwYXJ0WydhbGlnbiddKSkKKworICAgICAgICAgICAgICAgICAgICAjIGluY3JlYXNlIHRoZSBvZmZzZXQgc28gd2UgYWN0dWFsbHkgc3RhcnQgdGhlIHBhcnRpdGlvbiBvbiByaWdodCBhbGlnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgZGlza1snb2Zmc2V0J10gKz0gYWxpZ25fc2VjdG9ycworCisgICAgICAgICAgICBwYXJ0WydzdGFydCddID0gZGlza1snb2Zmc2V0J10KKyAgICAgICAgICAgIGRpc2tbJ29mZnNldCddICs9IHBhcnRbJ3NpemUnXQorCisgICAgICAgICAgICBwYXJ0Wyd0eXBlJ10gPSAncHJpbWFyeScKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0Wydub190YWJsZSddOgorICAgICAgICAgICAgICAgIHBhcnRbJ251bSddID0gZGlza1sncmVhbHBhcnQnXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJ0WydudW0nXSA9IDAKKworICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICJtc2RvcyI6CisgICAgICAgICAgICAgICAgaWYgZGlza1sncmVhbHBhcnQnXSA+IDM6CisgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3R5cGUnXSA9ICdsb2dpY2FsJworICAgICAgICAgICAgICAgICAgICBwYXJ0WydudW0nXSA9IGRpc2tbJ3JlYWxwYXJ0J10gKyAxCisKKyAgICAgICAgICAgIGRpc2tbJ3BhcnRpdGlvbnMnXS5hcHBlbmQobnVtKQorICAgICAgICAgICAgbXNnZXIuZGVidWcoIkFzc2lnbmVkICVzIHRvICVzJWQsIHNlY3RvcnMgcmFuZ2UgJWQtJWQgc2l6ZSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2VjdG9ycyAoJWQgYnl0ZXMpLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhcnRbJ21vdW50cG9pbnQnXSwgcGFydFsnZGlza19uYW1lJ10sIHBhcnRbJ251bSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3N0YXJ0J10gKyBwYXJ0WydzaXplJ10gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3NpemUnXSwgcGFydFsnc2l6ZSddICogc2VsZi5zZWN0b3Jfc2l6ZSkpCisKKyAgICAgICAgIyBPbmNlIGFsbCB0aGUgcGFydGl0aW9ucyBoYXZlIGJlZW4gbGF5ZWQgb3V0LCB3ZSBjYW4gY2FsY3VsYXRlIHRoZQorICAgICAgICAjIG1pbnVtaW0gZGlzayBzaXplcy4KKyAgICAgICAgZm9yIGRpc2sgaW4gc2VsZi5kaXNrcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGRpc2tbJ21pbl9zaXplJ10gPSBkaXNrWydvZmZzZXQnXQorICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICJncHQiOgorICAgICAgICAgICAgICAgIGRpc2tbJ21pbl9zaXplJ10gKz0gR1BUX09WRVJIRUFECisKKyAgICAgICAgICAgIGRpc2tbJ21pbl9zaXplJ10gKj0gc2VsZi5zZWN0b3Jfc2l6ZQorCisgICAgZGVmIF9fY3JlYXRlX3BhcnRpdGlvbihzZWxmLCBkZXZpY2UsIHBhcnR0eXBlLCBmc3R5cGUsIHN0YXJ0LCBzaXplKToKKyAgICAgICAgIiIiIENyZWF0ZSBhIHBhcnRpdGlvbiBvbiBhbiBpbWFnZSBkZXNjcmliZWQgYnkgdGhlICdkZXZpY2UnIG9iamVjdC4gIiIiCisKKyAgICAgICAgIyBTdGFydCBpcyBpbmNsdWRlZCB0byB0aGUgc2l6ZSBzbyB3ZSBuZWVkIHRvIHN1YnN0cmFjdCBvbmUgZnJvbSB0aGUgZW5kLgorICAgICAgICBlbmQgPSBzdGFydCArIHNpemUgLSAxCisgICAgICAgIG1zZ2VyLmRlYnVnKCJBZGRlZCAnJXMnIHBhcnRpdGlvbiwgc2VjdG9ycyAlZC0lZCwgc2l6ZSAlZCBzZWN0b3JzIiAlCisgICAgICAgICAgICAgICAgICAgIChwYXJ0dHlwZSwgc3RhcnQsIGVuZCwgc2l6ZSkpCisKKyAgICAgICAgY21kID0gInBhcnRlZCAtcyAlcyB1bml0IHMgbWtwYXJ0ICVzIiAlIChkZXZpY2UsIHBhcnR0eXBlKQorICAgICAgICBpZiBmc3R5cGU6CisgICAgICAgICAgICBjbWQgKz0gIiAlcyIgJSBmc3R5cGUKKyAgICAgICAgY21kICs9ICIgJWQgJWQiICUgKHN0YXJ0LCBlbmQpCisKKyAgICAgICAgcmV0dXJuIGV4ZWNfbmF0aXZlX2NtZChjbWQsIHNlbGYubmF0aXZlX3N5c3Jvb3QpCisKKyAgICBkZWYgX19mb3JtYXRfZGlza3Moc2VsZik6CisgICAgICAgIHNlbGYubGF5b3V0X3BhcnRpdGlvbnMoKQorCisgICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrcy5rZXlzKCk6CisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCisgICAgICAgICAgICBtc2dlci5kZWJ1ZygiSW5pdGlhbGl6aW5nIHBhcnRpdGlvbiB0YWJsZSBmb3IgJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UpKQorICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJwYXJ0ZWQgLXMgJXMgbWtsYWJlbCAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYXRpdmVfc3lzcm9vdCkKKworICAgICAgICBtc2dlci5kZWJ1ZygiQ3JlYXRpbmcgcGFydGl0aW9ucyIpCisKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5wYXJ0aXRpb25zOgorICAgICAgICAgICAgaWYgcGFydFsnbnVtJ10gPT0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1twYXJ0WydkaXNrX25hbWUnXV0KKyAgICAgICAgICAgIGlmIGRpc2tbJ3B0YWJsZV9mb3JtYXQnXSA9PSAibXNkb3MiIGFuZCBwYXJ0WydudW0nXSA9PSA1OgorICAgICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGV4dGVuZGVkIHBhcnRpdGlvbiAobm90ZTogZXh0ZW5kZWQKKyAgICAgICAgICAgICAgICAjIHBhcnRpdGlvbiBpcyBkZXNjcmliZWQgaW4gTUJSIGFuZCBjb250YWlucyBhbGwKKyAgICAgICAgICAgICAgICAjIGxvZ2ljYWwgcGFydGl0aW9ucykuIFRoZSBsb2dpY2FsIHBhcnRpdGlvbnMgc2F2ZSBhCisgICAgICAgICAgICAgICAgIyBzZWN0b3IgZm9yIGFuIEVCUiBqdXN0IGJlZm9yZSB0aGUgc3RhcnQgb2YgYQorICAgICAgICAgICAgICAgICMgcGFydGl0aW9uLiBUaGUgZXh0ZW5kZWQgcGFydGl0aW9uIG11c3Qgc3RhcnQgb25lCisgICAgICAgICAgICAgICAgIyBzZWN0b3IgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbG9naWNhbAorICAgICAgICAgICAgICAgICMgcGFydGl0aW9uLiBUaGlzIHdheSB0aGUgZmlyc3QgRUJSIGlzIGluc2lkZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIGV4dGVuZGVkIHBhcnRpdGlvbi4gU2luY2UgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbnMKKyAgICAgICAgICAgICAgICAjIHN0YXJ0cyBhIHNlY3RvciBiZWZvcmUgdGhlIGZpcnN0IGxvZ2ljYWwgcGFydGl0aW9uLAorICAgICAgICAgICAgICAgICMgYWRkIGEgc2VjdG9yIGF0IHRoZSBiYWNrLCBzbyB0aGF0IHRoZXJlIGlzIGVub3VnaAorICAgICAgICAgICAgICAgICMgcm9vbSBmb3IgYWxsIGxvZ2ljYWwgcGFydGl0aW9ucy4KKyAgICAgICAgICAgICAgICBzZWxmLl9fY3JlYXRlX3BhcnRpdGlvbihkaXNrWydkaXNrJ10uZGV2aWNlLCAiZXh0ZW5kZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHBhcnRbJ3N0YXJ0J10gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ29mZnNldCddIC0gcGFydFsnc3RhcnQnXSArIDEpCisKKyAgICAgICAgICAgIGlmIHBhcnRbJ2ZzdHlwZSddID09ICJzd2FwIjoKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJsaW51eC1zd2FwIgorICAgICAgICAgICAgZWxpZiBwYXJ0Wydmc3R5cGUnXSA9PSAidmZhdCI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAiZmF0MzIiCisgICAgICAgICAgICBlbGlmIHBhcnRbJ2ZzdHlwZSddID09ICJtc2RvcyI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAiZmF0MTYiCisgICAgICAgICAgICBlbGlmIHBhcnRbJ2ZzdHlwZSddID09ICJvbnRyYWNrZG02YXV4MyI6CisgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUgPSAib250cmFja2RtNmF1eDMiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVHlwZSBmb3IgZXh0Mi9leHQzL2V4dDQvYnRyZnMKKyAgICAgICAgICAgICAgICBwYXJ0ZWRfZnNfdHlwZSA9ICJleHQyIgorCisgICAgICAgICAgICAjIEJvb3QgUk9NIG9mIE9NQVAgYm9hcmRzIHJlcXVpcmUgdmZhdCBib290IHBhcnRpdGlvbiB0byBoYXZlIGFuCisgICAgICAgICAgICAjIGV2ZW4gbnVtYmVyIG9mIHNlY3RvcnMuCisgICAgICAgICAgICBpZiBwYXJ0Wydtb3VudHBvaW50J10gPT0gIi9ib290IiBhbmQgcGFydFsnZnN0eXBlJ10gaW4gWyJ2ZmF0IiwgIm1zZG9zIl0gXAorICAgICAgICAgICAgICAgYW5kIHBhcnRbJ3NpemUnXSAlIDI6CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoIlN1YnN0cmFjdGluZyBvbmUgc2VjdG9yIGZyb20gJyVzJyBwYXJ0aXRpb24gdG8gIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCBldmVuIG51bWJlciBvZiBzZWN0b3JzIGZvciB0aGUgcGFydGl0aW9uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0Wydtb3VudHBvaW50J10pCisgICAgICAgICAgICAgICAgcGFydFsnc2l6ZSddIC09IDEKKworICAgICAgICAgICAgc2VsZi5fX2NyZWF0ZV9wYXJ0aXRpb24oZGlza1snZGlzayddLmRldmljZSwgcGFydFsndHlwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGVkX2ZzX3R5cGUsIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3NpemUnXSkKKworICAgICAgICAgICAgaWYgcGFydFsncGFydF90eXBlJ106CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoInBhcnRpdGlvbiAlZDogc2V0IHR5cGUgVUlEIHRvICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFydFsnbnVtJ10sIHBhcnRbJ3BhcnRfdHlwZSddKSkKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNnZGlzayAtLXR5cGVjb2RlPSVkOiVzICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBwYXJ0WydwYXJ0X3R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tbJ2Rpc2snXS5kZXZpY2UpLCBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBpZiBwYXJ0Wyd1dWlkJ106CisgICAgICAgICAgICAgICAgbXNnZXIuZGVidWcoInBhcnRpdGlvbiAlZDogc2V0IFVVSUQgdG8gJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgcGFydFsndXVpZCddKSkKKyAgICAgICAgICAgICAgICBleGVjX25hdGl2ZV9jbWQoInNnZGlzayAtLXBhcnRpdGlvbi1ndWlkPSVkOiVzICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRbJ251bSddLCBwYXJ0Wyd1dWlkJ10sIGRpc2tbJ2Rpc2snXS5kZXZpY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICBpZiBwYXJ0Wydib290J106CisgICAgICAgICAgICAgICAgZmxhZ19uYW1lID0gImxlZ2FjeV9ib290IiBpZiBkaXNrWydwdGFibGVfZm9ybWF0J10gPT0gJ2dwdCcgZWxzZSAiYm9vdCIKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiU2V0ICclcycgZmxhZyBmb3IgcGFydGl0aW9uICclcycgb24gZGlzayAnJXMnIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ19uYW1lLCBwYXJ0WydudW0nXSwgZGlza1snZGlzayddLmRldmljZSkpCisgICAgICAgICAgICAgICAgZXhlY19uYXRpdmVfY21kKCJwYXJ0ZWQgLXMgJXMgc2V0ICVkICVzIG9uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc2tbJ2Rpc2snXS5kZXZpY2UsIHBhcnRbJ251bSddLCBmbGFnX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgICAgICAgICAjIFBhcnRlZCBkZWZhdWx0cyB0byBlbmFibGluZyB0aGUgbGJhIGZsYWcgZm9yIGZhdDE2IHBhcnRpdGlvbnMsCisgICAgICAgICAgICAjIHdoaWNoIGNhdXNlcyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHNvbWUgZmlybXdhcmUgKGFuZCByZWFsbHkKKyAgICAgICAgICAgICMgaXNuJ3QgbmVjZXNzYXJ5KS4KKyAgICAgICAgICAgIGlmIHBhcnRlZF9mc190eXBlID09ICJmYXQxNiI6CisgICAgICAgICAgICAgICAgaWYgZGlza1sncHRhYmxlX2Zvcm1hdCddID09ICdtc2Rvcyc6CisgICAgICAgICAgICAgICAgICAgIG1zZ2VyLmRlYnVnKCJEaXNhYmxlICdsYmEnIGZsYWcgZm9yIHBhcnRpdGlvbiAnJXMnIG9uIGRpc2sgJyVzJyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0WydudW0nXSwgZGlza1snZGlzayddLmRldmljZSkpCisgICAgICAgICAgICAgICAgICAgIGV4ZWNfbmF0aXZlX2NtZCgicGFydGVkIC1zICVzIHNldCAlZCBsYmEgb2ZmIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNrWydkaXNrJ10uZGV2aWNlLCBwYXJ0WydudW0nXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hdGl2ZV9zeXNyb290KQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGlza3M6CisgICAgICAgICAgICBmb3IgZGV2IGluIHNlbGYuZGlza3M6CisgICAgICAgICAgICAgICAgZGlzayA9IHNlbGYuZGlza3NbZGV2XQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGlza1snZGlzayddLmNsZWFudXAoKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGFzc2VtYmxlKHNlbGYsIGltYWdlX2ZpbGUpOgorICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGluZyBwYXJ0aXRpb25zIikKKworICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRpdGlvbnM6CisgICAgICAgICAgICBzb3VyY2UgPSBwYXJ0Wydzb3VyY2VfZmlsZSddCisgICAgICAgICAgICBpZiBzb3VyY2U6CisgICAgICAgICAgICAgICAgIyBpbnN0YWxsIHNvdXJjZV9maWxlIGNvbnRlbnRzIGludG8gYSBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICBjbWQgPSAiZGQgaWY9JXMgb2Y9JXMgYnM9JWQgc2Vlaz0lZCBjb3VudD0lZCBjb252PW5vdHJ1bmMiICUgXAorICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIGltYWdlX2ZpbGUsIHNlbGYuc2VjdG9yX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgIHBhcnRbJ3N0YXJ0J10sIHBhcnRbJ3NpemUnXSkKKyAgICAgICAgICAgICAgICBleGVjX2NtZChjbWQpCisKKyAgICAgICAgICAgICAgICBtc2dlci5kZWJ1ZygiSW5zdGFsbGVkICVzIGluIHBhcnRpdGlvbiAlZCwgc2VjdG9ycyAlZC0lZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplICVkIHNlY3RvcnMiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UsIHBhcnRbJ251bSddLCBwYXJ0WydzdGFydCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0WydzdGFydCddICsgcGFydFsnc2l6ZSddIC0gMSwgcGFydFsnc2l6ZSddKSkKKworICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzb3VyY2UsIGltYWdlX2ZpbGUgKyAnLnAlZCcgJSBwYXJ0WydudW0nXSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGZvciBkZXYgaW4gc2VsZi5kaXNrcy5rZXlzKCk6CisgICAgICAgICAgICBkaXNrID0gc2VsZi5kaXNrc1tkZXZdCisgICAgICAgICAgICBkaXNrWydkaXNrJ10uY3JlYXRlKCkKKworICAgICAgICBzZWxmLl9fZm9ybWF0X2Rpc2tzKCkKKworICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbGliL3dpYy91dGlscy9ydW5uZXIucHkgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzE5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvcnVubmVyLnB5CkBAIC0wLDAgKzEsMTEwIEBACisjIS91c3IvYmluL2VudiBweXRob24gLXR0CisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorIyBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKKworZGVmIHJ1bnRvb2woY21kbG5fb3JfYXJncywgY2F0Y2g9MSk6CisgICAgIiIiIHdyYXBwZXIgZm9yIG1vc3Qgb2YgdGhlIHN1YnByb2Nlc3MgY2FsbHMKKyAgICBpbnB1dDoKKyAgICAgICAgY21kbG5fb3JfYXJnczogY2FuIGJlIGJvdGggYXJncyBhbmQgY21kbG4gc3RyIChzaGVsbD1UcnVlKQorICAgICAgICBjYXRjaDogMCwgcXVpdGVseSBydW4KKyAgICAgICAgICAgICAgIDEsIG9ubHkgU1RET1VUCisgICAgICAgICAgICAgICAyLCBvbmx5IFNUREVSUgorICAgICAgICAgICAgICAgMywgYm90aCBTVERPVVQgYW5kIFNUREVSUgorICAgIHJldHVybjoKKyAgICAgICAgKHJjLCBvdXRwdXQpCisgICAgICAgIGlmIGNhdGNoPT0wOiB0aGUgb3V0cHV0IHdpbGwgYWx3YXlzIE5vbmUKKyAgICAiIiIKKworICAgIGlmIGNhdGNoIG5vdCBpbiAoMCwgMSwgMiwgMyk6CisgICAgICAgICMgaW52YWxpZCBjYXRjaCBzZWxlY3Rpb24sIHdpbGwgY2F1c2UgZXhjZXB0aW9uLCB0aGF0J3MgZ29vZAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgaXNpbnN0YW5jZShjbWRsbl9vcl9hcmdzLCBsaXN0KToKKyAgICAgICAgY21kID0gY21kbG5fb3JfYXJnc1swXQorICAgICAgICBzaGVsbCA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgaW1wb3J0IHNobGV4CisgICAgICAgIGNtZCA9IHNobGV4LnNwbGl0KGNtZGxuX29yX2FyZ3MpWzBdCisgICAgICAgIHNoZWxsID0gVHJ1ZQorCisgICAgaWYgY2F0Y2ggIT0gMzoKKyAgICAgICAgZGV2X251bGwgPSBvcy5vcGVuKCIvZGV2L251bGwiLCBvcy5PX1dST05MWSkKKworICAgIGlmIGNhdGNoID09IDA6CisgICAgICAgIHNvdXQgPSBkZXZfbnVsbAorICAgICAgICBzZXJyID0gZGV2X251bGwKKyAgICBlbGlmIGNhdGNoID09IDE6CisgICAgICAgIHNvdXQgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgc2VyciA9IGRldl9udWxsCisgICAgZWxpZiBjYXRjaCA9PSAyOgorICAgICAgICBzb3V0ID0gZGV2X251bGwKKyAgICAgICAgc2VyciA9IHN1YnByb2Nlc3MuUElQRQorICAgIGVsaWYgY2F0Y2ggPT0gMzoKKyAgICAgICAgc291dCA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBzZXJyID0gc3VicHJvY2Vzcy5TVERPVVQKKworICAgIHRyeToKKyAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbG5fb3JfYXJncywgc3Rkb3V0PXNvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zZXJyLCBzaGVsbD1zaGVsbCkKKyAgICAgICAgKHNvdXQsIHNlcnIpID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgY29tYmluZSBzdGRvdXQgYW5kIHN0ZGVyciwgZmlsdGVyIE5vbmUgb3V0CisgICAgICAgIG91dCA9ICcnLmpvaW4oZmlsdGVyKE5vbmUsIFtzb3V0LCBzZXJyXSkpCisgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgaWYgZXJyLmVycm5vID09IDI6CisgICAgICAgICAgICAjIFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAgICAgICBtc2dlci5lcnJvcignQ2Fubm90IHJ1biBjb21tYW5kOiAlcywgbG9zdCBkZXBlbmRlbmN5PycgJSBjbWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSAjIHJlbGF5CisgICAgZmluYWxseToKKyAgICAgICAgaWYgY2F0Y2ggIT0gMzoKKyAgICAgICAgICAgIG9zLmNsb3NlKGRldl9udWxsKQorCisgICAgcmV0dXJuIChwcm9jZXNzLnJldHVybmNvZGUsIG91dCkKKworZGVmIHNob3coY21kbG5fb3JfYXJncyk6CisgICAgIyBzaG93IGFsbCB0aGUgbWVzc2FnZSB1c2luZyBtc2dlci52ZXJib3NlCisKKyAgICByY29kZSwgb3V0ID0gcnVudG9vbChjbWRsbl9vcl9hcmdzLCBjYXRjaD0zKQorCisgICAgaWYgaXNpbnN0YW5jZShjbWRsbl9vcl9hcmdzLCBsaXN0KToKKyAgICAgICAgY21kID0gJyAnLmpvaW4oY21kbG5fb3JfYXJncykKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSBjbWRsbl9vcl9hcmdzCisKKyAgICBtc2cgPSAncnVubmluZyBjb21tYW5kOiAiJXMiJyAlIGNtZAorICAgIGlmIG91dDoKKyAgICAgICAgb3V0ID0gb3V0LnN0cmlwKCkKKyAgICBpZiBvdXQ6CisgICAgICAgIG1zZyArPSAnLCB3aXRoIG91dHB1dDo6JworICAgICAgICBtc2cgKz0gJ1xuICArLS0tLS0tLS0tLS0tLS0tLScKKyAgICAgICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIG1zZyArPSAnXG4gIHwgJXMnICUgbGluZQorICAgICAgICBtc2cgKz0gJ1xuICArLS0tLS0tLS0tLS0tLS0tLScKKworICAgIG1zZ2VyLnZlcmJvc2UobXNnKQorICAgIHJldHVybiByY29kZQorCitkZWYgb3V0cyhjbWRsbl9vcl9hcmdzLCBjYXRjaD0xKToKKyAgICAjIGdldCB0aGUgb3V0cHV0cyBvZiB0b29scworICAgIHJldHVybiBydW50b29sKGNtZGxuX29yX2FyZ3MsIGNhdGNoKVsxXS5zdHJpcCgpCisKK2RlZiBxdWlldChjbWRsbl9vcl9hcmdzKToKKyAgICByZXR1cm4gcnVudG9vbChjbWRsbl9vcl9hcmdzLCBjYXRjaD0wKVswXQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3N5c2xpbnV4LnB5IGIvc2NyaXB0cy9saWIvd2ljL3V0aWxzL3N5c2xpbnV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhY2UyODYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2xpYi93aWMvdXRpbHMvc3lzbGludXgucHkKQEAgLTAsMCArMSw1OCBAQAorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyMgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIEFVVEhPUgorIyBBZHJpYW4gRnJlaWhvZmVyIDxhZHJpYW4uZnJlaWhvZmVyIChhdF0gbmVyYXRlYy5jb20+CisKKworaW1wb3J0IHJlCitmcm9tIHdpYyBpbXBvcnQgbXNnZXIKKworCitkZWYgc2VyaWFsX2NvbnNvbGVfZm9ybV9rYXJncyhrZXJuZWxfYXJncyk6CisgICAgIiIiCisgICAgQ3JlYXRlIFNFUklBTC4uLiBsaW5lIGZyb20ga2VybmVsIHBhcmFtZXRlcnMKKworICAgIHN5c2xpbnV4IG5lZWRzIGEgbGluZSBTRVJJQUwgcG9ydCBbYmF1ZHJhdGUgW2Zsb3djb250cm9sXV0KKyAgICBpbiB0aGUgc3lzbGludXguY2ZnIGZpbGUuIFRoZSBjb25maWcgbGluZSBpcyBnZW5lcmF0ZWQgYmFzZWQKKyAgICBvbiBrZXJuZWwgYm9vdCBwYXJhbWV0ZXJzLiBUaGUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZpcnN0CisgICAgdHR5UyBjb25zb2xlIGFyZSBjb25zaWRlcmVkIGZvciBzeXNsaW51eCBjb25maWcuCisgICAgQHBhcmFtIGtlcm5lbF9hcmdzIGtlcm5lbCBjb21tYW5kIGxpbmUKKyAgICBAcmV0dXJuIGxpbmUgZm9yIHN5c2xpbnV4IGNvbmZpZyBmaWxlIGUuZy4gIlNFUklBTCAwIDExNTIwMCIKKyAgICAiIiIKKyAgICBzeXNsaW51eF9jb25mID0gIiIKKyAgICBmb3IgcGFyYW0gaW4ga2VybmVsX2FyZ3Muc3BsaXQoKToKKyAgICAgICAgcGFyYW1fbWF0Y2ggPSByZS5tYXRjaCgiY29uc29sZT10dHlTKFswLTldKyksPyhbMC05XSopKFtub2VdPykoWzAtOV0/KShyPykiLCBwYXJhbSkKKyAgICAgICAgaWYgcGFyYW1fbWF0Y2g6CisgICAgICAgICAgICBzeXNsaW51eF9jb25mICs9ICJTRVJJQUwgIiArIHBhcmFtX21hdGNoLmdyb3VwKDEpCisgICAgICAgICAgICAjIGJhdWRyYXRlCisgICAgICAgICAgICBpZiBwYXJhbV9tYXRjaC5ncm91cCgyKToKKyAgICAgICAgICAgICAgICBzeXNsaW51eF9jb25mICs9ICIgIiArIHBhcmFtX21hdGNoLmdyb3VwKDIpCisgICAgICAgICAgICAjIHBhcml0eQorICAgICAgICAgICAgaWYgcGFyYW1fbWF0Y2guZ3JvdXAoMykgYW5kIHBhcmFtX21hdGNoLmdyb3VwKDMpICE9ICduJzoKKyAgICAgICAgICAgICAgICBtc2dlci53YXJuaW5nKCJzeXNsaW51eCBkb2VzIG5vdCBzdXBwb3J0IHBhcml0eSBmb3IgY29uc29sZS4ge30gaXMgaWdub3JlZC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhcmFtX21hdGNoLmdyb3VwKDMpKSkKKyAgICAgICAgICAgICMgbnVtYmVyIG9mIGJpdHMKKyAgICAgICAgICAgIGlmIHBhcmFtX21hdGNoLmdyb3VwKDQpIGFuZCBwYXJhbV9tYXRjaC5ncm91cCg0KSAhPSAnOCc6CisgICAgICAgICAgICAgICAgbXNnZXIud2FybmluZygic3lzbGludXggc3VwcG9ydHMgOCBiaXQgY29uc29sZSBjb25maWd1cmF0aW9uIG9ubHkuIHt9IGlzIGlnbm9yZWQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYXJhbV9tYXRjaC5ncm91cCg0KSkpCisgICAgICAgICAgICAjIGZsb3cgY29udHJvbAorICAgICAgICAgICAgaWYgcGFyYW1fbWF0Y2guZ3JvdXAoNSkgYW5kIHBhcmFtX21hdGNoLmdyb3VwKDUpICE9ICcnOgorICAgICAgICAgICAgICAgIG1zZ2VyLndhcm5pbmcoInN5c2xpbnV4IGNvbnNvbGUgZmxvd2NvbnRyb2wgY29uZmlndXJhdGlvbi4ge30gaXMgaWdub3JlZC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhcmFtX21hdGNoLmdyb3VwKDUpKSkKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICByZXR1cm4gc3lzbGludXhfY29uZgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9sbnIgYi9zY3JpcHRzL2xucgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZGFjZWJlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9sbnIKQEAgLTAsMCArMSwyMSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENyZWF0ZSBhICpyZWxhdGl2ZSogc3ltbGluaywganVzdCBsaWtlIGxuIC0tcmVsYXRpdmUgZG9lcyBidXQgd2l0aG91dCBuZWVkaW5nCisjIGNvcmV1dGlscyA4LjE2LgorCitpbXBvcnQgc3lzLCBvcworCitpZiBsZW4oc3lzLmFyZ3YpICE9IDM6CisgICBwcmludCAiJCBsbnIgVEFSR0VUIExJTktfTkFNRSIKKyAgIHN5cy5leGl0KDEpCisKK3RhcmdldCA9IHN5cy5hcmd2WzFdCitsaW5rbmFtZSA9IHN5cy5hcmd2WzJdCisKK2lmIG9zLnBhdGguaXNhYnModGFyZ2V0KToKKyAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmtuYW1lKToKKyAgICAgIGxpbmtuYW1lID0gb3MucGF0aC5hYnNwYXRoKGxpbmtuYW1lKQorICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUobGlua25hbWUpCisgICB0YXJnZXQgPSBvcy5wYXRoLnJlbHBhdGgodGFyZ2V0LCBzdGFydCkKKworb3Muc3ltbGluayh0YXJnZXQsIGxpbmtuYW1lKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oIGIvc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODc1NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL211bHRpbGliX2hlYWRlcl93cmFwcGVyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDExIGJ5IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxiaXRzL3dvcmRzaXplLmg+CisKKyNpZmRlZiBfX1dPUkRTSVpFCisKKyNpZiBfX1dPUkRTSVpFID09IDMyCisKKyNpZmRlZiBfTUlQU19TSU0KKworI2lmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCisjaW5jbHVkZSA8RU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUtMzIuaD4KKyNlbGlmIF9NSVBTX1NJTSA9PSBfQUJJTjMyCisjaW5jbHVkZSA8RU5URVJfSEVBREVSX0ZJTEVOQU1FX0hFUkUtbjMyLmg+CisjZWxzZQorI2Vycm9yICJVbmtub3duIF9NSVBTX1NJTSIKKyNlbmRpZgorCisjZWxzZSAvKiBfTUlQU19TSU0gaXMgbm90IGRlZmluZWQgKi8KKyNpbmNsdWRlIDxFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRS0zMi5oPgorI2VuZGlmCisKKyNlbGlmIF9fV09SRFNJWkUgPT0gNjQKKyNpbmNsdWRlIDxFTlRFUl9IRUFERVJfRklMRU5BTUVfSEVSRS02NC5oPgorI2Vsc2UKKyNlcnJvciAiVW5rbm93biBfX1dPUkRTSVpFIGRldGVjdGVkIgorI2VuZGlmIC8qIG1hdGNoZXMgI2lmIF9fV09SRFNJWkUgPT0gMzIgKi8KKworI2Vsc2UgLyogX19XT1JEU0laRSBpcyBub3QgZGVmaW5lZCAqLworCisjZXJyb3IgIl9fV09SRFNJWkUgaXMgbm90IGRlZmluZWQiCisKKyNlbmRpZgorICAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdC9jaG93biBiL3NjcmlwdHMvbmF0aXZlLWludGVyY2VwdC9jaG93bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjQzMjcxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9uYXRpdmUtaW50ZXJjZXB0L2Nob3duCkBAIC0wLDAgKzEsMiBAQAorIyEgL2Jpbi9zaAorZWNobyAiSW50ZXJjZXB0ICQwOiAkQCAtLSBkbyBub3RoaW5nIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vZS1idWlsZGVudi1pbnRlcm5hbCBiL3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWVkMjcyMQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvb2UtYnVpbGRlbnYtaW50ZXJuYWwKQEAgLTAsMCArMSwxMDkgQEAKKyMhL2Jpbi9zaAorCisjIE9FLUNvcmUgQnVpbGQgRW52aXJvbm1lbnQgU2V0dXAgU2NyaXB0CisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisjIEl0IGlzIGFzc3VtZWQgT0VST09UIGlzIGFscmVhZHkgZGVmaW5lZCB3aGVuIHRoaXMgaXMgY2FsbGVkCitpZiBbIC16ICIkT0VST09UIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBPRVJPT1QgaXMgbm90IGRlZmluZWQhIgorICAgIHJldHVybiAxCitmaQorCitpZiBbIC16ICIkT0VfU0tJUF9TREtfQ0hFQ0siIC1hICEgLXogIiRPRUNPUkVfU0RLX1ZFUlNJT04iIF07IHRoZW4KKyAgICBlY2hvID4mMiAiRXJyb3I6IFRoZSBPRSBTREsvQURUIHdhcyBkZXRlY3RlZCBhcyBhbHJlYWR5IGJlaW5nIHByZXNlbnQgaW4gdGhpcyBzaGVsbCBlbnZpcm9ubWVudC4gUGxlYXNlIHVzZSBhIGNsZWFuIHNoZWxsIHdoZW4gc291cmNpbmcgdGhpcyBlbnZpcm9ubWVudCBzY3JpcHQuIgorICAgIHJldHVybiAxCitmaQorCisjIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdXNpbmcgcHl0aG9uIHYzLnguIFRoaXMgY2hlY2sgY2FuJ3QgZ28gaW50bworIyBzYW5pdHkuYmJjbGFzcyBiZWNhdXNlIGJpdGJha2UncyBzb3VyY2UgY29kZSBkb2Vzbid0IGV2ZW4gcGFzcworIyBwYXJzaW5nIHN0YWdlIHdoZW4gdXNlZCB3aXRoIHB5dGhvbiB2Mywgc28gd2UgY2F0Y2ggaXQgaGVyZSBzbyB3ZQorIyBjYW4gb2ZmZXIgYSBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2UuCitweV92M19jaGVjaz1gL3Vzci9iaW4vZW52IHB5dGhvbiAtLXZlcnNpb24gMj4mMSB8IGdyZXAgIlB5dGhvbiAzImAKK2lmIFsgIiRweV92M19jaGVjayIgIT0gIiIgXTsgdGhlbgorCWVjaG8gPiYyICJCaXRiYWtlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcHl0aG9uIHYzIgorCWVjaG8gPiYyICJQbGVhc2Ugc2V0IHVwIHB5dGhvbiB2MiBhcyB5b3VyIGRlZmF1bHQgcHl0aG9uIGludGVycHJldGVyIgorCXJldHVybiAxCitmaQorCisjIFNpbWlsYXJseSwgd2Ugbm93IGhhdmUgY29kZSB0aGF0IGRvZXNuJ3QgcGFyc2UgY29ycmVjdGx5IHdpdGggb2xkZXIKKyMgdmVyc2lvbnMgb2YgUHl0aG9uLCBhbmQgcmF0aGVyIHRoYW4gZml4aW5nIHRoYXQgYW5kIGJlaW5nIGV0ZXJuYWxseQorIyB2aWdpbGFudCBmb3IgYW55IG90aGVyIG5ldyBmZWF0dXJlIHVzZSwganVzdCBjaGVjayB0aGUgdmVyc2lvbiBoZXJlLgorcHlfdjI2X2NoZWNrPWBweXRob24gLWMgJ2ltcG9ydCBzeXM7IHByaW50IHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsNywzKSdgCitpZiBbICIkcHlfdjI2X2NoZWNrIiAhPSAiVHJ1ZSIgXTsgdGhlbgorCWVjaG8gPiYyICJCaXRCYWtlIHJlcXVpcmVzIFB5dGhvbiAyLjcuMyBvciBsYXRlciIKKwlyZXR1cm4gMQorZmkKKworaWYgWyAieCRCRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgaWYgWyAieCQxIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgIEJESVI9ImJ1aWxkIgorICAgIGVsc2UKKyAgICAgICAgQkRJUj0iJDEiCisgICAgICAgIGlmIFsgIiRCRElSIiA9ICIvIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvID4mMiAiRXJyb3I6IC8gaXMgbm90IHN1cHBvcnRlZCBhcyBhIGJ1aWxkIGRpcmVjdG9yeS4iCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorCisgICAgICAgICMgUmVtb3ZlIGFueSBwb3NzaWJsZSB0cmFpbGluZyBzbGFzaGVzLiBUaGlzIGlzIHVzZWQgdG8gd29yayBhcm91bmQKKyAgICAgICAgIyBidWdneSByZWFkbGluayBpbiBVYnVudHUgMTAuMDQgdGhhdCBkb2Vzbid0IGlnbm9yZSB0cmFpbGluZyBzbGFzaGVzCisgICAgICAgICMgYW5kIGhlbmNlICJyZWFkbGluayAtZiBuZXdfZGlyX3RvX2JlX2NyZWF0ZWQvIiByZXR1cm5zIGVtcHR5LgorICAgICAgICBCRElSPWBlY2hvICRCRElSIHwgc2VkIC1yZSAnc3wvKyR8fCdgCisKKyAgICAgICAgQkRJUj1gcmVhZGxpbmsgLWYgIiRCRElSImAKKyAgICAgICAgaWYgWyAteiAiJEJESVIiIF07IHRoZW4KKyAgICAgICAgICAgIFBBUkVOVERJUj1gZGlybmFtZSAiJDEiYAorICAgICAgICAgICAgZWNobyA+JjIgIkVycm9yOiB0aGUgZGlyZWN0b3J5ICRQQVJFTlRESVIgZG9lcyBub3QgZXhpc3Q/IgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGlmIFsgIngkMiIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgQklUQkFLRURJUj0iJDIiCisgICAgZmkKK2ZpCitpZiBleHByICIkQkRJUiIgOiAnLy4qJyA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICBCVUlMRERJUj0iJEJESVIiCitlbHNlCisgICAgQlVJTERESVI9ImBwd2RgLyRCRElSIgorZmkKK3Vuc2V0IEJESVIKKworaWYgWyAieCRCSVRCQUtFRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgQklUQkFLRURJUj0iJE9FUk9PVC9iaXRiYWtlJEJCRVhUUkEvIgorZmkKKworQklUQkFLRURJUj1gcmVhZGxpbmsgLWYgIiRCSVRCQUtFRElSImAKK0JVSUxERElSPWByZWFkbGluayAtZiAiJEJVSUxERElSImAKKworaWYgISAodGVzdCAtZCAiJEJJVEJBS0VESVIiKTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogVGhlIGJpdGJha2UgZGlyZWN0b3J5ICgkQklUQkFLRURJUikgZG9lcyBub3QgZXhpc3QhICBQbGVhc2UgZW5zdXJlIGEgY29weSBvZiBiaXRiYWtlIGV4aXN0cyBhdCB0aGlzIGxvY2F0aW9uIgorICAgIHJldHVybiAxCitmaQorCisjIE1ha2Ugc3VyZSBvdXIgcGF0aHMgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgJFBBVEgKK05FV1BBVEhTPSIke09FUk9PVH0vc2NyaXB0czokQklUQkFLRURJUi9iaW46IgorUEFUSD0kTkVXUEFUSFMkKGVjaG8gJFBBVEggfCBzZWQgLWUgInN8OiRORVdQQVRIU3w6fGciIC1lICJzfF4kTkVXUEFUSFN8fCIpCit1bnNldCBCSVRCQUtFRElSIE5FV1BBVEhTCisKKyMgVXNlZCBieSB0aGUgcnVucWVtdSBzY3JpcHQKK2V4cG9ydCBCVUlMRERJUgorZXhwb3J0IFBBVEgKK2V4cG9ydCBCQl9FTlZfRVhUUkFXSElURT0iTUFDSElORSBESVNUUk8gVENNT0RFIFRDTElCQyBIVFRQX1BST1hZIGh0dHBfcHJveHkgXAorSFRUUFNfUFJPWFkgaHR0cHNfcHJveHkgRlRQX1BST1hZIGZ0cF9wcm94eSBGVFBTX1BST1hZIGZ0cHNfcHJveHkgQUxMX1BST1hZIFwKK2FsbF9wcm94eSBOT19QUk9YWSBub19wcm94eSBTU0hfQUdFTlRfUElEIFNTSF9BVVRIX1NPQ0sgQkJfU1JDUkVWX1BPTElDWSBcCitTREtNQUNISU5FIEJCX05VTUJFUl9USFJFQURTIEJCX05PX05FVFdPUksgUEFSQUxMRUxfTUFLRSBHSVRfUFJPWFlfQ09NTUFORCBcCitTT0NLUzVfUEFTU1dEIFNPQ0tTNV9VU0VSIFNDUkVFTkRJUiBTVEFNUFNfRElSIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290IGIvc2NyaXB0cy9vZS1maW5kLW5hdGl2ZS1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxZDYyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QKQEAgLTAsMCArMSw4MSBAQAorIyEvYmluL2Jhc2gKKyMKKyMgRmluZCBhIG5hdGl2ZSBzeXNyb290IHRvIHVzZSAtIGVpdGhlciBmcm9tIGFuIGluLXRyZWUgT0UgYnVpbGQgb3IKKyMgZnJvbSBhIHRvb2xjaGFpbiBpbnN0YWxsYXRpb24uIEl0IHRoZW4gZW5zdXJlcyB0aGUgdmFyaWFibGUKKyMgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpcyBzZXQgdG8gdGhlIHN5c3Jvb3QncyBiYXNlIGRpcmVjdG9yeSwgYW5kIHNldHMgCisjICRQU0VVRE8gdG8gdGhlIHBhdGggb2YgdGhlIHBzZXVkbyBiaW5hcnkuCisjCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHJ1biB3aXRoaW4gb3RoZXIgc2NyaXB0cyBieSBzb3VyY2UnaW5nCisjIGl0LCBlLmc6CisjCisjIFNZU1JPT1RfU0VUVVBfU0NSSVBUPWB3aGljaCBvZS1maW5kLW5hdGl2ZS1zeXNyb290YAorIyAuICRTWVNST09UX1NFVFVQX1NDUklQVAorIworIyBUaGlzIHNjcmlwdCB3aWxsIHRlcm1pbmF0ZSBleGVjdXRpb24gb2YgeW91ciBjYWxsaW5nIHByb2dyYW0gdW5sZXNzCisjIHlvdSBzZXQgYSB2YXJpYWJsZSAkU0tJUF9TVFJJQ1RfU1lTUk9PVF9DSEVDSyB0byBhIG5vbi1lbXB0eSBzdHJpbmcKKyMgYmVmb3JlaGFuZC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2lmIFsgIngkT0VDT1JFX05BVElWRV9TWVNST09UIiA9ICJ4IiBdOyB0aGVuCisgICAgQklUQkFLRT1gd2hpY2ggYml0YmFrZSAyPiAvZGV2L251bGxgCisgICAgaWYgWyAieCRCSVRCQUtFIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBpZiBbICIkVUlEIiA9ICIwIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJvb3QgY2Fubm90IHJ1biBiaXRiYWtlIHVubGVzcyBzYW5pdHkgY2hlY2tpbmcgaXMgZGlzYWJsZWQKKyAgICAgICAgICAgIGlmIFsgISAtZCAiLi9jb25mIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IHJvb3QgY2Fubm90IHJ1biBiaXRiYWtlIGJ5IGRlZmF1bHQsIGFuZCBJIGNhbm5vdCBmaW5kIGEgLi9jb25mIGRpcmVjdG9yeSB0byBiZSBhYmxlIHRvIGRpc2FibGUgc2FuaXR5IGNoZWNraW5nIgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHRvdWNoIGNvbmYvc2FuaXR5LmNvbmYKKyAgICAgICAgICAgIE9FQ09SRV9OQVRJVkVfU1lTUk9PVD1gYml0YmFrZSAtZSB8IGdyZXAgXlNUQUdJTkdfRElSX05BVElWRSB8IGN1dCAtZCAnIicgLWYyYAorICAgICAgICAgICAgcm0gLWYgY29uZi9zYW5pdHkuY29uZgorICAgICAgICBlbHNlCisgICAgICAgICAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9YGJpdGJha2UgLWUgfCBncmVwIF5TVEFHSU5HX0RJUl9OQVRJVkUgfCBjdXQgLWQgJyInIC1mMmAKKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gbG9jYXRlIGJpdGJha2UgY29tbWFuZC4iCisgICAgICAgIGVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0PyIKKworICAgICAgICBpZiBbIC16ICIkU0tJUF9TVFJJQ1RfU1lTUk9PVF9DSEVDSyIgXTsgdGhlbgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisKK2lmIFsgIngkT0VDT1JFX05BVElWRV9TWVNST09UIiA9ICJ4IiBdOyB0aGVuCisgICAgIyBUaGlzIGluZGljYXRlcyB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIGJpdGJha2UgLWUgdGhhdAorICAgICMgdGhlIHVzZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YKKyAgICBlY2hvICJUaGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyBiaXRiYWtlIHRvIGRldGVybWluZSBTVEFHSU5HX0RJUl9OQVRJVkUiCisgICAgZWNobyAiSGVyZSBpcyB0aGUgb3V0cHV0IGZyb20gYml0YmFrZSAtZSIKKyAgICBiaXRiYWtlIC1lCisgICAgZXhpdCAxCitmaQorCisjIFNldCB1cCBwc2V1ZG8gY29tbWFuZAoraWYgWyAhIC1lICIkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW4vcHNldWRvIiBdOyB0aGVuCisgICAgZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHBzZXVkbyBiaW5hcnkgaW4gJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluLyIKKworICAgIGlmIFsgIngkT0VDT1JFX0RJU1RST19WRVJTSU9OIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkhhdmUgeW91IHJ1biAnYml0YmFrZSBtZXRhLWlkZS1zdXBwb3J0Jz8iCisgICAgZWxzZQorICAgICAgICBlY2hvICJUaGlzIHNob3VsZG4ndCBoYXBwZW4gLSBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB5b3VyIHRvb2xjaGFpbiBpbnN0YWxsYXRpb24iCisgICAgZmkKKworICAgIGlmIFsgLXogIiRTS0lQX1NUUklDVF9TWVNST09UX0NIRUNLIiBdOyB0aGVuCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorUFNFVURPPSIkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9iaW4vcHNldWRvIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vZS1naXQtcHJveHkgYi9zY3JpcHRzL29lLWdpdC1wcm94eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODczNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9vZS1naXQtcHJveHkKQEAgLTAsMCArMSwxMzMgQEAKKyMhL2Jpbi9iYXNoCisKKyMgb2UtZ2l0LXByb3h5IGlzIGEgc2ltcGxlIHRvb2wgdG8gYmUgdmlhIEdJVF9QUk9YWV9DT01NQU5ELiBJdCB1c2VzIHNvY2F0CisjIHRvIG1ha2UgU09DS1M1IG9yIEhUVFBTIHByb3h5IGNvbm5lY3Rpb25zLiBJdCB1c2VzIEFMTF9QUk9YWSB0byBkZXRlcm1pbmUgdGhlCisjIHByb3h5IHNlcnZlciwgcHJvdG9jb2wsIGFuZCBwb3J0LiBJdCB1c2VzIE5PX1BST1hZIHRvIHNraXAgdXNpbmcgdGhlIHByb3h5IGZvcgorIyBhIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIGhvc3RzLCBob3N0IGdsb2JzICgqLmV4YW1wbGUuY29tKSwgSVBzLCBvciBDSURSCisjIG1hc2tzICgxOTIuMTY4LjEuMC8yNCkuIEl0IGlzIGtub3duIHRvIHdvcmsgd2l0aCBib3RoIGJhc2ggYW5kIGRhc2ggc2hlbGxzLgorIworIyBFeGFtcGxlIEFMTF9QUk9YWSB2YWx1ZXM6CisjIEFMTF9QUk9YWT1zb2NrczovL3NvY2tzLmV4YW1wbGUuY29tOjEwODAKKyMgQUxMX1BST1hZPWh0dHBzOi8vcHJveHkuZXhhbXBsZS5jb206ODA4MAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBBVVRIT1JTCisjIERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorCisjIExvY2F0ZSB0aGUgbmV0Y2F0IGJpbmFyeQorU09DQVQ9JCh3aGljaCBzb2NhdCAyPi9kZXYvbnVsbCkKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiBzb2NhdCBiaW5hcnkgbm90IGluIFBBVEgiIDE+JjIKKwlleGl0IDEKK2ZpCitNRVRIT0Q9IiIKKworIyBUZXN0IGZvciBhIHZhbGlkIElQVjQgcXVhZCB3aXRoIG9wdGlvbmFsIGJpdG1hc2sKK3ZhbGlkX2lwdjQoKSB7CisJZWNobyAkMSB8IGVncmVwIC1xICJeKFsxLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSkoXC4oWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSl7M30oLygzWzAtMl18WzEtMl0/WzAtOV0pKT8kIgorCXJldHVybiAkPworfQorCisjIENvbnZlcnQgYW4gSVBWNCBhZGRyZXNzIGludG8gYSAzMmJpdCBpbnRlZ2VyCitpcHY0X3ZhbCgpIHsKKwlJUD0iJDEiCisJU0hJRlQ9MjQKKwlWQUw9MAorCWZvciBCIGluICR7SVAvLy4vIH07IGRvCisJCVZBTD0kKCgkVkFMKyQoKCRCPDwkU0hJRlQpKSkpCisJCVNISUZUPSQoKCRTSElGVC04KSkKKwlkb25lCisJZWNobyAiJFZBTCIKK30KKworIyBEZXRlcm1pbmUgaWYgdHdvIElQcyBhcmUgZXF1aXZhbGVudCwgb3IgaWYgdGhlIENJRFIgY29udGFpbnMgdGhlIElQCittYXRjaF9pcHY0KCkgeworCUNJRFI9JDEKKwlJUD0kMgorCisJaWYgWyAteiAiJHtJUCUlJENJRFJ9IiBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKworCSMgRGV0ZXJtaW5lIHRoZSBtYXNrIGJpdGxlbmd0aAorCUJJVFM9JHtDSURSIyMqL30KKwlpZiBbIC16ICIkQklUUyIgXTsgdGhlbgorCQlyZXR1cm4gMQorCWZpCisKKwlJUFZBTD0kKGlwdjRfdmFsICRJUCkKKwlJUDJWQUw9JChpcHY0X3ZhbCAke0NJRFIlJS8qfSkKKworCSMgT1IgaW4gdGhlIHVubWFza2VkIGJpdHMKKwlmb3IgaSBpbiAkKHNlcSAwICQoKDMyLSRCSVRTKSkpOyBkbworCQlJUDJWQUw9JCgoJElQMlZBTHwkKCgxPDwkaSkpKSkKKwkJSVBWQUw9JCgoJElQVkFMfCQoKDE8PCRpKSkpKQorCWRvbmUKKworCWlmIFsgJElQVkFMIC1lcSAkSVAyVkFMIF07IHRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCXJldHVybiAxCit9CisKKyMgVGVzdCB0byBzZWUgaWYgR0xPQiBtYXRjaGVzIEhPU1QKK21hdGNoX2hvc3QoKSB7CisJSE9TVD0kMQorCUdMT0I9JDIKKworCWlmIFsgLXogIiR7SE9TVCUlJEdMT0J9IiBdOyB0aGVuCisJCXJldHVybiAwCisJZmkKKworCSMgTWF0Y2ggYnkgbmV0bWFzaworCWlmIHZhbGlkX2lwdjQgJEdMT0I7IHRoZW4KKwkJSE9TVF9JUD0kKGdldGhvc3RpcCAtZCAkSE9TVCkKKwkJaWYgdmFsaWRfaXB2NCAkSE9TVF9JUDsgdGhlbgorCQkJbWF0Y2hfaXB2NCAkR0xPQiAkSE9TVF9JUAorCQkJaWYgWyAkPyAtZXEgMCBdOyB0aGVuCisJCQkJcmV0dXJuIDAKKwkJCWZpCisJCWZpCisJZmkKKworCXJldHVybiAxCit9CisKKyMgSWYgbm8gcHJveHkgaXMgc2V0IG9yIG5lZWRlZCwganVzdCBjb25uZWN0IGRpcmVjdGx5CitNRVRIT0Q9IlRDUDokMTokMiIKKworaWYgWyAteiAiJEFMTF9QUk9YWSIgXTsgdGhlbgorCWV4ZWMgJFNPQ0FUIFNURElPICRNRVRIT0QKK2ZpCisKKyMgQ29ubmVjdCBkaXJlY3RseSB0byBob3N0cyBpbiBOT19QUk9YWQorZm9yIEggaW4gJHtOT19QUk9YWS8vLC8gfTsgZG8KKwlpZiBtYXRjaF9ob3N0ICQxICRIOyB0aGVuCisJCWV4ZWMgJFNPQ0FUIFNURElPICRNRVRIT0QKKwlmaQorZG9uZQorCisjIFByb3h5IGlzIG5lY2Vzc2FyeSwgZGV0ZXJtaW5lIHByb3RvY29sLCBzZXJ2ZXIsIGFuZCBwb3J0CitQUk9UTz0kKGVjaG8gJEFMTF9QUk9YWSB8IHNlZCAtZSAncy9cKFteOl0qXCk6XC9cLy4qL1wxLycpCitQUk9YWT0kKGVjaG8gJEFMTF9QUk9YWSB8IHNlZCAtZSAncy8uKjpcL1wvXChbXjpdKlwpLiovXDEvJykKK1BPUlQ9JChlY2hvICRBTExfUFJPWFkgfCBzZWQgLWUgJ3MvLio6XChbMC05XSpcKVwvPyQvXDEvJykKK2lmIFsgIiRQT1JUIiA9ICIkQUxMX1BST1hZIiBdOyB0aGVuCisJUE9SVD0iIgorZmkKKworaWYgWyAiJFBST1RPIiA9ICJzb2NrcyIgXTsgdGhlbgorCWlmIFsgLXogIiRQT1JUIiBdOyB0aGVuCisJCVBPUlQ9IjEwODAiCisJZmkKKwlNRVRIT0Q9IlNPQ0tTNEE6JFBST1hZOiQxOiQyLHNvY2tzcG9ydD0kUE9SVCIKK2Vsc2UKKwkjIEFzc3VtZSBQUk9YWSAoaHR0cCwgaHR0cHMsIGV0YykKKwlpZiBbIC16ICIkUE9SVCIgXTsgdGhlbgorCQlQT1JUPSI4MDgwIgorCWZpCisJTUVUSE9EPSJQUk9YWTokUFJPWFk6JDE6JDIscHJveHlwb3J0PSRQT1JUIgorZmkKKworZXhlYyAkU09DQVQgU1RESU8gJE1FVEhPRApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwgYi9zY3JpcHRzL29lLXBrZ2RhdGEtdXRpbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDc1Nzc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9vZS1wa2dkYXRhLXV0aWwKQEAgLTAsMCArMSw1MDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIE9wZW5FbWJlZGRlZCBwa2dkYXRhIHV0aWxpdHkKKyMKKyMgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisjCisjIENvcHlyaWdodCAyMDEyLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgcmUKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0LCBPcmRlcmVkRGljdAorCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgncGtnZGF0YXV0aWwnKQorCitkZWYgdGluZm9pbF9pbml0KCk6CisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShUcnVlKQorCisgICAgdGluZm9pbC5sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5XQVJOSU5HKQorICAgIHJldHVybiB0aW5mb2lsCisKKworZGVmIGdsb2IoYXJncyk6CisgICAgIyBIYW5kbGUgYm90aCBtdWx0aXBsZSBhcmd1bWVudHMgYW5kIG11bHRpcGxlIHZhbHVlcyB3aXRoaW4gYW4gYXJnIChvbGQgc3ludGF4KQorICAgIGdsb2JzID0gW10KKyAgICBmb3IgZ2xvYml0ZW0gaW4gYXJncy5nbG9iOgorICAgICAgICBnbG9icy5leHRlbmQoZ2xvYml0ZW0uc3BsaXQoKSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLnBrZ2xpc3RmaWxlKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBwYWNrYWdlIGxpc3QgZmlsZSAlcycgJSBhcmdzLnBrZ2xpc3RmaWxlKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgc2tpcHZhbCA9ICItbG9jYWxlLXxebG9jYWxlLWJhc2UtfC1kZXYkfC1kb2MkfC1kYmckfC1zdGF0aWNkZXYkfF5rZXJuZWwtbW9kdWxlLSIKKyAgICBpZiBhcmdzLmV4Y2x1ZGU6CisgICAgICAgIHNraXB2YWwgKz0gInwiICsgYXJncy5leGNsdWRlCisgICAgc2tpcHJlZ2V4ID0gcmUuY29tcGlsZShza2lwdmFsKQorCisgICAgbWFwcGVkcGtncyA9IHNldCgpCisgICAgd2l0aCBvcGVuKGFyZ3MucGtnbGlzdGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgaWYgbm90IGZpZWxkczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcGtnID0gZmllbGRzWzBdCisgICAgICAgICAgICAjIFdlIGRvbid0IGNhcmUgYWJvdXQgb3RoZXIgYXJncyAodXNlZCB0byBuZWVkIHRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSBidXQgdGhlCisgICAgICAgICAgICAjIG5ldyBwa2dkYXRhIHN0cnVjdHVyZSBhdm9pZHMgdGhlIG5lZWQgZm9yIHRoYXQpCisKKyAgICAgICAgICAgICMgU2tpcCBwYWNrYWdlcyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gcG9pbnQgYXBwbHlpbmcgZ2xvYnMKKyAgICAgICAgICAgIGlmIHNraXByZWdleC5zZWFyY2gocGtnKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzIC0+ICEhIiAlIHBrZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIFNraXAgcGFja2FnZXMgdGhhdCBhbHJlYWR5IG1hdGNoIHRoZSBnbG9icywgc28gaWYgZS5nLiBhIGRldiBwYWNrYWdlCisgICAgICAgICAgICAjIGlzIGFscmVhZHkgaW5zdGFsbGVkIGFuZCB0aHVzIGluIHRoZSBsaXN0LCB3ZSBkb24ndCBwcm9jZXNzIGl0IGFueSBmdXJ0aGVyCisgICAgICAgICAgICAjIE1vc3Qgb2YgdGhlc2Ugd2lsbCBiZSBjYXVnaHQgYnkgc2tpcHJlZ2V4IGFscmVhZHksIGJ1dCBqdXN0IGluIGNhc2UuLi4KKyAgICAgICAgICAgIGFscmVhZHkgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGcgaW4gZ2xvYnM6CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShwa2csIGcpOgorICAgICAgICAgICAgICAgICAgICBhbHJlYWR5ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYWxyZWFkeToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVzIC0+ICEiICUgcGtnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGVmaW5lIHNvbWUgZnVuY3Rpb25zCisgICAgICAgICAgICBkZWYgcmV2cGtnZGF0YShwa2duKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2duKQorICAgICAgICAgICAgZGVmIGZ3ZHBrZ2RhdGEocGtnbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZSIsIHBrZ24pCisgICAgICAgICAgICBkZWYgcmVhZHBuKHBrZ2RhdGFfZmlsZSk6CisgICAgICAgICAgICAgICAgcG4gPSAiIgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUE46Iik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSBsaW5lLnNwbGl0KCc6ICcpWzFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBuCisgICAgICAgICAgICBkZWYgcmVhZHJlbmFtZWQocGtnZGF0YV9maWxlKToKKyAgICAgICAgICAgICAgICByZW5hbWVkID0gIiIKKyAgICAgICAgICAgICAgICBwbiA9IG9zLnBhdGguYmFzZW5hbWUocGtnZGF0YV9maWxlKQorICAgICAgICAgICAgICAgIHdpdGggb3Blbihwa2dkYXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEtHXyVzOiIgJSBwbik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lZCA9IGxpbmUuc3BsaXQoJzogJylbMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVuYW1lZAorCisgICAgICAgICAgICAjIE1haW4gcHJvY2Vzc2luZyBsb29wCisgICAgICAgICAgICBmb3IgZyBpbiBnbG9iczoKKyAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSAiIgorICAgICAgICAgICAgICAgICMgRmlyc3QganVzdCB0cnkgc3Vic3RpdHV0aW9uIChpLmUuIHBhY2thZ2VuYW1lIC0+IHBhY2thZ2VuYW1lLWRldikKKyAgICAgICAgICAgICAgICBuZXdwa2cgPSBnLnJlcGxhY2UoIioiLCBwa2cpCisgICAgICAgICAgICAgICAgcmV2bGluayA9IHJldnBrZ2RhdGEobmV3cGtnKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgICAgICAgICAgICAgICAgICBmd2RmaWxlID0gZndkcGtnZGF0YShtYXBwZWRwa2cpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gcmVhZHJlbmFtZWQoZndkZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ3ZGZpbGUgKyAiLnBhY2thZ2VkIik6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSAiIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldmxpbmsgPSByZXZwa2dkYXRhKHBrZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocmV2bGluayk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHdlIGNhbiBtYXAgYWZ0ZXIgdW5kb2luZyB0aGUgcGFja2FnZSByZW5hbWluZyAoYnkgcmVzb2x2aW5nIHRoZSBzeW1saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ3BrZyA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBnLnJlcGxhY2UoIioiLCBvcmlncGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgZndkZmlsZSA9IGZ3ZHBrZ2RhdGEobmV3cGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZndkZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gcmVhZHJlbmFtZWQoZndkZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGF0IGRpZG4ndCB3b3JrLCBzbyBub3cgZ2V0IHRoZSBQTiwgc3Vic3RpdHV0ZSB0aGF0LCB0aGVuIG1hcCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG4gPSByZWFkcG4ocmV2bGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdwa2cgPSBnLnJlcGxhY2UoIioiLCBwbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd2RmaWxlID0gZndkcGtnZGF0YShuZXdwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZndkZmlsZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZHBrZyA9IHJlYWRyZW5hbWVkKGZ3ZGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZndkZmlsZSArICIucGFja2FnZWQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2cgPSAiIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQYWNrYWdlIGRvZXNuJ3QgZXZlbiBleGlzdC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyBpcyBub3QgYSB2YWxpZCBwYWNrYWdlISIgJSAocGtnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBpZiBtYXBwZWRwa2c6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXMgKCVzKSAtPiAlcyIgJSAocGtnLCBnLCBtYXBwZWRwa2cpKQorICAgICAgICAgICAgICAgICAgICBtYXBwZWRwa2dzLmFkZChtYXBwZWRwa2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcyAoJXMpIC0+ID8iICUgKHBrZywgZykpCisKKyAgICBsb2dnZXIuZGVidWcoIi0tLS0tLSIpCisKKyAgICBwcmludCgiXG4iLmpvaW4obWFwcGVkcGtncykpCisKK2RlZiByZWFkX3ZhbHVlKGFyZ3MpOgorICAgICMgSGFuZGxlIGJvdGggbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBtdWx0aXBsZSB2YWx1ZXMgd2l0aGluIGFuIGFyZyAob2xkIHN5bnRheCkKKyAgICBwYWNrYWdlcyA9IFtdCisgICAgZm9yIHBrZ2l0ZW0gaW4gYXJncy5wa2c6CisgICAgICAgIHBhY2thZ2VzLmV4dGVuZChwa2dpdGVtLnNwbGl0KCkpCisKKyAgICBkZWYgcmVhZHZhcihwa2dkYXRhX2ZpbGUsIHZhbHVlbmFtZSk6CisgICAgICAgIHZhbCA9ICIiCisgICAgICAgIHdpdGggb3Blbihwa2dkYXRhX2ZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHZhbHVlbmFtZSArICI6Iik6CisgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpbmUuc3BsaXQoJzogJywgMSlbMV0ucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHZhbAorCisgICAgbG9nZ2VyLmRlYnVnKCJyZWFkLXZhbHVlKCclcycsICclcycgJyVzJyIgJSAoYXJncy5wa2dkYXRhX2RpciwgYXJncy52YWx1ZW5hbWUsIHBhY2thZ2VzKSkKKyAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnX3NwbGl0ID0gcGFja2FnZS5zcGxpdCgnXycpCisgICAgICAgIHBrZ19uYW1lID0gcGtnX3NwbGl0WzBdCisgICAgICAgIGxvZ2dlci5kZWJ1ZygicGFja2FnZTogJyVzJyIgJSBwa2dfbmFtZSkKKyAgICAgICAgcmV2bGluayA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnX25hbWUpCisgICAgICAgIGxvZ2dlci5kZWJ1ZyhyZXZsaW5rKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZXZsaW5rKToKKyAgICAgICAgICAgIG1hcHBlZHBrZyA9IG9zLnBhdGguYmFzZW5hbWUob3MucmVhZGxpbmsocmV2bGluaykpCisgICAgICAgICAgICBxdmFyID0gYXJncy52YWx1ZW5hbWUKKyAgICAgICAgICAgIGlmIHF2YXIgPT0gIlBLR1NJWkUiOgorICAgICAgICAgICAgICAgICMgYXBwZW5kIHBhY2thZ2VuYW1lCisgICAgICAgICAgICAgICAgcXZhciA9ICIlc18lcyIgJSAoYXJncy52YWx1ZW5hbWUsIG1hcHBlZHBrZykKKyAgICAgICAgICAgICAgICAjIFBLR1NJWkUgaXMgbm93IGluIGJ5dGVzLCBidXQgd2Ugd2Ugd2FudCBpdCBpbiBLQgorICAgICAgICAgICAgICAgIHBrZ3NpemUgPSAoaW50KHJlYWR2YXIocmV2bGluaywgcXZhcikpICsgMTAyNCAvLyAyKSAvLyAxMDI0CisgICAgICAgICAgICAgICAgcHJpbnQoIiVkIiAlIHBrZ3NpemUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KHJlYWR2YXIocmV2bGluaywgcXZhcikpCisKK2RlZiBsb29rdXBfcGtnbGlzdChwa2dzLCBwa2dkYXRhX2RpciwgcmV2ZXJzZSk6CisgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgbWFwcGluZ3MgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgICAgIHJldmxpbmsgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICJydW50aW1lLXJldmVyc2UiLCBwa2cpCisgICAgICAgICAgICBsb2dnZXIuZGVidWcocmV2bGluaykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgIG1hcHBpbmdzW3BrZ10gPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnJlYWRsaW5rKHJldmxpbmspKQorICAgIGVsc2U6CisgICAgICAgIG1hcHBpbmdzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgcGtnZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgJ3J1bnRpbWUnLCBwa2cpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dmaWxlKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGtnZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRzWzBdID09ICdQS0dfJXMnICUgcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzW3BrZ10uYXBwZW5kKGZpZWxkc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBtYXBwaW5ncworCitkZWYgbG9va3VwX3BrZyhhcmdzKToKKyAgICAjIEhhbmRsZSBib3RoIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQgbXVsdGlwbGUgdmFsdWVzIHdpdGhpbiBhbiBhcmcgKG9sZCBzeW50YXgpCisgICAgcGtncyA9IFtdCisgICAgZm9yIHBrZ2l0ZW0gaW4gYXJncy5wa2c6CisgICAgICAgIHBrZ3MuZXh0ZW5kKHBrZ2l0ZW0uc3BsaXQoKSkKKworICAgIG1hcHBpbmdzID0gbG9va3VwX3BrZ2xpc3QocGtncywgYXJncy5wa2dkYXRhX2RpciwgYXJncy5yZXZlcnNlKQorCisgICAgaWYgbGVuKG1hcHBpbmdzKSA8IGxlbihwa2dzKToKKyAgICAgICAgbWlzc2luZyA9IGxpc3Qoc2V0KHBrZ3MpIC0gc2V0KG1hcHBpbmdzLmtleXMoKSkpCisgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6ICVzIiAlICcsICcuam9pbihtaXNzaW5nKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIGFyZ3MucmV2ZXJzZToKKyAgICAgICAgaXRlbXMgPSBtYXBwaW5ncy52YWx1ZXMoKQorICAgIGVsc2U6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgaXRlbXMuZXh0ZW5kKG1hcHBpbmdzLmdldChwa2csIFtdKSkKKworICAgIHByaW50KCdcbicuam9pbihpdGVtcykpCisKK2RlZiBsb29rdXBfcmVjaXBlKGFyZ3MpOgorICAgICMgSGFuZGxlIGJvdGggbXVsdGlwbGUgYXJndW1lbnRzIGFuZCBtdWx0aXBsZSB2YWx1ZXMgd2l0aGluIGFuIGFyZyAob2xkIHN5bnRheCkKKyAgICBwa2dzID0gW10KKyAgICBmb3IgcGtnaXRlbSBpbiBhcmdzLnBrZzoKKyAgICAgICAgcGtncy5leHRlbmQocGtnaXRlbS5zcGxpdCgpKQorCisgICAgbWFwcGluZ3MgPSBkZWZhdWx0ZGljdChsaXN0KQorICAgIGZvciBwa2cgaW4gcGtnczoKKyAgICAgICAgcGtnZmlsZSA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZS1yZXZlcnNlJywgcGtnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwa2dmaWxlKToKKyAgICAgICAgICAgIHdpdGggb3Blbihwa2dmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZHNbMF0gPT0gJ1BOJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzW3BrZ10uYXBwZW5kKGZpZWxkc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgaWYgbGVuKG1hcHBpbmdzKSA8IGxlbihwa2dzKToKKyAgICAgICAgbWlzc2luZyA9IGxpc3Qoc2V0KHBrZ3MpIC0gc2V0KG1hcHBpbmdzLmtleXMoKSkpCisgICAgICAgIGxvZ2dlci5lcnJvcigiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6ICVzIiAlICcsICcuam9pbihtaXNzaW5nKSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGl0ZW1zID0gW10KKyAgICBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgIGl0ZW1zLmV4dGVuZChtYXBwaW5ncy5nZXQocGtnLCBbXSkpCisgICAgcHJpbnQoJ1xuJy5qb2luKGl0ZW1zKSkKKworZGVmIGdldF9yZWNpcGVfcGtncyhwa2dkYXRhX2RpciwgcmVjaXBlLCB1bnBhY2thZ2VkKToKKyAgICByZWNpcGVkYXRhZmlsZSA9IG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgcmVjaXBlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZWNpcGVkYXRhZmlsZSk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgcGFja2FnZWQgcmVjaXBlIHdpdGggbmFtZSAlcyIgJSByZWNpcGUpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcGFja2FnZXMgPSBbXQorICAgIHdpdGggb3BlbihyZWNpcGVkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgZmllbGRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgnOiAnKQorICAgICAgICAgICAgaWYgZmllbGRzWzBdID09ICdQQUNLQUdFUyc6CisgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBmaWVsZHNbMV0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBpZiBub3QgdW5wYWNrYWdlZDoKKyAgICAgICAgcGtnbGlzdCA9IFtdCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgJyVzLnBhY2thZ2VkJyAlIHBrZykpOgorICAgICAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKHBrZykKKyAgICAgICAgcmV0dXJuIHBrZ2xpc3QKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcGFja2FnZXMKKworZGVmIGxpc3RfcGtncyhhcmdzKToKKyAgICBmb3VuZCA9IEZhbHNlCisKKyAgICBkZWYgbWF0Y2hwa2cocGtnKToKKyAgICAgICAgaWYgYXJncy5wa2dzcGVjOgorICAgICAgICAgICAgbWF0Y2hlZCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgcGtnc3BlYyBpbiBhcmdzLnBrZ3NwZWM6CisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShwa2csIHBrZ3NwZWMpOgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IG1hdGNoZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBhcmdzLnVucGFja2FnZWQ6CisgICAgICAgICAgICBpZiBhcmdzLnJ1bnRpbWU6CisgICAgICAgICAgICAgICAgcmV2bGluayA9IG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAicnVudGltZS1yZXZlcnNlIiwgcGtnKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHJldmxpbmspOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIHVubGlrZWx5IHRvIGdldCBoZXJlIGlmIHRoZSBwYWNrYWdlIHdhcyBub3QgcGFja2FnZWQsIGJ1dCBqdXN0IGluIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBhZGQgdGhlIHN5bWxpbmtzIGZvciB1bnBhY2thZ2VkIGZpbGVzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgICAgICAgICAgICAgbWFwcGVkcGtnID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhyZXZsaW5rKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcmdzLnBrZ2RhdGFfZGlyLCAncnVudGltZScsICclcy5wYWNrYWdlZCcgJSBtYXBwZWRwa2cpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGFyZ3MucGtnZGF0YV9kaXIsICdydW50aW1lJywgJyVzLnBhY2thZ2VkJyAlIHBrZykpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIGFyZ3MucmVjaXBlOgorICAgICAgICBwYWNrYWdlcyA9IGdldF9yZWNpcGVfcGtncyhhcmdzLnBrZ2RhdGFfZGlyLCBhcmdzLnJlY2lwZSwgYXJncy51bnBhY2thZ2VkKQorCisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICAgICAgcnVudGltZV9wa2dzID0gbG9va3VwX3BrZ2xpc3QocGFja2FnZXMsIGFyZ3MucGtnZGF0YV9kaXIsIEZhbHNlKQorICAgICAgICAgICAgZm9yIHJ0cGtncyBpbiBydW50aW1lX3BrZ3MudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcGtnbGlzdC5leHRlbmQocnRwa2dzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnbGlzdCA9IHBhY2thZ2VzCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dsaXN0OgorICAgICAgICAgICAgaWYgbWF0Y2hwa2cocGtnKToKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBwcmludCgiJXMiICUgcGtnKQorICAgIGVsc2U6CisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHNlYXJjaGRpciA9ICdydW50aW1lLXJldmVyc2UnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWFyY2hkaXIgPSAncnVudGltZScKKworICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2Rpciwgc2VhcmNoZGlyKSk6CisgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5wYWNrYWdlZCcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG1hdGNocGtnKGZuKToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyIgJSBmbikKKyAgICBpZiBub3QgZm91bmQ6CisgICAgICAgIGlmIGFyZ3MucGtnc3BlYzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IHBhY2thZ2UgbWF0Y2hpbmcgJXMiICUgYXJncy5wa2dzcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJObyBwYWNrYWdlcyBmb3VuZCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBsaXN0X3BrZ19maWxlcyhhcmdzKToKKyAgICBpbXBvcnQganNvbgorCisgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgIGlmIGFyZ3MucGtnOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJsaXN0LXBrZy1maWxlczogSWYgLXAvLS1yZWNpcGUgaXMgc3BlY2lmaWVkIHRoZW4gYSBwYWNrYWdlIG5hbWUgY2Fubm90IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICByZWNpcGVwa2dsaXN0ID0gZ2V0X3JlY2lwZV9wa2dzKGFyZ3MucGtnZGF0YV9kaXIsIGFyZ3MucmVjaXBlLCBhcmdzLnVucGFja2FnZWQpCisgICAgICAgIGlmIGFyZ3MucnVudGltZToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICAgICAgcnVudGltZV9wa2dzID0gbG9va3VwX3BrZ2xpc3QocmVjaXBlcGtnbGlzdCwgYXJncy5wa2dkYXRhX2RpciwgRmFsc2UpCisgICAgICAgICAgICBmb3IgcnRwa2dzIGluIHJ1bnRpbWVfcGtncy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwa2dsaXN0LmV4dGVuZChydHBrZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dsaXN0ID0gcmVjaXBlcGtnbGlzdAorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBhcmdzLnBrZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigibGlzdC1wa2ctZmlsZXM6IElmIC1wLy0tcmVjaXBlIGlzIG5vdCBzcGVjaWZpZWQgdGhlbiBhdCBsZWFzdCBvbmUgcGFja2FnZSBuYW1lIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHBrZ2xpc3QgPSBhcmdzLnBrZworCisgICAgZm9yIHBrZyBpbiBwa2dsaXN0OgorICAgICAgICBwcmludCgiJXM6IiAlIHBrZykKKyAgICAgICAgaWYgYXJncy5ydW50aW1lOgorICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUtcmV2ZXJzZSIsIHBrZykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dkYXRhZmlsZSk6CisgICAgICAgICAgICAgICAgaWYgYXJncy5yZWNpcGU6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBwYWNrYWdlIHdhcyBlbXB0eSBhbmQgdGh1cyBuZXZlciBwYWNrYWdlZCwgaWdub3JlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBhbnkgYnVpbHQgcnVudGltZSBwYWNrYWdlIG5hbWVkICVzIiAlIHBrZykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgInJ1bnRpbWUiLCBwa2cpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnZGF0YWZpbGUpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVW5hYmxlIHRvIGZpbmQgYW55IGJ1aWx0IHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVkICVzIiAlIHBrZykKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgIHdpdGggb3Blbihwa2dkYXRhZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0ZJTEVTX0lORk86Jyk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCisgICAgICAgICAgICAgICAgICAgIGZvciBmdWxscHRoIGluIHNvcnRlZChkaWN0dmFsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcdCVzIiAlIGZ1bGxwdGgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJVbmFibGUgdG8gZmluZCBGSUxFU19JTkZPIGVudHJ5IGluICVzIiAlIHBrZ2RhdGFmaWxlKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKK2RlZiBmaW5kX3BhdGgoYXJncyk6CisgICAgaW1wb3J0IGpzb24KKworICAgIGZvdW5kID0gRmFsc2UKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4oYXJncy5wa2dkYXRhX2RpciwgJ3J1bnRpbWUnKSk6CisgICAgICAgIGZvciBmbiBpbiBmaWxlczoKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocm9vdCxmbikpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGSUxFU19JTkZPOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3R2YWwgPSBqc29uLmxvYWRzKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmdWxscHRoIGluIGRpY3R2YWwua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZnVsbHB0aCwgYXJncy50YXJnZXRwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIlczogJXMiICUgKGZuLCBmdWxscHRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgaWYgbm90IGZvdW5kOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGFueSBwYWNrYWdlIHByb2R1Y2luZyBwYXRoICVzIiAlIGFyZ3MudGFyZ2V0cGF0aCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSJPcGVuRW1iZWRkZWQgcGtnZGF0YSB0b29sIC0gcXVlcmllcyB0aGUgcGtnZGF0YSBmaWxlcyB3cml0dGVuIG91dCBkdXJpbmcgZG9fcGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSJVc2UgJShwcm9nKXMgPHN1YmNvbW1hbmQ+IC0taGVscCB0byBnZXQgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGVidWcnLCBoZWxwPSdFbmFibGUgZGVidWcgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBrZ2RhdGEtZGlyJywgaGVscD0nUGF0aCB0byBwa2dkYXRhIGRpcmVjdG9yeSAoZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGlmIG5vdCBzcGVjaWZpZWQpJykKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisKKyAgICBwYXJzZXJfbG9va3VwX3BrZyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbG9va3VwLXBrZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcmFuc2xhdGUgYmV0d2VlbiByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcyBhbmQgcnVudGltZSBwYWNrYWdlIG5hbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMb29rcyB1cCB0aGUgc3BlY2lmaWVkIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWUocykgdG8gc2VlIHdoYXQgdGhlIGZpbmFsIHJ1bnRpbWUgcGFja2FnZSBuYW1lIGlzIChlLmcuIGdsaWJjIGJlY29tZXMgbGliYzYpLCBvciB3aXRoIC1yLy0tcmV2ZXJzZSBsb29rcyB1cCB0aGUgb3RoZXIgd2F5LicpCisgICAgcGFyc2VyX2xvb2t1cF9wa2cuYWRkX2FyZ3VtZW50KCdwa2cnLCBuYXJncz0nKycsIGhlbHA9J1BhY2thZ2UgbmFtZSB0byBsb29rIHVwJykKKyAgICBwYXJzZXJfbG9va3VwX3BrZy5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmV2ZXJzZScsIGhlbHA9J1N3aXRjaCB0byBsb29raW5nIHVwIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVzIGZyb20gcnVudGltZSBwYWNrYWdlIG5hbWVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbG9va3VwX3BrZy5zZXRfZGVmYXVsdHMoZnVuYz1sb29rdXBfcGtnKQorCisgICAgcGFyc2VyX2xpc3RfcGtncyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbGlzdC1wa2dzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0xpc3QgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xpc3RzIHBhY2thZ2VzIHRoYXQgaGF2ZSBiZWVuIGJ1aWx0JykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLmFkZF9hcmd1bWVudCgncGtnc3BlYycsIG5hcmdzPScqJywgaGVscD0nUGFja2FnZSBuYW1lIHRvIHNlYXJjaCBmb3IgKHdpbGRjYXJkcyAqID8gYWxsb3dlZCwgdXNlIHF1b3RlcyB0byBhdm9pZCBzaGVsbCBleHBhbnNpb24pJykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLmFkZF9hcmd1bWVudCgnLXInLCAnLS1ydW50aW1lJywgaGVscD0nU2hvdyBydW50aW1lIHBhY2thZ2UgbmFtZXMgaW5zdGVhZCBvZiByZWNpcGUtc3BhY2UgcGFja2FnZSBuYW1lcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyX2xpc3RfcGtncy5hZGRfYXJndW1lbnQoJy1wJywgJy0tcmVjaXBlJywgaGVscD0nTGltaXQgdG8gcGFja2FnZXMgcHJvZHVjZWQgYnkgdGhlIHNwZWNpZmllZCByZWNpcGUnKQorICAgIHBhcnNlcl9saXN0X3BrZ3MuYWRkX2FyZ3VtZW50KCctdScsICctLXVucGFja2FnZWQnLCBoZWxwPSdJbmNsdWRlIHVucGFja2FnZWQgKGkuZS4gZW1wdHkpIHBhY2thZ2VzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dzLnNldF9kZWZhdWx0cyhmdW5jPWxpc3RfcGtncykKKworICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbGlzdC1wa2ctZmlsZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nTGlzdCBmaWxlcyB3aXRoaW4gYSBwYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdMaXN0cyBmaWxlcyBpbmNsdWRlZCBpbiBvbmUgb3IgbW9yZSBwYWNrYWdlcycpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLmFkZF9hcmd1bWVudCgncGtnJywgbmFyZ3M9JyonLCBoZWxwPSdQYWNrYWdlIG5hbWUgdG8gcmVwb3J0IG9uIChpZiAtcC8tLXJlY2lwZSBpcyBub3Qgc3BlY2lmaWVkKScpCisgICAgcGFyc2VyX2xpc3RfcGtnX2ZpbGVzLmFkZF9hcmd1bWVudCgnLXInLCAnLS1ydW50aW1lJywgaGVscD0nU3BlY2lmaWVkIHBhY2thZ2UocykgYXJlIHJ1bnRpbWUgcGFja2FnZSBuYW1lcyBpbnN0ZWFkIG9mIHJlY2lwZS1zcGFjZSBwYWNrYWdlIG5hbWVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuYWRkX2FyZ3VtZW50KCctcCcsICctLXJlY2lwZScsIGhlbHA9J1JlcG9ydCBvbiBhbGwgcGFja2FnZXMgcHJvZHVjZWQgYnkgdGhlIHNwZWNpZmllZCByZWNpcGUnKQorICAgIHBhcnNlcl9saXN0X3BrZ19maWxlcy5hZGRfYXJndW1lbnQoJy11JywgJy0tdW5wYWNrYWdlZCcsIGhlbHA9J0luY2x1ZGUgdW5wYWNrYWdlZCAoaS5lLiBlbXB0eSkgcGFja2FnZXMgKG9ubHkgdXNlZnVsIHdpdGggLXAvLS1yZWNpcGUpJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbGlzdF9wa2dfZmlsZXMuc2V0X2RlZmF1bHRzKGZ1bmM9bGlzdF9wa2dfZmlsZXMpCisKKyAgICBwYXJzZXJfbG9va3VwX3JlY2lwZSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignbG9va3VwLXJlY2lwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGaW5kIHJlY2lwZSBwcm9kdWNpbmcgb25lIG9yIG1vcmUgcGFja2FnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0xvb2tzIHVwIHRoZSBzcGVjaWZpZWQgcnVudGltZSBwYWNrYWdlKHMpIHRvIHNlZSB3aGljaCByZWNpcGUgdGhleSB3ZXJlIHByb2R1Y2VkIGJ5JykKKyAgICBwYXJzZXJfbG9va3VwX3JlY2lwZS5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScrJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX2xvb2t1cF9yZWNpcGUuc2V0X2RlZmF1bHRzKGZ1bmM9bG9va3VwX3JlY2lwZSkKKworICAgIHBhcnNlcl9maW5kX3BhdGggPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZpbmQtcGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGaW5kIHBhY2thZ2UgcHJvdmlkaW5nIGEgdGFyZ2V0IHBhdGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J0ZpbmRzIHRoZSByZWNpcGUtc3BhY2UgcGFja2FnZSBwcm92aWRpbmcgdGhlIHNwZWNpZmllZCB0YXJnZXQgcGF0aCcpCisgICAgcGFyc2VyX2ZpbmRfcGF0aC5hZGRfYXJndW1lbnQoJ3RhcmdldHBhdGgnLCBoZWxwPSdQYXRoIHRvIGZpbmQgKHdpbGRjYXJkcyAqID8gYWxsb3dlZCwgdXNlIHF1b3RlcyB0byBhdm9pZCBzaGVsbCBleHBhbnNpb24pJykKKyAgICBwYXJzZXJfZmluZF9wYXRoLnNldF9kZWZhdWx0cyhmdW5jPWZpbmRfcGF0aCkKKworICAgIHBhcnNlcl9yZWFkX3ZhbHVlID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdyZWFkLXZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1JlYWQgYW55IHBrZ2RhdGEgdmFsdWUgZm9yIG9uZSBvciBtb3JlIHBhY2thZ2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdSZWFkcyB0aGUgbmFtZWQgdmFsdWUgZnJvbSB0aGUgcGtnZGF0YSBmaWxlcyBmb3IgdGhlIHNwZWNpZmllZCBwYWNrYWdlcycpCisgICAgcGFyc2VyX3JlYWRfdmFsdWUuYWRkX2FyZ3VtZW50KCd2YWx1ZW5hbWUnLCBoZWxwPSdOYW1lIG9mIHRoZSB2YWx1ZSB0byBsb29rIHVwJykKKyAgICBwYXJzZXJfcmVhZF92YWx1ZS5hZGRfYXJndW1lbnQoJ3BrZycsIG5hcmdzPScrJywgaGVscD0nUnVudGltZSBwYWNrYWdlIG5hbWUgdG8gbG9vayB1cCcpCisgICAgcGFyc2VyX3JlYWRfdmFsdWUuc2V0X2RlZmF1bHRzKGZ1bmM9cmVhZF92YWx1ZSkKKworICAgIHBhcnNlcl9nbG9iID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdnbG9iJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0V4cGFuZCBwYWNrYWdlIG5hbWUgZ2xvYiBleHByZXNzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdFeHBhbmRzIG9uZSBvciBtb3JlIGdsb2IgZXhwcmVzc2lvbnMgb3ZlciB0aGUgcGFja2FnZXMgbGlzdGVkIGluIHBrZ2xpc3RmaWxlJykKKyAgICBwYXJzZXJfZ2xvYi5hZGRfYXJndW1lbnQoJ3BrZ2xpc3RmaWxlJywgaGVscD0nRmlsZSBsaXN0aW5nIHBhY2thZ2VzIChvbmUgcGFja2FnZSBuYW1lIHBlciBsaW5lKScpCisgICAgcGFyc2VyX2dsb2IuYWRkX2FyZ3VtZW50KCdnbG9iJywgbmFyZ3M9IisiLCBoZWxwPSdHbG9iIGV4cHJlc3Npb24gZm9yIHBhY2thZ2UgbmFtZXMsIGUuZy4gKi1kZXYnKQorICAgIHBhcnNlcl9nbG9iLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leGNsdWRlJywgaGVscD0nRXhjbHVkZSBwYWNrYWdlcyBtYXRjaGluZyBzcGVjaWZpZWQgcmVnZXggZnJvbSB0aGUgZ2xvYiBvcGVyYXRpb24nKQorICAgIHBhcnNlcl9nbG9iLnNldF9kZWZhdWx0cyhmdW5jPWdsb2IpCisKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGlmIG5vdCBhcmdzLnBrZ2RhdGFfZGlyOgorICAgICAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgICAgICBiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQorICAgICAgICBpZiBub3QgYml0YmFrZXBhdGg6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSCIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBsb2dnZXIuZGVidWcoJ0ZvdW5kIGJpdGJha2UgcGF0aDogJXMnICUgYml0YmFrZXBhdGgpCisgICAgICAgIHRpbmZvaWwgPSB0aW5mb2lsX2luaXQoKQorICAgICAgICBhcmdzLnBrZ2RhdGFfZGlyID0gdGluZm9pbC5jb25maWdfZGF0YS5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdWYWx1ZSBvZiBQS0dEQVRBX0RJUiBpcyAiJXMiJyAlIGFyZ3MucGtnZGF0YV9kaXIpCisgICAgICAgIGlmIG5vdCBhcmdzLnBrZ2RhdGFfZGlyOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHBrZ2RhdGEgZGlyZWN0b3J5IGZyb20gUEtHREFUQV9ESVInKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmdzLnBrZ2RhdGFfZGlyKToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmluZCBwa2dkYXRhIGRpcmVjdG9yeSAlcycgJSBwa2dkYXRhX2RpcikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJldCA9IGFyZ3MuZnVuYyhhcmdzKQorCisgICAgcmV0dXJuIHJldAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL29lLXB1Ymxpc2gtc2RrIGIvc2NyaXB0cy9vZS1wdWJsaXNoLXNkawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNzM3YzlmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9vZS1wdWJsaXNoLXNkawpAQCAtMCwwICsxLDE0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgT3BlbkVtYmVkZGVkIFNESyBwdWJsaXNoaW5nIHRvb2wKKworIyBvZS1wdWJsaXNoLXNkayBwdWJsaXNoIDxleHQtc2RrPiA8ZGVzdGluYXRpb24+CisjIDxleHQtc2RrPjogZXh0ZW5zaWJsZSBTREsgdG8gcHVibGlzaCAocGF0aCB0byB0aGUgaW5zdGFsbGVyIHNoZWxsIHNjcmlwdCkKKyMgPGRlc3RpbmF0aW9uPjogbG9jYWwgb3IgcmVtb3RlIGxvY2F0aW9uIHdoaWNoIHNlcnZlcnMgYXMgYW4gU0RLIHVwZGF0ZSBzZXJ2ZXIKKyMgZS5nLgorIyBvZS1wdWJsaXNoLXNkayAvcGF0aC90by9zZGstZXh0LnNoIC9tbnQvcG9reS9zZGstZXh0CisjIG9lLXB1Ymxpc2gtc2RrIC9wYXRoL3RvL3Nkay1leHQuc2ggdXNlckBob3N0Oi9vcHQvcG9reS9zZGstZXh0CisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgZ2xvYgoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBlcnJubworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgnc2RrdG9vbCcpCisKK2RlZiBta2RpcihkKToKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKGQpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICByYWlzZSBlCisKK2RlZiBwdWJsaXNoKGFyZ3MpOgorICAgIGxvZ2dlci5kZWJ1ZygiSW4gcHVibGlzaCBmdW5jdGlvbiIpCisgICAgdGFyZ2V0X3NkayA9IGFyZ3Muc2RrCisgICAgZGVzdGluYXRpb24gPSBhcmdzLmRlc3QKKyAgICBsb2dnZXIuZGVidWcoInRhcmdldF9zZGsgPSAlcywgdXBkYXRlX3NlcnZlciA9ICVzIiAlICh0YXJnZXRfc2RrLCBkZXN0aW5hdGlvbikpCisgICAgc2RrX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfc2RrKQorCisgICAgIyBFbnN1cmUgdGhlIFNESyBleGlzdHMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X3Nkayk6CisgICAgICAgIGxvZ2dlci5lcnJvcigiJXMgZG9lc24ndCBleGlzdCIgJSB0YXJnZXRfc2RrKQorICAgICAgICByZXR1cm4gLTEKKworICAgIGlmICc6JyBpbiBkZXN0aW5hdGlvbjoKKyAgICAgICAgaXNfcmVtb3RlID0gVHJ1ZQorICAgICAgICBob3N0LCBkZXN0ZGlyID0gZGVzdGluYXRpb24uc3BsaXQoJzonKQorICAgICAgICBkZXN0X3NkayA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBzZGtfYmFzZW5hbWUpCisgICAgZWxzZToKKyAgICAgICAgaXNfcmVtb3RlID0gRmFsc2UKKyAgICAgICAgZGVzdF9zZGsgPSBvcy5wYXRoLmpvaW4oZGVzdGluYXRpb24sIHNka19iYXNlbmFtZSkKKworICAgICMgTWFraW5nIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMKKyAgICBsb2dnZXIuZGVidWcoIk1ha2luZyBzdXJlIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzIikKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBta2RpcihkZXN0aW5hdGlvbikKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSAic3NoICVzICdta2RpciAtcCAlcyciICUgKGhvc3QsIGRlc3RkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJNYWtpbmcgZGlyZWN0b3J5ICVzIG9uICVzIGZhaWxlZCIgJSAoZGVzdGRpciwgaG9zdCkpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIENvcHlpbmcgdGhlIFNESyB0byB0aGUgZGVzdGluYXRpb24KKyAgICBsb2dnZXIuaW5mbygiQ29weWluZyB0aGUgU0RLIHRvIGRlc3RpbmF0aW9uIikKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0X3Nkayk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZGVzdF9zZGspCisgICAgICAgIGlmIChvcy5zdGF0KHRhcmdldF9zZGspLnN0X2RldiA9PSBvcy5zdGF0KGRlc3RpbmF0aW9uKS5zdF9kZXYpOgorICAgICAgICAgICAgb3MubGluayh0YXJnZXRfc2RrLCBkZXN0X3NkaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KHRhcmdldF9zZGssIGRlc3Rfc2RrKQorICAgIGVsc2U6CisgICAgICAgIGNtZCA9ICJzY3AgJXMgJXMiICUgKHRhcmdldF9zZGssIGRlc3RpbmF0aW9uKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigic2NwICVzICVzIGZhaWxlZCIgJSAodGFyZ2V0X3NkaywgZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJldAorCisgICAgIyBVbnBhY2sgdGhlIFNESworICAgIGxvZ2dlci5pbmZvKCJVbnBhY2tpbmcgU0RLIikKKyAgICBpZiBub3QgaXNfcmVtb3RlOgorICAgICAgICBjbWQgPSAic2ggJXMgLW4gLXkgLWQgJXMiICUgKGRlc3Rfc2RrLCBkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgaWYgcmV0ID09IDA6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygnU3VjY2Vzc2Z1bGx5IHVucGFja2VkICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGluYXRpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdW5wYWNrICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIHJldAorICAgIGVsc2U6CisgICAgICAgIGNtZCA9ICJzc2ggJXMgJ3NoICVzIC1uIC15IC1kICVzJyIgJSAoaG9zdCwgZGVzdF9zZGssIGRlc3RkaXIpCisgICAgICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCA9PSAwOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1N1Y2Nlc3NmdWxseSB1bnBhY2tlZCAlcyB0byAlcycgJSAoZGVzdF9zZGssIGRlc3RkaXIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gdW5wYWNrICVzIHRvICVzJyAlIChkZXN0X3NkaywgZGVzdGRpcikpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICAjIFNldHRpbmcgdXAgdGhlIGdpdCByZXBvCisgICAgaWYgbm90IGlzX3JlbW90ZToKKyAgICAgICAgY21kID0gJ3NldCAtZTsgY2QgJXMvbGF5ZXJzOyBpZiBbICEgLWUgLmdpdCBdOyB0aGVuIGdpdCBpbml0IC47IG12IC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlIC5naXQvaG9va3MvcG9zdC11cGRhdGU7IGZpOyBnaXQgYWRkIC1BIC47IGdpdCBjb21taXQgLXEgLW0gImluaXQgcmVwbyIgfHwgdHJ1ZTsnICUgZGVzdGluYXRpb24KKyAgICBlbHNlOgorICAgICAgICBjbWQgPSAic3NoICVzICdzZXQgLWU7IGNkICVzL2xheWVyczsgaWYgWyAhIC1lIC5naXQgXTsgdGhlbiBnaXQgaW5pdCAuOyBtdiAuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSAuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlOyBmaTsgZ2l0IGFkZCAtQSAuOyBnaXQgY29tbWl0IC1xIC1tIFwiaW5pdCByZXBvXCIgfHwgdHJ1ZTsnIiAlIChob3N0LCBkZXN0ZGlyKQorICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgaWYgcmV0ID09IDA6CisgICAgICAgIGxvZ2dlci5pbmZvKCdTREsgcHVibGlzaGVkIHN1Y2Nlc3NmdWxseScpCisgICAgZWxzZToKKyAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHVwIGxheWVyIGdpdCByZXBvJykKKyAgICByZXR1cm4gcmV0CisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIGRldmVsb3BtZW50IHRvb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz0iVXNlICUocHJvZylzIDxzdWJjb21tYW5kPiAtLWhlbHAgdG8gZ2V0IGhlbHAgb24gYSBzcGVjaWZpYyBjb21tYW5kIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRlYnVnJywgaGVscD0nRW5hYmxlIGRlYnVnIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGhlbHA9J1ByaW50IG9ubHkgZXJyb3JzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3NkaycsIGhlbHA9J0V4dGVuc2libGUgU0RLIHRvIHB1Ymxpc2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2Rlc3QnLCBoZWxwPSdEZXN0aW5hdGlvbiB0byBwdWJsaXNoIFNESyB0bycpCisKKyAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZ1bmM9cHVibGlzaCkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLmRlYnVnOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICBlbGlmIGFyZ3MucXVpZXQ6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgcmV0ID0gYXJncy5mdW5jKGFyZ3MpCisgICAgcmV0dXJuIHJldAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9zY3JpcHRzL29lLXNlbGZ0ZXN0IGIvc2NyaXB0cy9vZS1zZWxmdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MWUyZGQyCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9vZS1zZWxmdGVzdApAQCAtMCwwICsxLDI0NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IHJ1bnMgdGVzdHMgZGVmaW5lZCBpbiBtZXRhL2xpYi9zZWxmdGVzdC8KKyMgSXQncyBwdXJwb3NlIGlzIHRvIGF1dG9tYXRlIHRoZSB0ZXN0aW5nIG9mIGRpZmZlcmVudCBiaXRiYWtlIHRvb2xzLgorIyBUbyB1c2UgaXQgeW91IGp1c3QgbmVlZCB0byBzb3VyY2UgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgYW5kCisjIGFkZCB0aGUgbWV0YS1zZWxmdGVzdCBsYXllciB0byB5b3VyIEJCTEFZRVJTLgorIyBDYWxsIHRoZSBzY3JpcHQgYXM6ICJvZS1zZWxmdGVzdCIgdG8gcnVuIGFsbCB0aGUgdGVzdHMgaW4gaW4gbWV0YS9saWIvc2VsZnRlc3QvCisjIENhbGwgdGhlIHNjcmlwdCBhczogIm9lLXNlbGZ0ZXN0IDxtb2R1bGU+LjxDbGFzcz4uPG1ldGhvZD4iIHRvIHJ1biBqdXN0IGEgc2luZ2xlIHRlc3QKKyMgRS5nOiAib2Utc2VsZnRlc3QgYmJvdXRwdXQuQml0YmFrZUxheWVycyIgd2lsbCBydW4ganVzdCB0aGUgQml0YmFrZUxheWVycyBjbGFzcyBmcm9tIG1ldGEvbGliL3NlbGZ0ZXN0L2Jib3V0cHV0LnB5CisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgYXJncGFyc2UKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkgKyAnL2xpYicpCitpbXBvcnQgc2NyaXB0cGF0aAorc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCitzY3JpcHRwYXRoLmFkZF9vZV9saWJfcGF0aCgpCisKK2ltcG9ydCBvZXFhLnNlbGZ0ZXN0CitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0CisKK2RlZiBsb2dnZXJfY3JlYXRlKCk6CisgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInNlbGZ0ZXN0IikKKyAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGZoID0gbG9nZ2luZy5GaWxlSGFuZGxlcihmaWxlbmFtZT0nb2Utc2VsZnRlc3QubG9nJywgbW9kZT0ndycpCisgICAgZmguc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGNoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgY2guc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgIGZoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKworICAgIGxvZy5hZGRIYW5kbGVyKGZoKQorICAgIGxvZy5hZGRIYW5kbGVyKGNoKQorCisgICAgcmV0dXJuIGxvZworCitsb2cgPSBsb2dnZXJfY3JlYXRlKCkKKworZGVmIGdldF9hcmdzX3BhcnNlcigpOgorICAgIGRlc2NyaXB0aW9uID0gIlNjcmlwdCB0aGF0IHJ1bnMgdW5pdCB0ZXN0cyBhZ2FpbnMgYml0YmFrZSBhbmQgb3RoZXIgWW9jdG8gcmVsYXRlZCB0b29scy4gVGhlIGdvYWwgaXMgdG8gdmFsaWRhdGUgdG9vbHMgZnVuY3Rpb25hbGl0eSBhbmQgbWV0YWRhdGEgaW50ZWdyaXR5LiBSZWZlciB0byBodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL09lLXNlbGZ0ZXN0IGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJ1bi10ZXN0cycsIHJlcXVpcmVkPUZhbHNlLCBhY3Rpb249J3N0b3JlJywgbmFyZ3M9JyonLCBkZXN0PSJydW5fdGVzdHMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1NlbGVjdCB3aGF0IHRlc3RzIHRvIHJ1biAobW9kdWxlcywgY2xhc3NlcyBvciB0ZXN0IG1ldGhvZHMpLiBGb3JtYXQgc2hvdWxkIGJlOiA8bW9kdWxlPi48Y2xhc3M+Ljx0ZXN0X21ldGhvZD4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1ydW4tYWxsLXRlc3RzJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJ1bl9hbGxfdGVzdHMiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdSdW4gYWxsICh1bmhpZGRlbikgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1saXN0LW1vZHVsZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGlzdF9tb2R1bGVzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlcy4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1saXN0LWNsYXNzZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGlzdF9hbGxjbGFzc2VzIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nTGlzdCBhbGwgYXZhaWxhYmxlIHRlc3QgY2xhc3Nlcy4nKQorICAgIHJldHVybiBwYXJzZXIKKworCitkZWYgcHJlZmxpZ2h0X2NoZWNrKCk6CisKKyAgICBsb2cuaW5mbygiQ2hlY2tpbmcgdGhhdCBldmVyeXRoaW5nIGlzIGluIG9yZGVyIGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0cyIpCisKKyAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoIkJVSUxERElSIik6CisgICAgICAgIGxvZy5lcnJvcigiQlVJTERESVIgaXNuJ3Qgc2V0LiBEaWQgeW91IGZvcmdldCB0byBzb3VyY2UgeW91ciBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgb3MuZ2V0Y3dkKCkgIT0gYnVpbGRkaXI6CisgICAgICAgIGxvZy5pbmZvKCJDaGFuZ2luZyBjd2QgdG8gJXMiICUgYnVpbGRkaXIpCisgICAgICAgIG9zLmNoZGlyKGJ1aWxkZGlyKQorCisgICAgaWYgbm90ICJtZXRhLXNlbGZ0ZXN0IiBpbiBnZXRfYmJfdmFyKCJCQkxBWUVSUyIpOgorICAgICAgICBsb2cuZXJyb3IoIllvdSBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIG1ldGEtc2VsZnRlc3QgbGF5ZXIgaW4gQkJMQVlFUlMiKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGxvZy5pbmZvKCJSdW5uaW5nIGJpdGJha2UgLXAiKQorICAgIHJ1bkNtZCgiYml0YmFrZSAtcCIpCisKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgYWRkX2luY2x1ZGUoKToKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIG5vdCBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvbG9jYWwuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJBZGRpbmc6IFwiaW5jbHVkZSBzZWxmdGVzdC5pbmNcIiBpbiBsb2NhbC5jb25mIikKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBzZWxmdGVzdC5pbmMiKQorCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIG5vdCBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJBZGRpbmc6IFwiaW5jbHVkZSBiYmxheWVycy5pbmNcIiBpbiBiYmxheWVycy5jb25mIikKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiXG4jaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weVxuaW5jbHVkZSBiYmxheWVycy5pbmMiKQorCitkZWYgcmVtb3ZlX2luY2x1ZGUoKToKKyAgICBidWlsZGRpciA9IG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpCisgICAgaWYgYnVpbGRkaXIgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgaWYgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5IiBcCisgICAgICAgIGluIGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9sb2NhbC5jb25mIikpOgorICAgICAgICAgICAgbG9nLmluZm8oIlJlbW92aW5nIHRoZSBpbmNsdWRlIGZyb20gbG9jYWwuY29uZiIpCisgICAgICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKSwgXAorICAgICAgICAgICAgICAgICAgICAiI2luY2x1ZGUgYWRkZWQgYnkgb2Utc2VsZnRlc3QucHlcbmluY2x1ZGUgc2VsZnRlc3QuaW5jIikKKworICAgIGlmICIjaW5jbHVkZSBhZGRlZCBieSBvZS1zZWxmdGVzdC5weSIgXAorICAgICAgICBpbiBmdG9vbHMucmVhZF9maWxlKG9zLnBhdGguam9pbihidWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCJSZW1vdmluZyB0aGUgaW5jbHVkZSBmcm9tIGJibGF5ZXJzLmNvbmYiKQorICAgICAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUob3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZi9iYmxheWVycy5jb25mIiksIFwKKyAgICAgICAgICAgICAgICAgICAgIiNpbmNsdWRlIGFkZGVkIGJ5IG9lLXNlbGZ0ZXN0LnB5XG5pbmNsdWRlIGJibGF5ZXJzLmluYyIpCisKK2RlZiByZW1vdmVfaW5jX2ZpbGVzKCk6CisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCJCVUlMRERJUiIpLCAiY29uZi9zZWxmdGVzdC5pbmMiKSkKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoZ2V0X3Rlc3RfbGF5ZXIoKSk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IsKSBhcyBlOiAgICAjIEF0dHJpYnV0ZUVycm9yIG1heSBoYXBwZW4gaWYgQlVJTERESVIgaXMgbm90IHNldAorICAgICAgICBwYXNzCisKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoIkJVSUxERElSIiksICJjb25mL2JibGF5ZXJzLmluYyIpKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCitkZWYgZ2V0X3Rlc3RzKGV4Y2x1c2l2ZV9tb2R1bGVzPVtdLCBpbmNsdWRlX2hpZGRlbj1GYWxzZSk6CisgICAgdGVzdHNsaXN0ID0gW10KKyAgICBmb3IgeCBpbiBleGNsdXNpdmVfbW9kdWxlczoKKyAgICAgICAgdGVzdHNsaXN0LmFwcGVuZCgnb2VxYS5zZWxmdGVzdC4nICsgeCkKKyAgICBpZiBub3QgdGVzdHNsaXN0OgorICAgICAgICBmb3IgdGVzdHBhdGggaW4gb2VxYS5zZWxmdGVzdC5fX3BhdGhfXzoKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIodGVzdHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgKGYuc3RhcnRzd2l0aCgnXycpIGFuZCBub3QgaW5jbHVkZV9oaWRkZW4pIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfXycpIGFuZCBmICE9ICdiYXNlLnB5J10pCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSAnb2VxYS5zZWxmdGVzdC4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQobW9kdWxlKQorCisgICAgcmV0dXJuIHRlc3RzbGlzdAorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGdldF9hcmdzX3BhcnNlcigpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgICMgQWRkIDxsYXllcj4vbGliIHRvIHN5cy5wYXRoLCBzbyBsYXllcnMgY2FuIGFkZCBzZWxmdGVzdHMKKyAgICBsb2cuaW5mbygiUnVubmluZyBiaXRiYWtlIC1lIHRvIGdldCBCQlBBVEgiKQorICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCc6JykKKyAgICBsYXllcl9saWJkaXJzID0gW3AgZm9yIHAgaW4gKG9zLnBhdGguam9pbihsLCAnbGliJykgZm9yIGwgaW4gYmJwYXRoKSBpZiBvcy5wYXRoLmV4aXN0cyhwKV0KKyAgICBzeXMucGF0aC5leHRlbmQobGF5ZXJfbGliZGlycykKKyAgICByZWxvYWQob2VxYS5zZWxmdGVzdCkKKworICAgIGlmIGFyZ3MubGlzdF9hbGxjbGFzc2VzOgorICAgICAgICBhcmdzLmxpc3RfbW9kdWxlcyA9IFRydWUKKworICAgIGlmIGFyZ3MubGlzdF9tb2R1bGVzOgorICAgICAgICBsb2cuaW5mbygnTGlzdGluZyBhbGwgYXZhaWxhYmxlIHRlc3QgbW9kdWxlczonKQorICAgICAgICB0ZXN0c2xpc3QgPSBnZXRfdGVzdHMoaW5jbHVkZV9oaWRkZW49VHJ1ZSkKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNsaXN0OgorICAgICAgICAgICAgbW9kdWxlID0gdGVzdC5zcGxpdCgnLicpWy0xXQorICAgICAgICAgICAgaW5mbyA9ICcnCisgICAgICAgICAgICBpZiBtb2R1bGUuc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIGluZm8gPSAnIChoaWRkZW4pJworICAgICAgICAgICAgcHJpbnQgbW9kdWxlICsgaW5mbworICAgICAgICAgICAgaWYgYXJncy5saXN0X2FsbGNsYXNzZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCisgICAgICAgICAgICAgICAgICAgIG1vZGxpYiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHRlc3QpCisgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIHZhcnMobW9kbGliKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2YXJzKG1vZGxpYilbdl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodCwgdHlwZShvZVNlbGZUZXN0KSkgYW5kIGlzc3ViY2xhc3ModCwgb2VTZWxmVGVzdCkgYW5kIHQhPW9lU2VsZlRlc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiAtLSIsIHYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbWV0aG9kIGluIGRpcih0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWV0aG9kLnN0YXJ0c3dpdGgoInRlc3RfIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiIC0tICAtLSIsIG1ldGhvZAorCisgICAgICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSW1wb3J0RXJyb3IpIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHByaW50IGUKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgaWYgYXJncy5ydW5fdGVzdHMgb3IgYXJncy5ydW5fYWxsX3Rlc3RzOgorICAgICAgICBpZiBub3QgcHJlZmxpZ2h0X2NoZWNrKCk6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0cyhleGNsdXNpdmVfbW9kdWxlcz0oYXJncy5ydW5fdGVzdHMgb3IgW10pLCBpbmNsdWRlX2hpZGRlbj1GYWxzZSkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gTm9uZQorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MiwgcmVzdWx0Y2xhc3M9U3RhbXBlZFJlc3VsdCkKKyAgICAgICAgIyB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSwgb3RoZXJ3aXNlIGp1c3QgbG9hZGluZyB0aGUgdGVzdHMKKyAgICAgICAgIyB3aWxsIHRha2UgMiBtaW51dGVzIChiaXRiYWtlIC1lIGNhbGxzKQorICAgICAgICBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoID0gZ2V0X3Rlc3RfbGF5ZXIoKQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0c2xpc3Q6CisgICAgICAgICAgICBsb2cuaW5mbygiTG9hZGluZyB0ZXN0cyBmcm9tOiAlcyIgJSB0ZXN0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSh0ZXN0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRmFpbGVkIHRvIGltcG9ydCAlcyIgJSB0ZXN0KQorICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlKQorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGFkZF9pbmNsdWRlKCkKKyAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bihzdWl0ZSkKKyAgICAgICAgbG9nLmluZm8oIkZpbmlzaGVkIikKKyAgICAgICAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMQorCitjbGFzcyBTdGFtcGVkUmVzdWx0KHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KToKKyAgICAiIiIKKyAgICBDdXN0b20gVGVzdFJlc3VsdCB0aGF0IHByaW50cyB0aGUgdGltZSB3aGVuIGEgdGVzdCBzdGFydHMuICBBcyBvZS1zZWxmdGVzdAorICAgIGNhbiB0YWtlIGEgbG9uZyB0aW1lIChpZSBhIGZldyBob3VycykgdG8gcnVuLCB0aW1lc3RhbXBzIGhlbHAgdXMgdW5kZXJzdGFuZAorICAgIHdoYXQgdGVzdHMgYXJlIHRha2luZyBhIGxvbmcgdGltZSB0byBleGVjdXRlLgorICAgICIiIgorICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHRpbWUuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIiwgdGltZS5sb2NhbHRpbWUoKSkgKyAiIC0gIikKKyAgICAgICAgc3VwZXIoU3RhbXBlZFJlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIGZpbmFsbHk6CisgICAgICAgIHJlbW92ZV9pbmNsdWRlKCkKKyAgICAgICAgcmVtb3ZlX2luY19maWxlcygpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vZS1zZXR1cC1idWlsZGRpciBiL3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjU5OGJhOAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvb2Utc2V0dXAtYnVpbGRkaXIKQEAgLTAsMCArMSwxNDAgQEAKKyMhL2Jpbi9zaAorCisjIE9FIEJ1aWxkIEVudmlyb25tZW50IFNldHVwIFNjcmlwdAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworaWYgWyAteiAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBUaGUgYnVpbGQgZGlyZWN0b3J5IChCVUlMRERJUikgbXVzdCBiZSBzZXQhIgorICAgIGV4aXQgMQorZmkKKworbWtkaXIgLXAgIiRCVUlMRERJUi9jb25mIgorCitpZiBbICEgLWQgIiRCVUlMRERJUiIgXTsgdGhlbgorICAgIGVjaG8gPiYyICJFcnJvcjogVGhlIGJ1aWxkZGlyICgkQlVJTERESVIpIGRvZXMgbm90IGV4aXN0ISIKKyAgICBleGl0IDEKK2ZpCisKK2lmIFsgISAtdyAiJEJVSUxERElSIiBdOyB0aGVuCisgICAgZWNobyA+JjIgIkVycm9yOiBDYW5ub3Qgd3JpdGUgdG8gJEJVSUxERElSLCBwZXJoYXBzIHRyeSBzb3VyY2luZyB3aXRoIGEgd3JpdGFibGUgcGF0aD8gaS5lLiAuIG9lLWluaXQtYnVpbGQtZW52IH4vbXktYnVpbGQiCisgICAgZXhpdCAxCitmaQorCisjIEF0dGVtcHRpbmcgcmVtb3ZhbCBvZiBzdGlja3ksc2V0dWlkIGJpdHMgZnJvbSBCVUlMRERJUiwgQlVJTERESVIvY29uZgorY2htb2QgLXN0ICIkQlVJTERESVIiIDI+L2Rldi9udWxsIHx8IGVjaG8gIldBUk5JTkc6IHVuYWJsZSB0byBjaG1vZCAkQlVJTERESVIiCitjaG1vZCAtc3QgIiRCVUlMRERJUi9jb25mIiAyPi9kZXYvbnVsbCB8fCBlY2hvICJXQVJOSU5HOiB1bmFibGUgdG8gY2htb2QgJEJVSUxERElSL2NvbmYiCisKK2NkICIkQlVJTERESVIiCisKK2lmIFsgLWYgIiRCVUlMRERJUi9jb25mL3RlbXBsYXRlY29uZi5jZmciIF07IHRoZW4KKyAgICBURU1QTEFURUNPTkY9JChjYXQgIiRCVUlMRERJUi9jb25mL3RlbXBsYXRlY29uZi5jZmciKQorZmkKKworLiAkT0VST09ULy50ZW1wbGF0ZWNvbmYKKworaWYgWyAhIC1mICIkQlVJTERESVIvY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIiBdOyB0aGVuCisgICAgZWNobyAiJFRFTVBMQVRFQ09ORiIgPiIkQlVJTERESVIvY29uZi90ZW1wbGF0ZWNvbmYuY2ZnIgorZmkKKworIyAKKyMgJFRFTVBMQVRFQ09ORiBjYW4gcG9pbnQgdG8gYSBkaXJlY3RvcnkgZm9yIHRoZSB0ZW1wbGF0ZSBsb2NhbC5jb25mICYgYmJsYXllcnMuY29uZgorIworaWYgWyAtbiAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgorICAgIGlmIFsgISAtZCAiJFRFTVBMQVRFQ09ORiIgXTsgdGhlbgorICAgICAgICAjIEFsbG93IFRFTVBMQVRFQ09ORj1tZXRhLXh5ei9jb25mIGFzIGEgc2hvcnRjdXQKKyAgICAgICAgaWYgWyAtZCAiJE9FUk9PVC8kVEVNUExBVEVDT05GIiBdOyB0aGVuCisgICAgICAgICAgICBURU1QTEFURUNPTkY9IiRPRVJPT1QvJFRFTVBMQVRFQ09ORiIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAhIC1kICIkVEVNUExBVEVDT05GIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvID4mMiAiRXJyb3I6ICckVEVNUExBVEVDT05GJyBtdXN0IGJlIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbG9jYWwuY29uZiAmIGJibGF5ZXJzLmNvbmYiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorICAgIE9FQ09SRUxBWUVSQ09ORj0iJFRFTVBMQVRFQ09ORi9iYmxheWVycy5jb25mLnNhbXBsZSIKKyAgICBPRUNPUkVMT0NBTENPTkY9IiRURU1QTEFURUNPTkYvbG9jYWwuY29uZi5zYW1wbGUiCisgICAgT0VDT1JFTk9URVNDT05GPSIkVEVNUExBVEVDT05GL2NvbmYtbm90ZXMudHh0IgorZmkKKwordW5zZXQgU0hPV1lQRE9DCitpZiBbIC16ICIkT0VDT1JFTE9DQUxDT05GIiBdOyB0aGVuCisgICAgT0VDT1JFTE9DQUxDT05GPSIkT0VST09UL21ldGEvY29uZi9sb2NhbC5jb25mLnNhbXBsZSIKK2ZpCitpZiBbICEgLXIgIiRCVUlMRERJUi9jb25mL2xvY2FsLmNvbmYiIF07IHRoZW4KK2NhdCA8PEVPTQorWW91IGhhZCBubyBjb25mL2xvY2FsLmNvbmYgZmlsZS4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaGFzIHRoZXJlZm9yZSBiZWVuCitjcmVhdGVkIGZvciB5b3Ugd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzLiBZb3UgbWF5IHdpc2ggdG8gZWRpdCBpdCB0byB1c2UgYSAKK2RpZmZlcmVudCBNQUNISU5FICh0YXJnZXQgaGFyZHdhcmUpIG9yIGVuYWJsZSBwYXJhbGxlbCBidWlsZCBvcHRpb25zIHRvIHRha2UgCithZHZhbnRhZ2Ugb2YgbXVsdGlwbGUgY29yZXMgZm9yIGV4YW1wbGUuIFNlZSB0aGUgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhcyAKK2NvbW1vbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvbW1lbnRlZC4KKworRU9NCisgICAgY3AgLWYgJE9FQ09SRUxPQ0FMQ09ORiAiJEJVSUxERElSL2NvbmYvbG9jYWwuY29uZiIKKyAgICBTSE9XWVBET0M9eWVzCitmaQorCitpZiBbIC16ICIkT0VDT1JFTEFZRVJDT05GIiBdOyB0aGVuCisgICAgT0VDT1JFTEFZRVJDT05GPSIkT0VST09UL21ldGEvY29uZi9iYmxheWVycy5jb25mLnNhbXBsZSIKK2ZpCitpZiBbICEgLXIgIiRCVUlMRERJUi9jb25mL2JibGF5ZXJzLmNvbmYiIF07IHRoZW4KKyAgICBjYXQgPDxFT00KK1lvdSBoYWQgbm8gY29uZi9iYmxheWVycy5jb25mIGZpbGUuIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaGFzIGJlZW4gY3JlYXRlZCBmb3IKK3lvdSB3aXRoIHNvbWUgZGVmYXVsdCB2YWx1ZXMuIFRvIGFkZCBhZGRpdGlvbmFsIG1ldGFkYXRhIGxheWVycyBpbnRvIHlvdXIKK2NvbmZpZ3VyYXRpb24gcGxlYXNlIGFkZCBlbnRyaWVzIHRvIHRoaXMgZmlsZS4KKworRU9NCisKKyAgICAjIFB1dCB0aGUgYWJvc29sdXRlIHBhdGggdG8gdGhlIGxheWVycyBpbiBiYmxheWVycy5jb25mIHNvIHdlIGNhbiBydW4KKyAgICAjIGJpdGJha2Ugd2l0aG91dCB0aGUgaW5pdCBzY3JpcHQgYWZ0ZXIgdGhlIGZpcnN0IHJ1bgorICAgICMgIyNDT1JFQkFTRSMjIGlzIGRlcHJlY2F0ZWQgYXMgaXQncyBtZWFuaW5nIHdhcyBpbmNvbnNpc3RlbnQsIGJ1dCBjb250aW51ZQorICAgICMgdG8gcmVwbGFjZSBpdCBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICBzZWQgLWUgInN8IyNPRVJPT1QjI3wkT0VST09UfGciIFwKKyAgICAgICAgLWUgInN8IyNDT1JFQkFTRSMjfCRPRVJPT1R8ZyIgXAorICAgICAgICAkT0VDT1JFTEFZRVJDT05GID4gIiRCVUlMRERJUi9jb25mL2JibGF5ZXJzLmNvbmYiCisgICAgU0hPV1lQRE9DPXllcworZmkKKworIyBQcmV2ZW50IGRpc3R1cmJpbmcgYSBuZXcgR0lUIGNsb25lIGluIHNhbWUgY29uc29sZQordW5zZXQgT0VDT1JFTE9DQUxDT05GCit1bnNldCBPRUNPUkVMQVlFUkNPTkYKKworIyBFbmRpbmcgdGhlIGZpcnN0LXRpbWUgcnVuIG1lc3NhZ2UuIFNob3cgdGhlIFlQIERvY3VtZW50YXRpb24gYmFubmVyLgoraWYgWyAhIC16ICIkU0hPV1lQRE9DIiBdOyB0aGVuCisgICAgY2F0IDw8RU9NCitUaGUgWW9jdG8gUHJvamVjdCBoYXMgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gYWJvdXQgT0UgaW5jbHVkaW5nIGEgcmVmZXJlbmNlCittYW51YWwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0OgorICAgIGh0dHA6Ly95b2N0b3Byb2plY3Qub3JnL2RvY3VtZW50YXRpb24KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgT3BlbkVtYmVkZGVkIHNlZSB0aGVpciB3ZWJzaXRlOgorICAgIGh0dHA6Ly93d3cub3BlbmVtYmVkZGVkLm9yZy8KKworRU9NCisjICAgIHVuc2V0IFNIT1dZUERPQworZmkKKworY2F0IDw8RU9NCisKKyMjIyBTaGVsbCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGJ1aWxkcy4gIyMjCisKK1lvdSBjYW4gbm93IHJ1biAnYml0YmFrZSA8dGFyZ2V0PicKKworRU9NCitpZiBbIC16ICIkT0VDT1JFTk9URVNDT05GIiBdOyB0aGVuCisgICAgT0VDT1JFTk9URVNDT05GPSIkT0VST09UL21ldGEvY29uZi9jb25mLW5vdGVzLnR4dCIKK2ZpCitbICEgLXIgIiRPRUNPUkVOT1RFU0NPTkYiIF0gfHwgY2F0ICRPRUNPUkVOT1RFU0NPTkYKK3Vuc2V0IE9FQ09SRU5PVEVTQ09ORgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9vZS1zZXR1cC1ycG1yZXBvIGIvc2NyaXB0cy9vZS1zZXR1cC1ycG1yZXBvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxN2I5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL29lLXNldHVwLXJwbXJlcG8KQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL2Jhc2gKKyMKKyMgVGhpcyB1dGlsaXR5IHNldHVwIHRoZSBuZWNlc3NhcnkgbWV0YWRhdGEgZm9yIGFuIHJwbSByZXBvCisjCisjIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisKKyMgRG9uJ3QgdXNlIFRNUERJUiBmcm9tIHRoZSBleHRlcm5hbCBlbnZpcm9ubWVudCwgaXQgbWF5IGJlIGEgZGlzdHJvCisjIHZhcmlhYmxlIHBvaW50aW5nIHRvIC90bXAgKGUuZy4gd2l0aGluIFggb24gT3BlblNVU0UpCisjIEluc3RlYWQsIHVzZSBPRV9UTVBESVIgZm9yIHBhc3NpbmcgdGhpcyBpbiBleHRlcm5hbGx5LgorVE1QRElSPSIkT0VfVE1QRElSIgorCitmdW5jdGlvbiB1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJDAgPHJwbS1kaXI+IgorCWVjaG8gIiAgPHJwbS1kaXI+OiBkZWZhdWx0IGlzICRUTVBESVIvZGVwbG95L3JwbSIKK30KKworaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK3NldHVwX3RtcGRpcigpIHsKKyAgICBpZiBbIC16ICIkVE1QRElSIiBdOyB0aGVuCisgICAgICAgICMgVHJ5IHRvIGdldCBUTVBESVIgZnJvbSBiaXRiYWtlCisgICAgICAgIHR5cGUgLVAgYml0YmFrZSAmPi9kZXYvbnVsbCB8fCB7CisgICAgICAgICAgICBlY2hvICJJbiBvcmRlciBmb3IgdGhpcyBzY3JpcHQgdG8gZHluYW1pY2FsbHkgaW5mZXIgcGF0aHMiOworICAgICAgICAgICAgZWNobyAidG8ga2VybmVscyBvciBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBuZWVkIjsKKyAgICAgICAgICAgIGVjaG8gImJpdGJha2UgaW4geW91ciBQQVRIIG9yIHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiI7CisgICAgICAgICAgICBlY2hvICJiZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdCIgPiYyOworICAgICAgICAgICAgZXhpdCAxOyB9CisKKyAgICAgICAgIyBXZSBoYXZlIGJpdGJha2UgaW4gUEFUSCwgZ2V0IFRNUERJUiBmcm9tIGJpdGJha2UKKyAgICAgICAgVE1QRElSPWBiaXRiYWtlIC1lIHwgZ3JlcCBeVE1QRElSPVwiIHwgY3V0IC1kICc9JyAtZjIgfCBjdXQgLWQgJyInIC1mMmAKKyAgICAgICAgaWYgWyAteiAiJFRNUERJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IHRoaXMgc2NyaXB0IG5lZWRzIHRvIGJlIHJ1biBmcm9tIHlvdXIgYnVpbGQgZGlyZWN0b3J5LCIKKyAgICAgICAgICAgIGVjaG8gIm9yIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IFRNUERJUiBpbiB5b3VyIGVudmlyb25tZW50IgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKK30KKworc2V0dXBfc3lzcm9vdCgpIHsKKwkjIFRvb2xjaGFpbiBpbnN0YWxscyBzZXQgdXAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBpbiB0aGVpcgorCSMgZW52aXJvbm1lbnQgc2NyaXB0LiBJZiB0aGF0IHZhcmlhYmxlIGlzbid0IHNldCwgd2UncmUKKwkjIGVpdGhlciBpbiBhbiBpbi10cmVlIHBva3kgc2NlbmFyaW8gb3IgdGhlIGVudmlyb25tZW50CisJIyBzY3JpcHQgd2Fzbid0IHNvdXJjZSdkLgorCWlmIFsgLXogIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QiIF07IHRoZW4KKwkJc2V0dXBfdG1wZGlyCisJCUJVSUxEX0FSQ0g9YHVuYW1lIC1tYAorCQlCVUlMRF9PUz1gdW5hbWUgfCB0ciAnW0EtWl0nICdbYS16XSdgCisJCUJVSUxEX1NZUz0iJEJVSUxEX0FSQ0gtJEJVSUxEX09TIgorCisJCU9FQ09SRV9OQVRJVkVfU1lTUk9PVD0kVE1QRElSL3N5c3Jvb3RzLyRCVUlMRF9TWVMKKwlmaSAKK30KKworc2V0dXBfdG1wZGlyCitzZXR1cF9zeXNyb290CisKKworaWYgWyAtbiAiJDEiIF07IHRoZW4KKwlSUE1fRElSPSIkMSIKK2Vsc2UKKwlSUE1fRElSPSIkVE1QRElSL2RlcGxveS9ycG0iCitmaQorCitpZiBbICEgLWQgIiRSUE1fRElSIiBdOyB0aGVuCisgICAJZWNobyAiRXJyb3I6IHJwbSBkaXIgJFJQTV9ESVIgZG9lc24ndCBleGlzdCIKKwlleGl0IDEKK2ZpCisKK0NSRUFURVJFUE89JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluL2NyZWF0ZXJlcG8KK2lmIFsgISAtZSAiJENSRUFURVJFUE8iIF07IHRoZW4KKyAgIAllY2hvICJFcnJvcjogY2FuJ3QgZmluZCBjcmVhdGVyZXBvIGJpbmFyeSIKKwllY2hvICJwbGVhc2UgcnVuIGJpdGJha2UgY3JlYXRlcmVwby1uYXRpdmUgZmlyc3QiCisJZXhpdCAxCitmaQorCitleHBvcnQgUEFUSD0ke1BBVEh9OiR7T0VDT1JFX05BVElWRV9TWVNST09UfS91c3IvYmluCisKKyRDUkVBVEVSRVBPICIkUlBNX0RJUiIKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcyBiL3NjcmlwdHMvb2UtdHJpbS1zY2hlbWFzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5ZmIzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL29lLXRyaW0tc2NoZW1hcwpAQCAtMCwwICsxLDQ5IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgeG1sLmV0cmVlLmNFbGVtZW50VHJlZSBhcyBldHJlZQorZXhjZXB0OgorICAgIGltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgZXRyZWUKKworZGVmIGNoaWxkIChlbGVtLCBuYW1lKToKKyAgICBmb3IgZSBpbiBlbGVtLmdldGNoaWxkcmVuKCk6CisgICAgICAgIGlmIGUudGFnID09IG5hbWU6CisgICAgICAgICAgICByZXR1cm4gZQorICAgIHJldHVybiBOb25lCisKK2RlZiBjaGlsZHJlbiAoZWxlbSwgbmFtZT1Ob25lKToKKyAgICBsID0gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgaWYgbmFtZToKKyAgICAgICAgbCA9IFtlIGZvciBlIGluIGwgaWYgZS50YWcgPT0gbmFtZV0KKyAgICByZXR1cm4gbAorCit4bWwgPSBldHJlZS5wYXJzZShzeXMuYXJndlsxXSkKKworZm9yIHNjaGVtYSBpbiBjaGlsZCh4bWwuZ2V0cm9vdCgpLCAic2NoZW1hbGlzdCIpLmdldGNoaWxkcmVuKCk6CisgICAgZSA9IGNoaWxkKHNjaGVtYSwgInNob3J0IikKKyAgICBpZiBlIGlzIG5vdCBOb25lOgorICAgICAgICBzY2hlbWEucmVtb3ZlKGUpCisKKyAgICBlID0gY2hpbGQoc2NoZW1hLCAibG9uZyIpCisgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgc2NoZW1hLnJlbW92ZShlKQorCisgICAgZm9yIGxvY2FsZSBpbiBjaGlsZHJlbihzY2hlbWEsICJsb2NhbGUiKToKKyAgICAgICAgIyBPbmUgbG9jYWxlIG11c3QgZXhpc3Qgc28gbGVhdmUgQyBsb2NhbGUuLi4KKyAgICAgICAgYSA9IGxvY2FsZS5hdHRyaWIuZ2V0KCJuYW1lIikKKyAgICAgICAgaWYgYSA9PSAnQyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlID0gY2hpbGQobG9jYWxlLCAiZGVmYXVsdCIpCisgICAgICAgIGlmIGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNjaGVtYS5yZW1vdmUobG9jYWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZSA9IGNoaWxkKGxvY2FsZSwgInNob3J0IikKKyAgICAgICAgICAgIGlmIGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9jYWxlLnJlbW92ZShlKQorICAgICAgICAgICAgZSA9IGNoaWxkKGxvY2FsZSwgImxvbmciKQorICAgICAgICAgICAgaWYgZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsb2NhbGUucmVtb3ZlKGUpCisKK3htbC53cml0ZShzeXMuc3Rkb3V0LCAiVVRGLTgiKQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weSBiL3NjcmlwdHMvb2VweWRldnNoZWxsLWludGVybmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3YjJlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL29lcHlkZXZzaGVsbC1pbnRlcm5hbC5weQpAQCAtMCwwICsxLDkyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGZjbnRsCitpbXBvcnQgdGVybWlvcworaW1wb3J0IHJlYWRsaW5lCitpbXBvcnQgc2lnbmFsCisKK2RlZiBub25ibG9ja2luZ2ZkKGZkKToKKyAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpIHwgb3MuT19OT05CTE9DSykKKworZGVmIGVjaG9ub2NicmVhayhmZCk6CisgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgb2xkWzNdID0gb2xkWzNdIHwgdGVybWlvcy5FQ0hPIHwgdGVybWlvcy5JQ0FOT04KKyAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGVybWlvcy5UQ1NBRFJBSU4sIG9sZCkKKworZGVmIGNicmVha25vZWNobyhmZCk6CisgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgb2xkWzNdID0gb2xkWzNdICZ+IHRlcm1pb3MuRUNITyAmfiB0ZXJtaW9zLklDQU5PTgorICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FEUkFJTiwgb2xkKQorCitpZiBsZW4oc3lzLmFyZ3YpICE9IDM6CisgICAgcHJpbnQoIkluY29ycmVjdCBwYXJhbWV0ZXJzIikKKyAgICBzeXMuZXhpdCgxKQorCitwdHkgPSBvcGVuKHN5cy5hcmd2WzFdLCAidytiIiwgMCkKK3BhcmVudCA9IGludChzeXMuYXJndlsyXSkKKworIyBEb24ndCBidWZmZXIgb3V0cHV0IGJ5IGxpbmUgZW5kaW5ncworc3lzLnN0ZG91dCA9IG9zLmZkb3BlbihzeXMuc3Rkb3V0LmZpbGVubygpLCAndycsIDApCitzeXMuc3RkaW4gPSBvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAncicsIDApCitub25ibG9ja2luZ2ZkKHB0eSkKK25vbmJsb2NraW5nZmQoc3lzLnN0ZGluKQorCisKK2hpc3RmaWxlID0gb3MucGF0aC5leHBhbmR1c2VyKCJ+Ly5vZWRldnB5c2hlbGwtaGlzdG9yeSIpCityZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCit0cnk6CisgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCitleGNlcHQgSU9FcnJvcjoKKyAgICBwYXNzIAorCit0cnk6CisKKyAgICBpID0gIiIKKyAgICBvID0gIiIKKyAgICAjIE5lZWQgY2JyZWFrL25vZWNobyB3aGlsc3QgaW4gc2VsZWN0IHNvIHdlIHRyaWdnZXIgb24gYW55IGtleXByZXNzCisgICAgY2JyZWFrbm9lY2hvKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAjIFNlbmQgb3VyIFBJRCB0byB0aGUgb3RoZXIgZW5kIHNvIHRoZXkgY2FuIGtpbGwgdXMuCisgICAgcHR5LndyaXRlKHN0cihvcy5nZXRwaWQoKSkgKyAiXG4iKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlcnMgPSBbXQorICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZChzeXMuc3Rkb3V0KQorICAgICAgICAgICAgKHJlYWR5LCBfLCBfKSA9IHNlbGVjdC5zZWxlY3QoW3B0eSwgc3lzLnN0ZGluXSwgd3JpdGVycyAsIFtdLCAwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHB0eSBpbiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBwdHkucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICAgICAgIyBXcml0ZSBhIHBhZ2UgYXQgYSB0aW1lIHRvIGF2b2lkIG92ZXJmbG93aW5nIG91dHB1dCAKKyAgICAgICAgICAgICAgICAgICAgIyBkLmtleXMoKSBpcyBhIGdvb2Qgd2F5IHRvIGRvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShpWzo0MDk2XSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGlbNDA5NjpdCisgICAgICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGluIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICBlY2hvbm9jYnJlYWsoc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBvID0gcmF3X2lucHV0KCkKKyAgICAgICAgICAgICAgICAgICAgY2JyZWFrbm9lY2hvKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICAgICAgcHR5LndyaXRlKG8gKyAiXG4iKQorICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMTE6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSA1OgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgb3Mua2lsbChwYXJlbnQsIHNpZ25hbC5TSUdJTlQpCisKK2V4Y2VwdCBTeXN0ZW1FeGl0OgorICAgIHBhc3MKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiBvZXB5ZGVoc2hlbGwtaW50ZXJuYWw6ICIgKyBzdHIoZSkpCisgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgdGltZS5zbGVlcCg1KQorZmluYWxseToKKyAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCmRpZmYgLS1naXQgYS9zY3JpcHRzL29wa2ctcXVlcnktaGVscGVyLnB5IGIvc2NyaXB0cy9vcGtnLXF1ZXJ5LWhlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmIxYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9vcGtnLXF1ZXJ5LWhlbHBlci5weQpAQCAtMCwwICsxLDg1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBPcGVuRW1iZWRkZWQgb3BrZyBxdWVyeSBoZWxwZXIgdXRpbGl0eQorIworIyBXcml0dGVuIGJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjCisKKworaW1wb3J0IHN5cworaW1wb3J0IGZpbGVpbnB1dAoraW1wb3J0IHJlCisKK2FyY2htb2RlID0gRmFsc2UKK2ZpbGVtb2RlID0gRmFsc2UKK3Zlcm1vZGUgPSBGYWxzZQorCithcmdzID0gW10KK2ZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdOgorICAgIGlmIGFyZyA9PSAnLWEnOgorICAgICAgICBhcmNobW9kZSA9IFRydWUKKyAgICBlbGlmIGFyZyA9PSAnLWYnOgorICAgICAgICBmaWxlbW9kZSA9IFRydWUKKyAgICBlbGlmIGFyZyA9PSAnLXYnOgorICAgICAgICB2ZXJtb2RlID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKworIyBSZWdleCBmb3IgcmVtb3ZpbmcgdmVyc2lvbiBzcGVjcyBhZnRlciBkZXBlbmRlbmN5IGl0ZW1zCit2ZXJyZWdleCA9IHJlLmNvbXBpbGUoJyBcKFs9PD5dKiBbXiApXSpcKScpCisKK3BrZyA9ICIiCit2ZXIgPSAiIgorZm9yIGxpbmUgaW4gZmlsZWlucHV0LmlucHV0KGFyZ3MpOgorICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgaWYgJzogJyBpbiBsaW5lOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBhY2thZ2U6Iik6CisgICAgICAgICAgICBwa2cgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICB2ZXIgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgYXJjaG1vZGU6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJBcmNoaXRlY3R1cmU6Iik6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyIgJSAocGtnLGFyY2gpKQorICAgICAgICAgICAgZWxpZiBmaWxlbW9kZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlZlcnNpb246Iik6CisgICAgICAgICAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoIjogIilbMV0KKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiQXJjaGl0ZWN0dXJlOiIpOgorICAgICAgICAgICAgICAgICAgICBhcmNoID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgICAgICBwcmludCgiJXMgJXNfJXNfJXMuaXBrICVzIiAlIChwa2cscGtnLHZlcixhcmNoLGFyY2gpKQorICAgICAgICAgICAgZWxpZiB2ZXJtb2RlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiVmVyc2lvbjoiKToKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gbGluZS5zcGxpdCgiOiAiKVsxXQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJBcmNoaXRlY3R1cmU6Iik6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHByaW50KCIlcyAlcyAlcyIgJSAocGtnLGFyY2gsdmVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJEZXBlbmRzOiIpOgorICAgICAgICAgICAgICAgICAgICBkZXB2YWwgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIGRlcHMgPSBkZXB2YWwuc3BsaXQoIiwgIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gdmVycmVnZXguc3ViKCcnLCBkZXApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiJXN8JXMiICUgKHBrZyxkZXApKQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJSZWNvbW1lbmRzOiIpOgorICAgICAgICAgICAgICAgICAgICByZWN2YWwgPSBsaW5lLnNwbGl0KCI6ICIpWzFdCisgICAgICAgICAgICAgICAgICAgIHJlY3MgPSByZWN2YWwuc3BsaXQoIiwgIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIHJlYyBpbiByZWNzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjID0gdmVycmVnZXguc3ViKCcnLCByZWMpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiJXN8JXMgW1JFQ10iICUgKHBrZywgcmVjKSkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3Bvc3RpbnN0X2ludGVyY2VwdCBiL3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy9wb3N0aW5zdF9pbnRlcmNlcHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjE4ZTgwNgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy9wb3N0aW5zdF9pbnRlcmNlcHQKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwb3N0aW5zdGFsbCBzY3JpcHRsZXRzIGF0IGRvX3Jvb3RmcyB0aW1lLiBJdAorIyBhY3R1YWxseSBhZGRzLCBhdCB0aGUgZW5kLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBmb3Igd2hpY2ggdGhlIGludGVyY2VwdCBzY3JpcHQKKyMgaXMgdmFsaWQuIEFsc28sIGlmIG9uZSB3YW50cyB0byBwYXNzIGFueSB2YXJpYWJsZXMgdG8gdGhlIGludGVyY2VwdCBzY3JpcHQgZnJvbQorIyB0aGUgcG9zdGluc3RhbGwgaXRzZWxmLCB0aGV5IHdpbGwgYmUgYWRkZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNoZWJhbmcgbGluZS4KKyMKKyMgVXNhZ2U6IHBvc3RpbnN0X2ludGVyY2VwdCA8aW50ZXJjZXB0X3NjcmlwdF9uYW1lPiA8cGFja2FnZV9uYW1lPiA8bWxwcmVmaXg9Li4uPiA8dmFyMT0uLi4+IC4uLiA8dmFyTj0uLi4+CisjICAqIGludGVyY2VwdF9zY3JpcHRfbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBpbnRlcmNlcHQgc2NyaXB0IHdlIHdhbnQgdG8gY2hhbmdlOworIyAgKiBwYWNrYWdlX25hbWUgLSBhZGQgdGhlIHBhY2thZ2VfbmFtZSB0byBsaXN0IG9mIHBhY2thZ2VzIHRoZSBpbnRlcmNlcHQgc2NyaXB0CisjICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgZm9yOworIyAgKiBtbHByZWZpeD0uLi4gLSB0aGlzIG9uZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gaGF2ZSBzZXBhcmF0ZSBob29rcyBmb3IgbXVsdGlsaWIuCisjICAqIHZhcjE9Li4uIC0gdmFyMSB3aWxsIGhhdmUgdGhlIHZhbHVlIHdlIHByb3ZpZGUgaW4gdGhlIGludGVyY2VwdCBzY3JpcHQuIFRoaXMKKyMgICAgICAgICAgICAgICBpcyB1c2VmdWwgd2hlbiB3ZSB3YW50IHRvIHBhc3Mgb24gdmFyaWFibGVzIGxpa2UgJHtsaWJkaXJ9IHRvCisjICAgICAgICAgICAgICAgdGhlIGludGVyY2VwdCBzY3JpcHQ7CisjCitbICQjIC1sdCAzIF0gJiYgZXhpdCAxCisKK2ludGVyY2VwdF9zY3JpcHQ9JElOVEVSQ0VQVF9ESVIvJDEgJiYgc2hpZnQKK3BhY2thZ2VfbmFtZT0kMSAmJiBzaGlmdAorbWxwcmVmaXg9JChlY2hvICQxIHxzZWQgLW5lICJzL15tbHByZWZpeD1cKC4qXCktL1wxL3AiKSAmJiBzaGlmdAorCisjIGlmIHRoZSBob29rIHdlIHdhbnQgdG8gaW5zdGFsbCBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvCitbIC1mICIkaW50ZXJjZXB0X3NjcmlwdCIgXSB8fCBleGl0IDEKKworIyBpZiB0aGUgcG9zdGluc3RhbGwgd2FudGluZyB0byBpbnN0YWxsIHRoZSBob29rIGJlbG9uZ3MgdG8gYSBtdWx0aWxpYiBwYWNrYWdlLAorIyB0aGVuIHdlJ2QgYmV0dGVyIGhhdmUgYSBzZXBhcmF0ZSBob29rIGZvciB0aGlzIGJlY2F1c2UgdGhlIGRlZmF1bHQgJHtsaWJkaXJ9IGFuZAorIyAke2Jhc2VfbGliZGlyfSB3aWxsIHBvaW50IHRvIHRoZSB3cm9uZyBsb2NhdGlvbnMKK2lmIFsgLW4gIiRtbHByZWZpeCIgXTsgdGhlbgorCW1sX2ludGVyY2VwdF9zY3JpcHQ9JGludGVyY2VwdF9zY3JpcHQtJG1scHJlZml4CisJIyBpZiB0aGUgbXVsdGlsaWIgaG9vayBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0IGZyb20gdGhlIGRlZmF1bHQgb25lCisJaWYgWyAhIC1mICIkbWxfaW50ZXJjZXB0X3NjcmlwdCIgXTsgdGhlbgorCQljcCAkaW50ZXJjZXB0X3NjcmlwdCAkbWxfaW50ZXJjZXB0X3NjcmlwdAorCisJCSMgY2xlYXIgdGhlICMjUEtHUzogbGluZSBhbmQgdGhlIGFscmVhZHkgc2V0IHZhcmlhYmxlcworCQlbIC14ICIkbWxfaW50ZXJjZXB0X3NjcmlwdCIgXSAmJiBzZWQgLWkgLWUgIjIsJCgoJCMrMSkpIHsvLiovZH0iIC1lICIvXiMjUEtHUzogLiovZCIgJG1sX2ludGVyY2VwdF9zY3JpcHQKKwlmaQorCisJaW50ZXJjZXB0X3NjcmlwdD0kbWxfaW50ZXJjZXB0X3NjcmlwdAorZmkKKworY2htb2QgK3ggIiRpbnRlcmNlcHRfc2NyaXB0IgorCitwa2dzX2xpbmU9JChncmVwICIjI1BLR1M6IiAkaW50ZXJjZXB0X3NjcmlwdCkKK2lmIFsgLW4gIiRwa2dzX2xpbmUiIF07IHRoZW4KKwkjIGxpbmUgZXhpc3RzLCBhZGQgdGhpcyBwYWNrYWdlIHRvIHRoZSBsaXN0IG9ubHkgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZQorCWlmIFsgLXogIiQoZWNobyAiJHBrZ3NfbGluZSIgfCBncmVwICIgJHBhY2thZ2VfbmFtZSAiKSIgXTsgdGhlbgorCQlzZWQgLWkgLWUgInMvIyNQS0dTOi4qL1wwJHtwYWNrYWdlX25hbWV9IC8iICRpbnRlcmNlcHRfc2NyaXB0CisJZmkKK2Vsc2UKKwlmb3IgdmFyIGluICIkQCI7IGRvCisJCXNlZCAtaSAtZSAiXCVeI1whL2Jpbi8uKnNoJWEgJHZhciIgJGludGVyY2VwdF9zY3JpcHQKKwlkb25lCisJZWNobyAiIyNQS0dTOiAke3BhY2thZ2VfbmFtZX0gIiA+PiAkaW50ZXJjZXB0X3NjcmlwdAorZmkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlIGIvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9mb250X2NhY2hlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzYwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ZvbnRfY2FjaGUKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworUFNFVURPX1VOTE9BRD0xIHFlbXV3cmFwcGVyIC1MICREIC1FIExEX0xJQlJBUllfUEFUSD0kRC8ke2xpYmRpcn06JEQvJHtiYXNlX2xpYmRpcn1cCisJCQkJCSREJHtiaW5kaXJ9L2ZjLWNhY2hlIC0tc3lzcm9vdD0kRAorY2hvd24gLVIgcm9vdDpyb290ICREJHtmb250Y29uZmlnY2FjaGVkaXJ9CmRpZmYgLS1naXQgYS9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ljb25fY2FjaGUgYi9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX2ljb25fY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxN2E2YQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfaWNvbl9jYWNoZQpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKworc2V0IC1lCisjIHVwZGF0ZSBuYXRpdmUgcGl4YnVmIGxvYWRlcnMKK2dkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCitmb3IgaWNvbmRpciBpbiAkRC91c3Ivc2hhcmUvaWNvbnMvKi8gOyBkbworICAgIGlmIFsgLWQgJGljb25kaXIgXSA7IHRoZW4KKyAgICAgICAgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC1mcXQgICRpY29uZGlyCisgICAgZmkKK2RvbmUKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUgYi9zY3JpcHRzL3Bvc3RpbnN0LWludGVyY2VwdHMvdXBkYXRlX3BpeGJ1Zl9jYWNoZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJmNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3VwZGF0ZV9waXhidWZfY2FjaGUKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBHREtfUElYQlVGX01PRFVMRURJUj0kRCR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycworZXhwb3J0IEdES19QSVhCVUZfRkFUQUxfTE9BREVSPTEKKworUFNFVURPX1VOTE9BRD0xIHFlbXV3cmFwcGVyIC1MICREIC1FIExEX0xJQlJBUllfUEFUSD0kRC8ke2xpYmRpcn06JEQvJHtiYXNlX2xpYmRpcn1cCisgICAgJEQke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKyAgICA+JEdES19QSVhCVUZfTU9EVUxFRElSLy4uL2xvYWRlcnMuY2FjaGUgJiYgXAorICAgIHNlZCAtaSAtZSAiczokRDo6ZyIgJEdES19QSVhCVUZfTU9EVUxFRElSLy4uL2xvYWRlcnMuY2FjaGUKKworCmRpZmYgLS1naXQgYS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0FVVEhPUlMgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyYjdlOQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvQVVUSE9SUwpAQCAtMCwwICsxLDExIEBACitNaWNoYWVsIE1lZWtzIDxtaWNoYWVsLm1lZWtzQG5vdmVsbC5jb20+CitBbmRlcnMgTm9yZ2FhcmQgPGFuZGVycy5ub3JnYWFyZEBnbWFpbC5jb20+CitTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEB1YnVudHUuY29tPgorSGVubmluZyBOaXNzIDxoZW5uaW5nbmlzc0BnbWFpbC5jb20+CitSaWNjYXJkbyBNYWdsaW9jY2hldHRpIDxyaWNjYXJkby5tYWdsaW9jY2hldHRpQGdtYWlsLmNvbT4KKworQ29udHJpYnV0b3JzOgorCUJyaWFuIEV3aW5zCisKK0Jhc2VkIG9uIHdvcmsgYnk6CisJWmlnYSBNYWhrb3ZlYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9DT1BZSU5HIGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkODdhY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBIAorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3NjcmlwdHMvcHlib290Y2hhcnRndWkvTUFJTlRBSU5FUlMgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL01BSU5UQUlORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWUxMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL01BSU5UQUlORVJTCkBAIC0wLDAgKzEsMyBAQAorUmljY2FyZG8gTWFnbGlvY2NoZXR0aSA8cmljY2FyZG8ubWFnbGlvY2NoZXR0aUBnbWFpbC5jb20+CitNaWNoYWVsIE1lZWtzIDxtaWNoYWVsLm1lZWtzQG5vdmVsbC5jb20+CitIYXJhbGQgSG95ZXIgPGhhcmFsZEByZWRoYXQuY29tPgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9ORVdTIGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNWIyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL05FV1MKQEAgLTAsMCArMSwyMDQgQEAKK2Jvb3RjaGFydDIgMC4xNC41OgorCSsgcHlib290Y2hhcnRndWkgKFJpY2NhcmRvKQorCQkrIEZpeCB0ZXN0cyB3aXRoIHB5dGhvbjMKKwkJKyBGaXggcGFyc2luZyBvZiBmaWxlcyB3aXRoIG5vbi1hc2NpaSBieXRlcworCQkrIFJvYnVzdG5lc3MgZml4ZXMgdG8gdGFza3N0YXRzIGFuZCBtZW1pbmZvIHBhcnNpbmcKKwkJKyBNb3JlIHB5dGhvbjMgZml4ZXMKKworYm9vdGNoYXJ0MiAwLjE0LjQ6CisJKyBib290Y2hhcnRkCisJCSsgQWRkIHJlbGV2YW50IEVYSVRfUFJPQyBmb3IgR05PTUUzLCBYRkNFNCwgb3BlbmJveAorCQkgIChKdXN0aW4gTGVjaGVyLCBCZW4gRWlsbHMpCisJKyBweWJvb3RjaGFydGd1aSAoUmljY2FyZG8pCisJCSsgRml4IHNvbWUgaXNzdWVzIGluIC0tY3JvcC1hZnRlciBhbmQgLS1hbm5vdGF0ZQorCQkrIEZpeCBweWJvb3RjaGFydGd1aSBwcm9jZXNzX3RyZWUgdGVzdHMKKwkJKyBNb3JlIHB5dGhvbjMgZml4ZXMKKworYm9vdGNoYXJ0MiAwLjE0LjI6CisJKyBweWJvb3RjaGFydGd1aQorCQkrIEZpeCBzb21lIGNyYXNoZXMgaW4gcGFyc2luZy5weSAoSmFrdWIgQ3phcGxpY2tpLCBSaWNjYXJkbykKKwkJKyBzcGVlZHVwIGEgYml0IG1lbWluZm8gcGFyc2luZyAoUmljY2FyZG8pCisJCSsgRml4IGluZGVudGF0aW9uIGZvciBweXRob24zLjIgKFJpY2NhcmRvKQorCitib290Y2hhcnQyIDAuMTQuMToKKwkrIGJvb3RjaGFydGQKKwkJKyBFeHBlY3QgZG1lc2cgb25seSBpZiBzdGFydGVkIGFzIGluaXQgKEhlbnJ5IFllaSkKKwkJKyBsb29rIGZvciBib290Y2hhcnRfaW5pdCBpbiB0aGUgZW52aXJvbm1lbnQgKEhlbnJ5IEdlYmhhcmR0KQorCSsgcHlib290Y2hhcnRndWkKKwkJKyBGaXh1cCBzb21lIHRlc3RzIChSaWNjYXJkbykKKwkJKyBTdXBwb3J0IGhwIHNtYXJ0IGFycmF5cyBibG9jayBkZXZpY2VzIChBbmRlcnMgTm9yZ2FhcmQsCisJCSAgQnJpYW4gTXVycmF5KQorCQkrIEZpeGVzIGZvciAtdCwgLW8gYW5kIC1mIG9wdGlvbnMgKE1sYWRlbiBLdW50bmVyLCBIYXJhbGQsIFJpY2NhcmRvKQorCitib290Y2hhcnQyIDAuMTQuMDoKKwkrIGJvb3RjaGFydGQKKwkJKyBBZGQgYWJpbGl0eSB0byBkZWZpbmUgY3VzdG9tIGNvbW1hbmRzCisJCSAgKEx1Y2lhbiBNdXJlc2FuLCBQZXRlciBIamFsbWFyc3NvbikKKwkrIGNvbGxlY3RvcgorCQkrIGZpeCB0bXBmcyBtb3VudCBsZWFrYWdlIChQZXRlciBIamFsbWFyc3NvbikKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgcmVuZGVyIGN1bXVsYXRpdmUgSS9PIHRpbWUgY2hhcnQgKFNhbmthciBQKQorCQkrIHB5dGhvbjMgY29tcGF0aWJpbGl0eSBmaXhlcyAoUmljY2FyZG8pCisJKyBNaXNjIChNaWNoYWVsKQorCQkrIHJlbW92ZSBjb25mdXNpbmcsIG9ic29sZXRlIHNldHVwLnB5CisJCSsgaW5zdGFsbCBkb2NzIHRvIC91c3Ivc2hhcmUvCisJCSsgbG90IG9mIGZpeGVzIGZvciBlYXNpZXIgcGFja2FnaW5nIChQZXRlciBIamFsbWFyc3NvbikKKwkJKyBhZGQgYm9vdGNoYXJ0MiwgYm9vdGNoYXJ0ZCBhbmQgcHlib290Y2hhcnRndWkgbWFucGFnZXMKKwkJICAoRnJhbmNlc2NhIENpY2VyaSwgRGF2aWQgUGFsZWlubykKKworYm9vdGNoYXJ0MiAwLjEyLjY6CisJKyBib290Y2hhcnRkCisJCSsgYmV0dGVyIGNoZWNrIGZvciBpbml0cmQgKFJpY2NhcmRvIE1hZ2xpb2NjaGV0dGkpCisJCSsgY29kZSBjbGVhbnVwIChSaWNjYXJkbykKKwkJKyBtYWtlIHRoZSBsaXN0IG9mIHByb2Nlc3NlcyB3ZSBhcmUgd2FpdGluZyBmb3IgZWRpdGFibGUKKwkJICBpbiBjb25maWcgZmlsZSBieSBFWElUX1BST0MgKFJpY2NhcmRvKQorCQkrIGZpeCBwYXJzaW5nIG9mIGNtZGxpbmUgZm9yIGFsdGVybmF0aXZlIGluaXQgc3lzdGVtIChSaWNjYXJkbykKKwkJKyBmaXhlZCBjYWxsaW5nIGluaXQgaW4gaW5pdHJhbWZzIChIYXJhbGQpCisJCSsgZXhpdCAwIGZvciBzdGFydCwgaWYgdGhlIGNvbGxlY3RvciBpcyBhbHJlYWR5IHJ1bm5pbmcgKEhhcmFsZCkKKwkrIGNvbGxlY3RvcgorCQkrIHRyeSBoYXJkZXIgd2l0aCB0YXNrc3RhdHMgKE1pY2hhZWwpCisJCSsgcGx1ZyBzb21lIHNtYWxsIGxlYWtzIChSaWNjYXJkbykKKwkJKyBmaXggbWlzc2luZyBQUk9DX0VWRU5UUyBkZXRlY3Rpb24gKEhhcmFsZCkKKwkrIHB5Ym9vdGNoYXJ0Z3VpIChNaWNoYWVsKQorCQkrIGFkZCBrZXJuZWwgYm9vdGNoYXJ0IHRhYiB0byBpbnRlcmFjdGl2ZSBndWkKKwkJKyByZXBvcnQgYm9vdGNoYXJ0IHZlcnNpb24gaW4gY2xpIGludGVyZmFjZQorCQkrIGltcHJvdmUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlCisJCSsgR1VJIGltcHJvdmVtZW50cworCQkrIGxvdCBvZiBjbGVhbnVwcworCSsgTWFrZWZpbGUKKwkJKyBkbyBub3QgcHl0aG9uIGNvbXBpbGUgaWYgTk9fUFlUSE9OX0NPTVBJTEUgaXMgc2V0IChIYXJhbGQpCisJKyBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMKKwkJKyBhZGRlZCB0aGVtIGFuZCBpbnN0YWxsIChIYXJhbGQsIFd1bGYgQy4gS3J1ZWdlcikKKworYm9vdGNoYXJ0MiAwLjEyLjU6CisJKyBhZG1pbmlzdHJhdGl2ZSBzbmFmdSB2ZXJzaW9uOyBwdWxsIGJlZm9yZSBwdXNoaW5nLi4uCisKK2Jvb3RjaGFydDIgMC4xMi40OgorCSsgYm9vdGNoYXJ0ZAorCQkrIHJlZHVjZSBvdmVyaGVhZCBjYXVzZWQgYnkgcGlkb2YgKFJpY2NhcmRvIE1hZ2xpb2NjaGV0dGkpCisJKyBjb2xsZWN0b3IKKwkJKyBhdHRlbXB0IHRvIHJldHJ5IHB0cmFjZSB0byBhdm9pZCBib2d1cyBFTk9TWVMgKE1pY2hhZWwpCisJCSsgYWRkIG1lbWluZm8gcG9sbGluZyAoRGF2ZSBNYXJ0aW4pCisJKyBweWJvb3RjaGFydGd1aQorCQkrIGhhbmRsZSBkbWVzZyB0aW1lc3RhbXBzIHdpdGggYmlnIGRlbHRhIChSaWNjYXJkbykKKwkJKyBhdm9pZCBkaXZpZGUgYnkgemVybyB3aGVuIHJlbmRlcmluZyBJL08gdXRpbGl6YXRpb24gKFJpY2NhcmRvKQorCQkrIGFkZCBwcm9jZXNzIGdyb3VwaW5nIGluIHRoZSBjdW11bGF0aXZlIGNoYXJ0IChSaWNjYXJkbykKKwkJKyBmaXggY3B1IHRpbWUgY2FsY3VsYXRpb24gaW4gY3VtdWxhdGl2ZSBjaGFydCAoUmljY2FyZG8pCisJCSsgZ2V0IGkvbyBzdGF0aXN0aWNzIGZvciBmbGFzaCBiYXNlZCBkZXZpY2VzIChSaWNjYXJkbykKKwkJKyBwcmV0dGllciBjb2xvcmluZyBmb3IgdGhlIGN1bXVsYXRpdmUgZ3JhcGhzIChNaWNoYWVsKQorCQkrIGZpeCBpbnRlcmFjdGl2ZSBDUFUgcmVuZGVyaW5nIChNaWNoYWVsKQorCQkrIHJlbmRlciBtZW1vcnkgdXNhZ2UgZ3JhcGggKERhdmUgTWFydGluKQorCitib290Y2hhcnQyIDAuMTIuMworCSsgY29sbGVjdG9yCisJCSsgcGNsb3NlIGFmdGVyIHBvcGVuIChSaWNjYXJkbyBNYWdsaW9jY2hldHRpICh4cm14KSkKKwkJKyBmaXggYnVmZmVyIG92ZXJmbG93ICh4cm14KQorCQkrIGNvdW50ICdwcm9jZXNzb3I6JyBpbiAvcHJvYy9jcHVpbmZvIGZvciBBUk0gKE1pY2hhZWwpCisJCSsgZ2V0IG1vZGVsIG5hbWUgZnJvbSB0aGF0IGxpbmUgdG9vIGZvciBBUk0gKHhybXgpCisJCSsgc3RvcmUgL3Byb2MvY3B1aW5mbyBpbiB0aGUgYm9vdC1jaGFydCBhcmNoaXZlICh4cm14KQorCQkrIHRyeSBoYXJkZXIgdG8gZGV0ZWN0IG1pc3NpbmcgVEFTS1NUQVRTIChNaWNoYWVsKQorCQkrIHNhbml0eS1jaGVjayBpbnZhbGlkIGRvbWFpbiBuYW1lcyAoTWljaGFlbCkKKwkJKyBkZXRlY3QgbWlzc2luZyBQUk9DX0VWRU5UUyBtb3JlIHJlbGlhYmx5IChNaWNoYWVsKQorCQkrIFJFQURNRSBmaXhlcyAoeHJteCwgTWljaGFlbCkKKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgbWFrZSBudW1fY3B1IHBhcnNpbmcgcm9idXN0IChNaWNoYWVsKQorCitib290Y2hhcnQyIDAuMTIuMgorIAkrIGZpeCBwdGhyZWFkIGNvbXBpbGUgLyBsaW5raW5nIGJ1ZworCitib290Y2hhcnQyIDAuMTIuMQorCSsgcHlib290Y2hhcnRndWkKKwkJKyBweWxpbnQgY2xlYW51cAorCQkrIGhhbmRsZSBlbXB0eSB0cmFjZXMgbW9yZSBlbGVnYW50bHkKKwkJKyBhZGQgJy10JyAvICctLWJvb3QtdGltZScgYXJndW1lbnQgKE1hdHRoZXcgQmF1ZXIpCisJKyBjb2xsZWN0b3IKKwkJKyBub3cgR1BMdjIKKwkJKyBhZGQgcmRpbml0IHN1cHBvcnQgZm9yIHZlcnkgZWFybHkgaW5pdHJkIHRyYWNpbmcKKwkJKyBjbGVhbnVwIC8gcmUtZmFjdG9yIGNvZGUgaW50byBzZXBhcmF0ZSBtb2R1bGVzCisJCSsgcmUtZmFjdG9yIGFyZyBwYXJzaW5nLCBhbmQgcGFyc2UgcmVtb3RlIHByb2Nlc3MgYXJncworCQkrIGhhbmRsZSBtaXNzaW5nIGJvb3RjaGFydGQuY29uZiBjbGVhbmx5CisJCSsgbW92ZSBtdWNoIG9mIGJvb3RjaGFydGQgZnJvbSBzaGVsbCAtPiBDCisJCQkrIGRyb3AgZG1lc2cgYW5kIHVuYW1lIHVzYWdlCisJCQkrIGF2b2lkIHJwbS9kcGtnIHdpdGggbmF0aXZlIHZlcnNpb24gcmVwb3J0aW5nCisKK2Jvb3RjaGFydDIgMC4xMi4wIChNaWNoYWVsIE1lZWtzKQorCSsgY29sbGVjdG9yCisJCSsgdXNlIG5ldGxpbmsgUFJPQ19FVkVOVFMgdG8gZ2VuZXJhdGUgcGFyZW50YWdlIGRhdGEKKwkJCSsgZmluYWxseSBraWxscyBhbnkgbmVlZCBmb3IgJ2FjY3QnIGV0LiBhbC4KKwkJCSsgYWxzbyByZW1vdmVzIG5lZWQgdG8gcG9sbCAvcHJvYyA9PiBmYXN0ZXIKKwkJKyBjbGVhbnVwIGNvZGUgdG8gSyZSLCA4IHN0b3AgdGFicy4KKwkrIHB5Ym9vdGNoYXJ0Z3VpCisJCSsgY29uc3VtZSB0aHJlYWQgcGFyZW50YWdlIGRhdGEKKworYm9vdGNoYXJ0MiAwLjExLjQgKE1pY2hhZWwgTWVla3MpCisJKyBjb2xsZWN0b3IKKwkJKyBpZiBydW4gaW5zaWRlIGFuIGluaXRyZCBkZXRlY3Qgd2hlbiAvZGV2IGlzIHdyaXRhYmxlCisJCSAgYW5kIHJlbW91bnQgb3Vyc2VsdmVzIGludG8gdGhhdC4KKwkJKyBvdmVyZmxvdyBidWZmZXJzIG1vcmUgZWxlZ2FudGx5IGluIGV4dHJlbWlzCisJCSsgZHVtcCBmdWxsIHByb2Nlc3MgcGF0aCBhbmQgY29tbWFuZC1saW5lIGFyZ3MKKwkJKyBjYWxtIGRvd24gZGVidWdnaW5nIG91dHB1dAorCSsgcHlib290Y2hhcnRndWkKKwkJKyBjYW4gcmVuZGVyIGxvZ3MgaW4gYSBkaXJlY3RvcnkgYWdhaW4KKwkJKyBoYXMgYSAnc2hvdyBtb3JlJyBvcHRpb24gdG8gc2hvdyBjb21tYW5kLWxpbmVzCisKK2Jvb3RjaGFydDIgMC4xMS4zIChNaWNoYWVsIE1lZWtzKQorCSsgYWRkICQkIGRpc3BsYXkgdG8gdGhlIGJvb3RjaGFydCBoZWFkZXIKKwkrIHByb2Nlc3MgY29tbWFuZC1saW5lIGJpdHMKKwkJKyBmaXggY29sbGVjdGlvbiBjb2RlLCBhbmQgcmVuYW1lIHN0cmVhbSB0byBtYXRjaAorCQkrIGVuYWJsZSBwYXJzaW5nLCBhZGQgY2hlY2sgYnV0dG9uIHRvIFVJLCBhbmQgLS1zaG93LWFsbAorCQkgIGNvbW1hbmQtbGluZSBvcHRpb24KKwkrIGZpeCBwYXJzaW5nIG9mIGRpcmVjdG9yaWVzIGZ1bGwgb2YgZmlsZXMuCisKK2Jvb3RjaGFydDIgMC4xMS4yIChNaWNoYWVsIE1lZWtzKQorCSsgZml4IGluaXRyZCBzYW5pdHkgY2hlY2sgdG8gdXNlIHRoZSByaWdodCBwcm9jIHBhdGgKKwkrIGRvbid0IHJldHVybiBhIGJvZ3VzIGVycm9yIHZhbHVlIHdoZW4gZHVtcGluZyBzdGF0ZQorCSsgYWRkIC1jIHRvIGFpZCBtYW51YWwgY29uc29sZSBkZWJ1Z2dpbmcKKworYm9vdGNoYXJ0MiAwLjExLjEgKE1pY2hhZWwgTWVla3MpCisJKyBldmVuIHNpbXBsZXIgaW5pdHJkIHNldHVwCisJCSsgY3JlYXRlIGEgc2luZ2xlIGRpcmVjdG9yeTogL2xpYi9ib290Y2hhcnQvdG1wZnMKKworYm9vdGNoYXJ0MiAwLjExIChNaWNoYWVsIE1lZWtzKQorCSsgYm9vdGNoYXJ0ZAorCQkrIGZhciwgZmFyIHNpbXBsZXIsIGxlc3Mgc2hlbGwsIG1vcmUgcm9idXN0bmVzcyBldGMuCisJKyBib290Y2hhcnQtY29sbGVjdG9yCisJCSsgcmVtb3ZlIHRoZSAtcCBhcmd1bWVudCAtIHdlIGFsd2F5cyBtb3VudCBwcm9jCisJCSsgcmVxdWlyZXMgL2xpYi9ib290Y2hhcnQgKG1ha2UgaW5zdGFsbC1jaHJvb3QpIHRvCisJCSAgYmUgcHJlc2VudCAoYWxzbyBpbiB0aGUgaW5pdHJkKSBbIHdpdGggYSBrbXNnCisJCSAgbm9kZSBpbmNsdWRlZCBdCisJCSsgYWRkIGEgLS1wcm9iZS1ydW5uaW5nIG1vZGUKKwkrIHB0cmFjZSByZS13cml0ZQorCQkrIGdpdmVzIC1tdWNoLSBiZXR0ZXIgZWFybHktYm9vdC10aW1lIHJlc29sdXRpb24KKwkJKyB1bmNvbmRpdGlvbmFsIGNocm9vdCAvbGliL2Jvb3RjaGFydC9jaHJvb3QKKwkJCSsgd2UgbW91bnQgcHJvYyB0aGVyZSBvdXJzZWx2ZXMKKwkJKyBsb2cgZXh0cmFjdGlvbiByZXF1aXJlcyBubyBjb21tb24gZmlsZS1zeXN0ZW0gdmlldworCisKK2Jvb3RjaGFydDIgMC4xMC4xIChLZWwgTW9kZGVybWFuKQorCSsgY29sbGVjdG9yIGFyZyAtbSBzaG91bGQgbW91bnQgL3Byb2MKKwkrIHJlbW92ZSBib2d1cyB2Y3NpZCBjb2RlCisJKyBzcGxpdCBjb2xsZWN0b3IgaW5zdGFsbCBpbiBNYWtlZmlsZQorCSsgcmVtb3ZlIGJvZ3VzIGRlYnVnIGNvZGUKKwkrIGFjY2VwdCBwcm9jZXNzIG5hbWVzIGNvbnRhaW5pbmcgc3BhY2VzCisKK2Jvb3RjaGFydDIgMC4xMC4wCisJKyByZW5kZXJpbmcgKEFuZGVycyBOb3JnYWFyZCkKKwkJKyBmaXggZm9yIHVua25vd24gZXhjZXB0aW9ucworCSsgaW50ZXJhY3RpdmUgVUkgKE1pY2hhZWwpCisJCSsgbXVjaCBmYXN0ZXIgcmVuZGVyaW5nIGJ5IG1hbnVhbCBjbGlwcGluZworCQkrIGhvcml6b250YWwgc2NhbGluZworCQkrIHJlbW92ZSBhbm5veWluZyBwYWdlLXVwL2Rvd24gYmluZGluZ3MKKwkrIGluaXRyZCBwb3J0YWJpbGl0eSAmIGZpeGVzIChGZWRlcmljIENyb3phdCkKKwkJKyBwb3J0IHRvIE1hbmRyaXZhCisJCSsgaW1wcm92ZWQgcHJvY2VzcyB3YWl0aW5nCisJCSsgaW5pdHRhYiBjb21tZW50aW5nIGZpeAorCQkrIGltcHJvdmVkIGluaXRyZCBkZXRlY3Rpb24gLyBqYWlsIHRhZ2dpbmcKKwkJKyBmaXggZm9yIHVuLWRldGVjdGFibGUgYWNjdG9uIGJlaGF2aW91ciBjaGFuZ2UKKwkJKyBpbXBsZW1lbnQgYSBidWlsdC1pbiB1c2xlZXAgdG8gaGVscCBpbml0cmQgZGVwcyAoTWljaGFlbCkKKworYm9vdGNoYXJ0MiAwLjAuOQorCSsgZml4IGluaXRyZCBidWcKKworYm9vdGNoYXJ0MiAwLjAuOAorCSsgYWRkIGEgZmlsZW5hbWUgc3RyaW5nIHRvIHRoZSB3aW5kb3cgdGl0bGUgaW4gaW50ZXJhY3RpdmUgbW9kZQorCSsgYWRkIGEgTkVXUyBmaWxlCmRpZmYgLS1naXQgYS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL1JFQURNRS5weWJvb3RjaGFydCBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvUkVBRE1FLnB5Ym9vdGNoYXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NDJlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL1JFQURNRS5weWJvb3RjaGFydApAQCAtMCwwICsxLDM3IEBACisJCQkgICAgUFlCT09UQ0hBUlRHVUkKKwkJCSAgIC0tLS0tLS0tLS0tLS0tLS0KKworcHlib290Y2hhcnRndWkgaXMgYSB0b29sIChub3cgaW5jbHVkZWQgYXMgcGFydCBvZiBib290Y2hhcnQyKSBmb3IKK3Zpc3VhbGl6YXRpb24gYW5kIGFuYWx5c2lzIG9mIHRoZSBHTlUvTGludXggYm9vdCBwcm9jZXNzLiBJdCByZW5kZXJzCit0aGUgb3V0cHV0IG9mIHRoZSBib290LWxvZ2dlciB0b29sIGJvb3RjaGFydCAoc2VlCitodHRwOi8vd3d3LmJvb3RjaGFydC5vcmcvKSB0byBlaXRoZXIgdGhlIHNjcmVlbiBvciBmaWxlcyBvZiB2YXJpb3VzCitmb3JtYXRzLiBCb290Y2hhcnQgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2Nlc3NlcywgdGhlaXIKK2RlcGVuZGVuY2llcywgYW5kIHJlc291cmNlIGNvbnN1bXB0aW9uIGR1cmluZyBib290IG9mIGEgR05VL0xpbnV4CitzeXN0ZW0uIFRoZSBweWJvb3RjaGFydGd1aSB0b29scyB2aXN1YWxpemVzIHRoZSBwcm9jZXNzIHRyZWUgYW5kCitvdmVyYWxsIHJlc291cmNlIHV0aWxpemF0aW9uLgorCitweWJvb3RjaGFydGd1aSBpcyBhIHBvcnQgb2YgdGhlIHZpc3VhbGl6YXRpb24gcGFydCBvZiBib290Y2hhcnQgZnJvbQorSmF2YSB0byBQeXRob24gYW5kIENhaXJvLgorCitBZGFwdGVkIGZyb20gdGhlIGJvb3RjaGFydC1kb2N1bWVudGF0aW9uOgorCisgIFRoZSBDUFUgYW5kIGRpc2sgc3RhdGlzdGljcyBhcmUgdXNlZCB0byByZW5kZXIgc3RhY2tlZCBhcmVhIGFuZCBsaW5lCisgIGNoYXJ0cy4gVGhlIHByb2Nlc3MgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBHYW50dCBjaGFydAorICBzaG93aW5nIHByb2Nlc3MgZGVwZW5kZW5jeSwgc3RhdGVzIGFuZCBDUFUgdXNhZ2UuCisKKyAgQSB0eXBpY2FsIGJvb3Qgc2VxdWVuY2UgY29uc2lzdHMgb2Ygc2V2ZXJhbCBodW5kcmVkIHByb2Nlc3Nlcy4gU2luY2UKKyAgaXQgaXMgZGlmZmljdWx0IHRvIHZpc3VhbGl6ZSBzdWNoIGFtb3VudCBvZiBkYXRhIGluIGEgY29tcHJlaGVuc2libGUKKyAgd2F5LCB0cmVlIHBydW5pbmcgaXMgdXRpbGl6ZWQuIElkbGUgYmFja2dyb3VuZCBwcm9jZXNzZXMgYW5kCisgIHNob3J0LWxpdmVkIHByb2Nlc3NlcyBhcmUgcmVtb3ZlZC4gU2ltaWxhciBwcm9jZXNzZXMgcnVubmluZyBpbgorICBwYXJhbGxlbCBhcmUgYWxzbyBtZXJnZWQgdG9nZXRoZXIuCisKKyAgRmluYWxseSwgdGhlIHBlcmZvcm1hbmNlIGFuZCBkZXBlbmRlbmN5IGNoYXJ0cyBhcmUgcmVuZGVyZWQgYXMgYQorICBzaW5nbGUgaW1hZ2UgdG8gZWl0aGVyIHRoZSBzY3JlZW4gb3IgaW4gUE5HLCBQREYgb3IgU1ZHIGZvcm1hdC4KKworCitUbyBnZXQgaGVscCBmb3IgcHlib290Y2hhcnRndWksIHJ1bgorCiskIHB5Ym9vdGNoYXJ0Z3VpIC0taGVscAorCitUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgaG9zdGVkIGF0OgorCWh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weWJvb3RjaGFydGd1aS8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkucHkgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjZTFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpLnB5CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2ltcG9ydCBzeXMKK2Zyb20gcHlib290Y2hhcnRndWkubWFpbiBpbXBvcnQgbWFpbgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCXN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvX19pbml0X18ucHkgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2JhdGNoLnB5IGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9iYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM3MTRlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9iYXRjaC5weQpAQCAtMCwwICsxLDQ2IEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2ltcG9ydCBjYWlybworZnJvbSAuIGltcG9ydCBkcmF3Citmcm9tIC5kcmF3IGltcG9ydCBSZW5kZXJPcHRpb25zCisKK2RlZiByZW5kZXIod3JpdGVyLCB0cmFjZSwgYXBwX29wdGlvbnMsIGZpbGVuYW1lKToKKyAgICBoYW5kbGVycyA9IHsKKyAgICAgICAgInBuZyI6IChsYW1iZGEgdywgaDogY2Fpcm8uSW1hZ2VTdXJmYWNlKGNhaXJvLkZPUk1BVF9BUkdCMzIsIHcsIGgpLCBcCisgICAgICAgICAgICAgICAgbGFtYmRhIHNmYzogc2ZjLndyaXRlX3RvX3BuZyhmaWxlbmFtZSkpLAorICAgICAgICAicGRmIjogKGxhbWJkYSB3LCBoOiBjYWlyby5QREZTdXJmYWNlKGZpbGVuYW1lLCB3LCBoKSwgbGFtYmRhIHNmYzogMCksCisgICAgICAgICJzdmciOiAobGFtYmRhIHcsIGg6IGNhaXJvLlNWR1N1cmZhY2UoZmlsZW5hbWUsIHcsIGgpLCBsYW1iZGEgc2ZjOiAwKQorICAgIH0KKworICAgIGlmIGFwcF9vcHRpb25zLmZvcm1hdCBpcyBOb25lOgorICAgICAgICBmbXQgPSBmaWxlbmFtZS5yc3BsaXQoJy4nLCAxKVsxXQorICAgIGVsc2U6CisgICAgICAgIGZtdCA9IGFwcF9vcHRpb25zLmZvcm1hdAorCisgICAgaWYgbm90IChmbXQgaW4gaGFuZGxlcnMpOgorICAgICAgICB3cml0ZXIuZXJyb3IgKCJVbmtub3duIGZvcm1hdCAnJXMnLiIgJSBmbXQpCisgICAgICAgIHJldHVybiAxMAorCisgICAgbWFrZV9zdXJmYWNlLCB3cml0ZV9zdXJmYWNlID0gaGFuZGxlcnNbZm10XQorICAgIG9wdGlvbnMgPSBSZW5kZXJPcHRpb25zIChhcHBfb3B0aW9ucykKKyAgICAodywgaCkgPSBkcmF3LmV4dGVudHMgKG9wdGlvbnMsIDEuMCwgdHJhY2UpCisgICAgdyA9IG1heCAodywgZHJhdy5NSU5fSU1HX1cpCisgICAgc3VyZmFjZSA9IG1ha2Vfc3VyZmFjZSAodywgaCkKKyAgICBjdHggPSBjYWlyby5Db250ZXh0IChzdXJmYWNlKQorICAgIGRyYXcucmVuZGVyIChjdHgsIG9wdGlvbnMsIDEuMCwgdHJhY2UpCisgICAgd3JpdGVfc3VyZmFjZSAoc3VyZmFjZSkKKyAgICB3cml0ZXIuc3RhdHVzICgiYm9vdGNoYXJ0IHdyaXR0ZW4gdG8gJyVzJyIgJSBmaWxlbmFtZSkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9kcmF3LnB5IGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9kcmF3LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTc0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2RyYXcucHkKQEAgLTAsMCArMSw4OTQgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitpbXBvcnQgY2Fpcm8KK2ltcG9ydCBtYXRoCitpbXBvcnQgcmUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBjb2xvcnN5cworZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgorCitjbGFzcyBSZW5kZXJPcHRpb25zOgorCisJZGVmIF9faW5pdF9fKHNlbGYsIGFwcF9vcHRpb25zKToKKwkJIyBzaG91bGQgd2UgcmVuZGVyIGEgY3VtdWxhdGl2ZSBDUFUgdGltZSBjaGFydAorCQlzZWxmLmN1bXVsYXRpdmUgPSBUcnVlCisJCXNlbGYuY2hhcnRzID0gVHJ1ZQorCQlzZWxmLmtlcm5lbF9vbmx5ID0gRmFsc2UKKwkJc2VsZi5hcHBfb3B0aW9ucyA9IGFwcF9vcHRpb25zCisKKwlkZWYgcHJvY190cmVlIChzZWxmLCB0cmFjZSk6CisJCWlmIHNlbGYua2VybmVsX29ubHk6CisJCQlyZXR1cm4gdHJhY2Uua2VybmVsX3RyZWUKKwkJZWxzZToKKwkJCXJldHVybiB0cmFjZS5wcm9jX3RyZWUKKworIyBQcm9jZXNzIHRyZWUgYmFja2dyb3VuZCBjb2xvci4KK0JBQ0tfQ09MT1IgPSAoMS4wLCAxLjAsIDEuMCwgMS4wKQorCitXSElURSA9ICgxLjAsIDEuMCwgMS4wLCAxLjApCisjIFByb2Nlc3MgdHJlZSBib3JkZXIgY29sb3IuCitCT1JERVJfQ09MT1IgPSAoMC42MywgMC42MywgMC42MywgMS4wKQorIyBTZWNvbmQgdGljayBsaW5lIGNvbG9yLgorVElDS19DT0xPUiA9ICgwLjkyLCAwLjkyLCAwLjkyLCAxLjApCisjIDUtc2Vjb25kIHRpY2sgbGluZSBjb2xvci4KK1RJQ0tfQ09MT1JfQk9MRCA9ICgwLjg2LCAwLjg2LCAwLjg2LCAxLjApCisjIEFubm90YXRpb24gY29sb3VyCitBTk5PVEFUSU9OX0NPTE9SID0gKDAuNjMsIDAuMCwgMC4wLCAwLjUpCisjIFRleHQgY29sb3IuCitURVhUX0NPTE9SID0gKDAuMCwgMC4wLCAwLjAsIDEuMCkKKworIyBGb250IGZhbWlseQorRk9OVF9OQU1FID0gIkJpdHN0cmVhbSBWZXJhIFNhbnMiCisjIFRpdGxlIHRleHQgZm9udC4KK1RJVExFX0ZPTlRfU0laRSA9IDE4CisjIERlZmF1bHQgdGV4dCBmb250LgorVEVYVF9GT05UX1NJWkUgPSAxMgorIyBBeGlzIGxhYmVsIGZvbnQuCitBWElTX0ZPTlRfU0laRSA9IDExCisjIExlZ2VuZCBmb250LgorTEVHRU5EX0ZPTlRfU0laRSA9IDEyCisKKyMgQ1BVIGxvYWQgY2hhcnQgY29sb3IuCitDUFVfQ09MT1IgPSAoMC40MCwgMC41NSwgMC43MCwgMS4wKQorIyBJTyB3YWl0IGNoYXJ0IGNvbG9yLgorSU9fQ09MT1IgPSAoMC43NiwgMC40OCwgMC40OCwgMC41KQorIyBEaXNrIHRocm91Z2hwdXQgY29sb3IuCitESVNLX1RQVVRfQ09MT1IgPSAoMC4yMCwgMC43MSwgMC4yMCwgMS4wKQorIyBDUFUgbG9hZCBjaGFydCBjb2xvci4KK0ZJTEVfT1BFTl9DT0xPUiA9ICgwLjIwLCAwLjcxLCAwLjcxLCAxLjApCisjIE1lbSBjYWNoZWQgY29sb3IKK01FTV9DQUNIRURfQ09MT1IgPSBDUFVfQ09MT1IKKyMgTWVtIHVzZWQgY29sb3IKK01FTV9VU0VEX0NPTE9SID0gSU9fQ09MT1IKKyMgQnVmZmVycyBjb2xvcgorTUVNX0JVRkZFUlNfQ09MT1IgPSAoMC40LCAwLjQsIDAuNCwgMC4zKQorIyBTd2FwIGNvbG9yCitNRU1fU1dBUF9DT0xPUiA9IERJU0tfVFBVVF9DT0xPUgorCisjIFByb2Nlc3MgYm9yZGVyIGNvbG9yLgorUFJPQ19CT1JERVJfQ09MT1IgPSAoMC43MSwgMC43MSwgMC43MSwgMS4wKQorIyBXYWl0aW5nIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX0QgPSAoMC43NiwgMC40OCwgMC40OCwgMC41KQorIyBSdW5uaW5nIHByb2Nlc3MgY29sb3IuCitQUk9DX0NPTE9SX1IgPSBDUFVfQ09MT1IKKyMgU2xlZXBpbmcgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfUyA9ICgwLjk0LCAwLjk0LCAwLjk0LCAxLjApCisjIFN0b3BwZWQgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfVCA9ICgwLjk0LCAwLjUwLCAwLjUwLCAxLjApCisjIFpvbWJpZSBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9aID0gKDAuNzEsIDAuNzEsIDAuNzEsIDEuMCkKKyMgRGVhZCBwcm9jZXNzIGNvbG9yLgorUFJPQ19DT0xPUl9YID0gKDAuNzEsIDAuNzEsIDAuNzEsIDAuMTI1KQorIyBQYWdpbmcgcHJvY2VzcyBjb2xvci4KK1BST0NfQ09MT1JfVyA9ICgwLjcxLCAwLjcxLCAwLjcxLCAwLjEyNSkKKworIyBQcm9jZXNzIGxhYmVsIGNvbG9yLgorUFJPQ19URVhUX0NPTE9SID0gKDAuMTksIDAuMTksIDAuMTksIDEuMCkKKyMgUHJvY2VzcyBsYWJlbCBmb250LgorUFJPQ19URVhUX0ZPTlRfU0laRSA9IDEyCisKKyMgU2lnbmF0dXJlIGNvbG9yLgorU0lHX0NPTE9SID0gKDAuMCwgMC4wLCAwLjAsIDAuMzEyNSkKKyMgU2lnbmF0dXJlIGZvbnQuCitTSUdfRk9OVF9TSVpFID0gMTQKKyMgU2lnbmF0dXJlIHRleHQuCitTSUdOQVRVUkUgPSAiaHR0cDovL2dpdGh1Yi5jb20vbW1lZWtzL2Jvb3RjaGFydCIKKworIyBQcm9jZXNzIGRlcGVuZGVuY3kgbGluZSBjb2xvci4KK0RFUF9DT0xPUiA9ICgwLjc1LCAwLjc1LCAwLjc1LCAxLjApCisjIFByb2Nlc3MgZGVwZW5kZW5jeSBsaW5lIHN0cm9rZS4KK0RFUF9TVFJPS0UgPSAxLjAKKworIyBQcm9jZXNzIGRlc2NyaXB0aW9uIGRhdGUgZm9ybWF0LgorREVTQ19USU1FX0ZPUk1BVCA9ICJtbTpzcy5TU1MiCisKKyMgQ3VtdWxhdGl2ZSBjb2xvcmluZyBiaXRzCitIU1ZfTUFYX01PRCA9IDMxCitIU1ZfU1RFUCA9IDcKKworIyBDb25maWd1cmUgdGFzayBjb2xvcgorVEFTS19DT0xPUl9DT05GSUdVUkUgPSAoMS4wLCAxLjAsIDAuMDAsIDEuMCkKKyMgQ29tcGlsZSB0YXNrIGNvbG9yLgorVEFTS19DT0xPUl9DT01QSUxFID0gKDAuMCwgMS4wMCwgMC4wMCwgMS4wKQorIyBJbnN0YWxsIHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfSU5TVEFMTCA9ICgxLjAsIDAuMDAsIDEuMDAsIDEuMCkKKyMgU3lzcm9vdCB0YXNrIGNvbG9yCitUQVNLX0NPTE9SX1NZU1JPT1QgPSAoMC4wLCAwLjAwLCAxLjAwLCAxLjApCisjIFBhY2thZ2UgdGFzayBjb2xvcgorVEFTS19DT0xPUl9QQUNLQUdFID0gKDAuMCwgMS4wMCwgMS4wMCwgMS4wKQorIyBQYWNrYWdlIFdyaXRlIFJQTS9ERUIvSVBLIHRhc2sgY29sb3IKK1RBU0tfQ09MT1JfUEFDS0FHRV9XUklURSA9ICgwLjAsIDAuNTAsIDAuNTAsIDEuMCkKKworIyBQcm9jZXNzIHN0YXRlcworU1RBVEVfVU5ERUZJTkVEID0gMAorU1RBVEVfUlVOTklORyAgID0gMQorU1RBVEVfU0xFRVBJTkcgID0gMgorU1RBVEVfV0FJVElORyAgID0gMworU1RBVEVfU1RPUFBFRCAgID0gNAorU1RBVEVfWk9NQklFICAgID0gNQorCitTVEFURV9DT0xPUlMgPSBbKDAsIDAsIDAsIDApLCBQUk9DX0NPTE9SX1IsIFBST0NfQ09MT1JfUywgUFJPQ19DT0xPUl9ELCBcCisJCVBST0NfQ09MT1JfVCwgUFJPQ19DT0xPUl9aLCBQUk9DX0NPTE9SX1gsIFBST0NfQ09MT1JfV10KKworIyBDdW11bGF0aXZlU3RhdHMgVHlwZXMKK1NUQVRfVFlQRV9DUFUgPSAwCitTVEFUX1RZUEVfSU8gPSAxCisKKyMgQ29udmVydCBwcyBwcm9jZXNzIHN0YXRlIHRvIGFuIGludAorZGVmIGdldF9wcm9jX3N0YXRlKGZsYWcpOgorCXJldHVybiAiUlNEVFpYVyIuZmluZChmbGFnKSArIDEKKworZGVmIGRyYXdfdGV4dChjdHgsIHRleHQsIGNvbG9yLCB4LCB5KToKKwljdHguc2V0X3NvdXJjZV9yZ2JhKCpjb2xvcikKKwljdHgubW92ZV90byh4LCB5KQorCWN0eC5zaG93X3RleHQodGV4dCkKKworZGVmIGRyYXdfZmlsbF9yZWN0KGN0eCwgY29sb3IsIHJlY3QpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5yZWN0YW5nbGUoKnJlY3QpCisJY3R4LmZpbGwoKQorCitkZWYgZHJhd19yZWN0KGN0eCwgY29sb3IsIHJlY3QpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5yZWN0YW5nbGUoKnJlY3QpCisJY3R4LnN0cm9rZSgpCisKK2RlZiBkcmF3X2xlZ2VuZF9ib3goY3R4LCBsYWJlbCwgZmlsbF9jb2xvciwgeCwgeSwgcyk6CisJZHJhd19maWxsX3JlY3QoY3R4LCBmaWxsX2NvbG9yLCAoeCwgeSAtIHMsIHMsIHMpKQorCWRyYXdfcmVjdChjdHgsIFBST0NfQk9SREVSX0NPTE9SLCAoeCwgeSAtIHMsIHMsIHMpKQorCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBURVhUX0NPTE9SLCB4ICsgcyArIDUsIHkpCisKK2RlZiBkcmF3X2xlZ2VuZF9saW5lKGN0eCwgbGFiZWwsIGZpbGxfY29sb3IsIHgsIHksIHMpOgorCWRyYXdfZmlsbF9yZWN0KGN0eCwgZmlsbF9jb2xvciwgKHgsIHkgLSBzLzIsIHMgKyAxLCAzKSkKKwljdHguYXJjKHggKyAocyArIDEpLzIuMCwgeSAtIChzIC0gMykvMi4wLCAyLjUsIDAsIDIuMCAqIG1hdGgucGkpCisJY3R4LmZpbGwoKQorCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBURVhUX0NPTE9SLCB4ICsgcyArIDUsIHkpCisKK2RlZiBkcmF3X2xhYmVsX2luX2JveChjdHgsIGNvbG9yLCBsYWJlbCwgeCwgeSwgdywgbWF4eCk6CisJbGFiZWxfdyA9IGN0eC50ZXh0X2V4dGVudHMobGFiZWwpWzJdCisJbGFiZWxfeCA9IHggKyB3IC8gMiAtIGxhYmVsX3cgLyAyCisJaWYgbGFiZWxfdyArIDEwID4gdzoKKwkJbGFiZWxfeCA9IHggKyB3ICsgNQorCWlmIGxhYmVsX3ggKyBsYWJlbF93ID4gbWF4eDoKKwkJbGFiZWxfeCA9IHggLSBsYWJlbF93IC0gNQorCWRyYXdfdGV4dChjdHgsIGxhYmVsLCBjb2xvciwgbGFiZWxfeCwgeSkKKworZGVmIGRyYXdfc2VjX2xhYmVscyhjdHgsIG9wdGlvbnMsIHJlY3QsIHNlY193LCBuc2Vjcyk6CisJY3R4LnNldF9mb250X3NpemUoQVhJU19GT05UX1NJWkUpCisJcHJldl94ID0gMAorCWZvciBpIGluIHJhbmdlKDAsIHJlY3RbMl0gKyAxLCBzZWNfdyk6CisJCWlmICgoaSAvIHNlY193KSAlIG5zZWNzID09IDApIDoKKwkJCWlmIG9wdGlvbnMuYXBwX29wdGlvbnMuYXNfbWludXRlcyA6CisJCQkJbGFiZWwgPSAiJS4xZiIgJSAoaSAvIHNlY193IC8gNjAuMCkKKwkJCWVsc2UgOgorCQkJCWxhYmVsID0gIiVkIiAlIChpIC8gc2VjX3cpCisJCQlsYWJlbF93ID0gY3R4LnRleHRfZXh0ZW50cyhsYWJlbClbMl0KKwkJCXggPSByZWN0WzBdICsgaSAtIGxhYmVsX3cvMgorCQkJaWYgeCA+PSBwcmV2X3g6CisJCQkJZHJhd190ZXh0KGN0eCwgbGFiZWwsIFRFWFRfQ09MT1IsIHgsIHJlY3RbMV0gLSAyKQorCQkJCXByZXZfeCA9IHggKyBsYWJlbF93CisKK2RlZiBkcmF3X2JveF90aWNrcyhjdHgsIHJlY3QsIHNlY193KToKKwlkcmF3X3JlY3QoY3R4LCBCT1JERVJfQ09MT1IsIHR1cGxlKHJlY3QpKQorCisJY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9TUVVBUkUpCisKKwlmb3IgaSBpbiByYW5nZShzZWNfdywgcmVjdFsyXSArIDEsIHNlY193KToKKwkJaWYgKChpIC8gc2VjX3cpICUgMTAgPT0gMCkgOgorCQkJY3R4LnNldF9saW5lX3dpZHRoKDEuNSkKKwkJZWxpZiBzZWNfdyA8IDUgOgorCQkJY29udGludWUKKwkJZWxzZSA6CisJCQljdHguc2V0X2xpbmVfd2lkdGgoMS4wKQorCQlpZiAoKGkgLyBzZWNfdykgJSAzMCA9PSAwKSA6CisJCQljdHguc2V0X3NvdXJjZV9yZ2JhKCpUSUNLX0NPTE9SX0JPTEQpCisJCWVsc2UgOgorCQkJY3R4LnNldF9zb3VyY2VfcmdiYSgqVElDS19DT0xPUikKKwkJY3R4Lm1vdmVfdG8ocmVjdFswXSArIGksIHJlY3RbMV0gKyAxKQorCQljdHgubGluZV90byhyZWN0WzBdICsgaSwgcmVjdFsxXSArIHJlY3RbM10gLSAxKQorCQljdHguc3Ryb2tlKCkKKwljdHguc2V0X2xpbmVfd2lkdGgoMS4wKQorCisJY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9CVVRUKQorCitkZWYgZHJhd19hbm5vdGF0aW9ucyhjdHgsIHByb2NfdHJlZSwgdGltZXMsIHJlY3QpOgorICAgIGN0eC5zZXRfbGluZV9jYXAoY2Fpcm8uTElORV9DQVBfU1FVQVJFKQorICAgIGN0eC5zZXRfc291cmNlX3JnYmEoKkFOTk9UQVRJT05fQ09MT1IpCisgICAgY3R4LnNldF9kYXNoKFs0LCA0XSkKKworICAgIGZvciB0aW1lIGluIHRpbWVzOgorICAgICAgICBpZiB0aW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeCA9ICgodGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIHJlY3RbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pCisKKyAgICAgICAgICAgIGN0eC5tb3ZlX3RvKHJlY3RbMF0gKyB4LCByZWN0WzFdICsgMSkKKyAgICAgICAgICAgIGN0eC5saW5lX3RvKHJlY3RbMF0gKyB4LCByZWN0WzFdICsgcmVjdFszXSAtIDEpCisgICAgICAgICAgICBjdHguc3Ryb2tlKCkKKworICAgIGN0eC5zZXRfbGluZV9jYXAoY2Fpcm8uTElORV9DQVBfQlVUVCkKKyAgICBjdHguc2V0X2Rhc2goW10pCisKK2RlZiBkcmF3X2NoYXJ0KGN0eCwgY29sb3IsIGZpbGwsIGNoYXJ0X2JvdW5kcywgZGF0YSwgcHJvY190cmVlLCBkYXRhX3JhbmdlKToKKwljdHguc2V0X2xpbmVfd2lkdGgoMC41KQorCXhfc2hpZnQgPSBwcm9jX3RyZWUuc3RhcnRfdGltZQorCisJZGVmIHRyYW5zZm9ybV9wb2ludF9jb29yZHMocG9pbnQsIHhfYmFzZSwgeV9iYXNlLCBcCisJCQkJICAgeHNjYWxlLCB5c2NhbGUsIHhfdHJhbnMsIHlfdHJhbnMpOgorCQl4ID0gKHBvaW50WzBdIC0geF9iYXNlKSAqIHhzY2FsZSArIHhfdHJhbnMKKwkJeSA9IChwb2ludFsxXSAtIHlfYmFzZSkgKiAteXNjYWxlICsgeV90cmFucyArIGNoYXJ0X2JvdW5kc1szXQorCQlyZXR1cm4geCwgeQorCisJbWF4X3ggPSBtYXggKHggZm9yICh4LCB5KSBpbiBkYXRhKQorCW1heF95ID0gbWF4ICh5IGZvciAoeCwgeSkgaW4gZGF0YSkKKwkjIGF2b2lkIGRpdmlkZSBieSB6ZXJvCisJaWYgbWF4X3kgPT0gMDoKKwkJbWF4X3kgPSAxLjAKKwl4c2NhbGUgPSBmbG9hdCAoY2hhcnRfYm91bmRzWzJdKSAvIG1heF94CisJIyBJZiBkYXRhX3JhbmdlIGlzIGdpdmVuLCBzY2FsZSB0aGUgY2hhcnQgc28gdGhhdCB0aGUgdmFsdWUgcmFuZ2UgaW4KKwkjIGRhdGFfcmFuZ2UgbWF0Y2hlcyB0aGUgY2hhcnQgYm91bmRzIGV4YWN0bHkuCisJIyBPdGhlcndpc2UsIHNjYWxlIHNvIHRoYXQgdGhlIGFjdHVhbCBkYXRhIG1hdGNoZXMgdGhlIGNoYXJ0IGJvdW5kcy4KKwlpZiBkYXRhX3JhbmdlOgorCQl5c2NhbGUgPSBmbG9hdChjaGFydF9ib3VuZHNbM10pIC8gKGRhdGFfcmFuZ2VbMV0gLSBkYXRhX3JhbmdlWzBdKQorCQl5YmFzZSA9IGRhdGFfcmFuZ2VbMF0KKwllbHNlOgorCQl5c2NhbGUgPSBmbG9hdChjaGFydF9ib3VuZHNbM10pIC8gbWF4X3kKKwkJeWJhc2UgPSAwCisKKwlmaXJzdCA9IHRyYW5zZm9ybV9wb2ludF9jb29yZHMgKGRhdGFbMF0sIHhfc2hpZnQsIHliYXNlLCB4c2NhbGUsIHlzY2FsZSwgXAorCQkJCSAgICAgICAgY2hhcnRfYm91bmRzWzBdLCBjaGFydF9ib3VuZHNbMV0pCisJbGFzdCA9ICB0cmFuc2Zvcm1fcG9pbnRfY29vcmRzIChkYXRhWy0xXSwgeF9zaGlmdCwgeWJhc2UsIHhzY2FsZSwgeXNjYWxlLCBcCisJCQkJICAgICAgICBjaGFydF9ib3VuZHNbMF0sIGNoYXJ0X2JvdW5kc1sxXSkKKworCWN0eC5zZXRfc291cmNlX3JnYmEoKmNvbG9yKQorCWN0eC5tb3ZlX3RvKCpmaXJzdCkKKwlmb3IgcG9pbnQgaW4gZGF0YToKKwkJeCwgeSA9IHRyYW5zZm9ybV9wb2ludF9jb29yZHMgKHBvaW50LCB4X3NoaWZ0LCB5YmFzZSwgeHNjYWxlLCB5c2NhbGUsIFwKKwkJCQkJICAgICAgIGNoYXJ0X2JvdW5kc1swXSwgY2hhcnRfYm91bmRzWzFdKQorCQljdHgubGluZV90byh4LCB5KQorCWlmIGZpbGw6CisJCWN0eC5zdHJva2VfcHJlc2VydmUoKQorCQljdHgubGluZV90byhsYXN0WzBdLCBjaGFydF9ib3VuZHNbMV0rY2hhcnRfYm91bmRzWzNdKQorCQljdHgubGluZV90byhmaXJzdFswXSwgY2hhcnRfYm91bmRzWzFdK2NoYXJ0X2JvdW5kc1szXSkKKwkJY3R4LmxpbmVfdG8oZmlyc3RbMF0sIGZpcnN0WzFdKQorCQljdHguZmlsbCgpCisJZWxzZToKKwkJY3R4LnN0cm9rZSgpCisJY3R4LnNldF9saW5lX3dpZHRoKDEuMCkKKworYmFyX2ggPSA1NQorbWVtaW5mb19iYXJfaCA9IDIgKiBiYXJfaAoraGVhZGVyX2ggPSA2MAorIyBvZmZzZXRzCitvZmZfeCwgb2ZmX3kgPSAyMjAsIDEwCitzZWNfd19iYXNlID0gMSAjIHRoZSB3aWR0aCBvZiBhIHNlY29uZAorcHJvY19oID0gMTYgIyB0aGUgaGVpZ2h0IG9mIGEgcHJvY2VzcworbGVnX3MgPSAxMAorTUlOX0lNR19XID0gODAwCitDVU1MX0hFSUdIVCA9IDIwMDAgIyBJbmNyZWFzZWQgdmFsdWUgdG8gYWNjb21vZGF0ZSBDUFUgYW5kIEkvTyBHcmFwaHMKK09QVElPTlMgPSBOb25lCisKK2RlZiBleHRlbnRzKG9wdGlvbnMsIHhzY2FsZSwgdHJhY2UpOgorCXN0YXJ0ID0gbWluKHRyYWNlLnN0YXJ0LmtleXMoKSkKKwllbmQgPSBzdGFydAorCisgICAgICAgIHByb2Nlc3NlcyA9IDAKKyAgICAgICAgZm9yIHByb2MgaW4gdHJhY2UucHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcHRpb25zLmFwcF9vcHRpb25zLnNob3dfYWxsIGFuZCBcCisgICAgICAgICAgICAgICAgICAgdHJhY2UucHJvY2Vzc2VzW3Byb2NdWzFdIC0gdHJhY2UucHJvY2Vzc2VzW3Byb2NdWzBdIDwgb3B0aW9ucy5hcHBfb3B0aW9ucy5taW50aW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHRyYWNlLnByb2Nlc3Nlc1twcm9jXVsxXSA+IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHRyYWNlLnByb2Nlc3Nlc1twcm9jXVsxXQorICAgICAgICAgICAgICAgIHByb2Nlc3NlcyArPSAxCisKKwlpZiB0cmFjZS5taW4gaXMgbm90IE5vbmUgYW5kIHRyYWNlLm1heCBpcyBub3QgTm9uZToKKwkJc3RhcnQgPSB0cmFjZS5taW4KKwkJZW5kID0gdHJhY2UubWF4CisKKwl3ID0gaW50ICgoZW5kIC0gc3RhcnQpICogc2VjX3dfYmFzZSAqIHhzY2FsZSkgKyAyICogb2ZmX3gKKwloID0gcHJvY19oICogcHJvY2Vzc2VzICsgaGVhZGVyX2ggKyAyICogb2ZmX3kKKworCXJldHVybiAodywgaCkKKworZGVmIGNsaXBfdmlzaWJsZShjbGlwLCByZWN0KToKKwl4bWF4ID0gbWF4IChjbGlwWzBdLCByZWN0WzBdKQorCXltYXggPSBtYXggKGNsaXBbMV0sIHJlY3RbMV0pCisJeG1pbiA9IG1pbiAoY2xpcFswXSArIGNsaXBbMl0sIHJlY3RbMF0gKyByZWN0WzJdKQorCXltaW4gPSBtaW4gKGNsaXBbMV0gKyBjbGlwWzNdLCByZWN0WzFdICsgcmVjdFszXSkKKwlyZXR1cm4gKHhtaW4gPiB4bWF4IGFuZCB5bWluID4geW1heCkKKworZGVmIHJlbmRlcl9jaGFydHMoY3R4LCBvcHRpb25zLCBjbGlwLCB0cmFjZSwgY3Vycl95LCB3LCBoLCBzZWNfdyk6CisJcHJvY190cmVlID0gb3B0aW9ucy5wcm9jX3RyZWUodHJhY2UpCisKKwkjIHJlbmRlciBiYXIgbGVnZW5kCisJY3R4LnNldF9mb250X3NpemUoTEVHRU5EX0ZPTlRfU0laRSkKKworCWRyYXdfbGVnZW5kX2JveChjdHgsICJDUFUgKHVzZXIrc3lzKSIsIENQVV9DT0xPUiwgb2ZmX3gsIGN1cnJfeSsyMCwgbGVnX3MpCisJZHJhd19sZWdlbmRfYm94KGN0eCwgIkkvTyAod2FpdCkiLCBJT19DT0xPUiwgb2ZmX3ggKyAxMjAsIGN1cnJfeSsyMCwgbGVnX3MpCisKKwkjIHJlbmRlciBJL08gd2FpdAorCWNoYXJ0X3JlY3QgPSAob2ZmX3gsIGN1cnJfeSszMCwgdywgYmFyX2gpCisJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjaGFydF9yZWN0KToKKwkJZHJhd19ib3hfdGlja3MgKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJCWRyYXdfYW5ub3RhdGlvbnMgKGN0eCwgcHJvY190cmVlLCB0cmFjZS50aW1lcywgY2hhcnRfcmVjdCkKKwkJZHJhd19jaGFydCAoY3R4LCBJT19DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51c2VyICsgc2FtcGxlLnN5cyArIHNhbXBsZS5pbykgZm9yIHNhbXBsZSBpbiB0cmFjZS5jcHVfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCQkjIHJlbmRlciBDUFUgbG9hZAorCQlkcmF3X2NoYXJ0IChjdHgsIENQVV9DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51c2VyICsgc2FtcGxlLnN5cykgZm9yIHNhbXBsZSBpbiB0cmFjZS5jcHVfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCisJY3Vycl95ID0gY3Vycl95ICsgMzAgKyBiYXJfaAorCisJIyByZW5kZXIgc2Vjb25kIGNoYXJ0CisJZHJhd19sZWdlbmRfbGluZShjdHgsICJEaXNrIHRocm91Z2hwdXQiLCBESVNLX1RQVVRfQ09MT1IsIG9mZl94LCBjdXJyX3krMjAsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveChjdHgsICJEaXNrIHV0aWxpemF0aW9uIiwgSU9fQ09MT1IsIG9mZl94ICsgMTIwLCBjdXJyX3krMjAsIGxlZ19zKQorCisgICAgICAgICMgcmVuZGVyIEkvTyB1dGlsaXphdGlvbgorCWNoYXJ0X3JlY3QgPSAob2ZmX3gsIGN1cnJfeSszMCwgdywgYmFyX2gpCisJaWYgY2xpcF92aXNpYmxlIChjbGlwLCBjaGFydF9yZWN0KToKKwkJZHJhd19ib3hfdGlja3MgKGN0eCwgY2hhcnRfcmVjdCwgc2VjX3cpCisJCWRyYXdfYW5ub3RhdGlvbnMgKGN0eCwgcHJvY190cmVlLCB0cmFjZS50aW1lcywgY2hhcnRfcmVjdCkKKwkJZHJhd19jaGFydCAoY3R4LCBJT19DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgIFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51dGlsKSBmb3Igc2FtcGxlIGluIHRyYWNlLmRpc2tfc3RhdHNdLCBcCisJCQkgICAgcHJvY190cmVlLCBOb25lKQorCisJIyByZW5kZXIgZGlzayB0aHJvdWdocHV0CisJbWF4X3NhbXBsZSA9IG1heCAodHJhY2UuZGlza19zdGF0cywga2V5ID0gbGFtYmRhIHM6IHMudHB1dCkKKwlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGNoYXJ0X3JlY3QpOgorCQlkcmF3X2NoYXJ0IChjdHgsIERJU0tfVFBVVF9DT0xPUiwgRmFsc2UsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgICBbKHNhbXBsZS50aW1lLCBzYW1wbGUudHB1dCkgZm9yIHNhbXBsZSBpbiB0cmFjZS5kaXNrX3N0YXRzXSwgXAorCQkJICAgIHByb2NfdHJlZSwgTm9uZSkKKworCXBvc194ID0gb2ZmX3ggKyAoKG1heF9zYW1wbGUudGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIHcgLyBwcm9jX3RyZWUuZHVyYXRpb24pCisKKwlzaGlmdF94LCBzaGlmdF95ID0gLTIwLCAyMAorCWlmIChwb3NfeCA8IG9mZl94ICsgMjQ1KToKKwkJc2hpZnRfeCwgc2hpZnRfeSA9IDUsIDQwCisKKwlsYWJlbCA9ICIlZE1CL3MiICUgcm91bmQgKChtYXhfc2FtcGxlLnRwdXQpIC8gMTAyNC4wKQorCWRyYXdfdGV4dCAoY3R4LCBsYWJlbCwgRElTS19UUFVUX0NPTE9SLCBwb3NfeCArIHNoaWZ0X3gsIGN1cnJfeSArIHNoaWZ0X3kpCisKKwljdXJyX3kgPSBjdXJyX3kgKyAzMCArIGJhcl9oCisKKwkjIHJlbmRlciBtZW0gdXNhZ2UKKwljaGFydF9yZWN0ID0gKG9mZl94LCBjdXJyX3krMzAsIHcsIG1lbWluZm9fYmFyX2gpCisJbWVtX3N0YXRzID0gdHJhY2UubWVtX3N0YXRzCisJaWYgbWVtX3N0YXRzIGFuZCBjbGlwX3Zpc2libGUgKGNsaXAsIGNoYXJ0X3JlY3QpOgorCQltZW1fc2NhbGUgPSBtYXgoc2FtcGxlLnJlY29yZHNbJ01lbVRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snTWVtRnJlZSddIGZvciBzYW1wbGUgaW4gbWVtX3N0YXRzKQorCQlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiTWVtIGNhY2hlZCAoc2NhbGU6ICV1IE1pQikiICUgKGZsb2F0KG1lbV9zY2FsZSkgLyAxMDI0KSwgTUVNX0NBQ0hFRF9DT0xPUiwgb2ZmX3gsIGN1cnJfeSsyMCwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveChjdHgsICJVc2VkIiwgTUVNX1VTRURfQ09MT1IsIG9mZl94ICsgMjQwLCBjdXJyX3krMjAsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3goY3R4LCAiQnVmZmVycyIsIE1FTV9CVUZGRVJTX0NPTE9SLCBvZmZfeCArIDM2MCwgY3Vycl95KzIwLCBsZWdfcykKKwkJZHJhd19sZWdlbmRfbGluZShjdHgsICJTd2FwIChzY2FsZTogJXUgTWlCKSIgJSBtYXgoWyhzYW1wbGUucmVjb3Jkc1snU3dhcFRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snU3dhcEZyZWUnXSkvMTAyNCBmb3Igc2FtcGxlIGluIG1lbV9zdGF0c10pLCBcCisJCQkJIE1FTV9TV0FQX0NPTE9SLCBvZmZfeCArIDQ4MCwgY3Vycl95KzIwLCBsZWdfcykKKwkJZHJhd19ib3hfdGlja3MoY3R4LCBjaGFydF9yZWN0LCBzZWNfdykKKwkJZHJhd19hbm5vdGF0aW9ucyhjdHgsIHByb2NfdHJlZSwgdHJhY2UudGltZXMsIGNoYXJ0X3JlY3QpCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fQlVGRkVSU19DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnJlY29yZHNbJ01lbVRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snTWVtRnJlZSddKSBmb3Igc2FtcGxlIGluIHRyYWNlLm1lbV9zdGF0c10sIFwKKwkJCSAgIHByb2NfdHJlZSwgWzAsIG1lbV9zY2FsZV0pCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fVVNFRF9DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnJlY29yZHNbJ01lbVRvdGFsJ10gLSBzYW1wbGUucmVjb3Jkc1snTWVtRnJlZSddIC0gc2FtcGxlLnJlY29yZHNbJ0J1ZmZlcnMnXSkgZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHNdLCBcCisJCQkgICBwcm9jX3RyZWUsIFswLCBtZW1fc2NhbGVdKQorCQlkcmF3X2NoYXJ0KGN0eCwgTUVNX0NBQ0hFRF9DT0xPUiwgVHJ1ZSwgY2hhcnRfcmVjdCwgXAorCQkJICAgWyhzYW1wbGUudGltZSwgc2FtcGxlLnJlY29yZHNbJ0NhY2hlZCddKSBmb3Igc2FtcGxlIGluIG1lbV9zdGF0c10sIFwKKwkJCSAgIHByb2NfdHJlZSwgWzAsIG1lbV9zY2FsZV0pCisJCWRyYXdfY2hhcnQoY3R4LCBNRU1fU1dBUF9DT0xPUiwgRmFsc2UsIGNoYXJ0X3JlY3QsIFwKKwkJCSAgIFsoc2FtcGxlLnRpbWUsIGZsb2F0KHNhbXBsZS5yZWNvcmRzWydTd2FwVG90YWwnXSAtIHNhbXBsZS5yZWNvcmRzWydTd2FwRnJlZSddKSkgZm9yIHNhbXBsZSBpbiBtZW1fc3RhdHNdLCBcCisJCQkgICBwcm9jX3RyZWUsIE5vbmUpCisKKwkJY3Vycl95ID0gY3Vycl95ICsgbWVtaW5mb19iYXJfaAorCisJcmV0dXJuIGN1cnJfeQorCitkZWYgcmVuZGVyX3Byb2Nlc3Nlc19jaGFydChjdHgsIG9wdGlvbnMsIHRyYWNlLCBjdXJyX3ksIHcsIGgsIHNlY193KToKKyAgICAgICAgY2hhcnRfcmVjdCA9IFtvZmZfeCwgY3Vycl95K2hlYWRlcl9oLCB3LCBoIC0gMiAqIG9mZl95IC0gKGN1cnJfeStoZWFkZXJfaCkgKyBwcm9jX2hdCisKKwlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIkNvbmZpZ3VyZSIsIFwKKwkJCSBUQVNLX0NPTE9SX0NPTkZJR1VSRSwgb2ZmX3ggICwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiQ29tcGlsZSIsIFwKKwkJCSBUQVNLX0NPTE9SX0NPTVBJTEUsIG9mZl94KzEyMCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiSW5zdGFsbCIsIFwKKwkJCSBUQVNLX0NPTE9SX0lOU1RBTEwsIG9mZl94KzI0MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUG9wdWxhdGUgU3lzcm9vdCIsIFwKKwkJCSBUQVNLX0NPTE9SX1NZU1JPT1QsIG9mZl94KzM2MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUGFja2FnZSIsIFwKKwkJCSBUQVNLX0NPTE9SX1BBQ0tBR0UsIG9mZl94KzQ4MCwgY3Vycl95ICsgNDUsIGxlZ19zKQorCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUGFja2FnZSBXcml0ZSIsCisJCQkgVEFTS19DT0xPUl9QQUNLQUdFX1dSSVRFLCBvZmZfeCs2MDAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKworCWN0eC5zZXRfZm9udF9zaXplKFBST0NfVEVYVF9GT05UX1NJWkUpCisKKwlkcmF3X2JveF90aWNrcyhjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCWRyYXdfc2VjX2xhYmVscyhjdHgsIG9wdGlvbnMsIGNoYXJ0X3JlY3QsIHNlY193LCAzMCkKKworCXkgPSBjdXJyX3kraGVhZGVyX2gKKworICAgICAgICBvZmZzZXQgPSB0cmFjZS5taW4gb3IgbWluKHRyYWNlLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgZm9yIHMgaW4gc29ydGVkKHRyYWNlLnN0YXJ0LmtleXMoKSk6CisgICAgICAgICAgICBmb3IgdmFsIGluIHNvcnRlZCh0cmFjZS5zdGFydFtzXSk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbnMuYXBwX29wdGlvbnMuc2hvd19hbGwgYW5kIFwKKyAgICAgICAgICAgICAgICAgICB0cmFjZS5wcm9jZXNzZXNbdmFsXVsxXSAtIHMgPCBvcHRpb25zLmFwcF9vcHRpb25zLm1pbnRpbWU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdGFzayA9IHZhbC5zcGxpdCgiOiIpWzFdCisgICAgICAgICAgICAgICAgI3ByaW50IHZhbAorICAgICAgICAgICAgICAgICNwcmludCB0cmFjZS5wcm9jZXNzZXNbdmFsXVsxXQorICAgICAgICAgICAgICAgICNwcmludCBzCisgICAgICAgICAgICAgICAgeCA9IGNoYXJ0X3JlY3RbMF0gKyAocyAtIG9mZnNldCkgKiBzZWNfdworICAgICAgICAgICAgICAgIHcgPSAoKHRyYWNlLnByb2Nlc3Nlc1t2YWxdWzFdIC0gcykgKiBzZWNfdykKKworICAgICAgICAgICAgICAgICNwcmludCAicHJvYyBhdCAlcyAlcyAlcyAlcyIgJSAoeCwgeSwgdywgcHJvY19oKQorICAgICAgICAgICAgICAgIGNvbCA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiB0YXNrID09ICJkb19jb21waWxlIjoKKyAgICAgICAgICAgICAgICAgICAgY29sID0gVEFTS19DT0xPUl9DT01QSUxFCisgICAgICAgICAgICAgICAgZWxpZiB0YXNrID09ICJkb19jb25maWd1cmUiOgorICAgICAgICAgICAgICAgICAgICBjb2wgPSBUQVNLX0NPTE9SX0NPTkZJR1VSRQorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9faW5zdGFsbCI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfSU5TVEFMTAorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fcG9wdWxhdGVfc3lzcm9vdCI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfU1lTUk9PVAorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fcGFja2FnZSI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfUEFDS0FHRQorICAgICAgICAgICAgICAgIGVsaWYgdGFzayA9PSAiZG9fcGFja2FnZV93cml0ZV9ycG0iIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgIHRhc2sgPT0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIiBvciBcCisgICAgICAgICAgICAgICAgICAgICB0YXNrID09ICJkb19wYWNrYWdlX3dyaXRlX2lwayI6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFRBU0tfQ09MT1JfUEFDS0FHRV9XUklURQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbCA9IFdISVRFCisKKyAgICAgICAgICAgICAgICBpZiBjb2w6CisgICAgICAgICAgICAgICAgICAgIGRyYXdfZmlsbF9yZWN0KGN0eCwgY29sLCAoeCwgeSwgdywgcHJvY19oKSkKKyAgICAgICAgICAgICAgICBkcmF3X3JlY3QoY3R4LCBQUk9DX0JPUkRFUl9DT0xPUiwgKHgsIHksIHcsIHByb2NfaCkpCisKKyAgICAgICAgICAgICAgICBkcmF3X2xhYmVsX2luX2JveChjdHgsIFBST0NfVEVYVF9DT0xPUiwgdmFsLCB4LCB5ICsgcHJvY19oIC0gNCwgdywgcHJvY19oKQorICAgICAgICAgICAgICAgIHkgPSB5ICsgcHJvY19oCisKKwlyZXR1cm4gY3Vycl95CisKKyMKKyMgUmVuZGVyIHRoZSBjaGFydC4KKyMKK2RlZiByZW5kZXIoY3R4LCBvcHRpb25zLCB4c2NhbGUsIHRyYWNlKToKKwkodywgaCkgPSBleHRlbnRzIChvcHRpb25zLCB4c2NhbGUsIHRyYWNlKQorCWdsb2JhbCBPUFRJT05TCisJT1BUSU9OUyA9IG9wdGlvbnMuYXBwX29wdGlvbnMKKworCSMgeCwgeSwgdywgaAorCWNsaXAgPSBjdHguY2xpcF9leHRlbnRzKCkKKworCXNlY193ID0gaW50ICh4c2NhbGUgKiBzZWNfd19iYXNlKQorCWN0eC5zZXRfbGluZV93aWR0aCgxLjApCisJY3R4LnNlbGVjdF9mb250X2ZhY2UoRk9OVF9OQU1FKQorCWRyYXdfZmlsbF9yZWN0KGN0eCwgV0hJVEUsICgwLCAwLCBtYXgodywgTUlOX0lNR19XKSwgaCkpCisJdyAtPSAyKm9mZl94CisJY3Vycl95ID0gb2ZmX3k7CisKKwljdXJyX3kgPSByZW5kZXJfcHJvY2Vzc2VzX2NoYXJ0IChjdHgsIG9wdGlvbnMsIHRyYWNlLCBjdXJyX3ksIHcsIGgsIHNlY193KQorCisJcmV0dXJuCisKKwlwcm9jX3RyZWUgPSBvcHRpb25zLnByb2NfdHJlZSAodHJhY2UpCisKKwkjIGRyYXcgdGhlIHRpdGxlIGFuZCBoZWFkZXJzCisJaWYgcHJvY190cmVlLmlkbGU6CisJCWR1cmF0aW9uID0gcHJvY190cmVlLmlkbGUKKwllbHNlOgorCQlkdXJhdGlvbiA9IHByb2NfdHJlZS5kdXJhdGlvbgorCisJaWYgbm90IG9wdGlvbnMua2VybmVsX29ubHk6CisJCWN1cnJfeSA9IGRyYXdfaGVhZGVyIChjdHgsIHRyYWNlLmhlYWRlcnMsIGR1cmF0aW9uKQorCWVsc2U6CisJCWN1cnJfeSA9IG9mZl95OworCisJaWYgb3B0aW9ucy5jaGFydHM6CisJCWN1cnJfeSA9IHJlbmRlcl9jaGFydHMgKGN0eCwgb3B0aW9ucywgY2xpcCwgdHJhY2UsIGN1cnJfeSwgdywgaCwgc2VjX3cpCisKKwkjIGRyYXcgcHJvY2VzcyBib3hlcworCXByb2NfaGVpZ2h0ID0gaAorCWlmIHByb2NfdHJlZS50YXNrc3RhdHMgYW5kIG9wdGlvbnMuY3VtdWxhdGl2ZToKKwkJcHJvY19oZWlnaHQgLT0gQ1VNTF9IRUlHSFQKKworCWRyYXdfcHJvY2Vzc19iYXJfY2hhcnQoY3R4LCBjbGlwLCBvcHRpb25zLCBwcm9jX3RyZWUsIHRyYWNlLnRpbWVzLAorCQkJICAgICAgIGN1cnJfeSwgdywgcHJvY19oZWlnaHQsIHNlY193KQorCisJY3Vycl95ID0gcHJvY19oZWlnaHQKKwljdHguc2V0X2ZvbnRfc2l6ZShTSUdfRk9OVF9TSVpFKQorCWRyYXdfdGV4dChjdHgsIFNJR05BVFVSRSwgU0lHX0NPTE9SLCBvZmZfeCArIDUsIHByb2NfaGVpZ2h0IC0gOCkKKworCSMgZHJhdyBhIGN1bXVsYXRpdmUgQ1BVLXRpbWUtcGVyLXByb2Nlc3MgZ3JhcGgKKwlpZiBwcm9jX3RyZWUudGFza3N0YXRzIGFuZCBvcHRpb25zLmN1bXVsYXRpdmU6CisJCWN1bWxfcmVjdCA9IChvZmZfeCwgY3Vycl95ICsgb2ZmX3ksIHcsIENVTUxfSEVJR0hULzIgLSBvZmZfeSAqIDIpCisJCWlmIGNsaXBfdmlzaWJsZSAoY2xpcCwgY3VtbF9yZWN0KToKKwkJCWRyYXdfY3VtbF9ncmFwaChjdHgsIHByb2NfdHJlZSwgY3VtbF9yZWN0LCBkdXJhdGlvbiwgc2VjX3csIFNUQVRfVFlQRV9DUFUpCisKKwkjIGRyYXcgYSBjdW11bGF0aXZlIEkvTy10aW1lLXBlci1wcm9jZXNzIGdyYXBoCisJaWYgcHJvY190cmVlLnRhc2tzdGF0cyBhbmQgb3B0aW9ucy5jdW11bGF0aXZlOgorCQljdW1sX3JlY3QgPSAob2ZmX3gsIGN1cnJfeSArIG9mZl95ICogMTAwLCB3LCBDVU1MX0hFSUdIVC8yIC0gb2ZmX3kgKiAyKQorCQlpZiBjbGlwX3Zpc2libGUgKGNsaXAsIGN1bWxfcmVjdCk6CisJCQlkcmF3X2N1bWxfZ3JhcGgoY3R4LCBwcm9jX3RyZWUsIGN1bWxfcmVjdCwgZHVyYXRpb24sIHNlY193LCBTVEFUX1RZUEVfSU8pCisKK2RlZiBkcmF3X3Byb2Nlc3NfYmFyX2NoYXJ0KGN0eCwgY2xpcCwgb3B0aW9ucywgcHJvY190cmVlLCB0aW1lcywgY3Vycl95LCB3LCBoLCBzZWNfdyk6CisJaGVhZGVyX3NpemUgPSAwCisJaWYgbm90IG9wdGlvbnMua2VybmVsX29ubHk6CisJCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiUnVubmluZyAoJWNwdSkiLAorCQkJCSBQUk9DX0NPTE9SX1IsIG9mZl94ICAgICwgY3Vycl95ICsgNDUsIGxlZ19zKQorCQlkcmF3X2xlZ2VuZF9ib3ggKGN0eCwgIlVuaW50LnNsZWVwIChJL08pIiwKKwkJCQkgUFJPQ19DT0xPUl9ELCBvZmZfeCsxMjAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwkJZHJhd19sZWdlbmRfYm94IChjdHgsICJTbGVlcGluZyIsCisJCQkJIFBST0NfQ09MT1JfUywgb2ZmX3grMjQwLCBjdXJyX3kgKyA0NSwgbGVnX3MpCisJCWRyYXdfbGVnZW5kX2JveCAoY3R4LCAiWm9tYmllIiwKKwkJCQkgUFJPQ19DT0xPUl9aLCBvZmZfeCszNjAsIGN1cnJfeSArIDQ1LCBsZWdfcykKKwkJaGVhZGVyX3NpemUgPSA0NQorCisJY2hhcnRfcmVjdCA9IFtvZmZfeCwgY3Vycl95ICsgaGVhZGVyX3NpemUgKyAxNSwKKwkJICAgICAgdywgaCAtIDIgKiBvZmZfeSAtIChjdXJyX3kgKyBoZWFkZXJfc2l6ZSArIDE1KSArIHByb2NfaF0KKwljdHguc2V0X2ZvbnRfc2l6ZSAoUFJPQ19URVhUX0ZPTlRfU0laRSkKKworCWRyYXdfYm94X3RpY2tzIChjdHgsIGNoYXJ0X3JlY3QsIHNlY193KQorCWlmIHNlY193ID4gMTAwOgorCQluc2VjID0gMQorCWVsc2U6CisJCW5zZWMgPSA1CisJZHJhd19zZWNfbGFiZWxzIChjdHgsIG9wdGlvbnMsIGNoYXJ0X3JlY3QsIHNlY193LCBuc2VjKQorCWRyYXdfYW5ub3RhdGlvbnMgKGN0eCwgcHJvY190cmVlLCB0aW1lcywgY2hhcnRfcmVjdCkKKworCXkgPSBjdXJyX3kgKyA2MAorCWZvciByb290IGluIHByb2NfdHJlZS5wcm9jZXNzX3RyZWU6CisJCWRyYXdfcHJvY2Vzc2VzX3JlY3Vyc2l2ZWx5KGN0eCwgcm9vdCwgcHJvY190cmVlLCB5LCBwcm9jX2gsIGNoYXJ0X3JlY3QsIGNsaXApCisJCXkgPSB5ICsgcHJvY19oICogcHJvY190cmVlLm51bV9ub2Rlcyhbcm9vdF0pCisKKworZGVmIGRyYXdfaGVhZGVyIChjdHgsIGhlYWRlcnMsIGR1cmF0aW9uKToKKyAgICB0b3Nob3cgPSBbCisgICAgICAoJ3N5c3RlbS51bmFtZScsICd1bmFtZScsIGxhbWJkYSBzOiBzKSwKKyAgICAgICgnc3lzdGVtLnJlbGVhc2UnLCAncmVsZWFzZScsIGxhbWJkYSBzOiBzKSwKKyAgICAgICgnc3lzdGVtLmNwdScsICdDUFUnLCBsYW1iZGEgczogcmUuc3ViKCdtb2RlbCBuYW1lXHMqOlxzKicsICcnLCBzLCAxKSksCisgICAgICAoJ3N5c3RlbS5rZXJuZWwub3B0aW9ucycsICdrZXJuZWwgb3B0aW9ucycsIGxhbWJkYSBzOiBzKSwKKyAgICBdCisKKyAgICBoZWFkZXJfeSA9IGN0eC5mb250X2V4dGVudHMoKVsyXSArIDEwCisgICAgY3R4LnNldF9mb250X3NpemUoVElUTEVfRk9OVF9TSVpFKQorICAgIGRyYXdfdGV4dChjdHgsIGhlYWRlcnNbJ3RpdGxlJ10sIFRFWFRfQ09MT1IsIG9mZl94LCBoZWFkZXJfeSkKKyAgICBjdHguc2V0X2ZvbnRfc2l6ZShURVhUX0ZPTlRfU0laRSkKKworICAgIGZvciAoaGVhZGVya2V5LCBoZWFkZXJ0aXRsZSwgbWFuZ2xlKSBpbiB0b3Nob3c6CisgICAgICAgIGhlYWRlcl95ICs9IGN0eC5mb250X2V4dGVudHMoKVsyXQorICAgICAgICBpZiBoZWFkZXJrZXkgaW4gaGVhZGVyczoKKyAgICAgICAgICAgIHZhbHVlID0gaGVhZGVycy5nZXQoaGVhZGVya2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICB0eHQgPSBoZWFkZXJ0aXRsZSArICc6ICcgKyBtYW5nbGUodmFsdWUpCisgICAgICAgIGRyYXdfdGV4dChjdHgsIHR4dCwgVEVYVF9DT0xPUiwgb2ZmX3gsIGhlYWRlcl95KQorCisgICAgZHVyID0gZHVyYXRpb24gLyAxMDAuMAorICAgIHR4dCA9ICd0aW1lIDogJTAyZDolMDUuMmYnICUgKG1hdGguZmxvb3IoZHVyLzYwKSwgZHVyIC0gNjAgKiBtYXRoLmZsb29yKGR1ci82MCkpCisgICAgaWYgaGVhZGVycy5nZXQoJ3N5c3RlbS5tYXhwaWQnKSBpcyBub3QgTm9uZToKKyAgICAgICAgdHh0ID0gdHh0ICsgJyAgICAgIG1heCBwaWQ6ICVzJyAlIChoZWFkZXJzLmdldCgnc3lzdGVtLm1heHBpZCcpKQorCisgICAgaGVhZGVyX3kgKz0gY3R4LmZvbnRfZXh0ZW50cygpWzJdCisgICAgZHJhd190ZXh0IChjdHgsIHR4dCwgVEVYVF9DT0xPUiwgb2ZmX3gsIGhlYWRlcl95KQorCisgICAgcmV0dXJuIGhlYWRlcl95CisKK2RlZiBkcmF3X3Byb2Nlc3Nlc19yZWN1cnNpdmVseShjdHgsIHByb2MsIHByb2NfdHJlZSwgeSwgcHJvY19oLCByZWN0LCBjbGlwKSA6CisJeCA9IHJlY3RbMF0gKyAgKChwcm9jLnN0YXJ0X3RpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiByZWN0WzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCXcgPSAoKHByb2MuZHVyYXRpb24pICogcmVjdFsyXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKworCWRyYXdfcHJvY2Vzc19hY3Rpdml0eV9jb2xvcnMoY3R4LCBwcm9jLCBwcm9jX3RyZWUsIHgsIHksIHcsIHByb2NfaCwgcmVjdCwgY2xpcCkKKwlkcmF3X3JlY3QoY3R4LCBQUk9DX0JPUkRFUl9DT0xPUiwgKHgsIHksIHcsIHByb2NfaCkpCisJaXBpZCA9IGludChwcm9jLnBpZCkKKwlpZiBub3QgT1BUSU9OUy5zaG93X2FsbDoKKwkJY21kU3RyaW5nID0gcHJvYy5jbWQKKwllbHNlOgorCQljbWRTdHJpbmcgPSAnJworCWlmIChPUFRJT05TLnNob3dfcGlkIG9yIE9QVElPTlMuc2hvd19hbGwpIGFuZCBpcGlkIGlzIG5vdCAwOgorCQljbWRTdHJpbmcgPSBjbWRTdHJpbmcgKyAiIFsiICsgc3RyKGlwaWQgLy8gMTAwMCkgKyAiXSIKKwlpZiBPUFRJT05TLnNob3dfYWxsOgorCQlpZiBwcm9jLmFyZ3M6CisJCQljbWRTdHJpbmcgPSBjbWRTdHJpbmcgKyAiICciICsgIicgJyIuam9pbihwcm9jLmFyZ3MpICsgIiciCisJCWVsc2U6CisJCQljbWRTdHJpbmcgPSBjbWRTdHJpbmcgKyAiICIgKyBwcm9jLmV4ZQorCisJZHJhd19sYWJlbF9pbl9ib3goY3R4LCBQUk9DX1RFWFRfQ09MT1IsIGNtZFN0cmluZywgeCwgeSArIHByb2NfaCAtIDQsIHcsIHJlY3RbMF0gKyByZWN0WzJdKQorCisJbmV4dF95ID0geSArIHByb2NfaAorCWZvciBjaGlsZCBpbiBwcm9jLmNoaWxkX2xpc3Q6CisJCWlmIG5leHRfeSA+IGNsaXBbMV0gKyBjbGlwWzNdOgorCQkJYnJlYWsKKwkJY2hpbGRfeCwgY2hpbGRfeSA9IGRyYXdfcHJvY2Vzc2VzX3JlY3Vyc2l2ZWx5KGN0eCwgY2hpbGQsIHByb2NfdHJlZSwgbmV4dF95LCBwcm9jX2gsIHJlY3QsIGNsaXApCisJCWRyYXdfcHJvY2Vzc19jb25uZWN0aW5nX2xpbmVzKGN0eCwgeCwgeSwgY2hpbGRfeCwgY2hpbGRfeSwgcHJvY19oKQorCQluZXh0X3kgPSBuZXh0X3kgKyBwcm9jX2ggKiBwcm9jX3RyZWUubnVtX25vZGVzKFtjaGlsZF0pCisKKwlyZXR1cm4geCwgeQorCisKK2RlZiBkcmF3X3Byb2Nlc3NfYWN0aXZpdHlfY29sb3JzKGN0eCwgcHJvYywgcHJvY190cmVlLCB4LCB5LCB3LCBwcm9jX2gsIHJlY3QsIGNsaXApOgorCisJaWYgeSA+IGNsaXBbMV0gKyBjbGlwWzNdIG9yIHkgKyBwcm9jX2ggKyAyIDwgY2xpcFsxXToKKwkJcmV0dXJuCisKKwlkcmF3X2ZpbGxfcmVjdChjdHgsIFBST0NfQ09MT1JfUywgKHgsIHksIHcsIHByb2NfaCkpCisKKwlsYXN0X3R4ID0gLTEKKwlmb3Igc2FtcGxlIGluIHByb2Muc2FtcGxlcyA6CisJCXR4ID0gcmVjdFswXSArIHJvdW5kKCgoc2FtcGxlLnRpbWUgLSBwcm9jX3RyZWUuc3RhcnRfdGltZSkgKiByZWN0WzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKSkKKworCQkjIHNhbXBsZXMgYXJlIHNvcnRlZCBjaHJvbm9sb2dpY2FsbHkKKwkJaWYgdHggPCBjbGlwWzBdOgorCQkJY29udGludWUKKwkJaWYgdHggPiBjbGlwWzBdICsgY2xpcFsyXToKKwkJCWJyZWFrCisKKwkJdHcgPSByb3VuZChwcm9jX3RyZWUuc2FtcGxlX3BlcmlvZCAqIHJlY3RbMl0gLyBmbG9hdChwcm9jX3RyZWUuZHVyYXRpb24pKQorCQlpZiBsYXN0X3R4ICE9IC0xIGFuZCBhYnMobGFzdF90eCAtIHR4KSA8PSB0dzoKKwkJCXR3IC09IGxhc3RfdHggLSB0eAorCQkJdHggPSBsYXN0X3R4CisJCXR3ID0gbWF4ICh0dywgMSkgIyBuaWNlIHRvIHNlZSBhdCBsZWFzdCBzb21ldGhpbmcKKworCQlsYXN0X3R4ID0gdHggKyB0dworCQlzdGF0ZSA9IGdldF9wcm9jX3N0YXRlKCBzYW1wbGUuc3RhdGUgKQorCisJCWNvbG9yID0gU1RBVEVfQ09MT1JTW3N0YXRlXQorCQlpZiBzdGF0ZSA9PSBTVEFURV9SVU5OSU5HOgorCQkJYWxwaGEgPSBtaW4gKHNhbXBsZS5jcHVfc2FtcGxlLnVzZXIgKyBzYW1wbGUuY3B1X3NhbXBsZS5zeXMsIDEuMCkKKwkJCWNvbG9yID0gdHVwbGUobGlzdChQUk9DX0NPTE9SX1JbMDozXSkgKyBbYWxwaGFdKQorIwkJCXByaW50ICJyZW5kZXIgdGltZSAlZCBbIHR4ICVkIHR3ICVkIF0sIHNhbXBsZSBzdGF0ZSAlcyBjb2xvciAlcyBhbHBoYSAlZyIgJSAoc2FtcGxlLnRpbWUsIHR4LCB0dywgc3RhdGUsIGNvbG9yLCBhbHBoYSkKKwkJZWxpZiBzdGF0ZSA9PSBTVEFURV9TTEVFUElORzoKKwkJCWNvbnRpbnVlCisKKwkJZHJhd19maWxsX3JlY3QoY3R4LCBjb2xvciwgKHR4LCB5LCB0dywgcHJvY19oKSkKKworZGVmIGRyYXdfcHJvY2Vzc19jb25uZWN0aW5nX2xpbmVzKGN0eCwgcHgsIHB5LCB4LCB5LCBwcm9jX2gpOgorCWN0eC5zZXRfc291cmNlX3JnYmEoKkRFUF9DT0xPUikKKwljdHguc2V0X2Rhc2goWzIsIDJdKQorCWlmIGFicyhweCAtIHgpIDwgMzoKKwkJZGVwX29mZl94ID0gMworCQlkZXBfb2ZmX3kgPSBwcm9jX2ggLyA0CisJCWN0eC5tb3ZlX3RvKHgsIHkgKyBwcm9jX2ggLyAyKQorCQljdHgubGluZV90byhweCAtIGRlcF9vZmZfeCwgeSArIHByb2NfaCAvIDIpCisJCWN0eC5saW5lX3RvKHB4IC0gZGVwX29mZl94LCBweSAtIGRlcF9vZmZfeSkKKwkJY3R4LmxpbmVfdG8ocHgsIHB5IC0gZGVwX29mZl95KQorCWVsc2U6CisJCWN0eC5tb3ZlX3RvKHgsIHkgKyBwcm9jX2ggLyAyKQorCQljdHgubGluZV90byhweCwgeSArIHByb2NfaCAvIDIpCisJCWN0eC5saW5lX3RvKHB4LCBweSkKKwljdHguc3Ryb2tlKCkKKwljdHguc2V0X2Rhc2goW10pCisKKyMgZWxpZGUgdGhlIGJvb3RjaGFydCBjb2xsZWN0b3IgLSBpdCBpcyBxdWl0ZSBkaXN0b3J0aW5nCitkZWYgZWxpZGVfYm9vdGNoYXJ0KHByb2MpOgorCXJldHVybiBwcm9jLmNtZCA9PSAnYm9vdGNoYXJ0ZCcgb3IgcHJvYy5jbWQgPT0gJ2Jvb3RjaGFydC1jb2xsZScKKworY2xhc3MgQ3VtbFNhbXBsZToKKwlkZWYgX19pbml0X18oc2VsZiwgcHJvYyk6CisJCXNlbGYuY21kID0gcHJvYy5jbWQKKwkJc2VsZi5zYW1wbGVzID0gW10KKwkJc2VsZi5tZXJnZV9zYW1wbGVzIChwcm9jKQorCQlzZWxmLmNvbG9yID0gTm9uZQorCisJZGVmIG1lcmdlX3NhbXBsZXMoc2VsZiwgcHJvYyk6CisJCXNlbGYuc2FtcGxlcy5leHRlbmQgKHByb2Muc2FtcGxlcykKKwkJc2VsZi5zYW1wbGVzLnNvcnQgKGtleSA9IGxhbWJkYSBwOiBwLnRpbWUpCisKKwlkZWYgbmV4dChzZWxmKToKKwkJZ2xvYmFsIHBhbGV0dGVfaWR4CisJCXBhbGV0dGVfaWR4ICs9IEhTVl9TVEVQCisJCXJldHVybiBwYWxldHRlX2lkeAorCisJZGVmIGdldF9jb2xvcihzZWxmKToKKwkJaWYgc2VsZi5jb2xvciBpcyBOb25lOgorCQkJaSA9IHNlbGYubmV4dCgpICUgSFNWX01BWF9NT0QKKwkJCWggPSAwLjAKKwkJCWlmIGkgaXMgbm90IDA6CisJCQkJaCA9ICgxLjAgKiBpKSAvIEhTVl9NQVhfTU9ECisJCQlzID0gMC41CisJCQl2ID0gMS4wCisJCQljID0gY29sb3JzeXMuaHN2X3RvX3JnYiAoaCwgcywgdikKKwkJCXNlbGYuY29sb3IgPSAoY1swXSwgY1sxXSwgY1syXSwgMS4wKQorCQlyZXR1cm4gc2VsZi5jb2xvcgorCisKK2RlZiBkcmF3X2N1bWxfZ3JhcGgoY3R4LCBwcm9jX3RyZWUsIGNoYXJ0X2JvdW5kcywgZHVyYXRpb24sIHNlY193LCBzdGF0X3R5cGUpOgorCWdsb2JhbCBwYWxldHRlX2lkeAorCXBhbGV0dGVfaWR4ID0gMAorCisJdGltZV9oYXNoID0ge30KKwl0b3RhbF90aW1lID0gMC4wCisJbV9wcm9jX2xpc3QgPSB7fQorCisJaWYgc3RhdF90eXBlIGlzIFNUQVRfVFlQRV9DUFU6CisJCXNhbXBsZV92YWx1ZSA9ICdjcHUnCisJZWxzZToKKwkJc2FtcGxlX3ZhbHVlID0gJ2lvJworCWZvciBwcm9jIGluIHByb2NfdHJlZS5wcm9jZXNzX2xpc3Q6CisJCWlmIGVsaWRlX2Jvb3RjaGFydChwcm9jKToKKwkJCWNvbnRpbnVlCisKKwkJZm9yIHNhbXBsZSBpbiBwcm9jLnNhbXBsZXM6CisJCQl0b3RhbF90aW1lICs9IGdldGF0dHIoc2FtcGxlLmNwdV9zYW1wbGUsIHNhbXBsZV92YWx1ZSkKKwkJCWlmIG5vdCBzYW1wbGUudGltZSBpbiB0aW1lX2hhc2g6CisJCQkJdGltZV9oYXNoW3NhbXBsZS50aW1lXSA9IDEKKworCQkjIG1lcmdlIHBpZHMgd2l0aCB0aGUgc2FtZSBjbWQKKwkJaWYgbm90IHByb2MuY21kIGluIG1fcHJvY19saXN0OgorCQkJbV9wcm9jX2xpc3RbcHJvYy5jbWRdID0gQ3VtbFNhbXBsZSAocHJvYykKKwkJCWNvbnRpbnVlCisJCXMgPSBtX3Byb2NfbGlzdFtwcm9jLmNtZF0KKwkJcy5tZXJnZV9zYW1wbGVzIChwcm9jKQorCisJIyBhbGwgdGhlIHNhbXBsZSB0aW1lcworCXRpbWVzID0gc29ydGVkKHRpbWVfaGFzaCkKKwlpZiBsZW4gKHRpbWVzKSA8IDI6CisJCXByaW50KCJkZWdlbmVyYXRlIGJvb3QgY2hhcnQiKQorCQlyZXR1cm4KKworCXBpeF9wZXJfbnMgPSBjaGFydF9ib3VuZHNbM10gLyB0b3RhbF90aW1lCisjCXByaW50ICJ0b3RhbCB0aW1lOiAlZyBwaXgtcGVyLW5zICVnIiAlICh0b3RhbF90aW1lLCBwaXhfcGVyX25zKQorCisJIyBGSVhNRTogd2UgaGF2ZSBkdXBsaWNhdGVzIGluIHRoZSBwcm9jZXNzIGxpc3QgdG9vIFshXSAtIHdoeSAhPworCisJIyBSZW5kZXIgYm90dG9tIHVwLCBsZWZ0IHRvIHJpZ2h0CisJYmVsb3cgPSB7fQorCWZvciB0aW1lIGluIHRpbWVzOgorCQliZWxvd1t0aW1lXSA9IGNoYXJ0X2JvdW5kc1sxXSArIGNoYXJ0X2JvdW5kc1szXQorCisJIyBzYW1lIGNvbG9ycyBlYWNoIHRpbWUgd2UgcmVuZGVyCisJcmFuZG9tLnNlZWQgKDApCisKKwljdHguc2V0X2xpbmVfd2lkdGgoMSkKKworCWxlZ2VuZHMgPSBbXQorCWxhYmVscyA9IFtdCisKKwkjIHJlbmRlciBlYWNoIHBpZCBpbiBvcmRlcgorCWZvciBjcyBpbiBtX3Byb2NfbGlzdC52YWx1ZXMoKToKKwkJcm93ID0ge30KKwkJY3VtbCA9IDAuMAorCisJCSMgcHJpbnQgInBpZCA6ICVzIC0+ICVnIHNhbXBsZXMgJWQiICUgKHByb2MuY21kLCBjdW1sLCBsZW4gKGNzLnNhbXBsZXMpKQorCQlmb3Igc2FtcGxlIGluIGNzLnNhbXBsZXM6CisJCQljdW1sICs9IGdldGF0dHIoc2FtcGxlLmNwdV9zYW1wbGUsIHNhbXBsZV92YWx1ZSkKKwkJCXJvd1tzYW1wbGUudGltZV0gPSBjdW1sCisKKwkJcHJvY2Vzc190b3RhbF90aW1lID0gY3VtbAorCisJCSMgaGlkZSByZWFsbHkgdGlueSBwcm9jZXNzZXMKKwkJaWYgY3VtbCAqIHBpeF9wZXJfbnMgPD0gMjoKKwkJCWNvbnRpbnVlCisKKwkJbGFzdF90aW1lID0gdGltZXNbMF0KKwkJeSA9IGxhc3RfYmVsb3cgPSBiZWxvd1tsYXN0X3RpbWVdCisJCWxhc3RfY3VtbCA9IGN1bWwgPSAwLjAKKworCQljdHguc2V0X3NvdXJjZV9yZ2JhKCpjcy5nZXRfY29sb3IoKSkKKwkJZm9yIHRpbWUgaW4gdGltZXM6CisJCQlyZW5kZXJfc2VnID0gRmFsc2UKKworCQkJIyBkaWQgdGhlIHVuZGVybHlpbmcgdHJlbmQgaW5jcmVhc2UgPworCQkJaWYgYmVsb3dbdGltZV0gIT0gbGFzdF9iZWxvdzoKKwkJCQlsYXN0X2JlbG93ID0gYmVsb3dbbGFzdF90aW1lXQorCQkJCWxhc3RfY3VtbCA9IGN1bWwKKwkJCQlyZW5kZXJfc2VnID0gVHJ1ZQorCisJCQkjIGRpZCB3ZSBtb3ZlIHVwIGEgcGl4ZWwgaW5jcmVhc2UgPworCQkJaWYgdGltZSBpbiByb3c6CisJCQkJbmMgPSByb3VuZCAocm93W3RpbWVdICogcGl4X3Blcl9ucykKKwkJCQlpZiBuYyAhPSBjdW1sOgorCQkJCQlsYXN0X2N1bWwgPSBjdW1sCisJCQkJCWN1bWwgPSBuYworCQkJCQlyZW5kZXJfc2VnID0gVHJ1ZQorCisjCQkJaWYgbGFzdF9jdW1sID4gY3VtbDoKKyMJCQkJYXNzZXJ0IGZhaWwgLi4uIC0gdW4tc29ydGVkIHByb2Nlc3Mgc2FtcGxlcworCisJCQkjIGRyYXcgdGhlIHRyYWlsaW5nIHJlY3RhbmdsZSBmcm9tIHRoZSBsYXN0IHRpbWUgdG8KKwkJCSMgYmVmb3JlIG5vdywgYXQgdGhlIGhlaWdodCBvZiB0aGUgbGFzdCBzZWdtZW50LgorCQkJaWYgcmVuZGVyX3NlZzoKKwkJCQl3ID0gbWF0aC5jZWlsICgodGltZSAtIGxhc3RfdGltZSkgKiBjaGFydF9ib3VuZHNbMl0gLyBwcm9jX3RyZWUuZHVyYXRpb24pICsgMQorCQkJCXggPSBjaGFydF9ib3VuZHNbMF0gKyByb3VuZCgobGFzdF90aW1lIC0gcHJvY190cmVlLnN0YXJ0X3RpbWUpICogY2hhcnRfYm91bmRzWzJdIC8gcHJvY190cmVlLmR1cmF0aW9uKQorCQkJCWN0eC5yZWN0YW5nbGUgKHgsIGJlbG93W2xhc3RfdGltZV0gLSBsYXN0X2N1bWwsIHcsIGxhc3RfY3VtbCkKKwkJCQljdHguZmlsbCgpCisjCQkJCWN0eC5zdHJva2UoKQorCQkJCWxhc3RfdGltZSA9IHRpbWUKKwkJCQl5ID0gYmVsb3cgW3RpbWVdIC0gY3VtbAorCisJCQlyb3dbdGltZV0gPSB5CisKKwkJIyByZW5kZXIgdGhlIGxhc3Qgc2VnbWVudAorCQl4ID0gY2hhcnRfYm91bmRzWzBdICsgcm91bmQoKGxhc3RfdGltZSAtIHByb2NfdHJlZS5zdGFydF90aW1lKSAqIGNoYXJ0X2JvdW5kc1syXSAvIHByb2NfdHJlZS5kdXJhdGlvbikKKwkJeSA9IGJlbG93W2xhc3RfdGltZV0gLSBjdW1sCisJCWN0eC5yZWN0YW5nbGUgKHgsIHksIGNoYXJ0X2JvdW5kc1syXSAtIHgsIGN1bWwpCisJCWN0eC5maWxsKCkKKyMJCWN0eC5zdHJva2UoKQorCisJCSMgcmVuZGVyIGxlZ2VuZCBpZiBpdCB3aWxsIGZpdAorCQlpZiBjdW1sID4gODoKKwkJCWxhYmVsID0gY3MuY21kCisJCQlleHRudHMgPSBjdHgudGV4dF9leHRlbnRzKGxhYmVsKQorCQkJbGFiZWxfdyA9IGV4dG50c1syXQorCQkJbGFiZWxfaCA9IGV4dG50c1szXQorIwkJCXByaW50ICJUZXh0IGV4dGVudHMgJWcgYnkgJWciICUgKGxhYmVsX3csIGxhYmVsX2gpCisJCQlsYWJlbHMuYXBwZW5kKChsYWJlbCwKKwkJCQkgICAgICAgY2hhcnRfYm91bmRzWzBdICsgY2hhcnRfYm91bmRzWzJdIC0gbGFiZWxfdyAtIG9mZl94ICogMiwKKwkJCQkgICAgICAgeSArIChjdW1sICsgbGFiZWxfaCkgLyAyKSkKKwkJCWlmIGNzIGluIGxlZ2VuZHM6CisJCQkJcHJpbnQoIkFSR0ggLSBkdXBsaWNhdGUgcHJvY2VzcyBpbiBsaXN0ICEiKQorCisJCWxlZ2VuZHMuYXBwZW5kICgoY3MsIHByb2Nlc3NfdG90YWxfdGltZSkpCisKKwkJYmVsb3cgPSByb3cKKworCSMgcmVuZGVyIGdyaWQtbGluZXMgb3ZlciB0aGUgdG9wCisJZHJhd19ib3hfdGlja3MoY3R4LCBjaGFydF9ib3VuZHMsIHNlY193KQorCisJIyByZW5kZXIgbGFiZWxzCisJZm9yIGwgaW4gbGFiZWxzOgorCQlkcmF3X3RleHQoY3R4LCBsWzBdLCBURVhUX0NPTE9SLCBsWzFdLCBsWzJdKQorCisJIyBSZW5kZXIgbGVnZW5kcworCWZvbnRfaGVpZ2h0ID0gMjAKKwlsYWJlbF93aWR0aCA9IDMwMAorCUxFR0VORFNfUEVSX0NPTCA9IDE1CisJTEVHRU5EU19UT1RBTCA9IDQ1CisJY3R4LnNldF9mb250X3NpemUgKFRJVExFX0ZPTlRfU0laRSkKKwlkdXJfc2VjcyA9IGR1cmF0aW9uIC8gMTAwCisJY3B1X3NlY3MgPSB0b3RhbF90aW1lIC8gMTAwMDAwMDAwMAorCisJIyBtaXNsZWFkaW5nIC0gd2l0aCBtdWx0aXBsZSBDUFVzIC4uLgorIwlpZGxlID0gKChkdXJfc2VjcyAtIGNwdV9zZWNzKSAvIGR1cl9zZWNzKSAqIDEwMC4wCisJaWYgc3RhdF90eXBlIGlzIFNUQVRfVFlQRV9DUFU6CisJCWxhYmVsID0gIkN1bXVsYXRpdmUgQ1BVIHVzYWdlLCBieSBwcm9jZXNzOyB0b3RhbCBDUFU6ICIgXAorCQkJIiAlLjVnKHMpIHRpbWU6ICUuM2cocykiICUgKGNwdV9zZWNzLCBkdXJfc2VjcykKKwllbHNlOgorCQlsYWJlbCA9ICJDdW11bGF0aXZlIEkvTyB1c2FnZSwgYnkgcHJvY2VzczsgdG90YWwgSS9POiAiIFwKKwkJCSIgJS41ZyhzKSB0aW1lOiAlLjNnKHMpIiAlIChjcHVfc2VjcywgZHVyX3NlY3MpCisKKwlkcmF3X3RleHQoY3R4LCBsYWJlbCwgVEVYVF9DT0xPUiwgY2hhcnRfYm91bmRzWzBdICsgb2ZmX3gsCisJCSAgY2hhcnRfYm91bmRzWzFdICsgZm9udF9oZWlnaHQpCisKKwlpID0gMAorCWxlZ2VuZHMgPSBzb3J0ZWQobGVnZW5kcywga2V5PWl0ZW1nZXR0ZXIoMSksIHJldmVyc2U9VHJ1ZSkKKwljdHguc2V0X2ZvbnRfc2l6ZShURVhUX0ZPTlRfU0laRSkKKwlmb3IgdCBpbiBsZWdlbmRzOgorCQljcyA9IHRbMF0KKwkJdGltZSA9IHRbMV0KKwkJeCA9IGNoYXJ0X2JvdW5kc1swXSArIG9mZl94ICsgaW50IChpL0xFR0VORFNfUEVSX0NPTCkgKiBsYWJlbF93aWR0aAorCQl5ID0gY2hhcnRfYm91bmRzWzFdICsgZm9udF9oZWlnaHQgKiAoKGkgJSBMRUdFTkRTX1BFUl9DT0wpICsgMikKKwkJc3RyID0gIiVzIC0gJS4wZihtcykgKCUyLjJmJSUpIiAlIChjcy5jbWQsIHRpbWUvMTAwMDAwMCwgKHRpbWUvdG90YWxfdGltZSkgKiAxMDAuMCkKKwkJZHJhd19sZWdlbmRfYm94KGN0eCwgc3RyLCBjcy5jb2xvciwgeCwgeSwgbGVnX3MpCisJCWkgPSBpICsgMQorCQlpZiBpID49IExFR0VORFNfVE9UQUw6CisJCQlicmVhawpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9ndWkucHkgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL2d1aS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmVkZDIzCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9ndWkucHkKQEAgLTAsMCArMSwzNTAgQEAKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5Ym9vdGNoYXJ0Z3VpLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggcHlib290Y2hhcnRndWkuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaW1wb3J0IGdvYmplY3QKK2ltcG9ydCBndGsKK2ltcG9ydCBndGsuZ2RrCitpbXBvcnQgZ3RrLmtleXN5bXMKK2Zyb20gLiBpbXBvcnQgZHJhdworZnJvbSAuZHJhdyBpbXBvcnQgUmVuZGVyT3B0aW9ucworCitjbGFzcyBQeUJvb3RjaGFydFdpZGdldChndGsuRHJhd2luZ0FyZWEpOgorICAgIF9fZ3NpZ25hbHNfXyA9IHsKKyAgICAgICAgICAgICdleHBvc2UtZXZlbnQnOiAnb3ZlcnJpZGUnLAorICAgICAgICAgICAgJ2NsaWNrZWQnIDogKGdvYmplY3QuU0lHTkFMX1JVTl9MQVNULCBnb2JqZWN0LlRZUEVfTk9ORSwgKGdvYmplY3QuVFlQRV9TVFJJTkcsIGd0ay5nZGsuRXZlbnQpKSwKKyAgICAgICAgICAgICdwb3NpdGlvbi1jaGFuZ2VkJyA6IChnb2JqZWN0LlNJR05BTF9SVU5fTEFTVCwgZ29iamVjdC5UWVBFX05PTkUsIChnb2JqZWN0LlRZUEVfSU5ULCBnb2JqZWN0LlRZUEVfSU5UKSksCisgICAgICAgICAgICAnc2V0LXNjcm9sbC1hZGp1c3RtZW50cycgOiAoZ29iamVjdC5TSUdOQUxfUlVOX0xBU1QsIGdvYmplY3QuVFlQRV9OT05FLCAoZ3RrLkFkanVzdG1lbnQsIGd0ay5BZGp1c3RtZW50KSkKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2UsIG9wdGlvbnMsIHhzY2FsZSk6CisgICAgICAgIGd0ay5EcmF3aW5nQXJlYS5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIHNlbGYudHJhY2UgPSB0cmFjZQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2VsZi5zZXRfZmxhZ3MoZ3RrLkNBTl9GT0NVUykKKworICAgICAgICBzZWxmLmFkZF9ldmVudHMoZ3RrLmdkay5CVVRUT05fUFJFU1NfTUFTSyB8IGd0ay5nZGsuQlVUVE9OX1JFTEVBU0VfTUFTSykKKyAgICAgICAgc2VsZi5jb25uZWN0KCJidXR0b24tcHJlc3MtZXZlbnQiLCBzZWxmLm9uX2FyZWFfYnV0dG9uX3ByZXNzKQorICAgICAgICBzZWxmLmNvbm5lY3QoImJ1dHRvbi1yZWxlYXNlLWV2ZW50Iiwgc2VsZi5vbl9hcmVhX2J1dHRvbl9yZWxlYXNlKQorICAgICAgICBzZWxmLmFkZF9ldmVudHMoZ3RrLmdkay5QT0lOVEVSX01PVElPTl9NQVNLIHwgZ3RrLmdkay5QT0lOVEVSX01PVElPTl9ISU5UX01BU0sgfCBndGsuZ2RrLkJVVFRPTl9SRUxFQVNFX01BU0spCisgICAgICAgIHNlbGYuY29ubmVjdCgibW90aW9uLW5vdGlmeS1ldmVudCIsIHNlbGYub25fYXJlYV9tb3Rpb25fbm90aWZ5KQorICAgICAgICBzZWxmLmNvbm5lY3QoInNjcm9sbC1ldmVudCIsIHNlbGYub25fYXJlYV9zY3JvbGxfZXZlbnQpCisgICAgICAgIHNlbGYuY29ubmVjdCgna2V5LXByZXNzLWV2ZW50Jywgc2VsZi5vbl9rZXlfcHJlc3NfZXZlbnQpCisKKyAgICAgICAgc2VsZi5jb25uZWN0KCdzZXQtc2Nyb2xsLWFkanVzdG1lbnRzJywgc2VsZi5vbl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKQorICAgICAgICBzZWxmLmNvbm5lY3QoInNpemUtYWxsb2NhdGUiLCBzZWxmLm9uX2FsbG9jYXRpb25fc2l6ZV9jaGFuZ2VkKQorICAgICAgICBzZWxmLmNvbm5lY3QoInBvc2l0aW9uLWNoYW5nZWQiLCBzZWxmLm9uX3Bvc2l0aW9uX2NoYW5nZWQpCisKKyAgICAgICAgc2VsZi56b29tX3JhdGlvID0gMS4wCisgICAgICAgIHNlbGYueHNjYWxlID0geHNjYWxlCisgICAgICAgIHNlbGYueCwgc2VsZi55ID0gMC4wLCAwLjAKKworICAgICAgICBzZWxmLmNoYXJ0X3dpZHRoLCBzZWxmLmNoYXJ0X2hlaWdodCA9IGRyYXcuZXh0ZW50cyhzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorICAgICAgICBzZWxmLmhhZGogPSBOb25lCisgICAgICAgIHNlbGYudmFkaiA9IE5vbmUKKyAgICAgICAgc2VsZi5oYWRqX2NoYW5nZWRfc2lnbmFsX2lkID0gTm9uZQorICAgICAgICBzZWxmLnZhZGpfY2hhbmdlZF9zaWduYWxfaWQgPSBOb25lCisKKyAgICBkZWYgZG9fZXhwb3NlX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgY3IgPSBzZWxmLndpbmRvdy5jYWlyb19jcmVhdGUoKQorCisgICAgICAgICMgc2V0IGEgY2xpcCByZWdpb24gZm9yIHRoZSBleHBvc2UgZXZlbnQKKyAgICAgICAgY3IucmVjdGFuZ2xlKAorICAgICAgICAgICAgICAgIGV2ZW50LmFyZWEueCwgZXZlbnQuYXJlYS55LAorICAgICAgICAgICAgICAgIGV2ZW50LmFyZWEud2lkdGgsIGV2ZW50LmFyZWEuaGVpZ2h0CisgICAgICAgICkKKyAgICAgICAgY3IuY2xpcCgpCisgICAgICAgIHNlbGYuZHJhdyhjciwgc2VsZi5nZXRfYWxsb2NhdGlvbigpKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBkcmF3KHNlbGYsIGNyLCByZWN0KToKKyAgICAgICAgY3Iuc2V0X3NvdXJjZV9yZ2JhKDEuMCwgMS4wLCAxLjAsIDEuMCkKKyAgICAgICAgY3IucGFpbnQoKQorICAgICAgICBjci5zY2FsZShzZWxmLnpvb21fcmF0aW8sIHNlbGYuem9vbV9yYXRpbykKKyAgICAgICAgY3IudHJhbnNsYXRlKC1zZWxmLngsIC1zZWxmLnkpCisgICAgICAgIGRyYXcucmVuZGVyKGNyLCBzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorCisgICAgZGVmIHBvc2l0aW9uX2NoYW5nZWQoc2VsZik6CisgICAgICAgIHNlbGYuZW1pdCgicG9zaXRpb24tY2hhbmdlZCIsIHNlbGYueCwgc2VsZi55KQorCisgICAgWk9PTV9JTkNSRU1FTlQgPSAxLjI1CisKKyAgICBkZWYgem9vbV9pbWFnZSAoc2VsZiwgem9vbV9yYXRpbyk6CisgICAgICAgIHNlbGYuem9vbV9yYXRpbyA9IHpvb21fcmF0aW8KKyAgICAgICAgc2VsZi5fc2V0X3Njcm9sbF9hZGp1c3RtZW50cyAoc2VsZi5oYWRqLCBzZWxmLnZhZGopCisgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisKKyAgICBkZWYgem9vbV90b19yZWN0IChzZWxmLCByZWN0KToKKyAgICAgICAgem9vbV9yYXRpbyA9IGZsb2F0KHJlY3Qud2lkdGgpL2Zsb2F0KHNlbGYuY2hhcnRfd2lkdGgpCisgICAgICAgIHNlbGYuem9vbV9pbWFnZSh6b29tX3JhdGlvKQorICAgICAgICBzZWxmLnggPSAwCisgICAgICAgIHNlbGYucG9zaXRpb25fY2hhbmdlZCgpCisKKyAgICBkZWYgc2V0X3hzY2FsZShzZWxmLCB4c2NhbGUpOgorICAgICAgICBvbGRfbWlkX3ggPSBzZWxmLnggKyBzZWxmLmhhZGoucGFnZV9zaXplIC8gMgorICAgICAgICBzZWxmLnhzY2FsZSA9IHhzY2FsZQorICAgICAgICBzZWxmLmNoYXJ0X3dpZHRoLCBzZWxmLmNoYXJ0X2hlaWdodCA9IGRyYXcuZXh0ZW50cyhzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorICAgICAgICBuZXdfeCA9IG9sZF9taWRfeAorICAgICAgICBzZWxmLnpvb21faW1hZ2UgKHNlbGYuem9vbV9yYXRpbykKKworICAgIGRlZiBvbl9leHBhbmQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5zZXRfeHNjYWxlIChpbnQoc2VsZi54c2NhbGUgKiAxLjUgKyAwLjUpKQorCisgICAgZGVmIG9uX2NvbnRyYWN0KHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuc2V0X3hzY2FsZSAobWF4KGludChzZWxmLnhzY2FsZSAvIDEuNSksIDEpKQorCisgICAgZGVmIG9uX3pvb21faW4oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX2ltYWdlKHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuWk9PTV9JTkNSRU1FTlQpCisKKyAgICBkZWYgb25fem9vbV9vdXQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX2ltYWdlKHNlbGYuem9vbV9yYXRpbyAvIHNlbGYuWk9PTV9JTkNSRU1FTlQpCisKKyAgICBkZWYgb25fem9vbV9maXQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi56b29tX3RvX3JlY3Qoc2VsZi5nZXRfYWxsb2NhdGlvbigpKQorCisgICAgZGVmIG9uX3pvb21fMTAwKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuem9vbV9pbWFnZSgxLjApCisgICAgICAgIHNlbGYuc2V0X3hzY2FsZSgxLjApCisKKyAgICBkZWYgc2hvd190b2dnbGVkKHNlbGYsIGJ1dHRvbik6CisgICAgICAgIHNlbGYub3B0aW9ucy5hcHBfb3B0aW9ucy5zaG93X2FsbCA9IGJ1dHRvbi5nZXRfcHJvcGVydHkgKCdhY3RpdmUnKQorICAgICAgICBzZWxmLmNoYXJ0X3dpZHRoLCBzZWxmLmNoYXJ0X2hlaWdodCA9IGRyYXcuZXh0ZW50cyhzZWxmLm9wdGlvbnMsIHNlbGYueHNjYWxlLCBzZWxmLnRyYWNlKQorICAgICAgICBzZWxmLl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKHNlbGYuaGFkaiwgc2VsZi52YWRqKQorICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorCisgICAgUE9TX0lOQ1JFTUVOVCA9IDEwMAorCisgICAgZGVmIG9uX2tleV9wcmVzc19ldmVudChzZWxmLCB3aWRnZXQsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQua2V5dmFsID09IGd0ay5rZXlzeW1zLkxlZnQ6CisgICAgICAgICAgICBzZWxmLnggLT0gc2VsZi5QT1NfSU5DUkVNRU5UL3NlbGYuem9vbV9yYXRpbworICAgICAgICBlbGlmIGV2ZW50LmtleXZhbCA9PSBndGsua2V5c3ltcy5SaWdodDoKKyAgICAgICAgICAgIHNlbGYueCArPSBzZWxmLlBPU19JTkNSRU1FTlQvc2VsZi56b29tX3JhdGlvCisgICAgICAgIGVsaWYgZXZlbnQua2V5dmFsID09IGd0ay5rZXlzeW1zLlVwOgorICAgICAgICAgICAgc2VsZi55IC09IHNlbGYuUE9TX0lOQ1JFTUVOVC9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgZWxpZiBldmVudC5rZXl2YWwgPT0gZ3RrLmtleXN5bXMuRG93bjoKKyAgICAgICAgICAgIHNlbGYueSArPSBzZWxmLlBPU19JTkNSRU1FTlQvc2VsZi56b29tX3JhdGlvCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5xdWV1ZV9kcmF3KCkKKyAgICAgICAgc2VsZi5wb3NpdGlvbl9jaGFuZ2VkKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBvbl9hcmVhX2J1dHRvbl9wcmVzcyhzZWxmLCBhcmVhLCBldmVudCk6CisgICAgICAgIGlmIGV2ZW50LmJ1dHRvbiA9PSAyIG9yIGV2ZW50LmJ1dHRvbiA9PSAxOgorICAgICAgICAgICAgYXJlYS53aW5kb3cuc2V0X2N1cnNvcihndGsuZ2RrLkN1cnNvcihndGsuZ2RrLkZMRVVSKSkKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleCA9IGV2ZW50LngKKyAgICAgICAgICAgIHNlbGYucHJldm1vdXNleSA9IGV2ZW50LnkKKyAgICAgICAgaWYgZXZlbnQudHlwZSBub3QgaW4gKGd0ay5nZGsuQlVUVE9OX1BSRVNTLCBndGsuZ2RrLkJVVFRPTl9SRUxFQVNFKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBvbl9hcmVhX2J1dHRvbl9yZWxlYXNlKHNlbGYsIGFyZWEsIGV2ZW50KToKKyAgICAgICAgaWYgZXZlbnQuYnV0dG9uID09IDIgb3IgZXZlbnQuYnV0dG9uID09IDE6CisgICAgICAgICAgICBhcmVhLndpbmRvdy5zZXRfY3Vyc29yKGd0ay5nZGsuQ3Vyc29yKGd0ay5nZGsuQVJST1cpKQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V4ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V5ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgb25fYXJlYV9zY3JvbGxfZXZlbnQoc2VsZiwgYXJlYSwgZXZlbnQpOgorICAgICAgICBpZiBldmVudC5zdGF0ZSAmIGd0ay5nZGsuQ09OVFJPTF9NQVNLOgorICAgICAgICAgICAgaWYgZXZlbnQuZGlyZWN0aW9uID09IGd0ay5nZGsuU0NST0xMX1VQOgorICAgICAgICAgICAgICAgIHNlbGYuem9vbV9pbWFnZShzZWxmLnpvb21fcmF0aW8gKiBzZWxmLlpPT01fSU5DUkVNRU5UKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBldmVudC5kaXJlY3Rpb24gPT0gZ3RrLmdkay5TQ1JPTExfRE9XTjoKKyAgICAgICAgICAgICAgICBzZWxmLnpvb21faW1hZ2Uoc2VsZi56b29tX3JhdGlvIC8gc2VsZi5aT09NX0lOQ1JFTUVOVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgb25fYXJlYV9tb3Rpb25fbm90aWZ5KHNlbGYsIGFyZWEsIGV2ZW50KToKKyAgICAgICAgc3RhdGUgPSBldmVudC5zdGF0ZQorICAgICAgICBpZiBzdGF0ZSAmIGd0ay5nZGsuQlVUVE9OMl9NQVNLIG9yIHN0YXRlICYgZ3RrLmdkay5CVVRUT04xX01BU0s6CisgICAgICAgICAgICB4LCB5ID0gaW50KGV2ZW50LngpLCBpbnQoZXZlbnQueSkKKyAgICAgICAgICAgICMgcGFuIHRoZSBpbWFnZQorICAgICAgICAgICAgc2VsZi54ICs9IChzZWxmLnByZXZtb3VzZXggLSB4KS9zZWxmLnpvb21fcmF0aW8KKyAgICAgICAgICAgIHNlbGYueSArPSAoc2VsZi5wcmV2bW91c2V5IC0geSkvc2VsZi56b29tX3JhdGlvCisgICAgICAgICAgICBzZWxmLnF1ZXVlX2RyYXcoKQorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V4ID0geAorICAgICAgICAgICAgc2VsZi5wcmV2bW91c2V5ID0geQorICAgICAgICAgICAgc2VsZi5wb3NpdGlvbl9jaGFuZ2VkKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBvbl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKHNlbGYsIGFyZWEsIGhhZGosIHZhZGopOgorICAgICAgICBzZWxmLl9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzIChoYWRqLCB2YWRqKQorCisgICAgZGVmIG9uX2FsbG9jYXRpb25fc2l6ZV9jaGFuZ2VkKHNlbGYsIHdpZGdldCwgYWxsb2NhdGlvbik6CisgICAgICAgIHNlbGYuaGFkai5wYWdlX3NpemUgPSBhbGxvY2F0aW9uLndpZHRoCisgICAgICAgIHNlbGYuaGFkai5wYWdlX2luY3JlbWVudCA9IGFsbG9jYXRpb24ud2lkdGggKiAwLjkKKyAgICAgICAgc2VsZi52YWRqLnBhZ2Vfc2l6ZSA9IGFsbG9jYXRpb24uaGVpZ2h0CisgICAgICAgIHNlbGYudmFkai5wYWdlX2luY3JlbWVudCA9IGFsbG9jYXRpb24uaGVpZ2h0ICogMC45CisKKyAgICBkZWYgX3NldF9hZGpfdXBwZXIoc2VsZiwgYWRqLCB1cHBlcik6CisgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorICAgICAgICB2YWx1ZV9jaGFuZ2VkID0gRmFsc2UKKworICAgICAgICBpZiBhZGoudXBwZXIgIT0gdXBwZXI6CisgICAgICAgICAgICBhZGoudXBwZXIgPSB1cHBlcgorICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKworICAgICAgICBtYXhfdmFsdWUgPSBtYXgoMC4wLCB1cHBlciAtIGFkai5wYWdlX3NpemUpCisgICAgICAgIGlmIGFkai52YWx1ZSA+IG1heF92YWx1ZToKKyAgICAgICAgICAgIGFkai52YWx1ZSA9IG1heF92YWx1ZQorICAgICAgICAgICAgdmFsdWVfY2hhbmdlZCA9IFRydWUKKworICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgYWRqLmNoYW5nZWQoKQorICAgICAgICBpZiB2YWx1ZV9jaGFuZ2VkOgorICAgICAgICAgICAgYWRqLnZhbHVlX2NoYW5nZWQoKQorCisgICAgZGVmIF9zZXRfc2Nyb2xsX2FkanVzdG1lbnRzKHNlbGYsIGhhZGosIHZhZGopOgorICAgICAgICBpZiBoYWRqID09IE5vbmU6CisgICAgICAgICAgICBoYWRqID0gZ3RrLkFkanVzdG1lbnQoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkKKyAgICAgICAgaWYgdmFkaiA9PSBOb25lOgorICAgICAgICAgICAgdmFkaiA9IGd0ay5BZGp1c3RtZW50KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApCisKKyAgICAgICAgaWYgc2VsZi5oYWRqX2NoYW5nZWRfc2lnbmFsX2lkICE9IE5vbmUgYW5kIFwKKyAgICAgICAgICAgc2VsZi5oYWRqICE9IE5vbmUgYW5kIGhhZGogIT0gc2VsZi5oYWRqOgorICAgICAgICAgICAgc2VsZi5oYWRqLmRpc2Nvbm5lY3QgKHNlbGYuaGFkal9jaGFuZ2VkX3NpZ25hbF9pZCkKKyAgICAgICAgaWYgc2VsZi52YWRqX2NoYW5nZWRfc2lnbmFsX2lkICE9IE5vbmUgYW5kIFwKKyAgICAgICAgICAgc2VsZi52YWRqICE9IE5vbmUgYW5kIHZhZGogIT0gc2VsZi52YWRqOgorICAgICAgICAgICAgc2VsZi52YWRqLmRpc2Nvbm5lY3QgKHNlbGYudmFkal9jaGFuZ2VkX3NpZ25hbF9pZCkKKworICAgICAgICBpZiBoYWRqICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLmhhZGogPSBoYWRqCisgICAgICAgICAgICBzZWxmLl9zZXRfYWRqX3VwcGVyIChzZWxmLmhhZGosIHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuY2hhcnRfd2lkdGgpCisgICAgICAgICAgICBzZWxmLmhhZGpfY2hhbmdlZF9zaWduYWxfaWQgPSBzZWxmLmhhZGouY29ubmVjdCgndmFsdWUtY2hhbmdlZCcsIHNlbGYub25fYWRqdXN0bWVudHNfY2hhbmdlZCkKKworICAgICAgICBpZiB2YWRqICE9IE5vbmU6CisgICAgICAgICAgICBzZWxmLnZhZGogPSB2YWRqCisgICAgICAgICAgICBzZWxmLl9zZXRfYWRqX3VwcGVyIChzZWxmLnZhZGosIHNlbGYuem9vbV9yYXRpbyAqIHNlbGYuY2hhcnRfaGVpZ2h0KQorICAgICAgICAgICAgc2VsZi52YWRqX2NoYW5nZWRfc2lnbmFsX2lkID0gc2VsZi52YWRqLmNvbm5lY3QoJ3ZhbHVlLWNoYW5nZWQnLCBzZWxmLm9uX2FkanVzdG1lbnRzX2NoYW5nZWQpCisKKyAgICBkZWYgb25fYWRqdXN0bWVudHNfY2hhbmdlZChzZWxmLCBhZGopOgorICAgICAgICBzZWxmLnggPSBzZWxmLmhhZGoudmFsdWUgLyBzZWxmLnpvb21fcmF0aW8KKyAgICAgICAgc2VsZi55ID0gc2VsZi52YWRqLnZhbHVlIC8gc2VsZi56b29tX3JhdGlvCisgICAgICAgIHNlbGYucXVldWVfZHJhdygpCisKKyAgICBkZWYgb25fcG9zaXRpb25fY2hhbmdlZChzZWxmLCB3aWRnZXQsIHgsIHkpOgorICAgICAgICBzZWxmLmhhZGoudmFsdWUgPSB4ICogc2VsZi56b29tX3JhdGlvCisgICAgICAgIHNlbGYudmFkai52YWx1ZSA9IHkgKiBzZWxmLnpvb21fcmF0aW8KKworUHlCb290Y2hhcnRXaWRnZXQuc2V0X3NldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsKCdzZXQtc2Nyb2xsLWFkanVzdG1lbnRzJykKKworY2xhc3MgUHlCb290Y2hhcnRTaGVsbChndGsuVkJveCk6CisgICAgdWkgPSAnJycKKyAgICA8dWk+CisgICAgICAgICAgICA8dG9vbGJhciBuYW1lPSJUb29sQmFyIj4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iRXhwYW5kIi8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249IkNvbnRyYWN0Ii8+CisgICAgICAgICAgICAgICAgICAgIDxzZXBhcmF0b3IvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJab29tSW4iLz4KKyAgICAgICAgICAgICAgICAgICAgPHRvb2xpdGVtIGFjdGlvbj0iWm9vbU91dCIvPgorICAgICAgICAgICAgICAgICAgICA8dG9vbGl0ZW0gYWN0aW9uPSJab29tRml0Ii8+CisgICAgICAgICAgICAgICAgICAgIDx0b29saXRlbSBhY3Rpb249Ilpvb20xMDAiLz4KKyAgICAgICAgICAgIDwvdG9vbGJhcj4KKyAgICA8L3VpPgorICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3csIHRyYWNlLCBvcHRpb25zLCB4c2NhbGUpOgorICAgICAgICBndGsuVkJveC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIHNlbGYud2lkZ2V0ID0gUHlCb290Y2hhcnRXaWRnZXQodHJhY2UsIG9wdGlvbnMsIHhzY2FsZSkKKworICAgICAgICAjIENyZWF0ZSBhIFVJTWFuYWdlciBpbnN0YW5jZQorICAgICAgICB1aW1hbmFnZXIgPSBzZWxmLnVpbWFuYWdlciA9IGd0ay5VSU1hbmFnZXIoKQorCisgICAgICAgICMgQWRkIHRoZSBhY2NlbGVyYXRvciBncm91cCB0byB0aGUgdG9wbGV2ZWwgd2luZG93CisgICAgICAgIGFjY2VsZ3JvdXAgPSB1aW1hbmFnZXIuZ2V0X2FjY2VsX2dyb3VwKCkKKyAgICAgICAgd2luZG93LmFkZF9hY2NlbF9ncm91cChhY2NlbGdyb3VwKQorCisgICAgICAgICMgQ3JlYXRlIGFuIEFjdGlvbkdyb3VwCisgICAgICAgIGFjdGlvbmdyb3VwID0gZ3RrLkFjdGlvbkdyb3VwKCdBY3Rpb25zJykKKyAgICAgICAgc2VsZi5hY3Rpb25ncm91cCA9IGFjdGlvbmdyb3VwCisKKyAgICAgICAgIyBDcmVhdGUgYWN0aW9ucworICAgICAgICBhY3Rpb25ncm91cC5hZGRfYWN0aW9ucygoCisgICAgICAgICAgICAgICAgKCdFeHBhbmQnLCBndGsuU1RPQ0tfQURELCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl9leHBhbmQpLAorICAgICAgICAgICAgICAgICgnQ29udHJhY3QnLCBndGsuU1RPQ0tfUkVNT1ZFLCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl9jb250cmFjdCksCisgICAgICAgICAgICAgICAgKCdab29tSW4nLCBndGsuU1RPQ0tfWk9PTV9JTiwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV9pbiksCisgICAgICAgICAgICAgICAgKCdab29tT3V0JywgZ3RrLlNUT0NLX1pPT01fT1VULCBOb25lLCBOb25lLCBOb25lLCBzZWxmLndpZGdldC5vbl96b29tX291dCksCisgICAgICAgICAgICAgICAgKCdab29tRml0JywgZ3RrLlNUT0NLX1pPT01fRklULCAnRml0IFdpZHRoJywgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV9maXQpLAorICAgICAgICAgICAgICAgICgnWm9vbTEwMCcsIGd0ay5TVE9DS19aT09NXzEwMCwgTm9uZSwgTm9uZSwgTm9uZSwgc2VsZi53aWRnZXQub25fem9vbV8xMDApLAorICAgICAgICApKQorCisgICAgICAgICMgQWRkIHRoZSBhY3Rpb25ncm91cCB0byB0aGUgdWltYW5hZ2VyCisgICAgICAgIHVpbWFuYWdlci5pbnNlcnRfYWN0aW9uX2dyb3VwKGFjdGlvbmdyb3VwLCAwKQorCisgICAgICAgICMgQWRkIGEgVUkgZGVzY3JpcHRpb24KKyAgICAgICAgdWltYW5hZ2VyLmFkZF91aV9mcm9tX3N0cmluZyhzZWxmLnVpKQorCisgICAgICAgICMgU2Nyb2xsZWQgd2luZG93CisgICAgICAgIHNjcm9sbGVkID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKyAgICAgICAgc2Nyb2xsZWQuYWRkKHNlbGYud2lkZ2V0KQorCisgICAgICAgICMgdG9vbGJhciAvIGgtYm94CisgICAgICAgIGhib3ggPSBndGsuSEJveChGYWxzZSwgOCkKKworICAgICAgICAjIENyZWF0ZSBhIFRvb2xiYXIKKyAgICAgICAgdG9vbGJhciA9IHVpbWFuYWdlci5nZXRfd2lkZ2V0KCcvVG9vbEJhcicpCisgICAgICAgIGhib3gucGFja19zdGFydCh0b29sYmFyLCBUcnVlLCBUcnVlKQorCisgICAgICAgIGlmIG5vdCBvcHRpb25zLmtlcm5lbF9vbmx5OgorICAgICAgICAgICAgIyBNaXNjLiBvcHRpb25zCisgICAgICAgICAgICBidXR0b24gPSBndGsuQ2hlY2tCdXR0b24oIlNob3cgbW9yZSIpCisgICAgICAgICAgICBidXR0b24uY29ubmVjdCAoJ3RvZ2dsZWQnLCBzZWxmLndpZGdldC5zaG93X3RvZ2dsZWQpCisgICAgICAgICAgICBidXR0b24uc2V0X2FjdGl2ZShvcHRpb25zLmFwcF9vcHRpb25zLnNob3dfYWxsKQorICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0IChidXR0b24sIEZhbHNlLCBUcnVlKQorCisgICAgICAgIHNlbGYucGFja19zdGFydChoYm94LCBGYWxzZSkKKyAgICAgICAgc2VsZi5wYWNrX3N0YXJ0KHNjcm9sbGVkKQorICAgICAgICBzZWxmLnNob3dfYWxsKCkKKworICAgIGRlZiBncmFiX2ZvY3VzKHNlbGYsIHdpbmRvdyk6CisgICAgICAgIHdpbmRvdy5zZXRfZm9jdXMoc2VsZi53aWRnZXQpCisKKworY2xhc3MgUHlCb290Y2hhcnRXaW5kb3coZ3RrLldpbmRvdyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2UsIGFwcF9vcHRpb25zKToKKyAgICAgICAgZ3RrLldpbmRvdy5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIHdpbmRvdyA9IHNlbGYKKyAgICAgICAgd2luZG93LnNldF90aXRsZSgiQm9vdGNoYXJ0ICVzIiAlIHRyYWNlLmZpbGVuYW1lKQorICAgICAgICB3aW5kb3cuc2V0X2RlZmF1bHRfc2l6ZSg3NTAsIDU1MCkKKworICAgICAgICB0YWJfcGFnZSA9IGd0ay5Ob3RlYm9vaygpCisgICAgICAgIHRhYl9wYWdlLnNob3coKQorICAgICAgICB3aW5kb3cuYWRkKHRhYl9wYWdlKQorCisgICAgICAgIGZ1bGxfb3B0cyA9IFJlbmRlck9wdGlvbnMoYXBwX29wdGlvbnMpCisgICAgICAgIGZ1bGxfdHJlZSA9IFB5Qm9vdGNoYXJ0U2hlbGwod2luZG93LCB0cmFjZSwgZnVsbF9vcHRzLCAxLjApCisgICAgICAgIHRhYl9wYWdlLmFwcGVuZF9wYWdlIChmdWxsX3RyZWUsIGd0ay5MYWJlbCgiRnVsbCB0cmVlIikpCisKKyAgICAgICAgaWYgdHJhY2Uua2VybmVsIGlzIG5vdCBOb25lIGFuZCBsZW4gKHRyYWNlLmtlcm5lbCkgPiAyOgorICAgICAgICAgICAga2VybmVsX29wdHMgPSBSZW5kZXJPcHRpb25zKGFwcF9vcHRpb25zKQorICAgICAgICAgICAga2VybmVsX29wdHMuY3VtdWxhdGl2ZSA9IEZhbHNlCisgICAgICAgICAgICBrZXJuZWxfb3B0cy5jaGFydHMgPSBGYWxzZQorICAgICAgICAgICAga2VybmVsX29wdHMua2VybmVsX29ubHkgPSBUcnVlCisgICAgICAgICAgICBrZXJuZWxfdHJlZSA9IFB5Qm9vdGNoYXJ0U2hlbGwod2luZG93LCB0cmFjZSwga2VybmVsX29wdHMsIDUuMCkKKyAgICAgICAgICAgIHRhYl9wYWdlLmFwcGVuZF9wYWdlIChrZXJuZWxfdHJlZSwgZ3RrLkxhYmVsKCJLZXJuZWwgYm9vdCIpKQorCisgICAgICAgIGZ1bGxfdHJlZS5ncmFiX2ZvY3VzKHNlbGYpCisgICAgICAgIHNlbGYuc2hvdygpCisKKworZGVmIHNob3codHJhY2UsIG9wdGlvbnMpOgorICAgIHdpbiA9IFB5Qm9vdGNoYXJ0V2luZG93KHRyYWNlLCBvcHRpb25zKQorICAgIHdpbi5jb25uZWN0KCdkZXN0cm95JywgZ3RrLm1haW5fcXVpdCkKKyAgICBndGsubWFpbigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYjQ1YWUwYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvbWFpbi5weQpAQCAtMCwwICsxIEBACittYWluLnB5LmluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluIGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9tYWluLnB5LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmIwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL21haW4ucHkuaW4KQEAgLTAsMCArMSwxODcgQEAKKyMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgIFdhcm5pbmc6IFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIG1haW4ucHkuaW4gLSBlZGl0IGl0IHRoZXJlLgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKKworZnJvbSAuIGltcG9ydCBwYXJzaW5nCitmcm9tIC4gaW1wb3J0IGJhdGNoCisKK2RlZiBfbWtfb3B0aW9uc19wYXJzZXIoKToKKwkiIiJNYWtlIGFuIG9wdGlvbnMgcGFyc2VyLiIiIgorCXVzYWdlID0gIiVwcm9nIFtvcHRpb25zXSAvcGF0aC90by90bXAvYnVpbGRzdGF0cy88cmVjaXBlLW1hY2hpbmU+LzxCVUlMRE5BTUU+LyIKKwl2ZXJzaW9uID0gIiVwcm9nIHYxLjAuMCIKKwlwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UsIHZlcnNpb249dmVyc2lvbikKKwlwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbnRlcmFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImludGVyYWN0aXZlIiwgZGVmYXVsdD1GYWxzZSwgCisJCQkgIGhlbHA9InN0YXJ0IGluIGFjdGl2ZSBtb2RlIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1mb3JtYXQiLCBkZXN0PSJmb3JtYXQiLCBkZWZhdWx0PSJwbmciLCBjaG9pY2VzPVsicG5nIiwgInN2ZyIsICJwZGYiXSwKKwkJCSAgaGVscD0iaW1hZ2UgZm9ybWF0IChwbmcsIHN2ZywgcGRmKTsgZGVmYXVsdCBmb3JtYXQgcG5nIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRwdXQiLCBkZXN0PSJvdXRwdXQiLCBtZXRhdmFyPSJQQVRIIiwgZGVmYXVsdD1Ob25lLAorCQkJICBoZWxwPSJvdXRwdXQgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkpIHdoZXJlIGNoYXJ0cyBhcmUgc3RvcmVkIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1zcGxpdCIsIGRlc3Q9Im51bSIsIHR5cGU9aW50LCBkZWZhdWx0PTEsCisJCQkgIGhlbHA9InNwbGl0IHRoZSBvdXRwdXQgY2hhcnQgaW50byA8TlVNPiBjaGFydHMsIG9ubHkgd29ya3Mgd2l0aCBcIi1vIFBBVEhcIiIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0tbWludGltZSIsIGRlc3Q9Im1pbnRpbWUiLCB0eXBlPWludCwgZGVmYXVsdD04LAorCQkJICBoZWxwPSJvbmx5IHRhc2tzIGxvbmdlciB0aGFuIHRoaXMgdGltZSB3aWxsIGJlIGRpc3BsYXllZCIpCisJcGFyc2VyLmFkZF9vcHRpb24oIi1NIiwgIi0tbWludXRlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImFzX21pbnV0ZXMiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJkaXNwbGF5IHRpbWUgaW4gbWludXRlcyBpbnN0ZWFkIG9mIHNlY29uZHMiKQorIwlwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1uby1wcnVuZSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJwcnVuZSIsIGRlZmF1bHQ9VHJ1ZSwKKyMJCQkgIGhlbHA9ImRvIG5vdCBwcnVuZSB0aGUgcHJvY2VzcyB0cmVlIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InF1aWV0IiwgZGVmYXVsdD1GYWxzZSwKKwkJCSAgaGVscD0ic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLWJvb3QtdGltZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImJvb3R0aW1lIiwgZGVmYXVsdD1GYWxzZSwKKyMJCQkgIGhlbHA9Im9ubHkgZGlzcGxheSB0aGUgYm9vdCB0aW1lIG9mIHRoZSBib290IGluIHRleHQgZm9ybWF0IChzdGRvdXQpIikJCisJcGFyc2VyLmFkZF9vcHRpb24oIi0tdmVyeS1xdWlldCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcnlxdWlldCIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9InN1cHByZXNzIGFsbCBtZXNzYWdlcyBleGNlcHQgZXJyb3JzIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLS12ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idmVyYm9zZSIsIGRlZmF1bHQ9RmFsc2UsCisJCQkgIGhlbHA9InByaW50IGFsbCBtZXNzYWdlcyIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLXByb2ZpbGUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJwcm9maWxlIiwgZGVmYXVsdD1GYWxzZSwKKyMJCQkgIGhlbHA9InByb2ZpbGUgcmVuZGVyaW5nIG9mIGNoYXJ0IChvbmx5IHVzZWZ1bCB3aGVuIGluIGJhdGNoIG1vZGUgaW5kaWNhdGVkIGJ5IC1mKSIpCisjCXBhcnNlci5hZGRfb3B0aW9uKCItLXNob3ctcGlkIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd19waWQiLCBkZWZhdWx0PUZhbHNlLAorIwkJCSAgaGVscD0ic2hvdyBwcm9jZXNzIGlkcyBpbiB0aGUgYm9vdGNoYXJ0IGFzICdwcm9jZXNzbmFtZSBbcGlkXSciKQorCXBhcnNlci5hZGRfb3B0aW9uKCItLXNob3ctYWxsIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd19hbGwiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJzaG93IGFsbCBwcm9jZXNzZXMgaW4gdGhlIGNoYXJ0IikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tY3JvcC1hZnRlciIsIGRlc3Q9ImNyb3BfYWZ0ZXIiLCBtZXRhdmFyPSJQUk9DRVNTIiwgZGVmYXVsdD1Ob25lLAorIwkJCSAgaGVscD0iY3JvcCBjaGFydCB3aGVuIGlkbGUgYWZ0ZXIgUFJPQ0VTUyBpcyBzdGFydGVkIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tYW5ub3RhdGUiLCBhY3Rpb249ImFwcGVuZCIsIGRlc3Q9ImFubm90YXRlIiwgbWV0YXZhcj0iUFJPQ0VTUyIsIGRlZmF1bHQ9Tm9uZSwKKyMJCQkgIGhlbHA9ImFubm90YXRlIHBvc2l0aW9uIHdoZXJlIFBST0NFU1MgaXMgc3RhcnRlZDsgY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4gIiArCisjCQkJICAgICAgICJUbyBjcmVhdGUgYSBzaW5nbGUgYW5ub3RhdGlvbiB3aGVuIGFueSBvbmUgb2YgYSBzZXQgb2YgcHJvY2Vzc2VzIGlzIHN0YXJ0ZWQsIHVzZSBjb21tYXMgdG8gc2VwYXJhdGUgdGhlIG5hbWVzIikKKyMJcGFyc2VyLmFkZF9vcHRpb24oIi0tYW5ub3RhdGUtZmlsZSIsIGRlc3Q9ImFubm90YXRlX2ZpbGUiLCBtZXRhdmFyPSJGSUxFTkFNRSIsIGRlZmF1bHQ9Tm9uZSwKKyMJCQkgIGhlbHA9ImZpbGVuYW1lIHRvIHdyaXRlIGFubm90YXRpb24gcG9pbnRzIHRvIikKKwlwYXJzZXIuYWRkX29wdGlvbigiLVQiLCAiLS1mdWxsLXRpbWUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJmdWxsX3RpbWUiLCBkZWZhdWx0PUZhbHNlLAorCQkJICBoZWxwPSJkaXNwbGF5IHRoZSBmdWxsIHRpbWUgcmVnYXJkbGVzcyBvZiB3aGljaCBwcm9jZXNzZXMgYXJlIGN1cnJlbnRseSBzaG93biIpCisJcmV0dXJuIHBhcnNlcgorCitjbGFzcyBXcml0ZXI6CisJZGVmIF9faW5pdF9fKHNlbGYsIHdyaXRlLCBvcHRpb25zKToKKwkJc2VsZi53cml0ZSA9IHdyaXRlCisJCXNlbGYub3B0aW9ucyA9IG9wdGlvbnMKKwkJCisJZGVmIGVycm9yKHNlbGYsIG1zZyk6CisJCXNlbGYud3JpdGUobXNnKQorCisJZGVmIHdhcm4oc2VsZiwgbXNnKToKKwkJaWYgbm90IHNlbGYub3B0aW9ucy5xdWlldDoKKwkJCXNlbGYud3JpdGUobXNnKQorCisJZGVmIGluZm8oc2VsZiwgbXNnKToKKwkJaWYgc2VsZi5vcHRpb25zLnZlcmJvc2U6CisJCQlzZWxmLndyaXRlKG1zZykKKworCWRlZiBzdGF0dXMoc2VsZiwgbXNnKToKKwkJaWYgbm90IHNlbGYub3B0aW9ucy5xdWlldDoKKwkJCXNlbGYud3JpdGUobXNnKQorCitkZWYgX21rX3dyaXRlcihvcHRpb25zKToKKwlkZWYgd3JpdGUocyk6CisJCXByaW50KHMpCisJcmV0dXJuIFdyaXRlcih3cml0ZSwgb3B0aW9ucykKKwkKK2RlZiBfZ2V0X2ZpbGVuYW1lKHBhdGgpOgorCSIiIkNvbnN0cnVjdCBhIHVzYWJsZSBmaWxlbmFtZSBmb3Igb3V0cHV0cyIiIgorCWRuYW1lID0gIi4iCisJZm5hbWUgPSAiYm9vdGNoYXJ0IgorCWlmIHBhdGggIT0gTm9uZToKKwkJaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKwkJCWRuYW1lID0gcGF0aAorCQllbHNlOgorCQkJZm5hbWUgPSBwYXRoCisJcmV0dXJuIG9zLnBhdGguam9pbihkbmFtZSwgZm5hbWUpCisKK2RlZiBtYWluKGFyZ3Y9Tm9uZSk6CisJdHJ5OgorCQlpZiBhcmd2IGlzIE5vbmU6CisJCQlhcmd2ID0gc3lzLmFyZ3ZbMTpdCisJCisJCXBhcnNlciA9IF9ta19vcHRpb25zX3BhcnNlcigpCisJCW9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisJCSMgRGVmYXVsdCB2YWx1ZXMgZm9yIGRpc2FibGVkIG9wdGlvbnMKKwkJb3B0aW9ucy5wcnVuZSA9IFRydWUKKwkJb3B0aW9ucy5ib290dGltZSA9IEZhbHNlCisJCW9wdGlvbnMucHJvZmlsZSA9IEZhbHNlCisJCW9wdGlvbnMuc2hvd19waWQgPSBGYWxzZQorCQlvcHRpb25zLmNyb3BfYWZ0ZXIgPSBOb25lCisJCW9wdGlvbnMuYW5ub3RhdGUgPSBOb25lCisJCW9wdGlvbnMuYW5ub3RhdGVfZmlsZSA9IE5vbmUKKworCQl3cml0ZXIgPSBfbWtfd3JpdGVyKG9wdGlvbnMpCisKKwkJaWYgbGVuKGFyZ3MpID09IDA6CisJCQlwcmludCgiTm8gcGF0aCBnaXZlbiwgdHJ5aW5nIC92YXIvbG9nL2Jvb3RjaGFydC50Z3oiKQorCQkJYXJncyA9IFsgIi92YXIvbG9nL2Jvb3RjaGFydC50Z3oiIF0KKworCQlyZXMgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKworCQlpZiBvcHRpb25zLmludGVyYWN0aXZlIG9yIG9wdGlvbnMub3V0cHV0ID09IE5vbmU6CisJCQlmcm9tIC4gaW1wb3J0IGd1aQorCQkJZ3VpLnNob3cocmVzLCBvcHRpb25zKQorCQllbGlmIG9wdGlvbnMuYm9vdHRpbWU6CisJCQlpbXBvcnQgbWF0aAorCQkJcHJvY190cmVlID0gcmVzLnByb2NfdHJlZQorCQkJaWYgcHJvY190cmVlLmlkbGU6CisJCQkgICAgZHVyYXRpb24gPSBwcm9jX3RyZWUuaWRsZQorCQkJZWxzZToKKwkJCSAgICBkdXJhdGlvbiA9IHByb2NfdHJlZS5kdXJhdGlvbgorCQkJZHVyID0gZHVyYXRpb24gLyAxMDAuMAorCQkJcHJpbnQoJyUwMmQ6JTA1LjJmJyAlIChtYXRoLmZsb29yKGR1ci82MCksIGR1ciAtIDYwICogbWF0aC5mbG9vcihkdXIvNjApKSkKKwkJZWxzZToKKwkJCWlmIG9wdGlvbnMuYW5ub3RhdGVfZmlsZToKKwkJCQlmID0gb3BlbiAob3B0aW9ucy5hbm5vdGF0ZV9maWxlLCAidyIpCisJCQkJdHJ5OgorCQkJCQlmb3IgdGltZSBpbiByZXNbNF06CisJCQkJCQlpZiB0aW1lIGlzIG5vdCBOb25lOgorCQkJCQkJCSMgb3V0cHV0IGFzIG1zCisJCQkJCQkJcHJpbnQodGltZSAqIDEwLCBmaWxlPWYpCisJCQkJCQllbHNlOgorCQkJCQkJCXByaW50KGZpbGU9ZikKKwkJCQlmaW5hbGx5OgorCQkJCQlmLmNsb3NlKCkKKwkJCWZpbGVuYW1lID0gX2dldF9maWxlbmFtZShvcHRpb25zLm91dHB1dCkKKwkJCXJlc19saXN0ID0gcGFyc2luZy5zcGxpdF9yZXMocmVzLCBvcHRpb25zKQorCQkJbiA9IDEKKwkJCXdpZHRoID0gbGVuKHN0cihsZW4ocmVzX2xpc3QpKSkKKwkJCXMgPSAiXyUlMCVkZC4iICUgd2lkdGgKKwkJCWZvciByIGluIHJlc19saXN0OgorCQkJCWlmIGxlbihyZXNfbGlzdCkgPT0gMToKKwkJCQkJZiA9IGZpbGVuYW1lICsgIi4iICsgb3B0aW9ucy5mb3JtYXQKKwkJCQllbHNlOgorCQkJCQlmID0gZmlsZW5hbWUgKyBzICUgbiArIG9wdGlvbnMuZm9ybWF0CisJCQkJCW4gPSBuICsgMQorCQkJCWRlZiByZW5kZXIoKToKKwkJCQkJYmF0Y2gucmVuZGVyKHdyaXRlciwgciwgb3B0aW9ucywgZikKKwkJCQlpZiBvcHRpb25zLnByb2ZpbGU6CisJCQkJCWltcG9ydCBjUHJvZmlsZQorCQkJCQlpbXBvcnQgcHN0YXRzCisJCQkJCXByb2ZpbGUgPSAnJXMucHJvZicgJSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXQorCQkJCQljUHJvZmlsZS5ydW5jdHgoJ3JlbmRlcigpJywgZ2xvYmFscygpLCBsb2NhbHMoKSwgcHJvZmlsZSkKKwkJCQkJcCA9IHBzdGF0cy5TdGF0cyhwcm9maWxlKQorCQkJCQlwLnN0cmlwX2RpcnMoKS5zb3J0X3N0YXRzKCd0aW1lJykucHJpbnRfc3RhdHMoMjApCisJCQkJZWxzZToKKwkJCQkJcmVuZGVyKCkKKworCQlyZXR1cm4gMAorCWV4Y2VwdCBwYXJzaW5nLlBhcnNlRXJyb3IgYXMgZXg6CisJCXByaW50KCgiUGFyc2UgZXJyb3I6ICVzIiAlIGV4KSkKKwkJcmV0dXJuIDIKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorCXN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weSBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcGFyc2luZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDIzYjlmCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wYXJzaW5nLnB5CkBAIC0wLDAgKzEsNzQwIEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorCitpbXBvcnQgb3MKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRhcmZpbGUKK2Zyb20gdGltZSBpbXBvcnQgY2xvY2sKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Citmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCisKK2Zyb20gLnNhbXBsZXMgaW1wb3J0ICoKK2Zyb20gLnByb2Nlc3NfdHJlZSBpbXBvcnQgUHJvY2Vzc1RyZWUKKworaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCk6CisgICAgbG9uZyA9IGludAorCisjIFBhcnNpbmcgcHJvZHVjZXMgYXMgaXRzIGVuZCByZXN1bHQgYSAnVHJhY2UnCisKK2NsYXNzIFRyYWNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZXIsIHBhdGhzLCBvcHRpb25zKToKKyAgICAgICAgc2VsZi5wcm9jZXNzZXMgPSB7fQorICAgICAgICBzZWxmLnN0YXJ0ID0ge30KKyAgICAgICAgc2VsZi5lbmQgPSB7fQorICAgICAgICBzZWxmLm1pbiA9IE5vbmUKKyAgICAgICAgc2VsZi5tYXggPSBOb25lCisgICAgICAgIHNlbGYuaGVhZGVycyA9IE5vbmUKKyAgICAgICAgc2VsZi5kaXNrX3N0YXRzID0gTm9uZQorICAgICAgICBzZWxmLnBzX3N0YXRzID0gTm9uZQorICAgICAgICBzZWxmLnRhc2tzdGF0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5jcHVfc3RhdHMgPSBOb25lCisgICAgICAgIHNlbGYuY21kbGluZSA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBOb25lCisgICAgICAgIHNlbGYua2VybmVsX3RyZWUgPSBOb25lCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYucGFyZW50X21hcCA9IE5vbmUKKyAgICAgICAgc2VsZi5tZW1fc3RhdHMgPSBOb25lCisKKyAgICAgICAgaWYgbGVuKHBhdGhzKToKKyAgICAgICAgICAgIHBhcnNlX3BhdGhzICh3cml0ZXIsIHNlbGYsIHBhdGhzKQorICAgICAgICAgICAgaWYgbm90IHNlbGYudmFsaWQoKToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUVycm9yKCJlbXB0eSBzdGF0ZTogJyVzJyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgYm9vdGNoYXJ0IiAlICIsICIuam9pbihwYXRocykpCisKKyAgICAgICAgICAgIGlmIG9wdGlvbnMuZnVsbF90aW1lOgorICAgICAgICAgICAgICAgIHNlbGYubWluID0gbWluKHNlbGYuc3RhcnQua2V5cygpKQorICAgICAgICAgICAgICAgIHNlbGYubWF4ID0gbWF4KHNlbGYuZW5kLmtleXMoKSkKKworICAgICAgICByZXR1cm4KKworICAgICAgICAjIFR1cm4gdGhhdCBwYXJzZWQgaW5mb3JtYXRpb24gaW50byBzb21ldGhpbmcgbW9yZSB1c2VmdWwKKyAgICAgICAgIyBsaW5rIHByb2Nlc3NlcyBpbnRvIGEgdHJlZSBvZiBwb2ludGVycywgY2FsY3VsYXRlIHN0YXRpc3RpY3MKKyAgICAgICAgc2VsZi5jb21waWxlKHdyaXRlcikKKworICAgICAgICAjIENyb3AgdGhlIGNoYXJ0IHRvIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGlkbGUgcGVyaW9kIGFmdGVyIHRoZSBnaXZlbgorICAgICAgICAjIHByb2Nlc3MKKyAgICAgICAgaWYgb3B0aW9ucy5jcm9wX2FmdGVyOgorICAgICAgICAgICAgaWRsZSA9IHNlbGYuY3JvcCAod3JpdGVyLCBvcHRpb25zLmNyb3BfYWZ0ZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZGxlID0gTm9uZQorCisgICAgICAgICMgQW5ub3RhdGUgb3RoZXIgdGltZXMgYXMgdGhlIGZpcnN0IHN0YXJ0IHBvaW50IG9mIGdpdmVuIHByb2Nlc3MgbGlzdHMKKyAgICAgICAgc2VsZi50aW1lcyA9IFsgaWRsZSBdCisgICAgICAgIGlmIG9wdGlvbnMuYW5ub3RhdGU6CisgICAgICAgICAgICBmb3IgcHJvY25hbWVzIGluIG9wdGlvbnMuYW5ub3RhdGU6CisgICAgICAgICAgICAgICAgbmFtZXMgPSBbeFs6MTVdIGZvciB4IGluIHByb2NuYW1lcy5zcGxpdCgiLCIpXQorICAgICAgICAgICAgICAgIGZvciBwcm9jIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHByb2MuY21kIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lcy5hcHBlbmQocHJvYy5zdGFydF90aW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZXMuYXBwZW5kKE5vbmUpCisKKyAgICAgICAgc2VsZi5wcm9jX3RyZWUgPSBQcm9jZXNzVHJlZSh3cml0ZXIsIHNlbGYua2VybmVsLCBzZWxmLnBzX3N0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHNfc3RhdHMuc2FtcGxlX3BlcmlvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhlYWRlcnMuZ2V0KCJwcm9maWxlLnByb2Nlc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBydW5lLCBpZGxlLCBzZWxmLnRhc2tzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudF9tYXAgaXMgbm90IE5vbmUpCisKKyAgICAgICAgaWYgc2VsZi5rZXJuZWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmtlcm5lbF90cmVlID0gUHJvY2Vzc1RyZWUod3JpdGVyLCBzZWxmLmtlcm5lbCwgTm9uZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhlYWRlcnMuZ2V0KCJwcm9maWxlLnByb2Nlc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgTm9uZSwgTm9uZSwgVHJ1ZSkKKworICAgIGRlZiB2YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLnByb2Nlc3NlcykgIT0gMAorICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzICE9IE5vbmUgYW5kIHNlbGYuZGlza19zdGF0cyAhPSBOb25lIGFuZCBcCisgICAgICAgICAgICAgICBzZWxmLnBzX3N0YXRzICE9IE5vbmUgYW5kIHNlbGYuY3B1X3N0YXRzICE9IE5vbmUKKworICAgIGRlZiBhZGRfcHJvY2VzcyhzZWxmLCBwcm9jZXNzLCBzdGFydCwgZW5kKToKKyAgICAgICAgc2VsZi5wcm9jZXNzZXNbcHJvY2Vzc10gPSBbc3RhcnQsIGVuZF0KKyAgICAgICAgaWYgc3RhcnQgbm90IGluIHNlbGYuc3RhcnQ6CisgICAgICAgICAgICBzZWxmLnN0YXJ0W3N0YXJ0XSA9IFtdCisgICAgICAgIGlmIHByb2Nlc3Mgbm90IGluIHNlbGYuc3RhcnRbc3RhcnRdOgorICAgICAgICAgICAgc2VsZi5zdGFydFtzdGFydF0uYXBwZW5kKHByb2Nlc3MpCisgICAgICAgIGlmIGVuZCBub3QgaW4gc2VsZi5lbmQ6CisgICAgICAgICAgICBzZWxmLmVuZFtlbmRdID0gW10KKyAgICAgICAgaWYgcHJvY2VzcyBub3QgaW4gc2VsZi5lbmRbZW5kXToKKyAgICAgICAgICAgIHNlbGYuZW5kW2VuZF0uYXBwZW5kKHByb2Nlc3MpCisKKyAgICBkZWYgY29tcGlsZShzZWxmLCB3cml0ZXIpOgorCisgICAgICAgIGRlZiBmaW5kX3BhcmVudF9pZF9mb3IocGlkKToKKyAgICAgICAgICAgIGlmIHBpZCBpcyAwOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBwcGlkID0gc2VsZi5wYXJlbnRfbWFwLmdldChwaWQpCisgICAgICAgICAgICBpZiBwcGlkOgorICAgICAgICAgICAgICAgICMgbWFueSBvZiB0aGVzZSBkb3VibGUgZm9ya3MgYXJlIHNvIHNob3J0IGxpdmVkCisgICAgICAgICAgICAgICAgIyB0aGF0IHdlIGhhdmUgbm8gc2FtcGxlcywgb3IgcHJvY2VzcyBpbmZvIGZvciB0aGVtCisgICAgICAgICAgICAgICAgIyBzbyBjbGltYiB0aGUgcGFyZW50IGhpZXJhcmN5IHRvIGZpbmQgb25lCisgICAgICAgICAgICAgICAgaWYgaW50IChwcGlkICogMTAwMCkgbm90IGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXA6CisjICAgICAgICAgICAgICAgICAgICBwcmludCAiUGlkICclZCcgc2hvcnQgbGl2ZWQgd2l0aCBubyBwcm9jZXNzIiAlIHBwaWQKKyAgICAgICAgICAgICAgICAgICAgcHBpZCA9IGZpbmRfcGFyZW50X2lkX2ZvciAocHBpZCkKKyMgICAgICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgICAgIHByaW50ICJQaWQgJyVkJyBoYXMgYW4gZW50cnkiICUgcHBpZAorICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgcHJpbnQgIlBpZCAnJWQnIG1pc3NpbmcgZnJvbSBwaWQgbWFwIiAlIHBpZAorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICByZXR1cm4gcHBpZAorCisgICAgICAgICMgbWVyZ2UgaW4gdGhlIGNtZGxpbmUgZGF0YQorICAgICAgICBpZiBzZWxmLmNtZGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgcHJvYyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHJwaWQgPSBpbnQgKHByb2MucGlkIC8vIDEwMDApCisgICAgICAgICAgICAgICAgaWYgcnBpZCBpbiBzZWxmLmNtZGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNtZCA9IHNlbGYuY21kbGluZVtycGlkXQorICAgICAgICAgICAgICAgICAgICBwcm9jLmV4ZSA9IGNtZFsnZXhlJ10KKyAgICAgICAgICAgICAgICAgICAgcHJvYy5hcmdzID0gY21kWydhcmdzJ10KKyMgICAgICAgICAgICAgICAgZWxzZToKKyMgICAgICAgICAgICAgICAgICAgIHByaW50ICJwcm9jICVkICclcycgbm90IGluIGNtZGxpbmUiICUgKHJwaWQsIHByb2MuZXhlKQorCisgICAgICAgICMgcmUtcGFyZW50IGFueSBzdHJheSBvcnBoYW5zIGlmIHdlIGNhbgorICAgICAgICBpZiBzZWxmLnBhcmVudF9tYXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgcHJvY2VzcyBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHBwaWQgPSBmaW5kX3BhcmVudF9pZF9mb3IgKGludChwcm9jZXNzLnBpZCAvLyAxMDAwKSkKKyAgICAgICAgICAgICAgICBpZiBwcGlkOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnBwaWQgPSBwcGlkICogMTAwMAorCisgICAgICAgICMgc3RpdGNoIHRoZSB0cmVlIHRvZ2V0aGVyIHdpdGggcG9pbnRlcnMKKyAgICAgICAgZm9yIHByb2Nlc3MgaW4gc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb2Nlc3Muc2V0X3BhcmVudCAoc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcCkKKworICAgICAgICAjIGNvdW50IG9uIGZpbmdlcnMgdmFyaW91c2x5CisgICAgICAgIGZvciBwcm9jZXNzIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICBwcm9jZXNzLmNhbGNfc3RhdHMgKHNlbGYucHNfc3RhdHMuc2FtcGxlX3BlcmlvZCkKKworICAgIGRlZiBjcm9wKHNlbGYsIHdyaXRlciwgY3JvcF9hZnRlcik6CisKKyAgICAgICAgZGVmIGlzX2lkbGVfYXQodXRpbCwgc3RhcnQsIGopOgorICAgICAgICAgICAgayA9IGogKyAxCisgICAgICAgICAgICB3aGlsZSBrIDwgbGVuKHV0aWwpIGFuZCB1dGlsW2tdWzBdIDwgc3RhcnQgKyAzMDA6CisgICAgICAgICAgICAgICAgayArPSAxCisgICAgICAgICAgICBrID0gbWluKGssIGxlbih1dGlsKS0xKQorCisgICAgICAgICAgICBpZiB1dGlsW2pdWzFdID49IDAuMjU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGF2Z2xvYWQgPSBzdW0odVsxXSBmb3IgdSBpbiB1dGlsW2o6aysxXSkgLyAoay1qKzEpCisgICAgICAgICAgICBpZiBhdmdsb2FkIDwgMC4yNToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZGVmIGlzX2lkbGUodXRpbCwgc3RhcnQpOgorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMCwgbGVuKHV0aWwpKToKKyAgICAgICAgICAgICAgICBpZiB1dGlsW2pdWzBdIDwgc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIGlzX2lkbGVfYXQodXRpbCwgc3RhcnQsIGopCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG5hbWVzID0gW3hbOjE1XSBmb3IgeCBpbiBjcm9wX2FmdGVyLnNwbGl0KCIsIildCisgICAgICAgIGZvciBwcm9jIGluIHNlbGYucHNfc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcm9jLmNtZCBpbiBuYW1lcyBvciBwcm9jLmV4ZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICB3cml0ZXIuaW5mbygic2VsZWN0ZWQgcHJvYyAnJXMnIGZyb20gbGlzdCAoc3RhcnQgJWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHByb2MuY21kLCBwcm9jLnN0YXJ0X3RpbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHByb2MgaXMgTm9uZToKKyAgICAgICAgICAgIHdyaXRlci53YXJuKCJubyBzZWxlY3RlZCBjcm9wIHByb2MgJyVzJyBpbiBsaXN0IiAlIGNyb3BfYWZ0ZXIpCisKKworICAgICAgICBjcHVfdXRpbCA9IFsoc2FtcGxlLnRpbWUsIHNhbXBsZS51c2VyICsgc2FtcGxlLnN5cyArIHNhbXBsZS5pbykgZm9yIHNhbXBsZSBpbiBzZWxmLmNwdV9zdGF0c10KKyAgICAgICAgZGlza191dGlsID0gWyhzYW1wbGUudGltZSwgc2FtcGxlLnV0aWwpIGZvciBzYW1wbGUgaW4gc2VsZi5kaXNrX3N0YXRzXQorCisgICAgICAgIGlkbGUgPSBOb25lCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjcHVfdXRpbCkpOgorICAgICAgICAgICAgaWYgY3B1X3V0aWxbaV1bMF0gPCBwcm9jLnN0YXJ0X3RpbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzX2lkbGVfYXQoY3B1X3V0aWwsIGNwdV91dGlsW2ldWzBdLCBpKSBcCisgICAgICAgICAgICAgICBhbmQgaXNfaWRsZShkaXNrX3V0aWwsIGNwdV91dGlsW2ldWzBdKToKKyAgICAgICAgICAgICAgICBpZGxlID0gY3B1X3V0aWxbaV1bMF0KKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGlkbGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdyaXRlci53YXJuICgibm90IGlkbGUgYWZ0ZXIgcHJvYyAnJXMnIiAlIGNyb3BfYWZ0ZXIpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGNyb3BfYXQgPSBpZGxlICsgMzAwCisgICAgICAgIHdyaXRlci5pbmZvICgiY3JvcHBpbmcgYXQgdGltZSAlZCIgJSBjcm9wX2F0KQorICAgICAgICB3aGlsZSBsZW4gKHNlbGYuY3B1X3N0YXRzKSBcCisgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNwdV9zdGF0c1stMV0udGltZSA+IGNyb3BfYXQ6CisgICAgICAgICAgICBzZWxmLmNwdV9zdGF0cy5wb3AoKQorICAgICAgICB3aGlsZSBsZW4gKHNlbGYuZGlza19zdGF0cykgXAorICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5kaXNrX3N0YXRzWy0xXS50aW1lID4gY3JvcF9hdDoKKyAgICAgICAgICAgIHNlbGYuZGlza19zdGF0cy5wb3AoKQorCisgICAgICAgIHNlbGYucHNfc3RhdHMuZW5kX3RpbWUgPSBjcm9wX2F0CisKKyAgICAgICAgY3JvcHBlZF9tYXAgPSB7fQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnBzX3N0YXRzLnByb2Nlc3NfbWFwLml0ZW1zKCk6CisgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRfdGltZSA8PSBjcm9wX2F0KToKKyAgICAgICAgICAgICAgICBjcm9wcGVkX21hcFtrZXldID0gdmFsdWUKKworICAgICAgICBmb3IgcHJvYyBpbiBjcm9wcGVkX21hcC52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb2MuZHVyYXRpb24gPSBtaW4gKHByb2MuZHVyYXRpb24sIGNyb3BfYXQgLSBwcm9jLnN0YXJ0X3RpbWUpCisgICAgICAgICAgICB3aGlsZSBsZW4gKHByb2Muc2FtcGxlcykgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHByb2Muc2FtcGxlc1stMV0udGltZSA+IGNyb3BfYXQ6CisgICAgICAgICAgICAgICAgcHJvYy5zYW1wbGVzLnBvcCgpCisKKyAgICAgICAgc2VsZi5wc19zdGF0cy5wcm9jZXNzX21hcCA9IGNyb3BwZWRfbWFwCisKKyAgICAgICAgcmV0dXJuIGlkbGUKKworCisKK2NsYXNzIFBhcnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJSZXByZXNlbnRzIGVycm9ycyBkdXJpbmcgcGFyc2Ugb2YgdGhlIGJvb3RjaGFydC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCitkZWYgX3BhcnNlX2hlYWRlcnMoZmlsZSk6CisgICAgIiIiUGFyc2VzIHRoZSBoZWFkZXJzIG9mIHRoZSBib290Y2hhcnQuIiIiCisgICAgZGVmIHBhcnNlKGFjYywgbGluZSk6CisgICAgICAgIChoZWFkZXJzLCBsYXN0KSA9IGFjYworICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgIGxhc3QsIHZhbHVlID0gbWFwIChsYW1iZGEgeDogeC5zdHJpcCgpLCBsaW5lLnNwbGl0KCc9JywgMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBoZWFkZXJzW2xhc3RdICs9IHZhbHVlCisgICAgICAgIHJldHVybiBoZWFkZXJzLCBsYXN0CisgICAgcmV0dXJuIHJlZHVjZShwYXJzZSwgZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcbicpLCAoZGVmYXVsdGRpY3Qoc3RyKSwnJykpWzBdCisKK2RlZiBfcGFyc2VfdGltZWRfYmxvY2tzKGZpbGUpOgorICAgICIiIlBhcnNlcyAoaWUuLCBzcGxpdHMpIGEgZmlsZSBpbnRvIHNvLWNhbGxlZCB0aW1lZC1ibG9ja3MuIEEKKyAgICB0aW1lZC1ibG9jayBjb25zaXN0cyBvZiBhIHRpbWVzdGFtcCBvbiBhIGxpbmUgYnkgaXRzZWxmIGZvbGxvd2VkCisgICAgYnkgemVybyBvciBtb3JlIGxpbmVzIG9mIGRhdGEgZm9yIHRoYXQgcG9pbnQgaW4gdGltZS4iIiIKKyAgICBkZWYgcGFyc2UoYmxvY2spOgorICAgICAgICBsaW5lcyA9IGJsb2NrLnNwbGl0KCdcbicpCisgICAgICAgIGlmIG5vdCBsaW5lczoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXJyb3IoJ2V4cGVjdGVkIGEgdGltZWQtYmxvY2sgY29uc2lzdGluZyBhIHRpbWVzdGFtcCBmb2xsb3dlZCBieSBkYXRhIGxpbmVzJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIChpbnQobGluZXNbMF0pLCBsaW5lc1sxOl0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiZXhwZWN0ZWQgYSB0aW1lZC1ibG9jaywgYnV0IHRpbWVzdGFtcCAnJXMnIGlzIG5vdCBhbiBpbnRlZ2VyIiAlIGxpbmVzWzBdKQorICAgIGJsb2NrcyA9IGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG5cbicpCisgICAgcmV0dXJuIFtwYXJzZShibG9jaykgZm9yIGJsb2NrIGluIGJsb2NrcyBpZiBibG9jay5zdHJpcCgpIGFuZCBub3QgYmxvY2suZW5kc3dpdGgoJyBub3QgcnVubmluZ1xuJyldCisKK2RlZiBfcGFyc2VfcHJvY19wc19sb2cod3JpdGVyLCBmaWxlKToKKyAgICAiIiIKKyAgICAgKiBTZWUgcHJvYyg1KSBmb3IgZGV0YWlscy4KKyAgICAgKgorICAgICAqIHtwaWQsIGNvbW0sIHN0YXRlLCBwcGlkLCBwZ3JwLCBzZXNzaW9uLCB0dHlfbnIsIHRwZ2lkLCBmbGFncywgbWluZmx0LCBjbWluZmx0LCBtYWpmbHQsIGNtYWpmbHQsIHV0aW1lLCBzdGltZSwKKyAgICAgKiAgY3V0aW1lLCBjc3RpbWUsIHByaW9yaXR5LCBuaWNlLCAwLCBpdHJlYWx2YWx1ZSwgc3RhcnR0aW1lLCB2c2l6ZSwgcnNzLCBybGltLCBzdGFydGNvZGUsIGVuZGNvZGUsIHN0YXJ0c3RhY2ssCisgICAgICogIGtzdGtlc3AsIGtzdGtlaXB9CisgICAgIiIiCisgICAgcHJvY2Vzc01hcCA9IHt9CisgICAgbHRpbWUgPSAwCisgICAgdGltZWRfYmxvY2tzID0gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKQorICAgIGZvciB0aW1lLCBsaW5lcyBpbiB0aW1lZF9ibG9ja3M6CisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgbm90IGxpbmU6IGNvbnRpbnVlCisgICAgICAgICAgICB0b2tlbnMgPSBsaW5lLnNwbGl0KCcgJykKKyAgICAgICAgICAgIGlmIGxlbih0b2tlbnMpIDwgMjE6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgb2Zmc2V0ID0gW2luZGV4IGZvciBpbmRleCwgdG9rZW4gaW4gZW51bWVyYXRlKHRva2Vuc1sxOl0pIGlmIHRva2VuWy0xXSA9PSAnKSddWzBdCisgICAgICAgICAgICBwaWQsIGNtZCwgc3RhdGUsIHBwaWQgPSBpbnQodG9rZW5zWzBdKSwgJyAnLmpvaW4odG9rZW5zWzE6MitvZmZzZXRdKSwgdG9rZW5zWzIrb2Zmc2V0XSwgaW50KHRva2Vuc1szK29mZnNldF0pCisgICAgICAgICAgICB1c2VyQ3B1LCBzeXNDcHUsIHN0aW1lID0gaW50KHRva2Vuc1sxMytvZmZzZXRdKSwgaW50KHRva2Vuc1sxNCtvZmZzZXRdKSwgaW50KHRva2Vuc1syMStvZmZzZXRdKQorCisgICAgICAgICAgICAjIG1hZ2ljIGZpeGVkIHBvaW50LW5lc3MgLi4uCisgICAgICAgICAgICBwaWQgKj0gMTAwMAorICAgICAgICAgICAgcHBpZCAqPSAxMDAwCisgICAgICAgICAgICBpZiBwaWQgaW4gcHJvY2Vzc01hcDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzc01hcFtwaWRdCisgICAgICAgICAgICAgICAgcHJvY2Vzcy5jbWQgPSBjbWQuc3RyaXAoJygpJykgIyB3aHkgcmVuYW1lIGFmdGVyIGxhdGVzdCBuYW1lPz8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IFByb2Nlc3Mod3JpdGVyLCBwaWQsIGNtZC5zdHJpcCgnKCknKSwgcHBpZCwgbWluKHRpbWUsIHN0aW1lKSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzTWFwW3BpZF0gPSBwcm9jZXNzCisKKyAgICAgICAgICAgIGlmIHByb2Nlc3MubGFzdF91c2VyX2NwdV90aW1lIGlzIG5vdCBOb25lIGFuZCBwcm9jZXNzLmxhc3Rfc3lzX2NwdV90aW1lIGlzIG5vdCBOb25lIGFuZCBsdGltZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1c2VyQ3B1TG9hZCwgc3lzQ3B1TG9hZCA9IHByb2Nlc3MuY2FsY19sb2FkKHVzZXJDcHUsIHN5c0NwdSwgbWF4KDEsIHRpbWUgLSBsdGltZSkpCisgICAgICAgICAgICAgICAgY3B1U2FtcGxlID0gQ1BVU2FtcGxlKCdudWxsJywgdXNlckNwdUxvYWQsIHN5c0NwdUxvYWQsIDAuMCkKKyAgICAgICAgICAgICAgICBwcm9jZXNzLnNhbXBsZXMuYXBwZW5kKFByb2Nlc3NTYW1wbGUodGltZSwgc3RhdGUsIGNwdVNhbXBsZSkpCisKKyAgICAgICAgICAgIHByb2Nlc3MubGFzdF91c2VyX2NwdV90aW1lID0gdXNlckNwdQorICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X3N5c19jcHVfdGltZSA9IHN5c0NwdQorICAgICAgICBsdGltZSA9IHRpbWUKKworICAgIGlmIGxlbiAodGltZWRfYmxvY2tzKSA8IDI6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBzdGFydFRpbWUgPSB0aW1lZF9ibG9ja3NbMF1bMF0KKyAgICBhdmdTYW1wbGVMZW5ndGggPSAobHRpbWUgLSBzdGFydFRpbWUpLyhsZW4gKHRpbWVkX2Jsb2NrcykgLSAxKQorCisgICAgcmV0dXJuIFByb2Nlc3NTdGF0cyAod3JpdGVyLCBwcm9jZXNzTWFwLCBsZW4gKHRpbWVkX2Jsb2NrcyksIGF2Z1NhbXBsZUxlbmd0aCwgc3RhcnRUaW1lLCBsdGltZSkKKworZGVmIF9wYXJzZV90YXNrc3RhdHNfbG9nKHdyaXRlciwgZmlsZSk6CisgICAgIiIiCisgICAgICogU2VlIGJvb3RjaGFydC1jb2xsZWN0b3IuYyBmb3IgZGV0YWlscy4KKyAgICAgKgorICAgICAqIHsgcGlkLCBwcGlkLCBjb21tLCBjcHVfcnVuX3JlYWxfdG90YWwsIGJsa2lvX2RlbGF5X3RvdGFsLCBzd2FwaW5fZGVsYXlfdG90YWwgfQorICAgICAqCisgICAgIiIiCisgICAgcHJvY2Vzc01hcCA9IHt9CisgICAgcGlkUmV3cml0ZXMgPSB7fQorICAgIGx0aW1lID0gTm9uZQorICAgIHRpbWVkX2Jsb2NrcyA9IF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSkKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gdGltZWRfYmxvY2tzOgorICAgICAgICAjIHdlIGhhdmUgbm8gJ3N0aW1lJyBmcm9tIHRhc2tzdGF0cywgc28gcHJlcCAnaW5pdCcKKyAgICAgICAgaWYgbHRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MgPSBQcm9jZXNzKHdyaXRlciwgMSwgJ1tpbml0XScsIDAsIDApCisgICAgICAgICAgICBwcm9jZXNzTWFwWzEwMDBdID0gcHJvY2VzcworICAgICAgICAgICAgbHRpbWUgPSB0aW1lCisjICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgICAgICAgdG9rZW5zID0gbGluZS5zcGxpdCgnICcpCisgICAgICAgICAgICBpZiBsZW4odG9rZW5zKSAhPSA2OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIG9waWQsIHBwaWQsIGNtZCA9IGludCh0b2tlbnNbMF0pLCBpbnQodG9rZW5zWzFdKSwgdG9rZW5zWzJdCisgICAgICAgICAgICBjcHVfbnMsIGJsa2lvX2RlbGF5X25zLCBzd2FwaW5fZGVsYXlfbnMgPSBsb25nKHRva2Vuc1stM10pLCBsb25nKHRva2Vuc1stMl0pLCBsb25nKHRva2Vuc1stMV0pLAorCisgICAgICAgICAgICAjIG1ha2Ugc3BhY2UgZm9yIHRyZWVzIG9mIHBpZHMKKyAgICAgICAgICAgIG9waWQgKj0gMTAwMAorICAgICAgICAgICAgcHBpZCAqPSAxMDAwCisKKyAgICAgICAgICAgICMgd2hlbiB0aGUgcHJvY2VzcyBuYW1lIGNoYW5nZXMsIHdlIHJlLXdyaXRlIHRoZSBwaWQuCisgICAgICAgICAgICBpZiBvcGlkIGluIHBpZFJld3JpdGVzOgorICAgICAgICAgICAgICAgIHBpZCA9IHBpZFJld3JpdGVzW29waWRdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBpZCA9IG9waWQKKworICAgICAgICAgICAgY21kID0gY21kLnN0cmlwKCcoJykuc3RyaXAoJyknKQorICAgICAgICAgICAgaWYgcGlkIGluIHByb2Nlc3NNYXA6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3NNYXBbcGlkXQorICAgICAgICAgICAgICAgIGlmIHByb2Nlc3MuY21kICE9IGNtZDoKKyAgICAgICAgICAgICAgICAgICAgcGlkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcGlkUmV3cml0ZXNbb3BpZF0gPSBwaWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAicHJvY2VzcyBtdXRhdGlvbiAhICclcycgdnMgJyVzJyBwaWQgJXMgLT4gcGlkICVzXG4iICUgKHByb2Nlc3MuY21kLCBjbWQsIG9waWQsIHBpZCkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3Muc3BsaXQgKHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHRpbWUpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NNYXBbcGlkXSA9IHByb2Nlc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmNtZCA9IGNtZDsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvY2VzcyA9IFByb2Nlc3Mod3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgdGltZSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzTWFwW3BpZF0gPSBwcm9jZXNzCisKKyAgICAgICAgICAgIGRlbHRhX2NwdV9ucyA9IChmbG9hdCkgKGNwdV9ucyAtIHByb2Nlc3MubGFzdF9jcHVfbnMpCisgICAgICAgICAgICBkZWx0YV9ibGtpb19kZWxheV9ucyA9IChmbG9hdCkgKGJsa2lvX2RlbGF5X25zIC0gcHJvY2Vzcy5sYXN0X2Jsa2lvX2RlbGF5X25zKQorICAgICAgICAgICAgZGVsdGFfc3dhcGluX2RlbGF5X25zID0gKGZsb2F0KSAoc3dhcGluX2RlbGF5X25zIC0gcHJvY2Vzcy5sYXN0X3N3YXBpbl9kZWxheV9ucykKKworICAgICAgICAgICAgIyBtYWtlIHVwIHNvbWUgc3RhdGUgZGF0YSAuLi4KKyAgICAgICAgICAgIGlmIGRlbHRhX2NwdV9ucyA+IDA6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAiUiIKKyAgICAgICAgICAgIGVsaWYgZGVsdGFfYmxraW9fZGVsYXlfbnMgKyBkZWx0YV9zd2FwaW5fZGVsYXlfbnMgPiAwOgorICAgICAgICAgICAgICAgIHN0YXRlID0gIkQiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlID0gIlMiCisKKyAgICAgICAgICAgICMgcmV0YWluIHRoZSBucyB0aW1pbmcgaW5mb3JtYXRpb24gaW50byBhIENQVVNhbXBsZSAtIHRoYXQgdHJpZXMKKyAgICAgICAgICAgICMgd2l0aCB0aGUgb2xkLXN0eWxlIHRvIGJlIGEgJWFnZSBvZiBDUFUgdXNlZCBpbiB0aGlzIHRpbWUtc2xpY2UuCisgICAgICAgICAgICBpZiBkZWx0YV9jcHVfbnMgKyBkZWx0YV9ibGtpb19kZWxheV9ucyArIGRlbHRhX3N3YXBpbl9kZWxheV9ucyA+IDA6CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwcm9jICVzIGNwdV9ucyAlZyBkZWx0YV9jcHUgJWciICUgKGNtZCwgY3B1X25zLCBkZWx0YV9jcHVfbnMpCisgICAgICAgICAgICAgICAgY3B1U2FtcGxlID0gQ1BVU2FtcGxlKCdudWxsJywgZGVsdGFfY3B1X25zLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhX2Jsa2lvX2RlbGF5X25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YV9zd2FwaW5fZGVsYXlfbnMpCisgICAgICAgICAgICAgICAgcHJvY2Vzcy5zYW1wbGVzLmFwcGVuZChQcm9jZXNzU2FtcGxlKHRpbWUsIHN0YXRlLCBjcHVTYW1wbGUpKQorCisgICAgICAgICAgICBwcm9jZXNzLmxhc3RfY3B1X25zID0gY3B1X25zCisgICAgICAgICAgICBwcm9jZXNzLmxhc3RfYmxraW9fZGVsYXlfbnMgPSBibGtpb19kZWxheV9ucworICAgICAgICAgICAgcHJvY2Vzcy5sYXN0X3N3YXBpbl9kZWxheV9ucyA9IHN3YXBpbl9kZWxheV9ucworICAgICAgICBsdGltZSA9IHRpbWUKKworICAgIGlmIGxlbiAodGltZWRfYmxvY2tzKSA8IDI6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBzdGFydFRpbWUgPSB0aW1lZF9ibG9ja3NbMF1bMF0KKyAgICBhdmdTYW1wbGVMZW5ndGggPSAobHRpbWUgLSBzdGFydFRpbWUpLyhsZW4odGltZWRfYmxvY2tzKS0xKQorCisgICAgcmV0dXJuIFByb2Nlc3NTdGF0cyAod3JpdGVyLCBwcm9jZXNzTWFwLCBsZW4gKHRpbWVkX2Jsb2NrcyksIGF2Z1NhbXBsZUxlbmd0aCwgc3RhcnRUaW1lLCBsdGltZSkKKworZGVmIF9wYXJzZV9wcm9jX3N0YXRfbG9nKGZpbGUpOgorICAgIHNhbXBsZXMgPSBbXQorICAgIGx0aW1lcyA9IE5vbmUKKyAgICBmb3IgdGltZSwgbGluZXMgaW4gX3BhcnNlX3RpbWVkX2Jsb2NrcyhmaWxlKToKKyAgICAgICAgIyBza2lwIGVtdHB5IGxpbmVzCisgICAgICAgIGlmIG5vdCBsaW5lczoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgQ1BVIHRpbWVzIHt1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvX3dhaXQsIGlycSwgc29mdGlycX0KKyAgICAgICAgdG9rZW5zID0gbGluZXNbMF0uc3BsaXQoKQorICAgICAgICB0aW1lcyA9IFsgaW50KHRva2VuKSBmb3IgdG9rZW4gaW4gdG9rZW5zWzE6XSBdCisgICAgICAgIGlmIGx0aW1lczoKKyAgICAgICAgICAgIHVzZXIgPSBmbG9hdCgodGltZXNbMF0gKyB0aW1lc1sxXSkgLSAobHRpbWVzWzBdICsgbHRpbWVzWzFdKSkKKyAgICAgICAgICAgIHN5c3RlbSA9IGZsb2F0KCh0aW1lc1syXSArIHRpbWVzWzVdICsgdGltZXNbNl0pIC0gKGx0aW1lc1syXSArIGx0aW1lc1s1XSArIGx0aW1lc1s2XSkpCisgICAgICAgICAgICBpZGxlID0gZmxvYXQodGltZXNbM10gLSBsdGltZXNbM10pCisgICAgICAgICAgICBpb3dhaXQgPSBmbG9hdCh0aW1lc1s0XSAtIGx0aW1lc1s0XSkKKworICAgICAgICAgICAgYVN1bSA9IG1heCh1c2VyICsgc3lzdGVtICsgaWRsZSArIGlvd2FpdCwgMSkKKyAgICAgICAgICAgIHNhbXBsZXMuYXBwZW5kKCBDUFVTYW1wbGUodGltZSwgdXNlci9hU3VtLCBzeXN0ZW0vYVN1bSwgaW93YWl0L2FTdW0pICkKKworICAgICAgICBsdGltZXMgPSB0aW1lcworICAgICAgICAjIHNraXAgdGhlIHJlc3Qgb2Ygc3RhdGlzdGljcyBsaW5lcworICAgIHJldHVybiBzYW1wbGVzCisKK2RlZiBfcGFyc2VfcHJvY19kaXNrX3N0YXRfbG9nKGZpbGUsIG51bUNwdSk6CisgICAgIiIiCisgICAgUGFyc2UgZmlsZSBmb3IgZGlzayBzdGF0cywgYnV0IG9ubHkgbG9vayBhdCB0aGUgd2hvbGUgZGV2aWNlLCBlZy4gc2RhLAorICAgIG5vdCBzZGExLCBzZGEyIGV0Yy4gVGhlIGZvcm1hdCBvZiByZWxldmFudCBsaW5lcyBzaG91bGQgYmU6CisgICAge21ham9yIG1pbm9yIG5hbWUgcmlvIHJtZXJnZSByc2VjdCBydXNlIHdpbyB3bWVyZ2Ugd3NlY3Qgd3VzZSBydW5uaW5nIHVzZSBhdmVxfQorICAgICIiIgorICAgIGRpc2tfcmVnZXhfcmUgPSByZS5jb21waWxlICgnXihbaHN2XWQufG10ZGJsb2NrXGR8bW1jYmxrXGR8Y2Npc3MvY1xkK2RcZCsuKikkJykKKworICAgICMgdGhpcyBnZXRzIGNhbGxlZCBhbiBhd2Z1bCBsb3QuCisgICAgZGVmIGlzX3JlbGV2YW50X2xpbmUobGluZXRva2Vucyk6CisgICAgICAgIGlmIGxlbihsaW5ldG9rZW5zKSAhPSAxNDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBkaXNrID0gbGluZXRva2Vuc1syXQorICAgICAgICByZXR1cm4gZGlza19yZWdleF9yZS5tYXRjaChkaXNrKQorCisgICAgZGlza19zdGF0X3NhbXBsZXMgPSBbXQorCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSk6CisgICAgICAgIHNhbXBsZSA9IERpc2tTdGF0U2FtcGxlKHRpbWUpCisgICAgICAgIHJlbGV2YW50X3Rva2VucyA9IFtsaW5ldG9rZW5zIGZvciBsaW5ldG9rZW5zIGluIG1hcCAobGFtYmRhIHg6IHguc3BsaXQoKSxsaW5lcykgaWYgaXNfcmVsZXZhbnRfbGluZShsaW5ldG9rZW5zKV0KKworICAgICAgICBmb3IgdG9rZW5zIGluIHJlbGV2YW50X3Rva2VuczoKKyAgICAgICAgICAgIGRpc2ssIHJzZWN0LCB3c2VjdCwgdXNlID0gdG9rZW5zWzJdLCBpbnQodG9rZW5zWzVdKSwgaW50KHRva2Vuc1s5XSksIGludCh0b2tlbnNbMTJdKQorICAgICAgICAgICAgc2FtcGxlLmFkZF9kaXNrZGF0YShbcnNlY3QsIHdzZWN0LCB1c2VdKQorCisgICAgICAgIGRpc2tfc3RhdF9zYW1wbGVzLmFwcGVuZChzYW1wbGUpCisKKyAgICBkaXNrX3N0YXRzID0gW10KKyAgICBmb3Igc2FtcGxlMSwgc2FtcGxlMiBpbiB6aXAoZGlza19zdGF0X3NhbXBsZXNbOi0xXSwgZGlza19zdGF0X3NhbXBsZXNbMTpdKToKKyAgICAgICAgaW50ZXJ2YWwgPSBzYW1wbGUxLnRpbWUgLSBzYW1wbGUyLnRpbWUKKyAgICAgICAgaWYgaW50ZXJ2YWwgPT0gMDoKKyAgICAgICAgICAgIGludGVydmFsID0gMQorICAgICAgICBzdW1zID0gWyBhIC0gYiBmb3IgYSwgYiBpbiB6aXAoc2FtcGxlMS5kaXNrZGF0YSwgc2FtcGxlMi5kaXNrZGF0YSkgXQorICAgICAgICByZWFkVHB1dCA9IHN1bXNbMF0gLyAyLjAgKiAxMDAuMCAvIGludGVydmFsCisgICAgICAgIHdyaXRlVHB1dCA9IHN1bXNbMV0gLyAyLjAgKiAxMDAuMCAvIGludGVydmFsCisgICAgICAgIHV0aWwgPSBmbG9hdCggc3Vtc1syXSApIC8gMTAgLyBpbnRlcnZhbCAvIG51bUNwdQorICAgICAgICB1dGlsID0gbWF4KDAuMCwgbWluKDEuMCwgdXRpbCkpCisgICAgICAgIGRpc2tfc3RhdHMuYXBwZW5kKERpc2tTYW1wbGUoc2FtcGxlMi50aW1lLCByZWFkVHB1dCwgd3JpdGVUcHV0LCB1dGlsKSkKKworICAgIHJldHVybiBkaXNrX3N0YXRzCisKK2RlZiBfcGFyc2VfcHJvY19tZW1pbmZvX2xvZyhmaWxlKToKKyAgICAiIiIKKyAgICBQYXJzZSBmaWxlIGZvciBnbG9iYWwgbWVtb3J5IHN0YXRpc3RpY3MuCisgICAgVGhlIGZvcm1hdCBvZiByZWxldmFudCBsaW5lcyBzaG91bGQgYmU6IF5rZXk6IHZhbHVlKCB1bml0KT8KKyAgICAiIiIKKyAgICB1c2VkX3ZhbHVlcyA9ICgnTWVtVG90YWwnLCAnTWVtRnJlZScsICdCdWZmZXJzJywgJ0NhY2hlZCcsICdTd2FwVG90YWwnLCAnU3dhcEZyZWUnLCkKKworICAgIG1lbV9zdGF0cyA9IFtdCisgICAgbWVtaW5mb19yZSA9IHJlLmNvbXBpbGUocicoW14gXHQ6XSspOlxzKihcZCspLionKQorCisgICAgZm9yIHRpbWUsIGxpbmVzIGluIF9wYXJzZV90aW1lZF9ibG9ja3MoZmlsZSk6CisgICAgICAgIHNhbXBsZSA9IE1lbVNhbXBsZSh0aW1lKQorCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgbWF0Y2ggPSBtZW1pbmZvX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiSW52YWxpZCBtZW1pbmZvIGxpbmUgXCIlc1wiIiAlIG1hdGNoLmdyb3VwcygwKSkKKyAgICAgICAgICAgIHNhbXBsZS5hZGRfdmFsdWUobWF0Y2guZ3JvdXAoMSksIGludChtYXRjaC5ncm91cCgyKSkpCisKKyAgICAgICAgaWYgc2FtcGxlLnZhbGlkKCk6CisgICAgICAgICAgICBtZW1fc3RhdHMuYXBwZW5kKHNhbXBsZSkKKworICAgIHJldHVybiBtZW1fc3RhdHMKKworIyBpZiB3ZSBib290IHRoZSBrZXJuZWwgd2l0aDogaW5pdGNhbGxfZGVidWcgcHJpbnRrLnRpbWU9MSB3ZSBjYW4KKyMgZ2V0IGFsbCBtYW5uZXIgb2YgaW50ZXJlc3RpbmcgZGF0YSBmcm9tIHRoZSBkbWVzZyBvdXRwdXQKKyMgV2UgdHVybiB0aGlzIGludG8gYSBwc2V1ZG8tcHJvY2VzcyB0cmVlOiBlYWNoIGV2ZW50IGlzCisjIGNoYXJhY3RlcmlzZWQgYnkgYQorIyB3ZSBkb24ndCB0cnkgdG8gZGV0ZWN0IGEgImtlcm5lbCBmaW5pc2hlZCIgc3RhdGUgLSBzaW5jZSB0aGUga2VybmVsCisjIGNvbnRpbnVlcyB0byBkbyBpbnRlcmVzdGluZyB0aGluZ3MgYWZ0ZXIgaW5pdCBpcyBjYWxsZWQuCisjCisjIHNhbXBsZSBpbnB1dDoKKyMgWyAgICAwLjAwMDAwMF0gQUNQSTogRkFDUCAzZjRmYzAwMCAwMDBGNCAodjA0IElOVEVMICBOYXBhICAgICAwMDAwMDAwMSBNU0ZUIDAxMDAwMDEzKQorIyAuLi4KKyMgWyAgICAwLjAzOTk5M10gY2FsbGluZyAgbWlncmF0aW9uX2luaXQrMHgwLzB4NmIgQCAxCisjIFsgICAgMC4wMzk5OTNdIGluaXRjYWxsIG1pZ3JhdGlvbl9pbml0KzB4MC8weDZiIHJldHVybmVkIDEgYWZ0ZXIgMCB1c2VjcworZGVmIF9wYXJzZV9kbWVzZyh3cml0ZXIsIGZpbGUpOgorICAgIHRpbWVzdGFtcF9yZSA9IHJlLmNvbXBpbGUgKCJeXFtccyooXGQrXC5cZCspXHMqXVxzKyguKikkIikKKyAgICBzcGxpdF9yZSA9IHJlLmNvbXBpbGUgKCJeKFxTKylccysoW1xTXCtfLV0rKSAoLiopJCIpCisgICAgcHJvY2Vzc01hcCA9IHt9CisgICAgaWR4ID0gMAorICAgIGluYyA9IDEuMCAvIDEwMDAwMDAKKyAgICBrZXJuZWwgPSBQcm9jZXNzKHdyaXRlciwgaWR4LCAiay1ib290IiwgMCwgMC4xKQorICAgIHByb2Nlc3NNYXBbJ2stYm9vdCddID0ga2VybmVsCisgICAgYmFzZV90cyA9IEZhbHNlCisgICAgbWF4X3RzID0gMAorICAgIGZvciBsaW5lIGluIGZpbGUucmVhZCgpLmRlY29kZSgndXRmLTgnKS5zcGxpdCgnXG4nKToKKyAgICAgICAgdCA9IHRpbWVzdGFtcF9yZS5tYXRjaCAobGluZSkKKyAgICAgICAgaWYgdCBpcyBOb25lOgorIyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImR1ZmYgdGltZXN0YW1wICIgKyBsaW5lCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHRpbWVfbXMgPSBmbG9hdCAodC5ncm91cCgxKSkgKiAxMDAwCisgICAgICAgICMgbG9va3MgbGlrZSB3ZSBtYXkgaGF2ZSBhIGh1Z2UgZGlmZiBhZnRlciB0aGUgY2xvY2sKKyAgICAgICAgIyBoYXMgYmVlbiBzZXQgdXAuIFRoaXMgY291bGQgbGVhZCB0byBodWdlIGdyYXBoOgorICAgICAgICAjIHNvIGh1Z2Ugd2Ugd2lsbCBiZSBraWxsZWQgYnkgdGhlIE9PTS4KKyAgICAgICAgIyBTbyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwbGFpbiB0aW1lc3RhbXAgd2Ugd2lsbAorICAgICAgICAjIHVzZSBhIGRlbHRhIHRvIGZpcnN0IG9uZSBhbmQgc2tpcCB0aGUgZmlyc3Qgb25lCisgICAgICAgICMgZm9yIGNvbnZlbmllbmNlCisgICAgICAgIGlmIG1heF90cyA9PSAwIGFuZCBub3QgYmFzZV90cyBhbmQgdGltZV9tcyA+IDEwMDA6CisgICAgICAgICAgICBiYXNlX3RzID0gdGltZV9tcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWF4X3RzID0gbWF4KHRpbWVfbXMsIG1heF90cykKKyAgICAgICAgaWYgYmFzZV90czoKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJmc2NrZWQgY2xvY2s6IHVzZWQgJWYgaW5zdGVhZCBvZiAlZiIgJSAodGltZV9tcyAtIGJhc2VfdHMsIHRpbWVfbXMpCisgICAgICAgICAgICB0aW1lX21zIC09IGJhc2VfdHMKKyAgICAgICAgbSA9IHNwbGl0X3JlLm1hdGNoICh0Lmdyb3VwKDIpKQorCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisjICAgICAgICAgICAgICAgcHJpbnQgIm1hdGNoOiAnJXMnIiAlIChtLmdyb3VwKDEpKQorICAgICAgICB0eXBlID0gbS5ncm91cCgxKQorICAgICAgICBmdW5jID0gbS5ncm91cCgyKQorICAgICAgICByZXN0ID0gbS5ncm91cCgzKQorCisgICAgICAgIGlmIHQuZ3JvdXAoMikuc3RhcnRzd2l0aCAoJ1dyaXRlIHByb3RlY3RpbmcgdGhlJykgb3IgXAorICAgICAgICAgICB0Lmdyb3VwKDIpLnN0YXJ0c3dpdGggKCdGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5Jyk6CisgICAgICAgICAgICBrZXJuZWwuZHVyYXRpb24gPSB0aW1lX21zIC8gMTAKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyMgICAgICAgICAgICAgICBwcmludCAiZm9vOiAnJXMnICclcycgJyVzJyIgJSAodHlwZSwgZnVuYywgcmVzdCkKKyAgICAgICAgaWYgdHlwZSA9PSAiY2FsbGluZyI6CisgICAgICAgICAgICBwcGlkID0ga2VybmVsLnBpZAorICAgICAgICAgICAgcCA9IHJlLm1hdGNoICgiXEAgKFxkKykiLCByZXN0KQorICAgICAgICAgICAgaWYgcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwcGlkID0gZmxvYXQgKHAuZ3JvdXAoMSkpIC8vIDEwMDAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIm1hdGNoOiAnJXMnICgnJWcnKSBhdCAnJXMnIiAlIChmdW5jLCBwcGlkLCB0aW1lX21zKQorICAgICAgICAgICAgbmFtZSA9IGZ1bmMuc3BsaXQgKCcrJywgMSkgWzBdCisgICAgICAgICAgICBpZHggKz0gaW5jCisgICAgICAgICAgICBwcm9jZXNzTWFwW2Z1bmNdID0gUHJvY2Vzcyh3cml0ZXIsIHBwaWQgKyBpZHgsIG5hbWUsIHBwaWQsIHRpbWVfbXMgLyAxMCkKKyAgICAgICAgZWxpZiB0eXBlID09ICJpbml0Y2FsbCI6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiZmluaXNoZWQ6ICclcycgYXQgJyVzJyIgJSAoZnVuYywgdGltZV9tcykKKyAgICAgICAgICAgIGlmIGZ1bmMgaW4gcHJvY2Vzc01hcDoKKyAgICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzc01hcFtmdW5jXQorICAgICAgICAgICAgICAgIHByb2Nlc3MuZHVyYXRpb24gPSAodGltZV9tcyAvIDEwKSAtIHByb2Nlc3Muc3RhcnRfdGltZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgiY29ycnVwdGVkIGluaXQgY2FsbCBmb3IgJXMiICUgKGZ1bmMpKQorCisgICAgICAgIGVsaWYgdHlwZSA9PSAiYXN5bmNfd2FpdGluZyIgb3IgdHlwZSA9PSAiYXN5bmNfY29udGludWluZyI6CisgICAgICAgICAgICBjb250aW51ZSAjIGlnbm9yZQorCisgICAgcmV0dXJuIHByb2Nlc3NNYXAudmFsdWVzKCkKKworIworIyBQYXJzZSBiaW5hcnkgcGFjY3QgYWNjb3VudGluZyBmaWxlIG91dHB1dCBpZiB3ZSBoYXZlIG9uZQorIyBjZi4gL3Vzci9pbmNsdWRlL2xpbnV4L2FjY3QuaAorIworZGVmIF9wYXJzZV9wYWNjdCh3cml0ZXIsIGZpbGUpOgorICAgICMgcmVhZCBMRSBpbnQzMgorICAgIGRlZiBfcmVhZF9sZV9pbnQzMihmaWxlKToKKyAgICAgICAgYnl0cyA9IGZpbGUucmVhZCg0KQorICAgICAgICByZXR1cm4gKG9yZChieXRzWzBdKSkgICAgICAgfCAob3JkKGJ5dHNbMV0pIDw8IDgpIHwgXAorICAgICAgICAgICAgICAgKG9yZChieXRzWzJdKSA8PCAxNikgfCAob3JkKGJ5dHNbM10pIDw8IDI0KQorCisgICAgcGFyZW50X21hcCA9IHt9CisgICAgcGFyZW50X21hcFswXSA9IDAKKyAgICB3aGlsZSBmaWxlLnJlYWQoMSkgIT0gIiI6ICMgaWdub3JlIGZsYWdzCisgICAgICAgIHZlciA9IGZpbGUucmVhZCgxKQorICAgICAgICBpZiBvcmQodmVyKSA8IDM6CisgICAgICAgICAgICBwcmludCgiSW52YWxpZCB2ZXJzaW9uIDB4JXgiICUgKG9yZCh2ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZmlsZS5zZWVrICgxNCwgMSkgICAgICMgdXNlciwgZ3JvdXAgZXRjLgorICAgICAgICBwaWQgPSBfcmVhZF9sZV9pbnQzMiAoZmlsZSkKKyAgICAgICAgcHBpZCA9IF9yZWFkX2xlX2ludDMyIChmaWxlKQorIyAgICAgICAgICAgICAgIHByaW50ICJQYXJlbnQgb2YgJWQgaXMgJWQiICUgKHBpZCwgcHBpZCkKKyAgICAgICAgcGFyZW50X21hcFtwaWRdID0gcHBpZAorICAgICAgICBmaWxlLnNlZWsgKDQgKyA0ICsgMTYsIDEpICMgdGltaW5ncworICAgICAgICBmaWxlLnNlZWsgKDE2LCAxKSAgICAgICAgICMgYWNjdF9jb21tCisgICAgcmV0dXJuIHBhcmVudF9tYXAKKworZGVmIF9wYXJzZV9wYXRlcm5pdHlfbG9nKHdyaXRlciwgZmlsZSk6CisgICAgcGFyZW50X21hcCA9IHt9CisgICAgcGFyZW50X21hcFswXSA9IDAKKyAgICBmb3IgbGluZSBpbiBmaWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04Jykuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxlbXMgPSBsaW5lLnNwbGl0KCcgJykgIyA8Q2hpbGQ+IDxQYXJlbnQ+CisgICAgICAgIGlmIGxlbiAoZWxlbXMpID49IDI6CisjICAgICAgICAgICAgICAgICAgICAgICBwcmludCAicGF0ZXJuaXR5IG9mICVkIGlzICVkIiAlIChpbnQoZWxlbXNbMF0pLCBpbnQoZWxlbXNbMV0pKQorICAgICAgICAgICAgcGFyZW50X21hcFtpbnQoZWxlbXNbMF0pXSA9IGludChlbGVtc1sxXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJPZGQgcGF0ZXJuaXR5IGxpbmUgJyVzJyIgJSAobGluZSkpCisgICAgcmV0dXJuIHBhcmVudF9tYXAKKworZGVmIF9wYXJzZV9jbWRsaW5lX2xvZyh3cml0ZXIsIGZpbGUpOgorICAgIGNtZExpbmVzID0ge30KKyAgICBmb3IgYmxvY2sgaW4gZmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpLnNwbGl0KCdcblxuJyk6CisgICAgICAgIGxpbmVzID0gYmxvY2suc3BsaXQoJ1xuJykKKyAgICAgICAgaWYgbGVuIChsaW5lcykgPj0gMzoKKyMgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJMaW5lcyAnJXMnIiAlIChsaW5lc1swXSkKKyAgICAgICAgICAgIHBpZCA9IGludCAobGluZXNbMF0pCisgICAgICAgICAgICB2YWx1ZXMgPSB7fQorICAgICAgICAgICAgdmFsdWVzWydleGUnXSA9IGxpbmVzWzFdLmxzdHJpcCgnOicpCisgICAgICAgICAgICBhcmdzID0gbGluZXNbMl0ubHN0cmlwKCc6Jykuc3BsaXQoJ1wwJykKKyAgICAgICAgICAgIGFyZ3MucG9wKCkKKyAgICAgICAgICAgIHZhbHVlc1snYXJncyddID0gYXJncworICAgICAgICAgICAgY21kTGluZXNbcGlkXSA9IHZhbHVlcworICAgIHJldHVybiBjbWRMaW5lcworCitkZWYgZ2V0X251bV9jcHVzKGhlYWRlcnMpOgorICAgICIiIkdldCB0aGUgbnVtYmVyIG9mIENQVXMgZnJvbSB0aGUgc3lzdGVtLmNwdSBoZWFkZXIgcHJvcGVydHkuIEFzIHRoZQorICAgIENQVSB1dGlsaXphdGlvbiBncmFwaHMgYXJlIHJlbGF0aXZlLCB0aGUgbnVtYmVyIG9mIENQVXMgY3VycmVudGx5IG1ha2VzCisgICAgbm8gZGlmZmVyZW5jZS4iIiIKKyAgICBpZiBoZWFkZXJzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiAxCisgICAgaWYgaGVhZGVycy5nZXQoInN5c3RlbS5jcHUubnVtIik6CisgICAgICAgIHJldHVybiBtYXggKGludCAoaGVhZGVycy5nZXQoInN5c3RlbS5jcHUubnVtIikpLCAxKQorICAgIGNwdV9tb2RlbCA9IGhlYWRlcnMuZ2V0KCJzeXN0ZW0uY3B1IikKKyAgICBpZiBjcHVfbW9kZWwgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIDEKKyAgICBtYXQgPSByZS5tYXRjaCgiLipcXCgoXFxkKylcXCkiLCBjcHVfbW9kZWwpCisgICAgaWYgbWF0IGlzIE5vbmU6CisgICAgICAgIHJldHVybiAxCisgICAgcmV0dXJuIG1heCAoaW50KG1hdC5ncm91cCgxKSksIDEpCisKK2RlZiBfZG9fcGFyc2Uod3JpdGVyLCBzdGF0ZSwgZmlsZW5hbWUsIGZpbGUpOgorICAgIHdyaXRlci5pbmZvKCJwYXJzaW5nICclcyciICUgZmlsZW5hbWUpCisgICAgdDEgPSBjbG9jaygpCisgICAgcGF0aHMgPSBmaWxlbmFtZS5zcGxpdCgiLyIpCisgICAgdGFzayA9IHBhdGhzWy0xXQorICAgIHBuID0gcGF0aHNbLTJdCisgICAgc3RhcnQgPSBOb25lCisgICAgZW5kID0gTm9uZQorICAgIGZvciBsaW5lIGluIGZpbGU6CisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU3RhcnRlZDoiKToKKyAgICAgICAgICAgIHN0YXJ0ID0gaW50KGZsb2F0KGxpbmUuc3BsaXQoKVstMV0pKQorICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgiRW5kZWQ6Iik6CisgICAgICAgICAgICBlbmQgPSBpbnQoZmxvYXQobGluZS5zcGxpdCgpWy0xXSkpCisgICAgaWYgc3RhcnQgYW5kIGVuZDoKKyAgICAgICAgc3RhdGUuYWRkX3Byb2Nlc3MocG4gKyAiOiIgKyB0YXNrLCBzdGFydCwgZW5kKQorICAgIHQyID0gY2xvY2soKQorICAgIHdyaXRlci5pbmZvKCIgICVzIHNlY29uZHMiICUgc3RyKHQyLXQxKSkKKyAgICByZXR1cm4gc3RhdGUKKworZGVmIHBhcnNlX2ZpbGUod3JpdGVyLCBzdGF0ZSwgZmlsZW5hbWUpOgorICAgIGlmIHN0YXRlLmZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgIHN0YXRlLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmaWxlOgorICAgICAgICByZXR1cm4gX2RvX3BhcnNlKHdyaXRlciwgc3RhdGUsIGZpbGVuYW1lLCBmaWxlKQorCitkZWYgcGFyc2VfcGF0aHMod3JpdGVyLCBzdGF0ZSwgcGF0aHMpOgorICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICBpZiBzdGF0ZS5maWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgc3RhdGUuZmlsZW5hbWUgPSBwYXRoCisgICAgICAgIHJvb3QsIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQocGF0aCkKKyAgICAgICAgaWYgbm90KG9zLnBhdGguZXhpc3RzKHBhdGgpKToKKyAgICAgICAgICAgIHdyaXRlci53YXJuKCJ3YXJuaW5nOiBwYXRoICclcycgZG9lcyBub3QgZXhpc3QsIGlnbm9yaW5nLiIgJSBwYXRoKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgI3N0YXRlLmZpbGVuYW1lID0gcGF0aAorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgZmlsZXMgPSBzb3J0ZWQoW29zLnBhdGguam9pbihwYXRoLCBmKSBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpXSkKKyAgICAgICAgICAgIHN0YXRlID0gcGFyc2VfcGF0aHMod3JpdGVyLCBzdGF0ZSwgZmlsZXMpCisgICAgICAgIGVsaWYgZXh0ZW5zaW9uIGluIFsiLnRhciIsICIudGd6IiwgIi5neiJdOgorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICIuZ3oiOgorICAgICAgICAgICAgICAgIHJvb3QsIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQocm9vdCkKKyAgICAgICAgICAgICAgICBpZiBleHRlbnNpb24gIT0gIi50YXIiOgorICAgICAgICAgICAgICAgICAgICB3cml0ZXIud2Fybigid2FybmluZzogY2FuIG9ubHkgaGFuZGxlIHppcHBlZCB0YXIgZmlsZXMsIG5vdCB6aXBwZWQgJyVzJy1maWxlczsgaWdub3JpbmciICUgZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdGYgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd3JpdGVyLnN0YXR1cygicGFyc2luZyAnJXMnIiAlIHBhdGgpCisgICAgICAgICAgICAgICAgdGYgPSB0YXJmaWxlLm9wZW4ocGF0aCwgJ3I6KicpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gdGYuZ2V0bmFtZXMoKToKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBfZG9fcGFyc2Uod3JpdGVyLCBzdGF0ZSwgbmFtZSwgdGYuZXh0cmFjdGZpbGUobmFtZSkpCisgICAgICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFcnJvcigiZXJyb3I6IGNvdWxkIG5vdCByZWFkIHRhcmZpbGUgJyVzJzogJXMuIiAlIChwYXRoLCBlcnJvcikpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIHRmICE9IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRmLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlID0gcGFyc2VfZmlsZSh3cml0ZXIsIHN0YXRlLCBwYXRoKQorICAgIHJldHVybiBzdGF0ZQorCitkZWYgc3BsaXRfcmVzKHJlcywgb3B0aW9ucyk6CisgICAgIiIiIFNwbGl0IHRoZSByZXMgaW50byBuIHBpZWNlcyAiIiIKKyAgICByZXNfbGlzdCA9IFtdCisgICAgaWYgb3B0aW9ucy5udW0gPiAxOgorICAgICAgICBzX2xpc3QgPSBzb3J0ZWQocmVzLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgZnJhZ19zaXplID0gbGVuKHNfbGlzdCkgLyBmbG9hdChvcHRpb25zLm51bSkKKyAgICAgICAgIyBOZWVkIHRoZSB0b3AgdmFsdWUKKyAgICAgICAgaWYgZnJhZ19zaXplID4gaW50KGZyYWdfc2l6ZSk6CisgICAgICAgICAgICBmcmFnX3NpemUgPSBpbnQoZnJhZ19zaXplICsgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyYWdfc2l6ZSA9IGludChmcmFnX3NpemUpCisKKyAgICAgICAgc3RhcnQgPSAwCisgICAgICAgIGVuZCA9IGZyYWdfc2l6ZQorICAgICAgICB3aGlsZSBzdGFydCA8IGVuZDoKKyAgICAgICAgICAgIHN0YXRlID0gVHJhY2UoTm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICBpZiBvcHRpb25zLmZ1bGxfdGltZToKKyAgICAgICAgICAgICAgICBzdGF0ZS5taW4gPSBtaW4ocmVzLnN0YXJ0LmtleXMoKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5tYXggPSBtYXgocmVzLmVuZC5rZXlzKCkpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzdGFydCwgZW5kKToKKyAgICAgICAgICAgICAgICAjIEFkZCB0aGlzIGxpbmUgZm9yIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICNzdGF0ZS5hZGRfcHJvY2VzcyhwbiArICI6IiArIHRhc2ssIHN0YXJ0LCBlbmQpCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcmVzLnN0YXJ0W3NfbGlzdFtpXV06CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFkZF9wcm9jZXNzKHAsIHNfbGlzdFtpXSwgcmVzLnByb2Nlc3Nlc1twXVsxXSkKKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kCisgICAgICAgICAgICBlbmQgPSBlbmQgKyBmcmFnX3NpemUKKyAgICAgICAgICAgIGlmIGVuZCA+IGxlbihzX2xpc3QpOgorICAgICAgICAgICAgICAgIGVuZCA9IGxlbihzX2xpc3QpCisgICAgICAgICAgICByZXNfbGlzdC5hcHBlbmQoc3RhdGUpCisgICAgZWxzZToKKyAgICAgICAgcmVzX2xpc3QuYXBwZW5kKHJlcykKKyAgICByZXR1cm4gcmVzX2xpc3QKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcHJvY2Vzc190cmVlLnB5IGIvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS9wcm9jZXNzX3RyZWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4ODExMAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvcHJvY2Vzc190cmVlLnB5CkBAIC0wLDAgKzEsMjkyIEBACisjICBUaGlzIGZpbGUgaXMgcGFydCBvZiBweWJvb3RjaGFydGd1aS4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjICBweWJvb3RjaGFydGd1aSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICBhbG9uZyB3aXRoIHB5Ym9vdGNoYXJ0Z3VpLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2NsYXNzIFByb2Nlc3NUcmVlOgorICAgICIiIlByb2Nlc3NUcmVlIGVuY2Fwc3VsYXRlcyBhIHByb2Nlc3MgdHJlZS4gIFRoZSB0cmVlIGlzIGJ1aWx0IGZyb20gbG9nIGZpbGVzCisgICAgICAgcmV0cmlldmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiAgV2hlbiBidWlsZGluZyB0aGUgcHJvY2VzcyB0cmVlLCBpdCBpcworICAgICAgIHBydW5lZCBhbmQgbWVyZ2VkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdmlzdWFsaXplIGl0IGluIGEgY29tcHJlaGVuc2libGUKKyAgICAgICBtYW5uZXIuCisKKyAgICAgICBUaGUgZm9sbG93aW5nIHBydW5pbmcgdGVjaG5pcXVlcyBhcmUgdXNlZDoKKworICAgICAgICAqIGlkbGUgcHJvY2Vzc2VzIHRoYXQga2VlcCBydW5uaW5nIGR1cmluZyB0aGUgbGFzdCBwcm9jZXNzIHNhbXBsZQorICAgICAgICAgICh3aGljaCBpcyBhIGhldXJpc3RpYyBmb3IgYSBiYWNrZ3JvdW5kIHByb2Nlc3NlcykgYXJlIHJlbW92ZWQsCisgICAgICAgICogc2hvcnQtbGl2ZWQgcHJvY2Vzc2VzIChpLmUuIHByb2Nlc3NlcyB0aGF0IG9ubHkgbGl2ZSBmb3IgdGhlCisgICAgICAgICAgZHVyYXRpb24gb2YgdHdvIHNhbXBsZXMgb3IgbGVzcykgYXJlIHJlbW92ZWQsCisgICAgICAgICogdGhlIHByb2Nlc3NlcyB1c2VkIGJ5IHRoZSBib290IGxvZ2dlciBhcmUgcmVtb3ZlZCwKKyAgICAgICAgKiBleHBsb2RlcnMgKGkuZS4gcHJvY2Vzc2VzIHRoYXQgYXJlIGtub3duIHRvIHNwYXduIGh1Z2UgbWVhbmluZ2xlc3MKKyAgICAgICAgICBwcm9jZXNzIHN1YnRyZWVzKSBoYXZlIHRoZWlyIHN1YnRyZWVzIG1lcmdlZCB0b2dldGhlciwKKyAgICAgICAgKiBzaWJsaW5ncyAoaS5lLiBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGxpbmUgbGl2aW5nCisgICAgICAgICAgY29uY3VycmVudGx5IC0tIHRocmVhZCBoZXVyaXN0aWMpIGFyZSBtZXJnZWQgdG9nZXRoZXIsCisgICAgICAgICogcHJvY2VzcyBydW5zICh1bmFyeSB0cmVlcyB3aXRoIHByb2Nlc3NlcyBzaGFyaW5nIHRoZSBjb21tYW5kIGxpbmUpCisgICAgICAgICAgYXJlIG1lcmdlZCB0b2dldGhlci4KKworICAgICIiIgorICAgIExPR0dFUl9QUk9DID0gJ2Jvb3RjaGFydC1jb2xsZScKKyAgICBFWFBMT0RFUl9QUk9DRVNTRVMgPSBzZXQoWydod3VwJ10pCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBrZXJuZWwsIHBzc3RhdHMsIHNhbXBsZV9wZXJpb2QsCisgICAgICAgICAgICAgICAgIG1vbml0b3JlZEFwcCwgcHJ1bmUsIGlkbGUsIHRhc2tzdGF0cywKKyAgICAgICAgICAgICAgICAgYWNjdXJhdGVfcGFyZW50YWdlLCBmb3JfdGVzdGluZyA9IEZhbHNlKToKKyAgICAgICAgc2VsZi53cml0ZXIgPSB3cml0ZXIKKyAgICAgICAgc2VsZi5wcm9jZXNzX3RyZWUgPSBbXQorICAgICAgICBzZWxmLnRhc2tzdGF0cyA9IHRhc2tzdGF0cworICAgICAgICBpZiBwc3N0YXRzIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9jZXNzX2xpc3QgPSBrZXJuZWwKKyAgICAgICAgZWxpZiBrZXJuZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3NfbGlzdCA9IHBzc3RhdHMucHJvY2Vzc19tYXAudmFsdWVzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2Nlc3NfbGlzdCA9IGxpc3Qoa2VybmVsKSArIGxpc3QocHNzdGF0cy5wcm9jZXNzX21hcC52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5wcm9jZXNzX2xpc3QgPSBzb3J0ZWQocHJvY2Vzc19saXN0LCBrZXkgPSBsYW1iZGEgcDogcC5waWQpCisgICAgICAgIHNlbGYuc2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2QKKworICAgICAgICBzZWxmLmJ1aWxkKCkKKyAgICAgICAgaWYgbm90IGFjY3VyYXRlX3BhcmVudGFnZToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX3BwaWRzX2Zvcl9kYWVtb25zKHNlbGYucHJvY2Vzc19saXN0KQorCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHNlbGYuZ2V0X3N0YXJ0X3RpbWUoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYuZW5kX3RpbWUgPSBzZWxmLmdldF9lbmRfdGltZShzZWxmLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgc2VsZi5kdXJhdGlvbiA9IHNlbGYuZW5kX3RpbWUgLSBzZWxmLnN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5pZGxlID0gaWRsZQorCisgICAgICAgIGlmIGZvcl90ZXN0aW5nOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVtb3ZlZCA9IHNlbGYubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc190cmVlLCBzZWxmLkxPR0dFUl9QUk9DLCBtb25pdG9yZWRBcHAsIEZhbHNlKQorICAgICAgICB3cml0ZXIuc3RhdHVzKCJtZXJnZWQgJWkgbG9nZ2VyIHByb2Nlc3NlcyIgJSByZW1vdmVkKQorCisgICAgICAgIGlmIHBydW5lOgorICAgICAgICAgICAgcF9wcm9jZXNzZXMgPSBzZWxmLnBydW5lKHNlbGYucHJvY2Vzc190cmVlLCBOb25lKQorICAgICAgICAgICAgcF9leHBsb2RlcnMgPSBzZWxmLm1lcmdlX2V4cGxvZGVycyhzZWxmLnByb2Nlc3NfdHJlZSwgc2VsZi5FWFBMT0RFUl9QUk9DRVNTRVMpCisgICAgICAgICAgICBwX3RocmVhZHMgPSBzZWxmLm1lcmdlX3NpYmxpbmdzKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICAgICAgcF9ydW5zID0gc2VsZi5tZXJnZV9ydW5zKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICAgICAgd3JpdGVyLnN0YXR1cygicHJ1bmVkICVpIHByb2Nlc3MsICVpIGV4cGxvZGVycywgJWkgdGhyZWFkcywgYW5kICVpIHJ1bnMiICUgKHBfcHJvY2Vzc2VzLCBwX2V4cGxvZGVycywgcF90aHJlYWRzLCBwX3J1bnMpKQorCisgICAgICAgIHNlbGYuc29ydChzZWxmLnByb2Nlc3NfdHJlZSkKKworICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSBzZWxmLmdldF9zdGFydF90aW1lKHNlbGYucHJvY2Vzc190cmVlKQorICAgICAgICBzZWxmLmVuZF90aW1lID0gc2VsZi5nZXRfZW5kX3RpbWUoc2VsZi5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYuZHVyYXRpb24gPSBzZWxmLmVuZF90aW1lIC0gc2VsZi5zdGFydF90aW1lCisKKyAgICAgICAgc2VsZi5udW1fcHJvYyA9IHNlbGYubnVtX25vZGVzKHNlbGYucHJvY2Vzc190cmVlKQorCisgICAgZGVmIGJ1aWxkKHNlbGYpOgorICAgICAgICAiIiJCdWlsZCB0aGUgcHJvY2VzcyB0cmVlIGZyb20gdGhlIGxpc3Qgb2YgdG9wIHNhbXBsZXMuIiIiCisgICAgICAgIHNlbGYucHJvY2Vzc190cmVlID0gW10KKyAgICAgICAgZm9yIHByb2MgaW4gc2VsZi5wcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICBpZiBub3QgcHJvYy5wYXJlbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3RyZWUuYXBwZW5kKHByb2MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2MucGFyZW50LmNoaWxkX2xpc3QuYXBwZW5kKHByb2MpCisKKyAgICBkZWYgc29ydChzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJTb3J0IHByb2Nlc3MgdHJlZS4iIiIKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgcC5jaGlsZF9saXN0LnNvcnQoa2V5ID0gbGFtYmRhIHA6IHAucGlkKQorICAgICAgICAgICAgc2VsZi5zb3J0KHAuY2hpbGRfbGlzdCkKKworICAgIGRlZiBudW1fbm9kZXMoc2VsZiwgcHJvY2Vzc19saXN0KToKKyAgICAgICAgIkNvdW50cyB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBzcGVjaWZpZWQgcHJvY2VzcyB0cmVlLiIiIgorICAgICAgICBub2RlcyA9IDAKKyAgICAgICAgZm9yIHByb2MgaW4gcHJvY2Vzc19saXN0OgorICAgICAgICAgICAgbm9kZXMgPSBub2RlcyArIHNlbGYubnVtX25vZGVzKHByb2MuY2hpbGRfbGlzdCkKKyAgICAgICAgcmV0dXJuIG5vZGVzICsgbGVuKHByb2Nlc3NfbGlzdCkKKworICAgIGRlZiBnZXRfc3RhcnRfdGltZShzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBwcm9jZXNzIHN1YnRyZWUuICBUaGlzIGlzIHRoZSBzdGFydAorICAgICAgICAgICB0aW1lIG9mIHRoZSBlYXJsaWVzdCBwcm9jZXNzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDAwMAorICAgICAgICByZXR1cm4gbWluKCBbbWluKHByb2Muc3RhcnRfdGltZSwgc2VsZi5nZXRfc3RhcnRfdGltZShwcm9jLmNoaWxkX2xpc3QpKSBmb3IgcHJvYyBpbiBwcm9jZXNzX3N1YnRyZWVdICkKKworICAgIGRlZiBnZXRfZW5kX3RpbWUoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZW5kIHRpbWUgb2YgdGhlIHByb2Nlc3Mgc3VidHJlZS4gIFRoaXMgaXMgdGhlIGVuZCB0aW1lCisgICAgICAgICAgIG9mIHRoZSBsYXN0IGNvbGxlY3RlZCBzYW1wbGUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBwcm9jZXNzX3N1YnRyZWU6CisgICAgICAgICAgICByZXR1cm4gLTEwMDAwMDAwMAorICAgICAgICByZXR1cm4gbWF4KCBbbWF4KHByb2Muc3RhcnRfdGltZSArIHByb2MuZHVyYXRpb24sIHNlbGYuZ2V0X2VuZF90aW1lKHByb2MuY2hpbGRfbGlzdCkpIGZvciBwcm9jIGluIHByb2Nlc3Nfc3VidHJlZV0gKQorCisgICAgZGVmIGdldF9tYXhfcGlkKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG1heCBQSUQgZm91bmQgaW4gdGhlIHByb2Nlc3MgdHJlZS4iIiIKKyAgICAgICAgaWYgbm90IHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIHJldHVybiAtMTAwMDAwMDAwCisgICAgICAgIHJldHVybiBtYXgoIFttYXgocHJvYy5waWQsIHNlbGYuZ2V0X21heF9waWQocHJvYy5jaGlsZF9saXN0KSkgZm9yIHByb2MgaW4gcHJvY2Vzc19zdWJ0cmVlXSApCisKKyAgICBkZWYgdXBkYXRlX3BwaWRzX2Zvcl9kYWVtb25zKHNlbGYsIHByb2Nlc3NfbGlzdCk6CisgICAgICAgICIiIkZlZG9yYSBoYWNrOiB3aGVuIGxvYWRpbmcgdGhlIHN5c3RlbSBzZXJ2aWNlcyBmcm9tIHJjLCBydW51c2VyKDEpCisgICAgICAgICAgIGlzIHVzZWQuICBUaGlzIHNldHMgdGhlIFBQSUQgb2YgYWxsIGRhZW1vbnMgdG8gMSwgc2tld2luZworICAgICAgICAgICB0aGUgcHJvY2VzcyB0cmVlLiAgVHJ5IHRvIGRldGVjdCB0aGlzIGFuZCBzZXQgdGhlIFBQSUQgb2YKKyAgICAgICAgICAgdGhlc2UgcHJvY2Vzc2VzIHRoZSBQSUQgb2YgcmMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJjc3RhcnRwaWQgPSAtMQorICAgICAgICByY2VuZHBpZCA9IC0xCisgICAgICAgIHJjcHJvYyA9IE5vbmUKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19saXN0OgorICAgICAgICAgICAgaWYgcC5jbWQgPT0gInJjIiBhbmQgcC5wcGlkIC8vIDEwMDAgPT0gMToKKyAgICAgICAgICAgICAgICByY3Byb2MgPSBwCisgICAgICAgICAgICAgICAgcmNzdGFydHBpZCA9IHAucGlkCisgICAgICAgICAgICAgICAgcmNlbmRwaWQgPSBzZWxmLmdldF9tYXhfcGlkKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgaWYgcmNzdGFydHBpZCAhPSAtMSBhbmQgcmNlbmRwaWQgIT0gLTE6CisgICAgICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICAgICAgaWYgcC5waWQgPiByY3N0YXJ0cGlkIGFuZCBwLnBpZCA8IHJjZW5kcGlkIGFuZCBwLnBwaWQgLy8gMTAwMCA9PSAxOgorICAgICAgICAgICAgICAgICAgICBwLnBwaWQgPSByY3N0YXJ0cGlkCisgICAgICAgICAgICAgICAgICAgIHAucGFyZW50ID0gcmNwcm9jCisgICAgICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX2xpc3Q6CisgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0ID0gW10KKyAgICAgICAgICAgIHNlbGYuYnVpbGQoKQorCisgICAgZGVmIHBydW5lKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSwgcGFyZW50KToKKyAgICAgICAgIiIiUHJ1bmVzIHRoZSBwcm9jZXNzIHRyZWUgYnkgcmVtb3ZpbmcgaWRsZSBwcm9jZXNzZXMgYW5kIHByb2Nlc3NlcworICAgICAgICAgICB0aGF0IG9ubHkgbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgc2luZ2xlIHRvcCBzYW1wbGUuICBTaWJsaW5nCisgICAgICAgICAgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIGNvbW1hbmQgbGluZSAoaS5lLiB0aHJlYWRzKSBhcmUgbWVyZ2VkCisgICAgICAgICAgIHRvZ2V0aGVyLiBUaGlzIGZpbHRlcnMgb3V0IHNsZWVweSBiYWNrZ3JvdW5kIHByb2Nlc3Nlcywgc2hvcnQtbGl2ZWQKKyAgICAgICAgICAgcHJvY2Vzc2VzIGFuZCBib290Y2hhcnRzJyBhbmFseXNpcyB0b29scy4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBpc19pZGxlX2JhY2tncm91bmRfcHJvY2Vzc193aXRob3V0X2NoaWxkcmVuKHApOgorICAgICAgICAgICAgcHJvY2Vzc19lbmQgPSBwLnN0YXJ0X3RpbWUgKyBwLmR1cmF0aW9uCisgICAgICAgICAgICByZXR1cm4gbm90IHAuYWN0aXZlIGFuZCBcCisgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19lbmQgPj0gc2VsZi5zdGFydF90aW1lICsgc2VsZi5kdXJhdGlvbiBhbmQgXAorICAgICAgICAgICAgICAgICAgIHAuc3RhcnRfdGltZSA+IHNlbGYuc3RhcnRfdGltZSBhbmQgXAorICAgICAgICAgICAgICAgICAgIHAuZHVyYXRpb24gPiAwLjkgKiBzZWxmLmR1cmF0aW9uIGFuZCBcCisgICAgICAgICAgICAgICAgICAgc2VsZi5udW1fbm9kZXMocC5jaGlsZF9saXN0KSA9PSAwCisKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgd2hpbGUgaWR4IDwgbGVuKHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICAgICBwID0gcHJvY2Vzc19zdWJ0cmVlW2lkeF0KKyAgICAgICAgICAgIGlmIHBhcmVudCAhPSBOb25lIG9yIGxlbihwLmNoaWxkX2xpc3QpID09IDA6CisKKyAgICAgICAgICAgICAgICBwcnVuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgaXNfaWRsZV9iYWNrZ3JvdW5kX3Byb2Nlc3Nfd2l0aG91dF9jaGlsZHJlbihwKToKKyAgICAgICAgICAgICAgICAgICAgcHJ1bmUgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBwLmR1cmF0aW9uIDw9IDIgKiBzZWxmLnNhbXBsZV9wZXJpb2Q6CisgICAgICAgICAgICAgICAgICAgICMgc2hvcnQtbGl2ZWQgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICBwcnVuZSA9IFRydWUKKworICAgICAgICAgICAgICAgIGlmIHBydW5lOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3N1YnRyZWUucG9wKGlkeCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gcC5jaGlsZF9saXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19zdWJ0cmVlLmluc2VydChpZHgsIGMpCisgICAgICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLnBydW5lKHAuY2hpbGRfbGlzdCwgcCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5wcnVuZShwLmNoaWxkX2xpc3QsIHApCisgICAgICAgICAgICBpZHggKz0gMQorCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX2xvZ2dlcihzZWxmLCBwcm9jZXNzX3N1YnRyZWUsIGxvZ2dlcl9wcm9jLCBtb25pdG9yZWRfYXBwLCBhcHBfdHJlZSk6CisgICAgICAgICIiIk1lcmdlcyB0aGUgbG9nZ2VyJ3MgcHJvY2VzcyBzdWJ0cmVlLiAgVGhlIGxvZ2dlciB3aWxsIHR5cGljYWxseQorICAgICAgICAgICBzcGF3biBsb3RzIG9mIHNsZWVwIGFuZCBjYXQgcHJvY2Vzc2VzLCB0aHVzIHBvbGx1dGluZyB0aGUKKyAgICAgICAgICAgcHJvY2VzcyB0cmVlLgorCisgICAgICAgICIiIgorICAgICAgICBudW1fcmVtb3ZlZCA9IDAKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc19zdWJ0cmVlOgorICAgICAgICAgICAgaXNfYXBwX3RyZWUgPSBhcHBfdHJlZQorICAgICAgICAgICAgaWYgbG9nZ2VyX3Byb2MgPT0gcC5jbWQgYW5kIG5vdCBhcHBfdHJlZToKKyAgICAgICAgICAgICAgICBpc19hcHBfdHJlZSA9IFRydWUKKyAgICAgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX2xvZ2dlcihwLmNoaWxkX2xpc3QsIGxvZ2dlcl9wcm9jLCBtb25pdG9yZWRfYXBwLCBpc19hcHBfdHJlZSkKKyAgICAgICAgICAgICAgICAjIGRvbid0IHJlbW92ZSB0aGUgbG9nZ2VyIGl0c2VsZgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGFwcF90cmVlIGFuZCBtb25pdG9yZWRfYXBwICE9IE5vbmUgYW5kIG1vbml0b3JlZF9hcHAgPT0gcC5jbWQ6CisgICAgICAgICAgICAgICAgaXNfYXBwX3RyZWUgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBpc19hcHBfdHJlZToKKyAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gcC5jaGlsZF9saXN0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1lcmdlX3Byb2Nlc3NlcyhwLCBjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gMQorICAgICAgICAgICAgICAgIHAuY2hpbGRfbGlzdCA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IHNlbGYubWVyZ2VfbG9nZ2VyKHAuY2hpbGRfbGlzdCwgbG9nZ2VyX3Byb2MsIG1vbml0b3JlZF9hcHAsIGlzX2FwcF90cmVlKQorICAgICAgICByZXR1cm4gbnVtX3JlbW92ZWQKKworICAgIGRlZiBtZXJnZV9leHBsb2RlcnMoc2VsZiwgcHJvY2Vzc19zdWJ0cmVlLCBwcm9jZXNzZXMpOgorICAgICAgICAiIiJNZXJnZXMgc3BlY2lmaWMgcHJvY2VzcyBzdWJ0cmVlcyAodXNlZCBmb3IgcHJvY2Vzc2VzIHdoaWNoIHVzdWFsbHkKKyAgICAgICAgICAgc3Bhd24gaHVnZSBtZWFuaW5nbGVzcyBwcm9jZXNzIHRyZWVzKS4KKworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGZvciBwIGluIHByb2Nlc3Nfc3VidHJlZToKKyAgICAgICAgICAgIGlmIHByb2Nlc3NlcyBpbiBwcm9jZXNzZXMgYW5kIGxlbihwLmNoaWxkX2xpc3QpID4gMDoKKyAgICAgICAgICAgICAgICBzdWJ0cmVlbWFwID0gc2VsZi5nZXRQcm9jZXNzTWFwKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gc3VidHJlZW1hcC52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXJnZV9wcm9jZXNzZXMocCwgY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IGxlbihzdWJ0cmVlbWFwKQorICAgICAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QgPSBbXQorICAgICAgICAgICAgICAgICAgICBwLmNtZCArPSAiICgrKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9leHBsb2RlcnMocC5jaGlsZF9saXN0LCBwcm9jZXNzZXMpCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX3NpYmxpbmdzKHNlbGYsIHByb2Nlc3Nfc3VidHJlZSk6CisgICAgICAgICIiIk1lcmdlcyB0aHJlYWQgcHJvY2Vzc2VzLiAgU2libGluZyBwcm9jZXNzZXMgd2l0aCB0aGUgc2FtZSBjb21tYW5kCisgICAgICAgICAgIGxpbmUgYXJlIG1lcmdlZCB0b2dldGhlci4KKworICAgICAgICAiIiIKKyAgICAgICAgbnVtX3JlbW92ZWQgPSAwCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgd2hpbGUgaWR4IDwgbGVuKHByb2Nlc3Nfc3VidHJlZSktMToKKyAgICAgICAgICAgIHAgPSBwcm9jZXNzX3N1YnRyZWVbaWR4XQorICAgICAgICAgICAgbmV4dHAgPSBwcm9jZXNzX3N1YnRyZWVbaWR4KzFdCisgICAgICAgICAgICBpZiBuZXh0cC5jbWQgPT0gcC5jbWQ6CisgICAgICAgICAgICAgICAgcHJvY2Vzc19zdWJ0cmVlLnBvcChpZHgrMSkKKyAgICAgICAgICAgICAgICBpZHggLT0gMQorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICBwLmNoaWxkX2xpc3QuZXh0ZW5kKG5leHRwLmNoaWxkX2xpc3QpCisgICAgICAgICAgICAgICAgc2VsZi5tZXJnZV9wcm9jZXNzZXMocCwgbmV4dHApCisgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX3NpYmxpbmdzKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgIGlmIGxlbihwcm9jZXNzX3N1YnRyZWUpID4gMDoKKyAgICAgICAgICAgIHAgPSBwcm9jZXNzX3N1YnRyZWVbLTFdCisgICAgICAgICAgICBudW1fcmVtb3ZlZCArPSBzZWxmLm1lcmdlX3NpYmxpbmdzKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgcmV0dXJuIG51bV9yZW1vdmVkCisKKyAgICBkZWYgbWVyZ2VfcnVucyhzZWxmLCBwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAiIiJNZXJnZXMgcHJvY2VzcyBydW5zLiAgU2luZ2xlIGNoaWxkIHByb2Nlc3NlcyB3aGljaCBzaGFyZSB0aGUgc2FtZQorICAgICAgICAgICBjb21tYW5kIGxpbmUgd2l0aCB0aGUgcGFyZW50IGFyZSBtZXJnZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIG51bV9yZW1vdmVkID0gMAorICAgICAgICBpZHggPSAwCisgICAgICAgIHdoaWxlIGlkeCA8IGxlbihwcm9jZXNzX3N1YnRyZWUpOgorICAgICAgICAgICAgcCA9IHByb2Nlc3Nfc3VidHJlZVtpZHhdCisgICAgICAgICAgICBpZiBsZW4ocC5jaGlsZF9saXN0KSA9PSAxIGFuZCBwLmNoaWxkX2xpc3RbMF0uY21kID09IHAuY21kOgorICAgICAgICAgICAgICAgIGNoaWxkID0gcC5jaGlsZF9saXN0WzBdCisgICAgICAgICAgICAgICAgcC5jaGlsZF9saXN0ID0gbGlzdChjaGlsZC5jaGlsZF9saXN0KQorICAgICAgICAgICAgICAgIHNlbGYubWVyZ2VfcHJvY2Vzc2VzKHAsIGNoaWxkKQorICAgICAgICAgICAgICAgIG51bV9yZW1vdmVkICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbnVtX3JlbW92ZWQgKz0gc2VsZi5tZXJnZV9ydW5zKHAuY2hpbGRfbGlzdCkKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgIHJldHVybiBudW1fcmVtb3ZlZAorCisgICAgZGVmIG1lcmdlX3Byb2Nlc3NlcyhzZWxmLCBwMSwgcDIpOgorICAgICAgICAiIiJNZXJnZXMgdHdvIHByb2Nlc3MnIHNhbXBsZXMuIiIiCisgICAgICAgIHAxLnNhbXBsZXMuZXh0ZW5kKHAyLnNhbXBsZXMpCisgICAgICAgIHAxLnNhbXBsZXMuc29ydCgga2V5ID0gbGFtYmRhIHA6IHAudGltZSApCisgICAgICAgIHAxdGltZSA9IHAxLnN0YXJ0X3RpbWUKKyAgICAgICAgcDJ0aW1lID0gcDIuc3RhcnRfdGltZQorICAgICAgICBwMS5zdGFydF90aW1lID0gbWluKHAxdGltZSwgcDJ0aW1lKQorICAgICAgICBwZW5kdGltZSA9IG1heChwMXRpbWUgKyBwMS5kdXJhdGlvbiwgcDJ0aW1lICsgcDIuZHVyYXRpb24pCisgICAgICAgIHAxLmR1cmF0aW9uID0gcGVuZHRpbWUgLSBwMS5zdGFydF90aW1lCmRpZmYgLS1naXQgYS9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3NhbXBsZXMucHkgYi9zY3JpcHRzL3B5Ym9vdGNoYXJ0Z3VpL3B5Ym9vdGNoYXJ0Z3VpL3NhbXBsZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1ZDc0MwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvc2FtcGxlcy5weQpAQCAtMCwwICsxLDE1MSBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlib290Y2hhcnRndWkuCisKKyMgIHB5Ym9vdGNoYXJ0Z3VpIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyAgcHlib290Y2hhcnRndWkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgYWxvbmcgd2l0aCBweWJvb3RjaGFydGd1aS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2NsYXNzIERpc2tTdGF0U2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lKToKKyAgICAgICAgc2VsZi50aW1lID0gdGltZQorICAgICAgICBzZWxmLmRpc2tkYXRhID0gWzAsIDAsIDBdCisgICAgZGVmIGFkZF9kaXNrZGF0YShzZWxmLCBuZXdfZGlza2RhdGEpOgorICAgICAgICBzZWxmLmRpc2tkYXRhID0gWyBhICsgYiBmb3IgYSwgYiBpbiB6aXAoc2VsZi5kaXNrZGF0YSwgbmV3X2Rpc2tkYXRhKSBdCisKK2NsYXNzIENQVVNhbXBsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSwgdXNlciwgc3lzLCBpbyA9IDAuMCwgc3dhcCA9IDAuMCk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi51c2VyID0gdXNlcgorICAgICAgICBzZWxmLnN5cyA9IHN5cworICAgICAgICBzZWxmLmlvID0gaW8KKyAgICAgICAgc2VsZi5zd2FwID0gc3dhcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNwdShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciArIHNlbGYuc3lzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLnRpbWUpICsgIlx0IiArIHN0cihzZWxmLnVzZXIpICsgIlx0IiArIFwKKyAgICAgICAgICAgICAgIHN0cihzZWxmLnN5cykgKyAiXHQiICsgc3RyKHNlbGYuaW8pICsgIlx0IiArIHN0ciAoc2VsZi5zd2FwKQorCitjbGFzcyBNZW1TYW1wbGU6CisgICAgdXNlZF92YWx1ZXMgPSAoJ01lbVRvdGFsJywgJ01lbUZyZWUnLCAnQnVmZmVycycsICdDYWNoZWQnLCAnU3dhcFRvdGFsJywgJ1N3YXBGcmVlJywpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGltZSk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5yZWNvcmRzID0ge30KKworICAgIGRlZiBhZGRfdmFsdWUoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lIGluIE1lbVNhbXBsZS51c2VkX3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYucmVjb3Jkc1tuYW1lXSA9IHZhbHVlCisKKyAgICBkZWYgdmFsaWQoc2VsZik6CisgICAgICAgIGtleXMgPSBzZWxmLnJlY29yZHMua2V5cygpCisgICAgICAgICMgZGlzY2FyZCBpbmNvbXBsZXRlIHNhbXBsZXMKKyAgICAgICAgcmV0dXJuIFt2IGZvciB2IGluIE1lbVNhbXBsZS51c2VkX3ZhbHVlcyBpZiB2IG5vdCBpbiBrZXlzXSA9PSBbXQorCitjbGFzcyBQcm9jZXNzU2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lLCBzdGF0ZSwgY3B1X3NhbXBsZSk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIHNlbGYuY3B1X3NhbXBsZSA9IGNwdV9zYW1wbGUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYudGltZSkgKyAiXHQiICsgc3RyKHNlbGYuc3RhdGUpICsgIlx0IiArIHN0cihzZWxmLmNwdV9zYW1wbGUpCisKK2NsYXNzIFByb2Nlc3NTdGF0czoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBwcm9jZXNzX21hcCwgc2FtcGxlX2NvdW50LCBzYW1wbGVfcGVyaW9kLCBzdGFydF90aW1lLCBlbmRfdGltZSk6CisgICAgICAgIHNlbGYucHJvY2Vzc19tYXAgPSBwcm9jZXNzX21hcAorICAgICAgICBzZWxmLnNhbXBsZV9jb3VudCA9IHNhbXBsZV9jb3VudAorICAgICAgICBzZWxmLnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kCisgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWUKKyAgICAgICAgc2VsZi5lbmRfdGltZSA9IGVuZF90aW1lCisgICAgICAgIHdyaXRlci5pbmZvICgiJWQgc2FtcGxlcywgYXZnLiBzYW1wbGUgbGVuZ3RoICVmIiAlIChzZWxmLnNhbXBsZV9jb3VudCwgc2VsZi5zYW1wbGVfcGVyaW9kKSkKKyAgICAgICAgd3JpdGVyLmluZm8gKCJwcm9jZXNzIGxpc3Qgc2l6ZTogJWQiICUgbGVuIChzZWxmLnByb2Nlc3NfbWFwLnZhbHVlcygpKSkKKworY2xhc3MgUHJvY2VzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyLCBwaWQsIGNtZCwgcHBpZCwgc3RhcnRfdGltZSk6CisgICAgICAgIHNlbGYud3JpdGVyID0gd3JpdGVyCisgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYuZXhlID0gY21kCisgICAgICAgIHNlbGYuYXJncyA9IFtdCisgICAgICAgIHNlbGYucHBpZCA9IHBwaWQKKyAgICAgICAgc2VsZi5zdGFydF90aW1lID0gc3RhcnRfdGltZQorICAgICAgICBzZWxmLmR1cmF0aW9uID0gMAorICAgICAgICBzZWxmLnNhbXBsZXMgPSBbXQorICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5jaGlsZF9saXN0ID0gW10KKworICAgICAgICBzZWxmLmFjdGl2ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X3VzZXJfY3B1X3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF9zeXNfY3B1X3RpbWUgPSBOb25lCisKKyAgICAgICAgc2VsZi5sYXN0X2NwdV9ucyA9IDAKKyAgICAgICAgc2VsZi5sYXN0X2Jsa2lvX2RlbGF5X25zID0gMAorICAgICAgICBzZWxmLmxhc3Rfc3dhcGluX2RlbGF5X25zID0gMAorCisgICAgIyBzcGxpdCB0aGlzIHByb2Nlc3MnIHJ1biAtIHRyaWdnZXJlZCBieSBhIG5hbWUgY2hhbmdlCisgICAgZGVmIHNwbGl0KHNlbGYsIHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHN0YXJ0X3RpbWUpOgorICAgICAgICBzcGxpdCA9IFByb2Nlc3MgKHdyaXRlciwgcGlkLCBjbWQsIHBwaWQsIHN0YXJ0X3RpbWUpCisKKyAgICAgICAgc3BsaXQubGFzdF9jcHVfbnMgPSBzZWxmLmxhc3RfY3B1X25zCisgICAgICAgIHNwbGl0Lmxhc3RfYmxraW9fZGVsYXlfbnMgPSBzZWxmLmxhc3RfYmxraW9fZGVsYXlfbnMKKyAgICAgICAgc3BsaXQubGFzdF9zd2FwaW5fZGVsYXlfbnMgPSBzZWxmLmxhc3Rfc3dhcGluX2RlbGF5X25zCisKKyAgICAgICAgcmV0dXJuIHNwbGl0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKFtzdHIoc2VsZi5waWQpLCBzZWxmLmNtZCwgc3RyKHNlbGYucHBpZCksICdbICcgKyBzdHIobGVuKHNlbGYuc2FtcGxlcykpICsgJyBzYW1wbGVzIF0nIF0pCisKKyAgICBkZWYgY2FsY19zdGF0cyhzZWxmLCBzYW1wbGVQZXJpb2QpOgorICAgICAgICBpZiBzZWxmLnNhbXBsZXM6CisgICAgICAgICAgICBmaXJzdFNhbXBsZSA9IHNlbGYuc2FtcGxlc1swXQorICAgICAgICAgICAgbGFzdFNhbXBsZSA9IHNlbGYuc2FtcGxlc1stMV0KKyAgICAgICAgICAgIHNlbGYuc3RhcnRfdGltZSA9IG1pbihmaXJzdFNhbXBsZS50aW1lLCBzZWxmLnN0YXJ0X3RpbWUpCisgICAgICAgICAgICBzZWxmLmR1cmF0aW9uID0gbGFzdFNhbXBsZS50aW1lIC0gc2VsZi5zdGFydF90aW1lICsgc2FtcGxlUGVyaW9kCisKKyAgICAgICAgYWN0aXZlQ291bnQgPSBzdW0oIFsxIGZvciBzYW1wbGUgaW4gc2VsZi5zYW1wbGVzIGlmIHNhbXBsZS5jcHVfc2FtcGxlIGFuZCBzYW1wbGUuY3B1X3NhbXBsZS5zeXMgKyBzYW1wbGUuY3B1X3NhbXBsZS51c2VyICsgc2FtcGxlLmNwdV9zYW1wbGUuaW8gPiAwLjBdICkKKyAgICAgICAgYWN0aXZlQ291bnQgPSBhY3RpdmVDb3VudCArIHN1bSggWzEgZm9yIHNhbXBsZSBpbiBzZWxmLnNhbXBsZXMgaWYgc2FtcGxlLnN0YXRlID09ICdEJ10gKQorICAgICAgICBzZWxmLmFjdGl2ZSA9IChhY3RpdmVDb3VudD4yKQorCisgICAgZGVmIGNhbGNfbG9hZChzZWxmLCB1c2VyQ3B1LCBzeXNDcHUsIGludGVydmFsKToKKyAgICAgICAgdXNlckNwdUxvYWQgPSBmbG9hdCh1c2VyQ3B1IC0gc2VsZi5sYXN0X3VzZXJfY3B1X3RpbWUpIC8gaW50ZXJ2YWwKKyAgICAgICAgc3lzQ3B1TG9hZCA9IGZsb2F0KHN5c0NwdSAtIHNlbGYubGFzdF9zeXNfY3B1X3RpbWUpIC8gaW50ZXJ2YWwKKyAgICAgICAgY3B1TG9hZCA9IHVzZXJDcHVMb2FkICsgc3lzQ3B1TG9hZAorICAgICAgICAjIG5vcm1hbGl6ZQorICAgICAgICBpZiBjcHVMb2FkID4gMS4wOgorICAgICAgICAgICAgdXNlckNwdUxvYWQgPSB1c2VyQ3B1TG9hZCAvIGNwdUxvYWQKKyAgICAgICAgICAgIHN5c0NwdUxvYWQgPSBzeXNDcHVMb2FkIC8gY3B1TG9hZAorICAgICAgICByZXR1cm4gKHVzZXJDcHVMb2FkLCBzeXNDcHVMb2FkKQorCisgICAgZGVmIHNldF9wYXJlbnQoc2VsZiwgcHJvY2Vzc01hcCk6CisgICAgICAgIGlmIHNlbGYucHBpZCAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi5wYXJlbnQgPSBwcm9jZXNzTWFwLmdldCAoc2VsZi5wcGlkKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJlbnQgPT0gTm9uZSBhbmQgc2VsZi5waWQgLy8gMTAwMCA+IDEgYW5kIFwKKyAgICAgICAgICAgICAgICBub3QgKHNlbGYucHBpZCA9PSAyMDAwIG9yIHNlbGYucGlkID09IDIwMDApOiAjIGtlcm5lbCB0aHJlYWRzOiBwcGlkPTIKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlci53YXJuKCJNaXNzaW5nIENPTkZJR19QUk9DX0VWRU5UUzogbm8gcGFyZW50IGZvciBwaWQgJyVpJyAoJyVzJykgd2l0aCBwcGlkICclaSciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYucGlkLHNlbGYuY21kLHNlbGYucHBpZCkpCisKKyAgICBkZWYgZ2V0X2VuZF90aW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdGFydF90aW1lICsgc2VsZi5kdXJhdGlvbgorCitjbGFzcyBEaXNrU2FtcGxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lLCByZWFkLCB3cml0ZSwgdXRpbCk6CisgICAgICAgIHNlbGYudGltZSA9IHRpbWUKKyAgICAgICAgc2VsZi5yZWFkID0gcmVhZAorICAgICAgICBzZWxmLndyaXRlID0gd3JpdGUKKyAgICAgICAgc2VsZi51dGlsID0gdXRpbAorICAgICAgICBzZWxmLnRwdXQgPSByZWFkICsgd3JpdGUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlx0Ii5qb2luKFtzdHIoc2VsZi50aW1lKSwgc3RyKHNlbGYucmVhZCksIHN0cihzZWxmLndyaXRlKSwgc3RyKHNlbGYudXRpbCldKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wYXJzZXJfdGVzdC5weSBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcGFyc2VyX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmYjNiZgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcGFyc2VyX3Rlc3QucHkKQEAgLTAsMCArMSwxMDUgQEAKK2ltcG9ydCBzeXMsIG9zLCByZSwgc3RydWN0LCBvcGVyYXRvciwgbWF0aAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2ltcG9ydCB1bml0dGVzdAorCitzeXMucGF0aC5pbnNlcnQoMCwgb3MuZ2V0Y3dkKCkpCisKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5wYXJzaW5nIGFzIHBhcnNpbmcKK2ltcG9ydCBweWJvb3RjaGFydGd1aS5tYWluIGFzIG1haW4KKworZGVidWcgPSBGYWxzZQorCitkZWYgZmxvYXRFcShmMSwgZjIpOgorCXJldHVybiBtYXRoLmZhYnMoZjEtZjIpIDwgMC4wMDAwMQorCitib290Y2hhcnRfZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICcuLi8uLi9leGFtcGxlcy8xLycpCitwYXJzZXIgPSBtYWluLl9ta19vcHRpb25zX3BhcnNlcigpCitvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXEnLCBib290Y2hhcnRfZGlyXSkKK3dyaXRlciA9IG1haW4uX21rX3dyaXRlcihvcHRpb25zKQorCitjbGFzcyBUZXN0QkNQYXJzZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIAorCWRlZiBzZXRVcChzZWxmKToKKwkJc2VsZi5uYW1lID0gIk15IGZpcnN0IHVuaXR0ZXN0IgorCQlzZWxmLnJvb3RkaXIgPSBib290Y2hhcnRfZGlyCisKKwlkZWYgbWtfZm5hbWUoc2VsZixmKToKKwkJcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnJvb3RkaXIsIGYpCisKKwlkZWYgdGVzdFBhcnNlSGVhZGVyKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzdGF0ZSA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdoZWFkZXInKSkKKwkJc2VsZi5hc3NlcnRFcXVhbCg2LCBsZW4oc3RhdGUuaGVhZGVycykpCisJCXNlbGYuYXNzZXJ0RXF1YWwoMiwgcGFyc2luZy5nZXRfbnVtX2NwdXMoc3RhdGUuaGVhZGVycykpCisKKwlkZWYgdGVzdF9wYXJzZVRpbWVkQmxvY2tzKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzdGF0ZSA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX2Rpc2tzdGF0cy5sb2cnKSkKKwkJc2VsZi5hc3NlcnRFcXVhbCgxNDEsIGxlbihzdGF0ZS5kaXNrX3N0YXRzKSkJCQorCisJZGVmIHRlc3RQYXJzZVByb2NQc0xvZyhzZWxmKToKKwkJdHJhY2UgPSBwYXJzaW5nLlRyYWNlKHdyaXRlciwgYXJncywgb3B0aW9ucykKKwkJc3RhdGUgPSBwYXJzaW5nLnBhcnNlX2ZpbGUod3JpdGVyLCB0cmFjZSwgc2VsZi5ta19mbmFtZSgncHJvY19wcy5sb2cnKSkKKwkJc2FtcGxlcyA9IHN0YXRlLnBzX3N0YXRzCisJCXByb2Nlc3NlcyA9IHNhbXBsZXMucHJvY2Vzc19tYXAKKwkJc29ydGVkX3Byb2Nlc3NlcyA9IFtwcm9jZXNzZXNba10gZm9yIGsgaW4gc29ydGVkKHByb2Nlc3Nlcy5rZXlzKCkpXQorCisJCXBzX2RhdGEgPSBvcGVuKHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QyLnByb2NfcHMubG9nJykpCisJCWZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUocHNfZGF0YSk6CisJCQl0b2tlbnMgPSBsaW5lLnNwbGl0KCk7CisJCQlwcm9jZXNzID0gc29ydGVkX3Byb2Nlc3Nlc1tpbmRleF0KKwkJCWlmIGRlYnVnOgorCQkJCXByaW50KHRva2Vuc1swOjRdKQorCQkJCXByaW50KHByb2Nlc3MucGlkIC8gMTAwMCwgcHJvY2Vzcy5jbWQsIHByb2Nlc3MucHBpZCwgbGVuKHByb2Nlc3Muc2FtcGxlcykpCisJCQkJcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0nKQorCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1swXSwgc3RyKHByb2Nlc3MucGlkIC8vIDEwMDApKQorCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMV0sIHN0cihwcm9jZXNzLmNtZCkpCisJCQlzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1syXSwgc3RyKHByb2Nlc3MucHBpZCAvLyAxMDAwKSkKKwkJCXNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zWzNdLCBzdHIobGVuKHByb2Nlc3Muc2FtcGxlcykpKQorCQlwc19kYXRhLmNsb3NlKCkKKworCWRlZiB0ZXN0cGFyc2VQcm9jRGlza1N0YXRMb2coc2VsZik6CisJCXRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisJCXN0YXRlX3dpdGhfaGVhZGVycyA9IHBhcnNpbmcucGFyc2VfZmlsZSh3cml0ZXIsIHRyYWNlLCBzZWxmLm1rX2ZuYW1lKCdoZWFkZXInKSkKKwkJc3RhdGVfd2l0aF9oZWFkZXJzLmhlYWRlcnNbJ3N5c3RlbS5jcHUnXSA9ICd4eHggKDIpJworCQlzYW1wbGVzID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgc3RhdGVfd2l0aF9oZWFkZXJzLCBzZWxmLm1rX2ZuYW1lKCdwcm9jX2Rpc2tzdGF0cy5sb2cnKSkuZGlza19zdGF0cworCQlzZWxmLmFzc2VydEVxdWFsKDE0MSwgbGVuKHNhbXBsZXMpKQorCisJCWRpc2tzdGF0c19kYXRhID0gb3BlbihzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2NfZGlza3N0YXRzLmxvZycpKQorCQlmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGRpc2tzdGF0c19kYXRhKToKKwkJCXRva2VucyA9IGxpbmUuc3BsaXQoJ1x0JykKKwkJCXNhbXBsZSA9IHNhbXBsZXNbaW5kZXhdCisJCQlpZiBkZWJ1ZzoJCQorCQkJCXByaW50KGxpbmUucnN0cmlwKCkpCisJCQkJcHJpbnQoc2FtcGxlKQorCQkJCXByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tJykKKwkJCQorCQkJc2VsZi5hc3NlcnRFcXVhbCh0b2tlbnNbMF0sIHN0cihzYW1wbGUudGltZSkpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMV0pLCBzYW1wbGUucmVhZCkpCisJCQlzZWxmLmFzc2VydF8oZmxvYXRFcShmbG9hdCh0b2tlbnNbMl0pLCBzYW1wbGUud3JpdGUpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzNdKSwgc2FtcGxlLnV0aWwpKQorCQlkaXNrc3RhdHNfZGF0YS5jbG9zZSgpCisJCisJZGVmIHRlc3RwYXJzZVByb2NTdGF0TG9nKHNlbGYpOgorCQl0cmFjZSA9IHBhcnNpbmcuVHJhY2Uod3JpdGVyLCBhcmdzLCBvcHRpb25zKQorCQlzYW1wbGVzID0gcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ3Byb2Nfc3RhdC5sb2cnKSkuY3B1X3N0YXRzCisJCXNlbGYuYXNzZXJ0RXF1YWwoMTQxLCBsZW4oc2FtcGxlcykpCisKKwkJc3RhdF9kYXRhID0gb3BlbihzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nfc3RhdC5sb2cnKSkKKwkJZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzdGF0X2RhdGEpOgorCQkJdG9rZW5zID0gbGluZS5zcGxpdCgnXHQnKQorCQkJc2FtcGxlID0gc2FtcGxlc1tpbmRleF0KKwkJCWlmIGRlYnVnOgorCQkJCXByaW50KGxpbmUucnN0cmlwKCkpCisJCQkJcHJpbnQoc2FtcGxlKQorCQkJCXByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tJykKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1swXSksIHNhbXBsZS50aW1lKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1sxXSksIHNhbXBsZS51c2VyKSkKKwkJCXNlbGYuYXNzZXJ0XyhmbG9hdEVxKGZsb2F0KHRva2Vuc1syXSksIHNhbXBsZS5zeXMpKQorCQkJc2VsZi5hc3NlcnRfKGZsb2F0RXEoZmxvYXQodG9rZW5zWzNdKSwgc2FtcGxlLmlvKSkKKwkJc3RhdF9kYXRhLmNsb3NlKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9weWJvb3RjaGFydGd1aS9weWJvb3RjaGFydGd1aS90ZXN0cy9wcm9jZXNzX3RyZWVfdGVzdC5weSBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcHJvY2Vzc190cmVlX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NmExYwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHlib290Y2hhcnRndWkvcHlib290Y2hhcnRndWkvdGVzdHMvcHJvY2Vzc190cmVlX3Rlc3QucHkKQEAgLTAsMCArMSw5MiBAQAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmdldGN3ZCgpKQorCitpbXBvcnQgcHlib290Y2hhcnRndWkucGFyc2luZyBhcyBwYXJzaW5nCitpbXBvcnQgcHlib290Y2hhcnRndWkucHJvY2Vzc190cmVlIGFzIHByb2Nlc3NfdHJlZQoraW1wb3J0IHB5Ym9vdGNoYXJ0Z3VpLm1haW4gYXMgbWFpbgorCitpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKToKKyAgICBsb25nID0gaW50CisKK2NsYXNzIFRlc3RQcm9jZXNzVHJlZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICJQcm9jZXNzIHRyZWUgdW5pdHRlc3QiCisgICAgICAgIHNlbGYucm9vdGRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pLCAnLi4vLi4vZXhhbXBsZXMvMS8nKQorCisgICAgICAgIHBhcnNlciA9IG1haW4uX21rX29wdGlvbnNfcGFyc2VyKCkKKyAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1xJywgc2VsZi5yb290ZGlyXSkKKyAgICAgICAgd3JpdGVyID0gbWFpbi5fbWtfd3JpdGVyKG9wdGlvbnMpCisgICAgICAgIHRyYWNlID0gcGFyc2luZy5UcmFjZSh3cml0ZXIsIGFyZ3MsIG9wdGlvbnMpCisKKyAgICAgICAgcGFyc2luZy5wYXJzZV9maWxlKHdyaXRlciwgdHJhY2UsIHNlbGYubWtfZm5hbWUoJ3Byb2NfcHMubG9nJykpCisgICAgICAgIHRyYWNlLmNvbXBpbGUod3JpdGVyKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlID0gcHJvY2Vzc190cmVlLlByb2Nlc3NUcmVlKHdyaXRlciwgTm9uZSwgdHJhY2UucHNfc3RhdHMsIFwKKyAgICAgICAgICAgIHRyYWNlLnBzX3N0YXRzLnNhbXBsZV9wZXJpb2QsIE5vbmUsIG9wdGlvbnMucHJ1bmUsIE5vbmUsIE5vbmUsIEZhbHNlLCBmb3JfdGVzdGluZyA9IFRydWUpCisKKyAgICBkZWYgbWtfZm5hbWUoc2VsZixmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnJvb3RkaXIsIGYpCisKKyAgICBkZWYgZmxhdHRlbihzZWxmLCBwcm9jZXNzX3RyZWUpOgorICAgICAgICBmbGF0dGVuZWQgPSBbXQorICAgICAgICBmb3IgcCBpbiBwcm9jZXNzX3RyZWU6CisgICAgICAgICAgICBmbGF0dGVuZWQuYXBwZW5kKHApCisgICAgICAgICAgICBmbGF0dGVuZWQuZXh0ZW5kKHNlbGYuZmxhdHRlbihwLmNoaWxkX2xpc3QpKQorICAgICAgICByZXR1cm4gZmxhdHRlbmVkCisKKyAgICBkZWYgY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZiwgZmlsZW5hbWUsIHByb2Nlc3NfdHJlZSk6CisgICAgICAgIHRlc3RfZGF0YSA9IG9wZW4oZmlsZW5hbWUpCisgICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcCh0ZXN0X2RhdGEsIHNlbGYuZmxhdHRlbihwcm9jZXNzX3RyZWUpKToKKyAgICAgICAgICAgIHRva2VucyA9IGV4cGVjdGVkLnNwbGl0KCdcdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh0b2tlbnNbMF0pLCBhY3R1YWwucGlkIC8vIDEwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRva2Vuc1sxXSwgYWN0dWFsLmNtZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyh0b2tlbnNbMl0pLCAxMCAqIGFjdHVhbC5zdGFydF90aW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxvbmcodG9rZW5zWzNdKSAtIDEwICogYWN0dWFsLmR1cmF0aW9uIDwgNSwgImR1cmF0aW9uIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHRva2Vuc1s0XSksIGxlbihhY3R1YWwuY2hpbGRfbGlzdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh0b2tlbnNbNV0pLCBsZW4oYWN0dWFsLnNhbXBsZXMpKQorICAgICAgICB0ZXN0X2RhdGEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RCdWlsZChzZWxmKToKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjEubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VMb2dnZXIoc2VsZik6CisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfbG9nZ2VyKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCAnYm9vdGNoYXJ0ZCcsIE5vbmUsIEZhbHNlKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuMi5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RQcnVuZShzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHByb2Nlc3NfdHJlZSA9IHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlCisgICAgICAgIHNlbGYuY2hlY2tBZ2FpbnN0SmF2YUV4dHJhY3Qoc2VsZi5ta19mbmFtZSgnZXh0cmFjdC5wcm9jZXNzdHJlZS4zYi5sb2cnKSwgcHJvY2Vzc190cmVlKQorCisgICAgZGVmIHRlc3RNZXJnZUV4cGxvZGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfZXhwbG9kZXJzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBzZXQoWydod3VwJ10pKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuM2MubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VTaWJsaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9sb2dnZXIoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsICdib290Y2hhcnRkJywgTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUucHJ1bmUoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIE5vbmUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfZXhwbG9kZXJzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlLCBzZXQoWydod3VwJ10pKQorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX3NpYmxpbmdzKHNlbGYucHJvY2Vzc3RyZWUucHJvY2Vzc190cmVlKQorICAgICAgICBwcm9jZXNzX3RyZWUgPSBzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZQorICAgICAgICBzZWxmLmNoZWNrQWdhaW5zdEphdmFFeHRyYWN0KHNlbGYubWtfZm5hbWUoJ2V4dHJhY3QucHJvY2Vzc3RyZWUuM2QubG9nJyksIHByb2Nlc3NfdHJlZSkKKworICAgIGRlZiB0ZXN0TWVyZ2VSdW5zKHNlbGYpOgorICAgICAgICBzZWxmLnByb2Nlc3N0cmVlLm1lcmdlX2xvZ2dlcihzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgJ2Jvb3RjaGFydGQnLCBOb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5wcnVuZShzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSwgTm9uZSkKKyAgICAgICAgc2VsZi5wcm9jZXNzdHJlZS5tZXJnZV9leHBsb2RlcnMoc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUsIHNldChbJ2h3dXAnXSkpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2Vfc2libGluZ3Moc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUpCisgICAgICAgIHNlbGYucHJvY2Vzc3RyZWUubWVyZ2VfcnVucyhzZWxmLnByb2Nlc3N0cmVlLnByb2Nlc3NfdHJlZSkKKyAgICAgICAgcHJvY2Vzc190cmVlID0gc2VsZi5wcm9jZXNzdHJlZS5wcm9jZXNzX3RyZWUKKyAgICAgICAgc2VsZi5jaGVja0FnYWluc3RKYXZhRXh0cmFjdChzZWxmLm1rX2ZuYW1lKCdleHRyYWN0LnByb2Nlc3N0cmVlLjNlLmxvZycpLCBwcm9jZXNzX3RyZWUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3B5dGhvbmRlcHMgYi9zY3JpcHRzL3B5dGhvbmRlcHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmY5MmU3NAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcHl0aG9uZGVwcwpAQCAtMCwwICsxLDI1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIERldGVybWluZSBkZXBlbmRlbmNpZXMgb2YgcHl0aG9uIHNjcmlwdHMgb3IgYXZhaWxhYmxlIHB5dGhvbiBtb2R1bGVzIGluIGEgc2VhcmNoIHBhdGguCisjCisjIEdpdmVuIHRoZSAtZCBhcmd1bWVudCBhbmQgYSBmaWxlbmFtZS9maWxlbmFtZXMsIHJldHVybnMgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYnkgdGhvc2UgZmlsZXMuCisjIEdpdmVuIHRoZSAtZCBhcmd1bWVudCBhbmQgYSBkaXJlY3RvcnkvZGlyZWN0b3JpZXMsIHJlY3Vyc2VzIHRvIGZpbmQgYWxsCisjIHB5dGhvbiBwYWNrYWdlcyBhbmQgbW9kdWxlcywgcmV0dXJucyB0aGUgbW9kdWxlcyBpbXBvcnRlZCBieSB0aGVzZS4KKyMgR2l2ZW4gdGhlIC1wIGFyZ3VtZW50IGFuZCBhIHBhdGggb3IgcGF0aHMsIHNjYW5zIHRoYXQgcGF0aCBmb3IgYXZhaWxhYmxlIHB5dGhvbiBtb2R1bGVzL3BhY2thZ2VzLgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBhc3QKK2ltcG9ydCBpbXAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdweXRob25kZXBzJykKKworc3VmZml4ZXMgPSBbXQorZm9yIHRyaXBsZSBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCk6CisgICAgc3VmZml4ZXMuYXBwZW5kKHRyaXBsZVswXSkKKworCitjbGFzcyBQeXRob25EZXBFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBEZXBlbmRFcnJvcihQeXRob25EZXBFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGVycm9yKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmVycm9yID0gZXJyb3IKKyAgICAgICAgUHl0aG9uRGVwRXJyb3IuX19pbml0X18oc2VsZiwgZXJyb3IpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJGYWlsdXJlIGRldGVybWluaW5nIGRlcGVuZGVuY2llcyBvZiB7fToge30iLmZvcm1hdChzZWxmLnBhdGgsIHNlbGYuZXJyb3IpCisKKworY2xhc3MgSW1wb3J0VmlzaXRvcihhc3QuTm9kZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbXBvcnRzID0gc2V0KCkKKyAgICAgICAgc2VsZi5pbXBvcnRzZnJvbSA9IFtdCisKKyAgICBkZWYgdmlzaXRfSW1wb3J0KHNlbGYsIG5vZGUpOgorICAgICAgICBmb3IgYWxpYXMgaW4gbm9kZS5uYW1lczoKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0cy5hZGQoYWxpYXMubmFtZSkKKworICAgIGRlZiB2aXNpdF9JbXBvcnRGcm9tKHNlbGYsIG5vZGUpOgorICAgICAgICBzZWxmLmltcG9ydHNmcm9tLmFwcGVuZCgobm9kZS5tb2R1bGUsIFthLm5hbWUgZm9yIGEgaW4gbm9kZS5uYW1lc10sIG5vZGUubGV2ZWwpKQorCisKK2RlZiB3YWxrX3VwKHBhdGgpOgorICAgIHdoaWxlIHBhdGg6CisgICAgICAgIHlpZWxkIHBhdGgKKyAgICAgICAgcGF0aCwgXywgXyA9IHBhdGgucnBhcnRpdGlvbihvcy5zZXApCisKKworZGVmIGdldF9wcm92aWRlcyhwYXRoKToKKyAgICBwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQorCisgICAgZGVmIGdldF9mbl9uYW1lKGZuKToKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuWzotbGVuKHN1ZmZpeCldCisKKyAgICBpc2RpciA9IG9zLnBhdGguaXNkaXIocGF0aCkKKyAgICBpZiBpc2RpcjoKKyAgICAgICAgcGtnX3BhdGggPSBwYXRoCisgICAgICAgIHdhbGtfcGF0aCA9IHBhdGgKKyAgICBlbHNlOgorICAgICAgICBwa2dfcGF0aCA9IGdldF9mbl9uYW1lKHBhdGgpCisgICAgICAgIGlmIHBrZ19wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2Fsa19wYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisKKyAgICBmb3IgY3VycGF0aCBpbiB3YWxrX3VwKHdhbGtfcGF0aCk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oY3VycGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgbGliZGlyID0gY3VycGF0aAorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBsaWJkaXIgPSAnJworCisgICAgcGFja2FnZV9yZWxwYXRoID0gcGtnX3BhdGhbbGVuKGxpYmRpcikrMTpdCisgICAgcGFja2FnZSA9ICcuJy5qb2luKHBhY2thZ2VfcmVscGF0aC5zcGxpdChvcy5zZXApKQorICAgIGlmIG5vdCBpc2RpcjoKKyAgICAgICAgeWllbGQgcGFja2FnZSwgcGF0aAorICAgIGVsc2U6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICB5aWVsZCBwYWNrYWdlLCBwYXRoCisKKyAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgIHJlbHBhdGggPSBkaXJwYXRoW2xlbihwYXRoKSsxOl0KKyAgICAgICAgICAgIGlmIHJlbHBhdGg6CisgICAgICAgICAgICAgICAgaWYgJ19faW5pdF9fLnB5JyBub3QgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBkaXJuYW1lc1s6XSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9ICcuJy5qb2luKHJlbHBhdGguc3BsaXQob3Muc2VwKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwYWNrYWdlICsgJy4nICsgY29udGV4dAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0LCBkaXJwYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBwYWNrYWdlCisKKyAgICAgICAgICAgIGZvciBmbiBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRfZm4gPSBnZXRfZm5fbmFtZShmbikKKyAgICAgICAgICAgICAgICBpZiBub3QgYWRqdXN0ZWRfZm4gb3IgYWRqdXN0ZWRfZm4gPT0gJ19faW5pdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZ1bGxmbiA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbikKKyAgICAgICAgICAgICAgICBpZiBjb250ZXh0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBjb250ZXh0ICsgJy4nICsgYWRqdXN0ZWRfZm4sIGZ1bGxmbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGFkanVzdGVkX2ZuLCBmdWxsZm4KKworCitkZWYgZ2V0X2NvZGVfZGVwZW5kcyhjb2RlX3N0cmluZywgcGF0aD1Ob25lLCBwcm92aWRlPU5vbmUsIGlzcGtnPUZhbHNlKToKKyAgICB0cnk6CisgICAgICAgIGNvZGUgPSBhc3QucGFyc2UoY29kZV9zdHJpbmcsIHBhdGgpCisgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKHBhdGgsIGV4YykKKyAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBEZXBlbmRFcnJvcihwYXRoLCBleGMpCisKKyAgICB2aXNpdG9yID0gSW1wb3J0VmlzaXRvcigpCisgICAgdmlzaXRvci52aXNpdChjb2RlKQorICAgIGZvciBidWlsdGluX21vZHVsZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgIGlmIGJ1aWx0aW5fbW9kdWxlIGluIHZpc2l0b3IuaW1wb3J0czoKKyAgICAgICAgICAgIHZpc2l0b3IuaW1wb3J0cy5yZW1vdmUoYnVpbHRpbl9tb2R1bGUpCisKKyAgICBpZiBwcm92aWRlOgorICAgICAgICBwcm92aWRlX2VsZW1lbnRzID0gcHJvdmlkZS5zcGxpdCgnLicpCisgICAgICAgIGlmIGlzcGtnOgorICAgICAgICAgICAgcHJvdmlkZV9lbGVtZW50cy5hcHBlbmQoIl9fc2VsZl9fIikKKyAgICAgICAgY29udGV4dCA9ICcuJy5qb2luKHByb3ZpZGVfZWxlbWVudHNbOi0xXSkKKyAgICAgICAgcGFja2FnZV9wYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgY29udGV4dCA9IE5vbmUKKyAgICAgICAgcGFja2FnZV9wYXRoID0gTm9uZQorCisgICAgbGV2ZWx6ZXJvX2ltcG9ydHNmcm9tID0gKG1vZHVsZSBmb3IgbW9kdWxlLCBuYW1lcywgbGV2ZWwgaW4gdmlzaXRvci5pbXBvcnRzZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZXZlbCA9PSAwKQorICAgIGZvciBtb2R1bGUgaW4gdmlzaXRvci5pbXBvcnRzIHwgc2V0KGxldmVsemVyb19pbXBvcnRzZnJvbSk6CisgICAgICAgIGlmIGNvbnRleHQgYW5kIHBhdGg6CisgICAgICAgICAgICBtb2R1bGVfYmFzZXBhdGggPSBvcy5wYXRoLmpvaW4ocGFja2FnZV9wYXRoLCBtb2R1bGUucmVwbGFjZSgnLicsICcvJykpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtb2R1bGVfYmFzZXBhdGgpOgorICAgICAgICAgICAgICAgICMgSW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0CisgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIG1vZHVsZSwgcGF0aAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobW9kdWxlX2Jhc2VwYXRoICsgc3VmZml4KToKKyAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnQKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIG1vZHVsZSwgcGF0aAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBtb2R1bGUsIHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIG1vZHVsZSwgcGF0aAorCisgICAgZm9yIG1vZHVsZSwgbmFtZXMsIGxldmVsIGluIHZpc2l0b3IuaW1wb3J0c2Zyb206CisgICAgICAgIGlmIGxldmVsID09IDA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmIG5vdCBwcm92aWRlOgorICAgICAgICAgICAgcmFpc2UgRGVwZW5kRXJyb3IoIkVycm9yOiBJbXBvcnRGcm9tIG5vbi16ZXJvIGxldmVsIG91dHNpZGUgb2YgYSBwYWNrYWdlOiB7MH0iLmZvcm1hdCgobW9kdWxlLCBuYW1lcywgbGV2ZWwpKSwgcGF0aCkKKyAgICAgICAgZWxpZiBsZXZlbCA+IGxlbihwcm92aWRlX2VsZW1lbnRzKToKKyAgICAgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKCJFcnJvcjogSW1wb3J0RnJvbSBsZXZlbCBleGNlZWRzIHBhY2thZ2UgZGVwdGg6IHswfSIuZm9ybWF0KChtb2R1bGUsIG5hbWVzLCBsZXZlbCkpLCBwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGV4dCA9ICcuJy5qb2luKHByb3ZpZGVfZWxlbWVudHNbOi1sZXZlbF0pCisgICAgICAgICAgICBpZiBtb2R1bGU6CisgICAgICAgICAgICAgICAgaWYgY29udGV4dDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY29udGV4dCArICcuJyArIG1vZHVsZSwgcGF0aAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIG1vZHVsZSwgcGF0aAorCisKK2RlZiBnZXRfZmlsZV9kZXBlbmRzKHBhdGgpOgorICAgIHRyeToKKyAgICAgICAgY29kZV9zdHJpbmcgPSBvcGVuKHBhdGgsICdyJykucmVhZCgpCisgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBleGM6CisgICAgICAgIHJhaXNlIERlcGVuZEVycm9yKHBhdGgsIGV4YykKKworICAgIHJldHVybiBnZXRfY29kZV9kZXBlbmRzKGNvZGVfc3RyaW5nLCBwYXRoKQorCisKK2RlZiBnZXRfZGVwZW5kc19yZWN1cnNpdmUoZGlyZWN0b3J5KToKKyAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcmVjdG9yeSkKKworICAgIHByb3ZpZGVzID0gZGljdCgodiwgaykgZm9yIGssIHYgaW4gZ2V0X3Byb3ZpZGVzKGRpcmVjdG9yeSkpCisgICAgZm9yIGZpbGVuYW1lLCBwcm92aWRlIGluIHByb3ZpZGVzLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGVuYW1lKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGZpbGVuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgaXNwa2cgPSBUcnVlCisgICAgICAgIGVsaWYgbm90IGZpbGVuYW1lLmVuZHN3aXRoKCcucHknKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpc3BrZyA9IEZhbHNlCisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBzb3VyY2UgPSBmLnJlYWQoKQorCisgICAgICAgIGRlcGVuZHMgPSBnZXRfY29kZV9kZXBlbmRzKHNvdXJjZSwgZmlsZW5hbWUsIHByb3ZpZGUsIGlzcGtnKQorICAgICAgICBmb3IgZGVwZW5kLCBieSBpbiBkZXBlbmRzOgorICAgICAgICAgICAgeWllbGQgZGVwZW5kLCBieQorCisKK2RlZiBnZXRfZGVwZW5kcyhwYXRoKToKKyAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICByZXR1cm4gZ2V0X2RlcGVuZHNfcmVjdXJzaXZlKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldF9maWxlX2RlcGVuZHMocGF0aCkKKworCitkZWYgbWFpbigpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0RldGVybWluZSBkZXBlbmRlbmNpZXMgYW5kIHByb3ZpZGVkIHBhY2thZ2VzIGZvciBweXRob24gc2NyaXB0cy9tb2R1bGVzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwYXRoJywgbmFyZ3M9JysnLCBoZWxwPSdmdWxsIHBhdGggdG8gY29udGVudCB0byBiZSBwcm9jZXNzZWQnKQorICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXAnLCAnLS1wcm92aWRlcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2dpdmVuIGEgcGF0aCwgZGlzcGxheSB0aGUgcHJvdmlkZWQgcHl0aG9uIG1vZHVsZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZXBlbmRzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ2l2ZW4gYSBmaWxlbmFtZSwgZGlzcGxheSB0aGUgaW1wb3J0ZWQgcHl0aG9uIG1vZHVsZXMnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiBhcmdzLnByb3ZpZGVzOgorICAgICAgICBtb2R1bGVzID0gc2V0KCkKKyAgICAgICAgZm9yIHBhdGggaW4gYXJncy5wYXRoOgorICAgICAgICAgICAgZm9yIHByb3ZpZGUsIGZuIGluIGdldF9wcm92aWRlcyhwYXRoKToKKyAgICAgICAgICAgICAgICBtb2R1bGVzLmFkZChwcm92aWRlKQorCisgICAgICAgIGZvciBtb2R1bGUgaW4gc29ydGVkKG1vZHVsZXMpOgorICAgICAgICAgICAgcHJpbnQobW9kdWxlKQorICAgIGVsaWYgYXJncy5kZXBlbmRzOgorICAgICAgICBmb3IgcGF0aCBpbiBhcmdzLnBhdGg6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlcyA9IGdldF9kZXBlbmRzKHBhdGgpCisgICAgICAgICAgICBleGNlcHQgUHl0aG9uRGVwRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzdHIoZXhjKSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICBmb3IgbW9kdWxlLCBpbXBfYnkgaW4gbW9kdWxlczoKKyAgICAgICAgICAgICAgICBwcmludCgie31cdHt9Ii5mb3JtYXQobW9kdWxlLCBpbXBfYnkpKQorICAgIGVsc2U6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNpcGV0b29sIGIvc2NyaXB0cy9yZWNpcGV0b29sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZmIzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3JlY2lwZXRvb2wKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFJlY2lwZSBjcmVhdGlvbiB0b29sCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBnbG9iCitpbXBvcnQgbG9nZ2luZworCitzY3JpcHRzX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KK2ltcG9ydCBzY3JpcHR1dGlscworbG9nZ2VyID0gc2NyaXB0dXRpbHMubG9nZ2VyX2NyZWF0ZSgncmVjaXBldG9vbCcpCisKK3BsdWdpbnMgPSBbXQorCitkZWYgdGluZm9pbF9pbml0KHBhcnNlcmVjaXBlcyk6CisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShub3QgcGFyc2VyZWNpcGVzKQorICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpKQorICAgIHJldHVybiB0aW5mb2lsCisKK2RlZiBtYWluKCk6CisKKyAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJywgJycpOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlRoaXMgc2NyaXB0IGNhbiBvbmx5IGJlIHJ1biBhZnRlciBpbml0aWFsaXNpbmcgdGhlIGJ1aWxkIGVudmlyb25tZW50IChlLmcuIGJ5IHVzaW5nIG9lLWluaXQtYnVpbGQtZW52KSIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iT3BlbkVtYmVkZGVkIHJlY2lwZSB0b29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9IlVzZSAlKHByb2cpcyA8c3ViY29tbWFuZD4gLS1oZWxwIHRvIGdldCBoZWxwIG9uIGEgc3BlY2lmaWMgY29tbWFuZCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBoZWxwPSdQcmludCBvbmx5IGVycm9ycycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb2xvcicsIGNob2ljZXM9WydhdXRvJywgJ2Fsd2F5cycsICduZXZlciddLCBkZWZhdWx0PSdhdXRvJywgaGVscD0nQ29sb3JpemUgb3V0cHV0ICh3aGVyZSAlKG1ldGF2YXIpcyBpcyAlKGNob2ljZXMpcyknLCBtZXRhdmFyPSdDT0xPUicpCisKKyAgICBnbG9iYWxfYXJncywgdW5wYXJzZWRfYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCkKKworICAgICMgSGVscCBpcyBhZGRlZCBoZXJlIHJhdGhlciB0aGFuIHZpYSBhZGRfaGVscD1UcnVlLCBhcyB3ZSBkb24ndCB3YW50IGl0IHRvCisgICAgIyBiZSBoYW5kbGVkIGJ5IHBhcnNlX2tub3duX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykKKyAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsIG1ldGF2YXI9JzxzdWJjb21tYW5kPicpCisKKyAgICBpZiBnbG9iYWxfYXJncy5kZWJ1ZzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgZWxpZiBnbG9iYWxfYXJncy5xdWlldDoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisKKyAgICBpbXBvcnQgc2NyaXB0cGF0aAorICAgIGJpdGJha2VwYXRoID0gc2NyaXB0cGF0aC5hZGRfYml0YmFrZV9saWJfcGF0aCgpCisgICAgaWYgbm90IGJpdGJha2VwYXRoOgorICAgICAgICBsb2dnZXIuZXJyb3IoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSCIpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCBiaXRiYWtlIHBhdGg6ICVzJyAlIGJpdGJha2VwYXRoKQorCisgICAgc2NyaXB0dXRpbHMubG9nZ2VyX3NldHVwX2NvbG9yKGxvZ2dlciwgZ2xvYmFsX2FyZ3MuY29sb3IpCisKKyAgICB0aW5mb2lsID0gdGluZm9pbF9pbml0KEZhbHNlKQorICAgIGZvciBwYXRoIGluIChbc2NyaXB0c19wYXRoXSArCisgICAgICAgICAgICAgICAgIHRpbmZvaWwuY29uZmlnX2RhdGEuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgnOicpKToKKyAgICAgICAgcGx1Z2lucGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnbGliJywgJ3JlY2lwZXRvb2wnKQorICAgICAgICBzY3JpcHR1dGlscy5sb2FkX3BsdWdpbnMobG9nZ2VyLCBwbHVnaW5zLCBwbHVnaW5wYXRoKQorCisgICAgcmVnaXN0ZXJlZCA9IEZhbHNlCisgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3JlZ2lzdGVyX2NvbW1hbmQnKToKKyAgICAgICAgICAgIHJlZ2lzdGVyZWQgPSBUcnVlCisgICAgICAgICAgICBwbHVnaW4ucmVnaXN0ZXJfY29tbWFuZChzdWJwYXJzZXJzKQorICAgICAgICBpZiBoYXNhdHRyKHBsdWdpbiwgJ3RpbmZvaWxfaW5pdCcpOgorICAgICAgICAgICAgcGx1Z2luLnRpbmZvaWxfaW5pdCh0aW5mb2lsKQorCisgICAgaWYgbm90IHJlZ2lzdGVyZWQ6CisgICAgICAgIGxvZ2dlci5lcnJvcigiTm8gY29tbWFuZHMgcmVnaXN0ZXJlZCAtIG1pc3NpbmcgcGx1Z2lucz8iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHVucGFyc2VkX2FyZ3MsIG5hbWVzcGFjZT1nbG9iYWxfYXJncykKKworICAgIHRyeToKKyAgICAgICAgaWYgZ2V0YXR0cihhcmdzLCAncGFyc2VyZWNpcGVzJywgRmFsc2UpOgorICAgICAgICAgICAgdGluZm9pbC5wYXJzZVJlY2lwZXMoKQorICAgICAgICByZXQgPSBhcmdzLmZ1bmMoYXJncykKKyAgICBleGNlcHQgYmIuQkJIYW5kbGVkRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisKKyAgICByZXR1cm4gcmV0CisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkgYi9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTJkYjVjCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9yZWxvY2F0ZV9zZGsucHkKQEAgLTAsMCArMSwyNTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKyMgREVTQ1JJUFRJT04KKyMgVGhpcyBzY3JpcHQgaXMgY2FsbGVkIGJ5IHRoZSBTREsgaW5zdGFsbGVyIHNjcmlwdC4gSXQgcmVwbGFjZXMgdGhlIGR5bmFtaWMKKyMgbG9hZGVyIHBhdGggaW4gYWxsIGJpbmFyaWVzIGFuZCBhbHNvIGZpeGVzIHRoZSBTWVNESVIgcGF0aHMvbGVuZ3RocyBhbmQgdGhlCisjIGxvY2F0aW9uIG9mIGxkLnNvLmNhY2hlIGluIHRoZSBkeW5hbWljIGxvYWRlciBiaW5hcnkKKyMKKyMgQVVUSE9SUworIyBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisjCisKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdGF0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGVycm5vCisKK2lmIHN5cy52ZXJzaW9uIDwgJzMnOgorICAgIGRlZiBiKHgpOgorICAgICAgICByZXR1cm4geAorZWxzZToKKyAgICBkZWYgYih4KToKKyAgICAgICAgcmV0dXJuIHguZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKworb2xkX3ByZWZpeCA9IHJlLmNvbXBpbGUoYigiIyNERUZBVUxUX0lOU1RBTExfRElSIyMiKSkKKworZGVmIGdldF9hcmNoKCk6CisgICAgZi5zZWVrKDApCisgICAgZV9pZGVudCA9Zi5yZWFkKDE2KQorICAgIGVpX21hZzAsZWlfbWFnMV8zLGVpX2NsYXNzID0gc3RydWN0LnVucGFjaygiPEIzc0IxMXgiLCBlX2lkZW50KQorCisgICAgaWYgKGVpX21hZzAgIT0gMHg3ZiBhbmQgZWlfbWFnMV8zICE9ICJFTEYiKSBvciBlaV9jbGFzcyA9PSAwOgorICAgICAgICByZXR1cm4gMAorCisgICAgaWYgZWlfY2xhc3MgPT0gMToKKyAgICAgICAgcmV0dXJuIDMyCisgICAgZWxpZiBlaV9jbGFzcyA9PSAyOgorICAgICAgICByZXR1cm4gNjQKKworZGVmIHBhcnNlX2VsZl9oZWFkZXIoKToKKyAgICBnbG9iYWwgZV90eXBlLCBlX21hY2hpbmUsIGVfdmVyc2lvbiwgZV9lbnRyeSwgZV9waG9mZiwgZV9zaG9mZiwgZV9mbGFncyxcCisgICAgICAgICAgIGVfZWhzaXplLCBlX3BoZW50c2l6ZSwgZV9waG51bSwgZV9zaGVudHNpemUsIGVfc2hudW0sIGVfc2hzdHJuZHgKKworICAgIGYuc2VlaygwKQorICAgIGVsZl9oZWFkZXIgPSBmLnJlYWQoNjQpCisKKyAgICBpZiBhcmNoID09IDMyOgorICAgICAgICAjIDMyYml0CisgICAgICAgIGhkcl9mbXQgPSAiPEhISUxMTElISEhISEgiCisgICAgICAgIGhkcl9zaXplID0gNTIKKyAgICBlbHNlOgorICAgICAgICAjIDY0Yml0CisgICAgICAgIGhkcl9mbXQgPSAiPEhISVFRUUlISEhISEgiCisgICAgICAgIGhkcl9zaXplID0gNjQKKworICAgIGVfdHlwZSwgZV9tYWNoaW5lLCBlX3ZlcnNpb24sIGVfZW50cnksIGVfcGhvZmYsIGVfc2hvZmYsIGVfZmxhZ3MsXAorICAgIGVfZWhzaXplLCBlX3BoZW50c2l6ZSwgZV9waG51bSwgZV9zaGVudHNpemUsIGVfc2hudW0sIGVfc2hzdHJuZHggPVwKKyAgICAgICAgc3RydWN0LnVucGFjayhoZHJfZm10LCBlbGZfaGVhZGVyWzE2Omhkcl9zaXplXSkKKworZGVmIGNoYW5nZV9pbnRlcnByZXRlcihlbGZfZmlsZV9uYW1lKToKKyAgICBpZiBhcmNoID09IDMyOgorICAgICAgICBwaF9mbXQgPSAiPElJSUlJSUlJIgorICAgIGVsc2U6CisgICAgICAgIHBoX2ZtdCA9ICI8SUlRUVFRUVEiCisKKyAgICAiIiIgbG9vayBmb3IgUFRfSU5URVJQIHNlY3Rpb24gIiIiCisgICAgZm9yIGkgaW4gcmFuZ2UoMCxlX3BobnVtKToKKyAgICAgICAgZi5zZWVrKGVfcGhvZmYgKyBpICogZV9waGVudHNpemUpCisgICAgICAgIHBoX2hkciA9IGYucmVhZChlX3BoZW50c2l6ZSkKKyAgICAgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgICAgICMgMzJiaXQKKyAgICAgICAgICAgIHBfdHlwZSwgcF9vZmZzZXQsIHBfdmFkZHIsIHBfcGFkZHIsIHBfZmlsZXN6LFwKKyAgICAgICAgICAgICAgICBwX21lbXN6LCBwX2ZsYWdzLCBwX2FsaWduID0gc3RydWN0LnVucGFjayhwaF9mbXQsIHBoX2hkcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgNjRiaXQKKyAgICAgICAgICAgIHBfdHlwZSwgcF9mbGFncywgcF9vZmZzZXQsIHBfdmFkZHIsIHBfcGFkZHIsIFwKKyAgICAgICAgICAgIHBfZmlsZXN6LCBwX21lbXN6LCBwX2FsaWduID0gc3RydWN0LnVucGFjayhwaF9mbXQsIHBoX2hkcikKKworICAgICAgICAiIiIgY2hhbmdlIGludGVycHJldGVyICIiIgorICAgICAgICBpZiBwX3R5cGUgPT0gMzoKKyAgICAgICAgICAgICMgUFRfSU5URVJQIHNlY3Rpb24KKyAgICAgICAgICAgIGYuc2VlayhwX29mZnNldCkKKyAgICAgICAgICAgICMgRXh0ZXJuYWwgU0RLcyB3aXRoIG1peGVkIHByZS1jb21waWxlZCBiaW5hcmllcyBzaG91bGQgbm90IGdldAorICAgICAgICAgICAgIyByZWxvY2F0ZWQgc28gbG9vayBmb3Igc29tZSB2YXJpYW50IG9mIC9saWIKKyAgICAgICAgICAgIGZuYW1lID0gZi5yZWFkKDExKQorICAgICAgICAgICAgaWYgZm5hbWUuc3RhcnRzd2l0aChiKCIvbGliLyIpKSBvciBmbmFtZS5zdGFydHN3aXRoKGIoIi9saWI2NC8iKSkgb3IgXAorICAgICAgICAgICAgICAgZm5hbWUuc3RhcnRzd2l0aChiKCIvbGliMzIvIikpIG9yIGZuYW1lLnN0YXJ0c3dpdGgoYigiL3Vzci9saWIzMi8iKSkgb3IgXAorICAgICAgICAgICAgICAgZm5hbWUuc3RhcnRzd2l0aChiKCIvdXNyL2xpYjMyLyIpKSBvciBmbmFtZS5zdGFydHN3aXRoKGIoIi91c3IvbGliNjQvIikpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiAobGVuKG5ld19kbF9wYXRoKSA+PSBwX2ZpbGVzeik6CisgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiBjb3VsZCBub3QgcmVsb2NhdGUgJXMsIGludGVycCBzaXplID0gJWkgYW5kICVpIGlzIG5lZWRlZC4iIFwKKyAgICAgICAgICAgICAgICAgICAgJSAoZWxmX2ZpbGVfbmFtZSwgcF9tZW1zeiwgbGVuKG5ld19kbF9wYXRoKSArIDEpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkbF9wYXRoID0gbmV3X2RsX3BhdGggKyBiKCJcMCIpICogKHBfZmlsZXN6IC0gbGVuKG5ld19kbF9wYXRoKSkKKyAgICAgICAgICAgIGYuc2VlayhwX29mZnNldCkKKyAgICAgICAgICAgIGYud3JpdGUoZGxfcGF0aCkKKyAgICAgICAgICAgIGJyZWFrCisKK2RlZiBjaGFuZ2VfZGxfc3lzZGlycygpOgorICAgIGlmIGFyY2ggPT0gMzI6CisgICAgICAgIHNoX2ZtdCA9ICI8SUlJSUlJSUlJSSIKKyAgICBlbHNlOgorICAgICAgICBzaF9mbXQgPSAiPElJUVFRUUlJUVEiCisKKyAgICAiIiIgcmVhZCBzZWN0aW9uIHN0cmluZyB0YWJsZSAiIiIKKyAgICBmLnNlZWsoZV9zaG9mZiArIGVfc2hzdHJuZHggKiBlX3NoZW50c2l6ZSkKKyAgICBzaF9oZHIgPSBmLnJlYWQoZV9zaGVudHNpemUpCisgICAgaWYgYXJjaCA9PSAzMjoKKyAgICAgICAgc2hfb2Zmc2V0LCBzaF9zaXplID0gc3RydWN0LnVucGFjaygiPDE2eElJMTZ4Iiwgc2hfaGRyKQorICAgIGVsc2U6CisgICAgICAgIHNoX29mZnNldCwgc2hfc2l6ZSA9IHN0cnVjdC51bnBhY2soIjwyNHhRUTI0eCIsIHNoX2hkcikKKworICAgIGYuc2VlayhzaF9vZmZzZXQpCisgICAgc2hfc3RydGFiID0gZi5yZWFkKHNoX3NpemUpCisKKyAgICBzeXNkaXJzID0gc3lzZGlyc19sZW4gPSAiIgorCisgICAgIiIiIGNoYW5nZSBsZC5zby5jYWNoZSBwYXRoIGFuZCBkZWZhdWx0IGxpYnMgcGF0aCBmb3IgZHluYW1pYyBsb2FkZXIgIiIiCisgICAgZm9yIGkgaW4gcmFuZ2UoMCxlX3NobnVtKToKKyAgICAgICAgZi5zZWVrKGVfc2hvZmYgKyBpICogZV9zaGVudHNpemUpCisgICAgICAgIHNoX2hkciA9IGYucmVhZChlX3NoZW50c2l6ZSkKKworICAgICAgICBzaF9uYW1lLCBzaF90eXBlLCBzaF9mbGFncywgc2hfYWRkciwgc2hfb2Zmc2V0LCBzaF9zaXplLCBzaF9saW5rLFwKKyAgICAgICAgICAgIHNoX2luZm8sIHNoX2FkZHJhbGlnbiwgc2hfZW50c2l6ZSA9IHN0cnVjdC51bnBhY2soc2hfZm10LCBzaF9oZHIpCisKKyAgICAgICAgbmFtZSA9IHNoX3N0cnRhYltzaF9uYW1lOnNoX3N0cnRhYi5maW5kKGIoIlwwIiksIHNoX25hbWUpXQorCisgICAgICAgICIiIiBsb29rIG9ubHkgaW50byBTSFRfUFJPR0JJVFMgc2VjdGlvbnMgIiIiCisgICAgICAgIGlmIHNoX3R5cGUgPT0gMToKKyAgICAgICAgICAgIGYuc2VlayhzaF9vZmZzZXQpCisgICAgICAgICAgICAiIiIgZGVmYXVsdCBsaWJyYXJ5IHBhdGhzIGNhbm5vdCBiZSBjaGFuZ2VkIG9uIHRoZSBmbHkgYmVjYXVzZSAgIiIiCisgICAgICAgICAgICAiIiIgdGhlIHN0cmluZyBsZW5ndGhzIGhhdmUgdG8gYmUgY2hhbmdlZCB0b28uICAgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBpZiBuYW1lID09IGIoIi5zeXNkaXJzIik6CisgICAgICAgICAgICAgICAgc3lzZGlycyA9IGYucmVhZChzaF9zaXplKQorICAgICAgICAgICAgICAgIHN5c2RpcnNfb2ZmID0gc2hfb2Zmc2V0CisgICAgICAgICAgICAgICAgc3lzZGlyc19zZWN0X3NpemUgPSBzaF9zaXplCisgICAgICAgICAgICBlbGlmIG5hbWUgPT0gYigiLnN5c2RpcnNsZW4iKToKKyAgICAgICAgICAgICAgICBzeXNkaXJzbGVuID0gZi5yZWFkKHNoX3NpemUpCisgICAgICAgICAgICAgICAgc3lzZGlyc2xlbl9vZmYgPSBzaF9vZmZzZXQKKyAgICAgICAgICAgIGVsaWYgbmFtZSA9PSBiKCIubGRzb2NhY2hlIik6CisgICAgICAgICAgICAgICAgbGRzb2NhY2hlX3BhdGggPSBmLnJlYWQoc2hfc2l6ZSkKKyAgICAgICAgICAgICAgICBuZXdfbGRzb2NhY2hlX3BhdGggPSBvbGRfcHJlZml4LnN1YihuZXdfcHJlZml4LCBsZHNvY2FjaGVfcGF0aCkKKyAgICAgICAgICAgICAgICAjIHBhZCB3aXRoIHplcm9zCisgICAgICAgICAgICAgICAgbmV3X2xkc29jYWNoZV9wYXRoICs9IGIoIlwwIikgKiAoc2hfc2l6ZSAtIGxlbihuZXdfbGRzb2NhY2hlX3BhdGgpKQorICAgICAgICAgICAgICAgICMgd3JpdGUgaXQgYmFjaworICAgICAgICAgICAgICAgIGYuc2VlayhzaF9vZmZzZXQpCisgICAgICAgICAgICAgICAgZi53cml0ZShuZXdfbGRzb2NhY2hlX3BhdGgpCisgICAgICAgICAgICBlbGlmIG5hbWUgPT0gYigiLmdjY3JlbG9jcHJlZml4Iik6CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMAorICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgKyA0MDk2KSA8PSBzaF9zaXplOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gZi5yZWFkKDQwOTYpCisgICAgICAgICAgICAgICAgICAgIG5ld19wYXRoID0gb2xkX3ByZWZpeC5zdWIobmV3X3ByZWZpeCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgIyBwYWQgd2l0aCB6ZXJvcworICAgICAgICAgICAgICAgICAgICBuZXdfcGF0aCArPSBiKCJcMCIpICogKDQwOTYgLSBsZW4obmV3X3BhdGgpKQorICAgICAgICAgICAgICAgICAgICAjcHJpbnQgIkNoYW5naW5nICVzIHRvICVzIGF0ICVzIiAlIChzdHIocGF0aCksIHN0cihuZXdfcGF0aCksIHN0cihvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIGl0IGJhY2sKKyAgICAgICAgICAgICAgICAgICAgZi5zZWVrKHNoX29mZnNldCArIG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShuZXdfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgNDA5NgorICAgIGlmIHN5c2RpcnMgIT0gIiIgYW5kIHN5c2RpcnNsZW4gIT0gIiI6CisgICAgICAgIHBhdGhzID0gc3lzZGlycy5zcGxpdChiKCJcMCIpKQorICAgICAgICBzeXNkaXJzID0gYigiIikKKyAgICAgICAgc3lzZGlyc2xlbiA9IGIoIiIpCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgIiIiIGV4aXQgdGhlIGxvb3Agd2hlbiB3ZSBlbmNvdW50ZXIgZmlyc3QgZW1wdHkgc3RyaW5nICIiIgorICAgICAgICAgICAgaWYgcGF0aCA9PSBiKCIiKToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBuZXdfcGF0aCA9IG9sZF9wcmVmaXguc3ViKG5ld19wcmVmaXgsIHBhdGgpCisgICAgICAgICAgICBzeXNkaXJzICs9IG5ld19wYXRoICsgYigiXDAiKQorCisgICAgICAgICAgICBpZiBhcmNoID09IDMyOgorICAgICAgICAgICAgICAgIHN5c2RpcnNsZW4gKz0gc3RydWN0LnBhY2soIjxMIiwgbGVuKG5ld19wYXRoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzZGlyc2xlbiArPSBzdHJ1Y3QucGFjaygiPFEiLCBsZW4obmV3X3BhdGgpKQorCisgICAgICAgICIiIiBwYWQgd2l0aCB6ZXJvcyAiIiIKKyAgICAgICAgc3lzZGlycyArPSBiKCJcMCIpICogKHN5c2RpcnNfc2VjdF9zaXplIC0gbGVuKHN5c2RpcnMpKQorCisgICAgICAgICIiIiB3cml0ZSB0aGUgc2VjdGlvbnMgYmFjayAiIiIKKyAgICAgICAgZi5zZWVrKHN5c2RpcnNfb2ZmKQorICAgICAgICBmLndyaXRlKHN5c2RpcnMpCisgICAgICAgIGYuc2VlayhzeXNkaXJzbGVuX29mZikKKyAgICAgICAgZi53cml0ZShzeXNkaXJzbGVuKQorCisjIE1BSU4KK2lmIGxlbihzeXMuYXJndikgPCA0OgorICAgIHN5cy5leGl0KC0xKQorCisjIEluIHB5dGhvbiA+IDMsIHN0cmluZ3MgbWF5IGFsc28gY29udGFpbiBVbmljb2RlIGNoYXJhY3RlcnMuIFNvLCBjb252ZXJ0CisjIHRoZW0gdG8gYnl0ZXMKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywpOgorICAgIG5ld19wcmVmaXggPSBzeXMuYXJndlsxXQorICAgIG5ld19kbF9wYXRoID0gc3lzLmFyZ3ZbMl0KK2Vsc2U6CisgICAgbmV3X3ByZWZpeCA9IHN5cy5hcmd2WzFdLmVuY29kZSgpCisgICAgbmV3X2RsX3BhdGggPSBzeXMuYXJndlsyXS5lbmNvZGUoKQorCitleGVjdXRhYmxlc19saXN0ID0gc3lzLmFyZ3ZbMzpdCisKK2ZvciBlIGluIGV4ZWN1dGFibGVzX2xpc3Q6CisgICAgcGVybXMgPSBvcy5zdGF0KGUpW3N0YXQuU1RfTU9ERV0KKyAgICBpZiBvcy5hY2Nlc3MoZSwgb3MuV19PS3xvcy5SX09LKToKKyAgICAgICAgcGVybXMgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgb3MuY2htb2QoZSwgcGVybXN8c3RhdC5TX0lSV1hVKQorCisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbihlLCAicitiIikKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjdHlwZSwgaW9leCA9IHN5cy5leGNfaW5mbygpWzoyXQorICAgICAgICBpZiBpb2V4LmVycm5vID09IGVycm5vLkVUWFRCU1k6CisgICAgICAgICAgICBwcmludCgiQ291bGQgbm90IG9wZW4gJXMuIEZpbGUgdXNlZCBieSBhbm90aGVyIHByb2Nlc3MuXG5QbGVhc2UgIlwKKyAgICAgICAgICAgICAgICAgICJtYWtlIHN1cmUgeW91IGV4aXQgYWxsIHByb2Nlc3NlcyB0aGF0IG1pZ2h0IHVzZSBhbnkgU0RLICJcCisgICAgICAgICAgICAgICAgICAiYmluYXJpZXMuIiAlIGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiQ291bGQgbm90IG9wZW4gJXM6ICVzKCVkKSIgJSAoZSwgaW9leC5zdHJlcnJvciwgaW9leC5lcnJubykpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgIyBTYXZlIG9sZCBzaXplIGFuZCBkbyBhIHNpemUgY2hlY2sgYXQgdGhlIGVuZC4gSnVzdCBhIHNhZmV0eSBtZWFzdXJlLgorICAgIG9sZF9zaXplID0gb3MucGF0aC5nZXRzaXplKGUpCisgICAgaWYgb2xkX3NpemUgPj0gNjQ6CisgICAgICAgIGFyY2ggPSBnZXRfYXJjaCgpCisgICAgICAgIGlmIGFyY2g6CisgICAgICAgICAgICBwYXJzZV9lbGZfaGVhZGVyKCkKKyAgICAgICAgICAgIGNoYW5nZV9pbnRlcnByZXRlcihlKQorICAgICAgICAgICAgY2hhbmdlX2RsX3N5c2RpcnMoKQorCisgICAgIiIiIGNoYW5nZSBwZXJtaXNzaW9ucyBiYWNrICIiIgorICAgIGlmIHBlcm1zOgorICAgICAgICBvcy5jaG1vZChlLCBwZXJtcykKKworICAgIGYuY2xvc2UoKQorCisgICAgaWYgb2xkX3NpemUgIT0gb3MucGF0aC5nZXRzaXplKGUpOgorICAgICAgICBwcmludCgiTmV3IGZpbGUgc2l6ZSBmb3IgJXMgaXMgZGlmZmVyZW50LiBMb29rcyBsaWtlIGEgcmVsb2NhdGlvbiBlcnJvciEiLCBlKQorICAgICAgICBzeXMuZXhpdCgtMSkKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yb290ZnNfcnBtLWV4dHJhY3QtcG9zdGluc3QuYXdrIGIvc2NyaXB0cy9yb290ZnNfcnBtLWV4dHJhY3QtcG9zdGluc3QuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjgzNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3Jvb3Rmc19ycG0tZXh0cmFjdC1wb3N0aW5zdC5hd2sKQEAgLTAsMCArMSwxMSBAQAorL05hbWU6LiovIHsKKyAgcGFja2FnZSA9IHN1YnN0cigkMCwgNykKKyAgbmV4dAorfQorL3Bvc3RpbnN0YWxsLipzY3JpcHRsZXQgLiovIHsKKyAgbmV4dAorfQoreworICBwcmludCAkMCA+PiBFTlZJUk9OWyJEIl0gIi9ldGMvcnBtLXBvc3RpbnN0cy8iIHBhY2thZ2UgIi5zaCIKK30KKyAgICAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcnBtMmNwaW8uc2ggYi9zY3JpcHRzL3JwbTJjcGlvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkZjhjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3JwbTJjcGlvLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCisjIFRoaXMgY29tZXMgZnJvbSB0aGUgUlBNNSA1LjQuMCBkaXN0cmlidXRpb24uCisKK3BrZz0kMQoraWYgWyAiJHBrZyIgPSAiIiAtbyAhIC1lICIkcGtnIiBdOyB0aGVuCisgICAgZWNobyAibm8gcGFja2FnZSBzdXBwbGllZCIgMT4mMgorICAgZXhpdCAxCitmaQorCitsZWFkc2l6ZT05Ngorbz1gZXhwciAkbGVhZHNpemUgKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJzaWcgaWw6ICRpbCBkbDogJGRsIgorCitzaWdzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJHNpZ3NpemUgKyBcKCA4IC0gXCggJHNpZ3NpemUgXCUgOCBcKSBcKSBcJSA4ICsgOGAKK3NldCBgb2QgLWogJG8gLU4gOCAtdCB1MSAkcGtnYAoraWw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDIgKyAkMyBcKSArICQ0IFwpICsgJDVgCitkbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkNiArICQ3IFwpICsgJDggXCkgKyAkOWAKKyMgZWNobyAiaGRyIGlsOiAkaWwgZGw6ICRkbCIKKworaGRyc2l6ZT1gZXhwciA4ICsgMTYgXCogJGlsICsgJGRsYAorbz1gZXhwciAkbyArICRoZHJzaXplYAorRVhUUkFDVE9SPSJkZCBpZj0kcGtnIGlicz0kbyBza2lwPTEiCisKK0NPTVBSRVNTSU9OPWAoJEVYVFJBQ1RPUiB8ZmlsZSAtKSAyPi9kZXYvbnVsbGAKK2lmIGVjaG8gJENPTVBSRVNTSU9OIHxncmVwIC1pcSBnemlwOyB0aGVuCisJREVDT01QUkVTU09SPWd1bnppcAorZWxpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgYnppcDI7IHRoZW4KKwlERUNPTVBSRVNTT1I9YnVuemlwMgorZWxpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgeHo7IHRoZW4KKwlERUNPTVBSRVNTT1I9dW54egorZWxpZiBlY2hvICRDT01QUkVTU0lPTiB8Z3JlcCAtaXEgY3BpbzsgdGhlbgorCURFQ09NUFJFU1NPUj1jYXQKK2Vsc2UKKwkjIE1vc3QgdmVyc2lvbnMgb2YgZmlsZSBkb24ndCBzdXBwb3J0IExaTUEsIHRoZXJlZm9yZSB3ZSBhc3N1bWUKKwkjIGFueXRoaW5nIG5vdCBkZXRlY3RlZCBpcyBMWk1BCisJREVDT01QUkVTU09SPWB3aGljaCB1bmx6bWEgMj4vZGV2L251bGxgCisJY2FzZSAiJERFQ09NUFJFU1NPUiIgaW4KKwkgICAgLyogKSA7OworCSAgICAqICApIERFQ09NUFJFU1NPUj1gd2hpY2ggbHptYXNoIDI+L2Rldi9udWxsYAorCSAgICAgICAgIGNhc2UgIiRERUNPTVBSRVNTT1IiIGluCisJICAgICAgICAgICAgIC8qICkgREVDT01QUkVTU09SPSJsem1hc2ggLWQgLWMiIDs7CisJICAgICAgICAgICAgICogICkgREVDT01QUkVTU09SPWNhdCA7OworCSAgICAgICAgIGVzYWMKKwkgICAgICAgICA7OworCWVzYWMKK2ZpCisKKyRFWFRSQUNUT1IgMj4vZGV2L251bGwgfCAkREVDT01QUkVTU09SCmRpZmYgLS1naXQgYS9zY3JpcHRzL3J1bnFlbXUgYi9zY3JpcHRzL3J1bnFlbXUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNjZjViZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcnVucWVtdQpAQCAtMCwwICsxLDUzMiBAQAorIyEvYmluL2Jhc2gKKyMKKyMgSGFuZGxlIHJ1bm5pbmcgT0UgaW1hZ2VzIHN0YW5kYWxvbmUgd2l0aCBRRU1VCisjCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDExIExpbnV4IEZvdW5kYXRpb24KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworICAgIE1ZTkFNRT1gYmFzZW5hbWUgJDBgCisgICAgZWNobyAiIgorICAgIGVjaG8gIlVzYWdlOiB5b3UgY2FuIHJ1biB0aGlzIHNjcmlwdCB3aXRoIGFueSB2YWxpZCBjb21iaW5hdGlvbiIKKyAgICBlY2hvICJvZiB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyAoaW4gYW55IG9yZGVyKToiCisgICAgZWNobyAiICBRRU1VQVJDSCAtIHRoZSBxZW11IG1hY2hpbmUgYXJjaGl0ZWN0dXJlIHRvIHVzZSIKKyAgICBlY2hvICIgIEtFUk5FTCAtIHRoZSBrZXJuZWwgaW1hZ2UgZmlsZSB0byB1c2UiCisgICAgZWNobyAiICBST09URlMgLSB0aGUgcm9vdGZzIGltYWdlIGZpbGUgb3IgbmZzcm9vdCBkaXJlY3RvcnkgdG8gdXNlIgorICAgIGVjaG8gIiAgTUFDSElORSAtIHRoZSBtYWNoaW5lIG5hbWUgKG9wdGlvbmFsLCBhdXRvZGV0ZWN0ZWQgZnJvbSBLRVJORUwgZmlsZW5hbWUgaWYgdW5zcGVjaWZpZWQpIgorICAgIGVjaG8gIiAgUkFNRlMgLSBib290IGEgcmFtZnMtYmFzZWQgaW1hZ2UiCisgICAgZWNobyAiICBJU08gLSBib290IGFuIElTTyBpbWFnZSIKKyAgICBlY2hvICIgIFZNIC0gYm9vdCBhIHZpcnR1YWwgbWFjaGluZSBpbWFnZSAoPSBhIGZpbGUgcmVwcmVzZW50aW5nIGEgZnVsbCBkaXNrIHdpdGggYm9vdCBsb2FkZXIpIgorICAgIGVjaG8gIiAgU2ltcGxpZmllZCBRRU1VIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBiZSBwYXNzZWQgd2l0aDoiCisgICAgZWNobyAiICAgIG5vZ3JhcGhpYyAtIGRpc2FibGVzIHZpZGVvIGNvbnNvbGUiCisgICAgZWNobyAiICAgIHNlcmlhbCAtIGVuYWJsZXMgYSBzZXJpYWwgY29uc29sZSBvbiAvZGV2L3R0eVMwIgorICAgIGVjaG8gIiAgICBrdm0gLSBlbmFibGVzIEtWTSB3aGVuIHJ1bm5pbmcgcWVtdXg4Ni9xZW11eDg2LTY0IChWVC1jYXBhYmxlIENQVSByZXF1aXJlZCkiCisgICAgZWNobyAiICAgIHB1YmxpY3ZuYyAtIGVuYWJsZSBhIFZOQyBzZXJ2ZXIgb3BlbiB0byBhbGwgaG9zdHMiCisgICAgZWNobyAiICBxZW11cGFyYW1zPVwieHl6XCIgLSBzcGVjaWZ5IGN1c3RvbSBwYXJhbWV0ZXJzIHRvIFFFTVUiCisgICAgZWNobyAiICBib290cGFyYW1zPVwieHl6XCIgLSBzcGVjaWZ5IGN1c3RvbSBrZXJuZWwgcGFyYW1ldGVycyBkdXJpbmcgYm9vdCIKKyAgICBlY2hvICIiCisgICAgZWNobyAiRXhhbXBsZXM6IgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11YXJtIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2LTY0IGNvcmUtaW1hZ2Utc2F0byBleHQ0IgorICAgIGVjaG8gIiAgJE1ZTkFNRSBwYXRoL3RvL2J6SW1hZ2UtcWVtdXg4Ni5iaW4gcGF0aC90by9uZnNyb290ZGlyLyBzZXJpYWwiCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYgcmFtZnMiCisgICAgZWNobyAiICAkTVlOQU1FIHFlbXV4ODYgaXNvIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBxZW11eDg2IHFlbXVwYXJhbXM9XCItbSAyNTZcIiIKKyAgICBlY2hvICIgICRNWU5BTUUgcWVtdXg4NiBib290cGFyYW1zPVwicHNwbGFzaD1mYWxzZVwiIgorICAgIGVjaG8gIiAgJE1ZTkFNRSBwYXRoL3RvLzxpbWFnZT4tPG1hY2hpbmU+LnZtZGsiCisgICAgZXhpdCAxCit9CisKK2lmIFsgIngkMSIgPSAieCIgXTsgdGhlbgorICAgIHVzYWdlCitmaQorCitlcnJvcigpIHsKKyAgICBlY2hvICJFcnJvcjogIiQqCisgICAgdXNhZ2UKK30KKworTUFDSElORT0ke01BQ0hJTkU6PSIifQorS0VSTkVMPSR7S0VSTkVMOj0iIn0KK1JPT1RGUz0ke1JPT1RGUzo9IiJ9CitWTT0ke1ZNOj0iIn0KK0ZTVFlQRT0ke0ZTVFlQRTo9IiJ9CitMQVpZX1JPT1RGUz0iIgorU0NSSVBUX1FFTVVfT1BUPSIiCitTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiIKK1NDUklQVF9LRVJORUxfT1BUPSIiCitTRVJJQUxTVERJTz0iIgorVENQU0VSSUFMX1BPUlROVU09IiIKK0tWTV9FTkFCTEVEPSJubyIKK0tWTV9BQ1RJVkU9Im5vIgorCisjIERldGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGlzIGEga2VybmVsIG9yIFFFTVUgaW1hZ2UsIGFuZCBzZXQgdGhlCisjIGFwcHJvcHJpYXRlIHZhcmlhYmxlcworcHJvY2Vzc19maWxlbmFtZSgpIHsKKyAgICBmaWxlbmFtZT0kMQorCisgICAgIyBFeHRyYWN0IHRoZSBmaWxlbmFtZSBleHRlbnNpb24KKyAgICBFWFQ9YGVjaG8gJGZpbGVuYW1lIHwgYXdrIC1GIC4gJ3sgcHJpbnQgXCRORiB9J2AKKyAgICBjYXNlIC8kRVhULyBpbgorCS9iaW4vKQorCQkjIEEgZmlsZSBlbmRpbmcgaW4gLmJpbiBpcyBhIGtlcm5lbAorCQlbIC16ICIkS0VSTkVMIiBdICYmIEtFUk5FTD0kZmlsZW5hbWUgfHwgXAorCQkgICAgZXJyb3IgImNvbmZsaWN0aW5nIEtFUk5FTCBhcmdzIFskS0VSTkVMXSBhbmQgWyRmaWxlbmFtZV0iCisJCTs7CisJL2V4dFsyMzRdL3wvamZmczIvfC9idHJmcy8pCisJCSMgQSBmaWxlIGVuZGluZyBpbiBhIHN1cHBvcnR0ZWQgZnMgdHlwZSBpcyBhIHJvb3RmcyBpbWFnZQorCQlpZiBbIC16ICIkRlNUWVBFIiAtbyAiJEZTVFlQRSIgPSAiJEVYVCIgXTsgdGhlbgorCQkgICAgRlNUWVBFPSRFWFQKKwkJICAgIFJPT1RGUz0kZmlsZW5hbWUKKwkJZWxzZQorCQkgICAgZXJyb3IgImNvbmZsaWN0aW5nIEZTVFlQRSB0eXBlcyBbJEZTVFlQRV0gYW5kIFskRVhUXSIKKwkJZmkKKwkJOzsKKwkvaGRkaW1nL3wvaGRkZGlyZWN0L3wvdm1kay8pCisJCUZTVFlQRT0kRVhUCisJCVZNPSRmaWxlbmFtZQorCQk7OworCSopCisJCWVycm9yICJ1bmtub3duIGZpbGUgYXJnIFskZmlsZW5hbWVdIgorCQk7OworICAgIGVzYWMKK30KKworIyBQYXJzZSBjb21tYW5kIGxpbmUgYXJncyB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBvcmRlcmluZy4gSXQncyBhCisjIGJpdCBtb3JlIGNvbXBsZXgsIGJ1dCBvZmZlcnMgYSBncmVhdCB1c2VyIGV4cGVyaWVuY2UuCit3aGlsZSB0cnVlOyBkbworICAgIGFyZz0kezF9CisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAgICAgInFlbXV4ODYiIHwgInFlbXV4ODYtNjQiIHwgInFlbXVhcm0iIHwgInFlbXVhcm02NCIgfCAicWVtdW1pcHMiIHwgInFlbXVtaXBzZWwiIHwgXAorICAgICAgICAicWVtdW1pcHM2NCIgfCAicWVtdXNoNCIgIHwgInFlbXVwcGMiIHwgInFlbXVtaWNyb2JsYXplIiB8ICJxZW11enlucSIpCisgICAgICAgICAgICBbIC16ICIkTUFDSElORSIgXSAmJiBNQUNISU5FPSRhcmcgfHwgXAorICAgICAgICAgICAgICAgIGVycm9yICJjb25mbGljdGluZyBNQUNISU5FIHR5cGVzIFskTUFDSElORV0gYW5kIFskYXJnXSIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJleHQyIiB8ICJleHQzIiB8ICJleHQ0IiB8ICJqZmZzMiIgfCAibmZzIiB8ICJidHJmcyIgfCAiaGRkaW1nIiB8ICJoZGRkaXJlY3QiICkKKyAgICAgICAgICAgIFsgLXogIiRGU1RZUEUiIC1vICIkRlNUWVBFIiA9ICIkYXJnIiBdICYmIEZTVFlQRT0kYXJnIHx8IFwKKyAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgRlNUWVBFIHR5cGVzIFskRlNUWVBFXSBhbmQgWyRhcmddIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInJhbWZzIikKKyAgICAgICAgICAgIEZTVFlQRT1jcGlvLmd6CisgICAgICAgICAgICBSQU1GUz10cnVlCisgICAgICAgICAgICA7OworICAgICAgICAiaXNvIikKKwkgICAgRlNUWVBFPWlzbworCSAgICBJU09GUz10cnVlCisJICAgIDs7CisgICAgICAgICJub2dyYXBoaWMiKQorICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1ub2dyYXBoaWMiCisgICAgICAgICAgICBTQ1JJUFRfS0VSTkVMX09QVD0iJFNDUklQVF9LRVJORUxfT1BUIGNvbnNvbGU9dHR5UzAiCisgICAgICAgICAgICA7OworICAgICAgICAic2VyaWFsIikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtc2VyaWFsIHN0ZGlvIgorICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCBjb25zb2xlPXR0eVMwIgorICAgICAgICAgICAgU0VSSUFMU1RESU89IjEiCisgICAgICAgICAgICA7OworICAgICAgICAidGNwc2VyaWFsPSIqKQorICAgICAgICAgICAgVENQU0VSSUFMX1BPUlROVU09JHthcmcjI3RjcHNlcmlhbD19CisgICAgICAgICAgICA7OworCSJiaW9zZGlyPSIqKQorICAgICAgICAgICAgQ1VTVE9NQklPU0RJUj0iJHthcmcjI2Jpb3NkaXI9fSIKKwkgICAgOzsKKyAgICAgICAgImJpb3NmaWxlbmFtZT0iKikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtYmlvcyAke2FyZyMjYmlvc2ZpbGVuYW1lPX0iCisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXBhcmFtcz0iKikKKyAgICAgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJHthcmcjI3FlbXVwYXJhbXM9fSIKKworICAgICAgICAgICAgIyBXYXJuIHVzZXIgaWYgdGhleSB0cnkgdG8gc3BlY2lmeSBzZXJpYWwgb3Iga3ZtIG9wdGlvbnMKKyAgICAgICAgICAgICMgdG8gdXNlIHNpbXBsaWZpZWQgb3B0aW9ucyBpbnN0ZWFkCisgICAgICAgICAgICBzZXJpYWxfb3B0aW9uPWBleHByICIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIiA6ICcuKlwoLXNlcmlhbFwpJ2AKKyAgICAgICAgICAgIGt2bV9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtZW5hYmxlLWt2bVwpJ2AKKyAgICAgICAgICAgIHZnYV9vcHRpb249YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtdmdhXCknYAorICAgICAgICAgICAgWyAhIC16ICIkc2VyaWFsX29wdGlvbiIgLW8gISAteiAiJGt2bV9vcHRpb24iIF0gJiYgXAorICAgICAgICAgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugc2ltcGxpZmllZCBzZXJpYWwgb3Iga3ZtIG9wdGlvbnMgaW5zdGVhZCIKKyAgICAgICAgICAgIDs7CisgICAgICAgICJib290cGFyYW1zPSIqKQorICAgICAgICAgICAgU0NSSVBUX0tFUk5FTF9PUFQ9IiRTQ1JJUFRfS0VSTkVMX09QVCAke2FyZyMjYm9vdHBhcmFtcz19IgorICAgICAgICAgICAgOzsKKyAgICAgICAgImF1ZGlvIikKKyAgICAgICAgICAgIGlmIFsgIngkTUFDSElORSIgPSAieHFlbXV4ODYiIC1vICJ4JE1BQ0hJTkUiID0gInhxZW11eDg2LTY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRW5hYmxpbmcgYXVkaW8gaW4gcWVtdS4iCisgICAgICAgICAgICAgICAgZWNobyAiUGxlYXNlIGluc3RhbGwgc25kX2ludGVsOHgwIG9yIHNuZF9lbnMxMzcwIGRyaXZlciBpbiBsaW51eCBndWVzdC4iCisgICAgICAgICAgICAgICAgUUVNVV9BVURJT19EUlY9ImFsc2EiCisgICAgICAgICAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1zb3VuZGh3IGFjOTcsZXMxMzcwIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICJrdm0iKQorICAgICAgICAgICAgS1ZNX0VOQUJMRUQ9InllcyIKKyAgICAgICAgICAgIEtWTV9DQVBBQkxFPWBncmVwIC1xICd2bXhcfHN2bScgL3Byb2MvY3B1aW5mbyAmJiBlY2hvIDFgCisgICAgICAgICAgICA7OworICAgICAgICAic2xpcnAiKQorICAgICAgICAgICAgU0xJUlBfRU5BQkxFRD0ieWVzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgInB1YmxpY3ZuYyIpCisgICAgICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLXZuYyAwLjAuMC4wOjAiCisgICAgICAgICAgICA7OworICAgICAgICAqLWltYWdlKikKKyAgICAgICAgICAgIFsgLXogIiRST09URlMiIF0gfHwgXAorCQllcnJvciAiY29uZmxpY3RpbmcgUk9PVEZTIGFyZ3MgWyRST09URlNdIGFuZCBbJGFyZ10iCisgICAgICAgICAgICBpZiBbIC1mICIkYXJnIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgcHJvY2Vzc19maWxlbmFtZSAkYXJnCisgICAgICAgICAgICBlbGlmIFsgLWQgIiRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbmZzcm9vdCBkaXIgaGFzIC1pbWFnZS0KKyAgICAgICAgICAgICAgICAjIGluIHRoZSBwYXRobmFtZQorICAgICAgICAgICAgICAgIGVjaG8gIkFzc3VtaW5nICRhcmcgaXMgYW4gbmZzIHJvb3RmcyIKKyAgICAgICAgICAgICAgICBGU1RZUEU9bmZzCisgICAgICAgICAgICAgICAgUk9PVEZTPSRhcmcKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBST09URlM9JGFyZworICAgICAgICAgICAgICAgIExBWllfUk9PVEZTPSJ0cnVlIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICIiKSBicmVhayA7OworICAgICAgICAqKQorICAgICAgICAgICAgIyBBIGRpcmVjdG9yeSBuYW1lIGlzIGFuIG5mcyByb290ZnMKKyAgICAgICAgICAgIGlmIFsgLWQgIiRhcmciIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJBc3N1bWluZyAkYXJnIGlzIGFuIG5mcyByb290ZnMiCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJEZTVFlQRSIgLW8gIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBGU1RZUEU9bmZzCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgRlNUWVBFIHR5cGVzIFskYXJnXSBhbmQgbmZzIgorICAgICAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICAgICBpZiBbIC16ICIkUk9PVEZTIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIFJPT1RGUz0kYXJnCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnJvciAiY29uZmxpY3RpbmcgUk9PVEZTIGFyZ3MgWyRST09URlNdIGFuZCBbJGFyZ10iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsaWYgWyAtZiAiJGFyZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHByb2Nlc3NfZmlsZW5hbWUgJGFyZworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVycm9yICJ1bmFibGUgdG8gY2xhc3NpZnkgYXJnIFskYXJnXSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitpZiBbICEgLWMgL2Rldi9uZXQvdHVuIF0gOyB0aGVuCisJZWNobyAiVFVOIGNvbnRyb2wgZGV2aWNlIC9kZXYvbmV0L3R1biBpcyB1bmF2YWlsYWJsZTsgeW91IG1heSBuZWVkIHRvIGVuYWJsZSBUVU4gKGUuZy4gc3VkbyBtb2Rwcm9iZSB0dW4pIgorCWV4aXQgMQorZWxpZiBbICEgLXcgL2Rldi9uZXQvdHVuIF0gOyB0aGVuCisJZWNobyAiVFVOIGNvbnRyb2wgZGV2aWNlIC9kZXYvbmV0L3R1biBpcyBub3Qgd3JpdGFibGUsIHBsZWFzZSBmaXggKGUuZy4gc3VkbyBjaG1vZCA2NjYgL2Rldi9uZXQvdHVuKSIKKwlleGl0IDEKK2ZpCisKKyMgUmVwb3J0IGVycm9ycyBmb3IgbWlzc2luZyBjb21iaW5hdGlvbnMgb2Ygb3B0aW9ucworaWYgWyAteiAiJE1BQ0hJTkUiIC1hIC16ICIkS0VSTkVMIiAtYSAteiAiJFZNIiBdOyB0aGVuCisgICAgZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgYSBNQUNISU5FLCBWTSwgb3IgS0VSTkVMIGFyZ3VtZW50IgorZmkKK2lmIFsgIiRGU1RZUEUiID0gIm5mcyIgLWEgLXogIiRST09URlMiIF07IHRoZW4KKyAgICBlcnJvciAiTkZTIGJvb3Rpbmcgd2l0aG91dCBhbiBleHBsaWNpdCBST09URlMgcGF0aCBpcyBub3QgeWV0IHN1cHBvcnRlZCIKK2ZpCisKK2lmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuCisgICAgaWYgWyAieCRGU1RZUEUiID0gInh2bWRrIiBdIHx8IFsgIngkRlNUWVBFIiA9ICJ4aGRkaW1nIiBdIHx8IFsgIngkRlNUWVBFIiA9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgICAgIE1BQ0hJTkU9YGJhc2VuYW1lICRWTSB8IHNlZCAtbiAncy8uKlwocWVtdXg4Ni02NFx8cWVtdXg4Nlx8cWVtdWFybTY0XHxxZW11YXJtXHxxZW11bWlwczY0XHxxZW11bWlwc1x8cWVtdXBwY1x8cWVtdXNoNFwpLiovXDEvcCdgCisgICAgICAgIGlmIFsgLXogIiRNQUNISU5FIiBdOyB0aGVuCisgICAgICAgICAgICBlcnJvciAiVW5hYmxlIHRvIHNldCBNQUNISU5FIGZyb20gaW1hZ2UgZmlsZW5hbWUgWyRWTV0iCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlNldCBNQUNISU5FIHRvIFskTUFDSElORV0gYmFzZWQgb24gaW1hZ2UgWyRWTV0iCisgICAgZWxzZQorICAgICAgICBNQUNISU5FPWBiYXNlbmFtZSAkS0VSTkVMIHwgc2VkIC1uICdzLy4qXChxZW11eDg2LTY0XHxxZW11eDg2XHxxZW11YXJtNjRcfHFlbXVhcm1cfHFlbXVtaXBzNjRcfHFlbXVtaXBzXHxxZW11cHBjXHxxZW11c2g0XCkuKi9cMS9wJ2AKKyAgICAgICAgaWYgWyAteiAiJE1BQ0hJTkUiIF07IHRoZW4KKyAgICAgICAgICAgIGVycm9yICJVbmFibGUgdG8gc2V0IE1BQ0hJTkUgZnJvbSBrZXJuZWwgZmlsZW5hbWUgWyRLRVJORUxdIgorICAgICAgICBmaQorICAgICAgICBlY2hvICJTZXQgTUFDSElORSB0byBbJE1BQ0hJTkVdIGJhc2VkIG9uIGtlcm5lbCBbJEtFUk5FTF0iCisgICAgZmkKK2ZpCisKK1lPQ1RPX0tWTV9XSUtJPSJodHRwczovL3dpa2kueW9jdG9wcm9qZWN0Lm9yZy93aWtpL0hvd190b19lbmFibGVfS1ZNX2Zvcl9Qb2t5X3FlbXUiCitZT0NUT19QQVJBVklSVF9LVk1fV0lLST0iaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9SdW5uaW5nX2FuX3g4Nl9Zb2N0b19MaW51eF9pbWFnZV91bmRlcl9RRU1VX0tWTSIKKyMgRGV0ZWN0IEtWTSBjb25maWd1cmF0aW9uCitpZiBbICJ4JEtWTV9FTkFCTEVEIiA9ICJ4eWVzIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJEtWTV9DQVBBQkxFIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIllvdSBhcmUgdHJ5aW5nIHRvIGVuYWJsZSBLVk0gb24gYSBjcHUgd2l0aG91dCBWVCBzdXBwb3J0LiIKKyAgICAgICAgZWNobyAiUmVtb3ZlIGt2bSBmcm9tIHRoZSBjb21tYW5kLWxpbmUsIG9yIHJlZmVyIgorICAgICAgICBlY2hvICIkWU9DVE9fS1ZNX1dJS0kiOworICAgICAgICBleGl0IDE7CisgICAgZmkKKyAgICBpZiBbICJ4JE1BQ0hJTkUiICE9ICJ4cWVtdXg4NiIgLWEgIngkTUFDSElORSIgIT0gInhxZW11eDg2LTY0IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIktWTSBvbmx5IHN1cHBvcnQgeDg2ICYgeDg2LTY0LiBSZW1vdmUga3ZtIGZyb20gdGhlIGNvbW1hbmQtbGluZSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgISAtZSAvZGV2L2t2bSBdOyB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgS1ZNIGRldmljZS4gSGF2ZSB5b3UgaW5zZXJ0ZWQga3ZtIG1vZHVsZXM/IgorICAgICAgICBlY2hvICJGb3IgZnVydGhlciBoZWxwIHNlZToiCisgICAgICAgIGVjaG8gIiRZT0NUT19LVk1fV0lLSSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgISAtZSAvZGV2L3Zob3N0LW5ldCBdOyB0aGVuCisgICAgICAgIGVjaG8gIk1pc3NpbmcgdmlydGlvIG5ldCBkZXZpY2UuIEhhdmUgeW91IGluc2VydGVkIHZob3N0LW5ldCBtb2R1bGU/IgorICAgICAgICBlY2hvICJGb3IgZnVydGhlciBoZWxwIHNlZToiCisgICAgICAgIGVjaG8gIiRZT0NUT19QQVJBVklSVF9LVk1fV0lLSSI7CisgICAgICAgIGV4aXQgMTsKKyAgICBmaQorICAgIGlmIFsgLXcgL2Rldi9rdm0gLWEgLXIgL2Rldi9rdm0gXTsgdGhlbgorICAgICAgICBTQ1JJUFRfUUVNVV9PUFQ9IiRTQ1JJUFRfUUVNVV9PUFQgLWVuYWJsZS1rdm0iCisgICAgICAgIEtWTV9BQ1RJVkU9InllcyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIllvdSBoYXZlIG5vIHJpZ2h0cyBvbiAvZGV2L2t2bS4iCisgICAgICAgIGVjaG8gIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIKKyAgICAgICAgZWNobyAiJFlPQ1RPX0tWTV9XSUtJIjsKKyAgICAgICAgZXhpdCAxOworICAgIGZpCisgICAgaWYgWyAhIC13IC9kZXYvdmhvc3QtbmV0IC1vICEgLXIgL2Rldi92aG9zdC1uZXQgXTsgdGhlbgorCWlmIFsgIiRTTElSUF9FTkFCTEVEIiAhPSAieWVzIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyAiWW91IGhhdmUgbm8gcmlnaHRzIG9uIC9kZXYvdmhvc3QtbmV0LiIKKyAgICAgICAgICAgIGVjaG8gIlBsZWFzZSBjaGFuZ2UgdGhlIG93bmVyc2hpcCBvZiB0aGlzIGZpbGUgYXMgZGVzY3JpYmVkIGF0OiIKKyAgICAgICAgICAgIGVjaG8gIiRZT0NUT19QQVJBVklSVF9LVk1fV0lLSSI7CisgICAgICAgICAgICBleGl0IDE7CisJZmkKKyAgICBmaQorZmkKKworbWFjaGluZTI9YGVjaG8gJE1BQ0hJTkUgfCB0ciAnYS16JyAnQS1aJyB8IHNlZCAncy8tL18vJ2AKKyMgTUFDSElORSBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMKKworIyBEZWZhdWx0cyB1c2VkIHdoZW4gdGhlc2UgdmFycyBuZWVkIHRvIGJlIGluZmVycmVkCitRRU1VWDg2X0RFRkFVTFRfS0VSTkVMPWJ6SW1hZ2UtcWVtdXg4Ni5iaW4KK1FFTVVYODZfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VWDg2XzY0X0RFRkFVTFRfS0VSTkVMPWJ6SW1hZ2UtcWVtdXg4Ni02NC5iaW4KK1FFTVVYODZfNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VQVJNX0RFRkFVTFRfS0VSTkVMPXpJbWFnZS1xZW11YXJtLmJpbgorUUVNVUFSTV9ERUZBVUxUX0ZTVFlQRT1leHQ0CisKK1FFTVVBUk02NF9ERUZBVUxUX0tFUk5FTD1JbWFnZS1xZW11YXJtNjQuYmluCitRRU1VQVJNNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlQU19ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVtaXBzLmJpbgorUUVNVU1JUFNfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlQU0VMX0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHNlbC5iaW4KK1FFTVVNSVBTRUxfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VTUlQUzY0X0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHM2NC5iaW4KK1FFTVVNSVBTNjRfREVGQVVMVF9GU1RZUEU9ZXh0NAorCitRRU1VU0g0X0RFRkFVTFRfS0VSTkVMPXZtbGludXgtcWVtdW1pcHMuYmluCitRRU1VU0g0X0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVVBQQ19ERUZBVUxUX0tFUk5FTD12bWxpbnV4LXFlbXVwcGMuYmluCitRRU1VUFBDX0RFRkFVTFRfRlNUWVBFPWV4dDQKKworUUVNVU1JQ1JPQkxBWkVfREVGQVVMVF9LRVJORUw9bGludXguYmluLnViCitRRU1VTUlDUk9CTEFaRV9ERUZBVUxUX0ZTVFlQRT1jcGlvCisKK1FFTVVaWU5RX0RFRkFVTFRfS0VSTkVMPXVJbWFnZQorUUVNVVpZTlFfREVGQVVMVF9GU1RZUEU9Y3BpbworCitBS0lUQV9ERUZBVUxUX0tFUk5FTD16SW1hZ2UtYWtpdGEuYmluCitBS0lUQV9ERUZBVUxUX0ZTVFlQRT1qZmZzMgorCitTUElUWl9ERUZBVUxUX0tFUk5FTD16SW1hZ2Utc3BpdHouYmluCitTUElUWl9ERUZBVUxUX0ZTVFlQRT1leHQzCisKK3NldHVwX3BhdGhfdmFycygpIHsKKyAgICBpZiBbIC16ICIkT0VfVE1QRElSIiBdIDsgdGhlbgorICAgICAgICBQQVRIU19SRVFVSVJFRD10cnVlCisgICAgZWxpZiBbICIkMSIgPSAiMSIgLWEgLXogIiRERVBMT1lfRElSX0lNQUdFIiBdIDsgdGhlbgorICAgICAgICBQQVRIU19SRVFVSVJFRD10cnVlCisgICAgZWxzZQorICAgICAgICBQQVRIU19SRVFVSVJFRD1mYWxzZQorICAgIGZpCisKKyAgICBpZiBbICIkUEFUSFNfUkVRVUlSRUQiID0gInRydWUiIF07IHRoZW4KKyAgICAgICAgIyBUcnkgdG8gZ2V0IHRoZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBiaXRiYWtlCisgICAgICAgIHR5cGUgLVAgYml0YmFrZSAmPi9kZXYvbnVsbCB8fCB7CisgICAgICAgICAgICBlY2hvICJJbiBvcmRlciBmb3IgdGhpcyBzY3JpcHQgdG8gZHluYW1pY2FsbHkgaW5mZXIgcGF0aHMiOworICAgICAgICAgICAgZWNobyAidG8ga2VybmVscyBvciBmaWxlc3lzdGVtIGltYWdlcywgeW91IGVpdGhlciBuZWVkIjsKKyAgICAgICAgICAgIGVjaG8gImJpdGJha2UgaW4geW91ciBQQVRIIG9yIHRvIHNvdXJjZSBvZS1pbml0LWJ1aWxkLWVudiI7CisgICAgICAgICAgICBlY2hvICJiZWZvcmUgcnVubmluZyB0aGlzIHNjcmlwdCIgPiYyOworICAgICAgICAgICAgZXhpdCAxOyB9CisKKyAgICAgICAgIyBXZSBoYXZlIGJpdGJha2UgaW4gUEFUSCwgZ2V0IHRoZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBiaXRiYWtlCisgICAgICAgIEJJVEJBS0VfRU5WX1RNUEZJTEU9YG1rdGVtcCAtLXRtcGRpciBydW5xZW11LlhYWFhYWFhYWFhgCisgICAgICAgIGlmIFsgIiQ/IiAhPSAiMCIgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBta3RlbXAgZmFpbGVkIGZvciBiaXRiYWtlIGVudmlyb25tZW50IG91dHB1dCIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorCisgICAgICAgIE1BQ0hJTkU9JE1BQ0hJTkUgYml0YmFrZSAtZSA+ICRCSVRCQUtFX0VOVl9UTVBGSUxFCisgICAgICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF0gOyB0aGVuCisgICAgICAgICAgICBPRV9UTVBESVI9YHNlZCAtbiAncy9eVE1QRElSPVwiXCguKlwpXCIvXDEvcCcgJEJJVEJBS0VfRU5WX1RNUEZJTEVgCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLXogIiRERVBMT1lfRElSX0lNQUdFIiBdIDsgdGhlbgorICAgICAgICAgICAgREVQTE9ZX0RJUl9JTUFHRT1gc2VkIC1uICdzL15ERVBMT1lfRElSX0lNQUdFPVwiXCguKlwpXCIvXDEvcCcgJEJJVEJBS0VfRU5WX1RNUEZJTEVgCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLXogIiRPRV9UTVBESVIiIF07IHRoZW4KKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIGVycm9ycyBmcm9tIGJpdGJha2UgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBrbm93IGFib3V0CisgICAgICAgICAgICBCSVRCQUtFX09VVFBVVD1gY2F0ICRCSVRCQUtFX0VOVl9UTVBGSUxFIHwgd2MgLWxgCisgICAgICAgICAgICBpZiBbICIkQklUQkFLRV9PVVRQVVQiIC1lcSAiMCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiB0aGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gZnJvbSB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgb3IgeW91IG5lZWQiCisgICAgICAgICAgICAgICAgZWNobyAidG8gZXhwbGljaXRseSBzZXQgT0VfVE1QRElSIGFuZCBERVBMT1lfRElSX0lNQUdFIGluIHlvdXIgZW52aXJvbm1lbnQiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIHJ1bm5pbmcgYml0YmFrZSB0byBkZXRlcm1pbmUgVE1QRElSIgorICAgICAgICAgICAgICAgIGVjaG8gIkhlcmUgaXMgdGhlIG91dHB1dCBmcm9tICdiaXRiYWtlIC1lJzoiCisgICAgICAgICAgICAgICAgY2F0ICRCSVRCQUtFX0VOVl9UTVBGSUxFCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgcm0gJEJJVEJBS0VfRU5WX1RNUEZJTEUKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgICBybSAkQklUQkFLRV9FTlZfVE1QRklMRQorICAgIGZpCit9CisKK3NldHVwX3N5c3Jvb3QoKSB7CisgICAgIyBUb29sY2hhaW4gaW5zdGFsbHMgc2V0IHVwICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgaW4gdGhlaXIKKyAgICAjIGVudmlyb25tZW50IHNjcmlwdC4gSWYgdGhhdCB2YXJpYWJsZSBpc24ndCBzZXQsIHdlJ3JlCisgICAgIyBlaXRoZXIgaW4gYW4gaW4tdHJlZSBidWlsZCBzY2VuYXJpbyBvciB0aGUgZW52aXJvbm1lbnQKKyAgICAjIHNjcmlwdCB3YXNuJ3Qgc291cmNlJ2QuCisgICAgaWYgWyAteiAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCIgXTsgdGhlbgorICAgICAgICBzZXR1cF9wYXRoX3ZhcnMKKyAgICAgICAgQlVJTERfQVJDSD1gdW5hbWUgLW1gCisgICAgICAgIEJVSUxEX09TPWB1bmFtZSB8IHRyICdbQS1aXScgJ1thLXpdJ2AKKyAgICAgICAgQlVJTERfU1lTPSIkQlVJTERfQVJDSC0kQlVJTERfT1MiCisKKyAgICAgICAgT0VDT1JFX05BVElWRV9TWVNST09UPSRPRV9UTVBESVIvc3lzcm9vdHMvJEJVSUxEX1NZUworICAgIGZpIAorCisgICAgIyBTb21lIHJlY2lwZXMgc3RvcmUgdGhlIEJJT1MgdW5kZXIgJE9FX1RNUERJUi9zeXNyb290cy8kTUFDSElORSwKKyAgICAjIG5vdyBkZWZpbmVkIGFzIE9FQ09SRV9NQUNISU5FX1NZU1JPT1QuIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNlYXJjaGluZworICAgICMgQklPUywgVkdBIEJJT1MgYW5kIGtleW1hcHMuCisgICAgaWYgWyAteiAiJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QiIF07IHRoZW4KKyAgICAgICAgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVD0kT0VfVE1QRElSL3N5c3Jvb3RzLyRNQUNISU5FCisgICAgZmkKK30KKworIyBMb2NhdGUgYSByb290ZnMgaW1hZ2UgdG8gYm9vdCB3aGljaCBtYXRjaGVzIG91ciBleHBlY3RlZAorIyBtYWNoaW5lIGFuZCBmc3R5cGUuIAorZmluZGltYWdlKCkgeworICAgIHdoZXJlPSQxCisgICAgbWFjaGluZT0kMgorICAgIGV4dGVuc2lvbj0kMworCisgICAgIyBTb3J0IHJvb3RmcyBjYW5kaWRhdGVzIGJ5IG1vZGlmaWNhdGlvbiB0aW1lIC0gdGhlIG1vc3QKKyAgICAjIHJlY2VudGx5IGNyZWF0ZWQgb25lIGlzIHRoZSBvbmUgd2UgbW9zdCBsaWtlbHkgd2FudCB0byBib290LgorICAgIGZpbGVuYW1lPWBscyAtdDEgJHdoZXJlLyotaW1hZ2UqJG1hY2hpbmUuJGV4dGVuc2lvbiAyPi9kZXYvbnVsbCB8IGhlYWQgLW4xYAorICAgIGlmIFsgIngkZmlsZW5hbWUiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgIFJPT1RGUz0kZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgYSAkbWFjaGluZSByb290ZnMgaW1hZ2UgaW4gJHdoZXJlLiIKKyAgICBleGl0IDEKK30KKworaWYgWyAtZSAiJFJPT1RGUyIgLWEgLXogIiRGU1RZUEUiIF07IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbgorICAgIEVYVD1gZWNobyAkUk9PVEZTIHwgYXdrIC1GIC4gJ3sgcHJpbnQgXCRORiB9J2AKKyAgICBpZiBbICJ4JEVYVCIgPSAieGV4dDIiIC1vICJ4JEVYVCIgPSAieGV4dDMiIC1vIFwKKyAgICAgICAgICAieCRFWFQiID0gInhqZmZzMiIgLW8gIngkRVhUIiA9ICJ4YnRyZnMiIC1vIFwKKyAgICAgICAgICAieCRFWFQiID0gInhleHQ0IiBdOyB0aGVuCisgICAgICAgIEZTVFlQRT0kRVhUCisgICAgZWxzZQorICAgICAgICBlY2hvICJOb3RlOiBVbmFibGUgdG8gZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gZXh0ZW5zaW9uIGZvciAkUk9PVEZTIgorICAgICAgICBlY2hvICJXZSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBGU1RZUEUgZm9yICRNQUNISU5FIgorICAgICAgICAjIC4uLndoaWNoIGlzIGRvbmUgZnVydGhlciBiZWxvdy4uLgorICAgIGZpCitmaQorCitpZiBbIC16ICIkS0VSTkVMIiAtYSAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIHNldHVwX3BhdGhfdmFycyAxCisgICAgZXZhbCBrZXJuZWxfZmlsZT1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfS0VSTkVMCisgICAgS0VSTkVMPSRERVBMT1lfRElSX0lNQUdFLyRrZXJuZWxfZmlsZQorCisgICAgaWYgWyAteiAiJEtFUk5FTCIgXTsgdGhlbgorICAgICAgICBlcnJvciAiVW5hYmxlIHRvIGRldGVybWluZSBkZWZhdWx0IGtlcm5lbCBmb3IgTUFDSElORSBbJE1BQ0hJTkVdIgorICAgIGZpCitmaQorIyBLRVJORUwgaXMgbm93IHNldCBmb3IgYWxsIGNhc2VzCisKK2lmIFsgLXogIiRGU1RZUEUiIF07IHRoZW4KKyAgICBldmFsIEZTVFlQRT1cJCR7bWFjaGluZTJ9X0RFRkFVTFRfRlNUWVBFCisKKyAgICBpZiBbIC16ICIkRlNUWVBFIiBdOyB0aGVuCisgICAgICAgIGVycm9yICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgZnN0eXBlIGZvciBNQUNISU5FIFskTUFDSElORV0iCisgICAgZmkKK2ZpCisKKyMgRlNUWVBFIGlzIG5vdyBzZXQgZm9yIGFsbCBjYXNlcworCisjIEhhbmRsZSBjYXNlcyB3aGVyZSBhIFJPT1RGUyB0eXBlIGlzIGdpdmVuIGluc3RlYWQgb2YgYSBmaWxlbmFtZSwgZS5nLgorIyBjb3JlLWltYWdlLXNhdG8KK2lmIFsgIiRMQVpZX1JPT1RGUyIgPSAidHJ1ZSIgXTsgdGhlbgorICAgIHNldHVwX3BhdGhfdmFycyAxCisgICAgZWNobyAiQXNzdW1pbmcgJFJPT1RGUyByZWFsbHkgbWVhbnMgJERFUExPWV9ESVJfSU1BR0UvJFJPT1RGUy0kTUFDSElORS4kRlNUWVBFIgorICAgIGlmIFsgIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIngkRlNUWVBFIiA9ICJ4aGRkZGlyZWN0IiBdOyB0aGVuCisgICAgICAgIFZNPSRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRQorICAgIGVsc2UKKyAgICAgICAgUk9PVEZTPSRERVBMT1lfRElSX0lNQUdFLyRST09URlMtJE1BQ0hJTkUuJEZTVFlQRQorICAgIGZpCitmaQorCitpZiBbIC16ICIkUk9PVEZTIiAtYSAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIHNldHVwX3BhdGhfdmFycyAxCisgICAgVD0kREVQTE9ZX0RJUl9JTUFHRQorICAgIGV2YWwgcm9vdGZzX2xpc3Q9XCQke21hY2hpbmUyfV9ERUZBVUxUX1JPT1RGUworICAgIGZpbmRpbWFnZSAkVCAkTUFDSElORSAkRlNUWVBFCisKKyAgICBpZiBbIC16ICIkUk9PVEZTIiBdOyB0aGVuCisgICAgICAgIGVycm9yICJVbmFibGUgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgcm9vdGZzIGZvciBNQUNISU5FIFskTUFDSElORV0iCisgICAgZmkKK2ZpCisjIFJPT1RGUyBpcyBub3cgc2V0IGZvciBhbGwgY2FzZXMsIG5vdyBleHBhbmQgaXQgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aCwgaXQgc2hvdWxkIGV4aXN0IGF0IHRoaXMgcG9pbnQKKworUk9PVEZTPWByZWFkbGluayAtZiAkUk9PVEZTYAorCitlY2hvICIiCitlY2hvICJDb250aW51aW5nIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiIKK2lmIFsgIngkRlNUWVBFIiAhPSAieHZtZGsiIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRpbWciIC1hICJ4JEZTVFlQRSIgIT0gInhoZGRkaXJlY3QiIF07IHRoZW4KKyAgICBlY2hvICJLRVJORUw6IFskS0VSTkVMXSIKKyAgICBlY2hvICJST09URlM6IFskUk9PVEZTXSIKK2Vsc2UKKyAgICBlY2hvICJWTURLOiAgIFskVk1dIgorZmkKK2VjaG8gIkZTVFlQRTogWyRGU1RZUEVdIgorCitzZXR1cF9zeXNyb290CisjIE9FQ09SRV9OQVRJVkVfU1lTUk9PVCBhbmQgT0VDT1JFX01BQ0hJTkVfU1lTUk9PVCBhcmUgbm93IHNldCBmb3IgYWxsIGNhc2VzCisKK0lOVEVSTkFMX1NDUklQVD0iJDAtaW50ZXJuYWwiCitpZiBbICEgLWYgIiRJTlRFUk5BTF9TQ1JJUFQiIC1vICEgLXIgIiRJTlRFUk5BTF9TQ1JJUFQiIF07IHRoZW4KK0lOVEVSTkFMX1NDUklQVD1gd2hpY2ggcnVucWVtdS1pbnRlcm5hbGAKK2ZpCisKKyMgU3BlY2lmeSBkaXJlY3RvcnkgZm9yIEJJT1MsIFZHQSBCSU9TIGFuZCBrZXltYXBzCitpZiBbICEgLXogIiRDVVNUT01CSU9TRElSIiBdOyB0aGVuCisgICAgaWYgWyAtZCAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgorICAgICAgICBlY2hvICJBc3N1bWluZyBiaW9zZGlyIGlzICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtTCAkT0VDT1JFX05BVElWRV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgIGVsaWYgWyAtZCAiJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiIF07IHRoZW4KKyAgICAgICAgZWNobyAiQXNzdW1pbmcgYmlvc2RpciBpcyAkT0VDT1JFX01BQ0hJTkVfU1lTUk9PVC8kQ1VTVE9NQklPU0RJUiIKKyAgICAgICAgU0NSSVBUX1FFTVVfT1BUPSIkU0NSSVBUX1FFTVVfT1BUIC1MICRPRUNPUkVfTUFDSElORV9TWVNST09ULyRDVVNUT01CSU9TRElSIgorICAgIGVsc2UKKyAgICAgICAgaWYgWyAhIC1kICIkQ1VTVE9NQklPU0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiQ3VzdG9tIEJJT1MgZGlyZWN0b3J5IG5vdCBmb3VuZC4gVHJpZWQ6ICRDVVNUT01CSU9TRElSIgorICAgICAgICAgICAgZWNobyAiYW5kICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgICAgICBlY2hvICJhbmQgJE9FQ09SRV9NQUNISU5FX1NZU1JPT1QvJENVU1RPTUJJT1NESVIiCisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIkFzc3VtaW5nIGJpb3NkaXIgaXMgJENVU1RPTUJJT1NESVIiCisgICAgICAgIFNDUklQVF9RRU1VX09QVD0iJFNDUklQVF9RRU1VX09QVCAtTCAkQ1VTVE9NQklPU0RJUiIKKyAgICBmaQorZmkKKworLiAkSU5URVJOQUxfU0NSSVBUCitleGl0ICQ/CmRpZmYgLS1naXQgYS9zY3JpcHRzL3J1bnFlbXUtYWRkcHRhYmxlMmltYWdlIGIvc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDE5NWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZQpAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKworIyBBZGQgYSBwYXJ0aW9uIHRhYmxlIHRvIGFuIGV4dDIgaW1hZ2UgZmlsZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0lNQUdFPSQxCitJTUFHRU9VVD0kMgorCitlY2hvICRJTUFHRQorZWNobyAkSU1BR0VPVVQKKworc2l6ZT1gbHMgLWwgJElNQUdFIHwgYXdrICd7IHByaW50ICQ1fSdgCitzaXplMj1gZXhwciAkc2l6ZSAvIDUxMiAvIDE2IC8gNjNgCisKK2VjaG8gJHNpemUKK2VjaG8gJHNpemUyCisKKyMgTUJSIFNpemUgPSA1MTIgKiA2MyBieXRlcworZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUFHRU9VVCBjb3VudD02MworCitlY2hvICJ4IiA+IC90bXAvZmRpc2suY21kcworZWNobyAiYyIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIxMDI0IiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gImgiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiMTYiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiciIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJuIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gInAiID4+IC90bXAvZmRpc2suY21kcworZWNobyAiMSIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICIxIiA+PiAvdG1wL2ZkaXNrLmNtZHMKK2VjaG8gIiRzaXplMiIgPj4gL3RtcC9mZGlzay5jbWRzCitlY2hvICJ3IiA+PiAvdG1wL2ZkaXNrLmNtZHMKKworL3NiaW4vZmRpc2sgJElNQUdFT1VUIDwgL3RtcC9mZGlzay5jbWRzCitjYXQgJElNQUdFID4+ICRJTUFHRU9VVApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMgYi9zY3JpcHRzL3J1bnFlbXUtZXhwb3J0LXJvb3RmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MGFiMjAxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9ydW5xZW11LWV4cG9ydC1yb290ZnMKQEAgLTAsMCArMSwxNjMgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCit1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydH0gPG5mcy1leHBvcnQtZGlyPiIKK30KKworaWYgWyAkIyAhPSAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworaWYgW1sgIiQxIiAhPSAic3RhcnQiICYmICIkMSIgIT0gInN0b3AiICYmICIkMSIgIT0gInJlc3RhcnQiIF1dOyB0aGVuCisJZWNobyAiVW5rbm93biBjb21tYW5kICckMSciCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK2lmIFsgISAtZCAiJDIiIF07IHRoZW4KKwllY2hvICJFcnJvcjogJyQyJyBkb2VzIG5vdCBleGlzdCIKKwl1c2FnZQorCWV4aXQgMQorZmkKKyMgRW5zdXJlIHRoZSBuZnMtZXhwb3J0LWRpciBpcyBhbiBhYnNvbHV0ZSBwYXRoCitORlNfRVhQT1JUX0RJUj0kKGNkICIkMiIgJiYgcHdkKQorCitTWVNST09UX1NFVFVQX1NDUklQVD1gd2hpY2ggb2UtZmluZC1uYXRpdmUtc3lzcm9vdCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkU1lTUk9PVF9TRVRVUF9TQ1JJUFQiIF07IHRoZW4KKwllY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdGhlIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3Qgc2NyaXB0IgorCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB5b3VyIGJ1aWxkIGVudmlyb25tZW50IHNldHVwIHNjcmlwdD8iCisJZXhpdCAxCitmaQorLiAkU1lTUk9PVF9TRVRVUF9TQ1JJUFQKKworaWYgWyAhIC1lICIkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluL3VuZnNkIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBmaW5kIHVuZnNkIGJpbmFyeSBpbiAkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluLyIKKworCWlmIFsgIngkT0VDT1JFX0RJU1RST19WRVJTSU9OIiA9ICJ4IiBdOyB0aGVuCisJCWVjaG8gIkhhdmUgeW91IHJ1biAnYml0YmFrZSBtZXRhLWlkZS1zdXBwb3J0Jz8iCisJZWxzZQorCQllY2hvICJUaGlzIHNob3VsZG4ndCBoYXBwZW4gLSBzb21ldGhpbmcgaXMgbWlzc2luZyBmcm9tIHlvdXIgdG9vbGNoYWluIGluc3RhbGxhdGlvbiIKKwlmaQorCWV4aXQgMQorZmkKKworaWYgWyAhIC1kIH4vLnJ1bnFlbXUtc2RrIF07IHRoZW4KKwlta2RpciAtcCB+Ly5ydW5xZW11LXNkaworZmkKKworTkZTX0lOU1RBTkNFPSR7TkZTX0lOU1RBTkNFOj0wfQorRVhQT1JUUz1+Ly5ydW5xZW11LXNkay9leHBvcnRzJE5GU19JTlNUQU5DRQorUk1UQUI9fi8ucnVucWVtdS1zZGsvcm10YWIkTkZTX0lOU1RBTkNFCitORlNQSUQ9fi8ucnVucWVtdS1zZGsvbmZzJE5GU19JTlNUQU5DRS5waWQKK01PVU5UUElEPX4vLnJ1bnFlbXUtc2RrL21vdW50JE5GU19JTlNUQU5DRS5waWQKKworUFNFVURPX09QVFM9Ii1QICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyIgorUFNFVURPX0xPQ0FMU1RBVEVESVI9IiRORlNfRVhQT1JUX0RJUi8uLi8kKGJhc2VuYW1lICRORlNfRVhQT1JUX0RJUikucHNldWRvX3N0YXRlIgorZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSCisKK2lmIFsgISAtZCAiJFBTRVVET19MT0NBTFNUQVRFRElSIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6ICRQU0VVRE9fTE9DQUxTVEFURURJUiBkb2VzIG5vdCBleGlzdC4iCisJZWNobyAiRGlkIHlvdSBjcmVhdGUgdGhlIGV4cG9ydCBkaXJlY3RvcnkgdXNpbmcgcnVucWVtdS1leHRyYWN0LXNkaz8iCisJZXhpdCAxCQorZmkKKworIyBycGMubW91bnRkIFJQQyBwb3J0CitORlNfTU9VTlRQUk9HPSRbIDIxMTExICsgJE5GU19JTlNUQU5DRSBdCisjIHJwYy5uZnNkIFJQQyBwb3J0CitORlNfTkZTUFJPRz0kWyAxMTExMSArICRORlNfSU5TVEFOQ0UgXQorIyBORlMgcG9ydCBudW1iZXIKK05GU19QT1JUPSRbIDMwNDkgKyAyICogJE5GU19JTlNUQU5DRSBdCisjIG1vdW50ZCBwb3J0IG51bWJlcgorTU9VTlRfUE9SVD0kWyAzMDQ4ICsgMiAqICRORlNfSU5TVEFOQ0UgXQorCisjIyBGb3IgZGVidWdnaW5nIHlvdSB3b3VsZCBhZGRpdGlvbmFsbHkgYWRkCisjIyAtLWRlYnVnIGFsbAorVU5GU0RfT1BUUz0iLXAgLU4gLWkgJE5GU1BJRCAtZSAkRVhQT1JUUyAteCAkTkZTX05GU1BST0cgLW4gJE5GU19QT1JUIC15ICRORlNfTU9VTlRQUk9HIC1tICRNT1VOVF9QT1JUIgorCisjIFNldHVwIHRoZSBleHBvcnRzIGZpbGUKK2lmIFsgIiQxIiA9ICJzdGFydCIgXTsgdGhlbgorCWVjaG8gIkNyZWF0aW5nIGV4cG9ydHMgZmlsZS4uLiIKKwllY2hvICIkTkZTX0VYUE9SVF9ESVIgKHJ3LGFzeW5jLG5vX3Jvb3Rfc3F1YXNoLG5vX2FsbF9zcXVhc2gsaW5zZWN1cmUpIiA+ICRFWFBPUlRTCitmaQorCisjIFNlZSBob3cgd2Ugd2VyZSBjYWxsZWQuCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJUE9SVE1BUF9SVU5OSU5HPWBwcyAtZWYgfCBncmVwIHBvcnRtYXAgfCBncmVwIC12IGdyZXBgCisJUlBDQklORF9SVU5OSU5HPWBwcyAtZWYgfCBncmVwIHJwY2JpbmQgfCBncmVwIC12IGdyZXBgCisJaWYgW1sgIngkUE9SVE1BUF9SVU5OSU5HIiA9ICJ4IiAmJiAieCRSUENCSU5EX1JVTk5JTkciID0gIngiIF1dOyB0aGVuCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJCWVjaG8gIkVycm9yOiBuZWl0aGVyIHJwY2JpbmQgbm9yIHBvcnRtYXAgYXBwZWFyIHRvIGJlIHJ1bm5pbmciCisJCWVjaG8gIlBsZWFzZSBpbnN0YWxsIGFuZCBzdGFydCBvbmUgb2YgdGhlc2Ugc2VydmljZXMgZmlyc3QiCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJCWVjaG8gIlRpcDogZm9yIHJlY2VudCBVYnVudHUgaG9zdHMsIHJ1bjoiCisJCWVjaG8gIiAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgcnBjYmluZCIKKwkJZWNobyAiVGhlbiBhZGQgT1BUSU9OUz1cIi1pIC13XCIgIHRvIC9ldGMvZGVmYXVsdC9ycGNiaW5kIGFuZCBydW4iCisJCWVjaG8gIiAgc3VkbyBzZXJ2aWNlIHBvcnRtYXAgcmVzdGFydCIKKworCQlleGl0IDEKKwlmaQorCisJZWNobyAiU3RhcnRpbmcgVXNlciBNb2RlIG5mc2QiCisJZWNobyAiICAkUFNFVURPICRQU0VVRE9fT1BUUyAkT0VDT1JFX05BVElWRV9TWVNST09UL3Vzci9zYmluL3VuZnNkICRVTkZTRF9PUFRTIgorCSRQU0VVRE8gJFBTRVVET19PUFRTICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NiaW4vdW5mc2QgJFVORlNEX09QVFMKKwlpZiBbICEgJD8gPSAwIF07IHRoZW4KKwkJZWNobyAiRXJyb3Igc3RhcnRpbmcgbmZzZCIKKwkJZXhpdCAxCisJZmkKKwkjIENoZWNrIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHN0YXJ0ZWQgb2suCisJaWYgWyAhIC1mICRORlNQSUQgXTsgdGhlbgorCQllY2hvICJycGMubmZzZCBkaWQgbm90IHN0YXJ0IGNvcnJlY3RseSIKKwkJZXhpdCAxCisJZmkKKwlwcyAtZnAgYGNhdCAkTkZTUElEYCA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwKKwlpZiBbICEgJD8gPSAwIF07IHRoZW4KKwkJZWNobyAicnBjLm5mc2QgZGlkIG5vdCBzdGFydCBjb3JyZWN0bHkiCisJCWV4aXQgMQorCWZpCisJZWNobyAiICIKKwllY2hvICJPbiB5b3VyIHRhcmdldCBwbGVhc2UgcmVtZW1iZXIgdG8gYWRkIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgTkZTIgorCWVjaG8gIm5mc3Jvb3Q9SVBfQUREUkVTUzokTkZTX0VYUE9SVF9ESVIsbmZzdmVycz0zLHBvcnQ9JE5GU0RfUE9SVCxtb3VudHByb2c9JE1PVU5URF9SUENQT1JULG5mc3Byb2c9JE5GU0RfUlBDUE9SVCx1ZHAsbW91bnRwb3J0PSRNT1VOVERfUE9SVCIKKwk7OworICBzdG9wKQorCWlmIFsgLWYgIiRORlNQSUQiIF07IHRoZW4KKwkJZWNobyAiU3RvcHBpbmcgcnBjLm5mc2QiCisJCWtpbGwgYGNhdCAkTkZTUElEYAorCQlybSAtZiAkTkZTUElECisJZWxzZQorCQllY2hvICJObyBQSUQgZmlsZSwgbm90IHN0b3BwaW5nIHJwYy5uZnNkIgorCWZpCisJaWYgWyAtZiAiJEVYUE9SVFMiIF07IHRoZW4KKwkJZWNobyAiUmVtb3ZpbmcgZXhwb3J0cyBmaWxlIgorCQlybSAtZiAkRVhQT1JUUworCWZpCisJOzsKKyAgcmVzdGFydCkKKwkkMCBzdG9wICRORlNfRVhQT1JUX0RJUgorCSQwIHN0YXJ0ICRORlNfRVhQT1JUX0RJUiAKKwlpZiBbICEgJD8gPSAwIF07IHRoZW4KKwkJZXhpdCAxCisJZmkKKwk7OworICAqKQorCWVjaG8gIiQwIHtzdGFydHxzdG9wfHJlc3RhcnR9IDxuZnMtZXhwb3J0LWRpcj4iCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsgYi9zY3JpcHRzL3J1bnFlbXUtZXh0cmFjdC1zZGsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzJkZGQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcnVucWVtdS1leHRyYWN0LXNkawpAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL2Jhc2gKKyMKKyMgVGhpcyB1dGlsaXR5IGV4dHJhY3RzIGFuIFNESyBpbWFnZSB0YXJiYWxsIHVzaW5nIHBzZXVkbywgYW5kIHN0b3JlcworIyB0aGUgcHNldWRvIGRhdGFiYXNlIGluIHZhci9wc2V1ZG8gd2l0aGluIHRoZSByb290ZnMuIElmIHlvdSB3YW50IHRvCisjIGJvb3QgUUVNVSB1c2luZyBhbiBuZnNyb290LCB5b3UgKm11c3QqIHVzZSB0aGlzIHNjcmlwdCB0byBjcmVhdGUgdGhlCisjIHJvb3RmcyB0byBlbnN1cmUgaXQgaXMgZG9uZSBjb3JyZWN0bHkgd2l0aCBwc2V1ZG8uCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBJbnRlbCBDb3JwLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitmdW5jdGlvbiB1c2FnZSgpIHsKKwllY2hvICJVc2FnZTogJDAgPGltYWdlLXRhcmJhbGw+IDxleHRyYWN0LWRpcj4iCit9CisKK2lmIFsgJCMgLW5lIDIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitTWVNST09UX1NFVFVQX1NDUklQVD1gd2hpY2ggb2UtZmluZC1uYXRpdmUtc3lzcm9vdCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkU1lTUk9PVF9TRVRVUF9TQ1JJUFQiIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogVW5hYmxlIHRvIGZpbmQgdGhlIG9lLWZpbmQtbmF0aXZlLXN5c3Jvb3Qgc2NyaXB0IgorICAgIGVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvIHNvdXJjZSB5b3VyIGJ1aWxkIHN5c3RlbSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQ/IgorICAgIGV4aXQgMQorZmkKKy4gJFNZU1JPT1RfU0VUVVBfU0NSSVBUCitQU0VVRE9fT1BUUz0iLVAgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IiCisKK1JPT1RGU19UQVJCQUxMPSQxCitTREtfUk9PVEZTX0RJUj0kMgorCitpZiBbICEgLWUgIiRST09URlNfVEFSQkFMTCIgXTsgdGhlbgorICAgCWVjaG8gIkVycm9yOiBzZGsgdGFyYmFsbCAnJFJPT1RGU19UQVJCQUxMJyBkb2VzIG5vdCBleGlzdCIKKyAgIAl1c2FnZQorICAgCWV4aXQgMQorZmkKKworIyBDb252ZXJ0IFNES19ST09URlNfRElSIHRvIGEgZnVsbCBwYXRobmFtZQoraWYgW1sgJHtTREtfUk9PVEZTX0RJUjowOjF9ICE9ICIvIiBdXTsgdGhlbgorCVNES19ST09URlNfRElSPSQocmVhZGxpbmsgLWYgJChwd2QpLyRTREtfUk9PVEZTX0RJUikKK2ZpCisKK1RBUl9PUFRTPSIiCitpZiBbWyAiJFJPT1RGU19UQVJCQUxMIiA9fiB0YXJcLmJ6MiQgXV07IHRoZW4KKwlUQVJfT1BUUz0iLS1udW1lcmljLW93bmVyIC14amYiCitmaQoraWYgW1sgIiRST09URlNfVEFSQkFMTCIgPX4gdGFyXC5neiQgXV07IHRoZW4KKwlUQVJfT1BUUz0iLS1udW1lcmljLW93bmVyIC14emYiCitmaQoraWYgW1sgIiRST09URlNfVEFSQkFMTCIgPX4gXC50YXIkIF1dOyB0aGVuCisJVEFSX09QVFM9Ii0tbnVtZXJpYy1vd25lciAteGYiCitmaQoraWYgWyAteiAiJFRBUl9PUFRTIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFVuYWJsZSB0byBkZXRlcm1pbmUgc2RrIHRhcmJhbGwgZm9ybWF0IgorCWVjaG8gIkFjY2VwdGVkIHR5cGVzOiAudGFyIC8gLnRhci5neiAvIC50YXIuYnoyIgorCWV4aXQgMQorZmkKKworaWYgWyAhIC1kICIkU0RLX1JPT1RGU19ESVIiIF07IHRoZW4KKwllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJFNES19ST09URlNfRElSIgorCW1rZGlyIC1wICIkU0RLX1JPT1RGU19ESVIiCitmaQorCitwc2V1ZG9fc3RhdGVfZGlyPSIkU0RLX1JPT1RGU19ESVIvLi4vJChiYXNlbmFtZSAiJFNES19ST09URlNfRElSIikucHNldWRvX3N0YXRlIgorcHNldWRvX3N0YXRlX2Rpcj0iJChyZWFkbGluayAtZiAkcHNldWRvX3N0YXRlX2RpcikiCisKK2lmIFsgLWUgIiRwc2V1ZG9fc3RhdGVfZGlyIiBdOyB0aGVuCisJZWNobyAiRXJyb3I6ICRwc2V1ZG9fc3RhdGVfZGlyIGFscmVhZHkgZXhpc3RzISIKKwllY2hvICJQbGVhc2UgZGVsZXRlIHRoZSByb290ZnMgdHJlZSBhbmQgcHNldWRvIGRpcmVjdG9yeSBtYW51YWxseSIKKyAgICAgICAgZWNobyAiaWYgdGhpcyBpcyByZWFsbHkgd2hhdCB5b3Ugd2FudC4iCisJZXhpdCAxCitmaQorCitta2RpciAtcCAiJHBzZXVkb19zdGF0ZV9kaXIiCit0b3VjaCAiJHBzZXVkb19zdGF0ZV9kaXIvcHNldWRvLnBpZCIKK1BTRVVET19MT0NBTFNUQVRFRElSPSIkcHNldWRvX3N0YXRlX2RpciIKK2V4cG9ydCBQU0VVRE9fTE9DQUxTVEFURURJUgorCitlY2hvICJFeHRyYWN0aW5nIHJvb3RmcyB0YXJiYWxsIHVzaW5nIHBzZXVkby4uLiIKK2VjaG8gIiRQU0VVRE8gJFBTRVVET19PUFRTIHRhciAtQyBcIiRTREtfUk9PVEZTX0RJUlwiICRUQVJfT1BUUyBcIiRST09URlNfVEFSQkFMTFwiIgorJFBTRVVETyAkUFNFVURPX09QVFMgdGFyIC1DICIkU0RLX1JPT1RGU19ESVIiICRUQVJfT1BUUyAiJFJPT1RGU19UQVJCQUxMIgorCitESVJDSEVDSz1gbHMgLWwgIiRTREtfUk9PVEZTX0RJUiIgfCB3YyAtbGAKK2lmIFsgIiRESVJDSEVDSyIgLWx0IDUgXTsgdGhlbgorCWVjaG8gIldhcm5pbmc6IEkgZG9uJ3Qgc2VlIG1hbnkgZmlsZXMgaW4gJFNES19ST09URlNfRElSIgorCWVjaG8gIlBsZWFzZSBkb3VibGUtY2hlY2sgdGhlIGV4dHJhY3Rpb24gd29ya2VkIGFzIGludGVuZGVkIgorCWV4aXQgMAorZmkKKworZWNobyAiU0RLIGltYWdlIHN1Y2Nlc3NmdWxseSBleHRyYWN0ZWQgdG8gJFNES19ST09URlNfRElSIgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiL3NjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kM2IyN2JlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9ydW5xZW11LWdlbi10YXBkZXZzCkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENyZWF0ZSBhICJiYW5rIiBvZiB0YXAgbmV0d29yayBkZXZpY2VzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlCisjIHJ1bnFlbXUgc2NyaXB0LiBUaGlzIHNjcmlwdCBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCwgYW5kIHdpbGwKKyMgdXNlIHRoZSB0dW5jdGwgYmluYXJ5IGZyb20gdGhlIGJ1aWxkIHN5c3RlbSBzeXNyb290LiBOb3RlOiBtYW55IExpbnV4IAorIyBkaXN0cm9zIHRoZXNlIGRheXMgc3RpbGwgdXNlIGFuIG9sZGVyIHZlcnNpb24gb2YgdHVuY3RsIHdoaWNoIGRvZXMgbm90CisjIHN1cHBvcnQgdGhlIGdyb3VwIHBlcm1pc3Npb25zIG9wdGlvbiwgaGVuY2UgdGhlIG5lZWQgdG8gdXNlIHRoZSBidWlsZAorIyBzeXN0ZW0gcHJvdmlkZWQgdmVyc2lvbi4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnAuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworCWVjaG8gIlVzYWdlOiBzdWRvICQwIDx1aWQ+IDxnaWQ+IDxudW0+IDxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiIKKyAgICAgICAgZWNobyAiV2hlcmUgPHVpZD4gaXMgdGhlIG51bWVyaWMgdXNlciBpZCB0aGUgdGFwIGRldmljZXMgd2lsbCBiZSBvd25lZCBieSIKKwllY2hvICJXaGVyZSA8Z2lkPiBpcyB0aGUgbnVtZXJpYyBncm91cCBpZCB0aGUgdGFwIGRldmljZXMgd2lsbCBiZSBvd25lZCBieSIKKwllY2hvICI8bnVtPiBpcyB0aGUgbnVtYmVyIG9mIHRhcCBkZXZpY2VzIHRvIGNyZWF0ZSAoMCB0byByZW1vdmUgYWxsKSIKKwllY2hvICI8bmF0aXZlLXN5c3Jvb3QtYmFzZWRpcj4gaXMgdGhlIHBhdGggdG8gdGhlIGJ1aWxkIHN5c3RlbSdzIG5hdGl2ZSBzeXNyb290IgorCWV4aXQgMQorfQorCitpZiBbICRFVUlEIC1uZSAwIF07IHRoZW4KKwllY2hvICJFcnJvcjogVGhpcyBzY3JpcHQgbXVzdCBiZSBydW4gd2l0aCByb290IHByaXZpbGVnZXMiCisJZXhpdAorZmkKKworaWYgWyAkIyAtbmUgNCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IEluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIgorCXVzYWdlCitmaQorCitUVUlEPSQxCitHSUQ9JDIKK0NPVU5UPSQzCitTWVNST09UPSQ0CisKK1RVTkNUTD0kU1lTUk9PVC91c3IvYmluL3R1bmN0bAoraWYgW1sgISAteCAiJFRVTkNUTCIgfHwgLWQgIiRUVU5DVEwiIF1dOyB0aGVuCisJZWNobyAiRXJyb3I6ICRUVU5DVEwgaXMgbm90IGFuIGV4ZWN1dGFibGUiCisJdXNhZ2UKK2ZpCisKK1NDUklQVF9ESVI9YGRpcm5hbWUgJDBgCitSVU5RRU1VX0lGVVA9IiRTQ1JJUFRfRElSL3J1bnFlbXUtaWZ1cCIKK2lmIFsgISAteCAiJFJVTlFFTVVfSUZVUCIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0aGUgcnVucWVtdS1pZnVwIHNjcmlwdCBpbiAkU0NSSVBUX0RJUiIKKwlleGl0IDEKK2ZpCisKK0lGQ09ORklHPWB3aGljaCBpcCAyPiAvZGV2L251bGxgCitpZiBbIC16ICIkSUZDT05GSUciIF07IHRoZW4KKwkjIElzIGl0IGV2ZXIgYW55d2hlcmUgZWxzZT8KKwlJRkNPTkZJRz0vc2Jpbi9pcAorZmkKK2lmIFsgISAteCAiJElGQ09ORklHIiBdOyB0aGVuCisgICAgICAgZWNobyAiJElGQ09ORklHIGNhbm5vdCBiZSBleGVjdXRlZCIKKyAgICAgICBleGl0IDEKK2ZpCisKKyMgRW5zdXJlIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzbGF0ZQorZm9yIHRhcCBpbiBgJElGQ09ORklHIGxpbmsgfCBncmVwIHRhcCB8IGF3ayAneyBwcmludCBcJDIgfScgfCBzZWQgcy86Ly9gOyBkbworCWVjaG8gIk5vdGU6IERlc3Ryb3lpbmcgcHJlLWV4aXN0aW5nIHRhcCBpbnRlcmZhY2UgJHRhcC4uLiIKKwkkVFVOQ1RMIC1kICR0YXAKK2RvbmUKKworZWNobyAiQ3JlYXRpbmcgJENPVU5UIHRhcCBkZXZpY2VzIGZvciBVSUQ6ICRUVUlEIEdJRDogJEdJRC4uLiIKK2ZvciAoKGluZGV4PTA7IGluZGV4IDwgJENPVU5UOyBpbmRleCsrKSk7IGRvCisJZWNobyAiQ3JlYXRpbmcgdGFwJGluZGV4IgorCWlmdXA9YCRSVU5RRU1VX0lGVVAgJFRVSUQgJEdJRCAkU1lTUk9PVCAyPiYxYAorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICJFcnJvciBydW5uaW5nIHR1bmN0bDogJGlmdXAiCisJCWV4aXQgMQorCWZpCitkb25lCisKKyMgVGhlIHJ1bnFlbXUgc2NyaXB0IHdpbGwgY2hlY2sgZm9yIHRoaXMgZmlsZSwgYW5kIGlmIGl0IGV4aXN0cywKKyMgd2lsbCB1c2UgdGhlIGV4aXN0aW5nIGJhbmsgb2YgdGFwIGRldmljZXMgd2l0aG91dCBjcmVhdGluZworIyBhZGRpdGlvbmFsIG9uZXMgdmlhIHN1ZG8uCit0b3VjaCAvZXRjL3J1bnFlbXUtbm9zdWRvCmRpZmYgLS1naXQgYS9zY3JpcHRzL3J1bnFlbXUtaWZkb3duIGIvc2NyaXB0cy9ydW5xZW11LWlmZG93bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjY2Y2ZhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9ydW5xZW11LWlmZG93bgpAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vYmFzaAorIworIyBRRU1VIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzY3JpcHQgdG8gYnJpbmcgZG93biB0YXAgZGV2aWNlcy4gVGhpcworIyB1dGlsaXR5IG5lZWRzIHRvIGJlIHJ1biBhcyByb290LCBhbmQgd2lsbCB1c2UgdGhlIHR1bmN0bCBiaW5hcnkKKyMgZnJvbSB0aGUgbmF0aXZlIHN5c3Jvb3QuIAorIworIyBJZiB5b3UgZmluZCB5b3Vyc2VsZiBjYWxsaW5nIHRoaXMgc2NyaXB0IGEgbG90LCB5b3UgY2FuIGFkZCB0aGUKKyMgdGhlIGZvbGxvd2luZyB0byB5b3VyIC9ldGMvc3Vkb2VycyBmaWxlIHRvIGJlIGFibGUgdG8gcnVuIHRoaXMKKyMgY29tbWFuZCB3aXRob3V0IGVudGVyaW5nIHlvdXIgcGFzc3dvcmQgZWFjaCB0aW1lOgorIworIyA8bXktdXNlcm5hbWU+IEFMTD1OT1BBU1NXRDogL3BhdGgvdG8vcnVucWVtdS1pZnVwCisjIDxteS11c2VybmFtZT4gQUxMPU5PUEFTU1dEOiAvcGF0aC90by9ydW5xZW11LWlmZG93bgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMSBMaW51eCBGb3VuZGF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK3VzYWdlKCkgeworCWVjaG8gInN1ZG8gJChiYXNlbmFtZSAkMCkgPHRhcC1kZXY+IDxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiIKK30KKworaWYgWyAkRVVJRCAtbmUgMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IChydW5xZW11LWlmZG93bikgbXVzdCBiZSBydW4gd2l0aCByb290IHByaXZpbGVnZXMiCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1uZSAyIF07IHRoZW4KKwl1c2FnZQorCWV4aXQgMQorZmkKKworVEFQPSQxCitOQVRJVkVfU1lTUk9PVF9ESVI9JDIKKworVFVOQ1RMPSROQVRJVkVfU1lTUk9PVF9ESVIvdXNyL2Jpbi90dW5jdGwKK2lmIFsgISAtZSAiJFRVTkNUTCIgXTsgdGhlbgorCWVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0dW5jdGwgYmluYXJ5IGluICckTkFUSVZFX1NZU1JPT1RfRElSL3Vzci9iaW4nLCBwbGVhc2UgYml0YmFrZSBxZW11LWhlbHBlci1uYXRpdmUiCisJZXhpdCAxCitmaQorCiskVFVOQ1RMIC1kICRUQVAKKworIyBjbGVhbnVwIHRoZSByZW1haW5pbmcgaXB0YWJsZXMgcnVsZXMKK0lQVEFCTEVTPWB3aGljaCBpcHRhYmxlcyAyPiAvZGV2L251bGxgCitpZiBbICJ4JElQVEFCTEVTIiA9ICJ4IiBdOyB0aGVuCisJSVBUQUJMRVM9L3NiaW4vaXB0YWJsZXMKK2ZpCitpZiBbICEgLXggIiRJUFRBQkxFUyIgXTsgdGhlbgorCWVjaG8gIiRJUFRBQkxFUyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisJZXhpdCAxCitmaQorbj0kWyAoYGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgICogMikgKyAxIF0KK2Rlc3Q9JFsgKGBlY2hvICRUQVAgfCBzZWQgJ3MvdGFwLy8nYCAqIDIpICsgMiBdCiskSVBUQUJMRVMgLUQgUE9TVFJPVVRJTkcgLXQgbmF0IC1qIE1BU1FVRVJBREUgLXMgMTkyLjE2OC43LiRuLzMyCiskSVBUQUJMRVMgLUQgUE9TVFJPVVRJTkcgLXQgbmF0IC1qIE1BU1FVRVJBREUgLXMgMTkyLjE2OC43LiRkZXN0LzMyCmRpZmYgLS1naXQgYS9zY3JpcHRzL3J1bnFlbXUtaWZ1cCBiL3NjcmlwdHMvcnVucWVtdS1pZnVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1YTNkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3J1bnFlbXUtaWZ1cApAQCAtMCwwICsxLDEwNiBAQAorIyEvYmluL2Jhc2gKKyMKKyMgUUVNVSBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIHNjcmlwdC4gVGhpcyB1dGlsaXR5IG5lZWRzIHRvCisjIGJlIHJ1biBhcyByb290LCBhbmQgd2lsbCB1c2UgdGhlIHR1bmN0bCBiaW5hcnkgZnJvbSBhIG5hdGl2ZSBzeXNyb290LgorIyBOb3RlOiBtYW55IExpbnV4IGRpc3Ryb3MgdGhlc2UgZGF5cyBzdGlsbCB1c2UgYW4gb2xkZXIgdmVyc2lvbiBvZgorIyB0dW5jdGwgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgb3B0aW9uLCBoZW5jZQorIyB0aGUgbmVlZCB0byB1c2UgYnVpbGQgc3lzdGVtJ3MgdmVyc2lvbi4KKyMKKyMgSWYgeW91IGZpbmQgeW91cnNlbGYgY2FsbGluZyB0aGlzIHNjcmlwdCBhIGxvdCwgeW91IGNhbiBhZGQgdGhlCisjIHRoZSBmb2xsb3dpbmcgdG8geW91ciAvZXRjL3N1ZG9lcnMgZmlsZSB0byBiZSBhYmxlIHRvIHJ1biB0aGlzCisjIGNvbW1hbmQgd2l0aG91dCBlbnRlcmluZyB5b3VyIHBhc3N3b3JkIGVhY2ggdGltZToKKyMKKyMgPG15LXVzZXJuYW1lPiBBTEw9Tk9QQVNTV0Q6IC9wYXRoL3RvL3J1bnFlbXUtaWZ1cAorIyA8bXktdXNlcm5hbWU+IEFMTD1OT1BBU1NXRDogL3BhdGgvdG8vcnVucWVtdS1pZmRvd24KKyMKKyMgSWYgeW91J2QgbGlrZSB0byBjcmVhdGUgYSBiYW5rIG9mIHRhcCBkZXZpY2VzIGF0IG9uY2UsIHlvdSBzaG91bGQgdXNlCisjIHRoZSBydW5xZW11LWdlbi10YXBkZXZzIHNjcmlwdCBpbnN0ZWFkLiBJZiB0YXAgZGV2aWNlcyBhcmUgc2V0IHVwIHVzaW5nCisjIHRoYXQgc2NyaXB0LCB0aGUgcnVucWVtdSBzY3JpcHQgd2lsbCBuZXZlciBlbmQgdXAgY2FsbGluZyB0aGlzCisjIHNjcmlwdC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCit1c2FnZSgpIHsKKwllY2hvICJzdWRvICQoYmFzZW5hbWUgJDApIDx1aWQ+IDxnaWQ+IDxuYXRpdmUtc3lzcm9vdC1iYXNlZGlyPiIKK30KKworaWYgWyAkRVVJRCAtbmUgMCBdOyB0aGVuCisJZWNobyAiRXJyb3I6IFRoaXMgc2NyaXB0IChydW5xZW11LWlmdXApIG11c3QgYmUgcnVuIHdpdGggcm9vdCBwcml2aWxlZ2VzIgorCWV4aXQgMQorZmkKKworaWYgWyAkIyAtbmUgMyBdOyB0aGVuCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisKK1VTRVJJRD0iLXUgJDEiCitHUk9VUD0iLWcgJDIiCitOQVRJVkVfU1lTUk9PVF9ESVI9JDMKKworVFVOQ1RMPSROQVRJVkVfU1lTUk9PVF9ESVIvdXNyL2Jpbi90dW5jdGwKK2lmIFsgISAteCAiJFRVTkNUTCIgXTsgdGhlbgorICAgICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gZmluZCB0dW5jdGwgYmluYXJ5IGluICckTkFUSVZFX1NZU1JPT1RfRElSL3Vzci9iaW4nLCBwbGVhc2UgYml0YmFrZSBxZW11LWhlbHBlci1uYXRpdmUiCisJZXhpdCAxCitmaQorCitUQVA9YCRUVU5DVEwgLWIgJEdST1VQIDI+JjFgCitTVEFUVVM9JD8KK2lmIFsgJFNUQVRVUyAtbmUgMCBdOyB0aGVuCisjIElmIHR1bmN0bCAtZyBmYWlscywgdHJ5IHVzaW5nIHR1bmN0bCAtdSwgZm9yIG9sZGVyIGhvc3Qga2VybmVscyAKKyMgd2hpY2ggZG8gbm90IHN1cHBvcnQgdGhlIFRVTlNFVEdST1VQIGlvY3RsCisJVEFQPWAkVFVOQ1RMIC1iICRVU0VSSUQgMj4mMWAKKwlTVEFUVVM9JD8KKwlpZiBbICRTVEFUVVMgLW5lIDAgXTsgdGhlbgorCQllY2hvICJ0dW5jdGwgZmFpbGVkOiIKKwkJZXhpdCAxCisJZmkKK2ZpCisKK0lGQ09ORklHPWB3aGljaCBpcCAyPiAvZGV2L251bGxgCitpZiBbICJ4JElGQ09ORklHIiA9ICJ4IiBdOyB0aGVuCisJIyBiZXR0ZXIgdGhhbiBub3RoaW5nLi4uCisJSUZDT05GSUc9L3NiaW4vaXAKK2ZpCitpZiBbICEgLXggIiRJRkNPTkZJRyIgXTsgdGhlbgorCWVjaG8gIiRJRkNPTkZJRyBjYW5ub3QgYmUgZXhlY3V0ZWQiCisJZXhpdCAxCitmaQorCitJUFRBQkxFUz1gd2hpY2ggaXB0YWJsZXMgMj4gL2Rldi9udWxsYAoraWYgWyAieCRJUFRBQkxFUyIgPSAieCIgXTsgdGhlbgorCUlQVEFCTEVTPS9zYmluL2lwdGFibGVzCitmaQoraWYgWyAhIC14ICIkSVBUQUJMRVMiIF07IHRoZW4KKwllY2hvICIkSVBUQUJMRVMgY2Fubm90IGJlIGV4ZWN1dGVkIgorCWV4aXQgMQorZmkKKworbj0kWyAoYGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLydgICogMikgKyAxIF0KKyRJRkNPTkZJRyBhZGRyIGFkZCAxOTIuMTY4LjcuJG4vMzIgYnJvYWRjYXN0IDE5Mi4xNjguNy4yNTUgZGV2ICRUQVAKKyRJRkNPTkZJRyBsaW5rIHNldCBkZXYgJFRBUCB1cAorCitkZXN0PSRbIChgZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AgKiAyKSArIDIgXQorJElGQ09ORklHIHJvdXRlIGFkZCB0byAxOTIuMTY4LjcuJGRlc3QgZGV2ICRUQVAKKworIyBzZXR1cCBOQVQgZm9yIHRhcDAgaW50ZXJmYWNlIHRvIGhhdmUgaW50ZXJuZXQgYWNjZXNzIGluIFFFTVUKKyRJUFRBQkxFUyAtQSBQT1NUUk9VVElORyAtdCBuYXQgLWogTUFTUVVFUkFERSAtcyAxOTIuMTY4LjcuJG4vMzIKKyRJUFRBQkxFUyAtQSBQT1NUUk9VVElORyAtdCBuYXQgLWogTUFTUVVFUkFERSAtcyAxOTIuMTY4LjcuJGRlc3QvMzIKK2VjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCitlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi8kVEFQL3Byb3h5X2FycAorJElQVEFCTEVTIC1QIEZPUldBUkQgQUNDRVBUCisKK2VjaG8gJFRBUApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ydW5xZW11LWludGVybmFsIGIvc2NyaXB0cy9ydW5xZW11LWludGVybmFsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MjcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwKQEAgLTAsMCArMSw3MjQgQEAKKyMhL2Jpbi9iYXNoIC14CisKKyMgSGFuZGxlIHJ1bm5pbmcgT0UgaW1hZ2VzIHVuZGVyIHFlbXUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTEgTGludXggRm91bmRhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBDYWxsIHNldHRpbmc6CisjICAgUUVNVV9NRU1PUlkgKG9wdGlvbmFsKSAtIHNldCB0aGUgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgZW11YWx0ZWQgc3lzdGVtLgorIyAgIFNFUklBTF9MT0dGSUxFIChvcHRpb25hbCkgLSBsb2cgdGhlIHNlcmlhbCBwb3J0IG91dHB1dCB0byBhIGZpbGUKKyMKKyMgSW1hZ2Ugb3B0aW9uczoKKyMgICBNQUNISU5FIC0gdGhlIG1hY2hpbmUgdG8gcnVuCisjICAgRlNUWVBFIC0gdGhlIGltYWdlIHR5cGUgdG8gcnVuCisjICAgS0VSTkVMIC0gdGhlIGtlcm5lbCBpbWFnZSBmaWxlIHRvIHVzZQorIyAgIFJPT1RGUyAtIHRoZSBkaXNrIGltYWdlIGZpbGUgdG8gdXNlCisjCisKKworbWVtX3NpemU9LTEKKworI0dldCByaWQgb2YgPD4gYW5kIGdldCB0aGUgY29udGVudHMgb2YgZXh0cmEgcWVtdSBydW5uaW5nIHBhcmFtcworU0NSSVBUX1FFTVVfRVhUUkFfT1BUPWBlY2hvICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgfCBzZWQgLWUgJ3MvPC8vJyAtZSAncy8+Ly8nYAorI2lmIHVzZXIgc2V0IHFlbXUgbWVtb3J5LCBlZzogLW0gMjU2IGluIHFlbXUgZXh0cmEgcGFyYW1zLCB3ZSBuZWVkIHRvIGRvIHNvbWUgCisjIHZhbGlkYXRpb24gY2hlY2sKK21lbV9zZXQ9YGV4cHIgIiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQiIDogJy4qXCgtbVtbOnNwYWNlOl1dICpbMC05XSpcKSdgCitpZiBbICEgLXogIiRtZW1fc2V0IiBdIDsgdGhlbgorI0dldCBtZW1vcnkgc2V0dGluZyBzaXplIGZyb20gdXNlciBpbnB1dAorICBtZW1fc2l6ZT1gZWNobyAkbWVtX3NldCB8IHNlZCAncy8tbVtbOnNwYWNlOl1dICovLydgCitlbHNlCisgICAgY2FzZSAiJE1BQ0hJTkUiIGluCisgICAgICAgICJxZW11eDg2IikKKyAgICAgICAgICAgIG1lbV9zaXplPTI1NgorICAgICAgICAgICAgOzsKKyAgICAgICAgInFlbXV4ODYtNjQiKQorICAgICAgICAgICAgbWVtX3NpemU9MjU2CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdWFybSIpCisgICAgICAgICAgICBtZW1fc2l6ZT0xMjgKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11YXJtNjQiKQorICAgICAgICAgICAgbWVtX3NpemU9NTEyCisgICAgICAgICAgICA7OworICAgICAgICAicWVtdW1pY3JvYmxhemUiKQorICAgICAgICAgICAgbWVtX3NpemU9NjQKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11bWlwcyJ8InFlbXVtaXBzNjQiKQorICAgICAgICAgICAgbWVtX3NpemU9MjU2CisgICAgICAgICAgICA7OworICAgICAgICAicWVtdXBwYyIpCisgICAgICAgICAgICBtZW1fc2l6ZT0yNTYKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11c2g0IikKKyAgICAgICAgICAgIG1lbV9zaXplPTEwMjQKKyAgICAgICAgICAgIDs7CisgICAgICAgICJxZW11enlucSIpCisgICAgICAgICAgICBtZW1fc2l6ZT0xMDI0CisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgbWVtX3NpemU9NjQKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCitmaQorCisjIFFFTVVfTUVNT1JZIGhhcyAnTScgYXBwZW5kZWQgdG8gbWVtX3NpemUKK1FFTVVfTUVNT1JZPSIkbWVtX3NpemUiTQorCisjIEJ1ZyA0MzM6IHFlbXVhcm0gY2Fubm90IHVzZSA+IDI1NiBNQiBSQU0KK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11YXJtIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJG1lbV9zaXplIiAtbyAkbWVtX3NpemUgLWd0IDI1NiBdOyB0aGVuCisgICAgICAgIGVjaG8gIldBUk5JTkc6IHFlbXVhcm0gZG9lcyBub3Qgc3VwcG9ydCA+IDI1Nk0gb2YgUkFNLiIKKyAgICAgICAgZWNobyAiQ2hhbmdpbmcgUUVNVV9NRU1PUlkgdG8gZGVmYXVsdCBvZiAyNTZNLiIKKyAgICAgICAgUUVNVV9NRU1PUlk9IjI1Nk0iCisJbWVtX3NpemU9IjI1NiIKKyAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPWBlY2hvICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgfCBzZWQgLWUgInMvJG1lbV9zZXQvLW0gMjU2LyIgYAorICAgIGZpCitmaQorCisjIFdlIG5lZWQgdG8gc3BlY2lmeSAtbSA8bWVtX3NpemU+IHRvIG92ZXJjb21lIGEgYnVnIGluIHFlbXUgMC4xNC4wCisjIGh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L3VidW50dS8rc291cmNlL3FlbXUta3ZtLytidWcvNTg0NDgwCisKK2lmIFsgLXogIiRtZW1fc2V0IiBdIDsgdGhlbgorICBTQ1JJUFRfUUVNVV9FWFRSQV9PUFQ9IiRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLW0gJG1lbV9zaXplIgorZmkKKyMgVGhpcyBmaWxlIGlzIGNyZWF0ZWQgd2hlbiBydW5xZW11LWdlbi10YXBkZXZzIGNyZWF0ZXMgYSBiYW5rIG9mIHRhcAorIyBkZXZpY2VzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgc2hvdWxkIG5vdCBicmluZyB1cCBuZXcgb25lcyB1c2luZworIyBzdWRvLgorTk9TVURPX0ZMQUc9Ii9ldGMvcnVucWVtdS1ub3N1ZG8iCisKK1FFTVVJRlVQPWB3aGljaCBydW5xZW11LWlmdXAgMj4gL2Rldi9udWxsYAorUUVNVUlGRE9XTj1gd2hpY2ggcnVucWVtdS1pZmRvd24gMj4gL2Rldi9udWxsYAoraWYgWyAteiAiJFFFTVVJRlVQIiAtbyAhIC14ICIkUUVNVUlGVVAiIF07IHRoZW4KKyAgICAgICBlY2hvICJydW5xZW11LWlmdXAgY2Fubm90IGJlIGZvdW5kIG9yIGV4ZWN1dGVkIgorICAgICAgIGV4aXQgMQorZmkKK2lmIFsgLXogIiRRRU1VSUZET1dOIiAtbyAhIC14ICIkUUVNVUlGRE9XTiIgXTsgdGhlbgorICAgICAgIGVjaG8gInJ1bnFlbXUtaWZkb3duIGNhbm5vdCBiZSBmb3VuZCBvciBleGVjdXRlZCIKKyAgICAgICBleGl0IDEKK2ZpCisKK05GU1JVTk5JTkc9ImZhbHNlIgorCisjY2FwdHVyZSBvcmlnaW5hbCBzdHR5IHZhbHVlcworT1JJR19TVFRZPSQoc3R0eSAtZykKKworaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgorICAgIEtFUk5FTF9ORVRXT1JLX0NNRD0iaXA9ZGhjcCIKKyAgICBRRU1VX1RBUF9DTUQ9IiIKKyAgICBRRU1VX1VJX09QVElPTlM9Ii1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2Ugd2Fjb20tdGFibGV0IgorICAgIGlmIFsgIiRLVk1fQUNUSVZFIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iIgorICAgICAgICBEUk9PVD0iL2Rldi92ZGEiCisgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPXZpcnRpbyxmb3JtYXQ9cmF3IgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iIgorICAgICAgICBEUk9PVD0iL2Rldi9oZGEiCisgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgZmlsZT0kUk9PVEZTLGlmPWlkZSxmb3JtYXQ9cmF3IgorICAgIGZpCisKK2Vsc2UKKyAgICAgICAgYWNxdWlyZV9sb2NrKCkgeworICAgICAgICAgICAgbG9ja2ZpbGU9JDEKKyAgICAgICAgICAgIGlmIFsgLXogIiRsb2NrZmlsZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBtaXNzaW5nIGxvY2tmaWxlIGFyZyBwYXNzZWQgdG8gYWNxdWlyZV9sb2NrKCkiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIHRvdWNoICRsb2NrZmlsZS5sb2NrIDI+L2Rldi9udWxsCisgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICRsb2NrZmlsZS5sb2NrIGZhaWxlZCIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGV4ZWMgOD4kbG9ja2ZpbGUubG9jaworICAgICAgICAgICAgZmxvY2sgLW4gLXggOAorICAgICAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgZXhlYyA4PiYtCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIH0KKworICAgICAgICByZWxlYXNlX2xvY2soKSB7CisgICAgICAgICAgICBsb2NrZmlsZT0kMQorICAgICAgICAgICAgaWYgWyAteiAiJGxvY2tmaWxlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiRXJyb3I6IG1pc3NpbmcgbG9ja2ZpbGUgYXJnIHBhc3NlZCB0byByZWxlYXNlX2xvY2soKSIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgcm0gLWYgJGxvY2tmaWxlLmxvY2sKKyAgICAgICAgICAgIGV4ZWMgIDg+Ji0KKyAgICAgICAgfQorCisgICAgICAgIExPQ0tESVI9Ii90bXAvcWVtdS10YXAtbG9ja3MiCisgICAgICAgIGlmIFsgISAtZCAiJExPQ0tESVIiIF07IHRoZW4KKyAgICAgICAgICAgIG1rZGlyICRMT0NLRElSCisgICAgICAgICAgICBjaG1vZCA3NzcgJExPQ0tESVIKKyAgICAgICAgZmkKKworICAgICAgICBJRkNPTkZJRz1gd2hpY2ggaXAgMj4gL2Rldi9udWxsYAorICAgICAgICBpZiBbIC16ICIkSUZDT05GSUciIF07IHRoZW4KKyAgICAgICAgICAgIElGQ09ORklHPS9zYmluL2lwCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgISAteCAiJElGQ09ORklHIiBdOyB0aGVuCisgICAgICAgICAgICAgICBlY2hvICIkSUZDT05GSUcgY2Fubm90IGJlIGV4ZWN1dGVkIgorICAgICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgUE9TU0lCTEU9YCRJRkNPTkZJRyBsaW5rIHwgZ3JlcCAndGFwJyB8IGF3ayAne3ByaW50ICQyfScgfCBzZWQgLWUgJ3MvOi8vJyAtZSAncy9ALiovLydgCisgICAgICAgIFRBUD0iIgorICAgICAgICBMT0NLRklMRT0iIgorICAgICAgICBVU0VfUFJFQ09ORl9UQVA9Im5vIgorICAgICAgICBmb3IgdGFwIGluICRQT1NTSUJMRTsgZG8KKyAgICAgICAgICAgIExPQ0tGSUxFPSIkTE9DS0RJUi8kdGFwIgorICAgICAgICAgICAgaWYgWyAtZSAiJExPQ0tGSUxFLnNraXAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJGb3VuZCAkTE9DS0ZJTEUuc2tpcCwgc2tpcHBpbmcgJHRhcCIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIkFjcXVpcmluZyBsb2NrZmlsZSBmb3IgJHRhcC4uLiIKKyAgICAgICAgICAgIGFjcXVpcmVfbG9jayAkTE9DS0ZJTEUKKyAgICAgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICAgICAgICAgIFRBUD0kdGFwCisgICAgICAgICAgICAgICAgVVNFX1BSRUNPTkZfVEFQPSJ5ZXMiCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKworICAgICAgICBpZiBbICIkVEFQIiA9ICIiIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgLWUgIiROT1NVRE9fRkxBRyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yOiBUaGVyZSBhcmUgbm8gYXZhaWxhYmxlIHRhcCBkZXZpY2VzIHRvIHVzZSBmb3IgbmV0d29ya2luZywiCisgICAgICAgICAgICAgICAgZWNobyAiYW5kIEkgc2VlICROT1NVRE9fRkxBRyBleGlzdHMsIHNvIEkgYW0gbm90IGdvaW5nIHRvIHRyeSBjcmVhdGluZyIKKyAgICAgICAgICAgICAgICBlY2hvICJhIG5ldyBvbmUgd2l0aCBzdWRvLiIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgIEdST1VQSUQ9YGlkIC1nYAorICAgICAgICAgICAgVVNFUklEPWBpZCAtdWAKKyAgICAgICAgICAgIGVjaG8gIlNldHRpbmcgdXAgdGFwIGludGVyZmFjZSB1bmRlciBzdWRvIgorICAgICAgICAgICAgIyBSZWRpcmVjdCBzdGRlcnIgc2luY2Ugd2UgY291bGQgc2VlIGEgTERfUFJFTE9BRCB3YXJuaW5nIGhlcmUgaWYgcHNldWRvIGlzIGxvYWRlZAorICAgICAgICAgICAgIyBidXQgaW5hY3RpdmUuIFRoaXMgbG9va3Mgc2NhcnkgYnV0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICB0YXA9YHN1ZG8gJFFFTVVJRlVQICRVU0VSSUQgJEdST1VQSUQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAyPiAvZGV2L251bGxgCisgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIFJlLXJ1biBzdGFuZGFsb25lIHRvIHNlZSB2ZXJib3NlIGVycm9ycworICAgICAgICAgICAgICAgIHN1ZG8gJFFFTVVJRlVQICRVU0VSSUQgJEdST1VQSUQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVAorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgTE9DS0ZJTEU9IiRMT0NLRElSLyR0YXAiCisgICAgICAgICAgICBlY2hvICJBY3F1aXJpbmcgbG9ja2ZpbGUgZm9yICR0YXAuLi4iCisgICAgICAgICAgICBhY3F1aXJlX2xvY2sgJExPQ0tGSUxFCisgICAgICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBUQVA9JHRhcAorICAgICAgICAgICAgZmkgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIlVzaW5nIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAnJFRBUCciCisgICAgICAgICAgICBlY2hvICJJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdG91Y2ggJExPQ0tGSUxFLnNraXAgdG8gbWFrZSBydW5xZW11IHNraXAgJFRBUC4iCisgICAgICAgIGZpCisKKyAgICAgICAgY2xlYW51cCgpIHsKKyAgICAgICAgICAgIGlmIFsgISAtZSAiJE5PU1VET19GTEFHIiAtYSAiJFVTRV9QUkVDT05GX1RBUCIgPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjIFJlZGlyZWN0IHN0ZGVyciBzaW5jZSB3ZSBjb3VsZCBzZWUgYSBMRF9QUkVMT0FEIHdhcm5pbmcgaGVyZSBpZiBwc2V1ZG8gaXMgbG9hZGVkCisgICAgICAgICAgICAgICAgIyBidXQgaW5hY3RpdmUuIFRoaXMgbG9va3Mgc2NhcnkgYnV0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICAgICAgc3VkbyAkUUVNVUlGRE9XTiAkVEFQICRPRUNPUkVfTkFUSVZFX1NZU1JPT1QgMj4gL2Rldi9udWxsCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWNobyAiUmVsZWFzaW5nIGxvY2tmaWxlIG9mIHByZWNvbmZpZ3VyZWQgdGFwIGRldmljZSAnJFRBUCciCisgICAgICAgICAgICByZWxlYXNlX2xvY2sgJExPQ0tGSUxFCisKKyAgICAgICAgICAgIGlmIFsgIiRORlNSVU5OSU5HIiA9ICJ0cnVlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiU2h1dHRpbmcgZG93biB0aGUgdXNlcnNwYWNlIE5GUyBzZXJ2ZXIuLi4iCisgICAgICAgICAgICAgICAgZWNobyAicnVucWVtdS1leHBvcnQtcm9vdGZzIHN0b3AgJFJPT1RGUyIKKyAgICAgICAgICAgICAgICBydW5xZW11LWV4cG9ydC1yb290ZnMgc3RvcCAkUk9PVEZTCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgIyBJZiBRRU1VIGNyYXNoZXMgb3Igc29tZWhvdyB0dHkgcHJvcGVydGllcyBhcmUgbm90IHJlc3RvcmVkCisgICAgICAgICAgICAjIGFmdGVyIHFlbXUgZXhpdHMsIHdlIG5lZWQgdG8gcnVuIHN0dHkgc2FuZQorICAgICAgICAgICAgI3N0dHkgc2FuZQorCisgICAgICAgICAgICAjaW5zdGVhZCBvZiB1c2luZyBzdHR5IHNhbmUgd2Ugc2V0IHRoZSBvcmlnaW5hbCBzdHR5IHZhbHVlcworICAgICAgICAgICAgc3R0eSAke09SSUdfU1RUWX0KKworICAgICAgICB9CisKKworICAgICAgICBuMD0kKGVjaG8gJFRBUCB8IHNlZCAncy90YXAvLycpCisKKyAgICAgICAgY2FzZSAkbjAgaW4KKyAgICAgICAgICAgICcnfCpbITAtOV0qKQorICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yIENvdWxkbid0IHR1cm4gJFRBUCBpbnRvIGFuIGludGVyZmFjZSBudW1iZXI/IgorICAgICAgICAgICAgICAgIGV4aXQgMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBuMT0kKCgkbjAgKiAyICsgMSkpCisgICAgICAgIG4yPSQoKCRuMSArIDEpKQorCisgICAgICAgIEtFUk5FTF9ORVRXT1JLX0NNRD0iaXA9MTkyLjE2OC43LiRuMjo6MTkyLjE2OC43LiRuMToyNTUuMjU1LjI1NS4wIgorICAgICAgICBRRU1VX1RBUF9DTUQ9Ii1uZXQgdGFwLHZsYW49MCxpZm5hbWU9JFRBUCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyIKKyAgICAgICAgaWYgWyAiJEtWTV9BQ1RJVkUiID0gInllcyIgXTsgdGhlbgorICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsbW9kZWw9dmlydGlvICRRRU1VX1RBUF9DTUQsdmhvc3Q9b24iCisgICAgICAgICAgICBEUk9PVD0iL2Rldi92ZGEiCisgICAgICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj12aXJ0aW8sZm9ybWF0PXJhdyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldCBuaWMsdmxhbj0wICRRRU1VX1RBUF9DTUQiCisgICAgICAgICAgICBEUk9PVD0iL2Rldi9oZGEiCisgICAgICAgICAgICBST09URlNfT1BUSU9OUz0iLWRyaXZlIGZpbGU9JFJPT1RGUyxpZj1pZGUsZm9ybWF0PXJhdyIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm02NCIgXTsgdGhlbgorICAgICAgICAgICAgUUVNVV9ORVRXT1JLX0NNRD0iLW5ldGRldiB0YXAsaWQ9bmV0MCxpZm5hbWU9JFRBUCxzY3JpcHQ9bm8sZG93bnNjcmlwdD1ubyAtZGV2aWNlIHZpcnRpby1uZXQtZGV2aWNlLG5ldGRldj1uZXQwICIKKyAgICAgICAgICAgIERST09UPSIvZGV2L3ZkYSIKKyAgICAgICAgICAgIFJPT1RGU19PUFRJT05TPSItZHJpdmUgaWQ9ZGlzazAsZmlsZT0kUk9PVEZTLGlmPW5vbmUsZm9ybWF0PXJhdyAtZGV2aWNlIHZpcnRpby1ibGstZGV2aWNlLGRyaXZlPWRpc2swIgorICAgICAgICBmaQorCisgICAgICAgIEtFUk5DTURMSU5FPSJtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VX1VJX09QVElPTlM9Ii1zaG93LWN1cnNvciAtdXNiIC11c2JkZXZpY2Ugd2Fjb20tdGFibGV0IgorCisgICAgICAgIE5GU19JTlNUQU5DRT1gZWNobyAkVEFQIHwgc2VkICdzL3RhcC8vJ2AKKyAgICAgICAgZXhwb3J0IE5GU19JTlNUQU5DRQorCisgICAgICAgIFNFUklBTE9QVFM9IiIKKyAgICAgICAgaWYgWyAieCRTRVJJQUxfTE9HRklMRSIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgICAgIFNFUklBTE9QVFM9Ii1zZXJpYWwgZmlsZTokU0VSSUFMX0xPR0ZJTEUiCisgICAgICAgIGZpCitmaQorCitjYXNlICIkTUFDSElORSIgaW4KKyAgICAicWVtdWFybSIpIDs7CisgICAgInFlbXVhcm02NCIpIDs7CisgICAgInFlbXVtaWNyb2JsYXplIikgOzsKKyAgICAicWVtdW1pcHMiKSA7OworICAgICJxZW11bWlwc2VsIikgOzsKKyAgICAicWVtdW1pcHM2NCIpIDs7CisgICAgInFlbXVzaDQiKSA7OworICAgICJxZW11cHBjIikgOzsKKyAgICAicWVtdWFybXY2IikgOzsKKyAgICAicWVtdWFybXY3IikgOzsKKyAgICAicWVtdXg4NiIpIDs7CisgICAgInFlbXV4ODYtNjQiKSA7OworICAgICJxZW11enlucSIpIDs7CisgICAgImFraXRhIikgOzsKKyAgICAic3BpdHoiKSA7OworICAgICopCisgICAgICAgIGVjaG8gIkVycm9yOiBVbnN1cHBvcnRlZCBtYWNoaW5lIHR5cGUgJE1BQ0hJTkUiCisgICAgICAgIHJldHVybiAxCisgICAgOzsKK2VzYWMKKworaWYgWyAhIC1mICIkS0VSTkVMIiAtYSAieCRGU1RZUEUiICE9ICJ4dm1kayIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGltZyIgLWEgIngkRlNUWVBFIiAhPSAieGhkZGRpcmVjdCIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBLZXJuZWwgaW1hZ2UgZmlsZSAkS0VSTkVMIGRvZXNuJ3QgZXhpc3QiCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitpZiBbICIkRlNUWVBFIiAhPSAibmZzIiAtYSAiJEZTVFlQRSIgIT0gInZtZGsiIC1hICIkRlNUWVBFIiAhPSAiaGRkaW1nIiAtYSAiJEZTVFlQRSIgIT0gImhkZGRpcmVjdCIgLWEgISAtZiAiJFJPT1RGUyIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBJbWFnZSBmaWxlICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICBjbGVhbnVwCisgICAgcmV0dXJuIDEKK2ZpCisKK2lmIFsgIiRORlNfU0VSVkVSIiA9ICIiIF07IHRoZW4KKyAgICBORlNfU0VSVkVSPSIxOTIuMTY4LjcuMSIKKyAgICBpZiBbICIkU0xJUlBfRU5BQkxFRCIgPSAieWVzIiBdOyB0aGVuCisJTkZTX1NFUlZFUj0iMTAuMC4yLjIiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgIE5GU19ESVI9YGVjaG8gJFJPT1RGUyB8IHNlZCAncy9eW146XSo6XCguKlwpL1wxLydgCisgICAgaWYgWyAiJE5GU19JTlNUQU5DRSIgPSAiIiBdIDsgdGhlbgorCU5GU19JTlNUQU5DRT0wCisgICAgZmkKKyAgICBNT1VOVERfUlBDUE9SVD0kWyAyMTExMSArICRORlNfSU5TVEFOQ0UgXQorICAgIE5GU0RfUlBDUE9SVD0kWyAxMTExMSArICRORlNfSU5TVEFOQ0UgXQorICAgIE5GU0RfUE9SVD0kWyAzMDQ5ICsgMiAqICRORlNfSU5TVEFOQ0UgXQorICAgIE1PVU5URF9QT1JUPSRbIDMwNDggKyAyICogJE5GU19JTlNUQU5DRSBdCisgICAgVU5GU19PUFRTPSJuZnN2ZXJzPTMscG9ydD0kTkZTRF9QT1JULG1vdW50cHJvZz0kTU9VTlREX1JQQ1BPUlQsbmZzcHJvZz0kTkZTRF9SUENQT1JULHVkcCxtb3VudHBvcnQ9JE1PVU5URF9QT1JUIgorCisgICAgUFNFVURPX0xPQ0FMU1RBVEVESVI9fi8ucnVucWVtdS1zZGsvcHNldWRvCisgICAgZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSCisKKyAgICAjIFN0YXJ0IHRoZSB1c2Vyc3BhY2UgTkZTIHNlcnZlcgorICAgIGVjaG8gInJ1bnFlbXUtZXhwb3J0LXJvb3RmcyByZXN0YXJ0ICRST09URlMiCisgICAgcnVucWVtdS1leHBvcnQtcm9vdGZzIHJlc3RhcnQgJFJPT1RGUworICAgIGlmIFsgJD8gIT0gMCBdOyB0aGVuCisgICAgICAgIHJldHVybiAxCisgICAgZmkKKyAgICBORlNSVU5OSU5HPSJ0cnVlIgorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm0iIC1vICIkTUFDSElORSIgPSAicWVtdWFybXY2IiAtbyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NyIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCisgICAgTUFDSElORV9TVUJUWVBFPXZlcnNhdGlsZXBiCisgICAgZXhwb3J0IFFFTVVfQVVESU9fRFJWPSJub25lIgorICAgIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyIKKyAgICAjIFFFTVVfVUlfT1BUSU9OUz0iJFFFTVVfVUlfT1BUSU9OUyAtZm9yY2UtcG9pbnRlciIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L3NkYSBydyBjb25zb2xlPXR0eUFNQTAsMTE1MjAwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICR7TUFDSElORV9TVUJUWVBFfSAtZHJpdmUgZmlsZT0kUk9PVEZTLGZvcm1hdD1yYXcgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0IgorICAgICAgICAgICAgY2xlYW51cAorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmkKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3IGNvbnNvbGU9dHR5QU1BMCwxMTUyMDAgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJHtNQUNISU5FX1NVQlRZUEV9IC0tbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybXY2IiBdOyB0aGVuCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVU9QVElPTlMgLWNwdSBhcm0xMTM2IgorICAgIGZpCisgICAgaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVhcm12NyIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVPUFRJT05TIC1jcHUgY29ydGV4LWE4IgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hYXJjaDY0CisKKyAgICBleHBvcnQgUUVNVV9BVURJT19EUlY9Im5vbmUiCisgICAgaWYgWyAieCRTRVJJQUxTVERJTyIgPSAieCIgXSA7IHRoZW4KKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSItbm9ncmFwaGljIgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L3ZkYSBydyBjb25zb2xlPXR0eUFNQTAsMzg0MDAgbWVtPSRRRU1VX01FTU9SWSBoaWdocmVzPW9mZiAkS0VSTkVMX05FVFdPUktfQ01EIgorICAgICAgICAjIHFlbXUtc3lzdGVtLWFhcmNoNjQgb25seSBzdXBwb3J0ICctbWFjaGluZSB2aXJ0IC1jcHUgY29ydGV4LWE1NycgZm9yIG5vdworICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLW1hY2hpbmUgdmlydCAtY3B1IGNvcnRleC1hNTcgJFJPT1RGU19PUFRJT05TICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PSRORlNfU0VSVkVSOiRORlNfRElSLCRVTkZTX09QVFMgcncgY29uc29sZT10dHlBTUEwLDM4NDAwIG1lbT0kUUVNVV9NRU1PUlkgaGlnaHJlcz1vZmYgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1tYWNoaW5lIHZpcnQgLWNwdSBjb3J0ZXgtYTU3ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKK2ZpCisKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXV4ODYiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWkzODYKKyAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIENQVV9TVUJUWVBFPWt2bTMyCisgICAgZWxzZQorICAgICAgICBDUFVfU1VCVFlQRT1xZW11MzIKKyAgICBmaQorICAgIGlmIFsgISAteiAiJHZnYV9vcHRpb24iIF07IHRoZW4KKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIgorICAgIGVsc2UKKyAgICAgICAgUUVNVV9VSV9PUFRJT05TPSIkUUVNVV9VSV9PUFRJT05TIC12Z2Egdm13YXJlIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PSREUk9PVCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUk9PVEZTX09QVElPTlMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InZnYT0wIHV2ZXNhZmIubW9kZV9vcHRpb249NjQweDQ4MC0zMiByb290PS9kZXYvcmFtMCBydyBtZW09JFFFTVVfTUVNT1JZICRLRVJORUxfTkVUV09SS19DTUQiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtaW5pdHJkICRST09URlMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIiRORlNfU0VSVkVSIiA9ICIxOTIuMTY4LjcuMSIgLWEgISAtZCAiJE5GU19ESVIiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0LiIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAidm1kayIgLW8gIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIiRGU1RZUEUiID0gImhkZGRpcmVjdCIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgICMgQ3VycmVudGx5IG9wcm9maWxlJ3MgZXZlbnQgYmFzZWQgaW50ZXJydXB0IG1vZGUgZG9lc24ndCB3b3JrKEJ1ZyAjODI4KSBpbgorICAgICMgcWVtdXg4NiBhbmQgcWVtdXg4Ni02NC4gV2UgY2FuIHVzZSB0aW1lciBpbnRlcnJ1cHQgbW9kZSBmb3Igbm93LgorICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgb3Byb2ZpbGUudGltZXI9MSIKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11eDg2LTY0IiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS14ODZfNjQKKyAgICBpZiBbICIkS1ZNX0FDVElWRSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgIENQVV9TVUJUWVBFPWt2bTY0CisgICAgZWxzZQorICAgICAgICBDUFVfU1VCVFlQRT1jb3JlMmR1bworICAgIGZpCisgICAgaWYgWyAhIC16ICIkdmdhX29wdGlvbiIgXTsgdGhlbgorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgZWxzZQorICAgICAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMgLXZnYSB2bXdhcmUiCisgICAgZmkKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICBLRVJOQ01ETElORT0idmdhPTAgdXZlc2FmYi5tb2RlX29wdGlvbj02NDB4NDgwLTMyIHJvb3Q9JERST09UIHJ3IG1lbT0kUUVNVV9NRU1PUlkgJEtFUk5FTF9ORVRXT1JLX0NNRCIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1jcHUgJENQVV9TVUJUWVBFICRST09URlNfT1BUSU9OUyAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAibmZzIiBdOyB0aGVuCisgICAgICAgIGlmIFsgIngkUk9PVEZTIiA9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICBST09URlM9L3Nydi9uZnMvcWVtdXg4Ni02NAorICAgICAgICBmaQorICAgICAgICBpZiBbICEgLWQgIiRST09URlMiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkVycm9yOiBORlMgbW91bnQgcG9pbnQgJFJPT1RGUyBkb2Vzbid0IGV4aXN0LiIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCisgICAgaWYgWyAiJEZTVFlQRSIgPSAidm1kayIgLW8gIiRGU1RZUEUiID0gImhkZGltZyIgLW8gIiRGU1RZUEUiID0gImhkZGRpcmVjdCIgXTsgdGhlbgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLWNwdSAkQ1BVX1NVQlRZUEUgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgICMgQ3VycmVudGx5IG9wcm9maWxlJ3MgZXZlbnQgYmFzZWQgaW50ZXJydXB0IG1vZGUgZG9lc24ndCB3b3JrKEJ1ZyAjODI4KSBpbgorICAgICMgcWVtdXg4NiBhbmQgcWVtdXg4Ni02NC4gV2UgY2FuIHVzZSB0aW1lciBpbnRlcnJ1cHQgbW9kZSBmb3Igbm93LgorICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgb3Byb2ZpbGUudGltZXI9MSIKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJzcGl0eiIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tYXJtCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgZWNobyAkUk9PVEZTCisgICAgICAgIFJPT1RGUz1gcmVhZGxpbmsgLWYgJFJPT1RGU2AKKyAgICAgICAgZWNobyAkUk9PVEZTCisgICAgICAgIGlmIFsgISAtZSAiJFJPT1RGUy5xZW11ZGlzayIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiQWRkaW5nIGEgcGFydGl0aW9uIHRhYmxlIHRvIHRoZSBleHQzIGltYWdlIGZvciB1c2UgYnkgUUVNVSwgcGxlYXNlIHdhaXQuLi4iCisgICAgICAgICAgICBydW5xZW11LWFkZHB0YWJsZTJpbWFnZSAkUk9PVEZTICRST09URlMucWVtdWRpc2sKKyAgICAgICAgZmkKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NIHNwaXR6IC1oZGEgJFJPT1RGUy5xZW11ZGlzayAtcG9ydHJhaXQiCisgICAgZmkKK2ZpCisKK2lmIFsgIiRNQUNISU5FIiA9ICJxZW11bWlwcyIgLW8gIiRNQUNISU5FIiA9ICJxZW11bWlwc2VsIiAtbyAiJE1BQ0hJTkUiID0gInFlbXVtaXBzNjQiIF07IHRoZW4KKyAgICBjYXNlICIkTUFDSElORSIgaW4KKyAgICAgICBxZW11bWlwcykgICBRRU1VPXFlbXUtc3lzdGVtLW1pcHMgOzsKKyAgICAgICBxZW11bWlwc2VsKSBRRU1VPXFlbXUtc3lzdGVtLW1pcHNlbCA7OworICAgICAgIHFlbXVtaXBzNjQpIFFFTVU9cWVtdS1zeXN0ZW0tbWlwczY0IDs7CisgICAgZXNhYworICAgIE1BQ0hJTkVfU1VCVFlQRT1tYWx0YQorICAgIFFFTVVfVUlfT1BUSU9OUz0iLXZnYSBjaXJydXMgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIkRlNUWVBFIiA9ICJidHJmcyIgXTsgdGhlbgorICAgICAgICAjS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eTAgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L2hkYSBydyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLWRyaXZlIGZpbGU9JFJPT1RGUyxmb3JtYXQ9cmF3IC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkgbmZzcm9vdD0kTkZTX1NFUlZFUjokTkZTX0RJUiwkVU5GU19PUFRTIHJ3ICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgUUVNVU9QVElPTlM9IiRRRU1VX05FVFdPUktfQ01EIC1NICRNQUNISU5FX1NVQlRZUEUgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdXBwYyIgXTsgdGhlbgorICAgIFFFTVU9cWVtdS1zeXN0ZW0tcHBjCisgICAgTUFDSElORV9TVUJUWVBFPW1hYzk5CisgICAgQ1BVX1NVQlRZUEU9RzQKKyAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgaWYgWyAiJFNMSVJQX0VOQUJMRUQiID0gInllcyIgXTsgdGhlbgorICAgICAgICBRRU1VX05FVFdPUktfQ01EPSIiCisgICAgZWxzZQorICAgICAgICBRRU1VX05FVFdPUktfQ01EPSItbmV0IG5pYyxtb2RlbD1wY25ldCAkUUVNVV9UQVBfQ01EIgorICAgIGZpCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgcncgY29uc29sZT10dHlTMCBjb25zb2xlPXR0eSAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtTSAkTUFDSElORV9TVUJUWVBFIC1kcml2ZSBmaWxlPSRST09URlMsZm9ybWF0PXJhdyAtbm8tcmVib290ICRRRU1VX1VJX09QVElPTlMiCisgICAgZmkKKyAgICBpZiBbICIkRlNUWVBFIiA9ICJuZnMiIF07IHRoZW4KKyAgICAgICAgaWYgWyAiJE5GU19TRVJWRVIiID0gIjE5Mi4xNjguNy4xIiAtYSAhIC1kICIkTkZTX0RJUiIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiRXJyb3I6IE5GUyBtb3VudCBwb2ludCAkUk9PVEZTIGRvZXNuJ3QgZXhpc3QiCisgICAgICAgICAgICBjbGVhbnVwCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBLRVJOQ01ETElORT0icm9vdD0vZGV2L25mcyBjb25zb2xlPXR0eVMwIGNvbnNvbGU9dHR5IG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY3B1ICRDUFVfU1VCVFlQRSAtTSAkTUFDSElORV9TVUJUWVBFIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVzaDQiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLXNoNAorICAgIE1BQ0hJTkVfU1VCVFlQRT1yMmQKKyAgICBRRU1VX1VJX09QVElPTlM9IiRRRU1VX1VJX09QVElPTlMiCisgICAgaWYgWyAiJHtGU1RZUEU6MDozfSIgPSAiZXh0IiAtbyAiJEZTVFlQRSIgPSAiYnRyZnMiIF07IHRoZW4KKyAgICAgICAgI0tFUk5DTURMSU5FPSJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAgY29uc29sZT10dHkwICRLRVJORUxfTkVUV09SS19DTUQgbWVtPSRRRU1VX01FTU9SWSIKKyAgICAgICAgS0VSTkNNRExJTkU9InJvb3Q9L2Rldi9oZGEgcncgY29uc29sZT10dHlTQzEgbm9pb3RyYXAgZWFybHlwcmludGs9c2gtc2NpLjEgY29uc29sZT10dHkgJEtFUk5FTF9ORVRXT1JLX0NNRCBtZW09JFFFTVVfTUVNT1JZIgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gJE1BQ0hJTkVfU1VCVFlQRSAtaGRhICRST09URlMgLW5vLXJlYm9vdCAkUUVNVV9VSV9PUFRJT05TIC1tb25pdG9yIG51bGwgLXNlcmlhbCB2YyAtc2VyaWFsIHN0ZGlvIgorICAgICAgICBTRVJJQUxTVERJTz0iMSIKKyAgICBmaQorICAgIGlmIFsgIiRGU1RZUEUiID0gIm5mcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIkTkZTX1NFUlZFUiIgPSAiMTkyLjE2OC43LjEiIC1hICEgLWQgIiRORlNfRElSIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJFcnJvcjogTkZTIG1vdW50IHBvaW50ICRST09URlMgZG9lc24ndCBleGlzdCIKKyAgICAgICAgICAgIGNsZWFudXAKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGZpCisgICAgICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvbmZzIGNvbnNvbGU9dHR5U0MxIG5vaW90cmFwIGVhcmx5cHJpbnRrPXNoLXNjaS4xIGNvbnNvbGU9dHR5IG5mc3Jvb3Q9JE5GU19TRVJWRVI6JE5GU19ESVIsJFVORlNfT1BUUyBydyAkS0VSTkVMX05FVFdPUktfQ01EIG1lbT0kUUVNVV9NRU1PUlkiCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtTSAkTUFDSElORV9TVUJUWVBFIC1uby1yZWJvb3QgJFFFTVVfVUlfT1BUSU9OUyAtbW9uaXRvciBudWxsIC1zZXJpYWwgdmMgLXNlcmlhbCBzdGRpbyIKKyAgICAgICAgU0VSSUFMU1RESU89IjEiCisgICAgZmkKK2ZpCisKK2lmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgXTsgdGhlbgorICAgIEtFUk5DTURMSU5FPSIkS0VSTkNNRExJTkUgcm9vdGZzdHlwZT0kRlNUWVBFIgorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gImFraXRhIiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1hcm0KKyAgICBpZiBbICIkRlNUWVBFIiA9ICJqZmZzMiIgXTsgdGhlbgorICAgICAgICBST09URlM9YHJlYWRsaW5rIC1mICRST09URlNgCisgICAgICAgIGlmIFsgISAtZSAiJFJPT1RGUy5xZW11Zmxhc2giIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkNvbnZlcnRpbmcgcmF3IGltYWdlIGludG8gZmxhc2ggaW1hZ2UgZm9ybWF0IGZvciB1c2UgYnkgUUVNVSwgcGxlYXNlIHdhaXQuLi4iCisgICAgICAgIHJhdzJmbGFzaC5ha2l0YSA8ICRST09URlMgPiAkUk9PVEZTLnFlbXVmbGFzaAorICAgICAgICBmaQorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfTkVUV09SS19DTUQgLU0gYWtpdGEgLW10ZGJsb2NrICRST09URlMucWVtdWZsYXNoIC1wb3J0cmFpdCIKKyAgICBmaQorZmkKKworaWYgWyAiJE1BQ0hJTkUiID0gInFlbXVtaWNyb2JsYXplIiBdOyB0aGVuCisgICAgUUVNVT1xZW11LXN5c3RlbS1taWNyb2JsYXplZWwKKyAgICBRRU1VX1NZU1RFTV9PUFRJT05TPSItTSBwZXRhbG9naXgtbWw2MDUgLXNlcmlhbCBtb246c3RkaW8gLWR0YiAkS0VSTkVMLSRNQUNISU5FLmR0YiIKKyAgICBpZiBbICIke0ZTVFlQRTowOjN9IiA9ICJleHQiIC1vICIke0ZTVFlQRTowOjR9IiA9ICJjcGlvIiBdOyB0aGVuCisgICAgICAgIEtFUk5DTURMSU5FPSJlYXJseXByaW50ayByb290PS9kZXYvcmFtIHJ3IgorICAgICAgICBRRU1VT1BUSU9OUz0iJFFFTVVfU1lTVEVNX09QVElPTlMgLWluaXRyZCAkUk9PVEZTIgorICAgIGZpCitmaQorCitpZiBbICIkTUFDSElORSIgPSAicWVtdXp5bnEiIF07IHRoZW4KKyAgICBRRU1VPXFlbXUtc3lzdGVtLWFybQorICAgIFFFTVVfU1lTVEVNX09QVElPTlM9Ii1NIHhpbGlueC16eW5xLWE5IC1zZXJpYWwgbnVsbCAtc2VyaWFsIG1vbjpzdGRpbyAtZHRiICRLRVJORUwtJE1BQ0hJTkUuZHRiIgorICAgICMgenlucSBzZXJpYWwgcG9ydHMgYXJlIG5hbWVkICd0dHlQUzAnIGFuZCAndHR5UFMxJywgZml4dXAgdGhlIGRlZmF1bHQgdmFsdWVzCisgICAgU0NSSVBUX0tFUk5FTF9PUFQ9JChlY2hvICIkU0NSSVBUX0tFUk5FTF9PUFQiIHwgc2VkICdzL2NvbnNvbGU9dHR5Uy9jb25zb2xlPXR0eVBTL2cnKQorICAgIGlmIFsgIiR7RlNUWVBFOjA6M30iID0gImV4dCIgLW8gIiR7RlNUWVBFOjA6NH0iID0gImNwaW8iIF07IHRoZW4KKyAgICAgICAgS0VSTkNNRExJTkU9ImVhcmx5cHJpbnRrIHJvb3Q9L2Rldi9yYW0gcnciCisgICAgICAgIFFFTVVPUFRJT05TPSIkUUVNVV9TWVNURU1fT1BUSU9OUyAtaW5pdHJkICRST09URlMiCisgICAgZmkKK2ZpCisKK2lmIFsgIngkUkFNRlMiID0gInh0cnVlIiBdOyB0aGVuCisgICAgUUVNVU9QVElPTlM9Ii1pbml0cmQgJFJPT1RGUyAtbm9ncmFwaGljIgorICAgIEtFUk5DTURMSU5FPSJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwIGRlYnVnc2hlbGwiCitmaQorCitpZiBbICJ4JElTT0ZTIiA9ICJ4dHJ1ZSIgXTsgdGhlbgorICAgIFFFTVVPUFRJT05TPSIkUUVNVV9ORVRXT1JLX0NNRCAtY2Ryb20gJFJPT1RGUyAkUUVNVV9VSV9PUFRJT05TIgorZmkKKworaWYgWyAieCRRRU1VT1BUSU9OUyIgPSAieCIgXTsgdGhlbgorICAgIGVjaG8gIkVycm9yOiBVbmFibGUgdG8gc3VwcG9ydCB0aGlzIGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMiCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitpZiBbICIkVENQU0VSSUFMX1BPUlROVU0iICE9ICIiIF07IHRoZW4KKyAgICBpZiBbICIkTUFDSElORSIgPSAicWVtdWFybTY0IiBdOyB0aGVuCisgICAgICAgIFNDUklQVF9RRU1VX0VYVFJBX09QVD0iJFNDUklQVF9RRU1VX0VYVFJBX09QVCAtZGV2aWNlIHZpcnRpby1zZXJpYWwtZGV2aWNlIC1jaGFyZGV2IHNvY2tldCxpZD12aXJ0Y29uLHBvcnQ9JFRDUFNFUklBTF9QT1JUTlVNLGhvc3Q9MTI3LjAuMC4xIC1kZXZpY2UgdmlydGNvbnNvbGUsY2hhcmRldj12aXJ0Y29uIgorICAgIGVsc2UKKyAgICAgICAgU0NSSVBUX1FFTVVfRVhUUkFfT1BUPSIkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC1zZXJpYWwgdGNwOjEyNy4wLjAuMTokVENQU0VSSUFMX1BPUlROVU0iCisgICAgZmkKK2ZpCisKK1BBVEg9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC91c3IvYmluOiRQQVRICisKK1FFTVVCSU49YHdoaWNoICRRRU1VIDI+IC9kZXYvbnVsbGAKK2lmIFsgISAteCAiJFFFTVVCSU4iIF07IHRoZW4KKyAgICBlY2hvICJFcnJvcjogTm8gUUVNVSBiaW5hcnkgJyRRRU1VJyBjb3VsZCBiZSBmb3VuZC4iCisgICAgY2xlYW51cAorICAgIHJldHVybiAxCitmaQorCitORUVEX0dMPWBsZGQgJFFFTVVCSU4vJFFFTVUgMj4mMSB8IGdyZXAgbGliR0xVYAorIyBXZSBjYW4ndCBydW4gd2l0aG91dCBhIGxpYkdMLnNvCitpZiBbICIkTkVFRF9HTCIgIT0gIiIgXTsgdGhlbgorICAgIGxpYmdsPSdubycKKworICAgIFsgLWUgL3Vzci9saWIvbGliR0wuc28gLWEgLWUgL3Vzci9saWIvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKKyAgICBbIC1lIC91c3IvbGliNjQvbGliR0wuc28gLWEgLWUgL3Vzci9saWI2NC9saWJHTFUuc28gXSAmJiBsaWJnbD0neWVzJworICAgIFsgLWUgL3Vzci9saWIvKi1saW51eC1nbnUvbGliR0wuc28gLWEgLWUgL3Vzci9saWIvKi1saW51eC1nbnUvbGliR0xVLnNvIF0gJiYgbGliZ2w9J3llcycKKworICAgIGlmIFsgIiRsaWJnbCIgIT0gJ3llcycgXTsgdGhlbgorICAgICAgICBlY2hvICJZb3UgbmVlZCBsaWJHTC5zbyBhbmQgbGliR0xVLnNvIHRvIGV4aXN0IGluIHlvdXIgbGlicmFyeSBwYXRoIHRvIHJ1biB0aGUgUUVNVSBlbXVsYXRvci4KKyAgICAgICAgVWJ1bnR1IHBhY2thZ2UgbmFtZXMgYXJlOiBsaWJnbDEtbWVzYS1kZXYgYW5kIGxpYmdsdTEtbWVzYS1kZXYuCisgICAgICAgIEZlZG9yYSBwYWNrYWdlIG5hbWVzIGFyZTogbWVzYS1saWJHTC1kZXZlbCBtZXNhLWxpYkdMVS1kZXZlbC4iCisgICAgICAgIHJldHVybiAxOworICAgIGZpCitmaQorCitkb19xdWl0KCkgeworICAgIGNsZWFudXAKKyAgICByZXR1cm4gMQorfQorCit0cmFwIGRvX3F1aXQgSU5UIFRFUk0gUVVJVAorCisjIHFlbXUgZ290IHNlZ2ZhdWx0IGlmIGxpbmtlZCB3aXRoIG5WaWRpYSdzIGxpYmdsCitHTF9MRF9QUkVMT0FEPSRMRF9QUkVMT0FECisKK2lmIGxkZCAkUUVNVUJJTiB8IGdyZXAgLWkgbnZpZGlhICY+IC9kZXYvbnVsbAordGhlbgorY2F0IDw8IEVPTQorV0FSTklORzogblZpZGlhIHByb3ByaWV0YXJ5IE9wZW5HTCBsaWJyYXJpZXMgZGV0ZWN0ZWQuCituVmlkaWEncyBPcGVuR0wgbGlicmFyaWVzIGFyZSBrbm93biB0byBoYXZlIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggcWVtdSwKK3Jlc3VsdGluZyBpbiBhIHNlZ2ZhdWx0LiBQbGVhc2UgdW5pbnN0YWxsIHRoZXNlIGRyaXZlcnMgb3IgZW5zdXJlIHRoZSBtZXNhIGxpYkdMCitsaWJyYXJpZXMgcHJlY2VkZSBudmlkaWEncyB2aWEgTERfUFJFTE9BRChBbHJlYWR5IGRvIGl0IG9uIFVidW50dSAxMCkuCitFT00KKworIyBBdXRvbWF0aWNhbGx5IHVzZSBVYnVudHUgc3lzdGVtJ3MgbWVzYSBsaWJHTCwgb3RoZXIgZGlzdHJvIGNhbiBhZGQgaXRzIG93biBwYXRoCitpZiBncmVwIC1pIHVidW50dSAvZXRjL2xzYi1yZWxlYXNlICY+IC9kZXYvbnVsbAordGhlbgorICAgICMgcHJlY2VkZSBudmlkaWEncyBkcml2ZXIgb24gVWJ1bnR1IDEwCisgICAgVUJVTlRVX01BSU5fVkVSU0lPTj1gY2F0IC9ldGMvbHNiLXJlbGVhc2UgfGdyZXAgRElTVFJJQl9SRUxFQVNFIHxjdXQgLWQ9ICAtZiAyfCBjdXQgLWQuIC1mIDFgCisgICAgaWYgWyAiJFVCVU5UVV9NQUlOX1ZFUlNJT04iID0gIjEwIiBdOworICAgIHRoZW4KKyAgICAgICAgR0xfUEFUSD0iIgorICAgICAgICBpZiB0ZXN0IC1lIC91c3IvbGliL2xpYkdMLnNvCisgICAgICAgIHRoZW4gCisgICAgICAgICAgICBHTF9QQVRIPSIvdXNyL2xpYi9saWJHTC5zbyIKKyAgICAgICAgZWxpZiB0ZXN0IC1lIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGliR0wuc28KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgR0xfUEFUSD0iL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9saWJHTC5zbyIKKyAgICAgICAgZmkKKworICAgICAgICBlY2hvICJTa2lwIG5WaWRpYSdzIGxpYkdMIG9uIFVidW50dSAxMCEiCisgICAgICAgIEdMX0xEX1BSRUxPQUQ9IiRHTF9QQVRIICRMRF9QUkVMT0FEIgorICAgIGZpCitmaQorZmkKKworaWYgWyAieCRTRVJJQUxTVERJTyIgPSAieDEiIF07IHRoZW4KKyAgICAgICAgZWNobyAiSW50ZXJydXB0IGNoYXJhY3RlciBpcyAnXl0nIgorICAgICAgICBzdHR5IGludHIgXl0KK2ZpCisKK2VjaG8gIlJ1bm5pbmcgJFFFTVUuLi4iCisjIC1uby1yZWJvb3QgaXMgYSBtYW5kYXRvcnkgb3B0aW9uIC0gc2VlIGJ1ZyAjMTAwCitpZiBbICIkRlNUWVBFIiA9ICJ2bWRrIiAtbyAiJEZTVFlQRSIgPSAiaGRkaW1nIiAtbyAiJEZTVFlQRSIgPSAiaGRkZGlyZWN0IiBdOyB0aGVuCisgICAgZWNobyAkUUVNVUJJTiAkVk0gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUCisgICAgTERfUFJFTE9BRD0iJEdMX0xEX1BSRUxPQUQiICRRRU1VQklOICRWTSAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQKK2VsaWYgWyAiJEZTVFlQRSIgPSAiaXNvIiBdOyB0aGVuCisgICAgZWNobyAkUUVNVUJJTiAkUUVNVU9QVElPTlMgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQKKyAgICBMRF9QUkVMT0FEPSIkR0xfTERfUFJFTE9BRCIgJFFFTVVCSU4gJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUCitlbHNlCisgICAgZWNobyAkUUVNVUJJTiAta2VybmVsICRLRVJORUwgJFFFTVVPUFRJT05TICRTTElSUF9DTUQgJFNFUklBTE9QVFMgLW5vLXJlYm9vdCAkU0NSSVBUX1FFTVVfT1BUICRTQ1JJUFRfUUVNVV9FWFRSQV9PUFQgLS1hcHBlbmQgJyInJEtFUk5DTURMSU5FICRTQ1JJUFRfS0VSTkVMX09QVCciJworICAgIExEX1BSRUxPQUQ9IiRHTF9MRF9QUkVMT0FEIiAkUUVNVUJJTiAta2VybmVsICRLRVJORUwgJFFFTVVPUFRJT05TICRTRVJJQUxPUFRTIC1uby1yZWJvb3QgJFNDUklQVF9RRU1VX09QVCAkU0NSSVBUX1FFTVVfRVhUUkFfT1BUIC0tYXBwZW5kICIkS0VSTkNNRExJTkUgJFNDUklQVF9LRVJORUxfT1BUIgorZmkKK3JldD0kPworaWYgWyAiJFNMSVJQX0VOQUJMRUQiICE9ICJ5ZXMiIF07IHRoZW4KKyAgICAgICAgY2xlYW51cAorZmkKKworI3NldCB0aGUgb3JpZ2luYWwgc3R0eSB2YWx1ZXMgYmVmb3JlIGV4aXQKK3N0dHkgJHtPUklHX1NUVFl9Cit0cmFwIC0gSU5UIFRFUk0gUVVJVAorCityZXR1cm4gJHJldApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9ydW5xZW11LlJFQURNRSBiL3NjcmlwdHMvcnVucWVtdS5SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwOGQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvcnVucWVtdS5SRUFETUUKQEAgLTAsMCArMSw0MiBAQAorVXNpbmcgT0UgaW1hZ2VzIHdpdGggUUVNVQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitPRS1Db3JlIGNhbiBnZW5lcmF0ZSBxZW11IGJvb3RhYmxlIGtlcm5lbHMgYW5kIGltYWdlcyB3aXRoIGNhbiBiZSB1c2VkIAorb24gYSBkZXNrdG9wIHN5c3RlbS4gVGhlIHNjcmlwdHMgY3VycmVudGx5IHN1cHBvcnQgYm9vdGluZyBBUk0sIE1JUFMsIFBvd2VyUEMKK2FuZCB4ODYgKDMyIGFuZCA2NCBiaXQpIGltYWdlcy4gVGhlIHNjcmlwdHMgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBPRSBidWlsZCAKK3N5c3RlbSBvciBleHRlcm5hbHkuCisKK1RoZSBydW5xZW11IHNjcmlwdCBpcyBydW4gYXM6IAorCisgICBydW5xZW11IDxtYWNoaW5lPiA8emltYWdlPiA8ZmlsZXN5c3RlbT4KKword2hlcmU6CisKKyAgIDxtYWNoaW5lPiBpcyB0aGUgbWFjaGluZS9hcmNoaXRlY3R1cmUgdG8gdXNlIChxZW11YXJtL3FlbXVtaXBzL3FlbXVwcGMvcWVtdXg4Ni9xZW11eDg2LTY0KQorICAgPHppbWFnZT4gaXMgdGhlIHBhdGggdG8gYSBrZXJuZWwgKGUuZy4gemltYWdlLXFlbXVhcm0uYmluKQorICAgPGZpbGVzeXN0ZW0+IGlzIHRoZSBwYXRoIHRvIGFuIGV4dDIgaW1hZ2UgKGUuZy4gZmlsZXN5c3RlbS1xZW11YXJtLmV4dDIpIG9yIGFuIG5mcyBkaXJlY3RvcnkKKyAgIAorSWYgPG1hY2hpbmU+IGlzbid0IHNwZWNpZmllZCwgdGhlIHNjcmlwdCB3aWxsIHRyeSB0byBkZXRlY3QgdGhlIG1hY2hpbmUgbmFtZSAKK2Zyb20gdGhlIG5hbWUgb2YgdGhlIDx6aW1hZ2U+IGZpbGUuCisKK0lmIDxmaWxlc3lzdGVtPiBpc24ndCBzcGVjaWZpZWQsIG5mcyBib290aW5nIHdpbGwgYmUgYXNzdW1lZC4KKworV2hlbiB1c2VkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLCBpdCB3aWxsIGRlZmF1bHQgdG8gcWVtdWFybSwgZXh0MiBhbmQgdGhlIGxhc3Qga2VybmVsIGFuZCAKK2NvcmUtaW1hZ2Utc2F0by1zZGsgaW1hZ2UgYnVpbHQgYnkgdGhlIGJ1aWxkIHN5c3RlbS4gSWYgYW4gc2RrIGltYWdlIGlzbid0IHByZXNlbnQgaXQgd2lsbCBsb29rCitmb3Igc2F0byBhbmQgbWluaW1hbCBpbWFnZXMuCisKK0Z1bGwgdXNhZ2UgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWVuIGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCBubyBvcHRpb25zIHNwZWNpZmllZC4KKworCitOb3RlcworPT09PT0KKworIC0gVGhlIHNjcmlwdHMgcnVuIHFlbXUgdXNpbmcgc3Vkby4gQ2hhbmdlIHBlcm1zIG9uIC9kZXYvbmV0L3R1biB0byAKKyAgIHJ1biBhcyBub24gcm9vdC4gVGhlIHJ1bnFlbXUtZ2VuLXRhcGRldnMgc2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgYnkKKyAgIHJvb3QgdG8gcHJlcG9wdWxhdGUgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZGV2aWNlcy4KKyAtIFlvdSBjYW4gYWNjZXNzIHRoZSBob3N0IGNvbXB1dGVyIGF0IDE5Mi4xNjguNy4xIHdpdGhpbiB0aGUgaW1hZ2UuCisgLSBZb3VyIHFlbXUgc3lzdGVtIHdpbGwgYmUgYWNjZXNzaWJsZSBhcyAxOTIuMTYuNy4yLgorIC0gVGhlIHNjcmlwdCBleHRyYWN0cyB0aGUgcm9vdCBmaWxlc3lzdGVtIHNwZWNpZmllZCB1bmRlciBwc2V1ZG8gYW5kIHNldHMgdXAgYSB1c2Vyc3BhY2UKKyAgIE5GUyBzZXJ2ZXIgdG8gc2hhcmUgdGhlIGltYWdlIG92ZXIgYnkgZGVmYXVsdCBtZWFuaW5nIHRoZSBmaWxlc3lzdGVtIGNhbiBiZSBhY2Nlc3NlZCBieQorICAgYm90aCB0aGUgaG9zdCBhbmQgZ3Vlc3Qgc3lzdGVtcy4KKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zZW5kLWVycm9yLXJlcG9ydCBiL3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWExYjk2NQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvc2VuZC1lcnJvci1yZXBvcnQKQEAgLTAsMCArMSwxOTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIFNlbmRzIGFuIGVycm9yIHJlcG9ydCAoaWYgdGhlIHJlcG9ydC1lcnJvciBjbGFzcyB3YXMgZW5hYmxlZCkgdG8gYQorIyByZW1vdGUgc2VydmVyLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbmRyZWVhIFByb2NhIDxhbmRyZWVhLmIucHJvY2FAaW50ZWwuY29tPgorIyBBdXRob3I6IE1pY2hhZWwgV29vZCA8bWljaGFlbC5nLndvb2RAaW50ZWwuY29tPgorCitpbXBvcnQgdXJsbGliMgoraW1wb3J0IHN5cworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKwordmVyc2lvbiA9ICIwLjMiCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZW5kLWVycm9yLXJlcG9ydCIpCitsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnKQorCitkZWYgZ2V0UGF5bG9hZExpbWl0KHVybCk6CisgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KHVybCwgTm9uZSkKKyAgICB0cnk6CisgICAgICAgIHJlc3BvbnNlID0gdXJsbGliMi51cmxvcGVuKHJlcSkKKyAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciBhcyBlOgorICAgICAgICAjIFVzZSB0aGlzIG9wcG9ydHVuaXR5IHRvIGJhaWwgb3V0IGlmIHdlIGNhbid0IGV2ZW4gY29udGFjdCB0aGUgc2VydmVyCisgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGNvbnRhY3Qgc2VydmVyOiAiICsgdXJsKQorICAgICAgICBsb2cuZXJyb3IoZS5yZWFzb24pCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgdHJ5OgorICAgICAgICByZXQgPSBqc29uLmxvYWRzKHJlc3BvbnNlLnJlYWQoKSkKKyAgICAgICAgbWF4X2xvZ19zaXplID0gcmV0LmdldCgnbWF4X2xvZ19zaXplJywgMCkKKyAgICAgICAgcmV0dXJuIGludChtYXhfbG9nX3NpemUpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gMAorCitkZWYgYXNrX2Zvcl9jb250YWN0ZGV0YWlscygpOgorICAgIHByaW50KCJQbGVhc2UgZW50ZXIgeW91ciBuYW1lIGFuZCB5b3VyIGVtYWlsIChvcHRpb25hbGx5KSwgdGhleSdsbCBiZSBzYXZlZCBpbiB0aGUgZmlsZSB5b3Ugc2VuZC4iKQorICAgIHVzZXJuYW1lID0gcmF3X2lucHV0KCJOYW1lIChyZXF1aXJlZCk6ICIpCisgICAgZW1haWwgPSByYXdfaW5wdXQoIkUtbWFpbCAobm90IHJlcXVpcmVkKTogIikKKyAgICByZXR1cm4gdXNlcm5hbWUsIGVtYWlsCisKK2RlZiBlZGl0X2NvbnRlbnQoanNvbl9maWxlX3BhdGgpOgorICAgIGVkaXQgPSByYXdfaW5wdXQoIlJldmlldyBpbmZvcm1hdGlvbiBiZWZvcmUgc2VuZGluZz8gKHkvbik6ICIpCisgICAgaWYgJ3knIGluIGVkaXQgb3IgJ1knIGluIGVkaXQ6CisgICAgICAgIGVkaXRvciA9IG9zLmVudmlyb24uZ2V0KCdFRElUT1InLCBOb25lKQorICAgICAgICBpZiBlZGl0b3I6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoW2VkaXRvciwganNvbl9maWxlX3BhdGhdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCJQbGVhc2Ugc2V0IHlvdXIgRURJVE9SIHZhbHVlIikKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBwcmVwYXJlX2RhdGEoYXJncyk6CisgICAgIyBhdHRlbXB0IHRvIGdldCB0aGUgbWF4X2xvZ19zaXplIGZyb20gdGhlIHNlcnZlcidzIHNldHRpbmdzCisgICAgbWF4X2xvZ19zaXplID0gZ2V0UGF5bG9hZExpbWl0KCJodHRwOi8vIithcmdzLnNlcnZlcisiL0NsaWVudFBvc3QvSlNPTiIpCisKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoYXJncy5lcnJvcl9maWxlKToKKyAgICAgICAgbG9nLmVycm9yKCJObyBkYXRhIGZpbGUgZm91bmQuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGhvbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKQorICAgIHVzZXJmaWxlID0gb3MucGF0aC5qb2luKGhvbWUsICIub2Utc2VuZC1lcnJvciIpCisKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbih1c2VyZmlsZSwgJ3InKSBhcyB1c2VyZmlsZV9mcDoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzLm5hbWUpID09IDA6CisgICAgICAgICAgICAgICAgYXJncy5uYW1lID0gdXNlcmZpbGVfZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjdXNlIGVtcHR5IHJlYWRsaW5lIHRvIGluY3JlbWVudCB0aGUgZnAKKyAgICAgICAgICAgICAgICB1c2VyZmlsZV9mcC5yZWFkbGluZSgpCisKKyAgICAgICAgICAgIGlmIGxlbihhcmdzLmVtYWlsKSA9PSAwOgorICAgICAgICAgICAgICAgIGFyZ3MuZW1haWwgPSB1c2VyZmlsZV9mcC5yZWFkbGluZSgpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICBpZiBhcmdzLmFzc3VtZV95ZXMgPT0gVHJ1ZSBhbmQgbGVuKGFyZ3MubmFtZSkgPT0gMDoKKyAgICAgICAgbG9nLmVycm9yKCJOYW1lIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGVpdGhlciB2aWEgIit1c2VyZmlsZSsiIG9yIGFzIGFuIGFyZ3VtZW50ICgtbikuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHdoaWxlIGxlbihhcmdzLm5hbWUpIDw9IDAgYW5kIGxlbihhcmdzLm5hbWUpIDwgNTA6CisgICAgICAgIHByaW50KCJcbk5hbWUgbmVlZHMgdG8gYmUgZ2l2ZW4gYW5kIG11c3Qgbm90IG1vcmUgdGhhbiA1MCBjaGFyYWN0ZXJzLiIpCisgICAgICAgIGFyZ3MubmFtZSwgYXJncy5lbWFpbCA9IGFza19mb3JfY29udGFjdGRldGFpbHMoKQorCisgICAgd2l0aCBvcGVuKHVzZXJmaWxlLCAndycpIGFzIHVzZXJmaWxlX2ZwOgorICAgICAgICB1c2VyZmlsZV9mcC53cml0ZShhcmdzLm5hbWUuc3RyaXAoKSArICJcbiIpCisgICAgICAgIHVzZXJmaWxlX2ZwLndyaXRlKGFyZ3MuZW1haWwuc3RyaXAoKSArICJcbiIpCisKKyAgICB3aXRoIG9wZW4oYXJncy5lcnJvcl9maWxlLCAncicpIGFzIGpzb25fZnA6CisgICAgICAgIGRhdGEgPSBqc29uX2ZwLnJlYWQoKQorCisgICAgICAgIGpzb25kYXRhID0ganNvbi5sb2FkcyhkYXRhKQorICAgICAgICBqc29uZGF0YVsndXNlcm5hbWUnXSA9IGFyZ3MubmFtZS5zdHJpcCgpCisgICAgICAgIGpzb25kYXRhWydlbWFpbCddID0gYXJncy5lbWFpbC5zdHJpcCgpCisgICAgICAgIGpzb25kYXRhWydsaW5rX2JhY2snXSA9IGFyZ3MubGlua19iYWNrLnN0cmlwKCkKKyAgICAgICAgIyBJZiB3ZSBnb3QgYSBtYXhfbG9nX3NpemUgdGhlbiB1c2UgdGhpcyB0byB0cnVuY2F0ZSB0byBnZXQgdGhlIGxhc3QKKyAgICAgICAgIyBtYXhfbG9nX3NpemUgYnl0ZXMgZnJvbSB0aGUgZW5kCisgICAgICAgIGlmIG1heF9sb2dfc2l6ZSAhPSAwOgorICAgICAgICAgICAgZm9yIGZhaWwgaW4ganNvbmRhdGFbJ2ZhaWx1cmVzJ106CisgICAgICAgICAgICAgICAgaWYgbGVuKGZhaWxbJ2xvZyddKSA+IG1heF9sb2dfc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlRydW5jYXRpbmcgbG9nIHRvIGFsbG93IGZvciB1cGxvYWQiCisgICAgICAgICAgICAgICAgICAgIGZhaWxbJ2xvZyddID0gZmFpbFsnbG9nJ11bLW1heF9sb2dfc2l6ZTpdCisKKyAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMoanNvbmRhdGEsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICMgV3JpdGUgYmFjayB0aGUgcmVzdWx0IHdoaWNoIHdpbGwgY29udGFpbiBhbGwgZmllbGRzIGZpbGxlZCBpbiBhbmQKKyAgICAjIGFueSBwb3N0IHByb2Nlc3NpbmcgZG9uZSBvbiB0aGUgbG9nIGRhdGEKKyAgICB3aXRoIG9wZW4oYXJncy5lcnJvcl9maWxlLCAidyIpIGFzIGpzb25fZnA6CisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBqc29uX2ZwLndyaXRlKGRhdGEpCisKKworICAgIGlmIGFyZ3MuYXNzdW1lX3llcyA9PSBGYWxzZSBhbmQgZWRpdF9jb250ZW50KGFyZ3MuZXJyb3JfZmlsZSk6CisgICAgICAgICNXZSdsbCBuZWVkIHRvIHJlLXJlYWQgdGhlIGNvbnRlbnQgaWYgd2UgZWRpdGVkIGl0CisgICAgICAgIHdpdGggb3BlbihhcmdzLmVycm9yX2ZpbGUsICdyJykgYXMganNvbl9mcDoKKyAgICAgICAgICAgIGRhdGEgPSBqc29uX2ZwLnJlYWQoKQorCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgc2VuZF9kYXRhKGRhdGEsIGFyZ3MpOgorICAgIGhlYWRlcnM9eydDb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdVc2VyLUFnZW50JzogInNlbmQtZXJyb3ItcmVwb3J0LyIrdmVyc2lvbn0KKworICAgIGlmIGFyZ3MuanNvbjoKKyAgICAgICAgdXJsID0gImh0dHA6Ly8iK2FyZ3Muc2VydmVyKyIvQ2xpZW50UG9zdC9KU09OLyIKKyAgICBlbHNlOgorICAgICAgICB1cmwgPSAiaHR0cDovLyIrYXJncy5zZXJ2ZXIrIi9DbGllbnRQb3N0LyIKKworICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCh1cmwsIGRhdGE9ZGF0YSwgaGVhZGVycz1oZWFkZXJzKQorICAgIHRyeToKKyAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciwgZToKKyAgICAgICAgbG9nZ2luZy5lcnJvcihlLnJlYXNvbikKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHByaW50IHJlc3BvbnNlLnJlYWQoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgYXJnX3BhcnNlID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IlRoaXMgc2NyaXB0cyB3aWxsIHNlbmQgYW4gZXJyb3IgcmVwb3J0IHRvIHlvdXIgc3BlY2lmaWVkIGVycm9yLXJlcG9ydC13ZWIgc2VydmVyLiIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCJlcnJvcl9maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkdlbmVyYXRlZCBlcnJvciByZXBvcnQgZmlsZSBsb2NhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0cikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi15IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWFzc3VtZS15ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQXNzdW1lIHllcyB0byBhbGwgcXVlcmllcyBhbmQgZG8gbm90IHByb21wdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tc2VydmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlNlcnZlciB0byBzZW5kIGVycm9yIHJlcG9ydCB0byIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImVycm9ycy55b2N0b3Byb2plY3Qub3JnIikKKworICAgIGFyZ19wYXJzZS5hZGRfYXJndW1lbnQoIi1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWVtYWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkVtYWlsIGFkZHJlc3MgdG8gYmUgdXNlZCBmb3IgY29udGFjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9IiIpCisKKyAgICBhcmdfcGFyc2UuYWRkX2FyZ3VtZW50KCItbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1uYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlN1Ym1pdHRlciBuYW1lIHVzZWQgdG8gaWRlbnRpZnkgeW91ciBlcnJvciByZXBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tbGluay1iYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkEgdXJsIHRvIGxpbmsgYmFjayB0byB0aGlzIGJ1aWxkIGZyb20gdGhlIGVycm9yIHJlcG9ydCBzZXJ2ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSIiKQorCisgICAgYXJnX3BhcnNlLmFkZF9hcmd1bWVudCgiLWoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tanNvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJSZXR1cm4gdGhlIHJlc3VsdCBpbiBqc29uIGZvcm1hdCwgc2lsZW5jZXMgYWxsIG90aGVyIG91dHB1dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiKQorCisKKworICAgIGFyZ3MgPSBhcmdfcGFyc2UucGFyc2VfYXJncygpCisKKyAgICBpZiAoYXJncy5qc29uID09IEZhbHNlKToKKyAgICAgICAgcHJpbnQgIlByZXBhcmluZyB0byBzZW5kIGVycm9ycyB0bzogIithcmdzLnNlcnZlcgorCisgICAgZGF0YSA9IHByZXBhcmVfZGF0YShhcmdzKQorICAgIHNlbmRfZGF0YShkYXRhLCBhcmdzKQorCisgICAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2VuZC1wdWxsLXJlcXVlc3QgYi9zY3JpcHRzL3NlbmQtcHVsbC1yZXF1ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU3NTU0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3NlbmQtcHVsbC1yZXF1ZXN0CkBAIC0wLDAgKzEsMTc5IEBACisjIS9iaW4vYmFzaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgUmlnaHRzIFJlc2VydmVkCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gc2VuZCBhIHBhdGNoIHNlcmllcyBwcmVwYXJlZCBieSB0aGUKKyMgY3JlYXRlLXB1bGwtcmVxdWVzdCBzY3JpcHQgdG8gT3BlbiBFbWJlZGRlZCBhbmQgVGhlIFlvY3RvIFByb2plY3QsIGFzIHdlbGwKKyMgYXMgdG8gcmVsYXRlZCBwcm9qZWN0cyBhbmQgbGF5ZXJzLgorIworCitBVVRPPTAKK0FVVE9fQ0w9MAorR0lUU09CQ0M9Ii0tc3VwcHJlc3MtY2M9YWxsIgorCisjIFByZXZlbnQgZW52aXJvbm1lbnQgbGVha2FnZSB0byB0aGVzZSB2YXJzLgordW5zZXQgVE8KK3Vuc2V0IENDCit1bnNldCBBVVRPX0NDCit1bnNldCBFWFRSQV9DQworCit1c2FnZSgpCit7CitjYXQgPDxFT00KK1VzYWdlOiAkKGJhc2VuYW1lICQwKSBbLWhdIFstYV0gWy1jXSBbWy10IGVtYWlsXS4uLl0gLXAgcHVsbC1kaXIgCisgIC1hICAgICAgICAgICBTZW5kIHRoZSBjb3ZlciBsZXR0ZXIgdG8gZXZlcnkgcmVjaXBpZW50IGxpc3RlZCBpbiBDYyBhbmQKKyAgICAgICAgICAgICAgIFNpZ25lZC1vZmYtYnkgbGluZXMgZm91bmQgaW4gdGhlIGNvdmVyIGxldHRlciBhbmQgdGhlIHBhdGNoZXMuCisJICAgICAgIFRoaXMgb3B0aW9uIGltcGxpZXMgLWMuCisgIC1jICAgICAgICAgICBFeHBhbmQgdGhlIENjIGxpc3QgZm9yIHRoZSBpbmRpdmlkdWFsIHBhdGNoZXMgdXNpbmcgdGhlIENjIGFuZAorICAgICAgICAgICAgICAgU2lnbmVkLW9mZi1ieSBsaW5lcyBmcm9tIHRoZSBzYW1lIHBhdGNoLgorICAtQyAgICAgICAgICAgQWRkIGV4dHJhIENDIHRvIGVhY2ggZW1haWwgc2VudC4KKyAgLXAgcHVsbC1kaXIgIERpcmVjdG9yeSBjb250YWluaW5nIHN1bW1hcnkgYW5kIHBhdGNoIGZpbGVzCisgIC10IGVtYWlsICAgICBFeHBsaWNpdGx5IGFkZCBlbWFpbCB0byB0aGUgcmVjaXBpZW50cworRU9NCit9CisKKyMgQ29sbGVjdCBhZGRyZXNzZXMgZnJvbSBhIHBhdGNoIGludG8gQVVUT19DQworIyAkMTogYSBwYXRjaCBmaWxlCitoYXJ2ZXN0X3JlY2lwaWVudHMoKQoreworCVBBVENIPSQxCisJZXhwb3J0IElGUz0kJyxcbicKKwlmb3IgUkVHWCBpbiAiXltDY11bQ2NdOiAqIiAiXltTc11pZ25lZC1bT29dZmYtW0JiXXk6ICoiOyBkbworCQlmb3IgRU1BSUwgaW4gJChzZWQgJy9eLS0tJC9xJyAkUEFUQ0ggfCBncmVwIC1lICIkUkVHWCIgfCBzZWQgInMvJFJFR1gvLyIpOyBkbworCQkJaWYgWyAiJHtBVVRPX0NDLyRFTUFJTC99IiA9PSAiJEFVVE9fQ0MiIF0gJiYgWyAtbiAiJEVNQUlMIiBdOyB0aGVuCisJCQkJaWYgWyAteiAiJEFVVE9fQ0MiIF07IHRoZW4KKwkJCQkJQVVUT19DQz0kRU1BSUw7CisJCQkJZWxzZQorCQkJCQlBVVRPX0NDPSIkQVVUT19DQywkRU1BSUwiOworCQkJCWZpCisJCQlmaQorCQlkb25lCisJZG9uZQorCXVuc2V0IElGUworfQorCisjIFBhcnNlIGFuZCB2ZXJpZnkgYXJndW1lbnRzCit3aGlsZSBnZXRvcHRzICJhY0M6aHA6dDoiIE9QVDsgZG8KKwljYXNlICRPUFQgaW4KKwlhKQorCQlBVVRPPTEKKwkJR0lUU09CQ0M9Ii0tc2lnbmVkLW9mZi1ieS1jYyIKKwkJQVVUT19DTD0xCisJCTs7CisJYykKKwkJQVVUTz0xCisJCUdJVFNPQkNDPSItLXNpZ25lZC1vZmYtYnktY2MiCisJCTs7CisJQykKKwkJRVhUUkFfQ0M9IiRPUFRBUkciCisJCTs7CisJaCkKKwkJdXNhZ2UKKwkJZXhpdCAwCisJCTs7CisJcCkKKwkJUERJUj0ke09QVEFSRyUvfQorCQlpZiBbICEgLWQgJFBESVIgXTsgdGhlbgorCQkJZWNobyAiRVJST1I6IHB1bGwtZGlyIFwiJFBESVJcIiBkb2VzIG5vdCBleGlzdC4iCisJCQl1c2FnZQorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJdCkKKwkJaWYgWyAtbiAiJFRPIiBdOyB0aGVuCisJCQlUTz0iJFRPLCRPUFRBUkciCisJCWVsc2UKKwkJCVRPPSIkT1BUQVJHIgorCQlmaQorCQk7OworCWVzYWMKK2RvbmUKKworaWYgWyAteiAiJFBESVIiIF07IHRoZW4KKwllY2hvICJFUlJPUjogeW91IG11c3Qgc3BlY2lmeSBhIHB1bGwtZGlyLiIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworCisjIFZlcmlmeSB0aGUgY292ZXIgbGV0dGVyIGlzIGNvbXBsZXRlIGFuZCBmcmVlIG9mIHRva2VucworaWYgWyAtZSAkUERJUi8wMDAwLWNvdmVyLWxldHRlci5wYXRjaCBdOyB0aGVuCisJQ0w9IiRQRElSLzAwMDAtY292ZXItbGV0dGVyLnBhdGNoIgorCWZvciBUT0tFTiBpbiBTVUJKRUNUIEJMVVJCOyBkbworCQlncmVwIC1xICIqKiogJFRPS0VOIEhFUkUgKioqIiAiJENMIgorCQlpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwkJCWVjaG8gIkVSUk9SOiBQbGVhc2UgZWRpdCAkQ0wgYW5kIHRyeSBhZ2FpbiAoTG9vayBmb3IgJyoqKiAkVE9LRU4gSEVSRSAqKionKS4iCisJCQlleGl0IDEKKwkJZmkKKwlkb25lCitlbHNlCisJZWNobyAiV0FSTklORzogTm8gY292ZXIgbGV0dGVyIHdpbGwgYmUgc2VudC4iCitmaQorCisjIEhhcnZlc3QgZW1haWxzIGZyb20gdGhlIGdlbmVyYXRlZCBwYXRjaGVzIGFuZCBwb3B1bGF0ZSBBVVRPX0NDLgoraWYgWyAkQVVUT19DTCAtZXEgMSBdOyB0aGVuCisJZm9yIFBBVENIIGluICRQRElSLyoucGF0Y2g7IGRvCisJCWhhcnZlc3RfcmVjaXBpZW50cyAkUEFUQ0gKKwlkb25lCitmaQorCitBVVRPX1RPPSIkKGdpdCBjb25maWcgc2VuZGVtYWlsLnRvKSIKK2lmIFsgLW4gIiRBVVRPX1RPIiBdOyB0aGVuCisJaWYgWyAtbiAiJFRPIiBdOyB0aGVuCisJCVRPPSIkVE8sJEFVVE9fVE8iCisJZWxzZQorCQlUTz0iJEFVVE9fVE8iCisJZmkKK2ZpCisKK2lmIFsgLXogIiRUTyIgXSAmJiBbIC16ICIkQVVUT19DQyIgXTsgdGhlbgorCWVjaG8gIkVSUk9SOiB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGFueSByZWNpcGllbnRzLiIKKwl1c2FnZQorCWV4aXQgMQorZmkKKworCisjIENvbnZlcnQgdGhlIGNvbGxlY3RlZCBhZGRyZXNzZXMgaW50byBnaXQtc2VuZC1lbWFpbCBhcmd1bWVudCBzdHJpbmdzCitleHBvcnQgSUZTPSQnLCcKK0dJVF9UTz0kKGZvciBSIGluICRUTzsgZG8gZWNobyAtbiAiLS10bz0nJFInICI7IGRvbmUpCitHSVRfQ0M9JChmb3IgUiBpbiAkQVVUT19DQzsgZG8gZWNobyAtbiAiLS1jYz0nJFInICI7IGRvbmUpCitHSVRfRVhUUkFfQ0M9JChmb3IgUiBpbiAkRVhUUkFfQ0M7IGRvIGVjaG8gLW4gIi0tY2M9JyRSJyAiOyBkb25lKQordW5zZXQgSUZTCisKKyMgSGFuZG9mZiB0byBnaXQtc2VuZC1lbWFpbC4gSXQgd2lsbCBwZXJmb3JtIHRoZSBzZW5kIGNvbmZpcm1hdGlvbi4KK1BBVENIRVM9JChlY2hvICRQRElSLyoucGF0Y2gpCitpZiBbICRBVVRPX0NMIC1lcSAxIF07IHRoZW4KKwkjIFNlbmQgdGhlIGNvdmVyIGxldHRlciB0byBldmVyeSByZWNpcGllbnQsIGJvdGggc3BlY2lmaWVkIGFzIHdlbGwgYXMKKwkjIGhhcnZlc3RlZC4gVGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgcGF0Y2hlcyBsaXN0LgorCWV2YWwgImdpdCBzZW5kLWVtYWlsICRHSVRfVE8gJEdJVF9DQyAkR0lUX0VYVFJBX0NDIC0tY29uZmlybT1hbHdheXMgLS1uby1jaGFpbi1yZXBseS10byAtLXN1cHByZXNzLWNjPWFsbCAkQ0wiCisJaWYgWyAkPyAtZXEgMSBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBmYWlsZWQgdG8gc2VuZCBjb3Zlci1sZXR0ZXIgd2l0aCBhdXRvbWF0aWMgcmVjaXBpZW50cy4iCisJCWV4aXQgMQorCWZpCisJUEFUQ0hFUz0ke1BBVENIRVMvIiRDTCIvfQorZmkKKworIyBTZW5kIHRoZSBwYXRjaCB0byB0aGUgc3BlY2lmaWVkIHJlY2lwaWVudHMgYW5kLCBpZiAtYyB3YXMgc3BlY2lmaWVkLCB0aG9zZSBnaXQKKyMgZmluZHMgaW4gdGhpcyBzcGVjaWZpYyBwYXRjaC4KK2V2YWwgImdpdCBzZW5kLWVtYWlsICRHSVRfVE8gJEdJVF9FWFRSQV9DQyAtLWNvbmZpcm09YWx3YXlzIC0tbm8tY2hhaW4tcmVwbHktdG8gJEdJVFNPQkNDICRQQVRDSEVTIgoraWYgWyAkPyAtZXEgMSBdOyB0aGVuCisJZWNobyAiRVJST1I6IGZhaWxlZCB0byBzZW5kIHBhdGNoZXMuIgorCWV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggYi9zY3JpcHRzL3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyODY3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3NzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoCkBAIC0wLDAgKzEsNDY5IEBACisjIS9iaW4vYmFzaAorCisjICBDb3B5cmlnaHQgKGMpIDIwMTIgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMgR2xvYmFsIHZhcnMKK2NhY2hlX2Rpcj0KK2NvbmZpcm09Citmc3ltPQordG90YWxfZGVsZXRlZD0wCit2ZXJib3NlPQorZGVidWc9MAorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gc3N0YXRlIGNhY2hlIG1hbmFnZW1lbnQgdXRpbGl0aWVzLgorc3N0YXRlLWNhY2hlLW1hbmFnZW1lbnQuc2ggPE9QVElPTj4KKworT3B0aW9uczoKKyAgLWgsIC0taGVscAorICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKworICAtLWNhY2hlLWRpcj08c3N0YXRlIGNhY2hlIGRpcj4KKyAgICAgICAgU3BlY2lmeSBzc3RhdGUgY2FjaGUgZGlyZWN0b3J5LCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgdmFyaWFibGUgU1NUQVRFX0NBQ0hFX0RJUiBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorCisgIC0tZXh0cmEtYXJjaHM9PGFyY2gxPiw8YXJjaDI+Li4uPGFyY2huPgorICAgICAgICBTcGVjaWZ5IGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcyB3aGljaCBzaG91bGQgYmUgdGVzdGVkLCB0aGlzIGxpc3QKKyAgICAgICAgd2lsbCBiZSBleHRlbmRlZCB3aXRoIG5hdGl2ZSBhcmNoLCBhbGxhcmNoIGFuZCBlbXB0eSBhcmNoLiBUaGUKKyAgICAgICAgc2NyaXB0IHdvbid0IGJlIHRyeWluZyB0byBnZW5lcmF0ZSBsaXN0IG9mIGF2YWlsYWJsZSBhcmNocyBmcm9tCisgICAgICAgIEFWQUlMVFVORVMgaW4gdHVuZSBmaWxlcy4KKworICAtLWV4dHJhLWxheWVyPTxsYXllcjE+LDxsYXllcjI+Li4uPGxheWVybj4KKyAgICAgICAgU3BlY2lmeSB0aGUgbGF5ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBzZWFyY2hpbmcgdGhlIGFyY2hzLAorICAgICAgICBpdCB3aWxsIHNlYXJjaCB0aGUgbWV0YSBhbmQgbWV0YS0qIGxheWVycyBpbiB0aGUgdG9wIGRpciBieQorICAgICAgICBkZWZhdWx0LCBhbmQgd2lsbCBzZWFyY2ggbWV0YSwgbWV0YS0qLCA8bGF5ZXIxPiwgPGxheWVyMj4sCisgICAgICAgIC4uLjxsYXllcm4+IHdoZW4gc3BlY2lmaWVkLiBVc2UgIiwiIGFzIHRoZSBzZXBhcmF0b3IuCisKKyAgICAgICAgVGhpcyBpcyB1c2VsZXNzIGZvciAtLXN0YW1wcy1kaXIgb3Igd2hlbiAtLWV4dHJhLWFyY2hzIGlzIHVzZWQuCisKKyAgLWQsIC0tcmVtb3ZlLWR1cGxpY2F0ZWQKKyAgICAgICAgUmVtb3ZlIHRoZSBkdXBsaWNhdGVkIHNzdGF0ZSBjYWNoZSBmaWxlcyBvZiBvbmUgcGFja2FnZSwgb25seQorICAgICAgICB0aGUgbmV3ZXN0IG9uZSB3aWxsIGJlIGtlcHQuIFRoZSBkdXBsaWNhdGVkIHNzdGF0ZSBjYWNoZSBmaWxlcworICAgICAgICBvZiBvbmUgcGFja2FnZSBtdXN0IGhhdmUgdGhlIHNhbWUgYXJjaCwgd2hpY2ggbWVhbnMgc3N0YXRlIGNhY2hlCisgICAgICAgIGZpbGVzIHdpdGggbXVsdGlwbGUgYXJjaHMgYXJlIG5vdCBjb25zaWRlcmVkIGR1cGxpY2F0ZS4KKworICAgICAgICBDb25mbGljdHMgd2l0aCAtLXN0YW1wcy1kaXIuCisKKyAgLS1zdGFtcHMtZGlyPTxkaXIxPiw8ZGlyMj4uLi48ZGlybj4KKyAgICAgICAgU3BlY2lmeSB0aGUgYnVpbGQgZGlyZWN0b3J5J3Mgc3RhbXBzIGRpcmVjdG9yaWVzLCB0aGUgc3N0YXRlCisgICAgICAgIGNhY2hlIGZpbGUgd2hpY2ggSVMgVVNFRCBieSB0aGVzZSBidWlsZCBkaXJldG9yaWVzIHdpbGwgYmUgS0VQVCwKKyAgICAgICAgb3RoZXIgc3N0YXRlIGNhY2hlIGZpbGVzIGluIGNhY2hlLWRpciB3aWxsIGJlIHJlbW92ZWQuIFVzZSAiLCIKKyAgICAgICAgYXMgdGhlIHNlcGFyYXRvci4gRm9yIGV4YW1wbGU6CisgICAgICAgIC0tc3RhbXBzLWRpcj1idWlsZDEvdG1wL3N0YW1wcyxidWlsZDIvdG1wL3N0YW1wcworCisgICAgICAgIENvbmZsaWN0cyB3aXRoIC0tcmVtb3ZlLWR1cGxpY2F0ZWQuCisKKyAgLUwsIC0tZm9sbG93LXN5bWxpbmsKKyAgICAgICAgUmVtb3ZlIGJvdGggdGhlIHN5bWJvbCBsaW5rIGFuZCB0aGUgZGVzdGluYXRpb24gZmlsZSwgZGVmYXVsdDogbm8uCisKKyAgLXksIC0teWVzCisgICAgICAgIEF1dG9tYXRpYyB5ZXMgdG8gcHJvbXB0czsgYXNzdW1lICJ5ZXMiIGFzIGFuc3dlciB0byBhbGwgcHJvbXB0cworICAgICAgICBhbmQgcnVuIG5vbi1pbnRlcmFjdGl2ZWx5LgorCisgIC12LCAtLXZlcmJvc2UKKyAgICAgICAgRXhwbGFpbiB3aGF0IGlzIGJlaW5nIGRvbmUuCisKKyAgLUQsIC0tZGVidWcKKyAgICAgICAgU2hvdyBkZWJ1ZyBpbmZvLCByZXBlYXQgZm9yIG1vcmUgZGVidWcgaW5mby4KKworRU9GCit9CisKK2lmIFsgJCMgLWx0IDEgXTsgdGhlbgorICB1c2FnZQorICBleGl0IDAKK2ZpCisKKyMgRWNobyBubyBmaWxlcyB0byByZW1vdmUKK25vX2ZpbGVzICgpIHsKKyAgICBlY2hvIE5vIGZpbGVzIHRvIHJlbW92ZQorfQorCisjIEVjaG8gbm90aGluZyB0byBkbworZG9fbm90aGluZyAoKSB7CisgICBlY2hvIE5vdGhpbmcgdG8gZG8KK30KKworIyBSZWFkIHRoZSBpbnB1dCAieSIKK3JlYWRfY29uZmlybSAoKSB7CisgIGVjaG8gIiR0b3RhbF9kZWxldGVkIGZyb20gJHRvdGFsX2ZpbGVzIGZpbGVzIHdpbGwgYmUgcmVtb3ZlZCEgIgorICBpZiBbICIkY29uZmlybSIgIT0gInkiIF07IHRoZW4KKyAgICAgIGVjaG8gIkRvIHlvdSB3YW50IHRvIGNvbnRpbnVlICh5L24pPyAiCisgICAgICB3aGlsZSByZWFkIGNvbmZpcm07IGRvCisgICAgICAgICAgWyAiJGNvbmZpcm0iID0gIlkiIC1vICIkY29uZmlybSIgPSAieSIgLW8gIiRjb25maXJtIiA9ICJuIiBcCisgICAgICAgICAgICAtbyAiJGNvbmZpcm0iID0gIk4iIF0gJiYgYnJlYWsKKyAgICAgICAgICBlY2hvICJJbnZhbGlkIGlucHV0IFwiJGNvbmZpcm1cIiwgcGxlYXNlIGlucHV0ICd5JyBvciAnbic6ICIKKyAgICAgIGRvbmUKKyAgZWxzZQorICAgICAgZWNobworICBmaQorfQorCisjIFByaW50IGVycm9yIGluZm9ybWF0aW9uIGFuZCBleGl0LgorZWNob19lcnJvciAoKSB7CisgIGVjaG8gIkVSUk9SOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCisjIEdlbmVyYXRlIHRoZSByZW1vdmUgbGlzdDoKKyMKKyMgKiBBZGQgLmRvbmUvLnNpZ2luZm8gdG8gdGhlIHJlbW92ZSBsaXN0CisjICogQWRkIGRlc3RpbmF0aW9uIG9mIHN5bWxpbmsgdG8gdGhlIHJlbW92ZSBsaXN0CisjCisjICQxOiBvdXRwdXQgZmlsZSwgb3RoZXJzOiBzc3RhdGUgY2FjaGUgZmlsZSAoLnRneikKK2dlbl9ybWxpc3QgKCl7CisgIGxvY2FsIHJtbGlzdF9maWxlPSIkMSIKKyAgc2hpZnQKKyAgbG9jYWwgZmlsZXM9IiRAIgorICBmb3IgaSBpbiAkZmlsZXM7IGRvCisgICAgICBlY2hvICRpID4+ICRybWxpc3RfZmlsZQorICAgICAgIyBBZGQgdGhlICIuc2lnaW5mbyIKKyAgICAgIGlmIFsgLWUgJGkuc2lnaW5mbyBdOyB0aGVuCisgICAgICAgICAgZWNobyAkaS5zaWdpbmZvID4+ICRybWxpc3RfZmlsZQorICAgICAgZmkKKyAgICAgICMgQWRkIHRoZSBkZXN0aW5hdGlvbiBvZiBzeW1saW5rCisgICAgICBpZiBbIC1MICIkaSIgXTsgdGhlbgorICAgICAgICAgIGlmIFsgIiRmc3ltIiA9ICJ5IiBdOyB0aGVuCisgICAgICAgICAgICAgIGRlc3Q9ImByZWFkbGluayAtZSAkaWAiCisgICAgICAgICAgICAgIGlmIFsgLW4gIiRkZXN0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBlY2hvICRkZXN0ID4+ICRybWxpc3RfZmlsZQorICAgICAgICAgICAgICAgICAgIyBSZW1vdmUgdGhlIC5zaWdpbmZvIHdoZW4gLnRneiBpcyByZW1vdmVkCisgICAgICAgICAgICAgICAgICBpZiBbIC1mICIkZGVzdC5zaWdpbmZvIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZGVzdC5zaWdpbmZvID4+ICRybWxpc3RfZmlsZQorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICAgICMgQWRkIHRoZSAiLnRnei5kb25lIiBhbmQgIi5zaWdpbmZvLmRvbmUiIChtYXkgZXhpc3QgaW4gdGhlIGZ1dHVyZSkKKyAgICAgICAgICBiYXNlX2ZuPSIke2kjIy8qL30iCisgICAgICAgICAgdF9mbj0iJGJhc2VfZm4uZG9uZSIKKyAgICAgICAgICBzX2ZuPSIkYmFzZV9mbi5zaWdpbmZvLmRvbmUiCisgICAgICAgICAgZm9yIGQgaW4gJHRfZm4gJHNfZm47IGRvCisgICAgICAgICAgICAgIGlmIFsgLWYgJGNhY2hlX2Rpci8kZCBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBlY2hvICRjYWNoZV9kaXIvJGQgPj4gJHJtbGlzdF9maWxlCisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgZG9uZQorICAgICAgZmkKKyAgZG9uZQorfQorCisjIFJlbW92ZSB0aGUgZHVwbGljYXRlZCBjYWNoZSBmaWxlcyBmb3IgdGhlIHBrZywga2VlcCB0aGUgbmV3ZXN0IG9uZQorcmVtb3ZlX2R1cGxpY2F0ZWQgKCkgeworCisgIGxvY2FsIHRvcGRpcgorICBsb2NhbCBvZV9jb3JlX2RpcgorICBsb2NhbCB0dW5lZGlycworICBsb2NhbCBhbGxfYXJjaHMKKyAgbG9jYWwgYWxsX21hY2hpbmVzCisgIGxvY2FsIGF2YV9hcmNocworICBsb2NhbCBhcmNoCisgIGxvY2FsIGZpbGVfbmFtZXMKKyAgbG9jYWwgc3N0YXRlX2ZpbGVzX2xpc3QKKyAgbG9jYWwgZm5fdG1wCisgIGxvY2FsIGxpc3Rfc3VmZml4PWBta3RlbXBgIHx8IGV4aXQgMQorCisgIGlmIFsgLXogIiRleHRyYV9hcmNocyIgXSA7IHRoZW4KKyAgICAjIEZpbmQgb3V0IHRoZSBhcmNocyBpbiBhbGwgdGhlIGxheWVycworICAgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgYXJjaHMgaW4gdGhlIGxheWVycyAuLi4gIgorICAgIG9lX2NvcmVfZGlyPSQoZGlybmFtZSAkKGRpcm5hbWUgJChyZWFkbGluayAtZSAkMCkpKQorICAgIHRvcGRpcj0kKGRpcm5hbWUgJG9lX2NvcmVfZGlyKQorICAgIHR1bmVkaXJzPSJgZmluZCAkdG9wZGlyL21ldGEqICR7b2VfY29yZV9kaXJ9L21ldGEqICRsYXllcnMgLXBhdGggJyovbWV0YSovY29uZi9tYWNoaW5lL2luY2x1ZGUnIDI+L2Rldi9udWxsYCIKKyAgICBbIC1uICIkdHVuZWRpcnMiIF0gfHwgZWNob19lcnJvciAiQ2FuJ3QgZmluZCB0aGUgdHVuZSBkaXJlY3RvcnkiCisgICAgYWxsX21hY2hpbmVzPSJgZmluZCAkdG9wZGlyL21ldGEqICR7b2VfY29yZV9kaXJ9L21ldGEqICRsYXllcnMgLXBhdGggJyovbWV0YSovY29uZi9tYWNoaW5lLyonIC1uYW1lICcqLmNvbmYnIDI+L2Rldi9udWxsIHwgc2VkIC1lICdzLy4qXC8vLycgLWUgJ3MvLmNvbmYkLy8nYCIKKyAgICBhbGxfYXJjaHM9YGdyZXAgLXIgLWggIl5BVkFJTFRVTkVTIC4qPSIgJHR1bmVkaXJzIHwgc2VkIC1lICdzLy4qPS8vJyAtZSAncy9cIi8vZydgCisgIGZpCisKKyAgIyBVc2UgdGhlICJfIiB0byBzdWJzdGl0dXRlICItIiwgZS5nLiwgeDg2LTY0IHRvIHg4Nl82NCwgYnV0IG5vdCBmb3IgZXh0cmFfYXJjaHMgd2hpY2ggY2FuIGJlIHNvbWV0aGluZyBsaWtlIGNvcnRleGE5dDItdmZwLW5lb24KKyAgIyBTb3J0IHRvIHJlbW92ZSB0aGUgZHVwbGljYXRlZCBvbmVzCisgICMgQWRkIGFsbGFyY2ggYW5kIGJ1aWxkZXIgYXJjaCAobmF0aXZlKQorICBidWlsZGVyX2FyY2g9JCh1bmFtZSAtbSkKKyAgYWxsX2FyY2hzPSIkKGVjaG8gYWxsYXJjaCAkYWxsX2FyY2hzICRhbGxfbWFjaGluZXMgJGJ1aWxkZXJfYXJjaCBcCisgICAgICAgICAgfCBzZWQgLWUgJ3MvLS9fL2cnIC1lICdzLyAvXG4vZycgfCBzb3J0IC11KSAkZXh0cmFfYXJjaHMiCisgIGVjaG8gIkRvbmUiCisKKyAgIyBUb3RhbCBudW1iZXIgb2YgZmlsZXMgaW5jbHVkaW5nIHNzdGF0ZS0sIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcworICB0b3RhbF9maWxlcz1gZmluZCAkY2FjaGVfZGlyIC1uYW1lICdzc3RhdGUqJyB8IHdjIC1sYAorICAjIFNhdmUgYWxsIHRoZSBzc3RhdGUgZmlsZXMgaW4gYSBmaWxlCisgIHNzdGF0ZV9maWxlc19saXN0PWBta3RlbXBgIHx8IGV4aXQgMQorICBmaW5kICRjYWNoZV9kaXIgLW5hbWUgJ3NzdGF0ZToqOio6KjoqOio6KjoqLnRneionID4kc3N0YXRlX2ZpbGVzX2xpc3QKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIHN1ZmZpeGVzIGluIHRoZSBzc3RhdGUgY2FjaGUgZGlyIC4uLiAiCisgIHNzdGF0ZV9zdWZmaXhlcz0iYHNlZCAncyUuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W15fXSpfXChbXjpdKlwpXC50Z3ouKiVcMSVnJyAkc3N0YXRlX2ZpbGVzX2xpc3QgfCBzb3J0IC11YCIKKyAgZWNobyAiRG9uZSIKKyAgZWNobyAiVGhlIGZvbGxvd2luZyBzdWZmaXhlcyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIGNhY2hlIGRpcjoiCisgIGVjaG8gJHNzdGF0ZV9zdWZmaXhlcworCisgIGVjaG8gIkZpZ3VyaW5nIG91dCB0aGUgYXJjaHMgaW4gdGhlIHNzdGF0ZSBjYWNoZSBkaXIgLi4uICIKKyAgIyBVc2luZyB0aGlzIFNTVEFURV9QS0dTUEVDIGRlZmluaXRpb24gaXQncyA2dGggY29sb24gc2VwYXJhdGVkIGZpZWxkCisgICMgU1NUQVRFX1BLR1NQRUMgICAgPSAic3N0YXRlOiR7UE59OiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9OiR7UFZ9OiR7UFJ9OiR7U1NUQVRFX1BLR0FSQ0h9OiR7U1NUQVRFX1ZFUlNJT059OiIKKyAgZm9yIGFyY2ggaW4gJGFsbF9hcmNoczsgZG8KKyAgICAgIGdyZXAgLXEgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjokYXJjaDpbXjpdKjpbXjpdKlwudGd6JCIgJHNzdGF0ZV9maWxlc19saXN0CisgICAgICBbICQ/IC1lcSAwIF0gJiYgYXZhX2FyY2hzPSIkYXZhX2FyY2hzICRhcmNoIgorICAgICAgIyAke2J1aWxkZXJfYXJjaH1fJGFyY2ggdXNlZCBieSB0b29sY2hhaW4gc3N0YXRlCisgICAgICBncmVwIC1xICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6JHtidWlsZGVyX2FyY2h9XyRhcmNoOlteOl0qOlteOl0qXC50Z3okIiAkc3N0YXRlX2ZpbGVzX2xpc3QKKyAgICAgIFsgJD8gLWVxIDAgXSAmJiBhdmFfYXJjaHM9IiRhdmFfYXJjaHMgJHtidWlsZGVyX2FyY2h9XyRhcmNoIgorICBkb25lCisgIGVjaG8gIkRvbmUiCisgIGVjaG8gIlRoZSBmb2xsb3dpbmcgYXJjaHMgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBjYWNoZSBkaXI6IgorICBlY2hvICRhdmFfYXJjaHMKKyAgZWNobyAiIgorCisgICMgU2F2ZSB0aGUgZmlsZSBsaXN0IHdoaWNoIG5lZWRzIHRvIGJlIHJlbW92ZWQKKyAgbG9jYWwgcmVtb3ZlX2xpc3RkaXI9YG1rdGVtcCAtZGAgfHwgZXhpdCAxCisgIGZvciBzdWZmaXggaW4gJHNzdGF0ZV9zdWZmaXhlczsgZG8KKyAgICAgIGlmIFsgIiRzdWZmaXgiID0gInBvcHVsYXRlX2xpYyIgXSA7IHRoZW4KKyAgICAgICAgICBlY2hvICJTa2lwcGluZyBwb3B1bGF0ZV9saWMsIGJlY2F1c2UgcmVtb3ZpbmcgZHVwbGljYXRlcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGZvciB0aGVtICh1c2UgLS1zdGFtcHMtZGlyIGluc3RlYWQpIgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICBmaQorICAgICAgIyBUb3RhbCBudW1iZXIgb2YgZmlsZXMgaW5jbHVkaW5nIC5zaWdpbmZvIGFuZCAuZG9uZSBmaWxlcworICAgICAgdG90YWxfZmlsZXNfc3VmZml4PWBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146X10qXyRzdWZmaXhcLnRnei4qIiAkc3N0YXRlX2ZpbGVzX2xpc3QgfCB3YyAtbCAyPi9kZXYvbnVsbGAKKyAgICAgIHRvdGFsX3Rnel9zdWZmaXg9YGdyZXAgIi4qL3NzdGF0ZTpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpdKjpbXjpfXSpfJHN1ZmZpeFwudGd6JCIgJHNzdGF0ZV9maWxlc19saXN0IHwgd2MgLWwgMj4vZGV2L251bGxgCisgICAgICAjIFNhdmUgdGhlIGZpbGUgbGlzdCB0byBhIGZpbGUsIHNvbWUgc3VmZml4J3MgZmlsZSBtYXkgbm90IGV4aXN0CisgICAgICBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146X10qXyRzdWZmaXhcLnRnei4qIiAkc3N0YXRlX2ZpbGVzX2xpc3QgPiRsaXN0X3N1ZmZpeCAyPi9kZXYvbnVsbAorICAgICAgbG9jYWwgZGVsZXRlZF90Z3o9MAorICAgICAgbG9jYWwgZGVsZXRlZF9maWxlcz0wCisgICAgICBmb3IgZXh0IGluIHRneiB0Z3ouc2lnaW5mbyB0Z3ouZG9uZTsgZG8KKyAgICAgICAgICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIHNzdGF0ZTp4eHhfJHN1ZmZpeC4kZXh0IC4uLiAiCisgICAgICAgICAgIyBVbmlxIEJQTnMKKyAgICAgICAgICBmaWxlX25hbWVzPWBmb3IgYXJjaCBpbiAkYXZhX2FyY2hzICIiOyBkbworICAgICAgICAgICAgICBzZWQgLW5lICJzJS4qL3NzdGF0ZTpcKFteOl0qXCk6W146XSo6W146XSo6W146XSo6JGFyY2g6W146XSo6W146XSpcLiR7ZXh0fSQlXDElcCIgJGxpc3Rfc3VmZml4CisgICAgICAgICAgZG9uZSB8IHNvcnQgLXVgCisKKyAgICAgICAgICBmbl90bXA9YG1rdGVtcGAgfHwgZXhpdCAxCisgICAgICAgICAgcm1fbGlzdD0iJHJlbW92ZV9saXN0ZGlyL3NzdGF0ZTp4eHhfJHN1ZmZpeCIKKyAgICAgICAgICBmb3IgZm4gaW4gJGZpbGVfbmFtZXM7IGRvCisgICAgICAgICAgICAgIFsgLXogIiR2ZXJib3NlIiBdIHx8IGVjaG8gIkFuYWx5emluZyBzc3RhdGU6JGZuLXh4eF8kc3VmZml4LiR7ZXh0fSIKKyAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gJGF2YV9hcmNocyAiIjsgZG8KKyAgICAgICAgICAgICAgICAgIGdyZXAgLWggIi4qL3NzdGF0ZTokZm46W146XSo6W146XSo6W146XSo6JGFyY2g6W146XSo6W146XSpcLiR7ZXh0fSQiICRsaXN0X3N1ZmZpeCA+JGZuX3RtcAorICAgICAgICAgICAgICAgICAgaWYgWyAtcyAkZm5fdG1wIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDEgXSAmJiBlY2hvICJBdmFpbGFibGUgZmlsZXMgZm9yICRmbi0kYXJjaC0gd2l0aCBzdWZmaXggJHN1ZmZpeC4ke2V4dH06IiAmJiBjYXQgJGZuX3RtcAorICAgICAgICAgICAgICAgICAgICAgICMgVXNlIHRoZSBtb2RpZmljYXRpb24gdGltZQorICAgICAgICAgICAgICAgICAgICAgIHRvX2RlbD0kKGxzIC10ICQoY2F0ICRmbl90bXApIHwgc2VkIC1uICcxIXAnKQorICAgICAgICAgICAgICAgICAgICAgIFsgJGRlYnVnIC1ndCAyIF0gJiYgZWNobyAiQ29uc2lkZXJpbmcgdG8gZGVsZXRlOiAkdG9fZGVsIgorICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHNzdGF0ZSBmaWxlIHdoaWNoIGlzIGRvd25sb2FkZWQgZnJvbSB0aGUgU1NUQVRFX01JUlJPUiBpcworICAgICAgICAgICAgICAgICAgICAgICMgcHV0IGluIFNTVEFURV9ESVIsIGFuZCB0aGVyZSBpcyBhIHN5bWxpbmsgaW4gU1NUQVRFX0RJUi8/Py8gdG8KKyAgICAgICAgICAgICAgICAgICAgICAjIGl0LCBzbyBmaWx0ZXIgaXQgb3V0IGZyb20gdGhlIHJlbW92ZSBsaXN0IGlmIGl0IHNob3VsZCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgICAgdG9fa2VlcD0kKGxzIC10ICQoY2F0ICRmbl90bXApIHwgc2VkIC1uICcxcCcpCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDIgXSAmJiBlY2hvICJDb25zaWRlcmluZyB0byBrZWVwOiAkdG9fa2VlcCIKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiAkdG9fa2VlcDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAtTCAiJGsiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHN5bWxpbmsncyBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga19kZXN0PSJgcmVhZGxpbmsgLWUgJGtgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXliZSBpdCBpcyB0aGUgb25lIGluIGNhY2hlX2RpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga19tYXliZT0iJGNhY2hlX2Rpci8ke2sjIy8qL30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBpdCBmcm9tIHRoZSByZW1vdmUgbGlzdCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIiRrX2Rlc3QiID0gIiRrX21heWJlIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fZGVsPSJgZWNobyAkdG9fZGVsIHwgc2VkICdzIydcIiRrX21heWJlXCInIyNnJ2AiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICBybSAtZiAkZm5fdG1wCisgICAgICAgICAgICAgICAgICAgICAgWyAkZGVidWcgLWd0IDIgXSAmJiBlY2hvICJEZWNpZGVkIHRvIGRlbGV0ZTogJHRvX2RlbCIKKyAgICAgICAgICAgICAgICAgICAgICBnZW5fcm1saXN0ICRybV9saXN0LiRleHQgIiR0b19kZWwiCisgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgICAgZGVsZXRlZF90Z3o9YGNhdCAkcm1fbGlzdC4qIDI+L2Rldi9udWxsIHwgZ3JlcCAiLnRneiQiIHwgd2MgLWxgCisgICAgICBkZWxldGVkX2ZpbGVzPWBjYXQgJHJtX2xpc3QuKiAyPi9kZXYvbnVsbCB8IHdjIC1sYAorICAgICAgWyAiJGRlbGV0ZWRfZmlsZXMiIC1ndCAwIC1hICRkZWJ1ZyAtZ3QgMCBdICYmIGNhdCAkcm1fbGlzdC4qCisgICAgICBlY2hvICIoJGRlbGV0ZWRfdGd6IGZyb20gJHRvdGFsX3Rnel9zdWZmaXggLnRneiBmaWxlcyBmb3IgJHN1ZmZpeCBzdWZmaXggd2lsbCBiZSByZW1vdmVkIG9yICRkZWxldGVkX2ZpbGVzIGZyb20gJHRvdGFsX2ZpbGVzX3N1ZmZpeCB3aGVuIGNvdW50aW5nIGFsc28gLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzKSIKKyAgICAgIGxldCB0b3RhbF9kZWxldGVkPSR0b3RhbF9kZWxldGVkKyRkZWxldGVkX2ZpbGVzCisgIGRvbmUKKyAgZGVsZXRlZF90Z3o9MAorICBybV9vbGRfbGlzdD0kcmVtb3ZlX2xpc3RkaXIvc3N0YXRlLW9sZC1maWxlbmFtZXMKKyAgZmluZCAkY2FjaGVfZGlyIC1uYW1lICdzc3RhdGUtKi50Z3onID4kcm1fb2xkX2xpc3QKKyAgWyAtcyAiJHJtX29sZF9saXN0IiBdICYmIGRlbGV0ZWRfdGd6PWBjYXQgJHJtX29sZF9saXN0IHwgZ3JlcCAiLnRneiQiIHwgd2MgLWxgCisgIFsgLXMgIiRybV9vbGRfbGlzdCIgXSAmJiBkZWxldGVkX2ZpbGVzPWBjYXQgJHJtX29sZF9saXN0IHwgd2MgLWxgCisgIFsgLXMgIiRybV9vbGRfbGlzdCIgLWEgJGRlYnVnIC1ndCAwIF0gJiYgY2F0ICRybV9vbGRfbGlzdAorICBlY2hvICIoJGRlbGV0ZWRfdGd6IC50Z3ogZmlsZXMgd2l0aCBvbGQgc3N0YXRlLSogZmlsZW5hbWVzIHdpbGwgYmUgcmVtb3ZlZCBvciAkZGVsZXRlZF9maWxlcyB3aGVuIGNvdW50aW5nIGFsc28gLnNpZ2luZm8gYW5kIC5kb25lIGZpbGVzKSIKKyAgbGV0IHRvdGFsX2RlbGV0ZWQ9JHRvdGFsX2RlbGV0ZWQrJGRlbGV0ZWRfZmlsZXMKKworICBybSAtZiAkbGlzdF9zdWZmaXgKKyAgcm0gLWYgJHNzdGF0ZV9maWxlc19saXN0CisgIGlmIFsgJHRvdGFsX2RlbGV0ZWQgLWd0IDAgXTsgdGhlbgorICAgICAgcmVhZF9jb25maXJtCisgICAgICBpZiBbICIkY29uZmlybSIgPSAieSIgLW8gIiRjb25maXJtIiA9ICJZIiBdOyB0aGVuCisgICAgICAgICAgZm9yIGxpc3QgaW4gYGxzICRyZW1vdmVfbGlzdGRpci9gOyBkbworICAgICAgICAgICAgICBlY2hvICJSZW1vdmluZyAkbGlzdC50Z3ogKGBjYXQgJHJlbW92ZV9saXN0ZGlyLyRsaXN0IHwgd2MgLXdgIGZpbGVzKSAuLi4gIgorICAgICAgICAgICAgICAjIFJlbW92ZSB0aGVtIG9uZSBieSBvbmUgdG8gYXZvaWQgdGhlIGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IKKyAgICAgICAgICAgICAgZm9yIGkgaW4gYGNhdCAkcmVtb3ZlX2xpc3RkaXIvJGxpc3RgOyBkbworICAgICAgICAgICAgICAgICAgcm0gLWYgJHZlcmJvc2UgJGkKKyAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICBlY2hvICJEb25lIgorICAgICAgICAgIGRvbmUKKyAgICAgICAgICBlY2hvICIkdG90YWxfZGVsZXRlZCBmaWxlcyBoYXZlIGJlZW4gcmVtb3ZlZCEiCisgICAgICBlbHNlCisgICAgICAgICAgZG9fbm90aGluZworICAgICAgZmkKKyAgZWxzZQorICAgICAgIG5vX2ZpbGVzCisgIGZpCisgIFsgLWQgJHJlbW92ZV9saXN0ZGlyIF0gJiYgcm0gLWZyICRyZW1vdmVfbGlzdGRpcgorfQorCisjIFJlbW92ZSB0aGUgc3N0YXRlIGZpbGUgYnkgc3RhbXBzIGRpciwgdGhlIGZpbGUgbm90IHVzZWQgYnkgdGhlIHN0YW1wcyBkaXIKKyMgd2lsbCBiZSByZW1vdmVkLgorcm1fYnlfc3RhbXBzICgpeworCisgIGxvY2FsIGNhY2hlX2xpc3Q9YG1rdGVtcGAgfHwgZXhpdCAxCisgIGxvY2FsIGtlZXBfbGlzdD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgbG9jYWwgcm1fbGlzdD1gbWt0ZW1wYCB8fCBleGl0IDEKKyAgbG9jYWwgc3VtcworICBsb2NhbCBhbGxfc3VtcworCisgICMgVG90YWwgbnVtYmVyIG9mIGZpbGVzIGluY2x1ZGluZyBzc3RhdGUtLCAuc2lnaW5mbyBhbmQgLmRvbmUgZmlsZXMKKyAgdG90YWxfZmlsZXM9YGZpbmQgJGNhY2hlX2RpciAtdHlwZSBmIC1uYW1lICdzc3RhdGUqJyB8IHdjIC1sYAorICAjIFNhdmUgYWxsIHRoZSBzdGF0ZSBmaWxlIGxpc3QgdG8gYSBmaWxlCisgIGZpbmQgJGNhY2hlX2RpciAtdHlwZSBmIC1uYW1lICdzc3RhdGUqJyB8IHNvcnQgLXUgLW8gJGNhY2hlX2xpc3QKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIHN1ZmZpeGVzIGluIHRoZSBzc3RhdGUgY2FjaGUgZGlyIC4uLiAiCisgIGxvY2FsIHNzdGF0ZV9zdWZmaXhlcz0iYHNlZCAncyUuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W15fXSpfXChbXjpdKlwpXC50Z3ouKiVcMSVnJyAkY2FjaGVfbGlzdCB8IHNvcnQgLXVgIgorICBlY2hvICJEb25lIgorICBlY2hvICJUaGUgZm9sbG93aW5nIHN1ZmZpeGVzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgY2FjaGUgZGlyOiIKKyAgZWNobyAkc3N0YXRlX3N1ZmZpeGVzCisKKyAgIyBGaWd1cmUgb3V0IGFsbCB0aGUgbWQ1c3VtcyBpbiB0aGUgc3RhbXBzIGRpci4KKyAgZWNobyAiRmlndXJpbmcgb3V0IGFsbCB0aGUgbWQ1c3VtcyBpbiBzdGFtcHMgZGlyIC4uLiAiCisgIGZvciBpIGluICRzc3RhdGVfc3VmZml4ZXM7IGRvCisgICAgICAjIFRoZXJlIGlzIG5vICJcLnNpZ2RhdGEiIGJ1dCAiX3NldGNlbmUiIHdoZW4gaXQgaXMgbWlycm9yZWQKKyAgICAgICMgZnJvbSB0aGUgU1NUQVRFX01JUlJPUlMsIHVzZSB0aGVtIHRvIGZpZ3VyZSBvdXQgdGhlIHN1bS4KKyAgICAgIHN1bXM9YGZpbmQgJHN0YW1wcyAtbWF4ZGVwdGggMyAtbmFtZSAiKi5kb18kaS4qIiBcCisgICAgICAgIC1vIC1uYW1lICIqLmRvXyR7aX1fc2V0c2NlbmUuKiIgfCBcCisgICAgICAgIHNlZCAtbmUgJ3MjLipfc2V0c2NlbmVcLiMjcCcgLWUgJ3MjLipcLnNpZ2RhdGFcLiMjcCcgfCBcCisgICAgICAgIHNlZCAtZSAncyNcLi4qIyMnIHwgc29ydCAtdWAKKyAgICAgIGFsbF9zdW1zPSIkYWxsX3N1bXMgJHN1bXMiCisgIGRvbmUKKyAgZWNobyAiRG9uZSIKKworICBlY2hvICJGaWd1cmluZyBvdXQgdGhlIGZpbGVzIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCAuLi4gIgorICBmb3IgaSBpbiAkYWxsX3N1bXM7IGRvCisgICAgICBncmVwICIuKi9zc3RhdGU6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6W146XSo6JHtpfV8uKiIgJGNhY2hlX2xpc3QgPj4ka2VlcF9saXN0CisgIGRvbmUKKyAgZWNobyAiRG9uZSIKKworICBpZiBbIC1zICRrZWVwX2xpc3QgXTsgdGhlbgorICAgICAgc29ydCAtdSAka2VlcF9saXN0IC1vICRrZWVwX2xpc3QKKyAgICAgIHRvX2RlbD1gY29tbSAtMSAtMyAka2VlcF9saXN0ICRjYWNoZV9saXN0YAorICAgICAgZ2VuX3JtbGlzdCAkcm1fbGlzdCAiJHRvX2RlbCIKKyAgICAgIGxldCB0b3RhbF9kZWxldGVkPWBjYXQgJHJtX2xpc3QgfCBzb3J0IC11IHwgd2MgLXdgCisgICAgICBpZiBbICR0b3RhbF9kZWxldGVkIC1ndCAwIF07IHRoZW4KKyAgICAgICAgICBbICRkZWJ1ZyAtZ3QgMCBdICYmIGNhdCAkcm1fbGlzdCB8IHNvcnQgLXUKKyAgICAgICAgICByZWFkX2NvbmZpcm0KKyAgICAgICAgICBpZiBbICIkY29uZmlybSIgPSAieSIgLW8gIiRjb25maXJtIiA9ICJZIiBdOyB0aGVuCisgICAgICAgICAgICAgIGVjaG8gIlJlbW92aW5nIHNzdGF0ZSBjYWNoZSBmaWxlcyAuLi4gKCR0b3RhbF9kZWxldGVkIGZpbGVzKSIKKyAgICAgICAgICAgICAgIyBSZW1vdmUgdGhlbSBvbmUgYnkgb25lIHRvIGF2b2lkIHRoZSBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yCisgICAgICAgICAgICAgIGZvciBpIGluIGBjYXQgJHJtX2xpc3QgfCBzb3J0IC11YDsgZG8KKyAgICAgICAgICAgICAgICAgIHJtIC1mICR2ZXJib3NlICRpCisgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgZWNobyAiJHRvdGFsX2RlbGV0ZWQgZmlsZXMgaGF2ZSBiZWVuIHJlbW92ZWQiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBkb19ub3RoaW5nCisgICAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgICBub19maWxlcworICAgICAgZmkKKyAgZWxzZQorICAgICAgZWNob19lcnJvciAiQWxsIGZpbGVzIGluIGNhY2hlIGRpciB3aWxsIGJlIHJlbW92ZWQhIEFib3J0ISIKKyAgZmkKKworICBybSAtZiAkY2FjaGVfbGlzdAorICBybSAtZiAka2VlcF9saXN0CisgIHJtIC1mICRybV9saXN0Cit9CisKKyMgUGFyc2UgYXJndW1lbnRzCit3aGlsZSBbIC1uICIkMSIgXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tY2FjaGUtZGlyPSopCisgICAgICBjYWNoZV9kaXI9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tY2FjaGUtZGlyPSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZCAiJGNhY2hlX2RpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0tY2FjaGUtZGlyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXJlbW92ZS1kdXBsaWNhdGVkfC1kKQorICAgICAgcm1fZHVwbGljYXRlZD0ieSIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS15ZXN8LXkpCisgICAgICBjb25maXJtPSJ5IgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWZvbGxvdy1zeW1saW5rfC1MKQorICAgICAgZnN5bT0ieSIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1leHRyYS1hcmNocz0qKQorICAgICAgZXh0cmFfYXJjaHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tZXh0cmEtYXJjaHM9IyMnIC1lICdzIywjICNnJ2AKKyAgICAgIFsgLW4gIiRleHRyYV9hcmNocyIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGV4dHJhIGFyY2ggcGFyYW1ldGVyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWV4dHJhLWxheWVyPSopCisgICAgICBleHRyYV9sYXllcnM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tZXh0cmEtbGF5ZXI9IyMnIC1lICdzIywjICNnJ2AKKyAgICAgIFsgLW4gIiRleHRyYV9sYXllcnMiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBleHRyYSBsYXllciBwYXJhbWV0ZXIiCisgICAgICBmb3IgaSBpbiAkZXh0cmFfbGF5ZXJzOyBkbworICAgICAgICAgIGw9YHJlYWRsaW5rIC1lICRpYAorICAgICAgICAgIGlmIFsgLWQgIiRsIiBdOyB0aGVuCisgICAgICAgICAgICAgIGxheWVycz0iJGxheWVycyAkbCIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG9fZXJyb3IgIkNhbid0IGZpbmQgbGF5ZXIgJGkiCisgICAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1zdGFtcHMtZGlyPSopCisgICAgICBzdGFtcHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tc3RhbXBzLWRpcj0jIycgLWUgJ3MjLCMgI2cnYAorICAgICAgWyAtbiAiJHN0YW1wcyIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHN0YW1wcyBkaXIgJGkiCisgICAgICBmb3IgaSBpbiAkc3RhbXBzOyBkbworICAgICAgICAgIFsgLWQgIiRpIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgc3RhbXBzIGRpciAkaSIKKyAgICAgIGRvbmUKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS12ZXJib3NlfC12KQorICAgICAgdmVyYm9zZT0iLXYiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tZGVidWd8LUQpCisgICAgICBkZWJ1Zz1gZXhwciAkZGVidWcgKyAxYAorICAgICAgZWNobyAiRGVidWcgbGV2ZWwgJGRlYnVnIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWhlbHB8LWgpCisgICAgICB1c2FnZQorICAgICAgZXhpdCAwCisgICAgICAgIDs7CisgICAgKikKKyAgICAgIGVjaG8gIkludmFsaWQgYXJndW1lbnRzICQqIgorICAgICAgZWNob19lcnJvciAiVHJ5ICdzc3RhdGUtY2FjaGUtbWFuYWdlbWVudC5zaCAtaCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICAgICA7OworICBlc2FjCitkb25lCisKKyMgc3N0YXRlIGNhY2hlIGRpcmVjdG9yeSwgdXNlIGVudmlyb25tZW50IHZhcmlhYmxlIFNTVEFURV9DQUNIRV9ESVIKKyMgaWYgaXQgd2FzIG5vdCBzcGVjaWZpZWQsIG90aGVyd2lzZSwgZXJyb3IuCitbIC1uICIkY2FjaGVfZGlyIiBdIHx8IGNhY2hlX2Rpcj0kU1NUQVRFX0NBQ0hFX0RJUgorWyAtbiAiJGNhY2hlX2RpciIgXSB8fCBlY2hvX2Vycm9yICJObyBjYWNoZSBkaXIgZm91bmQhIgorWyAtZCAiJGNhY2hlX2RpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGNhY2hlIGRpcmVjdG9yeSBcIiRjYWNoZV9kaXJcIiIKKworWyAtbiAiJHJtX2R1cGxpY2F0ZWQiIC1hIC1uICIkc3RhbXBzIiBdICYmIFwKKyAgICBlY2hvX2Vycm9yICJDYW4gbm90IHVzZSBib3RoIC0tcmVtb3ZlLWR1cGxpY2F0ZWQgYW5kIC0tc3RhbXBzLWRpciIKKworWyAiJHJtX2R1cGxpY2F0ZWQiID0gInkiIF0gJiYgcmVtb3ZlX2R1cGxpY2F0ZWQKK1sgLW4gIiRzdGFtcHMiIF0gJiYgcm1fYnlfc3RhbXBzCitbIC16ICIkcm1fZHVwbGljYXRlZCIgLWEgLXogIiRzdGFtcHMiIF0gJiYgXAorICAgIGVjaG8gIldoYXQgZG8geW91IHdhbnQgdG8gZG8/IgorZXhpdCAwCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NzdGF0ZS1kaWZmLW1hY2hpbmVzLnNoIGIvc2NyaXB0cy9zc3RhdGUtZGlmZi1tYWNoaW5lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTZhYTBhCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9zc3RhdGUtZGlmZi1tYWNoaW5lcy5zaApAQCAtMCwwICsxLDE3MiBAQAorIyEvYmluL2Jhc2gKKworIyBVc2VkIHRvIGNvbXBhcmUgc3N0YXRlIGNoZWNrc3VtcyBiZXR3ZWVuIE1BQ0hJTkVTLgorIyBFeGVjdXRlIHNjcmlwdCBhbmQgY29tcGFyZSBnZW5lcmF0ZWQgbGlzdC5NIGZpbGVzLgorIyBVc2luZyBiYXNoIHRvIGhhdmUgUElQRVNUQVRVUyB2YXJpYWJsZS4KKworIyBJdCdzIGFsc28gdXNlZnVsbCB0byBrZWVwIG9sZGVyIHNzdGF0ZSBjaGVja3N1bXMKKyMgdG8gYmUgYWJsZSB0byBmaW5kIG91dCB3aHkgc29tZXRoaW5nIGlzIHJlYnVpbGRpbmcKKyMgYWZ0ZXIgdXBkYXRpbmcgbWV0YWRhdGEKKworIyAkIGRpZmYgXAorIyAgICAgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi9mYWtlLWNvcnRleGE4L2xpc3QuTSBcCisjICAgICBzc3RhdGUtZGlmZi8xMzQ5MzQ4MzkyL2Zha2UtY29ydGV4YTkvbGlzdC5NIFwKKyMgICAgIHwgd2MgLWwKKyMgNTM4CisKKyMgVGhlbiB0byBjb21wYXJlIHNpZ2RhdGEgdXNlIHNvbWV0aGluZyBsaWtlOgorIyAkIGxzIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvKi9hcm12N2EtdmZwLW5lb24qL2xpbnV4LWxpYmMtaGVhZGVycy8qZG9fY29uZmlndXJlKnNpZ2RhdGEqCisjICAgc3N0YXRlLWRpZmYvMTM0OTM0ODM5Mi9mYWtlLWNvcnRleGE4L2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpbnV4LWxpYmMtaGVhZGVycy8zLjQuMy1yMC5kb19jb25maWd1cmUuc2lnZGF0YS5jYjczYjM2MzBhN2I4MTkxZTcyZmM0NjljNTEzNzAyNQorIyAgIHNzdGF0ZS1kaWZmLzEzNDkzNDgzOTIvZmFrZS1jb3J0ZXhhOS9hcm12N2EtdmZwLW5lb24tb2UtbGludXgtZ251ZWFiaS9saW51eC1saWJjLWhlYWRlcnMvMy40LjMtcjAuZG9fY29uZmlndXJlLnNpZ2RhdGEuZjM3YWRhMTc3YmY5OWNlOGFmODU5MTRkZjIyYjVhMGIKKyMgJCBiaXRiYWtlLWRpZmZzaWdzIHN0YW1wcy4xMzQ5MzQ4MzkyLyovYXJtdjdhLXZmcC1uZW9uKi9saW51eC1saWJjLWhlYWRlcnMvKmRvX2NvbmZpZ3VyZSpzaWdkYXRhKgorIyAgIGJhc2VoYXNoIGNoYW5nZWQgZnJvbSA4ZDBiZDY3YmIxZGE2ZjY4NzE3NzYwZmMzZWY0MzE3MSB0byBlODY5ZmE2MTQyNmU4OGU5YzMwNzI2YmE4OGExMjE2YQorIyAgIFZhcmlhYmxlIFRVTkVfQ0NBUkdTIHZhbHVlIGNoYW5nZWQgZnJvbSAgLW1hcmNoPWFybXY3LWEgICAgIC1tdGh1bWItaW50ZXJ3b3JrIC1tZmxvYXQtYWJpPXNvZnRmcCAtbWZwdT1uZW9uIC1tdHVuZT1jb3J0ZXgtYTggdG8gIC1tYXJjaD1hcm12Ny1hICAgICAtbXRodW1iLWludGVyd29yayAtbWZsb2F0LWFiaT1zb2Z0ZnAgLW1mcHU9bmVvbiAtbXR1bmU9Y29ydGV4LWE5CisKKyMgR2xvYmFsIHZhcnMKK3RtcGRpcj0KK21hY2hpbmVzPQordGFyZ2V0cz0KK2RlZmF1bHRfbWFjaGluZXM9InFlbXVhcm0gcWVtdXg4NiBxZW11eDg2LTY0IgorZGVmYXVsdF90YXJnZXRzPSJjb3JlLWltYWdlLWJhc2UiCithbmFseXplPSJOIgorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gdXRpbGl0eSB0byBjb21wYXJlIHNzdGF0ZSBjaGVja3N1bXMgYmV0d2VlbiBkaWZmZXJlbnQgTUFDSElORXMuCiskMCA8T1BUSU9OPgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwCisgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorCisgIC0tdG1wZGlyPTx0bXBkaXI+CisgICAgICAgIFNwZWNpZnkgdG1wZGlyLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIFNvbWV0aGluZyBsaWtlIC9PRS9vZS1jb3JlL3RtcC1lZ2xpYmMgKG5vIC8gYXQgdGhlIGVuZCkuCisKKyAgLS1tYWNoaW5lcz08bWFjaGluZXM+CisgICAgICAgIExpc3Qgb2YgTUFDSElORXMgc2VwYXJhdGVkIGJ5IHNwYWNlLCB3aWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUFDSElORVMgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAicWVtdWFybSBxZW11eDg2IHFlbXV4ODYtNjQiLgorCisgIC0tdGFyZ2V0cz08dGFyZ2V0cz4KKyAgICAgICAgTGlzdCBvZiB0YXJnZXRzIHNlcGFyYXRlZCBieSBzcGFjZSwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRBUkdFVFMgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyAiY29yZS1pbWFnZS1iYXNlIi4KKworICAtLWFuYWx5emUKKyAgICAgICAgU2hvdyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBNQUNISU5Fcy4gSXQgYXNzdW1lczoKKyAgICAgICAgKiBGaXJzdCAyIE1BQ0hJTkVzIGluIC0tbWFjaGluZXMgcGFyYW1ldGVyIGhhdmUgdGhlIHNhbWUgVFVORV9QS0dBUkNICisgICAgICAgICogVGhpcmQgb3B0aW9uYWwgTUFDSElORSBoYXMgZGlmZmVyZW50IFRVTkVfUEtHQVJDSCAtIG9ubHkgbmF0aXZlIGFuZCBhbGxhcmNoIHJlY2lwZXMgYXJlIGNvbXBhcmVkKS4KKyAgICAgICAgKiBOZXh0IE1BQ0hJTkVzIGFyZSBpZ25vcmVkCitFT0YKK30KKworIyBQcmludCBlcnJvciBpbmZvcm1hdGlvbiBhbmQgZXhpdC4KK2VjaG9fZXJyb3IgKCkgeworICBlY2hvICJFUlJPUjogJDEiID4mMgorICBleGl0IDEKK30KKword2hpbGUgWyAtbiAiJDEiIF07IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRtcGRpcj0qKQorICAgICAgdG1wZGlyPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXRtcGRpcj0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWQgIiR0bXBkaXIiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBhcmd1bWVudCB0byAtLXRtcGRpciIKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1tYWNoaW5lcz0qKQorICAgICAgbWFjaGluZXM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tbWFjaGluZXM9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXRhcmdldHM9KikKKyAgICAgIHRhcmdldHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdGFyZ2V0cz0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tYW5hbHl6ZSkKKyAgICAgIGFuYWx5emU9IlkiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJyQwIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyB0bXBkaXIgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJHRtcGRpciIgXSB8fCB0bXBkaXI9JFRNUERJUgorWyAtbiAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJObyB0bXBkaXIgZm91bmQhIgorWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHRtcGRpciBcIiR0bXBkaXJcIiIKK1sgLW4gIiRtYWNoaW5lcyIgXSB8fCBtYWNoaW5lcz0kTUFDSElORVMKK1sgLW4gIiRtYWNoaW5lcyIgXSB8fCBtYWNoaW5lcz0kZGVmYXVsdF9tYWNoaW5lcworWyAtbiAiJHRhcmdldHMiIF0gfHwgdGFyZ2V0cz0kVEFSR0VUUworWyAtbiAiJHRhcmdldHMiIF0gfHwgdGFyZ2V0cz0kZGVmYXVsdF90YXJnZXRzCisKK09VVFBVVD0ke3RtcGRpcn0vc3N0YXRlLWRpZmYvYGRhdGUgIislcyJgCitkZWNsYXJlIC1pIFJFU1VMVD0wCisKK2ZvciBNIGluICR7bWFjaGluZXN9OyBkbworICBbIC1kICR7dG1wZGlyfS9zdGFtcHMvIF0gJiYgZmluZCAke3RtcGRpcn0vc3RhbXBzLyAtbmFtZSBcKnNpZ2RhdGFcKiB8IHhhcmdzIHJtIC1mCisgIG1rZGlyIC1wICR7T1VUUFVUfS8ke019CisgIGV4cG9ydCBNQUNISU5FPSR7TX0KKyAgYml0YmFrZSAtUyBub25lICR7dGFyZ2V0c30gMj4mMSB8IHRlZSAtYSAke09VVFBVVH0vJHtNfS9sb2c7CisgIFJFU1VMVCs9JHtQSVBFU1RBVFVTWzBdfQorICBpZiBscyAke3RtcGRpcn0vc3RhbXBzLyogPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICBjcCAtcmEgJHt0bXBkaXJ9L3N0YW1wcy8qICR7T1VUUFVUfS8ke019CisgICAgZmluZCAke09VVFBVVH0vJHtNfSAtbmFtZSBcKnNpZ2RhdGFcKiB8IHNlZCAicyMke09VVFBVVH0vJHtNfS8jI2ciIHwgc29ydCA+ICR7T1VUUFVUfS8ke019L2xpc3QKKyAgICBNX1VOREVSU0NPUkU9YGVjaG8gJHtNfSB8IHNlZCAncy8tL18vZydgCisgICAgc2VkICJzLyR7TV9VTkRFUlNDT1JFfS9NQUNISU5FL2c7IHMvJHtNfS9NQUNISU5FL2ciICR7T1VUUFVUfS8ke019L2xpc3QgfCBzb3J0ID4gJHtPVVRQVVR9LyR7TX0vbGlzdC5NCisgICAgZmluZCAke3RtcGRpcn0vc3RhbXBzLyAtbmFtZSBcKnNpZ2RhdGFcKiB8IHhhcmdzIHJtIC1mCisgIGVsc2UKKyAgICBwcmludGYgIkVSUk9SOiBubyBzaWdkYXRhIGZpbGVzIHdlcmUgZ2VuZXJhdGVkIGZvciBNQUNISU5FICRNIGluICR7dG1wZGlyfS9zdGFtcHNcbiI7CisgIGZpCitkb25lCisKK2Z1bmN0aW9uIGNvbXBhcmVTaWduYXR1cmVzKCkgeworICBNQUNISU5FMT0kMQorICBNQUNISU5FMj0kMgorICBQQVRURVJOPSIkMyIKKyAgUFJFX1BBVFRFUk49IiIKKyAgWyAtbiAiJHtQQVRURVJOfSIgXSB8fCBQUkVfUEFUVEVSTj0iLXYiCisgIFsgLW4gIiR7UEFUVEVSTn0iIF0gfHwgUEFUVEVSTj0iTUFDSElORSIKKyAgZm9yIFRBU0sgaW4gZG9fY29uZmlndXJlLnNpZ2RhdGEgZG9fcG9wdWxhdGVfc3lzcm9vdC5zaWdkYXRhIGRvX3BhY2thZ2Vfd3JpdGVfaXBrLnNpZ2RhdGE7IGRvCisgICAgcHJpbnRmICJcblxuID09PSBDb21wYXJpbmcgc2lnbmF0dXJlcyBmb3IgdGFzayAke1RBU0t9IGJldHdlZW4gJHtNQUNISU5FMX0gYW5kICR7TUFDSElORTJ9ID09PVxuIiB8IHRlZSAtYSAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9LmxvZworICAgIGRpZmYgJHtPVVRQVVR9LyR7TUFDSElORTF9L2xpc3QuTSAke09VVFBVVH0vJHtNQUNISU5FMn0vbGlzdC5NIHwgZ3JlcCAke1BSRV9QQVRURVJOfSAiJHtQQVRURVJOfSIgfCBncmVwICR7VEFTS30gPiAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9CisgICAgZm9yIGkgaW4gYGNhdCAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9IHwgc2VkICdzI1teL10qL1woW14vXSpcKS8uKiNcMSNnJyB8IHNvcnQgLXUgfCB4YXJnc2A7IGRvCisgICAgICBbIC1lICR7T1VUUFVUfS8ke01BQ0hJTkUxfS8qLyRpLyoke1RBU0t9KiBdIHx8IGVjaG8gIklORk86ICR7aX0gdGFzayAke1RBU0t9IGRvZXNuJ3QgZXhpc3QgaW4gJHtNQUNISU5FMX0iID4mMgorICAgICAgWyAtZSAke09VVFBVVH0vJHtNQUNISU5FMX0vKi8kaS8qJHtUQVNLfSogXSB8fCBjb250aW51ZQorICAgICAgWyAtZSAke09VVFBVVH0vJHtNQUNISU5FMn0vKi8kaS8qJHtUQVNLfSogXSB8fCBlY2hvICJJTkZPOiAke2l9IHRhc2sgJHtUQVNLfSBkb2Vzbid0IGV4aXN0IGluICR7TUFDSElORTJ9IiA+JjIKKyAgICAgIFsgLWUgJHtPVVRQVVR9LyR7TUFDSElORTJ9LyovJGkvKiR7VEFTS30qIF0gfHwgY29udGludWUKKyAgICAgIHByaW50ZiAiRVJST1I6ICRpIGRpZmZlcmVudCBzaWduYXR1cmUgZm9yIHRhc2sgJHtUQVNLfSBiZXR3ZWVuICR7TUFDSElORTF9IGFuZCAke01BQ0hJTkUyfVxuIjsKKyAgICAgIGJpdGJha2UtZGlmZnNpZ3MgJHtPVVRQVVR9LyR7TUFDSElORTF9LyovJGkvKiR7VEFTS30qICR7T1VUUFVUfS8ke01BQ0hJTkUyfS8qLyRpLyoke1RBU0t9KjsKKyAgICAgIGVjaG8gIiRpIiA+PiAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICBlY2hvCisgICAgZG9uZSB8IHRlZSAtYSAke09VVFBVVH0vc2lnbmF0dXJlcy4ke01BQ0hJTkUyfS4ke1RBU0t9LmxvZworICAgICMgZG9uJ3QgY3JlYXRlIGVtcHR5IGZpbGVzCisgICAgRVJST1JTPWBncmVwICJeRVJST1IuKiIgJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfS5sb2cgfCB3YyAtbGAKKyAgICBpZiBbICIke0VSUk9SU30iICE9ICIwIiBdIDsgdGhlbgorICAgICAgZWNobyAiRVJST1I6ICR7RVJST1JTfSBlcnJvcnMgZm91bmQgaW4gJHtPVVRQVVR9L3NpZ25hdHVyZXMuJHtNQUNISU5FMn0uJHtUQVNLfS5sb2ciCisgICAgICBSRVNVTFQrPSR7RVJST1JTfQorICAgIGZpCisgIGRvbmUKK30KKworZnVuY3Rpb24gY29tcGFyZU1hY2hpbmVzKCkgeworICBbICIkIyIgLWdlIDIgXSAmJiBjb21wYXJlU2lnbmF0dXJlcyAkMSAkMgorICBbICIkIyIgLWdlIDMgXSAmJiBjb21wYXJlU2lnbmF0dXJlcyAkMSAkMyAiXChePCBhbGxcKVx8XChePCB4ODZfNjQtbGludXhcKVx8XChePCBpNTg2LWxpbnV4XCkiCit9CisKK2lmIFsgIiR7YW5hbHl6ZX0iID0gIlkiIF0gOyB0aGVuCisgIGNvbXBhcmVNYWNoaW5lcyAke21hY2hpbmVzfQorZmkKKworaWYgWyAiJHtSRVNVTFR9IiAhPSAiMCIgLWEgLWYgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZyBdIDsgdGhlbgorICBjYXQgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHNvcnQgLXUgPiR7T1VUUFVUfS9mYWlsZWQtcmVjaXBlcy5sb2cudSAmJiBtdiAke09VVFBVVH0vZmFpbGVkLXJlY2lwZXMubG9nLnUgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZworICBlY2hvICJFUlJPUjogJHtSRVNVTFR9IGlzc3VlcyB3ZXJlIGZvdW5kIGluIHRoZXNlIHJlY2lwZXM6IGBjYXQgJHtPVVRQVVR9L2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHhhcmdzYCIKK2ZpCisKK2VjaG8gIklORk86IE91dHB1dCB3cml0dGVuIGluOiAke09VVFBVVH0iCitleGl0ICR7UkVTVUxUfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zc3RhdGUtc3lzcm9vdC1jcnVmdC5zaCBiL3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjYyNDg1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvc3N0YXRlLXN5c3Jvb3QtY3J1ZnQuc2gKQEAgLTAsMCArMSwxNTIgQEAKKyMhL2Jpbi9zaAorCisjIFVzZWQgdG8gZmluZCBmaWxlcyBpbnN0YWxsZWQgaW4gc3lzcm9vdCB3aGljaCBhcmUgbm90IHRyYWNrZWQgYnkgc3N0YXRlIG1hbmlmZXN0CisKKyMgR2xvYmFsIHZhcnMKK3RtcGRpcj0KKwordXNhZ2UgKCkgeworICBjYXQgPDwgRU9GCitXZWxjb21lIHRvIHN5c3Jvb3QgY3J1ZnQgZmluZGluZyB1dGlsaXR5LgorJDAgPE9QVElPTj4KKworT3B0aW9uczoKKyAgLWgsIC0taGVscAorICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKworICAtLXRtcGRpcj08dG1wZGlyPgorICAgICAgICBTcGVjaWZ5IHRtcGRpciwgd2lsbCB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRNUERJUiBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorCVNvbWV0aGluZyBsaWtlIC9PRS9vZS1jb3JlL3RtcC1lZ2xpYmMgKG5vIC8gYXQgdGhlIGVuZCkuCisKKyAgLS13aGl0ZWxpc3Q9PHdoaXRlbGlzdC1maWxlPgorICAgICAgICBUZXh0IGZpbGUsIGVhY2ggbGluZSBpcyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHBhdGhzIHdlIHdhbnQgdG8gaWdub3JlIGluIHJlc3VsdGluZyBkaWZmLgorICAgICAgICBZb3UgY2FuIHVzZSBkaWZmIGZpbGUgZnJvbSB0aGUgc2NyaXB0IG91dHB1dCwgaWYgaXQgY29udGFpbnMgb25seSBleHBlY3RlZCBleGNlcHRpb25zLgorICAgICAgICAnIycgaXMgdXNlZCBhcyByZWdleHAgZGVsaW1pdGVyLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBwcmVmaXggZm9yd2FyZCBzbGFzaGVzIGluIHBhdGhzLgorICAgICAgICBeIGFuZCAkIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQsIHNvIHByb3ZpZGUgb25seSB0aGUgbWlkZGxlIHBhcnQuCisgICAgICAgIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIGFyZSBpZ25vcmVkIGFzIGNvbW1lbnRzLgorICAgICAgICBBbGwgcGF0aHMgYXJlIHJlbGF0aXZlIHRvICJzeXNyb290cyIgZGlyZWN0b3J5LgorICAgICAgICBEaXJlY3RvcmllcyBkb24ndCBlbmQgd2l0aCBmb3J3YXJkIHNsYXNoLgorRU9GCit9CisKKyMgUHJpbnQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIGV4aXQuCitlY2hvX2Vycm9yICgpIHsKKyAgZWNobyAiRVJST1I6ICQxIiA+JjIKKyAgZXhpdCAxCit9CisKK3doaWxlIFsgLW4gIiQxIiBdOyBkbworICBjYXNlICQxIGluCisgICAgLS10bXBkaXI9KikKKyAgICAgIHRtcGRpcj1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS10bXBkaXI9IyMnIHwgeGFyZ3MgcmVhZGxpbmsgLWVgCisgICAgICBbIC1kICIkdG1wZGlyIiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS10bXBkaXIiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0td2hpdGVsaXN0PSopCisgICAgICBmd2hpdGVsaXN0PWBlY2hvICQxIHwgc2VkIC1lICdzI14tLXdoaXRlbGlzdD0jIycgfCB4YXJncyByZWFkbGluayAtZWAKKyAgICAgIFsgLWYgIiRmd2hpdGVsaXN0IiBdIHx8IGVjaG9fZXJyb3IgIkludmFsaWQgYXJndW1lbnQgdG8gLS13aGl0ZWxpc3QiCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJyQwIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyBzc3RhdGUgY2FjaGUgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJHRtcGRpciIgXSB8fCB0bXBkaXI9JFRNUERJUgorWyAtbiAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJObyB0bXBkaXIgZm91bmQhIgorWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHRtcGRpciBcIiR0bXBkaXJcIiIKKworT1VUUFVUPSR7dG1wZGlyfS9zeXNyb290LmNydWZ0LmBkYXRlICIrJXMiYAorCisjIHRvcCBsZXZlbCBkaXJlY3RvcmllcworV0hJVEVMSVNUPSJbXi9dKiIKKworIyBnZW5lcmF0ZWQgYnkgYmFzZS1wYXNzd2QgcmVjaXBlCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qL2V0Yy9ncm91cC1cPyBcCisgIC4qL2V0Yy9wYXNzd2QtXD8gXAorIgorIyBnZW5lcmF0ZWQgYnkgcHNldWRvLW5hdGl2ZQorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKi92YXIvcHNldWRvIFwKKyAgLiovdmFyL3BzZXVkby9bXi9dKiBcCisiCisKKyMgZ2VuZXJhdGVkIGJ5IHBhY2thZ2UuYmJjbGFzczpTSExJQlNESVJTID0gIiR7UEtHREFUQV9ESVJ9LyR7TUxQUkVGSVh9c2hsaWJzIgorV0hJVEVMSVNUPSIke1dISVRFTElTVH0gXAorICAuKi9zaGxpYnMgXAorICAuKi9wa2dkYXRhIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgcHl0aG9uCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qXC5weWMgXAorICAuKlwucHlvIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgc2dtbC1jb21tb24tbmF0aXZlCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIC4qL2V0Yy9zZ21sL3NnbWwtZG9jYm9vay5iYWsgXAorIgorCisjIGdlbmVyYXRlZCBieSB0b29sY2hhaW4KK1dISVRFTElTVD0iJHtXSElURUxJU1R9IFwKKyAgW14vXSotdGNib290c3RyYXAvbGliIFwKKyIKKworIyBnZW5lcmF0ZWQgYnkgdXNlcmFkZC5iYmNsYXNzCitXSElURUxJU1Q9IiR7V0hJVEVMSVNUfSBcCisgIFteL10qL2hvbWUgXAorICBbXi9dKi9ob21lL3h1c2VyIFwKKyIKKworU1lTUk9PVFM9ImByZWFkbGluayAtZiAke3RtcGRpcn1gL3N5c3Jvb3RzLyIKKworbWtkaXIgJHtPVVRQVVR9CitmaW5kICR7dG1wZGlyfS9zc3RhdGUtY29udHJvbCAtbmFtZSBcKi5wb3B1bGF0ZS1zeXNyb290XCogLW8gLW5hbWUgXCoucG9wdWxhdGVfc3lzcm9vdFwqIC1vIC1uYW1lIFwqLnBhY2thZ2VcKiB8IHhhcmdzIGNhdCB8IGdyZXAgc3lzcm9vdHMgfCBcCisgIHNlZCAncyMvJCMjZzsgcyMvLy8qIy8jZycgfCBcCisgICMgd29yayBhcm91bmQgZm9yIHBhdGhzIGVuZGluZyB3aXRoIC8gZm9yIGRpcmVjdG9yaWVzIGFuZCBtdWx0aXBsaWVkIC8vIChlLmcuIHBhdGhzIHRvIG5hdGl2ZSBzeXNyb290KQorICBzb3J0IHwgc2VkICJzI14ke1NZU1JPT1RTfSMjZyIgPiAke09VVFBVVH0vbWFzdGVyLmxpc3QuYWxsLnR4dAorc29ydCAtdSAke09VVFBVVH0vbWFzdGVyLmxpc3QuYWxsLnR4dCA+ICR7T1VUUFVUfS9tYXN0ZXIubGlzdC50eHQgIyAtdSBiZWNhdXNlIHNvbWUgZGlyZWN0b3JpZXMgYXJlIGxpc3RlZCBmb3IgbW9yZSByZWNpcGVzCitmaW5kICR7dG1wZGlyfS9zeXNyb290cy8gfCBcCisgIHNvcnQgfCBzZWQgInMjXiR7U1lTUk9PVFN9IyNnIiA+ICR7T1VUUFVUfS9zeXNyb290Lmxpc3QudHh0CisKK2RpZmYgJHtPVVRQVVR9L21hc3Rlci5saXN0LmFsbC50eHQgJHtPVVRQVVR9L21hc3Rlci5saXN0LnR4dCA+ICR7T1VUUFVUfS9kdXBsaWNhdGVzLnR4dAorZGlmZiAke09VVFBVVH0vbWFzdGVyLmxpc3QudHh0ICR7T1VUUFVUfS9zeXNyb290Lmxpc3QudHh0ID4gJHtPVVRQVVR9L2RpZmYuYWxsLnR4dAorCitncmVwICJePiAuIiAke09VVFBVVH0vZGlmZi5hbGwudHh0IHwgc2VkICdzL14+IC8vZycgPiAke09VVFBVVH0vZGlmZi50eHQKK2ZvciBpdGVtIGluICR7V0hJVEVMSVNUfTsgZG8KKyAgc2VkIC1pICJcXCNeJHtpdGVtfVwkI2QiICR7T1VUUFVUfS9kaWZmLnR4dDsKKyAgZWNobyAiJHtpdGVtfSIgPj4gJHtPVVRQVVR9L3VzZWQud2hpdGVsaXN0LnR4dAorZG9uZQorCitpZiBbIC1zICIkZndoaXRlbGlzdCIgXSA7IHRoZW4KKyAgY2F0ICRmd2hpdGVsaXN0ID4+ICR7T1VUUFVUfS91c2VkLndoaXRlbGlzdC50eHQKKyAgY2F0ICRmd2hpdGVsaXN0IHwgZ3JlcCAtdiAnXiMnIHwgd2hpbGUgcmVhZCBpdGVtOyBkbworICAgIHNlZCAtaSAiXFwjXiR7aXRlbX1cJCNkIiAke09VVFBVVH0vZGlmZi50eHQ7CisgIGRvbmUKK2ZpCisjIHRvbyBtYW55IGZhbHNlIHBvc2l0aXZlcyBmb3IgZGlyZWN0b3JpZXMKKyMgZWNobyAiRm9sbG93aW5nIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4gc3lzcm9vdCBhdCBsZWFzdCB0d2ljZSIKKyMgY2F0ICR7T1VUUFVUfS9kdXBsaWNhdGVzCisKK1JFU1VMVD1gY2F0ICR7T1VUUFVUfS9kaWZmLnR4dCB8IHdjIC1sYAorCitpZiBbICIke1JFU1VMVH0iICE9ICIwIiBdIDsgdGhlbgorICBlY2hvICJFUlJPUjogJHtSRVNVTFR9IGlzc3VlcyB3ZXJlIGZvdW5kLiIKKyAgZWNobyAiRVJST1I6IEZvbGxvd2luZyBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIHN5c3Jvb3QsIGJ1dCBub3QgdHJhY2tlZCBieSBzc3RhdGU6IgorICBjYXQgJHtPVVRQVVR9L2RpZmYudHh0CitlbHNlCisgIGVjaG8gIklORk86IEFsbCBmaWxlcyBhcmUgdHJhY2tlZCBieSBzc3RhdGUgb3Igd2VyZSBleHBsaWNpdGx5IGlnbm9yZWQgYnkgdGhpcyBzY3JpcHQiCitmaQorCitlY2hvICJJTkZPOiBPdXRwdXQgd3JpdHRlbiBpbjogJHtPVVRQVVR9IgorZXhpdCAke1JFU1VMVH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoIGIvc2NyaXB0cy9zd2FiYmVyLXN0cmFjZS1hdHRhY2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmIwMzkxYQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvc3dhYmJlci1zdHJhY2UtYXR0YWNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworCisjIERldGFjaCBmcm9tIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBhbmQgcGFyZW50IHByb2Nlc3MgYnkgZm9ya2luZyB0d2ljZSB0byBkYWVtb25pemUgb3Vyc2VsdmVzLAorIyB0aGVuIHJ1biB0aGUgY29tbWFuZCBwYXNzZWQgYXMgYXJndlsxXS4gU2VuZCBsb2cgZGF0YSB0byBhcmd2WzJdLgorCitwaWQgPSBvcy5mb3JrKCkKK2lmIChwaWQgPT0gMCk6CisgICAgb3Muc2V0c2lkKCkKKyAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICBpZiAocGlkICE9IDApOgorICAgICAgICBvcy5fZXhpdCgwKQorZWxzZToKKyAgICBzeXMuZXhpdCgpCisKKworc2kgPSBmaWxlKG9zLmRldm51bGwsICdyJykKK3NvID0gZmlsZShzeXMuYXJndlsyXSwgJ3cnKQorc2UgPSBzbworCisjIFJlcGxhY2UgdGhvc2UgZmRzIHdpdGggb3VyIG93bgorb3MuZHVwMihzaS5maWxlbm8oKSwgc3lzLnN0ZGluLmZpbGVubygpKQorb3MuZHVwMihzby5maWxlbm8oKSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKK29zLmR1cDIoc2UuZmlsZW5vKCksIHN5cy5zdGRlcnIuZmlsZW5vKCkpCisKK3JldCA9IHN1YnByb2Nlc3MuY2FsbChzeXMuYXJndlsxXSwgc2hlbGw9VHJ1ZSkKKworb3MuX2V4aXQocmV0KQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weSBiL3NjcmlwdHMvc3lzcm9vdC1yZWxhdGl2ZWxpbmtzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjMjYzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3N5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCisjIFRha2UgYSBzeXNyb290IGRpcmVjdG9yeSBhbmQgdHVybiBhbGwgdGhlIGFib2x1dGUgc3ltbGlua3MgYW5kIHR1cm4gdGhlbSBpbnRvCisjIHJlbGF0aXZlIG9uZXMgc3VjaCB0aGF0IHRoZSBzeXNyb290IGlzIHVzYWJsZSB3aXRoaW4gYW5vdGhlciBzeXN0ZW0uCisKK2lmIGxlbihzeXMuYXJndikgIT0gMjoKKyAgICBwcmludCgiVXNhZ2UgaXMgIiArIHN5cy5hcmd2WzBdICsgIjxkaXJlY3Rvcnk+IikKKyAgICBzeXMuZXhpdCgxKQorCit0b3BkaXIgPSBzeXMuYXJndlsxXQordG9wZGlyID0gb3MucGF0aC5hYnNwYXRoKHRvcGRpcikKKworZGVmIGhhbmRsZWxpbmsoZmlsZXAsIHN1YmRpcik6CisgICAgbGluayA9IG9zLnJlYWRsaW5rKGZpbGVwKQorICAgIGlmIGxpbmtbMF0gIT0gIi8iOgorICAgICAgICByZXR1cm4KKyAgICBpZiBsaW5rLnN0YXJ0c3dpdGgodG9wZGlyKToKKyAgICAgICAgcmV0dXJuCisgICAgI3ByaW50KCJSZXBsYWNpbmcgJXMgd2l0aCAlcyBmb3IgJXMiICUgKGxpbmssIHRvcGRpcitsaW5rLCBmaWxlcCkpCisgICAgcHJpbnQoIlJlcGxhY2luZyAlcyB3aXRoICVzIGZvciAlcyIgJSAobGluaywgb3MucGF0aC5yZWxwYXRoKHRvcGRpcitsaW5rLCBzdWJkaXIpLCBmaWxlcCkpCisgICAgb3MudW5saW5rKGZpbGVwKQorICAgIG9zLnN5bWxpbmsob3MucGF0aC5yZWxwYXRoKHRvcGRpcitsaW5rLCBzdWJkaXIpLCBmaWxlcCkKKworZm9yIHN1YmRpciwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0b3BkaXIpOgorICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICBmaWxlcCA9IG9zLnBhdGguam9pbihzdWJkaXIsIGYpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGVwKToKKyAgICAgICAgICAgICNwcmludCgiQ29uc2lkZXJpbmcgJXMiICUgZmlsZXApCisgICAgICAgICAgICBoYW5kbGVsaW5rKGZpbGVwLCBzdWJkaXIpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoIGIvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMTcwOTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy90ZXN0LWRlcGVuZGVuY2llcy5zaApAQCAtMCwwICsxLDI4NiBAQAorIyEvYmluL2Jhc2gKKworIyBBdXRob3I6IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEzIE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworIyBVc2VkIHRvIGRldGVjdCBtaXNzaW5nIGRlcGVuZGVuY2llcyBvciBhdXRvbWFnaWNhbGx5CisjIGVuYWJsZWQgZGVwZW5kZW5jaWVzIHdoaWNoIGFyZW4ndCBleHBsaWNpdGx5IGVuYWJsZWQKKyMgb3IgZGlzYWJsZWQuIFVzaW5nIGJhc2ggdG8gaGF2ZSBQSVBFU1RBVFVTIHZhcmlhYmxlLgorCisjIEl0IGRvZXMgMyBidWlsZHMgb2YgPHRhcmdldD4KKyMgMXN0IHRvIHBvcHVsYXRlIHNzdGF0ZS1jYWNoZSBkaXJlY3RvcnkgYW5kIHN5c3Jvb3QKKyMgMm5kIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBldmVyeSBwb3NzaWJsZQorIyAgICAgZGVwZW5kZW5jeSBmb3VuZCBpbiBzeXNyb290ICh3aGljaCBzdGF5cyBwb3B1bGF0ZWQKKyMgICAgIGZyb20gMXN0IGJ1aWxkCisjIDNyZCB0byByZWJ1aWxkIGVhY2ggcmVjaXBlIG9ubHkgd2l0aCBkZXBlbmRlbmNpZXMgZGVmaW5lZAorIyAgICAgaW4gREVQRU5EUworIyA0dGggKG9wdGlvbmFsKSByZXBlYXQgYnVpbGQgbGlrZSAzcmQgdG8gbWFrZSBzdXJlIHRoYXQKKyMgICAgIG1pbmltYWwgdmVyc2lvbnMgb2YgZGVwZW5kZW5jaWVzIGRlZmluZWQgaW4gREVQRU5EUworIyAgICAgaXMgYWxzbyBlbm91Z2gKKworIyBHbG9iYWwgdmFycwordG1wZGlyPQordGFyZ2V0cz0KK3JlY2lwZXM9CitidWlsZGhpc3Rvcnk9CitidWlsZHR5cGU9CitkZWZhdWx0X3RhcmdldHM9IndvcmxkIgorZGVmYXVsdF9idWlsZGhpc3Rvcnk9ImJ1aWxkaGlzdG9yeSIKK2RlZmF1bHRfYnVpbGR0eXBlPSIxIDIgMyBjIgorCit1c2FnZSAoKSB7CisgIGNhdCA8PCBFT0YKK1dlbGNvbWUgdG8gdXRpbGl0eSB0byBkZXRlY3QgbWlzc2luZyBvciBhdXRvZW5hYmxlZCBkZXBlbmRlbmNpZXMuCitXQVJOSU5HOiB0aGlzIHV0aWxpdHkgd2lsbCBjb21wbGV0ZWx5IHJlbW92ZSB5b3VyIHRtcGRpciAobWFrZSBzdXJlCisgICAgICAgICB5b3UgZG9uJ3QgaGF2ZSBpbXBvcnRhbnQgYnVpbGRoaXN0b3J5IG9yIHBlcnNpc3RlbnQgZGlyIHRoZXJlKS4KKyQwIDxPUFRJT04+CisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAKKyAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQuCisKKyAgLS10bXBkaXI9PHRtcGRpcj4KKyAgICAgICAgU3BlY2lmeSB0bXBkaXIsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIgaWYgaXQgaXMgbm90IHNwZWNpZmllZC4KKyAgICAgICAgU29tZXRoaW5nIGxpa2UgL09FL29lLWNvcmUvdG1wLWVnbGliYyAobm8gLyBhdCB0aGUgZW5kKS4KKworICAtLXRhcmdldHM9PHRhcmdldHM+CisgICAgICAgIExpc3Qgb2YgdGFyZ2V0cyBzZXBhcmF0ZWQgYnkgc3BhY2UsIHdpbGwgdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUQVJHRVRTIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIEl0IHdpbGwgcnVuICJiaXRiYWtlIDx0YXJnZXRzPiIgdG8gcG9wdWxhdGUgc3lzcm9vdHMuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgIndvcmxkIi4KKworICAtLXJlY2lwZXM9PHJlY2lwZXM+CisgICAgICAgIEZpbGUgd2l0aCBsaXN0IG9mIHJlY2lwZXMgd2Ugd2FudCB0byByZWJ1aWxkIHdpdGggbWluaW1hbCBhbmQgbWF4aW1hbCBzeXNyb290LgorICAgICAgICBXaWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUkVDSVBFUyBpZiBpdCBpcyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBEZWZhdWx0IHZhbHVlIHdpbGwgdXNlIGFsbCBwYWNrYWdlcyBldmVyIHJlY29yZGVkIGluIGJ1aWxkaGlzdG9yeSBkaXJlY3RvcnkuCisKKyAgLS1idWlsZGhpc3Rvcnk9PGJ1aWxkaGlzdG9yeT4KKyAgICAgICAgUGF0aCB0byBidWlsZGhpc3RvcnkgZGlyZWN0b3J5LCBpdCBuZWVkcyB0byBiZSBlbmFibGVkIGluIHlvdXIgY29uZmlnLAorICAgICAgICBiZWNhdXNlIGl0J3MgdXNlZCB0byBkZXRlY3QgZGlmZmVyZW50IGRlcGVuZGVuY2llcyBhbmQgdG8gY3JlYXRlIGxpc3QKKyAgICAgICAgb2YgcmVjaXBlcyB0byByZWJ1aWxkIHdoZW4gaXQncyBub3Qgc3BlY2lmaWVkLgorICAgICAgICBXaWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQlVJTERISVNUT1JZIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgImJ1aWxkaGlzdG9yeSIKKworICAtLWJ1aWxkdHlwZT08YnVpbGR0eXBlPgorICAgICAgICBUaGVyZSBhcmUgNCB0eXBlcyBvZiBidWlsZDoKKyAgICAgICAgICAxOiBidWlsZCB0byBwb3B1bGF0ZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGFuZCBzeXNyb290CisgICAgICAgICAgMjogYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIGV2ZXJ5IHBvc3NpYmxlIGRlcAorICAgICAgICAgIDM6IGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcworICAgICAgICAgIDQ6IGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgYWdhaW4gd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcworICAgICAgICAgIGM6IGNvbXBhcmUgYnVpbGRoaXN0b3J5IGRpcmVjdG9yaWVzIGZyb20gYnVpbGQgMiBhbmQgMworICAgICAgICBXaWxsIHVzZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQlVJTERUWVBFIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgIjEgMiAzIGMiLCBvcmRlciBpcyBpbXBvcnRhbnQsIHR5cGUgNCBpcyBvcHRpb25hbC4KK0VPRgorfQorCisjIFByaW50IGVycm9yIGluZm9ybWF0aW9uIGFuZCBleGl0LgorZWNob19lcnJvciAoKSB7CisgIGVjaG8gIkVSUk9SOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCit3aGlsZSBbIC1uICIkMSIgXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdG1wZGlyPSopCisgICAgICB0bXBkaXI9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdG1wZGlyPSMjJyB8IHhhcmdzIHJlYWRsaW5rIC1lYAorICAgICAgWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIGFyZ3VtZW50IHRvIC0tdG1wZGlyIgorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLXRhcmdldHM9KikKKyAgICAgIHRhcmdldHM9YGVjaG8gJDEgfCBzZWQgLWUgJ3MjXi0tdGFyZ2V0cz0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0tcmVjaXBlcz0qKQorICAgICAgcmVjaXBlcz1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1yZWNpcGVzPSIqXChbXiJdKlwpIiojXDEjJ2AKKyAgICAgIHNoaWZ0CisgICAgICAgIDs7CisgICAgLS1idWlsZGhpc3Rvcnk9KikKKyAgICAgIGJ1aWxkaGlzdG9yeT1gZWNobyAkMSB8IHNlZCAtZSAncyNeLS1idWlsZGhpc3Rvcnk9IipcKFteIl0qXCkiKiNcMSMnYAorICAgICAgc2hpZnQKKyAgICAgICAgOzsKKyAgICAtLWJ1aWxkdHlwZT0qKQorICAgICAgYnVpbGR0eXBlPWBlY2hvICQxIHwgc2VkIC1lICdzI14tLWJ1aWxkdHlwZT0iKlwoW14iXSpcKSIqI1wxIydgCisgICAgICBzaGlmdAorICAgICAgICA7OworICAgIC0taGVscHwtaCkKKyAgICAgIHVzYWdlCisgICAgICBleGl0IDAKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudHMgJCoiCisgICAgICBlY2hvX2Vycm9yICJUcnkgJyQwIC1oJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworIyB0bXBkaXIgZGlyZWN0b3J5LCB1c2UgZW52aXJvbm1lbnQgdmFyaWFibGUgVE1QRElSCisjIGlmIGl0IHdhcyBub3Qgc3BlY2lmaWVkLCBvdGhlcndpc2UsIGVycm9yLgorWyAtbiAiJHRtcGRpciIgXSB8fCB0bXBkaXI9JFRNUERJUgorWyAtbiAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJObyB0bXBkaXIgZm91bmQhIgorWyAtZCAiJHRtcGRpciIgXSB8fCBlY2hvX2Vycm9yICJJbnZhbGlkIHRtcGRpciBcIiR0bXBkaXJcIiIKK1sgLW4gIiR0YXJnZXRzIiBdIHx8IHRhcmdldHM9JFRBUkdFVFMKK1sgLW4gIiR0YXJnZXRzIiBdIHx8IHRhcmdldHM9JGRlZmF1bHRfdGFyZ2V0cworWyAtbiAiJHJlY2lwZXMiIF0gfHwgcmVjaXBlcz0kUkVDSVBFUworWyAtbiAiJHJlY2lwZXMiIC1hICEgLWYgIiRyZWNpcGVzIiBdICYmIGVjaG9fZXJyb3IgIkludmFsaWQgZmlsZSB3aXRoIGxpc3Qgb2YgcmVjaXBlcyB0byByZWJ1aWxkIgorWyAtbiAiJHJlY2lwZXMiIF0gfHwgZWNobyAiQWxsIHBhY2thZ2VzIGV2ZXIgcmVjb3JkZWQgaW4gYnVpbGRoaXN0b3J5IGRpcmVjdG9yeSB3aWxsIGJlIHJlYnVpbHQiCitbIC1uICIkYnVpbGRoaXN0b3J5IiBdIHx8IGJ1aWxkaGlzdG9yeT0kQlVJTERISVNUT1JZCitbIC1uICIkYnVpbGRoaXN0b3J5IiBdIHx8IGJ1aWxkaGlzdG9yeT0kZGVmYXVsdF9idWlsZGhpc3RvcnkKK1sgLWQgIiRidWlsZGhpc3RvcnkiIF0gfHwgZWNob19lcnJvciAiSW52YWxpZCBidWlsZGhpc3RvcnkgZGlyZWN0b3J5IFwiJGJ1aWxkaGlzdG9yeVwiIgorWyAtbiAiJGJ1aWxkdHlwZSIgXSB8fCBidWlsZHR5cGU9JEJVSUxEVFlQRQorWyAtbiAiJGJ1aWxkdHlwZSIgXSB8fCBidWlsZHR5cGU9JGRlZmF1bHRfYnVpbGR0eXBlCitlY2hvICIkYnVpbGR0eXBlIiB8IGdyZXAgLXYgJ15bMTIzNGMgXSokJyAmJiBlY2hvX2Vycm9yICJJbnZhbGlkIGJ1aWxkdHlwZSBcIiRidWlsZHR5cGVcIiwgb25seSBzb21lIGNvbWJpbmF0aW9uIG9mIDEsIDIsIDMsIDQsIGMgc2VwYXJhdGVkIGJ5IHNwYWNlIGlzIGFsbG93ZWQiCisKK09VVFBVVF9CQVNFPXRlc3QtZGVwZW5kZW5jaWVzL2BkYXRlICIrJXMiYAorZGVjbGFyZSAtaSBSRVNVTFQ9MAorCitidWlsZF9hbGwoKSB7CisgIGVjaG8gIj09PT09IDFzdCBidWlsZCB0byBwb3B1bGF0ZSBzc3RhdGUtY2FjaGUgZGlyZWN0b3J5IGFuZCBzeXNyb290ID09PT09IgorICBPVVRQVVQxPSR7T1VUUFVUX0JBU0V9LyR7VFlQRX1fYWxsCisgIG1rZGlyIC1wICR7T1VUUFVUMX0KKyAgZWNobyAiTG9ncyB3aWxsIGJlIHN0b3JlZCBpbiAke09VVFBVVDF9IGRpcmVjdG9yeSIKKyAgYml0YmFrZSAtayAkdGFyZ2V0cyAyPiYxIHwgdGVlIC1hICR7T1VUUFVUMX0vY29tcGxldGUubG9nCisgIFJFU1VMVCs9JHtQSVBFU1RBVFVTWzBdfQorICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAke09VVFBVVDF9L2NvbXBsZXRlLmxvZyA+ICR7T1VUUFVUMX0vZmFpbGVkLXRhc2tzLmxvZworICBjYXQgJHtPVVRQVVQxfS9mYWlsZWQtdGFza3MubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGcnIHwgc29ydCAtdSA+ICR7T1VUUFVUMX0vZmFpbGVkLXJlY2lwZXMubG9nCit9CisKK2J1aWxkX2V2ZXJ5X3JlY2lwZSgpIHsKKyAgaWYgWyAiJHtUWVBFfSIgPSAiMiIgXSA7IHRoZW4KKyAgICBlY2hvICI9PT09PSAybmQgYnVpbGQgdG8gcmVidWlsZCBlYWNoIHJlY2lwZSB3aXRoIGV2ZXJ5IHBvc3NpYmxlIGRlcCA9PT09PSIKKyAgICBPVVRQVVRfTUFYPSR7T1VUUFVUX0JBU0V9LyR7VFlQRX1fbWF4CisgICAgT1VUUFVUQj0ke09VVFBVVF9NQVh9CisgIGVsc2UKKyAgICBlY2hvICI9PT09PSAzcmQgb3IgNHRoIGJ1aWxkIHRvIHJlYnVpbGQgZWFjaCByZWNpcGUgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcyA9PT09PSIKKyAgICBPVVRQVVRfTUlOPSR7T1VUUFVUX0JBU0V9LyR7VFlQRX1fbWluCisgICAgT1VUUFVUQj0ke09VVFBVVF9NSU59CisgIGZpCisKKyAgbWtkaXIgLXAgJHtPVVRQVVRCfSAke09VVFBVVEJ9L2ZhaWxlZCAke09VVFBVVEJ9L29rCisgIGVjaG8gIkxvZ3Mgd2lsbCBiZSBzdG9yZWQgaW4gJHtPVVRQVVRCfSBkaXJlY3RvcnkiCisgIGlmIFsgLXogIiRyZWNpcGVzIiBdOyB0aGVuCisgICAgbHMgLWQgJGJ1aWxkaGlzdG9yeS9wYWNrYWdlcy8qLyogfCB4YXJncyAtbiAxIGJhc2VuYW1lIHwgc29ydCAtdSA+ICR7T1VUUFVUQn0vcmVjaXBlLmxpc3QKKyAgICByZWNpcGVzPSR7T1VUUFVUQn0vcmVjaXBlLmxpc3QKKyAgZmkKKyAgaWYgWyAiJHtUWVBFfSIgIT0gIjIiIF0gOyB0aGVuCisgICAgZWNobyAiISEhUmVtb3ZpbmcgdG1wZGlyIFwiJHRtcGRpclwiISEhIgorICAgIHJtIC1yZiAkdG1wZGlyL2RlcGxveSAkdG1wZGlyL3BrZ2RhdGEgJHRtcGRpci9zc3RhdGUtY29udHJvbCAkdG1wZGlyL3N0YW1wcyAkdG1wZGlyL3N5c3Jvb3RzICR0bXBkaXIvd29yayAkdG1wZGlyL3dvcmstc2hhcmVkIDI+L2Rldi9udWxsCisgIGZpCisgIGk9MQorICBjb3VudD1gY2F0ICRyZWNpcGVzICR7T1VUUFVUMX0vZmFpbGVkLXJlY2lwZXMubG9nIHwgc29ydCAtdSB8IHdjIC1sYAorICBmb3IgcmVjaXBlIGluIGBjYXQgJHJlY2lwZXMgJHtPVVRQVVQxfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCBzb3J0IC11YDsgZG8KKyAgICBlY2hvICJCdWlsZGluZyByZWNpcGU6ICR7cmVjaXBlfSAoJGkvJGNvdW50KSIKKyAgICBkZWNsYXJlIC1pIFJFQ0lQRV9SRVNVTFQ9MAorICAgIGJpdGJha2UgLWMgY2xlYW5zc3RhdGUgJHtyZWNpcGV9ID4gJHtPVVRQVVRCfS8ke3JlY2lwZX0ubG9nIDI+JjE7CisgICAgUkVDSVBFX1JFU1VMVCs9JD8KKyAgICBiaXRiYWtlICR7cmVjaXBlfSA+PiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgMj4mMTsKKyAgICBSRUNJUEVfUkVTVUxUKz0kPworICAgIGlmIFsgIiR7UkVDSVBFX1JFU1VMVH0iICE9ICIwIiBdIDsgdGhlbgorICAgICAgUkVTVUxUKz0ke1JFQ0lQRV9SRVNVTFR9CisgICAgICBtdiAke09VVFBVVEJ9LyR7cmVjaXBlfS5sb2cgJHtPVVRQVVRCfS9mYWlsZWQvCisgICAgICBncmVwICJFUlJPUjogVGFzay4qZmFpbGVkIiAgJHtPVVRQVVRCfS9mYWlsZWQvJHtyZWNpcGV9LmxvZyB8IHRlZSAtYSAke09VVFBVVEJ9L2ZhaWxlZC10YXNrcy5sb2cKKyAgICAgIGdyZXAgIkVSUk9SOiBUYXNrLipmYWlsZWQiICAke09VVFBVVEJ9L2ZhaWxlZC8ke3JlY2lwZX0ubG9nIHwgc2VkICdzQC4qL0BAZzsgc0BfLipAQGc7IHNAXC5iYiwgLipAQGcnID4+ICR7T1VUUFVUQn0vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICAjIGFuZCBhcHBlbmQgYWxzbyAke3JlY2lwZX0gaW4gY2FzZSB0aGUgZmFpbGVkIHRhc2sgd2FzIGZyb20gc29tZSBkZXBlbmRlbmN5CisgICAgICBlY2hvICR7cmVjaXBlfSA+PiAke09VVFBVVEJ9L2ZhaWxlZC1yZWNpcGVzLmxvZworICAgIGVsc2UKKyAgICAgIG12ICR7T1VUUFVUQn0vJHtyZWNpcGV9LmxvZyAke09VVFBVVEJ9L29rLworICAgIGZpCisgICAgaWYgWyAiJHtUWVBFfSIgIT0gIjIiIF0gOyB0aGVuCisgICAgICBybSAtcmYgJHRtcGRpci9kZXBsb3kgJHRtcGRpci9wa2dkYXRhICR0bXBkaXIvc3N0YXRlLWNvbnRyb2wgJHRtcGRpci9zdGFtcHMgJHRtcGRpci9zeXNyb290cyAkdG1wZGlyL3dvcmsgJHRtcGRpci93b3JrLXNoYXJlZCAyPi9kZXYvbnVsbAorICAgIGZpCisgICAgaT1gZXhwciAkaSArIDFgCisgIGRvbmUKKyAgZWNobyAiQ29weWluZyBidWlsZGhpc3RvcnkvcGFja2FnZXMgdG8gJHtPVVRQVVRCfSIKKyAgY3AgLXJhICRidWlsZGhpc3RvcnkvcGFja2FnZXMgJHtPVVRQVVRCfQorICAjIFRoaXMgd2lsbCBiZSB1c2VmdWxsIHRvIHNlZSB3aGljaCBsaWJyYXJ5IGlzIHB1bGxpbmcgbmV3IGRlcGVuZGVuY3kKKyAgZWNobyAiQ29weWluZyBkb19wYWNrYWdlIGxvZ3MgdG8gJHtPVVRQVVRCfS9kb19wYWNrYWdlLyIKKyAgbWtkaXIgJHtPVVRQVVRCfS9kb19wYWNrYWdlCisgIGZpbmQgJHRtcGRpci93b3JrLyAtbmFtZSBsb2cuZG9fcGFja2FnZSAyPi9kZXYvbnVsbHwgd2hpbGUgcmVhZCBmOyBkbworICAgICMgcG4gaXMgMyBsZXZlbHMgYmFjaywgYnV0IHdlIGRvbid0IGtub3cgaWYgdGhlcmUgaXMganVzdCBvbmUgbG9nIHBlciBwbiAob25seSBvbmUgYXJjaCBhbmQgdmVyc2lvbikKKyAgICAjIGRlc3Q9YGVjaG8gJGYgfCBzZWQgJ3MjXi4qL1woW14vXSpcKS9cKFteL10qXCkvXChbXi9dKlwpL2xvZy5kb19wYWNrYWdlI1wxI2cnYAorICAgIGRlc3Q9YGVjaG8gJGYgfCBzZWQgInMjJHRtcGRpci93b3JrLyMjZzsgcyMvI18jZyJgCisgICAgY3AgJGYgJHtPVVRQVVRCfS9kb19wYWNrYWdlLyRkZXN0CisgIGRvbmUKK30KKworY29tcGFyZV9kZXBzKCkgeworICAjIHlvdSBjYW4gcnVuIGp1c3QgY29tcGFyZSB0YXNrIHdpdGggY29tbWFuZCBsaWtlIHRoaXMKKyAgIyBPVVRQVVRfQkFTRT10ZXN0LWRlcGVuZGVuY2llcy8xMzczMTQwMTcyIFwKKyAgIyBPVVRQVVRfTUFYPSR7T1VUUFVUX0JBU0V9LzJfbWF4IFwKKyAgIyBPVVRQVVRfTUlOPSR7T1VUUFVUX0JBU0V9LzNfbWluIFwKKyAgIyBvcGVuZW1iZWRkZWQtY29yZS9zY3JpcHRzL3Rlc3QtZGVwZW5kZW5jaWVzLnNoIC0tdG1wZGlyPXRtcC1lZ2xpYmMgLS10YXJnZXRzPWdsaWItMi4wIC0tcmVjaXBlcz1yZWNpcGVfbGlzdCAtLWJ1aWxkdHlwZT1jCisgIGVjaG8gIj09PT09IENvbXBhcmUgZGVwZW5kZW5jaWVzIHJlY29yZGVkIGluIFwiJHtPVVRQVVRfTUFYfVwiIGFuZCBcIiR7T1VUUFVUX01JTn1cIiA9PT09PSIKKyAgWyAtbiAiJHtPVVRQVVRDfSIgXSB8fCBPVVRQVVRDPSR7T1VUUFVUX0JBU0V9L2NvbXAKKyAgbWtkaXIgLXAgJHtPVVRQVVRDfQorICBPVVRQVVRfRklMRT0ke09VVFBVVEN9L2RlcGVuZGVuY3ktY2hhbmdlcworICBlY2hvICJEaWZmZXJlbmNlcyB3aWxsIGJlIHN0b3JlZCBpbiAke09VVFBVVF9GSUxFfSwgZG90IGlzIHNob3duIGZvciBldmVyeSAxMDAgb2YgY2hlY2tlZCBwYWNrYWdlcyIKKyAgZWNobyA+ICR7T1VUUFVUX0ZJTEV9CisKKyAgWyAtZCAke09VVFBVVF9NQVh9IF0gfHwgZWNob19lcnJvciAiRGlyZWN0b3J5IHdpdGggb3V0cHV0IGZyb20gYnVpbGQgMiBcIiR7T1VUUFVUX01BWH1cIiBkb2VzIG5vdCBleGlzdCIKKyAgWyAtZCAke09VVFBVVF9NSU59IF0gfHwgZWNob19lcnJvciAiRGlyZWN0b3J5IHdpdGggb3V0cHV0IGZyb20gYnVpbGQgMyBcIiR7T1VUUFVUX01JTn1cIiBkb2VzIG5vdCBleGlzdCIKKyAgWyAtZCAke09VVFBVVF9NQVh9L3BhY2thZ2VzLyBdIHx8IGVjaG9fZXJyb3IgIkRpcmVjdG9yeSB3aXRoIHBhY2thZ2VzIGZyb20gYnVpbGQgMiBcIiR7T1VUUFVUX01BWH0vcGFja2FnZXMvXCIgZG9lcyBub3QgZXhpc3QiCisgIFsgLWQgJHtPVVRQVVRfTUlOfS9wYWNrYWdlcy8gXSB8fCBlY2hvX2Vycm9yICJEaXJlY3Rvcnkgd2l0aCBwYWNrYWdlcyBmcm9tIGJ1aWxkIDMgXCIke09VVFBVVF9NSU59L3BhY2thZ2VzL1wiIGRvZXMgbm90IGV4aXN0IgorICBpPTAKKyAgZmluZCAke09VVFBVVF9NQVh9L3BhY2thZ2VzLyAtbmFtZSBsYXRlc3QgfCBzZWQgInMjJHtPVVRQVVRfTUFYfS8jI2ciIHwgd2hpbGUgcmVhZCBwa2c7IGRvCisgICAgbWF4X3BrZz0ke09VVFBVVF9NQVh9LyR7cGtnfQorICAgIG1pbl9wa2c9JHtPVVRQVVRfTUlOfS8ke3BrZ30KKyAgICAjIHBrZz1wYWNrYWdlcy9hcm12NXRlLW9lLWxpbnV4LWdudWVhYmkvbGlidW5naWYvbGlidW5naWYvbGF0ZXN0CisgICAgcmVjaXBlPWBlY2hvICIke3BrZ30iIHwgc2VkICdzI3BhY2thZ2VzL1teL10qL1woW14vXSpcKS9cKFteL10qXCkvbGF0ZXN0I1wxI2cnYAorICAgIHBhY2thZ2U9YGVjaG8gIiR7cGtnfSIgfCBzZWQgJ3MjcGFja2FnZXMvW14vXSovXChbXi9dKlwpL1woW14vXSpcKS9sYXRlc3QjXDIjZydgCisgICAgaWYgWyAhIC1mICIke21pbl9wa2d9IiBdIDsgdGhlbgorICAgICAgZWNobyAiRVJST1I6ICR7cmVjaXBlfTogJHtwYWNrYWdlfSBwYWNrYWdlIGlzbid0IGNyZWF0ZWQgd2hlbiBidWlsZGluZyB3aXRoIG1pbmltYWwgZGVwZW5kZW5jaWVzPyIgfCB0ZWUgLWEgJHtPVVRQVVRfRklMRX0KKyAgICAgIGVjaG8gJHtyZWNpcGV9ID4+ICR7T1VUUFVUQ30vZmFpbGVkLXJlY2lwZXMubG9nCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBzdHJpcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIHBhcmVudGhlc2lzCisgICAgbWF4X2RlcHM9YGdyZXAgIl5SREVQRU5EUyA9ICIgJHttYXhfcGtnfSB8IHNlZCAncy9eUkRFUEVORFMgPSAvIC9nOyBzLyQvIC9nOyBzLyhbXihdKikvL2cnYAorICAgIG1pbl9kZXBzPWBncmVwICJeUkRFUEVORFMgPSAiICR7bWluX3BrZ30gfCBzZWQgJ3MvXlJERVBFTkRTID0gLyAvZzsgcy8kLyAvZzsgcy8oW14oXSopLy9nJ2AKKyAgICBpZiBbICIkaSIgPSAxMDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gLW4gIi4iICMgY2hlYXAgcHJvZ3Jlc3NiYXIKKyAgICAgIGk9MAorICAgIGZpCisgICAgaWYgWyAiJHttYXhfZGVwc30iID0gIiR7bWluX2RlcHN9IiBdIDsgdGhlbgorICAgICAgIyBpdCdzIGFubm95aW5nIGxvbmcsIGJ1dCBhdCBsZWFzdCBpdCdzIHNob3dpbmcgc29tZSBwcm9ncmVzcywgd2FybmluZ3MgYXJlIGdyZXBwZWQgYXQgdGhlIGVuZAorICAgICAgZWNobyAiTk9URTogJHtyZWNpcGV9OiAke3BhY2thZ2V9IHJkZXBlbmRzIHdlcmVuJ3QgY2hhbmdlZCIgPj4gJHtPVVRQVVRfRklMRX0KKyAgICBlbHNlCisgICAgICBtaXNzaW5nX2RlcHM9CisgICAgICBmb3IgZGVwIGluICR7bWF4X2RlcHN9OyBkbworICAgICAgICBpZiAhIGVjaG8gIiR7bWluX2RlcHN9IiB8IGdyZXAgLXEgIiAke2RlcH0gIiA7IHRoZW4KKyAgICAgICAgICBtaXNzaW5nX2RlcHM9IiR7bWlzc2luZ19kZXBzfSAke2RlcH0iCisgICAgICAgICAgZWNobyAjIHRvIGdldCByaWQgb2YgZG90cyBvbiBsYXN0IGxpbmUKKyAgICAgICAgICBlY2hvICJXQVJOOiAke3JlY2lwZX06ICR7cGFja2FnZX0gcmRlcGVuZHMgb24gJHtkZXB9LCBidXQgaXQgaXNuJ3QgYSBidWlsZCBkZXBlbmRlbmN5PyIgfCB0ZWUgLWEgJHtPVVRQVVRfRklMRX0KKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICAgIGlmIFsgLW4gIiR7bWlzc2luZ19kZXBzfSIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAke3JlY2lwZX0gPj4gJHtPVVRQVVRDfS9mYWlsZWQtcmVjaXBlcy5sb2cKKyAgICAgIGZpCisgICAgZmkKKyAgICBpPWBleHByICRpICsgMWAKKyAgZG9uZQorICBlY2hvICMgdG8gZ2V0IHJpZCBvZiBkb3RzIG9uIGxhc3QgbGluZQorICBlY2hvICJGb3VuZCBkaWZmZXJlbmNlczogIgorICBncmVwICJeV0FSTjogIiAke09VVFBVVF9GSUxFfSB8IHRlZSAke09VVFBVVF9GSUxFfS53YXJuLmxvZworICBlY2hvICJGb3VuZCBlcnJvcnM6ICIKKyAgZ3JlcCAiXkVSUk9SOiAiICR7T1VUUFVUX0ZJTEV9IHwgdGVlICR7T1VUUFVUX0ZJTEV9LmVycm9yLmxvZworICBSRVNVTFQrPWBjYXQgJHtPVVRQVVRfRklMRX0ud2Fybi5sb2cgfCB3YyAtbGAKKyAgUkVTVUxUKz1gY2F0ICR7T1VUUFVUX0ZJTEV9LmVycm9yLmxvZyB8IHdjIC1sYAorfQorCitmb3IgVFlQRSBpbiAkYnVpbGR0eXBlOyBkbworICBjYXNlICR7VFlQRX0gaW4KKyAgICAxKSBidWlsZF9hbGw7OworICAgIDIpIGJ1aWxkX2V2ZXJ5X3JlY2lwZTs7CisgICAgMykgYnVpbGRfZXZlcnlfcmVjaXBlOzsKKyAgICA0KSBidWlsZF9ldmVyeV9yZWNpcGU7OworICAgIGMpIGNvbXBhcmVfZGVwczs7CisgICAgKikgZWNob19lcnJvciAiSW52YWxpZCBidWlsZHR5cGUgXCIkVFlQRVwiIgorICBlc2FjCitkb25lCisKK2NhdCAke09VVFBVVF9CQVNFfS8qL2ZhaWxlZC1yZWNpcGVzLmxvZyB8IHNvcnQgLXUgPj4gJHtPVVRQVVRfQkFTRX0vZmFpbGVkLXJlY2lwZXMubG9nCisKK2lmIFsgIiR7UkVTVUxUfSIgIT0gIjAiIF0gOyB0aGVuCisgIGVjaG8gIkVSUk9SOiAke1JFU1VMVH0gaXNzdWVzIHdlcmUgZm91bmQgaW4gdGhlc2UgcmVjaXBlczogYGNhdCAke09VVFBVVF9CQVNFfS9mYWlsZWQtcmVjaXBlcy5sb2cgfCB4YXJnc2AiCitmaQorCitlY2hvICJJTkZPOiBPdXRwdXQgd3JpdHRlbiBpbjogJHtPVVRQVVRfQkFTRX0iCitleGl0ICR7UkVTVUxUfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy90ZXN0LXJlZXhlYyBiL3NjcmlwdHMvdGVzdC1yZWV4ZWMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWVhYTk2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvdGVzdC1yZWV4ZWMKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGVzdCBTY3JpcHQgZm9yIHRhc2sgcmUtZXhlY3V0aW9uCisjIAorIyBDb3B5cmlnaHQgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisjIERFU0NSSVBUSU9OCisjIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIHRvIGFkZHJlc3MgaXNzdWVzIGZvciByZS1leGVjdXRpb24gb2YgCisjIHRhc2tzLiBUaGUgdGVzdCByZXN1bHRzIGFyZSBzYXZlZCBpbiAuL3JlZXhlY2xvZ3MuIEZvcmNlIGJ1aWxkCisjIGxvZ3MgYXJlIHNhdmVkIHdpdGggcHJlZml4ICJmb3JjZSIuIEJ1aWxkIGZhaWx1cmUgbG9ncyBhcmUgc2F2ZWQgd2l0aAorIyBwcmVmaXggImZhaWxlZCIuIExvZyBmaWxlcyB3aXRoIHByZWZpeCAiaW5pdGlhbCIgYXJlIHVzZWQgdG8gc2F2ZQorIyBpbml0aWFsIGJ1aWxkIGxvZ3MgZm9yIGVhY2ggcmVjaXBlLiBMb2cgZmlsZXMgd2l0aCBwcmVmaXggImNsZWFuIiBhcmUKKyMgdXNlZCB0byBzYXZlIGxvZ3Mgb2YgY2xlYW4gdGFzayBhZnRlciB0ZXN0aW5nIGZvciBhIHJlY2lwZSBpcyBmaW5pc2hlZC4KKyMKKwordGFyZ2V0cz1gYml0YmFrZSAtcyB8IGN1dCAtZCAiICIgLWYgMWAKKworTE9HUz0uL3JlZXhlY2xvZ3MKKworbWtkaXIgLXAgJExPR1MKKworIyBDbGVhciBzc3RhdGUgZmlsZXMgZm9yIHNwZWNpZmllZCByZWNpcGUKK2Z1bmN0aW9uIGNsZWFyc3N0YXRlIHsKKwl0YXJnZXQ9JDEKKworCXNzdGF0ZV9kaXI9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVfRElSIiB8IGN1dCAtZCAiXCIiIC1mIDJgCisJc3N0YXRlX3BrZ3NwZWM9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVfUEtHU1BFQyIgfCBjdXQgLWQgIlwiIiAtZiAyYAorCXNzdGFza3M9YGJpdGJha2UgJHRhcmdldCAtZSB8IGdyZXAgIl5TU1RBVEVUQVNLUyIgfCBjdXQgLWQgIlwiIiAtZiAyYAorCisJZm9yIHNzdGFzayBpbiAkc3N0YXNrcworCWRvCisJCXNzdGFzaz0ke3NzdGFzazozfQorCQljYXNlICRzc3Rhc2sgaW4KKwkJCXBvcHVsYXRlX3N5c3Jvb3QpIHNzdGFzaz0icG9wdWxhdGUtc3lzcm9vdCIKKwkJCTs7CisJCQlwb3B1bGF0ZV9saWMpIHNzdGFzaz0icG9wdWxhdGUtbGljIgorCQkJOzsKKwkJCXBhY2thZ2Vfd3JpdGVfaXBrKSBzc3Rhc2s9ImRlcGxveS1pcGsiCisJCQk7OworCQkJcGFja2FnZV93cml0ZV9kZWIpIHNzdGFzaz0iZGVwbG95LWRlYiIKKwkJCTs7CisJCQlwYWNrYWdlX3dyaXRlX3JwbSkgc3N0YXNrPSJkZXBsb3ktcnBtIgorCQkJOzsKKwkJCXBhY2thZ2UpIHNzdGFzaz0icGFja2FnZSIKKwkJCTs7CisJCQlkZXBsb3kpIHNzdGFzaz0iZGVwbG95IgorCQkJOzsKKwkJCSopCisJCQk7OworCQllc2FjCisKKwkJZWNobyAiUmVtb3ZpbmcgJHtzc3RhdGVfZGlyfS8ke3NzdGF0ZV9wa2dzcGVjfSpfJHtzc3Rhc2t9LnRneiogZm9yICR0YXJnZXQiCisJCXJtIC1yZiAke3NzdGF0ZV9kaXJ9LyR7c3N0YXRlX3BrZ3NwZWN9Kl8ke3NzdGFza30udGd6KgorCWRvbmUKK30KKworIyBGdW5jdGlvbiB0byByZS1leGVjdXRlIHNwZWNpZmllZCB0YXNrIG9mIHJlY2lwZQorZnVuY3Rpb24gdGVzdGl0IHsKKwl0YXJnZXQ9JDEKKwl0YXNrPSQyCisKKwl0YXNrPWBlY2hvICR0YXNrIHwgc2VkICdzL19zZXRzY2VuZS8vJ2AKKworCWlmIFsgLWYgJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzayBdOyB0aGVuCisJCXJldHVybgorCWZpCisKKwljYXNlICR0YXNrIGluCisJCWNsZWFufGJ1aWxkfGNsZWFuc3N0YXRlfGNsZWFuYWxsfHBhY2thZ2V8Y2xlYW5zc3RhdGUyfHBhY2thZ2Vfd3JpdGV8cGFja2FnZV93cml0ZV9pcGt8cGFja2FnZV93cml0ZV9ycG18cGFja2FnZV93cml0ZV9kZWJ8ZmV0Y2h8cG9wdWxhdGVfbGljKSByZXR1cm47OworCQlmZXRjaGFsbHxkZXZzaGVsbHxidWlsZGFsbHxsaXN0dGFza3N8Y2hlY2t1cml8Y2hlY2t1cmlhbGwpIHJldHVybjs7CisJZXNhYworCisJZWNobyAiQXR0ZW1wdGluZyB0YXJnZXQgJHRhcmdldCwgdGFzayAkdGFzayIKKwllY2hvICJJbml0aWFsIGJ1aWxkIgorCWJpdGJha2UgJHRhcmdldCAtYyBjbGVhbnNzdGF0ZSA+ICRMT0dTL2luaXRpYWwuJHRhcmdldC4kdGFzaworCWJpdGJha2UgJHRhcmdldCA+PiAkTE9HUy9pbml0aWFsLiR0YXJnZXQuJHRhc2sKKwljbGVhcnNzdGF0ZSAkdGFyZ2V0ID4+ICRMT0dTL2luaXRpYWwuJHRhcmdldC4kdGFzaworCWVjaG8gIlJlLWV4ZWN1dGlvbiBidWlsZCIKKwliaXRiYWtlICR0YXJnZXQgLWMgJHRhc2sgLWYgID4gJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzaworCWlmIFsgIiQ/IiAhPSAwIF07IHRoZW4KKwkJZWNobyAiRkFJTFVSRSBmb3IgJHRhcmdldCAkdGFzayIKKwkJY3AgJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzayAkTE9HUy9mYWlsZWQuJHRhcmdldC4kdGFzaworCQliaXRiYWtlICR0YXJnZXQgLWMgY2xlYW4gPiAkTE9HUy9jbGVhbi4kdGFyZ2V0LiR0YXNrCisJZWxzZQorCQliaXRiYWtlICR0YXJnZXQgPj4gJExPR1MvZm9yY2UuJHRhcmdldC4kdGFzaworCQlpZiBbICIkPyIgIT0gMCBdOyB0aGVuCisJCQllY2hvICJGQUlMVVJFMiBmb3IgJHRhcmdldCAkdGFzayIKKwkJCWNwICRMT0dTL2ZvcmNlLiR0YXJnZXQuJHRhc2sgJExPR1MvZmFpbGVkLiR0YXJnZXQuJHRhc2sKKwkJCWJpdGJha2UgJHRhcmdldCAtYyBjbGVhbiA+ICRMT0dTL2NsZWFuLiR0YXJnZXQuJHRhc2sKKwkJZmkKKwlmaQorCWVjaG8gIkRvbmUiCit9CisKKyMgR28gdGhyb3VnaCB0aGUgcmVjaXBlIGxpc3QgYW5kIHRoZXNlIHJlY2lwZXMnIHRhc2sgbGlzdAorIyBUaGVuIHJlLWV4ZWN1dGUgdGhlbQorZm9yIHRhcmdldCBpbiAkdGFyZ2V0czsgZG8KKwkjIFJlbW92ZSBsb2cgbWVzc2FnZXMgZnJvbSBiaXRiYWtlIG91dHB1dAorCWNhc2UgJHRhcmdldCBpbgorCQlTdW1tYXJ5KnxXQVJOSU5HKnxMb2FkaW5nKnxMb2FkZWQqfFBhY2thZ2UqfD09PT09KikgY29udGludWU7OworCWVzYWMKKwl0YXNrcz1gYml0YmFrZSAkdGFyZ2V0IC1jIGxpc3R0YXNrcyB8IGdyZXAgXmRvXyB8IHNlZCBzL2RvXy8vYAorCWZvciB0YXNrIGluICR0YXNrczsgZG8KKwkJdGVzdGl0ICR0YXJnZXQgJHRhc2sKKwlkb25lCitkb25lCisKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy90ZXN0LXJlbW90ZS1pbWFnZSBiL3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjNhNDRlYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMvdGVzdC1yZW1vdGUtaW1hZ2UKQEAgLTAsMCArMSwzNjAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworIyBERVNDUklQVElPTgorIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHRlc3QgcHVibGljIGF1dG9idWlsZGVyIGltYWdlcyBvbiByZW1vdGUgaGFyZHdhcmUuCisjIFRoZSBzY3JpcHQgaXMgY2FsbGVkIGZyb20gYSBtYWNoaW5lIHRoYXQgaXMgYWJsZSBkb3dubG9hZCB0aGUgaW1hZ2VzIGZyb20gdGhlIHJlbW90ZSBpbWFnZXMgcmVwb3NpdG9yeSBhbmQgdG8gY29ubmVjdCB0byB0aGUgdGVzdCBoYXJkd2FyZS4KKyMKKyMgdGVzdC1yZW1vdGUtaW1hZ2UgLS1pbWFnZS10eXBlIGNvcmUtaW1hZ2Utc2F0byAtLXJlcG8tbGluayBodHRwOi8vMTkyLjE2OC4xMC4yL2ltYWdlcyAtLXJlcXVpcmVkLXBhY2thZ2VzIHJwbSBwc3BsYXNoCisjCisjIFRyYW5zbGF0aW9uOiBCdWlsZCB0aGUgJ3JwbScgYW5kICdwc2xhc2gnIHBhY2thZ2VzIGFuZCB0ZXN0IGEgcmVtb3RlIGNvcmUtaW1hZ2Utc2F0byBpbWFnZSB1c2luZyB0aGUgaHR0cDovLzE5Mi4xNjguMTAuMi9pbWFnZXMgcmVwb3NpdG9yeS4KKyMKKyMgWW91IGNhbiBhbHNvIHVzZSB0aGUgJy1oJyBvcHRpb24gdG8gc2VlIHNvbWUgaGVscCBpbmZvcm1hdGlvbi4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc2h1dGlsCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworIyBBZGQgcGF0aCB0byBzY3JpcHRzL2xpYiBpbiBzeXMucGF0aDsKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworaW1wb3J0IHNjcmlwdHBhdGgKKworIyBBZGQgbWV0YS9saWIgdG8gc3lzLnBhdGgKK3NjcmlwdHBhdGguYWRkX29lX2xpYl9wYXRoKCkKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKKworIyBBZGQgYWxsIGxpYiBwYXRocyByZWxhdGl2ZSB0byBCQlBBVEggdG8gc3lzLnBhdGg7IHRoaXMgaXMgdXNlZCB0byBmaW5kIGFuZCBpbXBvcnQgdGhlIHRhcmdldCBjb250cm9sbGVycy4KK2ZvciBwYXRoIGluIGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCI6Iik6CisgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocGF0aCwgJ2xpYicpKSkKKworIyBJbiBvcmRlciB0byBpbXBvcnQgbW9kdWxlcyB0aGF0IGNvbnRhaW4gdGFyZ2V0IGNvbnRyb2xsZXJzLCB3ZSBuZWVkIHRoZSBiaXRiYWtlIGxpYnJhcmllcyBpbiBzeXMucGF0aCAuCitiaXRiYWtlcGF0aCA9IHNjcmlwdHBhdGguYWRkX2JpdGJha2VfbGliX3BhdGgoKQoraWYgbm90IGJpdGJha2VwYXRoOgorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVuYWJsZSB0byBmaW5kIGJpdGJha2UgYnkgc2VhcmNoaW5nIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhpcyBzY3JpcHQgb3IgUEFUSFxuIikKKyAgICBzeXMuZXhpdCgxKQorCisjIGNyZWF0ZSBhIGxvZ2dlcgorZGVmIGxvZ2dlcl9jcmVhdGUoKToKKyAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignaHdhdXRvJykKKyAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGZoID0gbG9nZ2luZy5GaWxlSGFuZGxlcihmaWxlbmFtZT0naHdhdXRvLmxvZycsIG1vZGU9J3cnKQorICAgIGZoLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGNoLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKworICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKKyAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGNoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisKKyAgICBsb2cuYWRkSGFuZGxlcihmaCkKKyAgICBsb2cuYWRkSGFuZGxlcihjaCkKKworICAgIHJldHVybiBsb2cKKworIyBpbnN0YW50aWF0ZSB0aGUgbG9nZ2VyCitsb2cgPSBsb2dnZXJfY3JlYXRlKCkKKworCisjIERlZmluZSBhbmQgcmV0dXJuIHRoZSBhcmd1bWVudHMgcGFyc2VyIGZvciB0aGUgc2NyaXB0CitkZWYgZ2V0X2FyZ3NfcGFyc2VyKCk6CisgICAgZGVzY3JpcHRpb24gPSAiVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gYXV0b21hdGVkIHJ1bnRpbWUgdGVzdHMgdXNpbmcgcmVtb3RlbHkgcHVibGlzaGVkIGltYWdlIGZpbGVzLiBZb3Ugc2hvdWxkIHByZXBhcmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IGp1c3QgbGlrZSBidWlsZGluZyBsb2NhbCBpbWFnZXMgYW5kIHJ1bm5pbmcgdGhlIHRlc3RzLiIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWltYWdlLXR5cGVzJywgcmVxdWlyZWQ9VHJ1ZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPScqJywgZGVzdD0iaW1hZ2VfdHlwZXMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1RoZSBpbWFnZSB0eXBlcyB0byB0ZXN0KGV4OiBjb3JlLWltYWdlLW1pbmltYWwpLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1yZXBvLWxpbmsnLCByZXF1aXJlZD1UcnVlLCBhY3Rpb249InN0b3JlIiwgdHlwZT1zdHIsIGRlc3Q9InJlcG9fbGluayIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nVGhlIGxpbmsgdG8gdGhlIHJlbW90ZSBpbWFnZXMgcmVwb3NpdG9yeS4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVxdWlyZWQtcGFja2FnZXMnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPScqJywgZGVzdD0icmVxdWlyZWRfcGFja2FnZXMiLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1JlcXVpcmVkIHBhY2thZ2VzIGZvciB0aGUgdGVzdHMuIFRoZXkgd2lsbCBiZSBidWlsdCBiZWZvcmUgdGhlIHRlc3RpbmcgYmVnaW5zLicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10YXJnZXRwcm9maWxlJywgcmVxdWlyZWQ9RmFsc2UsIGFjdGlvbj0ic3RvcmUiLCBuYXJncz0xLCBkZXN0PSJ0YXJnZXRwcm9maWxlIiwgZGVmYXVsdD0nQXV0b1RhcmdldFByb2ZpbGUnLCBoZWxwPSdUaGUgdGFyZ2V0IHByb2ZpbGUgdG8gYmUgdXNlZC4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmVwb3Byb2ZpbGUnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPTEsIGRlc3Q9InJlcG9wcm9maWxlIiwgZGVmYXVsdD0nUHVibGljQUInLCBoZWxwPSdUaGUgcmVwbyBwcm9maWxlIHRvIGJlIHVzZWQuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNraXAtZG93bmxvYWQnLCByZXF1aXJlZD1GYWxzZSwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2tpcF9kb3dubG9hZCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J1NraXAgZG93bmxvYWRpbmcgdGhlIGltYWdlcyBjb21wbGV0ZWx5LiBUaGlzIG5lZWRzIHRoZSBjb3JyZWN0IGZpbGVzIHRvIGJlIHByZXNlbnQgaW4gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlIHRhcmdldCBwcm9maWxlLicpCisgICAgcmV0dXJuIHBhcnNlcgorCitjbGFzcyBCYXNlVGFyZ2V0UHJvZmlsZShvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0YSBwcm9maWxlIGZvciBhIHNwZWNpZmljIHRhcmdldCAoTUFDSElORSB0eXBlICsgaW1hZ2UgdHlwZSkuCisgICAgIiIiCisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGltYWdlX3R5cGUpOgorICAgICAgICBzZWxmLmltYWdlX3R5cGUgPSBpbWFnZV90eXBlCisKKyAgICAgICAgc2VsZi5rZXJuZWxfZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5yb290ZnNfZmlsZSA9IE5vbmUKKyAgICAgICAgc2VsZi5tYW5pZmVzdF9maWxlID0gTm9uZQorICAgICAgICBzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzID0gW10gICAgICAgICAgIyBFeHRyYSBmaWxlcyAoZnVsbCBuYW1lKSB0byBiZSBkb3dubG9hZGVkLiBUaGV5IHNob3VsZCBiZSBzaXR1YXRlZCBpbiByZXBvX2xpbmsKKworICAgICMgVGhpcyBtZXRob2QgaXMgdXNlZCBhcyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIHdpdGggdGhlIHRhcmdldCBwcm9maWxlIGNsYXNzZXMuCisgICAgIyBJdCByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGEgbGlzdCBvZiBmaWxlcyBhbmQgdGhlaXIgbWVhbmluZy9kZXNjcmlwdGlvbi4KKyAgICBkZWYgZ2V0X2ZpbGVzX2RpY3Qoc2VsZik6CisgICAgICAgIGZpbGVzX2RpY3QgPSB7fQorCisgICAgICAgIGlmIHNlbGYua2VybmVsX2ZpbGU6CisgICAgICAgICAgICBmaWxlc19kaWN0WydrZXJuZWxfZmlsZSddID0gc2VsZi5rZXJuZWxfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCdUaGUgdGFyZ2V0IHByb2ZpbGUgZGlkIG5vdCBzZXQgYSBrZXJuZWwgZmlsZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBpZiBzZWxmLnJvb3Rmc19maWxlOgorICAgICAgICAgICAgZmlsZXNfZGljdFsncm9vdGZzX2ZpbGUnXSA9IHNlbGYucm9vdGZzX2ZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcignVGhlIHRhcmdldCBwcm9maWxlIGRpZCBub3Qgc2V0IGEgcm9vdGZzIGZpbGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgaWYgc2VsZi5tYW5pZmVzdF9maWxlOgorICAgICAgICAgICAgZmlsZXNfZGljdFsnbWFuaWZlc3RfZmlsZSddID0gc2VsZi5tYW5pZmVzdF9maWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ1RoZSB0YXJnZXQgcHJvZmlsZSBkaWQgbm90IHNldCBhIG1hbmlmZXN0IGZpbGUuJykKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgZm9yIGlkeCwgZiBpbiBlbnVtZXJhdGUoc2VsZi5leHRyYV9kb3dubG9hZF9maWxlcyk6CisgICAgICAgICAgICBmaWxlc19kaWN0WydleHRyYV9kb3dubG9hZF9maWxlJyArIHN0cihpZHgpXSA9IGYKKworICAgICAgICByZXR1cm4gZmlsZXNfZGljdAorCitjbGFzcyBBdXRvVGFyZ2V0UHJvZmlsZShCYXNlVGFyZ2V0UHJvZmlsZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfdHlwZSk6CisgICAgICAgIHN1cGVyKEF1dG9UYXJnZXRQcm9maWxlLCBzZWxmKS5fX2luaXRfXyhpbWFnZV90eXBlKQorICAgICAgICBzZWxmLmltYWdlX25hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9MSU5LX05BTUUnLCB0YXJnZXQ9aW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5rZXJuZWxfdHlwZSA9IGdldF9iYl92YXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCB0YXJnZXQ9aW1hZ2VfdHlwZSkKKyAgICAgICAgc2VsZi5jb250cm9sbGVyID0gc2VsZi5nZXRfY29udHJvbGxlcigpCisKKyAgICAgICAgc2VsZi5zZXRfa2VybmVsX2ZpbGUoKQorICAgICAgICBzZWxmLnNldF9yb290ZnNfZmlsZSgpCisgICAgICAgIHNlbGYuc2V0X21hbmlmZXN0X2ZpbGUoKQorICAgICAgICBzZWxmLnNldF9leHRyYV9kb3dubG9hZF9maWxlcygpCisKKyAgICAjIEdldCB0aGUgY29udHJvbGxlciBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgYnkgYml0YmFrZS4KKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXIoc2VsZik6CisgICAgICAgIGZyb20gb2VxYS5jb250cm9sbGVycy50ZXN0dGFyZ2V0bG9hZGVyIGltcG9ydCBUZXN0VGFyZ2V0TG9hZGVyCisKKyAgICAgICAgdGFyZ2V0X2NvbnRyb2xsZXIgPSBnZXRfYmJfdmFyKCdURVNUX1RBUkdFVCcpCisgICAgICAgIGJicGF0aCA9IGdldF9iYl92YXIoJ0JCUEFUSCcpLnNwbGl0KCc6JykKKworICAgICAgICBpZiB0YXJnZXRfY29udHJvbGxlciA9PSAicWVtdSI6CisgICAgICAgICAgICBmcm9tIG9lcWEudGFyZ2V0Y29udHJvbCBpbXBvcnQgUWVtdVRhcmdldAorICAgICAgICAgICAgY29udHJvbGxlciA9IFFlbXVUYXJnZXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3R0YXJnZXRsb2FkZXIgPSBUZXN0VGFyZ2V0TG9hZGVyKCkKKyAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0ZXN0dGFyZ2V0bG9hZGVyLmdldF9jb250cm9sbGVyX21vZHVsZSh0YXJnZXRfY29udHJvbGxlciwgYmJwYXRoKQorICAgICAgICByZXR1cm4gY29udHJvbGxlcgorCisgICAgZGVmIHNldF9rZXJuZWxfZmlsZShzZWxmKToKKyAgICAgICAgcG9zdGNvbmZpZyA9ICJRQV9HRVRfTUFDSElORSA9IFwiJHtNQUNISU5FfVwiIgorICAgICAgICBtYWNoaW5lID0gZ2V0X2JiX3ZhcignUUFfR0VUX01BQ0hJTkUnLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgICAgIHNlbGYua2VybmVsX2ZpbGUgPSBzZWxmLmtlcm5lbF90eXBlICsgJy0nICsgbWFjaGluZSArICcuYmluJworCisgICAgZGVmIHNldF9yb290ZnNfZmlsZShzZWxmKToKKyAgICAgICAgaW1hZ2VfZnN0eXBlcyA9IGdldF9iYl92YXIoJ0lNQUdFX0ZTVFlQRVMnKS5zcGxpdCgnICcpCisgICAgICAgICMgR2V0IGEgbWF0Y2hpbmcgdmFsdWUgYmV0d2VlbiB0YXJnZXQncyBJTUFHRV9GU1RZUEVTIGFuZCB0aGUgaW1hZ2UgZnN0eXBlcyBzdXBwb2VydGVkIGJ5IHRoZSB0YXJnZXQgY29udHJvbGxlci4KKyAgICAgICAgZnN0eXBlID0gc2VsZi5jb250cm9sbGVyLm1hdGNoX2ltYWdlX2ZzdHlwZShkPU5vbmUsIGltYWdlX2ZzdHlwZXM9aW1hZ2VfZnN0eXBlcykKKyAgICAgICAgaWYgZnN0eXBlOgorICAgICAgICAgICAgc2VsZi5yb290ZnNfZmlsZSA9IHNlbGYuaW1hZ2VfbmFtZSArICcuJyArIGZzdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmVycm9yKCJDb3VsZCBub3QgZ2V0IGEgY29tcGF0aWJsZSBpbWFnZSBmc3R5cGUuIENoZWNrIHRoYXQgSU1BR0VfRlNUWVBFUyBhbmQgdGhlIHRhcmdldCBjb250cm9sbGVyJ3Mgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgZmlsZWRzIGhhdmUgY29tbW9uIHZhbHVlcy4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBzZXRfbWFuaWZlc3RfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5tYW5pZmVzdF9maWxlID0gc2VsZi5pbWFnZV9uYW1lICsgIi5tYW5pZmVzdCIKKworICAgIGRlZiBzZXRfZXh0cmFfZG93bmxvYWRfZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXMgPSBzZWxmLmdldF9jb250cm9sbGVyX2V4dHJhX2ZpbGVzKCkKKyAgICAgICAgaWYgbm90IHNlbGYuZXh0cmFfZG93bmxvYWRfZmlsZXM6CisgICAgICAgICAgICBzZWxmLmV4dHJhX2Rvd25sb2FkX2ZpbGVzID0gW10KKworICAgIGRlZiBnZXRfY29udHJvbGxlcl9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgY29udHJvbGxlciA9IHNlbGYuZ2V0X2NvbnRyb2xsZXIoKQorICAgICAgICByZXR1cm4gY29udHJvbGxlci5nZXRfZXh0cmFfZmlsZXMoKQorCisKK2NsYXNzIEJhc2VSZXBvUHJvZmlsZShvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbWV0YSBwcm9maWxlIGZvciBhbiBpbWFnZXMgcmVwb3NpdG9yeS4KKyAgICAiIiIKKworICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb2xpbmssIGxvY2FsZGlyKToKKyAgICAgICAgc2VsZi5sb2NhbGRpciA9IGxvY2FsZGlyCisgICAgICAgIHNlbGYucmVwb2xpbmsgPSByZXBvbGluaworCisgICAgIyBUaGUgZm9sbG93aW5nIGFic3RyYWN0IG1ldGhvZHMgYXJlIHRoZSBpbnRlcmZhY2VzIHRvIHRoZSByZXBvc2l0b3J5IHByb2ZpbGUgY2xhc3NlcyBkZXJpdmVkIGZyb20gdGhpcyBhYnN0cmFjdCBjbGFzcy4KKworICAgICMgVGhpcyBtZXRob2Qgc2hvdWxkIGNoZWNrIHRoZSBmaWxlIG5hbWVkICdmaWxlX25hbWUnIGlmIGl0IGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1cHN0cmVhbSBvbmUuCisgICAgIyBTaG91bGQgcmV0dXJuIEZhbHNlIGlmIHRoZSBpbWFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgdXBzdHJlYW0gYW5kIFRydWUgaWYgaXQgZGlmZmVycy4KKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY2hlY2tfb2xkX2ZpbGUoc2VsZiwgZmlsZV9uYW1lKToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgZmV0Y2ggZmlsZV9uYW1lIGFuZCBjcmVhdGUgYSBzeW1saW5rIHRvIGxvY2FsbmFtZSBpZiBzZXQuCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGZldGNoKHNlbGYsIGZpbGVfbmFtZSwgbG9jYWxuYW1lPU5vbmUpOgorICAgICAgICBwYXNzCisKK2NsYXNzIFB1YmxpY0FCKEJhc2VSZXBvUHJvZmlsZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb2xpbmssIGxvY2FsZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihQdWJsaWNBQiwgc2VsZikuX19pbml0X18ocmVwb2xpbmssIGxvY2FsZGlyKQorICAgICAgICBpZiBsb2NhbGRpciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5sb2NhbGRpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydCVUlMRERJUiddLCAnUHVibGljQUJNaXJyb3InKQorCisgICAgIyBOb3QgeWV0IGltcGxlbWVudGVkLiBBbHdheXMgcmV0dXJuaW5nIFRydWUuCisgICAgZGVmIGNoZWNrX29sZF9maWxlKHNlbGYsIGZpbGVfbmFtZSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X3JlcG9fcGF0aChzZWxmKToKKyAgICAgICAgcGF0aCA9ICcvbWFjaGluZXMvJworCisgICAgICAgIHBvc3Rjb25maWcgPSAiUUFfR0VUX01BQ0hJTkUgPSBcIiR7TUFDSElORX1cIiIKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ1FBX0dFVF9NQUNISU5FJywgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgICAgICBpZiAncWVtdScgaW4gbWFjaGluZToKKyAgICAgICAgICAgIHBhdGggKz0gJ3FlbXUvJworCisgICAgICAgIHBvc3Rjb25maWcgPSAiUUFfR0VUX0RJU1RSTyA9IFwiJHtESVNUUk99XCIiCisgICAgICAgIGRpc3RybyA9IGdldF9iYl92YXIoJ1FBX0dFVF9ESVNUUk8nLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgICAgIHBhdGggKz0gZGlzdHJvLnJlcGxhY2UoJ3Bva3knLCBtYWNoaW5lKSArICcvJworICAgICAgICByZXR1cm4gcGF0aAorCisKKyAgICBkZWYgZmV0Y2goc2VsZiwgZmlsZV9uYW1lLCBsb2NhbG5hbWU9Tm9uZSk6CisgICAgICAgIHJlcG9fcGF0aCA9IHNlbGYuZ2V0X3JlcG9fcGF0aCgpCisgICAgICAgIGxpbmsgPSBzZWxmLnJlcG9saW5rICsgcmVwb19wYXRoICsgZmlsZV9uYW1lCisKKyAgICAgICAgc2VsZi53Z2V0KGxpbmssIHNlbGYubG9jYWxkaXIsIGxvY2FsbmFtZSkKKworICAgIGRlZiB3Z2V0KHNlbGYsIGxpbmssIGxvY2FsZGlyLCBsb2NhbG5hbWU9Tm9uZSwgZXh0cmFhcmdzPU5vbmUpOgorICAgICAgICB3Z2V0X2NtZCA9ICcvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMwIC1udiAtLXBhc3NpdmUtZnRwIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgJworCisgICAgICAgIGlmIGxvY2FsbmFtZToKKyAgICAgICAgICAgIHdnZXRfY21kICs9ICcgLU8gJyArIGxvY2FsbmFtZSArICcgJworCisgICAgICAgIGlmIGV4dHJhYXJnczoKKyAgICAgICAgICAgIHdnZXRfY21kICs9ICcgJyArIGV4dHJhYXJncyArICcgJworCisgICAgICAgIHdnZXRfY21kICs9ICIgLVAgJXMgJyVzJyIgJSAobG9jYWxkaXIsIGxpbmspCisgICAgICAgIHJ1bkNtZCh3Z2V0X2NtZCkKKworY2xhc3MgSHdBdXRvKCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW1hZ2VfdHlwZXMsIHJlcG9saW5rLCByZXF1aXJlZF9wYWNrYWdlcywgdGFyZ2V0cHJvZmlsZSwgcmVwb3Byb2ZpbGUsIHNraXBfZG93bmxvYWQpOgorICAgICAgICBsb2cuaW5mbygnSW5pdGlhbGl6aW5nLi4nKQorICAgICAgICBzZWxmLmltYWdlX3R5cGVzID0gaW1hZ2VfdHlwZXMKKyAgICAgICAgc2VsZi5yZXBvbGluayA9IHJlcG9saW5rCisgICAgICAgIHNlbGYucmVxdWlyZWRfcGFja2FnZXMgPSByZXF1aXJlZF9wYWNrYWdlcworICAgICAgICBzZWxmLnRhcmdldHByb2ZpbGUgPSB0YXJnZXRwcm9maWxlCisgICAgICAgIHNlbGYucmVwb3Byb2ZpbGUgPSByZXBvcHJvZmlsZQorICAgICAgICBzZWxmLnNraXBfZG93bmxvYWQgPSBza2lwX2Rvd25sb2FkCisgICAgICAgIHNlbGYucmVwbyA9IHNlbGYuZ2V0X3JlcG9fcHJvZmlsZShzZWxmLnJlcG9saW5rKQorCisgICAgIyBHZXQgdGhlIHJlcG9zaXRvcnkgcHJvZmlsZTsgZm9yIG5vdyB3ZSBvbmx5IGxvb2sgaW5zaWRlIHRoaXMgbW9kdWxlLgorICAgIGRlZiBnZXRfcmVwb19wcm9maWxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJlcG8gPSBnZXRhdHRyKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgc2VsZi5yZXBvcHJvZmlsZSkoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBsb2cuaW5mbygiVXNpbmcgcmVwbyBwcm9maWxlOiAlcyIgJSByZXBvLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuIHJlcG8KKworICAgICMgR2V0IHRoZSB0YXJnZXQgcHJvZmlsZTsgZm9yIG5vdyB3ZSBvbmx5IGxvb2sgaW5zaWRlIHRoaXMgbW9kdWxlLgorICAgIGRlZiBnZXRfdGFyZ2V0X3Byb2ZpbGUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdGFyZ2V0ID0gZ2V0YXR0cihzeXMubW9kdWxlc1tfX25hbWVfX10sIHNlbGYudGFyZ2V0cHJvZmlsZSkoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBsb2cuaW5mbygiVXNpbmcgdGFyZ2V0IHByb2ZpbGU6ICVzIiAlIHRhcmdldC5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHJldHVybiB0YXJnZXQKKworICAgICMgUnVuIHRoZSB0ZXN0aW1hZ2UgdGFzayBvbiBhIGJ1aWxkIHdoaWxlIHJlZGlyZWN0aW5nIERFUExPWV9ESVJfSU1BR0UgdG8gcmVwby5sb2NhbGRpciwgd2hlcmUgdGhlIGltYWdlcyBhcmUgZG93bmxvYWRlZC4KKyAgICBkZWYgcnVuVGVzdGltYWdlQnVpbGQoc2VsZiwgaW1hZ2VfdHlwZSk6CisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nIHRoZSBydW50aW1lIHRlc3RzIGZvciAlcy4uIiAlIGltYWdlX3R5cGUpCisgICAgICAgIHBvc3Rjb25maWcgPSAiREVQTE9ZX0RJUl9JTUFHRSA9IFwiJXNcIiIgJSBzZWxmLnJlcG8ubG9jYWxkaXIKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgiJXMgLWMgdGVzdGltYWdlIiAlIGltYWdlX3R5cGUsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKQorICAgICAgICB0ZXN0aW1hZ2VfcmVzdWx0cyA9IGZ0b29scy5yZWFkX2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIlQiLCBpbWFnZV90eXBlKSwgImxvZy5kb190ZXN0aW1hZ2UiKSkKKyAgICAgICAgbG9nLmluZm8oJ1J1bnRpbWUgdGVzdHMgcmVzdWx0cyBmb3IgJXM6JyAlIGltYWdlX3R5cGUpCisgICAgICAgIHByaW50IHRlc3RpbWFnZV9yZXN1bHRzCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICMgU3RhcnQgdGhlIHByb2NlZHVyZSEKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcXVpcmVkX3BhY2thZ2VzOgorICAgICAgICAgICAgIyBCdWlsZCB0aGUgcmVxdWlyZWQgcGFja2FnZXMgZm9yIHRoZSB0ZXN0cworICAgICAgICAgICAgbG9nLmluZm8oIkJ1aWxkaW5nIHRoZSByZXF1aXJlZCBwYWNrYWdlczogJXMgLiIgJSAnLCAnLmpvaW4obWFwKHN0ciwgc2VsZi5yZXF1aXJlZF9wYWNrYWdlcykpKQorICAgICAgICAgICAgcmVzdWx0ID0gYml0YmFrZShzZWxmLnJlcXVpcmVkX3BhY2thZ2VzLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJDb3VsZCBub3QgYnVpbGQgcmVxdWlyZWQgcGFja2FnZXM6ICVzLiBPdXRwdXQ6ICVzIiAlIChzZWxmLnJlcXVpcmVkX3BhY2thZ2VzLCByZXN1bHQub3V0cHV0KSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICAjIEJ1aWxkIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkgbWV0YSBkYXRhLgorICAgICAgICAgICAgbG9nLmluZm8oIkJ1aWxkaW5nIHRoZSBwYWNrYWdlIGluZGV4LiIpCisgICAgICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCJwYWNrYWdlLWluZGV4IiwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgaWYgcmVzdWx0LnN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiQ291bGQgbm90IGJ1aWxkICdwYWNrYWdlLWluZGV4Jy4gT3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIHRoZSBpbWFnZXMgdG8gYmUgZG93bmxvYWRlZAorICAgICAgICBsb2cuaW5mbygiQ3JlYXRpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZSAlcyIgJSBzZWxmLnJlcG8ubG9jYWxkaXIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJlcG8ubG9jYWxkaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5yZXBvLmxvY2FsZGlyKQorCisgICAgICAgICMgRm9yIGVhY2ggaW1hZ2UgdHlwZSwgZG93bmxvYWQgdGhlIG5lZWRlZCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0cy4KKyAgICAgICAgbm9pc3N1ZXNmb3VuZCA9IFRydWUKKyAgICAgICAgZm9yIGltYWdlX3R5cGUgaW4gc2VsZi5pbWFnZV90eXBlczoKKyAgICAgICAgICAgIGlmIHNlbGYuc2tpcF9kb3dubG9hZDoKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiU2tpcHBpbmcgZG93bmxvYWRpbmcgdGhlIGltYWdlcy4uIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gc2VsZi5nZXRfdGFyZ2V0X3Byb2ZpbGUoaW1hZ2VfdHlwZSkKKyAgICAgICAgICAgICAgICBmaWxlc19kaWN0ID0gdGFyZ2V0LmdldF9maWxlc19kaWN0KCkKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygiRG93bmxvYWRpbmcgZmlsZXMgZm9yICVzIiAlIGltYWdlX3R5cGUpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXNfZGljdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXBvLmNoZWNrX29sZF9maWxlKGZpbGVzX2RpY3RbZl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yZXBvLmxvY2FsZGlyLCBmaWxlc19kaWN0W2ZdKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwby5mZXRjaChmaWxlc19kaWN0W2ZdKQorCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RpbWFnZUJ1aWxkKGltYWdlX3R5cGUpCisgICAgICAgICAgICBpZiByZXN1bHQuc3RhdHVzICE9IDA6CisgICAgICAgICAgICAgICAgbm9pc3N1ZXNmb3VuZCA9IEZhbHNlCisKKyAgICAgICAgaWYgbm9pc3N1ZXNmb3VuZDoKKyAgICAgICAgICAgIGxvZy5pbmZvKCdGaW5pc2hlZC4gTm8gaXNzdWVzIGZvdW5kLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZXJyb3IoJ0ZpbmlzaGVkLiBTb21lIHJ1bnRpbWUgdGVzdHMgaGF2ZSBmYWlsZWQuIFJldHVybmluZyBub24tMCBzdGF0dXMgY29kZS4nKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworCisKK2RlZiBtYWluKCk6CisKKyAgICBwYXJzZXIgPSBnZXRfYXJnc19wYXJzZXIoKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBod2F1dG8gPSBId0F1dG8oaW1hZ2VfdHlwZXM9YXJncy5pbWFnZV90eXBlcywgcmVwb2xpbms9YXJncy5yZXBvX2xpbmssIHJlcXVpcmVkX3BhY2thZ2VzPWFyZ3MucmVxdWlyZWRfcGFja2FnZXMsIHRhcmdldHByb2ZpbGU9YXJncy50YXJnZXRwcm9maWxlLCByZXBvcHJvZmlsZT1hcmdzLnJlcG9wcm9maWxlLCBza2lwX2Rvd25sb2FkPWFyZ3Muc2tpcF9kb3dubG9hZCkKKworICAgIGh3YXV0by5ydW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRyeToKKyAgICAgICAgcmV0ID0gbWFpbigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmV0ID0gMQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoNSkKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weSBiL3NjcmlwdHMvdGlueS9kaXJzaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwZmY0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3RpbnkvZGlyc2l6ZS5weQpAQCAtMCwwICsxLDkzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyMKKyMKKyMgRGlzcGxheSBkZXRhaWxzIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gc2l6ZSwgYnJva2VuIHVwIGJ5IGRpcmVjdG9yeS4KKyMgQWxsb3dzIGZvciBsaW1pdGluZyBieSBzaXplIHRvIGZvY3VzIG9uIHRoZSBsYXJnZXIgZmlsZXMuCisjCisjIEF1dGhvcjogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN0YXQKKworY2xhc3MgUmVjb3JkOgorICAgIGRlZiBjcmVhdGUocGF0aCk6CisgICAgICAgIHIgPSBSZWNvcmQocGF0aCkKKworICAgICAgICBzID0gb3MubHN0YXQocGF0aCkKKyAgICAgICAgaWYgc3RhdC5TX0lTRElSKHMuc3RfbW9kZSk6CisgICAgICAgICAgICBmb3IgcCBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcGF0aCArICIvIiArIHAKKyAgICAgICAgICAgICAgICBzcyA9IG9zLmxzdGF0KHBhdGhuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0LlNfSVNMTksoc3Muc3RfbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHIucmVjb3Jkcy5hcHBlbmQoUmVjb3JkLmNyZWF0ZShwYXRobmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHIuc2l6ZSArPSByLnJlY29yZHNbLTFdLnNpemUKKyAgICAgICAgICAgIHIucmVjb3Jkcy5zb3J0KHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHIuc2l6ZSA9IG9zLmxzdGF0KHBhdGgpLnN0X3NpemUKKworICAgICAgICByZXR1cm4gcgorICAgIGNyZWF0ZSA9IHN0YXRpY21ldGhvZChjcmVhdGUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5zaXplID0gMAorICAgICAgICBzZWxmLnJlY29yZHMgPSBbXQorCisgICAgZGVmIF9fY21wX18odGhpcywgdGhhdCk6CisgICAgICAgIGlmIHRoYXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRoYXQsIFJlY29yZCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgaWYgbGVuKHRoaXMucmVjb3JkcykgPiAwIGFuZCBsZW4odGhhdC5yZWNvcmRzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIGxlbih0aGlzLnJlY29yZHMpID09IDAgYW5kIGxlbih0aGF0LnJlY29yZHMpID4gMDoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGlmIHRoaXMuc2l6ZSA8IHRoYXQuc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiB0aGlzLnNpemUgPiB0aGF0LnNpemU6CisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHNob3coc2VsZiwgbWluc2l6ZSk6CisgICAgICAgIHRvdGFsID0gMAorICAgICAgICBpZiBzZWxmLnNpemUgPD0gbWluc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHByaW50ICIlMTBkICVzIiAlIChzZWxmLnNpemUsIHNlbGYucGF0aCkKKyAgICAgICAgZm9yIHIgaW4gc2VsZi5yZWNvcmRzOgorICAgICAgICAgICAgdG90YWwgKz0gci5zaG93KG1pbnNpemUpCisgICAgICAgIGlmIGxlbihzZWxmLnJlY29yZHMpID09IDA6CisgICAgICAgICAgICB0b3RhbCA9IHNlbGYuc2l6ZQorICAgICAgICByZXR1cm4gdG90YWwKKworCitkZWYgbWFpbigpOgorICAgIG1pbnNpemUgPSAwCisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgorICAgICAgICBtaW5zaXplID0gaW50KHN5cy5hcmd2WzFdKQorICAgIHJvb3RmcyA9IFJlY29yZC5jcmVhdGUoIi4iKQorICAgIHRvdGFsID0gcm9vdGZzLnNob3cobWluc2l6ZSkKKyAgICBwcmludCAiRGlzcGxheWVkICVkLyVkIGJ5dGVzICglLjJmJSUpIiAlIFwKKyAgICAgICAgICAodG90YWwsIHJvb3Rmcy5zaXplLCAxMDAgKiBmbG9hdCh0b3RhbCkgLyByb290ZnMuc2l6ZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy90aW55L2tzaXplLnB5IGIvc2NyaXB0cy90aW55L2tzaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwMDZmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3Rpbnkva3NpemUucHkKQEAgLTAsMCArMSwxNjUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIworIyBEaXNwbGF5IGRldGFpbHMgb2YgdGhlIGtlcm5lbCBidWlsZCBzaXplLCBicm9rZW4gdXAgYnkgYnVpbHQtaW4uby4gU29ydAorIyB0aGUgb2JqZWN0cyBieSBzaXplLiBSdW4gZnJvbSB0aGUgdG9wIGxldmVsIGtlcm5lbCBidWlsZCBkaXJlY3RvcnkuCisjCisjIEF1dGhvcjogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisjCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcworZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCitmcm9tIHN0cmluZyBpbXBvcnQgam9pbgorCisKK2RlZiB1c2FnZSgpOgorICAgIHByb2cgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgIHByaW50ICdVc2FnZTogJXMgW09QVElPTl0uLi4nICUgKHByb2cpCisgICAgcHJpbnQgJyAgLWQsICAgICAgICAgICAgICAgICBkaXNwbGF5IGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgZHJpdmVycyBkZXRhaWwnCisgICAgcHJpbnQgJyAgLWgsIC0taGVscCAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCcKKyAgICBwcmludCAnJworICAgIHByaW50ICdSdW4gJXMgZnJvbSB0aGUgdG9wLWxldmVsIExpbnV4IGtlcm5lbCBidWlsZCBkaXJlY3RvcnkuJyAlIChwcm9nKQorCisKK2NsYXNzIFNpemVzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnbG9iKToKKyAgICAgICAgc2VsZi50aXRsZSA9IGdsb2IKKyAgICAgICAgcCA9IFBvcGVuKCJzaXplIC10ICIgKyBnbG9iLCBzaGVsbD1UcnVlLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zcGxpdGxpbmVzKCkKKyAgICAgICAgaWYgbGVuKG91dHB1dCkgPiAyOgorICAgICAgICAgICAgc2l6ZXMgPSBvdXRwdXRbLTFdLnNwbGl0KClbMDo0XQorICAgICAgICAgICAgc2VsZi50ZXh0ID0gaW50KHNpemVzWzBdKQorICAgICAgICAgICAgc2VsZi5kYXRhID0gaW50KHNpemVzWzFdKQorICAgICAgICAgICAgc2VsZi5ic3MgPSBpbnQoc2l6ZXNbMl0pCisgICAgICAgICAgICBzZWxmLnRvdGFsID0gaW50KHNpemVzWzNdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXh0ID0gc2VsZi5kYXRhID0gc2VsZi5ic3MgPSBzZWxmLnRvdGFsID0gMAorCisgICAgZGVmIHNob3coc2VsZiwgaW5kZW50PSIiKToKKyAgICAgICAgcHJpbnQgIiUtMzJzICUxMGQgfCAlMTBkICUxMGQgJTEwZCIgJSBcCisgICAgICAgICAgICAgIChpbmRlbnQrc2VsZi50aXRsZSwgc2VsZi50b3RhbCwgc2VsZi50ZXh0LCBzZWxmLmRhdGEsIHNlbGYuYnNzKQorCisKK2NsYXNzIFJlcG9ydDoKKyAgICBkZWYgY3JlYXRlKGZpbGVuYW1lLCB0aXRsZSwgc3ViZ2xvYj1Ob25lKToKKyAgICAgICAgciA9IFJlcG9ydChmaWxlbmFtZSwgdGl0bGUpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCisKKyAgICAgICAgcCA9IFBvcGVuKCJscyAiICsgcGF0aCArICIvKi5vIHwgZ3JlcCAtdiBidWlsdC1pbi5vIiwKKyAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgZ2xvYiA9IGpvaW4ocC5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMoKSkKKyAgICAgICAgb3JlcG9ydCA9IFJlcG9ydChnbG9iLCBwYXRoICsgIi8qLm8iKQorICAgICAgICBvcmVwb3J0LnNpemVzLnRpdGxlID0gcGF0aCArICIvKi5vIgorICAgICAgICByLnBhcnRzLmFwcGVuZChvcmVwb3J0KQorCisgICAgICAgIGlmIHN1Ymdsb2I6CisgICAgICAgICAgICBwID0gUG9wZW4oImxzICIgKyBzdWJnbG9iLCBzaGVsbD1UcnVlLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgICAgICBmb3IgZiBpbiBwLmNvbW11bmljYXRlKClbMF0uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZikKKyAgICAgICAgICAgICAgICByLnBhcnRzLmFwcGVuZChSZXBvcnQuY3JlYXRlKGYsIHBhdGgsIHBhdGggKyAiLyovYnVpbHQtaW4ubyIpKQorICAgICAgICAgICAgci5wYXJ0cy5zb3J0KHJldmVyc2U9VHJ1ZSkKKworICAgICAgICBmb3IgYiBpbiByLnBhcnRzOgorICAgICAgICAgICAgci50b3RhbHNbInRvdGFsIl0gKz0gYi5zaXplcy50b3RhbAorICAgICAgICAgICAgci50b3RhbHNbInRleHQiXSArPSBiLnNpemVzLnRleHQKKyAgICAgICAgICAgIHIudG90YWxzWyJkYXRhIl0gKz0gYi5zaXplcy5kYXRhCisgICAgICAgICAgICByLnRvdGFsc1siYnNzIl0gKz0gYi5zaXplcy5ic3MKKworICAgICAgICByLmRlbHRhc1sidG90YWwiXSA9IHIuc2l6ZXMudG90YWwgLSByLnRvdGFsc1sidG90YWwiXQorICAgICAgICByLmRlbHRhc1sidGV4dCJdID0gci5zaXplcy50ZXh0IC0gci50b3RhbHNbInRleHQiXQorICAgICAgICByLmRlbHRhc1siZGF0YSJdID0gci5zaXplcy5kYXRhIC0gci50b3RhbHNbImRhdGEiXQorICAgICAgICByLmRlbHRhc1siYnNzIl0gPSByLnNpemVzLmJzcyAtIHIudG90YWxzWyJic3MiXQorICAgICAgICByZXR1cm4gcgorICAgIGNyZWF0ZSA9IHN0YXRpY21ldGhvZChjcmVhdGUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2xvYiwgdGl0bGUpOgorICAgICAgICBzZWxmLmdsb2IgPSBnbG9iCisgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLnNpemVzID0gU2l6ZXMoZ2xvYikKKyAgICAgICAgc2VsZi5wYXJ0cyA9IFtdCisgICAgICAgIHNlbGYudG90YWxzID0geyJ0b3RhbCI6MCwgInRleHQiOjAsICJkYXRhIjowLCAiYnNzIjowfQorICAgICAgICBzZWxmLmRlbHRhcyA9IHsidG90YWwiOjAsICJ0ZXh0IjowLCAiZGF0YSI6MCwgImJzcyI6MH0KKworICAgIGRlZiBzaG93KHNlbGYsIGluZGVudD0iIik6CisgICAgICAgIHJ1bGUgPSBzdHIubGp1c3QoaW5kZW50LCA4MCwgJy0nKQorICAgICAgICBwcmludCAiJS0zMnMgJTEwcyB8ICUxMHMgJTEwcyAlMTBzIiAlIFwKKyAgICAgICAgICAgICAgKGluZGVudCtzZWxmLnRpdGxlLCAidG90YWwiLCAidGV4dCIsICJkYXRhIiwgImJzcyIpCisgICAgICAgIHByaW50IHJ1bGUKKyAgICAgICAgc2VsZi5zaXplcy5zaG93KGluZGVudCkKKyAgICAgICAgcHJpbnQgcnVsZQorICAgICAgICBmb3IgcCBpbiBzZWxmLnBhcnRzOgorICAgICAgICAgICAgaWYgcC5zaXplcy50b3RhbCA+IDA6CisgICAgICAgICAgICAgICAgcC5zaXplcy5zaG93KGluZGVudCkKKyAgICAgICAgcHJpbnQgcnVsZQorICAgICAgICBwcmludCAiJS0zMnMgJTEwZCB8ICUxMGQgJTEwZCAlMTBkIiAlIFwKKyAgICAgICAgICAgICAgKGluZGVudCsic3VtIiwgc2VsZi50b3RhbHNbInRvdGFsIl0sIHNlbGYudG90YWxzWyJ0ZXh0Il0sCisgICAgICAgICAgICAgICBzZWxmLnRvdGFsc1siZGF0YSJdLCBzZWxmLnRvdGFsc1siYnNzIl0pCisgICAgICAgIHByaW50ICIlLTMycyAlMTBkIHwgJTEwZCAlMTBkICUxMGQiICUgXAorICAgICAgICAgICAgICAoaW5kZW50KyJkZWx0YSIsIHNlbGYuZGVsdGFzWyJ0b3RhbCJdLCBzZWxmLmRlbHRhc1sidGV4dCJdLAorICAgICAgICAgICAgICAgc2VsZi5kZWx0YXNbImRhdGEiXSwgc2VsZi5kZWx0YXNbImJzcyJdKQorICAgICAgICBwcmludCAiXG4iCisKKyAgICBkZWYgX19jbXBfXyh0aGlzLCB0aGF0KToKKyAgICAgICAgaWYgdGhhdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGhhdCwgUmVwb3J0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBpZiB0aGlzLnNpemVzLnRvdGFsIDwgdGhhdC5zaXplcy50b3RhbDoKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiB0aGlzLnNpemVzLnRvdGFsID4gdGhhdC5zaXplcy50b3RhbDoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiAwCisKKworZGVmIG1haW4oKToKKyAgICB0cnk6CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImRoIiwgWyJoZWxwIl0pCisgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOgorICAgICAgICBwcmludCAnJXMnICUgc3RyKGVycikKKyAgICAgICAgdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgZHJpdmVyX2RldGFpbCA9IEZhbHNlCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyA9PSAnLWQnOgorICAgICAgICAgICAgZHJpdmVyX2RldGFpbCA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6CisgICAgICAgICAgICB1c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAidW5oYW5kbGVkIG9wdGlvbiIKKworICAgIGdsb2IgPSAiYXJjaC8qL2J1aWx0LWluLm8gKi9idWlsdC1pbi5vIgorICAgIHZtbGludXggPSBSZXBvcnQuY3JlYXRlKCJ2bWxpbnV4IiwgICJMaW51eCBLZXJuZWwiLCBnbG9iKQorCisgICAgdm1saW51eC5zaG93KCkKKyAgICBmb3IgYiBpbiB2bWxpbnV4LnBhcnRzOgorICAgICAgICBpZiBiLnRvdGFsc1sidG90YWwiXSA+IDAgYW5kIGxlbihiLnBhcnRzKSA+IDE6CisgICAgICAgICAgICBiLnNob3coKQorICAgICAgICBpZiBiLnRpdGxlID09ICJkcml2ZXJzIiBhbmQgZHJpdmVyX2RldGFpbDoKKyAgICAgICAgICAgIGZvciBkIGluIGIucGFydHM6CisgICAgICAgICAgICAgICAgaWYgZC50b3RhbHNbInRvdGFsIl0gPiAwIGFuZCBsZW4oZC5wYXJ0cykgPiAxOgorICAgICAgICAgICAgICAgICAgICBkLnNob3coIiAgICAiKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3dpYyBiL3NjcmlwdHMvd2ljCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhZDJiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3dpYwpAQCAtMCwwICsxLDMyMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04gJ3dpYycgaXMgdGhlIE9wZW5FbWJlZGRlZCBJbWFnZSBDcmVhdG9yIHRoYXQgdXNlcnMgY2FuCisjIHVzZSB0byBnZW5lcmF0ZSBib290YWJsZSBpbWFnZXMuICBJbnZva2luZyBpdCB3aXRob3V0IGFueSBhcmd1bWVudHMKKyMgd2lsbCBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlICd3aWMnIGNvbW1hbmQgYW5kIGxpc3QgdGhlCisjIGF2YWlsYWJsZSAnd2ljJyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEgc3ViY29tbWFuZCB3aXRob3V0IGFueQorIyBhcmd1bWVudHMgd2lsbCBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlIHNwZWNpZmllZAorIyBzdWJjb21tYW5kLiAgUGxlYXNlIHVzZSB0aGF0IGludGVyZmFjZSBmb3IgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBsaW51eC5pbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMi4wIgorCisjIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5IG1vZHVsZXMKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHNwYXduCisKKyMgRXh0ZXJuYWwgbW9kdWxlcworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGguYXBwZW5kKGxpYl9wYXRoKQorCitiaXRiYWtlX2V4ZSA9IHNwYXduLmZpbmRfZXhlY3V0YWJsZSgnYml0YmFrZScpCitpZiBiaXRiYWtlX2V4ZToKKyAgICBiaXRiYWtlX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJpdGJha2VfZXhlKSwgJy4uL2xpYicpCisgICAgc3lzLnBhdGguYXBwZW5kKGJpdGJha2VfcGF0aCkKKyAgICBmcm9tIGJiIGltcG9ydCBjb29rZXJkYXRhCisgICAgZnJvbSBiYi5tYWluIGltcG9ydCBiaXRiYWtlX21haW4sIEJpdEJha2VDb25maWdQYXJhbWV0ZXJzCitlbHNlOgorICAgIGJpdGJha2VfbWFpbiA9IE5vbmUKKworZnJvbSB3aWMudXRpbHMub2UubWlzYyBpbXBvcnQgZ2V0X2JpdGJha2VfdmFyLCBCQl9WQVJTCitmcm9tIHdpYy51dGlscy5lcnJvcnMgaW1wb3J0IFdpY0Vycm9yCitmcm9tIHdpYyBpbXBvcnQgZW5naW5lCitmcm9tIHdpYyBpbXBvcnQgaGVscCBhcyBobHAKKworZGVmIHJvb3Rmc19kaXJfdG9fYXJncyhrcm9vdGZzX2Rpcik6CisgICAgIiIiCisgICAgR2V0IGEgcm9vdGZzX2RpciBkaWN0IGFuZCBzZXJpYWxpemUgdG8gc3RyaW5nCisgICAgIiIiCisgICAgcm9vdGZzX2RpciA9ICcnCisgICAgZm9yIGtleSwgdmFsIGluIGtyb290ZnNfZGlyLml0ZW1zKCk6CisgICAgICAgIHJvb3Rmc19kaXIgKz0gJyAnCisgICAgICAgIHJvb3Rmc19kaXIgKz0gJz0nLmpvaW4oW2tleSwgdmFsXSkKKyAgICByZXR1cm4gcm9vdGZzX2Rpci5zdHJpcCgpCisKK2RlZiBjYWxsYmFja19yb290ZnNfZGlyKG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKKyAgICAiIiIKKyAgICBCdWlsZCBhIGRpY3QgdXNpbmcgLS1yb290ZnNfZGlyIGNvbm5lY3Rpb249ZGlyCisgICAgIiIiCisgICAgaWYgbm90IHR5cGUocGFyc2VyLnZhbHVlcy5yb290ZnNfZGlyKSBpcyBkaWN0OgorICAgICAgICBwYXJzZXIudmFsdWVzLnJvb3Rmc19kaXIgPSBkaWN0KCkKKworICAgIGlmICc9JyBpbiB2YWx1ZToKKyAgICAgICAgKGtleSwgcm9vdGZzX2RpcikgPSB2YWx1ZS5zcGxpdCgnPScpCisgICAgZWxzZToKKyAgICAgICAga2V5ID0gJ1JPT1RGU19ESVInCisgICAgICAgIHJvb3Rmc19kaXIgPSB2YWx1ZQorCisgICAgcGFyc2VyLnZhbHVlcy5yb290ZnNfZGlyW2tleV0gPSByb290ZnNfZGlyCisKK2RlZiB3aWNfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGltYWdlIGNyZWF0aW9uLiAgVGhlIHJlYWwgd29yayBpcyBkb25lCisgICAgYnkgaW1hZ2UuZW5naW5lLndpY19jcmVhdGUoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT11c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRkaXIiLCBkZXN0PSJvdXRkaXIiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im5hbWUgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBpbWFnZSBpbiIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1lIiwgIi0taW1hZ2UtbmFtZSIsIGRlc3Q9ImltYWdlX25hbWUiLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im5hbWUgb2YgdGhlIGltYWdlIHRvIHVzZSB0aGUgYXJ0aWZhY3RzIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImUuZy4gY29yZS1pbWFnZS1zYXRvIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXIiLCAiLS1yb290ZnMtZGlyIiwgZGVzdD0icm9vdGZzX2RpciIsIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPWNhbGxiYWNrX3Jvb3Rmc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgL3Jvb3RmcyBkaXIgdG8gdXNlIGFzIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLndrcyByb290ZnMgc291cmNlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWIiLCAiLS1ib290aW1nLWRpciIsIGRlc3Q9ImJvb3RpbWdfZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZyB0aGUgYm9vdCBhcnRpZmFjdHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihlLmcuIC9FRkkgb3IgL3N5c2xpbnV4IGRpcnMpIHRvIHVzZSBhcyB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi53a3MgYm9vdGltZyBzb3VyY2UiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItayIsICItLWtlcm5lbC1kaXIiLCBkZXN0PSJrZXJuZWxfZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJwYXRoIHRvIHRoZSBkaXIgY29udGFpbmluZyB0aGUga2VybmVsIHRvIHVzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gdGhlIC53a3MgYm9vdGltZyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbmF0aXZlLXN5c3Jvb3QiLCBkZXN0PSJuYXRpdmVfc3lzcm9vdCIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icGF0aCB0byB0aGUgbmF0aXZlIHN5c3Jvb3QgY29udGFpbmluZyB0aGUgdG9vbHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHVzZSB0byBidWlsZCB0aGUgaW1hZ2UiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXNraXAtYnVpbGQtY2hlY2siLCBkZXN0PSJidWlsZF9jaGVjayIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0ic2tpcCB0aGUgYnVpbGQgY2hlY2siKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWJ1aWxkLXJvb3RmcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9ImJ1aWxkIHJvb3RmcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY29tcHJlc3Mtd2l0aCIsIGNob2ljZXM9KCJnemlwIiwgImJ6aXAyIiwgInh6IiksCisgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY29tcHJlc3NvcicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0iY29tcHJlc3MgaW1hZ2Ugd2l0aCBzcGVjaWZpZWQgY29tcHJlc3NvciIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tdmFycyIsIGRlc3Q9J3ZhcnNfZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJkaXJlY3Rvcnkgd2l0aCA8aW1hZ2U+LmVudiBmaWxlcyB0aGF0IHN0b3JlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaXRiYWtlIHZhcmlhYmxlcyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0PSJkZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0ib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaWYgb3B0aW9ucy5idWlsZF9yb290ZnMgYW5kIG5vdCBiaXRiYWtlX21haW46CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkNhbid0IGJ1aWxkIHJvb2ZzIGFzIGJpdGJha2UgaXMgbm90IGluIHRoZSAkUEFUSCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5pbWFnZV9uYW1lOgorICAgICAgICBtaXNzZWQgPSBbXQorICAgICAgICBmb3IgdmFsLCBvcHQgaW4gWyhvcHRpb25zLnJvb3Rmc19kaXIsICdyb290ZnMtZGlyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMuYm9vdGltZ19kaXIsICdib290aW1nLWRpcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLmtlcm5lbF9kaXIsICdrZXJuZWwtZGlyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMubmF0aXZlX3N5c3Jvb3QsICduYXRpdmUtc3lzcm9vdCcpXToKKyAgICAgICAgICAgIGlmIG5vdCB2YWw6CisgICAgICAgICAgICAgICAgbWlzc2VkLmFwcGVuZChvcHQpCisgICAgICAgIGlmIG1pc3NlZDoKKyAgICAgICAgICAgIHByaW50ICJUaGUgZm9sbG93aW5nIGJ1aWxkIGFydGlmYWN0cyBhcmUgbm90IHNwZWNpZmllZDoiCisgICAgICAgICAgICBwcmludCAiICAiICsgIiwgIi5qb2luKG1pc3NlZCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBvcHRpb25zLmltYWdlX25hbWU6CisgICAgICAgIEJCX1ZBUlMuZGVmYXVsdF9pbWFnZSA9IG9wdGlvbnMuaW1hZ2VfbmFtZQorICAgIGVsc2U6CisgICAgICAgIG9wdGlvbnMuYnVpbGRfY2hlY2sgPSBGYWxzZQorCisgICAgaWYgb3B0aW9ucy52YXJzX2RpcjoKKyAgICAgICAgQkJfVkFSUy52YXJzX2RpciA9IG9wdGlvbnMudmFyc19kaXIKKworICAgIGlmIG9wdGlvbnMuYnVpbGRfY2hlY2s6CisgICAgICAgIHByaW50ICJDaGVja2luZyBiYXNpYyBidWlsZCBlbnZpcm9ubWVudC4uLiIKKyAgICAgICAgaWYgbm90IGVuZ2luZS52ZXJpZnlfYnVpbGRfZW52KCk6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgdmVyaWZ5IGJ1aWxkIGVudmlyb25tZW50LCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkRvbmUuXG4iCisKKyAgICBib290aW1nX2RpciA9ICIiCisKKyAgICBpZiBvcHRpb25zLmltYWdlX25hbWU6CisgICAgICAgIGlmIG9wdGlvbnMuYnVpbGRfcm9vdGZzOgorICAgICAgICAgICAgYXJndiA9IFsiYml0YmFrZSIsIG9wdGlvbnMuaW1hZ2VfbmFtZV0KKyAgICAgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICAgICAgYXJndi5hcHBlbmQoIi0tZGVidWciKQorCisgICAgICAgICAgICBwcmludCAiQnVpbGRpbmcgcm9vdGZzLi4uXG4iCisgICAgICAgICAgICBpZiBiaXRiYWtlX21haW4oQml0QmFrZUNvbmZpZ1BhcmFtZXRlcnMoYXJndiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VyZGF0YS5Db29rZXJDb25maWd1cmF0aW9uKCkpOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgcm9vdGZzX2RpciA9IGdldF9iaXRiYWtlX3ZhcigiSU1BR0VfUk9PVEZTIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQorICAgICAgICBrZXJuZWxfZGlyID0gZ2V0X2JpdGJha2VfdmFyKCJERVBMT1lfRElSX0lNQUdFIiwgb3B0aW9ucy5pbWFnZV9uYW1lKQorICAgICAgICBuYXRpdmVfc3lzcm9vdCA9IGdldF9iaXRiYWtlX3ZhcigiU1RBR0lOR19ESVJfTkFUSVZFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZV9uYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9wdGlvbnMuYnVpbGRfcm9vdGZzOgorICAgICAgICAgICAgcHJpbnQgIkltYWdlIG5hbWUgaXMgbm90IHNwZWNpZmllZCwgZXhpdGluZy4gKFVzZSAtZS8tLWltYWdlLW5hbWUgdG8gc3BlY2lmeSBpdClcbiIKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB3a3NfZmlsZSA9IGFyZ3NbMF0KKworICAgIGlmIG5vdCB3a3NfZmlsZS5lbmRzd2l0aCgiLndrcyIpOgorICAgICAgICB3a3NfZmlsZSA9IGVuZ2luZS5maW5kX2Nhbm5lZF9pbWFnZShzY3JpcHRzX3BhdGgsIHdrc19maWxlKQorICAgICAgICBpZiBub3Qgd2tzX2ZpbGU6CisgICAgICAgICAgICBwcmludCAiTm8gaW1hZ2UgbmFtZWQgJXMgZm91bmQsIGV4aXRpbmcuICAoVXNlICd3aWMgbGlzdCBpbWFnZXMnICJcCisgICAgICAgICAgICAgICAgICAidG8gbGlzdCBhdmFpbGFibGUgaW1hZ2VzLCBvciBzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIE9FICJcCisgICAgICAgICAgICAgICAgICAia2lja3N0YXJ0ICgud2tzKSBmaWxlbmFtZSlcbiIgJSBhcmdzWzBdCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW1hZ2Vfb3V0cHV0X2RpciA9ICIiCisgICAgaWYgb3B0aW9ucy5vdXRkaXI6CisgICAgICAgIGltYWdlX291dHB1dF9kaXIgPSBvcHRpb25zLm91dGRpcgorCisgICAgaWYgbm90IG9wdGlvbnMuaW1hZ2VfbmFtZToKKyAgICAgICAgcm9vdGZzX2RpciA9ICcnCisgICAgICAgIGlmICdST09URlNfRElSJyBpbiBvcHRpb25zLnJvb3Rmc19kaXI6CisgICAgICAgICAgICByb290ZnNfZGlyID0gb3B0aW9ucy5yb290ZnNfZGlyWydST09URlNfRElSJ10KKyAgICAgICAgYm9vdGltZ19kaXIgPSBvcHRpb25zLmJvb3RpbWdfZGlyCisgICAgICAgIGtlcm5lbF9kaXIgPSBvcHRpb25zLmtlcm5lbF9kaXIKKyAgICAgICAgbmF0aXZlX3N5c3Jvb3QgPSBvcHRpb25zLm5hdGl2ZV9zeXNyb290CisgICAgICAgIGlmIHJvb3Rmc19kaXIgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHJvb3Rmc19kaXIpOgorICAgICAgICAgICAgcHJpbnQgIi0tcm9vZnMtZGlyICgtcikgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihib290aW1nX2Rpcik6CisgICAgICAgICAgICBwcmludCAiLS1ib290aW1nLWRpciAoLWIpIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX2Rpcik6CisgICAgICAgICAgICBwcmludCAiLS1rZXJuZWwtZGlyICgtaykgbm90IGZvdW5kLCBleGl0aW5nXG4iCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihuYXRpdmVfc3lzcm9vdCk6CisgICAgICAgICAgICBwcmludCAiLS1uYXRpdmUtc3lzcm9vdCAoLW4pIG5vdCBmb3VuZCwgZXhpdGluZ1xuIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBlbHNlOgorICAgICAgICBub3RfZm91bmQgPSBub3RfZm91bmRfZGlyID0gIiIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdGZzX2Rpcik6CisgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKSA9ICgicm9vdGZzLWRpciIsIHJvb3Rmc19kaXIpCisgICAgICAgIGVsaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX2Rpcik6CisgICAgICAgICAgICAobm90X2ZvdW5kLCBub3RfZm91bmRfZGlyKSA9ICgia2VybmVsLWRpciIsIGtlcm5lbF9kaXIpCisgICAgICAgIGVsaWYgbm90IG9zLnBhdGguaXNkaXIobmF0aXZlX3N5c3Jvb3QpOgorICAgICAgICAgICAgKG5vdF9mb3VuZCwgbm90X2ZvdW5kX2RpcikgPSAoIm5hdGl2ZS1zeXNyb290IiwgbmF0aXZlX3N5c3Jvb3QpCisgICAgICAgIGlmIG5vdF9mb3VuZDoKKyAgICAgICAgICAgIGlmIG5vdCBub3RfZm91bmRfZGlyOgorICAgICAgICAgICAgICAgIG5vdF9mb3VuZF9kaXIgPSAiQ29tcGxldGVseSBtaXNzaW5nIGFydGlmYWN0IC0gd3JvbmcgaW1hZ2UgKC53a3MpIHVzZWQ/IgorICAgICAgICAgICAgcHJpbnQgIkJ1aWxkIGFydGlmYWN0cyBub3QgZm91bmQsIGV4aXRpbmcuIgorICAgICAgICAgICAgcHJpbnQgIiAgKFBsZWFzZSBjaGVjayB0aGF0IHRoZSBidWlsZCBhcnRpZmFjdHMgZm9yIHRoZSBtYWNoaW5lIgorICAgICAgICAgICAgcHJpbnQgIiAgIHNlbGVjdGVkIGluIGxvY2FsLmNvbmYgYWN0dWFsbHkgZXhpc3QgYW5kIHRoYXQgdGhleSIKKyAgICAgICAgICAgIHByaW50ICIgICBhcmUgdGhlIGNvcnJlY3QgYXJ0aWZhY3RzIGZvciB0aGUgaW1hZ2UgKC53a3MgZmlsZSkpLlxuIgorICAgICAgICAgICAgcHJpbnQgIlRoZSBhcnRpZmFjdCB0aGF0IGNvdWxkbid0IGJlIGZvdW5kIHdhcyAlczpcbiAgJXMiICUgXAorICAgICAgICAgICAgICAgIChub3RfZm91bmQsIG5vdF9mb3VuZF9kaXIpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAga3Jvb3Rmc19kaXIgPSBvcHRpb25zLnJvb3Rmc19kaXIKKyAgICBpZiBrcm9vdGZzX2RpciBpcyBOb25lOgorICAgICAgICBrcm9vdGZzX2RpciA9IHt9CisgICAgICAgIGtyb290ZnNfZGlyWydST09URlNfRElSJ10gPSByb290ZnNfZGlyCisKKyAgICByb290ZnNfZGlyID0gcm9vdGZzX2Rpcl90b19hcmdzKGtyb290ZnNfZGlyKQorCisgICAgcHJpbnQgIkNyZWF0aW5nIGltYWdlKHMpLi4uXG4iCisgICAgZW5naW5lLndpY19jcmVhdGUod2tzX2ZpbGUsIHJvb3Rmc19kaXIsIGJvb3RpbWdfZGlyLCBrZXJuZWxfZGlyLAorICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9zeXNyb290LCBzY3JpcHRzX3BhdGgsIGltYWdlX291dHB1dF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21wcmVzc29yLCBvcHRpb25zLmRlYnVnKQorCisKK2RlZiB3aWNfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBpbWFnZXMuCisgICAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGltYWdlLmVuZ2luZS53aWNfbGlzdCgpCisgICAgIiIiCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlX3N0cikKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncylbMV0KKworICAgIGlmIG5vdCBlbmdpbmUud2ljX2xpc3QoYXJncywgc2NyaXB0c19wYXRoKToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiQmFkIGxpc3QgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKworZGVmIHdpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGhlbHAtb25seSAnc3ViY29tbWFuZHMnLiAgVGhpcyBpcworICAgIGVzc2VudGlhbGx5IGEgZHVtbXkgY29tbWFuZCB0aGF0IGRvZXNuIG5vdGhpbmcgYnV0IGFsbG93IHVzZXJzIHRvCisgICAgdXNlIHRoZSBleGlzdGluZyBzdWJjb21tYW5kIGluZnJhc3RydWN0dXJlIHRvIGRpc3BsYXkgaGVscCBvbiBhCisgICAgcGFydGljdWxhciB0b3BpYyBub3QgYXR0YWNoZWQgdG8gYW55IHBhcnRpY3VsYXIgc3ViY29tbWFuZC4KKyAgICAiIiIKKyAgICBwYXNzCisKKword2ljX2hlbHBfdG9waWNfdXNhZ2UgPSAiIiIKKyIiIgorCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY3JlYXRlIjogICAgW3dpY19jcmVhdGVfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19jcmVhdGVfaGVscF0sCisgICAgImxpc3QiOiAgICAgIFt3aWNfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLndpY19saXN0X2hlbHBdLAorICAgICJwbHVnaW5zIjogICBbd2ljX2hlbHBfdG9waWNfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHdpY19oZWxwX3RvcGljX3VzYWdlLAorICAgICAgICAgICAgICAgICAgaGxwLmdldF93aWNfcGx1Z2luc19oZWxwXSwKKyAgICAib3ZlcnZpZXciOiAgW3dpY19oZWxwX3RvcGljX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB3aWNfaGVscF90b3BpY191c2FnZSwKKyAgICAgICAgICAgICAgICAgIGhscC53aWNfb3ZlcnZpZXdfaGVscF0sCisgICAgImtpY2tzdGFydCI6IFt3aWNfaGVscF90b3BpY19zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgd2ljX2hlbHBfdG9waWNfdXNhZ2UsCisgICAgICAgICAgICAgICAgICBobHAud2ljX2tpY2tzdGFydF9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lPSd3aWMubG9nJywgZmlsZW1vZGU9J3cnLCBsZXZlbD1sb2dsZXZlbCkKKworCitkZWYgbWFpbihhcmd2KToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbj0id2ljIHZlcnNpb24gJXMiICUgX192ZXJzaW9uX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPWhscC53aWNfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndilbMV0KKworICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHJldHVybiBobHAuaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCBobHAud2ljX2hlbHBfdXNhZ2UsIHN1YmNvbW1hbmRzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCisgICAgZXhjZXB0IFdpY0Vycm9yIGFzIGVycjoKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIkVSUk9SOiIsIGVycgorICAgICAgICBzeXMuZXhpdCgxKQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL3dpcGUtc3lzcm9vdCBiL3NjcmlwdHMvd2lwZS1zeXNyb290Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMmQzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3dpcGUtc3lzcm9vdApAQCAtMCwwICsxLDU0IEBACisjISAvYmluL3NoCisKKyMgV2lwZSBvdXQgYWxsIG9mIHRoZSBzeXNyb290cyBhbmQgYWxsIG9mIHRoZSBzdGFtcHMgdGhhdCBwb3B1bGF0ZWQgaXQuCisjIEF1dGhvcjogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK3NldCAtZQorCitpZiBbICQjIC1ndCAwIF07IHRoZW4KKyAgICBlY2hvICJXaXBlIGFsbCBzeXNyb290cyBhbmQgc3lzcm9vdC1yZWxhdGVkIHN0YW1wcyBmb3IgdGhlIGN1cnJlbnQgYnVpbGQgZGlyZWN0b3J5LiIgPiYyCisgICAgZWNobyAiVXNhZ2U6ICQwIiA+JjIKKyAgICBleGl0IDEKK2ZpCisKK0VOVlM9YG1rdGVtcCAtLXN1ZmZpeCAtd2lwZS1zeXNyb290LWVudnNgCitiaXRiYWtlIC1wIC1lID4gJEVOVlMKKworZXZhbCBgZ3JlcCAtRiBTU1RBVEVfTUFOSUZFU1RTPSAkRU5WU2AKK2V2YWwgYGdyZXAgLUYgU1RBR0lOR19ESVI9ICRFTlZTYAorZXZhbCBgZ3JlcCAtRiBTVEFNUFNfRElSPSAkRU5WU2AKK3JtIC1mICRFTlZTCisKK2lmIFsgLXogIiRTU1RBVEVfTUFOSUZFU1RTIiAtbyAteiAiJFNUQUdJTkdfRElSIiAtbyAteiAiJFNUQU1QU19ESVIiIF07IHRoZW4KKyAgICBlY2hvICJDb3VsZCBub3QgZGV0ZXJtaW5lIFNTVEFURV9NQU5JRkVTVFMvU1RBR0lOR19ESVIvU1RBTVBTX0RJUiBmcm9tIGJpdGJha2UsIGNoZWNrIGFib3ZlIGZvciBlcnJvcnMiCisgICAgZXhpdCAxCitmaQorCitlY2hvICJEZWxldGluZyB0aGUgc3lzcm9vdHMgaW4gJFNUQUdJTkdfRElSLCBhbmQgc2VsZWN0ZWQgc3RhbXBzIGluICRTU1RBVEVfTUFOSUZFU1RTIGFuZCAkU1RBTVBTX0RJUi4iCisKKyMgVGhlIHN5c3Jvb3RzIHRoZW1zZWx2ZXMKK3JtIC1yZiAkU1RBR0lOR19ESVIKKworIyBUaGUgc3RhbXBzIHRoYXQgc2FpZCB0aGUgc3lzcm9vdCB3YXMgcG9wdWxhdGVkCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcG9wdWxhdGVfc3lzcm9vdC4qCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZS4qCitybSAtcmYgJFNUQU1QU19ESVIvKi8qLyouZG9fcGFja2FnZWRhdGEuKgorcm0gLXJmICRTVEFNUFNfRElSLyovKi8qLmRvX3BhY2thZ2VkYXRhX3NldHNjZW5lLioKKworIyBUaGUgc3N0YXRlIG1hbmlmZXN0cworcm0gLXJmICRTU1RBVEVfTUFOSUZFU1RTL21hbmlmZXN0LSoucG9wdWxhdGUtc3lzcm9vdApkaWZmIC0tZ2l0IGEvc2NyaXB0cy95b2N0by1ic3AgYi9zY3JpcHRzL3lvY3RvLWJzcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMjY5ODYxCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy95b2N0by1ic3AKQEAgLTAsMCArMSwxNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjICd5b2N0by1ic3AnIGlzIHRoZSBZb2N0byBCU1AgVG9vbCB0aGF0IGhlbHBzIHVzZXJzIGNyZWF0ZSBhIG5ldworIyBZb2N0byBCU1AuICBJbnZva2luZyBpdCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbCBkaXNwbGF5IGhlbHAKKyMgc2NyZWVucyBmb3IgdGhlICd5b2N0by1ic3AnIGNvbW1hbmQgYW5kIGxpc3QgdGhlIGF2YWlsYWJsZQorIyAneW9jdG8tYnNwJyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEgc3ViY29tbWFuZCB3aXRob3V0IGFueQorIyBhcmd1bWVudHMgd2lsbCBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlIHNwZWNpZmllZAorIyBzdWJjb21tYW5kLiAgUGxlYXNlIHVzZSB0aGF0IGludGVyZmFjZSBmb3IgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMS4wIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitmcm9tIGJzcC5oZWxwIGltcG9ydCAqCitmcm9tIGJzcC5lbmdpbmUgaW1wb3J0ICoKKworCitkZWYgeW9jdG9fYnNwX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBCU1AgY3JlYXRpb24uICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3AuZW5naW5lLnlvY3RvX2JzcF9jcmVhdGUoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGRpciIsIGRlc3QgPSAib3V0ZGlyIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgQlNQIGRpciB0byBjcmVhdGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWluZmlsZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIGFzIGEgSlNPTiBmaWxlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jb2RlZHVtcCIsIGRlc3QgPSAiY29kZWR1bXAiLCBhY3Rpb24gPSAic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IEZhbHNlLCBoZWxwID0gImR1bXAgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGJzcGdlbi5vdXQiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcyIsICItLXNraXAtZ2l0LWNoZWNrIiwgZGVzdCA9ICJnaXRfY2hlY2siLCBhY3Rpb24gPSAic3RvcmVfZmFsc2UiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBUcnVlLCBoZWxwID0gInNraXAgdGhlIGdpdCBjb25uZWN0aXZpdHkgY2hlY2siKQorICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMjoKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgbWFjaGluZSA9IGFyZ3NbMF0KKyAgICBrYXJjaCA9IGFyZ3NbMV0KKworICAgIGlmIG9wdGlvbnMub3V0ZGlyOgorICAgICAgICBic3Bfb3V0cHV0X2RpciA9IG9wdGlvbnMub3V0ZGlyCisgICAgZWxzZToKKyAgICAgICAgYnNwX291dHB1dF9kaXIgPSAibWV0YS0iICsgbWFjaGluZQorCisgICAgaWYgb3B0aW9ucy5naXRfY2hlY2sgYW5kIG5vdCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZToKKyAgICAgICAgcHJpbnQgIkNoZWNraW5nIGJhc2ljIGdpdCBjb25uZWN0aXZpdHkuLi4iCisgICAgICAgIGlmIG5vdCB2ZXJpZnlfZ2l0X3JlcG8oR0lUX0NIRUNLX1VSSSk6CisgICAgICAgICAgICBwcmludCAiQ291bGRuJ3QgdmVyaWZ5IGdpdCBjb25uZWN0aXZpdHksIGV4aXRpbmdcbiIKKyAgICAgICAgICAgIHByaW50ICJEZXRhaWxzOiBjb3VsZG4ndCBhY2Nlc3MgJXMiICUgR0lUX0NIRUNLX1VSSQorICAgICAgICAgICAgcHJpbnQgIiAgICAgICAgICh0aGlzIG1vc3QgbGlrZWx5IGluZGljYXRlcyBhIG5ldHdvcmsgY29ubmVjdGl2aXR5IHByb2JsZW0gb3IiCisgICAgICAgICAgICBwcmludCAiICAgICAgICAgYSBtaXNjb25maWd1cmVkIGdpdCBpbnRhbGxhdGlvbikiCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkRvbmUuXG4iCisKKyAgICB5b2N0b19ic3BfY3JlYXRlKG1hY2hpbmUsIGthcmNoLCBzY3JpcHRzX3BhdGgsIGJzcF9vdXRwdXRfZGlyLCBvcHRpb25zLmNvZGVkdW1wLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSkKKworCitkZWYgeW9jdG9fYnNwX2xpc3Rfc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgbGlzdGluZyBhdmFpbGFibGUgQlNQIHByb3BlcnRpZXMgYW5kCisgICAgdmFsdWVzLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5lbmdpbmUueW9jdG9fYnNwX2xpc3QoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIEJTUCBwcm9wZXJ0aWVzIHRvIGEgSlNPTiBmaWxlIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBub3QgeW9jdG9fYnNwX2xpc3QoYXJncywgc2NyaXB0c19wYXRoLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSk6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkJhZCBsaXN0IGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK3N1YmNvbW1hbmRzID0geworICAgICJjcmVhdGUiOiBbeW9jdG9fYnNwX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fYnNwX2NyZWF0ZV91c2FnZSwKKyAgICAgICAgICAgICAgIHlvY3RvX2JzcF9jcmVhdGVfaGVscF0sCisgICAgImxpc3QiOiAgIFt5b2N0b19ic3BfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fYnNwX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICB5b2N0b19ic3BfbGlzdF9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWJzcC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1ic3AgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UgPSB5b2N0b19ic3BfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0ID0gImRlYnVnIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKQorCisgICAgaWYgbGVuKGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCB5b2N0b19ic3BfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL3lvY3RvLWtlcm5lbCBiL3NjcmlwdHMveW9jdG8ta2VybmVsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5YjI4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL3lvY3RvLWtlcm5lbApAQCAtMCwwICsxLDM5OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgREVTQ1JJUFRJT04KKyMgJ3lvY3RvLWtlcm5lbCcgaXMgdGhlIFlvY3RvIEJTUCBUb29sIHRoYXQgaGVscHMgdXNlcnMgbWFuYWdlIGtlcm5lbAorIyBjb25maWcgb3B0aW9ucyBhbmQgcGF0Y2hlcyBmb3IgYSBZb2N0byBCU1AuICBJbnZva2luZyBpdCB3aXRob3V0IGFueQorIyBhcmd1bWVudHMgd2lsbCBkaXNwbGF5IGhlbHAgc2NyZWVucyBmb3IgdGhlICd5b2N0by1rZXJuZWwnIGNvbW1hbmQKKyMgYW5kIGxpc3QgdGhlIGF2YWlsYWJsZSAneW9jdG8ta2VybmVsJyBzdWJjb21tYW5kcy4gIEludm9raW5nIGEKKyMgc3ViY29tbWFuZCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbCBsaWtld2lzZSBkaXNwbGF5IGhlbHAgc2NyZWVucworIyBmb3IgdGhlIHNwZWNpZmllZCBzdWJjb21tYW5kLiAgUGxlYXNlIHVzZSB0aGF0IGludGVyZmFjZSBmb3IKKyMgZGV0YWlsZWQgaGVscC4KKyMKKyMgQVVUSE9SUworIyBUb20gWmFudXNzaSA8dG9tLnphbnVzc2kgKGF0XSBpbnRlbC5jb20+CisjCisKK19fdmVyc2lvbl9fID0gIjAuMS4wIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKworc2NyaXB0c19wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pKSkKK2xpYl9wYXRoID0gc2NyaXB0c19wYXRoICsgJy9saWInCitzeXMucGF0aCA9IHN5cy5wYXRoICsgW2xpYl9wYXRoXQorCitmcm9tIGJzcC5oZWxwIGltcG9ydCAqCitmcm9tIGJzcC5rZXJuZWwgaW1wb3J0ICoKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgQlNQIGNvbmZpZyBvcHRpb25zLiAgVGhlCisgICAgcmVhbCB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfY29uZmlnX2xpc3QoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Rfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9jb25maWdfbGlzdChzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGFkZGluZyBCU1AgY29uZmlnIGl0ZW1zLiAgVGhlIHJlYWwgd29yaworICAgIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfY29uZmlnX2FkZCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9jb25maWdfYWRkX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9jb25maWdfYWRkKHNjcmlwdHNfcGF0aCwgbWFjaGluZSwgYXJncykKKworCitkZWYgeW9jdG9fa2VybmVsX2NvbmZpZ19ybV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciByZW1vdmluZyBCU1AgY29uZmlnIGl0ZW1zLiAgVGhlIHJlYWwKKyAgICB3b3JrIGlzIGRvbmUgYnkgYnNwLmtlcm5lbC55b2N0b19rZXJuZWxfY29uZmlnX3JtKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2NvbmZpZ19ybV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19ybShzY3JpcHRzX3BhdGgsIGFyZ3NbMF0pCisKKworZGVmIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgQlNQIChTUkNfVVJJIHBhdGNoZXMuICBUaGUgcmVhbAorICAgIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9wYXRjaF9saXN0KCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX3BhdGNoX2xpc3Rfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9saXN0KHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBhZGRpbmcgQlNQIHBhdGNoZXMuICBUaGUgcmVhbCB3b3JrIGlzCisgICAgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9wYXRjaF9hZGQoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9hZGQoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBhcmdzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfcGF0Y2hfcm1fc3ViY29tbWFuZChhcmdzLCB1c2FnZV9zdHIpOgorICAgICIiIgorICAgIENvbW1hbmQtbGluZSBoYW5kbGluZyBmb3IgcmVtb3ZpbmcgQlNQIHBhdGNoZXMuICBUaGUgcmVhbCB3b3JrIGlzCisgICAgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9wYXRjaF9ybSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9wYXRjaF9ybV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgbG9nZ2luZy5lcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cywgZXhpdGluZ1xuIikKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgeW9jdG9fa2VybmVsX3BhdGNoX3JtKHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIHRoZSBCU1AgZmVhdHVyZXMgdGhhdCBhcmUgYmVpbmcKKyAgICB1c2VkIGJ5IHRoZSBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3QoKS4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmRlYnVnKCJ5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9saXN0KHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGFkZGluZyB0aGUgdXNlIG9mIGtlcm5lbCBmZWF0dXJlcyB0byBhCisgICAgQlNQLiAgVGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIG1hY2hpbmUgPSBhcmdzLnBvcCgwKQorICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2FkZChzY3JpcHRzX3BhdGgsIG1hY2hpbmUsIGFyZ3MpCisKKworZGVmIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIHRoZSB1c2Ugb2Yga2VybmVsIGZlYXR1cmVzIGZyb20KKyAgICBhIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtKHNjcmlwdHNfcGF0aCwgYXJnc1swXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGxpc3RpbmcgYWxsIHRoZSBrZXJuZWwgZmVhdHVyZXMKKyAgICBhdmFpbGFibGUgZm9yIHVzZSBpbiBhIEJTUC4gIFRoaXMgaW5jbHVkZXMgdGhlIGZlYXR1cmVzIHByZXNlbnQgaW4KKyAgICB0aGUgbWV0YSBicmFuY2goZXMpIG9mIHRoZSBwb2ludGVkLXRvIHJlcG8ocykgYXMgd2VsbCBhcyB0aGUgbG9jYWwKKyAgICBmZWF0dXJlcyBhZGRlZCBpbiByZWNpcGUtc3BhY2UgdG8gdGhlIGN1cnJlbnQgQlNQIGFzIHdlbGwuICBUaGUKKyAgICByZWFsIHdvcmsgaXMgZG9uZSBieSBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdCgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2F2YWlsYWJsZV9mZWF0dXJlc19saXN0X3N1YmNvbW1hbmQiKQorCisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlID0gdXNhZ2Vfc3RyKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3Qoc2NyaXB0c19wYXRoLCBhcmdzWzBdKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIHRoZSBkZXNjcmlwdGlvbiBvZiBhIHNwZWNpZmljCisgICAga2VybmVsIGZlYXR1cmUgYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBCU1AuICBUaGlzIGluY2x1ZGVzIHRoZQorICAgIGZlYXR1cmVzIHByZXNlbnQgaW4gdGhlIG1ldGEgYnJhbmNoKGVzKSBvZiB0aGUgcG9pbnRlZC10byByZXBvKHMpCisgICAgYXMgd2VsbCBhcyB0aGUgbG9jYWwgZmVhdHVyZXMgYWRkZWQgaW4gcmVjaXBlLXNwYWNlIHRvIHRoZSBjdXJyZW50CisgICAgQlNQIGFzIHdlbGwuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlKCkuCisgICAgIiIiCisgICAgbG9nZ2luZy5kZWJ1ZygieW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc2NyaWJlKHNjcmlwdHNfcGF0aCwgYXJnc1swXSwgYXJnc1sxXSkKKworCitkZWYgeW9jdG9fa2VybmVsX2ZlYXR1cmVfY3JlYXRlX3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIGNyZWF0aW5nIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlCisgICAgaW4gYSBCU1AuICBUaGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkKKyAgICBic3Aua2VybmVsLnlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9zdWJjb21tYW5kIikKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICBpZiBsZW4oYXJncykgPCA0OgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBtYWNoaW5lID0gYXJncy5wb3AoMCkKKyAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGUoc2NyaXB0c19wYXRoLCBtYWNoaW5lLCBhcmdzKQorCisKK2RlZiB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXN0cm95X3N1YmNvbW1hbmQoYXJncywgdXNhZ2Vfc3RyKToKKyAgICAiIiIKKyAgICBDb21tYW5kLWxpbmUgaGFuZGxpbmcgZm9yIHJlbW92aW5nIGEgcmVjaXBlLXNwYWNlIGtlcm5lbCBmZWF0dXJlCisgICAgZnJvbSBhIEJTUC4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5rZXJuZWwueW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveSgpLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoInlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfc3ViY29tbWFuZCIpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpICE9IDI6CisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3koc2NyaXB0c19wYXRoLCBhcmdzWzBdLCBhcmdzWzFdKQorCisKK3N1YmNvbW1hbmRzID0geworICAgICJjb25maWctbGlzdCI6IFt5b2N0b19rZXJuZWxfY29uZmlnX2xpc3Rfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2NvbmZpZ19saXN0X3VzYWdlLAorICAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2xpc3RfaGVscF0sCisgICAgImNvbmZpZy1hZGQiOiBbeW9jdG9fa2VybmVsX2NvbmZpZ19hZGRfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2FkZF91c2FnZSwKKyAgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX2FkZF9oZWxwXSwKKyAgICAiY29uZmlnLXJtIjogW3lvY3RvX2tlcm5lbF9jb25maWdfcm1fc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9jb25maWdfcm1fdXNhZ2UsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfY29uZmlnX3JtX2hlbHBdLAorICAgICJwYXRjaC1saXN0IjogW3lvY3RvX2tlcm5lbF9wYXRjaF9saXN0X3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2xpc3RfaGVscF0sCisgICAgInBhdGNoLWFkZCI6IFt5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfcGF0Y2hfYWRkX3VzYWdlLAorICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX2FkZF9oZWxwXSwKKyAgICAicGF0Y2gtcm0iOiBbeW9jdG9fa2VybmVsX3BhdGNoX3JtX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9wYXRjaF9ybV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX3BhdGNoX3JtX2hlbHBdLAorICAgICJmZWF0dXJlLWxpc3QiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfbGlzdF9oZWxwXSwKKyAgICAiZmVhdHVyZS1hZGQiOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfYWRkX3N1YmNvbW1hbmQsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfdXNhZ2UsCisgICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9hZGRfaGVscF0sCisgICAgImZlYXR1cmUtcm0iOiBbeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfcm1fdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX3JtX2hlbHBdLAorICAgICJmZWF0dXJlcy1saXN0IjogW3lvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfYXZhaWxhYmxlX2ZlYXR1cmVzX2xpc3RfdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9hdmFpbGFibGVfZmVhdHVyZXNfbGlzdF9oZWxwXSwKKyAgICAiZmVhdHVyZS1kZXNjcmliZSI6IFt5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9kZXNjcmliZV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzY3JpYmVfaGVscF0sCisgICAgImZlYXR1cmUtY3JlYXRlIjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgICB5b2N0b19rZXJuZWxfZmVhdHVyZV9jcmVhdGVfdXNhZ2UsCisgICAgICAgICAgICAgICAgIHlvY3RvX2tlcm5lbF9mZWF0dXJlX2NyZWF0ZV9oZWxwXSwKKyAgICAiZmVhdHVyZS1kZXN0cm95IjogW3lvY3RvX2tlcm5lbF9mZWF0dXJlX2Rlc3Ryb3lfc3ViY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV91c2FnZSwKKyAgICAgICAgICAgICAgICAgeW9jdG9fa2VybmVsX2ZlYXR1cmVfZGVzdHJveV9oZWxwXSwKK30KKworCitkZWYgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxuYW1lID0gJ3lvY3RvLWtlcm5lbC5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1rZXJuZWwgdmVyc2lvbiAlcyIgJSBfX3ZlcnNpb25fXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UgPSB5b2N0b19rZXJuZWxfdXNhZ2UpCisKKyAgICBwYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJncygpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGVidWciLCBkZXN0ID0gImRlYnVnIiwgYWN0aW9uID0gInN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBGYWxzZSwgaGVscCA9ICJvdXRwdXQgZGVidWcgaW5mb3JtYXRpb24iKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICBsb2dsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICBzdGFydF9sb2dnaW5nKGxvZ2xldmVsKQorCisgICAgaWYgbGVuKGFyZ3MpOgorICAgICAgICBpZiBhcmdzWzBdID09ICJoZWxwIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgc2MgPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzYyA9IDAKKworICAgICAgICBpZiBhcmdzW3NjXSA9PSAiY29uZmlnIiBvciBhcmdzW3NjXSA9PSAicGF0Y2giIG9yIFwKKyAgICAgICAgICAgICAgICBhcmdzW3NjXSA9PSAiZmVhdHVyZSIgb3IgYXJnc1tzY10gPT0gImZlYXR1cmVzIjoKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSA8IDIgKyBzYzoKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGFyZ3Nbc2NdICs9ICItIiArIGFyZ3Nbc2MgKyAxXQorICAgICAgICAgICAgYXJncy5wb3Aoc2MgKyAxKQorCisgICAgaW52b2tlX3N1YmNvbW1hbmQoYXJncywgcGFyc2VyLCB5b2N0b19rZXJuZWxfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy95b2N0by1sYXllciBiL3NjcmlwdHMveW9jdG8tbGF5ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNkMmFhYgotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdHMveW9jdG8tbGF5ZXIKQEAgLTAsMCArMSwxNDcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBleDp0cz00OnN3PTQ6c3RzPTQ6ZXQKKyMgLSotIHRhYi13aWR0aDogNDsgYy1iYXNpYy1vZmZzZXQ6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbCAtKi0KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisjIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisjCisjIERFU0NSSVBUSU9OCisjICd5b2N0by1sYXllcicgaXMgdGhlIFlvY3RvIFRvb2wgdGhhdCBoZWxwcyB1c2VycyBjcmVhdGUgYSBuZXcgWW9jdG8KKyMgbGF5ZXIuICBJbnZva2luZyBpdCB3aXRob3V0IGFueSBhcmd1bWVudHMgd2lsbCBkaXNwbGF5IGhlbHAgc2NyZWVucworIyBmb3IgdGhlICd5b2N0by1sYXllcicgY29tbWFuZCBhbmQgbGlzdCB0aGUgYXZhaWxhYmxlICd5b2N0by1sYXllcicKKyMgc3ViY29tbWFuZHMuICBJbnZva2luZyBhIHN1YmNvbW1hbmQgd2l0aG91dCBhbnkgYXJndW1lbnRzIHdpbGwKKyMgbGlrZXdpc2UgZGlzcGxheSBoZWxwIHNjcmVlbnMgZm9yIHRoZSBzcGVjaWZpZWQgc3ViY29tbWFuZC4gIFBsZWFzZQorIyB1c2UgdGhhdCBpbnRlcmZhY2UgZm9yIGRldGFpbGVkIGhlbHAuCisjCisjIEFVVEhPUlMKKyMgVG9tIFphbnVzc2kgPHRvbS56YW51c3NpIChhdF0gaW50ZWwuY29tPgorIworCitfX3ZlcnNpb25fXyA9ICIwLjEuMCIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3NjcmlwdHNfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKSkpCitsaWJfcGF0aCA9IHNjcmlwdHNfcGF0aCArICcvbGliJworc3lzLnBhdGggPSBzeXMucGF0aCArIFtsaWJfcGF0aF0KKworZnJvbSBic3AuaGVscCBpbXBvcnQgKgorZnJvbSBic3AuZW5naW5lIGltcG9ydCAqCisKKworZGVmIHlvY3RvX2xheWVyX2NyZWF0ZV9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsYXllciBjcmVhdGlvbi4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieQorICAgIGJzcC5lbmdpbmUueW9jdG9fbGF5ZXJfY3JlYXRlKCkKKyAgICAiIiIKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UgPSB1c2FnZV9zdHIpCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRkaXIiLCBkZXN0ID0gIm91dGRpciIsIGFjdGlvbiA9ICJzdG9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJuYW1lIG9mIGxheWVyIGRpciB0byBjcmVhdGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaSIsICItLWluZmlsZSIsIGRlc3QgPSAicHJvcGVydGllc19maWxlIiwgYWN0aW9uID0gInN0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwID0gIm5hbWUgb2YgZmlsZSBjb250YWluaW5nIHRoZSB2YWx1ZXMgZm9yIGxheWVyIGlucHV0IHByb3BlcnRpZXMgYXMgYSBKU09OIGZpbGUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYyIsICItLWNvZGVkdW1wIiwgZGVzdCA9ICJjb2RlZHVtcCIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAiZHVtcCB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gbGF5ZXJnZW4ub3V0IikKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpIDwgMSBvciBsZW4oYXJncykgPiAyOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLCBleGl0aW5nXG4iKQorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBsYXllcl9uYW1lID0gYXJnc1swXQorICAgIHByb3BlcnRpZXMgPSAiIgorCisgICAgaWYgbGVuKGFyZ3MpID09IDI6CisgICAgICAgIGxheWVyX3ByaW9yaXR5ID0gYXJnc1sxXQorICAgICAgICBwcm9wZXJ0aWVzID0gJ3sibGF5ZXJfcHJpb3JpdHkiOiInICsgbGF5ZXJfcHJpb3JpdHkgKyAnIn0nCisKKyAgICBpZiBvcHRpb25zLm91dGRpcjoKKyAgICAgICAgbGF5ZXJfb3V0cHV0X2RpciA9IG9wdGlvbnMub3V0ZGlyCisgICAgZWxzZToKKyAgICAgICAgbGF5ZXJfb3V0cHV0X2RpciA9ICJtZXRhLSIgKyBsYXllcl9uYW1lCisKKyAgICB5b2N0b19sYXllcl9jcmVhdGUobGF5ZXJfbmFtZSwgc2NyaXB0c19wYXRoLCBsYXllcl9vdXRwdXRfZGlyLCBvcHRpb25zLmNvZGVkdW1wLCBvcHRpb25zLnByb3BlcnRpZXNfZmlsZSwgcHJvcGVydGllcykKKworCitkZWYgeW9jdG9fbGF5ZXJfbGlzdF9zdWJjb21tYW5kKGFyZ3MsIHVzYWdlX3N0cik6CisgICAgIiIiCisgICAgQ29tbWFuZC1saW5lIGhhbmRsaW5nIGZvciBsaXN0aW5nIGF2YWlsYWJsZSBsYXllciBwcm9wZXJ0aWVzIGFuZAorICAgIHZhbHVlcy4gIFRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSBic3AuZW5naW5lLnlvY3RvX2xheWVyX2xpc3QoKQorICAgICIiIgorICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSA9IHVzYWdlX3N0cikKKworICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dGZpbGUiLCBhY3Rpb24gPSAic3RvcmUiLCBkZXN0ID0gInByb3BlcnRpZXNfZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscCA9ICJkdW1wIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGxheWVyIHByb3BlcnRpZXMgdG8gYSBKU09OIGZpbGUiKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIG5vdCB5b2N0b19sYXllcl9saXN0KGFyZ3MsIHNjcmlwdHNfcGF0aCwgb3B0aW9ucy5wcm9wZXJ0aWVzX2ZpbGUpOgorICAgICAgICBsb2dnaW5nLmVycm9yKCJCYWQgbGlzdCBhcmd1bWVudHMsIGV4aXRpbmdcbiIpCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitzdWJjb21tYW5kcyA9IHsKKyAgICAiY3JlYXRlIjogW3lvY3RvX2xheWVyX2NyZWF0ZV9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfY3JlYXRlX3VzYWdlLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfY3JlYXRlX2hlbHBdLAorICAgICJsaXN0IjogICBbeW9jdG9fbGF5ZXJfbGlzdF9zdWJjb21tYW5kLAorICAgICAgICAgICAgICAgeW9jdG9fbGF5ZXJfbGlzdF91c2FnZSwKKyAgICAgICAgICAgICAgIHlvY3RvX2xheWVyX2xpc3RfaGVscF0sCit9CisKKworZGVmIHN0YXJ0X2xvZ2dpbmcobG9nbGV2ZWwpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsbmFtZSA9ICd5b2N0by1sYXllci5sb2cnLCBmaWxlbW9kZSA9ICd3JywgbGV2ZWw9bG9nbGV2ZWwpCisKKworZGVmIG1haW4oKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodmVyc2lvbiA9ICJ5b2N0by1sYXllciB2ZXJzaW9uICVzIiAlIF9fdmVyc2lvbl9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSA9IHlvY3RvX2xheWVyX3VzYWdlKQorCisgICAgcGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItRCIsICItLWRlYnVnIiwgZGVzdCA9ICJkZWJ1ZyIsIGFjdGlvbiA9ICJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gRmFsc2UsIGhlbHAgPSAib3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uIikKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGxvZ2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nbGV2ZWwgPSBsb2dnaW5nLkRFQlVHCisgICAgc3RhcnRfbG9nZ2luZyhsb2dsZXZlbCkKKworICAgIGlmIGxlbihhcmdzKToKKyAgICAgICAgaWYgYXJnc1swXSA9PSAiaGVscCI6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMToKKyAgICAgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGludm9rZV9zdWJjb21tYW5kKGFyZ3MsIHBhcnNlciwgeW9jdG9fbGF5ZXJfaGVscF91c2FnZSwgc3ViY29tbWFuZHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0cnk6CisgICAgICAgIHJldCA9IG1haW4oKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJldCA9IDEKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKDUpCisgICAgc3lzLmV4aXQocmV0KQorCg==